summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib')
-rw-r--r--graphics/pgf/contrib/adigraph/LICENSE21
-rw-r--r--graphics/pgf/contrib/adigraph/README.md119
-rw-r--r--graphics/pgf/contrib/adigraph/adigraph-large.pngbin0 -> 158870 bytes
-rw-r--r--graphics/pgf/contrib/adigraph/adigraph.sty852
-rw-r--r--graphics/pgf/contrib/adigraph/adigraph_documentation.pdfbin0 -> 204715 bytes
-rw-r--r--graphics/pgf/contrib/adigraph/adigraph_documentation.tex1286
-rw-r--r--graphics/pgf/contrib/adigraph/adigraph_working_test.pdfbin0 -> 32107 bytes
-rw-r--r--graphics/pgf/contrib/adigraph/adigraph_working_test.tex150
-rw-r--r--graphics/pgf/contrib/adigraph/img_examples/example_0.jpgbin0 -> 22295 bytes
-rw-r--r--graphics/pgf/contrib/adigraph/img_examples/example_1.jpgbin0 -> 28096 bytes
-rw-r--r--graphics/pgf/contrib/adigraph/img_examples/example_2.jpgbin0 -> 25779 bytes
-rw-r--r--graphics/pgf/contrib/adigraph/img_examples/example_3.jpgbin0 -> 30001 bytes
-rw-r--r--graphics/pgf/contrib/adigraph/img_examples/pyadigraph.pngbin0 -> 83900 bytes
-rw-r--r--graphics/pgf/contrib/aobs-tikz/README16
-rw-r--r--graphics/pgf/contrib/aobs-tikz/aobs-tikz.dtx581
-rw-r--r--graphics/pgf/contrib/aobs-tikz/aobs-tikz.ins101
-rw-r--r--graphics/pgf/contrib/aobs-tikz/aobs-tikz.pdfbin0 -> 86721 bytes
-rw-r--r--graphics/pgf/contrib/battleship/README18
-rw-r--r--graphics/pgf/contrib/battleship/battleship.sty423
-rw-r--r--graphics/pgf/contrib/battleship/doc/CHANGES42
-rw-r--r--graphics/pgf/contrib/battleship/doc/INSTALL15
-rw-r--r--graphics/pgf/contrib/battleship/doc/battleship.pdfbin0 -> 82593 bytes
-rw-r--r--graphics/pgf/contrib/battleship/doc/battleship.tex276
-rw-r--r--graphics/pgf/contrib/battleship/doc/manifest.txt19
-rw-r--r--graphics/pgf/contrib/battleship/logicpuzzle.sty176
-rw-r--r--graphics/pgf/contrib/binarytree/README83
-rw-r--r--graphics/pgf/contrib/binarytree/binarytree.dtx1796
-rw-r--r--graphics/pgf/contrib/binarytree/binarytree.ins55
-rw-r--r--graphics/pgf/contrib/binarytree/binarytree.pdfbin0 -> 382466 bytes
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex1.pdfbin0 -> 24663 bytes
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex1.tex16
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex2.pdfbin0 -> 14004 bytes
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex2.tex22
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex3.pdfbin0 -> 8830 bytes
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex3.tex16
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex4.pdfbin0 -> 9310 bytes
-rw-r--r--graphics/pgf/contrib/binarytree/examples/binarytree-ex4.tex28
-rw-r--r--graphics/pgf/contrib/binarytree/examples/btree-5_up_0,0,0_3729359_7458719_655360_0.7_0.7_-lrr-x--_-llrr-x--_-rll-x--_-rrll-x--.pdfbin0 -> 9923 bytes
-rw-r--r--graphics/pgf/contrib/blochsphere/LICENSE417
-rw-r--r--graphics/pgf/contrib/blochsphere/README.md6
-rw-r--r--graphics/pgf/contrib/blochsphere/blochsphere.dtx854
-rw-r--r--graphics/pgf/contrib/blochsphere/blochsphere.ins57
-rw-r--r--graphics/pgf/contrib/blochsphere/blochsphere.pdfbin0 -> 95334 bytes
-rw-r--r--graphics/pgf/contrib/blochsphere/example.pdfbin0 -> 29938 bytes
-rw-r--r--graphics/pgf/contrib/blochsphere/example.tex30
-rw-r--r--graphics/pgf/contrib/bloques/README13
-rw-r--r--graphics/pgf/contrib/bloques/bloques.sty202
-rw-r--r--graphics/pgf/contrib/bloques/example.pdfbin0 -> 130623 bytes
-rw-r--r--graphics/pgf/contrib/bloques/example.tex305
-rw-r--r--graphics/pgf/contrib/blox/README36
-rw-r--r--graphics/pgf/contrib/blox/blox.dtx1046
-rw-r--r--graphics/pgf/contrib/blox/blox.pdfbin0 -> 424593 bytes
-rw-r--r--graphics/pgf/contrib/bodegraph/README10
-rw-r--r--graphics/pgf/contrib/bodegraph/bodegraph.pdfbin0 -> 379489 bytes
-rw-r--r--graphics/pgf/contrib/bodegraph/bodegraph.sty679
-rw-r--r--graphics/pgf/contrib/bodegraph/bodegraph.tex1263
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.table104
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.table104
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.table105
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.table0
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.table0
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.table205
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.table205
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.table105
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.table205
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.table105
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.table205
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.table205
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.table104
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.table104
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.table0
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.table104
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.table0
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.table154
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.table154
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.table154
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.table104
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.table104
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.table85
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.table85
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.table155
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.table105
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.table54
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.table6
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.table35
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.gnuplot2
-rw-r--r--graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.table35
-rw-r--r--graphics/pgf/contrib/braids/README.txt10
-rw-r--r--graphics/pgf/contrib/braids/braids.pdfbin0 -> 314455 bytes
-rw-r--r--graphics/pgf/contrib/braids/braids.tex481
-rw-r--r--graphics/pgf/contrib/braids/braids_code.dtx2321
-rw-r--r--graphics/pgf/contrib/braids/braids_code.pdfbin0 -> 410835 bytes
-rw-r--r--graphics/pgf/contrib/callouts/A319neo.jpgbin0 -> 86693 bytes
-rw-r--r--graphics/pgf/contrib/callouts/README.md18
-rw-r--r--graphics/pgf/contrib/callouts/callouts.pdfbin0 -> 212254 bytes
-rw-r--r--graphics/pgf/contrib/callouts/callouts.sty93
-rw-r--r--graphics/pgf/contrib/callouts/callouts.tex111
-rw-r--r--graphics/pgf/contrib/celtic/README9
-rw-r--r--graphics/pgf/contrib/celtic/celtic.dtx1092
-rw-r--r--graphics/pgf/contrib/celtic/celtic.pdfbin0 -> 357298 bytes
-rw-r--r--graphics/pgf/contrib/celtic/celtic_code.pdfbin0 -> 330231 bytes
-rw-r--r--graphics/pgf/contrib/celtic/celtic_doc.tex229
-rw-r--r--graphics/pgf/contrib/celtic/tikzlibraryceltic.code.tex536
-rw-r--r--graphics/pgf/contrib/chordbars/README.md12
-rw-r--r--graphics/pgf/contrib/chordbars/chordbars.sty393
-rw-r--r--graphics/pgf/contrib/chordbars/chordbars_manual.pdfbin0 -> 191771 bytes
-rw-r--r--graphics/pgf/contrib/chordbars/chordbars_manual.tex294
-rw-r--r--graphics/pgf/contrib/chordbars/listing_HOTRS.lst6
-rw-r--r--graphics/pgf/contrib/chordbars/listing_RBP.lst5
-rw-r--r--graphics/pgf/contrib/chordbars/listing_blues.lst8
-rw-r--r--graphics/pgf/contrib/chordbars/listing_halfbar.lst10
-rw-r--r--graphics/pgf/contrib/chordbars/listing_sharp_flat.lst6
-rw-r--r--graphics/pgf/contrib/chordbox/README.md44
-rw-r--r--graphics/pgf/contrib/chordbox/chordbox.pdfbin0 -> 556993 bytes
-rw-r--r--graphics/pgf/contrib/chordbox/chordbox.sty210
-rw-r--r--graphics/pgf/contrib/chordbox/chordbox.tex472
-rw-r--r--graphics/pgf/contrib/circuitikz/README.md73
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/changelog.tex545
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdfbin0 -> 15503 bytes
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikz-context.tex22
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdfbin0 -> 750300 bytes
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex5220
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/compatibility.tex17
-rw-r--r--graphics/pgf/contrib/circuitikz/doc/ctikzmanutils.sty146
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz-0.4.sty10127
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz-0.6.sty10290
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz-0.7.sty10682
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz-0.8.3.sty11141
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz-0.9.3.sty16743
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/circuitikz.sty375
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/ctikzstyle-example.tex11
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/ctikzstyle-legacy.tex136
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/ctikzstyle-romano.tex74
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex1754
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex4891
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcirccurrent.tex198
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircflow.tex193
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcirclabel.tex342
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircmonopoles.tex1011
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircmultipoles.tex857
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex861
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircquadpoles.tex1124
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircshapes.tex696
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex4662
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircutils.tex60
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/pgfcircvoltage.tex476
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.8.3.tex10941
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.9.3.tex16507
-rw-r--r--graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex139
-rw-r--r--graphics/pgf/contrib/codeanatomy/README.md64
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.dtx532
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.ins62
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdfbin0 -> 123921 bytes
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex594
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.pdfbin0 -> 97601 bytes
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdfbin0 -> 82738 bytes
-rw-r--r--graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex383
-rw-r--r--graphics/pgf/contrib/codeanatomy/literatur.bib8
-rw-r--r--graphics/pgf/contrib/dynkin-diagrams/README21
-rw-r--r--graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib465
-rw-r--r--graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdfbin0 -> 744590 bytes
-rw-r--r--graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty4282
-rw-r--r--graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex1757
l---------graphics/pgf/contrib/fast1
-rw-r--r--graphics/pgf/contrib/fast-diagram/README33
-rw-r--r--graphics/pgf/contrib/fast-diagram/fast-diagram.sty340
-rw-r--r--graphics/pgf/contrib/fast-diagram/help.pdfbin0 -> 1050633 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/help.tex72
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/commandes.tex312
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/exemple.tex148
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/antenne.pngbin0 -> 40807 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/batterie.pngbin0 -> 60212 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/biellettes.pngbin0 -> 77957 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/bouton.pngbin0 -> 30711 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/moteur.pngbin0 -> 58562 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/pedalier.pngbin0 -> 46548 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/pignons.pngbin0 -> 25646 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/recepteur.pngbin0 -> 76344 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/roue.pngbin0 -> 56090 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/images/servomoteur.pngbin0 -> 51772 bytes
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/installation.tex44
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/intro.tex47
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/miseEnForme.tex474
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/reglages.tex42
-rw-r--r--graphics/pgf/contrib/fast-diagram/sources_help/tikz.tex218
-rw-r--r--graphics/pgf/contrib/flowchart/README32
-rw-r--r--graphics/pgf/contrib/flowchart/flowchart.dtx1390
-rw-r--r--graphics/pgf/contrib/flowchart/flowchart.ins88
-rw-r--r--graphics/pgf/contrib/flowchart/flowchart.pdfbin0 -> 434564 bytes
-rw-r--r--graphics/pgf/contrib/forest/LICENCE416
-rw-r--r--graphics/pgf/contrib/forest/README37
-rw-r--r--graphics/pgf/contrib/forest/forest-compat.sty271
-rw-r--r--graphics/pgf/contrib/forest/forest-doc.ins26
-rw-r--r--graphics/pgf/contrib/forest/forest-doc.ist25
-rw-r--r--graphics/pgf/contrib/forest/forest-doc.pdfbin0 -> 1318520 bytes
-rw-r--r--graphics/pgf/contrib/forest/forest-doc.sty244
-rw-r--r--graphics/pgf/contrib/forest/forest-doc.tex6949
-rw-r--r--graphics/pgf/contrib/forest/forest-index.dtx911
-rw-r--r--graphics/pgf/contrib/forest/forest-libs.dtx528
-rw-r--r--graphics/pgf/contrib/forest/forest.dtx10913
-rw-r--r--graphics/pgf/contrib/forest/forest.ins28
-rw-r--r--graphics/pgf/contrib/forest/forest.pdfbin0 -> 498670 bytes
-rw-r--r--graphics/pgf/contrib/forest/tex.bib20
-rw-r--r--graphics/pgf/contrib/grafcet/README4
-rw-r--r--graphics/pgf/contrib/grafcet/grafcet.pdfbin0 -> 405789 bytes
-rw-r--r--graphics/pgf/contrib/grafcet/grafcet.sty620
-rw-r--r--graphics/pgf/contrib/grafcet/grafcet.tex2024
-rw-r--r--graphics/pgf/contrib/harveyballs/README25
-rw-r--r--graphics/pgf/contrib/harveyballs/harveyballs-Manual.pdfbin0 -> 144233 bytes
-rw-r--r--graphics/pgf/contrib/harveyballs/harveyballs-Manual.tex142
-rw-r--r--graphics/pgf/contrib/harveyballs/harveyballs.sty56
-rw-r--r--graphics/pgf/contrib/hf-tikz/README15
-rw-r--r--graphics/pgf/contrib/hf-tikz/hf-tikz.dtx1108
-rw-r--r--graphics/pgf/contrib/hf-tikz/hf-tikz.ins76
-rw-r--r--graphics/pgf/contrib/hf-tikz/hf-tikz.pdfbin0 -> 124608 bytes
-rw-r--r--graphics/pgf/contrib/hobby/README.txt14
-rw-r--r--graphics/pgf/contrib/hobby/hobby.dtx3500
-rw-r--r--graphics/pgf/contrib/hobby/hobby.pdfbin0 -> 523036 bytes
-rw-r--r--graphics/pgf/contrib/hobby/hobby_code.pdfbin0 -> 444339 bytes
-rw-r--r--graphics/pgf/contrib/hobby/hobby_doc.tex917
-rw-r--r--graphics/pgf/contrib/istgame/README.txt31
-rw-r--r--graphics/pgf/contrib/istgame/istgame-doc-v2.0.tex7464
-rw-r--r--graphics/pgf/contrib/istgame/istgame-doc.pdfbin0 -> 707432 bytes
-rw-r--r--graphics/pgf/contrib/istgame/istgame-doc.tex193
-rw-r--r--graphics/pgf/contrib/istgame/istgame.ist16
-rw-r--r--graphics/pgf/contrib/istgame/istgame.sty3451
-rw-r--r--graphics/pgf/contrib/jigsaw/LICENSE.txt415
-rw-r--r--graphics/pgf/contrib/jigsaw/README.md7
-rw-r--r--graphics/pgf/contrib/jigsaw/jigsaw-doc.pdfbin0 -> 169316 bytes
-rw-r--r--graphics/pgf/contrib/jigsaw/jigsaw-doc.tex205
-rw-r--r--graphics/pgf/contrib/jigsaw/jigsaw.sty100
-rw-r--r--graphics/pgf/contrib/karnaugh-map/README.md21
-rw-r--r--graphics/pgf/contrib/karnaugh-map/karnaugh-map.dtx1266
-rw-r--r--graphics/pgf/contrib/karnaugh-map/karnaugh-map.ins29
-rw-r--r--graphics/pgf/contrib/karnaugh-map/karnaugh-map.pdfbin0 -> 241232 bytes
-rw-r--r--graphics/pgf/contrib/karnaughmap/README22
-rw-r--r--graphics/pgf/contrib/karnaughmap/karnaughmap.dtx1815
-rw-r--r--graphics/pgf/contrib/karnaughmap/karnaughmap.ins64
-rw-r--r--graphics/pgf/contrib/karnaughmap/karnaughmap.pdfbin0 -> 325634 bytes
-rw-r--r--graphics/pgf/contrib/ladder/README.md29
-rw-r--r--graphics/pgf/contrib/ladder/ladder.pdfbin0 -> 211838 bytes
-rw-r--r--graphics/pgf/contrib/ladder/ladder.sty127
-rw-r--r--graphics/pgf/contrib/ladder/ladder.tex268
-rw-r--r--graphics/pgf/contrib/logicpuzzle/README109
-rw-r--r--graphics/pgf/contrib/logicpuzzle/logicpuzzle.dtx8896
-rw-r--r--graphics/pgf/contrib/logicpuzzle/logicpuzzle.pdfbin0 -> 810773 bytes
-rw-r--r--graphics/pgf/contrib/logicpuzzle/qrcode.pngbin0 -> 1855 bytes
-rw-r--r--graphics/pgf/contrib/makeshape/README64
-rw-r--r--graphics/pgf/contrib/makeshape/makeshape.dtx1757
-rw-r--r--graphics/pgf/contrib/makeshape/makeshape.ins108
-rw-r--r--graphics/pgf/contrib/makeshape/makeshape.pdfbin0 -> 404031 bytes
-rw-r--r--graphics/pgf/contrib/makeshape/ontesting.dtx1124
-rw-r--r--graphics/pgf/contrib/makeshape/ontesting.pdfbin0 -> 355325 bytes
-rw-r--r--graphics/pgf/contrib/makeshape/testsample.pdfbin0 -> 108691 bytes
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/LICENSE5
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/README.md34
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/example.pdfbin0 -> 33635 bytes
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/example.tex17
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/manual.pdfbin0 -> 114680 bytes
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/manual.tex397
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex330
-rw-r--r--graphics/pgf/contrib/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex278
-rw-r--r--graphics/pgf/contrib/memorygraphs/README.md30
-rw-r--r--graphics/pgf/contrib/memorygraphs/memorygraphs.pdfbin0 -> 187498 bytes
-rw-r--r--graphics/pgf/contrib/memorygraphs/memorygraphs.sty167
-rw-r--r--graphics/pgf/contrib/memorygraphs/memorygraphs.tex328
-rw-r--r--graphics/pgf/contrib/milsymb/LICENCE.md1
-rw-r--r--graphics/pgf/contrib/milsymb/README.md8
-rw-r--r--graphics/pgf/contrib/milsymb/manual_examples/772px-1st_Marine_Division_insignia.pngbin0 -> 591878 bytes
-rw-r--r--graphics/pgf/contrib/milsymb/manual_examples/mef.tex108
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Activity_main_table.tex29
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Activity_upper_table.tex15
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Air_lower_table.tex16
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Air_main_table.tex46
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Air_upper_table.tex34
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Equipment_main_table.tex85
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Equipment_mobility_table.tex18
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Installation_main_table.tex27
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Installation_upper_table.tex20
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Land_lower_table.tex51
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Land_main_table.tex130
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Land_upper_table.tex93
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Missile_left_table.tex13
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Missile_right_table.tex12
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_lower_table.tex22
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_main_table.tex29
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_upper_table.tex24
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_lower_table.tex21
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_main_table.tex93
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_upper_table.tex24
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Space_lower_table.tex10
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Space_main_table.tex36
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/Space_upper_table.tex12
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/gen_hidden.py67
-rw-r--r--graphics/pgf/contrib/milsymb/manual_scripts/gen_symbol_tables.py74
-rw-r--r--graphics/pgf/contrib/milsymb/milsymb.pdf13632
-rw-r--r--graphics/pgf/contrib/milsymb/milsymb.sty3646
-rw-r--r--graphics/pgf/contrib/milsymb/milsymb.tex1613
-rw-r--r--graphics/pgf/contrib/neuralnetwork/examples/neural-networks-ebook.pdfbin0 -> 594709 bytes
-rw-r--r--graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.pdfbin0 -> 30526 bytes
-rw-r--r--graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.tex14
-rw-r--r--graphics/pgf/contrib/neuralnetwork/examples/xor.pdfbin0 -> 25058 bytes
-rw-r--r--graphics/pgf/contrib/neuralnetwork/examples/xor.tex36
-rw-r--r--graphics/pgf/contrib/neuralnetwork/neuralnetwork.sty250
-rw-r--r--graphics/pgf/contrib/penrose/README.txt8
-rw-r--r--graphics/pgf/contrib/penrose/penrose.pdfbin0 -> 552561 bytes
-rw-r--r--graphics/pgf/contrib/penrose/penrose.tex731
-rw-r--r--graphics/pgf/contrib/penrose/penrose_code.dtx2724
-rw-r--r--graphics/pgf/contrib/penrose/penrose_code.pdfbin0 -> 394873 bytes
-rw-r--r--graphics/pgf/contrib/pgf-blur/README.md73
-rw-r--r--graphics/pgf/contrib/pgf-blur/pgf-blur.dtx911
-rw-r--r--graphics/pgf/contrib/pgf-blur/pgf-blur.pdfbin0 -> 250036 bytes
-rw-r--r--graphics/pgf/contrib/pgf-cmykshadings/README.md94
-rw-r--r--graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.dtx2059
-rw-r--r--graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.ins75
-rw-r--r--graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.pdfbin0 -> 470138 bytes
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/cloud.svg93
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/cloud.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/color.tex6
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/explode.tex7
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/first-pie.svg75
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/first-pie.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/legend.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/polar.svg75
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/polar.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/population.tex27
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/radius.tex7
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/scalefont.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/shadow.tex4
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/square.svg75
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/square.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/sum.tex5
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/text-inside.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/demo/text.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/logo.pngbin0 -> 9181 bytes
-rw-r--r--graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdfbin0 -> 202715 bytes
-rw-r--r--graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex200
-rw-r--r--graphics/pgf/contrib/pgf-pie/pgf-pie.sty439
-rw-r--r--graphics/pgf/contrib/pgf-soroban/Changes5
-rw-r--r--graphics/pgf/contrib/pgf-soroban/README10
-rw-r--r--graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.bib56
-rw-r--r--graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.pdfbin0 -> 347332 bytes
-rw-r--r--graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.tex298
-rw-r--r--graphics/pgf/contrib/pgf-soroban/pgf-soroban.sty106
-rw-r--r--graphics/pgf/contrib/pgf-spectra/README20
-rw-r--r--graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty696
-rw-r--r--graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdfbin0 -> 591094 bytes
-rw-r--r--graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex266
-rw-r--r--graphics/pgf/contrib/pgf-spectra/spectra.data.tex116
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/COPYING14
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/README3
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/abstract-class.tex9
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.svg791
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.tex69
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/aggregation.tex10
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/association.tex22
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/class.tex10
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/composition.tex10
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/implement-interface.tex16
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/inheritance.tex26
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/interface.tex6
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/note.tex3
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/object-include-methods.tex10
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/object.tex6
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/package.tex28
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/unidirectional-association.tex20
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/demo/visibility.tex17
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/logo.pngbin0 -> 38004 bytes
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.pdfbin0 -> 269669 bytes
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.tex149
-rw-r--r--graphics/pgf/contrib/pgf-umlcd/pgf-umlcd.sty353
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/README3
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/block.tex9
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/call.tex7
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/callself.tex6
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/customize.log237
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/customize.tex9
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/distance.tex6
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/empty.tex2
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/instance.tex3
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/message.tex6
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/messcall.tex7
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/multi-threads-example.tex37
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/nested-call.tex10
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/no-thread-example.tex33
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/non-instantaneous-message.tex7
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/postlevel.log216
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/postlevel.tex8
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/prelevel.tex12
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/single-thread-example.tex29
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/sync-clock.tex16
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/thread.tex3
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/threadbias.log266
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/demo/threadbias.tex17
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/diagrams.pdfbin0 -> 24427 bytes
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/logo.pngbin0 -> 4508 bytes
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.pdfbin0 -> 235682 bytes
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.tex192
-rw-r--r--graphics/pgf/contrib/pgf-umlsd/pgf-umlsd.sty329
-rw-r--r--graphics/pgf/contrib/pgfgantt/README19
-rw-r--r--graphics/pgf/contrib/pgfgantt/pgfgantt.dtx5402
-rw-r--r--graphics/pgf/contrib/pgfgantt/pgfgantt.ins61
-rw-r--r--graphics/pgf/contrib/pgfgantt/pgfgantt.pdfbin0 -> 941473 bytes
-rw-r--r--graphics/pgf/contrib/pgfmorepages/README14
-rw-r--r--graphics/pgf/contrib/pgfmorepages/pgfmorepages.pdfbin0 -> 61834 bytes
-rw-r--r--graphics/pgf/contrib/pgfmorepages/pgfmorepages.sty1513
-rw-r--r--graphics/pgf/contrib/pgfmorepages/pgfmorepages.tex390
-rw-r--r--graphics/pgf/contrib/pgfornament-han/README.md17
-rw-r--r--graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty206
-rw-r--r--graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty157
-rw-r--r--graphics/pgf/contrib/pgfornament-han/cncolours.sty261
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han1.pgf64
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han10.pgf112
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han11.pgf68
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han12.pgf124
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han13.pgf80
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han14.pgf146
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han15.pgf16
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han16.pgf24
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han17.pgf24
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han18.pgf40
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han19.pgf99
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han2.pgf124
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han20.pgf90
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han21.pgf64
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han22.pgf122
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han23.pgf48
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han24.pgf91
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han25.pgf64
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han26.pgf122
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han27.pgf64
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han28.pgf122
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han29.pgf14
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han3.pgf80
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han30.pgf20
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han31.pgf20
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han32.pgf32
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han33.pgf26
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han34.pgf44
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han35.pgf30
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han36.pgf52
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han37.pgf34
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han38.pgf60
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han39.pgf46
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han4.pgf156
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han40.pgf84
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han41.pgf30
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han42.pgf53
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han43.pgf34
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han44.pgf61
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han45.pgf38
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han46.pgf68
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han47.pgf42
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han48.pgf76
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han49.pgf338
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han5.pgf56
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han50.pgf955
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han51.pgf273
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han52.pgf780
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han53.pgf312
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han54.pgf898
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han55.pgf79
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han56.pgf74
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han57.pgf131
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han58.pgf73
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han59.pgf369
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han6.pgf104
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han60.pgf109
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han61.pgf711
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han62.pgf37
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han63.pgf199
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han64.pgf50
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han65.pgf275
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han66.pgf60
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han67.pgf328
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han68.pgf49
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han69.pgf237
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han7.pgf64
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han70.pgf40
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han71.pgf189
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han72.pgf36
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han73.pgf223
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han74.pgf55
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han75.pgf287
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han76.pgf30
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han77.pgf88
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han78.pgf432
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han8.pgf116
-rw-r--r--graphics/pgf/contrib/pgfornament-han/han/han9.pgf62
-rw-r--r--graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.pdf1987
-rw-r--r--graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.tex89
-rw-r--r--graphics/pgf/contrib/pgfornament-han/lppl-1-3c.txt416
-rw-r--r--graphics/pgf/contrib/pgfornament-han/pgflibraryhan.code.tex89
-rw-r--r--graphics/pgf/contrib/pgfornament-han/pgfornament-han.sty71
-rw-r--r--graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.pdf3917
-rw-r--r--graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.tex976
-rw-r--r--graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdfbin0 -> 58401 bytes
-rw-r--r--graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.tex66
-rw-r--r--graphics/pgf/contrib/pgfplots/INSTALL1
-rw-r--r--graphics/pgf/contrib/pgfplots/README402
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/Makefile6
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/TeX-programming-notes.pdfbin0 -> 366475 bytes
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplots.pdfbin0 -> 12992705 bytes
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.pdfbin0 -> 16022 bytes
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tex48
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tuc217
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.pdfbin0 -> 34260 bytes
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.tex49
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.pdfbin0 -> 34575 bytes
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.tex58
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotstable.pdfbin0 -> 707649 bytes
-rw-r--r--graphics/pgf/contrib/pgfplots/doc/pgfplotstodo.pdfbin0 -> 173738 bytes
-rw-r--r--graphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.m343
-rwxr-xr-xgraphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.sh79
-rwxr-xr-xgraphics/pgf/contrib/pgfplots/scripts/pgf2pdf.sh287
-rw-r--r--graphics/pgf/contrib/pgfplots/scripts/pgfplots.py95
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/binary.lua41
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/bugtracker.sty429
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/colormap.lua156
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/functions.lua651
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/meshplothandler.lua294
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/parser.lua504
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibraryfillbetween.code.tex1265
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colorbrewer.code.tex4149
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colortol.code.tex766
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.code.tex638
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvipdfmx.def179
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvips.def114
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatex.def168
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatexpatch.def30
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def162
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-xetex.def30
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.code.tex50
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.sty2
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.code.tex12647
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.errorbars.code.tex608
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.lua45
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.markers.code.tex367
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.paths.code.tex71
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.revision.tex15
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.scaling.code.tex3399
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.sty155
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplots.tex50
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsarray.code.tex733
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.code.tex603
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.data.code.tex291
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotscolor.code.tex630
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotscolormap.code.tex2500
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotscoordprocessing.code.tex9721
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotscore.code.tex465
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsdeque.code.tex125
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotslibrary.code.tex94
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructure.code.tex440
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructureext.code.tex615
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsmatrix.code.tex544
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplothandler.code.tex3528
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplotimage.code.tex545
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_leq.code.tex279
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_loader.code.tex361
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_misc.code.tex885
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex567
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreimage.code.tex584
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorelayers.code.tex217
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorescopes.code.tex607
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeys.code.tex1067
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex1041
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex2326
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryintersections.code.tex1190
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryluamath.code.tex559
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex1141
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.code.tex90
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex450
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex1119
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmathfloat.code.tex2665
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfutil-common-lists.tex184
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternal.sty163
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternalshared.code.tex1732
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex133
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_trig_format.code.tex380
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex3083
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsstackedplots.code.tex688
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotssysgeneric.code.tex84
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotstable.code.tex3014
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotstable.coltype.code.tex93
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotstable.sty39
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotstable.tex38
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotstableshared.code.tex2111
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotstexio.lua500
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsticks.code.tex2585
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.code.tex2203
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.lua139
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.verb.code.tex97
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfregressiontest.sty159
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/pgfsys-luatexpatch.def441
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/plothandler.lua998
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/statistics.lua400
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/streamer.lua195
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/t-pgfplots.tex81
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/t-pgfplotstable.tex41
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolorbrewer.code.tex536
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolortol.code.tex277
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarydateplot.code.tex24
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarydecorations.softclip.code.tex517
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibraryfillbetween.code.tex577
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.clickable.code.tex1393
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.colormaps.code.tex359
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.dateplot.code.tex270
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.decorations.softclip.code.tex36
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.external.code.tex131
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.fillbetween.code.tex240
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.groupplots.code.tex530
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.patchplots.code.tex2723
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.polar.code.tex799
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.smithchart.code.tex1678
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.statistics.code.tex1221
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.ternary.code.tex928
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.units.code.tex224
-rw-r--r--graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplotsclickable.code.tex24
-rw-r--r--graphics/pgf/contrib/prooftrees/README39
-rw-r--r--graphics/pgf/contrib/prooftrees/manifest.txt18
-rw-r--r--graphics/pgf/contrib/prooftrees/prooftrees.pdfbin0 -> 856540 bytes
-rw-r--r--graphics/pgf/contrib/prooftrees/prooftrees.sty796
-rw-r--r--graphics/pgf/contrib/prooftrees/prooftrees.tex1953
-rw-r--r--graphics/pgf/contrib/prooftrees/prooftrees_biber.bib27
-rw-r--r--graphics/pgf/contrib/ptolemaicastronomy/README.md37
-rw-r--r--graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.dtx471
-rw-r--r--graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.pdfbin0 -> 246152 bytes
-rw-r--r--graphics/pgf/contrib/pxpgfmark/LICENSE27
-rw-r--r--graphics/pgf/contrib/pxpgfmark/README37
-rw-r--r--graphics/pgf/contrib/pxpgfmark/pxpgfmark.sty18
-rw-r--r--graphics/pgf/contrib/quantikz/README.md7
-rw-r--r--graphics/pgf/contrib/quantikz/quantikz.pdfbin0 -> 513931 bytes
-rw-r--r--graphics/pgf/contrib/quantikz/quantikz.tex1101
-rw-r--r--graphics/pgf/contrib/quantikz/tikzlibraryquantikz.code.tex691
-rw-r--r--graphics/pgf/contrib/rank-2-roots/README18
-rw-r--r--graphics/pgf/contrib/rank-2-roots/rank-2-roots.bib451
-rw-r--r--graphics/pgf/contrib/rank-2-roots/rank-2-roots.pdfbin0 -> 396098 bytes
-rw-r--r--graphics/pgf/contrib/rank-2-roots/rank-2-roots.sty762
-rw-r--r--graphics/pgf/contrib/rank-2-roots/rank-2-roots.tex1243
-rw-r--r--graphics/pgf/contrib/reotex/README34
-rw-r--r--graphics/pgf/contrib/reotex/reotex.pdfbin0 -> 194864 bytes
-rw-r--r--graphics/pgf/contrib/reotex/reotex.sty950
-rw-r--r--graphics/pgf/contrib/reotex/reotex.tex867
-rw-r--r--graphics/pgf/contrib/rulercompass/README10
-rw-r--r--graphics/pgf/contrib/rulercompass/rulercompass.dtx811
-rw-r--r--graphics/pgf/contrib/rulercompass/rulercompass.pdfbin0 -> 213768 bytes
-rw-r--r--graphics/pgf/contrib/rulercompass/rulercompass_doc.pdfbin0 -> 262114 bytes
-rw-r--r--graphics/pgf/contrib/rulercompass/rulercompass_doc.tex479
-rw-r--r--graphics/pgf/contrib/rulercompass/tikzlibraryrulercompass.code.tex495
-rw-r--r--graphics/pgf/contrib/sa-tikz/README13
-rw-r--r--graphics/pgf/contrib/sa-tikz/doc/macros/pgfmanual-en-macros.tex1740
-rw-r--r--graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.pdfbin0 -> 890448 bytes
-rw-r--r--graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.tex1123
-rw-r--r--graphics/pgf/contrib/sa-tikz/latex/sa-tikz.sty1246
-rw-r--r--graphics/pgf/contrib/sa-tikz/latex/tikzlibraryswitching-architectures.code.tex1248
-rw-r--r--graphics/pgf/contrib/schemabloc/README26
-rw-r--r--graphics/pgf/contrib/schemabloc/schemabloc.pdfbin0 -> 180169 bytes
-rw-r--r--graphics/pgf/contrib/schemabloc/schemabloc.sty305
-rw-r--r--graphics/pgf/contrib/schemabloc/schemabloc.tex1370
-rw-r--r--graphics/pgf/contrib/scsnowman/LICENSE25
-rw-r--r--graphics/pgf/contrib/scsnowman/Makefile32
-rw-r--r--graphics/pgf/contrib/scsnowman/README.md31
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman-normal.def192
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman-sample.pdfbin0 -> 66401 bytes
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman-sample.tex167
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman-zrtest.pdfbin0 -> 27023 bytes
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman-zrtest.tex21
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman.pdfbin0 -> 388258 bytes
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman.sty381
-rw-r--r--graphics/pgf/contrib/scsnowman/scsnowman.tex485
-rw-r--r--graphics/pgf/contrib/scsnowman/sctkzsym-base.sty150
-rw-r--r--graphics/pgf/contrib/setdeck/README42
-rw-r--r--graphics/pgf/contrib/setdeck/setdeck.pdfbin0 -> 61262 bytes
-rw-r--r--graphics/pgf/contrib/setdeck/setdeck.sty1250
-rw-r--r--graphics/pgf/contrib/setdeck/setdeck.tex76
-rw-r--r--graphics/pgf/contrib/smartdiagram/README20
-rw-r--r--graphics/pgf/contrib/smartdiagram/smartdiagram.dtx2253
-rw-r--r--graphics/pgf/contrib/smartdiagram/smartdiagram.ins99
-rw-r--r--graphics/pgf/contrib/smartdiagram/smartdiagram.pdfbin0 -> 267814 bytes
-rw-r--r--graphics/pgf/contrib/spath3/README9
-rw-r--r--graphics/pgf/contrib/spath3/calligraphy_doc.pdfbin0 -> 288184 bytes
-rw-r--r--graphics/pgf/contrib/spath3/calligraphy_doc.tex258
-rw-r--r--graphics/pgf/contrib/spath3/knots_doc.pdfbin0 -> 384979 bytes
-rw-r--r--graphics/pgf/contrib/spath3/knots_doc.tex484
-rw-r--r--graphics/pgf/contrib/spath3/spath3.dtx4228
-rw-r--r--graphics/pgf/contrib/spath3/spath3_code.pdfbin0 -> 439282 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/README.md109
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.pdfbin0 -> 107163 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.tex174
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.pdfbin0 -> 48774 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.tex92
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.pdfbin0 -> 193243 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.tex397
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.pdfbin0 -> 77839 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.tex158
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.pdfbin0 -> 221884 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.tex284
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.pdfbin0 -> 91999 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.tex75
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.pdfbin0 -> 38364 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.tex90
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.pdfbin0 -> 149054 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.tex136
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).pdfbin0 -> 56664 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).tex76
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).pdfbin0 -> 139996 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).tex233
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.pdfbin0 -> 87417 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.tex323
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.pdfbin0 -> 67087 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.tex133
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/hatcher.pdfbin0 -> 25895 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/hatcher.tex126
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.pdfbin0 -> 20766 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.tex78
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-KORP8.tex34
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2a.tex24
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2b.tex18
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-imJ.tex32
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-insert.tex33
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-tikz.tex25
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/pgfmanual-en-macros.tex1762
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.pdfbin0 -> 238471 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.tex121
-rwxr-xr-xgraphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-draftmode.pdfbin0 -> 902727 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-layoutcharts.tex205
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.pdfbin0 -> 842250 bytes
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.tex2087
-rw-r--r--graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanualpreamble.tex546
-rwxr-xr-xgraphics/pgf/contrib/spectralsequences/manual/sseqmanualtest.tex0
-rw-r--r--graphics/pgf/contrib/spectralsequences/spectralsequences.sty338
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqcheckdefinitions.code.tex223
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqdrawing.code.tex1502
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqforeach.code.tex266
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqkeys.code.tex2073
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqloadstore.code.tex189
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqmacromakers.code.tex490
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqmain.code.tex1700
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqmessages.code.tex580
-rw-r--r--graphics/pgf/contrib/spectralsequences/sseqparsers.code.tex1746
-rw-r--r--graphics/pgf/contrib/stanli/README.md205
-rw-r--r--graphics/pgf/contrib/stanli/stanli.pdfbin0 -> 445667 bytes
-rw-r--r--graphics/pgf/contrib/stanli/stanli.sty2107
-rw-r--r--graphics/pgf/contrib/stanli/stanli.tex5288
-rw-r--r--graphics/pgf/contrib/structmech/README.md31
-rw-r--r--graphics/pgf/contrib/structmech/doc/structmech.pdfbin0 -> 158828 bytes
-rw-r--r--graphics/pgf/contrib/structmech/doc/structmech.tex486
-rw-r--r--graphics/pgf/contrib/structmech/tex/structmech.sty427
-rw-r--r--graphics/pgf/contrib/ticollege/README22
-rw-r--r--graphics/pgf/contrib/ticollege/doc/IndexHead.ist10
-rw-r--r--graphics/pgf/contrib/ticollege/doc/ticollege-doc.pdfbin0 -> 366516 bytes
-rw-r--r--graphics/pgf/contrib/ticollege/doc/ticollege-doc.tex676
-rw-r--r--graphics/pgf/contrib/ticollege/latex/ticollege.sty454
-rw-r--r--graphics/pgf/contrib/tikz-3dplot/CHANGELOG5
-rw-r--r--graphics/pgf/contrib/tikz-3dplot/README13
-rw-r--r--graphics/pgf/contrib/tikz-3dplot/externalize_images.bat7
-rw-r--r--graphics/pgf/contrib/tikz-3dplot/tikz-3dplot.sty931
-rw-r--r--graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.pdfbin0 -> 457400 bytes
-rw-r--r--graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.tex1997
-rw-r--r--graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation_figures.tex281
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/LICENSE_GPL674
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/LICENSE_LPPL416
l---------graphics/pgf/contrib/tikz-bayesnet/README1
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/README.rst120
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/example.tex158
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/model_citation_influence.tex135
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/model_lda.tex62
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/model_pca.tex36
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/model_pca2.tex71
-rw-r--r--graphics/pgf/contrib/tikz-bayesnet/tikzlibrarybayesnet.code.tex140
-rw-r--r--graphics/pgf/contrib/tikz-cd/README.md16
-rw-r--r--graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdfbin0 -> 266756 bytes
-rw-r--r--graphics/pgf/contrib/tikz-cd/tikz-cd-doc.tex1450
-rw-r--r--graphics/pgf/contrib/tikz-cd/tikz-cd.sty20
-rw-r--r--graphics/pgf/contrib/tikz-cd/tikzlibrarycd.code.tex573
-rw-r--r--graphics/pgf/contrib/tikz-dependency/AUTHORS1
-rw-r--r--graphics/pgf/contrib/tikz-dependency/LICENSE31
-rw-r--r--graphics/pgf/contrib/tikz-dependency/README47
-rw-r--r--graphics/pgf/contrib/tikz-dependency/VERSION1
-rw-r--r--graphics/pgf/contrib/tikz-dependency/pgfmanual-en-macros.tex1209
-rw-r--r--graphics/pgf/contrib/tikz-dependency/pgfmanual.code.tex65
-rw-r--r--graphics/pgf/contrib/tikz-dependency/pgfmanual.pdflinks.code.tex414
-rw-r--r--graphics/pgf/contrib/tikz-dependency/pgfmanual.prettyprinter.code.tex1095
-rw-r--r--graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.pdfbin0 -> 732387 bytes
-rw-r--r--graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.tex1684
-rw-r--r--graphics/pgf/contrib/tikz-dependency/tikz-dependency.sty319
-rw-r--r--graphics/pgf/contrib/tikz-dimline/README73
-rw-r--r--graphics/pgf/contrib/tikz-dimline/dimline1.pngbin0 -> 18279 bytes
-rw-r--r--graphics/pgf/contrib/tikz-dimline/dimline2.pngbin0 -> 36794 bytes
-rw-r--r--graphics/pgf/contrib/tikz-dimline/dimline3.pngbin0 -> 36960 bytes
-rw-r--r--graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.pdfbin0 -> 83280 bytes
-rw-r--r--graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.tex422
-rw-r--r--graphics/pgf/contrib/tikz-dimline/tikz-dimline.sty189
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/README.md48
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/changes.txt88
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/shell_escape.jpgbin0 -> 48826 bytes
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.sty48
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.pdfbin0 -> 333745 bytes
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.tex2174
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/tikzfeynhand.keys.code.tex955
-rw-r--r--graphics/pgf/contrib/tikz-feynhand/tikzlibraryfeynhand.code.tex280
-rw-r--r--graphics/pgf/contrib/tikz-feynman/LICENSE1051
-rw-r--r--graphics/pgf/contrib/tikz-feynman/README.md115
-rw-r--r--graphics/pgf/contrib/tikz-feynman/references.bib122
-rw-r--r--graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdfbin0 -> 290598 bytes
-rw-r--r--graphics/pgf/contrib/tikz-feynman/tikz-feynman.sty41
-rw-r--r--graphics/pgf/contrib/tikz-feynman/tikz-feynman.tex1830
-rw-r--r--graphics/pgf/contrib/tikz-feynman/tikzfeynman.keys.code.tex815
-rw-r--r--graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.0.lua1005
-rw-r--r--graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.1.lua1037
-rw-r--r--graphics/pgf/contrib/tikz-feynman/tikzlibraryfeynman.code.tex336
-rw-r--r--graphics/pgf/contrib/tikz-imagelabels/Makefile17
-rw-r--r--graphics/pgf/contrib/tikz-imagelabels/README.md6
-rw-r--r--graphics/pgf/contrib/tikz-imagelabels/pleiades.jpgbin0 -> 518323 bytes
-rw-r--r--graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.dtx713
-rw-r--r--graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.ins57
-rw-r--r--graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.pdfbin0 -> 971599 bytes
-rw-r--r--graphics/pgf/contrib/tikz-inet/README7
-rw-r--r--graphics/pgf/contrib/tikz-inet/tikz-inet-doc.pdfbin0 -> 136305 bytes
-rw-r--r--graphics/pgf/contrib/tikz-inet/tikz-inet-doc.tex343
-rw-r--r--graphics/pgf/contrib/tikz-inet/tikz-inet.sty401
-rw-r--r--graphics/pgf/contrib/tikz-kalender/README.md87
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/Feiertage-2016.events18
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/Geburtstage.events8
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/Schulferien-2016.events9
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/Sonstiges.events4
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/Urlaub.events4
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.pdfbin0 -> 59519 bytes
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.tex15
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.pdfbin0 -> 56787 bytes
-rw-r--r--graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.tex36
-rw-r--r--graphics/pgf/contrib/tikz-kalender/tikz-kalender-translation.clo22
-rw-r--r--graphics/pgf/contrib/tikz-kalender/tikz-kalender.cls384
-rw-r--r--graphics/pgf/contrib/tikz-karnaugh/README.txt23
-rw-r--r--graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.pdfbin0 -> 314968 bytes
-rw-r--r--graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.tex771
-rw-r--r--graphics/pgf/contrib/tikz-karnaugh/tex/tikzlibrarykarnaugh.code.tex475
-rw-r--r--graphics/pgf/contrib/tikz-ladder/README.txt34
-rw-r--r--graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.pdfbin0 -> 360083 bytes
-rw-r--r--graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.tex856
-rw-r--r--graphics/pgf/contrib/tikz-ladder/tex/tikzlibrarycircuits.plc.ladder.code.tex628
-rw-r--r--graphics/pgf/contrib/tikz-layers/README21
-rw-r--r--graphics/pgf/contrib/tikz-layers/manifest.txt2
-rw-r--r--graphics/pgf/contrib/tikz-layers/tikz-layers-doc.pdfbin0 -> 66931 bytes
-rw-r--r--graphics/pgf/contrib/tikz-layers/tikz-layers.sty34
-rw-r--r--graphics/pgf/contrib/tikz-nef/LICENSE21
-rw-r--r--graphics/pgf/contrib/tikz-nef/README.md46
-rw-r--r--graphics/pgf/contrib/tikz-nef/example-net.tex20
-rw-r--r--graphics/pgf/contrib/tikz-nef/nef.bib16
-rw-r--r--graphics/pgf/contrib/tikz-nef/tikz-nef-doc.pdfbin0 -> 98569 bytes
-rw-r--r--graphics/pgf/contrib/tikz-nef/tikz-nef-doc.tex133
-rw-r--r--graphics/pgf/contrib/tikz-nef/tikzlibrarynef.code.tex42
-rw-r--r--graphics/pgf/contrib/tikz-network/README.md71
-rw-r--r--graphics/pgf/contrib/tikz-network/data/edges.csv7
-rw-r--r--graphics/pgf/contrib/tikz-network/data/front.pdfbin0 -> 191522 bytes
-rw-r--r--graphics/pgf/contrib/tikz-network/data/ml_edges.csv12
-rw-r--r--graphics/pgf/contrib/tikz-network/data/ml_edges_simple.csv12
-rw-r--r--graphics/pgf/contrib/tikz-network/data/ml_vertices.csv9
-rw-r--r--graphics/pgf/contrib/tikz-network/data/ml_vertices_simple.csv9
-rw-r--r--graphics/pgf/contrib/tikz-network/data/plane.pngbin0 -> 137991 bytes
-rw-r--r--graphics/pgf/contrib/tikz-network/data/vertices.csv6
-rw-r--r--graphics/pgf/contrib/tikz-network/data/vertices_RGB.csv6
-rw-r--r--graphics/pgf/contrib/tikz-network/tikz-network.pdfbin0 -> 662045 bytes
-rw-r--r--graphics/pgf/contrib/tikz-network/tikz-network.sty1400
-rw-r--r--graphics/pgf/contrib/tikz-network/tikz-network.tex3955
-rw-r--r--graphics/pgf/contrib/tikz-opm/LICENSE416
-rw-r--r--graphics/pgf/contrib/tikz-opm/README12
-rw-r--r--graphics/pgf/contrib/tikz-opm/tikz-opm.pdfbin0 -> 74999 bytes
-rw-r--r--graphics/pgf/contrib/tikz-opm/tikz-opm.sty178
-rw-r--r--graphics/pgf/contrib/tikz-opm/tikz-opm.tex321
-rw-r--r--graphics/pgf/contrib/tikz-optics/README4
-rw-r--r--graphics/pgf/contrib/tikz-optics/tikz-optics.pdfbin0 -> 374193 bytes
-rw-r--r--graphics/pgf/contrib/tikz-optics/tikz-optics.tex2316
-rw-r--r--graphics/pgf/contrib/tikz-optics/tikzlibraryoptics.code.tex2496
-rw-r--r--graphics/pgf/contrib/tikz-page/Makefile49
-rw-r--r--graphics/pgf/contrib/tikz-page/README108
-rw-r--r--graphics/pgf/contrib/tikz-page/README.md107
-rw-r--r--graphics/pgf/contrib/tikz-page/example.pngbin0 -> 137469 bytes
-rw-r--r--graphics/pgf/contrib/tikz-page/tikz-page.dtx871
-rw-r--r--graphics/pgf/contrib/tikz-page/tikz-page.pdfbin0 -> 428127 bytes
-rw-r--r--graphics/pgf/contrib/tikz-page/tikz-page.sty452
-rw-r--r--graphics/pgf/contrib/tikz-palattice/Makefile40
-rw-r--r--graphics/pgf/contrib/tikz-palattice/README13
-rw-r--r--graphics/pgf/contrib/tikz-palattice/elsa.tex952
-rw-r--r--graphics/pgf/contrib/tikz-palattice/example1_linear.tex53
-rw-r--r--graphics/pgf/contrib/tikz-palattice/example2_circular.tex60
-rw-r--r--graphics/pgf/contrib/tikz-palattice/example3_coordinates.tex242
-rw-r--r--graphics/pgf/contrib/tikz-palattice/example4_labels.tex308
-rw-r--r--graphics/pgf/contrib/tikz-palattice/example5_legend.tex112
-rw-r--r--graphics/pgf/contrib/tikz-palattice/tikz-palattice.sty713
-rw-r--r--graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.pdfbin0 -> 510771 bytes
-rw-r--r--graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.tex767
-rw-r--r--graphics/pgf/contrib/tikz-qtree/README49
-rw-r--r--graphics/pgf/contrib/tikz-qtree/pgfsubpic.sty4
-rw-r--r--graphics/pgf/contrib/tikz-qtree/pgfsubpic.tex209
-rw-r--r--graphics/pgf/contrib/tikz-qtree/pgftree.sty6
-rw-r--r--graphics/pgf/contrib/tikz-qtree/pgftree.tex215
-rw-r--r--graphics/pgf/contrib/tikz-qtree/tikz-qtree-compat.sty72
-rw-r--r--graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.pdfbin0 -> 106370 bytes
-rw-r--r--graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.tex402
-rw-r--r--graphics/pgf/contrib/tikz-qtree/tikz-qtree.sty4
-rw-r--r--graphics/pgf/contrib/tikz-qtree/tikz-qtree.tex204
-rw-r--r--graphics/pgf/contrib/tikz-relay/README.txt20
-rw-r--r--graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.pdfbin0 -> 259993 bytes
-rw-r--r--graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.tex146
-rw-r--r--graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.pdfbin0 -> 518421 bytes
-rw-r--r--graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.tex960
-rw-r--r--graphics/pgf/contrib/tikz-relay/tex/tikzlibrarycircuits.ee.IEC.relay.code.tex1047
-rw-r--r--graphics/pgf/contrib/tikz-sfc/README.txt33
-rw-r--r--graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.pdfbin0 -> 97967 bytes
-rw-r--r--graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.tex90
-rw-r--r--graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.pdfbin0 -> 469162 bytes
-rw-r--r--graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.tex780
-rw-r--r--graphics/pgf/contrib/tikz-sfc/tex/tikzlibrarycircuits.plc.sfc.code.tex180
-rw-r--r--graphics/pgf/contrib/tikz-timing/README57
-rw-r--r--graphics/pgf/contrib/tikz-timing/tikz-timing.dtx8539
-rw-r--r--graphics/pgf/contrib/tikz-timing/tikz-timing.ins48
-rw-r--r--graphics/pgf/contrib/tikz-timing/tikz-timing.pdfbin0 -> 472800 bytes
-rw-r--r--graphics/pgf/contrib/tikz-truchet/README.md6
-rw-r--r--graphics/pgf/contrib/tikz-truchet/tikz-truchet.dtx446
-rw-r--r--graphics/pgf/contrib/tikz-truchet/tikz-truchet.ins30
-rw-r--r--graphics/pgf/contrib/tikz-truchet/tikz-truchet.pdfbin0 -> 119406 bytes
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/README.md31
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-einruecken.tikz8
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-english.tikz10
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-hello-world.tikz7
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-umgebung.tikz13
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-zacken.tikz7
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start-roberta.tikz24
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start.tikz49
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verschachtelt-zacken.tikz8
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verzweigung.tikz13
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/examples/smarthome.tikz101
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.pdfbin0 -> 468945 bytes
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.tex754
-rw-r--r--graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks.sty857
-rw-r--r--graphics/pgf/contrib/tikzducks/README.md29
-rw-r--r--graphics/pgf/contrib/tikzducks/tikzducks-doc.pdfbin0 -> 561804 bytes
-rw-r--r--graphics/pgf/contrib/tikzducks/tikzducks-doc.tex1430
-rw-r--r--graphics/pgf/contrib/tikzducks/tikzducks.sty1750
-rw-r--r--graphics/pgf/contrib/tikzducks/tikzlibraryducks.code.tex27
-rw-r--r--graphics/pgf/contrib/tikzinclude/README8
-rw-r--r--graphics/pgf/contrib/tikzinclude/tikzinclude.dtx222
-rw-r--r--graphics/pgf/contrib/tikzinclude/tikzinclude.ins47
-rw-r--r--graphics/pgf/contrib/tikzinclude/tikzinclude.pdfbin0 -> 170492 bytes
-rw-r--r--graphics/pgf/contrib/tikzlings/README.md20
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-addons.sty824
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-bears.sty128
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-cats.sty232
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-coatis.sty176
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-doc.pdfbin0 -> 473505 bytes
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-doc.tex1311
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-hippos.sty141
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-koalas.sty172
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-marmots.sty223
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-mice.sty138
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-moles.sty144
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-owls.sty136
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-pandas.sty128
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-penguins.sty128
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-pigs.sty134
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-rhinos.sty142
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-sloths.sty171
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings-snowmans.sty132
-rw-r--r--graphics/pgf/contrib/tikzlings/tikzlings.sty67
-rw-r--r--graphics/pgf/contrib/tikzmark/README10
-rw-r--r--graphics/pgf/contrib/tikzmark/tikzmark.dtx1950
-rw-r--r--graphics/pgf/contrib/tikzmark/tikzmark.pdfbin0 -> 461039 bytes
-rw-r--r--graphics/pgf/contrib/tikzmarmots/LICENSE.txt415
-rw-r--r--graphics/pgf/contrib/tikzmarmots/README.md12
-rw-r--r--graphics/pgf/contrib/tikzmarmots/tikzlibrarymarmots.code.tex27
-rw-r--r--graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.pdfbin0 -> 226107 bytes
-rw-r--r--graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.tex328
-rw-r--r--graphics/pgf/contrib/tikzmarmots/tikzmarmots.sty186
l---------graphics/pgf/contrib/tikzorbital/README1
-rw-r--r--graphics/pgf/contrib/tikzorbital/README.rst31
-rw-r--r--graphics/pgf/contrib/tikzorbital/tikzorbital.pdfbin0 -> 197618 bytes
-rw-r--r--graphics/pgf/contrib/tikzorbital/tikzorbital.sty450
-rw-r--r--graphics/pgf/contrib/tikzorbital/tikzorbital.tex558
-rw-r--r--graphics/pgf/contrib/tikzpagenodes/README21
-rw-r--r--graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.dtx336
-rw-r--r--graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.ins10
-rw-r--r--graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.pdfbin0 -> 251196 bytes
-rw-r--r--graphics/pgf/contrib/tikzpeople/README.md27
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.pdfbin0 -> 501737 bytes
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.alice.sty73
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bob.sty92
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bride.sty117
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.builder.sty80
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.businessman.sty104
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.charlie.sty125
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.chef.sty74
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.conductor.sty141
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.cowboy.sty147
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.criminal.sty97
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.dave.sty125
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.devil.sty77
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.duck.sty104
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.graduate.sty103
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.groom.sty122
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.guard.sty97
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.jester.sty107
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.judge.sty116
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.maninblack.sty119
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.mexican.sty114
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nun.sty85
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nurse.sty89
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.physician.sty104
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.pilot.sty106
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.police.sty117
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.priest.sty87
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.sailor.sty118
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.santa.sty104
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.shape.surgeon.sty76
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.sty924
-rw-r--r--graphics/pgf/contrib/tikzpeople/tikzpeople.tex429
-rw-r--r--graphics/pgf/contrib/tikzpfeile/README17
-rw-r--r--graphics/pgf/contrib/tikzpfeile/tikzpfeile.dtx240
-rw-r--r--graphics/pgf/contrib/tikzpfeile/tikzpfeile.ins4
-rw-r--r--graphics/pgf/contrib/tikzpfeile/tikzpfeile.pdfbin0 -> 49764 bytes
-rw-r--r--graphics/pgf/contrib/tikzposter/README27
-rw-r--r--graphics/pgf/contrib/tikzposter/tikzposter.dtx2905
-rw-r--r--graphics/pgf/contrib/tikzposter/tikzposter.ins68
-rw-r--r--graphics/pgf/contrib/tikzposter/tikzposter.pdfbin0 -> 293772 bytes
-rw-r--r--graphics/pgf/contrib/tikzscale/3Dplot.tikz10
-rw-r--r--graphics/pgf/contrib/tikzscale/README26
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/alt.tikz5
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/invisible.tikz4
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/only.tikz4
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/onslide.tikz4
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/pause.tikz5
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/temporal.tikz5
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/tikzscale-beamer.tex56
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/uncover.tikz4
-rw-r--r--graphics/pgf/contrib/tikzscale/beamer/visible.tikz4
-rw-r--r--graphics/pgf/contrib/tikzscale/histogramNormal.tikz10
-rw-r--r--graphics/pgf/contrib/tikzscale/linewidth.tikz3
-rw-r--r--graphics/pgf/contrib/tikzscale/pgfplots-test.tikz5
-rw-r--r--graphics/pgf/contrib/tikzscale/pgfplots.randn.dat8000
-rw-r--r--graphics/pgf/contrib/tikzscale/test-tikzscale.pdfbin0 -> 177022 bytes
-rw-r--r--graphics/pgf/contrib/tikzscale/test-tikzscale.tex96
-rw-r--r--graphics/pgf/contrib/tikzscale/testNode.tikz3
-rw-r--r--graphics/pgf/contrib/tikzscale/testRectangle.tikz3
-rw-r--r--graphics/pgf/contrib/tikzscale/testgraphic2D.tikz7
-rw-r--r--graphics/pgf/contrib/tikzscale/tikzscale.dtx1637
-rw-r--r--graphics/pgf/contrib/tikzscale/tikzscale.ins72
-rw-r--r--graphics/pgf/contrib/tikzscale/tikzscale.pdfbin0 -> 375085 bytes
-rw-r--r--graphics/pgf/contrib/tikzsymbols/README.md107
-rw-r--r--graphics/pgf/contrib/tikzsymbols/tikzsymbols.dtx6034
-rw-r--r--graphics/pgf/contrib/tikzsymbols/tikzsymbols.ins52
-rw-r--r--graphics/pgf/contrib/tikzsymbols/tikzsymbols.pdfbin0 -> 543601 bytes
-rw-r--r--graphics/pgf/contrib/timing-diagrams/Makefile18
-rw-r--r--graphics/pgf/contrib/timing-diagrams/README13
-rw-r--r--graphics/pgf/contrib/timing-diagrams/diagrams-examples.pdfbin0 -> 95067 bytes
-rw-r--r--graphics/pgf/contrib/timing-diagrams/diagrams-examples.tex412
-rw-r--r--graphics/pgf/contrib/timing-diagrams/timing-diagrams.sty243
-rw-r--r--graphics/pgf/contrib/timing-diagrams/version.txt2
-rw-r--r--graphics/pgf/contrib/tipfr/README22
-rw-r--r--graphics/pgf/contrib/tipfr/doc/IndexHead.ist10
-rw-r--r--graphics/pgf/contrib/tipfr/doc/tipfr-doc.pdfbin0 -> 374432 bytes
-rw-r--r--graphics/pgf/contrib/tipfr/doc/tipfr-doc.tex897
-rw-r--r--graphics/pgf/contrib/tipfr/latex/tipfr.sty580
-rw-r--r--graphics/pgf/contrib/tkz-orm/LICENSE26
-rw-r--r--graphics/pgf/contrib/tkz-orm/Makefile146
-rw-r--r--graphics/pgf/contrib/tkz-orm/README57
-rw-r--r--graphics/pgf/contrib/tkz-orm/pgfmanualstyle.sty238
-rw-r--r--graphics/pgf/contrib/tkz-orm/tkz-orm.bib26
-rw-r--r--graphics/pgf/contrib/tkz-orm/tkz-orm.pdfbin0 -> 417488 bytes
-rw-r--r--graphics/pgf/contrib/tkz-orm/tkz-orm.sty1123
-rw-r--r--graphics/pgf/contrib/tkz-orm/tkz-orm.tex937
-rw-r--r--graphics/pgf/contrib/xebaposter/README23
-rw-r--r--graphics/pgf/contrib/xebaposter/images/docs-boxshape.pdfbin0 -> 12002 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/docs-headerborder.pdfbin0 -> 6050 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/docs-headershape.pdfbin0 -> 8472 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/docs-shade.pdfbin0 -> 19321 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/fig3.pdfbin0 -> 128455 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/fig4.pdfbin0 -> 10658 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/fig5.pdfbin0 -> 11325 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/fig6.pdfbin0 -> 5862 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/logo.pngbin0 -> 9330 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/images/shariflogo.pngbin0 -> 21735 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/poster-fa.pdfbin0 -> 222077 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/poster-fa.tex240
-rw-r--r--graphics/pgf/contrib/xebaposter/xebaposter-doc.pdfbin0 -> 139796 bytes
-rw-r--r--graphics/pgf/contrib/xebaposter/xebaposter-doc.tex471
-rw-r--r--graphics/pgf/contrib/xebaposter/xebaposter.cls1226
1233 files changed, 515268 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/adigraph/LICENSE b/graphics/pgf/contrib/adigraph/LICENSE
new file mode 100644
index 0000000000..9b7cf6e716
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Luca Cappelletti
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/graphics/pgf/contrib/adigraph/README.md b/graphics/pgf/contrib/adigraph/README.md
new file mode 100644
index 0000000000..a8de76fe96
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/README.md
@@ -0,0 +1,119 @@
+# Adigraph
+[Adigraph](https://ctan.org/pkg/adigraph) is a pure latex library for drawing directed graphs and augmenting directed graphs, and to draw cuts over them. It DOES NOT require external libraries such as Graphviz or DOT.
+
+It handles automatically the positioning of labels, with the exception of the horizontal position, and the inclinations of cuts.
+
+**This library is released under MIT license (Copyright 2018 Luca Cappelletti)**.
+
+## Documentation
+For more information, you can read the documentation available [here](https://github.com/LucaCappelletti94/adigraph/blob/master/adigraph_documentation.pdf)
+
+## Basic setup
+### Installing the package
+If you are on Linux or macOs you can run the following.
+```bash
+sudo tlmgr install fp etoolbox adigraph
+```
+
+Otherwise install the packages with the package manager of your choice.
+
+## Checking the version
+All recent (1.3+) Adigraph versions offer the following command:
+
+```latex
+\AdigraphVersionNumber
+```
+
+If you get an `Undefined control sequence` error you have a version previous to 1.3, you should consider updating it manually.
+
+An approach could be the following:
+
+1. Download the latest version from ctan: [here](https://ctan.org/pkg/adigraph).
+2. Identify the position of the installed adigraph by running `find / -type d -name adigraph`.
+3. Replace the old adigraph.sty with the new adigraph.sty downloaded from ctan.
+
+### Requiring the package in the document
+Remember to require the package in the document.
+
+```latex
+\usepackage{adigraph}
+```
+
+## Basic example
+More examples and step by step explanation is available in the [documentation](https://github.com/LucaCappelletti94/adigraph/blob/master/adigraph_documentation.pdf).
+
+Suppose you want to create a graph as the following, with an augmenting path highlighted and a couple of cuts:
+
+![Basic example](https://github.com/LucaCappelletti94/adigraph/blob/master/img_examples/example_3.jpg?raw=true)
+
+We start by defining a new graph, called *myAdigraph*:
+
+```latex
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+```
+
+At this point the output is the following:
+
+```latex
+\myAdigraph{}
+```
+
+![First adigraph](https://github.com/LucaCappelletti94/adigraph/blob/master/img_examples/example_0.jpg?raw=true)
+
+Then we can add the augmenting path as follows:
+
+```latex
+\myAdigraph{
+ s,3,4,2,t:5;
+}
+```
+
+![Augmenting adigraph](https://github.com/LucaCappelletti94/adigraph/blob/master/img_examples/example_1.jpg?raw=true)
+
+And the cuts (remember that the paths from previous steps are memorized by the library) are added as follows:
+
+```latex
+\myAdigraph{}{
+ 2,t,red;
+ 3,4,blue;
+}
+```
+
+The result with the cuts is the following:
+
+![Cuts adigraph](https://github.com/LucaCappelletti94/adigraph/blob/master/img_examples/example_2.jpg?raw=true)
+
+You can add both cuts and paths at the same time to keep the latest path highlighted:
+
+```latex
+\myAdigraph{
+ s,3,4,2,t:5;
+}{
+ 2,t,red;
+ 3,4,blue;
+}
+```
+
+![Cuts adigraph](https://github.com/LucaCappelletti94/adigraph/blob/master/img_examples/example_3.jpg?raw=true)
+
+Have a nice day!
+
+**Luca Cappelletti**
diff --git a/graphics/pgf/contrib/adigraph/adigraph-large.png b/graphics/pgf/contrib/adigraph/adigraph-large.png
new file mode 100644
index 0000000000..552c74c4ca
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/adigraph-large.png
Binary files differ
diff --git a/graphics/pgf/contrib/adigraph/adigraph.sty b/graphics/pgf/contrib/adigraph/adigraph.sty
new file mode 100644
index 0000000000..e472ebd59f
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/adigraph.sty
@@ -0,0 +1,852 @@
+%
+% Copyright 2018 Luca Cappelletti
+%
+% Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+%
+% The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+%
+% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+%
+\def\AdigraphVersionNumber{v1.7.1}
+
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{adigraph}
+[2018/03/27 \AdigraphVersionNumber LaTeX package for creating augmenting directed graphs]
+
+\RequirePackage{etoolbox}
+\RequirePackage{fp}
+\RequirePackage{xparse}
+\RequirePackage{xstring}
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+
+\def\AdigraphZero{0}
+\def\AdigraphTextualZero{zero}
+\def\AdigraphDefaultColor{black}
+\def\AdigraphDefaultWidth{0.4}
+\def\AdigraphRed{red!90}
+\def\AdigraphCyan{cyan!90}
+\providebool{AdigraphDrawGraphs}
+\booltrue{AdigraphDrawGraphs}
+
+\makeatletter
+\newcommand{\AdigraphRom}[1]{\expandafter\@slowromancap\romannumeral #1@}
+\makeatother
+
+\newcounter{AdigraphTotalNodeCounter}
+\newcounter{AdigraphCurrentNodeCounter}
+\newcounter{AdigraphNumberOfPaths}
+\newcounter{AdigraphCurrentPathNumber}
+\newcounter{AdigraphAdjacentNodes}
+
+\NewDocumentCommand{\AdigraphDrawNode}{m}{%
+ %
+ % #1 is node normalized id
+ %
+ \letcs{\nodeX}{adigraphNode#1X}
+ \letcs{\nodeY}{adigraphNode#1Y}
+ \letcs{\nodeLabel}{adigraphNode#1Label}
+ \letcs{\nodeColor}{adigraphNode#1Color}
+ \letcs{\nodeWidth}{adigraphNode#1Width}
+ %
+ \node[vertex,color=\nodeColor,line width=\nodeWidth pt] (#1) at (\nodeX,\nodeY) {\nodeLabel};
+}
+
+\NewDocumentCommand{\sumOfOrientations}{m}{}
+
+\NewDocumentCommand{\AdigraphDrawEdge}{m m}{%
+ %
+ % #1 is first node normalized id
+ % #2 is second node normalized id
+ %
+ \ifbool{adigraphEdge#1v#2Drawn}{%
+ % This edge was already drawn
+ }{%
+ \booltrue{adigraphEdge#1v#2Drawn}
+ \letcs{\edgeLabelPosition}{adigraphEdge#1v#2LabelPosition}
+ \letcs{\edgeWeight}{adigraphEdge#1v#2Weight}
+ \letcs{\edgeWidth}{adigraphEdge#1v#2Width}
+ \ifcsdef{adigraphEdge#2v#1Weight}{%
+ \letcs{\AdigraphTwinEdgeWeight}{adigraphEdge#2v#1Weight}
+ }{%
+ \let\AdigraphTwinEdgeWeight\AdigraphZero
+ }
+ \providebool{firstWeight}
+ \FPifeq{\edgeWeight}{0}
+ \booltrue{firstWeight}
+ \else
+ \boolfalse{firstWeight}
+ \fi
+
+ \providebool{secondWeight}
+ \FPifeq{\AdigraphTwinEdgeWeight}{0}
+ \booltrue{secondWeight}
+ \else
+ \boolfalse{secondWeight}
+ \fi
+
+ \letcs{\edgeColor}{adigraphEdge#1v#2Color}
+ \ifbool{adigraphEdge#1v#2HasLabel}{%
+ \letcs{\edgeLabel}{adigraphEdge#1v#2Label}
+ }{%
+ \letcs{\edgeLabel}{adigraphEdge#1v#2Weight}
+ }
+ \ifbool{firstWeight}{%
+ % We don't draw edges with weight 0
+ }{%
+ \ifbool{secondWeight}{%
+ % The twin edge won't be drawn
+ % This edge will be a straight line
+ \ifbool{adigraphEdge#1v#2HasEmptyLabel}{
+ \draw[edge,color=\edgeColor,line width=\edgeWidth pt] (#1) to (#2);
+ }{
+ \draw[edge,color=\edgeColor,line width=\edgeWidth pt] (#1) to node[\edgeLabelPosition, fill=white] {\edgeLabel}(#2);
+ }
+ }{%
+ \IfEq{#1}{#2}{
+ % This is a self loop
+ \def\mySinSum{0}
+ \def\myCosSum{0}
+ \setcounter{AdigraphAdjacentNodes}{0}
+ \RenewDocumentCommand{\sumOfOrientations}{m}{
+ %
+ % #1 is name of node
+ %
+ \IfEq{#1}{##1}{
+ % This is the autoloop
+ }{
+ \newcount\myedgecounter
+ \myedgecounter 0\relax
+ \ifcsdef{adigraphEdge#1v##1Weight}{
+ \advance\myedgecounter 1\relax
+ }{}
+ \ifcsdef{adigraphEdge##1v#1Weight}{
+ \advance\myedgecounter 1\relax
+ }{}
+ \ifnumgreater{\the\myedgecounter}{0}{
+ \stepcounter{AdigraphAdjacentNodes}
+ \letcs{\firstX}{adigraphNode#1X}
+ \letcs{\firstY}{adigraphNode#1Y}
+ \letcs{\secondX}{adigraphNode##1X}
+ \letcs{\secondY}{adigraphNode##1Y}
+ \pgfmathsetmacro{\mySinSum}{\mySinSum+sin(atan2(\secondY-\firstY,\secondX-\firstX))}
+ \pgfmathsetmacro{\myCosSum}{\myCosSum+cos(atan2(\secondY-\firstY,\secondX-\firstX))}
+ }{}
+ }
+ }
+ \forlistloop{\sumOfOrientations}{\AdigraphNodeList}
+ \newcount\nodesNumber
+ \nodesNumber \value{AdigraphAdjacentNodes}\relax
+ \IfEq{\the\nodesNumber}{0}{
+ %No elements
+ \pgfmathsetmacro{\centralAngle}{0}
+ }{
+ \newcount\nodesNumber
+ \nodesNumber \value{AdigraphAdjacentNodes}\relax
+ \pgfmathsetmacro{\meanAngle}{atan2(\mySinSum/\the\nodesNumber,\myCosSum/\the\nodesNumber)}
+ \pgfmathsetmacro{\centralAngle}{180+360-max(\meanAngle,360-(\meanAngle))}
+ }
+ \pgfmathsetmacro{\leftAngle}{\centralAngle-35}
+ \pgfmathsetmacro{\rightAngle}{\centralAngle+35}
+ \ifbool{adigraphEdge#1v#2HasEmptyLabel}{
+ \draw[edge,color=\edgeColor,line width=\edgeWidth pt] (#1) to [out=\leftAngle,in=\rightAngle,looseness=8](#1);
+ }{
+ \draw[edge,color=\edgeColor,line width=\edgeWidth pt] (#1) to [out=\leftAngle,in=\rightAngle,looseness=8] node[\edgeLabelPosition, fill=white] {\edgeLabel}(#1);
+ }
+ }{
+ % Both edges have to be drawn, they will be curly
+ \ifbool{adigraphEdge#1v#2HasEmptyLabel}{
+ \draw[edge,color=\edgeColor,line width=\edgeWidth pt] (#1) to [bend right=20] (#2);
+ }{
+ \draw[edge,color=\edgeColor,line width=\edgeWidth pt] (#1) to [bend right=20] node[\edgeLabelPosition, fill=white] {\edgeLabel}(#2);
+ }
+ }
+ }%
+ }%
+ }
+}
+
+\NewDocumentCommand{\AdigraphGenerateNodeName}{m G{\AdigraphDefaultColor} G{\AdigraphDefaultWidth}}{}
+\NewDocumentCommand{\AdigraphMemorizeNode}{m G{}}{}
+
+\NewDocumentCommand{\AdigraphBuildNode}{> { \SplitArgument{ 2 } {,} } m > { \SplitArgument{ 1 } {,} } m m}{%
+ %
+ % #1 -> given node name, not normalized, color and width
+ % #2 -> list of coordinates
+ % #3 -> optional label
+ %
+ \RenewDocumentCommand{\AdigraphGenerateNodeName}{m G{\AdigraphDefaultColor} G{\AdigraphDefaultWidth}}{%
+ %
+ % ##1 -> node name, not normalized
+ % ##2 -> color
+ % ##3 -> width
+ %
+ \IfInteger{##1}{%
+ \IfEq{##1}{\AdigraphZero}{
+ \def\AdigraphNodeName{\AdigraphTextualZero}%
+ }{
+ \def\AdigraphNodeName{\AdigraphRom{##1}}%
+ }
+ }{%
+ \def\AdigraphNodeName{##1}%
+ }%
+ \listxadd{\AdigraphNodeList}{\AdigraphNodeName}
+ \ifblank{##2}{
+ \csdef{adigraphNode\AdigraphNodeName Color}{\AdigraphDefaultColor}%
+ }{
+ \csdef{adigraphNode\AdigraphNodeName Color}{##2}%
+ }
+ \ifblank{##3}{
+ \csdef{adigraphNode\AdigraphNodeName Width}{\AdigraphDefaultWidth}%
+ }{
+ \csdef{adigraphNode\AdigraphNodeName Width}{##3}%
+ }
+
+ \ifblank{#3}{
+ \csdef{adigraphNode\AdigraphNodeName Label}{##1}%
+ }{
+ \csdef{adigraphNode\AdigraphNodeName Label}{#3}%
+ }
+ }
+ \RenewDocumentCommand{\AdigraphMemorizeNode}{m G{}}{%
+ \ifblank{##2}{
+ \newcount\radius
+ \newcount\myi
+ \newcount\myn
+ \newcount\mydpi
+ \radius ##1\relax
+ \myi \value{AdigraphCurrentNodeCounter}\relax
+ \myn \value{AdigraphTotalNodeCounter}\relax
+ \FPset{\mydpi}{6.283185307179586476}
+ \FPmul{\numerator}{\the\myi}{\mydpi}
+ \FPdiv{\anomaly}{\numerator}{\the\myn}
+ \FPcos{\nodeX}{\anomaly}
+ \FPsin{\nodeY}{\anomaly}
+ \FPmul{\nodeX}{\nodeX}{\the\radius}
+ \FPmul{\nodeY}{\nodeY}{\the\radius}
+ \csedef{adigraphNode\AdigraphNodeName X}{\nodeX}%
+ \csedef{adigraphNode\AdigraphNodeName Y}{\nodeY}%
+ \stepcounter{AdigraphCurrentNodeCounter}
+ }{
+ \csdef{adigraphNode\AdigraphNodeName X}{##1}%
+ \csdef{adigraphNode\AdigraphNodeName Y}{##2}%
+ }
+ }%
+ \AdigraphGenerateNodeName#1
+ \AdigraphMemorizeNode#2
+}
+
+\NewDocumentCommand{\AdigraphMemorizeEdge}{m m G{\AdigraphDefaultColor} G{\AdigraphDefaultWidth}}{}
+
+\NewDocumentCommand{\AdigraphBuildEdge}{> {\SplitArgument{3}{,}} m m m m}{%
+ %
+ % #1 -> List of edge nodes, its color and width
+ % #2 -> Weight
+ % #3 -> Label, defaults to weight
+ % #4 -> Label position, defaults to midway
+ %
+ \RenewDocumentCommand{\AdigraphMemorizeEdge}{m m G{\AdigraphDefaultColor} G{\AdigraphDefaultWidth}}{%
+ %
+ % ##1 -> first edge
+ % ##2 -> second edge
+ % ##3 -> color
+ % ##4 -> width
+ %
+ \IfInteger{##1}{%
+ \IfEq{##1}{\AdigraphZero}{
+ \csedef{AdigraphFirstNode}{\AdigraphTextualZero}%
+ }{
+ \csedef{AdigraphFirstNode}{\AdigraphRom{##1}}%
+ }
+ }{%
+ \csedef{AdigraphFirstNode}{##1}%
+ }%
+ \IfInteger{##2}{%
+ \IfEq{##2}{\AdigraphZero}{
+ \csedef{AdigraphSecondNode}{\AdigraphTextualZero}%
+ }{
+ \csedef{AdigraphSecondNode}{\AdigraphRom{##2}}%
+ }
+ }{%
+ \csedef{AdigraphSecondNode}{##2}%
+ }%
+
+ \xifinlist{\AdigraphFirstNode,\AdigraphSecondNode}{\AdigraphEdgeList}{
+ %This edge was previously added
+ }{
+ \xifinlist{\AdigraphFirstNode}{\AdigraphNodeList}{
+ \xifinlist{\AdigraphSecondNode}{\AdigraphNodeList}{
+ %This edge is new
+ \csedef{AdigraphEdgeName}{\AdigraphFirstNode v\AdigraphSecondNode}
+ \listxadd{\AdigraphEdgeList}{\AdigraphFirstNode,\AdigraphSecondNode}
+
+ \newbool{adigraphEdge\AdigraphEdgeName HasLabel}
+ \newbool{adigraphEdge\AdigraphEdgeName HasEmptyLabel}
+ \newbool{adigraphEdge\AdigraphEdgeName Drawn}
+ \ifblank{#3}{%
+ \boolfalse{adigraphEdge\AdigraphEdgeName HasLabel}
+ }{%
+ \booltrue{adigraphEdge\AdigraphEdgeName HasLabel}
+ }%
+ \ifblank{#2}{%
+ \booltrue{adigraphEdge\AdigraphEdgeName HasLabel}
+ \booltrue{adigraphEdge\AdigraphEdgeName HasEmptyLabel}
+ \csdef{adigraphEdge\AdigraphEdgeName Weight}{1}%
+ }{%
+ \csdef{adigraphEdge\AdigraphEdgeName Weight}{#2}%
+ }%
+ \csdef{adigraphEdge\AdigraphEdgeName Label}{#3}%
+ \ifblank{##3}{
+ \csdef{adigraphEdge\AdigraphEdgeName Color}{\AdigraphDefaultColor}%
+ }{
+ \csdef{adigraphEdge\AdigraphEdgeName Color}{##3}%
+ }
+ \ifblank{##4}{
+ \csdef{adigraphEdge\AdigraphEdgeName Width}{\AdigraphDefaultWidth}%
+ }{
+ \csdef{adigraphEdge\AdigraphEdgeName Width}{##4}%
+ }
+ \csdef{adigraphEdge\AdigraphEdgeName LabelPosition}{#4}%
+ }{
+ \PackageError{adigraph}{%
+ The given edge ends in the node ##2, that does not exist.
+ }{%
+ You have to create the node ##2.
+ }
+ }
+ }{
+ \PackageError{adigraph}{%
+ The given edge starts from the node ##1, that does not exist.
+ }{%
+ You have to create the node ##1.
+ }
+ }
+ }
+ }
+ \AdigraphMemorizeEdge#1
+}
+
+\NewDocumentCommand{\AdigraphBuildEdgeWrapper}{m G{} G{} G{midway}}{%
+ %
+ % #1 -> List of edge nodes and its color
+ % #2 -> Weight
+ % #3 -> Label
+ % #4 -> Label position
+ %
+ \ifblank{#1}{%
+ %Do nothing, this is the tail of the list
+ }{%
+ \AdigraphBuildEdge{#1}{#2}{#3}{#4}
+ }
+}
+
+\NewDocumentCommand{\AdigraphElaboratePath}{m m G{\AdigraphDefaultColor}}{}
+
+\NewDocumentCommand{\AdigraphSimpleSum}{m m m}{%
+ %
+ % #1 -> First addendum
+ % #2 -> Second addendum
+ % #3 -> Variable to store sum
+ %
+ \pgfmathsetmacro{\sat}{#1+#2}
+ \pgfmathfrac{\sat}
+ \IfEq{\pgfmathresult}{0.0}{
+ \pgfmathint{\sat}
+ \FPset{#3}{\pgfmathresult}
+ }{
+ \FPset{#3}{\sat}
+ }
+}
+
+\NewDocumentCommand{\AdigraphPathBuilder}{m m m m m m m}{%
+ %
+ % #1 -> first node
+ % #2 -> second node
+ % #3 -> units
+ % #4 -> forward color
+ % #5 -> backward color
+ % #6 -> forward width
+ % #7 -> backward width
+ %
+ \ifcsdef{adigraphEdge#1v#2Weight}{%
+ \letcs{\AdigraphWeightA}{adigraphEdge#1v#2Weight}
+ }{%
+ \def\AdigraphWeightA{0}
+ \newbool{adigraphEdge#1v#2HasLabel}
+ \newbool{adigraphEdge#1v#2HasEmptyLabel}
+ \ifcsdef{adigraphEdge#2v#1LabelPosition}{%
+ \csdef{adigraphEdge#1v#2LabelPosition}{\csuse{adigraphEdge#2v#1LabelPosition}}
+ }{%
+ \csdef{adigraphEdge#1v#2LabelPosition}{midway}
+ }
+ \csdef{adigraphEdge#1v#2LabelPosition}{midway}
+ \newbool{adigraphEdge#1v#2Drawn}
+ \listgadd{\AdigraphEdgeList}{#1,#2}
+ }
+ \ifcsdef{adigraphEdge#2v#1Weight}{%
+ \letcs{\AdigraphWeightB}{adigraphEdge#2v#1Weight}
+ }{%
+ \def\AdigraphWeightB{0}
+ \newbool{adigraphEdge#2v#1HasLabel}
+ \newbool{adigraphEdge#2v#1HasEmptyLabel}
+ \ifcsdef{adigraphEdge#1v#2LabelPosition}{%
+ \csdef{adigraphEdge#2v#1LabelPosition}{\csuse{adigraphEdge#1v#2LabelPosition}}
+ }{%
+ \csdef{adigraphEdge#2v#1LabelPosition}{midway}
+ }
+ \newbool{adigraphEdge#2v#1Drawn}
+ \listgadd{\AdigraphEdgeList}{#2,#1}
+ }
+
+ \ifblank{#4}{
+ \cslet{adigraphEdge#1v#2Color}{\AdigraphDefaultColor}%
+ }{
+ \cslet{adigraphEdge#1v#2Color}{#4}%
+ }
+ \ifblank{#5}{
+ \cslet{adigraphEdge#2v#1Color}{\AdigraphDefaultColor}%
+ }{
+ \cslet{adigraphEdge#2v#1Color}{#5}%
+ }
+ \ifblank{#6}{
+ \cslet{adigraphEdge#1v#2Width}{\AdigraphDefaultWidth}%
+ }{
+ \cslet{adigraphEdge#1v#2Width}{#6}%
+ }
+ \ifblank{#7}{
+ \cslet{adigraphEdge#2v#1Width}{\AdigraphDefaultWidth}%
+ }{
+ \cslet{adigraphEdge#2v#1Width}{#7}%
+ }
+
+ \expandafter\AdigraphSimpleSum\expandafter{\AdigraphWeightA}{-#3}{\resultA}
+ \expandafter\AdigraphSimpleSum\expandafter{\AdigraphWeightB}{#3}{\resultB}
+ \cslet{adigraphEdge#1v#2Weight}{\resultA}%
+ \cslet{adigraphEdge#2v#1Weight}{\resultB}%
+}
+
+\NewDocumentCommand{\AdigraphElaboratePathColors}{G{} G{\AdigraphDefaultColor}}{}
+\NewDocumentCommand{\AdigraphElaboratePathWidth}{G{\AdigraphDefaultWidth} G{}}{}
+
+\NewDocumentCommand{\AdigraphBuildPath}{> { \SplitList{,} } m G{} > { \SplitArgument{ 1 } {,} } G{} G{}}{%
+ %
+ % #1 -> List of nodes
+ % #2 -> Units to send over path
+ % #3 -> Colors list
+ % #4 -> Width list
+ %
+ \ifblank{#2}{%
+ \FPset{\units}{0}
+ }{
+ \FPset{\units}{#2}
+ }
+
+ \RenewDocumentCommand{\AdigraphElaboratePathColors}{G{} G{\AdigraphDefaultColor}}{%
+ \ifblank{##1}{
+ \ifnum\value{AdigraphNumberOfPaths}=\value{AdigraphCurrentPathNumber}
+ \def\AdigraphForwardPathColor{\AdigraphRed}
+ \def\AdigraphBackwardPathColor{\AdigraphCyan}
+ \else
+ \def\AdigraphForwardPathColor{\AdigraphDefaultColor}
+ \def\AdigraphBackwardPathColor{\AdigraphDefaultColor}
+ \fi
+ }{
+ \def\AdigraphForwardPathColor{##1}
+ \ifblank{##2}{
+ \def\AdigraphBackwardPathColor{\AdigraphDefaultColor}
+ }{
+ \def\AdigraphBackwardPathColor{##2}
+ }
+ }
+ }
+
+ \AdigraphElaboratePathColors#3
+
+ \RenewDocumentCommand{\AdigraphElaboratePathWidth}{G{\AdigraphDefaultWidth} G{##1}}{%
+ \ifblank{##1}{
+ \def\AdigraphForwardPathWidth{\AdigraphDefaultWidth}
+ }{
+ \def\AdigraphForwardPathWidth{##1}
+ }
+ \ifblank{##2}{
+ \def\AdigraphBackwardPathWidth{\AdigraphDefaultWidth}
+ }{
+ \def\AdigraphBackwardPathWidth{##2}
+ }
+ }
+
+ \AdigraphElaboratePathWidth#4
+
+ \RenewDocumentCommand{\AdigraphElaboratePath}{m}{%
+ \IfInteger{##1}{%
+ \IfEq{##1}{\AdigraphZero}{
+ \def\AdigraphCurrentNode{\AdigraphTextualZero}%
+ }{
+ \def\AdigraphCurrentNode{\AdigraphRom{##1}}%
+ }
+ }{%
+ \def\AdigraphCurrentNode{##1}%
+ }%
+ \ifdef{\AdigraphLastParsedNode}{%
+ \expandafter\expandafter\expandafter\AdigraphPathBuilder\expandafter\expandafter\expandafter{\expandafter\AdigraphLastParsedNode\expandafter}\expandafter{\AdigraphCurrentNode}{\units}{\AdigraphForwardPathColor}{\AdigraphBackwardPathColor}{\AdigraphBackwardPathWidth}{\AdigraphBackwardPathWidth}
+ }{%
+ % This is the first iteration
+ }
+ \IfInteger{##1}{%
+ \IfEq{##1}{\AdigraphZero}{
+ \def\AdigraphLastParsedNode{\AdigraphTextualZero}%
+ }{
+ \def\AdigraphLastParsedNode{\AdigraphRom{##1}}%
+ }
+ }{%
+ \def\AdigraphLastParsedNode{##1}%
+ }%
+ }
+ \ProcessList{#1}{\AdigraphElaboratePath}
+ \undef{\AdigraphLastParsedNode}
+}
+
+\NewDocumentCommand{\AdigraphBuildNodeWrapper}{m m G{}}{
+ % #1 -> given node name, not normalized, color and width
+ % #2 -> list of coordinates
+ % #3 -> optional label
+ \ifblank{#1}{
+ %end of list
+ }{
+ \AdigraphBuildNode{#1}{#2}{#3}
+ }
+}
+
+\NewDocumentCommand{\AdigraphNodeBuilder}{ > { \SplitArgument{ 2 } {:} } m }{%
+ \AdigraphBuildNodeWrapper#1
+}
+
+\NewDocumentCommand{\AdigraphEdgeBuilder}{ > { \SplitArgument{ 3 } {:} } m }{%
+ \AdigraphBuildEdgeWrapper#1
+}
+
+
+
+\NewDocumentCommand{\AdigraphApplyKleenePlusEdgeBuilder}{m}{%
+ %
+ % #1 -> element
+ %
+ \ifblank{#1}{
+ %end of list
+ }{
+ \IfSubStr{\AdigraphCurrentElaboratingEdge}{,#1,}{
+ %The node is already contained
+ }{
+ \IfSubStr{\AdigraphCurrentElaboratingEdge}{,#1}{
+ %The node is already contained
+ }{
+ \IfSubStr{\AdigraphCurrentElaboratingEdge}{#1,}{
+ \StrPosition{\AdigraphCurrentElaboratingEdge}{#1,}[\stringPosition]
+ \ifnumequal{\stringPosition}{1}{
+ %This is at the beginning of the list
+ }{
+ \StrSubstitute[1]{\AdigraphCurrentElaboratingEdge}{+}{#1}[\temp]%
+ \expandafter\AdigraphFirstEdgeRenormalizer\expandafter{\temp}
+ }
+ }{
+ \StrSubstitute[1]{\AdigraphCurrentElaboratingEdge}{+}{#1}[\temp]%
+ \expandafter\AdigraphFirstEdgeRenormalizer\expandafter{\temp}
+ }
+ }
+ }
+ }
+}
+
+\NewDocumentCommand{\AdigraphKleenePlusEdgeBuilder}{m}{%
+ \ifrmnum{#1}{
+ \def\AdigraphTempList{}
+ \listeadd{\AdigraphTempList}{\rmntonum{#1}}
+ \forlistloop{\AdigraphApplyKleenePlusEdgeBuilder}{\AdigraphTempList}
+ }{
+ \AdigraphApplyKleenePlusEdgeBuilder{#1}
+ }
+}
+
+\NewDocumentCommand{\AdigraphSecondEdgeRenormalizer}{m}{%
+ \xifinlist{+}{\AdigraphNodeList}{
+ %The plus is not a kleene sign, but a symbol for a node
+ \AdigraphEdgeBuilder{#1}
+ }{
+ \IfSubStr{#1}{+}{
+ \def\AdigraphCurrentElaboratingEdge{#1}
+ \forlistloop{\AdigraphKleenePlusEdgeBuilder}{\AdigraphNodeList}
+ }{
+ \AdigraphEdgeBuilder{#1}
+ }
+ }
+}
+
+\NewDocumentCommand{\AdigraphKleeneStarEdgeBuilder}{m}{%
+ \StrSubstitute[1]{\AdigraphCurrentElaboratingEdge}{*}{#1}[\temp]%
+ \expandafter\AdigraphFirstEdgeRenormalizer\expandafter{\temp}
+}
+
+\NewDocumentCommand{\AdigraphFirstEdgeRenormalizer}{m}{%
+ \xifinlist{*}{\AdigraphNodeList}{
+ %The asterisk is not a kleene sign, but a symbol for a node
+ \AdigraphSecondEdgeRenormalizer{#1}
+ }{
+ \IfSubStr{#1}{*}{
+ \def\AdigraphCurrentElaboratingEdge{#1}
+ \forlistloop{\AdigraphKleeneStarEdgeBuilder}{\AdigraphNodeList}
+ }{
+ \AdigraphSecondEdgeRenormalizer{#1}
+ }
+ }
+}
+
+\NewDocumentCommand{\AdigraphEdgeDrawer}{ > { \SplitArgument{ 1 } {,} } m }{%
+ \AdigraphDrawEdge#1
+}
+
+\NewDocumentCommand{\AdigraphNodeCounter}{m G{}}{%
+ \ifblank{#2}{
+ \stepcounter{AdigraphTotalNodeCounter}
+ }{}
+}
+
+\NewDocumentCommand{\AdigraphNodeCounterWrapper}{m > { \SplitArgument{ 1 } {,} } m m m }{%
+ \ifblank{#1}{}{
+ \AdigraphNodeCounter#2
+ }
+}
+
+\NewDocumentCommand{\AdigraphNodeCounterSecondWrapper}{ > { \SplitArgument{ 3 } {:} } m }{%
+ \AdigraphNodeCounterWrapper#1
+}
+
+\NewDocumentCommand{\AdigraphNodesCounter}{> { \SplitList{;} } m}{%
+ \ProcessList{#1}{\AdigraphNodeCounterSecondWrapper}
+}
+
+\NewDocumentCommand{\AdigraphProcessNodes}{> { \SplitList{;} } m}{%
+ \ProcessList{#1}{\AdigraphNodeBuilder}
+ \forlistloop{\AdigraphDrawNode}{\AdigraphNodeList}
+}
+
+\NewDocumentCommand{\AdigraphProcessEdges}{> { \SplitList{;} } m}{%
+ \ProcessList{#1}{\AdigraphFirstEdgeRenormalizer}
+}
+
+\NewDocumentCommand{\AdigraphProcessPaths}{> { \SplitArgument{ 3 } {:} } m}{%
+ % #1 -> List of nodes
+ % #2 -> Units to send over path
+ % #3 -> Colors list
+ % #4 -> Width list
+ \stepcounter{AdigraphCurrentPathNumber}
+ \AdigraphBuildPath#1
+}
+
+\NewDocumentCommand{\AdigraphCountPaths}{m}{%
+ \stepcounter{AdigraphNumberOfPaths}
+}
+
+\NewDocumentCommand{\AdigraphCalculateInclination}{m m m}{}
+
+\NewDocumentCommand{\AdigraphCalculateOrientation}{m m m}{%
+ \letcs{\firstX}{adigraphNode#2X}
+ \letcs{\firstY}{adigraphNode#2Y}
+ \letcs{\secondX}{adigraphNode#3X}
+ \letcs{\secondY}{adigraphNode#3Y}
+
+ \providebool{equalX}
+ \pgfmathsetmacro{\deltaX}{\secondX-\firstX}
+ \FPifeq{\deltaX}{0}
+ \booltrue{equalX}
+ \else
+ \boolfalse{equalX}
+ \fi
+
+
+ \ifbool{equalX}{%
+ \FPset{#1}{90}
+ }{%
+ \pgfmathsetmacro{#1}{57.2958*atan((\secondY-\firstY)/(\deltaX))}
+ }
+}
+
+\NewDocumentCommand{\AdigraphExecuteCutBuilder}{m m G{\AdigraphDefaultColor}}{%
+\ifblank{#1}{%
+% Reached end of list
+}{%
+\IfInteger{#1}{%
+ \IfEq{#1}{\AdigraphZero}{
+ \def\AdigraphFirstNode{\AdigraphTextualZero}%
+ }{
+ \def\AdigraphFirstNode{\AdigraphRom{#1}}%
+ }
+}{%
+ \def\AdigraphFirstNode{#1}%
+}%
+\IfInteger{#2}{%
+ \IfEq{#2}{\AdigraphZero}{
+ \def\AdigraphSecondNode{\AdigraphTextualZero}%
+ }{
+ \def\AdigraphSecondNode{\AdigraphRom{#2}}%
+ }
+}{%
+ \def\AdigraphSecondNode{#2}%
+}%
+\AdigraphCalculateOrientation{\orientation}{\AdigraphFirstNode}{\AdigraphSecondNode}
+\draw[dashed,#3,rotate=\orientation] ([yshift=10pt]$(\AdigraphFirstNode)!0.7!(\AdigraphSecondNode)$) -- ([yshift=-10pt]$(\AdigraphFirstNode)!0.7!(\AdigraphSecondNode)$);
+}
+}
+
+\NewDocumentCommand{\AdigraphCutBuilder}{> { \SplitArgument { 2 } { , } } m}{%
+ \AdigraphExecuteCutBuilder #1
+}
+
+\NewDocumentCommand{\AdigraphProcessCuts}{> { \SplitList{;} } m}{%
+ \ProcessList{#1}{\AdigraphCutBuilder}
+}
+
+\NewDocumentCommand{\Adigraph}{m m m m m m}{%
+ %
+ % #1 -> Vertices
+ % #2 -> Edges
+ % #3 -> Augmenting paths
+ % #4 -> Cuts
+ % #5 -> Current augmenting paths
+ % #6 -> Style
+ %
+ \ifbool{AdigraphDrawGraphs}{%
+ \def\AdigraphNodeList{}
+ \def\AdigraphEdgeList{}
+ \letcs{\AdigraphAugmentingPaths}{#3}
+ \begin{tikzpicture}
+ \tikzset{%
+ vertex/.style={circle,draw,minimum size=2em},
+ edge/.style={#6}
+ }
+
+ % vertices
+ \ifblank{#1}{%
+ % List is empty
+ }{%
+ \AdigraphNodesCounter{#1}
+ \AdigraphProcessNodes{#1}
+ }
+
+ \ifblank{#2}{%
+ % List is empty
+ }{%
+ \AdigraphProcessEdges{#2}
+ }
+
+ \ifblank{\AdigraphAugmentingPaths}{%
+ % List is empty
+ }{%
+ \ifblank{#5}{%
+ \defcounter{AdigraphNumberOfPaths}{100000}
+ }{%
+ }
+ \forlistloop{\AdigraphCountPaths}{\AdigraphAugmentingPaths}
+ \forlistloop{\AdigraphProcessPaths}{\AdigraphAugmentingPaths}
+ }
+
+ \ifblank{#2}{%
+ % List is empty
+ }{%
+ \forlistloop{\AdigraphEdgeDrawer}{\AdigraphEdgeList}
+ }
+
+ % %cuts
+ \ifblank{#4}{%
+ % List is empty
+ }{%
+ \AdigraphProcessCuts{#4}
+ }
+ \end{tikzpicture}
+ }{}
+}
+
+\NewDocumentCommand{\AdigraphProcessAugmentingPaths}{m}{}
+\NewDocumentCommand{\AdigraphProcessAugmentingPathsList}{m}{}
+
+\NewDocumentCommand{\NewAdigraph}{m m G{} O{->,> = latex}}{%
+ %
+ % #1 -> Variable to assign to as command
+ % #2 -> Nodes
+ % #3 -> Edges
+ % #4 -> Style
+ %
+ \ifcsdef{#1}{
+ \PackageError{adigraph}{%
+ You have already define an adigraph called #1.
+ }{%
+ Identify the duplicate and change its name, e.g. Second#1
+ }
+ }{
+ \csdef{Adigraph#1AugmentingPaths}{}%
+ \RenewDocumentCommand{\AdigraphProcessAugmentingPaths}{m}{%
+ \listcsgadd{Adigraph#1AugmentingPaths}{##1}
+ }
+ \RenewDocumentCommand{\AdigraphProcessAugmentingPathsList}{> { \SplitList{;} } m}{%
+ \ProcessList{##1}{\AdigraphProcessAugmentingPaths}
+ }
+ \expandafter\NewDocumentCommand\expandafter{\csname #1\endcsname}{m G{}}{%
+ %
+ % ##1 -> Augmenting path
+ %
+ \setcounter{AdigraphCurrentNodeCounter}{0}
+ \setcounter{AdigraphTotalNodeCounter}{0}
+ \setcounter{AdigraphNumberOfPaths}{0}
+ \setcounter{AdigraphCurrentPathNumber}{0}
+ \AdigraphProcessAugmentingPathsList{##1}
+ \Adigraph{#2}{#3}{Adigraph#1AugmentingPaths}{##2}{##1}{#4}
+ }%
+ }
+}
+
+\NewDocumentCommand{\RenewAdigraph}{m m G{} O{->,> = latex}}{%
+ %
+ % #1 -> Variable to assign to as command
+ % #2 -> Nodes
+ % #3 -> Edges
+ % #4 -> Style
+ %
+ \ifcsdef{#1}{
+ \csdef{Adigraph#1AugmentingPaths}{}%
+ \RenewDocumentCommand{\AdigraphProcessAugmentingPaths}{m}{%
+ \listcsgadd{Adigraph#1AugmentingPaths}{##1}
+ }
+ \RenewDocumentCommand{\AdigraphProcessAugmentingPathsList}{> { \SplitList{;} } m}{%
+ \AdigraphProcessAugmentingPaths##1
+ }
+ \expandafter\RenewDocumentCommand\expandafter{\csname #1\endcsname}{m G{}}{%
+ %
+ % ##1 -> Augmenting path
+ %
+ \setcounter{AdigraphCurrentNodeCounter}{0}
+ \setcounter{AdigraphTotalNodeCounter}{0}
+ \setcounter{AdigraphNumberOfPaths}{0}
+ \setcounter{AdigraphCurrentPathNumber}{0}
+ \AdigraphProcessAugmentingPathsList{##1}
+ \Adigraph{#2}{#3}{Adigraph#1AugmentingPaths}{##2}{##1}{#4}
+ }%
+ }{
+ \PackageError{adigraph}{%
+ You cannot renew a graph called #1 without having it defined first.
+ }{%
+ Create the first graph using \textbackslash NewAdigraph
+ }
+ }
+}
+
+\NewDocumentCommand{\DisableAdigraphs}{}{%
+ \boolfalse{AdigraphDrawGraphs}
+}
+
+\NewDocumentCommand{\EnableAdigraphs}{}{%
+ \booltrue{AdigraphDrawGraphs}
+}
+
+
+\endinput
+%%
+%% End of file `adigraph.sty'. \ No newline at end of file
diff --git a/graphics/pgf/contrib/adigraph/adigraph_documentation.pdf b/graphics/pgf/contrib/adigraph/adigraph_documentation.pdf
new file mode 100644
index 0000000000..949814b056
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/adigraph_documentation.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/adigraph/adigraph_documentation.tex b/graphics/pgf/contrib/adigraph/adigraph_documentation.tex
new file mode 100644
index 0000000000..6bcf6a0c8a
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/adigraph_documentation.tex
@@ -0,0 +1,1286 @@
+\documentclass{report}
+
+\title{Adigraph, \AdigraphVersionNumber}
+\author{Luca Cappelletti}
+\date{December 2018}
+
+\usepackage{adigraph}
+\usepackage{xcolor}
+\usepackage[colorlinks=true,urlcolor=blue,pdfpagelabels,hyperindex=false]{hyperref}
+\usepackage{minted}
+\usepackage{multicol}
+\usepackage{graphicx} % for images and generally graphics
+\usepackage{caption} % enabling of nice captions
+\usepackage{subcaption} % and subcaptions of images
+\definecolor{mintedbackground}{rgb}{0.95,0.95,0.95}
+\setminted{
+ bgcolor=mintedbackground,
+ fontfamily=tt,
+ linenos=true,
+ numberblanklines=true,
+ numbersep=5pt,
+ gobble=0,
+ frame=leftline,
+ framerule=0.4pt,
+ framesep=2mm,
+ funcnamehighlighting=true,
+ tabsize=4,
+ obeytabs=false,
+ mathescape=false
+ samepage=false, %with this setting you can force the list to appear on the same page
+ showspaces=false,
+ showtabs =false,
+ texcl=false,
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% THE FOLLOWING CENTERS ALL FLOATING ITEMS BY DEFAULT %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+\g@addto@macro\@floatboxreset\centering
+\makeatother
+
+\makeatletter
+\apptocmd\subcaption@minipage{\centering}{}{}
+\makeatother
+
+\makeatletter
+\providecommand*\setfloatlocations[2]{\@namedef{fps@#1}{#2}}
+\makeatother
+\setfloatlocations{figure}{H}
+\setfloatlocations{table}{H}
+
+\begin{document}
+
+\maketitle
+
+{\hypersetup{hidelinks}
+ \tableofcontents % Generates the table of contents
+}
+
+\chapter{Introduction}
+\section{What is Adigraph?}
+\textbf{\href{https://ctan.org/pkg/adigraph}{Adigraph}} is a latex library for drawing directed graphs and augmenting directed graphs, and to draw cuts over them.
+
+It handles automatically the positioning of labels, with the exception of the horizontal position, and the inclinations of cuts.
+
+The latest version is available on \href{https://github.com/LucaCappelletti94/adigraph}{Github}.
+
+\section{License}
+Copyright 2018 Luca Cappelletti
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sub-license, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\
+
+\chapter{Setup}
+\section{Installing the dependencies}
+Clearly you need to have texlive installed. Then, make sure you have the following packages:
+
+\begin{description}
+ \item[\href{https://ctan.org/pkg/fp}{fp}] Used for floating point calculations.
+ \item[\href{https://ctan.org/pkg/xparse}{xparse}] Used for elaborating parameters.
+ \item[\href{https://ctan.org/pkg/xstring}{xstring}] Used for elaborating strings.
+ \item[\href{https://ctan.org/pkg/etoolbox}{etoolbox}] Used for operations on lists.
+ \item[tikz] Used for drawing the actual graphs.
+ \item[tikz calc library] Used for some internal calculations in tikz.
+\end{description}
+
+To be sure you can run the following, that will install the packages only if they are not already present:
+
+\begin{minted}{sh}
+sudo tlmgr install etoolbox fp xstring
+\end{minted}
+
+\section{Installing Adigraph}
+You can install Adigraph, if it isn't already present in your setup, by running the following on Unix systems:
+
+\begin{minted}{sh}
+sudo tlmgr install adigraph
+\end{minted}
+
+On windows you should check on your package manager of choice (some latex distribution have a tlmgr implementation on windows too.)
+
+\chapter{Usage}
+\section{Creating a new graph}
+Here we create a new Adigraph object, called \textit{myAdigraph}.
+
+\begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ <nodes here, separated by semicolon>
+}{
+ <edges here, separated by semicolon>
+}{
+ <cuts here, separated by semicolon>
+}[
+ <edge style here>
+]
+\end{minted}
+
+\section{Changing an existing graph}
+You can renovate an older graph by calling \textbackslash RenewAdigraph
+
+\begin{minted}{latex}
+\RenewAdigraph{myAdigraph}{
+ <nodes here, separated by semicolon>
+}{
+ <edges here, separated by semicolon>
+}{
+ <cuts here, separated by semicolon>
+}[
+ <edge style here>
+]
+\end{minted}
+
+\section{Adding nodes}
+We set its nodes with the following syntax: \textit{<node name[, textual color, border width]: \(x\) coordinate[, \(y\) coordinate][: label]>}.
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Custom node colors}
+To color a node you can use the following syntax: \textit{<node name[, textual color]: \(x\) coordinate[, \(y\) coordinate]>}. For example, to draw s in red and t in blue we would write:
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s,red:0,0;
+ t,blue:4,0;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s,red:0,0;
+ t,blue:4,0;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+Tested available colors are: red, blue, black, green. You may extend the possible colors with LaTex libraries such as xcolor.
+
+\subsection{Custom node width}
+To color a node you can use the following syntax: \textit{<node name[, textual color[, border width]]: \(x\) coordinate[, \(y\) coordinate]>}. For example:
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s,red,5:0,0;
+ t,blue,3:4,0;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s,red,5:0,0;
+ t,blue,3:4,0;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Custom node labels}
+To add a custom label you can use the following syntax: either \textit{<node name: \(x\) coordinate[, \(y\) coordinate][: node label]>} or \textit{<node name[, textual color]: \(x\) coordinate[, \(y\) coordinate][: node label]>} will work:
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s,red:0,0:start;
+ t:4,0:end;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s,red:0,0:start;
+ t:4,0:end;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\section{Automatically position nodes}
+When no coordinates are given or you just don't have time to think about where to put those nodes, just choose a radius and Adigraph will position them on the circle of that radius.
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2:2;
+ 3:2;
+ 4:2;
+ 5:2;
+ 6:2;
+ 7:2;
+ 8:2;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2:2;
+ 3:2;
+ 4:2;
+ 5:2;
+ 6:2;
+ 7:2;
+ 8:2;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Colored automatically positioned nodes}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2,purple:2;
+ 3,brown:2;
+ 4,gray:2;
+ 5,blue:2;
+ 6,red:2;
+ 7,green:2;
+ 8,pink:2;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2,purple:2;
+ 3,brown:2;
+ 4,gray:2;
+ 5,blue:2;
+ 6,red:2;
+ 7,green:2;
+ 8,pink:2;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+
+\section{Adding edges}
+We set its edges with the following syntax: \textit{<first node, second node,[color,[edge width]][:weight[:label:[label position]]]>}.
+
+\subsection{A simple edge}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,t;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,t;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{A looped edge}
+Looped edges position automatically by themselves to minimize overlapping.
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,s;
+ t,t;
+ s,t;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,s;
+ t,t;
+ s,t;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{A colored simple edge}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,t,red;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,t,red;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{A wider simple edge}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,t,red,5;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,t,red,5;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{A weighted edge}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,t:56;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,t:56;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{A weighted edge with label}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,t:56:myLabel;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,t:56:myLabel;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Edge in both directions}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,t;
+ t,s;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,t;
+ t,s;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Edge with weights in both directions}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+}{
+ s,t:5;
+ t,s:5;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ }{
+ s,t:5;
+ t,s:5;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Positioning labels}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2:0,2;
+ 3:4,2;
+ 4:4,0;
+}{
+ 1,3,red:1:a:near start;
+ 2,4,blue:1:b:near end;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2:0,2;
+ 3:4,2;
+ 4:4,0;
+ }{
+ 1,3,red:1:a:near start;
+ 2,4,blue:1:b:near end;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Positioning weights}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2:0,2;
+ 3:4,2;
+ 4:4,0;
+}{
+ 1,3,red:1::near start;
+ 2,4,blue:1::near end;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ 1:0,0;
+ 2:0,2;
+ 3:4,2;
+ 4:4,0;
+ }{
+ 1,3,red:1::near start;
+ 2,4,blue:1::near end;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+
+\subsection{Multiple edges with weights}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ 1:0,3;
+ 2:4,3;
+}{
+ s,t:5;
+ t,s:5;
+ s,1:5;
+ 1,s:5;
+ 1,2:5;
+ 2,1:5;
+ 2,t:5;
+ t,2:5;
+ t,1:5;
+ 1,t:5;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ s:0,0;
+ t:4,0;
+ 1:0,3;
+ 2:4,3;
+ }{
+ s,t:5;
+ t,s:5;
+ s,1:5;
+ 1,s:5;
+ 1,2:5;
+ 2,1:5;
+ 2,t:5;
+ t,2:5;
+ t,1:5;
+ 1,t:5;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\section{Kleene star operators}
+\subsection{Kleene star on an element}
+This works only when you don't have a node called \textit{<*>}. When this happens, the behaviour of a tuple \textit{<a,*>} becomes the normal one.
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ 1:3;
+ 2:3;
+ 3:3;
+ 4:3;
+ 5:3;
+ 6:3;
+ 7:3;
+ 8:3;
+}{
+ 1,*,blue;
+ *,4,red;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ 1:3;
+ 2:3;
+ 3:3;
+ 4:3;
+ 5:3;
+ 6:3;
+ 7:3;
+ 8:3;
+ }{
+ 1,*,blue;
+ *,4,red;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Kleene star minus the element}
+This works only when you don't have a node called \textit{<+>}. When this happens, the behaviour of a tuple \textit{<a,+>} becomes the normal one.
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ 1:3;
+ 2:3;
+ 3:3;
+ 4:3;
+ 5:3;
+ 6:3;
+ 7:3;
+ 8:3;
+}{
+ 1,+,blue;
+ +,4;
+}
+\myAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myAdigraph}{
+ 1:3;
+ 2:3;
+ 3:3;
+ 4:3;
+ 5:3;
+ 6:3;
+ 7:3;
+ 8:3;
+ }{
+ 1,+,blue;
+ +,4;
+ }
+ \myAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+
+\subsection{Combining Kleene operations}
+Sadly, operations such as \textit{<*,+>} or \textit{<+,+>} are not currently supported and not for lack of trying. I'll try implementing them again in the future when I'll have more time.
+
+\section{Paths}
+A path is specified by the following syntax: \textit{<comma separated list of nodes>}.
+
+\NewAdigraph{myPathsTestAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+\myAdigraph{
+ s,3,4,2,t;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myPathsTestAdigraph{
+ s,3,4,2,t;
+ }
+ \end{subfigure}
+\end{figure}
+
+\subsection{Augmenting paths}
+An augmenting path is specified by the following syntax: \textit{<comma separated list of nodes:units>}. It is \textbf{very important} to note that incremental paths called upon the same object are memorized by default.
+
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+\myAdigraph{
+ s,3,4,2,t:5;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{
+ s,3,4,2,t:5;
+ }
+ \end{subfigure}
+\end{figure}
+
+For example, suppose now we'd like to send another 5 units on the graph edited by the previous incremental path, we'll have just to write the following:
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\myAdigraph{
+ s,3,4,1,2,t:5;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{
+ s,3,4,1,2,t:5;
+ }
+ \end{subfigure}
+\end{figure}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\myAdigraph{
+ s,3,4,t:15;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{
+ s,3,4,t:15;
+ }
+ \end{subfigure}
+\end{figure}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\myAdigraph{
+ s,1,4,t:5;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{
+ s,1,4,t:5;
+ }
+ \end{subfigure}
+\end{figure}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\myAdigraph{
+ s,1,2,t:10;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{
+ s,1,2,t:10;
+ }
+ \end{subfigure}
+\end{figure}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\myAdigraph{
+ s,1,2,4,t:5;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{
+ s,1,2,4,t:5;
+ }
+ \end{subfigure}
+\end{figure}
+
+\subsection{Custom colored augmenting Paths}
+A path is specified by the following syntax: \textit{<comma separated list of nodes>:<units>:<forward path color, backward path color>}.
+
+\NewAdigraph{myCustomAugmentingPathAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+\myAdigraph{
+ s,3,4,2,t:5:green,blue;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myCustomAugmentingPathAdigraph{
+ s,3,4,2,t:5:green,blue;
+ }
+ \end{subfigure}
+\end{figure}
+
+\subsection{Custom colored Paths}
+A path is specified by the following syntax: \textit{<comma separated list of nodes>::<forward path color, backward path color>}. \textbf{Note the double colons!}.
+
+\NewAdigraph{myCustomPathAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}
+\myAdigraph{
+ s,3,4,2,t::green;
+ s,1,2::red;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myCustomPathAdigraph{
+ s,1,2::red;
+ s,3,4,2,t::green;
+ }
+ \end{subfigure}
+\end{figure}
+
+\section{Cuts}
+The following is to add cuts to show minimum cuts for example, the syntax is: \textit{<first node, second node;>}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\myAdigraph{}{
+ 3,4;
+ 2,t;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{}{
+ 2,t;
+ 3,4;
+ }
+ \end{subfigure}
+\end{figure}
+
+\subsection{Colored cuts}
+If you'd like to color the cuts you just have to add the color as follows: \textit{<first node, second node, color;>}. \textbf{Note that if you want to only add a cut and not an augmenting path and a cut, you still need to add the empty curly braces \{\}.}
+
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\myAdigraph{}{
+ 3,4,red;
+ 2,t,blue;
+ 2,4,green;
+}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \myAdigraph{}{
+ 2,t,red;
+ 3,4,blue;
+ 2,4,green;
+ }
+ \end{subfigure}
+\end{figure}
+
+\section{Non oriented (undirected) edges and custom edge stiles}
+If you need non oriented edges or in general to ad a custom style to your edges you can proceed as follows:
+\subsection{Non oriented (undirected)}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myCustomEdgesAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}[-]
+\myCustomEdgesAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myCustomEdgesAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+ }{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+ }[-]
+ \myCustomEdgesAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\subsection{Dashed}
+\begin{figure}
+ \begin{subfigure}{0.49\textwidth}
+ \begin{minted}{latex}
+\NewAdigraph{myCustomEdgesAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+}{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+}[dashed]
+\myCustomEdgesAdigraph{}
+\end{minted}
+ \end{subfigure}
+ \begin{subfigure}{0.49\textwidth}
+ \NewAdigraph{myCustomEdgesAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+ }{
+ s,1:25;
+ s,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+ }[dashed]
+ \myCustomEdgesAdigraph{}
+ \end{subfigure}
+\end{figure}
+
+\chapter{PyAdigraph}
+\href{https://github.com/LucaCappelletti94/pyadigraph}{Pyadigraph} turns your networkx into Adigraph latex package. It requires Adigraph (1.7.0+) to work.
+
+\section{Installation}
+The package can be installed by simply running:
+\begin{minted}{bash}
+pip installed pyadigraph
+\end{minted}
+\clearpage
+\section{Example}
+\subsection{Python code}
+For example by running the following python code:
+\begin{minted}{python}
+from pyadigraph import Adigraph
+import networkx as nx
+
+A = Adigraph(
+ vertices_color_fallback="gray!90",
+ edges_color_fallback="gray!90",
+ sub_caption="My adigraph number {i} of {n}",
+ sub_label="adigraph_{i}_{n}",
+ row_size=1,
+ caption="A graph generated with python and latex.",
+ label="pyadigraph_example"
+)
+
+A.add_graph(
+ nx.bipartite.random_graph(4, 4, 1),
+ vertices_color={
+ 0: 'red!90',
+ 1: 'red!90',
+ 4: 'cyan!90',
+ 7: 'cyan!90'
+ })
+
+A.save("test/result.tex", document=True)
+\end{minted}
+\clearpage
+\subsection{Latex result}
+You automatically obtain the following latex:
+
+\begin{minted}{latex}
+\documentclass{report}
+\usepackage{adigraph}
+\usepackage{subcaption}
+
+\begin{document}
+\begin{figure}
+ \begin{subfigure}{1.0\textwidth}
+ \NewAdigraph{myAdigraph}{
+ 0,red!90,:-0.4386601404141742\textwidth,0.2091077552922947\textwidth:;
+ 1,red!90,:-0.15708496776680972\textwidth,0.09630690244229406\textwidth:;
+ 2,gray!90,:0.43887677279554366\textwidth,-0.2079924280020609\textwidth:;
+ 3,gray!90,:0.15678823839504888\textwidth,-0.09746320565948384\textwidth:;
+ 4,cyan!90,:-0.3736460590634439\textwidth,-0.327631363498189\textwidth:;
+ 5,gray!90,:0.3735687548614322\textwidth,0.3275275669374224\textwidth:;
+ 6,gray!90,:-0.042735184609099336\textwidth,-0.4998552275122768\textwidth:;
+ 7,cyan!90,:0.0428925858015027\textwidth,0.5\textwidth:;
+ }{
+ 0,4,gray!90,::;
+ 0,5,gray!90,::;
+ 0,6,gray!90,::;
+ 0,7,gray!90,::;
+ 1,4,gray!90,::;
+ 1,5,gray!90,::;
+ 1,6,gray!90,::;
+ 1,7,gray!90,::;
+ 2,4,gray!90,::;
+ 2,5,gray!90,::;
+ 2,6,gray!90,::;
+ 2,7,gray!90,::;
+ 3,4,gray!90,::;
+ 3,5,gray!90,::;
+ 3,6,gray!90,::;
+ 3,7,gray!90,::;
+ }[]
+ \myAdigraph{}
+ \caption{My adigraph number 1 of 1}\label{adigraph_1_1}
+ \end{subfigure}
+ \caption{A graph generated with python and latex.}\label{pyadigraph_example}
+\end{figure}
+\end{document}
+\end{minted}
+
+And once you compile that you receive a graph like the following:
+\begin{figure}
+ \includegraphics[width=0.5\textwidth]{img_examples/pyadigraph.png}
+\end{figure}
+
+\chapter{Utilities}
+If for some reason you need to disable all the adigraphs in your latex code, for example using an online editor such as Overleaf that allows only a given maximum compile time, you can use the following command:
+
+\begin{minted}{latex}
+ \DisableAdigraphs
+\end{minted}
+
+You can then re-enable adigraphs with:
+
+\begin{minted}{latex}
+ \EnableAdigraphs
+\end{minted}
+
+\chapter{Warnings}
+\section{Reserved words}
+I reserve to use for the package the following tokens:
+
+\begin{multicols}{2}
+ \begin{enumerate}
+ \item \textbackslash Adigraph
+ \item \textbackslash AdigraphBuildEdge
+ \item \textbackslash AdigraphBuildEdgeWrapper
+ \item \textbackslash AdigraphBuildNode
+ \item \textbackslash AdigraphBuildNodeWrapper
+ \item \textbackslash AdigraphBuildPath
+ \item \textbackslash AdigraphCalculateOrientation
+ \item \textbackslash AdigraphCountPaths
+ \item \textbackslash AdigraphCutBuilder
+ \item \textbackslash AdigraphDrawEdge
+ \item \textbackslash AdigraphDrawNode
+ \item \textbackslash AdigraphEdgeBuilder
+ \item \textbackslash AdigraphEdgeDrawer
+ \item \textbackslash AdigraphElaboratePath
+ \item \textbackslash AdigraphExecuteCutBuilder
+ \item \textbackslash AdigraphGenerateNodeName
+ \item \textbackslash AdigraphMemorizeEdge
+ \item \textbackslash AdigraphMemorizeNode
+ \item \textbackslash AdigraphNodeBuilder
+ \item \textbackslash AdigraphNodeCounter
+ \item \textbackslash AdigraphNodeCounterSecondWrapper
+ \item \textbackslash AdigraphNodeCounterWrapper
+ \item \textbackslash AdigraphNodesCounter
+ \item \textbackslash AdigraphPathBuilder
+ \item \textbackslash AdigraphProcessAugmentingPaths
+ \item \textbackslash AdigraphProcessAugmentingPathsList
+ \item \textbackslash AdigraphProcessCuts
+ \item \textbackslash AdigraphProcessEdges
+ \item \textbackslash AdigraphProcessNodes
+ \item \textbackslash AdigraphProcessPaths
+ \item \textbackslash AdigraphSimpleSum
+ \item \textbackslash NewAdigraph
+ \item \textbackslash RenewAdigraph
+ \item \textbackslash DisableAdigraphs
+ \end{enumerate}
+\end{multicols}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/adigraph/adigraph_working_test.pdf b/graphics/pgf/contrib/adigraph/adigraph_working_test.pdf
new file mode 100644
index 0000000000..749a1dff1c
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/adigraph_working_test.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/adigraph/adigraph_working_test.tex b/graphics/pgf/contrib/adigraph/adigraph_working_test.tex
new file mode 100644
index 0000000000..b0a5376e06
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/adigraph_working_test.tex
@@ -0,0 +1,150 @@
+\documentclass{report}
+
+\usepackage[usenames,dvipsnames]{xcolor}
+\usepackage{adigraph}
+
+\title{Adigraph, \AdigraphVersionNumber, small working test}
+\author{Luca Cappelletti}
+\date{November 2018}
+
+\begin{document}
+\maketitle
+\begin{center}
+ \NewAdigraph{myAdigraph}{
+ 0:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+ }{
+ 0,1:25;
+ 0,3:25;
+ 3,4:25;
+ 1,2:35;
+ 2,t:20;
+ 4,t:30;
+ 3,1:10;
+ 4,2:10;
+ 2,3:15::near start;
+ 4,1:5::near start;
+ }
+
+ \begin{figure}
+ \myAdigraph{}
+ \end{figure}
+
+
+ \begin{figure}
+ \myAdigraph{
+ 0,3,4,2,t:5;
+ }
+ \end{figure}
+
+ \begin{figure}
+ \myAdigraph{}{
+ 2,t,red;
+ 3,4,blue;
+ }
+ \end{figure}
+ \NewAdigraph{mySecondAdigraph}{
+ 1:4;
+ 2:4;
+ 3:4;
+ 4:4;
+ 5:4;
+ 6:4;
+ 7:4;
+ 8:4;
+ }{
+ 1,*:3;
+ 2,*:3;
+ 3,*:3;
+ 4,*:3;
+ 5,*:3;
+ 6,*:3;
+ 7,*:3;
+ 8,*:3;
+ }
+
+ \begin{figure}
+ \mySecondAdigraph{}
+ \end{figure}
+ \NewAdigraph{myThirdAdigraph}{
+ s:0,0;
+ 1:2,2;
+ 3:2,-2;
+ 2:6,2;
+ 4:6,-2;
+ t:8,0;
+ }{
+ s,+:25;
+ s,+:25;
+ 3,+:25;
+ 1,*:35;
+ 2,+:20.567;
+ 3,+:1.67;
+ 4,+:10;
+ 2,+:15.97;
+ 4,+:5;
+ }
+
+ \begin{figure}
+ \myThirdAdigraph{}
+ \end{figure}
+ \begin{figure}
+ \myThirdAdigraph{s,3,4,2,t:5;}
+ \end{figure}
+ \begin{figure}%
+ \myThirdAdigraph{}{
+ 2,1,red;
+ 3,4,blue;
+ }
+ \end{figure}
+
+ \NewAdigraph{myForthAdigraph}{
+ 1:4;
+ 2,Melon,1:4;
+ 3:4;
+ 4:4;
+ 5:4;
+ 6,purple,5:4;
+ 7:4;
+ 8:4;
+ }{
+ 1,2:5;
+ 2,3:5.0;
+ 3,4:10;
+ 4,5:5;
+ 5,6,purple,5:5;
+ }
+ \begin{figure}
+ \myForthAdigraph{
+ 1,2,3:0;
+ }
+ \end{figure}
+
+ \NewAdigraph{myFifthAdigraph}{
+ 1:4;
+ 2:4;
+ 3:4;
+ 4:4;
+ 5:4;
+ 6:4;
+ 7:4;
+ 8:4;
+ }{
+ 1,*,red!80;
+ *,4,blue;
+ 2,3;
+ 3,4;
+ }
+
+ \begin{figure}
+ \myFifthAdigraph{
+ 2,3,4::purple:5;
+ }
+ \end{figure}
+\end{center}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/adigraph/img_examples/example_0.jpg b/graphics/pgf/contrib/adigraph/img_examples/example_0.jpg
new file mode 100644
index 0000000000..9e530cad25
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/img_examples/example_0.jpg
Binary files differ
diff --git a/graphics/pgf/contrib/adigraph/img_examples/example_1.jpg b/graphics/pgf/contrib/adigraph/img_examples/example_1.jpg
new file mode 100644
index 0000000000..e138941925
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/img_examples/example_1.jpg
Binary files differ
diff --git a/graphics/pgf/contrib/adigraph/img_examples/example_2.jpg b/graphics/pgf/contrib/adigraph/img_examples/example_2.jpg
new file mode 100644
index 0000000000..d822f93b1d
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/img_examples/example_2.jpg
Binary files differ
diff --git a/graphics/pgf/contrib/adigraph/img_examples/example_3.jpg b/graphics/pgf/contrib/adigraph/img_examples/example_3.jpg
new file mode 100644
index 0000000000..c2ba7c7374
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/img_examples/example_3.jpg
Binary files differ
diff --git a/graphics/pgf/contrib/adigraph/img_examples/pyadigraph.png b/graphics/pgf/contrib/adigraph/img_examples/pyadigraph.png
new file mode 100644
index 0000000000..69c61f16fa
--- /dev/null
+++ b/graphics/pgf/contrib/adigraph/img_examples/pyadigraph.png
Binary files differ
diff --git a/graphics/pgf/contrib/aobs-tikz/README b/graphics/pgf/contrib/aobs-tikz/README
new file mode 100644
index 0000000000..318a2f7cc9
--- /dev/null
+++ b/graphics/pgf/contrib/aobs-tikz/README
@@ -0,0 +1,16 @@
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+aobs-tikz - TikZ auxiliary styles for Beamer overlays
+
+E-mail: claudio dot fiandrino at gmail dot com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package defines auxiliary TikZ styles useful for
+overlaying pictures' elements in Beamer.
+
+The TikZ styles are grouped in a library, overlay-beamer-styles
+which is automatically called by the aobs-tikz package. Users
+can either load only aobs-tikz or the library; the latter method
+necessitates TikZ manual load.
diff --git a/graphics/pgf/contrib/aobs-tikz/aobs-tikz.dtx b/graphics/pgf/contrib/aobs-tikz/aobs-tikz.dtx
new file mode 100644
index 0000000000..dfdc624b37
--- /dev/null
+++ b/graphics/pgf/contrib/aobs-tikz/aobs-tikz.dtx
@@ -0,0 +1,581 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+aobs-tikz - TikZ auxiliary styles for Beamer overlays
+
+E-mail: claudio dot fiandrino at gmail dot com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package defines auxiliary TikZ styles useful for
+overlaying pictures' elements in Beamer.
+
+The TikZ styles are grouped in a library, overlay-beamer-styles
+which is automatically called by the aobs-tikz package. Users
+can either load only aobs-tikz or the library; the latter method
+necessitates TikZ manual load.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+aobs-tikz - TikZ auxiliary styles for Beamer overlays
+
+E-mail: claudio dot fiandrino at gmail dot com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package defines auxiliary TikZ styles useful for
+overlaying pictures' elements in Beamer.
+
+The TikZ styles are grouped in a library, overlay-beamer-styles
+which is automatically called by the aobs-tikz package. Users
+can either load only aobs-tikz or the library; the latter method
+necessitates TikZ manual load.
+\endpreamble
+\postamble
+
+Copyright (C) 2014 by Claudio Fiandrino <claudio.fiandrino@gmail.com>
+
+This file may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version.
+The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work is "maintained" (as per LPPL maintenance status) by
+Claudio Fiandrino.
+
+This work consists of the files aobs-tikz.dtx
+and the derived files aobs-tikz.ins
+ aobs-tikz.sty
+ tikzlibrarybeamer-overlay-styles.code.tex
+ aobs-tikz.pdf
+ example.tex
+ example.pdf
+ README.txt
+
+\endpostamble
+\generate{\file{tikzlibraryoverlay-beamer-styles.code.tex} {\from{\jobname.dtx}{tikzlibrary}}}
+\generate{\file{example.tex} {\from{\jobname.dtx}{example}}}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{aobs-tikz}[2014/01/12 v1.0 Auxiliary TikZ styles for picture overlay in Beamer]
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{csquotes}
+\usepackage{charter,pxfonts}
+\RequirePackage[dvipsnames]{xcolor}%
+\definecolor{Eored}{rgb}{.647,.129,.149}
+\definecolor{Eogreen}{rgb}{0,0.53,0}
+\convertcolorspec{cmyk}{0.94,0.53,0,0}{rgb}\Eoblue
+\definecolor{Eoblue}{rgb}{\Eoblue}
+\usepackage{listings}
+\lstset{language=[LaTeX]Tex,
+ keywordstyle=\color{Eored},
+ texcsstyle=*\color{Eored},
+ basicstyle=\footnotesize\ttfamily,
+ commentstyle=\footnotesize\color{Eogreen}\rmfamily,
+ stringstyle=\footnotesize\rmfamily,
+ showstringspaces=false,
+ morekeywords={usetikzlibrary,node,tikzset,tikzstyle,
+ path,draw,foreach,pgfmathsetmacro,tikz},
+ literate=
+ *{\{}{{{\color{Eoblue}{\{}}}}{1}
+ {\}}{{{\color{Eoblue}{\}}}}}{1}
+ {(}{{{\color{Eoblue}{(}}}}{1}
+ {)}{{{\color{Eoblue}{)}}}}{1}
+ {[}{{{\color{Eoblue}{[}}}}{1}
+ {]}{{{\color{Eoblue}{]}}}}{1}
+ {!}{{{!}}}{1},
+}
+
+\usepackage{hypdoc}
+\newcommand\aobstikz{\textsf{aobs-tikz}}
+\newcommand\aobstikzversion{1.0}
+\newcommand\aobstikzdate{\today}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{101}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v0.1}{2013/12/19}{Initial version}
+% \changes{v0.2}{2013/12/23}{Path aspects}
+%
+% \GetFileInfo{aobs-tikz.sty}
+%
+% \title{The \aobstikz{} package\thanks{This document
+% corresponds to \textsf{aobs-tikz}~v\aobstikzversion,
+% dated~\aobstikzdate. It is released under and subject to the latest version of the \href{http://www.latex-project.org/lppl/}{\LaTeX\ Project Public License (LPPL)}.}}
+% \author{Claudio Fiandrino \\ \footnotesize\href{mailto:claudio.fiandrino@gmail.com}{claudio.fiandrino@gmail.com}}
+% \maketitle
+%
+% \begin{abstract}
+% The package provides auxiliary styles helpful for drawing overlayed pictures in Beamer. These styles should be intended as extension of the previous work shown by user \href{http://tex.stackexchange.com/users/3751/daniel}{Daniel} of \href{http://tex.stackexchange.com}{TeX.SX} in \href{http://tex.stackexchange.com/q/55806/13304}{Mindmap tikzpicture in beamer (reveal step by step)}.
+% \end{abstract}
+% \tableofcontents
+%\section{Introduction}
+% The aim of \aobstikz{} is to provide users simple tools to create overlayed-aware pictures for Beamer presentations. A set of new TikZ styles, grouped within a library, has been define on purpose.
+%
+% The library is proposed as extension of the previous work by user \href{http://tex.stackexchange.com/users/3751/daniel}{Daniel} on \href{www.tex-stackexchange.com}{TeX.SX}, illustrated in \href{http://tex.stackexchange.com/q/55806/13304}{Mindmap tikzpicture in beamer (reveal step by step)}. The very first version of the library has been implemented for answering the question \href{http://tex.stackexchange.com/q/84513/13304}{Highlighting in Beamer using TikZ nodes}: \aobstikz{} further extends and improves the original styles.
+%
+% The main advantage of using the new styles is that they automatically prevent the so called \emph{jumping-effect} which occasionally happen with Beamer.
+%
+% \section{The new styles}
+% The new styles can create overlays by altering the colors and the aspect of pictures' elements.
+% Usually, to create an animation, the elements have to appear or disapper, the shading, the fill or the border color should change. To achieve this goal, three features have to be specified: the normal behavior, the modified behaviour and the moments in which the modified behaviour takes place. \aobstikz{} defines TikZ styles for these three features accordingly . For example, to alter the shape filling, it is possible to exploit:
+% \begin{itemize}
+% \item \texttt{background default fill=<\textit{style}>}: the style used for default behaviour;
+% \item \texttt{background fill=<\textit{style}>}: the style used for the modified behaviour;
+% \item \texttt{fill on=<\textit{overlay specifications}>}: moments in which the modified behaviour is activated.
+% \end{itemize}
+% The new styles can alter the following TikZ properties:
+% \begin{itemize}
+% \item \emph{fill};
+% \item \emph{draw};
+% \item \emph{filldraw};
+% \item \emph{text};
+% \item path aspect, including thickness, double line and pattern (solid, dashed, dotted, etc\ldots);
+% \item \emph{shade};
+% \item \emph{shadedraw}.
+% \end{itemize}
+% \DescribeMacro{draw}^^A
+% To alter the border color properties, the following options are available:
+% \begin{itemize}
+% \item \texttt{background default draw=<\textit{style}>};
+% \item \texttt{background draw=<\textit{style}>};
+% \item \texttt{draw on=<\textit{overlay specifications}>}.
+% \end{itemize}
+% \DescribeMacro{filldraw}^^A
+% To alter the both filling and border color properties, the following options are available:
+% \begin{itemize}
+% \item \texttt{background default filldraw=<\textit{\textcolor{orange}{border-col} filled by \textcolor{orange}{fill-col}}>};
+% \item \texttt{background filldraw=<\textit{\textcolor{orange}{border-col} filled by \textcolor{orange}{fill-col}}>};
+% \item \texttt{filldraw on=<\textit{overlay specifications}>}.
+% \end{itemize}
+% \DescribeMacro{text}^^A
+% To alter the \texttt{text} color properties, the following options are available:
+% \begin{itemize}
+% \item \texttt{background default text=<\textit{style}>};
+% \item \texttt{background text=<\textit{style}>};
+% \item \texttt{text on=<\textit{overlay specifications}>}.
+% \end{itemize}
+% \DescribeMacro{path aspect}^^A
+% To alter the path aspect, the following options are available:
+% \begin{itemize}
+% \item \texttt{background default aspect=<\textit{style}>};
+% \item \texttt{background aspect=<\textit{style}>};
+% \item \texttt{aspect on=<\textit{overlay specifications}>}.
+% \end{itemize}
+% \DescribeMacro{shade}^^A
+% To alter the shading properties, the following options are available:
+% \begin{itemize}
+% \item \texttt{background default shade=<\textit{style}>};
+% \item \texttt{background shade=<\textit{style}>};
+% \item \texttt{shade on=<\textit{overlay specifications}>}.
+% \end{itemize}
+% \DescribeMacro{shadedraw}^^A
+% To alter both filling and border color properties, the following options are available:
+% \begin{itemize}
+% \item \texttt{background default shadedraw=<\textit{style}>};
+% \item \texttt{background shadedraw=<\textit{style}>};
+% \item \texttt{shadedraw on=<\textit{overlay specifications}>}.
+% \end{itemize}
+% \StopEventually{\PrintChanges}
+% \section{Implementation}
+% \subsection{Package}
+%
+% \iffalse
+%<*package>
+% \fi
+% The package itself loads only TikZ and the library \texttt{overlay-beamer-styles}.
+% \begin{macrocode}
+\RequirePackage{tikz}
+\usetikzlibrary{overlay-beamer-styles}
+% \end{macrocode}
+% \iffalse
+%</package>
+% \fi
+% \iffalse
+%<*tikzlibrary>
+% \fi
+% \subsection{TikZ Library}
+% The core of the package is the TikZ library \texttt{overlay-beamer-styles}. The first style defined is \texttt{visible on} based on prior work by user \href{http://tex.stackexchange.com/users/3751/daniel}{Daniel} of \href{http://tex.stackexchange.com}{TeX.SX} in \href{http://tex.stackexchange.com/q/55806/13304}{Mindmap tikzpicture in beamer (reveal step by step)}. The original style has been enforced to make it working also in presence of opaque text.
+% \begin{macrocode}
+\tikzset{
+ invisible/.style={opacity=0,text opacity=0},
+ visible on/.style={alt=#1{}{invisible}},
+ alt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
+ },
+}
+
+\tikzset{
+ background text/.style={text=#1},
+ background text/.default={black},
+ background default text/.style={
+ background text/.default={#1},
+ },
+ text on/.style={alt=#1{}{background text}},
+}
+
+\tikzset{
+ background fill/.style={fill=#1},
+ background fill/.default={white},
+ background default fill/.style={
+ background fill/.default={#1},
+ },
+ fill on/.style={alt=#1{}{background fill}},
+}
+
+\tikzset{
+ background draw/.style={draw=#1},
+ background draw/.default={white},
+ background default draw/.style={
+ background draw/.default={#1},
+ },
+ draw on/.style={alt=#1{}{background draw}}
+}
+
+\tikzset{
+ background filldraw/.style args={#1 filled by #2}{draw=#1, fill=#2},
+ background filldraw/.default=white filled by white,
+ background default filldraw/.style={
+ background filldraw/.default={#1},
+ },
+ filldraw on/.style={alt=#1{}{background filldraw}},
+}
+
+\tikzset{
+ background aspect/.style={#1},
+ background aspect/.default={white},
+ background default aspect/.style={
+ background aspect/.default={#1},
+ },
+ aspect on/.style={alt=#1{}{background aspect}},
+}
+
+\tikzset{
+ background shade/.style={#1},
+ background shade/.default={top color=white, bottom color=white},
+ background default shade/.style={
+ background shade/.default={#1},
+ },
+ shade on/.style={alt=#1{}{background shade}},
+}
+
+\tikzset{
+ background shadedraw/.style 2 args={draw=#1, #2},
+ background shadedraw/.default={white}{top color=white, bottom color=white},
+ background default shadedraw/.style={
+ background shadedraw/.default={#1},
+ },
+ shadedraw on/.style={alt=#1{}{background shadedraw}},
+}
+% \end{macrocode}
+% At this point, some comments are needed on the subsequent option \texttt{double disabled}. For the best of my knowledge, this is option is not implemented in PGF 2.10 either in PGF 3.0.0, but it is absolutely relevant to the scope of this library. Suppose you wish to alter a double path by removing in some moments its double property: without the following option, it would not be possible (at least without redrawing the path).
+% \begin{macrocode}
+% option for disabling double when not needed in
+% subsequent overlays
+\tikzoption{double disabled}[0pt]{%
+ \pgfmathsetlength{\pgf@x}{#1}%
+ \edef\tikz@double@setup{%
+ \pgf@x=\the\pgf@x%
+ \pgflinewidth=\pgf@x%
+ \noexpand\pgfsetlinewidth{\pgflinewidth}%
+ \noexpand\pgfsetinnerlinewidth{\the\pgf@x}%
+ }%
+\tikzset{double}}
+% \end{macrocode}
+%
+% \iffalse
+%</tikzlibrary>
+% \fi
+%
+% \section{Example}
+% It follows a complete example which exploits all the defined styles. The first frame mainly reports showcases of border, filling and shading properties modifications. The second frame shows examples of modifications for the remaining properties, including text color and path aspect.
+%
+% \iffalse
+%<*example>
+% \fi
+% \begin{macrocode}
+\documentclass{beamer}
+\usepackage{lmodern}
+\usepackage{tikz}
+\usetikzlibrary{positioning,
+ shapes.geometric,
+ shadows
+}
+% loading new library
+\usetikzlibrary{overlay-beamer-styles}
+
+\definecolor{processblue}{cmyk}{0.96,0,0,0}
+
+\begin{document}
+\begin{frame}{Styles for draw, fill and shading modifications}
+\begin{columns}[T]
+\begin{column}{0.2\textwidth}
+\centering
+Fill draw\\[2ex]
+\tikz[baseline=(A.base)]{%
+\node[background fill=red!50,%
+ fill on=<2>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {ABCD};
+}
+
+\tikz[baseline=(A.base)]{%
+\node[background fill=blue!50,%
+ fill on=<{1,3}>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {EFGH};
+}
+
+\tikz[baseline=(A.base)]{%
+\node[background draw=red,%
+ draw on=<2>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {IJKL};
+}
+
+\tikz[baseline=(A.base)]{%
+\node[background draw=blue,%
+ draw on=<{1,3}>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {MNOP};
+}
+
+\tikz[baseline=(A.base)]{%
+\node[background filldraw=red filled by blue!10,%
+ filldraw on=<2>,anchor=base,%
+ rounded corners,%
+ ] (A) {QRST};
+}
+\end{column}
+\begin{column}{0.2\textwidth}
+\centering
+Shadings\\[2ex]
+\tikz[baseline=(A.base)]{%
+\node[background shade={top color=red!50, bottom color=white},%
+ shade on=<2>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {ABCD};
+}
+
+\tikz[baseline=(A.base)]{%
+\node[background shade={inner color=red!50, outer color=white},%
+ shade on=<{1,3}>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {EFGH};
+}
+
+\tikz[baseline=(A.base)]{
+\node[background shade={left color=orange!50, right color=white},%
+ shade on=<2>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {IJKL};
+}
+
+\tikz[baseline=(A.base)]{
+\node[background shadedraw={blue}{top color=white, bottom color=cyan!30},%
+ shadedraw on=<{1,3}>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {MNOP};
+}
+
+\tikz[baseline=(A.base)]{
+\node[background shadedraw={green!50!black}{inner color=white,%
+ outer color=green!30},%
+ shadedraw on=<2>,%
+ anchor=base,%
+ rounded corners,%
+ ] (A) {QRST};
+}
+\end{column}
+\begin{column}{0.55\textwidth}
+\centering
+Node application\\[2ex]
+\begin{tikzpicture}[node distance=0.5cm]
+% \end{macrocode}
+% Of course, it is always possible to group in high-level styles the styles provided by \aobstikz.
+% \begin{macrocode}
+\tikzset{visibility 1/.style={
+ background draw=red, draw on=<{1,4}>,
+ background shade={top color=white,
+ bottom color=red!30},
+ shade on=<{2,3}>,
+ }
+}
+\tikzset{visibility 2/.style={
+ background shadedraw={green!50!black}{inner color=white,
+ outer color=green!30},
+ shadedraw on=<{2,3}>,
+ }
+}
+\tikzset{visibility 3/.style={
+ background draw=orange,
+ draw on=<1->,
+ background fill={orange!30},
+ fill on=<{2,3}>,
+ }
+}
+% \end{macrocode}
+% The following high-level style shows that the new styles can be combined to obtained more fine results. Specifically, rather than using a \textit{shadedraw} modification, the \texttt{visibility 4} style exploits separately \textit{shade} and \textit{draw} modifications to having them visible in different overlays.
+% \begin{macrocode}
+\tikzset{visibility 4/.style={
+ background draw=purple,
+ draw on=<2->,
+ background shade={left color=purple!30,
+ right color=cyan!30},
+ shade on=<{3,4}>,
+ }
+}
+\node[trapezium,
+ visibility 1] (A) {Text};
+\node[trapezium,
+ visibility 2,
+ below= of A] (B) {Text};
+\node[trapezium,
+ visibility 3,
+ below= of B] (C) {Text};
+\node[trapezium,
+ visibility 4,
+ below= of C] (D) {Text};
+\end{tikzpicture}
+\end{column}
+\end{columns}
+\end{frame}
+
+\begin{frame}{Styles for path aspect and text color modifications}
+\centering
+\begin{tikzpicture}[node distance=3cm and 2cm,
+ semithick ,
+ state/.style={circle,
+ top color=white,
+ bottom color=processblue!20,
+ draw, processblue,
+ text=blue,
+ minimum width=1cm},
+ background default shade={top color=white,
+ bottom color=processblue!20},
+ background default draw={processblue,
+ semithick}]
+% \end{macrocode}
+% Shadows can be managed with the help of the style \texttt{visible on}: it follows an example with a \textit{circular drop shadow}.
+% \begin{macrocode}
+\node[state,
+ background draw={blue!80,
+ line width=1mm},
+ draw on=<2>,
+ circular drop shadow={visible on=<2>},
+ visible on=<{1,2}>% NOT visible in 3
+ ] (C) {$1$};
+\node[state,
+ background draw={orange},
+ draw on=<{1,3}>,
+ background default aspect={semithick,
+ double disabled},
+ background aspect={double},
+ aspect on=<{1,3}>,
+ background shade={top color=white,
+ bottom color=orange!30},
+ shade on=<{1,3}>,
+ above left= of C] (A) {$0$};
+
+\node[state,
+ background text=violet,
+ background default text=red,
+ text on=<2>,
+ above right= of C] (B) {$2$};
+
+\draw (A)-- (B) (C)-- (A);
+
+\draw[background default aspect={solid,semithick},
+ background aspect={dashdotted,
+ very thick},
+ aspect on=<{2,3}>,
+ background default draw={black},
+ background draw={red},
+ draw on=<3>](B)-- (C);
+\end{tikzpicture}
+\end{frame}
+\end{document}
+% \end{macrocode}
+% \iffalse
+%</example>
+% \fi
+%
+%
+%\Finale
diff --git a/graphics/pgf/contrib/aobs-tikz/aobs-tikz.ins b/graphics/pgf/contrib/aobs-tikz/aobs-tikz.ins
new file mode 100644
index 0000000000..6bc7dc2763
--- /dev/null
+++ b/graphics/pgf/contrib/aobs-tikz/aobs-tikz.ins
@@ -0,0 +1,101 @@
+%%
+%% This is file `aobs-tikz.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% aobs-tikz.dtx (with options: `install')
+%% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%% aobs-tikz - TikZ auxiliary styles for Beamer overlays
+%%
+%% E-mail: claudio dot fiandrino at gmail dot com
+%%
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%%
+%% The package defines auxiliary TikZ styles useful for
+%% overlaying pictures' elements in Beamer.
+%%
+%% The TikZ styles are grouped in a library, overlay-beamer-styles
+%% which is automatically called by the aobs-tikz package. Users
+%% can either load only aobs-tikz or the library; the latter method
+%% necessitates TikZ manual load.
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+aobs-tikz - TikZ auxiliary styles for Beamer overlays
+
+E-mail: claudio dot fiandrino at gmail dot com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package defines auxiliary TikZ styles useful for
+overlaying pictures' elements in Beamer.
+
+The TikZ styles are grouped in a library, overlay-beamer-styles
+which is automatically called by the aobs-tikz package. Users
+can either load only aobs-tikz or the library; the latter method
+necessitates TikZ manual load.
+\endpreamble
+\postamble
+
+Copyright (C) 2014 by Claudio Fiandrino <claudio.fiandrino@gmail.com>
+
+This file may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version.
+The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work is "maintained" (as per LPPL maintenance status) by
+Claudio Fiandrino.
+
+This work consists of the files aobs-tikz.dtx
+and the derived files aobs-tikz.ins
+ aobs-tikz.sty
+ tikzlibrarybeamer-overlay-styles.code.tex
+ aobs-tikz.pdf
+ example.tex
+ example.pdf
+ README.txt
+
+\endpostamble
+\generate{\file{tikzlibraryoverlay-beamer-styles.code.tex} {\from{\jobname.dtx}{tikzlibrary}}}
+\generate{\file{example.tex} {\from{\jobname.dtx}{example}}}
+\endbatchfile
+%%
+%% Copyright (C) 2014 by Claudio Fiandrino <claudio.fiandrino@gmail.com>
+%%
+%% This file may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3 of this
+%% license or (at your option) any later version.
+%% The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Claudio Fiandrino.
+%%
+%% This work consists of the files aobs-tikz.dtx
+%% and the derived files aobs-tikz.ins
+%% aobs-tikz.sty
+%% tikzlibrarybeamer-overlay-styles.code.tex
+%% aobs-tikz.pdf
+%% example.tex
+%% example.pdf
+%% README.txt
+%%
+%%
+%% End of file `aobs-tikz.ins'.
diff --git a/graphics/pgf/contrib/aobs-tikz/aobs-tikz.pdf b/graphics/pgf/contrib/aobs-tikz/aobs-tikz.pdf
new file mode 100644
index 0000000000..2ca384f528
--- /dev/null
+++ b/graphics/pgf/contrib/aobs-tikz/aobs-tikz.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/battleship/README b/graphics/pgf/contrib/battleship/README
new file mode 100644
index 0000000000..33265b4222
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/README
@@ -0,0 +1,18 @@
+A LaTeX style file for typesetting Battleship logic puzzles
+(aka Bimaru, Marinespiel, Batalla Naval, ...).
+You have to find the positions of ships in a grid.
+Numbers next to the grid reveal the number
+of ship segments in the respective columns and rows.
+
+License: LPPL
+
+Changes in v1.2:
+
+- added options title, counterstyle and bgcolor
+ -> \puzzlecounter, \setpuzzlecounter,
+ \definecounterstyle, \titleformat
+
+- added \classicgame
+ drawing game sheets for classic Battleship
+
+- moved logic puzzle code base to logicpuzzle.sty \ No newline at end of file
diff --git a/graphics/pgf/contrib/battleship/battleship.sty b/graphics/pgf/contrib/battleship/battleship.sty
new file mode 100644
index 0000000000..e7b106df3b
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/battleship.sty
@@ -0,0 +1,423 @@
+%%
+%% Copyright (C) 2013 by:
+%% Josef Kleber
+%% <josef.kleber@gmx.de>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "author-maintained".
+%%
+%% The Current Maintainer of this work is Josef Kleber.
+%%
+%% This work consists of all files listed in manifest.txt.
+%%
+% for more infos see:
+% http://en.wikipedia.org/wiki/Battleship_%28puzzle%29
+% http://de.wikipedia.org/wiki/Bimaru
+%
+\ProvidesPackage{battleship}[2013/02/23 battleship.sty v1.2 - Josef Kleber (C) 2013]%
+%
+\RequirePackage{logicpuzzle}%
+\tikzstyle{island} = [fill=yellow!30,draw, decorate, decoration={random steps,segment length=2.7pt,amplitude=1.7pt}]%
+%
+% options
+\newcommand*\BS@width{6cm}%
+\newcommand*\BS@fontsize\Large%
+\newcommand*\BS@rows{5}%
+\newcommand*\BS@columns{5}%
+\newcommand*\BS@scale{1}%
+\newcommand*\BS@bgcolor{}%
+\newcommand*\BS@shipcolor{green}%
+\newcommand*\BS@title{}%
+\newcommand*\BS@titleindent{0.75cm}%
+\newcommand*\BS@titlewidth{5.15cm}%
+\newcommand*\BS@SB@indent{0.75cm}%
+\newcommand*\BS@SB@width{5.15cm}%
+\newcommand*\BS@SB@shipboxscale{1}%
+%
+\newcounter{BS@rows}%
+\newcounter{BS@columns}%
+%
+\setcounter{BS@rows}{\BS@rows}%
+\setcounter{BS@columns}{\BS@columns}%
+\stepcounter{BS@rows}%
+\stepcounter{BS@columns}%
+%
+\define@key{battleship.sty}{rows}[5]%
+{%
+ \renewcommand*\BS@rows{#1}%
+}%
+%
+\define@key{battleship.sty}{columns}[5]%
+{%
+ \renewcommand*\BS@columns{#1}%
+}%
+%
+\define@key{battleship.sty}{shipcolor}[green]%
+{%
+ \renewcommand*\BS@shipcolor{#1}%
+}%
+%
+\define@key{battleship.sty}{scale}[1]%
+{%
+ \renewcommand*\BS@scale{#1}%
+}%
+%
+\define@key{battleship.sty}{counterstyle}[none]%
+{%
+ \renewcommand*\LP@counterstyle{#1}%
+}%
+%
+\define@key{battleship.sty}{bgcolor}[]%
+{%
+ \renewcommand*\BS@bgcolor{#1}%
+}%
+%
+\define@choicekey*{battleship.sty}{fontsize}[\BS@fontsize\nr]{tiny,scriptsize,footnotesize,small,normalsize,large,Large,LARGE,huge,Huge}[Large]%
+{%
+ \ifcase\nr\relax%
+ \renewcommand*\BS@fontsize{\tiny}%
+ \or%
+ \renewcommand*\BS@fontsize{\scriptsize}%
+ \or%
+ \renewcommand*\BS@fontsize{\footnotesize}%
+ \or%
+ \renewcommand*\BS@fontsize{\small}%
+ \or%
+ \renewcommand*\BS@fontsize{\normalsize}%
+ \or%
+ \renewcommand*\BS@fontsize{\large}%
+ \or%
+ \renewcommand*\BS@fontsize{\Large}%
+ \or%
+ \renewcommand*\BS@fontsize{\LARGE}%
+ \or%
+ \renewcommand*\BS@fontsize{\huge}%
+ \or%
+ \renewcommand*\BS@fontsize{\Huge}%
+ \fi%
+}%
+%
+\define@key{battleship.sty}{width}[6cm]%
+{%
+ \renewcommand*\BS@width{#1}%
+}%
+%
+\define@key{battleship.sty}{title}[]%
+{%
+ \renewcommand*\BS@title{#1}%
+}%
+%
+\define@key{battleship.sty}{titleindent}[0.75cm]%
+{%
+ \renewcommand*\BS@titleindent{#1}%
+}%
+%
+\define@key{battleship.sty}{titlewidth}[5.15cm]%
+{%
+ \renewcommand*\BS@titlewidth{#1}%
+}%
+%
+\define@key{battleship.sty}{sbindent}[0.75cm]%
+{%
+ \renewcommand*\BS@SB@indent{#1}%
+}%
+%
+\define@key{battleship.sty}{sbwidth}[5.15cm]%
+{%
+ \renewcommand*\BS@SB@width{#1}%
+}%
+%
+\define@key{battleship.sty}{sbshipscale}[1]%
+{%
+ \renewcommand*\BS@SB@shipboxscale{#1}%
+}%
+%
+\define@key{battleship}{rows}%
+{%
+ \renewcommand*\BS@rows{#1}%
+}%
+%
+\define@key{battleship}{columns}%
+{%
+ \renewcommand*\BS@columns{#1}%
+}%
+%
+\define@key{battleship}{shipcolor}%
+{%
+ \renewcommand*\BS@shipcolor{#1}%
+}%
+%
+\define@key{battleship}{scale}%
+{%
+ \renewcommand*\BS@scale{#1}%
+}%
+%
+\define@key{battleship}{bgcolor}%
+{%
+ \renewcommand*\BS@bgcolor{#1}%
+}%
+%
+\define@key{battleship}{counterstyle}%
+{%
+ \renewcommand*\LP@counterstyle{#1}%
+}%
+%
+\define@choicekey*{battleship}{fontsize}[\BS@fontsize\nr]{tiny,scriptsize,footnotesize,small,normalsize,large,Large,LARGE,huge,Huge}[Large]%
+{%
+ \ifcase\nr\relax%
+ \renewcommand*\BS@fontsize{\tiny}%
+ \or%
+ \renewcommand*\BS@fontsize{\scriptsize}%
+ \or%
+ \renewcommand*\BS@fontsize{\footnotesize}%
+ \or%
+ \renewcommand*\BS@fontsize{\small}%
+ \or%
+ \renewcommand*\BS@fontsize{\normalsize}%
+ \or%
+ \renewcommand*\BS@fontsize{\large}%
+ \or%
+ \renewcommand*\BS@fontsize{\Large}%
+ \or%
+ \renewcommand*\BS@fontsize{\LARGE}%
+ \or%
+ \renewcommand*\BS@fontsize{\huge}%
+ \or%
+ \renewcommand*\BS@fontsize{\Huge}%
+ \fi%
+}%
+%
+\define@key{battleship}{width}%
+{%
+ \renewcommand*\BS@width{#1}%
+}%
+%
+\define@key{battleship}{title}%
+{%
+ \renewcommand*\BS@title{#1}%
+}%
+%
+\define@key{battleship}{titleindent}%
+{%
+ \renewcommand*\BS@titleindent{#1}%
+}%
+%
+\define@key{battleship}{titlewidth}%
+{%
+ \renewcommand*\BS@titlewidth{#1}%
+}%
+%
+\define@key{battleship}{sbindent}%
+{%
+ \renewcommand*\BS@SB@indent{#1}%
+}%
+%
+\define@key{battleship}{sbwidth}%
+{%
+ \renewcommand*\BS@SB@width{#1}%
+}%
+%
+\define@key{battleship}{sbshipscale}%
+{%
+ \renewcommand*\BS@SB@shipboxscale{#1}%
+}%
+%
+\ExecuteOptionsX{rows,columns,width,fontsize,shipcolor,scale,bgcolor,counterstyle,title,titleindent,titlewidth,sbindent,sbwidth,sbshipscale}%
+%
+\ProcessOptionsX\relax%
+%
+\gdef\BS@shipbox{}%
+%
+\newcommand*\Ship{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor] (0,0) circle (1);}%
+\newcommand*\ShipC{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor] (0,0)--(0,2)--(2,2)--(2,0)--cycle;}%
+\newcommand*\ShipT{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](2,1)--(2,0)--(0,0)--(0,1) arc (180:0:1);}%
+\newcommand*\ShipB{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](2,1)--(2,2)--(0,2)--(0,1) arc (180:360:1);}%
+\newcommand*\ShipL{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](1,2)--(2,2)--(2,0)--(1,0) arc (270:90:1);}%
+\newcommand*\ShipR{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](1,2)--(0,2)--(0,0)--(1,0) arc (270:450:1);}%
+\newcommand*\Island{\tikz[scale=\BS@scale]\draw[scale=.36,island] (0,0) rectangle (2,2);}%
+\newcommand*\Water{\tikz[scale=\BS@scale]\draw[scale=.36,fill,blue!40] (1,1) circle (0.2);}%
+% versions for \shipbox without second scale
+\newcommand*\@Ship{\tikz\draw[scale=.144,fill=\BS@shipcolor] (0,0) circle (1);}%
+\newcommand*\@ShipC{\tikz\draw[scale=.144,fill=\BS@shipcolor] (0,0)--(0,2)--(2,2)--(2,0)--cycle;}%
+\newcommand*\@ShipT{\tikz\draw[scale=.144,fill=\BS@shipcolor](2,1)--(2,0)--(0,0)--(0,1) arc (180:0:1);}%
+\newcommand*\@ShipB{\tikz\draw[scale=.144,fill=\BS@shipcolor](2,1)--(2,2)--(0,2)--(0,1) arc (180:360:1);}%
+\newcommand*\@ShipL{\tikz\draw[scale=.144,fill=\BS@shipcolor](1,2)--(2,2)--(2,0)--(1,0) arc (270:90:1);}%
+\newcommand*\@ShipR{\tikz\draw[scale=.144,fill=\BS@shipcolor](1,2)--(0,2)--(0,0)--(1,0) arc (270:450:1);}%
+%
+\newcommand*\BS@printship[1]%
+{%
+ \ifthenelse{\equal{#1}{1}}{\scalebox{\BS@SB@shipboxscale}{\@Ship}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{2}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{3}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{4}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{5}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{6}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{7}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{8}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{9}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{10}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+}%
+%
+\newcommand*\BS@printshipbox[1]%
+{% \expandafters needed because csv list is stored in macro
+ \expandafter\forcsvlist\expandafter\BS@printship\expandafter{#1}%
+}%
+%
+\newcommand*\shipH[1]%
+{%
+ \LP@setcolumncontents{#1}{1}{\value{BS@rows}}{\BS@fontsize}%
+}%
+%
+\newcommand*\shipV[1]%
+{%
+ \LP@setrowcontents{#1}{0}{1}{\BS@fontsize}%
+}%
+%
+\newcommand*\placesegment[3]%
+{%
+ \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}%
+ \LP@setcellcontent{#1}{#2}{#3}%
+}%
+%
+\let\ship\placesegment%
+%
+\newcommand*\placeisland[2]%
+{%
+ \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}%
+ \LP@setcellcontent{#1}{#2}{\Island}%
+}%
+%
+\newcommand*\placewater[2]%
+{%
+ \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}%
+ \LP@setcellcontent{#1}{#2}{\Water}%
+}%
+%
+\newcommand*\shipbox[2][]%
+{%
+ \setkeys{shipbox}{#1}%
+ \gdef\BS@shipbox{#2}%
+}%
+%
+\newcommand*\placeship[4]%
+{%
+ \setcounter{LP@counti}{#4}% length
+ \ifnum\value{LP@counti}<1%
+ \PackageError{battleship}%
+ {ship length < 1}%
+ {The length of your ship should be at least 1}%
+ \fi%
+ \ifnum\value{LP@counti}>10%
+ \PackageError{battleship}%
+ {ship length > 10}%
+ {The supported max length of ships is 10!}%
+ \fi%
+ \ifnum\value{LP@counti}=1%
+ \placesegment{#2}{#3}{\Ship}%
+ \else%
+ \setcounter{LP@whiledo}{\value{LP@counti}}%
+ \addtocounter{LP@whiledo}{-2}% length of middle ship
+ \ifthenelse{\equal{#1}{V}}%
+ {%
+ \placesegment{#2}{#3}{\ShipB}%
+ \setcounter{LP@countii}{#3}%
+ \whiledo{\value{LP@whiledo}>0}%
+ {%
+ \addtocounter{LP@whiledo}{-1}%
+ \stepcounter{LP@countii}%
+ \placesegment{#2}{\theLP@countii}{\ShipC}%
+ }%
+ \stepcounter{LP@countii}%
+ \placesegment{#2}{\theLP@countii}{\ShipT}%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{H}}%
+ {%
+ \placesegment{#2}{#3}{\ShipL}%
+ \setcounter{LP@counti}{#2}%
+ \whiledo{\value{LP@whiledo}>0}%
+ {%
+ \addtocounter{LP@whiledo}{-1}%
+ \stepcounter{LP@counti}%
+ \placesegment{\theLP@counti}{#3}{\ShipC}%
+ }%
+ \stepcounter{LP@counti}%
+ \placesegment{\theLP@counti}{#3}{\ShipR}%
+ }%
+ {\PackageError{battleship}%
+ {invalid direction (H/V)}%
+ {You can place your ship only\MessageBreak%
+ horizontally (H) or vertically (V)!}%
+ }%
+ }%
+ \fi%
+}%
+%
+\newcommand*\battleshipsetup[1]%
+{%
+ \setkeys{battleship.sty}{#1}%
+}%
+%
+\newcommand{\classicgame}[1]%
+{%
+ \begin{center}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Me,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \shipbox{#1}%
+ \end{battleship}%
+ \hspace{1cm}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Enemy,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \end{battleship}%
+ \end{center}%
+ \par\vspace{1cm}%
+ \begin{center}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Me,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \shipbox{#1}%
+ \end{battleship}%
+ \hspace{1cm}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Enemy,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \end{battleship}%
+ \end{center}%
+}%
+%
+\newenvironment{battleship}[1][]%
+{%
+ \setkeys{battleship}{#1}%
+ \shipbox{}% clear shipbox
+ \setcounter{BS@rows}{\BS@rows}%
+ \setcounter{BS@columns}{\BS@columns}%
+ \stepcounter{BS@rows}%
+ \stepcounter{BS@columns}%
+ \begin{minipage}[t]{\BS@width}%
+ \ifthenelse{\equal{\BS@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\BS@titleindent}\parbox{\BS@titlewidth}{\strut\LP@titleformat\BS@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[scale=\BS@scale]%
+ \LP@drawbackground{1}{1}{\BS@columns}{\BS@rows}{\BS@bgcolor}%
+ \LP@drawgrid{1}{1}{\BS@columns}{\BS@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@counterstyle}%
+ \par\hbadness=10000\medskip\noindent\hspace{\BS@SB@indent}\begin{minipage}{\BS@SB@width}{\hbadness=10000\RaggedRight\BS@printshipbox{\BS@shipbox}}\end{minipage}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+%
+\endinput% \ No newline at end of file
diff --git a/graphics/pgf/contrib/battleship/doc/CHANGES b/graphics/pgf/contrib/battleship/doc/CHANGES
new file mode 100644
index 0000000000..d9bafc783e
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/doc/CHANGES
@@ -0,0 +1,42 @@
+-- battleship.sty (v1.2) --
+
+19/02/2013 implemented \classicgame [jk]
+ for drawing game sheets for classic Battleship
+
+18/02/2013 implemented option title [jk]
+ -> \titleformat
+
+18/02/2013 implemented option counterstyle [jk]
+ -> \puzzlecounter, \setpuzzlecounter
+ \definecounterstyle
+
+17/02/2013 implemented option bgcolor [jk]
+
+17/02/2013 moved code base for logic puzzles into logicpuzzle.sty [jk]
+
+-- battleship.sty (v1.1) --
+
+12/02/2013 added \placewater [jk]
+ puts a water marker into the grid
+
+12/02/2013 added \placeisland [jk]
+ puts an island with random outline into the grid
+
+12/02/2013 renamed \ship -> \placesegment [jk]
+ added \let\ship\placesegment
+
+11/02/2013 implemented \placeship{direction}{column}{row}{length} [jk]
+ placement of complete ship at (column,row) in direction {V|H}
+ with length length.
+
+11/02/2013 implemented \BS@ingrid [jk]
+ checks if coordinate is in the grid
+ -> PackageError
+
+10/02/2013 added \battleshipsetup [jk]
+ for resetting global options
+
+-- battleship bundle --
+
+2013/02/09 IPO of battleship on CTAN
+
diff --git a/graphics/pgf/contrib/battleship/doc/INSTALL b/graphics/pgf/contrib/battleship/doc/INSTALL
new file mode 100644
index 0000000000..1d76dedd50
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/doc/INSTALL
@@ -0,0 +1,15 @@
+ battleship.sty -- INSTALL
+=============================
+
+All the files ending with .sty have to be installed where TeX can
+find them. Please refer to your TeX distribution's manual for how
+to install additional packages.
+
+According to the TeX Directory Standard (TDS), the files should be
+installed in your local texmf/ tree as follows:
+
+-- *.sty -> localtexmf/tex/latex/battleship/
+-- *.pdf -> localtexmf/doc/latex/battleship/
+-- *.tex -> localtexmf/doc/latex/battleship/
+
+Don't forget to update your FNDB (Filename database). (see: manual) \ No newline at end of file
diff --git a/graphics/pgf/contrib/battleship/doc/battleship.pdf b/graphics/pgf/contrib/battleship/doc/battleship.pdf
new file mode 100644
index 0000000000..8a2cc7819b
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/doc/battleship.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/battleship/doc/battleship.tex b/graphics/pgf/contrib/battleship/doc/battleship.tex
new file mode 100644
index 0000000000..e05a6a8bae
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/doc/battleship.tex
@@ -0,0 +1,276 @@
+\documentclass[a4paper]{ltxdoc}%
+\usepackage[english]{babel}%
+\usepackage[latin1]{inputenc}%
+\usepackage[T1]{fontenc}%
+\usepackage{textcomp}%
+\usepackage{lmodern}%
+\usepackage{bera}%
+\usepackage{ccicons}
+\usepackage{microtype}%
+\usepackage{ltxdocext}%
+\usepackage{listings}
+\usepackage{marginnote}%
+\usepackage[svgnames,rgb]{xcolor}%
+\usepackage[automark,nouppercase]{scrpage2}
+\usepackage[width=4cm,shipcolor=Teal,scale=0.66,fontsize=large,
+sbindent=0.6cm,sbwidth=3.4cm]{battleship}%
+\usepackage{hyperref}
+%
+\setlength{\headheight}{1.1\baselineskip}%
+%
+\hypersetup{colorlinks=true,urlcolor=NavyBlue,linkcolor=NavyBlue,citecolor=CornflowerBlue,naturalnames=true,hypertexnames=false}%
+\lstset{language=[LaTeX]TeX,numbers=left,numberstyle=\tiny,basicstyle=\ttfamily\small,frame=single,backgroundcolor=\color{LightGoldenrodYellow},keywordstyle=\color{Blue},emph={mathstyle,style}, emphstyle=\color{Tomato},emph={[2]rows,columns,width,shipcolor,fontsize,scale,sbindent,sbwidth,sbshipscale},emphstyle={[2]\color{SeaGreen}},morekeywords={titleformat,definecounterstyle,marginnote,tikz,node,puzzlecounter,color,battleship,,placeship,placesegment,ship,shipH,shipV,shipbox,Ship,ShipC,ShipL,ShipR,ShipB,ShipT,[,]}}
+\makeatletter
+\renewcommand{\maketitle}%
+{%
+ \thispagestyle{empty}%
+ \pagecolor{Ivory}%
+ \begin{titlepage}%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \node[yshift=-2cm] at (current page.north west)%
+ {%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle%
+ (\paperwidth,2cm);%
+ \draw[anchor=west,yshift=-4cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\RaggedRight\Huge\sffamily\textbf{\@title}}};%
+ \draw[anchor=west,yshift=-6cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\huge\sffamily\textbf{\@fileversion}}};%
+ \draw[anchor=west,yshift=-9cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\RaggedRight\huge\sffamily\textbf{\@subtitle}}};%
+ \draw[anchor=west,yshift=-13cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\includegraphics[height=5cm]{logo.png}};%
+ \draw[anchor=west,yshift=-17cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\huge\sffamily\textbf{\@date}}};%
+ \draw[anchor=west,yshift=-20cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\Large\sffamily{\@authorline\\\textbf{\@author}}}};%
+ \end{tikzpicture}%
+ };%
+ \node[yshift=0cm] at (current page.south west)%
+ {%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \draw[fill=NavyBlue,color=NavyBlue,yshift=6cm,xshift=2cm] (0,0) rectangle (0.2cm,19cm);%
+ \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);%
+ \draw[anchor=west,yshift=1cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\large\sffamily{\@refline}}};%
+ \end{tikzpicture}%
+ };%
+ \end{tikzpicture}%
+ \end{titlepage}%
+ \pagecolor{white}%
+}%
+%
+\newcommand*{\@tikzhead}[1]%
+{%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \node[yshift=-2cm] at (current page.north west)%
+ {%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \draw[fill=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);%
+ \draw[anchor=west,yshift=1cm,xshift=1.5cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\LARGE\sffamily\textbf{\@title}}};%
+ \node[anchor=east,xshift=.9\paperwidth,rectangle,%
+ rounded corners=15pt,inner sep=11pt,fill=NavyBlue]%
+ {\color{white}\textsc{#1}};%
+ \end{tikzpicture}%
+ };%
+ \end{tikzpicture}%
+}%
+\clearscrheadings%
+\ihead{\@tikzhead{\headmark}}%
+\cfoot{\upshape\thepage}%
+\pagestyle{scrheadings}%
+%
+%\newcommand*{\headline}[1]{\@mkboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}%
+\newcommand*{\Headline}[1]{\@mkboth{#1}{#1}}%
+%
+\renewcommand{\headfont}{\normalfont\mdseries\scshape}
+%
+\gdef\@subtitle{}%
+\providecommand*{\Subtitle}[1]{\gdef\@subtitle{#1}}%
+\gdef\@fileversion{}%
+\providecommand*{\Fileversion}[1]{\gdef\@fileversion{#1}}%
+\gdef\@author{}%
+\providecommand*{\Author}[1]{\gdef\@author{#1}}%
+\gdef\@authorline{Package author:}%
+\providecommand*{\Authorline}[1]{\gdef\@authorline{#1}}%
+\gdef\@refline{}%
+\providecommand*{\Refline}[1]{\gdef\@refline{#1}}%
+\gdef\and{\unskip{}, }%
+\newcommand\doubledash{-\kern0.5pt-}
+\def\enoteformat{\rightskip\z@ \leftskip\z@ \parindent=1em\leavevmode\llap{\makeenmark}}
+\makeatother
+%
+\def\filename{battleship.sty}%
+\def\XeLaTeX{Xe\LaTeX}%
+%
+\makeatletter%
+\renewcommand\tableofcontents%
+{%
+ %\section*{\contentsname}%
+ \@mkboth{%
+ \MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
+ \@starttoc{toc}%
+}%
+%
+\newcommand\styleoption{\name@idx{style option}}%
+\newcommand\stylename{\name@idx{document style}}%
+\def\name@idx#1#2{%
+ {\ttfamily#2}%
+ \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}%
+}%
+\newcommand*\margcs[1]{\marginnote{\raggedleft\scriptsize #1}}%
+\newcommand*\package[1]{\texttt{#1}\index{#1=\string\ttt{#1}}}%
+\newcommand*\mco[1]{\mbox{\LANGLE\itshape#1\RANGLE}\index{#1, class option value}\index{class option value>#1}}%
+%
+\renewcommand\@biblabel[1]{\makebox[1.5cm][l]{[#1]}}
+\renewcommand*\l@subsection{\@dottedtocline{2}{1.2em}{2.8em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{2.4em}{3.7em}}
+\makeatother
+%
+\setlength\parindent{0pt}%
+\hypersetup{pdfauthor={Josef Kleber},pdftitle={A style file for typesetting Battleship logic puzzles},pdfsubject={Documentation for LaTeX style \filename}}%
+%
+\begin{document}
+\title{\filename}%
+\Subtitle{A style file for typesetting Battleship logic puzzles}%
+\author{Josef Kleber}
+\Fileversion{v1.2}
+\Refline{\href{mailto:josef.kleber@gmx.de}{\texttt{josef.kleber@gmx.de}}\\\href{https://bitbucket.org/kleberj/battleship/}{\texttt{https://bitbucket.org/kleberj/battleship/}}}
+\maketitle
+\tableofcontents
+\clearpage
+
+\section{The puzzle}
+
+Try to find the positions of the ships listed below the puzzle. The numbers on the side of the puzzle reveals how many ship segments can be found in the rows and columns. All remaining fields indicate 'water'. Consider the following rules: The ships are arranged horizontally and vertically. No ship touches another ship at any point, not even diagonally. Here's a little self-explanatory example:
+
+\begin{center}
+ \begin{battleship}
+ \placesegment{4}{1}{\ShipR}
+ \shipH{4,1,2,2,2}
+ \shipV{3,1,4,0,3}
+ \shipbox{3,3,2,2,1}
+ \end{battleship}
+ \hspace{1cm}
+ \begin{battleship}
+ \placeship{V}{1}{1}{3}
+ \placeship{H}{1}{5}{2}
+ \placeship{H}{3}{1}{2}
+ \placeship{H}{3}{3}{3}
+ \placeship{H}{5}{5}{1}
+ \shipH{4,1,2,2,2}
+ \shipV{3,1,4,0,3}
+ \end{battleship}
+\end{center}
+
+\bigskip
+\begin{lstlisting}
+\begin{center}
+ \begin{battleship}
+ \placesegment{4}{1}{\ShipR}
+ \shipH{4,1,2,2,2}
+ \shipV{3,1,4,0,3}
+ \shipbox{3,3,2,2,1}
+ \end{battleship}
+ \hspace{1cm}
+ \begin{battleship}
+ \placeship{V}{1}{1}{3}
+ \placeship{H}{1}{5}{2}
+ \placeship{H}{3}{1}{2}
+ \placeship{H}{3}{3}{3}
+ \placeship{H}{5}{5}{1}
+ \shipH{4,1,2,2,2}
+ \shipV{3,1,4,0,3}
+ \end{battleship}
+\end{center}
+\end{lstlisting}
+\clearpage
+\section{Options}
+\subsection[\texttt{rows}]{\styleoption{rows} (\underline{\texttt{5}})}
+With the option \styleoption{rows}, you can define the number of rows in the grid.
+\subsection[\texttt{columns}]{\styleoption{columns} (\underline{\texttt{5}})}
+With the option \styleoption{columns}, you can specify the number of columns in the grid
+\subsection[\texttt{shipcolor}]{\styleoption{shipcolor} (\underline{\texttt{green}})}
+With the option \styleoption{shipcolor}, you can set the color of the ship segments.
+\subsection[\texttt{width}]{\styleoption{width} (\underline{\texttt{6cm}})}
+With the option \styleoption{width}, you can set the width of the minipage, in which the grid is typeset.
+\subsection[\texttt{scale}]{\styleoption{scale} (\underline{\texttt{1}})}
+With the option \styleoption{scale}, you can scale the size of the grid in the minipage.
+\subsection[\texttt{fontsize}]{\styleoption{fontsize} (\underline{\texttt{Large}})}
+With the option \styleoption{fontsize}, you can specify the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge})
+\subsection[\texttt{title}]{\styleoption{title} (\underline{\texttt{\{\}}})}
+With the option \styleoption{title}, you can specify the title of a puzzle.
+\subsection[\texttt{counterstyle}]{\styleoption{counterstyle} (\underline{\texttt{none}}),left,right}
+With the option \styleoption{counterstyle}, you can define the counter style.
+\subsection[\texttt{bgcolor}]{\styleoption{bgcolor} (\underline{\texttt{\{\}}})}
+With the option \styleoption{bgcolor}, you can set the background color of the grid.
+\subsection[\texttt{sbindent}]{\styleoption{sbindent} (\underline{\texttt{0.75cm}})}
+With the option \styleoption{sbindent}, you can define the indent of the ship box below the grid.
+\subsection[\texttt{sbwidth}]{\styleoption{sbwidth} (\underline{\texttt{5.15cm}})}
+With the option \styleoption{sbwidth}, you can specify the width of the minipage, in which the ships are typeset.
+\subsection[\texttt{sbshipscale}]{\styleoption{sbshipscale} (\underline{\texttt{1}})}
+With the option \styleoption{sbshipscale}, you can scale the size of the ships in the ship box.
+\section{Environments}
+\subsection{\texttt{battleship}}
+The \env{battleship} environment\marginnote{\hbadness=10000\RaggedLeft\scriptsize\envb{battleship}\oarg{options}\\\dots\\\enve{battleship}} is the central core of the style file. With the optional argument of the environment, you can reset the options with local scope. Here, a blank grid is created that you can fill with ships using other commands.
+\section{Commands}
+\subsection{Ships, water, islands, ...}
+\subsubsection{\texttt{placeship}}
+With the command \cs{placeship}\margcs{\cmd\placeship\{\marg{direction}\}\\\{\marg{column}\}\{\marg{row}\}\{\marg{length}\}} you can place complete ships in the grid. It expects the specification of the direction as horizontal (H) or vertical (V). Furthermore, it requires the starting coordinates and the length of the ship.
+\subsubsection{\texttt{placesegment}}
+The command \cs{placesegment}\margcs{\cmd\placesegment\{\marg{column}\}\{\marg{row}\}\\\{\marg{ship segment}\}} is used for the placement of ship segments in the grid. In the mandatory argument \marg{ship segment}, you can use the following commands:
+
+\begin{center}
+\begin{tabular}{lccl}
+\cs{Ship} & \scalebox{.5}{\Ship} & \scalebox{.5}{\ShipC} & \cs{ShipC} \\
+\cs{ShipL} & \scalebox{.5}{\ShipL} & \scalebox{.5}{\ShipR} & \cs{ShipR} \\
+\cs{ShipB} & \scalebox{.5}{\ShipB} & \scalebox{.5}{\ShipT} & \cs{ShipT} \\
+\end{tabular}
+\end{center}
+\subsubsection{\texttt{ship}}
+The command \cs{ship} was replaced by the \cs{placesegment} command. The command \cs{ship} is deprecated and should not be used longer. It may still be used, but it is not recommended.
+\subsubsection{\texttt{placewater}}
+With the command \cs{placewater}\margcs{\cmd\placewater\{\marg{column}\}\{\marg{row}\}} you can place water markers ( \raisebox{2pt}{\Water} ) in the grid.
+\subsubsection{\texttt{placeisland}}
+With the command \cs{placeisland}\margcs{\cmd\placeisland\{\marg{column}\}\{\marg{row}\}} you can place islands ( \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}} ) in the grid. The island outlines are created randomly: \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, ...
+\subsection{Presentation}
+\subsubsection{\texttt{shipH}}
+The command \cs{shipH}\margcs{\cmd\shipH\{\marg{csv list}\}} typesets the horizontal numbers above the grid. It expects a comma-separated list as an argument.
+\subsubsection{\texttt{shipV}}
+The command \cs{shipV}\margcs{\cmd\shipV\{\marg{csv list}\}} typesets the vertical numbers beside the grid. It also expects a comma separated list.
+\subsubsection{\texttt{shipbox}}
+The command \cs{shipbox}\margcs{\cmd\shipbox\{\marg{csv list}\}} defines the number and size of the ships, which are typeset under the grid.
+\subsubsection{\texttt{definecounterstyle}}
+The command \cs{definecounterstyle}\margcs{\cmd\definecounterstyle\{\marg{name}\}\\\{\marg{definition}\}} allows you to define your own styles. For example, the style \texttt{left} is defined as follows:
+
+\begin{lstlisting}
+\definecounterstyle{left}{
+ \begingroup\reversemarginpar\marginnote{
+ \tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,
+ draw,rounded corners=3pt,thick]
+ {\Huge\puzzlecounter};}[-23pt]\endgroup
+}
+\end{lstlisting}
+
+To typeset the counter into the margin we use the command \cmd\marginnote. We need to use the command \cmd\reversemarginpar\ to set the counter into the left margin. Of course, we must use this command in a group for local scope. Finally we use \cmd\puzzlecounter\ in a \cmd\tikz\ node with a vertical offset of 23 points.
+\subsubsection{\texttt{puzzlecounter}}
+The command \cs{puzzlecounter}\margcs{\cmd\puzzlecounter} provides the counter in textual form to use it for example in \cmd\definecounterstyle.
+\subsubsection{\texttt{titleformat}}
+With the command \cs{titleformat}\margcs{\cmd\titleformat\{\marg{format}\}}, you can define the format of the title. By default, the definition is as follows:
+
+\begin{lstlisting}
+\titleformat{\centering\Large\color{blue}}
+\end{lstlisting}
+\subsection{Miscellaneous}
+\subsubsection{\texttt{battleshipsetup}}
+With the command \cs{battleshipsetup}\margcs{\cmd\battleshipsetup\{\marg{options}\}} you can reset the options with global scope.
+\subsubsection{\texttt{classicgame}}
+The command \cs{classicgame}\margcs{\cmd\classicgame\{\marg{csv list}\}} typesets a game sheet for playing classic Battleship. It expects a comma separated list with the number and sizes of the ships.
+\subsubsection{\texttt{setpuzzlecounter}}
+With the command \cs{setpuzzlecounter}\margcs{\cmd\setpuzzlecounter\{\marg{number}\}}, you can reset the puzzle counter, for example before the solutions.
+\section{Examples \& Solutions}
+You\marginnote{\includegraphics[height=2cm]{qrcode.png}} can download application examples and their solutions from the \href{https://bitbucket.org/kleberj/battleship/}{project page}. The puzzles are originally licensed under \href{http://creativecommons.org/licenses/by-nc-sa/3.0/}{\ccbyncsa}.
+
+You can also download a \href{https://bitbucket.org/kleberj/battleship/downloads/classicsheet.pdf}{game sheet} for playing the classic Battleship.
+\end{document}
diff --git a/graphics/pgf/contrib/battleship/doc/manifest.txt b/graphics/pgf/contrib/battleship/doc/manifest.txt
new file mode 100644
index 0000000000..1cac21bbfb
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/doc/manifest.txt
@@ -0,0 +1,19 @@
+This work consists of the following files:
+
+
+-- Styles --
+
+logicpuzzle.sty
+battleship.sty
+
+-- Documentation --
+
+battleship.pdf
+battleship.tex
+
+-- Misc. Files --
+
+README
+manifest.txt
+INSTALL
+CHANGES \ No newline at end of file
diff --git a/graphics/pgf/contrib/battleship/logicpuzzle.sty b/graphics/pgf/contrib/battleship/logicpuzzle.sty
new file mode 100644
index 0000000000..0d40842893
--- /dev/null
+++ b/graphics/pgf/contrib/battleship/logicpuzzle.sty
@@ -0,0 +1,176 @@
+%%
+%% Copyright (C) 2013 by:
+%% Josef Kleber
+%% <josef.kleber@gmx.de>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2003/12/01 or later.
+%%
+%% This work has the LPPL maintenance status "author-maintained".
+%%
+%% The Current Maintainer of this work is Josef Kleber.
+%%
+%% This work consists of all files listed in manifest.txt.
+%%
+\ProvidesPackage{logicpuzzle}[2013/02/23 logicpuzzle.sty v1.0 - Josef Kleber (C) 2013]%
+%
+\RequirePackage{xkeyval}%
+\RequirePackage{ifthen}%
+\RequirePackage{ragged2e}%
+\RequirePackage{etoolbox}%
+\RequirePackage{marginnote}%
+\RequirePackage{tikz}%
+\usetikzlibrary{decorations.pathmorphing}%
+%
+\newcounter{LP@counti}%
+\newcounter{LP@countii}%
+\newcounter{LP@countiii}%
+\newcounter{LP@countiv}%
+\newcounter{LP@whiledo}%
+\newcounter{LP@puzzlecounter}%
+\setcounter{LP@puzzlecounter}{1}%
+%
+\newcommand*\LP@counterstyle{none}%
+\newcommand*\LP@titleformat{}%
+%
+\newcommand*\LP@Pfive{.5}%
+%
+\newcommand*\LP@ingrid[5]%
+{%
+ \setcounter{LP@counti}{#1}% column
+ \setcounter{LP@countii}{#2}% row
+ \setcounter{LP@countiii}{#3}% max column
+ \setcounter{LP@countiv}{#4}% max row
+ %#5 style
+ %
+ \ifnum\value{LP@counti}<1%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+ \ifnum\value{LP@countii}<1%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+ \ifnum\value{LP@counti}>\value{LP@countiii}%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+ \ifnum\value{LP@countii}>\value{LP@countiv}%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+}%
+%
+\newcommand*\titleformat[1]%
+{%
+ \renewcommand*\LP@titleformat{#1}%
+}%
+\titleformat{\centering\Large\color{blue}}%
+%
+\newcommand*\puzzlecounter{\theLP@puzzlecounter}%
+%
+\newcommand*\setpuzzlecounter[1]%
+{%
+ \setcounter{LP@puzzlecounter}{#1}%
+}%
+\newcommand*{\definecounterstyle}[2]%
+{%
+ \expandafter\gdef\csname LP@cs@#1\endcsname{#2}%
+}%
+%
+\definecounterstyle{none}{}%
+\definecounterstyle{left}{\begingroup\reversemarginpar\marginnote{\tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,draw,rounded corners=3pt,thick]{\Huge\puzzlecounter};}[-23pt]\endgroup}%
+\definecounterstyle{right}{\marginnote{\tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,draw,rounded corners=3pt,thick]{\Huge\puzzlecounter};}[-23pt]}%
+%
+% #1 grid x min
+% #2 grid y min
+% #3 grid x max
+% #4 grid y max
+% #5 step
+\newcommand*\LP@drawgrid[5]%
+{%
+ \setcounter{LP@counti}{#3}% max column
+ \setcounter{LP@countii}{#4}% max row
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+ \draw[step=#5] (#1,#2) grid (\value{LP@counti},\value{LP@countii});%
+}%
+%
+% #1 grid x min
+% #2 grid y min
+% #3 grid x max
+% #4 grid y max
+% #5 bgcolor
+\newcommand*\LP@drawbackground[5]%
+{%
+ \ifthenelse{\equal{#5}{}}%
+ {}% no bgcolor
+ {%
+ \setcounter{LP@counti}{#3}% max column
+ \setcounter{LP@countii}{#4}% max row
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+ \draw[fill=#5] (#1,#2) rectangle (\value{LP@counti},\value{LP@countii});%
+ }%
+}%
+%
+% #1 counterstyle
+\newcommand*\LP@drawcounter[1]%
+{%
+ \csname LP@cs@#1\endcsname%
+}%
+%
+% #1 column
+% #2 row
+% #3 content
+\newcommand*\LP@setcellcontent[3]%
+{%
+ \node at (#1\LP@Pfive,#2\LP@Pfive){#3};%
+}%
+%
+% #1 csv list
+% #2 column
+% #3 row
+% #4 fontsize
+\newcommand*\LP@setcolumncontents[4]%
+{%
+ \setcounter{LP@counti}{#2}%
+ \setcounter{LP@countii}{#3}%
+ \forcsvlist\LP@setcolumncontents@i{#4#1}%
+}%
+%
+\newcommand*\LP@setcolumncontents@i[1]%
+{%
+ \LP@setcellcontent{\arabic{LP@counti}}{\arabic{LP@countii}}{#1}%
+ \stepcounter{LP@counti}%
+}%
+%
+% #1 csv list
+% #2 column
+% #3 row
+% #4 fontsize
+\newcommand*\LP@setrowcontents[4]%
+{%
+ \setcounter{LP@counti}{#2}%
+ \setcounter{LP@countii}{#3}%
+ \forcsvlist\LP@setrowcontents@i{#4#1}%
+}%
+%
+\newcommand*\LP@setrowcontents@i[1]%
+{%
+ \LP@setcellcontent{\arabic{LP@counti}}{\arabic{LP@countii}}{#1}%
+ \stepcounter{LP@countii}%
+}%
+%
+\endinput% \ No newline at end of file
diff --git a/graphics/pgf/contrib/binarytree/README b/graphics/pgf/contrib/binarytree/README
new file mode 100644
index 0000000000..45af80d50e
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/README
@@ -0,0 +1,83 @@
+Package 'binarytree' for LaTeX: Draw binary trees with TikZ.
+
+========================== LICENCE =========================
+Copyright (C) 2016 by Aleksandrina Nikolova
+<aayla.secura.1138@gmail.comaayla.secura.1138@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 of this license or (at your option) any later
+version. The latest version of this license is in:
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+=========================== ABOUT ==========================
+The 'binarytree' package provides an easy but flexible way
+to draw binary trees using TikZ. It provides a macro
+\BinaryTree which takes two arguments: a path specification
+and a number indicating the maximum depth of the tree. The
+path specification and the setting of various options
+determine the style for each edge of the tree. The options
+can be set either by passing them as an optional argument to
+\BinaryTree, or by calling \btreeset.
+
+There is support for the external library of TikZ which does
+not affect externalization of the rest of the TikZ figures
+in the document (externalization is enabled locally for each
+\BinaryTree). There is an option to use automatic file
+naming: this is useful if the trees are often moved around
+or new ones are added in between, in which case using the
+default naming will cause all of them to be rebuilt.
+Instead, giving a unique name to each tree will have TikZ
+use the already compiled image no matter where in the
+document it is or how many times it has been used. This
+feature is still in its very infancy and more control over
+how the file name is generated is planned for the future.
+
+======================= INSTALLATION =======================
+Extract all of the files and run latex on binarytree.ins:
+ latex binarytree.ins
+
+Move the generated binarytree.sty into a TeX searchable
+directory, for example on Linux:
+ mkdir -p <TeX folder>/tex/latex/binarytree
+ mv binarytree.sty <TeX folder>/tex/latex/binarytree
+The local user TeX directory is in
+'C:\Documents and Settings\<user name>\texmf' on Windows,
+'~/texmf' on Linux or '~/Library/texmf' on OS X.
+
+If you wish to (re)create the documentation:
+ pdflatex binarytree.dtx
+ pdflatex binarytree.dtx
+ makeindex -s gglo.ist -o binarytree.gls binarytree.glo
+ makeindex -s gind.ist -o binarytree.ind binarytree.idx
+ pdflatex binarytree.dtx
+ pdflatex binarytree.dtx
+
+========================== TESTING =========================
+Provided are four files to test the package (also included
+as examples in the documentation:
+* 'examples/binarytree-ex1.tex' draws two trees, names them
+ as nodes and uses them in a simple graph. To recompile it,
+ simply run:
+ pdflatex examples/binarytree-ex1.tex
+* 'examples/binarytree-ex2.tex' draws 4 identically
+ structured trees using different level and sibling
+ distance scalings. To recompile it, simply run:
+ pdflatex examples/binarytree-ex2.tex
+* 'examples/binarytree-ex3.tex' draws a square with arrows
+ on each side! To recompile it, simply run:
+ pdflatex examples/binarytree-ex3.tex
+* 'examples/binarytree-ex4.tex' draws a similar square twice
+ and exports them using the external library. It uses the
+ 'list and make' mode, so it generates
+ 'examples/binarytree-ex4.figlist' and
+ 'examples/binarytree-ex4.makefile', requiring manual
+ compilation of the exported figure:
+ pdflatex examples/binarytree-ex4.tex
+ make -f examples/binarytree-ex4.makefile
+ pdflatex examples/binarytree-ex4.tex
+
+========================== CHANGES =========================
+v1.0 First published version of the 'binarytree' package \ No newline at end of file
diff --git a/graphics/pgf/contrib/binarytree/binarytree.dtx b/graphics/pgf/contrib/binarytree/binarytree.dtx
new file mode 100644
index 0000000000..dd2408b345
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/binarytree.dtx
@@ -0,0 +1,1796 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2016 by Aleksandrina Nikolova
+% <aayla.secura.1138@gmail.comaayla.secura.1138@gmail.com>
+% -----------------------------------
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{binarytree}
+ [2016/07/25 v1.01 Binary trees using TikZ]
+\RequirePackage{tikz}
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{binarytree}
+\usepackage[columns=2]{idxlayout}
+\usepackage{verbatim}
+\usepackage{enumitem}
+\usepackage{etoolbox}
+\usepackage{needspace}
+\usepackage{import}
+\usepackage[subpreambles=true]{standalone}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%\OnlyDescription
+\begin{document}
+ \DocInput{binarytree.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2016/07/01}{First published version}
+%
+% \GetFileInfo{binarytree.sty}
+%
+% \DoNotIndex{\def,\edef,\let,\newdimen,\newif}
+% \DoNotIndex{\begingroup,\endgroup,\begin,\end,\relax,\endinput}
+% \DoNotIndex{\if,\ifx,\ifnum,\ifdim,\else,\fi,\ifcsname,\csname,\endcsname}
+% \DoNotIndex{\@ifnextchar,\@firstoftwo,\@secondoftwo,\@nil}
+% \DoNotIndex{\the,\numexpr,\dimexpr,\number,\advance}
+% \DoNotIndex{\detokenize,\expandafter,\unexpanded,\noexpand,\string}
+% \DoNotIndex{\dp,\wd,\ht,\hbox,\setbox}
+% \DoNotIndex{\MessageBreak,\par}
+% \DoNotIndex{\pgfqkeysactivatesinglefamilyandfilteroptions}
+% \DoNotIndex{\(,\),\z@,\@ne,\m@ne}
+%
+% \iffalse
+% -----------------------------------------------------------------------------
+% -----------------------------------------------------------------------------
+% -----------------------------------------------------------------------------
+% \fi
+%
+% \makeatletter
+%
+% \colorlet{dgreen}{green!50!black}
+% \colorlet{dred}{red!70!black}
+%
+% \def\ttup#1{\texttt{\textup{#1}}}
+% \def\str#1{\texttt{\textup{\string#1}}}
+% \def\vbar{\space\rule[-0.4ex]{0.12ex}{0.9em}\space}
+% \def\app@to@hook#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+% \def\eapp@to@hook#1#2{\edef#1{\unexpanded\expandafter{#1}#2}}
+%
+% \def\ncall@macro#1#2#3,{^^A
+% \ifx\@nil#3\expandafter\@gobble\else^^A
+% \expandafter\@iden\fi{^^A
+% \expandafter#1\expandafter{\the\numexpr#2\relax}{#3}^^A
+% \ncall@macro{#1}{#2+1}}}
+% \newcommand*\apply@macro@to@nlist[3][1]{\ncall@macro{#2}{#1}#3,\@nil,}
+% \newcommand*\apply@macro@to@list[3][1]{\ncall@macro{^^A
+% \expandafter\expandafter#2\expandafter\@gobble}{#1}#3,\@nil,}
+%
+% \protected\def\ensurespace{^^A
+% \@ifnextchar{.}{}{^^A
+% \@ifnextchar{,}{}{^^A
+% \@ifnextchar{;}{}{^^A
+% \@ifnextchar{:}{}{^^A
+% \@ifnextchar{!}{}{^^A
+% \@ifnextchar{?}{}{^^A
+% \@ifnextchar{)}{}{^^A
+% \@ifnextchar\par{}{^^A
+% \space\ignorespaces}}}}}}}}}
+%
+% \def\nargs{\@ifstar{\nargs@i\@iden}{\nargs@i\meta}}
+% \def\nsargs{\@ifstar{\nsargs@i\@iden}{\nsargs@i\meta}}
+% \def\nargs@i#1#2#3#4{\begingroup\color{dgreen}^^A
+% \ifnum#2 > 1\relax, \fi^^A
+% \texttt{\##2}--\texttt{#3}: #1{#4}\endgroup}
+% \def\nsargs@i#1#2#3#4{\begingroup\color{dgreen}^^A
+% \ifnum#2 > 1\relax, \fi^^A
+% \texttt{\#\##2}--\texttt{#3}: #1{#4}\endgroup}
+%
+% \def\narg{\@ifstar{\@narg\@iden}{\@narg\meta}}
+% \def\nsarg{\@ifstar{\@nsarg\@iden}{\@nsarg\meta}}
+% \def\@narg{\narg@i{\#}}
+% \def\@nsarg{\narg@i{\#\#}}
+% \def\narg@i#1#2#3#4{\begingroup\color{dgreen}^^A
+% \ifnum#3 > 1\relax, \fi^^A
+% \texttt{#1#3}: #2{#4}\endgroup}
+%
+% \def\nsig{\@ifstar{\nsig@i{\narg\expandafter*}}{\nsig@i{\narg}}}
+% \def\nssig{\@ifstar{\nsig@i{\nsarg\expandafter*}}{\nsig@i{\nsarg}}}
+% \def\nsig@i#1{\@ifnextchar[{\nsig@ii{#1}}{\nsig@ii{#1}[1]}}
+% \def\nsig@ii#1[#2]#3{\apply@macro@to@nlist[#2]{#1}{#3}}
+%
+% \def\coarg#1{\if\relax\detokenize{#1}\relax\else{\color{dgreen}\oarg{#1}}\fi}
+% \def\cmarg#1{\if\relax\detokenize{#1}\relax\else{\color{dred}\marg{#1}}\fi}
+% \def\iniarg#1{\if\relax\detokenize{#1}\relax\texttt{none}\else\texttt{#1}\fi}
+% \def\defarg#1{\if\relax\detokenize{#1}\relax\texttt{none}\else\texttt{#1}\fi}
+% \def\sig#1#2{^^A
+% \begingroup\upshape\sig@args{#1}{#2}\endgroup\par}
+% \def\sigdef#1#2#3#4{^^A
+% \begingroup\upshape\sig@args{#1}{#2}\sig@ini@def{#3}{#4}\endgroup\par}
+% \def\sig@args#1#2{^^A
+% \apply@macro@to@list\coarg{#1}^^A
+% \apply@macro@to@list\cmarg{#2}}
+% \def\sig@ini@def#1#2{^^A
+% \hfill\color{black}(initial: \iniarg{#1}, default: \defarg{#2})}
+%
+% \newcount\n@Macro
+% \newdimen\prevd@Macro
+% \newdimen\vskip@Macro
+% \vskip@Macro=0.5\baselineskip
+% \def\unvbox@unskip#1{%
+% \ifdim#1 > -\@M pt\relax%
+% \@tempdima=\dimexpr\baselineskip-#1-\ht0\relax
+% \ifdim\@tempdima > \lineskiplimit\relax\vskip-\@tempdima%
+% \else\vskip\dimexpr-\lineskip\relax\fi%
+% \else\vskip-\ht0\fi}
+%
+% \def\pgf@key@index#1#2#3#4{\@bsphack^^A
+%^^A #1{#4\actualchar{\string\texttt{#4}} (#2)\encapchar#3}^^A
+% #1{#2s:\actualchar{\string\textbf{#2s:}}^^A
+% \levelchar#4\actualchar{\string\texttt{#4}}\encapchar#3}^^A
+% \@esphack}
+% \def\usage@index@pgf@key{\pgf@key@index\index{key}{usage}}
+% \def\main@index@pgf@key{\pgf@key@index\special@index{key}{main}}
+%
+% \def\DescribeOption#1{\leavevmode\@bsphack\marginpar{^^A
+% \raggedleft\PrintDescribeOption{#1}}\usage@index@pgf@key{#1}^^A
+% \@esphack\ignorespaces}
+% \def\PrintDescribeOption#1{\strut\MacroFont\texttt{#1}\ }
+%
+% \newenvironment{key}{}{}
+% \let\pgf@opt\m@cro@
+% \def\key{\begingroup\pgf@opt\iffalse}
+% \let\endkey\endmacro
+% \patchcmd{\pgf@opt}{\SpecialMainEnvIndex}{\main@index@pgf@key}{}{}
+%
+% \newenvironment{Macro}[3]{^^A
+% \par\prevd@Macro=\prevdepth^^A
+% \def\tmp@hook{}^^A
+% \apply@macro@to@nlist\add@macro{#1}^^A
+% \needspace{\n@Macro\baselineskip}\noindent\tmp@hook^^A
+% \advance\n@Macro\m@ne\relax\sig{#2}{#3}^^A
+% \setbox0\vtop\bgroup\prevdepth=\prevd@Macro^^A
+% }{\egroup^^A\unvbox@unskip\prevd@Macro^^A
+% \@tempdima=\dimexpr\n@Macro\normalbaselineskip - \dp0 - \ht0\relax^^A
+% \unvbox0\ifdim\@tempdima > \z@\relax\vskip\@tempdima\fi\vskip\vskip@Macro}
+% \newenvironment{Option}[5]{^^A
+% \par\prevd@Macro=\prevdepth^^A
+% \def\tmp@hook{}^^A
+% \apply@macro@to@nlist\add@pgf@option{#1}^^A
+% \needspace{\n@Macro\baselineskip}\noindent\tmp@hook^^A
+% \advance\n@Macro\m@ne\relax\sigdef{#2}{#3}{#4}{#5}^^A
+% \setbox0\vtop\bgroup\prevdepth=\prevd@Macro^^A
+% }{\egroup^^A\unvbox@unskip\prevd@Macro^^A
+% \@tempdima=\dimexpr\n@Macro\normalbaselineskip - \dp0 - \ht0\relax^^A
+% \unvbox0\ifdim\@tempdima > \z@\relax\vskip\@tempdima\fi\vskip\vskip@Macro}
+% \def\add@macro#1#2{\n@Macro=#1\relax\app@to@hook\tmp@hook{\DescribeMacro{#2}}}
+% \def\add@pgf@option#1#2{\n@Macro=#1\relax\app@to@hook\tmp@hook{\DescribeOption{#2}}}
+%^^A \let\add@pgf@option\add@macro
+%
+% \def\BTkey#1{\texttt{#1}}
+% \makeatother
+%
+% \def\pkg#1{\textsf{#1}}
+% \def\BT{\pkg{binarytree}\ensurespace}
+% \def\TikZ{\pkg{Ti\textit{k}Z}\ensurespace}
+% \expandafter\def\expandafter\TeX\expandafter{\TeX\ensurespace}
+%
+% \def\BTspath{\meta{l/r~moves}\allowbreak:\meta{label}\allowbreak:^^A
+% \meta{color}\allowbreak:\meta{anchor}}
+% \def\BTpath{\BTspath\allowbreak!\BTspath!\ldots}
+%
+% \title{The \BT package\thanks{This document
+% corresponds to \BT~\fileversion, dated \filedate.}}
+% \author{Aleksandrina Nikolova \\ \texttt{aayla.secura.1138@gmail.com}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% The \BT package provides an easy but flexible interface to draw binary trees using \TikZ. It uses a path specification of the form \BTpath to determine the style for each edge of the tree. It supports the \TikZ |external| library and can automatically name the files based on content. The default appearance and behaviour can be customized by a range of options.
+% \end{abstract}
+%
+% \tableofcontents
+%^^A \listoftables
+%^^A \listoffigures
+% \clearpage
+%
+% \section{Introduction}
+% The \BT package provides a macro, |\BinaryTree|, which accepts a path specification and a number signifying the maximum tree depth. The path specification determines the style for each edge of the tree. The behaviour can be customized by calling |\btreeset| or |\btreesetexternal| with a list of \meta{key=value} pairs. These will have effect until the end of the current group. Additionally, one can pass these keys as an optional argument to |\BinaryTree| to have them affect only that single tree.
+%
+% Each node is named, so you can refer to it later. The root is named |btree-root| while each of its children is named according to its ancestors, for example |btree-l-r| is the name of the right child of the root's left child.
+%
+% The package supports the \TikZ |external| library. To use this feature however one needs to load this library and execute |\tikzexternalize| in the preamble. All of the externalization options passed to, for example, |\btreesetexternal| are only executed once inside the local group of each tree so there is no conflict between them and any global configuration of the library. One may therefore disable externalization globally by calling |\tikzexternaldisable|; externalization will still be enabled for all the trees of \BT for which the \BTkey{external} option is |true|.
+%
+% \section{Usage}
+%
+% \begin{Macro}{\BinaryTree}{local options}{path specification,depth}
+% \meta{local options} is a coma separated list of \meta{key=value} pairs which set options locally inside a group for this tree alone. The \BTkey{external/file name} option, in case externalization is enabled, is allowed only in this context.\par
+% \meta{path specification} is of the form \BTpath. Multiple such paths can be given, separated by a coma. If an edge is visited more than once only the last \emph{explicitly set} style will be used (i.~e. only when one of \meta{label} or \meta{color} is given). \meta{l/r~moves} is a sequence of |l| or |r| characters which visit the corresponding (left or right) child of the current node, and draw an edge in the color \meta{color}. Upon a change in direction, the previous move may be continued until the end. \meta{label} is placed on either the first or every child of the subpath, at the given anchor. The list of moves can be empty, in which case the label and color is applied to the previous (parent) edge. The path after an exclamation mark continues from the last child, while the path after a coma starts at the root again.\par
+% \meta{depth} is the maximum depth to which the tree will be drawn (when continuing we stop at this depth; any moves extending beyond this depth are ignored without error).
+% \end{Macro}
+%
+% \subsection{Configuring the defaults}
+%
+% \begin{Macro}{\btreeset,\btreesetexternal}{}{options}
+% Setting defaults which apply to all trees (until the end of the current group) is done by calling |\btreeset| or |\btreesetexternal|. They accept a single argument---a coma separated list of \meta{key=value} pairs. The default key path for |\btreeset| is |/BT/| and that of |\btreesetexternal| is |/BT/external|. The \BTkey{external/file name} option is \emph{not} accepted here---it only makes sense to give it as a local option to a particular invocation of |\BinaryTree|.
+% \end{Macro}
+%
+% \subsection{Options for appearance}
+%
+% The following keys are defined and determine the style for all subsequent trees (until the end of the current group). For any unknown key passed to |\btreeset| (|\btreesetexternal|) or as an optional argument to |\BinaryTree|, it is checked if this key is defined for |/tikz| or |/pgf| (|/tikz/external|).
+%
+% \begingroup\makeatletter
+% \let\add@macro\add@pgf@option\makeatother
+% \begin{Macro}{/BT/defaults}{}{}
+% A shortcut for setting all appearance related keys to their default values. \BTkey{separate} and any keys related to externalization are not affected.
+% \end{Macro}
+% \endgroup
+%
+% \begin{Option}{/BT/grow}{}{direction}{up}{}
+% A choice of |up|, |down|, |left|, or |right| sets the growth direction of the tree and the default label anchors.
+% \end{Option}
+%
+% \begin{Option}{/BT/root label anchor,/BT/left label anchor,^^A
+% /BT/right label anchor,/BT/final label anchor}{}{anchor}{}{}
+% These keys can override the default anchors set by \BTkey{grow}. An anchor is any valid \TikZ anchor, such as |above| or |north east|.
+% \end{Option}
+%
+% \begin{Option}{/BT/root edge}{}{\ttup{true\vbar false}}{false}{true}
+% If set to |true| a single child of the root will be drawn before the rest of the tree. The root label is still placed on the root node, not on this edge, so any anchor is relative to the bottom of this edge.
+% \end{Option}
+%
+% \begin{Option}{/BT/draw missing}{}{\ttup{true\vbar false}}{false}{true}
+% If set to |true| children which have not been visited in the course of constructing the path will be drawn anyway (no label, default color).
+% \end{Option}
+%
+% \begin{Option}{/BT/label on every edge}{}{\ttup{true\vbar false}}{false}{true}
+% If set to |true| \meta{label} will be placed on every edge of the subpath segment (delimited by |!|) and \meta{anchor} will apply to all of them.
+% \end{Option}
+%
+% \begin{Option}{/BT/math labels}{}{\ttup{true\vbar false}}{false}{true}
+% If set to |true| all labels will be wrapped in math mode.
+% \end{Option}
+%
+% \begin{Option}{/BT/continue at path end}{}{\ttup{true\vbar false}}{true}{true}
+% If set to |true| when the end of a subpath is reached and the current depth is less than the tree depth, the last move will be continued. Then, to explicitly make the path terminate, use an |s| move operation. When set to |false|, one can force a continuation with the |c| move operation.
+% \end{Option}
+%
+% \begin{Option}{/BT/continue after turn}{}{\ttup{true\vbar false}}{true}{true}
+% If set to |true| after a change in direction is encountered (as in |lr| or |r!l|) the previous move will be continued until the top of the tree before moving on.
+% \end{Option}
+%
+% \begin{Option}{/BT/default color}{}{color}{black}{}
+% Set the default color for edges and labels. Any color specification accepted by |\colorlet| is valid.
+% \end{Option}
+%
+% \begin{Option}{/BT/default color after turn}{}{\ttup{true\vbar false}}{true}{true}
+% If set to |true| after a change in direction is encountered the default color is used (a previously set style will not however be overridden); otherwise the previously given path color is used, which, if not, empty will cause any previously set style for the edges to be overridden.
+% \end{Option}
+%
+% \begin{Option}{/BT/xscale,/BT/yscale}{}{scale factor}{1}{}
+% Append an x or y scale to the current style. The effect is \emph{accumulative}.
+% \end{Option}
+%
+% \begin{Option}{/BT/scale}{}{scale factor}{1}{}
+% This is equivalent to setting \BTkey{xscale}=\meta{scale factor}, \BTkey{yscale}=\meta{scale~factor}
+% \end{Option}
+%
+% \begin{Option}{/BT/label distance}{}{length}{10pt}{}
+% Sets the distance between the label and the edge.
+% \end{Option}
+%
+% \begin{Option}{/BT/sibling distance}{}{length}{40mm}{}
+% Sets the distance between siblings \emph{on level 1} (root's immediate children). See below.
+% \end{Option}
+%
+% \begin{Option}{/BT/level distance}{}{length}{20mm}{}
+% Sets the distance between levels \emph{on level 1} (root's immediate children). See below.
+% \end{Option}
+%
+% \begin{Option}{/BT/sibling distance scales,^^A
+% /BT/level distance scales}{}{\ttup{true\vbar false}}{true}{true}
+% If set to |true| the sibling/level distance will be scaled by the level number on each level.
+% \end{Option}
+%
+% \begin{Option}{/BT/top padding,/BT/bottom padding,^^A
+% /BT/left padding,/BT/right padding}{}{length}{3pt}{}
+% Add an additional padding on the corresponding side. This is useful if one of the labels of intermediate outer children extends beyond the bounding box, or if the label anchor for the root (final children) is changed (in which case one would need to set a negative padding to compensate for assuming the labels are below (above) the node).
+% \end{Option}
+%
+% \begin{Option}{/BT/framed}{}{\ttup{true\vbar false}}{false}{true}
+% If set to |true| the bounding box will be drawn.
+% \end{Option}
+%
+% \begin{Option}{/BT/separate}{}{\ttup{true\vbar false}}{false}{true}
+% If set to |true| the whole tree will be wrapped in a |tikzpicture| environment, otherwise---in a |scope| environment.
+% \end{Option}
+%
+% \subsection{Options for externalization}
+%
+% \begin{Option}{/BT/external}{}{\ttup{true\vbar false}}{false}{true}
+% If set to |true| externalization will be enabled and the following keys will have effect on how the file names. This requires one to load the |external| library of \TikZ and initialize it (by calling |\tikzexternalize|). One may then disable it globally by calling |\tikzexternaldisable|, it will be enabled locally inside the group of each tree.
+% \end{Option}
+%
+% \begin{Option}{/BT/external/use automatic file name}{}{\ttup{true\vbar false}}{false}{true}
+% Generate a (not so short or friendly looking) file name from the global style and the path specification. If it is set to |false|, a figure name (by default |binary-tree_|) is used with each filename being the figure name plus a number appended at the end, indicating the order in which the trees are encountered in the document. This option is useful if one regularly changes the order of the trees and wishes to avoid having to recompile them. Under some circumstances different looking trees may end up with the same name (for example if math labels are used, which cannot be safely expanded into text and are thus ignored). In these cases one may either locally disable this option or specify a file name explicitly by either calling |\tikzsetnextfilename| or by using the following key.
+% \end{Option}
+%
+% \begin{Option}{/BT/external/file name}{}{file name}{}{}
+% Explicitly set the file name for the currently drawn tree regardless of whether automatic file naming is enabled or not. This key is only accepted as a local option to each |\BinaryTree|.
+% \end{Option}
+%
+% Additionally, any unknown keys defined for |/tikz/external| are accepted, collected and will be executed once we're inside the local group for each tree. So if one wishes to, one can, without a conflict, set global options for externalization (by calling for example |\tikzset|{\meta{key=value}}), which will be used by all other \TikZ figures and by \BT by default, and different settings (via |\btreesetexternal| or local options to |\BinaryTree|) for the \BT figures.
+%
+% \section{Examples}
+%
+% \begin{itemize}[leftmargin=0pt]
+% \item Each node has a unique name, but you can name the entire tree using \TikZ's |local bounding box key| and refer to it for example in a graph.\par
+% \vskip 10pt\import{examples/}{binarytree-ex1.tex}
+% \vskip 10pt\hrule
+% \verbatiminput{examples/binarytree-ex1.tex}
+% \hrule\vskip 10pt
+% \item Here is a simple example which shows how the scaling of the sibling or level distance affects the appearance of the tree. The trees are otherwise identical.\par
+% \vskip 10pt\import{examples/}{binarytree-ex2.tex}
+% \vskip 10pt\hrule
+% \verbatiminput{examples/binarytree-ex2.tex}
+% \hrule\vskip 10pt
+% \item You have control over which edges are drawn implicitly. Surely there is another way to do this in \TikZ!\par
+% \vskip 10pt\centering\import{examples/}{binarytree-ex3.tex}
+% \vskip 10pt\hrule
+% \verbatiminput{examples/binarytree-ex3.tex}
+% \hrule\vskip 10pt
+% \item The next example simply aims to demonstrate that placing two identical trees, and using the externalization and automatic file naming features, one would only compile the tree once. You need to manually compile the |makefile| and the next time the example is compiled, the figures will be included.\par
+% \vskip 10pt\centering\pgfimage{examples/binarytree-ex4.pdf}
+% \vskip 10pt\hrule
+% \verbatiminput{examples/binarytree-ex4.tex}
+% \hrule\vskip 10pt
+% \end{itemize}
+%
+% \section{Known Issues}
+%
+% \begin{itemize}
+% \item Calculation of the bounding box uses the default (for the chosen growth direction) label anchors instead of any explicitly set anchors. It also does not take into account the width of the labels of any intermediate (outer) or final middle children.
+% \item Spaces between the semicolon and the color/anchor cannot be handled.
+% \item The automatically generated file name may not be unique: two or more differently styled trees may end up with the same name, thus only the one that was compiled first will be used. On the other hand, two trees that \emph{are} the same may end up with different names if the subpaths are given in a different order.
+% \end{itemize}
+%
+% \section{Planned changes}
+%
+% \begin{itemize}
+% \item Options to control how a file name is generated:
+% \begin{itemize}
+% \item use figure name instead of the generated file name for figures where an unknown keys have been used
+% \item use figure name instead of the generated file name for figures where math mode for labels has been used
+% \item force writing the expanded label into the file name, even if math mode is set---will only work if the label expands to text without special characters; at user's discretion
+% \item configure how detailed the generated file name is: whether or not to ignore labels, distances, scales, etc.
+% \end{itemize}
+% \item Option to specify label position along the edge.
+%^^A \item When \BTkey{external} is set to |true|, check if |\tikzexternalize| has been run and abort if not.
+% \end{itemize}
+%
+% \StopEventually{\clearpage\PrintChanges\PrintIndex}
+% \clearpage
+% \section{Implementation}
+%
+% The tree is drawn in a simple recursive way, which creates exactly two child nodes for each previous node, up to a maximum depth of |\BT@max@depth|. The entire appearance is controlled by a global style \BTkey{/tikz/binary tree} (which is determined by the setting of various pgf keys) as well as individual styles for each edge, which are created on the fly as the path specification is processed. Each style lives under the \BTkey{/tikz/binary tree} directory and is named according to the unique place of the child in the tree, by appending |l@| or |r@| to the name of its parent. The root is called |@| and has a depth of 0, its immediate children are |@r@| and |@l@| on level 1, and so on. Each node is also named similarly, for example |btree-l-l-r| or |btree-root|.\par
+% We create template styles for each type of node: root, intermediate labelled, final labelled, unlabelled, or unvisited. When setting a style for a particular edge, the relevant template is used and a macro with the name |\|\meta{child name}| styled| is defined (let to |\relax|). This is so we don't override a previously set style unless one of \meta{label}, \meta{color} or \meta{anchor} is given explicitly. It is also used when drawing the tree to check if such a style exists, otherwise the style is set to \BTkey{/tikz/binary tree/default}.\par
+% \TikZ would put unnecessary white space around the tree (especially if there are missing outer children), so we need to calculate the actual size of the tree and clip the bounding box accordingly: we need the left and right width, height and depth, since these will be coordinates for the clipping rectangle. It is mostly calculated on the fly, starting with 0pt for each 4 coordinates. If \BTkey{draw missing} is |true|, we set the bounding box size to the maximum for this depth (and don't change it further). Otherwise we proceed in the following way: the height is easy to deal with---we add a level distance to the height each time a new level is created (we keep track by defining a macro |\level |\meta{depth}| exists|). The width is trickier---consider for example the case where there are no children on the right, but there are right children to one of the left nodes; they may extend to the right side of the box. What is done is we keep track of a current x coordinate (which is relative to root, being negative on the left) and each time any left (right) edge is created, we compare the (magnitude of the) coordinate to the current left (right) width of the box, and if greater---set the box width to it.\par
+% Additionally, we save the height (width) of the root's label since this will (may) add to the depth (width) of the box, but we do not add it to the size of the box just yet (since the root label may change several times). Furthermore, we keep track of the maximum height (width) of any of the final children's labels since these will increase the ``height''\footnote{Here ``height'' means height if the tree is growing up, depth if it's growing down, left/right width if it's growing left/right; and similarly for ``width''} of the box when the tree is growing vertically (sideways). We also save the width (height) of the left- and rightmost final children, as these will increase the ``width'' of the box when growing vertically (sideways). At the end all of these are used to increase the box (still assuming the tree is growing upwards). Finally, the four sides are cycled according to the actual growing direction.
+%
+% \parindent=0pt\relax
+% \subsection{Allocating registers}
+%
+% \begin{macro}{\BT@bbox@r@width}
+% \begin{macro}{\BT@bbox@l@width}
+% \begin{macro}{\BT@bbox@height}
+% \begin{macro}{\BT@bbox@depth}
+% \begin{macro}{\BT@bbox@current@x}
+% \begin{macro}{\BT@root@width}
+% \begin{macro}{\BT@root@height}
+% \begin{macro}{\BT@max@final@width}
+% \begin{macro}{\BT@max@final@height}
+% \begin{macro}{\BT@l@final@width}
+% \begin{macro}{\BT@l@final@height}
+% \begin{macro}{\BT@r@final@width}
+% \begin{macro}{\BT@r@final@height}
+% \begin{macro}{\BT@bbox@padding@top}
+% \begin{macro}{\BT@bbox@padding@bottom}
+% \begin{macro}{\BT@bbox@padding@left}
+% \begin{macro}{\BT@bbox@padding@right}
+% \begin{macro}{\BT@sibling@distance}
+% \begin{macro}{\BT@level@distance}
+% \begin{macro}{\BT@label@distance}
+% The following lengths are used in calculating the bounding box for clipping the final picture.
+% \begin{macrocode}
+\newdimen\BT@bbox@r@width
+\newdimen\BT@bbox@l@width
+\newdimen\BT@bbox@height
+\newdimen\BT@bbox@depth
+\newdimen\BT@bbox@current@x
+\newdimen\BT@root@width
+\newdimen\BT@root@height
+\newdimen\BT@max@final@width
+\newdimen\BT@max@final@height
+\newdimen\BT@l@final@width
+\newdimen\BT@l@final@height
+\newdimen\BT@r@final@width
+\newdimen\BT@r@final@height
+\newdimen\BT@bbox@padding@top
+\newdimen\BT@bbox@padding@bottom
+\newdimen\BT@bbox@padding@left
+\newdimen\BT@bbox@padding@right
+\newdimen\BT@sibling@distance
+\newdimen\BT@level@distance
+\newdimen\BT@label@distance
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ifBT@root@edge}
+% \begin{macro}{\ifBT@draw@missing}
+% \begin{macro}{\ifBT@label@every@edge}
+% \begin{macro}{\ifBT@math@labels}
+% \begin{macro}{\ifBT@continue@at@end}
+% \begin{macro}{\ifBT@continue@after@turn}
+% \begin{macro}{\ifBT@default@color@after@turn}
+% \begin{macro}{\ifBT@sibling@distance@scales}
+% \begin{macro}{\ifBT@level@distance@scales}
+% \begin{macro}{\ifBT@framed}
+% \begin{macro}{\ifBT@separate}
+% \begin{macro}{\ifBT@external}
+% \begin{macro}{\ifBT@auto@file@name}
+% The following |\if|'s are set by |pgfkeys| when the corresponding keys are used.
+% \begin{macrocode}
+\newif\ifBT@root@edge
+\newif\ifBT@draw@missing
+\newif\ifBT@label@every@edge
+\newif\ifBT@math@labels
+\newif\ifBT@continue@at@end
+\newif\ifBT@continue@after@turn
+\newif\ifBT@default@color@after@turn
+\newif\ifBT@sibling@distance@scales
+\newif\ifBT@level@distance@scales
+\newif\ifBT@framed
+\newif\ifBT@separate
+\newif\ifBT@external
+\newif\ifBT@auto@file@name
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Keys, styles and defaults}
+% \subsubsection{For internal use}
+%
+% \begin{macro}{\BT@key@is@tikz@or@error}
+% \begin{macro}{\BT@key@is@tikz@external@or@error}
+% \begin{key}{/BT/.unknown}
+% \begin{key}{/BT/external/.unknown}
+% |\BT@key@is@tikz@or@error| and |\BT@key@is@tikz@external@or@error| are called from the |.unknown| handlers in |/BT/| and |/BT/external/| pgf directories respectively, and check if the key is defined for |/tikz/| or |/pgf/|, or |/tikz/external|.\par
+% \nsig{key basename,value}
+% \begin{macrocode}
+\def\BT@key@is@tikz@or@error#1#2{%
+ \tikzset{binary tree/.append code={%
+ \pgfkeys{/tikz/#1/.try=#2,%
+ /pgf/#1/.lastretry=#2}}}}
+\def\BT@key@is@tikz@external@or@error#1#2{%
+ \tikzset{binary tree/externalize/.append code={%
+ \pgfkeys{/tikz/external/#1=#2}}}}
+\pgfkeys{/BT/.cd,%
+ .unknown/.code={%
+ \expandafter\BT@key@is@tikz@or@error\expandafter{%
+ \pgfkeyscurrentname}{#1}},%
+ external/.unknown/.code={%
+ \expandafter\BT@key@is@tikz@external@or@error\expandafter{%
+ \pgfkeyscurrentname}{#1}}}
+% \end{macrocode}
+% \end{key}
+% \end{key}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{The user interface}
+%
+% \begin{macro}{\@btreeset}
+% \begin{macro}{\btreeset}
+% \begin{macro}{\btreesetexternal}
+% The user should use |\btreeset| and |\btreesetexternal| to customize the default tree style. Some keys however only make sense for a single invocation of |\BinaryTree|, so we do not allow these to be set via |\btreeset| or |\btreesetexternal|
+% \begin{macrocode}
+\def\@btreeset#1#2{%
+ \pgfkeyssavekeyfilterstateto{\BT@restore@pgf@key@filter}%
+% \end{macrocode}
+% \BTkey{local option outside of scope} will handle only keys which are defined and belong to family \BTkey{local options}, so that \BTkey{.unknown} and \BTkey{external/.unknown} will still handle undefined keys.
+% \begin{macrocode}
+ \pgfkeys{/pgf/key filters/not/.install key filter={%
+ /pgf/key filters/and={/pgf/key filters/active families}{%
+ /pgf/key filters/defined}},%
+ /BT/local option outside of scope/.install key filter handler}%
+ \pgfqkeysactivatesinglefamilyandfilteroptions{/BT/local options}{#1}{#2}%
+ \BT@restore@pgf@key@filter}
+\def\btreeset{\@btreeset{/BT}}
+\def\btreesetexternal{\@btreeset{/BT/external}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{key}{/BT/local options}
+% \begin{key}{/BT/local option outside of scope}
+% \begin{macrocode}
+\pgfkeys{/BT/.cd,%
+ local options/.is family,%
+ local option outside of scope/.code={%
+ \PackageError{binarytree}{'\pgfkeyscurrentkey' only allowed %
+ locally\MessageBreak for each \string\BinaryTree}{}}}
+% \end{macrocode}
+% \end{key}
+% \end{key}
+%
+% \subsubsection{Keys for customizing the tree appearance}
+%
+% The following macros are used in the calculation of the bounding box size.
+% \begin{macro}{\BT@set@max@l@or@r@bbox@size}
+% Increase the bounding box on the left or right side so it accommodates all children on that side.
+% \begin{macrocode}
+\def\BT@set@max@l@or@r@bbox@size#1{%
+ \BT@bbox@current@x=\z@\relax%
+ \@tempcnta=\BT@root@depth\relax%
+ \loop%
+ \ifnum\@tempcnta < \numexpr\BT@max@depth\relax%
+ \advance\@tempcnta\@ne\relax%
+ \BT@check@if@new@level\@tempcnta%
+ \csname BT@#1@xshift\endcsname\@tempcnta%
+ \csname BT@update@bbox@#1@width\endcsname%
+ \repeat}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@bbox@scale@labels}
+% \begin{macro}{\BT@bbox@scale@padding}
+% When \TikZ applies the scaling set by the user, the labels, label distance and the paddings will not be scaled, so we divide them by the scale here.
+% \begin{macrocode}
+\def\BT@bbox@scale@labels{%
+ \pgfmathparse{\BT@root@height / \BT@yscale}%
+ \BT@root@height\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@root@width / \BT@xscale}%
+ \BT@root@width\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@max@final@height / \BT@yscale}%
+ \BT@max@final@height\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@max@final@width / \BT@xscale}%
+ \BT@max@final@width\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@l@final@width / \BT@xscale}%
+ \BT@l@final@width\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@r@final@width / \BT@xscale}%
+ \BT@r@final@width\pgfmathresult pt\relax}%
+\def\BT@bbox@scale@padding{%
+ \pgfmathparse{\BT@bbox@padding@top / \BT@yscale}%
+ \BT@bbox@padding@top\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@bbox@padding@bottom / \BT@yscale}%
+ \BT@bbox@padding@bottom\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@bbox@padding@left / \BT@yscale}%
+ \BT@bbox@padding@left\pgfmathresult pt\relax%
+ \pgfmathparse{\BT@bbox@padding@right / \BT@yscale}%
+ \BT@bbox@padding@right\pgfmathresult pt\relax}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BT@bbox@add@labels}
+% |\BT@bbox@add@labels| increases the height, depth, right and left width of the bounding box assuming an upward growing tree. It scales the label sizes and adds them to the bounding box, which at this point accommodates only the tree.
+% \begin{macrocode}
+\def\BT@bbox@add@labels{%
+ \BT@bbox@scale@labels%
+ \pgfmathparse{\BT@label@distance / \BT@yscale}%
+ \ifdim\BT@root@height > \z@\relax%
+ \advance\BT@bbox@depth\dimexpr\BT@root@height%
+ + \pgfmathresult pt\relax\fi%
+ \ifdim\BT@max@final@height > \z@\relax%
+ \advance\BT@bbox@height\dimexpr\BT@max@final@height%
+ + \pgfmathresult pt\relax\fi%
+ \advance\BT@bbox@l@width\dimexpr\BT@l@final@width / 2\relax%
+ \advance\BT@bbox@r@width\dimexpr\BT@r@final@width / 2\relax%
+% \end{macrocode}
+% If the width of the root label is more than the width of the bounding box, use it instead.
+% \begin{macrocode}
+ \BT@set@dim@to@greater\BT@bbox@l@width{\BT@root@width / 2}%
+ \BT@set@dim@to@greater\BT@bbox@r@width{\BT@root@width / 2}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@bbox@add@padding}
+% |\BT@bbox@add@padding| simply adds the padding.
+% \begin{macrocode}
+\def\BT@bbox@add@padding{%
+ \BT@bbox@scale@padding%
+ \advance\BT@bbox@height\dimexpr\BT@bbox@padding@top\relax%
+ \advance\BT@bbox@depth\dimexpr\BT@bbox@padding@bottom\relax%
+ \advance\BT@bbox@l@width\dimexpr\BT@bbox@padding@left\relax%
+ \advance\BT@bbox@r@width\dimexpr\BT@bbox@padding@right\relax}
+% \end{macrocode}
+% \end{macro}
+% \begin{key}{/BT/grow}
+% \begin{macro}{\BT@adjust@bbox@sides}
+% \begin{macro}{\BT@grow@direction}
+% The \BTkey{grow} key determines the growth direction, sets the default anchors for the labels and defines the macro |\BT@adjust@bbox@sides| which is called right before drawing the tree to compute the coordinates of the bounding box. Since |\BT@bbox@add@labels| calculates the sides of the box as if the growth direction is |up| we need to further transform them according to the actual direction. We call |\BT@bbox@add@padding| at the very end, since these paddings are absolute (independent of direction).\par
+% |\BT@grow@direction| is used for generating the file name only.
+% \begin{macrocode}
+\pgfkeys{/BT/.cd,%
+ grow/.is choice,%
+ grow/up/.code={\def\BT@adjust@bbox@sides{%
+ \BT@bbox@add@labels%
+ \BT@bbox@add@padding}%
+ \def\BT@grow@direction{up}%
+ \pgfkeys{/BT/.cd,%
+ /tikz/binary tree/.append style={grow=up},
+ root label anchor=below,
+ left label anchor=north east,
+ right label anchor=north west,
+ final label anchor=above}},%
+% \end{macrocode}
+% Growing down is the same as growing up, but the depth and height of the bounding box need to be swapped.
+% \begin{macrocode}
+ grow/down/.code={\def\BT@adjust@bbox@sides{%
+ \BT@bbox@add@labels
+ \BT@swap@dims\BT@bbox@depth\BT@bbox@height%
+ \BT@bbox@add@padding}%
+ \def\BT@grow@direction{down}%
+ \pgfkeys{/BT/.cd,%
+ /tikz/binary tree/.append style={grow'=down},
+ root label anchor=above,
+ left label anchor=south east,
+ right label anchor=south west,
+ final label anchor=below}},%
+% \end{macrocode}
+% Growing left means that the x and y scales, as well as the heights and widths of each of the relevant labels, should be swapped \emph{before} calling |\BT@bbox@add@labels|.
+% \begin{macrocode}
+ grow/left/.code={\def\BT@adjust@bbox@sides{%
+ \BT@swap@hooks\BT@xscale\BT@yscale%
+ \BT@swap@dims\BT@root@width\BT@root@height%
+ \BT@swap@dims\BT@max@final@width\BT@max@final@height%
+ \BT@swap@dims\BT@l@final@width\BT@l@final@height%
+ \BT@swap@dims\BT@r@final@width\BT@r@final@height%
+ \BT@bbox@add@labels%
+% \end{macrocode}
+% Then, cycle the sides of the box according to: depth \(\to\) right width, right width \(\to\) height, height \(\to\) left width, left width \(\to\) depth.
+% \begin{macrocode}
+ \@tempdima\BT@bbox@depth\relax%
+ \BT@bbox@depth\BT@bbox@l@width\relax%
+ \BT@bbox@l@width\BT@bbox@height\relax%
+ \BT@bbox@height\BT@bbox@r@width\relax%
+ \BT@bbox@r@width\@tempdima\relax%
+ \BT@bbox@add@padding}%
+ \def\BT@grow@direction{left}%
+ \pgfkeys{/BT/.cd,%
+ /tikz/binary tree/.append style={grow=left},
+ root label anchor=right,
+ left label anchor=north west,
+ right label anchor=south west,
+ final label anchor=left}},%
+% \end{macrocode}
+% As in the |left| case, swap the x and y scales, widths and heights of labels and cycle the sides in the same order but additionally swap height and depth. This is in fact equivalent to swapping height and right width, depth and left width.
+% \begin{macrocode}
+ grow/right/.code={\def\BT@adjust@bbox@sides{%
+ \BT@swap@hooks\BT@xscale\BT@yscale%
+ \BT@swap@dims\BT@root@width\BT@root@height%
+ \BT@swap@dims\BT@max@final@width\BT@max@final@height%
+ \BT@swap@dims\BT@l@final@width\BT@l@final@height%
+ \BT@swap@dims\BT@r@final@width\BT@r@final@height%
+ \BT@bbox@add@labels%
+ \BT@swap@dims\BT@bbox@depth\BT@bbox@l@width%
+ \BT@swap@dims\BT@bbox@height\BT@bbox@r@width%
+ \BT@bbox@add@padding}%
+ \def\BT@grow@direction{right}%
+ \pgfkeys{/BT/.cd,%
+ /tikz/binary tree/.append style={grow'=right},
+ root label anchor=left,
+ left label anchor=north east,
+ right label anchor=south east,
+ final label anchor=right}},%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{key}
+%
+% \begin{key}{/BT/root label anchor}
+% \begin{key}{/BT/left label anchor}
+% \begin{key}{/BT/right label anchor}
+% \begin{key}{/BT/final label anchor}
+% These can be used to override the default anchors set by \BTkey{grow}. They of course need to be called after this key has been set.
+% \begin{macrocode}
+ root label anchor/.initial=,%
+ left label anchor/.initial=,%
+ right label anchor/.initial=,%
+ final label anchor/.initial=,%
+% \end{macrocode}
+% \end{key}
+% \end{key}
+% \end{key}
+% \end{key}
+%
+% \begin{key}{/BT/root edge}
+% \begin{macro}{\BT@effective@level}
+% The way the root edge is drawn is a single child is added to it, which offsets the level numbering by one. Since we don't want the overall size of the tree to decrease, we define |\BT@effective@level| to subtract 1 (for levels\({} > 1\)).
+% \begin{macrocode}
+ root edge/.is if={BT@root@edge},%
+ root edge/.append code={%
+ \ifBT@root@edge%
+ \def\BT@effective@level##1{%
+ \ifnum\numexpr##1\relax < \numexpr 3\relax\expandafter\@firstoftwo%
+ \else\expandafter\@secondoftwo\fi{1}{(##1-1)}}%
+ \else\def\BT@effective@level##1{##1}\fi},%
+% \end{macrocode}
+% \end{macro}
+% \end{key}
+%
+% \begin{macro}{\BT@set@min@bbox@size}
+% \begin{key}{/BT/draw missing}
+% \begin{key}{/tikz/binary tree/default}
+% \BTkey{draw missing} key chooses between |/tikz/missing| and unlabelled edge (in the default color) as the default style for children which have not been visited. If set to |true|, then we need to set the bounding box size to accommodate all of the children. Then we may define the |\BT@[lr]@xshift|, |\BT@update@bbox@[lr]@width| macros to empty, we don't need them anymore. |\BT@set@min@bbox@size| will eitherway be called before setting the styles.
+% \begin{macrocode}
+ draw missing/.is if={BT@draw@missing},%
+ draw missing/.append code={%
+ \ifBT@draw@missing%
+ \def\BT@set@min@bbox@size{\BT@set@max@l@or@r@bbox@size{l}%
+ \BT@set@max@l@or@r@bbox@size{r}%
+ \let\BT@l@xshift\@gobble%
+ \let\BT@r@xshift\@gobble%
+ \let\BT@update@bbox@l@width\relax%
+ \let\BT@update@bbox@r@width\relax}%
+ \tikzset{binary tree/default/.style={binary tree/empty={BT@default}}}%
+ \else\let\BT@set@min@bbox@size\relax%
+ \tikzset{binary tree/default/.style={missing}}\fi},%
+% \end{macrocode}
+% \end{key}
+% \end{key}
+% \end{macro}
+%
+% \begin{key}{/BT/label on every edge}
+% If this key is |true|, then the label specified for a subpath will be applied to every edge.
+% \begin{macrocode}
+ label on every edge/.is if={BT@label@every@edge},%
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/math labels}
+% \begin{macro}{\BT@wrap@label}
+% |\BT@wrap@label| wraps the label in math mode if \BTkey{math labels} is |true|.
+% \begin{macrocode}
+ math labels/.is if={BT@math@labels},%
+ math labels/.append code={%
+ \ifBT@math@labels\def\BT@wrap@label##1{\(##1\)}%
+ \else\def\BT@wrap@label##1{##1}\fi},%
+% \end{macrocode}
+% \end{macro}
+% \end{key}
+%
+% \begin{key}{/BT/continue at path end}
+% This determines if we stop or continue the last move when the end of a subpath is reached.
+% \begin{macrocode}
+ continue at path end/.is if={BT@continue@at@end},%
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/continue after turn}
+% This determines if we stop or continue after a turn is made.
+% \begin{macrocode}
+ continue after turn/.is if={BT@continue@after@turn},%
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/default color}
+% This key sets |BT@default|---the default color for the tree.
+% \begin{macrocode}
+ default color/.code={\colorlet{BT@default}{#1}},%
+ default color/.value required,%
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/default color after turn}
+% This key determines if the default color will be used when continuing a path after a turn.
+% \begin{macrocode}
+ default color after turn/.is if={BT@default@color@after@turn},%
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/xscale}
+% \begin{key}{/BT/yscale}
+% \begin{key}{/BT/scale}
+% \begin{macro}{\BT@xscale}
+% \begin{macro}{\BT@yscale}
+% The x and y scale are simply appended to the \BTkey{/tikz/binary tree} style. |\BT@xscale| and |\BT@yscale| are used in calculating the bounding box size.
+% \begin{macrocode}
+ xscale/.store in=\BT@xscale,%
+ xscale/.append style={/tikz/binary tree/.append style={xscale=#1}},%
+ xscale/.value required,%
+ yscale/.store in=\BT@yscale,%
+ yscale/.append style={/tikz/binary tree/.append style={yscale=#1}},%
+ yscale/.value required,%
+ scale/.forward to=/BT/xscale,%
+ scale/.forward to=/BT/yscale,%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{key}
+% \end{key}
+% \end{key}
+%
+% \begin{key}{/BT/label distance}
+% \begin{key}{/BT/sibling distance}
+% \begin{key}{/BT/level distance}
+% These keys simply set the corresponding lengths
+% \begin{macrocode}
+ label distance/.code={\BT@label@distance=\dimexpr#1\relax},%
+ label distance/.value required,%
+ sibling distance/.code={\BT@sibling@distance=\dimexpr#1\relax},%
+ sibling distance/.value required,%
+ level distance/.code={\BT@level@distance=\dimexpr#1\relax},%
+ level distance/.value required,%
+% \end{macrocode}
+% \end{key}
+% \end{key}
+% \end{key}
+%
+% \begin{key}{/BT/sibling distance scales}
+% \begin{key}{/BT/level distance scales}
+% \begin{macro}{\BT@current@sibling@distance}
+% \begin{macro}{\BT@current@level@distance}
+% If set to |true| we scale the corresponding distance by the current level number. Note that |\BT@current@sibling@distance| and |\BT@current@level@distance| expand either to a length register, or to an expression understood by |\pdfmathparse|, so they can only be used inside |\pgfmathparse|.
+% \begin{macrocode}
+ sibling distance scales/.is if={BT@sibling@distance@scales},%
+ sibling distance scales/.append code={%
+ \ifBT@sibling@distance@scales%
+ \def\BT@current@sibling@distance##1{%
+ \BT@sibling@distance/(\BT@effective@level{##1})}%
+ \else\def\BT@current@sibling@distance##1{\BT@sibling@distance}\fi},%
+ level distance scales/.is if={BT@level@distance@scales},%
+ level distance scales/.append code={%
+ \ifBT@level@distance@scales%
+ \def\BT@current@level@distance##1{%
+ \BT@level@distance/(\BT@effective@level{##1})}%
+ \else\def\BT@current@level@distance##1{\BT@level@distance}\fi},%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{key}
+% \end{key}
+%
+% \begin{key}{/BT/top padding}
+% \begin{key}{/BT/bottom padding}
+% \begin{key}{/BT/left padding}
+% \begin{key}{/BT/right padding}
+% These keys set the padding on each side of the bounding box.
+% \begin{macrocode}
+ top padding/.code={\BT@bbox@padding@top=#1\relax},%
+ top padding/.value required,%
+ bottom padding/.code={\BT@bbox@padding@bottom=#1\relax},%
+ bottom padding/.value required,%
+ left padding/.code={\BT@bbox@padding@left=#1\relax},%
+ left padding/.value required,%
+ right padding/.code={\BT@bbox@padding@right=#1\relax},%
+ right padding/.value required,%
+% \end{macrocode}
+% \end{key}
+% \end{key}
+% \end{key}
+% \end{key}
+%
+% \begin{key}{/BT/framed}
+% If set to |true| the bounding box will be drawn.
+% \begin{macrocode}
+ framed/.is if={BT@framed},%
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/defaults}
+% We define a single key which sets the default values for all keys related to the appearance. We do not set defaults for keys related to externalization since the user will likely want to set those globally for the entire document. This is meant to be a shortcut to simply reset the styles for the current group or tree.
+% \begin{macrocode}
+ defaults/.style={/BT/.cd,%
+ default color=black,%
+ default color after turn=true,%
+ grow=up,%
+ root edge=false,%
+ draw missing=false,
+ label on every edge=false,%
+ math labels=false,%
+ continue at path end=true,%
+ continue after turn=true,%
+ scale=1,%
+ sibling distance=40mm,%
+ level distance=20mm,%
+ sibling distance scales=true,%
+ level distance scales=true,%
+ label distance=10pt,%
+ top padding=3pt,%
+ bottom padding=3pt,%
+ left padding=3pt,%
+ right padding=3pt,%
+ framed=false},%
+ defaults/.value forbidden,%
+% \end{macrocode}
+% \end{key}
+%
+% \subsubsection{Keys related to externalization}
+%
+% \begin{key}{/BT/separate}
+% If set to |true| the code for the tree will be put in a |tikzpicture| environment, otherwise---in a |scope| environment.
+% \begin{macrocode}
+ separate/.is if={BT@separate},%
+ separate/.append code={%
+ \ifBT@separate\else\pgfkeys{/BT/external=false}\fi},%
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/external}
+% If set to |true| \BTkey{separate} will also be enabled. Additionally, right before drawing the tree, |\tikzexternalenable| will be run and all the |/tikz/external| keys that the user has passed will be set.
+% \begin{macrocode}
+ external/.is if={BT@external},%
+ external/.append code={%
+ \ifBT@external\pgfkeys{/BT/separate=true}\fi}}
+% \end{macrocode}
+% \end{key}
+%
+% \begin{key}{/BT/use automatic file name}
+% \begin{key}{/BT/file name}
+% If \BTkey{external/file name} is set, this will be used as the file name for the figure. Otherwise, if \BTkey{external/use automatic file name} is |true| the automatically generated file name will be used (a figure with the same file name may already be present, this may or may not be what the user intended); if it is |false| the figure name (the default one or the one set by the user) will be used with a unique number automatically appended.
+% \begin{macrocode}
+\pgfkeys{/BT/external/.cd,%
+ use automatic file name/.is if={BT@auto@file@name},%
+ file name/.style={/tikz/binary tree/externalize/.append code={%
+ \tikzsetnextfilename{#1}}},%
+ file name/.belongs to family=/BT/local options,%
+ file name/.value required}
+% \end{macrocode}
+% \end{key}
+% \end{key}
+%
+% \subsubsection{Setting default values}
+%
+% \begin{key}{/tikz/binary tree}
+% \begin{key}{/tikz/binary tree/externalize}
+% The \BTkey{/tikz/binary tree} style is applied to the scope of the tree. \BTkey{/tikz/binary tree/externalize} is run right before entering the scope and it sets the given |/tikz/external| keys. It also sets the default figure name to |binary-tree_|.
+% \begin{macrocode}
+\tikzset{binary tree/.style={%
+ level/.style={level distance=\BT@current@level@distance{##1},%
+ sibling distance=\BT@current@sibling@distance{##1}},%
+ parent anchor=center,child anchor=center,%
+ label distance=\BT@label@distance,every node/.style={outer sep=0pt,%
+ inner sep=0pt}},%
+ binary tree/externalize/.code={%
+ \tikzexternalenable\tikzsetfigurename{binary-tree_}}}
+% \end{macrocode}
+% \end{key}
+% \end{key}
+%
+% Now we set the defaults.
+% \begin{macrocode}
+\pgfqkeys{/BT}{%
+ defaults,%
+ separate=false,%
+ external=false,%
+ external/use automatic file name=false}
+% \end{macrocode}
+%
+% \subsubsection{\TikZ styles for child nodes}
+%
+% The |\BT@edge@label| and |\BT@edge@no@label| macros are used by the \TikZ child styles as |edge from parent macro|.
+% \begin{macro}{\BT@edge@label}
+% \nsig{label,anchor,color}\nargs*{4}{5}{\meta{options and node specifications} (ignored)}
+% \begin{macrocode}
+\def\BT@edge@label#1#2#3#4#5{%
+ [style=edge from parent, color=#3]%
+ (\tikzparentnode\tikzparentanchor) --%
+ node[anchor=#2,inner sep=\BT@label@distance/2] {#1}%
+ (\tikzchildnode\tikzchildanchor)}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@edge@no@label}
+% \nsig{color}\nargs*{2}{3}{\meta{options and node specifications} (ignored)}
+% \begin{macrocode}
+\def\BT@edge@no@label#1#2#3{%
+ [style=edge from parent, color=#1]%
+ (\tikzparentnode\tikzparentanchor) --%
+ (\tikzchildnode\tikzchildanchor)}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{key}{/tikz/binary tree/root}
+% \begin{key}{/tikz/binary tree/child}
+% \begin{key}{/tikz/binary tree/final child}
+% The |root|, |child| and |final child| styles draw the edges for the root and \emph{labelled} child nodes. The |root| style additionally sets the empty style which has effect only when it is passed to a |child| operation (where the |label| key has no effect); this is how the root label and the edge from it are drawn in the same color when \BTkey{root edge} is |true|---the root style is passed to both the root node and its single immediate child.\par
+% \nsig{label,label anchor,color}
+% \begin{macrocode}
+\tikzset{binary tree/.cd,%
+ root/.style n args={3}{%
+ label={[text=#3]#2:#1},binary tree/empty={#3}},%
+ root/.value required,%
+ child/.style n args={3}{%
+ edge from parent macro=\BT@edge@label{#1}{#2}{#3},%
+ every child node/.style={}},%
+ child/.value required,%
+ final child/.style n args={3}{%
+ edge from parent macro=\BT@edge@no@label{#3},%
+ every child node/.style={label={[text=#3]#2:#1}}},%
+ final child/.value required,%
+% \end{macrocode}
+% \end{key}
+% \end{key}
+% \end{key}
+% \begin{key}{/tikz/binary tree/empty}
+% The |empty| style is for unlabelled child nodes.\par
+% \nsig{color}
+% \begin{macrocode}
+ empty/.style={%
+ edge from parent macro=\BT@edge@no@label{#1},%
+ every child node/.style={}},%
+ empty/.value required}
+% \end{macrocode}
+% \end{key}
+%
+% \subsection{General helper macros}
+%
+% \begin{macro}{\BT@message}
+% When modifying the code, |\BT@message| is used to printing debugging information (comment out the second line).
+% \begin{macrocode}
+\def\BT@message#1{\pgfinterruptpicture #1\par\endpgfinterruptpicture}
+\def\BT@message#1{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@gobble@till@nil}
+% Gobble all tokens until the next |\@nil| including.
+% \begin{macrocode}
+\def\BT@gobble@till@nil#1\@nil{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@endgroup@let}
+% End the current group and define token |#1| to be the expansion of token |#2|.
+% \begin{macrocode}
+\def\BT@endgroup@let#1#2{%
+ \expandafter\endgroup\expandafter\def\expandafter#1\expandafter{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@app@to@hook}
+% \begin{macro}{\BT@eapp@to@hook}
+% |\BT@app@to@hook| appends |#2|, as is, to an already defined (parameterless) macro |#1|, while |\BT@eapp@to@hook| fully expands |#2|.
+% \begin{macrocode}
+\def\BT@app@to@hook#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
+\def\BT@eapp@to@hook#1#2{\edef#1{\unexpanded\expandafter{#1}#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@if}
+% If the \TeX boolean named |#1| is |true|, expands to \meta{true}, otherwise to \meta{false}.
+% \begin{macrocode}
+\def\BT@if#1{\csname if#1\endcsname\expandafter\@firstoftwo%
+ \else\expandafter\@secondoftwo\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@if@blank}
+% \begin{macro}{\BT@if@blank@i}
+% If |#1| is empty or consists of spaces only, expands to \meta{true}, otherwise to \meta{false}. No expansion of the first argument is performed.\par
+% \nsig{tokens,true,false}
+% \begin{macrocode}
+\def\BT@if@blank#1{\BT@if@blank@i#1\@nil}
+\def\BT@if@blank@i#1{\ifx\@nil#1\expandafter\@firstoftwo%
+ \else\expandafter\expandafter\expandafter\@secondoftwo\expandafter%
+ \BT@gobble@till@nil\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@strip@prefix}
+% Remove |#1| from beginning of replacement text of macro |#2|.
+% \begin{macrocode}
+\def\BT@strip@prefix#1#2{%
+ \begingroup%
+ \def\@@suffix#1##1\@nil{##1}%
+ \edef#2{\unexpanded\expandafter\expandafter\expandafter{%
+ \expandafter\@@suffix#2\@nil}}%
+ \BT@endgroup@let#2#2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@set@to@dim}
+% \begin{macro}{\BT@set@to@width}
+% \begin{macro}{\BT@set@to@height}
+% \begin{macro}{\BT@set@to@total@height}
+% ``|settoheight|'' and friends in plain \TeX. It does not work for the scratch registers (|\dimen|0--9).\par
+% \nsig{{\str\ht\vbar\str\wd\vbar\str\dp},\TeX length register,content}
+% \begin{macrocode}
+\def\BT@set@to@dim#1#2#3{%
+ \begingroup%
+ \setbox0\hbox{#3}%
+ \expandafter\endgroup\expandafter#2\the#10\relax}
+\def\BT@set@to@width{\BT@set@to@dim\wd}
+\def\BT@set@to@height{\BT@set@to@dim\ht}
+\def\BT@set@to@depth{\BT@set@to@dim\dp}
+\def\BT@set@to@total@height#1#2{%
+ \BT@set@to@height#1{#2}%
+ \begingroup%
+ \BT@set@to@depth#1{#2}%
+ \expandafter\endgroup\expandafter\advance\expandafter#1\the#1\relax}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@swap@hooks}
+% \begin{macro}{\BT@swap@dims}
+% Swap two (parameterless) macros or lengths.
+% \begin{macrocode}
+\def\BT@swap@hooks#1#2{%
+ \expandafter\let\expandafter#1\expandafter#2%
+ \expandafter\def\expandafter#2\expandafter{#1}}
+\def\BT@swap@dims#1#2{%
+ \expandafter#1\expandafter\the#2\expandafter\relax%
+ \expandafter#2\the#1\relax}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@set@dim@to@greater}
+% \begin{macro}{\BT@set@dim@to@smaller}
+% Set length |#1| to the greater or smaller of the two lengths.
+% \begin{macrocode}
+\def\BT@set@dim@to@greater#1#2{%
+ #1\dimexpr\ifdim\dimexpr#1\relax < \dimexpr#2\relax#2\else#1\fi\relax}
+\def\BT@set@dim@to@smaller#1#2{%
+ #1\dimexpr\ifdim\dimexpr#1\relax < \dimexpr#2\relax#1\else#2\fi\relax}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@extract@rgb@color@specs}
+% Extract color specifications and convert them to |RGB|.\par
+% \nsig{color,macro to save in}
+% \begin{macrocode}
+\def\BT@extract@rgb@color@specs#1#2{%
+ \begingroup%
+ \extractcolorspecs{#1}{\tmp@mod}{\tmp@col}%
+ \convertcolorspec{\tmp@mod}{\tmp@col}{rgb}{\tmp@col}%
+ \BT@endgroup@let#2\tmp@col}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Macros for setting the styles}
+% \subsubsection{Helper macros}
+%
+% \begin{macro}{\BT@at@to@dash}
+% \begin{macro}{\BT@at@to@dash@i}
+% Convert |@| to |-| (except trailing |@|, which is removed) for root children. For example |@r@l@| \(\to\) |-r-l|. Used in naming the child nodes. For root, |@|, it expands to empty.
+% \begin{macrocode}
+\def\BT@at@to@dash#1{\BT@at@to@dash@i#1\@nil}
+\def\BT@at@to@dash@i @#1{\ifx\@nil#1\else-#1\expandafter\BT@at@to@dash@i\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@anchor@or@default}
+% Use the given anchor, or if empty---the default one.\par
+% \nsig{anchor,\ttup{root\vbar left\vbar right\vbar final}}
+% \begin{macrocode}
+\def\BT@anchor@or@default#1#2{%
+ \BT@if@blank{#1}{\pgfkeysvalueof{/BT/#2 label anchor}}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@color@or@default}
+% Use the given color, or if empty---the default one.
+% \begin{macrocode}
+\def\BT@color@or@default#1{\BT@if@blank{#1}{BT@default}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@if@child@is@outer}
+% \begin{macro}{\BT@if@child@is@outer@i}
+% \begin{macro}{\BT@if@child@is@outer@ii}
+% Expands to \meta{true} if the child node named |#1| lies on an outer edge (reached by all right or all left moves from the root), and to \meta{false} otherwise.\par
+% \nsig{child name,true,false}
+% \begin{macrocode}
+\def\BT@if@child@is@outer#1{\BT@if@child@is@outer@i#1\@nil}
+\def\BT@if@child@is@outer@i @#1@#2{%
+% \end{macrocode}
+% If |#1 == #2|, compare |#2| to its child;
+% \begin{macrocode}
+ \ifx#1#2\expandafter\BT@if@child@is@outer@i\expandafter @\expandafter#2%
+% \end{macrocode}
+% else, see whether we have reached the end, or its child is on the other side.
+% \begin{macrocode}
+ \else\expandafter\BT@if@child@is@outer@ii\expandafter#2\fi}
+\def\BT@if@child@is@outer@ii#1{%
+ \ifx\@nil#1\expandafter\@firstoftwo%
+ \else\expandafter\expandafter\expandafter\@secondoftwo%
+ \expandafter\BT@gobble@till@nil\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@check@if@new@level}
+% \begin{macro}{\BT@new@level}
+% If this is the first time we visit a child on level |#1|, increase the height of the box.
+% \begin{macrocode}
+\def\BT@check@if@new@level#1{%
+ \ifcsname level \the\numexpr#1\relax exists\endcsname\else%
+ \BT@new@level{#1}%
+ \csname level \the\numexpr#1\relax exists\expandafter\endcsname\fi}
+\def\BT@new@level#1{%
+ \BT@message{adding new level: \the\numexpr#1\relax}%
+ \pgfmathparse{\BT@current@level@distance{#1}}%
+ \advance\BT@bbox@height\pgfmathresult pt\relax%
+ \BT@message{added \pgfmathresult pt to bounding box height}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@l@xshift}
+% \begin{macro}{\BT@r@xshift}
+% \begin{macro}{\BT@xshift}
+% Update the current x-coordinate (relative to root) in the bounding box by shifting it by half \(\pm\)sibling distance on level |#1|. + for right moves, - for left.
+% \begin{macrocode}
+\def\BT@l@xshift{\BT@xshift-}
+\def\BT@r@xshift{\BT@xshift+}
+\def\BT@xshift#1#2{%
+% \end{macrocode}
+% \nsig{\ttup{+\vbar -},\ttup{r\vbar l}}
+% \begin{macrocode}
+ \pgfmathparse{\BT@current@sibling@distance{#2} / 2}%
+ \advance\BT@bbox@current@x #1\pgfmathresult pt\relax%
+ \BT@message{current x coordinate is \the\BT@bbox@current@x}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BT@update@bbox@l@width}
+% \begin{macro}{\BT@update@bbox@r@width}
+% Compare the current x-coordinate with the size of the bounding box and update it if necessary. For the left side, negate the coordinate first.
+% \begin{macrocode}
+\def\BT@update@bbox@l@width{%
+ \@tempdima=-\BT@bbox@current@x\relax%
+ \BT@set@dim@to@greater\BT@bbox@l@width\@tempdima}
+\def\BT@update@bbox@r@width{%
+ \BT@set@dim@to@greater\BT@bbox@r@width\BT@bbox@current@x}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@save@final@child@size}
+% Set the relevant lengths to the size of the final child's label---if it's an outer one, save its width and height; eitherway, check if this label is wider (taller) than the current maximum final child width (height), and update the width if so.\par
+% \nargs{1}{3}{side, name and depth of child}
+% \begin{macrocode}
+\def\BT@save@final@child@size#1#2#3{%
+ \BT@set@to@width\@tempdima{%
+ \pgfinterruptpicture#3\endpgfinterruptpicture}%
+ \BT@set@to@total@height\@tempdimb{%
+ \pgfinterruptpicture#3\endpgfinterruptpicture}%
+ \BT@set@dim@to@greater\BT@max@final@width\@tempdima%
+ \BT@set@dim@to@greater\BT@max@final@height\@tempdimb%
+ \BT@if@child@is@outer{#2}{%
+ \csname BT@#1@final@width\endcsname\@tempdima\relax%
+ \csname BT@#1@final@height\endcsname\@tempdimb\relax}{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Macros for processing subpath specifications}
+%
+% \begin{macro}{\BT@process@next@path}
+% Take the next path (delimited by~|,|) and split it into subpaths (delimited by~|!|). |\BT@file@name@new@path| inserts a string to the file name currently being generated indicating the start of a new path at the root.
+% \begin{macrocode}
+\def\BT@process@next@path#1,{%
+ \ifx\@nil#1\relax\expandafter\@firstoftwo%
+ \else\expandafter\@secondoftwo\fi{}{%
+ \BT@file@name@new@path%
+ \BT@bbox@current@x=\z@\relax%
+ \def\BT@current@child{@}%
+ \def\BT@current@side{}%
+ \def\BT@current@level{\BT@root@depth}%
+ \BT@if@blank{#1}{}{\BT@process@next@subpath#1!\@nil!}%
+ \BT@process@next@path}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@process@next@subpath}
+% Take the next subpath and split it into \meta{l/r~moves}, \meta{label}, \meta{color}, \meta{anchor}. If we've reached the end (token |#1| is |\@nil|), then continue the last move if \BTkey{continue at path end} is |true|.
+% \begin{macrocode}
+\def\BT@process@next@subpath#1!{%
+ \ifx\@nil#1\relax\expandafter\@firstoftwo%
+ \else\expandafter\@secondoftwo\fi{%
+ \BT@if{BT@continue@at@end}{%
+ \BT@message{continuing last path, starting at \BT@current@child}%
+ \BT@set@subpath@style c::::\@nil}{}}{%
+ \BT@if@blank{#1}{}{%
+ \BT@set@subpath@style#1::::\@nil}%
+ \BT@process@next@subpath}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@set@subpath@style}
+% If the path is empty (the subpath starts with~|:|), then set the style for the last visited child (insert an empty token for the ``next move'').\par
+% \nsig{path,label,color,anchor}\narg*{5}{ignored}
+% \begin{macrocode}
+\def\BT@set@subpath@style#1:#2:#3:#4:#5\@nil{%
+ \BT@message{setting style (#2, #3, #4) for subpath #1,
+ starting at \BT@current@child}%
+% \end{macrocode}
+% Append the style to the file name currently being generated.
+% \begin{macrocode}
+ \BT@file@name@append@style{#1}{#2}{#3}{#4}%
+ \edef\tmp@hook{\noexpand\BT@set@next@style{\BT@current@child}{%
+ \BT@current@level}\unexpanded{{#2}}{#3}{#4}{\BT@current@side}%
+ \BT@if@blank{#1}{{}}{#1}s}%
+% \end{macrocode}
+% stop here (append an |s| move), we'll continue when the last subpath is done
+% \begin{macrocode}
+ \tmp@hook\@nil}%
+% \end{macrocode}
+% \end{macro}
+%
+% \rule{\textwidth}{1.5pt}
+% In what follows (unless stated otherwise) the signature for the macros is as follows:\par
+% \nargs{1}{2}{name and depth of \textbf{parent}}\nsig[2]{label,edge color,label anchor}
+% \begin{macro}{\BT@set@next@style}
+% |\BT@set@next@style| expects the previous and next moves (either of them can be empty) and calls macros for each valid combination that do what needs to be done. These macros will call |\BT@set@next@style| again, to set the next move. If \BTkey{label on every edge} is |false|, they will pass an empty label. If the current depth is the tree depth, |\BT@max@depth|, then call |\BT@terminate@path@style| which saves the last visited child's name, depth and side, so we can continue from here next time.\par
+% \nargs{6}{7}{previous and next moves}
+% \begin{macrocode}
+\def\BT@set@next@style#1#2#3#4#5#6#7{%
+ \BT@message{previous: #1, went: #6, going #7, depth:
+ \the\numexpr#2\relax/\BT@max@depth}%
+ \ifnum\numexpr#2\relax = \numexpr\BT@max@depth\relax%
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi%
+ {\BT@terminate@path@style{#1}{#2}{#6}}%
+ {\ifcsname BT@go@#6@#7\endcsname%
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi%
+ {\csname BT@go@#6@#7\endcsname{#1}{#2}{#3}{#4}{#5}}%
+ {\PackageError{binarytree}{Invalid path: only l, r, c or s allowed}{}}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@terminate@path@style}
+% \nargs{1}{3}{name, depth, and side of last visited child}
+% \begin{macrocode}
+\def\BT@terminate@path@style#1#2#3{%
+ \edef\BT@current@child{#1}%
+ \edef\BT@current@level{\the\numexpr#2\relax}%
+ \def\BT@current@side{#3}%
+ \BT@gobble@till@nil}
+% \end{macrocode}
+% \end{macro}
+%
+% \hrule
+% \begin{macro}{\BT@go@@c}
+% \begin{macro}{\BT@go@l@c}
+% \begin{macro}{\BT@go@r@c}
+% Continuing---keep inserting the previous move (unless we are at the root).
+% \begin{macrocode}
+\def\BT@go@@c{%
+ \BT@terminate@path@style{@}{\BT@root@depth}{}}
+\def\BT@go@l@c{\BT@continue{l}}
+\def\BT@go@r@c{\BT@continue{r}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BT@go@@s}
+% \begin{macro}{\BT@go@l@s}
+% \begin{macro}{\BT@go@r@s}
+% Stopping.
+% \begin{macrocode}
+\let\BT@go@@s\BT@go@@c
+\def\BT@go@l@s#1#2{\BT@terminate@path@style{#1}{#2}{l}}
+\def\BT@go@r@s#1#2{\BT@terminate@path@style{#1}{#2}{r}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BT@go@@}
+% Previous and current moves are empty---we're setting the root style.
+% \begin{macrocode}
+\def\BT@go@@#1#2#3#4#5{%
+ \BT@set@root@style{#3}{#4}{#5}%
+ \BT@if{BT@label@every@edge}{%
+ \BT@set@next@style{@}{\BT@root@depth}{#3}{#4}{#5}{}}{%
+ \BT@set@next@style{@}{\BT@root@depth}{}{#4}{}{}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@go@@l}
+% \begin{macro}{\BT@go@@r}
+% Previous move was empty---we are setting one of root's children.
+% \begin{macrocode}
+\def\BT@go@@l{\BT@go@l@or@r{l}}
+\def\BT@go@@r{\BT@go@l@or@r{r}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BT@go@l@l}
+% \begin{macro}{\BT@go@r@r}
+% Keep moving left or right.
+% \begin{macrocode}
+\let\BT@go@l@l\BT@go@@l
+\let\BT@go@r@r\BT@go@@r
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BT@go@l@}
+% \begin{macro}{\BT@go@r@}
+% Current move is empty---set the style for the current child.
+% \begin{macrocode}
+\def\BT@go@l@{\BT@stay@here{l}}
+\def\BT@go@r@{\BT@stay@here{r}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\BT@go@r@l}
+% \begin{macro}{\BT@go@l@r}
+% Changed direction---continue previous path until the top of the tree (if configured this way) and then do requested move.
+% \begin{macrocode}
+\def\BT@go@r@l{\BT@turn{r}{l}}
+\def\BT@go@l@r{\BT@turn{l}{r}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \hrule
+%
+% \begin{macro}{\BT@continue}
+% \nsig{previous move}\nargs*{2}{6}{same as \ttup{\#1}--\ttup{5} from above}
+% \begin{macrocode}
+\def\BT@continue#1#2#3#4#5#6{%
+ \BT@if{BT@label@every@edge}{%
+ \BT@set@next@style{#2}{#3}{#4}{#5}{#6}#1#1c}{%
+ \BT@set@next@style{#2}{#3}{}{#5}{}#1#1c}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BT@turn}
+% Save |\BT@bbox@current@x| and restore it later. |\@tempdimb| is only used when setting a labelled final child, so it will not be used here\par
+% \nargs{1}{2}{previous and next moves}\nargs*{3}{7}{same as \ttup{\#1}--\ttup{5} from above}
+% \begin{macrocode}
+\def\BT@turn#1#2#3#4#5#6#7{%
+ \BT@if{BT@continue@after@turn}{%
+ \@tempdimb=\BT@bbox@current@x\relax%
+ \BT@if{BT@default@color@after@turn}{%
+ \BT@set@next@style{#3}{#4}{}{}{#7}#1c\@nil}{%
+ \BT@set@next@style{#3}{#4}{}{#6}{#7}#1c\@nil}%
+ \BT@bbox@current@x=\@tempdimb\relax}{}%
+ \BT@go@l@or@r{#2}{#3}{#4}{#5}{#6}{#7}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@stay@here}
+% \nsig{previous move}\nargs*{2}{6}{same as \ttup{\#1}--\ttup{5} from above}
+% \begin{macrocode}
+\def\BT@stay@here#1#2#3#4#5#6{%
+ \BT@set@child@style{#1}{#2}{#3}{#4}{#5}{#6}%
+ \BT@if{BT@label@every@edge}{%
+ \BT@set@next@style{#2}{#3}{#4}{#5}{#6}#1}{%
+ \BT@set@next@style{#2}{#3}{}{#5}{}#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@go@l@or@r}
+% \nsig{current move}\nargs*{2}{6}{same as \ttup{\#1}--\ttup{5} from above}
+% \begin{macrocode}
+\def\BT@go@l@or@r#1#2#3#4#5#6{%
+ \BT@set@child@style{#1}{#2#1@}{#3+1}{#4}{#5}{#6}%
+ \BT@if{BT@label@every@edge}{%
+ \BT@set@next@style{#2#1@}{#3+1}{#4}{#5}{#6}#1}{%
+ \BT@set@next@style{#2#1@}{#3+1}{}{#5}{}#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \rule{\textwidth}{1.5pt}
+% \begin{macro}{\BT@set@root@style}
+% Set the |\BT@root@width| and |\BT@root@height| lengths as well as a style named |@| under (\BTkey{/tikz/binary tree}).\par
+% \nsig{label,edge color,label anchor}
+% \begin{macrocode}
+\def\BT@set@root@style#1#2#3{%
+ \BT@set@to@width\BT@root@width{\pgfinterruptpicture%
+ \BT@wrap@label{#1}\endpgfinterruptpicture}%
+ \BT@set@to@total@height\BT@root@height{\pgfinterruptpicture%
+ \BT@wrap@label{#1}\endpgfinterruptpicture}%
+ \BT@set@root@style@i{@}{\BT@wrap@label{#1}}{\BT@color@or@default{#2}}{#3}}
+% \end{macrocode}
+% \end{macro}
+% The signature of the following macros is:\par
+% \nargs{1}{3}{side, name and depth of child}\nsig[3]{label,edge color,label anchor}
+% \begin{macro}{\BT@set@child@style}
+% Set the style for a child (either intermediate or final). Check if it is the first visited child on this level and if so---increase the height of the bounding box. Also check if it is an outer child and if it is the first time we are setting the style, increase the width of the box on its side. Call the relevant macro to actually set the style.
+% \begin{macrocode}
+\def\BT@set@child@style#1#2#3#4#5#6{%
+ \BT@check@if@new@level{#3}%
+ \csname BT@#1@xshift\endcsname{#3}%
+ \csname BT@update@bbox@#1@width\endcsname%
+ \BT@if@blank{#4}{\BT@if@blank{#5}{%
+ \BT@set@default@if@missing{#2}}{%
+ \BT@set@empty@style{#2}{\BT@color@or@default{#5}}}}{%
+ \ifnum\numexpr#3\relax = \numexpr\BT@max@depth\relax%
+ \BT@set@final@style{#1}{#2}{#3}{#4}{#5}{#6}%
+ \else\BT@set@inter@style{#1}{#2}{#3}{#4}{#5}{#6}\fi}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@set@inter@style}
+% Set the child for a left or right intermediate child---simply call the relevant macro.
+% \begin{macrocode}
+\def\BT@set@inter@style#1#2#3#4#5#6{%
+ \csname BT@set@inter@style@#1\endcsname{#2}{%
+ \BT@wrap@label{#4}}{\BT@color@or@default{#5}}{#6}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@set@final@style}
+% Set the style for a final child---save the size of its label (if needed) first.
+% \begin{macrocode}
+\def\BT@set@final@style#1#2#3#4#5#6{%
+ \BT@save@final@child@size{#1}{#2}{\BT@wrap@label{#4}}%
+ \BT@set@final@style@i{#2}{%
+ \BT@wrap@label{#4}}{\BT@color@or@default{#5}}{#6}}
+% \end{macrocode}
+% \end{macro}
+%
+% \hrule
+% \begin{macro}{\BT@set@root@style@i}
+% \begin{macro}{\BT@set@inter@style@l}
+% \begin{macro}{\BT@set@inter@style@r}
+% \begin{macro}{\BT@set@final@style@i}
+% The following macros set the \TikZ style and define the macro |\|\meta{child name}| styled|.\par
+% \nsig{name,label,color,anchor}
+% \begin{macrocode}
+\def\BT@set@root@style@i#1#2#3#4{%
+ \BT@message{setting style (#2, #3,
+ \BT@anchor@or@default{#4}{root}) for root}%
+ \ifcsname#1 styled\endcsname\else\csname#1 styled\expandafter\endcsname\fi%
+ \tikzset{binary tree/#1/.style={binary tree/root={#2}{%
+ \BT@anchor@or@default{#4}{root}}{#3}}}}
+\def\BT@set@inter@style@l#1#2#3#4{%
+ \BT@message{setting style (#2, #3,
+ \BT@anchor@or@default{#4}{left}) for left child #1}%
+ \ifcsname#1 styled\endcsname\else\csname#1 styled\expandafter\endcsname\fi%
+ \tikzset{binary tree/#1/.style={binary tree/child={#2}{%
+ \BT@anchor@or@default{#4}{left}}{#3}}}}
+\def\BT@set@inter@style@r#1#2#3#4{%
+ \BT@message{setting style (#2, #3,
+ \BT@anchor@or@default{#4}{right}) for right child #1}%
+ \ifcsname#1 styled\endcsname\else\csname#1 styled\expandafter\endcsname\fi%
+ \tikzset{binary tree/#1/.style={binary tree/child={#2}{%
+ \BT@anchor@or@default{#4}{right}}{#3}}}}
+\def\BT@set@final@style@i#1#2#3#4{%
+ \BT@message{setting style (#2, #3,
+ \BT@anchor@or@default{#4}{final}) for final child #1}%
+ \ifcsname#1 styled\endcsname\else\csname#1 styled\expandafter\endcsname\fi%
+ \tikzset{binary tree/#1/.style={binary tree/final child={#2}{%
+ \BT@anchor@or@default{#4}{final}}{#3}}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\BT@set@empty@style}
+% An unlabelled child---simply color the edge.\par
+% \nsig{name,color}
+% \begin{macrocode}
+\def\BT@set@empty@style#1#2{%
+ \BT@message{setting empty style (#2) for child #1}%
+ \ifcsname#1 styled\endcsname\else\csname#1 styled\expandafter\endcsname\fi%
+ \tikzset{binary tree/#1/.style={binary tree/empty={#2}}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@set@default@if@missing}
+% Set a default style (used if the neither label nor color is given and we have not set this style before).\par
+% \nsig{name}
+% \begin{macrocode}
+\def\BT@set@default@if@missing#1{%
+ \BT@message{setting default style for child #1}%
+ \ifcsname#1 styled\endcsname\else%
+ \tikzset{binary tree/#1/.style={binary tree/empty={BT@default}}}%
+ \csname#1 styled\expandafter\endcsname\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Macros for generating the file name}
+%
+% \begin{macro}{\BT@file@name@init}
+% Set the first part of the file name according to the global style.
+% \begin{macrocode}
+\def\BT@file@name@init{%
+ \BT@extract@rgb@color@specs{BT@default}{\@@tmp}%
+ \edef\BT@file@name{%
+ btree-\the\numexpr\BT@max@depth\relax% prefix and depth
+ _\BT@grow@direction% grow direction
+ \ifBT@root@edge _edge\fi% root edge?
+ _\@@tmp% default color
+ _\number\BT@level@distance% level distance in sp
+ \ifBT@level@distance@scales%
+ -scaled\fi% level distance scales
+ _\number\BT@sibling@distance% sibling distance in sp
+ \ifBT@sibling@distance@scales%
+ -scaled\fi% sibling distance scales
+ _\number\BT@label@distance% label distance in sp
+ _\BT@xscale% x-scale
+ _\BT@yscale}}% y-scale
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@file@name@new@path}
+% When starting a new path, append a |_| to the filename.
+% \begin{macrocode}
+\def\BT@file@name@new@path{\BT@eapp@to@hook\BT@file@name{_}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@file@name@append@style}
+% When setting the style for a new subpath, append the style for it.\par
+% \nsig{path,label,color,anchor}
+% \begin{macrocode}
+\def\BT@file@name@append@style#1#2#3#4{%
+ \BT@if@blank{#3}{\def\@@tmp{}}{%
+ \BT@extract@rgb@color@specs{#3}{\@@tmp}}%
+ \BT@eapp@to@hook\BT@file@name{%
+ -#1% subpath
+ -\BT@if@blank{#2}{}{% label
+ \ifBT@math@labels MATH\else#2\fi}%
+ -#4% anchor
+ -\@@tmp}}% color
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@file@name@set}
+% If a file name is already set (by the \BTkey{external/file name} or via direct call to |\tikzsetnextfilename|), do not do anything, otherwise---set the file name for the next figure if \BTkey{external/use automatic file name} is |true|.
+% \begin{macrocode}
+\def\BT@file@name@set{%
+ \ifBT@auto@file@name%
+ \if\relax\detokenize\expandafter{\tikzexternal@nextfile}\relax%
+ \expandafter\tikzsetnextfilename\expandafter{\BT@file@name}\fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Drawing the tree}
+%
+% \begin{macro}{\BT@draw@tree@children}
+% Enter a recursive for loop for |\BT@max@depth| levels. On the first call |#2 == 0|; the first |\BT@max@depth| children to be drawn are the rightmost ones. Then, the top of the tree is reached and we do not recurse another time here. The macro exits and is back into the previous call, where |#2 == \BT@max@depth - 1|. It then calls itself again to draw the left sibling of the rightmost final child; |##2 == \BT@max@depth| again, so it only sets the style and exits. It is back into the parent call (|##2 == \BT@max@depth - 1|) with nothing else to do---exit. Back into the parent call (|##2 == \BT@max@depth - 2|), it draws the left sibling of the rightmost child on level |\BT@max@depth - 1|, then its right child, \emph{its} left child and so on\ldots\par
+% \nargs{1}{2}{name and depth of \textbf{parent}}
+% \begin{macrocode}
+\def\BT@draw@tree@children#1#2{%
+ \ifnum\numexpr#2\relax = \numexpr\BT@max@depth\relax\else%
+ child[\ifcsname#1r@ styled\endcsname binary tree/#1r@\else%
+ binary tree/default\fi] {node (btree\BT@at@to@dash{#1r@}) {}% right
+ \BT@draw@tree@children{#1r@}{#2+1} }%
+ child[\ifcsname#1l@ styled\endcsname binary tree/#1l@\else%
+ binary tree/default\fi] {node (btree\BT@at@to@dash{#1l@}) {}% left
+ \BT@draw@tree@children{#1l@}{#2+1} }\fi}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\BT@draw@tree}
+% Draw the whole path---before we do that, adjust the sizes of the bounding box. If we are adding a single edge to the root, we need to add a level distance to the height before adjustment. Expansion of |\BT@draw@tree@children| after |\node| does not work, so we expand the whole path before inserting it. Clip, draw the frame (if requested) and insert the path.
+% \begin{macrocode}
+\def\BT@draw@tree{%
+ \ifBT@root@edge%
+ \advance\BT@bbox@height\BT@level@distance\relax%
+ \BT@adjust@bbox@sides%
+ \edef\BT@tree{%
+ \noexpand\node[\ifcsname @ styled\endcsname binary tree/@\fi] (btree-root) {}%
+ child[\ifcsname @ styled\endcsname binary tree/@\fi] {%
+ node {} \BT@draw@tree@children{@}{\BT@root@depth}}}%
+ \clip (-\BT@bbox@l@width,-\BT@bbox@depth)%
+ rectangle (\BT@bbox@r@width,\BT@bbox@height);%
+ \ifBT@framed\draw (current bounding box.south west)%
+ rectangle (current bounding box.north east);\fi%
+ \BT@tree;%
+ \else\BT@adjust@bbox@sides%
+ \edef\BT@tree{%
+ \noexpand\node[\ifcsname @ styled\endcsname binary tree/@\fi] (btree-root) {}%
+ \BT@draw@tree@children{@}{\BT@root@depth}}%
+ \clip (-\BT@bbox@l@width,-\BT@bbox@depth)%
+ rectangle (\BT@bbox@r@width,\BT@bbox@height);%
+ \ifBT@framed\draw (current bounding box.south west)%
+ rectangle (current bounding box.north east);\fi%
+ \BT@tree;%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \hrule
+% \begin{macro}{\BinaryTree}
+% \changes{1.01}{2016/07/25}{Each node is now uniquely named.}
+% \begin{macro}{\@BinaryTree}
+% \begin{macro}{\BT@max@depth}
+% \begin{macro}{\BT@root@depth}
+% |\BinaryTree| is the user interface. It resets the lengths, sets the keys, defines |\BT@max@depth| and |\BT@root@depth|, initializes the file name, sets the styles; if needed, enables externalization and sets the \BTkey{/tikz/binary tree/externalize} style; draws the tree in either a |tikzpicture| or a |scope| environment, applying the \BTkey{/tikz/binary tree} style. Everything is done inside a group.\par
+% \nsig{local options,path specification,tree depth}
+% \begin{macrocode}
+\def\BinaryTree{\@ifnextchar[\@BinaryTree{\@BinaryTree[]}}
+\def\@BinaryTree[#1]#2#3{%
+ \begingroup%
+ \BT@bbox@r@width=\z@\relax%
+ \BT@bbox@l@width=\z@\relax%
+ \BT@bbox@height=\z@\relax%
+ \BT@bbox@depth=\z@\relax%
+ \BT@root@width=\z@\relax%
+ \BT@root@height=\z@\relax%
+ \BT@max@final@width=\z@\relax%
+ \BT@max@final@height=\z@\relax%
+ \BT@l@final@width=\z@\relax%
+ \BT@l@final@height=\z@\relax%
+ \BT@r@final@width=\z@\relax%
+ \BT@r@final@height=\z@\relax%
+ \pgfqkeys{/BT}{#1}%
+ \ifBT@root@edge\def\BT@max@depth{#3+1}\def\BT@root@depth{1}%
+ \else\def\BT@max@depth{#3}\def\BT@root@depth{0}\fi%
+ \BT@set@min@bbox@size%
+ \BT@file@name@init%
+ \BT@process@next@path#2,\@nil,%
+ \ifBT@separate\ifBT@external%
+ \tikzset{binary tree/externalize}\BT@file@name@set\fi%
+ \begin{tikzpicture}[binary tree]%
+ \BT@draw@tree%
+ \end{tikzpicture}%
+ \else\begin{scope}[binary tree]%
+ \BT@draw@tree%
+ \end{scope}\fi%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \Finale
+\endinput
diff --git a/graphics/pgf/contrib/binarytree/binarytree.ins b/graphics/pgf/contrib/binarytree/binarytree.ins
new file mode 100644
index 0000000000..73e3e5ae83
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/binarytree.ins
@@ -0,0 +1,55 @@
+%%
+%% Copyright (C) 2016 by Aleksandrina Nikolova
+%% <aayla.secura.1138@gmail.comaayla.secura.1138@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/binarytree}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2016 by Aleksandrina Nikolova
+<aayla.secura.1138@gmail.comaayla.secura.1138@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 of this license or (at your option) any later
+version. The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+\endpreamble
+
+\generate{\file{binarytree.sty}{\from{binarytree.dtx}{package}}}
+
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space binarytree.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file binarytree.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+
+\endbatchfile
diff --git a/graphics/pgf/contrib/binarytree/binarytree.pdf b/graphics/pgf/contrib/binarytree/binarytree.pdf
new file mode 100644
index 0000000000..6b571ca64f
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/binarytree.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex1.pdf b/graphics/pgf/contrib/binarytree/examples/binarytree-ex1.pdf
new file mode 100644
index 0000000000..3c1a5a66b1
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex1.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex1.tex b/graphics/pgf/contrib/binarytree/examples/binarytree-ex1.tex
new file mode 100644
index 0000000000..64a1bf3dc3
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex1.tex
@@ -0,0 +1,16 @@
+\documentclass{standalone}
+\usepackage{binarytree}
+\usetikzlibrary{graphs}
+
+\begin{document}
+\btreeset{math labels,scale=0.7}
+\begin{tikzpicture}
+ \BinaryTree[local bounding box=INIT]{%
+ :1!l:w!r:x:red!l:\sigma,ll!l:\sigma,lr!r:\sigma,
+ r:w!r:y!r:\sigma,rr!l:\sigma,rl!l:\sigma}{3}
+ \BinaryTree[local bounding box=FINAL,xshift=10cm]{
+ :1!l:w!l:x':red!l:\sigma,lr!r:\sigma,ll!r:\sigma,
+ r:w!r:y!r:\sigma,rr!l:\sigma,rl!l:\sigma}{3}
+ \graph[use existing nodes]{ INIT -> FINAL};
+\end{tikzpicture}
+\end{document}
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex2.pdf b/graphics/pgf/contrib/binarytree/examples/binarytree-ex2.pdf
new file mode 100644
index 0000000000..9fd73188e9
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex2.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex2.tex b/graphics/pgf/contrib/binarytree/examples/binarytree-ex2.tex
new file mode 100644
index 0000000000..4c7b07fd49
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex2.tex
@@ -0,0 +1,22 @@
+\documentclass{standalone}
+\usepackage{binarytree}
+
+\begin{document}
+\btreeset{%
+ draw missing,%
+ separate,%
+ level distance scales=false,%
+ sibling distance scales=false,%
+ scale=0.5}
+
+\def\arraystretch{1.5}
+\begin{tabular}{cc}
+ none scales & both scale \\
+ \BinaryTree{}{3} &
+ \BinaryTree[yscale=1.7,level distance scales,%
+ sibling distance scales]{}{3} \\
+ level distance scales & sibling distance scales \\
+ \BinaryTree[yscale=1.7,level distance scales]{r}{3} &
+ \BinaryTree[sibling distance scales]{}{3}
+\end{tabular}
+\end{document}
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex3.pdf b/graphics/pgf/contrib/binarytree/examples/binarytree-ex3.pdf
new file mode 100644
index 0000000000..be99a5d524
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex3.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex3.tex b/graphics/pgf/contrib/binarytree/examples/binarytree-ex3.tex
new file mode 100644
index 0000000000..8d8d765cb9
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex3.tex
@@ -0,0 +1,16 @@
+\documentclass{standalone}
+\usepackage{binarytree}
+
+\begin{document}
+\btreeset{%
+ math labels,%
+ separate,%
+ level distance scales=false,%
+ sibling distance scales=false,%
+ continue after turn=false,%
+ continue at path end=false,%
+ left label anchor=center,%
+ right label anchor=center}
+
+\BinaryTree{l:\nwarrow!r:\nearrow,r:\nearrow!l:\nwarrow}{3}
+\end{document}
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex4.pdf b/graphics/pgf/contrib/binarytree/examples/binarytree-ex4.pdf
new file mode 100644
index 0000000000..b2ab7873ac
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex4.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/binarytree/examples/binarytree-ex4.tex b/graphics/pgf/contrib/binarytree/examples/binarytree-ex4.tex
new file mode 100644
index 0000000000..77ed55bb5e
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/binarytree-ex4.tex
@@ -0,0 +1,28 @@
+\documentclass{standalone}
+\usepackage{binarytree}
+\usetikzlibrary{external}
+\tikzexternalize
+\tikzexternaldisable
+
+\begin{document}
+\btreesetexternal{%
+ use automatic file name,%
+ mode=list and make}
+\btreeset{%
+ top padding=0pt,%
+ left padding=0pt,%
+ right padding=0pt,%
+ bottom padding=0pt,%
+ external=false,separate=true,%
+ label on every edge,%
+ left label anchor=center,%
+ right label anchor=center,%
+ continue after turn=false,%
+ continue at path end=false,%
+ level distance scales=false,%
+ sibling distance scales=false,%
+ scale=0.7}
+
+\BinaryTree{lrr:x,llrr:x,rll:x,rrll:x}{5}%
+\BinaryTree{lrr:x,llrr:x,rll:x,rrll:x}{5}
+\end{document}
diff --git a/graphics/pgf/contrib/binarytree/examples/btree-5_up_0,0,0_3729359_7458719_655360_0.7_0.7_-lrr-x--_-llrr-x--_-rll-x--_-rrll-x--.pdf b/graphics/pgf/contrib/binarytree/examples/btree-5_up_0,0,0_3729359_7458719_655360_0.7_0.7_-lrr-x--_-llrr-x--_-rll-x--_-rrll-x--.pdf
new file mode 100644
index 0000000000..b29870f464
--- /dev/null
+++ b/graphics/pgf/contrib/binarytree/examples/btree-5_up_0,0,0_3729359_7458719_655360_0.7_0.7_-lrr-x--_-llrr-x--_-rll-x--_-rrll-x--.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/blochsphere/LICENSE b/graphics/pgf/contrib/blochsphere/LICENSE
new file mode 100644
index 0000000000..9566bc7ca8
--- /dev/null
+++ b/graphics/pgf/contrib/blochsphere/LICENSE
@@ -0,0 +1,417 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
+
diff --git a/graphics/pgf/contrib/blochsphere/README.md b/graphics/pgf/contrib/blochsphere/README.md
new file mode 100644
index 0000000000..d49a6cf439
--- /dev/null
+++ b/graphics/pgf/contrib/blochsphere/README.md
@@ -0,0 +1,6 @@
+latex-blochsphere
+=================
+
+A LaTeX package which allows for simple drawing of axonometric projections of Bloch spheres.
+
+Refer to `blochsphere.pdf` for more information.
diff --git a/graphics/pgf/contrib/blochsphere/blochsphere.dtx b/graphics/pgf/contrib/blochsphere/blochsphere.dtx
new file mode 100644
index 0000000000..1f24d40c00
--- /dev/null
+++ b/graphics/pgf/contrib/blochsphere/blochsphere.dtx
@@ -0,0 +1,854 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2015 by Matthew Wardrop <mister.wardrop@gmail.com>
+% ---------------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Matthew Wardrop
+%
+% This work consists of the files blochsphere.dtx and blochsphere.ins
+% and the derived filebase blochsphere.sty.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{blochsphere.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{blochsphere}
+%<*package>
+ [2015/09/15 v1.1 blochsphere drawing package]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\usepackage{blochsphere}
+\usepackage{minted}
+\usepackage{hyperref}
+
+\setlength{\parskip}{0.7em}
+
+\newenvironment{key}[2]{
+ \noindent{\llap{Option: \bf\tt #2\hskip 9pt}}
+}{}
+\newcommand{\DescribeKey}[3][]{
+ \noindent{\llap{\bf\tt #2\hskip 9pt}[default = #1] #3}
+}
+
+\usepackage{listings}
+\lstset{breaklines=true}
+
+\begin{document}
+ \DocInput{blochsphere.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{841}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.1}{2015/09/15}{Fix \\drawAxis using removed keyval "mark"}
+% \changes{v1.0}{2015/08/17}{Initial version}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{blochsphere.dtx}
+% \title{The \textsf{blochsphere} package}
+% \author{Matthew Wardrop \\ \url{mister.wardrop@gmail.com}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% The |blochsphere| package is used to draw pseudo-3D Blochsphere diagrams, such as that
+% shown in figure \ref{fig:blochsphere}. It supports various annotations, such as
+% great and small circles, axes, rotation markings and state vectors. It can be used
+% in a standalone fashion, or nested within a |tikzpicture| environment by setting
+% the environment option |nested| to |true|.
+%
+% \section{Usage}
+%
+% Using |blochsphere| is as simple as creating a `blochsphere' environment.
+% \begin{minted}{LaTeX}
+% \begin{blochsphere}[<options>]
+% ...
+% \end{blochsphere}
+% \end{minted}
+% By default, this will create a blank Bloch sphere ready for annotation. The options can be
+% any of those described in the next section.
+%
+% \noindent\DescribeMacro{\drawBall} \oarg{options}\\
+% This macro draws the basic Bloch sphere, according to the options defined in the next section.
+%
+% \noindent\DescribeMacro{\drawBallGrid} \oarg{options} \marg{latdegsep} \marg{longdegsep}\\
+% This macro draws latitude and longitude circles at an interval defined by |latdegsep| and |longdegsep| respectively.
+%
+% \noindent\DescribeMacro{\setDrawingPlane} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% This macro defines a transformation matrix within TikZ to create the effect of 2D projections of 3D planes,
+% named according to the |plane| option. This is used internally in all of the drawing commands.
+%
+% \noindent\DescribeMacro{\setLatitudinalDrawingPlane} \oarg{options} \marg{latitude}\\
+% This is a special case of |\setDrawingPlane| that constructs the transform required to draw a 2D image in
+% a latitudinal plane.
+%
+% \noindent\DescribeMacro{\setLongitudinalDrawingPlane} \oarg{options} \marg{longitude}\\
+% This is a special case of |\setDrawingPlane| that constructs the transform required to draw a 2D image in
+% a longitudinal plane.
+%
+% \noindent\DescribeMacro{\drawCircle} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% Draws a circle on the surface of a Bloch sphere around the axis which is tilted by |tiltangle|
+% from the z-axis and with a rotation of |rotationangle| about the z-axis.
+%
+% \noindent\DescribeMacro{\drawGreatCircle} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% An alias of |\drawCircle|.
+%
+% \noindent\DescribeMacro{\drawSmallCircle} \oarg{options} \marg{tiltangle} \marg{rotationangle} \marg{offsetLatitude}\\
+% Draws a circle on the surface of a Bloch sphere around the axis which is tilted by |tiltangle|
+% from the z-axis and with a rotation of |rotationangle| about the z-axis, with an offset along the axis
+% such that it reaches an effective latitude of |offsetLatitude|.
+%
+% \noindent\DescribeMacro{\drawLatitudeCircle} \oarg{options} \marg{latitude}\\
+% Draws a circle on the Bloch sphere corresponding to the given latitude.
+%
+% \noindent\DescribeMacro{\drawLongitudeCircle} \oarg{options} \marg{longitude}\\
+% Draws a great circle on the Bloch sphere corresponding to the given longitude.
+%
+% \noindent\DescribeMacro{\drawRotationLeft} \oarg{options} \marg{tiltangle} \marg{rotationangle} \marg{axisoffset} \marg{clearangle}\\
+% Draw a left-handed rotation about the Bloch sphere, titled and rotated as for a circle
+% with the same parameters, with a gap in the line where the arrow should go of
+% |clearangle| degrees.
+%
+% \noindent\DescribeMacro{\drawRotationRight} \oarg{options} \marg{tiltangle} \marg{rotationangle} \marg{axisoffset} \marg{clearangle}\\
+% As above, but a right-handed rotation annotation.
+%
+% \noindent\DescribeMacro{\drawAxis} \oarg{options} \marg{tiltangle} \marg{rotationangle}\\
+% Draw a line along the axis tilted |tiltangle| degrees from the z-axis, rotated about
+% the z-axis by |rotationangle| degrees.
+%
+% \noindent\DescribeMacro{\labelPolar} \oarg{options} \marg{tikzlabel} \marg{tiltangle} \marg{rotationangle}\\
+% Assign a tikz label to the point identified by an angle |tiltangle| from the z-axis
+% and a rotation |rotationangle| about the z-axis.
+%
+% \noindent\DescribeMacro{\labelLatLon} \oarg{options} \marg{tikzlabel} \marg{latitude} \marg{longitude}\\
+% Assign a tikz label to the point identified the specified latitude and longitude.
+%
+% \noindent\DescribeMacro{\drawStatePolar} \oarg{options} \marg{tikzlabel} \marg{tiltangle} \marg{rotationangle}\\
+% Draw a vector from the origin to the point identified by an angle |tiltangle|
+% from the z-axis and a rotation |rotationangle| about the z-axis, which will
+% be labelled |tikzlabel|.
+%
+% \noindent\DescribeMacro{\drawStateLatLon} \oarg{options} \marg{tikzlabel} \marg{latitude} \marg{longitude}\\
+% Draw a vector from the origin to the point identified by the provided
+% latitude and longitude, which will be labelled |tikzlabel|.
+%
+%
+% \section{Package, Environment and Macro options}
+% For convenience, all options at all levels share the same namespace. Therefore, all
+% options passed to the package will be the defaults for all environment, which will
+% in turn be the defaults for all subsequent macro calls.
+%
+%
+% \DescribeKey[1.5cm]{radius}
+% {This option controls the radius of the qubit, and can be specified in any valid \LaTeX units.}
+%
+%
+% \DescribeKey[15]{tilt}{This option controls the tilt (into the page) of the top of the bloch sphere (in degrees).}
+%
+%
+% \DescribeKey[-20]{rotation}{This option controls the (right-handed) rotation of the Blochsphere around the (potentially tilted) z-axis, also specified in degrees.}
+%
+%
+% \DescribeKey[white]{color}{This specifies the colour of the drawn ball.}
+%
+%
+% \DescribeKey[0.7]{opacity}{This option controls the opacity of the ball, allowing lines drawn behind the ball to be visible.}
+%
+%
+% \DescribeKey[]{style}{This option controls the current drawing style, and supports any valid tikz styling.}
+%
+%
+% \DescribeKey[1]{scale}{This option allows one to temporarily change the scale of drawn circles/etc, allowing annotations to ``hover'' over the Bloch sphere.}
+%
+%
+% \DescribeKey[current plane]{plane}{The name which should label the current plane being defined, or the plane to be used.}
+%
+%
+% \DescribeKey[(0,0,0)]{shift}{The three dimensional offset by which the currently being drawn objects should be shifted.}
+%
+%
+% \DescribeKey[3d]{ball}{Specifies how the ball should be drawn. Options are: {\tt 3d}, {\tt circle}, {\tt none}}
+%
+%
+% \DescribeKey[black]{statecolor}{The color with which the state vectors should be drawn.}
+%
+%
+% \DescribeKey[0.4pt]{statewidth}{The width with which state vectors should be drawn.}
+%
+%
+% \DescribeKey[]{axisarrow}{The arrow to use at the end of a drawn axis.}
+%
+%
+% \DescribeKey[false]{labelmark}{Whether a black dot should be drawn at the point being labelled.}
+%
+%
+% \DescribeKey[false]{nested}{Whether the {\tt blochsphere} environment is being nested in a |tikzpicture| environment. If it is nested, then this should be set to true.}
+%
+%
+% \section{Example}
+% In this section we provide example code to generate the following diagram:
+%
+% \begin{figure}[h!]
+% \begin{center}
+% \includegraphics{example.pdf}
+% \end{center}
+% \caption{Example Bloch Sphere \label{fig:blochsphere}}
+% \end{figure}
+%
+% \newminted{latex}{gobble=2,linenos}
+% \begin{latexcode}
+% \begin{blochsphere}[radius=1.5 cm,tilt=15,rotation=-20]
+% \drawBallGrid[style={opacity=0.3}]{30}{30}
+%
+% \drawGreatCircle[style={dashed}]{-60}{0}{0}
+% \drawGreatCircle[style={dashed}]{60}{0}{0}
+%
+% \drawRotationLeft[scale=1.3,style={red}]{-60}{0}{0}{15}
+% \drawRotationRight[scale=1.3,style={red}]{60}{0}{0}{15}
+%
+% \node at (-0.8,1.9) {\textcolor{red}{\tiny $J_{12}(t)$}};
+% \node at (1.1,1.8) {\textcolor{red}{\tiny $J_{23}(t)$}};
+%
+% \labelLatLon{up}{90}{0};
+% \labelLatLon{down}{-90}{90};
+% \node[above] at (up) {{\tiny $\left|1\right>$ }};
+% \node[below] at (down) {{\tiny $\left|0\right>$}};
+%
+% \labelLatLon[labelmark=false]{d}{15}{90};
+% \node at (d) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+%
+% \labelLatLon[labelmark=falsa]{d2}{5}{78};
+% \node at (d2) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+% \end{blochsphere}
+% \end{latexcode}
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+% \subsection{Preamble}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{blochsphere}[2015/08/17]
+% \end{macrocode}
+% \iffalse
+%% \usepackage{trace}
+%%\tracingall
+% \fi
+%
+% \begin{macrocode}
+\usepackage{tikz,etoolbox,environ,ifthen,kvsetkeys,kvoptions}
+\usetikzlibrary{decorations.pathreplacing, decorations.markings, calc, fadings}
+% \end{macrocode}
+%
+% \subsection{Package/Environment/Macro options}
+%
+% \begin{key}{blochsphere}{radius}
+% \begin{macrocode}
+\define@key{blochsphere}{radius}{%
+ \def\blochsphere@radius{#1}%
+}
+\providecommand{\blochsphere@radius}{1cm}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{tilt}
+% \begin{macrocode}
+\define@key{blochsphere}{tilt}{%
+ \def\blochsphere@tilt{#1}%
+}
+\providecommand{\blochsphere@tilt}{15}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{rotation}
+% \begin{macrocode}
+\define@key{blochsphere}{rotation}{%
+ \def\blochsphere@rotation{#1}%
+}
+\providecommand{\blochsphere@rotation}{-20}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{color}
+% \begin{macrocode}
+\define@key{blochsphere}{color}{%
+ \def\blochsphere@color{#1}%
+}
+\providecommand{\blochsphere@color}{white}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{opacity}
+% \begin{macrocode}
+\define@key{blochsphere}{opacity}{%
+ \def\blochsphere@opacity{#1}%
+}
+\providecommand{\blochsphere@opacity}{0.7}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{style}
+% \begin{macrocode}
+\define@key{blochsphere}{style}{%
+ \def\blochsphere@style{#1}%
+}
+\providecommand{\blochsphere@style}{}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{scale}
+% \begin{macrocode}
+\define@key{blochsphere}{scale}{%
+ \def\blochsphere@scale{#1}%
+}
+\providecommand{\blochsphere@scale}{1}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{plane}
+% \begin{macrocode}
+\define@key{blochsphere}{plane}{%
+ \def\blochsphere@plane{#1}%
+}
+\providecommand{\blochsphere@plane}{current plane}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{shift}
+% \begin{macrocode}
+\define@key{blochsphere}{shift}{%
+ \def\blochsphere@shift{{#1}}%
+}
+\providecommand{\blochsphere@shift}{{0,0,0}}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{ball}
+% \begin{macrocode}
+\define@key{blochsphere}{ball}{%
+ \def\blochsphere@ball{#1}%
+}
+\providecommand{\blochsphere@ball}{3d}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{statecolor}
+% \begin{macrocode}
+\define@key{blochsphere}{statecolor}{%
+ \def\blochsphere@statecolor{#1}%
+}
+\providecommand{\blochsphere@statecolor}{black}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{statewidth}
+% \begin{macrocode}
+\define@key{blochsphere}{statewidth}{%
+ \def\blochsphere@statewidth{#1}%
+}
+\providecommand{\blochsphere@statewidth}{0.4pt}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{axisarrow}
+% \begin{macrocode}
+\define@key{blochsphere}{axisarrow}{%
+ \def\blochsphere@axisarrow{#1}%
+}
+\providecommand{\blochsphere@axisarrow}{}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{labelmark}
+% \begin{macrocode}
+\define@key{blochsphere}{labelmark}{%
+ \setboolean{blochsphere@labelmark}{#1}%
+}
+\newboolean{blochsphere@labelmark}
+\setboolean{blochsphere@labelmark}{false}
+% \end{macrocode}
+% \end{key}
+%
+%
+% \begin{key}{blochsphere}{nested}
+% \begin{macrocode}
+\define@key{blochsphere}{nested}{%
+ \setboolean{blochsphere@nested}{#1}%
+}
+\newboolean{blochsphere@nested}
+\setboolean{blochsphere@nested}{false}
+% \end{macrocode}
+% \end{key}
+% \begin{macrocode}
+\ProcessKeyvalOptions{blochsphere}\relax
+% \end{macrocode}
+%
+% \subsection{{\bfseries\tt blochsphere} Environment}
+% This is the central environment definition. Note that all macros defined
+% below will only be defined within this environment.
+%
+% \begin{environment}{blochsphere}
+% \begin{macrocode}
+\newenvironment{blochsphere}[1][]{
+ \begingroup
+ \makeatletter
+ \ignorespaces\setkeys{blochsphere}{#1}\unskip%
+ \pgfdeclarelayer{back}%
+ \pgfdeclarelayer{front}%
+ \pgfsetlayers{back,main,front}%
+ \pgfkeys{%
+ /tikz/on layer/.code={%
+ \pgfonlayer{##1}\begingroup%
+ \aftergroup\endpgfonlayer%
+ \aftergroup\endgroup%
+ },%
+ /tikz/node on layer/.code={%
+ \gdef\node@@on@layer{%
+ \setbox\tikz@tempbox=\hbox\bgroup\pgfonlayer{##1}\unhbox\tikz@tempbox\endpgfonlayer\egroup}%
+ \aftergroup\node@on@layer%
+ },%
+ /tikz/end node on layer/.code={%
+ \endpgfonlayer\endgroup\endgroup%
+ }%
+ }%
+ \def\node@on@layer{\aftergroup\node@@on@layer}%
+% \end{macrocode}
+% \begin{macro}{\drawBall}
+% \begin{macrocode}
+ \newcommand\drawBall[1][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \expandafter\ifstrequal\expandafter{\blochsphere@ball}{3d}{
+ \fill[on layer=main,ball color=\blochsphere@color,opacity=\blochsphere@opacity] (0,0) circle (\blochsphere@radius); % 3D lighting effect
+ }{}
+ \expandafter\ifstrequal\expandafter{\blochsphere@ball}{circle}{
+ \draw[on layer=main,color=\blochsphere@color] (0,0) circle (\blochsphere@radius); % 3D lighting effect
+ }{}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawBallGrid}
+% \begin{macrocode}
+ \newcommand\drawBallGrid[3][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \foreach \phi in {0,##2,...,89} {
+ \drawLatitudeCircle{\phi}
+ \drawLatitudeCircle{-\phi}
+ }
+ \foreach \theta in {0,##3,...,179} {
+ \drawLongitudeCircle{\theta}
+ }
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setDrawingPlane}
+% \begin{macrocode}
+ \newcommand\setDrawingPlane[3][]{%
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\aphi{##2}
+ \pgfmathsetmacro\atheta{##3}
+ \pgfmathsetmacro\dot{cos(\aphi)}
+ \ifdim\dot pt<0.7 pt\relax%
+ \pgfmathsetmacro\norm{cos(asin(\dot))}
+ \pgfmathsetmacro\xx{-sin(\aphi)*sin(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\xy{sin(\aphi)*sin(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\yx{-sin(2*\aphi - \blochsphere@rotation + \atheta)/4 - sin(2*\aphi + \blochsphere@rotation - \atheta)/4}
+ \pgfmathsetmacro\yy{(sin(\aphi)*cos(\blochsphere@tilt) - sin(\blochsphere@tilt)*sin(\blochsphere@rotation - \atheta)*cos(\aphi))*sin(\aphi)}
+ \else
+ \pgfmathsetmacro\norm{sqrt(abs(sin(\blochsphere@rotation - \atheta)*cos(\aphi))^2 + abs(sin(\blochsphere@tilt)*cos(\aphi)*cos(\blochsphere@rotation - \atheta))^2 + abs(cos(\aphi)*cos(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta))^2)}
+ \pgfmathsetmacro\xx{-sin(\blochsphere@rotation - \atheta)*cos(\aphi)}
+ \pgfmathsetmacro\xy{sin(\blochsphere@tilt)*cos(\aphi)*cos(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\yx{-cos(\aphi)^2*cos(\blochsphere@rotation - \atheta)}
+ \pgfmathsetmacro\yy{(sin(\aphi)*cos(\blochsphere@tilt) - sin(\blochsphere@tilt)*sin(\blochsphere@rotation - \atheta)*cos(\aphi))*cos(\aphi)}
+ \fi
+ \computeOffset{shift}
+ \begingroup\newcommand\tmp[1]{\endgroup\noexpand\relax%
+ \tikzset{\blochsphere@plane/.style={cm={\xx/\norm, \xy/\norm, \yx/\norm, \yy/\norm, \unexpanded\expandafter{####1} }}}%
+ } \tmp{\shift}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setLatitudinalDrawingPlane}
+% \begin{macrocode}
+ \newcommand\setLatitudinalDrawingPlane[2][]{%
+ \pgfmathsetmacro\yshift{sin(##2)*\the\blochsphere@radius}
+ \setDrawingPlane[##1,shift={{0,0,\yshift}}]{0}{0}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setLatitudinalDrawingPlane}
+% \begin{macrocode}
+ \newcommand\setLongitudinalDrawingPlane[2][]{%
+ \setDrawingPlane[##1]{90}{##2}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawCircle}
+% \begin{macrocode}
+ \newcommand\drawCircle[3][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \setDrawingPlane{##2}{##3}
+ \computeVisibility{##2}{##3}{agamma}{abeta}
+ \begingroup\edef\tmp{\endgroup%
+ \noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius+\the\pgflinewidth*0.5)};
+ \noexpand\draw[current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta:\blochsphere@radius+\the\pgflinewidth*0.5) arc (\agamma+\abeta:\agamma-\abeta+360:\blochsphere@radius+\the\pgflinewidth*0.5)};
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawGreatCircle}
+% \begin{macrocode}
+ \newcommand\drawGreatCircle[3][]{
+ \drawCircle[##1]{##2}{##3}
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawSmallCircle}
+% \begin{macrocode}
+ \newcommand\drawSmallCircle[4][]{
+ \begingroup
+ \pgfmathsetmacro\xshift{sin(##2)*cos(##3)*\blochsphere@radius*sin(##4)}
+ \pgfmathsetmacro\yshift{sin(##2)*sin(##3)*\blochsphere@radius*sin(##4)}
+ \pgfmathsetmacro\zshift{cos(##2)*\blochsphere@radius*sin(##4)}
+ \pgfmathsetmacro\radius{\blochsphere@radius*cos(##4)}
+ \drawCircle[##1,shift={{\xshift,\yshift,\zshift}},radius=\radius]{##2}{##3}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawLatitudeCircle}
+% \begin{macrocode}
+ \newcommand\drawLatitudeCircle[2][]{
+ \begingroup
+ \pgfmathsetmacro\yshift{sin(##2)*\blochsphere@radius}
+ \pgfmathsetmacro\radius{\blochsphere@radius*cos(##2)}
+ \drawCircle[##1,shift={{0,0,\yshift}},radius=\radius]{0}{0}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawLongitudeCircle}
+% \begin{macrocode}
+ \newcommand\drawLongitudeCircle[2][]{
+ \begingroup
+ \drawCircle[##1]{90}{##2+90}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawRotationLeft}
+% \begin{macrocode}
+ \newcommand\drawRotationLeft[5][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\xshift{sin(##2)*cos(##3)*##4}
+ \pgfmathsetmacro\yshift{sin(##2)*sin(##3)*##4}
+ \pgfmathsetmacro\zshift{cos(##2)*##4}
+ \setDrawingPlane[shift={\xshift,\yshift,\zshift}]{##2}{##3}
+ \computeVisibility{##2}{##3}{agamma}{abeta}
+ \begingroup\edef\tmp{\endgroup%
+ \noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ \noexpand\draw[<-,current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta+##5:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma+\abeta+##5:\agamma-\abeta+360:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawRotationRight}
+% \begin{macrocode}
+ \newcommand\drawRotationRight[5][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\xshift{sin(##2)*cos(##3)*##4}
+ \pgfmathsetmacro\yshift{sin(##2)*sin(##3)*##4}
+ \pgfmathsetmacro\zshift{cos(##2)*##4}
+ \setDrawingPlane[shift={\xshift,\yshift,\zshift}]{##2}{##3}
+ \computeVisibility{##2}{##3}{agamma}{abeta}
+ \begingroup\edef\tmp{\endgroup%
+ \noexpand\draw[current plane,on layer=back,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma-\abeta-0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma-\abeta-0.2:\agamma+\abeta+0.2:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ \noexpand\draw[->,current plane,on layer=front,\unexpanded\expandafter{\blochsphere@style}] \unexpanded\expandafter{(\agamma+\abeta:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5) arc (\agamma+\abeta:\agamma-\abeta+360-##5:\blochsphere@radius*\blochsphere@scale+\the\pgflinewidth*0.5)};
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawAxis}
+% \begin{macrocode}
+ \newcommand\drawAxis[3][] {
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\behind{ifthenelse(-sin(##2)*sin(\blochsphere@rotation - ##3)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##2)<0, 1, 0)}
+ \pgfmathsetmacro\newphi{180-##2}
+ \pgfmathsetmacro\newtheta{##3+180}
+ \ifnum\behind=0\relax
+ \labelPolar[scale=1]{blochspheretmpp}{##2}{##3}
+ \labelPolar{blochspheretmps}{##2}{##3}
+ \labelPolar{blochspheretmpe}{\newphi}{\newtheta}
+ \else
+ \labelPolar[scale=1]{blochspheretmpp}{\newphi}{\newtheta}
+ \labelPolar{blochspheretmpe}{##2}{##3}
+ \labelPolar{blochspheretmps}{\newphi}{\newtheta}
+ \fi
+ \begingroup\edef\tmp{\endgroup%
+ \ifnum\behind=0\relax
+ \noexpand\draw[on layer=front,\unexpanded\expandafter{\blochsphere@style},\blochsphere@axisarrow] (blochspheretmpp) -- (blochspheretmps);
+ \noexpand\draw[on layer=back,\unexpanded\expandafter{\blochsphere@style}] (blochspheretmpe) -- (blochspheretmpp);
+ \else
+ \noexpand\draw[on layer=front,\unexpanded\expandafter{\blochsphere@style},\blochsphere@axisarrow] (blochspheretmpp) -- (blochspheretmpe);
+ \noexpand\draw[on layer=back,\unexpanded\expandafter{\blochsphere@style}] (blochspheretmps) -- (blochspheretmpp);
+ \fi
+ } \tmp
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\labelPolar}
+% \begin{macrocode}
+ \newcommand\labelPolar[4][]{%
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \setLongitudinalDrawingPlane{##4+90}
+ \pgfmathsetmacro\behind{ifthenelse(-sin(##3)*sin(\blochsphere@rotation - ##4)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##3)<0, 1, 0)}
+ \ifthenelse{\boolean{blochsphere@labelmark}}
+ {
+ \ifnum\behind=1\relax
+ \path[current plane,on layer=back] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate[mark coordinate] (##2); %
+ \else
+ \path[current plane,on layer=front] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate[mark coordinate] (##2); %
+ \fi
+ }
+ {
+ \ifnum\behind=1\relax
+ \path[current plane,on layer=back] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate (##2); %
+ \else
+ \path[current plane,on layer=front] (90-##3:\blochsphere@radius*\blochsphere@scale) coordinate (##2); %
+ \fi
+ }
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\labelLatLon}
+% \begin{macrocode}
+ \newcommand\labelLatLon[4][]{%
+ \begingroup
+ \pgfmathsetmacro\newphi{90-##3}
+ \labelPolar[##1]{##2}{\newphi}{##4}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawStateLatLon}
+% \begin{macrocode}
+ \newcommand\drawStateLatLon[4][]{
+ \begingroup
+ \pgfmathsetmacro\newphi{90-##3}
+ \drawStatePolar[##1]{##2}{\newphi}{##4}
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\drawStatePolar}
+% \begin{macrocode}
+ \newcommand\drawStatePolar[4][]{
+ \begingroup
+ \setkeys{blochsphere}{##1}
+ \labelPolar{##2}{##3}{##4}
+ \pgfmathsetmacro\behind{ifthenelse(-sin(##3)*sin(\blochsphere@rotation - ##4)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(##3)<0, 1, 0)}
+ \ifnum\behind=1\relax
+ \tikzset{test/.style={
+ postaction={
+ decorate,
+ decoration={
+ markings,
+ mark=at position \pgfdecoratedpathlength-0.5pt with {\arrow[\blochsphere@statecolor,line width=\blochsphere@statewidth,opacity=0.2] {>}; },
+ mark=between positions 0 and \pgfdecoratedpathlength-5pt step 0.5pt with {
+ \pgfmathsetmacro\myval{multiply(divide(
+ \pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
+ \pgfsetfillcolor{\blochsphere@statecolor};
+ \pgfsetfillopacity{0.4-\myval/100*0.2}
+ \pgfpathcircle{\pgfpointorigin}{\blochsphere@statewidth};
+ \pgfusepath{fill};}
+ }}}}
+ \else
+ \tikzset{test/.style={
+ postaction={
+ decorate,
+ decoration={
+ markings,
+ mark=at position \pgfdecoratedpathlength-0.5pt with {\arrow[\blochsphere@statecolor,line width=\blochsphere@statewidth] {>}; },
+ mark=between positions 0 and \pgfdecoratedpathlength-5pt step 0.5pt with {
+ \pgfmathsetmacro\myval{multiply(divide(
+ \pgfkeysvalueof{/pgf/decoration/mark info/distance from start}, \pgfdecoratedpathlength),100)};
+ \pgfsetfillcolor{\blochsphere@statecolor};
+ \pgfsetfillopacity{0.4+\myval/100*0.6}
+ \pgfpathcircle{\pgfpointorigin}{\blochsphere@statewidth};
+ \pgfusepath{fill};}
+ }}}}
+ \fi
+ \path [test,on layer=main] (0,0) -- (##2);
+ \endgroup
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\computeOffset}
+% \begin{macrocode}
+ \newcommand\computeOffset[2][]{%
+ \setkeys{blochsphere}{##1}%
+ \pgfmathsetmacro{\x}{\blochsphere@shift[0]*cos(\blochsphere@rotation) + \blochsphere@shift[1]*sin(\blochsphere@rotation)}%
+ \pgfmathsetmacro\y{\blochsphere@shift[0]*sin(\blochsphere@rotation)*sin(\blochsphere@tilt) - \blochsphere@shift[1]*sin(\blochsphere@tilt)*cos(\blochsphere@rotation) + \blochsphere@shift[2]*cos(\blochsphere@tilt)}
+ \expandafter\def\csname ##2\endcsname{(\x pt,\y pt)}%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\computeVisibility}
+% \begin{macrocode}
+ \newcommand\computeVisibility[5][]{
+ \setkeys{blochsphere}{##1}
+ \pgfmathsetmacro\aphi{##2}
+ \pgfmathsetmacro\atheta{##3}
+ \pgfmathsetmacro\d{sqrt(\blochsphere@shift[0]^2+\blochsphere@shift[1]^2+\blochsphere@shift[2]^2)}%% distance from origin of shift
+ \pgfmathsetmacro\tatheta{\atheta+\blochsphere@rotation}
+ \pgfmathsetmacro\dot{cos(\aphi)}
+ \ifdim\dot pt<0.7 pt\relax%
+ \pgfmathsetmacro\domaintest{ifthenelse(and(\blochsphere@rotation - \atheta==0,or(\aphi==0,sin(\blochsphere@tilt==0))),0,1)}
+ \ifdim\domaintest pt=0 pt\relax
+ \pgfmathsetmacro\agamma{0}
+ \else
+ \pgfmathsetmacro\agamma{-90+atan(cos(\blochsphere@tilt)*cos(\blochsphere@rotation - \atheta)/(sin(\aphi)*sin(\blochsphere@tilt) + sin(\blochsphere@rotation - \atheta)*cos(\aphi)*cos(\blochsphere@tilt)))}
+ \fi
+ \else
+ \pgfmathsetmacro\domaintest{ifthenelse(and(Mod(\blochsphere@rotation-\atheta,180)==90,Mod(\blochsphere@tilt,180)==90),0,1)}
+ \pgfmathsetmacro\domaintesttwo{ifthenelse(Mod(\blochsphere@rotation-\atheta,180)==90,0,1)}
+ \pgfmathsetmacro\domaintestthree{ifthenelse(Mod(\blochsphere@tilt,180)==90,0,1)}
+ \ifdim\domaintest pt=0 pt\relax
+ \pgfmathsetmacro\agamma{360-90*\blochsphere@tilt/abs(\blochsphere@tilt)}
+ \else
+ \ifdim\domaintesttwo pt=0 pt\relax
+ \pgfmathsetmacro\agamma{360-90*(sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))/abs(sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))}
+ \else
+ \ifdim\domaintestthree pt=0 pt\relax
+ \pgfmathsetmacro\agamma{360-90*\blochsphere@tilt/abs(\blochsphere@tilt)*cos(\blochsphere@rotation-\atheta)/abs(cos(\blochsphere@rotation-\atheta))}
+ \else
+ \pgfmathsetmacro\agamma{360-atan( (sin(\aphi)*tan(\blochsphere@tilt)+cos(\aphi)*sin(\blochsphere@rotation-\atheta))/cos(\blochsphere@rotation-\atheta) )}
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmathsetmacro\aalpha{acos(-sin(\aphi)*sin(\blochsphere@rotation)*cos(\atheta)*cos(\blochsphere@tilt) + sin(\aphi)*sin(\atheta)*cos(\blochsphere@rotation)*cos(\blochsphere@tilt) + sin(\blochsphere@tilt)*cos(\aphi))}
+ \pgfmathsetmacro\aalphatest{atan(\d/\blochsphere@radius)}
+ \ifdim\aalpha pt<\aalphatest pt\relax
+ \pgfmathsetmacro\abeta{0}
+ \else
+ \pgfmathsetmacro\abeta{acos(\d*cot(\aalpha)/\blochsphere@radius)}
+ \fi
+ \pgfmathsetmacro\abeta{ifthenelse(\blochsphere@shift[2]<0,\abeta+2*(90-\abeta),\abeta)}
+ \expandafter\pgfmathsetmacro\csname ##4\endcsname{\agamma}
+ \expandafter\pgfmathsetmacro\csname ##5\endcsname{\abeta}
+ }%
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+ \tikzset{%
+ >=latex, % option for nice arrows
+ inner sep=0pt,%
+ outer sep=2pt,%
+ mark coordinate/.style={inner sep=0pt,outer sep=0pt,minimum size=3pt,
+ fill=black,circle}%
+ }%
+ \pgfdeclareradialshading[tikz@ball]{ball}{\pgfqpoint{-10bp}{10bp}}{%
+ color(0bp)=(tikz@ball!30!white);
+ color(9bp)=(tikz@ball!75!white);
+ color(18bp)=(tikz@ball!90!black);
+ color(25bp)=(tikz@ball!70!black);
+ color(50bp)=(black)
+ }%
+ \ifthenelse{\boolean{blochsphere@nested}}{}{%
+ \begin{tikzpicture}
+ \drawBall
+ }%
+}
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+{
+ \ifthenelse{\boolean{blochsphere@nested}}{}{
+ \end{tikzpicture}%
+ }%
+ \endgroup%
+}
+\endinput
+% \end{macrocode}
+
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
diff --git a/graphics/pgf/contrib/blochsphere/blochsphere.ins b/graphics/pgf/contrib/blochsphere/blochsphere.ins
new file mode 100644
index 0000000000..0fa2764a36
--- /dev/null
+++ b/graphics/pgf/contrib/blochsphere/blochsphere.ins
@@ -0,0 +1,57 @@
+%% blochsphere.dtx
+%% Copyright 2015 Matthew Wardrop <mister.wardrop@gmail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Matthew Wardrop.
+%
+% This work consists of the files blochsphere.dtx and blochsphere.ins,
+% the derived file pig.sty and any accompanying documentation and examples.
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/blochsphere}
+
+\preamble
+
+This generated file is part of the blochsphere package.
+
+Copyright (C) 2015 by Matthew Wardrop <mister.wardrop@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+
+\generate{\file{blochsphere.sty}{\from{blochsphere.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* blochsphere.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file blochsphere.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/graphics/pgf/contrib/blochsphere/blochsphere.pdf b/graphics/pgf/contrib/blochsphere/blochsphere.pdf
new file mode 100644
index 0000000000..0cee7dff45
--- /dev/null
+++ b/graphics/pgf/contrib/blochsphere/blochsphere.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/blochsphere/example.pdf b/graphics/pgf/contrib/blochsphere/example.pdf
new file mode 100644
index 0000000000..a66d3424f1
--- /dev/null
+++ b/graphics/pgf/contrib/blochsphere/example.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/blochsphere/example.tex b/graphics/pgf/contrib/blochsphere/example.tex
new file mode 100644
index 0000000000..42cae46269
--- /dev/null
+++ b/graphics/pgf/contrib/blochsphere/example.tex
@@ -0,0 +1,30 @@
+\documentclass{standalone}
+
+\usepackage{blochsphere}
+
+\begin{document}
+
+\begin{blochsphere}[radius=1.5 cm,tilt=15,rotation=-20]
+ \drawBallGrid[style={opacity=0.1}]{30}{30}
+
+ \drawGreatCircle[style={dashed}]{-60}{0}{0}
+ \drawGreatCircle[style={dashed}]{60}{0}{0}
+
+ \drawRotationLeft[scale=1.3,style={red}]{-60}{0}{0}{15}
+ \drawRotationRight[scale=1.3,style={red}]{60}{0}{0}{15}
+
+ \node at (-0.8,1.9) {\textcolor{red}{\tiny $J_{12}(t)$}};
+ \node at (1.1,1.8) {\textcolor{red}{\tiny $J_{23}(t)$}};
+
+ \labelLatLon{up}{90}{0};
+ \labelLatLon{down}{-90}{90};
+ \node[above] at (up) {{\tiny $\left|1\right>$ }};
+ \node[below] at (down) {{\tiny $\left|0\right>$}};
+
+ \labelLatLon[labelmark=false]{d}{15}{90};
+ \node at (d) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+
+ \labelLatLon[labelmark=false]{d2}{5}{78};
+ \node at (d2) {\color{gray}\fontsize{0.15cm}{1em}\selectfont $60^\circ$};
+\end{blochsphere}
+\end{document}
diff --git a/graphics/pgf/contrib/bloques/README b/graphics/pgf/contrib/bloques/README
new file mode 100644
index 0000000000..050c1bc2a2
--- /dev/null
+++ b/graphics/pgf/contrib/bloques/README
@@ -0,0 +1,13 @@
+% bloques.sty
+% package based on tikz for control diagrams in power electronics.
+% version 1.0
+% author: Alejandro Garces
+% alejandrogarces@gmail.com
+% License: LPPL
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later. \ No newline at end of file
diff --git a/graphics/pgf/contrib/bloques/bloques.sty b/graphics/pgf/contrib/bloques/bloques.sty
new file mode 100644
index 0000000000..949deef40a
--- /dev/null
+++ b/graphics/pgf/contrib/bloques/bloques.sty
@@ -0,0 +1,202 @@
+% bloques.sty
+% package based on tikz for control diagrams in power electronics.
+% version 1.0
+% author: Alejandro Garces
+% alejandrogarces@gmail.com
+% License: LPPL
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+
+
+
+\usepackage{tikz}
+\usepgflibrary{shapes.misc}
+\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,shadows}
+
+\newcommand{\xdistancia}{1.5cm}
+\newcommand{\ydistancia}{1.2cm}
+\newcommand{\minaltura}{0.7cm}
+\newcommand{\tamano}{\footnotesize}
+\newcommand{\colorfondo}{white}
+\newcommand{\colortexto}{black}
+\newcommand{\colorlinea}{black}
+\newcommand{\sombra}{0}
+\newcommand{\ancholinea}{thick}
+
+\newcommand{\bShadow}{\renewcommand{\sombra}{1}}
+\newcommand{\bColorB}[1]{\renewcommand{\colorfondo}{#1}}
+\newcommand{\bColorT}[1]{\renewcommand{\colortexto}{#1}}
+\newcommand{\bColorL}[1]{\renewcommand{\colorlinea}{#1}}
+\newcommand{\ydistance}[1]{\renewcommand{\ydistancia}{#1}}
+
+
+
+\newcommand{\bStart}[1]{\node [] (NODO1) {\tamano{#1}};}
+
+\newcommand{\bPlusDown}[1]{
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (SUMA) {};
+ \node [draw=gray!50, cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, thin] {};
+ \node [left of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [below of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \draw [-latex,\colorlinea] (NODO1) -- (SUMA);
+ \node [below of = SUMA, node distance = \ydistancia] (VARIABLE) {\tamano{#1}};
+ \draw [-latex, \colorlinea] (VARIABLE) -- (SUMA);
+ \node at (SUMA) [anchor = west] (NODO1) {};
+}
+
+
+\newcommand{\bPlusUp}[1]{
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (SUMA) {};
+ \node [draw=gray!50, cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, thin, draw=gray!50] {};
+ \node [left of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [above of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \draw [-latex, \colorlinea] (NODO1) -- (SUMA);
+ \node [above of = SUMA, node distance = \ydistancia] (VARIABLE) {\tamano{#1}};
+ \draw [-latex, \colorlinea] (VARIABLE) -- (SUMA);
+ \node at (SUMA) [anchor = west] (NODO1) {};
+}
+
+
+\newcommand{\bMinusDown}[1]{
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (SUMA) {};
+ \node [cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, thin, draw=gray!50] {};
+ \node [left of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [below of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$-$}};
+ \draw [-latex,\colorlinea] (NODO1) -- (SUMA);
+ \node [below of = SUMA, node distance = \ydistancia] (VARIABLE) {\tamano{#1}};
+ \draw [-latex,\colorlinea] (VARIABLE) -- (SUMA);
+ \node at (SUMA) [anchor = west] (NODO1) {};
+
+}
+
+
+\newcommand{\bMinusUp}[1]{
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (SUMA) {};
+ \node [thin, cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, draw=gray!50] {};
+ \node [left of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [above of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$-$}};
+ \draw [-latex, \colorlinea] (NODO1) -- (SUMA);
+ \node [above of = SUMA, node distance = \ydistancia] (VARIABLE) {\tamano{#1}};
+ \draw [-latex, \colorlinea] (VARIABLE) -- (SUMA);
+ \node at (SUMA) [anchor = west] (NODO1) {};
+}
+
+\newcommand{\bEnd}[1]{
+ \node [right of = NODO1, node distance = 1.7cm] (F) {#1};
+ \draw [-latex,\colorlinea] (NODO1) -- (F);
+ \node at (F) [anchor = west] (NODO1) {};
+}
+
+
+\newcommand{\bGain}[1]{
+ \node [draw=\colorlinea, rectangle, right of = NODO1, node distance= \xdistancia, minimum height = \minaltura,
+ \ancholinea, fill=\colorfondo,drop shadow={opacity=\sombra}] (NODO2) { \color{\colortexto}\tamano{#1}};
+ \draw [-latex, \colorlinea] (NODO1)--(NODO2);
+ \node at (NODO2.east) [anchor = east] (NODO1) {};
+
+}
+
+
+\newcommand{\bGainPlus}[2]{
+
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (SUMA) {};
+ \node [thin, cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, draw=gray!50] {};
+ \node [left of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [below of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \draw [-latex, \colorlinea] (NODO1) -- (SUMA);
+
+ \node [draw=\colorlinea, rectangle, below of = SUMA, node distance = \xdistancia,xshift=-0.3cm, minimum height = \minaltura,\ancholinea,
+ fill=\colorfondo,drop shadow={opacity=\sombra}, anchor = east] (NODOG) {\color{\colortexto}\tamano{#2}};
+ \node [left of = NODOG, node distance = \xdistancia] (VARIABLE) {\tamano{#1}};
+ \draw [-latex, \colorlinea] (VARIABLE) -- (NODOG);
+ \draw [-latex, \colorlinea] (NODOG) -| (SUMA);
+ \node at (SUMA) [anchor = west] (NODO1) {};
+}
+
+\newcommand{\bGainMinus}[2]{
+
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (SUMA) {};
+ \node [thin, cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, draw=gray!50] {};
+ \node [left of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [below of = SUMA, node distance = 0.45em] () { \color{\colortexto}\tiny{$-$}};
+ \draw [-latex, \colorlinea] (NODO1) -- (SUMA);
+
+ \node [draw=\colorlinea, rectangle, below of = SUMA, node distance = \xdistancia,xshift=-0.3cm, minimum height = \minaltura,\ancholinea,
+ fill=\colorfondo,drop shadow={opacity=\sombra}, anchor = east] (NODOG) {\color{\colortexto}\tamano{#2}};
+ \node [left of = NODOG, node distance = \xdistancia] (VARIABLE) {\tamano{#1}};
+ \draw [-latex, \colorlinea] (VARIABLE) -- (NODOG);
+ \draw [-latex, \colorlinea] (NODOG) -| (SUMA);
+ \node at (SUMA) [anchor = west] (NODO1) {};
+}
+
+
+\newcommand{\bMinusF}[1]{
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (#1) {};
+ \node [draw, cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, thin, draw=gray!50] {};
+ \node [left of = #1, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [below of = #1, node distance = 0.45em] () { \color{\colortexto}\tiny{$-$}};
+ \draw [-latex, \colorlinea] (NODO1) -- (#1);
+ \node at (#1) [anchor = west] (NODO1) {};
+
+}
+
+
+\newcommand{\bPlusF}[1]{
+ \node [draw=\colorlinea, circle,minimum size=1.5em, right of=NODO1, node distance= \xdistancia,\ancholinea, fill=\colorfondo,
+ drop shadow={opacity=\sombra}] (#1) {};
+ \node [thin, cross out, minimum size=1.0em, right of=NODO1, node distance= \xdistancia, draw=gray!50] {};
+ \node [left of = #1, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \node [below of = #1, node distance = 0.45em] () { \color{\colortexto}\tiny{$+$}};
+ \draw [-latex, \colorlinea] (NODO1) -- (#1);
+ \node at (#1) [anchor = west] (NODO1) {};
+
+}
+
+
+\newcommand{\bFeedBack}[2]{
+ \node [draw=\colorlinea, rectangle, below left of = NODO1, node distance = \ydistancia, minimum height = \minaltura,\ancholinea,
+ fill=\colorfondo,drop shadow={opacity=\sombra}, anchor = west] (NODOG) {\color{\colortexto}\tamano{#1}};
+ \draw [-latex, \colorlinea] (NODO1) -- +(0.5,0) |- (NODOG);
+ \draw [-latex, \colorlinea] (NODOG) -| (#2);
+}
+
+
+\newcommand{\bCrossGain}[3]{
+ \node [draw=\colorlinea, rectangle, above right of = #2, minimum height = \minaltura,\ancholinea,
+ fill=\colorfondo,drop shadow={opacity=\sombra}, anchor = west] (NODOG) {\color{\colortexto}\tamano{#1}};
+ \draw [-latex, \colorlinea] (#2) |- (NODOG);
+ \draw [-latex, \colorlinea] (NODOG) -| (#3);
+}
+
+
+\newcommand{\bNewStart}[2]{
+ \node at #2 (NODO1) {\tamano{#1}};
+}
+
+
+\newcommand{\bMarkNode}[1]{
+ \node at (NODO1) (#1) {};
+}
+
+
+\newcommand{\bMarkNodeUp}[1]{
+ \node[above of = NODO1, node distance = \ydistancia] (#1) {};
+}
+
+
+\newcommand{\bMarkNodeDown}[1]{
+ \node[below of = NODO1,node distance = \ydistancia] (#1) {};
+}
+
diff --git a/graphics/pgf/contrib/bloques/example.pdf b/graphics/pgf/contrib/bloques/example.pdf
new file mode 100644
index 0000000000..4d8d556045
--- /dev/null
+++ b/graphics/pgf/contrib/bloques/example.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/bloques/example.tex b/graphics/pgf/contrib/bloques/example.tex
new file mode 100644
index 0000000000..54497472d3
--- /dev/null
+++ b/graphics/pgf/contrib/bloques/example.tex
@@ -0,0 +1,305 @@
+\documentclass[a4paper,onecolumn]{IEEETran}
+\usepackage{bloques}
+\usepackage{verbatim}
+\oddsidemargin=-1.5cm
+
+
+\title{The Bloques Package}
+\author{Alejandro Garces Ruiz \\ alejandrogarces@gmail.com}
+
+\begin{document}
+
+\maketitle
+
+\section{Functions}
+
+
+The \textbf{bloques} package is a very simple set of commands based on \textbf{tikz} to generate control blocks. The only packages required in the definition are:
+
+\begin{verbatim}
+ \usepackage{tikz}
+ \usepackage{bloques}
+\end{verbatim}
+
+The package is very efficient for sequential blocks as follow:
+
+\begin{verbatim}
+\bStart{TEXT}
+\bPlusDown{TEXT}
+\bPlusUp{TEXT}
+\bMinusDown{TEXT}
+\bMinusUp{TEXT}
+\bEnd{TEXT}
+\bGain{TEXT}
+
+\bGainPlus{TEXT1}{TEXT2}
+\bGainMinus{TEXT1}{TEXT2}
+
+
+\end{verbatim}
+
+For Feedback controls, it is required to mark the nodes with the following functions:
+
+\begin{verbatim}
+
+\bMinusF{NODENAME}
+\bPlusF{NODENAME}
+\bFeedBack{TEXT}{NODENAME}
+\bCrossGain{TEXT}{NODENAME1}{NODENAME2}
+\bNewStart{TEXT}{POSITION}
+\bMarkNode{NODENAME}
+\bMarkNodeUp{NODENAME}
+\bMarkNodeDown{NODENAME}
+\end{verbatim}
+
+
+To change colors and distances, the following functions are available
+
+\begin{verbatim}
+ \bShadow{NUMBER} % default = 0
+ \bColorB{COLOR} % default = white
+ \bColorT{COLOR} % default = black
+ \ydistance{NUMBER} % default = 1.2 cm
+\end{verbatim}
+
+\newpage
+
+\section{examples}
+
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \bStart{$X_{ref}$}
+ \bMinusDown{$X$}
+ \bGain{$k_{p}$}
+ \bPlusUp{$Y$}
+ \bGainPlus{$U$}{$\omega L$}
+ \bEnd{$V_{x}$}
+ \node[right of = NODO1, text width=8.5cm, node distance = 6.0cm, drop shadow={opacity=1}, fill=blue!20, rounded corners] (C4)
+ {
+ \begin{verbatim}
+ \begin{figure}
+ \begin{tikzpicture}
+ \bStart{$X_{ref}$}
+ \bMinusDown{$X$}
+ \bGain{$k_{p}$}
+ \bPlusUp{$Y$}
+ \bGainPlus{$U$}{$\omega L$}
+ \bEnd{$V_{x}$}
+ \end{tikzpicture}
+ \end{figure}
+ \end{verbatim}
+ };
+
+\end{tikzpicture}
+\caption{Simple Control diagram }
+\end{figure}
+
+
+
+\begin{figure}[h!]
+\begin{tikzpicture}
+ \bShadow
+ \bStart{$X_{ref}$}
+ \bMinusDown{$X$}
+ \bGain{$k_{p}$}
+ \bPlusUp{$Y$}
+ \bGainPlus{$U$}{$\omega L$}
+ \bEnd{$V_{x}$}
+ \node[right of = NODO1, text width=8.5cm, node distance = 6.0cm, drop shadow={opacity=1}, fill=blue!20, rounded corners] (C4)
+ {
+ \begin{verbatim}
+ \begin{figure}
+ \begin{tikzpicture}
+ \bShadow
+ \bStart{$X_{ref}$}
+ \bMinusDown{$X$}
+ \bGain{$k_{p}$}
+ \bPlusUp{$Y$}
+ \bGainPlus{$U$}{$\omega L$}
+ \bEnd{$V_{x}$}
+ \end{tikzpicture}
+ \end{figure}
+ \end{verbatim}
+ };
+
+\end{tikzpicture}
+\caption{Control diagram with shadow}
+\end{figure}
+
+
+
+\begin{figure}[h!]
+\begin{tikzpicture}[thick]
+ \draw[fill=blue!20, draw=white] (-0.5,-3) rectangle (8,2);
+ \draw[fill=green!20, dashed,thick] (4,-2) rectangle (7,0.5);
+ \bShadow
+ \bColorB{blue!80!green!50}
+ \bColorT{yellow}
+ \bColorL{white}
+ \bStart{$X_{ref}$}
+ \bMinusDown{$X$}
+ \bGain{$k_{p}$}
+ \bColorB{blue!30!green!80}
+ \bPlusUp{$Y$}
+ \bGainPlus{$U$}{$\omega L$}
+ \bEnd{$V_{x}$}
+ \node[right of = NODO1, text width=8.5cm, node distance = 6.0cm, drop shadow={opacity=1}, fill=blue!20, rounded corners] (C4)
+ {
+ \begin{verbatim}
+ \begin{figure}
+ \begin{tikzpicture}[thick]
+ \draw[fill=blue!20, draw=white]
+ (-0.5,-3) rectangle (8,2);
+ \draw[fill=green!20, dashed]
+ (4,-2) rectangle (7,0.5);
+
+ \bShadow
+ \bColorB{blue!50!green!45}
+ \bColorT{yellow}
+ \bColorL{white}
+ \bStart{$X_{ref}$}
+ \bMinusDown{$X$}
+ \bGain{$k_{p}$}
+ \bColorB{blue!30!green!80}
+ \bPlusUp{$Y$}
+ \bGainPlus{$U$}{$\omega L$}
+ \bEnd{$V_{x}$}
+ \end{tikzpicture}
+ \end{figure}
+ \end{verbatim}
+ };
+
+\end{tikzpicture}
+\caption{Control diagram with shadow and different colors}
+\end{figure}
+
+
+
+
+\begin{figure}[h!]
+ \begin{tikzpicture}
+ \bColorB{blue!70!green!20}
+ \bStart{$X_{r}$}
+ \bMinusF{NODEX}
+ \bGain{$k_{p}+\frac{k_{i}}{S}$}
+ \bFeedBack{$k_{x}$}{NODEX}
+ \bEnd{$X$}
+
+ \node[right of = NODO1, text width=8.5cm, node distance = 6.0cm, drop shadow={opacity=1}, fill=blue!20, rounded corners] (C4)
+ {
+ \begin{verbatim}
+\begin{figure}
+ \begin{tikzpicture}
+ \bColorB{blue!70!green!20}
+ \bStart{$X_{r}$}
+ \bMinusF{NODEX}
+ \bGain{$k_{p}+\frac{k_{i}}{S}$}
+ \bFeedBack{$k_{x}$}{NODEX}
+ \bEnd{$X$}
+ \end{tikzpicture}
+\end{figure}
+ \end{verbatim}
+ } ;
+
+ \end{tikzpicture}
+ \caption{Control diagram with feedback}
+\end{figure}
+
+
+
+
+\begin{figure}[h!]
+ \begin{tikzpicture}
+ \bColorB{blue!30!green!50}
+ \bColorT{white}
+ \bStart{$X_{r}$}
+ \bMinusF{NODEX}
+ \bGain{$k_{p}+\frac{k_{i}}{S}$}
+ \bGain{$K_{2}$}
+ \bPlusDown{$Y$}
+ \ydistance{2.5cm}
+ \bFeedBack{$k_{x}$}{NODEX}
+ \bEnd{$X$}
+
+\node[right of = NODO1, text width=8.5cm, node distance = 6.0cm, drop shadow={opacity=1}, fill=blue!20, rounded corners] (C4)
+ {
+ \begin{verbatim}
+
+\begin{figure}
+ \begin{tikzpicture}
+ \bColorB{blue!30!green!50}
+ \bColorT{white}
+ \bStart{$X_{r}$}
+ \bMinusF{NODEX}
+ \bGain{$k_{p}+\frac{k_{i}}{S}$}
+ \bGain{$K_{2}$}
+ \bPlusDown{$Y$}
+ \ydistance{2.5cm}
+ \bFeedBack{$k_{x}$}{NODEX}
+ \bEnd{$X$}
+ \end{tikzpicture}
+\end{figure}
+
+
+ \end{verbatim}
+ } ;
+
+
+ \end{tikzpicture}
+ \caption{Change the ydistance}
+\end{figure}
+
+
+\begin{figure}[h!]
+ \begin{tikzpicture}
+ \bStart{$I_{d(ref)}=0$}
+ \bMinusDown{$I_{d}$}
+ \bGain{PI1}
+ \bPlusF{NODET}
+ \bEnd{$V_{d}$}
+ \bNewStart{$\omega_{ref}$}{(-2,-4)}
+ \bMinusDown{$\omega_{s}$}
+ \bGain{PI2}
+ \bMinusUp{$I_{q}$}
+ \bMarkNodeUp{NODEX}
+ \bGain{PI3}
+ \bEnd{$V_{q}$}
+ \bCrossGain{$\omega L$} {NODEX} {NODET}
+
+
+ \node[right of = NODO1, text width=8.5cm, node distance = 6.0cm, drop shadow={opacity=1}, fill=blue!20, rounded corners] (C4)
+ {
+ \begin{verbatim}
+
+
+\begin{figure}
+ \begin{tikzpicture}
+ \bStart{$I_{d(ref)}=0$}
+ \bMinusDown{$I_{d}$}
+ \bGain{PI1}
+ \bPlusF{NODET}
+ \bEnd{$V_{d}$}
+ \bNewStart{$\omega_{ref}$}{(-2,-4)}
+ \bMinusDown{$\omega_{s}$}
+ \bGain{PI2}
+ \bMinusUp{$I_{q}$}
+ \bMarkNodeUp{NODEX}
+ \bGain{PI3}
+ \bEnd{$V_{q}$}
+ \bCrossGain{$\omega L$} {NODEX} {NODET}
+ \end{tikzpicture}
+\end{figure}
+
+ \end{verbatim}
+ };
+
+ \end{tikzpicture}
+ \caption{More compex controls}
+\end{figure}
+
+
+\end{document}
+
+
+
+
diff --git a/graphics/pgf/contrib/blox/README b/graphics/pgf/contrib/blox/README
new file mode 100644
index 0000000000..e8c3cff73f
--- /dev/null
+++ b/graphics/pgf/contrib/blox/README
@@ -0,0 +1,36 @@
+The blox package by Ben Reish
+
+File Contents
+.blox/
+..README
+..blox.dtx
+..blox.pdf
+
+Purpose
+This package, along with tikz, will typeset block diagrams for
+use with programming and control theory.
+
+Contributions
+This is just an English translation of the schemabloc package.
+I did fix a couple of bugs that I found in the schemabloc
+package so that blox works for the MikTeX installation I have.
+
+License.
+
+blox: Just an English translation of the schemabloc package.
+Copyright (C) 2014 Ben Reish
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 1999/12/01 or later.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+LPPL for more details.
diff --git a/graphics/pgf/contrib/blox/blox.dtx b/graphics/pgf/contrib/blox/blox.dtx
new file mode 100644
index 0000000000..0accefac21
--- /dev/null
+++ b/graphics/pgf/contrib/blox/blox.dtx
@@ -0,0 +1,1046 @@
+% \iffalse meta-comment
+% \preamble
+%
+% Copyright (C) 2014 by Ben Reish
+% -----------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
+% \endpreamble
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{blox}%
+%<package>[2014/08/20 v2.5 Just an English translation of schemabloc]
+%
+%<*batchfile>
+\begingroup
+%%
+%% Copyright (C) 2014 by Ben Reish
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 1999/12/01 or later.
+%%
+\input docstrip.tex
+\keepsilent
+\usedir{tex/latex/blox}
+\preamble
+This is a generated file.
+Copyright (C) 2014 by Ben Reish
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 of this license or (at your option) any later
+version. The latest version of this license is in:
+http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of
+LaTeX version 1999/12/01 or later.
+\endpreamble
+\askforoverwritefalse
+\generate{\file{blox.sty}{\from{blox.dtx}{package}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space blox.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file blox.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+\endgroup
+%</batchfile>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{blox}
+\usepackage[colorlinks=true,urlcolor=blue,linkcolor=black,%
+ citecolor=orange,pdfborder={0 0 0},%pdfpagemode=FullScreen,
+ pdfdisplaydoctitle=true%
+ ]{hyperref}
+\usepackage{fancyvrb}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{blox.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{261}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2014/01/01}{Initial version}
+% \changes{v2.0}{2014/08/01}{Fixed the chain mechanism to work with my implementation of tikz}
+%
+% \newcommand{\blox}{\textsf{blox}}
+% \newcommand{\stikz}{\textsf{tikz}}
+% \changes{v2.5}{2014/08/20}{Changed the name to \blox\ instead of \textsf{bloX} at CTAN's suggestion.}
+%
+% \newcommand{\verbatimfont}[1]{\renewcommand{\MacroFont}{\ttfamily#1}}
+% \newcommand{\vrbfnt}{\verbatimfont{\fontsize{6pt}{8pt}\selectfont}}
+%
+% \GetFileInfo{blox.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\@ne,\advance,\begingroup,\catcode,\closein,\closeout,\day,\def,\edef,\else,\empty,\endgroup,\newcommand,\draw,\newtoks,\ProvidesPackage,\RequirePackage,\node,\let,\global,\foreach}
+%
+% \title{The \textsf{blox} package\thanks{This document
+% corresponds to \textsf{blox}~\fileversion,
+% dated \filedate.}}
+% \author{Ben Reish \\ \texttt{ben.reish@alumni.oc.edu}}
+%
+%
+%
+% \maketitle
+%
+% \begin{abstract}
+% The \textsf{blox} package is an English translation of the French \textsf{schemabloc} package for making block diagrams in \LaTeX2e. Also, I fixed the chain feature to auto-create a linear linked chain of blocks from a list which did not work on my implementation of \textsf{tikz} and \textsf{schemabloc}.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% Have you ever needed to make a block diagram for a control system like Fig. \ref{fig:simpdia}? Or, maybe to explain an algorithm? The \blox\ package is an option to meet this need. It allows for the use of most of \textsf{tikz}'s personalization capability for the blocks themselves and the lines. But, the defaults look pretty good by themselves.
+
+% I mention the \textsf{tikz} package because this package is based on the \verb=tikzpicture= environment. I refer you to the \textsf{pgf/tikz}\footnote{See \url{http://ctan.org/pkg/pgf}.} documentation for specifics on using the \verb=tikzpicture= environment. I will only show the necessities to be able to use this package.
+
+% \begin{figure}
+% \centering
+% \begin{minipage}{.45\textwidth}
+% \begin{tikzpicture}
+% \bXInput{A}
+% \bXComp{B}{A}\bXLink[r]{A}{B}
+% \bXBloc[2]{C}{$G_p$}{B}\bXLink[u]{B}{C}
+% \bXOutput{E}{C}\bXLink[y]{C}{E}
+% \bXReturn{C-E}{B}{H}
+% \end{tikzpicture}
+% \end{minipage}%
+% \begin{minipage}{.45\textwidth}\vrbfnt
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \bXInput{A}
+% \bXComp{B}{A}
+% \bXLink[r]{A}{B}
+% \bXBloc[2]{C}{$G_p$}{B}
+% \bXLink[u]{B}{C}
+% \bXOutput{E}{C}
+% \bXLink[y]{C}{E}
+% \bXReturn{C-E}{B}{H}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{minipage}
+% \caption{Simple Negative Feedback Block Diagram and Code}\label{fig:simpdia}
+% \end{figure}
+
+%
+% So if \textsf{schemabloc} had not required me to repeatedly use Google\textsuperscript\textregistered Translate to figure out what was going on, I would never have created this package. If you like French or can read it, please use the \textsf{schemabloc} package.
+%
+% \section{Usage}
+% The idea is to create a \textsf{tikzpicture} environment then place your block diagram commands inside it. The order is a bit weird. You must create both endpoints to a connecting line prior to making the line (see Fig. \ref{fig:helps}). So, instead of saying `make block, make link, make block', you have to say `make block, make block, make connecting link.' This is an effect of \stikz\ not being a what-you-see-is-what-you-get graphics drawing program. It will help you to create a rought draft of your block diagram with pen and ink prior to trying to create it with this package.
+%
+% \blox\ is designed to be linear. It begins at an input and builds the diagram to the right of the previous item one item at a time. If multiple paths are needed, besides the normal feedback path like that shown in Fig. \ref{fig:simpdia}, special commands must be used to translate up or down to a new path.
+%
+% \begin{figure}
+% \begin{minipage}{.6\textwidth}
+% \begin{tikzpicture}
+% \bXInput{A}
+% \bXCompSum{B}{A}{+}{-}{+}{}
+% \bXLink[Link]{A}{B}
+% \bXLinkName[1.3]{Bright}{Comp}
+% \bXBlocL{C}{$G_1$}{B}
+% \bXOutput[8]{D}{C}
+% \bXLink{C}{D}
+% \bXLinkName{D}{Output}
+% \bXLinkName[2]{C}{Block}
+% \bXLineStyle{red}
+% \bXReturn{C-D}{B}{Return}
+% \bXDefaultLineStyle
+% \bXLineStyle{green!80!black}
+% \bXStyleBloc{green!60!black}
+% \bXBranchy[-5]{C-D}{E}
+% \bXChainReturn[1.5]{E}{f/$G_2$,g/$G_3$}
+% \bXLinkyx{C-D}{f}
+% \bXLinkxy{g}{B}
+% \bXLinkName[2]{f}{ChainReturn}
+% \bXDefaultLineStyle
+% \bXStyleBlocDefault
+% \node [draw, fill=white!80!blue, font=\tiny, below of =A, node distance = 1em] {A} ;
+% \node [draw, fill=white!80!blue, font=\tiny, below of =B, node distance = 2em] {B} ;
+% \node [draw, fill=white!80!blue, font=\tiny, below of =C, node distance = 2.5em] {C} ;
+% \node [draw, fill=white!80!blue, font=\tiny, below of =C-D, node distance = 1.25em] {C-D} ;
+% \node [draw, fill=white!80!blue, font=\tiny, below of =D, node distance = 1em] {D} ;
+% \node [draw, fill=white!80!blue, font=\tiny, below of =E, node distance = 1em] {E} ;
+% \node [draw, fill=white!80!blue, font=\tiny, below of =f, node distance = 2.5em] {f} ;
+% \node [draw, fill=white!80!blue, font=\tiny, below of =g, node distance = 2.5em] {g} ;
+% \end{tikzpicture}
+% \end{minipage}\hspace{-2em}%
+% \begin{minipage}{.4\textwidth}
+% \vrbfnt
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \bXInput{A}
+% \bXCompSum{B}{A}{+}{-}{+}{}
+% \bXLink[Link]{A}{B}
+% \bXLinkName[1.3]{Bright}{Comp}
+% \bXBlocL{C}{$G_1$}{B}
+% \bXOutput[8]{D}{C}
+% \bXLink{C}{D}
+% \bXLinkName{D}{Output}
+% \bXLinkName[2]{C}{Block}
+% \bXLineStyle{red}
+% \bXReturn{C-D}{B}{Return}
+% \bXDefaultLineStyle
+% \bXLineStyle{green!80!black}
+% \bXStyleBloc{green!60!black}
+% \bXBranchy[-5]{C-D}{E}
+% \bXChainReturn[1.5]{E}
+% {f/$G_2$,g/$G_3$}
+% \bXLinkyx{C-D}{f}
+% \bXLinkxy{g}{B}
+% \bXLinkName[2]{f}{ChainReturn}
+% \bXDefaultLineStyle
+% \bXStyleBlocDefault
+% \end{tikzpicture}
+% \end{verbatim}
+
+% \end{minipage}
+
+% \caption{This figure shows the Node names below their actual positions in order to show what's going on during the build-up of the block diagram. Begin with an input, A, then add a comparator (I used the general one because I needed an odd setup), B. The add the link between the two and add the block, C. Now add the output, D, then links in between each, and you're done with the first branch. The return line is added and creates its own branch (red) below the first branch, by default. The link macro creates a node in the middle of the link which is calls \meta{first arg}-\meta{second arg.}, C-D. Now create the third branch (green) by placing E. Then use the chain return macro to create two blocks and their links, f and g. Now use the special link macros to connect the first branch to the third. }\label{fig:helps}
+% \end{figure}
+%
+% \DescribeEnv{tikzpicture}
+% This package is an extension of \stikz\ so |\begin{tikzpicture}| must be used around these commands. This is just a reminder to use the correct environment. Once the diagram is created, it can be reduced in total size by adding an optional argument to the environment which uses the keyword scale, e.g.\ |\begin{tikzpicture}[scale=0.5]|.
+%
+% \subsection[The Alpha and the Omega]{The A and the $\Omega$}
+% \DescribeMacro{\bXInput}
+% Every diagram begins with an entry point. I called mine an input so the command is |\bXInput|\oarg{label}\marg{Name}. \meta{label} is printed text for the entry node. This can be blank which is default, or not included in the |\bXInput| call at all. The link between the input node and the next block will be centered vertically on the right-hand side of whatever text is given as \meta{label}. \meta{Name} is the \stikz\ node name used internally. It will not be displayed. It is used to connect and things and refer to commponents of the diagram inside \stikz.
+%\changes{v2.1}{2014/08/12}{Converted the input command to actually display whatever text is put in the optional argument}
+%
+% \DescribeMacro{\bXOutput}
+% Like the input, every diagram needs a point of exit. I called mine an output so the syntax is |\bXOutput|\oarg{distance}\marg{Name}\marg{Preceding Node}. \meta{distance} is an optional argument whose default is 2 that specifies how many units from \meta{Previous Node} to place this new node. The unit in question is the \texttt{em} or \rule{1em}{.1em} \index{Default unit}(the width of the captial M in the current font). \meta{Name} is the \stikz\ node name given to this new block. \meta{Previous Node} is the \stikz\ node name of the node (block, or comparator) immediately to the left of this new block.
+%
+% \DescribeMacro{\bXLinkName}
+% To place the label of the output at the extreme end of the block diagram, use |\bXLinkName|\oarg{distance}\marg{Previos Node}\marg{Label}. \meta{distance} is an optional argument whose default is 0.4 units above \meta{Previous Node} to place \meta{Label}. An example is shown in Fig. \ref{fig:branchingdia}.
+%
+%
+%
+% \subsection{Blocks}
+% There are several commands for making blocks in the \blox\ package. They are context sensitive, so where you use them matters. Some do multiple things.
+%
+% \DescribeMacro{\bXBloc}
+% Usually, something happens inside a block of a block diagram. You'll want to describe what is happening inside the block. The first command for making blocks in \textsf{bloX} is |\bXBloc|\oarg{distance}\marg{Name}\marg{Contents}\marg{Previous Node}. This command makes a single block outline around whatever is in \meta{contents} and places it to the right of \meta{Previous Node} by \meta{distance} units (the default is 2).
+%
+% \DescribeMacro{\bXBlocL}
+% The second command for making blocks to the right of the last item is |\bXBlocL|\oarg{distance}\marg{Name}\marg{Contents}\marg{Previous Node}. This command makes a block outline around whatever is in \meta{contents} and places it to the right of \meta{Previous Node} by \meta{distance} units (the default is 2) and then draws the connecting link between \meta{Previous Node} and the new block. (This is a slight labor savings if you don't want to label the link between the two.)
+%
+% \DescribeMacro{\bXBlocr}
+% The third command for making blocks is used for blocks on the return link or the feedback. This uses the same arguments that |\bXBloc| does but changes how it is placed relative to the previous block and how the links connect to it. The syntax is |\bXBlocr|\oarg{distance}\marg{Name}\marg{Contents}\marg{Previous Node}. The block created by this command will be place \meta{distance} (the default is 2) units to the left of \meta{Previous Node}. Links will connect to the right-hand side of the block and exit on the left-hand side.
+%
+% \DescribeMacro{\bXBlocrL}
+% The fourth command is analogous to |\bXBlocL| but switched to proceed to the left instead of the right, again for use on the feedback or return loop. The syntax is |\bXBlocrL|\oarg{distance}\marg{Name}\marg{Contents}\marg{Previous Node}. The block created by this command will be placed \meta{distance} (the default is 2) units to the left of \meta{Previous Node} and then draws the connecting link between \meta{Previous Node} and the new block. Links will terminate on the right-hand side of the block and begin on the left-hand side.
+%
+% \DescribeMacro{\bXBlocPotato}
+% For those of you who do not like rectangles, there is a command for creating a ``block'' which is more of a floating potato instead of a rectangle. The syntax is |\bXBlocPotato|\oarg{distance}\marg{Name}\marg{Contents}\marg{Previous Node}. This command makes a single floating potato outline around whatever is in \meta{contents} and places it to the right of \meta{Previous Node} by \meta{distance} units (the default is 2). See Fig. \ref{fig:blocks}.
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}{\textwidth}
+% \begin{tikzpicture}
+% \bXInput[Input]{A}
+% \bXBloc[2]{C}{$G_p$}{A}
+% \bXBlocL[2]{D}{$G_i$}{C}
+% \bXBlocr[4]{F}{feed}{A}
+% \bXBlocrL[3]{G}{back}{F}
+% \bXBlocPotato[2]{I}{World}{D}
+% \end{tikzpicture}
+% \end{minipage}
+%
+% \begin{minipage}{.5\textwidth}
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \bXInput[Input]{A}
+% \bXBloc[2]{B}{$G_p$}{A}
+% \bXBlocL[2]{C}{$G_i$}{B}
+% \bXBlocr[4]{F}{feed}{A}
+% \bXBlocrL[3]{G}{back}{F}
+% \bXBlocPotato[2]{I}{World}{C}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{minipage}
+% \caption{Block Creation Commands and Code}\label{fig:blocks}
+% \end{figure}
+%
+% \DescribeMacro{\bXonlyOneBloc}
+% If you only want to have an input, a block, and an output, then this is the command for you. |\bXOnlyOneBloc|\oarg{distance}\marg{Input label}\marg{Block label}\marg{Output label}. \meta{distance} is the length of the links in \texttt{em}'s. The labels, \meta{Input label}, \meta{Block label}, and \meta{Output label}, are the labels for the individual components. The names are taken care of by the macro assuming that you do not plan to have multiple instances of this macro in the same |tikzpicture|.
+%
+%
+% \subsection{Comparators and Summations}\index{Comparators}\index{Summing Junctions}
+% Comparators and summing junctions are created with a couple of commands. All of them are limited to four connections so that the cardinal direction names can be used to describe them: north, south, west, east\footnote{If you need more connections than that, think about using multiple summing junctions first or use the full authority of \stikz\ to create a block with the requisite number of connections.}. There is the ability to have the signs inside the circle or outside. There are several simplified, user-level commands and one general command, e.g.\ Fig. \ref{fig:complist} The package defines a couple others which are explained in the Implementation section.
+%
+% \DescribeMacro{\bXComp}
+% The syntax is |\bXComp*|\oarg{distance}\marg{Name}\marg{Previous Node}. This command creates the normal feedback from below comparator \meta{distance} to the right of \meta{Previous Node} named \meta{Name}. Used with the star, the labels will be outside the empty circle and offset so as to not interfere with the links. Without the star, the circle is drawn with an X circumscribed in it and the labels will be within the circle. The default \meta{distance} is 4.
+%
+% \DescribeMacro{\bXSum}
+% This command creates the normal input from below summing junction. The syntax is |\bXSum|\oarg{distance}\marg{Name}\marg{Previous Node}\marg{a}\marg{b}\marg{c}. The circle is drawn with an X circumscribed in it and the labels will be within the circle, only the east segment is not labeled due to there only being 6 arguments. Arguments \meta{a}, \meta{b}, and \meta{c} should be $+$'s to fulfill the name of the command, but they don't have to be.
+%
+% \DescribeMacro{\bXCompa} \DescribeMacro{\bXSuma}
+% The comparator can have input from above. The user command to simply use the north and west segments for comparing is given by the following command: |\bXCompa*|\oarg{distance}\marg{Name}\marg{Previous Node} and the |\bXSuma*| is analogous.
+%
+%
+%
+% \DescribeMacro{\bXCompb} \DescribeMacro{\bXSumb}
+% Comparators can have input from below as well. The user command to simply use the south and west segments for comparing is given by the following command: |\bXCompb*|\oarg{distance}\marg{Name}\marg{Previous Node} and the |\bXSumb*| is analogous.
+%
+%
+% \begin{figure}
+% \centering
+% \begin{tikzpicture}
+% \bXInput{A}
+% \bXComp[-4]{B}{A}
+% \bXCompSum[-12]{K}{A}{n}{s}{w}{e}
+% \node [draw, minimum width=12em, minimum height=5em, font=\tiny, below of =K, node distance = 0em] {} ;
+% \node [font=\tiny, below of =K, node distance = 2em] {\textbackslash{}bXCompSum\{n\}\{s\}\{w\}\{e\}} ;
+% \node [draw, minimum width=4em, minimum height=5em, font=\tiny, below of =B, node distance = 0em] {} ;
+% \node [font=\tiny, below of =B, node distance = 2em] {\textbackslash{}bXComp} ;
+% \bXCompa[0]{E}{A}
+% \node [draw, minimum width=4em, minimum height=5em, font=\tiny, below of =E, node distance = 0em] {} ;
+% \node [font=\tiny, below of =E, node distance = 2em] {\textbackslash{}bXCompa} ;
+% \bXSuma[4]{F}{A}
+% \node [draw, minimum width=4em, minimum height=5em, font=\tiny, below of =F, node distance = 0em] {} ;
+% \node [font=\tiny, below of =F, node distance = 2em] {\textbackslash{}bXSuma} ;
+% \bXSumb[8]{G}{A}
+% \node [draw, minimum width=4em, minimum height=5em, font=\tiny, below of =G, node distance = 0em] {} ;
+% \node [font=\tiny, below of =G, node distance = 2em] {\textbackslash{}bXSumb} ;
+% \bXBranchy{A}{C}
+% \bXComp*[-4]{D}{C}
+% \node [draw, minimum width=4em, minimum height=5em, font=\tiny, below of =D, node distance = 0em] {} ;
+% \node [font=\tiny, below of =D, node distance = 2em] {\textbackslash{}bXComp*} ;
+% \bXCompa*[0]{H}{C}
+% \node [draw, minimum width=4em, minimum height=5em, font=\tiny, below of =H, node distance = 0em] {} ;
+% \node [font=\tiny, below of =H, node distance = 2em] {\textbackslash{}bXCompa*} ;
+% \bXSuma*[4]{I}{C}
+% \node [draw, minimum width=4em, minimum height=5em, font=\tiny, below of =I, node distance = 0em] {} ;
+% \node [font=\tiny, below of =I, node distance = 2em] {\textbackslash{}bXSuma*} ;
+% \bXSumb*[8]{J}{C}
+% \node [draw, minimum width=4em, minimum height=5.em, font=\tiny, below of =J, node distance = 0em] {} ;
+% \node [font=\tiny, below of =J, node distance = 2em] {\textbackslash{}bXSumb*} ;
+% \bXCompSum*[-12]{L}{C}{n}{s}{w}{e}
+% \node [draw, minimum width=12em, minimum height=5em, font=\tiny, below of =L, node distance = 0em] {} ;
+% \node [font=\tiny, below of =L, node distance = 2em] {\textbackslash{}bXCompSum*\{n\}\{s\}\{w\}\{e\}} ;
+% \end{tikzpicture}
+% \caption{Labor-Saving Comparator and Summing Junction Macros}\label{fig:complist}
+% \end{figure}
+%
+% \DescribeMacro{\bXCompSum}
+% This is the most general command. All the previous ones used this command with arguments pre-defined. It takes seven arguments. The syntax is |\bXCompSum*|\oarg{distance}\marg{Name}\marg{Previous Node}\marg{n}\marg{s}\marg{w}\marg{e}. The starred version creates an empty circle with the labels outside while the non-starred version creates one where the X and the labels are within the circle. The command places the circle \meta{distance} to the right of \meta{Previous Node} named \meta{Name}. It places \meta{n} in the northern segment, \meta{s} in the southern segment, \meta{w} in the western segment, and \meta{e} in the eastern segment. For summing junctions, these arguments are all $+$'s. For comparators, one or more is a $-$.
+%
+% \subsection{Links}
+% Connecting the blocks in a block diagram indicates the flow of information in the diagram. This is assisted by arrows on the connecting lines. I called the lines links. The package expects to move from the left to the right
+%
+% \DescribeMacro{\bXLink}
+% \DescribeMacro{\bXLinkxy}
+% The syntax is |\bXLink|\oarg{label}\marg{Previous Node}\marg{Next Node}. The length of the line is decided by the placement of the \meta{Next Node} and is not an argument of the link. This command creates an arrow from \meta{Previous Node} to \meta{Next Node} with the arrow tip pointing at \meta{Next Node} (see Fig. \ref{fig:simpdia} for r, u, or y) and \meta{label} above the middle of the link. The default label is blank.
+%
+% The command |\bXLinkxy| uses the same arguments. It creates a line which exits from the east side of \meta{Previous Node}, makes a right angle and tries to connect to the north or south side of \meta{Next Node}. It will place the \meta{label} along the vertical segment.
+%
+% \DescribeMacro{\bXLinkyx}
+% |\bXLinkyx|\marg{Previous Node}\marg{Next Node} is the syntax. It creates a link which goes vertically, makes a right angle, and then goes horizontally. It has no label.
+%
+% To create a feedback loop where there is measurement noise, use |\bXLinkyx|, then create the noise block with |\bXBlocr|, and then use |\bXLinkxy| to finish the feedback loop. If no noise is in the measurement, then use a return.
+%
+% \subsection{Returns}
+% Returns are what I generalized the simple feedback loop as: a line connecting the end of a linear block diagram to the beginning.
+%
+% \DescribeMacro{\bXReturn}
+% In order to make the return line, the syntax of the command is defined as |\bXReturn|\oarg{distance}\marg{Previous Node}\marg{Next Node}\marg{label}. \meta{distance} is the number of \texttt{em}'s the return line should move down prior to going left. \meta{Previous Node} and \meta{Next Node} are the names of the beginning and the terminus of the return line.\meta{label} is the label for the return line placed near \meta{Next Node} on the vertical segment.
+%
+% \subsection{Chains}
+% I worked on the chain mechanism because it did not work correctly for me when I tried it. Chains are sets of blocks and links that can be automatically assembled from a list of parameters and a starting node.
+%
+% \DescribeMacro{\bXChain}\DescribeMacro{\bXChainReturn}
+% These labor saving macros are expected to create a set of linear blocks and links. The syntax for their used is |\bXChain|\oarg{distance}\marg{Previous Node}\marg{list} and |\bXChainReturn|\oarg{distance}\marg{Previous Node}\marg{list}. \meta{distance} is the number of \texttt{em}'s separation between blocks in the chain. The default is 4. \meta{Previous Node} is the starting node for the chain. \meta{list} is a list of pairs of names and labels of the form: \texttt{name/label,name2/label2,\ldots} as in Fig. \ref{fig:chain}. The |\bXChainReturn| command is meant for use on the return line of a feedback loop in conjunction with |\bXLinkyx| and |\bXLinkxy| and proceeds to the left.
+%
+% \DescribeMacro{\bXLoop}
+% This macro uses the chain feature and the return feature to build a feedback loop from a list, e.g.\ Fig. \ref{fig:loop}. The syntax is |\bXLoop|\oarg{distance}\marg{Previous Node}\marg{list}. This macro uses a comparator and the chain mechanism and then adds a return. Note that you still need to start with an input\footnote{There is something incorrect about the spacing on the Input label in this command}.
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}{.45\textwidth}
+% \begin{tikzpicture}
+% \bXInput{E}
+% \bXChain[2]{E}{Md/$45<50$,fred/noise,head/65}
+% \end{tikzpicture}
+% \end{minipage}\hspace{1em}
+% \begin{minipage}{.45\textwidth}\vrbfnt
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \bXInput{E}
+% \bXChain[2]{E}%
+% {Md/$45<50$,fred/noise,head/65}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{minipage}
+% \caption{Example of a Chain and Code}\label{fig:chain}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}{.45\textwidth}
+% \begin{tikzpicture}
+% \bXInput[r]{A}
+% \bXLoop[1.25]{A}{c/Md,d/kid,e/$4<$}
+% \end{tikzpicture}
+% \end{minipage}\hfil
+% \begin{minipage}{.45\textwidth}
+% \begin{verbatim}
+% \begin{tikzpicture}
+% \bXInput[r]{A}
+% \bXLoop[1.5]{A}{c/Md,d/kid,e/$4<$}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{minipage}
+% \caption{Example of a Loop and Code}\label{fig:loop}
+% \end{figure}
+%
+% \subsection{Specialty Items}
+% This section discusses the additional macros that don't fit into the previous categories.
+% \subsubsection{New Branches}
+% When you have a highly complex block diagram to create like Fig. \ref{fig:branchingdia} or Fig. \ref{fig:helps}, this package requires you to make new branches by telling it where in relation to an existing node to begin the new branch. You may move horizontally or vertically from an existing node. In Fig. \ref{fig:branchingdia}, there are two |\bXReturn|'s used which take care of placing the new branch internally. But, the upper row with the System block is the item of interest. In Fig. \ref{fig:helps}, the branches are noted by color: black for the first branch, red for the second, and green for the third.
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}{\textwidth}
+% \begin{tikzpicture}[scale=.5]
+% \bXInput{A}
+% \bXComp{B}{A}\bXLink[$r_3$]{A}{B}
+% \bXStyleBloc{rounded corners,fill=blue!20,text=blue}
+% \bXBloc[1]{C}{$C_3(s)$}{B}\bXLink{B}{C}
+% \bXStyleBlocDefault
+% \begin{tiny}
+% \bXLineStyle{red, dotted}
+% \bXStyleBloc{draw=red!20, thick,top color=white, bottom color=red!50!black}
+% \bXComp[5]{D}{C}\bXLink[$r_2$]{C}{D}
+% \bXChain[1]{D}{E/$C_2(s)$,F/$\approx1$}
+% \bXBloc[2]{G}{$P_2(s)$}{F}\bXLink[$u_2$]{F}{G}
+% \bXStyleBlocDefault
+% \bXBloc[4]{H}{$P_3(s)$}{G}\bXLink[$y_2=u_3$]{G}{H}
+% \bXReturn{G-H}{D}{}
+% \end{tiny}
+% \bXOutput{I}{H}\bXLink{H}{I}
+% \bXLabelStyle{green!80!black}
+% \bXLinkName[.6]{I}{$y_3$}
+% \bXLineStyle{dashed, brown, text=purple}
+% \bXReturn{H-I}{B}{}
+% \end{tikzpicture}
+% \end{minipage}
+%
+% \vspace{1em}
+% \begin{minipage}{\textwidth}
+% \begin{verbatim}
+% \begin{tikzpicture}[scale=.5]
+% \bXInput{A}
+% \bXComp{B}{A}\bXLink[$r_3$]{A}{B}
+% \bXStyleBloc{rounded corners,fill=blue!20,text=blue}
+% \bXBloc[1]{C}{$C_3(s)$}{B}\bXLink{B}{C}
+% \bXStyleBlocDefault
+% \begin{tiny}
+% \bXLineStyle{red, dotted}
+% \bXStyleBloc{draw=red!20, thick,top color=white,
+% bottom color=red!50!black}
+% \bXComp[5]{D}{C}\bXLink[$r_2$]{C}{D}
+% \bXChain[1]{D}{E/$C_2(s)$,F/$\approx1$}
+% \bXBloc[2]{G}{$P_2(s)$}{F}\bXLink[$u_2$]{F}{G}
+% \bXStyleBlocDefault
+% \bXBloc[4]{H}{$P_3(s)$}{G}\bXLink[$y_2=u_3$]{G}{H}
+% \bXReturn{G-H}{D}{}
+% \end{tiny
+% \bXOutput{I}{H}\bXLink[$y_3$]{H}{I}
+% \bXLabelStyle{green!80!black}
+% \bXLineStyle{dashed, brown, text=purple}
+% \bXReturn{H-I}{B}{}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{minipage}
+% \caption{Customized Block Diagram and Code}\label{fig:advdia}
+% \end{figure}
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}{\textwidth}
+% \begin{tikzpicture}[scale=.5]
+% \bXInput{A}\bXCompSum{B}{A}{+}{-}{+}{}
+% \bXLink[$r_3$]{A}{B}
+% \bXBloc[1]{C}{$C_3(s)$}{B}\bXLink{B}{C}
+% \begin{tiny}
+% \bXComp[5]{D}{C}\bXLink[$r_2$]{C}{D}
+% \bXChain[1]{D}{E/$C_2(s)$,F/$\approx1$}
+% \bXBloc[2]{G}{$P_2(s)$}{F}\bXLink[$u_2$]{F}{G}
+% \bXBloc[4]{H}{$P_3(s)$}{G}\bXLink[$y_2=u_3$]{G}{H}
+% \bXReturn{G-H}{D}{}
+% \end{tiny}
+% \bXOutput{I}{H}\bXLink{H}{I}\bXLinkName[.6]{I}{$y_3$}
+% \bXReturn{H-I}{B}{}
+% \bXBranchy[-5]{I}{X}
+% \bXBlocr[5]{Y}{System}{X}\bXLinkyx{H-I}{Y}{}
+% \bXBranchy[-5]{A}{Z}
+% \bXCompSum{W}{Z}{}{}{-}{+}\bXLink{Y}{W}\bXLink[$r_1$]{Z}{W}
+% \bXLink{W}{B}
+% \end{tikzpicture}
+% \end{minipage}
+%
+% \vspace{1em}
+% \begin{minipage}{\textwidth}\vrbfnt
+% \begin{verbatim}
+% \begin{tikzpicture}[scale=.5]
+% \bXInput{A}\bXCompSum{B}{A}{+}{-}{+}{}
+% \bXLink[$r_3$]{A}{B}
+% \bXBloc[1]{C}{$C_3(s)$}{B}\bXLink{B}{C}
+% \begin{tiny}
+% \bXComp[5]{D}{C}\bXLink[$r_2$]{C}{D}
+% \bXChain[1]{D}{E/$C_2(s)$,F/$\approx1$}
+% \bXBloc[2]{G}{$P_2(s)$}{F}\bXLink[$u_2$]{F}{G}
+% \bXBloc[4]{H}{$P_3(s)$}{G}\bXLink[$y_2=u_3$]{G}{H}
+% \bXReturn{G-H}{D}{}
+% \end{tiny}
+% \bXOutput{I}{H}\bXLink{H}{I}\bXLinkName[.6]{I}{$y_3$}
+% \bXReturn{H-I}{B}{}
+% \bXBranchy[-5]{I}{X}
+% \bXBlocr[5]{Y}{System}{X}\bXLinkyx{H-I}{Y}{}
+% \bXBranchy[-5]{A}{Z}
+% \bXCompSum{W}{Z}{}{}{-}{+}\bXLink{Y}{W}\bXLink[$r_1$]{Z}{W}
+% \bXLink{W}{B}
+% \end{tikzpicture}
+% \end{verbatim}
+% \end{minipage}
+% \caption{A Multi-Input, Branched Example and Code}\label{fig:branchingdia}
+% \end{figure}
+%
+% \DescribeMacro{\bXBranchx}
+% \DescribeMacro{\bXNodeShiftx}
+% \changes{v2.2}{2014/08/13}{Added Branchx and Branchy macros and made bXNodeShiftx/y obsolete} The macro to create a new \stikz\ node at some horizontal distance is given by |\bXBranchx|\oarg{distance}\marg{Previous Node}\marg{Name}. \meta{distance} is an optional argument whose default is 5 that specifies how many units to the right of \meta{Previous Node} to place this new node. \meta{Name} is the \stikz\ name for the node. You will use \meta{Name} for the \meta{Previous Node} of the first new block on this branch. I think the horizontal shift will be used rarely. |\bXNodeShiftx| is the obsolete version of this command with the same arguments. This macro is only retained for version compatibility.
+%
+% \DescribeMacro{\bXBranchy}
+% \DescribeMacro{\bXNodeShifty}
+% The macro to create a new \stikz\ node vertically displaced is given by |\bXBranchy|\oarg{distance}\marg{Previous Node}\marg{Name}. \meta{distance} is an optional argument whose default is 5 that specifies how many units below \meta{Previous Node} to place this new node. \meta{Name} is the \stikz\ name for the node. You will use \meta{Name} for the \meta{Previous Node} of the first new block on this branch. |\bXNodeShifty| is the obsolete version of this command with the same arguments. This macro is only retained for version compatibility. See Fig. \ref{fig:branchingdia}.
+%
+% \subsubsection{Personalization}
+% Since this package is built on \stikz, the full authority of the \stikz\ environment is available for personalizing the look of your block diagram.
+%
+% \DescribeMacro{\bXDefaultLineStyle}
+% The default line style is stored in |\bXDefaultLineStyle|. If you change the line style, using |\bXLineStyle| then the default can be reapplied by using |\bXDefaultLineStyle|. The default line style is a solid black, thin line with \LaTeX\ style arrow tips.
+%
+% \DescribeMacro{\bXLineStyle}
+% To change the default, use |\bXLineStyle|\marg{Style list}. \meta{Style list} is a comma separated list of \stikz\ keywords to change the display of the line. See Fig. \ref{fig:advdia} for an example. Refer to the \textsf{pgf/tikz} Manual for a complete listing of available keywords.
+%
+%
+% \DescribeMacro{\bXStyleBlocDefault}
+% The default block style is stored in |\bXStyleBlocDefault| and can be used to restore the default settings if they are changed. The default style is a 3\texttt{em} square, outlined with a thin black line.
+%
+% \DescribeMacro{\bXStyleBloc}
+% To change the default, use |\bXStyleBloc|\marg{Style list}. \meta{Style list} is a comma separated list of \stikz\ keywords to change the display of the block. See Fig. \ref{fig:advdia} for an example. Refer to the \textsf{pgf/tikz} Manual for a complete listing of available keywords.
+%
+% \DescribeMacro{\bXStyleSumDefault}
+% The default Sum style is stored in |\bXStyleSumDefault| and can be used to restore the default settings if they are changed. The default style is a circle outlined with a thin black line. The default takes the elements of the block style as a starting point.
+%
+% \DescribeMacro{\bXStyleSum}
+% To change the default, use |\bXStyleSum|\marg{Style list}. \meta{Style list} is a comma separated list of \stikz\ keywords to change the display of the block. Refer to the \textsf{pgf/tikz} Manual for a complete listing of available keywords.
+%
+%
+% \DescribeMacro{\bXDefaultLabelStyle}
+% The default line style is stored in |\bXDefaultLabelStyle|. If you change the line style, using |\bXLabelStyle| then the default can be reapplied by using |\bXDefaultLabelStyle|. The default line style is a solid black, thin line with \LaTeX\ style arrow tips.
+%
+% \DescribeMacro{\bXLabelStyle}
+% To change the default, use |\bXLabelStyle|\marg{Style list}. \meta{Style list} is a comma separated list of \stikz\ keywords change the display of the line. See Fig. \ref{fig:advdia} for an example. Refer to the \textsf{pgf/tikz} Manual for a complete listing of available keywords. \changes{v2.4}{2014/08/18}{Added discussion of the bXLabelStyle and bXDefaultLabelStyle macros.}
+%
+% \subsubsection{Scaling}
+% There are some scaling commands that are built into \stikz, I think. They are environments.
+% \DescribeEnv{tiny}\DescribeEnv{small}\DescribeEnv{Large}
+% The |tiny| environment decreases the font size to about 5pt and scales everything else down equivalently. The |small| environment decreases the font size to about 8pt. The |Large| environment decreases the font size to about 12pt. Fig. \ref{fig:scaling} shows the same block diagram with these three environments used and a normal one for reference.
+
+%
+% \begin{figure}
+% \centering
+% \begin{minipage}{\textwidth}\centering
+% \begin{tabular}{p{.4\textwidth}p{.4\textwidth}}
+% tiny\hspace{1in}
+% \begin{tikzpicture}\begin{tiny}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}\end{tiny}\end{tikzpicture}&%
+% small
+% \begin{tikzpicture}\begin{small}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}\end{small}\end{tikzpicture}\\
+% Normal
+% \begin{tikzpicture}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}\end{tikzpicture}&%
+% Large
+% \begin{tikzpicture}\begin{Large}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}\end{Large}\end{tikzpicture}
+% \end{tabular}
+% \end{minipage}
+%
+% \vspace{1em}
+% \begin{minipage}{\textwidth}\vrbfnt
+% \begin{verbatim}
+% \begin{tabular}{p{.4\textwidth}p{.4\textwidth}}
+% tiny\hspace{1in}
+% \begin{tikzpicture}\begin{tiny}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}
+% \end{tiny}\end{tikzpicture}&%
+% small
+% \begin{tikzpicture}\begin{small}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}
+% \end{small}\end{tikzpicture}\\
+% Normal
+% \begin{tikzpicture}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}\end{tikzpicture}&%
+% Large
+% \begin{tikzpicture}\begin{Large}\bXInput{A}\bXLoop[2]{A}{b/$G_1$,c/$G_2$}
+% \end{Large}\end{tikzpicture}
+% \end{tabular}
+% \end{verbatim}
+% \end{minipage}
+% \caption{A Scaling Example and Code}\label{fig:scaling}
+% \end{figure}
+%
+% \section{Tips}
+% \begin{itemize}
+% \item If you want to work in the opposite direction than the normal one, use a negative \meta{distance}. This can be useful when working with returns or branches.
+% \item If you want text under a link, you can use |\bXLinkName| macro with a negative \meta{distance} and a \meta{Previous Node} of the form |D-E|.
+% \item It is always a good idea to draw the block diagram by hand first. Then your code for this package, simple though it is, will be neater and easier to read because you can create the diagram in order.
+% \item When something really special is needed, do not forget that you may use \stikz\ commands directly in your |tikzpicture| environment. This is how I place the little filled-in blocks with the node names in Fig. \ref{fig:helps}.
+% \end{itemize}
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% \section{Implementation}
+% Here is the listing of the source code for the package. Most things here are as similar to the \textsf{schemabloc} package as I could make them. These macros group sets of \stikz\ commands together to utilize the power of \stikz\ but allowing the user to not have to dig into \textsf{pgf/tikz}.
+%
+% Normal beginning package commands to provide for making sure the package works correctly.
+% \begin{macrocode}
+\typeout{* }
+\typeout{bloX: Just an English translation of schemabloc package.}
+\typeout{bloX Copyright (C) 2014 Ben Reish}
+\typeout{* }
+\typeout{This program comes with ABSOLUTELY NO WARRANTY.}
+\typeout{This is free software, and you are welcome to redistribute it}
+\typeout{under certain conditions.}
+\typeout{* }
+% \end{macrocode}
+%
+% The package has external dependencies beyond the base installation. I am sorry.
+% \begin{macrocode}
+\RequirePackage{ifthen}
+\RequirePackage{tikz}
+\RequirePackage{pgffor}
+\usetikzlibrary{shapes,arrows}
+% \end{macrocode}
+%
+% Using the \stikz\ commands, initialize the styles for links, blocks, potatoes, and summing junctions.
+% \begin{macrocode}
+\tikzstyle{bXLineStyle}=[->,>=latex',]
+\tikzstyle{bXStyleBloc}=[draw, rectangle,]
+\tikzstyle{bXStyleBlocPotato}=[]
+\tikzstyle{bXStyleSum}=[draw, circle,]%style Sum CC
+\tikzstyle{bXLabelStyle}=[]
+% \end{macrocode}
+% \begin{macro}{\bXDefaultLineStyle}\begin{macro}{\bXLineStyle}
+% |\bXDefaultLineStyle| is used to re-establish the default line style once it has been changed by the below commands. It defines a solid line with a \LaTeX\ style arrow tip.
+% To change the default line style, |\bXLineStyle| takes one argument which is added to the default line description by \stikz.
+% \begin{macrocode}
+\newcommand{\bXDefaultLineStyle}{
+\tikzstyle{bXLineStyle}=[->,>=latex']
+}
+\newcommand{\bXLineStyle}[1]{
+\tikzstyle{bXLineStyle}+=[#1]
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\bXStyleBloc}% \begin{macro}{\bXStyleBlocDefault}
+% To re-establish the block style, use |\bXStyleBlocDefault|. To change the default, the |\bXStyleBloc| command will take an argument and add it to the current block style definition.
+% \begin{macrocode}
+\newcommand{\bXStyleBloc}[1]{
+\tikzstyle{bXStyleBloc}+=[#1]
+}
+\newcommand{\bXStyleBlocDefault}{
+\tikzstyle{bXStyleBloc}=[draw, rectangle,]
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\bXStylePotato}% \begin{macro}{\bXStylePotatoDefault}
+% To re-establish the potato block style, use |\bXStylePotatoDefault|. To change the default, the |\bXStylePotato| command will take an argument and add it to the current block style definition. \changes{v2.3}{2014/08/14}{Added the style commands for the potato which were missing.}
+% \begin{macrocode}
+\newcommand{\bXStylePotato}[1]{
+\tikzstyle{bXStyleBlocPotato}+=[#1]
+}
+\newcommand{\bXStylePotatoDefault}{
+\tikzstyle{bXStyleBlocPotato}=[draw, cloud, cloud puffs=5,]
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\bXStyleSum}\begin{macro}{\bXStyleSumDefault}
+% To re-establish the block style, use |\bXStyleSumDefault|. To change the default, the |\bXStyleSum| command will take an argument and add it to the current sum style definition.
+% \begin{macrocode}
+\newcommand{\bXStyleSum}[1]{
+\tikzstyle{bXStyleSum}+=[#1]
+}
+\newcommand{\bXStyleSumDefault}{
+\tikzstyle{bXStyleSum}=[draw, circle,]
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\bXLabelStyle}\begin{macro}{\bXLabelStyleDefault}
+% To re-establish the label style, use |\bXLabelStyleDefault|. To change the default, the |\bXLabelStyle| command will take an argument and add it to the current label style definition. This is used with the |\bXInput| and the |\bXLinkName| macros to customize the text.
+% \changes{v2.4}{2014/08/17}{Added a label style and default command to the bXInput and bXLinkName macros to allow customization of the font these two display.}
+% \begin{macrocode}
+\newcommand{\bXLabelStyle}[1]{
+\tikzstyle{bXLabelStyle}+=[#1]
+}
+\newcommand{\bXLabelStyleDefault}{
+\tikzstyle{bXLabelStyle}=[font=\normalfont,]
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\bXInput}
+% I redefined the beginning command of the block diagram to take an optional argument and place it as a label above the node. This required splitting the |\bXInput| command into three commands. The user level command is |\bXInput| which looks to see if the next character is a `|[|'. If so, it calls |\bXInputi|, else it calls |\bXInputii|. If the optional argument is used, the |\bXInputi| command takes the list of arguments and processes them. The |\bXBranchx| is called to create the extra node labels for connecting links. \changes{v2.4}{2014/08/18}{Added usage bXLabelStyle}
+% \begin{macrocode}
+\newcommand{\bXInput}{%
+ \@ifnextchar[{\@bXInputi}{\@bXInputii}
+}
+\newcommand{\@bXInputi}[2][]{%
+ \node [coordinate,name=#2,bXLabelStyle] {#1};
+ \bXBranchx[0]{#2}{#2};
+ \draw (0,0) node [anchor=east,name=#2label,] {#1};
+}
+\newcommand{\@bXInputii}[1]{%
+ \node [coordinate,name=#1] { };
+ \bXBranchx[0]{#1}{#1};
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXOutput}
+% To end the block diagram with an arrow pointing to the right, place a node at the right of the previous node to which a link can connect.
+% \begin{macrocode}
+\newcommand{\bXOutput}[3][2]{
+ \node [coordinate, right of=#3right,
+ node distance=#1em, minimum size=0em,right] (#2) {};
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXBloc}\begin{macro}{\bXBlocr}\begin{macro}{\bXBlocL}\begin{macro}{\bXBlocrL}
+% These commands create the paths which make the normal blocks, the return blocks, the normal block with link, and the return block with link. The big difference between normal blocks and return blocks is that the orientation is switched. Instead of being placed to the right of the previous node, the return blocks are placed to the left.
+% \begin{macrocode}
+\newcommand{\bXBloc}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, right of = #4right,
+node distance=#1em,bXStyleBloc,right] (#2) {#3};
+\node (#2right) at (#2.east){};
+\node (Blocrightend) at (#2.east){};
+}
+\newcommand{\bXBlocr}[4][2]{
+\node [
+ minimum height=3em, minimum width=3em, left of = #4left,
+node distance=#1em, bXStyleBloc,left] (#2) {#3};
+\node (#2left) at (#2.west){};
+}
+\newcommand{\bXBlocL}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em,
+ right of = #4right,node distance=#1em,bXStyleBloc,right] (#2) {#3};
+\node (#2right) at (#2.east){};
+\node (Blocrightend) at (#2.east){};
+ \draw [bXLineStyle,auto] (#4) -- node[name=#4-#2] {} (#2);
+}
+\newcommand{\bXBlocrL}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, left of = #4left,
+node distance=#1em, bXStyleBloc,left] (#2) {#3};
+\node (#2left) at (#2.west){};
+\node (Blocleftend) at (#2.west){};
+ \draw [bXLineStyle,auto] (#4) -- node[name=#4-#2] {} (#2);
+}
+
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
+% \begin{macro}{\bXBlocPotato}
+% This command gives the user an option for a nondescript object by using \stikz's built in |cloud| keyword.
+% \begin{macrocode}
+\newcommand{\bXBlocPotato}[4][2]{
+\node [draw, cloud, cloud puffs=5, draw,
+ minimum height=3em, minimum width=5em, right of = #4right,
+node distance=#1em,bXStyleBlocPotato,right] (#2) {#3};
+\node (#2right) at (#2.east){};
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXOnlyOneBloc}
+% This macro creates an entire single block, block diagram by itself. It adds an input, a block, an output, and two links with the four arguments being the labels for everything.
+% \begin{macrocode}
+\newcommand{\bXonlyOneBloc}[4][1.5]{
+\bXInput{E1}
+\bXBloc[#1]{B1}{#3}{E1}
+\bXOutput[#1]{S1}{B1}
+\bXLink{E1}{B1}{#2}
+\bXLink{B1}{S1}{#4}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXLink}\begin{macro}{\bXLinkxy}\begin{macro}{\bXLinkyx}
+% These macros tell \stikz\ where to place links, between which blocks. The normal macro is |\bXLink| which takes 3 arguments. It draws straight lines between the right edge of the previous node and the left edge of the next node. It names the link \meta{Previous Node}-\meta{Next Node}. This allows the selection of the middle of the link between to blocks for the having a return link drawn from. This macro will draw diagonal lines between nodes on different branches of a diagram. To maintain square corners, use the |\bXLinkxy| to go first horizontally, then vertically; or use |\bXLinkyx| to go first vertically and then horizontally.
+% \begin{macrocode}
+\newcommand{\bXLink}[3][]{
+ \draw [bXLineStyle,auto] (#2) -- node[name=#2-#3] {#1} (#3);
+}
+\newcommand{\bXLinkyx}[2]{
+\draw [bXLineStyle] (#1.south) |- (#2) ;
+}
+\newcommand{\bXLinkxy}[3][]{
+\draw [bXLineStyle] (#2) -|
+ node[name=#2-#3,near end,right] {#1} (#3) ;
+}
+% \end{macrocode}
+% \begin{macro}{\bXReturn}
+% This macro creates two nodes, one directly below the second argument and one directly below the third argument. Then it draws straight lines to connect them.
+% \begin{macrocode}
+\newcommand{\bXReturn}[4][4]{
+\node [below of=#2, node distance=#1em,
+ minimum size=0em](return#2) {};
+\draw [bXLineStyle] (#2.south)--(return#2.south)
+-| node[name=#2-#3,near end,right] {#4} (#3) ;
+}
+% \end{macrocode}
+% \begin{macro}{\bXLinkName}
+% This macro adds a label to the output of a diagram at the end like the optional argument does on the input of the diagram.
+% \begin{macrocode}
+\newcommand{\bXLinkName}[3][0.4]{
+\node[above of=#2, node distance=#1em, bXLabelStyle] (#2name) at (#2) {#3};
+}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\bXCompSum}
+% |\bXCompSum| is broken into three macros to be able to accommodate the starred version. They all are user level commands so they can be called directly. Generally, though, use |\bXCompSum| or |\bXCompSum*|. |\bXCompSum| will check if the next character is a |*|. If so, it will call |\bXCompSumNorm|. Otherwise, it calls |\bXCompSumOnly|. |\bXCompSumOnly| places the `X' in the circle and creates four nodes for the labels of the last four arguments inside the circle. The other command places the last four arguments outside the circle.
+%
+% \changes{v2.4}{2014/08/14}{Converted bXCompSumNorm and bXCompSumOnly to private functions.} Update: I converted |\bXCompSumNorm| and |\bXCompSumOnly| to private functions. Now they have |@|'s in them.
+% \begin{macrocode}
+\newcommand*{\bXCompSum}{\@ifstar\bX@CompSumNorm\bX@CompSumOnly}
+\newcommand{\bX@CompSumOnly}[7][4]{
+ \node [draw, circle,minimum size=2em,
+ right of=#3,node distance=#1em] (#2) {};
+ \node [draw, cross out,minimum size=1.414em,
+ right of=#3,node distance=#1em] {};
+ \node [above of=#2,node distance=0.6em] {$#4$};
+ \node [below of=#2,node distance=0.6em] {$#5$};
+ \node [left of=#2,node distance=0.6em] {$#6$};
+ \node [right of=#2,node distance=0.6em] {$#7$};
+\node (#2right) at (#2.east){};
+\node (#2left) at (#2.west){};
+}
+\newcommand{\bX@CompSumNorm}[7][4]{
+ \node [draw, circle,minimum size=1.5em,
+ right of=#3,node distance=#1em,
+ label=85:$#4$,label=-85:$#5$,label=175:$#6$,
+ label=5:$#7$,bXStyleSum] (#2) {};
+\node (#2right) at (#2.east){};
+\node (#2left) at (#2.west){};
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXComp}
+% In an effort to reduce the keystrokes needed to produce a comparator, |\bXComp| is offered. It is broken into three macros to take care of whether or not the user wants an `X'. These macros just hardcode some inputs to the |\bXCompSum| macro.
+% \changes{v2.4}{2014/08/14}{Converted bXCompNorm and bXCompOnly to private functions.}
+% \begin{macrocode}
+\newcommand*{\bXComp}{\@ifstar\bX@CompNorm\bX@CompOnly}
+\newcommand{\bX@CompOnly}[3][4]{
+\bXCompSum[#1]{#2}{#3}{}{-}{+}{}
+}
+\newcommand{\bX@CompNorm}[3][4]{
+\bXCompSum*[#1]{#2}{#3}{}{-}{+}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXCompa}
+% Again, in an effort to reduce keystrokes, a macro is offered to make a comparator whose negative input is from above. It, too, is split into three macros to handle the starred version.
+% \changes{v2.4}{2014/08/14}{Converted bXCompaNorm and bXCompaOnly to private functions.}
+% \begin{macrocode}
+\newcommand*{\bXCompa}{\@ifstar\bX@CompaNorm\bX@CompaOnly}
+\newcommand{\bX@CompaOnly}[3][4]{
+\bXCompSum[#1]{#2}{#3}{-}{}{+}{}
+}
+\newcommand{\bX@CompaNorm}[3][4]{
+\bXCompSum*[#1]{#2}{#3}{-}{}{+}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXSuma}
+% To meet the same need as that of |\bXCompa|, but with a summing junction, |\bXSuma| is offered.
+% \changes{v2.4}{2014/08/14}{Converted bXSumaNorm and bXSumaOnly to private functions.}
+% \begin{macrocode}
+\newcommand*{\bXSuma}{\@ifstar\bX@SumaNorm\bX@SumaOnly}
+\newcommand{\bX@SumaOnly}[3][4]{
+\bXCompSum[#1]{#2}{#3}{+}{}{+}{}
+}
+\newcommand{\bX@SumaNorm}[3][4]{
+\bXCompSum*[#1]{#2}{#3}{+}{}{+}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXSumb}
+% To meet the same need as that of |\bXComp|, but with a summing junction, |\bXSumb| is offered.
+% \changes{v2.4}{2014/08/14}{Converted bXSumbNorm and bXSumbOnly to private functions.}
+% \begin{macrocode}
+\newcommand*{\bXSumb}{\@ifstar\bX@SumbNorm\bX@SumbOnly}
+\newcommand{\bX@SumbOnly}[3][4]{
+\bXCompSum[#1]{#2}{#3}{}{+}{+}{}
+}
+\newcommand{\bX@SumbNorm}[3][4]{
+\bXCompSum*[#1]{#2}{#3}{}{+}{+}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXSum}
+% I think this macro is for printing out an empty comparator or summing junction with few keystrokes. I think it is redundant, but here it is.
+% \begin{macrocode}
+\newcommand{\bXSum}[6][4]{
+ \node [draw, circle,minimum size=1.5em,
+ right of=#3,node distance=#1em,
+ label=175:$#4$,label=-85:$#5$,
+ label=85:$#6$,bXStyleSum] (#2) {};
+\node (#2right) at (#2.east){};
+\node (#2left) at (#2.west){};
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bXBranchy}\begin{macro}{\bXNodeShifty}
+% The |\bXBranchy| macro is used to create a node vertically displaced from the third argument by the first argument. This allows for multiple inputs and outputs in a block diagram. It creates the node names right and left for other macros to use. The |\bXNodeShifty| macro is retained for version compatability.
+% \begin{macrocode}
+\newcommand{\bXBranchy}[3][5]{
+\node [below of=#2, node distance=#1em, minimum size=0em](#3) {};
+\node (#3right) at (#3){};
+\node (#3left) at (#3){};
+}
+\newcommand{\bXNodeShifty}[3][5]{
+ \bXBranchy[#1]{#2}{#3}
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\bXBranchx}\begin{macro}{\bXNodeShiftx}
+% The |\bXBranchx| macro is used to create a node horizontally displaced from the third argument by the first argument. It creates the node names right and left for other macros to use. The |\bXNodeShiftx| macro is retained for version compatability.
+% \begin{macrocode}
+\newcommand{\bXBranchx}[3][5]{
+\node [right of=#2, node distance=#1em, minimum size=0em](#3) {};
+\node (#3right) at (#3){};
+\node (#3left) at (#3){};
+}
+\newcommand{\bXNodeShiftx}[3][5]{
+ \bXBranchx[#1]{#2}{#3}
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\bXChain}
+% A chain is a set of blocks connected to each other created from a list. This function leans heavily on the \stikz\ |foreach| command. There are a couple of special versions of this command which were previously (in \textsf{schemabloc}) used together unsuccessfully. I don't think \stikz\ allows the combination of its versions of the |foreach| command. I simplified the use to be a selection from a list of comma-separated values of the form: a/b,c/d,\ldots which was useful to me. I then used a global let statement to redefine what |\lastx| was each iteration. This seems to work. The |\typeout| is for debugging. I like the lists so I left it un-commented.
+% \changes{v2.0}{2014/08/01}{Simplified the foreach statement from tikz and applied a global let statement}
+% \begin{macrocode}
+\newcommand{\bXChain}[3][4]{
+ \def\lastx{#2}%
+ \foreach \x / \y in {#3}%
+ {\bXBlocL[#1]{\x}{\y}{\lastx} %
+ \typeout{\x, \y, \lastx}%
+ \global\let\lastx\x}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXChainReturn}
+% This macro has the same machinations that the previous one does, but is to be used on the return side, so the block command is swapped out with |\bXBlocrL|. Otherwise, it works just as the |\bXChain| macro does.
+% \begin{macrocode}
+\newcommand{\bXChainReturn}[3][4]{
+ \def\lastx{#2}%
+ \foreach \x / \y in {#3}%
+ {\bXBlocrL[#1]{\x}{\y}{\lastx} %
+ \typeout{\x, \y, \lastx}%
+ \global\let\lastx\x}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXOnlyLoop}
+% This command is supposed to create a block diagram for you, but it errors out so I have removed it from this version of the \blox\ package. \stikz\ can not find a node that it is looking for and I haven't figured that one out yet.
+% \changes{v2.2}{2014/08/13}{Removed the bXOnlyLoop macro and bXLoopReturn macro for further study.}
+% \begin{macrocode}
+% \newcommand{\bXOnlyLoop}[4][4]{
+% \bXComp[#1]{Comp#2}{#2}\bXLink{#2}{Comp#2}
+% \bXChain[#1]{Comp#2}{#3}
+% \bXOutput[#1]{#4}{BlocdeFin}
+% \draw [bXLineStyle,auto] (Blocrightend.base) --
+% node[name=FindeChain-#4] {} (#4);
+% \bXReturn{FindeChain-#4}{Comp#2}{}
+% }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXLoop}
+% This macro is designed to make a loop diagram from a list of values. You make an input and then hand this macro a \meta{distance}, the name of your input, and a list like: |a/$G_1$,b/$G_2$|. It just draws a line from the end of the list of block back to the comparator.
+% \begin{macrocode}
+\newcommand{\bXLoop}[3][4]{
+\bXComp[#1]{Comp#2}{#2}\bXLink{#2}{Comp#2}
+\bXChain[#1]{Comp#2}{#3}
+\draw [bXLineStyle,auto,-] (Blocrightend.base) --++
+ (1em,0)coordinate[name=EndofChain];
+\bXReturn{EndofChain}{Comp#2}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bXLoopReturn}
+% This is the same idea as the previous macro, but adds a second list argument which allows for a set of blocks to be set on the return loop as well. It, too, does not work properly, so I have commented it out of this version.
+% \begin{macrocode}
+% \newcommand{\bXLoopReturn}[4][4]{
+% \bXComp[#1]{Comp#2}{#2}\bXLink{#2}{Comp#2}
+% \bXChain[#1]{Comp#2}{#3}
+% \draw [bXLineStyle,auto,-] (Blocrightend.base) --++
+% (1em,0)coordinate[name=FindeChain];
+% \bXBranchy[5]{FindeChain}{bXDebutReturn}
+% \bXChainReturn[#1]{bXDebutReturn}{#4}
+% \draw [bXLineStyle,-] (FindeChain) |- (bXDebutReturn.west) ;
+% \draw [bXLineStyle] (Blocleftend.base) -|
+% node[name=bXNomReturn,near end,right] {} (Comp#2) ;
+% }
+% \end{macrocode}
+% \end{macro}
+% \Finale
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/blox/blox.pdf b/graphics/pgf/contrib/blox/blox.pdf
new file mode 100644
index 0000000000..f6d2abd72c
--- /dev/null
+++ b/graphics/pgf/contrib/blox/blox.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/bodegraph/README b/graphics/pgf/contrib/bodegraph/README
new file mode 100644
index 0000000000..2d16e1ac74
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/README
@@ -0,0 +1,10 @@
+Ce package permet de tracer les diagrammes de Bode, Black et Nyquist à l’aide de
+Gnuplot et Tikz. Les fonctions de transfert élémentaires et les correcteurs courants
+sont préprogrammés pour être utilisés dans les fonctions de tracé.
+
+This package allows you to draw the Bode plots, Nyquist, and Black using Gnuplot
+and Tikz. Elementary Functions Transfer and basics correctors are preprogrammed
+to be used.
+
+Author's name: Papanicola Robert
+License type: lppl
diff --git a/graphics/pgf/contrib/bodegraph/bodegraph.pdf b/graphics/pgf/contrib/bodegraph/bodegraph.pdf
new file mode 100644
index 0000000000..1d5ddba41d
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/bodegraph.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/bodegraph/bodegraph.sty b/graphics/pgf/contrib/bodegraph/bodegraph.sty
new file mode 100644
index 0000000000..812ca7e2c8
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/bodegraph.sty
@@ -0,0 +1,679 @@
+% !TeX root = bodegraph.tex
+
+\NeedsTeXFormat{LaTeX2e}[1999/01/01]
+\ProvidesPackage{bodegraph}[2009/04/06]
+
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+\RequirePackage{ifsym}
+
+
+\usetikzlibrary{shapes,arrows,backgrounds,decorations.markings}
+
+%macros commande schéma-blocs
+
+\def\valpi{3.1415957}
+\def\valpas{10}
+\def\Unitx{}
+\def\Unity{}
+
+
+\newcounter{idGnuplot}
+
+\newcommand{\OrdBode}[1]{\def\valpas{#1}}
+
+\newcommand{\UnitedB}{
+\def\Unitx{rad/s}
+\def\Unity{dB}
+}
+
+\newcommand{\UniteDegre}{
+\def\Unitx{rad/s}
+\def\Unity{$~^\circ$}
+}
+
+\tikzset{
+ ref points/.style={circle,draw, black, opacity=0.7,
+ fill, minimum size= 2pt, inner sep=0},
+ gnuplot def/.style={samples=50,id=\arabic{idGnuplot},prefix=gnuplot/\jobname/},
+ Bode lines/.style={very thick, blue},
+ Bode lines 2/.style={Bode lines, red},
+ asymp lines/.style={Bode lines,thin},
+ asymp lines 2/.style={bode line 2,thin},
+ semilog lines/.style={line width=0.35mm, red},
+ semilog lines 2/.style={semilog lines, brown!50 },
+ semilog half lines/.style={semilog lines 2, dashed },
+ semilog label x/.style={semilog lines,below,font=\tiny},
+ semilog label y/.style={semilog lines,right,font=\tiny},
+ Black lines/.style={very thick, blue},
+ Black grid/.style={ultra thin,brown},
+ Black abaque mag/.style={gray,ultra thin,dashed,smooth},
+ Black abaque phase/.style={gray,ultra thin,smooth},
+ Black label points/.style={font=\tiny},
+ Black label axes/.style={Black grid, font=\tiny},
+ Nyquist lines/.style={very thick, blue},
+ Nyquist grid/.style={ultra thin,brown},
+ Nyquist label axes/.style={Nyquist grid,font=\tiny},
+ Nyquist label points/.style={font=\tiny},
+ Temp lines/.style={very thick, blue},
+ Temp grid/.style={ultra thin,brown},
+ Temp label axes/.style={Temp grid, font=\tiny},
+ Temp label points/.style={font=\tiny},
+ Abaque grid/.style={ultra thin,brown!80},
+ Abaque lines/.style={thick, blue,smooth},
+}
+
+
+\newcommand{\semilog}{\@ifstar\semilogS\semilogNS}
+\newcommand{\semilogNS}[5][]{
+\pgfmathparse{int(#3-1)}\let\Xmax\pgfmathresult
+\foreach \ee in{#2,...,\Xmax}{
+ \foreach \x in {1,2,3,4,5,6,7,8,9}{
+\draw[semilog lines 2] ({log10(\x)+\ee},#4) -- ({log10(\x)+\ee},#5);}
+\draw[semilog lines] (\ee,#4)node[semilog label x]{$10^{\ee}$} -- ({\ee},#5);
+};
+\draw[semilog lines] ({#3},#4)node[semilog label x]{$10^{#3}$} -- ({#3},#5);
+\pgfmathparse{int(#4+\valpas)}
+\let\Valsuivante\pgfmathresult
+\foreach \yy in {#4,\Valsuivante,...,#5}{
+\draw[semilog lines] (#2,\yy) node[semilog label y,left]{$\yy$} -- ({#3},\yy);};
+\node[semilog label y, node distance=0.3em]at (#2,#5) { \Unity};
+\node[semilog label x, right,node distance=0.8em]at (#3,#4){ \Unitx};
+\def\Unitx{}
+\def\Unity{}
+}
+\newcommand{\semilogS}[5][]{
+\semilog[#1]{#2}{#3}{#4}{#5}
+\pgfmathparse{int(#3-1)}\let\Xmax\pgfmathresult
+\foreach \ee in{#2,...,\Xmax}{
+ \foreach \x in {1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5}{
+\draw[semilog half lines] ({log10(\x)+\ee},#4) -- ({log10(\x)+\ee},#5);}
+};
+}
+
+
+\newcommand{\semilogNG}[2]{
+\pgfmathparse{int(#1-1)}\let\Xmax\pgfmathresult
+\foreach \ee in{0,...,\Xmax}{
+ \foreach \x in {1,2,3,4,5,6,7,8,9}{
+\draw[semilog lines 2] ({log10(\x)+\ee},0) -- ({log10(\x)+\ee},#2);}
+};
+\draw[semilog lines] ({#1},0) -- ({#1},#2);
+\pgfmathparse{int(0+\valpas)}
+\let\Valsuivante\pgfmathresult
+\foreach \yy in {0,\Valsuivante,...,#2}{
+\draw[semilog lines] (0,\yy) -- ({#1},\yy);};
+\node[semilog label y, node distance=0.3em]at (0,#2) {\tiny \Unity};
+\node[semilog label x, right,node distance=0.8em]at (#1,0){\tiny \Unitx};
+\def\Unitx{}
+\def\Unity{}
+\pgfmathparse{int(#1-1)}\let\Xmax\pgfmathresult
+\foreach \ee in{0,...,\Xmax}{
+ \foreach \x in {1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5}{
+\draw[semilog half lines] ({log10(\x)+\ee},0) -- ({log10(\x)+\ee},#2);}
+};
+}
+
+
+\newcommand{\KAmp}[1]{20*log10(abs(#1))}
+\newcommand{\KArg}[1]{0}
+
+\newcommand{\POAmp}[2]{20*log10(abs(#1/sqrt(1+(#2*10**t)**2)))}
+
+\newcommand{\POAmpng}[2]{20*log10(abs(#1/sqrt(1+(#2*10^(\t))^2)))}
+
+\newcommand{\POAmpAsymp}[2]{(t<log10(1/(#2))?20*log10(#1):+20*log10(#1/(#2))-20*log10(10**t))}
+\newcommand{\POArg}[2]{-180/\valpi*atan(#2*10**t)}
+\newcommand{\POArgAsymp}[2]{(t<log10(1/(#2))? 0:-90)}
+\newcommand{\POAmpReel}[2]{20*log10(abs(#1/sqrt(1+(#2*t)**2)))}
+\newcommand{\POArgReel}[2]{-180/\valpi*atan(#2*t)}
+
+\newcommand{\SOAmp}[3]{20*log10(abs(#1/sqrt((1-(10**t/#3)**2)**2+(2*#2*(10**t/#3))**2)))}
+\newcommand{\SOAmpAsymp}[3]{(t<log10(#3)?20*log10(#1):+20*log10(#1)+40*log10(#3)-40*log10(10**t))}
+\newcommand{\SOArg}[3]{180/\valpi*(atan((#3**2-(10**t)**2)/(2*#2*#3*10**t))-\valpi/2)}
+\newcommand{\SOArgAsymp}[3]{(t<log10(#3)? 0:-180)}
+\newcommand{\SOAmpReel}[3]{20*log10(abs(#1/sqrt((1-(t/#3)**2)**2+(2*#2*(t/#3))**2)))}
+\newcommand{\SOArgReel}[3]{180/\valpi*(atan((#3**2-(t)**2)/(2*#2*#3*t))-\valpi/2)}
+
+\newcommand{\IntAmp}[1]{20*log10(abs(#1/(10**t)))}
+\newcommand{\IntArg}[1]{-90}
+
+%Retard R(p)=exp(-T*p)
+\newcommand{\RetAmp}[1]{0}
+\newcommand{\RetArg}[1]{-#1*10**t}
+
+%Correcteur PI \PIAmp K*(1+Ti*p)/(Ti*p)
+\newcommand{\PIAmp}[2]{\IntAmp{1}+20*log10(#1/#2)-\POAmp{1}{#2}}
+\newcommand{\PIArg}[2]{\IntArg{1}+(\POArg{#1}{#2})*(-1)}
+\newcommand{\PIAmpAsymp}[2]{\IntAmp{1}+20*log10(#1/#2)-\POAmpAsymp{1}{#2}}
+\newcommand{\PIArgAsymp}[2]{\IntArg{1}+(\POArgAsymp{#1}{#2})*(-1)}
+
+%Correcteur PID série \PIDAmp K*(1+Ti*p)/(Ti*p)(1+Td*p)
+\newcommand{\PIDAmp}[3]{\IntAmp{1}+20*log10(#1/#2)-\POAmp{1}{#2}-\POAmp{1}{#3}}
+\newcommand{\PIDArg}[3]{\IntArg{1}-\POArg{#1}{#2}-\POArg{1}{#3} }
+\newcommand{\PIDAmpAsymp}[3]{\IntAmp{1}+20*log10(#1/#2)-\POAmpAsymp{1}{#2}-\POAmpAsymp{1}{#3}}
+\newcommand{\PIDArgAsymp}[3]{\IntArg{1}-\POArgAsymp{#1}{#2}-\POArgAsymp{1}{#3} }
+
+%Correcteur PD \PDAmp K*(1+Td*p)
+\newcommand{\PDAmp}[2]{20*log10(abs(#1*sqrt(1+(#2*10**t)**2)))}
+\newcommand{\PDArg}[2]{-\POArg{(1)}{#2}}
+\newcommand{\PDAmpAsymp}[2]{(t<log10(1/#2)?20*log10(#1):+20*log10(#1*#2)+20*log10(10**t))}
+\newcommand{\PDArgAsymp}[2]{-\POArgAsymp{(1)}{#2}}
+
+%Correcteur Avance de phase (Retard) C(p)=K(1+a*T1*p)/(1+T1*p)
+\newcommand{\APAmp}[3]{\POAmp{#1}{#2}+\PDAmp{1}{(#3*#2)}}
+\newcommand{\APArg}[3]{\POArg{#1}{#2}+\PDArg{1}{(#3*#2)}}
+\newcommand{\APAmpAsymp}[3]{\POAmpAsymp{#1}{#2}+\PDAmpAsymp{1}{(#3*#2)}}
+\newcommand{\APArgAsymp}[3]{\POArgAsymp{#1}{#2}+\PDArgAsymp{1}{(#3*#2)}}
+
+%Correcteur Retard de phase (Retard) C(p)=K(1+T1*p)/(1+b*T1*p)
+\newcommand{\RPAmp}[3]{\PDAmp{#1}{#2}+\POAmp{1}{(#3*#2)}}
+\newcommand{\RPArg}[3]{\PDArg{#1}{#2}+\POArg{1}{(#3*#2)}}
+\newcommand{\RPAmpAsymp}[3]{\PDAmpAsymp{#1}{#2}+\POAmpAsymp{1}{(#3*#2)}}
+\newcommand{\RPArgAsymp}[3]{\PDArgAsymp{#1}{#2}+\POArgAsymp{1}{(#3*#2)}}
+
+%Premier ordre généralisé C(p)=K(a1+a2*p)/(b1+b2*p)
+\newcommand{\POgAmp}[5]{\POAmp{(#1*#2/#4)}{(#5/#4)}-\POAmp{1}{(#3/#2)}}
+\newcommand{\POgArg}[5]{\POArg{(#1*#2/#4)}{(#5/#4)}-\POArg{1}{(#3/#2)}}
+\newcommand{\POgAmpAsymp}[5]{\POAmpAsymp{(#1*#2/#4)}{(#5/#4)}-\POAmpAsymp{1}{(#3/#2)}}
+\newcommand{\POgArgAsymp}[5]{\POArgAsymp{(#1*#2/#4)}{(#5/#4)}-\POArgAsymp{1}{(#3/#2)}}
+
+
+
+\newcommand{\SOncArg}[4]{
+\pgfmathparse{#1/#2}\let\ValK\pgfmathresult
+\pgfmathparse{sqrt(#2/#4)}\let\ValW\pgfmathresult
+\pgfmathparse{#3/#1*\ValW/2}\let\ValZ\pgfmathresult
+\SOArg{\ValK}{\ValZ}{\ValW}}
+
+\newcommand{\SOBlack}[3]{
+\SOArg{#1}{#2}{3},\SOAmp{#1}{#2}{3}
+}
+
+\newcommand{\POBlack}[2]{
+\POArg{#1}{#2},\POAmp{#1}{#2}
+}
+
+
+
+
+\def\CorpsPol{\tiny}
+\def\puce{\tiny $\circ$}
+
+
+
+
+\newcommand{\BodeGraph}{\@ifstar\BodeGraphText\BodeGraphNoText}
+%vielles définitions
+\newcommand{\BodeAmp}{\@ifstar\BodeGraphText\BodeGraphNoText}
+\newcommand{\BodeArg}{\@ifstar\BodeGraphText\BodeGraphNoText}
+
+\newcommand{\BodeGraphNoText}[3][]{
+\stepcounter{idGnuplot}
+\draw [Bode lines, gnuplot def,domain=#2,#1] plot[parametric,]
+function{log10(10**t),#3};}
+
+\newcommand{\BodeGraphText}[4][]{
+\stepcounter{idGnuplot}
+\draw [Bode lines, gnuplot def,domain=#2,#1] plot[parametric,]
+function{log10(10**t),#3}node #4;}
+
+
+
+
+
+\newcommand{\BodeAmpPointA}{\BodePoint}
+
+\newcommand{\BodePoint}[3][gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\BodeGraph*[gnuplot def,#1,samples=2,,only marks,mark=.]{\LW:\LW}{#3}{[name=NBode,ref points]{}}
+};
+}
+
+\newcommand{\BlackGraph}{\@ifstar\BlackGraphText\BlackGraphNoText}
+\newcommand{\BlackGraphNoText}[3][Black lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\draw [Black lines,gnuplot def,domain=#2,#1] plot[parametric,]
+function{#3};}
+\newcommand{\BlackGraphText}[4][Black lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\draw [Black lines,gnuplot def,domain=#2,#1] plot[parametric,]
+function{#3}node#4;}
+
+
+\newcommand{\BlackPoint}{\@ifstar\BlackPointPos\BlackPointNoPos}
+\newcommand{\BlackPointNoPos}[3][gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\BlackGraph*[Black lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{[right,Black label points]{ \W} node[name=NBlack,ref points]{}}
+};
+}
+\newcommand{\BlackPointPos}[3][gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W/\Pos in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\BlackGraph*[Black lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{[\Pos,Black label points]{ \W} node[name=NBlack,ref points]{}}
+};
+}
+
+\newcommand{\BlackText}{\@ifstar\BlackTextNoPoint\BlackTextPoint}
+\newcommand{\BlackTextPoint}[3][gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W/\Pos/\Ttext in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\BlackGraph*[Black lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{[\Pos]{\CorpsPol \Ttext }node[name=NBlack,ref points]{}}
+};
+}
+\newcommand{\BlackTextNoPoint}[3][gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W/\Pos/\Ttext in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\BlackGraph*[Black lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{[\Pos]{\CorpsPol \Ttext }node[name=NBlack]{}}
+};
+}
+
+
+\newcommand{\NyquistGraph}{\@ifstar\NyquistGraphText\NyquistGraphNoText}
+\newcommand{\NyquistGraphNoText}[4][Nyquist lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\draw [Nyquist lines,gnuplot def,domain=#2,#1] plot[parametric,]
+function{10**((#3)/20)*cos(\valpi/180*(#4)),10**((#3)/20)*sin(\valpi/180*(#4))};}
+\newcommand{\NyquistGraphText}[5][Nyquist lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\draw [Nyquist lines,gnuplot def,domain=#2,#1] plot[parametric,]
+function{10**((#3)/20)*cos(\valpi/180*(#4)),10**((#3)/20)*sin(\valpi/180*(#4))}node#5;}
+
+\newcommand{\NyquistPoint}{\@ifstar\NyquistPointPos\NyquistPointNoPos}
+\newcommand{\NyquistPointNoPos}[4][Nyquist lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\NyquistGraph*[Nyquist lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{#4}{[right,Nyquist label points]{\W} node[ref points]{}}
+};
+}
+\newcommand{\NyquistPointPos}[4][Nyquist lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W/\Pos in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\NyquistGraph*[Nyquist lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{#4}{[\Pos,Nyquist label points]{\W}node[ref points]{}}
+};
+}
+
+\newcommand{\NyquistText}{\@ifstar\NyquistTextNoPoint\NyquistTextPoint}
+\newcommand{\NyquistTextPoint}[4][Nyquist lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W/\Pos/\Ttext in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\NyquistGraph*[Nyquist lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{#4}{[\Pos,Nyquist label points]{\Ttext}node[name=NNyquist,ref points]{}}
+};
+}
+\newcommand{\NyquistTextNoPoint}[4][Nyquist lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\foreach \W/\Pos/\Ttext in {#2}{
+\pgfmathparse{log10(\W)}
+\let\LW\pgfmathresult
+\NyquistGraph*[Nyquist lines,gnuplot def,#1,samples=2,only marks,mark=.]
+{\LW:\LW}{#3}{#4}{[\Pos,Nyquist label points]{ \Ttext} node[name=NNyquist]{}}
+};
+}
+
+
+
+
+
+\def\valgridNx{1cm}
+\def\valgridNy{1cm}
+
+
+
+\newcommand{\NyquistGrid}{\@ifstar\NyquistGridStar\NyquistGridNoStar}
+
+\newcommand{\NyquistGridStar}[1][]{
+\begin{pgfonlayer}{background}
+\draw[xstep=\valgridNx ,ystep=\valgridNy,Nyquist grid,#1] (current bounding box.south west) grid (current bounding box.north east);
+\draw[-latex,Nyquist label axes](current bounding box.west|-0,0) --(current bounding box.east|-0,0)--++(0.2,0)node[above,Nyquist label axes]{ $\mathcal{R}_e$};
+\draw[-latex,,Nyquist label axes](current bounding box.south-|0,0) --(current bounding box.north-|0,0)--++(0,0.2)node[right,Nyquist label axes]{$\mathcal{I}_m$};
+\end{pgfonlayer}
+}
+\newcommand{\NyquistGridNoStar}[1][]{
+\begin{pgfonlayer}{background}
+\node(PointCritique) at (-1,0){};
+\draw[dotted,,Nyquist label axes,dotted] (0,0) circle (1);
+\draw[xstep=\valgridNx ,ystep=\valgridNy,Nyquist grid,#1] (current bounding box.south west) grid (current
+bounding box.north east);
+\draw[-latex,,Nyquist label axes](current bounding box.west|-0,0) --(current bounding box.east|-0,0)--++(0.2,0)node[above,,Nyquist label axes]{$\mathcal{R}_e$};
+\draw[-latex,,Nyquist label axes](current bounding box.south-|0,0) --(current bounding box.north-|0,0)--++(0,0.5)node[right,,Nyquist label axes]{$\mathcal{I}_m$};
+\node[ref points](PointCritique) at (-1,0){};
+\foreach \xx in {-1,1}
+{\node[above,black] at (\xx,0){\tiny \xx};};
+\foreach \xx in {-1,0,1}
+{\node[above right,black] at (0,\xx){\tiny \xx};};
+\end{pgfonlayer}
+}
+
+
+
+\def\valgridBx{45}
+\def\valgridBy{10}
+\def\valmaxBf{-180}
+
+\newcommand{\BlackGrid}{\@ifstar\BlackGridStar\BlackGridNoStar}
+\newcommand{\BlackGridStar}{
+\begin{pgfonlayer}{background}
+\coordinate (OO) at (0,0); \coordinate[right of= OO,node distance=1em] (OOt);
+\draw[-latex,Black label axes](current bounding box.west|-0,0) --(OOt)node[above]{\tiny $~^\circ$};
+\draw[-latex,Black label axes](current bounding box.south-|0,0) --(current bounding box.north-|0,0)coordinate[name=finaxe,pos=1.01]--(finaxe)node[right]{\tiny dB};
+\draw[xstep=\valgridBx ,ystep=\valgridBy,Black grid] (current bounding box.south west) grid (current
+bounding box.north east);
+\end{pgfonlayer}
+}
+\newcommand{\BlackGridNoStar}{
+\begin{pgfonlayer}{background}
+\node(PointCritique) at (-180,0){};
+\node(Pointzero) at (-0,0){};
+\node(Pointmax) at (\valmaxBf,0){};
+\coordinate (OO) at (0,0); \coordinate[right of= OO,node distance=1em] (OOt);
+\draw[xstep=\valgridBx ,ystep=\valgridBy,Black grid] (current bounding box.south west) grid (current
+bounding box.north east);
+\draw[-latex,Black label axes](current bounding box.west|-0,0) --(OOt)node[above]{\tiny $~^\circ$};
+\draw[-latex,Black label axes](current bounding box.south-|0,0) --(current bounding box.north-|0,0)node[right]{\tiny dB};
+
+\node[ref points](PointCritique) at (-180,0){};
+
+\foreach \xx in {0,-\valgridBx,...,\valmaxBf}{\node[below,Black label axes] at (\xx,0){\tiny \xx};};
+\foreach \xx in {-\valgridBy,+\valgridBy}{\node[right,Black label axes] at (0,\xx){\tiny \xx};};
+\end{pgfonlayer}
+}
+
+\newcommand{\RepTemp}{\@ifstar\RepTempText\RepTempNoText}
+
+\newcommand{\RepTempNoText}[3][Temp lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\draw [Temp lines,gnuplot def,domain=#2,#1] plot function{#3};
+}
+\newcommand{\RepTempText}[4][Temp lines,gnuplot def]{
+\stepcounter{idGnuplot}
+\draw [Temp lines, gnuplot def,domain=#2,#1] plot function{#3}node #4;
+}
+
+\def\valgridx{1}
+\def\valmaxx{1}
+\def\valgridy{1}
+\def\valmaxy{1}
+\def\UnitS{s}
+
+
+\newcommand{\TempGrid}{\@ifstar\TempGridStar\TempGridNoStar}
+\newcommand{\TempGridNoStar}[1][]{
+\begin{pgfonlayer}{background}
+\node(Pointzero) at (-0,0){};
+\draw[xstep=\valgridx ,ystep=\valgridy,Temp grid,#1] (current bounding box.south west) grid (current
+bounding box.north east);
+\draw[-latex,Temp label axes](current bounding box.west|-0,0) --(current bounding box.east|-0,0)coordinate[name=finaxe,pos=1.01]--(finaxe)node[above]{\tiny $t$};
+\draw[-latex,Temp label axes](current bounding box.south-|0,0) --(current bounding box.north-|0,0)node[right]{\tiny \UnitS};
+\foreach \xx in {0,\valgridx,...,\valmaxx}
+{\node[below,Temp label axes] at (\xx,0){\tiny \xx};};
+\foreach \xx in {0,\valgridy,...,\valmaxy}
+{\node[left,Temp label axes] at (0,\xx){\tiny \xx};};
+\end{pgfonlayer}
+}
+\newcommand{\TempGridStar}[1][]{
+\begin{pgfonlayer}{background}
+\node(Pointzero) at (-0,0){};
+\draw[-latex,Temp label axes](current bounding box.west|-0,0) --(current bounding box.east|-0,0)coordinate[name=finaxe,pos=1.01]--(finaxe);
+\draw[-latex,Temp label axes](current bounding box.south-|0,0) --(current bounding box.north-|0,0);
+\end{pgfonlayer}
+}
+
+
+
+\newcommand{\AbaqueBlack}{\@ifstar\AbaqueBlackStar\AbaqueBlackNoStar}
+\newcommand{\AbaqueBlackNoStar}{
+\begin{pgfonlayer}{background}
+\IsoModule
+\IsoArgument
+\end{pgfonlayer}
+}
+\newcommand{\AbaqueBlackStar}{
+\IsoModule
+\IsoArgument
+}
+
+\tikzstyle{styleIsoM}=[Black abaque mag]
+\newcommand{\StyleIsoM}[1][Black abaque mag]{
+\tikzstyle{styleIsoM}=[#1]
+}
+
+\tikzstyle{styleIsoA}=[Black abaque phase]
+\newcommand{\StyleIsoA}[1][Black abaque phase]{
+\tikzstyle{styleIsoA}=[#1]
+}
+
+\newcommand{\IsoModule}[1][-30,-25,-20,-15,-12,-10,-8,-6,-5,-4,-3,-2,-1,-0.5,-0.2,0,0.2,0.5,1,2,2.3,3,4,5,6,8,10]{
+\foreach \dbi in {#1}{
+\draw[Black abaque mag,styleIsoM] plot coordinates {\csname ISOM\dbi \endcsname } node{\tiny $\dbi\mathrm{dB}$};
+};
+}
+
+\newcommand{\IsoArgument}[1][359,357,354,350,345,340,330,315,300,285,270,255,240,225,210,195,%
+190,170,165,150,135,120,105,90,75,60,45,30,20,15,10,6,3,1]{
+\foreach \di in {#1}{
+\draw[Black abaque phase,styleIsoA] plot coordinates {\csname ISOA-\di \endcsname } node{\tiny $-\di^\circ$};
+};
+}
+
+
+
+
+
+
+
+%============Abaque temps de réponse 2nd ordre==========
+
+\newcommand{\AbaqueTRsecond}{
+\begin{scope}[Abaque grid]
+\foreach \x/\xtext in {0.01/0.01,0.05/0.05,0.1/0.1,0.5/0.5,0.7/0.7,1/1,5/5,10/10,50/50}
+{\draw ({log10(\x)},2.5) -- ({log10(\x)},0) node[below,rotate=45,left]{\tiny \xtext};};
+
+\foreach \y/\ytext in{3/3,5/5,10/10,30/30,50/50,100/100,300/300}{
+\draw (-2.2,{log10(\y)})node[left]{\tiny \ytext} -- (1.7,{log10(\y)});
+};
+\draw[-latex] (-2.2,0) -- (1.8,0)node[above]{\small$z$};
+\draw[-latex] (-2.2,0) -- (-2.2,2.6)node[right]{\small $T_r\cdot\omega_n$};
+\end{scope}
+
+\draw[Abaque lines] plot coordinates {(-2.145, 2.459) (-2.135, 2.454) (-2.125, 2.450) (-2.115, 2.445) (-2.105, 2.440) (-2.095, 2.435) (-2.085, 2.430) (-2.075, 2.425) (-2.065, 2.420) (-2.055, 2.414) (-2.045, 2.409) (-2.035, 2.404) (-2.025, 2.398) (-2.015, 2.393) (-2.005, 2.388) (-1.995, 2.382) (-1.985, 2.376) (-1.975, 2.371) (-1.965, 2.365) (-1.955, 2.359) (-1.945, 2.353) (-1.935, 2.347) (-1.925, 2.341) (-1.915, 2.334) (-1.905, 2.328) (-1.895, 2.322) (-1.885, 2.315) (-1.875, 2.309) (-1.865, 2.302) (-1.855, 2.295) (-1.845, 2.288) (-1.835, 2.281) (-1.825, 2.274) (-1.815, 2.267) (-1.805, 2.259) (-1.795, 2.252) (-1.785, 2.244) (-1.775, 2.237) (-1.765, 2.229) (-1.755, 2.221) (-1.745, 2.212) (-1.735, 2.204) (-1.725, 2.195) (-1.715, 2.187) (-1.705, 2.178) (-1.695, 2.169) (-1.685, 2.160) (-1.675, 2.150) (-1.665, 2.140) (-1.655, 2.130) (-1.645, 2.120) (-1.635, 2.111) (-1.625, 2.100) (-1.615, 2.089) (-1.605, 2.078) (-1.595, 2.067) (-1.585, 2.055) (-1.575, 2.043) (-1.565, 2.041) (-1.555, 2.029) (-1.545, 2.017) (-1.535, 2.004) (-1.525, 1.991) (-1.515, 1.990) (-1.505, 1.976) (-1.495, 1.962) (-1.485, 1.961) (-1.475, 1.946) (-1.465, 1.931) (-1.455, 1.930) (-1.445, 1.914) (-1.435, 1.898) (-1.425, 1.897) (-1.415, 1.880) (-1.405, 1.879) (-1.395, 1.862) (-1.385, 1.860) (-1.375, 1.842) (-1.365, 1.841) (-1.355, 1.822) (-1.345, 1.821) (-1.335, 1.801) (-1.325, 1.800) (-1.315, 1.780) (-1.305, 1.778) (-1.295, 1.757) (-1.285, 1.756) (-1.275, 1.733) (-1.265, 1.732) (-1.255, 1.730) (-1.245, 1.706) (-1.235, 1.705) (-1.225, 1.679) (-1.215, 1.678) (-1.205, 1.677) (-1.195, 1.650) (-1.185, 1.649) (-1.175, 1.647) (-1.165, 1.619) (-1.155, 1.618) (-1.145, 1.616) (-1.135, 1.585) (-1.125, 1.584) (-1.115, 1.583) (-1.105, 1.580) (-1.095, 1.548) (-1.085, 1.547) (-1.075, 1.545) (-1.065, 1.542) (-1.055, 1.508) (-1.045, 1.506) (-1.035, 1.505) (-1.025, 1.502) (-1.015, 1.464) (-1.005, 1.463) (-.9948, 1.461) (-.9851, 1.459) (-.9747, 1.416) (-.9650, 1.415) (-.9547, 1.413) (-.9450, 1.411) (-.9348, 1.409) (-.9248, 1.361) (-.9147, 1.360) (-.9048, 1.359) (-.8948, 1.357) (-.8851, 1.355) (-.8748, 1.351) (-.8649, 1.299) (-.8551, 1.298) (-.8450, 1.296) (-.8351, 1.294) (-.8248, 1.292) (-.8147, 1.289) (-.8049, 1.279) (-.7948, 1.226) (-.7849, 1.225) (-.7749, 1.223) (-.7650, 1.222) (-.7550, 1.220) (-.7450, 1.217) (-.7349, 1.212) (-.7249, 1.141) (-.7149, 1.140) (-.7049, 1.139) (-.6949, 1.137) (-.6849, 1.136) (-.6749, 1.134) (-.6649, 1.131) (-.6550, 1.128) (-.6449, 1.124) (-.6349, 1.110) (-.6249, 1.035) (-.6149, 1.035) (-.6048, 1.033) (-.5948, 1.032) (-.5850, 1.030) (-.5750, 1.029) (-.5650, 1.026) (-.5549, 1.023) (-.5448, 1.020) (-.5349, 1.015) (-.5249, .9814) (-.5148, .9015) (-.5049, .9010) (-.4948, .9004) (-.4849, .8997) (-.4750, .8987) (-.4648, .8976) (-.4549, .8964) (-.4449, .8948) (-.4349, .8929) (-.4249, .8906) (-.4150, .8878) (-.4049, .8843) (-.3949, .8798) (-.3849, .8739) (-.3749, .8177) (-.3649, .7182) (-.3549, .7192) (-.3449, .7201) (-.3349, .7210) (-.3249, .7218) (-.3149, .7226) (-.3050, .7232) (-.2949, .7236) (-.2849, .7239) (-.2749, .7240) (-.2650, .7239) (-.2549, .7234) (-.2449, .7226) (-.2349, .7211) (-.2249, .7192) (-.2149, .7164) (-.2049, .7126) (-.1949, .7072) (-.1849, .6998) (-.1749, .6883) (-.1649, .6670) (-.1549, .4624) (-.9691e-1, .5296) (.7918e-1, .7934) (.2041, .9498) (.3010, 1.059) (.3802, 1.145) (.4472, 1.215) (.5051, 1.275) (.5563, 1.328) (.6021, 1.375) (.6434, 1.417) (.6812, 1.456) (.7160, 1.491) (.7482, 1.523) (.7782, 1.554) (.8062, 1.582) (.8325, 1.608) (.8573, 1.633) (.8808, 1.657) (.9031, 1.680) (.9243, 1.701) (.9445, 1.721) (.9638, 1.740) (.9823, 1.759) (1.000, 1.777) (1.017, 1.794) (1.033, 1.810) (1.049, 1.826) (1.064, 1.841) (1.079, 1.856) (1.093, 1.870) (1.107, 1.884) (1.121, 1.898) (1.134, 1.911) (1.146, 1.923) (1.158, 1.936) (1.170, 1.947) (1.182, 1.959) (1.193, 1.970) (1.204, 1.981) (1.215, 1.992) (1.225, 2.003) (1.236, 2.013) (1.246, 2.023) (1.255, 2.033) (1.265, 2.042) (1.274, 2.052) (1.283, 2.061) (1.292, 2.070) (1.301, 2.078) (1.310, 2.087) (1.318, 2.096) (1.326, 2.104) (1.334, 2.112) (1.342, 2.120) (1.350, 2.128) (1.358, 2.135) (1.365, 2.143) (1.373, 2.150) (1.380, 2.158) (1.387, 2.165) (1.394, 2.172) (1.401, 2.179) (1.408, 2.186) (1.415, 2.192) (1.422, 2.199) (1.428, 2.205) (1.435, 2.212) (1.441, 2.218) (1.447, 2.225) (1.453, 2.231) (1.459, 2.237) (1.465, 2.243) (1.471, 2.249) (1.477, 2.255) (1.483, 2.260) (1.489, 2.266) (1.494, 2.272) (1.500, 2.277) (1.505, 2.283) (1.511, 2.288) (1.516, 2.293) (1.521, 2.299) (1.526, 2.304) (1.531, 2.309) (1.537, 2.314) (1.542, 2.319) (1.547, 2.324) (1.551, 2.329) (1.556, 2.334) (1.561, 2.339) (1.566, 2.343) (1.571, 2.348) (1.575, 2.353) (1.580, 2.357) (1.584, 2.362) (1.589, 2.366) (1.593, 2.371) (1.598, 2.375) (1.602, 2.379) (1.606, 2.384) (1.611, 2.388) (1.615, 2.392) (1.619, 2.397) (1.623, 2.401) (1.627, 2.405) (1.631, 2.409) (1.635, 2.413) (1.639, 2.417) (1.643, 2.421) (1.647, 2.425) (1.651, 2.429) (1.655, 2.433) (1.659, 2.436) (1.663, 2.440) (1.667, 2.444) (1.670, 2.448) (1.674, 2.451) (1.678, 2.455) (1.681, 2.459) (1.685, 2.462) (1.688, 2.466) (1.692, 2.470) (1.695, 2.473) (1.699, 2.477)};
+}
+
+
+\newcommand{\AbaqueDepassement}{
+
+\begin{scope}[Abaque grid]
+\foreach \x in{0.01,0.05,0.1,0.3,0.5,0.7,1}{
+\draw ({log10(\x)},0) -- ({log10(\x)},-2)node[below,rotate=45,left]{\tiny \x};};
+\foreach \x in{0.01,0.05,0.1,0.3,0.5,0.7,1}{
+\draw (0,{log10(\x)}) -- (-2,{log10(\x)})node[left]{\tiny \x};};
+\coordinate (coinbas) at (0,{log10(0.01)});
+\coordinate (coinhaut) at ({log10(0.01)},0);
+\coordinate[right of=coinbas, node distance=1em] (coinbt);
+\coordinate[above of=coinhaut, node distance=1em] (coinht);
+\draw[-latex] ({log10(0.01)},{log10(0.01)}) -- (coinbt) node[above]{z};
+\draw[-latex] ({log10(0.01)},{log10(0.01)}) -- (coinht) node[right]{D};
+\end{scope}
+\begin{scope}
+\clip (0,0) rectangle (-2,-2);
+\foreach \NN in {1,2,3,4,5,6,7,8}{
+\draw[Abaque lines,domain=0.01:0.99] plot ({log10(\x)},{log10(exp(-\NN*\valpi*\x/(sqrt(1-(\x)^2))))});
+\node at({log10(0.08)},{log10(exp(-\NN*\valpi*0.08/(sqrt(1-(0.08)^2))))}){\tiny$D_\NN$};
+};
+\end{scope}
+
+\begin{scope}[shift={(-1.95,-1.95)}]
+\node[above right,fill=white]{
+\begin{tikzpicture}[xscale=1/8,yscale=1.8]
+\draw[,color=red,domain=0:20,samples=200,smooth] plot
+(\x,{1-1.02*exp(-0.2*\x)*sin((0.979*\x+1.369) r)});
+\draw[-latex] (0,0) -- (20,0);
+\draw[-latex] (0,0) -- (0,1.55);
+\draw (0,1)node[left]{\tiny 1} -- (20,1);
+\foreach \NN in {1,2,3,4}{
+\pgfmathsetmacro{\tmm}{\NN*\valpi/(sqrt(1-0.2^2))}
+\draw (\tmm,1) -- node[right]{\tiny$ D_\NN$}(\tmm,{1-1.02*exp(-0.2*\tmm)*sin((0.979*\tmm+1.369) r)});
+};
+\end{tikzpicture}
+
+};
+\end{scope}
+}
+
+
+
+%========================= Courbes de Black================
+%les lignes ci dessous contiennent les commandes \ISOMxx et \ISOAxx appelées dans le tracé des courbes isomodules et isoargument
+
+%====Iso Module==============
+%\input{isom.txt}
+
+\expandafter\def\csname ISOM-30\endcsname {(-350., -29.7250) (-340., -29.7374) (-330., -29.7576) (-320., -29.7850) (-310., -29.8190) (-300., -29.8582) (-290., -29.9016) (-280., -29.9478) (-270., -29.9956) (-260., -30.0432) (-250., -30.0896) (-240., -30.1330) (-230., -30.1722) (-220., -30.2060) (-210., -30.2336) (-200., -30.2538) (-190., -30.2662) (-180., -30.2704) (-170., -30.2662) (-160., -30.2538) (-150., -30.2336) (-140., -30.2060) (-130., -30.1722) (-120., -30.1330) (-110., -30.0896) (-100., -30.0432) (-90., -29.9956) (-80., -29.9478) (-70., -29.9016) (-60., -29.8582) (-50., -29.8190) (-40., -29.7850) (-30., -29.7576) (-20., -29.7374) (-10., -29.7250)}
+
+ \expandafter\def\csname ISOM-25\endcsname {(-350., -24.5046) (-340., -24.5268) (-330., -24.5626) (-320., -24.6116) (-310., -24.6718) (-300., -24.7416) (-290., -24.8190) (-280., -24.9012) (-270., -24.9862) (-260., -25.0712) (-250., -25.1536) (-240., -25.2308) (-230., -25.3006) (-220., -25.3608) (-210., -25.4098) (-200., -25.4456) (-190., -25.4678) (-180., -25.4752) (-170., -25.4678) (-160., -25.4456) (-150., -25.4098) (-140., -25.3608) (-130., -25.3006) (-120., -25.2308) (-110., -25.1536) (-100., -25.0712) (-90., -24.9862) (-80., -24.9012) (-70., -24.8190) (-60., -24.7416) (-50., -24.6718) (-40., -24.6116) (-30., -24.5626) (-20., -24.5268) (-10., -24.5046)}
+
+ \expandafter\def\csname ISOM-20\endcsname {(-350., -19.0980) (-340., -19.1372) (-330., -19.2012) (-320., -19.2883) (-310., -19.3956) (-300., -19.5199) (-290., -19.6578) (-280., -19.8047) (-270., -19.9563) (-260., -20.1078) (-250., -20.2548) (-240., -20.3926) (-230., -20.5170) (-220., -20.6244) (-210., -20.7114) (-200., -20.7754) (-190., -20.8146) (-180., -20.8278) (-170., -20.8146) (-160., -20.7754) (-150., -20.7114) (-140., -20.6244) (-130., -20.5170) (-120., -20.3926) (-110., -20.2548) (-100., -20.1078) (-90., -19.9563) (-80., -19.8047) (-70., -19.6578) (-60., -19.5199) (-50., -19.3956) (-40., -19.2883) (-30., -19.2012) (-20., -19.1372) (-10., -19.0980)}
+
+ \expandafter\def\csname ISOM-15\endcsname {(-350., -13.3227) (-340., -13.3925) (-330., -13.5066) (-320., -13.6617) (-310., -13.8537) (-300., -14.0767) (-290., -14.3239) (-280., -14.5879) (-270., -14.8604) (-260., -15.1330) (-250., -15.3969) (-240., -15.6440) (-230., -15.8671) (-220., -16.0590) (-210., -16.2142) (-200., -16.3284) (-190., -16.3981) (-180., -16.4216) (-170., -16.3981) (-160., -16.3284) (-150., -16.2142) (-140., -16.0590) (-130., -15.8671) (-120., -15.6440) (-110., -15.3969) (-100., -15.1330) (-90., -14.8604) (-80., -14.5879) (-70., -14.3239) (-60., -14.0767) (-50., -13.8537) (-40., -13.6617) (-30., -13.5066) (-20., -13.3925) (-10., -13.3227)}
+
+ \expandafter\def\csname ISOM-12\endcsname {(-350., -9.52058) (-340., -9.61916) (-330., -9.78090) (-320., -10.0013) (-310., -10.2747) (-300., -10.5930) (-290., -10.9470) (-280., -11.3256) (-270., -11.7169) (-260., -12.1082) (-250., -12.4868) (-240., -12.8408) (-230., -13.1592) (-220., -13.4324) (-210., -13.6529) (-200., -13.8145) (-190., -13.9132) (-180., -13.9465) (-170., -13.9132) (-160., -13.8145) (-150., -13.6529) (-140., -13.4324) (-130., -13.1592) (-120., -12.8408) (-110., -12.4868) (-100., -12.1082) (-90., -11.7169) (-80., -11.3256) (-70., -10.9470) (-60., -10.5930) (-50., -10.2747) (-40., -10.0013) (-30., -9.78090) (-20., -9.61916) (-10., -9.52058)}
+
+ \expandafter\def\csname ISOM-10\endcsname {(-350., -6.73998) (-340., -6.86436) (-330., -7.06858) (-320., -7.34790) (-310., -7.69530) (-300., -8.10138) (-290., -8.55428) (-280., -9.03990) (-270., -9.54238) (-260., -10.0449) (-250., -10.5305) (-240., -10.9835) (-230., -11.3895) (-220., -11.7369) (-210., -12.0162) (-200., -12.2204) (-190., -12.3448) (-180., -12.3866) (-170., -12.3448) (-160., -12.2204) (-150., -12.0162) (-140., -11.7369) (-130., -11.3895) (-120., -10.9835) (-110., -10.5305) (-100., -10.0449) (-90., -9.54238) (-80., -9.03990) (-70., -8.55428) (-60., -8.10138) (-50., -7.69530) (-40., -7.34790) (-30., -7.06858) (-20., -6.86436) (-10., -6.73998)}
+
+ \expandafter\def\csname ISOM-8\endcsname {(-350., -3.64298) (-340., -3.79992) (-330., -4.05844) (-320., -4.41368) (-310., -4.85798) (-300., -5.38034) (-290., -5.96602) (-280., -6.59660) (-270., -7.25060) (-260., -7.90454) (-250., -8.53518) (-240., -9.12086) (-230., -9.64322) (-220., -10.0875) (-210., -10.4428) (-200., -10.7013) (-190., -10.8581) (-180., -10.9108) (-170., -10.8581) (-160., -10.7013) (-150., -10.4428) (-140., -10.0875) (-130., -9.64322) (-120., -9.12086) (-110., -8.53518) (-100., -7.90454) (-90., -7.25060) (-80., -6.59660) (-70., -5.96602) (-60., -5.38034) (-50., -4.85798) (-40., -4.41368) (-30., -4.05844) (-20., -3.79992) (-10., -3.64298)}
+
+ \expandafter\def\csname ISOM-6\endcsname {(-350., -.249992e-1) (-340., -.223240) (-330., -.551664) (-320., -1.00638) (-310., -1.58045) (-300., -2.26226) (-290., -3.03418) (-280., -3.87164) (-270., -4.74370) (-260., -5.61586) (-250., -6.45328) (-240., -7.22516) (-230., -7.90702) (-220., -8.48108) (-210., -8.93576) (-200., -9.26418) (-190., -9.46238) (-180., -9.52866) (-170., -9.46238) (-160., -9.26418) (-150., -8.93576) (-140., -8.48108) (-130., -7.90702) (-120., -7.22516) (-110., -6.45328) (-100., -5.61586) (-90., -4.74370) (-80., -3.87164) (-70., -3.03418) (-60., -2.26226) (-50., -1.58045) (-40., -1.00638) (-30., -.551664) (-20., -.223240) (-10., -.249992e-1)}
+
+ \expandafter\def\csname ISOM-5\endcsname {(-350., 2.10292) (-340., 1.87991) (-330., 1.50911) (-320., .992734) (-310., .336154) (-300., -.449816) (-290., -1.34661) (-280., -2.32572) (-270., -3.34910) (-260., -4.37246) (-250., -5.35162) (-240., -6.24840) (-230., -7.03436) (-220., -7.69098) (-210., -8.20734) (-200., -8.57810) (-190., -8.80114) (-180., -8.87548) (-170., -8.80114) (-160., -8.57810) (-150., -8.20734) (-140., -7.69098) (-130., -7.03436) (-120., -6.24840) (-110., -5.35162) (-100., -4.37246) (-90., -3.34910) (-80., -2.32572) (-70., -1.34661) (-60., -.449816) (-50., .336154) (-40., .992734) (-30., 1.50911) (-20., 1.87991) (-10., 2.10292)}
+
+ \expandafter\def\csname ISOM-4\endcsname {(-350., 4.57498) (-340., 4.32394) (-330., 3.90448) (-320., 3.31604) (-310., 2.56062) (-300., 1.64608) (-290., .590758) (-280., -.572580) (-270., -1.79519) (-260., -3.01788) (-250., -4.18114) (-240., -5.23648) (-230., -6.15096) (-220., -6.90644) (-210., -7.49486) (-200., -7.91432) (-190., -8.16538) (-180., -8.24884) (-170., -8.16538) (-160., -7.91432) (-150., -7.49486) (-140., -6.90644) (-130., -6.15096) (-120., -5.23648) (-110., -4.18114) (-100., -3.01788) (-90., -1.79519) (-80., -.572580) (-70., .590758) (-60., 1.64608) (-50., 2.56062) (-40., 3.31604) (-30., 3.90448) (-20., 4.32394) (-10., 4.57498)}
+
+ \expandafter\def\csname ISOM-3\endcsname {(-350., 7.59694) (-340., 7.31420) (-330., 6.83864) (-320., 6.16484) (-310., 5.28818) (-300., 4.20962) (-290., 2.94300) (-280., 1.52493) (-270., .206478e-1) (-260., -1.48378) (-250., -2.90170) (-240., -4.16834) (-230., -5.24688) (-220., -6.12356) (-210., -6.79734) (-200., -7.27296) (-190., -7.55560) (-180., -7.64944) (-170., -7.55560) (-160., -7.27296) (-150., -6.79734) (-140., -6.12356) (-130., -5.24688) (-120., -4.16834) (-110., -2.90170) (-100., -1.48378) (-90., .206478e-1) (-80., 1.52493) (-70., 2.94300) (-60., 4.20962) (-50., 5.28818) (-40., 6.16484) (-30., 6.83864) (-20., 7.31420) (-10., 7.59694)}
+
+ \expandafter\def\csname ISOM-2\endcsname {(-350., 11.6312) (-340., 11.3123) (-330., 10.7715) (-320., 9.99484) (-310., 8.96494) (-300., 7.66574) (-290., 6.09462) (-280., 4.28488) (-270., 2.32922) (-260., .373594) (-250., -1.43615) (-240., -3.00730) (-230., -4.30646) (-220., -5.33644) (-210., -6.11302) (-200., -6.65386) (-190., -6.97276) (-180., -7.07802) (-170., -6.97276) (-160., -6.65386) (-150., -6.11302) (-140., -5.33644) (-130., -4.30646) (-120., -3.00730) (-110., -1.43615) (-100., .373594) (-90., 2.32922) (-80., 4.28488) (-70., 6.09462) (-60., 7.66574) (-50., 8.96494) (-40., 9.99484) (-30., 10.7715) (-20., 11.3123) (-10., 11.6312)}
+
+ \expandafter\def\csname ISOM-1\endcsname {(-350., 18.1531) (-340., 17.7931) (-330., 17.1755) (-320., 16.2720) (-310., 15.0390) (-300., 13.4165) (-290., 11.3378) (-280., 8.77768) (-270., 5.86826) (-260., 2.95872) (-250., .398766) (-240., -1.68001) (-230., -3.30242) (-220., -4.53566) (-210., -5.43912) (-200., -6.05656) (-190., -6.41658) (-180., -6.53496) (-170., -6.41658) (-160., -6.05656) (-150., -5.43912) (-140., -4.53566) (-130., -3.30242) (-120., -1.68001) (-110., .398766) (-100., 2.95872) (-90., 5.86826) (-80., 8.77768) (-70., 11.3378) (-60., 13.4165) (-50., 15.0390) (-40., 16.2720) (-30., 17.1755) (-20., 17.7931) (-10., 18.1531)}
+
+ \expandafter\def\csname ISOM-0.5\endcsname {(-350., 24.4202) (-340., 24.0374) (-330., 23.3762) (-320., 22.3970) (-310., 21.0334) (-300., 19.1774) (-290., 16.6624) (-280., 13.2931) (-270., 9.13572) (-260., 4.97832) (-250., 1.60907) (-240., -.906111) (-230., -2.76190) (-220., -4.12558) (-210., -5.10474) (-200., -5.76586) (-190., -6.14886) (-180., -6.27433) (-170., -6.14886) (-160., -5.76586) (-150., -5.10474) (-140., -4.12558) (-130., -2.76190) (-120., -.906111) (-110., 1.60907) (-100., 4.97832) (-90., 9.13572) (-80., 13.2931) (-70., 16.6624) (-60., 19.1774) (-50., 21.0334) (-40., 22.3970) (-30., 23.3762) (-20., 24.0374) (-10., 24.4202)}
+
+ \expandafter\def\csname ISOM-0.2\endcsname {(-350., 32.5256) (-340., 32.1284) (-330., 31.4388) (-320., 30.4094) (-310., 28.9540) (-300., 26.9175) (-290., 24.0022) (-280., 19.6304) (-270., 13.2672) (-260., 6.90386) (-250., 2.53198) (-240., -.382914) (-230., -2.42038) (-220., -3.87640) (-210., -4.90538) (-200., -5.59516) (-190., -5.99110) (-180., -6.12211) (-170., -5.99110) (-160., -5.59516) (-150., -4.90538) (-140., -3.87640) (-130., -2.42038) (-120., -.382914) (-110., 2.53198) (-100., 6.90386) (-90., 13.2672) (-80., 19.6304) (-70., 24.0022) (-60., 26.9175) (-50., 28.9540) (-40., 30.4094) (-30., 31.4388) (-20., 32.1284) (-10., 32.5256)}
+
+ \expandafter\def\csname ISOM0\endcsname {(-269.6, 37.1036) (-264.884, 14.9750) (-260.168, 9.33176) (-255.453, 5.97938) (-250.737, 3.61126) (-246.021, 1.79997) (-241.305, .351648) (-236.589, -.838186) (-231.874, -1.83190) (-227.158, -2.67046) (-222.442, -3.38122) (-217.726, -3.98352) (-213.011, -4.49142) (-208.295, -4.91540) (-203.579, -5.26338) (-198.863, -5.54114) (-194.147, -5.75314) (-189.432, -5.90240) (-184.716, -5.99110) (-180.000, -6.02058) (-175.284, -5.99110) (-170.568, -5.90232) (-165.853, -5.75306) (-161.137, -5.54114) (-156.421, -5.26330) (-151.705, -4.91532) (-146.989, -4.49136) (-142.274, -3.98352) (-137.558, -3.38122) (-132.842, -2.67052) (-128.126, -1.83180) (-123.411, -.837996) (-118.695, .351890) (-113.979, 1.80025) (-109.263, 3.61162) (-104.547, 5.97990) (-99.8316, 9.33202) (-95.1158, 14.9755) (-90.4000, 37.0978)}
+
+ \expandafter\def\csname ISOM0.2\endcsname {(-180., 32.8552) (-170.973, 32.7444) (-161.183, 32.3662) (-151.392, 31.6940) (-141.602, 30.6740) (-131.811, 29.2040) (-122.020, 27.0730) (-112.230, 23.7306) (-107.439, 21.1084) (-106.439, 20.3812) (-105.439, 19.5432) (-104.439, 18.5378) (-103.439, 17.2330) (-102.439, 11.9488) (-103.439, 9.70090) (-104.439, 8.39616) (-105.439, 7.39080) (-106.439, 6.55292) (-107.439, 5.82554) (-112.230, 3.20342) (-122.020, -.138333) (-131.811, -2.27018) (-141.602, -3.73906) (-151.392, -4.75842) (-161.183, -5.43130) (-170.973, -5.80950) (-180., -5.91982) (-189.027, -5.80950) (-198.817, -5.43292) (-208.608, -4.75992) (-218.398, -3.73906) (-228.189, -2.26906) (-237.980, -.138333) (-247.770, 3.20330) (-252.561, 5.82572) (-253.561, 6.55224) (-254.561, 7.39112) (-255.561, 8.39520) (-256.561, 9.70046) (-257.561, 11.9452) (-256.561, 17.2336) (-255.561, 18.5389) (-254.561, 19.5429) (-253.561, 20.3818) (-252.561, 21.1084) (-247.770, 23.7308) (-237.980, 27.0730) (-228.189, 29.2040) (-218.398, 30.6742) (-208.608, 31.6940) (-198.817, 32.3662) (-189.027, 32.7444) (-180., 32.8552)}
+
+ \expandafter\def\csname ISOM0.5\endcsname {(-180., 25.0456) (-171.849, 24.9520) (-162.934, 24.6300) (-154.020, 24.0584) (-145.105, 23.1958) (-136.190, 21.9644) (-127.275, 20.2060) (-118.361, 17.5151) (-114.446, 15.7128) (-113.446, 15.1264) (-112.446, 14.4532) (-111.446, 13.6501) (-110.446, 12.6123) (-109.446, 8.43768) (-110.446, 6.65904) (-111.446, 5.62124) (-112.446, 4.81816) (-113.446, 4.14486) (-114.446, 3.55862) (-118.361, 1.75627) (-127.275, -.934564) (-136.190, -2.69294) (-145.105, -3.92416) (-154.020, -4.78656) (-162.934, -5.35808) (-171.849, -5.68058) (-180., -5.77355) (-188.151, -5.68026) (-197.066, -5.35822) (-205.980, -4.78656) (-214.895, -3.92416) (-223.810, -2.69306) (-232.725, -.934564) (-241.639, 1.75647) (-245.554, 3.55868) (-246.554, 4.14438) (-247.554, 4.81792) (-248.554, 5.62212) (-249.554, 6.65856) (-250.554, 8.43844) (-249.554, 12.6128) (-248.554, 13.6492) (-247.554, 14.4535) (-246.554, 15.1270) (-245.554, 15.7127) (-241.639, 17.5150) (-232.725, 20.2062) (-223.810, 21.9646) (-214.895, 23.1960) (-205.980, 24.0584) (-197.066, 24.6300) (-188.151, 24.9520) (-180., 25.0456)}
+
+ \expandafter\def\csname ISOM1\endcsname {(-180., 19.2713) (-172.813, 19.1944) (-164.863, 18.9256) (-156.913, 18.4482) (-148.962, 17.7304) (-141.012, 16.7117) (-133.061, 15.2705) (-125.111, 13.0958) (-122.160, 11.9161) (-121.160, 11.4271) (-120.160, 10.8664) (-119.160, 10.1978) (-118.160, 9.33540) (-117.160, 5.87496) (-118.160, 4.40094) (-119.160, 3.53860) (-120.160, 2.87010) (-121.160, 2.30908) (-122.160, 1.82045) (-125.111, .640522) (-133.061, -1.53405) (-141.012, -2.97526) (-148.962, -3.99382) (-156.913, -4.71176) (-164.863, -5.18916) (-172.813, -5.45788) (-180., -5.53494) (-187.187, -5.45788) (-195.137, -5.18916) (-203.087, -4.71176) (-211.038, -3.99366) (-218.988, -2.97542) (-226.939, -1.53425) (-234.889, .640844) (-237.840, 1.81996) (-238.840, 2.30920) (-239.840, 2.86942) (-240.840, 3.53808) (-241.840, 4.40084) (-242.840, 5.87506) (-241.840, 9.33540) (-240.840, 10.1982) (-239.840, 10.8671) (-238.840, 11.4272) (-237.840, 11.9165) (-234.889, 13.0958) (-226.939, 15.2706) (-218.988, 16.7117) (-211.038, 17.7305) (-203.087, 18.4483) (-195.137, 18.9256) (-187.187, 19.1944) (-180., 19.2713)}
+
+ \expandafter\def\csname ISOM2\endcsname {(-180., 13.7365) (-174.118, 13.6788) (-167.473, 13.4712) (-160.827, 13.1012) (-154.182, 12.5459) (-147.536, 11.7607) (-140.890, 10.6567) (-134.245, 9.00698) (-132.599, 8.44186) (-131.599, 8.04452) (-130.599, 7.58846) (-129.599, 7.04448) (-128.599, 6.34132) (-127.599, 3.51932) (-128.599, 2.31720) (-129.599, 1.61411) (-130.599, 1.07002) (-131.599, .613936) (-132.599, .216510) (-134.245, -.348460) (-140.890, -1.99827) (-147.536, -3.10224) (-154.182, -3.88730) (-160.827, -4.44276) (-167.473, -4.81288) (-174.118, -5.02028) (-180., -5.07820) (-185.882, -5.02056) (-192.527, -4.81262) (-199.173, -4.44300) (-205.818, -3.88752) (-212.464, -3.10206) (-219.110, -1.99845) (-225.755, -.348750) (-227.401, .216764) (-228.401, .613450) (-229.401, 1.06986) (-230.401, 1.61448) (-231.401, 2.31626) (-232.401, 3.52014) (-231.401, 6.34214) (-230.401, 7.04394) (-229.401, 7.58862) (-228.401, 8.04500) (-227.401, 8.44172) (-225.755, 9.00716) (-219.110, 10.6568) (-212.464, 11.7606) (-205.818, 12.5460) (-199.173, 13.1012) (-192.527, 13.4712) (-185.882, 13.6787) (-180., 13.7365)}
+
+ \expandafter\def\csname ISOM2.3\endcsname {(-180., 12.6664) (-174.428, 12.6127) (-168.091, 12.4182) (-161.755, 12.0712) (-155.419, 11.5500) (-149.082, 10.8136) (-142.746, 9.77908) (-136.410, 8.23500) (-135.073, 7.79088) (-134.073, 7.41162) (-133.073, 6.97628) (-132.073, 6.45644) (-131.073, 5.78432) (-130.073, 3.08604) (-131.073, 1.93549) (-132.073, 1.26336) (-133.073, .743586) (-134.073, .308284) (-135.073, -.709836e-1) (-136.410, -.515118) (-142.746, -2.05922) (-149.082, -3.09370) (-155.419, -3.83010) (-161.755, -4.35140) (-168.091, -4.69840) (-174.428, -4.89286) (-180., -4.94661) (-185.572, -4.89286) (-191.909, -4.69840) (-198.245, -4.35154) (-204.581, -3.83024) (-210.918, -3.09356) (-217.254, -2.05922) (-223.590, -.515016) (-224.927, -.713602e-1) (-225.927, .308116) (-226.927, .743666) (-227.927, 1.26321) (-228.927, 1.93570) (-229.927, 3.08416) (-228.927, 5.78410) (-227.927, 6.45660) (-226.927, 6.97616) (-225.927, 7.41168) (-224.927, 7.79118) (-223.590, 8.23490) (-217.254, 9.77916) (-210.918, 10.8135) (-204.581, 11.5500) (-198.245, 12.0713) (-191.909, 12.4182) (-185.572, 12.6127) (-180., 12.6664)}
+
+ \expandafter\def\csname ISOM3\endcsname {(-180., 10.6907) (-175.059, 10.6450) (-169.354, 10.4758) (-163.649, 10.1730) (-157.943, 9.71766) (-152.238, 9.07482) (-146.533, 8.17286) (-140.828, 6.82908) (-140.123, 6.60976) (-139.123, 6.26504) (-138.123, 5.86888) (-137.123, 5.39464) (-136.123, 4.78138) (-135.123, 2.31148) (-136.123, 1.25990) (-137.123, .646650) (-138.123, .172343) (-139.123, -.223792) (-140.123, -.568518) (-140.828, -.787814) (-146.533, -2.13162) (-152.238, -3.03358) (-157.943, -3.67658) (-163.649, -4.13178) (-169.354, -4.43472) (-175.059, -4.60388) (-180., -4.64952) (-184.941, -4.60372) (-190.646, -4.43472) (-196.351, -4.13178) (-202.057, -3.67658) (-207.762, -3.03372) (-213.467, -2.13162) (-219.172, -.788062) (-219.877, -.568452) (-220.877, -.224424) (-221.877, .172173) (-222.877, .646732) (-223.877, 1.25930) (-224.877, 2.31200) (-223.877, 4.78198) (-222.877, 5.39450) (-221.877, 5.86896) (-220.877, 6.26568) (-219.877, 6.60964) (-219.172, 6.82930) (-213.467, 8.17278) (-207.762, 9.07492) (-202.057, 9.71776) (-196.351, 10.1730) (-190.646, 10.4759) (-184.941, 10.6450) (-180., 10.6907)}
+
+ \expandafter\def\csname ISOM4\endcsname {(-180., 8.65844) (-175.802, 8.62136) (-170.841, 8.48004) (-165.879, 8.22554) (-160.917, 7.84228) (-155.955, 7.30094) (-150.994, 6.54206) (-146.070, 5.42412) (-146.032, 5.41320) (-145.070, 5.11764) (-144.070, 4.76382) (-143.070, 4.33966) (-142.070, 3.78924) (-141.070, 1.56681) (-142.070, .620408) (-143.070, .698998e-1) (-144.070, -.354186) (-145.070, -.708018) (-146.032, -1.00357) (-146.070, -1.01454) (-150.994, -2.13246) (-155.955, -2.89134) (-160.917, -3.43262) (-165.879, -3.81584) (-170.841, -4.07036) (-175.802, -4.21178) (-180., -4.24880) (-184.198, -4.21178) (-189.159, -4.07046) (-194.121, -3.81592) (-199.083, -3.43262) (-204.045, -2.89142) (-209.006, -2.13262) (-213.930, -1.01460) (-213.968, -1.00370) (-214.930, -.707698) (-215.930, -.354420) (-216.930, .701584e-1) (-217.930, .620004) (-218.930, 1.56645) (-217.930, 3.78952) (-216.930, 4.33946) (-215.930, 4.76408) (-214.930, 5.11736) (-213.968, 5.41328) (-213.930, 5.42422) (-209.006, 6.54222) (-204.045, 7.30106) (-199.083, 7.84228) (-194.121, 8.22554) (-189.159, 8.48006) (-184.198, 8.62136) (-180., 8.65844)}
+
+ \expandafter\def\csname ISOM5\endcsname {(-180., 7.17726) (-176.415, 7.14698) (-172.066, 7.02714) (-167.717, 6.80998) (-163.369, 6.48246) (-159.020, 6.01924) (-154.671, 5.36978) (-150.973, 4.58046) (-150.322, 4.40488) (-149.973, 4.30418) (-148.973, 3.98434) (-147.973, 3.59918) (-146.973, 3.09826) (-145.973, 1.06717) (-146.973, .203454) (-147.973, -.297392) (-148.973, -.682594) (-149.973, -1.00245) (-150.322, -1.10312) (-150.973, -1.27871) (-154.671, -2.06798) (-159.020, -2.71746) (-163.369, -3.18070) (-167.717, -3.50820) (-172.066, -3.72538) (-176.415, -3.84524) (-180., -3.87552) (-183.585, -3.84524) (-187.934, -3.72538) (-192.283, -3.50820) (-196.631, -3.18080) (-200.980, -2.71746) (-205.329, -2.06808) (-209.027, -1.27903) (-209.678, -1.10303) (-210.027, -1.00240) (-211.027, -.682630) (-212.027, -.297518) (-213.027, .203030) (-214.027, 1.06748) (-213.027, 3.09876) (-212.027, 3.59924) (-211.027, 3.98446) (-210.027, 4.30418) (-209.678, 4.40478) (-209.027, 4.58072) (-205.329, 5.36982) (-200.980, 6.01920) (-196.631, 6.48254) (-192.283, 6.80998) (-187.934, 7.02714) (-183.585, 7.14698) (-180., 7.17726)}
+
+ \expandafter\def\csname ISOM6\endcsname {(-180., 6.04124) (-176.933, 6.01632) (-173.101, 5.91388) (-169.270, 5.72696) (-165.438, 5.44402) (-161.607, 5.04366) (-157.775, 4.48204) (-155.112, 3.94500) (-154.112, 3.69416) (-153.944, 3.64846) (-153.112, 3.40258) (-152.112, 3.05016) (-151.112, 2.59030) (-150.112, .717874) (-151.112, -.777030e-1) (-152.112, -.537644) (-153.112, -.890006) (-153.944, -1.13591) (-154.112, -1.18166) (-155.112, -1.43242) (-157.775, -1.96952) (-161.607, -2.53108) (-165.438, -2.93142) (-169.270, -3.21444) (-173.101, -3.40132) (-176.933, -3.50378) (-180., -3.52868) (-183.067, -3.50382) (-186.899, -3.40132) (-190.730, -3.21444) (-194.562, -2.93148) (-198.393, -2.53116) (-202.225, -1.96963) (-204.888, -1.43238) (-205.888, -1.18183) (-206.056, -1.13568) (-206.888, -.889972) (-207.888, -.537988) (-208.888, -.779132e-1) (-209.888, .716674) (-208.888, 2.59044) (-207.888, 3.05054) (-206.888, 3.40252) (-206.056, 3.64824) (-205.888, 3.69438) (-204.888, 3.94494) (-202.225, 4.48220) (-198.393, 5.04374) (-194.562, 5.44402) (-190.730, 5.72696) (-186.899, 5.91388) (-183.067, 6.01638) (-180., 6.04124)}
+
+ \expandafter\def\csname ISOM8\endcsname {(-180., 4.40964) (-177.760, 4.39294) (-174.756, 4.31708) (-171.752, 4.17612) (-168.748, 3.96142) (-165.743, 3.65656) (-162.739, 3.22866) (-161.731, 3.04612) (-160.731, 2.83764) (-159.735, 2.59386) (-159.731, 2.59282) (-158.731, 2.29434) (-157.731, 1.90101) (-156.731, .283518) (-157.731, -.402188) (-158.731, -.795560) (-159.731, -1.09402) (-159.735, -1.09506) (-160.731, -1.33882) (-161.731, -1.54736) (-162.739, -1.72987) (-165.743, -2.15774) (-168.748, -2.46260) (-171.752, -2.67730) (-174.756, -2.81826) (-177.760, -2.89414) (-180., -2.91080) (-182.240, -2.89414) (-185.244, -2.81832) (-188.248, -2.67730) (-191.252, -2.46260) (-194.257, -2.15762) (-197.261, -1.73000) (-198.269, -1.54750) (-199.269, -1.33891) (-200.265, -1.09531) (-200.269, -1.09392) (-201.269, -.795636) (-202.269, -.402068) (-203.269, .282342) (-202.269, 1.90087) (-201.269, 2.29448) (-200.269, 2.59270) (-200.265, 2.59412) (-199.269, 2.83770) (-198.269, 3.04630) (-197.261, 3.22880) (-194.257, 3.65644) (-191.252, 3.96142) (-188.248, 4.17612) (-185.244, 4.31708) (-182.240, 4.39294) (-180., 4.40964)}
+
+ \expandafter\def\csname ISOM10\endcsname {(-180., 3.30174) (-178.388, 3.29086) (-176.012, 3.23442) (-173.636, 3.12692) (-171.260, 2.96186) (-168.884, 2.72660) (-166.756, 2.43612) (-166.508, 2.39586) (-165.756, 2.26322) (-164.756, 2.05704) (-164.132, 1.90540) (-163.756, 1.80247) (-162.756, 1.46344) (-161.756, .495416e-1) (-162.756, -.548288) (-163.756, -.887426) (-164.132, -.990224) (-164.756, -1.14197) (-165.756, -1.34813) (-166.508, -1.48066) (-166.756, -1.52097) (-168.884, -1.81155) (-171.260, -2.04670) (-173.636, -2.21186) (-176.012, -2.31928) (-178.388, -2.37572) (-180., -2.38662) (-181.612, -2.37572) (-183.988, -2.31928) (-186.364, -2.21178) (-188.740, -2.04662) (-191.116, -1.81150) (-193.244, -1.52091) (-193.492, -1.48071) (-194.244, -1.34825) (-195.244, -1.14193) (-195.868, -.990164) (-196.244, -.887584) (-197.244, -.548380) (-198.244, .498008e-1) (-197.244, 1.46351) (-196.244, 1.80276) (-195.868, 1.90533) (-195.244, 2.05710) (-194.244, 2.26348) (-193.492, 2.39572) (-193.244, 2.43612) (-191.116, 2.72654) (-188.740, 2.96180) (-186.364, 3.12686) (-183.988, 3.23442) (-181.612, 3.29086) (-180., 3.30174)}
+
+
+%==== ISo Argument============
+
+%\input{isoa.txt}
+\expandafter\def\csname ISOA-359\endcsname {(-183.6, 13.2458) (-187.2, 18.2467) (-187.2, 18.2467) (-190.7, 21.3032) (-194.3, 23.5904) (-194.3, 23.5904) (-197.9, 25.3712) (-201.5, 26.8192) (-208.6, 29.0364) (-215.8, 30.7116) (-223.0, 31.9982) (-230.1, 32.9850) (-237.3, 33.7594) (-244.4, 34.3364) (-251.6, 34.7560) (-258.8, 35.0244) (-265.9, 35.1500) (-273.1, 35.1406) (-280.2, 34.9958) (-287.4, 34.7070) (-294.6, 34.2654) (-301.7, 33.6640) (-308.9, 32.8608) (-316.0, 31.8384) (-323.2, 30.5054) (-330.4, 28.7638) (-337.5, 26.4444) (-344.6, 23.0764) (-344.7, 23.0172) (-348.2, 20.6182) (-351.7, 17.2435) (-351.8, 17.1254) (-355.3, 11.3590) (-358.9, -20)}
+
+ \expandafter\def\csname ISOA-357\endcsname {(-183.5, 6.69968) (-187.1, 10.5019) (-187.1, 10.5019) (-190.6, 13.0507) (-194.2, 15.0412) (-194.2, 15.0412) (-197.7, 16.5908) (-201.2, 17.8781) (-208.3, 19.9358) (-215.4, 21.4880) (-222.5, 22.6888) (-229.6, 23.6250) (-236.6, 24.3392) (-243.7, 24.8850) (-250.8, 25.2720) (-257.9, 25.5138) (-265.0, 25.6186) (-272.0, 25.5908) (-279.1, 25.4288) (-286.2, 25.1268) (-293.3, 24.6750) (-300.4, 24.0562) (-307.4, 23.2578) (-314.5, 22.2178) (-321.6, 20.8818) (-328.7, 19.1412) (-335.8, 16.7890) (-342.7, 13.4780) (-342.8, 13.4188) (-346.3, 10.9989) (-349.8, 7.58606) (-349.9, 7.46426) (-353.4, 1.58384) (-356.9, -23)}
+
+ \expandafter\def\csname ISOA-354\endcsname {(-183.5, 3.96648) (-187.0, 6.65720) (-187.0, 6.65720) (-190.4, 8.63086) (-193.9, 10.2542) (-193.9, 10.2542) (-197.4, 11.5945) (-200.9, 12.7263) (-207.8, 14.5211) (-214.8, 15.9189) (-221.8, 17.0092) (-228.7, 17.8506) (-235.7, 18.5095) (-242.6, 18.9948) (-249.6, 19.3380) (-256.6, 19.5426) (-263.5, 19.6149) (-270.5, 19.5592) (-277.4, 19.3755) (-284.4, 19.0526) (-291.4, 18.5817) (-298.3, 17.9560) (-305.3, 17.1311) (-312.2, 16.0918) (-319.2, 14.7437) (-326.2, 12.9904) (-333.1, 10.6621) (-340.0, 7.28872) (-340.1, 7.22820) (-343.5, 4.82864) (-346.9, 1.45609) (-347.0, 1.33330) (-350.4, -4.42776) (-353.9, -24)}
+
+ \expandafter\def\csname ISOA-350\endcsname {(-183.4, 2.50676) (-186.8, 4.42562) (-186.8, 4.42562) (-190.2, 5.97054) (-193.6, 7.25562) (-193.6, 7.25562) (-197., 8.34720) (-200.4, 9.29006) (-207.2, 10.8359) (-214., 12.0419) (-220.8, 12.9920) (-227.6, 13.7367) (-234.4, 14.3090) (-241.2, 14.7304) (-248., 15.0147) (-254.8, 15.1707) (-261.6, 15.2032) (-268.4, 15.1129) (-275.2, 14.8972) (-282., 14.5499) (-288.8, 14.0598) (-295.6, 13.4095) (-302.4, 12.5731) (-309.2, 11.5104) (-316., 10.1577) (-322.8, 8.40698) (-329.6, 6.05258) (-336.3, 2.69610) (-336.4, 2.63314) (-339.7, .254720) (-343.1, -3.19942) (-343.2, -3.32680) (-346.5, -9.07908) (-349.9, -25)}
+
+ \expandafter\def\csname ISOA-345\endcsname {(-183.3, 1.67821) (-186.6, 3.06012) (-186.6, 3.06012) (-189.9, 4.22646) (-193.2, 5.22876) (-193.2, 5.22876) (-196.5, 6.10186) (-199.8, 6.86832) (-206.4, 8.14828) (-213., 9.16142) (-219.6, 9.96460) (-226.2, 10.5932) (-232.8, 11.0710) (-239.4, 11.4140) (-246., 11.6325) (-252.6, 11.7324) (-259.2, 11.7167) (-265.8, 11.5848) (-272.4, 11.3332) (-279., 10.9547) (-285.6, 10.4375) (-292.2, 9.76414) (-298.8, 8.90796) (-305.4, 7.82856) (-312., 6.46248) (-318.6, 4.70030) (-325.2, 2.33712) (-331.7, -1.02359) (-331.8, -1.08741) (-335.0, -3.46586) (-338.3, -6.91922) (-338.4, -7.05040) (-341.6, -12.7986) (-344.9, -26)}
+
+ \expandafter\def\csname ISOA-340\endcsname {(-183.2, 1.22769) (-186.4, 2.27912) (-186.4, 2.27912) (-189.6, 3.19230) (-192.8, 3.99422) (-192.8, 3.99422) (-196., 4.70338) (-199.2, 5.33376) (-205.6, 6.39862) (-212., 7.24964) (-218.4, 7.92494) (-224.8, 8.45030) (-231.2, 8.84274) (-237.6, 9.11400) (-244., 9.27130) (-250.4, 9.31872) (-256.8, 9.25766) (-263.2, 9.08638) (-269.6, 8.80052) (-276., 8.39226) (-282.4, 7.84920) (-288.8, 7.15364) (-295.2, 6.27830) (-301.6, 5.18284) (-308., 3.80326) (-314.4, 2.03034) (-320.8, -.340174) (-327.1, -3.70466) (-327.2, -3.77168) (-330.3, -6.14936) (-333.5, -9.60422) (-333.6, -9.73642) (-336.7, -15.4787) (-339.9, -27)}
+
+ \expandafter\def\csname ISOA-330\endcsname {(-183., .742868) (-186., 1.40482) (-186., 1.40482) (-189., 1.99803) (-192., 2.53088) (-192., 2.53088) (-195., 3.01022) (-198., 3.44206) (-204., 4.17966) (-210., 4.77124) (-216., 5.23520) (-222., 5.58466) (-228., 5.82866) (-234., 5.97290) (-240., 6.02058) (-246., 5.97286) (-252., 5.82870) (-258., 5.58474) (-264., 5.23514) (-270., 4.77119) (-276., 4.17988) (-282., 3.44206) (-288., 2.53088) (-294., 1.40519) (-300., -.173717e-4) (-306., -1.79305) (-312., -4.17936) (-317.9, -7.55028) (-318., -7.62202) (-320.9, -9.99762) (-323.9, -13.4498) (-324., -13.5943) (-326.9, -19.3171) (-329.9, -28)}
+
+ \expandafter\def\csname ISOA-315\endcsname {(-182.7, .390550) (-185.4, .745818) (-185.4, .745818) (-188.1, 1.06856) (-190.8, 1.36119) (-190.8, 1.36119) (-193.5, 1.62558) (-196.2, 1.86339) (-201.6, 2.26476) (-207., 2.57438) (-212.4, 2.79852) (-217.8, 2.94146) (-223.2, 3.00598) (-228.6, 2.99306) (-234., 2.90268) (-239.4, 2.73300) (-244.8, 2.48094) (-250.2, 2.14154) (-255.6, 1.70774) (-261., 1.16943) (-266.4, .512832) (-271.8, -.281640) (-277.2, -1.24181) (-282.6, -2.40926) (-288., -3.84864) (-293.4, -5.66970) (-298.8, -8.07788) (-304.1, -11.4555) (-304.2, -11.5351) (-306.8, -13.9043) (-309.5, -17.3570) (-309.6, -17.5161) (-312.2, -23.2094) (-314.9, -29)}
+
+ \expandafter\def\csname ISOA-300\endcsname {(-182.4, .199974) (-184.8, .380746) (-184.8, .380746) (-187.2, .542668) (-189.6, .686712) (-189.6, .686712) (-192., .813548) (-194.4, .923342) (-199.2, 1.09418) (-204., 1.20164) (-208.8, 1.24750) (-213.6, 1.23221) (-218.4, 1.15568) (-223.2, 1.01679) (-228., .813548) (-232.8, .542748) (-237.6, .200060) (-242.4, -.220496) (-247.2, -.726508) (-252., -1.32916) (-256.8, -2.04262) (-261.6, -2.88662) (-266.4, -3.88986) (-271.2, -5.09422) (-276., -6.56396) (-280.8, -8.41006) (-285.6, -10.8377) (-290.3, -14.2191) (-290.4, -14.3075) (-292.7, -16.6696) (-295.1, -20.1180) (-295.2, -20.2980) (-297.5, -25.9580) (-299.9, -30)}
+
+ \expandafter\def\csname ISOA-285\endcsname {(-182.1, .791144e-1) (-184.2, .145906) (-184.2, .145906) (-186.3, .200568) (-188.4, .243410) (-188.4, .243410) (-190.5, .274266) (-192.6, .293518) (-196.8, .296876) (-201., .253370) (-205.2, .162716) (-209.4, .238534e-1) (-213.6, -.164867) (-217.8, -.405536) (-222., -.701236) (-226.2, -1.05591) (-230.4, -1.47440) (-234.6, -1.96322) (-238.8, -2.53108) (-243., -3.18868) (-247.2, -3.95086) (-251.4, -4.83830) (-255.6, -5.87898) (-259.8, -7.11494) (-264., -8.61260) (-268.2, -10.4799) (-272.4, -12.9235) (-276.5, -16.3047) (-276.6, -16.4075) (-278.6, -18.7562) (-280.7, -22.1982) (-280.8, -22.4040) (-282.8, -28.0134) (-284.9, -31)}
+
+ \expandafter\def\csname ISOA-270\endcsname {(-181.8, -.428320e-2) (-183.6, -.171542e-1) (-183.6, -.171542e-1) (-185.4, -.386338e-1) (-187.2, -.687596e-1) (-187.2, -.687596e-1) (-189., -.107595) (-190.8, -.155232) (-194.4, -.277262) (-198., -.435868) (-201.6, -.632414) (-205.2, -.868666) (-208.8, -1.14684) (-212.4, -1.46977) (-216., -1.84083) (-219.6, -2.26438) (-223.2, -2.74578) (-226.8, -3.29186) (-230.4, -3.91144) (-234., -4.61560) (-237.6, -5.41946) (-241.2, -6.34342) (-244.8, -7.41618) (-248.4, -8.67992) (-252., -10.2003) (-255.6, -12.0867) (-259.2, -14.5453) (-262.7, -17.9182) (-262.8, -18.0383) (-264.5, -20.3670) (-266.3, -23.8014) (-266.4, -24.0412) (-268.1, -29.5842) (-269.9, -32)}
+
+ \expandafter\def\csname ISOA-255\endcsname {(-181.5, -.641032e-1) (-183., -.134767) (-183., -.134767) (-184.5, -.211930) (-186., -.295792) (-186., -.295792) (-187.5, -.386582) (-189., -.484260) (-192., -.701284) (-195., -.948184) (-198., -1.22702) (-201., -1.53976) (-204., -1.88872) (-207., -2.27738) (-210., -2.70922) (-213., -3.18852) (-216., -3.72140) (-219., -4.31456) (-222., -4.97648) (-225., -5.71940) (-228., -6.55804) (-231., -7.51232) (-234., -8.61222) (-237., -9.89938) (-240., -11.4385) (-243., -13.3412) (-246., -15.8125) (-248.9, -19.1713) (-249., -19.3131) (-250.4, -21.6146) (-251.9, -25.0354) (-252., -25.3224) (-253.4, -30.7808) (-254.9, -33)}
+
+ \expandafter\def\csname ISOA-240\endcsname {(-181.2, -.107613) (-182.4, -.220318) (-182.4, -.220318) (-183.6, -.338538) (-184.8, -.462238) (-184.8, -.462238) (-186., -.591388) (-187.2, -.726564) (-189.6, -1.01493) (-192., -1.32916) (-194.4, -1.67092) (-196.8, -2.04240) (-199.2, -2.44680) (-201.6, -2.88670) (-204., -3.36608) (-206.4, -3.89008) (-208.8, -4.46348) (-211.2, -5.09384) (-213.6, -5.79058) (-216., -6.56430) (-218.4, -7.43046) (-220.8, -8.41030) (-223.2, -9.53152) (-225.6, -10.8370) (-228., -12.3933) (-230.4, -14.3083) (-232.8, -16.7881) (-235.1, -20.1190) (-235.2, -20.2990) (-236.3, -22.5560) (-237.5, -25.9534) (-237.6, -26.3108) (-238.7, -31.6308) (-239.9, -34)}
+
+ \expandafter\def\csname ISOA-225\endcsname {(-180.9, -.138606) (-181.8, -.281702) (-181.8, -.281702) (-182.7, -.429222) (-183.6, -.581566) (-183.6, -.581566) (-184.5, -.738832) (-185.4, -.901194) (-187.2, -1.24179) (-189., -1.60533) (-190.8, -1.99375) (-192.6, -2.40920) (-194.4, -2.85468) (-196.2, -3.33314) (-198., -3.84880) (-199.8, -4.40586) (-201.6, -5.01060) (-203.4, -5.66982) (-205.2, -6.39230) (-207., -7.19006) (-208.8, -8.07766) (-210.6, -9.07648) (-212.4, -10.2148) (-214.2, -11.5349) (-216., -13.1030) (-217.8, -15.0279) (-219.6, -17.5169) (-221.3, -20.7922) (-221.4, -21.0324) (-222.2, -23.2090) (-223.1, -26.5738) (-223.2, -27.0466) (-224.0, -32.1452) (-224.9, -35)}
+
+ \expandafter\def\csname ISOA-210\endcsname {(-180.6, -.159247) (-181.2, -.322946) (-181.2, -.322946) (-181.8, -.490444) (-182.4, -.662050) (-182.4, -.662050) (-183., -.838586) (-183.6, -1.01923) (-184.8, -1.39592) (-186., -1.79289) (-187.2, -2.21350) (-188.4, -2.65970) (-189.6, -3.13322) (-190.8, -3.63904) (-192., -4.17994) (-193.2, -4.76000) (-194.4, -5.38694) (-195.6, -6.06642) (-196.8, -6.80666) (-198., -7.62172) (-199.2, -8.52506) (-200.4, -9.53656) (-201.6, -10.6872) (-202.8, -12.0189) (-204., -13.5937) (-205.2, -15.5266) (-206.4, -18.0229) (-207.5, -21.1860) (-207.6, -21.5372) (-208.1, -23.5656) (-208.7, -26.8590) (-208.8, -27.5556) (-209.3, -32.2442) (-209.9, -36)}
+
+ \expandafter\def\csname ISOA-195\endcsname {(-180.3, -.171942) (-180.6, -.346264) (-180.6, -.346264) (-180.9, -.525808) (-181.2, -.709064) (-181.2, -.709064) (-181.5, -.895782) (-181.8, -1.08794) (-182.4, -1.48469) (-183., -1.90266) (-183.6, -2.34150) (-184.2, -2.80466) (-184.8, -3.29686) (-185.4, -3.81760) (-186., -4.37262) (-186.6, -4.96822) (-187.2, -5.60696) (-187.8, -6.29798) (-188.4, -7.05146) (-189., -7.87500) (-189.6, -8.78610) (-190.2, -9.80808) (-190.8, -10.9653) (-191.4, -12.3006) (-192., -13.8851) (-192.6, -15.8198) (-193.2, -18.3138) (-193.7, -21.1428) (-193.8, -21.8446) (-194.0, -23.4234) (-194.3, -26.5098) (-194.4, -27.8592) (-194.6, -31.3678) (-194.9, -37)}
+
+ \expandafter\def\csname ISOA-190\endcsname {(-180.2, -.173538) (-180.4, -.350360) (-180.4, -.350360) (-180.6, -.531538) (-180.8, -.716646) (-180.8, -.716646) (-181., -.907544) (-181.2, -1.10059) (-181.6, -1.50158) (-182., -1.92173) (-182.4, -2.36436) (-182.8, -2.83262) (-183.2, -3.32658) (-183.6, -3.85000) (-184., -4.40824) (-184.4, -5.00444) (-184.8, -5.64880) (-185.2, -6.34124) (-185.6, -7.09416) (-186., -7.92014) (-186.4, -8.83622) (-186.8, -9.85820) (-187.2, -11.0150) (-187.6, -12.3526) (-188., -13.9321) (-188.4, -15.8779) (-188.8, -18.3722) (-189.1, -20.8782) (-189.2, -21.8926) (-189.3, -23.0626) (-189.5, -25.9790) (-189.6, -27.8976) (-189.7, -30.4150) (-189.9, -36)}
+
+ \expandafter\def\csname ISOA-170\endcsname {(-179.8, -.173848) (-179.6, -.351192) (-179.6, -.351192) (-179.4, -.532342) (-179.2, -.717456) (-179.2, -.717456) (-179., -.906718) (-178.8, -1.10030) (-178.4, -1.50187) (-178., -1.92266) (-177.6, -2.36534) (-177.2, -2.83230) (-176.8, -3.32620) (-176.4, -3.85038) (-176., -4.40866) (-175.6, -5.00578) (-175.2, -5.64836) (-174.8, -6.34178) (-174.4, -7.09584) (-174., -7.92200) (-173.6, -8.83588) (-173.2, -9.85742) (-172.8, -11.0159) (-172.4, -12.3537) (-172., -13.9361) (-171.6, -15.8763) (-171.2, -18.3743) (-170.9, -20.8758) (-170.8, -21.8962) (-170.7, -23.0598) (-170.5, -25.9830) (-170.4, -27.9162) (-170.3, -30.4234) (-170.1, -36)}
+
+ \expandafter\def\csname ISOA-165\endcsname {(-179.7, -.171765) (-179.4, -.346788) (-179.4, -.346788) (-179.1, -.526018) (-178.8, -.708914) (-178.8, -.708914) (-178.5, -.896338) (-178.2, -1.08812) (-177.6, -1.48525) (-177., -1.90245) (-176.4, -2.34172) (-175.8, -2.80536) (-175.2, -3.29662) (-174.6, -3.81786) (-174., -4.37340) (-173.4, -4.96798) (-172.8, -5.60724) (-172.2, -6.29848) (-171.6, -7.05110) (-171., -7.87550) (-170.4, -8.78750) (-169.8, -9.80756) (-169.2, -10.9660) (-168.6, -12.3026) (-168., -13.8845) (-167.4, -15.8208) (-166.8, -18.3180) (-166.3, -21.1454) (-166.2, -21.8420) (-166.0, -23.4260) (-165.7, -26.5212) (-165.6, -27.8642) (-165.4, -31.3876) (-165.1, -37)}
+
+ \expandafter\def\csname ISOA-150\endcsname {(-179.4, -.159486) (-178.8, -.322874) (-178.8, -.322874) (-178.2, -.490544) (-177.6, -.662302) (-177.6, -.662302) (-177., -.838510) (-176.4, -1.01934) (-175.2, -1.39584) (-174., -1.79317) (-172.8, -2.21358) (-171.6, -2.65960) (-170.4, -3.13356) (-169.2, -3.63916) (-168., -4.17984) (-166.8, -4.76046) (-165.6, -5.38710) (-164.4, -6.06628) (-163.2, -6.80724) (-162., -7.62194) (-160.8, -8.52480) (-159.6, -9.53734) (-158.4, -10.6874) (-157.2, -12.0186) (-156., -13.5950) (-154.8, -15.5271) (-153.6, -18.0222) (-152.5, -21.1870) (-152.4, -21.5404) (-151.9, -23.5696) (-151.3, -26.8646) (-151.2, -27.5580) (-150.7, -32.2404) (-150.1, -36)}
+
+ \expandafter\def\csname ISOA-135\endcsname {(-179.1, -.138659) (-178.2, -.281748) (-178.2, -.281748) (-177.3, -.429268) (-176.4, -.581620) (-176.4, -.581620) (-175.5, -.738888) (-174.6, -.901254) (-172.8, -1.24183) (-171., -1.60539) (-169.2, -1.99380) (-167.4, -2.40926) (-165.6, -2.85474) (-163.8, -3.33318) (-162., -3.84888) (-160.2, -4.40604) (-158.4, -5.01070) (-156.6, -5.67002) (-154.8, -6.39238) (-153., -7.19018) (-151.2, -8.07790) (-149.4, -9.07664) (-147.6, -10.2152) (-145.8, -11.5351) (-144., -13.1032) (-142.2, -15.0282) (-140.4, -17.5171) (-138.7, -20.7948) (-138.6, -21.0326) (-137.8, -23.2130) (-136.9, -26.5772) (-136.8, -27.0486) (-136.0, -32.1518) (-135.1, -35)}
+
+ \expandafter\def\csname ISOA-120\endcsname {(-178.8, -.107613) (-177.6, -.220442) (-177.6, -.220442) (-176.4, -.338538) (-175.2, -.462238) (-175.2, -.462238) (-174., -.591508) (-172.8, -.726564) (-170.4, -1.01506) (-168., -1.32916) (-165.6, -1.67098) (-163.2, -2.04246) (-160.8, -2.44674) (-158.4, -2.88670) (-156., -3.36634) (-153.6, -3.89006) (-151.2, -4.46354) (-148.8, -5.09416) (-146.4, -5.79054) (-144., -6.56446) (-141.6, -7.43062) (-139.2, -8.41024) (-136.8, -9.53170) (-134.4, -10.8375) (-132., -12.3933) (-129.6, -14.3087) (-127.2, -16.7891) (-124.9, -20.1204) (-124.8, -20.2984) (-123.7, -22.5554) (-122.5, -25.9568) (-122.4, -26.3122) (-121.3, -31.6366) (-120.1, -34)}
+
+ \expandafter\def\csname ISOA-105\endcsname {(-178.5, -.641468e-1) (-177., -.134759) (-177., -.134759) (-175.5, -.211946) (-174., -.295836) (-174., -.295836) (-172.5, -.386572) (-171., -.484270) (-168., -.701264) (-165., -.948262) (-162., -1.22705) (-159., -1.53973) (-156., -1.88883) (-153., -2.27742) (-150., -2.70920) (-147., -3.18866) (-144., -3.72146) (-141., -4.31452) (-138., -4.97672) (-135., -5.71948) (-132., -6.55798) (-129., -7.51262) (-126., -8.61232) (-123., -9.89920) (-120., -11.4389) (-117., -13.3413) (-114., -15.8124) (-111.1, -19.1708) (-111., -19.3143) (-109.6, -21.6152) (-108.1, -25.0380) (-108., -25.3232) (-106.6, -30.7792) (-105.1, -33)}
+
+ \expandafter\def\csname ISOA-90\endcsname {(-178.2, -.429188e-2) (-176.4, -.171542e-1) (-176.4, -.171542e-1) (-174.6, -.386338e-1) (-172.8, -.687596e-1) (-172.8, -.687596e-1) (-171., -.107604) (-169.2, -.155241) (-165.6, -.277272) (-162., -.435886) (-158.4, -.632432) (-154.8, -.868692) (-151.2, -1.14687) (-147.6, -1.46981) (-144., -1.84087) (-140.4, -2.26440) (-136.8, -2.74582) (-133.2, -3.29192) (-129.6, -3.91150) (-126., -4.61568) (-122.4, -5.41954) (-118.8, -6.34350) (-115.2, -7.41628) (-111.6, -8.68002) (-108., -10.2005) (-104.4, -12.0869) (-100.8, -14.5455) (-97.30, -17.9192) (-97.20, -18.0386) (-95.50, -20.3684) (-93.70, -23.8048) (-93.60, -24.0418) (-91.90, -29.5882) (-90.1, -32)}
+
+ \expandafter\def\csname ISOA-75\endcsname {(-177.9, .791144e-1) (-175.8, .145906) (-175.8, .145906) (-173.7, .200654) (-171.6, .243410) (-171.6, .243410) (-169.5, .274266) (-167.4, .293518) (-163.2, .296792) (-159., .253370) (-154.8, .162716) (-150.6, .238534e-1) (-146.4, -.164858) (-142.2, -.405554) (-138., -.701292) (-133.8, -1.05587) (-129.6, -1.47444) (-125.4, -1.96332) (-121.2, -2.53104) (-117., -3.18874) (-112.8, -3.95104) (-108.6, -4.83838) (-104.4, -5.87906) (-100.2, -7.11524) (-96., -8.61250) (-91.80, -10.4801) (-87.60, -12.9241) (-83.50, -16.3050) (-83.40, -16.4073) (-81.40, -18.7558) (-79.30, -22.2000) (-79.20, -22.4044) (-77.20, -28.0168) (-75.1, -31)}
+
+ \expandafter\def\csname ISOA-60\endcsname {(-177.6, .200060) (-175.2, .380746) (-175.2, .380746) (-172.8, .542668) (-170.4, .686790) (-170.4, .686790) (-168., .813548) (-165.6, .923420) (-160.8, 1.09418) (-156., 1.20164) (-151.2, 1.24750) (-146.4, 1.23221) (-141.6, 1.15568) (-136.8, 1.01679) (-132., .813470) (-127.2, .542668) (-122.4, .200060) (-117.6, -.220442) (-112.8, -.726564) (-108., -1.32916) (-103.2, -2.04254) (-98.40, -2.88678) (-93.60, -3.88992) (-88.80, -5.09416) (-84., -6.56426) (-79.20, -8.41020) (-74.40, -10.8376) (-69.70, -14.2193) (-69.60, -14.3082) (-67.30, -16.6699) (-64.90, -20.1196) (-64.80, -20.2988) (-62.50, -25.9570) (-60.1, -30)}
+
+ \expandafter\def\csname ISOA-45\endcsname {(-177.3, .390550) (-174.6, .745898) (-174.6, .745898) (-171.9, 1.06863) (-169.2, 1.36127) (-169.2, 1.36127) (-166.5, 1.62558) (-163.8, 1.86339) (-158.4, 2.26482) (-153., 2.57438) (-147.6, 2.79852) (-142.2, 2.94152) (-136.8, 3.00592) (-131.4, 2.99312) (-126., 2.90262) (-120.6, 2.73300) (-115.2, 2.48094) (-109.8, 2.14154) (-104.4, 1.70766) (-99., 1.16935) (-93.60, .512752) (-88.20, -.281694) (-82.80, -1.24187) (-77.40, -2.40934) (-72., -3.84880) (-66.60, -5.66978) (-61.20, -8.07798) (-55.90, -11.4561) (-55.80, -11.5354) (-53.20, -13.9056) (-50.50, -17.3582) (-50.40, -17.5171) (-47.80, -23.2126) (-45.1, -29)}
+
+ \expandafter\def\csname ISOA-30\endcsname {(-177., .742788) (-174., 1.40504) (-174., 1.40504) (-171., 1.99803) (-168., 2.53088) (-168., 2.53088) (-165., 3.01034) (-162., 3.44206) (-156., 4.17978) (-150., 4.77120) (-144., 5.23524) (-138., 5.58470) (-132., 5.82870) (-126., 5.97286) (-120., 6.02058) (-114., 5.97286) (-108., 5.82866) (-102., 5.58474) (-96., 5.23514) (-90., 4.77119) (-84., 4.17978) (-78., 3.44200) (-72., 2.53088) (-66., 1.40504) (-60., 0.) (-54., -1.79312) (-48., -4.17982) (-42.1, -7.55086) (-42., -7.62180) (-39.1, -9.99770) (-36.1, -13.4515) (-36., -13.5949) (-33.1, -19.3189) (-30.1, -28)}
+
+ \expandafter\def\csname ISOA-20\endcsname {(-176.8, 1.22769) (-173.6, 2.27912) (-173.6, 2.27912) (-170.4, 3.19248) (-167.2, 3.99428) (-167.2, 3.99428) (-164., 4.70334) (-160.8, 5.33370) (-154.4, 6.39868) (-148., 7.24968) (-141.6, 7.92498) (-135.2, 8.45030) (-128.8, 8.84274) (-122.4, 9.11400) (-116., 9.27130) (-109.6, 9.31872) (-103.2, 9.25766) (-96.80, 9.08638) (-90.40, 8.80052) (-84., 8.39220) (-77.60, 7.84916) (-71.20, 7.15346) (-64.80, 6.27826) (-58.40, 5.18288) (-52., 3.80320) (-45.60, 2.03034) (-39.20, -.340598) (-32.90, -3.70510) (-32.80, -3.77164) (-29.70, -6.14956) (-26.50, -9.60380) (-26.40, -9.73772) (-23.30, -15.4780) (-20.1, -27)}
+
+ \expandafter\def\csname ISOA-15\endcsname {(-176.7, 1.67836) (-173.4, 3.06000) (-173.4, 3.06000) (-170.1, 4.22658) (-166.8, 5.22900) (-166.8, 5.22900) (-163.5, 6.10180) (-160.2, 6.86840) (-153.6, 8.14824) (-147., 9.16150) (-140.4, 9.96460) (-133.8, 10.5932) (-127.2, 11.0711) (-120.6, 11.4140) (-114., 11.6325) (-107.4, 11.7324) (-100.8, 11.7167) (-94.20, 11.5849) (-87.60, 11.3332) (-81., 10.9547) (-74.40, 10.4375) (-67.80, 9.76404) (-61.20, 8.90788) (-54.60, 7.82860) (-48., 6.46222) (-41.40, 4.70016) (-34.80, 2.33732) (-28.30, -1.02352) (-28.20, -1.08786) (-25.00, -3.46652) (-21.70, -6.92058) (-21.60, -7.05070) (-18.40, -12.7979) (-15.1, -26)}
+
+ \expandafter\def\csname ISOA-10\endcsname {(-176.6, 2.50696) (-173.2, 4.42546) (-173.2, 4.42546) (-169.8, 5.97046) (-166.4, 7.25556) (-166.4, 7.25556) (-163., 8.34748) (-159.6, 9.29024) (-152.8, 10.8360) (-146., 12.0420) (-139.2, 12.9920) (-132.4, 13.7368) (-125.6, 14.3091) (-118.8, 14.7304) (-112., 15.0147) (-105.2, 15.1707) (-98.40, 15.2031) (-91.60, 15.1129) (-84.80, 14.8973) (-78., 14.5499) (-71.20, 14.0597) (-64.40, 13.4094) (-57.60, 12.5731) (-50.80, 11.5104) (-44., 10.1578) (-37.20, 8.40678) (-30.40, 6.05244) (-23.70, 2.69572) (-23.60, 2.63314) (-20.30, .254046) (-16.90, -3.19986) (-16.80, -3.32614) (-13.50, -9.07978) (-10.1, -25)}
+
+ \expandafter\def\csname ISOA-6\endcsname {(-176.5, 3.96780) (-173.0, 6.65700) (-173.0, 6.65700) (-169.6, 8.63074) (-166.1, 10.2545) (-166.1, 10.2545) (-162.6, 11.5944) (-159.1, 12.7264) (-152.2, 14.5214) (-145.2, 15.9191) (-138.2, 17.0094) (-131.3, 17.8505) (-124.3, 18.5096) (-117.4, 18.9948) (-110.4, 19.3380) (-103.4, 19.5426) (-96.48, 19.6150) (-89.52, 19.5595) (-82.56, 19.3740) (-75.60, 19.0526) (-68.64, 18.5848) (-61.68, 17.9538) (-54.72, 17.1337) (-47.76, 16.0848) (-40.80, 14.7436) (-33.84, 13.0016) (-26.88, 10.6543) (-20.02, 7.30084) (-19.92, 7.23998) (-16.54, 4.86050) (-13.06, 1.40689) (-12.96, 1.28354) (-9.580, -4.47532) (-6.1, -24)}
+
+ \expandafter\def\csname ISOA-3\endcsname {(-176.5, 6.70160) (-172.9, 10.5032) (-172.9, 10.5032) (-169.4, 13.0509) (-165.8, 15.0414) (-165.8, 15.0414) (-162.3, 16.5911) (-158.8, 17.8780) (-151.7, 19.9361) (-144.6, 21.4878) (-137.5, 22.6888) (-130.4, 23.6248) (-123.4, 24.3392) (-116.3, 24.8850) (-109.2, 25.2720) (-102.1, 25.5138) (-95.04, 25.6184) (-87.96, 25.5904) (-80.88, 25.4282) (-73.80, 25.1268) (-66.72, 24.6762) (-59.64, 24.0600) (-52.56, 23.2526) (-45.48, 22.2142) (-38.40, 20.8818) (-31.32, 19.1468) (-24.24, 16.8047) (-17.26, 13.4541) (-17.16, 13.3942) (-13.72, 11.0146) (-10.18, 7.56132) (-10.08, 7.44006) (-6.640, 1.67786) (-3.1, -23)}
+
+ \expandafter\def\csname ISOA-1\endcsname {(-176.4, 13.2463) (-172.8, 18.2469) (-172.8, 18.2469) (-169.3, 21.3038) (-165.7, 23.5908) (-165.7, 23.5908) (-162.1, 25.3716) (-158.5, 26.8196) (-151.4, 29.0364) (-144.2, 30.7118) (-137.0, 31.9982) (-129.9, 32.9852) (-122.7, 33.7594) (-115.6, 34.3364) (-108.4, 34.7560) (-101.2, 35.0244) (-94.08, 35.1502) (-86.92, 35.1408) (-79.76, 34.9946) (-72.60, 34.7070) (-65.44, 34.2682) (-58.28, 33.6620) (-51.12, 32.8632) (-43.96, 31.8320) (-36.80, 30.5054) (-29.64, 28.7750) (-22.48, 26.4366) (-15.42, 23.0878) (-15.32, 23.0286) (-11.84, 20.6490) (-8.260, 17.1959) (-8.160, 17.0760) (-4.680, 11.3113) (-1.1, -20)}
diff --git a/graphics/pgf/contrib/bodegraph/bodegraph.tex b/graphics/pgf/contrib/bodegraph/bodegraph.tex
new file mode 100644
index 0000000000..a523a20d53
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/bodegraph.tex
@@ -0,0 +1,1263 @@
+\documentclass{article}
+\usepackage[T1]{fontenc} % Correspondance clavier -> document
+\usepackage{fourier}
+\usepackage[usenames,dvipsnames]{xcolor}
+\usepackage{atbegshi}
+\usepackage{tikz}
+\usepackage{Parallel}
+\usetikzlibrary{arrows,snakes}%
+
+%\usetikzlibrary{external}
+%\tikzexternalize{main} % provide the file's real name
+
+\usepackage{calc,fullpage}
+\usepackage{amsmath,amssymb}
+\usepackage[frenchb]{babel}
+\usepackage{url}
+
+\usepackage{multicol}
+
+\usepackage{tkzexample}
+%\usepackage{microtype}
+\usepackage{graphicx}
+
+
+\usepackage{hyperref}
+\parindent=0pt
+
+\newdimen\oldparindent
+
+\usepackage{bodegraph}
+%-------------PAGE-DE-GARDE----------------------------------------------------
+
+\title{Diagrammes de Bode, Black et Nyquist avec PGF/TIKZ} % Titre
+\author{Papanicola Robert\thanks{Merci à Germain Gondor pour ses remarques}} % Auteur(s)
+
+\date{\today} % Date (\today pour aujourd'hui)
+
+
+%-------------DEBUT-DU-DOCUMENT-----------------------------------------------
+\makeindex
+
+\newcommand{\traduction}[2]{
+\begin{minipage}[t]{0.48\linewidth}
+#1
+\end{minipage}\hfill
+\begin{minipage}[t]{0.48\linewidth}
+#2
+\end{minipage}
+}
+
+\begin{document}
+
+\maketitle
+
+
+\begin{description}
+\item[version 1.4] 09/10/2010 : modification du répertoire par défaut des fichiers gnuplot.
+\item[version 1.3] 1/05/2010 :
+\begin{itemize}
+\item Ajout de la commande \verb"\semilogNG" qui permet de tracer un diagramme semi-log sans graduation
+\item suppression de tous les styles (couleurs et épaisseurs) et remplacement par des styles définis par \verb"\tikzset";
+\item Ajout de la commande \verb"\BodePoint".
+
+\end{itemize}
+\item[version 1.2.1:] 20/01/2010 : ajout de la commande \verb"\semilog*" pour une grille log plus fine.
+\item [version 1.2:] 22/08/2009,
+\begin{itemize}
+\item remplacement des commandes \verb"\BodeAmp" et \verb"\BodeArg" par \verb"\BodeGraph", ces deux commandes sont maintenues pour assurer la compatibilité avec les anciens fichiers.
+\item ajout des commandes \verb"\BlackText" et \verb"\NyquistText" permettant d'annoter les courbes de Black et Nyquist;
+\item ajout de la commande \verb"\BodePoint" qui permet de marquer sur les diagrammes une liste de points par une puce (pas d'annotation de ces points);
+\item ajout d'un style pour les puces;
+
+\end{itemize}
+
+\item[version 1.1:] 03/05/2009, ajout;
+\begin{itemize}
+\item abaque temps de réponse 2\up{nd} ordre,
+\item abaque des dépassements d'un 2\up{nd} ordre;
+\end{itemize}
+\item[version 1:] mise en ligne de la version initiale 06/04/2009.
+
+
+\end{description}
+
+
+
+\section{Présentation / Introduction}
+
+\traduction{Ce package permet de tracer les diagrammes de Bode, Black et Nyquist à l'aide de Gnuplot et Tikz. Les fonctions de transfert élémentaires et les correcteurs courants sont préprogrammés pour être utilisés dans les fonctions de tracé.
+}{This package allows you to draw the Bode plots, Nyquist, and Black using Gnuplot and Tikz. Elementary Functions Transfer and basics correctors are preprogrammed to be used.
+}
+
+
+\subsection{Nécessite / Need}
+\traduction{Pour fonctionner ce package a besoin:
+\begin{itemize}
+\item d'une version CVS de Pgf/Tikz (certaines commandes de calculs ont étés modifiées ou intégrées depuis la version 2), elle peut être téléchargée sur le site Texample \url{http://www.texample.net/tikz/builds/}.
+\item que \emph{gnuplot} soit installé et configuré pour être exécuté lors de la compilation de votre fichier \LaTeX (Cf. la doc de Pgf/Tikz).
+\end{itemize}
+}{To run this package requires:
+\begin{itemize}
+\item a CVS Pgf / Tikz (some commands calculations have summers modified or integrated since version 2) it can be downloaded from Texample http://www.texample.net/tikz/builds/
+\item that \emph{gnuplot} is installed and configured to run when compiling your \LaTeX file (see the doc Pgf / Tikz)
+\end{itemize}
+}
+
+
+
+
+\subsection{Composition du package / Composition of Package}
+
+\traduction{
+Ce package est constitué de trois fichiers:
+\begin{itemize}
+\item bodegraph.sys : le package proprement dit;
+\item isom.txt : macro-commandes de définition des courbes iso-module;
+\item isoa.tx : macro-commandes de définition des courbes iso-arguments.
+\end{itemize}
+et du fichier bodegraph.tex, ce fichier contenant la documentation.
+
+Remarque: pour compiler ce document latex, vous avez besoin du package tkzexample \url{http://altermundus.fr/SandBox/tkzexample.zip} de Alain Matthes.
+
+Les courbes gnuplot précalculées sont dans le répertoire /gnuplot/.
+}{Package This package consists of three files:
+\begin{itemize}
+\item bodegraph.sys: the package itself;
+\item Isom.txt: macros defining curves iso-module
+\item Isoa.tx: macros definition curves iso-arguments.
+\end{itemize}
+bodegraph.tex file, the file containing the documentation.
+
+Note: To compile latex document, you need the package tkzexample \url{http://altermundus.fr/SandBox/tkzexample.zip} by Alain Matthes.
+
+Gnuplot precomputed curves are in the directory /gnuplot/.
+}
+
+\subsection{Utilisation / Use}
+
+\traduction{
+Décompresser l'archive du package dans votre répertoire personnel.
+
+Rajouter dans l'entête la commande \\usepackage\{bodegraph\}.
+}{Unzip the archive package in your home directory.
+
+Add in the header control \\usepackage\{bodegraph\}..
+}
+
+
+
+\subsection{ToDo}
+
+\traduction{
+\begin{itemize}
+\item Compléter les fonctions élémentaires,
+\item Traduction correcte en anglais,
+\item \dots
+\end{itemize}
+}{
+\begin{itemize}
+\item Complete the basic functions
+\item Better english !!!
+\item \dots
+\end{itemize}
+}
+
+
+
+\newpage
+
+
+\section{Les commandes / Orders}
+
+\subsection{Grille semilog / Semilog grid}
+\begin{itemize}
+\item \verb"\semilog{décade mini}{décade maxi}{ymini}{ymaxi}"
+\item \verb"\semilog*{décade mini}{décade maxi}{ymini}{ymaxi}"
+\end{itemize}
+
+
+
+Cette commande générique, étoilée ou non permet de tracer une grille semilog. La commande étoilée permet d'afficher une grille logarithmique plus précise (demi valeur).
+
+
+
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[yscale=2/30,xscale=7/5]
+\semilog{-2}{3}{-20}{10}
+\end{tikzpicture}
+\end{tkzexample}
+
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[yscale=2/30,xscale=7/5]
+\semilog*{-2}{3}{-20}{10}
+\end{tikzpicture}
+\end{tkzexample}
+
+L'amplitude des coordonnées de l'abcisse doit être donnée en décade, de $10^{décade mini}$ à $10^{decade maxi}$, l'ordonnée varie elle de $ymini$ à $ymaxi$.
+
+On utilisera les commandes d'échelles de tikz pour adapter les dimensions de la grille à celle de la page. Ainsi si on souhaite afficher un diagramme d'amplitude de 5 décades de $10^{-1}$ à $10^{4}$ sur 7~cm et 80~dB de -60 à 20~dB sur 3~cm, le diagramme de phase de $-180^\circ$ à $0^\circ$ sur 3~cm avec un pas vertical de $30^\circ$ en précisant les unités (figure~\ref{fig:semilog}):
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+
+\begin{tikzpicture}[xscale=7/5]
+\begin{scope}[yscale=3/80]
+\UnitedB
+\semilog{-1}{4}{-60}{20}
+\end{scope}
+
+\begin{scope}[yshift=-3cm,yscale=3/180]
+\UniteDegre
+\OrdBode{30}
+\semilog{-1}{4}{-180}{0}
+\end{scope}
+\end{tikzpicture}
+
+\end{tkzexample}
+
+\caption{Grille semilog}
+\label{fig:semilog}
+\end{figure}
+
+
+\subsection{Grille semilog sans graduation / grid without graduation}
+
+La commande \verb"\semilogNG{nbdec}{y}" permet de tracer des diagrammes semi log sans graduation, le premier paramètre est le nombre de décade, le second l'amplitude des ordonées.
+
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[yscale=3/50,xscale=\textwidth/3cm]
+\semilogNG{3}{50}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsection{Paramètres de configuration des diagrammes / parameters}
+
+\begin{itemize}
+\item \verb"\UnitedB" permet d'afficher les unités pour un diagramme d'amplitude
+\item \verb"\UniteDegre" permet d'afficher les unités pour un diagramme de phase,
+\item \verb"\OrdBode{pas}" permet de préciser le pas des graduations verticales (par défaut 10) du diagramme semilog,
+\item \verb"\Unitx{} " et \verb"\Unity{}"permettent de choisir directement les unités à afficher, à utiliser sous la forme \verb"\def\Unity{}"
+\end{itemize}
+
+Les styles de tracé par défaut sont définis à l'aide de la commande \verb"\tikzset" :
+\begin{itemize}
+\item \verb"Bode lines/.style={very thick, blue}": style par défaut des tracé de bode (amplitude et gain);
+\item \verb"asymp lines/.style={Bode lines,thin}": style, déduit du précédent, utilisable pour tracer les asymptotes;
+\item \verb"semilog lines/.style={thin, brown}": style par défaut de la grille semilog;
+\item \verb"semilog half lines/.style={semilog lines 2, dashed }": style par défaut des demi pas de la grille semilog;
+\item \verb"semilog label x/.style={semilog lines,below,font=\tiny}": style des labels de l'axe des abscisses de la grille semilog;
+\item \verb"semilog label y/.style={semilog lines,right,font=\tiny}": idem pour l'axe des ordonnées.
+\end{itemize}
+
+
+Vous pouvez, en modifiant ces styles agir les tracés par défaut.
+
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\begin{scope}[yscale=2/50,
+xscale=0.9\textwidth/3cm]
+\semilog*{0}{3}{-20}{30}
+\end{scope}
+\begin{scope}[yshift=-3cm,
+yscale=2/50,xscale=0.9\textwidth/3cm]
+\tikzset{
+ semilog lines/.style={thin, blue},
+ semilog lines 2/.style={semilog lines,
+ red!50 },
+ semilog half lines/.style={semilog lines 2,
+ dotted },
+ semilog label x/.style={semilog lines,
+ below,font=\tiny},
+ semilog label y/.style={semilog lines,
+ right,font=\tiny}
+}
+\semilog*{0}{3}{-20}{30}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+
+
+\subsection{Tracé des diagrammes / Drawing bode graph}
+
+Les commandes de tracés nécessitent que gnuplot (\url{http://www.gnuplot.info/}) soit installé et utilisable par votre distribution \LaTeX.
+
+Trois commandes permettent de tracer les diagrammes d'amplitude et de phase (figure~\ref{fig:utilBodeGraph}).
+\begin{itemize}
+\item \verb"\BodeGraph[Options]{domain}{fonction}" pour le diagramme d'amplitude et de phase;
+\item \verb"\BodeGraph*[Options]{domain}{fonction}{[options]{texte}}" réalise le tracé et ajoute le texte avec les options précisées à l'extrémité.
+\item \verb"\BodePoint[Options]{liste}{fonction}" place les points de la liste sur le diagramme;
+\end{itemize}
+avec
+\begin{itemize}
+\item \verb"domain" le domaine du tracé précisé en puissance de 10, ainsi pour tracer une fonction de $10^{-2}$~rad/s à $10^{2}$~rad/s on notera le domaine \verb"-2:2";
+\item \verb"fonction" la fonction à tracé écrite avec la syntaxe gnuplot.
+\item \verb"options" par défaut les options suivantes \verb"[samples=50, thick, blue]" sont appliquées, toutes les options de tracé de tikz et de gnuplot peuvent être utilisées et substituent à celle par défaut, on notera principalement
+\begin{itemize}
+\item spécifiques à tikz
+\begin{itemize}
+\item la couleur, [red], [blue], \dots
+\item l'épaisseur [thin], [thick], \dots
+\item le style [dotted] [dashed], \dots
+\end{itemize}
+\item spécifiques à gnuplot
+\begin{itemize}
+\item le nombre de points [samples=xxx]
+\item l'identifiant du fichier créé [id=nomdufichier], il est à noter que tikz, sauvegarde au premier appel de gnuplot la table des valeurs et que si celle-ci est inchangée lors d'une compilation ultérieure, tikz réutilise la table précédemment sauvée. il est donc important pour minimiser le temps de compilation de préciser un id différent pour chaque courbe, par défaut les macros sauvegardent les graphes dans des fichiers différents (incrémentation d'un compteur), il n'est donc utile de nommer la courbe que si vous souhaitez la retrouver.
+\item le répertoire de sauvegarde des tables de données [prefix=repertoire/] (par défaut \verb"prefix=gnuplot/\jobname"). Cette configuration par défaut est réglé par un style défini à l'aide de \\ \verb"\tikzset" : \verb"gnuplot def/.style={samples=50,id=\arabic{idGnuplot},prefix=gnuplot/\jobname }".
+\end{itemize}
+\item pour les autres options, consulter la documentation de tikz.
+\end{itemize}
+\item styles prédéfinis: plusieurs styles sont prédéfinis à l'aide de la commande \verb"\tikzset", voir plus haut, la description des styles.
+\end{itemize}
+
+
+
+Ainsi pour tracer le diagramme d'amplitude de la fonction du premier ordre, $H(s) =\dfrac{3}{1+0.3\cdot s}$ entre $10^{-2}$~rad/s et $10^{2}$~rad/s sur une grille semi logarithmique, on utilise la séquence de commandes ci-dessous.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/4,yscale=5/30]
+\semilog{-2}{2}{-20}{10}
+\BodeGraph{-2:2}{20*log10(abs(3/sqrt
+(1+(0.3*10**t)**2)))}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Utilisation de BodeGraph}
+\label{fig:utilBodeGraph}
+\end{figure}
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/4,yscale=5/30]
+\semilog{-2}{2}{-20}{10}
+\BodePoint{0.1,0.15,0.5,1,2.5,5,10,50,80}
+{20*log10(abs(3/sqrt
+(1+(0.3*10**t)**2)))}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Utilisation de BodePoint}
+\label{fig:utilBodePoint}
+\end{figure}
+
+
+
+\subsection{Fonctions de transfert élémentaires}
+
+Les fonctions de base pour tracer les diagrammes de Bode des systèmes du premier, du second ordre, et l'intégration, sont directement implémentées dans le package ainsi que les diagrammes asymptotiques de ces même fonctions.
+
+Ces fonctions ne peuvent être utilisées qu'avec les commandes de tracé:
+\begin{itemize}
+\item \verb"\BodeGraph[Options]{domaine}{fonction}";
+\item \verb"\BodeGraph*[Options]{domaine}{fonction}";
+\end{itemize}
+
+Le tracé des asymptotes présente un défaut à la cassure, cela est du à la finesse du tracé avec gnuplot, pour améliorer ce tracé, il est possible d'utiliser l'option \verb"const plot" qui permet de tracer des créneaux et d'augmenter le nombre de points à calculer \verb"samples=xxx" et mais cela risque d'accroître le temps de compilation.
+
+
+\subsubsection{Premier ordre}
+
+Deux commandes implémentent les formules permettant le tracé des diagrammes d'amplitude et de phase par gnuplot de la fonction du premier ordre $H_1(s)=\dfrac{K}{1+\tau\cdot s}$ et deux autres les diagrammes asymptotiques (figure~\ref{fig:premierordre}):
+
+\begin{itemize}
+\item \verb"\POAmp{K}{tau}" pour le diagramme d'amplitude, avec \verb"K" le gain \verb"tau" la constante de temps;
+\item \verb"\POAmpAsymp{K}{tau}" pour le diagramme asymptotique d'amplitude;
+\item \verb"\POArg{K}{tau}" pour le diagramme de phase;
+\item \verb"\POArgAsymp{K}{tau}" pour le diagramme asymptotique de phase.
+\end{itemize}
+
+Remarque : la donnée, \verb"{K}" n'est pas utile pour tracer le diagramme de phase, il est juste maintenu pour faciliter l'écriture de la fonction par copie directe de la commande de tracer du module.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+
+\begin{tikzpicture}[xscale=7/4]
+\begin{scope}[yscale=3/40]
+\semilog{-2}{2}{-20}{20}
+\BodeGraph[asymp lines,samples=100]{-2:2}
+{\POAmpAsymp{6}{0.3}}
+\BodeGraph{-2:2}{\POAmp{6}{0.3}}
+\end{scope}
+
+\begin{scope}[yshift=-2.5cm,yscale=3/90]
+\semilog{-2}{2}{-90}{0}
+\BodeGraph[asymp lines,samples=100, const plot]{-2:2}
+{\POArgAsymp{6}{0.3}}
+\BodeGraph{-2:2}{\POArg{6}{0.3}}
+\end{scope}
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Premier ordre}
+\label{fig:premierordre}
+\end{figure}
+
+
+
+
+
+\subsubsection{Second ordre}
+
+Deux commandes implémentent les formules permettant le tracé des diagrammes d'amplitude et de phase par gnuplot de la fonction du second ordre $H_2(s)=\dfrac{K}{1+\dfrac{2\cdot z}{\omega_n}\cdot s +\dfrac{s^2}{\omega_n^2}}$ et deux pour le tracé des asymptotes (figure~\ref{fig:Secondordre}):
+\begin{itemize}
+\item \verb"\SOAmp{K}{z}{Wn}" pour le diagramme d'amplitude, avec \verb"K" le gain, \verb"z" le coefficient d'amortissement et \verb"Wn" la pulsation propre;
+\item \verb"\SOAmpAsymp{K}{z}{Wn}" pour le diagramme asymptotique d'amplitude;
+\item \verb"\SOArg{K}{z}{Wn}" pour le diagramme de phase;
+\item \verb"\SOArgAsymp{K}{z}{Wn}" pour le diagramme asymptotique de phase;
+\end{itemize}
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/3]
+\tikzset{
+ mylines/.style={very thick, red},
+ myasymp/.style={Bode lines,thin,black},
+}
+\begin{scope}[yscale=3/40]
+\UnitedB
+\semilog{-1}{2}{-20}{20}
+\BodeGraph[myasymp]{-1:1.7}
+{+\SOAmpAsymp{6}{0.3}{10}}
+\BodeGraph[mylines,samples=101]{-1:1.7}
+{\SOAmp{6}{0.3}{10}}
+\end{scope}
+\begin{scope}[yshift=-2.5cm,yscale=3/180]
+\OrdBode{30}
+\UniteDegre
+\semilog{-1}{2}{-180}{0}
+\BodeGraph[myasymp]{-1:0.999}
+{\SOArgAsymp{6}{0.3}{10}}
+\BodeGraph[myasymp]{1:2}
+{\SOArgAsymp{6}{0.3}{10}}
+\BodeGraph[mylines]{-1:2}
+{\SOArg{6}{0.3}{10}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Second ordre}
+\label{fig:Secondordre}
+\end{figure}
+
+
+
+
+
+
+\subsubsection{Intégrateur}
+ $H_i(s)=\dfrac{K}{s}$ (figure~\ref{fig:integrateur})
+\begin{itemize}
+\item \verb"\IntAmp{K}" pour le diagramme d'amplitude;
+\item \verb"\IntArg{K}" pour le diagramme de phase.
+\end{itemize}
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\begin{scope}[xscale=7/4,yscale=3/80]
+\semilog{-2}{2}{-40}{40}
+\BodeGraph{-2:2}{\IntAmp{1}}
+\end{scope}
+
+\begin{scope}[yshift=-2.5cm,
+xscale=7/4,yscale=3/110]
+\semilog{-2}{2}{-100}{10}
+\BodeGraph{-2:2}{+\IntArg{1}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Intégrateur}
+\label{fig:integrateur}
+\end{figure}
+
+
+
+\subsubsection{Gain seul} $H_K(s)=K$ : \verb"\KAmp{K}" pour le diagramme d'amplitude (pas de diagramme de phase).
+
+
+\subsubsection{Retard} $H_r(s)=e^{-T_r\cdot s}$(figure~\ref{fig:ret1ordre})
+\begin{itemize}
+\item \verb"\RetAmp{Tr}" pour le diagramme d'amplitude;
+\item \verb"\RetArg{Tr}" pour le diagramme de phase.
+\end{itemize}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/3]
+\begin{scope}[yscale=4/50]
+\UnitedB
+\semilog{0}{3}{-40}{10}
+\BodeGraph{0:3}{\RetAmp{0.08}}
+\BodeGraph[red]{0:3}{\POAmp{1}{0.08}}
+\BodeGraph[black]{0:3}{\POAmp{1}{0.08}
++\RetAmp{0.08}}
+\draw [latex-](2.2,-0)--++(-0.1,-5)
+node[left] {retard};
+\draw [latex-](2.2,-22)--++(-0.1,-5)
+node[left] {1er ordre};
+\draw [latex-](2.2,-22) --++(-0.1,-10)
+node[left] {1er ordre retardé};
+\end{scope}
+\begin{scope}[yshift=-3.8cm,yscale=4/180]
+\UniteDegre
+\OrdBode{30}
+\semilog{0}{3}{-180}{0}
+\BodeGraph{0:3}{\RetArg{0.08}}
+\BodeGraph[red]{0:3}{\POArg{1}{0.08}}
+\BodeGraph[black]{0:3}{\POArg{1}{0.08}
++\RetArg{0.08}}
+\draw [latex-](2.8,-50)--++(-0.1,-10)
+node[left] {retard};
+\draw [latex-](2.8,-88)--++(-0.1,+10)
+node[left] {1er ordre};
+\draw [latex-](2.8,-140) --++(-0.1,-10)
+node[left] {1er ordre retardé};
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Retard et 1er ordre}
+\label{fig:ret1ordre}
+\end{figure}
+
+
+
+\subsubsection{Premier Ordre généralisé} $H(p)=K\dfrac{a_1+a_2\cdot p}{b_1+b_2\cdot p}$ (figure~\ref{fig:premierordregeneralise})
+\begin{multicols}{2}
+Courbes réelles
+\begin{itemize}
+\item \verb"\POgAmp{K}{a1}{a2}{b1}{b2}"
+\item \verb"\POgArg{K}{a1}{a2}{b1}{b2}"
+\end{itemize}
+
+Asymptotes
+\begin{itemize}
+\item \verb"\POgAmpAsymp{K}{a1}{a2}{b1}{b2}"
+\item \verb"\POgArgAsymp{K}{a1}{a2}{b1}{b2}"
+\end{itemize}
+\end{multicols}
+
+$a_1$ et $b_1$ ne doivent pas être nuls.
+
+
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\begin{scope}[xscale=7/4,yscale=3/80]
+\semilog{-2}{2}{-40}{40}
+\BodeGraph{-2:2}{\POgAmp{3}{4}{5}{6}{70}}
+\BodeGraph[thin,red]{-2:2}
+{0+\POgAmpAsymp{3}{4}{5}{6}{70}}
+\end{scope}
+
+\begin{scope}[yshift=-3.5cm,
+xscale=7/4,yscale=3/180]
+\semilog{-2}{2}{-90}{90}
+\BodeGraph{-2:2}{\POgArg{3}{4}{5}{6}{70}}
+\BodeGraph[thin,red,const plot]{-2:2}
+{0+\POgArgAsymp{3}{4}{5}{6}{70}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Premier ordre généralisé}
+\label{fig:premierordregeneralise}
+\end{figure}
+
+
+\subsubsection{Fonctions inverses}
+
+À partir des fonctions élémentaires ci dessus il est facile de tracer les fonctions inverses en changeant uniquement le signe.
+\begin{description}
+\item [Premier ordre au numérateur : ] $N_1(s)=1+T\cdot s$ avec
+\begin{itemize}
+\item \verb"\BodeGraph[Options]{domain}{-\POAmp{1}{T}}" pour le module,
+\item \verb"\BodeGraph[Options]{domain}{-\POArg{1}{T}}" pour la phase;
+\end{itemize}
+\item [Second ordre au numérateur : ]$N_2(s)=1+2\dfrac{2\cdot z}{\omega_n} cdot s +\dfrac{s^2}{\omega_n^2}$ avec
+\begin{itemize}
+\item \verb"\BodeGraph[Options]{domain}{-\SOAmp{1}{z}{Wn}}" pour le module,
+\item \verb"\BodeGraph[Options]{domain}{-\SOArg{1}{z}{Wn}}" pour la phase;
+\end{itemize}
+
+\item [Dérivateur : ] $N_d(s)=s$ avec
+\begin{itemize}
+\item \verb"\BodeGraph[Options]{domain}{-\IntAmp{1}}" pour le module,
+\item \verb"\BodeGraph[Options]{domain}{-\IntArg{1}}" pour la phase.,
+
+\end{itemize}
+
+
+\end{description}
+
+\subsection{Correcteurs}
+
+Les correcteurs de base sont aussi pre-programmés.
+
+\paragraph{Correcteur P}$C(p)=K$
+\begin{itemize}
+\item module : \verb"\Kamp{K}"
+\item argument : \verb"\Karg{K}"\footnote{commande inutile, elle retourne 0}
+
+\end{itemize}
+
+\paragraph{Correcteur PI} $C(s)=K_p\cdot\dfrac{1+T_i\cdot s}{T_i\cdot s}$ (figure~\ref{fig:corpi})
+
+\begin{multicols}{2}
+\begin{itemize}
+\item module : \verb"\PIAmp{Kp}{Ti}",
+\item argument: \verb"\PIArg{Kp}{Ti}"
+\end{itemize}
+et les tracés asymptotiques
+\begin{itemize}
+\item module : \verb"\PIAmpAsymp{Kp}{Ti}",
+\item argument: \verb"\PIArgAsymp{Kp}{Ti}"
+\end{itemize}
+\end{multicols}
+
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/3]
+\begin{scope}[yscale=3/40]
+\UnitedB
+%\node{\tiny \PIAmp{3}{0.5}};
+\BodeGraph[thick]{0:3}
+{\PIAmp{2}{0.08}}
+\BodeGraph[black]{0:3}
+{\PIAmpAsymp{2}{0.08}}
+\semilog{0}{3}{-10}{30}
+\end{scope}
+\begin{scope}[yshift=-1cm,yscale=3/90]
+\UniteDegre
+\semilog{0}{3}{-90}{0}
+\BodeGraph[thick]{0:3}
+{\PIArg{2}{0.08}}
+\BodeGraph[samples=2,black
+,samples=201]{0:3}{\PIArgAsymp{2}{0.08}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Correcteur P.I}
+\label{fig:corpi}
+\end{figure}
+
+
+
+\subsubsection{Correcteur PD} $C(p)=K_p\cdot\left(1+T_d\cdot p\right)$, le correcteur PD programmé est un correcteur idéal, pour réaliser un correcteur réel, on utilisera le correcteur à avance de phase (figure~\ref{fig:corpd}).
+\begin{multicols}{2}
+\begin{itemize}
+\item module : \verb"\PDAmp{Kp}{Td}",
+\item argument: \verb"\PDArg{Kp}{Td}"
+\end{itemize}
+Asymptotes
+\begin{itemize}
+\item module : \verb"\PDAmpAsymp{Kp}{Td}",
+\item argument: \verb"\PDArgAsymp{Kp}{Td}"
+\end{itemize}
+\end{multicols}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/3]
+\begin{scope}[yscale=3/50]
+\UnitedB
+\BodeGraph[thick]{0:3}{\PDAmp{2}{0.08}}
+\BodeGraph[black]{0:3}{\PDAmpAsymp{2}{0.08}}
+\semilog{0}{3}{0}{50}
+\end{scope}
+\begin{scope}[yshift=-3.5cm,yscale=3/90]
+\UniteDegre
+\semilog{0}{3}{0}{90}
+\BodeGraph[thick]{0:3}{\PDArg{2}{0.08}}
+\BodeGraph[samples=2,black,samples=201]
+{0:3}{\PDArgAsymp{2}{0.08}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Correcteur P.D}
+\label{fig:corpd}
+\end{figure}
+
+
+
+
+
+\subsubsection{Correcteur à Avance de phase} $C_{AP}(p)=K_p\cdot\dfrac{1+a\cdot T_1 \cdot p}{1+T_1\cdot p}$ (figure~\ref{fig:corav})
+\begin{multicols}{2}
+Courbes réelles
+\begin{itemize}
+\item module : \verb"\APAmp{Kp}{T1}{a}",
+\item argument: \verb"\APArg{Kp}{Ti}{a}"
+
+\end{itemize}
+Asymptotes
+\begin{itemize}
+\item module : \verb"\APAmpAsymp{Kp}{T1}{a}",
+\item argument: \verb"\APArgAsymp{Kp}{Ti}{a}"
+\end{itemize}
+\end{multicols}
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/3]
+\begin{scope}[yscale=3/40]
+\UnitedB
+%\node{\tiny \PIAmp{3}{0.5}};
+\semilog{0}{3}{-10}{30}
+\BodeGraph{0:3}{\APAmp{2}{0.02}{3}}
+\BodeGraph[thin,samples=101,red]
+{0:3}{\APAmpAsymp{2}{0.02}{3}}
+\end{scope}
+\begin{scope}[yshift=-3cm,yscale=3/180]
+\UniteDegre
+\OrdBode{30}
+\semilog{0}{3}{-90}{90}
+\BodeGraph{0:3}{\APArg{2}{0.02}{3}}
+\BodeGraph[thin,samples=201,red]
+{0:3}{\APArgAsymp{2}{0.02}{3}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Correcteur avance de phase}
+\label{fig:corav}
+\end{figure}
+
+
+
+\subsubsection{Correcteur à Retard de phase} $C_{RP}(p)=K_p\cdot\dfrac{1+ T_1 \cdot p}{1+a\cdot T_1\cdot p}$(figure~\ref{fig:corar})
+
+\begin{multicols}{2}
+\begin{itemize}
+\item module : \verb"\RPAmp{Kp}{T1}{a}",
+\item argument: \verb"\RPArg{Kp}{Ti}{a}"
+\end{itemize}
+Asymptotes
+\begin{itemize}
+\item module : \verb"\RPAmpAsymp{Kp}{T1}{a}",
+\item argument: \verb"\RPArgAsymp{Kp}{Ti}{a}"
+\end{itemize}
+\end{multicols}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/3]
+\begin{scope}[yscale=3/40]
+\UnitedB
+%\node{\tiny \PIAmp{3}{0.5}};
+\semilog{0}{3}{-10}{30}
+\BodeGraph[thick]
+{0:3}{\RPAmp{2}{0.02}{3}}
+\BodeGraph[,thin,samples=101,red]
+{0:3}{\RPAmpAsymp{2}{0.02}{3}}
+\end{scope}
+\begin{scope}[yshift=-3cm,yscale=3/180]
+\UniteDegre
+\OrdBode{30}
+\semilog{0}{3}{-90}{90}
+\BodeGraph[thick]
+{0:3}{\RPArg{2}{0.02}{3}}
+\BodeGraph[thin,samples=201,red]
+{0:3}{\RPArgAsymp{2}{0.02}{3}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Correcteur retard de phase}
+\label{fig:corar}
+\end{figure}
+
+
+
+
+\subsubsection{Correcteur PID série} $C(s)=K_p\cdot\dfrac{1+T_i\cdot s}{T_i\cdot s}\cdot\left(1+T_d\cdot s\right)$ (figure~\ref{fig:corpids})
+\begin{multicols}{2}
+Courbes réelles
+\begin{itemize}
+\item module : \verb"\PIDAmp{Kp}{Ti}{Td}",
+\item argument: \verb"\PIDArg{Kp}{Ti}{Td}"
+\end{itemize}
+Asymptotes
+\begin{itemize}
+\item module : \verb"\PIDAmpAsymp{Kp}{Ti}{Td}",
+\item argument: \verb"\PIDArgAsymp{Kp}{Ti}{Td}"
+\end{itemize}
+\end{multicols}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/3]
+\begin{scope}[yscale=3/40]
+\UnitedB
+\semilog{0}{3}{-10}{30}
+\BodeGraph{0:3}
+{\PIDAmp{2}{0.08}{0.02}}
+\BodeGraph[black]
+{0:3}{\PIDAmpAsymp{2}{0.08}{0.02}}
+\end{scope}
+\begin{scope}[yshift=-3cm,yscale=3/180]
+\UniteDegre
+\OrdBode{30}
+\semilog{0}{3}{-90}{90}
+\BodeGraph{0:3}
+{\PIDArg{2}{0.08}{0.02}}
+\BodeGraph[samples=2,
+black,samples=201]
+{0:3}{\PIDArgAsymp{2}{0.08}{0.02}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Correcteur P.I.D série}
+\label{fig:corpids}
+\end{figure}
+
+
+
+
+\subsection{Fonctions de transfert complexe}
+
+
+Pour tracé les diagrammes de Bode d'un fonction de transfert complexe, définie par le produit de fonctions élémentaires, il suffit de sommer les représentation, aussi bien pour le tracé de la fonction que pour les asymptotes.
+\subsubsection{Exemples}
+
+\begin{description}
+\item [Premier ordre + intégrateur :] $H(s)=\dfrac{8}{s\cdot \left(1+0.5\cdot s\right)}$ (figure~\ref{fig:premiordreint})
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/4]
+\begin{scope}[yscale=2.5/100]
+\semilog{-2}{2}{-40}{60}
+\BodeGraph[thin,samples=100]{-1.5:1.5}
+{\POAmpAsymp{8}{0.5}+\IntAmp{1}}
+\BodeGraph{-1.5:1.5}{\POAmp{8}{0.5}+\IntAmp{1}}
+\end{scope}
+\begin{scope}[yshift=-2cm,yscale=2.5/200]
+\OrdBode{20}
+\semilog{-2}{2}{-200}{0}
+\BodeGraph[samples=100,thin]{-2:2}
+{\POArgAsymp{8}{0.5}+\IntArg{1}}
+\BodeGraph{-2:2}{\POArg{8}{0.5}+\IntArg{1}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Premier ordre + intégrateur}
+\label{fig:premiordreint}
+\end{figure}
+
+
+
+\item [Second ordre généralisé : ] $5\cdot\dfrac{1+0.01\cdot s}{1+\dfrac{2\cdot 0.3}{15}\cdot s +\dfrac{s^2}{15^2}}$(figure~\ref{fig:secondordregene})
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}[xscale=7/5]
+\begin{scope}[yscale=3/80]
+\semilog{-1}{4}{-50}{30}
+\BodeGraph[thin]{-1:4}
+{\SOAmpAsymp{5}{15}-\POAmpAsymp{1}{0.01}}
+\BodeGraph[smooth,samples=100]{-1:4}
+{\SOAmp{5}{0.3}{15}-\POAmp{1}{0.01}}
+\end{scope}
+\begin{scope}[yshift=-2.5cm,yscale=3/210]
+\OrdBode{20}
+\semilog{-1}{4}{-200}{10}
+\BodeGraph[thin,samples=100]{-1:4}
+{\SOArgAsymp{5}{15}-\POArgAsymp{1}{0.01}}
+\BodeGraph{-1:4}{\SOArg{5}{0.3}{15}-\POArg{1}{0.01}}
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Second ordre généralisé}
+\label{fig:secondordregene}
+\end{figure}
+
+
+
+\end{description}
+
+
+\section{Diagramme de Black}
+
+
+\subsection{Lieu de Black}
+
+ Trois commandes (et 3 étoilées) et permettent de tracer et commenter le lieu de Black d'une fonction (figure~\ref{fig:diagblack}).
+
+\begin{itemize}
+\item \verb"\BlackGraph[options de trace]{domaine}{fonction argument,fonction module}"
+\begin{itemize}
+\item \verb"{domaine}", c'est le domaine de tracé au sens de GnuPlot, il est conseillé de définir le domaine décade (entière ou non) comme \verb"{-1:3}", GnuPlot va tracer la fonction pour $\omega$ compris entre $10^{-1}$ et $10^{3}$.
+\item \verb"{argument,module}", la fonction à tracer doit être définie par la \verb"fonction argument" qui retourne l'argument en $~^\circ$ et la \verb"fonction module" qui retourne le module en dB. On peut bien sur utiliser les fonctions définies au dessus pour les diagrammes de Bode pour ces fonctions.
+\item \verb"[options de trace]", toutes les options tikz pour tracer des fonctions gnuplot.
+\end{itemize}
+\item \verb"\BlackGraph*[options de trace]{domaine}{fonction argument,fonction module}{[options]{texte}}" cette commande permet de rajouter commentaire (nom, référence, équation) à l'extrémité d'un tracé. Les paramètres sont identiques, se rajoute uniquement \verb"{[options]{texte}}"
+\begin{itemize}
+\item \verb"[options]", ce sont les options d'écriture du texte (couleur, position,...),
+\item \verb"{texte}", le texte à écrire entre parenthèses;
+\end{itemize}
+\item \verb"\BlackPoint[options]{liste pulsations}{fonction argument,fonction module}" cette commande permet de tracer et noter des points particuliers du graphe, la valeur de la pulsation est placée à coté (droite par défaut).
+\begin{itemize}
+\item \verb"[options]" options de tracé (couleur, id, prefix,\dots),
+\item \verb"{liste pulsations}" pulsations en rad/s séparées par une virgule,
+\item \verb"{fonction argument,fonction module}" identique à \verb"\BlackGraph"
+\end{itemize}
+
+\item \verb"\BlackPoint*[options]{liste pulsations}{fonction argument,fonction module}" la version étoilée de la commande précédente permet de choisir la position de chaque texte, comme l'exemple \verb"{1/right,10/left,150/above right,....)"
+
+\item \verb"\BlackText[options]{pulsation/pos/texte}{fonction argument,fonction module}" cette commande permet de positionner un \verb"texte" par rapport à la courbe définie par \verb"{fonction argument,fonction module}" le texte étant positionné à la pulsation \verb"pulsation", le paramètre \verb"pos" permet de préciser la position du texte (\verb"right", \verb"above", \verb"below left", \dots). Le point est nommé \verb"NBlack"
+
+\item \verb"\BlackText*[options]{pulsation/pos/texte}{fonction argument,fonction module}" cette commande est identique à la précédente mais ne dessine pas de points.
+\end{itemize}
+
+\subsubsection{styles par défaut}
+
+Le tracé du diagramme de Black, de la grille et de l'abaque de Black-Nichols utilise plusieurs styles que vous pouvez modifier, avec la commande \verb"\tikzset".
+
+\begin{itemize}
+\item \verb"Black lines/.style={very thick, blue}": style par défaut du tracé du lieu de Black;
+\item \verb"Black grid/.style={ultra thin,brown!50}": Style par défaut de la grille (commande \verb"\BlackGrid");
+\item \verb"Black label points/.style={font=\tiny}": style par défaut du label des points marqués (commandes \verb"\BlackPoint" et \verb"\BlackText");
+\item \verb"Black label axes/.style={Black grid, font=\tiny}" style par défaut des axes du diagrame;
+\item \verb"Black abaque mag/.style={gray,ultra thin,dashed,smooth}": style par défaut des contours isogains;
+\item \verb"Black abaque phase/.style={gray,ultra thin,smooth}": style par défaut des contours isoarguments;
+\item \verb"ref points/.style={circle,draw, black, opacity=0.7,fill, minimum size= 2pt, inner sep=0}": style utilisé pour marquer les points sur le diagramme.
+\end{itemize}
+
+
+
+\subsection{Grille et abaque de Black-Nichols}
+
+\subsubsection{grille}
+Une grille peut aussi être ajoutée avec la commande \verb"\BlackGrid" qui dessine une grille dont le pas horizontal est définie par la variable \verb"\valgridBx" (par défaut $45^\circ$ que l'on change si on le souhaite par \verb"\def\valgridBx{10}", le pas vertical est lui défini par \verb"\valgridBy" (par défaut 10~dB ). Cette commande dessine aussi le point critique (-$180^\circ$ ,0~dB) et gradue les axes. La commande étoilée \verb"\BlackGrid*" , ne dessine que la grille.
+
+\subsubsection{Abaque de Black-Nichols}
+
+\verb"\AbaqueBlack" permet de tracer les courbes isomodule et isoargument de l'abaque de Black-Nichols (figure~\ref{fig:AbaqueBlack}).
+
+
+Les seules valeurs possibles pour ces courbes de gain et d'argument sont les suivantes:
+\begin{itemize}
+\item isomodule, gain en dB: -30, -25, -20, -15, -12, -10, -8, -6, -5, -4, -3, -2, -1, -0.5, -0.2, 0, 0.2, 0.5, 1, 2, 2.3, 3, 4, 5, 6, 8, 10;
+\item isoargument, en $~^\circ$: 359, 357, 354, 350, 345, 340, 330, 315, 300, 285, 270, 255, 240 , 225, 210,195, 190, 170,165, 150, 135, 120, 105, 90, 75, 60, 45, 30, 20, 15, 10, 6, 3, 1.
+\end{itemize}
+
+Deux autres commandes permettent de limiter l'affichage à quelques courbes:
+\begin{itemize}
+\item \verb"\IsoModule[listedB]" cette commande permet de tracer uniquement les courbes d'amplitude de la liste \verb"listedB", par défaut, toutes les courbes sont dessinées.
+\item \verb"\IsoArgument[listedeg]", cette commande permet de tracer uniquement les courbes d'amplitude de la liste \verb"listedeg", par défaut, toutes les courbes sont tracées.
+\end{itemize}
+
+Le style des courbes tracées est modifiable à l'aide des deux commandes:
+\begin{itemize}
+\item \verb"\StyleIsoM[couleur,épaisseur, ...]" pour les courbes isomodules.
+\item \verb"\StyleIsoA[couleur,épaisseur, ...]" pour les courbes isoarguments.
+\end{itemize}
+
+Ces deux commandes se rajoutent aux options de style défini par défaut.
+
+Remarque: pour ne pas trop ralentir la compilation, les courbes sont pré-calculées. Elles sont définies dans les deux fichiers isom.txt et isoa.txt (respectivement pour le module et l'argument). Si vous souhaitez ajouter de nouvelles courbes, il faut les ajouter dans ces fichiers en respectant la syntaxe.
+
+
+
+
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=7cm,small]
+
+\begin{tikzpicture}
+\begin{scope}[xscale=6/180,yscale=8/60]
+\BlackGraph*[samples=150,red,smooth,ultra thick,-<]
+{-2:1}{\SOBlack{1}{0.1}{1500}}
+{[red,right]{\footnotesize $H_1$}}
+\BlackGraph*[samples=150,black,smooth,ultra thick]
+{-1:3.5}{\SOArg{5}{0.2}{150},\SOAmp{5}{0.2}{150}}
+{[right]{$H_2 $}}
+\BlackGraph[samples=150,blue,smooth,ultra thick]
+{1:5}{\SOArg{1}{0.1}{1500}+\IntArg{0.43/0.0009}
+-2*\POArg{1}{0.0009},\SOAmp{1}{0.1}{1500}+
+\IntAmp{0.43/0.0009}-2*\POAmp{1}{0.0009}}
+
+\BlackGraph*[samples=100,purple,smooth]
+{-3:2}{\POArg{5}{3},\POAmp{5}{3}}
+{[purple!50,right]{\footnotesize $H_3$}}
+
+\BlackPoint[purple]{0.1,1,3,12,65}
+{\POArg{5}{3},\POAmp{5}{3}}
+
+\BlackPoint*[black]{25/right,
+80/above right,500/above,1500/above,4000/right}
+{\SOArg{1}{0.1}{1500}+\IntArg{0.43/0.0009}
+-2*\POArg{1}{0.0009},\SOAmp{1}{0.1}{1500}+
+\IntAmp{0.43/0.0009}-2*\POAmp{1}{0.0009}}
+
+\BlackText[blue]{5000/left/{\normalsize $H_4$}}
+{\SOArg{1}{0.1}{1500}+\IntArg{0.43/0.0009}
+-2*\POArg{1}{0.0009},\SOAmp{1}{0.1}{1500}+
+\IntAmp{0.43/0.0009}-2*\POAmp{1}{0.0009}}
+
+\BlackGrid
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Diagramme de Black}
+\label{fig:diagblack}
+\end{figure}
+
+
+
+\subsection{Exemples}
+
+
+Sur l'exemple figure~\ref{fig:diagblack} sont représentées les fonctions suivantes:
+
+\begin{multicols}{2}
+\small
+\begin{itemize}
+\item $H_1(p)=\dfrac{1}{1+\dfrac{2\cdot 0.1}{1500}\cdot p +\dfrac{p^2}{1500^2}}$,
+\item $H_2(p)=\dfrac{5}{1+\dfrac{2\cdot 0.2}{150}\cdot p +\dfrac{p^2}{150^2}}$,
+\item $H_3(p)=\dfrac{5}{1+3\cdot p}$,
+\item $H_4(p)=\dfrac{1}{1+\dfrac{2\cdot 0.1}{1500}\cdot p +\dfrac{p^2}{1500^2}} \cdot \dfrac{0.43\cdot\left(1+0.0009\cdot p\right)^2}{0.0009\cdot p}$
+
+\end{itemize}
+\end{multicols}
+
+
+
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=12cm,small]
+\begin{tikzpicture}
+\begin{scope}
+[xscale=11/360,
+yscale=12/60]
+
+\BlackGraph[samples=100,
+purple,smooth]
+{-1:1}{\IntArg{0.3}+
+\SOArg{3.9}{0.4}{3},
+\IntAmp{0.3}+
+\SOAmp{3.9}{0.4}{3}}
+
+\def\valmaxBf{-360}
+%\StyleIsoM[blue!50,dashed]
+%\StyleIsoA[green,thin]
+\AbaqueBlack
+
+\StyleIsoM[blue,thick]
+\IsoModule[2.3]
+
+\BlackGrid
+
+\BlackText[black]{2.6/right/
+{\normalsize $\omega_r
+\approx 2.6~rad/sec$}}
+{\IntArg{0.3}+
+\SOArg{3.9}{0.4}{3},
+\IntAmp{0.3}+
+\SOAmp{3.9}{0.4}{3}}
+
+\end{scope}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Abaque de Black}
+\label{fig:AbaqueBlack}
+\end{figure}
+
+
+
+\section{Diagramme de Nyquist}
+
+Le package permet aussi de tracer le diagramme de Nyquist (figure~\ref{fig:diagnyq}) d'une fonction linéaire, le tracé est réalisé à partir de la description polaire de la fonction de transfert $H(i\cdot _omega)=\|{H(i\cdot \omega)}\|\cdot e^{\arg\left(H(i\cdot \omega)\right)}$. Cela permet de tracer le diagramme de Nyquist à partir des définitions précédentes du module et de l'argument.
+
+
+
+\begin{figure}[:ht]
+\centering
+\begin{tkzexample}[latex=7cm,small]
+\begin{tikzpicture}
+\begin{scope}
+\NyquistGraph[smooth,samples=81]{-1:4}
+{\POAmp{3}{0.5}}{\POArg{3}{0.5}}
+\NyquistGraph[purple,smooth,samples=81,]
+{-2:2}{\SOAmp{3}{0.5}{10}}{\SOArg{3}{0.5}{10}}
+\NyquistGraph[red,samples=151,smooth,]
+{-3:2}{\POAmp{4}{0.5}+\POAmp{1}{2}}
+{\POArg{4}{0.5}+\POArg{1}{2}}
+\NyquistGraph[green,samples=101,smooth,]
+{0.5:2}{\SOAmp{15}{0.5}{10}+\IntAmp{1}}
+{\SOArg{15}{0.5}{10}+\IntArg{1}}
+\NyquistGraph[black,smooth,]{-1:2}
+{\POAmp{4}{0.5}+\RetAmp{1.8}}
+{\POArg{4}{0.5}+\RetArg{1.8}}
+
+\NyquistGraph*[black,smooth,samples=2,
+only marks,mark=.]{-1:0.3}
+{\POAmp{4}{0.5}+\RetAmp{1.8}}
+{\POArg{4}{0.5}+\RetArg{1.8}}{[above]
+{\footnotesize $H_3$}}
+
+\NyquistPoint*[black,]{8/below right,
+10/below left,20/left}
+{\SOAmp{3}{0.5}{10}}{\SOArg{3}{0.5}{10}}
+
+
+\NyquistText[red]{8/below left/Texte}
+{\SOAmp{3}{0.5}{10}}{\SOArg{3}{0.5}{10}}
+\end{scope}
+\NyquistGrid
+
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Diagramme de Nyquist}
+\label{fig:diagnyq}
+\end{figure}
+
+\begin{itemize}
+\item La commande \verb"\NyquistGraph[options]{domaine}{Module en dB}{Argument en degre}" trace donc le lieu de Nyquist de fonctions simples ou de fonctions composées (voir les exemples ci-dessous).
+\begin{itemize}
+\item \verb"[options]", options de tracé voir plus haut,
+\item \verb"{domaine}", le domaine de tracé doit être défini en décade,
+\item \verb"{Module en dB}", le module doit être écrit en dB, on peut bien sûr utiliser les fonctions élémentaires ci-dessus comme \verb"\POAmp", \verb"\SOAmp" pour obtenir ce module.
+\item \verb"{Argument en degre}", l'argument doit être définie en degré, on peut utiliser les fonctions arguments ci-dessus comme \verb"\POArg", \verb"\SOArg".
+\end{itemize}
+\item \verb"\NyquistGraph*[options]{domaine}{Module en dB}{Argument en degre}{[options]{texte}}", cette version étoilée permet de rajouter un commentaire à l'extrémité du tracé.
+\item \verb"\NyquistPoint{options]{liste pulsations}{Module en dB}{Argument en degre}", cette commande permet de tracer et noter des points particuliers du graphe, la valeur de la pulsation est placée à coté (droite par défaut).
+\item \verb"\NyquistPoint*{options]{liste pulsations}{Module en dB}{Argument en degre}", la version étoilée permet de préciser la position du point.
+
+\item \verb"\NyquistText{options]{pulsation/pos/text}{Module en dB}{Argument en degre}" cette commande permet de positionner un \verb"texte" par rapport à la courbe définie par \verb"{fonction argument,fonction module}" le texte étant positionné à la pulsation \verb"pulsation", le paramètre \verb"pos" permet de préciser la position du texte (\verb"right", \verb"above", \verb"below left", \dots). Le point est nommé \verb"NNyquist".
+
+\item \verb"\NyquistText*{options]{pulsation/pos/text}{Module en dB}{Argument en degre}" commande identique à la précédente mais le point n'est pas dessiné.
+\end{itemize}
+
+
+Un grille peut être ajoutée au tracé par la commande \verb"\NyquistGrid", par défaut le pas de la grille est de 1 mais peut être réglé avec les deux variables \verb"\valgridNx" et \verb"\valgridNx". La commande étoilée trace la grille seule sans graduation, la commande simple trace en plus le cercle unitaire, le point critique (-1,0).
+
+\subsubsection{Styles par défaut}
+
+Comme pour le diagramme de Black, des styles par défaut sont proposés:
+
+\begin{itemize}
+\item \verb"Nyquist lines/.style={very thick, blue}": style pour le tracé du lieu de Nyquist;
+\item \verb"Nyquist grid/.style={ultra thin,brown}": style de la grille;
+\item \verb"Nyquist label axes/.style={Nyquist grid,font=\tiny}":style utilisé pour les axes;
+\item \verb"Nyquist label points/.style={font=\tiny}", style utilisé pour les points
+\item \verb"ref points/.style={circle,draw, black, opacity=0.7,fill, minimum size= 2pt, inner sep=0}": style utilisé pour marquer les points sur le diagramme.
+\end{itemize}
+
+
+\subsection{Quelques exemples de tracé de lieu de Nyquist}
+
+Sur l'exemple figure~\ref{fig:diagnyq} sont représentées les fonctions suivantes:
+\begin{multicols}{2}
+\begin{itemize}
+\item $H_1(p)=\dfrac{1}{1+\dfrac{2\cdot 0.1}{1500}\cdot p +\dfrac{p^2}{1500^2}}$,
+\item $H_2(p)=\dfrac{5}{1+\dfrac{2\cdot 0.2}{150}\cdot p +\dfrac{p^2}{150^2}}$,
+\item $H_3(p)=\dfrac{5}{1+3\cdot p}$,
+\item $H_4(p)=\dfrac{1}{1+\dfrac{2\cdot 0.1}{1500}\cdot p +\dfrac{p^2}{1500^2}} \cdot \dfrac{0.43\cdot\left(1+0.0009\cdot p\right)^2}{0.0009\cdot p}$
+
+\end{itemize}
+\end{multicols}
+
+
+
+
+
+\section{Réponse temporelle}
+figure~\ref{fig:graphreptemp}
+\begin{itemize}
+\item \verb"\RepTemp[options]{domaine}{fonction}" trace la fonction, la fonction doit être définie comme une fonction gnuplot.
+\item \verb"\RepTemp*[options]{domaine}{fonction}{[options]{texte}}" trace la fonction et ajoute le texte à l'extrémité.
+\end{itemize}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=7cm,small]
+\begin{tikzpicture}[xscale=5/2,yscale=7/2]
+\RepTemp*[color=black,samples=31,smooth,
+]{0:1.8}{
+-.198*exp(-35.4*x)-.638*exp(-2.28*x)*cos(18.3*x)
+-.462*exp(-2.28*x)*sin(18.3*x)+.833
+}{[right]{\small 1}}
+\RepTemp*[color=blue,samples=31,smooth
+,]{0:1.8}{
+1-.117*exp(-24.1*x)-.883*exp(-2.94*x)*cos(7.03*x)
+-.769*exp(-2.94*x)*sin(7.03*x)
+}{[right]{\small 2}}
+\def\valmaxx{1.8}
+\def\valmaxy{1.2}
+\TempGrid[xstep=0.2,ystep=0.2]
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Réponse temporelle}
+\label{fig:graphreptemp}
+\end{figure}
+
+
+\subsection{styles}
+Plusieurs styles sont définis par défaut:
+
+\begin{itemize}
+\item \verb"Temp lines/.style={very thick, blue} ": style du tracé;
+\item \verb"Temp grid/.style={ultra thin,brown!80} ": style de la grille;
+\item \verb"Temp label axes/.style={Temp grid, font=\tiny} ": style des labels des axes;
+\item \verb"Temp label points/.style={font=\tiny}": style des points marqués.
+\end{itemize}
+
+
+\newpage
+
+\section{Abaques}
+\subsection{Temps de réponse d'un second ordre}
+
+\begin{tkzexample}[latex=7cm,small]
+\begin{tikzpicture}[xscale=1.5,yscale=2]
+\AbaqueTRsecond
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsection{Abaque des dépassements indiciels}
+
+\begin{tkzexample}[latex=7cm,small]
+\begin{tikzpicture}[scale=7/2]
+\AbaqueDepassement
+\end{tikzpicture}
+\end{tkzexample}
+
+
+
+
+\newpage
+
+\tableofcontents
+
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.gnuplot
new file mode 100644
index 0000000000..5a36d41924
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/1.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.table
new file mode 100644
index 0000000000..8c76f62016
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/1.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 9.54239 i
+-1.91837 9.54237 i
+-1.83673 9.54234 i
+-1.75510 9.54230 i
+-1.67347 9.54225 i
+-1.59184 9.54217 i
+-1.51020 9.54205 i
+-1.42857 9.54188 i
+-1.34694 9.54163 i
+-1.26531 9.54127 i
+-1.18367 9.54075 i
+-1.10204 9.53998 i
+-1.02041 9.53887 i
+-0.93878 9.53725 i
+-0.85714 9.53489 i
+-0.77551 9.53145 i
+-0.69388 9.52645 i
+-0.61224 9.51918 i
+-0.53061 9.50861 i
+-0.44898 9.49327 i
+-0.36735 9.47102 i
+-0.28571 9.43881 i
+-0.20408 9.39234 i
+-0.12245 9.32554 i
+-0.04082 9.23005 i
+0.04082 9.09463 i
+0.12245 8.90468 i
+0.20408 8.64211 i
+0.28571 8.28604 i
+0.36735 7.81470 i
+0.44898 7.20854 i
+0.53061 6.45410 i
+0.61224 5.54716 i
+0.69388 4.49385 i
+0.77551 3.30907 i
+0.85714 2.01309 i
+0.93878 0.62772 i
+1.02041 -0.82661 i
+1.10204 -2.33242 i
+1.18367 -3.87579 i
+1.26531 -5.44605 i
+1.34694 -7.03534 i
+1.42857 -8.63797 i
+1.51020 -10.24988 i
+1.59184 -11.86823 i
+1.67347 -13.49104 i
+1.75510 -15.11692 i
+1.83673 -16.74492 i
+1.91837 -18.37437 i
+2.00000 -20.00482 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.gnuplot
new file mode 100644
index 0000000000..5fef3277b6
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/10.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=1.69894:1.69894] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.table
new file mode 100644
index 0000000000..2062f499d0
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/10.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+1.69894 -13.99806 i
+1.69894 -13.99806 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.gnuplot
new file mode 100644
index 0000000000..5c4be64b39
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/11.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=1.90308:1.90308] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.table
new file mode 100644
index 0000000000..9a73894af4
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/11.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+1.90308 -18.06913 i
+1.90308 -18.06913 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.gnuplot
new file mode 100644
index 0000000000..bae5752447
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/12.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-2:2] log10(10**t),(t<log10(1/(0.3))?20*log10(6):+20*log10(6/(0.3))-20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.table
new file mode 100644
index 0000000000..08daebf19b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/12.table
@@ -0,0 +1,104 @@
+
+#Curve 0 of 1, 100 points
+#x y type
+-2.00000 15.56303 i
+-1.95960 15.56303 i
+-1.91919 15.56303 i
+-1.87879 15.56303 i
+-1.83838 15.56303 i
+-1.79798 15.56303 i
+-1.75758 15.56303 i
+-1.71717 15.56303 i
+-1.67677 15.56303 i
+-1.63636 15.56303 i
+-1.59596 15.56303 i
+-1.55556 15.56303 i
+-1.51515 15.56303 i
+-1.47475 15.56303 i
+-1.43434 15.56303 i
+-1.39394 15.56303 i
+-1.35354 15.56303 i
+-1.31313 15.56303 i
+-1.27273 15.56303 i
+-1.23232 15.56303 i
+-1.19192 15.56303 i
+-1.15152 15.56303 i
+-1.11111 15.56303 i
+-1.07071 15.56303 i
+-1.03030 15.56303 i
+-0.98990 15.56303 i
+-0.94949 15.56303 i
+-0.90909 15.56303 i
+-0.86869 15.56303 i
+-0.82828 15.56303 i
+-0.78788 15.56303 i
+-0.74747 15.56303 i
+-0.70707 15.56303 i
+-0.66667 15.56303 i
+-0.62626 15.56303 i
+-0.58586 15.56303 i
+-0.54545 15.56303 i
+-0.50505 15.56303 i
+-0.46465 15.56303 i
+-0.42424 15.56303 i
+-0.38384 15.56303 i
+-0.34343 15.56303 i
+-0.30303 15.56303 i
+-0.26263 15.56303 i
+-0.22222 15.56303 i
+-0.18182 15.56303 i
+-0.14141 15.56303 i
+-0.10101 15.56303 i
+-0.06061 15.56303 i
+-0.02020 15.56303 i
+0.02020 15.56303 i
+0.06061 15.56303 i
+0.10101 15.56303 i
+0.14141 15.56303 i
+0.18182 15.56303 i
+0.22222 15.56303 i
+0.26263 15.56303 i
+0.30303 15.56303 i
+0.34343 15.56303 i
+0.38384 15.56303 i
+0.42424 15.56303 i
+0.46465 15.56303 i
+0.50505 15.56303 i
+0.54545 15.11151 i
+0.58586 14.30343 i
+0.62626 13.49535 i
+0.66667 12.68727 i
+0.70707 11.87919 i
+0.74747 11.07110 i
+0.78788 10.26302 i
+0.82828 9.45494 i
+0.86869 8.64686 i
+0.90909 7.83878 i
+0.94949 7.03070 i
+0.98990 6.22262 i
+1.03030 5.41454 i
+1.07071 4.60646 i
+1.11111 3.79838 i
+1.15152 2.99030 i
+1.19192 2.18222 i
+1.23232 1.37414 i
+1.27273 0.56605 i
+1.31313 -0.24203 i
+1.35354 -1.05011 i
+1.39394 -1.85819 i
+1.43434 -2.66627 i
+1.47475 -3.47435 i
+1.51515 -4.28243 i
+1.55556 -5.09051 i
+1.59596 -5.89859 i
+1.63636 -6.70667 i
+1.67677 -7.51475 i
+1.71717 -8.32283 i
+1.75758 -9.13092 i
+1.79798 -9.93900 i
+1.83838 -10.74708 i
+1.87879 -11.55516 i
+1.91919 -12.36324 i
+1.95960 -13.17132 i
+2.00000 -13.97940 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.gnuplot
new file mode 100644
index 0000000000..3d9498f5ff
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/13.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),20*log10(abs(6/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.table
new file mode 100644
index 0000000000..35e38080db
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/13.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 15.56299 i
+-1.91837 15.56297 i
+-1.83673 15.56294 i
+-1.75510 15.56290 i
+-1.67347 15.56285 i
+-1.59184 15.56277 i
+-1.51020 15.56265 i
+-1.42857 15.56248 i
+-1.34694 15.56223 i
+-1.26531 15.56187 i
+-1.18367 15.56135 i
+-1.10204 15.56058 i
+-1.02041 15.55947 i
+-0.93878 15.55785 i
+-0.85714 15.55549 i
+-0.77551 15.55205 i
+-0.69388 15.54705 i
+-0.61224 15.53978 i
+-0.53061 15.52921 i
+-0.44898 15.51387 i
+-0.36735 15.49162 i
+-0.28571 15.45941 i
+-0.20408 15.41294 i
+-0.12245 15.34614 i
+-0.04082 15.25065 i
+0.04082 15.11523 i
+0.12245 14.92528 i
+0.20408 14.66271 i
+0.28571 14.30664 i
+0.36735 13.83530 i
+0.44898 13.22914 i
+0.53061 12.47470 i
+0.61224 11.56776 i
+0.69388 10.51445 i
+0.77551 9.32967 i
+0.85714 8.03369 i
+0.93878 6.64831 i
+1.02041 5.19399 i
+1.10204 3.68818 i
+1.18367 2.14481 i
+1.26531 0.57455 i
+1.34694 -1.01474 i
+1.42857 -2.61737 i
+1.51020 -4.22928 i
+1.59184 -5.84763 i
+1.67347 -7.47044 i
+1.75510 -9.09632 i
+1.83673 -10.72432 i
+1.91837 -12.35377 i
+2.00000 -13.98422 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.gnuplot
new file mode 100644
index 0000000000..560b59ecda
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/14.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-2:2] log10(10**t),(t<log10(1/(0.3))? 0:-90)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.table
new file mode 100644
index 0000000000..90d1095acb
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/14.table
@@ -0,0 +1,104 @@
+
+#Curve 0 of 1, 100 points
+#x y type
+-2.00000 0.00000 i
+-1.95960 0.00000 i
+-1.91919 0.00000 i
+-1.87879 0.00000 i
+-1.83838 0.00000 i
+-1.79798 0.00000 i
+-1.75758 0.00000 i
+-1.71717 0.00000 i
+-1.67677 0.00000 i
+-1.63636 0.00000 i
+-1.59596 0.00000 i
+-1.55556 0.00000 i
+-1.51515 0.00000 i
+-1.47475 0.00000 i
+-1.43434 0.00000 i
+-1.39394 0.00000 i
+-1.35354 0.00000 i
+-1.31313 0.00000 i
+-1.27273 0.00000 i
+-1.23232 0.00000 i
+-1.19192 0.00000 i
+-1.15152 0.00000 i
+-1.11111 0.00000 i
+-1.07071 0.00000 i
+-1.03030 0.00000 i
+-0.98990 0.00000 i
+-0.94949 0.00000 i
+-0.90909 0.00000 i
+-0.86869 0.00000 i
+-0.82828 0.00000 i
+-0.78788 0.00000 i
+-0.74747 0.00000 i
+-0.70707 0.00000 i
+-0.66667 0.00000 i
+-0.62626 0.00000 i
+-0.58586 0.00000 i
+-0.54545 0.00000 i
+-0.50505 0.00000 i
+-0.46465 0.00000 i
+-0.42424 0.00000 i
+-0.38384 0.00000 i
+-0.34343 0.00000 i
+-0.30303 0.00000 i
+-0.26263 0.00000 i
+-0.22222 0.00000 i
+-0.18182 0.00000 i
+-0.14141 0.00000 i
+-0.10101 0.00000 i
+-0.06061 0.00000 i
+-0.02020 0.00000 i
+0.02020 0.00000 i
+0.06061 0.00000 i
+0.10101 0.00000 i
+0.14141 0.00000 i
+0.18182 0.00000 i
+0.22222 0.00000 i
+0.26263 0.00000 i
+0.30303 0.00000 i
+0.34343 0.00000 i
+0.38384 0.00000 i
+0.42424 0.00000 i
+0.46465 0.00000 i
+0.50505 0.00000 i
+0.54545 -90.00000 i
+0.58586 -90.00000 i
+0.62626 -90.00000 i
+0.66667 -90.00000 i
+0.70707 -90.00000 i
+0.74747 -90.00000 i
+0.78788 -90.00000 i
+0.82828 -90.00000 i
+0.86869 -90.00000 i
+0.90909 -90.00000 i
+0.94949 -90.00000 i
+0.98990 -90.00000 i
+1.03030 -90.00000 i
+1.07071 -90.00000 i
+1.11111 -90.00000 i
+1.15152 -90.00000 i
+1.19192 -90.00000 i
+1.23232 -90.00000 i
+1.27273 -90.00000 i
+1.31313 -90.00000 i
+1.35354 -90.00000 i
+1.39394 -90.00000 i
+1.43434 -90.00000 i
+1.47475 -90.00000 i
+1.51515 -90.00000 i
+1.55556 -90.00000 i
+1.59596 -90.00000 i
+1.63636 -90.00000 i
+1.67677 -90.00000 i
+1.71717 -90.00000 i
+1.75758 -90.00000 i
+1.79798 -90.00000 i
+1.83838 -90.00000 i
+1.87879 -90.00000 i
+1.91919 -90.00000 i
+1.95960 -90.00000 i
+2.00000 -90.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.gnuplot
new file mode 100644
index 0000000000..c0c9a919e8
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/15.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),-180/3.1415957*atan(0.3*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.table
new file mode 100644
index 0000000000..876791327e
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/15.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 -0.17189 i
+-1.91837 -0.20743 i
+-1.83673 -0.25033 i
+-1.75510 -0.30209 i
+-1.67347 -0.36456 i
+-1.59184 -0.43994 i
+-1.51020 -0.53092 i
+-1.42857 -0.64070 i
+-1.34694 -0.77318 i
+-1.26531 -0.93304 i
+-1.18367 -1.12594 i
+-1.10204 -1.35869 i
+-1.02041 -1.63952 i
+-0.93878 -1.97831 i
+-0.85714 -2.38698 i
+-0.77551 -2.87983 i
+-0.69388 -3.47403 i
+-0.61224 -4.19009 i
+-0.53061 -5.05247 i
+-0.44898 -6.09009 i
+-0.36735 -7.33692 i
+-0.28571 -8.83222 i
+-0.20408 -10.62056 i
+-0.12245 -12.75090 i
+-0.04082 -15.27442 i
+0.04082 -18.24026 i
+0.12245 -21.68836 i
+0.20408 -25.63901 i
+0.28571 -30.07979 i
+0.36735 -34.95296 i
+0.44898 -40.14862 i
+0.53061 -45.51006 i
+0.61224 -50.85375 i
+0.69388 -55.99910 i
+0.77551 -60.79718 i
+0.85714 -65.14801 i
+0.93878 -69.00321 i
+1.02041 -72.35761 i
+1.10204 -75.23617 i
+1.18367 -77.68128 i
+1.26531 -79.74291 i
+1.34694 -81.47208 i
+1.42857 -82.91704 i
+1.51020 -84.12138 i
+1.59184 -85.12335 i
+1.67347 -85.95593 i
+1.75510 -86.64715 i
+1.83673 -87.22068 i
+1.91837 -87.69635 i
+2.00000 -88.09076 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.gnuplot
new file mode 100644
index 0000000000..61457d42c6
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/16.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-1:1.7] log10(10**t),+(t<log10(10)?20*log10(6):+20*log10(6)+40*log10(10)-40*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.table
new file mode 100644
index 0000000000..6567fa08fd
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/16.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-1.00000 15.56303 i
+-0.94490 15.56303 i
+-0.88980 15.56303 i
+-0.83469 15.56303 i
+-0.77959 15.56303 i
+-0.72449 15.56303 i
+-0.66939 15.56303 i
+-0.61429 15.56303 i
+-0.55918 15.56303 i
+-0.50408 15.56303 i
+-0.44898 15.56303 i
+-0.39388 15.56303 i
+-0.33878 15.56303 i
+-0.28367 15.56303 i
+-0.22857 15.56303 i
+-0.17347 15.56303 i
+-0.11837 15.56303 i
+-0.06327 15.56303 i
+-0.00816 15.56303 i
+0.04694 15.56303 i
+0.10204 15.56303 i
+0.15714 15.56303 i
+0.21224 15.56303 i
+0.26735 15.56303 i
+0.32245 15.56303 i
+0.37755 15.56303 i
+0.43265 15.56303 i
+0.48776 15.56303 i
+0.54286 15.56303 i
+0.59796 15.56303 i
+0.65306 15.56303 i
+0.70816 15.56303 i
+0.76327 15.56303 i
+0.81837 15.56303 i
+0.87347 15.56303 i
+0.92857 15.56303 i
+0.98367 15.56303 i
+1.03878 14.01200 i
+1.09388 11.80792 i
+1.14898 9.60384 i
+1.20408 7.39976 i
+1.25918 5.19568 i
+1.31429 2.99160 i
+1.36939 0.78751 i
+1.42449 -1.41657 i
+1.47959 -3.62065 i
+1.53469 -5.82473 i
+1.58980 -8.02881 i
+1.64490 -10.23289 i
+1.70000 -12.43697 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.gnuplot
new file mode 100644
index 0000000000..fd89e8b7fe
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/17.table"; set format "%.5f"
+set samples 101; set parametric; plot [t=-1:1.7] log10(10**t),20*log10(abs(6/sqrt((1-(10**t/10)**2)**2+(2*0.3*(10**t/10))**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.table
new file mode 100644
index 0000000000..0c75908895
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/17.table
@@ -0,0 +1,105 @@
+
+#Curve 0 of 1, 101 points
+#x y type
+-1.00000 15.56374 i
+-0.97300 15.56383 i
+-0.94600 15.56394 i
+-0.91900 15.56406 i
+-0.89200 15.56420 i
+-0.86500 15.56435 i
+-0.83800 15.56453 i
+-0.81100 15.56473 i
+-0.78400 15.56495 i
+-0.75700 15.56521 i
+-0.73000 15.56549 i
+-0.70300 15.56582 i
+-0.67600 15.56619 i
+-0.64900 15.56661 i
+-0.62200 15.56709 i
+-0.59500 15.56762 i
+-0.56800 15.56823 i
+-0.54100 15.56892 i
+-0.51400 15.56970 i
+-0.48700 15.57059 i
+-0.46000 15.57159 i
+-0.43300 15.57272 i
+-0.40600 15.57401 i
+-0.37900 15.57546 i
+-0.35200 15.57711 i
+-0.32500 15.57898 i
+-0.29800 15.58109 i
+-0.27100 15.58348 i
+-0.24400 15.58619 i
+-0.21700 15.58926 i
+-0.19000 15.59274 i
+-0.16300 15.59668 i
+-0.13600 15.60114 i
+-0.10900 15.60619 i
+-0.08200 15.61192 i
+-0.05500 15.61840 i
+-0.02800 15.62575 i
+-0.00100 15.63407 i
+0.02600 15.64350 i
+0.05300 15.65418 i
+0.08000 15.66629 i
+0.10700 15.68000 i
+0.13400 15.69555 i
+0.16100 15.71317 i
+0.18800 15.73315 i
+0.21500 15.75580 i
+0.24200 15.78148 i
+0.26900 15.81060 i
+0.29600 15.84364 i
+0.32300 15.88112 i
+0.35000 15.92365 i
+0.37700 15.97193 i
+0.40400 16.02673 i
+0.43100 16.08898 i
+0.45800 16.15969 i
+0.48500 16.24003 i
+0.51200 16.33136 i
+0.53900 16.43519 i
+0.56600 16.55327 i
+0.59300 16.68756 i
+0.62000 16.84030 i
+0.64700 17.01394 i
+0.67400 17.21122 i
+0.70100 17.43504 i
+0.72800 17.68833 i
+0.75500 17.97376 i
+0.78200 18.29316 i
+0.80900 18.64636 i
+0.83600 19.02922 i
+0.86300 19.43009 i
+0.89000 19.82410 i
+0.91700 20.16536 i
+0.94400 20.38000 i
+0.97100 20.36969 i
+0.99800 20.03898 i
+1.02500 19.34280 i
+1.05200 18.31521 i
+1.07900 17.04731 i
+1.10600 15.63943 i
+1.13300 14.16972 i
+1.16000 12.68789 i
+1.18700 11.22138 i
+1.21400 9.78339 i
+1.24100 8.37891 i
+1.26800 7.00853 i
+1.29500 5.67063 i
+1.32200 4.36263 i
+1.34900 3.08161 i
+1.37600 1.82464 i
+1.40300 0.58897 i
+1.43000 -0.62791 i
+1.45700 -1.82826 i
+1.48400 -3.01409 i
+1.51100 -4.18716 i
+1.53800 -5.34905 i
+1.56500 -6.50111 i
+1.59200 -7.64454 i
+1.61900 -8.78039 i
+1.64600 -9.90958 i
+1.67300 -11.03292 i
+1.70000 -12.15110 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.gnuplot
new file mode 100644
index 0000000000..1c71fd7d2b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/18.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-1:0.999] log10(10**t),(t<log10(10)? 0:-180)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.table
new file mode 100644
index 0000000000..f09e01330a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/18.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-1.00000 0.00000 i
+-0.95920 0.00000 i
+-0.91841 0.00000 i
+-0.87761 0.00000 i
+-0.83682 0.00000 i
+-0.79602 0.00000 i
+-0.75522 0.00000 i
+-0.71443 0.00000 i
+-0.67363 0.00000 i
+-0.63284 0.00000 i
+-0.59204 0.00000 i
+-0.55124 0.00000 i
+-0.51045 0.00000 i
+-0.46965 0.00000 i
+-0.42886 0.00000 i
+-0.38806 0.00000 i
+-0.34727 0.00000 i
+-0.30647 0.00000 i
+-0.26567 0.00000 i
+-0.22488 0.00000 i
+-0.18408 0.00000 i
+-0.14329 0.00000 i
+-0.10249 0.00000 i
+-0.06169 0.00000 i
+-0.02090 0.00000 i
+0.01990 0.00000 i
+0.06069 0.00000 i
+0.10149 0.00000 i
+0.14229 0.00000 i
+0.18308 0.00000 i
+0.22388 0.00000 i
+0.26467 0.00000 i
+0.30547 0.00000 i
+0.34627 0.00000 i
+0.38706 0.00000 i
+0.42786 0.00000 i
+0.46865 0.00000 i
+0.50945 0.00000 i
+0.55024 0.00000 i
+0.59104 0.00000 i
+0.63184 0.00000 i
+0.67263 0.00000 i
+0.71343 0.00000 i
+0.75422 0.00000 i
+0.79502 0.00000 i
+0.83582 0.00000 i
+0.87661 0.00000 i
+0.91741 0.00000 i
+0.95820 0.00000 i
+0.99900 0.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.gnuplot
new file mode 100644
index 0000000000..54a8a81780
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/19.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=1:2] log10(10**t),(t<log10(10)? 0:-180)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.table
new file mode 100644
index 0000000000..4278ea0bcb
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/19.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+1.00000 -180.00000 i
+1.02041 -180.00000 i
+1.04082 -180.00000 i
+1.06122 -180.00000 i
+1.08163 -180.00000 i
+1.10204 -180.00000 i
+1.12245 -180.00000 i
+1.14286 -180.00000 i
+1.16327 -180.00000 i
+1.18367 -180.00000 i
+1.20408 -180.00000 i
+1.22449 -180.00000 i
+1.24490 -180.00000 i
+1.26531 -180.00000 i
+1.28571 -180.00000 i
+1.30612 -180.00000 i
+1.32653 -180.00000 i
+1.34694 -180.00000 i
+1.36735 -180.00000 i
+1.38776 -180.00000 i
+1.40816 -180.00000 i
+1.42857 -180.00000 i
+1.44898 -180.00000 i
+1.46939 -180.00000 i
+1.48980 -180.00000 i
+1.51020 -180.00000 i
+1.53061 -180.00000 i
+1.55102 -180.00000 i
+1.57143 -180.00000 i
+1.59184 -180.00000 i
+1.61224 -180.00000 i
+1.63265 -180.00000 i
+1.65306 -180.00000 i
+1.67347 -180.00000 i
+1.69388 -180.00000 i
+1.71429 -180.00000 i
+1.73469 -180.00000 i
+1.75510 -180.00000 i
+1.77551 -180.00000 i
+1.79592 -180.00000 i
+1.81633 -180.00000 i
+1.83673 -180.00000 i
+1.85714 -180.00000 i
+1.87755 -180.00000 i
+1.89796 -180.00000 i
+1.91837 -180.00000 i
+1.93878 -180.00000 i
+1.95918 -180.00000 i
+1.97959 -180.00000 i
+2.00000 -180.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.gnuplot
new file mode 100644
index 0000000000..1edd8d64aa
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/20.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-1:2] log10(10**t),180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.3*10*10**t))-3.1415957/2)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.table
new file mode 100644
index 0000000000..31dcc88119
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/20.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-1.00000 -0.34389 i
+-0.93878 -0.39595 i
+-0.87755 -0.45590 i
+-0.81633 -0.52494 i
+-0.75510 -0.60444 i
+-0.69388 -0.69600 i
+-0.63265 -0.80145 i
+-0.57143 -0.92291 i
+-0.51020 -1.06284 i
+-0.44898 -1.22408 i
+-0.38776 -1.40989 i
+-0.32653 -1.62411 i
+-0.26531 -1.87118 i
+-0.20408 -2.15628 i
+-0.14286 -2.48550 i
+-0.08163 -2.86605 i
+-0.02041 -3.30648 i
+0.04082 -3.81706 i
+0.10204 -4.41030 i
+0.16327 -5.10160 i
+0.22449 -5.91033 i
+0.28571 -6.86133 i
+0.34694 -7.98732 i
+0.40816 -9.33260 i
+0.46939 -10.95926 i
+0.53061 -12.95748 i
+0.59184 -15.46385 i
+0.65306 -18.69487 i
+0.71429 -23.01117 i
+0.77551 -29.04407 i
+0.83673 -37.93735 i
+0.89796 -51.67655 i
+0.95918 -72.58138 i
+1.02041 -98.90560 i
+1.08163 -122.22114 i
+1.14286 -138.14671 i
+1.20408 -148.38729 i
+1.26531 -155.21141 i
+1.32653 -160.01085 i
+1.38776 -163.55364 i
+1.44898 -166.27213 i
+1.51020 -168.42151 i
+1.57143 -170.16019 i
+1.63265 -171.59125 i
+1.69388 -172.78469 i
+1.75510 -173.78990 i
+1.81633 -174.64296 i
+1.87755 -175.37102 i
+1.93878 -175.99507 i
+2.00000 -176.53169 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.gnuplot
new file mode 100644
index 0000000000..e6ded1c4ef
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/21.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),20*log10(abs(1/(10**t)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.table
new file mode 100644
index 0000000000..415664f88a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/21.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 40.00000 i
+-1.91837 38.36735 i
+-1.83673 36.73469 i
+-1.75510 35.10204 i
+-1.67347 33.46939 i
+-1.59184 31.83673 i
+-1.51020 30.20408 i
+-1.42857 28.57143 i
+-1.34694 26.93878 i
+-1.26531 25.30612 i
+-1.18367 23.67347 i
+-1.10204 22.04082 i
+-1.02041 20.40816 i
+-0.93878 18.77551 i
+-0.85714 17.14286 i
+-0.77551 15.51020 i
+-0.69388 13.87755 i
+-0.61224 12.24490 i
+-0.53061 10.61224 i
+-0.44898 8.97959 i
+-0.36735 7.34694 i
+-0.28571 5.71429 i
+-0.20408 4.08163 i
+-0.12245 2.44898 i
+-0.04082 0.81633 i
+0.04082 -0.81633 i
+0.12245 -2.44898 i
+0.20408 -4.08163 i
+0.28571 -5.71429 i
+0.36735 -7.34694 i
+0.44898 -8.97959 i
+0.53061 -10.61224 i
+0.61224 -12.24490 i
+0.69388 -13.87755 i
+0.77551 -15.51020 i
+0.85714 -17.14286 i
+0.93878 -18.77551 i
+1.02041 -20.40816 i
+1.10204 -22.04082 i
+1.18367 -23.67347 i
+1.26531 -25.30612 i
+1.34694 -26.93878 i
+1.42857 -28.57143 i
+1.51020 -30.20408 i
+1.59184 -31.83673 i
+1.67347 -33.46939 i
+1.75510 -35.10204 i
+1.83673 -36.73469 i
+1.91837 -38.36735 i
+2.00000 -40.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.gnuplot
new file mode 100644
index 0000000000..7c73d43f3a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/22.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),+-90
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.table
new file mode 100644
index 0000000000..d08b55f8ed
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/22.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 -90.00000 i
+-1.91837 -90.00000 i
+-1.83673 -90.00000 i
+-1.75510 -90.00000 i
+-1.67347 -90.00000 i
+-1.59184 -90.00000 i
+-1.51020 -90.00000 i
+-1.42857 -90.00000 i
+-1.34694 -90.00000 i
+-1.26531 -90.00000 i
+-1.18367 -90.00000 i
+-1.10204 -90.00000 i
+-1.02041 -90.00000 i
+-0.93878 -90.00000 i
+-0.85714 -90.00000 i
+-0.77551 -90.00000 i
+-0.69388 -90.00000 i
+-0.61224 -90.00000 i
+-0.53061 -90.00000 i
+-0.44898 -90.00000 i
+-0.36735 -90.00000 i
+-0.28571 -90.00000 i
+-0.20408 -90.00000 i
+-0.12245 -90.00000 i
+-0.04082 -90.00000 i
+0.04082 -90.00000 i
+0.12245 -90.00000 i
+0.20408 -90.00000 i
+0.28571 -90.00000 i
+0.36735 -90.00000 i
+0.44898 -90.00000 i
+0.53061 -90.00000 i
+0.61224 -90.00000 i
+0.69388 -90.00000 i
+0.77551 -90.00000 i
+0.85714 -90.00000 i
+0.93878 -90.00000 i
+1.02041 -90.00000 i
+1.10204 -90.00000 i
+1.18367 -90.00000 i
+1.26531 -90.00000 i
+1.34694 -90.00000 i
+1.42857 -90.00000 i
+1.51020 -90.00000 i
+1.59184 -90.00000 i
+1.67347 -90.00000 i
+1.75510 -90.00000 i
+1.83673 -90.00000 i
+1.91837 -90.00000 i
+2.00000 -90.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.gnuplot
new file mode 100644
index 0000000000..b1b484733f
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/23.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),0
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.table
new file mode 100644
index 0000000000..38afba823a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/23.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 0.00000 i
+0.06122 0.00000 i
+0.12245 0.00000 i
+0.18367 0.00000 i
+0.24490 0.00000 i
+0.30612 0.00000 i
+0.36735 0.00000 i
+0.42857 0.00000 i
+0.48980 0.00000 i
+0.55102 0.00000 i
+0.61224 0.00000 i
+0.67347 0.00000 i
+0.73469 0.00000 i
+0.79592 0.00000 i
+0.85714 0.00000 i
+0.91837 0.00000 i
+0.97959 0.00000 i
+1.04082 0.00000 i
+1.10204 0.00000 i
+1.16327 0.00000 i
+1.22449 0.00000 i
+1.28571 0.00000 i
+1.34694 0.00000 i
+1.40816 0.00000 i
+1.46939 0.00000 i
+1.53061 0.00000 i
+1.59184 0.00000 i
+1.65306 0.00000 i
+1.71429 0.00000 i
+1.77551 0.00000 i
+1.83673 0.00000 i
+1.89796 0.00000 i
+1.95918 0.00000 i
+2.02041 0.00000 i
+2.08163 0.00000 i
+2.14286 0.00000 i
+2.20408 0.00000 i
+2.26531 0.00000 i
+2.32653 0.00000 i
+2.38776 0.00000 i
+2.44898 0.00000 i
+2.51020 0.00000 i
+2.57143 0.00000 i
+2.63265 0.00000 i
+2.69388 0.00000 i
+2.75510 0.00000 i
+2.81633 0.00000 i
+2.87755 0.00000 i
+2.93878 0.00000 i
+3.00000 0.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.gnuplot
new file mode 100644
index 0000000000..82e973748c
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/24.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(1/sqrt(1+(0.08*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.table
new file mode 100644
index 0000000000..89de4933b4
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/24.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -0.02771 i
+0.06122 -0.03669 i
+0.12245 -0.04858 i
+0.18367 -0.06428 i
+0.24490 -0.08502 i
+0.30612 -0.11235 i
+0.36735 -0.14833 i
+0.42857 -0.19557 i
+0.48980 -0.25741 i
+0.55102 -0.33806 i
+0.61224 -0.44272 i
+0.67347 -0.57769 i
+0.73469 -0.75040 i
+0.79592 -0.96925 i
+0.85714 -1.24337 i
+0.91837 -1.58198 i
+0.97959 -1.99369 i
+1.04082 -2.48549 i
+1.10204 -3.06191 i
+1.16327 -3.72435 i
+1.22449 -4.47085 i
+1.28571 -5.29643 i
+1.34694 -6.19375 i
+1.40816 -7.15403 i
+1.46939 -8.16803 i
+1.53061 -9.22670 i
+1.59184 -10.32178 i
+1.65306 -11.44605 i
+1.71429 -12.59337 i
+1.77551 -13.75873 i
+1.83673 -14.93808 i
+1.89796 -16.12821 i
+1.95918 -17.32660 i
+2.02041 -18.53130 i
+2.08163 -19.74080 i
+2.14286 -20.95395 i
+2.20408 -22.16986 i
+2.26531 -23.38787 i
+2.32653 -24.60747 i
+2.38776 -25.82827 i
+2.44898 -27.04997 i
+2.51020 -28.27235 i
+2.57143 -29.49525 i
+2.63265 -30.71854 i
+2.69388 -31.94213 i
+2.75510 -33.16594 i
+2.81633 -34.38991 i
+2.87755 -35.61401 i
+2.93878 -36.83821 i
+3.00000 -38.06248 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.gnuplot
new file mode 100644
index 0000000000..79bf2d52b6
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/25.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(1/sqrt(1+(0.08*10**t)**2)))+0
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.table
new file mode 100644
index 0000000000..89de4933b4
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/25.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -0.02771 i
+0.06122 -0.03669 i
+0.12245 -0.04858 i
+0.18367 -0.06428 i
+0.24490 -0.08502 i
+0.30612 -0.11235 i
+0.36735 -0.14833 i
+0.42857 -0.19557 i
+0.48980 -0.25741 i
+0.55102 -0.33806 i
+0.61224 -0.44272 i
+0.67347 -0.57769 i
+0.73469 -0.75040 i
+0.79592 -0.96925 i
+0.85714 -1.24337 i
+0.91837 -1.58198 i
+0.97959 -1.99369 i
+1.04082 -2.48549 i
+1.10204 -3.06191 i
+1.16327 -3.72435 i
+1.22449 -4.47085 i
+1.28571 -5.29643 i
+1.34694 -6.19375 i
+1.40816 -7.15403 i
+1.46939 -8.16803 i
+1.53061 -9.22670 i
+1.59184 -10.32178 i
+1.65306 -11.44605 i
+1.71429 -12.59337 i
+1.77551 -13.75873 i
+1.83673 -14.93808 i
+1.89796 -16.12821 i
+1.95918 -17.32660 i
+2.02041 -18.53130 i
+2.08163 -19.74080 i
+2.14286 -20.95395 i
+2.20408 -22.16986 i
+2.26531 -23.38787 i
+2.32653 -24.60747 i
+2.38776 -25.82827 i
+2.44898 -27.04997 i
+2.51020 -28.27235 i
+2.57143 -29.49525 i
+2.63265 -30.71854 i
+2.69388 -31.94213 i
+2.75510 -33.16594 i
+2.81633 -34.38991 i
+2.87755 -35.61401 i
+2.93878 -36.83821 i
+3.00000 -38.06248 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.gnuplot
new file mode 100644
index 0000000000..573f004eef
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/26.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),-0.08*10**t
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.table
new file mode 100644
index 0000000000..74cc1c624d
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/26.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -0.08000 i
+0.06122 -0.09211 i
+0.12245 -0.10606 i
+0.18367 -0.12211 i
+0.24490 -0.14060 i
+0.30612 -0.16189 i
+0.36735 -0.18640 i
+0.42857 -0.21462 i
+0.48980 -0.24711 i
+0.55102 -0.28452 i
+0.61224 -0.32759 i
+0.67347 -0.37719 i
+0.73469 -0.43429 i
+0.79592 -0.50004 i
+0.85714 -0.57575 i
+0.91837 -0.66291 i
+0.97959 -0.76328 i
+1.04082 -0.87883 i
+1.10204 -1.01188 i
+1.16327 -1.16508 i
+1.22449 -1.34147 i
+1.28571 -1.54456 i
+1.34694 -1.77840 i
+1.40816 -2.04764 i
+1.46939 -2.35764 i
+1.53061 -2.71458 i
+1.59184 -3.12555 i
+1.65306 -3.59875 i
+1.71429 -4.14358 i
+1.77551 -4.77090 i
+1.83673 -5.49319 i
+1.89796 -6.32483 i
+1.95918 -7.28239 i
+2.02041 -8.38491 i
+2.08163 -9.65434 i
+2.14286 -11.11596 i
+2.20408 -12.79887 i
+2.26531 -14.73656 i
+2.32653 -16.96761 i
+2.38776 -19.53642 i
+2.44898 -22.49415 i
+2.51020 -25.89966 i
+2.57143 -29.82075 i
+2.63265 -34.33547 i
+2.69388 -39.53371 i
+2.75510 -45.51893 i
+2.81633 -52.41028 i
+2.87755 -60.34496 i
+2.93878 -69.48091 i
+3.00000 -80.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.gnuplot
new file mode 100644
index 0000000000..55046c903d
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/27.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),-180/3.1415957*atan(0.08*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.table
new file mode 100644
index 0000000000..b8f9b71d81
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/27.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -4.57392 i
+0.06122 -5.26275 i
+0.12245 -6.05398 i
+0.18367 -6.96211 i
+0.24490 -8.00336 i
+0.30612 -9.19566 i
+0.36735 -10.55853 i
+0.42857 -12.11282 i
+0.48980 -13.88014 i
+0.55102 -15.88201 i
+0.61224 -18.13843 i
+0.67347 -20.66592 i
+0.73469 -23.47500 i
+0.79592 -26.56705 i
+0.85714 -29.93109 i
+0.91837 -33.54093 i
+0.97959 -37.35360 i
+1.04082 -41.31003 i
+1.10204 -45.33840 i
+1.16327 -49.36009 i
+1.22449 -53.29715 i
+1.28571 -57.07954 i
+1.34694 -60.65072 i
+1.40816 -63.97056 i
+1.46939 -67.01557 i
+1.53061 -69.77707 i
+1.59184 -72.25820 i
+1.65306 -74.47067 i
+1.71429 -76.43177 i
+1.77551 -78.16187 i
+1.83673 -79.68258 i
+1.89796 -81.01543 i
+1.95918 -82.18110 i
+2.02041 -83.19884 i
+2.08163 -84.08629 i
+2.14286 -84.85939 i
+2.20408 -85.53237 i
+2.26531 -86.11787 i
+2.32653 -86.62704 i
+2.38776 -87.06971 i
+2.44898 -87.45445 i
+2.51020 -87.78879 i
+2.57143 -88.07929 i
+2.63265 -88.33168 i
+2.69388 -88.55093 i
+2.75510 -88.74139 i
+2.81633 -88.90683 i
+2.87755 -89.05053 i
+2.93878 -89.17534 i
+3.00000 -89.28375 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.gnuplot
new file mode 100644
index 0000000000..6a4d0927c4
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/28.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),-180/3.1415957*atan(0.08*10**t)+-0.08*10**t
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.table
new file mode 100644
index 0000000000..e05d70c457
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/28.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -4.65392 i
+0.06122 -5.35486 i
+0.12245 -6.16003 i
+0.18367 -7.08422 i
+0.24490 -8.14397 i
+0.30612 -9.35755 i
+0.36735 -10.74493 i
+0.42857 -12.32743 i
+0.48980 -14.12725 i
+0.55102 -16.16653 i
+0.61224 -18.46602 i
+0.67347 -21.04311 i
+0.73469 -23.90929 i
+0.79592 -27.06709 i
+0.85714 -30.50684 i
+0.91837 -34.20385 i
+0.97959 -38.11688 i
+1.04082 -42.18886 i
+1.10204 -46.35028 i
+1.16327 -50.52517 i
+1.22449 -54.63862 i
+1.28571 -58.62410 i
+1.34694 -62.42911 i
+1.40816 -66.01820 i
+1.46939 -69.37322 i
+1.53061 -72.49165 i
+1.59184 -75.38375 i
+1.65306 -78.06942 i
+1.71429 -80.57535 i
+1.77551 -82.93277 i
+1.83673 -85.17577 i
+1.89796 -87.34027 i
+1.95918 -89.46348 i
+2.02041 -91.58374 i
+2.08163 -93.74063 i
+2.14286 -95.97535 i
+2.20408 -98.33123 i
+2.26531 -100.85443 i
+2.32653 -103.59465 i
+2.38776 -106.60613 i
+2.44898 -109.94860 i
+2.51020 -113.68845 i
+2.57143 -117.90004 i
+2.63265 -122.66715 i
+2.69388 -128.08464 i
+2.75510 -134.26032 i
+2.81633 -141.31711 i
+2.87755 -149.39549 i
+2.93878 -158.65625 i
+3.00000 -169.28375 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.gnuplot
new file mode 100644
index 0000000000..6964830ca2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/29.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),20*log10(abs((3*4/6)/sqrt(1+((70/6)*10**t)**2)))-20*log10(abs(1/sqrt(1+((5/4)*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.table
new file mode 100644
index 0000000000..44480495da
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/29.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 5.96880 i
+-1.91837 5.94537 i
+-1.83673 5.91147 i
+-1.75510 5.86258 i
+-1.67347 5.79237 i
+-1.59184 5.69214 i
+-1.51020 5.55026 i
+-1.42857 5.35172 i
+-1.34694 5.07819 i
+-1.26531 4.70888 i
+-1.18367 4.22270 i
+-1.10204 3.60163 i
+-1.02041 2.83474 i
+-0.93878 1.92120 i
+-0.85714 0.87120 i
+-0.77551 -0.29571 i
+-0.69388 -1.55381 i
+-0.61224 -2.87443 i
+-0.53061 -4.22807 i
+-0.44898 -5.58528 i
+-0.36735 -6.91664 i
+-0.28571 -8.19262 i
+-0.20408 -9.38421 i
+-0.12245 -10.46471 i
+-0.04082 -11.41274 i
+0.04082 -12.21561 i
+0.12245 -12.87144 i
+0.20408 -13.38894 i
+0.28571 -13.78476 i
+0.36735 -14.07958 i
+0.44898 -14.29454 i
+0.53061 -14.44867 i
+0.61224 -14.55783 i
+0.69388 -14.63443 i
+0.77551 -14.68783 i
+0.85714 -14.72490 i
+0.93878 -14.75053 i
+1.02041 -14.76823 i
+1.10204 -14.78042 i
+1.18367 -14.78881 i
+1.26531 -14.79458 i
+1.34694 -14.79855 i
+1.42857 -14.80127 i
+1.51020 -14.80315 i
+1.59184 -14.80443 i
+1.67347 -14.80532 i
+1.75510 -14.80592 i
+1.83673 -14.80634 i
+1.91837 -14.80663 i
+2.00000 -14.80682 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.gnuplot
new file mode 100644
index 0000000000..7f3785356a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/3.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=-0.99942:-0.99942] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.table
new file mode 100644
index 0000000000..c03c7e616f
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/3.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-0.99942 9.53851 i
+-0.99942 9.53851 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.gnuplot
new file mode 100644
index 0000000000..0e45061d1b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/30.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),0+(t<log10(1/((70/6)))?20*log10((3*4/6)):+20*log10((3*4/6)/((70/6)))-20*log10(10**t))-(t<log10(1/((5/4)))?20*log10(1):+20*log10(1/((5/4)))-20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.table
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/30.table
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.gnuplot
new file mode 100644
index 0000000000..5aa9d979d9
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/31.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),-180/3.1415957*atan((70/6)*10**t)--180/3.1415957*atan((5/4)*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.table
new file mode 100644
index 0000000000..8bd8cebdfe
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/31.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 -5.70435 i
+-1.91837 -6.87023 i
+-1.83673 -8.26698 i
+-1.75510 -9.93490 i
+-1.67347 -11.91742 i
+-1.59184 -14.25837 i
+-1.51020 -16.99713 i
+-1.42857 -20.16058 i
+-1.34694 -23.75178 i
+-1.26531 -27.73634 i
+-1.18367 -32.02980 i
+-1.10204 -36.49187 i
+-1.02041 -40.93358 i
+-0.93878 -45.13881 i
+-0.85714 -48.89427 i
+-0.77551 -52.01673 i
+-0.69388 -54.36827 i
+-0.61224 -55.85807 i
+-0.53061 -56.43576 i
+-0.44898 -56.08347 i
+-0.36735 -54.81198 i
+-0.28571 -52.66313 i
+-0.20408 -49.71712 i
+-0.12245 -46.10017 i
+-0.04082 -41.98535 i
+0.04082 -37.58080 i
+0.12245 -33.10481 i
+0.20408 -28.75540 i
+0.28571 -24.68591 i
+0.36735 -20.99426 i
+0.44898 -17.72599 i
+0.53061 -14.88584 i
+0.61224 -12.45154 i
+0.69388 -10.38591 i
+0.77551 -8.64563 i
+0.85714 -7.18686 i
+0.93878 -5.96837 i
+1.02041 -4.95311 i
+1.10204 -4.10863 i
+1.18367 -3.40702 i
+1.26531 -2.82459 i
+1.34694 -2.34136 i
+1.42857 -1.94060 i
+1.51020 -1.60832 i
+1.59184 -1.33287 i
+1.67347 -1.10456 i
+1.75510 -0.91533 i
+1.83673 -0.75851 i
+1.91837 -0.62855 i
+2.00000 -0.52085 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.gnuplot
new file mode 100644
index 0000000000..8010fb5c5f
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/32.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),0+(t<log10(1/((70/6)))? 0:-90)-(t<log10(1/((5/4)))? 0:-90)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.table
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/32.table
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.gnuplot
new file mode 100644
index 0000000000..6048ded54b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/33.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(1/(10**t)))+20*log10(2/0.08)-20*log10(abs(1/sqrt(1+(0.08*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.table
new file mode 100644
index 0000000000..513e5aa049
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/33.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 27.98651 i
+0.06122 26.77100 i
+0.12245 25.55840 i
+0.18367 24.34961 i
+0.24490 23.14586 i
+0.30612 21.94870 i
+0.36735 20.76019 i
+0.42857 19.58294 i
+0.48980 18.42029 i
+0.55102 17.27645 i
+0.61224 16.15662 i
+0.67347 15.06711 i
+0.73469 14.01532 i
+0.79592 13.00969 i
+0.85714 12.05931 i
+0.91837 11.17343 i
+0.97959 10.36065 i
+1.04082 9.62796 i
+1.10204 8.97989 i
+1.16327 8.41784 i
+1.22449 7.93986 i
+1.28571 7.54095 i
+1.34694 7.21377 i
+1.40816 6.94957 i
+1.46939 6.73907 i
+1.53061 6.57325 i
+1.59184 6.44385 i
+1.65306 6.34362 i
+1.71429 6.26646 i
+1.77551 6.20733 i
+1.83673 6.16219 i
+1.89796 6.12783 i
+1.95918 6.10173 i
+2.02041 6.08194 i
+2.08163 6.06695 i
+2.14286 6.05561 i
+2.20408 6.04703 i
+2.26531 6.04055 i
+2.32653 6.03566 i
+2.38776 6.03196 i
+2.44898 6.02917 i
+2.51020 6.02707 i
+2.57143 6.02548 i
+2.63265 6.02428 i
+2.69388 6.02338 i
+2.75510 6.02270 i
+2.81633 6.02218 i
+2.87755 6.02179 i
+2.93878 6.02150 i
+3.00000 6.02128 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.gnuplot
new file mode 100644
index 0000000000..2f9bc164fc
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/34.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(1/(10**t)))+20*log10(2/0.08)-(t<log10(1/(0.08))?20*log10(1):+20*log10(1/(0.08))-20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.table
new file mode 100644
index 0000000000..c7a00cdf33
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/34.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 27.95880 i
+0.06122 26.73431 i
+0.12245 25.50982 i
+0.18367 24.28533 i
+0.24490 23.06084 i
+0.30612 21.83635 i
+0.36735 20.61186 i
+0.42857 19.38737 i
+0.48980 18.16288 i
+0.55102 16.93839 i
+0.61224 15.71390 i
+0.67347 14.48941 i
+0.73469 13.26492 i
+0.79592 12.04043 i
+0.85714 10.81594 i
+0.91837 9.59145 i
+0.97959 8.36696 i
+1.04082 7.14247 i
+1.10204 6.02060 i
+1.16327 6.02060 i
+1.22449 6.02060 i
+1.28571 6.02060 i
+1.34694 6.02060 i
+1.40816 6.02060 i
+1.46939 6.02060 i
+1.53061 6.02060 i
+1.59184 6.02060 i
+1.65306 6.02060 i
+1.71429 6.02060 i
+1.77551 6.02060 i
+1.83673 6.02060 i
+1.89796 6.02060 i
+1.95918 6.02060 i
+2.02041 6.02060 i
+2.08163 6.02060 i
+2.14286 6.02060 i
+2.20408 6.02060 i
+2.26531 6.02060 i
+2.32653 6.02060 i
+2.38776 6.02060 i
+2.44898 6.02060 i
+2.51020 6.02060 i
+2.57143 6.02060 i
+2.63265 6.02060 i
+2.69388 6.02060 i
+2.75510 6.02060 i
+2.81633 6.02060 i
+2.87755 6.02060 i
+2.93878 6.02060 i
+3.00000 6.02060 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.gnuplot
new file mode 100644
index 0000000000..61f459f89c
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/35.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),-90+(-180/3.1415957*atan(0.08*10**t))*(-1)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.table
new file mode 100644
index 0000000000..5d7d6fc4a5
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/35.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -85.42608 i
+0.06122 -84.73725 i
+0.12245 -83.94602 i
+0.18367 -83.03789 i
+0.24490 -81.99664 i
+0.30612 -80.80434 i
+0.36735 -79.44147 i
+0.42857 -77.88718 i
+0.48980 -76.11986 i
+0.55102 -74.11799 i
+0.61224 -71.86157 i
+0.67347 -69.33408 i
+0.73469 -66.52500 i
+0.79592 -63.43295 i
+0.85714 -60.06891 i
+0.91837 -56.45907 i
+0.97959 -52.64640 i
+1.04082 -48.68997 i
+1.10204 -44.66160 i
+1.16327 -40.63991 i
+1.22449 -36.70285 i
+1.28571 -32.92046 i
+1.34694 -29.34928 i
+1.40816 -26.02944 i
+1.46939 -22.98443 i
+1.53061 -20.22293 i
+1.59184 -17.74180 i
+1.65306 -15.52933 i
+1.71429 -13.56823 i
+1.77551 -11.83813 i
+1.83673 -10.31742 i
+1.89796 -8.98457 i
+1.95918 -7.81890 i
+2.02041 -6.80116 i
+2.08163 -5.91371 i
+2.14286 -5.14061 i
+2.20408 -4.46763 i
+2.26531 -3.88213 i
+2.32653 -3.37296 i
+2.38776 -2.93029 i
+2.44898 -2.54555 i
+2.51020 -2.21121 i
+2.57143 -1.92071 i
+2.63265 -1.66832 i
+2.69388 -1.44907 i
+2.75510 -1.25861 i
+2.81633 -1.09317 i
+2.87755 -0.94947 i
+2.93878 -0.82466 i
+3.00000 -0.71625 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.gnuplot
new file mode 100644
index 0000000000..b2a196be08
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/36.table"; set format "%.5f"
+set samples 201; set parametric; plot [t=0:3] log10(10**t),-90+((t<log10(1/(0.08))? 0:-90))*(-1)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.table
new file mode 100644
index 0000000000..b9e4582dc6
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/36.table
@@ -0,0 +1,205 @@
+
+#Curve 0 of 1, 201 points
+#x y type
+0.00000 -90.00000 i
+0.01500 -90.00000 i
+0.03000 -90.00000 i
+0.04500 -90.00000 i
+0.06000 -90.00000 i
+0.07500 -90.00000 i
+0.09000 -90.00000 i
+0.10500 -90.00000 i
+0.12000 -90.00000 i
+0.13500 -90.00000 i
+0.15000 -90.00000 i
+0.16500 -90.00000 i
+0.18000 -90.00000 i
+0.19500 -90.00000 i
+0.21000 -90.00000 i
+0.22500 -90.00000 i
+0.24000 -90.00000 i
+0.25500 -90.00000 i
+0.27000 -90.00000 i
+0.28500 -90.00000 i
+0.30000 -90.00000 i
+0.31500 -90.00000 i
+0.33000 -90.00000 i
+0.34500 -90.00000 i
+0.36000 -90.00000 i
+0.37500 -90.00000 i
+0.39000 -90.00000 i
+0.40500 -90.00000 i
+0.42000 -90.00000 i
+0.43500 -90.00000 i
+0.45000 -90.00000 i
+0.46500 -90.00000 i
+0.48000 -90.00000 i
+0.49500 -90.00000 i
+0.51000 -90.00000 i
+0.52500 -90.00000 i
+0.54000 -90.00000 i
+0.55500 -90.00000 i
+0.57000 -90.00000 i
+0.58500 -90.00000 i
+0.60000 -90.00000 i
+0.61500 -90.00000 i
+0.63000 -90.00000 i
+0.64500 -90.00000 i
+0.66000 -90.00000 i
+0.67500 -90.00000 i
+0.69000 -90.00000 i
+0.70500 -90.00000 i
+0.72000 -90.00000 i
+0.73500 -90.00000 i
+0.75000 -90.00000 i
+0.76500 -90.00000 i
+0.78000 -90.00000 i
+0.79500 -90.00000 i
+0.81000 -90.00000 i
+0.82500 -90.00000 i
+0.84000 -90.00000 i
+0.85500 -90.00000 i
+0.87000 -90.00000 i
+0.88500 -90.00000 i
+0.90000 -90.00000 i
+0.91500 -90.00000 i
+0.93000 -90.00000 i
+0.94500 -90.00000 i
+0.96000 -90.00000 i
+0.97500 -90.00000 i
+0.99000 -90.00000 i
+1.00500 -90.00000 i
+1.02000 -90.00000 i
+1.03500 -90.00000 i
+1.05000 -90.00000 i
+1.06500 -90.00000 i
+1.08000 -90.00000 i
+1.09500 -90.00000 i
+1.11000 0.00000 i
+1.12500 0.00000 i
+1.14000 0.00000 i
+1.15500 0.00000 i
+1.17000 0.00000 i
+1.18500 0.00000 i
+1.20000 0.00000 i
+1.21500 0.00000 i
+1.23000 0.00000 i
+1.24500 0.00000 i
+1.26000 0.00000 i
+1.27500 0.00000 i
+1.29000 0.00000 i
+1.30500 0.00000 i
+1.32000 0.00000 i
+1.33500 0.00000 i
+1.35000 0.00000 i
+1.36500 0.00000 i
+1.38000 0.00000 i
+1.39500 0.00000 i
+1.41000 0.00000 i
+1.42500 0.00000 i
+1.44000 0.00000 i
+1.45500 0.00000 i
+1.47000 0.00000 i
+1.48500 0.00000 i
+1.50000 0.00000 i
+1.51500 0.00000 i
+1.53000 0.00000 i
+1.54500 0.00000 i
+1.56000 0.00000 i
+1.57500 0.00000 i
+1.59000 0.00000 i
+1.60500 0.00000 i
+1.62000 0.00000 i
+1.63500 0.00000 i
+1.65000 0.00000 i
+1.66500 0.00000 i
+1.68000 0.00000 i
+1.69500 0.00000 i
+1.71000 0.00000 i
+1.72500 0.00000 i
+1.74000 0.00000 i
+1.75500 0.00000 i
+1.77000 0.00000 i
+1.78500 0.00000 i
+1.80000 0.00000 i
+1.81500 0.00000 i
+1.83000 0.00000 i
+1.84500 0.00000 i
+1.86000 0.00000 i
+1.87500 0.00000 i
+1.89000 0.00000 i
+1.90500 0.00000 i
+1.92000 0.00000 i
+1.93500 0.00000 i
+1.95000 0.00000 i
+1.96500 0.00000 i
+1.98000 0.00000 i
+1.99500 0.00000 i
+2.01000 0.00000 i
+2.02500 0.00000 i
+2.04000 0.00000 i
+2.05500 0.00000 i
+2.07000 0.00000 i
+2.08500 0.00000 i
+2.10000 0.00000 i
+2.11500 0.00000 i
+2.13000 0.00000 i
+2.14500 0.00000 i
+2.16000 0.00000 i
+2.17500 0.00000 i
+2.19000 0.00000 i
+2.20500 0.00000 i
+2.22000 0.00000 i
+2.23500 0.00000 i
+2.25000 0.00000 i
+2.26500 0.00000 i
+2.28000 0.00000 i
+2.29500 0.00000 i
+2.31000 0.00000 i
+2.32500 0.00000 i
+2.34000 0.00000 i
+2.35500 0.00000 i
+2.37000 0.00000 i
+2.38500 0.00000 i
+2.40000 0.00000 i
+2.41500 0.00000 i
+2.43000 0.00000 i
+2.44500 0.00000 i
+2.46000 0.00000 i
+2.47500 0.00000 i
+2.49000 0.00000 i
+2.50500 0.00000 i
+2.52000 0.00000 i
+2.53500 0.00000 i
+2.55000 0.00000 i
+2.56500 0.00000 i
+2.58000 0.00000 i
+2.59500 0.00000 i
+2.61000 0.00000 i
+2.62500 0.00000 i
+2.64000 0.00000 i
+2.65500 0.00000 i
+2.67000 0.00000 i
+2.68500 0.00000 i
+2.70000 0.00000 i
+2.71500 0.00000 i
+2.73000 0.00000 i
+2.74500 0.00000 i
+2.76000 0.00000 i
+2.77500 0.00000 i
+2.79000 0.00000 i
+2.80500 0.00000 i
+2.82000 0.00000 i
+2.83500 0.00000 i
+2.85000 0.00000 i
+2.86500 0.00000 i
+2.88000 0.00000 i
+2.89500 0.00000 i
+2.91000 0.00000 i
+2.92500 0.00000 i
+2.94000 0.00000 i
+2.95500 0.00000 i
+2.97000 0.00000 i
+2.98500 0.00000 i
+3.00000 0.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.gnuplot
new file mode 100644
index 0000000000..57ce4f2ff2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/37.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(2*sqrt(1+(0.08*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.table
new file mode 100644
index 0000000000..5fac119e07
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/37.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 6.04831 i
+0.06122 6.05729 i
+0.12245 6.06918 i
+0.18367 6.08488 i
+0.24490 6.10562 i
+0.30612 6.13295 i
+0.36735 6.16893 i
+0.42857 6.21617 i
+0.48980 6.27801 i
+0.55102 6.35866 i
+0.61224 6.46332 i
+0.67347 6.59829 i
+0.73469 6.77100 i
+0.79592 6.98985 i
+0.85714 7.26397 i
+0.91837 7.60258 i
+0.97959 8.01429 i
+1.04082 8.50609 i
+1.10204 9.08251 i
+1.16327 9.74495 i
+1.22449 10.49145 i
+1.28571 11.31703 i
+1.34694 12.21435 i
+1.40816 13.17463 i
+1.46939 14.18863 i
+1.53061 15.24730 i
+1.59184 16.34238 i
+1.65306 17.46665 i
+1.71429 18.61397 i
+1.77551 19.77933 i
+1.83673 20.95868 i
+1.89796 22.14881 i
+1.95918 23.34720 i
+2.02041 24.55190 i
+2.08163 25.76140 i
+2.14286 26.97455 i
+2.20408 28.19046 i
+2.26531 29.40847 i
+2.32653 30.62807 i
+2.38776 31.84887 i
+2.44898 33.07057 i
+2.51020 34.29295 i
+2.57143 35.51585 i
+2.63265 36.73914 i
+2.69388 37.96273 i
+2.75510 39.18654 i
+2.81633 40.41051 i
+2.87755 41.63461 i
+2.93878 42.85881 i
+3.00000 44.08308 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.gnuplot
new file mode 100644
index 0000000000..53b2b477b5
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/38.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),(t<log10(1/0.08)?20*log10(2):+20*log10(2*0.08)+20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.table
new file mode 100644
index 0000000000..401f169b48
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/38.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 6.02060 i
+0.06122 6.02060 i
+0.12245 6.02060 i
+0.18367 6.02060 i
+0.24490 6.02060 i
+0.30612 6.02060 i
+0.36735 6.02060 i
+0.42857 6.02060 i
+0.48980 6.02060 i
+0.55102 6.02060 i
+0.61224 6.02060 i
+0.67347 6.02060 i
+0.73469 6.02060 i
+0.79592 6.02060 i
+0.85714 6.02060 i
+0.91837 6.02060 i
+0.97959 6.02060 i
+1.04082 6.02060 i
+1.10204 6.12322 i
+1.16327 7.34771 i
+1.22449 8.57220 i
+1.28571 9.79669 i
+1.34694 11.02118 i
+1.40816 12.24566 i
+1.46939 13.47015 i
+1.53061 14.69464 i
+1.59184 15.91913 i
+1.65306 17.14362 i
+1.71429 18.36811 i
+1.77551 19.59260 i
+1.83673 20.81709 i
+1.89796 22.04158 i
+1.95918 23.26607 i
+2.02041 24.49056 i
+2.08163 25.71505 i
+2.14286 26.93954 i
+2.20408 28.16403 i
+2.26531 29.38852 i
+2.32653 30.61301 i
+2.38776 31.83750 i
+2.44898 33.06199 i
+2.51020 34.28648 i
+2.57143 35.51097 i
+2.63265 36.73546 i
+2.69388 37.95995 i
+2.75510 39.18444 i
+2.81633 40.40893 i
+2.87755 41.63342 i
+2.93878 42.85791 i
+3.00000 44.08240 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.gnuplot
new file mode 100644
index 0000000000..e17f9858bd
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/39.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),--180/3.1415957*atan(0.08*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.table
new file mode 100644
index 0000000000..973e7f7cfc
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/39.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 4.57392 i
+0.06122 5.26275 i
+0.12245 6.05398 i
+0.18367 6.96211 i
+0.24490 8.00336 i
+0.30612 9.19566 i
+0.36735 10.55853 i
+0.42857 12.11282 i
+0.48980 13.88014 i
+0.55102 15.88201 i
+0.61224 18.13843 i
+0.67347 20.66592 i
+0.73469 23.47500 i
+0.79592 26.56705 i
+0.85714 29.93109 i
+0.91837 33.54093 i
+0.97959 37.35360 i
+1.04082 41.31003 i
+1.10204 45.33840 i
+1.16327 49.36009 i
+1.22449 53.29715 i
+1.28571 57.07954 i
+1.34694 60.65072 i
+1.40816 63.97056 i
+1.46939 67.01557 i
+1.53061 69.77707 i
+1.59184 72.25820 i
+1.65306 74.47067 i
+1.71429 76.43177 i
+1.77551 78.16187 i
+1.83673 79.68258 i
+1.89796 81.01543 i
+1.95918 82.18110 i
+2.02041 83.19884 i
+2.08163 84.08629 i
+2.14286 84.85939 i
+2.20408 85.53237 i
+2.26531 86.11787 i
+2.32653 86.62704 i
+2.38776 87.06971 i
+2.44898 87.45445 i
+2.51020 87.78879 i
+2.57143 88.07929 i
+2.63265 88.33168 i
+2.69388 88.55093 i
+2.75510 88.74139 i
+2.81633 88.90683 i
+2.87755 89.05053 i
+2.93878 89.17534 i
+3.00000 89.28375 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.gnuplot
new file mode 100644
index 0000000000..af77b3f134
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/4.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=-0.81912:-0.81912] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.table
new file mode 100644
index 0000000000..9baf058e60
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/4.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-0.81912 9.53344 i
+-0.81912 9.53344 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.gnuplot
new file mode 100644
index 0000000000..c2a70ee0fe
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/40.table"; set format "%.5f"
+set samples 201; set parametric; plot [t=0:3] log10(10**t),-(t<log10(1/(0.08))? 0:-90)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.table
new file mode 100644
index 0000000000..5107c82074
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/40.table
@@ -0,0 +1,205 @@
+
+#Curve 0 of 1, 201 points
+#x y type
+0.00000 0.00000 i
+0.01500 0.00000 i
+0.03000 0.00000 i
+0.04500 0.00000 i
+0.06000 0.00000 i
+0.07500 0.00000 i
+0.09000 0.00000 i
+0.10500 0.00000 i
+0.12000 0.00000 i
+0.13500 0.00000 i
+0.15000 0.00000 i
+0.16500 0.00000 i
+0.18000 0.00000 i
+0.19500 0.00000 i
+0.21000 0.00000 i
+0.22500 0.00000 i
+0.24000 0.00000 i
+0.25500 0.00000 i
+0.27000 0.00000 i
+0.28500 0.00000 i
+0.30000 0.00000 i
+0.31500 0.00000 i
+0.33000 0.00000 i
+0.34500 0.00000 i
+0.36000 0.00000 i
+0.37500 0.00000 i
+0.39000 0.00000 i
+0.40500 0.00000 i
+0.42000 0.00000 i
+0.43500 0.00000 i
+0.45000 0.00000 i
+0.46500 0.00000 i
+0.48000 0.00000 i
+0.49500 0.00000 i
+0.51000 0.00000 i
+0.52500 0.00000 i
+0.54000 0.00000 i
+0.55500 0.00000 i
+0.57000 0.00000 i
+0.58500 0.00000 i
+0.60000 0.00000 i
+0.61500 0.00000 i
+0.63000 0.00000 i
+0.64500 0.00000 i
+0.66000 0.00000 i
+0.67500 0.00000 i
+0.69000 0.00000 i
+0.70500 0.00000 i
+0.72000 0.00000 i
+0.73500 0.00000 i
+0.75000 0.00000 i
+0.76500 0.00000 i
+0.78000 0.00000 i
+0.79500 0.00000 i
+0.81000 0.00000 i
+0.82500 0.00000 i
+0.84000 0.00000 i
+0.85500 0.00000 i
+0.87000 0.00000 i
+0.88500 0.00000 i
+0.90000 0.00000 i
+0.91500 0.00000 i
+0.93000 0.00000 i
+0.94500 0.00000 i
+0.96000 0.00000 i
+0.97500 0.00000 i
+0.99000 0.00000 i
+1.00500 0.00000 i
+1.02000 0.00000 i
+1.03500 0.00000 i
+1.05000 0.00000 i
+1.06500 0.00000 i
+1.08000 0.00000 i
+1.09500 0.00000 i
+1.11000 90.00000 i
+1.12500 90.00000 i
+1.14000 90.00000 i
+1.15500 90.00000 i
+1.17000 90.00000 i
+1.18500 90.00000 i
+1.20000 90.00000 i
+1.21500 90.00000 i
+1.23000 90.00000 i
+1.24500 90.00000 i
+1.26000 90.00000 i
+1.27500 90.00000 i
+1.29000 90.00000 i
+1.30500 90.00000 i
+1.32000 90.00000 i
+1.33500 90.00000 i
+1.35000 90.00000 i
+1.36500 90.00000 i
+1.38000 90.00000 i
+1.39500 90.00000 i
+1.41000 90.00000 i
+1.42500 90.00000 i
+1.44000 90.00000 i
+1.45500 90.00000 i
+1.47000 90.00000 i
+1.48500 90.00000 i
+1.50000 90.00000 i
+1.51500 90.00000 i
+1.53000 90.00000 i
+1.54500 90.00000 i
+1.56000 90.00000 i
+1.57500 90.00000 i
+1.59000 90.00000 i
+1.60500 90.00000 i
+1.62000 90.00000 i
+1.63500 90.00000 i
+1.65000 90.00000 i
+1.66500 90.00000 i
+1.68000 90.00000 i
+1.69500 90.00000 i
+1.71000 90.00000 i
+1.72500 90.00000 i
+1.74000 90.00000 i
+1.75500 90.00000 i
+1.77000 90.00000 i
+1.78500 90.00000 i
+1.80000 90.00000 i
+1.81500 90.00000 i
+1.83000 90.00000 i
+1.84500 90.00000 i
+1.86000 90.00000 i
+1.87500 90.00000 i
+1.89000 90.00000 i
+1.90500 90.00000 i
+1.92000 90.00000 i
+1.93500 90.00000 i
+1.95000 90.00000 i
+1.96500 90.00000 i
+1.98000 90.00000 i
+1.99500 90.00000 i
+2.01000 90.00000 i
+2.02500 90.00000 i
+2.04000 90.00000 i
+2.05500 90.00000 i
+2.07000 90.00000 i
+2.08500 90.00000 i
+2.10000 90.00000 i
+2.11500 90.00000 i
+2.13000 90.00000 i
+2.14500 90.00000 i
+2.16000 90.00000 i
+2.17500 90.00000 i
+2.19000 90.00000 i
+2.20500 90.00000 i
+2.22000 90.00000 i
+2.23500 90.00000 i
+2.25000 90.00000 i
+2.26500 90.00000 i
+2.28000 90.00000 i
+2.29500 90.00000 i
+2.31000 90.00000 i
+2.32500 90.00000 i
+2.34000 90.00000 i
+2.35500 90.00000 i
+2.37000 90.00000 i
+2.38500 90.00000 i
+2.40000 90.00000 i
+2.41500 90.00000 i
+2.43000 90.00000 i
+2.44500 90.00000 i
+2.46000 90.00000 i
+2.47500 90.00000 i
+2.49000 90.00000 i
+2.50500 90.00000 i
+2.52000 90.00000 i
+2.53500 90.00000 i
+2.55000 90.00000 i
+2.56500 90.00000 i
+2.58000 90.00000 i
+2.59500 90.00000 i
+2.61000 90.00000 i
+2.62500 90.00000 i
+2.64000 90.00000 i
+2.65500 90.00000 i
+2.67000 90.00000 i
+2.68500 90.00000 i
+2.70000 90.00000 i
+2.71500 90.00000 i
+2.73000 90.00000 i
+2.74500 90.00000 i
+2.76000 90.00000 i
+2.77500 90.00000 i
+2.79000 90.00000 i
+2.80500 90.00000 i
+2.82000 90.00000 i
+2.83500 90.00000 i
+2.85000 90.00000 i
+2.86500 90.00000 i
+2.88000 90.00000 i
+2.89500 90.00000 i
+2.91000 90.00000 i
+2.92500 90.00000 i
+2.94000 90.00000 i
+2.95500 90.00000 i
+2.97000 90.00000 i
+2.98500 90.00000 i
+3.00000 90.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.gnuplot
new file mode 100644
index 0000000000..3be6c3d629
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/41.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(2/sqrt(1+(0.02*10**t)**2)))+20*log10(abs(1*sqrt(1+((3*0.02)*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.table
new file mode 100644
index 0000000000..f8ead8bc06
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/41.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 6.03447 i
+0.06122 6.03898 i
+0.12245 6.04494 i
+0.18367 6.05283 i
+0.24490 6.06326 i
+0.30612 6.07705 i
+0.36735 6.09524 i
+0.42857 6.11920 i
+0.48980 6.15072 i
+0.55102 6.19207 i
+0.61224 6.24613 i
+0.67347 6.31650 i
+0.73469 6.40762 i
+0.79592 6.52478 i
+0.85714 6.67408 i
+0.91837 6.86226 i
+0.97959 7.09630 i
+1.04082 7.38270 i
+1.10204 7.72663 i
+1.16327 8.13081 i
+1.22449 8.59450 i
+1.28571 9.11275 i
+1.34694 9.67615 i
+1.40816 10.27123 i
+1.46939 10.88159 i
+1.53061 11.48928 i
+1.59184 12.07667 i
+1.65306 12.62805 i
+1.71429 13.13108 i
+1.77551 13.57764 i
+1.83673 13.96405 i
+1.89796 14.29069 i
+1.95918 14.56112 i
+2.02041 14.78100 i
+2.08163 14.95706 i
+2.14286 15.09625 i
+2.20408 15.20517 i
+2.26531 15.28970 i
+2.32653 15.35487 i
+2.38776 15.40486 i
+2.44898 15.44305 i
+2.51020 15.47215 i
+2.57143 15.49425 i
+2.63265 15.51102 i
+2.69388 15.52373 i
+2.75510 15.53334 i
+2.81633 15.54061 i
+2.87755 15.54610 i
+2.93878 15.55025 i
+3.00000 15.55339 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.gnuplot
new file mode 100644
index 0000000000..b7910deaaa
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/42.table"; set format "%.5f"
+set samples 101; set parametric; plot [t=0:3] log10(10**t),(t<log10(1/(0.02))?20*log10(2):+20*log10(2/(0.02))-20*log10(10**t))+(t<log10(1/(3*0.02))?20*log10(1):+20*log10(1*(3*0.02))+20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.table
new file mode 100644
index 0000000000..c6de5122fb
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/42.table
@@ -0,0 +1,105 @@
+
+#Curve 0 of 1, 101 points
+#x y type
+0.00000 6.02060 i
+0.03000 6.02060 i
+0.06000 6.02060 i
+0.09000 6.02060 i
+0.12000 6.02060 i
+0.15000 6.02060 i
+0.18000 6.02060 i
+0.21000 6.02060 i
+0.24000 6.02060 i
+0.27000 6.02060 i
+0.30000 6.02060 i
+0.33000 6.02060 i
+0.36000 6.02060 i
+0.39000 6.02060 i
+0.42000 6.02060 i
+0.45000 6.02060 i
+0.48000 6.02060 i
+0.51000 6.02060 i
+0.54000 6.02060 i
+0.57000 6.02060 i
+0.60000 6.02060 i
+0.63000 6.02060 i
+0.66000 6.02060 i
+0.69000 6.02060 i
+0.72000 6.02060 i
+0.75000 6.02060 i
+0.78000 6.02060 i
+0.81000 6.02060 i
+0.84000 6.02060 i
+0.87000 6.02060 i
+0.90000 6.02060 i
+0.93000 6.02060 i
+0.96000 6.02060 i
+0.99000 6.02060 i
+1.02000 6.02060 i
+1.05000 6.02060 i
+1.08000 6.02060 i
+1.11000 6.02060 i
+1.14000 6.02060 i
+1.17000 6.02060 i
+1.20000 6.02060 i
+1.23000 6.18362 i
+1.26000 6.78362 i
+1.29000 7.38362 i
+1.32000 7.98362 i
+1.35000 8.58362 i
+1.38000 9.18362 i
+1.41000 9.78362 i
+1.44000 10.38362 i
+1.47000 10.98362 i
+1.50000 11.58362 i
+1.53000 12.18362 i
+1.56000 12.78362 i
+1.59000 13.38362 i
+1.62000 13.98362 i
+1.65000 14.58362 i
+1.68000 15.18362 i
+1.71000 15.56303 i
+1.74000 15.56303 i
+1.77000 15.56303 i
+1.80000 15.56303 i
+1.83000 15.56303 i
+1.86000 15.56303 i
+1.89000 15.56303 i
+1.92000 15.56303 i
+1.95000 15.56303 i
+1.98000 15.56303 i
+2.01000 15.56303 i
+2.04000 15.56303 i
+2.07000 15.56303 i
+2.10000 15.56303 i
+2.13000 15.56303 i
+2.16000 15.56303 i
+2.19000 15.56303 i
+2.22000 15.56303 i
+2.25000 15.56303 i
+2.28000 15.56303 i
+2.31000 15.56303 i
+2.34000 15.56303 i
+2.37000 15.56303 i
+2.40000 15.56303 i
+2.43000 15.56303 i
+2.46000 15.56303 i
+2.49000 15.56303 i
+2.52000 15.56303 i
+2.55000 15.56303 i
+2.58000 15.56303 i
+2.61000 15.56303 i
+2.64000 15.56303 i
+2.67000 15.56303 i
+2.70000 15.56303 i
+2.73000 15.56303 i
+2.76000 15.56303 i
+2.79000 15.56303 i
+2.82000 15.56303 i
+2.85000 15.56303 i
+2.88000 15.56303 i
+2.91000 15.56303 i
+2.94000 15.56303 i
+2.97000 15.56303 i
+3.00000 15.56303 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.gnuplot
new file mode 100644
index 0000000000..f090b2276a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/43.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),-180/3.1415957*atan(0.02*10**t)+--180/3.1415957*atan((3*0.02)*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.table
new file mode 100644
index 0000000000..f6186e95de
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/43.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 2.28787 i
+0.06122 2.63276 i
+0.12245 3.02908 i
+0.18367 3.48423 i
+0.24490 4.00650 i
+0.30612 4.60510 i
+0.36735 5.29021 i
+0.42857 6.07279 i
+0.48980 6.96446 i
+0.55102 7.97703 i
+0.61224 9.12187 i
+0.67347 10.40886 i
+0.73469 11.84495 i
+0.79592 13.43206 i
+0.85714 15.16449 i
+0.91837 17.02587 i
+0.97959 18.98602 i
+1.04082 20.99837 i
+1.10204 22.99897 i
+1.16327 24.90799 i
+1.22449 26.63446 i
+1.28571 28.08416 i
+1.34694 29.16976 i
+1.40816 29.82120 i
+1.46939 29.99467 i
+1.53061 29.67829 i
+1.59184 28.89366 i
+1.65306 27.69305 i
+1.71429 26.15261 i
+1.77551 24.36280 i
+1.83673 22.41787 i
+1.89796 20.40619 i
+1.95918 18.40330 i
+2.02041 16.46806 i
+2.08163 14.64204 i
+2.14286 12.95108 i
+2.20408 11.40807 i
+2.26531 10.01618 i
+2.32653 8.77176 i
+2.38776 7.66684 i
+2.44898 6.69094 i
+2.51020 5.83249 i
+2.57143 5.07967 i
+2.63265 4.42104 i
+2.69388 3.84584 i
+2.75510 3.34417 i
+2.81633 2.90709 i
+2.87755 2.52658 i
+2.93878 2.19550 i
+3.00000 1.90756 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.gnuplot
new file mode 100644
index 0000000000..823536c468
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/44.table"; set format "%.5f"
+set samples 201; set parametric; plot [t=0:3] log10(10**t),(t<log10(1/(0.02))? 0:-90)+-(t<log10(1/((3*0.02)))? 0:-90)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.table
new file mode 100644
index 0000000000..de35231b3a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/44.table
@@ -0,0 +1,205 @@
+
+#Curve 0 of 1, 201 points
+#x y type
+0.00000 0.00000 i
+0.01500 0.00000 i
+0.03000 0.00000 i
+0.04500 0.00000 i
+0.06000 0.00000 i
+0.07500 0.00000 i
+0.09000 0.00000 i
+0.10500 0.00000 i
+0.12000 0.00000 i
+0.13500 0.00000 i
+0.15000 0.00000 i
+0.16500 0.00000 i
+0.18000 0.00000 i
+0.19500 0.00000 i
+0.21000 0.00000 i
+0.22500 0.00000 i
+0.24000 0.00000 i
+0.25500 0.00000 i
+0.27000 0.00000 i
+0.28500 0.00000 i
+0.30000 0.00000 i
+0.31500 0.00000 i
+0.33000 0.00000 i
+0.34500 0.00000 i
+0.36000 0.00000 i
+0.37500 0.00000 i
+0.39000 0.00000 i
+0.40500 0.00000 i
+0.42000 0.00000 i
+0.43500 0.00000 i
+0.45000 0.00000 i
+0.46500 0.00000 i
+0.48000 0.00000 i
+0.49500 0.00000 i
+0.51000 0.00000 i
+0.52500 0.00000 i
+0.54000 0.00000 i
+0.55500 0.00000 i
+0.57000 0.00000 i
+0.58500 0.00000 i
+0.60000 0.00000 i
+0.61500 0.00000 i
+0.63000 0.00000 i
+0.64500 0.00000 i
+0.66000 0.00000 i
+0.67500 0.00000 i
+0.69000 0.00000 i
+0.70500 0.00000 i
+0.72000 0.00000 i
+0.73500 0.00000 i
+0.75000 0.00000 i
+0.76500 0.00000 i
+0.78000 0.00000 i
+0.79500 0.00000 i
+0.81000 0.00000 i
+0.82500 0.00000 i
+0.84000 0.00000 i
+0.85500 0.00000 i
+0.87000 0.00000 i
+0.88500 0.00000 i
+0.90000 0.00000 i
+0.91500 0.00000 i
+0.93000 0.00000 i
+0.94500 0.00000 i
+0.96000 0.00000 i
+0.97500 0.00000 i
+0.99000 0.00000 i
+1.00500 0.00000 i
+1.02000 0.00000 i
+1.03500 0.00000 i
+1.05000 0.00000 i
+1.06500 0.00000 i
+1.08000 0.00000 i
+1.09500 0.00000 i
+1.11000 0.00000 i
+1.12500 0.00000 i
+1.14000 0.00000 i
+1.15500 0.00000 i
+1.17000 0.00000 i
+1.18500 0.00000 i
+1.20000 0.00000 i
+1.21500 0.00000 i
+1.23000 90.00000 i
+1.24500 90.00000 i
+1.26000 90.00000 i
+1.27500 90.00000 i
+1.29000 90.00000 i
+1.30500 90.00000 i
+1.32000 90.00000 i
+1.33500 90.00000 i
+1.35000 90.00000 i
+1.36500 90.00000 i
+1.38000 90.00000 i
+1.39500 90.00000 i
+1.41000 90.00000 i
+1.42500 90.00000 i
+1.44000 90.00000 i
+1.45500 90.00000 i
+1.47000 90.00000 i
+1.48500 90.00000 i
+1.50000 90.00000 i
+1.51500 90.00000 i
+1.53000 90.00000 i
+1.54500 90.00000 i
+1.56000 90.00000 i
+1.57500 90.00000 i
+1.59000 90.00000 i
+1.60500 90.00000 i
+1.62000 90.00000 i
+1.63500 90.00000 i
+1.65000 90.00000 i
+1.66500 90.00000 i
+1.68000 90.00000 i
+1.69500 90.00000 i
+1.71000 0.00000 i
+1.72500 0.00000 i
+1.74000 0.00000 i
+1.75500 0.00000 i
+1.77000 0.00000 i
+1.78500 0.00000 i
+1.80000 0.00000 i
+1.81500 0.00000 i
+1.83000 0.00000 i
+1.84500 0.00000 i
+1.86000 0.00000 i
+1.87500 0.00000 i
+1.89000 0.00000 i
+1.90500 0.00000 i
+1.92000 0.00000 i
+1.93500 0.00000 i
+1.95000 0.00000 i
+1.96500 0.00000 i
+1.98000 0.00000 i
+1.99500 0.00000 i
+2.01000 0.00000 i
+2.02500 0.00000 i
+2.04000 0.00000 i
+2.05500 0.00000 i
+2.07000 0.00000 i
+2.08500 0.00000 i
+2.10000 0.00000 i
+2.11500 0.00000 i
+2.13000 0.00000 i
+2.14500 0.00000 i
+2.16000 0.00000 i
+2.17500 0.00000 i
+2.19000 0.00000 i
+2.20500 0.00000 i
+2.22000 0.00000 i
+2.23500 0.00000 i
+2.25000 0.00000 i
+2.26500 0.00000 i
+2.28000 0.00000 i
+2.29500 0.00000 i
+2.31000 0.00000 i
+2.32500 0.00000 i
+2.34000 0.00000 i
+2.35500 0.00000 i
+2.37000 0.00000 i
+2.38500 0.00000 i
+2.40000 0.00000 i
+2.41500 0.00000 i
+2.43000 0.00000 i
+2.44500 0.00000 i
+2.46000 0.00000 i
+2.47500 0.00000 i
+2.49000 0.00000 i
+2.50500 0.00000 i
+2.52000 0.00000 i
+2.53500 0.00000 i
+2.55000 0.00000 i
+2.56500 0.00000 i
+2.58000 0.00000 i
+2.59500 0.00000 i
+2.61000 0.00000 i
+2.62500 0.00000 i
+2.64000 0.00000 i
+2.65500 0.00000 i
+2.67000 0.00000 i
+2.68500 0.00000 i
+2.70000 0.00000 i
+2.71500 0.00000 i
+2.73000 0.00000 i
+2.74500 0.00000 i
+2.76000 0.00000 i
+2.77500 0.00000 i
+2.79000 0.00000 i
+2.80500 0.00000 i
+2.82000 0.00000 i
+2.83500 0.00000 i
+2.85000 0.00000 i
+2.86500 0.00000 i
+2.88000 0.00000 i
+2.89500 0.00000 i
+2.91000 0.00000 i
+2.92500 0.00000 i
+2.94000 0.00000 i
+2.95500 0.00000 i
+2.97000 0.00000 i
+2.98500 0.00000 i
+3.00000 0.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.gnuplot
new file mode 100644
index 0000000000..755d06fe00
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/45.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(2*sqrt(1+(0.02*10**t)**2)))+20*log10(abs(1/sqrt(1+((3*0.02)*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.table
new file mode 100644
index 0000000000..b767e4a975
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/45.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 6.00673 i
+0.06122 6.00222 i
+0.12245 5.99626 i
+0.18367 5.98837 i
+0.24490 5.97794 i
+0.30612 5.96415 i
+0.36735 5.94596 i
+0.42857 5.92200 i
+0.48980 5.89048 i
+0.55102 5.84913 i
+0.61224 5.79507 i
+0.67347 5.72470 i
+0.73469 5.63358 i
+0.79592 5.51642 i
+0.85714 5.36712 i
+0.91837 5.17894 i
+0.97959 4.94490 i
+1.04082 4.65850 i
+1.10204 4.31457 i
+1.16327 3.91039 i
+1.22449 3.44670 i
+1.28571 2.92845 i
+1.34694 2.36505 i
+1.40816 1.76996 i
+1.46939 1.15961 i
+1.53061 0.55191 i
+1.59184 -0.03547 i
+1.65306 -0.58685 i
+1.71429 -1.08988 i
+1.77551 -1.53644 i
+1.83673 -1.92285 i
+1.89796 -2.24949 i
+1.95918 -2.51992 i
+2.02041 -2.73980 i
+2.08163 -2.91586 i
+2.14286 -3.05505 i
+2.20408 -3.16397 i
+2.26531 -3.24850 i
+2.32653 -3.31367 i
+2.38776 -3.36366 i
+2.44898 -3.40185 i
+2.51020 -3.43095 i
+2.57143 -3.45305 i
+2.63265 -3.46982 i
+2.69388 -3.48253 i
+2.75510 -3.49214 i
+2.81633 -3.49941 i
+2.87755 -3.50490 i
+2.93878 -3.50905 i
+3.00000 -3.51219 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.gnuplot
new file mode 100644
index 0000000000..0aa5b4d5a0
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/46.table"; set format "%.5f"
+set samples 101; set parametric; plot [t=0:3] log10(10**t),(t<log10(1/0.02)?20*log10(2):+20*log10(2*0.02)+20*log10(10**t))+(t<log10(1/((3*0.02)))?20*log10(1):+20*log10(1/((3*0.02)))-20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.table
new file mode 100644
index 0000000000..4e1941cbb6
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/46.table
@@ -0,0 +1,105 @@
+
+#Curve 0 of 1, 101 points
+#x y type
+0.00000 6.02060 i
+0.03000 6.02060 i
+0.06000 6.02060 i
+0.09000 6.02060 i
+0.12000 6.02060 i
+0.15000 6.02060 i
+0.18000 6.02060 i
+0.21000 6.02060 i
+0.24000 6.02060 i
+0.27000 6.02060 i
+0.30000 6.02060 i
+0.33000 6.02060 i
+0.36000 6.02060 i
+0.39000 6.02060 i
+0.42000 6.02060 i
+0.45000 6.02060 i
+0.48000 6.02060 i
+0.51000 6.02060 i
+0.54000 6.02060 i
+0.57000 6.02060 i
+0.60000 6.02060 i
+0.63000 6.02060 i
+0.66000 6.02060 i
+0.69000 6.02060 i
+0.72000 6.02060 i
+0.75000 6.02060 i
+0.78000 6.02060 i
+0.81000 6.02060 i
+0.84000 6.02060 i
+0.87000 6.02060 i
+0.90000 6.02060 i
+0.93000 6.02060 i
+0.96000 6.02060 i
+0.99000 6.02060 i
+1.02000 6.02060 i
+1.05000 6.02060 i
+1.08000 6.02060 i
+1.11000 6.02060 i
+1.14000 6.02060 i
+1.17000 6.02060 i
+1.20000 6.02060 i
+1.23000 5.85757 i
+1.26000 5.25757 i
+1.29000 4.65757 i
+1.32000 4.05757 i
+1.35000 3.45757 i
+1.38000 2.85757 i
+1.41000 2.25757 i
+1.44000 1.65757 i
+1.47000 1.05757 i
+1.50000 0.45757 i
+1.53000 -0.14243 i
+1.56000 -0.74243 i
+1.59000 -1.34243 i
+1.62000 -1.94243 i
+1.65000 -2.54243 i
+1.68000 -3.14243 i
+1.71000 -3.52183 i
+1.74000 -3.52183 i
+1.77000 -3.52183 i
+1.80000 -3.52183 i
+1.83000 -3.52183 i
+1.86000 -3.52183 i
+1.89000 -3.52183 i
+1.92000 -3.52183 i
+1.95000 -3.52183 i
+1.98000 -3.52183 i
+2.01000 -3.52183 i
+2.04000 -3.52183 i
+2.07000 -3.52183 i
+2.10000 -3.52183 i
+2.13000 -3.52183 i
+2.16000 -3.52183 i
+2.19000 -3.52183 i
+2.22000 -3.52183 i
+2.25000 -3.52183 i
+2.28000 -3.52183 i
+2.31000 -3.52183 i
+2.34000 -3.52183 i
+2.37000 -3.52183 i
+2.40000 -3.52183 i
+2.43000 -3.52183 i
+2.46000 -3.52183 i
+2.49000 -3.52183 i
+2.52000 -3.52183 i
+2.55000 -3.52183 i
+2.58000 -3.52183 i
+2.61000 -3.52183 i
+2.64000 -3.52183 i
+2.67000 -3.52183 i
+2.70000 -3.52183 i
+2.73000 -3.52183 i
+2.76000 -3.52183 i
+2.79000 -3.52183 i
+2.82000 -3.52183 i
+2.85000 -3.52183 i
+2.88000 -3.52183 i
+2.91000 -3.52183 i
+2.94000 -3.52183 i
+2.97000 -3.52183 i
+3.00000 -3.52183 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.gnuplot
new file mode 100644
index 0000000000..c7453b7b81
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/47.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),--180/3.1415957*atan(0.02*10**t)+-180/3.1415957*atan((3*0.02)*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.table
new file mode 100644
index 0000000000..a5133f1c87
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/47.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -2.28787 i
+0.06122 -2.63276 i
+0.12245 -3.02908 i
+0.18367 -3.48423 i
+0.24490 -4.00650 i
+0.30612 -4.60510 i
+0.36735 -5.29021 i
+0.42857 -6.07279 i
+0.48980 -6.96446 i
+0.55102 -7.97703 i
+0.61224 -9.12187 i
+0.67347 -10.40886 i
+0.73469 -11.84495 i
+0.79592 -13.43206 i
+0.85714 -15.16449 i
+0.91837 -17.02587 i
+0.97959 -18.98602 i
+1.04082 -20.99837 i
+1.10204 -22.99897 i
+1.16327 -24.90799 i
+1.22449 -26.63446 i
+1.28571 -28.08416 i
+1.34694 -29.16976 i
+1.40816 -29.82120 i
+1.46939 -29.99467 i
+1.53061 -29.67829 i
+1.59184 -28.89366 i
+1.65306 -27.69305 i
+1.71429 -26.15261 i
+1.77551 -24.36280 i
+1.83673 -22.41787 i
+1.89796 -20.40619 i
+1.95918 -18.40330 i
+2.02041 -16.46806 i
+2.08163 -14.64204 i
+2.14286 -12.95108 i
+2.20408 -11.40807 i
+2.26531 -10.01618 i
+2.32653 -8.77176 i
+2.38776 -7.66684 i
+2.44898 -6.69094 i
+2.51020 -5.83249 i
+2.57143 -5.07967 i
+2.63265 -4.42104 i
+2.69388 -3.84584 i
+2.75510 -3.34417 i
+2.81633 -2.90709 i
+2.87755 -2.52658 i
+2.93878 -2.19550 i
+3.00000 -1.90756 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.gnuplot
new file mode 100644
index 0000000000..6ae3fe97db
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/48.table"; set format "%.5f"
+set samples 201; set parametric; plot [t=0:3] log10(10**t),-(t<log10(1/(0.02))? 0:-90)+(t<log10(1/((3*0.02)))? 0:-90)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.table
new file mode 100644
index 0000000000..0b9dcfa0f6
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/48.table
@@ -0,0 +1,205 @@
+
+#Curve 0 of 1, 201 points
+#x y type
+0.00000 0.00000 i
+0.01500 0.00000 i
+0.03000 0.00000 i
+0.04500 0.00000 i
+0.06000 0.00000 i
+0.07500 0.00000 i
+0.09000 0.00000 i
+0.10500 0.00000 i
+0.12000 0.00000 i
+0.13500 0.00000 i
+0.15000 0.00000 i
+0.16500 0.00000 i
+0.18000 0.00000 i
+0.19500 0.00000 i
+0.21000 0.00000 i
+0.22500 0.00000 i
+0.24000 0.00000 i
+0.25500 0.00000 i
+0.27000 0.00000 i
+0.28500 0.00000 i
+0.30000 0.00000 i
+0.31500 0.00000 i
+0.33000 0.00000 i
+0.34500 0.00000 i
+0.36000 0.00000 i
+0.37500 0.00000 i
+0.39000 0.00000 i
+0.40500 0.00000 i
+0.42000 0.00000 i
+0.43500 0.00000 i
+0.45000 0.00000 i
+0.46500 0.00000 i
+0.48000 0.00000 i
+0.49500 0.00000 i
+0.51000 0.00000 i
+0.52500 0.00000 i
+0.54000 0.00000 i
+0.55500 0.00000 i
+0.57000 0.00000 i
+0.58500 0.00000 i
+0.60000 0.00000 i
+0.61500 0.00000 i
+0.63000 0.00000 i
+0.64500 0.00000 i
+0.66000 0.00000 i
+0.67500 0.00000 i
+0.69000 0.00000 i
+0.70500 0.00000 i
+0.72000 0.00000 i
+0.73500 0.00000 i
+0.75000 0.00000 i
+0.76500 0.00000 i
+0.78000 0.00000 i
+0.79500 0.00000 i
+0.81000 0.00000 i
+0.82500 0.00000 i
+0.84000 0.00000 i
+0.85500 0.00000 i
+0.87000 0.00000 i
+0.88500 0.00000 i
+0.90000 0.00000 i
+0.91500 0.00000 i
+0.93000 0.00000 i
+0.94500 0.00000 i
+0.96000 0.00000 i
+0.97500 0.00000 i
+0.99000 0.00000 i
+1.00500 0.00000 i
+1.02000 0.00000 i
+1.03500 0.00000 i
+1.05000 0.00000 i
+1.06500 0.00000 i
+1.08000 0.00000 i
+1.09500 0.00000 i
+1.11000 0.00000 i
+1.12500 0.00000 i
+1.14000 0.00000 i
+1.15500 0.00000 i
+1.17000 0.00000 i
+1.18500 0.00000 i
+1.20000 0.00000 i
+1.21500 0.00000 i
+1.23000 -90.00000 i
+1.24500 -90.00000 i
+1.26000 -90.00000 i
+1.27500 -90.00000 i
+1.29000 -90.00000 i
+1.30500 -90.00000 i
+1.32000 -90.00000 i
+1.33500 -90.00000 i
+1.35000 -90.00000 i
+1.36500 -90.00000 i
+1.38000 -90.00000 i
+1.39500 -90.00000 i
+1.41000 -90.00000 i
+1.42500 -90.00000 i
+1.44000 -90.00000 i
+1.45500 -90.00000 i
+1.47000 -90.00000 i
+1.48500 -90.00000 i
+1.50000 -90.00000 i
+1.51500 -90.00000 i
+1.53000 -90.00000 i
+1.54500 -90.00000 i
+1.56000 -90.00000 i
+1.57500 -90.00000 i
+1.59000 -90.00000 i
+1.60500 -90.00000 i
+1.62000 -90.00000 i
+1.63500 -90.00000 i
+1.65000 -90.00000 i
+1.66500 -90.00000 i
+1.68000 -90.00000 i
+1.69500 -90.00000 i
+1.71000 0.00000 i
+1.72500 0.00000 i
+1.74000 0.00000 i
+1.75500 0.00000 i
+1.77000 0.00000 i
+1.78500 0.00000 i
+1.80000 0.00000 i
+1.81500 0.00000 i
+1.83000 0.00000 i
+1.84500 0.00000 i
+1.86000 0.00000 i
+1.87500 0.00000 i
+1.89000 0.00000 i
+1.90500 0.00000 i
+1.92000 0.00000 i
+1.93500 0.00000 i
+1.95000 0.00000 i
+1.96500 0.00000 i
+1.98000 0.00000 i
+1.99500 0.00000 i
+2.01000 0.00000 i
+2.02500 0.00000 i
+2.04000 0.00000 i
+2.05500 0.00000 i
+2.07000 0.00000 i
+2.08500 0.00000 i
+2.10000 0.00000 i
+2.11500 0.00000 i
+2.13000 0.00000 i
+2.14500 0.00000 i
+2.16000 0.00000 i
+2.17500 0.00000 i
+2.19000 0.00000 i
+2.20500 0.00000 i
+2.22000 0.00000 i
+2.23500 0.00000 i
+2.25000 0.00000 i
+2.26500 0.00000 i
+2.28000 0.00000 i
+2.29500 0.00000 i
+2.31000 0.00000 i
+2.32500 0.00000 i
+2.34000 0.00000 i
+2.35500 0.00000 i
+2.37000 0.00000 i
+2.38500 0.00000 i
+2.40000 0.00000 i
+2.41500 0.00000 i
+2.43000 0.00000 i
+2.44500 0.00000 i
+2.46000 0.00000 i
+2.47500 0.00000 i
+2.49000 0.00000 i
+2.50500 0.00000 i
+2.52000 0.00000 i
+2.53500 0.00000 i
+2.55000 0.00000 i
+2.56500 0.00000 i
+2.58000 0.00000 i
+2.59500 0.00000 i
+2.61000 0.00000 i
+2.62500 0.00000 i
+2.64000 0.00000 i
+2.65500 0.00000 i
+2.67000 0.00000 i
+2.68500 0.00000 i
+2.70000 0.00000 i
+2.71500 0.00000 i
+2.73000 0.00000 i
+2.74500 0.00000 i
+2.76000 0.00000 i
+2.77500 0.00000 i
+2.79000 0.00000 i
+2.80500 0.00000 i
+2.82000 0.00000 i
+2.83500 0.00000 i
+2.85000 0.00000 i
+2.86500 0.00000 i
+2.88000 0.00000 i
+2.89500 0.00000 i
+2.91000 0.00000 i
+2.92500 0.00000 i
+2.94000 0.00000 i
+2.95500 0.00000 i
+2.97000 0.00000 i
+2.98500 0.00000 i
+3.00000 0.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.gnuplot
new file mode 100644
index 0000000000..b29a445122
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/49.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(1/(10**t)))+20*log10(2/0.08)-20*log10(abs(1/sqrt(1+(0.08*10**t)**2)))-20*log10(abs(1/sqrt(1+(0.02*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.table
new file mode 100644
index 0000000000..af4df2fcd8
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/49.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 27.98824 i
+0.06122 26.77331 i
+0.12245 25.56145 i
+0.18367 24.35366 i
+0.24490 23.15122 i
+0.30612 21.95581 i
+0.36735 20.76961 i
+0.42857 19.59542 i
+0.48980 18.43683 i
+0.55102 17.29837 i
+0.61224 16.18566 i
+0.67347 15.10555 i
+0.73469 14.06622 i
+0.79592 13.07703 i
+0.85714 12.14837 i
+0.91837 11.29111 i
+0.97959 10.51597 i
+1.04082 9.83270 i
+1.10204 9.24929 i
+1.16327 8.77149 i
+1.22449 8.40274 i
+1.28571 8.14454 i
+1.34694 7.99714 i
+1.40816 7.96034 i
+1.46939 8.03405 i
+1.53061 8.21844 i
+1.59184 8.51364 i
+1.65306 8.91905 i
+1.71429 9.43261 i
+1.77551 10.05013 i
+1.83673 10.76507 i
+1.89796 11.56878 i
+1.95918 12.45110 i
+2.02041 13.40118 i
+2.08163 14.40822 i
+2.14286 15.46216 i
+2.20408 16.55400 i
+2.26531 17.67601 i
+2.32653 18.82176 i
+2.38776 19.98601 i
+2.44898 21.16457 i
+2.51020 22.35412 i
+2.57143 23.55210 i
+2.63265 24.75649 i
+2.69388 25.96576 i
+2.75510 27.17874 i
+2.81633 28.39453 i
+2.87755 29.61245 i
+2.93878 30.83198 i
+3.00000 32.05272 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.gnuplot
new file mode 100644
index 0000000000..a633e26716
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/5.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=-0.30106:-0.30106] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.table
new file mode 100644
index 0000000000..d938e21aa9
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/5.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-0.30106 9.44581 i
+-0.30106 9.44581 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.gnuplot
new file mode 100644
index 0000000000..e4c30a6c5b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/50.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),20*log10(abs(1/(10**t)))+20*log10(2/0.08)-(t<log10(1/(0.08))?20*log10(1):+20*log10(1/(0.08))-20*log10(10**t))-(t<log10(1/(0.02))?20*log10(1):+20*log10(1/(0.02))-20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.table
new file mode 100644
index 0000000000..375929bfb5
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/50.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 27.95880 i
+0.06122 26.73431 i
+0.12245 25.50982 i
+0.18367 24.28533 i
+0.24490 23.06084 i
+0.30612 21.83635 i
+0.36735 20.61186 i
+0.42857 19.38737 i
+0.48980 18.16288 i
+0.55102 16.93839 i
+0.61224 15.71390 i
+0.67347 14.48941 i
+0.73469 13.26492 i
+0.79592 12.04043 i
+0.85714 10.81594 i
+0.91837 9.59145 i
+0.97959 8.36696 i
+1.04082 7.14247 i
+1.10204 6.02060 i
+1.16327 6.02060 i
+1.22449 6.02060 i
+1.28571 6.02060 i
+1.34694 6.02060 i
+1.40816 6.02060 i
+1.46939 6.02060 i
+1.53061 6.02060 i
+1.59184 6.02060 i
+1.65306 6.02060 i
+1.71429 6.32691 i
+1.77551 7.55140 i
+1.83673 8.77589 i
+1.89796 10.00038 i
+1.95918 11.22487 i
+2.02041 12.44936 i
+2.08163 13.67385 i
+2.14286 14.89834 i
+2.20408 16.12283 i
+2.26531 17.34732 i
+2.32653 18.57181 i
+2.38776 19.79630 i
+2.44898 21.02079 i
+2.51020 22.24528 i
+2.57143 23.46977 i
+2.63265 24.69426 i
+2.69388 25.91875 i
+2.75510 27.14324 i
+2.81633 28.36773 i
+2.87755 29.59222 i
+2.93878 30.81671 i
+3.00000 32.04120 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.gnuplot
new file mode 100644
index 0000000000..b444139470
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/51.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=0:3] log10(10**t),-90--180/3.1415957*atan(0.08*10**t)--180/3.1415957*atan(0.02*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.table
new file mode 100644
index 0000000000..07c56f0b47
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/51.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+0.00000 -84.28032 i
+0.06122 -83.41808 i
+0.12245 -82.42723 i
+0.18367 -81.28929 i
+0.24490 -79.98351 i
+0.30612 -78.48674 i
+0.36735 -76.77347 i
+0.42857 -74.81599 i
+0.48980 -72.58480 i
+0.55102 -70.04942 i
+0.61224 -67.17960 i
+0.67347 -63.94718 i
+0.73469 -60.32848 i
+0.79592 -56.30732 i
+0.85714 -51.87818 i
+0.91837 -47.04906 i
+0.97959 -41.84315 i
+1.04082 -36.29851 i
+1.10204 -30.46527 i
+1.16327 -24.40068 i
+1.22449 -18.16313 i
+1.28571 -11.80694 i
+1.34694 -5.37941 i
+1.40816 1.07887 i
+1.46939 7.53108 i
+1.53061 13.93959 i
+1.59184 20.26180 i
+1.65306 26.44792 i
+1.71429 32.44181 i
+1.77551 38.18480 i
+1.83673 43.62138 i
+1.89796 48.70499 i
+1.95918 53.40234 i
+2.02041 57.69540 i
+2.08163 61.58095 i
+2.14286 65.06841 i
+2.20408 68.17683 i
+2.26531 70.93168 i
+2.32653 73.36206 i
+2.38776 75.49848 i
+2.44898 77.37121 i
+2.51020 79.00919 i
+2.57143 80.43946 i
+2.63265 81.68673 i
+2.69388 82.77336 i
+2.75510 83.71931 i
+2.81633 84.54234 i
+2.87755 85.25811 i
+2.93878 85.88039 i
+3.00000 86.42126 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.gnuplot
new file mode 100644
index 0000000000..7530c911f7
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/52.table"; set format "%.5f"
+set samples 201; set parametric; plot [t=0:3] log10(10**t),-90-(t<log10(1/(0.08))? 0:-90)-(t<log10(1/(0.02))? 0:-90)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.table
new file mode 100644
index 0000000000..cc537c62f1
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/52.table
@@ -0,0 +1,205 @@
+
+#Curve 0 of 1, 201 points
+#x y type
+0.00000 -90.00000 i
+0.01500 -90.00000 i
+0.03000 -90.00000 i
+0.04500 -90.00000 i
+0.06000 -90.00000 i
+0.07500 -90.00000 i
+0.09000 -90.00000 i
+0.10500 -90.00000 i
+0.12000 -90.00000 i
+0.13500 -90.00000 i
+0.15000 -90.00000 i
+0.16500 -90.00000 i
+0.18000 -90.00000 i
+0.19500 -90.00000 i
+0.21000 -90.00000 i
+0.22500 -90.00000 i
+0.24000 -90.00000 i
+0.25500 -90.00000 i
+0.27000 -90.00000 i
+0.28500 -90.00000 i
+0.30000 -90.00000 i
+0.31500 -90.00000 i
+0.33000 -90.00000 i
+0.34500 -90.00000 i
+0.36000 -90.00000 i
+0.37500 -90.00000 i
+0.39000 -90.00000 i
+0.40500 -90.00000 i
+0.42000 -90.00000 i
+0.43500 -90.00000 i
+0.45000 -90.00000 i
+0.46500 -90.00000 i
+0.48000 -90.00000 i
+0.49500 -90.00000 i
+0.51000 -90.00000 i
+0.52500 -90.00000 i
+0.54000 -90.00000 i
+0.55500 -90.00000 i
+0.57000 -90.00000 i
+0.58500 -90.00000 i
+0.60000 -90.00000 i
+0.61500 -90.00000 i
+0.63000 -90.00000 i
+0.64500 -90.00000 i
+0.66000 -90.00000 i
+0.67500 -90.00000 i
+0.69000 -90.00000 i
+0.70500 -90.00000 i
+0.72000 -90.00000 i
+0.73500 -90.00000 i
+0.75000 -90.00000 i
+0.76500 -90.00000 i
+0.78000 -90.00000 i
+0.79500 -90.00000 i
+0.81000 -90.00000 i
+0.82500 -90.00000 i
+0.84000 -90.00000 i
+0.85500 -90.00000 i
+0.87000 -90.00000 i
+0.88500 -90.00000 i
+0.90000 -90.00000 i
+0.91500 -90.00000 i
+0.93000 -90.00000 i
+0.94500 -90.00000 i
+0.96000 -90.00000 i
+0.97500 -90.00000 i
+0.99000 -90.00000 i
+1.00500 -90.00000 i
+1.02000 -90.00000 i
+1.03500 -90.00000 i
+1.05000 -90.00000 i
+1.06500 -90.00000 i
+1.08000 -90.00000 i
+1.09500 -90.00000 i
+1.11000 0.00000 i
+1.12500 0.00000 i
+1.14000 0.00000 i
+1.15500 0.00000 i
+1.17000 0.00000 i
+1.18500 0.00000 i
+1.20000 0.00000 i
+1.21500 0.00000 i
+1.23000 0.00000 i
+1.24500 0.00000 i
+1.26000 0.00000 i
+1.27500 0.00000 i
+1.29000 0.00000 i
+1.30500 0.00000 i
+1.32000 0.00000 i
+1.33500 0.00000 i
+1.35000 0.00000 i
+1.36500 0.00000 i
+1.38000 0.00000 i
+1.39500 0.00000 i
+1.41000 0.00000 i
+1.42500 0.00000 i
+1.44000 0.00000 i
+1.45500 0.00000 i
+1.47000 0.00000 i
+1.48500 0.00000 i
+1.50000 0.00000 i
+1.51500 0.00000 i
+1.53000 0.00000 i
+1.54500 0.00000 i
+1.56000 0.00000 i
+1.57500 0.00000 i
+1.59000 0.00000 i
+1.60500 0.00000 i
+1.62000 0.00000 i
+1.63500 0.00000 i
+1.65000 0.00000 i
+1.66500 0.00000 i
+1.68000 0.00000 i
+1.69500 0.00000 i
+1.71000 90.00000 i
+1.72500 90.00000 i
+1.74000 90.00000 i
+1.75500 90.00000 i
+1.77000 90.00000 i
+1.78500 90.00000 i
+1.80000 90.00000 i
+1.81500 90.00000 i
+1.83000 90.00000 i
+1.84500 90.00000 i
+1.86000 90.00000 i
+1.87500 90.00000 i
+1.89000 90.00000 i
+1.90500 90.00000 i
+1.92000 90.00000 i
+1.93500 90.00000 i
+1.95000 90.00000 i
+1.96500 90.00000 i
+1.98000 90.00000 i
+1.99500 90.00000 i
+2.01000 90.00000 i
+2.02500 90.00000 i
+2.04000 90.00000 i
+2.05500 90.00000 i
+2.07000 90.00000 i
+2.08500 90.00000 i
+2.10000 90.00000 i
+2.11500 90.00000 i
+2.13000 90.00000 i
+2.14500 90.00000 i
+2.16000 90.00000 i
+2.17500 90.00000 i
+2.19000 90.00000 i
+2.20500 90.00000 i
+2.22000 90.00000 i
+2.23500 90.00000 i
+2.25000 90.00000 i
+2.26500 90.00000 i
+2.28000 90.00000 i
+2.29500 90.00000 i
+2.31000 90.00000 i
+2.32500 90.00000 i
+2.34000 90.00000 i
+2.35500 90.00000 i
+2.37000 90.00000 i
+2.38500 90.00000 i
+2.40000 90.00000 i
+2.41500 90.00000 i
+2.43000 90.00000 i
+2.44500 90.00000 i
+2.46000 90.00000 i
+2.47500 90.00000 i
+2.49000 90.00000 i
+2.50500 90.00000 i
+2.52000 90.00000 i
+2.53500 90.00000 i
+2.55000 90.00000 i
+2.56500 90.00000 i
+2.58000 90.00000 i
+2.59500 90.00000 i
+2.61000 90.00000 i
+2.62500 90.00000 i
+2.64000 90.00000 i
+2.65500 90.00000 i
+2.67000 90.00000 i
+2.68500 90.00000 i
+2.70000 90.00000 i
+2.71500 90.00000 i
+2.73000 90.00000 i
+2.74500 90.00000 i
+2.76000 90.00000 i
+2.77500 90.00000 i
+2.79000 90.00000 i
+2.80500 90.00000 i
+2.82000 90.00000 i
+2.83500 90.00000 i
+2.85000 90.00000 i
+2.86500 90.00000 i
+2.88000 90.00000 i
+2.89500 90.00000 i
+2.91000 90.00000 i
+2.92500 90.00000 i
+2.94000 90.00000 i
+2.95500 90.00000 i
+2.97000 90.00000 i
+2.98500 90.00000 i
+3.00000 90.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.gnuplot
new file mode 100644
index 0000000000..2f94a143bb
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/53.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-1.5:1.5] log10(10**t),(t<log10(1/(0.5))?20*log10(8):+20*log10(8/(0.5))-20*log10(10**t))+20*log10(abs(1/(10**t)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.table
new file mode 100644
index 0000000000..d81c3ba6b8
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/53.table
@@ -0,0 +1,104 @@
+
+#Curve 0 of 1, 100 points
+#x y type
+-1.50000 48.06180 i
+-1.46970 47.45574 i
+-1.43939 46.84968 i
+-1.40909 46.24362 i
+-1.37879 45.63756 i
+-1.34848 45.03150 i
+-1.31818 44.42544 i
+-1.28788 43.81938 i
+-1.25758 43.21331 i
+-1.22727 42.60725 i
+-1.19697 42.00119 i
+-1.16667 41.39513 i
+-1.13636 40.78907 i
+-1.10606 40.18301 i
+-1.07576 39.57695 i
+-1.04545 38.97089 i
+-1.01515 38.36483 i
+-0.98485 37.75877 i
+-0.95455 37.15271 i
+-0.92424 36.54665 i
+-0.89394 35.94059 i
+-0.86364 35.33453 i
+-0.83333 34.72847 i
+-0.80303 34.12241 i
+-0.77273 33.51635 i
+-0.74242 32.91028 i
+-0.71212 32.30422 i
+-0.68182 31.69816 i
+-0.65152 31.09210 i
+-0.62121 30.48604 i
+-0.59091 29.87998 i
+-0.56061 29.27392 i
+-0.53030 28.66786 i
+-0.50000 28.06180 i
+-0.46970 27.45574 i
+-0.43939 26.84968 i
+-0.40909 26.24362 i
+-0.37879 25.63756 i
+-0.34848 25.03150 i
+-0.31818 24.42544 i
+-0.28788 23.81938 i
+-0.25758 23.21331 i
+-0.22727 22.60725 i
+-0.19697 22.00119 i
+-0.16667 21.39513 i
+-0.13636 20.78907 i
+-0.10606 20.18301 i
+-0.07576 19.57695 i
+-0.04545 18.97089 i
+-0.01515 18.36483 i
+0.01515 17.75877 i
+0.04545 17.15271 i
+0.07576 16.54665 i
+0.10606 15.94059 i
+0.13636 15.33453 i
+0.16667 14.72847 i
+0.19697 14.12241 i
+0.22727 13.51635 i
+0.25758 12.91028 i
+0.28788 12.30422 i
+0.31818 11.35513 i
+0.34848 10.14301 i
+0.37879 8.93088 i
+0.40909 7.71876 i
+0.43939 6.50664 i
+0.46970 5.29452 i
+0.50000 4.08240 i
+0.53030 2.87028 i
+0.56061 1.65816 i
+0.59091 0.44604 i
+0.62121 -0.76609 i
+0.65152 -1.97821 i
+0.68182 -3.19033 i
+0.71212 -4.40245 i
+0.74242 -5.61457 i
+0.77273 -6.82669 i
+0.80303 -8.03881 i
+0.83333 -9.25093 i
+0.86364 -10.46305 i
+0.89394 -11.67518 i
+0.92424 -12.88730 i
+0.95455 -14.09942 i
+0.98485 -15.31154 i
+1.01515 -16.52366 i
+1.04545 -17.73578 i
+1.07576 -18.94790 i
+1.10606 -20.16002 i
+1.13636 -21.37215 i
+1.16667 -22.58427 i
+1.19697 -23.79639 i
+1.22727 -25.00851 i
+1.25758 -26.22063 i
+1.28788 -27.43275 i
+1.31818 -28.64487 i
+1.34848 -29.85699 i
+1.37879 -31.06912 i
+1.40909 -32.28124 i
+1.43939 -33.49336 i
+1.46970 -34.70548 i
+1.50000 -35.91760 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.gnuplot
new file mode 100644
index 0000000000..a0d61aeee6
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/54.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-1.5:1.5] log10(10**t),20*log10(abs(8/sqrt(1+(0.5*10**t)**2)))+20*log10(abs(1/(10**t)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.table
new file mode 100644
index 0000000000..97d19af390
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/54.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-1.50000 48.06071 i
+-1.43878 46.83587 i
+-1.37755 45.61091 i
+-1.31633 44.38580 i
+-1.25510 43.16049 i
+-1.19388 41.93491 i
+-1.13265 40.70897 i
+-1.07143 39.48256 i
+-1.01020 38.25553 i
+-0.94898 37.02768 i
+-0.88776 35.79873 i
+-0.82653 34.56834 i
+-0.76531 33.33604 i
+-0.70408 32.10122 i
+-0.64286 30.86307 i
+-0.58163 29.62053 i
+-0.52041 28.37224 i
+-0.45918 27.11639 i
+-0.39796 25.85066 i
+-0.33673 24.57211 i
+-0.27551 23.27697 i
+-0.21429 21.96056 i
+-0.15306 20.61713 i
+-0.09184 19.23982 i
+-0.03061 17.82068 i
+0.03061 16.35091 i
+0.09184 14.82123 i
+0.15306 13.22262 i
+0.21429 11.54717 i
+0.27551 9.78900 i
+0.33673 7.94510 i
+0.39796 6.01574 i
+0.45918 4.00447 i
+0.52041 1.91755 i
+0.58163 -0.23685 i
+0.64286 -2.44960 i
+0.70408 -4.71149 i
+0.76531 -7.01381 i
+0.82653 -9.34878 i
+0.88776 -11.70975 i
+0.94898 -14.09113 i
+1.01020 -16.48842 i
+1.07143 -18.89800 i
+1.13265 -21.31702 i
+1.19388 -23.74326 i
+1.25510 -26.17501 i
+1.31633 -28.61095 i
+1.37755 -31.05007 i
+1.43878 -33.49159 i
+1.50000 -35.93494 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.gnuplot
new file mode 100644
index 0000000000..20e8769dc9
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/55.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-2:2] log10(10**t),(t<log10(1/(0.5))? 0:-90)+-90
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.table
new file mode 100644
index 0000000000..e61390fb1a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/55.table
@@ -0,0 +1,104 @@
+
+#Curve 0 of 1, 100 points
+#x y type
+-2.00000 -90.00000 i
+-1.95960 -90.00000 i
+-1.91919 -90.00000 i
+-1.87879 -90.00000 i
+-1.83838 -90.00000 i
+-1.79798 -90.00000 i
+-1.75758 -90.00000 i
+-1.71717 -90.00000 i
+-1.67677 -90.00000 i
+-1.63636 -90.00000 i
+-1.59596 -90.00000 i
+-1.55556 -90.00000 i
+-1.51515 -90.00000 i
+-1.47475 -90.00000 i
+-1.43434 -90.00000 i
+-1.39394 -90.00000 i
+-1.35354 -90.00000 i
+-1.31313 -90.00000 i
+-1.27273 -90.00000 i
+-1.23232 -90.00000 i
+-1.19192 -90.00000 i
+-1.15152 -90.00000 i
+-1.11111 -90.00000 i
+-1.07071 -90.00000 i
+-1.03030 -90.00000 i
+-0.98990 -90.00000 i
+-0.94949 -90.00000 i
+-0.90909 -90.00000 i
+-0.86869 -90.00000 i
+-0.82828 -90.00000 i
+-0.78788 -90.00000 i
+-0.74747 -90.00000 i
+-0.70707 -90.00000 i
+-0.66667 -90.00000 i
+-0.62626 -90.00000 i
+-0.58586 -90.00000 i
+-0.54545 -90.00000 i
+-0.50505 -90.00000 i
+-0.46465 -90.00000 i
+-0.42424 -90.00000 i
+-0.38384 -90.00000 i
+-0.34343 -90.00000 i
+-0.30303 -90.00000 i
+-0.26263 -90.00000 i
+-0.22222 -90.00000 i
+-0.18182 -90.00000 i
+-0.14141 -90.00000 i
+-0.10101 -90.00000 i
+-0.06061 -90.00000 i
+-0.02020 -90.00000 i
+0.02020 -90.00000 i
+0.06061 -90.00000 i
+0.10101 -90.00000 i
+0.14141 -90.00000 i
+0.18182 -90.00000 i
+0.22222 -90.00000 i
+0.26263 -90.00000 i
+0.30303 -180.00000 i
+0.34343 -180.00000 i
+0.38384 -180.00000 i
+0.42424 -180.00000 i
+0.46465 -180.00000 i
+0.50505 -180.00000 i
+0.54545 -180.00000 i
+0.58586 -180.00000 i
+0.62626 -180.00000 i
+0.66667 -180.00000 i
+0.70707 -180.00000 i
+0.74747 -180.00000 i
+0.78788 -180.00000 i
+0.82828 -180.00000 i
+0.86869 -180.00000 i
+0.90909 -180.00000 i
+0.94949 -180.00000 i
+0.98990 -180.00000 i
+1.03030 -180.00000 i
+1.07071 -180.00000 i
+1.11111 -180.00000 i
+1.15152 -180.00000 i
+1.19192 -180.00000 i
+1.23232 -180.00000 i
+1.27273 -180.00000 i
+1.31313 -180.00000 i
+1.35354 -180.00000 i
+1.39394 -180.00000 i
+1.43434 -180.00000 i
+1.47475 -180.00000 i
+1.51515 -180.00000 i
+1.55556 -180.00000 i
+1.59596 -180.00000 i
+1.63636 -180.00000 i
+1.67677 -180.00000 i
+1.71717 -180.00000 i
+1.75758 -180.00000 i
+1.79798 -180.00000 i
+1.83838 -180.00000 i
+1.87879 -180.00000 i
+1.91919 -180.00000 i
+1.95960 -180.00000 i
+2.00000 -180.00000 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.gnuplot
new file mode 100644
index 0000000000..3a5de03aed
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/56.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-2:2] log10(10**t),-180/3.1415957*atan(0.5*10**t)+-90
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.table
new file mode 100644
index 0000000000..e7a3a63e40
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/56.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-2.00000 -90.28648 i
+-1.91837 -90.34572 i
+-1.83673 -90.41721 i
+-1.75510 -90.50348 i
+-1.67347 -90.60758 i
+-1.59184 -90.73322 i
+-1.51020 -90.88482 i
+-1.42857 -91.06775 i
+-1.34694 -91.28849 i
+-1.26531 -91.55482 i
+-1.18367 -91.87613 i
+-1.10204 -92.26373 i
+-1.02041 -92.73121 i
+-0.93878 -93.29486 i
+-0.85714 -93.97422 i
+-0.77551 -94.79256 i
+-0.69388 -95.77749 i
+-0.61224 -96.96150 i
+-0.53061 -98.38235 i
+-0.44898 -100.08316 i
+-0.36735 -102.11178 i
+-0.28571 -104.51911 i
+-0.20408 -107.35545 i
+-0.12245 -110.66425 i
+-0.04082 -114.47259 i
+0.04082 -118.77867 i
+0.12245 -123.53860 i
+0.20408 -128.65730 i
+0.28571 -133.98988 i
+0.36735 -139.35759 i
+0.44898 -144.57585 i
+0.53061 -149.48441 i
+0.61224 -153.96856 i
+0.69388 -157.96587 i
+0.77551 -161.46020 i
+0.85714 -164.46936 i
+0.93878 -167.03197 i
+1.02041 -169.19667 i
+1.10204 -171.01465 i
+1.18367 -172.53522 i
+1.26531 -173.80339 i
+1.34694 -174.85893 i
+1.42857 -175.73630 i
+1.51020 -176.46485 i
+1.59184 -177.06945 i
+1.67347 -177.57094 i
+1.75510 -177.98678 i
+1.83673 -178.33153 i
+1.91837 -178.61730 i
+2.00000 -178.85415 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.gnuplot
new file mode 100644
index 0000000000..c8ff7bc60a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/57.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-1:4] log10(10**t),(t<log10(-)?20*log10(5):+20*log10(5)+40*log10(-)-40*log10(10**t))(t<log10(1/(0.01))?20*log10(1):+20*log10(1/(0.01))-20*log10(10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.table
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/57.table
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.gnuplot
new file mode 100644
index 0000000000..42be05d978
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/58.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-1:4] log10(10**t),20*log10(abs(5/sqrt((1-(10**t/15)**2)**2+(2*0.3*(10**t/15))**2)))-20*log10(abs(1/sqrt(1+(0.01*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.table
new file mode 100644
index 0000000000..4f7454b200
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/58.table
@@ -0,0 +1,104 @@
+
+#Curve 0 of 1, 100 points
+#x y type
+-1.00000 13.97972 i
+-0.94949 13.97981 i
+-0.89899 13.97991 i
+-0.84848 13.98004 i
+-0.79798 13.98021 i
+-0.74747 13.98043 i
+-0.69697 13.98070 i
+-0.64646 13.98103 i
+-0.59596 13.98146 i
+-0.54545 13.98200 i
+-0.49495 13.98268 i
+-0.44444 13.98355 i
+-0.39394 13.98463 i
+-0.34343 13.98600 i
+-0.29293 13.98773 i
+-0.24242 13.98991 i
+-0.19192 13.99266 i
+-0.14141 13.99614 i
+-0.09091 14.00053 i
+-0.04040 14.00606 i
+0.01010 14.01305 i
+0.06061 14.02187 i
+0.11111 14.03301 i
+0.16162 14.04708 i
+0.21212 14.06484 i
+0.26263 14.08728 i
+0.31313 14.11564 i
+0.36364 14.15148 i
+0.41414 14.19682 i
+0.46465 14.25417 i
+0.51515 14.32680 i
+0.56566 14.41881 i
+0.61616 14.53552 i
+0.66667 14.68367 i
+0.71717 14.87193 i
+0.76768 15.11134 i
+0.81818 15.41583 i
+0.86869 15.80238 i
+0.91919 16.29006 i
+0.96970 16.89494 i
+1.02020 17.61234 i
+1.07071 18.36395 i
+1.12121 18.87639 i
+1.17172 18.59369 i
+1.22222 17.09820 i
+1.27273 14.70431 i
+1.32323 11.99763 i
+1.37374 9.30320 i
+1.42424 6.72511 i
+1.47475 4.27856 i
+1.52525 1.95275 i
+1.57576 -0.26745 i
+1.62626 -2.39511 i
+1.67677 -4.43981 i
+1.72727 -6.40789 i
+1.77778 -8.30307 i
+1.82828 -10.12718 i
+1.87879 -11.88097 i
+1.92929 -13.56477 i
+1.97980 -15.17911 i
+2.03030 -16.72523 i
+2.08081 -18.20533 i
+2.13131 -19.62272 i
+2.18182 -20.98171 i
+2.23232 -22.28744 i
+2.28283 -23.54550 i
+2.33333 -24.76171 i
+2.38384 -25.94175 i
+2.43434 -27.09100 i
+2.48485 -28.21436 i
+2.53535 -29.31620 i
+2.58586 -30.40029 i
+2.63636 -31.46987 i
+2.68687 -32.52765 i
+2.73737 -33.57588 i
+2.78788 -34.61642 i
+2.83838 -35.65079 i
+2.88889 -36.68021 i
+2.93939 -37.70567 i
+2.98990 -38.72799 i
+3.04040 -39.74779 i
+3.09091 -40.76560 i
+3.14141 -41.78181 i
+3.19192 -42.79676 i
+3.24242 -43.81071 i
+3.29293 -44.82386 i
+3.34343 -45.83638 i
+3.39394 -46.84840 i
+3.44444 -47.86003 i
+3.49495 -48.87133 i
+3.54545 -49.88239 i
+3.59596 -50.89325 i
+3.64646 -51.90395 i
+3.69697 -52.91453 i
+3.74747 -53.92500 i
+3.79798 -54.93540 i
+3.84848 -55.94574 i
+3.89899 -56.95603 i
+3.94949 -57.96628 i
+4.00000 -58.97650 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.gnuplot
new file mode 100644
index 0000000000..9327d31b1d
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/59.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-1:4] log10(10**t),(t<log10(-)? 0:-180)(t<log10(1/(0.01))? 0:-90)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.table
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/59.table
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.gnuplot
new file mode 100644
index 0000000000..1167cc1aa2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/6.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.0:0.0] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.table
new file mode 100644
index 0000000000..4e4cb9337b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/6.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+0.00000 9.16816 i
+0.00000 9.16816 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.gnuplot
new file mode 100644
index 0000000000..bf7141562a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/60.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-1:4] log10(10**t),180/3.1415957*(atan((15**2-(10**t)**2)/(2*0.3*15*10**t))-3.1415957/2)--180/3.1415957*atan(0.01*10**t)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.table
new file mode 100644
index 0000000000..fe95f283aa
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/60.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+-1.00000 -0.17198 i
+-0.89796 -0.21752 i
+-0.79592 -0.27512 i
+-0.69388 -0.34799 i
+-0.59184 -0.44019 i
+-0.48980 -0.55687 i
+-0.38776 -0.70457 i
+-0.28571 -0.89162 i
+-0.18367 -1.12870 i
+-0.08163 -1.42954 i
+0.02041 -1.81204 i
+0.12245 -2.29987 i
+0.22449 -2.92510 i
+0.32653 -3.73274 i
+0.42857 -4.78900 i
+0.53061 -6.19754 i
+0.63265 -8.13369 i
+0.73469 -10.92227 i
+0.83673 -15.23295 i
+0.93878 -22.62830 i
+1.04082 -37.19400 i
+1.14286 -67.76613 i
+1.24490 -107.97003 i
+1.34694 -130.84424 i
+1.44898 -140.19080 i
+1.55102 -143.31296 i
+1.65306 -143.09394 i
+1.75510 -140.71316 i
+1.85714 -136.80968 i
+1.95918 -131.88548 i
+2.06122 -126.42831 i
+2.16327 -120.90126 i
+2.26531 -115.68030 i
+2.36735 -111.00739 i
+2.46939 -106.98945 i
+2.57143 -103.63177 i
+2.67347 -100.88002 i
+2.77551 -98.65382 i
+2.87755 -96.86787 i
+2.97959 -95.44280 i
+3.08163 -94.30959 i
+3.18367 -93.41040 i
+3.28571 -92.69787 i
+3.38776 -92.13374 i
+3.48980 -91.68733 i
+3.59184 -91.33420 i
+3.69388 -91.05492 i
+3.79592 -90.83407 i
+3.89796 -90.65945 i
+4.00000 -90.52137 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.gnuplot
new file mode 100644
index 0000000000..871eba78b0
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/61.table"; set format "%.5f"
+set samples 150; set parametric; plot [t=-2:1] 180/3.1415957*(atan((3**2-(10**t)**2)/(2*0.1*3*10**t))-3.1415957/2),20*log10(abs(1/sqrt((1-(10**t/3)**2)**2+(2*0.1*(10**t/3))**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.table
new file mode 100644
index 0000000000..9a8d25e7f5
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/61.table
@@ -0,0 +1,154 @@
+
+#Curve 0 of 1, 150 points
+#x y type
+-0.03828 0.00009 i
+-0.04010 0.00010 i
+-0.04200 0.00011 i
+-0.04398 0.00012 i
+-0.04607 0.00014 i
+-0.04825 0.00015 i
+-0.05054 0.00016 i
+-0.05293 0.00018 i
+-0.05544 0.00020 i
+-0.05806 0.00022 i
+-0.06081 0.00024 i
+-0.06370 0.00026 i
+-0.06672 0.00029 i
+-0.06988 0.00032 i
+-0.07319 0.00035 i
+-0.07666 0.00038 i
+-0.08029 0.00042 i
+-0.08410 0.00046 i
+-0.08809 0.00050 i
+-0.09226 0.00055 i
+-0.09664 0.00060 i
+-0.10122 0.00066 i
+-0.10602 0.00073 i
+-0.11105 0.00080 i
+-0.11631 0.00088 i
+-0.12183 0.00096 i
+-0.12761 0.00105 i
+-0.13366 0.00116 i
+-0.14000 0.00127 i
+-0.14664 0.00139 i
+-0.15360 0.00153 i
+-0.16088 0.00168 i
+-0.16852 0.00184 i
+-0.17651 0.00202 i
+-0.18489 0.00221 i
+-0.19366 0.00243 i
+-0.20285 0.00266 i
+-0.21248 0.00292 i
+-0.22257 0.00321 i
+-0.23313 0.00352 i
+-0.24420 0.00386 i
+-0.25580 0.00424 i
+-0.26794 0.00465 i
+-0.28067 0.00510 i
+-0.29400 0.00559 i
+-0.30797 0.00614 i
+-0.32260 0.00673 i
+-0.33793 0.00739 i
+-0.35399 0.00811 i
+-0.37082 0.00890 i
+-0.38845 0.00976 i
+-0.40692 0.01071 i
+-0.42628 0.01175 i
+-0.44656 0.01289 i
+-0.46781 0.01415 i
+-0.49009 0.01552 i
+-0.51343 0.01703 i
+-0.53789 0.01869 i
+-0.56353 0.02050 i
+-0.59040 0.02250 i
+-0.61857 0.02469 i
+-0.64810 0.02709 i
+-0.67906 0.02973 i
+-0.71151 0.03262 i
+-0.74555 0.03580 i
+-0.78124 0.03928 i
+-0.81867 0.04311 i
+-0.85793 0.04731 i
+-0.89911 0.05192 i
+-0.94233 0.05698 i
+-0.98767 0.06253 i
+-1.03527 0.06863 i
+-1.08523 0.07532 i
+-1.13769 0.08268 i
+-1.19279 0.09075 i
+-1.25067 0.09961 i
+-1.31149 0.10935 i
+-1.37543 0.12004 i
+-1.44266 0.13179 i
+-1.51337 0.14470 i
+-1.58779 0.15888 i
+-1.66614 0.17447 i
+-1.74867 0.19160 i
+-1.83564 0.21043 i
+-1.92737 0.23114 i
+-2.02416 0.25391 i
+-2.12638 0.27896 i
+-2.23441 0.30653 i
+-2.34868 0.33687 i
+-2.46968 0.37027 i
+-2.59793 0.40707 i
+-2.73404 0.44761 i
+-2.87866 0.49229 i
+-3.03255 0.54157 i
+-3.19656 0.59595 i
+-3.37166 0.65598 i
+-3.55895 0.72231 i
+-3.75971 0.79564 i
+-3.97541 0.87677 i
+-4.20775 0.96663 i
+-4.45874 1.06623 i
+-4.73073 1.17678 i
+-5.02652 1.29961 i
+-5.34945 1.43629 i
+-5.70355 1.58861 i
+-6.09374 1.75868 i
+-6.52605 1.94893 i
+-7.00799 2.16223 i
+-7.54901 2.40201 i
+-8.16117 2.67233 i
+-8.86008 2.97810 i
+-9.66634 3.32531 i
+-10.60761 3.72131 i
+-11.72192 4.17526 i
+-13.06288 4.69868 i
+-14.70834 5.30627 i
+-16.77530 6.01688 i
+-19.44678 6.85479 i
+-23.02233 7.85056 i
+-28.01688 9.03934 i
+-35.35424 10.44768 i
+-46.69012 12.03549 i
+-64.45864 13.50108 i
+-89.19372 13.99076 i
+-114.21276 12.78911 i
+-132.44013 10.54718 i
+-144.09320 8.14845 i
+-151.61682 5.92143 i
+-156.72169 3.91447 i
+-160.36579 2.10264 i
+-163.08206 0.45071 i
+-165.17964 -1.07225 i
+-166.84685 -2.49087 i
+-168.20377 -3.82432 i
+-169.33012 -5.08749 i
+-170.28069 -6.29210 i
+-171.09427 -7.44742 i
+-171.79905 -8.56089 i
+-172.41599 -9.63859 i
+-172.96095 -10.68546 i
+-173.44619 -11.70564 i
+-173.88128 -12.70257 i
+-174.27384 -13.67915 i
+-174.62999 -14.63786 i
+-174.95468 -15.58081 i
+-175.25202 -16.50980 i
+-175.52537 -17.42642 i
+-175.77756 -18.33203 i
+-176.01098 -19.22781 i
+-176.22763 -20.11482 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.gnuplot
new file mode 100644
index 0000000000..511ebf3dfe
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/62.table"; set format "%.5f"
+set samples 150; set parametric; plot [t=-1:3.5] 180/3.1415957*(atan((150**2-(10**t)**2)/(2*0.2*150*10**t))-3.1415957/2),20*log10(abs(5/sqrt((1-(10**t/150)**2)**2+(2*0.2*(10**t/150))**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.table
new file mode 100644
index 0000000000..0ba74fd270
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/62.table
@@ -0,0 +1,154 @@
+
+#Curve 0 of 1, 150 points
+#x y type
+-0.01537 13.97940 i
+-0.01647 13.97940 i
+-0.01765 13.97940 i
+-0.01891 13.97941 i
+-0.02027 13.97941 i
+-0.02172 13.97941 i
+-0.02328 13.97941 i
+-0.02495 13.97941 i
+-0.02674 13.97941 i
+-0.02866 13.97941 i
+-0.03071 13.97941 i
+-0.03292 13.97942 i
+-0.03528 13.97942 i
+-0.03782 13.97942 i
+-0.04054 13.97942 i
+-0.04345 13.97943 i
+-0.04657 13.97943 i
+-0.04992 13.97944 i
+-0.05351 13.97944 i
+-0.05736 13.97945 i
+-0.06148 13.97946 i
+-0.06590 13.97947 i
+-0.07064 13.97948 i
+-0.07572 13.97949 i
+-0.08117 13.97950 i
+-0.08701 13.97952 i
+-0.09327 13.97953 i
+-0.09998 13.97955 i
+-0.10717 13.97957 i
+-0.11489 13.97960 i
+-0.12315 13.97963 i
+-0.13202 13.97966 i
+-0.14152 13.97970 i
+-0.15171 13.97975 i
+-0.16263 13.97980 i
+-0.17433 13.97986 i
+-0.18688 13.97993 i
+-0.20034 13.98001 i
+-0.21476 13.98010 i
+-0.23022 13.98021 i
+-0.24680 13.98033 i
+-0.26457 13.98046 i
+-0.28362 13.98062 i
+-0.30405 13.98081 i
+-0.32595 13.98102 i
+-0.34943 13.98126 i
+-0.37460 13.98153 i
+-0.40158 13.98185 i
+-0.43052 13.98222 i
+-0.46154 13.98264 i
+-0.49480 13.98312 i
+-0.53046 13.98368 i
+-0.56870 13.98431 i
+-0.60970 13.98505 i
+-0.65367 13.98589 i
+-0.70081 13.98686 i
+-0.75138 13.98797 i
+-0.80560 13.98925 i
+-0.86376 13.99072 i
+-0.92615 13.99242 i
+-0.99307 13.99436 i
+-1.06486 13.99659 i
+-1.14189 13.99916 i
+-1.22455 14.00211 i
+-1.31325 14.00551 i
+-1.40847 14.00941 i
+-1.51070 14.01389 i
+-1.62048 14.01905 i
+-1.73840 14.02498 i
+-1.86509 14.03179 i
+-2.00126 14.03963 i
+-2.14767 14.04865 i
+-2.30517 14.05902 i
+-2.47467 14.07096 i
+-2.65720 14.08469 i
+-2.85390 14.10049 i
+-3.06603 14.11867 i
+-3.29500 14.13961 i
+-3.54241 14.16372 i
+-3.81006 14.19150 i
+-4.10000 14.22352 i
+-4.41458 14.26042 i
+-4.75650 14.30299 i
+-5.12892 14.35213 i
+-5.53553 14.40886 i
+-5.98070 14.47443 i
+-6.46963 14.55028 i
+-7.00859 14.63808 i
+-7.60524 14.73986 i
+-8.26899 14.85798 i
+-9.01158 14.99526 i
+-9.84785 15.15508 i
+-10.79685 15.34152 i
+-11.88337 15.55945 i
+-13.14031 15.81484 i
+-14.61214 16.11490 i
+-16.36031 16.46843 i
+-18.47173 16.88610 i
+-21.07265 17.38059 i
+-24.35149 17.96631 i
+-28.59701 18.65761 i
+-34.26028 19.46275 i
+-42.04125 20.36644 i
+-52.93821 21.28516 i
+-67.94516 21.98119 i
+-86.73802 22.02312 i
+-106.21848 21.08045 i
+-122.62551 19.33758 i
+-134.78516 17.24727 i
+-143.46515 15.11598 i
+-149.73082 13.06676 i
+-154.38119 11.13037 i
+-157.93873 9.30346 i
+-160.73720 7.57265 i
+-162.99273 5.92324 i
+-164.84883 4.34190 i
+-166.40345 2.81731 i
+-167.72524 1.34009 i
+-168.86353 -0.09746 i
+-169.85454 -1.50169 i
+-170.72543 -2.87781 i
+-171.49691 -4.23013 i
+-172.18508 -5.56225 i
+-172.80259 -6.87715 i
+-173.35954 -8.17736 i
+-173.86412 -9.46497 i
+-174.32301 -10.74179 i
+-174.74175 -12.00934 i
+-175.12494 -13.26889 i
+-175.47649 -14.52156 i
+-175.79971 -15.76829 i
+-176.09745 -17.00988 i
+-176.37217 -18.24704 i
+-176.62601 -19.48035 i
+-176.86084 -20.71033 i
+-177.07833 -21.93743 i
+-177.27994 -23.16203 i
+-177.46698 -24.38446 i
+-177.64064 -25.60501 i
+-177.80196 -26.82392 i
+-177.95191 -28.04141 i
+-178.09135 -29.25768 i
+-178.22107 -30.47287 i
+-178.34179 -31.68713 i
+-178.45417 -32.90058 i
+-178.55881 -34.11333 i
+-178.65627 -35.32546 i
+-178.74706 -36.53707 i
+-178.83165 -37.74821 i
+-178.91048 -38.95895 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.gnuplot
new file mode 100644
index 0000000000..e47ddc7826
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/63.table"; set format "%.5f"
+set samples 150; set parametric; plot [t=1:5] 180/3.1415957*(atan((1500**2-(10**t)**2)/(2*0.1*1500*10**t))-3.1415957/2)+-90-2*-180/3.1415957*atan(0.0009*10**t),20*log10(abs(1/sqrt((1-(10**t/1500)**2)**2+(2*0.1*(10**t/1500))**2)))+20*log10(abs(0.43/0.0009/(10**t)))-2*20*log10(abs(1/sqrt(1+(0.0009*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.table
new file mode 100644
index 0000000000..983316d486
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/63.table
@@ -0,0 +1,154 @@
+
+#Curve 0 of 1, 150 points
+#x y type
+-89.04519 33.58560 i
+-88.98431 33.04883 i
+-88.91954 32.51208 i
+-88.85064 31.97535 i
+-88.77736 31.43864 i
+-88.69940 30.90196 i
+-88.61647 30.36531 i
+-88.52826 29.82870 i
+-88.43443 29.29213 i
+-88.33461 28.75560 i
+-88.22843 28.21912 i
+-88.11549 27.68269 i
+-87.99536 27.14634 i
+-87.86757 26.61005 i
+-87.73163 26.07385 i
+-87.58705 25.53774 i
+-87.43325 25.00173 i
+-87.26966 24.46585 i
+-87.09566 23.93010 i
+-86.91058 23.39451 i
+-86.71372 22.85908 i
+-86.50435 22.32386 i
+-86.28166 21.78885 i
+-86.04481 21.25410 i
+-85.79291 20.71963 i
+-85.52502 20.18548 i
+-85.24011 19.65170 i
+-84.93713 19.11833 i
+-84.61495 18.58542 i
+-84.27235 18.05304 i
+-83.90806 17.52125 i
+-83.52074 16.99014 i
+-83.10895 16.45979 i
+-82.67118 15.93030 i
+-82.20583 15.40178 i
+-81.71121 14.87437 i
+-81.18553 14.34821 i
+-80.62691 13.82345 i
+-80.03336 13.30029 i
+-79.40281 12.77893 i
+-78.73306 12.25960 i
+-78.02181 11.74258 i
+-77.26665 11.22816 i
+-76.46509 10.71667 i
+-75.61451 10.20851 i
+-74.71220 9.70410 i
+-73.75537 9.20392 i
+-72.74113 8.70852 i
+-71.66654 8.21852 i
+-70.52861 7.73460 i
+-69.32430 7.25754 i
+-68.05061 6.78823 i
+-66.70455 6.32763 i
+-65.28321 5.87686 i
+-63.78383 5.43715 i
+-62.20384 5.00989 i
+-60.54094 4.59663 i
+-58.79322 4.19912 i
+-56.95921 3.81929 i
+-55.03808 3.45934 i
+-53.02974 3.12170 i
+-50.93502 2.80910 i
+-48.75594 2.52461 i
+-46.49587 2.27166 i
+-44.15990 2.05414 i
+-41.75519 1.87642 i
+-39.29145 1.74350 i
+-36.78150 1.66109 i
+-34.24218 1.63582 i
+-31.69544 1.67547 i
+-29.17005 1.78931 i
+-26.70432 1.98861 i
+-24.35026 2.28736 i
+-22.18087 2.70338 i
+-20.30294 3.25995 i
+-18.88134 3.98839 i
+-18.18773 4.93175 i
+-18.70640 6.14963 i
+-21.38216 7.71964 i
+-28.22416 9.70571 i
+-43.44115 11.92336 i
+-71.15636 13.07157 i
+-100.08837 11.44422 i
+-116.86226 8.48787 i
+-124.71685 5.68667 i
+-128.15729 3.29578 i
+-129.38184 1.25879 i
+-129.41162 -0.50502 i
+-128.75904 -2.05891 i
+-127.70358 -3.44882 i
+-126.40873 -4.70813 i
+-124.97555 -5.86161 i
+-123.46919 -6.92801 i
+-121.93300 -7.92189 i
+-120.39639 -8.85476 i
+-118.87959 -9.73587 i
+-117.39652 -10.57276 i
+-115.95669 -11.37169 i
+-114.56644 -12.13787 i
+-113.22981 -12.87567 i
+-111.94915 -13.58884 i
+-110.72554 -14.28055 i
+-109.55915 -14.95353 i
+-108.44943 -15.61014 i
+-107.39536 -16.25240 i
+-106.39551 -16.88210 i
+-105.44820 -17.50076 i
+-104.55158 -18.10972 i
+-103.70366 -18.71017 i
+-102.90240 -19.30311 i
+-102.14573 -19.88945 i
+-101.43155 -20.46998 i
+-100.75782 -21.04538 i
+-100.12252 -21.61627 i
+-99.52367 -22.18318 i
+-98.95937 -22.74657 i
+-98.42778 -23.30687 i
+-97.92713 -23.86443 i
+-97.45572 -24.41958 i
+-97.01193 -24.97260 i
+-96.59421 -25.52374 i
+-96.20110 -26.07323 i
+-95.83118 -26.62124 i
+-95.48313 -27.16796 i
+-95.15569 -27.71354 i
+-94.84768 -28.25811 i
+-94.55795 -28.80178 i
+-94.28545 -29.34467 i
+-94.02916 -29.88687 i
+-93.78813 -30.42844 i
+-93.56147 -30.96948 i
+-93.34833 -31.51003 i
+-93.14790 -32.05017 i
+-92.95945 -32.58992 i
+-92.78225 -33.12935 i
+-92.61564 -33.66848 i
+-92.45899 -34.20736 i
+-92.31170 -34.74600 i
+-92.17323 -35.28445 i
+-92.04304 -35.82272 i
+-91.92065 -36.36082 i
+-91.80558 -36.89879 i
+-91.69739 -37.43664 i
+-91.59569 -37.97438 i
+-91.50008 -38.51202 i
+-91.41019 -39.04958 i
+-91.32568 -39.58706 i
+-91.24624 -40.12448 i
+-91.17156 -40.66184 i
+-91.10135 -41.19914 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.gnuplot
new file mode 100644
index 0000000000..81af57888c
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/64.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-3:2] -180/3.1415957*atan(3*10**t),20*log10(abs(5/sqrt(1+(3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.table
new file mode 100644
index 0000000000..7ea23c5ede
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/64.table
@@ -0,0 +1,104 @@
+
+#Curve 0 of 1, 100 points
+#x y type
+-0.17189 13.97936 i
+-0.19308 13.97935 i
+-0.21690 13.97934 i
+-0.24364 13.97932 i
+-0.27369 13.97930 i
+-0.30744 13.97928 i
+-0.34536 13.97924 i
+-0.38795 13.97920 i
+-0.43579 13.97915 i
+-0.48953 13.97908 i
+-0.54990 13.97900 i
+-0.61771 13.97890 i
+-0.69388 13.97876 i
+-0.77944 13.97860 i
+-0.87555 13.97839 i
+-0.98350 13.97812 i
+-1.10477 13.97779 i
+-1.24097 13.97736 i
+-1.39395 13.97683 i
+-1.56578 13.97616 i
+-1.75877 13.97531 i
+-1.97550 13.97424 i
+-2.21890 13.97288 i
+-2.49222 13.97118 i
+-2.79910 13.96903 i
+-3.14365 13.96632 i
+-3.53041 13.96290 i
+-3.96448 13.95859 i
+-4.45154 13.95316 i
+-4.99789 13.94631 i
+-5.61053 13.93769 i
+-6.29718 13.92683 i
+-7.06635 13.91317 i
+-7.92732 13.89600 i
+-8.89017 13.87442 i
+-9.96574 13.84734 i
+-11.16551 13.81342 i
+-12.50146 13.77098 i
+-13.98581 13.71802 i
+-15.63060 13.65210 i
+-17.44712 13.57031 i
+-19.44523 13.46927 i
+-21.63238 13.34502 i
+-24.01249 13.19316 i
+-26.58474 13.00881 i
+-29.34228 12.78682 i
+-32.27120 12.52198 i
+-35.34983 12.20931 i
+-38.54872 11.84440 i
+-41.83150 11.42380 i
+-45.15654 10.94530 i
+-48.47948 10.40820 i
+-51.75607 9.81335 i
+-54.94511 9.16309 i
+-58.01080 8.46096 i
+-60.92441 7.71145 i
+-63.66502 6.91957 i
+-66.21939 6.09056 i
+-68.58131 5.22952 i
+-70.75046 4.34130 i
+-72.73114 3.43028 i
+-74.53108 2.50033 i
+-76.16028 1.55482 i
+-77.63016 0.59660 i
+-78.95280 -0.37195 i
+-80.14039 -1.34883 i
+-81.20488 -2.33243 i
+-82.15770 -3.32141 i
+-83.00962 -4.31470 i
+-83.77065 -5.31143 i
+-84.45000 -6.31091 i
+-85.05609 -7.31257 i
+-85.59658 -8.31597 i
+-86.07840 -9.32076 i
+-86.50779 -10.32664 i
+-86.89038 -11.33340 i
+-87.23119 -12.34085 i
+-87.53476 -13.34884 i
+-87.80511 -14.35728 i
+-88.04587 -15.36606 i
+-88.26026 -16.37511 i
+-88.45115 -17.38438 i
+-88.62111 -18.39382 i
+-88.77243 -19.40340 i
+-88.90715 -20.41309 i
+-89.02710 -21.42286 i
+-89.13388 -22.43270 i
+-89.22895 -23.44260 i
+-89.31358 -24.45254 i
+-89.38892 -25.46251 i
+-89.45599 -26.47251 i
+-89.51571 -27.48253 i
+-89.56886 -28.49256 i
+-89.61618 -29.50261 i
+-89.65831 -30.51267 i
+-89.69581 -31.52274 i
+-89.72920 -32.53282 i
+-89.75892 -33.54290 i
+-89.78537 -34.55298 i
+-89.80893 -35.56307 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.gnuplot
new file mode 100644
index 0000000000..fc8167406b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/66.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=-0.99942:-0.99942] -180/3.1415957*atan(3*10**t),20*log10(abs(5/sqrt(1+(3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.table
new file mode 100644
index 0000000000..c99fc68399
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/66.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-16.72030 13.60418 i
+-16.72030 13.60418 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.gnuplot
new file mode 100644
index 0000000000..31b1e9af17
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/67.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.0:0.0] -180/3.1415957*atan(3*10**t),20*log10(abs(5/sqrt(1+(3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.table
new file mode 100644
index 0000000000..f3f53950e2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/67.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-71.56498 3.97940 i
+-71.56498 3.97940 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.gnuplot
new file mode 100644
index 0000000000..f68de78f8e
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/68.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.4771:0.4771] -180/3.1415957*atan(3*10**t),20*log10(abs(5/sqrt(1+(3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.table
new file mode 100644
index 0000000000..2938d29d89
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/68.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-83.65942 -5.15832 i
+-83.65942 -5.15832 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.gnuplot
new file mode 100644
index 0000000000..110b0f790c
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/69.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=1.07916:1.07916] -180/3.1415957*atan(3*10**t),20*log10(abs(5/sqrt(1+(3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.table
new file mode 100644
index 0000000000..f63610b436
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/69.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-88.40870 -17.14958 i
+-88.40870 -17.14958 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.gnuplot
new file mode 100644
index 0000000000..15a5431199
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/7.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.39793:0.39793] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.table
new file mode 100644
index 0000000000..7255cb3cc4
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/7.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+0.39793 7.60430 i
+0.39793 7.60430 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.gnuplot
new file mode 100644
index 0000000000..268335a57f
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/70.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=1.81291:1.81291] -180/3.1415957*atan(3*10**t),20*log10(abs(5/sqrt(1+(3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.table
new file mode 100644
index 0000000000..6cb96bcfb7
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/70.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-89.70609 -31.82134 i
+-89.70609 -31.82134 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.gnuplot
new file mode 100644
index 0000000000..a84b86d43e
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/72.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=1.39792:1.39792] 180/3.1415957*(atan((1500**2-(10**t)**2)/(2*0.1*1500*10**t))-3.1415957/2)+-90-2*-180/3.1415957*atan(0.0009*10**t),20*log10(abs(1/sqrt((1-(10**t/1500)**2)**2+(2*0.1*(10**t/1500))**2)))+20*log10(abs(0.43/0.0009/(10**t)))-2*20*log10(abs(1/sqrt(1+(0.0009*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.table
new file mode 100644
index 0000000000..3ecfb199b4
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/72.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-87.61336 25.63288 i
+-87.61336 25.63288 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.gnuplot
new file mode 100644
index 0000000000..9937a04d9f
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/73.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=1.90308:1.90308] 180/3.1415957*(atan((1500**2-(10**t)**2)/(2*0.1*1500*10**t))-3.1415957/2)+-90-2*-180/3.1415957*atan(0.0009*10**t),20*log10(abs(1/sqrt((1-(10**t/1500)**2)**2+(2*0.1*(10**t/1500))**2)))+20*log10(abs(0.43/0.0009/(10**t)))-2*20*log10(abs(1/sqrt(1+(0.0009*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.table
new file mode 100644
index 0000000000..18016cc746
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/73.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-82.37676 15.59207 i
+-82.37676 15.59207 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.gnuplot
new file mode 100644
index 0000000000..d29f000979
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/74.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=2.69887:2.69887] 180/3.1415957*(atan((1500**2-(10**t)**2)/(2*0.1*1500*10**t))-3.1415957/2)+-90-2*-180/3.1415957*atan(0.0009*10**t),20*log10(abs(1/sqrt((1-(10**t/1500)**2)**2+(2*0.1*(10**t/1500))**2)))+20*log10(abs(0.43/0.0009/(10**t)))-2*20*log10(abs(1/sqrt(1+(0.0009*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.table
new file mode 100644
index 0000000000..40eb7eac3c
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/74.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-45.84244 2.20635 i
+-45.84244 2.20635 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.gnuplot
new file mode 100644
index 0000000000..1150a41ae7
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/75.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=3.17606:3.17606] 180/3.1415957*(atan((1500**2-(10**t)**2)/(2*0.1*1500*10**t))-3.1415957/2)+-90-2*-180/3.1415957*atan(0.0009*10**t),20*log10(abs(1/sqrt((1-(10**t/1500)**2)**2+(2*0.1*(10**t/1500))**2)))+20*log10(abs(0.43/0.0009/(10**t)))-2*20*log10(abs(1/sqrt(1+(0.0009*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.table
new file mode 100644
index 0000000000..c45a75f06e
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/75.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-73.02052 13.05521 i
+-73.02052 13.05521 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.gnuplot
new file mode 100644
index 0000000000..af6e84d091
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/76.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=3.60196:3.60196] 180/3.1415957*(atan((1500**2-(10**t)**2)/(2*0.1*1500*10**t))-3.1415957/2)+-90-2*-180/3.1415957*atan(0.0009*10**t),20*log10(abs(1/sqrt((1-(10**t/1500)**2)**2+(2*0.1*(10**t/1500))**2)))+20*log10(abs(0.43/0.0009/(10**t)))-2*20*log10(abs(1/sqrt(1+(0.0009*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.table
new file mode 100644
index 0000000000..8784d5bcdc
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/76.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-116.06585 -11.31141 i
+-116.06585 -11.31141 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.gnuplot
new file mode 100644
index 0000000000..7e658d91c7
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/78.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=3.69896:3.69896] 180/3.1415957*(atan((1500**2-(10**t)**2)/(2*0.1*1500*10**t))-3.1415957/2)+-90-2*-180/3.1415957*atan(0.0009*10**t),20*log10(abs(1/sqrt((1-(10**t/1500)**2)**2+(2*0.1*(10**t/1500))**2)))+20*log10(abs(0.43/0.0009/(10**t)))-2*20*log10(abs(1/sqrt(1+(0.0009*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.table
new file mode 100644
index 0000000000..1d04437aed
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/78.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-111.28585 -13.96226 i
+-111.28585 -13.96226 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.gnuplot
new file mode 100644
index 0000000000..174b3144aa
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/79.table"; set format "%.5f"
+set samples 100; set parametric; plot [t=-1:1] -90+180/3.1415957*(atan((3**2-(10**t)**2)/(2*0.4*3*10**t))-3.1415957/2),20*log10(abs(0.3/(10**t)))+20*log10(abs(3.9/sqrt((1-(10**t/3)**2)**2+(2*0.4*(10**t/3))**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.table
new file mode 100644
index 0000000000..fea80f9c3b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/79.table
@@ -0,0 +1,104 @@
+
+#Curve 0 of 1, 100 points
+#x y type
+-91.52931 21.37028 i
+-91.60226 20.96688 i
+-91.67871 20.56354 i
+-91.75882 20.16027 i
+-91.84277 19.75708 i
+-91.93075 19.35396 i
+-92.02295 18.95094 i
+-92.11959 18.54802 i
+-92.22087 18.14521 i
+-92.32703 17.74251 i
+-92.43831 17.33995 i
+-92.55496 16.93753 i
+-92.67725 16.53527 i
+-92.80546 16.13318 i
+-92.93988 15.73129 i
+-93.08083 15.32960 i
+-93.22863 14.92814 i
+-93.38364 14.52693 i
+-93.54622 14.12600 i
+-93.71677 13.72537 i
+-93.89569 13.32508 i
+-94.08342 12.92515 i
+-94.28043 12.52562 i
+-94.48721 12.12652 i
+-94.70429 11.72791 i
+-94.93221 11.32983 i
+-95.17159 10.93233 i
+-95.42304 10.53547 i
+-95.68726 10.13930 i
+-95.96497 9.74390 i
+-96.25695 9.34934 i
+-96.56405 8.95570 i
+-96.88715 8.56307 i
+-97.22726 8.17155 i
+-97.58541 7.78125 i
+-97.96277 7.39228 i
+-98.36057 7.00477 i
+-98.78017 6.61886 i
+-99.22307 6.23471 i
+-99.69088 5.85248 i
+-100.18540 5.47235 i
+-100.70859 5.09454 i
+-101.26265 4.71924 i
+-101.85000 4.34671 i
+-102.47331 3.97720 i
+-103.13561 3.61099 i
+-103.84025 3.24837 i
+-104.59104 2.88969 i
+-105.39224 2.53528 i
+-106.24868 2.18552 i
+-107.16588 1.84080 i
+-108.15008 1.50155 i
+-109.20846 1.16819 i
+-110.34924 0.84117 i
+-111.58189 0.52091 i
+-112.91733 0.20785 i
+-114.36820 -0.09764 i
+-115.94915 -0.39527 i
+-117.67717 -0.68485 i
+-119.57198 -0.96641 i
+-121.65638 -1.24025 i
+-123.95666 -1.50712 i
+-126.50288 -1.76834 i
+-129.32894 -2.02610 i
+-132.47235 -2.28375 i
+-135.97317 -2.54616 i
+-139.87201 -2.82023 i
+-144.20624 -3.11529 i
+-149.00418 -3.44346 i
+-154.27682 -3.81969 i
+-160.00797 -4.26116 i
+-166.14471 -4.78587 i
+-172.59223 -5.41028 i
+-179.21712 -6.14637 i
+-185.86124 -6.99917 i
+-192.36366 -7.96553 i
+-198.58352 -9.03491 i
+-204.41625 -10.19165 i
+-209.79932 -11.41786 i
+-214.70867 -12.69600 i
+-219.14982 -14.01052 i
+-223.14783 -15.34861 i
+-226.73858 -16.70032 i
+-229.96232 -18.05822 i
+-232.85948 -19.41700 i
+-235.46827 -20.77298 i
+-237.82350 -22.12375 i
+-239.95614 -23.46780 i
+-241.89333 -24.80425 i
+-243.65866 -26.13273 i
+-245.27255 -27.45315 i
+-246.75259 -28.76564 i
+-248.11395 -30.07049 i
+-249.36972 -31.36805 i
+-250.53118 -32.65874 i
+-251.60815 -33.94299 i
+-252.60910 -35.22125 i
+-253.54145 -36.49394 i
+-254.41165 -37.76149 i
+-255.22538 -39.02430 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.gnuplot
new file mode 100644
index 0000000000..0ae385aba1
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/8.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.69896:0.69896] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.table
new file mode 100644
index 0000000000..73fca53c90
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/8.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+0.69896 4.42373 i
+0.69896 4.42373 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.gnuplot
new file mode 100644
index 0000000000..89921b05f5
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/81.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.41496:0.41496] -90+180/3.1415957*(atan((3**2-(10**t)**2)/(2*0.4*3*10**t))-3.1415957/2),20*log10(abs(0.3/(10**t)))+20*log10(abs(3.9/sqrt((1-(10**t/3)**2)**2+(2*0.4*(10**t/3))**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.table
new file mode 100644
index 0000000000..eb38bb3674
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/81.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-160.24924 -4.28068 i
+-160.24924 -4.28068 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.gnuplot
new file mode 100644
index 0000000000..d0e34ad973
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/82.table"; set format "%.5f"
+set samples 81; set parametric; plot [t=-1:4] 10**((20*log10(abs(3/sqrt(1+(0.5*10**t)**2))))/20)*cos(3.1415957/180*(-180/3.1415957*atan(0.5*10**t))),10**((20*log10(abs(3/sqrt(1+(0.5*10**t)**2))))/20)*sin(3.1415957/180*(-180/3.1415957*atan(0.5*10**t)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.table
new file mode 100644
index 0000000000..b9dde6fe0c
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/82.table
@@ -0,0 +1,85 @@
+
+#Curve 0 of 1, 81 points
+#x y type
+2.99252 -0.14963 i
+2.99003 -0.17264 i
+2.98672 -0.19914 i
+2.98232 -0.22963 i
+2.97647 -0.26465 i
+2.96870 -0.30482 i
+2.95841 -0.35077 i
+2.94479 -0.40320 i
+2.92683 -0.46277 i
+2.90321 -0.53009 i
+2.87231 -0.60562 i
+2.83210 -0.68957 i
+2.78021 -0.78171 i
+2.71389 -0.88118 i
+2.63023 -0.98620 i
+2.52637 -1.09387 i
+2.40000 -1.20000 i
+2.24992 -1.29908 i
+2.07674 -1.38469 i
+1.88342 -1.45017 i
+1.67544 -1.48970 i
+1.46039 -1.49948 i
+1.24696 -1.47850 i
+1.04357 -1.42887 i
+0.85714 -1.35526 i
+0.69223 -1.26393 i
+0.55089 -1.16155 i
+0.43300 -1.05428 i
+0.33686 -0.94716 i
+0.25991 -0.84391 i
+0.19922 -0.74698 i
+0.15192 -0.65778 i
+0.11538 -0.57692 i
+0.08737 -0.50445 i
+0.06600 -0.44004 i
+0.04976 -0.38317 i
+0.03747 -0.33319 i
+0.02819 -0.28944 i
+0.02119 -0.25123 i
+0.01592 -0.21794 i
+0.01195 -0.18898 i
+0.00897 -0.16381 i
+0.00673 -0.14196 i
+0.00505 -0.12300 i
+0.00379 -0.10656 i
+0.00284 -0.09231 i
+0.00213 -0.07995 i
+0.00160 -0.06925 i
+0.00120 -0.05998 i
+0.00090 -0.05194 i
+0.00067 -0.04498 i
+0.00051 -0.03896 i
+0.00038 -0.03374 i
+0.00028 -0.02922 i
+0.00021 -0.02530 i
+0.00016 -0.02191 i
+0.00012 -0.01897 i
+0.00009 -0.01643 i
+0.00007 -0.01423 i
+0.00005 -0.01232 i
+0.00004 -0.01067 i
+0.00003 -0.00924 i
+0.00002 -0.00800 i
+0.00002 -0.00693 i
+0.00001 -0.00600 i
+0.00001 -0.00520 i
+0.00001 -0.00450 i
+0.00001 -0.00390 i
+0.00000 -0.00337 i
+0.00000 -0.00292 i
+0.00000 -0.00253 i
+0.00000 -0.00219 i
+0.00000 -0.00190 i
+0.00000 -0.00164 i
+0.00000 -0.00142 i
+0.00000 -0.00123 i
+0.00000 -0.00107 i
+0.00000 -0.00092 i
+0.00000 -0.00080 i
+0.00000 -0.00069 i
+0.00000 -0.00060 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.gnuplot
new file mode 100644
index 0000000000..ba67700e3d
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/83.table"; set format "%.5f"
+set samples 81; set parametric; plot [t=-2:2] 10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*cos(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2))),10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*sin(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.table
new file mode 100644
index 0000000000..011f36f67b
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/83.table
@@ -0,0 +1,85 @@
+
+#Curve 0 of 1, 81 points
+#x y type
+3.00000 -0.00300 i
+3.00000 -0.00337 i
+3.00000 -0.00378 i
+3.00000 -0.00424 i
+3.00000 -0.00476 i
+3.00000 -0.00534 i
+3.00000 -0.00599 i
+3.00000 -0.00672 i
+3.00000 -0.00754 i
+3.00000 -0.00846 i
+3.00000 -0.00949 i
+3.00000 -0.01065 i
+3.00000 -0.01195 i
+3.00000 -0.01341 i
+3.00000 -0.01504 i
+3.00000 -0.01688 i
+3.00000 -0.01893 i
+3.00000 -0.02124 i
+3.00000 -0.02384 i
+3.00000 -0.02674 i
+3.00000 -0.03001 i
+3.00000 -0.03367 i
+3.00000 -0.03778 i
+3.00000 -0.04239 i
+3.00000 -0.04756 i
+3.00000 -0.05337 i
+3.00000 -0.05989 i
+3.00000 -0.06720 i
+3.00000 -0.07541 i
+3.00000 -0.08462 i
+3.00000 -0.09497 i
+3.00000 -0.10658 i
+2.99999 -0.11963 i
+2.99999 -0.13428 i
+2.99998 -0.15074 i
+2.99997 -0.16924 i
+2.99995 -0.19005 i
+2.99992 -0.21345 i
+2.99988 -0.23981 i
+2.99981 -0.26950 i
+2.99970 -0.30300 i
+2.99952 -0.34085 i
+2.99923 -0.38367 i
+2.99878 -0.43222 i
+2.99806 -0.48741 i
+2.99690 -0.55034 i
+2.99506 -0.62237 i
+2.99209 -0.70519 i
+2.98731 -0.80092 i
+2.97958 -0.91222 i
+2.96703 -1.04251 i
+2.94657 -1.19606 i
+2.91304 -1.37813 i
+2.85786 -1.59476 i
+2.76686 -1.85189 i
+2.61723 -2.15245 i
+2.37469 -2.48937 i
+1.99524 -2.83178 i
+1.44317 -3.10629 i
+0.73750 -3.19587 i
+-0.00000 -3.00000 i
+-0.58582 -2.53856 i
+-0.91058 -1.95993 i
+-0.99999 -1.41925 i
+-0.94539 -0.99103 i
+-0.82764 -0.68066 i
+-0.69500 -0.46517 i
+-0.57022 -0.31820 i
+-0.46169 -0.21842 i
+-0.37095 -0.15057 i
+-0.29670 -0.10425 i
+-0.23668 -0.07246 i
+-0.18849 -0.05053 i
+-0.14996 -0.03534 i
+-0.11924 -0.02478 i
+-0.09477 -0.01740 i
+-0.07531 -0.01224 i
+-0.05983 -0.00862 i
+-0.04753 -0.00608 i
+-0.03776 -0.00429 i
+-0.03000 -0.00303 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.gnuplot
new file mode 100644
index 0000000000..f9febd0641
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/84.table"; set format "%.5f"
+set samples 151; set parametric; plot [t=-3:2] 10**((20*log10(abs(4/sqrt(1+(0.5*10**t)**2)))+20*log10(abs(1/sqrt(1+(2*10**t)**2))))/20)*cos(3.1415957/180*(-180/3.1415957*atan(0.5*10**t)+-180/3.1415957*atan(2*10**t))),10**((20*log10(abs(4/sqrt(1+(0.5*10**t)**2)))+20*log10(abs(1/sqrt(1+(2*10**t)**2))))/20)*sin(3.1415957/180*(-180/3.1415957*atan(0.5*10**t)+-180/3.1415957*atan(2*10**t)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.table
new file mode 100644
index 0000000000..2b1b7cfe44
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/84.table
@@ -0,0 +1,155 @@
+
+#Curve 0 of 1, 151 points
+#x y type
+3.99998 -0.01000 i
+3.99998 -0.01080 i
+3.99997 -0.01166 i
+3.99997 -0.01259 i
+3.99996 -0.01359 i
+3.99995 -0.01468 i
+3.99995 -0.01585 i
+3.99994 -0.01711 i
+3.99993 -0.01848 i
+3.99992 -0.01995 i
+3.99990 -0.02154 i
+3.99989 -0.02326 i
+3.99987 -0.02512 i
+3.99985 -0.02712 i
+3.99982 -0.02929 i
+3.99979 -0.03162 i
+3.99976 -0.03414 i
+3.99971 -0.03687 i
+3.99967 -0.03981 i
+3.99961 -0.04298 i
+3.99955 -0.04641 i
+3.99947 -0.05011 i
+3.99939 -0.05411 i
+3.99928 -0.05843 i
+3.99916 -0.06309 i
+3.99903 -0.06812 i
+3.99886 -0.07355 i
+3.99868 -0.07941 i
+3.99846 -0.08574 i
+3.99820 -0.09258 i
+3.99790 -0.09996 i
+3.99755 -0.10792 i
+3.99715 -0.11652 i
+3.99667 -0.12581 i
+3.99612 -0.13583 i
+3.99548 -0.14665 i
+3.99473 -0.15832 i
+3.99386 -0.17092 i
+3.99284 -0.18452 i
+3.99165 -0.19919 i
+3.99027 -0.21502 i
+3.98866 -0.23210 i
+3.98678 -0.25052 i
+3.98460 -0.27038 i
+3.98205 -0.29180 i
+3.97908 -0.31489 i
+3.97563 -0.33977 i
+3.97161 -0.36658 i
+3.96693 -0.39544 i
+3.96148 -0.42652 i
+3.95515 -0.45995 i
+3.94778 -0.49589 i
+3.93922 -0.53451 i
+3.92928 -0.57598 i
+3.91773 -0.62045 i
+3.90433 -0.66810 i
+3.88880 -0.71908 i
+3.87081 -0.77355 i
+3.85000 -0.83165 i
+3.82595 -0.89348 i
+3.79820 -0.95914 i
+3.76623 -1.02866 i
+3.72947 -1.10204 i
+3.68731 -1.17920 i
+3.63906 -1.25998 i
+3.58400 -1.34410 i
+3.52138 -1.43120 i
+3.45043 -1.52074 i
+3.37038 -1.61203 i
+3.28051 -1.70422 i
+3.18015 -1.79623 i
+3.06874 -1.88682 i
+2.94592 -1.97454 i
+2.81151 -2.05778 i
+2.66563 -2.13477 i
+2.50871 -2.20368 i
+2.34154 -2.26263 i
+2.16530 -2.30982 i
+1.98154 -2.34360 i
+1.79219 -2.36258 i
+1.59946 -2.36568 i
+1.40579 -2.35228 i
+1.21374 -2.32217 i
+1.02586 -2.27567 i
+0.84463 -2.21354 i
+0.67230 -2.13697 i
+0.51083 -2.04753 i
+0.36184 -1.94704 i
+0.22654 -1.83753 i
+0.10579 -1.72114 i
+0.00000 -1.60000 i
+-0.09073 -1.47621 i
+-0.16666 -1.35177 i
+-0.22830 -1.22850 i
+-0.27644 -1.10806 i
+-0.31205 -0.99189 i
+-0.33625 -0.88123 i
+-0.35029 -0.77704 i
+-0.35546 -0.68008 i
+-0.35312 -0.59087 i
+-0.34459 -0.50967 i
+-0.33117 -0.43657 i
+-0.31405 -0.37144 i
+-0.29434 -0.31399 i
+-0.27300 -0.26380 i
+-0.25087 -0.22037 i
+-0.22863 -0.18310 i
+-0.20683 -0.15138 i
+-0.18588 -0.12459 i
+-0.16607 -0.10211 i
+-0.14761 -0.08337 i
+-0.13060 -0.06785 i
+-0.11508 -0.05504 i
+-0.10105 -0.04454 i
+-0.08845 -0.03595 i
+-0.07721 -0.02896 i
+-0.06724 -0.02328 i
+-0.05844 -0.01869 i
+-0.05070 -0.01498 i
+-0.04391 -0.01199 i
+-0.03798 -0.00959 i
+-0.03281 -0.00766 i
+-0.02832 -0.00612 i
+-0.02442 -0.00488 i
+-0.02104 -0.00389 i
+-0.01812 -0.00310 i
+-0.01560 -0.00247 i
+-0.01342 -0.00197 i
+-0.01154 -0.00157 i
+-0.00992 -0.00125 i
+-0.00852 -0.00099 i
+-0.00732 -0.00079 i
+-0.00629 -0.00063 i
+-0.00540 -0.00050 i
+-0.00464 -0.00040 i
+-0.00398 -0.00031 i
+-0.00342 -0.00025 i
+-0.00293 -0.00020 i
+-0.00252 -0.00016 i
+-0.00216 -0.00013 i
+-0.00185 -0.00010 i
+-0.00159 -0.00008 i
+-0.00136 -0.00006 i
+-0.00117 -0.00005 i
+-0.00100 -0.00004 i
+-0.00086 -0.00003 i
+-0.00074 -0.00003 i
+-0.00063 -0.00002 i
+-0.00054 -0.00002 i
+-0.00047 -0.00001 i
+-0.00040 -0.00001 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.gnuplot
new file mode 100644
index 0000000000..0c1eb230ed
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/85.table"; set format "%.5f"
+set samples 101; set parametric; plot [t=0.5:2] 10**((20*log10(abs(15/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2)))+20*log10(abs(1/(10**t))))/20)*cos(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2)+-90)),10**((20*log10(abs(15/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2)))+20*log10(abs(1/(10**t))))/20)*sin(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2)+-90))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.table
new file mode 100644
index 0000000000..b078fb31cd
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/85.table
@@ -0,0 +1,105 @@
+
+#Curve 0 of 1, 101 points
+#x y type
+-1.64837 -4.69129 i
+-1.65870 -4.52420 i
+-1.66971 -4.36185 i
+-1.68142 -4.20397 i
+-1.69387 -4.05026 i
+-1.70708 -3.90046 i
+-1.72108 -3.75424 i
+-1.73588 -3.61132 i
+-1.75149 -3.47136 i
+-1.76791 -3.33403 i
+-1.78512 -3.19898 i
+-1.80308 -3.06583 i
+-1.82174 -2.93419 i
+-1.84098 -2.80365 i
+-1.86069 -2.67376 i
+-1.88066 -2.54408 i
+-1.90065 -2.41412 i
+-1.92033 -2.28339 i
+-1.93927 -2.15141 i
+-1.95695 -2.01770 i
+-1.97270 -1.88182 i
+-1.98573 -1.74338 i
+-1.99511 -1.60211 i
+-1.99973 -1.45789 i
+-1.99836 -1.31081 i
+-1.98969 -1.16123 i
+-1.97234 -1.00984 i
+-1.94499 -0.85771 i
+-1.90646 -0.70634 i
+-1.85591 -0.55761 i
+-1.79291 -0.41374 i
+-1.71763 -0.27714 i
+-1.63087 -0.15026 i
+-1.53413 -0.03532 i
+-1.42946 0.06584 i
+-1.31937 0.15199 i
+-1.20659 0.22258 i
+-1.09382 0.27779 i
+-0.98356 0.31844 i
+-0.87788 0.34584 i
+-0.77841 0.36165 i
+-0.68625 0.36770 i
+-0.60202 0.36582 i
+-0.52594 0.35776 i
+-0.45789 0.34507 i
+-0.39754 0.32913 i
+-0.34439 0.31104 i
+-0.29782 0.29172 i
+-0.25722 0.27189 i
+-0.22194 0.25209 i
+-0.19138 0.23271 i
+-0.16496 0.21404 i
+-0.14216 0.19627 i
+-0.12250 0.17951 i
+-0.10556 0.16383 i
+-0.09099 0.14925 i
+-0.07844 0.13576 i
+-0.06765 0.12332 i
+-0.05836 0.11191 i
+-0.05036 0.10145 i
+-0.04348 0.09190 i
+-0.03755 0.08319 i
+-0.03244 0.07527 i
+-0.02804 0.06806 i
+-0.02425 0.06152 i
+-0.02097 0.05559 i
+-0.01815 0.05021 i
+-0.01571 0.04534 i
+-0.01360 0.04094 i
+-0.01178 0.03695 i
+-0.01021 0.03335 i
+-0.00885 0.03010 i
+-0.00767 0.02716 i
+-0.00665 0.02450 i
+-0.00577 0.02210 i
+-0.00501 0.01994 i
+-0.00435 0.01798 i
+-0.00377 0.01622 i
+-0.00328 0.01463 i
+-0.00285 0.01319 i
+-0.00247 0.01190 i
+-0.00215 0.01073 i
+-0.00187 0.00967 i
+-0.00162 0.00872 i
+-0.00141 0.00786 i
+-0.00123 0.00709 i
+-0.00107 0.00639 i
+-0.00093 0.00577 i
+-0.00081 0.00520 i
+-0.00070 0.00469 i
+-0.00061 0.00423 i
+-0.00053 0.00381 i
+-0.00046 0.00344 i
+-0.00040 0.00310 i
+-0.00035 0.00279 i
+-0.00030 0.00252 i
+-0.00026 0.00227 i
+-0.00023 0.00205 i
+-0.00020 0.00185 i
+-0.00017 0.00166 i
+-0.00015 0.00150 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.gnuplot
new file mode 100644
index 0000000000..ea9406901e
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/86.table"; set format "%.5f"
+set samples 50; set parametric; plot [t=-1:2] 10**((20*log10(abs(4/sqrt(1+(0.5*10**t)**2)))+0)/20)*cos(3.1415957/180*(-180/3.1415957*atan(0.5*10**t)+-1.8*10**t)),10**((20*log10(abs(4/sqrt(1+(0.5*10**t)**2)))+0)/20)*sin(3.1415957/180*(-180/3.1415957*atan(0.5*10**t)+-1.8*10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.table
new file mode 100644
index 0000000000..e73632fe22
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/86.table
@@ -0,0 +1,54 @@
+
+#Curve 0 of 1, 50 points
+#x y type
+3.98938 -0.21204 i
+3.98593 -0.24394 i
+3.98137 -0.28057 i
+3.97533 -0.32258 i
+3.96736 -0.37072 i
+3.95684 -0.42578 i
+3.94297 -0.48863 i
+3.92472 -0.56015 i
+3.90077 -0.64126 i
+3.86945 -0.73277 i
+3.82863 -0.83535 i
+3.77576 -0.94936 i
+3.70773 -1.07462 i
+3.62101 -1.21021 i
+3.51172 -1.35410 i
+3.37598 -1.50286 i
+3.21041 -1.65140 i
+3.01284 -1.79288 i
+2.78317 -1.91906 i
+2.52418 -2.02099 i
+2.24192 -2.09028 i
+1.94553 -2.12059 i
+1.64622 -2.10889 i
+1.35562 -2.05619 i
+1.08409 -1.96724 i
+0.83930 -1.84957 i
+0.62567 -1.71195 i
+0.44445 -1.56307 i
+0.29442 -1.41047 i
+0.17272 -1.26007 i
+0.07568 -1.11603 i
+-0.00059 -0.98098 i
+-0.05979 -0.85628 i
+-0.10516 -0.74234 i
+-0.13946 -0.63895 i
+-0.16490 -0.54549 i
+-0.18324 -0.46111 i
+-0.19575 -0.38483 i
+-0.20337 -0.31569 i
+-0.20669 -0.25275 i
+-0.20601 -0.19520 i
+-0.20139 -0.14238 i
+-0.19266 -0.09386 i
+-0.17950 -0.04949 i
+-0.16148 -0.00950 i
+-0.13820 0.02538 i
+-0.10954 0.05384 i
+-0.07593 0.07399 i
+-0.03890 0.08347 i
+-0.00160 0.07997 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.gnuplot
new file mode 100644
index 0000000000..8b877d18ef
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/87.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=-1:0.3] 10**((20*log10(abs(4/sqrt(1+(0.5*10**t)**2)))+0)/20)*cos(3.1415957/180*(-180/3.1415957*atan(0.5*10**t)+-1.8*10**t)),10**((20*log10(abs(4/sqrt(1+(0.5*10**t)**2)))+0)/20)*sin(3.1415957/180*(-180/3.1415957*atan(0.5*10**t)+-1.8*10**t))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.table
new file mode 100644
index 0000000000..c327bd7acd
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/87.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+3.98938 -0.21204 i
+1.87552 -2.12165 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.gnuplot
new file mode 100644
index 0000000000..d11f063280
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/89.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.90308:0.90308] 10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*cos(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2))),10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*sin(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.table
new file mode 100644
index 0000000000..cab0cd2d8a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/89.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+1.40345 -3.11847 i
+1.40345 -3.11847 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.gnuplot
new file mode 100644
index 0000000000..d416d94424
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/9.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.99998:0.99998] log10(10**t),20*log10(abs(3/sqrt(1+(0.3*10**t)**2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.table
new file mode 100644
index 0000000000..d0d9b363b8
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/9.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+0.99998 -0.45721 i
+0.99998 -0.45721 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.gnuplot
new file mode 100644
index 0000000000..2874b54310
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/90.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.99998:0.99998] 10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*cos(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2))),10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*sin(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.table
new file mode 100644
index 0000000000..950cbb325e
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/90.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+0.00027 -3.00014 i
+0.00027 -3.00014 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.gnuplot
new file mode 100644
index 0000000000..9f4bac9cd2
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/91.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=1.30101:1.30101] 10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*cos(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2))),10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*sin(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.table
new file mode 100644
index 0000000000..0694bcac22
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/91.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+-0.69236 -0.46161 i
+-0.69236 -0.46161 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.gnuplot
new file mode 100644
index 0000000000..910a71a3f3
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/93.table"; set format "%.5f"
+set samples 2; set parametric; plot [t=0.90308:0.90308] 10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*cos(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2))),10**((20*log10(abs(3/sqrt((1-(10**t/10)**2)**2+(2*0.5*(10**t/10))**2))))/20)*sin(3.1415957/180*(180/3.1415957*(atan((10**2-(10**t)**2)/(2*0.5*10*10**t))-3.1415957/2)))
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.table
new file mode 100644
index 0000000000..cab0cd2d8a
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/93.table
@@ -0,0 +1,6 @@
+
+#Curve 0 of 1, 2 points
+#x y type
+1.40345 -3.11847 i
+1.40345 -3.11847 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.gnuplot
new file mode 100644
index 0000000000..10cd4bb8b4
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/94.table"; set format "%.5f"
+set samples 31; plot [x=0:1.8] -.198*exp(-35.4*x)-.638*exp(-2.28*x)*cos(18.3*x)-.462*exp(-2.28*x)*sin(18.3*x)+.833
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.table
new file mode 100644
index 0000000000..a5977f5ffd
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/94.table
@@ -0,0 +1,35 @@
+
+#Curve 0 of 1, 31 points
+#x y type
+0.00000 -0.00300 i
+0.06000 0.19721 i
+0.12000 0.82925 i
+0.18000 1.29752 i
+0.24000 1.20291 i
+0.30000 0.77326 i
+0.36000 0.50415 i
+0.42000 0.61723 i
+0.48000 0.91175 i
+0.54000 1.05967 i
+0.60000 0.95315 i
+0.66000 0.75602 i
+0.72000 0.68047 i
+0.78000 0.77039 i
+0.84000 0.89929 i
+0.90000 0.93328 i
+0.96000 0.86223 i
+1.02000 0.77994 i
+1.08000 0.76862 i
+1.14000 0.82222 i
+1.20000 0.87341 i
+1.26000 0.87329 i
+1.32000 0.83427 i
+1.38000 0.80336 i
+1.44000 0.80849 i
+1.50000 0.83608 i
+1.56000 0.85409 i
+1.62000 0.84741 i
+1.68000 0.82841 i
+1.74000 0.81839 i
+1.80000 0.82489 i
+
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.gnuplot b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.gnuplot
new file mode 100644
index 0000000000..95461af5a9
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.gnuplot
@@ -0,0 +1,2 @@
+set table "gnuplot/bodegraph/95.table"; set format "%.5f"
+set samples 31; plot [x=0:1.8] 1-.117*exp(-24.1*x)-.883*exp(-2.94*x)*cos(7.03*x)-.769*exp(-2.94*x)*sin(7.03*x)
diff --git a/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.table b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.table
new file mode 100644
index 0000000000..892b564ccf
--- /dev/null
+++ b/graphics/pgf/contrib/bodegraph/gnuplot/bodegraph/95.table
@@ -0,0 +1,35 @@
+
+#Curve 0 of 1, 31 points
+#x y type
+0.00000 0.00000 i
+0.06000 0.03320 i
+0.12000 0.17732 i
+0.18000 0.41004 i
+0.24000 0.67311 i
+0.30000 0.91395 i
+0.36000 1.09795 i
+0.42000 1.21025 i
+0.48000 1.25277 i
+0.54000 1.23890 i
+0.60000 1.18779 i
+0.66000 1.11937 i
+0.72000 1.05063 i
+0.78000 0.99356 i
+0.84000 0.95457 i
+0.90000 0.93504 i
+0.96000 0.93255 i
+1.02000 0.94248 i
+1.08000 0.95942 i
+1.14000 0.97834 i
+1.20000 0.99539 i
+1.26000 1.00817 i
+1.32000 1.01573 i
+1.38000 1.01833 i
+1.44000 1.01698 i
+1.50000 1.01309 i
+1.56000 1.00809 i
+1.62000 1.00318 i
+1.68000 0.99918 i
+1.74000 0.99651 i
+1.80000 0.99524 i
+
diff --git a/graphics/pgf/contrib/braids/README.txt b/graphics/pgf/contrib/braids/README.txt
new file mode 100644
index 0000000000..84a8e7c010
--- /dev/null
+++ b/graphics/pgf/contrib/braids/README.txt
@@ -0,0 +1,10 @@
+----------------------------------------------------------------
+braids --- a style file for drawing braid diagrams with TikZ/PGF
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package defines some commands for drawing braid diagrams with TikZ/PGF.
+The initial idea of this package came from a question and answer on the site http://tex.stackexchange.com.
+
diff --git a/graphics/pgf/contrib/braids/braids.pdf b/graphics/pgf/contrib/braids/braids.pdf
new file mode 100644
index 0000000000..5241cd38ee
--- /dev/null
+++ b/graphics/pgf/contrib/braids/braids.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/braids/braids.tex b/graphics/pgf/contrib/braids/braids.tex
new file mode 100644
index 0000000000..7dab9f0873
--- /dev/null
+++ b/graphics/pgf/contrib/braids/braids.tex
@@ -0,0 +1,481 @@
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{morefloats}
+\usepackage{tikz}
+\usepackage{braids}
+\usetikzlibrary{braids}
+\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\providecommand*{\url}{\texttt}
+\GetFileInfo{tikzlibrarybraids.code.tex}
+
+\title{The \textsf{braids} Package: Documentation}
+\author{Andrew Stacey \\ \texttt{loopspace@mathforge.org}}
+\date{\fileversion~from \filedate}
+
+\begin{document}
+
+\maketitle
+
+\begin{center}
+ \begin{tikzpicture}
+ \pic[
+ line width=1.5pt,
+ red,
+ line cap=round,
+ braid/.cd,
+ width=.75cm,
+ height=.5cm,
+ strand 3/.style={gray,line width=1pt},
+ strand 6/.style={gray,line width=1pt},
+ strand 7/.style={gray,line width=1pt},
+ strand 10/.style={gray,line width=1pt},
+ strand 14/.style={gray,line width=1pt},
+ strand 15/.style={gray,line width=1pt},
+ strand 16/.style={gray,line width=1pt},
+ strand 18/.style={gray,line width=1pt},
+ ] {braid={s_1-s_4-s_8-s_{12}-s_{16} s_2-s_5-s_7-s_9-s_{13}-s_{15} s_2-s_5-s_7-s_9-s_{15} s_1-s_4-s_8-s_{16} s_1-s_4-s_7-s_9-s_{17} s_2-s_5-s_{17} s_2-s_{13}-s_{16} s_1-s_{12}-s_{15}}};
+\end{tikzpicture}
+\end{center}
+
+\section{Introduction}
+
+This is a package for drawing braid diagrams using PGF/TikZ.
+An example follows.
+
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\pic[
+ rotate=90,
+ braid/.cd,
+ every strand/.style={ultra thick},
+ strand 1/.style={red},
+ strand 2/.style={green},
+ strand 3/.style={blue},
+] {braid={s_1 s_2^{-1} s_1 s_2^{-1} s_1 s_2^{-1}}};
+\end{tikzpicture}
+\end{center}
+\end{example}
+
+\section{TikZ Library Usage}
+
+Version 2.0 changed the implementation to use the TikZ \Verb+pic+ syntax.
+It also converted it to a TikZ library, so to use it put the following in the preamble.
+
+\begin{verbatim}
+\usetikzlibrary{braids}
+\end{verbatim}
+
+(Or add it to the copious list of TikZ libraries that you are already using.)
+
+\bigskip
+
+\DescribeMacro{braid}
+A braid is specified by the pic name \Verb+braid+.
+The usual syntax for this is as follows:
+
+\Verb+\pic[options] at (coordinate) {braid={braid-word}};+
+
+\DescribeMacro{braid-word}
+The \Verb+braid-word+ is an expression in the braid group, such as \Verb+s_1 s_2^{-1} s_{3,5}+.
+The generator labels are not significant.
+If the subscript is a single number, as in \Verb+s_2+, the crossing goes from that number over the next.
+If the subscript is two numbers, as in \Verb+s_{2,4}+, the crossing goes from the first over the second, with both the crossing strands passing over all of the intervening strands.
+The exponent can be \Verb+1+, \Verb+{-1}+, or missing (in which case it defaults to \Verb+1+, note also that the exponent is read as a \TeX-token so \Verb+{1}+ is also legal).
+If the exponent is \(-1\) then the over and under strands swap.
+
+\begin{itemize}
+\item \Verb+s_1+ is strand \(1\) over strand \(2\).
+\item \Verb+s_1^{-1}+ is strand \(2\) over strand \(1\).
+\item \Verb+s_{1,3}+ is strand \(1\) over strand \(3\), and both are over strand \(2\).
+\end{itemize}
+
+Certain other symbols are allowed in the \Verb+braid-word+ which control the rendering of the braid.
+These extras are as follows.
+
+\begin{enumerate}
+\item To get crossings to render at the same height, separate them with a hyphen (note: no check is made to ensure that the crossings can legally be put at the same height; \emph{caveat emptor}).
+For example, \Verb+s_1-s_3+.
+
+\item To draw a \emph{floor} -- which is a rectangle behind the braid occupying some number of levels (the default being one level) -- precede the braid element by a vertical line, as in \Verb+s_1 | s_2+.
+The floor is itself a pic which, by default, consists of a rectangle and two horizontal lines.
+The rectangle picks up any \Verb+fill+ options and the lines any \Verb+draw+ options that are set in the \Verb+braid/every floor+ and \Verb+braid/floor <n>+ styles.
+The \Verb+n+ is the level number, starting at \(1\).
+
+More general floors can be drawn using the key \Verb+braid/add floor+.
+This takes one argument which is a comma separated list of parameters that specifies the position and size floor:
+%
+\begin{verbatim}
+braid/add floor={x,y,width,height,name}
+\end{verbatim}
+%
+The units used are the ``natural'' units of the braid: strand separation and level height.
+The \Verb+name+ is optional and if given can be used to style the floor in that the style \Verb+braid/floor <name>+ is applied to that floor.
+
+Replacing the floor pic will change how it is drawn.
+The coordinate system is set up for the floor pic so that the floor is a unit square with lower left corner at the origin.
+
+\item The identity element can occur in the braid-word.
+It is represented by \Verb+1+.
+This inserts the identity which corresponds to no crossing.
+However, it takes the same amount of space as if there were a crossing.
+
+\end{enumerate}
+
+\subsection{Style Options}
+\label{sec:picstyleopts}
+
+There are various keys that change the behaviour or rendering of the braid.
+All of these are in the \Verb+/tikz/braid/+ namespace.
+
+\DescribeMacro{number of strands} The key \Verb+number of strands+ sets the minimum number of strands for the braid.
+The number of strands will grow according to the terms in the braid word so this merely sets a lower bound.
+If not set, the number of strands will be determined by the terms in the braid word.
+
+\DescribeMacro{height}
+The key \Verb+height+ sets the height of the piece of the braid corresponding to an element in the group.
+This can be negative.
+
+\DescribeMacro{width}
+The key \Verb+width+ sets the separation of the strands in the braid.
+This can be negative.
+
+\DescribeMacro{border height}
+The key \Verb+border height+ adds a little extra length to the strands at the start and end of the braid.
+
+\DescribeMacro{gap}
+The key \Verb+gap+ is used to determine how much of a gap to leave in the under strand at a crossing.
+This should be a number strictly between 0 and .5.
+The curve is drawn using a cubic bezier and the gap is in terms of the time parameter, so the gap will not increase exactly proportionally to the value given by this key, though that is a reasonable approximation.
+
+\DescribeMacro{control factor}
+As just said, the parts of the strands involved in a crossing are drawn using a cubic bezier curve.
+The control points are vertically above or below their respective end point.
+This key determines that vertical separation.
+It is multiplied by the \Verb+height+ so that it scales properly.
+It can be set to 0 whereupon the strands in the crossing are straight lines.
+The default is 0.5.
+
+\DescribeMacro{nudge factor}
+The crossings are not quite placed one after another.
+There is a small ``nudge'' between the end of one crossing and the start of another.
+Due to the way that the strands are lengthened, if there is no ``nudge'' then some PDF renderers produce slightly strange results at certain magnifications.
+This key controls how much that ``nudge'' is, as a factor of the \Verb+height+.
+For the aforementioned reason, it should not be set to 0 (the default is 0.05).
+Note that this does not change the height of a crossing.
+Rather, it nudges the height at which the strands start to cross over.
+
+\DescribeMacro{every strand, strand <n>}
+The style of the strands are controlled by two types of option.
+Style options that are set on the \Verb+pic+ are passed to every strand.
+It is also possible to add style options to individual strands using the keys \Verb+every strand+ and \Verb+strand <n>+.
+The strands are numbered by their starting position.
+
+\DescribeMacro{every floor, floor <n>}
+When a floor is requested behind a crossing, it is rendered as a pic.
+These keys control how the floor is styled.
+
+\subsection{Coordinates and Anchors}
+
+The braid is littered with coordinates.
+Each strand gets a coordinate at each end, and at every level between crossings.
+These are labelled and numbered by the initial strand position and the crossing level.
+They are also labelled and numbered by the final strand position with the prefix \Verb+rev+.
+With a \Verb+name prefix+, the coordinate names look like the following:
+%
+\begin{verbatim}
+<name prefix>-<strand number>-<crossing number>
+<name prefix>-rev-<strand number>-<crossing number>
+\end{verbatim}
+%
+The crossing number can also be either \Verb+s+ or \Verb+e+ for the start and end of the strand.
+Note that \Verb+-1-0+ and \Verb+-1-s+ are slightly different in that \Verb+s+ includes the border height.
+
+\DescribeMacro{anchor}
+The key \Verb+anchor+ (in the \Verb+braid+ name space) can be used to shift the braid so that a different part of it is at the specified location.
+It uses the same syntax as the coordinates, except without the \Verb+<name prefix>-+.
+In the following example, the braid is shifted so that where the third strand starts the second level is at the position \Verb+(1,1)+
+
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\fill[purple] (1,1) circle[radius=3mm];
+\pic[braid/anchor=3-2,rotate=90] at (1,1) {braid={s_2 s_1 s_2 s_1}};
+\end{tikzpicture}
+\end{center}
+\end{example}
+
+
+\section{Examples}
+
+Here are more detailed examples.
+
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\pic[
+ braid/every floor/.style={fill=yellow},
+ braid/floor 1/.style={draw=black,dashed,fill=yellow!50!green},
+ line width=2pt,
+ braid/strand 1/.style={red},
+ braid/strand 2/.style={blue},
+ braid/strand 3/.style={green},
+ braid/add floor={2,4,3,2,a},
+ braid/floor a/.style={fill=pink},
+ name prefix=braid,
+] at (2,0) {braid={| s_1-s_3-s_5 | s_2^{-1}-s_4| s_1-s_4 s_2^{-1} s_1-s_3 s_2^{-1}-s_4^{-1}}};
+\fill[yellow] (2,0) circle (4pt);
+\node[at=(braid-3-s),pin=north west:strand 3 start] {};
+\node[at=(braid-3-e),pin=south west:strand 3 end] {};
+\node[at=(braid-rev-3-s),pin=north east:strand 3 (from bottom) start] {};
+\node[at=(braid-rev-3-e),pin=south east:strand 3 (from bottom) end] {};
+\end{tikzpicture}
+\end{center}
+\end{example}
+
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\pic[
+ braid/.cd,
+ number of strands=3,
+ line width=8pt,
+ strand 1/.style={red},
+ strand 2/.style={green},
+ strand 3/.style={blue},
+ gap=0.1,
+ control factor=0,
+ nudge factor=0,
+ name prefix=braid,
+] {braid={a_2 a_1 a_2^{-1} a_1}};
+\node[circle,draw,fill=white,inner sep=0pt] at (braid-2-1) {\(+\)};
+\node[circle,draw,fill=white,inner sep=0pt] at (braid-3-1) {\(-\)};
+\node[circle,draw,fill=white,inner sep=0pt] at (braid-2-3) {\(+\)};
+\end{tikzpicture}
+\end{center}
+
+\end{example}
+
+\newpage
+
+\section{Original Package Usage (Depreciated)}
+
+The original version was as a separate package.
+This is still included for backwards compatibility.
+To use this package, you need to put the following in the preamble.
+
+\begin{verbatim}
+\usepackage{braids}
+\end{verbatim}
+
+\DescribeMacro{\braid}
+A braid is specified by the command \Verb+\braid+.
+The syntax for this command is as follows:
+
+\Verb+\braid[style options] (name) at (coordinate) braid-word;+
+
+\DescribeMacro{braid-word}
+The \Verb+braid-word+ is an expression in the braid group, such as \Verb+s_1 s_2^{-1}+.
+The generator labels are not significant.
+The exponent can be \Verb+1+, \Verb+{-1}+, or missing (in which case it defaults to \Verb+1+, note also that the exponent is read as a \TeX-token so \Verb+{1}+ is also legal).
+Certain other symbols are allowed in the \Verb+braid-word+ which control the rendering of the braid.
+These extras are as follows.
+
+\begin{enumerate}
+\item To get crossings to render at the same height, separate them with a hyphen (note: no check is made to ensure that the crossings can legally be put at the same height; \emph{caveat emptor}).
+
+\item To draw a \emph{floor}, precede the braid element by a vertical line.
+What happens then is that when the braid is rendered, the coordinates of the rectangle behind that crossing (wide enough to encompass all the strands) is passed to a command.
+The intention is that this command draw something behind the braid.
+The command is configurable by a key (see \ref{sec:styleopts}).
+
+\item The identity element can occur in the braid-word.
+It is represented by \Verb+1+.
+This inserts the identity which corresponds to no crossing.
+However, it takes the same amount of space as if there were a crossing.
+
+\item Strands can be labelled between crossings.
+To do this, the commands \Verb+\label+, \Verb+\olabel+, and \Verb+\clabel+ are provided.
+These take three arguments, the first is optional.
+The result of this command is to place a node on top of a particular strand between the crossings where the command is given.
+The first (optional) argument can be used to pass style options to this node.
+The second argument is the strand number.
+The third argument is the label text.
+
+The three commands differ as to how they interpret the strand number.
+For \Verb+\olabel+, the strand number is taken to mean the strand that starts at that position.
+For \Verb+\clabel+, the strand number is taken to mean the strand that is currently at that position.
+The behaviour of \Verb+\label+ is to choose one or other of these depending on whether the key \Verb+strand label by origin+ is true or false.
+This key only has an effect at the start of the braid-word; it cannot be reset in the middle.
+
+\item Style options can be given in the middle of a braid-word by enclosing them in square brackets.
+There are not many style options that it makes sense to change in the middle of the braid-word, since the strands are rendered all in one go at the end.
+
+\item Scoping is handled by using braces.
+Thus to change a style only briefly, enclose the desired scope in braces.
+\end{enumerate}
+
+\DescribeMacro{name}
+The (optional) \Verb+name+ acts a little like the \Verb+name+ of a TikZ node.
+When it is specified, the routine that renders the braid also saves certain coordinates as if they were node anchors.
+Specifically, \Verb+coordinate+ nodes are placed at the centre of the braid diagram and at the ends of each strand.
+The centre has the label \Verb+name+, the strands are labelled \Verb+name-number-end+ and \Verb+name-rev-number-end+, where \Verb+name+ is the name given to the braid, \Verb+number+ is the number of the strand counting from the left, and \Verb+end+ is either \Verb+s+ for the start or \Verb+e+ for the end.
+If the version with \Verb+rev+ is used then the numbers correspond to the \emph{final} positions of the braids.
+The name can also be specified with the \Verb+name+ key.
+
+\DescribeMacro{at}
+The (optional) \Verb+at (coordinate)+ syntax positions the braid at the \Verb+coordinate+ in the current picture.
+Due to the implementation, the coordinate has to be known at the start, but the width and height of the braid are only known at the end.
+Therefore, the braid is positioned so that the start of the first strand is at \Verb+(coordinate)+.
+This can also be specified using the \Verb+at+ key.
+
+\DescribeMacro{style options}
+The \Verb+style options+ set the style for the braid strands.
+They can be grouped into three types: options that set up the main parameters for the braid, options that set the default style for the strands, and options that set up styles for individual strands.
+The options are as follows.
+
+\subsection{Style Options}
+\label{sec:styleopts}
+
+\DescribeMacro{number of strands} The key \Verb+number of strands+ sets the minimum number of strands for the braid.
+The number of strands will grow according to the terms in the braid word so this merely sets a lower bound.
+If not set, the number of strands will be determined by the terms in the braid word.
+
+\DescribeMacro{height}
+The key \Verb+height+ sets the height of the piece of the braid corresponding to an element in the group.
+
+\DescribeMacro{width}
+The key \Verb+width+ sets the separation of the strands in the braid.
+
+\DescribeMacro{border height}
+The key \Verb+border height+ adds a little extra length to the strands at the start and end of the braid.
+
+\DescribeMacro{gap}
+The key \Verb+gap+ is used to determine how much of a gap to leave in the under strand at a crossing.
+This should be a number strictly between 0 and .5.
+The curve is drawn using a cubic bezier and the gap is in terms of the time parameter, so the gap will not increase exactly proportionally to the value given by this key, though that is a reasonable approximation.
+
+\DescribeMacro{control factor}
+As just said, the parts of the strands involved in a crossing are drawn using a cubic bezier curve.
+The control points are vertically above or below their respective end point.
+This key determines that vertical separation.
+It is multiplied by the \Verb+height+ so that it scales properly.
+It can be set to 0 whereupon the strands in the crossing are straight lines.
+The default is 0.5.
+
+\DescribeMacro{nudge factor}
+The crossings are not quite placed one after another.
+There is a small ``nudge'' between the end of one crossing and the start of another.
+Due to the way that the strands are lengthened, if there is no ``nudge'' then some PDF renderers produce slightly strange results at certain magnifications.
+This key controls how much that ``nudge'' is, as a factor of the \Verb+height+.
+For the aforementioned reason, it should not be set to 0 (the default is 0.05).
+Note that this does not change the height of a crossing.
+Rather, it nudges the height at which the strands start to cross over.
+
+\DescribeMacro{style strands}
+The style of the strands are controlled by two types of option.
+Style options that are set on the \Verb+\braid+ command are passed to every strand.
+It is also possible to add style options to individual strands using the key \Verb+style strands+.
+This takes two options, a comma-delimited list of strand numbers (which could be just a single number) and a list of options to be applied to that strand.
+Thus, the syntax is \Verb+style strands={n,m,...}{options}+.
+The strands are numbered by their starting position.
+Not all of the standard TikZ style options are possible due to the way that the strands are constructed.
+Basically, the options that are allowed are those that do not require changing the path or drawing it more than once.
+
+\DescribeMacro{floor command}
+When a floor is requested behind a crossing, the actual way to render it is determined by a command.
+This key allows the user to define that command.
+The argument to this key should be the code that should be executed for each floor.
+To avoid the hassle of getting the number of hashes right, the command should take no arguments.
+Rather, the coordinates of the rectangle are saved in to macros \Verb+\floorsx+, \Verb+\floorsy+, \Verb+\floorex+, \Verb+\floorey+ (these macros will expand to something like \Verb+10pt+) and the command should use these to position the drawing.
+The default is to draw a line at the top and at the bottom of the rectangle.
+
+\DescribeMacro{style floors}
+\DescribeMacro{style all floors}
+In the spirit of separating \emph{style} and \emph{content}, the style options for the floors can be specified separately to the command (of course, they could be built in to the command).
+One advantage of this over building them in to the command is to allow them to be overridden for individual floors.
+The \Verb+style all floors+ sets up options to be used for \emph{all} floors, whilst the \Verb+style floors={n,m,...}{options}+ sets up options to be used only for the listed floor.
+Anything specified in the \Verb+floor command+ will take precedence over both of these.
+
+Any other style options are passed to the underlying TikZ/PGF system and so may influence how the braid is drawn (but note that not all keys make sense due to the implementation).
+
+
+\section{Examples}
+
+Here are more detailed examples.
+
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\braid[
+ style all floors={fill=yellow},
+ style floors={1}{dashed,fill=yellow!50!green},
+ floor command={%
+ \fill (\floorsx,\floorsy) rectangle (\floorex,\floorey);
+ \draw (\floorsx,\floorsy) -- (\floorex,\floorsy);
+ },
+ line width=2pt,
+ style strands={1}{red},
+ style strands={2}{blue},
+ style strands={3}{green}
+] (braid) at (2,0) | s_1-s_3-s_5 | s_2^{-1}-s_4| s_1-s_4 s_2^{-1} s_1-s_3 s_2^{-1}-s_4^{-1};
+\fill[yellow] (2,0) circle (4pt);
+\fill[purple] (braid) circle (4pt);
+\node[at=(braid-3-s),pin=north west:strand 3] {};
+\node[at=(braid-3-e),pin=south west:strand 3] {};
+\node[at=(braid-rev-3-s),pin=north east:strand 3 (from bottom)] {};
+\node[at=(braid-rev-3-e),pin=south east:strand 3 (from bottom)] {};
+\end{tikzpicture}
+\end{center}
+\end{example}
+
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\braid[
+ number of strands=3,
+ line width=8pt,
+ style strands={1}{red},
+ style strands={2}{green},
+ style strands={3}{blue},
+ gap=0.1,
+ control factor=0,
+ nudge factor=0,
+ strand label by origin=true,
+ strand label/.style={circle,draw,fill=white,inner sep=0pt},
+ yscale=1] (braid_1) a_2 \label{2}{\(+\)} \clabel{2}{\(-\)} a_1 a_2^{-1} \olabel{2}{\(+\)} a_1;
+\end{tikzpicture}
+\end{center}
+
+\end{example}
+
+\end{document}
+% Local Variables:
+% tex-output-type: "pdf18"
+% End:
diff --git a/graphics/pgf/contrib/braids/braids_code.dtx b/graphics/pgf/contrib/braids/braids_code.dtx
new file mode 100644
index 0000000000..51a4ee2c60
--- /dev/null
+++ b/graphics/pgf/contrib/braids/braids_code.dtx
@@ -0,0 +1,2321 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+braids --- a style file for drawing braid diagrams with TikZ/PGF
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package defines some commands for drawing braid diagrams with TikZ/PGF.
+The initial idea of this package came from a question and answer on the site http://tex.stackexchange.com.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input l3docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+braids --- a style file for drawing braid diagrams with TikZ/PGF
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2011-2019 by Andrew Stacey <loopspace@mathforge.org>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Andrew Stacey.
+
+This work consists of the files braids.dtx
+ braids_doc.tex
+and the derived files README.txt,
+ braids.ins,
+ braids.pdf,
+ braids.sty,
+ tikzlibrarybraids.code.tex,
+ braids_doc.pdf.
+
+\endpostamble
+\usedir{tex/latex/braids}
+\generate{
+ \file{braids.sty}{\from{\jobname.dtx}{package}}
+}
+\generate{
+ \file{tikzlibrarybraids.code.tex}{\from{\jobname.dtx}{library}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/braids}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/braids}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{braids}[2011/10/18 v1.1 Tikz/PGF commands for drawing braid diagrams]
+%</package>
+%<*driver>
+\documentclass{l3doc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{tikz}
+\usepackage{braids}
+\usetikzlibrary{braids}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1949}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{1.0}{2011/05/03}{Converted to DTX file}
+% \changes{1.1}{2011/05/03}{Extended syntax}
+% \changes{2.0}{2019/03/20}{Converted TikZ library}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \GetFileInfo{tikzlibrarybraids.code.tex}
+% \title{The \textsf{braids} package: codebase}
+% \author{Andrew Stacey \\ \texttt{loopspace@mathforge.org}}
+% \date{\fileversion~from \filedate}
+%
+% \maketitle
+%
+% \section{Introduction}
+%
+% This is a package for drawing braid diagrams using PGF/TikZ.
+% Its inspiration was a question and answer on the website \texttt{http://tex.stackexchange.com}.
+%
+% \section{History}
+%
+% \begin{itemize}
+% \item v1.0 First public release.
+%
+% \item v1.1 Added ability to configure the gap size, the control points, and the ``nudge''.
+% Added ability to add labels to strands between crossings.
+%
+% \item v2 Reimplemented as TikZ library rather than a standalone package.
+% \end{itemize}
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% Issue a notice that this is a depreciated version of the braids package.
+% \begin{macrocode}
+\PackageWarning{braids}{%
+ This package has been reimplemented as a TikZ library; if starting with a fresh document, please consider using that instead.%
+}%
+% \end{macrocode}
+%
+% \begin{macro}[internal]{\ge@addto@macro}
+% This is an expanded version of \Verb+\g@addto@macro+.
+% Namely, it adds the \emph{expansion} of the second argument to the first.
+% \begin{macrocode}
+\long\def\ge@addto@macro#1#2{%
+ \begingroup
+ \toks@\expandafter\expandafter\expandafter{\expandafter#1#2}%
+ \xdef#1{\the\toks@}%
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\braid}
+% This is the user command.
+% We start a group to ensure that all our assignments are local, and then call our initialisation code.
+% The optional argument is for any keys to be set.
+% \begin{macrocode}
+\newcommand{\braid}[1][]{%
+ \begingroup
+ \braid@start{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@process}
+% This is the token swallower.
+% This takes the next token on the braid specification and passes it to the handler command (in the macro \Verb+\braid@token+) which decides what to do next.
+% (Incidentally, the code here is heavily influenced by TikZ.
+% That's probably not very surprising.)
+% \begin{macrocode}
+\def\braid@process{%
+ \afterassignment\braid@handle\let\braid@token=%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@process@start}
+% This is a variant of \Verb+\braid@process+ which is used at the start where we might have a few extra bits and pieces before the braid itself starts.
+% Specifically, we test for the \Verb+at+ and \Verb+(name)+ possibilities.
+% \begin{macrocode}
+\def\braid@process@start{%
+ \afterassignment\braid@handle@start\let\braid@token=%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@handle@start}
+% This is the handler in use at the start.
+% It looks for the tokens \Verb+a+ or \Verb+(+ which (might) signal the start of an \Verb+at (coordinate)+ or \Verb+(name)+.
+% If we get anything else (modulo spaces) we decide that we've reached the end of the initialisation stuff and it is time to get started on the braid itself.
+% \begin{macrocode}
+\def\braid@handle@start{%
+ \let\braid@next=\braid@handle
+ \ifx\braid@token a
+% \end{macrocode}
+% We got an \Verb+a+ so we might have an \Verb+at (coordinate)+
+% \begin{macrocode}
+ \let\braid@next=\braid@maybe@locate
+ \else
+ \ifx\braid@token(%)
+% \end{macrocode}
+% We got an \Verb+(+ so we have a name
+% \begin{macrocode}
+ \iffalse)\fi %Indentation hack!
+ \let\braid@next=\braid@assign@name
+ \else
+ \ifx\braid@token\@sptoken
+% \end{macrocode}
+% Space; boring, redo from start
+% \begin{macrocode}
+ \let\braid@next=\braid@process@start
+ \fi
+ \fi
+ \fi
+ \braid@next%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@handle}
+% This is the main handler for parsing the braid word.
+% It decides what action to take depending on what the token is.
+% We have to be a bit careful with catcodes, some packages set
+% \Verb+;+ and \Verb+|+ to be active.
+% We should probably also be careful with \Verb+^+ and \Verb+_+.
+% \begin{macrocode}
+\let\braid@semicolon=;
+\let\braid@bar=|
+\def\braid@handle{%
+ \let\braid@next=\braid@process
+% \end{macrocode}
+% Start by checking our catcodes to see what we should check against
+% \begin{macrocode}
+ \ifnum\the\catcode`\;=\active
+ \expandafter\let\expandafter\braid@semicolon\tikz@activesemicolon
+ \fi
+ \ifnum\the\catcode`\|=\active
+ \expandafter\let\expandafter\braid@bar\tikz@activebar
+ \fi
+ \ifx\braid@token\braid@semicolon
+% \end{macrocode}
+% Semicolon, means that we're done reading our braid.
+% It's time to render it.
+% \begin{macrocode}
+ \let\braid@next=\braid@render
+ \else
+ \ifx\braid@token^
+% \end{macrocode}
+% Superscript character, the next token tells us whether it's an over-crossing or an under-crossing.
+% \begin{macrocode}
+ \let\braid@next=\braid@sup
+ \else
+ \ifx\braid@token_
+% \end{macrocode}
+% Subscript character, the next token tells us which strands cross.
+% \begin{macrocode}
+ \let\braid@next=\braid@sub
+ \else
+ \ifx\braid@token-
+% \end{macrocode}
+% Hyphen, this is so that we can have more than one crossing on the same level.
+% \begin{macrocode}
+ \braid@increase@levelfalse
+ \else
+ \ifx\braid@token1%
+% \end{macrocode}
+% 1: this means the ``identity'' crossing, so no crossing here.
+% Increase the level, unless overriden, and add to the label.
+% \begin{macrocode}
+ \ifbraid@increase@level
+ \stepcounter{braid@level}
+ \fi
+ \braid@increase@leveltrue
+ \ge@addto@macro\braid@label{\braid@token}%
+ \else
+ \ifx\braid@token[%
+% \end{macrocode}
+% Open bracket, this means we have some more options to process.
+% \begin{macrocode}
+ \let\braid@next=\braid@process@options
+ \else
+ \ifx\braid@token\braid@bar
+% \end{macrocode}
+% Bar, this tells us that we want a ``floor'' at this point.
+% \begin{macrocode}
+ \edef\braid@tmp{,\expandafter\the\value{braid@level}}%
+ \ge@addto@macro\braid@floors\braid@tmp%
+ \else
+ \ifx\braid@token\bgroup
+% \end{macrocode}
+% Begin group, which we reinterpret as begining a scope.
+% \begin{macrocode}
+ \braid@beginscope
+ \else
+ \ifx\braid@token\egroup
+% \end{macrocode}
+% End group, which ends the scope
+% \begin{macrocode}
+ \braid@endscope
+ \else
+ \ifx\braid@token\braid@olabel@strand
+ \let\braid@next=\braid@olabel@strand
+ \else
+ \ifx\braid@token\braid@clabel@strand
+ \let\braid@next=\braid@clabel@strand
+ \else
+% \end{macrocode}
+% Otherwise, we add the token to the braid label.
+% \begin{macrocode}
+ \ge@addto@macro\braid@label{\braid@token}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \braid@next%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@maybe@locate}
+% If we got an \Verb+a+ token in the \Verb+\braid@handle@start+ then it \emph{might} mean we're looking at \Verb+at (coordinate)+ or it might mean that the user has decided to use \Verb+a+ as the braid parameter.
+% So we examine the next token for a \Verb+t+.
+% \begin{macrocode}
+\def\braid@maybe@locate{%
+ \afterassignment\braid@@maybe@locate\let\braid@token=%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@@maybe@locate}
+% This is where we test for \Verb+t+ and act appropriately.
+% \begin{macrocode}
+\def\braid@@maybe@locate{%
+ \let\braid@next=\braid@handle
+ \ifx\braid@token t
+ \let\braid@next=\braid@find@location
+ \fi
+ \braid@next%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@find@location}
+% This macro starts us looking for a coordinate.
+% \begin{macrocode}
+\def\braid@find@location{%
+ \afterassignment\braid@@find@location\let\braid@token=%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@@find@location}
+% This is the test for the start of a coordinate.
+% If we get a \Verb+(+ that means we've reached the coordinate.
+% A space means ``carry on''.
+% Anything else is a (non-fatal) error.
+% \begin{macrocode}
+\def\braid@@find@location{%
+ \let\braid@next=\braid@location@error
+ \ifx\braid@token(%)
+ \let\braid@next=\braid@locate
+ \else
+ \ifx\braid@token\@sptoken
+ \let\braid@next=\braid@find@location
+ \fi
+ \fi
+ \braid@next%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@location@error}
+% This is our error message for not getting a location.
+% \begin{macrocode}
+\def\braid@location@error{%
+ \PackageWarning{braids}{Could not figure out location for braid}%
+ \braid@process@start%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@locate}
+% If we reached a \Verb+(+ when looking for a coordinate, everything up to the next \Verb+)+ is that coordinate.
+% Then we parse the coordinate and call the relocation macro.
+% \begin{macrocode}
+\def\braid@locate#1){%
+ \tikz@scan@one@point\braid@relocate(#1)%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@relocate}
+% This is the macro that actually does the relocation.
+% \begin{macrocode}
+\def\braid@relocate#1{%
+ #1\relax
+ \advance\pgf@x by -\braid@width
+ \pgftransformshift{\pgfqpoint{\pgf@x}{\pgf@y}}
+ \braid@process@start%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@assign@name}
+% This macro saves our name.
+% \begin{macrocode}
+\def\braid@assign@name#1){%
+ \def\braid@name{#1}%
+ \braid@process@start%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@process@options}
+% The intention of this macro is to allow setting of style options mid-braid.
+% (At present, this wouldn't make a lot of sense.)
+% \begin{macrocode}
+\def\braid@process@options#1]{%
+ \tikzset{#1}%
+ \braid@process%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% The next macros handle the actual braid elements.
+% Everything has to have a subscript, but the superscript is optional and can come before or after the subscript.
+%
+% \begin{macro}[internal]{\braid@sup}
+% This handles braid elements of the form \Verb+a^{-1}_2+.
+% \begin{macrocode}
+\def\braid@sup#1_#2{%
+ \g@addto@macro\braid@label{_{#2}^{#1}}%
+ \braid@add@crossing{#2}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@sub}
+% \begin{macrocode}
+% This handles braid elements of the form \Verb+a_1+ or \Verb+a_1^{-1}+.
+\def\braid@sub#1{%
+ \@ifnextchar^{\braid@@sub{#1}}%
+ {\g@addto@macro\braid@label{_{#1}}\braid@add@crossing{#1}{1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@@sub}
+% Helper macro for \Verb+\braid@sub+.
+% \begin{macrocode}
+\def\braid@@sub#1^#2{%
+ \g@addto@macro\braid@label{_{#1}^{#2}}%
+ \braid@add@crossing{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@ne}
+% Remember what \Verb+1+ looks like for testing against.
+% \begin{macrocode}
+\def\braid@ne{1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@add@crossing}
+% This is the macro which adds the crossing to the current list of strands.
+% The strands are stored as \emph{soft paths} (see the TikZ/PGF documentation).
+% So this selects the right strands and then extends them according to the crossing type.
+% \begin{macrocode}
+\def\braid@add@crossing#1#2{%
+% \end{macrocode}
+% Our crossing type, which is \Verb+#2+, is one of \Verb+1+ or \Verb+-1+.
+% Our strands are \Verb+#1+ and \Verb-#1+1-.
+% \begin{macrocode}
+ \edef\braid@crossing@type{#2}%
+ \edef\braid@this@strand{#1}%
+ \pgfmathtruncatemacro{\braid@next@strand}{#1+1}
+% \end{macrocode}
+% Increment the level counter, if requested.
+% The controls whether the crossing is on the same level as the previous one or is one level further on.
+% \begin{macrocode}
+ \ifbraid@increase@level
+ \stepcounter{braid@level}
+ \fi
+% \end{macrocode}
+% Default is to request increment so we set it for next time.
+% \begin{macrocode}
+ \braid@increase@leveltrue
+% \end{macrocode}
+% Now we figure out the coordinates of the crossing.
+% \Verb+(\braid@tx,\braid@ty)+ is the top-left corner (assuming the braid flows down the page).
+% \Verb+(\braid@nx,\braid@ny)+ is the bottom-right corner (assuming the braid flows down the page).
+% We start by setting \Verb+(\braid@tx,\braid@ty)+ according to the level and strand number, then shift \Verb+\braid@ty+ by \Verb+\braid@eh+ which is the ``edge height'' (the little extra at the start and end of each strand).
+% Then from these values, we set \Verb+(\braid@nx,\braid@ny)+ by adding on the appropriate amount.
+% The heights \Verb+\braid@cy+ and \Verb+\braid@dy+ are for the control points for the strands as they cross.
+% They're actually the same height, but using two gives us the possibility of changing them independently in a later version of this package.
+% Lastly, we bring \Verb+\braid@ty+ and \Verb+\braid@ny+ towards each other just a little so that there is ``clear water'' between subsequent crossings (makes it look a bit better if the same strand is used in subsequent crossings).
+% \begin{macrocode}
+ \braid@tx=\braid@this@strand\braid@width
+ \braid@ty=\value{braid@level}\braid@height
+ \advance\braid@ty by \braid@eh
+ \braid@nx=\braid@tx
+ \braid@ny=\braid@ty
+ \advance\braid@nx by \braid@width
+ \advance\braid@ny by \braid@height
+ \advance\braid@ty by \braid@nf\braid@height
+ \advance\braid@ny by -\braid@nf\braid@height
+ \braid@cy=\braid@ty
+ \braid@dy=\braid@ny
+ \advance\braid@cy by \braid@cf\braid@height
+ \advance\braid@dy by -\braid@cf\braid@height
+% \end{macrocode}
+% Now we try to find a starting point for the strand ending here.
+% We might not have used this strand before, so it might not exist.
+% \begin{macrocode}
+ \expandafter\let\expandafter\braid@this@path@origin%
+ \csname braid@strand@\braid@this@strand @origin\endcsname
+% \end{macrocode}
+% If we haven't seen this strand before, that one will be \Verb+\relax+.
+% \begin{macrocode}
+\ifx\braid@this@path@origin\relax
+% \end{macrocode}
+% Haven't seen this strand before, so initialise it.
+% Record the initial position of the strand.
+% \begin{macrocode}
+ \let\braid@this@path@origin\braid@this@strand
+% \end{macrocode}
+% Start a new soft path.
+% \begin{macrocode}
+ \pgfsyssoftpath@setcurrentpath{\@empty}
+ \pgfpathmoveto{\pgfpoint{\braid@tx}{0pt}}
+% \end{macrocode}
+% Save the path as \Verb+\braid@this@path+.
+% \begin{macrocode}
+ \pgfsyssoftpath@getcurrentpath{\braid@this@path}
+ \else
+% \end{macrocode}
+% We have seen this before, so we simply copy the associated path in to \Verb+\braid@this@path+.
+% \begin{macrocode}
+ \expandafter\let\expandafter\braid@this@path%
+ \csname braid@strand@\braid@this@path@origin\endcsname
+ \fi
+% \end{macrocode}
+% Now we do the same again with the other strand in the crossing.
+% \begin{macrocode}
+ \expandafter\let\expandafter\braid@next@path@origin%
+ \csname braid@strand@\braid@next@strand @origin\endcsname
+ \ifx\braid@next@path@origin\relax
+ \let\braid@next@path@origin\braid@next@strand
+ \pgfsyssoftpath@setcurrentpath{\@empty}
+ \pgfpathmoveto{\pgfpoint{\braid@nx}{0pt}}
+ \pgfsyssoftpath@getcurrentpath{\braid@next@path}
+ \else
+ \expandafter\let\expandafter\braid@next@path%
+ \csname braid@strand@\braid@next@path@origin\endcsname
+ \fi
+% \end{macrocode}
+% Now that we have the paths for our two strands, we extend them to the next level.
+% We start by selecting the first path.
+% \begin{macrocode}
+ \pgfsyssoftpath@setcurrentpath{\braid@this@path}
+% \end{macrocode}
+% Draw a line down to the current level, note that this line is always non-trivial since we shifted the corners of the crossing in a little.
+% \begin{macrocode}
+ \pgfpathlineto{\pgfqpoint{\braid@tx}{\braid@ty}}
+% \end{macrocode}
+% Curve across to the next position.
+% Depending on the crossing type, we either have a single curve or we have to break it in two.
+% Our gap is to interrupt at times determined by the gap key.
+% \begin{macrocode}
+\pgfmathsetmacro{\braid@gst}{0.5 - \pgfkeysvalueof{/pgf/braid/gap}}%
+\pgfmathsetmacro{\braid@gend}{0.5 + \pgfkeysvalueof{/pgf/braid/gap}}%
+\ifx\braid@crossing@type\braid@over@cross
+% \end{macrocode}
+% We're on the overpass, so just one curve needed.
+% \begin{macrocode}
+ \pgfpathcurveto{\pgfqpoint{\braid@tx}{\braid@cy}}%
+ {\pgfqpoint{\braid@nx}{\braid@dy}}%
+ {\pgfqpoint{\braid@nx}{\braid@ny}}
+\else
+% \end{macrocode}
+% We're on the underpass, so we need to interrupt our path to allow the other curve to go past.
+% \begin{macrocode}
+ \pgfpathcurvebetweentimecontinue{0}{\braid@gst}%
+ {\pgfqpoint{\braid@tx}{\braid@ty}}%
+ {\pgfqpoint{\braid@tx}{\braid@cy}}%
+ {\pgfqpoint{\braid@nx}{\braid@dy}}%
+ {\pgfqpoint{\braid@nx}{\braid@ny}}%
+ \pgfpathcurvebetweentime{\braid@gend}{1}%
+ {\pgfqpoint{\braid@tx}{\braid@ty}}%
+ {\pgfqpoint{\braid@tx}{\braid@cy}}%
+ {\pgfqpoint{\braid@nx}{\braid@dy}}%
+ {\pgfqpoint{\braid@nx}{\braid@ny}}
+\fi
+% \end{macrocode}
+% We're done with this path, so now we save it.
+% \begin{macrocode}
+ \pgfsyssoftpath@getcurrentpath{\braid@this@path}
+% \end{macrocode}
+% Now do the same with the second path.
+% \begin{macrocode}
+ \pgfsyssoftpath@setcurrentpath{\braid@next@path}
+ \pgfpathlineto{\pgfqpoint{\braid@nx}{\braid@ty}}
+\ifx\braid@crossing@type\braid@over@cross
+ \pgfpathcurvebetweentimecontinue{0}{\braid@gst}%
+ {\pgfqpoint{\braid@nx}{\braid@ty}}%
+ {\pgfqpoint{\braid@nx}{\braid@cy}}%
+ {\pgfqpoint{\braid@tx}{\braid@dy}}%
+ {\pgfqpoint{\braid@tx}{\braid@ny}}
+ \pgfpathcurvebetweentime{\braid@gend}{1}%
+ {\pgfqpoint{\braid@nx}{\braid@ty}}%
+ {\pgfqpoint{\braid@nx}{\braid@cy}}%
+ {\pgfqpoint{\braid@tx}{\braid@dy}}%
+ {\pgfqpoint{\braid@tx}{\braid@ny}}
+\else
+ \pgfpathcurveto{\pgfqpoint{\braid@nx}{\braid@cy}}%
+ {\pgfqpoint{\braid@tx}{\braid@dy}}%
+ {\pgfqpoint{\braid@tx}{\braid@ny}}
+\fi
+ \pgfsyssoftpath@getcurrentpath{\braid@next@path}
+% \end{macrocode}
+% Now save the paths to their proper macros again.
+% \begin{macrocode}
+ \expandafter\let%
+ \csname braid@strand@\braid@this@path@origin \endcsname%
+ \braid@this@path
+ \expandafter\let%
+ \csname braid@strand@\braid@next@path@origin \endcsname%
+ \braid@next@path
+% \end{macrocode}
+% Now update the origins
+% \begin{macrocode}
+ \expandafter\let%
+ \csname braid@strand@\braid@this@strand @origin\endcsname%
+ \braid@next@path@origin
+ \expandafter\let%
+ \csname braid@strand@\braid@next@strand @origin\endcsname%
+ \braid@this@path@origin
+% \end{macrocode}
+% increment the strand counter, if necessary
+% \begin{macrocode}
+ \pgfmathparse{\value{braid@strands} < \braid@next@strand ?
+ "\noexpand\setcounter{braid@strands}{\braid@next@strand}" : ""}
+ \pgfmathresult
+% \end{macrocode}
+% And merrily go on our way with the next bit of the braid specification.
+% \begin{macrocode}
+ \braid@process%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@olabel@strand}
+% This macro allows us to label a strand just before a crossing.
+% The first argument is the strand number at that particular crossing and the second is the label.
+% We also save the current height.
+% This version takes the strand number as meaning the \emph{original} ordering.
+% \begin{macrocode}
+\newcommand{\braid@olabel@strand}[3][]{%
+ \edef\braid@tmp{{\the\value{braid@level}}}%
+ \expandafter\ifx\csname braid@strand@#2@origin\endcsname\relax
+ \g@addto@macro\braid@tmp{{#2}}%
+ \else
+ \edef\braid@tmpa{{\csname braid@strand@#2@origin\endcsname}}%
+ \ge@addto@macro\braid@tmp{\braid@tmpa}%
+ \fi
+ \g@addto@macro\braid@tmp{{#3}{#1}}%
+ \ge@addto@macro{\braid@strand@labels}{\braid@tmp}%
+ \braid@process%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@clabel@strand}
+% This macro allows us to label a strand just before a crossing.
+% The first argument is the strand number at that particular crossing and the second is the label.
+% We also save the current height.
+% This version takes the strand number as meaning the \emph{current} ordering.
+% \begin{macrocode}
+\newcommand{\braid@clabel@strand}[3][]{%
+ \edef\braid@tmp{{\the\value{braid@level}}}%
+ \g@addto@macro\braid@tmp{{#2}{#3}{#1}}%
+ \ge@addto@macro{\braid@strand@labels}{\braid@tmp}%
+ \braid@process%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@floors@trim}
+% The list of floors, if given, will start with a superfluous comma.
+% This removes it.
+% \begin{macrocode}
+\def\braid@floors@trim,{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@render@floor}
+% This is the default rendering for floors: it draws a rectangle.
+% \begin{macrocode}
+\def\braid@render@floor{%
+ \draw (\floorsx,\floorsy) rectangle (\floorex,\floorey);
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@render@strand@labels}
+% This starts rendering the labels on the strands at the crossings.
+% \begin{macrocode}
+\def\braid@render@strand@labels#1{%
+ \def\braid@tmp{#1}%
+ \ifx\braid@tmp\pgfutil@empty
+ \let\braid@next=\pgfutil@gobble
+ \else
+ \let\braid@next=\braid@@render@strand@labels
+ \fi
+ \braid@next{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@@render@strand@labels}
+% This is the actual renderer.
+% \begin{macrocode}
+\def\braid@@render@strand@labels#1#2#3#4{%
+ \begingroup
+ \pgfscope
+ \let\tikz@options=\pgfutil@empty
+ \let\tikz@mode=\pgfutil@empty
+ \let\tik@transform=\pgfutil@empty
+ \let\tikz@fig@name=\pgfutil@empty
+ \tikzset{/pgf/braid/strand label,#4}%
+ \braid@nx=#2\braid@width
+ \braid@ny=#1\braid@height
+ \advance\braid@ny by \braid@eh
+ \advance\braid@ny by \braid@height
+ \pgftransformshift{\pgfqpoint{\braid@nx}{\braid@ny}}%
+ \tikz@options
+ \setbox\pgfnodeparttextbox=\hbox%
+ \bgroup%
+ \tikzset{every text node part/.try}%
+ \ifx\tikz@textopacity\pgfutil@empty%
+ \else%
+ \pgfsetfillopacity{\tikz@textopacity}%
+ \pgfsetstrokeopacity{\tikz@textopacity}%
+ \fi%
+ \pgfinterruptpicture%
+ \tikz@textfont%
+ \ifx\tikz@text@width\pgfutil@empty%
+ \else%
+ \begingroup%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@width}%
+ \pgfutil@minipage[t]{\pgf@x}\leavevmode\hbox{}%
+ \tikz@text@action%
+ \fi%
+ \tikz@atbegin@node%
+ \bgroup%
+ \aftergroup\unskip%
+ \ifx\tikz@textcolor\pgfutil@empty%
+ \else%
+ \pgfutil@colorlet{.}{\tikz@textcolor}%
+ \fi%
+ \pgfsetcolor{.}%
+ \setbox\tikz@figbox=\box\pgfutil@voidb@x%
+ \tikz@uninstallcommands%
+ \tikz@halign@check%
+ \ignorespaces%
+ #3
+ \egroup
+ \tikz@atend@node%
+ \ifx\tikz@text@width\pgfutil@empty%
+ \else%
+ \pgfutil@endminipage%
+ \endgroup%
+ \fi%
+ \endpgfinterruptpicture%
+ \egroup%
+ \ifx\tikz@text@width\pgfutil@empty%
+ \else%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@width}%
+ \wd\pgfnodeparttextbox=\pgf@x%
+ \fi%
+ \ifx\tikz@text@height\pgfutil@empty%
+ \else%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@height}%
+ \ht\pgfnodeparttextbox=\pgf@x%
+ \fi%
+ \ifx\tikz@text@depth\pgfutil@empty%
+ \else%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@depth}%
+ \dp\pgfnodeparttextbox=\pgf@x%
+ \fi%
+ \pgfmultipartnode{\tikz@shape}{\tikz@anchor}{\tikz@fig@name}{%
+ {\begingroup\tikz@finish}%
+ }%
+ \endpgfscope
+ \endgroup
+ \braid@render@strand@labels%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@render}
+% This is called at the end of the braid and it renders the braids and floors according to whatever has been built up up to now.
+% \begin{macrocode}
+\def\braid@render{
+% \end{macrocode}
+% Check for floors since we do them first.
+% \begin{macrocode}
+ \ifx\braid@floors\@empty
+ \else
+% \end{macrocode}
+% Have some floors, start a scope and prepare to render them.
+% \begin{macrocode}
+ \pgfsys@beginscope
+% \end{macrocode}
+% Clear the path (just to be sure).
+% \begin{macrocode}
+ \pgfsyssoftpath@setcurrentpath{\empty}
+% \end{macrocode}
+% Trim the initial comma off the list of floors.
+% \begin{macrocode}
+ \edef\braid@floors{\expandafter\braid@floors@trim\braid@floors}
+% \end{macrocode}
+% Initialise our horizontal coordinates.
+% \begin{macrocode}
+ \braid@tx=\braid@width
+ \advance\braid@tx by \braid@eh
+ \braid@nx=\value{braid@strands}\braid@width
+ \advance\braid@nx by -\braid@eh
+% \end{macrocode}
+% Loop over the list of floors.
+% \begin{macrocode}
+ \foreach \braid@f in \braid@floors {
+ \pgfsys@beginscope
+% \end{macrocode}
+% Figure out the vertical coordinates for the current floor.
+% \begin{macrocode}
+ \braid@ty=\braid@f\braid@height
+ \advance\braid@ty by \braid@eh
+ \advance\braid@ty by \braid@height
+ \braid@ny=\braid@ty
+ \advance\braid@ny by \braid@height
+% \end{macrocode}
+% Save the coordinates for use in the floor rendering macro.
+% \begin{macrocode}
+ \edef\floorsx{\the\braid@tx}
+ \edef\floorsy{\the\braid@ty}
+ \edef\floorex{\the\braid@nx}
+ \edef\floorey{\the\braid@ny}
+ \let\tikz@options=\pgfutil@empty
+% \end{macrocode}
+% Load general floor style options.
+% \begin{macrocode}
+ \expandafter\tikzset\expandafter{\braid@floors@style}
+% \end{macrocode}
+% Load any style options specific to this floor.
+% We're actually offset by 2 from what the user thinks the floor level is.
+% \begin{macrocode}
+ \pgfmathtruncatemacro{\braid@ff}{\braid@f+2}
+% \end{macrocode}
+% Load the relevant floor style, if it exists.
+% \begin{macrocode}
+ \expandafter\let\expandafter\braid@floor@style%
+ \csname braid@options@floor@\braid@ff\endcsname
+ \ifx\braid@floor@style\relax
+ \else
+% \end{macrocode}
+% There is a floor style for this level, so process it.
+% \begin{macrocode}
+ \expandafter\tikzset\expandafter{\braid@floor@style}%
+ \fi
+% \end{macrocode}
+% The \Verb+\tikzset+ just parses the options, we need to call \Verb+\tikz@options+ to actually set them.
+% \begin{macrocode}
+\tikz@options
+% \end{macrocode}
+% Now we call the rendering code.
+% \begin{macrocode}
+\braid@render@floor
+% \end{macrocode}
+% Done!
+% End the scope for \emph{this} floor and go again.
+% \begin{macrocode}
+\pgfsys@endscope
+ }
+% \end{macrocode}
+% Done rendering floors, end the scope.
+% \begin{macrocode}
+ \pgfsys@endscope
+ \fi
+% \end{macrocode}
+% Finished with floors (if we had them), now get on with the strands.
+% \begin{macrocode}
+ \stepcounter{braid@level}
+ \foreach \braid@k in {1,...,\value{braid@strands}} {
+% \end{macrocode}
+% Start a local scope to ensure we don't mess with other braids
+% \begin{macrocode}
+ \pgfsys@beginscope
+% \end{macrocode}
+% Default is to draw each braid
+% \begin{macrocode}
+ \tikz@mode@drawtrue%
+ \let\tikz@mode=\pgfutil@empty
+ \let\tikz@options=\pgfutil@empty
+% \end{macrocode}
+% (x,y) coordinates of bottom of strand
+% \begin{macrocode}
+ \braid@tx=\braid@k\braid@width
+ \braid@ty=\value{braid@level}\braid@height
+ \advance\braid@ty by 2\braid@eh
+% \end{macrocode}
+% Try to find the starting point of this strand
+% \begin{macrocode}
+ \expandafter\let\expandafter\braid@path@origin%
+ \csname braid@strand@\braid@k @origin\endcsname
+ \ifx\braid@path@origin\relax
+% \end{macrocode}
+% If that doesn't exist, we'll just draw a straight line
+% so we move to the top of the current position
+% \begin{macrocode}
+ \pgfsyssoftpath@setcurrentpath{\@empty}
+ \pgfpathmoveto{\pgfqpoint{\braid@tx}{0pt}}
+ \let\braid@path@origin\braid@k
+ \else
+% \end{macrocode}
+% If the path does exist, we load it
+% \begin{macrocode}
+ \expandafter\let\expandafter\braid@path%
+ \csname braid@strand@\braid@path@origin\endcsname
+ \pgfsyssoftpath@setcurrentpath{\braid@path}
+ \fi
+% \end{macrocode}
+% Extend the path to the bottom
+% \begin{macrocode}
+ \pgflineto{\pgfqpoint{\braid@tx}{\braid@ty}}
+% \end{macrocode}
+% Load common style options
+% \begin{macrocode}
+ \expandafter\tikzset\expandafter{\braid@style}
+% \end{macrocode}
+% Load any style options specific to this strand
+% \begin{macrocode}
+ \expandafter\let\expandafter\braid@style%
+ \csname braid@options@strand@\braid@path@origin\endcsname
+ \ifx\braid@style\relax
+ \else
+ \expandafter\tikzset\expandafter{\braid@style}
+ \fi
+\braid@options
+ \tikz@mode
+ \tikz@options
+% \end{macrocode}
+% This is the command that actually draws the strand.
+% \begin{macrocode}
+ \edef\tikz@temp{\noexpand\pgfusepath{%
+ \iftikz@mode@draw draw\fi%
+ }}%
+ \tikz@temp
+% \end{macrocode}
+% If our braid has a name, we label the ends of the strand.
+% \begin{macrocode}
+\ifx\braid@name\pgfutil@empty
+\else
+% \end{macrocode}
+% Label the ends of the strand.
+% \begin{macrocode}
+\coordinate (\braid@name-\braid@path@origin-e) at (\braid@tx,\braid@ty);
+\coordinate (\braid@name-rev-\braid@k-e) at (\braid@tx,\braid@ty);
+\braid@nx=\braid@path@origin\braid@width
+\coordinate (\braid@name-\braid@path@origin-s) at (\braid@nx,0pt);
+\coordinate (\braid@name-rev-\braid@k-s) at (\braid@nx,0pt);
+\fi
+% \end{macrocode}
+% Done with this strand, close the scope and do the next one.
+% \begin{macrocode}
+ \pgfsys@endscope
+ }
+% \end{macrocode}
+% If our braid has a name, we also want to label the centre.
+% \begin{macrocode}
+ \ifx\braid@name\pgfutil@empty
+ \else
+ \braid@tx=\value{braid@strands}\braid@width
+ \braid@ty=\value{braid@level}\braid@height
+ \advance\braid@ty by 2\braid@eh
+ \advance\braid@tx by \braid@width
+ \braid@tx=.5\braid@tx
+ \braid@ty=.5\braid@ty
+ \coordinate (\braid@name) at (\braid@tx,\braid@ty);
+ \fi
+% \end{macrocode}
+% Now we label the strands if needed.
+% \begin{macrocode}
+ \ifx\braid@strand@labels\pgfutil@empty
+ \else
+ \expandafter\braid@render@strand@labels\braid@strand@labels{}%
+ \fi
+% \end{macrocode}
+% All done now, close the scope and end the group (which was opened right at the start).
+% \begin{macrocode}
+ \pgfsys@endscope
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\braid@start}
+% This starts off the braid, initialising a load of stuff.
+% We start a PGF scope, set the level to \(-1\), the label, floors, and name to empty, process any options we're given, and save certain lengths for later use..
+% \begin{macrocode}
+\def\braid@start#1{%
+ \pgfsys@beginscope
+ \setcounter{braid@level}{-1}%
+ \let\braid@label\@empty
+ \let\braid@strand@labels\@empty
+ \let\braid@floors\@empty
+ \let\braid@name\empty
+ \let\clabel=\braid@clabel@strand
+ \let\olabel=\braid@olabel@strand
+ \pgfkeys{/pgf/braid/.cd,#1}%
+ \ifbraid@strand@labels@origin
+ \let\label=\braid@olabel@strand
+ \else
+ \let\label=\braid@clabel@strand
+ \fi
+ \let\braid@options\tikz@options
+ \tikz@transform
+ \setcounter{braid@strands}{%
+ \pgfkeysvalueof{/pgf/braid/number of strands}}%
+ \braid@width=\pgfkeysvalueof{/pgf/braid/width}%
+ \braid@height=\pgfkeysvalueof{/pgf/braid/height}%
+ \braid@eh=\pgfkeysvalueof{/pgf/braid/border height}%
+ \pgfkeysgetvalue{/pgf/braid/control factor}{\braid@cf}%
+ \pgfkeysgetvalue{/pgf/braid/nudge factor}{\braid@nf}%
+ \braid@height=-\braid@height
+ \braid@eh=-\braid@eh
+ \braid@increase@leveltrue
+ \braid@process@start
+}
+% \end{macrocode}
+% \end{macro}
+%
+% These are the lengths we'll use as we construct the braid
+% \begin{macrocode}
+\newdimen\braid@width
+\newdimen\braid@height
+\newdimen\braid@tx
+\newdimen\braid@ty
+\newdimen\braid@nx
+\newdimen\braid@ny
+\newdimen\braid@cy
+\newdimen\braid@dy
+\newdimen\braid@eh
+% \end{macrocode}
+%
+% An if to decide whether or not to step to the next level or not
+% \begin{macrocode}
+\newif\ifbraid@increase@level
+% \end{macrocode}
+% An if to decide whether label indices should be absolute or not
+% \begin{macrocode}
+\newif\ifbraid@strand@labels@origin
+% \end{macrocode}
+%
+%
+% Some initial values
+% \begin{macrocode}
+\let\braid@style\pgfutil@empty
+\let\braid@floors@style\pgfutil@empty
+\def\braid@over@cross{1}
+% \end{macrocode}
+%
+% Counters to track the strands and the levels.
+% \begin{macrocode}
+\newcounter{braid@level}
+\newcounter{braid@strands}
+% \end{macrocode}
+%
+% All the keys we'll use.
+% \begin{macrocode}
+\pgfkeys{
+% \end{macrocode}
+% Handle unknown keys by passing them to \Verb+pgf+ and \Verb+tikz+.
+% \begin{macrocode}
+ /tikz/braid/.search also={/pgf},
+ /pgf/braid/.search also={/pgf,/tikz},
+% \end{macrocode}
+% Our ``namespace'' is \Verb+/pgf/braid+.
+% \begin{macrocode}
+ /pgf/braid/.cd,
+ number of strands/.initial=0,
+ height/.initial=1cm,
+ width/.initial=1cm,
+ gap/.initial=.1,
+ border height/.initial=.25cm,
+ control factor/.initial=.5,
+ nudge factor/.initial=.05,
+ name/.code={%
+ \def\braid@name{#1}%
+ },
+ at/.code={%
+ \braid@relocate{#1}%
+ },
+ floor command/.code={%
+ \def\braid@render@floor{#1}%
+ },
+ style strands/.code 2 args={%
+ \def\braid@temp{#2}%
+ \braidset{style each strand/.list={#1}}%
+ },
+ style each strand/.code={%
+ \expandafter\edef%
+ \csname braid@options@strand@#1\endcsname{\braid@temp}%
+ },
+ style floors/.code 2 args={%
+ \def\braid@temp{#2}%
+ \braidset{style each floor/.list={#1}}%
+ },
+ style each floor/.code={%
+ \expandafter\edef%
+ \csname braid@options@floor@#1\endcsname{\braid@temp}%
+ },
+ style all floors/.code={%
+ \def\braid@floors@style{#1}
+ },
+ strand label/.style={},
+ strand label by origin/.is if=braid@strand@labels@origin,
+}
+% \end{macrocode}
+% \begin{macro}{\braidset}
+% Shorthand for setting braid-specific keys.
+% \begin{macrocode}
+\def\braidset#1{%
+ \pgfkeys{/pgf/braid/.cd,#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</package>
+% \fi
+% \begin{macrocode}
+%<*library>
+%<@@=braid>
+% \end{macrocode}
+%
+% \section{Reimplementation as a TikZ Library}
+%
+% Life is so much easier with \LaTeX3.
+% \begin{macrocode}
+\ProvidesFile{tikzlibrarybraids.code.tex}[%
+ 2019/03/20 v2.0 Tikz/PGF library for drawing braid diagrams%
+]
+\RequirePackage{expl3}
+\ExplSyntaxOn
+% \end{macrocode}
+% Define all the variables we'll be using.
+% \begin{macrocode}
+\tl_new:N \l_@@_tmpa_tl
+\tl_new:N \l_@@_tmpb_tl
+\tl_new:N \l_@@_tmpc_tl
+\tl_new:N \l_@@_tmpd_tl
+\tl_new:N \l_@@_anchor_strand_tl
+\tl_new:N \l_@@_anchor_level_tl
+\fp_new:N \l_@@_height_fp
+\fp_new:N \l_@@_width_fp
+\fp_new:N \l_@@_nudge_fp
+\fp_new:N \l_@@_control_fp
+\fp_new:N \l_@@_ctrlax_fp
+\fp_new:N \l_@@_ctrlay_fp
+\fp_new:N \l_@@_ctrlbx_fp
+\fp_new:N \l_@@_ctrlby_fp
+\fp_new:N \l_@@_endx_fp
+\fp_new:N \l_@@_endy_fp
+\fp_new:N \l_@@_anchor_x_fp
+\fp_new:N \l_@@_anchor_y_fp
+\int_new:N \l_@@_tmpa_int
+\int_new:N \l_@@_length_int
+\int_new:N \l_@@_strands_int
+\int_new:N \l_@@_crossing_int
+\int_new:N \l_@@_anchor_level_int
+\int_new:N \l_@@_floor_int
+\seq_new:N \l_@@_word_seq
+\seq_new:N \l_@@_crossing_seq
+\seq_new:N \l_@@_anchor_seq
+\seq_new:N \l_@@_floors_seq
+\str_new:N \l_@@_tmpa_str
+\str_new:N \l_@@_sup_str
+\str_set:Nn \l_@@_sup_str {^}
+\str_new:N \l_@@_sub_str
+\str_set:Nn \l_@@_sub_str {_}
+\str_new:N \l_@@_hyphen_str
+\str_set:Nn \l_@@_hyphen_str {-}
+\str_new:N \l_@@_bar_str
+\str_set:Nn \l_@@_bar_str {|}
+\str_new:N \l_@@_one_str
+\str_set:Nn \l_@@_one_str {1}
+\bool_new:N \l_@@_step_level_bool
+\bool_new:N \l_@@_swap_crossing_bool
+\bool_new:N \l_@@_floor_bool
+\prop_new:N \l_@@_strands_prop
+\prop_new:N \l_@@_permutation_prop
+\prop_new:N \l_@@_crossing_permutation_prop
+\prop_new:N \l_@@_inverse_prop
+\prop_new:N \l_@@_anchor_prop
+% \end{macrocode}
+% Our interface is through a TikZ pic.
+% \begin{macrocode}
+\tikzset{
+ braid/.pic={
+ code={
+ \@@_parse_word:n {#1}
+ \@@_count:
+ \@@_render:
+ }
+ },
+ floor/.pic={
+ code={
+ \path[pic~ actions, draw=none] (0,0) rectangle (1,1);
+ \path[pic~ actions, fill=none] (0,0) -- (1,0) (0,1) -- (1,1);
+ }
+ },
+ /tikz/braid/.search~ also={/tikz},
+ braid/.cd,
+% \end{macrocode}
+% The various TikZ parameters for the braid.
+%
+% The anchor determines which part of the braid is located at the position specified by the pic.
+% It can be of the form \Verb+n-m+ where \Verb+n+ is a strand number and +m+ is a crossing level.
+% The strand number can be either a number or \Verb+rev-n+ to use the ending numbering of the strands.
+% The crossing level can also be \Verb+s+ or \Verb+e+ which means the actual start or end of the strand (including the border).
+%
+% \begin{macrocode}
+ anchor/.initial=1-s,
+% \end{macrocode}
+% \Verb+number of strands+ sets a minimum for the number of strands in the braid (otherwise, it is set by the strands used in the specified crossings).
+% \begin{macrocode}
+ number~ of~ strands/.initial=0,
+% \end{macrocode}
+% \Verb+height+ is the distance between crossings (can be negative).
+% \begin{macrocode}
+ height/.initial=-1cm,
+% \end{macrocode}
+% \Verb+width+ is the distance between strands (can be negative).
+% \begin{macrocode}
+ width/.initial=1cm,
+% \end{macrocode}
+% \Verb+gap+ is for determining the gap in the under-strand of a crossing.
+% \begin{macrocode}
+ gap/.initial=.05,
+% \end{macrocode}
+% \Verb+border height+ is a length added at the start and end of each strand.
+% \begin{macrocode}
+ border~ height/.initial=.25cm,
+% \end{macrocode}
+% \Verb+floor border+ is added to the width of any floors
+% \begin{macrocode}
+ floor~ border/.initial=.25cm,
+% \end{macrocode}
+% \Verb+floors+ is a list of floors to draw, specified as a cslist of coordinates as (x,y,w,h,a) in which the units are numbers of strands and crossing levels.
+% The parameters are: coordinates of lower left corner, width, height, (optional) name for styling.
+% \begin{macrocode}
+ add~ floor/.code={
+ \seq_push:Nn \l_@@_floors_seq {#1}
+ },
+% \end{macrocode}
+% \Verb+control factor+ determines the proportion of the \Verb+height+ used for the control points.
+% \begin{macrocode}
+ control~ factor/.initial=.5,
+% \end{macrocode}
+% \Verb+nudge factor+ is used to compress each crossing slightly within its rectangle.
+% \begin{macrocode}
+ nudge~ factor/.initial=.05
+}
+% \end{macrocode}
+%
+% \begin{macro}[internal]{\@@_parse_word:Nn}
+% Parse the braid word as a token list and convert it into a sequence.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_parse_word:n #1
+{
+ \seq_clear:N \l_@@_word_seq
+ \tl_clear:N \l_@@_tmpa_tl
+ \tl_set:Nn \l_@@_tmpb_tl {#1}
+
+ \bool_until_do:nn { \tl_if_empty_p:N \l_@@_tmpb_tl }
+ {
+% \end{macrocode}
+% We step through the braid specification, looking for special characters.
+% To avoid catcode issues, the comparison is as strings.
+% Some actions may involve consuming more tokens from the list so we can't do a simple \Verb+map_inline+ but have to keep stripping off the head token.
+%
+% The idea is to store information about the current crossing in a token list (noting that it may be specified in a variety of orders) and then when we're sure we have all the information we add it to our sequence of crossings.
+% \begin{macrocode}
+ \str_set:Nx \l_@@_tmpa_str {\tl_head:N \l_@@_tmpb_tl}
+ \tl_set:Nx \l_@@_tmpb_tl {\tl_tail:N \l_@@_tmpb_tl}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \str_case_e:nnTF {\l_@@_tmpa_str}
+ {
+% \end{macrocode}
+% Underscore introduces the crossing numbers
+% \begin{macrocode}
+ {_}
+ {
+ \tl_put_right:Nx \l_@@_tmpa_tl
+ {
+ \exp_not:N \@@_parse_index:n {\tl_head:N \l_@@_tmpb_tl}
+ }
+ \tl_set:Nx \l_@@_tmpb_tl {\tl_tail:N \l_@@_tmpb_tl}
+ }
+% \end{macrocode}
+% Power is used to indicate inverse.
+% \begin{macrocode}
+ {^}
+ {
+ \tl_put_left:Nx \l_@@_tmpa_tl
+ {
+ \exp_not:N \@@_parse_exponent:n {\tl_head:N \l_@@_tmpb_tl}
+ }
+ \tl_set:Nx \l_@@_tmpb_tl {\tl_tail:N \l_@@_tmpb_tl}
+ }
+% \end{macrocode}
+% Bar is for floors.
+% \begin{macrocode}
+ {|}
+ {
+ \tl_if_empty:NF \l_@@_tmpa_tl
+ {
+ \seq_put_right:NV \l_@@_word_seq \l_@@_tmpa_tl
+ \tl_clear:N \l_@@_tmpa_tl
+ }
+
+ \tl_set:Nn \l_@@_tmpa_tl {
+ \bool_set_false:N \l_@@_step_level_bool
+ \bool_set_true:N \l_@@_floor_bool
+ }
+ \seq_put_right:NV \l_@@_word_seq \l_@@_tmpa_tl
+ \tl_clear:N \l_@@_tmpa_tl
+ }
+% \end{macrocode}
+% Hyphen says the next crossing is on the same level as the current one.
+% \begin{macrocode}
+ {-}
+ {
+ \tl_put_right:Nn \l_@@_tmpa_tl
+ {
+ \bool_set_false:N \l_@@_step_level_bool
+ }
+ }
+% \end{macrocode}
+% \(1\) is for the identity (i.e., no crossing but still have a level).
+% We put a nop token on the list so that it is no longer empty.
+% \begin{macrocode}
+ {1}
+ {
+ \tl_if_empty:NF \l_@@_tmpa_tl
+ {
+ \seq_put_right:NV \l_@@_word_seq \l_@@_tmpa_tl
+ \tl_clear:N \l_@@_tmpa_tl
+ }
+ \tl_put_right:Nn \l_@@_tmpa_tl {\@@_do_identity:}
+ }
+% \end{macrocode}
+% Ignore spaces.
+% \begin{macrocode}
+ {~}
+ {
+ }
+ }
+ {
+ }
+ {
+% \end{macrocode}
+% If we get an unrecognised token, it's our trigger to start accumulating information for the next crossing.
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_tmpa_tl
+ {
+ \seq_put_right:NV \l_@@_word_seq \l_@@_tmpa_tl
+ \tl_clear:N \l_@@_tmpa_tl
+ }
+ }
+ }
+% \end{macrocode}
+% At the end, we also put our current token list on the word sequence.
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_tmpa_tl
+ {
+ \seq_put_right:NV \l_@@_word_seq \l_@@_tmpa_tl
+ \tl_clear:N \l_@@_tmpa_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_parse_index:n}
+% Parse an index, saving it in a sequence with the two indices such that the first goes over the second.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_parse_index:n #1
+{
+ \seq_set_from_clist:Nn \l_@@_crossing_seq {#1}
+ \int_compare:nT {\seq_count:N \l_@@_crossing_seq == 1}
+ {
+ \seq_put_right:Nx \l_@@_crossing_seq {\int_eval:n {#1 + 1} }
+ }
+ \bool_if:NT \l_@@_swap_crossing_bool
+ {
+ \seq_pop_left:NN \l_@@_crossing_seq \l_@@_tmpa_tl
+ \seq_put_right:NV \l_@@_crossing_seq \l_@@_tmpa_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_parse_exponent:n}
+% Parse an exponent, basically testing to see if it is \(-1\) in which case our crossing numbers should be reversed..
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_parse_exponent:n #1
+{
+ \int_compare:nTF {#1 == -1}
+ {
+ \bool_set_true:N \l_@@_swap_crossing_bool
+ }
+ {
+ \bool_set_false:N \l_@@_swap_crossing_bool
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_do_identity:}
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_do_identity:
+{
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_count:NNN}
+% Work out how big the braid is by counting strands and levels.
+% We also figure out the permutation from the start to end of the strands.
+% This is useful for labelling various parts of the braid.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_count:
+{
+ \int_zero:N \l_@@_length_int
+ \int_set:Nn \l_@@_strands_int {\@@_value:n {number~of~strands}}
+ \prop_clear:N \l_@@_permutation_prop
+ \prop_clear:N \l_@@_crossing_permutation_prop
+ \prop_clear:N \l_@@_anchor_prop
+ \prop_clear:N \l_@@_inverse_prop
+
+ \seq_map_inline:Nn \l_@@_word_seq
+ {
+% \end{macrocode}
+% Clear the crossing sequence and assume we're going to step the level.
+% \begin{macrocode}
+ \seq_clear:N \l_@@_crossing_seq
+ \bool_set_true:N \l_@@_step_level_bool
+ \bool_set_false:N \l_@@_swap_crossing_bool
+% \end{macrocode}
+% Run the details of this crossing.
+% \begin{macrocode}
+ ##1
+% \end{macrocode}
+% If we're increasing the level (no hyphen), do so.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_step_level_bool
+ {
+ \int_incr:N \l_@@_length_int
+ }
+% \end{macrocode}
+% If we have a crossing, check we have enough strands to cover it.
+% \begin{macrocode}
+ \seq_if_empty:NF \l_@@_crossing_seq
+ {
+ \int_set:Nn \l_@@_strands_int
+ {
+ \int_max:nn
+ {
+ \int_max:nn {\l_@@_strands_int}
+ { \seq_item:Nn \l_@@_crossing_seq {1}}
+ }
+ {
+ \seq_item:Nn \l_@@_crossing_seq {2}
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% Now that we know how many strands we have, we can initialise our permutation props.
+% One will hold the overall permutation, the other will keep track of our current permutation.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_@@_strands_int}
+ {
+ \prop_put:Nnn \l_@@_permutation_prop {##1} {##1}
+ \prop_put:Nnn \l_@@_anchor_prop {##1} {##1}
+ \prop_put:Nnn \l_@@_crossing_permutation_prop {##1} {##1}
+ }
+% \end{macrocode}
+% Now we step through the braid word again and record the permutations so that we can calculate the overall permutation defined by the braid.
+%
+% We will also figure out our shift from the anchor, so first we need to get some information about the anchor.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpa_tl {\@@_value:n {anchor}}
+ \seq_set_split:NnV \l_@@_anchor_seq {-} \l_@@_tmpa_tl
+
+ \tl_set:Nx \l_@@_tmpa_tl {\seq_item:Nn \l_@@_anchor_seq {1}}
+ \tl_if_eq:VnTF \l_@@_tmpa_tl {rev}
+ {
+ \tl_set:Nx \l_@@_anchor_strand_tl {\seq_item:Nn \l_@@_anchor_seq {2}}
+ \tl_set:Nx \l_@@_anchor_level_tl {\seq_item:Nn \l_@@_anchor_seq {3}}
+ }
+ {
+ \tl_set:Nx \l_@@_anchor_strand_tl {\seq_item:Nn \l_@@_anchor_seq {1}}
+ \tl_set:Nx \l_@@_anchor_level_tl {\seq_item:Nn \l_@@_anchor_seq {2}}
+ }
+% \end{macrocode}
+% The important information is as to the level at which the requested anchor resides.
+% If it is at the end or start of a strand, we set the level to \(-1\) so that it never matches a level number.
+% \begin{macrocode}
+ \tl_if_eq:VnTF \l_@@_anchor_level_tl {s}
+ {
+ \int_set:Nn \l_@@_anchor_level_int {-1}
+ }
+ {
+ \tl_if_eq:VnTF \l_@@_anchor_level_tl {e}
+ {
+ \int_set:Nn \l_@@_anchor_level_int {-1}
+ }
+ {
+ \int_set:Nn \l_@@_anchor_level_int
+ {\tl_use:N \l_@@_anchor_level_tl}
+ }
+ }
+
+ \int_zero:N \l_@@_crossing_int
+ \int_incr:N \l_@@_crossing_int
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \seq_map_inline:Nn \l_@@_word_seq
+ {
+ \bool_set_true:N \l_@@_step_level_bool
+ \seq_clear:N \l_@@_crossing_seq
+ \bool_set_false:N \l_@@_swap_crossing_bool
+ ##1
+ \seq_if_empty:NF \l_@@_crossing_seq
+ {
+ \prop_get:NxN \l_@@_permutation_prop
+ {
+ \seq_item:Nn \l_@@_crossing_seq {1}
+ } \l_@@_tmpa_tl
+ \prop_get:NxN \l_@@_permutation_prop
+ {
+ \seq_item:Nn \l_@@_crossing_seq {2}
+ } \l_@@_tmpb_tl
+
+ \prop_put:NxV \l_@@_permutation_prop
+ {
+ \seq_item:Nn \l_@@_crossing_seq {2}
+ } \l_@@_tmpa_tl
+ \prop_put:NxV \l_@@_permutation_prop
+ {
+ \seq_item:Nn \l_@@_crossing_seq {1}
+ } \l_@@_tmpb_tl
+ }
+% \end{macrocode}
+% See if the current level is what was requested by the anchor.
+% \begin{macrocode}
+ \int_compare:nT {\l_@@_crossing_int = \l_@@_anchor_level_int}
+ {
+ \prop_set_eq:NN \l_@@_anchor_prop \l_@@_permutation_prop
+ }
+ \bool_if:NT \l_@@_step_level_bool
+ {
+ \int_incr:N \l_@@_crossing_int
+ }
+ }
+% \end{macrocode}
+% This inverts the anchor permutation.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_@@_strands_int}
+ {
+ \prop_get:NnN \l_@@_anchor_prop {##1} \l_@@_tmpa_tl
+ \prop_put:NVn \l_@@_inverse_prop \l_@@_tmpa_tl {##1}
+ }
+ \prop_set_eq:NN \l_@@_anchor_prop \l_@@_inverse_prop
+% \end{macrocode}
+% This inverts the full permutation.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_@@_strands_int}
+ {
+ \prop_get:NnN \l_@@_permutation_prop {##1} \l_@@_tmpa_tl
+ \prop_put:NVn \l_@@_inverse_prop \l_@@_tmpa_tl {##1}
+ }
+% \end{macrocode}
+% Now that we have the inverse, we can figure out our anchor.
+% First, see if we requested a strand by its position at the end of the braid.
+% \begin{macrocode}
+ \tl_set:Nx \l_@@_tmpa_tl {\seq_item:Nn \l_@@_anchor_seq {1}}
+ \tl_if_eq:VnT \l_@@_tmpa_tl {rev}
+ {
+ \prop_get:NVN \l_@@_permutation_prop
+ \l_@@_anchor_strand_tl \l_@@_anchor_strand_tl
+ }
+ \tl_if_eq:VnF \l_@@_anchor_level_tl {s}
+ {
+ \tl_if_eq:VnTF \l_@@_anchor_level_tl {e}
+ {
+ \prop_get:NVN \l_@@_inverse_prop
+ \l_@@_anchor_strand_tl \l_@@_anchor_strand_tl
+ }
+ {
+ \prop_get:NVN \l_@@_anchor_prop
+ \l_@@_anchor_strand_tl \l_@@_anchor_strand_tl
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+%
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_dim_value:n, \@@_value:n}
+% Extract a length or a value from a PGF key.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_dim_value:n #1
+{
+ \dim_to_fp:n {\pgfkeysvalueof{/tikz/braid/#1}}
+}
+\cs_new_nopar:Npn \@@_value:n #1
+{
+ \pgfkeysvalueof{/tikz/braid/#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_render:}
+% This is the macro that converts the braid word into TikZ paths.
+% \begin{macrocode}
+\cs_generate_variant:Nn \prop_get:NnN {NxN}
+\cs_generate_variant:Nn \prop_put:Nnn {NxV}
+\cs_generate_variant:Nn \tl_if_eq:nnTF {VnTF}
+\cs_generate_variant:Nn \tl_if_eq:nnF {VnF}
+\cs_generate_variant:Nn \tl_if_eq:nnT {VnT}
+
+\cs_new_nopar:Npn \@@_render:
+{
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_anchor_x_fp { - 1 * (\tl_use:N \l_@@_anchor_strand_tl - 1) * \@@_dim_value:n {width} }
+
+ \tl_if_eq:VnTF \l_@@_anchor_level_tl {s}
+ {
+ \fp_set:Nn \l_@@_anchor_y_fp {0}
+ }
+ {
+ \tl_if_eq:VnTF \l_@@_anchor_level_tl {e}
+ {
+ \fp_set:Nn \l_@@_anchor_y_fp {
+ -1 * \l_@@_length_int * \@@_dim_value:n {height}
+ - sign(\@@_dim_value:n {height})
+ * 2 * \@@_dim_value:n {border~ height}
+ }
+ }
+ {
+ \fp_set:Nn \l_@@_anchor_y_fp {
+ -1 * \l_@@_anchor_level_tl * \@@_dim_value:n {height}
+ - sign(\@@_dim_value:n {height})
+ * \@@_dim_value:n {border~ height}
+ }
+ }
+ }
+
+ \begin{scope}[
+ shift={
+ (\fp_to_decimal:N \l_@@_anchor_x_fp pt,
+ \fp_to_decimal:N \l_@@_anchor_y_fp pt
+ )
+ }
+ ]
+% \end{macrocode}
+% Initialise a prop for the individual strands.
+% \begin{macrocode}
+ \prop_clear:N \l_@@_strands_prop
+% \end{macrocode}
+% Initialise some lengths.
+% \begin{macrocode}
+ \fp_zero:N \l_@@_height_fp
+ \fp_zero:N \l_@@_nudge_fp
+ \fp_zero:N \l_@@_control_fp
+% \end{macrocode}
+% This holds our current \Verb+height+ of our strands.
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_height_fp
+ {
+ sign(\@@_dim_value:n {height})
+ * \@@_dim_value:n {border~ height}
+ }
+% \end{macrocode}
+% This holds the total \Verb+width+ of our strands.
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_width_fp
+ {
+ (\l_@@_strands_int - 1) * \@@_dim_value:n {width}
+ + 2 * sign(\@@_dim_value:n{width})
+ * \@@_dim_value:n {floor~ border}
+ }
+% \end{macrocode}
+% Each crossing actually starts a little bit into the crossing space, as defined by the \Verb+nudge factor+.
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_nudge_fp
+ {
+ \@@_value:n {nudge~ factor} * \@@_dim_value:n {height}
+ }
+% \end{macrocode}
+% This sets where the control points for the crossing curves will be.
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_control_fp
+ {
+ \@@_value:n {control~ factor} * \@@_dim_value:n {height}
+ }
+ \fp_sub:Nn \l_@@_control_fp {\l_@@_nudge_fp}
+% \end{macrocode}
+% Initialise our strand paths with a \Verb+\draw+.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_@@_strands_int}
+ {
+ \prop_get:NnN \l_@@_inverse_prop {##1} \l_@@_tmpa_tl
+ \prop_put:Nnx \l_@@_strands_prop {##1}
+ {
+ \exp_not:N \draw[
+ braid/every~ strand/.try,
+ braid/strand~ ##1/.try
+ ]
+ \exp_not:N \@@_moveto:nn {
+ \fp_eval:n {(##1 - 1) * \@@_dim_value:n {width} }
+ } {0}
+ \exp_not:N \@@_lineto:nn {
+ \fp_eval:n {(##1 - 1) * \@@_dim_value:n {width} }
+ } { \fp_to_decimal:N \l_@@_height_fp}
+ }
+% \end{macrocode}
+% Add a load of coordinates at the start of each strand, indexed by both forward and backward strand numbers.
+% \begin{macrocode}
+ \@@_coordinate:xxxx {-##1-s} {-rev-\l_@@_tmpa_tl-s}
+ {\fp_eval:n {(##1 - 1) * \@@_dim_value:n {width} }} {0}
+
+ \@@_coordinate:xxxx {-##1-0} {-rev-\l_@@_tmpa_tl-0}
+ {\fp_eval:n {(##1 - 1) * \@@_dim_value:n {width} }}
+ { \fp_to_decimal:N \l_@@_height_fp}
+ }
+% \end{macrocode}
+%
+% Run through any extra floors requested.
+% \begin{macrocode}
+ \seq_map_inline:Nn \l_@@_floors_seq
+ {
+ \tl_set:Nx \l_@@_tmpa_tl {\clist_item:nn {##1} {5}}
+ \@@_do_floor:Vxxxx \l_@@_tmpa_tl
+ {\fp_eval:n
+ {
+ -1*sign(\@@_dim_value:n{width})
+ * \@@_dim_value:n {floor~ border}
+ + (\@@_dim_value:n {width}) * (\clist_item:nn {##1} {1} - 1)
+ }
+ pt
+ }
+ {\fp_eval:n
+ {
+ \l_@@_height_fp + ( \@@_dim_value:n {height} ) * (\clist_item:nn {##1} {2})
+ }
+ pt
+ }
+ {\fp_eval:n {
+ ( (\clist_item:nn {##1} {3}) * \@@_dim_value:n {width}
+ + 2 * sign(\@@_dim_value:n{width})
+ * \@@_dim_value:n {floor~ border} ) / \dim_to_fp:n {1cm}
+ }
+ }
+ {\fp_eval:n {
+ (\clist_item:nn {##1} {4}) * ( \@@_dim_value:n {height} ) / \dim_to_fp:n {1cm}
+ }
+ }
+ }
+% \end{macrocode}
+%
+% Keep track of the crossing level for the floor.
+% \begin{macrocode}
+ \int_zero:N \l_@@_crossing_int
+ \int_incr:N \l_@@_crossing_int
+
+ \seq_map_inline:Nn \l_@@_word_seq
+ {
+% \end{macrocode}
+% Clear the flags for this segment of the braid word
+% \begin{macrocode}
+ \seq_clear:N \l_@@_crossing_seq
+ \bool_set_true:N \l_@@_step_level_bool
+ \bool_set_false:N \l_@@_floor_bool
+ \bool_set_false:N \l_@@_swap_crossing_bool
+ ##1
+% \end{macrocode}
+% If we're drawing a floor, do so straightaway.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_floor_bool
+ {
+ \@@_do_floor:Vxxxx \l_@@_crossing_int
+ {\fp_eval:n
+ {
+ -1*sign(\@@_dim_value:n{width})
+ * \@@_dim_value:n {floor~ border}
+ }
+ pt
+ }
+ {\fp_to_decimal:N \l_@@_height_fp pt}
+ {\fp_eval:n { \l_@@_width_fp / \dim_to_fp:n {1cm} }}
+ {\fp_eval:n { ( \@@_dim_value:n {height} ) / \dim_to_fp:n {1cm}}}
+ }
+% \end{macrocode}
+% If we have a crossing, process it.
+% \begin{macrocode}
+ \seq_if_empty:NF \l_@@_crossing_seq
+ {
+% \end{macrocode}
+% Keep track of the current permutation.
+% \begin{macrocode}
+ \prop_get:NxN \l_@@_crossing_permutation_prop
+ {\seq_item:Nn \l_@@_crossing_seq {1}} \l_@@_tmpa_tl
+ \prop_get:NxN \l_@@_crossing_permutation_prop
+ {\seq_item:Nn \l_@@_crossing_seq {2}} \l_@@_tmpb_tl
+
+ \prop_put:NxV \l_@@_crossing_permutation_prop
+ {\seq_item:Nn \l_@@_crossing_seq {2}} \l_@@_tmpa_tl
+ \prop_put:NxV \l_@@_crossing_permutation_prop
+ {\seq_item:Nn \l_@@_crossing_seq {1}} \l_@@_tmpb_tl
+% \end{macrocode}
+% Now get the strands corresponding to the ones involved in the crossing.
+% \begin{macrocode}
+ \prop_get:NxN \l_@@_strands_prop
+ {\seq_item:Nn \l_@@_crossing_seq {1}} \l_@@_tmpa_tl
+ \prop_get:NxN \l_@@_strands_prop
+ {\seq_item:Nn \l_@@_crossing_seq {2}} \l_@@_tmpb_tl
+% \end{macrocode}
+% The over-strand is easy as that's a single curve.
+% \begin{macrocode}
+ \tl_put_right:Nx \l_@@_tmpa_tl
+ {
+ \exp_not:N \@@_lineto:nn
+
+ {\fp_eval:n
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1} - 1)
+ * \@@_dim_value:n {width}
+ }
+ }
+ {\fp_eval:n { \l_@@_height_fp + \l_@@_nudge_fp } }
+
+ \exp_not:N \@@_curveto:nnnnnn
+
+ {0}
+ {\fp_eval:n { \l_@@_control_fp}}
+
+ {0}
+ {\fp_eval:n {- \l_@@_control_fp}}
+
+ {\fp_eval:n
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {2} - 1)
+ * \@@_dim_value:n {width}
+ }
+ }
+ {\fp_eval:n
+ {
+ \l_@@_height_fp
+ + \@@_dim_value:n {height}
+ - \l_@@_nudge_fp
+ }
+ }
+ }
+% \end{macrocode}
+% The under-strand is a bit more complicated as we need to break it in the middle.
+% \begin{macrocode}
+ \tl_put_right:Nx \l_@@_tmpb_tl
+ {
+ \exp_not:N \@@_lineto:nn
+
+ {\fp_eval:n
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {2} - 1)
+ * \@@_dim_value:n {width}
+ }
+ }
+ {\fp_eval:n { \l_@@_height_fp + \l_@@_nudge_fp } }
+
+ \exp_not:N \@@_curveto:nnnnnn
+
+ {0}
+ {
+ \fp_eval:n {
+ \l_@@_control_fp * (.5 - \@@_value:n {gap} )
+ }
+ }
+
+ {
+ \fp_eval:n {
+ - (.5 - \@@_value:n {gap} ) / 3 *
+ \@@_bezier_tangent:nnnnn
+ {.5 - \@@_value:n {gap} }
+ {0}
+ {0}
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ }
+ }
+ {
+ \fp_eval:n {
+ -(.5 - \@@_value:n {gap} ) / 3 *
+ \@@_bezier_tangent:nnnnn
+ {.5 - \@@_value:n {gap} }
+ {0}
+ {\l_@@_control_fp}
+ {
+ \@@_dim_value:n {height}
+ - 2* \l_@@_nudge_fp
+ - \l_@@_control_fp
+ }
+ {\@@_dim_value:n {height} - 2* \l_@@_nudge_fp}
+ }
+ }
+
+ {
+ \fp_eval:n {
+ (\seq_item:Nn \l_@@_crossing_seq {2} - 1)
+ * \@@_dim_value:n {width} +
+ \@@_bezier_point:nnnnn
+ {.5 - \@@_value:n {gap} }
+ {0}
+ {0}
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ }
+ }
+ {
+ \fp_eval:n {
+ \l_@@_height_fp + \l_@@_nudge_fp +
+ \@@_bezier_point:nnnnn
+ {.5 - \@@_value:n {gap} }
+ {0}
+ {\l_@@_control_fp}
+ {
+ \@@_dim_value:n {height}
+ - 2* \l_@@_nudge_fp
+ - \l_@@_control_fp
+ }
+ {\@@_dim_value:n {height} - 2* \l_@@_nudge_fp}
+ }
+ }
+
+ \exp_not:N \@@_moveto:nn
+ {
+ \fp_eval:n {
+ (\seq_item:Nn \l_@@_crossing_seq {2} - 1)
+ * \@@_dim_value:n {width} +
+ \@@_bezier_point:nnnnn
+ {.5 + \@@_value:n {gap} }
+ {0}
+ {0}
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ }
+ }
+ {
+ \fp_eval:n {
+ \l_@@_height_fp + \l_@@_nudge_fp +
+ \@@_bezier_point:nnnnn
+ {.5 + \@@_value:n {gap} }
+ {0}
+ {\l_@@_control_fp}
+ {
+ \@@_dim_value:n {height} - 2* \l_@@_nudge_fp
+ - \l_@@_control_fp
+ }
+ {\@@_dim_value:n {height} - 2* \l_@@_nudge_fp}
+ }
+ }
+
+ \exp_not:N \@@_curveto:nnnnnn
+
+ {
+ \fp_eval:n {
+ (.5 - \@@_value:n {gap} ) / 3 *
+ \@@_bezier_tangent:nnnnn
+ {.5 + \@@_value:n {gap} }
+ {0}
+ {0}
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1}
+ - \seq_item:Nn \l_@@_crossing_seq {2})
+ * \@@_dim_value:n {width}
+ }
+ }
+ }
+ {
+ \fp_eval:n {
+ (.5 - \@@_value:n {gap} ) / 3 *
+ \@@_bezier_tangent:nnnnn
+ {.5 + \@@_value:n {gap} }
+ {0}
+ {\l_@@_control_fp}
+ {
+ \@@_dim_value:n {height} - 2* \l_@@_nudge_fp
+ - \l_@@_control_fp
+ }
+ {\@@_dim_value:n {height} - 2* \l_@@_nudge_fp}
+ }
+ }
+
+ {0}
+ { \fp_eval:n {
+ -\l_@@_control_fp * (.5 - \@@_value:n {gap} )
+ }
+ }
+
+
+ {\fp_eval:n
+ {
+ (\seq_item:Nn \l_@@_crossing_seq {1} - 1)
+ * \@@_dim_value:n {width}
+ }
+ }
+ {\fp_eval:n
+ {
+ \l_@@_height_fp + \@@_dim_value:n {height}
+ - \l_@@_nudge_fp
+ }
+ }
+
+ }
+% \end{macrocode}
+% Now put those new strands back in the prop.
+% \begin{macrocode}
+ \prop_put:NxV \l_@@_strands_prop
+ {\seq_item:Nn \l_@@_crossing_seq {2}} \l_@@_tmpa_tl
+ \prop_put:NxV \l_@@_strands_prop
+ {\seq_item:Nn \l_@@_crossing_seq {1}} \l_@@_tmpb_tl
+% \end{macrocode}
+% If the strands are more than one apart, the intermediate strands need to be broken as well.
+% \begin{macrocode}
+ \int_compare:nT
+ {
+ \int_max:nn
+ {
+ \seq_item:Nn \l_@@_crossing_seq {1}
+ }
+ {
+ \seq_item:Nn \l_@@_crossing_seq {2}
+ }
+ -
+ \int_min:nn
+ {
+ \seq_item:Nn \l_@@_crossing_seq {1}
+ }
+ {
+ \seq_item:Nn \l_@@_crossing_seq {2}
+ }
+ > 1
+ }
+ {
+ \int_step_inline:nnnn
+ {
+ \int_min:nn
+ {
+ \seq_item:Nn \l_@@_crossing_seq {1}
+ }
+ {
+ \seq_item:Nn \l_@@_crossing_seq {2}
+ }
+ + 1}
+ {1}
+ {
+ \int_max:nn
+ {
+ \seq_item:Nn \l_@@_crossing_seq {1}
+ }
+ {
+ \seq_item:Nn \l_@@_crossing_seq {2}
+ }
+ - 1
+ }
+ {
+
+ \prop_get:NnN \l_@@_strands_prop {####1} \l_@@_tmpa_tl
+ \tl_put_right:Nx \l_@@_tmpa_tl
+ {
+ \exp_not:N \@@_lineto:nn
+ {\fp_eval:n {(####1 - 1) * \@@_dim_value:n {width} }}
+ {\fp_eval:n
+ {
+ \l_@@_height_fp + \l_@@_nudge_fp
+ + .5 * \l_@@_control_fp
+ }
+ }
+ \exp_not:N \@@_moveto:nn
+ {\fp_eval:n {(####1 - 1) * \@@_dim_value:n {width} }}
+ {\fp_eval:n
+ {
+ \l_@@_height_fp + \@@_dim_value:n {height}
+ - \l_@@_nudge_fp - .5 * \l_@@_control_fp
+ }
+ }
+ }
+
+ \prop_put:NnV \l_@@_strands_prop {####1} \l_@@_tmpa_tl
+ }
+ }
+ }
+% \end{macrocode}
+% If we're to step the level, increase the height and add a load of coordinates.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_step_level_bool
+ {
+ \fp_add:Nn \l_@@_height_fp { \@@_dim_value:n {height} }
+
+ \int_step_inline:nnnn {1} {1} {\l_@@_strands_int}
+ {
+ \prop_get:NnN \l_@@_crossing_permutation_prop
+ {####1} \l_@@_tmpb_tl
+ \prop_get:NVN \l_@@_inverse_prop
+ \l_@@_tmpb_tl \l_@@_tmpa_tl
+
+ \@@_coordinate:xxxx
+ {-\l_@@_tmpb_tl-\int_use:N \l_@@_crossing_int}
+ {-rev-\l_@@_tmpa_tl-\int_use:N \l_@@_crossing_int }
+ {\fp_eval:n { (####1 - 1) * \@@_dim_value:n {width} }}
+ {\fp_to_decimal:N \l_@@_height_fp}
+ }
+
+ \int_incr:N \l_@@_crossing_int
+ }
+ }
+
+ \fp_add:Nn \l_@@_height_fp
+ {
+ sign(\@@_dim_value:n {height})
+ * \@@_dim_value:n {border~ height}
+ }
+% \end{macrocode}
+% Add a little bit to the end of each strand, together with some coordinates.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_@@_strands_int}
+ {
+ \prop_get:NxN \l_@@_strands_prop {##1} \l_@@_tmpa_tl
+ \prop_get:NxN \l_@@_permutation_prop {##1} \l_@@_tmpb_tl
+
+ \tl_put_right:Nx \l_@@_tmpa_tl {
+ \exp_not:N \@@_lineto:nn
+ {\fp_eval:n { (##1 - 1) * \@@_dim_value:n {width} }}
+ {\fp_to_decimal:N \l_@@_height_fp}
+ coordinate (-rev-##1-e)
+ coordinate (-\l_@@_tmpb_tl-e)
+ ;
+ }
+
+ \prop_put:NnV \l_@@_strands_prop {##1} \l_@@_tmpa_tl
+ }
+% \end{macrocode}
+% This is where we actually carry out the drawing commands.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_@@_strands_int}
+ {
+ \prop_get:NnN \l_@@_strands_prop {##1} \l_@@_tmpa_tl
+ \tl_use:N \l_@@_tmpa_tl
+ }
+ \end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_moveto:nn, \@@_lineto:nn, \@@_curveto:nnnnnn, \@@_coordinate:nnnn}
+% These are our interfaces to the TikZ code.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_moveto:nn #1#2
+{
+ (#1 pt, #2 pt)
+}
+\cs_new_nopar:Npn \@@_lineto:nn #1#2
+{
+ -- (#1 pt, #2 pt)
+}
+\cs_new_nopar:Npn \@@_curveto:nnnnnn #1#2#3#4#5#6
+{
+ .. controls +(#1 pt, #2 pt) and +(#3 pt, #4 pt)
+ .. (#5 pt, #6 pt)
+}
+\cs_new_nopar:Npn \@@_coordinate:nnnn #1#2#3#4
+{
+ \coordinate[alias=#2] (#1) at (#3 pt,#4 pt);
+}
+\cs_generate_variant:Nn \@@_coordinate:nnnn {xxxx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\@@_bezier_point:nnnnn, \@@_bezier_tangent:nnnnn}
+% Used to calculate intermediate points and tangents on a bezier curve.
+% \begin{macrocode}
+\cs_new_nopar:Npn \@@_bezier_point:nnnnn #1#2#3#4#5
+{
+ \fp_eval:n
+ {
+ (1 - (#1)) * (1 - (#1)) * (1 - (#1)) * (#2)
+ +
+ 3 * (1 - (#1)) * (1 - (#1)) * (#1) * (#3)
+ +
+ 3 * (1 - (#1)) * (#1) * (#1) * (#4)
+ +
+ (#1) * (#1) * (#1) * (#5)
+ }
+}
+\cs_new_nopar:Npn \@@_bezier_tangent:nnnnn #1#2#3#4#5
+{
+ \fp_eval:n
+ {
+ 3 * (1 - (#1)) * (1 - (#1)) * (#3 - (#2))
+ +
+ 6 * (1 - (#1)) * (#1) * (#4 - (#3))
+ +
+ 3 * (#1) * (#1) * (#5 - (#4))
+ }
+}
+\cs_new_nopar:Npn \@@_do_floor:nnnnn #1#2#3#4#5
+{
+ \pic[pic~ type=floor,
+ xscale=#4,
+ yscale=#5,
+ at={(#2,#3)},
+ braid/every~ floor/.try,
+ braid/floor~#1/.try,
+ ];
+}
+\cs_generate_variant:Nn \@@_do_floor:nnnnn {Vxxxx}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \iffalse
+%</library>
+% \fi
+%
+% \Finale
+
+\endinput
diff --git a/graphics/pgf/contrib/braids/braids_code.pdf b/graphics/pgf/contrib/braids/braids_code.pdf
new file mode 100644
index 0000000000..d60b9b6f39
--- /dev/null
+++ b/graphics/pgf/contrib/braids/braids_code.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/callouts/A319neo.jpg b/graphics/pgf/contrib/callouts/A319neo.jpg
new file mode 100644
index 0000000000..4e8b0efc82
--- /dev/null
+++ b/graphics/pgf/contrib/callouts/A319neo.jpg
Binary files differ
diff --git a/graphics/pgf/contrib/callouts/README.md b/graphics/pgf/contrib/callouts/README.md
new file mode 100644
index 0000000000..11921754a6
--- /dev/null
+++ b/graphics/pgf/contrib/callouts/README.md
@@ -0,0 +1,18 @@
+# callouts: put notes inside a picture
+
+This LaTeX package enables to define the _annotation_ environment, in which callouts, notes, arrows, and the like can be placed to describe certain parts of the picture. _annotation_ opens a TikZ environment and certain often re-occurring commands are summarized as custom commands. A grid can be displayed to aid the placement of annotations. The so placed annotations remain in the same position if the picture scale is changed, while the font size is kept constant. A global color scheme for the annotations can also be defined via an option.
+
+This directory contains the following files:
+
+README.md - The present file
+callouts.sty - The package file - requires TikZ.sty
+callouts.tex - A user's guide to the package with an example
+callouts.pdf - Compiled user's guide
+A319neo.jpg - Picture to annotate, (c) Airbus S.A.S. 2014
+
+I'd be happy to receive feedback, suggestions, or complaints at <markus.stuetz@gmail.com>
+
+Best regards,
+_Markus Stuetz_
+
+Graz, Austria on July 27, 2017
diff --git a/graphics/pgf/contrib/callouts/callouts.pdf b/graphics/pgf/contrib/callouts/callouts.pdf
new file mode 100644
index 0000000000..ab81f1f7dd
--- /dev/null
+++ b/graphics/pgf/contrib/callouts/callouts.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/callouts/callouts.sty b/graphics/pgf/contrib/callouts/callouts.sty
new file mode 100644
index 0000000000..27575c6053
--- /dev/null
+++ b/graphics/pgf/contrib/callouts/callouts.sty
@@ -0,0 +1,93 @@
+% ==================================================================
+% callouts.sty
+% ==================================================================
+% (c) 2017 Markus Stuetz, markus.stuetz@gmail.com
+% 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; either
+% version 1 of the License, or any later version.
+% ==================================================================
+
+\ProvidesPackage{callouts}[2017/07/27 Callouts]
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{tikz}
+
+\usetikzlibrary{calc}
+\RequirePackage{xifthen}
+
+\newcommand*{\focol}{black}
+\newcommand*{\bgcol}{none}
+\newcommand*{\arcol}{black}
+
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions {family = callouts,prefix = callouts@}%
+
+\DeclareDefaultOption{\ClassWarning{callouts}{Unknown color option '\CurrentOptionKey=\CurrentOptionValue'}}%
+
+\DeclareVoidOption{bwr}{%
+\renewcommand*{\bgcol}{white}%
+\renewcommand*{\arcol}{red}%
+}
+
+\DeclareVoidOption{wby}{%
+\renewcommand*{\focol}{white}%
+\renewcommand*{\bgcol}{black}%
+\renewcommand*{\arcol}{yellow}%
+}
+
+\DeclareVoidOption{bww}{%
+\renewcommand*{\focol}{black}%
+\renewcommand*{\bgcol}{white}%
+\renewcommand*{\arcol}{white}%
+}
+
+\define@key{callouts}{text}{%
+\renewcommand*{\focol}{#1}%
+}
+\define@key{callouts}{background}{%
+\renewcommand*{\bgcol}{#1}%
+}
+\define@key{callouts}{arrow}{%
+\renewcommand*{\arcol}{#1}%
+}
+
+\ProcessKeyvalOptions* % terminate option processing
+
+% ==================================================================
+
+\newenvironment{annotate}[2]%[num]%
+{ \begin{tikzpicture}[scale=#2]% }%
+% Annotate
+\node (pic) at (0,0) {#1};%
+\newdimen\xtic
+\newdimen\ytic
+\pgfextractx\xtic{\pgfpointanchor{pic}{east}}
+\pgfmathparse{int(\xtic/1cm)}
+\pgfmathsetmacro\xtic{\pgfmathresult}
+\pgfextracty\ytic{\pgfpointanchor{pic}{north}}
+\pgfmathparse{int(\ytic/1cm)}
+\pgfmathsetmacro\ytic{\pgfmathresult}
+}%
+{ \end{tikzpicture} }
+
+% ==================================================================
+
+\newcommand{\helpgrid}[1][\bgcol]{%
+\draw[help lines, color=#1] (pic.south west) grid (pic.north east); \fill[#1] (0,0) circle (3pt);%
+ \foreach \i in {-\xtic,...,\xtic} {%
+ \node at (\i+0.2,0.2) {\color{#1} \tiny \i};}
+ \foreach \i in {-\ytic,...,\ytic} {%
+ \node at (0.2,\i+0.2) {\color{#1} \tiny \i};}
+}
+\newcommand{\callout}[3]{%
+\node [fill=\bgcol] (text) at (#1) {\scriptsize\color{\focol} #2};
+\draw [\arcol,thick,->] (text) -- (#3);
+}
+\newcommand{\note}[2]{%
+\node [fill=\bgcol] at (#1) {\scriptsize\color{\focol} #2};
+}
+\newcommand{\arrow}[2]{%
+\draw [\arcol,thick,->] (#1) -- (#2);
+}
+
+\endinput % === EOF ================================================
diff --git a/graphics/pgf/contrib/callouts/callouts.tex b/graphics/pgf/contrib/callouts/callouts.tex
new file mode 100644
index 0000000000..19cfe1f6ed
--- /dev/null
+++ b/graphics/pgf/contrib/callouts/callouts.tex
@@ -0,0 +1,111 @@
+\documentclass[a4paper,11pt]{article}
+\usepackage[american]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{geometry}
+
+\usepackage{booktabs}
+\usepackage{graphicx}
+\usepackage{listings}
+\lstset{%
+backgroundcolor=\color{cyan!10},
+basicstyle=\ttfamily,
+numbers=left,numberstyle=\scriptsize
+}
+
+\usepackage[wby]{callouts}
+
+\title{The \LaTeX-package \texttt{callouts}}
+\author{Markus Stuetz}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+In some reports or documents it may be necessary to annotate, draw arrows or put notes inside a picture. This may be done by editing the picture itself in a graphics tool or using the package TikZ. The former has the disadvantage of a different font and probably font size, the latter may require a lot of source code when using the same commands repeatedly. The package \texttt{callouts} provides a simple approach to annotate pictures.
+
+\section{Using the package}
+
+The package is included in the preamble as follows, with currently four pre-defined color options, listed in table \ref{tab:colors}. If no or a wrong option is specified, the package will use the default color scheme.
+
+\begin{lstlisting}
+ \usepackage[option]{callouts}
+\end{lstlisting}
+
+\begin{table}[htb]
+ \centering
+ \caption{Color options}\label{tab:colors}
+ \begin{tabular}{cccc}
+ \toprule
+ option & text & background & arrow \\
+ \midrule
+ -& black & none & black \\
+ \texttt{bwr} & black & white & red \\
+ \texttt{wby} & white & black & yellow \\
+ \texttt{bww} & black & white & white\\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+Moreover, the colors for text, background, and arrow can be set directly by using the respective option keys, for instance:
+
+\begin{lstlisting}
+ \usepackage[background=gray,arrow=red]{callouts}
+\end{lstlisting}
+
+The environment itself is called \texttt{annotate} and may be put inside a \texttt{figure}-float. The environment requires two variables: The image path including a size option and the annotation scale. Make sure to put the same number in the size (e.g. \texttt{width}) option and the coordinate scale. If you decide to change the scale later on, change both numbers equally, then the relative position of the annotations will remain.
+
+\begin{lstlisting}
+ \begin{annotate}
+ {\includegraphics[width=0.5\textwidth]{<file path>}}{0.5}
+ \end{annotate}
+\end{lstlisting}
+
+\section{Commands for annotations}
+There are currently four commands included which may follow the first two variables of the package.
+
+\subsection{Helpgrid}
+First of all, you may want to use a help grid to place your annotations. With \texttt{\textbackslash helpgrid}, a grid is drawn. The grid's coordinate origin is indicated by the dot in the center. The grid lines represent integers, coordinates are given in positive and negative decimal numbers. The default color is the background color, you may alter the color of the help grid by adding an option like so: \texttt{\textbackslash helpgrid[gray]}
+
+\subsection{Callouts, notes, arrows }
+A callout is a note, indicating to a point with an arrow. The syntax for this object is
+\begin{lstlisting}
+ \callout{xn,yn}{<note>}{xa,ya}
+\end{lstlisting}
+Here, \texttt{xn}, \texttt{yn} are the center coordinates for the note and \texttt{xa}, \texttt{ya} the coordinates for the arrow tip.
+
+You may put a note withouth an arrow, or an arrow alone, respectively, by writing
+\begin{lstlisting}
+ \note{xn,yn}{<note>}
+ \arrow{xs,ys}{xa,ya}
+\end{lstlisting}
+
+\newpage
+\subsection{An example}
+The following source code results in figure \ref{fig:Airbus}. The color option used here is \texttt{wby}. Note that the \texttt{annotate}-environment opens a \texttt{tikzpicture} environment. Hence, all TikZ-commands such as \texttt{\textbackslash draw} can be used as well, as for example in line 8.
+\begin{lstlisting}
+ \begin{annotate}{\includegraphics[width=0.7\textwidth]...
+ ...{A319neo.jpg}}{0.7}
+ % \helpgrid
+ \callout{5,-3}{Engine}{1.6,-2}
+ \arrow{-3,-2.4}{-4.5,-3}
+ \arrow{-4.7,-3.2}{-5.5,-2.4}
+ \note{1,5}{Wingtip}
+ \draw [thick,\arcol] (2.5,3.8) rectangle (4,5);
+ \end{annotate}
+\end{lstlisting}
+
+\begin{figure}[htb]
+ \centering
+ \begin{annotate}{\includegraphics[width=0.7\textwidth]{A319neo.jpg}}{0.7}
+% \helpgrid
+ \callout{5,-3}{Engine}{1.6,-2}
+ \arrow{-3,-2.4}{-4.5,-3}
+ \arrow{-4.7,-3.2}{-5.5,-2.4}
+ \note{1,5}{Wingtip}
+ \draw [thick,\arcol] (2.5,3.8) rectangle (4,5);
+ \end{annotate}
+ \caption{Airbus A319neo\protect\footnotemark}\label{fig:Airbus}
+\end{figure}
+ \footnotetext{Image courtesy: AIRBUS S.A.S. 2014, \texttt{www.airbus.com}, accessed 3.3.2017}
+\end{document}
diff --git a/graphics/pgf/contrib/celtic/README b/graphics/pgf/contrib/celtic/README
new file mode 100644
index 0000000000..7fd9769531
--- /dev/null
+++ b/graphics/pgf/contrib/celtic/README
@@ -0,0 +1,9 @@
+----------------------------------------------------------------
+celtic --- TikZ library for drawing Celtic knots
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package is for the generation of Celtic knots starting from
+a grid of walls.
diff --git a/graphics/pgf/contrib/celtic/celtic.dtx b/graphics/pgf/contrib/celtic/celtic.dtx
new file mode 100644
index 0000000000..4cc3caa118
--- /dev/null
+++ b/graphics/pgf/contrib/celtic/celtic.dtx
@@ -0,0 +1,1092 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+celtic --- TikZ library for drawing Celtic knots
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package is for the generation of Celtic knots starting from
+a grid of walls.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+celtic --- TikZ library for producing Celtic knots.
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2014 by Andrew Stacey <loopspace@mathforge.org>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Andrew Stacey.
+
+This work consists of the files celtic.dtx
+ celtic_doc.tex
+and the derived files celtic.ins
+ celtic_code.pdf
+ tikzlibraryceltic.code.tex
+ celtic.pdf
+ README
+
+\endpostamble
+\usedir{tex/latex/celtic}
+\generate{
+ \file{tikzlibraryceltic.code.tex}{\from{\jobname.dtx}{library}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/celtic}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/celtic}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{tikz}
+\usepackage{trace}
+\usetikzlibrary{celtic}
+%\traceoff
+%\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}[gobble=2]{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+% \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{783}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{1.0}{2014/05/23}{Converted to DTX file}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \title{The \textsf{celtic} package}
+% \author{Andrew Stacey \\ \url{loopspace@mathforge.org}}
+% \date{1.1 from 2016/02/19}
+%
+%
+% \maketitle
+%
+%
+% \section{Introduction}
+%
+% This is a TikZ library for drawing Celtic knot diagrams.
+% For user documentation, see the \Verb+celtic.pdf+ file.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*library>
+% \fi
+% \subsection{Initialisation}
+%
+% Load the \LaTeX3 basics ...
+% \begin{macrocode}
+\usepackage{expl3}
+\usepackage{xparse}
+% \end{macrocode}
+% ... and enter the Realm of the 3rd \LaTeX.
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+% Wrapper around \Verb+\tikz@scan@one@point+ for the \Verb+add=<coord>+ key.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_shift:n #1
+{
+ \use:c{tikz@scan@one@point}\pgftransformshift #1\relax
+}
+% \end{macrocode}
+%
+% We need one or two variables ...
+% \begin{macrocode}
+\int_new:N \l__celtic_max_steps_int
+\int_new:N \l__celtic_int
+\int_new:N \l__celtic_flip_int
+\int_new:N \l__celtic_width_int
+\int_new:N \l__celtic_height_int
+\int_new:N \l__celtic_x
+\int_new:N \l__celtic_y
+\int_new:N \l__celtic_dx
+\int_new:N \l__celtic_dy
+\int_new:N \l__celtic_ox
+\int_new:N \l__celtic_oy
+\int_new:N \l__celtic_lout
+\int_new:N \l__celtic_cross_int
+\int_new:N \l__celtic_component_int
+\fp_new:N \l__celtic_clip_fp
+\fp_new:N \l__celtic_inner_clip_fp
+\fp_new:N \l__celtic_inner_fp
+\fp_new:N \l__celtic_outer_fp
+\seq_new:N \l__celtic_path_seq
+\seq_new:N \l__celtic_overpath_seq
+\seq_new:N \l__celtic_component_seq
+\seq_new:N \l__celtic_crossing_seq
+\seq_new:N \l__celtic_tmpa_seq
+\clist_new:N \l__celtic_tmpa_clist
+\tl_new:N \l__celtic_tmpa_tl
+\tl_new:N \l__celtic_path_tl
+%\tl_new:N \c__celtic_colon_tl
+\tl_new:N \l__celtic_bar_tl
+\tl_new:N \l__celtic_active_bar_tl
+\tl_new:N \l__celtic_start_tl
+\bool_new:N \l__celtic_bounce_bool
+\bool_new:N \l__celtic_pbounce_bool
+
+\cs_new_nopar:Npn \tl_split_after:Nnn #1#2#3
+{
+ \cs_set:Npn \tl_split_aux:nnn ##1#3##2 \q_stop: {#3##2}
+ \tl_set:Nx #1 {\tl_split_aux:nnn #2 \q_stop:}
+}
+\cs_generate_variant:Nn \tl_split_after:Nnn {NVn}
+\cs_new_nopar:Npn \tl_split_before:Nnn #1#2#3
+{
+ \cs_set:Npn \tl_split_aux:nnn ##1#3##2 \q_stop: {##1#3}
+ \tl_set:Nx #1 {\tl_split_aux:nnn #2 \q_stop:}
+}
+\cs_generate_variant:Nn \tl_split_before:Nnn {NVn}
+% \end{macrocode}
+% Define our warning message.
+% \begin{macrocode}
+\msg_new:nnnn { celtic } { max~ steps } { Limit~ of~ number~ of~ steps~ exceeded~ \msg_line_context:.}
+{ Paths~ may~ not~ be~ correctly~ constructed.~
+Consider~ raising~ the~ limit~ from \int_use:N \l__celtic_max_steps_int.}
+% \end{macrocode}
+% Using a colon for a range separator was possibly not the best idea I ever had, seeing as \LaTeX3 alters its catcode.
+% So we need to get creative.
+% \begin{macrocode}
+\tl_const:Nx \c__celtic_colon_tl { \token_to_str:N : }
+% \end{macrocode}
+% Some packages mess with the catcode of \Verb+|+.
+% \begin{macrocode}
+\tl_set:Nn \l__celtic_bar_tl {|}
+\group_begin:
+\char_set_catcode_active:N \|
+\tl_gset:Nn \l__celtic_active_bar_tl {|}
+\group_end:
+% \end{macrocode}
+% We need a few variants of standard \LaTeX3 functions.
+% \begin{macrocode}
+\cs_generate_variant:Nn \tl_if_single_p:N {c}
+\cs_generate_variant:Nn \tl_if_single:NTF {cTF}
+\cs_generate_variant:Nn \tl_if_eq:nnTF {xnTF}
+\cs_generate_variant:Nn \tl_head:N {c}
+\cs_generate_variant:Nn \tl_tail:N {c}
+\cs_generate_variant:Nn \tl_if_eq:nnTF {vnTF}
+\cs_generate_variant:Nn \tl_if_in:nnTF {nVTF}
+% \end{macrocode}
+% Initialise a few variables.
+% \begin{macrocode}
+\int_set:Nn \l__celtic_max_steps_int {20}
+\fp_set:Nn \l__celtic_inner_fp {1}
+\fp_set:Nn \l__celtic_outer_fp {2}
+% \end{macrocode}
+%
+% The following functions are for parsing and setting the crossing information.
+% \begin{macro}{\celtic_do_crossing:nnn}
+% This function sets the information for a particular crossing.
+% The first argument can be empty, meaning ``ignore this crossing as a starting point'', or it should be one of \Verb+|+ or \Verb+-+ to denote the wall type that is placed at this crossing.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_do_crossing:nnn #1#2#3
+{
+ \tl_if_empty:nTF {#1}
+ {
+ \tl_clear:c {crossing used \int_eval:n {#2} - \int_eval:n {#3}}
+ }
+ {
+ \tl_set:cn {crossing \int_eval:n {#2} - \int_eval:n{#3}}{#1}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_maybe_symmetric:nnnn}
+% If a crossing is designated as symmetric, we repeat the action four times.
+% This macro tests to see if it is symmetric or not and acts accordingly.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_maybe_symmetric:nnnn #1#2#3#4
+{
+ \tl_if_empty:nTF {#1}
+ {
+ \celtic_do_crossing:nnn {#2}{#3}{#4}
+ }
+ {
+ \celtic_do_crossing:nnn {#2}{#3}{#4}
+ \celtic_do_crossing:nnn {#2}{\l__celtic_width_int - #3}{#4}
+ \celtic_do_crossing:nnn {#2}{#3}{\l__celtic_height_int - #4}
+ \celtic_do_crossing:nnn {#2}{\l__celtic_width_int - #3}{\l__celtic_height_int - #4}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_maybe_xrange:nnnn}
+% The \Verb+x+-coordinate might be a range.
+% If it is, it contains a colon (with the normal catcode).
+% So we test for a colon and act accordingly.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_maybe_xrange:nnnn #1#2#3#4
+{
+ \tl_if_in:nVTF {#3} \c__celtic_colon_tl
+ {
+ \celtic_do_xrange:w {#1}{#2}#3\q_stop{#4}
+ }
+ {
+ \celtic_maybe_yrange:nnnn {#1}{#2}{#3}{#4}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_maybe_yrange:nnnn}
+% Same with the \Verb+y+-coordinate.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_maybe_yrange:nnnn #1#2#3#4
+{
+ \tl_if_in:nVTF {#4} \c__celtic_colon_tl
+ {
+ \celtic_do_yrange:w {#1}{#2}{#3}#4\q_stop
+ }
+ {
+ \celtic_maybe_symmetric:nnnn {#1}{#2}{#3}{#4}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% When processing ranges, we need to use colons with the original catcode.
+% We've stored one in \Verb+\c__celtic_colon_tl+ but we need to use it in actuality.
+% So we make a token list containing the definitions we want to make, expanding \Verb+\c__celtic_colon_tl+ to its colon, but not expanding anything else.
+% \begin{macrocode}
+\tl_set:Nx \l_tmpa_tl
+{
+% \end{macrocode}
+%
+% \begin{macro}{\celtic_do_xrange:w}
+% This splits the \Verb+x+-coordinate into a range and repeats the function for each intermediate value.
+% \begin{macrocode}
+ \exp_not:N \cs_new_nopar:Npn \exp_not:N \celtic_do_xrange:w ##1##2##3\tl_use:N \c__celtic_colon_tl ##4\exp_not:N \q_stop##5
+ {
+ \exp_not:N \int_step_inline:nnnn {##3} {2} {##4}
+ {
+ \exp_not:N \celtic_maybe_yrange:nnnn {##1}{##2} {####1}{##5}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_do_yrange:w}
+% Same, for the \Verb+y+-coordinate.
+% \begin{macrocode}
+ \exp_not:N \cs_new_nopar:Npn \exp_not:N \celtic_do_yrange:w ##1##2##3##4\tl_use:N \c__celtic_colon_tl ##5\exp_not:N \q_stop
+ {
+ \exp_not:N \int_step_inline:nnnn {##4} {2} {##5}
+ {
+ \exp_not:N \celtic_maybe_symmetric:nnnn {##1}{##2}{##3}{####1}
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Now we use the above token list to make our definitions with the right colon in them.
+% \begin{macrocode}
+\tl_use:N \l_tmpa_tl
+% \end{macrocode}
+%
+% The next functions are those that take the individual crossing specifications from the key/value list and begin the process of converting the data to an action to be taken for a specific crossing.
+% \begin{macro}{\celtic_ignore_crossings:w}
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_ignore_crossings:w #1,#2\q_stop
+{
+ \celtic_maybe_xrange:nnnn {}{}{#1}{#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_ignore_symmetric_crossings:w}
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_ignore_symmetric_crossings:w #1,#2\q_stop
+{
+ \celtic_maybe_xrange:nnnn {s}{}{#1}{#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_set_crossings:w}
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_set_crossings:w #1,#2,#3\q_stop
+{
+ \celtic_maybe_xrange:nnnn {}{#3}{#1}{#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_set_symmetric_crossings:w}
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_set_symmetric_crossings:w #1,#2,#3\q_stop
+{
+ \celtic_maybe_xrange:nnnn {s}{#3}{#1}{#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_next_crossing:}
+% This is the function that does all the work.
+% Starting from an undercrossing, it computes the segment leading to the next undercrossing working out all of the ``bounces'' on the way.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_next_crossing:
+{
+% \end{macrocode}
+% Clear our starting conditions.
+% \begin{macrocode}
+ \int_zero:N \l__celtic_cross_int
+ \tl_clear:N \l__celtic_crossing_tl
+ \tl_clear:N \l__celtic_path_tl
+ \tl_clear:N \l__celtic_overpath_tl
+ \bool_set_false:N \l__celtic_bounce_tl
+ \tl_set:Nx \l__celtic_start_tl {(\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+% \end{macrocode}
+% Start our path with a move to the initial point and record our current direction.
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+ \int_set:Nn \l__celtic_lout {(90 - \l__celtic_dx * 45) * \l__celtic_dy}
+% \end{macrocode}
+% We loop until we get to the second crossing on the path (the first will be the overpass).
+% \begin{macrocode}
+ \bool_do_until:nn {\int_compare_p:n {\l__celtic_cross_int > 1}}
+ {
+% \end{macrocode}
+% We keep a record of whether the last bit contained a bounce.
+% \begin{macrocode}
+ \bool_set_eq:NN \l__celtic_pbounce_bool \l__celtic_bounce_bool
+ \bool_set_false:N \l__celtic_bounce_bool
+% \end{macrocode}
+% Move to the next point in our current direction.
+% \begin{macrocode}
+ \int_add:Nn \l__celtic_x {\l__celtic_dx}
+ \int_add:Nn \l__celtic_y {\l__celtic_dy}
+% \end{macrocode}
+% Now we look to see if we should bounce.
+% Is the crossing defined?
+% \begin{macrocode}
+ \tl_if_exist:cT {crossing \int_use:N \l__celtic_x - \int_use:N \l__celtic_y}
+ {
+% \end{macrocode}
+% Yes, so we bounce.
+% But which way?
+% \begin{macrocode}
+ \tl_if_eq:cNTF {crossing \int_use:N \l__celtic_x - \int_use:N \l__celtic_y} \l__celtic_bar_tl
+ {
+% \end{macrocode}
+% Vertical wall.
+% Have we just bounced?
+% \begin{macrocode}
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+% \end{macrocode}
+% Yes, so the next part of the path is a right angle.
+% \begin{macrocode}
+ \tl_put_right:Nn \l__celtic_path_tl { -| }
+ }
+ {
+% \end{macrocode}
+% No, so the next part of the path is a curve.
+% (This is where we use the direction that we recorded earlier.)
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n
+{(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n
+{-90*\l__celtic_dy}] }
+ }
+% \end{macrocode}
+% We record the new direction and ``bounce'' our direction vector.
+% Then we add our new point to the path (which, due to the bounce, is offset).
+% \begin{macrocode}
+ \int_set:Nn \l__celtic_lout {90*\l__celtic_dy}
+ \int_set:Nn \l__celtic_dx {-\l__celtic_dx}
+ \tl_put_right:Nx \l__celtic_path_tl {(\fp_eval:n {\int_use:N \l__celtic_x + .5 * \int_use:N \l__celtic_dx}, \int_use:N \l__celtic_y)}
+% \end{macrocode}
+% We bounced, so record that too.
+% \begin{macrocode}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ {
+% \end{macrocode}
+% At this point, we've bounced but our bounce was horizontal so we do the same as for the vertical but all turned round.
+% \begin{macrocode}
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+% \end{macrocode}
+% We're out from a bounce, so turn at right angles.
+% \begin{macrocode}
+ \tl_put_right:Nn \l__celtic_path_tl { |- }
+ }
+ {
+% \end{macrocode}
+% We're not out from a bounce, so we curve ...
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {90 + 90*\l__celtic_dx}] }
+ }
+% \end{macrocode}
+% ... and record our new direction and out angle.
+% \begin{macrocode}
+ \int_set:Nn \l__celtic_lout {90-90*\l__celtic_dx}
+ \int_set:Nn \l__celtic_dy {-\l__celtic_dy}
+% \end{macrocode}
+% Now we add our new position (adjusted from the bounce) to the path.
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \fp_eval:n {\int_use:N \l__celtic_y + .5 * \int_use:N \l__celtic_dy})}
+% \end{macrocode}
+% And record the fact that we've bounced.
+% \begin{macrocode}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ }
+% \end{macrocode}
+% Now we check to see if we're at the edge of the rectangle, starting with the left.
+% \begin{macrocode}
+ \int_compare:nT {\l__celtic_x == 0}
+ {
+% \end{macrocode}
+% Yes, so treat this as a vertical bounce.
+% \begin{macrocode}
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+% \end{macrocode}
+% Previous bounce, so right angle.
+% \begin{macrocode}
+ \tl_put_right:Nn \l__celtic_path_tl { -| }
+ }
+ {
+% \end{macrocode}
+% No previous bounce, so curve.
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {-90*\l__celtic_dy}] }
+ }
+% \end{macrocode}
+% Record our out angle and change our direction.
+% \begin{macrocode}
+ \int_set:Nn \l__celtic_lout {90*\l__celtic_dy}
+ \int_set:Nn \l__celtic_dx {-\l__celtic_dx}
+% \end{macrocode}
+% Add the correct position to the path.
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl {(\fp_eval:n {\int_use:N \l__celtic_x + .5 * \int_use:N \l__celtic_dx}, \int_use:N \l__celtic_y)}
+% \end{macrocode}
+% We've bounced.
+% \begin{macrocode}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+% \end{macrocode}
+% Same for the right-hand edge.
+% \begin{macrocode}
+ \int_compare:nT {\l__celtic_x == \l__celtic_width_int}
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { -| }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {-90*\l__celtic_dy}] }
+ }
+ \int_set:Nn \l__celtic_lout {90*\l__celtic_dy}
+ \int_set:Nn \l__celtic_dx {-\l__celtic_dx}
+ \tl_put_right:Nx \l__celtic_path_tl {(\fp_eval:n {\int_use:N \l__celtic_x + .5 * \int_use:N \l__celtic_dx}, \int_use:N \l__celtic_y)}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+% \end{macrocode}
+% Now the lower edge.
+% \begin{macrocode}
+ \int_compare:nT {\l__celtic_y == 0}
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { |- }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {90 + 90*\l__celtic_dx}] }
+ }
+ \int_set:Nn \l__celtic_lout {90-90*\l__celtic_dx}
+ \int_set:Nn \l__celtic_dy {-\l__celtic_dy}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \fp_eval:n {\int_use:N \l__celtic_y + .5 * \int_use:N \l__celtic_dy})}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+% \end{macrocode}
+% And the upper edge.
+% \begin{macrocode}
+ \int_compare:nT {\l__celtic_y == \l__celtic_height_int}
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { |- }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {90 + 90*\l__celtic_dx}] }
+ }
+ \int_set:Nn \l__celtic_lout {-90+90*\l__celtic_dx}
+ \int_set:Nn \l__celtic_dy {-\l__celtic_dy}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \fp_eval:n {\int_use:N \l__celtic_y + .5 * \int_use:N \l__celtic_dy})}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+% \end{macrocode}
+% Did we bounce this time?
+% \begin{macrocode}
+ \bool_if:NF \l__celtic_bounce_bool
+ {
+% \end{macrocode}
+% Did we bounce last time?
+% \begin{macrocode}
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+% \end{macrocode}
+% Yes, so the second half is a curve.
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_use:N \l__celtic_lout,in=\int_eval:n {(-90 - 45 * \l__celtic_dx)*\l__celtic_dy}] }
+ }
+ {
+% \end{macrocode}
+% No, so the second half is a straight line.
+% \begin{macrocode}
+ \tl_put_right:Nn \l__celtic_path_tl { -- }
+ }
+% \end{macrocode}
+% The next crossing.
+% \begin{macrocode}
+ \tl_put_right:Nx \l__celtic_path_tl { (\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+% \end{macrocode}
+% If we haven't already gone over a crossing, this is our overcrossing.
+% \begin{macrocode}
+ \tl_if_empty:NTF \l__celtic_crossing_tl
+ {
+% \end{macrocode}
+% So we record this as our overcrossing.
+% \begin{macrocode}
+ \tl_set:Nx \l__celtic_crossing_tl {(\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+ }
+ {
+% \end{macrocode}
+% Otherwise, it's the undercrossing so we note that we've visited this one.
+% \begin{macrocode}
+ \tl_clear:c {crossing used \int_use:N \l__celtic_x - \int_use:N \l__celtic_y}
+ }
+% \end{macrocode}
+% Increment the crossing count.
+% \begin{macrocode}
+ \int_incr:N \l__celtic_cross_int
+% \end{macrocode}
+% Record our outward angle.
+% \begin{macrocode}
+ \int_set:Nn \l__celtic_lout {(90 - \l__celtic_dx * 45) * \l__celtic_dy}
+ }
+ }
+% \end{macrocode}
+% Is our overcrossing one of the undercrossings?
+% If so, remove the initial or final segment as appropriate.
+% \begin{macrocode}
+ \tl_set_eq:NN \l__celtic_overpath_tl \l__celtic_path_tl
+ \tl_set:Nx \l__celtic_tmpa_tl {(\int_use:N \l__celtic_x, \int_use:N
+\l__celtic_y)}
+ \tl_if_eq:NNT \l__celtic_crossing_tl \l__celtic_tmpa_tl
+ {
+ \tl_reverse:N \l__celtic_overpath_tl
+ \tl_set:Nx \l__celtic_overpath_tl {\tl_tail:N \l__celtic_overpath_tl}
+ \tl_split_after:NVn \l__celtic_overpath_tl \l__celtic_overpath_tl {)}
+ \tl_reverse:N \l__celtic_overpath_tl
+ }
+ \tl_if_eq:NNT \l__celtic_crossing_tl \l__celtic_start_tl
+ {
+ \tl_set:Nx \l__celtic_overpath_tl {\tl_tail:N \l__celtic_overpath_tl}
+ \tl_split_after:NVn \l__celtic_overpath_tl \l__celtic_overpath_tl {(}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Now we set up the keys we'll use.
+% \begin{macrocode}
+\keys_define:nn { celtic }
+{
+% \end{macrocode}
+% This sets the maximum number of steps in a path.
+% \begin{macrocode}
+ max~ steps .int_set:N = \l__celtic_max_steps_int,
+% \end{macrocode}
+% This flips the over/under crossings.
+% \begin{macrocode}
+ flip .code:n = {
+ \int_set:Nn \l__celtic_flip_int {-1}
+ },
+% \end{macrocode}
+% These set the size of the knot.
+% \begin{macrocode}
+ width .int_set:N = \l__celtic_width_int,
+ height .int_set:N = \l__celtic_height_int,
+ size .code:n = {
+% \end{macrocode}
+% The size is a CSV so we use a \Verb+clist+ to separate it.
+% \begin{macrocode}
+ \clist_set:Nn \l__celtic_tmpa_clist {#1}
+ \clist_pop:NN \l__celtic_tmpa_clist \l__celtic_tmpa_tl
+ \int_set:Nn \l__celtic_width_int {\l__celtic_tmpa_tl}
+ \clist_pop:NN \l__celtic_tmpa_clist \l__celtic_tmpa_tl
+ \int_set:Nn \l__celtic_height_int {\l__celtic_tmpa_tl}
+ },
+% \end{macrocode}
+% The size keys are placed in a separate group to make it possible to process them before all other keys.
+% \begin{macrocode}
+ width .groups:n = { size },
+ height .groups:n = { size },
+ size .groups:n = { size },
+% \end{macrocode}
+% The next keys set the various crossing behaviours.
+% \begin{macrocode}
+ crossings .code:n = {
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_set_crossings:w ##1 \q_stop
+ }
+ }
+ },
+% \end{macrocode}
+%
+% \begin{macrocode}
+ symmetric~ crossings .code:n = {
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_set_symmetric_crossings:w ##1 \q_stop
+ }
+ }
+ },
+% \end{macrocode}
+%
+% \begin{macrocode}
+ ignore~ crossings .code:n ={
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_ignore_crossings:w ##1 \q_stop
+ }
+ }
+ },
+% \end{macrocode}
+%
+% \begin{macrocode}
+ ignore~ symmetric~ crossings .code:n ={
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_ignore_symmetric_crossings:w ##1 \q_stop
+ }
+ }
+ },
+% \end{macrocode}
+% The \Verb+style+ key is passed on to \Verb+\tikzset+.
+% \begin{macrocode}
+ style .code:n = {
+ \tikzset {#1}
+ },
+% \end{macrocode}
+% This relocates the diagram.
+% \begin{macrocode}
+ at .code:n = {
+ \celtic_shift:n {#1}
+ },
+% \end{macrocode}
+% These set the margin for the clip regions.
+% \begin{macrocode}
+ inner~ clip .fp_set:N = \l__celtic_inner_fp,
+ outer~ clip .fp_set:N = \l__celtic_outer_fp,
+}
+% \end{macrocode}
+%
+% \begin{macro}{\CelticDrawPath}
+% This is the user macro.
+% Its mandatory argument is a list of key/value pairs.
+% \begin{macrocode}
+\DeclareDocumentCommand \CelticDrawPath { m }
+{
+% \end{macrocode}
+% Get a nice clean initial state.
+% \begin{macrocode}
+ \group_begin:
+ \pgfscope
+ \seq_clear:N \l__celtic_path_seq
+ \seq_clear:N \l__celtic_overpath_seq
+ \seq_clear:N \l__celtic_component_seq
+ \seq_clear:N \l__celtic_crossing_seq
+ \int_set:Nn \l__celtic_flip_int {1}
+% \end{macrocode}
+% Figure out if \Verb+|+ is active or not (\Verb+fancyvrb+ sets it active).
+% \begin{macrocode}
+\int_compare:nT {\char_value_catcode:n {`\|} = 13}
+{
+ \tl_set_eq:NN \l__celtic_bar_tl \l__celtic_active_bar_tl
+}
+% \end{macrocode}
+% Clear all the crossing data.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l__celtic_height_int-1}
+ {
+ \int_step_inline:nnnn {1 + \int_mod:nn {##1}{2}} {2} {\l__celtic_width_int-1}
+{
+ \tl_clear_new:c {crossing used ####1 - ##1}
+ \tl_set:cn {crossing used ####1 - ##1} {X}
+}
+ }
+% \end{macrocode}
+% Process the keys relating to the size of the knot.
+% \begin{macrocode}
+ \keys_set_groups:nnn { celtic } { size } {#1}
+% \end{macrocode}
+% Process all other keys.
+% \begin{macrocode}
+ \keys_set_filter:nnn { celtic } { size } {#1}
+% \end{macrocode}
+% Draw (maybe) the outer boundary.
+% \begin{macrocode}
+ \path[celtic~ bar/.try, celtic~ surround/.try] (0,0) rectangle (\int_use:N \l__celtic_width_int, \int_use:N \l__celtic_height_int);
+% \end{macrocode}
+% Draw (maybe) the crossings.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l__celtic_height_int-1}
+ {
+ \int_step_inline:nnnn {1 + \int_mod:nn {##1}{2}} {2} {\l__celtic_width_int-1}
+{
+ \tl_if_exist:cT {crossing ####1 - ##1}
+ {
+ \tl_if_eq:cNTF {crossing ####1 - ##1} \l__celtic_bar_tl
+ {
+% \end{macrocode}
+% Vertical crossing.
+% \begin{macrocode}
+ \path[celtic~ bar/.try] (####1,##1-1) -- (####1,##1+1);
+ }
+ {
+% \end{macrocode}
+% Horizontal crossing.
+% \begin{macrocode}
+ \path[celtic~ bar/.try] (####1-1,##1) -- (####1+1,##1);
+ }
+ }
+}
+ }
+% \end{macrocode}
+% Now we work through the crossings, trying to generate a path starting at each one.
+% The crossings are at points \((x,y)\) with \(x + y\) odd.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l__celtic_height_int-1}
+ {
+ \int_step_inline:nnnn {1 + \int_mod:nn {##1}{2}} {2} {\l__celtic_width_int-1}
+{
+% \end{macrocode}
+% Attempt to generate a path starting from that crossing.
+% The third argument is to indicate which way the under-path goes from that crossing.
+% \begin{macrocode}
+ \celtic_generate_path:nnx {####1}{##1}{\int_eval:n {\l__celtic_flip_int*(2*\int_mod:nn{####1}{2} - 1)}}
+ }
+ }
+% \end{macrocode}
+% Once we have generated our paths, we render them and close our scope and group.
+% \begin{macrocode}
+ \celtic_render_path:
+ \endpgfscope
+ \group_end:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_generate_path:nnn}
+% This macro generates a sequence of path segments.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_generate_path:nnn #1#2#3
+{
+% \end{macrocode}
+% First off, we test to see if the given coordinates are allowed as a starting point.
+% If the crossing has a wall or it is already marked as ``used'' then it isn't.
+% \begin{macrocode}
+ \bool_if:nF {
+ \tl_if_exist_p:c {crossing #1 - #2}
+ ||
+ \tl_if_empty_p:c {crossing used #1 - #2}
+ }
+ {
+% \end{macrocode}
+% Those tests failed, so we proceed.
+% First, we mark the crossing as used and set our initial data.
+% Position, original position, and direction.
+% \begin{macrocode}
+ \tl_clear:c {crossing used #1 - #2}
+ \int_incr:N \l__celtic_component_int
+ \int_set:Nn \l__celtic_x {#1}
+ \int_set:Nn \l__celtic_y {#2}
+ \int_set_eq:NN \l__celtic_ox \l__celtic_x
+ \int_set_eq:NN \l__celtic_oy \l__celtic_y
+ \int_set:Nn \l__celtic_dx {#3}
+ \int_set:Nn \l__celtic_dy {1}
+% \end{macrocode}
+% This holds our recursion index so that we can bail out if we look like we're entering a loop (which we shouldn't).
+% \begin{macrocode}
+ \int_zero:N \l__celtic_int
+% \end{macrocode}
+% We stop the loop if we get back where we started or we hit the maximum recursion limit.
+% \begin{macrocode}
+ \bool_do_until:nn
+ {
+ (\int_compare_p:n {\l__celtic_x == \l__celtic_ox}
+ &&
+ \int_compare_p:n {\l__celtic_y == \l__celtic_oy}
+ )
+ || \int_compare_p:n {\l__celtic_int > \l__celtic_max_steps_int}
+ }
+ {
+% \end{macrocode}
+% Increment our counter.
+% \begin{macrocode}
+ \int_incr:N \l__celtic_int
+% \end{macrocode}
+% Create the segment between this crossing and the next one.
+% \begin{macrocode}
+ \celtic_next_crossing:
+% \end{macrocode}
+% Store the segment, its over-crossing, and its component number.
+% Then return to the start of the loop.
+% \begin{macrocode}
+ \seq_put_left:NV \l__celtic_path_seq \l__celtic_path_tl
+ \seq_put_left:NV \l__celtic_overpath_seq \l__celtic_overpath_tl
+ \seq_put_left:NV \l__celtic_crossing_seq \l__celtic_crossing_tl
+ \seq_put_left:NV \l__celtic_component_seq \l__celtic_component_int
+ }
+% \end{macrocode}
+% If we hit the maximum number of steps, issue a warning.
+% \begin{macrocode}
+ \int_compare:nT {\l__celtic_int > \l__celtic_max_steps_int}
+ {
+ \msg_warning:nn {celtic} { max~ steps }
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_generate_path:nnx}
+% Useful variant.
+% \begin{macrocode}
+\cs_generate_variant:Nn \celtic_generate_path:nnn {nnx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\celtic_render_path:}
+% This takes a generated list of path segments and renders them.
+% \begin{macrocode}
+\cs_new_nopar:Npn \celtic_render_path:
+{
+% \end{macrocode}
+% First pass through the sequence of segments.
+% \begin{macrocode}
+ \seq_map_inline:Nn \l__celtic_path_seq
+ {
+% \end{macrocode}
+% We need to get the component number, but \Verb+pop+ removes it from the sequence so we put it back at the other end again.
+% \begin{macrocode}
+ \seq_pop:NN \l__celtic_component_seq \l__celtic_tmpa_tl
+ \seq_put_right:NV \l__celtic_component_seq \l__celtic_tmpa_tl
+% \end{macrocode}
+% Draw the path segment, styling by the component number.
+% \begin{macrocode}
+ \path[celtic~ path/.try, celtic~ path~ \tl_use:N \l__celtic_tmpa_tl/.try] ##1;
+ }
+% \end{macrocode}
+% This next bit of code attempts to work out the true thickness of the presumably doubled path.
+% We do it in a group and scope to limit its effect.
+% \begin{macrocode}
+ \group_begin:
+ \pgfscope
+ \tikzset{celtic~ path/.try}
+ \tl_use:c {tikz@double@setup}
+% \end{macrocode}
+% This gets the resulting line width outside the group and scope.
+% \begin{macrocode}
+ \tl_set:Nn \l__celtic_tmpa_tl
+ {
+ \endpgfscope
+ \group_end:
+ \fp_set:Nn \l__celtic_clip_fp
+ }
+ \tl_put_right:Nx \l__celtic_tmpa_tl {{\dim_use:N \pgflinewidth}}
+ \tl_use:N \l__celtic_tmpa_tl
+% \end{macrocode}
+% Now we set the inner and outer clip sizes based on that line width.
+% \begin{macrocode}
+ \fp_set:Nn \l__celtic_inner_clip_fp {sqrt(2) * (\l__celtic_clip_fp + \l__celtic_inner_fp)}
+ \fp_set:Nn \l__celtic_clip_fp {sqrt(2) * (\l__celtic_clip_fp + \l__celtic_outer_fp)}
+% \end{macrocode}
+%
+% This second pass through the segments redraws each one clipped to a diamond neighbourhood of its over-crossing.
+% \begin{macrocode}
+ \seq_map_inline:Nn \l__celtic_overpath_seq
+ {
+% \end{macrocode}
+% We get the crossing coordinate.
+% \begin{macrocode}
+ \seq_pop:NN \l__celtic_crossing_seq \l__celtic_crossing_tl
+% \end{macrocode}
+% Again, we need the component number.
+% \begin{macrocode}
+ \seq_pop:NN \l__celtic_component_seq \l__celtic_tmpa_tl
+ \seq_put_right:NV \l__celtic_component_seq \l__celtic_tmpa_tl
+ \pgfscope
+% \end{macrocode}
+% This is the smaller of the clip regions.
+% \begin{macrocode}
+ \clip \l__celtic_crossing_tl +(-\fp_to_dim:N \l__celtic_inner_clip_fp,0) -- +(0,\fp_to_dim:N \l__celtic_inner_clip_fp) -- +(\fp_to_dim:N \l__celtic_inner_clip_fp,0) -- +(0,-\fp_to_dim:N \l__celtic_inner_clip_fp) -- +(-\fp_to_dim:N \l__celtic_inner_clip_fp,0);
+% \end{macrocode}
+% We draw just the background part of the (presumably doubled) path.
+% \begin{macrocode}
+ \path[celtic~ path/.try, celtic~ path~ \tl_use:N \l__celtic_tmpa_tl/.try, double~ background] ##1;
+ \endpgfscope
+ \pgfscope
+% \end{macrocode}
+% Noew we apply the larger clip region.
+% \begin{macrocode}
+ \clip \l__celtic_crossing_tl +(-\fp_to_dim:N \l__celtic_clip_fp,0) -- +(0,\fp_to_dim:N \l__celtic_clip_fp) -- +(\fp_to_dim:N \l__celtic_clip_fp,0) -- +(0,-\fp_to_dim:N \l__celtic_clip_fp) -- +(-\fp_to_dim:N \l__celtic_clip_fp,0);
+% \end{macrocode}
+% And draw the foreground part.
+% \begin{macrocode}
+ \path[celtic~ path/.try, celtic~ path~ \tl_use:N \l__celtic_tmpa_tl/.try,double~ foreground] ##1;
+ \endpgfscope
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% We are now leaving \LaTeX3 world.
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% Clipping with doubled paths isn't perfect when anti-aliasing is used as it produces artefacts where the lower path shows through.
+% To get round that, we need to draw the two parts of the doubled path separately.
+% The following two keys extract the line widths and colours of the two parts of a doubled path and apply it.
+% \begin{macrocode}
+\tikzset{
+% \end{macrocode}
+% This sets the stye to that of the under path.
+% \begin{macrocode}
+ double background/.code={%
+ \begingroup
+ \tikz@double@setup
+ \global\pgf@xa=\pgflinewidth
+ \endgroup
+ \expandafter\tikz@semiaddlinewidth\expandafter{\the\pgf@xa}%
+ \tikz@addmode{\tikz@mode@doublefalse}%
+ },
+% \end{macrocode}
+% This to the over path.
+% \begin{macrocode}
+ double foreground/.code={%
+ \begingroup
+ \tikz@double@setup
+ \global\pgf@xa=\pgfinnerlinewidth
+ \endgroup
+ \expandafter\tikz@semiaddlinewidth\expandafter{\the\pgf@xa}%
+ \tikz@addmode{\tikz@mode@doublefalse}%
+ \tikzset{color=\pgfinnerstrokecolor}%
+ },
+}
+% \end{macrocode}
+%
+% \iffalse
+%</library>
+% \fi
+%\Finale
+\endinput
diff --git a/graphics/pgf/contrib/celtic/celtic.pdf b/graphics/pgf/contrib/celtic/celtic.pdf
new file mode 100644
index 0000000000..74e79bdab9
--- /dev/null
+++ b/graphics/pgf/contrib/celtic/celtic.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/celtic/celtic_code.pdf b/graphics/pgf/contrib/celtic/celtic_code.pdf
new file mode 100644
index 0000000000..36757a9306
--- /dev/null
+++ b/graphics/pgf/contrib/celtic/celtic_code.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/celtic/celtic_doc.tex b/graphics/pgf/contrib/celtic/celtic_doc.tex
new file mode 100644
index 0000000000..a8cd3abaa1
--- /dev/null
+++ b/graphics/pgf/contrib/celtic/celtic_doc.tex
@@ -0,0 +1,229 @@
+\immediate\write18{tex celtic.dtx}
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{trace}
+\usepackage{lmodern}
+\usepackage{morefloats}
+\usepackage{tikz}
+\usetikzlibrary{celtic}
+\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \centering
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\providecommand*{\url}{\texttt}
+
+\title{The \textsf{celtic} TikZ Library: Documentation}
+\author{Andrew Stacey \\ \url{stacey@math.ntnu.no}}
+\date{19th February 2016}
+
+\begin{document}
+\VerbatimFootnotes
+\maketitle
+
+\begin{center}
+\begin{tikzpicture}[
+ scale=.5,
+ celtic path/.style={
+ draw,
+ double=gray!40,
+ red,
+ double distance=1mm,
+ line width=4pt
+ },
+ celtic path 1/.style={
+ green!50!black,
+ },
+]
+\CelticDrawPath{
+ symmetric crossings={
+ 1,2,-;
+ 2,1,|;
+ 4,3,-;
+ 3,4,|;
+ },
+ size={8,8},
+}
+\end{tikzpicture}
+\end{center}
+
+\section{Introduction}
+
+This is a little TikZ library for drawing Celtic style knots.
+The particular type of Celtic knot (technically, \emph{link}) is very simple and can be specified by listing the ``walls'' within the region of the knot.
+From this information, it is possible to build the entire link and thus to tell TikZ how render it.
+That is what this library does.
+
+\section{Usage}
+
+The routine is implemented as a TikZ library.
+Thus to use it, add \Verb+celtic+ to the list of TikZ libraries that you load.
+
+\begin{verbatim}
+\usetikzlibrary{celtic}
+\end{verbatim}
+
+The library defines one command which renders a Celtic knot.
+The knot is specified by passing various \emph{key-value} pairs to this command.
+The library also defines styles which can be used to modify the rendering.
+
+\DescribeMacro{\CelticDrawPath}\Verb+\CelticDrawPath{<opt>}+ is the command to render a knot.
+It takes one option which is a list of key-value pairs which specify the knot.
+The allowed key-value pairs are as follows.
+
+\begin{itemize}
+\item \Verb+max steps=N+ The process of finding the paths through the knot (needed to ensure that they are coloured correctly) is iterative.
+Although every care has been taken to ensure that the iteration is confined (and therefore finite), the iteration has been devised with a built-in limit.
+This limit can be adjusted using this key.
+The default is \(20\).
+If the limit is reached, a warning will be issued (and the knot will probably look wrong).
+In that case, use this key to raise the limit.
+
+\item \Verb+flip+ The specification of a Celtic knot in terms of walls does not completely determine it.
+There is an ambiguity as to which crossings are over and which under (once one crossing is determined, all the others follow).
+This key flips all of the crossings and so can be used to switch between the two variants.
+
+\item \Verb+width=W+, \Verb+height=H+, \Verb+size={W,H}+ These set the dimensions on the knot in terms of the number of crossings.
+The numbers must be even.
+
+\item \Verb+crossings+, \Verb+symmetric crossings+ These set the crossings.
+The general format of a crossing is \Verb+x,y,type+ where \Verb+x+ and \Verb+y+ can be either numbers or ranges, using the format \Verb+n:m+\footnote{This package uses \LaTeX3 internally; using a colon as the range separator was a headache to implement.}.
+The type of the crossing is either \Verb+|+ or \Verb+-+ for (respectively) vertical or horizontal walls\footnote{The package attempts to be smart with regard to allowing \Verb+|+ to be active.}.
+Multiple crossing specifications can be given as a semi-colon-delimited list (a final semi-colon is acceptable, making it easy to comment out items in the list).
+The \Verb+symmetric+ variant places walls at four points obtained by applying reflections to the specified crossing.
+
+\item \Verb+ignore crossings+, \Verb+ignore symmetric crossings+ The code works out the paths involved by picking a starting point and direction and then following it, bouncing off walls as appropriate, until it comes back to the beginning.
+It then picks a new starting point and continues until all crossings are used up.
+These keys designate certain points as \emph{disallowed} as starting points.
+This can be used to remove certain regions from the knot, for example to create a border around a rectangle.
+The \Verb+symmetric+ version works \dots\ symmetrically.
+
+\item \Verb+style={<style>}+ The contents of this are passed on to \Verb+\tikzset+.
+(The key-value pairs for the \Verb+\CelticDrawPath+ are actually \LaTeX3 keys, not TikZ keys, so this is the simplest way to pass them through.)
+
+\item \Verb+at=<coordinate>+ This shifts the knot so that the lower left corner is at the coordinate.
+(The default location is \Verb+(0,0)+.)
+The coordinate is passed through TikZ's processing so can be any legal TikZ coordinate.
+
+\item \Verb+inner clip=N+, \Verb+outer clip=N+. The crossings are rendered by redrawing the over paths with a clipping region.
+The size of the clipping region is determined by the line width.
+These keys add a little to that clipping region.
+This can be useful if the overdraws are not large enough, but the added amount should not be so much that the overdraws interfere with each other.
+Some experimentation is needed.
+The \Verb+inner clip+ applies to the background part of the path and the \Verb+outer clip+ to the foreground.
+
+\end{itemize}
+
+As the pieces are rendered, various TikZ styles are invoked.
+
+\begin{itemize}
+\item \Verb+celtic surround+ This style is used for the outer border.
+
+\item \Verb+celtic bar+ This is used for the internal walls.
+It is also used on the outer border (prior to the \Verb+celtic surround+ so it can be overridden).
+
+\item \Verb+celtic path+ This is used for the components of the celtic knot (link).
+
+\item \Verb+celtic path N+ The individual components can be styled using their number (there is a logic to the numbering, but experimentation is the best way to work out which is which).
+
+
+\end{itemize}
+
+\section{Example}
+
+\begin{example}
+\begin{tikzpicture}[
+ scale=.5,
+ celtic path/.style={
+ draw,
+ double=gray!40,
+ red,
+ double distance=1mm,
+ line width=4pt
+ },
+ celtic path 1/.style={
+ green!50!black,
+ },
+ celtic path 2/.style={
+ blue,
+ },
+ celtic path 3/.style={
+ red!50!black,
+ },
+ celtic surround/.style={
+ ultra thick,
+ black,
+ fill=black
+ },
+]
+\CelticDrawPath{
+ symmetric crossings={
+ 4,1:3,|;
+ 10,1,|;
+ 5,4,-;
+ 8,3,-;
+ },
+ size={20,10},
+ max steps=50
+}
+\end{tikzpicture}
+\end{example}
+
+\begin{example}
+\begin{tikzpicture}[
+ scale=.5,
+ celtic path/.style={
+ draw,
+ double=white,
+ red,
+ double distance=5pt,
+ line width=1pt
+ },
+ celtic bar/.style={
+ ultra thick,
+ black,
+ draw
+ },
+]
+\CelticDrawPath{
+ size={20,10},
+ symmetric crossings={
+ 3,4:5,|;
+ 4:16,3,-
+ },
+ ignore symmetric crossings={
+ 4:10,5;
+ 5:10,4
+ },
+ max steps=50
+}
+\end{tikzpicture}
+\end{example}
+
+\end{document}
+
+% Local Variables:
+% tex-output-type: "pdf18"
+% End:
diff --git a/graphics/pgf/contrib/celtic/tikzlibraryceltic.code.tex b/graphics/pgf/contrib/celtic/tikzlibraryceltic.code.tex
new file mode 100644
index 0000000000..f70dc9e1f8
--- /dev/null
+++ b/graphics/pgf/contrib/celtic/tikzlibraryceltic.code.tex
@@ -0,0 +1,536 @@
+%%
+%% This is file `tikzlibraryceltic.code.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% celtic.dtx (with options: `library')
+%% ----------------------------------------------------------------
+%% celtic --- TikZ library for producing Celtic knots.
+%% E-mail: loopspace@mathforge.org
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+\usepackage{expl3}
+\usepackage{xparse}
+\ExplSyntaxOn
+\cs_new_nopar:Npn \celtic_shift:n #1
+{
+ \use:c{tikz@scan@one@point}\pgftransformshift #1\relax
+}
+\int_new:N \l__celtic_max_steps_int
+\int_new:N \l__celtic_int
+\int_new:N \l__celtic_flip_int
+\int_new:N \l__celtic_width_int
+\int_new:N \l__celtic_height_int
+\int_new:N \l__celtic_x
+\int_new:N \l__celtic_y
+\int_new:N \l__celtic_dx
+\int_new:N \l__celtic_dy
+\int_new:N \l__celtic_ox
+\int_new:N \l__celtic_oy
+\int_new:N \l__celtic_lout
+\int_new:N \l__celtic_cross_int
+\int_new:N \l__celtic_component_int
+\fp_new:N \l__celtic_clip_fp
+\fp_new:N \l__celtic_inner_clip_fp
+\fp_new:N \l__celtic_inner_fp
+\fp_new:N \l__celtic_outer_fp
+\seq_new:N \l__celtic_path_seq
+\seq_new:N \l__celtic_overpath_seq
+\seq_new:N \l__celtic_component_seq
+\seq_new:N \l__celtic_crossing_seq
+\seq_new:N \l__celtic_tmpa_seq
+\clist_new:N \l__celtic_tmpa_clist
+\tl_new:N \l__celtic_tmpa_tl
+\tl_new:N \l__celtic_path_tl
+\tl_new:N \l__celtic_bar_tl
+\tl_new:N \l__celtic_active_bar_tl
+\tl_new:N \l__celtic_start_tl
+\bool_new:N \l__celtic_bounce_bool
+\bool_new:N \l__celtic_pbounce_bool
+
+\cs_new_nopar:Npn \tl_split_after:Nnn #1#2#3
+{
+ \cs_set:Npn \tl_split_aux:nnn ##1#3##2 \q_stop: {#3##2}
+ \tl_set:Nx #1 {\tl_split_aux:nnn #2 \q_stop:}
+}
+\cs_generate_variant:Nn \tl_split_after:Nnn {NVn}
+\cs_new_nopar:Npn \tl_split_before:Nnn #1#2#3
+{
+ \cs_set:Npn \tl_split_aux:nnn ##1#3##2 \q_stop: {##1#3}
+ \tl_set:Nx #1 {\tl_split_aux:nnn #2 \q_stop:}
+}
+\cs_generate_variant:Nn \tl_split_before:Nnn {NVn}
+\msg_new:nnnn { celtic } { max~ steps } { Limit~ of~ number~ of~ steps~ exceeded~ \msg_line_context:.}
+{ Paths~ may~ not~ be~ correctly~ constructed.~
+Consider~ raising~ the~ limit~ from \int_use:N \l__celtic_max_steps_int.}
+\tl_const:Nx \c__celtic_colon_tl { \token_to_str:N : }
+\tl_set:Nn \l__celtic_bar_tl {|}
+\group_begin:
+\char_set_catcode_active:N \|
+\tl_gset:Nn \l__celtic_active_bar_tl {|}
+\group_end:
+\cs_generate_variant:Nn \tl_if_single_p:N {c}
+\cs_generate_variant:Nn \tl_if_single:NTF {cTF}
+\cs_generate_variant:Nn \tl_if_eq:nnTF {xnTF}
+\cs_generate_variant:Nn \tl_head:N {c}
+\cs_generate_variant:Nn \tl_tail:N {c}
+\cs_generate_variant:Nn \tl_if_eq:nnTF {vnTF}
+\cs_generate_variant:Nn \tl_if_in:nnTF {nVTF}
+\int_set:Nn \l__celtic_max_steps_int {20}
+\fp_set:Nn \l__celtic_inner_fp {1}
+\fp_set:Nn \l__celtic_outer_fp {2}
+\cs_new_nopar:Npn \celtic_do_crossing:nnn #1#2#3
+{
+ \tl_if_empty:nTF {#1}
+ {
+ \tl_clear:c {crossing used \int_eval:n {#2} - \int_eval:n {#3}}
+ }
+ {
+ \tl_set:cn {crossing \int_eval:n {#2} - \int_eval:n{#3}}{#1}
+ }
+}
+\cs_new_nopar:Npn \celtic_maybe_symmetric:nnnn #1#2#3#4
+{
+ \tl_if_empty:nTF {#1}
+ {
+ \celtic_do_crossing:nnn {#2}{#3}{#4}
+ }
+ {
+ \celtic_do_crossing:nnn {#2}{#3}{#4}
+ \celtic_do_crossing:nnn {#2}{\l__celtic_width_int - #3}{#4}
+ \celtic_do_crossing:nnn {#2}{#3}{\l__celtic_height_int - #4}
+ \celtic_do_crossing:nnn {#2}{\l__celtic_width_int - #3}{\l__celtic_height_int - #4}
+ }
+}
+\cs_new_nopar:Npn \celtic_maybe_xrange:nnnn #1#2#3#4
+{
+ \tl_if_in:nVTF {#3} \c__celtic_colon_tl
+ {
+ \celtic_do_xrange:w {#1}{#2}#3\q_stop{#4}
+ }
+ {
+ \celtic_maybe_yrange:nnnn {#1}{#2}{#3}{#4}
+ }
+}
+\cs_new_nopar:Npn \celtic_maybe_yrange:nnnn #1#2#3#4
+{
+ \tl_if_in:nVTF {#4} \c__celtic_colon_tl
+ {
+ \celtic_do_yrange:w {#1}{#2}{#3}#4\q_stop
+ }
+ {
+ \celtic_maybe_symmetric:nnnn {#1}{#2}{#3}{#4}
+ }
+}
+\tl_set:Nx \l_tmpa_tl
+{
+ \exp_not:N \cs_new_nopar:Npn \exp_not:N \celtic_do_xrange:w ##1##2##3\tl_use:N \c__celtic_colon_tl ##4\exp_not:N \q_stop##5
+ {
+ \exp_not:N \int_step_inline:nnnn {##3} {2} {##4}
+ {
+ \exp_not:N \celtic_maybe_yrange:nnnn {##1}{##2} {####1}{##5}
+ }
+ }
+ \exp_not:N \cs_new_nopar:Npn \exp_not:N \celtic_do_yrange:w ##1##2##3##4\tl_use:N \c__celtic_colon_tl ##5\exp_not:N \q_stop
+ {
+ \exp_not:N \int_step_inline:nnnn {##4} {2} {##5}
+ {
+ \exp_not:N \celtic_maybe_symmetric:nnnn {##1}{##2}{##3}{####1}
+ }
+ }
+}
+\tl_use:N \l_tmpa_tl
+\cs_new_nopar:Npn \celtic_ignore_crossings:w #1,#2\q_stop
+{
+ \celtic_maybe_xrange:nnnn {}{}{#1}{#2}
+}
+\cs_new_nopar:Npn \celtic_ignore_symmetric_crossings:w #1,#2\q_stop
+{
+ \celtic_maybe_xrange:nnnn {s}{}{#1}{#2}
+}
+\cs_new_nopar:Npn \celtic_set_crossings:w #1,#2,#3\q_stop
+{
+ \celtic_maybe_xrange:nnnn {}{#3}{#1}{#2}
+}
+\cs_new_nopar:Npn \celtic_set_symmetric_crossings:w #1,#2,#3\q_stop
+{
+ \celtic_maybe_xrange:nnnn {s}{#3}{#1}{#2}
+}
+\cs_new_nopar:Npn \celtic_next_crossing:
+{
+ \int_zero:N \l__celtic_cross_int
+ \tl_clear:N \l__celtic_crossing_tl
+ \tl_clear:N \l__celtic_path_tl
+ \tl_clear:N \l__celtic_overpath_tl
+ \bool_set_false:N \l__celtic_bounce_tl
+ \tl_set:Nx \l__celtic_start_tl {(\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+ \int_set:Nn \l__celtic_lout {(90 - \l__celtic_dx * 45) * \l__celtic_dy}
+ \bool_do_until:nn {\int_compare_p:n {\l__celtic_cross_int > 1}}
+ {
+ \bool_set_eq:NN \l__celtic_pbounce_bool \l__celtic_bounce_bool
+ \bool_set_false:N \l__celtic_bounce_bool
+ \int_add:Nn \l__celtic_x {\l__celtic_dx}
+ \int_add:Nn \l__celtic_y {\l__celtic_dy}
+ \tl_if_exist:cT {crossing \int_use:N \l__celtic_x - \int_use:N \l__celtic_y}
+ {
+ \tl_if_eq:cNTF {crossing \int_use:N \l__celtic_x - \int_use:N \l__celtic_y} \l__celtic_bar_tl
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { -| }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n
+{(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n
+{-90*\l__celtic_dy}] }
+ }
+ \int_set:Nn \l__celtic_lout {90*\l__celtic_dy}
+ \int_set:Nn \l__celtic_dx {-\l__celtic_dx}
+ \tl_put_right:Nx \l__celtic_path_tl {(\fp_eval:n {\int_use:N \l__celtic_x + .5 * \int_use:N \l__celtic_dx}, \int_use:N \l__celtic_y)}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { |- }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {90 + 90*\l__celtic_dx}] }
+ }
+ \int_set:Nn \l__celtic_lout {90-90*\l__celtic_dx}
+ \int_set:Nn \l__celtic_dy {-\l__celtic_dy}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \fp_eval:n {\int_use:N \l__celtic_y + .5 * \int_use:N \l__celtic_dy})}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ }
+ \int_compare:nT {\l__celtic_x == 0}
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { -| }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {-90*\l__celtic_dy}] }
+ }
+ \int_set:Nn \l__celtic_lout {90*\l__celtic_dy}
+ \int_set:Nn \l__celtic_dx {-\l__celtic_dx}
+ \tl_put_right:Nx \l__celtic_path_tl {(\fp_eval:n {\int_use:N \l__celtic_x + .5 * \int_use:N \l__celtic_dx}, \int_use:N \l__celtic_y)}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ \int_compare:nT {\l__celtic_x == \l__celtic_width_int}
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { -| }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {-90*\l__celtic_dy}] }
+ }
+ \int_set:Nn \l__celtic_lout {90*\l__celtic_dy}
+ \int_set:Nn \l__celtic_dx {-\l__celtic_dx}
+ \tl_put_right:Nx \l__celtic_path_tl {(\fp_eval:n {\int_use:N \l__celtic_x + .5 * \int_use:N \l__celtic_dx}, \int_use:N \l__celtic_y)}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ \int_compare:nT {\l__celtic_y == 0}
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { |- }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {90 + 90*\l__celtic_dx}] }
+ }
+ \int_set:Nn \l__celtic_lout {90-90*\l__celtic_dx}
+ \int_set:Nn \l__celtic_dy {-\l__celtic_dy}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \fp_eval:n {\int_use:N \l__celtic_y + .5 * \int_use:N \l__celtic_dy})}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ \int_compare:nT {\l__celtic_y == \l__celtic_height_int}
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { |- }
+ }
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_eval:n {(90 - 45*\l__celtic_dx)*\l__celtic_dy}, in=\int_eval:n {90 + 90*\l__celtic_dx}] }
+ }
+ \int_set:Nn \l__celtic_lout {-90+90*\l__celtic_dx}
+ \int_set:Nn \l__celtic_dy {-\l__celtic_dy}
+ \tl_put_right:Nx \l__celtic_path_tl {(\int_use:N \l__celtic_x, \fp_eval:n {\int_use:N \l__celtic_y + .5 * \int_use:N \l__celtic_dy})}
+ \bool_set_true:N \l__celtic_bounce_bool
+ }
+ \bool_if:NF \l__celtic_bounce_bool
+ {
+ \bool_if:NTF \l__celtic_pbounce_bool
+ {
+ \tl_put_right:Nx \l__celtic_path_tl { to[out=\int_use:N \l__celtic_lout,in=\int_eval:n {(-90 - 45 * \l__celtic_dx)*\l__celtic_dy}] }
+ }
+ {
+ \tl_put_right:Nn \l__celtic_path_tl { -- }
+ }
+ \tl_put_right:Nx \l__celtic_path_tl { (\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+ \tl_if_empty:NTF \l__celtic_crossing_tl
+ {
+ \tl_set:Nx \l__celtic_crossing_tl {(\int_use:N \l__celtic_x, \int_use:N \l__celtic_y)}
+ }
+ {
+ \tl_clear:c {crossing used \int_use:N \l__celtic_x - \int_use:N \l__celtic_y}
+ }
+ \int_incr:N \l__celtic_cross_int
+ \int_set:Nn \l__celtic_lout {(90 - \l__celtic_dx * 45) * \l__celtic_dy}
+ }
+ }
+ \tl_set_eq:NN \l__celtic_overpath_tl \l__celtic_path_tl
+ \tl_set:Nx \l__celtic_tmpa_tl {(\int_use:N \l__celtic_x, \int_use:N
+\l__celtic_y)}
+ \tl_if_eq:NNT \l__celtic_crossing_tl \l__celtic_tmpa_tl
+ {
+ \tl_reverse:N \l__celtic_overpath_tl
+ \tl_set:Nx \l__celtic_overpath_tl {\tl_tail:N \l__celtic_overpath_tl}
+ \tl_split_after:NVn \l__celtic_overpath_tl \l__celtic_overpath_tl {)}
+ \tl_reverse:N \l__celtic_overpath_tl
+ }
+ \tl_if_eq:NNT \l__celtic_crossing_tl \l__celtic_start_tl
+ {
+ \tl_set:Nx \l__celtic_overpath_tl {\tl_tail:N \l__celtic_overpath_tl}
+ \tl_split_after:NVn \l__celtic_overpath_tl \l__celtic_overpath_tl {(}
+ }
+}
+\keys_define:nn { celtic }
+{
+ max~ steps .int_set:N = \l__celtic_max_steps_int,
+ flip .code:n = {
+ \int_set:Nn \l__celtic_flip_int {-1}
+ },
+ width .int_set:N = \l__celtic_width_int,
+ height .int_set:N = \l__celtic_height_int,
+ size .code:n = {
+ \clist_set:Nn \l__celtic_tmpa_clist {#1}
+ \clist_pop:NN \l__celtic_tmpa_clist \l__celtic_tmpa_tl
+ \int_set:Nn \l__celtic_width_int {\l__celtic_tmpa_tl}
+ \clist_pop:NN \l__celtic_tmpa_clist \l__celtic_tmpa_tl
+ \int_set:Nn \l__celtic_height_int {\l__celtic_tmpa_tl}
+ },
+ width .groups:n = { size },
+ height .groups:n = { size },
+ size .groups:n = { size },
+ crossings .code:n = {
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_set_crossings:w ##1 \q_stop
+ }
+ }
+ },
+ symmetric~ crossings .code:n = {
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_set_symmetric_crossings:w ##1 \q_stop
+ }
+ }
+ },
+ ignore~ crossings .code:n ={
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_ignore_crossings:w ##1 \q_stop
+ }
+ }
+ },
+ ignore~ symmetric~ crossings .code:n ={
+ \seq_set_split:Nnn \l__celtic_tmpa_seq {;} {#1}
+ \seq_map_inline:Nn \l__celtic_tmpa_seq {
+ \tl_if_empty:nF {##1}
+ {
+ \celtic_ignore_symmetric_crossings:w ##1 \q_stop
+ }
+ }
+ },
+ style .code:n = {
+ \tikzset {#1}
+ },
+ at .code:n = {
+ \celtic_shift:n {#1}
+ },
+ inner~ clip .fp_set:N = \l__celtic_inner_fp,
+ outer~ clip .fp_set:N = \l__celtic_outer_fp,
+}
+\DeclareDocumentCommand \CelticDrawPath { m }
+{
+ \group_begin:
+ \pgfscope
+ \seq_clear:N \l__celtic_path_seq
+ \seq_clear:N \l__celtic_overpath_seq
+ \seq_clear:N \l__celtic_component_seq
+ \seq_clear:N \l__celtic_crossing_seq
+ \int_set:Nn \l__celtic_flip_int {1}
+\int_compare:nT {\char_value_catcode:n {`\|} = 13}
+{
+ \tl_set_eq:NN \l__celtic_bar_tl \l__celtic_active_bar_tl
+}
+ \int_step_inline:nnnn {1} {1} {\l__celtic_height_int-1}
+ {
+ \int_step_inline:nnnn {1 + \int_mod:nn {##1}{2}} {2} {\l__celtic_width_int-1}
+{
+ \tl_clear_new:c {crossing used ####1 - ##1}
+ \tl_set:cn {crossing used ####1 - ##1} {X}
+}
+ }
+ \keys_set_groups:nnn { celtic } { size } {#1}
+ \keys_set_filter:nnn { celtic } { size } {#1}
+ \path[celtic~ bar/.try, celtic~ surround/.try] (0,0) rectangle (\int_use:N \l__celtic_width_int, \int_use:N \l__celtic_height_int);
+ \int_step_inline:nnnn {1} {1} {\l__celtic_height_int-1}
+ {
+ \int_step_inline:nnnn {1 + \int_mod:nn {##1}{2}} {2} {\l__celtic_width_int-1}
+{
+ \tl_if_exist:cT {crossing ####1 - ##1}
+ {
+ \tl_if_eq:cNTF {crossing ####1 - ##1} \l__celtic_bar_tl
+ {
+ \path[celtic~ bar/.try] (####1,##1-1) -- (####1,##1+1);
+ }
+ {
+ \path[celtic~ bar/.try] (####1-1,##1) -- (####1+1,##1);
+ }
+ }
+}
+ }
+ \int_step_inline:nnnn {1} {1} {\l__celtic_height_int-1}
+ {
+ \int_step_inline:nnnn {1 + \int_mod:nn {##1}{2}} {2} {\l__celtic_width_int-1}
+{
+ \celtic_generate_path:nnx {####1}{##1}{\int_eval:n {\l__celtic_flip_int*(2*\int_mod:nn{####1}{2} - 1)}}
+ }
+ }
+ \celtic_render_path:
+ \endpgfscope
+ \group_end:
+}
+\cs_new_nopar:Npn \celtic_generate_path:nnn #1#2#3
+{
+ \bool_if:nF {
+ \tl_if_exist_p:c {crossing #1 - #2}
+ ||
+ \tl_if_empty_p:c {crossing used #1 - #2}
+ }
+ {
+ \tl_clear:c {crossing used #1 - #2}
+ \int_incr:N \l__celtic_component_int
+ \int_set:Nn \l__celtic_x {#1}
+ \int_set:Nn \l__celtic_y {#2}
+ \int_set_eq:NN \l__celtic_ox \l__celtic_x
+ \int_set_eq:NN \l__celtic_oy \l__celtic_y
+ \int_set:Nn \l__celtic_dx {#3}
+ \int_set:Nn \l__celtic_dy {1}
+ \int_zero:N \l__celtic_int
+ \bool_do_until:nn
+ {
+ (\int_compare_p:n {\l__celtic_x == \l__celtic_ox}
+ &&
+ \int_compare_p:n {\l__celtic_y == \l__celtic_oy}
+ )
+ || \int_compare_p:n {\l__celtic_int > \l__celtic_max_steps_int}
+ }
+ {
+ \int_incr:N \l__celtic_int
+ \celtic_next_crossing:
+ \seq_put_left:NV \l__celtic_path_seq \l__celtic_path_tl
+ \seq_put_left:NV \l__celtic_overpath_seq \l__celtic_overpath_tl
+ \seq_put_left:NV \l__celtic_crossing_seq \l__celtic_crossing_tl
+ \seq_put_left:NV \l__celtic_component_seq \l__celtic_component_int
+ }
+ \int_compare:nT {\l__celtic_int > \l__celtic_max_steps_int}
+ {
+ \msg_warning:nn {celtic} { max~ steps }
+ }
+ }
+}
+\cs_generate_variant:Nn \celtic_generate_path:nnn {nnx}
+\cs_new_nopar:Npn \celtic_render_path:
+{
+ \seq_map_inline:Nn \l__celtic_path_seq
+ {
+ \seq_pop:NN \l__celtic_component_seq \l__celtic_tmpa_tl
+ \seq_put_right:NV \l__celtic_component_seq \l__celtic_tmpa_tl
+ \path[celtic~ path/.try, celtic~ path~ \tl_use:N \l__celtic_tmpa_tl/.try] ##1;
+ }
+ \group_begin:
+ \pgfscope
+ \tikzset{celtic~ path/.try}
+ \tl_use:c {tikz@double@setup}
+ \tl_set:Nn \l__celtic_tmpa_tl
+ {
+ \endpgfscope
+ \group_end:
+ \fp_set:Nn \l__celtic_clip_fp
+ }
+ \tl_put_right:Nx \l__celtic_tmpa_tl {{\dim_use:N \pgflinewidth}}
+ \tl_use:N \l__celtic_tmpa_tl
+ \fp_set:Nn \l__celtic_inner_clip_fp {sqrt(2) * (\l__celtic_clip_fp + \l__celtic_inner_fp)}
+ \fp_set:Nn \l__celtic_clip_fp {sqrt(2) * (\l__celtic_clip_fp + \l__celtic_outer_fp)}
+ \seq_map_inline:Nn \l__celtic_overpath_seq
+ {
+ \seq_pop:NN \l__celtic_crossing_seq \l__celtic_crossing_tl
+ \seq_pop:NN \l__celtic_component_seq \l__celtic_tmpa_tl
+ \seq_put_right:NV \l__celtic_component_seq \l__celtic_tmpa_tl
+ \pgfscope
+ \clip \l__celtic_crossing_tl +(-\fp_to_dim:N \l__celtic_inner_clip_fp,0) -- +(0,\fp_to_dim:N \l__celtic_inner_clip_fp) -- +(\fp_to_dim:N \l__celtic_inner_clip_fp,0) -- +(0,-\fp_to_dim:N \l__celtic_inner_clip_fp) -- +(-\fp_to_dim:N \l__celtic_inner_clip_fp,0);
+ \path[celtic~ path/.try, celtic~ path~ \tl_use:N \l__celtic_tmpa_tl/.try, double~ background] ##1;
+ \endpgfscope
+ \pgfscope
+ \clip \l__celtic_crossing_tl +(-\fp_to_dim:N \l__celtic_clip_fp,0) -- +(0,\fp_to_dim:N \l__celtic_clip_fp) -- +(\fp_to_dim:N \l__celtic_clip_fp,0) -- +(0,-\fp_to_dim:N \l__celtic_clip_fp) -- +(-\fp_to_dim:N \l__celtic_clip_fp,0);
+ \path[celtic~ path/.try, celtic~ path~ \tl_use:N \l__celtic_tmpa_tl/.try,double~ foreground] ##1;
+ \endpgfscope
+ }
+}
+\ExplSyntaxOff
+\tikzset{
+ double background/.code={%
+ \begingroup
+ \tikz@double@setup
+ \global\pgf@xa=\pgflinewidth
+ \endgroup
+ \expandafter\tikz@semiaddlinewidth\expandafter{\the\pgf@xa}%
+ \tikz@addmode{\tikz@mode@doublefalse}%
+ },
+ double foreground/.code={%
+ \begingroup
+ \tikz@double@setup
+ \global\pgf@xa=\pgfinnerlinewidth
+ \endgroup
+ \expandafter\tikz@semiaddlinewidth\expandafter{\the\pgf@xa}%
+ \tikz@addmode{\tikz@mode@doublefalse}%
+ \tikzset{color=\pgfinnerstrokecolor}%
+ },
+}
+%%
+%% Copyright (C) 2014 by Andrew Stacey <loopspace@mathforge.org>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Andrew Stacey.
+%%
+%% This work consists of the files celtic.dtx
+%% celtic_doc.tex
+%% and the derived files celtic.ins
+%% celtic_code.pdf
+%% tikzlibraryceltic.code.tex
+%% celtic.pdf
+%% README
+%%
+%%
+%% End of file `tikzlibraryceltic.code.tex'.
diff --git a/graphics/pgf/contrib/chordbars/README.md b/graphics/pgf/contrib/chordbars/README.md
new file mode 100644
index 0000000000..1524cfd72f
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/README.md
@@ -0,0 +1,12 @@
+# chordbars
+A music-related LaTeX package useful to write chord grids.
+
+From a given chord progression (a harmonic pattern), it draws nice rectangles (one square per bar) with the chord name inside, and shows the number of repetitions and the bar count.
+For details, see included manual.
+
+Author: S. Kramm - 2018
+
+Licence: The LaTeX project public license (LPPL), version 1.3c
+
+Available via CTAN: https://ctan.org/pkg/chordbars
+
diff --git a/graphics/pgf/contrib/chordbars/chordbars.sty b/graphics/pgf/contrib/chordbars/chordbars.sty
new file mode 100644
index 0000000000..4064cf14c8
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/chordbars.sty
@@ -0,0 +1,393 @@
+%% file: chordbars.sty
+%% Copyright 2018 M. Sebastien Kramm
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is M. Sebastien Kramm
+%
+% This work consists of the files chordbars.sty and chordbars_manual.tex
+
+% Home page: https://github.com/skramm/chordbars
+
+
+% TODO define command to have 1 chord per beat
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{chordbars}[2017-12-29 version 1.1]
+
+\RequirePackage{tikz}
+\RequirePackage{pgfmath}
+\RequirePackage{tkz-euclide}
+
+\usetikzlibrary{math,shapes}
+
+\RequirePackage{calc}
+\RequirePackage{ifthen}
+%\RequirePackage{fixltx2e}
+
+\def\vspacebefore{1ex}
+\def\vspaceafter{1ex}
+
+\newcommand{\songtitle}
+{
+ \begin{center}%
+ \begin{tikzpicture}[line width=1.5pt]
+ \tikzstyle{block} = [rectangle, draw, text width=20em, text centered, minimum height=4em]
+ \node [block,font=\fontsize{20}{28}\selectfont\bfseries] (init) { \@title\\ \@author };
+ \end{tikzpicture}
+ \end{center}%
+ \par
+ \vskip 1.5em
+}
+
+\newcounter{NumMesure}
+\newcounter{NumPart}
+\newcounter{CurrentBarInLine}
+\newcounter{CurrentBar}
+\newcounter{CurrentLine}
+
+\newcommand{\bpm}[1]
+{
+ \xdef\tempoBPM{#1}
+ \rightline{Tempo=#1 BPM}
+}
+
+% "Beats Per Bar"
+% default value
+\xdef\bpb{4}
+
+\newcommand{\bpbfour}
+{
+ \xdef\bpb{4}
+}
+\newcommand{\bpbthree}
+{
+ \xdef\bpb{3}
+}
+
+\newcommand{\resetchordbars}
+{
+ \setcounter{NumMesure}{0}
+ \setcounter{NumPart}{0}
+ \setcounter{CurrentBarInLine}{0}
+}
+
+\newcommand{\printNbBars}
+{
+ \ifthenelse{\boolean{printBarNumber}}
+ {
+ Total number of bars: \arabic{NumMesure}, duration=\pgfmathparse{\theNumMesure/\tempoBPM*60*\bpb}\pgfmathresult {} s.
+ }{}
+}
+
+\newboolean{printBarNumber}
+
+\newcommand{\countbarsYes}
+{
+ \setboolean{printBarNumber}{true}
+}
+
+\newcommand{\countbarsNo}
+{
+ \setboolean{printBarNumber}{false}
+}
+
+\def\barsize{1.6}%
+\def\delta{0.36}
+
+\def\chordFontSize{\normalsize \bfseries}
+\def\titleFontSize{\large \bfseries}
+
+\xdef\NumberOfBarsPerLine{4}
+
+% arg1: chord
+% arg2: number of bars
+% arg3: title
+\newcommand{\chordline}[3]
+{
+ {\fontfamily{phv}\selectfont
+ \noindent\ignorespaces %
+ \vspace{\vspacebefore}
+ \refstepcounter{NumMesure}%
+ \refstepcounter{NumPart}%
+ \begin{tikzpicture}[line width=1pt,x=1cm,y=-1cm]
+
+% draw part title
+ \ifthenelse
+ {\boolean{printBarNumber}}
+ {
+ \draw (0,-\barsize*.2) node [anchor=west, align=left,font=\titleFontSize] {Part \theNumPart: #3};
+ \draw (-.3,.5*\barsize) node{\bf \theNumMesure};
+ }
+ {
+ \draw (0,-\barsize*.2) node [anchor=west, align=left,font=\titleFontSize] {#3};
+ }
+
+ \draw (0,0) -- (#2*\barsize,0); % horizontal lines
+ \draw (0,\barsize) -- (#2*\barsize,\barsize);
+
+ \draw (0,0) -- (0,\barsize); % first vertical line
+ \draw (\barsize,0) -- (\barsize,\barsize); % second vertical line
+ \draw (\barsize/2,\barsize/2) node [font=\chordFontSize]{#1}; % chord name
+
+ \foreach \k in {2,...,{#2}}
+ {
+ \draw (\k*\barsize,0) -- (\k*\barsize,\barsize);
+
+ \pgfmathsetmacro{\Axa}{(\k-1)*\barsize+\delta*\barsize}
+ \pgfmathsetmacro{\Axb}{\k*\barsize-\delta*\barsize}
+ \pgfmathsetmacro{\Aya}{(1-\delta)*\barsize}
+ \pgfmathsetmacro{\Ayb}{\delta*\barsize}
+
+ \coordinate (A) at (\Axa,\Ayb);
+ \coordinate (B) at (\Axb,\Aya);
+
+ \fill (A) circle[radius=2pt];
+ \fill (B) circle[radius=2pt];
+ \draw [thick] (\Axa,\Aya) -- (\Axb,\Ayb); % Draw "repeat" symbol
+ }
+
+ \end{tikzpicture}
+ }
+ \addtocounter{NumMesure}{#2}
+}
+
+%==========================================================================
+% main environment, has 2 mandatory arguments
+% arg 1 (#2 inside): total number of 4 beat bars (4, 8, ...)
+% arg 2 {#3 inside}: part name (can be empty)
+% optional arg: nb of repetitions (default is 1)
+
+\newenvironment{chordbar}[3][1]
+{
+ \newcommand{\newchordline}
+ {
+ \setcounter{CurrentBarInLine}{0}
+ \refstepcounter{CurrentLine}
+ }
+
+ \newcommand{\chordf}[1]%
+ {
+ \ifthenelse
+ {\theCurrentBarInLine=\NumberOfBarsPerLine}
+ {
+ \refstepcounter{CurrentLine}
+ \setcounter{CurrentBarInLine}{0}
+ }
+ {}
+ \refstepcounter{CurrentBarInLine}%
+ \pgfmathsetmacro{\x}{-\barsize/2+\theCurrentBarInLine*\barsize}
+ \pgfmathsetmacro{\y}{\value{CurrentLine})*\barsize+\barsize/2}
+ \draw (\x,\y) node [font=\chordFontSize]{##1};%
+ }%
+
+ \newcommand{\chordh}[2]%
+ {
+ \ifthenelse
+ {\theCurrentBarInLine=\NumberOfBarsPerLine}
+ {
+ \refstepcounter{CurrentLine}
+ \setcounter{CurrentBarInLine}{0}
+ }
+ {}
+ \refstepcounter{CurrentBarInLine}%
+ \typeout{CurrentBarInLine=\theCurrentBarInLine}
+ \draw ( %
+ {\barsize*(\theCurrentBarInLine-1)}, %
+ {(\theCurrentLine+1)*\barsize} %
+ ) %
+ -- %
+ ( %
+ {\theCurrentBarInLine*\barsize}, %
+ {\theCurrentLine*\barsize} %
+ );
+ \draw (
+ {-3*\barsize/4+\theCurrentBarInLine*\barsize},
+ {\theCurrentLine*\barsize+1*\barsize/4}
+ ) node [font=\chordFontSize]{##1};
+ \draw (
+ {-\barsize/4+\theCurrentBarInLine*\barsize},
+ {\theCurrentLine*\barsize+3*\barsize/4}
+ ) node [font=\chordFontSize]{##2};%
+
+ }
+
+ \newcommand{\repeatBar}%
+ { %
+ \ifthenelse
+ {\theCurrentBarInLine=\NumberOfBarsPerLine}
+ {
+ \refstepcounter{CurrentLine}
+ \setcounter{CurrentBarInLine}{0}
+ }
+ {}
+ \refstepcounter{CurrentBarInLine}%
+
+ \pgfmathsetmacro{\Axa}{(\theCurrentBarInLine-1)*\barsize+\delta*\barsize}
+ \pgfmathsetmacro{\Axb}{\theCurrentBarInLine*\barsize-\delta*\barsize}
+ \pgfmathsetmacro{\Aya}{(1-\delta)*\barsize+\theCurrentLine*\barsize}
+ \pgfmathsetmacro{\Ayb}{\delta*\barsize+\theCurrentLine*\barsize}
+
+ \coordinate (A) at (\Axa,\Ayb);
+ \coordinate (B) at (\Axb,\Aya);
+
+ \fill (A) circle[radius=2pt];
+ \fill (B) circle[radius=2pt];
+ \draw [thick] (\Axa,\Aya) -- (\Axb,\Ayb); %
+ }%
+
+ \newcommand{\repeatBarPair}%
+ { %
+ \pgfmathsetmacro{\Axa}{\theCurrentBarInLine*\barsize+\delta*\barsize}
+ \pgfmathsetmacro{\Axb}{(\theCurrentBarInLine+2)*\barsize-\delta*\barsize}
+ \pgfmathsetmacro{\Aya}{(1-\delta)*\barsize+\theCurrentLine*\barsize}
+ \pgfmathsetmacro{\Ayb}{\delta*\barsize+\theCurrentLine*\barsize}
+
+ \coordinate (A) at (\Axa,\Ayb);
+ \coordinate (B) at (\Axb,\Aya);
+
+ \fill (A) circle[radius=2pt];
+ \fill (B) circle[radius=2pt];
+ \draw [thick] (\Axa,\Aya) -- (\Axb,\Ayb); %
+ %
+ \refstepcounter{CurrentBarInLine}
+ \refstepcounter{CurrentBarInLine}
+ \ifnum\value{CurrentBarInLine}=#2
+ {
+ \refstepcounter{CurrentLine}
+ \setcounter{CurrentBarInLine}{0}
+ }
+ \fi
+ }%
+
+ \newcommand{\addHalfBar}[1]%
+ {
+ \refstepcounter{NumMesure}%
+ \refstepcounter{CurrentBarInLine}%
+
+% \pgfmathsetmacro{\xa}{(\theCurrentBarInLine-1)*\barsize}
+% \pgfmathsetmacro{\xb}{\theCurrentBarInLine*\barsize}
+%
+% \pgfmathsetmacro{\ya}{\theCurrentLine*\barsize}
+% \pgfmathsetmacro{\ya}{(\theCurrentLine+1)*\barsize}
+
+% diagonal line
+% \draw (\xa,\ya) -- (\xb,\yb); A BUG HERE: investigate
+ \draw
+ (\theCurrentBarInLine*\barsize,{\theCurrentLine*\barsize})
+ --
+ ({(\theCurrentBarInLine-1)*\barsize},{(\theCurrentLine+1)*\barsize});
+
+% horizontal line
+ \draw
+ (\theCurrentBarInLine*\barsize,{\theCurrentLine*\barsize})
+ --
+ ({(\theCurrentBarInLine-1)*\barsize},{(\theCurrentLine)*\barsize});
+
+
+ \pgfmathsetmacro{\x}{-3*\barsize/4+\theCurrentBarInLine*\barsize}
+ \pgfmathsetmacro{\y}{\value{CurrentLine})*\barsize+\barsize/4}
+ \draw (\x,\y) node [font=\chordFontSize]{##1};%
+
+ }
+
+ \typeout{chordbar: START #3}
+
+ \fontfamily{phv}\selectfont
+ \setcounter{CurrentLine}{0}
+ \setcounter{CurrentBarInLine}{0}
+ \setcounter{CurrentBar}{0}
+
+ \refstepcounter{NumPart}%
+ \refstepcounter{NumMesure}%
+ \noindent\ignorespaces %
+ \vspace{\vspacebefore}
+%\resizebox{8cm}{!} {
+% \scalebox{2}{
+ \begin{tikzpicture}[line width=1pt,x=1cm,y=-1cm] %,scale=2]
+
+ \ifthenelse
+ {\boolean{printBarNumber}}
+ {\draw (-.3,.5*\barsize) node{\bf \theNumMesure};}
+ {}
+
+% compute the number of bars of the first line
+ \xdef\NbBarsInitialLine{\NumberOfBarsPerLine}
+ \ifthenelse
+ {#2<\NumberOfBarsPerLine}
+ {\xdef\NbBarsInitialLine{#2}}
+ {}
+
+% initial horizontal line
+ \draw (0,0) -- (\NbBarsInitialLine*\barsize,0);
+
+% draw part title
+ \ifthenelse
+ {\boolean{printBarNumber}}
+ {\draw (0,-\barsize*.2) node [anchor=west, align=left,font=\titleFontSize] {Part \theNumPart: #3};}
+ {\draw (0,-\barsize*.2) node [anchor=west, align=left,font=\titleFontSize] {#3};}
+
+ \pgfmathtruncatemacro{\nblines}{(#2-1)/\NumberOfBarsPerLine+1}
+ \typeout{chordbarl: nblines=\nblines}
+ \foreach \line in {1,...,\nblines}
+ {
+
+ \draw (0,{\barsize*(\line-1)}) -- (0,\line*\barsize); % first vertical line
+ \xdef\nbbars{\NumberOfBarsPerLine}
+ \ifnum\line=\nblines
+ {
+ \pgfmathtruncatemacro{\nbbars}{#2-\NumberOfBarsPerLine*(\nblines-1)}
+ \xdef\nbbars{\nbbars}
+ }
+ \fi
+ \typeout{chordbarl: nbbars=\nbbars}
+ \foreach \k in {1,...,{\nbbars}}
+ {
+ \draw (\k*\barsize,{(\line-1)*\barsize}) -- (\k*\barsize,{\line*\barsize});
+ \draw (0,{\line*\barsize}) -- (\k*\barsize,{\line*\barsize});
+
+ \refstepcounter{CurrentBar}%
+ }
+ }
+ \setcounter{NumMesure}{#1*#2+\value{NumMesure}-1}
+
+% print the number of repetitions
+ \ifnum#1=1 {}
+ \else
+ \ifthenelse
+ {\boolean{printBarNumber}}
+ {\draw (\NbBarsInitialLine*\barsize+1,0.5*\barsize) node {\Large \bf x~#1};}
+ {}
+ \fi
+}%
+{
+\typeout{chordbar: END}
+ \end{tikzpicture}
+% } %
+% \par\noindent%
+% \ignorespacesafterend
+ \vspace{\vspaceafter}
+}
+
+% so the user can use # without escaping
+% see https://tex.stackexchange.com/questions/467562
+\AtBeginDocument{\catcode`#=12 }
+
+% additional code: redefine sharp and flat in text mode
+% from https://tex.stackexchange.com/a/422249/11083
+\let\OLDsharp\sharp
+\renewcommand{\sharp}{\ensuremath{\OLDsharp}}
+\let\OLDflat\flat
+\renewcommand{\flat}{\ensuremath{\OLDflat}}
+
+\endinput
+
diff --git a/graphics/pgf/contrib/chordbars/chordbars_manual.pdf b/graphics/pgf/contrib/chordbars/chordbars_manual.pdf
new file mode 100644
index 0000000000..088f4c9212
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/chordbars_manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/chordbars/chordbars_manual.tex b/graphics/pgf/contrib/chordbars/chordbars_manual.tex
new file mode 100644
index 0000000000..ec162beeb3
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/chordbars_manual.tex
@@ -0,0 +1,294 @@
+%% file: chordbars_manual.tex
+%% Copyright 2018 M. Sebastien Kramm
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is M. Sebastien Kramm
+%
+% This work consists of the files chordbars.sty and chordbars_manual.tex
+
+% Home page: https://github.com/skramm/chordbars
+
+\documentclass[11pt]{article}
+\usepackage[utf8]{inputenc}
+\usepackage{hyperref}
+\usepackage[left=2.00cm,vmargin=1cm]{geometry}
+\usepackage{mathcomp} % for \textdiscount
+\usepackage{listings}
+
+\lstset{
+ frame=single
+ ,language=TeX
+ ,basicstyle=\ttfamily
+ ,escapechar=\*
+}
+\usepackage{chordbars}
+
+% Add an extra line between paragraphs.
+\setlength{\parskip}{0.5\baselineskip}
+
+% Remove the indent at the start of paragraphs.
+\setlength{\parindent}{0pt}
+
+% Bold + tt
+\newcommand{\btt}{\bfseries \ttfamily }
+
+% shorthand
+\newcommand{\tbs}{\textbackslash{}}
+
+%\usepackage{parskip}
+
+\title{The chordbars Package}
+\author{S. Kramm}
+\date{\today {} - release 1.1}
+\begin{document}
+\maketitle
+
+\begin{abstract}
+This Tikz-based musical notation related package is targeted at guitar / bass / piano / whatever players that are playing "popular music" accompaniment.
+They usually need only the chords and the song structure.
+This package produces rectangular song patterns with "1 square per bar", with the chord shown inside the square.
+It also handles the song structure by showing the bar count, and the repetitions of the patterns.
+\end{abstract}
+
+Package home page: \url{https://github.com/skramm/chordbars}
+
+\section{Motivation}
+
+This type of acompaniment notation is used when you don't need the melody, but you do need the exact chord and bar count.
+In that case, the full musical sheet is useless, although it can be used to print the chords.
+So some people like to write down the requested song/chord structure in a graphical view (see below).
+To produce these, some people use GUI software such as word processors, but this has a lot of drawbacks.
+The aim of this package is to have a \LaTeX way of producing these, with minimal effort.
+
+
+\section{Usage}
+\subsection{Basic usage}
+This package provides a single environnment, named {\ttfamily chordbar}, that has 2 mandatory arguments.
+The first argument is the number of bars, and the second is the pattern name.
+The latter one can be empty.
+Inside this environment, you can use several commands, the most basic one is
+\verb|\chordf| (for "Chord Full bar") that has as unique argument the chord name.
+This argument will just be printed out "as is", usually something like Cm7, Db9, FMaj7, etc.
+
+For example, the classical 12-bar blues progression will be written as:
+
+\lstinputlisting{listing_blues.lst}
+
+
+This will be rendered as:
+
+\input{listing_blues.lst}
+
+Each square stands for a 4-beat bar, and this is read left to right.
+The special symbol you can see in bars 4, 6 and 8 means "play the same content on this bar as the previous bar".
+
+As usual with \LaTeX{} source files, spaces and line-feeds are ignored.
+
+The default behavior is to have 4-bars long lines, but you can change this anytime by giving a different value to {\btt \tbs NumberOfBarsPerLine}. For example, issuing the command
+
+\begin{lstlisting}
+\def\NumberOfBarsPerLine{3}
+\end{lstlisting}
+
+just before the above source code will print out the same 12-bars blues as above, but in a rather awkward view with 6 bars per line\footnote{Don't do this, of course!}.
+
+\def\NumberOfBarsPerLine{6}
+\input{listing_blues.lst}
+
+\subsection{Handling song structure and bar count}
+
+This package can also be used to print the song structure by showing the number of repetitions of each part and by counting the bars.
+The number of repetitions of the part can be given as an optional argument to the environment.
+To enable this, you need to activate this option, with this inserted after the \verb!\begin{document}! :
+
+\begin{lstlisting}
+\countbarsYes
+\end{lstlisting}
+
+Then, this:
+\lstinputlisting{listingA.lst}
+
+will give the following output, correctly printing out '13' as the initial bar number of the second part (part 1 is 4 bars long and is repeated 3 times).
+
+\def\NumberOfBarsPerLine{4}
+\resetchordbars
+\countbarsYes
+%\mbox{
+\input{listingA.lst}
+%}
+
+\subsection{Two chords per bar.}
+The command \verb|\chordh| enables printing two chords per bar, as this happens quite often.
+Its two arguments are the two chords of the bar.
+For example, the well-know tune "House of the Rising Sun"\footnote{The Animals} chord structure can be printed as this:
+
+\lstinputlisting{listing_HOTRS.lst}
+
+This will be rendered as:
+\resetchordbars
+\countbarsNo
+\input{listing_HOTRS.lst}
+
+\subsection{Sharps and flats.} If you know \LaTeX, you may know that the {\btt \#} character is a "reserved character" and as such you should'nt be able to use it inside your source file.
+However a special trick has been used here so you can directly type {\btt \tbs chordf\{C\#\}}.
+
+Warning: this {\bf may} lead to some problems in "some" situations, that are not yet clearly identified\footnote{See \url{https://tex.stackexchange.com/a/467566/11083} for details.}.
+If you encounter an issue, please report it on the home page of this package and post an MCVE\footnote{Minimal, Complete, and Verifiable Example}.
+
+The alternate solution is either to escape the \# or to use the {\btt \tbs sharp} and {\btt \tbs flat} symbols, that have been "textified" so you don't need to enter math mode.
+This has the advantage of being also a bit "prettier", although maybe less readable (?).
+You can see below the compared renderings of the two alternatives:
+
+\vspace{1em}
+
+\noindent
+\begin{minipage}{0.54\textwidth}
+\lstinputlisting{listing_sharp_flat.lst}
+\end{minipage}
+%
+\begin{minipage}{0.42\textwidth}
+\input{listing_sharp_flat.lst}
+\end{minipage}
+
+\subsection{Long parts on same chord}
+In some songs, you often have several bars on the same chord, say as an introduction or a bridge between two parts.
+Instead of filling a whole chordbars environment, a command is provided that will simply render the desired number of bars with the initial chord noted in first bar.
+
+For example, if you need a 8 bar intro on Gm7 chord, you can do this:
+\begin{lstlisting}
+\chordline{C#m7}{8}{Intro}
+\end{lstlisting}
+
+that will be rendered as this:
+
+\chordline{C#m7}{8}{Intro}
+
+Of course, the part and bar count will take this into account.
+Please note that this will always be a single line, so it is limited to standard situations (4 or 8 bars), it should not be used for longer parts.
+
+\subsection{Half bars}
+
+In some tunes, there can be a "special" bar inserted at one point that only has 2 beats instead of the regular 4-beat bars .
+This is handled with the special command {\btt \tbs addHalfBar} thats needs to be inserted in last position in a {\btt chordbar} environment.
+
+See for example this chord progression and its rendering:
+
+\lstinputlisting{listing_halfbar.lst}
+
+\resetchordbars
+\countbarsYes
+\input{listing_halfbar.lst}
+
+"Part 1" has an extra 2-beats bar added at the end, and the bar count is adjusted to take this into account.
+So "Part 2" starts at bar 6.
+
+\subsection{Song title}
+
+The package provides a {\btt \tbs songtitle} command that will format nicely the data given in the preamble with the classical
+{\btt \tbs title} and {\btt \tbs author} commands.
+
+
+\section{Configuration}
+\label{sec:config}
+
+Several commands allow to customize the way the grids are printed out.
+
+\begin{itemize}
+
+\item The size of the grids can be adjusted with the internal variable
+{\btt \tbs barsize}.
+The default value is 1.6, but you can adjust it anytime inside your document, for example with:\\
+{\btt \tbs def\tbs barsize\{1.8\}}
+
+The font used for the chords can be adjusted by redefining the variable {\btt \tbs chordFontSize} with classical \LaTeX{} font specifications.
+The default value is {\btt \tbs normalsize \tbs bfseries}.
+If you need better readability when extending grid size, you can add for example this, in the preamble of the document:
+
+{\btt \tbs def\tbs chordFontSize\{\tbs large\tbs bfserie\}}
+
+
+\item The command {\btt \tbs countbarsYes} enables counting the bars of the song:
+each grid will have printed on the left side the number of the first bar of the grid.
+It also enables printing the number of repetitions of this part on the right side of the grid.
+
+This command is useful in the sense that this package can be used in two ways:
+it can provide the whole structure of a song.
+In that case, it is useful to have for each part the number of repetitions and the bar count, so that when the band leader says "lets start again at bar 75", everybody can find it easily.
+
+On the other side, this package can be used also to provide a quick way to show the harmony of the different parts, without any structure or bar count.
+This, printing the bar number becomes useless.
+
+To stop this behaviour (anytime), the command is {\btt \tbs countbarsNo}.
+
+\item Additionaly, if the bar counting is enabled, then the package can compute the total number of bars and the duration of the song.
+This is done by issuing the command {\btt \tbs printNbBars} at the end of the file.
+The duration of the song depends on both the {\em tempo} of the song, expressed in BPM, and the number of beats per bar.
+The latter can be given with the command {\btt \tbs bpm}, for example:
+{\btt \tbs bpm\{120\}}.
+
+The number of beats per bar is limited at present at two values, 3 or 4, with the two commands
+{\btt \tbs bpbfour} or {\btt \tbs bpbthree}.
+The default value is 4 beats per bar.
+
+\item As you have seen above, the command {\btt \tbs repeatBar} will be rendered as "./."
+%$\textdiscount${}
+and means "repeat last bar".
+In some situations, it can be useful to show a repetition spanning two bars.
+For this you can use {\btt \tbs repeatBarPair}.
+For example, see the source below showing a classical II-V-I pattern played twice and its rendering:
+
+\noindent
+\begin{minipage}{0.45\textwidth}
+\lstinputlisting{listing_RBP.lst}
+\end{minipage}
+%
+\begin{minipage}{0.42\textwidth}
+\countbarsNo
+\input{listing_RBP.lst}
+\end{minipage}
+
+\item {\ttfamily \textbackslash resetchordbars}: this will reset the bar and part counters, useful if you want to print two songs in the same document.
+\end{itemize}
+
+
+\section{Reference}
+
+This section is useful for those who want to contribute or expand this package.
+
+Internal counters:
+
+\begin{itemize}
+\item {\btt NumMesure}
+\item {\btt NumPart}
+\item {\btt CurrentBarInLine}
+\item {\btt CurrentBar}
+\item {\btt CurrentLine}
+\end{itemize}
+
+\section{Troubleshooting}
+
+The relative sizes of the grid and the chord printing are not automatically adjusted.
+Thus, in some case, the chord name will be too large for the grid.
+In that case, you just need to enlarge the grid size and/or adjust the font size (see section \ref {sec:config}).
+
+\section{Release history}
+
+\begin{itemize}
+\item 2018-12-28: First release (v1.0) and upload to CTAN
+
+\item 2018-12-29: Release 1.1, added commands {\btt \tbs chordline} and {\btt \tbs addHalfBar}, added font commands, fixed manual, bugfixes
+\end{itemize}
+
+
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/chordbars/listing_HOTRS.lst b/graphics/pgf/contrib/chordbars/listing_HOTRS.lst
new file mode 100644
index 0000000000..d16edc4c19
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/listing_HOTRS.lst
@@ -0,0 +1,6 @@
+\begin{chordbar}{4}{House of the Rising sun}
+\chordh{Am}{C}
+\chordh{D}{F}
+\chordh{Am}{E}
+\repeatBar
+\end{chordbar}
diff --git a/graphics/pgf/contrib/chordbars/listing_RBP.lst b/graphics/pgf/contrib/chordbars/listing_RBP.lst
new file mode 100644
index 0000000000..8db632b046
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/listing_RBP.lst
@@ -0,0 +1,5 @@
+\begin{chordbar}{4}{}
+\chordh{G}{C7}
+\chordf{FMaj7}
+\repeatBarPair
+\end{chordbar}
diff --git a/graphics/pgf/contrib/chordbars/listing_blues.lst b/graphics/pgf/contrib/chordbars/listing_blues.lst
new file mode 100644
index 0000000000..bfb1ba80c5
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/listing_blues.lst
@@ -0,0 +1,8 @@
+\begin{chordbar}{12}{Classical 12 bar E blues}
+\chordf{E} \chordf{A}
+\chordf{E} \repeatBar
+\chordf{A} \repeatBar
+\chordf{E} \repeatBar
+\chordf{B} \chordf{A}
+\chordf{E} \chordf{B}
+\end{chordbar}
diff --git a/graphics/pgf/contrib/chordbars/listing_halfbar.lst b/graphics/pgf/contrib/chordbars/listing_halfbar.lst
new file mode 100644
index 0000000000..a84ef26680
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/listing_halfbar.lst
@@ -0,0 +1,10 @@
+\begin{chordbar}{4}{}
+\chordh{G}{C7} \chordf{FMaj7}
+\chordf{C} \chordf{D}
+\addHalfBar{Dm}
+\end{chordbar}
+
+\begin{chordbar}{4}{}
+\chordh{G}{C7} \chordf{FMaj7}
+\chordf{C} \chordf{D}
+\end{chordbar}
diff --git a/graphics/pgf/contrib/chordbars/listing_sharp_flat.lst b/graphics/pgf/contrib/chordbars/listing_sharp_flat.lst
new file mode 100644
index 0000000000..c8777e3a29
--- /dev/null
+++ b/graphics/pgf/contrib/chordbars/listing_sharp_flat.lst
@@ -0,0 +1,6 @@
+\begin{chordbar}{4}{Sharps and flats}
+\chordf{E#}
+\chordf{E\sharp}
+\chordf{Eb}
+\chordf{E\flat}
+\end{chordbar}
diff --git a/graphics/pgf/contrib/chordbox/README.md b/graphics/pgf/contrib/chordbox/README.md
new file mode 100644
index 0000000000..09a9107658
--- /dev/null
+++ b/graphics/pgf/contrib/chordbox/README.md
@@ -0,0 +1,44 @@
+# Chordbox
+
+A LaTeX package for drawing string instrument chord diagrams
+
+## Requirements
+
+Chordbox depends on the following LaTeX packages:
+* tikz;
+* xifthen;
+* xstrings.
+
+## Installation
+
+Please follow the procedure of your TeX distribution.
+
+## Usage
+
+After including `\usepackage{chordbox}` in your preamble, you can draw chord
+boxes using the commands `\chordbox` and `\bchordbox` (for barre chords).
+Examples:
+```
+\chordbox{Am}{x,0,2,2,1,0}
+\bchordbox{Bm}{x,2,4,4,3,2}{2}
+```
+
+For more examples including the graphics, please refer to the documentation.
+
+## Author
+
+* [Steven Franzen](https://github.com/sfranzen)
+
+## License
+
+Copyright 2018 Steven Franzen
+
+This work may be distributed and/or modified under the conditions of the LaTeX
+Project Public License, either version 1.3 of this license or (at your option)
+any later version. The latest version of this license is in
+http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+distributions of LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is Steven Franzen.
diff --git a/graphics/pgf/contrib/chordbox/chordbox.pdf b/graphics/pgf/contrib/chordbox/chordbox.pdf
new file mode 100644
index 0000000000..f2920ebf2a
--- /dev/null
+++ b/graphics/pgf/contrib/chordbox/chordbox.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/chordbox/chordbox.sty b/graphics/pgf/contrib/chordbox/chordbox.sty
new file mode 100644
index 0000000000..b008c01a91
--- /dev/null
+++ b/graphics/pgf/contrib/chordbox/chordbox.sty
@@ -0,0 +1,210 @@
+%
+% Copyright 2018 Steven Franzen
+%
+% This file is part of chordbox.
+%
+% Chordbox may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License, either version 1.3 of this license or (at your
+% option) any later version. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+% distributions of LaTeX version 2005/12/01 or later.
+%
+% Chordbox has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of chordbox is Steven Franzen.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{chordbox}[2019/04/14 v1.0 Minor improvement to documentation]
+
+\RequirePackage{tikz, xifthen, xstring}
+\usetikzlibrary{shapes.misc, scopes, backgrounds}
+
+\newif\ifcb@startbarre
+
+% Set up keys for the drawing code
+\pgfqkeys{/chordbox}{
+ % This fills a bar of width 0.4 that scales properly, without requiring
+ % extra libraries
+ draw barre/.code 2 args={%
+ \fill (#1) -- +(0, -0.2) -| (#2) -- +(0, 0.2) -| cycle;
+ },
+ draw barre/.value required,
+ % Number of frets displayed
+ numfrets/.initial=4,
+ % Base fret number parser
+ base fret/.code={fr\raisebox{.5ex}{\scriptsize#1}},
+ % Chord name parser
+ name/.code=\ensuremath{\mathrm{#1}},
+ name/.value required,
+ % Configuration of text below the chord box and on the nodes
+ text below/.is choice,
+ text below/none/.code={\def\cb@textbelow{0}},
+ text below/fingering/.code={\def\cb@textbelow{1}},
+ text below/pitch/.code={\def\cb@textbelow{2}},
+ text below/fingering,
+ text on node/.is choice,
+ text on node/none/.code={\def\cb@textonnode{0}},
+ text on node/fingering/.code={\def\cb@textonnode{1}},
+ text on node/pitch/.code={\def\cb@textonnode{2}},
+ text on node/none,
+ % Symbols for pitch notation
+ flat symbol/.initial=\flat,
+ sharp symbol/.initial=\sharp,
+ % Pitch name settings; arrays only seem to work with TeX macros
+ pitch names/.store in=\cb@pitchnames,
+ pitch names={"A","A\#","B","C","C\#","D","D\#","E","F","F\#","G","G\#"},
+ tuning/.store in=\cb@tuning,
+ tuning={"E","A","D","G","B","E"},
+ % The base fret of a given chord box
+ @basefret/.initial=1,
+ % Calculate the given fret position #1, corrected for the base fret
+ @fretnum/.code=\pgfmathtruncatemacro{\fretnum}{%
+ 1 + #1 - \pgfkeysvalueof{/chordbox/@basefret}
+ },
+ % Whether the barre has yet to be started
+ @start barre/.is if=cb@startbarre,
+ % Find and typeset pitch of string number #1 at fret number #2
+ @typeset pitch/.code 2 args={
+ \pgfmathparse{{\cb@tuning}[#1-1]}
+ \ifnum#2=0
+ \pgfkeys{@replace symbols=\pgfmathresult}
+ \else
+ \foreach \p in {0,...,11} {%
+ \pgfmathsetmacro{\stringpitch}{{\cb@pitchnames}[\p]}%
+ \if\stringpitch\pgfmathresult
+ \pgfmathparse{{\cb@pitchnames}[mod(\p + #2, 12)]}
+ \pgfkeys{@replace symbols=\pgfmathresult}%
+ \breakforeach
+ \fi
+ }
+ \fi
+ },
+ % Replace pitch text with math symbols
+ @replace symbols/.code={%
+ \def\#{\ensuremath{\pgfkeysvalueof{/chordbox/sharp symbol}}}%
+ \StrSubstitute{#1}{b}{%
+ \ensuremath{\pgfkeysvalueof{/chordbox/flat symbol}}%
+ }
+ }
+}
+
+% Define tikz drawing styles. The muted string symbol size is slightly smaller
+% to make it visually similar to the open symbol. Both are also placed above
+% their given coordinate for better separation from the box.
+\tikzset{
+ chordbox/.style={baseline, scale=0.25},
+ chordbox/.value forbidden,
+ fret node text/.style={font=\Large\bfseries,text=white},
+ fret node text/.value forbidden,
+ pitch text below/.style={font=\tiny},
+ string/.is choice,
+ string/base/.style={%
+ circle, draw, inner sep=0, minimum size=20, transform shape%
+ },
+ string/fretted/.style={string/base, fill},
+ string/open/.style={string/base, above},
+ string/muted/.style={string/open, cross out, minimum size=19}
+}
+
+% Environment with parts common to both commands
+\newenvironment{chordboxenv}[3]{%
+ \pgfqkeys{/chordbox}{@basefret={#1}, numfrets/.get=\numfrets}
+ \pgfqkeys{}{.search also=/chordbox}
+ % The code that draws the chord box. Argument #1 specifies the base fret
+ % (>1) of the chord box, #2 is the chord name and #3 the comma-separated
+ % list of finger positions, e.g. {x,0,2:2,2:3,1:1,0}.
+ \begin{tikzpicture}[chordbox]%
+ % Put coordinates at finger positions and above the frets (index 0),
+ % store string count, then draw the string grid and decorations
+ \foreach[count=\n] \fretposition in {#3} {
+ \foreach \fret in {0,...,\numfrets}
+ \coordinate (\n\fret) at (\n - 1, 0.5 - \fret);
+ % Extra coordinate for text below each string
+ \coordinate (\n) at (\n - 1, -\numfrets);
+ }
+ \draw grid (\n - 1, -\numfrets);
+ \ifthenelse{\isempty{#1}\or#1<2}{% Draw the "nut"
+ \fill rectangle (\n - 1, .2);
+ }{% Draw the position indicator
+ \node[left] at (11) {\pgfkeys{base fret={#1}}};
+ }
+ % Center chord name over strings
+ \pgfmathparse{0.5 * (\n - 1)}
+ \node[above] at (\pgfmathresult, 1.25) {\pgfkeys{name={#2}}};
+ % Draw the string symbols according to argument #3
+ \foreach[count=\s] \fret in {#3} {
+ \ifnum\pdfmatch{^[0-9]+}{\fret}=1
+ \StrBehind{\pdflastmatch 0}{>}[\num]
+ \StrBehind{\fret}{:}[\frettext]
+ \def\pitch{\pgfkeys{@typeset pitch={\s}{\num}}}
+ \let\nodetext\empty
+ \ifcase\cb@textonnode
+ \or
+ \let\nodetext\frettext % 1
+ \or
+ \let\nodetext\pitch % 2
+ \fi
+ \ifnum\num=0
+ \node[string=open, fret node text, black] at (\s0)
+ {\nodetext};
+ \else
+ \pgfkeys{@fretnum=\num}
+ \node[string=fretted, fret node text] at (\s\fretnum)
+ {\nodetext};
+ \fi
+ % Display the "text below"
+ \ifnum\cb@textbelow>0
+ \if1\cb@textbelow
+ \if\frettext\empty
+ \else
+ \node[below] at (\s) {\frettext};
+ \fi
+ \else
+ % Insert vphantom here to align all pitch names
+ \node[below, pitch text below] at (\s)
+ {\vphantom{\pgfkeys{@replace symbols=\#b}}\pitch};
+ \fi
+ \fi
+ \else % Anything other than a number is taken to mean "muted"
+ \node[string=muted] at (\s0) {};
+ \fi
+ }
+}{%
+ \end{tikzpicture}
+}
+
+% Draw a chord box without barres, for example:
+% \chordbox{Am}{x,0,2,2,1,0}
+% \chordbox[5]{A}{5,7,7,6,5,5}
+\providecommand{\chordbox}[3][1]{%
+ \begin{chordboxenv}{#1}{#2}{#3}
+ \end{chordboxenv}
+}
+
+% Draw a chord box for a barre chord. Extra argument for the fret number(s)
+% whose notes should be barred, for example:
+% \bchordbox[3]{C}{x,3,5,5,5,3}{3,5}
+\providecommand{\bchordbox}[4][1]{%
+ \begin{chordboxenv}{#1}{#2}{#3}
+ \foreach \b in {#4} {
+ \pgfkeys{@start barre=true, @fretnum=\b}
+ \foreach[count=\s] \f in {#3} {
+ \if\f\b
+ \ifcb@startbarre
+ \coordinate (start) at (\s\fretnum);
+ \global\cb@startbarrefalse
+ \else
+ \coordinate (end) at (\s\fretnum);
+ \fi
+ \fi
+ }
+ \scoped[on background layer]
+ \pgfkeys{draw barre={start}{end}};
+ }
+ \end{chordboxenv}
+}
+
+\endinput
+[2018/12/07 v0.3 Support for pitch info]
+[2018/12/04 v0.2 Support for fingering info, further customisation]
+[2018/12/01 v0.1 Initial release]
diff --git a/graphics/pgf/contrib/chordbox/chordbox.tex b/graphics/pgf/contrib/chordbox/chordbox.tex
new file mode 100644
index 0000000000..9f7322f977
--- /dev/null
+++ b/graphics/pgf/contrib/chordbox/chordbox.tex
@@ -0,0 +1,472 @@
+%% LyX 2.3.2 created this file. For more info, see http://www.lyx.org/.
+%% Do not edit unless you really know what you are doing.
+\documentclass[english]{scrartcl}
+\usepackage[osf]{libertineRoman}
+\usepackage[osf]{biolinum}
+\renewcommand{\ttdefault}{cmtt}
+\usepackage[libertine]{newtxmath}
+\usepackage[T1]{fontenc}
+\usepackage[latin9]{inputenc}
+\setcounter{tocdepth}{2}
+\usepackage{color}
+\usepackage{babel}
+\usepackage{booktabs}
+\usepackage{textcomp}
+\usepackage{url}
+\usepackage{microtype}
+\usepackage[unicode=true,
+ bookmarks=true,bookmarksnumbered=false,bookmarksopen=false,
+ breaklinks=false,pdfborder={0 0 0},pdfborderstyle={},backref=false,colorlinks=false]
+ {hyperref}
+
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
+\newcommand{\noun}[1]{\textsc{#1}}
+\newcommand*\LyXZeroWidthSpace{\hspace{0pt}}
+%% Because html converters don't know tabularnewline
+\providecommand{\tabularnewline}{\\}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
+\usepackage{chordbox}
+\usepackage{filecontents}
+
+\newcommand\TikZ{Ti\emph{k}Z}
+\newcommand\version{v1.0}
+\hypersetup{
+ pdftitle={Chordbox \version\ Documentation},
+ pdfauthor={Steven Franzen}
+}
+\setkomafont{descriptionlabel}{\ttfamily\color{red}}
+\makeatletter
+\newcommand\namedlabel[2]{\begingroup
+ \def\@currentlabel{#2}%
+ \label{#1}\endgroup
+}
+\makeatother
+\begin{filecontents}{chordbox.bib}
+@software{leadsheets,
+ author = {Clemens Niederberger},
+ title = {leadsheets},
+ url = {https://ctan.org/pkg/leadsheets/},
+ version = {0.5b},
+ date = {2017-09-26},
+}
+@software{guitarchordschemes,
+ author = {Clemens Niederberger},
+ title = {guitarchordschemes},
+ url = {https://ctan.org/pkg/guitarchordschemes/},
+ version = {0.7},
+ date = {2016-08-16},
+}
+@software{gchords,
+ author = {Kasper Peeters},
+ title = {gchords},
+ url = {https://ctan.org/pkg/gchords/},
+ version = {1.20},
+ date = {2008-02-03},
+}
+@software{xifthen,
+ author = {Josselin Noirel},
+ title = {xifthen},
+ url = {https://ctan.org/pkg/xifthen/},
+ version = {1.4.0},
+ date = {2015-11-05},
+}
+@software{xstring,
+ author = {Christian Tellechea},
+ title = {xstring},
+ url = {https://ctan.org/pkg/xstring/},
+ version = {1.7c},
+ date = {2013-10-13},
+}
+@manual{pgfmanual,
+ author = {Till Tantau},
+ title = {The TikZ and PGF Packages},
+ subtitle = {Manual for version 3.0.1a},
+ url = {http://sourceforge.net/projects/pgf/},
+ date = {2015-08-29},
+}
+\end{filecontents}
+
+\makeatother
+
+\usepackage[bibstyle=standard,citestyle=authortitle-comp]{biblatex}
+\addbibresource{chordbox.bib}
+\begin{document}
+\titlehead{\centering\chordbox[3]{G\sharp^{maj7}}{4,x,6,5,4,3}}
+\title{Chordbox}
+\subtitle{A \LaTeX{} package for drawing string instrument chord diagrams}
+\author{Steven Franzen}
+\date{\version\quad\today}
+\publishers{\url{https://github.com/sfranzen/chordbox}}
+
+\maketitle
+\tableofcontents{}
+
+\clearpage{}
+
+\section{Package introduction}
+
+This package is the result of a search similar to the one undertaken
+by Clemens Niederberger for his \texttt{leadsheets} \autocite{leadsheets}
+package: over the years I have collected many textual guitar tabs
+and chord sheets that I finally wanted to put together and typeset
+properly using \LaTeX , including guitar chord diagrams. The first
+part of my requirements is now more than fulfilled by \texttt{leadsheets},
+which provides all the tools for putting together chords and lyrics.
+For the second part I found that there were only two relevant existing
+packages: \texttt{guitarchordschemes}\autocite{guitarchordschemes}
+and \texttt{gchords}\autocite{gchords}. Neither of these achieved
+exactly what I wanted, so this package is my own attempt at providing
+that tool.
+
+Note that I am far from a \TeX{} guru; I know a bit of \LaTeX{} and
+also have some familiarity with \TikZ{}, so I have gratefully used
+the higher level interfaces provided by said package as well as \texttt{xifthen}\autocite{xifthen}
+and \texttt{xstring}\autocite{xstring} for inspecting arguments.
+The \noun{pgf}/\TikZ{} packages provide a powerful and versatile
+framework for creating vector graphics using \LaTeX{} commands paired
+with a special drawing syntax. One advantage of this is that you can
+fully integrate graphics into your document that will always look
+great: they will use the document fonts and can be rendered at any
+size you desire, avoiding some issues associated with the use of external
+images. This does not come without a cost, however; although the syntax
+introduced by \TikZ{} is concise and easy to read, composing images
+will require some thought, multiple commands and adjustments and can
+be labour-intensive. Also, there is simply so much functionality that
+the official manual\autocite{pgfmanual} currently spans almost 1200
+pages of dense, though amply illustrated information.
+
+The main aim of the present package is therefore to provide a way
+of typesetting chord diagrams using \TikZ{}, while sparing the user
+from the need to plough through its documentation to learn the required
+drawing syntax. It does this by defining two commands that require
+only a few arguments and encapsulate the necessary drawing instructions.
+Their basic usage is introduced in Section \ref{sec:Usage}, along
+with examples illustrating the various possibilities. Further information
+needed by the drawing algorithm is stored using \noun{pgf}/\TikZ{}'
+native key-value management system, which also makes it quite easy
+to expose settings for modification by the user, allowing you to influence
+the appearance of the resulting chord boxes. These are documented
+in Section \ref{sec:Settings}, with some examples of the commands
+you can use to change them.
+
+\subsection{Loading the package}
+
+\texttt{chordbox} currently does not support \LaTeX{} options, so it
+is loaded simply by putting
+
+\texttt{\textbackslash usepackage\{chordbox\}}\\
+in your document's preamble.
+
+\subsection{License}
+
+This file is part of chordbox. Chordbox may be distributed and/or
+modified under the conditions of the \LaTeX{} Project Public License,
+either version 1.3 of this license or (at your option) any later version.
+The latest version of this license is in \url{http://www.latex-project.org/lppl.txt}
+and version 1.3 or later is part of all distributions of \LaTeX{} version
+2005/12/01 or later.
+
+Chordbox has the \noun{lppl} maintenance status `maintained'. The
+Current Maintainer of chordbox is Steven Franzen.
+
+\section{Usage\label{sec:Usage}}
+
+The package provides two similar commands, \texttt{\textbackslash chordbox}
+and \texttt{\textbackslash bchordbox}. The latter extends the former
+to draw barred chords.
+
+\subsection{The \texttt{\textbackslash chordbox} command}
+
+Syntax: \texttt{\textbackslash chordbox{[}}\textlangle \emph{base
+fret}\textrangle \texttt{{]}\{}\textlangle \emph{chord name}\textrangle\texttt{\}\{}\textlangle \emph{fret
+positions}\textrangle\texttt{\}}
+
+The simplest form of the command requires you to specify only the
+\textlangle \emph{chord name}\textrangle{} and \textlangle \emph{fret
+positions}\textrangle . The former can contain any text and math symbols
+(see below), the latter should be a comma-separated list of elements,
+one for each string, which may take the following values:
+\begin{itemize}
+\item \textlangle \emph{fret number}\textrangle {[}:\textlangle \emph{fingering
+text}\textrangle {]}\\
+A (positive) \textlangle \emph{fret number}\textrangle{} marks the
+current string as fretted at that position. It may optionally be followed
+by a colon and a \textlangle \emph{fingering text}\textrangle{} that
+can be displayed on the fret symbol or below the chord box.
+\item \emph{0} (zero)\\
+Marks the current string as open (unfretted).
+\item \emph{Anything else}\\
+An empty element or one starting with anything other than a number
+marks the current string as muted (not played).
+\end{itemize}
+It draws a grid resembling vertical strings crossing horizontal frets,
+with a black bar at the top figuring as the instrument's nut. The
+number of strings drawn is determined by the number of \textlangle \emph{fret
+positions}\textrangle{} passed to the command, so generating chord
+diagrams for different instruments is no problem:
+\begin{center}
+\begin{tabular}{ccc}
+Ukulele & 5-string banjo & 6-string guitar\tabularnewline
+\texttt{\small{}\textbackslash chordbox\{Am\}\{2,0,0,0\}} & \texttt{\small{}\textbackslash chordbox\{Am\}\{x,2,2,1,2\}} & \texttt{\small{}\textbackslash chordbox\{Am\}\{x,0,2,2,1,0\}}\tabularnewline
+\chordbox{Am}{2,0,0,0} & \chordbox{Am}{x,2,2,1,2} & \chordbox{Am}{x,0,2,2,1,0}\tabularnewline
+\end{tabular}
+\par\end{center}
+
+The number of frets drawn is initially 4, but this can be changed
+through the configuration key \texttt{\ref{key:numfrets}}.
+
+As mentioned, you can optionally provide fingering information for
+a chord, which is particularly useful for writing chord charts and
+other training materials. Because text on the fret symbol has to be
+scaled to fit inside it and the default scale is small, \texttt{chordbox}
+is initially configured to put this text below the strings, where
+it can be rendered at a larger size. However, the other option may
+be more appealing for larger diagrams, so both options can be used,
+see \texttt{\ref{key:textbelow}} and \texttt{\ref{key:textonnode}}.
+They are illustrated below, where the letter T is used for the thumb
+and the digits for the other fingers, starting at 1 for the index
+finger. The larger chord box on the right has been given a scale of
+2.5 times the default.
+\begin{center}
+\begin{tabular}[t]{cc}
+\multicolumn{2}{c}{\texttt{\small{}\textbackslash chordbox\{F\}\{1:T,3:3,3:4,2:2,1:1,x\}}}\tabularnewline
+\chordbox{F}{1:T,3:3,3:4,2:2,1:1,x} & \pgfkeys{/chordbox/.cd,text on node=fingering,text below=none}
+\tikzset{chordbox/.append style={scale=2}}
+\chordbox{F}{1:T,3:3,3:4,2:2,1:1,x}\tabularnewline
+\end{tabular}
+\par\end{center}
+
+By default, the \textlangle \emph{chord name}\textrangle{} is processed
+by a command that typesets it in math mode and roman type (see \texttt{\nameref{key:name}}).
+This allows the use of math symbols like \texttt{\textbackslash flat}
+and \texttt{\textbackslash sharp} as well as the \textasciicircum{}
+(superscript) operator to typeset decorated chord names:
+\begin{center}
+\begin{tabular}{cc}
+\texttt{\small{}\textbackslash chordbox\{B\textbackslash flat m\}\{x,x,x,3,2,1\}} & \texttt{\small{}\textbackslash chordbox\{F\textbackslash sharp\textasciicircum\{maj7\}\}\{2,x,3,3,2,x\}}\tabularnewline
+\chordbox{B\flat m}{x,x,x,3,2,1} & \chordbox{F\sharp^{maj7}}{2,x,3,3,2,x}\tabularnewline
+\end{tabular}
+\par\end{center}
+
+For best results, make sure to select the same typeface for both text
+and math typesetting. Of course, if you are also using the \texttt{leadsheets}
+package, you could opt to use its \texttt{\textbackslash writechord}
+command for typesetting chord names, see also subsection \ref{subsec:Other-keys}.
+
+The \textlangle \emph{base fret}\textrangle{} is the number that,
+although formally an optional argument, must be provided for chords
+extending past the number of frets in the chord box. It is used to
+position the box and fretted notes relative to this fret, for example
+\texttt{\textbackslash chordbox{[}6{]}\{D\textbackslash sharp m\textasciicircum\{7\textbackslash flat
+5\}\}\{x,6,7,6,7,x\}}:
+
+\chordbox[6]{D\sharp m^{7\flat 5}}{x,6,7,6,7,x}
+
+As can be seen, the nut is not drawn in these cases.
+
+Finally, \texttt{chordbox} can also display the pitch of each note
+in a chord, although the default is not to. The pitches do not need
+to be specified manually, but are determined from the fret positions
+given to the command and the configured tuning (\texttt{\ref{key:tuning}}).
+Just like fingering information, you may choose to display it inside
+the symbols or underneath the chord box, or combine both types of
+information:
+\begin{center}
+\begin{tabular}{rccc}
+Command & \multicolumn{3}{c}{\texttt{\small{}\textbackslash chordbox\{D\}\{x,x,0,2:1,3:3,2:2\}}}\tabularnewline
+\midrule
+Scale & default & 2.5 $\times$ larger & 2.5 $\times$ larger\tabularnewline
+\texttt{text on node} & \texttt{none} & \texttt{pitch} & \texttt{fingering}\tabularnewline
+\texttt{text below} & \texttt{pitch} & \texttt{none} & \texttt{pitch}\tabularnewline
+\midrule
+Result & \pgfkeys{/chordbox/text below=pitch}
+\chordbox{D}{x,x,0,2,3,2} & \pgfkeys{/chordbox/text on node=pitch}
+\tikzset{chordbox/.append style={scale=2.5}}
+\chordbox{D}{x,x,0,2,3,2} & \pgfkeys{/chordbox/.cd,text on node=fingering,text below=pitch}
+\tikzset{chordbox/.append style={scale=2.5}}
+\chordbox{D}{x,x,0,2:1,3:3,2:2}\tabularnewline
+\bottomrule
+\end{tabular}
+\par\end{center}
+
+Chords may of course feature accidentals on some or all of their notes,
+depending on their associated musical key. Typesetting such pitches
+clearly in limited space is more challenging than just single characters,
+such as finger positions. With \TikZ{}, text is most conveniently
+positioned using so-called \emph{nodes}, which can also be scaled
+to display their contents at any size. This leads to the following
+two possible choices:
+\begin{enumerate}
+\item Scale the nodes to the chord box, so they are always as large as possible
+without overlapping;
+\item Do not scale the nodes, but choose a fixed font size for the text,
+small enough to avoid overlap at the chosen scale.
+\end{enumerate}
+The first option has the advantage that overlap is precluded entirely,
+but the node text is scaled as well and will therefore need to be
+changed to a size near that of the unscaled node. Additionally, the
+scaling operation is a purely graphical transformation, which yields
+worse results than selecting a similar font size in the first place.
+This is because a well-designed font has different (namely slightly
+thicker) glyphs for smaller sizes to maintain readability. The second
+option instead has the disadvantage that a font size must be chosen
+manually and calibrated to the size of the chord boxes one wishes
+to render. However, because documents will not usually contain chord
+boxes of many different sizes, I consider this to be a minor point
+and have, at least for now, chosen the second option. The font size
+initially configured specifically for pitch names below the strings
+is \texttt{\textbackslash tiny}, which should produce readable results
+even for the default chord box size.
+
+\subsection{The \texttt{\textbackslash bchordbox} command}
+
+Syntax: \texttt{\textbackslash bchordbox{[}}\textlangle \emph{base
+fret}\textrangle \texttt{{]}\{}\textlangle \emph{chord name}\textrangle\texttt{\}\{}\textlangle \emph{fret
+positions}\textrangle\texttt{\}\{}\textlangle \emph{barre frets}\textrangle\texttt{\}}
+
+As mentioned, this command is for drawing barre chords, for which
+it requires an additional comma-separated list of fret numbers. A
+thick line is drawn over the string symbols at these frets. The other
+arguments are identical to those of \texttt{\textbackslash chordbox},
+see for example \texttt{\textbackslash bchordbox\{Bm\textasciicircum 7\}\{x,2,4,2,3,2\}\{2\}}
+and \texttt{\textbackslash bchordbox{[}3{]}\{C\}\{x,3,5,5,5,3\}\{3,5\}}:
+
+\bchordbox{Bm^7}{x,2,4,2,3,2}{2} \bchordbox[3]{C}{x,3,5,5,5,3}{3,5}
+
+\section{Settings\label{sec:Settings}}
+
+Because \texttt{chordbox} relies on \noun{pgf}/\TikZ{} for drawing,
+it makes sense to use the powerful \noun{pgf} key management system
+that comes with it. Therefore this package stores its code and style
+settings as keys, some of which may be modified to customise the output.
+This can be done in the preamble or in any part of the document by
+means of \texttt{\textbackslash tikzset} and the more generic \texttt{\textbackslash pgfkeys}
+command. Some examples of usage will be given below, but for more
+reading about \noun{pgf} keys and their handling please refer to Section
+82 of the \noun{pgf} manual\autocite{pgfmanual} where everything
+is documented in full detail. In any case, modifying a key stores
+its value for the \LaTeX{} group where the command is issued and its
+child groups, which can override it again, but it does not propagate
+up to parent groups.
+
+\subsection{\TikZ{} keys}
+
+The items described in this section are called \emph{styles} in \TikZ{}
+terminology and contain (lists of) keys and values that can be applied
+to various drawing commands. Most importantly, the \texttt{chordbox}
+style applies to the whole \texttt{\{tikzpicture\}} environment of
+every chord box produced. The default setting is to scale all coordinates
+by a quarter, because the drawing is done in \noun{pgf}'s ``natural''
+units that, though convenient to use, result in an impractically large
+picture. Note that this scaling only influences the \TikZ{} coordinates;
+in particular, fonts are not affected by default\footnote{This is because text is put in nodes, which are scaled independently
+of the picture and require the \texttt{scale} and/or \texttt{transform
+shape} options to be supplied.}.
+
+Because these keys are all stored in the \texttt{/tikz} path, it is
+most convenient to change them using the \texttt{\textbackslash tikzset}
+command, for example \texttt{\textbackslash tikzset\{chordbox/.style=\{scale=0.4,
+thick\}\}}. Setting options like this through the \texttt{.style}
+\emph{key handler}, as it is called, replaces any previous contents.
+Other handlers, like \texttt{.prefix style} and \texttt{.append style},
+can be used to insert additional keys before or after the existing
+style, respectively. For example, calling \texttt{\textbackslash tikzset\{chordbox/.append
+style=\{scale=2\}\}} results in an effective \texttt{chordbox} style
+of \texttt{\{baseline, scale=0.5\}}, because the \texttt{scale} factor
+was set twice. These are special in that multiple values are multiplied
+together, whereas for most other keys only the last occurrence applies.
+\begin{description}
+\item [{/tikz/chordbox}] \hfill{}(style, initially \texttt{\{baseline,
+scale=0.25\}})\\
+This style is applied to every \texttt{\{tikzpicture\}} environment
+produced by this package. The \texttt{baseline} key sets the base
+line of the picture at a height of 0 pt, which is the top of the grid
+and the bottom of the nut (if drawn). It ensures that multiple chord
+boxes in a row align properly.
+\item [{/tikz/fret~node~text}] \hfill{}(style, initially \texttt{\{font=\textbackslash Large\textbackslash bfseries,text=white\}})\\
+This style is applied to text drawn on fretted or open string nodes,
+with the colour switched to black for the latter. It aims to make
+the text as clear and as big as possible without increasing the node
+size, which will occur if the text is too tall or wide.
+\item [{/tikz/pitch~text~below}] \hfill{}(style, initially \texttt{\{font=\textbackslash tiny\}})\\
+This affects only pitch names typeset below the chord box. The initial
+setting is \texttt{\textbackslash tiny} to keep neighbouring notes
+with accidentals from overlapping each other at the default scale.
+\end{description}
+The rest of the styles define the three symbol shapes used for the
+fretted (\tikz[chordbox,above]\coordinate[string=fretted];), open
+(\tikz[chordbox]\coordinate[string=open];) and muted (\tikz[chordbox]\coordinate[string=muted];)
+string positions.
+\begin{description}
+\item [{/tikz/string/base}] \hfill{}(style, initially \texttt{\{circle,
+draw, inner sep=0, minimum size=20, transform shape\}})\\
+Common options for all three symbols. The \texttt{transform shape}
+option is required to correctly scale the symbols, which are implemented
+as \TikZ{} nodes, with the rest of the picture.
+\item [{/tikz/string/fretted}] \hfill{}(style, initially \texttt{\{string/base,
+fill\}})
+\item [{/tikz/string/open}] \hfill{}(style, initially \texttt{\{string/base,
+above\}})
+\item [{/tikz/string/muted}] \hfill{}(style, initially \texttt{\{string/open,
+cross out, minimum size=19\}})
+\end{description}
+
+\subsection{Other keys\label{subsec:Other-keys}}
+
+The following keys are not passed directly to \TikZ{} commands, but
+used to store various other settings and code. They are all in the
+\texttt{/chordbox} path and should be set using the \texttt{\textbackslash pgfkeys}
+command, for example \texttt{\textbackslash pgfkeys\{/chordbox/name/.code=\textbackslash writechord\{\#1\}\}}.
+Keys that execute code, like this example, produce output with occurrences
+of \texttt{\#1} replaced by the relevant value. If you want to change
+more than one of these settings at once, it is shorter to issue a
+command like the following: \texttt{\textbackslash pgfkeys\{/chordbox/.cd,
+numfrets=5, fingering text=on node\}}.
+\begin{description}
+\item [{/chordbox/numfrets\texttt{\textcolor{black}{\small{}=\textlangle }}\texttt{\textcolor{black}{\emph{\small{}number}}}\texttt{\textcolor{black}{\small{}\textrangle }}\namedlabel{key:numfrets}{/chordbox/numfrets}}] \hfill{}(initially
+\texttt{4}) \\
+The number of frets drawn in each chord box.
+\item [{/chordbox/base~fret}] \hfill{}(initially \texttt{\{fr\textbackslash raisebox\{.5ex\}\{\textbackslash scriptsize\#1\}})\\
+This key stores the code used to typeset the base fret position of
+a chord box, if provided and greater than 1.
+\item [{/chordbox/name\label{key:name}}] \hfill{}(initially \texttt{\textbackslash ensuremath\{\textbackslash mathrm\{\#1\}\}})\\
+The code that is used to typeset the name of the chord.
+\end{description}
+The next two keys govern the placement of extra information in the
+chord box. In both cases, the \texttt{fingering} text is only displayed
+if actually present in the input.
+\begin{description}
+\item [{/chordbox/text~below\texttt{\textcolor{black}{\small{}=none|fingering|pitch}}\namedlabel{key:textbelow}{/chordbox/text below}}] \hfill{}(initially
+\texttt{fingering})\\
+Selects what to display below each string.
+\item [{/chordbox/text~on~node\texttt{\textcolor{black}{\small{}=none|fingering|pitch}}\namedlabel{key:textonnode}{/chordbox/text on node}}] \hfill{}(initially
+\texttt{none})\\
+Selects what to display inside the string symbols.
+\end{description}
+The remaining keys determine how pitch information is calculated and
+displayed. Pitches should be given enclosed in quotation marks and
+accidentals should be specified as \texttt{b} (flat) or \texttt{\textbackslash\#}
+(sharp); these will be replaced by their respective symbols.
+\begin{description}
+\item [{/chordbox/flat~symbol\texttt{\textcolor{black}{\small{}=\textlangle }}\texttt{\textcolor{black}{\emph{\small{}symbol}}}\texttt{\textcolor{black}{\small{}\textrangle{}}}}] \hfill{}(initially
+\texttt{\textbackslash flat})
+\item [{/chordbox/sharp~symbol\texttt{\textcolor{black}{\small{}=\textlangle }}\texttt{\textcolor{black}{\emph{\small{}symbol}}}\texttt{\textcolor{black}{\small{}\textrangle{}}}}] \hfill{}(initially
+\texttt{\textbackslash sharp})
+\item [{/chordbox/pitch~names\texttt{\textcolor{black}{\small{}=\textlangle }}\texttt{\textcolor{black}{\emph{\small{}list~of~pitches}}}\texttt{\textcolor{black}{\small{}\textrangle{}}}}] \hfill{}(initially
+\texttt{\{\textquotedbl A\textquotedbl ,\textquotedbl A\textbackslash\#\textquotedbl ,\textquotedbl B\textquotedbl ,\textquotedbl C\textquotedbl ,\textquotedbl C\textbackslash\#\textquotedbl ,\LyXZeroWidthSpace\textquotedbl D\textquotedbl ,\textquotedbl D\textbackslash\#\textquotedbl ,\textquotedbl E\textquotedbl ,\textquotedbl F\textquotedbl ,\textquotedbl F\textbackslash\#\textquotedbl ,\textquotedbl G\textquotedbl ,\textquotedbl G\textbackslash\#\textquotedbl\}})\\
+The names of the pitches to be used for display. The list need not
+start at A, but it must contain twelve sequential semitones.
+\item [{/chordbox/tuning\texttt{\textcolor{black}{\small{}=\textlangle }}\texttt{\textcolor{black}{\emph{\small{}list~of~pitches}}}\texttt{\textcolor{black}{\small{}\textrangle }}\namedlabel{key:tuning}{/chordbox/tuning}}] \hfill{}(initially
+\texttt{\{"E","A","D","G","B","E"\}})\\
+The tuning of the instrument for which chord boxes are to be drawn.
+It is used to determine the pitches of the chord and must consist
+of elements present in \texttt{pitch names}.
+\end{description}
+
+\appendix
+\printbibliography[heading=bibintoc]
+
+\end{document}
diff --git a/graphics/pgf/contrib/circuitikz/README.md b/graphics/pgf/contrib/circuitikz/README.md
new file mode 100644
index 0000000000..574ed24859
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/README.md
@@ -0,0 +1,73 @@
+circuitikz
+==========
+
+This package provides a set of macros for naturally typesetting electrical and (somewhat less naturally, perhaps) electronical networks.
+
+It was born mainly for writing my own exercise book and exams sheets for the Elettrotecnica courses at Politecnico di Milano, Italy. I wanted a tool that was easy to use, with a lean syntax, native to LaTeX, and supporting directly PDF output format.
+
+So I based everything with the very impressive (if somewhat verbose at times) TikZ package.
+
+--------------
+
+## Requirements
+* Tikz/PGF graphics library, version 3
+* xstrings not older than 2009/03/13
+
+## Installation
+The stable version is available on ctan and is included within the major latex distributions(Texlive, Miktex). If you want to test the latest version, have a look at http://circuitikz.github.io/circuitikz/. There you can find the latest git-version as a single file, just copy it to your project or to your local tex tree.
+
+## Usage
+### Stable version
+Just place
+```latex
+ \usepackage[siunitx, RPvoltages]{circuitikz}
+```
+or other opions, for ConTeXt,
+```latex
+ \usemodule[circuitikz]
+```
+in the preamble and compile away, both with PS and PDF target output.
+
+### Development version
+
+If you want to use the git version, just append a git to the package name:
+```latex
+ \usepackage[siunitx, RPvoltages]{circuitikzgit}
+```
+or, for ConTeXt,
+```latex
+ \usemodule[circuitikzgit]
+```
+
+### Older versions (v0.9.1 onwards)
+
+If you want to use older versions of `circuitikz` in LaTeX, just append the version number to the package name, as in `circuitikz-$version`:
+```latex
+ \usepackage{circuitikz-0.8.3}
+```
+The available versions are 0.8.3, 0.7, 0.6 and 0.4.
+
+In ConTeXt, only the 0.8.3 version is available for the time being; you can use it with
+```latex
+ \usemodule[circuitikz-0.8.3]
+```
+
+Be aware that options can (and do) change between versions, so you have to check them manually.
+
+## More Information
+More Information can be found in the manual and (maybe) at the wiki of the project located at https://github.com/circuitikz/circuitikz/wiki.
+
+## Contact the authors
+* git: https://github.com/circuitikz/circuitikz
+* Massimo Redaelli (m.redaelli@gmail.com)
+* Stefan Lindner (stefan.lindner@fau.de)
+* Stefan Erhardt (stefan.erhardt@fau.de)
+* Romano Giannetti (romano.giannetti@gmail.com)
+
+-------------
+Copyright 2007-18 by Massimo Redaelli
+
+This file may be distributed and/or modified
+
+1. under the LaTeX Project Public License and/or
+2. under the GNU Public License.
diff --git a/graphics/pgf/contrib/circuitikz/doc/changelog.tex b/graphics/pgf/contrib/circuitikz/doc/changelog.tex
new file mode 100644
index 0000000000..ab413a5a92
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/doc/changelog.tex
@@ -0,0 +1,545 @@
+%DO NOT EDIT THIS AUTOMATICALLY GENERATED FILE, run "make changelog" at toplevel!!!
+The major changes among the different circuitikz versions are listed
+here. See \url{https://github.com/circuitikz/circuitikz/commits} for a
+full list of changes.
+
+\begin{itemize}
+\item
+ Version 0.9.4 (2019-08-30)
+
+ This release introduces two changes: a big one, which is the styling
+ of the components (please look at the manual for details) and a change
+ to how voltage labels and arrows are positioned. This one should be
+ backward compatible \emph{unless} you used \texttt{voltage\ shift}
+ introduced in 0.9.0, which was broken when using the global
+ \texttt{scale} parameter.
+
+ The styling additions are quite big, and, although in principle they
+ are backward compatible, you can find corner cases where they are not,
+ especially if you used to change parameters for
+ \texttt{pgfcirc.defines.tex}; so a snapshot for the 0.9.3 version is
+ available.
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Fixed a bug with ``inline'' gyrators, now the circle will not
+ overlap
+ \item
+ Fixed a bug in input anchors of european not ports
+ \item
+ Fixed ``tlinestub'' so that it has the same default size than
+ ``tline'' (TL)
+ \item
+ Fixed the ``transistor arrows at end'' feature, added to styling
+ \item
+ Changed the behavior of ``voltage shift'' and voltage label
+ positioning to be more robust
+ \item
+ Added several new anchors for ``elmech'' element
+ \item
+ Several minor fixes in some component drawings to allow fill and
+ thickness styles
+ \item
+ Add 0.9.3 version snapshots.
+ \item
+ Added styling of relative size of components (at a global or local
+ level)
+ \item
+ Added styling for fill color and thickeness
+ \item
+ Added style files
+ \end{itemize}
+\item
+ Version 0.9.3 (2019-07-13)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added the option to have ``dotless'' P-MOS (to use with arrowmos
+ option)
+ \item
+ Fixed a (puzzling) problem with coupler2
+ \item
+ Fixed a compatibility problem with newer PGF (\textgreater{}3.0.1a)
+ \end{itemize}
+\item
+ Version 0.9.2 (2019-06-21)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ (hopefully) fixed ConTeXt compatibility. Most new functionality is
+ not tested; testers and developers for the ConTeXt side are needed.
+ \item
+ Added old ConTeXt version for 0.8.3
+ \item
+ Added tailless ground
+ \end{itemize}
+\item
+ Version 0.9.1 (2019-06-16)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added old LaTeX versions for 0.8.3, 0.7, 0.6 and 0.4
+ \item
+ Added the option to have inline transformers and gyrators
+ \item
+ Added rotary switches
+ \item
+ Added more configurable bipole nodes (connectors) and more shapes
+ \item
+ Added 7-segment displays
+ \item
+ Added vacuum tubes by J. op den Brouw
+ \item
+ Made the open shape of dcisources configurable
+ \item
+ Made the arrows on vcc and vee configurable
+ \item
+ Fixed anchors of diamondpole nodes
+ \item
+ Fixed a bug (\#205) about unstable anchors in the chip components
+ \item
+ Fixed a regression in label placement for some values of scaling
+ \item
+ Fixed problems with cute switches anchors
+ \end{itemize}
+\item
+ Version 0.9.0 (2019-05-10)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added Romano Giannetti as contributor
+ \item
+ Added a CONTRIBUTING file
+ \item
+ Added options for solving the voltage direction problems.
+ \item
+ Adjusted ground symbols to better match ISO standard, added new
+ symbols
+ \item
+ Added new sources (cute european versions, noise sources)
+ \item
+ Added new types of amplifiers, and option to flip inputs and outputs
+ \item
+ Added bidirectional diodes (diac) thanks to Andre Lucas Chinazzo
+ \item
+ Added L,R,C sensors (with european, american and cute variants)
+ \item
+ Added stacked labels (thanks to the original work by Claudio
+ Fiandrino)
+ \item
+ Make the position of voltage symbols adjustable
+ \item
+ Make the position of arrows in FETs and BJTs adjustable
+ \item
+ Added chips (DIP, QFP) with a generic number of pins
+ \item
+ Added special anchors for transformers (and fixed the wrong center
+ anchor)
+ \item
+ Changed the logical port implementation to multiple inputs (thanks
+ to John Kormylo) with border anchors.
+ \item
+ Added several symbols: bulb, new switches, new antennas,
+ loudspeaker, microphone, coaxial connector, viscoelastic element
+ \item
+ Make most components fillable
+ \item
+ Added the oscilloscope component and several new instruments
+ \item
+ Added viscoelastic element
+ \item
+ Added a manual section on how to define new components
+ \item
+ Fixed american voltage symbols and allow to customize them
+ \item
+ Fixed placement of straightlabels in several cases
+ \item
+ Fixed a bug about straightlabels (thanks to @fotesan)
+ \item
+ Fixed labels spacing so that they are independent on scale factor
+ \item
+ Fixed the position of text labels in amplifiers
+ \end{itemize}
+\item
+ Version 0.8.3 (2017-05-28)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Removed unwanted lines at to-paths if the starting point is a node
+ without a explicit anchor.
+ \item
+ Fixed scaling option, now all parts are scaled by bipoles/length
+ \item
+ Surge arrester appears no more if a to path is used without
+ {[}{]}-options
+ \item
+ Fixed current placement now possible with paths at an angle of
+ around 280°
+ \item
+ Fixed voltage placement now possible with paths at an angle of
+ around 280°
+ \item
+ Fixed label and annotation placement (at some angles position not
+ changable)
+ \item
+ Adjustable default distance for straight-voltages:
+ `bipoles/voltage/straight label distance'
+ \item
+ Added Symbol for bandstop filter
+ \item
+ New annotation type to show flows using f=\ldots{} like currents,
+ can be used for thermal, power or current flows
+ \end{itemize}
+\item
+ Version 0.8.2 (2017-05-01)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Fixes pgfkeys error using alternatively specified mixed colors(see
+ pgfplots manual section ``4.7.5 Colors'')
+ \item
+ Added new switches ``ncs'' and ``nos''
+ \item
+ Reworked arrows at spst-switches
+ \item
+ Fixed direction of controlled american voltage source
+ \item
+ ``v\textless{}='' and ``i\textless{}='' do not rotate the sources
+ anymore(see them as ``counting direction indication'', this can be
+ different then the shape orientation); Use the option ``invert'' to
+ change the direction of the source/apperance of the shape.
+ \item
+ current label ``i='' can now be used independent of the regular
+ label ``l='' at current sources
+ \item
+ rewrite of current arrow placement. Current arrows can now also be
+ rotated on zero-length paths
+ \item
+ New DIN/EN compliant operational amplifier symbol ``en amp''
+ \end{itemize}
+\item
+ Version 0.8.1 (2017-03-25)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Fixed unwanted line through components if target coordinate is a
+ name of a node
+ \item
+ Fixed position of labels with subscript letters.
+ \item
+ Absolute distance calculation in terms of ex at rotated labels
+ \item
+ Fixed label for transistor paths (no label drawn)
+ \end{itemize}
+\item
+ Version 0.8 (2017-03-08)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Allow use of voltage label at a {[}short{]}
+ \item
+ Correct line joins between path components (to{[}\ldots{}{]})
+ \item
+ New Pole-shape .-. to fill perpendicular joins
+ \item
+ Fixed direction of controlled american current source
+ \item
+ Fixed incorrect scaling of magnetron
+ \item
+ Fixed: Number of american inductor coils not adjustable
+ \item
+ Fixed Battery Symbols and added new battery2 symbol
+ \item
+ Added non-inverting Schmitttrigger
+ \end{itemize}
+\item
+ Version 0.7 (2016-09-08)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added second annotation label, showing, e.g., the value of an
+ component
+ \item
+ Added new symbol: magnetron
+ \item
+ Fixed name conflict of diamond shape with tikz.shapes package
+ \item
+ Fixed varcap symbol at small scalings
+ \item
+ New packet-option ``straightvoltages, to draw straight(no curved)
+ voltage arrows
+ \item
+ New option ``invert'' to revert the node direction at paths
+ \item
+ Fixed american voltage label at special sources and battery
+ \item
+ Fixed/rotated battery symbol(longer lines by default positive
+ voltage)
+ \item
+ New symbol Schmitttrigger
+ \end{itemize}
+\item
+ Version 0.6 (2016-06-06)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added Mechanical Symbols (damper,mass,spring)
+ \item
+ Added new connection style diamond, use (d-d)
+ \item
+ Added new sources voosource and ioosource (double zero-style)
+ \item
+ All diode can now drawn in a stroked way, just use globel option
+ ``strokediode'' or stroke instead of full/empty, or D-. Use this
+ option for compliance with DIN standard EN-60617
+ \item
+ Improved Shape of Diodes:tunnel diode, Zener diode, schottky diode
+ (bit longer lines at cathode)
+ \item
+ Reworked igbt: New anchors G,gate and new L-shaped form Lnigbt,
+ Lpigbt
+ \item
+ Improved shape of all fet-transistors and mirrored p-chan fets as
+ default, as pnp, pmos, pfet are already. This means a
+ backward-incompatibility, but smaller code, because p-channels
+ mosfet are by default in the correct direction(source at top). Just
+ remove the `yscale=-1' from your p-chan fets at old pictures.
+ \end{itemize}
+\item
+ Version 0.5 (2016-04-24)
+
+ \begin{itemize}
+ \tightlist
+ \item
+ new option boxed and dashed for hf-symbols
+ \item
+ new option solderdot to enable/disable solderdot at source port of
+ some fets
+ \item
+ new parts: photovoltaic source, piezo crystal, electrolytic
+ capacitor, electromechanical device(motor, generator)
+ \item
+ corrected voltage and current direction(option to use old behaviour)
+ \item
+ option to show body diode at fet transistors
+ \end{itemize}
+\item
+ Version 0.4
+
+ \begin{itemize}
+ \tightlist
+ \item
+ minor improvements to documentation
+ \item
+ comply with TDS
+ \item
+ merge high frequency symbols by Stefan Erhardt
+ \item
+ added switch (not opening nor closing)
+ \item
+ added solder dot in some transistors
+ \item
+ improved ConTeXt compatibility
+ \end{itemize}
+\item
+ Version 0.3.1
+
+ \begin{itemize}
+ \tightlist
+ \item
+ different management of color\ldots{}
+ \item
+ fixed typo in documentation
+ \item
+ fixed an error in the angle computation in voltage and current
+ routines
+ \item
+ fixed problem with label size when scaling a tikz picture
+ \item
+ added gas filled surge arrester
+ \item
+ added compatibility option to work with Tikz's own circuit library
+ \item
+ fixed infinite in arctan computation
+ \end{itemize}
+\item
+ Version 0.3.0
+
+ \begin{itemize}
+ \tightlist
+ \item
+ fixed gate node for a few transistors
+ \item
+ added mixer
+ \item
+ added fully differential op amp (by Kristofer M. Monisit)
+ \item
+ now general settings for the drawing of voltage can be overridden
+ for specific components
+ \item
+ made arrows more homogeneous (either the current one, or latex' bt
+ pgf)
+ \item
+ added the single battery cell
+ \item
+ added fuse and asymmetric fuse
+ \item
+ added toggle switch
+ \item
+ added varistor, photoresistor, thermocouple, push button
+ \item
+ added thermistor, thermistor ptc, thermistor ptc
+ \item
+ fixed misalignment of voltage label in vertical bipoles with names
+ \item
+ added isfet
+ \item
+ added noiseless, protective, chassis, signal and reference grounds
+ (Luigi «Liverpool»)
+ \end{itemize}
+\item
+ Version 0.2.4
+
+ \begin{itemize}
+ \tightlist
+ \item
+ added square voltage source (contributed by Alistair Kwan)
+ \item
+ added buffer and plain amplifier (contributed by Danilo Piazzalunga)
+ \item
+ added squid and barrier (contributed by Cor Molenaar)
+ \item
+ added antenna and transmission line symbols contributed by Leonardo
+ Azzinnari
+ \item
+ added the changeover switch spdt (suggestion of Fabio Maria
+ Antoniali)
+ \item
+ rename of context.tex and context.pdf (thanks to Karl Berry)
+ \item
+ updated the email address
+ \item
+ in documentation, fixed wrong (non-standard) labelling of the axis
+ in an example (thanks to prof. Claudio Beccaria)
+ \item
+ fixed scaling inconsistencies in quadrupoles
+ \item
+ fixed division by zero error on certain vertical paths
+ \item
+ introduced options straighlabels, rotatelabels, smartlabels
+ \end{itemize}
+\item
+ Version 0.2.3
+
+ \begin{itemize}
+ \tightlist
+ \item
+ fixed compatibility problem with label option from tikz
+ \item
+ Fixed resizing problem for shape ground
+ \item
+ Variable capacitor
+ \item
+ polarized capacitor
+ \item
+ ConTeXt support (read the manual!)
+ \item
+ nfet, nigfete, nigfetd, pfet, pigfete, pigfetd (contribution of
+ Clemens Helfmeier and Theodor Borsche)
+ \item
+ njfet, pjfet (contribution of Danilo Piazzalunga)
+ \item
+ pigbt, nigbt
+ \item
+ \emph{backward incompatibility} potentiometer is now the standard
+ resistor-with-arrow-in-the-middle; the old potentiometer is now
+ known as variable resistor (or vR), similarly to variable inductor
+ and variable capacitor
+ \item
+ triac, thyristor, memristor
+ \item
+ new property ``name'' for bipoles
+ \item
+ fixed voltage problem for batteries in american voltage mode
+ \item
+ european logic gates
+ \item
+ \emph{backward incompatibility} new american standard inductor. Old
+ american inductor now called ``cute inductor''
+ \item
+ \emph{backward incompatibility} transformer now linked with the
+ chosen type of inductor, and version with core, too. Similarly for
+ variable inductor
+ \item
+ \emph{backward incompatibility} styles for selecting shape variants
+ now end are in the plural to avoid conflict with paths
+ \item
+ new placing option for some tripoles (mostly transistors)
+ \item
+ mirror path style
+ \end{itemize}
+\item
+ Version 0.2.2 - 20090520
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Added the shape for lamps.
+ \item
+ Added options \texttt{europeanresistor}, \texttt{europeaninductor},
+ \texttt{americanresistor} and \texttt{americaninductor}, with
+ corresponding styles.
+ \item
+ FIXED: error in transistor arrow positioning and direction under
+ negative \texttt{xscale} and \texttt{yscale}.
+ \end{itemize}
+\item
+ Version 0.2.1 - 20090503
+
+ \begin{itemize}
+ \tightlist
+ \item
+ Op-amps added
+ \item
+ added options arrowmos and noarrowmos, to add arrows to pmos and
+ nmos
+ \end{itemize}
+\item
+ Version 0.2 - 20090417 First public release on CTAN
+
+ \begin{itemize}
+ \tightlist
+ \item
+ \emph{Backward incompatibility}: labels ending with
+ \texttt{:}\textit{angle} are not parsed for positioning anymore.
+ \item
+ Full use of \TikZ~keyval features.
+ \item
+ White background is not filled anymore: now the network can be drawn
+ on a background picture as well.
+ \item
+ Several new components added (logical ports, transistors, double
+ bipoles, \ldots).
+ \item
+ Color support.
+ \item
+ Integration with \{\ttfamily siunitx\}.
+ \item
+ Voltage, american style.
+ \item
+ Better code, perhaps. General cleanup at the very least.
+ \end{itemize}
+\item
+ Version 0.1 - 2007-10-29 First public release
+\end{itemize}
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
new file mode 100644
index 0000000000..5c5c1080a1
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.tex b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.tex
new file mode 100644
index 0000000000..aa752551d4
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikz-context.tex
@@ -0,0 +1,22 @@
+
+\usemodule[circuitikz]
+
+\starttext
+
+A simple example to test the installation.
+
+\startcircuitikz[scale=1.2]
+ \draw
+ (0,2) to[I=1\milli\ampere] (2,2)
+ to[R, l_=2\kilo\ohm, *-*] (0,0)
+ to[R, l_=2\kilo\ohm] (2,0)
+ to[V, v_=2\volt] (2,2)
+ to[cspst, l=$t_0$] (4,2) -- (4,1.5)
+ to [generic, i=$i_1$, v=$v_1$] (4,-.5) -- (4,-1.5)
+ (0,2) -- (0,-1.5) to[V, v_=4\volt] (2,-1.5)
+ to [R, l=1\kilo\ohm] (4,-1.5)
+ (5,2) node[dipchip, anchor=pin 1]{};
+
+\stopcircuitikz
+
+\stoptext
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
new file mode 100644
index 0000000000..710c67cb8a
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
new file mode 100644
index 0000000000..06a6f5ab5c
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/doc/circuitikzmanual.tex
@@ -0,0 +1,5220 @@
+% % Konfiguration für Texstudio (Version > 2.9)
+% !TeX program = xelatex
+% !TeX TXS-program:compile = txs:///xelatex/[-8bit]
+% !BIB program = biber
+% !TeX spellcheck = en_US
+% !TeX encoding = utf8
+
+\documentclass[a4paper, titlepage]{article}
+\usepackage{a4wide} % smaller borders
+\usepackage{titling}
+\usepackage{titlesec}
+\newcommand{\sectionbreak}{\clearpage}
+
+\def\modern{
+ \usepackage{fontspec}
+ \defaultfontfeatures{
+ Ligatures=TeX,
+ Numbers=OldStyle,
+ Mapping=tex-text,
+ SmallCapsFeatures={LetterSpace=8, Numbers=OldStyle}
+ }
+ % \setmainfont{Gentium Book Basic}
+}
+
+% do not split this line in more lines, otherwise "make git-manual" will show the wrong version
+\usepackage[siunitx, RPvoltages]{circuitikz}
+% Let this be the same as the chosen voltage direction for coherence
+\def\chosenvoltoption{RPvoltages}
+
+\usepackage{ifxetex,ifluatex}
+\ifxetex
+ \modern
+\else
+ \ifluatex
+ \modern
+ \else
+ % pdflatex
+ \usepackage[T1]{fontenc}
+ \usepackage[utf8]{inputenc}
+ % \usepackage{babel}
+ \fi
+\fi
+\def\tightlist{} % needed for latest pandoc-versions(pandoc used for including changelog)
+\usepackage{microtype}
+
+\sisetup{load=derived} % loading \siemens
+\usepackage{showexpl}
+%
+% The following trick is used to silence showexpl a bit, so that the
+% logs are readable...
+%
+\makeatletter
+\let\SX@Info=\relax % silence showexpl a bit...
+\makeatother
+%
+\lstset{
+ pos=l,
+ width=-99pt,
+ overhang=0pt,
+ hsep=\columnsep,
+ vsep=\bigskipamount,
+ rframe=single,
+ numbers=left,
+ numberstyle=\tiny,
+ numbersep=.3em,
+ xleftmargin=1em,
+ columns=flexible,
+ language=[LaTeX]TEX,breaklines=true,
+ basicstyle=\normalsize\ttfamily,tabsize=3
+}
+
+\usepackage{booktabs}
+\renewcommand{\arraystretch}{1.2}
+
+\usepackage{framed, xtab}
+\usepackage{hyperref}
+\hypersetup{
+ bookmarks=false, % show bookmarks bar?
+ pdftitle={CircuiTikZ \pgfcircversion\ - manual}, % title
+ pdfauthor={Massimo Redaelli, Stefan Lindner, Stefan Erhardt, Romano Giannetti}, % authors
+ pdfsubject={CircuiTikZ manual}, % subject of the document
+ pdfkeywords={}, % list of keywords
+ colorlinks=true, % false: boxed links; true: colored links
+ linkcolor=blue, % color of internal links
+ citecolor=blue, % color of links to bibliography
+ filecolor=blue, % color of file links
+ urlcolor=blue % color of external links
+}
+\usepackage{imakeidx}
+\usepackage{textcomp}
+\makeindex[title=Index of the components, intoc=true]
+
+% Local utilities packages
+\usepackage{ctikzmanutils}
+
+\newcommand{\email}[1]{\href{mailto:#1}{#1}}
+\long\def\comment#1{}
+
+% There are a lot of boxes in the document; let's try to give TeX
+% a bit of leverage... do not use parindent (which looks strange between examples)
+% and add stretch between paragraph, to avoid a lot of sections and subsections
+% starting at the end of the page.
+\parindent=0pt
+\parskip=4pt plus 6pt minus 2pt
+
+\begin{document}
+\setcounter{secnumdepth}{4}
+\setcounter{tocdepth}{4}
+
+\def\TikZ{Ti\emph{k}Z}
+\def\Circuitikz{Circui\TikZ}
+\def\ConTeXt{Con\TeX t}
+\lstset{frameround=fttt}
+\lstloadlanguages{TeX}
+
+\title{\Circuitikz \\{\large version \pgfcircversion{} (\pgfcircversiondate)}}
+\author{Massimo A. Redaelli (\email{m.redaelli@gmail.com})\\
+ Stefan Lindner (\email{stefan.lindner@fau.de})\\
+ Stefan Erhardt (\email{stefan.erhardt@fau.de})\\
+ Romano Giannetti (\email{romano.giannetti@gmail.com})}
+\date{\today}
+
+\pretitle{\begin{center}%
+ \begin{circuitikz}
+ \draw (0,0) node[dipchip, rotate=90, num pins=40, fill=cyan!20!white](C){%
+ \rotatebox{-90}{\LARGE\Circuitikz}%
+ };
+ \draw (C.pin 20) -- ++(0,-8) node[ground](GND){};
+ \draw (C.pin 7) to[D, fill=blue] ++(0,-1) -- ++(0.5,0) to[R] ++(2,0)
+ coordinate(a1) to[short, -*]
+ node[above left, blue]{Massimo A. Redaelli}
+ node[below left,]{\email{m.redaelli@gmail.com}}
+ (a1-|GND);
+ \draw (C.pin 5) to[D, fill=red] ++(0,-3)-- ++(0.5,0) to[R] ++(2,0)
+ coordinate(a2) to[short, -*]
+ node[above left, blue]{Stefan Lindner}
+ node[below left,]{\email{stefan.lindner@fau.de}}
+ (a2-|GND);
+ \draw (C.pin 3) to[D, fill=green] ++(0,-5)-- ++(0.5,0) to[R] ++(2,0)
+ coordinate(a3) to[short, -*]
+ node[above left, blue]{Stefan Erhart}
+ node[below left,]{\email{stefan.erhardt@fau.de}}
+ (a3-|GND);
+ \draw (C.pin 1) to[D, fill=yellow] ++(0,-7)-- ++(0.5,0) to[R] ++(2,0)
+ coordinate(a4) to[short, -*]
+ node[above left, blue]{Romano Giannetti}
+ node[below left,]{\email{romano.giannetti@gmail.com}}
+ (a4-|GND);
+ \end{circuitikz}
+ \par\bigskip\vfill}
+\posttitle{\end{center}}
+
+\maketitle
+
+\tableofcontents
+\cleardoublepage
+\section{Introduction}
+\subsection{About}
+\Circuitikz\ was initiated by Massimo Redaelli in 2007, who was working as a research assistant at the Polytechnic University of Milan, Italy, and needed a tool for creating exercises and exams.
+After he left University in 2010 the development of \Circuitikz\ slowed down, since \LaTeX\ is mainly established in the academic world. In 2015 Stefan Lindner and Stefan Erhardt, both working as research assistants at the University of Erlangen-Nürnberg, Germany, joined the team and now maintain the project together with the initial author. In 2018 Romano Giannetti, full professor of Electronics at Comillas Pontifical University of Madrid, joined the team.
+
+The use of \Circuitikz\ is, of course, not limited to academic teaching. The package gets widely used by engineers for typesetting electronic circuits for articles and publications all over the world.
+
+\subsection{License}
+Copyright \copyright\ 2007--2019 Massimo Redaelli. This package is author-maintained. Permission is granted to copy, distribute and/or modify this software under the terms of the \LaTeX\ Project Public License, version 1.3.1, or the GNU Public License. This software is provided ‘as is’, without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.
+\subsection{Loading the package}
+
+\begin{table}[h]
+\centering
+\begin{tabular}{ll}\toprule
+ \LaTeX & \ConTeXt\footnotemark \\ \midrule
+ \verb!\usepackage{circuitikz}! & \verb!\usemodule[circuitikz]!\\
+ \bottomrule
+\end{tabular}
+\end{table}
+\footnotetext{\ConTeXt\ support was added mostly thanks to Mojca Miklavec and Aditya Mahajan.}
+
+\noindent \TikZ\ will be automatically loaded.
+
+\noindent Circui\TikZ\ commands are just \TikZ\ commands, so a minimum usage example would be:
+
+\begin{LTXexample}[varwidth=true]
+\tikz \draw (0,0) to[R=$R_1$] (2,0);
+\end{LTXexample}
+
+\subsection{Installing a new version of the package.}
+
+The stable version of the package should come with your \LaTeX\ distribution. Downloading the files from CTAN and installing them locally is, unfortunately, a distribution-dependent task and sometime not so trivial. If you search for \texttt{local texmf tree} and the name of your distribution on \url{https://tex.stackexchange.com/} you will find a lot of hints.
+
+Anyway, the easiest way of using whichever version of \Circuitikz\ is to point to the github page \url{https://circuitikz.github.io/circuitikz/} of the project, and download the version you want. You will download a simple (biggish) file, called \texttt{circuitikz.sty}.
+
+Now you can just put this file in your local \texttt{texmf} tree, if you have one, or simply adding it into the same directory where your main file resides, and then use
+
+\begin{verbatim}
+ \usepackage[...options...]{circuitikzgit}
+\end{verbatim}
+
+instead of \texttt{circuitikz}. This is also advantageous for ``future resilience''; the authors try hard not to break backward compatibility with new versions, but sometime things happen.
+
+\subsection{Requirements}
+\begin{itemize}
+ \item \texttt{tikz}, version $\ge 3$;
+ \item \texttt{xstring}, not older than 2009/03/13;
+ \item \texttt{siunitx}, if using \texttt{siunitx} option.
+\end{itemize}
+
+\subsection{Incompatible packages}
+\TikZ's own \texttt{circuit} library, which is based on \Circuitikz, (re?)defines several styles used by this library. In order to have them work together you can use the \texttt{compatibility} package option, which basically prefixes the names of all \Circuitikz\ \texttt{to[]} styles with an asterisk.
+
+So, if loaded with said option, one must write \verb!(0,0) to[*R] (2,0)! and, for transistors on a path, \verb!(0,0) to[*Tnmos] (2,0)!, and so on (but \verb!(0,0) node[nmos] {}!). See example at page~\pageref{ex:compatibility}.
+
+\subsection{Known bugs and limitation}\label{sec:bugs}
+
+\Circuitikz{} will \textbf{not work} correctly with global (in the main \texttt{circuitikz} environment, or in \texttt{scope} environments) \emph{negative} scale parameters (\texttt{scale}, \texttt{xscale} or \texttt{yscale}), unless \texttt{transform shape} is also used, and even in this cases the behavior is not guaranteed.
+Neither it will work with angle-changing scaling (when \texttt{xscale} is different form \texttt{yscale}) and with the global \texttt{rotate} parameter.
+
+Correcting this will need a big rewrite of the path routines, and although the authors are thinking about solving it, don't hold your breath; it will need changing a lot of interwoven code (labels, voltages, currents and so on). Contributions and help would be highly appreciated.
+
+This same issue create a lot of problem of compatibility between \Circuitikz{} and the new \texttt{pic} Ti\emph{k}Z feature, so basically don't put components into \texttt{pic}s.
+
+
+\subsection{Incompabilities between version}
+Here, we will provide a list of incompabilitys between different version of circuitikz. We will try to hold this list short, but sometimes it is easier to break with old syntax than including a lot of switches and compatibility layers.
+You can check the used version at your local installation using the macro \verb!\pgfcircversion{}!.
+\begin{itemize}
+ \item After v0.9.4: added the concept of styling of circuits. It should be backward compatible, but it's a big change, so be ready to use the \texttt{0.9.3} snapshot (see below for details).
+ \item After v0.9.0: the parameters \texttt{tripoles/american or port/aaa}, \texttt{...bbb}, \texttt{...ccc} and \texttt{...ddd} are no longer used and are silently ignored; the same stands for \texttt{nor}, \texttt{xor}, and \texttt{xnor} ports.
+ \item After v0.9.0: voltage and current directions/sign (plus and minus signs in case of \texttt{american voltages} and arrows in case of \texttt{european voltages} have been rationalized with a couple of new options (see details in section~\ref{curr-and-volt}. The default case is still the same as v0.8.3.
+ \item Since v0.8.2: voltage and current label directions(v<= / i<=) do NOT change the orientation of the drawn source shape anymore. Use the "invert" option to rotate the shape of the source. Furthermore, from this version on, the current label(i=) at current sources can be used independent of the regular label(l=).
+ \item Since v0.7?: The label behaviour at mirrored bipoles has changes, this fixes the voltage drawing, but perhaps you have to adjust your label positions.
+ \item Since v0.5.1: The parts pfet, pigfete, pigfetebulk and pigfetd are now mirrored by default. Please adjust your yscale-option to correct this.
+ \item Since v0.5: New voltage counting direction, here exists an option to use the old behaviour
+\end{itemize}
+
+If you have older projects that show compatibility problems, you have two options:
+\begin{itemize}
+ \item you can use an older version locally using the git-version and picking the correct commit from the repository (branch gh-pages) or the main GitHub site directly;
+ \item if you are using \LaTeX, the distribution has embedded several important old versions: \texttt{0.4}, \texttt{0.6}, \texttt{0.7}, \texttt{0.8.3} and \texttt{0.9.3}. To switch to use them, you simply change your \verb|\usepackage| invocation like
+ \begin{lstlisting}
+ \usepackage[]{circuitik-0.8.3} % or circuitikz-0.4, 0.6...
+ \end{lstlisting}
+ You have to take care of the options that may have changed between versions;
+ \item if you are using \ConTeXt, only versions \texttt{0.8.3} and \texttt{0.9.3} are packaged for now; if can use it with
+ \begin{lstlisting}
+ \usemodule[circuitik-0.8.3]
+ \end{lstlisting}
+\end{itemize}
+
+
+\subsection{Feedback}
+The easiest way to contact the authors is via the official Github repository: \url{https://github.com/circuitikz/circuitikz/issues}. For general help question, a lot of nice people is quite active on \url{https://tex.stackexchange.com/questions/tagged/circuitikz} --- be sure to read the help pages for the site and ask!
+
+\subsection{Package options}
+\label{sec:package-options}
+
+\noindent Circuit people are very opinionated about their symbols. In order to meet the individual gusto you can set a bunch of package options. The standard options are what the authors like, for example you get this:
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}
+ \draw (0,0) to[R=2<\ohm>, i=?, v=84<\volt>] (2,0) --
+ (2,2) to[V<=84<\volt>] (0,2)
+ -- (0,0);
+ \end{circuitikz}
+\end{LTXexample}
+
+Feel free to load the package with your own cultural options:
+
+\begin{center}
+ \begin{tabular}{ll}\toprule
+ \LaTeX & \ConTeXt \\ \midrule
+ \verb!\usepackage[american]{circuitikz}! & \verb!\usemodule[circuitikz][american]!\\
+ \bottomrule
+ \end{tabular}
+\end{center}
+
+\begin{LTXexample}[varwidth=true,linerange={1-1,3-6}]
+ \begin{circuitikz}
+ [circuitikz/voltage=american, circuitikz/resistor=american] % line not printed
+ \draw (0,0) to[R=2<\ohm>, i=?, v=84<\volt>] (2,0) --
+ (2,2) to[V<=84<\volt>] (0,2)
+ -- (0,0);
+ \end{circuitikz}
+\end{LTXexample}
+
+\medskip{}
+
+\noindent Here is the list of all the options:
+{\sloppy % for the big lists of \texttt here
+ \begin{itemize}
+ \item \texttt{europeanvoltages}: uses arrows to define voltages, and uses european-style voltage sources;
+ \item \texttt{straightvoltages}: uses arrows to define voltages, and and uses straight voltage arrows;
+ \item \texttt{americanvoltages}: uses $-$ and $+$ to define voltages, and uses american-style voltage sources;
+ \item \texttt{europeancurrents}: uses european-style current sources;
+ \item \texttt{americancurrents}: uses american-style current sources;
+ \item \texttt{europeanresistors}: uses rectangular empty shape for resistors, as per european standards;
+ \item \texttt{americanresistors}: uses zig-zag shape for resistors, as per american standards;
+ \item \texttt{europeaninductors}: uses rectangular filled shape for inductors, as per european standards;
+ \item \texttt{americaninductors}: uses "4-bumps" shape for inductors, as per american standards;
+ \item \texttt{cuteinductors}: uses my personal favorite, "pig-tailed" shape for inductors;
+ \item \texttt{americanports}: uses triangular logic ports, as per american standards;
+ \item \texttt{europeanports}: uses rectangular logic ports, as per european standards;
+ \item \texttt{americangfsurgearrester}: uses round gas filled surge arresters, as per american standards;
+ \item \texttt{europeangfsurgearrester}: uses rectangular gas filled surge arresters, as per european standards;
+ \item \texttt{european}: equivalent to \texttt{europeancurrents}, \texttt{europeanvoltages}, \texttt{europeanresistors}, \texttt{europeaninductors}, \texttt{europeanports}, \texttt{europeangfsurgearrester};
+ \item \texttt{american}: equivalent to \texttt{americancurrents}, \texttt{americanvoltages}, \texttt{americanresistors}, \texttt{americaninductors}, \texttt{americanports}, \texttt{americangfsurgearrester};
+ \item \texttt{siunitx}: integrates with \texttt{SIunitx} package. If labels, currents or voltages are of the form \verb!#1<#2>! then what is shown is actually \verb!\SI{#1}{#2}!;
+ \item \texttt{nosiunitx}: labels are not interpreted as above;
+ \item \texttt{fulldiode}: the various diodes are drawn \emph{and} filled by default, i.e. when using styles such as \texttt{diode}, \texttt{D}, \texttt{sD}, \ldots Other diode styles can always be forced with e.g. \texttt{Do}, \texttt{D-}, \ldots
+ \item \texttt{strokediode}: the various diodes are drawn \emph{and} stroke by default, i.e. when using styles such as \texttt{diode}, \texttt{D}, \texttt{sD}, \ldots Other diode styles can always be forced with e.g. \texttt{Do}, \texttt{D*}, \ldots
+ \item \texttt{emptydiode}: the various diodes are drawn \emph{but not} filled by default, i.e. when using styles such as \texttt{D}, \texttt{sD}, \ldots Other diode styles can always be forced with e.g. \texttt{Do}, \texttt{D-}, \ldots
+ \item \texttt{arrowmos}: pmos and nmos have arrows analogous to those of pnp and npn transistors;
+ \item \texttt{noarrowmos}: pmos and nmos do not have arrows analogous to those of pnp and npn transistors;
+ \item \texttt{fetbodydiode}: draw the body diode of a FET;
+ \item \texttt{nofetbodydiode}: do not draw the body diode of a FET;
+ \item \texttt{fetsolderdot}: draw solderdot at bulk-source junction of some transistors;
+ \item \texttt{nofetsolderdot}: do not draw solderdot at bulk-source junction of some transistors;
+ \item \texttt{emptypmoscircle}: the circle at the gate of a pmos transistor gets not filled;
+ \item \texttt{lazymos}: draws lazy nmos and pmos transistors. Chip designers with huge circuits prefer this notation;
+ \item \texttt{straightlabels}: labels on bipoles are always printed straight up, i.e.~with horizontal baseline;
+ \item \texttt{rotatelabels}: labels on bipoles are always printed aligned along the bipole;
+ \item \texttt{smartlabels}: labels on bipoles are rotated along the bipoles, unless the rotation is very close to multiples of 90°;
+ \item \texttt{compatibility}: makes it possibile to load \Circuitikz\ and \TikZ\ circuit library together.
+ \item Voltage directions: until v0.8.3, there was an error in the coherence between american and european voltages styles (see section~\ref{curr-and-volt}) for the batteries. This has been fixed, but to guarantee backward compatibility and to avoid nasty surprises, the fix is available with new options:
+ \begin{itemize}
+ \item \texttt{oldvoltagedirection}: Use old way of voltage direction having a difference between european and american direction, with wrong default labelling for batteries;
+ \item \texttt{nooldvoltagedirection}: The standard from 0.5 onward, utilize the (German?) standard of voltage arrows in the direction of electric fields (without fixing batteries);
+ \item \texttt{RPvoltages} (meaning Rising Potential voltages): the arrow is in direction of rising potential, like in \texttt{oldvoltagedirection}, but batteries and current sources are fixed to follow the passive/active standard;
+ \item \texttt{EFvoltages} (meaning Electric Field voltages): the arrow is in direction of the electric field, like in \texttt{nooldvoltagedirection}, but batteries are fixed;
+ \end{itemize}
+ If none of these option are given, the package will default to \texttt{nooldvoltagedirection}, but will give a warning. The behavior is also selectable circuit by circuit with the \texttt{voltage dir} style.
+ \item \texttt{betterproportions}\footnote{May change in the future!}: nicer proportions of transistors in comparision to resistors;
+ \end{itemize}
+
+
+ The old options in the singular (like \texttt{american voltage}) are still available for compatibility, but are discouraged.
+
+ \medskip
+
+ Loading the package with no options is equivalent to the following options:
+ \texttt{[nofetsolderdot, europeancurrents, europeanvoltages, americanports,
+ americanresistors, cuteinductors, europeangfsurgearrester, nosiunitx, noarrowmos,
+ smartlabels, nocompatibility]}.
+
+ \medskip
+
+ In \ConTeXt\ the options are similarly specified: \texttt{current= european|american}, \texttt{voltage= european|american}, \texttt{resistor= american|european}, \texttt{inductor= cute|american|european}, \texttt{logic= american|european}, \texttt{siunitx= true|false}, \texttt{arrowmos= false|true}.
+
+} %\stop the \sloppy processing
+
+\section{Tutorials}
+
+To draw a circuit, you have to load the \texttt{circuitikz} package; this can be done with
+\begin{lstlisting}
+ \usepackage[siunitx, RPvoltages]{circuitikz}
+\end{lstlisting}
+somewhere in your document preamble. It will load automatically the needed packages if not already done before.
+
+\subsection{Getting started with \Circuitikz: a current shunt}
+
+Let's say we want to prepare a circuit to teach how a current shunt works; the idea is to draw a current generator, a couple of resistors in parallel, and the indication of currents and voltages for the discussion.
+
+A circuit in \Circuitikz is drawn into a \texttt{circuitikz} environment (which is really an alias for \texttt{tikzpicture}). In this first example we will use absolute coordinates.
+The electrical components can be divided in two main categories: the one that are bipoles and are placed along a path (also known as \texttt{to}-style component, for their usage), and components that are nodes and can have any number of poles or connections.
+
+Let's start with the first type of component, and build a basic mesh:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[]
+ \draw (0,0) to[isource] (0,3) -- (2,3)
+ to[R] (2,0) -- (0,0);
+\end{circuitikz}
+\end{LTXexample}
+
+The symbol for the current source can surprise somebody; this is actually the european-style symbol, and the type of symbol chosen reflects the default options of the package (see section~\ref{sec:package-options}). Let's change the style for now (the author of the tutorial, Romano, is European - but he has always used American-style circuits, so \dots); and while we're at it, let's add the other branch and some labels.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[isource, l=$I_0$] (0,3) -- (2,3)
+ to[R=$R_1$] (2,0) -- (0,0);
+ \draw (2,3) -- (4,3) to[R=$R_2$]
+ (4,0) -- (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+You can use a single path or multiple path when drawing your circuit, it's just a question of style (but be aware that closing path could be non-trivial, see section~\ref{sec:line-joins}), and you can use standard \TikZ\ lines (\verb|--|, \verb+|-+ or similar) for the wires. Nonetheless, sometime using the \Circuitikz\ specific \texttt{short} component for the wires can be useful, because then we can add labels and nodes at it, like for example in the following circuit.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[isource, l=$I_0$] (0,3)
+ to[short, -*, i=$I_0$] (2,3)
+ to[R=$R_1$, i=$i_1$] (2,0) -- (0,0);
+ \draw (2,3) -- (4,3)
+ to[R=$R_2$, i=$i_2$]
+ (4,0) to[short, -*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+One of the problems with this circuit is that we would like to have the current in a different position, such as for example on the upper side of the resistors, so that Kirchoff's Current Law at the node is better shown to students. No problem; as you can see in section~\ref{curr-and-volt} you can use the position specifier \verb|<>^_}| after the key \texttt{i}:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[isource, l=$I_0$] (0,3)
+ to[short, -*, i=$I_0$] (2,3)
+ to[R=$R_1$, i>_=$i_1$] (2,0) -- (0,0);
+ \draw (2,3) -- (4,3)
+ to[R=$R_2$, i>_=$i_2$]
+ (4,0) to[short, -*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Finally, we would like to add voltages indication for carrying out the current formulas; as the default position of the voltage signs seems a bit cramped to me, I am adding the \texttt{voltage shift} parameter to make a bit more space for it\dots
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american, voltage shift=0.5]
+ \draw (0,0) to[isource, l=$I_0$, v=$V_0$] (0,3)
+ to[short, -*, i=$I_0$] (2,3)
+ to[R=$R_1$, i>_=$i_1$] (2,0) -- (0,0);
+ \draw (2,3) -- (4,3)
+ to[R=$R_2$, i>_=$i_2$]
+ (4,0) to[short, -*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\emph{Et voilá!}. Remember that this is still \LaTeX, which means that you have done a description of your circuit, which is, in a lot of way, independent of the visualization of it. If you ever have to adapt the circuit to, say, a journal that force European style and flows instead of currents, you just change a couple of things and you have what seems a completely different diagram:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[european, voltage shift=0.5]
+ \draw (0,0) to[isourceC, l=$I_0$, v=$V_0$] (0,3)
+ to[short, -*, f=$I_0$] (2,3)
+ to[R=$R_1$, f>_=$i_1$] (2,0) -- (0,0);
+ \draw (2,3) -- (4,3)
+ to[R=$R_2$, f>_=$i_2$]
+ (4,0) to[short, -*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+And finally, this is still \TikZ, so that you can freely mix other graphics element to the circuit.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american, voltage shift=0.5]
+ \draw (0,0) to[isource, l=$I_0$, v=$V_0$] (0,3)
+ to[short, -*, f=$I_0$] (2,3)
+ to[R=$R_1$, f>_=$i_1$] (2,0) -- (0,0);
+ \draw (2,3) -- (4,3)
+ to[R=$R_2$, f>_=$i_2$]
+ (4,0) to[short, -*] (2,0);
+ \draw[red, thick] (1.5,2.5) rectangle (4.5,3.5)
+ node[pos=0.5, above]{KCL};
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{A more complex tutorial: circuits, Romano style.}
+\begingroup % do not propagate to the rest of the manual
+
+The idea is to draw a two-stage amplifier for a lesson, or exercise, on the different qualities of BJT and MOSFET transistors.
+Notice that this is a more ``personal'' tutorial, showing a way to draw circuits that is, in the author's opinion, highly reusable and easy to do.
+The idea is using relative coordinates and named nodes as much as possible, so that changes in the circuit are easily done by changing keys numbers of position, and crucially, each block is reusable in other diagrams.
+
+First of all, let's define a handy function to show the position of nodes:
+
+\def\coord(#1){node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\tiny, pin distance=0.1cm, pin edge={red, overlay,}]45:#1}](#1){}}
+\begin{lstlisting}
+\def\coord(#1){coordinate(#1)}
+\def\coord(#1){node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\tiny, pin distance=0.1cm, pin edge={red, overlay,}]45:#1}](#1){}}
+\end{lstlisting}
+
+
+
+The idea is that you can use \verb|\coord()| instead of \verb|coordinate()| in paths, and that will draw sort of \emph{markers} showing them. For example:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american,]
+ \draw (0,0) node[npn](Q){};
+ \path (Q.center) \coord(center)
+ (Q.B) \coord(B) (Q.C) \coord(C)
+ (Q.E) \coord(E);
+\end{circuitikz}
+\end{LTXexample}
+
+After the circuit is drawn, simply commenting out the second definition of \verb|\coord| will hide all the markers.
+
+So let's start with the first stage transistor; given that my preferred way of drawing a MOSFET is with arrows, I'll start with the command \verb|\ctikzset{tripoles/mos style/arrows}|:
+
+\ctikzset{tripoles/mos style/arrows}
+\def\killdepth#1{{\raisebox{0pt}[\height][0pt]{#1}}}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american,]
+\ctikzset{tripoles/mos style/arrows}
+\def\killdepth#1{{\raisebox{0pt}[\height][0pt]{#1}}}
+ \draw (0,0) node[nmos](Q1){};
+ \draw (Q1.center) node[right]{\killdepth{Q1}};
+\end{circuitikz}
+\end{LTXexample}
+
+Another thing I like to modify with respect to the standard is the position of the arrows in transistors, which are normally in the middle the symbol. Using the following setting (see section~\ref{sec:styling-transistors}) will move the arrows to the start or end of the corresponding pin.
+
+\ctikzset{transistors/arrow pos=end}
+\begin{lstlisting}
+\ctikzset{transistors/arrow pos=end}
+\end{lstlisting}
+
+The tricky thing about \verb|\killdepth{}| macro is finnicky details; I do not like the standard position of labels on transistors (which is near the collector/drain) so I plot the label at the right of the \texttt{center} anchor. Without the \verb|\killdepth| macro, the labels of different transistor will be adjusted so that the center of the box is at the \texttt{center} anchor, and as an effect, labels with descenders (like Q) will have a different baseline than labels without. You can see this here (it's really subtle):
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american,]
+\draw (0,0) node[nmos](Q1){} ++(2,0) node[nmos](M1){};
+\draw (Q1.center) node[right]{q1};
+\draw (M1.center) node[right]{m1};
+\draw [red] (Q1.center) ++(0,-0.7ex) -- ++(3,0);
+\draw (0,-2)node[nmos](Q1){} ++(2,0) node[nmos](M1){};
+\draw (Q1.center) node[right]{\killdepth{q1}};
+\draw (M1.center) node[right]{\killdepth{m1}};
+\draw [red] (Q1.center) ++(0,-0.7ex) -- ++(3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+We will start connecting the first transistor with the power supply with a couple of resistors. Notice that I am naming the nodes \texttt{GND}, \texttt{VCC} and \texttt{VEE}, so that I can use the coordinates to have all the supply rails at the same vertical position (more on this later).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american,]
+ \draw (0,0) node[nmos,](Q1){};
+ \draw (Q1.center) node[right]{\killdepth{Q1}};
+ \draw (Q1.S) to[R, l2^=$R_S$ and \SI{5}{k\ohm}] ++(0,-3)
+ node[vee](VEE){$V_{EE}=\SI{-10}{V}$};
+ \draw (Q1.D) to[R, l2_=$R_D$ and \SI{10}{k\ohm}] ++(0,3)
+ node[vcc](VCC){$V_{CC}=\SI{10}{V}$};
+ \draw (Q1.S) to[short] ++(2,0) to[C=$C_1$] ++(0,-1.5) node[ground](GND){};
+ \path (GND) \coord(GND) (VCC) \coord(VCC)
+ (VEE) \coord(VEE);
+\end{circuitikz}
+\end{LTXexample}
+
+After that, let's add the input part. I will use a named node here, to refer to it to add the input source. Notice how the ground node is positioned: the coordinate \texttt{(in |- GND)} is the point with the horizontal coordinate of \texttt{(in)} and the horizontal one of \texttt{(GND)}, lining it up with the ground of the capacitor $C_1$.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american, scale=0.7]
+ \draw (0,0) node[nmos,](Q1){};
+ \draw (Q1.center) node[right]
+ {\killdepth{Q1}};
+ \draw (Q1.S) to[R, l2^=$R_S$ and \SI{5}{k\ohm}] ++(0,-3)
+ node[vee](VEE){$V_{EE}=\SI{-10}{V}$};
+ \draw (Q1.D) to[R, l2_=$R_D$ and \SI{10}{k\ohm}] ++(0,3)
+ node[vcc](VCC){$V_{CC}=\SI{10}{V}$};
+ \draw (Q1.S) to[short] ++(2,0) to[C=$C_1$] ++(0,-1.5) node[ground](GND){};
+ \draw (Q1.G) to[short] ++(-1,0)
+ \coord (in) to[R, l2^=$R_G$ and \SI{1}{M\ohm}]
+ (in |- GND) node[ground]{};
+ \draw (in) to[C, l_=$C_2$,*-o] ++(-1.5,0) node[left](vi1){$v_i=v_{i1}$};
+\end{circuitikz}
+\end{LTXexample}
+
+Notice that the only absolute coordinate here is the first one, \texttt{(0,0)}; so the elements are connected with relative movements and can be moved by just changing one number (for example, changing the \verb| to[C=$C_1$] ++(0,-1.5) | will move \emph{all} the grounds down).
+
+This is the final circuit, with the nodes still marked:
+\begin{lstlisting}
+\tikzset{blockdef/.style={%
+ {Straight Barb[harpoon, reversed, right, length=0.2cm]}-{Straight Barb[harpoon, reversed, left, length=0.2cm]},
+ blue, %densely dotted,
+}}
+\def\killdepth#1{{\raisebox{0pt}[\height][0pt]{#1}}}
+\def\coord(#1){coordinate(#1)}
+\def\coord(#1){node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\tiny, pin distance=0.1cm, pin edge={red, overlay,}]45:#1}](#1){}}
+\begin{circuitikz}[american, ]
+ \draw (0,0) node[nmos,](Q1){};
+ \draw (Q1.center) node[right]{\killdepth{Q1}};
+ \draw (Q1.S) to[R, l2^=$R_S$ and \SI{5}{k\ohm}] ++(0,-3) node[vee](VEE){$V_{EE}=\SI{-10}{V}$}; %define VEE level
+ \draw (Q1.S) to[short] ++(2,0) to[C=$C_1$] ++(0,-1.5) node[ground](GND){};
+ \draw (Q1.G) to[short] ++(-1,0) \coord (in) to[R, l2^=$R_G$ and \SI{1}{M\ohm}] (in |- GND) node[ground]{};
+ \draw (in) to[C, l_=$C_2$,*-o] ++(-1.5,0) node[left](vi1){$v_i=v_{i1}$};
+ \draw (Q1.D) to[R, l2_=$R_D$ and \SI{10}{k\ohm}] ++(0,3) node[vcc](VCC){$V_{CC}=\SI{10}{V}$};
+ \draw (Q1.D) to[short, -o] ++(1,0) node[right](vo1){$v_{o1}$};
+ %
+ \path (vo1) -- ++(3,0) \coord(bjt);
+ %
+ \draw (bjt) node[npn, ](Q2){};
+ \draw (Q2.center) node[right]{\killdepth{Q2}};
+ \draw (Q2.B) to[short, -o] ++(-0.5,0) node[left](vi2){$v_{12}$};
+ \draw (Q2.E) to[R,l2^=$R_E$ and \SI{9.3}{k\ohm}] (Q2.E |- VEE) node[vee]{};
+ \draw (Q2.E) to[short, -o] ++(1,0) node[right](vo2){$v_{o2}$};
+ \draw (Q2.C) to[short] (Q2.C |- VCC) node[vcc]{};
+ %
+ \path (vo2) ++(1.5,0) \coord(load);
+ \draw (load) to[C=$C_3$] ++(1,0) \coord(tmp) to[R=$R_L$] (tmp |- GND) node[ground]{};
+ \draw [densely dashed] (vo2) -- (load);
+ %
+ \draw [densely dashed] (vo1) -- (vi2);
+ %
+ \draw [blockdef](vi1|-VEE) ++(0,-2) \coord(tmp)
+ -- node[midway, fill=white]{bloque 1} (vo1|- tmp);
+ \draw [blockdef] (vi2|-VEE) ++(0,-2) \coord(tmp)
+ -- node[midway, fill=white]{bloque 2} (vo2|- tmp);
+
+\end{circuitikz}
+\end{lstlisting}
+
+\tikzset{blockdef/.style={%
+ {Straight Barb[harpoon, reversed, right, length=0.2cm]}-{Straight Barb[harpoon, reversed, left, length=0.2cm]},
+ blue, %densely dotted,
+}}
+\def\killdepth#1{{\raisebox{0pt}[\height][0pt]{#1}}}
+\def\coord(#1){coordinate(#1)}
+\def\coord(#1){node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\tiny, pin distance=0.1cm, pin edge={red, overlay,}]45:#1}](#1){}}
+\begin{circuitikz}[american, ]
+ \draw (0,0) node[nmos,](Q1){};
+ \draw (Q1.center) node[right]{\killdepth{Q1}};
+ \draw (Q1.S) to[R, l2^=$R_S$ and \SI{5}{k\ohm}] ++(0,-3) node[vee](VEE){$V_{EE}=\SI{-10}{V}$}; %define VEE level
+ \draw (Q1.S) to[short] ++(2,0) to[C=$C_1$] ++(0,-1.5) node[ground](GND){};
+ \draw (Q1.G) to[short] ++(-1,0) \coord (in) to[R, l2^=$R_G$ and \SI{1}{M\ohm}] (in |- GND) node[ground]{};
+ \draw (in) to[C, l_=$C_2$,*-o] ++(-1.5,0) node[left](vi1){$v_i=v_{i1}$};
+ \draw (Q1.D) to[R, l2_=$R_D$ and \SI{10}{k\ohm}] ++(0,3) node[vcc](VCC){$V_{CC}=\SI{10}{V}$};
+ \draw (Q1.D) to[short, -o] ++(1,0) node[right](vo1){$v_{o1}$};
+ %
+ \path (vo1) -- ++(3,0) \coord(bjt);
+ %
+ \draw (bjt) node[npn, ](Q2){};
+ \draw (Q2.center) node[right]{\killdepth{Q2}};
+ \draw (Q2.B) to[short, -o] ++(-0.5,0) node[left](vi2){$v_{12}$};
+ \draw (Q2.E) to[R,l2^=$R_E$ and \SI{9.3}{k\ohm}] (Q2.E |- VEE) node[vee]{};
+ \draw (Q2.E) to[short, -o] ++(1,0) node[right](vo2){$v_{o2}$};
+ \draw (Q2.C) to[short] (Q2.C |- VCC) node[vcc]{};
+ %
+ \path (vo2) ++(1.5,0) \coord(load);
+ \draw (load) to[C=$C_3$] ++(1,0) \coord(tmp) to[R=$R_L$] (tmp |- GND) node[ground]{};
+ \draw [densely dashed] (vo2) -- (load);
+ %
+ \draw [densely dashed] (vo1) -- (vi2);
+ %
+ \draw [blockdef](vi1|-VEE) ++(0,-2) \coord(tmp)
+ -- node[midway, fill=white]{bloque 1} (vo1|- tmp);
+ \draw [blockdef] (vi2|-VEE) ++(0,-2) \coord(tmp)
+ -- node[midway, fill=white]{bloque 2} (vo2|- tmp);
+
+\end{circuitikz}
+
+Finally, if you like a more compact drawing, you can add the options (for example):
+\begin{lstlisting}
+\begin{circuitikz}[american, scale=0.8] % this will scale only the coordinates
+ \ctikzset{resistors/scale=0.7, capacitors/scale=0.6}
+ ...
+\end{circuitikz}
+\end{lstlisting}
+
+and you will obtain the following diagram with the exact same code (I just removed the second \verb|\coord| definition to hide the coordinates markings).
+
+\ctikzset{resistors/scale=0.7, capacitors/scale=0.6}
+\def\coord(#1){coordinate(#1)}
+\begin{circuitikz}[american, scale=0.8]
+ \draw (0,0) node[nmos,](Q1){};
+ \draw (Q1.center) node[right]{\killdepth{Q1}};
+ \draw (Q1.S) to[R, l2^=$R_S$ and \SI{5}{k\ohm}] ++(0,-3) node[vee](VEE){$V_{EE}=\SI{-10}{V}$}; %define VEE level
+ \draw (Q1.S) to[short] ++(2,0) to[C=$C_1$] ++(0,-1.5) node[ground](GND){};
+ \draw (Q1.G) to[short] ++(-1,0) \coord (in) to[R, l2^=$R_G$ and \SI{1}{M\ohm}] (in |- GND) node[ground]{};
+ \draw (in) to[C, l_=$C_2$,*-o] ++(-1.5,0) node[left](vi1){$v_i=v_{i1}$};
+ \draw (Q1.D) to[R, l2_=$R_D$ and \SI{10}{k\ohm}] ++(0,3) node[vcc](VCC){$V_{CC}=\SI{10}{V}$};
+ \draw (Q1.D) to[short, -o] ++(1,0) node[right](vo1){$v_{o1}$};
+ %
+ \path (vo1) -- ++(3,0) \coord(bjt);
+ %
+ \draw (bjt) node[npn, ](Q2){};
+ \draw (Q2.center) node[right]{\killdepth{Q2}};
+ \draw (Q2.B) to[short, -o] ++(-0.5,0) node[left](vi2){$v_{12}$};
+ \draw (Q2.E) to[R,l2^=$R_E$ and \SI{9.3}{k\ohm}] (Q2.E |- VEE) node[vee]{};
+ \draw (Q2.E) to[short, -o] ++(1,0) node[right](vo2){$v_{o2}$};
+ \draw (Q2.C) to[short] (Q2.C |- VCC) node[vcc]{};
+ %
+ \path (vo2) ++(1.5,0) \coord(load);
+ \draw (load) to[C=$C_3$] ++(1,0) \coord(tmp) to[R=$R_L$] (tmp |- GND) node[ground]{};
+ \draw [densely dashed] (vo2) -- (load);
+ %
+ \draw [densely dashed] (vo1) -- (vi2);
+ %
+ \draw [blockdef](vi1|-VEE) ++(0,-2) \coord(tmp)
+ -- node[midway, fill=white]{bloque 1} (vo1|- tmp);
+ \draw [blockdef] (vi2|-VEE) ++(0,-2) \coord(tmp)
+ -- node[midway, fill=white]{bloque 2} (vo2|- tmp);
+
+\end{circuitikz}
+
+
+\endgroup
+
+
+
+\section{The components}
+
+
+Components in \Circuitikz{} come in two forms: path-style, to be used in \texttt{to} path specifications, and node-style, which will be instantiated by a \texttt{node} specification.
+
+\subsection{Path-style components}
+
+The path-style components are used as shown below:
+\begin{lstlisting}
+ \begin{circuitikz}
+ \draw (0,0) to[#1=#2, #options] (2,0);
+ \end{circuitikz}
+\end{lstlisting}
+where \verb|#1| is the name of the component, \verb|#2| is an (optional) label, and \verb|options| are optional labels, annotations, style specifier that will be explained in the rest of the manual.
+
+Transistors and some other node-style components can also be placed using the syntax for bipoles. See section~\ref{sec:transasbip}.
+
+Most path-style components can be used as a node-style components; to access them, you add a \texttt{shape} to the main name of component (for example, \texttt{diodeshape}). Such a ``node name'' is specified in the description of each component.
+
+\subsubsection{Anchors}
+
+Normally, path-style components do not need anchors, although they have them just in case you need them. You have the basic ``geographical'' anchors (bipoles are defined horizontally and then rotated as needed):
+\begin{center}
+ \begin{circuitikz}[
+ ]
+ \draw (0,0) to[resistor, name=R] ++(2,0);
+ \path (R.center) \showcoord(center)<-90:0.3>;
+ \path (R.left) \showcoord(left)<135:0.3>;
+ \path (R.right) \showcoord(right)<45:0.3>;
+ \draw (5,0) to[resistor, name=R] ++(2,0);
+ \foreach \n/\a/\d in {north/90/0.3, north east/45/0.3, east/0/0.5,
+ south east/-45/0.3, south/-90/0.3, south west/-135/0.3,
+ west/180/0.5, north west/135/0.3}
+ \path (R.\n) \showcoord(\n)<\a:\d>;
+ \draw (10,-1) to[resistor, name=R] ++(0,2);
+ \foreach \n/\a/\d in {n/135/0.3, e/45/0.3,
+ s/-45/0.3, w/-135/0.3}
+ \path (R.\n) \showcoord(\n)<\a:\d>;
+ \end{circuitikz}
+\end{center}
+In the case of bipoles, also shortened geographical anchors exists. In the description, it will be shown when a bipole has additional anchors. To use the anchors, just give a name to the bipole element.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[potentiometer, name=P, mirror] ++(0,2);
+ \draw (P.wiper) to[L] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Alternatively, that you can use the shape form, and then use the \texttt{left} and \texttt{right} anchors to do your connections.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) node[potentiometershape, rotate=-90](P){};
+ \draw (P.wiper) to[L] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Customization}
+\label{sec:components-size}
+
+
+Pretty much all Circui\TikZ\ relies heavily on \texttt{pgfkeys} for value handling and configuration. Indeed, at the beginning of \texttt{circuitikz.sty} and in the file \texttt{pfgcirc.define.tex} a series of key definitions can be found that modify all the graphical characteristics of the package.
+
+All can be varied using the \verb!\ctikzset! command, anywhere in the code.
+
+Note that the details of the parameters that are not described in the manual can change in the future, so be ready to use a fixed version of the package (the ones with the specific number, like \verb|circuitikz-0.9.3|) if you dig into them.
+
+\paragraph{Components size}\label{sec:pgfcircRlen}
+Perhaps the most important parameter is \texttt{bipoles/length} (default \SI{1.4}{cm}), which
+can be interpreted as the length of a resistor (including reasonable connections): all other lengths are relative to this value. For instance:
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\ctikzset{bipoles/length=1.4cm}
+\begin{circuitikz}[scale=1.2]\draw
+ (0,0) node[anchor=east] {B}
+ to[short, o-*] (1,0)
+ to[R=20<\ohm>, *-*] (1,2)
+ to[R=10<\ohm>, v=$v_x$] (3,2) -- (4,2)
+ to[cI=$\frac{\si{\siemens}}{5} v_x$, *-*] (4,0) -- (3,0)
+ to[R=5<\ohm>, *-*] (3,2)
+ (3,0) -- (1,0)
+ (1,2) to[short, -o] (0,2) node[anchor=east]{A}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\ctikzset{bipoles/length=.8cm}
+\begin{circuitikz}[scale=1.2]\draw
+ (0,0) node[anchor=east] {B}
+ to[short, o-*] (1,0)
+ to[R=20<\ohm>, *-*] (1,2)
+ to[R=10<\ohm>, v=$v_x$] (3,2) -- (4,2)
+ to[cI=$\frac{\siemens}{5} v_x$, *-*] (4,0) -- (3,0)
+ to[R=5<\ohm>, *-*] (3,2)
+ (3,0) -- (1,0)
+ (1,2) to[short, -o] (0,2) node[anchor=east]{A}
+;\end{circuitikz}
+\end{LTXexample}
+
+The changes on \texttt{bipoles/length} should, however, be globally applied to every path, because they affect every element --- including the poles. So you can have artifacts like these:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[
+ bigR/.style={R, bipoles/length=3cm}
+ ]
+ \draw (0,3) to [bigR, o-o] ++(4,0);
+ \draw (0,1.5) to [bigR, o-o] ++(4,0)
+ to[R, o-o] ++(2,0); % will fail here
+ \draw (0,0) to [R, o-o] ++(4,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Several groups of components, on the other hand, have a special \texttt{scale} parameter that can be used safely in this case (starting with 0.9.4 --- more groups of components will be added going forward); the key to use will be explained in the specific description of the components. For example, in the case of resistors you have \texttt{resistors/scale} available:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[
+ bigR/.style={R, resistors/scale=1.8}
+ ]
+ \draw (0,3) to [bigR, o-o] ++(4,0);
+ \draw (0,1.5) to [bigR, o-o] ++(4,0)
+ to[R, o-o] ++(2,0); % ok now
+ \draw (0,0) to [R, o-o] ++(4,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\paragraph{Thickness of the lines}\label{sec:legacy-thickness} (globally)
+
+The best way to alter the thickness of components is using styling, see section~\ref{sec:styling-thickness}. Alternatively, you can use ``legacy'' classes like \texttt{bipole}, \texttt{tripoles} and so on ---
+for example changing the parameter \texttt{bipoles/thickness} (default 2). The number is relative to the thickness of the normal lines leading to the component.
+
+\begin{LTXexample}[varwidth=true]
+ \ctikzset{bipoles/thickness=1}
+ \tikz \draw (0,0) to[C=1<\farad>] (2,0); \par
+ \ctikzset{bipoles/thickness=4}
+ \tikz \draw (0,0) to[C=1<\farad>] (2,0);
+\end{LTXexample}
+
+\paragraph{Shape of the components} (on a per-component-class basis)
+
+The shape of the components are adjustable with a lot of parameters; in this manual we will comment the main ones, but you can look into the source files specified above to find more.
+\begin{LTXexample}[varwidth=true]
+ \tikz \draw (0,0) to[R=1<\ohm>] (2,0); \par
+ \ctikzset{bipoles/resistor/height=.6}
+ \tikz \draw (0,0) to[R=1<\ohm>] (2,0);
+\end{LTXexample}
+
+It is recommended to use the styling parameters to change the shapes; they are not so fine grained (for example, you can change the width of resistor, not the height at the moment), but they are more stable and coherent across your circuit.
+
+\subsubsection{Descriptions}
+
+The typical entry in the component list will be like this:
+
+\begin{groupdesc}
+ \circuitdescbip{resistor}{resistor, american style}{R, american resistor}
+ \circuitdescbip[potentiometer]{pR}{potentiometer, american style}{pR, american potentiometer}( wiper/0/0.3 )
+\end{groupdesc}
+
+where you have all the needed information about the bipole, with also no-standard anchors. If the component can be filled it will be specified in the description. In addition, as an example, the component shown will be filled with the option \texttt{fill=cyan!30!white}:
+
+\begin{groupdesc}
+ \circuitdescbip*{ammeter}{Ammeter}{}
+\end{groupdesc}
+
+The \emph{Class} of the component (see section~\ref{sec:styling}) is printed at the end of the description.
+
+\subsection{Node-style components}
+Node-style components (monopoles, multipoles) can be drawn at a specified point with this syntax, where \verb!#1! is the name of the component:
+\begin{lstlisting}
+\begin{circuitikz}
+ \draw (0,0) node[#1,#2] (#3) {#4};
+\end{circuitikz}
+\end{lstlisting}
+\noindent
+Explanation of the parameters:\\
+\texttt{\#1}: component name\footnote{For using bipoles as nodes, the name of the node is \texttt{\#1shape}.} (mandatory)\\
+\texttt{\#2}: list of comma separated options (optional)\\
+\texttt{\#3}: name of an anchor (optional)\\
+\texttt{\#4}: text written to the text anchor of the component (optional)\\
+
+Most path-style components can be used as a node-style components; to access them, you add a \texttt{shape} to the main name of component (for example, \texttt{diodeshape}). Such a ``node name'' is specified in the description of each component.
+
+\begin{framed}
+ \noindent \textbf{Notice:} Nodes must have curly brackets at the end, even when empty. An optional anchor (\texttt{\#3}) can be defined within round brackets to be addressed again later on. And please don't forget the semicolon to terminate the \texttt{\textbackslash draw} command.
+\end{framed}
+
+\begin{framed}
+ \noindent\textbf{Also notice:} If using the \verb!\tikzexternalize! feature, as of Ti\emph{k}z 2.1 all pictures must end with \verb!\end{tikzpicture}!. Thus you \emph{cannot} use the \verb!circuitikz! environment.
+
+ \noindent Which is ok: just use the environment \verb!tikzpicture!: everything will work there just fine.
+\end{framed}
+
+\subsubsection{Mirroring and flipping}
+
+Mirroring and flipping of node components is obtained by using the \TikZ\ keys \texttt{xscale} and \texttt{yscale}. Notice that this parameters affect also text labels, so they need to be un-scaled by hand.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,3) node[op amp]{OA1};
+ \draw (3,3) node[op amp, xscale=-1]{OA2};
+ \draw (0,0) node[op amp]{OA3};
+ \draw (3,0) node[op amp, xscale=-1]{%
+ \scalebox{-1}[1]{OA4}};
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Anchors}
+
+Node components anchors are variable across the various kind of components, so they will described better after each category is presented in the manual.
+
+\subsubsection{Descriptions}
+
+The typical entry in the component list will be like this:
+\begin{groupdesc}
+ \circuitdesc{cute spdt down arrow}{Cute spdt down with arrow}{}
+ \circuitdesc{npn}{\scshape npn}{}( B/180/0.2,C/0/0.2,E/0/0.2 )
+\end{groupdesc}
+
+All the shapes defined by Circui\TikZ. These are all \texttt{pgf} nodes, so they are usable in both \texttt{pgf} and \TikZ.
+If the component can be filled it will be specified in the description. In addition, as an example, the component shown will be filled with the option \texttt{fill=cyan!30!white}:
+
+\begin{groupdesc}
+ \circuitdesc*{plain amp}{Plain amplifier}{}( out/45/0.3 )
+\end{groupdesc}
+
+Sometime, components will expose internal (sub-)shapes that can be accessed with the syntax \texttt{\textsl{<node name>}-\textsl{<internal node name>}} (a dash is separating the node name and the internal node name); that will be shown in the description as a blue ``anchor'':
+
+\begin{groupdesc}
+\circuitdesc{rotaryswitch}{Rotary switch}{}(in/-180/0.2, cin/145/0.2, center/-90/0.2, mid/0/0.4, out 1/0/0.2,
+cout 1/180/0.2)[out 1.n/90/0.2, out 4.w/0/0.3]
+\end{groupdesc}
+
+The \emph{Class} of the component (see section~\ref{sec:styling}) is printed at the end of the description.
+
+\subsection{Styling circuits and components}\label{sec:relative-size}\label{sec:styling}
+
+You can change the visual appearance of a circuit by using a circuit style different from the default. For styling the circuit, the concept of \emph{class} of a component is key: almost every component has a class, and a style change will affect all the components of that class.
+
+\begingroup % protect from style change the rest of the manual
+
+Let's see the effect over a simple circuit\footnote{This is a just an example, the circuit is not intended to be functional.}.
+
+\def\killdepth#1{{\raisebox{0pt}[\height][0pt]{#1}}}
+\newcommand\bjtname[1]{($(#1.C)!0.5!(#1.E)$) node[anchor=west]{\killdepth{#1}} }
+\begin{lstlisting}[basicstyle=\scriptsize\ttfamily]
+\def\killdepth#1{{\raisebox{0pt}[\height][0pt]{#1}}}
+\newcommand\bjtname[1]{($(#1.C)!0.5!(#1.E)$) node[anchor=west]{\killdepth{#1}} }
+\begin{circuitikz}[american, cute inductors]
+ \node [op amp](A1){\texttt{OA1}};
+ \draw (A1.-) to[short] ++(0,1) coordinate(tmp) to[R, l_=$R$] (tmp -| A1.out) to[short] (A1.out);
+ \draw (tmp) to[short] ++(0,1) coordinate(tmp) to[C=$C$] (tmp -| A1.out) to[short] (A1.out);
+ \draw (A1.+) to [battery2, invert] ++(0,-2.5) node[ground](GND){};
+ \draw (A1.-) to [L=$L$] ++(-2,0) coordinate(tmp) to[sV, l=$v_s$, fill=yellow] (tmp |-GND) node[ground]{};
+ \draw (A1.out) to[R=$R_s$] ++(2,0) coordinate(bb) to[I, l_=$I_B$, invert] ++(0,2) node[vcc](VCC){};
+ \draw (bb) to[D, l=$D$, *-] ++(0,-2) coordinate(bb1) to[R=$R_m$] ++(0,-2) node[vee](VEE){};
+ \draw (bb) --++(1,0) node[npn, anchor=B](Q1){} \bjtname{Q1};
+ \draw (bb1) --++(1,0) node[pnp, anchor=B](Q2){} \bjtname{Q2};
+ \draw (Q1.E) -- (Q2.E) ($(Q1.E)!0.5!(Q2.E)$) to [short, *-o, name=S] ++(2.5,0)
+ node[right]{$v_{o_Q}$};
+ \draw (S.s) to[european resistor, l=$Z_L$, *-] (S.s|-GND) node[ground]{};
+ \draw (Q1.C) -- (Q1.C|-VCC) node[vcc]{\SI{5}{V}};
+ \draw (Q2.C) -- (Q2.C|-VEE) node[vee]{\SI{-5}{V}};
+\end{circuitikz}
+\end{lstlisting}
+
+This code, with the default parameters, will render like the following image.
+
+\long\def\tmpcirc#1#2{% Define the circuit to reuse it
+% \begin{center}
+\begin{circuitikz}[american, cute inductors, #1]
+ #2
+ \node [op amp](A1){\texttt{OA1}};
+ \draw (A1.-) to[short] ++(0,1) coordinate(tmp) to[R, l_=$R$] (tmp -| A1.out) to[short] (A1.out);
+ \draw (tmp) to[short] ++(0,1) coordinate(tmp) to[C=$C$] (tmp -| A1.out) to[short] (A1.out);
+ \draw (A1.+) to [battery2, invert, l=$v_{io}$] ++(0,-2.5) node[ground](GND){};
+ \draw (A1.-) to [L=$L$] ++(-2,0) coordinate(tmp) to[sV, l=$v_s$, fill=yellow] (tmp |-GND) node[ground]{};
+ \draw (A1.out) to[R=$R_s$] ++(2,0) coordinate(bb) to[I, l_=$I_B$, invert] ++(0,2) node[vcc](VCC){};
+ \draw (bb) to[D, l=$D$, *-] ++(0,-2) coordinate(bb1) to[R=$R_m$] ++(0,-2) node[vee](VEE){};
+ \draw (bb) --++(1,0) node[npn, anchor=B](Q1){} \bjtname{Q1};
+ \draw (bb1) --++(1,0) node[pnp, anchor=B](Q2){} \bjtname{Q2};
+ \draw (Q1.E) -- (Q2.E) ($(Q1.E)!0.5!(Q2.E)$) to [short, *-o, name=S] ++(2.5,0)
+ node[right]{$v_{o_Q}$};
+ \draw (S.s) to[european resistor, l=$Z_L$, *-] (S.s|-GND) node[ground]{};
+ \draw (Q1.C) -- (Q1.C|-VCC) node[vcc]{\SI{5}{V}};
+ \draw (Q2.C) -- (Q2.C|-VEE) node[vee]{\SI{-5}{V}};
+\end{circuitikz}%
+% \end{center}
+}
+
+\tmpcirc{}{}
+
+\subsubsection{Relative size}\label{sec:styling-scale}
+
+Component size can be changed globally (see section~\ref{sec:pgfcircRlen}), or you can change their relative size by scaling a family of components by setting the key \texttt{\emph{class}/scale}; for example, you can change the size of all the diodes in your circuit by setting \texttt{diodes/scale} to something different from the default \texttt{1.0}.
+
+Remember that if you use a global scale (be sure to read section~\ref{sec:bugs}!) you change the coordinate only, so using \texttt{scale=0.8} in the environment options you have:
+
+\tmpcirc{scale=0.8}{}
+
+If you want to scale all the circuit, you have to use also \texttt{transform shape}:
+
+\tmpcirc{scale=0.8, transform shape}{}
+
+Using relative sizes as described in section~\ref{sec:pgfcircRlen} enables your style for the circuit. For example, setting:
+
+\begin{lstlisting}
+ \ctikzset{resistors/scale=0.8, % smaller R
+ capacitors/scale=0.7, % even smaller C
+ diodes/scale=0.6, % small diodes
+ transistors/scale=1.3} % bigger BJTs
+\end{lstlisting}
+
+Will result in a (much more readable in Romano's opinion) circuit:
+
+\tmpcirc{scale=0.8, transform shape}{\ctikzset{resistors/scale=0.8, capacitors/scale=0.7, diodes/scale=0.6, transistors/scale=1.3}}
+
+\textbf{Warning:} relative scaling is meant to work for a reasonable range of stretching and shortening, so try to keep your scale parameter in the \texttt{0.5} to~\texttt{2.0} range (more or less). Bigger or smaller value can result in awkward shapes.
+
+\subsubsection{Fill color}\label{sec:styling-fillcolor}
+
+You can also set a default fill color for the components. You can use the keys \texttt{\emph{class}/fill} (which defaults to \texttt{none}, no fill, i.e. transparent component) for all fillable components in the library.
+
+If you add to the previous styles the following commands:
+
+\begin{lstlisting}
+\ctikzset{
+ amplifiers/fill=cyan,
+ sources/fill=green,
+ diodes/fill=red,
+ resistors/fill=violet,
+}
+\end{lstlisting}
+
+you will have the following circuit (note that the first generator is \emph{explicitly} set to be yellow,
+so if will not be colored green!):
+
+\tmpcirc{scale=0.8, transform shape}{\ctikzset{resistors/scale=0.8, capacitors/scale=0.7, diodes/scale=0.6, transistors/scale=1.3,%
+ amplifiers/fill=cyan, sources/fill=green, diodes/fill=red, resistors/fill=violet,}}
+
+Please use this option with caution. Although two-color circuits can be nice, using more than that can become rapidly unbearable.
+Old textbooks used the two-color style quite extensively, filling with a kind of light blue like \texttt{blue!30!white} ``closed'' components, but that was largely to hinder black-and-white photocopying\dots
+
+\subsubsection{Line thickness}\label{sec:styling-thickness}
+
+You can change the line thickness for any class of component in an independent way. The default standard thickness of components is defined on a loose ``legacy'' category (like \texttt{bipoles}, \texttt{tripoles} and so on, see section~\ref{sec:legacy-thickness}); to override that you set the key \texttt{\emph{class}/thickness} to any number. The default is \texttt{none}, which means that the old way of selecting thickness is used.
+
+For example, \emph{amplifiers} have the legacy class of \texttt{tripoles}, as well as transistors and tubes.By default they are drawn with thickness 2 (relative to the base linewidth). To change them to be thicker, you can for example add to the previous style
+
+\begin{lstlisting}
+ \ctikzset{amplifier/thickness=4}
+\end{lstlisting}
+
+\tmpcirc{scale=0.8, transform shape}{\ctikzset{resistors/scale=0.8, capacitors/scale=0.7, diodes/scale=0.6, transistors/scale=1.3,%
+ amplifiers/fill=cyan, sources/fill=green, diodes/fill=red, resistors/fill=violet,
+ amplifiers/thickness=4}}
+
+\textbf{Caveat:} not every component has a ``class'', so you have to play with the available ones (it's specified in the component description) and with the absolute values to have the circuit following your taste. A bit of experimentation will create a kind of \emph{style options} that you could use in all your documents.
+
+\subsubsection{Style files}
+
+When using styles, it is possible to use \emph{style files} (see section~\ref{sec:writingstylefiles}), that then you can load with the command \verb|\ctikzloadstyle|. For example, in the distribution you have a number of style files: \texttt{legacy}, \texttt{romano}, \texttt{example}.When you load a style name \texttt{\emph{name}}, you will have available a style called \texttt{\emph{name} circuit style} that you can apply to your circuits.
+The last style loaded is not enacted --- you have to explicitly do it if you want the style used by default, by putting for example in the preamble:
+
+\begin{lstlisting}
+ \ctikzloadstyle{romano}
+ \tikzset{romano circuit style}
+\end{lstlisting}
+
+Please notice that the style is at \TikZ{} level, not \Circuitikz --- that let's you use it in the top option of the circuit, like:
+
+\begin{lstlisting}
+ \begin{circuitikz}[legacy circuit style,
+ ..., ]
+ ...
+ \end{circuitikz}
+\end{lstlisting}
+
+
+The \texttt{example} style file will simply make the amplifiers filled with light blue:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) node[op amp]{OA1};
+\end{circuitikz}
+\ctikzloadstyle{example}
+\begin{circuitikz}[example circuit style]
+ \draw (0,0) node[op amp]{OA1};
+\end{circuitikz}
+\end{LTXexample}
+\ctikzloadstyle{legacy}
+\ctikzloadstyle{romano}
+
+The styles \texttt{legacy} is a style that set (most) of the style parameters to the default, and \texttt{romano} is a style used by one of the authors; you can use these styles as is or you can use them to learn to how to write new file style following the instructions in section~\ref{sec:writingstylefiles}. In the next diagrams, the left hand one is using the \texttt{romano circuit style} and the rigth hand one the legacy style.
+
+\fbox{\tmpcirc{scale=0.6, transform shape, romano circuit style}{}}
+\fbox{\tmpcirc{scale=0.6, transform shape, legacy circuit style}{}}
+
+\endgroup % restore state before example of sizing
+
+\subsubsection{Style files: how to write them}\label{sec:writingstylefiles}
+
+The best option is to start from \texttt{ctikzstyle-legacy.tex} and edit your style file from it. Then you just put it in your input path and that's all. If you want, you can contribute your style file to the project.
+
+Basically, to write the style \texttt{example}, you edit a file named \texttt{ctikzstyle-romano.tex} with will define and enact Ti\emph{k}Z style with name \texttt{example circuit style}; basically it has to be something along this:
+
+\lstinputlisting[frame=single, framesep=10pt, basicstyle=\small\ttfamily]{ctikzstyle-example.tex}
+
+This kind of style will \emph{add} to the existing style. If you want to have a style that \emph{substitute} the current style, you should do like this:
+
+\begin{lstlisting}[frame=single, framesep=10pt, basicstyle=\small\ttfamily]
+\ctikzloadstyle{legacy}% start from a know state
+\tikzset{romano circuit style/.style={%
+legacy circuit style, % load the legacy style
+\circuitikzbasekey/.cd,%
+% Resistors
+resistors/scale=0.8,
+[...]
+\end{lstlisting}
+
+
+\subsection{Grounds and supply voltages}
+
+\subsubsection{Grounds}
+
+For the grounds, the \texttt{center} anchor is put on the connecting point of the symbol, so that you can use them directly in a \texttt{path} specification.
+
+\begin{groupdesc}
+ \circuitdesc{ground}{Ground}{}( center/0/0.3 )
+ \circuitdesc{tlground}{Tailless ground}{}( center/0/0.3 )
+ \circuitdesc{rground}{Reference ground}{}
+ \circuitdesc*{sground}{Signal ground}{}
+ \circuitdesc{tground}{Thicker tailless reference ground}{}
+ \circuitdesc{nground}{Noiseless ground}{}
+ \circuitdesc*{pground}{Protective ground}{}
+ \circuitdesc{cground}{Chassis ground\footnotemark}{}
+ \footnotetext{These last three were contributed by Luigi «Liverpool»}
+ \circuitdesc{eground}{European style ground}{}
+ \circuitdesc{eground2}{European style ground, version 2\footnotemark}{}
+ \footnotetext{These last two were contributed by \texttt{@fotesan}}
+\end{groupdesc}
+
+\paragraph{Grounds anchors}
+
+Anchors for grounds are a bit strange, given that they have the \texttt{center} spot at the same location than \texttt{north} and all the ground will develop ``going down'':
+
+\showanchors[baseline]{ground, scale=1.5}{}(north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4)
+\showanchors[baseline]{ground, scale=1.5}{}(left/135/0.2, right/45/0.2, center/-180/0.2)
+
+\paragraph{Grounds customization}
+
+You can change the scale of these components (all the ground symbols together) by setting the key \texttt{grounds/scale} (default \texttt{1.0}).
+
+\subsubsection{Power supplies}
+
+\begin{groupdesc}
+ \circuitdesc{vcc}{VCC/VDD}{}
+ \circuitdesc{vee}{VEE/VSS}{}
+\end{groupdesc}
+
+The power supplies are normally drawn with the arrows shown in the list above.
+
+\paragraph{Power supply anchors}
+
+They are similar to grounds anchors, and the geographical anchors are correct only for the default arrow.
+
+\showanchors[baseline]{vcc, scale=1.5}{}(north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4)
+\showanchors[baseline]{vcc, scale=1.5}{}(left/135/0.2, right/45/0.2, center/-180/0.2)
+
+
+\paragraph{Power supplies customization}
+
+You can change the scale of the power supplies by setting the key \texttt{power supplies/scale} (default \texttt{1.0}).
+
+Given that the power supply symbols are basically arrows, you can change them using all the options of the \texttt{arrows.meta} package (see the Ti\emph{k}Z manual for details) by changing the keys \texttt{monopoles/vcc/arrow} and \texttt{monopoles/vee/arrow} (the default for both is \texttt{legacy}, which will use the old code for drawing them).
+Note that the anchors are at the start of the connecting lines, and that geographical anchors are just approximation if you change the arrow symbol!
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \def\coord(#1){\showcoord(#1)<0:0.3>}
+ \draw (0,0)
+ node[vcc](vcc){VCC} \coord(vcc) ++(2,0)
+ node[vee](vee){VEE} \coord(vee);
+ \ctikzset{monopoles/vcc/arrow={Stealth[red, width=6pt, length=9pt]}}
+ \ctikzset{monopoles/vee/arrow={Latex[blue]}}
+ \draw (0,-2)
+ node[vcc](vcc){VCC} \coord(vcc) ++(2,0)
+ node[vee](vee){VEE} \coord(vee);
+\end{circuitikz}
+\end{LTXexample}
+
+However, arrows in \TikZ{} are in the same class with the line thickness, so they do not scale with neither the class \texttt{power supplies} scale nor the global scale parameter (you should use \texttt{transform canvas={scale\dots}} for this).
+
+If you want that the arrows behave like the legacy symbols (which are shapes), \emph{only in the arrow definitions}, you can use the special length parameter \verb|\scaledwidth|\footnote{Thanks to @Schrödinger's cat on \href{https://tex.stackexchange.com/a/506249/38080}{\TeX{} stackexchange site}} in the arrow definition, which correspond to the width of the legacy \texttt{vcc} or \texttt{vee}. Compare the effects on the following circuit.
+
+\begin{LTXexample}[pos=t, basicstyle=\small\ttfamily]
+\ctikzset{%
+ monopoles/vcc/arrow={Triangle[width=0.8*\scaledwidth, length=\scaledwidth]},
+ monopoles/vee/arrow={Triangle[width=6pt, length=8pt]},
+}
+\begin{circuitikz}[baseline=(vo.center)]
+ \node [ocirc](TW) at (0,0) {};
+ \draw (TW.east) -- ++(1,0) node[midway, above]{$v_i$} node[op amp, anchor=-](A1){};
+ \draw (A1.up) -- ++(0, 0.3) node[vcc]{\SI{+10}{V}};
+ \draw (A1.down) -- ++(0,-0.3) node[vee]{\SI{-10}{V}};
+ \draw (A1.+) -- ++(-0.5,0) to[battery2, invert, l_=\SI{2}{V}] ++(0,-1) node[ground]{};
+ \draw (A1.out) to[short, -o] ++(0.5,0) node[above](vo){$v_o$};
+\end{circuitikz} \qquad
+\begin{circuitikz}[baseline=(vo.center), scale=0.6, transform shape]
+ \node [ocirc](TW) at (0,0) {};
+ \draw (TW.east) -- ++(1,0) node[midway, above]{$v_i$} node[op amp, anchor=-](A1){};
+ \draw (A1.up) -- ++(0, 0.3) node[vcc]{\SI{+10}{V}};
+ \draw (A1.down) -- ++(0,-0.3) node[vee]{\SI{-10}{V}};
+ \draw (A1.+) -- ++(-0.5,0) to[battery2, invert, l_=\SI{2}{V}] ++(0,-1) node[ground]{};
+ \draw (A1.out) to[short, -o] ++(0.5,0) node[above](vo){$v_o$};
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Resistive bipoles}
+
+\begin{groupdesc}
+ \circuitdescbip{short}{Short circuit}{}
+ \circuitdescbip{open}{Open circuit}{}
+ \circuitdescbip*{generic}{Generic (symmetric) bipole}{}
+ \circuitdescbip*{tgeneric}{Tunable generic bipole}{}
+ \circuitdescbip*{ageneric}{Generic asymmetric bipole}{}
+ \circuitdescbip*{memristor}{Memristor}{Mr}
+\end{groupdesc}
+
+If \texttt{americanresistors} option is active (or the style \texttt{[american resistors]} is used; this is the default for the package), the resistors are displayed as follows:
+\begin{groupdesc}
+ \ctikzset{resistor=american}
+ \circuitdescbip[resistor]{R}{Resistor}{american resistor}
+ \circuitdescbip[vresistor]{vR}{Variable resistor}{variable american resistor}
+ \circuitdescbip[potentiometer]{pR}{Potentiometer}{american potentiometer}( wiper/0/0.3 )
+ \circuitdescbip[resistivesens]{sR}{Resisitive sensor}{american resisitive sensor}( label/0/0.3 )
+\end{groupdesc}
+
+If instead \texttt{europeanresistors} option is active (or the style \texttt{[european resistors]} is used), the resistors, variable resistors and potentiometers are displayed as follows:
+\begin{groupdesc}
+ \ctikzset{resistor=european}
+ \circuitdescbip*[generic]{R}{Resistor}{european resistor}
+ \circuitdescbip*[tgeneric]{vR}{Variable resistor}{variable european resistor}
+ \circuitdescbip*[genericpotentiometer]{pR}{Potentiometer}{european potentiometer}( wiper/0/0.3 )
+ \circuitdescbip*[thermistor]{sR}{Resistive sensor}{european resistive sensor}( label/0/0.3 )
+ \ctikzset{resistor=american} % reset default
+\end{groupdesc}
+
+Other miscellaneous resistor-like devices:
+\begin{groupdesc}
+ \circuitdescbip*{varistor}{Varistor}{}
+ \circuitdescbip*[photoresistor]{phR}{Photoresistor}{photoresistor}
+ \circuitdescbip*[thermistor]{thR}{Thermistor}{thermistor}
+ \circuitdescbip*[thermistorptc]{thRp}{PTC thermistor}{thermistor ptc}
+ \circuitdescbip*[thermistorntc]{thRn}{NTC thermistor}{thermistor ntc}
+\end{groupdesc}
+
+\subsubsection{Generic sensors anchors}\label{sec:sensors-anchors}
+Generic sensors have an extra anchor named \texttt{label} to help position the type of dependence, if needed:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,2) to[sR, l=$R$, name=mySR] ++(3,0);
+ \node [font=\tiny, right] at(mySR.label) {-t\si{\degree}};
+ \draw (0,0) to[sL, l=$L$, name=mySL] ++(3,0);
+ \node [draw, circle, inner sep=2pt] at(mySL.label) {};
+ \draw (0,-2) to[sC, l=$C$, name=mySC] ++(3,0);
+ \node [font=\tiny, below right, inner sep=0pt] at(mySC.label) {+H\si{\%}};
+\end{circuitikz}
+\end{LTXexample}
+
+The anchor is positioned just on the corner of the segmented line crossing the component.
+
+\subsubsection{Resistive components customization}
+
+You can change the scale of these components (all the resistive bipoles together) by setting the key \texttt{resistors/scale} (default \texttt{1.0}). Similarly, you can change the widths by setting \texttt{resistors/width} (default \texttt{0.8}).
+
+You can change the width of these components (all the resistive bipoles together) by setting the key \texttt{resistors/width} to something different from the default \texttt{0.8}.
+
+For the american style resistors, you can change the number of ``zig-zags'' by setting the key
+\texttt{resistors/zigs} (default value \texttt{3}).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[
+ longpot/.style = {pR, resistors/scale=0.75,
+ resistors/width=1.6, resistors/zigs=6}]
+ \draw (0,1.5) to[R, l=$R$] ++(4,0);
+ \draw (0,0) to[longpot, l=$P$] ++(4,0);
+ \ctikzset{resistors/scale=1.5}
+ \draw (0,-1.5) to[R, l=$R$] ++(4,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Capacitors and inductors: dynamical bipoles}
+
+\subsubsection{Capacitors}
+
+\begin{groupdesc}
+ \circuitdescbip{capacitor}{Capacitor}{C}
+ \circuitdescbip[pcapacitor]{polar capacitor}{Polar capacitor}{pC}
+ \circuitdescbip*{ecapacitor}{Electrolytic capacitor}{eC,elko}
+ \circuitdescbip[vcapacitor]{variable capacitor}{Variable capacitor}{vC}
+ \circuitdescbip[capacitivesens]{capacitive sensor}{Capacitive sensor}{sC}(label/0/0.3)
+ \circuitdescbip*{piezoelectric}{Piezoelectric Element}{PZ}
+\end{groupdesc}
+
+\subsubsection{Capacitive sensors anchors}
+
+For capacitive sensors, see section~\ref{sec:sensors-anchors}.
+
+\subsubsection{Capacitors customizations}
+
+You can change the scale of the capacitors by setting the key \texttt{capacitors/scale} to something different from the default \texttt{1.0}.
+
+\subsubsection{Inductors}
+
+If the \texttt{cuteinductors} option is active (default behaviour), or the style \texttt{[cute inductors]} is used, the inductors are displayed as follows:
+\begin{groupdesc}
+ \ctikzset{inductor=cute}
+ \circuitdescbip[cuteinductor]{L}{Inductor}{cute inductor}
+ \circuitdescbip[cutechoke]{cute choke}{Choke}{}
+ \circuitdescbip[vcuteinductor]{vL}{Variable inductor}{variable cute inductor}
+ \circuitdescbip[scuteinductor]{sL}{Inductive sensor}{cute inductive sensor}( label/0/0.3 )
+\end{groupdesc}
+
+If the \texttt{americaninductors} option is active (or the style \texttt{[american inductors]} is used), the inductors are displayed as follows:
+\begin{groupdesc}
+ \ctikzset{inductor=american}
+ \circuitdescbip[americaninductor]{L}{Inductor}{american inductor}
+ \circuitdescbip[vamericaninductor]{vL}{Variable inductor}{variable american inductor}
+ \circuitdescbip[samericaninductor]{sL}{Inductive sensor}{american inductive sensor}( label/0/0.3 )
+\end{groupdesc}
+
+Finally, if the \texttt{europeaninductors} option is active (or the style \texttt{[european inductors]} is used), the inductors are displayed as follows:
+\begin{groupdesc}
+ \ctikzset{inductor=european}
+ \circuitdescbip[fullgeneric]{L}{Inductor}{european inductor}
+ \circuitdescbip[tfullgeneric]{vL}{Variable inductor}{variable european inductor}
+ \circuitdescbip[sfullgeneric]{sL}{Inductive sensor}{european inductive sensor}( label/0/0.3 )
+ \ctikzset{inductor=cute} % back to default
+\end{groupdesc}
+
+\subsubsection{Inductive sensors anchors}
+
+For inductive sensors, see section~\ref{sec:sensors-anchors}.
+
+\subsubsection{Inductors customizations}\label{sec:tweak-l}
+
+You can change the scale of the inductors by setting the key \texttt{inductors/scale} to something different from the default \texttt{1.0}.
+
+You can change the width of these components (all the inductors together, unless you use style or scoping) by setting the key \texttt{inductors/width} to something different from the default, which is \texttt{0.8} for american and european inductors, and \texttt{0.6} for cute inductors.
+
+Moreover, you can change the number of ``coils'' drawn by setting the key
+\texttt{inductors/coils} (default value \texttt{5} for cute inductors and \texttt{4} for american ones).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[
+ longL/.style = {cute choke, inductors/scale=0.75,
+ inductors/width=1.6, inductors/coils=9}]
+ \draw (0,1.5) to[L, l=$L$] ++(4,0);
+ \draw (0,0) to[longL, l=$L$] ++(4,0);
+ \ctikzset{inductors/scale=1.5, inductor=american}
+ \draw (0,-1.5) to[L, l=$L$] ++(4,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Chokes (which comes only in the \texttt{cute} style) can have single and double lines, and can have the line thickness adjust (the value is relative to the thickness of the inductor).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[cute choke] ++(3,0);
+ \draw (0,-1) to[cute choke, twolineschoke] ++(3,0);
+
+ \ctikzset{bipoles/cutechoke/cthick=2, twolineschoke}
+
+ \draw (0,-2) to[cute choke] ++(3,0);
+ \draw (0,-3) to[cute choke, onelinechoke] ++(3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Diodes and such}
+
+There are three basic styles for diodes: \texttt{empty} (fillable in color), \texttt{full} (completely filled with the draw color) and \texttt{stroke} (empty, but with a line across them).
+
+You can switch between the styles setting the key \texttt{diode} (for example \verb|\ctikzset{diode=full}| or \texttt{empty} or \texttt{stroke}, or with the styles \texttt{full diodes}, \texttt{empty diodes} and \texttt{stroke diodes}.
+
+
+To use the default element, simply use the name shown for the empty diodes without the final ``o'' --- that is \texttt{D}, \texttt{sD}, and so on. The names shown in the following tables will draw the specified diode independently on the style chosen (that is, \texttt{leD*} is always a full LED diode).
+
+\begin{framed}
+The package options \texttt{fulldiode}, \texttt{strokediode}, and \texttt{emptydiode} (and the styles \texttt{[full diodes]}, \texttt{[stroke diodes]}, and \texttt{[empty diodes]}) define which shape will be used by abbreviated commands such that \texttt{D}, \texttt{sD}, \texttt{zD}, \texttt{zzD}, \texttt{tD}, \texttt{pD}, \texttt{leD}, \texttt{VC}, \texttt{Ty},\texttt{Tr} (no stroke symbol available!).
+\end{framed}
+
+\begin{groupdesc}
+ \circuitdescbip*[emptydiode] {empty diode}{Empty diode}{Do}
+ \circuitdescbip*[emptysdiode]{empty Schottky diode}{Empty Schottky diode}{sDo}
+ \circuitdescbip*[emptyzdiode]{empty Zener diode}{Empty Zener diode}{zDo}
+ \circuitdescbip*[emptyzzdiode]{empty ZZener diode}{Empty ZZener diode}{zzDo}
+ \circuitdescbip*[emptytdiode]{empty tunnel diode}{Empty tunnel diode}{tDo}
+ \circuitdescbip*[emptypdiode]{empty photodiode}{Empty photodiode}{pDo}
+ \circuitdescbip*[emptylediode]{empty led}{Empty led}{leDo}
+ \circuitdescbip*[emptyvarcap]{empty varcap}{Empty varcap}{VCo}
+ \circuitdescbip*[emptybidirectionaldiode]{empty bidirectionaldiode}{Empty bidirectionaldiode}{biDo}
+ \circuitdescbip[fulldiode] {full diode}{Full diode}{D*}
+ \circuitdescbip[fullsdiode]{full Schottky diode}{Full Schottky diode}{sD*}
+ \circuitdescbip[fullzdiode]{full Zener diode}{Full Zener diode}{zD*}
+ \circuitdescbip[fullzzdiode]{full ZZener diode}{Full ZZener diode}{zzD*}
+ \circuitdescbip[fulltdiode]{full tunnel diode}{Full tunnel diode}{tD*}
+ \circuitdescbip[fullpdiode]{full photodiode}{Full photodiode}{pD*}
+ \circuitdescbip[fulllediode]{full led}{Full led}{leD*}
+ \circuitdescbip[fullvarcap]{full varcap}{Full varcap}{VC*}
+ \circuitdescbip[fullbidirectionaldiode]{full bidirectionaldiode}{Full bidirectionaldiode}{biD*}
+\end{groupdesc}
+
+These shapes have no exact node-style counterpart, because the stroke line is built upon the empty variants:
+
+\begin{groupdesc}
+ \circuitdescbip*[emptydiode] {stroke diode}{Stroke diode}{D-}
+ \circuitdescbip*[emptysdiode]{stroke Schottky diode}{Stroke Schottky diode}{sD-}
+ \circuitdescbip*[emptyzdiode]{stroke Zener diode}{Stroke Zener diode}{zD-}
+ \circuitdescbip*[emptyzzdiode]{stroke ZZener diode}{Stroke ZZener diode}{zzD-}
+ \circuitdescbip*[emptytdiode]{stroke tunnel diode}{Stroke tunnel diode}{tD-}
+ \circuitdescbip*[emptypdiode]{stroke photodiode}{Stroke photodiode}{pD-}
+ \circuitdescbip*[emptylediode]{stroke led}{Stroke led}{leD-}
+ \circuitdescbip*[emptyvarcap]{stroke varcap}{Stroke varcap}{VC-}
+\end{groupdesc}
+
+\subsubsection{Tripole-like diodes}\label{sec:othertrip} The following tripoles are entered with the usual command, of the form \texttt{to[Tr, \dots]}.
+
+
+\begin{groupdesc}
+ \circuitdescbip*[emptytriac]{triac}{Standard triac (shape depends on package option)}{Tr}( G/0/0.3, anode/-90/0.2, cathode/-90/0.2)
+ \circuitdescbip*[emptytriac]{empty triac}{Empty triac}{Tro}( gate/0/0.3 )
+ \circuitdescbip[fulltriac]{full triac}{Full triac}{Tr*}
+ \circuitdescbip*[emptythyristor]{thyristor}{Standard thyristor (shape depends on package option)}{Ty}( G/0/0.3, anode/-90/0.2, cathode/-90/0.2)
+ \circuitdescbip*[emptythyristor]{empty thyristor}{Empty thyristor}{Tyo}
+ \circuitdescbip[fullthyristor]{full thyristor}{Full thyristor}{Ty*}
+ \circuitdescbip*[emptythyristor]{stroke thyristor}{Stroke thyristor}{Ty-}
+\end{groupdesc}
+
+\subsubsection{Triacs anchors}
+
+When inserting a thrystor, a triac or a potentiometer, one needs to refer to the third node-gate (\texttt{gate} or \texttt{G}) for the former two; wiper (\texttt{wiper} or \texttt{W}) for the latter one. This is done by giving a name to the bipole:
+\label{bipole-naming}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) to[Tr, n=TRI] (2,0)
+ to[pR, n=POT] (4,0);
+ \draw[dashed] (TRI.G) -| (POT.wiper)
+;\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Diode customizations}\label{sec:tweak-d}
+
+You can change the scale of the diodes by setting the key \texttt{diodes/scale} to something different from the default \texttt{1.0}. In Romano's opinion, diodes are somewhat big with the default style of the package, so a setting like \verb|\ctikzset{diode/scale=0.6}| is recommended.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,1) to[D, l=$D$] ++(2,0)
+ node[npn, anchor=B]{};
+ \ctikzset{diodes/scale=0.6}
+ \draw (0,-1) to[D, l=$D$] ++(2,0)
+ node[npn, anchor=B]{};
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Sources and generators}
+
+Notice that source and generators are divided in three classes that can be styled independently: traditional battery symbols (class \texttt{batteries}), independent generators (class \texttt{sources}) and dependent generators (class \texttt{csources}). This is because they are often treated differently, and so you can choose to, for example, fill the dependent sources but not the independent ones.
+
+\subsubsection{Batteries}
+\begin{groupdesc}
+ \circuitdescbip{battery}{Battery}{}
+ \circuitdescbip{battery1}{Single battery cell}{}
+ \circuitdescbip{battery2}{Single battery cell}{}
+\end{groupdesc}
+
+\subsubsection{Stationary sources}
+\begin{groupdesc}
+ \circuitdescbip*[vsource]{european voltage source}{Voltage source (european style)}{}
+ \circuitdescbip*[vsourceC]{cute european voltage source}{Voltage source (cute european style)}{vsourceC, ceV}
+ \circuitdescbip*[vsourceAM]{american voltage source}{Voltage source (american style)}{}
+ \circuitdescbip*[isource]{european current source}{Current source (european style)}{}
+ \circuitdescbip*[isourceC]{cute european current source}{Current source (cute european style)}{isourceC, ceI}
+ \circuitdescbip*[isourceAM]{american current source}{Current source (american style)}{}
+\end{groupdesc}
+
+\begin{framed}
+If (default behaviour) \texttt{europeancurrents} option is active (or the style \texttt{[european currents]} is used), the shorthands \texttt{current source}, \texttt{isource}, and \texttt{I} are equivalent to \texttt{european current source}. Otherwise, if \texttt{americancurrents} option is active (or the style \texttt{[american currents]} is used) they are equivalent to \texttt{american current source}.
+
+Similarly, if (default behaviour) \texttt{europeanvoltages} option is active (or the style \texttt{[european voltages]} is used), the shorthands \texttt{voltage source}, \texttt{vsource}, and \texttt{V} are equivalent to \texttt{european voltage source}. Otherwise, if \texttt{americanvoltages} option is active (or the style \texttt{[american voltages]} is used) they are equivalent to \texttt{american voltage source}.
+\end{framed}
+
+
+\subsubsection{Sinusoidal sources}\label{sec:sinusoidal-vi} These two are basically the same symbol; to distinguish among them, you have to add a label, which will be a voltage or a current.
+
+\begin{groupdesc}
+ \circuitdescbip*[vsourcesin]{sinusoidal voltage source}{Sinusoidal voltage source}{vsourcesin, sV}
+ \circuitdescbip*[isourcesin]{sinusoidal current source}{Sinusoidal current source}{isourcesin, sI}
+\end{groupdesc}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,1) to[sV=$V$] ++(3,0);
+ \draw (0,0) to[sI=$I$] ++(3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Controlled sources}
+\begin{groupdesc}
+ \circuitdescbip*[cvsource]{european controlled voltage source}{Controlled voltage source (european style)}{}
+ \circuitdescbip*[cvsourceC]{cute european controlled voltage source}{Voltage source (cute european style)}{cvsourceC, cceV}
+ \circuitdescbip*[cvsourceAM]{american controlled voltage source}{Controlled voltage source (american style)}{}
+ \circuitdescbip*[cisource]{european controlled current source}{Controlled current source (european style)}{}
+ \circuitdescbip*[cisourceC]{cute european controlled current source}{Current source (cute european style)}{cisourceC, cceI}
+ \circuitdescbip*[cisourceAM]{american controlled current source}{Controlled current source (american style)}{}
+ \circuitdescbip*[ecsource]{empty controlled source}{Empty controlled source}{ecsource}
+\end{groupdesc}
+
+\begin{framed}
+If (default behaviour) \texttt{europeancurrents} option is active (or the style \texttt{[european currents]} is used), the shorthands \texttt{controlled current source}, \texttt{cisource}, and \texttt{cI} are equivalent to \texttt{european controlled current source}. Otherwise, if \texttt{americancurrents} option is active (or the style \texttt{[american currents]} is used) they are equivalent to \texttt{american controlled current source}.
+
+Similarly, if (default behaviour) \texttt{europeanvoltages} option is active (or the style \texttt{[european voltages]} is used), the shorthands \texttt{controlled voltage source}, \texttt{cvsource}, and \texttt{cV} are equivalent to \texttt{european controlled voltage source}. Otherwise, if \texttt{americanvoltages} option is active (or the style \texttt{[american voltages]} is used) they are equivalent to \texttt{american controlled voltage source}.
+\end{framed}
+
+The following two behave like the corresponding independent sources, see section~\ref{sec:sinusoidal-vi}.
+
+\begin{groupdesc}
+ \circuitdescbip*[cvsourcesin]{controlled sinusoidal voltage source}{Controlled sinusoidal voltage source}{controlled vsourcesin, cvsourcesin, csV}
+ \circuitdescbip*[cisourcesin]{controlled sinusoidal current source}{Controlled sinusoidal current source}{controlled isourcesin, cisourcesin, csI}
+\end{groupdesc}
+
+
+
+\subsubsection{Noise sources}
+
+In this case, the ``direction'' of the source is undefined. Noise sources are filled in gray by default, but if you choose the dashed style, they become fillable.
+
+\begin{groupdesc}
+ \circuitdescbip[vsourceN]{noise voltage source}{Sinusoidal voltage source}{vsourceN, nV}
+ \circuitdescbip[isourceN]{noise current source}{Sinusoidal current source}{isourceN, nI}
+\end{groupdesc}
+
+You can change the fill color with the key \texttt{circuitikz/bipoles/noise sources/fillcolor}:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw(0,0) to [nV, l=$e_n$] ++(2,0);
+ \draw(0,-2) to [nI, l=$i_n$] ++(2,0);
+ \begin{scope}[circuitikz/bipoles/noise sources/fillcolor=red!50]
+ \draw(3,0) to [nV, l=$e_n$] ++(2,0);
+ \draw(3,-2) to [nI, l=$i_n$] ++(2,0);
+ \end{scope}
+\end{circuitikz}
+\end{LTXexample}
+
+If you prefer a patterned noise generator (similar to the one you draw by hand) you can use the fake color \texttt{dashed}:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw(0,0) to [nV, l=$e_n$] ++(2,0);
+ \draw(0,-2) to [nI, l=$i_n$] ++(2,0);
+ \begin{scope}[circuitikz/bipoles/noise sources/fillcolor=dashed]
+ \draw(3,0) to [nV, l=$e_n$] ++(2,0);
+ \draw(3,-2) to [nI, l=$i_n$] ++(2,0);
+ \end{scope}
+\end{circuitikz}
+\end{LTXexample}
+
+Notice that if you choose the dashed style, the noise sources are fillable:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{bipoles/noise sources/fillcolor=dashed}
+ \draw(0,0) to [nV, l=$e_n$] ++(2,0);
+ \draw(0,-2) to [nI, l=$i_n$] ++(2,0);
+ \begin{scope}
+ \draw(3,0) to [nV, l=$e_n$, fill=yellow!50!red] ++(2,0);
+ \draw(3,-2) to [nI, l=$i_n$, fill=blue!50!white] ++(2,0);
+ \end{scope}
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Special sources}
+\begin{groupdesc}
+ \circuitdescbip*[vsourcesquare]{square voltage source}{Square voltage source}{vsourcesquare, sqV}
+ \circuitdescbip*{vsourcetri}{Triangle voltage source}{tV}
+ \circuitdescbip*{esource}{Empty voltage source}{}
+ \circuitdescbip*{pvsource}{Photovoltaic-voltage source}{}
+ \circuitdescbip*[oosource]{ioosource}{Double Zero style current source}{}
+ \circuitdescbip*[oosource]{voosource}{Double Zero style voltage source}{}
+\end{groupdesc}
+
+\subsubsection{DC sources}
+\begin{groupdesc}
+ \circuitdescbip*{dcvsource}{DC voltage source}{}
+ \circuitdescbip*{dcisource}{DC current source}{}
+\end{groupdesc}
+
+The size of the broken part of the DC current source is configurable by changing the value of \texttt{bipoles/dcisource/angle} (default \texttt{80}); values must be between 0 (no circle at all, probably not useful) and 90 (full circle, again not useful).
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[dcvsource] ++(2,0)
+ to [dcisource, fill=yellow] ++(2,0) ;
+ \ctikzset{bipoles/dcisource/angle=45}
+ \draw (0,-2) to[dcvsource] ++(2,0)
+ to [dcisource, fill=yellow] ++(2,0) ;
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Sources customizations}\label{sec:tweak-sources}
+
+You can change the scale of the batteries by setting the key \texttt{batteries/scale}, for the controlled (dependent) sources with \texttt{csources/scale}, and for all the other independent sources and generators with \texttt{sources/scale}, to something different from the default \texttt{1.0}.
+
+\subsection{Instruments}
+\begin{groupdesc}
+ \circuitdescbip*{ammeter}{Ammeter}{}
+ \circuitdescbip*{voltmeter}{Voltmeter}{}
+ \circuitdescbip*{ohmmeter}{Ohmmeter}{}
+ \circuitdescbip*{rmeter}{Round meter (use \texttt{t=...} for the symbol)}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+ \circuitdescbip*{rmeterwa}{Round meter with arrow (use \texttt{t=...} for the symbol)}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+ \circuitdescbip*{smeter}{Square meter (use \texttt{t=...} for the symbol)}{}(left/135/0.2, right/45/0.2, center/-90/0.3, in 1/-135/.5, in 2/-45/.5)
+ \circuitdescbip*{qiprobe}{QUCS-style current probe}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+ \circuitdescbip*{qvprobe}{QUCS-style voltage probe}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+ \circuitdescbip*{qpprobe}{QUCS-style power probe}{}(left/135/0.2, right/45/0.2, center/-90/0.3, v+/-135/.5, v-/-45/.5)
+ \circuitdescbip*[oscope]{oscope}{Oscilloscope\footnotemark}{}(left/135/0.2, right/45/0.2,
+ in 1/-135/0.4, in 2/-45/0.4)
+ \footnotetext{Suggested by \texttt{@nobrl} on GitHub}
+ \circuitdescbip{iloop}{Current loop (symbolic)}{}(left/135/0.2, right/45/0.2, center/-90/0.3, i/30/0.4)
+ \circuitdescbip{iloop2}{Current loop (real)}{}(left/135/0.2, right/-45/0.2, center/-90/0.3, i+/135/0.4, i-/45/0.4)
+\end{groupdesc}
+
+\subsubsection{Instruments customizations}\label{sec:tweak-instruments}
+
+You can change the scale of all the instruments (including the current loops) by setting the key \texttt{instruments/scale} to something different from the default \texttt{1.0}.
+
+\subsubsection{Rotation-invariant elements}
+
+The \texttt{oscope} element will not rotate the ``graph'' shown with the component:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \foreach \a in {0,45,...,350} {
+ \draw (0,0) to[oscope] (\a:3);
+ }
+\end{circuitikz}
+\end{LTXexample}
+
+The \texttt{rmeter}, \texttt{rmaterwa}, and \texttt{smeter} have the same behavior.
+
+\subsubsection{Instruments as node elements}
+
+The node-style usage of the \texttt{oscope} is also interesting, using the additional \texttt{in 1} and \texttt{in 2} anchors; notice that in this case you can use the text content of the node to put labels above it.
+Moreover, you can change the size of the oscilloscope by changing \texttt{bipoles/oscope/width} and \texttt{bipoles/oscope/height} keys (which both default to 0.6).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,1)
+ to[oscope=$C_1$, fill=green!20!gray, name=O1] ++(2,0);
+ \path (O1.right)
+ node[ground, scale=0.5, below right=4pt]{};
+ \ctikzset{bipoles/oscope/width=1.0}
+ \draw (1,-1)
+ node[oscopeshape, fill=yellow!20!orange](O2){$C_2$};
+ \draw (O2.in 2) to[short, *-] ++(0,-0.5) node[ground]{};
+ \draw (O2.in 1) to[short, *-] ++(0,-0.5)
+ -- ++(-1,0) node[currarrow, xscale=-1]{};
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Measuring voltage and currents, multiple ways}
+
+This is the classical (legacy) option, with the \texttt{voltmeter} and \texttt{ammeter}. The problem is that elements are intrinsically horizontal, so they look funny if put in vertically.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) -- ++(1,0) to[R] ++(2,0)
+ to [ammeter] ++(0,-2) node[ground]{};
+ \draw (1,0) to[voltmeter] ++(0,-2)
+ node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+So the solution is often changing the structure to keep the meters in horizontal position.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) -- ++(1,0) to[R] ++(2,0)
+ to [ammeter] ++(2,0) --
+ ++(0,-1) node[ground]{};
+ \draw (1,0) -- (1,1) to[voltmeter]
+ ++(2,0) node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+Since version 0.9.0 you have more options for the measuring instruments. You can use the generic \texttt{rmeterwa} (round meter with arrow), to which you can specify the internal symbol with the option \texttt{t=...} (and is fillable).
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}[american]
+ \draw (0,0) -- ++(1,0) to[R] ++(2,0)
+ to [rmeterwa, t=A, i=$i$] ++(0,-2) node[ground]{};
+ \draw (1,0) to[rmeterwa, t=V, v=$v$] ++(0,-2)
+ node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+This kind of component will keep the symbol horizontal, whatever the orientation:
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}[american]
+ \draw (0,0) -- ++(1,0) to[R] ++(2,0)
+ to [rmeterwa, t=A, i=$i$] ++(2,0) --
+ ++(0,-1) node[ground]{};
+ \draw (1,0) -- (1,1) to[rmeterwa, t=V, v^=$v$]
+ ++(2,0) node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+The plain \texttt{rmeter} is the same, without the measuring arrow:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) -- ++(1,0) to[R] ++(2,0)
+ to [rmeter, t=A, i=$i$] ++(0,-2) node[ground]{};
+ \draw (1,0) to[rmeter, t=V, v=$v$] ++(0,-2)
+ node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+
+If you prefer it, you have the option to use square meters, in order to have more visual difference from generators:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) -- ++(1,0) to[R] ++(2,0)
+ to [smeter, t=A, i=$i$] ++(0,-2) node[ground]{};
+ \draw (1,0) to[smeter, t=V, v=$v$] ++(0,-2)
+ node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+Another possibility is to use QUCS\footnote{QUCS is an open source circuit simulator: \url{http://qucs.sourceforge.net/}}-style probes, which have the nice property of explictly showing the type of connection (in series or parallel) of the meter:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) -- ++(1,0) to[R] ++(2,0)
+ to [qiprobe, l=$i$] ++(0,-2) node[ground]{};
+ \draw (1,0) to[qvprobe, l=$v$] ++(0,-2)
+ node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+If you want to explicitly show a power measurement, you can use the power probe \texttt{qpprobe} and using the additional anchors \texttt{v+} and \texttt{v-} :
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[short,-*] ++(1,0) coordinate(b)
+ to[R] ++(2,0) to [qpprobe, l=$i$, a=$v$, name=P]
+ ++(0,-2.5) node[ground](GND){};
+ \draw (P.v-) -| ++(-0.5,-1) coordinate(a)
+ to [short, -*] (a-|GND);
+ \draw (P.v+) -| (b);
+\end{circuitikz}
+\end{LTXexample}
+
+The final possibility is to use oscilloscopes. For example:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) -- ++(1,0) to[R] ++(3,0)
+ to [iloop, mirror, name=I] ++(0,-2)
+ node[ground] (GND){};
+ \draw (1,0) to[oscope, v=$v$] ++(0,-2)
+ node[ground]{};
+ \draw (I.i) -- ++(-0.5,0) node[oscopeshape, anchor=right, name=O]{};
+ \draw (O.south) -- (O.south |- GND) node[ground]{};
+\end{circuitikz}
+\end{LTXexample}
+
+Or, if you want a more physical structure for the measurement setup:
+
+\begin{LTXexample}[varwidth=true, pos=b]
+\begin{circuitikz}[american]
+ \draw (0,0) -- ++(1,0) to[R] ++(3,0) to [iloop2, name=I] ++(0,-2)
+ node[ground] (GND){};
+ \ctikzset{bipoles/oscope/width=1.6}\ctikzset{bipoles/oscope/height=1.2}
+ \node [oscopeshape, fill=green!10](O) at (6,2){};
+ \node [bnc, xscale=-1, anchor=zero](bnc1) at (O.in 1){};
+ \node [bnc, , anchor=zero, rotate=-90](bnc2) at (O.in 2){};
+ \draw [-latexslim] (bnc1.hot) -| (1,0);
+ \draw (bnc2.hot) |- (I.i+);
+ \draw (I.i-) node[ground, scale=0.5]{};
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Mechanical Analogy}
+\begin{groupdesc}
+ \circuitdescbip*{damper}{Mechanical Damping}{}
+ \circuitdescbip{spring}{Mechanical Stiffness}{}
+ \circuitdescbip*{viscoe}{Mechanical viscoelastic element\footnotemark}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+ \footnotetext{Suggested by @Alex in \url{https://tex.stackexchange.com/q/484268/38080}}
+ \circuitdescbip*{mass}{Mechanical Mass}{}
+\end{groupdesc}
+
+\subsubsection{Mechanical elements customizations}\label{sec:tweak-mechanicals}
+
+You can change the scale of all the mechanical elements by setting the key \texttt{mechanicals/scale} to something different from the default \texttt{1.0}.
+
+
+\subsection{Miscellaneous bipoles}
+
+Here you'll find bipoles that are not easily grouped in the categories above.
+
+\begin{groupdesc}
+ \circuitdescbip{thermocouple}{Thermocouple}{}
+ \circuitdescbip*{fuse}{Fuse}{}
+ \circuitdescbip*{afuse}{Asymmetric fuse}{asymmetric fuse}
+ \circuitdescbip{squid}{Squid}{}
+ \circuitdescbip{barrier}{Barrier}{}
+\end{groupdesc}
+
+\begin{groupdesc}
+ \circuitdescbip*{european gas filled surge arrester}{European gas filled surge arrester}{}
+ \circuitdescbip*{american gas filled surge arrester}{American gas filled surge arrester}{}
+\end{groupdesc}
+
+\begin{framed}
+If (default behaviour) \texttt{europeangfsurgearrester} option is active (or the style \texttt{[european gas filled surge arrester]} is used), the shorthands \texttt{gas filled surge arrester} and \texttt{gf surge arrester} are equivalent to the european version of the component.
+
+If otherwise \texttt{americangfsurgearrester} option is active (or the style \texttt{[american gas filled surge arrester]} is used), the shorthands the shorthands \texttt{gas filled surge arrester} and \texttt{gf surge arrester} are equivalent to the american version of the component.
+\end{framed}
+
+
+
+\begin{groupdesc}
+ \circuitdescbip*{lamp}{Lamp}{}
+ \circuitdescbip*{bulb}{Bulb}{}
+ \circuitdescbip*{loudspeaker}{loudspeaker}{}( north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4, south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4, left/135/0.2, right/45/0.2, center/-135/0.2)
+ \circuitdescbip*{mic}{mic}{}( north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4, south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4, left/135/0.2, right/45/0.2, center/-135/0.2)
+\end{groupdesc}
+
+You can use microphones and loudspeakers with \texttt{waves} (see section~\ref{sec:RF}) too:
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}
+ \draw (0,0) to[mic, name=M] ++(0,2)
+ to[amp, t=$A$] ++(2,0)
+ to[loudspeaker, name=L] ++(0,-2)
+ to[short, -*] (0,0) node[ground]{};
+ \node [waves, scale=0.7, left=5pt]
+ at(M.north) {};
+ \node [waves, scale=0.7, right]
+ at(L.north) {};
+ \end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Miscellanous element customization}\label{sec:tweak-misc}
+
+You can change the scale of all the miscellaneous elements by setting the key \texttt{misc/scale} to something different from the default \texttt{1.0}.
+
+\subsection{Crossings}
+
+Path style:
+\begin{groupdesc}
+\circuitdescbip{crossing}{Jumper style non-contact crossing}{xing}
+\end{groupdesc}
+
+Node style:
+\begin{groupdesc}
+ \circuitdesc{jump crossing}{Jumper-style crossing node}{}
+ \circuitdesc{plain crossing}{Plain style crossing node}{}
+\end{groupdesc}
+
+All circuit-drawing standards agree that to show a crossing without electric contact, a simple crossing of the wires suffices; the electrical contact must be explicitly marked with a filled dot.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[]
+\draw(1,-1) to[short] (1,1)
+ (0,0) to[short] (2,0);
+\draw(4,-1) to[short] (4,1)
+ (3,0) to[short] (5,0)
+ (4,0) node[circ]{};
+\end{circuitikz}
+\end{LTXexample}
+
+However, sometime it is advisable to mark the non-contact situation more explicitly. To this end, you can use a path-style component called \texttt{crossing}:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[]
+\draw(1,-1) to[short] (1,1) (0,0) to[crossing] (2,0);
+\draw(4,-1) to[short] (4,1) (3,0) to[short] (5,0)
+ (4,0) node[circ]{};
+\end{circuitikz}
+\end{LTXexample}
+
+That should suffice most of the time; the only problem is that the crossing jumper will be put in the center of the subpath where the \texttt{to[crossing]} is issued, so sometime a bit of trial and error is needed to position it.
+
+For a more powerful (and elegant) way you can use the crossing nodes:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[]
+ \node at (1,1)[jump crossing](X){};
+ \draw (X.west) -- ++(-1,0);
+ \draw (X.east) to[R] ++(2,0);
+ \draw (X.north) node[vcc]{};
+ \draw (X.south) to[C] ++(0,-1.5);
+\end{circuitikz}
+\end{LTXexample}
+
+Notice that the \texttt{plain crossing} and the \texttt{jump crossing} have a small gap in the straight wire, to enhance the effect of crossing (as a kind of shadow).
+
+The size of the crossing elements can be changed with the key \texttt{bipoles/crossing/size} (default 0.2).
+
+\subsection{Arrows}\label{sec:arrows}
+
+These are pseudo-arrows used in lot of places in the packages (for transistors, flows, currents, and so on).
+
+\begin{groupdesc}
+ \circuitdesc{currarrow}{Arrows (current and voltage)}{}(center/0/0.2)
+ \circuitdesc{inputarrow}{Arrow to draw at its tip, useful for block diagrams.}{}(center/0/0.2)
+ \circuitdesc*{bnc}{BNC connector}{}(left/135/0.6, right/45/0.6, center/-90/0.6, hot/0/0.6, zero/-135/0.6)
+\end{groupdesc}
+
+\subsubsection{Arrows size}\label{sec:currarrow-size}
+
+You can use the parameter \texttt{current arrow scale} to change the size of the arrows in various components and indicators; the normal value is 16, higher numbers give smaller arrows and so on. You need to use \texttt{circuitikz/current arrow scale} if you use it into a node.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i=f] ++(2,0) node[npn, anchor=B]{};
+ \draw (0,-2) to[R, f=f, current arrow scale=8] ++(2,0)
+ node[pnp, anchor=B, circuitikz/current arrow scale=8]{};
+ \draw (0,-4) to[R, f=f, current arrow scale=24] ++(2,0)
+ node[nigbt, anchor=B]{};
+\end{circuitikz}
+\end{LTXexample}
+
+Moreover, you have the arrow tip \texttt{latexslim} which is an arrow similar to the old (in deprecated \texttt{arrows} library) \texttt{latex'} element:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american,]
+ \draw [latexslim-latexslim] (0,0) -- (1,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Terminal shapes}\label{sec:terminals}
+
+These are the so-called ``bipole nodes'' shapes, or poles (see section~\ref{sec:bipole-nodes}). These nodes are always filled; the ``open'' versions (starting with an \texttt{o}) are by default filled white, but you can override it with the \texttt{fill} parameter.
+
+\begin{groupdesc}
+ \circuitdesc{circ}{Connected terminal}{}
+ \circuitdesc{ocirc}{Unconnected terminal}{}
+ \circuitdesc{diamondpole}{Diamond-square terminal}{}
+ \circuitdesc{odiamondpole}{Open diamond-square terminal}{}
+ \circuitdesc{squarepole}{Square-shape terminal}{}
+ \circuitdesc{osquarepole}{Open square-shape terminal}{}
+\end{groupdesc}
+
+Since version 0.9.0, ``bipole nodes'' shapes have all the standard geographical anchors, so you can do things like these:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american,]
+ \draw (0,-1) node[draw](R){R};
+ \draw (R.east) node[ocirc, right]{};
+\end{circuitikz}
+\end{LTXexample}
+
+The size of the poles is controlled by the key \texttt{nodes width} (default \texttt{0.04}, relative to the basic length).
+Be sure to see section~\ref{sec:bipole-nodes} for more usage and configurability.
+
+\subsubsection{BNC connector/terminal}
+
+\begin{groupdesc}
+ \circuitdesc*{bnc}{BNC connector}{}(left/135/0.6, right/45/0.6, center/-90/0.6, hot/0/0.6, zero/-135/0.6)
+\end{groupdesc}
+The BNC connector is defined so that you can easily connect it as input or output (but remember that you need to flip the text if you flip the component):
+
+\begin{LTXexample}[varwidth, ]
+\begin{circuitikz}
+ \draw (0,0)
+ node[bnc](B1){$v_i$} to[R=\SI{50}{\ohm}] ++(3,0)
+ node[bnc, xscale=-1](B2){\scalebox{-1}[1]{$v_o$}};
+ \node [ground] at (B1.shield) {};
+ \node [eground] at (B2.shield){};
+\end{circuitikz}
+\end{LTXexample}
+
+It also has a \texttt{zero} anchor if you need to rotate it about its real center.
+
+\begin{LTXexample}[varwidth, ]
+\begin{circuitikz}
+ \draw[thin, red] (0,0) -- ++(1,0) (0,-1) -- ++(1,0);
+ \path (0,0) node[bnc]{} ++(1,0) node[bnc, rotate=-90]{};
+ \path (0,-1) node[bnc, anchor=zero]{} ++(1,0) node[bnc, anchor=zero, rotate=-90]{};
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Block diagram components}
+\noindent Contributed by Stefan Erhardt.
+
+\begin{groupdesc}
+ \circuitdesc*{mixer}{mixer}{}( 1/180/0.1,2/-90/0.1,3/0/0.1,4/90/0.1 )
+ \circuitdesc*{adder}{adder}{}( west/180/0.1,south/-90/0.1,east/0/0.1,north/90/0.1 )
+ \circuitdesc*{oscillator}{oscillator}{}
+ \circuitdesc*{circulator}{circulator}{}
+ \circuitdesc*{wilkinson}{wilkinson divider}{}( in/180/0.1, out2/45/0.1, out1/-45/0.1 )
+\end{groupdesc}
+
+\begin{groupdesc}
+ \circuitdescbip*{twoport}{generic two port\footnotemark}{}
+ \footnotetext{To specify text to be put in the component: \texttt{twoport[t=text]}): \tikz \draw[scale=.5, transform shape] (0,0) to[twoport,>,t=text] (2,0); }
+ \circuitdescbip*{vco}{vco}{}
+ \circuitdescbip*{bandpass}{bandpass}{}
+ \circuitdescbip*{bandstop}{bandstop}{}
+ \circuitdescbip*{highpass}{highpass}{}
+ \circuitdescbip*{lowpass}{lowpass}{}
+ \circuitdescbip*{adc}{A/D converter}{}
+ \circuitdescbip*{dac}{D/A converter}{}
+ \circuitdescbip*{dsp}{DSP}{}
+ \circuitdescbip*{fft}{FFT}{}
+ \circuitdescbip*{amp}{amplifier}{}
+ \circuitdescbip*{vamp}{VGA}{}
+ \circuitdescbip*{piattenuator}{$\pi$ attenuator}{}
+ \circuitdescbip*{vpiattenuator}{var. $\pi$ attenuator}{}
+ \circuitdescbip*{tattenuator}{T attenuator}{}
+ \circuitdescbip*{vtattenuator}{var.\ T attenuator}{}
+ \circuitdescbip*{phaseshifter}{phase shifter}{}
+ \circuitdescbip*{vphaseshifter}{var.\ phase shifter}{}
+ \circuitdescbip*{detector}{detector}{}
+\end{groupdesc}
+
+\begin{groupdesc}
+ \circuitdesc*{fourport}{Generic fourport}{}
+ \circuitdesc*{coupler}{Coupler}{}
+ \circuitdesc*{coupler2}{Coupler with rounded arrows}{}
+\end{groupdesc}
+
+\subsubsection{Blocks anchors}
+
+The ports of the mixer and adder can be addressed with numbers or \texttt{west}/\texttt{south}/\texttt{east}/\texttt{north}:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[mixer] (mix) {}
+ (mix.1) node[left] {1}
+ (mix.2) node[below] {2}
+ (mix.3) node[right] {3}
+ (mix.4) node[above] {4}
+;\end{circuitikz}
+\end{LTXexample}
+
+
+The Wilkinson divider has:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[wilkinson] (w) {\SI{3}{dB}}
+ (w.in) to[short,-o] ++(-0.5,0)
+ (w.out1) to[short,-o] ++(0.5,0)
+ (w.out2) to[short,-o] ++(0.5,0)
+ (w.in) node[below left] {\texttt{in}}
+ (w.out1) node[below right] {\texttt{out1}}
+ (w.out2) node[above right] {\texttt{out2}}
+ ;
+\end{circuitikz}
+\end{LTXexample}
+
+The couplers have:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[coupler] (c) {\SI{10}{dB}}
+ (c.1) to[short,-o] ++(-0.5,0)
+ (c.2) to[short,-o] ++(0.5,0)
+ (c.3) to[short,-o] ++(0.5,0)
+ (c.4) to[short,-o] ++(-0.5,0)
+ (c.1) node[below left] {\texttt{1}}
+ (c.2) node[below right] {\texttt{2}}
+ (c.3) node[above right] {\texttt{3}}
+ (c.4) node[above left] {\texttt{4}}
+ ;
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[coupler2] (c) {\SI{3}{dB}}
+ (c.1) to[short,-o] ++(-0.5,0)
+ (c.2) to[short,-o] ++(0.5,0)
+ (c.3) to[short,-o] ++(0.5,0)
+ (c.4) to[short,-o] ++(-0.5,0)
+ (c.1) node[below left] {\texttt{1}}
+ (c.2) node[below right] {\texttt{2}}
+ (c.3) node[above right] {\texttt{3}}
+ (c.4) node[above left] {\texttt{4}}
+ ;
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsubsection{Blocks customization}
+
+You can change the scale of all the block elements by setting the key \texttt{blocks/scale} to something different from the default \texttt{1.0}.
+
+With the option \texttt{>} you can draw an arrow to the input of the block diagram symbols.
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) to[short,o-] ++(0.3,0)
+ to[lowpass,>] ++(2,0)
+ to[adc,>] ++(2,0)
+ to[short,-o] ++(0.3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\paragraph{Multi ports}
+Since inputs and outputs can vary, input arrows can be placed as nodes. Note that you have to rotate the arrow on your own:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[mixer] (m) {}
+ (m.1) to[short,-o] ++(-1,0)
+ (m.2) to[short,-o] ++(0,-1)
+ (m.3) to[short,-o] ++(1,0)
+ (m.1) node[inputarrow] {}
+ (m.2) node[inputarrow,rotate=90] {};
+\end{circuitikz}
+\end{LTXexample}
+
+
+\paragraph{Labels and custom two-port boxes}
+Some two-ports have the option to place a normal label (\texttt{l=}) and a inner label (\texttt{t=}).
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{bipoles/amp/width=0.9}
+ \draw (0,0) to[amp,t=LNA,l_=$F{=}0.9\,$dB,o-o] ++(3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\paragraph{Box option}
+Some devices have the possibility to add a box around them. The inner symbol scales down to fit inside the box.
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[mixer,box,anchor=east] (m) {}
+ to[amp,box,>,-o] ++(2.5,0)
+ (m.west) node[inputarrow] {} to[short,-o] ++(-0.8,0)
+ (m.south) node[inputarrow,rotate=90] {} --
+ ++(0,-0.7) node[oscillator,box,anchor=north] {};
+\end{circuitikz}
+\end{LTXexample}
+
+
+\paragraph{Dash optional parts}
+To show that a device is optional, you can dash it. The inner symbol will be kept with solid lines.
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[amp,l=\SI{10}{dB}] ++(2.5,0);
+ \draw[dashed] (2.5,0) to[lowpass,l=opt.] ++(2.5,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+
+\subsection{Transistors}
+
+\begin{groupdesc}
+ \circuitdesc{nmos}{nmos}{}( G/180/0.2,D/0/0.2,S/0/0.2 )
+ \circuitdesc{pmos}{pmos}{}
+ \circuitdesc{hemt}{hemt}{}
+ \circuitdesc{npn}{npn}{}( B/180/0.2,C/0/0.2,E/0/0.2 )
+ \circuitdesc{pnp}{pnp}{}
+ \circuitdesc{npn,photo}{npn}{}( nobase/0/0.4 )
+ \circuitdesc{pnp,photo}{pnp}{}
+ \circuitdesc{nigbt}{nigbt}{}
+ \circuitdesc{pigbt}{pigbt}{}
+ \circuitdesc{Lnigbt}{Lnigbt}{}
+ \circuitdesc{Lpigbt}{Lpigbt}{}
+\end{groupdesc}
+
+For all transistors a body diode (or freewheeling diode) can automatically be drawn. Just use the global option bodydiode, or for single transistors, the tikz-option bodydiode:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) node[npn,bodydiode](npn){}++(2,0)node[pnp,bodydiode](npn){};
+ \draw (0,-2) node[nigbt,bodydiode](npn){}++(2,0)node[pigbt,bodydiode](npn){};
+ \draw (0,-4) node[nfet,bodydiode](npn){}++(2,0)node[pfet,bodydiode](npn){};
+\end{circuitikz}
+\end{LTXexample}
+
+The Base/Gate connection of all transistors can be disabled by the options \textit{nogate} or \textit{nobase}, respectively. The Base/Gate anchors are floating, but there is an additional anchor "nogate"/"nobase", which can be used to point to the unconnected base:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (2,0) node[npn,nobase](npn){};
+ \draw (npn.E) node[below]{E};
+ \draw (npn.C) node[above]{C};
+ \draw (npn.B) node[circ]{} node[left]{B};
+ \draw[dashed,red,-latex] (1,0.5)--(npn.nobase);
+\end{circuitikz}
+\end{LTXexample}
+
+If the option \texttt{arrowmos} is used (or after the command \verb!\ctikzset{tripoles/mos style/arrows}! is given), this is the output:
+\begin{groupdesc}
+ \ctikzset{tripoles/mos style/arrows}
+ \circuitdesc{nmos}{nmos}{}
+ \circuitdesc{pmos}{pmos}{}
+\end{groupdesc}
+
+You can go back to the no-arrows mos with \texttt{noarrowmos} locally or with
+\texttt{\textbackslash ctikzset\{tripoles/mos style/no arrows\}}.
+
+To draw the PMOS circle non-solid, use the option \texttt{emptycircle} or the command
+\\\verb!\ctikzset{tripoles/pmos style/emptycircle}!. To remove the dot completely (only useful if you have \texttt{arrowmos} enabled, otherwise there will be no difference between P-MOS and N-MOS), you can use the option \texttt{nocircle} or \verb|\ctikzset{tripoles/pmos style/nocircle}|.
+
+\begin{groupdesc}
+ \circuitdesc{pmos,emptycircle}{pmos}{}
+ \circuitdesc{pmos,nocircle,arrowmos}{pmos}{}
+\end{groupdesc}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[
+ info/.style={left=1cm, blue, text width=5em, align=right},]
+ \draw (0,1) node{pmos} (2,1) node{nmos};
+ \draw (0,0) node[info]{default} node[pmos]{} (2,0) node[nmos]{};
+ \ctikzset{tripoles/mos style/arrows}
+ \draw (0,-2) node[info]{arrows} node[pmos]{} (2,-2) node[nmos]{};
+ \ctikzset{tripoles/pmos style/emptycircle}
+ \draw (0,-4) node[info]{emptycircle} node[pmos]{} (2,-4) node[nmos]{};
+ \ctikzset{tripoles/pmos style/nocircle}
+ \draw (0,-6) node[info]{nocircle} node[pmos]{} (2,-6) node[nmos]{};
+ \ctikzset{tripoles/mos style/no arrows}
+ \draw (0,-8) node[info, red]{no circle, no arrows, DON'T do it}
+ node[pmos]{} (2,-8) node[nmos]{};
+\end{circuitikz}\end{LTXexample}
+
+\textsc{nfet}s and \textsc{pfet}s have been incorporated based on code provided by Clemens Helfmeier and Theodor Borsche. Use the package options \texttt{fetsolderdot}/\texttt{nofetsolderdot} to enable/disable solderdot at some fet-transistors. Additionally, the solderdot option can be enabled/disabled for single transistors with the option "solderdot" and "nosolderdot", respectm ively.
+
+\begin{groupdesc}
+ \circuitdesc{nfet}{nfet}{}
+ \circuitdesc{nigfete}{nigfete}{}
+ \circuitdesc{nigfete,solderdot}{nigfete}{}
+ \circuitdesc{nigfetebulk}{nigfetebulk}{}
+ \circuitdesc{nigfetd}{nigfetd}{}
+ \circuitdesc{pfet}{pfet}{}
+ \circuitdesc{pigfete}{pigfete}{}
+ \circuitdesc{pigfetebulk}{pigfetebulk}{}
+ \circuitdesc{pigfetd}{pigfetd}{}
+\end{groupdesc}
+
+\textsc{njfet} and \textsc{pjfet} have been incorporated based on code provided by Danilo Piazzalunga:
+\begin{groupdesc}
+ \circuitdesc{njfet}{njfet}{}
+ \circuitdesc{pjfet}{pjfet}{}
+\end{groupdesc}
+
+\textsc{isfet}
+\begin{groupdesc}
+ \circuitdesc{isfet}{isfet}{}
+\end{groupdesc}
+
+\subsubsection{Transistors anchors}
+
+For \textsc{nmos}, \textsc{pmos}, \textsc{nfet}, \textsc{nigfete}, \textsc{nigfetd}, \textsc{pfet}, \textsc{pigfete}, and \textsc{pigfetd} transistors one has \texttt{base}, \texttt{gate}, \texttt{source} and \texttt{drain} anchors (which can be abbreviated with \texttt{B}, \texttt{G}, \texttt{S} and \texttt{D}):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[nmos] (mos) {}
+ (mos.gate) node[anchor=east] {G}
+ (mos.drain) node[anchor=south] {D}
+ (mos.source) node[anchor=north] {S}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[pigfete] (pigfete) {}
+ (pigfete.G) node[anchor=east] {G}
+ (pigfete.D) node[anchor=north] {D}
+ (pigfete.S) node[anchor=south] {S}
+ (pigfete.bulk) node[anchor=west] {Bulk}
+;\end{circuitikz}
+\end{LTXexample}
+
+Similarly \textsc{njfet} and \textsc{pjfet} have \texttt{gate}, \texttt{source} and \texttt{drain} anchors (which can be abbreviated with \texttt{G}, \texttt{S} and \texttt{D}):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[pjfet] (pjfet) {}
+ (pjfet.G) node[anchor=east] {G}
+ (pjfet.D) node[anchor=north] {D}
+ (pjfet.S) node[anchor=south] {S}
+;\end{circuitikz}
+\end{LTXexample}
+
+For \textsc{npn}, \textsc{pnp}, \textsc{nigbt} and \textsc{pigbt} transistors, the anchors are \texttt{base}, \texttt{emitter} and \texttt{collector} anchors (which can be abbreviated with \texttt{B}, \texttt{E} and \texttt{C}):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[npn] (npn) {}
+ (npn.base) node[anchor=east] {B}
+ (npn.collector) node[anchor=south] {C}
+ (npn.emitter) node[anchor=north] {E}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[pigbt] (pigbt) {}
+ (pigbt.B) node[anchor=east] {B}
+ (pigbt.C) node[anchor=north] {C}
+ (pigbt.E) node[anchor=south] {E}
+;\end{circuitikz}
+\end{LTXexample}
+
+Here is one composite example (please notice that the \texttt{xscale=-1} style would also reflect the label of the transistors, so here a new node is added and its text is used, instead of that of \texttt{pnp1}):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[pnp] (pnp2) {2}
+ (pnp2.B) node[pnp, xscale=-1, anchor=B] (pnp1) {}
+ (pnp1) node {1}
+ (pnp1.C) node[npn, anchor=C] (npn1) {}
+ (pnp2.C) node[npn, xscale=-1, anchor=C] (npn2) {}
+ (pnp1.E) -- (pnp2.E) (npn1.E) -- (npn2.E)
+ (pnp1.B) node[circ] {} |- (pnp2.C) node[circ] {}
+;\end{circuitikz}
+\end{LTXexample}
+
+Notice that the text labels of transistors are somewhat buggy. It is better to se explicit anchors to set transistor's names.
+
+Similarly, transistors like other components can be reflected vertically:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[pigfete, yscale=-1] (pigfete) {}
+ (pigfete.bulk) node[anchor=west] {Bulk}
+ (pigfete.G) node[anchor=east] {G}
+ (pigfete.D) node[anchor=south] {D}
+ (pigfete.S) node[anchor=north] {S}
+;\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Transistor paths}\label{sec:transasbip}
+
+For syntactical convenience transistors can be placed using the normal path notation used for bipoles. The transitor type can be specified by simply adding a ``T'' (for transistor) in front of the node name of the transistor. It will be placed with the base/gate orthogonal to the direction of the path:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[njfet] {1}
+ (-1,2) to[Tnjfet=2] (1,2)
+ to[Tnjfet=3, mirror] (3,2);
+;\end{circuitikz}
+\end{LTXexample}
+
+Access to the gate and/or base nodes can be gained by naming the transistors with the \texttt{n} or \texttt{name} path style:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw[yscale=1.1, xscale=.8]
+ (2,4.5) -- (0,4.5) to[Tpmos, n=p1] (0,3)
+ to[Tnmos, n=n1] (0,1.5)
+ to[Tnmos, n=n2] (0,0) node[ground] {}
+ (2,4.5) to[Tpmos,n=p2] (2,3) to[short, -*] (0,3)
+ (p1.G) -- (n1.G) to[short, *-o] ($(n1.G)+(3,0)$)
+ (n2.G) ++(2,0) node[circ] {} -| (p2.G)
+ (n2.G) to[short, -o] ($(n2.G)+(3,0)$)
+ (0,3) to[short, -o] (-1,3)
+;\end{circuitikz}
+\end{LTXexample}
+
+Transistor paths have the possibility to use the poles syntax (see section~\ref{sec:bipole-nodes}) but they have \textbf{no} voltage, current, flow, annotation options.
+
+The \texttt{name} property is available also for bipoles; this is useful mostly for triac, potentiometer and thyristor (see~\ref{sec:othertrip}).
+
+\subsubsection{Transistors customization}\label{sec:styling-transistors}
+
+The default position of the arrows in transistors is somewhat in the middle of the terminal; if you prefer you can move them to the end with the style key \texttt{transistors/arrow pos=end} (the default value is \texttt{legacy}).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{transistors/arrow pos=end}
+ \draw (0,0) node[npn, ](npn){};
+ \draw (2,0) node[pnp, ](npn){};
+ \draw (0,-2) node[nmos, ](npn){};
+ \draw (2,-2) node[pmos, ](npn){};
+\end{circuitikz}
+\end{LTXexample}
+
+You can change the scale of all the transistors by setting the key \texttt{transistors/scale} (default \texttt{1.0}).
+The size of the arrows (if any) is controlled by the same parameters as \texttt{currarrow} (see section~\ref{sec:currarrow-size}) and the dots on P-type transistors (if any) are the same as the nodes/poles (see section~\ref{sec:bipole-nodes}).
+
+\subsection{Electronic Tubes}
+
+Electronic tubes, also known as vacuum tubes, control current flow between electrodes. They come in many different flavours.
+\small{Contributed by J. op den Brouw (\texttt{J.E.J.opdenBrouw@hhs.nl}).}
+
+\begin{groupdesc}
+ \circuitdesc*{diodetube}{Tube Diode}{}(anode/90/0.2, cathode/-90/0.2 )
+ \circuitdesc*{triode}{Triode}{}(anode/90/0.2, cathode/-90/0.2, control/180/0.2 )
+ \circuitdesc*{tetrode}{Tetrode}{}(anode/90/0.2, cathode/-90/0.2, control/190/0.2,screen/170/0.2 )
+ \circuitdesc*{pentode}{Pentode}{}(anode/90/0.2, cathode/-90/0.2, control/190/0.2,screen/180/0.2,suppressor/170/0.2 )
+\end{groupdesc}
+
+Some pentodes have the suppressor grid internally connected to the control grid, which saves a pin on the tube's housing.
+
+\begin{groupdesc}
+ \circuitdesc*{pentode suppressor to cathode}{Pentode with suppressor grid connected to cathode}{}( anode/90/0.2, cathode/-90/0.2, control/190/0.2,screen/180/0.2 )
+\end{groupdesc}
+
+Note that the \verb|diodetube| is used as component name to avoid clashes with the semiconductor diode.
+Normally, the filament is not drawn. If you want a filament, put the \verb|filament| option in the node description:
+
+\begin{groupdesc}
+ \circuitdesc*{diodetube,filament}{Tube Diode}{}(anode/90/0.2, filament 1/-135/0.2, filament 2/-45/0.2 )
+\end{groupdesc}
+
+Sometimes, you don't want the cathode to be drawn (but you do want the filament). Use the \verb|nocathode| option in the node description:
+
+\begin{groupdesc}
+ \circuitdesc*{diodetube,filament,nocathode}{Tube Diode}{}(anode/90/0.2 )
+\end{groupdesc}
+
+If you want a full cathode to be drawn, use the \verb|fullcathode| option in the node description. You can then use the anchors \verb|cathode 1| and \verb|cathode 2|.
+
+\begin{groupdesc}
+ \circuitdesc*{diodetube,fullcathode}{Tube Diode}{}(anode/90/0.2, cathode 1/-135/0.2, cathode 2/-45/0.2 )
+\end{groupdesc}
+
+\subsubsection{Tubes customization}
+
+The tubes can be scaled using the key \texttt{tubes/scale}, default \texttt{1.0}. In addition, they are
+fully configurable, and the attributes are described below:
+
+\begin{tabular}{l | l | l}
+
+ Key & Default value & Description\\
+ \hline
+ \verb|tubes/scale| & \verb|1| & scale factor \\
+ \verb|tubes/width| & \verb|1| & relative width \\
+ \verb|tubes/height| & \verb|1.4| & relative height \\
+ \verb|tubes/tube radius| & \verb|0.40| & radius of tube circle \\
+ \verb|tubes/anode distance| & \verb|0.40| & distance from center \\
+ \verb|tubes/anode width| & \verb|0.40| & width of an anode/plate \\
+ \verb|tubes/grid protrusion| & \verb|0.25| & distance from center \\
+ \verb|tubes/grid dashes| & \verb|5| & number of grid dashes \\
+ \verb|tubes/grid separation| & \verb|0.2| & separation between grids \\
+ \verb|tubes/grid shift| & \verb|0.0| & y shift of grids from center \\
+ \verb|tubes/cathode distance| & \verb|0.40| & distance from grid \\
+ \verb|tubes/cathode width| & \verb|0.40| & width of a cathode \\
+ \verb|tubes/cathode corners| & \verb|0.06| & corners of the cathode wire \\
+ \verb|tubes/cathode right extend| & \verb|0.075| & extension at the right side \\
+ \verb|tubes/filament distance| & \verb|0.1| & distance from cathode \\
+ \verb|tubes/filament angle| & \verb|15| & angle from the centerpoint \\
+\end{tabular}
+
+Conventionally, the model of the tube is indicated at the \verb|east| anchor:
+
+\begin{LTXexample}[varwidth]
+\ctikzset{tubes/width=1.4}
+\ctikzset{tubes/height=1}
+
+\begin{circuitikz}
+\draw (0,0) node[triode] (Tri) {};
+\draw (Tri.east) node[right] {12AX7};
+\end{circuitikz}
+\end{LTXexample}
+
+Example triode amplifier:
+
+\begin{lstlisting}
+\begin{circuitikz}
+\draw (0,0) node (start) {}
+ to[sV=$V_i$] ++(0,2+\ctikzvalof{tubes/height})
+ to[C=$C_i$] ++(2,0) node (Rg) {}
+ to[R=$R_g$] (Rg |- start)
+(Rg) to[short,*-] ++(1,0)
+ node[triode,anchor=control] (Tri) {} ++(2,0)
+(Tri.cathode) to[R=$R_c$,-*] (Tri.cathode |- start)
+(Tri.anode) to [R=$R_a$] ++(0,2)
+ to [short] ++(3.5,0) node(Vatop) {}
+ to [V<=$V_a$] (Vatop |- start)
+ to [short] (start)
+(Tri.anode) ++(0,0.2) to[C=$C_o$,*-o] ++(2,0)
+(Tri.cathode) ++(0,-0.2) to[short,*-] ++(1.5,0) node(Cctop) {}
+ to[C=$C_c$,-*] (start -| Cctop)
+;
+\draw[red,thin,dashed] (Tri.north west) rectangle (Tri.south east);
+\draw (Tri.east) node[right] {12AX7};
+\end{circuitikz}
+\end{lstlisting}
+
+\begin{circuitikz}
+\draw (0,0) node (start) {}
+ to[sV=$V_i$] ++(0,2+\ctikzvalof{tubes/height})
+ to[C=$C_i$] ++(2,0) node (Rg) {}
+ to[R=$R_g$] (Rg |- start)
+(Rg) to[short,*-] ++(1,0)
+ node[triode,anchor=control] (Tri) {} ++(2,0)
+(Tri.cathode) to[R=$R_c$,-*] (Tri.cathode |- start)
+(Tri.anode) to [R=$R_a$] ++(0,2)
+ to [short] ++(3.5,0) node(Vatop) {}
+ to [V<=$V_a$] (Vatop |- start)
+ to [short] (start)
+(Tri.anode) ++(0,0.2) to[C=$C_o$,*-o] ++(2,0)
+(Tri.cathode) ++(0,-0.2) to[short,*-] ++(1.5,0) node(Cctop) {}
+ to[C=$C_c$,-*] (start -| Cctop)
+;
+\draw[red,thin,dashed] (Tri.north west) rectangle (Tri.south east);
+\draw (Tri.east) node[right] {12AX7};
+\end{circuitikz}
+
+The \texttt{magnetron} shape will also scale with \texttt{tubes/scale}.
+
+\begin{groupdesc}
+ \circuitdesc*{magnetron}{Magnetron}{}( anode/-90/0.2, cathode1/135/0.2,
+ cathode2/45/0.2, left/180/0.2, right/0/0.2, top/90/0.4 )
+\end{groupdesc}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (0,-2)node[rground](gnd){} to[voltage source,v<={HV}]++(0,3)--++(1,0)to[V,n=DC]++(2,0);
+\draw (2,-1) node[magnetron,scale=1](magn){};
+\draw (DC.left)++(-0.2,0)to [short,*-] ++(0,-1) to [short] (magn.cathode1);
+\draw (DC.right)++(0.2,0)to [short,*-] ++(0,-1) to [short] (magn.cathode2);
+\draw (magn.anode) to [short] (magn.anode|-gnd) node[rground]{};
+\draw (magn.cathode1)node[above]{$1$};
+\draw (magn.cathode2)node[above]{$2$};
+\draw[->](magn.east) --++(1,0)node[right]{$RF_{out}$};
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{RF components}\label{sec:RF}
+
+For the RF components, similarly to the grounds and supply rails, the \texttt{center} anchor is put on the connecting point of the symbol, so that you can use them directly in a \texttt{path} specification.
+
+Notes that in the transmission and receiving antennas, the ``waves'' are outside the geographical anchors.
+
+\begin{groupdesc}
+ \circuitdesc*{bareantenna}{Bare Antenna}{A}( top/90/0.1, bottom/180/0.3, left/180/0.3, right/45/0.3, center/0/0.3 )
+ \circuitdesc*{bareTXantenna}{Bare TX Antenna}{Tx}( top/90/0.1, center/180/0.3, waves/90/0.3 )
+ \circuitdesc*{bareRXantenna}{Bare RX Antenna}{Rx}( top/90/0.1, center/0/0.3, waves/90/0.3 )
+ \circuitdesc{waves}{Waves}{}( north/90/0.4, north east/45/0.4, east/-45/0.4, south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4,
+ left/135/0.2, top/45/0.2, right/45/0.2, bottom/-45/0.2 )
+ \circuitdescbip*{mstline}{Microstrip transmission line\footnotemark}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+ \circuitdesc*{mslstub}{Microstrip linear stub}{text}(left/135/0.2, right/45/0.2, center/-45/0.3)
+ \circuitdesc*{msport}{Microstrip port}{T}(left/135/0.2, right/45/0.2, center/-45/0.3)
+ \circuitdesc*{msrstub}{Microstrip radial stub}{}(left/135/0.2, right/45/0.2, center/-45/0.3)
+ \footnotetext{This four components were suggested by \texttt{@tcpluess} on GitHub}
+ \circuitdesc{antenna}{Legacy antenna (with tails)}{}( center/0/0.3 )
+ \circuitdesc{rxantenna}{Legacy receiving antenna (with tails)}{}
+ \circuitdesc{txantenna}{Legacy transmitting antenna (with tails)}{}
+ \circuitdesc*{tlinestub}{Transmission line stub}{}
+ \circuitdescbip*[tline]{TL}{Transmission line}{transmission line, tline}
+ \circuitdesc{match}{match}{}
+\end{groupdesc}
+
+\subsubsection{RF elements customization}
+
+The RF elements can be scaled using the key \texttt{RF/scale}, default \texttt{1.0}.
+
+\subsubsection{Microstrip customization}
+
+The microstrip linear components' (\texttt{mstline}, \texttt{mslstub}, \texttt{msport}) heights can be changed by setting the parameter \texttt{bipoles/mstline/height} (for the three of them, default 0.3). The widths are specified in \texttt{bipoles/mstline/width} for the first two and by \texttt{monopoles/msport/width} for the port (defaults: 1.2, 0.5).
+
+For the length parameter of the transmission line there is a shortcut in the form of the direct parameter \texttt{mstlinelen}.
+
+\begin{LTXexample}[varwidth=true, pos=t]
+\begin{circuitikz}
+ \draw (0,0) node[msport, right, xscale=-1]{}
+ to[mstline, -o] ++(3,0) coordinate(there)
+ to[mstline, mstlinelen=2, l=longer, o-*] ++(4,0)
+ coordinate(here) -- ++(0.5,0) node[mslstub, fill=yellow]{stub}
+ (here) -- ++(0,0.5) node[mslstub, rotate=90, mstlinelen=0.5]{short};
+ \draw (there) to[short, o-] ++(0, 0.5) node[msrstub]{};
+ \draw (here) -- ++(0, -0.5) node[msrstub, yscale=-1]{};
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Electro-Mechanical Devices}
+
+The internal part of the motor and generator are, by default, filled white (to avoid compatibility problems with older versions of the package).
+
+\begin{groupdesc}
+ \circuitdesc*{elmech}{Motor}{M}(bottom/-90/0.2, left/180/0.2, right/0/0.2, top/90/0.4, 45/45/0.2)
+ \circuitdesc*{elmech}{Generator}{G}(block down right/0/0.2, block north east/0/0.2)
+\end{groupdesc}
+
+\subsubsection{Electro-Mechanical Devices anchors}
+
+Apart from the standard geographical anchors, \texttt{elmech} has the border anchors (situated on the inner circle) and the following anchors on the ``block'':
+
+\begin{quote}
+\begin{circuitikz}
+ \def\coordx(#1)[#2:#3]#4{node[circle, #4, draw, inner sep=1pt,pin={[#4, inner sep=0.5pt, font=\scriptsize, pin distance=#2cm, pin edge={#4, }]#3:#1}](#1){}}
+ \node [elmech](T) at(0,0) {A};
+ \foreach \a/\d/\t in {block north east/0.2/45, block south east/0.2/-45,
+ block south west/0.2/-135, block north west/0.1/135, 150/0.1/150,
+ 180/0.1/180, 210/0.1/210, 60/0.4/-15, -60/0.4/15}
+ \path (T.\a) \coordx(\a)[\d:\t]{red};
+ \node [elmech](T) at(6,0) {B};
+ \foreach \a/\d/\t in {block up right/0.2/45, block down right/0.2/-45,
+ block down left/0.2/-135, block up left/0.1/135, north/0.3/90,
+ south/0.3/-90, east/0.3/0, west/0.3/180}
+ \path (T.\a) \coordx(\a)[\d:\t]{red};
+\end{circuitikz}
+\end{quote}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (2,0) node[elmech](motor){M};
+\draw (motor.north) |-(0,2) to [R] ++(0,-2) to[dcvsource]++(0,-2) -| (motor.bottom);
+\draw[thick,->>](motor.right)--++(1,0)node[midway,above]{$\omega$};
+\end{circuitikz}
+\end{LTXexample}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (2,0) node[elmech](motor){};
+\draw (motor.north) |-(0,2) to [R] ++(0,-2) to[dcvsource]++(0,-2) -| (motor.bottom);
+\draw[thick,->>](motor.center)--++(1.5,0)node[midway,above]{$\omega$};
+\end{circuitikz}
+\end{LTXexample}
+
+The symbols can also be used along a path, using the transistor-path-syntax(\texttt{T} in front of the shape name, see section \ref{sec:transasbip}). Don't forget to use parameter $n$ to name the node and get access to the anchors:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (0,0) to [Telmech=M,n=motor] ++(0,-3) to [Telmech=M] ++(3,0) to [Telmech=G,n=generator] ++(0,3) to [R] (0,0);
+\draw[thick,->>](motor.left)--(generator.left)node[midway,above]{$\omega$};
+\end{circuitikz}
+\end{LTXexample}
+
+
+
+\subsection{Double bipoles (transformers)}
+
+Transformers automatically use the inductor shape currently selected. These are the three possibilities:
+\begin{groupdesc}
+ \ctikzset{inductor=cute}
+ \circuitdesc{transformer}{Transformer (cute inductor)}{}( A1/180/0.1,
+ A2/180/0.1, B1/0/0.1, B2/0/0.1,
+ inner dot A1/-135/0.2, inner dot A2/135/0.2, inner dot B1/-45/0.1,
+ inner dot B2/45/0.1 )
+ \ctikzset{inductor=american}
+ \circuitdesc{transformer}{Transformer (american inductor)}{}( %
+ outer dot A1/180/0.2, outer dot A2/180/0.2,
+ outer dot B1/0/0.2, outer dot B2/0/0.2 )
+ \ctikzset{inductor=european}
+ \circuitdesc{transformer}{Transformer (european inductor)}{}
+ \circuitdesc*{gyrator}{Gyrator}{}
+\end{groupdesc}
+
+
+Transformers with core are also available:
+\begin{groupdesc}
+ \ctikzset{inductor=cute}
+ \circuitdesc{transformer core}{Transformer core (cute inductor)}{}
+ \ctikzset{inductor=american}
+ \circuitdesc{transformer core}{Transformer core (american inductor)}{}
+ \ctikzset{inductor=european}
+ \circuitdesc{transformer core}{Transformer core (european inductor)}{}
+ \ctikzset{inductor=cute} % reset default
+\end{groupdesc}
+
+\subsubsection{Double dipoles anchors}
+
+All the double bipoles/quadrupoles have the four anchors, two for each port.
+The first port, to the left, is port \texttt{A}, having the anchors \texttt{A1} (up) and \texttt{A2} (down); same for port \texttt{B}.
+
+They also expose the \texttt{base} anchor, for labelling, and anchors for setting dots or signs to specify polarity.
+The set of anchors, to which the standard ``geographical'' \texttt{north}, \texttt{north east}, etc. is here:
+
+\begin{quote}
+\begin{circuitikz}[cute inductors,
+ ]
+ \def\coordx(#1)[#2:#3]#4{node[circle, #4, draw, inner sep=1pt,pin={[#4, overlay, inner sep=0.5pt, font=\scriptsize, pin distance=#2cm, pin edge={#4, overlay,}]#3:#1}](#1){}}
+ \foreach \comp/\pos/\case in {%
+ transformer/0/0%
+ ,transformer core/4/1%
+ ,gyrator/8/2%
+ }{
+ \draw (\pos, 0) node[\comp](T){};
+ \ifcase\case
+ \foreach \a/\d/\t in {inner dot A1/0.2/75, inner dot A2/0.2/-75, inner dot B1/0.1/-45, inner dot B2/0.1/45}
+ \path (T.\a) \coordx(\a)[\d:\t]{red};
+ \or
+ \foreach \a/\d/\t in {outer dot A1/0.2/75, outer dot A2/0.2/-75, outer dot B1/0.2/-45, outer dot B2/0.2/45}
+ \path (T.\a) \coordx(\a)[\d:\t]{blue};
+ \or
+ \foreach \a/\t in {A1/120, A2/-120, B1/120, B2/-120, base/-90}
+ \path (T.\a) \coordx(\a)[0.2:\t]{green!50!black};
+ \fi
+ }
+\end{circuitikz}
+\end{quote}
+
+Also, the standard ``geographical'' \texttt{north}, \texttt{north east}, etc. are defined.
+A couple of examples follow:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[transformer] (T) {}
+ (T.A1) node[anchor=east] {A1}
+ (T.A2) node[anchor=east] {A2}
+ (T.B1) node[anchor=west] {B1}
+ (T.B2) node[anchor=west] {B2}
+ (T.base) node{K}
+ (T.inner dot A1) node[circ]{}
+ (T.inner dot B2) node[circ]{}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[gyrator] (G) {}
+ (G.A1) node[anchor=east] {A1}
+ (G.A2) node[anchor=east] {A2}
+ (G.B1) node[anchor=west] {B1}
+ (G.B2) node[anchor=west] {B2}
+ (G.base) node{K}
+;\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Double dipoles customization}
+
+Transformers are in the \texttt{inductors} class (also the gyrator\dots), so they scale with the key \texttt{inductors/scale}.
+
+You can change the aspect of a quadpole using the corresponding parameters \texttt{quadpoles/*/width} and \texttt{quadpoles/*/heigth} (substitute the star for \texttt{transformer}, \texttt{transformer core} or \texttt{gyrator}; default value is \texttt{1.5} for all). You have to be careful to not choose value that overlaps the components!
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{quadpoles/transformer/width=1,
+ quadpoles/transformer/height=2}
+ \draw (0,0) node[transformer] (T) {}
+ (T.base) node{K}
+ (T.inner dot A1) node[circ]{}
+ (T.inner dot B2) node[circ]{};
+\end{circuitikz}
+\end{LTXexample}
+
+Transformers also inherits the \texttt{inductors/scale} (see~\ref{sec:tweak-l}) and similar parameters. It's your responsibility to set the aforementioned parameters if you change the scale or width of inductors.
+
+Another very useful parameter is \texttt{quadpoles/*/inner} (default \texttt{0.4}) that determine which part of the component is the ``vertical'' one. So, setting that parameter to 1 will eliminate the horizontal part of the component (obviously, to maintain the general aspect ratio you need to change the width also):
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (0,0) node[transformer] (T) {}
+ (T.A1) node[anchor=east] {A1}
+ (T.A2) node[anchor=east] {A2}
+ (T.B1) node[anchor=west] {B1}
+ (T.B2) node[anchor=west] {B2}
+ (T.base) node{K} ;
+\ctikzset{quadpoles/transformer/inner=1, quadpoles/transformer/width=0.6}
+\draw (0,-3) node[transformer] (P) {}
+ (P.base) node{T}
+ (P.inner dot A2) node[ocirc]{}
+ (P.inner dot B2) node[ocirc]{};
+\end{circuitikz}
+\end{LTXexample}
+
+This can be useful if you want to put seamlessly something in series with either side of the component; for simplicity, you have a style setting \texttt{quadpoles style} to toggle between the standard shape of double bipoles (called \texttt{inward}, default) and the one without horizontal leads (called \texttt{inline}):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{inductor=cute, quadpoles style=inline}
+\draw
+ (0,0) to[R] ++(0,-2)
+ node[transformer, anchor=A1](T){}
+ (T.A2) node[ground](GND){}
+ (T.inner dot A1) node[font=\small\boldmath]{$\oplus$}
+ (T.inner dot B2) node[]{$+$}
+ (T.B1) node[above, ocirc]{}
+ (T.B2) -- (GND);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Amplifiers}
+
+\begin{groupdesc}
+ \circuitdesc*{op amp}{Operational amplifier}{}( +/180/0.2, -/180/0.2, out/0/0.2, up/90/0.2, down/-90/0.2 )
+ \circuitdesc*{en amp}{Operational amplifier compliant to DIN/EN 60617 standard}{}
+ \circuitdesc*{fd op amp}{Fully differential operational amplifier\footnotemark}{}( out +/0/0.2, out -/0/0.2 )
+ \footnotetext{Contributed by Kristofer M. Monisit.}
+ \circuitdesc*{gm amp}{transconductance amplifier}{}
+ \circuitdesc*{inst amp}{plain instrumentation amplifier}{}( up/90/0.2, down/-90/0.2, refv up/45/0.2, refv down/-45/0.2 )
+ \circuitdesc*{fd inst amp}{Fully differential instrumentation amplifier}{}
+ \circuitdesc*{inst amp ra}{instrumentation amplifier with amplification resistance terminals}{}( ra+/180/0.1, ra-/180/0.1 )
+ \circuitdesc*{plain amp}{Plain amplifier}{}(+/180/0.2, -/180/0.2, out/0/0.2, up/90/0.2)
+ \circuitdesc*{buffer}{Buffer}{}(in/180/0.2, out/0/0.2)
+\end{groupdesc}
+
+\subsubsection{Amplifiers anchors}
+
+The op amp defines the inverting input (\texttt{-}), the non-inverting input (\texttt{+}) and the output (\texttt{out}) anchors:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[op amp] (opamp) {}
+ (opamp.+) node[left] {$v_+$}
+ (opamp.-) node[left] {$v_-$}
+ (opamp.out) node[right] {$v_o$}
+ (opamp.up) --++(0,0.5) node[vcc]{5\,\textnormal{V}}
+ (opamp.down) --++(0,-0.5) node[vee]{-5\,\textnormal{V}}
+;\end{circuitikz}
+\end{LTXexample}
+
+There are also two more anchors defined, \texttt{up} and \texttt{down}, for the power supplies:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[op amp] (opamp) {}
+ (opamp.+) node[left] {$v_+$}
+ (opamp.-) node[left] {$v_-$}
+ (opamp.out) node[right] {$v_o$}
+ (opamp.down) node[ground] {}
+ (opamp.up) ++ (0,.5) node[above] {\SI{12}{\volt}}
+ -- (opamp.up)
+;\end{circuitikz}
+\end{LTXexample}
+
+The fully differential op amp defines two outputs:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[fd op amp] (opamp) {}
+ (opamp.+) node[left] {$v_+$}
+ (opamp.-) node[left] {$v_-$}
+ (opamp.out +) node[right] {out +}
+ (opamp.out -) node[right] {out -}
+ (opamp.down) node[ground] {}
+;\end{circuitikz}
+\end{LTXexample}
+
+The instrumentation amplifier inst amp defines also references (normally you use the "down", unless you are flipping the component):
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[inst amp] (opamp) {}
+ (opamp.+) node[left] {$v_+$}
+ (opamp.-) node[left] {$v_-$}
+ (opamp.out) node[right] {out}
+ (opamp.up) node[vcc]{}
+ (opamp.down) node[vee] {}
+ (opamp.refv down) node[ground]{}
+ (opamp.refv up) to[short, -o] ++(0,0.3)
+;\end{circuitikz}
+\end{LTXexample}
+
+The fully diffential instrumentation amplifier inst amp defines two outputs:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[fd inst amp] (opamp) {}
+ (opamp.+) node[left] {$v_+$}
+ (opamp.-) node[left] {$v_-$}
+ (opamp.out +) node[right] {out +}
+ (opamp.out -) node[right] {out -}
+ (opamp.up) node[vcc]{}
+ (opamp.down) node[vee] {}
+ (opamp.refv down) node[ground]{}
+ (opamp.refv up) to[short, -o] ++(0,0.3)
+;\end{circuitikz}
+\end{LTXexample}
+
+The instrumentation amplifier with resistance terminals (\texttt{inst amp ra}) defines also terminals to add an amplification resistor:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[inst amp ra] (opamp) {}
+ (opamp.+) node[left] {$v_+$}
+ (opamp.-) node[left] {$v_-$}
+ (opamp.out) node[right] {out}
+ (opamp.up) node[vcc]{}
+ (opamp.down) node[vee] {}
+ (opamp.refv down) node[ground]{}
+ (opamp.refv up) to[short, -o] ++(0,0.3)
+ (opamp.ra-) to[R] (opamp.ra+)
+;\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Amplifiers customization}
+
+You can scale the amplifiers using the key \texttt{amplifiers/scale} and setting it to something different from \texttt{1.0}. The font used for symbols will not scale, so it's your responsibility to change it if the need arises.
+
+All these amplifier have the possibility to flip input and output (if needed) polarity. You can change polarity of the input with the
+\texttt{noinv input down} (default) or \texttt{noinv input up} key; and the output with \texttt{noinv output up} (default) or \texttt{noinv output down} key:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[fd inst amp,
+ noinv input up,
+ noinv output down] (opamp) {}
+ (opamp.+) node[left] {$v_+$}
+ (opamp.-) node[left] {$v_-$}
+ (opamp.out +) node[right] {out +}
+ (opamp.out -) node[right] {out -}
+ (opamp.up) node[vcc]{}
+ (opamp.down) node[vee] {}
+ (opamp.refv down) node[ground]{}
+ (opamp.refv up) to[short, -o] ++(0,0.3)
+;\end{circuitikz}
+\end{LTXexample}
+
+When you use the \texttt{noinv input/output ...} keys the anchors (\texttt{+}, \texttt{-}, \texttt{out +}, \texttt{out -}) will change with the effective position of the terminals. You have also the anchors \texttt{in up}, \texttt{in down}, \texttt{out up}, \texttt{out down} that will not change with the positive or negative sign.
+
+\paragraph{European-style amplifier customization}
+
+Thanks to the suggestions from David Rouvel (\email{david.rouvel@iphc.cnrs.fr}) there are several possible customization for the European-style amplifiers.
+
+Since 0.9.0, the default appearance of the symbol has changed to be more in line with the standard; notice that to have a bigger triangle by default we should require more packages, and I fear {Con\TeX t} compatibility; but see later on how to change it. Notice that the font used for the symbol is defined in \texttt{tripoles/en amp/font2} and that the font used for the \texttt{+} and \texttt{-} symbols is \texttt{tripoles/en amp/font}.
+
+You can change the distances of the inputs, using \texttt{tripoles/en amp/input height} (default 0.3):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{tripoles/en amp/input height=0.45}
+ \draw (0,0)node[en amp](E){}
+ (E.out) node[right] {$v_{\mathrm{out}}$}
+ (E.-) node[left] {$v_{\mathrm{in}-}$}
+ (E.+) node[left] {$v_{\mathrm{in}+}$};
+\end{circuitikz}
+\end{LTXexample}
+
+and of course the key \texttt{noinv input up} is fully functional:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{tripoles/en amp/input height=0.45}
+ \draw (0,0)node[en amp, noinv input up](E){}
+ (E.out) node[right] {$v_{\mathrm{out}}$}
+ (E.-) node[left] {$v_{\mathrm{in}-}$}
+ (E.+) node[left] {$v_{\mathrm{in}+}$};
+\end{circuitikz}
+\end{LTXexample}
+
+To flip the amplifier in the horizontal direction, you can use \texttt{xscale=-1} as usual:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{tripoles/en amp/input height=0.45}
+ \draw (0,0)node[en amp, xscale=-1, noinv input up](E){}
+ (E.out) node[left] {$v_{\mathrm{out}}$}
+ (E.-) node[right] {$v_{\mathrm{in}-}$}
+ (E.+) node[right] {$v_{\mathrm{in}+}$};
+\end{circuitikz}
+\end{LTXexample}
+
+Notice that the label is fully mirrored, so check below for the generic way to change this.
+
+You can use the new key \texttt{en amp text A} to change the infinity symbol with an A:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0)node[en amp, en amp text A](E){}
+ (E.out) node[right] {$v_{\mathrm{out}}$}
+ (E.-) node[left] {$v_{\mathrm{in}-}$}
+ (E.+) node[left] {$v_{\mathrm{in}+}$} ;
+\end{circuitikz}
+\end{LTXexample}
+
+And if you want, you can completely change the text using the key \texttt{en amp text={}}, which by default is \verb|$\mathstrut{\triangleright}\,{\infty}$|:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0)node[en amp, en amp text={%
+ ${\triangleright}$ \small 200}](E){}
+ (E.out) node[right] {$v_{\mathrm{out}}$}
+ (E.-) node[left] {$v_{\mathrm{in}-}$}
+ (E.+) node[left] {$v_{\mathrm{in}+}$} ;
+\end{circuitikz}
+\end{LTXexample}
+
+Notice two things here: the first, that \verb|\triangleright| is enclosed in braces to remove the default spacing it has as a binary operator, and that \texttt{en amp text A} is simply a shortcut for
+
+\begin{lstlisting}
+ en amp text={$\mathstrut{\triangleright}\,\mathrm{A}$}
+\end{lstlisting}
+
+
+To combine flipping with a generic label you just do:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0)node[en amp, xscale=-1, en amp text A](E){}
+ (E.out) node[left] {$v_{\mathrm{out}}$}
+ (E.-) node[right] {$v_{\mathrm{in}-}$}
+ (E.+) node[right] {$v_{\mathrm{in}+}$} ;
+\end{circuitikz}
+\end{LTXexample}
+
+But notice that the ``A'' is also flipped by the \texttt{xscale} parameter. So the solution in this case is to use \texttt{scalebox}, like this:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0)node[en amp, xscale=-1, en amp text={%
+ ${\triangleright}$ \scalebox{-1}[1]{\small 200}}](E){}
+ (E.out) node[left] {$v_{\mathrm{out}}$}
+ (E.-) node[right] {$v_{\mathrm{in}-}$}
+ (E.+) node[right] {$v_{\mathrm{in}+}$} ;
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Switches and buttons}
+
+Switches and button come in to-style (the simple ones and the pushbuttons), and as nodes.
+
+The switches can be scaled with the key \texttt{switches/scale} (default \texttt{1.0}). Notice that scaling the switches will not scale the poles, which are controlled with their own parameters (see section~\ref{sec:terminals}).
+
+\subsubsection{Traditional switches}
+These are all of the to-style type:
+
+\begin{groupdesc}
+ \circuitdescbip[cspst]{switch}{Switch}{spst}
+ \circuitdescbip[cspst]{closing switch}{Closing switch}{cspst}
+ \circuitdescbip[ospst]{opening switch}{Opening switch}{ospst}
+ \circuitdescbip[nos]{normal open switch}{Normally open switch}{nos}
+ \circuitdescbip[ncs]{normal closed switch}{Normally closed switch}{ncs}
+ \circuitdescbip[pushbutton]{push button}{Normally open push button}{normally open push button, nopb}
+ \circuitdescbip[ncpushbutton]{normally closed push button}{Normally closed push button}{ncpb}
+ \circuitdescbip[toggleswitch]{toggle switch}{Toggle switch}{}
+\end{groupdesc}
+
+while this is a node-style component:
+
+\begin{groupdesc}
+ \circuitdesc{spdt}{spdt}{}( in/180/0.2, out 1/0/0.2, out 2/0/0.2 )
+\end{groupdesc}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[spdt] (Sw) {}
+ (Sw.in) node[left] {in}
+ (Sw.out 1) node[right] {out 1}
+ (Sw.out 2) node[right] {out 2}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) to[C] (1,0) to[toggle switch , n=Sw] (2.5,0)
+ -- (2.5,-1) to[battery1] (1.5,-1) to[R] (0,-1) -| (0,0)
+ (Sw.out 2) -| (2.5, 1) to[R] (0,1) -- (0,0)
+;\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Cute switches}
+These switches have been introduced after version 0.9.0, and they come in also in to-style and in node-style, but they are size-matched so that they can be used together in a seamless way.
+
+The path element (to-style) are:
+\begin{groupdesc}
+ \circuitdescbip[cuteclosedswitch]{cute closed switch}{Cute closed switch}{ccsw}(mid/90/0.2, in/-135/0.2, out/-45/0.2)
+ \circuitdescbip[cuteopenswitch]{cute open switch}{Cute open switch}{cosw}(out/45/0.2)[out.s/-90/0.2]
+ \circuitdescbip[cuteclosingswitch]{cute closing switch}{Cute closing switch}{ccgsw}
+ \circuitdescbip[cuteopeningswitch]{cute opening switch}{Cute opening switch}{cogsw}
+\end{groupdesc}
+while the node-style components are the single-pole, double-throw (\texttt{spdt}) ones:
+\begin{groupdesc}
+ \circuitdesc{cute spdt up}{Cute spdt up}{}( in/180/0.2, out 1/0/0.2, out 2/0/0.2 , mid/0/0.4)
+ \circuitdesc{cute spdt mid}{Cute spdt mid}{}
+ \circuitdesc{cute spdt down}{Cute spdt down}{}(mid/0/0.4)
+ \circuitdesc{cute spdt up arrow}{Cute spdt up with arrow}{}
+ \circuitdesc{cute spdt mid arrow}{Cute spdt mid with arrow}{}
+ \circuitdesc{cute spdt down arrow}{Cute spdt down with arrow}{}
+\end{groupdesc}
+
+\paragraph{Cute switches anchors}
+
+The nodes-style switches have the following anchors:
+
+\bigskip
+\begin{circuitikz}
+ \def\coorda(#1)<#2>{node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\small, pin distance=0.1cm, pin edge={red, overlay,}]#2:#1}](#1){}}
+ \path (0,-1) -- (3,1); %bbox
+ \draw (0, 0) node[spdt](S){};
+ \foreach \a/\b in {center/0, in/-135, out 1/45, out 2/-45}
+ \path (S.\a) \coorda(\a)<\b>;
+ \draw (3, 0) node[cute spdt up arrow](CS){};
+ \foreach \a/\b in {center/0, in/-135, out 1/45, out 2/-45, mid/135}
+ \path (CS.\a) \coorda(\a)<\b>;
+ \draw (6, 0) node[cute spdt up arrow](CS2){};
+ \foreach \a/\b in {cin/-135, cout 1/45, cout 2/-45}
+ \path (CS2.\a) \coorda(\a)<\b>;
+\end{circuitikz}
+
+Please notice the position of the normal anchors at the border of the \texttt{ocirc} shape for the cute switches; they are thought to be compatible with an horizontal wire going out.
+Additionaly, you have the \texttt{cin}, \texttt{cout 1} y \texttt{cout 2} which are anchors on the center of the contacts.
+
+For more complex situations, the contact nodes are available\footnote{Thanks to \texttt{@marmot} on \href{https://tex.stackexchange.com/a/492599/38080}{tex.stackexchange.com}.} using the syntax \emph{name of the node}\texttt{-in}, \dots\texttt{-out 1} and \dots\texttt{-out 2}, with all their anchors.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (0,0) node[cute spdt up] (S1) {}
+ (S1.in) node[left] {in}
+ (S1.out 1) node[right] {out 1};
+ \draw (0,-2) node[cute spdt up,
+ /tikz/circuitikz/bipoles/cuteswitch/height=0.8] (S2) {}
+ (S2.in) node[left] {in}
+ (S2.out 2) node[right] {out 2};
+ \draw [red] (S1-in.s) -- (S2-in.n);
+ \draw [blue] (S1-out 2.s) -- (S2-out 1.n);
+\end{circuitikz}
+\end{LTXexample}
+
+The \texttt{mid} anchor in the cute switches (both path- and node-style) can be used to combine switches to get more complex configurations:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,1.4) node[cute spdt up](S1){};
+ \draw (0,0) node[cute spdt up](S2){};
+ \draw (0,-1) node[cuteclosedswitchshape, yscale=-1](S3){};
+ \draw [densely dashed] (S1.mid)--(S2.mid)--(S3.mid);
+\end{circuitikz}
+\end{LTXexample}
+
+\paragraph{Cute switches customization}
+
+You can use the key \texttt{bipoles/cuteswitch/thickness} to decide the thickness of the switch lever.
+The units are the diameter of the \texttt{ocirc} connector, and the default is \texttt{1}.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{bipoles/cuteswitch/thickness=0.5}
+ \draw (0,1.4) node[cute spdt up](S1){};
+ \draw (0,0) node[cute spdt up](S2){};
+ \draw (0,-1) node[cuteclosedswitchshape, yscale=-1](S3){};
+ \draw [densely dashed] (S1.mid)--(S2.mid)--(S3.mid);
+\end{circuitikz}
+\end{LTXexample}
+
+Finally, the switches are normally drawn using the \texttt{ocirc} shape, but you can change it, as in the following example, with the key \texttt{bipoles/cuteswitch/shape}. Be careful that the shape is used with its defaults (which can lead to strange results), and that the standard anchors will be correct only for \texttt{circ} and \texttt{ocirc} shapes, so you have to use the internal node syntax to connect it.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \begin{scope}
+ \ctikzset{bipoles/cuteswitch/thickness=0.5,
+ bipoles/cuteswitch/shape=circ}
+ \draw (0,2) node[cute spdt up](S1){};
+ \ctikzset{bipoles/cuteswitch/thickness=0.25,
+ bipoles/cuteswitch/shape=emptyshape}
+ \draw (0,0) node[cute spdt up](S2){};
+ \draw (S2.cin) node[draw, inner sep=2pt]{};
+ \draw (S2.cout 1) node[draw, inner sep=2pt]{};
+ \draw (S2.cout 2) node[draw=red, inner sep=2pt]{};
+ \end{scope}
+ \draw (0,-2) node[cuteclosedswitchshape, yscale=-1](S3){};
+ \draw [densely dashed] (S1.mid)--(S2.mid)--(S3.mid);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsubsection{Rotary switches}
+
+Rotary switches are a kind of generic multipole switches; they are implemented as a strongly customizable element (and a couple of styles to simplify its usage). The basic element is the following one, and it has the same basic anchors of the cute switches, included the access to internal nodes (shown in blue here).
+
+\begin{groupdesc}
+\circuitdesc{rotaryswitch}{Rotary switch}{}(in/-180/0.2, cin/145/0.2, center/-90/0.2, mid/0/0.4, out 1/0/0.2,
+cout 1/180/0.2)[out 1.n/90/0.2, out 4.w/0/0.3]
+\end{groupdesc}
+
+Notice that the name of the shape is \texttt{rotaryswitch}, no spaces.
+The default rotary switch component has 5 channels (this is set in the parameter \texttt{multipoles/rotary/channels}), spanning form \SI{-60}{\degree} to \SI{60}{\degree} (parameter \texttt{multipoles/rotary/angle}) and with the wiper at \SI{20}{\degree} (parameter \texttt{multipoles/rotary/wiper}).
+
+Moreover, there are by default no arrows on the wiper; if needed, you can change this default setting the parameter \texttt{multipoles/rotary/arrow} which can assume the values \texttt{none}, \texttt{cw} (clockwise), \texttt{ccw} (counterclockwise) or \texttt{both}.
+
+To simplify the usage of the component, a series of styles are defined: \texttt{rotary switch=\textsl{<channels>} in \textsl{<angle>} wiper \textsl{<wiper angle>}} (notice the space in the name of the style!). Using \texttt{rotary switch} without parameters will generate a default switch.
+
+To add arrows, you can use the styles \texttt{rotary switch -} (no arrow, whatever the default), \texttt{rotary switch <-} (counterclockwise arrow), \texttt{rotary switch ->} (clockwise) and \texttt{rotary switch <->} (both).
+
+Notice that the defaults of the styles are the same as the default values of the parameters, but that if you change globally the defaults using the keys mentioned above, you only change the defaults for the ``bare'' component \texttt{rotaryswitch}, not for the styles.
+
+
+\begin{LTXexample}[varwidth=true, pos=t, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+\ctikzset{multipoles/rotary/arrow=both}
+\draw (0,0) -- ++(1,0) node[rotary switch <-=8 in 120 wiper 40, anchor=in](A){};
+\draw (3,0) -- ++(1,0) node[rotary switch, anchor=in](B){}; % default values
+\draw[red] (A.out 4) -| (3,0);
+\draw[blue] (A-out 2.n) -- ++(0,0.5) -| (B-out 1.n);
+\draw (B.out 3) -- ++(1,0) node[rotary switch -=5 in 90 wiper 15, anchor=in](C){};
+\draw (C.out 3) -- ++(1,0) node[rotary switch ->, xscale=-1, anchor=out 3](D){};
+\draw[green, dashed] (B.mid) -- ++(-.5,-1) -| (C.mid);
+\end{circuitikz}
+\end{LTXexample}
+
+\paragraph{Rotary switch anchors}
+
+Rotary switches anchors are basically the same as the cute switches, including access (with the \texttt{\textsl{<node name>}-<anchor name>} notation) to the internal connection nodes. The geographical anchors work as expected, marking the limits of the component.
+
+\showanchors{rotary switch}{}(north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4, center/-120/0.3)
+\qquad
+\showanchors{rotary switch=25 in 120 wiper 10}{}(north/90/0.4, north east/45/0.4, east/0/0.4, south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4, center/-120/0.3)
+
+In addition to the anchors they have in common with the cute switches, the rotary switch has the so called ``angled'' anchors and the ``external square anchors''. \emph{Angled anchors}, called \texttt{aout 1}, \texttt{aout 2} and so forth, are anchors placed on the output poles at the same angle as the imaginary lines coming from the input pole; \emph{square anchors}, called \texttt{sqout 1}\dots, are located on an imaginary square surrounding the rotary switch on the same line.
+
+\bigskip
+
+\begin{circuitikz}
+ \begin{scope}[scale=2, transform shape]
+ \clip (-1,-.4) rectangle (1,.6);
+ \draw (0,0) node[rotary switch=9 in 90 wiper 10](Z){};
+ \draw [dashed, blue] (Z.cin) -- (Z.sqout 4);
+ \end{scope}
+ \path (Z.aout 4) \showcoord(aout 4)<-15:0.4>;
+ \path (Z.sqout 4) \showcoord(sqout 4)<0:0.4>;
+ \path (Z.out 3) \showcoord(out 3)<15:0.4>;
+ \path (Z.cout 3) \showcoord(cout 3)<180:0.4>;
+ \draw (8,0) node[rotary switch -=31 in 150 wiper 10](D){};
+ \foreach \i in {1,...,31} \draw (D.sqout \i) -- (D.aout \i);
+ \foreach \l/\a/\d in {north/90/0.2, north east/45/0.2, east/0/0.2,
+ south east/-45/0.2, south/-90/0.2, south west/-135/0.2, west/180/0.2, north west/135/0.2,
+ center/-145/0.7}
+ \path (D.ext \l) \showcoord(ext \l)<\a:\d>;
+ \path (D.aout 12) \showcoordb(aout 12)<-5:0.4>;
+ \path (D.sqout 12) \showcoordb(sqout 12)<0:0.4>;
+ \draw[blue, densely dotted] (D.ext north west) rectangle (D.ext south east);
+\end{circuitikz}
+
+The code for the diagram at the left, above, without the markings for the anchors, is:
+\begin{lstlisting}[basicstyle=\small\ttfamily]
+\begin{circuitikz}
+ \draw (8,0) node[rotary switch -=31 in 150 wiper 10](D){};
+ \foreach \i in {1,...,31} \draw (D.sqout \i) -- (D.aout \i);
+ \draw[blue, densely dotted] (D.ext north west) rectangle (D.ext south east);
+\end{circuitikz}
+\end{lstlisting}
+
+One possible application for the angled and the ``on square'' anchors is that you can use them to move radially from the output poles, for example for adding numbers:
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+\draw (0,0) node[rotary switch=13 in 120 wiper 0](S){};
+\foreach \i in {1,...,13} % requires "calc"
+ \path ($(S.aout \i)!1ex!(S.sqout \i)$)
+ node[font=\tiny\color{red}]{\i};
+\end{circuitikz}
+\end{LTXexample}
+
+Finally, notice that the value of width for the rotary switches is taken from the one for the ``cute switches'' which in turn is taken from the width of traditional \texttt{spdt} switch, so that they match (notice that the ``center'' anchor is better centered in the rotary switch, so you have to explicitly align them).
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+ \draw (0,0) node[color=blue, rotary switch=2 in 35 wiper 30,
+ anchor=in](R){};
+ \draw (0,-1) node[cute spdt up, anchor=in](C){};
+ \draw (0,-2) node[color=blue, rotary switch=3 in 35 wiper 30,
+ anchor=in](R){};
+\end{circuitikz}
+\end{LTXexample}
+
+\paragraph{Rotary switch customization}
+
+Apart from the basic customization seen above (number of channels, etc.) you can change, as in the cute switches, the shape used by the connection points with the parameter \texttt{multipoles/rotary/shape}, and the thickness of the wiper with \texttt{multipoles/rotary/thickness}. The optional arrow has thickness equal to the standard bipole thickness \texttt{bipoles/thickness} (default 2).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{multipoles/rotary/thickness=0.5}
+ \draw (0,1.6) node[rotary switch ->, color=blue](S1){};
+ \ctikzset{multipoles/rotary/shape=circ}
+ \draw (0,0) node[rotary switch ->](S2){};
+ \ctikzset{bipoles/thickness=0.5}
+ \draw (0,-1.6) node[rotary switch ->, color=red](S3){};
+\end{circuitikz}
+\end{LTXexample}
+
+Finally, the size can be changed using the parameter \texttt{tripoles/spdt/width} (default 0.85).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,2) node[rotary switch ->, color=blue](S1){};
+ \ctikzset{tripoles/spdt/width=1.6, fill=cyan,
+ multipoles/rotary/shape=osquarepole}
+ \draw (0,0) node[rotary switch ->](S2){};
+\end{circuitikz}
+\end{LTXexample}
+
+
+
+\subsection{Logic gates}
+
+Logic gates, with two or more input, are supported. Albeit in principle these components are multipoles, the are considered tripoles here, for historical reasons (when they just had two inputs).
+
+\subsubsection{American Logic gates}
+\begin{groupdesc}
+ \circuitdesc*{american and port}{American \textsc{and} port}{}( in 1/180/0.2, in 2/180/0.2, out/0/0.2 )
+ \circuitdesc*{american or port}{American \textsc{or} port}{}( bin 1/135/0.2, bin 2/-135/0.2, bout/-45/0.2 )
+ \circuitdesc*{american nand port}{American \textsc{nand} port}{}
+ \circuitdesc*{american nor port}{American \textsc{nor} port}{}
+ \circuitdesc*{american xor port}{American \textsc{xor} port}{}
+ \circuitdesc*{american xnor port}{American \textsc{xnor} port}{}
+ \circuitdesc*{american buffer port}{American \textsc{buffer} port}{}
+ \circuitdesc*{american not port}{American \textsc{not} port}{}
+\end{groupdesc}
+\subsubsection{European Logic gates}
+\begin{groupdesc}
+ \circuitdesc*{european and port}{European \textsc{and} port}{}( in 1/180/0.2, in 2/180/0.2, out/0/0.2 )
+ \circuitdesc*{european or port}{European \textsc{or} port}{}( bin 1/135/0.2, bin 2/-135/0.2, bout/-45/0.2 )
+ \circuitdesc*{european nand port}{European \textsc{nand} port}{}
+ \circuitdesc*{european nor port}{European \textsc{nor} port}{}
+ \circuitdesc*{european xor port}{European \textsc{xor} port}{}
+ \circuitdesc*{european xnor port}{European \textsc{xnor} port}{}
+ \circuitdesc*{european buffer port}{European \textsc{buffer} port}{}
+ \circuitdesc*{european not port}{European \textsc{not} port}{}
+\end{groupdesc}
+
+\begin{framed}
+If (default behaviour) \texttt{americanports} option is active (or the style \texttt{[american ports]} is used), the shorthands \texttt{and port}, \texttt{or port}, \texttt{not port}, \texttt{nand port}, \texttt{not port}, \texttt{xor port}, and \texttt{xnor port} are equivalent to the american version of the respective logic port.
+
+If otherwise \texttt{europeanports} option is active (or the style \texttt{[european ports]} is used), the shorthands \texttt{and port}, \texttt{or port}, \texttt{not port}, \texttt{nand port}, \texttt{not port}, \texttt{xor port}, and \texttt{xnor port} are equivalent to the european version of the respective logic port.
+\end{framed}
+
+\subsubsection{Special components}
+
+There is no ``european'' version of these symbols.
+
+\begin{groupdesc}
+ \circuitdesc*{schmitt}{Non-Inverting \textsc{Schmitttrigger}}{}
+ \circuitdesc*{invschmitt}{Inverting \textsc{Schmitttrigger}}{}
+\end{groupdesc}
+
+\subsubsection{Logic port customization}
+
+Logic port class is called \texttt{logic ports}, so you can scale them all with \texttt{logic ports/scale} (default \texttt{1.0}).
+
+As for most components, you can change the width and height of the ports; the thickness is given by the parameter \texttt{tripoles/thickness} (default 2):
+
+\begin{LTXexample}[varwidth=true]
+\tikz \draw (0,0) node[nand port] {}; \par
+\ctikzset{tripoles/american nand port/input height=.2}
+\ctikzset{tripoles/american nand port/port width=.4}
+\ctikzset{tripoles/thickness=4}
+\tikz \draw (0,0) node[nand port] {};
+\end{LTXexample}
+
+This is especially useful if you have ports with more than two inputs, which are instantiated
+with the parameter \texttt{number inputs} :
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (0,3) node[american and port] (A) {P1};
+\begin{scope}
+ \ctikzset{tripoles/american or port/height=1.6}
+ \draw (A.out) -- ++(0.5,0)
+ node[american or port,
+ number inputs=5,
+ anchor=in 1] (B) {P2};
+\end{scope}
+\draw (0,1.5) node[american or port] (C) {P3};
+\draw (C.out) |- (B.in 2);
+\end{circuitikz}
+\end{LTXexample}
+
+You can tweak the appearance of american ``or'' family (\texttt{or}, \texttt{nor}, \texttt{xor} and \texttt{xnor}) ports, too, with the parameters \texttt{inner} (how much the base circle go ``into'' the shape, default 0.3) and \texttt{angle} (the angle at which the base starts, default 70).
+
+\begin{LTXexample}[varwidth=true]
+\tikz \draw (0,0) node[xnor port] {};
+\ctikzset{tripoles/american xnor port/inner=.7}
+\ctikzset{tripoles/american xnor port/angle=40}
+\tikz \draw (0,0) node[xnor port] {};
+\end{LTXexample}
+
+\subsubsection{Logic port anchors}
+
+These are the anchors for logic ports:
+
+\bigskip
+\begin{circuitikz} [american]
+\def\coorda(#1)<#2>{node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\small, pin distance=0.1cm, pin edge={red, overlay,}]#2:#1}](#1){}}
+\path(-2,1) -- (11,-1);
+
+\draw (0,0) node[and port, number inputs=3](A){IC1} ;
+ \foreach \a/\d in {left/45, right/45, out/-45, in 1/135, in 2/135, in 3/135}
+ \path (A.\a) \coorda(\a)<\d>;
+
+\draw (4.5,0) node[and port, number inputs=3](A){IC1};
+ \foreach \a/\d in {north/90, north west/135, west/180, south west/-135,
+ south/-90, south east/45, east/45, north east/45}
+ \path (A.\a) \coorda(\a)<\d>;
+
+\draw (9,0) node[european and port, ](A){} ;
+ \foreach \a/\d in {left/45, right/45, center/-90}
+ \path (A.\a) \coorda(\a)<\d>;
+\end{circuitikz}
+\bigskip
+
+You have also ``border pin anchors'':
+
+\bigskip
+\begin{circuitikz} [american]
+\def\coorda(#1)<#2>{node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\small, pin distance=0.1cm, pin edge={red, overlay,}]#2:#1}](#1){}}
+\path(-2,1) -- (11,-1);
+
+\draw (0,0) node[american and port, number inputs=3](A){IC1} ;
+ \foreach \a/\d in {bin 1/-135, bin 2/-135, bin 3/-135, bout/-45}
+ \path (A.\a) \coorda(\a)<\d>;
+
+\draw (4.5,0) node[american or port, number inputs=3](A){IC1};
+ \foreach \a/\d in {bin 1/-135, bin 2/-135, bin 3/-135, bout/-45}
+ \path (A.\a) \coorda(\a)<\d>;
+
+\draw (9,0) node[european and port, ](A){} ;
+ \foreach \a/\d in {bin 1/-135, bin 2/-135, bout/-45}
+ \path (A.\a) \coorda(\a)<\d>;
+\end{circuitikz}
+\bigskip
+
+These anchors are especially useful if you want to negate inputs:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\draw (0,3) node[american and port] (A) {P1};
+\node at (A.bin 1) [ocirc, left]{} ;
+\begin{scope}
+ \ctikzset{tripoles/american or port/height=1.6}
+ \draw (A.out) -- ++(0.5,0) node[american or port,
+ number inputs=5, anchor=in 1] (B) {P2};
+ \node at (B.bin 3) [ocirc, left]{} ;
+\end{scope}
+\draw (0,1.5) node[american or port] (C) {P3};
+\node at (C.bin 2) [ocirc, left]{} ;
+\draw (C.out) |- (B.in 2);
+\end{circuitikz}
+\end{LTXexample}
+As you can see, the \texttt{center} anchor is (for historic reasons) not in the center at all. You can fix this with the command \verb|\ctikzset{logic ports origin=center}|:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{logic ports origin=center}
+\draw (0,0) node[and port] (myand) {}
+ (myand.in 1) node[anchor=east] {1}
+ (myand.in 2) node[anchor=east] {2}
+ (myand.out) node[anchor=west] {3};
+\draw[<-] (myand.center) -- ++(1,-1)
+ node{center};
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,2) node[and port] (myand1) {}
+ (0,0) node[and port] (myand2) {}
+ (2,1) node[xnor port] (myxnor) {}
+ (myand1.out) -| (myxnor.in 1)
+ (myand2.out) -| (myxnor.in 2)
+;\end{circuitikz}
+\end{LTXexample}
+
+In the case of \textsc{not}, there are only \texttt{in} and \texttt{out} (although for compatibility reasons \texttt{in 1} is still defined and equal to \texttt{in}):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (1,0) node[not port] (not1) {}
+ (3,0) node[not port] (not2) {}
+ (0,0) -- (not1.in)
+ (not2.in) -- (not1.out)
+ ++(0,-1) node[ground] {} to[C] (not1.out)
+ (not2.out) -| (4,1) -| (0,0)
+;\end{circuitikz}
+\end{LTXexample}
+
+
+
+\subsection{Chips (integrated circuits)}
+
+\texttt{CircuiTikZ} supports two types of variable-pin chips: DIP (Dual-in-Line Package) and QFP (Quad-Flat Package).
+\begin{groupdesc}
+ \circuitdesc*{dipchip}{Dual-in-Line Package chip}{}
+ \circuitdesc*{qfpchip}{Quad-Flat Package chip}{}
+\end{groupdesc}
+
+\subsubsection{DIP and QFP chips customization}
+
+You can scale chips with the key \texttt{chips/scale}. As ever, that will \textbf{not} scale text size of the labels, when they are printed.
+
+You can customize the DIP chip with the key \texttt{multipoles/dipchip/width} (with a default of \texttt{1.2}) and the key \texttt{multipoles/dipchip/pin spacing} (default \texttt{0.4}) that are expressed in fraction of basic lengths (see section~\ref{sec:components-size}).
+The height of the chip will be equal to half the numbers of pins multiplied by the spacing, plus one spacing for the borders.
+
+For the QFP chips, you can only chose the pin spacing with \texttt{multipoles/qfpchip/pin spacing} key.
+
+The pins of the chip can be ``hidden'' (that is, just a spot in the border, optionally marked with a number) or ``stick out'' with a thin lead by setting \texttt{multipoles/external pins width} greater than 0 (default value is \texttt{0.2}, so you'll have leads as shown above).
+Moreover, you can transform the thin lead into a pad by setting the key \texttt{multipoles/external pad fraction} to something different form 0 (default is \texttt{0}); the value expresses the fraction of the pin spacing space that the pad will use on both sides of the pin.
+
+The number of pins is settable with the key \texttt{num pins}.
+\textbf{Please notice} that the number of pins \textbf{must} be \emph{even} for \texttt{dipchip}s and \emph{multiple of 4} for \texttt{qfpchip}s, otherwise havoc will ensue.
+
+You can, if you want, avoid printing the numbers of the pin with \texttt{hide numbers} (default \texttt{show numbers}) if you prefer positioning them yourself (see the next section for the anchors you can use).
+The font used for the pins is adjustable with the key \texttt{multipoles/font} (default \verb|\tiny|)
+For special use you can suppress the orientation mark with the key \texttt{no topmark} (default \texttt{topmark}).
+
+The line thickness of the main shape is controlled by \texttt{multipoles/thickness} (default 2) and the one of the external pins/pads with \texttt{multipoles/external pins thickness} (default 1).
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}
+ \ctikzset{multipoles/thickness=4}
+ \ctikzset{multipoles/external pins thickness=2}
+ \draw (0,0) node[dipchip,
+ num pins=12,
+ hide numbers,
+ external pins width=0.3,
+ external pad fraction=4 ](C){IC1};
+ \draw (C.pin 1) -- ++(-0.5,0) to[R]
+ ++(0,-3) node[ground]{};
+ \node [right, font=\tiny]
+ at (C.bpin 1) {RST};
+ \end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}
+ \draw (0,0) node[dipchip,
+ num pins=8,
+ external pins width=0.0](C){IC1};
+ \draw (C.pin 1) -- ++(-0.5,0) to[R]
+ ++(0,-1.5) node[ground]{};
+ \end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}
+ \ctikzset{multipoles/font={\color{red}\tiny}}
+ \draw (0,0) node[qfpchip,
+ num pins=16,
+ external pad fraction=6](C){IC1};
+ \draw (C.pin 1) -- ++(-0.5,0) to[R]
+ ++(0,-2) node[ground]{};
+ \end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Chips anchors}
+
+Chips have anchors on pins and global anchors for the main shape.
+The pin anchors to be used to connect wires to the chip are called \texttt{pin 1}, \texttt{pin 2} , \dots, with just one space between \texttt{pin} and the number.
+Border pin anchors (\texttt{bpin 1}\dots) are always on the box border, and can be used to add numbers or whatever markings are needed.
+Obviously, in case of \texttt{multipoles/external pins width} equal to zero, border and normal pin anchors will coincide.
+
+Additionally, you have geometrical anchors on the chip ``box'', see the following figure. The nodes are available with the full name (like \texttt{north}) and with the short abbreviations \texttt{n}, \texttt{nw}, \texttt{w}\dots. The \texttt{dot} anchor is useful to add a personalized marker if you use the \texttt{no topmark} key.
+
+\begin{quote}
+ \bigskip
+ \def\coord(#1){node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\scriptsize, pin distance=0.2cm, fill=white, fill opacity=0.5, text opacity=1, pin edge={red, overlay,}]75:#1}](#1){}}
+ \def\coordd(#1){node[circle, red, draw, inner sep=1pt,pin={[red, overlay, inner sep=0.5pt, font=\scriptsize, pin distance=0.2cm, fill=white, fill opacity=0.5, text opacity=1,pin edge={red, overlay,}]-45:#1}](#1){}}
+ \begin{circuitikz}[american, ]
+ \ctikzset{multipoles/dipchip/pin spacing=0.7}
+ \draw (0,0) node[dipchip,
+ external pins width=0.4,
+ external pad fraction=4](C){IC1};
+ \foreach \p in {1,...,8}
+ \path (C.pin \p) \coord(pin \p)
+ (C.bpin \p) \coordd(bpin \p);
+ % second chip
+ \draw (C.pin 7) to[R] ++(3,0)
+ node[dipchip,anchor=pin 2](D){IC2};
+ \foreach \p in {center, nw, ne, se, sw, north, south, west, east}
+ \path (D.\p) \coord(\p);
+ \path (D.text) \coordd(text);
+ % third chip
+ \draw (D.pin 7) ++(2,0)
+ node[dipchip,anchor=pin 2, no topmark](E){};
+ \foreach \p in {center, n, w, e, s, dot}
+ \path (E.\p) \coord(\p);
+ \end{circuitikz}
+\end{quote}
+
+\subsubsection{Chips rotation}
+
+You can rotate chips, and normally the pin numbers are kept straight (option \texttt{straight numbers}, which is the default), but you can rotate them if you like with \texttt{rotated numbers}.
+Notice that the main label has to be (counter-) rotated manually in this case.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) node[dipchip,
+ rotate=90]{%
+ \rotatebox{-90}{IC2}};
+ \draw (3,0) node[qfpchip,
+ rotated numbers,
+ rotate=45]{IC3};
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Chip special usage}
+
+You can use chips to have special, personalized blocks.
+Look at the following example, which is easily put into a macro.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \ctikzset{multipoles/thickness=3}
+ \ctikzset{multipoles/dipchip/width=2}
+ \draw (0,0) node[dipchip,
+ num pins=10, hide numbers, no topmark,
+ external pins width=0](C){Block};
+ \node [right, font=\tiny] at (C.bpin 1) {RST};
+ \node [right, font=\tiny] at (C.bpin 2) {IN1};
+ \node [right, font=\tiny] at (C.bpin 4) {/IN2};
+ \node [left, font=\tiny] at (C.bpin 8) {OUT};
+ \draw (C.bpin 2) -- ++(-0.5,0) coordinate(extpin);
+ \node [ocirc, anchor=0](notin2) at (C.bpin 4) {};
+ \draw (notin2.180) -- (C.bpin 4 -| extpin);
+ \draw (C.bpin 8) to[short,-o] ++(0.5,0);
+ \draw (C.bpin 5) ++(0,0.1) -- ++(0.1,-0.1)
+ node[right, font=\tiny]{CLK} -- ++(-0.1,-0.1);
+ \draw (C.n) -- ++(0,1) node[vcc]{};
+ \draw (C.s) -- ++(0,-1) node[ground]{};
+\end{circuitikz}\end{LTXexample}
+
+\subsection{Seven segment displays}
+
+\begin{groupdesc}
+ \circuitdesc*{bare7seg}{Seven segment display}{}
+\end{groupdesc}
+
+The seven segment display lets you show values as if they were displayed in a classical seven segment display.\footnote{This component has been loosely inspired by the package \texttt{SevenSeg} by Germain Gondor, 2009, see \href{http://www.texample.net/tikz/examples/seven-segment-display/}{\TeX{}example.net}.}
+
+The main ``bare'' component is the one shown above, but for simplicity a couple of style interfaces are defined:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) node[seven segment val=A dot off box on]{};
+ \draw (1,0) node[seven segment val=- dot none box on]{};
+ \draw (0,-2) node[seven segment bits=1001001 dot empty box on]{};
+ \draw (1,-2) node[seven segment bits=0011101 dot none box off]{};
+\end{circuitikz}
+\end{LTXexample}
+
+There are two main configuration methods. The first one is \texttt{seven segment val}, which will take an hexadecimal number or value and display it: the possible values are \texttt{0,...,15}, plus \texttt{A, B, C, D, E, F} (or lowercase) and the symbol \texttt{-} (minus).
+
+
+The other interface is \texttt{seven segment bits}, where you specify seven bits saying which segment must be on (please never specify a different number of bits, it will throw a very obscure error); you can see in the anchors the name of each segment.
+
+The option \texttt{dot} specifies if you want a decimal dot or not. The key \texttt{none} will remove the dot and the space it would take; \texttt{empty} will not show the dot at all but reserve the space, and \texttt{on} or \texttt{off} will show the dot in the corresponding state.
+
+The option \texttt{box} (can be \texttt{on} or \texttt{off}) simply toggles the drawing of the external box. You can separate it from the display with the key \texttt{seven seg/box sep} (default \texttt{1pt}), and it will use the thickness specified in \texttt{multipoles/thickness} (The same as the chips).
+
+You can use these option with the ``bare'' object \texttt{bare7seg} and the keys \texttt{seven seg/bits} (default \texttt{0000000}), \texttt{seven seg/dot} (default \texttt{none}) and \texttt{seven seg/box} (default \texttt{off}); there is no option equivalent to the \texttt{val} interface.
+
+\subsubsection{Seven segments anchors}
+
+These are the anchors for the seven segment displays; notice that when the \texttt{dot} parameter is not \texttt{none}, the cell is a bit wider at the right side.
+
+\begingroup
+\ctikzset{seven seg/color off=gray, multipoles/thickness=1}
+\showanchors{bare7seg}{}(north/90/0.4, north east/45/0.4, east/0/0.4,
+south east/-45/0.4, south/-90/0.4, south west/-135/0.4, west/180/0.4,
+north west/135/0.4, center/-140/0.5)
+\ctikzset{seven seg/dot=off}
+\ctikzset{seven seg/box=on}
+\showanchors{bare7seg}{}(north/90/0.4, north east/45/0.4, east/0/0.4,
+south east/-45/0.4, south/-90/0.4, center/-140/0.5)
+\ctikzset{seven seg/box=off}
+\showanchors{bare7seg}{}(a/90/0.4, b/45/0.4, c/0/0.4, d/-90/0.4,
+e/-129/0.4, f/145/0.4, g/190/0.4, dot/-45/0.2)
+\endgroup
+
+\subsubsection{Seven segments customization}
+
+You can scale the seven segment display with the key \texttt{displays/scale}. This will scale the size of the digit, but not the absolute sizes shown below --- if you want them to scale, yo have to do it manually.
+
+You can change several parameters to adjust the displays:
+\begin{lstlisting}[basicstyle=\small\ttfamily]
+\ctikzset{seven seg/width/.initial=0.4}% relative to \pgf@circ@Rlen (scalable)
+\ctikzset{seven seg/thickness/.initial=4pt}% segment thickness (not scaled)
+\ctikzset{seven seg/segment sep/.initial=0.2pt}% gap between segments (not scaled)
+\ctikzset{seven seg/box sep/.initial=1pt}% external box gap (not scaled)
+\ctikzset{seven seg/color on/.initial=red}% color for segment "on"
+\ctikzset{seven seg/color off/.initial=gray!20!white} % ...and "off"
+\end{lstlisting}
+
+A couple of examples are shown below.
+
+\begin{LTXexample}[varwidth=true, pos=b, basicstyle=\small\ttfamily]
+\begin{circuitikz}[scale=0.5]
+\ctikzset{seven seg/width=0.2, seven seg/thickness=2pt}
+\foreach \i in {0,...,15} \path (\i,0)
+ node[seven segment val=\i dot on box off]{};
+\ctikzset{seven seg/color on=black}
+\foreach \i in {0,...,15} \path (\i,-1.5)
+ node[seven segment val=\i dot off box off, fill=gray!30!white]{};
+\ctikzset{seven seg/color on=green, seven seg/color off=yellow!30}
+\foreach \i in {0,...,15} \path[color=red] (\i,-3)
+ node[seven segment val=\i dot none box on, xslant=0.2]{};
+\end{circuitikz}
+\end{LTXexample}
+
+
+\section{Labels and similar annotations}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, l=$R_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R=$R_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, v=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R=$R_1$, i=$i_1$, v=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R=$R_1$, i=$i_1$, v=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+Long names/styles for the bipoles can be used:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}\draw
+ (0,0) to[resistor=1<\kilo\ohm>] (2,0)
+;\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Labels and Annotations}
+\label{sec:labels-and-annotations}
+Since Version 0.7, beside the original label (l) option, there is a new option to place a second label, called annotation (a) at each bipole. Up to now this is a beta-test and there can be problems. For example, up to now this option is not compatible with the concurrent use of voltage labels.
+
+The position of (a) and (l) labels can be adjusted with \_ and \^, respectively.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, l=$R_1$,a=1<\kilo\ohm>] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, l_=$R_1$,a^=1<\kilo\ohm>] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\textbf{Caveat:} notice that the way in which \texttt{circuitikz} processes the options, there will be problems if the label (or annotation, voltage, or current) contains one of the characters $=$ (equal) or $,$ (comma), giving unexpected errors and wrong output.
+These two characters must be protected to the option parser using an \verb|\mbox| command, or redefining the characters with a \TeX\ \verb|\def|:
+
+\begin{LTXexample}[varwidth=true]
+ \def\eq{=}
+ \begin{circuitikz}
+ % the following will fail:
+ % \draw (0,0) to[R, l={$R=3}] (3,0);
+ \draw (0,0) to[R, l=\mbox{$R=3$}] (3,0);
+ \draw (0,0) to[R, l=$R\eq3$] (0,3);
+ \draw (3,3) to[R, l=\mbox{$R,3$}] (3,0);
+ % this works, but it has wrong spacing
+ \draw (0,3) to[R, l=$R{=}3$] (3,3);
+ \end{circuitikz}
+\end{LTXexample}
+
+\noindent The default orientation of labels is controlled by the options \texttt{smartlabels}, \texttt{rotatelabels} and \texttt{straightlabels} (or the corresponding \texttt{label/align} keys). Here are examples to see the differences:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{label/align = straight}
+\def\DIR{0,45,90,135,180,-90,-45,-135}
+\foreach \i in \DIR {
+ \draw (0,0) to[R=\i, *-o] (\i:2.5);
+}
+\end{circuitikz}
+\end{LTXexample}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{label/align = rotate}
+\def\DIR{0,45,90,135,180,-90,-45,-135}
+\foreach \i in \DIR {
+ \draw (0,0) to[R=\i, *-o] (\i:2.5);
+}
+\end{circuitikz}
+\end{LTXexample}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+\ctikzset{label/align = smart}
+\def\DIR{0,45,90,135,180,-90,-45,-135}
+\foreach \i in \DIR {
+ \draw (0,0) to[R=\i, *-o] (\i:2.5);
+}
+\end{circuitikz}
+\end{LTXexample}
+
+You also can use stacked (two lines) labels. The example should be self-explanatory: the two lines are specified as \texttt{l2=}\emph{line1}\texttt{ and }\emph{line2}. You can use the keys \texttt{l2 halign} to control horizontal position (\texttt{l}eft, \texttt{c}enter, \texttt{r}ight) and \texttt{l2 valign} to control the vertical one (\texttt{b}ottom, \texttt{c}center, \texttt{t}op).
+
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}[ american, ]
+ %
+ % default is l2 halign=l, l2 valign=c
+ %
+ \draw (0,0) to[R, l2_=$R_{CC}$ and \SI{4.7}{k\ohm}, , l2 valign=t] (2,0);
+ \draw (0,0) to[R, l2_=$R_{CC}$ and \SI{4.7}{k\ohm}, , ] (0,2);
+ \draw (0,0) to[R, l2_=$R_{CC}$ and \SI{4.7}{k\ohm}, l2 halign=c, l2 valign=b] (-2,0);
+ \draw (0,0) to[R, l2_=$R_{CC}$ and \SI{4.7}{k\ohm}, l2 halign=r, l2 valign=c] (0, -2);
+ \end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}[ american, ]
+ \draw (0,0) to[R, l2^=$R_{CC}$ and \SI{4.7}{k\ohm}, l2 halign=c, l2 valign=b] (2,0);
+ \draw (0,0) to[R, l2^=$R_{CC}$ and \SI{4.7}{k\ohm}, l2 halign=c, ] (0,2);
+ \draw (0,0) to[R, l2^=$R_{CC}$ and \SI{4.7}{k\ohm}, , l2 valign=t] (-2,0);
+ \draw (0,0) to[R, l2^=$R_{CC}$ and \SI{4.7}{k\ohm}, l2 halign=c, l2 valign=t](0, -3);
+ \end{circuitikz}
+\end{LTXexample}
+
+\subsection{Currents and voltages}\label{curr-and-volt}
+
+The default direction/sign for currents and voltages in the components is, unfortunately, not standard, and can change across country and sometime across different authors.
+This unfortunate situation created a bit of confusion in \texttt{circuitikz} across the versions, with several incompatible changes starting from version 0.5.
+From version 0.9.0 onward, the maintainers agreed a new policy for the directions of bipoles' voltages and currents, depending on 4 different possible options:
+\begin{itemize}
+ \item \texttt{oldvoltagedirection}, or the key style \texttt{voltage dir=old}: Use old way of voltage direction having a difference between european and american direction, with wrong default labelling for batteries (it was the default before version 0.5);
+ \item \texttt{nooldvoltagedirection}, or the key style \texttt{voltage dir=noold}: The standard from version 0.5 onward, utilize the (German?) standard of voltage arrows in the direction of electric fields (without fixing batteries);
+ \item \texttt{RPvoltages} (meaning Rising Potential voltages), or the key style \texttt{voltage dir=RP}: the arrow is in direction of rising potential, like in \texttt{oldvoltagedirection}, but batteries and current sources are fixed so that they follow the passive/active standard: the default direction of \texttt{v} and \texttt{i} are chosen so that, when both values are positive:
+ \begin{itemize}
+ \item in passive component, the element is \emph{dissipating power};
+ \item in active components (generators), the element is \emph{generating power}.
+ \end{itemize}
+ \item \texttt{EFvoltages} (meaning Electric Field voltages), or the key style \texttt{voltage dir=EF}: the arrow is in direction of the electric field, like in \texttt{nooldvoltagedirection}, but batteries are fixed;
+\end{itemize}
+Notice that the four styles are designed to be used at the environment level: that is, you should use them at the start of your environment as in \verb|\begin{circuitikz}[voltage dir=old] ...| and not as a key for single components, in which case the behaviour is not guaranteed.
+
+The standard direction of currents, flows and voltages are changed by these options; notice that the default drops in case of passive and active elements is normally different. Take care that in the case of \texttt{noold} and \texttt{EFvoltages} also the currents can switch directions. It is much easier to understand the several behaviors by looking at the following examples, that have been generated by the code:
+
+\begin{lstlisting}
+\foreach\element in {R, C, D, battery2, V, I, sV, cV, cI}{%
+ \noindent\ttfamily
+ \begin{tabular}{p{2cm}}
+ \element \\ american \\[15pt]
+ \element \\ european \\
+ \end{tabular}
+ \foreach\mode in {old, noold, RP, EF} {
+ \begin{tabular}{@{}l@{}}
+ \multicolumn{1}{c}{voltage dir} \\
+ \multicolumn{1}{c}{dir=\mode} \\[4pt]
+ \begin{tikzpicture}[
+ american, voltage dir=\mode,
+ ]
+ \draw (0,0) to[\element, *-o, v=$v_1$, i=$i_1$, ] (2.5,0);
+ \end{tikzpicture}\\
+ \begin{tikzpicture}[
+ european, voltage dir=\mode,
+ ]
+ \draw (0,0) to[\element, *-o, v=$v_1$, i=$i_1$, ] (2.5,0);
+ \end{tikzpicture}
+ \end{tabular}
+ \medskip
+ }
+ \par
+}
+\end{lstlisting}
+
+
+\foreach\element in {R, C, D, battery2, V, I, sV, cV, cI}{%
+ \noindent\ttfamily
+ \begin{tabular}{p{2cm}}
+ \element \\ american \\[15pt]
+ \element \\ european \\
+ \end{tabular}
+ \foreach\mode in {old, noold, RP, EF} {
+ \begin{tabular}{@{}l@{}}
+ \multicolumn{1}{c}{voltage dir} \\
+ \multicolumn{1}{c}{dir=\mode} \\[4pt]
+ \begin{tikzpicture}[
+ american, voltage dir=\mode,
+ ]
+ \draw (0,0) to[\element, *-o, v=$v_1$, i=$i_1$, ] (2.5,0);
+ \end{tikzpicture}\\
+ \begin{tikzpicture}[
+ european, voltage dir=\mode,
+ ]
+ \draw (0,0) to[\element, *-o, v=$v_1$, i=$i_1$, ] (2.5,0);
+ \end{tikzpicture}
+ \end{tabular}
+ \medskip
+ }
+ \par
+}
+
+Obviously, you normally use just one between current and flows, but anyway you can
+change direction of the voltages,
+currents and flows using the complete keys \verb|i_>|, \verb|i^<|, \verb|i>_|, \verb|i>^|,
+as shown in the following examples.
+
+This manual has been typeset with the option \texttt{\chosenvoltoption}.
+
+\subsection{Currents}
+
+Inline (along the wire) currents are selected with \verb|i_>|, \verb|i^<|, \verb|i>_|, \verb|i>^|, and various simplification; the default position and direction is obtained with the key \verb|i=...|.
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i^>=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i_>=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i^<=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i_<=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i>^=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i>_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i<^=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i<_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Also:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i<=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i>=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i^=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[V=10V, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[V<=10V, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[V=10V, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[V=10V,invert, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[dcisource=1A, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[dcisource=1A,invert, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Flows}\label{flows}
+As an alternative for the current arrows, you can also use the following flows. They can also be used to indicate thermal or power flows. The syntax is pretty the same as for currents.
+
+\textit{This is a new beta feature since version 0.8.3; therefore, please provide bug reports or hints to optimize this feature regarding placement and appearance! This means that the appearance may change in the future!}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, f=$i_1$] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, f<=$i_1$] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, f_=$i_1$] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, f_>=$i_1$] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, f<^=$i_1$] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, f<_=$i_1$] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, f>_=$i_1$] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Voltages}
+See introduction note at Currents (chapter \ref{curr-and-volt}, page \pageref{curr-and-volt})!
+
+\subsubsection{European style} The default, with arrows. Use option \texttt{europeanvoltage} or style \verb![european voltages]!.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[european voltages]
+ \draw (0,0) to[R, v^>=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[european voltages]
+ \draw (0,0) to[R, v^<=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[european voltages]
+ \draw (0,0) to[R, v_>=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[european voltages]
+ \draw (0,0) to[R, v_<=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[V=10V, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[V<=10V, i_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[I=1A, v_=$u_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[I<=1A, v_=$u_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[I=$~$,l=1A, v_=$u_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[I,l=1A, v_=$u_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[battery,l_=1V, v=$u_1$, i=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+
+
+\subsubsection{American style}
+Use option \texttt{americanvoltage} or set \verb![american voltages]!.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[R, v^>=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[R, v^<=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[R, v_>=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[R, v_<=$v_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[I=1A, v_=$u_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \draw (0,0) to[I<=1A, v_=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{Voltage position} It is possible to move away the arrows and the plus or minus signs with the key \texttt{voltages shift} (default value is \texttt{0}, which gives the standard position):
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[]
+ \draw (0,0) to[R, v=$v_1$, i=$i_1$] (2,0);
+ \draw (0,-1) to[R, v=$v_1$, i=$i_1$,
+ voltage shift=0.5] (2,-1);
+ \draw (0,-2) to[R, v=$v_1$, i=$i_1$,
+ voltage shift=1.0, ] (2,-2);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages, voltage shift=0.5]
+ \draw (0,0) to[R, v=$v_1$, i=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Notes that \texttt{american voltage} also affects batteries.
+
+\begin{LTXexample}[varwidth=true]
+ \begin{circuitikz}[voltage shift=0.5]
+ \draw (0,0) to[battery,l_=1V, v=$u_1$, i=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages, voltage shift=0.5]
+ \draw (0,0) to[battery,l_=1V, v=$u_1$, i=$i_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsubsection{American voltages customization}
+
+Since 0.9.0, you can change the font\footnote{There where a bug before, noticed by the user \texttt{dzereb} on \href{https://tex.stackexchange.com/questions/487683/odd-minus-style-when-drawing-american-voltage}{tex.stackexchange.com} which made the symbols using different fonts in a basically random way. In the same page, user \texttt{campa} found the problem. Thanks!} used by the \texttt{american voltages} style, by setting to something different from nothing the key \texttt{voltage/american font} (default: nothing, using the current font) style:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \begin{scope}
+ \ctikzset{voltage/american font=\tiny\boldmath}
+ \draw (0,0) to[R,v=$V_S$] ++(2,0);
+ \end{scope}
+ \draw (0,-2) to[R,v=$V_S$] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Also, if you want to change the symbols (sometime just the $+$ sign is drawn, for example, or for highlighting something),
+using the keys \texttt{voltage/american plus} and \texttt{voltage/american minus} (default \verb|$+$| and \verb|$-$|).
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american]
+ \ctikzset{voltage/american font=\scriptsize\boldmath}
+ \ctikzset{voltage/american plus=\textcolor{red}{$\oplus$}}
+ \ctikzset{voltage/american minus=\textcolor{blue}{$\ominus$}}
+ \draw (0,0) to[R,v_>=$V_S$] ++(2,0);
+ \draw (0,-2) to[R,v_<=$V_S$] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+This could be especially useful if you define a style, to use like this:
+
+\begin{LTXexample}[varwidth=true]
+\tikzset{red plus/.style={
+ circuitikz/voltage/american plus=\textcolor{red}{$+$},
+}}
+\begin{circuitikz}[american]
+ \draw (0,0) to[R,v_>=$V_S$, red plus] ++(2,0);
+ \draw (0,-2) to[R,v_<=$V_S$] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+\subsubsection{Global properties of voltages and currents}
+
+\begin{LTXexample}[varwidth=true]
+\tikz \draw (0,0) to[R, v=1<\volt>] (2,0); \par
+\ctikzset{voltage/distance from node=.1}
+\tikz \draw (0,0) to[R, v=1<\volt>] (2,0);
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\tikz \draw (0,0) to[C, i=$\imath$] (2,0); \par
+\ctikzset{current/distance = .2}
+\tikz \draw (0,0) to[C, i=$\imath$] (2,0);
+\end{LTXexample}
+
+However, you can override the properties \texttt{voltage/distance from node} (how distant from the initial and final points of the path the arrow starts and ends) and \texttt{voltage/bump b} (how high the bump of the arrow is --- how curved it is)\footnote{Prior to 0.9.4 you had also \texttt{voltage/european label distance} (how distant from the bipole the voltage label will be) but this is deprecated, and the european-style label is printed near the bump)} on a per-component basis, in order to fine-tune the voltages:
+
+
+\begin{LTXexample}[varwidth=true]
+\tikz \draw (0,0) to[R, v=1<\volt>] (1.5,0)
+ to[C, v=2<\volt>] (3,0); \par
+\ctikzset{bipoles/capacitor/voltage/distance from node/.initial=.7}
+\tikz \draw (0,0) to[R, v=1<\volt>] (1.5,0)
+ to[C, v=2<\volt>] (3,0); \par
+\end{LTXexample}
+
+Note the \texttt{.initial}; you have to create such key the first time you use it.
+
+
+\subsection{Nodes (also called poles)}\label{sec:bipole-nodes}
+
+You can add nodes to the bipoles, positioned at the coordinates surrounding the component. The general style to use is \texttt{bipole nodes=\{start\}\{stop\}}, where \texttt{start} and \texttt{stop} are the nodes --- to be chosen between \texttt{none}, \texttt{circ}, \texttt{ocirc}, \texttt{squarepole}, \texttt{osquarepole}, \texttt{diamondpole}, \texttt{odiamondpole} and \texttt{rectfill}\footnote{You can use other shapes too, but at your own risk\dots Moreover, notice that \texttt{none} is not really a node, just a special word used to say ``do not put any node here''.} (see section~\ref{sec:terminals}).
+
+
+\begin{LTXexample}[varwidth=true,
+ basicstyle=\small\ttfamily
+ ]
+\begin{circuitikz}
+ \ctikzset{bipoles/length=.5cm, nodes width=0.1}%small components, big nodes
+ \foreach \a/\p [evaluate=\a as \b using (\a+180)] in
+ {-90/none, -60/circ, -30/ocirc, 0/diamondpole, 30/odiamondpole, 60/squarepole, 90/osquarepole}
+ \draw (0,0) to[R, bipole nodes={none}{\p}] ++(\a:1.5) node[font=\tiny, anchor=\b]{\p};
+\end{circuitikz}
+\end{LTXexample}
+
+These bipole nodes are added after the path is drawn, as every node in Ti\emph{k}Z --- this is the reason why they are always filled (with the main color the normal nodes, with white the open ones), in order to ``hide'' the wire below. You can override the fill color if you want; but notice that if you draw things in two different paths, you will have ``strange'' results; notice that in the second line of resistors the second wire is starting from the center of the white \texttt{ocirc} of the previous path.
+
+\begin{LTXexample}[varwidth=true,
+ pos=t, basicstyle=\small\ttfamily
+ ]
+\begin{circuitikz}
+ \draw (0,0) to[R, *-o] ++(2,0) to[R, -d] ++(2,0)
+ to[R, bipole nodes={diamondpole}{odiamondpole, fill=red}] ++(2,0);
+ \draw (0,-1) to[R, *-o] ++(2,0) ;
+ \draw (2,-1) to[R, -d] ++(2,0) to[R, bipole nodes={none}{squarepole}] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+You can define shortcuts for the \texttt{bipole nodes} you use most; for example if you want a shortcut for a bipole with open square node in red in the right side you can:
+
+\begin{LTXexample}[varwidth=true,
+ basicstyle=\small\ttfamily
+ ]
+\begin{circuitikz}
+ \ctikzset{-s/.style = {bipole nodes={none}{osquarepole, fill=red}}}
+ \draw (0,0) to[R, -s] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+There are several predefined shorthand as the above; in the following pages you can see all of them.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, o-o] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, -o] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, o-] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, *-*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, -*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, *-] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, d-d] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, -d] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, d-] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, o-*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, *-o] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, o-d] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, d-o] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, *-d] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, d-*] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Special components}
+
+For some components label, current and voltage behave as one would expect:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[I=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[I, i=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[cI=$k\cdot a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[sI=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[csI=$k\cdot a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+The following results from using the option \texttt{americancurrent} or using the style \texttt{[american currents]}.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american currents]
+ \draw (0,0) to[I=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american currents]
+ \draw (0,0) to[I, i=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american currents]
+ \draw (0,0) to[cI=$k\cdot a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american currents]
+ \draw (0,0) to[sI=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american currents]
+ \draw (0,0) to[csI=$k\cdot a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+The same holds for voltage sources:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[V=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[V, v=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[cV=$k\cdot a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[sV=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[csV=$k\cdot a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+The following results from using the option \texttt{americanvoltage} or the style \texttt{[american voltages]}.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[V=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[V, v=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[cV=$k v_e$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[sV=$a_1$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}[american voltages]
+ \draw (0,0) to[csV=$k v_e$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Integration with {\ttfamily siunitx}}
+
+If the option {\ttfamily siunitx} is active (and \emph{not} in \ConTeXt), then the following are equivalent:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, l=1<\kilo\ohm>] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, l=$\SI{1}{\kilo\ohm}$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i=1<\milli\ampere>] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, i=$\SI{1}{\milli\ampere}$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, v=1<\volt>] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R, v=$\SI{1}{\volt}$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+
+\subsection{Mirroring and Inverting}
+Bipole paths can also mirrored and inverted (or reverted) to change the drawing direction.
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[pD] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[pD, mirror] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[pD, invert] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+Placing labels, currents and voltages works also, please note, that mirroring and inverting does not influence the positioning of labels and voltages. Labels are by default above/right of the bipole and voltages below/left, respectively.
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[ospst=T, i=$i_1$, v=$v$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[ospst=T, mirror, i=$i_1$, v=$v$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[ospst=T, invert, i=$i_1$, v=$v$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[ospst=T,mirror,invert, i=$i_1$, v=$v$] (2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+
+\subsection{Putting them together}
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[R=1<\kilo\ohm>,
+ i>_=1<\milli\ampere>, o-*] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz}
+ \draw (0,0) to[D*, v=$v_D$,
+ i=1<\milli\ampere>, o-*] (3,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\subsection{Line joins between Path Components}
+\label{sec:line-joins}
+
+Line joins should be calculated correctly - if they are on the same path, and the path is not closed. For example, the following path is not closed correctly (\textit{--cycle} does not work here!):
+\begin{LTXexample}[varwidth=true]
+ \begin{tikzpicture}[line width=3pt,european]
+ \draw (0,0) to[R]++(2,0)to[R]++(0,2)
+ --++(-2,0)to[R]++(0,-2);
+ \draw[red,line width=1pt] circle(2mm);
+ \end{tikzpicture}
+\end{LTXexample}
+To correct the line ending, there are support shapes to fill the missing rectangle. They can be used like the support shapes (*,o,d) using a dot (.) on one or both ends of a component (have a look at the last resistor in this example:
+\begin{LTXexample}[varwidth=true]
+ \begin{tikzpicture}[line width=3pt,european]
+ \draw (0,0) to[R]++(2,0)to[R]++(0,2)
+ --++(-2,0)to[R,-.]++(0,-2);
+ \draw[red,line width=1pt] circle(2mm);
+ \end{tikzpicture}
+\end{LTXexample}
+
+
+\section{Colors}
+
+\subsection{Shape colors}
+
+The color of the components is stored in the key \verb!\circuitikzbasekey/color!. Circui\TikZ\ tries to follow the color set in \TikZ, although sometimes it fails. If you change color in the picture, please do not use just the color name as a style, like \verb![red]!, but rather assign the style \verb![color=red]!.
+
+Compare for instance
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw[red]
+ (0,2) node[and port] (myand1) {}
+ (0,0) node[and port] (myand2) {}
+ (2,1) node[xnor port] (myxnor) {}
+ (myand1.out) -| (myxnor.in 1)
+ (myand2.out) -| (myxnor.in 2)
+;\end{circuitikz}
+\end{LTXexample}
+
+and
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw[color=red]
+ (0,2) node[and port] (myand1) {}
+ (0,0) node[and port] (myand2) {}
+ (2,1) node[xnor port] (myxnor) {}
+ (myand1.out) -| (myxnor.in 1)
+ (myand2.out) -| (myxnor.in 2)
+;\end{circuitikz}
+\end{LTXexample}
+
+One can of course change the color \emph{in medias res}:
+\begin{LTXexample}[pos=t, varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) node[pnp, color=blue] (pnp2) {}
+ (pnp2.B) node[pnp, xscale=-1, anchor=B, color=brown] (pnp1) {}
+ (pnp1.C) node[npn, anchor=C, color=green] (npn1) {}
+ (pnp2.C) node[npn, xscale=-1, anchor=C, color=magenta] (npn2) {}
+ (pnp1.E) -- (pnp2.E) (npn1.E) -- (npn2.E)
+ (pnp1.B) node[circ] {} |- (pnp2.C) node[circ] {}
+;\end{circuitikz}
+\end{LTXexample}
+
+The all-in-one stream of bipoles poses some challanges, as only the actual body of the bipole, and not the connecting lines, will be rendered in the specified color. Also, please notice the curly braces around the \texttt{to}:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0) to[V=1<\volt>] (0,2)
+ { to[R=1<\ohm>, color=red] (2,2) }
+ to[C=1<\farad>] (2,0) -- (0,0)
+;\end{circuitikz}
+\end{LTXexample}
+
+Which, for some bipoles, can be frustrating:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,0){to[V=1<\volt>, color=red] (0,2) }
+ to[R=1<\ohm>] (2,2)
+ to[C=1<\farad>] (2,0) -- (0,0)
+;\end{circuitikz}
+\end{LTXexample}
+
+The only way out is to specify different paths:
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw[color=red]
+ (0,0) to[V=1<\volt>, color=red] (0,2);
+ \draw (0,2) to[R=1<\ohm>] (2,2)
+ to[C=1<\farad>] (2,0) -- (0,0)
+;\end{circuitikz}
+\end{LTXexample}
+
+And yes: this is a bug and \emph{not} a feature\ldots
+
+\subsection{Fill colors}
+
+Since version 0.9.0, you can also fill most shapes with a color (the manual specifies which ones are fillable or not). The syntax is quite intuitive:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,2) node[and port, fill=yellow] (myand1) {}
+ (0,0) node[and port, fill=cyan] (myand2) {}
+ (2,1) node[xnor port,fill=red!30!white] (myxnor) {}
+ (myand1.out) -| (myxnor.in 1)
+ (myand2.out) -| (myxnor.in 2)
+;\end{circuitikz}
+\end{LTXexample}
+
+
+This fill color will override any color defined by the style (see section~\ref{sec:styling-fillcolor}). If you want to override a style fill color with no-fill for a specific component, you need to override the style --- it's a bit unfortunate but it should be an exceptional thing anyway:
+
+\begin{LTXexample}[varwidth=true, basicstyle=\small\ttfamily]
+\begin{circuitikz}
+ \ctikzset{logic ports/fill=cyan!30!white}
+ \draw[red] (-0.5,3) -- (-0.5, -1);
+ \draw[red] (1.5,3) -- (1.5, -1);
+ \draw
+ (0,2) node[and port, ] (myand1) {}
+ (0,0) node[and port, fill=cyan] (myand2) {}
+ (2,1) node[xnor port, circuitikz/logic ports/fill=none] (myxnor) {}
+ (myand1.out) -| (myxnor.in 1)
+ (myand2.out) -| (myxnor.in 2)
+;\end{circuitikz}
+\end{LTXexample}
+You can combine shape colors with fill colors, too, but you should use the \texttt{draw} color option style for this:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw[color=red]
+ (0,2) node[and port, fill=yellow] (myand1) {1}
+ (0,0) node[and port, fill=cyan] (myand2) {2}
+ (2,1) node[xnor port,fill=red!30!white] (myxnor) {3}
+ (myand1.out) -| (myxnor.in 1)
+ (myand2.out) -| (myxnor.in 2)
+;\end{circuitikz}
+\end{LTXexample}
+
+This is because, as you can see from the following example in port \texttt{2}, you can't specify both a fill and a color in the node (yes, it's a bug too, but it's quite complex to solve given the current circuit\TikZ{} architecture).
+A workaround is shown in port \texttt{3}:
+
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ (0,2) node[and port, color=black] (myand1) {1}
+ (0,0) node[and port, color=blue, fill=cyan] (myand2) {2}
+ (2,1) {[color=blue] node[xnor port, fill=cyan] (myxnor) {3}}
+ (myand1.out) -| (myxnor.in 1)
+ (myand2.out) -| (myxnor.in 2)
+;\end{circuitikz}
+\end{LTXexample}
+
+Notice also that the connection point are always filled, although the color \emph{tries} to follow the color of the filling of the component:
+
+\begin{LTXexample}[varwidth=true, pos=t]
+\begin{circuitikz}
+ \fill[cyan] (0,3.0) rectangle (7,7);
+ \draw [fill=yellow, ] (4,4) to [D,o-o] ++(0,2) to[D*, fill=yellow] ++(2,0)
+ to[D*] ++(0,-2) to[D, fill=red, o-o] ++(-2,0);
+ \draw (1,4) node[ocirc]{} -- ++(1,0) node[ocirc]{};
+ \draw (1,4.5) to[short, o-o] ++(1,0) to[short, -o] ++(1,0);
+ \draw[fill=yellow] (1,5) to[short, o-o] ++(1,0) to[short, -o] ++(1,0);
+ \draw (1,5.5) to[short, fill=red, o-o] ++(1,0) to[short, -o] ++(1,0);
+\end{circuitikz}
+\end{LTXexample}
+
+\section{FAQ}
+
+\noindent Q: When using \verb!\tikzexternalize! I get the following error:
+\begin{verbatim}
+ ! Emergency stop.
+\end{verbatim}
+
+\noindent A: The \TikZ\ manual states:
+\begin{quotation}
+Furthermore, the library assumes that all \LaTeX\ pictures are ended
+ with \\\verb!\end{tikzpicture}!.
+\end{quotation}
+
+Just substitute every occurrence of the environment \verb!circuitikz! with \verb!tikzpicture!. They are actually pretty much the same.
+
+\bigskip
+
+\noindent Q: How do I draw the voltage between two nodes?
+
+\noindent A: Between any two nodes there is an open circuit!
+\begin{LTXexample}[varwidth=true]
+\begin{circuitikz} \draw
+ node[ocirc] (A) at (0,0) {}
+ node[ocirc] (B) at (2,1) {}
+ (A) to[open, v=$v$] (B)
+;\end{circuitikz}
+\end{LTXexample}
+
+\bigskip
+
+\noindent Q: I cannot write \verb!to[R = $R_1=12V$]! nor \verb!to[ospst = open, 3s]!: I get errors.
+
+\noindent A: It is a limitation of the parser.
+
+Use \verb|\def{\eq}{=}| \verb!to[R = $R_1\eq 12V$]! and \verb!to[ospst = open{,} 3s]! instead; see caveat in section~\ref{sec:labels-and-annotations}.
+
+\bigskip
+
+\noindent Q: I tried to change the direction of the $y$ axis with \texttt{yscale=-1}, but the circuit is completely messed up.
+
+\noindent A: Yes, it's a known bug (or misfeature, or limitation). See section~\ref{sec:bugs}. Don't do that.
+
+
+\bigskip
+
+\noindent Q: I tried to put a diode in a \texttt{pic}, but it's coming out badly rotated.
+
+\noindent A: Yes, it's a known bug (or misfeature, or limitation). See section~\ref{sec:bugs}. \Circuitikz{} is not compatible with \texttt{pic}s at this point.
+
+\section{Defining new components}
+
+\begin{quote}
+ Per me si va ne la città dolente,\\
+ per me si va ne l'etterno dolore,\\
+ per me si va tra la perduta gente.\\
+ \dots\\
+ Lasciate ogne speranza, voi ch'intrate.%
+ \footnote{\url{https://classicsincontext.wordpress.com/2010/02/28/canto-iii-per-me-si-va-ne-la-citta-dolente/}}
+\end{quote}
+
+
+\textbf{Big fat warning}: this material is reserved to \TeX-hackers; do not delve into this if you have no familiarity with (at least) a bit of core \TeX{} programming and to the basic \TikZ{} layer. You have been warned.
+
+
+\subsection{Suggested setup}
+
+The suggested way to start working on a new component is to use the utilities of the \Circuitikz{} manual for checking and testing your device. Basically, find (or download) the source code of the last version of \Circuitikz{} and find the file \texttt{ctikzmanutils.sty}; copy it in your directory and prepare a file like this:
+
+\begin{lstlisting}
+\documentclass[a4paper, titlepage]{article}
+\usepackage{a4wide} %smaller borders
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\parindent=0pt
+\parskip=4pt plus 6pt minus 2pt
+\usepackage[siunitx, RPvoltages]{circuitikz}
+\usepackage{ctikzmanutils}
+\makeatletter
+%% Test things here
+% defines
+
+% components
+
+% paths
+\makeatother
+
+\begin{document}
+
+\circuitdescbip*{damper}{Mechanical damping}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+
+\geolrcoord{dampershape, fill=yellow}
+
+\begin{LTXexample}[varwidth]
+\begin{circuitikz}
+ \draw (0,0) to[R] ++(2,0)
+ to[damper] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+\end{document}
+\end{lstlisting}
+
+This will compile to something like this (in this case, we are using a couple of existing components to check everything is ok):
+
+\circuitdescbip*{damper}{Mechanical damping}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+
+\geolrcoord{dampershape, fill=yellow}
+
+\begin{LTXexample}[varwidth]
+\begin{circuitikz}
+ \draw (0,0) to[R] ++(2,0)
+ to[damper] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+The command \verb|circuitdescbip*| is used to show the component description (you can check the definition and the usage looking at \texttt{ctikzmanutils.sty} file, and the \verb|\geolrcoord| is used to show the main anchors (geographical plus \texttt{left} and \texttt{right}) of the component.
+
+From now on, you can add the new commands for the component between the \verb|\makeatletter| and \verb|\makeatother| commands and, modifying the example, check the results.
+
+\subsection{Path-style component}
+
+Let's define for example a path style component, like the one suggested by the user \texttt{@alex} on \href{https://tex.stackexchange.com/questions/484268/combined-spring-damper-in-circuitikz}{\TeX{} stackexchange site}. The component will be a mix of the \texttt{damper} and the \texttt{spring} components already present.
+
+The first step is to check if we can use the definition already existing for similar elements (for coherence of size) or if we need to define new ones; for this you have to check the file \texttt{pgfcirc.defines.tex}: we find
+
+\begin{lstlisting}
+ \ctikzset{bipoles/spring/height/.initial=.5}
+ \ctikzset{bipoles/spring/width/.initial=.5}
+ \ctikzset{bipoles/damper/height/.initial=.35}
+ \ctikzset{bipoles/damper/length/.initial=.3}
+ \ctikzset{bipoles/damper/width/.initial=.4}
+\end{lstlisting}
+
+We will use them; at this stage you can decide to add other parameters if you need them. (Notice, however, than although flexibility is good, these parameters should be described in the manual, otherwise they're as good as a fixed number in the code).
+
+To define the new component we will look into \texttt{pgfcircbipoles.tex} and we will copy, for example, the definition of the damper into our code, just changing the name:
+
+\begin{lstlisting}
+%% mechanical resistor - damper
+\pgfcircdeclarebipolescaled{mechanicals}
+{} % extra anchors
+{\ctikzvalof{bipoles/damper/height}} % depth (under the path line)
+{viscoe} % name
+{\ctikzvalof{bipoles/damper/height}} % height (above the path line)
+{\ctikzvalof{bipoles/damper/width}} % width
+{
+ \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@maybefill
+
+ % line into the damper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ % damper box
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ % damper vertical element
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+\end{lstlisting}
+
+This command will define a shape that is named \texttt{viscoeshape}, with all the correct geographical anchors based on the depth, height and width defined in the parameters of \verb|\pgfcircdeclarebipolescaled|. Moreover, the element is assigned to the class \texttt{mechanicals} for styling.
+
+To be coherent with the styling, you should use (when needed) the length \verb|\pgf@circ@scaled@Rlen| as the ``basic'' length for drawing, using the fill functions defined at the start of \texttt{pgfcirc.defines.tex} to fill and stroke --- so that the operation will follow the style parameters and, finally, use the macro \verb|\pgf@circ@setlinewidth| to set the line thickness /the first argument is the ``legacy'' class, if you do not want to assign one you can use the pseudo-legacy class \texttt{none}.
+
+The anchors for the bipole (which then set the lengths \verb|\pgf@circ@res@left|) are already scaled for your use. You can use these lenghts (which defines, normally, the geographical anchors of the element) to draw your shapes.
+
+This is not sufficient for using the element in a \texttt{to[]} path command; you need to ``activate'' it with (this commands are normally in \texttt{pgfcircpath.tex}):
+
+\begin{lstlisting}
+\def\pgf@circ@viscoe@path#1{\pgf@circ@bipole@path{viscoe}{#1}}
+\compattikzset{viscoe/.style = {\circuitikzbasekey,
+ /tikz/to path=\pgf@circ@dviscoe@path, l=#1}}
+\end{lstlisting}
+
+And now you can show it with:
+
+\begin{lstlisting}
+\circuitdescbip*{viscoe}{Mechanical viscoelastic element}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+
+\geolrcoord{viscoeshape, fill=yellow}
+
+\begin{LTXexample}[varwidth]
+\begin{circuitikz}
+ \draw (0,0) to[spring] ++(2,0)
+ to[viscoe] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+\end{lstlisting}
+
+Obviously, at first you you just have a component that is the same as the one you copied with another name. It is now just a matter of modifying it so that it has the desired shape; in the example above you can already see the new symbol after the changes.
+
+When doing the drawing, the \verb|\pgfcircdeclarebipole| will setup the lengths \verb|\pgf@circ@res@right|
+and \verb|\pgf@circ@res@up| as the $x$-$y$ coordinates of the upper right corner, and
+\verb|\pgf@circ@res@left| and \verb|\pgf@circ@res@down| as the $x$-$y$ coordinates of the lower left corner of your shape. The \texttt{center} coordinate is usually at $(0pt, 0pt)$.
+
+Looking at the implementation of the \texttt{spring} element, a possible implementation is changing the lines between lines~12 and~16 with:
+
+\begin{lstlisting}
+ % spring into the damper
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpoint{.25\pgf@circ@res@up}{.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.75\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@left}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{.75\pgf@circ@res@up}}
+ \pgfusepath{stroke}
+ \endpgfscope
+\end{lstlisting}
+
+which leads to:
+
+\circuitdescbip*{viscoe}{Mechanical viscoelastic element}{}(left/135/0.2, right/45/0.2, center/-90/0.3)
+
+\geolrcoord{viscoeshape, fill=yellow}
+
+\begin{LTXexample}[varwidth]
+\begin{circuitikz}
+ \draw (0,0) to[spring] ++(2,0)
+ to[viscoe] ++(2,0);
+\end{circuitikz}
+\end{LTXexample}
+
+As a final note, notice that the \texttt{viscoe} element is already added to the standard package.
+
+\subsection{Node-style component}
+
+Adding a node-style component is much more straightforward. Just define it by following examples in, for example, \texttt{pgfcirctripoles.tex} or the other files; be careful that you should define all the geographical anchors of the shape if you want that the \TikZ{} positioning options (like \texttt{left}, \texttt{above}, etc.) behave correctly with your component.
+
+To have a scalable component, for example in the \texttt{transistors} class, you should use something like
+\begin{lstlisting}
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{transistors}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+\end{lstlisting}
+at the start of anchors and macros definition, and use (for example, the exact code will change greatly depending on your component):
+\begin{lstlisting}
+ \savedanchor\northeast{% upper right
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\pgf@circ@scaled@Rlen
+ \pgf@y=0.5\pgf@y
+ \pgf@x=0.3\pgf@y
+ }
+\end{lstlisting}
+in all the \texttt{savedanchors}.
+
+Then, in the drawing part, you should start with:
+\begin{lstlisting}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+\end{lstlisting}
+and then use \verb|\pgf@circ@scaled@Rlen| (or the anchors) as default lengths while you draw it.
+
+\subsubsection{Finishing your work}
+
+Once you have a satisfactory element, you should
+\begin{itemize}
+ \item Clean up your code;
+ \item write a piece of documentation explaining its use, with an example;
+ \item Propose the element for inclusion in the GitHub page of the project (you will have to license this as explained in that page, of course).
+\end{itemize}
+
+The best way of contributing is forking the project, adding your component in the correct files, modifying the manual and creating a pull request for the developers to merge. Anyway, if this is a problem, just open an issue and someone (when they have time\dots) will answer.
+
+
+
+\section{Examples}
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\begin{circuitikz}[scale=1.4]\draw
+ (0,0) to[C, l=10<\micro\farad>] (0,2) -- (0,3)
+ to[R, l=2.2<\kilo\ohm>] (4,3) -- (4,2)
+ to[L, l=12<\milli\henry>, i=$i_1$,v=b] (4,0) -- (0,0)
+ (4,2) { to[D*, *-*, color=red] (2,0) }
+ (0,2) to[R, l=1<\kilo\ohm>, *-] (2,2)
+ to[cV, i=1,v=$\SI{.3}{\kilo\ohm}\, i_1$] (4,2)
+ (2,0) to[I, i=1<\milli\ampere>, -*] (2,2)
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\begin{circuitikz}[scale=1.2]\draw
+ (0,0) node[ground] {}
+ to[V=$e(t)$, *-*] (0,2) to[C=4<\nano\farad>] (2,2)
+ to[R, l_=.25<\kilo\ohm>, *-*] (2,0)
+ (2,2) to[R=1<\kilo\ohm>] (4,2)
+ to[C, l_=2<\nano\farad>, *-*] (4,0)
+ (5,0) to[I, i_=$a(t)$, -*] (5,2) -- (4,2)
+ (0,0) -- (5,0)
+ (0,2) -- (0,3) to[L, l=2<\milli\henry>] (5,3) -- (5,2)
+
+ {[anchor=south east] (0,2) node {1} (2,2) node {2} (4,2) node {3}}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\begin{circuitikz}[scale=1.2]\draw
+ (0,0) node[anchor=east] {B}
+ to[short, o-*] (1,0)
+ to[R=20<\ohm>, *-*] (1,2)
+ to[R=10<\ohm>, v=$v_x$] (3,2) -- (4,2)
+ to[cI=$\frac{\siemens}{5} v_x$, *-*] (4,0) -- (3,0)
+ to[R=5<\ohm>, *-*] (3,2)
+ (3,0) -- (1,0)
+ (1,2) to[short, -o] (0,2) node[anchor=east]{A}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\begin{circuitikz}[scale=1]\draw
+ (0,0) node[transformer] (T) {}
+ (T.B2) to[pD] ($(T.B2)+(2,0)$) -| (3.5, -1)
+ (T.B1) to[pD] ($(T.B1)+(2,0)$) -| (3.5, -1)
+;\end{circuitikz}
+\end{LTXexample}
+
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\begin{circuitikz}[scale=1]\draw
+ (5,.5) node [op amp] (opamp) {}
+ (0,0) node [left] {$U_{we}$} to [R, l=$R_d$, o-*] (2,0)
+ to [R, l=$R_d$, *-*] (opamp.+)
+ to [C, l_=$C_{d2}$, *-] ($(opamp.+)+(0,-2)$) node [ground] {}
+ (opamp.out) |- (3.5,2) to [C, l_=$C_{d1}$, *-] (2,2) to [short] (2,0)
+ (opamp.-) -| (3.5,2)
+ (opamp.out) to [short, *-o] (7,.5) node [right] {$U_{wy}$}
+;\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,varwidth=true]
+\begin{circuitikz}[scale=1.2, american]\draw
+ (0,2) to[I=1<\milli\ampere>] (2,2)
+ to[R, l_=2<\kilo\ohm>, *-*] (0,0)
+ to[R, l_=2<\kilo\ohm>] (2,0)
+ to[V, v_=2<\volt>] (2,2)
+ to[cspst, l=$t_0$] (4,2) -- (4,1.5)
+ to [generic, i=$i_1$, v=$v_1$] (4,-.5) -- (4,-1.5)
+ (0,2) -- (0,-1.5) to[V, v_=4<\volt>] (2,-1.5)
+ to [R, l=1<\kilo\ohm>] (4,-1.5);
+
+ \begin{scope}[xshift=6.5cm, yshift=.5cm]
+ \draw [->] (-2,0) -- (2.5,0) node[anchor=west] {$v_1/\volt$};
+ \draw [->] (0,-2) -- (0,2) node[anchor=west] {$i_1/\SI{}{\milli\ampere}$} ;
+ \draw (-1,0) node[anchor=north] {-2} (1,0) node[anchor=south] {2}
+ (0,1) node[anchor=west] {4} (0,-1) node[anchor=east] {-4}
+ (2,0) node[anchor=north west] {4}
+ (-1.5,0) node[anchor=south east] {-3};
+ \draw [thick] (-2,-1) -- (-1,1) -- (1,-1) -- (2,0) -- (2.5,.5);
+ \draw [dotted] (-1,1) -- (-1,0) (1,-1) -- (1,0)
+ (-1,1) -- (0,1) (1,-1) -- (0,-1);
+ \end{scope}
+\end{circuitikz}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t,varwidth=true]
+ \begin{circuitikz}[scale=1]
+ \ctikzset{bipoles/detector/width=.35}
+ \ctikzset{quadpoles/coupler/width=1}
+ \ctikzset{quadpoles/coupler/height=1}
+ \ctikzset{tripoles/wilkinson/width=1}
+ \ctikzset{tripoles/wilkinson/height=1}
+ %\draw[help lines,red,thin,dotted] (0,-5) grid (5,5);
+ \draw
+ (-2,0) node[wilkinson](w1){}
+ (2,0) node[coupler] (c1) {}
+ (0,2) node[coupler,rotate=90] (c2) {}
+ (0,-2) node[coupler,rotate=90] (c3) {}
+ (w1.out1) .. controls ++(0.8,0) and ++(0,0.8) .. (c3.3)
+ (w1.out2) .. controls ++(0.8,0) and ++(0,-0.8) .. (c2.4)
+ (c1.1) .. controls ++(-0.8,0) and ++(0,0.8) .. (c3.2)
+ (c1.4) .. controls ++(-0.8,0) and ++(0,-0.8) .. (c2.1)
+ (w1.in) to[short,-o] ++(-1,0)
+ (w1.in) node[left=30] {LO}
+ (c1.2) node[match,yscale=1] {}
+ (c1.3) to[short,-o] ++(1,0)
+ (c1.3) node[right=30] {RF}
+ (c2.3) to[detector,-o] ++(0,1.5)
+ (c2.2) to[detector,-o] ++(0,1.5)
+ (c3.1) to[detector,-o] ++(0,-1.5)
+ (c3.4) to[detector,-o] ++(0,-1.5)
+ ;
+ \end{circuitikz}
+\end{LTXexample}
+
+
+\begin{tabular}{l}\label{ex:compatibility}
+\IfFileExists{compatibility.pdf}
+{\fbox{\includegraphics{compatibility.pdf}}}
+\\
+\begin{lstlisting}
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usetikzlibrary{circuits.ee.IEC}
+\usetikzlibrary{positioning}
+
+\usepackage[compatibility]{circuitikzgit}
+\ctikzset{bipoles/length=.9cm}
+
+\begin{document}
+ \begin{tikzpicture}[circuit ee IEC]
+ \draw (0,0) to [resistor={name=R}] (0,2)
+ to[diode={name=D}] (3,2);
+ \draw (0,0) to[*R=$R_1$] (1.5,0) to[*Tnpn] (3,0)
+ to[*D](3,2);
+ \end{tikzpicture}
+\end{document}
+ \end{lstlisting}
+\end{tabular}
+
+% % changelog.tex will be updated by makefile from CHANGELOG.md
+\section{Changelog and Release Notes}
+\IfFileExists{changelog.tex}
+{\sloppy\input{changelog.tex}}
+{The file changelog.tex was not found, run 'make changelog' at toplevel to generate it with pandoc from CHANGELOG.md}
+
+\printindex
+
+\end{document}
diff --git a/graphics/pgf/contrib/circuitikz/doc/compatibility.tex b/graphics/pgf/contrib/circuitikz/doc/compatibility.tex
new file mode 100644
index 0000000000..0f789cb1c6
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/doc/compatibility.tex
@@ -0,0 +1,17 @@
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usetikzlibrary{circuits.ee.IEC}
+\usetikzlibrary{positioning}
+
+\usepackage[compatibility, RPvoltages]{circuitikz}
+\ctikzset{bipoles/length=.9cm}
+
+\begin{document}
+ \begin{tikzpicture}[circuit ee IEC]
+ \draw (0,0) to [resistor={name=R}] (0,2)
+ to[diode={name=D}] (3,2);
+ \draw (0,0) to[*R=$R_1$] (1.5,0) to[*Tnpn] (3,0)
+ to[*D](3,2);
+ \end{tikzpicture}
+\end{document}
diff --git a/graphics/pgf/contrib/circuitikz/doc/ctikzmanutils.sty b/graphics/pgf/contrib/circuitikz/doc/ctikzmanutils.sty
new file mode 100644
index 0000000000..5e11576ca2
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/doc/ctikzmanutils.sty
@@ -0,0 +1,146 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{ctikzmanutils}[2019/07/26 utilities for formatting circuitikz manual]
+\RequirePackage{ifthen}
+\RequirePackage{xparse}
+\RequirePackage{showexpl}
+%
+% The following trick is used to silence showexpl a bit, so that the
+% logs are readable...
+%
+\makeatletter
+\let\SX@Info=\relax % silence showexpl a bit...
+\makeatother
+%
+\lstset{pos=l,width=-99pt, overhang=0pt,hsep=\columnsep,vsep=\bigskipamount,
+ rframe=single,numbers=left,numberstyle=\tiny,numbersep=.3em, xleftmargin=1em,
+ columns=flexible, language=[LaTeX]TEX,breaklines=true,
+ basicstyle=\normalsize\ttfamily,tabsize=3}
+
+%
+% draw the shape without affecting anything
+\newcommand{\drawphantomshape}[1] {%
+ {\tikz [overlay, color=blue] \path (0,0) node[#1]{};}
+}
+%% New circuit description macros
+\newcommand{\twopartbox}[2]{%
+ \leavevmode\null\par\noindent\fbox{\parbox[c]{0.3\linewidth}{#1} \parbox[c]{0.6\linewidth}{\raggedright #2}\par\noindent}%
+}
+% filling color for filled-enabled component
+\colorlet{fillcol}{cyan!30!white}
+% find the class for the element. Thanks to Symbol 1
+% https://tex.stackexchange.com/a/501389/38080
+\def\checkclass#1{%
+ \csname pgf@sh@ma@#1\endcsname
+ \ifdefined\ctikzclass
+ Class: \texttt{\ctikzclass}.%
+ \else
+ No class.%
+ \fi
+}
+% description of a node component:
+% optional star for fillable
+% optional: scale of the component in the entry
+% mandatory shape name, description, node text:
+% optional between (): anchor specification list
+% optional between []: internal nodes specification list
+\NewDocumentCommand{\circuitdesc}{s O{1} m m m d() d[]}
+{
+ \twopartbox{%
+ \begin{circuitikz}[]
+ \IfBooleanTF{#1}{%
+ \draw (0,0) node[#3,scale=#2, fill=fillcol](N){#5};
+ }{
+ \draw (0,0) node[#3,scale=#2](N){#5};
+ }
+ \IfValueT{#6}{%
+ \foreach \n/\a/\d in {#6} \path(N.\n) \showcoord(\n)<\a:\d>;
+ }
+ \IfValueT{#7}{%
+ \foreach \n/\a/\d in {#7} \path(N-\n) \showcoordb(N-\n)<\a:\d>;
+ }
+ \end{circuitikz}%
+ }{\sloppy%
+ {#4, type: node\IfBooleanT{#1}{, fillable}%
+ } (\texttt{node[#3]\IfValueT{#7}{(N)}\{#5\}}). \index{#3}%
+ \checkclass{N}%
+ }%
+}
+% description of a path-style component:
+% optional: main name, if different from above
+% mandatory component name, description, comma separated alias
+% optional between (): anchor specification list
+% optional between []: internal nodes specification list
+\NewDocumentCommand{\circuitdescbip}{s o m m m d() d[]}
+{
+\index{#3} \tikz\foreach \i in {#5} {\index{\i|see{#3}} };
+ \twopartbox{%
+ \begin{circuitikz}
+ \IfBooleanTF{#1}{%
+ \draw (0,0) to[#3, name=B, fill=fillcol] (2,0);
+ }{
+ \draw (0,0) to[#3, name=B] (2,0);
+ }
+ \IfValueT{#6}{%
+ \foreach \n/\a/\d in {#6} \path(B.\n) \showcoord(\n)<\a:\d>;
+ }
+ \IfValueT{#7}{%
+ \foreach \n/\a/\d in {#7} \path(B-\n) \showcoordb(B-\n)<\a:\d>;
+ }
+ \end{circuitikz}%
+ }{\sloppy%
+ \texttt{\textbf{#3}}: #4, \texttt{type: path-style\IfBooleanT{#1}{, fillable}%
+ \IfValueT{#7}{, \texttt{name=B}}%
+ \IfValueTF{#2}{, nodename: #2shape.%\drawphantomshape{#2shape}%
+ }{, nodename: #3shape.%\drawphantomshape{#3shape}%
+ }%
+ }%
+ \ifthenelse{\equal{#5}{}}{ }{%
+ Aliases: \texttt{#5}. }\checkclass{B}%
+ }%
+}
+
+%new environment for grouping descriptions
+\newenvironment{groupdesc}{\medskip\begingroup}{\endgroup\par\medskip\par\noindent}
+
+% command to show anchors: (name)<angle>
+% usage in path: \path (anchor) \coord(anchor)<60>
+\makeatletter % we use the internal circuitikz base length
+\def\showcoord(#1)<#2:#3>{%
+ node[circle, red, draw, inner sep=1pt,pin={%
+ [red, inner sep=0.5pt, font=\small,
+ pin distance=#3\pgf@circ@Rlen, pin edge={red, }%
+ ]#2:#1}](#1){}}
+\def\showcoordb(#1)<#2:#3>{%
+ node[circle, blue, draw, inner sep=1pt,pin={%
+ [blue, inner sep=0.5pt, font=\small,
+ pin distance=#3\pgf@circ@Rlen, pin edge={blue, }%
+ ]#2:#1}](#1){}}
+\makeatother
+% show anchors of a node component:
+% optional: options of the circuitikz environment
+% mandatory node spec, node text
+% optional between (): anchor specification list
+\NewDocumentCommand{\showanchors}{O{} m m d()}
+{
+ \begin{circuitikz}[#1]
+ \draw (0,0) node[#2](N){#3};
+ \IfValueT{#4}{%
+ \foreach \n/\a/\d in {#4} \path(N.\n) \showcoord(\n)<\a:\d>;
+ }
+ \end{circuitikz}%
+}
+
+
+\def\geolrcoord#1{\showanchors{#1}{text}(north/90/0.4, north east/45/0.4, east/0/0.4,
+ south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4,
+ left/160/0.4, right/30/0.4, center/-120/0.3
+ )
+}
+
+\def\geocoord#1{\showanchors{#1}{text}(north/90/0.4, north east/45/0.4, east/0/0.4,
+ south east/-45/0.4,
+ south/-90/0.4, south west/-135/0.4, west/180/0.4, north west/135/0.4,
+ center/-120/0.3
+ )
+}
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.4.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.4.sty
new file mode 100644
index 0000000000..bb803ed36c
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.4.sty
@@ -0,0 +1,10127 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+
+%%%%%
+%%%%%
+%%%%%
+%%%%% Se c'è l'opzione symbol, fallback to siunitx con warning
+%%%%%
+%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\def\pgfcircversion{0.4}
+\def\pgfcircversiondate{2012/12/20}
+
+\ProvidesPackage{circuitikz-0.4}%
+ [\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion]
+
+%% Version 2.0 of pgf/TikZ is required
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+\usepgflibrary{decorations.pathmorphing,arrows}
+
+\DeclareOption{european}{
+ \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european}
+ \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester = european}
+}
+
+\DeclareOption{american}{
+ \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester = american}
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{fulldiodes}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiodes}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltages}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrents}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrents}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage = european}
+}
+
+\DeclareOption{americanresistors}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistors}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductors}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductors}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductors}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanports}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanports}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{americangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = american}
+}
+
+\DeclareOption{europeangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = european}
+}
+
+
+\DeclareOption{siunitx}{
+ \pgf@circ@siunitxtrue
+}
+
+\DeclareOption{nosiunitx}{
+ \pgf@circ@siunitxfalse
+}
+
+\DeclareOption{arrowmos}{
+ \pgf@circuit@mos@arrowstrue
+}
+
+\DeclareOption{noarrowmos}{
+ \pgf@circuit@mos@arrowsfalse
+}
+
+\DeclareOption{straightlabels}{
+ \ctikzset{label/align = straight}
+}
+
+\DeclareOption{rotatelabels}{
+ \ctikzset{label/align = rotate}
+}
+
+\DeclareOption{smartlabels}{
+ \ctikzset{label/align = smart}
+}
+
+
+
+\DeclareOption{fulldiode}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiode}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltage}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrent}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrent}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage = european}
+}
+
+\DeclareOption{americanresistor}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistor}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductor}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductor}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductor}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanport}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{betterproportions}{
+ \ctikzset{monopoles/ground/width/.initial=.15}
+
+ \ctikzset{bipoles/resistor/height/.initial=.23}
+ \ctikzset{bipoles/resistor/width/.initial=.6}
+ \ctikzset{bipoles/capacitor/height/.initial=.4}
+ \ctikzset{bipoles/capacitor/width/.initial=.1}
+ \ctikzset{bipoles/potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height 2/.initial=.23}
+ \ctikzset{bipoles/photoresistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistor/main/.initial=.7}
+ \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7
+ \ctikzset{bipoles/thermistorptc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorptc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/main/.initial=.7}
+ \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/width/.initial=.6}
+ \ctikzset{bipoles/vresistor/height/.initial=.45}
+ \ctikzset{bipoles/vresistor/width/.initial=.6}
+ \ctikzset{bipoles/cuteinductor/height/.initial=.23}
+ \ctikzset{bipoles/cuteinductor/width/.initial=.6}
+ \ctikzset{bipoles/cuteinductor/coils/.initial=6}
+ \ctikzset{bipoles/americaninductor/height/.initial=.23}
+ \ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+ \ctikzset{bipoles/americaninductor/width/.initial=.6}
+ \ctikzset{bipoles/americaninductor/coils/.initial=4}
+ \ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+ \ctikzset{bipoles/vcuteinductor/coil height/.initial=.23}
+ \ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+ \ctikzset{bipoles/vcuteinductor/coils/.initial=6}
+ \ctikzset{bipoles/vamericaninductor/height/.initial=.45}
+ \ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+ \ctikzset{bipoles/vamericaninductor/width/.initial=.6}
+ \ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+ \ctikzset{bipoles/generic/height/.initial=.23}
+ \ctikzset{bipoles/generic/width/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/generic potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/ageneric/height/.initial=.23}
+ \ctikzset{bipoles/ageneric/width/.initial=.6}
+ \ctikzset{bipoles/memristor/height/.initial=.23}
+ \ctikzset{bipoles/memristor/wave height/.initial=.375}
+ \ctikzset{bipoles/memristor/width/.initial=.60}
+ \ctikzset{bipoles/tgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tgeneric/width/.initial=.6}
+ \ctikzset{bipoles/tfullgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tfullgeneric/width/.initial=.60}
+ \ctikzset{bipoles/fullgeneric/height/.initial=.23}
+ \ctikzset{bipoles/fullgeneric/width/.initial=.6}
+ \ctikzset{bipoles/diode/height/.initial=.3}
+ \ctikzset{bipoles/diode/width/.initial=.25}
+
+ \ctikzset{tripoles/thyristor/height/.initial=.66}
+ \ctikzset{tripoles/thyristor/height 2/.initial=.3}
+ \ctikzset{tripoles/thyristor/width/.initial=.6}
+ \ctikzset{tripoles/thyristor/diode height/.initial=.3}
+ \ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+ \ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/triac/height/.initial=.66}
+ \ctikzset{tripoles/triac/width/.initial=.6}
+ \ctikzset{tripoles/triac/diode width left/.initial=.3}
+ \ctikzset{tripoles/triac/diode width right/.initial=.3}
+}
+
+%%%%%%%%%
+
+
+
+%%%%%%%%%%% Springe nach circuitikz.code
+%%%---------- open: circuitikz.code.tex
+
+%% Options
+
+
+
+
+%% Keys
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{bipoles/length/.initial=1.4cm}
+\ctikzset{nodes width/.initial=.04}
+\newdimen\pgf@circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1}}
+
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/oscillator/width/.initial=.7}
+
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/coils/.initial=6}
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.8}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=6}
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/interr/height/.initial=.35}
+\ctikzset{bipoles/interr/width/.initial=.35}
+\ctikzset{bipoles/interr/height 2/.initial=.1}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.25}
+\ctikzset{bipoles/open/width/.initial=.8}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.0}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/gate height/.initial=.45}
+\ctikzset{tripoles/npn/gate height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/gate width/.initial=.5}
+
+
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/gate height/.initial=.45}
+\ctikzset{tripoles/pnp/gate height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/gate width/.initial=.5}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue } }
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse } }
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf@circuit@bipole@reversed
+\ctikzset{bipole/reversed/.is if=pgf@circuit@bipole@reversed}
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.is choice}
+\ctikzset{bipole/nodes/left/none/.code={\ctikzsetvalof{bipole/nodes/left}{none}}}
+\ctikzset{bipole/nodes/left/empty/.code={\ctikzsetvalof{bipole/nodes/left}{empty}}}
+\ctikzset{bipole/nodes/left/full/.code={\ctikzsetvalof{bipole/nodes/left}{full}}}
+\ctikzset{bipole/nodes/right/.is choice}
+\ctikzset{bipole/nodes/right/none/.code={\ctikzsetvalof{bipole/nodes/right}{none}}}
+\ctikzset{bipole/nodes/right/empty/.code={\ctikzsetvalof{bipole/nodes/right}{empty}}}
+\ctikzset{bipole/nodes/right/full/.code={\ctikzsetvalof{bipole/nodes/right}{full}}}
+
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@fulldiode
+\ctikzset{diode/.is if=pgf@circuit@fulldiode}
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse }
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color=#1}}}
+
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+\tikzset{american currents/.style = { \circuitikzbasekey/current = american } }
+\tikzset{european currents/.style = { \circuitikzbasekey/current = european } }
+\tikzset{american voltages/.style = { \circuitikzbasekey/voltage = american } }
+\tikzset{european voltages/.style = { \circuitikzbasekey/voltage = european } }
+\tikzset{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester/.is choice}
+\ctikzset{gas filled surge arrester/european/.code= {\pgf@circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester/american/.code= {\pgf@circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = american } }
+\tikzset{european gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full } }
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester } }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester } }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltaege conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue } }
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue }
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+%% dependencies
+
+
+
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+
+
+
+
+
+%%%%%%%%%%% Springe nach pgfcircutils
+%%%---------- open: pgfcircutils.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+ \fi
+}
+
+\def\pgf@circ@finallabel#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1label/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1label/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1label/name}}{\ctikzvalof{bipole/#1label/unit}}$%
+ \fi%
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+}
+
+
+%%%---------- close: pgfcircutils
+%%%%%%%%%%% Springe nach pgfcircmath
+%%%---------- open: pgfcircmath.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+% angle between 0 and 360
+\def\pgf@circ@slope#1#2{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{#2}%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \ifdim\pgf@x<0.1pt
+ \ifdim\pgf@x>-0.1pt % vertical
+ \ifdim\pgf@y<0pt
+ \def\pgfmathresult{-90.0}
+ \else
+ \def\pgfmathresult{+90.0}
+ \fi
+ \else % oblique with dx < 0
+ \pgfmathdivide{\pgf@y}{\pgf@x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf@x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \else % oblique with dx > 0
+ \pgfmathdivide{\pgf@y}{\pgf@x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf@x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \pgf@x=\pgfmathresult pt
+ \ifdim\pgf@x<0pt
+ \pgfmathadd{\pgfmathresult}{+360}
+ \fi
+ }
+
+
+%%%---------- close: pgfcircmath
+
+%%%%%%%%%%% Springe nach pgfcircshapes
+%%%---------- open: pgfcircshapes.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \northeast
+ \pgf@y=-\pgf@y
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \northeast
+ \pgf@y=0cm
+ \pgf@x=-\pgf@x
+ }
+ \anchor{text}{%
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+
+}
+
+%% Current arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+
+}
+
+%%%---------- close: pgfcircshapes
+%%%%%%%%%%% Springe nach pgfcircmonopoles
+%%%---------- open: pgfcircmonopoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+
+\pgfdeclareshape{ground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+
+\pgfdeclareshape{rground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{tground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ %\pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{sground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% noiseless ground
+\pgfdeclareshape{nground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{1.3\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{1.3\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% protective ground
+\pgfdeclareshape{pground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathcircle{\pgfpoint{0pt}{-\pgf@circ@res@step}} {1.2\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% chassis ground
+\pgfdeclareshape{cground}{
+\anchor{center}{
+ \pgfpointorigin
+}
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/chassis/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-1.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+
+\pgfdeclareshape{antenna}{
+\anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+
+ % \pgfpathmoveto{\pgfpointorigin}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ % \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=0pt
+ \pgf@y=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgf@y=2\pgf@y
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% match
+\pgfdeclareshape{match}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% oscillator
+\pgfdeclareshape{oscillator}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \pgf@x=\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@x=-0.5\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{south}{
+ \pgf@x=\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@x=-0.5\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{east}{
+ \pgfpointorigin
+ \pgf@x=-\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ }
+ \anchor{west}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@circ@res@step=.5\pgf@circ@res@step
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{-\pgf@circ@res@step}{0}} {\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+%%%---------- close: pgfcircmonopoles
+%%%%%%%%%%% Springe nach pgfcircbipoles
+%%%---------- open: pgfcircbipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+
+
+\long\def\pgfcircdeclarebipole#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@res@down=-#2\pgf@circ@Rlen
+ \pgf@circ@res@up=#4\pgf@circ@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=0cm
+ }
+ \anchor{ne}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ }
+ \anchor{nw}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{%
+ \ifpgf@circuit@bipole@reversed\else\southwest\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{s}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=0cm
+ }
+ \anchor{se}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ }
+ \anchor{w}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=0cm
+ }
+ \anchor{left}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{below}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=0cm
+ }
+ \anchor{a}{%
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{b} {
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{%
+ \textanchor
+ }
+ \anchorborder{%
+ \def\pgf@temp{false}
+ \ifpgf@circuit@bipole@reversed\pgf@temp
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/resistor/height}}{resistor}{\ctikzvalof{bipoles/resistor/height}}{\ctikzvalof{bipoles/resistor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vresistor/height}}{vresistor}{\ctikzvalof{bipoles/vresistor/height}}{\ctikzvalof{bipoles/vresistor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vresistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 12
+ \def\myfrac{.5}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\myfrac\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\myfrac\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\myfrac\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\myfrac\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\myfrac\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\myfrac\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/capacitor/height}}{capacitor}{\ctikzvalof{bipoles/capacitor/height}}{\ctikzvalof{bipoles/capacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pcapacitor/height}}{polarcapacitor}{\ctikzvalof{bipoles/pcapacitor/height}}{\ctikzvalof{bipoles/pcapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/pcapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Battery
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery/height}}{battery}{\ctikzvalof{bipoles/battery/height}}{\ctikzvalof{bipoles/battery/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery1/height}}{battery1}{\ctikzvalof{bipoles/battery1/height}}{\ctikzvalof{bipoles/battery1/width}}{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+
+
+
+ \pgfusepath{draw}
+}
+
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cuteinductor/height}}{cuteinductor}{\ctikzvalof{bipoles/cuteinductor/height}}{\ctikzvalof{bipoles/cuteinductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/cuteinductor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/cuteinductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/cuteinductor/height}\pgf@circ@Rlen
+ \pgfdecorationsegmentamplitude=.5\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentlength = \pgf@circ@res@step
+ \pgfdecorationsegmentaspect=.6
+
+ \pgfdecoration{{coil}{\pgfdecoratedremainingdistance}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+}
+
+
+
+%% american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/americaninductor/height 2}}{americaninductor}{\ctikzvalof{bipoles/americaninductor/height}}{\ctikzvalof{bipoles/americaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/americaninductor/height}\pgf@circ@Rlen
+ \pgfdecorationsegmentamplitude=.45\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentlength = 1.99\pgf@circ@res@step
+
+ \pgfdecoration{{bumps}{\pgfdecoratedremainingdistance}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+}
+
+
+
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsource/height}}{vsource}{\ctikzvalof{bipoles/vsource/height}}{\ctikzvalof{bipoles/vsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourceam/height}}{vsourceAM}{\ctikzvalof{bipoles/vsourceam/height}}{\ctikzvalof{bipoles/vsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+
+
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesin/height}}{vsourcesin}{\ctikzvalof{bipoles/vsourcesin/height}}{\ctikzvalof{bipoles/vsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+% contributed by Alistair Kwan
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesquare/height}}{vsourcesquare}{\ctikzvalof{bipoles/vsourcesquare/height}}{\ctikzvalof{bipoles/vsourcesquare/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isource}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isourceam/height}}{isourceAM}{\ctikzvalof{bipoles/isourceam/height}}{\ctikzvalof{bipoles/isourceam/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+
+
+
+%% Independent sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isourcesin}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Controlled voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsource/height}}{cvsource}{\ctikzvalof{bipoles/cvsource/height}}{\ctikzvalof{bipoles/cvsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourceam/height}}{cvsourceAM}{\ctikzvalof{bipoles/cvsourceam/height}}{\ctikzvalof{bipoles/cvsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \pgfusepath{draw}
+}
+
+
+%% Controlled sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cvsourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Controlled sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cisourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Controlled current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisource/height}}{cisource}{\ctikzvalof{bipoles/cisource/height}}{\ctikzvalof{bipoles/cisource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisourceam/height}}{cisourceAM}{\ctikzvalof{bipoles/cisourceam/height}}{\ctikzvalof{bipoles/cisourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{draw}}
+ \endpgfscope
+}
+
+%% Black generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulldiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullsdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.2\pgf@circ@res@left}{.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulltdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulllediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullpdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{fullvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptydiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptysdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.2\pgf@circ@res@left}{.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptytdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptylediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptypdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{emptyvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+%% Closing SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{cspst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfpatharc{65}{25}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.1\pgf@circ@res@right}{-.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.14\pgf@circ@res@right}{-.35\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+}
+
+%% Opening SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{ospst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@right}{.1\pgf@circ@res@down}}
+ \pgfpatharc{15}{50}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.85\pgf@circ@res@left}{1.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.87\pgf@circ@res@left}{1.26\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+
+}
+
+
+%% Push Button
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pushbutton/height 2}}{pushbutton}{\ctikzvalof{bipoles/pushbutton/height}}{\ctikzvalof{bipoles/pushbutton/width}}{
+
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Ammeter
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ammeter/height}}{ammeter}{\ctikzvalof{bipoles/ammeter/height}}{\ctikzvalof{bipoles/ammeter/width}}{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetarrowsend{}
+
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+
+%% Voltmeter
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/voltmeter/height}}{voltmeter}{\ctikzvalof{bipoles/voltmeter/height}}{\ctikzvalof{bipoles/voltmeter/width}}{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetarrowsend{}
+
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+%% Short circuit
+
+\pgfcircdeclarebipole{}{0}{short}{0}{0}{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/open/height}}{open}{\ctikzvalof{bipoles/open/height}}{\ctikzvalof{bipoles/open/width}}{
+
+}
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/generic/height}}{generic}{\ctikzvalof{bipoles/generic/height}}{\ctikzvalof{bipoles/generic/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fuse/height}}{fuse}{\ctikzvalof{bipoles/fuse/height}}{\ctikzvalof{bipoles/fuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fullgeneric/height}}{fullgeneric}{\ctikzvalof{bipoles/fullgeneric/height}}{\ctikzvalof{bipoles/fullgeneric/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ageneric/height}}{ageneric}{\ctikzvalof{bipoles/ageneric/height}}{\ctikzvalof{bipoles/ageneric/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/afuse/height}}{afuse}{\ctikzvalof{bipoles/afuse/height}}{\ctikzvalof{bipoles/afuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/memristor/height}}{memristor}{\ctikzvalof{bipoles/memristor/height}}{\ctikzvalof{bipoles/memristor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tgeneric/height}}{tgeneric}{\ctikzvalof{bipoles/tgeneric/height}}{\ctikzvalof{bipoles/tgeneric/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/photoresistor/height 2}}{photoresistor}{\ctikzvalof{bipoles/photoresistor/height}}{\ctikzvalof{bipoles/photoresistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Thermistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistor/height}}{thermistor}{\ctikzvalof{bipoles/thermistor/height}}{\ctikzvalof{bipoles/thermistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorptc/height 2}}{thermistorptc}{\ctikzvalof{bipoles/thermistorptc/height}}{\ctikzvalof{bipoles/thermistorptc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorntc/height 2}}{thermistorntc}{\ctikzvalof{bipoles/thermistorntc/height}}{\ctikzvalof{bipoles/thermistorntc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermocouple/height 2}}{thermocouple}{\ctikzvalof{bipoles/thermocouple/height}}{\ctikzvalof{bipoles/thermocouple/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% Varistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varistor/height}}{varistor}{\ctikzvalof{bipoles/varistor/height}}{\ctikzvalof{bipoles/varistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tfullgeneric/height}}{tfullgeneric}{\ctikzvalof{bipoles/tfullgeneric/height}}{\ctikzvalof{bipoles/tfullgeneric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Variable Cute Inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcuteinductor/height}}{vcuteinductor}{\ctikzvalof{bipoles/vcuteinductor/height}}{\ctikzvalof{bipoles/vcuteinductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vcuteinductor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vcuteinductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/vcuteinductor/coil height}\pgf@circ@Rlen
+ \pgfdecorationsegmentamplitude=.5\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentlength = \pgf@circ@res@step
+ \pgfdecorationsegmentaspect=.6
+
+ \pgfdecoration{{coil}{\pgfdecoratedremainingdistance}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% variable american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vamericaninductor/height 2}}{vamericaninductor}{\ctikzvalof{bipoles/vamericaninductor/height}}{\ctikzvalof{bipoles/vamericaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+
+ \pgfdecorationsegmentamplitude=\ctikzvalof{bipoles/vamericaninductor/height}\pgf@circ@Rlen
+ \pgfdecorationsegmentamplitude=.45\pgfdecorationsegmentamplitude
+ \pgfdecorationsegmentamplitude=.45\pgfdecorationsegmentamplitude % per freccia
+ \pgfdecorationsegmentlength = 1.99\pgf@circ@res@step
+
+ \pgfdecoration{{bumps}{\pgfdecoratedremainingdistance}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \endpgfdecoration
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcapacitor/height}}{vcapacitor}{\ctikzvalof{bipoles/vcapacitor/height}}{\ctikzvalof{bipoles/vcapacitor/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+
+%% Easily usable styles
+
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=full}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/reversed=true}}
+
+
+%% The output routine
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[circ] {} }
+ \fi
+ \fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[circ] {} }
+ \fi
+ \fi
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lamp/height}}{lamp}{\ctikzvalof{bipoles/lamp/height}}{\ctikzvalof{bipoles/lamp/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tline/height}
+ }{tline}{\ctikzvalof{bipoles/tline/height}
+ }{\ctikzvalof{bipoles/tline/width}
+ }
+ {
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0}}
+ {\pgfpoint{\pgf@circ@res@step}{0}}
+ {\pgfpoint{0}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/squid/height}}{squid}{\ctikzvalof{bipoles/squid/height}}{\ctikzvalof{bipoles/squid/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/barrier/height}}{barrier}{\ctikzvalof{bipoles/barrier/height}}{\ctikzvalof{bipoles/barrier/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%% Generic two port box
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/twoport/height}}{twoport}{\ctikzvalof{bipoles/twoport/height}}{\ctikzvalof{bipoles/twoport/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vco/width}}{vco}{\ctikzvalof{bipoles/twoport/width}}{\ctikzvalof{bipoles/vco/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+}
+
+%% bandpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bandpass/width}}{bandpass}{\ctikzvalof{bipoles/bandpass/width}}{\ctikzvalof{bipoles/bandpass/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/highpass/width}}{highpass}{\ctikzvalof{bipoles/highpass/width}}{\ctikzvalof{bipoles/highpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lowpass/width}}{lowpass}{\ctikzvalof{bipoles/lowpass/width}}{\ctikzvalof{bipoles/lowpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/adc/width}}{adc}{\ctikzvalof{bipoles/adc/width}}{\ctikzvalof{bipoles/adc/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dac/width}}{dac}{\ctikzvalof{bipoles/dac/width}}{\ctikzvalof{bipoles/dac/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dsp/width}}{dsp}{\ctikzvalof{bipoles/dsp/width}}{\ctikzvalof{bipoles/dsp/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fft/width}}{fft}{\ctikzvalof{bipoles/fft/width}}{\ctikzvalof{bipoles/fft/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipole{}{
+ %\ifpgf@circuit@box
+ \ctikzvalof{bipoles/twoport/width}
+ %\else
+ % \ctikzvalof{bipoles/amp/width}
+ %\fi
+ }{amp}{
+ %\ifpgf@circuit@box
+ \ctikzvalof{bipoles/twoport/width}
+ %\else
+ % \ctikzvalof{bipoles/amp/width}
+ % \fi
+ }{
+ % \ifpgf@circuit@box
+ \ctikzvalof{bipoles/twoport/width}
+ % \else
+ % \ctikzvalof{bipoles/amp/width}
+ % \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+
+ % draw outer box
+ %\ifpgf@circuit@box
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ %\fi
+ % draw outer box
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@left}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.63\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0.75\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vamp/width}}{vamp}{\ctikzvalof{bipoles/vamp/width}}{\ctikzvalof{bipoles/vamp/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vamp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@left}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.63\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0.75\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.7\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piattenuator/width}}{piattenuator}{\ctikzvalof{bipoles/piattenuator/width}}{\ctikzvalof{bipoles/piattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vpiattenuator/width}}{vpiattenuator}{\ctikzvalof{bipoles/vpiattenuator/width}}{\ctikzvalof{bipoles/vpiattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tattenuator/width}}{tattenuator}{\ctikzvalof{bipoles/tattenuator/width}}{\ctikzvalof{bipoles/tattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vtattenuator/width}}{vtattenuator}{\ctikzvalof{bipoles/vtattenuator/width}}{\ctikzvalof{bipoles/vtattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{phaseshifter}{\ctikzvalof{bipoles/phaseshifter/width}}{\ctikzvalof{bipoles/phaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{vphaseshifter}{\ctikzvalof{bipoles/vphaseshifter/width}}{\ctikzvalof{bipoles/vphaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/detector/width}}{detector}{\ctikzvalof{bipoles/detector/width}}{\ctikzvalof{bipoles/detector/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{european gas filled surge arrester}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{\ctikzvalof{bipoles/european gas filled surge arrester/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{american gas filled surge arrester}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+ %\def\pgf@circ@temp{right}
+ %\ifx\tikz@res@label@pos\pgf@circ@temp
+ % \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ %\else
+% \def\pgf@circ@temp{below}
+% \ifx\tikz@res@label@pos\pgf@circ@temp
+% \pgf@circ@res@step=-1.2\pgf@circ@res@up
+% \else
+% \pgf@circ@res@step=1.2\pgf@circ@res@up
+% \fi
+% \fi
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfnode{circle}{center}{}{}{}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ %\pgftransformshift{\pgfpoint{.25\pgf@circ@res@left}{.45\pgf@circ@res@down}}
+ %\pgfnode{circ}{center}{}{}{}
+ %\pgftransformshift{}
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+
+
+
+
+
+%%%---------- close: pgfcircbipoles
+%%%%%%%%%%% Springe nach pgfcirctripoles
+%%%---------- open: pgfcirctripoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+ \pgfdeclareshape{spdt}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+
+
+
+
+
+
+\long\def\pgfcircdeclarelogicport#1#2{
+ \pgfdeclareshape{american #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ #2
+
+ }
+ }
+}
+
+
+\pgfcircdeclarelogicport{and}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+ \pgfpathcurveto
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{nand}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{nor}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+
+
+\pgfcircdeclarelogicport{or}{
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{xor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{xnor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclareshape{american not port}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 - is it a not
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \def\pgf@temp{1}
+ \def\pgf@circ@temp{#3}
+ \ifx\pgftemp\pgf@circ@temp % one input
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}
+ \else % two inputs
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \fi%
+ %
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+%
+%
+ }
+ }
+}
+
+
+
+\pgfcircdeclareeurologicport{and}{$\&$}{2}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{2}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{2}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{$\&$}{2}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{2}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{2}{not}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northeast{% upper right
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+% \savedanchor\northeast{%
+% \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+% \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@y
+% \pgf@y=.5\pgf@y
+% \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+% \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@x
+% }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@x
+ }
+ \anchor{text}{
+ \northeast
+ \pgfpoint
+ {12\pgf@circ@res@right +0.2*(\pgf@circ@res@right-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left)}
+ {0.6\pgf@y}
+ }
+ %
+ % pseudo-bipole
+ \anchor{left}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{right}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+
+ #2
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ %
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ %
+ #3
+ %
+ }
+ }
+}
+
+
+
+
+
+
+\long\def\pgfcircdeclaremos#1#2#3{
+ \pgfcircdeclaretransistor{#1}{
+ \anchor{G}{
+ \left
+ }
+ \anchor{gate}{
+ \left
+ }
+ \anchor{B}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ \anchor{base}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ #2
+ }
+ {#3}
+}
+
+
+
+
+
+
+
+
+
+\pgfcircdeclaremos{nmos}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaremos{pmos}{
+ \anchor{S}{
+ \northeast
+ }
+ \anchor{source}{
+ \northeast
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfusepath{draw,fill}
+
+}
+
+
+
+
+
+
+
+\pgfcircdeclaretransistor{pnp}{
+ \anchor{E}{
+ \northeast
+ }
+ \anchor{emitter}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pnp/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+
+
+\pgfcircdeclaretransistor{npn}{
+ \anchor{C}{
+ \northeast
+ }
+ \anchor{collector}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/npn/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+
+}
+
+
+
+\pgfcircdeclaretransistor{pigbt}{
+ \anchor{E}{
+ \northeast
+ }
+ \anchor{emitter}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+
+}
+
+
+
+\pgfcircdeclaretransistor{nigbt}{
+ \anchor{C}{
+ \northeast
+ }
+ \anchor{collector}{
+ \northeast
+ }
+ \anchor{B}{
+ \left
+ }
+ \anchor{base}{
+ \left
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigbt/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+
+}
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Contrib
+
+
+%%
+% IGFET (e.g. MOSFET)
+\long\def\pgfcircdeclarefet#1#2#3{
+ \pgfcircdeclaretransistor{#1}{
+ \anchor{B}{
+ \left
+ \pgf@x=\pgf@circ@res@right
+ }
+ \anchor{base}{
+ \left
+ \pgf@x=\pgf@circ@res@right
+ }
+ #2
+ }
+ {#3}
+}
+
+
+
+\pgfcircdeclarefet{nfet}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{G}{
+ \left
+ }
+ \anchor{gate}{
+ \left
+ }
+
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarefet{pfet}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{G}{
+ \left
+ }
+ \anchor{gate}{
+ \left
+ }
+
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgftransformrotate{180}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pfet/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfcircdeclarefet{nigfete}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+
+ % GATE, ENHANCEMENT TYPE (DASHED)
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base height}\pgf@circ@res@down}}
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfcircdeclarefet{nigfetd}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ }
+
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@up}}
+
+ % GATE, DEPLETION TYPE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base height}\pgf@circ@res@down}}
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@down}}
+ %\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetd/gate height}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfcircdeclarefet{pigfete}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DASHED, BOLD
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ % Arrow has to be rotated, as this is a p-channel fet
+ \pgftransformrotate{180}
+ \pgftransformlineattime{-.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION (in line with source)
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@down}}
+ %\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfcircdeclarefet{pigfetd}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+
+
+ % GATE DEPLETION TYPE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % BULK
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % GATE
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ % PFET!
+ \pgftransformrotate{180}
+ \pgftransformlineattime{-.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@down}}
+ %\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfetd/gate height}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Contrib Danilo Piazzalunga
+
+
+
+
+
+
+\pgfcircdeclaretransistor{njfet}{
+ \anchor{G}{
+ \left
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/height}\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@y
+ \pgf@y=-.5\pgf@y
+ }
+ \anchor{gate}{
+ \left
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/height}\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@y
+ \pgf@y=-.5\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{
+ \anchor{G}{
+ \left
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/height}\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@y
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{gate}{
+ \left
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/height}\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@y
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ }
+ \anchor{source}{
+ \northeast
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+% ISFET
+\pgfcircdeclarefet{isfet}{
+ \anchor{D}{
+ \northeast
+ }
+ \anchor{drain}{
+ \northeast
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % GATE
+ %\pgfscope
+ %\pgfpathmoveto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ %\pgfpathlineto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ %\pgfusepath{draw}
+ %\endpgfscope
+
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{thyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{triac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+
+
+
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=.8\pgf@y
+ }
+}{\ctikzvalof{tripoles/toggleswitch/height 2}}{toggleswitch}{\ctikzvalof{tripoles/toggleswitch/height}}{\ctikzvalof{tripoles/toggleswitch/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+
+
+
+
+
+
+
+
+
+\pgfdeclareshape{op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\scriptsize\ $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\scriptsize\ $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+
+
+
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/potentiometer/height 2}}{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}{\ctikzvalof{bipoles/potentiometer/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/potentiometer/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/generic potentiometer/height 2}}{genericpotentiometer}{\ctikzvalof{bipoles/generic potentiometer/height}}{\ctikzvalof{bipoles/generic potentiometer/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+\pgfdeclareshape{circulator}
+{
+ \savedanchor\northwest{
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{pgf@generic}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{pgf@resistor}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+
+%%%---------- close: pgfcirctripoles
+%%%%%%%%%%% Springe nach pgfcircquadpoles
+%%%---------- open: pgfcircquadpoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ %\pgf@circ@Rlen=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+
+ #2
+
+ }
+ }
+}
+
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \def\stretto{.4}
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+ % contrib Kristofer M. Monisit
+
+ \pgfdeclareshape{fd op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out +}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\scriptsize\ $-$}
+
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\scriptsize\ $+$}
+
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\scriptsize\ $-$}
+
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\scriptsize\ $+$}
+
+
+ % Draw them all!
+ \pgfusepath{draw}
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+
+\pgfcircdeclarequadpole{transformer}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \def\stretto{.4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% coupler
+% defines a general outer box for couplers
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarecoupler#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/coupler/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/coupler/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ }
+ }
+}
+
+% straight coupler
+\pgfcircdeclarecoupler{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarecoupler{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+
+}
+
+%%%---------- close: pgfcircquadpoles
+%%%%%%%%%%% Springe nach pgfcircnpoles
+%%%---------- open: pgfcircnpoles.tex
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% N-poles
+
+\pgfkeys{/tikz/circuitikz,lab/.code={
+
+
+}}
+
+\long\def\pgfcircdeclarenpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ %\pgf@circ@Rlen=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+
+ #2
+
+ }
+ }
+}
+
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \def\stretto{.4}
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+ % contrib Kristofer M. Monisit
+
+ \pgfdeclareshape{fd op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out +}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\scriptsize\ $-$}
+
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\scriptsize\ $+$}
+
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\scriptsize\ $-$}
+
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\scriptsize\ $+$}
+
+
+ % Draw them all!
+ \pgfusepath{draw}
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+
+\pgfcircdeclarequadpole{transformer}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \def\stretto{.4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% coupler
+% defines a general outer box for couplers
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarecoupler#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/coupler/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/coupler/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ }
+ }
+}
+
+% straight coupler
+\pgfcircdeclarecoupler{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarecoupler{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+
+}
+
+%%%---------- close: pgfcircnpoles
+
+%%%%%%%%%%% Springe nach pgfcirclabel
+%%%---------- open: pgfcirclabel.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+
+
+\def\pgf@circ@drawlabel{
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabel
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabel
+ \else % smart
+ \pgf@circ@drawsmartlabel
+ \fi
+ \fi
+}
+
+\def\pgf@circ@drawsmartlabel{
+ \pgfextra{
+ %\pgfmathadd{\pgf@circ@direction}{360}
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70 % NON quasi retto
+ \pgf@circ@drawrotlabel
+ \else
+ \pgf@circ@drawreglabel
+ \fi
+ \else
+ \pgf@circ@drawreglabel
+ \fi
+}
+
+%% Output routing
+%% #1 - node name
+
+\def\pgf@circ@drawrotlabel{
+ \pgfextra{
+ % calcolo rotazione label
+ \def\pgf@circ@temp{\ctikzvalof{bipole/label/position}} %%% àncora label
+ \edef\pgfcirclabrot{\pgf@circ@direction} % primo e quarto quadrante
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 90 \ifnum \pgfcircmathresult < 270 % terzo e secondo
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathadd{\pgf@circ@temp}{180} %%%
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} %%%
+ \fi\fi
+
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ }
+ coordinate (labelcoor) at ($(\ctikzvalof{bipole/name})!2!(\ctikzvalof{bipole/name}.north)$)
+ (labelcoor) node [rotate=\pgfcirclabrot] {\pgf@circ@finallabel{}} % c'era un transform shape
+}
+
+\def\pgf@circ@drawreglabel{
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/label/position}} %%% àncora label
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ }
+ node [ anchor = \pgf@circ@labanc]
+ at (\ctikzvalof{bipole/name}.\pgf@circ@temp) {\pgf@circ@finallabel{}}
+}
+
+
+\ctikzset{text/.style = { t=#1 } }
+\ctikzset{t/.code = {
+ \ctikzsetvalof{bipoles/twoport/text}{#1}
+}}
+
+%%%---------- close: pgfcirclabel
+%%%%%%%%%%% Springe nach pgfcircvoltage
+%%%---------- open: pgfcircvoltage.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below\pgf@circuit@bipole@voltage@belowfalse\else\pgf@circuit@bipole@voltage@belowtrue\fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distacefromnode{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}} }
+ { \edef\distacefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ }
+
+ coordinate (pgfcirc@mid) at ($(\tikztostart) ! \distacefromnode ! (\ctikzvalof{bipole/name}.left)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@mid) ! -\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen ! \pgf@circ@voltage@angle:(\ctikzvalof{bipole/name}.left)$)
+
+ coordinate (pgfcirc@mid) at ($(\tikztotarget) ! \distacefromnode ! (\ctikzvalof{bipole/name}.right)$)
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@mid) ! \ctikzvalof{voltage/distance from line}\pgf@circ@Rlen ! \pgf@circ@voltage@angle : (\ctikzvalof{bipole/name}.right)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+
+\def\pgf@circ@drawvoltagegenerator{
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vcont2) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont1)
+ \else
+ (pgfcirc@Vcont1) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont2)
+ \fi
+
+ \else % american voltage
+
+ \pgfextra{
+ \def\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}}
+ \def\pgf@circ@temp{battery}
+ \ifx\pgf@temp\pgf@circ@temp
+ \edef\pgf@circ@batteria{battery}
+ \else
+ \def\pgf@circ@temp{battery1}
+ \ifx\pgf@temp\pgf@circ@temp
+ \edef\pgf@circ@batteria{battery}
+ \else
+ \edef\pgf@circ@batteria{false}
+ \fi
+ \fi
+ \edef\pgf@circ@temp{battery}
+ }
+
+ \ifx\pgf@circ@batteria\pgf@circ@temp % if it is a battery, must put + and -
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vcont2) node {$-$} (pgfcirc@Vcont1) node {$+$}
+ \else
+ (pgfcirc@Vcont1) node {$-$} (pgfcirc@Vcont2) node {$+$}
+ \fi
+ \fi
+
+ \fi
+}
+
+%% Output routine
+
+\def\pgf@circ@drawvoltage{ % node name
+ \pgfextra{
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >284 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+ }
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)
+ coordinate (Vlab) at ($(\ctikzvalof{bipole/name}.center) !
+ \ifpgf@circuit@europeanvoltage\eudist\else\ctikzvalof{voltage/american label distance}\fi !
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)$)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=0]
+ at (Vlab) { \pgf@circ@finallabel{voltage/} }
+}
+
+
+
+
+
+% coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.-110) $)
+% coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.-70) $)
+% \else
+% coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.110) $)
+% coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.70) $)
+% \fi
+%%%---------- close: pgfcircvoltage
+%%%%%%%%%%% Springe nach pgfcirccurrent
+%%%---------- open: pgfcirccurrent.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+
+
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+% \ifpgf@circuit@bipole@iscurrent
+% \pgfkeys{\circuitikzbasekey/bipole/current/position=above}
+% \else
+% \pgfkeys{\circuitikzbasekey/bipole/current/position=below}
+% \fi
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}
+}
+
+\ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+
+\def\pgf@circ@drawnormalcurrent{
+ \ifpgf@circuit@bipole@current@before
+ \ifpgf@circuit@bipole@current@backward
+ { (\ctikzvalof{bipole/name}.left) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztostart)
+ }
+ \else
+ { (\tikztostart) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\ctikzvalof{bipole/name}.left)
+ }
+ \fi
+ \else
+ \ifpgf@circuit@bipole@current@backward
+ { (\tikztotarget) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\ctikzvalof{bipole/name}.right)
+ }
+ \else
+ { (\ctikzvalof{bipole/name}.right) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztotarget)
+ }
+ \fi
+ \fi
+}
+
+%% Output routine
+%% #1 - node name
+
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >284 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+
+ \pgfextra{ \def\pgf@temp{short} \edef\pgf@circ@temp{\ctikzvalof{bipole/kind}} }
+
+ \ifx\pgf@circ@temp\pgf@temp % caso di corrente (centrata) su un corto
+ \ifpgf@circuit@bipole@current@backward
+ { (\tikztotarget) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztostart) }
+ \else
+ { (\tikztostart) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztotarget) }
+ \fi
+
+ \else % altri bipoli - e quindi tra nodo e target
+
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@europeancurrent
+ \pgf@circ@drawnormalcurrent
+ \else
+ \fi
+ \else
+ \pgf@circ@drawnormalcurrent
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@iscurrent
+ node [anchor=\pgf@circ@dir] at (\ctikzvalof{bipole/name}.\pgf@circ@bipole@current@label@where)
+ { \pgf@circ@finallabel{current/} }
+ \else
+ (Iarrow.\pgf@circ@bipole@current@label@where) node [anchor=\pgf@circ@dir]
+ { \pgf@circ@finallabel{current/} }
+ \fi
+
+}
+
+
+
+
+%%%---------- close: pgfcirccurrent
+%%%%%%%%%%% Springe nach pgfcircinputarrows
+%%%---------- open: pgfcircinputarrows.tex
+% Copyright 2013 by Stefan Erhardt
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Show input arrows for selected parts
+
+
+\ctikzset{>/.style = {
+ \circuitikzbasekey/inputarrow = true
+ }
+}
+
+
+
+
+
+%%%---------- close: pgfcircinputarrows
+
+
+
+
+%%%---------- close: circuitikz.code
+
+\ExecuteOptions{europeancurrents,europeanvoltages,americanports,americanresistors,cuteinductors,europeangfsurgearrester,nosiunitx,noarrowmos,smartlabels,nocompatibility}
+
+\ProcessOptions\relax
+
+\ifpgf@circ@siunitx
+ \RequirePackage{xstring}[2009/03/13]
+ %\expandafter\let\csname angstrom\endcsname\relax
+ \RequirePackage{siunitx}
+\fi
+
+%%%%%%%%%%% Springe nach circuitikz1.code
+%%%---------- open: circuitikz1.code.tex
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinate bipoli
+\newdimen\pgf@circ@res@up \newdimen\pgf@circ@res@down \newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left \newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+
+% thickness iniziale
+\newdimen \pgfstartlinewidth
+
+\pgf@circ@Rlen = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+
+
+
+% Names
+\ctikzset{name/.style = { n=#1 } }
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90,
+ bipole/reversed=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+
+%% Generic bipole path
+\def\pgf@circ@bipole@path#1#2{
+ \pgfextra{
+ \ctikzset{bipole/kind = #1}
+
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #2\pgf@circ@rand} % create it
+ \fi
+
+ \def\pgf@temp{open}
+ \def\pgf@circ@temp{#1}
+ }
+ \ifpgf@circuit@bipole@reversed
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabel\fi
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+%% Path definitions
+
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@battery1@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@thyristor@path#1{\pgf@circ@bipole@path{thyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@triac@path#1{\pgf@circ@bipole@path{triac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+
+%% Styles
+
+%% Aggiungere per thyristor e tripoli semplici
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+%\ctikzsetbipole{resistor}{\pgf@circ@resistor@path}
+
+\tikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\tikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\tikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\tikzset{ammeter/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path, l=#1}}
+\tikzset{voltmeter/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path, l=#1}}
+\tikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\tikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\tikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\tikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\tikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\tikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\tikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\tikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\tikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\tikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\tikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\tikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\tikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\tikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\tikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery1@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\tikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\tikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\tikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\tikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\tikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\tikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\tikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\tikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\tikzset{transmission line/.style = {tline = #1}}
+\tikzset{TL/.style = {tline = #1}}
+\tikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\tikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\tikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\tikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\tikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, v=#1 }}
+\tikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, v=#1 }}
+\tikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\tikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\tikzset{voltage source/.style = {\ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{current source/.style = {\ifpgf@circuit@europeancurrent european \else american \fi current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\tikzset{controlled voltage source/.style = {\ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\tikzset{controlled current source/.style = {\ifpgf@circuit@europeancurrent european \else american \fi controlled current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+
+\tikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\tikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\tikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\tikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\tikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\tikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\tikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\tikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+
+\tikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\tikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\tikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\tikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\tikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\tikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\tikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\tikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\tikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\tikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\tikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\tikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\tikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\tikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\tikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\tikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\tikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\tikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\tikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\tikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\tikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\tikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\tikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+
+
+\tikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\tikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\tikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\tikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\tikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\tikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\tikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+
+\tikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\tikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\tikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\tikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\tikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\tikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\tikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+
+ \tikzset{Schottky diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi Schottky diode}}
+ \tikzset{Zener diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi Zener diode}}
+ \tikzset{tunnel diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi tunnel diode}}
+ \tikzset{photodiode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi photodiode}}
+ \tikzset{led/.style = {\ifpgf@circuit@fulldiode full \else empty \fi led}}
+ \tikzset{varcap/.style = {\ifpgf@circuit@fulldiode full \else empty \fi varcap}}
+ \tikzset{diode/.style = {\ifpgf@circuit@fulldiode full \else empty \fi diode}}
+
+\tikzset{thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thyristor@path}}
+\tikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\tikzset{triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@triac@path}}
+
+\tikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\tikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\tikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\tikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\tikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\tikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+
+% short forms
+\tikzset{vsource/.style = {voltage source = #1}}
+\tikzset{isource/.style = {current source = #1}}
+\tikzset{cisource/.style = {controlled current source = #1}}
+\tikzset{cvsource/.style = {controlled voltage source = #1}}
+\tikzset{vsourcesin/.style = {sinusoidal voltage source = #1}}
+\tikzset{vsourcesquare/.style = {square voltage source = #1}}
+\tikzset{isourcesin/.style = {sinusoidal current source = #1}}
+\tikzset{cisourcesin/.style = {controlled sinusoidal current source = #1}}
+\tikzset{cvsourcesin/.style = {controlled sinusoidal voltage source = #1}}
+
+\tikzset{controlled vsource/.style = {controlled voltage source = #1}}
+\tikzset{controlled isource/.style = {controlled current source = #1}}
+\tikzset{controlled vsourcesin/.style = {controlled sinusoidal voltage source = #1}}
+\tikzset{controlled isourcesin/.style = {controlled sinusoidal current source = #1}}
+
+\tikzset{R/.style= {resistor = #1}}
+\tikzset{vR/.style= {variable resistor = #1}}
+\tikzset{phR/.style= {photoresistor = #1}}
+\tikzset{thR/.style= {thermistor = #1}}
+\tikzset{thRp/.style= {thermistor ptc= #1}}
+\tikzset{thRn/.style= {thermistor ntc= #1}}
+\tikzset{pR/.style= {potentiometer = #1}}
+\tikzset{C/.style = {capacitor = #1}}
+\tikzset{pC/.style = {polar capacitor = #1}}
+\tikzset{vC/.style = {variable capacitor = #1}}
+\tikzset{L/.style = {inductor = #1}}
+\tikzset{vL/.style = {variable inductor = #1}}
+\tikzset{V/.style = {voltage source = #1}}
+\tikzset{cV/.style = {controlled voltage source = #1}}
+\tikzset{sV/.style = {sinusoidal voltage source = #1}}
+\tikzset{sqV/.style = {square voltage source = #1}}
+\tikzset{csV/.style = {controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \tikzset{V#1/.style = {voltage source, v#1=##1} }
+ \tikzset{cV#1/.style = {controlled voltage source, v#1=##1} }
+ \tikzset{sV#1/.style = {sinusoidal voltage source, v#1=##1} }
+ \tikzset{csV#1/.style = {controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+\tikzset{I/.style = {current source = #1}}
+\tikzset{cI/.style = {controlled current source = #1}}
+\tikzset{sI/.style = {sinusoidal current source = #1}}
+\tikzset{csI/.style = {controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \tikzset{I#1/.style = {current source, i#1=##1} }
+ \tikzset{cI#1/.style = {controlled current source, i#1=##1} }
+ \tikzset{sI#1/.style = {sinusoidal current source, i#1=##1} }
+ \tikzset{csI#1/.style = {controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+\tikzset{Do/.style = {empty diode}}
+\tikzset{tDo/.style = {empty tunnel diode}}
+\tikzset{zDo/.style = {empty Zener diode}}
+\tikzset{sDo/.style = {empty Schottky diode}}
+\tikzset{pDo/.style = {empty photodiode}}
+\tikzset{leDo/.style = {empty led}}
+\tikzset{VCo/.style = {empty varcap}}
+\tikzset{D*/.style = {full diode}}
+\tikzset{tD*/.style = {full tunnel diode}}
+\tikzset{zD*/.style = {full Zener diode}}
+\tikzset{sD*/.style = {full Schottky diode}}
+\tikzset{pD*/.style = {full photodiode}}
+\tikzset{leD*/.style = {full led}}
+\tikzset{VC*/.style = {full varcap}}
+\tikzset{D/.style = {diode}}
+\tikzset{tD/.style = {tunnel diode}}
+\tikzset{zD/.style = {Zener diode}}
+\tikzset{sD/.style = {Schottky diode}}
+\tikzset{pD/.style = {photodiode}}
+\tikzset{leD/.style = {led}}
+\tikzset{VC/.style = {varcap}}
+
+\tikzset{Tr/.style = {triac}}
+\tikzset{Mr/.style = {memristor}}
+\tikzset{Ty/.style = {thyristor}}
+
+\tikzset{cspst/.style = {closing switch = #1}}
+\tikzset{ospst/.style = {opening switch = #1}}
+
+\tikzset{afuse/.style = {asymmetric fuse=#1}}
+
+
+\def\inheritlogicport#1#2{
+ \pgfdeclareshape{#2 port}{
+ \inheritsavedanchors[from=#1 #2 port]
+ \inheritbackgroundpath[from=#1 #2 port]
+ \inheritanchor[from=#1 #2 port]{in}
+ \inheritanchor[from=#1 #2 port]{in 1}
+ \inheritanchor[from=#1 #2 port]{in 2}
+ \inheritanchor[from=#1 #2 port]{out}
+ \inheritanchor[from=#1 #2 port]{center}
+ \inheritanchor[from=#1 #2 port]{left}
+ }
+}
+
+\ifpgf@circuit@europeanlogicport
+ \inheritlogicport{european}{and}
+ \inheritlogicport{european}{or}
+ \inheritlogicport{european}{xor}
+ \inheritlogicport{european}{not}
+ \inheritlogicport{european}{nand}
+ \inheritlogicport{european}{nor}
+ \inheritlogicport{european}{xnor}
+\else
+ \inheritlogicport{american}{and}
+ \inheritlogicport{american}{or}
+ \inheritlogicport{american}{xor}
+ \inheritlogicport{american}{not}
+ \inheritlogicport{american}{nand}
+ \inheritlogicport{american}{nor}
+ \inheritlogicport{american}{xnor}
+\fi
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@reversed
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ (\ctikzvalof{bipole/name}start.center) -- (\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \tikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+%%%---------- close: circuitikz1.code
+
+\newenvironment{circuitikz}{\begin{tikzpicture}}{\end{tikzpicture}}
+
+
+\endinput
+
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.6.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.6.sty
new file mode 100644
index 0000000000..475980e1a2
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.6.sty
@@ -0,0 +1,10290 @@
+% Copyright 2007-2016 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+
+%%%%%
+%%%%%
+%%%%%
+%%%%% Se c'è l'opzione symbol, fallback to siunitx with warning
+%%%%%
+%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\def\pgfcircversion{0.6}
+\def\pgfcircversiondate{2016/06/06}
+
+\ProvidesPackage{circuitikz-0.6}
+ [\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion]
+
+%% Version 2.0 of pgf/TikZ is required
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+\usepgflibrary{arrows}
+
+
+% The options are listed in the manual in this order
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltage}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrent}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrent}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage = european}
+}
+
+\DeclareOption{americanresistor}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistor}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductor}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductor}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductor}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanport}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{european}{
+ \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european}
+ \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester = european}
+}
+
+\DeclareOption{american}{
+ \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester = american}
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{fulldiodes}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiodes}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltages}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrents}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrents}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage = european}
+}
+
+\DeclareOption{americanresistors}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistors}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductors}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductors}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductors}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanports}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanports}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{americangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = american}
+}
+
+\DeclareOption{europeangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = european}
+}
+
+\DeclareOption{siunitx}{
+ \pgf@circ@siunitxtrue
+}
+
+\DeclareOption{nosiunitx}{
+ \pgf@circ@siunitxfalse
+}
+
+\DeclareOption{fulldiode}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiode}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{strokediode}{
+ \ctikzset{diode = stroke}
+}
+
+\DeclareOption{arrowmos}{
+ \pgf@circuit@mos@arrowstrue
+}
+
+\DeclareOption{noarrowmos}{
+ \pgf@circuit@mos@arrowsfalse
+}
+
+\DeclareOption{fetbodydiode}{
+ \pgf@circuit@fet@bodydiodetrue
+}
+
+\DeclareOption{nofetbodydiode}{
+ \pgf@circuit@fet@bodydiodefalse
+}
+
+\DeclareOption{fetsolderdot}{
+ \pgf@circuit@fet@solderdottrue
+}
+
+\DeclareOption{nofetsolderdot}{
+ \pgf@circuit@fet@solderdotfalse
+}
+
+\DeclareOption{emptypmoscircle}{
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+
+\DeclareOption{lazymos}{
+ \ctikzset{tripoles/nmos/width=.5}
+ \ctikzset{tripoles/nmos/gate height=.35}
+ \ctikzset{tripoles/nmos/base height=.35}
+ \ctikzset{tripoles/nmos/height/.initial=1.2}
+ \ctikzset{tripoles/nmos/base width=.5}
+ \ctikzset{tripoles/nmos/gate width=.65}
+
+ \ctikzset{tripoles/pmos/width=.5}
+ \ctikzset{tripoles/pmos/gate height=.35}
+ \ctikzset{tripoles/pmos/base height=.35}
+ \ctikzset{tripoles/pmos/height/.initial=1.2}
+ \ctikzset{tripoles/pmos/base width=.5}
+ \ctikzset{tripoles/pmos/gate width=.65}
+
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+\DeclareOption{straightlabels}{
+ \ctikzset{label/align = straight}
+}
+
+\DeclareOption{rotatelabels}{
+ \ctikzset{label/align = rotate}
+}
+
+\DeclareOption{smartlabels}{
+ \ctikzset{label/align = smart}
+}
+
+\DeclareOption{compatibility}{
+ \pgf@circuit@compattrue
+}
+
+\DeclareOption{oldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectiontrue
+}
+\DeclareOption{nooldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectionfalse
+}
+
+\DeclareOption{betterproportions}{
+ \ctikzset{monopoles/ground/width/.initial=.15}
+
+ \ctikzset{bipoles/resistor/height/.initial=.23}
+ \ctikzset{bipoles/resistor/width/.initial=.6}
+ \ctikzset{bipoles/capacitor/height/.initial=.4}
+ \ctikzset{bipoles/capacitor/width/.initial=.1}
+ \ctikzset{bipoles/potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height 2/.initial=.23}
+ \ctikzset{bipoles/photoresistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistor/main/.initial=.7}
+ \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7
+ \ctikzset{bipoles/thermistorptc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorptc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/main/.initial=.7}
+ \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/width/.initial=.6}
+ \ctikzset{bipoles/vresistor/height/.initial=.45}
+ \ctikzset{bipoles/vresistor/width/.initial=.6}
+ \ctikzset{bipoles/generic/height/.initial=.23}
+ \ctikzset{bipoles/generic/width/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/generic potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/ageneric/height/.initial=.23}
+ \ctikzset{bipoles/ageneric/width/.initial=.6}
+ \ctikzset{bipoles/memristor/height/.initial=.23}
+ \ctikzset{bipoles/memristor/wave height/.initial=.375}
+ \ctikzset{bipoles/memristor/width/.initial=.60}
+ \ctikzset{bipoles/tgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tgeneric/width/.initial=.6}
+ \ctikzset{bipoles/tfullgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tfullgeneric/width/.initial=.60}
+ \ctikzset{bipoles/fullgeneric/height/.initial=.23}
+ \ctikzset{bipoles/fullgeneric/width/.initial=.6}
+ \ctikzset{bipoles/diode/height/.initial=.3}
+ \ctikzset{bipoles/diode/width/.initial=.25}
+
+ \ctikzset{tripoles/thyristor/height/.initial=.66}
+ \ctikzset{tripoles/thyristor/height 2/.initial=.3}
+ \ctikzset{tripoles/thyristor/width/.initial=.6}
+ \ctikzset{tripoles/thyristor/diode height/.initial=.3}
+ \ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+ \ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/triac/height/.initial=.66}
+ \ctikzset{tripoles/triac/width/.initial=.6}
+ \ctikzset{tripoles/triac/diode width left/.initial=.3}
+ \ctikzset{tripoles/triac/diode width right/.initial=.3}
+}
+
+%%%%%%%%%
+%%%%%%%%%%% Springe nach tex/pgfcirc.defines
+%%%---------- open: tex/pgfcirc.defines.tex
+
+%% Options
+
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinates
+\newdimen\pgf@circ@res@up
+\newdimen\pgf@circ@res@down
+\newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left
+\newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+\newdimen\pgf@circ@res@temp
+% inital thickness
+\newdimen \pgfstartlinewidth
+%% Keys
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circuit@compat
+\newif\ifpgf@circ@oldvoltagedirection
+
+% Option ">" for twoports
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf@circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf@circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}}
+
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+
+
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{bipoles/length/.initial=1.4cm}
+\ctikzset{nodes width/.initial=.04}
+\newdimen\pgf@circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1}}
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial= \fontsize{6}{0}\selectfont\boldmath}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/interr/height/.initial=.35}
+\ctikzset{bipoles/interr/width/.initial=.35}
+\ctikzset{bipoles/interr/height 2/.initial=.1}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.25}
+\ctikzset{bipoles/open/width/.initial=.8}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.0}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+
+
+\newif\ifpgf@circuit@trans@depletiontype
+\pgf@circuit@trans@depletiontypefalse
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+
+% Option solderdot for fet
+\newif\ifpgf@circuit@fet@solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf@circuit@fet@bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf@circuit@bpt@drawgate
+\pgf@circuit@bpt@drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+
+% Option draw bpt without base connection
+\newif\ifpgf@circuit@bpt@drawbase
+\pgf@circuit@bpt@drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf@circuit@bpt@drawphoto
+\pgf@circuit@bpt@drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf@circuit@pmos@emptycircle
+\newif\ifpgf@circuit@pmos@emptycircle
+\pgf@circuit@pmos@emptycirclefalse
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+
+
+\newif\ifpgf@circuit@trans@ntype
+\pgf@circuit@trans@ntypetrue %default true
+%\newif\ifpgf@circuit@trans@ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue } }
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse } }
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/op amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/gm amp/width/.initial=1.7}
+\ctikzset{tripoles/gm amp/port width/.initial=.7}
+\ctikzset{tripoles/gm amp/height/.initial=1.4}
+\ctikzset{tripoles/gm amp/input height/.initial=.5}
+\ctikzset{tripoles/gm amp/up pos/.initial=.45}
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+% %Mechanical section
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf@circuit@bipole@reversed
+\ctikzset{bipole/reversed/.is if=pgf@circuit@bipole@reversed}
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol}
+\newif\ifpgf@circuit@bipole@strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.is choice}
+\ctikzset{bipole/nodes/left/none/.code={\ctikzsetvalof{bipole/nodes/left}{none}}}
+\ctikzset{bipole/nodes/left/empty/.code={\ctikzsetvalof{bipole/nodes/left}{empty}}}
+\ctikzset{bipole/nodes/left/full/.code={\ctikzsetvalof{bipole/nodes/left}{full}}}
+\ctikzset{bipole/nodes/left/diamond/.code={\ctikzsetvalof{bipole/nodes/left}{diamond}}}
+\ctikzset{bipole/nodes/right/.is choice}
+\ctikzset{bipole/nodes/right/none/.code={\ctikzsetvalof{bipole/nodes/right}{none}}}
+\ctikzset{bipole/nodes/right/empty/.code={\ctikzsetvalof{bipole/nodes/right}{empty}}}
+\ctikzset{bipole/nodes/right/full/.code={\ctikzsetvalof{bipole/nodes/right}{full}}}
+\ctikzset{bipole/nodes/right/diamond/.code={\ctikzsetvalof{bipole/nodes/right}{diamond}}}
+
+
+
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@strokediode
+\newif\ifpgf@circuit@fulldiode
+\pgf@circuit@strokediodefalse
+\pgf@circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full }}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty }}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke }}
+
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color=#1}}}
+
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+\tikzset{american currents/.style = { \circuitikzbasekey/current = american } }
+\tikzset{european currents/.style = { \circuitikzbasekey/current = european } }
+\tikzset{american voltages/.style = { \circuitikzbasekey/voltage = american } }
+\tikzset{european voltages/.style = { \circuitikzbasekey/voltage = european } }
+\tikzset{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester/.is choice}
+\ctikzset{gas filled surge arrester/european/.code= {\pgf@circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester/american/.code= {\pgf@circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = american } }
+\tikzset{european gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester } }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester } }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltaege conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue } }
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue }
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+%%%---------- close: tex/pgfcirc.defines
+%%%%%%%%%%% Springe nach tex/pgfcircutils
+%%%---------- open: tex/pgfcircutils.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+ \fi
+}
+
+\def\pgf@circ@finallabel#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1label/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1label/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1label/name}}{\ctikzvalof{bipole/#1label/unit}}$%
+ \fi%
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+}
+
+%%%---------- close: tex/pgfcircutils
+%%%%%%%%%%% Springe nach tex/pgfcircmath
+%%%---------- open: tex/pgfcircmath.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+% angle between 0 and 360
+\def\pgf@circ@slope#1#2{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{#2}%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \ifdim\pgf@x<0.1pt
+ \ifdim\pgf@x>-0.1pt % vertical
+ \ifdim\pgf@y<0pt
+ \def\pgfmathresult{-90.0}
+ \else
+ \def\pgfmathresult{+90.0}
+ \fi
+ \else % oblique with dx < 0
+ \pgfmathdivide{\pgf@y}{\pgf@x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf@x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \else % oblique with dx > 0
+ \pgfmathdivide{\pgf@y}{\pgf@x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf@x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \pgf@x=\pgfmathresult pt
+ \ifdim\pgf@x<0pt
+ \pgfmathadd{\pgfmathresult}{+360}
+ \fi
+ }
+
+
+%%%---------- close: tex/pgfcircmath
+
+%%%%%%%%%%% Springe nach tex/pgfcircshapes
+%%%---------- open: tex/pgfcircshapes.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \northeast
+ \pgf@y=-\pgf@y
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \northeast
+ \pgf@y=0cm
+ \pgf@x=-\pgf@x
+ }
+ \anchor{text}{%
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamond}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@temp}{\pgf@circ@res@up+\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up-\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+
+}
+
+%% Current arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+
+}
+
+%%%---------- close: tex/pgfcircshapes
+%%%%%%%%%%% Springe nach tex/pgfcircmonopoles
+%%%---------- open: tex/pgfcircmonopoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+
+\pgfdeclareshape{ground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+
+\pgfdeclareshape{rground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{tground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ %\pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{sground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% noiseless ground
+\pgfdeclareshape{nground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{1.3\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{1.3\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% protective ground
+\pgfdeclareshape{pground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathcircle{\pgfpoint{0pt}{-\pgf@circ@res@step}} {1.2\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% chassis ground
+\pgfdeclareshape{cground}{
+\anchor{center}{
+ \pgfpointorigin
+}
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/chassis/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-1.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+
+\pgfdeclareshape{antenna}{
+\anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+
+ % \pgfpathmoveto{\pgfpointorigin}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ % \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=2\pgf@circ@res@step
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=-2\pgf@circ@res@step
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+
+% match
+\pgfdeclareshape{match}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+%%%---------- close: tex/pgfcircmonopoles
+%%%%%%%%%%% Springe nach tex/pgfcircbipoles
+%%%---------- open: tex/pgfcircbipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+
+
+\long\def\pgfcircdeclarebipole#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@res@down=-#2\pgf@circ@Rlen
+ \pgf@circ@res@up=#4\pgf@circ@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=0cm
+ }
+ \anchor{ne}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ }
+ \anchor{nw}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{%
+ \ifpgf@circuit@bipole@reversed\else\southwest\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{s}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=0cm
+ }
+ \anchor{se}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ }
+ \anchor{w}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@x=0cm
+ }
+ \anchor{left}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{below}{%
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@x=0cm
+ }
+ \anchor{a}{%
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{b} {
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{%
+ \textanchor
+ }
+ \anchorborder{%
+ \def\pgf@temp{false}
+ \ifpgf@circuit@bipole@reversed\pgf@temp
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/resistor/height}}{resistor}{\ctikzvalof{bipoles/resistor/height}}{\ctikzvalof{bipoles/resistor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vresistor/height}}{vresistor}{\ctikzvalof{bipoles/vresistor/height}}{\ctikzvalof{bipoles/vresistor/width}}{ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/capacitor/height}}{capacitor}{\ctikzvalof{bipoles/capacitor/height}}{\ctikzvalof{bipoles/capacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pcapacitor/height}}{polarcapacitor}{\ctikzvalof{bipoles/pcapacitor/height}}{\ctikzvalof{bipoles/pcapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/pcapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Electrolytic Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ecapacitor/height}}{ecapacitor}{\ctikzvalof{bipoles/ecapacitor/height}}{\ctikzvalof{bipoles/ecapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/ecapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+ \pgfsetrectcap
+ % % % Draw plus pole
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ % % Draw minus pole
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfsetfillcolor{black}
+ % % plus pole annotation
+ \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}]
+ {\pgfkeysvalueof{/tikz/circuitikz/bipoles/ecapacitor/font} $+$}
+}
+
+%% Battery
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery/height}}{battery}{\ctikzvalof{bipoles/battery/height}}{\ctikzvalof{bipoles/battery/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery1/height}}{battery1}{\ctikzvalof{bipoles/battery1/height}}{\ctikzvalof{bipoles/battery1/width}}{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+
+
+
+ \pgfusepath{draw}
+}
+
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cuteinductor/lower coil height}}{cuteinductor}{\ctikzvalof{bipoles/cuteinductor/height}}{\ctikzvalof{bipoles/cuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}{vcuteinductor}{\ctikzvalof{bipoles/vcuteinductor/height}}{\ctikzvalof{bipoles/vcuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/americaninductor/height 2}}{americaninductor}{\ctikzvalof{bipoles/americaninductor/height}}{\ctikzvalof{bipoles/americaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vamericaninductor/height 2}}{vamericaninductor}{\ctikzvalof{bipoles/vamericaninductor/height}}{\ctikzvalof{bipoles/vamericaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsource/height}}{vsource}{\ctikzvalof{bipoles/vsource/height}}{\ctikzvalof{bipoles/vsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourceam/height}}{vsourceAM}{\ctikzvalof{bipoles/vsourceam/height}}{\ctikzvalof{bipoles/vsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$+$}
+ \fi
+ \fi
+ \pgfusepath{draw}
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesin/height}}{vsourcesin}{\ctikzvalof{bipoles/vsourcesin/height}}{\ctikzvalof{bipoles/vsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% contributed by Alistair Kwan
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesquare/height}}{vsourcesquare}{\ctikzvalof{bipoles/vsourcesquare/height}}{\ctikzvalof{bipoles/vsourcesquare/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% PV Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pvsource/height}}{pvsource}{\ctikzvalof{bipoles/pvsource/height}}{\ctikzvalof{bipoles/pvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %Adapted from battery1
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %Arrow Part
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcisource/height}}{dcisource}{\ctikzvalof{bipoles/dcisource/height}}{\ctikzvalof{bipoles/dcisource/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{-90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{270}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \ifpgf@circ@oldvoltagedirection
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \else
+ \ifpgf@circuit@bipole@current@backward
+ \pgftransformshift{\pgfpoint{-.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgftransformrotate{180}
+ \else
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \fi\fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% DC-Voltage source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcvsource/height}}{dcvsource}{\ctikzvalof{bipoles/dcvsource/height}}{\ctikzvalof{bipoles/dcvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isource}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Independent double oo source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/oosource/height}}{oosource}{\ctikzvalof{bipoles/oosource/height}}{\ctikzvalof{bipoles/oosource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isourceam/height}}{isourceAM}{\ctikzvalof{bipoles/isourceam/height}}{\ctikzvalof{bipoles/isourceam/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \ifpgf@circ@oldvoltagedirection
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \else
+ \ifpgf@circuit@bipole@current@backward
+ \pgftransformshift{\pgfpoint{-.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgftransformrotate{180}
+ \else
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \fi\fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+
+
+
+%% Independent sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isourcesin}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Controlled voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsource/height}}{cvsource}{\ctikzvalof{bipoles/cvsource/height}}{\ctikzvalof{bipoles/cvsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourceam/height}}{cvsourceAM}{\ctikzvalof{bipoles/cvsourceam/height}}{\ctikzvalof{bipoles/cvsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \pgfusepath{draw}
+}
+
+
+%% Controlled sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cvsourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Controlled sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cisourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Controlled current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisource/height}}{cisource}{\ctikzvalof{bipoles/cisource/height}}{\ctikzvalof{bipoles/cisource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisourceam/height}}{cisourceAM}{\ctikzvalof{bipoles/cisourceam/height}}{\ctikzvalof{bipoles/cisourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{draw}}
+ \endpgfscope
+}
+
+%% Black generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulldiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullsdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulltdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulllediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullpdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{fullvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptydiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptysdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptytdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptylediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptypdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole{
+ \anchor{strokepathstart}{
+ \northeast
+ \pgf@y=0cm
+ \pgf@x=.8\pgf@x
+ }
+ \anchor{strokepathend}{
+ \northeast
+ \pgf@y=0cm
+ }
+ }{\ctikzvalof{bipoles/varcap/height}}{emptyvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+%% SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{spst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfpatharc{65}{25}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.1\pgf@circ@res@right}{-.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.14\pgf@circ@res@right}{-.35\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+}
+
+%% Closing SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{cspst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfpatharc{65}{25}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+}
+
+%% Opening SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{ospst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@right}{.1\pgf@circ@res@down}}
+ \pgfpatharc{15}{50}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.85\pgf@circ@res@left}{1.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.87\pgf@circ@res@left}{1.26\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+
+}
+
+
+%% Push Button
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pushbutton/height 2}}{pushbutton}{\ctikzvalof{bipoles/pushbutton/height}}{\ctikzvalof{bipoles/pushbutton/width}}{
+
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+%METERINGSHAPE
+\long\def\drawmeteringcircle{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+ %draw connections to circle
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ %draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw arrow
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%AMPEREMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ammeter/height}}{ammeter}{\ctikzvalof{bipoles/ammeter/height}}{\ctikzvalof{bipoles/ammeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ohmmeter/height}}{ohmmeter}{\ctikzvalof{bipoles/ohmmeter/height}}{\ctikzvalof{bipoles/ohmmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/voltmeter/height}}{voltmeter}{\ctikzvalof{bipoles/voltmeter/height}}{\ctikzvalof{bipoles/voltmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+%% Short circuit
+
+\pgfcircdeclarebipole{}{0}{short}{0}{0}{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/open/height}}{open}{\ctikzvalof{bipoles/open/height}}{\ctikzvalof{bipoles/open/width}}{
+
+}
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/generic/height}}{generic}{\ctikzvalof{bipoles/generic/height}}{\ctikzvalof{bipoles/generic/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fuse/height}}{fuse}{\ctikzvalof{bipoles/fuse/height}}{\ctikzvalof{bipoles/fuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fullgeneric/height}}{fullgeneric}{\ctikzvalof{bipoles/fullgeneric/height}}{\ctikzvalof{bipoles/fullgeneric/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ageneric/height}}{ageneric}{\ctikzvalof{bipoles/ageneric/height}}{\ctikzvalof{bipoles/ageneric/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/afuse/height}}{afuse}{\ctikzvalof{bipoles/afuse/height}}{\ctikzvalof{bipoles/afuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/memristor/height}}{memristor}{\ctikzvalof{bipoles/memristor/height}}{\ctikzvalof{bipoles/memristor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tgeneric/height}}{tgeneric}{\ctikzvalof{bipoles/tgeneric/height}}{\ctikzvalof{bipoles/tgeneric/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/photoresistor/height 2}}{photoresistor}{\ctikzvalof{bipoles/photoresistor/height}}{\ctikzvalof{bipoles/photoresistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Thermistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistor/height}}{thermistor}{\ctikzvalof{bipoles/thermistor/height}}{\ctikzvalof{bipoles/thermistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorptc/height 2}}{thermistorptc}{\ctikzvalof{bipoles/thermistorptc/height}}{\ctikzvalof{bipoles/thermistorptc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorntc/height 2}}{thermistorntc}{\ctikzvalof{bipoles/thermistorntc/height}}{\ctikzvalof{bipoles/thermistorntc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermocouple/height 2}}{thermocouple}{\ctikzvalof{bipoles/thermocouple/height}}{\ctikzvalof{bipoles/thermocouple/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% Varistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varistor/height}}{varistor}{\ctikzvalof{bipoles/varistor/height}}{\ctikzvalof{bipoles/varistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tfullgeneric/height}}{tfullgeneric}{\ctikzvalof{bipoles/tfullgeneric/height}}{\ctikzvalof{bipoles/tfullgeneric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcapacitor/height}}{vcapacitor}{\ctikzvalof{bipoles/vcapacitor/height}}{\ctikzvalof{bipoles/vcapacitor/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piezoelectric/height}}{piezoelectric}{\ctikzvalof{bipoles/piezoelectric/height}}{\ctikzvalof{bipoles/piezoelectric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ %% Outer markings
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %% Inner Box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left+4}{\pgf@circ@res@up-1}}{\pgfpoint{\pgf@circ@res@right-4}{\pgf@circ@res@down+1}}
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=diamond}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/reversed=true}}
+
+
+%% The output routine
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[diamond] {} }
+ \else
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[circ] {} }
+ \fi
+ \fi
+ \fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[diamond] {} }
+ \else
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[circ] {} }
+ \fi
+ \fi
+ \fi
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lamp/height}}{lamp}{\ctikzvalof{bipoles/lamp/height}}{\ctikzvalof{bipoles/lamp/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tline/height}
+ }{tline}{\ctikzvalof{bipoles/tline/height}
+ }{\ctikzvalof{bipoles/tline/width}
+ }
+ {
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0}}
+ {\pgfpoint{\pgf@circ@res@step}{0}}
+ {\pgfpoint{0}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/squid/height}}{squid}{\ctikzvalof{bipoles/squid/height}}{\ctikzvalof{bipoles/squid/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/barrier/height}}{barrier}{\ctikzvalof{bipoles/barrier/height}}{\ctikzvalof{bipoles/barrier/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%% Generic two port box
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/twoport/height}}{twoport}{\ctikzvalof{bipoles/twoport/height}}{\ctikzvalof{bipoles/twoport/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vco/width}}{vco}{\ctikzvalof{bipoles/twoport/width}}{\ctikzvalof{bipoles/vco/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+}
+
+%% bandpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bandpass/width}}{bandpass}{\ctikzvalof{bipoles/bandpass/width}}{\ctikzvalof{bipoles/bandpass/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/highpass/width}}{highpass}{\ctikzvalof{bipoles/highpass/width}}{\ctikzvalof{bipoles/highpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lowpass/width}}{lowpass}{\ctikzvalof{bipoles/lowpass/width}}{\ctikzvalof{bipoles/lowpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/adc/width}}{adc}{\ctikzvalof{bipoles/adc/width}}{\ctikzvalof{bipoles/adc/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dac/width}}{dac}{\ctikzvalof{bipoles/dac/width}}{\ctikzvalof{bipoles/dac/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dsp/width}}{dsp}{\ctikzvalof{bipoles/dsp/width}}{\ctikzvalof{bipoles/dsp/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fft/width}}{fft}{\ctikzvalof{bipoles/fft/width}}{\ctikzvalof{bipoles/fft/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{amp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{vamp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+ % draw arrow
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piattenuator/width}}{piattenuator}{\ctikzvalof{bipoles/piattenuator/width}}{\ctikzvalof{bipoles/piattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vpiattenuator/width}}{vpiattenuator}{\ctikzvalof{bipoles/vpiattenuator/width}}{\ctikzvalof{bipoles/vpiattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tattenuator/width}}{tattenuator}{\ctikzvalof{bipoles/tattenuator/width}}{\ctikzvalof{bipoles/tattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vtattenuator/width}}{vtattenuator}{\ctikzvalof{bipoles/vtattenuator/width}}{\ctikzvalof{bipoles/vtattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{phaseshifter}{\ctikzvalof{bipoles/phaseshifter/width}}{\ctikzvalof{bipoles/phaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{vphaseshifter}{\ctikzvalof{bipoles/vphaseshifter/width}}{\ctikzvalof{bipoles/vphaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/detector/width}}{detector}{\ctikzvalof{bipoles/detector/width}}{\ctikzvalof{bipoles/detector/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{european gas filled surge arrester}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{\ctikzvalof{bipoles/european gas filled surge arrester/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{american gas filled surge arrester}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+ %\def\pgf@circ@temp{right}
+ %\ifx\tikz@res@label@pos\pgf@circ@temp
+ % \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ %\else
+% \def\pgf@circ@temp{below}
+% \ifx\tikz@res@label@pos\pgf@circ@temp
+% \pgf@circ@res@step=-1.2\pgf@circ@res@up
+% \else
+% \pgf@circ@res@step=1.2\pgf@circ@res@up
+% \fi
+% \fi
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfnode{circle}{center}{}{}{}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ %\pgftransformshift{\pgfpoint{.25\pgf@circ@res@left}{.45\pgf@circ@res@down}}
+ %\pgfnode{circ}{center}{}{}{}
+ %\pgftransformshift{}
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+% % MECHANICAL SYMBOLS
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spring/height}}{spring}{\ctikzvalof{bipoles/spring/height}}{\ctikzvalof{bipoles/spring/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/mass/box height}}{mass}{\ctikzvalof{bipoles/mass/height}}{\ctikzvalof{bipoles/mass/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}}
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/damper/height}}{damper}{\ctikzvalof{bipoles/damper/height}}{\ctikzvalof{bipoles/damper/width}}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+
+
+%%%---------- close: tex/pgfcircbipoles
+%%%%%%%%%%% Springe nach tex/pgfcirctripoles
+%%%---------- open: tex/pgfcirctripoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+
+
+\pgfdeclareshape{spdt}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+
+
+
+
+
+
+\long\def\pgfcircdeclarelogicport#1#2{
+ \pgfdeclareshape{american #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ #2
+
+ }
+ }
+}
+
+
+\pgfcircdeclarelogicport{and}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+ \pgfpathcurveto
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{nand}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{nor}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+
+
+\pgfcircdeclarelogicport{or}{
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{xor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{xnor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclareshape{american not port}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 - is it a not
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \def\pgf@temp{1}
+ \def\pgf@circ@temp{#3}
+ \ifx\pgftemp\pgf@circ@temp % one input
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}
+ \else % two inputs
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \fi%
+ %
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+%
+%
+ }
+ }
+}
+
+
+
+\pgfcircdeclareeurologicport{and}{$\&$}{2}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{2}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{2}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{$\&$}{2}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{2}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{2}{not}
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northeast{% upper right
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@x
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=.7\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=0.1\pgf@x
+ }
+ \anchor{pathstart}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{pathend}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{base}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{nobase}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ \anchor{nogate}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@x
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ #2
+ \backgroundpath{
+ \pgftransformationadjustments
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \ifnum \pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction} > 0
+ \pgf@circuit@trans@ntypetrue
+ \else
+ \pgf@circuit@trans@ntypefalse
+ \fi
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ %
+ #3
+ % BODY DIODE
+ \ifpgf@circuit@fet@bodydiode
+ \drawbodydiode{#1}
+ \fi
+ %
+ }
+ }
+}
+
+\long\def\drawbodydiode#1{
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgftransformrotate{90}
+ \pgftransformscale{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode scale}}
+ \ifpgf@circuit@fulldiode
+ \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \else
+ \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \fi
+ \endpgfscope
+ %Draw upper connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope{}
+ %Draw lower connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+}
+
+\long\def\declarebpt#1{
+ \pgfcircdeclaretransistor{#1}{}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \ifpgf@circuit@bpt@drawphoto
+ \pgfscope
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \else
+ \ifpgf@circuit@bpt@drawbase
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \fi
+ }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+
+\long\def\declareigbt#1{
+\pgfcircdeclaretransistor{#1}{}
+{
+ %draw upper connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %draw thicker gate lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw lower connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ %draw gate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \fi
+ \pgfusepath{draw}
+}
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+
+\pgfcircdeclaretransistor{nmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+}
+
+
+\pgfcircdeclaretransistor{pmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+ \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \ifpgf@circuit@pmos@emptycircle
+ \pgfsetfillcolor{white}
+ \fi
+ \pgfusepath{draw,fill}
+}
+
+\long\def\drawfetcore#1{
+ \pgftransformationadjustments
+ %top connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \ifpgf@circuit@trans@depletiontype
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \else
+
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \fi
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %Bulk connection line
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ %bottom connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ %draw thick gate line
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \ifpgf@circuit@trans@ntype
+ \else
+ \pgftransformrotate{180}
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+ \fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+ \anchor{bulk}{\left\pgf@x=0pt}
+ \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt
+ #2
+ }
+ {#3}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nfet}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pfet}
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfete}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfetebulk}
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetebulk/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{nigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfete}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfetebulk}
+}
+
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{pigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ % GATE
+ %\pgfscope
+ %\pgfpathmoveto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ %\pgfpathlineto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ %\pgfusepath{draw}
+ %\endpgfscope
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{fullthyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{emptythyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{emptytriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \ifpgf@circuit@bipole@reversed\northeast\else\southwest\fi
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{fulltriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \ifpgf@circuit@bipole@reversed\southwest\else\northeast\fi
+ \pgf@y=.8\pgf@y
+ }
+}{\ctikzvalof{tripoles/toggleswitch/height 2}}{toggleswitch}{\ctikzvalof{tripoles/toggleswitch/height}}{\ctikzvalof{tripoles/toggleswitch/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+
+
+
+
+
+
+
+
+
+\pgfdeclareshape{op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%%Transkonduktanzverstärker
+\pgfdeclareshape{gm amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{0pt}} %
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %Umrandung:
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}} %geändert startpunkt neu am ausgangsstrich
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{15pt}}%vom Ausgang nach oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-15pt}}%ecke links unten nach rechts unten
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}} %rechts unten zum ausgang
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+
+
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/potentiometer/height 2}}{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}{\ctikzvalof{bipoles/potentiometer/width}}{
+\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+\pgftransformationadjustments
+\pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+\divide \pgf@circ@res@step by 12
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+\pgf@circ@res@other = \pgf@circ@res@left
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+\pgfsetbeveljoin
+\pgfusepath{draw}
+
+\pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+\endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/generic potentiometer/height 2}}{genericpotentiometer}{\ctikzvalof{bipoles/generic potentiometer/height}}{\ctikzvalof{bipoles/generic potentiometer/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{oscillator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{text}{
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@Rlen{}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+ % draw outer box
+ \ifpgf@circuit@boxed{}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{circulator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed{}
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{pgf@generic}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{pgf@resistor}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+% electromechanical device (motor/generator)
+\pgfdeclareshape{elmech}
+{
+ \savedanchor\northwest{
+ %\ifpgf@circuit@boxed
+ % \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ % \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ % \pgf@y=.5\pgf@y
+ % \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ % \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ % \pgf@x=.5\pgf@x
+ %\else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ %\fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ % draw outer box
+ % \ifpgf@circuit@boxed
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ % \fi
+ % draw outer circle
+ %\ifpgf@circuit@boxed
+ % \pgf@circ@res@step=.7\pgf@circ@res@step
+ % \pgfsetdash{}{0pt} % draw solid circle if boxed
+ %\else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %\fi
+ \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%%%---------- close: tex/pgfcirctripoles
+%%%%%%%%%%% Springe nach tex/pgfcircquadpoles
+%%%---------- open: tex/pgfcircquadpoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ %\pgf@circ@Rlen=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+
+ #2
+
+ }
+ }
+}
+
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \def\stretto{.4}
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+ % contrib Kristofer M. Monisit
+
+ \pgfdeclareshape{fd op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out +}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+
+ % Draw them all!
+ \pgfusepath{draw}
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+
+\pgfcircdeclarequadpole{transformer}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \def\stretto{.4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% four-port
+% defines a general outer box for four-ports
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarefourport#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ % draw inner text
+ \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ }
+ }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+
+}
+%%%---------- close: tex/pgfcircquadpoles
+
+%%%%%%%%%%% Springe nach tex/pgfcirclabel
+%%%---------- open: tex/pgfcirclabel.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+
+
+\def\pgf@circ@drawlabel{
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabel
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabel
+ \else % smart
+ \pgf@circ@drawsmartlabel
+ \fi
+ \fi
+}
+
+\def\pgf@circ@drawsmartlabel{
+ \pgfextra{
+ %\pgfmathadd{\pgf@circ@direction}{360}
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70 % NON quasi retto
+ \pgf@circ@drawrotlabel
+ \else
+ \pgf@circ@drawreglabel
+ \fi
+ \else
+ \pgf@circ@drawreglabel
+ \fi
+}
+
+%% Output routing
+%% #1 - node name
+
+\def\pgf@circ@drawrotlabel{
+ \pgfextra{
+ % calcolo rotazione label
+ \def\pgf@circ@temp{\ctikzvalof{bipole/label/position}} %%% àncora label
+ \edef\pgfcirclabrot{\pgf@circ@direction} % primo e quarto quadrante
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 90 \ifnum \pgfcircmathresult < 270 % terzo e secondo
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathadd{\pgf@circ@temp}{180} %%%
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} %%%
+ \fi\fi
+
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ }
+ coordinate (labelcoor) at ($(\ctikzvalof{bipole/name})!2!(\ctikzvalof{bipole/name}.north)$)
+ (labelcoor) node [rotate=\pgfcirclabrot] {\pgf@circ@finallabel{}} % c'era un transform shape
+}
+
+\def\pgf@circ@drawreglabel{
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/label/position}} %%% àncora label
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ }
+ node [ anchor = \pgf@circ@labanc]
+ at (\ctikzvalof{bipole/name}.\pgf@circ@temp) {\pgf@circ@finallabel{}}
+}
+
+
+\ctikzset{text/.style = { t=#1 } }
+\ctikzset{t/.code = {
+ \ctikzsetvalof{bipoles/twoport/text}{#1}
+}}
+
+%%%---------- close: tex/pgfcirclabel
+%%%%%%%%%%% Springe nach tex/pgfcircvoltage
+%%%---------- open: tex/pgfcircvoltage.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi
+ \fi
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@bipole@current@backward
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi\fi\fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below\pgf@circuit@bipole@voltage@belowfalse\else\pgf@circuit@bipole@voltage@belowtrue\fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distacefromnode{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}} }
+ { \edef\distacefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ }
+
+ coordinate (pgfcirc@mid) at ($(\tikztostart) ! \distacefromnode ! (\ctikzvalof{bipole/name}.left)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@mid) ! -\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen ! \pgf@circ@voltage@angle:(\ctikzvalof{bipole/name}.left)$)
+
+ coordinate (pgfcirc@mid) at ($(\tikztotarget) ! \distacefromnode ! (\ctikzvalof{bipole/name}.right)$)
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@mid) ! \ctikzvalof{voltage/distance from line}\pgf@circ@Rlen ! \pgf@circ@voltage@angle : (\ctikzvalof{bipole/name}.right)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \fi
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+
+\def\pgf@circ@drawvoltagegenerator{
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vcont2) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont1)
+ \else
+ (pgfcirc@Vcont1) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont2)
+ \fi
+
+ \else % american voltage
+
+ \ifpgf@circuit@bipole@voltageoutsideofsymbol
+ % if it is a battery, must put + and -
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vcont2) node {$-$} (pgfcirc@Vcont1) node {$+$}
+ \else
+ (pgfcirc@Vcont1) node {$+$} (pgfcirc@Vcont2) node {$-$}
+ \fi
+ \fi
+
+ \fi
+}
+
+%% Output routine
+
+\def\pgf@circ@drawvoltage{ % node name
+ \pgfextra{
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >284 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+ }
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)
+ coordinate (Vlab) at ($(\ctikzvalof{bipole/name}.center) !
+ \ifpgf@circuit@europeanvoltage\eudist\else\ctikzvalof{voltage/american label distance}\fi !
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)$)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=0]
+ at (Vlab) { \pgf@circ@finallabel{voltage/} }
+}
+
+
+
+
+
+% coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.-110) $)
+% coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.-70) $)
+% \else
+% coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.110) $)
+% coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) !
+% \ctikzvalof{voltage/bump b} !
+% (\ctikzvalof{bipole/name}.70) $)
+% \fi
+%%%---------- close: tex/pgfcircvoltage
+%%%%%%%%%%% Springe nach tex/pgfcirccurrent
+%%%---------- open: tex/pgfcirccurrent.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+
+
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+% \ifpgf@circuit@bipole@iscurrent
+% \pgfkeys{\circuitikzbasekey/bipole/current/position=above}
+% \else
+% \pgfkeys{\circuitikzbasekey/bipole/current/position=below}
+% \fi
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+%reverse current direction for voltage sources
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@isvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below }
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \fi\fi\fi
+}
+}
+
+
+\ifpgf@circ@oldvoltagedirection
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+
+\def\pgf@circ@drawnormalcurrent{
+ \ifpgf@circuit@bipole@current@before
+ \ifpgf@circuit@bipole@current@backward
+ { (\ctikzvalof{bipole/name}.left) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztostart)
+ }
+ \else
+ { (\tikztostart) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\ctikzvalof{bipole/name}.left)
+ }
+ \fi
+ \else
+ \ifpgf@circuit@bipole@current@backward
+ { (\tikztotarget) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\ctikzvalof{bipole/name}.right)
+ }
+ \else
+ { (\ctikzvalof{bipole/name}.right) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztotarget)
+ }
+ \fi
+ \fi
+}
+
+%% Output routine
+%% #1 - node name
+
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >284 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+
+ \pgfextra{ \def\pgf@temp{short} \edef\pgf@circ@temp{\ctikzvalof{bipole/kind}} }
+
+ \ifx\pgf@circ@temp\pgf@temp % caso di corrente (centrata) su un corto
+ \ifpgf@circuit@bipole@current@backward
+ { (\tikztotarget) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztostart) }
+ \else
+ { (\tikztostart) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztotarget) }
+ \fi
+
+ \else % altri bipoli - e quindi tra nodo e target
+
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@europeancurrent
+ \pgf@circ@drawnormalcurrent
+ \else
+ \fi
+ \else
+ \pgf@circ@drawnormalcurrent
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@iscurrent
+ node [anchor=\pgf@circ@dir] at (\ctikzvalof{bipole/name}.\pgf@circ@bipole@current@label@where)
+ { \pgf@circ@finallabel{current/} }
+ \else
+ (Iarrow.\pgf@circ@bipole@current@label@where) node [anchor=\pgf@circ@dir]
+ { \pgf@circ@finallabel{current/} }
+ \fi
+
+}
+
+
+
+
+%%%---------- close: tex/pgfcirccurrent
+
+\ExecuteOptions{nofetbodydiode,nofetsolderdot,nooldvoltagedirection,europeancurrents,europeanvoltages,americanports,americanresistors,cuteinductors,europeangfsurgearrester,nosiunitx,noarrowmos,smartlabels,nocompatibility}
+
+\ProcessOptions\relax
+
+%%%%%%%%%%% Springe nach tex/pgfcircpath
+%%%---------- open: tex/pgfcircpath.tex
+
+\pgf@circ@Rlen = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90,
+ bipole/reversed=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+
+%% Generic bipole path
+\def\pgf@circ@bipole@path#1#2{
+ \pgfextra{
+ \ctikzset{bipole/kind = #1}
+
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #2\pgf@circ@rand} % create it
+ \fi
+
+ \def\pgf@temp{open}
+ \def\pgf@circ@temp{#1}
+ }
+ \ifpgf@circuit@bipole@reversed
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ \ifpgf@circuit@bipole@strokedsymbol%draw line thrue symbol(e.g. diodes)
+ \ifcsname pgf@anchor@#1shape@strokepathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.strokepathstart)
+ (\ctikzvalof{bipole/name}.strokepathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center)--(\ctikzvalof{bipole/name}end.center)
+ \fi
+ \else
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \fi
+ \fi
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabel\fi
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+%% Path definitions
+
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@battery1@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
+\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
+\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@spst@path#1{\pgf@circ@bipole@path{spst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
+\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
+\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
+\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
+\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+%%Mechanical
+\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
+\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
+\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}
+
+
+
+
+%% Styles
+
+\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
+\def\compattikzset#1{\tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery1@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+% % % % % %
+% % Beginn of Diodes
+% % % % % %
+
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
+\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
+\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
+%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spst@path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+%\ifpgf@circuit@compat\else\compattikzset{R/.style= {resistor = #1}}\fi
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+ \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} }
+ \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} }
+ \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+ \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+ \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+ \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+\def\inheritlogicport#1#2{
+ \pgfdeclareshape{#2 port}{
+ \inheritsavedanchors[from=#1 #2 port]
+ \inheritbackgroundpath[from=#1 #2 port]
+ \inheritanchor[from=#1 #2 port]{in}
+ \inheritanchor[from=#1 #2 port]{in 1}
+ \inheritanchor[from=#1 #2 port]{in 2}
+ \inheritanchor[from=#1 #2 port]{out}
+ \inheritanchor[from=#1 #2 port]{center}
+ \inheritanchor[from=#1 #2 port]{left}
+ }
+}
+
+\ifpgf@circuit@europeanlogicport
+ \inheritlogicport{european}{and}
+ \inheritlogicport{european}{or}
+ \inheritlogicport{european}{xor}
+ \inheritlogicport{european}{not}
+ \inheritlogicport{european}{nand}
+ \inheritlogicport{european}{nor}
+ \inheritlogicport{european}{xnor}
+\else
+ \inheritlogicport{american}{and}
+ \inheritlogicport{american}{or}
+ \inheritlogicport{american}{xor}
+ \inheritlogicport{american}{not}
+ \inheritlogicport{american}{nand}
+ \inheritlogicport{american}{nor}
+ \inheritlogicport{american}{xnor}
+\fi
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@reversed
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{elmech}
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{nigfetebulk}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{pigfetebulk}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+\pgf@circ@definetranspath{Lpigbt}
+\pgf@circ@definetranspath{Lnigbt}%%%---------- close: tex/pgfcircpath
+
+\ifpgf@circ@siunitx
+ \RequirePackage{xstring}[2009/03/13]
+ %\expandafter\let\csname angstrom\endcsname\relax
+ \RequirePackage{siunitx}
+\fi
+
+
+
+\newenvironment{circuitikz}{\begin{tikzpicture}}{\end{tikzpicture}}
+%override (unused) circuitikz environment for compability to externalization)
+\let\circuitikz\tikzpicture
+\let\endcircuitikz\endtikzpicture
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.7.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.7.sty
new file mode 100644
index 0000000000..3b0a448ef0
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.7.sty
@@ -0,0 +1,10682 @@
+% Copyright 2007-2016 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+
+%%%%%
+%%%%%
+%%%%%
+%%%%% Se c'è l'opzione symbol, fallback to siunitx with warning
+%%%%%
+%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\def\pgfcircversion{0.7}
+\def\pgfcircversiondate{2016/09/08}
+
+\ProvidesPackage{circuitikz-0.7}
+ [\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion]
+
+%% Version 2.0 of pgf/TikZ is required
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+\usepgflibrary{arrows}
+
+
+% The options are listed in the manual in this order
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{straightvoltages}{
+ \pgf@circuit@bipole@voltage@straighttrue
+}
+
+\DeclareOption{americanvoltage}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrent}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrent}{
+ \ctikzset{current = american}
+}
+
+
+
+\DeclareOption{americanresistor}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistor}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductor}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductor}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductor}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanport}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{european}{
+ \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european}
+ \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester = european}
+}
+
+\DeclareOption{american}{
+ \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester = american}
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{fulldiodes}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiodes}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltages}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrents}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrents}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{americanresistors}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistors}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductors}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductors}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductors}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanports}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanports}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{americangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = american}
+}
+
+\DeclareOption{europeangfsurgearrester}{
+ \ctikzset{gas filled surge arrester = european}
+}
+
+\DeclareOption{siunitx}{
+ \pgf@circ@siunitxtrue
+}
+
+\DeclareOption{nosiunitx}{
+ \pgf@circ@siunitxfalse
+}
+
+\DeclareOption{fulldiode}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiode}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{strokediode}{
+ \ctikzset{diode = stroke}
+}
+
+\DeclareOption{arrowmos}{
+ \pgf@circuit@mos@arrowstrue
+}
+
+\DeclareOption{noarrowmos}{
+ \pgf@circuit@mos@arrowsfalse
+}
+
+\DeclareOption{fetbodydiode}{
+ \pgf@circuit@fet@bodydiodetrue
+}
+
+\DeclareOption{nofetbodydiode}{
+ \pgf@circuit@fet@bodydiodefalse
+}
+
+\DeclareOption{fetsolderdot}{
+ \pgf@circuit@fet@solderdottrue
+}
+
+\DeclareOption{nofetsolderdot}{
+ \pgf@circuit@fet@solderdotfalse
+}
+
+\DeclareOption{emptypmoscircle}{
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+
+\DeclareOption{lazymos}{
+ \ctikzset{tripoles/nmos/width=.5}
+ \ctikzset{tripoles/nmos/gate height=.35}
+ \ctikzset{tripoles/nmos/base height=.35}
+ \ctikzset{tripoles/nmos/height/.initial=1.2}
+ \ctikzset{tripoles/nmos/base width=.5}
+ \ctikzset{tripoles/nmos/gate width=.65}
+
+ \ctikzset{tripoles/pmos/width=.5}
+ \ctikzset{tripoles/pmos/gate height=.35}
+ \ctikzset{tripoles/pmos/base height=.35}
+ \ctikzset{tripoles/pmos/height/.initial=1.2}
+ \ctikzset{tripoles/pmos/base width=.5}
+ \ctikzset{tripoles/pmos/gate width=.65}
+
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+\DeclareOption{straightlabels}{
+ \ctikzset{label/align = straight}
+}
+
+\DeclareOption{rotatelabels}{
+ \ctikzset{label/align = rotate}
+}
+
+\DeclareOption{smartlabels}{
+ \ctikzset{label/align = smart}
+}
+
+\DeclareOption{compatibility}{
+ \pgf@circuit@compattrue
+}
+
+\DeclareOption{oldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectiontrue
+}
+\DeclareOption{nooldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectionfalse
+}
+
+\DeclareOption{betterproportions}{
+ \ctikzset{monopoles/ground/width/.initial=.15}
+
+ \ctikzset{bipoles/resistor/height/.initial=.23}
+ \ctikzset{bipoles/resistor/width/.initial=.6}
+ \ctikzset{bipoles/capacitor/height/.initial=.4}
+ \ctikzset{bipoles/capacitor/width/.initial=.1}
+ \ctikzset{bipoles/potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height 2/.initial=.23}
+ \ctikzset{bipoles/photoresistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistor/main/.initial=.7}
+ \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7
+ \ctikzset{bipoles/thermistorptc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorptc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/main/.initial=.7}
+ \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/width/.initial=.6}
+ \ctikzset{bipoles/vresistor/height/.initial=.45}
+ \ctikzset{bipoles/vresistor/width/.initial=.6}
+ \ctikzset{bipoles/generic/height/.initial=.23}
+ \ctikzset{bipoles/generic/width/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/generic potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/ageneric/height/.initial=.23}
+ \ctikzset{bipoles/ageneric/width/.initial=.6}
+ \ctikzset{bipoles/memristor/height/.initial=.23}
+ \ctikzset{bipoles/memristor/wave height/.initial=.375}
+ \ctikzset{bipoles/memristor/width/.initial=.60}
+ \ctikzset{bipoles/tgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tgeneric/width/.initial=.6}
+ \ctikzset{bipoles/tfullgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tfullgeneric/width/.initial=.60}
+ \ctikzset{bipoles/fullgeneric/height/.initial=.23}
+ \ctikzset{bipoles/fullgeneric/width/.initial=.6}
+ \ctikzset{bipoles/diode/height/.initial=.3}
+ \ctikzset{bipoles/diode/width/.initial=.25}
+
+ \ctikzset{tripoles/thyristor/height/.initial=.66}
+ \ctikzset{tripoles/thyristor/height 2/.initial=.3}
+ \ctikzset{tripoles/thyristor/width/.initial=.6}
+ \ctikzset{tripoles/thyristor/diode height/.initial=.3}
+ \ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+ \ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/triac/height/.initial=.66}
+ \ctikzset{tripoles/triac/width/.initial=.6}
+ \ctikzset{tripoles/triac/diode width left/.initial=.3}
+ \ctikzset{tripoles/triac/diode width right/.initial=.3}
+}
+
+%%%%%%%%%
+%%%%%%%%%%% Springe nach tex/pgfcirc.defines
+%%%---------- open: tex/pgfcirc.defines.tex
+
+%% Options
+
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinates
+\newdimen\pgf@circ@res@up
+\newdimen\pgf@circ@res@down
+\newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left
+\newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+\newdimen\pgf@circ@res@temp
+% inital thickness
+\newdimen \pgfstartlinewidth
+%% Keys
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circuit@compat
+\newif\ifpgf@circ@oldvoltagedirection
+
+% Option ">" for twoports
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf@circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf@circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}}
+
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+
+
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{bipoles/length/.initial=1.4cm}
+\ctikzset{nodes width/.initial=.04}
+\newdimen\pgf@circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1}}
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial= \fontsize{6}{0}\selectfont\boldmath}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/interr/height/.initial=.35}
+\ctikzset{bipoles/interr/width/.initial=.35}
+\ctikzset{bipoles/interr/height 2/.initial=.1}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.25}
+\ctikzset{bipoles/open/width/.initial=.8}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.0}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+
+
+\newif\ifpgf@circuit@trans@depletiontype
+\pgf@circuit@trans@depletiontypefalse
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+
+% Option solderdot for fet
+\newif\ifpgf@circuit@fet@solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf@circuit@fet@bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf@circuit@bpt@drawgate
+\pgf@circuit@bpt@drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+
+% Option draw bpt without base connection
+\newif\ifpgf@circuit@bpt@drawbase
+\pgf@circuit@bpt@drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf@circuit@bpt@drawphoto
+\pgf@circuit@bpt@drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf@circuit@pmos@emptycircle
+\newif\ifpgf@circuit@pmos@emptycircle
+\pgf@circuit@pmos@emptycirclefalse
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+
+
+\newif\ifpgf@circuit@trans@ntype
+\pgf@circuit@trans@ntypetrue %default true
+%\newif\ifpgf@circuit@trans@ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue } }
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse } }
+
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/op amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/gm amp/width/.initial=1.7}
+\ctikzset{tripoles/gm amp/port width/.initial=.7}
+\ctikzset{tripoles/gm amp/height/.initial=1.4}
+\ctikzset{tripoles/gm amp/input height/.initial=.5}
+\ctikzset{tripoles/gm amp/up pos/.initial=.45}
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
+
+
+% %Mechanical section
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol}
+\newif\ifpgf@circuit@bipole@strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/annotation/.is family}
+\ctikzset{bipole/annotation/position/.initial=-90}
+\ctikzset{bipole/annotation/unit/.initial=}
+\ctikzset{bipole/annotation/name/.initial=}
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.is choice}
+\ctikzset{bipole/nodes/left/none/.code={\ctikzsetvalof{bipole/nodes/left}{none}}}
+\ctikzset{bipole/nodes/left/empty/.code={\ctikzsetvalof{bipole/nodes/left}{empty}}}
+\ctikzset{bipole/nodes/left/full/.code={\ctikzsetvalof{bipole/nodes/left}{full}}}
+\ctikzset{bipole/nodes/left/diamond/.code={\ctikzsetvalof{bipole/nodes/left}{diamond}}}
+\ctikzset{bipole/nodes/right/.is choice}
+\ctikzset{bipole/nodes/right/none/.code={\ctikzsetvalof{bipole/nodes/right}{none}}}
+\ctikzset{bipole/nodes/right/empty/.code={\ctikzsetvalof{bipole/nodes/right}{empty}}}
+\ctikzset{bipole/nodes/right/full/.code={\ctikzsetvalof{bipole/nodes/right}{full}}}
+\ctikzset{bipole/nodes/right/diamond/.code={\ctikzsetvalof{bipole/nodes/right}{diamond}}}
+
+
+
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@strokediode
+\newif\ifpgf@circuit@fulldiode
+\pgf@circuit@strokediodefalse
+\pgf@circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full }}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty }}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke }}
+
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color=#1}}}
+
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{straight/.is choice}
+\ctikzset{straightvoltage value/.initial=true}
+\ctikzset{straight/true/.code = {\pgf@circuit@bipole@voltage@straighttrue}}
+\ctikzset{straight/false/.code = {\pgf@circuit@bipole@voltage@straightfalse}}
+\ctikzset{straightvoltage/.style = {/tikz/circuitikz/straight=true}}
+\newif\ifpgf@circuit@bipole@voltage@straight
+\ctikzset{bipole/straight/.is if=pgf@circuit@bipole@voltage@straight}
+
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+\tikzset{american currents/.style = { \circuitikzbasekey/current = american } }
+\tikzset{european currents/.style = { \circuitikzbasekey/current = european } }
+\tikzset{american voltages/.style = { \circuitikzbasekey/voltage = american } }
+\tikzset{european voltages/.style = { \circuitikzbasekey/voltage = european } }
+\tikzset{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester/.is choice}
+\ctikzset{gas filled surge arrester/european/.code= {\pgf@circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester/american/.code= {\pgf@circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = american } }
+\tikzset{european gas filled surge arrester/.style = { \circuitikzbasekey/gas filled surge arrester = european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester } }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester } }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltaege conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue } }
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue }
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+%%%---------- close: tex/pgfcirc.defines
+%%%%%%%%%%% Springe nach tex/pgfcircutils
+%%%---------- open: tex/pgfcircutils.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+ \fi
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+}
+
+%%%---------- close: tex/pgfcircutils
+%%%%%%%%%%% Springe nach tex/pgfcircmath
+%%%---------- open: tex/pgfcircmath.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+% angle between 0 and 360
+\def\pgf@circ@slope#1#2{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{#2}%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \ifdim\pgf@x<0.1pt
+ \ifdim\pgf@x>-0.1pt % vertical
+ \ifdim\pgf@y<0pt
+ \def\pgfmathresult{-90.0}
+ \else
+ \def\pgfmathresult{+90.0}
+ \fi
+ \else % oblique with dx < 0
+ \pgfmathdivide{\pgf@y}{\pgf@x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf@x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \else % oblique with dx > 0
+ \pgfmathdivide{\pgf@y}{\pgf@x}
+ \pgfmathatan{\pgfmathresult}
+ \ifdim\pgf@x<0pt
+ \pgfmathsubtract{\pgfmathresult}{+180}
+ \fi
+ \fi
+ \pgf@x=\pgfmathresult pt
+ \ifdim\pgf@x<0pt
+ \pgfmathadd{\pgfmathresult}{+360}
+ \fi
+ }
+
+
+%%%---------- close: tex/pgfcircmath
+
+%%%%%%%%%%% Springe nach tex/pgfcircshapes
+%%%---------- open: tex/pgfcircshapes.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \northeast
+ \pgf@y=-\pgf@y
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \northeast
+ \pgf@y=0cm
+ \pgf@x=-\pgf@x
+ }
+ \anchor{text}{%
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@temp}{\pgf@circ@res@up+\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up-\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+
+}
+
+%% Current arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+
+}
+
+%%%---------- close: tex/pgfcircshapes
+%%%%%%%%%%% Springe nach tex/pgfcircmonopoles
+%%%---------- open: tex/pgfcircmonopoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+
+\pgfdeclareshape{ground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+
+\pgfdeclareshape{rground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{tground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ %\pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{sground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% noiseless ground
+\pgfdeclareshape{nground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{1.3\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{1.3\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% protective ground
+\pgfdeclareshape{pground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathcircle{\pgfpoint{0pt}{-\pgf@circ@res@step}} {1.2\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% chassis ground
+\pgfdeclareshape{cground}{
+\anchor{center}{
+ \pgfpointorigin
+}
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/chassis/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-1.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+
+\pgfdeclareshape{antenna}{
+\anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+
+ % \pgfpathmoveto{\pgfpointorigin}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ % \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=2\pgf@circ@res@step
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=-2\pgf@circ@res@step
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+
+% match
+\pgfdeclareshape{match}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+%%%---------- close: tex/pgfcircmonopoles
+%%%%%%%%%%% Springe nach tex/pgfcircbipoles
+%%%---------- open: tex/pgfcircbipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+
+
+\long\def\pgfcircdeclarebipole#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@res@down=-#2\pgf@circ@Rlen
+ \pgf@circ@res@up=#4\pgf@circ@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{ne}{
+ \northeast
+ }
+ \anchor{nw}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{s}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{se}{%
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{%
+ \southwest
+ }
+ \anchor{w}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{left}{%
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{below}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{a}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{b} {
+ \southwest
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{%
+ \textanchor
+ }
+ \anchorborder{%
+ \ifpgf@circuit@bipole@inverted
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/resistor/height}}{resistor}{\ctikzvalof{bipoles/resistor/height}}{\ctikzvalof{bipoles/resistor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vresistor/height}}{vresistor}{\ctikzvalof{bipoles/vresistor/height}}{\ctikzvalof{bipoles/vresistor/width}}{ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/capacitor/height}}{capacitor}{\ctikzvalof{bipoles/capacitor/height}}{\ctikzvalof{bipoles/capacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pcapacitor/height}}{polarcapacitor}{\ctikzvalof{bipoles/pcapacitor/height}}{\ctikzvalof{bipoles/pcapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/pcapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Electrolytic Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ecapacitor/height}}{ecapacitor}{\ctikzvalof{bipoles/ecapacitor/height}}{\ctikzvalof{bipoles/ecapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/ecapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+ \pgfsetrectcap
+ % % % Draw plus pole
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ % % Draw minus pole
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfsetfillcolor{black}
+ % % plus pole annotation
+ \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}]
+ {\pgfkeysvalueof{/tikz/circuitikz/bipoles/ecapacitor/font} $+$}
+}
+
+%% Battery
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery/height}}{battery}{\ctikzvalof{bipoles/battery/height}}{\ctikzvalof{bipoles/battery/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery1/height}}{battery1}{\ctikzvalof{bipoles/battery1/height}}{\ctikzvalof{bipoles/battery1/width}}{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+
+
+
+ \pgfusepath{draw}
+}
+
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cuteinductor/lower coil height}}{cuteinductor}{\ctikzvalof{bipoles/cuteinductor/height}}{\ctikzvalof{bipoles/cuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}{vcuteinductor}{\ctikzvalof{bipoles/vcuteinductor/height}}{\ctikzvalof{bipoles/vcuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/americaninductor/height 2}}{americaninductor}{\ctikzvalof{bipoles/americaninductor/height}}{\ctikzvalof{bipoles/americaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vamericaninductor/height 2}}{vamericaninductor}{\ctikzvalof{bipoles/vamericaninductor/height}}{\ctikzvalof{bipoles/vamericaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsource/height}}{vsource}{\ctikzvalof{bipoles/vsource/height}}{\ctikzvalof{bipoles/vsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourceam/height}}{vsourceAM}{\ctikzvalof{bipoles/vsourceam/height}}{\ctikzvalof{bipoles/vsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$+$}
+ \fi
+ \fi
+ \pgfusepath{draw}
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesin/height}}{vsourcesin}{\ctikzvalof{bipoles/vsourcesin/height}}{\ctikzvalof{bipoles/vsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% contributed by Alistair Kwan
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesquare/height}}{vsourcesquare}{\ctikzvalof{bipoles/vsourcesquare/height}}{\ctikzvalof{bipoles/vsourcesquare/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% PV Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pvsource/height}}{pvsource}{\ctikzvalof{bipoles/pvsource/height}}{\ctikzvalof{bipoles/pvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %Adapted from battery1
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %Arrow Part
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcisource/height}}{dcisource}{\ctikzvalof{bipoles/dcisource/height}}{\ctikzvalof{bipoles/dcisource/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{-90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{270}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \ifpgf@circ@oldvoltagedirection
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \else
+ \ifpgf@circuit@bipole@current@backward
+ \pgftransformshift{\pgfpoint{-.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgftransformrotate{180}
+ \else
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \fi\fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% DC-Voltage source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcvsource/height}}{dcvsource}{\ctikzvalof{bipoles/dcvsource/height}}{\ctikzvalof{bipoles/dcvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isource}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Independent double oo source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/oosource/height}}{oosource}{\ctikzvalof{bipoles/oosource/height}}{\ctikzvalof{bipoles/oosource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isourceam/height}}{isourceAM}{\ctikzvalof{bipoles/isourceam/height}}{\ctikzvalof{bipoles/isourceam/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \ifpgf@circ@oldvoltagedirection
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \else
+ \ifpgf@circuit@bipole@current@backward
+ \pgftransformshift{\pgfpoint{-.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgftransformrotate{180}
+ \else
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \fi\fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+
+
+
+%% Independent sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isourcesin}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Controlled voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsource/height}}{cvsource}{\ctikzvalof{bipoles/cvsource/height}}{\ctikzvalof{bipoles/cvsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourceam/height}}{cvsourceAM}{\ctikzvalof{bipoles/cvsourceam/height}}{\ctikzvalof{bipoles/cvsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \pgfusepath{draw}
+}
+
+
+%% Controlled sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cvsourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Controlled sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cisourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Controlled current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisource/height}}{cisource}{\ctikzvalof{bipoles/cisource/height}}{\ctikzvalof{bipoles/cisource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisourceam/height}}{cisourceAM}{\ctikzvalof{bipoles/cisourceam/height}}{\ctikzvalof{bipoles/cisourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{draw}}
+ \endpgfscope
+}
+
+%% Black generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulldiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullsdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulltdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulllediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullpdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{fullvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw,fill}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptydiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptysdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptytdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptylediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptypdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole{
+ \anchor{strokepathstart}{
+ \northeast
+ \pgf@y=0cm
+ \advance\pgf@x by -\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth
+ \advance\pgf@x by -\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth
+ }
+ \anchor{strokepathend}{
+ \northeast
+ \pgf@y=0cm
+ }
+ }{\ctikzvalof{bipoles/varcap/height}}{emptyvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{spst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfpatharc{65}{25}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.1\pgf@circ@res@right}{-.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.14\pgf@circ@res@right}{-.35\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+}
+
+%% Closing SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{cspst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfpatharc{65}{25}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+}
+
+%% Opening SPST
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/interr/height 2}}{ospst}{\ctikzvalof{bipoles/interr/height}}{\ctikzvalof{bipoles/interr/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@right}{.1\pgf@circ@res@down}}
+ \pgfpatharc{15}{50}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/interr/width}\pgf@circ@Rlen}
+ %\pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.85\pgf@circ@res@left}{1.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.87\pgf@circ@res@left}{1.26\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfusepath{draw}
+
+
+}
+
+
+%% Push Button
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pushbutton/height 2}}{pushbutton}{\ctikzvalof{bipoles/pushbutton/height}}{\ctikzvalof{bipoles/pushbutton/width}}{
+
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+%METERINGSHAPE
+\long\def\drawmeteringcircle{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+ %draw connections to circle
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ %draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw arrow
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%AMPEREMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ammeter/height}}{ammeter}{\ctikzvalof{bipoles/ammeter/height}}{\ctikzvalof{bipoles/ammeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ohmmeter/height}}{ohmmeter}{\ctikzvalof{bipoles/ohmmeter/height}}{\ctikzvalof{bipoles/ohmmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/voltmeter/height}}{voltmeter}{\ctikzvalof{bipoles/voltmeter/height}}{\ctikzvalof{bipoles/voltmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+%% Short circuit
+
+\pgfcircdeclarebipole{}{0}{short}{0}{0}{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/open/height}}{open}{\ctikzvalof{bipoles/open/height}}{\ctikzvalof{bipoles/open/width}}{
+
+}
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/generic/height}}{generic}{\ctikzvalof{bipoles/generic/height}}{\ctikzvalof{bipoles/generic/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fuse/height}}{fuse}{\ctikzvalof{bipoles/fuse/height}}{\ctikzvalof{bipoles/fuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fullgeneric/height}}{fullgeneric}{\ctikzvalof{bipoles/fullgeneric/height}}{\ctikzvalof{bipoles/fullgeneric/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ageneric/height}}{ageneric}{\ctikzvalof{bipoles/ageneric/height}}{\ctikzvalof{bipoles/ageneric/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/afuse/height}}{afuse}{\ctikzvalof{bipoles/afuse/height}}{\ctikzvalof{bipoles/afuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/memristor/height}}{memristor}{\ctikzvalof{bipoles/memristor/height}}{\ctikzvalof{bipoles/memristor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tgeneric/height}}{tgeneric}{\ctikzvalof{bipoles/tgeneric/height}}{\ctikzvalof{bipoles/tgeneric/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/photoresistor/height 2}}{photoresistor}{\ctikzvalof{bipoles/photoresistor/height}}{\ctikzvalof{bipoles/photoresistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Thermistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistor/height}}{thermistor}{\ctikzvalof{bipoles/thermistor/height}}{\ctikzvalof{bipoles/thermistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorptc/height 2}}{thermistorptc}{\ctikzvalof{bipoles/thermistorptc/height}}{\ctikzvalof{bipoles/thermistorptc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorntc/height 2}}{thermistorntc}{\ctikzvalof{bipoles/thermistorntc/height}}{\ctikzvalof{bipoles/thermistorntc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermocouple/height 2}}{thermocouple}{\ctikzvalof{bipoles/thermocouple/height}}{\ctikzvalof{bipoles/thermocouple/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% Varistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varistor/height}}{varistor}{\ctikzvalof{bipoles/varistor/height}}{\ctikzvalof{bipoles/varistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tfullgeneric/height}}{tfullgeneric}{\ctikzvalof{bipoles/tfullgeneric/height}}{\ctikzvalof{bipoles/tfullgeneric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcapacitor/height}}{vcapacitor}{\ctikzvalof{bipoles/vcapacitor/height}}{\ctikzvalof{bipoles/vcapacitor/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piezoelectric/height}}{piezoelectric}{\ctikzvalof{bipoles/piezoelectric/height}}{\ctikzvalof{bipoles/piezoelectric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ %% Outer markings
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %% Inner Box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left+4}{\pgf@circ@res@up-1}}{\pgfpoint{\pgf@circ@res@right-4}{\pgf@circ@res@down+1}}
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=diamond}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
+
+
+%% The output routine
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[diamondpole] {} }
+ \else
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztostart) node[circ] {} }
+ \fi
+ \fi
+ \fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[diamondpole] {} }
+ \else
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[ocirc] {} }
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ { (\tikztotarget) node[circ] {} }
+ \fi
+ \fi
+ \fi
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lamp/height}}{lamp}{\ctikzvalof{bipoles/lamp/height}}{\ctikzvalof{bipoles/lamp/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tline/height}
+ }{tline}{\ctikzvalof{bipoles/tline/height}
+ }{\ctikzvalof{bipoles/tline/width}
+ }
+ {
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0}}
+ {\pgfpoint{\pgf@circ@res@step}{0}}
+ {\pgfpoint{0}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/squid/height}}{squid}{\ctikzvalof{bipoles/squid/height}}{\ctikzvalof{bipoles/squid/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/barrier/height}}{barrier}{\ctikzvalof{bipoles/barrier/height}}{\ctikzvalof{bipoles/barrier/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%% Generic two port box
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/twoport/height}}{twoport}{\ctikzvalof{bipoles/twoport/height}}{\ctikzvalof{bipoles/twoport/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vco/width}}{vco}{\ctikzvalof{bipoles/twoport/width}}{\ctikzvalof{bipoles/vco/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+}
+
+%% bandpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bandpass/width}}{bandpass}{\ctikzvalof{bipoles/bandpass/width}}{\ctikzvalof{bipoles/bandpass/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/highpass/width}}{highpass}{\ctikzvalof{bipoles/highpass/width}}{\ctikzvalof{bipoles/highpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lowpass/width}}{lowpass}{\ctikzvalof{bipoles/lowpass/width}}{\ctikzvalof{bipoles/lowpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/adc/width}}{adc}{\ctikzvalof{bipoles/adc/width}}{\ctikzvalof{bipoles/adc/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dac/width}}{dac}{\ctikzvalof{bipoles/dac/width}}{\ctikzvalof{bipoles/dac/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dsp/width}}{dsp}{\ctikzvalof{bipoles/dsp/width}}{\ctikzvalof{bipoles/dsp/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fft/width}}{fft}{\ctikzvalof{bipoles/fft/width}}{\ctikzvalof{bipoles/fft/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{amp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{vamp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+ % draw arrow
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piattenuator/width}}{piattenuator}{\ctikzvalof{bipoles/piattenuator/width}}{\ctikzvalof{bipoles/piattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vpiattenuator/width}}{vpiattenuator}{\ctikzvalof{bipoles/vpiattenuator/width}}{\ctikzvalof{bipoles/vpiattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tattenuator/width}}{tattenuator}{\ctikzvalof{bipoles/tattenuator/width}}{\ctikzvalof{bipoles/tattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vtattenuator/width}}{vtattenuator}{\ctikzvalof{bipoles/vtattenuator/width}}{\ctikzvalof{bipoles/vtattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{phaseshifter}{\ctikzvalof{bipoles/phaseshifter/width}}{\ctikzvalof{bipoles/phaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{vphaseshifter}{\ctikzvalof{bipoles/vphaseshifter/width}}{\ctikzvalof{bipoles/vphaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/detector/width}}{detector}{\ctikzvalof{bipoles/detector/width}}{\ctikzvalof{bipoles/detector/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{european gas filled surge arrester}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{\ctikzvalof{bipoles/european gas filled surge arrester/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{american gas filled surge arrester}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+ %\def\pgf@circ@temp{right}
+ %\ifx\tikz@res@label@pos\pgf@circ@temp
+ % \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ %\else
+% \def\pgf@circ@temp{below}
+% \ifx\tikz@res@label@pos\pgf@circ@temp
+% \pgf@circ@res@step=-1.2\pgf@circ@res@up
+% \else
+% \pgf@circ@res@step=1.2\pgf@circ@res@up
+% \fi
+% \fi
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfnode{circle}{center}{}{}{}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ %\pgftransformshift{\pgfpoint{.25\pgf@circ@res@left}{.45\pgf@circ@res@down}}
+ %\pgfnode{circ}{center}{}{}{}
+ %\pgftransformshift{}
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+% % MECHANICAL SYMBOLS
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spring/height}}{spring}{\ctikzvalof{bipoles/spring/height}}{\ctikzvalof{bipoles/spring/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/mass/box height}}{mass}{\ctikzvalof{bipoles/mass/height}}{\ctikzvalof{bipoles/mass/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}}
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/damper/height}}{damper}{\ctikzvalof{bipoles/damper/height}}{\ctikzvalof{bipoles/damper/width}}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+
+
+%%%---------- close: tex/pgfcircbipoles
+%%%%%%%%%%% Springe nach tex/pgfcirctripoles
+%%%---------- open: tex/pgfcirctripoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+
+
+\pgfdeclareshape{spdt}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+
+
+
+
+
+
+\long\def\pgfcircdeclarelogicport#1#2{
+ \pgfdeclareshape{american #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ #2
+
+ }
+ }
+}
+
+
+\pgfcircdeclarelogicport{and}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+ \pgfpathcurveto
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{nand}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{nor}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+
+
+\pgfcircdeclarelogicport{or}{
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{xor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{xnor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclareshape{american not port}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+\pgfdeclareshape{invschmitt}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 - is it a not
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \def\pgf@temp{1}
+ \def\pgf@circ@temp{#3}
+ \ifx\pgftemp\pgf@circ@temp % one input
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}
+ \else % two inputs
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \fi%
+ %
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+%
+%
+ }
+ }
+}
+
+
+
+\pgfcircdeclareeurologicport{and}{$\&$}{2}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{2}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{2}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{$\&$}{2}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{2}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{2}{not}
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northeast{% upper right
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@x
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=.7\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=0.1\pgf@x
+ }
+ \anchor{pathstart}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{pathend}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{base}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{nobase}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ \anchor{nogate}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@x
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ #2
+ \backgroundpath{
+ \pgftransformationadjustments
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \ifnum \pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction} > 0
+ \pgf@circuit@trans@ntypetrue
+ \else
+ \pgf@circuit@trans@ntypefalse
+ \fi
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ %
+ #3
+ % BODY DIODE
+ \ifpgf@circuit@fet@bodydiode
+ \drawbodydiode{#1}
+ \fi
+ %
+ }
+ }
+}
+
+\long\def\drawbodydiode#1{
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgftransformrotate{90}
+ \pgftransformscale{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode scale}}
+ \ifpgf@circuit@fulldiode
+ \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \else
+ \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \fi
+ \endpgfscope
+ %Draw upper connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope{}
+ %Draw lower connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+}
+
+\long\def\declarebpt#1{
+ \pgfcircdeclaretransistor{#1}{}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \ifpgf@circuit@bpt@drawphoto
+ \pgfscope
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \else
+ \ifpgf@circuit@bpt@drawbase
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \fi
+ }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+
+\long\def\declareigbt#1{
+\pgfcircdeclaretransistor{#1}{}
+{
+ %draw upper connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %draw thicker gate lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw lower connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ %draw gate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \fi
+ \pgfusepath{draw}
+}
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+
+\pgfcircdeclaretransistor{nmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+}
+
+
+\pgfcircdeclaretransistor{pmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+ \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}}
+ \ifpgf@circuit@pmos@emptycircle
+ \pgfsetfillcolor{white}
+ \fi
+ \pgfusepath{draw,fill}
+}
+
+\long\def\drawfetcore#1{
+ \pgftransformationadjustments
+ %top connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \ifpgf@circuit@trans@depletiontype
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \else
+
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \fi
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %Bulk connection line
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ %bottom connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ %draw thick gate line
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \ifpgf@circuit@trans@ntype
+ \else
+ \pgftransformrotate{180}
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+ \fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+ \anchor{bulk}{\left\pgf@x=0pt}
+ \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt
+ #2
+ }
+ {#3}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nfet}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pfet}
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfete}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfetebulk}
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetebulk/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{nigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfete}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfetebulk}
+}
+
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{pigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ % GATE
+ %\pgfscope
+ %\pgfpathmoveto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ %\pgfpathlineto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ %\pgfusepath{draw}
+ %\endpgfscope
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{fullthyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{emptythyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{emptytriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{fulltriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \northeast
+ \pgf@y=.8\pgf@y
+ }
+}{\ctikzvalof{tripoles/toggleswitch/height 2}}{toggleswitch}{\ctikzvalof{tripoles/toggleswitch/height}}{\ctikzvalof{tripoles/toggleswitch/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+
+
+
+
+
+
+
+
+
+\pgfdeclareshape{op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%%Transkonduktanzverstärker
+\pgfdeclareshape{gm amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{0pt}} %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %Umrandung:
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}} %geändert startpunkt neu am ausgangsstrich
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}%vom Ausgang nach oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}%ecke links unten nach rechts unten
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+ }
+ }
+
+
+
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/potentiometer/height 2}}{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}{\ctikzvalof{bipoles/potentiometer/width}}{
+\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+\pgftransformationadjustments
+\pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+\divide \pgf@circ@res@step by 12
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+\pgf@circ@res@other = \pgf@circ@res@left
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+\pgfsetbeveljoin
+\pgfusepath{draw}
+
+\pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+\endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/generic potentiometer/height 2}}{genericpotentiometer}{\ctikzvalof{bipoles/generic potentiometer/height}}{\ctikzvalof{bipoles/generic potentiometer/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{oscillator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{text}{
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@Rlen{}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+ % draw outer box
+ \ifpgf@circuit@boxed{}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{circulator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed{}
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{pgf@generic}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{pgf@resistor}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+% electromechanical device (motor/generator)
+\pgfdeclareshape{elmech}
+{
+ \savedanchor\northwest{
+ %\ifpgf@circuit@boxed
+ % \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ % \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ % \pgf@y=.5\pgf@y
+ % \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ % \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ % \pgf@x=.5\pgf@x
+ %\else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ %\fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ % draw outer box
+ % \ifpgf@circuit@boxed
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ % \fi
+ % draw outer circle
+ %\ifpgf@circuit@boxed
+ % \pgf@circ@res@step=.7\pgf@circ@res@step
+ % \pgfsetdash{}{0pt} % draw solid circle if boxed
+ %\else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %\fi
+ \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{magnetron}
+{
+ \savedanchor\northwest{
+ %\ifpgf@circuit@boxed
+ % \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ % \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@y
+ % \pgf@y=.5\pgf@y
+ % \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ % \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@x
+ % \pgf@x=.5\pgf@x
+ %\else
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ %\fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{anode}{
+ \northwest
+ \pgf@circ@res@step= \pgf@y
+ \pgfpointorigin
+ \pgfpathmoveto{ \pgfpointpolar{-90}{\pgf@circ@res@step}}
+ }
+ \anchor{cathode1}{
+ \northwest
+ \pgf@circ@res@step= \pgf@y
+ \pgfpointorigin
+ \pgfpathmoveto{ \pgfpointpolar{105}{\pgf@circ@res@step}}
+ }
+ \anchor{cathode2}{
+ \northwest
+ \pgf@circ@res@step= \pgf@y
+ \pgfpointorigin
+ \pgfpathmoveto{ \pgfpointpolar{75}{\pgf@circ@res@step}}
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@Rlen
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfmathsetlength{\pgf@circ@res@other}{sin(15)*\pgf@circ@res@up}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ % draw outer box
+ % \ifpgf@circuit@boxed
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ % \fi
+ % draw outer circle
+ %\ifpgf@circuit@boxed
+ % \pgf@circ@res@step=.7\pgf@circ@res@step
+ % \pgfsetdash{}{0pt} % draw solid circle if boxed
+ %\else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %\fi
+ %create outer circle
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@right}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw}
+ %create chambers
+ \foreach \angle in {45,135,225,315}{
+ \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf@circ@res@right}}
+ \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf@circ@res@right}}
+ }
+ \pgfsetroundcap
+ \pgfusepath{draw}
+ \pgfscope
+ %draw connection from outside
+ %anode
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ %cathodes
+ \pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ %create cathode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.15\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %create anode
+ \pgfpathmoveto{\pgfpoint{0.3\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%%%---------- close: tex/pgfcirctripoles
+%%%%%%%%%%% Springe nach tex/pgfcircquadpoles
+%%%---------- open: tex/pgfcircquadpoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ %\pgf@circ@Rlen=\pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+
+ #2
+
+ }
+ }
+}
+
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \def\stretto{.4}
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+ % contrib Kristofer M. Monisit
+
+ \pgfdeclareshape{fd op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@x
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out +}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfsetrectcap
+ % Draw them all!
+ \pgfusepath{draw}
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+
+\pgfcircdeclarequadpole{transformer}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \def\stretto{.4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% four-port
+% defines a general outer box for four-ports
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarefourport#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@y
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ % draw inner text
+ \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ }
+ }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+
+}
+%%%---------- close: tex/pgfcircquadpoles
+
+%%%%%%%%%%% Springe nach tex/pgfcirclabel
+%%%---------- open: tex/pgfcirclabel.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+%value options
+\ctikzset{annotation/.style = { a=#1 } }
+\ctikzset{a/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1}
+ \ctikzsetvalof{bipole/annotation/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }}
+
+
+
+\ctikzset{annotation above/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+\ctikzset{a^/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{annotation below/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+\ctikzset{a_/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+
+
+
+\def\pgf@circ@drawlabels#1{
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabels{#1}
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabels{#1}
+ \else % smart
+ \pgf@circ@drawsmartlabels{#1}
+ \fi
+ \fi
+}
+
+
+\def\pgf@circ@drawsmartlabels#1{
+ \pgfextra{
+ %\pgfmathadd{\pgf@circ@direction}{360}
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70 % NON quasi retto
+ \pgf@circ@drawrotlabels{#1}
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+}
+
+%% Output routing
+%% #1 - node name
+
+\def\pgf@circ@drawrotlabels#1{
+ \pgfextra{
+ % calcolo rotazione label
+ \def\pgf@circ@temp{\ctikzvalof{bipole/#1/position}} %%% àncora label
+ \edef\pgfcirclabrot{\pgf@circ@direction} % primo e quarto quadrante
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 90 \ifnum \pgfcircmathresult < 270 % terzo e secondo
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathadd{\pgf@circ@temp}{180} %%%
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil} %%%
+ \fi\fi
+
+ }
+ \ifnum \ctikzvalof{mirror value} = -1
+ % \pgfmathadd{\pgf@circ@temp}{180}
+ % \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ coordinate (labelcoor) at ($(\ctikzvalof{bipole/name})!2!(\ctikzvalof{bipole/name}.south)$)
+ (labelcoor) node [rotate=\pgfcirclabrot] {\pgf@circ@finallabels{#1}} % c'era un transform shape
+ \else
+ coordinate (labelcoor) at ($(\ctikzvalof{bipole/name})!2!(\ctikzvalof{bipole/name}.north)$)
+ (labelcoor) node [rotate=\pgfcirclabrot] {\pgf@circ@finallabels{#1}} % c'era un transform shape
+ \fi
+
+}
+
+\def\pgf@circ@drawreglabels#1{
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/position}} %%% àncora label
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathadd{\pgf@circ@temp}{180}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ }
+ node [ anchor = \pgf@circ@labanc]
+ at (\ctikzvalof{bipole/name}.\pgf@circ@temp) {\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@finallabels#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$%
+ \fi%
+}
+
+
+\ctikzset{text/.style = { t=#1 } }
+\ctikzset{t/.code = {
+ \ctikzsetvalof{bipoles/twoport/text}{#1}
+}}
+
+%%%---------- close: tex/pgfcirclabel
+%%%%%%%%%%% Springe nach tex/pgfcircvoltage
+%%%---------- open: tex/pgfcircvoltage.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi
+ \fi
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@bipole@current@backward
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi\fi\fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\eudist}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\eudist}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\eudist}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\eudist}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distacefromnode{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}} }
+ { \edef\distacefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ }
+
+
+ coordinate (pgfcirc@midtmp) at ($(\tikztostart) ! \distacefromnode ! (anchorstartnode)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@midtmp) ! -\distfromline ! \pgf@circ@voltage@angle:(anchorstartnode)$)
+ coordinate (pgfcirc@mid) at ($(\tikztotarget) ! \distacefromnode ! (anchorendnode)$)
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@mid) ! \distfromline ! \pgf@circ@voltage@angle : (anchorendnode)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@straight
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) --(pgfcirc@Vfrom) node[currarrow, sloped, allow upside down, pos=1] {}
+ \else
+ (pgfcirc@Vfrom) --(pgfcirc@Vto) node[currarrow, sloped, allow upside down, pos=1] {}
+
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \fi
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+
+\def\pgf@circ@drawvoltagegenerator{
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vcont2) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vcont2) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont1)
+ \else
+ (pgfcirc@Vcont1) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vcont2)
+ \fi
+
+ \else % american voltage
+
+ \ifpgf@circuit@bipole@voltageoutsideofsymbol
+ % if it is a battery, must put + and -
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vcont1) node {$-$} (pgfcirc@Vcont2) node {$+$}
+ \else
+ (pgfcirc@Vcont1) node {$+$} (pgfcirc@Vcont2) node {$-$}
+ \fi
+ \fi
+
+ \fi
+}
+
+%% Output routine
+
+\def\pgf@circ@drawvoltage{ % node name
+ \pgfextra{
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >284 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label
+ distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ } %end pgfextra
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+
+
+
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)
+ coordinate (Vlab) at ($(\ctikzvalof{bipole/name}.center) !
+ \ifpgf@circuit@europeanvoltage\eudist\else\ctikzvalof{voltage/american label distance}\fi !
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)$)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=0]
+ at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+}
+
+%%%---------- close: tex/pgfcircvoltage
+%%%%%%%%%%% Springe nach tex/pgfcirccurrent
+%%%---------- open: tex/pgfcirccurrent.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+
+
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+% \ifpgf@circuit@bipole@iscurrent
+% \pgfkeys{\circuitikzbasekey/bipole/current/position=above}
+% \else
+% \pgfkeys{\circuitikzbasekey/bipole/current/position=below}
+% \fi
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+%reverse current direction for voltage sources
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@isvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below }
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \fi\fi\fi
+}
+}
+
+
+\ifpgf@circ@oldvoltagedirection
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+
+\def\pgf@circ@drawnormalcurrent{
+ \ifpgf@circuit@bipole@current@before
+ \ifpgf@circuit@bipole@current@backward
+ { (anchorstartnode) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztostart)
+ }
+ \else
+ { (\tikztostart) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (anchorstartnode)
+ }
+ \fi
+ \else
+ \ifpgf@circuit@bipole@current@backward
+ { (\tikztotarget) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (anchorendnode)
+ }
+ \else
+ { (anchorendnode) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztotarget)
+ }
+ \fi
+ \fi
+}
+
+%% Output routine
+%% #1 - node name
+
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >284 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+
+ \pgfextra{ \def\pgf@temp{short} \edef\pgf@circ@temp{\ctikzvalof{bipole/kind}} }
+
+ \ifx\pgf@circ@temp\pgf@temp % caso di corrente (centrata) su un corto
+ \ifpgf@circuit@bipole@current@backward
+ { (\tikztotarget) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztostart) }
+ \else
+ { (\tikztostart) --
+ node [currarrow, pos=\ctikzvalof{current/distance}, sloped, allow upside down] (Iarrow) {}
+ (\tikztotarget) }
+ \fi
+
+ \else % altri bipoli - e quindi tra nodo e target
+
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@europeancurrent
+ \pgf@circ@drawnormalcurrent
+ \else
+ \fi
+ \else
+ \pgf@circ@drawnormalcurrent
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@iscurrent
+ node [anchor=\pgf@circ@dir] at (\ctikzvalof{bipole/name}.\pgf@circ@bipole@current@label@where)
+ { \pgf@circ@finallabels{current/label} }
+ \else
+ (Iarrow.\pgf@circ@bipole@current@label@where) node [anchor=\pgf@circ@dir]
+ { \pgf@circ@finallabels{current/label} }
+ \fi
+
+}
+
+
+
+
+%%%---------- close: tex/pgfcirccurrent
+
+\ExecuteOptions{nofetbodydiode,nofetsolderdot,nooldvoltagedirection,europeancurrents,europeanvoltages,americanports,americanresistors,cuteinductors,europeangfsurgearrester,nosiunitx,noarrowmos,smartlabels,nocompatibility}
+
+\ProcessOptions\relax
+
+%%%%%%%%%%% Springe nach tex/pgfcircpath
+%%%---------- open: tex/pgfcircpath.tex
+
+\pgf@circ@Rlen = \pgfkeysvalueof{/tikz/circuitikz/bipoles/length}
+\def\pgf@circ@direction{0.0}
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Invert node along path
+\ctikzset{inverted/.is choice}
+\ctikzset{invert value/.initial=1}
+\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}}
+\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}}
+\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
+\newif\ifpgf@circuit@bipole@inverted
+\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted}
+
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90,
+ bipole/inverted=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+
+%% Generic bipole path
+\def\pgf@circ@bipole@path#1#2{
+ \pgfextra{
+ \ctikzset{bipole/kind = #1}
+
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #2\pgf@circ@rand} % create it
+ \fi
+
+ \def\pgf@temp{open}
+ \def\pgf@circ@temp{#1}
+ }
+
+ (\tikztostart) coordinate (\ctikzvalof{bipole/name}start)
+ (\tikztotarget) coordinate (\ctikzvalof{bipole/name}end)
+ \pgfextra{
+ \pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifpgf@circuit@bipole@inverted
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.right)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.left)
+ \fi
+ \else
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.left)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.right)
+ \fi
+ \fi
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ \ifpgf@circuit@bipole@strokedsymbol%draw line thrue symbol(e.g. diodes)
+ \ifcsname pgf@anchor@#1shape@strokepathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.strokepathstart)
+ (\ctikzvalof{bipole/name}.strokepathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center)--(\ctikzvalof{bipole/name}end.center)
+ \fi
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(anchorstartnode)
+ (anchorendnode) -- (\ctikzvalof{bipole/name}end.center)
+
+ \fi
+ \fi
+
+
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi
+ \pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+%% Path definitions
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@battery1@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
+\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
+\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@spst@path#1{\pgf@circ@bipole@path{spst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
+\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
+\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
+\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
+\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+%%Mechanical
+\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
+\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
+\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}
+
+
+
+
+%% Styles
+
+\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
+\def\compattikzset#1{\tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery1@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+% % % % % %
+% % Beginn of Diodes
+% % % % % %
+
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
+\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
+\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
+%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spst@path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+%\ifpgf@circuit@compat\else\compattikzset{R/.style= {resistor = #1}}\fi
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+ \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} }
+ \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} }
+ \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+ \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+ \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+ \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+\def\inheritlogicport#1#2{
+ \pgfdeclareshape{#2 port}{
+ \inheritsavedanchors[from=#1 #2 port]
+ \inheritbackgroundpath[from=#1 #2 port]
+ \inheritanchor[from=#1 #2 port]{in}
+ \inheritanchor[from=#1 #2 port]{in 1}
+ \inheritanchor[from=#1 #2 port]{in 2}
+ \inheritanchor[from=#1 #2 port]{out}
+ \inheritanchor[from=#1 #2 port]{center}
+ \inheritanchor[from=#1 #2 port]{left}
+ }
+}
+
+\ifpgf@circuit@europeanlogicport
+ \inheritlogicport{european}{and}
+ \inheritlogicport{european}{or}
+ \inheritlogicport{european}{xor}
+ \inheritlogicport{european}{not}
+ \inheritlogicport{european}{nand}
+ \inheritlogicport{european}{nor}
+ \inheritlogicport{european}{xnor}
+\else
+ \inheritlogicport{american}{and}
+ \inheritlogicport{american}{or}
+ \inheritlogicport{american}{xor}
+ \inheritlogicport{american}{not}
+ \inheritlogicport{american}{nand}
+ \inheritlogicport{american}{nor}
+ \inheritlogicport{american}{xnor}
+\fi
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@inverted
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgf@circ@slope{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/value/name}}
+ \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{elmech}
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{nigfetebulk}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{pigfetebulk}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+\pgf@circ@definetranspath{Lpigbt}
+\pgf@circ@definetranspath{Lnigbt}%%%---------- close: tex/pgfcircpath
+
+\ifpgf@circ@siunitx
+ \RequirePackage{xstring}[2009/03/13]
+ %\expandafter\let\csname angstrom\endcsname\relax
+ \RequirePackage{siunitx}
+\fi
+
+
+
+\newenvironment{circuitikz}{\begin{tikzpicture}}{\end{tikzpicture}}
+%override (unused) circuitikz environment for compability to externalization)
+\let\circuitikz\tikzpicture
+\let\endcircuitikz\endtikzpicture
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.8.3.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.8.3.sty
new file mode 100644
index 0000000000..22100fdfd2
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.8.3.sty
@@ -0,0 +1,11141 @@
+% Copyright 2007-2016 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+
+\NeedsTeXFormat{LaTeX2e}
+
+\def\pgfcircversion{0.8.3}
+\def\pgfcircversiondate{2017/05/28}
+
+\ProvidesPackage{circuitikz-0.8.3}
+ [\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion]
+
+%% Version 3.0 of pgf/TikZ is required
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+\usepgflibrary{arrows}
+
+
+% The options are listed in the manual in this order
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{straightvoltages}{
+ \pgf@circuit@bipole@voltage@straighttrue
+}
+
+\DeclareOption{americanvoltage}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrent}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrent}{
+ \ctikzset{current = american}
+}
+
+
+
+\DeclareOption{americanresistor}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistor}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductor}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductor}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductor}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanport}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{european}{
+ \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european}
+ \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester choice = european}
+}
+
+\DeclareOption{american}{
+ \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester choice = american}
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{fulldiodes}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiodes}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltages}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrents}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrents}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{americanresistors}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistors}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductors}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductors}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductors}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanports}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanports}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{americangfsurgearrester}{
+ \ctikzset{gas filled surge arrester choice = american}
+}
+
+\DeclareOption{europeangfsurgearrester}{
+ \ctikzset{gas filled surge arrester choice = european}
+}
+
+\DeclareOption{siunitx}{
+ \pgf@circ@siunitxtrue
+}
+
+\DeclareOption{nosiunitx}{
+ \pgf@circ@siunitxfalse
+}
+
+\DeclareOption{fulldiode}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiode}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{strokediode}{
+ \ctikzset{diode = stroke}
+}
+
+\DeclareOption{arrowmos}{
+ \pgf@circuit@mos@arrowstrue
+}
+
+\DeclareOption{noarrowmos}{
+ \pgf@circuit@mos@arrowsfalse
+}
+
+\DeclareOption{fetbodydiode}{
+ \pgf@circuit@fet@bodydiodetrue
+}
+
+\DeclareOption{nofetbodydiode}{
+ \pgf@circuit@fet@bodydiodefalse
+}
+
+\DeclareOption{fetsolderdot}{
+ \pgf@circuit@fet@solderdottrue
+}
+
+\DeclareOption{nofetsolderdot}{
+ \pgf@circuit@fet@solderdotfalse
+}
+
+\DeclareOption{emptypmoscircle}{
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+
+\DeclareOption{lazymos}{
+ \ctikzset{tripoles/nmos/width=.5}
+ \ctikzset{tripoles/nmos/gate height=.35}
+ \ctikzset{tripoles/nmos/base height=.35}
+ \ctikzset{tripoles/nmos/height/.initial=1.2}
+ \ctikzset{tripoles/nmos/base width=.5}
+ \ctikzset{tripoles/nmos/gate width=.65}
+
+ \ctikzset{tripoles/pmos/width=.5}
+ \ctikzset{tripoles/pmos/gate height=.35}
+ \ctikzset{tripoles/pmos/base height=.35}
+ \ctikzset{tripoles/pmos/height/.initial=1.2}
+ \ctikzset{tripoles/pmos/base width=.5}
+ \ctikzset{tripoles/pmos/gate width=.65}
+
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+\DeclareOption{straightlabels}{
+ \ctikzset{label/align = straight}
+}
+
+\DeclareOption{rotatelabels}{
+ \ctikzset{label/align = rotate}
+}
+
+\DeclareOption{smartlabels}{
+ \ctikzset{label/align = smart}
+}
+
+\DeclareOption{compatibility}{
+ \pgf@circuit@compattrue
+}
+
+\DeclareOption{oldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectiontrue
+}
+\DeclareOption{nooldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectionfalse
+}
+
+\DeclareOption{betterproportions}{
+ \ctikzset{monopoles/ground/width/.initial=.15}
+
+ \ctikzset{bipoles/resistor/height/.initial=.23}
+ \ctikzset{bipoles/resistor/width/.initial=.6}
+ \ctikzset{bipoles/capacitor/height/.initial=.4}
+ \ctikzset{bipoles/capacitor/width/.initial=.1}
+ \ctikzset{bipoles/potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height 2/.initial=.23}
+ \ctikzset{bipoles/photoresistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistor/main/.initial=.7}
+ \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7
+ \ctikzset{bipoles/thermistorptc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorptc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/main/.initial=.7}
+ \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/width/.initial=.6}
+ \ctikzset{bipoles/vresistor/height/.initial=.45}
+ \ctikzset{bipoles/vresistor/width/.initial=.6}
+ \ctikzset{bipoles/generic/height/.initial=.23}
+ \ctikzset{bipoles/generic/width/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/generic potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/ageneric/height/.initial=.23}
+ \ctikzset{bipoles/ageneric/width/.initial=.6}
+ \ctikzset{bipoles/memristor/height/.initial=.23}
+ \ctikzset{bipoles/memristor/wave height/.initial=.375}
+ \ctikzset{bipoles/memristor/width/.initial=.60}
+ \ctikzset{bipoles/tgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tgeneric/width/.initial=.6}
+ \ctikzset{bipoles/tfullgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tfullgeneric/width/.initial=.60}
+ \ctikzset{bipoles/fullgeneric/height/.initial=.23}
+ \ctikzset{bipoles/fullgeneric/width/.initial=.6}
+ \ctikzset{bipoles/diode/height/.initial=.3}
+ \ctikzset{bipoles/diode/width/.initial=.25}
+
+ \ctikzset{tripoles/thyristor/height/.initial=.66}
+ \ctikzset{tripoles/thyristor/height 2/.initial=.3}
+ \ctikzset{tripoles/thyristor/width/.initial=.6}
+ \ctikzset{tripoles/thyristor/diode height/.initial=.3}
+ \ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+ \ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/triac/height/.initial=.66}
+ \ctikzset{tripoles/triac/width/.initial=.6}
+ \ctikzset{tripoles/triac/diode width left/.initial=.3}
+ \ctikzset{tripoles/triac/diode width right/.initial=.3}
+}
+
+%%%%%%%%%
+%%%%%%%%%%% Springe nach tex/pgfcirc.defines
+%%%---------- open: tex/pgfcirc.defines.tex
+
+%% Options
+
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinates
+\newdimen\pgf@circ@res@up
+\newdimen\pgf@circ@res@down
+\newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left
+\newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+\newdimen\pgf@circ@res@temp
+% inital thickness
+\newdimen \pgfstartlinewidth
+%% Keys
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circuit@compat
+\newif\ifpgf@circ@oldvoltagedirection
+
+% Option ">" for twoports
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf@circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf@circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}}
+
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+
+
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{nodes width/.initial=.04}
+\newdimen\pgf@circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1}}
+\pgf@circ@Rlen = 1.4cm
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial= \fontsize{6}{0}\selectfont\boldmath}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/battery2/height/.initial=.6}
+\ctikzset{bipoles/battery2/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/spst/height/.initial=.35}
+\ctikzset{bipoles/spst/width/.initial=.35}
+\ctikzset{bipoles/spst/depth/.initial=.2}
+\ctikzset{bipoles/nos/height/.initial=.3}
+\ctikzset{bipoles/nos/width/.initial=.35}
+\ctikzset{bipoles/ncs/height/.initial=.35}
+\ctikzset{bipoles/ncs/width/.initial=.35}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/short/height/.initial=0} %dummy height for voltage positioning
+\ctikzset{bipoles/short/width/.initial=0} %dummy width for voltage positioning
+%\ctikzset{bipoles/short/voltage/straight label distance/.initial=.2}
+%\ctikzset{bipoles/short/voltage/distance from node/.initial=.5}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.0}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/bandstop/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+
+
+\newif\ifpgf@circuit@trans@depletiontype
+\pgf@circuit@trans@depletiontypefalse
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+
+% Option solderdot for fet
+\newif\ifpgf@circuit@fet@solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf@circuit@fet@bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf@circuit@bpt@drawgate
+\pgf@circuit@bpt@drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+
+% Option draw bpt without base connection
+\newif\ifpgf@circuit@bpt@drawbase
+\pgf@circuit@bpt@drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf@circuit@bpt@drawphoto
+\pgf@circuit@bpt@drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf@circuit@pmos@emptycircle
+\newif\ifpgf@circuit@pmos@emptycircle
+\pgf@circuit@pmos@emptycirclefalse
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+
+
+\newif\ifpgf@circuit@trans@ntype
+\pgf@circuit@trans@ntypetrue %default true
+%\newif\ifpgf@circuit@trans@ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue } }
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse } }
+
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/op amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/en amp/width/.initial=1.7}
+\ctikzset{tripoles/en amp/port width/.initial=.7}
+\ctikzset{tripoles/en amp/height/.initial=1.6}
+\ctikzset{tripoles/en amp/input height/.initial=.3}
+\ctikzset{tripoles/en amp/up pos/.initial=.45}
+\ctikzset{tripoles/en amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/en amp/font2/.initial= \fontsize{14}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/gm amp/width/.initial=1.7}
+\ctikzset{tripoles/gm amp/port width/.initial=.7}
+\ctikzset{tripoles/gm amp/height/.initial=1.4}
+\ctikzset{tripoles/gm amp/input height/.initial=.5}
+\ctikzset{tripoles/gm amp/up pos/.initial=.45}
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
+
+
+% %Mechanical section
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol}
+\newif\ifpgf@circuit@bipole@strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/flow/.is family}
+\newif\ifpgf@circuit@bipole@flow@backward
+\ctikzset{bipole/flow/direction/.is choice}
+\ctikzset{bipole/flow/direction/forward/.code={\pgf@circuit@bipole@flow@backwardfalse}}
+\ctikzset{bipole/flow/direction/backward/.code={\pgf@circuit@bipole@flow@backwardtrue}}
+\newif\ifpgf@circuit@bipole@flow@before
+\ctikzset{bipole/flow/x position/.is choice}
+\ctikzset{bipole/flow/x position/after/.code={\pgf@circuit@bipole@flow@beforefalse}}
+\ctikzset{bipole/flow/x position/before/.code={\pgf@circuit@bipole@flow@beforetrue}}
+\newif\ifpgf@circuit@bipole@flow@below
+\ctikzset{bipole/flow/y position/.is choice}
+\ctikzset{bipole/flow/y position/above/.code={\pgf@circuit@bipole@flow@belowfalse}}
+\ctikzset{bipole/flow/y position/below/.code={\pgf@circuit@bipole@flow@belowtrue}}
+\ctikzset{bipole/flow/label/unit/.initial=}
+\ctikzset{bipole/flow/label/name/.initial=}
+\ctikzset{flow/distance/.initial = .5}
+\ctikzset{flow/offset/.initial = .2}%distance between flow-arrow and conductor
+
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/annotation/.is family}
+\ctikzset{bipole/annotation/position/.initial=-90}
+\ctikzset{bipole/annotation/unit/.initial=}
+\ctikzset{bipole/annotation/name/.initial=}
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.is choice}
+\ctikzset{bipole/nodes/left/none/.code={\ctikzsetvalof{bipole/nodes/left}{none}}}
+\ctikzset{bipole/nodes/left/empty/.code={\ctikzsetvalof{bipole/nodes/left}{empty}}}
+\ctikzset{bipole/nodes/left/full/.code={\ctikzsetvalof{bipole/nodes/left}{full}}}
+\ctikzset{bipole/nodes/left/diamond/.code={\ctikzsetvalof{bipole/nodes/left}{diamond}}}
+\ctikzset{bipole/nodes/left/rectjoinfill/.code={\ctikzsetvalof{bipole/nodes/left}{rectjoinfill}}}
+\ctikzset{bipole/nodes/right/.is choice}
+\ctikzset{bipole/nodes/right/none/.code={\ctikzsetvalof{bipole/nodes/right}{none}}}
+\ctikzset{bipole/nodes/right/empty/.code={\ctikzsetvalof{bipole/nodes/right}{empty}}}
+\ctikzset{bipole/nodes/right/full/.code={\ctikzsetvalof{bipole/nodes/right}{full}}}
+\ctikzset{bipole/nodes/right/diamond/.code={\ctikzsetvalof{bipole/nodes/right}{diamond}}}
+\ctikzset{bipole/nodes/right/rectjoinfill/.code={\ctikzsetvalof{bipole/nodes/right}{rectjoinfill}}}
+
+
+
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@strokediode
+\newif\ifpgf@circuit@fulldiode
+\pgf@circuit@strokediodefalse
+\pgf@circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full }}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty }}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke }}
+
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color={#1}}}}
+
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{straight/.is choice}
+\ctikzset{straightvoltage value/.initial=true}
+\ctikzset{straight/true/.code = {\pgf@circuit@bipole@voltage@straighttrue}}
+\ctikzset{straight/false/.code = {\pgf@circuit@bipole@voltage@straightfalse}}
+\ctikzset{straightvoltage/.style = {/tikz/circuitikz/straight=true}}
+\newif\ifpgf@circuit@bipole@voltage@straight
+\ctikzset{bipole/straight/.is if=pgf@circuit@bipole@voltage@straight}
+
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+
+\tikzset{american currents/.style = { \circuitikzbasekey/current = american } }
+\tikzset{european currents/.style = { \circuitikzbasekey/current = european } }
+\tikzset{american voltages/.style = { \circuitikzbasekey/voltage = american } }
+\tikzset{european voltages/.style = { \circuitikzbasekey/voltage = european } }
+\tikzset{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester choice/.is choice}
+\ctikzset{gas filled surge arrester choice/european/.code= {\pgf@circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester choice/american/.code= {\pgf@circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=american } }
+\tikzset{european gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester set} }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester set} }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltaege conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue } }
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue }
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+%%%---------- close: tex/pgfcirc.defines
+%%%%%%%%%%% Springe nach tex/pgfcircutils
+%%%---------- open: tex/pgfcircutils.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+ \fi
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+
+%%%---------- close: tex/pgfcircutils
+
+%%%%%%%%%%% Springe nach tex/pgfcircshapes
+%%%---------- open: tex/pgfcircshapes.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \northeast
+ \pgf@y=-\pgf@y
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \northeast
+ \pgf@y=0cm
+ \pgf@x=-\pgf@x
+ }
+ \anchor{text}{%
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@temp}{\pgf@circ@res@up+\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up-\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% Fill for correct rectangular joins
+
+\pgfdeclareshape{rectjoinfill}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfpathrectanglecorners
+ {\pgfpoint{0}{.5\pgflinewidth}}
+ {\pgfpoint{0}{-.5\pgflinewidth}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+
+}
+
+%% Flow arrow
+
+\pgfdeclareshape{flowarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfnode{currarrow}{tip}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+ }
+}
+
+%% Input arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+
+}
+
+%%%---------- close: tex/pgfcircshapes
+%%%%%%%%%%% Springe nach tex/pgfcircmonopoles
+%%%---------- open: tex/pgfcircmonopoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+
+\pgfdeclareshape{ground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+
+\pgfdeclareshape{rground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{tground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ %\pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{sground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% noiseless ground
+\pgfdeclareshape{nground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{1.3\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{1.3\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% protective ground
+\pgfdeclareshape{pground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathcircle{\pgfpoint{0pt}{-\pgf@circ@res@step}} {1.2\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% chassis ground
+\pgfdeclareshape{cground}{
+\anchor{center}{
+ \pgfpointorigin
+}
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/chassis/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-1.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+
+\pgfdeclareshape{antenna}{
+\anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+
+ % \pgfpathmoveto{\pgfpointorigin}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ % \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=2\pgf@circ@res@step
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=-2\pgf@circ@res@step
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+
+% match
+\pgfdeclareshape{match}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+%%%---------- close: tex/pgfcircmonopoles
+%%%%%%%%%%% Springe nach tex/pgfcircbipoles
+%%%---------- open: tex/pgfcircbipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+
+
+\long\def\pgfcircdeclarebipole#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@res@down=-#2\pgf@circ@Rlen
+ \pgf@circ@res@up=#4\pgf@circ@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{ne}{
+ \northeast
+ }
+ \anchor{nw}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{s}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{se}{%
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{%
+ \southwest
+ }
+ \anchor{w}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{left}{%
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{below}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{a}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{b} {
+ \southwest
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{%
+ \textanchor
+ }
+ \anchorborder{%
+ \ifpgf@circuit@bipole@inverted
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/resistor/height}}{resistor}{\ctikzvalof{bipoles/resistor/height}}{\ctikzvalof{bipoles/resistor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vresistor/height}}{vresistor}{\ctikzvalof{bipoles/vresistor/height}}{\ctikzvalof{bipoles/vresistor/width}}{ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/capacitor/height}}{capacitor}{\ctikzvalof{bipoles/capacitor/height}}{\ctikzvalof{bipoles/capacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pcapacitor/height}}{polarcapacitor}{\ctikzvalof{bipoles/pcapacitor/height}}{\ctikzvalof{bipoles/pcapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/pcapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Electrolytic Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ecapacitor/height}}{ecapacitor}{\ctikzvalof{bipoles/ecapacitor/height}}{\ctikzvalof{bipoles/ecapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/ecapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+ \pgfsetrectcap
+ % % % Draw plus pole
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ % % Draw minus pole
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfsetfillcolor{black}
+ % % plus pole annotation
+ \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}]
+ {\pgfkeysvalueof{/tikz/circuitikz/bipoles/ecapacitor/font} $+$}
+}
+
+%% Battery
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery/height}}{battery}{\ctikzvalof{bipoles/battery/height}}{\ctikzvalof{bipoles/battery/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1 % poles with equl thickness
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery1/height}}{battery1}{\ctikzvalof{bipoles/battery1/height}}{\ctikzvalof{bipoles/battery1/width}}{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Battery 2 % negative pole thicker
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery2/height}}{battery2}{\ctikzvalof{bipoles/battery2/height}}{\ctikzvalof{bipoles/battery2/width}}{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cuteinductor/lower coil height}}{cuteinductor}{\ctikzvalof{bipoles/cuteinductor/height}}{\ctikzvalof{bipoles/cuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}{vcuteinductor}{\ctikzvalof{bipoles/vcuteinductor/height}}{\ctikzvalof{bipoles/vcuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/americaninductor/height 2}}{americaninductor}{\ctikzvalof{bipoles/americaninductor/height}}{\ctikzvalof{bipoles/americaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vamericaninductor/height 2}}{vamericaninductor}{\ctikzvalof{bipoles/vamericaninductor/height}}{\ctikzvalof{bipoles/vamericaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/vamericaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsource/height}}{vsource}{\ctikzvalof{bipoles/vsource/height}}{\ctikzvalof{bipoles/vsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourceam/height}}{vsourceAM}{\ctikzvalof{bipoles/vsourceam/height}}{\ctikzvalof{bipoles/vsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$+$}
+ \fi
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesin/height}}{vsourcesin}{\ctikzvalof{bipoles/vsourcesin/height}}{\ctikzvalof{bipoles/vsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% Square Voltage source - contributed by Alistair Kwan
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesquare/height}}{vsourcesquare}{\ctikzvalof{bipoles/vsourcesquare/height}}{\ctikzvalof{bipoles/vsourcesquare/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% PV Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pvsource/height}}{pvsource}{\ctikzvalof{bipoles/pvsource/height}}{\ctikzvalof{bipoles/pvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %Arrow Part
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcisource/height}}{dcisource}{\ctikzvalof{bipoles/dcisource/height}}{\ctikzvalof{bipoles/dcisource/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{-90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{270}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% DC-Voltage source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcvsource/height}}{dcvsource}{\ctikzvalof{bipoles/dcvsource/height}}{\ctikzvalof{bipoles/dcvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isource}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Independent double oo source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/oosource/height}}{oosource}{\ctikzvalof{bipoles/oosource/height}}{\ctikzvalof{bipoles/oosource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isourceam/height}}{isourceAM}{\ctikzvalof{bipoles/isourceam/height}}{\ctikzvalof{bipoles/isourceam/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+
+%% Independent sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isourcesin}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Controlled voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsource/height}}{cvsource}{\ctikzvalof{bipoles/cvsource/height}}{\ctikzvalof{bipoles/cvsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourceam/height}}{cvsourceAM}{\ctikzvalof{bipoles/cvsourceam/height}}{\ctikzvalof{bipoles/cvsourceam/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$+$}
+ \fi
+}
+
+
+%% Controlled sinusoidal voltage source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cvsourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Controlled sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cisourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Controlled current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisource/height}}{cisource}{\ctikzvalof{bipoles/cisource/height}}{\ctikzvalof{bipoles/cisource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisourceam/height}}{cisourceAM}{\ctikzvalof{bipoles/cisourceam/height}}{\ctikzvalof{bipoles/cisourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% Black generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulldiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullsdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulltdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulllediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullpdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{fullvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw,fill}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptydiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptysdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptytdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptylediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptypdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole{
+ \anchor{strokepathstart}{
+ \northeast
+ \pgf@y=0cm
+ \advance\pgf@x by -\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth
+ \advance\pgf@x by -\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth
+ }
+ \anchor{strokepathend}{
+ \northeast
+ \pgf@y=0cm
+ }
+ }{\ctikzvalof{bipoles/varcap/height}}{emptyvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% (Closing) SPST
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spst/depth}}{cspst}{\ctikzvalof{bipoles/spst/height}}{\ctikzvalof{bipoles/spst/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0\pgf@circ@res@down}}
+ \pgfpatharcto{1.2\pgf@circ@res@right}{1.2\pgf@circ@res@right}{0}{0}{1}{\pgfpoint{.9\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+%% Opening SPST
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spst/depth}}{ospst}{\ctikzvalof{bipoles/spst/height}}{\ctikzvalof{bipoles/spst/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpatharcto{1.1\pgf@circ@res@right}{1.1\pgf@circ@res@right}{0}{0}{1}{\pgfpoint{.7\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@left}{1\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+%% Normal open Switch
+\pgfcircdeclarebipole{}{0}{nos}{\ctikzvalof{bipoles/nos/height}}{\ctikzvalof{bipoles/nos/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+}
+
+%% Normal closed Switch
+\pgfcircdeclarebipole{}{0}{ncs}{\ctikzvalof{bipoles/ncs/height}}{\ctikzvalof{bipoles/ncs/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Push Button
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pushbutton/height 2}}{pushbutton}{\ctikzvalof{bipoles/pushbutton/height}}{\ctikzvalof{bipoles/pushbutton/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+% % METERINGSHAPE
+\long\def\drawmeteringcircle{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+ %draw connections to circle
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ %draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw arrow
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%AMPEREMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ammeter/height}}{ammeter}{\ctikzvalof{bipoles/ammeter/height}}{\ctikzvalof{bipoles/ammeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ohmmeter/height}}{ohmmeter}{\ctikzvalof{bipoles/ohmmeter/height}}{\ctikzvalof{bipoles/ohmmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/voltmeter/height}}{voltmeter}{\ctikzvalof{bipoles/voltmeter/height}}{\ctikzvalof{bipoles/voltmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+%% Short circuit
+
+\pgfcircdeclarebipole{}{0}{short}{0}{0}{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/open/height}}{open}{\ctikzvalof{bipoles/open/height}}{\ctikzvalof{bipoles/open/width}}{
+
+}
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/generic/height}}{generic}{\ctikzvalof{bipoles/generic/height}}{\ctikzvalof{bipoles/generic/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fuse/height}}{fuse}{\ctikzvalof{bipoles/fuse/height}}{\ctikzvalof{bipoles/fuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fullgeneric/height}}{fullgeneric}{\ctikzvalof{bipoles/fullgeneric/height}}{\ctikzvalof{bipoles/fullgeneric/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ageneric/height}}{ageneric}{\ctikzvalof{bipoles/ageneric/height}}{\ctikzvalof{bipoles/ageneric/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/afuse/height}}{afuse}{\ctikzvalof{bipoles/afuse/height}}{\ctikzvalof{bipoles/afuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/memristor/height}}{memristor}{\ctikzvalof{bipoles/memristor/height}}{\ctikzvalof{bipoles/memristor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tgeneric/height}}{tgeneric}{\ctikzvalof{bipoles/tgeneric/height}}{\ctikzvalof{bipoles/tgeneric/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/photoresistor/height 2}}{photoresistor}{\ctikzvalof{bipoles/photoresistor/height}}{\ctikzvalof{bipoles/photoresistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Thermistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistor/height}}{thermistor}{\ctikzvalof{bipoles/thermistor/height}}{\ctikzvalof{bipoles/thermistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorptc/height 2}}{thermistorptc}{\ctikzvalof{bipoles/thermistorptc/height}}{\ctikzvalof{bipoles/thermistorptc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorntc/height 2}}{thermistorntc}{\ctikzvalof{bipoles/thermistorntc/height}}{\ctikzvalof{bipoles/thermistorntc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermocouple/height 2}}{thermocouple}{\ctikzvalof{bipoles/thermocouple/height}}{\ctikzvalof{bipoles/thermocouple/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% Varistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varistor/height}}{varistor}{\ctikzvalof{bipoles/varistor/height}}{\ctikzvalof{bipoles/varistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tfullgeneric/height}}{tfullgeneric}{\ctikzvalof{bipoles/tfullgeneric/height}}{\ctikzvalof{bipoles/tfullgeneric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcapacitor/height}}{vcapacitor}{\ctikzvalof{bipoles/vcapacitor/height}}{\ctikzvalof{bipoles/vcapacitor/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piezoelectric/height}}{piezoelectric}{\ctikzvalof{bipoles/piezoelectric/height}}{\ctikzvalof{bipoles/piezoelectric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ %% Outer markings
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %% Inner Box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left+4}{\pgf@circ@res@up-1}}{\pgfpoint{\pgf@circ@res@right-4}{\pgf@circ@res@down+1}}
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=diamond}}
+
+\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
+
+
+%% The output routine
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[diamondpole] {}
+ \else
+ \pgfextra{ \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[ocirc] {}
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[circ] {}
+ \else
+ \pgfextra{ \def\pgf@temp{rectjoinfill} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[rectjoinfill] {}
+ \else
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[diamondpole] {}
+ \else
+ \pgfextra{ \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[ocirc] {}
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[circ] {}
+ \else
+ \pgfextra{ \def\pgf@temp{rectjoinfill} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[rectjoinfill] {}
+ \else
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lamp/height}}{lamp}{\ctikzvalof{bipoles/lamp/height}}{\ctikzvalof{bipoles/lamp/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tline/height}
+ }{tline}{\ctikzvalof{bipoles/tline/height}
+ }{\ctikzvalof{bipoles/tline/width}
+ }
+ {
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0}}
+ {\pgfpoint{\pgf@circ@res@step}{0}}
+ {\pgfpoint{0}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/squid/height}}{squid}{\ctikzvalof{bipoles/squid/height}}{\ctikzvalof{bipoles/squid/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/barrier/height}}{barrier}{\ctikzvalof{bipoles/barrier/height}}{\ctikzvalof{bipoles/barrier/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%% Generic two port box
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/twoport/height}}{twoport}{\ctikzvalof{bipoles/twoport/height}}{\ctikzvalof{bipoles/twoport/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vco/width}}{vco}{\ctikzvalof{bipoles/twoport/width}}{\ctikzvalof{bipoles/vco/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+}
+
+%% bandpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bandpass/width}}{bandpass}{\ctikzvalof{bipoles/bandpass/width}}{\ctikzvalof{bipoles/bandpass/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% bandstop filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bandstop/width}}{bandstop}{\ctikzvalof{bipoles/bandstop/width}}{\ctikzvalof{bipoles/bandstop/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandstop/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt}% always draw solid line for inner symbol
+ \pgfsetarrows{-}%never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/highpass/width}}{highpass}{\ctikzvalof{bipoles/highpass/width}}{\ctikzvalof{bipoles/highpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lowpass/width}}{lowpass}{\ctikzvalof{bipoles/lowpass/width}}{\ctikzvalof{bipoles/lowpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/adc/width}}{adc}{\ctikzvalof{bipoles/adc/width}}{\ctikzvalof{bipoles/adc/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dac/width}}{dac}{\ctikzvalof{bipoles/dac/width}}{\ctikzvalof{bipoles/dac/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dsp/width}}{dsp}{\ctikzvalof{bipoles/dsp/width}}{\ctikzvalof{bipoles/dsp/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fft/width}}{fft}{\ctikzvalof{bipoles/fft/width}}{\ctikzvalof{bipoles/fft/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{amp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{vamp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+ % draw arrow
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piattenuator/width}}{piattenuator}{\ctikzvalof{bipoles/piattenuator/width}}{\ctikzvalof{bipoles/piattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vpiattenuator/width}}{vpiattenuator}{\ctikzvalof{bipoles/vpiattenuator/width}}{\ctikzvalof{bipoles/vpiattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tattenuator/width}}{tattenuator}{\ctikzvalof{bipoles/tattenuator/width}}{\ctikzvalof{bipoles/tattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vtattenuator/width}}{vtattenuator}{\ctikzvalof{bipoles/vtattenuator/width}}{\ctikzvalof{bipoles/vtattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{phaseshifter}{\ctikzvalof{bipoles/phaseshifter/width}}{\ctikzvalof{bipoles/phaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{vphaseshifter}{\ctikzvalof{bipoles/vphaseshifter/width}}{\ctikzvalof{bipoles/vphaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/detector/width}}{detector}{\ctikzvalof{bipoles/detector/width}}{\ctikzvalof{bipoles/detector/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{european gas filled surge arrester}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{\ctikzvalof{bipoles/european gas filled surge arrester/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{american gas filled surge arrester}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+ %\def\pgf@circ@temp{right}
+ %\ifx\tikz@res@label@pos\pgf@circ@temp
+ % \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ %\else
+% \def\pgf@circ@temp{below}
+% \ifx\tikz@res@label@pos\pgf@circ@temp
+% \pgf@circ@res@step=-1.2\pgf@circ@res@up
+% \else
+% \pgf@circ@res@step=1.2\pgf@circ@res@up
+% \fi
+% \fi
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfnode{circle}{center}{}{}{}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ %\pgftransformshift{\pgfpoint{.25\pgf@circ@res@left}{.45\pgf@circ@res@down}}
+ %\pgfnode{circ}{center}{}{}{}
+ %\pgftransformshift{}
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+% % MECHANICAL SYMBOLS
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spring/height}}{spring}{\ctikzvalof{bipoles/spring/height}}{\ctikzvalof{bipoles/spring/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/mass/box height}}{mass}{\ctikzvalof{bipoles/mass/height}}{\ctikzvalof{bipoles/mass/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}}
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/damper/height}}{damper}{\ctikzvalof{bipoles/damper/height}}{\ctikzvalof{bipoles/damper/width}}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+
+
+%%%---------- close: tex/pgfcircbipoles
+%%%%%%%%%%% Springe nach tex/pgfcirctripoles
+%%%---------- open: tex/pgfcirctripoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+
+
+\pgfdeclareshape{spdt}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+
+
+
+
+
+
+\long\def\pgfcircdeclarelogicport#1#2{
+ \pgfdeclareshape{american #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ #2
+
+ }
+ }
+}
+
+
+\pgfcircdeclarelogicport{and}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+ \pgfpathcurveto
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{nand}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{nor}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+
+
+\pgfcircdeclarelogicport{or}{
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{xor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{xnor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclareshape{american not port}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+\pgfdeclareshape{invschmitt}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+ }
+
+\pgfdeclareshape{schmitt}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 - is it a not
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \def\pgf@temp{1}
+ \def\pgf@circ@temp{#3}
+ \ifx\pgftemp\pgf@circ@temp % one input
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}
+ \else % two inputs
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \fi%
+ %
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+%
+%
+ }
+ }
+}
+
+
+
+\pgfcircdeclareeurologicport{and}{$\&$}{2}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{2}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{2}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{$\&$}{2}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{2}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{2}{not}
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northeast{% upper right
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@circ@Rlen
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=.7\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=0.1\pgf@x
+ }
+ \anchor{pathstart}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{pathend}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{base}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{nobase}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ \anchor{nogate}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@x
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ #2
+ \backgroundpath{
+ \pgftransformationadjustments
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \ifnum \pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction} > 0
+ \pgf@circuit@trans@ntypetrue
+ \else
+ \pgf@circuit@trans@ntypefalse
+ \fi
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ %
+ #3
+ % BODY DIODE
+ \ifpgf@circuit@fet@bodydiode
+ \drawbodydiode{#1}
+ \fi
+ %
+ }
+ }
+}
+
+\long\def\drawbodydiode#1{
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgftransformrotate{90}
+ \pgftransformscale{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode scale}}
+ \ifpgf@circuit@fulldiode
+ \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \else
+ \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \fi
+ \endpgfscope
+ %Draw upper connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope{}
+ %Draw lower connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+}
+
+\long\def\declarebpt#1{
+ \pgfcircdeclaretransistor{#1}{}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \ifpgf@circuit@bpt@drawphoto
+ \pgfscope
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \else
+ \ifpgf@circuit@bpt@drawbase
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \fi
+ }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+
+\long\def\declareigbt#1{
+\pgfcircdeclaretransistor{#1}{}
+{
+ %draw upper connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %draw thicker gate lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw lower connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ %draw gate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \fi
+ \pgfusepath{draw}
+}
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+
+\pgfcircdeclaretransistor{nmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+}
+
+
+\pgfcircdeclaretransistor{pmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+ \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \ifpgf@circuit@pmos@emptycircle
+ \pgfsetfillcolor{white}
+ \fi
+ \pgfusepath{draw,fill}
+}
+
+\long\def\drawfetcore#1{
+ \pgftransformationadjustments
+ %top connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \ifpgf@circuit@trans@depletiontype
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \else
+
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \fi
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %Bulk connection line
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ %bottom connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ %draw thick gate line
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \ifpgf@circuit@trans@ntype
+ \else
+ \pgftransformrotate{180}
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+ \fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+ \anchor{bulk}{\left\pgf@x=0pt}
+ \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt
+ #2
+ }
+ {#3}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nfet}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pfet}
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfete}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfetebulk}
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetebulk/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{nigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfete}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfetebulk}
+}
+
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{pigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ % GATE
+ %\pgfscope
+ %\pgfpathmoveto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ %\pgfpathlineto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ %\pgfusepath{draw}
+ %\endpgfscope
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{fullthyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{emptythyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{emptytriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{fulltriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \northeast
+ \pgf@y=.8\pgf@y
+ }
+}{\ctikzvalof{tripoles/toggleswitch/height 2}}{toggleswitch}{\ctikzvalof{tripoles/toggleswitch/height}}{\ctikzvalof{tripoles/toggleswitch/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+
+
+
+
+
+
+
+
+
+\pgfdeclareshape{op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%op amp shape as in european standard en 60617
+\pgfdeclareshape{en amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {
+ \left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{up}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{down}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font} $-$}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgftext[base,y=-3ex,at=\pgfpoint{.3\pgf@circ@res@left}{\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font2} $\triangleright$}
+ \pgftext[base,y=-3ex,at=\pgfpoint{.3\pgf@circ@res@right}{\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font2} $\infty$}
+ }
+}
+
+%%Transkonduktanzverstärker
+\pgfdeclareshape{gm amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{0pt}} %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %Umrandung:
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}} %geändert startpunkt neu am ausgangsstrich
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}%vom Ausgang nach oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}%ecke links unten nach rechts unten
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+ }
+ }
+
+
+
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/potentiometer/height 2}}{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}{\ctikzvalof{bipoles/potentiometer/width}}{
+\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+\pgftransformationadjustments
+\pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+\divide \pgf@circ@res@step by 12
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+\pgf@circ@res@other = \pgf@circ@res@left
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+\pgfsetbeveljoin
+\pgfusepath{draw}
+
+\pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+\endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/generic potentiometer/height 2}}{genericpotentiometer}{\ctikzvalof{bipoles/generic potentiometer/height}}{\ctikzvalof{bipoles/generic potentiometer/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{oscillator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{text}{
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@Rlen{}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+ % draw outer box
+ \ifpgf@circuit@boxed{}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{circulator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed{}
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{pgf@generic}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{pgf@resistor}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+% electromechanical device (motor/generator)
+\pgfdeclareshape{elmech}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ % draw outer box
+ % \ifpgf@circuit@boxed
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ % \fi
+ % draw outer circle
+ %\ifpgf@circuit@boxed
+ % \pgf@circ@res@step=.7\pgf@circ@res@step
+ % \pgfsetdash{}{0pt} % draw solid circle if boxed
+ %\else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %\fi
+ \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{magnetron}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{anode}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{cathode1}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(105)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(105)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{cathode2}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(75)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(75)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@Rlen
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfmathsetlength{\pgf@circ@res@other}{sin(15)*\pgf@circ@res@up}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ % draw outer box
+ % \ifpgf@circuit@boxed
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ % \fi
+ % draw outer circle
+ %\ifpgf@circuit@boxed
+ % \pgf@circ@res@step=.7\pgf@circ@res@step
+ % \pgfsetdash{}{0pt} % draw solid circle if boxed
+ %\else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %\fi
+ %create outer circle
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@right}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw}
+ %create chambers
+ \foreach \angle in {45,135,225,315}{
+ \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf@circ@res@right}}
+ \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf@circ@res@right}}
+ }
+ \pgfsetroundcap
+ \pgfusepath{draw}
+ \pgfscope
+ %draw connection from outside
+ %anode
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ %cathodes
+ \pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ %create cathode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.15\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %create anode
+ \pgfpathmoveto{\pgfpoint{0.3\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%%%---------- close: tex/pgfcirctripoles
+%%%%%%%%%%% Springe nach tex/pgfcircquadpoles
+%%%---------- open: tex/pgfcircquadpoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ #2
+
+ }
+ }
+}
+
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \def\stretto{.4}
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+ % contrib Kristofer M. Monisit
+
+ \pgfdeclareshape{fd op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out +}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfsetrectcap
+ % Draw them all!
+ \pgfusepath{draw}
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+
+\pgfcircdeclarequadpole{transformer}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \def\stretto{.4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% four-port
+% defines a general outer box for four-ports
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarefourport#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ % draw inner text
+ \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ }
+ }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+
+}
+%%%---------- close: tex/pgfcircquadpoles
+
+%%%%%%%%%%% Springe nach tex/pgfcirclabel
+%%%---------- open: tex/pgfcirclabel.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{annotation/.style = { a=#1 } }
+\ctikzset{a/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1}
+ \ctikzsetvalof{bipole/annotation/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }}
+
+\ctikzset{annotation above/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{a^/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{annotation below/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+\ctikzset{a_/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+
+
+
+\def\pgf@circ@drawlabels#1{
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/position}}
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is inverted, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is mirrored, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ }
+ %Firstly, place a coodinate directly at the edge of the shape
+ (\ctikzvalof{bipole/name}.\pgf@circ@temp) coordinate (labelcoor)
+ %now decide, which labels should be drawn
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabels{#1}
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabels{#1}
+ \else% smart
+ \pgf@circ@drawsmartlabels{#1}
+ \fi
+ \fi
+}
+
+
+\def\pgf@circ@drawsmartlabels#1{
+ \pgfextra{
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70
+ \pgf@circ@drawrotlabels{#1}
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+}
+
+
+\def\pgf@circ@drawrotlabels#1{
+ \pgfextra{
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ %we need some more space for placement below, due to mid-anchor
+ \def\pgf@circ@labposdistance{1.5ex}
+ \else
+ \def\pgf@circ@labposdistance{2ex}
+ \fi
+ %Calculate rotation of the label from direction and strip decimals
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ % rotate the label at second or third quadrant:
+ \ifnum \pgfcirclabrot > 90 \ifnum \pgfcirclabrot < 270
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %invert the space relationships due to rotatet strings
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ \def\pgf@circ@labposdistance{2ex}
+ \else
+ \def\pgf@circ@labposdistance{1.5ex}
+ \fi
+ \fi\fi
+ \pgfmathparse{\ctikzvalof{bipole/#1/position}>0?\pgf@circ@direction+90:\pgf@circ@direction-90}
+ \edef\pgf@circ@labposangle{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ (labelcoor)++(\pgf@circ@labposangle:\pgf@circ@labposdistance) coordinate(labelcoor)
+ node[anchor=mid,rotate=\pgfcirclabrot](\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@drawreglabels#1{
+
+ %Now calculate all shape positions
+ %Use mid-anchor at x-axis and base-anchor at y-axis, respectively.
+ %All points between will be addressed by angled-anchors:
+ \pgfextra{
+ \pgfmathadd{\pgf@circ@labanc}{90}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathparse{mod(\pgf@circ@temp,180)>135?mod(\pgf@circ@temp,180)-180:mod(\pgf@circ@temp,180)}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ %Values between -5 and 5 are at pos /neg x-axis, values around 90 are at both y-axis
+ \ifnum \pgfcircmathresult > 84 \ifnum \pgfcircmathresult< 96
+ \pgfextra{\edef\pgf@circ@labpos{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}}
+ \ifnum \pgf@circ@labpos > 180
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanc{mid west}}
+ \else
+ \pgfextra{\def\pgf@circ@labanc{mid east}}
+ \fi
+ \else
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanc{mid east}}
+ \else
+ \pgfextra{\def\pgf@circ@labanc{mid west}}
+ \fi
+ \fi
+ \fi\fi
+ \ifnum \pgfcircmathresult <6
+ \ifnum \ctikzvalof{bipole/#1/position} < 0
+ %we need some more space for placement below, due to mid-anchor
+ (labelcoor)++(-\pgf@circ@labanc:2ex) coordinate(labelcoor)
+ \else
+ (labelcoor)++(-\pgf@circ@labanc:1.5ex) coordinate(labelcoor)
+ \fi
+ \pgfextra{\def\pgf@circ@labanc{mid}}
+ \fi
+ (labelcoor) node[anchor=\pgf@circ@labanc](\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@finallabels#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$%
+ \fi%
+}
+
+\ctikzset{text/.style = { t=#1 } }
+\ctikzset{t/.code = {
+ \ctikzsetvalof{bipoles/twoport/text}{#1}
+}}
+%%%---------- close: tex/pgfcirclabel
+%%%%%%%%%%% Springe nach tex/pgfcircvoltage
+%%%---------- open: tex/pgfcircvoltage.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi
+ \fi
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@bipole@current@backward
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi\fi\fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+
+
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {
+ \pgfkeysifdefined{/tikz/circuitikz/bipoles/voltage/straight label distance}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {%calculate default value from part height
+ \edef\partheight{0.5*\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/height}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen+0.2\pgf@circ@Rlen)}
+ }
+ }
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distacefromnode{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}} }
+ { \edef\distacefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ }
+ % %\pgf@circ@Rlen/16 is equal to the length of the currarrow
+ coordinate (pgfcirc@midtmp) at ($(\tikztostart) ! \pgf@circ@Rlen/16 ! (anchorstartnode)$) %absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorstartnode)$)
+
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@midtmp) ! -\distfromline ! \pgf@circ@voltage@angle:(anchorstartnode)$)
+ coordinate (pgfcirc@midtmp) at ($(\tikztotarget) ! \pgf@circ@Rlen/16 ! (anchorendnode)$)%absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorendnode)$)
+
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@midtmp) ! \distfromline ! \pgf@circ@voltage@angle : (anchorendnode)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@straight
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) --(pgfcirc@Vfrom) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \else
+ (pgfcirc@Vfrom) --(pgfcirc@Vto) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \fi
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+\def\pgf@circ@drawvoltagegenerator{
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vfrom) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vto) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vfrom) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vto) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vto)
+ \fi
+ \else% american voltage
+ \ifpgf@circuit@bipole@voltageoutsideofsymbol
+ % if it is a battery, must put + and -
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node {$-$} (pgfcirc@Vto) node {$+$}
+ \else
+ (pgfcirc@Vfrom) node {$+$} (pgfcirc@Vto) node {$-$}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine
+\def\pgf@circ@drawvoltage{% node name
+%\pgf@circ@direction
+ \pgfextra{
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ }%end pgfextra
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+
+ % (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where) %Zeile sinnlos!?
+ \ifpgf@circuit@bipole@voltage@straight
+ coordinate (Vlab) at ($(pgfcirc@Vto)!0.5!(pgfcirc@Vfrom) $)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt]
+ at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \else
+ coordinate (Vlab) at ($(\ctikzvalof{bipole/name}.center) !
+ \ifpgf@circuit@europeanvoltage
+ \eudist
+ \else
+ \ctikzvalof{voltage/american label distance}
+ \fi !
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)$)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt] at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \fi
+}%end drawvoltages
+%%%---------- close: tex/pgfcircvoltage
+%%%%%%%%%%% Springe nach tex/pgfcirccurrent
+%%%---------- open: tex/pgfcirccurrent.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+%reverse current direction for voltage sources
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@isvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below }
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \fi\fi\fi
+}
+}
+
+
+\ifpgf@circ@oldvoltagedirection
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+%% Output routine
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw current at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@current@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@current@backward
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \fi
+ coordinate[currarrow,pos=\ctikzvalof{current/distance},rotate=\pgf@circ@ffffff](Iarrow)
+ (Iarrow.\pgf@circ@bipole@current@label@where) node[anchor=\pgf@circ@dir]{\pgf@circ@finallabels{current/label}}
+}
+
+%%%---------- close: tex/pgfcirccurrent
+%%%%%%%%%%% Springe nach tex/pgfcircflow
+%%%---------- open: tex/pgfcircflow.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% flow handling
+
+%% Options
+\ctikzset{f^>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/curflowrent/y position = above
+ }
+}
+
+\ctikzset{f_>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f>^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f>_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f^</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f_</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f<^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f<_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f</.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = backward} }
+\ctikzset{f_/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = below } }
+\ctikzset{f>/.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = forward } }
+\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = above } }
+
+\ctikzset{f/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/flow/label/name=#1}
+ \ctikzsetvalof{bipole/flow/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}
+}
+
+%% Output routine
+\def\pgf@circ@drawflow{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@bipole@flow@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@flow@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw flow at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@flow@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \pgfextra{
+ \ifpgf@circuit@bipole@flow@backward
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \else
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \fi
+ }
+ coordinate[flowarrow,pos=\ctikzvalof{flow/distance},rotate=\pgf@circ@ffffff,yshift=\flow@offset](Farrowpos)
+ (Farrowpos.\pgf@circ@bipole@flow@label@where) node[anchor=\pgf@circ@dir]{ \pgf@circ@finallabels{flow/label}}
+}
+
+%%%---------- close: tex/pgfcircflow
+
+\ExecuteOptions{nofetbodydiode,nofetsolderdot,nooldvoltagedirection,europeancurrents,europeanvoltages,americanports,americanresistors,cuteinductors,europeangfsurgearrester,nosiunitx,noarrowmos,smartlabels,nocompatibility}
+
+\ProcessOptions\relax
+
+%%%%%%%%%%% Springe nach tex/pgfcircpath
+%%%---------- open: tex/pgfcircpath.tex
+
+\def\pgf@circ@direction{0.0}
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Invert node along path
+\ctikzset{inverted/.is choice}
+\ctikzset{invert value/.initial=1}
+\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}}
+\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}}
+\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
+\newif\ifpgf@circuit@bipole@inverted
+\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted}
+
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90,
+ bipole/inverted=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+%% Helper function for path-function to ensure using anchors between nodes
+\def\set@explicit@center@anchor#1{
+ \pgfutil@ifundefined{pgf@sh@ns@#1}
+ {
+ %This coordinate is no node(but a relative position or a coordinate), no further handling needed
+ }{
+ \pgfutil@in@.{#1}
+ \ifpgfutil@in@
+ % Anchor is used, do nothing!
+ \else%
+ \let\tikz@moveto@waiting=\relax
+ \pgfpathmoveto{\tikz@last@position}%force movement, because tikz@moveto@waiting
+ \edef#1{#1.center}%ensure using center anchor
+ \fi
+ }
+}
+
+
+%% Generic bipole path
+\def\pgf@circ@bipole@path#1#2{
+
+\pgfextra{
+ \set@explicit@center@anchor{\tikztostart}
+ \set@explicit@center@anchor{\tikztotarget}
+ \pgfsyssoftpath@getcurrentpath{\myp@th}%% save current path to extend after calculation of correct start/end coordinates
+ \ctikzset{bipole/kind = #1}
+ \edef\pgf@temp{\ctikzvalof{bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #2\pgf@circ@rand} % create it
+ \fi
+ }
+
+ (\tikztostart) coordinate (\ctikzvalof{bipole/name}start)%necessary to get correct coordinates in the case of relativ start/end or constructions like ((node1)-|(node2))
+ (\tikztotarget) coordinate (\ctikzvalof{bipole/name}end)
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \edef\pgf@circ@direction{\pgfmathresult}%Calculate direction(angle) of path
+ \pgfsyssoftpath@setcurrentpath{\myp@th}
+ }
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ --($(\ctikzvalof{bipole/name}start) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}end)$) %ugly workaround to get correct linejoins(node breaks path?)
+ \fi
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)%%positio of middle node
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifpgf@circuit@bipole@inverted
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.right)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.left)
+ \fi
+ \else
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.left)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.right)
+ \fi
+ \fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ \ifpgf@circuit@bipole@strokedsymbol%draw line thrue symbol(e.g. diodes)
+ \ifcsname pgf@anchor@#1shape@strokepathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) -- (\ctikzvalof{bipole/name}.strokepathstart)
+ (\ctikzvalof{bipole/name}.strokepathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (anchorstartnode)
+ (anchorendnode) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \fi
+
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi
+ \pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ \pgf@circ@ifkeyempty{bipole/flow/label/name}\else\pgf@circ@drawflow\fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ (\ctikzvalof{bipole/name}end)%Move to end of path
+ \else
+ ($(\ctikzvalof{bipole/name}end) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}start)$) -- (\ctikzvalof{bipole/name}end)%ugly workaround to get correct linejoins(node breaks path?)
+ %tikztostart and tikztotarget could not be used, because it would break if target coordinate is something like (node1-|node2)
+
+ \fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ \tikztonodes%draw pending nodes an path
+}
+
+
+%% Path definitions
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@batteryone@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@batterytwo@path#1{\pgf@circ@bipole@path{battery2}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
+\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
+\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@nos@path#1{\pgf@circ@bipole@path{nos}{#1}}
+\def\pgf@circ@ncs@path#1{\pgf@circ@bipole@path{ncs}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
+\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
+\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
+\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
+\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@bandstop@path#1{\pgf@circ@bipole@path{bandstop}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+%%Mechanical
+\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
+\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
+\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}
+
+
+
+
+%% Styles
+
+\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
+\def\compattikzset#1{\tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batteryone@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batterytwo@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source = #1, \circuitikzbasekey/bipole/is current=true}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source = #1, \circuitikzbasekey/bipole/is current=true}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\compattikzset{bandstop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandstop@path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+% % % % % %
+% % Beginn of Diodes
+% % % % % %
+
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
+\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
+\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
+%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{normal closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{normal open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, l=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path, i=#1}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path, v=#1}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+%\ifpgf@circuit@compat\else\compattikzset{R/.style= {resistor = #1}}\fi
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+ \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} }
+ \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} }
+ \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+%current sources
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+ \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+ \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+ \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+\def\inheritlogicport#1#2{
+ \pgfdeclareshape{#2 port}{
+ \inheritsavedanchors[from=#1 #2 port]
+ \inheritbackgroundpath[from=#1 #2 port]
+ \inheritanchor[from=#1 #2 port]{in}
+ \inheritanchor[from=#1 #2 port]{in 1}
+ \inheritanchor[from=#1 #2 port]{in 2}
+ \inheritanchor[from=#1 #2 port]{out}
+ \inheritanchor[from=#1 #2 port]{center}
+ \inheritanchor[from=#1 #2 port]{left}
+ }
+}
+
+\ifpgf@circuit@europeanlogicport
+ \inheritlogicport{european}{and}
+ \inheritlogicport{european}{or}
+ \inheritlogicport{european}{xor}
+ \inheritlogicport{european}{not}
+ \inheritlogicport{european}{nand}
+ \inheritlogicport{european}{nor}
+ \inheritlogicport{european}{xnor}
+\else
+ \inheritlogicport{american}{and}
+ \inheritlogicport{american}{or}
+ \inheritlogicport{american}{xor}
+ \inheritlogicport{american}{not}
+ \inheritlogicport{american}{nand}
+ \inheritlogicport{american}{nor}
+ \inheritlogicport{american}{xnor}
+\fi
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@inverted
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{elmech}
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{nigfetebulk}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{pigfetebulk}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+\pgf@circ@definetranspath{Lpigbt}
+\pgf@circ@definetranspath{Lnigbt}
+%%%---------- close: tex/pgfcircpath
+
+\ifpgf@circ@siunitx
+ \RequirePackage{xstring}[2009/03/13]
+ %\expandafter\let\csname angstrom\endcsname\relax
+ \RequirePackage{siunitx}
+\fi
+
+
+
+\newenvironment{circuitikz}{\begin{tikzpicture}}{\end{tikzpicture}}
+%override (unused) circuitikz environment for compability to externalization)
+\let\circuitikz\tikzpicture
+\let\endcircuitikz\endtikzpicture
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.9.3.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.9.3.sty
new file mode 100644
index 0000000000..bf8e23a122
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz-0.9.3.sty
@@ -0,0 +1,16743 @@
+% Copyright 2007-2019 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+\NeedsTeXFormat{LaTeX2e}
+
+\def\pgfcircversion{0.9.3}
+\def\pgfcircversiondate{2019/07/13}
+
+\ProvidesPackage{circuitikz-0.9.3}
+[\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion]
+
+%% Version 3.0 of pgf/TikZ is required
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+%
+% "arrows" library is deprecated, and behave badly with
+% arrows on short paths. Change to the new arrows.meta
+% In pfgcirc.define, we will add the old definition of
+% latex' which we have lost in the transition
+%
+\usetikzlibrary{arrows.meta, bending}
+
+% The options are listed in the manual in this order
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{straightvoltages}{
+ \pgf@circuit@bipole@voltage@straighttrue
+}
+
+\DeclareOption{americanvoltage}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrent}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrent}{
+ \ctikzset{current = american}
+}
+
+
+
+\DeclareOption{americanresistor}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistor}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductor}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductor}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductor}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanport}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{european}{
+ \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european}
+ \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester choice = european}
+}
+
+\DeclareOption{american}{
+ \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester choice = american}
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{fulldiodes}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiodes}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltages}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrents}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrents}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{americanresistors}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistors}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductors}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductors}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductors}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanports}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanports}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{americangfsurgearrester}{
+ \ctikzset{gas filled surge arrester choice = american}
+}
+
+\DeclareOption{europeangfsurgearrester}{
+ \ctikzset{gas filled surge arrester choice = european}
+}
+
+\DeclareOption{siunitx}{
+ \pgf@circ@siunitxtrue
+}
+
+\DeclareOption{nosiunitx}{
+ \pgf@circ@siunitxfalse
+}
+
+\DeclareOption{fulldiode}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiode}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{strokediode}{
+ \ctikzset{diode = stroke}
+}
+
+\DeclareOption{arrowmos}{
+ \pgf@circuit@mos@arrowstrue
+}
+
+\DeclareOption{noarrowmos}{
+ \pgf@circuit@mos@arrowsfalse
+}
+
+\DeclareOption{fetbodydiode}{
+ \pgf@circuit@fet@bodydiodetrue
+}
+
+\DeclareOption{nofetbodydiode}{
+ \pgf@circuit@fet@bodydiodefalse
+}
+
+\DeclareOption{fetsolderdot}{
+ \pgf@circuit@fet@solderdottrue
+}
+
+\DeclareOption{nofetsolderdot}{
+ \pgf@circuit@fet@solderdotfalse
+}
+
+\DeclareOption{emptypmoscircle}{
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+
+\DeclareOption{lazymos}{
+ \ctikzset{tripoles/nmos/width=.5}
+ \ctikzset{tripoles/nmos/gate height=.35}
+ \ctikzset{tripoles/nmos/base height=.35}
+ \ctikzset{tripoles/nmos/height/.initial=1.2}
+ \ctikzset{tripoles/nmos/base width=.5}
+ \ctikzset{tripoles/nmos/gate width=.65}
+
+ \ctikzset{tripoles/pmos/width=.5}
+ \ctikzset{tripoles/pmos/gate height=.35}
+ \ctikzset{tripoles/pmos/base height=.35}
+ \ctikzset{tripoles/pmos/height/.initial=1.2}
+ \ctikzset{tripoles/pmos/base width=.5}
+ \ctikzset{tripoles/pmos/gate width=.65}
+
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+\DeclareOption{straightlabels}{
+ \ctikzset{label/align = straight}
+}
+
+\DeclareOption{rotatelabels}{
+ \ctikzset{label/align = rotate}
+}
+
+\DeclareOption{smartlabels}{
+ \ctikzset{label/align = smart}
+}
+
+\DeclareOption{compatibility}{
+ \pgf@circuit@compattrue
+}
+
+\DeclareOption{oldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectiontrue
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriesfalse
+}
+\DeclareOption{nooldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectionfalse
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriesfalse
+}
+
+\DeclareOption{RPvoltages}{
+ \pgf@circ@oldvoltagedirectiontrue
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriestrue
+}
+\DeclareOption{EFvoltages}{
+ \pgf@circ@oldvoltagedirectionfalse
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriestrue
+}
+
+
+\DeclareOption{betterproportions}{
+ \ctikzset{monopoles/ground/width/.initial=.15}
+
+ \ctikzset{bipoles/resistor/height/.initial=.23}
+ \ctikzset{bipoles/resistor/width/.initial=.6}
+ \ctikzset{bipoles/capacitor/height/.initial=.4}
+ \ctikzset{bipoles/capacitor/width/.initial=.1}
+ \ctikzset{bipoles/potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height 2/.initial=.23}
+ \ctikzset{bipoles/photoresistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistor/main/.initial=.7}
+ \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7
+ \ctikzset{bipoles/thermistorptc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorptc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/main/.initial=.7}
+ \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/width/.initial=.6}
+ \ctikzset{bipoles/vresistor/height/.initial=.45}
+ \ctikzset{bipoles/vresistor/width/.initial=.6}
+ \ctikzset{bipoles/generic/height/.initial=.23}
+ \ctikzset{bipoles/generic/width/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/generic potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/ageneric/height/.initial=.23}
+ \ctikzset{bipoles/ageneric/width/.initial=.6}
+ \ctikzset{bipoles/memristor/height/.initial=.23}
+ \ctikzset{bipoles/memristor/wave height/.initial=.375}
+ \ctikzset{bipoles/memristor/width/.initial=.60}
+ \ctikzset{bipoles/tgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tgeneric/width/.initial=.6}
+ \ctikzset{bipoles/tfullgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tfullgeneric/width/.initial=.60}
+ \ctikzset{bipoles/fullgeneric/height/.initial=.23}
+ \ctikzset{bipoles/fullgeneric/width/.initial=.6}
+ \ctikzset{bipoles/diode/height/.initial=.3}
+ \ctikzset{bipoles/diode/width/.initial=.25}
+ \ctikzset{bipoles/bidirectionaldiode/height/.initial=.66}
+ \ctikzset{bipoles/bidirectionaldiode/width/.initial=.6}
+ \ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
+ \ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/thyristor/height/.initial=.66}
+ \ctikzset{tripoles/thyristor/height 2/.initial=.3}
+ \ctikzset{tripoles/thyristor/width/.initial=.6}
+ \ctikzset{tripoles/thyristor/diode height/.initial=.3}
+ \ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+ \ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/triac/height/.initial=.66}
+ \ctikzset{tripoles/triac/width/.initial=.6}
+ \ctikzset{tripoles/triac/diode width left/.initial=.3}
+ \ctikzset{tripoles/triac/diode width right/.initial=.3}
+}
+
+% This is a nice hack that prints all the shapes declared
+% by the package. Very useful for coverage testing and debugging.
+%
+% \let\origpgfdeclareshape=\pgfdeclareshape
+% \def\pgfdeclareshape#1{%
+% \typeout{SHAPE:\space"#1"}%
+% \origpgfdeclareshape{#1}
+% }
+
+
+%%%%%%%%%
+%%%%%%%%%%% Springe nach tex/pgfcirc.defines
+%%%---------- open: tex/pgfcirc.defines.tex
+%% Counters
+
+\newcount\pgf@circ@count@a
+\newcount\pgf@circ@count@b
+\newcount\pgf@circ@count@c
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinates
+\newdimen\pgf@circ@res@up
+\newdimen\pgf@circ@res@down
+\newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left
+\newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+\newdimen\pgf@circ@res@temp
+% inital thickness
+\newdimen \pgfstartlinewidth
+
+% arrow tips, ported over old arrows library (deprecated)
+% see https://tex.stackexchange.com/questions/234084/latex-arrow-tip-with-arrows-meta-library
+% this was the original definition of latex' tips, renamed to avoid clashes
+%
+\pgfarrowsdeclare{latexslim}{latexslim}
+{
+ \pgfutil@tempdima=0.28pt%
+ \advance\pgfutil@tempdima by.3\pgflinewidth%
+ \pgfarrowsleftextend{+-4\pgfutil@tempdima}
+ \pgfarrowsrightextend{+6\pgfutil@tempdima}
+}
+{
+ \pgfutil@tempdima=0.28pt%
+ \advance\pgfutil@tempdima by.3\pgflinewidth%
+ \pgfpathmoveto{\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{3.5\pgfutil@tempdima}{.5\pgfutil@tempdima}}
+ {\pgfqpoint{-1\pgfutil@tempdima}{1.5\pgfutil@tempdima}}
+ {\pgfqpoint{-4\pgfutil@tempdima}{3.75\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{-1.5\pgfutil@tempdima}{1\pgfutil@tempdima}}
+ {\pgfqpoint{-1.5\pgfutil@tempdima}{-1\pgfutil@tempdima}}
+ {\pgfqpoint{-4\pgfutil@tempdima}{-3.75\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{-1\pgfutil@tempdima}{-1.5\pgfutil@tempdima}}
+ {\pgfqpoint{3.5\pgfutil@tempdima}{-.5\pgfutil@tempdima}}
+ {\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}}
+ \pgfpathclose
+ \pgfusepathqfill
+}
+
+\pgfarrowsdeclarereversed{latexslim reversed}{latexslim reversed}{latexslim}{latexslim}
+
+%% Macro to fill or draw
+
+\def\pgf@circ@draworfill{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{draw, fill}
+ \fi
+}
+
+\def\pgf@circ@draworfillandclip{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfusepath{draw, clip}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{draw, clip, fill}
+ \fi
+}
+
+\def\pgf@circ@maybefill{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfusepath{discard}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{fill}
+ \fi
+}
+%% Keys
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circuit@compat
+\newif\ifpgf@circ@oldvoltagedirection % default false
+\newif\ifpgf@circ@explicitvdir
+\newif\ifpgf@circ@fixbatteries
+
+\ctikzset{voltage dir/.is choice}
+\ctikzset{voltage dir/old/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/noold/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/RP/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriestrue}}
+\ctikzset{voltage dir/EF/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriestrue}}
+\tikzset{voltage dir/.style={circuitikz/voltage dir=#1}}
+
+
+% Option ">" for twoports
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf@circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf@circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}}
+
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+
+\ctikzset{current arrow scale/.initial=16}
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{tripoles/thickness/.initial=2}
+\ctikzset{quadpoles/thickness/.initial=2}
+\ctikzset{nodes width/.initial=.04}
+
+% Base len for all circuitikz
+\newdimen\pgf@circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1}}
+\pgf@circ@Rlen = 1.4cm
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/ground/connectionthickness/.initial=1}
+\ctikzset{monopoles/ground/thickness/.initial=2}
+\ctikzset{monopoles/rground/thickness/.initial=2}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/vcc/arrow/.initial=legacy}
+\ctikzset{monopoles/vee/arrow/.initial=legacy}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/label/xanchor/.initial=1}
+\ctikzset{monopoles/bareantenna/label/yanchor/.initial=0.5}
+\ctikzset{monopoles/waves/width/.initial=0.5}
+% microstrips
+\ctikzset{bipoles/mstline/height/.initial=0.3}
+\ctikzset{bipoles/mstline/width/.initial=1.2}
+\pgfkeys{/tikz/mstlinelen/.add code={}{\ctikzset{bipoles/mstline/width=#1}}}
+\ctikzset{monopoles/msport/width/.initial=.5}
+\ctikzset{monopoles/msrstub/height/.initial=1.0}
+\ctikzset{monopoles/msrstub/width/.initial=0.6}
+
+% microphone and loudspeaker
+\ctikzset{bipoles/loudspeaker/height/.initial=.8}
+\ctikzset{bipoles/loudspeaker/depth/.initial=.3}
+\ctikzset{bipoles/loudspeaker/width/.initial=.8}
+\ctikzset{bipoles/mic/height/.initial=1.2}
+\ctikzset{bipoles/mic/depth/.initial=.0}
+\ctikzset{bipoles/mic/width/.initial=.8}
+
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+%% Cute choke settings
+\ctikzset{bipoles/cutechoke/height/.initial=.3}
+\ctikzset{bipoles/cutechoke/lower coil height/.initial=.15}
+\ctikzset{bipoles/cutechoke/width/.initial=.6}
+\ctikzset{bipoles/cutechoke/coils/.initial=5}
+\ctikzset{bipoles/cutechoke/coil aspect/.initial=.5}%percentage of choke width, which is covered by lower coil
+\ctikzset{bipoles/cutechoke/cstep/.initial=.3}
+\ctikzset{bipoles/cutechoke/cdist/.initial=1.3}
+\ctikzset{bipoles/cutechoke/cthick/.initial=1}
+\newif\ifpgf@circuit@bipole@twolines
+\pgf@circuit@bipole@twolinesfalse
+%
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/angle/.initial=80}
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial= \fontsize{6}{0}\selectfont\boldmath}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/battery2/height/.initial=.6}
+\ctikzset{bipoles/battery2/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/bidirectionaldiode/height/.initial=1.1}
+\ctikzset{bipoles/bidirectionaldiode/width/.initial=1}
+\ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
+\ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/spst/height/.initial=.35}
+\ctikzset{bipoles/spst/width/.initial=.35}
+\ctikzset{bipoles/spst/depth/.initial=.2}
+\ctikzset{bipoles/nos/height/.initial=.3}
+\ctikzset{bipoles/nos/width/.initial=.35}
+\ctikzset{bipoles/nos/depth/.initial=.2}
+\ctikzset{bipoles/ncs/height/.initial=.35}
+\ctikzset{bipoles/ncs/width/.initial=.35}
+\ctikzset{bipoles/ncs/depth/.initial=.2}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/short/height/.initial=0} %dummy height for voltage positioning
+\ctikzset{bipoles/short/width/.initial=0} %dummy width for voltage positioning
+%\ctikzset{bipoles/short/voltage/straight label distance/.initial=.2}
+%\ctikzset{bipoles/short/voltage/distance from node/.initial=.5}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/smeter/height/.initial=.60}
+\ctikzset{bipoles/smeter/width/.initial=.60}
+\ctikzset{bipoles/qmeter/depth/.initial=.40}
+\ctikzset{bipoles/qmeter/height/.initial=.80}
+\ctikzset{bipoles/qmeter/width/.initial=.60}
+\ctikzset{bipoles/iloop/width/.initial=.40}
+\ctikzset{bipoles/iloop/height/.initial=.60}
+\ctikzset{bipoles/oscope/height/.initial=.60}
+\ctikzset{bipoles/oscope/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/bulb/height/.initial=.8}
+\ctikzset{bipoles/bulb/width/.initial=.8}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.2}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/bandstop/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+% resistive sensor american style
+\ctikzset{bipoles/resistivesens/height/.initial=.6}
+\ctikzset{bipoles/resistivesens/width/.initial=.8}
+
+% crossing wires
+\ctikzset{bipoles/crossing/size/.initial=.2}
+
+\newif\ifpgf@circuit@trans@depletiontype
+\pgf@circuit@trans@depletiontypefalse
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+\pgfkeys{/tikz/arrowmos/.add code={}{\pgf@circuit@mos@arrowstrue}}
+\pgfkeys{/tikz/noarrowmos/.add code={}{\pgf@circuit@mos@arrowsfalse}}
+
+% Option solderdot for fet
+\newif\ifpgf@circuit@fet@solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf@circuit@fet@bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf@circuit@bpt@drawgate
+\pgf@circuit@bpt@drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+
+% Option draw bpt without base connection
+\newif\ifpgf@circuit@bpt@drawbase
+\pgf@circuit@bpt@drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf@circuit@bpt@drawphoto
+\pgf@circuit@bpt@drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf@circuit@pmos@emptycircle
+\pgf@circuit@pmos@emptycirclefalse
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+% Option draw pmos with no circle
+\newif\ifpgf@circuit@pmos@nocircle
+\pgf@circuit@pmos@nocirclefalse
+\pgfkeys{/tikz/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}}
+\ctikzset{tripoles/pmos style/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}}
+% back to normal
+\pgfkeys{/tikz/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}}
+\ctikzset{tripoles/pmos style/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}}
+
+
+\newif\ifpgf@circuit@trans@ntype
+\pgf@circuit@trans@ntypetrue %default true
+%\newif\ifpgf@circuit@trans@ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/arrow pos/.initial=.6}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/arrow pos/.initial=.4}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/hemt/width/.initial=.7}
+\ctikzset{tripoles/hemt/gate height/.initial=.35}
+\ctikzset{tripoles/hemt/base height/.initial=.5}
+\ctikzset{tripoles/hemt/conn height/.initial=0}
+\ctikzset{tripoles/hemt/height/.initial=1.1}
+\ctikzset{tripoles/hemt/base width/.initial=.5}
+\ctikzset{tripoles/hemt/gate width/.initial=.62}
+\ctikzset{tripoles/hemt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/hemt/curr direction/.initial=1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/arrow pos/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/arrow pos/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue
+ \tikzset{and port/.style={shape=european and port}}
+ \tikzset{or port/.style={shape=european or port}}
+ \tikzset{xor port/.style={shape=european xor port}}
+ \tikzset{not port/.style={shape=european not port}}
+ \tikzset{nand port/.style={shape=european nand port}}
+ \tikzset{nor port/.style={shape=european nor port}}
+ \tikzset{xnor port/.style={shape=european xnor port}}
+ } }
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse
+ \tikzset{and port/.style={shape=american and port}}
+ \tikzset{or port/.style={shape=american or port}}
+ \tikzset{xor port/.style={shape=american xor port}}
+ \tikzset{not port/.style={shape=american not port}}
+ \tikzset{nand port/.style={shape=american nand port}}
+ \tikzset{nor port/.style={shape=american nor port}}
+ \tikzset{xnor port/.style={shape=american xnor port}}
+ } }
+
+\ctikzset{logic ports origin/.is choice}
+\ctikzset{logic ports origin/legacy/.code= {
+ \ctikzset{tripoles/american and port/origin/.initial=0.8}
+ \ctikzset{tripoles/american nand port/origin/.initial=0.8}
+ \ctikzset{tripoles/american nor port/origin/.initial=0.8}
+ \ctikzset{tripoles/american or port/origin/.initial=0.8}
+ \ctikzset{tripoles/american xor port/origin/.initial=0.8}
+ \ctikzset{tripoles/american xnor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european and port/origin/.initial=0.8}
+ \ctikzset{tripoles/european nand port/origin/.initial=0.8}
+ \ctikzset{tripoles/european or port/origin/.initial=0.8}
+ \ctikzset{tripoles/european nor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european xor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european xnor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european not port/origin/.initial=0.8}
+ }
+}
+\ctikzset{logic ports origin/center/.code= {
+ \ctikzset{tripoles/american and port/origin/.initial=0}
+ \ctikzset{tripoles/american nand port/origin/.initial=0}
+ \ctikzset{tripoles/american nor port/origin/.initial=0}
+ \ctikzset{tripoles/american or port/origin/.initial=0}
+ \ctikzset{tripoles/american xor port/origin/.initial=0}
+ \ctikzset{tripoles/american xnor port/origin/.initial=0}
+ \ctikzset{tripoles/european and port/origin/.initial=0}
+ \ctikzset{tripoles/european nand port/origin/.initial=0}
+ \ctikzset{tripoles/european or port/origin/.initial=0}
+ \ctikzset{tripoles/european nor port/origin/.initial=0}
+ \ctikzset{tripoles/european xor port/origin/.initial=0}
+ \ctikzset{tripoles/european xnor port/origin/.initial=0}
+ \ctikzset{tripoles/european not port/origin/.initial=0}
+ }
+}
+
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/american and port/origin/.initial=0.8}
+\ctikzset{tripoles/american and port/inputs/.initial=2}
+% variable number of inputs
+\ctikzset{tripoles/american nand port/origin/.initial=0.8}
+\ctikzset{tripoles/american nand port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/origin/.initial=0.8}
+\ctikzset{tripoles/american nor port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/angle/.initial=70}
+\ctikzset{tripoles/american nor port/inner/.initial=0.3}
+\ctikzset{tripoles/american or port/origin/.initial=0.8}
+\ctikzset{tripoles/american or port/inputs/.initial=2}
+\ctikzset{tripoles/american or port/angle/.initial=70}
+\ctikzset{tripoles/american or port/inner/.initial=0.3}
+\ctikzset{tripoles/american xor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xor port/inputs/.initial=2}
+\ctikzset{tripoles/american xor port/angle/.initial=70}
+\ctikzset{tripoles/american xor port/inner/.initial=0.3}
+\ctikzset{tripoles/american xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xnor port/inputs/.initial=2}
+\ctikzset{tripoles/american xnor port/angle/.initial=70}
+\ctikzset{tripoles/american xnor port/inner/.initial=0.3}
+
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+% variable number of inputs
+\ctikzset{tripoles/european and port/origin/.initial=0.8}
+\ctikzset{tripoles/european and port/inputs/.initial=2}
+\ctikzset{tripoles/european nand port/origin/.initial=0.8}
+\ctikzset{tripoles/european nand port/inputs/.initial=2}
+\ctikzset{tripoles/european or port/origin/.initial=0.8}
+\ctikzset{tripoles/european or port/inputs/.initial=2}
+\ctikzset{tripoles/european nor port/origin/.initial=0.8}
+\ctikzset{tripoles/european nor port/inputs/.initial=2}
+\ctikzset{tripoles/european xor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xor port/inputs/.initial=2}
+\ctikzset{tripoles/european xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xnor port/inputs/.initial=2}
+\ctikzset{tripoles/european not port/origin/.initial=0.8}
+\ctikzset{tripoles/european not port/inputs/.initial=1}%
+%%% parameters that are not used anymore after multi-input
+%%% gates --- left for compatibility of source code.
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+% switches for logic gates
+%
+\pgfkeys{/tikz/number inputs/.initial=0}
+\pgfkeys{/tikz/number inputs/.default=0}
+%
+% switches for op amps
+% changing input polarity
+%
+\newif\ifpgf@circuit@oa@iplusup\pgf@circuit@oa@iplusupfalse
+\pgfkeys{/tikz/noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}}
+\ctikzset{noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}}
+\pgfkeys{/tikz/input noinv down/.add code={}{\pgf@circuit@oa@iplusupfalse}}
+\ctikzset{input noinv down/.add code={}{\pgf@circuit@oa@iplusupfalse}}
+%
+% changing output polarity (for fully diff objects)
+%
+\newif\ifpgf@circuit@oa@oplusup\pgf@circuit@oa@oplusuptrue
+\pgfkeys{/tikz/noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}}
+\ctikzset{noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}}
+\pgfkeys{/tikz/noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}}
+\ctikzset{noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}}
+%
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/op amp/font/.initial= \fontsize{10}{12}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/en amp/width/.initial=1.7}
+\ctikzset{tripoles/en amp/port width/.initial=.7}
+\ctikzset{tripoles/en amp/height/.initial=1.6}
+\ctikzset{tripoles/en amp/input height/.initial=.3}
+\ctikzset{tripoles/en amp/up pos/.initial=.45}
+\ctikzset{tripoles/en amp/font/.initial= \fontsize{10}{12}\selectfont}%absolute font size needed!
+\ctikzset{tripoles/en amp/font2/.initial= \fontsize{12}{14}\selectfont}%absolute font size needed!
+\ctikzset{tripoles/en amp/text/.initial={$\mathstrut{\triangleright}\,{\infty}$}}
+\tikzset{
+ en amp text/.code = {
+ \ctikzsetvalof{tripoles/en amp/text}{#1}
+ },
+ en amp text A/.code = {
+ \ctikzsetvalof{tripoles/en amp/text}{$\mathstrut{\triangleright}\,\mathrm{A}$}
+ },
+}
+\ctikzset{tripoles/gm amp/width/.initial=1.7}
+\ctikzset{tripoles/gm amp/port width/.initial=.7}
+\ctikzset{tripoles/gm amp/height/.initial=1.4}
+\ctikzset{tripoles/gm amp/input height/.initial=.5}
+\ctikzset{tripoles/gm amp/up pos/.initial=.45}
+\ctikzset{tripoles/inst amp/width/.initial=1.7} % instrumentation amplifier, simple
+\ctikzset{tripoles/inst amp/port width/.initial=.7}
+\ctikzset{tripoles/inst amp/height/.initial=1.4}
+\ctikzset{tripoles/inst amp/input height/.initial=.5}
+\ctikzset{tripoles/inst amp/up pos/.initial=.4}
+\ctikzset{tripoles/inst amp/refv pos/.initial=.7}
+\ctikzset{tripoles/inst amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/fd inst amp/width/.initial=1.7} % instrumentation amplifier, diff output
+\ctikzset{tripoles/fd inst amp/port width/.initial=.7}
+\ctikzset{tripoles/fd inst amp/height/.initial=1.4}
+\ctikzset{tripoles/fd inst amp/input height/.initial=.5}
+\ctikzset{tripoles/fd inst amp/up pos/.initial=.4}
+\ctikzset{tripoles/fd inst amp/refv pos/.initial=.7}
+\ctikzset{tripoles/fd inst amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/inst amp ra/width/.initial=2.4} % instrumentation amplifier with ra gain resistance added
+\ctikzset{tripoles/inst amp ra/port width/.initial=.7}
+\ctikzset{tripoles/inst amp ra/height/.initial=2.9}
+\ctikzset{tripoles/inst amp ra/input height/.initial=.7}
+\ctikzset{tripoles/inst amp ra/up pos/.initial=.4}
+\ctikzset{tripoles/inst amp ra/refv pos/.initial=.7}
+\ctikzset{tripoles/inst amp ra/ra pos/.initial=.6}
+\ctikzset{tripoles/inst amp ra/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+%% Cute switches
+\ctikzset{bipoles/cuteswitch/shape/.initial={ocirc}}
+\ctikzset{bipoles/cuteswitch/height/.initial=.6}
+\ctikzset{bipoles/cuteswitch/height 2/.initial=.2}
+\ctikzset{bipoles/cuteswitch/width/.initial=.50}
+\ctikzset{bipoles/cuteswitch/thickness/.initial=1}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/inner/.initial=0.4}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
+
+\ctikzset{quadpoles style/.is choice}
+\ctikzset{quadpoles style/inward/.code={ % default value
+ \ctikzset{quadpoles/transformer/inner=0.4}
+ \ctikzset{quadpoles/transformer/width=1.5}
+ \ctikzset{quadpoles/transformer core/inner=0.4}
+ \ctikzset{quadpoles/transformer core/width=1.5}
+ \ctikzset{quadpoles/gyrator/inner=0.4}
+ \ctikzset{quadpoles/gyrator/width=1.5}
+ }
+}
+\ctikzset{quadpoles style/inline/.code={ % now horizontal baffle
+ \ctikzset{quadpoles/transformer/inner=1}
+ \ctikzset{quadpoles/transformer/width=0.6}
+ \ctikzset{quadpoles/transformer core/inner=1}
+ \ctikzset{quadpoles/transformer core/width=0.6}
+ \ctikzset{quadpoles/gyrator/inner=1}
+ \ctikzset{quadpoles/gyrator/width=0.6}
+ }
+}
+
+
+%
+% multipoles
+%
+\ctikzset{multipoles/thickness/.initial=2}
+\ctikzset{multipoles/font/.initial=\tiny}
+% DIP (dual in line package) chips
+\ctikzset{multipoles/dipchip/width/.initial=1.2}
+\ctikzset{multipoles/dipchip/num pins/.initial=8}
+\ctikzset{multipoles/dipchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/dipchip/num pins=#1}}}
+% QFP (quad flat package) chips
+\ctikzset{multipoles/qfpchip/num pins/.initial=8}
+\ctikzset{multipoles/qfpchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/qfpchip/num pins=#1}}}
+% chip numbers
+\newif\ifpgf@circuit@chip@shownumbers\pgf@circuit@chip@shownumberstrue
+\pgfkeys{/tikz/show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}}
+\ctikzset{show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}}
+\pgfkeys{/tikz/hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}}
+\ctikzset{hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}}
+\newif\ifpgf@circuit@chip@straightnumbers\pgf@circuit@chip@straightnumberstrue
+\pgfkeys{/tikz/straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}}
+\ctikzset{straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}}
+\pgfkeys{/tikz/rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}}
+\ctikzset{rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}}
+% external chip pins
+\ctikzset{multipoles/external pins thickness/.initial=1}
+\ctikzset{multipoles/external pins width/.initial=0.2}
+\ctikzset{multipoles/external pad fraction/.initial=0}
+\pgfkeys{/tikz/external pins width/.add code={}{\ctikzset{multipoles/external pins width=#1}}}
+\pgfkeys{/tikz/external pad fraction/.add code={}{\ctikzset{multipoles/external pad fraction=#1}}}
+% topmarks
+\newif\ifpgf@circuit@chip@topmark\pgf@circuit@chip@topmarktrue
+\pgfkeys{/tikz/topmark/.add code={}{\pgf@circuit@chip@topmarktrue}}
+\ctikzset{topmark/.add code={}{\pgf@circuit@chip@topmarktrue}}
+\pgfkeys{/tikz/no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}}
+\ctikzset{no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}}
+
+% rotary switch by Romano
+\ctikzset{multipoles/rotary/thickness/.initial=1}
+\ctikzset{multipoles/rotary/shape/.initial=ocirc}
+\ctikzset{multipoles/rotary/channels/.initial=5}
+\ctikzset{multipoles/rotary/angle/.initial=60}
+\ctikzset{multipoles/rotary/wiper/.initial=20}
+\ctikzset{multipoles/rotary/arrow/.is choice}
+\newif\ifpgf@circ@rotaryarrow\pgf@circ@rotaryarrowfalse
+\newif\ifpgf@circ@rotaryarrow@cw\pgf@circ@rotaryarrow@cwfalse
+\newif\ifpgf@circ@rotaryarrow@ccw\pgf@circ@rotaryarrow@ccwfalse
+\ctikzset{multipoles/rotary/arrow/none/.code={\pgf@circ@rotaryarrowfalse\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/both/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwtrue}}
+\ctikzset{multipoles/rotary/arrow/cw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/ccw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwtrue}}
+
+\tikzset{%
+ rotary switch/.style args={#1in#2wiper#3}{
+ shape=rotaryswitch,
+ /tikz/circuitikz/multipoles/rotary/channels=#1,
+ /tikz/circuitikz/multipoles/rotary/angle=#2,
+ /tikz/circuitikz/multipoles/rotary/wiper=#3,
+ },
+ rotary switch -/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=none,
+ },
+ rotary switch <-/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=ccw,
+ },
+ rotary switch ->/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=cw,
+ },
+ rotary switch <->/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=both,
+ },
+ % Notice that these should be the same as the initial values of the keys
+ rotary switch/.default={5 in 60 wiper 20 },
+ rotary switch -/.default={5 in 60 wiper 20 },
+ rotary switch <-/.default={5 in 60 wiper 20 },
+ rotary switch ->/.default={5 in 60 wiper 20 },
+ rotary switch <->/.default={5 in 60 wiper 20 },
+}
+
+% %Mechanical section
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol}
+\newif\ifpgf@circuit@bipole@strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/flow/.is family}
+\newif\ifpgf@circuit@bipole@flow@backward
+\ctikzset{bipole/flow/direction/.is choice}
+\ctikzset{bipole/flow/direction/forward/.code={\pgf@circuit@bipole@flow@backwardfalse}}
+\ctikzset{bipole/flow/direction/backward/.code={\pgf@circuit@bipole@flow@backwardtrue}}
+\newif\ifpgf@circuit@bipole@flow@before
+\ctikzset{bipole/flow/x position/.is choice}
+\ctikzset{bipole/flow/x position/after/.code={\pgf@circuit@bipole@flow@beforefalse}}
+\ctikzset{bipole/flow/x position/before/.code={\pgf@circuit@bipole@flow@beforetrue}}
+\newif\ifpgf@circuit@bipole@flow@below
+\ctikzset{bipole/flow/y position/.is choice}
+\ctikzset{bipole/flow/y position/above/.code={\pgf@circuit@bipole@flow@belowfalse}}
+\ctikzset{bipole/flow/y position/below/.code={\pgf@circuit@bipole@flow@belowtrue}}
+\ctikzset{bipole/flow/label/unit/.initial=}
+\ctikzset{bipole/flow/label/name/.initial=}
+\ctikzset{flow/distance/.initial = .5}
+\ctikzset{flow/offset/.initial = .2}%distance between flow-arrow and conductor
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/annotation/.is family}
+\ctikzset{bipole/annotation/position/.initial=-90}
+\ctikzset{bipole/annotation/unit/.initial=}
+\ctikzset{bipole/annotation/name/.initial=}
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@strokediode
+\newif\ifpgf@circuit@fulldiode
+\pgf@circuit@strokediodefalse
+\pgf@circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full }}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty }}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke }}
+
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color={#1}}}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{straight/.is choice}
+\ctikzset{straightvoltage value/.initial=true}
+\ctikzset{straight/true/.code = {\pgf@circuit@bipole@voltage@straighttrue}}
+\ctikzset{straight/false/.code = {\pgf@circuit@bipole@voltage@straightfalse}}
+\ctikzset{straightvoltage/.style = {/tikz/circuitikz/straight=true}}
+\newif\ifpgf@circuit@bipole@voltage@straight
+\ctikzset{bipole/straight/.is if=pgf@circuit@bipole@voltage@straight}
+
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/shift/.initial=0.0} % shift form the cable of voltage symbols
+\ctikzset{voltage shift/.style={voltage/shift=#1}}
+\tikzset{voltage shift/.style={\circuitikzbasekey/voltage/shift=#1}}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% shaping the +/- sign, see pgfcircvoltage.tex
+\ctikzset{voltage/american font/.initial={}}
+\ctikzset{voltage/american plus/.initial={$+$}}
+\ctikzset{voltage/american minus/.initial={$-$}}
+
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+
+\tikzset{american currents/.style = { \circuitikzbasekey/current = american } }
+\tikzset{european currents/.style = { \circuitikzbasekey/current = european } }
+\tikzset{american voltages/.style = { \circuitikzbasekey/voltage = american } }
+\tikzset{european voltages/.style = { \circuitikzbasekey/voltage = european } }
+\tikzset{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester choice/.is choice}
+\ctikzset{gas filled surge arrester choice/european/.code= {\pgf@circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester choice/american/.code= {\pgf@circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=american } }
+\tikzset{european gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester set} }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester set} }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltage conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue } }
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue }
+
+% noise sources
+\ctikzset{bipoles/noise sources/fillcolor/.initial=gray!50}
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+
+% seven segment displays by RGtti
+
+\newif\ifpgf@circ@sevenseg@dot
+\newif\ifpgf@circ@sevenseg@box
+\def\pgf@circ@sevenseg@dotstate{empty}
+\ctikzset{seven seg/.is family}
+\ctikzset{seven seg/dot/.is choice}
+% none means no dot, not space for it. Empty means no dot, but space
+\ctikzset{seven seg/dot/none/.code={\pgf@circ@sevenseg@dotfalse}}
+\ctikzset{seven seg/dot/empty/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{empty}}}
+\ctikzset{seven seg/dot/off/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{off}}}
+\ctikzset{seven seg/dot/on/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{on}}}
+%
+\ctikzset{seven seg/width/.initial=0.4}% relative to \pgf@circ@Rlen
+\ctikzset{seven seg/thickness/.initial=4pt}% segment thickness
+\ctikzset{seven seg/segment sep/.initial=0.2pt}% gap between segments
+\ctikzset{seven seg/box sep/.initial=1pt}% external box gap
+\ctikzset{seven seg/color on/.initial=red}% color for segment "on"
+\ctikzset{seven seg/color off/.initial=gray!20!white} % ...and "off"
+\ctikzset{seven seg/box/.is choice}
+\ctikzset{seven seg/box/off/.code={\pgf@circ@sevenseg@boxfalse}}
+\ctikzset{seven seg/box/on/.code={\pgf@circ@sevenseg@boxtrue}}
+
+\ctikzset{seven seg/bits/.initial=0000000}
+
+\ctikzset{seven seg/value/.code={
+ \edef\@@tmp{#1}
+ \edef\@@n{0} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111110}\fi
+ \edef\@@n{1} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110000}\fi
+ \edef\@@n{2} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1101101}\fi
+ \edef\@@n{3} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111001}\fi
+ \edef\@@n{4} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110011}\fi
+ \edef\@@n{5} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011011}\fi
+ \edef\@@n{6} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011111}\fi
+ \edef\@@n{7} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110000}\fi
+ \edef\@@n{8} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111111}\fi
+ \edef\@@n{9} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111011}\fi
+ \edef\@@n{10}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{11}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{12}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{13}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{14}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{15}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{A} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{B} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{C} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{D} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{E} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{F} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{a} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{b} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{c} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{d} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{e} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{f} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{-} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0000001}\fi
+}}
+
+\tikzset{%
+ seven segment val/.style args={#1dot#2box#3}{
+ shape=bare7seg,
+ /tikz/circuitikz/seven seg/value=#1,
+ /tikz/circuitikz/seven seg/dot=#2,
+ /tikz/circuitikz/seven seg/box=#3,
+ },
+ seven segment bits/.style args={#1dot#2box#3}{
+ shape=bare7seg,
+ /tikz/circuitikz/seven seg/bits=#1,
+ /tikz/circuitikz/seven seg/dot=#2,
+ /tikz/circuitikz/seven seg/box=#3,
+ },
+}
+
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+
+% Electronic tubes: diodetube, triode, tetrode and pentode
+\ctikzset{tubes/width/.initial=1} % relative width
+\ctikzset{tubes/height/.initial=1.4} % relative height
+\ctikzset{tubes/tube radius/.initial=0.40} % radius of tube circle
+\ctikzset{tubes/anode distance/.initial=0.40} % distance from center
+\ctikzset{tubes/anode width/.initial=0.40} % width of an anode/plate
+\ctikzset{tubes/grid protrusion/.initial=0.25} % distance from center
+\ctikzset{tubes/grid dashes/.initial=5} % number of grid dashes
+\ctikzset{tubes/grid separation/.initial=0.2} % separation between grids
+\ctikzset{tubes/grid shift/.initial=0.0} % y shift grids from center
+\ctikzset{tubes/cathode distance/.initial=0.40} % distance from grid
+\ctikzset{tubes/cathode width/.initial=0.40} % width of an cathode
+\ctikzset{tubes/cathode corners/.initial=0.06} % corners of the cathode wire
+\ctikzset{tubes/cathode right extend/.initial=0.075} % extension at the right side
+\ctikzset{tubes/filament distance/.initial=0.1} % distance from cathode
+\ctikzset{tubes/filament angle/.initial=15} % Angle from centerpoint
+
+\newif\ifpgf@circuit@tubes@filament\pgf@circuit@tubes@filamentfalse
+\pgfkeys{/tikz/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}}
+\ctikzset{tubes/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}}
+\newif\ifpgf@circuit@tubes@nocathode\pgf@circuit@tubes@nocathodefalse
+\pgfkeys{/tikz/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}}
+\ctikzset{tubes/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}}
+\newif\ifpgf@circuit@tubes@fullcathode\pgf@circuit@tubes@fullcathodefalse
+\pgfkeys{/tikz/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}}
+\ctikzset{tubes/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}}
+
+%%%---------- close: tex/pgfcirc.defines
+%%%%%%%%%%% Springe nach tex/pgfcircutils
+%%%---------- open: tex/pgfcircutils.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+\fi
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+%%%---------- close: tex/pgfcircutils
+
+%%%%%%%%%%% Springe nach tex/pgfcircshapes
+%%%---------- open: tex/pgfcircshapes.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)}
+ \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)}
+ \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)}
+ \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)}
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up}
+ % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+ \pgfpointintersectionoflines
+ {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}}
+ % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgf@x=\@@switchx\pgf@x
+ \pgf@y=\@@switchy\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% Diamond terminal, unfilled
+
+\pgfdeclareshape{odiamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)}
+ \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)}
+ \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)}
+ \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)}
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up}
+ % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+ \pgfpointintersectionoflines
+ {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}}
+ % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgf@x=\@@switchx\pgf@x
+ \pgf@y=\@@switchy\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% square terminal, filled
+
+\pgfdeclareshape{squarepole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpointborderrectangle
+ {\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}}
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+%% square terminal, unfilled
+
+\pgfdeclareshape{osquarepole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpointborderrectangle
+ {\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}}
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+% BNC connector
+
+\pgfdeclareshape{bnc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ % BNC size is 2.5 times the size of the internal "ocirc"
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@y=2.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ % center is on the opening
+ \anchor{center}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{zero}{ \pgfpointorigin }
+ \anchor{hot}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{shield}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ % geo-anchors
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{right}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{left}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{2.5*\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{2.5*\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+ \pgfextracty{\pgf@circ@res@other}{\northwest}
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgflinewidth}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % external circle
+ \pgfscope
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{-2\pgf@circ@res@other}{-2\pgf@circ@res@other}}
+ {\pgfpoint{2\pgf@circ@res@other}{2\pgf@circ@res@other}}
+ % next the opening to the right
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ {\pgfpoint{2\pgf@circ@res@other}{\pgf@circ@res@step}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@other}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal circle
+ \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@step}
+ \pgf@circ@draworfill
+ % and the contact line to the right
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%% Fill for correct rectangular joins
+
+\pgfdeclareshape{rectjoinfill}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\pgflinewidth%
+ \pgf@y=.5\pgflinewidth%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfpathrectanglecorners
+ {\pgfpoint{0}{.5\pgflinewidth}}
+ {\pgfpoint{0}{-.5\pgflinewidth}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=\pgf@x%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+}
+
+%% Flow arrow
+
+\pgfdeclareshape{flowarrow}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@y=.5\pgf@circ@res@step
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgf@x=\pgf@circ@res@step%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfnode{currarrow}{tip}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+ }
+}
+
+%% Input arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\northeast}{% this is really not northeast, really -northwest
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@y=.5\pgf@circ@res@step
+ \pgf@x=1.7\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax\pgf@x=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast\pgf@x=0cm\relax}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@x=0cm\relax}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+
+}
+
+
+% full nodes for wire crossing
+
+\pgfdeclareshape{jump crossing}
+{
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \behindbackgroundpath{
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % horizontal jumper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % vertical, broken path
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+\pgfdeclareshape{plain crossing}
+{
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \behindbackgroundpath{
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % horizontal jumper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % vertical, broken path
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.1\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.1\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+%%%---------- close: tex/pgfcircshapes
+%%%%%%%%%%% Springe nach tex/pgfcircmonopoles
+%%%---------- open: tex/pgfcircmonopoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+% #1 -> name
+% #2 -> width
+% #3 -> depth
+% #4 -> code
+\long\def\pgf@circ@declareground#1#2#3#4{
+ \pgfdeclareshape{#1}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+ \pgf@x=#2\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+ \pgf@y=-#3\pgf@y
+ }
+ \anchor{north}{\pgfpointorigin}
+ \anchor{north east}{\southeast\pgf@y=0pt\relax}
+ \anchor{east}{\southeast\pgf@y=.5\pgf@y}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\southeast\pgf@y=.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{north west}{\southeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ #4
+ \endpgfscope
+ }
+ }
+}
+
+
+\pgf@circ@declareground{ground}{0.6}{1.6}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{tlground}{0.6}{0.4}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+
+\pgf@circ@declareground{rground}{0.6}{1}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\ctikzvalof{monopoles/rground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+\pgf@circ@declareground{tground}{0.6}{0}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{sground}{0.6}{1.8}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+}
+
+% noiseless ground
+\pgf@circ@declareground{nground}{0.9}{1.6}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.9\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{0.9\pgf@circ@res@step}
+ \pgfusepath{draw}
+}
+
+% protective ground
+\pgf@circ@declareground{pground}{0.9}{1.8}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathcircle{\pgfpoint{0pt}{-0.9\pgf@circ@res@step}}{0.9\pgf@circ@res@step}
+ \pgfusepath{draw}
+}
+
+% chassis ground
+\pgf@circ@declareground{cground}{1}{2}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.00\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{ 0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{ 0.50\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{ 0.00\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.25\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Contributed by @fotesan https://github.com/fotesan
+
+\pgf@circ@declareground{eground}{1.1}{1.7}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.1\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{eground2}{1.1}{1.7}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.45\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgf@x=1.625\pgf@circ@res@step
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgf@y=.25\pgf@circ@res@step%
+ }
+ % the center is on the left side of the shape for facility of usage
+ \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0.5\pgf@x\relax}
+ \anchor{west}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=0cm\relax}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+
+ \pgfscope\begin{pgftransparencygroup}
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgf@circ@maybefill
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \end{pgftransparencygroup} \endpgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ }
+}
+
+%% New antennas without tails
+
+% main body
+\def\pgf@circ@antennabody{%
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfsetbeveljoin
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Waves for the antennas.
+\def\pgf@circ@antennawaves{%
+ \pgfscope
+ % define a triangle for clipping the waves
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{clip}
+ % ...and build the waves as clipped circles
+ \pgf@circ@count@a=8\pgf@circ@res@other=0.5\pgf@circ@res@step
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>2
+ \pgfpathcircle{\pgfpoint{0pt}{\pgf@circ@res@step}}{\the\pgf@circ@count@a*\pgf@circ@res@other}
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% additional shape with the waves
+\pgfdeclareshape{waves}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0pt}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt}
+ \anchor{bottom}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{north east}{\northeast}
+ \anchor{east}{\northeast\pgf@y=0pt}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@Rlen
+ \pgf@circ@res@step=0.5\pgf@circ@res@step
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfscope
+ % define a triangle for clipping the waves
+ \pgfpathmoveto{\pgfpoint{-2\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{clip}
+ % ...and build the waves as clipped circles
+ \c@pgf@counta=8\pgf@circ@res@other=0.5\pgf@circ@res@step
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>1
+ \pgfpathcircle{\pgfpoint{-2\pgf@circ@res@step}{0pt}}{\the\c@pgf@counta*\pgf@circ@res@other}
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% the three types of antennas: simple, TX, RX. Notice that you can flip them...
+
+\pgfdeclareshape{bareantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ }
+}
+
+\pgfdeclareshape{bareTXantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@x=\dimexpr-\pgf@x-\wd\pgfnodeparttextbox\relax
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{waves}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=4.2\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ \pgf@circ@antennawaves
+ }
+}
+
+\pgfdeclareshape{bareRXantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{waves}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=-4.2\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ \pgftransformxshift{-5.2\pgf@circ@res@step}
+ \pgf@circ@antennawaves
+ }
+}
+
+% Microstrip monopoles
+
+\pgfdeclareshape{mslstub}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=-.5\pgf@y
+ }
+ \savedanchor{\northwest}{
+ \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\northwest\pgf@y=0pt\relax}
+ \anchor{left}{\northwest\pgf@y=0pt\relax}
+ \anchor{right}{\southeast\pgf@y=0pt\relax}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{msrstub}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=0pt\relax
+ }
+ \savedanchor{\northwest}{
+ \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/msrstub/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\pgfpointorigin}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointpolar{135}{\pgf@circ@res@step}}
+ \pgfpatharc{135}{45}{\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpointpolar{45}{\pgf@circ@res@up}}
+ \pgfpatharc{45}{135}{\pgf@circ@res@up}
+ \pgfclosepath
+ % \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{msport}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=-.5\pgf@y
+ }
+ \savedanchor{\northwest}{
+ \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\northwest\pgf@y=0pt\relax}
+ \anchor{left}{\northwest\pgf@y=0pt\relax}
+ \anchor{right}{\southeast\pgf@y=0pt\relax}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr-.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.5*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+% Legacy antennas (with tails)
+
+\def\pgf@circ@shift@antenna@xy#1#2{%
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@y=\dimexpr\pgf@y+#2\pgf@circ@res@step
+ \pgf@x=\dimexpr\pgf@x+#1\pgf@circ@res@step
+\relax}
+
+\pgfdeclareshape{antenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{east}{\northeast\pgf@y=0cm\pgf@circ@shift@antenna@xy{0}{3}\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{4}\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{3}}
+ \anchor{north east}{\northeast\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{0}{4}}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}}
+ \anchor{east}{\northeast\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}}
+ \anchor{north east}{\northeast\pgf@circ@shift@antenna@xy{4}{2}}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}}
+ \anchor{east}{\northeast\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}}
+ \anchor{north east}{\northeast\pgf@circ@shift@antenna@xy{4}{2}}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=3\pgf@x%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{center}{\pgfpointorigin}
+ \anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=2\pgf@circ@res@step
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \edef\pgf@circ@temp{\ctikzvalof{monopoles/vcc/arrow}}\edef\pgf@temp{legacy}
+ \ifx\pgf@temp\pgf@circ@temp
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \else
+ \pgfsetarrowsend{\pgf@circ@temp}
+ \fi
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=-3\pgf@x%
+ }
+ \anchor{south}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax}
+ \anchor{north}{\pgfpointorigin}
+ \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast\pgf@y=0pt\relax}
+ \anchor{north west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{center}{\pgfpointorigin}
+ \anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=-2\pgf@circ@res@step
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \edef\pgf@circ@temp{\ctikzvalof{monopoles/vee/arrow}}\edef\pgf@temp{legacy}
+ \ifx\pgf@temp\pgf@circ@temp
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \else
+ \pgfsetarrowsend{\pgf@circ@temp}
+ \fi
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% match
+\pgfdeclareshape{match}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@Rlen
+ \pgf@x=2\pgf@circ@res@step
+ \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@Rlen
+ \pgf@y=.5\pgf@circ@res@step%
+ }
+ % the center is on the left side of the shape for facility of usage
+ \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=0pt\pgf@x=0.5\pgf@x\relax}
+ \anchor{west}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=0cm\relax}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\pgfpointorigin}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+%%%---------- close: tex/pgfcircmonopoles
+%%%%%%%%%%% Springe nach tex/pgfcircbipoles
+%%%---------- open: tex/pgfcircbipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+
+
+\long\def\pgfcircdeclarebipole#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@res@down=-#2\pgf@circ@Rlen
+ \pgf@circ@res@up=#4\pgf@circ@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{ne}{
+ \northeast
+ }
+ \anchor{nw}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{s}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{south east}{
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \southwest
+ }
+ \anchor{se}{
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{
+ \southwest
+ }
+ \anchor{w}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{left}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{below}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{a}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{b}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{
+ \textanchor
+ }
+ \anchorborder{%
+ \ifpgf@circuit@bipole@inverted
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/resistor/height}}
+{resistor}
+{\ctikzvalof{bipoles/resistor/height}}
+{\ctikzvalof{bipoles/resistor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vresistor/height}}
+{vresistor}
+{\ctikzvalof{bipoles/vresistor/height}}
+{\ctikzvalof{bipoles/vresistor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitor}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Capacitive sensor
+\pgfcircdeclarebipole
+{\anchor{label}{%
+ \southwest
+ \pgf@x=2.6\pgf@x
+ \pgf@y=1.4\pgf@y
+ }%
+}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitivesens}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{2.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-2.6\pgf@circ@res@right}{1.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-4.4\pgf@circ@res@right}{1.4\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{polarcapacitor}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{\ctikzvalof{bipoles/pcapacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/pcapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Electrolytic Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{ecapacitor}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{\ctikzvalof{bipoles/ecapacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/ecapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+ \pgfsetrectcap
+ % % % Draw plus pole
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ % % Draw minus pole
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfsetfillcolor{black}
+ % % plus pole annotation
+ \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}]
+ {\pgfkeysvalueof{/tikz/circuitikz/bipoles/ecapacitor/font} $+$}
+}
+
+%% Battery
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/battery/height}}
+{battery}
+{\ctikzvalof{bipoles/battery/height}}
+{\ctikzvalof{bipoles/battery/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1 % poles with equl thickness
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/battery1/height}}
+{battery1}
+{\ctikzvalof{bipoles/battery1/height}}
+{\ctikzvalof{bipoles/battery1/width}}
+{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+%% Battery 2 % negative pole thicker
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/battery2/height}}
+{battery2}
+{\ctikzvalof{bipoles/battery2/height}}
+{\ctikzvalof{bipoles/battery2/width}}
+{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{cuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% cute inductive sensor
+
+\pgfcircdeclarebipole
+{%
+{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.8\pgf@x
+ \pgf@y=2.6\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{scuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% cute choke
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cutechoke/lower coil height}}
+{cutechoke}
+{\ctikzvalof{bipoles/cutechoke/height}}
+{\ctikzvalof{bipoles/cutechoke/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cutechoke/coil aspect}*\ctikzvalof{bipoles/cutechoke/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cutechoke/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cutechoke/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cutechoke/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cutechoke/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cutechoke/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}*\ctikzvalof{bipoles/cutechoke/cthick}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+
+ \ifpgf@circuit@bipole@twolines
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}*\ctikzvalof{bipoles/cutechoke/cthick}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+ \fi
+}
+
+%% variable cute inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}
+{vcuteinductor}
+{\ctikzvalof{bipoles/vcuteinductor/height}}
+{\ctikzvalof{bipoles/vcuteinductor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+%% american inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{americaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+
+%% american inductive sensor
+
+\pgfcircdeclarebipole
+{%
+{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.8\pgf@x
+ \pgf@y=2.6\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{samericaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% variable american inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vamericaninductor/height 2}}
+{vamericaninductor}
+{\ctikzvalof{bipoles/vamericaninductor/height}}
+{\ctikzvalof{bipoles/vamericaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/vamericaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsource}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{vsourceAM}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{\ctikzvalof{bipoles/vsourceam/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$+$}
+ \fi
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{vsourcesin}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{\ctikzvalof{bipoles/vsourcesin/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Square Voltage source - contributed by Alistair Kwan
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{vsourcesquare}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{\ctikzvalof{bipoles/vsourcesquare/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{vsourcetri}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{\ctikzvalof{bipoles/vsourcetri/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% PV Source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pvsource/height}}
+{pvsource}
+{\ctikzvalof{bipoles/pvsource/height}}
+{\ctikzvalof{bipoles/pvsource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %Arrow Part
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{esource}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dcisource/height}}
+{dcisource}
+{\ctikzvalof{bipoles/dcisource/height}}
+{\ctikzvalof{bipoles/dcisource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@maybefill
+ \edef\@@angle{\ctikzvalof{bipoles/dcisource/angle}}
+ \pgfpathmoveto{\pgfpointpolar{\@@angle}{\pgf@circ@res@up}}
+ \pgfpatharc{\@@angle}{-\@@angle}{\pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpointpolar{180-\@@angle}{\pgf@circ@res@up}}
+ \pgfpatharc{180-\@@angle}{180+\@@angle}{\pgf@circ@res@up}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+%% DC-Voltage source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{dcvsource}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{\ctikzvalof{bipoles/dcvsource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isource}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+}
+
+%% Independent double oo source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/oosource/height}}
+{oosource}
+{\ctikzvalof{bipoles/oosource/height}}
+{\ctikzvalof{bipoles/oosource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgf@circ@maybefill
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right}
+ \pgf@circ@draworfill
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isourceam/height}}
+{isourceAM}
+{\ctikzvalof{bipoles/isourceam/height}}
+{\ctikzvalof{bipoles/isourceam/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+
+%% Independent sinusoidal current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourcesin}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Controlled voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsource}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{cvsourceAM}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{\ctikzvalof{bipoles/cvsourceam/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$+$}
+ \fi
+}
+
+
+%% Controlled sinusoidal voltage source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cvsourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Controlled sinusoidal current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cisourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Controlled current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisource}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% Controlled current source - American
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{cisourceAM}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{\ctikzvalof{bipoles/cisourceam/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% Cute Independent voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceC}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Cute Independent current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceC}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Cute Controlled voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsourceC}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Controlled current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisourceC}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Noise voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceN}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ %
+ \pgf@circ@res@step=0.125\pgf@circ@Rlen\relax
+ \edef\pgf@noise@temp{dashed}
+ \edef\pgf@noise@fill{\pgfkeysvalueof{/tikz/circuitikz/bipoles/noise sources/fillcolor}}
+ \ifx\pgf@noise@temp\pgf@noise@fill
+ % fillable in this case
+ \pgf@circ@draworfillandclip
+ \pgfmathsetmacro{\thinner}{.5*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\thinner\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ %
+ \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\pgf@noise@fill}
+ \pgfusepath{draw,fill}
+ \fi
+ \endpgfscope
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Noise current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceN}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ %
+ \pgf@circ@res@step=0.125\pgf@circ@Rlen\relax
+ \edef\pgf@noise@temp{dashed}
+ \edef\pgf@noise@fill{\pgfkeysvalueof{/tikz/circuitikz/bipoles/noise sources/fillcolor}}
+ \ifx\pgf@noise@temp\pgf@noise@fill
+ % fillable in this case
+ \pgf@circ@draworfillandclip
+ \pgfmathsetmacro{\thinner}{.5*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\thinner\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ %
+ \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\pgf@noise@fill}
+ \pgfusepath{draw,fill}
+ \fi
+ \endpgfscope
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Black generic diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulldiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullsdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulltdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulllediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullpdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{fullvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw,fill}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Code for the diode triangle
+\def\pgf@circ@basicdiodeshape{
+ % \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+ % \endpgfscope
+}
+
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptydiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptysdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptytdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptylediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptypdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{emptyvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ % \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty bidirectionaldiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bidirectionaldiode/height}}{emptybidirectionaldiode}{\ctikzvalof{bipoles/bidirectionaldiode/height}}{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgf@circ@draworfill
+ % \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+%% Full bidirectionaldiode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{fullbidirectionaldiode}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw, fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% (Closing) SPST
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{cspst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpointpolar{90}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{90}{-20}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Opening SPST
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{ospst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{-10}{90}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Normal open Switch
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/nos/depth}}
+{nos}
+{\ctikzvalof{bipoles/nos/height}}
+{\ctikzvalof{bipoles/nos/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+}
+
+%% Normal closed Switch
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ncs/depth}}
+{ncs}
+{\ctikzvalof{bipoles/ncs/height}}
+{\ctikzvalof{bipoles/ncs/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Push Button
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{pushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+%% Normally closed Push Button
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{ncpushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp}}
+ \pgfpathmoveto{\pgfpoint{0}{-\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+% cute switch "to" shapes help function
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutesw#1#2#3{
+ \pgfcircdeclarebipole
+ {
+ \savedanchor\midlever{
+ % these values are calculated when we create the definition of the shape.
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/cuteswitch/height}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgf@circ@res@down = -.5\pgf@y
+ \pgf@circ@res@up = .5\pgf@y
+ \pgfextracty{\pgf@circ@res@other}{#2}
+ \pgf@x=0pt
+ \pgf@y=.5\pgf@circ@res@other
+ }
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+ % mid of the lever, to stack switches
+ \anchor{mid}{\midlever}
+ \anchor{cout}{\northeast \pgf@y=0cm}
+ \anchor{cin}{\southwest\pgf@y=0cm}
+ \anchor{out}{\northeast \pgf@y=0cm\advance\pgf@x by \radius}
+ \anchor{in}{\southwest\pgf@y=0cm\advance\pgf@x by -\radius}
+ }
+ {\ctikzvalof{bipoles/cuteswitch/height 2}}
+ {#1}
+ {\ctikzvalof{bipoles/cuteswitch/height}}
+ {\ctikzvalof{bipoles/cuteswitch/width}}{
+ \pgfscope
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{#2}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+ \pgfscope % arrow
+ #3
+ \endpgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}}
+ }
+}
+
+%% closed cute switch
+\pgfcircdeclarecutesw{cuteclosedswitch}
+ {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}}
+ {}
+
+%% open cute switch
+\pgfcircdeclarecutesw{cuteopenswitch}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ {}
+
+%% closing cute switch
+\pgfcircdeclarecutesw{cuteclosingswitch}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ {
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{70}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{70}{-10}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+ }
+
+%% opening cute switch
+\pgfcircdeclarecutesw{cuteopeningswitch}
+ {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}}
+ {
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{-10}{60}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+ }
+
+
+% % METERINGSHAPE
+ \long\def\drawmeteringcircle{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+ %draw connections to circle
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ %draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \endpgfscope
+ %draw arrow
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+%AMPEREMETER
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ammeter/height}}
+{ammeter}
+{\ctikzvalof{bipoles/ammeter/height}}
+{\ctikzvalof{bipoles/ammeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{ohmmeter}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{\ctikzvalof{bipoles/ohmmeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{voltmeter}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{\ctikzvalof{bipoles/voltmeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+% oscilloscope, suggested by @nobrl https://github.com/circuitikz/circuitikz/issues/176
+\pgfcircdeclarebipole
+{
+ \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x}
+ \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/oscope/height}}
+{oscope}
+{\ctikzvalof{bipoles/oscope/height}}
+{\ctikzvalof{bipoles/oscope/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % this would create a round (analog?) scope...
+ % \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ % grid
+ \pgfscope
+ \pgfsetlinewidth{0.5\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathgrid[stepx=\pgf@circ@res@step, stepy=\pgf@circ@res@step]%
+ {\pgfpoint{0.75\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ {\pgfpoint{0.75\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfsetstrokeopacity{0.5}
+ \pgfusepath{draw}
+ \endpgfscope
+ % function displayed, thanks to
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Short circuit
+
+%%% NOTICE that the short is really NOT drawn; we trust the fact that its
+%%% natural length is zero.
+\pgfcircdeclarebipole
+{}
+{0}
+{short}
+{0}
+{0}
+{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/open/height}}
+{open}
+{\ctikzvalof{bipoles/open/height}}
+{\ctikzvalof{bipoles/open/width}}
+{ }
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/generic/height}}
+{generic}
+{\ctikzvalof{bipoles/generic/height}}
+{\ctikzvalof{bipoles/generic/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/fuse/height}}
+{fuse}
+{\ctikzvalof{bipoles/fuse/height}}
+{\ctikzvalof{bipoles/fuse/width}}
+{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@draworfill
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{fullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+%% Generic sensor, filled - used as inductive sensor by some
+
+\pgfcircdeclarebipole
+{{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.4\pgf@x
+ \pgf@y=2\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{sfullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ageneric/height}}
+{ageneric}
+{\ctikzvalof{bipoles/ageneric/height}}
+{\ctikzvalof{bipoles/ageneric/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/afuse/height}}
+{afuse}
+{\ctikzvalof{bipoles/afuse/height}}
+{\ctikzvalof{bipoles/afuse/width}}
+{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/memristor/height}}
+{memristor}
+{\ctikzvalof{bipoles/memristor/height}}
+{\ctikzvalof{bipoles/memristor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{tgeneric}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{\ctikzvalof{bipoles/tgeneric/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/photoresistor/height 2}}
+{photoresistor}
+{\ctikzvalof{bipoles/photoresistor/height}}
+{\ctikzvalof{bipoles/photoresistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Thermistor
+\pgfcircdeclarebipole
+{{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.4\pgf@x
+ \pgf@y=1.2\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/thermistor/height}}
+{thermistor}
+{\ctikzvalof{bipoles/thermistor/height}}
+{\ctikzvalof{bipoles/thermistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/thermistorptc/height 2}}
+{thermistorptc}
+{\ctikzvalof{bipoles/thermistorptc/height}}
+{\ctikzvalof{bipoles/thermistorptc/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/thermistorntc/height 2}}
+{thermistorntc}
+{\ctikzvalof{bipoles/thermistorntc/height}}
+{\ctikzvalof{bipoles/thermistorntc/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/thermocouple/height 2}}
+{thermocouple}
+{\ctikzvalof{bipoles/thermocouple/height}}
+{\ctikzvalof{bipoles/thermocouple/width}}
+{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% Varistor
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/varistor/height}}
+{varistor}
+{\ctikzvalof{bipoles/varistor/height}}
+{\ctikzvalof{bipoles/varistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{tfullgeneric}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{\ctikzvalof{bipoles/tfullgeneric/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{vcapacitor}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{\ctikzvalof{bipoles/vcapacitor/width}}
+{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{piezoelectric}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{\ctikzvalof{bipoles/piezoelectric/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ %% Outer markings
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %% Inner Box
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left+4}{\pgf@circ@res@up-1}}{\pgfpoint{\pgf@circ@res@right-4}{\pgf@circ@res@down+1}}
+ \pgf@circ@draworfill
+ \endpgfscope
+}
+
+
+
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/lamp/height}}
+{lamp}
+{\ctikzvalof{bipoles/lamp/height}}
+{\ctikzvalof{bipoles/lamp/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% bulb
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bulb/height}}
+{bulb}
+{\ctikzvalof{bipoles/bulb/height}}
+{\ctikzvalof{bipoles/bulb/width}}
+{%
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{0.8\pgf@circ@res@up}}{\pgfpoint{0.8\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+% transmission line
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tline/height}}
+{tline}
+{\ctikzvalof{bipoles/tline/height}}
+{\ctikzvalof{bipoles/tline/width}}
+{
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \begin{pgftransparencygroup}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{-\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \end{pgftransparencygroup}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{stroke}
+}
+
+% microstrip transmission line
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/mstline/height}}
+{mstline}
+{\ctikzvalof{bipoles/mstline/height}}
+{\ctikzvalof{bipoles/mstline/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/squid/height}}
+{squid}
+{\ctikzvalof{bipoles/squid/height}}
+{\ctikzvalof{bipoles/squid/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/barrier/height}}
+{barrier}
+{\ctikzvalof{bipoles/barrier/height}}
+{\ctikzvalof{bipoles/barrier/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+}
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+
+
+
+ }
+}
+
+
+%% Draw the two-port fillable box
+\def\pgf@circ@twoportbox{
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+}
+
+%% Generic two port box
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/twoport/height}}
+{twoport}
+{\ctikzvalof{bipoles/twoport/height}}
+{\ctikzvalof{bipoles/twoport/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw outer box
+ \pgf@circ@twoportbox
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vco/width}}
+{vco}
+{\ctikzvalof{bipoles/twoport/width}}
+{\ctikzvalof{bipoles/vco/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+}
+
+%% bandpass filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bandpass/width}}
+{bandpass}
+{\ctikzvalof{bipoles/bandpass/width}}
+{\ctikzvalof{bipoles/bandpass/width}}
+{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% bandstop filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bandstop/width}}
+{bandstop}
+{\ctikzvalof{bipoles/bandstop/width}}
+{\ctikzvalof{bipoles/bandstop/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandstop/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt}% always draw solid line for inner symbol
+ \pgfsetarrows{-}%never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/highpass/width}}
+{highpass}
+{\ctikzvalof{bipoles/highpass/width}}
+{\ctikzvalof{bipoles/highpass/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/lowpass/width}}
+{lowpass}
+{\ctikzvalof{bipoles/lowpass/width}}
+{\ctikzvalof{bipoles/lowpass/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/adc/width}}
+{adc}
+{\ctikzvalof{bipoles/adc/width}}
+{\ctikzvalof{bipoles/adc/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dac/width}}
+{dac}
+{\ctikzvalof{bipoles/dac/width}}
+{\ctikzvalof{bipoles/dac/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dsp/width}}
+{dsp}
+{\ctikzvalof{bipoles/dsp/width}}
+{\ctikzvalof{bipoles/dsp/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/fft/width}}
+{fft}
+{\ctikzvalof{bipoles/fft/width}}
+{\ctikzvalof{bipoles/fft/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipole
+{}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{amp}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \pgf@circ@draworfill
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole
+{}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{vamp}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+ % draw arrow
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{piattenuator}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{vpiattenuator}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{tattenuator}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{vtattenuator}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{phaseshifter}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{vphaseshifter}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/detector/width}}
+{detector}
+{\ctikzvalof{bipoles/detector/width}}
+{\ctikzvalof{bipoles/detector/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{european gas filled surge arrester}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/european gas filled surge arrester/width}}
+{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@draworfill
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{american gas filled surge arrester}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+% % MECHANICAL SYMBOLS
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spring/height}}{spring}{\ctikzvalof{bipoles/spring/height}}{\ctikzvalof{bipoles/spring/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/mass/box height}}
+{mass}
+{\ctikzvalof{bipoles/mass/height}}
+{\ctikzvalof{bipoles/mass/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/damper/height}}
+{damper}
+{\ctikzvalof{bipoles/damper/height}}
+{\ctikzvalof{bipoles/damper/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@maybefill
+
+ % line into the damper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ % damper box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ % damper vertical element
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+%% mechanical viscoelastic element, suggested by @alex
+%% in https://tex.stackexchange.com/questions/484268/combined-spring-damper-in-circuitikz
+\pgfcircdeclarebipole
+{} % extra anchors
+{\ctikzvalof{bipoles/damper/height}} % depth (under the path line)
+{viscoe} % name
+{\ctikzvalof{bipoles/damper/height}} % height (above the path line)
+{\ctikzvalof{bipoles/damper/width}} % width
+{ % draw the bipole
+ \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@maybefill
+
+ % spring into the damper
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpoint{.25\pgf@circ@res@up}{.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.75\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@left}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{.75\pgf@circ@res@up}}
+ \pgfusepath{stroke}
+ \endpgfscope
+ % damper box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ % damper vertical element
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+
+
+\pgfcircdeclarebipole
+{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.4\pgf@x
+ }%
+}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{resistivesens}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{\ctikzvalof{bipoles/resistivesens/width}}
+{%
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.9\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% crossing bipole (but see also nodes)
+\pgfcircdeclarebipole
+ {}
+ {\ctikzvalof{bipoles/crossing/size}}
+ {crossing}
+ {\ctikzvalof{bipoles/crossing/size}}
+ {\ctikzvalof{bipoles/crossing/size}}{
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+
+%% loudspeaker and microphone
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/loudspeaker/depth}}
+{loudspeaker}
+{\ctikzvalof{bipoles/loudspeaker/height}}
+{\ctikzvalof{bipoles/loudspeaker/width}}{
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ \pgfpathclose
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/mic/depth}}
+{mic}
+{\ctikzvalof{bipoles/mic/height}}
+{\ctikzvalof{bipoles/mic/width}}{
+
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0pt}{.6\pgf@circ@res@up}}{.4\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{0pt}}
+ % 0.25358 is 0.6-0.4*cos(30)
+ \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% generic round meter with always horizontal text, no arrow
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeter}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ % draw the text label
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgftransformrotate{\rot}
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% generic round meter with always horizontal text, with arrow
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeterwa}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ % draw the text label
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ % arrow: create a center hole to have better visual
+ \pgfscope
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next open a circle into it
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{.6\pgf@circ@res@up}}{\pgfpoint{.6\pgf@circ@res@left}{0}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfsetarrowsend{latexslim}
+ % the arrow is better if it has a bit of breath and it's not 45º
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@right}{1.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgftext[center]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% generic square meter with always horizontal text
+\pgfcircdeclarebipole
+{
+ \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x}
+ \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/smeter/height}}
+{smeter}
+{\ctikzvalof{bipoles/smeter/height}}
+{\ctikzvalof{bipoles/smeter/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ % the metering window
+ \pgfscope
+ \def\@starta{105}\def\@stopa{75}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{0pt}{-1.8\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{\@starta}{2\pgf@circ@res@up}}
+ \pgfpatharc{\@starta}{\@stopa}{2\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}}
+ \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up}
+ \pgfclosepath
+ \pgfpathmoveto{\pgfpointpolar{80}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointpolar{80}{2.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgftext[center, y=0.5\pgf@circ@res@down]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% probles qucs style:
+% #1 : name
+% #2 : extra code
+\long\def\pgfcirc@qucsprobe#1#2{
+ \pgfcircdeclarebipole
+ {
+ \anchor{v+}{\southwest\pgf@x=0.6\pgf@x}
+ \anchor{v-}{\southwest\pgf@x=-0.6\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ }
+ {\ctikzvalof{bipoles/qmeter/depth}}
+ {#1}
+ {\ctikzvalof{bipoles/qmeter/height}}
+ {\ctikzvalof{bipoles/qmeter/width}}
+ {
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \def\@starta{103}\def\@stopa{77}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{0pt}{-1.7\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{\@starta}{2.1\pgf@circ@res@up}}
+ \pgfpatharc{\@starta}{\@stopa}{2.1\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}}
+ \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up}
+ \pgfclosepath
+ \pgfpathmoveto{\pgfpointpolar{83}{2.1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointpolar{83}{2.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgf@circ@draworfill
+ \endpgfscope
+ #2
+ \endpgfscope
+ }
+}
+
+\pgfcirc@qucsprobe{qiprobe}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgfnode{currarrow}{center}{}{}{}
+}
+
+\pgfcirc@qucsprobe{qvprobe}{
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{0pt}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other}
+ \pgfusepath{draw}
+ \pgfscope
+ % "+" and "-", drawn so that they scale correctly
+ \pgfsetlinewidth{2\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-1.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-3.5\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+\pgfcirc@qucsprobe{qpprobe}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgfnode{currarrow}{center}{}{}{}
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left}{-3\pgf@circ@res@other}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{-4\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right}{-3\pgf@circ@res@other}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{-4\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfscope
+ % "+" and "-", drawn so that they scale correctly
+ \pgfsetlinewidth{2\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-2\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-4\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+4\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right-4\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% current loop for oscope and similar: stylized
+
+\pgfcircdeclarebipole
+{
+ \anchor{i}{\northeast\pgf@x=0pt\relax}
+ \anchor{text}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@down=-\pgf@circ@res@up
+ \pgf@circ@res@left=-\pgf@circ@res@right
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % external ellipse
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgflinewidth}
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next the opening to the left
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}}
+ {\pgfpoint{0pt}{.1\pgf@circ@res@up}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathellipse{\pgfpointorigin}{
+ \pgfpoint{0pt}{0.8\pgf@circ@res@up}}{
+ \pgfpoint{0.4\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal wire
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % and the contact line up
+ \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% current loop for oscope and similar: real (double connection)
+
+\pgfcircdeclarebipole
+{
+ \anchor{i+}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgf@y=\pgf@circ@res@up
+ }
+ \anchor{i-}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgf@y=\pgf@circ@res@up
+ }
+ \anchor{text}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop2}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@down=-\pgf@circ@res@up
+ \pgf@circ@res@left=-\pgf@circ@res@right
+ % must be the same than internal i+ and i- anchors definition
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \def\@plus{\pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other}}
+ \def\@minus{\pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other}}
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % external ellipse
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgflinewidth}
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next the opening to the left
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}}
+ {\pgfpoint{0pt}{.1\pgf@circ@res@up}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathmoveto{\@plus}
+ \pgfpatharc{105}{435}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal wire
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % and the contact line up
+ % I use ...left and ---right as temporal lengths here to avoid defining more
+ \pgfextractx{\pgf@circ@res@left}{\@plus}
+ \pgfextractx{\pgf@circ@res@right}{\@minus}
+ \pgfpathmoveto{\@plus}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\@minus}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% end of pgfcircbipoles.tex
+%%%---------- close: tex/pgfcircbipoles
+%%%%%%%%%%% Springe nach tex/pgfcirctripoles
+%%%---------- open: tex/pgfcirctripoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+\pgfdeclareshape{spdt}{
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+% cute switch "node" shapes, matching with cute "to" shapes
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutespdt#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/cuteswitch/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@x=.25\pgf@x
+ }
+ \savedanchor\midlever{
+ % these values are calculated when we create the definition of the shape.
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/cuteswitch/height}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgf@circ@res@down = -.5\pgf@y
+ \pgf@circ@res@up = .5\pgf@y
+ \pgfextracty{\pgf@circ@res@other}{#2}
+ \pgf@x=0pt
+ \pgf@y=.5\pgf@circ@res@other
+ }
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+ % mid of the lever, to stack switches
+ \anchor{mid}{\midlever}
+ % center anchors
+ \anchor{cin}{ \northwest \pgf@y=0pt}
+ \anchor{cout 1}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{cout 2}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ % horizontal angles
+ \anchor{in}{ \northwest \pgf@y=0pt\advance\pgf@x by -\radius}
+ \anchor{out 1}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius}
+ \anchor{out 2}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius \pgf@y=-\pgf@y }
+
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\radius\relax
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{#2}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+ \pgfscope % arrow
+ #3
+ \endpgfscope
+ % terminals
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out 1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out 2}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ }
+ }
+}
+
+\pgfcircdeclarecutespdt{cute spdt up}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt mid}
+{\pgfpoint{\pgf@circ@res@right}{0pt}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt down}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt up arrow}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{70}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{70}{-50}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt mid arrow}
+{\pgfpoint{\pgf@circ@res@right}{0pt}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpointpolar{-60}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{-60}{60}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt down arrow}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{-50}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{-50}{70}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+%% Code from John Kormylo at tex.stackexchange.com
+%% See https://tex.stackexchange.com/questions/372993/is-it-possible-to-implement-multiple-input-logic-ports-with-circuitikz
+%% Integration and fixes from Romano Giannetti and TheTeXnician <38565529+TheTeXnician@users.noreply.github.com>
+%%
+
+\newcount\pgf@circ@res@count% reserve global register
+
+\def\pgf@circ@logicport@input#1% #1 = \pgfmathcounter
+{%
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+}%
+
+% #1 = \pgfmathcounter #2=type #3 specificic port
+% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor, 4 for european.
+\def\pgf@circ@logicport@baseinput#1#2#3%
+{%
+ % and and nand
+ \ifnum #2=1\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/port width}\pgf@circ@res@left
+ \fi
+ % or and nor
+ \ifnum #2=2\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/angle}}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgf@y
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgf@x=\pgf@circ@res@other
+ \fi
+ % xor and xnor
+ \ifnum #2=3\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american #3 port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@circ@res@temp=\pgf@y
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgf@x=\pgf@circ@res@other
+ \fi
+ % european
+ \ifnum #2=4\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@other}{\left}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@x=\pgf@circ@res@other
+ \fi
+}%
+
+%%% american
+\long\def\pgfcircdeclarelogicport#1#2#3{%
+ \pgfdeclareshape{american #1 port}%
+ {%
+ \savedmacro\resize{% automatic
+ \pgf@circ@res@up = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgf@circ@res@down = -\pgf@circ@res@up
+ \pgf@circ@res@right = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@circ@Rlen
+ \pgf@circ@res@right = .5\pgf@circ@res@right
+ \pgf@circ@res@left = -\pgf@circ@res@right
+ }%
+ \savedmacro\inputs{% get number of inputs
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+ \ifnum\pgf@circ@res@count=0
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/inputs}\relax%
+ \fi
+ \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi
+ \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi
+ \def\inputs{\the\pgf@circ@res@count}%
+ }%
+ \savedanchor\step{% 1/2 gap at edges
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \divide\pgf@circ@res@step by \pgf@circ@res@count
+ \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}%
+ }%
+ \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \savedanchor\left{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/port width}\pgf@circ@res@left}{0pt}}
+ \savedanchor\right{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/port width}\pgf@circ@res@right}{0pt}}
+ \savedanchor\origin{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/origin}\pgf@circ@res@right}{0pt}}
+
+ \anchor{center}{\origin}% for backwards compatibility
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % create input anchors
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@american #1 port\endcsname{%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@circ@res@count%
+ \else%
+ %\pgfutil@ifundefined{pgf@anchor@american #1 port@in \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@american #1 port@in \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above
+ }%
+ \expandafter\xdef\csname pgf@anchor@american #1 port@bin \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{#2}{#1}% defined above
+ }%
+ %}{}%
+ \repeatpgfmathloop%
+ }
+
+ \anchor{out}{\northeast\pgf@y=0pt}
+ \anchor{bout}{\right\pgf@y=0pt}
+
+
+ \anchor{left}{\left}% edges of component mius leads
+ \anchor{right}{\right}
+
+ \anchor{north east}{\northeast}% see \Compass macro
+ \anchor{south west}{\southwest}
+ \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfpoint{0cm}{\pgf@circ@res@up}}
+ \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{0cm}}
+ \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfpoint{0cm}{\pgf@circ@res@down}}
+ \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{0cm}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ #3
+ }
+}
+}
+%%% american and %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{and}{1}{
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpatharc{-90}{90}{-2\pgf@circ@res@other and \pgf@circ@res@up}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ }
+%%% american nand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \pgfcircdeclarelogicport{nand}{1}{
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right} {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpatharc{-90}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgf@circ@draworfill
+}
+%%% american nor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{nor}{2}{
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/angle}}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/angle}}%
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+ \advance\pgf@circ@res@other by -\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgf@circ@draworfill
+}
+%%% american or %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{or}{2}{
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/angle}}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/angle}}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgf@circ@draworfill
+}
+%%% american xor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xor}{3}{
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xor port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/angle}}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}%
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}%
+
+ \pgfusepath{draw}
+}
+%%% american xnor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xnor}{3}{
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xnor port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/angle}}%
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+ \advance\pgf@circ@res@other by -\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@left
+ \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}%
+
+ \pgfusepath{draw}
+}
+
+%%% Original one-input ports
+
+\pgfdeclareshape{american not port}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgf@circ@draworfill
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+}
+
+\pgfdeclareshape{invschmitt}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+}
+
+\pgfdeclareshape{schmitt}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+}
+
+
+%%% start european logic ports, from John Kormylo
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 = is it a not?
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedmacro\resize{% automatic
+ \pgf@circ@res@up = \pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgf@circ@res@down = -\pgf@circ@res@up
+ \pgf@circ@res@right = \pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@circ@Rlen
+ \pgf@circ@res@right = .5\pgf@circ@res@right
+ \pgf@circ@res@left = -\pgf@circ@res@right
+ }%
+ \savedmacro\inputs{% get number of inputs
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+ \ifnum\pgf@circ@res@count=0
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/inputs}\relax%
+ \fi
+ \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi
+ \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi
+ \def\inputs{\the\pgf@circ@res@count}%
+ }%
+ \savedanchor\step{% 1/2 gap at edges
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \divide\pgf@circ@res@step by #3
+ \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}%
+ }%
+ \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}%
+ \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}%
+ \savedanchor\left{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}%
+ \savedanchor\right{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}%
+ \savedanchor\origin{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/origin}\pgf@circ@res@right}{0pt}}%
+
+ \anchor{center}{\origin}% for backwards compatibility
+ % the text anchor overlaps the logic symbol
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}%
+ % create input anchors
+ \ifnum#3=1\relax
+ \anchor{in}{\pgfpoint{\pgf@circ@res@left}{0pt}}% or \step
+ \else
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@european #1 port\endcsname{%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>#3%
+ \else%
+ %\pgfutil@ifundefined{pgf@anchor@european #1 port@in \pgfmathcounter}{% redundant
+ \expandafter\xdef\csname pgf@anchor@european #1 port@in \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above
+ }%
+ \expandafter\xdef\csname pgf@anchor@european #1 port@bin \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{4}{#1}% defined above
+ }%
+ %}{}%
+ \repeatpgfmathloop%
+ }
+ \fi
+ \anchor{out}{\northeast\pgf@y=0pt}
+ \anchor{bout}{\right\pgf@y=0pt}
+
+ \anchor{left}{\left}% edges of component minus leads
+ \anchor{right}{\right}
+
+ \anchor{north east}{\northeast}% see \Compass macro
+ \anchor{south west}{\southwest}
+ \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfpoint{0cm}{\pgf@circ@res@up}}
+ \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{0cm}}
+ \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfpoint{0cm}{\pgf@circ@res@down}}
+ \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{0cm}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \ifnum#3=1\relax
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}%
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}%
+ \else
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ %\pgf@circ@res@count = #3\relax% redundant
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+ \fi
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ }
+ }
+}
+\pgfcircdeclareeurologicport{and}{\&}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{\&}{\pgf@circ@res@count}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{\pgf@circ@res@count}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{\pgf@circ@res@count}{not}
+
+%% end european logic ports
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northeast{% upper right
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@circ@Rlen
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=.7\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=0.1\pgf@x
+ }
+ \anchor{pathstart}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{pathend}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{base}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{nobase}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ \anchor{nogate}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@x
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ #2
+ \backgroundpath{
+ \pgftransformationadjustments
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \ifnum \pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction} > 0
+ \pgf@circuit@trans@ntypetrue
+ \else
+ \pgf@circuit@trans@ntypefalse
+ \fi
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ %
+ #3
+ % BODY DIODE
+ \ifpgf@circuit@fet@bodydiode
+ \drawbodydiode{#1}
+ \fi
+ %
+ }
+}
+}
+
+\long\def\drawbodydiode#1{
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgftransformrotate{90}
+ \pgftransformscale{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode scale}}
+ \ifpgf@circuit@fulldiode
+ \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \else
+ \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \fi
+ \endpgfscope
+ % Draw stroke line
+ \ifpgf@circuit@strokediode
+ \pgfpathmoveto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{stroke}
+ \fi
+ %Draw upper connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope{}
+ %Draw lower connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+}
+
+\long\def\declarebpt#1{
+ \pgfcircdeclaretransistor{#1}{}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transistor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/arrow pos}}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/arrow pos}}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \ifpgf@circuit@bpt@drawphoto
+ \pgfscope
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \else
+ \ifpgf@circuit@bpt@drawbase
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \fi
+ }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+
+\long\def\declareigbt#1{
+ \pgfcircdeclaretransistor{#1}{}
+ {
+ %draw upper connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %draw thicker gate lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw lower connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ %draw gate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \fi
+ \pgfusepath{draw}
+ }
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+
+\pgfcircdeclaretransistor{nmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/arrow pos}}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+}
+
+
+\pgfcircdeclaretransistor{pmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/arrow pos}}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+ \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \ifpgf@circuit@pmos@nocircle\else
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \ifpgf@circuit@pmos@emptycircle
+ \pgfsetfillcolor{white}
+ \fi
+ \pgfusepath{draw,fill}
+ \fi
+}
+
+%% HEMT FET Transistor
+\pgfcircdeclaretransistor{hemt}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+\long\def\drawfetcore#1{
+ \pgftransformationadjustments
+ %top connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \ifpgf@circuit@trans@depletiontype
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \else
+
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \fi
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %Bulk connection line
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ %bottom connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ %draw thick gate line
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \ifpgf@circuit@trans@ntype
+ \else
+ \pgftransformrotate{180}
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+\endpgfscope
+
+% GATE CONNECTION
+\ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+\fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+ \anchor{bulk}{\left\pgf@x=0pt}
+ \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt
+ #2
+ }
+ {#3}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nfet}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pfet}
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfete}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+\fi
+}
+
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfetebulk}
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetebulk/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{nigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfete}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfetebulk}
+}
+
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{pigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{fullthyristor}{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{emptythyristor}{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{emptytriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgf@circ@draworfill
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Full triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{fulltriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \northeast
+ \pgf@y=.8\pgf@y
+ }
+}
+{\ctikzvalof{tripoles/toggleswitch/height 2}}
+{toggleswitch}
+{\ctikzvalof{tripoles/toggleswitch/height}}
+{\ctikzvalof{tripoles/toggleswitch/width}}
+{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+%% operational and instrumentation amplifiers
+
+\pgfdeclareshape{op amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ }
+}
+
+%op amp shape as in european standard en 60617
+\pgfdeclareshape{en amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {
+ \left
+ \pgf@x = \ctikzvalof{tripoles/en amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/en amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{up}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{down}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{tripoles/thickness}\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\hbox{\ctikzvalof{tripoles/en amp/font2}\ctikzvalof{tripoles/en amp/text}}}
+ % \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font2}$\mathstrut{\triangleright}\,\mathrm{A}$}
+ }
+}
+
+%%Transkonduktanzverstärker
+\pgfdeclareshape{gm amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+.25\pgf@x}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %Umrandung:
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}} %geändert startpunkt neu am ausgangsstrich
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}%vom Ausgang nach oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}%ecke links unten nach rechts unten
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{0pt}} %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ }
+}
+
+%% instrumentation amplifier
+
+\pgfdeclareshape{inst amp}
+{
+ % when tikz calls the anchor it wants the relative position in the lengths
+ % \pgf@x \pgf@y
+ % \pgfpoint* functions set that variables
+ % anchors are visible outside and run on use
+ \anchor{center}{\pgfpointorigin}
+ % savedanchors are internals and run on node creation (not use)
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/refv pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % let's start drawing the component
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % main component, normally in thicker lines
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %first point (near output)
+ \pgfpathmoveto{\pgfpoint{1.4\pgf@circ@res@right}{0}}
+ %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ % input terminal -
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % input terminal +
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+ % output lead
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} %
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+
+% instrumentation amplifier, with terminals for gain resistance between inputs
+\pgfdeclareshape{inst amp ra}
+{
+ \anchor{center}{\pgfpointorigin}
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ % inputs (+-)
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ % R ampli anchors. They are by default at 20% more than R-length distance
+ % you can change that with the `ra pos` key (use 0.5 for one-R).
+ \savedanchor\raOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{ra up}{
+ \inOneFixed
+ }
+ \anchor{ra down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\raOne{%
+ \pgf@y=\pgf@circ@Rlen
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{ra-}{
+ \raOne
+ }
+ \anchor{ra+}{
+ \raOne
+ \pgf@y=-\pgf@y
+ }
+ % power supplies
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=0.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=0.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/refv pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % drawing of the component
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % main component, normally in thicker lines
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %primer punto: la linea de salida (lado componente)
+ \pgfpathmoveto{\pgfpoint{1.4\pgf@circ@res@right}{0}}
+ %from the exit to the top (short side)... (note that the .4 must be copied in \up anchor
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ % ra terminal -
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ % ra terminal +
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ % input terminal -
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % input terminal +
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+ % output lead
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} %
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}
+{\ctikzvalof{bipoles/potentiometer/height 2}}
+{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}
+{\ctikzvalof{bipoles/potentiometer/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}
+{\ctikzvalof{bipoles/generic potentiometer/height 2}}
+{genericpotentiometer}
+{\ctikzvalof{bipoles/generic potentiometer/height}}
+{\ctikzvalof{bipoles/generic potentiometer/width}}
+{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{oscillator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y}
+ \anchor{north east}{ \northwest \pgf@x=0pt\relax}
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{text}{
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@Rlen{}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+ % draw outer box
+ \ifpgf@circuit@boxed{}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{circulator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed{}
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{pgf@generic}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{pgf@resistor}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+% electromechanical device (motor/generator)
+\pgfdeclareshape{elmech}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope % clip the bar: whole size minus the circle
+ \pgfpathrectanglecorners{\pgfpoint{-.5\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{fill, draw}
+ \endpgfscope
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfusepath{draw, fill}
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{magnetron}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{anode}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{cathode1}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(105)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(105)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{cathode2}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(75)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(75)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@Rlen
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfmathsetlength{\pgf@circ@res@other}{sin(15)*\pgf@circ@res@up}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %create outer circle
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@right}
+ \pgf@circ@draworfill
+ %create chambers
+ \foreach \angle in {45,135,225,315}{
+ \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf@circ@res@right}}
+ \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf@circ@res@right}}
+ }
+ \pgfsetroundcap
+ \pgfusepath{draw}
+ \pgfscope
+ %draw connection from outside
+ %anode
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ %cathodes
+ \pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ %create cathode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.15\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %create anode
+ \pgfpathmoveto{\pgfpoint{0.3\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Electronic tubes, submitted by J. op den Brouw
+
+% Draw tube outline
+\def\pgf@circ@tubes@drawtube{%
+ \ifdim\ctikzvalof{tubes/width}pt>\ctikzvalof{tubes/height}pt\relax
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfutil@tempdima=\pgf@circ@res@right
+ \advance\pgfutil@tempdima by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgfutil@tempdima}{\pgf@circ@res@up}}
+ \pgfpatharc{90}{-90}{\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{-\pgfutil@tempdima}{-\pgf@circ@res@up}}
+ \pgfpatharc{270}{90}{\pgf@circ@res@up}
+ \else
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{0pt}}
+ \pgfutil@tempdima=\pgf@circ@res@up
+ \advance\pgfutil@tempdima by -\pgf@circ@res@right
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpatharc{180}{0}{\pgf@circ@res@right}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfutil@tempdima}}
+ \pgfpatharc{180}{0}{-\pgf@circ@res@right}
+ \fi
+ \pgfpathclose
+}
+
+%% The diode (tube), triode, tetrode and pentode only differ in the
+%% number of grids. So we construct a generic declare function in
+%% which we can put code for the grid anchors and grid drawing code
+%% \pgfcircdeclaretube{tube name}{grid anchors}{grid drawing code}
+\long\def\pgfcircdeclaretube#1#2#3{%
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@Rlen
+ % x and y should be half the Rlen
+ \pgf@y=\pgf@circ@res@up
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@circ@res@right
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{north} {%
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{east}{%
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0pt
+ }
+ \anchor{south}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{west}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{north west}{%
+ \northwest
+ }
+ \anchor{north east}{%
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{anode} {%
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{cathode}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{cathode 1}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{cathode 2}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=-\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{filament 1}{%
+ \northwest
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@x=\pgfmathresult\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{filament 2}{%
+ \northwest
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@x=-\pgfmathresult\pgf@x
+ \pgf@y=-\pgf@y
+ }
+
+ % Extra anchors
+ #2
+
+ \backgroundpath{
+ \pgfscope
+ % Line width for tripoles
+ \pgfsetlinewidth{\ctikzvalof{tripoles/thickness}\pgflinewidth}
+
+ % Setup to draw tube
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tubes/tube radius}\pgf@circ@res@up
+ \pgf@circ@res@right=\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+
+ % Tube fill color (if any)
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \else
+ \pgfscope
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgf@circ@tubes@drawtube
+ \pgfusepath{fill}
+ \endpgfscope
+ \fi
+
+ % Tube outline
+ \pgf@circ@tubes@drawtube
+
+ % Setup to draw grid, filament, anode and cathode
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=0.5\pgf@circ@res@up
+ \pgf@circ@res@right=0.5\pgf@circ@res@right
+
+ % Grid drawing
+ #3
+
+ % Filament (is not drawn by default)
+ \ifpgf@circuit@tubes@filament
+ \pgf@circ@res@temp=-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up
+ \advance\pgf@circ@res@temp by -\ctikzvalof{tubes/filament distance}\pgf@circ@res@up
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@xa=\pgfmathresult\pgf@circ@res@right
+ \pgfmathparse{\ctikzvalof{tubes/tube radius}+\ctikzvalof{tubes/tube radius}*cos(\ctikzvalof{tubes/filament angle}}
+ \pgf@ya=\pgfmathresult\pgf@circ@res@up
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@circ@res@up}}
+ \pgf@circuit@tubes@filamentfalse
+ \fi
+
+ % Anode (or plate)
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} % north
+ \pgfpathlineto{\pgfpoint{0pt}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+
+ % Cathode
+ \ifpgf@circuit@tubes@nocathode
+ \pgf@circuit@tubes@nocathodefalse
+ \else
+ \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}}
+ \ifpgf@circuit@tubes@fullcathode
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}}
+ \pgf@circuit@tubes@fullcathodefalse
+ \else
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-\ctikzvalof{tubes/cathode right extend}\pgf@circ@res@up}}
+ \fi
+ \fi
+
+ % Draw the background
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+ }
+}
+
+\pgfcircdeclaretube{diodetube}{}{} % shape diode already exists
+
+\pgfcircdeclaretube{triode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+ \anchor{control} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+}
+{
+ % Grid protrusion
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{tetrode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \pgfutil@tempdima=0.5\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgfutil@tempdimb=0.5\pgfutil@tempdimb
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{pentode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+ \anchor{suppressor} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{pentode suppressor to cathode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \ifnum\pgf@circ@count@a>1\relax
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}}
+ \fi
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+ % Grid: connection from suppressor to cathode
+ \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima-2*\ctikzvalof{tubes/grid separation}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+
+}
+
+%%%---------- close: tex/pgfcirctripoles
+%%%%%%%%%%% Springe nach tex/pgfcircquadpoles
+%%%---------- open: tex/pgfcircquadpoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ %% notice for the dot anchors: I use the cute inductors as reference
+ %% size; if you change one you have to change all of them.
+ \anchor{inner dot A1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot A1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{inner dot A2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot A2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{inner dot B1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot B1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{inner dot B2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot B2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ #2
+ }
+ }
+}
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+\pgfcircdeclarequadpole{transformer}{
+ \pgf@circ@drawtransformerbasicbody
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/quadpoles/thickness}\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% four-port
+% defines a general outer box for four-ports
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarefourport#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ % draw inner text
+ \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ }
+ }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% contrib Kristofer M. Monisit
+
+\pgfdeclareshape{fd op amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\outline{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out up}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out down}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out +}{
+ \outline
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \outline
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.7\pgf@x
+ }
+
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-.7\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-.7\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/quadpoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@oplusup$-$\else$+$\fi}
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@oplusup$+$\else$-$\fi}
+
+ \pgfsetrectcap
+ % Draw them all!
+ \pgfusepath{draw}
+
+ }
+}
+
+
+%% instrumentation amplifier diff output
+
+\pgfdeclareshape{fd inst amp}
+{
+ % when tikz calls the anchor it wants the relative position in the lengths
+ % \pgf@x \pgf@y
+ % \pgfpoint* functions set that variables
+ % anchors are visible outside and run on use
+ \anchor{center}{\pgfpointorigin}
+ % savedanchors are internals and run on node creation (not use)
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/refv pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\outport{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi
+ }
+ \anchor{out}{
+ \outport
+ \pgf@y=0pt
+ }
+ \anchor{out +}{
+ \outport
+ }
+ \anchor{out -}{
+ \outport
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\outportfixed{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ }
+ \anchor{out up}{
+ \outportfixed
+ }
+ \anchor{out down}{
+ \outportfixed
+ \pgf@y=-\pgf@y
+ }
+ %
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % let's start drawing the component
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % main component, normally in thicker lines
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %first point (near output)
+ \pgfpathmoveto{\pgfpoint{1.4\pgf@circ@res@right}{0}}
+ %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ % input terminal up
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % input terminal down
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+ % output leads down and up
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}} %
+ \pgftext[right, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$-\;$\else$+\;$\fi}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}} %
+ \pgftext[right, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$+\;$\else$-\;$\fi}
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+%%%---------- close: tex/pgfcircquadpoles
+%%%%%%%%%%% Springe nach tex/pgfcircmultipoles
+%%%---------- open: tex/pgfcircmultipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+% Copyright 2019 by Romano Giannetti
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Multipoles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% counters for pin accounting...
+\def\pgf@circ@dip@pin@shift{0.5}
+\def\pgf@circ@qfp@pin@shift{0.25}
+
+% derived from https://tex.stackexchange.com/a/146753/38080
+% original author Mark Wibrow
+% Thanks also to John Kormylo https://tex.stackexchange.com/a/372996/38080
+% a lot of thanks to @marmot for the un-rotation hint
+% https://tex.stackexchange.com/a/473571/38080
+
+% DIP (dual in line package) chips
+
+\pgfdeclareshape{dipchip}{
+ \savedmacro\numpins{%
+ \pgf@circ@count@a=\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins}%
+ \def\numpins{\the\pgf@circ@count@a}
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=-.5\wd\pgfnodeparttextbox%
+ \pgf@y=-.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by+.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+ \anchor{center}{\origin}
+ \anchor{text}{\centerpoint}% to adjust text
+ \saveddimen\height{%
+ \pgfmathsetlength\pgf@x{((\numpins)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing})*\pgf@circ@Rlen/2}%
+ }%
+ \saveddimen{\chipspacing}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing}}}
+ \saveddimen{\width}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/width}}}
+ \saveddimen{\extshift}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}}}
+ % standard anchors
+ \savedanchor\northwest{%
+ \pgfmathsetlength\pgf@y{0.5*((\numpins)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing})*\pgf@circ@Rlen/2}%
+ \pgfmathsetlength\pgf@x{-0.5*\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/width}}
+ }
+ \anchor{dot}{\northwest
+ \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing}
+ \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing}
+ }
+ \anchor{nw}{\northwest}
+ \anchor{ne}{\northwest\pgf@x=-\pgf@x}
+ \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{sw}{\northwest\pgf@y=-\pgf@y}
+ \anchor{north west}{\northwest}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{south east}{\northwest\pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{south west}{\northwest\pgf@y=-\pgf@y}
+ \anchor{n}{\northwest\pgf@x=0pt }
+ \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{w}{\northwest\pgf@y=0pt }
+ \anchor{north}{\northwest\pgf@x=0pt }
+ \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{west}{\northwest\pgf@y=0pt }
+ % start drawing
+ \backgroundpath{%
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing}\pgf@circ@Rlen
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}\pgf@circ@Rlen
+ \pgfscope% (for the line width)
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/thickness}\pgflinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\width/2}{-\height/2}}{\pgfpoint{\width/2}{\height/2}}%
+ \pgf@circ@draworfill
+ %% upside mark
+ \ifpgf@circuit@chip@topmark
+ \pgfpathmoveto{\pgfpoint{0.2*\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpatharc{0}{180}{0.2*\pgf@circ@res@left}
+ \fi
+ \pgfusepath{stroke}%
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % Adding the pin number
+ \ifpgf@circuit@chip@shownumbers
+ \pgf@circ@count@a=\numpins\relax
+ \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a
+ % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+ \ifpgf@circuit@chip@straightnumbers
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+ \else
+ \pgfmathsetmacro{\rot}{0}
+ \pgfmathsetmacro{\quadrant}{0}
+ \fi
+ \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+ \def\mytext{\pgfkeysvalueof{/tikz/circuitikz/multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \ifcase\quadrant % rotation 0
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or % rotation -90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or %rotation 180
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or % rotation +90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \fi
+ \endpgfscope
+ \ifdim\pgf@circ@res@other>0pt
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins thickness}\pgflinewidth}
+ \pgf@circ@count@a=\numpins\relax
+ \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \edef\padfrac{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pad fraction}}
+ \ifnum\padfrac>0
+ \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac
+ % left side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % right side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \else
+ % left side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % right side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \fi
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{stroke}
+ \endpgfscope
+ \fi
+ }%
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@dipchip{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\numpins\relax
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % we will create two anchors per pin: the "normal one" like `pin 1` for the
+ % electrical contact, and the "border one" like `bpin 1` for labels.
+ % they will coincide if `external pins width` is set to 0.
+ \expandafter\xdef\csname pgf@anchor@dipchip@pin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@dipchip@bpin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop%
+ }%
+ }
+
+% QFP (quad flat package) chips
+
+\pgfdeclareshape{qfpchip}{
+ \savedmacro\numpins{%
+ \pgf@circ@count@a=\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}%
+ \def\numpins{\the\pgf@circ@count@a}
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=-.5\wd\pgfnodeparttextbox%
+ \pgf@y=-.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by+.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+ \anchor{center}{\origin}
+ \anchor{text}{\centerpoint}% to adjust text
+ \saveddimen\height{%
+ \pgfmathsetlength\pgf@x{((\numpins+2)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf@circ@Rlen/4}%
+ }%
+ \saveddimen\width{%
+ \pgfmathsetlength\pgf@x{((\numpins+2)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf@circ@Rlen/4}%
+ }%
+ \saveddimen{\chipspacing}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing}}}
+ \saveddimen{\extshift}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}}}
+ % standard anchors
+ \savedanchor\northwest{%
+ \pgfmathsetlength\pgf@y{0.5*((\numpins+2)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf@circ@Rlen/4}%
+ \pgf@x=-\pgf@y
+ }
+ \anchor{dot}{\northwest
+ \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing}
+ \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing}
+ }
+ \anchor{nw}{\northwest}
+ \anchor{ne}{\northwest\pgf@x=-\pgf@x}
+ \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{sw}{\northwest\pgf@y=-\pgf@y}
+ \anchor{north west}{\northwest}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{south east}{\northwest\pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{south west}{\northwest\pgf@y=-\pgf@y}
+ \anchor{n}{\northwest\pgf@x=0pt }
+ \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{w}{\northwest\pgf@y=0pt }
+ \anchor{north}{\northwest\pgf@x=0pt }
+ \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{west}{\northwest\pgf@y=0pt }
+ % start drawing
+ \backgroundpath{%
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing}\pgf@circ@Rlen
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}\pgf@circ@Rlen
+ \pgfscope% (for the line width)
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/thickness}\pgflinewidth}
+ %% upside mark
+ \ifpgf@circuit@chip@topmark
+ \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2-\pgf@circ@res@step/2}}
+ \pgfpathlineto{\pgfpoint{-\width/2+\pgf@circ@res@step/2}{\height/2}}
+ \else
+ \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2}}
+ \fi
+ %% rest of the shape
+ \pgfpathlineto{\pgfpoint{\width/2}{\height/2}}
+ \pgfpathlineto{\pgfpoint{\width/2}{-\height/2}}
+ \pgfpathlineto{\pgfpoint{-\width/2}{-\height/2}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ % Adding the pin number
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifpgf@circuit@chip@shownumbers
+ \pgf@circ@count@a=\numpins%
+ \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a
+ % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+ \ifpgf@circuit@chip@straightnumbers
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+ \else
+ \pgfmathsetmacro{\rot}{0}
+ \pgfmathsetmacro{\quadrant}{0}
+ \fi
+ \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+ \def\mytext{\pgfkeysvalueof{/tikz/circuitikz/multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \ifcase\quadrant % rotation 0
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or % rotation -90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or %rotation 180
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or % rotation +90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \fi
+ \endpgfscope
+ \ifdim\pgf@circ@res@other>0pt
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins thickness}\pgflinewidth}
+ \pgf@circ@count@a=\numpins%
+ \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \edef\padfrac{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pad fraction}}
+ \ifnum\padfrac>0
+ \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac
+ % left side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % bottom side pads
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ % right side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % top side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \else
+ % left side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % bottom side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ % right side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % top side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{stroke}
+ \endpgfscope
+ \fi
+ }%
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@qfpchip{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\numpins%
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \expandafter\xdef\csname pgf@anchor@qfpchip@pin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@qfpchip@bpin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop%
+ }%
+ }
+
+%% anchors for DIP
+\def\pgf@circ@dippinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+ \c@pgf@countc=\numpins\relax
+ \divide\c@pgf@countc by 2
+ \ifnum #1 > \the\c@pgf@countc
+ % right side
+ \pgfpoint{\width/2+#2*\extshift}{-\height/2+(\pgf@circ@dip@pin@shift-\c@pgf@countc+#1-1)*\chipspacing}
+ \else
+ \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@dip@pin@shift-#1)*\chipspacing}
+\fi
+}
+
+%% anchors for QFP
+\def\pgf@circ@qfppinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+ \c@pgf@countc=\numpins\relax
+ \divide\c@pgf@countc by 4
+ \ifnum #1 > \the\c@pgf@countc
+ \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 2
+ \ifnum #1 > \the\c@pgf@countb
+ \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 3
+ \ifnum #1 > \the\c@pgf@countb
+ % 3*npins/4 < pin, top side
+ \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift+\c@pgf@countb-#1)*\chipspacing}{\height/2+#2*\extshift}%
+ \else
+ % 2*npins/4 < pin <= 3*npins/4, right side
+ \pgfpoint{\width/2+#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}%
+ \fi
+ \else
+ % npins/4 < pin <= 2*npins/4, bottom side
+ \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}{-\height/2-#2*\extshift}%
+ \fi
+ \else
+ % <= npins/4, left side
+ \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-#1)*\chipspacing}%
+ \fi
+}
+
+
+%% Rotary Switch
+
+\pgfdeclareshape{rotaryswitch}
+{
+ \savedanchor\northeast{%
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{\r*\pgf@circ@Rlen + \pgf@circ@res@temp}
+ }
+ \savedanchor\northwest{%
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{-\r*\pgf@circ@Rlen - (\a<90 ? 1 : 1-2*cos(\a))*\pgf@circ@res@temp}
+ }
+ \savedanchor\central{%
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{(\a<90 ? 0 : cos(\a))*\pgf@circ@res@temp}
+ }
+ % external square limits
+ \savedanchor\extnorthwest{%
+ \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ \pgf@x=.3052\pgf@x % the magic number is 0.25/cos(35)
+ \pgf@x=2.5\pgf@x % external square size
+ \pgf@y=-\pgf@x %square thing when angle=180?
+ }
+ \saveddimen{\width}{\pgfmathsetlength\pgf@x{0.3052*\pgf@circ@Rlen*\ctikzvalof{tripoles/spdt/width}}}
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{multipoles/rotary/shape}}}
+ \savedmacro{\channels}{\def\channels{\ctikzvalof{multipoles/rotary/channels}}}
+ \savedmacro{\angle}{\def\angle{\ctikzvalof{multipoles/rotary/angle}}}
+ \savedmacro{\wiper}{\def\wiper{\ctikzvalof{multipoles/rotary/wiper}}}
+ \savedmacro{\stepa}{\pgfmathsetmacro{\stepa}{2*\ctikzvalof{multipoles/rotary/angle}/(\ctikzvalof{multipoles/rotary/channels}-1)}}
+ % mid of the lever, to stack switches
+ %\anchor{mid}{\midlever}
+ \anchor{mid}{\northwest
+ \pgf@circ@res@temp=-\pgf@x
+ \pgfmathsetlength{\pgf@x}{\pgf@circ@res@temp*(-1+cos(\wiper))}
+ \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp*sin(\wiper)}
+ }
+ % center anchors
+ \anchor{cin}{ \northwest \pgf@y=0pt\advance\pgf@x by \radius}
+ % horizontal angles
+ \anchor{in}{ \northwest \pgf@y=0pt}
+ \anchor{ain}{ \northwest \pgf@y=0pt}
+
+ \anchor{center}{ \central \pgf@y=0pt }
+ \anchor{east}{ \northeast \pgf@y=0pt }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \central \pgf@y=-\pgf@y }
+ \anchor{north}{ \central }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northeast }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northeast \pgf@y=-\pgf@y }
+
+ \anchor{ext center}{ \pgf@y=0pt \pgf@x=0pt \advance\pgf@x by -\width}
+ \anchor{ext east}{ \extnorthwest \pgf@y=0pt \pgf@x=-\pgf@x \advance\pgf@x by -\width}
+ \anchor{ext west}{ \extnorthwest \pgf@y=0pt \advance\pgf@x by -\width}
+ \anchor{ext south}{ \extnorthwest \pgf@x=0pt \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+ \anchor{ext north}{ \extnorthwest \pgf@x=0pt \advance\pgf@x by -\width}
+ \anchor{ext south west}{ \extnorthwest \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+ \anchor{ext north east}{ \extnorthwest \pgf@x=-\pgf@x \advance\pgf@x by -\width}
+ \anchor{ext north west}{ \extnorthwest \advance\pgf@x by -\width}
+ \anchor{ext south east}{ \extnorthwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@right = \width
+ \pgf@circ@res@left = -\width
+
+ \pgfscope %wiper
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\radius\relax
+ \pgf@circ@res@temp=\ctikzvalof{multipoles/rotary/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\wiper}{2\pgf@circ@res@right}}}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+
+ \ifpgf@circ@rotaryarrow
+ \pgfscope % arrow
+ \ifpgf@circ@rotaryarrow@ccw\pgfsetarrowsstart{latexslim}\fi
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % center of cin node
+ \pgftransformrotate{\wiper}
+ \pgfpathmoveto{\pgfpointpolar{50}{1.0\pgf@circ@res@right}}
+ \pgfpatharc{50}{-50}{1.0\pgf@circ@res@right}
+ \ifpgf@circ@rotaryarrow@cw\pgfsetarrowsend{latexslim}\fi
+ \pgfusepath{draw}
+ \endpgfscope
+ \fi
+
+ % \typeout{CHANNELS\space\channels\space ANGLE\space\angle STEPA\space\stepa}
+ \pgf@circ@count@a=\channels\relax
+ \pgfmathsetmacro{\currenta}{-\angle}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % \typeout{LOOPIN\space\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right}
+ \pgfscope
+ \pgftransformshift{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\currenta}{2\pgf@circ@res@right}}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out \the\pgf@circ@count@a}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfmathsetmacro{\currenta}{\currenta+\stepa}
+ % \typeout{LOOPOUT\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right}
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop
+
+ \pgfscope % input
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+ \endpgfscope
+ }
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@rotaryswitch{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\channels\relax
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % we will create two anchors per pin: the "normal one" like `pin 1` for the
+ % electrical contact, and the "border one" like `bpin 1` for labels.
+ % they will coincide if `external pins width` is set to 0.
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@out\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{1}{0}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@cout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{0}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@aout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@sqout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotarysqanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop%
+ }%
+}
+
+\def\pgf@circ@rotaryanchor#1#2#3{% #1: numero del pin; #2: 1 - x pos, 0 - center; #3 0: inner, 1 outer
+ \pgf@circ@res@temp=\width
+ \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+ \pgfmathsetlength{\pgf@x}{2*(\pgf@circ@res@temp+#3*\radius/2)*cos(\myangle))+#2*\radius}
+ \pgfmathsetlength{\pgf@y}{2*(\pgf@circ@res@temp+#3*\radius/2)*sin(\myangle)}
+ \advance\pgf@x by -\pgf@circ@res@temp
+}
+
+\def\pgf@circ@rotarysqanchor#1{% external square anchors
+ \pgf@circ@res@temp=\width
+ \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+ \pgfpointborderrectangle{\pgfpointpolar{\myangle}{1pt}}{\pgfpoint{2.5\pgf@circ@res@temp}{2.5\pgf@circ@res@temp}}
+ \advance\pgf@x by -\pgf@circ@res@temp
+}
+
+% Seven segments displays
+
+\pgfdeclareshape{bare7seg}{
+ \savedmacro{\dotstatus}{\edef\dotstatus{\pgf@circ@sevenseg@dotstate}}
+ \saveddimen{\dotspace}{% the dot is on the right, and occupy the same as the thickness
+ \ifpgf@circ@sevenseg@dot
+ \pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/thickness}}
+ \else
+ \pgf@x=0pt
+ \fi
+ }
+ % The object extension is more or less (-width/2,-width) to (width/2,width)
+ % and adjusted for line thickness (both sides) and eventually the dot
+ \saveddimen{\width}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/width}*\pgf@circ@Rlen}}
+ \saveddimen{\gap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/segment sep}}}
+ \saveddimen{\boxgap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/box sep}}}
+ \savedanchor{\southwest}{% both negative
+ \pgfmathsetlength{\pgf@x}{-0.5*\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ \pgfmathsetlength{\pgf@y}{-\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ }
+ \savedanchor{\northeast}{% both positive
+ \ifpgf@circ@sevenseg@dot
+ \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{seven seg/thickness}}
+ \else
+ \pgf@circ@res@other=0pt
+ \fi
+ \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ +0.5*\ctikzvalof{seven seg/thickness}+\pgf@circ@res@other+\ctikzvalof{seven seg/box sep}}
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ +0.5*\ctikzvalof{seven seg/thickness}+\ctikzvalof{seven seg/box sep}}
+ }
+ \savedanchor{\topright}{% anchor without the box sep and the thickness
+ \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@Rlen}
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@Rlen}
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{north west}{\southwest\pgf@y=-\pgf@y}
+ \anchor{north east}{\northeast}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\southwest}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0pt}
+ \anchor{south}{\southwest\pgf@x=0pt}
+ \anchor{west}{\southwest\pgf@y=0pt}
+ \anchor{a}{\topright\pgf@x=0pt}
+ \anchor{b}{\topright\pgf@y=0.5\pgf@y}
+ \anchor{c}{\topright\pgf@y=-0.5\pgf@y}
+ \anchor{d}{\topright\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{e}{\topright\pgf@x=-\pgf@x\pgf@y=-0.5\pgf@y}
+ \anchor{f}{\topright\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{g}{\pgfpointorigin}
+ \anchor{dot}{\topright\pgf@y=-\pgf@y\advance\pgf@x by \dotspace}
+ \behindbackgroundpath{%
+ \southwest % I do not want the dot here, it will stick out
+ \pgf@circ@res@up = -\pgf@y
+ \pgf@circ@res@down = \pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \pgf@circ@res@left = -\pgf@x
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{multipoles/thickness}\pgflinewidth}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfpathrectanglecorners%
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@left+\dotspace}{\pgf@circ@res@up}}
+ \ifpgf@circ@sevenseg@box
+ \pgf@circ@draworfill
+ \else
+ \pgf@circ@maybefill
+ \fi
+ \endpgfscope
+ \edef\bits{\ctikzvalof{seven seg/bits}}
+ \pgfscope
+ \pfg@circ@sseg@drawbits{\bits}
+ \endpgfscope
+ \pgfscope
+ \ifpgf@circ@sevenseg@dot
+ \pgf@circ@sseg@drawdots
+ \fi
+ \endpgfscope
+ }
+}
+
+\def\pgf@circ@sseg@splitbits#1#2#3#4#5#6#7\relax{%split the seven bits
+ \edef\@@a{#1}\edef\@@b{#2}\edef\@@c{#3}\edef\@@d{#4}\edef\@@e{#5}\edef\@@f{#6}\edef\@@g{#7}%
+}
+\def\pgf@circ@sseg@drawone#1#2#3#4#5{% #1 on off the x1, y1, x2 , y2
+ \ifnum #1 > 0\relax
+ \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+ \else
+ \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+ \fi
+ \pgfpathmoveto{\pgfpoint{#2}{#3}}
+ \pgfpathlineto{\pgfpoint{#4}{#5}}
+ \pgfusepath{draw}
+}
+\def\pfg@circ@sseg@drawbits#1{% #1 must be 7 bits
+ \expandafter\pgf@circ@sseg@splitbits#1\relax% a bit of magic...
+ \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}}
+ \pgfsetlinewidth{\ctikzvalof{seven seg/thickness}}
+ % \pgfsetroundcap
+ \pgfsetarrowsstart{Triangle Cap[]}
+ \pgfsetarrowsend{Triangle Cap[]}
+ % segments
+ \pgf@circ@sseg@drawone{\@@a}{-\width/2+\gap}{\width}{\width/2-\gap}{\width}
+ \pgf@circ@sseg@drawone{\@@b}{\width/2}{\width-\gap}{\width/2}{0pt+\gap}
+ \pgf@circ@sseg@drawone{\@@c}{\width/2}{0pt-\gap}{\width/2}{-\width+\gap}
+ \pgf@circ@sseg@drawone{\@@d}{\width/2-\gap}{-\width}{-\width/2+\gap}{-\width}
+ \pgf@circ@sseg@drawone{\@@e}{-\width/2}{-\width+\gap}{-\width/2}{0pt-\gap}
+ \pgf@circ@sseg@drawone{\@@f}{-\width/2}{0pt+\gap}{-\width/2}{\width-\gap}
+ \pgf@circ@sseg@drawone{\@@g}{-\width/2+\gap}{0pt}{\width/2-\gap}{0pt}
+}
+\def\pgf@circ@sseg@drawdots{% dots
+ \edef\what{empty}
+ \ifx\what\pgf@circ@sevenseg@dotstate
+ % do nothing
+ \else
+ \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}}
+ \edef\what{off}
+ \ifx\what\pgf@circ@sevenseg@dotstate
+ % dot off
+ \pgfsetfillcolor{\ctikzvalof{seven seg/color off}}
+ \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+ \else
+ % dot on
+ \pgfsetfillcolor{\ctikzvalof{seven seg/color on}}
+ \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+ \fi
+ \pgfpathcircle{\pgfpoint{\width/2+2*\pgf@circ@res@other}{-\width}}{\pgf@circ@res@other}
+ \pgfusepath{draw,fill}
+ \fi
+}
+%%%---------- close: tex/pgfcircmultipoles
+
+%%%%%%%%%%% Springe nach tex/pgfcirclabel
+%%%---------- open: tex/pgfcirclabel.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{annotation/.style = { a=#1 } }
+\ctikzset{a/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1}
+ \ctikzsetvalof{bipole/annotation/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{annotation above/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{a^/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{annotation below/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+\ctikzset{a_/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+
+% This is to adjust spacing for the labels so that they are not cramped on components
+\def\pgf@circ@ls{.75ex} % labelspace to have just one point to change
+
+\def\pgf@circ@drawlabels#1{
+ \pgfextra{
+ % This function will be called with argument #1 equal
+ % to "label" or "annotation" form pgfcircpath.tex.
+ % pgf@circ@direction is the direction of the path,
+ % its value is set in pgfcircpath.tex
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \pgfmathround{\pgfmathresult} % avoid precision loss errors
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/position}}
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ % \typeout{INI: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc}
+ %
+ % normalize the angle values
+ %
+ \pgfmathmod{\pgf@circ@labanc}{360}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is inverted, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ %
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is mirrored, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ % \typeout{FIN: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc}
+ }
+ %Firstly, place a coordinate directly at the edge of the shape
+ (\ctikzvalof{bipole/name}.\pgf@circ@temp) coordinate (labelcoor)
+ %now decide, which labels should be drawn
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabels{#1}
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabels{#1}
+ \else% smart
+ \pgf@circ@drawsmartlabels{#1}
+ \fi
+ \fi
+}
+
+
+\def\pgf@circ@drawsmartlabels#1{
+ \pgfextra{
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70
+ \pgf@circ@drawrotlabels{#1}
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ }
+
+
+\def\pgf@circ@drawrotlabels#1{
+ \pgfextra{
+ % scale the distances in function of zoom, so that they are not
+ % dependent on it but on font size. Thanks to @marmot
+ % https://tex.stackexchange.com/a/476018/38080
+ % the coeffcient is adjusted so that the distance is more or less
+ % the same for rotated labels and straight ones (although it will
+ % depend on the font, so it's not exact).
+ \pgfgettransformentries{\tmp}{\tmp}{\tmp}{\myscale}{\tmp}{\tmp}
+ \pgfmathsetlength\pgf@circ@res@temp{1.5*\pgf@circ@ls/\myscale}
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ %we need some more space for placement below, due to mid-anchor
+ \else % we do not have <= in \ifnum...
+ \pgf@circ@res@temp=1.5\pgf@circ@res@temp
+ \fi
+ %Calculate rotation of the label from direction and strip decimals
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ % rotate the label at second or third quadrant:
+ \ifnum \pgfcirclabrot > 90 \ifnum \pgfcirclabrot < 270
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %invert the space relationships due to rotated strings
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ \pgf@circ@res@temp=1.5\pgf@circ@res@temp
+ \fi
+ \fi\fi
+ \pgfmathparse{\ctikzvalof{bipole/#1/position}>0?\pgf@circ@direction+90:\pgf@circ@direction-90}
+ \edef\pgf@circ@labposangle{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ % reset cm is not working correctly here
+ (labelcoor)++(\pgf@circ@labposangle:\the\pgf@circ@res@temp) coordinate(labelcoor)
+ node[anchor=mid, rotate=\pgfcirclabrot](\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@drawreglabels#1{
+ %Now calculate all shape positions
+ %Use mid-anchor at x-axis and base-anchor at y-axis, respectively.
+ %All points between will be addressed by angled-anchors:
+ \pgfextra{
+ % scale ex-distance to make it independent on scale
+ % thanks @marmot see https://tex.stackexchange.com/a/476018/38080
+ \pgfgettransformentries{\tmp}{\tmp}{\tmp}{\myscale}{\tmp}{\tmp}
+ \pgfmathsetlength\pgf@circ@res@temp{\pgf@circ@ls/\myscale}
+ \pgfmathadd{\pgf@circ@labanc}{90}
+ \pgfmathround{\pgfmathresult}
+ \def\pgf@circ@labanctext{\pgf@circ@labanc}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathparse{mod(\pgf@circ@temp,180)>135?mod(\pgf@circ@temp,180)-180:mod(\pgf@circ@temp,180)}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ %Values around 90 are at both y-axis
+ \ifnum \pgfcircmathresult > 84 \ifnum \pgfcircmathresult< 96
+ \pgfextra{\edef\pgf@circ@labpos{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}}
+ \ifnum \pgf@circ@labpos > 180
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanctext{mid west}}
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{mid east}}
+ \fi
+ \else
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanctext{mid east}}
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{mid west}}
+ \fi
+ \fi
+ \fi\fi
+ %Values between -5 and 5 are at pos /neg x-axis
+ \pgfextra{\def\uffa{}\newdimen\realshift\realshift=\dimexpr1pt\relax}
+ \ifnum \pgfcircmathresult <6 \ifnum \pgfcircmathresult > -6
+ \ifnum \ctikzvalof{bipole/#1/position} < 0
+ \ifnum \pgf@circ@labanc > 90
+ % using base coordinate instead of south to naturally align
+ % symbols with descendants; but this invalidate the effect of
+ % the inner sep, so recover it by shifting the anchor
+ % reset cm is not working sometime, use @marmot solution
+ % see https://tex.stackexchange.com/a/476018/38080
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{north}}%north
+ \fi
+ \else
+ \ifnum \pgf@circ@labanc < 90
+ % shift, as above
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \ifnum \pgf@circ@labanc > 180
+ % this shouldn't happen, but somehow it does (270 degree anchors)
+ % shift, as above
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{north}}%north
+ \fi
+ \fi
+ \fi
+ \fi\fi
+ (labelcoor) node[anchor=\pgf@circ@labanctext,
+ inner sep=0.5\pgf@circ@res@temp, outer sep=0pt,
+ ](\ctikzvalof{bipole/name}#1){\strut\pgf@circ@finallabels{#1}%
+ }
+}
+
+\def\pgf@circ@finallabels#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$%
+ \fi%
+}
+
+\ctikzset{text/.style = { t=#1 } }
+\ctikzset{t/.code = {
+ \ctikzsetvalof{bipoles/twoport/text}{#1}
+}}
+
+%%%% Stacked labels
+%
+% stacked labels by Romano Giannetti romano@rgtti.com
+% heavily based on Claudo Fiandrinos's https://tex.stackexchange.com/a/65792/38080
+% \expandafter trick inspired by Matthew Leingang's https://tex.stackexchange.com/a/12272/38080
+%
+% labels are in a tabular, globally aligned:
+% vertically with key l2 valign (default c)
+% c: center t: top b: bottom
+% horizontally with key l2 align (default l)
+% l: left c: centered r: right
+% you can switch sides using l2_=... and l2^=...
+% syntax is l2_ = line1 and line2 (same for l2^)
+%
+\ctikzset{%
+ l2 valign/.store in=\ltwo@valign, l2 valign=c,
+ l2 halign/.store in=\ltwo@halign, l2 halign=l,
+}
+\ctikzset{l2base/.code n args={2}{
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=%
+ \bgroup
+ \setlength{\tabcolsep}{2pt}%
+ \def\ltwo@tabu{\tabular[\ltwo@valign]}%
+ \expandafter\ltwo@tabu\expandafter{\ltwo@halign}%
+ #1\\ #2%
+ \endtabular
+ \egroup
+ }%
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#2}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+\ctikzset{l2/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 above/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2^/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 below/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+\ctikzset{l2_/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+%%%---------- close: tex/pgfcirclabel
+%%%%%%%%%%% Springe nach tex/pgfcircvoltage
+%%%---------- open: tex/pgfcircvoltage.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi
+ \fi
+ \ifpgf@circ@oldvoltagedirection
+ \ifpgf@circuit@bipole@iscurrent\ifpgf@circ@fixbatteries
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi\fi
+ \else
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@bipole@current@backward
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi\fi\fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+% american voltage font selection and symbol definition
+% the default font command is {} --- nothing
+\def\pgf@circ@avfont{\ctikzvalof{voltage/american font}}
+%
+% plus and minus symbols (default is $+$ and $-$, see pgfcirc.defines.tex)
+% notice that the double braces are needed to be able
+% to use \boldmath in the font (although it is semi-deprecated...)
+%
+\def\pgf@circ@avplus{\ctikzvalof{voltage/american plus}}
+\def\pgf@circ@avminus{\ctikzvalof{voltage/american minus}}
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {
+ \pgfkeysifdefined{/tikz/circuitikz/bipoles/voltage/straight label distance}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {%calculate default value from part height
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/height}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{0.5*\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/height}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen+0.2\pgf@circ@Rlen)}
+ }
+ {
+ \edef\tmpdistfromline{(.5\pgf@circ@Rlen)} %fallback to fixed value
+ }
+ }
+ }
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distacefromnode{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}} }
+ { \edef\distacefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ \pgfmathsetmacro{\bumpb}{\bumpb + \shiftv} %% adjust the bump is shift
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathsetmacro{\shiftv}{-\shiftv}
+ \fi
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathsetmacro{\shiftv}{-\shiftv}
+ \fi
+ }
+ % %\pgf@circ@Rlen/\pgfkeysvalueof{/tikz/circuitikz/current arrow scale} is equal to the length of the currarrow
+ coordinate (pgfcirc@midtmp) at ($(\tikztostart) ! \pgf@circ@Rlen/\pgfkeysvalueof{/tikz/circuitikz/current arrow scale} ! (anchorstartnode)$) %absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorstartnode)$)
+
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@midtmp) ! -\distfromline ! \pgf@circ@voltage@angle:(anchorstartnode)$)
+ coordinate (pgfcirc@midtmp) at ($(\tikztotarget) ! \pgf@circ@Rlen/\pgfkeysvalueof{/tikz/circuitikz/current arrow scale} ! (anchorendnode)$)%absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorendnode)$)
+
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@midtmp) ! \distfromline ! \pgf@circ@voltage@angle : (anchorendnode)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@Vto) ! \shiftv!90 : (anchorendnode)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@Vfrom) ! \shiftv!-90 : (anchorstartnode)$)
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ \else
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@Vto) ! -\shiftv!90 : (anchorendnode)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@Vfrom) ! -\shiftv!-90 : (anchorstartnode)$)
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@straight
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) --(pgfcirc@Vfrom) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \else
+ (pgfcirc@Vfrom) --(pgfcirc@Vto) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ \fi
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+\def\pgf@circ@drawvoltagegenerator{
+ % the following is affected indirectly by voltage/shift, you can move the arrow with voltage/bump a.
+ % it's not perfect, but I can't find the way to do it correctly...
+ \pgfextra{
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ \edef\bumpa{\ctikzvalof{voltage/bump a}}
+ \pgfmathsetmacro{\bumpaplus}{\bumpa + \shiftv}
+ }
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vfrom) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vto) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vfrom) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vto) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vto)
+ \fi
+ \else% american voltage
+ \ifpgf@circuit@bipole@voltageoutsideofsymbol
+ % if it is a battery, must put + and -
+
+ \ifpgf@circ@fixbatteries
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ \else
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ \else
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine
+\def\pgf@circ@drawvoltage{% node name
+ \pgfextra{ %WARNING: indentation is probably wrong
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ % adjust the label distance to the shift.
+ \pgfmathsetmacro{\eudistplus}{\eudist+\shiftv}
+
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ }%end pgfextra
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+
+ % (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where) %Zeile sinnlos!?
+ \ifpgf@circuit@bipole@voltage@straight
+ coordinate (Vlab) at ($(pgfcirc@Vto)!0.5!(pgfcirc@Vfrom) $)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt]
+ at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \else
+ coordinate (Vlab) at ($(\ctikzvalof{bipole/name}.center) !
+ \ifpgf@circuit@europeanvoltage
+ \eudistplus
+ \else
+ \ctikzvalof{voltage/american label distance}
+ \fi !
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)$)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt] at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \fi
+}%end drawvoltages
+%%%---------- close: tex/pgfcircvoltage
+%%%%%%%%%%% Springe nach tex/pgfcirccurrent
+%%%---------- open: tex/pgfcirccurrent.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ %reverse current direction for voltage sources
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@isvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below }
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \fi\fi\fi
+ }
+}
+
+\ifpgf@circ@oldvoltagedirection
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+%% Output routine
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw current at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@current@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@current@backward
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \fi
+ coordinate[currarrow,pos=\ctikzvalof{current/distance},rotate=\pgf@circ@ffffff](Iarrow)
+ (Iarrow.\pgf@circ@bipole@current@label@where) node[anchor=\pgf@circ@dir]{\pgf@circ@finallabels{current/label}}
+}
+
+%%%---------- close: tex/pgfcirccurrent
+%%%%%%%%%%% Springe nach tex/pgfcircflow
+%%%---------- open: tex/pgfcircflow.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% flow handling
+
+%% Options
+\ctikzset{f^>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/curflowrent/y position = above
+ }
+}
+
+\ctikzset{f_>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f>^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f>_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f^</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f_</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f<^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f<_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f</.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = backward} }
+\ctikzset{f_/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = below } }
+\ctikzset{f>/.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = forward } }
+\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = above } }
+
+\ctikzset{f/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/flow/label/name=#1}
+ \ctikzsetvalof{bipole/flow/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}
+}
+
+%% Output routine
+\def\pgf@circ@drawflow{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@bipole@flow@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@flow@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw flow at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@flow@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \pgfextra{
+ \ifpgf@circuit@bipole@flow@backward
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \else
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \fi
+ }
+ coordinate[flowarrow,pos=\ctikzvalof{flow/distance},rotate=\pgf@circ@ffffff,yshift=\flow@offset](Farrowpos)
+ (Farrowpos.\pgf@circ@bipole@flow@label@where) node[anchor=\pgf@circ@dir]{ \pgf@circ@finallabels{flow/label}}
+}
+
+%%%---------- close: tex/pgfcircflow
+
+% notice that the default is nooldvoltagedirection; it's not explicitly set to allow for the warning
+\ExecuteOptions{nofetbodydiode, nofetsolderdot, europeancurrents, europeanvoltages,americanports, americanresistors, cuteinductors ,europeangfsurgearrester, nosiunitx, noarrowmos, smartlabels}
+
+\ProcessOptions\relax
+
+%%%%%%%%%%% Springe nach tex/pgfcircpath
+%%%---------- open: tex/pgfcircpath.tex
+
+\def\pgf@circ@direction{0.0}
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Invert node along path
+\ctikzset{inverted/.is choice}
+\ctikzset{invert value/.initial=1}
+\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}}
+\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}}
+\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
+\newif\ifpgf@circuit@bipole@inverted
+\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted}
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90,
+ bipole/inverted=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+%% Helper function for path-function to ensure using anchors between nodes
+\def\set@explicit@center@anchor#1{
+ \pgfutil@ifundefined{pgf@sh@ns@#1}
+ {
+ %This coordinate is no node(but a relative position or a coordinate), no further handling needed
+ }{
+ \pgfutil@in@.{#1}
+ \ifpgfutil@in@
+ % Anchor is used, do nothing!
+ \else%
+ \let\tikz@moveto@waiting=\relax
+ \pgfpathmoveto{\tikz@last@position}%force movement, because tikz@moveto@waiting
+ \edef#1{#1.center}%ensure using center anchor
+ \fi
+}
+}
+
+
+%% Generic bipole path
+\def\pgf@circ@bipole@path#1#2{
+
+ \pgfextra{
+ \set@explicit@center@anchor{\tikztostart}
+ \set@explicit@center@anchor{\tikztotarget}
+ \pgfsyssoftpath@getcurrentpath{\myp@th}%% save current path to extend after calculation of correct start/end coordinates
+ \ctikzset{bipole/kind = #1}
+ \edef\pgf@temp{\ctikzvalof{bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #2\pgf@circ@rand} % create it
+ \fi
+ }
+
+ (\tikztostart) coordinate (\ctikzvalof{bipole/name}start)%necessary to get correct coordinates in the case of relative start/end or constructions like ((node1)-|(node2))
+ (\tikztotarget) coordinate (\ctikzvalof{bipole/name}end)
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathround{\pgfmathresult}
+ \edef\pgf@circ@direction{\pgfmathresult}%Calculate direction(angle) of path
+ \pgfsyssoftpath@setcurrentpath{\myp@th}
+ }
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ --($(\ctikzvalof{bipole/name}start) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}end)$) %ugly workaround to get correct linejoins(node breaks path?)
+ \fi
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)%%positio of middle node
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifpgf@circuit@bipole@inverted
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.right)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.left)
+ \fi
+ \else
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.left)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.right)
+ \fi
+ \fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (anchorstartnode)
+ (anchorendnode) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi
+ \pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ \pgf@circ@ifkeyempty{bipole/flow/label/name}\else\pgf@circ@drawflow\fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ (\ctikzvalof{bipole/name}end)%Move to end of path
+ \else
+ ($(\ctikzvalof{bipole/name}end) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}start)$) -- (\ctikzvalof{bipole/name}end)%ugly workaround to get correct linejoins(node breaks path?)
+ %tikztostart and tikztotarget could not be used, because it would break if target coordinate is something like (node1-|node2)
+
+ \fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ \tikztonodes%draw pending nodes an path
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.initial=none}
+\ctikzset{bipole/nodes/right/.initial=none}
+\tikzset{bipole nodes/.style n args={2}{%
+ \circuitikzbasekey/bipole/nodes/left=#1,
+ \circuitikzbasekey/bipole/nodes/right=#2
+ }
+}
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+
+% rectjoinfill workarounds
+
+\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{none}}
+ \ifx\pgf@temp\pgf@circ@temp\else(\tikztostart) node[\pgf@circ@temp] {}\fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} }
+ \ifx\pgf@temp\pgf@circ@temp\else(\tikztotarget) node[\pgf@circ@temp] {}\fi
+}
+
+%% Path definitions
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@sresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{thermistor}{#1}\else\pgf@circ@bipole@path{resistivesens}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@capacitivesens@path#1{\pgf@circ@bipole@path{capacitivesens}{#1}}
+\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@batteryone@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@batterytwo@path#1{\pgf@circ@bipole@path{battery2}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@cutechoke@path#1{\pgf@circ@bipole@path{cutechoke}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@inductivesens@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductivesens@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductivesens@path{#1}%
+ \else%
+ \pgf@circ@americaninductivesens@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@europeaninductivesens@path#1{\pgf@circ@bipole@path{sfullgeneric}{#1}}
+\def\pgf@circ@americaninductivesens@path#1{\pgf@circ@bipole@path{samericaninductor}{#1}}
+\def\pgf@circ@cuteinductivesens@path#1{\pgf@circ@bipole@path{scuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@bulb@path#1{\pgf@circ@bipole@path{bulb}{#1}}
+\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
+\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
+\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@nos@path#1{\pgf@circ@bipole@path{nos}{#1}}
+\def\pgf@circ@ncs@path#1{\pgf@circ@bipole@path{ncs}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@ncpushbutton@path#1{\pgf@circ@bipole@path{ncpushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@oscope@path#1{\pgf@circ@bipole@path{oscope}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
+\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
+\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@mstline@path#1{\pgf@circ@bipole@path{mstline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
+\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
+\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@bandstop@path#1{\pgf@circ@bipole@path{bandstop}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+%%Mechanical
+\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
+\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
+\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}
+\def\pgf@circ@viscoe@path#1{\pgf@circ@bipole@path{viscoe}{#1}}
+
+%% Styles
+
+\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
+\def\compattikzset#1{\tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
+\compattikzset{viscoe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@viscoe@path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batteryone@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batterytwo@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\compattikzset{cute choke/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cutechoke@path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{mstline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mstline@path, l=#1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source = #1, \circuitikzbasekey/bipole/is current=true}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source = #1, \circuitikzbasekey/bipole/is current=true}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+\compattikzset{bulb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bulb@path, l=#1}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\compattikzset{bandstop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandstop@path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+% % % % % %
+% % Begin of Diodes
+% % % % % %
+
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@fullbidirectionaldiode@path#1{\pgf@circ@bipole@path{fullbidirectionaldiode}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+\def\pgf@circ@emptybidirectionaldiode@path#1{\pgf@circ@bipole@path{emptybidirectionaldiode}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+\compattikzset{full bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullbidirectionaldiode@path}}
+\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
+\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{empty bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptybidirectionaldiode@path}}
+\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
+\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
+%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+\compattikzset{bidirectionaldiode/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{biDo/.style = {\comnpatname empty bidirectionaldiode}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{biD*/.style = {\comnpatname full bidirectionaldiode}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{biD/.style = {\comnpatname bidirectionaldiode}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+\compattikzset{biD-/.style = {\comnpatname empty bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{normal closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{normal open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{nopb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{normally open push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{ncpb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}}
+\compattikzset{normally closed push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}}
+\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}
+\tikzset{oscope/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@oscope@path, l=#1}}
+
+% cute switches
+%% closed cute switch
+\def\pgf@circ@cuteclosedswitch@path#1{\pgf@circ@bipole@path{cuteclosedswitch}{#1}}
+\compattikzset{cute closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosedswitch@path, l=#1}}
+\compattikzset{ccsw/.style= {\comnpatname cute closed switch= #1}}
+
+%% open cute switch
+\def\pgf@circ@cuteopenswitch@path#1{\pgf@circ@bipole@path{cuteopenswitch}{#1}}
+\compattikzset{cute open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopenswitch@path, l=#1}}
+\compattikzset{cosw/.style= {\comnpatname cute open switch= #1}}
+
+%% closing cute switch
+\def\pgf@circ@cuteclosingswitch@path#1{\pgf@circ@bipole@path{cuteclosingswitch}{#1}}
+\compattikzset{cute closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosingswitch@path, l=#1}}
+\compattikzset{ccgsw/.style= {\comnpatname cute closing switch= #1}}
+
+%% opening cute switch
+\def\pgf@circ@cuteopeningswitch@path#1{\pgf@circ@bipole@path{cuteopeningswitch}{#1}}
+\compattikzset{cute opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopeningswitch@path, l=#1}}
+\compattikzset{cogsw/.style= {\comnpatname cute opening switch= #1}}
+
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, l=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path, i=#1}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path, v=#1}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+ \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} }
+ \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} }
+ \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+%current sources
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+ \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+ \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+ \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+% cute sources
+\def\pgf@circ@vsourceC@path#1{\pgf@circ@bipole@path{vsourceC}{#1}}
+\compattikzset{cute european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceC/.style= {\comnpatname cute european voltage source= #1}}
+\compattikzset{ceV/.style= {\comnpatname cute european voltage source= #1}}
+
+\def\pgf@circ@isourceC@path#1{\pgf@circ@bipole@path{isourceC}{#1}}
+\compattikzset{cute european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceC/.style= {\comnpatname cute european current source= #1}}
+\compattikzset{ceI/.style= {\comnpatname cute european current source= #1}}
+
+\def\pgf@circ@cvsourceC@path#1{\pgf@circ@bipole@path{cvsourceC}{#1}}
+\compattikzset{cute european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{cvsourceC/.style= {\comnpatname cute european controlled voltage source= #1}}
+\compattikzset{cceV/.style= {\comnpatname cute european controlled voltage source= #1}}
+
+\def\pgf@circ@cisourceC@path#1{\pgf@circ@bipole@path{cisourceC}{#1}}
+\compattikzset{cute european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{cisourceC/.style= {\comnpatname cute european controlled current source= #1}}
+\compattikzset{cceI/.style= {\comnpatname cute european controlled current source= #1}}
+
+% noise sources
+\def\pgf@circ@vsourceN@path#1{\pgf@circ@bipole@path{vsourceN}{#1}}
+\compattikzset{noise voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceN@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceN/.style= {\comnpatname noise voltage source= #1}}
+\compattikzset{nV/.style= {\comnpatname noise voltage source= #1}}
+
+\def\pgf@circ@isourceN@path#1{\pgf@circ@bipole@path{isourceN}{#1}}
+\compattikzset{noise current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceN@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceN/.style= {\comnpatname noise current source= #1}}
+\compattikzset{nI/.style= {\comnpatname noise current source= #1}}
+
+% resistive sensor american style
+\def\pgf@circ@resistivesens@path#1{\pgf@circ@bipole@path{resistivesens}{#1}}
+\compattikzset{american resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistivesens@path, l=#1}}
+\compattikzset{european resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{resistive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@sresistor@path, l=#1}}
+\compattikzset{sR/.style= {\comnpatname resistive sensor= #1}}
+
+\compattikzset{capacitive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitivesens@path, l=#1}}
+\compattikzset{sC/.style= {\comnpatname capacitive sensor= #1}}
+
+\compattikzset{cute inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductivesens@path, l=#1}}
+\compattikzset{european inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductivesens@path, l=#1}}
+\compattikzset{american inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductivesens@path, l=#1}}
+\compattikzset{inductive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductivesens@path, l=#1}}
+\compattikzset{sL/.style= {\comnpatname inductive sensor= #1}}
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+% activate the to-style crossing
+\def\pgf@circ@crossing@path#1{\pgf@circ@bipole@path{crossing}{#1}}
+\compattikzset{crossing/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@crossing@path, l=#1}}
+\compattikzset{xing/.style= {\comnpatname crossing= #1}}
+
+%% loudspeaker and microphone
+
+\def\pgf@circ@loudspeaker@path#1{\pgf@circ@bipole@path{loudspeaker}{#1}}
+\compattikzset{loudspeaker/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@loudspeaker@path, l=#1}}
+
+\def\pgf@circ@mic@path#1{\pgf@circ@bipole@path{mic}{#1}}
+\compattikzset{mic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mic@path, l=#1}}
+
+% more instrument
+\def\pgf@circ@rmeter@path#1{\pgf@circ@bipole@path{rmeter}{#1}}
+\compattikzset{rmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeter@path, l=#1}}
+\def\pgf@circ@rmeterwa@path#1{\pgf@circ@bipole@path{rmeterwa}{#1}}
+\compattikzset{rmeterwa/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeterwa@path, l=#1}}
+\def\pgf@circ@smeter@path#1{\pgf@circ@bipole@path{smeter}{#1}}
+\compattikzset{smeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@smeter@path, l=#1}}
+% current loop probes
+\def\pgf@circ@iloop@path#1{\pgf@circ@bipole@path{iloop}{#1}}
+\compattikzset{iloop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop@path, l=#1}}
+\def\pgf@circ@iloop2@path#1{\pgf@circ@bipole@path{iloop2}{#1}}
+\compattikzset{iloop2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop2@path, l=#1}}
+% qucs-style probes
+\def\pgf@circ@qiprobe@path#1{\pgf@circ@bipole@path{qiprobe}{#1}}
+\compattikzset{qiprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qiprobe@path, l=#1}}
+\def\pgf@circ@qvprobe@path#1{\pgf@circ@bipole@path{qvprobe}{#1}}
+\compattikzset{qvprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qvprobe@path, l=#1}}
+\def\pgf@circ@qpprobe@path#1{\pgf@circ@bipole@path{qpprobe}{#1}}
+\compattikzset{qpprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qpprobe@path, l=#1}}
+
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@inverted
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \pgfmathround{\pgfmathresult}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{elmech}
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{hemt}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{nigfetebulk}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{pigfetebulk}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+\pgf@circ@definetranspath{Lpigbt}
+\pgf@circ@definetranspath{Lnigbt}
+%%%---------- close: tex/pgfcircpath
+
+\ifpgf@circ@siunitx
+ \RequirePackage{xstring}[2009/03/13]
+ %\expandafter\let\csname angstrom\endcsname\relax
+ \RequirePackage{siunitx}
+\fi
+
+\ifpgf@circ@explicitvdir\else
+ \PackageWarningNoLine{circuitikz}{%
+ You did not specify one of the voltage directions:\MessageBreak
+ \space\space oldvoltagedirection, nooldvoltagedirection, \MessageBreak
+ \space\space RPvoltages or EFvoltages \MessageBreak
+ Default directions may have changed, \MessageBreak
+ please check the manual%
+ }
+\fi
+
+\newenvironment{circuitikz}{\begin{tikzpicture}}{\end{tikzpicture}}
+%override (unused) circuitikz environment for compability to externalization)
+\let\circuitikz\tikzpicture
+\let\endcircuitikz\endtikzpicture
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
new file mode 100644
index 0000000000..ea827867ef
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/circuitikz.sty
@@ -0,0 +1,375 @@
+% Copyright 2007-2019 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+\NeedsTeXFormat{LaTeX2e}
+
+\def\pgfcircversion{0.9.4}
+\def\pgfcircversiondate{2019/08/30}
+
+\ProvidesPackage{circuitikz}%
+[\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion]
+
+%% Version 3.0 of pgf/TikZ is required
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+%
+% "arrows" library is deprecated, and behave badly with
+% arrows on short paths. Change to the new arrows.meta
+% In pfgcirc.define, we will add the old definition of
+% latex' which we have lost in the transition
+%
+\usetikzlibrary{arrows.meta, bending}
+
+% The options are listed in the manual in this order
+
+\DeclareOption{europeanvoltage}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{straightvoltages}{
+ \pgf@circuit@bipole@voltage@straighttrue
+}
+
+\DeclareOption{americanvoltage}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrent}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrent}{
+ \ctikzset{current = american}
+}
+
+
+
+\DeclareOption{americanresistor}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistor}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductor}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductor}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductor}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanport}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanport}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{european}{
+ \ctikzset{voltage=european} \ctikzset{current=european} \ctikzset{inductor=european}
+ \ctikzset{resistor=european} \ctikzset{logic ports=european} \ctikzset{gas filled surge arrester choice = european}
+}
+
+\DeclareOption{american}{
+ \ctikzset{voltage=american} \ctikzset{current=american} \ctikzset{resistor=american} \ctikzset{inductor=american} \ctikzset{gas filled surge arrester choice = american}
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{fulldiodes}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiodes}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{europeanvoltages}{
+ \ctikzset{voltage=european}
+}
+
+\DeclareOption{americanvoltages}{
+ \ctikzset{voltage=american}
+}
+
+\DeclareOption{europeancurrents}{
+ \ctikzset{current = european}
+}
+
+\DeclareOption{americancurrents}{
+ \ctikzset{current = american}
+}
+
+\DeclareOption{americanresistors}{
+ \ctikzset{resistor = american}
+}
+
+\DeclareOption{europeanresistors}{
+ \ctikzset{resistor = european}
+}
+
+\DeclareOption{americaninductors}{
+ \ctikzset{inductor = american}
+}
+
+\DeclareOption{europeaninductors}{
+ \ctikzset{inductor = european}
+}
+
+\DeclareOption{cuteinductors}{
+ \ctikzset{inductor = cute}
+}
+
+\DeclareOption{americanports}{
+ \ctikzset{logic ports = american}
+}
+
+\DeclareOption{europeanports}{
+ \ctikzset{logic ports = european}
+}
+
+\DeclareOption{americangfsurgearrester}{
+ \ctikzset{gas filled surge arrester choice = american}
+}
+
+\DeclareOption{europeangfsurgearrester}{
+ \ctikzset{gas filled surge arrester choice = european}
+}
+
+\DeclareOption{siunitx}{
+ \pgf@circ@siunitxtrue
+}
+
+\DeclareOption{nosiunitx}{
+ \pgf@circ@siunitxfalse
+}
+
+\DeclareOption{fulldiode}{
+ \ctikzset{diode = full}
+}
+
+\DeclareOption{emptydiode}{
+ \ctikzset{diode = empty}
+}
+
+\DeclareOption{strokediode}{
+ \ctikzset{diode = stroke}
+}
+
+\DeclareOption{arrowmos}{
+ \pgf@circuit@mos@arrowstrue
+}
+
+\DeclareOption{noarrowmos}{
+ \pgf@circuit@mos@arrowsfalse
+}
+
+\DeclareOption{fetbodydiode}{
+ \pgf@circuit@fet@bodydiodetrue
+}
+
+\DeclareOption{nofetbodydiode}{
+ \pgf@circuit@fet@bodydiodefalse
+}
+
+\DeclareOption{fetsolderdot}{
+ \pgf@circuit@fet@solderdottrue
+}
+
+\DeclareOption{nofetsolderdot}{
+ \pgf@circuit@fet@solderdotfalse
+}
+
+\DeclareOption{emptypmoscircle}{
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+
+\DeclareOption{lazymos}{
+ \ctikzset{tripoles/nmos/width=.5}
+ \ctikzset{tripoles/nmos/gate height=.35}
+ \ctikzset{tripoles/nmos/base height=.35}
+ \ctikzset{tripoles/nmos/height/.initial=1.2}
+ \ctikzset{tripoles/nmos/base width=.5}
+ \ctikzset{tripoles/nmos/gate width=.65}
+
+ \ctikzset{tripoles/pmos/width=.5}
+ \ctikzset{tripoles/pmos/gate height=.35}
+ \ctikzset{tripoles/pmos/base height=.35}
+ \ctikzset{tripoles/pmos/height/.initial=1.2}
+ \ctikzset{tripoles/pmos/base width=.5}
+ \ctikzset{tripoles/pmos/gate width=.65}
+
+ \pgf@circuit@pmos@emptycircletrue
+}
+
+\DeclareOption{straightlabels}{
+ \ctikzset{label/align = straight}
+}
+
+\DeclareOption{rotatelabels}{
+ \ctikzset{label/align = rotate}
+}
+
+\DeclareOption{smartlabels}{
+ \ctikzset{label/align = smart}
+}
+
+\DeclareOption{compatibility}{
+ \pgf@circuit@compattrue
+}
+
+\DeclareOption{oldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectiontrue
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriesfalse
+}
+\DeclareOption{nooldvoltagedirection}{
+ \pgf@circ@oldvoltagedirectionfalse
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriesfalse
+}
+
+\DeclareOption{RPvoltages}{
+ \pgf@circ@oldvoltagedirectiontrue
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriestrue
+}
+\DeclareOption{EFvoltages}{
+ \pgf@circ@oldvoltagedirectionfalse
+ \pgf@circ@explicitvdirtrue
+ \pgf@circ@fixbatteriestrue
+}
+
+
+\DeclareOption{betterproportions}{
+ \ctikzset{monopoles/ground/width/.initial=.15}
+
+ \ctikzset{bipoles/resistor/height/.initial=.23}
+ \ctikzset{bipoles/resistor/width/.initial=.6}
+ \ctikzset{bipoles/capacitor/height/.initial=.4}
+ \ctikzset{bipoles/capacitor/width/.initial=.1}
+ \ctikzset{bipoles/potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height/.initial=.6}
+ \ctikzset{bipoles/photoresistor/height 2/.initial=.23}
+ \ctikzset{bipoles/photoresistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistor/main/.initial=.7}
+ \ctikzset{bipoles/thermistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistor/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorntc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorntc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.23/.7
+ \ctikzset{bipoles/thermistorptc/width/.initial=.6}
+ \ctikzset{bipoles/thermistorptc/main/.initial=.7}
+ \ctikzset{bipoles/thermistorptc/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/main/.initial=.7}
+ \ctikzset{bipoles/varistor/height/.initial=.328}%.23/.7
+ \ctikzset{bipoles/varistor/width/.initial=.6}
+ \ctikzset{bipoles/vresistor/height/.initial=.45}
+ \ctikzset{bipoles/vresistor/width/.initial=.6}
+ \ctikzset{bipoles/generic/height/.initial=.23}
+ \ctikzset{bipoles/generic/width/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height/.initial=.6}
+ \ctikzset{bipoles/generic potentiometer/height 2/.initial=.23}
+ \ctikzset{bipoles/generic potentiometer/width/.initial=.6}
+ \ctikzset{bipoles/ageneric/height/.initial=.23}
+ \ctikzset{bipoles/ageneric/width/.initial=.6}
+ \ctikzset{bipoles/memristor/height/.initial=.23}
+ \ctikzset{bipoles/memristor/wave height/.initial=.375}
+ \ctikzset{bipoles/memristor/width/.initial=.60}
+ \ctikzset{bipoles/tgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tgeneric/width/.initial=.6}
+ \ctikzset{bipoles/tfullgeneric/height/.initial=.525}
+ \ctikzset{bipoles/tfullgeneric/width/.initial=.60}
+ \ctikzset{bipoles/fullgeneric/height/.initial=.23}
+ \ctikzset{bipoles/fullgeneric/width/.initial=.6}
+ \ctikzset{bipoles/diode/height/.initial=.3}
+ \ctikzset{bipoles/diode/width/.initial=.25}
+ \ctikzset{bipoles/bidirectionaldiode/height/.initial=.66}
+ \ctikzset{bipoles/bidirectionaldiode/width/.initial=.6}
+ \ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
+ \ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/thyristor/height/.initial=.66}
+ \ctikzset{tripoles/thyristor/height 2/.initial=.3}
+ \ctikzset{tripoles/thyristor/width/.initial=.6}
+ \ctikzset{tripoles/thyristor/diode height/.initial=.3}
+ \ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+ \ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+ \ctikzset{tripoles/triac/height/.initial=.66}
+ \ctikzset{tripoles/triac/width/.initial=.6}
+ \ctikzset{tripoles/triac/diode width left/.initial=.3}
+ \ctikzset{tripoles/triac/diode width right/.initial=.3}
+}
+
+% This is a nice hack that prints all the shapes declared
+% by the package. Very useful for coverage testing and debugging.
+%
+% \let\origpgfdeclareshape=\pgfdeclareshape
+% \def\pgfdeclareshape#1{%
+% \typeout{SHAPE:\space"#1"}%
+% \origpgfdeclareshape{#1}
+% }
+
+
+%%%%%%%%%
+\input pgfcirc.defines.tex
+\input pgfcircutils.tex
+
+\input pgfcircshapes.tex
+\input pgfcircmonopoles.tex
+\input pgfcircbipoles.tex
+\input pgfcirctripoles.tex
+\input pgfcircquadpoles.tex
+\input pgfcircmultipoles.tex
+
+\input pgfcirclabel.tex
+\input pgfcircvoltage.tex
+\input pgfcirccurrent.tex
+\input pgfcircflow.tex
+
+% notice that the default is nooldvoltagedirection; it's not explicitly set to allow for the warning
+\ExecuteOptions{nofetbodydiode, nofetsolderdot, europeancurrents, europeanvoltages,americanports, americanresistors, cuteinductors ,europeangfsurgearrester, nosiunitx, noarrowmos, smartlabels}
+
+\ProcessOptions\relax
+
+\input pgfcircpath.tex
+
+\ifpgf@circ@siunitx
+ \RequirePackage{xstring}[2009/03/13]
+ %\expandafter\let\csname angstrom\endcsname\relax
+ \RequirePackage{siunitx}
+\fi
+
+\ifpgf@circ@explicitvdir\else
+ \PackageWarningNoLine{circuitikz}{%
+ You did not specify one of the voltage directions:\MessageBreak
+ \space\space oldvoltagedirection, nooldvoltagedirection, \MessageBreak
+ \space\space RPvoltages or EFvoltages \MessageBreak
+ Default directions may have changed, \MessageBreak
+ please check the manual%
+ }
+\fi
+
+\newenvironment{circuitikz}{\begin{tikzpicture}}{\end{tikzpicture}}
+%override (unused) circuitikz environment for compability to externalization)
+\let\circuitikz\tikzpicture
+\let\endcircuitikz\endtikzpicture
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-example.tex b/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-example.tex
new file mode 100644
index 0000000000..c9719314c6
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-example.tex
@@ -0,0 +1,11 @@
+% example style for circuits
+% Do not use LaTeX commands if you want it to be compatible with ConTeXt
+% Do not add spurious spaces
+\tikzset{example circuit style/.style={%
+ \circuitikzbasekey/.cd,%
+ amplifiers/fill=blue!20!white,
+},% end .style
+}% end \tikzset
+%
+\endinput
+
diff --git a/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-legacy.tex b/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-legacy.tex
new file mode 100644
index 0000000000..2e33283dc4
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-legacy.tex
@@ -0,0 +1,136 @@
+% legacy style for circuits --- useful as a base for designing your style
+% Do not use LaTeX commands if you want it to be compatible with ConTeXt
+% Do not add spurious spaces
+%
+\tikzset{legacy circuit style/.style={\circuitikzbasekey/.cd,%
+% Resistors
+resistors/scale=1.0,
+resistors/width=0.8,
+resistors/zigs=3,
+resistors/fill=none,
+resistors/thickness=none,
+%
+% Capacitors
+capacitors/scale=1.0,
+capacitors/fill=none,
+capacitors/thickness=none,
+%
+% Inductors (and transformers)
+inductors/scale=1.0,
+inductors/fill=none,
+inductors/thickness=none,
+% these two are not set because the default is different in american and cute coils
+% inductors/width=0.6, % it's 0.8 for american coils
+% inductors/coils=5, % it's 4 for american coils
+%
+% Diodes
+diodes/scale=1.0,
+diodes/fill=none,
+diodes/thickness=none,
+%
+% Batteries
+batteries/scale=1.0,
+batteries/fill=none,
+batteries/thickness=none,
+%
+% Independent sources (the round ones)
+sources/scale=1.0,
+sources/fill=none,
+sources/thickness=none,
+% Dependent sources (the diamond-shaped ones)
+csources/scale=1.0,
+csources/fill=none,
+csources/thickness=none,
+%
+% Instruments
+instruments/scale=1.0,
+instruments/fill=none,
+instruments/thickness=none,
+%
+% Mechanical analogy
+mechanicals/scale=1.0,
+mechanicals/fill=none,
+mechanicals/thickness=none,
+%
+% Misc component (look at the manual)
+misc/scale=1.0,
+misc/fill=none,
+misc/thickness=none,
+%
+% Block diagrams
+blocks/scale=1.0,
+blocks/fill=none,
+blocks/thickness=none,
+%
+% Ground symbols
+grounds/scale=1.0,
+grounds/fill=none,
+grounds/thickness=none,
+%
+% Power supplies (but look at the manual, you can do more)
+power supplies/scale=1.0,
+power supplies/fill=none,
+power supplies/thickness=none,
+%
+% Transistors
+transistors/scale=1.0,
+transistors/fill=none,
+transistors/thickness=none,
+tripoles/mos style=no arrows, % it can be "arrows"
+tripoles/pmos style=fullcircle, % it can be "fullcircle", "nocircle"
+transistors/arrow pos=legacy, % it can be "end"
+%
+% Vacuum tubes
+tubes/scale=1.0,
+tubes/fill=none,
+tubes/thickness=none,
+%
+% RF components
+RF/scale=1.0,
+RF/fill=none,
+RF/thickness=none,
+%
+% Electromechanical
+electromechanicals/scale=1.0,
+electromechanicals/fill=none,
+electromechanicals/thickness=none,
+%
+% Amplifiers
+amplifiers/scale=1.0,
+amplifiers/fill=none,
+amplifiers/thickness=none,
+%
+% Switches (they're a bit special, look the manual)
+switches/scale=1.0,
+switches/fill=none,
+switches/thickness=none,
+%
+% Logic ports
+logic ports/scale=1.0,
+logic ports/fill=none,
+logic ports/thickness=none,
+logic ports origin=legacy, % it can be "center" (better)
+%
+% Integrated circuits
+chips/scale=1.0,
+chips/fill=none,
+chips/thickness=none,
+%
+% Displays
+displays/scale=1.0,
+displays/fill=none,
+displays/thickness=none,
+%
+% Nodes width (connectors, etc
+nodes width=.04,
+%
+% Arrows size
+current arrow scale=16,
+},% end .style
+}% end \tikzset
+% You can add more commands here
+% Do not use LaTeX commands if you want it to be compatible with ConTeXt
+% Do not add spurious spaces
+%
+\endinput
+
diff --git a/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-romano.tex b/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-romano.tex
new file mode 100644
index 0000000000..fabba4abf2
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/ctikzstyle-romano.tex
@@ -0,0 +1,74 @@
+% romano style for circuitikz
+% Do not use LaTeX commands if you want it to be compatible with ConTeXt
+% Do not add spurious spaces
+\tikzset{romano circuit style/.style={%
+\circuitikzbasekey/.cd,%
+% Resistors
+resistors/scale=0.8,
+resistors/thickness=1.0,
+%
+% Capacitors
+capacitors/scale=0.7,
+capacitors/thickness=1.0,
+%
+% Inductors (and transformers)
+inductors/scale=0.8,
+inductors/thickness=1.0,
+%
+% Diodes
+diodes/scale=0.6,
+diodes/thickness=1.0,
+%
+% Batteries
+batteries/scale=1.0,
+batteries/thickness=2.0,
+%
+% Sources (the round and diamond-shaped ones!)
+sources/scale=0.9,
+sources/thickness=1.0,
+csources/scale=0.9,
+csources/thickness=1.0,
+bipoles/noise sources/fillcolor=dashed,
+%
+% Instruments
+instruments/scale=1.0,
+%
+% Ground symbols
+grounds/scale=1.0,
+grounds/thickness=1.0,
+%
+% Transistors
+transistors/scale=1.3,
+transistors/thickness=3.0,
+tripoles/mos style=arrows, % it can be "arrows"
+tripoles/pmos style=emptycircle, % it can be "fullcircle", "nocircle"
+transistors/arrow pos=end, % it can be "end"
+%
+% Amplifiers
+amplifiers/scale=1.0,
+amplifiers/thickness=3.0,
+%
+% Logic ports
+logic ports/scale=1.0,
+logic ports/thickness=2.0,
+logic ports origin=center, % it can be "center" (better)
+%
+% Switches
+bipoles/cuteswitch/thickness=0.5,
+%
+% Integrated circuits
+chips/scale=1.0,
+chips/thickness=3.0,
+%
+% other options for romano style
+bipoles/crossing/size=0.4,
+% I am not sure I like them...
+% monopoles/vcc/arrow={Triangle[width=0.8*\scaledwidth, length=\scaledwidth]},
+% monopoles/vee/arrow={Triangle[width=0.8*\scaledwidth, length=\scaledwidth]},
+},% end .style
+}% end \tikzset
+% You can add more commands here
+% Do not use LaTeX commands if you want it to be compatible with ConTeXt
+% Do not add spurious spaces
+\endinput
+
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex
new file mode 100644
index 0000000000..200230b50a
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirc.defines.tex
@@ -0,0 +1,1754 @@
+%% Key managements
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+%% Temporary Counters
+
+\newcount\pgf@circ@count@a
+\newcount\pgf@circ@count@b
+\newcount\pgf@circ@count@c
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinates
+\newdimen\pgf@circ@res@up
+\newdimen\pgf@circ@res@down
+\newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left
+\newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+\newdimen\pgf@circ@res@temp
+% inital thickness
+\newdimen \pgfstartlinewidth
+
+% arrow tips, ported over old arrows library (deprecated)
+% see https://tex.stackexchange.com/questions/234084/latex-arrow-tip-with-arrows-meta-library
+% this was the original definition of latex' tips, renamed to avoid clashes
+%
+\pgfarrowsdeclare{latexslim}{latexslim}
+{
+ \pgfutil@tempdima=0.28pt%
+ \advance\pgfutil@tempdima by.3\pgflinewidth%
+ \pgfarrowsleftextend{+-4\pgfutil@tempdima}
+ \pgfarrowsrightextend{+6\pgfutil@tempdima}
+}
+{
+ \pgfutil@tempdima=0.28pt%
+ \advance\pgfutil@tempdima by.3\pgflinewidth%
+ \pgfpathmoveto{\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{3.5\pgfutil@tempdima}{.5\pgfutil@tempdima}}
+ {\pgfqpoint{-1\pgfutil@tempdima}{1.5\pgfutil@tempdima}}
+ {\pgfqpoint{-4\pgfutil@tempdima}{3.75\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{-1.5\pgfutil@tempdima}{1\pgfutil@tempdima}}
+ {\pgfqpoint{-1.5\pgfutil@tempdima}{-1\pgfutil@tempdima}}
+ {\pgfqpoint{-4\pgfutil@tempdima}{-3.75\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{-1\pgfutil@tempdima}{-1.5\pgfutil@tempdima}}
+ {\pgfqpoint{3.5\pgfutil@tempdima}{-.5\pgfutil@tempdima}}
+ {\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}}
+ \pgfpathclose
+ \pgfusepathqfill
+}
+
+\pgfarrowsdeclarereversed{latexslim reversed}{latexslim reversed}{latexslim}{latexslim}
+
+\def\pgf@circ@setifdefinedfill#1#2{%
+ % if \ctikzclass is defined and \ctikzclass/fill is defined and is not none:
+ % set the fill color and execute \pgfusepath{#1}, else execute \pgfusepath{#2}
+ \ifdefined\ctikzclass
+ \pgfkeysifdefined{\circuitikzbasekey/\ctikzclass/fill}%
+ {% yes, it's defined
+ \edef\@@tmp{\ctikzvalof{\ctikzclass/fill}}\edef\@@none{none}%
+ \ifx\@@tmp\@@none % but it's none
+ \pgfusepath{#2}%
+ \else
+ \pgfsetfillcolor{\@@tmp}%
+ \pgfusepath{#1}%
+ \fi
+ }{% the class is defined but the fill key not; use #2
+ \pgfusepath{#2}%
+ }
+ \else
+ \pgfusepath{#2}%
+ \fi
+}
+
+%% Macro to fill or draw
+
+\def\pgf@circ@draworfill{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgf@circ@setifdefinedfill{draw,fill}{draw}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{draw, fill}
+ \fi
+}
+
+\def\pgf@circ@draworfillandclip{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgf@circ@setifdefinedfill{draw, clip, fill}{draw, clip}
+ \pgfusepath{draw, clip}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{draw, clip, fill}
+ \fi
+}
+
+\def\pgf@circ@maybefill{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgf@circ@setifdefinedfill{fill}{discard}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{fill}
+ \fi
+}
+
+%% Macros for setting linewidth
+% #1 is the legacy class (bipoles, tripoles) etc
+% #2 is the reference linewidth
+\def\pgf@circ@setlinewidth#1#2{%
+ \ifdefined\ctikzclass
+ \pgfkeysifdefined{\circuitikzbasekey/\ctikzclass/thickness}%
+ {% yes, it's defined
+ \edef\@@tmp{\ctikzvalof{\ctikzclass/thickness}}\edef\@@none{none}%
+ \ifx\@@tmp\@@none % but it's none
+ \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}% passthrough legacy class
+ \else
+ \pgfsetlinewidth{\@@tmp #2}%
+ \fi
+ }{ % key not defined, do the legacy thing
+ \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}%
+ }% Ok, do nothing
+ \else % no class
+ \pgfsetlinewidth{\ctikzvalof{#1/thickness}#2}%
+ \fi
+}
+% use \pgf@circ@setlinewidth{none}{\pgflinewidth} if there is no legacy case
+\ctikzset{none/thickness/.initial=1.0} % do not touch
+
+% voltage options
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circuit@compat
+\newif\ifpgf@circ@oldvoltagedirection % default false
+\newif\ifpgf@circ@explicitvdir
+\newif\ifpgf@circ@fixbatteries
+
+\ctikzset{voltage dir/.is choice}
+\ctikzset{voltage dir/old/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/noold/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/RP/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriestrue}}
+\ctikzset{voltage dir/EF/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriestrue}}
+\tikzset{voltage dir/.style={circuitikz/voltage dir=#1}}
+
+% Option ">" for twoports
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf@circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf@circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}}
+
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+
+\ctikzset{current arrow scale/.initial=16}
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{tripoles/thickness/.initial=2}
+\ctikzset{quadpoles/thickness/.initial=2}
+\ctikzset{nodes width/.initial=.04}
+
+% Base len for all circuitikz
+\newdimen\pgf@circ@Rlen
+% scaled length for internal use in scalable shapes
+\newdimen\pgf@circ@scaled@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1\pgf@circ@scaled@Rlen=\pgf@circ@Rlen}}
+\pgf@circ@Rlen = 1.4cm
+% by default scale is 1.0
+\pgf@circ@scaled@Rlen=\pgf@circ@Rlen
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% main style definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% load a style file: search ctikzstyle-NAME.tex in path
+\def\ctikzloadstyle#1{%
+ \edef\pgf@temp{#1}%
+ % guard against re-loading
+ \expandafter\ifx\csname pgf@circ@style@\pgf@temp @loaded\endcsname\relax%
+ \expandafter\global\expandafter\let\csname pgf@circ@style@\pgf@temp @loaded\endcsname=\pgfutil@empty
+ \pgfutil@InputIfFileExists{ctikzstyle-#1}{}{%
+ \tikzerror{I did not find the circuitikz style #1}}%
+ \fi
+}
+
+% global style parameters
+\ctikzset{default/scale/.initial=1.0} % do not touch
+\ctikzset{default/fill/.initial=none} % do not touch
+\ctikzset{default/thickness/.initial=none} % do not touch
+% default is use as the generic default style for bipoles
+
+% mostly bipoles:
+
+\ctikzset{resistors/scale/.initial=1.0}
+\ctikzset{resistors/fill/.initial=none}
+\ctikzset{resistors/thickness/.initial=none}
+
+\ctikzset{capacitors/scale/.initial=1.0}
+\ctikzset{capacitors/fill/.initial=none}
+\ctikzset{capacitors/thickness/.initial=none}
+
+\ctikzset{inductors/scale/.initial=1.0}
+\ctikzset{inductors/fill/.initial=none}
+\ctikzset{inductors/thickness/.initial=none}
+
+\ctikzset{diodes/scale/.initial=1.0}
+\ctikzset{diodes/fill/.initial=none}
+\ctikzset{diodes/thickness/.initial=none}
+
+\ctikzset{batteries/scale/.initial=1.0}
+\ctikzset{batteries/fill/.initial=none}
+\ctikzset{batteries/thickness/.initial=none}
+
+\ctikzset{sources/scale/.initial=1.0}
+\ctikzset{sources/fill/.initial=none}
+\ctikzset{sources/thickness/.initial=none}
+
+\ctikzset{csources/scale/.initial=1.0}
+\ctikzset{csources/fill/.initial=none}
+\ctikzset{csources/thickness/.initial=none}
+
+\ctikzset{instruments/scale/.initial=1.0}
+\ctikzset{instruments/fill/.initial=none}
+\ctikzset{instruments/thickness/.initial=none}
+
+\ctikzset{mechanicals/scale/.initial=1.0}
+\ctikzset{mechanicals/fill/.initial=none}
+\ctikzset{mechanicals/thickness/.initial=none}
+
+\ctikzset{misc/scale/.initial=1.0}
+\ctikzset{misc/fill/.initial=none}
+\ctikzset{misc/thickness/.initial=none}
+
+\ctikzset{blocks/scale/.initial=1.0}
+\ctikzset{blocks/fill/.initial=none}
+\ctikzset{blocks/thickness/.initial=none}
+
+% mostly nodes
+
+\ctikzset{grounds/scale/.initial=1.0}
+\ctikzset{grounds/fill/.initial=none}
+\ctikzset{grounds/thickness/.initial=none}
+
+\ctikzset{power supplies/scale/.initial=1.0}
+\ctikzset{power supplies/fill/.initial=none}
+\ctikzset{power supplies/thickness/.initial=none}
+
+\ctikzset{transistors/scale/.initial=1.0}
+\ctikzset{transistors/fill/.initial=none}
+\ctikzset{transistors/thickness/.initial=none}
+
+\ctikzset{tubes/scale/.initial=1.0}
+\ctikzset{tubes/fill/.initial=none}
+\ctikzset{tubes/thickness/.initial=none}
+
+\ctikzset{RF/scale/.initial=1.0}
+\ctikzset{RF/fill/.initial=none}
+\ctikzset{RF/thickness/.initial=none}
+
+\ctikzset{electromechanicals/scale/.initial=1.0}
+\ctikzset{electromechanicals/fill/.initial=none}
+\ctikzset{electromechanicals/thickness/.initial=none}
+
+% transformers go with inductors
+\ctikzset{amplifiers/scale/.initial=1.0}
+\ctikzset{amplifiers/fill/.initial=none}
+\ctikzset{amplifiers/thickness/.initial=none}
+
+\ctikzset{switches/scale/.initial=1.0}
+\ctikzset{switches/fill/.initial=none}
+\ctikzset{switches/thickness/.initial=none}
+
+\ctikzset{logic ports/scale/.initial=1.0}
+\ctikzset{logic ports/fill/.initial=none}
+\ctikzset{logic ports/thickness/.initial=none}
+
+\ctikzset{chips/scale/.initial=1.0}
+\ctikzset{chips/fill/.initial=none}
+\ctikzset{chips/thickness/.initial=none}
+
+\ctikzset{displays/scale/.initial=1.0}
+\ctikzset{displays/fill/.initial=none}
+\ctikzset{displays/thickness/.initial=none}
+
+% grounds and power supplies
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/ground/connectionthickness/.initial=1}
+\ctikzset{monopoles/ground/thickness/.initial=2}
+\ctikzset{monopoles/rground/thickness/.initial=2}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/vcc/arrow/.initial=legacy}
+\ctikzset{monopoles/vee/arrow/.initial=legacy}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/label/xanchor/.initial=1}
+\ctikzset{monopoles/bareantenna/label/yanchor/.initial=0.5}
+\ctikzset{monopoles/waves/width/.initial=0.5}
+
+% microstrips
+\ctikzset{bipoles/mstline/height/.initial=0.3}
+\ctikzset{bipoles/mstline/width/.initial=1.2}
+\pgfkeys{/tikz/mstlinelen/.add code={}{\ctikzset{bipoles/mstline/width=#1}}}
+\ctikzset{monopoles/msport/width/.initial=.5}
+\ctikzset{monopoles/msrstub/height/.initial=1.0}
+\ctikzset{monopoles/msrstub/width/.initial=0.6}
+
+% microphone and loudspeaker
+\ctikzset{bipoles/loudspeaker/height/.initial=.8}
+\ctikzset{bipoles/loudspeaker/depth/.initial=.3}
+\ctikzset{bipoles/loudspeaker/width/.initial=.8}
+\ctikzset{bipoles/mic/height/.initial=1.2}
+\ctikzset{bipoles/mic/depth/.initial=.0}
+\ctikzset{bipoles/mic/width/.initial=.8}
+
+% Zig Zag resistors
+\ctikzset{resistors/zigs/.initial=3}
+\ctikzset{resistors/width/.code={%
+ \ctikzset{bipoles/resistor/width=#1}%
+ \ctikzset{bipoles/vresistor/width=#1}%
+ \ctikzset{bipoles/potentiometer/width=#1}%
+ \ctikzset{bipoles/resistivesens/width=#1}%
+ \ctikzset{bipoles/photoresistor/width=#1}%
+ \ctikzset{bipoles/thermistor/width=#1}%
+ \ctikzset{bipoles/thermistorntc/width=#1}%
+ \ctikzset{bipoles/thermistorptc/width=#1}%
+ \ctikzset{bipoles/varistor/width=#1}%
+ \ctikzset{bipoles/generic/width=#1}%
+ \ctikzset{bipoles/generic potentiometer/width=#1}%
+ \ctikzset{bipoles/ageneric/width=#1}%
+ \ctikzset{bipoles/tgeneric/width=#1}%
+}}
+% zigzag resistor
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/resistivesens/height/.initial=.6}
+\ctikzset{bipoles/resistivesens/width/.initial=.8}
+% square resistors
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+
+%% Capacitors
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial= \fontsize{6}{0}\selectfont\boldmath}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}
+
+% Inductors
+\ctikzset{inductors/coils/.code={%
+ \ctikzset{bipoles/cuteinductor/coils=#1}%
+ \ctikzset{bipoles/cutechoke/coils=#1}%
+ \ctikzset{bipoles/americaninductor/coils=#1}%
+ \ctikzset{bipoles/vcuteinductor/coils=#1}%
+ \ctikzset{bipoles/vamericaninductor/coils=#1}%
+}}
+\ctikzset{inductors/width/.code={%
+ \ctikzset{bipoles/cuteinductor/width=#1}%
+ \ctikzset{bipoles/cutechoke/width=#1}%
+ \ctikzset{bipoles/americaninductor/width=#1}%
+ \ctikzset{bipoles/vcuteinductor/width=#1}%
+ \ctikzset{bipoles/vamericaninductor/width=#1}%
+ \ctikzset{bipoles/fullgeneric/width=#1}%
+ \ctikzset{bipoles/tfullgeneric/width=#1}%
+}}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+%% Cute choke settings
+\ctikzset{bipoles/cutechoke/height/.initial=.3}
+\ctikzset{bipoles/cutechoke/lower coil height/.initial=.15}
+\ctikzset{bipoles/cutechoke/width/.initial=.6}
+\ctikzset{bipoles/cutechoke/coils/.initial=5}
+\ctikzset{bipoles/cutechoke/coil aspect/.initial=.5}%percentage of choke width, which is covered by lower coil
+\ctikzset{bipoles/cutechoke/cstep/.initial=.3}
+\ctikzset{bipoles/cutechoke/cdist/.initial=1.3}
+\ctikzset{bipoles/cutechoke/cthick/.initial=1}
+\newif\ifpgf@circuit@bipole@twolineschoke
+\pgf@circuit@bipole@twolineschokefalse
+\pgfkeys{/tikz/onelinechoke/.add code={}{\pgf@circuit@bipole@twolineschokefalse}}
+\ctikzset{onelinechoke/.add code={}{\pgf@circuit@bipole@twolineschokefalse}}
+\pgfkeys{/tikz/twolineschoke/.add code={}{\pgf@circuit@bipole@twolineschoketrue}}
+\ctikzset{twolineschoke/.add code={}{\pgf@circuit@bipole@twolineschoketrue}}
+%
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+
+% Sources
+
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/angle/.initial=80}
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/ecsource/height/.initial=.7}
+\ctikzset{bipoles/ecsource/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/battery2/height/.initial=.6}
+\ctikzset{bipoles/battery2/width/.initial=.3}
+
+% diodes
+
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/bidirectionaldiode/height/.initial=1.1}
+\ctikzset{bipoles/bidirectionaldiode/width/.initial=1}
+\ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
+\ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+
+% switches
+
+\ctikzset{bipoles/spst/height/.initial=.35}
+\ctikzset{bipoles/spst/width/.initial=.35}
+\ctikzset{bipoles/spst/depth/.initial=.2}
+\ctikzset{bipoles/nos/height/.initial=.3}
+\ctikzset{bipoles/nos/width/.initial=.35}
+\ctikzset{bipoles/nos/depth/.initial=.2}
+\ctikzset{bipoles/ncs/height/.initial=.35}
+\ctikzset{bipoles/ncs/width/.initial=.35}
+\ctikzset{bipoles/ncs/depth/.initial=.2}
+
+% misc
+
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/short/height/.initial=0} %dummy height for voltage positioning
+\ctikzset{bipoles/short/width/.initial=0} %dummy width for voltage positioning
+%\ctikzset{bipoles/short/voltage/straight label distance/.initial=.2}
+%\ctikzset{bipoles/short/voltage/distance from node/.initial=.5}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/smeter/height/.initial=.60}
+\ctikzset{bipoles/smeter/width/.initial=.60}
+\ctikzset{bipoles/qmeter/depth/.initial=.40}
+\ctikzset{bipoles/qmeter/height/.initial=.80}
+\ctikzset{bipoles/qmeter/width/.initial=.60}
+\ctikzset{bipoles/iloop/width/.initial=.40}
+\ctikzset{bipoles/iloop/height/.initial=.60}
+\ctikzset{bipoles/oscope/height/.initial=.60}
+\ctikzset{bipoles/oscope/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/bulb/height/.initial=.8}
+\ctikzset{bipoles/bulb/width/.initial=.8}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.2}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/bandstop/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+
+% crossing wires
+\ctikzset{bipoles/crossing/size/.initial=.2}
+
+% Transistors starts here
+
+\newif\ifpgf@circuit@trans@depletiontype
+\pgf@circuit@trans@depletiontypefalse
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+\pgfkeys{/tikz/arrowmos/.add code={}{\pgf@circuit@mos@arrowstrue}}
+\pgfkeys{/tikz/noarrowmos/.add code={}{\pgf@circuit@mos@arrowsfalse}}
+
+% Option solderdot for fet
+\newif\ifpgf@circuit@fet@solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf@circuit@fet@bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf@circuit@bpt@drawgate
+\pgf@circuit@bpt@drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+
+% Option draw bpt without base connection
+\newif\ifpgf@circuit@bpt@drawbase
+\pgf@circuit@bpt@drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf@circuit@bpt@drawphoto
+\pgf@circuit@bpt@drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf@circuit@pmos@emptycircle
+\pgf@circuit@pmos@emptycirclefalse
+\ctikzset{tripoles/pmos style/.is choice}
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+% Option draw pmos with no circle
+\newif\ifpgf@circuit@pmos@nocircle
+\pgf@circuit@pmos@nocirclefalse
+\pgfkeys{/tikz/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}}
+\ctikzset{tripoles/pmos style/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}}
+% back to normal
+\pgfkeys{/tikz/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}}
+\ctikzset{tripoles/pmos style/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}}
+% arrows at the end, the correct way
+\newif\ifpgf@circuit@trans@arrowatend
+\pgf@circuit@trans@arrowatendfalse
+\ctikzset{transistors/arrow pos/.is choice}
+\ctikzset{transistors/arrow pos/legacy/.code={\pgf@circuit@trans@arrowatendfalse}}
+\ctikzset{transistors/arrow pos/end/.code={\pgf@circuit@trans@arrowatendtrue}}
+
+\newif\ifpgf@circuit@trans@ntype
+\pgf@circuit@trans@ntypetrue %default true
+%\newif\ifpgf@circuit@trans@ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/arrow pos/.initial=.6}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/arrow pos/.initial=.4}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/hemt/width/.initial=.7}
+\ctikzset{tripoles/hemt/gate height/.initial=.35}
+\ctikzset{tripoles/hemt/base height/.initial=.5}
+\ctikzset{tripoles/hemt/conn height/.initial=0}
+\ctikzset{tripoles/hemt/height/.initial=1.1}
+\ctikzset{tripoles/hemt/base width/.initial=.5}
+\ctikzset{tripoles/hemt/gate width/.initial=.62}
+\ctikzset{tripoles/hemt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/hemt/curr direction/.initial=1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/arrow pos/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/arrow pos/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue
+ \tikzset{and port/.style={shape=european and port}}%
+ \tikzset{or port/.style={shape=european or port}}%
+ \tikzset{xor port/.style={shape=european xor port}}%
+ \tikzset{buffer port/.style={shape=european buffer port}}%
+ \tikzset{not port/.style={shape=european not port}}%
+ \tikzset{nand port/.style={shape=european nand port}}%
+ \tikzset{nor port/.style={shape=european nor port}}%
+ \tikzset{xnor port/.style={shape=european xnor port}}%
+}}
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse
+ \tikzset{and port/.style={shape=american and port}}%
+ \tikzset{or port/.style={shape=american or port}}%
+ \tikzset{xor port/.style={shape=american xor port}}%
+ \tikzset{buffer port/.style={shape=american buffer port}}%
+ \tikzset{not port/.style={shape=american not port}}%
+ \tikzset{nand port/.style={shape=american nand port}}%
+ \tikzset{nor port/.style={shape=american nor port}}%
+ \tikzset{xnor port/.style={shape=american xnor port}}%
+}}
+
+\ctikzset{logic ports origin/.is choice}
+\ctikzset{logic ports origin/legacy/.code={
+ \ctikzset{tripoles/american and port/origin/.initial=0.8}%
+ \ctikzset{tripoles/american nand port/origin/.initial=0.8}%
+ \ctikzset{tripoles/american nor port/origin/.initial=0.8}%
+ \ctikzset{tripoles/american or port/origin/.initial=0.8}%
+ \ctikzset{tripoles/american xor port/origin/.initial=0.8}%
+ \ctikzset{tripoles/american xnor port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european and port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european nand port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european or port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european nor port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european xor port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european xnor port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european buffer port/origin/.initial=0.8}%
+ \ctikzset{tripoles/european not port/origin/.initial=0.8}%
+ }%
+}
+\ctikzset{logic ports origin/center/.code={%
+ \ctikzset{tripoles/american and port/origin/.initial=0}%
+ \ctikzset{tripoles/american nand port/origin/.initial=0}%
+ \ctikzset{tripoles/american nor port/origin/.initial=0}%
+ \ctikzset{tripoles/american or port/origin/.initial=0}%
+ \ctikzset{tripoles/american xor port/origin/.initial=0}%
+ \ctikzset{tripoles/american xnor port/origin/.initial=0}%
+ \ctikzset{tripoles/european and port/origin/.initial=0}%
+ \ctikzset{tripoles/european nand port/origin/.initial=0}%
+ \ctikzset{tripoles/european or port/origin/.initial=0}%
+ \ctikzset{tripoles/european nor port/origin/.initial=0}%
+ \ctikzset{tripoles/european xor port/origin/.initial=0}%
+ \ctikzset{tripoles/european xnor port/origin/.initial=0}%
+ \ctikzset{tripoles/european buffer port/origin/.initial=0}%
+ \ctikzset{tripoles/european not port/origin/.initial=0}%
+ }%
+}
+
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/american and port/origin/.initial=0.8}
+\ctikzset{tripoles/american and port/inputs/.initial=2}
+% variable number of inputs
+\ctikzset{tripoles/american nand port/origin/.initial=0.8}
+\ctikzset{tripoles/american nand port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/origin/.initial=0.8}
+\ctikzset{tripoles/american nor port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/angle/.initial=70}
+\ctikzset{tripoles/american nor port/inner/.initial=0.3}
+\ctikzset{tripoles/american or port/origin/.initial=0.8}
+\ctikzset{tripoles/american or port/inputs/.initial=2}
+\ctikzset{tripoles/american or port/angle/.initial=70}
+\ctikzset{tripoles/american or port/inner/.initial=0.3}
+\ctikzset{tripoles/american xor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xor port/inputs/.initial=2}
+\ctikzset{tripoles/american xor port/angle/.initial=70}
+\ctikzset{tripoles/american xor port/inner/.initial=0.3}
+\ctikzset{tripoles/american xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xnor port/inputs/.initial=2}
+\ctikzset{tripoles/american xnor port/angle/.initial=70}
+\ctikzset{tripoles/american xnor port/inner/.initial=0.3}
+
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european buffer port/width/.initial=1.4}
+\ctikzset{tripoles/european buffer port/not height/.initial=.3}
+\ctikzset{tripoles/european buffer port/not width/.initial=.8}
+\ctikzset{tripoles/european buffer port/height/.initial=.65}
+\ctikzset{tripoles/european buffer port/reserved/.initial=.6}
+\ctikzset{tripoles/european buffer port/input height/.initial=0}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+% variable number of inputs
+\ctikzset{tripoles/european and port/origin/.initial=0.8}
+\ctikzset{tripoles/european and port/inputs/.initial=2}
+\ctikzset{tripoles/european nand port/origin/.initial=0.8}
+\ctikzset{tripoles/european nand port/inputs/.initial=2}
+\ctikzset{tripoles/european or port/origin/.initial=0.8}
+\ctikzset{tripoles/european or port/inputs/.initial=2}
+\ctikzset{tripoles/european nor port/origin/.initial=0.8}
+\ctikzset{tripoles/european nor port/inputs/.initial=2}
+\ctikzset{tripoles/european xor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xor port/inputs/.initial=2}
+\ctikzset{tripoles/european xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xnor port/inputs/.initial=2}
+\ctikzset{tripoles/european buffer port/origin/.initial=0.8}
+\ctikzset{tripoles/european buffer port/inputs/.initial=1}%
+\ctikzset{tripoles/european not port/origin/.initial=0.8}
+\ctikzset{tripoles/european not port/inputs/.initial=1}%
+%%% parameters that are not used anymore after multi-input
+%%% gates --- left for compatibility of source code.
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+% switches for logic gates
+%
+\pgfkeys{/tikz/number inputs/.initial=0}
+\pgfkeys{/tikz/number inputs/.default=0}
+%
+% switches for op amps
+% changing input polarity
+%
+\newif\ifpgf@circuit@oa@iplusup\pgf@circuit@oa@iplusupfalse
+\pgfkeys{/tikz/noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}}
+\ctikzset{noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}}
+\pgfkeys{/tikz/input noinv down/.add code={}{\pgf@circuit@oa@iplusupfalse}}
+\ctikzset{input noinv down/.add code={}{\pgf@circuit@oa@iplusupfalse}}
+%
+% changing output polarity (for fully diff objects)
+%
+\newif\ifpgf@circuit@oa@oplusup\pgf@circuit@oa@oplusuptrue
+\pgfkeys{/tikz/noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}}
+\ctikzset{noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}}
+\pgfkeys{/tikz/noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}}
+\ctikzset{noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}}
+
+% Operational amplifier
+\ctikzset{tripoles/op amp/width/.initial=1.7} % Total width
+\ctikzset{tripoles/op amp/port width/.initial=.7} % Terminals length
+\ctikzset{tripoles/op amp/height/.initial=1.4} % Total height
+\ctikzset{tripoles/op amp/input height/.initial=.5} % Input port vertical separation
+\ctikzset{tripoles/op amp/up pos/.initial=.45} % Top and bottom anchor position
+\ctikzset{tripoles/op amp/font/.initial= \fontsize{10}{12}\selectfont\boldmath} % Absolute font size needed!
+
+% Fully differential operational amplifier
+\ctikzset{tripoles/fd op amp/width/.initial=1.7} % Total width
+\ctikzset{tripoles/fd op amp/port width/.initial=.7} % Terminals length
+\ctikzset{tripoles/fd op amp/height/.initial=1.4} % Total height
+\ctikzset{tripoles/fd op amp/input height/.initial=.5} % Input port vertical separation
+\ctikzset{tripoles/fd op amp/output height/.initial=.5} % Output port vertical separation
+\ctikzset{tripoles/fd op amp/up pos/.initial=.45} % Top and bottom anchor position
+\ctikzset{tripoles/fd op amp/font/.initial= \fontsize{10}{12}\selectfont\boldmath} % Absolute font size needed!
+
+\ctikzset{tripoles/en amp/width/.initial=1.7}
+\ctikzset{tripoles/en amp/port width/.initial=.7}
+\ctikzset{tripoles/en amp/height/.initial=1.6}
+\ctikzset{tripoles/en amp/input height/.initial=.3}
+\ctikzset{tripoles/en amp/up pos/.initial=.45}
+\ctikzset{tripoles/en amp/font/.initial= \fontsize{10}{12}\selectfont} % Absolute font size needed!
+\ctikzset{tripoles/en amp/font2/.initial= \fontsize{12}{14}\selectfont} % Absolute font size needed!
+\ctikzset{tripoles/en amp/text/.initial={$\mathstrut{\triangleright}\,{\infty}$}}
+\tikzset{
+ en amp text/.code = {%
+ \ctikzsetvalof{tripoles/en amp/text}{#1}%
+ },
+ en amp text A/.code = {%
+ \ctikzsetvalof{tripoles/en amp/text}{$\mathstrut{\triangleright}\,\mathrm{A}$}%
+ },
+}
+
+% Transconductance amplifier
+\ctikzset{tripoles/gm amp/width/.initial=1.7} % Total width
+\ctikzset{tripoles/gm amp/port width/.initial=.7} % Terminals length
+\ctikzset{tripoles/gm amp/height/.initial=1.4} % Left side of the trapezoid
+\ctikzset{tripoles/gm amp/height 2/.initial=0.5} % Right side of the trapezoid
+\ctikzset{tripoles/gm amp/input height/.initial=.5} % Input port vertical separation
+\ctikzset{tripoles/gm amp/up pos/.initial=.45} % Top and bottom anchor position
+\ctikzset{tripoles/gm amp/font/.initial= \fontsize{10}{12}\selectfont\boldmath} % Absolute font size needed!
+
+% Instrumentation amplifier
+\ctikzset{tripoles/inst amp/width/.initial=1.7} % Total width
+\ctikzset{tripoles/inst amp/port width/.initial=.7} % Terminals length
+\ctikzset{tripoles/inst amp/height/.initial=1.4} % Left side of the trapezoid
+\ctikzset{tripoles/inst amp/height 2/.initial=0.6} % Right side of the trapezoid
+\ctikzset{tripoles/inst amp/input height/.initial=.5} % Input ports vertical separation
+\ctikzset{tripoles/inst amp/up pos/.initial=.4} % Top and bottom anchor position
+\ctikzset{tripoles/inst amp/refv pos/.initial=.7} % Top and bottom voltage reference position
+\ctikzset{tripoles/inst amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath} % Absolute font size needed!
+
+% Instrumentation amplifier with differential output
+\ctikzset{tripoles/fd inst amp/width/.initial=1.7} % Total width
+\ctikzset{tripoles/fd inst amp/port width/.initial=.7} % Terminals length
+\ctikzset{tripoles/fd inst amp/height/.initial=1.4} % Left side of the trapezoid
+\ctikzset{tripoles/fd inst amp/height 2/.initial=0.6} % Right side of the trapezoid
+\ctikzset{tripoles/fd inst amp/input height/.initial=.5} % Input ports vertical separation
+\ctikzset{tripoles/fd inst amp/output height/.initial=.5} % Output ports vertical separation
+\ctikzset{tripoles/fd inst amp/up pos/.initial=.4} % Top and bottom anchor position
+\ctikzset{tripoles/fd inst amp/refv pos/.initial=.7} % Top and bottom voltage reference position
+\ctikzset{tripoles/fd inst amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath} % Absolute font size needed!
+
+% Instrumentation amplifier with gain resistor terminals
+\ctikzset{tripoles/inst amp ra/width/.initial=2.4} % Total width
+\ctikzset{tripoles/inst amp ra/port width/.initial=.7} % Terminals length
+\ctikzset{tripoles/inst amp ra/height/.initial=2.9} % Left side of the trapezoid
+\ctikzset{tripoles/inst amp ra/height 2/.initial=0.4} % Right side of the trapezoid
+\ctikzset{tripoles/inst amp ra/input height/.initial=.7} % Input ports vertical separation
+\ctikzset{tripoles/inst amp ra/up pos/.initial=.4} % Top and bottom anchor position
+\ctikzset{tripoles/inst amp ra/refv pos/.initial=.7} % Top and bottom voltage reference position
+\ctikzset{tripoles/inst amp ra/ra pos/.initial=.6} % Gain resistor terminals vertical separation
+\ctikzset{tripoles/inst amp ra/font/.initial= \fontsize{10}{0}\selectfont\boldmath} % Absolute font size needed!
+
+% Plain amplifier
+\ctikzset{tripoles/plain amp/width/.initial=1.7} % Total width
+\ctikzset{tripoles/plain amp/port width/.initial=.7} % Terminals length
+\ctikzset{tripoles/plain amp/height/.initial=1.4} % Total height
+\ctikzset{tripoles/plain amp/input height/.initial=.5} % Input ports vertical separation
+\ctikzset{tripoles/plain amp/up pos/.initial=.45} % Top and bottom anchor position
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+%% Cute switches
+\ctikzset{bipoles/cuteswitch/shape/.initial={ocirc}}
+\ctikzset{bipoles/cuteswitch/height/.initial=.6}
+\ctikzset{bipoles/cuteswitch/height 2/.initial=.2}
+\ctikzset{bipoles/cuteswitch/width/.initial=.50}
+\ctikzset{bipoles/cuteswitch/thickness/.initial=1}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/inner/.initial=0.4}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
+
+\ctikzset{quadpoles style/.is choice}
+\ctikzset{quadpoles style/inward/.code={% default value
+ \ctikzset{quadpoles/transformer/inner=0.4}%
+ \ctikzset{quadpoles/transformer/width=1.5}%
+ \ctikzset{quadpoles/transformer core/inner=0.4}%
+ \ctikzset{quadpoles/transformer core/width=1.5}%
+ \ctikzset{quadpoles/gyrator/inner=0.4}%
+ \ctikzset{quadpoles/gyrator/width=1.5}%
+ }%
+}
+\ctikzset{quadpoles style/inline/.code={% now horizontal baffle
+ \ctikzset{quadpoles/transformer/inner=1}%
+ \ctikzset{quadpoles/transformer/width=0.6}%
+ \ctikzset{quadpoles/transformer core/inner=1}%
+ \ctikzset{quadpoles/transformer core/width=0.6}%
+ \ctikzset{quadpoles/gyrator/inner=1} % FIXME
+ \ctikzset{quadpoles/gyrator/width=0.6}%
+ }%
+}
+
+%
+% multipoles
+%
+\ctikzset{multipoles/thickness/.initial=2}
+\ctikzset{multipoles/font/.initial=\tiny}
+% DIP (dual in line package) chips
+\ctikzset{multipoles/dipchip/width/.initial=1.2}
+\ctikzset{multipoles/dipchip/num pins/.initial=8}
+\ctikzset{multipoles/dipchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/dipchip/num pins=#1}}}
+% QFP (quad flat package) chips
+\ctikzset{multipoles/qfpchip/num pins/.initial=8}
+\ctikzset{multipoles/qfpchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/qfpchip/num pins=#1}}}
+% chip numbers
+\newif\ifpgf@circuit@chip@shownumbers\pgf@circuit@chip@shownumberstrue
+\pgfkeys{/tikz/show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}}
+\ctikzset{show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}}
+\pgfkeys{/tikz/hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}}
+\ctikzset{hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}}
+\newif\ifpgf@circuit@chip@straightnumbers\pgf@circuit@chip@straightnumberstrue
+\pgfkeys{/tikz/straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}}
+\ctikzset{straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}}
+\pgfkeys{/tikz/rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}}
+\ctikzset{rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}}
+% external chip pins
+\ctikzset{multipoles/external pins thickness/.initial=1}
+\ctikzset{multipoles/external pins width/.initial=0.2}
+\ctikzset{multipoles/external pad fraction/.initial=0}
+\pgfkeys{/tikz/external pins width/.add code={}{\ctikzset{multipoles/external pins width=#1}}}
+\pgfkeys{/tikz/external pad fraction/.add code={}{\ctikzset{multipoles/external pad fraction=#1}}}
+% topmarks
+\newif\ifpgf@circuit@chip@topmark\pgf@circuit@chip@topmarktrue
+\pgfkeys{/tikz/topmark/.add code={}{\pgf@circuit@chip@topmarktrue}}
+\ctikzset{topmark/.add code={}{\pgf@circuit@chip@topmarktrue}}
+\pgfkeys{/tikz/no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}}
+\ctikzset{no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}}
+
+% rotary switch by Romano
+\ctikzset{multipoles/rotary/thickness/.initial=1}
+\ctikzset{multipoles/rotary/shape/.initial=ocirc}
+\ctikzset{multipoles/rotary/channels/.initial=5}
+\ctikzset{multipoles/rotary/angle/.initial=60}
+\ctikzset{multipoles/rotary/wiper/.initial=20}
+\ctikzset{multipoles/rotary/arrow/.is choice}
+\newif\ifpgf@circ@rotaryarrow\pgf@circ@rotaryarrowfalse
+\newif\ifpgf@circ@rotaryarrow@cw\pgf@circ@rotaryarrow@cwfalse
+\newif\ifpgf@circ@rotaryarrow@ccw\pgf@circ@rotaryarrow@ccwfalse
+\ctikzset{multipoles/rotary/arrow/none/.code={\pgf@circ@rotaryarrowfalse\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/both/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwtrue}}
+\ctikzset{multipoles/rotary/arrow/cw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/ccw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwtrue}}
+
+\tikzset{%
+ rotary switch/.style args={#1in#2wiper#3}{%
+ shape=rotaryswitch,
+ /tikz/circuitikz/multipoles/rotary/channels=#1,
+ /tikz/circuitikz/multipoles/rotary/angle=#2,
+ /tikz/circuitikz/multipoles/rotary/wiper=#3,
+ },
+ rotary switch -/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=none,
+ },
+ rotary switch <-/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=ccw,
+ },
+ rotary switch ->/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=cw,
+ },
+ rotary switch <->/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=both,
+ },
+ % Notice that these should be the same as the initial values of the keys
+ rotary switch/.default={5 in 60 wiper 20},
+ rotary switch -/.default={5 in 60 wiper 20},
+ rotary switch <-/.default={5 in 60 wiper 20},
+ rotary switch ->/.default={5 in 60 wiper 20},
+ rotary switch <->/.default={5 in 60 wiper 20},
+}
+
+% %Mechanical section
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial=}
+\ctikzset{bipole/name/.initial=}
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol}
+\newif\ifpgf@circuit@bipole@strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/flow/.is family}
+\newif\ifpgf@circuit@bipole@flow@backward
+\ctikzset{bipole/flow/direction/.is choice}
+\ctikzset{bipole/flow/direction/forward/.code={\pgf@circuit@bipole@flow@backwardfalse}}
+\ctikzset{bipole/flow/direction/backward/.code={\pgf@circuit@bipole@flow@backwardtrue}}
+\newif\ifpgf@circuit@bipole@flow@before
+\ctikzset{bipole/flow/x position/.is choice}
+\ctikzset{bipole/flow/x position/after/.code={\pgf@circuit@bipole@flow@beforefalse}}
+\ctikzset{bipole/flow/x position/before/.code={\pgf@circuit@bipole@flow@beforetrue}}
+\newif\ifpgf@circuit@bipole@flow@below
+\ctikzset{bipole/flow/y position/.is choice}
+\ctikzset{bipole/flow/y position/above/.code={\pgf@circuit@bipole@flow@belowfalse}}
+\ctikzset{bipole/flow/y position/below/.code={\pgf@circuit@bipole@flow@belowtrue}}
+\ctikzset{bipole/flow/label/unit/.initial=}
+\ctikzset{bipole/flow/label/name/.initial=}
+\ctikzset{flow/distance/.initial = .5}
+\ctikzset{flow/offset/.initial = .2}%distance between flow-arrow and conductor
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/annotation/.is family}
+\ctikzset{bipole/annotation/position/.initial=-90}
+\ctikzset{bipole/annotation/unit/.initial=}
+\ctikzset{bipole/annotation/name/.initial=}
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@strokediode
+\newif\ifpgf@circuit@fulldiode
+\pgf@circuit@strokediodefalse
+\pgf@circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full}}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty}}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke}}
+
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color={#1}}}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{straight/.is choice}
+\ctikzset{straightvoltage value/.initial=true}
+\ctikzset{straight/true/.code = {\pgf@circuit@bipole@voltage@straighttrue}}
+\ctikzset{straight/false/.code = {\pgf@circuit@bipole@voltage@straightfalse}}
+\ctikzset{straightvoltage/.style = {/tikz/circuitikz/straight=true}}
+\newif\ifpgf@circuit@bipole@voltage@straight
+\ctikzset{bipole/straight/.is if=pgf@circuit@bipole@voltage@straight}
+
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/shift/.initial=0.0} % shift form the cable of voltage symbols
+\ctikzset{voltage shift/.style={voltage/shift=#1}}
+\tikzset{voltage shift/.style={\circuitikzbasekey/voltage/shift=#1}}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% shaping the +/- sign, see pgfcircvoltage.tex
+\ctikzset{voltage/american font/.initial={}}
+\ctikzset{voltage/american plus/.initial={$+$}}
+\ctikzset{voltage/american minus/.initial={$-$}}
+
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+
+\tikzset{american currents/.style = {\circuitikzbasekey/current = american}}
+\tikzset{european currents/.style = {\circuitikzbasekey/current = european}}
+\tikzset{american voltages/.style = {\circuitikzbasekey/voltage = american}}
+\tikzset{european voltages/.style = {\circuitikzbasekey/voltage = european}}
+\tikzset{american resistors/.style = {\circuitikzbasekey/resistor = american}}
+\tikzset{european resistors/.style = {\circuitikzbasekey/resistor = european}}
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester choice/.is choice}
+\ctikzset{gas filled surge arrester choice/european/.code= {\pgf@circuit@europeangfsurgearrestertrue}}
+\ctikzset{gas filled surge arrester choice/american/.code= {\pgf@circuit@europeangfsurgearresterfalse}}
+
+\tikzset{american gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=american}}
+\tikzset{european gas filled surge arrester set/.style = {\circuitikzbasekey/gas filled surge arrester choice=european}}
+\tikzset{american inductors/.style = {\circuitikzbasekey/inductor = american}}
+\tikzset{european inductors/.style = {\circuitikzbasekey/inductor = european}}
+\tikzset{cute inductors/.style = {\circuitikzbasekey/inductor = cute}}
+\tikzset{american ports/.style = {\circuitikzbasekey/logic ports = american}}
+\tikzset{european ports/.style = {\circuitikzbasekey/logic ports = european}}
+\tikzset{european/.style = {european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester set}}
+\tikzset{american/.style = {american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester set}}
+\tikzset{cute/.style = {european currents, european voltages, american resistors, cute inductors, american ports}}
+
+% I should try to make the tree clearer (this voltage conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse}}
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue}}
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse}
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue}
+
+% noise sources
+\ctikzset{bipoles/noise sources/fillcolor/.initial=gray!50}
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+
+% seven segment displays by RGtti
+
+\newif\ifpgf@circ@sevenseg@dot
+\newif\ifpgf@circ@sevenseg@box
+\def\pgf@circ@sevenseg@dotstate{empty}
+\ctikzset{seven seg/.is family}
+\ctikzset{seven seg/dot/.is choice}
+% none means no dot, not space for it. Empty means no dot, but space
+\ctikzset{seven seg/dot/none/.code={\pgf@circ@sevenseg@dotfalse}}
+\ctikzset{seven seg/dot/empty/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{empty}}}
+\ctikzset{seven seg/dot/off/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{off}}}
+\ctikzset{seven seg/dot/on/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{on}}}
+%
+\ctikzset{seven seg/width/.initial=0.4}% relative to \pgf@circ@Rlen
+\ctikzset{seven seg/thickness/.initial=4pt}% segment thickness
+\ctikzset{seven seg/segment sep/.initial=0.2pt}% gap between segments
+\ctikzset{seven seg/box sep/.initial=1pt}% external box gap
+\ctikzset{seven seg/color on/.initial=red}% color for segment "on"
+\ctikzset{seven seg/color off/.initial=gray!20!white} % ...and "off"
+\ctikzset{seven seg/box/.is choice}
+\ctikzset{seven seg/box/off/.code={\pgf@circ@sevenseg@boxfalse}}
+\ctikzset{seven seg/box/on/.code={\pgf@circ@sevenseg@boxtrue}}
+
+\ctikzset{seven seg/bits/.initial=0000000}
+
+\ctikzset{seven seg/value/.code={%
+ \edef\@@tmp{#1}%
+ \edef\@@n{0} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111110}\fi
+ \edef\@@n{1} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110000}\fi
+ \edef\@@n{2} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1101101}\fi
+ \edef\@@n{3} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111001}\fi
+ \edef\@@n{4} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110011}\fi
+ \edef\@@n{5} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011011}\fi
+ \edef\@@n{6} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011111}\fi
+ \edef\@@n{7} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110000}\fi
+ \edef\@@n{8} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111111}\fi
+ \edef\@@n{9} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111011}\fi
+ \edef\@@n{10}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{11}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{12}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{13}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{14}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{15}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{A} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{B} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{C} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{D} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{E} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{F} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{a} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{b} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{c} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{d} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{e} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{f} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{-} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0000001}\fi
+}}
+
+\tikzset{%
+ seven segment val/.style args={#1dot#2box#3}{%
+ shape=bare7seg,
+ /tikz/circuitikz/seven seg/value=#1,
+ /tikz/circuitikz/seven seg/dot=#2,
+ /tikz/circuitikz/seven seg/box=#3,
+ },
+ seven segment bits/.style args={#1dot#2box#3}{%
+ shape=bare7seg,
+ /tikz/circuitikz/seven seg/bits=#1,
+ /tikz/circuitikz/seven seg/dot=#2,
+ /tikz/circuitikz/seven seg/box=#3,
+ },
+}
+
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+
+% Electronic tubes: diodetube, triode, tetrode and pentode
+\ctikzset{tubes/width/.initial=1} % relative width
+\ctikzset{tubes/height/.initial=1.4} % relative height
+\ctikzset{tubes/tube radius/.initial=0.40} % radius of tube circle
+\ctikzset{tubes/anode distance/.initial=0.40} % distance from center
+\ctikzset{tubes/anode width/.initial=0.40} % width of an anode/plate
+\ctikzset{tubes/grid protrusion/.initial=0.25} % distance from center
+\ctikzset{tubes/grid dashes/.initial=5} % number of grid dashes
+\ctikzset{tubes/grid separation/.initial=0.2} % separation between grids
+\ctikzset{tubes/grid shift/.initial=0.0} % y shift grids from center
+\ctikzset{tubes/cathode distance/.initial=0.40} % distance from grid
+\ctikzset{tubes/cathode width/.initial=0.40} % width of an cathode
+\ctikzset{tubes/cathode corners/.initial=0.06} % corners of the cathode wire
+\ctikzset{tubes/cathode right extend/.initial=0.075} % extension at the right side
+\ctikzset{tubes/filament distance/.initial=0.1} % distance from cathode
+\ctikzset{tubes/filament angle/.initial=15} % Angle from centerpoint
+
+\newif\ifpgf@circuit@tubes@filament\pgf@circuit@tubes@filamentfalse
+\pgfkeys{/tikz/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}}
+\ctikzset{tubes/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}}
+\newif\ifpgf@circuit@tubes@nocathode\pgf@circuit@tubes@nocathodefalse
+\pgfkeys{/tikz/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}}
+\ctikzset{tubes/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}}
+\newif\ifpgf@circuit@tubes@fullcathode\pgf@circuit@tubes@fullcathodefalse
+\pgfkeys{/tikz/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}}
+\ctikzset{tubes/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
new file mode 100644
index 0000000000..0048efb892
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircbipoles.tex
@@ -0,0 +1,4891 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+%
+\long\def\pgfcircdeclarebipole{%
+ \pgfcircdeclarebipolescaled{default}}
+
+%% Generic macro for defining a bipole shape
+% #1 - scale factor
+% #2 - additional anchors
+% #3 - lower y-size of the bipole (from the center).
+% #4 - #shape is the name of the shape
+% #5 - upper y-size of the bipole (from the center)
+% #6 - width of the bipole
+% #7 - macros drawing the bipole
+%
+\long\def\pgfcircdeclarebipolescaled#1#2#3#4#5#6#7{
+ \pgfdeclareshape{#4shape}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{#1}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor{\northeast}{
+ \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen
+ \pgf@y=#5\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#6\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen
+ \pgf@y=#5\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#6\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen
+ \pgf@y=-#3\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#6\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen
+ \pgf@y=-#3\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#6\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen
+ \pgf@circ@res@down=-#3\pgf@circ@scaled@Rlen
+ \pgf@circ@res@up=#5\pgf@circ@scaled@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{ne}{
+ \northeast
+ }
+ \anchor{nw}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{s}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{south east}{
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \southwest
+ }
+ \anchor{se}{
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{
+ \southwest
+ }
+ \anchor{w}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{left}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{below}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{a}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{b}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{
+ \textanchor
+ }
+ \anchorborder{%
+ \ifpgf@circuit@bipole@inverted
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #2
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ #7
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+% Resistive components
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Short circuit
+
+%%% NOTICE that the short is really NOT drawn; we trust the fact that its
+%%% natural length is zero.
+\pgfcircdeclarebipole
+{}
+{0}
+{short}
+{0}
+{0}
+{ }
+
+%% Open circuit
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/open/height}}
+{open}
+{\ctikzvalof{bipoles/open/height}}
+{\ctikzvalof{bipoles/open/width}}
+{ }
+
+%% Generic bipole - used as resistor by some (bleah)
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/generic/height}}
+{generic}
+{\ctikzvalof{bipoles/generic/height}}
+{\ctikzvalof{bipoles/generic/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+
+%% Generic empty tunable
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{tgeneric}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{\ctikzvalof{bipoles/tgeneric/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Generic asymmetric bipole
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/ageneric/height}}
+{ageneric}
+{\ctikzvalof{bipoles/ageneric/height}}
+{\ctikzvalof{bipoles/ageneric/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+%% Memristor
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/memristor/height}}
+{memristor}
+{\ctikzvalof{bipoles/memristor/height}}
+{\ctikzvalof{bipoles/memristor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+%% Photoresistor
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/photoresistor/height 2}}
+{photoresistor}
+{\ctikzvalof{bipoles/photoresistor/height}}
+{\ctikzvalof{bipoles/photoresistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Thermistor
+\pgfcircdeclarebipolescaled{resistors}
+{{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.4\pgf@x
+ \pgf@y=1.2\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/thermistor/height}}
+{thermistor}
+{\ctikzvalof{bipoles/thermistor/height}}
+{\ctikzvalof{bipoles/thermistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+%% Thermistor PTC
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/thermistorptc/height 2}}
+{thermistorptc}
+{\ctikzvalof{bipoles/thermistorptc/height}}
+{\ctikzvalof{bipoles/thermistorptc/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/thermistorntc/height 2}}
+{thermistorntc}
+{\ctikzvalof{bipoles/thermistorntc/height}}
+{\ctikzvalof{bipoles/thermistorntc/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Generic tunable
+\pgfcircdeclarebipolescaled{resistors}{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}
+{\ctikzvalof{bipoles/generic potentiometer/height 2}}
+{genericpotentiometer}
+{\ctikzvalof{bipoles/generic potentiometer/height}}
+{\ctikzvalof{bipoles/generic potentiometer/width}}
+{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Zig zag resistores
+\def\pgf@circ@zigzag#1{%
+ \divide \pgf@circ@res@step by \numexpr4*\zigs\relax
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \pgf@circ@count@a=\zigs\relax
+ % first half zig
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-#1\pgf@circ@res@down}}
+ \pgfmathloop%
+ \advance\pgf@circ@count@a by -1\relax% Loop zigs -1 times
+ \ifnum\pgf@circ@count@a>0
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{#1\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-#1\pgf@circ@res@down}}
+ \repeatpgfmathloop%
+ % last zig and a half
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{#1\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+%% Resistor
+\pgfcircdeclarebipolescaled{resistors}
+{
+\savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/resistor/height}}
+{resistor}
+{\ctikzvalof{bipoles/resistor/height}}
+{\ctikzvalof{bipoles/resistor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgf@circ@zigzag{1}
+}
+
+
+%% Variable resistor
+\pgfcircdeclarebipolescaled{resistors}
+{
+\savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/vresistor/height}}
+{vresistor}
+{\ctikzvalof{bipoles/vresistor/height}}
+{\ctikzvalof{bipoles/vresistor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/vresistor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgf@circ@zigzag{.5}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Potentiometer
+\pgfcircdeclarebipolescaled{resistors}
+{
+ \anchor{wiper}{\northeast\pgfpoint{0pt}{\pgf@y}}
+ \anchor{W}{\northeast\pgfpoint{0pt}{\pgf@y}}
+ \savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/potentiometer/height 2}}
+{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}
+{\ctikzvalof{bipoles/potentiometer/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/potentiometer/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgf@circ@zigzag{1}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Resistive sensor
+\pgfcircdeclarebipolescaled{resistors}
+{% anchor for labelling the type of dependency
+ \anchor{label}{\southwest\pgf@x=0.4\pgf@x}%
+ \savedmacro{\zigs}{\edef\zigs{\ctikzvalof{resistors/zigs}}}
+}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{resistivesens}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{\ctikzvalof{bipoles/resistivesens/width}}
+{%
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistivesens/width}*\scaledRlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \pgf@circ@zigzag{.5}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.9\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%%%%%%%%%%%%%%
+%% Capacitors
+%%%%%%%%%%%%%
+
+%% Plain Capacitor
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitor}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Capacitive sensor
+\pgfcircdeclarebipolescaled{capacitors}
+{
+ \anchor{label}{\southwest\pgf@x=2.6\pgf@x\pgf@y=1.2\pgf@y}%
+}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitivesens}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{2.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-2.6\pgf@circ@res@right}{1.2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-4.4\pgf@circ@res@right}{1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Polar Capacitor
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{polarcapacitor}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{\ctikzvalof{bipoles/pcapacitor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Electrolytic Capacitor
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{ecapacitor}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{\ctikzvalof{bipoles/ecapacitor/width}}
+{
+ \pgfsetrectcap
+ % % % Draw plus pole
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ % % Draw minus pole
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfsetfillcolor{black}
+ % % plus pole annotation
+ \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}]
+ {\ctikzvalof{bipoles/ecapacitor/font} $+$}
+}
+
+%% Variable Capacitor
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{vcapacitor}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{\ctikzvalof{bipoles/vcapacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipolescaled{capacitors}
+{}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{piezoelectric}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{\ctikzvalof{bipoles/piezoelectric/width}}
+{
+ % \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen
+ % \divide \pgf@circ@res@step by 5
+
+ %% Outer markings
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %% Inner Box
+ \pgf@circ@res@step = \pgf@circ@res@right \divide \pgf@circ@res@step by 10
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgf@circ@res@left+4*\pgf@circ@res@step}{\pgf@circ@res@up-\pgf@circ@res@step}}
+ {\pgfpoint{\pgf@circ@res@right-4*\pgf@circ@res@step}{\pgf@circ@res@down+\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+ \endpgfscope
+}
+
+%%%%%%%%%%%%%%%
+%% Inductors
+%%%%%%%%%%%%%%%
+
+%% cute inductor
+\pgfcircdeclarebipolescaled{inductors}
+{}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{cuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% cute inductive sensor
+\pgfcircdeclarebipolescaled{inductors}
+{% anchor for labelling the type of dependency
+ \anchor{label}{\southwest\pgf@x=0.8\pgf@x\pgf@y=2.6\pgf@y}%
+}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{scuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% cute choke
+\pgfcircdeclarebipolescaled{inductors}
+{}
+{\ctikzvalof{bipoles/cutechoke/lower coil height}}
+{cutechoke}
+{\ctikzvalof{bipoles/cutechoke/height}}
+{\ctikzvalof{bipoles/cutechoke/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cutechoke/coil aspect}*\ctikzvalof{bipoles/cutechoke/width}*\scaledRlen/(\ctikzvalof{bipoles/cutechoke/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cutechoke/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cutechoke/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cutechoke/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cutechoke/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth}
+ \pgfusepath{stroke}
+
+ \ifpgf@circuit@bipole@twolineschoke
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfsetlinewidth{\ctikzvalof{bipoles/cutechoke/cthick}\pgflinewidth}
+ \pgfusepath{stroke}
+ \fi
+}
+
+%% variable cute inductor
+\pgfcircdeclarebipolescaled{inductors}
+{}
+{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}
+{vcuteinductor}
+{\ctikzvalof{bipoles/vcuteinductor/height}}
+{\ctikzvalof{bipoles/vcuteinductor/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\scaledRlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/vcuteinductor/width}*\scaledRlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% american inductor
+\pgfcircdeclarebipolescaled{inductors}
+{}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{americaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@scaled@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+
+%% american inductive sensor
+\pgfcircdeclarebipolescaled{inductors}
+{% anchor for labelling the type of dependency
+ \anchor{label}{\southwest\pgf@x=0.8\pgf@x\pgf@y=2.6\pgf@y}%
+}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{samericaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@scaled@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% variable american inductor
+\pgfcircdeclarebipolescaled{inductors}
+{}
+{\ctikzvalof{bipoles/vamericaninductor/height 2}}
+{vamericaninductor}
+{\ctikzvalof{bipoles/vamericaninductor/height}}
+{\ctikzvalof{bipoles/vamericaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@scaled@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/vamericaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Generic bipole, filled - used as inductor by some
+\pgfcircdeclarebipolescaled{inductors}
+{}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{fullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+%% Generic sensor, filled - used as inductive sensor by some
+\pgfcircdeclarebipolescaled{inductors}
+{% anchor for labelling the type of dependency
+ \anchor{label}{\southwest\pgf@x=0.4\pgf@x\pgf@y=2\pgf@y}%
+}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{sfullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+%% Generic full tunable
+\pgfcircdeclarebipolescaled{inductors}
+{}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{tfullgeneric}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{\ctikzvalof{bipoles/tfullgeneric/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%%%%%%%%%%%
+%% Battery
+%%%%%%%%%%%
+
+%% Battery
+\pgfcircdeclarebipolescaled{batteries}
+{}
+{\ctikzvalof{bipoles/battery/height}}
+{battery}
+{\ctikzvalof{bipoles/battery/height}}
+{\ctikzvalof{bipoles/battery/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1 % poles with equl thickness
+
+\pgfcircdeclarebipolescaled{batteries}
+{}
+{\ctikzvalof{bipoles/battery1/height}}
+{battery1}
+{\ctikzvalof{bipoles/battery1/height}}
+{\ctikzvalof{bipoles/battery1/width}}
+{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+%% Battery 2 % negative pole thicker
+
+\pgfcircdeclarebipolescaled{batteries}
+{}
+{\ctikzvalof{bipoles/battery2/height}}
+{battery2}
+{\ctikzvalof{bipoles/battery2/height}}
+{\ctikzvalof{bipoles/battery2/width}}
+{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+%%%%%%%%%%%
+%% Round and diamond sources
+%%%%%%%%%%%
+
+%% Independent voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsource}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+%% Independent voltage source - American style
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{vsourceAM}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{\ctikzvalof{bipoles/vsourceam/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfsetcolor{\ctikzvalof{color}}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$+$}
+ \fi
+}
+
+%% Independent sinusoidal voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{vsourcesin}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{\ctikzvalof{bipoles/vsourcesin/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Square Voltage source - contributed by Alistair Kwan
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{vsourcesquare}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{\ctikzvalof{bipoles/vsourcesquare/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{vsourcetri}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{\ctikzvalof{bipoles/vsourcetri/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% PV Source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/pvsource/height}}
+{pvsource}
+{\ctikzvalof{bipoles/pvsource/height}}
+{\ctikzvalof{bipoles/pvsource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %Arrow Part
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{esource}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/dcisource/height}}
+{dcisource}
+{\ctikzvalof{bipoles/dcisource/height}}
+{\ctikzvalof{bipoles/dcisource/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@maybefill
+ \edef\@@angle{\ctikzvalof{bipoles/dcisource/angle}}
+ \pgfpathmoveto{\pgfpointpolar{\@@angle}{\pgf@circ@res@up}}
+ \pgfpatharc{\@@angle}{-\@@angle}{\pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpointpolar{180-\@@angle}{\pgf@circ@res@up}}
+ \pgfpatharc{180-\@@angle}{180+\@@angle}{\pgf@circ@res@up}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% DC-Voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{dcvsource}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{\ctikzvalof{bipoles/dcvsource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}}
+ \pgfusepath{draw}
+}
+
+%% Independent current source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isource}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+}
+
+%% Independent double oo source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/oosource/height}}
+{oosource}
+{\ctikzvalof{bipoles/oosource/height}}
+{\ctikzvalof{bipoles/oosource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgf@circ@maybefill
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right}
+ \pgf@circ@draworfill
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgfusepath{draw}
+}
+
+%% Independent current source - American
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isourceam/height}}
+{isourceAM}
+{\ctikzvalof{bipoles/isourceam/height}}
+{\ctikzvalof{bipoles/isourceam/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% Independent sinusoidal current source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourcesin}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty controlled source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/ecsource/height}}
+{ecsource}
+{\ctikzvalof{bipoles/ecsource/height}}
+{\ctikzvalof{bipoles/ecsource/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+}
+
+%% Controlled voltage source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsource}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+%% Controlled voltage source - American
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{cvsourceAM}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{\ctikzvalof{bipoles/cvsourceam/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfsetcolor{\ctikzvalof{color}}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$+$}
+ \fi
+}
+
+%% Controlled sinusoidal voltage source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cvsourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Controlled sinusoidal current source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cisourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Controlled current source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisource}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Controlled current source - American
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{cisourceAM}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{\ctikzvalof{bipoles/cisourceam/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% Cute Independent voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceC}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Independent current source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceC}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Controlled voltage source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsourceC}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Controlled current source
+\pgfcircdeclarebipolescaled{csources}
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisourceC}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Noise voltage source
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceN}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ %
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=0.125\pgf@circ@scaled@Rlen\relax
+ \edef\pgf@noise@temp{dashed}
+ \edef\pgf@noise@fill{\ctikzvalof{bipoles/noise sources/fillcolor}}
+ \ifx\pgf@noise@temp\pgf@noise@fill
+ % fillable in this case
+ \pgf@circ@draworfillandclip
+ \pgfmathsetmacro{\@@thinner}{.5*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thinner\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ %
+ \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\pgf@noise@fill}
+ \pgfusepath{draw,fill}
+ \fi
+ \endpgfscope
+ \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Noise current source
+
+\pgfcircdeclarebipolescaled{sources}
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceN}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ %
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=0.125\pgf@circ@scaled@Rlen\relax
+ \edef\pgf@noise@temp{dashed}
+ \edef\pgf@noise@fill{\ctikzvalof{bipoles/noise sources/fillcolor}}
+ \ifx\pgf@noise@temp\pgf@noise@fill
+ % fillable in this case
+ \pgf@circ@draworfillandclip
+ \pgfmathsetmacro{\@@thinner}{.5*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thinner\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ %
+ \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\pgf@noise@fill}
+ \pgfusepath{draw,fill}
+ \fi
+ \endpgfscope
+ \pgfmathsetmacro{\@@thicker}{3*\ctikzvalof{bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%
+%% Diodes
+%%%%%%%%%%%%%%
+
+%% Black generic diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulldiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullsdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulltdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulllediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullpdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{fullvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw,fill}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Code for the diode triangle
+\def\pgf@circ@basicdiodeshape{
+ % \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitly the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+ % \endpgfscope
+}
+
+%% Empty generic diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptydiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Empty Schottky diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptysdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptytdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptylediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptypdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{emptyvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ % \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty bidirectionaldiode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{emptybidirectionaldiode}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgf@circ@draworfill
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+}
+
+%% Full bidirectionaldiode
+\pgfcircdeclarebipolescaled{diodes}
+{}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{fullbidirectionaldiode}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw, fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+}
+
+%% Black thyristor
+\pgfcircdeclarebipolescaled{diodes}
+{
+ \anchor{gate}{\northeast}
+ \anchor{anode}{\southwest\pgf@y=0cm}
+ \anchor{G}{\northeast}
+ \anchor{cathode}{\northeast\pgf@y=0cm }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{fullthyristor}
+{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipolescaled{diodes}
+{
+ \anchor{gate}{\northeast}
+ \anchor{anode}{\southwest\pgf@y=0cm}
+ \anchor{G}{\northeast}
+ \anchor{cathode}{\northeast\pgf@y=0cm }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{emptythyristor}
+{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+}
+
+%% Empty triac
+\pgfcircdeclarebipolescaled{diodes}
+{
+ \anchor{gate}{\northeast}
+ \anchor{anode}{\southwest\pgf@y=0cm}
+ \anchor{G}{\northeast}
+ \anchor{cathode}{\northeast\pgf@y=0cm }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{emptytriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgf@circ@draworfill
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+}
+
+%% Full triac
+\pgfcircdeclarebipolescaled{diodes}
+{
+ \anchor{gate}{\northeast}
+ \anchor{anode}{\southwest\pgf@y=0cm}
+ \anchor{G}{\northeast}
+ \anchor{cathode}{\northeast\pgf@y=0cm }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{fulltriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%
+%% switches
+%%%%%%%%%%%%%
+
+%% (Closing) SPST
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{cspst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpointpolar{90}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{90}{-20}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Opening SPST
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{ospst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{-10}{90}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Normal open Switch
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/nos/depth}}
+{nos}
+{\ctikzvalof{bipoles/nos/height}}
+{\ctikzvalof{bipoles/nos/width}}
+{
+
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+}
+
+%% Normal closed Switch
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/ncs/depth}}
+{ncs}
+{\ctikzvalof{bipoles/ncs/height}}
+{\ctikzvalof{bipoles/ncs/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Push Button
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{pushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+%% Normally closed Push Button
+\pgfcircdeclarebipolescaled{switches}
+{}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{ncpushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ % Warning, if the nodes will have a class, we have to touch this.
+ \pgf@circ@res@temp=\ctikzvalof{nodes width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp}}
+ \pgfpathmoveto{\pgfpoint{0}{-\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+% cute switch "to" shapes help function
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutesw#1#2#3{
+ \pgfcircdeclarebipolescaled{switches}
+ {
+ \savedanchor\midlever{
+ % these values are calculated when we create the definition of the shape.
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/cuteswitch/height}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{nodes width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgf@circ@res@down = -.5\pgf@y
+ \pgf@circ@res@up = .5\pgf@y
+ \pgfextracty{\pgf@circ@res@other}{#2}
+ \pgf@x=0pt
+ \pgf@y=.5\pgf@circ@res@other
+ }
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ % If cnnecting nodes are scaled, we have to modify this
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+ % mid of the lever, to stack switches
+ \anchor{mid}{\midlever}
+ \anchor{cout}{\northeast \pgf@y=0cm}
+ \anchor{cin}{\southwest\pgf@y=0cm}
+ \anchor{out}{\northeast \pgf@y=0cm\advance\pgf@x by \radius}
+ \anchor{in}{\southwest\pgf@y=0cm\advance\pgf@x by -\radius}
+ }
+ {\ctikzvalof{bipoles/cuteswitch/height 2}}
+ {#1}
+ {\ctikzvalof{bipoles/cuteswitch/height}}
+ {\ctikzvalof{bipoles/cuteswitch/width}}{
+ \pgfscope
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ % If cnnecting nodes are scaled, we have to modify this
+ \pgf@circ@res@temp=\ctikzvalof{nodes width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{#2}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+ \pgfscope % arrow
+ #3
+ \endpgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}}
+ }
+}
+
+%% closed cute switch
+\pgfcircdeclarecutesw{cuteclosedswitch}
+ {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}}
+ {}
+
+%% open cute switch
+\pgfcircdeclarecutesw{cuteopenswitch}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ {}
+
+%% closing cute switch
+\pgfcircdeclarecutesw{cuteclosingswitch}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ {
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{70}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{70}{-10}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+ }
+
+%% opening cute switch
+\pgfcircdeclarecutesw{cuteopeningswitch}
+ {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}}
+ {
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{-10}{60}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+ }
+
+%%%%%%%%%%%%%%%%%
+%% Instruments
+%%%%%%%%%%%%%%%%%
+
+% % METERINGSHAPE
+\long\def\drawmeteringcircle{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+ %draw connections to circle
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ %draw circle
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \endpgfscope
+ %draw arrow
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%AMPEREMETER
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/ammeter/height}}
+{ammeter}
+{\ctikzvalof{bipoles/ammeter/height}}
+{\ctikzvalof{bipoles/ammeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{ohmmeter}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{\ctikzvalof{bipoles/ohmmeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{voltmeter}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{\ctikzvalof{bipoles/voltmeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+% oscilloscope, suggested by @nobrl https://github.com/circuitikz/circuitikz/issues/176
+\pgfcircdeclarebipolescaled{instruments}
+{
+ \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x}
+ \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/oscope/height}}
+{oscope}
+{\ctikzvalof{bipoles/oscope/height}}
+{\ctikzvalof{bipoles/oscope/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % this would create a round (analog?) scope...
+ % \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ % grid
+ \pgfscope
+ \pgfsetlinewidth{0.5\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathgrid[stepx=\pgf@circ@res@step, stepy=\pgf@circ@res@step]%
+ {\pgfpoint{0.75\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ {\pgfpoint{0.75\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfsetstrokeopacity{0.5}
+ \pgfusepath{draw}
+ \endpgfscope
+ % function displayed, thanks to
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% generic round meter with always horizontal text, no arrow
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeter}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ % draw the text label
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgftransformrotate{\rot}
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% generic round meter with always horizontal text, with arrow
+\pgfcircdeclarebipolescaled{instruments}
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeterwa}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ % draw the text label
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ % arrow: create a center hole to have better visual
+ \pgfscope
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next open a circle into it
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{.6\pgf@circ@res@up}}{\pgfpoint{.6\pgf@circ@res@left}{0}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfsetarrowsend{latexslim}
+ % the arrow is better if it has a bit of breath and it's not 45º
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@right}{1.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgftext[center]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% generic square meter with always horizontal text
+\pgfcircdeclarebipolescaled{instruments}
+{
+ \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x}
+ \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/smeter/height}}
+{smeter}
+{\ctikzvalof{bipoles/smeter/height}}
+{\ctikzvalof{bipoles/smeter/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ % the metering window
+ \pgfscope
+ \def\@starta{105}\def\@stopa{75}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{0pt}{-1.8\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{\@starta}{2\pgf@circ@res@up}}
+ \pgfpatharc{\@starta}{\@stopa}{2\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}}
+ \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up}
+ \pgfclosepath
+ \pgfpathmoveto{\pgfpointpolar{80}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointpolar{80}{2.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgftext[center, y=0.5\pgf@circ@res@down]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% probes qucs style:
+% #1 : name
+% #2 : extra code
+\long\def\pgfcirc@qucsprobe#1#2{
+ \pgfcircdeclarebipolescaled{instruments}
+ {
+ \anchor{v+}{\southwest\pgf@x=0.6\pgf@x}
+ \anchor{v-}{\southwest\pgf@x=-0.6\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ }
+ {\ctikzvalof{bipoles/qmeter/depth}}
+ {#1}
+ {\ctikzvalof{bipoles/qmeter/height}}
+ {\ctikzvalof{bipoles/qmeter/width}}
+ {
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \def\@starta{103}\def\@stopa{77}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{0pt}{-1.7\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{\@starta}{2.1\pgf@circ@res@up}}
+ \pgfpatharc{\@starta}{\@stopa}{2.1\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}}
+ \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up}
+ \pgfclosepath
+ \pgfpathmoveto{\pgfpointpolar{83}{2.1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointpolar{83}{2.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgf@circ@draworfill
+ \endpgfscope
+ #2
+ \endpgfscope
+ }
+}
+
+\pgfcirc@qucsprobe{qiprobe}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgfnode{currarrow}{center}{}{}{}
+}
+
+\pgfcirc@qucsprobe{qvprobe}{
+ \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{nodes width}*\pgf@circ@scaled@Rlen}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{0pt}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other}
+ \pgfusepath{draw}
+ \pgfscope
+ % "+" and "-", drawn so that they scale correctly
+ \pgfsetlinewidth{2\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-1.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-3.5\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+\pgfcirc@qucsprobe{qpprobe}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgfnode{currarrow}{center}{}{}{}
+ \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{nodes width}*\pgf@circ@scaled@Rlen}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left}{-3\pgf@circ@res@other}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{-4\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right}{-3\pgf@circ@res@other}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{-4\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfscope
+ % "+" and "-", drawn so that they scale correctly
+ \pgfsetlinewidth{2\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-2\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-4\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+4\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right-4\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% current loop for oscope and similar: stylized
+\pgfcircdeclarebipolescaled{instruments}
+{
+ \anchor{i}{\northeast\pgf@x=0pt\relax}
+ \anchor{text}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@down=-\pgf@circ@res@up
+ \pgf@circ@res@left=-\pgf@circ@res@right
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\ctikzvalof{color}}
+ % external ellipse
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next the opening to the left
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}}
+ {\pgfpoint{0pt}{.1\pgf@circ@res@up}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathellipse{\pgfpointorigin}{
+ \pgfpoint{0pt}{0.8\pgf@circ@res@up}}{
+ \pgfpoint{0.4\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal wire
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % and the contact line up
+ \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% current loop for oscope and similar: real (double connection)
+\pgfcircdeclarebipolescaled{instruments}
+{
+ \anchor{i+}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgf@y=\pgf@circ@res@up
+ }
+ \anchor{i-}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgf@y=\pgf@circ@res@up
+ }
+ \anchor{text}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop2}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@down=-\pgf@circ@res@up
+ \pgf@circ@res@left=-\pgf@circ@res@right
+ % must be the same than internal i+ and i- anchors definition
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \def\@plus{\pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other}}
+ \def\@minus{\pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other}}
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\ctikzvalof{color}}
+ % external ellipse
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next the opening to the left
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}}
+ {\pgfpoint{0pt}{.1\pgf@circ@res@up}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathmoveto{\@plus}
+ \pgfpatharc{105}{435}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal wire
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % and the contact line up
+ % I use ...left and ---right as temporal lengths here to avoid defining more
+ \pgfextractx{\pgf@circ@res@left}{\@plus}
+ \pgfextractx{\pgf@circ@res@right}{\@minus}
+ \pgfpathmoveto{\@plus}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\@minus}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Varistor
+\pgfcircdeclarebipolescaled{resistors}
+{}
+{\ctikzvalof{bipoles/varistor/height}}
+{varistor}
+{\ctikzvalof{bipoles/varistor/height}}
+{\ctikzvalof{bipoles/varistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\ctikzvalof{bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\ctikzvalof{bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+%%%%%%%%%%%%%%
+%% RF bipoles
+%%%%%%%%%%%%%%
+
+% transmission line
+\pgfcircdeclarebipolescaled{RF}
+{}
+{\ctikzvalof{bipoles/tline/height}}
+{tline}
+{\ctikzvalof{bipoles/tline/height}}
+{\ctikzvalof{bipoles/tline/width}}
+{
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \begin{pgftransparencygroup}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{-\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \end{pgftransparencygroup}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{stroke}
+}
+
+% microstrip transmission line
+\pgfcircdeclarebipolescaled{RF}
+{}
+{\ctikzvalof{bipoles/mstline/height}}
+{mstline}
+{\ctikzvalof{bipoles/mstline/height}}
+{\ctikzvalof{bipoles/mstline/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+
+%%%%%%%%%%%%%%%%%%%
+%% Block diagrams
+%%%%%%%%%%%%%%%%%%%
+
+%% Draw the two-port fillable box
+\def\pgf@circ@twoportbox{
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+}
+
+%% Generic two port box
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/twoport/height}}
+{twoport}
+{\ctikzvalof{bipoles/twoport/height}}
+{\ctikzvalof{bipoles/twoport/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw outer box
+ \pgf@circ@twoportbox
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/vco/width}}
+{vco}
+{\ctikzvalof{bipoles/twoport/width}}
+{\ctikzvalof{bipoles/vco/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw circle
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% bandpass filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/bandpass/width}}
+{bandpass}
+{\ctikzvalof{bipoles/bandpass/width}}
+{\ctikzvalof{bipoles/bandpass/width}}
+{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% bandstop filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/bandstop/width}}
+{bandstop}
+{\ctikzvalof{bipoles/bandstop/width}}
+{\ctikzvalof{bipoles/bandstop/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandstop/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt}% always draw solid line for inner symbol
+ \pgfsetarrows{-}%never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/highpass/width}}
+{highpass}
+{\ctikzvalof{bipoles/highpass/width}}
+{\ctikzvalof{bipoles/highpass/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/lowpass/width}}
+{lowpass}
+{\ctikzvalof{bipoles/lowpass/width}}
+{\ctikzvalof{bipoles/lowpass/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/adc/width}}
+{adc}
+{\ctikzvalof{bipoles/adc/width}}
+{\ctikzvalof{bipoles/adc/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/dac/width}}
+{dac}
+{\ctikzvalof{bipoles/dac/width}}
+{\ctikzvalof{bipoles/dac/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/dsp/width}}
+{dsp}
+{\ctikzvalof{bipoles/dsp/width}}
+{\ctikzvalof{bipoles/dsp/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/fft/width}}
+{fft}
+{\ctikzvalof{bipoles/fft/width}}
+{\ctikzvalof{bipoles/fft/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{amp}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@scaled@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \pgf@circ@draworfill
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \fi
+
+ \pgfsetarrows{-} %never draw arrows
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{vamp}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@scaled@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \fi
+
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+ % draw arrow
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{piattenuator}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{vpiattenuator}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{tattenuator}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{vtattenuator}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{phaseshifter}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{vphaseshifter}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipolescaled{blocks}
+{}
+{\ctikzvalof{bipoles/detector/width}}
+{detector}
+{\ctikzvalof{bipoles/detector/width}}
+{\ctikzvalof{bipoles/detector/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@scaled@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\ctikzvalof{bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%
+%% MECHANICAL SYMBOLS
+%%%%%%%%%%%%%%%%%%%%%%%
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipolescaled{mechanicals}
+{}
+{\ctikzvalof{bipoles/spring/height}}
+{spring}
+{\ctikzvalof{bipoles/spring/height}}
+{\ctikzvalof{bipoles/spring/width}}{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@scaled@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipolescaled{mechanicals}
+{}
+{\ctikzvalof{bipoles/mass/box height}}
+{mass}
+{\ctikzvalof{bipoles/mass/height}}
+{\ctikzvalof{bipoles/mass/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipolescaled{mechanicals}
+{}
+{\ctikzvalof{bipoles/damper/height}}
+{damper}
+{\ctikzvalof{bipoles/damper/height}}
+{\ctikzvalof{bipoles/damper/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@maybefill
+
+ % line into the damper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ % damper box
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ % damper vertical element
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+%% mechanical viscoelastic element, suggested by @alex
+%% in https://tex.stackexchange.com/questions/484268/combined-spring-damper-in-circuitikz
+\pgfcircdeclarebipolescaled{mechanicals}
+{} % extra anchors
+{\ctikzvalof{bipoles/damper/height}} % depth (under the path line)
+{viscoe} % name
+{\ctikzvalof{bipoles/damper/height}} % height (above the path line)
+{\ctikzvalof{bipoles/damper/width}} % width
+{ % draw the bipole
+ \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@maybefill
+
+ % spring into the damper
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpoint{.25\pgf@circ@res@up}{.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.75\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@left}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{.75\pgf@circ@res@up}}
+ \pgfusepath{stroke}
+ \endpgfscope
+ % damper box
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ % damper vertical element
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+
+%%%%%%%%%%%%%%%%
+%% Crossing
+%%%%%%%%%%%%%%%%
+
+%% crossing bipole (but see also nodes)
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/crossing/size}}
+{crossing}
+{\ctikzvalof{bipoles/crossing/size}}
+{\ctikzvalof{bipoles/crossing/size}}{
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Miscellaneous bipoles
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% loudspeaker and microphone
+
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/loudspeaker/depth}}
+{loudspeaker}
+{\ctikzvalof{bipoles/loudspeaker/height}}
+{\ctikzvalof{bipoles/loudspeaker/width}}{
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ \pgfpathclose
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/mic/depth}}
+{mic}
+{\ctikzvalof{bipoles/mic/height}}
+{\ctikzvalof{bipoles/mic/width}}{
+
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0pt}{.6\pgf@circ@res@up}}{.4\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{0pt}}
+ % 0.25358 is 0.6-0.4*cos(30)
+ \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% european gas filled surge arrester
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{european gas filled surge arrester}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/european gas filled surge arrester/width}}
+{
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@draworfill
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+%% american gas filled surge arrester
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{american gas filled surge arrester}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ \pgfcircle{\pgfpoint{\ctikzvalof{bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\ctikzvalof{bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\ctikzvalof{bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+%% thermocouple
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/thermocouple/height 2}}
+{thermocouple}
+{\ctikzvalof{bipoles/thermocouple/height}}
+{\ctikzvalof{bipoles/thermocouple/width}}
+{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% fuse
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/fuse/height}}
+{fuse}
+{\ctikzvalof{bipoles/fuse/height}}
+{\ctikzvalof{bipoles/fuse/width}}
+{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgf@circ@draworfill
+}
+
+%% asymmetric fuse
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/afuse/height}}
+{afuse}
+{\ctikzvalof{bipoles/afuse/height}}
+{\ctikzvalof{bipoles/afuse/width}}
+{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+%% SQUID added by Cor Molenaar 5 March 2010
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/squid/height}}
+{squid}
+{\ctikzvalof{bipoles/squid/height}}
+{\ctikzvalof{bipoles/squid/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/barrier/height}}
+{barrier}
+{\ctikzvalof{bipoles/barrier/height}}
+{\ctikzvalof{bipoles/barrier/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+%% Lamp
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/lamp/height}}
+{lamp}
+{\ctikzvalof{bipoles/lamp/height}}
+{\ctikzvalof{bipoles/lamp/width}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% bulb
+\pgfcircdeclarebipolescaled{misc}
+{}
+{\ctikzvalof{bipoles/bulb/height}}
+{bulb}
+{\ctikzvalof{bipoles/bulb/height}}
+{\ctikzvalof{bipoles/bulb/width}}
+{%
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{0.8\pgf@circ@res@up}}{\pgfpoint{0.8\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+% end of pgfcircbipoles.tex
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirccurrent.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirccurrent.tex
new file mode 100644
index 0000000000..88cd79aa5b
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirccurrent.tex
@@ -0,0 +1,198 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ %reverse current direction for voltage sources
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@isvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below }
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \fi\fi\fi
+ }
+}
+
+\ifpgf@circ@oldvoltagedirection
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+%% Output routine
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw current at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@current@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@current@backward
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \fi
+ coordinate[currarrow,pos=\ctikzvalof{current/distance},rotate=\pgf@circ@ffffff](Iarrow)
+ (Iarrow.\pgf@circ@bipole@current@label@where) node[anchor=\pgf@circ@dir]{\pgf@circ@finallabels{current/label}}
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircflow.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircflow.tex
new file mode 100644
index 0000000000..7995725d6d
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircflow.tex
@@ -0,0 +1,193 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% flow handling
+
+%% Options
+\ctikzset{f^>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/curflowrent/y position = above
+ }
+}
+
+\ctikzset{f_>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f>^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f>_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f^</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f_</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f<^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f<_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f</.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = backward} }
+\ctikzset{f_/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = below } }
+\ctikzset{f>/.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = forward } }
+\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = above } }
+
+\ctikzset{f/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/flow/label/name=#1}
+ \ctikzsetvalof{bipole/flow/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}
+}
+
+%% Output routine
+\def\pgf@circ@drawflow{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@bipole@flow@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@flow@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw flow at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@flow@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \pgfextra{
+ \ifpgf@circuit@bipole@flow@backward
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \else
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \fi
+ }
+ coordinate[flowarrow,pos=\ctikzvalof{flow/distance},rotate=\pgf@circ@ffffff,yshift=\flow@offset](Farrowpos)
+ (Farrowpos.\pgf@circ@bipole@flow@label@where) node[anchor=\pgf@circ@dir]{ \pgf@circ@finallabels{flow/label}}
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirclabel.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirclabel.tex
new file mode 100644
index 0000000000..0d14585846
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirclabel.tex
@@ -0,0 +1,342 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{annotation/.style = { a=#1 } }
+\ctikzset{a/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1}
+ \ctikzsetvalof{bipole/annotation/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{annotation above/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{a^/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{annotation below/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+\ctikzset{a_/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+
+% This is to adjust spacing for the labels so that they are not cramped on components
+\def\pgf@circ@ls{.75ex} % labelspace to have just one point to change
+
+\def\pgf@circ@drawlabels#1{
+ \pgfextra{
+ % This function will be called with argument #1 equal
+ % to "label" or "annotation" form pgfcircpath.tex.
+ % pgf@circ@direction is the direction of the path,
+ % its value is set in pgfcircpath.tex
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \pgfmathround{\pgfmathresult} % avoid precision loss errors
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/position}}
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ % \typeout{INI: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc}
+ %
+ % normalize the angle values
+ %
+ \pgfmathmod{\pgf@circ@labanc}{360}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is inverted, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ %
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is mirrored, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ % \typeout{FIN: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc}
+ }
+ %Firstly, place a coordinate directly at the edge of the shape
+ (\ctikzvalof{bipole/name}.\pgf@circ@temp) coordinate (labelcoor)
+ %now decide, which labels should be drawn
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabels{#1}
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabels{#1}
+ \else% smart
+ \pgf@circ@drawsmartlabels{#1}
+ \fi
+ \fi
+}
+
+
+\def\pgf@circ@drawsmartlabels#1{
+ \pgfextra{
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70
+ \pgf@circ@drawrotlabels{#1}
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ }
+
+
+\def\pgf@circ@drawrotlabels#1{
+ \pgfextra{
+ % scale the distances in function of zoom, so that they are not
+ % dependent on it but on font size. Thanks to @marmot
+ % https://tex.stackexchange.com/a/476018/38080
+ % the coeffcient is adjusted so that the distance is more or less
+ % the same for rotated labels and straight ones (although it will
+ % depend on the font, so it's not exact).
+ \pgfgettransformentries{\tmp}{\tmp}{\tmp}{\myscale}{\tmp}{\tmp}
+ \pgfmathsetlength\pgf@circ@res@temp{1.5*\pgf@circ@ls/\myscale}
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ %we need some more space for placement below, due to mid-anchor
+ \else % we do not have <= in \ifnum...
+ \pgf@circ@res@temp=1.5\pgf@circ@res@temp
+ \fi
+ %Calculate rotation of the label from direction and strip decimals
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ % rotate the label at second or third quadrant:
+ \ifnum \pgfcirclabrot > 90 \ifnum \pgfcirclabrot < 270
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %invert the space relationships due to rotated strings
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ \pgf@circ@res@temp=1.5\pgf@circ@res@temp
+ \fi
+ \fi\fi
+ \pgfmathparse{\ctikzvalof{bipole/#1/position}>0?\pgf@circ@direction+90:\pgf@circ@direction-90}
+ \edef\pgf@circ@labposangle{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ % reset cm is not working correctly here
+ (labelcoor)++(\pgf@circ@labposangle:\the\pgf@circ@res@temp) coordinate(labelcoor)
+ node[anchor=mid, rotate=\pgfcirclabrot](\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@drawreglabels#1{
+ %Now calculate all shape positions
+ %Use mid-anchor at x-axis and base-anchor at y-axis, respectively.
+ %All points between will be addressed by angled-anchors:
+ \pgfextra{
+ % scale ex-distance to make it independent on scale
+ % thanks @marmot see https://tex.stackexchange.com/a/476018/38080
+ \pgfgettransformentries{\tmp}{\tmp}{\tmp}{\myscale}{\tmp}{\tmp}
+ \pgfmathsetlength\pgf@circ@res@temp{\pgf@circ@ls/\myscale}
+ \pgfmathadd{\pgf@circ@labanc}{90}
+ \pgfmathround{\pgfmathresult}
+ \def\pgf@circ@labanctext{\pgf@circ@labanc}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathparse{mod(\pgf@circ@temp,180)>135?mod(\pgf@circ@temp,180)-180:mod(\pgf@circ@temp,180)}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ %Values around 90 are at both y-axis
+ \ifnum \pgfcircmathresult > 84 \ifnum \pgfcircmathresult< 96
+ \pgfextra{\edef\pgf@circ@labpos{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}}
+ \ifnum \pgf@circ@labpos > 180
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanctext{mid west}}
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{mid east}}
+ \fi
+ \else
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanctext{mid east}}
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{mid west}}
+ \fi
+ \fi
+ \fi\fi
+ %Values between -5 and 5 are at pos /neg x-axis
+ \pgfextra{\def\uffa{}\newdimen\realshift\realshift=\dimexpr1pt\relax}
+ \ifnum \pgfcircmathresult <6 \ifnum \pgfcircmathresult > -6
+ \ifnum \ctikzvalof{bipole/#1/position} < 0
+ \ifnum \pgf@circ@labanc > 90
+ % using base coordinate instead of south to naturally align
+ % symbols with descendants; but this invalidate the effect of
+ % the inner sep, so recover it by shifting the anchor
+ % reset cm is not working sometime, use @marmot solution
+ % see https://tex.stackexchange.com/a/476018/38080
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{north}}%north
+ \fi
+ \else
+ \ifnum \pgf@circ@labanc < 90
+ % shift, as above
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \ifnum \pgf@circ@labanc > 180
+ % this shouldn't happen, but somehow it does (270 degree anchors)
+ % shift, as above
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{north}}%north
+ \fi
+ \fi
+ \fi
+ \fi\fi
+ (labelcoor) node[anchor=\pgf@circ@labanctext,
+ inner sep=0.5\pgf@circ@res@temp, outer sep=0pt,
+ ](\ctikzvalof{bipole/name}#1){\strut\pgf@circ@finallabels{#1}%
+ }
+}
+
+\def\pgf@circ@finallabels#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$%
+ \fi%
+}
+
+\ctikzset{text/.style={t=#1}}
+\ctikzset{t/.code={%
+ \ctikzsetvalof{bipoles/twoport/text}{#1}%
+}}
+
+%%%% Stacked labels
+%
+% stacked labels by Romano Giannetti romano@rgtti.com
+% heavily based on Claudo Fiandrinos's https://tex.stackexchange.com/a/65792/38080
+% \expandafter trick inspired by Matthew Leingang's https://tex.stackexchange.com/a/12272/38080
+%
+% labels are in a tabular, globally aligned:
+% vertically with key l2 valign (default c)
+% c: center t: top b: bottom
+% horizontally with key l2 align (default l)
+% l: left c: centered r: right
+% you can switch sides using l2_=... and l2^=...
+% syntax is l2_ = line1 and line2 (same for l2^)
+%
+\ctikzset{%
+ l2 valign/.store in=\ltwo@valign, l2 valign=c,
+ l2 halign/.store in=\ltwo@halign, l2 halign=l,
+}
+\ctikzset{l2base/.code n args={2}{
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=%
+ \bgroup
+ \setlength{\tabcolsep}{2pt}%
+ \def\ltwo@tabu{\tabular[\ltwo@valign]}%
+ \expandafter\ltwo@tabu\expandafter{\ltwo@halign}%
+ #1\\ #2%
+ \endtabular
+ \egroup
+ }%
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#2}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+\ctikzset{l2/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 above/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2^/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 below/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+\ctikzset{l2_/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircmonopoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircmonopoles.tex
new file mode 100644
index 0000000000..88ca4711da
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircmonopoles.tex
@@ -0,0 +1,1011 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%
+%% Grounds
+%%%%%%%%%%%%%
+
+
+%% Ground symbol
+% #1 -> name
+% #2 -> width
+% #3 -> depth
+% #4 -> code
+\long\def\pgf@circ@declareground#1#2#3#4{
+ \pgfdeclareshape{#1}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{grounds}} % class of these components
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor{\southeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{monopoles/ground/width}\pgf@circ@scaled@Rlen
+ \pgf@x=#2\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/ground/width}\pgf@circ@scaled@Rlen
+ \pgf@y=-#3\pgf@y
+ }
+ \anchor{north}{\pgfpointorigin}
+ \anchor{north east}{\southeast\pgf@y=0pt\relax}
+ \anchor{east}{\southeast\pgf@y=.5\pgf@y}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\southeast\pgf@y=.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{north west}{\southeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@scaled@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ #4
+ \endpgfscope
+ }
+ }
+}
+
+
+\pgf@circ@declareground{ground}{0.6}{1.6}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{tlground}{0.6}{0.4}{
+ \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+
+\pgf@circ@declareground{rground}{0.6}{1}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{monopoles/rground}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+\pgf@circ@declareground{tground}{0.6}{0}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{sground}{0.6}{1.8}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+}
+
+% noiseless ground
+\pgf@circ@declareground{nground}{0.9}{1.6}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.9\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{0.9\pgf@circ@res@step}
+ \pgfusepath{draw}
+}
+
+% protective ground
+\pgf@circ@declareground{pground}{0.9}{1.8}{
+ \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0pt}{-0.9\pgf@circ@res@step}}{0.9\pgf@circ@res@step}
+ \pgf@circ@draworfill
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% chassis ground
+\pgf@circ@declareground{cground}{1}{2}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgf@circ@setlinewidth{monopoles/ground}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.00\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{ 0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{ 0.50\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{ 0.00\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.25\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Contributed by @fotesan https://github.com/fotesan
+% european ground
+\pgf@circ@declareground{eground}{1.1}{1.7}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.1\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{eground2}{1.1}{1.7}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{monopoles/tground}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.45\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%%%%%
+%% Power supplies
+%%%%%%%%%%%%%%%%%%
+
+% Vcc
+\pgfdeclareshape{vcc}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{power supplies}} % class of these components
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \saveddimen{\scaledwidth}{% thanks to @Schrödinger's cat on https://tex.stackexchange.com/a/506249/38080
+ \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
+ \pgfmathsetmacro{\gscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed
+ \pgfmathsetlength{\pgf@x}{(\ctikzvalof{\ctikzclass/scale}*\gscale*\ctikzvalof{monopoles/vcc/width})*\pgf@circ@Rlen}%
+ }
+ \savedanchor{\northeast}{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=3\pgf@x%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{center}{\pgfpointorigin}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ \anchor{text}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=2\pgf@circ@res@step
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen
+ \pgfscope
+ \edef\pgf@circ@temp{\ctikzvalof{monopoles/vcc/arrow}}\edef\pgf@temp{legacy}
+ \ifx\pgf@temp\pgf@circ@temp
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \else
+ \pgfsetarrowsend{\pgf@circ@temp}
+ \fi
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{power supplies}} % class of these components
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \saveddimen{\scaledwidth}{% thanks to @Schrödinger's cat on https://tex.stackexchange.com/a/506249/38080
+ \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
+ \pgfmathsetmacro{\gscale}{sqrt(abs(\tmpa*\tmpd-\tmpb*\tmpc))}% abs should not be needed
+ \pgfmathsetlength{\pgf@x}{(\ctikzvalof{\ctikzclass/scale}*\gscale*\ctikzvalof{monopoles/vcc/width})*\pgf@circ@Rlen}%
+ }
+ \savedanchor{\northeast}{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=-3\pgf@x%
+ }
+ \anchor{south}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax}
+ \anchor{north}{\pgfpointorigin}
+ \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast\pgf@y=0pt\relax}
+ \anchor{north west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{center}{\pgfpointorigin}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ \anchor{text}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=-2\pgf@circ@res@step
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+
+ \behindforegroundpath{
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@scaled@Rlen
+ \pgfscope
+ \edef\pgf@circ@temp{\ctikzvalof{monopoles/vee/arrow}}\edef\pgf@temp{legacy}
+ \ifx\pgf@temp\pgf@circ@temp
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \else
+ \pgfsetarrowsend{\pgf@circ@temp}
+ \fi
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%%%%%%%%%%%%%%%%
+%% RF elements
+%%%%%%%%%%%%%%%%
+
+% Legacy tlinestub
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor{\northeast}{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@scaled@Rlen
+ \pgf@x=1.2\pgf@circ@res@step
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@scaled@Rlen
+ \pgf@y=.2\pgf@circ@res@step%
+ }
+ % the center is on the left side of the shape for facility of usage
+ \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0.5\pgf@x\relax}
+ \anchor{west}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=0cm\relax}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@scaled@Rlen
+ \pgf@circ@res@step=0.6\pgf@circ@scaled@Rlen
+
+ \pgfscope\begin{pgftransparencygroup}
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgf@circ@maybefill
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \end{pgftransparencygroup} \endpgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ }
+}
+
+%% New antennas without tails
+
+% main body of antennas
+\def\pgf@circ@antennabody{%
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfsetbeveljoin
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Waves for the antennas.
+\def\pgf@circ@antennawaves{%
+ \pgfscope
+ % define a triangle for clipping the waves
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{clip}
+ % ...and build the waves as clipped circles
+ \pgf@circ@count@a=8\pgf@circ@res@other=0.5\pgf@circ@res@step
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>2
+ \pgfpathcircle{\pgfpoint{0pt}{\pgf@circ@res@step}}{\the\pgf@circ@count@a*\pgf@circ@res@other}
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% additional shape with the waves
+\pgfdeclareshape{waves}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@scaled@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0pt}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt}
+ \anchor{bottom}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{north east}{\northeast}
+ \anchor{east}{\northeast\pgf@y=0pt}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@step=0.5\pgf@circ@res@step
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfscope
+ % define a triangle for clipping the waves
+ \pgfpathmoveto{\pgfpoint{-2\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{clip}
+ % ...and build the waves as clipped circles
+ \c@pgf@counta=8\pgf@circ@res@other=0.5\pgf@circ@res@step
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>1
+ \pgfpathcircle{\pgfpoint{-2\pgf@circ@res@step}{0pt}}{\the\c@pgf@counta*\pgf@circ@res@other}
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% the three types of antennas: simple, TX, RX. Notice that you can flip them...
+
+\pgfdeclareshape{bareantenna}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ }
+}
+
+\pgfdeclareshape{bareTXantenna}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \savedanchor{\savedwaves}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=4.2\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@x=\dimexpr-\pgf@x-\wd\pgfnodeparttextbox\relax
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{waves}{\savedwaves}
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ \pgf@circ@antennawaves
+ }
+}
+
+\pgfdeclareshape{bareRXantenna}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \savedanchor{\savedwaves}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=-4.2\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{waves}{\savedwaves}
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ \pgftransformxshift{-5.2\pgf@circ@res@step}
+ \pgf@circ@antennawaves
+ }
+}
+
+% Microstrip monopoles
+
+\pgfdeclareshape{mslstub}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor{\southeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen
+ \pgf@y=-.5\pgf@y
+ }
+ \savedanchor{\northwest}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@scaled@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\northwest\pgf@y=0pt\relax}
+ \anchor{left}{\northwest\pgf@y=0pt\relax}
+ \anchor{right}{\southeast\pgf@y=0pt\relax}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{msrstub}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor{\southeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=0pt\relax
+ }
+ \savedanchor{\northwest}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@scaled@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/msrstub/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\pgfpointorigin}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointpolar{135}{\pgf@circ@res@step}}
+ \pgfpatharc{135}{45}{\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpointpolar{45}{\pgf@circ@res@up}}
+ \pgfpatharc{45}{135}{\pgf@circ@res@up}
+ \pgfclosepath
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{msport}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor{\southeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen
+ \pgf@y=-.5\pgf@y
+ }
+ \savedanchor{\northwest}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@scaled@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\northwest\pgf@y=0pt\relax}
+ \anchor{left}{\northwest\pgf@y=0pt\relax}
+ \anchor{right}{\southeast\pgf@y=0pt\relax}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr-.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.5*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+% Legacy antennas (with tails)
+\def\pgf@circ@shift@antenna@xy#1#2{%
+ \pgf@y=\dimexpr\pgf@y+#2\pgf@circ@res@step
+ \pgf@x=\dimexpr\pgf@x+#1\pgf@circ@res@step
+\relax}
+
+% Legacy antenna
+\pgfdeclareshape{antenna}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@circ@shift@antenna@xy{0}{3}\relax}
+ \anchor{south}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{4}\relax}
+ \anchor{west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{3}}
+ \anchor{north east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{north west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{south east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{0}{4}}
+ \anchor{south west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Legacy TX antenna
+\pgfdeclareshape{txantenna}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}}
+ \anchor{east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax}
+ \anchor{south}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax}
+ \anchor{west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}}
+ \anchor{north east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@circ@shift@antenna@xy{4}{2}}
+ \anchor{north west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}}
+ \anchor{south east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}}
+ \anchor{south west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@scaled@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Legacy RX antenna
+\pgfdeclareshape{rxantenna}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@scaled@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}}
+ \anchor{east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax}
+ \anchor{south}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax}
+ \anchor{west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}}
+ \anchor{north east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@circ@shift@antenna@xy{4}{2}}
+ \anchor{north west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}}
+ \anchor{south east}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}}
+ \anchor{south west}{\northeast\pgf@circ@res@step=\pgf@x\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@scaled@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+}
+
+% Legacy match
+\pgfdeclareshape{match}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{RF}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor{\northeast}{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@scaled@Rlen
+ \pgf@x=2\pgf@circ@res@step
+ \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@circ@res@step%
+ }
+ % the center is on the left side of the shape for facility of usage
+ \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=0pt\pgf@x=0.5\pgf@x\relax}
+ \anchor{west}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=0cm\relax}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\pgfpointorigin}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@scaled@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@scaled@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircmultipoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircmultipoles.tex
new file mode 100644
index 0000000000..ab2b0d4e77
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircmultipoles.tex
@@ -0,0 +1,857 @@
+% Copyright 2007-2009 by Massimo Redaelli
+% Copyright 2019 by Romano Giannetti
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Multipoles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%
+%% Chips
+%%%%%%%%%
+
+% let's use the same shifts everywhere, no magic numbers
+\def\pgf@circ@dip@pin@shift{0.5}
+\def\pgf@circ@qfp@pin@shift{0.25}
+
+% derived from https://tex.stackexchange.com/a/146753/38080
+% original author Mark Wibrow
+% Thanks also to John Kormylo https://tex.stackexchange.com/a/372996/38080
+% a lot of thanks to @marmot for the un-rotation hint
+% https://tex.stackexchange.com/a/473571/38080
+
+% DIP (dual in line package) chips
+
+\pgfdeclareshape{dipchip}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{chips}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedmacro\numpins{%
+ \pgf@circ@count@a=\ctikzvalof{multipoles/dipchip/num pins}%
+ \def\numpins{\the\pgf@circ@count@a}
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=-.5\wd\pgfnodeparttextbox%
+ \pgf@y=-.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by+.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+ \anchor{center}{\origin}
+ \anchor{text}{\centerpoint}% to adjust text
+ \saveddimen\height{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{((\numpins)
+ *\ctikzvalof{multipoles/dipchip/pin spacing})*\pgf@circ@scaled@Rlen/2}%
+ }%
+ \saveddimen{\chipspacing}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/dipchip/pin spacing}}}
+ \saveddimen{\width}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/dipchip/width}}}
+ \saveddimen{\extshift}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/external pins width}}}
+ % standard anchors
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@y{0.5*((\numpins)
+ *\ctikzvalof{multipoles/dipchip/pin spacing})*\pgf@circ@scaled@Rlen/2}%
+ \pgfmathsetlength\pgf@x{-0.5*\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/dipchip/width}}
+ }
+ \anchor{dot}{\northwest
+ \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing}
+ \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing}
+ }
+ \anchor{nw}{\northwest}
+ \anchor{ne}{\northwest\pgf@x=-\pgf@x}
+ \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{sw}{\northwest\pgf@y=-\pgf@y}
+ \anchor{north west}{\northwest}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{south east}{\northwest\pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{south west}{\northwest\pgf@y=-\pgf@y}
+ \anchor{n}{\northwest\pgf@x=0pt }
+ \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{w}{\northwest\pgf@y=0pt }
+ \anchor{north}{\northwest\pgf@x=0pt }
+ \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{west}{\northwest\pgf@y=0pt }
+ % start drawing
+ \backgroundpath{%
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step = \ctikzvalof{multipoles/dipchip/pin spacing}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@other = \ctikzvalof{multipoles/external pins width}\pgf@circ@scaled@Rlen
+ \pgfscope% (for the line width)
+ \pgf@circ@setlinewidth{multipoles}{\pgflinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\width/2}{-\height/2}}{\pgfpoint{\width/2}{\height/2}}%
+ \pgf@circ@draworfill
+ %% upside mark
+ \ifpgf@circuit@chip@topmark
+ \pgfpathmoveto{\pgfpoint{0.2*\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpatharc{0}{180}{0.2*\pgf@circ@res@left}
+ \fi
+ \pgfusepath{stroke}%
+ \pgfsetcolor{\ctikzvalof{color}}
+ % Adding the pin number
+ \ifpgf@circuit@chip@shownumbers
+ \pgf@circ@count@a=\numpins\relax
+ \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a
+ % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+ \ifpgf@circuit@chip@straightnumbers
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+ \else
+ \pgfmathsetmacro{\rot}{0}
+ \pgfmathsetmacro{\quadrant}{0}
+ \fi
+ \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+ \def\mytext{\ctikzvalof{multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \ifcase\quadrant % rotation 0
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or % rotation -90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or %rotation 180
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or % rotation +90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \fi
+ \endpgfscope
+ \ifdim\pgf@circ@res@other>0pt
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth}
+ \pgf@circ@count@a=\numpins\relax
+ \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \edef\padfrac{\ctikzvalof{multipoles/external pad fraction}}
+ \ifnum\padfrac>0
+ \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac
+ % left side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % right side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \else
+ % left side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % right side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \fi
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{stroke}
+ \endpgfscope
+ \fi
+ }%
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@dipchip{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\numpins\relax
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % we will create two anchors per pin: the "normal one" like `pin 1` for the
+ % electrical contact, and the "border one" like `bpin 1` for labels.
+ % they will coincide if `external pins width` is set to 0.
+ \expandafter\xdef\csname pgf@anchor@dipchip@pin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@dipchip@bpin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop%
+ }%
+ }
+
+% QFP (quad flat package) chips
+
+\pgfdeclareshape{qfpchip}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{chips}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedmacro\numpins{%
+ \pgf@circ@count@a=\ctikzvalof{multipoles/qfpchip/num pins}%
+ \def\numpins{\the\pgf@circ@count@a}
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=-.5\wd\pgfnodeparttextbox%
+ \pgf@y=-.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by+.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+ \anchor{center}{\origin}
+ \anchor{text}{\centerpoint}% to adjust text
+ \saveddimen\height{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{((\numpins+2)
+ *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf@circ@scaled@Rlen/4}%
+ }%
+ \saveddimen\width{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{((\numpins+2)
+ *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf@circ@scaled@Rlen/4}%
+ }%
+ \saveddimen{\chipspacing}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/qfpchip/pin spacing}}}
+ \saveddimen{\extshift}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{\pgf@circ@scaled@Rlen*\ctikzvalof{multipoles/external pins width}}}
+ % standard anchors
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@y{0.5*((\numpins+2)
+ *\ctikzvalof{multipoles/qfpchip/pin spacing})*\pgf@circ@scaled@Rlen/4}%
+ \pgf@x=-\pgf@y
+ }
+ \anchor{dot}{\northwest
+ \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing}
+ \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing}
+ }
+ \anchor{nw}{\northwest}
+ \anchor{ne}{\northwest\pgf@x=-\pgf@x}
+ \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{sw}{\northwest\pgf@y=-\pgf@y}
+ \anchor{north west}{\northwest}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{south east}{\northwest\pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{south west}{\northwest\pgf@y=-\pgf@y}
+ \anchor{n}{\northwest\pgf@x=0pt }
+ \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{w}{\northwest\pgf@y=0pt }
+ \anchor{north}{\northwest\pgf@x=0pt }
+ \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{west}{\northwest\pgf@y=0pt }
+ % start drawing
+ \backgroundpath{%
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step = \ctikzvalof{multipoles/qfpchip/pin spacing}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@other = \ctikzvalof{multipoles/external pins width}\pgf@circ@scaled@Rlen
+ \pgfscope% (for the line width)
+ \pgf@circ@setlinewidth{multipoles}{\pgflinewidth}
+ %% upside mark
+ \ifpgf@circuit@chip@topmark
+ \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2-\pgf@circ@res@step/2}}
+ \pgfpathlineto{\pgfpoint{-\width/2+\pgf@circ@res@step/2}{\height/2}}
+ \else
+ \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2}}
+ \fi
+ %% rest of the shape
+ \pgfpathlineto{\pgfpoint{\width/2}{\height/2}}
+ \pgfpathlineto{\pgfpoint{\width/2}{-\height/2}}
+ \pgfpathlineto{\pgfpoint{-\width/2}{-\height/2}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ % Adding the pin number
+ \pgfsetcolor{\ctikzvalof{color}}
+ \ifpgf@circuit@chip@shownumbers
+ \pgf@circ@count@a=\numpins%
+ \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a
+ % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+ \ifpgf@circuit@chip@straightnumbers
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+ \else
+ \pgfmathsetmacro{\rot}{0}
+ \pgfmathsetmacro{\quadrant}{0}
+ \fi
+ \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+ \def\mytext{\ctikzvalof{multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \ifcase\quadrant % rotation 0
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or % rotation -90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or %rotation 180
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or % rotation +90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \fi
+ \endpgfscope
+ \ifdim\pgf@circ@res@other>0pt
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{multipoles/external pins thickness}\pgflinewidth}
+ \pgf@circ@count@a=\numpins%
+ \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \edef\padfrac{\ctikzvalof{multipoles/external pad fraction}}
+ \ifnum\padfrac>0
+ \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac
+ % left side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % bottom side pads
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ % right side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % top side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \else
+ % left side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % bottom side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ % right side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % top side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{stroke}
+ \endpgfscope
+ \fi
+ }%
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@qfpchip{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\numpins%
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \expandafter\xdef\csname pgf@anchor@qfpchip@pin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@qfpchip@bpin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop%
+ }%
+ }
+
+%% anchors for DIP
+\def\pgf@circ@dippinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+ \c@pgf@countc=\numpins\relax
+ \divide\c@pgf@countc by 2
+ \ifnum #1 > \the\c@pgf@countc
+ % right side
+ \pgfpoint{\width/2+#2*\extshift}{-\height/2+(\pgf@circ@dip@pin@shift-\c@pgf@countc+#1-1)*\chipspacing}
+ \else
+ \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@dip@pin@shift-#1)*\chipspacing}
+\fi
+}
+
+%% anchors for QFP
+\def\pgf@circ@qfppinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+ \c@pgf@countc=\numpins\relax
+ \divide\c@pgf@countc by 4
+ \ifnum #1 > \the\c@pgf@countc
+ \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 2
+ \ifnum #1 > \the\c@pgf@countb
+ \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 3
+ \ifnum #1 > \the\c@pgf@countb
+ % 3*npins/4 < pin, top side
+ \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift+\c@pgf@countb-#1)*\chipspacing}{\height/2+#2*\extshift}%
+ \else
+ % 2*npins/4 < pin <= 3*npins/4, right side
+ \pgfpoint{\width/2+#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}%
+ \fi
+ \else
+ % npins/4 < pin <= 2*npins/4, bottom side
+ \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}{-\height/2-#2*\extshift}%
+ \fi
+ \else
+ % <= npins/4, left side
+ \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-#1)*\chipspacing}%
+ \fi
+}
+
+%%%%%%%%%%%%%%%%%
+%% Rotary Switch
+%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{rotaryswitch}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northeast{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@scaled@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{\r*\pgf@circ@scaled@Rlen + \pgf@circ@res@temp}
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@scaled@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{-\r*\pgf@circ@scaled@Rlen - (\a<90 ? 1 : 1-2*cos(\a))*\pgf@circ@res@temp}
+ }
+ \savedanchor\central{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@scaled@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{(\a<90 ? 0 : cos(\a))*\pgf@circ@res@temp}
+ }
+ % external square limits
+ \savedanchor\extnorthwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ \pgf@x=.3052\pgf@x % the magic number is 0.25/cos(35)
+ \pgf@x=2.5\pgf@x % external square size
+ \pgf@y=-\pgf@x %square thing when angle=180?
+ }
+ \saveddimen{\width}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength\pgf@x{0.3052*\pgf@circ@scaled@Rlen*\ctikzvalof{tripoles/spdt/width}}}
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{multipoles/rotary/shape}}}
+ \savedmacro{\channels}{\def\channels{\ctikzvalof{multipoles/rotary/channels}}}
+ \savedmacro{\angle}{\def\angle{\ctikzvalof{multipoles/rotary/angle}}}
+ \savedmacro{\wiper}{\def\wiper{\ctikzvalof{multipoles/rotary/wiper}}}
+ \savedmacro{\stepa}{\pgfmathsetmacro{\stepa}{2*\ctikzvalof{multipoles/rotary/angle}/(\ctikzvalof{multipoles/rotary/channels}-1)}}
+ % mid of the lever, to stack switches
+ %\anchor{mid}{\midlever}
+ \anchor{mid}{\northwest
+ \pgf@circ@res@temp=-\pgf@x
+ \pgfmathsetlength{\pgf@x}{\pgf@circ@res@temp*(-1+cos(\wiper))}
+ \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp*sin(\wiper)}
+ }
+ % center anchors
+ \anchor{cin}{ \northwest \pgf@y=0pt\advance\pgf@x by \radius}
+ % horizontal angles
+ \anchor{in}{ \northwest \pgf@y=0pt}
+ \anchor{ain}{ \northwest \pgf@y=0pt}
+
+ \anchor{center}{ \central \pgf@y=0pt }
+ \anchor{east}{ \northeast \pgf@y=0pt }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \central \pgf@y=-\pgf@y }
+ \anchor{north}{ \central }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northeast }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northeast \pgf@y=-\pgf@y }
+
+ \anchor{ext center}{ \pgf@y=0pt \pgf@x=0pt \advance\pgf@x by -\width}
+ \anchor{ext east}{ \extnorthwest \pgf@y=0pt \pgf@x=-\pgf@x \advance\pgf@x by -\width}
+ \anchor{ext west}{ \extnorthwest \pgf@y=0pt \advance\pgf@x by -\width}
+ \anchor{ext south}{ \extnorthwest \pgf@x=0pt \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+ \anchor{ext north}{ \extnorthwest \pgf@x=0pt \advance\pgf@x by -\width}
+ \anchor{ext south west}{ \extnorthwest \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+ \anchor{ext north east}{ \extnorthwest \pgf@x=-\pgf@x \advance\pgf@x by -\width}
+ \anchor{ext north west}{ \extnorthwest \advance\pgf@x by -\width}
+ \anchor{ext south east}{ \extnorthwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@res@right = \width
+ \pgf@circ@res@left = -\width
+
+ \pgfscope %wiper
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\radius\relax
+ \pgf@circ@res@temp=\ctikzvalof{multipoles/rotary/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\wiper}{2\pgf@circ@res@right}}}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+
+ \ifpgf@circ@rotaryarrow
+ \pgfscope % arrow
+ \ifpgf@circ@rotaryarrow@ccw\pgfsetarrowsstart{latexslim}\fi
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % center of cin node
+ \pgftransformrotate{\wiper}
+ \pgfpathmoveto{\pgfpointpolar{50}{1.0\pgf@circ@res@right}}
+ \pgfpatharc{50}{-50}{1.0\pgf@circ@res@right}
+ \ifpgf@circ@rotaryarrow@cw\pgfsetarrowsend{latexslim}\fi
+ \pgfusepath{draw}
+ \endpgfscope
+ \fi
+
+ % \typeout{CHANNELS\space\channels\space ANGLE\space\angle STEPA\space\stepa}
+ \pgf@circ@count@a=\channels\relax
+ \pgfmathsetmacro{\currenta}{-\angle}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % \typeout{LOOPIN\space\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right}
+ \pgfscope
+ \pgftransformshift{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\currenta}{2\pgf@circ@res@right}}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out \the\pgf@circ@count@a}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfmathsetmacro{\currenta}{\currenta+\stepa}
+ % \typeout{LOOPOUT\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right}
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop
+
+ \pgfscope % input
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+ \endpgfscope
+ }
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@rotaryswitch{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\channels\relax
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % we will create two anchors per pin: the "normal one" like `pin 1` for the
+ % electrical contact, and the "border one" like `bpin 1` for labels.
+ % they will coincide if `external pins width` is set to 0.
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@out\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{1}{0}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@cout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{0}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@aout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@sqout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotarysqanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop%
+ }%
+}
+
+\def\pgf@circ@rotaryanchor#1#2#3{% #1: numero del pin; #2: 1 - x pos, 0 - center; #3 0: inner, 1 outer
+ \pgf@circ@res@temp=\width
+ \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+ \pgfmathsetlength{\pgf@x}{2*(\pgf@circ@res@temp+#3*\radius/2)*cos(\myangle))+#2*\radius}
+ \pgfmathsetlength{\pgf@y}{2*(\pgf@circ@res@temp+#3*\radius/2)*sin(\myangle)}
+ \advance\pgf@x by -\pgf@circ@res@temp
+}
+
+\def\pgf@circ@rotarysqanchor#1{% external square anchors
+ \pgf@circ@res@temp=\width
+ \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+ \pgfpointborderrectangle{\pgfpointpolar{\myangle}{1pt}}{\pgfpoint{2.5\pgf@circ@res@temp}{2.5\pgf@circ@res@temp}}
+ \advance\pgf@x by -\pgf@circ@res@temp
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Seven segments displays
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{bare7seg}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{displays}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedmacro{\dotstatus}{\edef\dotstatus{\pgf@circ@sevenseg@dotstate}}
+ \saveddimen{\dotspace}{% the dot is on the right, and occupy the same as the thickness
+ \ifpgf@circ@sevenseg@dot
+ \pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/thickness}}
+ \else
+ \pgf@x=0pt
+ \fi
+ }
+ % The object extension is more or less (-width/2,-width) to (width/2,width)
+ % and adjusted for line thickness (both sides) and eventually the dot
+ \saveddimen{\width}{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen}}
+ \saveddimen{\gap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/segment sep}}}
+ \saveddimen{\boxgap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/box sep}}}
+ \savedanchor{\southwest}{% both negative
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength{\pgf@x}{-0.5*\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ \pgfmathsetlength{\pgf@y}{-\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ }
+ \savedanchor{\northeast}{% both positive
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \ifpgf@circ@sevenseg@dot
+ \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{seven seg/thickness}}
+ \else
+ \pgf@circ@res@other=0pt
+ \fi
+ \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen
+ +0.5*\ctikzvalof{seven seg/thickness}+\pgf@circ@res@other+\ctikzvalof{seven seg/box sep}}
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen
+ +0.5*\ctikzvalof{seven seg/thickness}+\ctikzvalof{seven seg/box sep}}
+ }
+ \savedanchor{\topright}{% anchor without the box sep and the thickness
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen}
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@scaled@Rlen}
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{north west}{\southwest\pgf@y=-\pgf@y}
+ \anchor{north east}{\northeast}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\southwest}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0pt}
+ \anchor{south}{\southwest\pgf@x=0pt}
+ \anchor{west}{\southwest\pgf@y=0pt}
+ \anchor{a}{\topright\pgf@x=0pt}
+ \anchor{b}{\topright\pgf@y=0.5\pgf@y}
+ \anchor{c}{\topright\pgf@y=-0.5\pgf@y}
+ \anchor{d}{\topright\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{e}{\topright\pgf@x=-\pgf@x\pgf@y=-0.5\pgf@y}
+ \anchor{f}{\topright\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{g}{\pgfpointorigin}
+ \anchor{dot}{\topright\pgf@y=-\pgf@y\advance\pgf@x by \dotspace}
+ \behindbackgroundpath{%
+ \southwest % I do not want the dot here, it will stick out
+ \pgf@circ@res@up = -\pgf@y
+ \pgf@circ@res@down = \pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \pgf@circ@res@left = -\pgf@x
+ \pgfscope
+ \pgf@circ@setlinewidth{multipoles}{\pgflinewidth}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfpathrectanglecorners%
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@left+\dotspace}{\pgf@circ@res@up}}
+ \ifpgf@circ@sevenseg@box
+ \pgf@circ@draworfill
+ \else
+ \pgf@circ@maybefill
+ \fi
+ \endpgfscope
+ \edef\bits{\ctikzvalof{seven seg/bits}}
+ \pgfscope
+ \pfg@circ@sseg@drawbits{\bits}
+ \endpgfscope
+ \pgfscope
+ \ifpgf@circ@sevenseg@dot
+ \pgf@circ@sseg@drawdots
+ \fi
+ \endpgfscope
+ }
+}
+
+\def\pgf@circ@sseg@splitbits#1#2#3#4#5#6#7\relax{%split the seven bits
+ \edef\@@a{#1}\edef\@@b{#2}\edef\@@c{#3}\edef\@@d{#4}\edef\@@e{#5}\edef\@@f{#6}\edef\@@g{#7}%
+}
+\def\pgf@circ@sseg@drawone#1#2#3#4#5{% #1 on off the x1, y1, x2 , y2
+ \ifnum #1 > 0\relax
+ \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+ \else
+ \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+ \fi
+ \pgfpathmoveto{\pgfpoint{#2}{#3}}
+ \pgfpathlineto{\pgfpoint{#4}{#5}}
+ \pgfusepath{draw}
+}
+\def\pfg@circ@sseg@drawbits#1{% #1 must be 7 bits
+ \expandafter\pgf@circ@sseg@splitbits#1\relax% a bit of magic...
+ \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}}
+ \pgfsetlinewidth{\ctikzvalof{seven seg/thickness}}
+ % \pgfsetroundcap
+ \pgfsetarrowsstart{Triangle Cap[]}
+ \pgfsetarrowsend{Triangle Cap[]}
+ % segments
+ \pgf@circ@sseg@drawone{\@@a}{-\width/2+\gap}{\width}{\width/2-\gap}{\width}
+ \pgf@circ@sseg@drawone{\@@b}{\width/2}{\width-\gap}{\width/2}{0pt+\gap}
+ \pgf@circ@sseg@drawone{\@@c}{\width/2}{0pt-\gap}{\width/2}{-\width+\gap}
+ \pgf@circ@sseg@drawone{\@@d}{\width/2-\gap}{-\width}{-\width/2+\gap}{-\width}
+ \pgf@circ@sseg@drawone{\@@e}{-\width/2}{-\width+\gap}{-\width/2}{0pt-\gap}
+ \pgf@circ@sseg@drawone{\@@f}{-\width/2}{0pt+\gap}{-\width/2}{\width-\gap}
+ \pgf@circ@sseg@drawone{\@@g}{-\width/2+\gap}{0pt}{\width/2-\gap}{0pt}
+}
+\def\pgf@circ@sseg@drawdots{% dots
+ \edef\what{empty}
+ \ifx\what\pgf@circ@sevenseg@dotstate
+ % do nothing
+ \else
+ \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}}
+ \edef\what{off}
+ \ifx\what\pgf@circ@sevenseg@dotstate
+ % dot off
+ \pgfsetfillcolor{\ctikzvalof{seven seg/color off}}
+ \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+ \else
+ % dot on
+ \pgfsetfillcolor{\ctikzvalof{seven seg/color on}}
+ \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+ \fi
+ \pgfpathcircle{\pgfpoint{\width/2+2*\pgf@circ@res@other}{-\width}}{\pgf@circ@res@other}
+ \pgfusepath{draw,fill}
+ \fi
+}
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex
new file mode 100644
index 0000000000..0c9bfc1209
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircpath.tex
@@ -0,0 +1,861 @@
+
+\def\pgf@circ@direction{0.0}
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Invert node along path
+\ctikzset{inverted/.is choice}
+\ctikzset{invert value/.initial=1}
+\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}}
+\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}}
+\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
+\newif\ifpgf@circuit@bipole@inverted
+\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted}
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90,
+ bipole/inverted=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+%% Helper function for path-function to ensure using anchors between nodes
+\def\set@explicit@center@anchor#1{
+ \pgfutil@ifundefined{pgf@sh@ns@#1}
+ {
+ %This coordinate is no node(but a relative position or a coordinate), no further handling needed
+ }{
+ \pgfutil@in@.{#1}
+ \ifpgfutil@in@
+ % Anchor is used, do nothing!
+ \else%
+ \let\tikz@moveto@waiting=\relax
+ \pgfpathmoveto{\tikz@last@position}%force movement, because tikz@moveto@waiting
+ \edef#1{#1.center}%ensure using center anchor
+ \fi
+}
+}
+
+
+%% Generic bipole path
+%% I am not user what the second argument is needed for
+\def\pgf@circ@bipole@path#1#2{
+
+ \pgfextra{
+ \set@explicit@center@anchor{\tikztostart}
+ \set@explicit@center@anchor{\tikztotarget}
+ \pgfsyssoftpath@getcurrentpath{\myp@th}%% save current path to extend after calculation of correct start/end coordinates
+ \ctikzset{bipole/kind = #1}
+ \edef\pgf@temp{\ctikzvalof{bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #1\pgf@circ@rand} % create it (re-usage should not create problem, but...)
+ \fi
+ }
+
+ (\tikztostart) coordinate (\ctikzvalof{bipole/name}start)%necessary to get correct coordinates in the case of relative start/end or constructions like ((node1)-|(node2))
+ (\tikztotarget) coordinate (\ctikzvalof{bipole/name}end)
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathround{\pgfmathresult}
+ \edef\pgf@circ@direction{\pgfmathresult}%Calculate direction(angle) of path
+ \pgfsyssoftpath@setcurrentpath{\myp@th}
+ }
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ --($(\ctikzvalof{bipole/name}start) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}end)$) %ugly workaround to get correct linejoins(node breaks path?)
+ \fi
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)%%positio of middle node
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifpgf@circuit@bipole@inverted
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.right)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.left)
+ \fi
+ \else
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.left)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.right)
+ \fi
+ \fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (anchorstartnode)
+ (anchorendnode) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi
+ \pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ \pgf@circ@ifkeyempty{bipole/flow/label/name}\else\pgf@circ@drawflow\fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ (\ctikzvalof{bipole/name}end)%Move to end of path
+ \else
+ ($(\ctikzvalof{bipole/name}end) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}start)$) -- (\ctikzvalof{bipole/name}end)%ugly workaround to get correct linejoins(node breaks path?)
+ %tikztostart and tikztotarget could not be used, because it would break if target coordinate is something like (node1-|node2)
+
+ \fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ \tikztonodes%draw pending nodes an path
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.initial=none}
+\ctikzset{bipole/nodes/right/.initial=none}
+\tikzset{bipole nodes/.style n args={2}{%
+ \circuitikzbasekey/bipole/nodes/left=#1,
+ \circuitikzbasekey/bipole/nodes/right=#2
+ }
+}
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+
+% rectjoinfill workarounds
+
+\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{none}}
+ \ifx\pgf@temp\pgf@circ@temp\else(\tikztostart) node[\pgf@circ@temp] {}\fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} }
+ \ifx\pgf@temp\pgf@circ@temp\else(\tikztotarget) node[\pgf@circ@temp] {}\fi
+}
+
+%% Path definitions
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@sresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{thermistor}{#1}\else\pgf@circ@bipole@path{resistivesens}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@capacitivesens@path#1{\pgf@circ@bipole@path{capacitivesens}{#1}}
+\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@batteryone@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@batterytwo@path#1{\pgf@circ@bipole@path{battery2}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@cutechoke@path#1{\pgf@circ@bipole@path{cutechoke}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@inductivesens@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductivesens@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductivesens@path{#1}%
+ \else%
+ \pgf@circ@americaninductivesens@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@europeaninductivesens@path#1{\pgf@circ@bipole@path{sfullgeneric}{#1}}
+\def\pgf@circ@americaninductivesens@path#1{\pgf@circ@bipole@path{samericaninductor}{#1}}
+\def\pgf@circ@cuteinductivesens@path#1{\pgf@circ@bipole@path{scuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@bulb@path#1{\pgf@circ@bipole@path{bulb}{#1}}
+\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
+\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
+\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@ecsource@path#1{\pgf@circ@bipole@path{ecsource}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@nos@path#1{\pgf@circ@bipole@path{nos}{#1}}
+\def\pgf@circ@ncs@path#1{\pgf@circ@bipole@path{ncs}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@ncpushbutton@path#1{\pgf@circ@bipole@path{ncpushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@oscope@path#1{\pgf@circ@bipole@path{oscope}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
+\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
+\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@mstline@path#1{\pgf@circ@bipole@path{mstline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
+\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
+\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@bandstop@path#1{\pgf@circ@bipole@path{bandstop}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+%%Mechanical
+\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
+\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
+\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}
+\def\pgf@circ@viscoe@path#1{\pgf@circ@bipole@path{viscoe}{#1}}
+
+%% Styles
+
+\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
+\def\compattikzset#1{\tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
+\compattikzset{viscoe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@viscoe@path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batteryone@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batterytwo@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\compattikzset{cute choke/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cutechoke@path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{mstline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mstline@path, l=#1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{empty controlled source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source = #1, \circuitikzbasekey/bipole/is current=true}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source = #1, \circuitikzbasekey/bipole/is current=true}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+\compattikzset{bulb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bulb@path, l=#1}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\compattikzset{bandstop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandstop@path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+% % % % % %
+% % Begin of Diodes
+% % % % % %
+
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@fullbidirectionaldiode@path#1{\pgf@circ@bipole@path{fullbidirectionaldiode}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+\def\pgf@circ@emptybidirectionaldiode@path#1{\pgf@circ@bipole@path{emptybidirectionaldiode}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+\compattikzset{full bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullbidirectionaldiode@path}}
+\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
+\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{empty bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptybidirectionaldiode@path}}
+\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
+\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
+%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+\compattikzset{bidirectionaldiode/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{biDo/.style = {\comnpatname empty bidirectionaldiode}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{biD*/.style = {\comnpatname full bidirectionaldiode}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{biD/.style = {\comnpatname bidirectionaldiode}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+\compattikzset{biD-/.style = {\comnpatname empty bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{normal closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{normal open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{nopb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{normally open push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{ncpb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}}
+\compattikzset{normally closed push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}}
+\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}
+\tikzset{oscope/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@oscope@path, l=#1}}
+
+% cute switches
+%% closed cute switch
+\def\pgf@circ@cuteclosedswitch@path#1{\pgf@circ@bipole@path{cuteclosedswitch}{#1}}
+\compattikzset{cute closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosedswitch@path, l=#1}}
+\compattikzset{ccsw/.style= {\comnpatname cute closed switch= #1}}
+
+%% open cute switch
+\def\pgf@circ@cuteopenswitch@path#1{\pgf@circ@bipole@path{cuteopenswitch}{#1}}
+\compattikzset{cute open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopenswitch@path, l=#1}}
+\compattikzset{cosw/.style= {\comnpatname cute open switch= #1}}
+
+%% closing cute switch
+\def\pgf@circ@cuteclosingswitch@path#1{\pgf@circ@bipole@path{cuteclosingswitch}{#1}}
+\compattikzset{cute closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosingswitch@path, l=#1}}
+\compattikzset{ccgsw/.style= {\comnpatname cute closing switch= #1}}
+
+%% opening cute switch
+\def\pgf@circ@cuteopeningswitch@path#1{\pgf@circ@bipole@path{cuteopeningswitch}{#1}}
+\compattikzset{cute opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopeningswitch@path, l=#1}}
+\compattikzset{cogsw/.style= {\comnpatname cute opening switch= #1}}
+
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, l=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path, i=#1}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path, v=#1}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{ecsource/.style = {\comnpatname empty controlled source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+ \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} }
+ \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} }
+ \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+%current sources
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+ \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+ \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+ \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+% cute sources
+\def\pgf@circ@vsourceC@path#1{\pgf@circ@bipole@path{vsourceC}{#1}}
+\compattikzset{cute european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceC/.style= {\comnpatname cute european voltage source= #1}}
+\compattikzset{ceV/.style= {\comnpatname cute european voltage source= #1}}
+
+\def\pgf@circ@isourceC@path#1{\pgf@circ@bipole@path{isourceC}{#1}}
+\compattikzset{cute european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceC/.style= {\comnpatname cute european current source= #1}}
+\compattikzset{ceI/.style= {\comnpatname cute european current source= #1}}
+
+\def\pgf@circ@cvsourceC@path#1{\pgf@circ@bipole@path{cvsourceC}{#1}}
+\compattikzset{cute european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{cvsourceC/.style= {\comnpatname cute european controlled voltage source= #1}}
+\compattikzset{cceV/.style= {\comnpatname cute european controlled voltage source= #1}}
+
+\def\pgf@circ@cisourceC@path#1{\pgf@circ@bipole@path{cisourceC}{#1}}
+\compattikzset{cute european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{cisourceC/.style= {\comnpatname cute european controlled current source= #1}}
+\compattikzset{cceI/.style= {\comnpatname cute european controlled current source= #1}}
+
+% noise sources
+\def\pgf@circ@vsourceN@path#1{\pgf@circ@bipole@path{vsourceN}{#1}}
+\compattikzset{noise voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceN@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceN/.style= {\comnpatname noise voltage source= #1}}
+\compattikzset{nV/.style= {\comnpatname noise voltage source= #1}}
+
+\def\pgf@circ@isourceN@path#1{\pgf@circ@bipole@path{isourceN}{#1}}
+\compattikzset{noise current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceN@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceN/.style= {\comnpatname noise current source= #1}}
+\compattikzset{nI/.style= {\comnpatname noise current source= #1}}
+
+% resistive sensor american style
+\def\pgf@circ@resistivesens@path#1{\pgf@circ@bipole@path{resistivesens}{#1}}
+\compattikzset{american resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistivesens@path, l=#1}}
+\compattikzset{european resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{resistive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@sresistor@path, l=#1}}
+\compattikzset{sR/.style= {\comnpatname resistive sensor= #1}}
+
+\compattikzset{capacitive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitivesens@path, l=#1}}
+\compattikzset{sC/.style= {\comnpatname capacitive sensor= #1}}
+
+\compattikzset{cute inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductivesens@path, l=#1}}
+\compattikzset{european inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductivesens@path, l=#1}}
+\compattikzset{american inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductivesens@path, l=#1}}
+\compattikzset{inductive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductivesens@path, l=#1}}
+\compattikzset{sL/.style= {\comnpatname inductive sensor= #1}}
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+% activate the to-style crossing
+\def\pgf@circ@crossing@path#1{\pgf@circ@bipole@path{crossing}{#1}}
+\compattikzset{crossing/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@crossing@path, l=#1}}
+\compattikzset{xing/.style= {\comnpatname crossing= #1}}
+
+%% loudspeaker and microphone
+
+\def\pgf@circ@loudspeaker@path#1{\pgf@circ@bipole@path{loudspeaker}{#1}}
+\compattikzset{loudspeaker/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@loudspeaker@path, l=#1}}
+
+\def\pgf@circ@mic@path#1{\pgf@circ@bipole@path{mic}{#1}}
+\compattikzset{mic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mic@path, l=#1}}
+
+% more instrument
+\def\pgf@circ@rmeter@path#1{\pgf@circ@bipole@path{rmeter}{#1}}
+\compattikzset{rmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeter@path, l=#1}}
+\def\pgf@circ@rmeterwa@path#1{\pgf@circ@bipole@path{rmeterwa}{#1}}
+\compattikzset{rmeterwa/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeterwa@path, l=#1}}
+\def\pgf@circ@smeter@path#1{\pgf@circ@bipole@path{smeter}{#1}}
+\compattikzset{smeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@smeter@path, l=#1}}
+% current loop probes
+\def\pgf@circ@iloop@path#1{\pgf@circ@bipole@path{iloop}{#1}}
+\compattikzset{iloop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop@path, l=#1}}
+\def\pgf@circ@iloop2@path#1{\pgf@circ@bipole@path{iloop2}{#1}}
+\compattikzset{iloop2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop2@path, l=#1}}
+% qucs-style probes
+\def\pgf@circ@qiprobe@path#1{\pgf@circ@bipole@path{qiprobe}{#1}}
+\compattikzset{qiprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qiprobe@path, l=#1}}
+\def\pgf@circ@qvprobe@path#1{\pgf@circ@bipole@path{qvprobe}{#1}}
+\compattikzset{qvprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qvprobe@path, l=#1}}
+\def\pgf@circ@qpprobe@path#1{\pgf@circ@bipole@path{qpprobe}{#1}}
+\compattikzset{qpprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qpprobe@path, l=#1}}
+
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@inverted
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \pgfmathround{\pgfmathresult}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \drawpoles
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{elmech}
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{hemt}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{nigfetebulk}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{pigfetebulk}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+\pgf@circ@definetranspath{Lpigbt}
+\pgf@circ@definetranspath{Lnigbt}
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircquadpoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircquadpoles.tex
new file mode 100644
index 0000000000..1ab0f935b6
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircquadpoles.tex
@@ -0,0 +1,1124 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{inductors}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{quadpoles/#1/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@scaled@Rlen
+ \pgf@x=-\ctikzvalof{quadpoles/#1/width}\pgf@x
+ }
+ %% we define the upper right (positive coord) dot (which is B1)
+ \savedanchor{\innerdot}{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@xa=.5\pgf@circ@scaled@Rlen
+ \pgf@xa=-\ctikzvalof{quadpoles/#1/width}\pgf@xa
+ % by default use the cute inductor size
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa-\ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@scaled@Rlen/2}
+ % check if it's american
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}
+ \edef\pgf@temp{american}
+ \ifx\pgf@circ@temp\pgf@temp
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa-\ctikzvalof{bipoles/americaninductor/height}*\pgf@circ@scaled@Rlen/2}
+ \fi
+ % check if it's european
+ \edef\pgf@temp{european}
+ \ifx\pgf@circ@temp\pgf@temp
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa-\ctikzvalof{bipoles/fullgeneric/height}*\pgf@circ@scaled@Rlen/2}
+ \fi
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@scaled@Rlen}
+ }
+ \savedanchor{\outerdot}{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@xa=.5\pgf@circ@scaled@Rlen
+ \pgf@xa=-\ctikzvalof{quadpoles/#1/width}\pgf@xa
+ % by default use the cute inductor size
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa+\ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@scaled@Rlen/2}
+ % check if it's american
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}
+ \edef\pgf@temp{american}
+ \ifx\pgf@circ@temp\pgf@temp
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa+\ctikzvalof{bipoles/americaninductor/height}*\pgf@circ@scaled@Rlen/2}
+ \fi
+ % check if it's european
+ \edef\pgf@temp{european}
+ \ifx\pgf@circ@temp\pgf@temp
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@xa+\ctikzvalof{bipoles/fullgeneric/height}*\pgf@circ@scaled@Rlen/2}
+ \fi
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@scaled@Rlen}
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ %% dot's anchors
+ \anchor{inner dot A1}{\innerdot\pgf@x=-\pgf@x}
+ \anchor{outer dot A1}{\outerdot\pgf@x=-\pgf@x}
+ \anchor{inner dot A2}{\innerdot\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{outer dot A2}{\outerdot\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{inner dot B1}{\innerdot}
+ \anchor{outer dot B1}{\outerdot}
+ \anchor{inner dot B2}{\innerdot\pgf@y=-\pgf@y}
+ \anchor{outer dot B2}{\outerdot\pgf@y=-\pgf@y}
+ % geographical
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ #2
+ }
+ }
+}
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \ctikzvalof{quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\ctikzvalof{quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\ctikzvalof{quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+\pgfcircdeclarequadpole{transformer}{
+ \pgf@circ@drawtransformerbasicbody
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{quadpoles}{\pgflinewidth}
+ \pgfmathsetlength{\pgf@circ@res@other}{min(.7*\stretto*\pgf@circ@res@up, .8*\pgf@circ@res@right)} % radius
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{-\pgf@circ@res@other}}
+ \pgfpatharc{-90}{90}{\pgf@circ@res@other}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@other}}
+ \pgfpatharc{90}{270}{\pgf@circ@res@other}
+ \pgfpathclose
+ \pgf@circ@draworfill
+}{}
+
+%%%%%%%%%%%%%%%%%%%%
+%% Block elements
+%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{mixer}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \ifpgf@circuit@boxed
+ \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\ctikzvalof{tripoles/mixer/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/mixer/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@scaled@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \ifpgf@circuit@boxed
+ \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\ctikzvalof{tripoles/adder/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/adder/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@scaled@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{oscillator}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \ifpgf@circuit@boxed
+ \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \else
+ \pgf@y=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/oscillator/width}\pgf@circ@scaled@Rlen
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y}
+ \anchor{north east}{ \northwest \pgf@x=0pt\relax}
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{text}{
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@scaled@Rlen{}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+ % draw outer box
+ \ifpgf@circuit@boxed{}
+ \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{circulator}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \ifpgf@circuit@boxed
+ \pgf@y=\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\ctikzvalof{tripoles/circulator/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/circulator/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@scaled@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{blockbox}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed{}
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+ }
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/wilkinson/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\ctikzvalof{tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{wilk@int@R}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@scaled@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{wilk@int@R}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{wilk@int@R}{right}}
+
+ \pgfpathmoveto{\pgfpointanchor{wilk@int@R}{left}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+%% couplers generics
+\long\def\pgfcircdeclarefourport#1#2{
+
+ \pgfdeclareshape{#1}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{blocks}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{quadpoles/#1/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@scaled@Rlen
+ \pgf@x=-\ctikzvalof{quadpoles/#1/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+
+ % draw inner stuff
+ #2
+
+ % draw inner text
+ \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ }
+ }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircshapes.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircshapes.tex
new file mode 100644
index 0000000000..fdaad445ce
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircshapes.tex
@@ -0,0 +1,696 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{nodes width}\pgf@circ@Rlen
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{\ctikzvalof{nodes width}*\pgf@circ@Rlen}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{nodes width}\pgf@circ@Rlen
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{\ctikzvalof{nodes width}*\pgf@circ@Rlen}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ % set the default fill color to white
+ \pgfsetfillcolor{white}
+ % ...but override it if the class is defined!
+ % note that this element has no class, but will inherit it when used
+ % into another component
+ \pgf@circ@setifdefinedfill{draw, fill}{draw, fill}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)}
+ \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)}
+ \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)}
+ \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)}
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up}
+ % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+ \pgfpointintersectionoflines
+ {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}}
+ % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgf@x=\@@switchx\pgf@x
+ \pgf@y=\@@switchy\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% Diamond terminal, unfilled
+
+\pgfdeclareshape{odiamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)}
+ \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)}
+ \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)}
+ \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)}
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up}
+ % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+ \pgfpointintersectionoflines
+ {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}}
+ % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgf@x=\@@switchx\pgf@x
+ \pgf@y=\@@switchy\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ % set the default fill color to white
+ \pgfsetfillcolor{white}
+ % ...but override it if the class is defined!
+ % note that this element has no class, but will inherit it when used
+ % into another component
+ \pgf@circ@setifdefinedfill{draw, fill}{draw, fill}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% square terminal, filled
+
+\pgfdeclareshape{squarepole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpointborderrectangle
+ {\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}}
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+%% square terminal, unfilled
+
+\pgfdeclareshape{osquarepole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpointborderrectangle
+ {\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}}
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ % set the default fill color to white
+ \pgfsetfillcolor{white}
+ % ...but override it if the class is defined!
+ % note that this element has no class, but will inherit it when used
+ % into another component
+ \pgf@circ@setifdefinedfill{draw, fill}{draw, fill}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+% BNC connector
+
+\pgfdeclareshape{bnc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ % BNC size is 2.5 times the size of the internal "ocirc"
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{nodes width}\pgf@circ@Rlen
+ \pgf@y=2.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ % center is on the opening
+ \anchor{center}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{zero}{ \pgfpointorigin }
+ \anchor{hot}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{shield}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ % geo-anchors
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{right}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{left}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{2.5*\ctikzvalof{nodes width}*\pgf@circ@Rlen}{2.5*\ctikzvalof{nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+ \pgfextracty{\pgf@circ@res@other}{\northwest}
+ \pgf@circ@res@step=\ctikzvalof{nodes width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ \pgfsetcolor{\ctikzvalof{color}}
+ % external circle
+ \pgfscope
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{-2\pgf@circ@res@other}{-2\pgf@circ@res@other}}
+ {\pgfpoint{2\pgf@circ@res@other}{2\pgf@circ@res@other}}
+ % next the opening to the right
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ {\pgfpoint{2\pgf@circ@res@other}{\pgf@circ@res@step}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@other}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal circle
+ \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@step}
+ \pgf@circ@draworfill
+ % and the contact line to the right
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%% Fill for correct rectangular joins
+
+\pgfdeclareshape{rectjoinfill}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\pgflinewidth%
+ \pgf@y=.5\pgflinewidth%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfpathrectanglecorners
+ {\pgfpoint{0}{.5\pgflinewidth}}
+ {\pgfpoint{0}{-.5\pgflinewidth}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale}
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=\pgf@x%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale}
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale}
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+}
+
+%% Flow arrow
+
+\pgfdeclareshape{flowarrow}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale}
+ \pgf@y=.5\pgf@circ@res@step
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgf@x=\pgf@circ@res@step%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale}
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfusepath{draw}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfnode{currarrow}{tip}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+ }
+}
+
+%% Input arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\northeast}{% this is really not northeast, really -northwest
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \ctikzvalof{current arrow scale}
+ \pgf@y=.5\pgf@circ@res@step
+ \pgf@x=1.7\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax\pgf@x=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast\pgf@x=0cm\relax}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@x=0cm\relax}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+%% box scaled with blocks
+
+\pgfdeclareshape{blockbox}{
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{blocks/scale}\pgf@circ@Rlen}}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{blocks/scale}\pgf@circ@Rlen}
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+% full nodes for wire crossing
+
+\pgfdeclareshape{jump crossing}
+{
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \behindbackgroundpath{
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % horizontal jumper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % vertical, broken path
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+\pgfdeclareshape{plain crossing}
+{
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \behindbackgroundpath{
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % horizontal jumper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % vertical, broken path
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.1\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.1\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex
new file mode 100644
index 0000000000..6c8df35607
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcirctripoles.tex
@@ -0,0 +1,4662 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+%%%%%%%%%%%%%
+%% switches
+%%%%%%%%%%%%%
+
+% Legacy spdt
+\pgfdeclareshape{spdt}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/spdt/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \ctikzvalof{tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+% cute switch "node" shapes, matching with cute "to" shapes
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutespdt#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{switches}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/cuteswitch/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.25\pgf@x
+ }
+ \savedanchor\midlever{
+ % these values are calculated when we create the definition of the shape.
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/cuteswitch/height}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{nodes width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgf@circ@res@down = -.5\pgf@y
+ \pgf@circ@res@up = .5\pgf@y
+ \pgfextracty{\pgf@circ@res@other}{#2}
+ \pgf@x=0pt
+ \pgf@y=.5\pgf@circ@res@other
+ }
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+ % mid of the lever, to stack switches
+ \anchor{mid}{\midlever}
+ % center anchors
+ \anchor{cin}{ \northwest \pgf@y=0pt}
+ \anchor{cout 1}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{cout 2}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ % horizontal angles
+ \anchor{in}{ \northwest \pgf@y=0pt\advance\pgf@x by -\radius}
+ \anchor{out 1}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius}
+ \anchor{out 2}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius \pgf@y=-\pgf@y }
+
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\radius\relax
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{#2}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+ \pgfscope % arrow
+ #3
+ \endpgfscope
+ % terminals
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out 1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out 2}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ }
+ }
+}
+
+\pgfcircdeclarecutespdt{cute spdt up}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt mid}
+{\pgfpoint{\pgf@circ@res@right}{0pt}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt down}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt up arrow}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{70}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{70}{-50}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt mid arrow}
+{\pgfpoint{\pgf@circ@res@right}{0pt}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpointpolar{-60}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{-60}{60}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt down arrow}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}}
+{
+ \pgf@circ@setlinewidth{bipoles}{\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{-50}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{-50}{70}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+%% Code from John Kormylo at tex.stackexchange.com
+%% See https://tex.stackexchange.com/questions/372993/is-it-possible-to-implement-multiple-input-logic-ports-with-circuitikz
+%% Integration and fixes from Romano Giannetti and TheTeXnician <38565529+TheTeXnician@users.noreply.github.com>
+%%
+
+\newcount\pgf@circ@res@count% reserve global register
+
+\def\pgf@circ@logicport@input#1% #1 = \pgfmathcounter
+{%
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+}%
+
+% #1 = \pgfmathcounter #2=type #3 specificic port
+% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor, 4 for european.
+\def\pgf@circ@logicport@baseinput#1#2#3%
+{%
+ % and and nand
+ \ifnum #2=1\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@x=\ctikzvalof{tripoles/american #3 port/port width}\pgf@circ@res@left
+ \fi
+ % or and nor
+ \ifnum #2=2\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american #3 port/angle}}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgf@y
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgf@x=\pgf@circ@res@other
+ \fi
+ % xor and xnor
+ \ifnum #2=3\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american #3 port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american #3 port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/american #3 port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@circ@res@temp=\pgf@y
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgf@x=\pgf@circ@res@other
+ \fi
+ % european
+ \ifnum #2=4\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@other}{\left}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@x=\pgf@circ@res@other
+ \fi
+}%
+
+%%% american
+\long\def\pgfcircdeclarelogicport#1#2#3{%
+ \pgfdeclareshape{american #1 port}%
+ {%
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedmacro\resize{% automatic
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@up = \ctikzvalof{tripoles/american #1 port/height}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgf@circ@res@down = -\pgf@circ@res@up
+ \pgf@circ@res@right = \ctikzvalof{tripoles/american #1 port/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@right = .5\pgf@circ@res@right
+ \pgf@circ@res@left = -\pgf@circ@res@right
+ }%
+ \savedmacro\inputs{% get number of inputs
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+ \ifnum\pgf@circ@res@count=0
+ \pgf@circ@res@count=\ctikzvalof{tripoles/american #1 port/inputs}\relax%
+ \fi
+ \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi
+ \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi
+ \def\inputs{\the\pgf@circ@res@count}%
+ }%
+ \savedanchor\step{% 1/2 gap at edges
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step = \ctikzvalof{tripoles/american #1 port/height}\pgf@circ@scaled@Rlen
+ \divide\pgf@circ@res@step by \pgf@circ@res@count
+ \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}%
+ }%
+ \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \savedanchor\left{\pgfpoint{\ctikzvalof{tripoles/american #1 port/port width}\pgf@circ@res@left}{0pt}}
+ \savedanchor\right{\pgfpoint{\ctikzvalof{tripoles/american #1 port/port width}\pgf@circ@res@right}{0pt}}
+ \savedanchor\origin{\pgfpoint{\ctikzvalof{tripoles/american #1 port/origin}\pgf@circ@res@right}{0pt}}
+
+ \anchor{center}{\origin}% for backwards compatibility
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % create input anchors
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@american #1 port\endcsname{%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@circ@res@count%
+ \else%
+ %\pgfutil@ifundefined{pgf@anchor@american #1 port@in \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@american #1 port@in \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above
+ }%
+ \expandafter\xdef\csname pgf@anchor@american #1 port@bin \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{#2}{#1}% defined above
+ }%
+ %}{}%
+ \repeatpgfmathloop%
+ }
+
+ \anchor{out}{\northeast\pgf@y=0pt}
+ \anchor{bout}{\right\pgf@y=0pt}
+
+
+ \anchor{left}{\left}% edges of component mius leads
+ \anchor{right}{\right}
+
+ \anchor{north east}{\northeast}% see \Compass macro
+ \anchor{south west}{\southwest}
+ \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfpoint{0cm}{\pgf@circ@res@up}}
+ \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{0cm}}
+ \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfpoint{0cm}{\pgf@circ@res@down}}
+ \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{0cm}}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ #3
+ }
+}
+}
+%%% american and %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{and}{1}{
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american and port/port width}\pgf@circ@res@left
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpatharc{-90}{90}{-2\pgf@circ@res@other and \pgf@circ@res@up}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ }
+%%% american nand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \pgfcircdeclarelogicport{nand}{1}{
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/american nand port/port width}\pgf@circ@res@right} {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgf@circ@res@step = \ctikzvalof{tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \ctikzvalof{tripoles/american nand port/port width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpatharc{-90}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgf@circ@draworfill
+}
+%%% american nor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{nor}{2}{
+ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american nor port/angle}}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american nor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american nor port/angle}}%
+ \pgf@circ@res@step = \ctikzvalof{tripoles/american nor port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+ \advance\pgf@circ@res@other by -\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgf@circ@draworfill
+}
+%%% american or %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{or}{2}{
+ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american or port/angle}}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american or port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american or port/angle}}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgf@circ@draworfill
+}
+%%% american xor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xor}{3}{
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xor port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american xor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/american xor port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american xor port/angle}}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}%
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}%
+
+ \pgfusepath{draw}
+}
+%%% american xnor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xnor}{3}{
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xnor port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/american xor port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\ctikzvalof{tripoles/american xnor port/angle}}%
+ \pgf@circ@res@step = \ctikzvalof{tripoles/american xnor port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+ \advance\pgf@circ@res@other by -\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@other=\ctikzvalof{tripoles/american xnor port/port width}\pgf@circ@res@left
+ \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}%
+
+ \pgfusepath{draw}
+}
+
+%%% Original one-input ports
+
+\pgfdeclareshape{american not port}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{bin}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{bin 1}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0.7\pgf@x
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{bout}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-0.7\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgf@circ@draworfill
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+ }
+}
+
+\pgfdeclareshape{american buffer port}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{bin}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{bin 1}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0.7\pgf@x
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{bout}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-0.7\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+ }
+}
+\pgfdeclareshape{invschmitt}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{bin 1}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0.7\pgf@x
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{bout}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-0.7\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+}
+
+\pgfdeclareshape{schmitt}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/not port/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/not port/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{bin 1}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0.7\pgf@x
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{bout}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+}
+
+
+%%% start european logic ports, from John Kormylo
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 = is it a not?
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{logic ports}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedmacro\resize{% automatic
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@up = \ctikzvalof{tripoles/european #1 port/height}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgf@circ@res@down = -\pgf@circ@res@up
+ \pgf@circ@res@right = \ctikzvalof{tripoles/european #1 port/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@right = .5\pgf@circ@res@right
+ \pgf@circ@res@left = -\pgf@circ@res@right
+ }%
+ \savedmacro\inputs{% get number of inputs
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+ \ifnum\pgf@circ@res@count=0
+ \pgf@circ@res@count=\ctikzvalof{tripoles/european #1 port/inputs}\relax%
+ \fi
+ \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi
+ \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi
+ \def\inputs{\the\pgf@circ@res@count}%
+ }%
+ \savedanchor\step{% 1/2 gap at edges
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@step = \ctikzvalof{tripoles/european #1 port/height}\pgf@circ@scaled@Rlen
+ \divide\pgf@circ@res@step by #3
+ \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}%
+ }%
+ \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}%
+ \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}%
+ \savedanchor\left{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}%
+ \savedanchor\right{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}%
+ \savedanchor\origin{\pgfpoint{\ctikzvalof{tripoles/european #1 port/origin}\pgf@circ@res@right}{0pt}}%
+
+ \anchor{center}{\origin}% for backwards compatibility
+ % the text anchor overlaps the logic symbol
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}%
+ % create input anchors
+ \ifnum#3=1\relax
+ \anchor{in}{\southwest\pgfpoint{\pgf@x}{0pt}}% or \step
+ \anchor{in 1}{\southwest\pgfpoint{\pgf@x}{0pt}}% or \step
+ \anchor{bin}{\left\pgfpoint{\pgf@x}{0pt}}% or \step
+ \anchor{bin 1}{\left\pgfpoint{\pgf@x}{0pt}}% or \step
+ \else
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@european #1 port\endcsname{%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>#3%
+ \else%
+ %\pgfutil@ifundefined{pgf@anchor@european #1 port@in \pgfmathcounter}{% redundant
+ \expandafter\xdef\csname pgf@anchor@european #1 port@in \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above
+ }%
+ \expandafter\xdef\csname pgf@anchor@european #1 port@bin \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{4}{#1}% defined above
+ }%
+ %}{}%
+ \repeatpgfmathloop%
+ }
+ \fi
+ \anchor{out}{\northeast\pgf@y=0pt}
+ \anchor{bout}{\right\pgf@y=0pt}
+
+ \anchor{left}{\left}% edges of component minus leads
+ \anchor{right}{\right}
+
+ \anchor{north east}{\northeast}% see \Compass macro
+ \anchor{south west}{\southwest}
+ \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfpoint{0cm}{\pgf@circ@res@up}}
+ \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{0cm}}
+ \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfpoint{0cm}{\pgf@circ@res@down}}
+ \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{0cm}}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \ifnum#3=1\relax
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}%
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}%
+ \else
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ %\pgf@circ@res@count = #3\relax% redundant
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+ \fi
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{%
+ \pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/european #1 port/reserved}\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ }
+ }
+}
+\pgfcircdeclareeurologicport{and}{\&}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{buffer}{$1$}{1}{}
+\pgfcircdeclareeurologicport{nand}{\&}{\pgf@circ@res@count}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{\pgf@circ@res@count}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{\pgf@circ@res@count}{not}
+
+%% end european logic ports
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% Transistors
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{transistors}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northeast{% upper right
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/#1/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x=-\ctikzvalof{tripoles/#1/width}\pgf@circ@scaled@Rlen
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=.7\pgf@y
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@x= \pgf@circ@scaled@Rlen
+ \pgf@x=0.1\pgf@x
+ }
+ \anchor{pathstart}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{pathend}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{base}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{nobase}{
+ \left
+ \pgf@x=\ctikzvalof{tripoles/#1/base width}\pgf@x
+ }
+ \anchor{nogate}{
+ \left
+ \pgf@x=\ctikzvalof{tripoles/#1/gate width}\pgf@x
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=\ctikzvalof{tripoles/#1/curr direction}\pgf@y
+ }
+ #2
+ \backgroundpath{
+ \pgftransformationadjustments
+ \pgfsetcolor{\ctikzvalof{color}}
+ %
+ \ifnum \ctikzvalof{tripoles/#1/curr direction} > 0
+ \pgf@circuit@trans@ntypetrue
+ \else
+ \pgf@circuit@trans@ntypefalse
+ \fi
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ %
+ #3
+ % BODY DIODE
+ \ifpgf@circuit@fet@bodydiode
+ \drawbodydiode{#1}
+ \fi
+ %
+ }
+}
+}
+
+\long\def\drawbodydiode#1{
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgftransformrotate{90}
+ % diode scale and bodydiode scale interacts. We want the size of the diode
+ % proportional to the transistor, so we will:
+ % 1) undo diode scale 2) apply transistor scale (using the current class) 3) apply bodydiode scale
+ \pgfmathsetmacro{\@@BDscale}{\ctikzvalof{tripoles/#1/bodydiode scale}* \ctikzvalof{\ctikzclass/scale}/\ctikzvalof{diodes/scale}}
+ \pgftransformscale{\@@BDscale}
+ \ifpgf@circuit@fulldiode
+ \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \else
+ \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \fi
+ \endpgfscope
+ % Draw stroke line
+ \ifpgf@circuit@strokediode
+ \pgfpathmoveto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{stroke}
+ \fi
+ %Draw upper connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope{}
+ %Draw lower connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\ctikzvalof{tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\ctikzvalof{tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+}
+
+\long\def\declarebpt#1{
+ \pgfcircdeclaretransistor{#1}{}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transistor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \edef\@@anchor{center}
+ \ifpgf@circuit@trans@ntype
+ \ifpgf@circuit@trans@arrowatend
+ \edef\@@anchor{tip}
+ \pgftransformlineattime{1.0}{%
+ \pgfpoint%
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{\ctikzvalof{tripoles/#1/arrow pos}}{%
+ \pgfpoint%
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \fi
+ \else
+ \ifpgf@circuit@trans@arrowatend
+ \edef\@@anchor{tip}
+ \pgftransformlineattime{1.0}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \else
+ \pgftransformlineattime{\ctikzvalof{tripoles/#1/arrow pos}}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \fi
+ \pgfnode{currarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \ifpgf@circuit@bpt@drawphoto
+ \pgfscope
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \else
+ \ifpgf@circuit@bpt@drawbase
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \fi
+ }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+
+\long\def\declareigbt#1{
+ \pgfcircdeclaretransistor{#1}{}
+ {
+ %draw upper connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %draw thicker gate lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw lower connection
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transistor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@arrowatend
+ \edef\@@anchor{tip}\edef\@@pos{1.0}
+ \else
+ \edef\@@anchor{center}\edef\@@pos{0.5}
+ \fi
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{\@@pos}{%
+ \pgfpoint%
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{\@@pos}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/#1/gate height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ %draw gate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@up}}
+ \fi
+ \pgfusepath{draw}
+ }
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+\pgfcircdeclaretransistor{nmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/nmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/nmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \ifpgf@circuit@trans@arrowatend
+ \pgftransformshift{\pgfpoint
+ {\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{tip}{}{}{\pgfusepath{stroke}}
+ \else
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{\ctikzvalof{tripoles/nmos/arrow pos}}{%
+ \pgfpoint%
+ {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \fi
+ \endpgfscope
+ \fi
+
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+}
+
+\pgfcircdeclaretransistor{pmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \ifpgf@circuit@trans@arrowatend
+ \pgftransformshift{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgftransformrotate{180}
+ \pgfnode{currarrow}{tip}{}{}{\pgfusepath{stroke}}
+ \else
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{\ctikzvalof{tripoles/pmos/arrow pos}}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \fi
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+ \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \ifpgf@circuit@pmos@nocircle\else
+ % we are not scaling the circle with the MOS --- I think it's better to have it
+ % coherent with the poles/nodes of the rest of the circuit.
+ \pgfpathcircle{\pgfpoint
+ {\ctikzvalof{tripoles/pmos/gate width}\pgf@circ@res@left - \ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \ifpgf@circuit@pmos@emptycircle
+ \pgfsetfillcolor{white}
+ \fi
+ \pgfusepath{draw,fill}
+ \fi
+}
+
+%% HEMT FET Transistor
+\pgfcircdeclaretransistor{hemt}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/hemt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/hemt/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/hemt/base height}\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+\long\def\drawfetcore#1{
+ \pgftransformationadjustments
+ %top connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up}}
+ \ifpgf@circuit@trans@depletiontype
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}}
+ \else
+
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/base height}\pgf@circ@res@down}}
+ \fi
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %Bulk connection line
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ %bottom connection
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ %draw thick gate line
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@arrowatend
+ \edef\@@anchor{tip}
+ \ifpgf@circuit@trans@ntype
+ \edef\@@pos{1.0}
+ \else
+ \edef\@@pos{0.0}
+ \fi
+ \else
+ \edef\@@anchor{center}\edef\@@pos{0.6}
+ \fi
+ \pgftransformlineattime{\@@pos}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\ctikzvalof{tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \ifpgf@circuit@trans@ntype
+ \else
+ \pgftransformrotate{180}
+ \fi
+ \pgfnode{currarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+% GATE CONNECTION
+\ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\ctikzvalof{tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+\fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+ \anchor{bulk}{\left\pgf@x=0pt}
+ \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt
+ #2
+ }
+ {#3}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nfet}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pfet}
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfete}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+\fi
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfetebulk}
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \ctikzvalof{tripoles/nigfetebulk/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{nigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfete}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \ctikzvalof{tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfetebulk}
+}
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{pigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ % arrow
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@arrowatend
+ \edef\@@anchor{tip}\edef\@@pos{1.0}
+ \else
+ \edef\@@anchor{center}\edef\@@pos{0.6}
+ \fi
+ \pgftransformlineattime{\@@pos}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\ctikzvalof{tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+\pgfcircdeclaretransistor{pjfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@arrowatend
+ \edef\@@anchor{tip}\edef\@@pos{1.0}
+ \else
+ \edef\@@anchor{center}\edef\@@pos{0.4}
+ \fi
+ \pgftransformlineattime{\@@pos}{%
+ \pgfpoint%
+ {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\ctikzvalof{tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\ctikzvalof{tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \ctikzvalof{tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@arrowatend
+ \edef\@@anchor{tip}\edef\@@pos{1.0}
+ \else
+ \edef\@@anchor{center}\edef\@@pos{0.6}
+ \fi
+ \pgftransformlineattime{\@@pos}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\ctikzvalof{tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{\@@anchor}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\ctikzvalof{tripoles/isfet/wave width}\pgf@circ@res@up}{-\ctikzvalof{tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% end of transistors
+
+%%%%%%%%%%%%%
+%% Switches
+%%%%%%%%%%%%%
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \northeast
+ \pgf@y=.8\pgf@y
+ }
+}
+{\ctikzvalof{tripoles/toggleswitch/height 2}}
+{toggleswitch}
+{\ctikzvalof{tripoles/toggleswitch/height}}
+{\ctikzvalof{tripoles/toggleswitch/width}}
+{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% operational and instrumentation amplifiers
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{op amp}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ % Triangle
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/op amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ % Output terminal
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/op amp/port width}\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+
+% Op amp shape as in european standard EN 60617
+\pgfdeclareshape{en amp}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {
+ \left
+ \pgf@x = \ctikzvalof{tripoles/en amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/en amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/en amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{up}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{down}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\hbox{\ctikzvalof{tripoles/en amp/font2}\ctikzvalof{tripoles/en amp/text}}}
+ % \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font2}$\mathstrut{\triangleright}\,\mathrm{A}$}
+ }
+}
+
+% Fully differential output op amp
+% Contributed by Kristofer M. Monisit
+\pgfdeclareshape{fd op amp}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\outline{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/fd op amp/up pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out up}{
+ \northwest
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/output height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x
+ }
+ \anchor{out down}{
+ \northwest
+ \pgf@y=-\ctikzvalof{tripoles/fd op amp/output height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x
+ }
+ \anchor{out +}{
+ \outline
+ \pgf@y=\ctikzvalof{tripoles/fd op amp/output height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x
+ }
+ \anchor{out -}{
+ \outline
+ \pgf@y=-\ctikzvalof{tripoles/fd op amp/output height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x
+ }
+ \anchor{out}{% should not be used
+ \left
+ \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\ctikzvalof{tripoles/fd op amp/port width}\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ % Triangle
+ % Includes output terminals to ensure that diagonal joins are properly displayed
+ \pgfscope
+ \pgf@circ@setlinewidth{quadpoles}{\pgflinewidth}
+ \pgftransformxshift{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@step
+
+ % Initial point (right vertex)
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+
+ % Negative output terminal
+ \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\ctikzvalof{tripoles/fd op amp/output height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@up}}}
+
+ % Top vertex
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+
+ % Bottom vertex
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+
+ % Positive output terminal
+ \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@down}}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\ctikzvalof{tripoles/fd op amp/output height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointlineattime{\ctikzvalof{tripoles/fd op amp/output height}}{\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{\pgf@circ@res@down}}}
+
+ % Right vertex
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd op amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd op amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ % Negative output terminal label
+ \pgftext[right, bottom, x=3pt, y=1pt, at=\pgfpoint{0pt}{0.425\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@oplusup$-$\else$+$\fi}
+
+ % Positive output terminal label
+ \pgftext[right, top, x=3pt, y=-1pt, at=\pgfpoint{0pt}{0.425\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd op amp/font} \ifpgf@circuit@oa@oplusup$+$\else$-$\fi}
+
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+
+
+% Instrumentation amplifier with differential output
+\pgfdeclareshape{fd inst amp}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ % when tikz calls the anchor it wants the relative position in the lengths
+ % \pgf@x \pgf@y
+ % \pgfpoint* functions set that variables
+ % anchors are visible outside and run on use
+ \anchor{center}{\pgfpointorigin}
+ % savedanchors are internals and run on node creation (not use)
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \ctikzvalof{tripoles/fd inst amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/fd inst amp/up pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/fd inst amp/refv pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\outport{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=-.5\pgf@x
+ \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi
+ }
+ \anchor{out}{
+ \outport
+ \pgf@y=0pt
+ }
+ \anchor{out +}{
+ \outport
+ }
+ \anchor{out -}{
+ \outport
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\outportfixed{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/fd inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=-.5\pgf@x
+ }
+ \anchor{out up}{
+ \outportfixed
+ }
+ \anchor{out down}{
+ \outportfixed
+ \pgf@y=-\pgf@y
+ }
+ %
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % let's start drawing the component
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ %
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ % main component, normally in thicker lines
+ \pgfscope
+ \newdimen\pgf@circ@res@right@double
+ \pgf@circ@res@right@double=2\pgf@circ@res@right
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@step
+ %first point (near output)
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right@double}{0}}
+ %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/fd inst amp/height 2}\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ % input terminal up
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % input terminal down
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/fd inst amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ % output leads down and up
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@down}} %
+ \pgftext[right, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$-\;$\else$+\;$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@up}} %
+ \pgftext[right, at=\pgfpoint{\ctikzvalof{tripoles/fd inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/fd inst amp/output height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$+\;$\else$-\;$\fi}
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+
+% Transconductance amplifier (Transkonduktanzverstärker)
+\pgfdeclareshape{gm amp}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/gm amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/gm amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/gm amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/gm amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/gm amp/up pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/gm amp/height 2}\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\northwest
+ \pgf@x=\ctikzvalof{tripoles/op amp/port width}\pgf@x
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+.25\pgf@x}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \pgfscope
+ \newdimen\pgf@circ@res@right@double
+ \pgf@circ@res@right@double=2\pgf@circ@res@right
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@step
+ %Umrandung:
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right@double}{0}} %geändert startpunkt neu am ausgangsstrich
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/gm amp/height 2}\pgf@circ@res@up}}%vom Ausgang nach oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/gm amp/height 2}\pgf@circ@res@down}}%ecke links unten nach rechts unten
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/gm amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/gm amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/gm amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/gm amp/port width}\pgf@circ@res@right}{0pt}} %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ }
+}
+
+% Instrumentation amplifier
+\pgfdeclareshape{inst amp}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ % when tikz calls the anchor it wants the relative position in the lengths
+ % \pgf@x \pgf@y
+ % \pgfpoint* functions set that variables
+ % anchors are visible outside and run on use
+ \anchor{center}{\pgfpointorigin}
+ % savedanchors are internals and run on node creation (not use)
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/inst amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/inst amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/inst amp/up pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/inst amp/refv pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % let's start drawing the component
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ %
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ % main component, normally in thicker lines
+ \pgfscope
+ \newdimen\pgf@circ@res@right@double
+ \pgf@circ@res@right@double=2\pgf@circ@res@right
+
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@step
+ %first point (near output)
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right@double}{0}}
+ %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp/height 2}\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ % Output terminal
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp/port width}\pgf@circ@res@right}{0pt}} %
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+
+% Instrumentation amplifier with terminals for gain resistance between inputs
+\pgfdeclareshape{inst amp ra}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \ctikzvalof{tripoles/op amp/port width}\pgf@x
+ }
+ % inputs (+-)
+ \savedanchor\inOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ % R ampli anchors. They are by default at 20% more than R-length distance
+ % you can change that with the `ra pos` key (use 0.5 for one-R).
+ \savedanchor\raOneFixed{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{ra up}{
+ \inOneFixed
+ }
+ \anchor{ra down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\raOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\pgf@circ@scaled@Rlen
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{ra-}{
+ \raOne
+ }
+ \anchor{ra+}{
+ \raOne
+ \pgf@y=-\pgf@y
+ }
+ % power supplies
+ \savedanchor\up{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/inst amp ra/up pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/inst amp ra/height}\pgf@circ@scaled@Rlen
+ \pgf@y=0.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/inst amp ra/width}\pgf@circ@scaled@Rlen
+ \pgf@x=0.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/inst amp ra/refv pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % drawing of the component
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ \newdimen\pgf@circ@res@right@double
+ \pgf@circ@res@right@double=2\pgf@circ@res@right
+
+ % main component, normally in thicker lines
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@step
+ %primer punto: la linea de salida (lado componente)
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right@double}{0}}
+ %from the exit to the top (short side)... (note that the .6 must be copied in \up anchor
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right@double}{\ctikzvalof{tripoles/inst amp ra/height 2}\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ % ra terminal -
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ % ra terminal +
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {-\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {-\ctikzvalof{tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/inst amp ra/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ % Output terminal
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/inst amp ra/port width}\pgf@circ@res@right}{0pt}} %
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+
+% Buffer
+% Contributed by Danilo Piazzalunga
+\pgfdeclareshape{buffer}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{bipoles/buffer/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{bipoles/buffer/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+ }
+}
+
+% plain amplifier, no symbols
+\pgfdeclareshape{plain amp}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{amplifiers}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/plain amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in up}{
+ \inOne
+ }
+ \anchor{in down}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/plain amp/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/plain amp/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \ctikzvalof{tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgftransformxshift{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/plain amp/port width}\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% electromechanical device (motor/generator)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{elmech}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{electromechanicals}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/elmech/height}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/elmech/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{%
+ \@tempdima=\pgf@x\@tempdimb=\pgf@y
+ \northwest\pgf@circ@res@other=-\pgf@x
+ \pgfpointborderellipse{\pgfqpoint{\@tempdima}{\@tempdimb}}{\pgfqpoint{\pgf@circ@res@other}{\pgf@circ@res@other}}
+ }
+ \anchor{block north west}{\northwest\pgf@x=0.5\pgf@x}
+ \anchor{block south west}{\northwest\pgf@x=0.5\pgf@x\pgf@y=-\pgf@y}
+ \anchor{block north east}{\northwest\pgf@x=-0.5\pgf@x}
+ \anchor{block south east}{\northwest\pgf@x=-0.5\pgf@x\pgf@y=-\pgf@y}
+ \anchor{block up right}{
+ \northwest
+ % remember that pgf@x is negative
+ % center of the block is at 0.5*H+W*cos(30)/2
+ \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax
+ \pgf@x=-0.5\pgf@x
+ }
+ \anchor{block up left}{
+ \northwest
+ % remember that pgf@x is negative
+ % center of the block is at 0.5*H+W*cos(30)/2
+ \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax
+ \pgf@x=0.5\pgf@x
+ }
+ \anchor{block down right}{
+ \northwest
+ % remember that pgf@x is negative
+ % center of the block is at 0.5*H+W*cos(30)/2
+ \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax
+ \pgf@y=-\pgf@y
+ \pgf@x=-0.5\pgf@x
+ }
+ \anchor{block down left}{
+ \northwest
+ % remember that pgf@x is negative
+ % center of the block is at 0.5*H+W*cos(30)/2
+ \pgf@y=\dimexpr0.5\pgf@y - 0.433\pgf@x\relax
+ \pgf@y=-\pgf@y
+ \pgf@x=0.5\pgf@x
+ }
+ \behindbackgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@scaled@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ \pgfscope % clip the bar: whole size minus the circle
+ \pgfpathrectanglecorners{\pgfpoint{-.5\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{fill, draw}
+ \endpgfscope
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ % set the default fill color to white
+ \pgfsetfillcolor{white}
+ % ...but override it if the class is defined!
+ \pgf@circ@setifdefinedfill{draw, fill}{draw, fill}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{draw, fill}
+ \fi
+ \endpgfscope
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%
+%% Magnetron
+%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclareshape{magnetron}
+{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{tubes}} % class of these components
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \savedanchor\northwest{
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@y=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@scaled@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/magnetron/width}\pgf@circ@scaled@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{anode}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{cathode1}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(105)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(105)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{cathode2}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(75)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(75)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\ctikzvalof{color}}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+ \pgf@circ@res@step=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@scaled@Rlen
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfmathsetlength{\pgf@circ@res@other}{sin(15)*\pgf@circ@res@up}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@setlinewidth{bipoles}{\pgfstartlinewidth}
+ %create outer circle
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@right}
+ \pgf@circ@draworfill
+ %create chambers
+ \foreach \angle in {45,135,225,315}{
+ \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf@circ@res@right}}
+ \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf@circ@res@right}}
+ }
+ \pgfsetroundcap
+ \pgfusepath{draw}
+ \pgfscope
+ %draw connection from outside
+ %anode
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ %cathodes
+ \pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ %create cathode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.15\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %create anode
+ \pgfpathmoveto{\pgfpoint{0.3\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Electronic tubes, submitted by J. op den Brouw
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Draw tube outline
+\def\pgf@circ@tubes@drawtube{%
+ \ifdim\ctikzvalof{tubes/width}pt>\ctikzvalof{tubes/height}pt\relax
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfutil@tempdima=\pgf@circ@res@right
+ \advance\pgfutil@tempdima by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgfutil@tempdima}{\pgf@circ@res@up}}
+ \pgfpatharc{90}{-90}{\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{-\pgfutil@tempdima}{-\pgf@circ@res@up}}
+ \pgfpatharc{270}{90}{\pgf@circ@res@up}
+ \else
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{0pt}}
+ \pgfutil@tempdima=\pgf@circ@res@up
+ \advance\pgfutil@tempdima by -\pgf@circ@res@right
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpatharc{180}{0}{\pgf@circ@res@right}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfutil@tempdima}}
+ \pgfpatharc{180}{0}{-\pgf@circ@res@right}
+ \fi
+ \pgfpathclose
+}
+
+%% The diode (tube), triode, tetrode and pentode only differ in the
+%% number of grids. So we construct a generic declare function in
+%% which we can put code for the grid anchors and grid drawing code
+%% \pgfcircdeclaretube{tube name}{grid anchors}{grid drawing code}
+\long\def\pgfcircdeclaretube#1#2#3{%
+ \pgfdeclareshape{#1}{
+ \savedmacro{\ctikzclass}{\edef\ctikzclass{tubes}}
+ \saveddimen{\scaledRlen}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@circ@scaled@Rlen}{\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@scaled@Rlen
+ % x and y should be half the Rlen
+ \pgf@y=\pgf@circ@res@up
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@circ@res@right
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{north} {%
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{east}{%
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0pt
+ }
+ \anchor{south}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{west}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{north west}{%
+ \northwest
+ }
+ \anchor{north east}{%
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{anode} {%
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{cathode}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{cathode 1}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{cathode 2}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=-\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{filament 1}{%
+ \northwest
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@x=\pgfmathresult\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{filament 2}{%
+ \northwest
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@x=-\pgfmathresult\pgf@x
+ \pgf@y=-\pgf@y
+ }
+
+ % Extra anchors
+ #2
+
+ \backgroundpath{
+ \pgfscope
+ % Line width for tripoles
+ \pgf@circ@setlinewidth{tripoles}{\pgflinewidth}
+ \pgf@circ@scaled@Rlen=\scaledRlen
+
+ % Setup to draw tube
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tubes/tube radius}\pgf@circ@res@up
+ \pgf@circ@res@right=\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+
+ % Tube outline
+ \pgf@circ@tubes@drawtube
+
+ % Setup to draw grid, filament, anode and cathode
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@scaled@Rlen
+ \pgf@circ@res@up=0.5\pgf@circ@res@up
+ \pgf@circ@res@right=0.5\pgf@circ@res@right
+
+ % Tube fill color (if any)
+ \pgf@circ@draworfill
+
+ % Grid drawing
+ #3
+
+ % Filament (is not drawn by default)
+ \ifpgf@circuit@tubes@filament
+ \pgf@circ@res@temp=-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up
+ \advance\pgf@circ@res@temp by -\ctikzvalof{tubes/filament distance}\pgf@circ@res@up
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@xa=\pgfmathresult\pgf@circ@res@right
+ \pgfmathparse{\ctikzvalof{tubes/tube radius}+\ctikzvalof{tubes/tube radius}*cos(\ctikzvalof{tubes/filament angle}}
+ \pgf@ya=\pgfmathresult\pgf@circ@res@up
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@circ@res@up}}
+ \pgf@circuit@tubes@filamentfalse
+ \fi
+
+ % Anode (or plate)
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} % north
+ \pgfpathlineto{\pgfpoint{0pt}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+
+ % Cathode
+ \ifpgf@circuit@tubes@nocathode
+ \pgf@circuit@tubes@nocathodefalse
+ \else
+ \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}}
+ \ifpgf@circuit@tubes@fullcathode
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}}
+ \pgf@circuit@tubes@fullcathodefalse
+ \else
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-\ctikzvalof{tubes/cathode right extend}\pgf@circ@res@up}}
+ \fi
+ \fi
+
+ % Draw the background
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+}
+
+\pgfcircdeclaretube{diodetube}{}{} % shape diode already exists
+
+\pgfcircdeclaretube{triode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+ \anchor{control} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+}
+{
+ % Grid protrusion
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{tetrode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \pgfutil@tempdima=0.5\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgfutil@tempdimb=0.5\pgfutil@tempdimb
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{pentode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+ \anchor{suppressor} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{pentode suppressor to cathode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \ifnum\pgf@circ@count@a>1\relax
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}}
+ \fi
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+ % Grid: connection from suppressor to cathode
+ \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima-2*\ctikzvalof{tubes/grid separation}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircutils.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircutils.tex
new file mode 100644
index 0000000000..826ac82bba
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircutils.tex
@@ -0,0 +1,60 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+\fi
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/pgfcircvoltage.tex b/graphics/pgf/contrib/circuitikz/tex/pgfcircvoltage.tex
new file mode 100644
index 0000000000..158ee2dd79
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/pgfcircvoltage.tex
@@ -0,0 +1,476 @@
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi
+ \fi
+ \ifpgf@circ@oldvoltagedirection
+ \ifpgf@circuit@bipole@iscurrent\ifpgf@circ@fixbatteries
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi\fi
+ \else
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@bipole@current@backward
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi\fi\fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+% american voltage font selection and symbol definition
+% the default font command is {} --- nothing
+\def\pgf@circ@avfont{\ctikzvalof{voltage/american font}}
+%
+% plus and minus symbols (default is $+$ and $-$, see pgfcirc.defines.tex)
+% notice that the double braces are needed to be able
+% to use \boldmath in the font (although it is semi-deprecated...)
+%
+\def\pgf@circ@avplus{\ctikzvalof{voltage/american plus}}
+\def\pgf@circ@avminus{\ctikzvalof{voltage/american minus}}
+
+%%
+\def\setscaledRlenforclass{%
+ \csname pgf@sh@ma@\ctikzvalof{bipole/name}\endcsname
+ \ifdefined\ctikzclass
+ \edef\pgf@temp{/tikz/circuitikz/\ctikzclass/scale}
+ \pgfkeysifdefined{\pgf@temp}
+ {\pgf@circ@scaled@Rlen=\ctikzvalof{\ctikzclass/scale}\pgf@circ@Rlen}
+ {\pgf@circ@scaled@Rlen=\pgf@circ@Rlen}
+ \else
+ \pgf@circ@scaled@Rlen=\pgf@circ@Rlen
+ \fi
+}
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ % \typeout{NAME:\ctikzvalof{bipole/name}}
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/straight label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@scaled@Rlen)}
+ }
+ {
+ \pgfkeysifdefined{/tikz/circuitikz/bipoles/voltage/straight label distance}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@scaled@Rlen)}
+ }
+ {%calculate default value from part height
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/height}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{0.5*\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/height}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@scaled@Rlen+0.2\pgf@circ@scaled@Rlen)}
+ }
+ {
+ \edef\tmpdistfromline{(.5\pgf@circ@scaled@Rlen)} %fallback to fixed value
+ }
+ }
+ }
+ % \typeout{KIND:\ctikzvalof{bipole/kind}\space RLEN:\the\pgf@circ@Rlen\space SCALED:\the\pgf@circ@scaled@Rlen}
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@scaled@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@scaled@Rlen}
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@scaled@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@scaled@Rlen}
+ \fi
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distancefromnode{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/distance from node}} }
+ { \edef\distancefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ \newdimen{\absvshift}
+ \pgfmathsetlength{\absvshift}{\shiftv*\distfromline+\distfromline}
+ % put this to true to see the voltage label coordinate anchors
+ \newif\ifpgf@circ@debugv\pgf@circ@debugvfalse
+ }
+ % %\pgf@circ@Rlen/\ctikzvalof{current arrow scale} is equal to the length of the currarrow
+ coordinate (pgfcirc@midtmp) at ($(\tikztostart) ! \pgf@circ@Rlen/\ctikzvalof{current arrow scale} ! (anchorstartnode)$) %absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distancefromnode ! (anchorstartnode)$)
+ coordinate (pgfcirc@Vfrom@flat) at (pgfcirc@midtmp)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@midtmp) ! -\distfromline ! \pgf@circ@voltage@angle:(anchorstartnode)$)
+
+ coordinate (pgfcirc@midtmp) at ($(\tikztotarget) ! \pgf@circ@Rlen/\ctikzvalof{current arrow scale} ! (anchorendnode)$)%absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distancefromnode ! (anchorendnode)$)
+ coordinate (pgfcirc@Vto@flat) at (pgfcirc@midtmp)
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@midtmp) ! \distfromline ! \pgf@circ@voltage@angle : (anchorendnode)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ \ifpgf@circ@debugv
+ node [ocirc, fill=red] at (anchorstartnode) {}
+ node [ocirc, fill=blue] at (anchorendnode) {}
+ node [ocirc, fill=green] at (pgfcirc@Vto) {}
+ node [ocirc, fill=yellow] at (pgfcirc@Vfrom) {}
+ node [odiamondpole, fill=green] at (pgfcirc@Vto@flat) {}
+ node [odiamondpole, fill=yellow] at (pgfcirc@Vfrom@flat) {}
+ \fi
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@Vto@flat) ! \absvshift!90 : (anchorendnode)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@Vfrom@flat) ! \absvshift!-90 : (anchorstartnode)$)
+ coordinate (pgfcirc@Vcont1t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ coordinate (pgfcirc@Vcont1) at ($(pgfcirc@Vcont1t) ! -\absvshift!90 : (pgfcirc@Vcont2t)$)
+ coordinate (pgfcirc@Vcont2) at ($(pgfcirc@Vcont2t) ! -\absvshift!-90 : (pgfcirc@Vcont1t)$)
+ \ifpgf@circ@debugv
+ node [odiamondpole, fill=green] at (pgfcirc@Vto) {}
+ node [odiamondpole, fill=yellow] at (pgfcirc@Vfrom) {}
+ node [osquarepole, fill=red] at (pgfcirc@Vcont1) {}
+ node [osquarepole, fill=blue] at (pgfcirc@Vcont2) {}
+ \fi
+ \else
+ \ifpgf@circ@debugv
+ node [ocirc, fill=red] at (anchorstartnode) {}
+ node [ocirc, fill=blue] at (anchorendnode) {}
+ node [ocirc, fill=green] at (pgfcirc@Vto) {}
+ node [ocirc, fill=yellow] at (pgfcirc@Vfrom) {}
+ node [odiamondpole, fill=green] at (pgfcirc@Vto@flat) {}
+ node [odiamondpole, fill=yellow] at (pgfcirc@Vfrom@flat) {}
+ \fi
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@Vto@flat) ! -\absvshift!90 : (anchorendnode)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@Vfrom@flat) ! -\absvshift!-90 : (anchorstartnode)$)
+ coordinate (pgfcirc@Vcont1t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2t) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ coordinate (pgfcirc@Vcont1) at ($(pgfcirc@Vcont1t) ! \absvshift!90 : (pgfcirc@Vcont2t)$)
+ coordinate (pgfcirc@Vcont2) at ($(pgfcirc@Vcont2t) ! \absvshift!-90 : (pgfcirc@Vcont1t)$)
+ \ifpgf@circ@debugv
+ node [odiamondpole, fill=green] at (pgfcirc@Vto) {}
+ node [odiamondpole, fill=yellow] at (pgfcirc@Vfrom) {}
+ node [osquarepole, fill=red] at (pgfcirc@Vcont1) {}
+ node [osquarepole, fill=blue] at (pgfcirc@Vcont2) {}
+ \fi
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@straight
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) --(pgfcirc@Vfrom) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \else
+ (pgfcirc@Vfrom) --(pgfcirc@Vto) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ \fi
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+\def\pgf@circ@drawvoltagegenerator{
+ % the following is affected indirectly by voltage/shift, you can move the arrow with voltage/bump a.
+ % it's not perfect, but I can't find the way to do it correctly...
+ \pgfextra{
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ \edef\bumpa{\ctikzvalof{voltage/bump a}}
+ \pgfmathsetmacro{\bumpaplus}{\bumpa + 0.5*\shiftv} % coefficient added "by feel". Sorry.
+ }
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vfrom) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vto) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vfrom) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vto) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+ % fix the (unused in this case) Vcont1/2 coords for label placement along the line
+ coordinate (pgfcirc@Vcont1) at (pgfcirc@Vto)
+ coordinate (pgfcirc@Vcont2) at (pgfcirc@Vfrom)
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vto)
+ \fi
+ \else% american voltage
+ \ifpgf@circuit@bipole@voltageoutsideofsymbol
+ % if it is a battery, must put + and -
+
+ \ifpgf@circ@fixbatteries
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ \else
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ \else
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine
+\def\pgf@circ@drawvoltage{% node name
+ \pgfextra{ %WARNING: indentation is probably wrong
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ % this must be set *before* changing for mirroring and inverting; in that case
+ % the xscale/yscale parameters take it into account
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+ % magic to counteract the scale and yscale effects (there should be a better way...)
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ % take into account scaling
+ \setscaledRlenforclass
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/voltage/european label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+ % find the height of the bipole or use a default value
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\ctikzvalof{bipole/kind}/height}
+ \pgfkeysifdefined{\pgf@temp}
+ {\pgfmathsetmacro{\partheightf}{0.5*\ctikzvalof{bipoles/\ctikzvalof{bipole/kind}/height}}
+ \edef\partheight{\partheightf\pgf@circ@scaled@Rlen}}
+ {\edef\partheight{(.5\pgf@circ@scaled@Rlen)}} %fallback to fixed value
+ \newdimen{\alshift}
+ % this is more or less the same of the legacy code; we shift the american label a bit
+ % outside the (+) -- (-) line
+ \pgfmathsetlength{\alshift}{(\ctikzvalof{voltage/american label distance}-0.6)*\partheight}
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ }%end pgfextra
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@straight
+ coordinate (Vlab) at ($(pgfcirc@Vto)!0.5!(pgfcirc@Vfrom) $)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt]
+ at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \else
+ \ifpgf@circuit@europeanvoltage
+ coordinate (Vlab) at ($(pgfcirc@Vcont1)!0.5!(pgfcirc@Vcont2)$)
+ \else
+ coordinate (Vlab) at ($(pgfcirc@Vfrom)!0.5!(pgfcirc@Vto)$)
+ \ifpgf@circuit@bipole@isvoltage\else
+ % add a bit of space for american labels above their symbols in the normal case. You can avoid that
+ % with voltage/american label distance=0.5 (it's measured from the center of the component, in heights)
+ coordinate (Vlab) at ($(Vlab) ! \alshift ! \pgf@circ@bipole@voltage@label@where :(pgfcirc@Vto)$)
+ \fi
+ \fi
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt] at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \fi
+}%end drawvoltages
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.8.3.tex b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.8.3.tex
new file mode 100644
index 0000000000..1f7eda6fde
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.8.3.tex
@@ -0,0 +1,10941 @@
+\def\pgfcircversion{0.8.3}
+\def\pgfcircversiondate{2017/05/28}
+\writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
+
+\usemodule[tikz]
+
+\startmodule[circuitikzgit-0.8.3]
+\usetikzlibrary[calc]
+\usetikzlibrary[arrows]
+
+\unprotect
+
+\edef\tikzatcode{\the\catcode`\@}
+\edef\tikzbarcode{\the\catcode`\|}
+\edef\tikzexclaimcode{\the\catcode`\!}
+\catcode`\@=11
+\catcode`\|=12
+\catcode`\!=12
+
+%%%%%%%%%%% Springe nach tex/pgfcirc.defines
+%%%---------- open: tex/pgfcirc.defines.tex
+
+%% Options
+
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinates
+\newdimen\pgf@circ@res@up
+\newdimen\pgf@circ@res@down
+\newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left
+\newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+\newdimen\pgf@circ@res@temp
+% inital thickness
+\newdimen \pgfstartlinewidth
+%% Keys
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circuit@compat
+\newif\ifpgf@circ@oldvoltagedirection
+
+% Option ">" for twoports
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf@circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf@circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}}
+
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+
+
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{nodes width/.initial=.04}
+\newdimen\pgf@circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1}}
+\pgf@circ@Rlen = 1.4cm
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial= \fontsize{6}{0}\selectfont\boldmath}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/battery2/height/.initial=.6}
+\ctikzset{bipoles/battery2/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/spst/height/.initial=.35}
+\ctikzset{bipoles/spst/width/.initial=.35}
+\ctikzset{bipoles/spst/depth/.initial=.2}
+\ctikzset{bipoles/nos/height/.initial=.3}
+\ctikzset{bipoles/nos/width/.initial=.35}
+\ctikzset{bipoles/ncs/height/.initial=.35}
+\ctikzset{bipoles/ncs/width/.initial=.35}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/short/height/.initial=0} %dummy height for voltage positioning
+\ctikzset{bipoles/short/width/.initial=0} %dummy width for voltage positioning
+%\ctikzset{bipoles/short/voltage/straight label distance/.initial=.2}
+%\ctikzset{bipoles/short/voltage/distance from node/.initial=.5}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.0}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/bandstop/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+
+
+\newif\ifpgf@circuit@trans@depletiontype
+\pgf@circuit@trans@depletiontypefalse
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+
+% Option solderdot for fet
+\newif\ifpgf@circuit@fet@solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf@circuit@fet@bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf@circuit@bpt@drawgate
+\pgf@circuit@bpt@drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+
+% Option draw bpt without base connection
+\newif\ifpgf@circuit@bpt@drawbase
+\pgf@circuit@bpt@drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf@circuit@bpt@drawphoto
+\pgf@circuit@bpt@drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf@circuit@pmos@emptycircle
+\newif\ifpgf@circuit@pmos@emptycircle
+\pgf@circuit@pmos@emptycirclefalse
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+
+
+\newif\ifpgf@circuit@trans@ntype
+\pgf@circuit@trans@ntypetrue %default true
+%\newif\ifpgf@circuit@trans@ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue } }
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse } }
+
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/op amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/en amp/width/.initial=1.7}
+\ctikzset{tripoles/en amp/port width/.initial=.7}
+\ctikzset{tripoles/en amp/height/.initial=1.6}
+\ctikzset{tripoles/en amp/input height/.initial=.3}
+\ctikzset{tripoles/en amp/up pos/.initial=.45}
+\ctikzset{tripoles/en amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/en amp/font2/.initial= \fontsize{14}{0}\selectfont\boldmath}%absolut font size needed!
+\ctikzset{tripoles/gm amp/width/.initial=1.7}
+\ctikzset{tripoles/gm amp/port width/.initial=.7}
+\ctikzset{tripoles/gm amp/height/.initial=1.4}
+\ctikzset{tripoles/gm amp/input height/.initial=.5}
+\ctikzset{tripoles/gm amp/up pos/.initial=.45}
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
+
+
+% %Mechanical section
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol}
+\newif\ifpgf@circuit@bipole@strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/flow/.is family}
+\newif\ifpgf@circuit@bipole@flow@backward
+\ctikzset{bipole/flow/direction/.is choice}
+\ctikzset{bipole/flow/direction/forward/.code={\pgf@circuit@bipole@flow@backwardfalse}}
+\ctikzset{bipole/flow/direction/backward/.code={\pgf@circuit@bipole@flow@backwardtrue}}
+\newif\ifpgf@circuit@bipole@flow@before
+\ctikzset{bipole/flow/x position/.is choice}
+\ctikzset{bipole/flow/x position/after/.code={\pgf@circuit@bipole@flow@beforefalse}}
+\ctikzset{bipole/flow/x position/before/.code={\pgf@circuit@bipole@flow@beforetrue}}
+\newif\ifpgf@circuit@bipole@flow@below
+\ctikzset{bipole/flow/y position/.is choice}
+\ctikzset{bipole/flow/y position/above/.code={\pgf@circuit@bipole@flow@belowfalse}}
+\ctikzset{bipole/flow/y position/below/.code={\pgf@circuit@bipole@flow@belowtrue}}
+\ctikzset{bipole/flow/label/unit/.initial=}
+\ctikzset{bipole/flow/label/name/.initial=}
+\ctikzset{flow/distance/.initial = .5}
+\ctikzset{flow/offset/.initial = .2}%distance between flow-arrow and conductor
+
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/annotation/.is family}
+\ctikzset{bipole/annotation/position/.initial=-90}
+\ctikzset{bipole/annotation/unit/.initial=}
+\ctikzset{bipole/annotation/name/.initial=}
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.is choice}
+\ctikzset{bipole/nodes/left/none/.code={\ctikzsetvalof{bipole/nodes/left}{none}}}
+\ctikzset{bipole/nodes/left/empty/.code={\ctikzsetvalof{bipole/nodes/left}{empty}}}
+\ctikzset{bipole/nodes/left/full/.code={\ctikzsetvalof{bipole/nodes/left}{full}}}
+\ctikzset{bipole/nodes/left/diamond/.code={\ctikzsetvalof{bipole/nodes/left}{diamond}}}
+\ctikzset{bipole/nodes/left/rectjoinfill/.code={\ctikzsetvalof{bipole/nodes/left}{rectjoinfill}}}
+\ctikzset{bipole/nodes/right/.is choice}
+\ctikzset{bipole/nodes/right/none/.code={\ctikzsetvalof{bipole/nodes/right}{none}}}
+\ctikzset{bipole/nodes/right/empty/.code={\ctikzsetvalof{bipole/nodes/right}{empty}}}
+\ctikzset{bipole/nodes/right/full/.code={\ctikzsetvalof{bipole/nodes/right}{full}}}
+\ctikzset{bipole/nodes/right/diamond/.code={\ctikzsetvalof{bipole/nodes/right}{diamond}}}
+\ctikzset{bipole/nodes/right/rectjoinfill/.code={\ctikzsetvalof{bipole/nodes/right}{rectjoinfill}}}
+
+
+
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@strokediode
+\newif\ifpgf@circuit@fulldiode
+\pgf@circuit@strokediodefalse
+\pgf@circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full }}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty }}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke }}
+
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color={#1}}}}
+
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{straight/.is choice}
+\ctikzset{straightvoltage value/.initial=true}
+\ctikzset{straight/true/.code = {\pgf@circuit@bipole@voltage@straighttrue}}
+\ctikzset{straight/false/.code = {\pgf@circuit@bipole@voltage@straightfalse}}
+\ctikzset{straightvoltage/.style = {/tikz/circuitikz/straight=true}}
+\newif\ifpgf@circuit@bipole@voltage@straight
+\ctikzset{bipole/straight/.is if=pgf@circuit@bipole@voltage@straight}
+
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+
+\tikzset{american currents/.style = { \circuitikzbasekey/current = american } }
+\tikzset{european currents/.style = { \circuitikzbasekey/current = european } }
+\tikzset{american voltages/.style = { \circuitikzbasekey/voltage = american } }
+\tikzset{european voltages/.style = { \circuitikzbasekey/voltage = european } }
+\tikzset{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester choice/.is choice}
+\ctikzset{gas filled surge arrester choice/european/.code= {\pgf@circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester choice/american/.code= {\pgf@circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=american } }
+\tikzset{european gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester set} }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester set} }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltaege conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue } }
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue }
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+%%%---------- close: tex/pgfcirc.defines
+%%%%%%%%%%% Springe nach tex/pgfcircutils
+%%%---------- open: tex/pgfcircutils.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+ \fi
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+
+%%%---------- close: tex/pgfcircutils
+
+%%%%%%%%%%% Springe nach tex/pgfcircshapes
+%%%---------- open: tex/pgfcircshapes.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \northeast
+ \pgf@y=-\pgf@y
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \northeast
+ \pgf@y=0cm
+ \pgf@x=-\pgf@x
+ }
+ \anchor{text}{%
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+}{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@temp}{\pgf@circ@res@up+\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@temp}{\pgf@circ@res@up-\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% Fill for correct rectangular joins
+
+\pgfdeclareshape{rectjoinfill}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfpathrectanglecorners
+ {\pgfpoint{0}{.5\pgflinewidth}}
+ {\pgfpoint{0}{-.5\pgflinewidth}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+
+}
+
+%% Flow arrow
+
+\pgfdeclareshape{flowarrow}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfnode{currarrow}{tip}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+ }
+}
+
+%% Input arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+
+}
+
+%%%---------- close: tex/pgfcircshapes
+%%%%%%%%%%% Springe nach tex/pgfcircmonopoles
+%%%---------- open: tex/pgfcircmonopoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+
+\pgfdeclareshape{ground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+
+\pgfdeclareshape{rground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{tground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ %\pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{sground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{draw}
+
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+% noiseless ground
+\pgfdeclareshape{nground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{1.3\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{1.3\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% protective ground
+\pgfdeclareshape{pground}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ %\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathcircle{\pgfpoint{0pt}{-\pgf@circ@res@step}} {1.2\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \endpgfscope
+ }
+}
+
+% chassis ground
+\pgfdeclareshape{cground}{
+\anchor{center}{
+ \pgfpointorigin
+}
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/chassis/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-1.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+
+
+\pgfdeclareshape{antenna}{
+\anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+
+ % \pgfpathmoveto{\pgfpointorigin}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ % \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ % \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+ }
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+ \pgf@x=5\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=6\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+% \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=2\pgf@circ@res@step
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+\anchor{center}{\pgfpointorigin}
+\anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=-2\pgf@circ@res@step
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+
+\behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+}
+
+}
+
+
+% match
+\pgfdeclareshape{match}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+
+}
+
+
+%%%---------- close: tex/pgfcircmonopoles
+%%%%%%%%%%% Springe nach tex/pgfcircbipoles
+%%%---------- open: tex/pgfcircbipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+
+
+\long\def\pgfcircdeclarebipole#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@res@down=-#2\pgf@circ@Rlen
+ \pgf@circ@res@up=#4\pgf@circ@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{ne}{
+ \northeast
+ }
+ \anchor{nw}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{s}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{se}{%
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{%
+ \southwest
+ }
+ \anchor{w}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{left}{%
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{below}{%
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{a}{%
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{b} {
+ \southwest
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{%
+ \textanchor
+ }
+ \anchorborder{%
+ \ifpgf@circuit@bipole@inverted
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/resistor/height}}{resistor}{\ctikzvalof{bipoles/resistor/height}}{\ctikzvalof{bipoles/resistor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vresistor/height}}{vresistor}{\ctikzvalof{bipoles/vresistor/height}}{\ctikzvalof{bipoles/vresistor/width}}{ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/capacitor/height}}{capacitor}{\ctikzvalof{bipoles/capacitor/height}}{\ctikzvalof{bipoles/capacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pcapacitor/height}}{polarcapacitor}{\ctikzvalof{bipoles/pcapacitor/height}}{\ctikzvalof{bipoles/pcapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/pcapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Electrolytic Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ecapacitor/height}}{ecapacitor}{\ctikzvalof{bipoles/ecapacitor/height}}{\ctikzvalof{bipoles/ecapacitor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/ecapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+ \pgfsetrectcap
+ % % % Draw plus pole
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ % % Draw minus pole
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfsetfillcolor{black}
+ % % plus pole annotation
+ \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}]
+ {\pgfkeysvalueof{/tikz/circuitikz/bipoles/ecapacitor/font} $+$}
+}
+
+%% Battery
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery/height}}{battery}{\ctikzvalof{bipoles/battery/height}}{\ctikzvalof{bipoles/battery/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1 % poles with equl thickness
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery1/height}}{battery1}{\ctikzvalof{bipoles/battery1/height}}{\ctikzvalof{bipoles/battery1/width}}{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Battery 2 % negative pole thicker
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/battery2/height}}{battery2}{\ctikzvalof{bipoles/battery2/height}}{\ctikzvalof{bipoles/battery2/width}}{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cuteinductor/lower coil height}}{cuteinductor}{\ctikzvalof{bipoles/cuteinductor/height}}{\ctikzvalof{bipoles/cuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable cute inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}{vcuteinductor}{\ctikzvalof{bipoles/vcuteinductor/height}}{\ctikzvalof{bipoles/vcuteinductor/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/americaninductor/height 2}}{americaninductor}{\ctikzvalof{bipoles/americaninductor/height}}{\ctikzvalof{bipoles/americaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% variable american inductor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vamericaninductor/height 2}}{vamericaninductor}{\ctikzvalof{bipoles/vamericaninductor/height}}{\ctikzvalof{bipoles/vamericaninductor/width}}{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/vamericaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsource/height}}{vsource}{\ctikzvalof{bipoles/vsource/height}}{\ctikzvalof{bipoles/vsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourceam/height}}{vsourceAM}{\ctikzvalof{bipoles/vsourceam/height}}{\ctikzvalof{bipoles/vsourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$+$}
+ \fi
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesin/height}}{vsourcesin}{\ctikzvalof{bipoles/vsourcesin/height}}{\ctikzvalof{bipoles/vsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% Square Voltage source - contributed by Alistair Kwan
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcesquare/height}}{vsourcesquare}{\ctikzvalof{bipoles/vsourcesquare/height}}{\ctikzvalof{bipoles/vsourcesquare/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vsourcetri/height}}{vsourcetri}{\ctikzvalof{bipoles/vsourcetri/height}}{\ctikzvalof{bipoles/vsourcetri/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% PV Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pvsource/height}}{pvsource}{\ctikzvalof{bipoles/pvsource/height}}{\ctikzvalof{bipoles/pvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %Arrow Part
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/esource/height}}{esource}{\ctikzvalof{bipoles/esource/height}}{\ctikzvalof{bipoles/esource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcisource/height}}{dcisource}{\ctikzvalof{bipoles/dcisource/height}}{\ctikzvalof{bipoles/dcisource/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}}\pgfpatharc{0}{-90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{270}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}\pgfpatharc{180}{90}{0.85\pgf@circ@res@right and \pgf@circ@res@up}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% DC-Voltage source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dcvsource/height}}{dcvsource}{\ctikzvalof{bipoles/dcvsource/height}}{\ctikzvalof{bipoles/dcvsource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isource}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Independent double oo source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/oosource/height}}{oosource}{\ctikzvalof{bipoles/oosource/height}}{\ctikzvalof{bipoles/oosource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isourceam/height}}{isourceAM}{\ctikzvalof{bipoles/isourceam/height}}{\ctikzvalof{bipoles/isourceam/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+
+%% Independent sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/isource/height}}{isourcesin}{\ctikzvalof{bipoles/isource/height}}{\ctikzvalof{bipoles/isource/width}}{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Controlled voltage source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsource/height}}{cvsource}{\ctikzvalof{bipoles/cvsource/height}}{\ctikzvalof{bipoles/cvsource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourceam/height}}{cvsourceAM}{\ctikzvalof{bipoles/cvsourceam/height}}{\ctikzvalof{bipoles/cvsourceam/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$+$}
+ \fi
+}
+
+
+%% Controlled sinusoidal voltage source
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cvsourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Controlled sinusoidal current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cvsourcesin/height}}{cisourcesin}{\ctikzvalof{bipoles/cvsourcesin/height}}{\ctikzvalof{bipoles/cvsourcesin/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Controlled current source
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisource/height}}{cisource}{\ctikzvalof{bipoles/cisource/height}}{\ctikzvalof{bipoles/cisource/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled current source - American
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/cisourceam/height}}{cisourceAM}{\ctikzvalof{bipoles/cisourceam/height}}{\ctikzvalof{bipoles/cisourceam/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% Black generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulldiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullsdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulltdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fulllediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{fullpdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varcap/height}}{fullvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw,fill}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptydiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptyzzdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptysdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptytdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptylediode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/diode/height}}{emptypdiode}{\ctikzvalof{bipoles/diode/height}}{\ctikzvalof{bipoles/diode/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole{
+ \anchor{strokepathstart}{
+ \northeast
+ \pgf@y=0cm
+ \advance\pgf@x by -\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth
+ \advance\pgf@x by -\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth
+ }
+ \anchor{strokepathend}{
+ \northeast
+ \pgf@y=0cm
+ }
+ }{\ctikzvalof{bipoles/varcap/height}}{emptyvarcap}{\ctikzvalof{bipoles/varcap/height}}{\ctikzvalof{bipoles/varcap/width}}{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% (Closing) SPST
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spst/depth}}{cspst}{\ctikzvalof{bipoles/spst/height}}{\ctikzvalof{bipoles/spst/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0\pgf@circ@res@down}}
+ \pgfpatharcto{1.2\pgf@circ@res@right}{1.2\pgf@circ@res@right}{0}{0}{1}{\pgfpoint{.9\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+%% Opening SPST
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spst/depth}}{ospst}{\ctikzvalof{bipoles/spst/height}}{\ctikzvalof{bipoles/spst/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpatharcto{1.1\pgf@circ@res@right}{1.1\pgf@circ@res@right}{0}{0}{1}{\pgfpoint{.7\pgf@circ@res@left}{.9\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@left}{1\pgf@circ@res@up}}
+ \pgfsetarrowsend{latex'}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+%% Normal open Switch
+\pgfcircdeclarebipole{}{0}{nos}{\ctikzvalof{bipoles/nos/height}}{\ctikzvalof{bipoles/nos/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+}
+
+%% Normal closed Switch
+\pgfcircdeclarebipole{}{0}{ncs}{\ctikzvalof{bipoles/ncs/height}}{\ctikzvalof{bipoles/ncs/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Push Button
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/pushbutton/height 2}}{pushbutton}{\ctikzvalof{bipoles/pushbutton/height}}{\ctikzvalof{bipoles/pushbutton/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+% % METERINGSHAPE
+\long\def\drawmeteringcircle{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+ %draw connections to circle
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ %draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw arrow
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%AMPEREMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ammeter/height}}{ammeter}{\ctikzvalof{bipoles/ammeter/height}}{\ctikzvalof{bipoles/ammeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ohmmeter/height}}{ohmmeter}{\ctikzvalof{bipoles/ohmmeter/height}}{\ctikzvalof{bipoles/ohmmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/voltmeter/height}}{voltmeter}{\ctikzvalof{bipoles/voltmeter/height}}{\ctikzvalof{bipoles/voltmeter/width}}{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+%% Short circuit
+
+\pgfcircdeclarebipole{}{0}{short}{0}{0}{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/open/height}}{open}{\ctikzvalof{bipoles/open/height}}{\ctikzvalof{bipoles/open/width}}{
+
+}
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/generic/height}}{generic}{\ctikzvalof{bipoles/generic/height}}{\ctikzvalof{bipoles/generic/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fuse/height}}{fuse}{\ctikzvalof{bipoles/fuse/height}}{\ctikzvalof{bipoles/fuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some (bleah)
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fullgeneric/height}}{fullgeneric}{\ctikzvalof{bipoles/fullgeneric/height}}{\ctikzvalof{bipoles/fullgeneric/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/ageneric/height}}{ageneric}{\ctikzvalof{bipoles/ageneric/height}}{\ctikzvalof{bipoles/ageneric/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/afuse/height}}{afuse}{\ctikzvalof{bipoles/afuse/height}}{\ctikzvalof{bipoles/afuse/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/memristor/height}}{memristor}{\ctikzvalof{bipoles/memristor/height}}{\ctikzvalof{bipoles/memristor/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tgeneric/height}}{tgeneric}{\ctikzvalof{bipoles/tgeneric/height}}{\ctikzvalof{bipoles/tgeneric/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/photoresistor/height 2}}{photoresistor}{\ctikzvalof{bipoles/photoresistor/height}}{\ctikzvalof{bipoles/photoresistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Thermistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistor/height}}{thermistor}{\ctikzvalof{bipoles/thermistor/height}}{\ctikzvalof{bipoles/thermistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorptc/height 2}}{thermistorptc}{\ctikzvalof{bipoles/thermistorptc/height}}{\ctikzvalof{bipoles/thermistorptc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermistorntc/height 2}}{thermistorntc}{\ctikzvalof{bipoles/thermistorntc/height}}{\ctikzvalof{bipoles/thermistorntc/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/thermocouple/height 2}}{thermocouple}{\ctikzvalof{bipoles/thermocouple/height}}{\ctikzvalof{bipoles/thermocouple/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% Varistor
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/varistor/height}}{varistor}{\ctikzvalof{bipoles/varistor/height}}{\ctikzvalof{bipoles/varistor/width}}{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tfullgeneric/height}}{tfullgeneric}{\ctikzvalof{bipoles/tfullgeneric/height}}{\ctikzvalof{bipoles/tfullgeneric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vcapacitor/height}}{vcapacitor}{\ctikzvalof{bipoles/vcapacitor/height}}{\ctikzvalof{bipoles/vcapacitor/width}}{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piezoelectric/height}}{piezoelectric}{\ctikzvalof{bipoles/piezoelectric/height}}{\ctikzvalof{bipoles/piezoelectric/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ %% Outer markings
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %% Inner Box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left+4}{\pgf@circ@res@up-1}}{\pgfpoint{\pgf@circ@res@right-4}{\pgf@circ@res@down+1}}
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=diamond}}
+
+\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=full}}
+\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=empty}}
+\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamond}}
+\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=empty, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=full, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamond, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
+
+
+%% The output routine
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[diamondpole] {}
+ \else
+ \pgfextra{ \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[ocirc] {}
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[circ] {}
+ \else
+ \pgfextra{ \def\pgf@temp{rectjoinfill} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztostart) node[rectjoinfill] {}
+ \else
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} \def\pgf@temp{diamond} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[diamondpole] {}
+ \else
+ \pgfextra{ \def\pgf@temp{empty} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[ocirc] {}
+ \else
+ \pgfextra{ \def\pgf@temp{full} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[circ] {}
+ \else
+ \pgfextra{ \def\pgf@temp{rectjoinfill} }
+ \ifx\pgf@temp\pgf@circ@temp
+ (\tikztotarget) node[rectjoinfill] {}
+ \else
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lamp/height}}{lamp}{\ctikzvalof{bipoles/lamp/height}}{\ctikzvalof{bipoles/lamp/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tline/height}
+ }{tline}{\ctikzvalof{bipoles/tline/height}
+ }{\ctikzvalof{bipoles/tline/width}
+ }
+ {
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0}}
+ {\pgfpoint{\pgf@circ@res@step}{0}}
+ {\pgfpoint{0}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/squid/height}}{squid}{\ctikzvalof{bipoles/squid/height}}{\ctikzvalof{bipoles/squid/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/barrier/height}}{barrier}{\ctikzvalof{bipoles/barrier/height}}{\ctikzvalof{bipoles/barrier/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%% Generic two port box
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/twoport/height}}{twoport}{\ctikzvalof{bipoles/twoport/height}}{\ctikzvalof{bipoles/twoport/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vco/width}}{vco}{\ctikzvalof{bipoles/twoport/width}}{\ctikzvalof{bipoles/vco/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw circle
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+}
+
+%% bandpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bandpass/width}}{bandpass}{\ctikzvalof{bipoles/bandpass/width}}{\ctikzvalof{bipoles/bandpass/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% bandstop filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bandstop/width}}{bandstop}{\ctikzvalof{bipoles/bandstop/width}}{\ctikzvalof{bipoles/bandstop/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandstop/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt}% always draw solid line for inner symbol
+ \pgfsetarrows{-}%never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/highpass/width}}{highpass}{\ctikzvalof{bipoles/highpass/width}}{\ctikzvalof{bipoles/highpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/lowpass/width}}{lowpass}{\ctikzvalof{bipoles/lowpass/width}}{\ctikzvalof{bipoles/lowpass/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/adc/width}}{adc}{\ctikzvalof{bipoles/adc/width}}{\ctikzvalof{bipoles/adc/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dac/width}}{dac}{\ctikzvalof{bipoles/dac/width}}{\ctikzvalof{bipoles/dac/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/dsp/width}}{dsp}{\ctikzvalof{bipoles/dsp/width}}{\ctikzvalof{bipoles/dsp/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/fft/width}}{fft}{\ctikzvalof{bipoles/fft/width}}{\ctikzvalof{bipoles/fft/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{amp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole{}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{vamp}{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+ }{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgfusepath{draw}
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+ % draw arrow
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/piattenuator/width}}{piattenuator}{\ctikzvalof{bipoles/piattenuator/width}}{\ctikzvalof{bipoles/piattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vpiattenuator/width}}{vpiattenuator}{\ctikzvalof{bipoles/vpiattenuator/width}}{\ctikzvalof{bipoles/vpiattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/tattenuator/width}}{tattenuator}{\ctikzvalof{bipoles/tattenuator/width}}{\ctikzvalof{bipoles/tattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/vtattenuator/width}}{vtattenuator}{\ctikzvalof{bipoles/vtattenuator/width}}{\ctikzvalof{bipoles/vtattenuator/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{phaseshifter}{\ctikzvalof{bipoles/phaseshifter/width}}{\ctikzvalof{bipoles/phaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/phaseshifter/width}}{vphaseshifter}{\ctikzvalof{bipoles/vphaseshifter/width}}{\ctikzvalof{bipoles/vphaseshifter/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/detector/width}}{detector}{\ctikzvalof{bipoles/detector/width}}{\ctikzvalof{bipoles/detector/width}}{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{european gas filled surge arrester}{\ctikzvalof{bipoles/european gas filled surge arrester/height}}{\ctikzvalof{bipoles/european gas filled surge arrester/width}}{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{american gas filled surge arrester}{\ctikzvalof{bipoles/american gas filled surge arrester/height}}{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+ %\def\pgf@circ@temp{right}
+ %\ifx\tikz@res@label@pos\pgf@circ@temp
+ % \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ %\else
+% \def\pgf@circ@temp{below}
+% \ifx\tikz@res@label@pos\pgf@circ@temp
+% \pgf@circ@res@step=-1.2\pgf@circ@res@up
+% \else
+% \pgf@circ@res@step=1.2\pgf@circ@res@up
+% \fi
+% \fi
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfnode{circle}{center}{}{}{}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ %\pgftransformshift{\pgfpoint{.25\pgf@circ@res@left}{.45\pgf@circ@res@down}}
+ %\pgfnode{circ}{center}{}{}{}
+ %\pgftransformshift{}
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+% % MECHANICAL SYMBOLS
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spring/height}}{spring}{\ctikzvalof{bipoles/spring/height}}{\ctikzvalof{bipoles/spring/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/mass/box height}}{mass}{\ctikzvalof{bipoles/mass/height}}{\ctikzvalof{bipoles/mass/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}}
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/damper/height}}{damper}{\ctikzvalof{bipoles/damper/height}}{\ctikzvalof{bipoles/damper/width}}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+
+
+%%%---------- close: tex/pgfcircbipoles
+%%%%%%%%%%% Springe nach tex/pgfcirctripoles
+%%%---------- open: tex/pgfcirctripoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+
+
+\pgfdeclareshape{spdt}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+
+
+
+
+
+
+\long\def\pgfcircdeclarelogicport#1#2{
+ \pgfdeclareshape{american #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ #2
+
+ }
+ }
+}
+
+
+\pgfcircdeclarelogicport{and}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@down}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+ \pgfpathcurveto
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{nand}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathcurveto
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ {\pgfpoint{.0\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{nor}{
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+
+
+\pgfcircdeclarelogicport{or}{
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclarelogicport{xor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+\pgfcircdeclarelogicport{xnor}{
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {(\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input skip})*\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf@circ@res@right
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@res@other-\pgf@circ@res@step}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ddd}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \def\pgf@circ@temp{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/distance}\pgf@circ@res@right+}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{\pgf@circ@res@up}}
+
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{0pt}}
+ \pgfpathcurveto
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/bbb}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/ccc}\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/aaa}\pgf@circ@res@left}{.95*\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@temp-\pgf@circ@res@other}{.95*\pgf@circ@res@down}}
+
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclareshape{american not port}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+ }
+
+\pgfdeclareshape{invschmitt}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+ }
+
+\pgfdeclareshape{schmitt}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{2\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+ }
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 - is it a not
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in}{
+ \inOne
+ }
+ \anchor{in 1}{
+ \inOne
+ }
+ \anchor{in 2}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \def\pgf@temp{1}
+ \def\pgf@circ@temp{#3}
+ \ifx\pgftemp\pgf@circ@temp % one input
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}
+ \else % two inputs
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathmoveto{
+ \pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/input height}\pgf@circ@res@down}}
+ \fi%
+ %
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+%
+%
+ }
+ }
+}
+
+
+
+\pgfcircdeclareeurologicport{and}{$\&$}{2}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{2}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{2}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{$\&$}{2}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{2}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{2}{not}
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northeast{% upper right
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@circ@Rlen
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=.7\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=0.1\pgf@x
+ }
+ \anchor{pathstart}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{pathend}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{base}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{nobase}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ \anchor{nogate}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@x
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ #2
+ \backgroundpath{
+ \pgftransformationadjustments
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \ifnum \pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction} > 0
+ \pgf@circuit@trans@ntypetrue
+ \else
+ \pgf@circuit@trans@ntypefalse
+ \fi
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ %
+ #3
+ % BODY DIODE
+ \ifpgf@circuit@fet@bodydiode
+ \drawbodydiode{#1}
+ \fi
+ %
+ }
+ }
+}
+
+\long\def\drawbodydiode#1{
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgftransformrotate{90}
+ \pgftransformscale{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode scale}}
+ \ifpgf@circuit@fulldiode
+ \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \else
+ \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \fi
+ \endpgfscope
+ %Draw upper connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope{}
+ %Draw lower connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+}
+
+\long\def\declarebpt#1{
+ \pgfcircdeclaretransistor{#1}{}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \ifpgf@circuit@bpt@drawphoto
+ \pgfscope
+ \pgfsetarrowsstart{latex'}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \else
+ \ifpgf@circuit@bpt@drawbase
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \fi
+ }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+
+\long\def\declareigbt#1{
+\pgfcircdeclaretransistor{#1}{}
+{
+ %draw upper connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %draw thicker gate lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw lower connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ %draw gate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \fi
+ \pgfusepath{draw}
+}
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+
+\pgfcircdeclaretransistor{nmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+}
+
+
+\pgfcircdeclaretransistor{pmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+ \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \ifpgf@circuit@pmos@emptycircle
+ \pgfsetfillcolor{white}
+ \fi
+ \pgfusepath{draw,fill}
+}
+
+\long\def\drawfetcore#1{
+ \pgftransformationadjustments
+ %top connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \ifpgf@circuit@trans@depletiontype
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \else
+
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \fi
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %Bulk connection line
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ %bottom connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ %draw thick gate line
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \ifpgf@circuit@trans@ntype
+ \else
+ \pgftransformrotate{180}
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ % GATE CONNECTION
+ \ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+ \fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+ \anchor{bulk}{\left\pgf@x=0pt}
+ \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt
+ #2
+ }
+ {#3}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nfet}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pfet}
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfete}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfetebulk}
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetebulk/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{nigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfete}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfetebulk}
+}
+
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{pigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ % GATE
+ %\pgfscope
+ %\pgfpathmoveto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ %\pgfpathlineto{\pgfpoint
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate width}\pgf@circ@res@left}
+ % {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ %\pgfsetlinewidth{2\pgflinewidth}
+ %\pgfusepath{draw}
+ %\endpgfscope
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{fullthyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/thyristor/height 2}}{emptythyristor}{\ctikzvalof{tripoles/thyristor/height}}{\ctikzvalof{tripoles/thyristor/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{emptytriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}{\ctikzvalof{tripoles/triac/height}}{fulltriac}{\ctikzvalof{tripoles/triac/height}}{\ctikzvalof{tripoles/triac/width}}{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+
+
+
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \northeast
+ \pgf@y=.8\pgf@y
+ }
+}{\ctikzvalof{tripoles/toggleswitch/height 2}}{toggleswitch}{\ctikzvalof{tripoles/toggleswitch/height}}{\ctikzvalof{tripoles/toggleswitch/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+
+
+
+
+
+
+
+
+
+\pgfdeclareshape{op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+
+
+ }
+ }
+
+%op amp shape as in european standard en 60617
+\pgfdeclareshape{en amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {
+ \left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{up}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{down}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font} $-$}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgftext[base,y=-3ex,at=\pgfpoint{.3\pgf@circ@res@left}{\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font2} $\triangleright$}
+ \pgftext[base,y=-3ex,at=\pgfpoint{.3\pgf@circ@res@right}{\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/en amp/font2} $\infty$}
+ }
+}
+
+%%Transkonduktanzverstärker
+\pgfdeclareshape{gm amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{0pt}} %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %Umrandung:
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}} %geändert startpunkt neu am ausgangsstrich
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}%vom Ausgang nach oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}%ecke links unten nach rechts unten
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+
+ }
+ }
+
+
+
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/potentiometer/height 2}}{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}{\ctikzvalof{bipoles/potentiometer/width}}{
+\pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+\pgftransformationadjustments
+\pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+\divide \pgf@circ@res@step by 12
+
+\pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+\pgf@circ@res@other = \pgf@circ@res@left
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by 2\pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+\advance\pgf@circ@res@other by \pgf@circ@res@step
+\pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+\pgfsetbeveljoin
+\pgfusepath{draw}
+
+\pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+\endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}{\ctikzvalof{bipoles/generic potentiometer/height 2}}{genericpotentiometer}{\ctikzvalof{bipoles/generic potentiometer/height}}{\ctikzvalof{bipoles/generic potentiometer/width}}{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex'}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{oscillator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{text}{
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@Rlen{}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+ % draw outer box
+ \ifpgf@circuit@boxed{}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{circulator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed{}
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfusepath{draw}
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{pgf@generic}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{pgf@resistor}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+% electromechanical device (motor/generator)
+\pgfdeclareshape{elmech}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ % draw outer box
+ % \ifpgf@circuit@boxed
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ % \fi
+ % draw outer circle
+ %\ifpgf@circuit@boxed
+ % \pgf@circ@res@step=.7\pgf@circ@res@step
+ % \pgfsetdash{}{0pt} % draw solid circle if boxed
+ %\else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %\fi
+ \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{magnetron}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{anode}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{cathode1}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(105)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(105)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{cathode2}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(75)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(75)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@Rlen
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfmathsetlength{\pgf@circ@res@other}{sin(15)*\pgf@circ@res@up}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ % draw outer box
+ % \ifpgf@circuit@boxed
+ % \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ % \fi
+ % draw outer circle
+ %\ifpgf@circuit@boxed
+ % \pgf@circ@res@step=.7\pgf@circ@res@step
+ % \pgfsetdash{}{0pt} % draw solid circle if boxed
+ %\else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %\fi
+ %create outer circle
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@right}
+ \pgfsetfillcolor{white}
+ \pgfusepath{draw}
+ %create chambers
+ \foreach \angle in {45,135,225,315}{
+ \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf@circ@res@right}}
+ \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf@circ@res@right}}
+ }
+ \pgfsetroundcap
+ \pgfusepath{draw}
+ \pgfscope
+ %draw connection from outside
+ %anode
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ %cathodes
+ \pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ %create cathode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.15\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %create anode
+ \pgfpathmoveto{\pgfpoint{0.3\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%%%---------- close: tex/pgfcirctripoles
+%%%%%%%%%%% Springe nach tex/pgfcircquadpoles
+%%%---------- open: tex/pgfcircquadpoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ #2
+
+ }
+ }
+}
+
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \def\stretto{.4}
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+
+ % contrib Kristofer M. Monisit
+
+ \pgfdeclareshape{fd op amp}
+ {
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out +}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $-$}
+
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} $+$}
+
+ \pgfsetrectcap
+ % Draw them all!
+ \pgfusepath{draw}
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathclose
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+ }
+
+
+
+
+\pgfcircdeclarequadpole{transformer}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \def\stretto{.4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% four-port
+% defines a general outer box for four-ports
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarefourport#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ % draw inner text
+ \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ }
+ }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+
+
+}
+%%%---------- close: tex/pgfcircquadpoles
+
+%%%%%%%%%%% Springe nach tex/pgfcirclabel
+%%%---------- open: tex/pgfcirclabel.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{annotation/.style = { a=#1 } }
+\ctikzset{a/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1}
+ \ctikzsetvalof{bipole/annotation/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }}
+
+\ctikzset{annotation above/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{a^/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{annotation below/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+\ctikzset{a_/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+
+
+
+\def\pgf@circ@drawlabels#1{
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/position}}
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is inverted, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is mirrored, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ }
+ %Firstly, place a coodinate directly at the edge of the shape
+ (\ctikzvalof{bipole/name}.\pgf@circ@temp) coordinate (labelcoor)
+ %now decide, which labels should be drawn
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabels{#1}
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabels{#1}
+ \else% smart
+ \pgf@circ@drawsmartlabels{#1}
+ \fi
+ \fi
+}
+
+
+\def\pgf@circ@drawsmartlabels#1{
+ \pgfextra{
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70
+ \pgf@circ@drawrotlabels{#1}
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+}
+
+
+\def\pgf@circ@drawrotlabels#1{
+ \pgfextra{
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ %we need some more space for placement below, due to mid-anchor
+ \def\pgf@circ@labposdistance{1.5ex}
+ \else
+ \def\pgf@circ@labposdistance{2ex}
+ \fi
+ %Calculate rotation of the label from direction and strip decimals
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ % rotate the label at second or third quadrant:
+ \ifnum \pgfcirclabrot > 90 \ifnum \pgfcirclabrot < 270
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %invert the space relationships due to rotatet strings
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ \def\pgf@circ@labposdistance{2ex}
+ \else
+ \def\pgf@circ@labposdistance{1.5ex}
+ \fi
+ \fi\fi
+ \pgfmathparse{\ctikzvalof{bipole/#1/position}>0?\pgf@circ@direction+90:\pgf@circ@direction-90}
+ \edef\pgf@circ@labposangle{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ (labelcoor)++(\pgf@circ@labposangle:\pgf@circ@labposdistance) coordinate(labelcoor)
+ node[anchor=mid,rotate=\pgfcirclabrot](\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@drawreglabels#1{
+
+ %Now calculate all shape positions
+ %Use mid-anchor at x-axis and base-anchor at y-axis, respectively.
+ %All points between will be addressed by angled-anchors:
+ \pgfextra{
+ \pgfmathadd{\pgf@circ@labanc}{90}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathparse{mod(\pgf@circ@temp,180)>135?mod(\pgf@circ@temp,180)-180:mod(\pgf@circ@temp,180)}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ %Values between -5 and 5 are at pos /neg x-axis, values around 90 are at both y-axis
+ \ifnum \pgfcircmathresult > 84 \ifnum \pgfcircmathresult< 96
+ \pgfextra{\edef\pgf@circ@labpos{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}}
+ \ifnum \pgf@circ@labpos > 180
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanc{mid west}}
+ \else
+ \pgfextra{\def\pgf@circ@labanc{mid east}}
+ \fi
+ \else
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanc{mid east}}
+ \else
+ \pgfextra{\def\pgf@circ@labanc{mid west}}
+ \fi
+ \fi
+ \fi\fi
+ \ifnum \pgfcircmathresult <6
+ \ifnum \ctikzvalof{bipole/#1/position} < 0
+ %we need some more space for placement below, due to mid-anchor
+ (labelcoor)++(-\pgf@circ@labanc:2ex) coordinate(labelcoor)
+ \else
+ (labelcoor)++(-\pgf@circ@labanc:1.5ex) coordinate(labelcoor)
+ \fi
+ \pgfextra{\def\pgf@circ@labanc{mid}}
+ \fi
+ (labelcoor) node[anchor=\pgf@circ@labanc](\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@finallabels#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$%
+ \fi%
+}
+
+\ctikzset{text/.style = { t=#1 } }
+\ctikzset{t/.code = {
+ \ctikzsetvalof{bipoles/twoport/text}{#1}
+}}
+%%%---------- close: tex/pgfcirclabel
+%%%%%%%%%%% Springe nach tex/pgfcircvoltage
+%%%---------- open: tex/pgfcircvoltage.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi
+ \fi
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@bipole@current@backward
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi\fi\fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+
+
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {
+ \pgfkeysifdefined{/tikz/circuitikz/bipoles/voltage/straight label distance}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {%calculate default value from part height
+ \edef\partheight{0.5*\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/height}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen+0.2\pgf@circ@Rlen)}
+ }
+ }
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distacefromnode{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}} }
+ { \edef\distacefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ }
+ % %\pgf@circ@Rlen/16 is equal to the length of the currarrow
+ coordinate (pgfcirc@midtmp) at ($(\tikztostart) ! \pgf@circ@Rlen/16 ! (anchorstartnode)$) %absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorstartnode)$)
+
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@midtmp) ! -\distfromline ! \pgf@circ@voltage@angle:(anchorstartnode)$)
+ coordinate (pgfcirc@midtmp) at ($(\tikztotarget) ! \pgf@circ@Rlen/16 ! (anchorendnode)$)%absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorendnode)$)
+
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@midtmp) ! \distfromline ! \pgf@circ@voltage@angle : (anchorendnode)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ \else
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@straight
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) --(pgfcirc@Vfrom) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \else
+ (pgfcirc@Vfrom) --(pgfcirc@Vto) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \fi
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$-$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$+$}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{\scriptsize$+$}
+ (pgfcirc@Vto) node[inner sep=0, anchor=\pgf@circ@bipole@voltage@label@anchor]{$-$}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+\def\pgf@circ@drawvoltagegenerator{
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vfrom) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vto) at ($(\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vfrom) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vto) at ($ (\ctikzvalof{bipole/name}.center) ! \ctikzvalof{voltage/bump a} ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vto)
+ \fi
+ \else% american voltage
+ \ifpgf@circuit@bipole@voltageoutsideofsymbol
+ % if it is a battery, must put + and -
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node {$-$} (pgfcirc@Vto) node {$+$}
+ \else
+ (pgfcirc@Vfrom) node {$+$} (pgfcirc@Vto) node {$-$}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine
+\def\pgf@circ@drawvoltage{% node name
+%\pgf@circ@direction
+ \pgfextra{
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ }%end pgfextra
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+
+ % (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where) %Zeile sinnlos!?
+ \ifpgf@circuit@bipole@voltage@straight
+ coordinate (Vlab) at ($(pgfcirc@Vto)!0.5!(pgfcirc@Vfrom) $)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt]
+ at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \else
+ coordinate (Vlab) at ($(\ctikzvalof{bipole/name}.center) !
+ \ifpgf@circuit@europeanvoltage
+ \eudist
+ \else
+ \ctikzvalof{voltage/american label distance}
+ \fi !
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)$)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt] at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \fi
+}%end drawvoltages
+%%%---------- close: tex/pgfcircvoltage
+%%%%%%%%%%% Springe nach tex/pgfcirccurrent
+%%%---------- open: tex/pgfcirccurrent.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+%reverse current direction for voltage sources
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@isvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below }
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \fi\fi\fi
+}
+}
+
+
+\ifpgf@circ@oldvoltagedirection
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+%% Output routine
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw current at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@current@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@current@backward
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \fi
+ coordinate[currarrow,pos=\ctikzvalof{current/distance},rotate=\pgf@circ@ffffff](Iarrow)
+ (Iarrow.\pgf@circ@bipole@current@label@where) node[anchor=\pgf@circ@dir]{\pgf@circ@finallabels{current/label}}
+}
+
+%%%---------- close: tex/pgfcirccurrent
+%%%%%%%%%%% Springe nach tex/pgfcircflow
+%%%---------- open: tex/pgfcircflow.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% flow handling
+
+%% Options
+\ctikzset{f^>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/curflowrent/y position = above
+ }
+}
+
+\ctikzset{f_>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f>^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f>_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f^</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f_</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f<^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f<_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f</.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = backward} }
+\ctikzset{f_/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = below } }
+\ctikzset{f>/.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = forward } }
+\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = above } }
+
+\ctikzset{f/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/flow/label/name=#1}
+ \ctikzsetvalof{bipole/flow/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}
+}
+
+%% Output routine
+\def\pgf@circ@drawflow{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@bipole@flow@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@flow@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw flow at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@flow@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \pgfextra{
+ \ifpgf@circuit@bipole@flow@backward
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \else
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \fi
+ }
+ coordinate[flowarrow,pos=\ctikzvalof{flow/distance},rotate=\pgf@circ@ffffff,yshift=\flow@offset](Farrowpos)
+ (Farrowpos.\pgf@circ@bipole@flow@label@where) node[anchor=\pgf@circ@dir]{ \pgf@circ@finallabels{flow/label}}
+}
+
+%%%---------- close: tex/pgfcircflow
+
+% defaults
+
+\setupmodule
+ [current=european,
+ voltage=european,
+ resistor=american,
+ inductor=cute,
+ logic=american,
+ siunitx=true,
+ arrowmos=false]
+
+\processaction
+ [\currentmoduleparameter{voltage}]
+ [european=>\ctikzset{voltage=european},
+ american=>\ctikzset{voltage=american}]
+
+\processaction
+ [\currentmoduleparameter{current}]
+ [european=>\ctikzset{ current=european},
+ american=>\ctikzset{ current=american}]
+
+\processaction
+ [\currentmoduleparameter{label}]
+ [straight=>\ctikzset{label/align = straight},
+ align=>\ctikzset{label/align = rotate},
+ smart=>\ctikzset{label/align = smart}]
+
+\processaction
+ [\currentmoduleparameter{resistor}]
+ [european=>\ctikzset{ resistor=european},
+ american=>\ctikzset{ resistor=american}]
+
+\processaction
+ [\currentmoduleparameter{inductor}]
+ [european=>\ctikzset{ inductor=european},
+ american=>\ctikzset{ inductor=american},
+ cute=>\ctikzset{ inductor=cute}]
+
+\processaction
+ [\currentmoduleparameter{diode}]
+ [full=>\ctikzset{ diode=full},
+ empty=>\ctikzset{ diode=empty}]
+
+\processaction
+ [\currentmoduleparameter{logic}]
+ [european=>\ctikzset{ logic ports=european},
+ american=>\ctikzset{ logic ports=american}]
+
+\processaction
+ [\currentmoduleparameter{siunitx}]
+ [true=>\def\SI#1#2{#1\,#2}
+ \def\ampere{\rm{A}}
+ \def\volt{\rm{V}}
+ \def\ohm{\Omega}
+ \def\siemens{\rm{S}}
+ \def\farad{\rm{F}}
+ \def\henry{\rm{H}}
+ \def\second{\rm{s}}
+ \def\coulomb{\rm{C}}
+ \def\siemens{\rm{S}}
+ \def\radians{\rm{rad}}
+ \def\milli{\rm{m}}
+ \def\micro{\mu}
+ \def\nano{\rm{n}}
+ \def\pico{\rm{p}}
+ \def\kilo{\rm{k}}
+ \def\mega{\rm{M}}
+ \def\giga{\rm{G}}
+ \def\tera{\rm{T}},
+ false=>]
+% \s!default=>\pgf@circ@siunitxtrue,
+
+\processaction
+ [\currentmoduleparameter{arrowmos}]
+ [true=>\pgf@circuit@mos@arrowstrue,
+ false=>\pgf@circuit@mos@arrowsfalse]
+% \s!default=>\pgf@circuit@mos@arrowstrue,
+
+
+\ifpgf@circ@siunitx
+ % nothing! siunitx and xstrings don't work in context
+\fi
+
+
+% Context specific
+
+\ctikzset{tripoles/op amp/font/.initial=\switchtobodyfont[small]}
+
+%%%%%%%%%%% Springe nach tex/pgfcircpath
+%%%---------- open: tex/pgfcircpath.tex
+
+\def\pgf@circ@direction{0.0}
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Invert node along path
+\ctikzset{inverted/.is choice}
+\ctikzset{invert value/.initial=1}
+\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}}
+\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}}
+\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
+\newif\ifpgf@circuit@bipole@inverted
+\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted}
+
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90,
+ bipole/inverted=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+%% Helper function for path-function to ensure using anchors between nodes
+\def\set@explicit@center@anchor#1{
+ \pgfutil@ifundefined{pgf@sh@ns@#1}
+ {
+ %This coordinate is no node(but a relative position or a coordinate), no further handling needed
+ }{
+ \pgfutil@in@.{#1}
+ \ifpgfutil@in@
+ % Anchor is used, do nothing!
+ \else%
+ \let\tikz@moveto@waiting=\relax
+ \pgfpathmoveto{\tikz@last@position}%force movement, because tikz@moveto@waiting
+ \edef#1{#1.center}%ensure using center anchor
+ \fi
+ }
+}
+
+
+%% Generic bipole path
+\def\pgf@circ@bipole@path#1#2{
+
+\pgfextra{
+ \set@explicit@center@anchor{\tikztostart}
+ \set@explicit@center@anchor{\tikztotarget}
+ \pgfsyssoftpath@getcurrentpath{\myp@th}%% save current path to extend after calculation of correct start/end coordinates
+ \ctikzset{bipole/kind = #1}
+ \edef\pgf@temp{\ctikzvalof{bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #2\pgf@circ@rand} % create it
+ \fi
+ }
+
+ (\tikztostart) coordinate (\ctikzvalof{bipole/name}start)%necessary to get correct coordinates in the case of relativ start/end or constructions like ((node1)-|(node2))
+ (\tikztotarget) coordinate (\ctikzvalof{bipole/name}end)
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \edef\pgf@circ@direction{\pgfmathresult}%Calculate direction(angle) of path
+ \pgfsyssoftpath@setcurrentpath{\myp@th}
+ }
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ --($(\ctikzvalof{bipole/name}start) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}end)$) %ugly workaround to get correct linejoins(node breaks path?)
+ \fi
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)%%positio of middle node
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifpgf@circuit@bipole@inverted
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.right)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.left)
+ \fi
+ \else
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.left)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.right)
+ \fi
+ \fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ \ifpgf@circuit@bipole@strokedsymbol%draw line thrue symbol(e.g. diodes)
+ \ifcsname pgf@anchor@#1shape@strokepathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) -- (\ctikzvalof{bipole/name}.strokepathstart)
+ (\ctikzvalof{bipole/name}.strokepathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (anchorstartnode)
+ (anchorendnode) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \fi
+
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi
+ \pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ \pgf@circ@ifkeyempty{bipole/flow/label/name}\else\pgf@circ@drawflow\fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ (\ctikzvalof{bipole/name}end)%Move to end of path
+ \else
+ ($(\ctikzvalof{bipole/name}end) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}start)$) -- (\ctikzvalof{bipole/name}end)%ugly workaround to get correct linejoins(node breaks path?)
+ %tikztostart and tikztotarget could not be used, because it would break if target coordinate is something like (node1-|node2)
+
+ \fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ \tikztonodes%draw pending nodes an path
+}
+
+
+%% Path definitions
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@batteryone@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@batterytwo@path#1{\pgf@circ@bipole@path{battery2}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
+\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
+\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@nos@path#1{\pgf@circ@bipole@path{nos}{#1}}
+\def\pgf@circ@ncs@path#1{\pgf@circ@bipole@path{ncs}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
+\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
+\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
+\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
+\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@bandstop@path#1{\pgf@circ@bipole@path{bandstop}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+%%Mechanical
+\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
+\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
+\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}
+
+
+
+
+%% Styles
+
+\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
+\def\compattikzset#1{\tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batteryone@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batterytwo@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source = #1, \circuitikzbasekey/bipole/is current=true}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source = #1, \circuitikzbasekey/bipole/is current=true}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\compattikzset{bandstop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandstop@path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+% % % % % %
+% % Beginn of Diodes
+% % % % % %
+
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
+\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
+\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
+%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{normal closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{normal open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, l=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path, i=#1}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path, v=#1}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+%\ifpgf@circuit@compat\else\compattikzset{R/.style= {resistor = #1}}\fi
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+ \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} }
+ \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} }
+ \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+%current sources
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+ \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+ \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+ \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+\def\inheritlogicport#1#2{
+ \pgfdeclareshape{#2 port}{
+ \inheritsavedanchors[from=#1 #2 port]
+ \inheritbackgroundpath[from=#1 #2 port]
+ \inheritanchor[from=#1 #2 port]{in}
+ \inheritanchor[from=#1 #2 port]{in 1}
+ \inheritanchor[from=#1 #2 port]{in 2}
+ \inheritanchor[from=#1 #2 port]{out}
+ \inheritanchor[from=#1 #2 port]{center}
+ \inheritanchor[from=#1 #2 port]{left}
+ }
+}
+
+\ifpgf@circuit@europeanlogicport
+ \inheritlogicport{european}{and}
+ \inheritlogicport{european}{or}
+ \inheritlogicport{european}{xor}
+ \inheritlogicport{european}{not}
+ \inheritlogicport{european}{nand}
+ \inheritlogicport{european}{nor}
+ \inheritlogicport{european}{xnor}
+\else
+ \inheritlogicport{american}{and}
+ \inheritlogicport{american}{or}
+ \inheritlogicport{american}{xor}
+ \inheritlogicport{american}{not}
+ \inheritlogicport{american}{nand}
+ \inheritlogicport{american}{nor}
+ \inheritlogicport{american}{xnor}
+\fi
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@inverted
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{elmech}
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{nigfetebulk}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{pigfetebulk}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+\pgf@circ@definetranspath{Lpigbt}
+\pgf@circ@definetranspath{Lnigbt}
+%%%---------- close: tex/pgfcircpath
+
+\catcode`\@=\tikzatcode
+\catcode`\|=\tikzbarcode
+\catcode`\!=\tikzexclaimcode
+
+% define the environment
+\long\def\startcircuitikz#1\stopcircuitikz{\starttikzpicture#1\stoptikzpicture}
+
+\protect
+
+\stopmodule
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.9.3.tex b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.9.3.tex
new file mode 100644
index 0000000000..c3e1205ab0
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz-0.9.3.tex
@@ -0,0 +1,16507 @@
+\def\pgfcircversion{0.9.3}
+\def\pgfcircversiondate{2019/07/13}
+\writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
+
+\usemodule[tikz]
+
+\startmodule[circuitikzgit]
+\usetikzlibrary[calc]
+\usetikzlibrary[arrows.meta, bending]
+
+\unprotect
+
+\edef\tikzatcode{\the\catcode`\@}
+\edef\tikzbarcode{\the\catcode`\|}
+\edef\tikzexclaimcode{\the\catcode`\!}
+\catcode`\@=11
+\catcode`\|=12
+\catcode`\!=12
+
+\let\tiny=\tfxx
+\let\small=\tfx
+
+%%%%%%%%%%% Springe nach tex/pgfcirc.defines
+%%%---------- open: tex/pgfcirc.defines.tex
+%% Counters
+
+\newcount\pgf@circ@count@a
+\newcount\pgf@circ@count@b
+\newcount\pgf@circ@count@c
+%%%%%%%%%%%%
+%% Dimensions
+
+% coordinates
+\newdimen\pgf@circ@res@up
+\newdimen\pgf@circ@res@down
+\newdimen\pgf@circ@res@zero
+\newdimen\pgf@circ@res@left
+\newdimen\pgf@circ@res@right
+\newdimen\pgf@circ@res@other
+\newdimen\pgf@circ@res@step
+\newdimen\pgf@circ@res@temp
+% inital thickness
+\newdimen \pgfstartlinewidth
+
+% arrow tips, ported over old arrows library (deprecated)
+% see https://tex.stackexchange.com/questions/234084/latex-arrow-tip-with-arrows-meta-library
+% this was the original definition of latex' tips, renamed to avoid clashes
+%
+\pgfarrowsdeclare{latexslim}{latexslim}
+{
+ \pgfutil@tempdima=0.28pt%
+ \advance\pgfutil@tempdima by.3\pgflinewidth%
+ \pgfarrowsleftextend{+-4\pgfutil@tempdima}
+ \pgfarrowsrightextend{+6\pgfutil@tempdima}
+}
+{
+ \pgfutil@tempdima=0.28pt%
+ \advance\pgfutil@tempdima by.3\pgflinewidth%
+ \pgfpathmoveto{\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{3.5\pgfutil@tempdima}{.5\pgfutil@tempdima}}
+ {\pgfqpoint{-1\pgfutil@tempdima}{1.5\pgfutil@tempdima}}
+ {\pgfqpoint{-4\pgfutil@tempdima}{3.75\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{-1.5\pgfutil@tempdima}{1\pgfutil@tempdima}}
+ {\pgfqpoint{-1.5\pgfutil@tempdima}{-1\pgfutil@tempdima}}
+ {\pgfqpoint{-4\pgfutil@tempdima}{-3.75\pgfutil@tempdima}}
+ \pgfpathcurveto
+ {\pgfqpoint{-1\pgfutil@tempdima}{-1.5\pgfutil@tempdima}}
+ {\pgfqpoint{3.5\pgfutil@tempdima}{-.5\pgfutil@tempdima}}
+ {\pgfqpoint{6\pgfutil@tempdima}{0\pgfutil@tempdima}}
+ \pgfpathclose
+ \pgfusepathqfill
+}
+
+\pgfarrowsdeclarereversed{latexslim reversed}{latexslim reversed}{latexslim}{latexslim}
+
+%% Macro to fill or draw
+
+\def\pgf@circ@draworfill{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{draw, fill}
+ \fi
+}
+
+\def\pgf@circ@draworfillandclip{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfusepath{draw, clip}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{draw, clip, fill}
+ \fi
+}
+
+\def\pgf@circ@maybefill{%
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfusepath{discard}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgfusepath{fill}
+ \fi
+}
+%% Keys
+
+\long\def\pgf@circ@comment#1{}
+
+\def\circuitikzbasekey{/tikz/circuitikz}
+
+\pgfkeys{\circuitikzbasekey/.is family}
+
+\def\circuitikzset#1{\pgfkeys{\circuitikzbasekey,#1}}
+\let\ctikzset\circuitikzset
+\def\ctikzvalof#1{\pgfkeysvalueof{\circuitikzbasekey/#1}}
+\def\ctikzsetvalof#1#2{\pgfkeyssetvalue{\circuitikzbasekey/#1}{#2}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circuit@compat
+\newif\ifpgf@circ@oldvoltagedirection % default false
+\newif\ifpgf@circ@explicitvdir
+\newif\ifpgf@circ@fixbatteries
+
+\ctikzset{voltage dir/.is choice}
+\ctikzset{voltage dir/old/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/noold/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriesfalse}}
+\ctikzset{voltage dir/RP/.code={\pgf@circ@oldvoltagedirectiontrue\pgf@circ@fixbatteriestrue}}
+\ctikzset{voltage dir/EF/.code={\pgf@circ@oldvoltagedirectionfalse\pgf@circ@fixbatteriestrue}}
+\tikzset{voltage dir/.style={circuitikz/voltage dir=#1}}
+
+
+% Option ">" for twoports
+\newif\ifpgf@circuit@inputarrow
+\ctikzset{>/.add code={}{\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/.is choice}
+\ctikzset{inputarrow/true/.code={\pgf@circuit@inputarrowtrue}}
+\ctikzset{inputarrow/false/.code={\pgf@circuit@inputarrowfalse}}
+
+% Option "boxed" for nodes and twoports
+\newif\ifpgf@circuit@boxed
+\pgfkeys{/tikz/boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{boxed/.add code={}{\pgf@circuit@boxedtrue}}
+\pgfkeys{/tikz/box/.add code={}{\pgf@circuit@boxedtrue}}
+\ctikzset{box/.add code={}{\pgf@circuit@boxedtrue}}
+
+% Option "dashed" for nodes and twoports
+\newif\ifpgf@circuit@dashed
+\pgfkeys{/tikz/dashed/.add code={}{\pgf@circuit@dashedtrue}}
+\ctikzset{dashed/.add code={}{\pgf@circuit@dashedtrue}}
+
+% Option "t=*" for nodes
+\pgfkeys{/tikz/t/.add code={}{\ctikzset{text=#1}}}
+
+\ctikzset{current arrow scale/.initial=16}
+
+\ctikzset{bipoles/.is family}
+\ctikzset{bipoles/border margin/.initial=1.1}
+\ctikzset{bipoles/thickness/.initial=2}
+\ctikzset{tripoles/thickness/.initial=2}
+\ctikzset{quadpoles/thickness/.initial=2}
+\ctikzset{nodes width/.initial=.04}
+
+% Base len for all circuitikz
+\newdimen\pgf@circ@Rlen
+\ctikzset{bipoles/length/.code={\pgf@circ@Rlen = #1}}
+\pgf@circ@Rlen = 1.4cm
+
+\ctikzset{monopoles/.is family}
+\ctikzset{monopoles/ground/width/.initial=.25}
+\ctikzset{monopoles/ground/connectionthickness/.initial=1}
+\ctikzset{monopoles/ground/thickness/.initial=2}
+\ctikzset{monopoles/rground/thickness/.initial=2}
+\ctikzset{monopoles/tground/thickness/.initial=3}
+\ctikzset{monopoles/vcc/width/.initial=.2}
+\ctikzset{monopoles/vcc/arrow/.initial=legacy}
+\ctikzset{monopoles/vee/arrow/.initial=legacy}
+\ctikzset{monopoles/match/width/.initial=.4}
+\ctikzset{monopoles/chassis/width/.initial=.25}
+\ctikzset{monopoles/alternative chassis/width/.initial=.25}
+\ctikzset{monopoles/equipotentiality/width/.initial=.25}
+\ctikzset{monopoles/tlinestub/width/.initial=.25}
+\ctikzset{monopoles/antenna/width/.initial=.25}
+\ctikzset{monopoles/antenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/antenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/txantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/txantenna/width/.initial=.25}
+\ctikzset{monopoles/rxantenna/label/xanchor/.initial=.4}
+\ctikzset{monopoles/rxantenna/label/yanchor/.initial=.75}
+\ctikzset{monopoles/rxantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/width/.initial=.25}
+\ctikzset{monopoles/bareantenna/label/xanchor/.initial=1}
+\ctikzset{monopoles/bareantenna/label/yanchor/.initial=0.5}
+\ctikzset{monopoles/waves/width/.initial=0.5}
+% microstrips
+\ctikzset{bipoles/mstline/height/.initial=0.3}
+\ctikzset{bipoles/mstline/width/.initial=1.2}
+\pgfkeys{/tikz/mstlinelen/.add code={}{\ctikzset{bipoles/mstline/width=#1}}}
+\ctikzset{monopoles/msport/width/.initial=.5}
+\ctikzset{monopoles/msrstub/height/.initial=1.0}
+\ctikzset{monopoles/msrstub/width/.initial=0.6}
+
+% microphone and loudspeaker
+\ctikzset{bipoles/loudspeaker/height/.initial=.8}
+\ctikzset{bipoles/loudspeaker/depth/.initial=.3}
+\ctikzset{bipoles/loudspeaker/width/.initial=.8}
+\ctikzset{bipoles/mic/height/.initial=1.2}
+\ctikzset{bipoles/mic/depth/.initial=.0}
+\ctikzset{bipoles/mic/width/.initial=.8}
+
+\ctikzset{bipoles/resistor/height/.initial=.3}
+\ctikzset{bipoles/resistor/width/.initial=.8}
+\ctikzset{bipoles/potentiometer/height/.initial=.8}
+\ctikzset{bipoles/potentiometer/height 2/.initial=.3}
+\ctikzset{bipoles/potentiometer/width/.initial=.8}
+\ctikzset{bipoles/photoresistor/height/.initial=.6}
+\ctikzset{bipoles/photoresistor/height 2/.initial=.3}
+\ctikzset{bipoles/photoresistor/width/.initial=.8}
+\ctikzset{bipoles/thermistor/main/.initial=.7}
+\ctikzset{bipoles/thermistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/width/.initial=.8}
+\ctikzset{bipoles/thermistorntc/main/.initial=.7}
+\ctikzset{bipoles/thermistorntc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorntc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistorptc/width/.initial=.8}
+\ctikzset{bipoles/thermistorptc/main/.initial=.7}
+\ctikzset{bipoles/thermistorptc/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/thermistorptc/height 2/.initial=.75}%.3/.7
+\ctikzset{bipoles/thermistor/width/.initial=.8}
+\ctikzset{bipoles/varistor/main/.initial=.7}
+\ctikzset{bipoles/varistor/height/.initial=.428}%.3/.7
+\ctikzset{bipoles/varistor/width/.initial=.8}
+\ctikzset{bipoles/vresistor/height/.initial=.6}
+\ctikzset{bipoles/vresistor/width/.initial=.8}
+\ctikzset{bipoles/cuteinductor/height/.initial=.3}
+\ctikzset{bipoles/cuteinductor/lower coil height/.initial=.15}
+\ctikzset{bipoles/cuteinductor/width/.initial=.6}
+\ctikzset{bipoles/cuteinductor/coils/.initial=5}
+\ctikzset{bipoles/cuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+%% Cute choke settings
+\ctikzset{bipoles/cutechoke/height/.initial=.3}
+\ctikzset{bipoles/cutechoke/lower coil height/.initial=.15}
+\ctikzset{bipoles/cutechoke/width/.initial=.6}
+\ctikzset{bipoles/cutechoke/coils/.initial=5}
+\ctikzset{bipoles/cutechoke/coil aspect/.initial=.5}%percentage of choke width, which is covered by lower coil
+\ctikzset{bipoles/cutechoke/cstep/.initial=.3}
+\ctikzset{bipoles/cutechoke/cdist/.initial=1.3}
+\ctikzset{bipoles/cutechoke/cthick/.initial=1}
+\newif\ifpgf@circuit@bipole@twolines
+\pgf@circuit@bipole@twolinesfalse
+%
+\ctikzset{bipoles/americaninductor/height/.initial=.3}
+\ctikzset{bipoles/americaninductor/height 2/.initial=.1}
+\ctikzset{bipoles/americaninductor/width/.initial=.8}
+\ctikzset{bipoles/americaninductor/coils/.initial=4}
+\ctikzset{bipoles/americaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/vcuteinductor/height/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/lower coil height/.initial=.3}
+\ctikzset{bipoles/vcuteinductor/width/.initial=.6}
+\ctikzset{bipoles/vcuteinductor/coils/.initial=5}
+\ctikzset{bipoles/vcuteinductor/coil aspect/.initial=.5}%percentage of inductor width, which is covered by lower coil
+\ctikzset{bipoles/vamericaninductor/height/.initial=.6}
+\ctikzset{bipoles/vamericaninductor/height 2/.initial=.2}
+\ctikzset{bipoles/vamericaninductor/width/.initial=.8}
+\ctikzset{bipoles/vamericaninductor/coils/.initial=4}
+\ctikzset{bipoles/vamericaninductor/coil height/.initial=.15}
+\ctikzset{bipoles/esource/height/.initial=.60}
+\ctikzset{bipoles/esource/width/.initial=.60}
+\ctikzset{bipoles/pvsource/height/.initial=.60}
+\ctikzset{bipoles/pvsource/width/.initial=.60}
+\ctikzset{bipoles/isource/height/.initial=.60}
+\ctikzset{bipoles/isource/width/.initial=.60}
+\ctikzset{bipoles/oosource/height/.initial=.60}
+\ctikzset{bipoles/oosource/width/.initial=.60}
+\ctikzset{bipoles/oosource/circlesize/.initial=.65}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/oosource/circleoffset/.initial=.35}%circlesize+circleoffset should be =1
+\ctikzset{bipoles/dcisource/angle/.initial=80}
+\ctikzset{bipoles/dcisource/height/.initial=.60}
+\ctikzset{bipoles/dcisource/width/.initial=.60}
+\ctikzset{bipoles/dcvsource/height/.initial=.60}
+\ctikzset{bipoles/dcvsource/width/.initial=.60}
+\ctikzset{bipoles/vsourcetri/height/.initial=.60}
+\ctikzset{bipoles/vsourcetri/width/.initial=.60}
+\ctikzset{bipoles/isourceam/height/.initial=.60}
+\ctikzset{bipoles/isourceam/width/.initial=.60}
+\ctikzset{bipoles/vsource/height/.initial=.60}
+\ctikzset{bipoles/vsource/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/height/.initial=.60}
+\ctikzset{bipoles/vsourceam/width/.initial=.60}
+\ctikzset{bipoles/vsourceam/margin/.initial=.7}
+\ctikzset{bipoles/isourcesin/height/.initial=.60}
+\ctikzset{bipoles/isourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesin/height/.initial=.60}
+\ctikzset{bipoles/vsourcesin/width/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/height/.initial=.60}
+\ctikzset{bipoles/vsourcesquare/width/.initial=.60}
+\ctikzset{bipoles/cisource/height/.initial=.7}
+\ctikzset{bipoles/cisource/width/.initial=.7}
+\ctikzset{bipoles/cisourceam/height/.initial=.7}
+\ctikzset{bipoles/cisourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsource/height/.initial=.7}
+\ctikzset{bipoles/cvsource/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/height/.initial=.7}
+\ctikzset{bipoles/cvsourceam/width/.initial=.7}
+\ctikzset{bipoles/cvsourceam/margin/.initial=.7}
+\ctikzset{bipoles/cvsourceam/text scale/.initial=1}
+\ctikzset{bipoles/cisourcesin/width/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/height/.initial=.7}
+\ctikzset{bipoles/cvsourcesin/width/.initial=.7}
+\ctikzset{bipoles/capacitor/height/.initial=.6}
+\ctikzset{bipoles/capacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/height/.initial=.5}
+\ctikzset{bipoles/ecapacitor/width/.initial=.2}
+\ctikzset{bipoles/ecapacitor/font/.initial= \fontsize{6}{0}\selectfont\boldmath}
+\ctikzset{bipoles/pcapacitor/height/.initial=.6}
+\ctikzset{bipoles/pcapacitor/width/.initial=.2}
+\ctikzset{bipoles/pcapacitor/bend width/.initial=1.1}
+\ctikzset{bipoles/vcapacitor/height/.initial=.6}
+\ctikzset{bipoles/vcapacitor/width/.initial=.5}
+\ctikzset{bipoles/vcapacitor/capacitor width/.initial=.4}
+\ctikzset{bipoles/piezoelectric/height/.initial=.7}
+\ctikzset{bipoles/piezoelectric/width/.initial=.5}
+\ctikzset{bipoles/battery/height/.initial=.6}
+\ctikzset{bipoles/battery/width/.initial=.3}
+\ctikzset{bipoles/battery1/height/.initial=.6}
+\ctikzset{bipoles/battery1/width/.initial=.3}
+\ctikzset{bipoles/battery2/height/.initial=.6}
+\ctikzset{bipoles/battery2/width/.initial=.3}
+\ctikzset{bipoles/diode/height/.initial=.50}
+\ctikzset{bipoles/diode/width/.initial=.40}
+\ctikzset{bipoles/bidirectionaldiode/height/.initial=1.1}
+\ctikzset{bipoles/bidirectionaldiode/width/.initial=1}
+\ctikzset{bipoles/bidirectionaldiode/diode width left/.initial=.3}
+\ctikzset{bipoles/bidirectionaldiode/diode width right/.initial=.3}
+\ctikzset{bipoles/varcap/height/.initial=.50}
+\ctikzset{bipoles/varcap/width/.initial=.45}
+\ctikzset{bipoles/spst/height/.initial=.35}
+\ctikzset{bipoles/spst/width/.initial=.35}
+\ctikzset{bipoles/spst/depth/.initial=.2}
+\ctikzset{bipoles/nos/height/.initial=.3}
+\ctikzset{bipoles/nos/width/.initial=.35}
+\ctikzset{bipoles/nos/depth/.initial=.2}
+\ctikzset{bipoles/ncs/height/.initial=.35}
+\ctikzset{bipoles/ncs/width/.initial=.35}
+\ctikzset{bipoles/ncs/depth/.initial=.2}
+\ctikzset{bipoles/generic/height/.initial=.30}
+\ctikzset{bipoles/generic/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/height/.initial=.30}
+\ctikzset{bipoles/european gas filled surge arrester/width/.initial=.80}
+\ctikzset{bipoles/european gas filled surge arrester/inside/.initial=.30}
+\ctikzset{bipoles/american gas filled surge arrester/height/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/width/.initial=.60}
+\ctikzset{bipoles/american gas filled surge arrester/inside/.initial=.15}
+\ctikzset{bipoles/american gas filled surge arrester/dot x/.initial=.25}
+\ctikzset{bipoles/american gas filled surge arrester/dot y/.initial=.45}
+\ctikzset{bipoles/american gas filled surge arrester/size/.initial=.1}
+\ctikzset{bipoles/fuse/height/.initial=.20}
+\ctikzset{bipoles/fuse/width/.initial=.50}
+\ctikzset{bipoles/afuse/height/.initial=.20}
+\ctikzset{bipoles/afuse/width/.initial=.50}
+\ctikzset{bipoles/generic potentiometer/height/.initial=.80}
+\ctikzset{bipoles/generic potentiometer/height 2/.initial=.30}
+\ctikzset{bipoles/generic potentiometer/width/.initial=.80}
+\ctikzset{bipoles/ageneric/height/.initial=.30}
+\ctikzset{bipoles/ageneric/width/.initial=.80}
+\ctikzset{bipoles/memristor/height/.initial=.30}
+\ctikzset{bipoles/memristor/wave height/.initial=.5}
+\ctikzset{bipoles/memristor/width/.initial=.80}
+\ctikzset{bipoles/tgeneric/height/.initial=.70}
+\ctikzset{bipoles/tgeneric/width/.initial=.80}
+\ctikzset{bipoles/tfullgeneric/height/.initial=.70}
+\ctikzset{bipoles/tfullgeneric/width/.initial=.80}
+\ctikzset{bipoles/fullgeneric/height/.initial=.30}
+\ctikzset{bipoles/fullgeneric/width/.initial=.80}
+\ctikzset{bipoles/open/height/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/width/.initial=.3} %necessary for curly voltages
+\ctikzset{bipoles/open/voltage/straight label distance/.initial=0}
+\ctikzset{bipoles/open/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/short/height/.initial=0} %dummy height for voltage positioning
+\ctikzset{bipoles/short/width/.initial=0} %dummy width for voltage positioning
+%\ctikzset{bipoles/short/voltage/straight label distance/.initial=.2}
+%\ctikzset{bipoles/short/voltage/distance from node/.initial=.5}
+\ctikzset{bipoles/ammeter/height/.initial=.60}
+\ctikzset{bipoles/ammeter/width/.initial=.60}
+\ctikzset{bipoles/ohmmeter/height/.initial=.60}
+\ctikzset{bipoles/ohmmeter/width/.initial=.60}
+\ctikzset{bipoles/voltmeter/height/.initial=.60}
+\ctikzset{bipoles/voltmeter/width/.initial=.60}
+\ctikzset{bipoles/smeter/height/.initial=.60}
+\ctikzset{bipoles/smeter/width/.initial=.60}
+\ctikzset{bipoles/qmeter/depth/.initial=.40}
+\ctikzset{bipoles/qmeter/height/.initial=.80}
+\ctikzset{bipoles/qmeter/width/.initial=.60}
+\ctikzset{bipoles/iloop/width/.initial=.40}
+\ctikzset{bipoles/iloop/height/.initial=.60}
+\ctikzset{bipoles/oscope/height/.initial=.60}
+\ctikzset{bipoles/oscope/width/.initial=.60}
+\ctikzset{bipoles/buffer/height/.initial=1}
+\ctikzset{bipoles/buffer/width/.initial=1}
+\ctikzset{bipoles/not port/width/.initial=1}
+\ctikzset{bipoles/not port/height/.initial=.8}
+\ctikzset{bipoles/not port/circle width/.initial=.15}
+\ctikzset{bipoles/lamp/height/.initial=.60}
+\ctikzset{bipoles/lamp/width/.initial=.60}
+\ctikzset{bipoles/bulb/height/.initial=.8}
+\ctikzset{bipoles/bulb/width/.initial=.8}
+\ctikzset{bipoles/tline/height/.initial=.3}
+\ctikzset{bipoles/tline/width/.initial=.8}
+\ctikzset{bipoles/squid/height/.initial=.60}
+\ctikzset{bipoles/squid/width/.initial=.60}
+\ctikzset{bipoles/barrier/height/.initial=.60}
+\ctikzset{bipoles/barrier/width/.initial=.60}
+\ctikzset{bipoles/thermocouple/height/.initial=.250}
+\ctikzset{bipoles/thermocouple/height 2/.initial=.60}
+\ctikzset{bipoles/thermocouple/width/.initial=.140}
+\ctikzset{bipoles/pushbutton/height/.initial=.5}
+\ctikzset{bipoles/pushbutton/height 2/.initial=.2}
+\ctikzset{bipoles/pushbutton/width/.initial=.50}
+
+\ctikzset{bipoles/twoport/width/.initial=.7}
+\ctikzset{bipoles/twoport/height/.initial=.7}
+\ctikzset{bipoles/twoport/text/.initial=}
+\ctikzset{bipoles/vco/width/.initial=.7}
+\ctikzset{bipoles/bandpass/width/.initial=.7}
+\ctikzset{bipoles/bandstop/width/.initial=.7}
+\ctikzset{bipoles/highpass/width/.initial=.7}
+\ctikzset{bipoles/lowpass/width/.initial=.7}
+\ctikzset{bipoles/adc/width/.initial=.7}
+\ctikzset{bipoles/dac/width/.initial=.7}
+\ctikzset{bipoles/dsp/width/.initial=.7}
+\ctikzset{bipoles/fft/width/.initial=.7}
+\ctikzset{bipoles/amp/width/.initial=.7}
+\ctikzset{bipoles/vamp/width/.initial=.7}
+\ctikzset{bipoles/piattenuator/width/.initial=.7}
+\ctikzset{bipoles/vpiattenuator/width/.initial=.7}
+\ctikzset{bipoles/tattenuator/width/.initial=.7}
+\ctikzset{bipoles/vtattenuator/width/.initial=.7}
+\ctikzset{bipoles/phaseshifter/width/.initial=.7}
+\ctikzset{bipoles/vphaseshifter/width/.initial=.7}
+\ctikzset{bipoles/detector/width/.initial=.7}
+% resistive sensor american style
+\ctikzset{bipoles/resistivesens/height/.initial=.6}
+\ctikzset{bipoles/resistivesens/width/.initial=.8}
+
+% crossing wires
+\ctikzset{bipoles/crossing/size/.initial=.2}
+
+\newif\ifpgf@circuit@trans@depletiontype
+\pgf@circuit@trans@depletiontypefalse
+
+\newif\ifpgf@circuit@mos@arrows
+\ctikzset{tripoles/mos style/.is choice}
+\ctikzset{tripoles/mos style/no arrows/.code={\pgf@circuit@mos@arrowsfalse}}
+\ctikzset{tripoles/mos style/arrows/.code={\pgf@circuit@mos@arrowstrue}}
+\pgfkeys{/tikz/arrowmos/.add code={}{\pgf@circuit@mos@arrowstrue}}
+\pgfkeys{/tikz/noarrowmos/.add code={}{\pgf@circuit@mos@arrowsfalse}}
+
+% Option solderdot for fet
+\newif\ifpgf@circuit@fet@solderdot
+\pgfkeys{/tikz/solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\ctikzset{solderdot/.add code={}{\pgf@circuit@fet@solderdottrue}}
+\pgfkeys{/tikz/nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+\ctikzset{nosolderdot/.add code={}{\pgf@circuit@fet@solderdotfalse}}
+
+% Option bodydiode for fet
+\newif\ifpgf@circuit@fet@bodydiode
+\pgfkeys{/tikz/bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\ctikzset{bodydiode/.add code={}{\pgf@circuit@fet@bodydiodetrue}}
+\pgfkeys{/tikz/nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+\ctikzset{nobodydiode/.add code={}{\pgf@circuit@fet@bodydiodefalse}}
+
+% Option draw fet without gate connection
+\newif\ifpgf@circuit@bpt@drawgate
+\pgf@circuit@bpt@drawgatetrue
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawgatefalse}}
+
+% Option draw bpt without base connection
+\newif\ifpgf@circuit@bpt@drawbase
+\pgf@circuit@bpt@drawbasetrue
+\pgfkeys{/tikz/nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nobase/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\pgfkeys{/tikz/nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+\ctikzset{nogate/.add code={}{\pgf@circuit@bpt@drawbasefalse}}
+
+% Option draw bpt with optical input
+\newif\ifpgf@circuit@bpt@drawphoto
+\pgf@circuit@bpt@drawphotofalse
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\pgfkeys{/tikz/photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+\ctikzset{photo/.add code={}{\pgf@circuit@bpt@drawphototrue}}
+
+% Option draw pmos with empty circle
+\newif\ifpgf@circuit@pmos@emptycircle
+\pgf@circuit@pmos@emptycirclefalse
+\pgfkeys{/tikz/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+\ctikzset{tripoles/pmos style/emptycircle/.add code={}{\pgf@circuit@pmos@emptycircletrue}}
+% Option draw pmos with no circle
+\newif\ifpgf@circuit@pmos@nocircle
+\pgf@circuit@pmos@nocirclefalse
+\pgfkeys{/tikz/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}}
+\ctikzset{tripoles/pmos style/nocircle/.add code={}{\pgf@circuit@pmos@nocircletrue}}
+% back to normal
+\pgfkeys{/tikz/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}}
+\ctikzset{tripoles/pmos style/fullcircle/.add code={}{\pgf@circuit@pmos@emptycirclefalse\pgf@circuit@pmos@nocirclefalse}}
+
+
+\newif\ifpgf@circuit@trans@ntype
+\pgf@circuit@trans@ntypetrue %default true
+%\newif\ifpgf@circuit@trans@ptype
+%\ctikzset{tripoles/nmos/.add code={\pgf@circuit@trans@ntypetrue}}
+\ctikzset{tripoles/nmos/width/.initial=.7}
+\ctikzset{tripoles/nmos/gate height/.initial=.35}
+\ctikzset{tripoles/nmos/base height/.initial=.5}
+\ctikzset{tripoles/nmos/conn height/.initial=0}
+\ctikzset{tripoles/nmos/height/.initial=1.1}
+\ctikzset{tripoles/nmos/base width/.initial=.5}
+\ctikzset{tripoles/nmos/gate width/.initial=.62}
+\ctikzset{tripoles/nmos/arrow pos/.initial=.6}
+\ctikzset{tripoles/nmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nmos/curr direction/.initial=1}
+
+\ctikzset{tripoles/pmos/width/.initial=.7}
+\ctikzset{tripoles/pmos/gate height/.initial=.35}
+\ctikzset{tripoles/pmos/base height/.initial=.5}
+\ctikzset{tripoles/pmos/conn height/.initial=0}
+\ctikzset{tripoles/pmos/height/.initial=1.1}
+\ctikzset{tripoles/pmos/base width/.initial=.5}
+\ctikzset{tripoles/pmos/gate width/.initial=.62}
+\ctikzset{tripoles/pmos/arrow pos/.initial=.4}
+\ctikzset{tripoles/pmos/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pmos/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pmos/curr direction/.initial=-1}
+
+\ctikzset{tripoles/hemt/width/.initial=.7}
+\ctikzset{tripoles/hemt/gate height/.initial=.35}
+\ctikzset{tripoles/hemt/base height/.initial=.5}
+\ctikzset{tripoles/hemt/conn height/.initial=0}
+\ctikzset{tripoles/hemt/height/.initial=1.1}
+\ctikzset{tripoles/hemt/base width/.initial=.5}
+\ctikzset{tripoles/hemt/gate width/.initial=.62}
+\ctikzset{tripoles/hemt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/hemt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/hemt/curr direction/.initial=1}
+
+\ctikzset{tripoles/nfet/width/.initial=.7}
+\ctikzset{tripoles/nfet/gate height/.initial=.35}
+\ctikzset{tripoles/nfet/base height/.initial=.5}
+\ctikzset{tripoles/nfet/conn height/.initial=0}
+\ctikzset{tripoles/nfet/height/.initial=1.1}
+\ctikzset{tripoles/nfet/base width/.initial=.5}
+\ctikzset{tripoles/nfet/gate width/.initial=.62}
+\ctikzset{tripoles/nfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pfet/width/.initial=.7}
+\ctikzset{tripoles/pfet/gate height/.initial=.35}
+\ctikzset{tripoles/pfet/base height/.initial=.5}
+\ctikzset{tripoles/pfet/conn height/.initial=0}
+\ctikzset{tripoles/pfet/height/.initial=1.1}
+\ctikzset{tripoles/pfet/base width/.initial=.5}
+\ctikzset{tripoles/pfet/gate width/.initial=.62}
+\ctikzset{tripoles/pfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigfete/width/.initial=.7}
+\ctikzset{tripoles/nigfete/gate height/.initial=.35}
+\ctikzset{tripoles/nigfete/base height/.initial=.5}
+\ctikzset{tripoles/nigfete/conn height/.initial=.35}
+\ctikzset{tripoles/nigfete/height/.initial=1.1}
+\ctikzset{tripoles/nigfete/base width/.initial=.5}
+\ctikzset{tripoles/nigfete/gate width/.initial=.62}
+\ctikzset{tripoles/nigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfete/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetd/width/.initial=.7}
+\ctikzset{tripoles/nigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetd/base height/.initial=.5}
+\ctikzset{tripoles/nigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetd/height/.initial=1.1}
+\ctikzset{tripoles/nigfetd/base width/.initial=.5}
+\ctikzset{tripoles/nigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetd/curr direction/.initial=1}
+
+\ctikzset{tripoles/nigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/nigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/nigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/nigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/nigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/nigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigfetebulk/curr direction/.initial=1}
+
+\ctikzset{tripoles/pigfete/width/.initial=.7}
+\ctikzset{tripoles/pigfete/gate height/.initial=.35}
+\ctikzset{tripoles/pigfete/base height/.initial=.5}
+\ctikzset{tripoles/pigfete/conn height/.initial=.35}
+\ctikzset{tripoles/pigfete/height/.initial=1.1}
+\ctikzset{tripoles/pigfete/base width/.initial=.5}
+\ctikzset{tripoles/pigfete/gate width/.initial=.62}
+\ctikzset{tripoles/pigfete/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfete/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfete/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetd/width/.initial=.7}
+\ctikzset{tripoles/pigfetd/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetd/base height/.initial=.5}
+\ctikzset{tripoles/pigfetd/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetd/height/.initial=1.1}
+\ctikzset{tripoles/pigfetd/base width/.initial=.5}
+\ctikzset{tripoles/pigfetd/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetd/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetd/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetd/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigfetebulk/width/.initial=.7}
+\ctikzset{tripoles/pigfetebulk/gate height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/conn height/.initial=.35}
+\ctikzset{tripoles/pigfetebulk/base height/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/height/.initial=1.1}
+\ctikzset{tripoles/pigfetebulk/base width/.initial=.5}
+\ctikzset{tripoles/pigfetebulk/gate width/.initial=.62}
+\ctikzset{tripoles/pigfetebulk/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigfetebulk/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigfetebulk/curr direction/.initial=-1}
+
+\ctikzset{tripoles/npn/width/.initial=.6}
+\ctikzset{tripoles/npn/base height/.initial=.45}
+\ctikzset{tripoles/npn/base height 2/.initial=.15}
+\ctikzset{tripoles/npn/base height/.initial=.4}
+\ctikzset{tripoles/npn/conn height/.initial=0}
+\ctikzset{tripoles/npn/height/.initial=1.1}
+\ctikzset{tripoles/npn/base width/.initial=.5}
+\ctikzset{tripoles/npn/arrow pos/.initial=.5}
+\ctikzset{tripoles/npn/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/npn/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/npn/curr direction/.initial=1}
+
+\ctikzset{tripoles/pnp/width/.initial=.6}
+\ctikzset{tripoles/pnp/base height/.initial=.45}
+\ctikzset{tripoles/pnp/base height 2/.initial=.15}
+\ctikzset{tripoles/pnp/base height/.initial=.4}
+\ctikzset{tripoles/pnp/conn height/.initial=0}
+\ctikzset{tripoles/pnp/height/.initial=1.1}
+\ctikzset{tripoles/pnp/base width/.initial=.5}
+\ctikzset{tripoles/pnp/arrow pos/.initial=.5}
+\ctikzset{tripoles/pnp/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pnp/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pnp/curr direction/.initial=-1}
+
+\ctikzset{tripoles/pigbt/width/.initial=.6}
+\ctikzset{tripoles/pigbt/gate height/.initial=.45}
+\ctikzset{tripoles/pigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/pigbt/base height/.initial=.4}
+\ctikzset{tripoles/pigbt/conn height/.initial=0}
+\ctikzset{tripoles/pigbt/height/.initial=1.1}
+\ctikzset{tripoles/pigbt/gate width/.initial=.62}
+\ctikzset{tripoles/pigbt/base width/.initial=.5}
+\ctikzset{tripoles/pigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/nigbt/width/.initial=.6}
+\ctikzset{tripoles/nigbt/gate height/.initial=.45}
+\ctikzset{tripoles/nigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/nigbt/base height/.initial=.4}
+\ctikzset{tripoles/nigbt/conn height/.initial=0}
+\ctikzset{tripoles/nigbt/height/.initial=1.1}
+\ctikzset{tripoles/nigbt/gate width/.initial=.62}
+\ctikzset{tripoles/nigbt/base width/.initial=.5}
+\ctikzset{tripoles/nigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/nigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/nigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/Lpigbt/width/.initial=.6}
+\ctikzset{tripoles/Lpigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lpigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lpigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lpigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lpigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lpigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lpigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lpigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lpigbt/curr direction/.initial=-1}
+
+\ctikzset{tripoles/Lnigbt/width/.initial=.6}
+\ctikzset{tripoles/Lnigbt/gate height/.initial=.45}
+\ctikzset{tripoles/Lnigbt/gate height 2/.initial=.15}
+\ctikzset{tripoles/Lnigbt/base height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/conn height/.initial=.4}
+\ctikzset{tripoles/Lnigbt/height/.initial=1.1}
+\ctikzset{tripoles/Lnigbt/gate width/.initial=.62}
+\ctikzset{tripoles/Lnigbt/base width/.initial=.5}
+\ctikzset{tripoles/Lnigbt/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/Lnigbt/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/Lnigbt/curr direction/.initial=1}
+
+\ctikzset{tripoles/njfet/width/.initial=.7}
+\ctikzset{tripoles/njfet/gate height/.initial=.5}
+\ctikzset{tripoles/njfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/njfet/gate width/.initial=.5}
+\ctikzset{tripoles/njfet/conn height/.initial=.35}
+\ctikzset{tripoles/njfet/height/.initial=1.1}
+\ctikzset{tripoles/njfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/njfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/njfet/curr direction/.initial=1}
+
+\ctikzset{tripoles/pjfet/width/.initial=.7}
+\ctikzset{tripoles/pjfet/gate height/.initial=.5}
+\ctikzset{tripoles/pjfet/gate height 2/.initial=.35}
+\ctikzset{tripoles/pjfet/gate width/.initial=.5}
+\ctikzset{tripoles/pjfet/conn height/.initial=.35}
+\ctikzset{tripoles/pjfet/height/.initial=1.1}
+\ctikzset{tripoles/pjfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/pjfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/pjfet/curr direction/.initial=-1}
+
+\ctikzset{tripoles/isfet/width/.initial=1}
+\ctikzset{tripoles/isfet/gate height/.initial=.35}
+\ctikzset{tripoles/isfet/base height/.initial=.5}
+\ctikzset{tripoles/isfet/height/.initial=1.1}
+\ctikzset{tripoles/isfet/base width/.initial=.3}
+\ctikzset{tripoles/isfet/gate width/.initial=.5}
+\ctikzset{tripoles/isfet/conn height/.initial=0}
+\ctikzset{tripoles/isfet/wave width/.initial=.16}
+\ctikzset{tripoles/isfet/wave amp/.initial=.06}
+\ctikzset{tripoles/isfet/waves y sep/.initial=.22}
+\ctikzset{tripoles/isfet/waves x sep/.initial=.8}
+\ctikzset{tripoles/isfet/bodydiode scale/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode distance/.initial=.3}
+\ctikzset{tripoles/isfet/bodydiode conn/.initial=.6}
+\ctikzset{tripoles/isfet/curr direction/.initial=1}
+
+\newif\ifpgf@circuit@europeanlogicport
+\ctikzset{logic ports/.is choice}
+\ctikzset{logic ports/european/.code= {\pgf@circuit@europeanlogicporttrue
+ \tikzset{and port/.style={shape=european and port}}
+ \tikzset{or port/.style={shape=european or port}}
+ \tikzset{xor port/.style={shape=european xor port}}
+ \tikzset{not port/.style={shape=european not port}}
+ \tikzset{nand port/.style={shape=european nand port}}
+ \tikzset{nor port/.style={shape=european nor port}}
+ \tikzset{xnor port/.style={shape=european xnor port}}
+ } }
+\ctikzset{logic ports/american/.code= {\pgf@circuit@europeanlogicportfalse
+ \tikzset{and port/.style={shape=american and port}}
+ \tikzset{or port/.style={shape=american or port}}
+ \tikzset{xor port/.style={shape=american xor port}}
+ \tikzset{not port/.style={shape=american not port}}
+ \tikzset{nand port/.style={shape=american nand port}}
+ \tikzset{nor port/.style={shape=american nor port}}
+ \tikzset{xnor port/.style={shape=american xnor port}}
+ } }
+
+\ctikzset{logic ports origin/.is choice}
+\ctikzset{logic ports origin/legacy/.code= {
+ \ctikzset{tripoles/american and port/origin/.initial=0.8}
+ \ctikzset{tripoles/american nand port/origin/.initial=0.8}
+ \ctikzset{tripoles/american nor port/origin/.initial=0.8}
+ \ctikzset{tripoles/american or port/origin/.initial=0.8}
+ \ctikzset{tripoles/american xor port/origin/.initial=0.8}
+ \ctikzset{tripoles/american xnor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european and port/origin/.initial=0.8}
+ \ctikzset{tripoles/european nand port/origin/.initial=0.8}
+ \ctikzset{tripoles/european or port/origin/.initial=0.8}
+ \ctikzset{tripoles/european nor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european xor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european xnor port/origin/.initial=0.8}
+ \ctikzset{tripoles/european not port/origin/.initial=0.8}
+ }
+}
+\ctikzset{logic ports origin/center/.code= {
+ \ctikzset{tripoles/american and port/origin/.initial=0}
+ \ctikzset{tripoles/american nand port/origin/.initial=0}
+ \ctikzset{tripoles/american nor port/origin/.initial=0}
+ \ctikzset{tripoles/american or port/origin/.initial=0}
+ \ctikzset{tripoles/american xor port/origin/.initial=0}
+ \ctikzset{tripoles/american xnor port/origin/.initial=0}
+ \ctikzset{tripoles/european and port/origin/.initial=0}
+ \ctikzset{tripoles/european nand port/origin/.initial=0}
+ \ctikzset{tripoles/european or port/origin/.initial=0}
+ \ctikzset{tripoles/european nor port/origin/.initial=0}
+ \ctikzset{tripoles/european xor port/origin/.initial=0}
+ \ctikzset{tripoles/european xnor port/origin/.initial=0}
+ \ctikzset{tripoles/european not port/origin/.initial=0}
+ }
+}
+
+
+\ctikzset{tripoles/american and port/width/.initial=1.1}
+\ctikzset{tripoles/american and port/height/.initial=.8}
+\ctikzset{tripoles/american and port/port width/.initial=.7}
+\ctikzset{tripoles/american and port/input height/.initial=.5}
+\ctikzset{tripoles/american nand port/width/.initial=1.1}
+\ctikzset{tripoles/american nand port/height/.initial=.8}
+\ctikzset{tripoles/american nand port/port width/.initial=.7}
+\ctikzset{tripoles/american nand port/circle width/.initial=.15}
+\ctikzset{tripoles/american nand port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/width/.initial=1.1}
+\ctikzset{tripoles/american or port/height/.initial=.8}
+\ctikzset{tripoles/american or port/port width/.initial=.7}
+\ctikzset{tripoles/american or port/input height/.initial=.5}
+\ctikzset{tripoles/american or port/input skip/.initial=.25}
+\ctikzset{tripoles/american or port/aaa/.initial=.6}
+\ctikzset{tripoles/american or port/bbb/.initial=.4}
+\ctikzset{tripoles/american or port/ccc/.initial=.5}
+\ctikzset{tripoles/american or port/ddd/.initial=.0}
+\ctikzset{tripoles/american nor port/width/.initial=1.1}
+\ctikzset{tripoles/american nor port/height/.initial=.8}
+\ctikzset{tripoles/american nor port/port width/.initial=.7}
+\ctikzset{tripoles/american nor port/input height/.initial=.5}
+\ctikzset{tripoles/american nor port/input skip/.initial=.25}
+\ctikzset{tripoles/american nor port/circle width/.initial=.15}
+\ctikzset{tripoles/american nor port/aaa/.initial=.6}
+\ctikzset{tripoles/american nor port/bbb/.initial=.4}
+\ctikzset{tripoles/american nor port/ccc/.initial=.5}
+\ctikzset{tripoles/american nor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xor port/width/.initial=1.1}
+\ctikzset{tripoles/american xor port/height/.initial=.8}
+\ctikzset{tripoles/american xor port/port width/.initial=.7}
+\ctikzset{tripoles/american xor port/input height/.initial=.5}
+\ctikzset{tripoles/american xor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/width/.initial=1.1}
+\ctikzset{tripoles/american xnor port/height/.initial=.8}
+\ctikzset{tripoles/american xnor port/port width/.initial=.7}
+\ctikzset{tripoles/american xnor port/input height/.initial=.5}
+\ctikzset{tripoles/american xnor port/input skip/.initial=.15}
+\ctikzset{tripoles/american xnor port/distance/.initial=.1}
+\ctikzset{tripoles/american xnor port/circle width/.initial=.15}
+\ctikzset{tripoles/american and port/origin/.initial=0.8}
+\ctikzset{tripoles/american and port/inputs/.initial=2}
+% variable number of inputs
+\ctikzset{tripoles/american nand port/origin/.initial=0.8}
+\ctikzset{tripoles/american nand port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/origin/.initial=0.8}
+\ctikzset{tripoles/american nor port/inputs/.initial=2}
+\ctikzset{tripoles/american nor port/angle/.initial=70}
+\ctikzset{tripoles/american nor port/inner/.initial=0.3}
+\ctikzset{tripoles/american or port/origin/.initial=0.8}
+\ctikzset{tripoles/american or port/inputs/.initial=2}
+\ctikzset{tripoles/american or port/angle/.initial=70}
+\ctikzset{tripoles/american or port/inner/.initial=0.3}
+\ctikzset{tripoles/american xor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xor port/inputs/.initial=2}
+\ctikzset{tripoles/american xor port/angle/.initial=70}
+\ctikzset{tripoles/american xor port/inner/.initial=0.3}
+\ctikzset{tripoles/american xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/american xnor port/inputs/.initial=2}
+\ctikzset{tripoles/american xnor port/angle/.initial=70}
+\ctikzset{tripoles/american xnor port/inner/.initial=0.3}
+
+\ctikzset{tripoles/european and port/width/.initial=1.4}
+\ctikzset{tripoles/european and port/height/.initial=.65}
+\ctikzset{tripoles/european and port/reserved/.initial=.6}
+\ctikzset{tripoles/european and port/input height/.initial=.6}
+\ctikzset{tripoles/european or port/width/.initial=1.4}
+\ctikzset{tripoles/european or port/height/.initial=.65}
+\ctikzset{tripoles/european or port/reserved/.initial=.6}
+\ctikzset{tripoles/european or port/input height/.initial=.6}
+\ctikzset{tripoles/european xor port/width/.initial=1.4}
+\ctikzset{tripoles/european xor port/height/.initial=.65}
+\ctikzset{tripoles/european xor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xor port/input height/.initial=.6}
+\ctikzset{tripoles/european nand port/width/.initial=1.4}
+\ctikzset{tripoles/european nand port/not height/.initial=.3}
+\ctikzset{tripoles/european nand port/not width/.initial=.8}
+\ctikzset{tripoles/european nand port/height/.initial=.65}
+\ctikzset{tripoles/european nand port/reserved/.initial=.6}
+\ctikzset{tripoles/european nand port/input height/.initial=.6}
+\ctikzset{tripoles/european not port/width/.initial=1.4}
+\ctikzset{tripoles/european not port/not height/.initial=.3}
+\ctikzset{tripoles/european not port/not width/.initial=.8}
+\ctikzset{tripoles/european not port/height/.initial=.65}
+\ctikzset{tripoles/european not port/reserved/.initial=.6}
+\ctikzset{tripoles/european not port/input height/.initial=0}
+\ctikzset{tripoles/european xnor port/width/.initial=1.4}
+\ctikzset{tripoles/european xnor port/not height/.initial=.3}
+\ctikzset{tripoles/european xnor port/not width/.initial=.8}
+\ctikzset{tripoles/european xnor port/height/.initial=.65}
+\ctikzset{tripoles/european xnor port/reserved/.initial=.6}
+\ctikzset{tripoles/european xnor port/input height/.initial=.6}
+\ctikzset{tripoles/european nor port/width/.initial=1.4}
+\ctikzset{tripoles/european nor port/not height/.initial=.3}
+\ctikzset{tripoles/european nor port/not width/.initial=.8}
+\ctikzset{tripoles/european nor port/height/.initial=.65}
+\ctikzset{tripoles/european nor port/reserved/.initial=.6}
+\ctikzset{tripoles/european nor port/input height/.initial=.6}
+% variable number of inputs
+\ctikzset{tripoles/european and port/origin/.initial=0.8}
+\ctikzset{tripoles/european and port/inputs/.initial=2}
+\ctikzset{tripoles/european nand port/origin/.initial=0.8}
+\ctikzset{tripoles/european nand port/inputs/.initial=2}
+\ctikzset{tripoles/european or port/origin/.initial=0.8}
+\ctikzset{tripoles/european or port/inputs/.initial=2}
+\ctikzset{tripoles/european nor port/origin/.initial=0.8}
+\ctikzset{tripoles/european nor port/inputs/.initial=2}
+\ctikzset{tripoles/european xor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xor port/inputs/.initial=2}
+\ctikzset{tripoles/european xnor port/origin/.initial=0.8}
+\ctikzset{tripoles/european xnor port/inputs/.initial=2}
+\ctikzset{tripoles/european not port/origin/.initial=0.8}
+\ctikzset{tripoles/european not port/inputs/.initial=1}%
+%%% parameters that are not used anymore after multi-input
+%%% gates --- left for compatibility of source code.
+\ctikzset{tripoles/american xor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xor port/ddd/.initial=.0}
+\ctikzset{tripoles/american xnor port/aaa/.initial=.6}
+\ctikzset{tripoles/american xnor port/bbb/.initial=.4}
+\ctikzset{tripoles/american xnor port/ccc/.initial=.5}
+\ctikzset{tripoles/american xnor port/ddd/.initial=.0}
+% switches for logic gates
+%
+\pgfkeys{/tikz/number inputs/.initial=0}
+\pgfkeys{/tikz/number inputs/.default=0}
+%
+% switches for op amps
+% changing input polarity
+%
+\newif\ifpgf@circuit@oa@iplusup\pgf@circuit@oa@iplusupfalse
+\pgfkeys{/tikz/noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}}
+\ctikzset{noinv input up/.add code={}{\pgf@circuit@oa@iplusuptrue}}
+\pgfkeys{/tikz/input noinv down/.add code={}{\pgf@circuit@oa@iplusupfalse}}
+\ctikzset{input noinv down/.add code={}{\pgf@circuit@oa@iplusupfalse}}
+%
+% changing output polarity (for fully diff objects)
+%
+\newif\ifpgf@circuit@oa@oplusup\pgf@circuit@oa@oplusuptrue
+\pgfkeys{/tikz/noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}}
+\ctikzset{noinv output up/.add code={}{\pgf@circuit@oa@oplusuptrue}}
+\pgfkeys{/tikz/noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}}
+\ctikzset{noinv output down/.add code={}{\pgf@circuit@oa@oplusupfalse}}
+%
+\ctikzset{tripoles/op amp/width/.initial=1.7}
+\ctikzset{tripoles/op amp/port width/.initial=.7}
+\ctikzset{tripoles/op amp/height/.initial=1.4}
+\ctikzset{tripoles/op amp/input height/.initial=.5}
+\ctikzset{tripoles/op amp/up pos/.initial=.45}
+\ctikzset{tripoles/op amp/font/.initial= \fontsize{10}{12}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/en amp/width/.initial=1.7}
+\ctikzset{tripoles/en amp/port width/.initial=.7}
+\ctikzset{tripoles/en amp/height/.initial=1.6}
+\ctikzset{tripoles/en amp/input height/.initial=.3}
+\ctikzset{tripoles/en amp/up pos/.initial=.45}
+\ctikzset{tripoles/en amp/font/.initial= \fontsize{10}{12}\selectfont}%absolute font size needed!
+\ctikzset{tripoles/en amp/font2/.initial= \fontsize{12}{14}\selectfont}%absolute font size needed!
+\ctikzset{tripoles/en amp/text/.initial={$\mathstrut{\triangleright}\,{\infty}$}}
+\tikzset{
+ en amp text/.code = {
+ \ctikzsetvalof{tripoles/en amp/text}{#1}
+ },
+ en amp text A/.code = {
+ \ctikzsetvalof{tripoles/en amp/text}{$\mathstrut{\triangleright}\,\mathrm{A}$}
+ },
+}
+\ctikzset{tripoles/gm amp/width/.initial=1.7}
+\ctikzset{tripoles/gm amp/port width/.initial=.7}
+\ctikzset{tripoles/gm amp/height/.initial=1.4}
+\ctikzset{tripoles/gm amp/input height/.initial=.5}
+\ctikzset{tripoles/gm amp/up pos/.initial=.45}
+\ctikzset{tripoles/inst amp/width/.initial=1.7} % instrumentation amplifier, simple
+\ctikzset{tripoles/inst amp/port width/.initial=.7}
+\ctikzset{tripoles/inst amp/height/.initial=1.4}
+\ctikzset{tripoles/inst amp/input height/.initial=.5}
+\ctikzset{tripoles/inst amp/up pos/.initial=.4}
+\ctikzset{tripoles/inst amp/refv pos/.initial=.7}
+\ctikzset{tripoles/inst amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/fd inst amp/width/.initial=1.7} % instrumentation amplifier, diff output
+\ctikzset{tripoles/fd inst amp/port width/.initial=.7}
+\ctikzset{tripoles/fd inst amp/height/.initial=1.4}
+\ctikzset{tripoles/fd inst amp/input height/.initial=.5}
+\ctikzset{tripoles/fd inst amp/up pos/.initial=.4}
+\ctikzset{tripoles/fd inst amp/refv pos/.initial=.7}
+\ctikzset{tripoles/fd inst amp/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/inst amp ra/width/.initial=2.4} % instrumentation amplifier with ra gain resistance added
+\ctikzset{tripoles/inst amp ra/port width/.initial=.7}
+\ctikzset{tripoles/inst amp ra/height/.initial=2.9}
+\ctikzset{tripoles/inst amp ra/input height/.initial=.7}
+\ctikzset{tripoles/inst amp ra/up pos/.initial=.4}
+\ctikzset{tripoles/inst amp ra/refv pos/.initial=.7}
+\ctikzset{tripoles/inst amp ra/ra pos/.initial=.6}
+\ctikzset{tripoles/inst amp ra/font/.initial= \fontsize{10}{0}\selectfont\boldmath}%absolute font size needed!
+\ctikzset{tripoles/plain amp/width/.initial=1.7}
+\ctikzset{tripoles/plain amp/port width/.initial=.7}
+\ctikzset{tripoles/plain amp/height/.initial=1.4}
+\ctikzset{tripoles/plain amp/input height/.initial=.5}
+\ctikzset{tripoles/plain amp/up pos/.initial=.45}
+
+\ctikzset{tripoles/thyristor/height/.initial=1.10}
+\ctikzset{tripoles/thyristor/height 2/.initial=.5}
+\ctikzset{tripoles/thyristor/width/.initial=1.0}
+\ctikzset{tripoles/thyristor/diode height/.initial=.5}
+\ctikzset{tripoles/thyristor/diode width left/.initial=.4}
+\ctikzset{tripoles/thyristor/diode width right/.initial=.3}
+
+\ctikzset{tripoles/triac/height/.initial=1.1}
+\ctikzset{tripoles/triac/width/.initial=1}
+\ctikzset{tripoles/triac/diode width left/.initial=.3}
+\ctikzset{tripoles/triac/diode width right/.initial=.3}
+
+%% Cute switches
+\ctikzset{bipoles/cuteswitch/shape/.initial={ocirc}}
+\ctikzset{bipoles/cuteswitch/height/.initial=.6}
+\ctikzset{bipoles/cuteswitch/height 2/.initial=.2}
+\ctikzset{bipoles/cuteswitch/width/.initial=.50}
+\ctikzset{bipoles/cuteswitch/thickness/.initial=1}
+
+\ctikzset{tripoles/spdt/width/.initial=.85}
+\ctikzset{tripoles/spdt/height/.initial=.45}
+\ctikzset{tripoles/spdt/margin/.initial=.45}
+
+\ctikzset{tripoles/toggleswitch/height/.initial=.8}
+\ctikzset{tripoles/toggleswitch/height 2/.initial=.0}
+\ctikzset{tripoles/toggleswitch/width/.initial=.80}
+
+\ctikzset{tripoles/mixer/width/.initial=0.7}
+\ctikzset{tripoles/adder/width/.initial=0.7}
+\ctikzset{tripoles/circulator/width/.initial=.7}
+\ctikzset{tripoles/oscillator/width/.initial=.7}
+
+
+\ctikzset{tripoles/wilkinson/height/.initial=1.3}
+\ctikzset{tripoles/wilkinson/width/.initial=1.3}
+
+\ctikzset{quadpoles/transformer/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer/width/.initial=1.5}
+\ctikzset{quadpoles/transformer/width1/.initial=.4}
+\ctikzset{quadpoles/transformer/height/.initial=1.5}
+\ctikzset{quadpoles/transformer/height1/.initial=.8}
+\ctikzset{quadpoles/transformer core/inner/.initial=0.4}
+\ctikzset{quadpoles/transformer core/width/.initial=1.5}
+\ctikzset{quadpoles/transformer core/height/.initial=1.5}
+\ctikzset{quadpoles/transformer core/core height/.initial=.5}
+\ctikzset{quadpoles/transformer core/core width/.initial=.05}
+\ctikzset{quadpoles/gyrator/inner/.initial=0.4}
+\ctikzset{quadpoles/gyrator/width/.initial=1.5}
+\ctikzset{quadpoles/gyrator/height/.initial=1.5}
+\ctikzset{quadpoles/fourport/width/.initial=1.3}
+\ctikzset{quadpoles/fourport/height/.initial=1.3}
+\ctikzset{quadpoles/coupler/width/.initial=1.3}
+\ctikzset{quadpoles/coupler/height/.initial=1.3}
+\ctikzset{quadpoles/coupler2/width/.initial=1.3}
+\ctikzset{quadpoles/coupler2/height/.initial=1.3}
+
+\ctikzset{/tikz/circuitikz/tripoles/magnetron/width/.initial=1}
+
+\ctikzset{quadpoles style/.is choice}
+\ctikzset{quadpoles style/inward/.code={ % default value
+ \ctikzset{quadpoles/transformer/inner=0.4}
+ \ctikzset{quadpoles/transformer/width=1.5}
+ \ctikzset{quadpoles/transformer core/inner=0.4}
+ \ctikzset{quadpoles/transformer core/width=1.5}
+ \ctikzset{quadpoles/gyrator/inner=0.4}
+ \ctikzset{quadpoles/gyrator/width=1.5}
+ }
+}
+\ctikzset{quadpoles style/inline/.code={ % now horizontal baffle
+ \ctikzset{quadpoles/transformer/inner=1}
+ \ctikzset{quadpoles/transformer/width=0.6}
+ \ctikzset{quadpoles/transformer core/inner=1}
+ \ctikzset{quadpoles/transformer core/width=0.6}
+ \ctikzset{quadpoles/gyrator/inner=1}
+ \ctikzset{quadpoles/gyrator/width=0.6}
+ }
+}
+
+
+%
+% multipoles
+%
+\ctikzset{multipoles/thickness/.initial=2}
+\ctikzset{multipoles/font/.initial=\tiny}
+% DIP (dual in line package) chips
+\ctikzset{multipoles/dipchip/width/.initial=1.2}
+\ctikzset{multipoles/dipchip/num pins/.initial=8}
+\ctikzset{multipoles/dipchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/dipchip/num pins=#1}}}
+% QFP (quad flat package) chips
+\ctikzset{multipoles/qfpchip/num pins/.initial=8}
+\ctikzset{multipoles/qfpchip/pin spacing/.initial=0.4}
+\pgfkeys{/tikz/num pins/.add code={}{\ctikzset{multipoles/qfpchip/num pins=#1}}}
+% chip numbers
+\newif\ifpgf@circuit@chip@shownumbers\pgf@circuit@chip@shownumberstrue
+\pgfkeys{/tikz/show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}}
+\ctikzset{show numbers/.add code={}{\pgf@circuit@chip@shownumberstrue}}
+\pgfkeys{/tikz/hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}}
+\ctikzset{hide numbers/.add code={}{\pgf@circuit@chip@shownumbersfalse}}
+\newif\ifpgf@circuit@chip@straightnumbers\pgf@circuit@chip@straightnumberstrue
+\pgfkeys{/tikz/straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}}
+\ctikzset{straight numbers/.add code={}{\pgf@circuit@chip@straightnumberstrue}}
+\pgfkeys{/tikz/rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}}
+\ctikzset{rotated numbers/.add code={}{\pgf@circuit@chip@straightnumbersfalse}}
+% external chip pins
+\ctikzset{multipoles/external pins thickness/.initial=1}
+\ctikzset{multipoles/external pins width/.initial=0.2}
+\ctikzset{multipoles/external pad fraction/.initial=0}
+\pgfkeys{/tikz/external pins width/.add code={}{\ctikzset{multipoles/external pins width=#1}}}
+\pgfkeys{/tikz/external pad fraction/.add code={}{\ctikzset{multipoles/external pad fraction=#1}}}
+% topmarks
+\newif\ifpgf@circuit@chip@topmark\pgf@circuit@chip@topmarktrue
+\pgfkeys{/tikz/topmark/.add code={}{\pgf@circuit@chip@topmarktrue}}
+\ctikzset{topmark/.add code={}{\pgf@circuit@chip@topmarktrue}}
+\pgfkeys{/tikz/no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}}
+\ctikzset{no topmark/.add code={}{\pgf@circuit@chip@topmarkfalse}}
+
+% rotary switch by Romano
+\ctikzset{multipoles/rotary/thickness/.initial=1}
+\ctikzset{multipoles/rotary/shape/.initial=ocirc}
+\ctikzset{multipoles/rotary/channels/.initial=5}
+\ctikzset{multipoles/rotary/angle/.initial=60}
+\ctikzset{multipoles/rotary/wiper/.initial=20}
+\ctikzset{multipoles/rotary/arrow/.is choice}
+\newif\ifpgf@circ@rotaryarrow\pgf@circ@rotaryarrowfalse
+\newif\ifpgf@circ@rotaryarrow@cw\pgf@circ@rotaryarrow@cwfalse
+\newif\ifpgf@circ@rotaryarrow@ccw\pgf@circ@rotaryarrow@ccwfalse
+\ctikzset{multipoles/rotary/arrow/none/.code={\pgf@circ@rotaryarrowfalse\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/both/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwtrue}}
+\ctikzset{multipoles/rotary/arrow/cw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwtrue\pgf@circ@rotaryarrow@ccwfalse}}
+\ctikzset{multipoles/rotary/arrow/ccw/.code={\pgf@circ@rotaryarrowtrue\pgf@circ@rotaryarrow@cwfalse\pgf@circ@rotaryarrow@ccwtrue}}
+
+\tikzset{%
+ rotary switch/.style args={#1in#2wiper#3}{
+ shape=rotaryswitch,
+ /tikz/circuitikz/multipoles/rotary/channels=#1,
+ /tikz/circuitikz/multipoles/rotary/angle=#2,
+ /tikz/circuitikz/multipoles/rotary/wiper=#3,
+ },
+ rotary switch -/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=none,
+ },
+ rotary switch <-/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=ccw,
+ },
+ rotary switch ->/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=cw,
+ },
+ rotary switch <->/.style args={#1in#2wiper#3}{
+ rotary switch=#1 in #2 wiper #3,
+ /tikz/circuitikz/multipoles/rotary/arrow=both,
+ },
+ % Notice that these should be the same as the initial values of the keys
+ rotary switch/.default={5 in 60 wiper 20 },
+ rotary switch -/.default={5 in 60 wiper 20 },
+ rotary switch <-/.default={5 in 60 wiper 20 },
+ rotary switch ->/.default={5 in 60 wiper 20 },
+ rotary switch <->/.default={5 in 60 wiper 20 },
+}
+
+% %Mechanical section
+\ctikzset{/tikz/circuitikz/tripoles/elmech/height/.initial=.8}
+\ctikzset{/tikz/circuitikz/tripoles/elmech/width/.initial=.6}
+\ctikzset{bipoles/spring/height/.initial=.5}
+\ctikzset{bipoles/spring/width/.initial=.5}
+\ctikzset{bipoles/mass/height/.initial=.55}
+\ctikzset{bipoles/mass/box height/.initial=.4}
+\ctikzset{bipoles/mass/width/.initial=.5}
+
+\ctikzset{bipoles/damper/height/.initial=.35}
+\ctikzset{bipoles/damper/length/.initial=.3}
+\ctikzset{bipoles/damper/width/.initial=.4}
+
+
+\ctikzset{bipole/.is family}
+\ctikzset{bipole/kind/.initial = }
+\ctikzset{bipole/name/.initial = }
+\newif\ifpgf@circuit@bipole@isvoltage
+\ctikzset{bipole/is voltage/.is if=pgf@circuit@bipole@isvoltage}
+\newif\ifpgf@circuit@bipole@voltageoutsideofsymbol
+\ctikzset{bipole/is voltageoutsideofsymbol/.is if=pgf@circuit@bipole@voltageoutsideofsymbol}
+\newif\ifpgf@circuit@bipole@strokedsymbol
+\ctikzset{bipole/is strokedsymbol/.is if=pgf@circuit@bipole@strokedsymbol}
+\newif\ifpgf@circuit@bipole@iscurrent
+\ctikzset{bipole/is current/.is if=pgf@circuit@bipole@iscurrent}
+
+\ctikzset{bipole/voltage/.is family}
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+\newif\ifpgf@circuit@bipole@voltage@below
+\ctikzset{bipole/voltage/position/.is choice}
+\ctikzset{bipole/voltage/position/above/.code={\pgf@circuit@bipole@voltage@belowfalse}}
+\ctikzset{bipole/voltage/position/below/.code={\pgf@circuit@bipole@voltage@belowtrue}}
+
+\ctikzset{bipole/voltage/label/unit/.initial=}
+\ctikzset{bipole/voltage/label/name/.initial=}
+
+\ctikzset{bipole/current/.is family}
+\newif\ifpgf@circuit@bipole@current@backward
+\ctikzset{bipole/current/direction/.is choice}
+\ctikzset{bipole/current/direction/forward/.code={\pgf@circuit@bipole@current@backwardfalse}}
+\ctikzset{bipole/current/direction/backward/.code={\pgf@circuit@bipole@current@backwardtrue}}
+\newif\ifpgf@circuit@bipole@current@before
+\ctikzset{bipole/current/x position/.is choice}
+\ctikzset{bipole/current/x position/after/.code={\pgf@circuit@bipole@current@beforefalse}}
+\ctikzset{bipole/current/x position/before/.code={\pgf@circuit@bipole@current@beforetrue}}
+\newif\ifpgf@circuit@bipole@current@below
+\ctikzset{bipole/current/y position/.is choice}
+\ctikzset{bipole/current/y position/above/.code={\pgf@circuit@bipole@current@belowfalse}}
+\ctikzset{bipole/current/y position/below/.code={\pgf@circuit@bipole@current@belowtrue}}
+\ctikzset{bipole/current/label/unit/.initial=}
+\ctikzset{bipole/current/label/name/.initial=}
+
+\ctikzset{bipole/flow/.is family}
+\newif\ifpgf@circuit@bipole@flow@backward
+\ctikzset{bipole/flow/direction/.is choice}
+\ctikzset{bipole/flow/direction/forward/.code={\pgf@circuit@bipole@flow@backwardfalse}}
+\ctikzset{bipole/flow/direction/backward/.code={\pgf@circuit@bipole@flow@backwardtrue}}
+\newif\ifpgf@circuit@bipole@flow@before
+\ctikzset{bipole/flow/x position/.is choice}
+\ctikzset{bipole/flow/x position/after/.code={\pgf@circuit@bipole@flow@beforefalse}}
+\ctikzset{bipole/flow/x position/before/.code={\pgf@circuit@bipole@flow@beforetrue}}
+\newif\ifpgf@circuit@bipole@flow@below
+\ctikzset{bipole/flow/y position/.is choice}
+\ctikzset{bipole/flow/y position/above/.code={\pgf@circuit@bipole@flow@belowfalse}}
+\ctikzset{bipole/flow/y position/below/.code={\pgf@circuit@bipole@flow@belowtrue}}
+\ctikzset{bipole/flow/label/unit/.initial=}
+\ctikzset{bipole/flow/label/name/.initial=}
+\ctikzset{flow/distance/.initial = .5}
+\ctikzset{flow/offset/.initial = .2}%distance between flow-arrow and conductor
+
+\ctikzset{bipole/label/.is family}
+\ctikzset{bipole/label/position/.initial=90}
+\ctikzset{bipole/label/unit/.initial=}
+\ctikzset{bipole/label/name/.initial=}
+\ctikzset{bipole/annotation/.is family}
+\ctikzset{bipole/annotation/position/.initial=-90}
+\ctikzset{bipole/annotation/unit/.initial=}
+\ctikzset{bipole/annotation/name/.initial=}
+
+\newif\ifpgf@circuit@europeanresistor
+\ctikzset{resistor/.is choice}
+\ctikzset{resistor/american/.code = \pgf@circuit@europeanresistorfalse }
+\ctikzset{resistor/european/.code = \pgf@circuit@europeanresistortrue }
+
+\ctikzset{inductor/.is choice}
+\ctikzset{inductor/cute/.code={\ctikzsetvalof{inductor}{cute}}}
+\ctikzset{inductor/european/.code={\ctikzsetvalof{inductor}{european}}}
+\ctikzset{inductor/american/.code={\ctikzsetvalof{inductor}{american}}}
+
+\newif\ifpgf@circuit@strokediode
+\newif\ifpgf@circuit@fulldiode
+\pgf@circuit@strokediodefalse
+\pgf@circuit@fulldiodefalse
+
+\ctikzset{diode/.is choice}
+\ctikzset{diode/empty/.code = \pgf@circuit@fulldiodefalse\pgf@circuit@strokediodefalse}%default
+\ctikzset{diode/full/.code = \pgf@circuit@fulldiodetrue }
+\ctikzset{diode/stroke/.code = \pgf@circuit@strokediodetrue}
+
+\tikzset{full diodes/.style = { \circuitikzbasekey/diode = full }}
+\tikzset{empty diodes/.style = { \circuitikzbasekey/diode = empty }}
+\tikzset{stroke diodes/.style = { \circuitikzbasekey/diode = stroke }}
+
+\ctikzset{thickness/.initial=2}
+\ctikzset{color/.initial=black}
+\pgfkeys{/tikz/color/.add code={}{\ctikzset{color={#1}}}}
+
+\newif\ifpgf@circ@siunitx
+\newif\ifpgf@circ@siunitx@res
+
+\ctikzset{straight/.is choice}
+\ctikzset{straightvoltage value/.initial=true}
+\ctikzset{straight/true/.code = {\pgf@circuit@bipole@voltage@straighttrue}}
+\ctikzset{straight/false/.code = {\pgf@circuit@bipole@voltage@straightfalse}}
+\ctikzset{straightvoltage/.style = {/tikz/circuitikz/straight=true}}
+\newif\ifpgf@circuit@bipole@voltage@straight
+\ctikzset{bipole/straight/.is if=pgf@circuit@bipole@voltage@straight}
+
+
+\ctikzset{voltage/.is family}
+\ctikzset{voltage/distance from node/.initial=.5} %\pgf@circ@Rlen units
+\ctikzset{voltage/distance from line/.initial=.08} % pos, tra 0 e 1
+\ctikzset{voltage/bump a/.initial=1.2}
+\ctikzset{voltage/bump b/.initial=1.5}
+\ctikzset{voltage/shift/.initial=0.0} % shift form the cable of voltage symbols
+\ctikzset{voltage shift/.style={voltage/shift=#1}}
+\tikzset{voltage shift/.style={\circuitikzbasekey/voltage/shift=#1}}
+\ctikzset{voltage/european label distance/.initial=1.4}
+\ctikzset{voltage/american label distance/.initial=1.1}
+% shaping the +/- sign, see pgfcircvoltage.tex
+\ctikzset{voltage/american font/.initial={}}
+\ctikzset{voltage/american plus/.initial={$+$}}
+\ctikzset{voltage/american minus/.initial={$-$}}
+
+% special cases
+\ctikzset{bipoles/generic/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/generic/voltage/bump b/.initial=2}
+\ctikzset{bipoles/generic/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermocouple/voltage/distance from node/.initial=.3}
+\ctikzset{bipoles/thermocouple/voltage/bump b/.initial=2.2}
+\ctikzset{bipoles/thermocouple/voltage/european label distance/.initial=1.5}
+\ctikzset{bipoles/ageneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/ageneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/ageneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/fullgeneric/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/fullgeneric/voltage/bump b/.initial=2}
+\ctikzset{bipoles/fullgeneric/voltage/european label distance/.initial=1.8}
+\ctikzset{bipoles/memristor/voltage/distance from node/.initial=.4}
+\ctikzset{bipoles/memristor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/memristor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/tline/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/tline/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/tline/voltage/european label distance/.initial=2.1}
+%\ctikzset{bipoles/varistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/varistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/varistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/photoresistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/photoresistor/voltage/bump b/.initial=2}
+\ctikzset{bipoles/photoresistor/voltage/european label distance/.initial=1.8}
+%\ctikzset{bipoles/thermistor/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistor/voltage/bump b/.initial=2.4}
+\ctikzset{bipoles/thermistor/voltage/european label distance/.initial=2}
+%\ctikzset{bipoles/thermistorntc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorntc/voltage/bump b/.initial=1.6}
+%\ctikzset{bipoles/thermistorptc/voltage/distance from node/.initial=.2}
+\ctikzset{bipoles/thermistorptc/voltage/bump b/.initial=1.6}
+
+\ctikzset{current/.is family}
+\ctikzset{current/distance/.initial = .5}
+
+
+\tikzset{american currents/.style = { \circuitikzbasekey/current = american } }
+\tikzset{european currents/.style = { \circuitikzbasekey/current = european } }
+\tikzset{american voltages/.style = { \circuitikzbasekey/voltage = american } }
+\tikzset{european voltages/.style = { \circuitikzbasekey/voltage = european } }
+\tikzset{american resistors/.style = { \circuitikzbasekey/resistor = american } }
+\tikzset{european resistors/.style = { \circuitikzbasekey/resistor = european } }
+
+\newif\ifpgf@circuit@europeangfsurgearrester
+\ctikzset{gas filled surge arrester choice/.is choice}
+\ctikzset{gas filled surge arrester choice/european/.code= {\pgf@circuit@europeangfsurgearrestertrue } }
+\ctikzset{gas filled surge arrester choice/american/.code= {\pgf@circuit@europeangfsurgearresterfalse } }
+
+\tikzset{american gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=american } }
+\tikzset{european gas filled surge arrester set/.style = { \circuitikzbasekey/gas filled surge arrester choice=european } }
+\tikzset{american inductors/.style = { \circuitikzbasekey/inductor = american } }
+\tikzset{european inductors/.style = { \circuitikzbasekey/inductor = european } }
+\tikzset{cute inductors/.style = { \circuitikzbasekey/inductor = cute } }
+\tikzset{american ports/.style = { \circuitikzbasekey/logic ports = american } }
+\tikzset{european ports/.style = { \circuitikzbasekey/logic ports = european } }
+\tikzset{european/.style = { european currents, european voltages, european resistors, european inductors, european ports, european gas filled surge arrester set} }
+\tikzset{american/.style = { american currents, american voltages, american resistors, american inductors, american ports, american gas filled surge arrester set} }
+\tikzset{cute/.style = { european currents, european voltages, american resistors, cute inductors, american ports } }
+
+% I should try to make the tree clearer (this voltage conflicts with the options above)
+
+\newif\ifpgf@circuit@europeanvoltage
+\ctikzset{voltage/.is choice}
+\ctikzset{voltage/american/.code = {\pgf@circuit@europeanvoltagefalse } }
+\ctikzset{voltage/european/.code = {\pgf@circuit@europeanvoltagetrue } }
+
+\newif\ifpgf@circuit@europeancurrent
+\ctikzset{current/.is choice}
+\ctikzset{current/american/.code = \pgf@circuit@europeancurrentfalse }
+\ctikzset{current/european/.code = \pgf@circuit@europeancurrenttrue }
+
+% noise sources
+\ctikzset{bipoles/noise sources/fillcolor/.initial=gray!50}
+
+\ctikzset{label/align/.is choice}
+\ctikzset{label/align/straight/.code={\ctikzsetvalof{label/align}{straight}}}
+\ctikzset{label/align/rotate/.code={\ctikzsetvalof{label/align}{rotate}}}
+\ctikzset{label/align/smart/.code={\ctikzsetvalof{label/align}{smart}}}
+
+% seven segment displays by RGtti
+
+\newif\ifpgf@circ@sevenseg@dot
+\newif\ifpgf@circ@sevenseg@box
+\def\pgf@circ@sevenseg@dotstate{empty}
+\ctikzset{seven seg/.is family}
+\ctikzset{seven seg/dot/.is choice}
+% none means no dot, not space for it. Empty means no dot, but space
+\ctikzset{seven seg/dot/none/.code={\pgf@circ@sevenseg@dotfalse}}
+\ctikzset{seven seg/dot/empty/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{empty}}}
+\ctikzset{seven seg/dot/off/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{off}}}
+\ctikzset{seven seg/dot/on/.code={\pgf@circ@sevenseg@dottrue\def\pgf@circ@sevenseg@dotstate{on}}}
+%
+\ctikzset{seven seg/width/.initial=0.4}% relative to \pgf@circ@Rlen
+\ctikzset{seven seg/thickness/.initial=4pt}% segment thickness
+\ctikzset{seven seg/segment sep/.initial=0.2pt}% gap between segments
+\ctikzset{seven seg/box sep/.initial=1pt}% external box gap
+\ctikzset{seven seg/color on/.initial=red}% color for segment "on"
+\ctikzset{seven seg/color off/.initial=gray!20!white} % ...and "off"
+\ctikzset{seven seg/box/.is choice}
+\ctikzset{seven seg/box/off/.code={\pgf@circ@sevenseg@boxfalse}}
+\ctikzset{seven seg/box/on/.code={\pgf@circ@sevenseg@boxtrue}}
+
+\ctikzset{seven seg/bits/.initial=0000000}
+
+\ctikzset{seven seg/value/.code={
+ \edef\@@tmp{#1}
+ \edef\@@n{0} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111110}\fi
+ \edef\@@n{1} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110000}\fi
+ \edef\@@n{2} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1101101}\fi
+ \edef\@@n{3} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111001}\fi
+ \edef\@@n{4} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0110011}\fi
+ \edef\@@n{5} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011011}\fi
+ \edef\@@n{6} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1011111}\fi
+ \edef\@@n{7} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110000}\fi
+ \edef\@@n{8} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111111}\fi
+ \edef\@@n{9} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1111011}\fi
+ \edef\@@n{10}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{11}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{12}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{13}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{14}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{15}\ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{A} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{B} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{C} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{D} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{E} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{F} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{a} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1110111}\fi
+ \edef\@@n{b} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0011111}\fi
+ \edef\@@n{c} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001110}\fi
+ \edef\@@n{d} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0111101}\fi
+ \edef\@@n{e} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1001111}\fi
+ \edef\@@n{f} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=1000111}\fi
+ \edef\@@n{-} \ifx\@@tmp\@@n\relax\ctikzset{seven seg/bits=0000001}\fi
+}}
+
+\tikzset{%
+ seven segment val/.style args={#1dot#2box#3}{
+ shape=bare7seg,
+ /tikz/circuitikz/seven seg/value=#1,
+ /tikz/circuitikz/seven seg/dot=#2,
+ /tikz/circuitikz/seven seg/box=#3,
+ },
+ seven segment bits/.style args={#1dot#2box#3}{
+ shape=bare7seg,
+ /tikz/circuitikz/seven seg/bits=#1,
+ /tikz/circuitikz/seven seg/dot=#2,
+ /tikz/circuitikz/seven seg/box=#3,
+ },
+}
+
+
+%%%%%%%%%% new
+\pgfkeys{\circuitikzbasekey/.search also={/tikz}}
+
+% Electronic tubes: diodetube, triode, tetrode and pentode
+\ctikzset{tubes/width/.initial=1} % relative width
+\ctikzset{tubes/height/.initial=1.4} % relative height
+\ctikzset{tubes/tube radius/.initial=0.40} % radius of tube circle
+\ctikzset{tubes/anode distance/.initial=0.40} % distance from center
+\ctikzset{tubes/anode width/.initial=0.40} % width of an anode/plate
+\ctikzset{tubes/grid protrusion/.initial=0.25} % distance from center
+\ctikzset{tubes/grid dashes/.initial=5} % number of grid dashes
+\ctikzset{tubes/grid separation/.initial=0.2} % separation between grids
+\ctikzset{tubes/grid shift/.initial=0.0} % y shift grids from center
+\ctikzset{tubes/cathode distance/.initial=0.40} % distance from grid
+\ctikzset{tubes/cathode width/.initial=0.40} % width of an cathode
+\ctikzset{tubes/cathode corners/.initial=0.06} % corners of the cathode wire
+\ctikzset{tubes/cathode right extend/.initial=0.075} % extension at the right side
+\ctikzset{tubes/filament distance/.initial=0.1} % distance from cathode
+\ctikzset{tubes/filament angle/.initial=15} % Angle from centerpoint
+
+\newif\ifpgf@circuit@tubes@filament\pgf@circuit@tubes@filamentfalse
+\pgfkeys{/tikz/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}}
+\ctikzset{tubes/filament/.add code={}{\pgf@circuit@tubes@filamenttrue}}
+\newif\ifpgf@circuit@tubes@nocathode\pgf@circuit@tubes@nocathodefalse
+\pgfkeys{/tikz/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}}
+\ctikzset{tubes/nocathode/.add code={}{\pgf@circuit@tubes@nocathodetrue}}
+\newif\ifpgf@circuit@tubes@fullcathode\pgf@circuit@tubes@fullcathodefalse
+\pgfkeys{/tikz/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}}
+\ctikzset{tubes/fullcathode/.add code={}{\pgf@circuit@tubes@fullcathodetrue}}
+
+%%%---------- close: tex/pgfcirc.defines
+%%%%%%%%%%% Springe nach tex/pgfcircutils
+%%%---------- open: tex/pgfcircutils.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%\def\pgf@circ@handleSI#1{%
+ % \pgf@circ@siunitx@resfalse
+%
+ % \edef\len{\stringlength[e]{#1}}
+ %\testmatchingchar[e]{#1}{\len}{>}%
+ %\ifmatchingchar%
+ % \ifnum\findchars{#1}{<}=0
+ % \def\pgf@circ@handleSI@val{\substring{#1}{1}{\findchars{#1}{<}-1}}
+ %\def\pgf@circ@handleSI@unit{\substring{#1}{\findchars{#1}{<}-1}+1}{\stringlength{#1}}
+ %\pgf@circ@siunitx@restrue
+% \else
+% \fi
+ %\else
+ %\fi
+%}
+
+\def\pgf@circ@handleSI#1{
+ \noexpandarg
+ \def\pgf@temp{}
+ \StrBetween{#1}{<}{>}[\pgf@circ@handleSI@unit]
+ \StrLen{\pgf@circ@handleSI@unit}[\pgf@circ@handleSI@unit@len]
+
+ \ifnum\pgf@circ@handleSI@unit@len=0
+ \pgf@circ@siunitx@resfalse
+ \else
+ \IfEndWith{#1}{>}{
+ \pgf@circ@siunitx@restrue
+ \noexpandarg
+ \StrBefore{#1}{<}[\pgf@circ@handleSI@val]
+ %\typeout{si |#1|}
+ }{
+ \pgf@circ@siunitx@resfalse
+ %\typeout{no si |#1|}
+ }
+\fi
+}
+
+\def\pgf@circ@ifkeyempty#1{
+ \pgfextra{
+ \ctikzset{#1/.get=\pgf@circ@temp}
+ \edef\pgf@temp{}
+ }
+ \ifx\pgf@circ@temp\pgf@temp
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Math routines
+
+\def\pgf@circ@stripdecimals#1.#2\pgf@nil{#1}
+
+%%%---------- close: tex/pgfcircutils
+
+%%%%%%%%%%% Springe nach tex/pgfcircshapes
+%%%---------- open: tex/pgfcircshapes.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Other shapes
+
+%% Nothing
+
+\pgfdeclareshape{emptyshape}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+}
+
+%% Full terminal
+
+\pgfdeclareshape{circ}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Empty terminal
+
+\pgfdeclareshape{ocirc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgfpathcircle{\pgfpointorigin}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+
+ }
+}
+
+%% Diamond terminal
+
+\pgfdeclareshape{diamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)}
+ \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)}
+ \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)}
+ \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)}
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up}
+ % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+ \pgfpointintersectionoflines
+ {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}}
+ % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgf@x=\@@switchx\pgf@x
+ \pgf@y=\@@switchy\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% Diamond terminal, unfilled
+
+\pgfdeclareshape{odiamondpole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{sqrt(2)*\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ % \typeout{IN\space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgfmathsetmacro{\@@switchx}{ifthenelse(\pgf@x>0,1,-1)}
+ \pgfmathsetmacro{\@@switchy}{ifthenelse(\pgf@y>0,1,-1)}
+ \pgfmathsetlength{\pgf@xa}{abs(\pgf@x)}
+ \pgfmathsetlength{\pgf@ya}{abs(\pgf@y)}
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ % \typeout{MID\space X:\the\pgf@xa\space Y:\the\pgf@ya\space L:\the\pgf@circ@res@up}
+ % \typeout{MID\space SX:\@@switchx\space SY:\@@switchy}
+ \pgfpointintersectionoflines
+ {\pgfpointorigin}{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{0pt}{\pgf@circ@res@up}}{\pgfqpoint{\pgf@circ@res@up}{0pt}}
+ % \typeout{CROSS \space X:\the\pgf@x\space Y:\the\pgf@y}
+ \pgf@x=\@@switchx\pgf@x
+ \pgf@y=\@@switchy\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgftransformrotate{45}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+%% square terminal, filled
+
+\pgfdeclareshape{squarepole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpointborderrectangle
+ {\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}}
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+%% square terminal, unfilled
+
+\pgfdeclareshape{osquarepole}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchorborder{
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpointborderrectangle
+ {\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ {\pgfqpoint{\pgf@circ@res@up}{\pgfqpoint{\pgf@circ@res@up}}}
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfmathsetlength{\pgf@circ@res@temp}{\ctikzvalof{nodes width}*\pgf@circ@Rlen}
+ \pgfpathrectanglecorners
+ {\pgfpoint{-\pgf@circ@res@temp}{-\pgf@circ@res@temp}}
+ {\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@temp}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfsetfillopacity{1.0}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+% BNC connector
+
+\pgfdeclareshape{bnc}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ % BNC size is 2.5 times the size of the internal "ocirc"
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@y=2.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ % center is on the opening
+ \anchor{center}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{zero}{ \pgfpointorigin }
+ \anchor{hot}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{shield}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ % geo-anchors
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{right}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{left}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ \pgfpointborderellipse{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}
+ }{\pgfpoint{2.5*\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}{2.5*\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}}
+ }
+ \behindforegroundpath{
+ \pgfextracty{\pgf@circ@res@other}{\northwest}
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgflinewidth}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % external circle
+ \pgfscope
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{-2\pgf@circ@res@other}{-2\pgf@circ@res@other}}
+ {\pgfpoint{2\pgf@circ@res@other}{2\pgf@circ@res@other}}
+ % next the opening to the right
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ {\pgfpoint{2\pgf@circ@res@other}{\pgf@circ@res@step}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@other}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal circle
+ \pgfpathcircle{\pgfpointorigin}{\pgf@circ@res@step}
+ \pgf@circ@draworfill
+ % and the contact line to the right
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+%% Fill for correct rectangular joins
+
+\pgfdeclareshape{rectjoinfill}{
+ \savedanchor{\northeast}{%
+ \pgf@x=.5\pgflinewidth%
+ \pgf@y=.5\pgflinewidth%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchorborder{
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@up=\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgfpathrectanglecorners
+ {\pgfpoint{0}{.5\pgflinewidth}}
+ {\pgfpoint{0}{-.5\pgflinewidth}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ }
+}
+
+
+%% Current arrow
+
+\pgfdeclareshape{currarrow}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=\pgf@x%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+
+ \pgfpathmoveto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw,fill}
+
+ \endpgfscope
+ }
+}
+
+%% Flow arrow
+
+\pgfdeclareshape{flowarrow}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@y=.5\pgf@circ@res@step
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgf@x=\pgf@circ@res@step%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{tip}{
+ \pgfpointorigin
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@x =\pgf@circ@res@step
+ }
+ \behindforegroundpath{
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 4
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{draw}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfnode{currarrow}{tip}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+ }
+}
+
+%% Input arrow
+
+\pgfdeclareshape{inputarrow}{
+ \savedanchor{\northeast}{% this is really not northeast, really -northwest
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by \pgfkeysvalueof{/tikz/circuitikz/current arrow scale}
+ \pgf@y=.5\pgf@circ@res@step
+ \pgf@x=1.7\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax\pgf@x=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast\pgf@x=0cm\relax}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@x=0cm\relax}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \savedanchor{\tip}{
+ \pgfpointorigin
+ }
+ \anchor{center}{
+ \tip
+ }
+ \anchor{tip}{
+ \tip
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 16
+
+ \pgfpathmoveto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-1.7\pgf@circ@res@step}{0pt}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfusepath{fill}
+
+ \endpgfscope
+ }
+}
+
+
+%% box
+
+\pgfdeclareshape{box}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \behindforegroundpath{
+
+ \pgfscope
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = 0.5\pgf@circ@res@step
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@step}}{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+
+}
+
+
+% full nodes for wire crossing
+
+\pgfdeclareshape{jump crossing}
+{
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \behindbackgroundpath{
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % horizontal jumper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % vertical, broken path
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+\pgfdeclareshape{plain crossing}
+{
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{bipoles/crossing/size}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@y
+ }
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{e}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{w}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{s}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{n}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \behindbackgroundpath{
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % horizontal jumper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % vertical, broken path
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.1\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.1\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+%%%---------- close: tex/pgfcircshapes
+%%%%%%%%%%% Springe nach tex/pgfcircmonopoles
+%%%---------- open: tex/pgfcircmonopoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Monopoles
+
+%% Ground symbol
+% #1 -> name
+% #2 -> width
+% #3 -> depth
+% #4 -> code
+\long\def\pgf@circ@declareground#1#2#3#4{
+ \pgfdeclareshape{#1}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+ \pgf@x=#2\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+ \pgf@y=-#3\pgf@y
+ }
+ \anchor{north}{\pgfpointorigin}
+ \anchor{north east}{\southeast\pgf@y=0pt\relax}
+ \anchor{east}{\southeast\pgf@y=.5\pgf@y}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\southeast\pgf@y=.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{north west}{\southeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/ground/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ #4
+ \endpgfscope
+ }
+ }
+}
+
+
+\pgf@circ@declareground{ground}{0.6}{1.6}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{tlground}{0.6}{0.4}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-0.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-0.4\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+
+\pgf@circ@declareground{rground}{0.6}{1}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\ctikzvalof{monopoles/rground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+\pgf@circ@declareground{tground}{0.6}{0}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{sground}{0.6}{1.8}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.8\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+}
+
+% noiseless ground
+\pgf@circ@declareground{nground}{0.9}{1.6}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.9\pgf@circ@res@step}{-1.6\pgf@circ@res@step}}
+ \pgfpatharc{0}{180}{0.9\pgf@circ@res@step}
+ \pgfusepath{draw}
+}
+
+% protective ground
+\pgf@circ@declareground{pground}{0.9}{1.8}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1.2\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1.4\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathcircle{\pgfpoint{0pt}{-0.9\pgf@circ@res@step}}{0.9\pgf@circ@res@step}
+ \pgfusepath{draw}
+}
+
+% chassis ground
+\pgf@circ@declareground{cground}{1}{2}{
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/connectionthickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{monopoles/ground/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.00\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{ 0.75\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{ 0.50\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{ 0.00\pgf@circ@res@step}{-1.50\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-0.25\pgf@circ@res@step}{-2.10\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Contributed by @fotesan https://github.com/fotesan
+
+\pgf@circ@declareground{eground}{1.1}{1.7}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.6\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.6\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.1\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+\pgf@circ@declareground{eground2}{1.1}{1.7}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/monopoles/tground/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@step}{-\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-1.1\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{-.45\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@step}{-1.7\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Contributed by Leonardo Azzinnari
+\pgfdeclareshape{tlinestub}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgf@x=1.625\pgf@circ@res@step
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+ \pgf@y=.25\pgf@circ@res@step%
+ }
+ % the center is on the left side of the shape for facility of usage
+ \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0.5\pgf@x\relax}
+ \anchor{west}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=0cm\relax}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast\pgf@x=0cm\pgf@y=-\pgf@y}
+ \anchor{center}{\pgfpointorigin}
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgf@circ@res@step=\ctikzvalof{bipoles/tline/width} \pgf@circ@Rlen
+
+ \pgfscope\begin{pgftransparencygroup}
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgf@circ@maybefill
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{1.5\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfpatharc{90}{-90}{0.125\pgf@circ@res@step and 0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-0.25\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \pgfpathellipse{\pgfpoint{0.5\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0.125\pgf@circ@res@step}{0\pgf@circ@res@step}}{\pgfpoint{0\pgf@circ@res@step}{0.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \end{pgftransparencygroup} \endpgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+ }
+}
+
+%% New antennas without tails
+
+% main body
+\def\pgf@circ@antennabody{%
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfsetbeveljoin
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+% Waves for the antennas.
+\def\pgf@circ@antennawaves{%
+ \pgfscope
+ % define a triangle for clipping the waves
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4.2\pgf@circ@res@step}{-1\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{clip}
+ % ...and build the waves as clipped circles
+ \pgf@circ@count@a=8\pgf@circ@res@other=0.5\pgf@circ@res@step
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>2
+ \pgfpathcircle{\pgfpoint{0pt}{\pgf@circ@res@step}}{\the\pgf@circ@count@a*\pgf@circ@res@other}
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% additional shape with the waves
+\pgfdeclareshape{waves}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0pt}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt}
+ \anchor{bottom}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{north east}{\northeast}
+ \anchor{east}{\northeast\pgf@y=0pt}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0pt}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/waves/width}\pgf@circ@Rlen
+ \pgf@circ@res@step=0.5\pgf@circ@res@step
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfscope
+ % define a triangle for clipping the waves
+ \pgfpathmoveto{\pgfpoint{-2\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{2\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2.1\pgf@circ@res@step}{-2\pgf@circ@res@step}}
+ \pgfpathclose
+ \pgfusepath{clip}
+ % ...and build the waves as clipped circles
+ \c@pgf@counta=8\pgf@circ@res@other=0.5\pgf@circ@res@step
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>1
+ \pgfpathcircle{\pgfpoint{-2\pgf@circ@res@step}{0pt}}{\the\c@pgf@counta*\pgf@circ@res@other}
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% the three types of antennas: simple, TX, RX. Notice that you can flip them...
+
+\pgfdeclareshape{bareantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ }
+}
+
+\pgfdeclareshape{bareTXantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@x=\dimexpr-\pgf@x-\wd\pgfnodeparttextbox\relax
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{waves}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=4.2\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ \pgf@circ@antennawaves
+ }
+}
+
+\pgfdeclareshape{bareRXantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step
+ \pgf@y=2\pgf@circ@res@step
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/bareantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/bareantenna/label/yanchor}\pgf@y
+ \pgf@y=\dimexpr\pgf@y+.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ \anchor{waves}{
+ \northeast
+ \pgf@circ@res@step=\ctikzvalof{monopoles/bareantenna/width}\pgf@circ@Rlen
+ \pgf@x=-4.2\pgf@circ@res@step
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{top}{\northeast\pgf@x=0pt}
+ \anchor{right}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{left}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{bottom}{\pgfpointorigin}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y}
+ \anchor{west}{\northeast\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \behindforegroundpath{
+ \pgf@circ@antennabody
+ \pgftransformxshift{-5.2\pgf@circ@res@step}
+ \pgf@circ@antennawaves
+ }
+}
+
+% Microstrip monopoles
+
+\pgfdeclareshape{mslstub}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=-.5\pgf@y
+ }
+ \savedanchor{\northwest}{
+ \pgf@x=\ctikzvalof{bipoles/mstline/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\northwest\pgf@y=0pt\relax}
+ \anchor{left}{\northwest\pgf@y=0pt\relax}
+ \anchor{right}{\southeast\pgf@y=0pt\relax}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{msrstub}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=0pt\relax
+ }
+ \savedanchor{\northwest}{
+ \pgf@x=\ctikzvalof{monopoles/msrstub/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/msrstub/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\pgfpointorigin}
+ \anchor{left}{\pgfpointorigin}
+ \anchor{right}{\pgfpointorigin}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointpolar{135}{\pgf@circ@res@step}}
+ \pgfpatharc{135}{45}{\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpointpolar{45}{\pgf@circ@res@up}}
+ \pgfpatharc{45}{135}{\pgf@circ@res@up}
+ \pgfclosepath
+ % \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{msport}{
+ \savedanchor{\southeast}{
+ \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=-.5\pgf@y
+ }
+ \savedanchor{\northwest}{
+ \pgf@x=\ctikzvalof{monopoles/msport/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \pgf@y=\ctikzvalof{bipoles/mstline/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{north}{\northwest\pgf@x=0pt\relax}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{east}{\southeast\pgf@y=0pt\relax}
+ \anchor{south east}{\southeast}
+ \anchor{south}{\southeast\pgf@x=0pt\relax}
+ \anchor{south west}{\southeast\pgf@x=-\pgf@x}
+ \anchor{west}{\northwest\pgf@y=0pt\relax}
+ \anchor{north west}{\northwest}
+ %
+ \anchor{center}{\northwest\pgf@y=0pt\relax}
+ \anchor{left}{\northwest\pgf@y=0pt\relax}
+ \anchor{right}{\southeast\pgf@y=0pt\relax}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr-.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox\relax
+ }
+ }
+ \behindbackgroundpath{
+ \pgfextracty{\pgf@circ@res@up}{\northwest}
+ \pgfextractx{\pgf@circ@res@right}{\southeast}
+ \pgfextractx{\pgf@circ@res@left}{\northwest}
+ \pgfextracty{\pgf@circ@res@down}{\southeast}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.5*\pgf@circ@res@up}
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ }
+}
+% Legacy antennas (with tails)
+
+\def\pgf@circ@shift@antenna@xy#1#2{%
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@y=\dimexpr\pgf@y+#2\pgf@circ@res@step
+ \pgf@x=\dimexpr\pgf@x+#1\pgf@circ@res@step
+\relax}
+
+\pgfdeclareshape{antenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{east}{\northeast\pgf@y=0cm\pgf@circ@shift@antenna@xy{0}{3}\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{0}{4}\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{3}}
+ \anchor{north east}{\northeast\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{2}}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{0}{4}}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{0}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/antenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/antenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+
+ \pgftransformxshift{ -4\pgf@circ@res@step }
+
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+
+\pgfdeclareshape{txantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}}
+ \anchor{east}{\northeast\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}}
+ \anchor{north east}{\northeast\pgf@circ@shift@antenna@xy{4}{2}}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/txantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/txantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/txantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{5.5\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{30}{-30}{2\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ \pgfpatharc{30}{-30}{4\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+
+\pgfdeclareshape{rxantenna}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor{\northeast}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/antenna/width}\pgf@circ@Rlen
+ \pgf@x=\pgf@circ@res@step%-0.5\pgflinewidth
+ \pgf@y=4\pgf@circ@res@step
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{2}}
+ \anchor{east}{\northeast\pgf@y=0cm\pgf@circ@shift@antenna@xy{4}{3}\relax}
+ \anchor{south}{\northeast\pgf@y=-\pgf@y \pgf@x=0cm\pgf@circ@shift@antenna@xy{2}{4}\relax}
+ \anchor{west}{\northeast\pgf@y=0cm\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{3}}
+ \anchor{north east}{\northeast\pgf@circ@shift@antenna@xy{4}{2}}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{2}}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y\pgf@circ@shift@antenna@xy{4}{4}}
+ \anchor{south west}{\northeast\pgf@y=-\pgf@y\pgf@x=-\pgf@x\pgf@circ@shift@antenna@xy{1}{4}}
+ \anchor{text}{
+ \northeast
+ \pgf@x=\ctikzvalof{monopoles/rxantenna/label/xanchor}\pgf@x
+ \pgf@y=\ctikzvalof{monopoles/rxantenna/label/yanchor}\pgf@y
+ }
+ \behindforegroundpath{
+ \pgfstartlinewidth=\pgflinewidth
+ \pgf@circ@res@step=\ctikzvalof{monopoles/rxantenna/width}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{0pt}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{5\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{4\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{3\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{4\pgf@circ@res@step-0.5\pgflinewidth}{6\pgf@circ@res@step}}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{6\pgf@circ@res@step}{7\pgf@circ@res@step}}
+ % \pgfpatharc{60}{-60}{\pgf@circ@res@step and \pgf@circ@res@step}
+ \pgfpatharc{150}{210}{4\pgf@circ@res@step} \pgfpathmoveto{\pgfpoint{6.5\pgf@circ@res@step}{6.75\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7\pgf@circ@res@step}{6.5\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{3\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{7.5\pgf@circ@res@step}{6.25\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2.5\pgf@circ@res@step}
+ \pgfpathmoveto{\pgfpoint{8\pgf@circ@res@step}{6\pgf@circ@res@step}}
+ \pgfpatharc{150}{210}{2\pgf@circ@res@step}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ }
+}
+
+% Vcc
+\pgfdeclareshape{vcc}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=3\pgf@x%
+ }
+ \anchor{north}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax}
+ \anchor{south}{\pgfpointorigin}
+ \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{center}{\pgfpointorigin}
+ \anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{2\pgf@circ@res@step+2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=2\pgf@circ@res@step
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \edef\pgf@circ@temp{\ctikzvalof{monopoles/vcc/arrow}}\edef\pgf@temp{legacy}
+ \ifx\pgf@temp\pgf@circ@temp
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \else
+ \pgfsetarrowsend{\pgf@circ@temp}
+ \fi
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Vee
+\pgfdeclareshape{vee}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@circ@res@step
+ \pgf@y=-3\pgf@x%
+ }
+ \anchor{south}{\northeast\pgf@x=0cm\relax}
+ \anchor{east}{\northeast\pgf@y=0.5\pgf@y\relax}
+ \anchor{north}{\pgfpointorigin}
+ \anchor{west}{\northeast\pgf@y=0.5\pgf@y\pgf@x=-\pgf@x}
+ \anchor{south east}{\northeast}
+ \anchor{south west}{\northeast\pgf@x=-\pgf@x}
+ \anchor{north east}{\northeast\pgf@y=0pt\relax}
+ \anchor{north west}{\northeast\pgf@y=0pt\pgf@x=-\pgf@x}
+ \anchor{center}{\pgfpointorigin}
+ \anchor{text}{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{-.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgfpathmoveto{\pgfpoint{.5\wd\pgfnodeparttextbox}{-2\pgf@circ@res@step-2\ht\pgfnodeparttextbox}}
+ \pgf@x=0pt
+ \pgf@y=-2\pgf@circ@res@step
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/vcc/width}\pgf@circ@Rlen
+ \pgfscope
+ \edef\pgf@circ@temp{\ctikzvalof{monopoles/vee/arrow}}\edef\pgf@temp{legacy}
+ \ifx\pgf@temp\pgf@circ@temp
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0}{-1.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{-.8\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \else
+ \pgfsetarrowsend{\pgf@circ@temp}
+ \fi
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0pt}{-1.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% match
+\pgfdeclareshape{match}{
+ \savedanchor{\northeast}{%
+ \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@Rlen
+ \pgf@x=2\pgf@circ@res@step
+ \pgf@circ@res@step = \ctikzvalof{monopoles/match/width} \pgf@circ@Rlen
+ \pgf@y=.5\pgf@circ@res@step%
+ }
+ % the center is on the left side of the shape for facility of usage
+ \anchor{north}{\northeast\pgf@x=0.5\pgf@x\relax}
+ \anchor{east}{\northeast\pgf@y=0cm\relax}
+ \anchor{south}{\northeast\pgf@y=0pt\pgf@x=0.5\pgf@x\relax}
+ \anchor{west}{\pgfpointorigin}
+ \anchor{north east}{\northeast}
+ \anchor{north west}{\northeast\pgf@x=0cm\relax}
+ \anchor{south east}{\northeast\pgf@y=0pt\relax}
+ \anchor{south west}{\pgfpointorigin}
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgf@x=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+ \pgf@x=1.5\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \pgf@y=-1.5\ht\pgfnodeparttextbox
+ }
+ \behindforegroundpath{
+ \pgf@circ@res@step=\ctikzvalof{monopoles/match/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{2\pgf@circ@res@step}{0}}
+ \pgfusepath{fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \endpgfscope
+ }
+}
+
+%%%---------- close: tex/pgfcircmonopoles
+%%%%%%%%%%% Springe nach tex/pgfcircbipoles
+%%%---------- open: tex/pgfcircbipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%% Generic macro for defining a bipole shape
+% #1 - additional anchors
+% #2 - lower y-size of the bipole (from the center).
+% #3 - #shape is the name of the shape
+% #4 - upper y-size of the bipole (from the center)
+% #5 - width of the bipole
+% #6 - macros drawing the bipole
+
+
+\long\def\pgfcircdeclarebipole#1#2#3#4#5#6{
+ \pgfdeclareshape{#3shape}{
+
+ \savedanchor{\northeast}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\northeastborder}{
+ \pgf@y=#4\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwestborder}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{bipoles/border margin}\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=\ctikzvalof{bipoles/border margin}\pgf@x
+ }
+ \savedanchor{\southwest}{
+ \pgf@y=-#2\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-#5\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor{\centerpoint}{
+ \pgf@circ@res@down=-#2\pgf@circ@Rlen
+ \pgf@circ@res@up=#4\pgf@circ@Rlen
+ \pgfpointorigin
+ \pgf@y=\pgf@circ@res@up
+ \advance\pgf@y by\pgf@circ@res@down
+ \pgf@y=.5\pgf@y
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{n}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{ne}{
+ \northeast
+ }
+ \anchor{nw}{
+ \northeast
+ \pgf@x=-\pgf@x
+ }
+ \anchor{e}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{s}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{south east}{
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \southwest
+ }
+ \anchor{se}{
+ \southwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{sw}{
+ \southwest
+ }
+ \anchor{w}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{south}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{west}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{right}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{above}{
+ \northeast
+ \pgf@x=0cm
+ }
+ \anchor{left}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{below}{
+ \southwest
+ \pgf@x=0cm
+ }
+ \anchor{a}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{b}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \savedanchor{\textanchor}{%
+ \pgf@y=\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \anchor{text}{
+ \textanchor
+ }
+ \anchorborder{%
+ \ifpgf@circuit@bipole@inverted
+ \pgf@circ@res@left=-\pgf@x
+ \pgf@circ@res@right=-\pgf@y
+ \else
+ \pgf@circ@res@left=\pgf@x
+ \pgf@circ@res@right=\pgf@y
+ \fi
+ \ifdim\pgf@circ@res@right>0cm
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\northeastborder}
+ \else
+ \southwestborder
+ \pgfpointborderrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@right}}{\pgfpoint{-\pgf@x}{-\pgf@y}}
+ \fi
+ }
+
+ #1
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@zero = 0cm
+ \pgf@circ@res@left = -\pgf@x
+ \pgf@circ@res@right = \pgf@x
+ \southwest
+ \pgf@circ@res@down = \pgf@y
+
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ #6
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Standard bipole shapes declarations
+
+%% Resistor
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/resistor/height}}
+{resistor}
+{\ctikzvalof{bipoles/resistor/height}}
+{\ctikzvalof{bipoles/resistor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+}
+
+
+
+%% Variable resistor
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vresistor/height}}
+{vresistor}
+{\ctikzvalof{bipoles/vresistor/height}}
+{\ctikzvalof{bipoles/vresistor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitor}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Capacitive sensor
+\pgfcircdeclarebipole
+{\anchor{label}{%
+ \southwest
+ \pgf@x=2.6\pgf@x
+ \pgf@y=1.4\pgf@y
+ }%
+}
+{\ctikzvalof{bipoles/capacitor/height}}
+{capacitivesens}
+{\ctikzvalof{bipoles/capacitor/height}}
+{\ctikzvalof{bipoles/capacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/capacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{2.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-2.6\pgf@circ@res@right}{1.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-4.4\pgf@circ@res@right}{1.4\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Polar Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{polarcapacitor}
+{\ctikzvalof{bipoles/pcapacitor/height}}
+{\ctikzvalof{bipoles/pcapacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/pcapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left+ \ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgftransformrotate{-90}
+ \pgfpathsine{\pgfpoint{\pgf@circ@res@up}{-\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfpathcosine{\pgfpoint{\pgf@circ@res@up}{\ctikzvalof{bipoles/pcapacitor/bend width}\pgf@circ@res@left}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+}
+
+%% Electrolytic Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{ecapacitor}
+{\ctikzvalof{bipoles/ecapacitor/height}}
+{\ctikzvalof{bipoles/ecapacitor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/ecapacitor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+ \pgfsetrectcap
+ % % % Draw plus pole
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ % % Draw minus pole
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{draw,fill}
+ \pgfsetfillcolor{black}
+ % % plus pole annotation
+ \pgftext[right,at=\pgfpoint{1.2\pgf@circ@res@left}{.6\pgf@circ@res@up}]
+ {\pgfkeysvalueof{/tikz/circuitikz/bipoles/ecapacitor/font} $+$}
+}
+
+%% Battery
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/battery/height}}
+{battery}
+{\ctikzvalof{bipoles/battery/height}}
+{\ctikzvalof{bipoles/battery/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/battery/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 6
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+
+%% Battery 1 % poles with equl thickness
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/battery1/height}}
+{battery1}
+{\ctikzvalof{bipoles/battery1/height}}
+{\ctikzvalof{bipoles/battery1/width}}
+{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+%% Battery 2 % negative pole thicker
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/battery2/height}}
+{battery2}
+{\ctikzvalof{bipoles/battery2/height}}
+{\ctikzvalof{bipoles/battery2/width}}
+{
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \ifpgf@circ@fixbatteries
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{3\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.33\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+}
+
+
+%% cute inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{cuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% cute inductive sensor
+
+\pgfcircdeclarebipole
+{%
+{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.8\pgf@x
+ \pgf@y=2.6\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/cuteinductor/lower coil height}}
+{scuteinductor}
+{\ctikzvalof{bipoles/cuteinductor/height}}
+{\ctikzvalof{bipoles/cuteinductor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cuteinductor/coil aspect}*\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cuteinductor/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% cute choke
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cutechoke/lower coil height}}
+{cutechoke}
+{\ctikzvalof{bipoles/cutechoke/height}}
+{\ctikzvalof{bipoles/cutechoke/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/cutechoke/coil aspect}*\ctikzvalof{bipoles/cutechoke/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/cutechoke/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/cutechoke/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/cutechoke/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/cutechoke/coils}/2}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/cutechoke/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}*\ctikzvalof{bipoles/cutechoke/cthick}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+
+ \ifpgf@circuit@bipole@twolines
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth+\ctikzvalof{bipoles/cutechoke/cdist}\pgf@circ@res@up+\ctikzvalof{bipoles/cutechoke/cstep}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}*\ctikzvalof{bipoles/cutechoke/cthick}\pgfstartlinewidth}
+ \pgfusepath{stroke}
+ \fi
+}
+
+%% variable cute inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vcuteinductor/lower coil height}}
+{vcuteinductor}
+{\ctikzvalof{bipoles/vcuteinductor/height}}
+{\ctikzvalof{bipoles/vcuteinductor/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@other}%width of small coil
+ {0.5*\ctikzvalof{bipoles/vcuteinductor/coil aspect}*\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen/(\ctikzvalof{bipoles/vcuteinductor/coils}-1)}
+
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/vcuteinductor/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment\pgflinewidth+(\ctikzvalof{bipoles/vcuteinductor/coils}-1)*2*\pgf@circ@res@other)/\ctikzvalof{bipoles/vcuteinductor/coils}/2}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {2,...,\ctikzvalof{bipoles/vcuteinductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfpatharc{0}{-180}{\pgf@circ@res@other and -.5\pgf@circ@res@down}
+ }
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and .5\pgf@circ@res@up}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+%% american inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{americaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+
+%% american inductive sensor
+
+\pgfcircdeclarebipole
+{%
+{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.8\pgf@x
+ \pgf@y=2.6\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/americaninductor/height 2}}
+{samericaninductor}
+{\ctikzvalof{bipoles/americaninductor/height}}
+{\ctikzvalof{bipoles/americaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/americaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/americaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/americaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/americaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.8\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-1.6\pgf@circ@res@right}{2.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% variable american inductor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vamericaninductor/height 2}}
+{vamericaninductor}
+{\ctikzvalof{bipoles/vamericaninductor/height}}
+{\ctikzvalof{bipoles/vamericaninductor/width}}
+{
+ \pgf@circ@res@step=\ctikzvalof{bipoles/vamericaninductor/width}\pgf@circ@Rlen
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \advance \pgf@circ@res@step by \pgfhorizontaltransformationadjustment\pgflinewidth
+ \divide \pgf@circ@res@step by \ctikzvalof{bipoles/vamericaninductor/coils}
+ \divide \pgf@circ@res@step by 2
+ \pgf@circ@res@other = \ctikzvalof{bipoles/vamericaninductor/coil height}\pgf@circ@Rlen
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{-\pgfverticaltransformationadjustment*0.4*\pgfstartlinewidth}}%correct value would be 0.5 but arcs are not really flat, therefore 0.4 is better is (almost) all cases
+ \foreach \x in {1,...,\ctikzvalof{bipoles/vamericaninductor/coils}}
+ {
+ \pgfpatharc{180}{0}{\pgf@circ@res@step and \pgf@circ@res@other}
+ }
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% Independent voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsource}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent voltage source - American style
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{vsourceAM}
+{\ctikzvalof{bipoles/vsourceam/height}}
+{\ctikzvalof{bipoles/vsourceam/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@down]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/vsourceam/margin}\pgf@circ@res@up]{$+$}
+ \fi
+}
+
+
+
+%% Independent sinusoidal voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{vsourcesin}
+{\ctikzvalof{bipoles/vsourcesin/height}}
+{\ctikzvalof{bipoles/vsourcesin/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Square Voltage source - contributed by Alistair Kwan
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{vsourcesquare}
+{\ctikzvalof{bipoles/vsourcesquare/height}}
+{\ctikzvalof{bipoles/vsourcesquare/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-1\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{-1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% Triangle Voltage source - contributed by Ralf Farkas
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{vsourcetri}
+{\ctikzvalof{bipoles/vsourcetri/height}}
+{\ctikzvalof{bipoles/vsourcetri/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-1\pgf@circ@res@up}{0cm}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@up}{0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@up}{-0.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1\pgf@circ@res@up}{0\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+%% PV Source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pvsource/height}}
+{pvsource}
+{\ctikzvalof{bipoles/pvsource/height}}
+{\ctikzvalof{bipoles/pvsource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@left}{.4\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.15\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %Arrow Part
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.3\pgf@circ@res@left}{0}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{2.2\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0}{0.3\pgf@circ@res@up}}{\pgfpointpolar{-45}{1.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty Source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{esource}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+}
+
+%% DC Current Source with open shape
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dcisource/height}}
+{dcisource}
+{\ctikzvalof{bipoles/dcisource/height}}
+{\ctikzvalof{bipoles/dcisource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@maybefill
+ \edef\@@angle{\ctikzvalof{bipoles/dcisource/angle}}
+ \pgfpathmoveto{\pgfpointpolar{\@@angle}{\pgf@circ@res@up}}
+ \pgfpatharc{\@@angle}{-\@@angle}{\pgf@circ@res@up}
+ \pgfpathmoveto{\pgfpointpolar{180-\@@angle}{\pgf@circ@res@up}}
+ \pgfpatharc{180-\@@angle}{180+\@@angle}{\pgf@circ@res@up}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+%% DC-Voltage source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{dcvsource}
+{\ctikzvalof{bipoles/dcvsource/height}}
+{\ctikzvalof{bipoles/dcvsource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{.5\pgf@circ@res@right}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@left}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@down}{.5\pgf@circ@res@right}}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isource}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+}
+
+%% Independent double oo source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/oosource/height}}
+{oosource}
+{\ctikzvalof{bipoles/oosource/height}}
+{\ctikzvalof{bipoles/oosource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgf@circ@maybefill
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@right}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@right}
+ \pgf@circ@draworfill
+ \pgfpathcircle{\pgfpoint{\ctikzvalof{bipoles/oosource/circleoffset}\pgf@circ@res@left}{0}}
+ {\ctikzvalof{bipoles/oosource/circlesize}\pgf@circ@res@left}
+ \pgfusepath{draw}
+}
+
+
+%% Independent current source - American
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isourceam/height}}
+{isourceAM}
+{\ctikzvalof{bipoles/isourceam/height}}
+{\ctikzvalof{bipoles/isourceam/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+
+%% Independent sinusoidal current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourcesin}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Controlled voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsource}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+
+
+%% Controlled voltage source - American
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{cvsourceAM}
+{\ctikzvalof{bipoles/cvsourceam/height}}
+{\ctikzvalof{bipoles/cvsourceam/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifpgf@circ@oldvoltagedirection
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$+$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$-$}
+ \else
+ \pgftext[bottom,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@left]{$-$}
+ \pgftext[top,rotate=90,y=\ctikzvalof{bipoles/cvsourceam/margin}\pgf@circ@res@right]{$+$}
+ \fi
+}
+
+
+%% Controlled sinusoidal voltage source
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cvsourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+%% Controlled sinusoidal current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{cisourcesin}
+{\ctikzvalof{bipoles/cvsourcesin/height}}
+{\ctikzvalof{bipoles/cvsourcesin/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgfscope
+ \pgftransformrotate{90}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{.5\pgf@circ@res@up}{-.5\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Controlled current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisource}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+%% Controlled current source - American
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{cisourceAM}
+{\ctikzvalof{bipoles/cisourceam/height}}
+{\ctikzvalof{bipoles/cisourceam/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{.5\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+}
+
+%% Cute Independent voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceC}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Cute Independent current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceC}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Cute Controlled voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cvsource/height}}
+{cvsourceC}
+{\ctikzvalof{bipoles/cvsource/height}}
+{\ctikzvalof{bipoles/cvsource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Cute Controlled current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/cisource/height}}
+{cisourceC}
+{\ctikzvalof{bipoles/cisource/height}}
+{\ctikzvalof{bipoles/cisource/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@draworfill
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@zero}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+
+%% Noise voltage source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vsource/height}}
+{vsourceN}
+{\ctikzvalof{bipoles/vsource/height}}
+{\ctikzvalof{bipoles/vsource/width}}
+{
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ %
+ \pgf@circ@res@step=0.125\pgf@circ@Rlen\relax
+ \edef\pgf@noise@temp{dashed}
+ \edef\pgf@noise@fill{\pgfkeysvalueof{/tikz/circuitikz/bipoles/noise sources/fillcolor}}
+ \ifx\pgf@noise@temp\pgf@noise@fill
+ % fillable in this case
+ \pgf@circ@draworfillandclip
+ \pgfmathsetmacro{\thinner}{.5*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\thinner\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ %
+ \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\pgf@noise@fill}
+ \pgfusepath{draw,fill}
+ \fi
+ \endpgfscope
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Noise current source
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/isource/height}}
+{isourceN}
+{\ctikzvalof{bipoles/isource/height}}
+{\ctikzvalof{bipoles/isource/width}}
+{
+ \pgfpointorigin
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ %
+ \pgf@circ@res@step=0.125\pgf@circ@Rlen\relax
+ \edef\pgf@noise@temp{dashed}
+ \edef\pgf@noise@fill{\pgfkeysvalueof{/tikz/circuitikz/bipoles/noise sources/fillcolor}}
+ \ifx\pgf@noise@temp\pgf@noise@fill
+ % fillable in this case
+ \pgf@circ@draworfillandclip
+ \pgfmathsetmacro{\thinner}{.5*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\thinner\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by \pgf@circ@res@step\advance\pgf@circ@res@down by \pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ %
+ \advance\pgf@circ@res@up by -4\pgf@circ@res@step \advance\pgf@circ@res@down by -4\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@up by -\pgf@circ@res@step\advance\pgf@circ@res@down by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \else
+ \pgfsetfillcolor{\pgf@noise@fill}
+ \pgfusepath{draw,fill}
+ \fi
+ \endpgfscope
+ \pgfmathsetmacro{\@@thicker}{3*\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}}
+ \pgfsetlinewidth{\@@thicker\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{.6\pgf@circ@res@down}}
+ \pgfsetroundcap\pgfusepath{draw}
+}
+%% Black generic diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulldiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black Zener diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black alternative zigzag Zener diode
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black Schottky diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullsdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Black tunnel diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulltdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Black light emitting diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fulllediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+}
+
+%% Black photodiode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{fullpdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw,fill}
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Black varcap
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{fullvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfusepath{draw,fill}
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Code for the diode triangle
+\def\pgf@circ@basicdiodeshape{
+ % \pgfscope
+ \pgftransformxshift{\pgf@circ@res@left}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+ % \endpgfscope
+}
+
+
+%% Empty generic diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptydiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty Zener diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty alternative zigzag Zener diode
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptyzzdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-1.8\pgf@circ@res@left}{\pgf@circ@res@down-0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-0.2\pgf@circ@res@left}{\pgf@circ@res@up-0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Empty Schottky diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptysdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{.6\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-1.4\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+%% Empty tunnel diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptytdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Empty light emitting diode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptylediode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty photodiode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/diode/height}}
+{emptypdiode}
+{\ctikzvalof{bipoles/diode/height}}
+{\ctikzvalof{bipoles/diode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope
+ \pgf@circ@basicdiodeshape
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpoint{-0.4\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.2\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{1.2\pgf@circ@res@right}{1.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty varcap
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/varcap/height}}
+{emptyvarcap}
+{\ctikzvalof{bipoles/varcap/height}}
+{\ctikzvalof{bipoles/varcap/width}}
+{
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgfsetlinewidth{\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ % \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-2\pgf@circ@res@temp}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Empty bidirectionaldiode
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/bidirectionaldiode/height}}{emptybidirectionaldiode}{\ctikzvalof{bipoles/bidirectionaldiode/height}}{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgf@circ@draworfill
+ % \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+
+%% Full bidirectionaldiode
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{fullbidirectionaldiode}
+{\ctikzvalof{bipoles/bidirectionaldiode/height}}
+{\ctikzvalof{bipoles/bidirectionaldiode/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{bipoles/bidirectionaldiode/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bidirectionaldiode/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw, fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% (Closing) SPST
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{cspst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpointpolar{90}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{90}{-20}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Opening SPST
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/spst/depth}}
+{ospst}
+{\ctikzvalof{bipoles/spst/height}}
+{\ctikzvalof{bipoles/spst/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{-10}{90}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Normal open Switch
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/nos/depth}}
+{nos}
+{\ctikzvalof{bipoles/nos/height}}
+{\ctikzvalof{bipoles/nos/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+}
+
+%% Normal closed Switch
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ncs/depth}}
+{ncs}
+{\ctikzvalof{bipoles/ncs/height}}
+{\ctikzvalof{bipoles/ncs/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% Push Button
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{pushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+
+%% Normally closed Push Button
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/pushbutton/height 2}}
+{ncpushbutton}
+{\ctikzvalof{bipoles/pushbutton/height}}
+{\ctikzvalof{bipoles/pushbutton/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp}}
+ \pgfpathmoveto{\pgfpoint{0}{-\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{draw}}
+}
+% cute switch "to" shapes help function
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutesw#1#2#3{
+ \pgfcircdeclarebipole
+ {
+ \savedanchor\midlever{
+ % these values are calculated when we create the definition of the shape.
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/cuteswitch/height}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgf@circ@res@down = -.5\pgf@y
+ \pgf@circ@res@up = .5\pgf@y
+ \pgfextracty{\pgf@circ@res@other}{#2}
+ \pgf@x=0pt
+ \pgf@y=.5\pgf@circ@res@other
+ }
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+ % mid of the lever, to stack switches
+ \anchor{mid}{\midlever}
+ \anchor{cout}{\northeast \pgf@y=0cm}
+ \anchor{cin}{\southwest\pgf@y=0cm}
+ \anchor{out}{\northeast \pgf@y=0cm\advance\pgf@x by \radius}
+ \anchor{in}{\southwest\pgf@y=0cm\advance\pgf@x by -\radius}
+ }
+ {\ctikzvalof{bipoles/cuteswitch/height 2}}
+ {#1}
+ {\ctikzvalof{bipoles/cuteswitch/height}}
+ {\ctikzvalof{bipoles/cuteswitch/width}}{
+ \pgfscope
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{#2}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+ \pgfscope % arrow
+ #3
+ \endpgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{draw}}
+ \pgftransformshift{\pgfpoint{2\pgf@circ@res@right}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out}{\pgfusepath{draw}}
+ }
+}
+
+%% closed cute switch
+\pgfcircdeclarecutesw{cuteclosedswitch}
+ {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}}
+ {}
+
+%% open cute switch
+\pgfcircdeclarecutesw{cuteopenswitch}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ {}
+
+%% closing cute switch
+\pgfcircdeclarecutesw{cuteclosingswitch}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ {
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{70}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{70}{-10}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+ }
+
+%% opening cute switch
+\pgfcircdeclarecutesw{cuteopeningswitch}
+ {\pgfpoint{\pgf@circ@res@right}{1.5\pgf@circ@res@temp}}
+ {
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{-10}{1.2\pgf@circ@res@right}}
+ \pgfpatharc{-10}{60}{1.2\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+ }
+
+
+% % METERINGSHAPE
+ \long\def\drawmeteringcircle{
+ \def\pgf@circ@temp{right}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \def\pgf@circ@temp{below}
+ \ifx\tikz@res@label@pos\pgf@circ@temp
+ \pgf@circ@res@step=-1.2\pgf@circ@res@up
+ \else
+ \pgf@circ@res@step=1.2\pgf@circ@res@up
+ \fi
+ \fi
+ %draw connections to circle
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{.9\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathmoveto{\pgfpoint{.9\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ %draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \endpgfscope
+ %draw arrow
+ \pgfscope
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+%AMPEREMETER
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ammeter/height}}
+{ammeter}
+{\ctikzvalof{bipoles/ammeter/height}}
+{\ctikzvalof{bipoles/ammeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{A}}{}{}
+}
+%OHMMETER
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{ohmmeter}
+{\ctikzvalof{bipoles/ohmmeter/height}}
+{\ctikzvalof{bipoles/ohmmeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\boldmath$\Omega$}{}{}
+}
+%VOLTMETER
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{voltmeter}
+{\ctikzvalof{bipoles/voltmeter/height}}
+{\ctikzvalof{bipoles/voltmeter/width}}
+{
+ \drawmeteringcircle
+ \pgfnode{circle}{center}{\textbf{V}}{}{}
+
+}
+
+% oscilloscope, suggested by @nobrl https://github.com/circuitikz/circuitikz/issues/176
+\pgfcircdeclarebipole
+{
+ \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x}
+ \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/oscope/height}}
+{oscope}
+{\ctikzvalof{bipoles/oscope/height}}
+{\ctikzvalof{bipoles/oscope/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ % this would create a round (analog?) scope...
+ % \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ % grid
+ \pgfscope
+ \pgfsetlinewidth{0.5\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathgrid[stepx=\pgf@circ@res@step, stepy=\pgf@circ@res@step]%
+ {\pgfpoint{0.75\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ {\pgfpoint{0.75\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfsetstrokeopacity{0.5}
+ \pgfusepath{draw}
+ \endpgfscope
+ % function displayed, thanks to
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.05\pgf@circ@res@left}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.65\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+%% Short circuit
+
+%%% NOTICE that the short is really NOT drawn; we trust the fact that its
+%%% natural length is zero.
+\pgfcircdeclarebipole
+{}
+{0}
+{short}
+{0}
+{0}
+{ }
+
+%% Open circuit
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/open/height}}
+{open}
+{\ctikzvalof{bipoles/open/height}}
+{\ctikzvalof{bipoles/open/width}}
+{ }
+
+%% Generic bipole - used as resistor by some (bleah)
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/generic/height}}
+{generic}
+{\ctikzvalof{bipoles/generic/height}}
+{\ctikzvalof{bipoles/generic/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+
+
+%% fuse
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/fuse/height}}
+{fuse}
+{\ctikzvalof{bipoles/fuse/height}}
+{\ctikzvalof{bipoles/fuse/width}}
+{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@draworfill
+}
+
+
+
+%% Generic bipole, filled - used as inductor by some
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{fullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfusepath{draw,fill}
+}
+
+%% Generic sensor, filled - used as inductive sensor by some
+
+\pgfcircdeclarebipole
+{{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.4\pgf@x
+ \pgf@y=2\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{sfullgeneric}
+{\ctikzvalof{bipoles/fullgeneric/height}}
+{\ctikzvalof{bipoles/fullgeneric/width}}
+{
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Generic asymmetric bipole
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/ageneric/height}}
+{ageneric}
+{\ctikzvalof{bipoles/ageneric/height}}
+{\ctikzvalof{bipoles/ageneric/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+%% asymmetric fuse
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/afuse/height}}
+{afuse}
+{\ctikzvalof{bipoles/afuse/height}}
+{\ctikzvalof{bipoles/afuse/width}}
+{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Memristor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/memristor/height}}
+{memristor}
+{\ctikzvalof{bipoles/memristor/height}}
+{\ctikzvalof{bipoles/memristor/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.72*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.35*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{-\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.05*\pgf@circ@res@left}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{\ctikzvalof{bipoles/memristor/wave height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.42*\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.8*\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfpathrectanglecorners{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{stroke,fill}
+}
+
+
+
+
+%% Generic empty tunable
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{tgeneric}
+{\ctikzvalof{bipoles/tgeneric/height}}
+{\ctikzvalof{bipoles/tgeneric/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% Photoresistor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/photoresistor/height 2}}
+{photoresistor}
+{\ctikzvalof{bipoles/photoresistor/height}}
+{\ctikzvalof{bipoles/photoresistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.7\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@right}{-1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+%% Thermistor
+\pgfcircdeclarebipole
+{{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.4\pgf@x
+ \pgf@y=1.2\pgf@y
+ }%
+}}
+{\ctikzvalof{bipoles/thermistor/height}}
+{thermistor}
+{\ctikzvalof{bipoles/thermistor/height}}
+{\ctikzvalof{bipoles/thermistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ %\pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ %\endpgfscope
+}
+
+
+%% Thermistor PTC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/thermistorptc/height 2}}
+{thermistorptc}
+{\ctikzvalof{bipoles/thermistorptc/height}}
+{\ctikzvalof{bipoles/thermistorptc/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorptc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% Thermistor NTC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/thermistorntc/height 2}}
+{thermistorntc}
+{\ctikzvalof{bipoles/thermistorntc/height}}
+{\ctikzvalof{bipoles/thermistorntc/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/thermistorntc/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftext[top,x=.85\pgf@circ@res@left,y=.75\pgf@circ@res@down]{\tiny$\vartheta$}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.62\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.62\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{.45\pgf@circ@res@left}{.7\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.45\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+%% thermocouple
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/thermocouple/height 2}}
+{thermocouple}
+{\ctikzvalof{bipoles/thermocouple/height}}
+{\ctikzvalof{bipoles/thermocouple/width}}
+{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+}
+
+%% Varistor
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/varistor/height}}
+{varistor}
+{\ctikzvalof{bipoles/varistor/height}}
+{\ctikzvalof{bipoles/varistor/width}}
+{
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{-\pgfkeysvalueof{/tikz/circuitikz/bipoles/varistor/main}\pgf@circ@res@up}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@left}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgftext[top,x=.65\pgf@circ@res@left,y=1.2\pgf@circ@res@down]{{\tiny\textsf{U}}}
+}
+
+
+
+%% Generic full tunable
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{tfullgeneric}
+{\ctikzvalof{bipoles/tfullgeneric/height}}
+{\ctikzvalof{bipoles/tfullgeneric/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw,fill}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{.5\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.5\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+
+
+%% Variable Capacitor
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{vcapacitor}
+{\ctikzvalof{bipoles/vcapacitor/height}}
+{\ctikzvalof{bipoles/vcapacitor/width}}
+{
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/width}\pgf@circ@Rlen
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vcapacitor/capacitor width} \pgf@circ@res@right
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@step}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfusepath{draw}
+}
+
+
+%% Piezoelectric Element
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{piezoelectric}
+{\ctikzvalof{bipoles/piezoelectric/height}}
+{\ctikzvalof{bipoles/piezoelectric/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piezoelectric/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 5
+
+ %% Outer markings
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ %% Inner Box
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left+4}{\pgf@circ@res@up-1}}{\pgfpoint{\pgf@circ@res@right-4}{\pgf@circ@res@down+1}}
+ \pgf@circ@draworfill
+ \endpgfscope
+}
+
+
+
+
+
+
+%% Lamp
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/lamp/height}}
+{lamp}
+{\ctikzvalof{bipoles/lamp/height}}
+{\ctikzvalof{bipoles/lamp/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{.7071*\pgf@circ@res@left}{.7071*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7071*\pgf@circ@res@right}{.7071*\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% bulb
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bulb/height}}
+{bulb}
+{\ctikzvalof{bipoles/bulb/height}}
+{\ctikzvalof{bipoles/bulb/width}}
+{%
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{0.8\pgf@circ@res@up}}{\pgfpoint{0.8\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+}
+
+
+% transmission line
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tline/height}}
+{tline}
+{\ctikzvalof{bipoles/tline/height}}
+{\ctikzvalof{bipoles/tline/width}}
+{
+ \pgf@circ@res@step=.2\pgf@circ@res@right % half x axis
+ \begin{pgftransparencygroup}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left+\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{-\pgf@circ@res@step and -\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \pgfpathellipse{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{\pgf@circ@res@step}{0pt}}{\pgfpoint{0pt}{-\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \end{pgftransparencygroup}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right-\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{stroke}
+}
+
+% microstrip transmission line
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/mstline/height}}
+{mstline}
+{\ctikzvalof{bipoles/mstline/height}}
+{\ctikzvalof{bipoles/mstline/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+%% SQUID added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/squid/height}}
+{squid}
+{\ctikzvalof{bipoles/squid/height}}
+{\ctikzvalof{bipoles/squid/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{1.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.65*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.65*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{1.35*\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+}
+
+
+
+% Generic barrier added by Cor Molenaar 5 March 2010
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/barrier/height}}
+{barrier}
+{\ctikzvalof{bipoles/barrier/height}}
+{\ctikzvalof{bipoles/barrier/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.35*\pgf@circ@res@left}{0.35*\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.35*\pgf@circ@res@right}{0.35*\pgf@circ@res@up}}
+
+ \pgfusepath{draw}
+}
+
+
+% Contributed by Danilo Piazzalunga
+
+\pgfdeclareshape{buffer}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/buffer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+}
+
+
+
+
+
+\pgfdeclareshape{plain amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@up}}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/plain amp/input height}\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+
+
+
+
+ }
+}
+
+
+%% Draw the two-port fillable box
+\def\pgf@circ@twoportbox{
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+}
+
+%% Generic two port box
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/twoport/height}}
+{twoport}
+{\ctikzvalof{bipoles/twoport/height}}
+{\ctikzvalof{bipoles/twoport/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/twoport/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw outer box
+ \pgf@circ@twoportbox
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+}
+
+%% voltage controled oscillator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vco/width}}
+{vco}
+{\ctikzvalof{bipoles/twoport/width}}
+{\ctikzvalof{bipoles/vco/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vco/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+ % draw circle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@step}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-.5\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+}
+
+%% bandpass filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bandpass/width}}
+{bandpass}
+{\ctikzvalof{bipoles/bandpass/width}}
+{\ctikzvalof{bipoles/bandpass/width}}
+{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% bandstop filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/bandstop/width}}
+{bandstop}
+{\ctikzvalof{bipoles/bandstop/width}}
+{\ctikzvalof{bipoles/bandstop/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/bandstop/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225% 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt}% always draw solid line for inner symbol
+ \pgfsetarrows{-}%never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% highpass filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/highpass/width}}
+{highpass}
+{\ctikzvalof{bipoles/highpass/width}}
+{\ctikzvalof{bipoles/highpass/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/highpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.65\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{-0.35\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% lowpass filter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/lowpass/width}}
+{lowpass}
+{\ctikzvalof{bipoles/lowpass/width}}
+{\ctikzvalof{bipoles/lowpass/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/lowpass/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 224 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{0.35\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.65\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{-0.15\pgf@circ@res@step}{-0.15\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.15\pgf@circ@res@step}{0.15\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.25\pgf@circ@res@step}{-.25\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.25\pgf@circ@res@step}{.25\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% ADC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/adc/width}}
+{adc}
+{\ctikzvalof{bipoles/adc/width}}
+{\ctikzvalof{bipoles/adc/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/adc/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{A}
+ \def\textii{D}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{D}
+ \def\textii{A}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{A}
+ \def\textii{D}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DAC
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dac/width}}
+{dac}
+{\ctikzvalof{bipoles/dac/width}}
+{\ctikzvalof{bipoles/dac/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dac/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\texti{D}
+ \def\textii{A}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 134 \ifnum \pgfcircmathresult < 225 % 134 degree, because >= 135 is not possible
+ \def\texti{A}
+ \def\textii{D}
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \def\texti{D}
+ \def\textii{A}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgftext[center,x=0.45\pgf@circ@res@left,y=0.45\pgf@circ@res@up]{\textsf{\texti}}
+ \pgftext[center,x=0.45\pgf@circ@res@right,y=0.45\pgf@circ@res@down]{\textsf{\textii}}
+}
+
+%% DSP
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/dsp/width}}
+{dsp}
+{\ctikzvalof{bipoles/dsp/width}}
+{\ctikzvalof{bipoles/dsp/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/dsp/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{DSP}}
+}
+
+%% FFT
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/fft/width}}
+{fft}
+{\ctikzvalof{bipoles/fft/width}}
+{\ctikzvalof{bipoles/fft/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/fft/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgftext[center,x=0,y=0]{\textsf{FFT}}
+}
+
+%% Amplifier
+\pgfcircdeclarebipole
+{}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{amp}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \pgf@circ@draworfill
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+}
+
+
+%% variable amplifier
+\pgfcircdeclarebipole
+{}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{vamp}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \ifpgf@circuit@boxed
+ \ctikzvalof{bipoles/twoport/width}
+ \else
+ \ctikzvalof{bipoles/amp/width}
+ \fi
+}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/amp/width}\pgf@circ@Rlen
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw input arrow
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ \ifpgf@circuit@boxed
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetdash{}{0pt} % draw solid line for inner symbol if no box is drawn
+ \pgf@circ@res@step=.7\pgf@circ@res@step % scale amp symbol when inside a box
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{-0.5\pgf@circ@res@step}{0.55\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@step}{0}}
+ \pgfpathlineto{\pgfpoint{-0.5\pgf@circ@res@step}{-0.55\pgf@circ@res@step}}
+
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ % draw inner text
+ \pgftext[center,x=-0.12\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+
+ % draw arrow
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.8\pgf@circ@res@step}{-0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@step}{0.6\pgf@circ@res@step}}
+ \pgfusepath{draw}
+}
+
+%% pi attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{piattenuator}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{\ctikzvalof{bipoles/piattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/piattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable pi attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{vpiattenuator}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{\ctikzvalof{bipoles/vpiattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vpiattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% T attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{tattenuator}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{\ctikzvalof{bipoles/tattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/tattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% variable T attenuator
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{vtattenuator}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{\ctikzvalof{bipoles/vtattenuator/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vtattenuator/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % draw inner symbol
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0pt}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.6\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.6\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.8\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% phase shifter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{phaseshifter}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/phaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+}
+
+%% variable phase shifter
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/phaseshifter/width}}
+{vphaseshifter}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{\ctikzvalof{bipoles/vphaseshifter/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/vphaseshifter/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % rotate inner symbol
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum \pgfcircmathresult > 45 \ifnum \pgfcircmathresult < 135
+ \pgftransformrotate{270}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 135 \ifnum \pgfcircmathresult < 225
+ \pgftransformrotate{180}
+ \fi\fi
+ \ifnum \pgfcircmathresult > 225 \ifnum \pgfcircmathresult < 315
+ \pgftransformrotate{90}
+ \fi\fi
+
+ % inner symbol
+ \pgftext[center,x=0,y=0]{\Large$\varphi$}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0.65\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.65\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+%% detector
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/detector/width}}
+{detector}
+{\ctikzvalof{bipoles/detector/width}}
+{\ctikzvalof{bipoles/detector/width}}
+{
+ \pgf@circ@res@step = \ctikzvalof{bipoles/detector/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 2
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+
+ \ifpgf@circuit@dashed
+ \pgfsetdash{{0.1cm}{0.1cm}}{0cm}
+ \fi
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ \ifpgf@circuit@inputarrow
+ {
+ \advance \pgf@circ@res@left by -.5\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{inputarrow}{tip}{}{pgf@inputarrow}{\pgfusepath{fill}}
+ }
+ \fi
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{0.8\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0.75\pgf@circ@res@left}{0}}
+ \pgfpathlineto{\pgfpoint{0.75\pgf@circ@res@right}{0}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@fulldiode
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{fulldiodeshape}{center}{}{pgf@fulldiode}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{2\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width}}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{emptydiodeshape}{center}{}{pgf@emptydiode}{\pgfusepath{fill}}
+ \fi
+
+}
+
+
+
+
+%% european gas filled surge arrester
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{european gas filled surge arrester}
+{\ctikzvalof{bipoles/european gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/european gas filled surge arrester/width}}
+{
+
+ %\pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ %\divide \pgf@circ@res@step by 14
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@draworfill
+
+ \pgfscope
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/european gas filled surge arrester/inside}\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+}
+
+
+
+
+%% american gas filled surge arrester
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{american gas filled surge arrester}
+{\ctikzvalof{bipoles/american gas filled surge arrester/height}}
+{\ctikzvalof{bipoles/american gas filled surge arrester/width}}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpointorigin \pgf@circ@res@other = \pgf@x \advance \pgf@circ@res@other by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpointorigin}{.9\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfsetarrowsend{latex}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/inside}\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope{}
+
+ \pgfcircle{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot x}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/dot y}\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/bipoles/american gas filled surge arrester/size}\pgf@circ@res@down}
+ \pgfusepath{fill}
+}
+
+% % MECHANICAL SYMBOLS
+
+%% mechanical capacitance - stiffness/spring
+
+\pgfcircdeclarebipole{}{\ctikzvalof{bipoles/spring/height}}{spring}{\ctikzvalof{bipoles/spring/height}}{\ctikzvalof{bipoles/spring/width}}{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+
+ \pgfmathsetlength{\pgf@circ@res@step}
+ {(\ctikzvalof{bipoles/spring/width}*\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth)/16}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+ \pgfsetcornersarced{\pgfpoint{.5\pgf@circ@res@up}{.5\pgf@circ@res@up}}
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbuttcap
+ \pgfsetbeveljoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical inductance - mass
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/mass/box height}}
+{mass}
+{\ctikzvalof{bipoles/mass/height}}
+{\ctikzvalof{bipoles/mass/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfpathrectangle{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ {\pgfpoint{-2\pgf@circ@res@down}{-2\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+}
+
+%% mechanical resistor - damper
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/damper/height}}
+{damper}
+{\ctikzvalof{bipoles/damper/height}}
+{\ctikzvalof{bipoles/damper/width}}
+{
+ \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@maybefill
+
+ % line into the damper
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {\pgf@circ@res@zero}}
+ \pgfusepath{stroke}
+
+ % damper box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ % damper vertical element
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+%% mechanical viscoelastic element, suggested by @alex
+%% in https://tex.stackexchange.com/questions/484268/combined-spring-damper-in-circuitikz
+\pgfcircdeclarebipole
+{} % extra anchors
+{\ctikzvalof{bipoles/damper/height}} % depth (under the path line)
+{viscoe} % name
+{\ctikzvalof{bipoles/damper/height}} % height (above the path line)
+{\ctikzvalof{bipoles/damper/width}} % width
+{ % draw the bipole
+ \pgfpathrectanglecorners{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@maybefill
+
+ % spring into the damper
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpoint{.25\pgf@circ@res@up}{.25\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.75\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@left}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-.75\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}{.75\pgf@circ@res@up}}
+ \pgfusepath{stroke}
+ \endpgfscope
+ % damper box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+
+ \pgfsetrectcap
+ \pgfsetmiterjoin
+ \pgfusepath{stroke}
+
+ % damper vertical element
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{bipoles/damper/length}\pgf@circ@res@right}
+ {.8\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{stroke}
+
+}
+
+
+\pgfcircdeclarebipole
+{% anchor for labelling the type of dependency
+ \anchor{label}{%
+ \southwest
+ \pgf@x=0.4\pgf@x
+ }%
+}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{resistivesens}
+{\ctikzvalof{bipoles/resistivesens/height}}
+{\ctikzvalof{bipoles/resistivesens/width}}
+{%
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-.4\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-.9\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+%% crossing bipole (but see also nodes)
+\pgfcircdeclarebipole
+ {}
+ {\ctikzvalof{bipoles/crossing/size}}
+ {crossing}
+ {\ctikzvalof{bipoles/crossing/size}}
+ {\ctikzvalof{bipoles/crossing/size}}{
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpathlineto{\pgfpoint{0.4\pgf@circ@res@left}{\pgf@circ@res@zero}}
+ \pgfpatharc{0}{-180}{0.4*\pgf@circ@res@left}
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@zero}}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+
+%% loudspeaker and microphone
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/loudspeaker/depth}}
+{loudspeaker}
+{\ctikzvalof{bipoles/loudspeaker/height}}
+{\ctikzvalof{bipoles/loudspeaker/width}}{
+
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@left}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.8\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ \pgfpathclose
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+}
+
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/mic/depth}}
+{mic}
+{\ctikzvalof{bipoles/mic/height}}
+{\ctikzvalof{bipoles/mic/width}}{
+
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathcircle{\pgfpoint{0pt}{.6\pgf@circ@res@up}}{.4\pgf@circ@res@up}
+ \pgf@circ@draworfill
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{0pt}}
+ % 0.25358 is 0.6-0.4*cos(30)
+ \pgfpathlineto{\pgfpoint{-.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@up}{.25358\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@up}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% generic round meter with always horizontal text, no arrow
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeter}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ % draw the text label
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgftransformrotate{\rot}
+ \pgftext[center,x=0,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% generic round meter with always horizontal text, with arrow
+\pgfcircdeclarebipole
+{}
+{\ctikzvalof{bipoles/esource/height}}
+{rmeterwa}
+{\ctikzvalof{bipoles/esource/height}}
+{\ctikzvalof{bipoles/esource/width}}
+{
+ \pgfpointorigin
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@left}{0}}
+ \pgf@circ@draworfill
+ % draw the text label
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ % arrow: create a center hole to have better visual
+ \pgfscope
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next open a circle into it
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0}{.6\pgf@circ@res@up}}{\pgfpoint{.6\pgf@circ@res@left}{0}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfsetarrowsend{latexslim}
+ % the arrow is better if it has a bit of breath and it's not 45º
+ \pgfpathmoveto{\pgfpoint{.8\pgf@circ@res@left}{1.2\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.8\pgf@circ@res@right}{1.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgftext[center]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% generic square meter with always horizontal text
+\pgfcircdeclarebipole
+{
+ \anchor{in 1}{\southwest\pgf@y=0.75\pgf@y\pgf@x=0.4\pgf@x}
+ \anchor{in 2}{\southwest\pgf@y=0.75\pgf@y\pgf@x=-0.4\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/smeter/height}}
+{smeter}
+{\ctikzvalof{bipoles/smeter/height}}
+{\ctikzvalof{bipoles/smeter/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ % get the rotation
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ % and unrotate the scope
+ \pgfscope
+ \pgftransformrotate{\rot}
+ % the metering window
+ \pgfscope
+ \def\@starta{105}\def\@stopa{75}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgftransformshift{\pgfpoint{0pt}{-1.8\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{\@starta}{2\pgf@circ@res@up}}
+ \pgfpatharc{\@starta}{\@stopa}{2\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}}
+ \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up}
+ \pgfclosepath
+ \pgfpathmoveto{\pgfpointpolar{80}{2\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointpolar{80}{2.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgftext[center, y=0.5\pgf@circ@res@down]{\ctikzvalof{bipoles/twoport/text}}
+ \endpgfscope
+}
+
+% probles qucs style:
+% #1 : name
+% #2 : extra code
+\long\def\pgfcirc@qucsprobe#1#2{
+ \pgfcircdeclarebipole
+ {
+ \anchor{v+}{\southwest\pgf@x=0.6\pgf@x}
+ \anchor{v-}{\southwest\pgf@x=-0.6\pgf@x}
+ % put the node text above and centered
+ \anchor{text}{\pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+ }
+ {\ctikzvalof{bipoles/qmeter/depth}}
+ {#1}
+ {\ctikzvalof{bipoles/qmeter/height}}
+ {\ctikzvalof{bipoles/qmeter/width}}
+ {
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\southwest}
+ \pgfextracty{\pgf@circ@res@down}{\southwest}
+ \pgfmathsetlength{\pgf@circ@res@step}{0.25*\pgf@circ@res@up}
+ \pgfscope
+ \pgfscope
+ \pgfsetcornersarced{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@step}}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \def\@starta{103}\def\@stopa{77}
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{0pt}{-1.7\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{\@starta}{2.1\pgf@circ@res@up}}
+ \pgfpatharc{\@starta}{\@stopa}{2.1\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpointpolar{\@stopa}{2.5\pgf@circ@res@up}}
+ \pgfpatharc{\@stopa}{\@starta}{2.5\pgf@circ@res@up}
+ \pgfclosepath
+ \pgfpathmoveto{\pgfpointpolar{83}{2.1\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointpolar{83}{2.4\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgf@circ@draworfill
+ \endpgfscope
+ #2
+ \endpgfscope
+ }
+}
+
+\pgfcirc@qucsprobe{qiprobe}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgfnode{currarrow}{center}{}{}{}
+}
+
+\pgfcirc@qucsprobe{qvprobe}{
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{0pt}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}{\pgf@circ@res@other}
+ \pgfusepath{draw}
+ \pgfscope
+ % "+" and "-", drawn so that they scale correctly
+ \pgfsetlinewidth{2\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-1.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+\pgf@circ@res@other}{-3.5\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right+0\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-2.5\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+\pgfcirc@qucsprobe{qpprobe}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \pgfnode{currarrow}{center}{}{}{}
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@left}{-3\pgf@circ@res@other}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{-4\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathcircle{\pgfpoint{.6\pgf@circ@res@right}{-3\pgf@circ@res@other}}{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right}{-4\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \pgfscope
+ % "+" and "-", drawn so that they scale correctly
+ \pgfsetlinewidth{2\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-2\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+3\pgf@circ@res@other}{-4\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left+2\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@left+4\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@right-4\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{.6\pgf@circ@res@right-2\pgf@circ@res@other}{-3\pgf@circ@res@other}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% current loop for oscope and similar: stylized
+
+\pgfcircdeclarebipole
+{
+ \anchor{i}{\northeast\pgf@x=0pt\relax}
+ \anchor{text}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@down=-\pgf@circ@res@up
+ \pgf@circ@res@left=-\pgf@circ@res@right
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % external ellipse
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgflinewidth}
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next the opening to the left
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}}
+ {\pgfpoint{0pt}{.1\pgf@circ@res@up}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathellipse{\pgfpointorigin}{
+ \pgfpoint{0pt}{0.8\pgf@circ@res@up}}{
+ \pgfpoint{0.4\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal wire
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % and the contact line up
+ \pgfpathmoveto{\pgfpoint{0pt}{0.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% current loop for oscope and similar: real (double connection)
+
+\pgfcircdeclarebipole
+{
+ \anchor{i+}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgf@y=\pgf@circ@res@up
+ }
+ \anchor{i-}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgf@y=\pgf@circ@res@up
+ }
+ \anchor{text}{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@left}{\northeast}
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+\pgf@circ@res@left}{
+ \dimexpr.5\dp\pgfnodeparttextbox+.5\ht\pgfnodeparttextbox+\pgf@circ@res@up\relax
+ }
+ }
+}
+{\ctikzvalof{bipoles/iloop/height}}
+{iloop2}
+{\ctikzvalof{bipoles/iloop/height}}
+{\ctikzvalof{bipoles/iloop/width}}
+{
+ \pgfextracty{\pgf@circ@res@up}{\northeast}
+ \pgfextractx{\pgf@circ@res@right}{\northeast}
+ \pgf@circ@res@down=-\pgf@circ@res@up
+ \pgf@circ@res@left=-\pgf@circ@res@right
+ % must be the same than internal i+ and i- anchors definition
+ \pgf@circ@res@step=0.4\pgf@circ@res@right
+ \pgf@circ@res@other=0.8\pgf@circ@res@up
+ \def\@plus{\pgfpointpolar{105}{\pgf@circ@res@step and \pgf@circ@res@other}}
+ \def\@minus{\pgfpointpolar{75}{\pgf@circ@res@step and \pgf@circ@res@other}}
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % external ellipse
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{bipoles/thickness}\pgflinewidth}
+ % clipping path: first a rectangle bigger then the shape
+ % to avoid problems with the line thickness
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{2\pgf@circ@res@down}}
+ {\pgfpoint{2\pgf@circ@res@right}{2\pgf@circ@res@up}}
+ % next the opening to the left
+ \pgfpathrectanglecorners{\pgfpoint{2\pgf@circ@res@left}{.1\pgf@circ@res@down}}
+ {\pgfpoint{0pt}{.1\pgf@circ@res@up}}
+ % do the difference and clip before drawing
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathmoveto{\@plus}
+ \pgfpatharc{105}{435}{\pgf@circ@res@step and \pgf@circ@res@other}
+ \pgfusepath{draw}
+ \endpgfscope
+ % internal wire
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{0pt}}
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ % and the contact line up
+ % I use ...left and ---right as temporal lengths here to avoid defining more
+ \pgfextractx{\pgf@circ@res@left}{\@plus}
+ \pgfextractx{\pgf@circ@res@right}{\@minus}
+ \pgfpathmoveto{\@plus}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\@minus}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+% end of pgfcircbipoles.tex
+%%%---------- close: tex/pgfcircbipoles
+%%%%%%%%%%% Springe nach tex/pgfcirctripoles
+%%%---------- open: tex/pgfcirctripoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Tripoles
+
+\pgfdeclareshape{spdt}{
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out 1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{out 2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/margin}\pgf@circ@res@left
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfnode{ocirc}{center}{}{spdt1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfnode{ocirc}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfnode{ocirc}{center}{}{spdt2}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpointshapeborder{spdt2}{\pgfpointorigin}}
+ \pgfpathlineto{
+ \pgfpointadd{\pgfpointshapeborder{spdt1}{\pgfpoint{-\pgf@circ@res@other}{-100pt}}}
+ {\pgfpoint{-.05\pgf@circ@res@up}{-.05\pgf@circ@res@up}}
+ }
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+
+% cute switch "node" shapes, matching with cute "to" shapes
+% #1 -> name
+% #2 -> barposition
+% #3 -> arrowcode
+\long\def\pgfcircdeclarecutespdt#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/cuteswitch/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@x=.25\pgf@x
+ }
+ \savedanchor\midlever{
+ % these values are calculated when we create the definition of the shape.
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/cuteswitch/height}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/nodes width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgf@circ@res@down = -.5\pgf@y
+ \pgf@circ@res@up = .5\pgf@y
+ \pgfextracty{\pgf@circ@res@other}{#2}
+ \pgf@x=0pt
+ \pgf@y=.5\pgf@circ@res@other
+ }
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{bipoles/cuteswitch/shape}}}
+ % mid of the lever, to stack switches
+ \anchor{mid}{\midlever}
+ % center anchors
+ \anchor{cin}{ \northwest \pgf@y=0pt}
+ \anchor{cout 1}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{cout 2}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ % horizontal angles
+ \anchor{in}{ \northwest \pgf@y=0pt\advance\pgf@x by -\radius}
+ \anchor{out 1}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius}
+ \anchor{out 2}{ \northwest \pgf@x=-\pgf@x \advance\pgf@x by \radius \pgf@y=-\pgf@y }
+
+ \anchor{center}{ \pgf@y=0pt \pgf@x=0pt }
+ \anchor{east}{ \northwest \pgf@y=0pt \pgf@x=-\pgf@x }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{north}{ \northwest \pgf@x=0pt }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\radius\relax
+ \pgf@circ@res@temp=\ctikzvalof{bipoles/cuteswitch/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{#2}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+ \pgfscope % arrow
+ #3
+ \endpgfscope
+ % terminals
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out 1}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out 2}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ }
+ }
+}
+
+\pgfcircdeclarecutespdt{cute spdt up}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt mid}
+{\pgfpoint{\pgf@circ@res@right}{0pt}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt down}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}}
+{}
+
+\pgfcircdeclarecutespdt{cute spdt up arrow}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up-1.5\pgf@circ@res@temp}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{70}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{70}{-50}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt mid arrow}
+{\pgfpoint{\pgf@circ@res@right}{0pt}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpointpolar{-60}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{-60}{60}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+\pgfcircdeclarecutespdt{cute spdt down arrow}
+{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down+1.5\pgf@circ@res@temp}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % in node
+ \pgfpathmoveto{\pgfpointpolar{-50}{1.5\pgf@circ@res@right}}
+ \pgfpatharc{-50}{70}{1.5\pgf@circ@res@right}
+ \pgfsetarrowsend{latexslim}
+ \pgfusepath{draw}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Logic ports
+%%
+%% Code from John Kormylo at tex.stackexchange.com
+%% See https://tex.stackexchange.com/questions/372993/is-it-possible-to-implement-multiple-input-logic-ports-with-circuitikz
+%% Integration and fixes from Romano Giannetti and TheTeXnician <38565529+TheTeXnician@users.noreply.github.com>
+%%
+
+\newcount\pgf@circ@res@count% reserve global register
+
+\def\pgf@circ@logicport@input#1% #1 = \pgfmathcounter
+{%
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+}%
+
+% #1 = \pgfmathcounter #2=type #3 specificic port
+% type is 1 for and,nand; 2 for or,nor; 3 for xor,xnor, 4 for european.
+\def\pgf@circ@logicport@baseinput#1#2#3%
+{%
+ % and and nand
+ \ifnum #2=1\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/port width}\pgf@circ@res@left
+ \fi
+ % or and nor
+ \ifnum #2=2\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/angle}}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgf@y
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgf@x=\pgf@circ@res@other
+ \fi
+ % xor and xnor
+ \ifnum #2=3\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american #3 port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #3 port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@circ@res@temp=\pgf@y
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgf@x=\pgf@circ@res@other
+ \fi
+ % european
+ \ifnum #2=4\relax
+ \pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@other}{\left}%
+ \step
+ \pgf@circ@res@step=\dimexpr 2\pgf@y -2\pgf@circ@res@up\relax
+ \advance\pgf@y by -#1\pgf@circ@res@step\relax
+ \pgf@x=\pgf@circ@res@other
+ \fi
+}%
+
+%%% american
+\long\def\pgfcircdeclarelogicport#1#2#3{%
+ \pgfdeclareshape{american #1 port}%
+ {%
+ \savedmacro\resize{% automatic
+ \pgf@circ@res@up = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgf@circ@res@down = -\pgf@circ@res@up
+ \pgf@circ@res@right = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/width}\pgf@circ@Rlen
+ \pgf@circ@res@right = .5\pgf@circ@res@right
+ \pgf@circ@res@left = -\pgf@circ@res@right
+ }%
+ \savedmacro\inputs{% get number of inputs
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+ \ifnum\pgf@circ@res@count=0
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/inputs}\relax%
+ \fi
+ \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi
+ \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi
+ \def\inputs{\the\pgf@circ@res@count}%
+ }%
+ \savedanchor\step{% 1/2 gap at edges
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/height}\pgf@circ@Rlen
+ \divide\pgf@circ@res@step by \pgf@circ@res@count
+ \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}%
+ }%
+ \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \savedanchor\left{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/port width}\pgf@circ@res@left}{0pt}}
+ \savedanchor\right{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/port width}\pgf@circ@res@right}{0pt}}
+ \savedanchor\origin{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american #1 port/origin}\pgf@circ@res@right}{0pt}}
+
+ \anchor{center}{\origin}% for backwards compatibility
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % create input anchors
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@american #1 port\endcsname{%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@circ@res@count%
+ \else%
+ %\pgfutil@ifundefined{pgf@anchor@american #1 port@in \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@american #1 port@in \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above
+ }%
+ \expandafter\xdef\csname pgf@anchor@american #1 port@bin \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{#2}{#1}% defined above
+ }%
+ %}{}%
+ \repeatpgfmathloop%
+ }
+
+ \anchor{out}{\northeast\pgf@y=0pt}
+ \anchor{bout}{\right\pgf@y=0pt}
+
+
+ \anchor{left}{\left}% edges of component mius leads
+ \anchor{right}{\right}
+
+ \anchor{north east}{\northeast}% see \Compass macro
+ \anchor{south west}{\southwest}
+ \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfpoint{0cm}{\pgf@circ@res@up}}
+ \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{0cm}}
+ \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfpoint{0cm}{\pgf@circ@res@down}}
+ \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{0cm}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ #3
+ }
+}
+}
+%%% american and %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{and}{1}{
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@right}
+ {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american and port/port width}\pgf@circ@res@left
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpatharc{-90}{90}{-2\pgf@circ@res@other and \pgf@circ@res@up}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ }
+%%% american nand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \pgfcircdeclarelogicport{nand}{1}{
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right} {0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nand port/port width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \pgfpatharc{-90}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other-.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgf@circ@draworfill
+}
+%%% american nor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{nor}{2}{
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/angle}}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/angle}}%
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american nor port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+ \advance\pgf@circ@res@other by -\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+
+ \pgf@circ@draworfill
+}
+%%% american or %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{or}{2}{
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/angle}}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up /sin(\pgf@circ@math@angle)}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp/\pgf@circ@math@yradius)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradius*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american or port/angle}}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgf@circ@draworfill
+}
+%%% american xor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xor}{3}{
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xor port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/angle}}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{2\pgf@circ@res@other and \pgf@circ@res@up}%
+ \pgfpathclose
+ \pgf@circ@draworfill
+
+ \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}%
+
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}%
+
+ \pgfusepath{draw}
+}
+%%% american xnor %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfcircdeclarelogicport{xnor}{3}{
+ \pgfkeysgetvalue{/tikz/circuitikz/tripoles/american xnor port/angle}{\pgf@circ@math@angle}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/inner}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradius}{\pgf@circ@res@other /(1 - cos(\pgf@circ@math@angle)}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradius}{\pgf@circ@res@up / sin(\pgf@circ@math@angle))}%
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@xorigin}{\pgf@circ@res@other + \pgf@circ@math@xradius*cos(\pgf@circ@math@angle)}%
+ \pgf@circ@res@temp=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xor port/distance}\pgf@circ@res@right
+ \pgfmathsetlengthmacro{\pgf@circ@math@distance}{\pgf@circ@res@temp}
+ % this compensates for the effect of the line width on the gap between the arcs
+ \pgfmathsetlengthmacro{\pgf@circ@math@yradiusA}{\pgf@circ@math@yradius -2\pgflinewidth}%
+ \pgfmathsetlengthmacro{\pgf@circ@math@xradiusA}{\pgf@circ@math@xradius -2\pgflinewidth}%
+
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ \pgf@circ@res@count = \inputs\relax
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfmathsetmacro{\pgf@circ@math@angle}{asin(\pgf@circ@res@temp / \pgf@circ@math@yradiusA)}%
+ \pgfmathsetlength{\pgf@circ@res@other}{\pgf@circ@math@xradiusA*cos(\pgf@circ@math@angle)-\pgf@circ@math@xorigin}%
+ \advance\pgf@circ@res@other by -\pgf@circ@math@distance
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@temp}}%
+ \advance\pgf@circ@res@count by -1
+ \repeat
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \edef\pgf@circ@math@angle{\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/angle}}%
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/circle width}\pgf@circ@res@right
+ \pgf@circ@res@temp = \dimexpr 2\pgf@circ@res@other - \pgf@circ@res@step\relax
+ \advance\pgf@circ@res@other by -\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}% for symmetry
+ \pgfpatharc{0}{90}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradius and \pgf@circ@math@yradius}%
+ \pgfpatharc{-90}{0}{\pgf@circ@res@temp and \pgf@circ@res@up}%
+ \pgfpathclose
+
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@other+.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@step}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@step}}
+ \pgf@circ@draworfill
+
+ \pgf@circ@res@other=\pgfkeysvalueof{/tikz/circuitikz/tripoles/american xnor port/port width}\pgf@circ@res@left
+ \pgfmathsetlength{\pgf@circ@res@temp}{(\pgf@circ@math@yradiusA)*sin(\pgf@circ@math@angle)}%
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other-\pgf@circ@math@distance}{\pgf@circ@res@temp}}% first arc
+ \pgfpatharc{\pgf@circ@math@angle}{-\pgf@circ@math@angle}{\pgf@circ@math@xradiusA and \pgf@circ@math@yradiusA}%
+
+ \pgfusepath{draw}
+}
+
+%%% Original one-input ports
+
+\pgfdeclareshape{american not port}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgf@circ@draworfill
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+ }
+}
+
+\pgfdeclareshape{invschmitt}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfpathellipse
+ {\pgfpoint{\pgf@circ@res@step-.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{.5\pgf@circ@res@other}{0pt}}
+ {\pgfpoint{0pt}{.5\pgf@circ@res@other}}
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+}
+
+\pgfdeclareshape{schmitt}{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.8\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/bipoles/not port/circle width}\pgf@circ@res@right
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw}
+ %draw inner shape
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+
+ \pgfpathmoveto{\pgfpoint{.6\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.05\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{.4\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.25\pgf@circ@res@left}{.3\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ }
+}
+
+
+%%% start european logic ports, from John Kormylo
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+
+% #1 - name
+% #2 - text inside
+% #3 - number of inputs
+% #4 = is it a not?
+
+\long\def\pgfcircdeclareeurologicport#1#2#3#4{
+ \pgfdeclareshape{european #1 port}
+ {
+ \savedmacro\resize{% automatic
+ \pgf@circ@res@up = \pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \pgf@circ@res@up = .5\pgf@circ@res@up
+ \pgf@circ@res@down = -\pgf@circ@res@up
+ \pgf@circ@res@right = \pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/width}\pgf@circ@Rlen
+ \pgf@circ@res@right = .5\pgf@circ@res@right
+ \pgf@circ@res@left = -\pgf@circ@res@right
+ }%
+ \savedmacro\inputs{% get number of inputs
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/number inputs}\relax%
+ \ifnum\pgf@circ@res@count=0
+ \pgf@circ@res@count=\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/inputs}\relax%
+ \fi
+ \ifnum\pgf@circ@res@count<2 \pgf@circ@res@count=2\fi
+ \ifnum\pgf@circ@res@count>16 \pgf@circ@res@count=16\fi
+ \def\inputs{\the\pgf@circ@res@count}%
+ }%
+ \savedanchor\step{% 1/2 gap at edges
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/height}\pgf@circ@Rlen
+ \divide\pgf@circ@res@step by #3
+ \pgfpoint{\pgf@circ@res@left}{\dimexpr\pgf@circ@res@up+0.5\pgf@circ@res@step}%
+ }%
+ \savedanchor\northeast{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}%
+ \savedanchor\southwest{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}%
+ \savedanchor\left{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}%
+ \savedanchor\right{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}%
+ \savedanchor\origin{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/origin}\pgf@circ@res@right}{0pt}}%
+
+ \anchor{center}{\origin}% for backwards compatibility
+ % the text anchor overlaps the logic symbol
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}%
+ % create input anchors
+ \ifnum#3=1\relax
+ \anchor{in}{\pgfpoint{\pgf@circ@res@left}{0pt}}% or \step
+ \else
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@european #1 port\endcsname{%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>#3%
+ \else%
+ %\pgfutil@ifundefined{pgf@anchor@european #1 port@in \pgfmathcounter}{% redundant
+ \expandafter\xdef\csname pgf@anchor@european #1 port@in \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@input{\pgfmathcounter}% defined above
+ }%
+ \expandafter\xdef\csname pgf@anchor@european #1 port@bin \pgfmathcounter\endcsname{%
+ \noexpand\pgf@circ@logicport@baseinput{\pgfmathcounter}{4}{#1}% defined above
+ }%
+ %}{}%
+ \repeatpgfmathloop%
+ }
+ \fi
+ \anchor{out}{\northeast\pgf@y=0pt}
+ \anchor{bout}{\right\pgf@y=0pt}
+
+ \anchor{left}{\left}% edges of component minus leads
+ \anchor{right}{\right}
+
+ \anchor{north east}{\northeast}% see \Compass macro
+ \anchor{south west}{\southwest}
+ \anchor{north}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfpoint{0cm}{\pgf@circ@res@up}}
+ \anchor{north west}{\pgfextracty{\pgf@circ@res@up}{\northeast}%
+ \pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \anchor{west}{\pgfextractx{\pgf@circ@res@left}{\southwest}%
+ \pgfpoint{\pgf@circ@res@left}{0cm}}
+ \anchor{south}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfpoint{0cm}{\pgf@circ@res@down}}
+ \anchor{south east}{\pgfextracty{\pgf@circ@res@down}{\southwest}%
+ \pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \anchor{east}{\pgfextractx{\pgf@circ@res@right}{\northeast}%
+ \pgfpoint{\pgf@circ@res@right}{0cm}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfpathrectanglecorners
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ {\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \ifnum#3=1\relax
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}%
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}{0pt}}%
+ \else
+ \pgfextracty{\pgf@circ@res@temp}{\step}%
+ \pgf@circ@res@step = \dimexpr 2\pgf@circ@res@temp -2\pgf@circ@res@up\relax
+ %\pgf@circ@res@count = #3\relax% redundant
+ \loop\ifnum\pgf@circ@res@count>0
+ \advance\pgf@circ@res@temp by -\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp}}%
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@left}
+ {\pgf@circ@res@temp}}
+ \advance\pgf@circ@res@count by -1
+ \repeat
+ \fi
+ %
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}{0pt}}
+ %
+ \edef\pgf@temp{not}
+ \edef\pgf@circ@temp{#4}
+ \ifx\pgf@temp\pgf@circ@temp % is a not
+ \pgfpathmoveto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not width}\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/reserved}\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/european #1 port/not height}\pgf@circ@res@up}}
+ \fi
+ %
+ \pgfusepath{draw}
+ %
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgftext{#2}
+ %
+ %
+ %
+ }
+ }
+}
+\pgfcircdeclareeurologicport{and}{\&}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{or}{$\ge 1$}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{xor}{$=1$}{\pgf@circ@res@count}{}
+\pgfcircdeclareeurologicport{not}{$1$}{1}{not}
+\pgfcircdeclareeurologicport{nand}{\&}{\pgf@circ@res@count}{not}
+\pgfcircdeclareeurologicport{nor}{$\ge 1$}{\pgf@circ@res@count}{not}
+\pgfcircdeclareeurologicport{xnor}{$=1$}{\pgf@circ@res@count}{not}
+
+%% end european logic ports
+
+\long\def\pgfcircdeclaretransistor#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northeast{% upper right
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%center left
+ \pgf@y=0pt
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/width}\pgf@circ@Rlen
+ }
+ \anchor{text}{
+ \northeast
+ \pgf@y=.7\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=0.1\pgf@x
+ }
+ \anchor{pathstart}{ % south
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{pathend}{
+ \northeast
+ }
+ \anchor{north}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \northeast
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=-\pgf@circ@res@step
+ }
+ \anchor{north east}{
+ \northeast
+ }
+ \anchor{north west}{
+ \northeast
+ \pgf@circ@res@step=\pgf@y
+ \left
+ \pgf@y=\pgf@circ@res@step
+ }
+ \anchor{south east}{
+ \northeast
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{base}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{G}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{gate}{
+ \northeast
+ \pgf@circ@res@step=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@y
+ \left
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@circ@res@step
+ }
+ \anchor{nobase}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@x
+ }
+ \anchor{nogate}{
+ \left
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@x
+ }
+ \anchor{E}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{emitter}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{C}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{collector}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{S}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{source}{
+ \northeast
+ \pgf@y=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{D}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ \anchor{drain}{
+ \northeast
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction}\pgf@y
+ }
+ #2
+ \backgroundpath{
+ \pgftransformationadjustments
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \ifnum \pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/curr direction} > 0
+ \pgf@circuit@trans@ntypetrue
+ \else
+ \pgf@circuit@trans@ntypefalse
+ \fi
+ \northeast
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \left
+ \pgf@circ@res@left = \pgf@x
+ %
+ #3
+ % BODY DIODE
+ \ifpgf@circuit@fet@bodydiode
+ \drawbodydiode{#1}
+ \fi
+ %
+ }
+}
+}
+
+\long\def\drawbodydiode#1{
+ \pgfscope
+ \pgftransformshift{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgftransformrotate{90}
+ \pgftransformscale{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode scale}}
+ \ifpgf@circuit@fulldiode
+ \pgfnode{fulldiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \else
+ \pgfnode{emptydiodeshape}{center}{}{pgf@bodydiode}{\pgfusepath{fill}}
+ \fi
+ \endpgfscope
+ % Draw stroke line
+ \ifpgf@circuit@strokediode
+ \pgfpathmoveto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{stroke}
+ \fi
+ %Draw upper connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{east}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@up}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope{}
+ %Draw lower connection to body diode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode distance}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpointanchor{pgf@bodydiode}{west}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right} {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/bodydiode conn}\pgf@circ@res@down}}
+ \pgftransformscale{0.5}
+ \pgfnode{circ}{center}{}{}{\pgfusepath{fill}}
+ \endpgfscope
+}
+
+\long\def\declarebpt#1{
+ \pgfcircdeclaretransistor{#1}{}{
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transistor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/arrow pos}}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/arrow pos}}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \ifpgf@circuit@bpt@drawphoto
+ \pgfscope
+ \pgfsetarrowsstart{latexslim}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.3\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.05\pgf@circ@res@left}{-0.1\pgf@circ@res@up}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ {\pgfpoint{0.5\pgf@circ@res@left}{0.1\pgf@circ@res@up}}}
+ \pgfusepath{draw}
+ \endpgfscope
+ \else
+ \ifpgf@circuit@bpt@drawbase
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \fi
+ }
+}
+
+\declarebpt{npn}
+\declarebpt{pnp}
+
+\long\def\declareigbt#1{
+ \pgfcircdeclaretransistor{#1}{}
+ {
+ %draw upper connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ %draw thicker gate lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5\pgflinewidth}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %draw lower connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+ %draw arrow depending on type of transiytor
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \ifpgf@circuit@trans@ntype
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}%
+ }
+ \else
+ \pgftransformlineattime{.5}{%
+ \pgfpoint{\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height 2}\pgf@circ@res@up}%
+ }
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ %draw gate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@up}}
+ \fi
+ \pgfusepath{draw}
+ }
+}
+
+\declareigbt{pigbt}
+\declareigbt{nigbt}
+\declareigbt{Lnigbt}
+\declareigbt{Lpigbt}
+
+
+\pgfcircdeclaretransistor{nmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/arrow pos}}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate height}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+}
+
+
+\pgfcircdeclaretransistor{pmos}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \ifpgf@circuit@mos@arrows
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/arrow pos}}{%
+ \pgfpoint%
+ {\pgf@circ@res@right}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \fi
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base height}\pgf@circ@res@down}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+
+
+ \pgfusepath{draw}
+ \ifpgf@circuit@bpt@drawgate
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \fi
+ \ifpgf@circuit@pmos@nocircle\else
+ \pgfpathcircle{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pmos/gate width}\pgf@circ@res@left - \pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}{\pgfkeysvalueof{/tikz/circuitikz/nodes width}*\pgf@circ@Rlen}
+ \ifpgf@circuit@pmos@emptycircle
+ \pgfsetfillcolor{white}
+ \fi
+ \pgfusepath{draw,fill}
+ \fi
+}
+
+%% HEMT FET Transistor
+\pgfcircdeclaretransistor{hemt}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{2\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/hemt/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+\long\def\drawfetcore#1{
+ \pgftransformationadjustments
+ %top connection
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up}}
+ \ifpgf@circuit@trans@depletiontype
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \else
+
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.45}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@up*0.25}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down*0.25}}
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/nfet/base height}\pgf@circ@res@down*0.45}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base height}\pgf@circ@res@down}}
+ \fi
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+ %Bulk connection line
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ %bottom connection
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ %draw thick gate line
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate height}\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \ifpgf@circuit@trans@ntype
+ \else
+ \pgftransformrotate{180}
+ \fi
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+\endpgfscope
+
+% GATE CONNECTION
+\ifpgf@circuit@bpt@drawgate
+ \ifpgf@circuit@trans@ntype
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \else
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/gate width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/#1/conn height}\pgf@circ@res@down}}
+ \fi
+ \pgfusepath{draw}
+\fi
+
+}
+
+\long\def\pgfdeclaretransistorwrapperaddbulk#1#2#3
+{\pgfcircdeclaretransistor{#1}{
+ \anchor{bulk}{\left\pgf@x=0pt}
+ \anchor{B}{\left\pgf@x=0pt}%override Base anchor from npn&igbt
+ #2
+ }
+ {#3}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{nfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nfet}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{pfet}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pfet}
+}
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfete}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+\fi
+}
+
+
+
+
+% N-CHANNEL IGFET ENHANCEMENT TYPE with Bulk connector
+\pgfdeclaretransistorwrapperaddbulk{nigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{nigfetebulk}
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfetebulk/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+
+
+% N-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{nigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{nigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfete}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfete}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/pigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope
+ \fi
+}
+
+% P-CHANNEL IGFET ENHANCEMENT TYPE with bulk connector
+\pgfdeclaretransistorwrapperaddbulk{pigfetebulk}{}{%
+ \pgf@circuit@trans@depletiontypefalse
+ \drawfetcore{pigfetebulk}
+}
+
+
+% P-CHANNEL IGFET DEPLETION TYPE
+\pgfdeclaretransistorwrapperaddbulk{pigfetd}{}{%
+ \pgf@circuit@trans@depletiontypetrue
+ \drawfetcore{pigfetd}
+
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@up}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+}
+
+\pgfcircdeclaretransistor{njfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/njfet/gate height 2}\pgf@circ@res@down}}
+ \pgfusepath{draw}
+}
+
+
+\pgfcircdeclaretransistor{pjfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.4}{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }{%
+ \pgfpoint{\pgf@circ@res@left}%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*.5*\pgflinewidth}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/pjfet/gate height 2}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+}
+
+
+\pgfdeclaretransistorwrapperaddbulk{isfet}{}{%
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ % DRAIN CONNECTION
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ % DRAIN
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ % GATE, DEPLETION TYPE
+ \pgfscope %% added
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base height}\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth} %% added
+ \pgfusepath{draw} %% added
+ \endpgfscope %% added
+
+ % BULK
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+.5\pgflinewidth}
+ {\pgf@circ@res@up+\pgf@circ@res@down}}
+
+ % SOURCE
+ \pgfpathmoveto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/gate height}\pgf@circ@res@down}}
+ % SOURCE CONNECTION
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down-\pgfverticaltransformationadjustment*.5*\pgflinewidth}}
+ \pgfusepath{draw}
+
+
+ % SOLDER DOT at source-bulk connection
+ \ifpgf@circuit@fet@solderdot
+ \pgfscope
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@right}{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/nigfete/gate height}\pgf@circ@res@down}}
+ \pgfnode{circ}{center}{}{}{}
+ \endpgfscope{}
+ \fi
+ % ARROW
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgfresetnontranslationattimefalse
+ \pgftransformlineattime{.6}{%
+ \pgfpoint
+ {\pgf@circ@res@right}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }{%
+ \pgfpoint%
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/base width}\pgf@circ@res@left}%
+ {\pgf@circ@res@up+\pgf@circ@res@down}%
+ }
+ \pgfnode{currarrow}{center}{}{}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfusepath{draw}
+
+ % Wavy lines
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{0cm}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves x sep}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/waves y sep}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathsine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfpathcosine{\pgfpoint{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave width}\pgf@circ@res@up}{-\pgfkeysvalueof{/tikz/circuitikz/tripoles/isfet/wave amp}\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+}
+
+
+%% Black thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{fullthyristor}{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty thyristor
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/thyristor/height 2}}
+{emptythyristor}{\ctikzvalof{tripoles/thyristor/height}}
+{\ctikzvalof{tripoles/thyristor/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/thyristor/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/thyristor/diode width right}\pgf@circ@res@right
+
+ \pgfscope
+ \pgftransformxshift{\pgf@circ@res@other}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \pgfscope
+ % to allow filling, we need to draw explicitily the stroke here.
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \ifpgf@circuit@bipole@strokedsymbol
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{0pt}}
+ \pgfusepath{draw}
+ \fi
+ \endpgfscope
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step-\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\ctikzvalof{tripoles/thyristor/diode height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{2*\pgf@circ@res@step-2*\pgf@circ@res@other}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Empty triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{emptytriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgf@circ@draworfill
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+%% Full triac
+
+\pgfcircdeclarebipole{
+ \anchor{gate}{
+ \northeast
+ }
+ \anchor{G}{
+ \northeast
+ }
+ \anchor{anode}{
+ \southwest
+ \pgf@y=0cm
+ }
+ \anchor{cathode}{
+ \northeast
+ \pgf@y=0cm
+ }
+}
+{\ctikzvalof{tripoles/triac/height}}
+{fulltriac}
+{\ctikzvalof{tripoles/triac/height}}
+{\ctikzvalof{tripoles/triac/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+
+ \pgf@circ@res@other = \ctikzvalof{tripoles/triac/diode width left}\pgf@circ@res@left
+ \pgf@circ@res@step = \ctikzvalof{tripoles/triac/diode width right}\pgf@circ@res@right
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@step}{0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.95\pgf@circ@res@other}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}}
+
+ \pgfusepath{draw,fill}
+
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{-0.707*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-1.414*(\pgf@circ@res@other-\pgf@circ@res@step)}} % sqrt(1/2)
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}} % sqrt(1/2)
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+
+ \pgfusepath{draw}
+
+}
+
+\pgfcircdeclarebipole{
+ \anchor{out 1}{
+ \northeast
+ \pgf@y=0cm
+ }
+ \anchor{out 2}{
+ \northeast
+ \pgf@y=.8\pgf@y
+ }
+}
+{\ctikzvalof{tripoles/toggleswitch/height 2}}
+{toggleswitch}
+{\ctikzvalof{tripoles/toggleswitch/height}}
+{\ctikzvalof{tripoles/toggleswitch/width}}
+{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfusepath{draw}
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{.3\pgf@circ@res@left}{0pt}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{0}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.5\pgf@circ@res@right}{.15\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+
+ \pgfpathmoveto{\pgfpoint{.2\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfusepath{draw}
+
+ \pgfsetdash{{.08\pgf@circ@res@up}{.04\pgf@circ@res@up}{.7\pgf@circ@res@up}{.04\pgf@circ@res@up}{.8\pgf@circ@res@up}}{0cm}
+ \pgfpathmoveto{\pgfpoint{0}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.8\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.2\pgf@circ@res@left}{.6\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.2\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ \pgfsetdash{}{0cm}
+}
+
+%% operational and instrumentation amplifiers
+
+\pgfdeclareshape{op amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ }
+}
+
+%op amp shape as in european standard en 60617
+\pgfdeclareshape{en amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {
+ \left
+ \pgf@x = \ctikzvalof{tripoles/en amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\ctikzvalof{tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\ctikzvalof{tripoles/en amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\ctikzvalof{tripoles/en amp/input height}\pgf@y
+ \pgf@x=-\ctikzvalof{tripoles/en amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \anchor{up}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{down}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{tripoles/thickness}\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}
+ {\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\ctikzvalof{tripoles/en amp/port width}\pgf@circ@res@left}{\ctikzvalof{tripoles/en amp/input height}\pgf@circ@res@down}]{\ctikzvalof{tripoles/en amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+
+ \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\hbox{\ctikzvalof{tripoles/en amp/font2}\ctikzvalof{tripoles/en amp/text}}}
+ % \pgftext[top, y=-.5ex, at=\pgfpoint{0pt}{\pgf@circ@res@up}]{\ctikzvalof{tripoles/en amp/font2}$\mathstrut{\triangleright}\,\mathrm{A}$}
+ }
+}
+
+%%Transkonduktanzverstärker
+\pgfdeclareshape{gm amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ \pgfpoint{-.5\wd\pgfnodeparttextbox+.25\pgf@x}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %Umrandung:
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0}} %geändert startpunkt neu am ausgangsstrich
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@up}}%vom Ausgang nach oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}} %neu ecke links oben nach rechts oben
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}} %bei deneigängen runter
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{.5\pgf@circ@res@down}}%ecke links unten nach rechts unten
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/gm amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.3\pgf@circ@res@right}{0pt}} %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+
+ }
+}
+
+%% instrumentation amplifier
+
+\pgfdeclareshape{inst amp}
+{
+ % when tikz calls the anchor it wants the relative position in the lengths
+ % \pgf@x \pgf@y
+ % \pgfpoint* functions set that variables
+ % anchors are visible outside and run on use
+ \anchor{center}{\pgfpointorigin}
+ % savedanchors are internals and run on node creation (not use)
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/refv pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % let's start drawing the component
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % main component, normally in thicker lines
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %first point (near output)
+ \pgfpathmoveto{\pgfpoint{1.4\pgf@circ@res@right}{0}}
+ %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ % input terminal -
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % input terminal +
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+ % output lead
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} %
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+
+% instrumentation amplifier, with terminals for gain resistance between inputs
+\pgfdeclareshape{inst amp ra}
+{
+ \anchor{center}{\pgfpointorigin}
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ % inputs (+-)
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ % R ampli anchors. They are by default at 20% more than R-length distance
+ % you can change that with the `ra pos` key (use 0.5 for one-R).
+ \savedanchor\raOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{ra up}{
+ \inOneFixed
+ }
+ \anchor{ra down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\raOne{%
+ \pgf@y=\pgf@circ@Rlen
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{ra-}{
+ \raOne
+ }
+ \anchor{ra+}{
+ \raOne
+ \pgf@y=-\pgf@y
+ }
+ % power supplies
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/height}\pgf@circ@Rlen
+ \pgf@y=0.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/width}\pgf@circ@Rlen
+ \pgf@x=0.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/refv pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % drawing of the component
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % main component, normally in thicker lines
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %primer punto: la linea de salida (lado componente)
+ \pgfpathmoveto{\pgfpoint{1.4\pgf@circ@res@right}{0}}
+ %from the exit to the top (short side)... (note that the .4 must be copied in \up anchor
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.4\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.4\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+
+ % ra terminal -
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ % ra terminal +
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {-\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/ra pos}\pgf@circ@Rlen}}
+ % input terminal -
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % input terminal +
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/inst amp ra/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+ % output lead
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0pt}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{0pt}} %
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+%% Potentiometer
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+ \anchor{W}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}
+{\ctikzvalof{bipoles/potentiometer/height 2}}
+{potentiometer}{\ctikzvalof{bipoles/potentiometer/height}}
+{\ctikzvalof{bipoles/potentiometer/width}}
+{
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgftransformationadjustments
+ \pgfmathsetlength{\pgf@circ@res@step}{\ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen+\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}
+ \divide \pgf@circ@res@step by 12
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-\pgfhorizontaltransformationadjustment*0.5*\pgflinewidth}{\pgf@circ@res@zero}}
+
+ \pgf@circ@res@other = \pgf@circ@res@left
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{-\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by 2\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@down}}
+ \advance\pgf@circ@res@other by \pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{\pgf@circ@res@zero}}
+ \pgfsetbeveljoin
+ \pgfusepath{draw}
+
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+
+
+
+%% Generic tunable
+
+\pgfcircdeclarebipole{
+ \anchor{wiper}{
+ \northeast
+ \pgfpoint{0pt}{\pgf@y}
+ }
+}
+{\ctikzvalof{bipoles/generic potentiometer/height 2}}
+{genericpotentiometer}
+{\ctikzvalof{bipoles/generic potentiometer/height}}
+{\ctikzvalof{bipoles/generic potentiometer/width}}
+{
+
+ \pgf@circ@res@step = \ctikzvalof{bipoles/resistor/width}\pgf@circ@Rlen
+ \divide \pgf@circ@res@step by 14
+
+ \pgfscope
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@down}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgf@circ@draworfill
+ \endpgfscope
+ \pgfscope
+ %\pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetarrowsend{latexslim}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{-\pgf@circ@res@down}}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+
+\pgfdeclareshape{mixer}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/mixer/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/mixer/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{135}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-45}{0.5\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{45}{0.5\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{-135}{0.5\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{adder}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/adder/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in 1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{in 2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{in2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{out}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/adder/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{0}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{180}{0.3\pgf@circ@res@step}}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathmoveto{\pgfpointpolar{90}{0.3\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpointpolar{270}{0.3\pgf@circ@res@step}}
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{oscillator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/oscillator/width}\pgf@circ@Rlen
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=.5\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y}
+ \anchor{north east}{ \northwest \pgf@x=0pt\relax}
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{text}{
+ \pgf@x=-2\pgf@x
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -1.5\ht\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/oscillator/width}\pgf@circ@Rlen{}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ \pgftransformxshift{-0.5\pgf@circ@res@step} % The oscillator is shifted to the left, so a connection comes out of the anchor "east"
+
+ % draw outer box
+ \ifpgf@circuit@boxed{}
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % draw inner sine waves
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ \pgfpathmoveto{\pgfpoint{-0.3\pgf@circ@res@step}{0\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathsine{\pgfpoint{.15\pgf@circ@res@step}{-.15\pgf@circ@res@step}}
+ \pgfpathcosine{\pgfpoint{.15\pgf@circ@res@step}{.15\pgf@circ@res@step}}
+
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{circulator}
+{
+ \savedanchor\northwest{
+ \ifpgf@circuit@boxed
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/bipoles/twoport/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \else
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/circulator/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \fi
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \pgf@circ@res@step=\ctikzvalof{tripoles/circulator/width}\pgf@circ@Rlen
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \ifpgf@circuit@boxed
+ \pgfnode{box}{center}{}{pgf@box}{\pgfusepath{draw}}
+ \fi
+
+ % draw outer circle
+ \ifpgf@circuit@boxed{}
+ \pgf@circ@res@step=.7\pgf@circ@res@step{}
+ \pgfsetdash{}{0pt} % draw solid circle if boxed
+ \else
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \fi
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgf@circ@draworfill
+
+ % inner arrow
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetlinewidth{\pgfstartlinewidth}
+
+ \pgfsetarrowsend{latex}
+ \pgfpathmoveto{\pgfpoint{-0.25\pgf@circ@res@step}{0}}
+ \pgfpatharc{180}{-90} {0.25\pgf@circ@res@step}
+ \pgfpathlineto{\pgfpoint{-5pt}{-0.2\pgf@circ@res@step}}
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+}
+
+
+% Wilkinson divider
+\pgfdeclareshape{wilkinson}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x= \pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/wilkinson/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{in}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{out1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{out2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgf@circ@twoportbox
+
+ % draw inner stuff
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ \pgfsetarrows{-} %never draw arrows
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetdash{}{0pt} % always draw solid line for inner symbol
+ % draw inner resisitor - european or american style is recognised
+ {
+ \pgftransformshift{\pgfpoint{0.5\pgf@circ@res@right}{0pt}}
+ \pgftransformrotate{90}
+
+ % calculate size of resistor
+ \ifpgf@circuit@europeanresistor
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/generic/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{genericshape}{center}{}{pgf@generic}{\pgfusepath{fill}}
+ \else
+ \pgfmathparse{\pgf@circ@res@up / \pgf@circ@Rlen / \ctikzvalof{bipoles/resistor/width} / 2}
+ \pgftransformscale{\pgfmathresult}
+ \pgfnode{resistorshape}{center}{}{pgf@resistor}{\pgfusepath{fill}}
+ \fi
+ }
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@up}}
+
+ \pgfpathmoveto{\pgfpoint{0.5\pgf@circ@res@right}{0.25\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.5\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ }
+}
+
+% electromechanical device (motor/generator)
+\pgfdeclareshape{elmech}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/elmech/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tripoles/elmech/height}\pgf@circ@Rlen
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfscope % clip the bar: whole size minus the circle
+ \pgfpathrectanglecorners{\pgfpoint{-.5\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{.5\pgf@circ@res@up}}
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \pgfseteorule
+ \pgfusepath{clip}
+ \pgfpathrectangle{\pgfpoint{-.25\pgf@circ@res@step}{-.5\pgf@circ@res@up}}{\pgfpoint{.5\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfsetfillcolor{black}
+ \pgfusepath{fill, draw}
+ \endpgfscope
+ \pgfpathcircle{\pgfpoint{0}{0}} {0.5\pgf@circ@res@step}
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfsetfillcolor{white}
+ \else
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \fi
+ \pgfusepath{draw, fill}
+ \endpgfscope
+ }
+}
+
+\pgfdeclareshape{magnetron}
+{
+ \savedanchor\northwest{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/magnetron/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \anchor{anode}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{cathode1}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(105)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(105)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{cathode2}{
+ \northwest
+ \pgf@circ@res@step=\pgf@y
+ \pgfmathparse{cos(75)}
+ \pgf@x=\pgfmathresult\pgf@circ@res@step
+ \pgfmathparse{sin(75)}
+ \pgf@y=\pgfmathresult\pgf@circ@res@step
+ %\pgfpointorigin
+ %\pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@step}}%not working in a scaled tikzpicture
+ }
+ \anchor{text}{
+ \pgfpointorigin
+ \advance \pgf@x by -.5\wd\pgfnodeparttextbox
+ \advance \pgf@y by -.5\ht\pgfnodeparttextbox
+ }
+ \anchor{left}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{right}{%
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{top}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathstart}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{pathend}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{bottom}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{center}{
+ \pgf@y=0pt
+ \pgf@x=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@step=\ctikzvalof{tripoles/magnetron/width}\pgf@circ@Rlen
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfmathsetlength{\pgf@circ@res@other}{sin(15)*\pgf@circ@res@up}
+
+ \pgfscope
+ \pgfstartlinewidth=\pgflinewidth
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ %create outer circle
+ \pgfpathcircle{\pgfpoint{0}{0}} {\pgf@circ@res@right}
+ \pgf@circ@draworfill
+ %create chambers
+ \foreach \angle in {45,135,225,315}{
+ \pgfpathmoveto{ \pgfpointpolar{\angle}{0.6\pgf@circ@res@right}}
+ \pgfpathlineto{ \pgfpointpolar{\angle}{\pgf@circ@res@right}}
+ }
+ \pgfsetroundcap
+ \pgfusepath{draw}
+ \pgfscope
+ %draw connection from outside
+ %anode
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{0\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+ %cathodes
+ \pgfpathmoveto{\pgfpointpolar{105}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpointpolar{75}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ %create cathode
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0}{.15\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@other}{.5\pgf@circ@res@up}}
+ \pgfusepath{draw}
+ %create anode
+ \pgfpathmoveto{\pgfpoint{0.3\pgf@circ@res@left}{.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.3\pgf@circ@res@right}{.5\pgf@circ@res@down}}
+
+ \pgfsetbuttcap
+ \pgfusepath{draw}
+ \endpgfscope
+ }
+}
+
+% Electronic tubes, submitted by J. op den Brouw
+
+% Draw tube outline
+\def\pgf@circ@tubes@drawtube{%
+ \ifdim\ctikzvalof{tubes/width}pt>\ctikzvalof{tubes/height}pt\relax
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfutil@tempdima=\pgf@circ@res@right
+ \advance\pgfutil@tempdima by -\pgf@circ@res@up
+ \pgfpathlineto{\pgfpoint{\pgfutil@tempdima}{\pgf@circ@res@up}}
+ \pgfpatharc{90}{-90}{\pgf@circ@res@up}
+ \pgfpathlineto{\pgfpoint{-\pgfutil@tempdima}{-\pgf@circ@res@up}}
+ \pgfpatharc{270}{90}{\pgf@circ@res@up}
+ \else
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{0pt}}
+ \pgfutil@tempdima=\pgf@circ@res@up
+ \advance\pgfutil@tempdima by -\pgf@circ@res@right
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpatharc{180}{0}{\pgf@circ@res@right}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgfutil@tempdima}}
+ \pgfpatharc{180}{0}{-\pgf@circ@res@right}
+ \fi
+ \pgfpathclose
+}
+
+%% The diode (tube), triode, tetrode and pentode only differ in the
+%% number of grids. So we construct a generic declare function in
+%% which we can put code for the grid anchors and grid drawing code
+%% \pgfcircdeclaretube{tube name}{grid anchors}{grid drawing code}
+\long\def\pgfcircdeclaretube#1#2#3{%
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \pgfpointorigin
+ }
+ \savedanchor\northwest{%
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@Rlen
+ % x and y should be half the Rlen
+ \pgf@y=\pgf@circ@res@up
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgf@circ@res@right
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{north} {%
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{east}{%
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0pt
+ }
+ \anchor{south}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=0pt
+ }
+ \anchor{west}{%
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{north west}{%
+ \northwest
+ }
+ \anchor{north east}{%
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{anode} {%
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{cathode}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{cathode 1}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{cathode 2}{%
+ \northwest
+ \pgf@y=-\pgf@y
+ \pgf@x=-\ctikzvalof{tubes/cathode width}\pgf@x
+ }
+ \anchor{filament 1}{%
+ \northwest
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@x=\pgfmathresult\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{filament 2}{%
+ \northwest
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@x=-\pgfmathresult\pgf@x
+ \pgf@y=-\pgf@y
+ }
+
+ % Extra anchors
+ #2
+
+ \backgroundpath{
+ \pgfscope
+ % Line width for tripoles
+ \pgfsetlinewidth{\ctikzvalof{tripoles/thickness}\pgflinewidth}
+
+ % Setup to draw tube
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=\ctikzvalof{tubes/tube radius}\pgf@circ@res@up
+ \pgf@circ@res@right=\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+
+ % Tube fill color (if any)
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \else
+ \pgfscope
+ \pgfsetfillcolor{\tikz@fillcolor}
+ \pgf@circ@tubes@drawtube
+ \pgfusepath{fill}
+ \endpgfscope
+ \fi
+
+ % Tube outline
+ \pgf@circ@tubes@drawtube
+
+ % Setup to draw grid, filament, anode and cathode
+ \pgf@circ@res@up=\ctikzvalof{tubes/height}\pgf@circ@Rlen
+ \pgf@circ@res@right=\ctikzvalof{tubes/width}\pgf@circ@Rlen
+ \pgf@circ@res@up=0.5\pgf@circ@res@up
+ \pgf@circ@res@right=0.5\pgf@circ@res@right
+
+ % Grid drawing
+ #3
+
+ % Filament (is not drawn by default)
+ \ifpgf@circuit@tubes@filament
+ \pgf@circ@res@temp=-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up
+ \advance\pgf@circ@res@temp by -\ctikzvalof{tubes/filament distance}\pgf@circ@res@up
+ \pgfmathparse{(\ctikzvalof{tubes/tube radius}*sin(\ctikzvalof{tubes/filament angle})}
+ \pgf@xa=\pgfmathresult\pgf@circ@res@right
+ \pgfmathparse{\ctikzvalof{tubes/tube radius}+\ctikzvalof{tubes/tube radius}*cos(\ctikzvalof{tubes/filament angle}}
+ \pgf@ya=\pgfmathresult\pgf@circ@res@up
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@temp}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@circ@res@up}}
+ \pgf@circuit@tubes@filamentfalse
+ \fi
+
+ % Anode (or plate)
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@circ@res@up}} % north
+ \pgfpathlineto{\pgfpoint{0pt}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/anode width}\pgf@circ@res@right}{\ctikzvalof{tubes/anode distance}\pgf@circ@res@up}}
+
+ % Cathode
+ \ifpgf@circuit@tubes@nocathode
+ \pgf@circuit@tubes@nocathodefalse
+ \else
+ \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{-\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up}}
+ \ifpgf@circuit@tubes@fullcathode
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\pgf@circ@res@up}}
+ \pgf@circuit@tubes@fullcathodefalse
+ \else
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-\ctikzvalof{tubes/cathode right extend}\pgf@circ@res@up}}
+ \fi
+ \fi
+
+ % Draw the background
+ \pgfusepath{draw}
+
+ \endpgfscope
+ }
+ }
+}
+
+\pgfcircdeclaretube{diodetube}{}{} % shape diode already exists
+
+\pgfcircdeclaretube{triode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+ \anchor{control} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+}
+{
+ % Grid protrusion
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\ctikzvalof{tubes/grid shift}\pgf@circ@res@up}}
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{tetrode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y
+ \pgf@y=0.5\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \pgfutil@tempdima=0.5\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgfutil@tempdimb=0.5\pgfutil@tempdimb
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{pentode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+ \anchor{suppressor} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+}
+
+\pgfcircdeclaretube{pentode suppressor to cathode}
+{
+ \anchor{grid} {% should not be used
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{control} {%
+ \northwest
+ \pgfutil@tempdima=\pgf@y
+ \pgf@y=-\ctikzvalof{tubes/grid separation}\pgf@y
+ \advance\pgf@y by \ctikzvalof{tubes/grid shift}\pgfutil@tempdima
+ }
+ \anchor{screen} {%
+ \northwest
+ \pgf@y=\ctikzvalof{tubes/grid shift}\pgf@y
+ }
+}
+{
+ % Grid x/y points
+ \pgf@xa=-\ctikzvalof{tubes/tube radius}\pgf@circ@res@right
+ \advance\pgf@xa by -\ctikzvalof{tubes/grid protrusion}\pgf@circ@res@right
+ \pgfutil@tempdima=\ctikzvalof{tubes/grid separation}\pgf@circ@res@up
+ \pgfutil@tempdimb=-\pgfutil@tempdima
+ \advance\pgfutil@tempdima by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \advance\pgfutil@tempdimb by \ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ \pgf@circ@res@other=\ctikzvalof{tubes/grid shift}\pgf@circ@res@up
+ % Grid protrusion
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@right}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@circ@res@other}}
+ % Grid dashes: calculations
+ \pgf@xb=2\pgf@circ@res@right
+ \pgf@circ@res@step=\ctikzvalof{tubes/tube radius}\pgf@xb
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes} % dashes*2+1
+ \multiply\pgf@circ@count@a by 2\relax
+ \advance\pgf@circ@count@a by 1\relax
+ \advance\pgf@circ@res@step by -\pgf@xa
+ \divide\pgf@circ@res@step by \pgf@circ@count@a
+ % Grid dashes: draw
+ \pgf@circ@res@temp=\pgf@xa
+ \pgf@circ@count@a=\ctikzvalof{tubes/grid dashes}
+ \loop
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \ifnum\pgf@circ@count@a>1\relax
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdimb}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdimb}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgf@circ@res@other}}
+ \fi
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@step}{\pgfutil@tempdima}}
+ \advance\pgf@circ@res@temp by\pgf@circ@res@step
+ \advance\pgf@circ@count@a by-1
+ \ifnum\pgf@circ@count@a>0\relax
+ \repeat
+ % Grid: connection from suppressor to cathode
+ \pgfsetcornersarced{\pgfpoint{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}{\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp}{\pgfutil@tempdima-2*\ctikzvalof{tubes/grid separation}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\ctikzvalof{tubes/cathode width}\pgf@circ@res@right-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@right}{-\ctikzvalof{tubes/cathode distance}\pgf@circ@res@up-0.4142136*\ctikzvalof{tubes/cathode corners}\pgf@circ@res@up}}
+
+}
+
+%%%---------- close: tex/pgfcirctripoles
+%%%%%%%%%%% Springe nach tex/pgfcircquadpoles
+%%%---------- open: tex/pgfcircquadpoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Quadripoles
+
+\long\def\pgfcircdeclarequadpole#1#2#3{
+ \pgfdeclareshape{#1}
+ {
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedmacro{\stretto}{\def\stretto{\ctikzvalof{quadpoles/#1/inner}}}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{A2}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{B1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{A1}{
+ \northwest
+ }
+ \anchor{B2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ %% notice for the dot anchors: I use the cute inductors as reference
+ %% size; if you change one you have to change all of them.
+ \anchor{inner dot A1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot A1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{inner dot A2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot A2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{inner dot B1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot B1}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{0.5*\pgf@circ@Rlen}
+ }
+ \anchor{inner dot B2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x -
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{outer dot B2}{
+ \northwest
+ \pgfmathsetlength\pgf@x{-\stretto*\pgf@x +
+ \ctikzvalof{bipoles/cuteinductor/height}*\pgf@circ@Rlen/2}
+ \pgfmathsetlength\pgf@y{-0.5*\pgf@circ@Rlen}
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{base}{
+ \northwest
+ \pgf@x=0pt
+ }
+ #3
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ #2
+ }
+ }
+}
+
+
+\def\pgf@circ@drawtransformerbasicanchor{
+ \pgfkeysvalueof{/tikz/circuitikz/quadpoles/trans/height}
+ \anchor{AA2}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB1}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{AA1}{
+ \northwest
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+ \anchor{BB2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@x=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/width1}\pgf@x
+ \pgf@x=.7\pgf@x
+ \pgf@y=-\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/transformer/height1}\pgf@y
+ }
+}
+
+\def\pgf@circ@drawtransformerbasicbody{
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@up}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@left}%
+ {\pgf@circ@res@down}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor1}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+
+ \endpgfscope
+ \pgfscope
+ \pgfslopedattimetrue
+ \pgfallowupsidedownattimetrue
+ \pgftransformlineattime{.5}{%
+ \pgfpoint%
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@down}%
+ }{%
+ \pgfpoint
+ {\stretto\pgf@circ@res@right}%
+ {\pgf@circ@res@up}%
+ }
+
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{fullgenericshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \def\pgf@temp{cute}
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgfnode{cuteinductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \else%
+ \pgfnode{americaninductorshape}{center}{}{pgf@inductor2}{\pgfusepath{stroke}}
+ \fi%
+ \fi%
+
+ \endpgfscope
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor1}{b}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor1}{a}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpointanchor{pgf@inductor2}{a}}
+
+ \pgfpathmoveto{\pgfpointanchor{pgf@inductor2}{b}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+}
+
+
+\pgfcircdeclarequadpole{transformer}{
+ \pgf@circ@drawtransformerbasicbody
+}{\pgf@circ@drawtransformerbasicanchor}
+
+\pgfcircdeclarequadpole{transformer core}{
+
+ \pgf@circ@drawtransformerbasicbody
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@right}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfmoveto{\pgfpoint%
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@down}%
+ }
+ \pgflineto{
+ \pgfpoint
+ {\ctikzvalof{quadpoles/transformer core/core width}\pgf@circ@res@left}%
+ {\ctikzvalof{quadpoles/transformer core/core height}\pgf@circ@res@up}%
+ }
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgfusepath{draw}
+}{\pgf@circ@drawtransformerbasicanchor}
+
+
+\pgfcircdeclarequadpole{gyrator}{
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@left}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@down}}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\stretto\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+
+ \pgfusepath{draw}
+
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/quadpoles/thickness}\pgflinewidth}
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@left}{.7*\stretto\pgf@circ@res@down}}
+ \pgfpatharc{90}{270}{.7*\stretto\pgf@circ@res@down}
+
+ \pgfpathmoveto{\pgfpoint{\stretto\pgf@circ@res@right}{.7*\stretto\pgf@circ@res@up}}
+ \pgfpatharc{-90}{90}{.7*\stretto\pgf@circ@res@down}
+ \pgfusepath{draw}
+
+}{}
+
+%% four-port
+% defines a general outer box for four-ports
+% TikZ usage:
+% \draw (0,0) node[coupler](coup){\SI{-3}{dB}}
+% (coup.port1) to[short,-o] ++(-1,0)
+%
+
+\long\def\pgfcircdeclarefourport#1#2{
+ \pgfdeclareshape{#1}{
+ \anchor{center}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=0pt
+ }
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=.5\pgf@circ@Rlen
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/quadpoles/#1/width}\pgf@x
+ }
+ \anchor{north}{
+ \northwest
+ \pgf@x=0pt
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@x=0pt
+ \pgf@y=-\pgf@y
+ }
+ \anchor{west}{
+ \northwest
+ \pgf@y=0pt
+ }
+ \anchor{east}{
+ \northwest
+ \pgf@y=0pt
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{
+ \northwest
+ \pgf@y=-\pgf@y
+ }
+ \anchor{north east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ }
+ \anchor{north west}{
+ \northwest
+ }
+ \anchor{south east}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }
+ \anchor{port1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{port3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{port4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{1}{
+ \northwest
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{2}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=-0.5\pgf@y
+ }
+ \anchor{3}{
+ \northwest
+ \pgf@x=-\pgf@x
+ \pgf@y=0.5\pgf@y
+ }
+ \anchor{4}{
+ \northwest
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{text}{
+ \northwest
+ \advance \pgf@y by 0.5\ht\pgfnodeparttextbox
+ \pgf@x=-.5\wd\pgfnodeparttextbox
+ }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ \pgfstartlinewidth=\pgflinewidth
+
+ % draw outer box
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgfstartlinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up}}{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ % draw inner stuff
+ #2
+
+ % draw inner text
+ \pgftext[center,x=-0.15\pgf@circ@res@step,y=0]{\ctikzvalof{bipoles/twoport/text}}
+ }
+ }
+}
+
+% four-port
+\pgfcircdeclarefourport{fourport}{}
+
+
+% straight coupler
+\pgfcircdeclarefourport{coupler}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@up}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+ \pgfpathmoveto{\pgfpoint{0.7\pgf@circ@res@left}{0.4\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0.7\pgf@circ@res@right}{0.4\pgf@circ@res@down}}
+ \pgfsetarrows{latex-latex}
+ \pgfusepath{draw}
+}
+
+% "bended" coupler
+\pgfcircdeclarefourport{coupler2}{
+ \pgfsetlinewidth{\pgfstartlinewidth}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@up}}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0.5\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{0.5\pgf@circ@res@down}}
+ \pgfusepath{draw}
+
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@left}{0pt}}
+ \pgfpatharc{0}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{180}{90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+ \pgfscope
+ \pgfpathmoveto{\pgfpoint{0.1\pgf@circ@res@right}{0pt}}
+ \pgfpatharc{-180}{-90} {0.4\pgf@circ@res@up}
+ \pgfsetarrowsend{latex}
+ \pgfusepath{draw}
+ \endpgfscope
+}
+
+% contrib Kristofer M. Monisit
+
+\pgfdeclareshape{fd op amp}
+{
+ \anchor{center}{\pgfpointorigin}
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \savedanchor\outline{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{0pt}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ \anchor{out up}{
+ \northwest
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out down}{
+ \northwest
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out +}{
+ \outline
+ \pgf@y=.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{out -}{
+ \outline
+ \pgf@y=-.5\pgf@y
+ \pgf@x=-.7\pgf@x
+ }
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-.7\pgf@x
+ }
+
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-.7\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-.7\pgf@x \pgf@y=-\pgf@y }
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+
+ % Triangle
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/quadpoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@step}{0pt}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ % Negative input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % Positive input terminal
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+
+ % Negative output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@oplusup$-$\else$+$\fi}
+
+ % Positive output terminal
+ \pgfpathmoveto{\pgfpoint
+ {0.7\pgf@circ@res@right}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@circ@res@up}}
+ \pgftext[left, at=\pgfpoint{0.3\pgf@circ@res@left}{.3\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/font} \ifpgf@circuit@oa@oplusup$+$\else$-$\fi}
+
+ \pgfsetrectcap
+ % Draw them all!
+ \pgfusepath{draw}
+
+ }
+}
+
+
+%% instrumentation amplifier diff output
+
+\pgfdeclareshape{fd inst amp}
+{
+ % when tikz calls the anchor it wants the relative position in the lengths
+ % \pgf@x \pgf@y
+ % \pgfpoint* functions set that variables
+ % anchors are visible outside and run on use
+ \anchor{center}{\pgfpointorigin}
+ % savedanchors are internals and run on node creation (not use)
+ % bounding-box top left
+ \savedanchor\northwest{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{nw}{
+ \northwest
+ }
+ \anchor{south}{
+ \northwest
+ \pgf@y=-\pgf@y\pgf@x=0pt\relax
+ }
+ \anchor{north}{
+ \northwest\pgf@x=0pt\relax
+ }
+ \savedanchor\left{%
+ \pgf@y=0pt
+ }
+ \anchor{leftedge}
+ {\left
+ \pgf@x = \pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/port width}\pgf@x
+ }
+ \savedanchor\inOneFixed{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/op amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ }
+ \anchor{in up}{
+ \inOneFixed
+ }
+ \anchor{in down}{
+ \inOneFixed
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\inOne{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \ifpgf@circuit@oa@iplusup\pgf@y=-\pgf@y\fi
+ }
+ \anchor{-}{
+ \inOne
+ }
+ \anchor{+}{
+ \inOne
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\up{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/up pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ \anchor{up}{
+ \up
+ }
+ \anchor{down}{
+ \up
+ \pgf@y=-\pgf@y
+ }
+ % reference voltage input anchors.
+ \savedanchor\refv{%
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=.5\pgf@x
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgfpointlineattime{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/refv pos}}{
+ \pgfpoint{
+ \pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgf@circ@res@up}}
+ {\pgfpoint{.7\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ }
+ % we need both because they are normally drawn under the amp, and if you
+ % mirror it vertically you need them
+ \anchor{refv up}{
+ \refv
+ }
+ \anchor{refv down}{
+ \refv
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\outport{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ \ifpgf@circuit@oa@oplusup\else\pgf@y=-\pgf@y\fi
+ }
+ \anchor{out}{
+ \outport
+ \pgf@y=0pt
+ }
+ \anchor{out +}{
+ \outport
+ }
+ \anchor{out -}{
+ \outport
+ \pgf@y=-\pgf@y
+ }
+ \savedanchor\outportfixed{
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/height}\pgf@circ@Rlen
+ \pgf@y=.5\pgf@y
+ \pgf@y=\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@y
+ \pgf@x=-\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/width}\pgf@circ@Rlen
+ \pgf@x=-.5\pgf@x
+ }
+ \anchor{out up}{
+ \outportfixed
+ }
+ \anchor{out down}{
+ \outportfixed
+ \pgf@y=-\pgf@y
+ }
+ %
+ \anchor{west}{
+ \left
+ }
+ \anchor{east}{
+ \left
+ \pgf@x=-\pgf@x
+ }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northwest \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{text}{\pgfpoint{-.5\wd\pgfnodeparttextbox}{\dimexpr.5\dp\pgfnodeparttextbox-.5\ht\pgfnodeparttextbox}}
+
+ % let's start drawing the component
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ %
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ % main component, normally in thicker lines
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/tripoles/thickness}\pgflinewidth}
+ \pgftransformxshift{.7\pgf@circ@res@left}
+ \pgf@circ@res@step=\pgf@circ@res@right
+ \advance\pgf@circ@res@step by -\pgf@circ@res@left
+ \pgf@circ@res@step=.7\pgf@circ@res@step
+ %first point (near output)
+ \pgfpathmoveto{\pgfpoint{1.4\pgf@circ@res@right}{0}}
+ %from the exit to the top (short side)... (note that the .6 must be copied in \up and \refv anchors
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@up}}
+ % and then to the input "front up", "down", to the output short side "down"
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{0pt}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{1.4\pgf@circ@res@right}{.6\pgf@circ@res@down}}
+ % ...and close
+ \pgfpathclose
+ \pgf@circ@draworfill
+ \endpgfscope
+ % input terminal up
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ %
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup$+$\else$-$\fi}
+
+ % input terminal down
+ \pgfpathmoveto{\pgfpoint
+ {\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ %
+ \pgfpathlineto{\pgfpoint
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}
+ {\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ \pgftext[left, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@left}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font} \ifpgf@circuit@oa@iplusup$-$\else$+$\fi}
+ % output leads down and up
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}} %
+ \pgftext[right, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@down}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$-\;$\else$+\;$\fi}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{.7\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}} %
+ \pgftext[right, at=\pgfpoint{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/port width}\pgf@circ@res@right}{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/input height}\pgf@circ@res@up}]{\pgfkeysvalueof{/tikz/circuitikz/tripoles/fd inst amp/font}\ifpgf@circuit@oa@oplusup$+\;$\else$-\;$\fi}
+ %
+ \pgfsetrectcap
+ \pgfusepath{draw}
+ }
+}
+%%%---------- close: tex/pgfcircquadpoles
+%%%%%%%%%%% Springe nach tex/pgfcircmultipoles
+%%%---------- open: tex/pgfcircmultipoles.tex
+% Copyright 2007-2009 by Massimo Redaelli
+% Copyright 2019 by Romano Giannetti
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Multipoles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% counters for pin accounting...
+\def\pgf@circ@dip@pin@shift{0.5}
+\def\pgf@circ@qfp@pin@shift{0.25}
+
+% derived from https://tex.stackexchange.com/a/146753/38080
+% original author Mark Wibrow
+% Thanks also to John Kormylo https://tex.stackexchange.com/a/372996/38080
+% a lot of thanks to @marmot for the un-rotation hint
+% https://tex.stackexchange.com/a/473571/38080
+
+% DIP (dual in line package) chips
+
+\pgfdeclareshape{dipchip}{
+ \savedmacro\numpins{%
+ \pgf@circ@count@a=\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/num pins}%
+ \def\numpins{\the\pgf@circ@count@a}
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=-.5\wd\pgfnodeparttextbox%
+ \pgf@y=-.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by+.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+ \anchor{center}{\origin}
+ \anchor{text}{\centerpoint}% to adjust text
+ \saveddimen\height{%
+ \pgfmathsetlength\pgf@x{((\numpins)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing})*\pgf@circ@Rlen/2}%
+ }%
+ \saveddimen{\chipspacing}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing}}}
+ \saveddimen{\width}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/width}}}
+ \saveddimen{\extshift}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}}}
+ % standard anchors
+ \savedanchor\northwest{%
+ \pgfmathsetlength\pgf@y{0.5*((\numpins)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing})*\pgf@circ@Rlen/2}%
+ \pgfmathsetlength\pgf@x{-0.5*\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/width}}
+ }
+ \anchor{dot}{\northwest
+ \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing}
+ \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing}
+ }
+ \anchor{nw}{\northwest}
+ \anchor{ne}{\northwest\pgf@x=-\pgf@x}
+ \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{sw}{\northwest\pgf@y=-\pgf@y}
+ \anchor{north west}{\northwest}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{south east}{\northwest\pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{south west}{\northwest\pgf@y=-\pgf@y}
+ \anchor{n}{\northwest\pgf@x=0pt }
+ \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{w}{\northwest\pgf@y=0pt }
+ \anchor{north}{\northwest\pgf@x=0pt }
+ \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{west}{\northwest\pgf@y=0pt }
+ % start drawing
+ \backgroundpath{%
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/multipoles/dipchip/pin spacing}\pgf@circ@Rlen
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}\pgf@circ@Rlen
+ \pgfscope% (for the line width)
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/thickness}\pgflinewidth}
+ \pgfpathrectanglecorners{\pgfpoint{-\width/2}{-\height/2}}{\pgfpoint{\width/2}{\height/2}}%
+ \pgf@circ@draworfill
+ %% upside mark
+ \ifpgf@circuit@chip@topmark
+ \pgfpathmoveto{\pgfpoint{0.2*\pgf@circ@res@left}{\pgf@circ@res@up}}
+ \pgfpatharc{0}{180}{0.2*\pgf@circ@res@left}
+ \fi
+ \pgfusepath{stroke}%
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ % Adding the pin number
+ \ifpgf@circuit@chip@shownumbers
+ \pgf@circ@count@a=\numpins\relax
+ \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a
+ % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+ \ifpgf@circuit@chip@straightnumbers
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+ \else
+ \pgfmathsetmacro{\rot}{0}
+ \pgfmathsetmacro{\quadrant}{0}
+ \fi
+ \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+ \def\mytext{\pgfkeysvalueof{/tikz/circuitikz/multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \ifcase\quadrant % rotation 0
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or % rotation -90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or %rotation 180
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \or % rotation +90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr2*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \fi
+ \endpgfscope
+ \ifdim\pgf@circ@res@other>0pt
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins thickness}\pgflinewidth}
+ \pgf@circ@count@a=\numpins\relax
+ \divide\pgf@circ@count@a by 2 \pgf@circ@count@b=\pgf@circ@count@a
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \edef\padfrac{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pad fraction}}
+ \ifnum\padfrac>0
+ \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac
+ % left side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % right side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \else
+ % left side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % right side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@dip@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \fi
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{stroke}
+ \endpgfscope
+ \fi
+ }%
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@dipchip{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\numpins\relax
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % we will create two anchors per pin: the "normal one" like `pin 1` for the
+ % electrical contact, and the "border one" like `bpin 1` for labels.
+ % they will coincide if `external pins width` is set to 0.
+ \expandafter\xdef\csname pgf@anchor@dipchip@pin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@dipchip@bpin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@dippinanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop%
+ }%
+ }
+
+% QFP (quad flat package) chips
+
+\pgfdeclareshape{qfpchip}{
+ \savedmacro\numpins{%
+ \pgf@circ@count@a=\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/num pins}%
+ \def\numpins{\the\pgf@circ@count@a}
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=-.5\wd\pgfnodeparttextbox%
+ \pgf@y=-.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by+.5\dp\pgfnodeparttextbox%
+ }%
+ \savedanchor\origin{\pgfpoint{0pt}{0pt}}
+ \anchor{center}{\origin}
+ \anchor{text}{\centerpoint}% to adjust text
+ \saveddimen\height{%
+ \pgfmathsetlength\pgf@x{((\numpins+2)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf@circ@Rlen/4}%
+ }%
+ \saveddimen\width{%
+ \pgfmathsetlength\pgf@x{((\numpins+2)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf@circ@Rlen/4}%
+ }%
+ \saveddimen{\chipspacing}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing}}}
+ \saveddimen{\extshift}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}}}
+ % standard anchors
+ \savedanchor\northwest{%
+ \pgfmathsetlength\pgf@y{0.5*((\numpins+2)
+ *\pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing})*\pgf@circ@Rlen/4}%
+ \pgf@x=-\pgf@y
+ }
+ \anchor{dot}{\northwest
+ \pgfmathsetlength\pgf@x{\pgf@x + 0.3*\chipspacing}
+ \pgfmathsetlength\pgf@y{\pgf@y - 0.3*\chipspacing}
+ }
+ \anchor{nw}{\northwest}
+ \anchor{ne}{\northwest\pgf@x=-\pgf@x}
+ \anchor{se}{\northwest\pgf@x=-\pgf@x\pgf@y=-\pgf@y}
+ \anchor{sw}{\northwest\pgf@y=-\pgf@y}
+ \anchor{north west}{\northwest}
+ \anchor{north east}{\northwest\pgf@x=-\pgf@x}
+ \anchor{south east}{\northwest\pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{south west}{\northwest\pgf@y=-\pgf@y}
+ \anchor{n}{\northwest\pgf@x=0pt }
+ \anchor{e}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{s}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{w}{\northwest\pgf@y=0pt }
+ \anchor{north}{\northwest\pgf@x=0pt }
+ \anchor{east}{\northwest\pgf@x=-\pgf@x\pgf@y=0pt }
+ \anchor{south}{\northwest\pgf@x=0pt\pgf@y=-\pgf@y}
+ \anchor{west}{\northwest\pgf@y=0pt }
+ % start drawing
+ \backgroundpath{%
+ \northwest
+ \pgf@circ@res@up = \pgf@y
+ \pgf@circ@res@down = -\pgf@y
+ \pgf@circ@res@right = -\pgf@x
+ \pgf@circ@res@left = \pgf@x
+ \pgf@circ@res@step = \pgfkeysvalueof{/tikz/circuitikz/multipoles/qfpchip/pin spacing}\pgf@circ@Rlen
+ \pgf@circ@res@other = \pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins width}\pgf@circ@Rlen
+ \pgfscope% (for the line width)
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/thickness}\pgflinewidth}
+ %% upside mark
+ \ifpgf@circuit@chip@topmark
+ \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2-\pgf@circ@res@step/2}}
+ \pgfpathlineto{\pgfpoint{-\width/2+\pgf@circ@res@step/2}{\height/2}}
+ \else
+ \pgfpathmoveto{\pgfpoint{-\width/2}{\height/2}}
+ \fi
+ %% rest of the shape
+ \pgfpathlineto{\pgfpoint{\width/2}{\height/2}}
+ \pgfpathlineto{\pgfpoint{\width/2}{-\height/2}}
+ \pgfpathlineto{\pgfpoint{-\width/2}{-\height/2}}
+ \pgfpathclose
+ \pgf@circ@draworfill
+ % Adding the pin number
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \ifpgf@circuit@chip@shownumbers
+ \pgf@circ@count@a=\numpins%
+ \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a
+ % thanks to @marmot: https://tex.stackexchange.com/a/473571/38080
+ \ifpgf@circuit@chip@straightnumbers
+ \pgfgettransformentries\a\b\temp\temp\temp\temp
+ \pgfmathsetmacro{\rot}{-atan2(\b,\a)}
+ \pgfmathtruncatemacro{\quadrant}{mod(4+int(360+(\rot+45)/90),4)}
+ \else
+ \pgfmathsetmacro{\rot}{0}
+ \pgfmathsetmacro{\quadrant}{0}
+ \fi
+ \def\pgf@circ@strut{\vrule width 0pt height 1em depth 0.4em\relax}
+ \def\mytext{\pgfkeysvalueof{/tikz/circuitikz/multipoles/font}\space\pgf@circ@strut\the\pgf@circ@count@c\space}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \ifcase\quadrant % rotation 0
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or % rotation -90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or %rotation 180
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \or % rotation +90
+ % left
+ \pgf@circ@count@c=\pgf@circ@count@a
+ \pgftext[bottom,
+ at=\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % bottom
+ \pgf@circ@count@c=\numexpr\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[right,
+ at=\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down},
+ rotate=\rot]{\mytext}
+ % right
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b-\pgf@circ@count@a+1\relax
+ \pgftext[top,
+ at=\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step},
+ rotate=\rot]{\mytext}
+ % top
+ \pgf@circ@count@c=\numexpr3*\pgf@circ@count@b+\pgf@circ@count@a\relax
+ \pgftext[left,
+ at=\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up},
+ rotate=\rot]{\mytext}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \fi
+ \endpgfscope
+ \ifdim\pgf@circ@res@other>0pt
+ \pgfscope
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pins thickness}\pgflinewidth}
+ \pgf@circ@count@a=\numpins%
+ \divide\pgf@circ@count@a by 4 \pgf@circ@count@b=\pgf@circ@count@a
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \edef\padfrac{\pgfkeysvalueof{/tikz/circuitikz/multipoles/external pad fraction}}
+ \ifnum\padfrac>0
+ \pgf@circ@res@temp=\pgf@circ@res@step\divide\pgf@circ@res@temp by \padfrac
+ % left side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % bottom side pads
+ \pgfpathmoveto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ % right side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right}{-\pgf@circ@res@temp+\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % top side pads
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \pgfpathlineto{\pgfpoint{-\pgf@circ@res@temp+\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \else
+ % left side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % bottom side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@left-(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@down-\pgf@circ@res@other}}
+ % right side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+\pgf@circ@res@other}{\pgf@circ@res@up+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}}
+ % top side pins
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up}}
+ \pgfpathlineto{\pgfpoint{\pgf@circ@res@right+(\pgf@circ@qfp@pin@shift-\the\pgf@circ@count@a)*\pgf@circ@res@step}{\pgf@circ@res@up+\pgf@circ@res@other}}
+ \fi
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop
+ \pgfusepath{stroke}
+ \endpgfscope
+ \fi
+ }%
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@qfpchip{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\numpins%
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ \expandafter\xdef\csname pgf@anchor@qfpchip@pin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@qfpchip@bpin\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@qfppinanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a-1\relax%
+ \repeatpgfmathloop%
+ }%
+ }
+
+%% anchors for DIP
+\def\pgf@circ@dippinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+ \c@pgf@countc=\numpins\relax
+ \divide\c@pgf@countc by 2
+ \ifnum #1 > \the\c@pgf@countc
+ % right side
+ \pgfpoint{\width/2+#2*\extshift}{-\height/2+(\pgf@circ@dip@pin@shift-\c@pgf@countc+#1-1)*\chipspacing}
+ \else
+ \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@dip@pin@shift-#1)*\chipspacing}
+\fi
+}
+
+%% anchors for QFP
+\def\pgf@circ@qfppinanchor#1#2{% #1: pin number #2: 0 for border pin, 1 for external pin
+ \c@pgf@countc=\numpins\relax
+ \divide\c@pgf@countc by 4
+ \ifnum #1 > \the\c@pgf@countc
+ \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 2
+ \ifnum #1 > \the\c@pgf@countb
+ \c@pgf@countb=\c@pgf@countc \multiply \c@pgf@countb by 3
+ \ifnum #1 > \the\c@pgf@countb
+ % 3*npins/4 < pin, top side
+ \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift+\c@pgf@countb-#1)*\chipspacing}{\height/2+#2*\extshift}%
+ \else
+ % 2*npins/4 < pin <= 3*npins/4, right side
+ \pgfpoint{\width/2+#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}%
+ \fi
+ \else
+ % npins/4 < pin <= 2*npins/4, bottom side
+ \pgfpoint{\width/2+(\pgf@circ@qfp@pin@shift-\c@pgf@countb+#1-1)*\chipspacing}{-\height/2-#2*\extshift}%
+ \fi
+ \else
+ % <= npins/4, left side
+ \pgfpoint{-\width/2-#2*\extshift}{\height/2+(\pgf@circ@qfp@pin@shift-#1)*\chipspacing}%
+ \fi
+}
+
+
+%% Rotary Switch
+
+\pgfdeclareshape{rotaryswitch}
+{
+ \savedanchor\northeast{%
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{\r*\pgf@circ@Rlen + \pgf@circ@res@temp}
+ }
+ \savedanchor\northwest{%
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{-\r*\pgf@circ@Rlen - (\a<90 ? 1 : 1-2*cos(\a))*\pgf@circ@res@temp}
+ }
+ \savedanchor\central{%
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ % the magic number is 0.25/cos(35)
+ % try to recalculate it for the actual switch
+ \pgf@circ@res@temp=\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ \pgf@circ@res@temp=.3052\pgf@circ@res@temp
+ \edef\a{\ctikzvalof{multipoles/rotary/angle}}
+ \edef\r{\ctikzvalof{nodes width}}
+ \pgfmathsetlength{\pgf@y}{\r*\pgf@circ@Rlen +(\a>90 ? 2 : 2*sin(\a))*\pgf@circ@res@temp}
+ \pgfmathsetlength{\pgf@x}{(\a<90 ? 0 : cos(\a))*\pgf@circ@res@temp}
+ }
+ % external square limits
+ \savedanchor\extnorthwest{%
+ \pgf@x=-\ctikzvalof{tripoles/spdt/width}\pgf@circ@Rlen
+ % this strange value makes the 2-pole rotary switch equal to the 2 poles cute spdt
+ \pgf@x=.3052\pgf@x % the magic number is 0.25/cos(35)
+ \pgf@x=2.5\pgf@x % external square size
+ \pgf@y=-\pgf@x %square thing when angle=180?
+ }
+ \saveddimen{\width}{\pgfmathsetlength\pgf@x{0.3052*\pgf@circ@Rlen*\ctikzvalof{tripoles/spdt/width}}}
+ % radius of the connector
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \saveddimen{\radius}{\pgfmathsetlength\pgf@x{\pgf@circ@Rlen*\ctikzvalof{nodes width}}}
+ % shapename
+ \savedmacro{\thisshape}{\def\thisshape{\tikz@fig@name}}
+ % shape type
+ \savedmacro{\cshape}{\def\cshape{\ctikzvalof{multipoles/rotary/shape}}}
+ \savedmacro{\channels}{\def\channels{\ctikzvalof{multipoles/rotary/channels}}}
+ \savedmacro{\angle}{\def\angle{\ctikzvalof{multipoles/rotary/angle}}}
+ \savedmacro{\wiper}{\def\wiper{\ctikzvalof{multipoles/rotary/wiper}}}
+ \savedmacro{\stepa}{\pgfmathsetmacro{\stepa}{2*\ctikzvalof{multipoles/rotary/angle}/(\ctikzvalof{multipoles/rotary/channels}-1)}}
+ % mid of the lever, to stack switches
+ %\anchor{mid}{\midlever}
+ \anchor{mid}{\northwest
+ \pgf@circ@res@temp=-\pgf@x
+ \pgfmathsetlength{\pgf@x}{\pgf@circ@res@temp*(-1+cos(\wiper))}
+ \pgfmathsetlength{\pgf@y}{\pgf@circ@res@temp*sin(\wiper)}
+ }
+ % center anchors
+ \anchor{cin}{ \northwest \pgf@y=0pt\advance\pgf@x by \radius}
+ % horizontal angles
+ \anchor{in}{ \northwest \pgf@y=0pt}
+ \anchor{ain}{ \northwest \pgf@y=0pt}
+
+ \anchor{center}{ \central \pgf@y=0pt }
+ \anchor{east}{ \northeast \pgf@y=0pt }
+ \anchor{west}{ \northwest \pgf@y=0pt }
+ \anchor{south}{ \central \pgf@y=-\pgf@y }
+ \anchor{north}{ \central }
+ \anchor{south west}{ \northwest \pgf@y=-\pgf@y }
+ \anchor{north east}{ \northeast }
+ \anchor{north west}{ \northwest }
+ \anchor{south east}{ \northeast \pgf@y=-\pgf@y }
+
+ \anchor{ext center}{ \pgf@y=0pt \pgf@x=0pt \advance\pgf@x by -\width}
+ \anchor{ext east}{ \extnorthwest \pgf@y=0pt \pgf@x=-\pgf@x \advance\pgf@x by -\width}
+ \anchor{ext west}{ \extnorthwest \pgf@y=0pt \advance\pgf@x by -\width}
+ \anchor{ext south}{ \extnorthwest \pgf@x=0pt \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+ \anchor{ext north}{ \extnorthwest \pgf@x=0pt \advance\pgf@x by -\width}
+ \anchor{ext south west}{ \extnorthwest \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+ \anchor{ext north east}{ \extnorthwest \pgf@x=-\pgf@x \advance\pgf@x by -\width}
+ \anchor{ext north west}{ \extnorthwest \advance\pgf@x by -\width}
+ \anchor{ext south east}{ \extnorthwest \pgf@x=-\pgf@x \pgf@y=-\pgf@y \advance\pgf@x by -\width}
+
+ \backgroundpath{
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgf@circ@res@right = \width
+ \pgf@circ@res@left = -\width
+
+ \pgfscope %wiper
+ % This is the radius of the "ocirc" shape (see pgfcircshapes.tex)
+ \pgf@circ@res@temp=\radius\relax
+ \pgf@circ@res@temp=\ctikzvalof{multipoles/rotary/thickness}\pgf@circ@res@temp
+ \pgfsetlinewidth{2\pgf@circ@res@temp}
+ \pgfpathmoveto{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\wiper}{2\pgf@circ@res@right}}}
+ \pgfsetroundcap\pgfusepath{draw}
+ \endpgfscope
+
+ \ifpgf@circ@rotaryarrow
+ \pgfscope % arrow
+ \ifpgf@circ@rotaryarrow@ccw\pgfsetarrowsstart{latexslim}\fi
+ \pgfsetlinewidth{\pgfkeysvalueof{/tikz/circuitikz/bipoles/thickness}\pgflinewidth}
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}} % center of cin node
+ \pgftransformrotate{\wiper}
+ \pgfpathmoveto{\pgfpointpolar{50}{1.0\pgf@circ@res@right}}
+ \pgfpatharc{50}{-50}{1.0\pgf@circ@res@right}
+ \ifpgf@circ@rotaryarrow@cw\pgfsetarrowsend{latexslim}\fi
+ \pgfusepath{draw}
+ \endpgfscope
+ \fi
+
+ % \typeout{CHANNELS\space\channels\space ANGLE\space\angle STEPA\space\stepa}
+ \pgf@circ@count@a=\channels\relax
+ \pgfmathsetmacro{\currenta}{-\angle}
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % \typeout{LOOPIN\space\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right}
+ \pgfscope
+ \pgftransformshift{\pgfpointadd{\pgfpoint{\pgf@circ@res@left}{0pt}}{\pgfpointpolar{\currenta}{2\pgf@circ@res@right}}}
+ \pgfnode{\cshape}{center}{}{\thisshape-out \the\pgf@circ@count@a}{\pgfusepath{stroke}}
+ \endpgfscope
+ \pgfmathsetmacro{\currenta}{\currenta+\stepa}
+ % \typeout{LOOPOUT\space\the\pgf@circ@count@a\space CURRENTA\space\currenta\space RIGHT\space\the\pgf@circ@res@right}
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop
+
+ \pgfscope % input
+ \pgftransformshift{\pgfpoint{\pgf@circ@res@left}{0pt}}
+ \pgfnode{\cshape}{center}{}{\thisshape-in}{\pgfusepath{stroke}}
+ \endpgfscope
+ }
+ % \pgf@sh@s@<name of the shape here> contains all the code for the shape
+ % and is executed just before a node is drawn.
+ \pgfutil@g@addto@macro\pgf@sh@s@rotaryswitch{%
+ % Start with the maximum pin number and go backwards.
+ \pgf@circ@count@a=\channels\relax
+ \pgfmathloop%
+ \ifnum\pgf@circ@count@a>0
+ % we will create two anchors per pin: the "normal one" like `pin 1` for the
+ % electrical contact, and the "border one" like `bpin 1` for labels.
+ % they will coincide if `external pins width` is set to 0.
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@out\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{1}{0}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@cout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{0}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@aout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotaryanchor{\the\pgf@circ@count@a}{0}{1}%
+ }
+ \expandafter\xdef\csname pgf@anchor@rotaryswitch@sqout\space\the\pgf@circ@count@a\endcsname{%
+ \noexpand\pgf@circ@rotarysqanchor{\the\pgf@circ@count@a}{0}%
+ }
+ \advance\pgf@circ@count@a by -1\relax%
+ \repeatpgfmathloop%
+ }%
+}
+
+\def\pgf@circ@rotaryanchor#1#2#3{% #1: numero del pin; #2: 1 - x pos, 0 - center; #3 0: inner, 1 outer
+ \pgf@circ@res@temp=\width
+ \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+ \pgfmathsetlength{\pgf@x}{2*(\pgf@circ@res@temp+#3*\radius/2)*cos(\myangle))+#2*\radius}
+ \pgfmathsetlength{\pgf@y}{2*(\pgf@circ@res@temp+#3*\radius/2)*sin(\myangle)}
+ \advance\pgf@x by -\pgf@circ@res@temp
+}
+
+\def\pgf@circ@rotarysqanchor#1{% external square anchors
+ \pgf@circ@res@temp=\width
+ \pgfmathsetmacro{\myangle}{\angle-(#1-1)*\stepa}
+ \pgfpointborderrectangle{\pgfpointpolar{\myangle}{1pt}}{\pgfpoint{2.5\pgf@circ@res@temp}{2.5\pgf@circ@res@temp}}
+ \advance\pgf@x by -\pgf@circ@res@temp
+}
+
+% Seven segments displays
+
+\pgfdeclareshape{bare7seg}{
+ \savedmacro{\dotstatus}{\edef\dotstatus{\pgf@circ@sevenseg@dotstate}}
+ \saveddimen{\dotspace}{% the dot is on the right, and occupy the same as the thickness
+ \ifpgf@circ@sevenseg@dot
+ \pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/thickness}}
+ \else
+ \pgf@x=0pt
+ \fi
+ }
+ % The object extension is more or less (-width/2,-width) to (width/2,width)
+ % and adjusted for line thickness (both sides) and eventually the dot
+ \saveddimen{\width}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/width}*\pgf@circ@Rlen}}
+ \saveddimen{\gap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/segment sep}}}
+ \saveddimen{\boxgap}{\pgfmathsetlength{\pgf@x}{\ctikzvalof{seven seg/box sep}}}
+ \savedanchor{\southwest}{% both negative
+ \pgfmathsetlength{\pgf@x}{-0.5*\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ \pgfmathsetlength{\pgf@y}{-\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ -0.5*\ctikzvalof{seven seg/thickness}-\ctikzvalof{seven seg/box sep}}
+ }
+ \savedanchor{\northeast}{% both positive
+ \ifpgf@circ@sevenseg@dot
+ \pgfmathsetlength{\pgf@circ@res@other}{\ctikzvalof{seven seg/thickness}}
+ \else
+ \pgf@circ@res@other=0pt
+ \fi
+ \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ +0.5*\ctikzvalof{seven seg/thickness}+\pgf@circ@res@other+\ctikzvalof{seven seg/box sep}}
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@Rlen
+ +0.5*\ctikzvalof{seven seg/thickness}+\ctikzvalof{seven seg/box sep}}
+ }
+ \savedanchor{\topright}{% anchor without the box sep and the thickness
+ \pgfmathsetlength{\pgf@x}{0.5*\ctikzvalof{seven seg/width}*\pgf@circ@Rlen}
+ \pgfmathsetlength{\pgf@y}{\ctikzvalof{seven seg/width}*\pgf@circ@Rlen}
+ }
+ \anchor{center}{\pgfpointorigin}
+ \anchor{north west}{\southwest\pgf@y=-\pgf@y}
+ \anchor{north east}{\northeast}
+ \anchor{south east}{\northeast\pgf@y=-\pgf@y}
+ \anchor{south west}{\southwest}
+ \anchor{north}{\northeast\pgf@x=0pt}
+ \anchor{east}{\northeast\pgf@y=0pt}
+ \anchor{south}{\southwest\pgf@x=0pt}
+ \anchor{west}{\southwest\pgf@y=0pt}
+ \anchor{a}{\topright\pgf@x=0pt}
+ \anchor{b}{\topright\pgf@y=0.5\pgf@y}
+ \anchor{c}{\topright\pgf@y=-0.5\pgf@y}
+ \anchor{d}{\topright\pgf@y=-\pgf@y\pgf@x=0pt}
+ \anchor{e}{\topright\pgf@x=-\pgf@x\pgf@y=-0.5\pgf@y}
+ \anchor{f}{\topright\pgf@x=-\pgf@x\pgf@y=0.5\pgf@y}
+ \anchor{g}{\pgfpointorigin}
+ \anchor{dot}{\topright\pgf@y=-\pgf@y\advance\pgf@x by \dotspace}
+ \behindbackgroundpath{%
+ \southwest % I do not want the dot here, it will stick out
+ \pgf@circ@res@up = -\pgf@y
+ \pgf@circ@res@down = \pgf@y
+ \pgf@circ@res@right = \pgf@x
+ \pgf@circ@res@left = -\pgf@x
+ \pgfscope
+ \pgfsetlinewidth{\ctikzvalof{multipoles/thickness}\pgflinewidth}
+ \pgfsetcolor{\pgfkeysvalueof{/tikz/circuitikz/color}}
+ \pgfpathrectanglecorners%
+ {\pgfpoint{\pgf@circ@res@right}{\pgf@circ@res@down}}
+ {\pgfpoint{\pgf@circ@res@left+\dotspace}{\pgf@circ@res@up}}
+ \ifpgf@circ@sevenseg@box
+ \pgf@circ@draworfill
+ \else
+ \pgf@circ@maybefill
+ \fi
+ \endpgfscope
+ \edef\bits{\ctikzvalof{seven seg/bits}}
+ \pgfscope
+ \pfg@circ@sseg@drawbits{\bits}
+ \endpgfscope
+ \pgfscope
+ \ifpgf@circ@sevenseg@dot
+ \pgf@circ@sseg@drawdots
+ \fi
+ \endpgfscope
+ }
+}
+
+\def\pgf@circ@sseg@splitbits#1#2#3#4#5#6#7\relax{%split the seven bits
+ \edef\@@a{#1}\edef\@@b{#2}\edef\@@c{#3}\edef\@@d{#4}\edef\@@e{#5}\edef\@@f{#6}\edef\@@g{#7}%
+}
+\def\pgf@circ@sseg@drawone#1#2#3#4#5{% #1 on off the x1, y1, x2 , y2
+ \ifnum #1 > 0\relax
+ \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+ \else
+ \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+ \fi
+ \pgfpathmoveto{\pgfpoint{#2}{#3}}
+ \pgfpathlineto{\pgfpoint{#4}{#5}}
+ \pgfusepath{draw}
+}
+\def\pfg@circ@sseg@drawbits#1{% #1 must be 7 bits
+ \expandafter\pgf@circ@sseg@splitbits#1\relax% a bit of magic...
+ \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}}
+ \pgfsetlinewidth{\ctikzvalof{seven seg/thickness}}
+ % \pgfsetroundcap
+ \pgfsetarrowsstart{Triangle Cap[]}
+ \pgfsetarrowsend{Triangle Cap[]}
+ % segments
+ \pgf@circ@sseg@drawone{\@@a}{-\width/2+\gap}{\width}{\width/2-\gap}{\width}
+ \pgf@circ@sseg@drawone{\@@b}{\width/2}{\width-\gap}{\width/2}{0pt+\gap}
+ \pgf@circ@sseg@drawone{\@@c}{\width/2}{0pt-\gap}{\width/2}{-\width+\gap}
+ \pgf@circ@sseg@drawone{\@@d}{\width/2-\gap}{-\width}{-\width/2+\gap}{-\width}
+ \pgf@circ@sseg@drawone{\@@e}{-\width/2}{-\width+\gap}{-\width/2}{0pt-\gap}
+ \pgf@circ@sseg@drawone{\@@f}{-\width/2}{0pt+\gap}{-\width/2}{\width-\gap}
+ \pgf@circ@sseg@drawone{\@@g}{-\width/2+\gap}{0pt}{\width/2-\gap}{0pt}
+}
+\def\pgf@circ@sseg@drawdots{% dots
+ \edef\what{empty}
+ \ifx\what\pgf@circ@sevenseg@dotstate
+ % do nothing
+ \else
+ \pgfmathsetlength{\pgf@circ@res@other}{0.5*\ctikzvalof{seven seg/thickness}}
+ \edef\what{off}
+ \ifx\what\pgf@circ@sevenseg@dotstate
+ % dot off
+ \pgfsetfillcolor{\ctikzvalof{seven seg/color off}}
+ \pgfsetcolor{\ctikzvalof{seven seg/color off}}
+ \else
+ % dot on
+ \pgfsetfillcolor{\ctikzvalof{seven seg/color on}}
+ \pgfsetcolor{\ctikzvalof{seven seg/color on}}
+ \fi
+ \pgfpathcircle{\pgfpoint{\width/2+2*\pgf@circ@res@other}{-\width}}{\pgf@circ@res@other}
+ \pgfusepath{draw,fill}
+ \fi
+}
+%%%---------- close: tex/pgfcircmultipoles
+
+%%%%%%%%%%% Springe nach tex/pgfcirclabel
+%%%---------- open: tex/pgfcirclabel.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Bipole label positioning
+
+%% Options
+\ctikzset{label/.style = { l=#1 } }
+\ctikzset{l/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=#1}
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{label above/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{l^/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+
+\ctikzset{label below/.code = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{l_/.style = {
+ l=#1,
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+\ctikzset{annotation/.style = { a=#1 } }
+\ctikzset{a/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/annotation/name=#1}
+ \ctikzsetvalof{bipole/annotation/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/annotation/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+
+\ctikzset{annotation above/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{a^/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=90 }
+}
+
+\ctikzset{annotation below/.code = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+\ctikzset{a_/.style = {
+ a=#1,
+ \circuitikzbasekey/bipole/annotation/position=-90 }
+}
+
+% This is to adjust spacing for the labels so that they are not cramped on components
+\def\pgf@circ@ls{.75ex} % labelspace to have just one point to change
+
+\def\pgf@circ@drawlabels#1{
+ \pgfextra{
+ % This function will be called with argument #1 equal
+ % to "label" or "annotation" form pgfcircpath.tex.
+ % pgf@circ@direction is the direction of the path,
+ % its value is set in pgfcircpath.tex
+ \pgfmathsubtract{\pgf@circ@direction}{90}
+ \pgfmathround{\pgfmathresult} % avoid precision loss errors
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/position}}
+ \ifnum \pgf@circ@temp < 0
+ \pgfmathadd{\pgf@circ@labanc}{180}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ % \typeout{INI: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc}
+ %
+ % normalize the angle values
+ %
+ \pgfmathmod{\pgf@circ@labanc}{360}
+ \edef\pgf@circ@labanc{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is inverted, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ %
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathadd{\pgf@circ@temp}{180} %If shape is mirrored, use opposite anchor
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \fi
+ % \typeout{FIN: TEMP\space\pgf@circ@temp\space LABANC\space\pgf@circ@labanc}
+ }
+ %Firstly, place a coordinate directly at the edge of the shape
+ (\ctikzvalof{bipole/name}.\pgf@circ@temp) coordinate (labelcoor)
+ %now decide, which labels should be drawn
+ \pgfextra{
+ \edef\pgf@temp{\ctikzvalof{label/align}}
+ \def\pgf@circ@temp{straight}
+ }
+ \ifx\pgf@temp\pgf@circ@temp %straight
+ \pgf@circ@drawreglabels{#1}
+ \else
+ \pgfextra{\def\pgf@circ@temp{rotate}}
+ \ifx\pgf@temp\pgf@circ@temp %rotate
+ \pgf@circ@drawrotlabels{#1}
+ \else% smart
+ \pgf@circ@drawsmartlabels{#1}
+ \fi
+ \fi
+}
+
+
+\def\pgf@circ@drawsmartlabels#1{
+ \pgfextra{
+ \pgfmathmod{\pgf@circ@direction}{90}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \ifnum \pgfcircmathresult > 20
+ \ifnum \pgfcircmathresult < 70
+ \pgf@circ@drawrotlabels{#1}
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ \else
+ \pgf@circ@drawreglabels{#1}
+ \fi
+ }
+
+
+\def\pgf@circ@drawrotlabels#1{
+ \pgfextra{
+ % scale the distances in function of zoom, so that they are not
+ % dependent on it but on font size. Thanks to @marmot
+ % https://tex.stackexchange.com/a/476018/38080
+ % the coeffcient is adjusted so that the distance is more or less
+ % the same for rotated labels and straight ones (although it will
+ % depend on the font, so it's not exact).
+ \pgfgettransformentries{\tmp}{\tmp}{\tmp}{\myscale}{\tmp}{\tmp}
+ \pgfmathsetlength\pgf@circ@res@temp{1.5*\pgf@circ@ls/\myscale}
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ %we need some more space for placement below, due to mid-anchor
+ \else % we do not have <= in \ifnum...
+ \pgf@circ@res@temp=1.5\pgf@circ@res@temp
+ \fi
+ %Calculate rotation of the label from direction and strip decimals
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ % rotate the label at second or third quadrant:
+ \ifnum \pgfcirclabrot > 90 \ifnum \pgfcirclabrot < 270
+ \pgfmathsubtract{\pgf@circ@direction}{180}
+ \edef\pgfcirclabrot{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ %invert the space relationships due to rotated strings
+ \ifnum \ctikzvalof{bipole/#1/position}>0
+ \pgf@circ@res@temp=1.5\pgf@circ@res@temp
+ \fi
+ \fi\fi
+ \pgfmathparse{\ctikzvalof{bipole/#1/position}>0?\pgf@circ@direction+90:\pgf@circ@direction-90}
+ \edef\pgf@circ@labposangle{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ % reset cm is not working correctly here
+ (labelcoor)++(\pgf@circ@labposangle:\the\pgf@circ@res@temp) coordinate(labelcoor)
+ node[anchor=mid, rotate=\pgfcirclabrot](\ctikzvalof{bipole/name}#1){\pgf@circ@finallabels{#1}}
+}
+
+\def\pgf@circ@drawreglabels#1{
+ %Now calculate all shape positions
+ %Use mid-anchor at x-axis and base-anchor at y-axis, respectively.
+ %All points between will be addressed by angled-anchors:
+ \pgfextra{
+ % scale ex-distance to make it independent on scale
+ % thanks @marmot see https://tex.stackexchange.com/a/476018/38080
+ \pgfgettransformentries{\tmp}{\tmp}{\tmp}{\myscale}{\tmp}{\tmp}
+ \pgfmathsetlength\pgf@circ@res@temp{\pgf@circ@ls/\myscale}
+ \pgfmathadd{\pgf@circ@labanc}{90}
+ \pgfmathround{\pgfmathresult}
+ \def\pgf@circ@labanctext{\pgf@circ@labanc}
+ \edef\pgf@circ@temp{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \pgfmathparse{mod(\pgf@circ@temp,180)>135?mod(\pgf@circ@temp,180)-180:mod(\pgf@circ@temp,180)}
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ %Values around 90 are at both y-axis
+ \ifnum \pgfcircmathresult > 84 \ifnum \pgfcircmathresult< 96
+ \pgfextra{\edef\pgf@circ@labpos{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}}
+ \ifnum \pgf@circ@labpos > 180
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanctext{mid west}}
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{mid east}}
+ \fi
+ \else
+ \ifnum \ctikzvalof{bipole/#1/position} > 0
+ \pgfextra{\def\pgf@circ@labanctext{mid east}}
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{mid west}}
+ \fi
+ \fi
+ \fi\fi
+ %Values between -5 and 5 are at pos /neg x-axis
+ \pgfextra{\def\uffa{}\newdimen\realshift\realshift=\dimexpr1pt\relax}
+ \ifnum \pgfcircmathresult <6 \ifnum \pgfcircmathresult > -6
+ \ifnum \ctikzvalof{bipole/#1/position} < 0
+ \ifnum \pgf@circ@labanc > 90
+ % using base coordinate instead of south to naturally align
+ % symbols with descendants; but this invalidate the effect of
+ % the inner sep, so recover it by shifting the anchor
+ % reset cm is not working sometime, use @marmot solution
+ % see https://tex.stackexchange.com/a/476018/38080
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{north}}%north
+ \fi
+ \else
+ \ifnum \pgf@circ@labanc < 90
+ % shift, as above
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \ifnum \pgf@circ@labanc > 180
+ % this shouldn't happen, but somehow it does (270 degree anchors)
+ % shift, as above
+ (labelcoor) ++(-\pgf@circ@labanc:\pgf@circ@res@temp) coordinate(labelcoor)
+ \pgfextra{\def\pgf@circ@labanctext{base}}%base
+ \else
+ \pgfextra{\def\pgf@circ@labanctext{north}}%north
+ \fi
+ \fi
+ \fi
+ \fi\fi
+ (labelcoor) node[anchor=\pgf@circ@labanctext,
+ inner sep=0.5\pgf@circ@res@temp, outer sep=0pt,
+ ](\ctikzvalof{bipole/name}#1){\strut\pgf@circ@finallabels{#1}%
+ }
+}
+
+\def\pgf@circ@finallabels#1{%
+ \edef\pgf@temp{}%
+ \edef\pgf@circ@temp{\ctikzvalof{bipole/#1/unit}}%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \ctikzvalof{bipole/#1/name}%
+ \else%
+ $\SI{\ctikzvalof{bipole/#1/name}}{\ctikzvalof{bipole/#1/unit}}$%
+ \fi%
+}
+
+\ctikzset{text/.style = { t=#1 } }
+\ctikzset{t/.code = {
+ \ctikzsetvalof{bipoles/twoport/text}{#1}
+}}
+
+%%%% Stacked labels
+%
+% stacked labels by Romano Giannetti romano@rgtti.com
+% heavily based on Claudo Fiandrinos's https://tex.stackexchange.com/a/65792/38080
+% \expandafter trick inspired by Matthew Leingang's https://tex.stackexchange.com/a/12272/38080
+%
+% labels are in a tabular, globally aligned:
+% vertically with key l2 valign (default c)
+% c: center t: top b: bottom
+% horizontally with key l2 align (default l)
+% l: left c: centered r: right
+% you can switch sides using l2_=... and l2^=...
+% syntax is l2_ = line1 and line2 (same for l2^)
+%
+\ctikzset{%
+ l2 valign/.store in=\ltwo@valign, l2 valign=c,
+ l2 halign/.store in=\ltwo@halign, l2 halign=l,
+}
+\ctikzset{l2base/.code n args={2}{
+ \pgfkeys{/tikz/circuitikz/bipole/label/name=%
+ \bgroup
+ \setlength{\tabcolsep}{2pt}%
+ \def\ltwo@tabu{\tabular[\ltwo@valign]}%
+ \expandafter\ltwo@tabu\expandafter{\ltwo@halign}%
+ #1\\ #2%
+ \endtabular
+ \egroup
+ }%
+ \ctikzsetvalof{bipole/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#2}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}}
+\ctikzset{l2/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 above/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2^/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=90 }
+}
+\ctikzset{l2 below/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+\ctikzset{l2_/.style args={#1 and #2}{
+ l2base={#1}{#2},
+ \circuitikzbasekey/bipole/label/position=-90 }
+}
+
+%%%---------- close: tex/pgfcirclabel
+%%%%%%%%%%% Springe nach tex/pgfcircvoltage
+%%%---------- open: tex/pgfcircvoltage.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Voltage management
+
+
+\ctikzset{v^>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v^</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = above
+ }
+}
+
+\ctikzset{v_>/.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = forward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_</.style = {
+ v = #1,
+ \circuitikzbasekey/bipole/voltage/direction = backward,
+ \circuitikzbasekey/bipole/voltage/position = below
+ }
+}
+
+\ctikzset{v_/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = below} }
+\ctikzset{v^/.style = {v = #1, \circuitikzbasekey/bipole/voltage/position = above} }
+\ctikzset{v>/.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = forward} }
+\ctikzset{v</.style = {v = #1, \circuitikzbasekey/bipole/voltage/direction = backward} }
+
+% Default position varies whether the component is a voltage source
+% or not
+\ctikzset{v/.code = {
+ \ifpgf@circuit@bipole@isvoltage
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=above,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi
+ \fi
+ \ifpgf@circ@oldvoltagedirection
+ \ifpgf@circuit@bipole@iscurrent\ifpgf@circ@fixbatteries
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \fi\fi
+ \else
+ \ifpgf@circuit@bipole@iscurrent
+ \ifpgf@circuit@bipole@current@backward
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=forward}
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/voltage/position=below,
+ \circuitikzbasekey/bipole/voltage/direction=backward}
+ \fi\fi\fi
+ \pgfkeys{/tikz/circuitikz/bipole/voltage/label/name=#1}
+ \ctikzsetvalof{bipole/voltage/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/voltage/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ }
+}
+
+% american voltage font selection and symbol definition
+% the default font command is {} --- nothing
+\def\pgf@circ@avfont{\ctikzvalof{voltage/american font}}
+%
+% plus and minus symbols (default is $+$ and $-$, see pgfcirc.defines.tex)
+% notice that the double braces are needed to be able
+% to use \boldmath in the font (although it is semi-deprecated...)
+%
+\def\pgf@circ@avplus{\ctikzvalof{voltage/american plus}}
+\def\pgf@circ@avminus{\ctikzvalof{voltage/american minus}}
+
+%% Output routine for generic bipoles
+
+\def\pgf@circ@drawvoltagegeneric{
+ \pgfextra{
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {
+ \pgfkeysifdefined{/tikz/circuitikz/bipoles/voltage/straight label distance}
+ {
+ \edef\partheight{\ctikzvalof{bipoles/voltage/straight label distance}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen)}
+ }
+ {%calculate default value from part height
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/height}
+ \pgfkeysifdefined{\pgf@temp}
+ {
+ \edef\partheight{0.5*\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/height}}
+ \edef\tmpdistfromline{(\partheight\pgf@circ@Rlen+0.2\pgf@circ@Rlen)}
+ }
+ {
+ \edef\tmpdistfromline{(.5\pgf@circ@Rlen)} %fallback to fixed value
+ }
+ }
+ }
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{-\tmpdistfromline}
+ \else
+ \def\distfromline{-\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@straight
+ \def\distfromline{\tmpdistfromline}
+ \else
+ \def\distfromline{\ctikzvalof{voltage/distance from line}\pgf@circ@Rlen}
+ \fi
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@voltage@angle{90}
+ \else
+ \def\pgf@circ@voltage@angle{-90}
+ \fi
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\distacefromnode{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/distance from node}} }
+ { \edef\distacefromnode{\ctikzvalof{voltage/distance from node}} }
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\bumpb{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/bump b}} }
+ { \edef\bumpb{\ctikzvalof{voltage/bump b}} }
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ \pgfmathsetmacro{\bumpb}{\bumpb + \shiftv} %% adjust the bump is shift
+ \ifpgf@circuit@bipole@inverted
+ \pgfmathsetmacro{\shiftv}{-\shiftv}
+ \fi
+ \ifnum \ctikzvalof{mirror value} = -1
+ \pgfmathsetmacro{\shiftv}{-\shiftv}
+ \fi
+ }
+ % %\pgf@circ@Rlen/\pgfkeysvalueof{/tikz/circuitikz/current arrow scale} is equal to the length of the currarrow
+ coordinate (pgfcirc@midtmp) at ($(\tikztostart) ! \pgf@circ@Rlen/\pgfkeysvalueof{/tikz/circuitikz/current arrow scale} ! (anchorstartnode)$) %absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorstartnode)$)
+
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@midtmp) ! -\distfromline ! \pgf@circ@voltage@angle:(anchorstartnode)$)
+ coordinate (pgfcirc@midtmp) at ($(\tikztotarget) ! \pgf@circ@Rlen/\pgfkeysvalueof{/tikz/circuitikz/current arrow scale} ! (anchorendnode)$)%absolute move, minimum space is length of arrowhead
+ coordinate (pgfcirc@midtmp) at ($(pgfcirc@midtmp) ! \distacefromnode ! (anchorendnode)$)
+
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@midtmp) ! \distfromline ! \pgf@circ@voltage@angle : (anchorendnode)$)
+
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@Vto) ! \shiftv!90 : (anchorendnode)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@Vfrom) ! \shiftv!-90 : (anchorstartnode)$)
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.-70)$)
+ \else
+ coordinate (pgfcirc@Vto) at ($(pgfcirc@Vto) ! -\shiftv!90 : (anchorendnode)$)
+ coordinate (pgfcirc@Vfrom) at ($(pgfcirc@Vfrom) ! -\shiftv!-90 : (anchorstartnode)$)
+ coordinate (pgfcirc@Vcont1) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.110)$)
+ coordinate (pgfcirc@Vcont2) at ($(\ctikzvalof{bipole/name}.center) ! \bumpb ! (\ctikzvalof{bipole/name}.70)$)
+ \fi
+
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@straight
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) --(pgfcirc@Vfrom) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \else
+ (pgfcirc@Vfrom) --(pgfcirc@Vto) node[currarrow, sloped, allow upside down, pos=1,anchor=tip] {}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) .. controls (pgfcirc@Vcont2) and (pgfcirc@Vcont1) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) .. controls (pgfcirc@Vcont1) and (pgfcirc@Vcont2) ..
+ node[currarrow, sloped, allow upside down, pos=1] {}
+ (pgfcirc@Vto)
+ \fi
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ \fi
+ \else
+ \ifpgf@circ@oldvoltagedirection
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ \else
+ (pgfcirc@Vfrom) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avplus}
+ (pgfcirc@Vto) node[inner sep=0, node font=\pgf@circ@avfont,
+ anchor=\pgf@circ@bipole@voltage@label@anchor]{\pgf@circ@avminus}
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine for voltage sources
+\def\pgf@circ@drawvoltagegenerator{
+ % the following is affected indirectly by voltage/shift, you can move the arrow with voltage/bump a.
+ % it's not perfect, but I can't find the way to do it correctly...
+ \pgfextra{
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ \edef\bumpa{\ctikzvalof{voltage/bump a}}
+ \pgfmathsetmacro{\bumpaplus}{\bumpa + \shiftv}
+ }
+ \ifpgf@circuit@bipole@voltage@below
+ coordinate (pgfcirc@Vfrom) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-120)$)
+ coordinate (pgfcirc@Vto) at ($(\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.-60)$)
+ \else
+ coordinate (pgfcirc@Vfrom) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.120)$)
+ coordinate (pgfcirc@Vto) at ($ (\ctikzvalof{bipole/name}.center) ! \bumpaplus ! (\ctikzvalof{bipole/name}.60)$)
+ \fi
+ \ifpgf@circuit@europeanvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vto) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vfrom)
+ \else
+ (pgfcirc@Vfrom) -- node[currarrow, sloped, allow upside down, pos=1] {} (pgfcirc@Vto)
+ \fi
+ \else% american voltage
+ \ifpgf@circuit@bipole@voltageoutsideofsymbol
+ % if it is a battery, must put + and -
+
+ \ifpgf@circ@fixbatteries
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ \else
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ \fi
+ \else
+ \ifpgf@circuit@bipole@voltage@backward
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ \else
+ (pgfcirc@Vfrom) node[node font=\pgf@circ@avfont] {\pgf@circ@avplus}
+ (pgfcirc@Vto) node[node font=\pgf@circ@avfont] {\pgf@circ@avminus}
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+%% Output routine
+\def\pgf@circ@drawvoltage{% node name
+ \pgfextra{ %WARNING: indentation is probably wrong
+ \edef\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@direction\pgf@nil}
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \else
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \else
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{south east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{east}
+ \else \def\pgf@circ@bipole@voltage@label@anchor{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north east}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >-1 \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >355 \ifnum\pgfcircmathresult <361
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@anchor{north}
+ \else\def\pgf@circ@bipole@voltage@label@anchor{south}
+ \fi
+ \fi\fi
+
+ \ifnum \ctikzvalof{mirror value}=-1
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@inverted
+ \ifpgf@circuit@bipole@voltage@below
+ \pgf@circuit@bipole@voltage@belowfalse
+ \else
+
+ \pgf@circuit@bipole@voltage@belowtrue
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@voltage@below
+ \def\pgf@circ@bipole@voltage@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@voltage@label@where{90}
+ \fi
+
+
+ \edef\pgf@temp{/tikz/circuitikz/bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}
+ \pgfkeysifdefined{\pgf@temp}
+ { \edef\eudist{\ctikzvalof{bipoles/\pgfkeysvalueof{/tikz/circuitikz/bipole/kind}/voltage/european label distance}} }
+ { \edef\eudist{\ctikzvalof{voltage/european label distance}} }
+ \edef\shiftv{\ctikzvalof{voltage/shift}}
+ % adjust the label distance to the shift.
+ \pgfmathsetmacro{\eudistplus}{\eudist+\shiftv}
+
+ \pgfsetcornersarced{\pgfpointorigin}% do not use rounded corners!
+ }%end pgfextra
+
+ \ifpgf@circuit@bipole@isvoltage
+ \pgf@circ@drawvoltagegenerator
+ \else
+ \pgf@circ@drawvoltagegeneric
+ \fi
+
+ % (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where) %Zeile sinnlos!?
+ \ifpgf@circuit@bipole@voltage@straight
+ coordinate (Vlab) at ($(pgfcirc@Vto)!0.5!(pgfcirc@Vfrom) $)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt]
+ at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \else
+ coordinate (Vlab) at ($(\ctikzvalof{bipole/name}.center) !
+ \ifpgf@circuit@europeanvoltage
+ \eudistplus
+ \else
+ \ctikzvalof{voltage/american label distance}
+ \fi !
+ (\ctikzvalof{bipole/name}.\pgf@circ@bipole@voltage@label@where)$)
+ node [anchor=\pgf@circ@bipole@voltage@label@anchor, inner sep=2pt] at (Vlab) { \pgf@circ@finallabels{voltage/label} }
+ \fi
+}%end drawvoltages
+%%%---------- close: tex/pgfcircvoltage
+%%%%%%%%%%% Springe nach tex/pgfcirccurrent
+%%%---------- open: tex/pgfcirccurrent.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Current handling
+
+%% Options
+\ctikzset{i^>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_>/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i>^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i>_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i^</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i_</.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i<^/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above
+ }
+}
+
+\ctikzset{i<_/.style = {
+ i = #1,
+ \circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = below
+ }
+}
+
+\ctikzset{i/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/current/label/name=#1}
+ \ctikzsetvalof{bipole/current/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/current/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+ %reverse current direction for voltage sources
+ \ifpgf@circ@oldvoltagedirection\else
+ \ifpgf@circuit@bipole@isvoltage
+ \ifpgf@circuit@bipole@voltage@backward
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = forward,
+ \circuitikzbasekey/bipole/current/x position = after,
+ \circuitikzbasekey/bipole/current/y position = below }
+ \else
+ \pgfkeys{\circuitikzbasekey/bipole/current/direction = backward,
+ \circuitikzbasekey/bipole/current/x position = before,
+ \circuitikzbasekey/bipole/current/y position = above }
+ \fi\fi\fi
+ }
+}
+
+\ifpgf@circ@oldvoltagedirection
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward } }
+\else
+ \ctikzset{i</.style = { i = #1, \circuitikzbasekey/bipole/current/direction = backward, \circuitikzbasekey/bipole/current/x position = before } }
+\fi
+\ctikzset{i_/.style = { i = #1, \circuitikzbasekey/bipole/current/y position = below } }
+\ctikzset{i>/.style = {i = #1, \circuitikzbasekey/bipole/current/direction = forward } }
+\ctikzset{i^/.style = { i= #1, \circuitikzbasekey/bipole/current/y position = above } }
+
+%% Output routine
+\def\pgf@circ@drawcurrent{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@current@below
+ \def\pgf@circ@bipole@current@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@current@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw current at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@current@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \ifpgf@circuit@bipole@current@backward
+ \pgfextra{
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ }
+ \fi
+ coordinate[currarrow,pos=\ctikzvalof{current/distance},rotate=\pgf@circ@ffffff](Iarrow)
+ (Iarrow.\pgf@circ@bipole@current@label@where) node[anchor=\pgf@circ@dir]{\pgf@circ@finallabels{current/label}}
+}
+
+%%%---------- close: tex/pgfcirccurrent
+%%%%%%%%%%% Springe nach tex/pgfcircflow
+%%%---------- open: tex/pgfcircflow.tex
+% Copyright 2007-2009 by Massimo Redaelli
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the files gpl-3.0_license.txt and lppl-1-3c_license.txt for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% flow handling
+
+%% Options
+\ctikzset{f^>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/curflowrent/y position = above
+ }
+}
+
+\ctikzset{f_>/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f>^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f>_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f^</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f_</.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f<^/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = above
+ }
+}
+
+\ctikzset{f<_/.style = {
+ f = #1,
+ \circuitikzbasekey/bipole/flow/direction = backward,
+ \circuitikzbasekey/bipole/flow/x position = before,
+ \circuitikzbasekey/bipole/flow/y position = below
+ }
+}
+
+\ctikzset{f</.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = backward} }
+\ctikzset{f_/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = below } }
+\ctikzset{f>/.style = { f = #1, \circuitikzbasekey/bipole/flow/direction = forward } }
+\ctikzset{f^/.style = { f = #1, \circuitikzbasekey/bipole/flow/y position = above } }
+
+\ctikzset{f/.code = {
+ \pgfkeys{\circuitikzbasekey/bipole/flow/direction = forward,
+ \circuitikzbasekey/bipole/flow/x position = after,
+ \circuitikzbasekey/bipole/flow/y position = above }
+ \pgfkeys{/tikz/circuitikz/bipole/flow/label/name=#1}
+ \ctikzsetvalof{bipole/flow/label/unit}{}
+ \ifpgf@circ@siunitx
+ \pgf@circ@handleSI{#1}
+ \ifpgf@circ@siunitx@res
+ \edef\pgf@temp{\pgf@circ@handleSI@val}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/name}{\pgf@temp}
+ \edef\pgf@temp{\pgf@circ@handleSI@unit}
+ \pgfkeyslet{/tikz/circuitikz/bipole/flow/label/unit}{\pgf@temp}
+ \else
+ \fi
+ \else
+ \fi
+}
+}
+
+%% Output routine
+\def\pgf@circ@drawflow{
+ \pgfextra{
+ \edef\pgf@circ@ffffff{\pgf@circ@direction}
+ \def\pgfcircmathresult{\expandafter\pgf@circ@stripdecimals\pgf@circ@ffffff\pgf@nil}
+
+ \ifnum\pgfcircmathresult >4 \ifnum\pgfcircmathresult <86
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north west} \else \def\pgf@circ@dir{south east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >85 \ifnum\pgfcircmathresult <95
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{west} \else \def\pgf@circ@dir{east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >94 \ifnum\pgfcircmathresult <176
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south west}\else \def\pgf@circ@dir{north east}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >175 \ifnum\pgfcircmathresult <185
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south}\else\def\pgf@circ@dir{north}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >184 \ifnum\pgfcircmathresult <266
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{south east}\else\def\pgf@circ@dir{north west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >265 \ifnum\pgfcircmathresult <275
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{east}\else \def\pgf@circ@dir{west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult >274 \ifnum\pgfcircmathresult <356
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north east}\else\def\pgf@circ@dir{south west}
+ \fi
+ \fi\fi
+ \ifnum\pgfcircmathresult <5
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+ \ifnum\pgfcircmathresult >355
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@dir{north}\else\def\pgf@circ@dir{south}
+ \fi
+ \fi
+
+ \ifpgf@circuit@bipole@flow@below
+ \def\pgf@circ@bipole@flow@label@where{-90}
+ \else
+ \def\pgf@circ@bipole@flow@label@where{+90}
+ \fi
+ }
+
+ \pgfextra{\def\pgf@temp{short}\edef\pgf@circ@temp{\ctikzvalof{bipole/kind}}}
+ \ifx\pgf@circ@temp\pgf@temp%draw flow at a short at middle of the line
+ (\tikztostart)--(\tikztotarget)
+ \else% normal bipole or source
+ \ifpgf@circuit@bipole@flow@before
+ (\tikztostart)--(anchorstartnode)
+ \else
+ (anchorendnode)--(\tikztotarget)
+ \fi
+ \fi
+ \pgfextra{
+ \ifpgf@circuit@bipole@flow@backward
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \pgfmathsubtract{\pgf@circ@ffffff}{180}
+ \edef\pgf@circ@ffffff{\expandafter\pgf@circ@stripdecimals\pgfmathresult\pgf@nil}
+ \else
+ \ifpgf@circuit@bipole@flow@below
+ \def\flow@offset{-\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \else
+ \def\flow@offset{\ctikzvalof{flow/offset}\pgf@circ@Rlen}
+ \fi
+ \fi
+ }
+ coordinate[flowarrow,pos=\ctikzvalof{flow/distance},rotate=\pgf@circ@ffffff,yshift=\flow@offset](Farrowpos)
+ (Farrowpos.\pgf@circ@bipole@flow@label@where) node[anchor=\pgf@circ@dir]{ \pgf@circ@finallabels{flow/label}}
+}
+
+%%%---------- close: tex/pgfcircflow
+
+% defaults
+
+\setupmodule
+ [current=european,
+ voltage=european,
+ resistor=american,
+ inductor=cute,
+ logic=american,
+ siunitx=true,
+ arrowmos=false]
+
+\processaction
+ [\currentmoduleparameter{voltage}]
+ [european=>\ctikzset{voltage=european},
+ american=>\ctikzset{voltage=american}]
+
+\processaction
+ [\currentmoduleparameter{current}]
+ [european=>\ctikzset{ current=european},
+ american=>\ctikzset{ current=american}]
+
+\processaction
+ [\currentmoduleparameter{label}]
+ [straight=>\ctikzset{label/align = straight},
+ align=>\ctikzset{label/align = rotate},
+ smart=>\ctikzset{label/align = smart}]
+
+\processaction
+ [\currentmoduleparameter{resistor}]
+ [european=>\ctikzset{ resistor=european},
+ american=>\ctikzset{ resistor=american}]
+
+\processaction
+ [\currentmoduleparameter{inductor}]
+ [european=>\ctikzset{ inductor=european},
+ american=>\ctikzset{ inductor=american},
+ cute=>\ctikzset{ inductor=cute}]
+
+\processaction
+ [\currentmoduleparameter{diode}]
+ [full=>\ctikzset{ diode=full},
+ empty=>\ctikzset{ diode=empty}]
+
+\processaction
+ [\currentmoduleparameter{logic}]
+ [european=>\ctikzset{ logic ports=european},
+ american=>\ctikzset{ logic ports=american}]
+
+\processaction
+ [\currentmoduleparameter{siunitx}]
+ [true=>\def\SI#1#2{#1\,#2}
+ \def\ampere{\rm{A}}
+ \def\volt{\rm{V}}
+ \def\ohm{\Omega}
+ \def\siemens{\rm{S}}
+ \def\farad{\rm{F}}
+ \def\henry{\rm{H}}
+ \def\second{\rm{s}}
+ \def\coulomb{\rm{C}}
+ \def\siemens{\rm{S}}
+ \def\radians{\rm{rad}}
+ \def\milli{\rm{m}}
+ \def\micro{\mu}
+ \def\nano{\rm{n}}
+ \def\pico{\rm{p}}
+ \def\kilo{\rm{k}}
+ \def\mega{\rm{M}}
+ \def\giga{\rm{G}}
+ \def\tera{\rm{T}},
+ false=>]
+% \s!default=>\pgf@circ@siunitxtrue,
+
+\processaction
+ [\currentmoduleparameter{arrowmos}]
+ [true=>\pgf@circuit@mos@arrowstrue,
+ false=>\pgf@circuit@mos@arrowsfalse]
+% \s!default=>\pgf@circuit@mos@arrowstrue,
+
+
+\ifpgf@circ@siunitx
+ % nothing! siunitx and xstrings don't work in context
+\fi
+
+
+% Context specific
+
+\ctikzset{tripoles/op amp/font/.initial=\switchtobodyfont[small]}
+
+%%%%%%%%%%% Springe nach tex/pgfcircpath
+%%%---------- open: tex/pgfcircpath.tex
+
+\def\pgf@circ@direction{0.0}
+
+% Names
+\ctikzset{name/.style = { n=#1 } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%@@@
+\ctikzset{n/.code = {
+ \pgfkeys{/tikz/circuitikz/bipole/name=#1}
+}}
+
+% Reflect the node along
+\ctikzset{mirrored/.is choice}
+\ctikzset{mirror value/.initial=1}
+\ctikzset{mirrored/true/.code = {\ctikzsetvalof{mirror value}{-1}} }
+\ctikzset{mirrored/false/.code = {\ctikzsetvalof{mirror value}{1}} }
+\ctikzset{mirror/.style = {/tikz/circuitikz/mirrored=true}}
+
+% Invert node along path
+\ctikzset{inverted/.is choice}
+\ctikzset{invert value/.initial=1}
+\ctikzset{inverted/true/.code = {\ctikzsetvalof{invert value}{-1}\pgf@circuit@bipole@invertedtrue}}
+\ctikzset{inverted/false/.code = {\ctikzsetvalof{invert value}{1}\pgf@circuit@bipole@invertedfalse}}
+\ctikzset{invert/.style = {/tikz/circuitikz/inverted=true}}
+\newif\ifpgf@circuit@bipole@inverted
+\ctikzset{bipole/inverted/.is if=pgf@circuit@bipole@inverted}
+
+\newif\ifpgf@circuit@bipole@voltage@backward
+\ctikzset{bipole/voltage/direction/.is choice}
+\ctikzset{bipole/voltage/direction/forward/.code={\pgf@circuit@bipole@voltage@backwardfalse}}
+\ctikzset{bipole/voltage/direction/backward/.code={\pgf@circuit@bipole@voltage@backwardtrue}}
+
+% Initialize paths
+\def\pgfcircresetpath{
+ \ctikzset{bipole/name=, bipole/label/name=, bipole/label/position=90, ,bipole/annotation/name=, bipole/annotation/position=-90,
+ bipole/inverted=false, bipole/kind=,
+ bipole/voltage/direction=backward, bipole/voltage/label/name=, bipole/voltage/position=below,
+ bipole/nodes/left=none, bipole/nodes/right=none, bipole/is voltage=false,bipole/is voltageoutsideofsymbol=false,bipole/is strokedsymbol=false,
+ bipole/is current=false, bipole/current/label/name=, bipole/current/x position=after,
+ bipole/current/y position=above, bipole/current/direction=forward,
+ mirrored=false
+ }
+}
+
+%% Helper function for path-function to ensure using anchors between nodes
+\def\set@explicit@center@anchor#1{
+ \pgfutil@ifundefined{pgf@sh@ns@#1}
+ {
+ %This coordinate is no node(but a relative position or a coordinate), no further handling needed
+ }{
+ \pgfutil@in@.{#1}
+ \ifpgfutil@in@
+ % Anchor is used, do nothing!
+ \else%
+ \let\tikz@moveto@waiting=\relax
+ \pgfpathmoveto{\tikz@last@position}%force movement, because tikz@moveto@waiting
+ \edef#1{#1.center}%ensure using center anchor
+ \fi
+}
+}
+
+
+%% Generic bipole path
+\def\pgf@circ@bipole@path#1#2{
+
+ \pgfextra{
+ \set@explicit@center@anchor{\tikztostart}
+ \set@explicit@center@anchor{\tikztotarget}
+ \pgfsyssoftpath@getcurrentpath{\myp@th}%% save current path to extend after calculation of correct start/end coordinates
+ \ctikzset{bipole/kind = #1}
+ \edef\pgf@temp{\ctikzvalof{bipole/name}}
+ \def\pgf@circ@temp{}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = #2\pgf@circ@rand} % create it
+ \fi
+ }
+
+ (\tikztostart) coordinate (\ctikzvalof{bipole/name}start)%necessary to get correct coordinates in the case of relative start/end or constructions like ((node1)-|(node2))
+ (\tikztotarget) coordinate (\ctikzvalof{bipole/name}end)
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathround{\pgfmathresult}
+ \edef\pgf@circ@direction{\pgfmathresult}%Calculate direction(angle) of path
+ \pgfsyssoftpath@setcurrentpath{\myp@th}
+ }
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ --($(\ctikzvalof{bipole/name}start) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}end)$) %ugly workaround to get correct linejoins(node breaks path?)
+ \fi
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)%%positio of middle node
+ node[#1shape, rotate=\pgf@circ@direction, yscale=\ctikzvalof{mirror value}, xscale=\ctikzvalof{invert value}]
+ (\ctikzvalof{bipole/name}) {}
+ \ifpgf@circuit@bipole@inverted
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathend)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathstart)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.right)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.left)
+ \fi
+ \else
+ \ifcsname pgf@anchor@#1shape@pathstart\endcsname%if special path-anchors are defined, use them!
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.pathstart)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.pathend)
+ \else
+ coordinate (anchorstartnode) at (\ctikzvalof{bipole/name}.left)
+ coordinate (anchorendnode) at (\ctikzvalof{bipole/name}.right)
+ \fi
+ \fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ \else
+ (\ctikzvalof{bipole/name}start.center) -- (anchorstartnode)
+ (anchorendnode) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+
+ \drawpoles
+ \pgf@circ@ifkeyempty{bipole/label/name}\else\pgf@circ@drawlabels{label}\fi
+ \pgf@circ@ifkeyempty{bipole/annotation/name}\else\pgf@circ@drawlabels{annotation}\fi
+ \pgf@circ@ifkeyempty{bipole/voltage/label/name}\else\pgf@circ@drawvoltage\fi
+ \pgf@circ@ifkeyempty{bipole/current/label/name}\else\pgf@circ@drawcurrent\fi
+ \pgf@circ@ifkeyempty{bipole/flow/label/name}\else\pgf@circ@drawflow\fi
+ \pgfextra{\def\pgf@temp{open}\def\pgf@circ@temp{#1}}
+ \ifx\pgf@temp\pgf@circ@temp % if it is an open
+ (\ctikzvalof{bipole/name}end)%Move to end of path
+ \else
+ ($(\ctikzvalof{bipole/name}end) ! .5\pgflinewidth ! (\ctikzvalof{bipole/name}start)$) -- (\ctikzvalof{bipole/name}end)%ugly workaround to get correct linejoins(node breaks path?)
+ %tikztostart and tikztotarget could not be used, because it would break if target coordinate is something like (node1-|node2)
+
+ \fi
+ % reset
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ \tikztonodes%draw pending nodes an path
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Handling of terminals
+
+\ctikzset{bipole/nodes/.is family}
+\ctikzset{bipole/nodes/left/.initial=none}
+\ctikzset{bipole/nodes/right/.initial=none}
+\tikzset{bipole nodes/.style n args={2}{%
+ \circuitikzbasekey/bipole/nodes/left=#1,
+ \circuitikzbasekey/bipole/nodes/right=#2
+ }
+}
+
+%% Easily usable styles
+
+\ctikzset{o-o/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{-o/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{*-o/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-*/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-o/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{o-d/.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-*/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{-d/.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{*-*/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{d-*/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{*-d/.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{d-d/.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+
+% rectjoinfill workarounds
+
+\ctikzset{.-/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=none}}
+\ctikzset{.-*/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=circ}}
+\ctikzset{.-o/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=ocirc}}
+\ctikzset{.-d/.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=diamondpole}}
+\ctikzset{-./.style = {\circuitikzbasekey/bipole/nodes/left=none, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{o-./.style = {\circuitikzbasekey/bipole/nodes/left=ocirc, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{*-./.style = {\circuitikzbasekey/bipole/nodes/left=circ, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{d-./.style = {\circuitikzbasekey/bipole/nodes/left=diamondpole, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+\ctikzset{.-./.style = {\circuitikzbasekey/bipole/nodes/left=rectjoinfill, \circuitikzbasekey/bipole/nodes/right=rectjoinfill}}
+
+\tikzset{reversed/.style = {\circuitikzbasekey/bipole/inverted=true}}
+
+\def\drawpoles{
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/left}} \def\pgf@temp{none}}
+ \ifx\pgf@temp\pgf@circ@temp\else(\tikztostart) node[\pgf@circ@temp] {}\fi
+ \pgfextra{ \edef\pgf@circ@temp{\ctikzvalof{bipole/nodes/right}} }
+ \ifx\pgf@temp\pgf@circ@temp\else(\tikztotarget) node[\pgf@circ@temp] {}\fi
+}
+
+%% Path definitions
+\def\pgf@circ@resistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{generic}{#1}\else\pgf@circ@bipole@path{resistor}{#1}\fi}
+\def\pgf@circ@vresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{tgeneric}{#1}\else\pgf@circ@bipole@path{vresistor}{#1}\fi}
+\def\pgf@circ@sresistor@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{thermistor}{#1}\else\pgf@circ@bipole@path{resistivesens}{#1}\fi}
+\def\pgf@circ@potentiometer@path#1{\ifpgf@circuit@europeanresistor\pgf@circ@bipole@path{genericpotentiometer}{#1}\else\pgf@circ@bipole@path{potentiometer}{#1}\fi}
+\def\pgf@circ@thermistor@path#1{\pgf@circ@bipole@path{thermistor}{#1}}
+\def\pgf@circ@thermistorptc@path#1{\pgf@circ@bipole@path{thermistorptc}{#1}}
+\def\pgf@circ@thermistorntc@path#1{\pgf@circ@bipole@path{thermistorntc}{#1}}
+\def\pgf@circ@varistor@path#1{\pgf@circ@bipole@path{varistor}{#1}}
+\def\pgf@circ@capacitor@path#1{\pgf@circ@bipole@path{capacitor}{#1}}
+\def\pgf@circ@capacitivesens@path#1{\pgf@circ@bipole@path{capacitivesens}{#1}}
+\def\pgf@circ@ecapacitor@path#1{\pgf@circ@bipole@path{ecapacitor}{#1}}
+\def\pgf@circ@polarcapacitor@path#1{\pgf@circ@bipole@path{polarcapacitor}{#1}}
+\def\pgf@circ@vcapacitor@path#1{\pgf@circ@bipole@path{vcapacitor}{#1}}
+\def\pgf@circ@piezoelectric@path#1{\pgf@circ@bipole@path{piezoelectric}{#1}}
+\def\pgf@circ@battery@path#1{\pgf@circ@bipole@path{battery}{#1}}
+\def\pgf@circ@batteryone@path#1{\pgf@circ@bipole@path{battery1}{#1}}
+\def\pgf@circ@batterytwo@path#1{\pgf@circ@bipole@path{battery2}{#1}}
+\def\pgf@circ@europeaninductor@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@americaninductor@path#1{\pgf@circ@bipole@path{americaninductor}{#1}}
+\def\pgf@circ@cuteinductor@path#1{\pgf@circ@bipole@path{cuteinductor}{#1}}
+\def\pgf@circ@cutechoke@path#1{\pgf@circ@bipole@path{cutechoke}{#1}}
+\def\pgf@circ@inductor@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductor@path{#1}%
+ \else%
+ \pgf@circ@americaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@vinductor@path#1{
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@veuropeaninductor@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@vcuteinductor@path{#1}%
+ \else%
+ \pgf@circ@vamericaninductor@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@inductivesens@path#1{%
+ \pgfextra{
+ \edef\pgf@circ@temp{\ctikzvalof{inductor}}%
+ \def\pgf@temp{european}%
+ }
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@europeaninductivesens@path{#1}%
+ \else%
+ \pgfextra{ \def\pgf@temp{cute} }%
+ \ifx\pgf@temp\pgf@circ@temp%
+ \pgf@circ@cuteinductivesens@path{#1}%
+ \else%
+ \pgf@circ@americaninductivesens@path{#1}%
+ \fi%
+ \fi%
+}
+\def\pgf@circ@veuropeaninductor@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@vamericaninductor@path#1{\pgf@circ@bipole@path{vamericaninductor}{#1}}
+\def\pgf@circ@vcuteinductor@path#1{\pgf@circ@bipole@path{vcuteinductor}{#1}}
+\def\pgf@circ@europeaninductivesens@path#1{\pgf@circ@bipole@path{sfullgeneric}{#1}}
+\def\pgf@circ@americaninductivesens@path#1{\pgf@circ@bipole@path{samericaninductor}{#1}}
+\def\pgf@circ@cuteinductivesens@path#1{\pgf@circ@bipole@path{scuteinductor}{#1}}
+\def\pgf@circ@lamp@path#1{\pgf@circ@bipole@path{lamp}{#1}}
+\def\pgf@circ@bulb@path#1{\pgf@circ@bipole@path{bulb}{#1}}
+\def\pgf@circ@esource@path#1{\pgf@circ@bipole@path{esource}{#1}}
+\def\pgf@circ@pvsource@path#1{\pgf@circ@bipole@path{pvsource}{#1}}
+\def\pgf@circ@vsource@path#1{\pgf@circ@bipole@path{vsource}{#1}}
+\def\pgf@circ@dcvsource@path#1{\pgf@circ@bipole@path{dcvsource}{#1}}
+\def\pgf@circ@vsourceam@path#1{\pgf@circ@bipole@path{vsourceAM}{#1}}
+\def\pgf@circ@vsourcesin@path#1{\pgf@circ@bipole@path{vsourcesin}{#1}}
+\def\pgf@circ@isource@path#1{\pgf@circ@bipole@path{isource}{#1}}
+\def\pgf@circ@oosource@path#1{\pgf@circ@bipole@path{oosource}{#1}}
+\def\pgf@circ@dcisource@path#1{\pgf@circ@bipole@path{dcisource}{#1}}
+\def\pgf@circ@isourcesin@path#1{\pgf@circ@bipole@path{isourcesin}{#1}}
+\def\pgf@circ@vsourcesquare@path#1{\pgf@circ@bipole@path{vsourcesquare}{#1}}
+\def\pgf@circ@vsourcetri@path#1{\pgf@circ@bipole@path{vsourcetri}{#1}}
+\def\pgf@circ@isourceam@path#1{\pgf@circ@bipole@path{isourceAM}{#1}}
+\def\pgf@circ@cvsource@path#1{\pgf@circ@bipole@path{cvsource}{#1}}
+\def\pgf@circ@cvsourceam@path#1{\pgf@circ@bipole@path{cvsourceAM}{#1}}
+\def\pgf@circ@cvsourcesin@path#1{\pgf@circ@bipole@path{cvsourcesin}{#1}}
+\def\pgf@circ@cisource@path#1{\pgf@circ@bipole@path{cisource}{#1}}
+\def\pgf@circ@cisourceam@path#1{\pgf@circ@bipole@path{cisourceAM}{#1}}
+\def\pgf@circ@cisourcesin@path#1{\pgf@circ@bipole@path{cisourcesin}{#1}}
+\def\pgf@circ@short@path#1{\pgf@circ@bipole@path{short}{#1}}
+\def\pgf@circ@cspst@path#1{\pgf@circ@bipole@path{cspst}{#1}}
+\def\pgf@circ@ospst@path#1{\pgf@circ@bipole@path{ospst}{#1}}
+\def\pgf@circ@nos@path#1{\pgf@circ@bipole@path{nos}{#1}}
+\def\pgf@circ@ncs@path#1{\pgf@circ@bipole@path{ncs}{#1}}
+\def\pgf@circ@pushbutton@path#1{\pgf@circ@bipole@path{pushbutton}{#1}}
+\def\pgf@circ@ncpushbutton@path#1{\pgf@circ@bipole@path{ncpushbutton}{#1}}
+\def\pgf@circ@open@path#1{\pgf@circ@bipole@path{open}{#1}}
+\def\pgf@circ@generic@path#1{\pgf@circ@bipole@path{generic}{#1}}
+\def\pgf@circ@ageneric@path#1{\pgf@circ@bipole@path{ageneric}{#1}}
+\def\pgf@circ@tgeneric@path#1{\pgf@circ@bipole@path{tgeneric}{#1}}
+\def\pgf@circ@fullgeneric@path#1{\pgf@circ@bipole@path{fullgeneric}{#1}}
+\def\pgf@circ@tfullgeneric@path#1{\pgf@circ@bipole@path{tfullgeneric}{#1}}
+\def\pgf@circ@ammeter@path#1{\pgf@circ@bipole@path{ammeter}{#1}}
+\def\pgf@circ@ohmmeter@path#1{\pgf@circ@bipole@path{ohmmeter}{#1}}
+\def\pgf@circ@voltmeter@path#1{\pgf@circ@bipole@path{voltmeter}{#1}}
+\def\pgf@circ@oscope@path#1{\pgf@circ@bipole@path{oscope}{#1}}
+\def\pgf@circ@empty@path#1{}
+\def\pgf@circ@photoresistor@path#1{\pgf@circ@bipole@path{photoresistor}{#1}}
+\def\pgf@circ@emptythyristor@path#1{\pgf@circ@bipole@path{emptythyristor}{#1}}
+\def\pgf@circ@fullthyristor@path#1{\pgf@circ@bipole@path{fullthyristor}{#1}}
+\def\pgf@circ@toggleswitch@path#1{\pgf@circ@bipole@path{toggleswitch}{#1}}
+\def\pgf@circ@memristor@path#1{\pgf@circ@bipole@path{memristor}{#1}}
+\def\pgf@circ@emptytriac@path#1{\pgf@circ@bipole@path{emptytriac}{#1}}
+\def\pgf@circ@fulltriac@path#1{\pgf@circ@bipole@path{fulltriac}{#1}}
+\def\pgf@circ@tline@path#1{\pgf@circ@bipole@path{tline}{#1}}
+\def\pgf@circ@mstline@path#1{\pgf@circ@bipole@path{mstline}{#1}}
+\def\pgf@circ@squid@path#1{\pgf@circ@bipole@path{squid}{#1}}
+\def\pgf@circ@barrier@path#1{\pgf@circ@bipole@path{barrier}{#1}}
+\def\pgf@circ@thermocouple@path#1{\pgf@circ@bipole@path{thermocouple}{#1}}
+\def\pgf@circ@fuse@path#1{\pgf@circ@bipole@path{fuse}{#1}}
+\def\pgf@circ@afuse@path#1{\pgf@circ@bipole@path{afuse}{#1}}
+
+\def\pgf@circ@gfsurgearrester@path#1{\ifpgf@circuit@europeangfsurgearrester\pgf@circ@europeangfsurgearrester@path{#1}\else\pgf@circ@americangfsurgearrester@path{#1}\fi}
+\def\pgf@circ@europeangfsurgearrester@path#1{\pgf@circ@bipole@path{european gas filled surge arrester}{#1}}
+\def\pgf@circ@americangfsurgearrester@path#1{\pgf@circ@bipole@path{american gas filled surge arrester}{#1}}
+
+\def\pgf@circ@twoport@path#1{\pgf@circ@bipole@path{twoport}{#1}}
+\def\pgf@circ@vco@path#1{\pgf@circ@bipole@path{vco}{#1}}
+\def\pgf@circ@bandpass@path#1{\pgf@circ@bipole@path{bandpass}{#1}}
+\def\pgf@circ@bandstop@path#1{\pgf@circ@bipole@path{bandstop}{#1}}
+\def\pgf@circ@highpass@path#1{\pgf@circ@bipole@path{highpass}{#1}}
+\def\pgf@circ@lowpass@path#1{\pgf@circ@bipole@path{lowpass}{#1}}
+\def\pgf@circ@adc@path#1{\pgf@circ@bipole@path{adc}{#1}}
+\def\pgf@circ@dac@path#1{\pgf@circ@bipole@path{dac}{#1}}
+\def\pgf@circ@dsp@path#1{\pgf@circ@bipole@path{dsp}{#1}}
+\def\pgf@circ@fft@path#1{\pgf@circ@bipole@path{fft}{#1}}
+\def\pgf@circ@amp@path#1{\pgf@circ@bipole@path{amp}{#1}}
+\def\pgf@circ@vamp@path#1{\pgf@circ@bipole@path{vamp}{#1}}
+\def\pgf@circ@piattenuator@path#1{\pgf@circ@bipole@path{piattenuator}{#1}}
+\def\pgf@circ@vpiattenuator@path#1{\pgf@circ@bipole@path{vpiattenuator}{#1}}
+\def\pgf@circ@tattenuator@path#1{\pgf@circ@bipole@path{tattenuator}{#1}}
+\def\pgf@circ@vtattenuator@path#1{\pgf@circ@bipole@path{vtattenuator}{#1}}
+\def\pgf@circ@phaseshifter@path#1{\pgf@circ@bipole@path{phaseshifter}{#1}}
+\def\pgf@circ@vphaseshifter@path#1{\pgf@circ@bipole@path{vphaseshifter}{#1}}
+\def\pgf@circ@detector@path#1{\pgf@circ@bipole@path{detector}{#1}}
+
+%%Mechanical
+\def\pgf@circ@spring@path#1{\pgf@circ@bipole@path{spring}{#1}}
+\def\pgf@circ@mass@path#1{\pgf@circ@bipole@path{mass}{#1}}
+\def\pgf@circ@damper@path#1{\pgf@circ@bipole@path{damper}{#1}}
+\def\pgf@circ@viscoe@path#1{\pgf@circ@bipole@path{viscoe}{#1}}
+
+%% Styles
+
+\def\comnpatname{\ifpgf@circuit@compat *\else\fi}
+\def\compattikzset#1{\tikzset{\comnpatname#1}}
+
+%\def\ctikzsetbipole#1#2{%
+% \tikzset{#1/.style= {to path=#2, \circuitikzbasekey, l=##1}}%
+%}
+
+\compattikzset{spring/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@spring@path, l=#1}}
+\compattikzset{mass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mass@path, l=#1}}
+\compattikzset{damper/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@damper@path, l=#1}}
+\compattikzset{viscoe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@viscoe@path, l=#1}}
+\compattikzset{resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistor@path, l=#1}}
+\compattikzset{american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{resistor}{#1}, l=#1}}
+\compattikzset{european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{generic}{#1}, l=#1}}
+\compattikzset{potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@potentiometer@path, l=#1}}
+\compattikzset{varistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@varistor@path, l=#1}}
+\compattikzset{photoresistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@photoresistor@path, l=#1}}
+\compattikzset{thermistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistor@path, l=#1}}
+\compattikzset{thermistor ptc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorptc@path, l=#1}}
+\compattikzset{thermistor ntc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{american potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{potentiometer}{#1}, l=#1}}
+\compattikzset{european potentiometer/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{genericpotentiometer}{#1}, l=#1}}
+\compattikzset{variable resistor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vresistor@path, l=#1}}
+\compattikzset{variable american resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{vresistor}{#1}, l=#1}}
+\compattikzset{variable european resistor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@bipole@path{tgeneric}{#1}, l=#1}}
+\compattikzset{capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitor@path, l=#1}}
+\compattikzset{elko/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{ecapacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ecapacitor@path, l=#1}}
+\compattikzset{polar capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@polarcapacitor@path, l=#1}}
+\compattikzset{variable capacitor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcapacitor@path, l=#1}}
+\compattikzset{piezoelectric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piezoelectric@path, l=#1}}
+\compattikzset{battery/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@battery@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batteryone@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{battery2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@batterytwo@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductor@path, l=#1}}
+\compattikzset{gf surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americangfsurgearrester@path, l=#1}}
+\compattikzset{european gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeangfsurgearrester@path, l=#1}}
+\compattikzset{gas filled surge arrester/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@gfsurgearrester@path, l=#1}}
+\compattikzset{american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductor@path, l=#1}}
+\compattikzset{cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductor@path, l=#1}}
+\compattikzset{cute choke/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cutechoke@path, l=#1}}
+\compattikzset{european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductor@path, l=#1}}
+\compattikzset{variable inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vinductor@path, l=#1}}
+\compattikzset{variable european inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@veuropeaninductor@path, l=#1}}
+\compattikzset{variable american inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamericaninductor@path, l=#1}}
+\compattikzset{variable cute inductor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vcuteinductor@path, l=#1}}
+\compattikzset{tline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tline@path, l=#1}}
+\compattikzset{transmission line/.style = {tline = #1}}
+\compattikzset{TL/.style = {tline = #1}}
+\compattikzset{mstline/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mstline@path, l=#1}}
+\compattikzset{european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsource@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{american controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceam@path, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisource@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{american controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceam@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{square voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcesquare@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{triangle voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourcetri@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1 }}
+\compattikzset{sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{controlled sinusoidal voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourcesin@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{controlled sinusoidal current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourcesin@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+
+\compattikzset{voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi current source = #1, \circuitikzbasekey/bipole/is current=true}}
+\compattikzset{controlled voltage source/.style = {\comnpatname \ifpgf@circuit@europeanvoltage european \else american \fi controlled voltage source, \circuitikzbasekey/bipole/is voltage=true, v=#1}}
+\compattikzset{controlled current source/.style = {\comnpatname \ifpgf@circuit@europeancurrent european \else american \fi controlled current source = #1, \circuitikzbasekey/bipole/is current=true}}
+
+
+\compattikzset{generic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@generic@path, l=#1}}
+\compattikzset{ageneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ageneric@path, l=#1}}
+\compattikzset{tgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tgeneric@path, l=#1}}
+\compattikzset{fullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullgeneric@path, l=#1}}
+\compattikzset{tfullgeneric/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tfullgeneric@path, l=#1}}
+\compattikzset{short/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@short@path}}
+\compattikzset{open/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@open@path}}
+
+\compattikzset{lamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lamp@path}}
+\compattikzset{bulb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bulb@path, l=#1}}
+
+\compattikzset{squid/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@squid@path}}
+\compattikzset{barrier/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@barrier@path}}
+\compattikzset{thermocouple/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermocouple@path}}
+\compattikzset{fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fuse@path}}
+\compattikzset{asymmetric fuse/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@afuse@path}}
+
+\compattikzset{twoport/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@twoport@path}}
+\compattikzset{vco/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vco@path}}
+\compattikzset{bandpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandpass@path}}
+\compattikzset{bandstop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@bandstop@path}}
+\compattikzset{highpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@highpass@path}}
+\compattikzset{lowpass/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@lowpass@path}}
+\compattikzset{adc/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@adc@path}}
+\compattikzset{dac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dac@path}}
+\compattikzset{dsp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dsp@path}}
+\compattikzset{fft/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fft@path}}
+\compattikzset{amp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@amp@path}}
+\compattikzset{vamp/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vamp@path}}
+\compattikzset{piattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@piattenuator@path}}
+\compattikzset{vpiattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vpiattenuator@path}}
+\compattikzset{tattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@tattenuator@path}}
+\compattikzset{vtattenuator/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vtattenuator@path}}
+\compattikzset{phaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@phaseshifter@path}}
+\compattikzset{vphaseshifter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vphaseshifter@path}}
+\compattikzset{detector/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@detector@path}}
+
+% % % % % %
+% % Begin of Diodes
+% % % % % %
+
+\def\pgf@circ@fulldiode@path#1{\pgf@circ@bipole@path{fulldiode}{#1}}
+\def\pgf@circ@fullzdiode@path#1{\pgf@circ@bipole@path{fullzdiode}{#1}}
+\def\pgf@circ@fullzzdiode@path#1{\pgf@circ@bipole@path{fullzzdiode}{#1}}
+\def\pgf@circ@fullsdiode@path#1{\pgf@circ@bipole@path{fullsdiode}{#1}}
+\def\pgf@circ@fulltdiode@path#1{\pgf@circ@bipole@path{fulltdiode}{#1}}
+\def\pgf@circ@fulllediode@path#1{\pgf@circ@bipole@path{fulllediode}{#1}}
+\def\pgf@circ@fullpdiode@path#1{\pgf@circ@bipole@path{fullpdiode}{#1}}
+\def\pgf@circ@fullvarcap@path#1{\pgf@circ@bipole@path{fullvarcap}{#1}}
+\def\pgf@circ@fullbidirectionaldiode@path#1{\pgf@circ@bipole@path{fullbidirectionaldiode}{#1}}
+\def\pgf@circ@emptydiode@path#1{\pgf@circ@bipole@path{emptydiode}{#1}}
+\def\pgf@circ@emptyzdiode@path#1{\pgf@circ@bipole@path{emptyzdiode}{#1}}
+\def\pgf@circ@emptyzzdiode@path#1{\pgf@circ@bipole@path{emptyzzdiode}{#1}}
+\def\pgf@circ@emptysdiode@path#1{\pgf@circ@bipole@path{emptysdiode}{#1}}
+\def\pgf@circ@emptytdiode@path#1{\pgf@circ@bipole@path{emptytdiode}{#1}}
+\def\pgf@circ@emptylediode@path#1{\pgf@circ@bipole@path{emptylediode}{#1}}
+\def\pgf@circ@emptypdiode@path#1{\pgf@circ@bipole@path{emptypdiode}{#1}}
+\def\pgf@circ@emptyvarcap@path#1{\pgf@circ@bipole@path{emptyvarcap}{#1}}
+\def\pgf@circ@emptybidirectionaldiode@path#1{\pgf@circ@bipole@path{emptybidirectionaldiode}{#1}}
+
+\compattikzset{full diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulldiode@path}}
+\compattikzset{full Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullsdiode@path}}
+\compattikzset{full Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzdiode@path}}
+\compattikzset{full ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullzzdiode@path}}
+\compattikzset{full tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltdiode@path}}
+\compattikzset{full photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullpdiode@path}}
+\compattikzset{full led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulllediode@path}}
+\compattikzset{full varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullvarcap@path}}
+\compattikzset{full bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullbidirectionaldiode@path}}
+\compattikzset{full thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fullthyristor@path}}
+\compattikzset{full triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@fulltriac@path}}
+
+\compattikzset{empty diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{empty Schottky diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{empty Zener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{empty ZZener diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{empty tunnel diode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{empty photodiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{empty led/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{empty varcap/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{empty bidirectionaldiode/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptybidirectionaldiode@path}}
+\compattikzset{empty thyristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptythyristor@path}}
+\compattikzset{empty triac/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\compattikzset{stroke diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptydiode@path}}
+\compattikzset{stroke Schottky diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptysdiode@path}}
+\compattikzset{stroke Zener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzdiode@path}}
+\compattikzset{stroke ZZener diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyzzdiode@path}}
+\compattikzset{stroke tunnel diode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytdiode@path}}
+\compattikzset{stroke photodiode/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptypdiode@path}}
+\compattikzset{stroke led/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptylediode@path}}
+\compattikzset{stroke varcap/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptyvarcap@path}}
+\compattikzset{stroke thyristor/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptythyristor@path}}
+%\compattikzset{stroke triac/.style = {\circuitikzbasekey,\circuitikzbasekey/bipole/is strokedsymbol=true, /tikz/to path=\pgf@circ@emptytriac@path}}
+
+\def\pgfcircdiodestylemacro{\ifpgf@circuit@strokediode stroke \else\ifpgf@circuit@fulldiode full \else empty \fi\fi}
+
+\compattikzset{Schottky diode/.style = {\comnpatname \pgfcircdiodestylemacro Schottky diode}}
+\compattikzset{Zener diode/.style = {\comnpatname \pgfcircdiodestylemacro Zener diode}}
+\compattikzset{ZZener diode/.style = {\comnpatname \pgfcircdiodestylemacro ZZener diode}}
+\compattikzset{tunnel diode/.style = {\comnpatname \pgfcircdiodestylemacro tunnel diode}}
+\compattikzset{photodiode/.style = {\comnpatname \pgfcircdiodestylemacro photodiode}}
+\compattikzset{led/.style = {\comnpatname \pgfcircdiodestylemacro led}}
+\compattikzset{varcap/.style = {\comnpatname \pgfcircdiodestylemacro varcap}}
+\compattikzset{diode/.style = {\comnpatname \pgfcircdiodestylemacro diode}}
+\compattikzset{thyristor/.style = {\comnpatname \pgfcircdiodestylemacro thyristor}}
+\compattikzset{triac/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi triac}}%no stroke triac!
+\compattikzset{bidirectionaldiode/.style = {\comnpatname \ifpgf@circuit@fulldiode full \else empty \fi bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+%% Define Shortcuts
+\compattikzset{Do/.style = {\comnpatname empty diode}}
+\compattikzset{tDo/.style = {\comnpatname empty tunnel diode}}
+\compattikzset{zDo/.style = {\comnpatname empty Zener diode}}
+\compattikzset{zzDo/.style = {\comnpatname empty ZZener diode}}
+\compattikzset{sDo/.style = {\comnpatname empty Schottky diode}}
+\compattikzset{pDo/.style = {\comnpatname empty photodiode}}
+\compattikzset{leDo/.style = {\comnpatname empty led}}
+\compattikzset{VCo/.style = {\comnpatname empty varcap}}
+\compattikzset{biDo/.style = {\comnpatname empty bidirectionaldiode}}
+\compattikzset{Tyo/.style = {\comnpatname empty thyristor}}
+\compattikzset{Tro/.style = {\comnpatname empty triac}}
+
+\compattikzset{D*/.style = {\comnpatname full diode}}
+\compattikzset{tD*/.style = {\comnpatname full tunnel diode}}
+\compattikzset{zD*/.style = {\comnpatname full Zener diode}}
+\compattikzset{zzD*/.style = {\comnpatname full ZZener diode}}
+\compattikzset{sD*/.style = {\comnpatname full Schottky diode}}
+\compattikzset{pD*/.style = {\comnpatname full photodiode}}
+\compattikzset{leD*/.style = {\comnpatname full led}}
+\compattikzset{VC*/.style = {\comnpatname full varcap}}
+\compattikzset{biD*/.style = {\comnpatname full bidirectionaldiode}}
+\compattikzset{Ty*/.style = {\comnpatname full thyristor}}
+\compattikzset{Tr*/.style = {\comnpatname full triac}}
+
+\compattikzset{D/.style = {\comnpatname diode}}
+\compattikzset{tD/.style = {\comnpatname tunnel diode}}
+\compattikzset{zD/.style = {\comnpatname Zener diode}}
+\compattikzset{zzD/.style = {\comnpatname ZZener diode}}
+\compattikzset{sD/.style = {\comnpatname Schottky diode}}
+\compattikzset{pD/.style = {\comnpatname photodiode}}
+\compattikzset{leD/.style = {\comnpatname led}}
+\compattikzset{VC/.style = {\comnpatname varcap}}
+\compattikzset{biD/.style = {\comnpatname bidirectionaldiode}}
+\compattikzset{Ty/.style = {\comnpatname thyristor}}
+\compattikzset{Tr/.style = {\comnpatname triac}}
+
+\compattikzset{D-/.style = {\comnpatname stroke diode}}
+\compattikzset{tD-/.style = {\comnpatname stroke tunnel diode}}
+\compattikzset{zD-/.style = {\comnpatname stroke Zener diode}}
+\compattikzset{zzD-/.style = {\comnpatname stroke ZZener diode}}
+\compattikzset{sD-/.style = {\comnpatname stroke Schottky diode}}
+\compattikzset{pD-/.style = {\comnpatname stroke photodiode}}
+\compattikzset{leD-/.style = {\comnpatname stroke led}}
+\compattikzset{VC-/.style = {\comnpatname stroke varcap}}
+\compattikzset{Ty-/.style = {\comnpatname stroke thyristor}}
+\compattikzset{Tr-/.style = {\comnpatname empty triac}}%no stroke triac!
+\compattikzset{biD-/.style = {\comnpatname empty bidirectionaldiode}}%no stroke bidirectionaldiode! (based on triac)
+
+% % % % % %
+% % End of Diodes
+% % % % % %
+
+
+\compattikzset{memristor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@memristor@path}}
+\compattikzset{closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ospst@path, l=#1}}
+\compattikzset{ncs/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{nos/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{normal closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncs@path, l=#1}}
+\compattikzset{normal open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@nos@path, l=#1}}
+\compattikzset{switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cspst@path, l=#1}}
+\compattikzset{push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{nopb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{normally open push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pushbutton@path, l=#1}}
+\compattikzset{ncpb/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}}
+\compattikzset{normally closed push button/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ncpushbutton@path, l=#1}}
+\compattikzset{toggle switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@toggleswitch@path}}
+
+\compattikzset{ammeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ammeter@path}}
+\compattikzset{voltmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@voltmeter@path}}
+\compattikzset{ohmmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@ohmmeter@path}}
+\tikzset{oscope/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@oscope@path, l=#1}}
+
+% cute switches
+%% closed cute switch
+\def\pgf@circ@cuteclosedswitch@path#1{\pgf@circ@bipole@path{cuteclosedswitch}{#1}}
+\compattikzset{cute closed switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosedswitch@path, l=#1}}
+\compattikzset{ccsw/.style= {\comnpatname cute closed switch= #1}}
+
+%% open cute switch
+\def\pgf@circ@cuteopenswitch@path#1{\pgf@circ@bipole@path{cuteopenswitch}{#1}}
+\compattikzset{cute open switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopenswitch@path, l=#1}}
+\compattikzset{cosw/.style= {\comnpatname cute open switch= #1}}
+
+%% closing cute switch
+\def\pgf@circ@cuteclosingswitch@path#1{\pgf@circ@bipole@path{cuteclosingswitch}{#1}}
+\compattikzset{cute closing switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteclosingswitch@path, l=#1}}
+\compattikzset{ccgsw/.style= {\comnpatname cute closing switch= #1}}
+
+%% opening cute switch
+\def\pgf@circ@cuteopeningswitch@path#1{\pgf@circ@bipole@path{cuteopeningswitch}{#1}}
+\compattikzset{cute opening switch/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteopeningswitch@path, l=#1}}
+\compattikzset{cogsw/.style= {\comnpatname cute opening switch= #1}}
+
+
+% short forms
+\compattikzset{esource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@esource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{pvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@pvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcvsource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcvsource@path, \circuitikzbasekey/bipole/is voltage=true,\circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{dcisource/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@dcisource@path, \circuitikzbasekey/bipole/is current=true, l=#1}}
+
+\compattikzset{ioosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is current=true,/tikz/to path=\pgf@circ@oosource@path, i=#1}}
+\compattikzset{voosource/.style = {\circuitikzbasekey, \circuitikzbasekey/bipole/is voltage=true,/tikz/to path=\pgf@circ@oosource@path, v=#1}}
+
+\compattikzset{vsource/.style = {\comnpatname voltage source = #1}}
+\compattikzset{isource/.style = {\comnpatname current source = #1}}
+\compattikzset{cisource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{cvsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{vsourcesin/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{vsourcesquare/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{vsourcetri/.style = {triangle voltage source = #1}}
+\compattikzset{isourcesin/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{cisourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\compattikzset{cvsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+
+\compattikzset{controlled vsource/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{controlled isource/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{controlled vsourcesin/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\compattikzset{controlled isourcesin/.style = {\comnpatname controlled sinusoidal current source = #1}}
+
+\compattikzset{R/.style= {\comnpatname resistor = #1}}
+\compattikzset{vR/.style= {\comnpatname variable resistor = #1}}
+\compattikzset{phR/.style= {\comnpatname photoresistor = #1}}
+\compattikzset{thR/.style= {\comnpatname thermistor = #1}}
+\compattikzset{thRp/.style= {\comnpatname thermistor ptc= #1}}
+\compattikzset{thRn/.style= {\comnpatname thermistor ntc= #1}}
+\compattikzset{pR/.style= {\comnpatname potentiometer = #1}}
+\compattikzset{C/.style = {\comnpatname capacitor = #1}}
+\compattikzset{eC/.style = {\comnpatname ecapacitor = #1}}
+\compattikzset{pC/.style = {\comnpatname polar capacitor = #1}}
+\compattikzset{vC/.style = {\comnpatname variable capacitor = #1}}
+\compattikzset{PZ/.style = {\comnpatname piezoelectric = #1}}
+\compattikzset{L/.style = {\comnpatname inductor = #1}}
+\compattikzset{vL/.style = {\comnpatname variable inductor = #1}}
+\compattikzset{V/.style = {\comnpatname voltage source = #1}}
+\compattikzset{cV/.style = {\comnpatname controlled voltage source = #1}}
+\compattikzset{sV/.style = {\comnpatname sinusoidal voltage source = #1}}
+\compattikzset{sqV/.style = {\comnpatname square voltage source = #1}}
+\compattikzset{tV/.style = {\comnpatname triangle voltage source = #1}}
+\compattikzset{csV/.style = {\comnpatname controlled sinusoidal voltage source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{V#1/.style = {\comnpatname voltage source, v#1=##1} }
+ \compattikzset{cV#1/.style = {\comnpatname controlled voltage source, v#1=##1} }
+ \compattikzset{sV#1/.style = {\comnpatname sinusoidal voltage source, v#1=##1} }
+ \compattikzset{csV#1/.style = {\comnpatname controlled sinusoidal voltage source, v#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+%current sources
+\compattikzset{I/.style = {\comnpatname current source = #1}}
+\compattikzset{cI/.style = {\comnpatname controlled current source = #1}}
+\compattikzset{sI/.style = {\comnpatname sinusoidal current source = #1}}
+\compattikzset{csI/.style = {\comnpatname controlled sinusoidal current source = #1}}
+\def\pgf@temp#1{
+ \compattikzset{I#1/.style = {\comnpatname current source, i#1=##1} }
+ \compattikzset{cI#1/.style = {\comnpatname controlled current source, i#1=##1} }
+ \compattikzset{sI#1/.style = {\comnpatname sinusoidal current source, i#1=##1} }
+ \compattikzset{csI#1/.style = {\comnpatname controlled sinusoidal current source, i#1=##1} }
+}
+\pgf@temp{_>} \pgf@temp{_<} \pgf@temp{^>} \pgf@temp{^<}
+\pgf@temp{>_} \pgf@temp{<_} \pgf@temp{>^} \pgf@temp{<^}
+\pgf@temp{>} \pgf@temp{<} \pgf@temp{^} \pgf@temp{_}
+
+% cute sources
+\def\pgf@circ@vsourceC@path#1{\pgf@circ@bipole@path{vsourceC}{#1}}
+\compattikzset{cute european voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceC/.style= {\comnpatname cute european voltage source= #1}}
+\compattikzset{ceV/.style= {\comnpatname cute european voltage source= #1}}
+
+\def\pgf@circ@isourceC@path#1{\pgf@circ@bipole@path{isourceC}{#1}}
+\compattikzset{cute european current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceC/.style= {\comnpatname cute european current source= #1}}
+\compattikzset{ceI/.style= {\comnpatname cute european current source= #1}}
+
+\def\pgf@circ@cvsourceC@path#1{\pgf@circ@bipole@path{cvsourceC}{#1}}
+\compattikzset{cute european controlled voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cvsourceC@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{cvsourceC/.style= {\comnpatname cute european controlled voltage source= #1}}
+\compattikzset{cceV/.style= {\comnpatname cute european controlled voltage source= #1}}
+
+\def\pgf@circ@cisourceC@path#1{\pgf@circ@bipole@path{cisourceC}{#1}}
+\compattikzset{cute european controlled current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cisourceC@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{cisourceC/.style= {\comnpatname cute european controlled current source= #1}}
+\compattikzset{cceI/.style= {\comnpatname cute european controlled current source= #1}}
+
+% noise sources
+\def\pgf@circ@vsourceN@path#1{\pgf@circ@bipole@path{vsourceN}{#1}}
+\compattikzset{noise voltage source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@vsourceN@path, \circuitikzbasekey/bipole/is voltage=true, \circuitikzbasekey/bipole/is voltageoutsideofsymbol=true, v=#1}}
+\compattikzset{vsourceN/.style= {\comnpatname noise voltage source= #1}}
+\compattikzset{nV/.style= {\comnpatname noise voltage source= #1}}
+
+\def\pgf@circ@isourceN@path#1{\pgf@circ@bipole@path{isourceN}{#1}}
+\compattikzset{noise current source/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@isourceN@path, \circuitikzbasekey/bipole/is current=true, i=#1}}
+\compattikzset{isourceN/.style= {\comnpatname noise current source= #1}}
+\compattikzset{nI/.style= {\comnpatname noise current source= #1}}
+
+% resistive sensor american style
+\def\pgf@circ@resistivesens@path#1{\pgf@circ@bipole@path{resistivesens}{#1}}
+\compattikzset{american resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@resistivesens@path, l=#1}}
+\compattikzset{european resistive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@thermistorntc@path, l=#1}}
+\compattikzset{resistive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@sresistor@path, l=#1}}
+\compattikzset{sR/.style= {\comnpatname resistive sensor= #1}}
+
+\compattikzset{capacitive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@capacitivesens@path, l=#1}}
+\compattikzset{sC/.style= {\comnpatname capacitive sensor= #1}}
+
+\compattikzset{cute inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@cuteinductivesens@path, l=#1}}
+\compattikzset{european inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@europeaninductivesens@path, l=#1}}
+\compattikzset{american inductive sensor/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@americaninductivesens@path, l=#1}}
+\compattikzset{inductive sensor/.style= {\circuitikzbasekey, /tikz/to path=\pgf@circ@inductivesens@path, l=#1}}
+\compattikzset{sL/.style= {\comnpatname inductive sensor= #1}}
+
+\compattikzset{Mr/.style = {\comnpatname memristor}}
+
+\compattikzset{cspst/.style = {\comnpatname closing switch = #1}}
+\compattikzset{ospst/.style = {\comnpatname opening switch = #1}}
+\compattikzset{spst/.style = {\comnpatname switch = #1}}
+
+\compattikzset{afuse/.style = {\comnpatname asymmetric fuse=#1}}
+
+\compattikzset{vdd/.style = {\comnpatname vcc = #1}}
+\compattikzset{vss/.style = {\comnpatname vee = #1}}
+
+% activate the to-style crossing
+\def\pgf@circ@crossing@path#1{\pgf@circ@bipole@path{crossing}{#1}}
+\compattikzset{crossing/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@crossing@path, l=#1}}
+\compattikzset{xing/.style= {\comnpatname crossing= #1}}
+
+%% loudspeaker and microphone
+
+\def\pgf@circ@loudspeaker@path#1{\pgf@circ@bipole@path{loudspeaker}{#1}}
+\compattikzset{loudspeaker/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@loudspeaker@path, l=#1}}
+
+\def\pgf@circ@mic@path#1{\pgf@circ@bipole@path{mic}{#1}}
+\compattikzset{mic/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@mic@path, l=#1}}
+
+% more instrument
+\def\pgf@circ@rmeter@path#1{\pgf@circ@bipole@path{rmeter}{#1}}
+\compattikzset{rmeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeter@path, l=#1}}
+\def\pgf@circ@rmeterwa@path#1{\pgf@circ@bipole@path{rmeterwa}{#1}}
+\compattikzset{rmeterwa/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@rmeterwa@path, l=#1}}
+\def\pgf@circ@smeter@path#1{\pgf@circ@bipole@path{smeter}{#1}}
+\compattikzset{smeter/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@smeter@path, l=#1}}
+% current loop probes
+\def\pgf@circ@iloop@path#1{\pgf@circ@bipole@path{iloop}{#1}}
+\compattikzset{iloop/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop@path, l=#1}}
+\def\pgf@circ@iloop2@path#1{\pgf@circ@bipole@path{iloop2}{#1}}
+\compattikzset{iloop2/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@iloop2@path, l=#1}}
+% qucs-style probes
+\def\pgf@circ@qiprobe@path#1{\pgf@circ@bipole@path{qiprobe}{#1}}
+\compattikzset{qiprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qiprobe@path, l=#1}}
+\def\pgf@circ@qvprobe@path#1{\pgf@circ@bipole@path{qvprobe}{#1}}
+\compattikzset{qvprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qvprobe@path, l=#1}}
+\def\pgf@circ@qpprobe@path#1{\pgf@circ@bipole@path{qpprobe}{#1}}
+\compattikzset{qpprobe/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@qpprobe@path, l=#1}}
+
+
+% Transistor like bipoles
+
+\def\pgf@circ@trans@path#1#2{
+ \pgfextra{
+ \edef\pgf@temp{\pgfkeysvalueof{/tikz/circuitikz/bipole/name}}
+ \def\pgf@circ@temp{#2}
+ \ifx\pgf@temp\pgf@circ@temp % if it has not a name
+ \pgfmathrandominteger{\pgf@circ@rand}{1000}{9999}
+ \ctikzset{bipole/name = trans\pgf@circ@rand} % create it
+ \fi
+ }
+ \ifpgf@circuit@bipole@inverted
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ \else
+ (\tikztostart) node[coordinate] (\ctikzvalof{bipole/name}start) {}
+ (\tikztotarget) node[coordinate] (\ctikzvalof{bipole/name}end) {}
+ \fi
+ \pgfextra{
+ \pgfmathanglebetweenpoints{\pgfpointanchor{\ctikzvalof{bipole/name}start}{center}}
+ {\pgfpointanchor{\ctikzvalof{bipole/name}end}{center}}
+ \pgfmathadd{\pgfmathresult}{-90}
+ \pgfmathround{\pgfmathresult}
+ \edef\pgf@circ@direction{\pgfmathresult}
+ }
+ ($(\tikztostart) ! .5 ! (\tikztotarget)$)
+ node[#1, /tikz/rotate=\pgf@circ@direction, xscale=\ctikzvalof{mirror value}]
+ (\ctikzvalof{bipole/name}) {} node {\ctikzvalof{bipole/label/name}}
+ \ifcsname pgf@anchor@#1@pathstart\endcsname%if special path-anchors are defined, use them!
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.pathstart)
+ (\ctikzvalof{bipole/name}.pathend) -- (\ctikzvalof{bipole/name}end.center)
+ \else
+ (\ctikzvalof{bipole/name}start.center) --(\ctikzvalof{bipole/name}.left)
+ (\ctikzvalof{bipole/name}.right) -- (\ctikzvalof{bipole/name}end.center)
+ \fi
+ \pgfextra{
+ \pgfcircresetpath
+ }
+ (\tikztotarget) \tikztonodes % e si continua
+}
+
+
+\def\pgf@circ@definetranspath#1{
+ \compattikzset{T#1/.style = {\circuitikzbasekey, /tikz/to path=\pgf@circ@trans@path{#1}{}, l=##1}}
+}
+
+\pgf@circ@definetranspath{elmech}
+\pgf@circ@definetranspath{nmos}
+\pgf@circ@definetranspath{pmos}
+\pgf@circ@definetranspath{hemt}
+\pgf@circ@definetranspath{npn}
+\pgf@circ@definetranspath{pnp}
+\pgf@circ@definetranspath{nfet}
+\pgf@circ@definetranspath{nigfete}
+\pgf@circ@definetranspath{nigfetd}
+\pgf@circ@definetranspath{nigfetebulk}
+\pgf@circ@definetranspath{pfet}
+\pgf@circ@definetranspath{pigfete}
+\pgf@circ@definetranspath{pigfetd}
+\pgf@circ@definetranspath{pigfetebulk}
+\pgf@circ@definetranspath{njfet}
+\pgf@circ@definetranspath{pjfet}
+\pgf@circ@definetranspath{pigbt}
+\pgf@circ@definetranspath{nigbt}
+\pgf@circ@definetranspath{Lpigbt}
+\pgf@circ@definetranspath{Lnigbt}
+%%%---------- close: tex/pgfcircpath
+
+\catcode`\@=\tikzatcode
+\catcode`\|=\tikzbarcode
+\catcode`\!=\tikzexclaimcode
+
+% define the environment
+\long\def\startcircuitikz#1\stopcircuitikz{\starttikzpicture#1\stoptikzpicture}
+
+\protect
+
+\stopmodule
+
+\endinput
diff --git a/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
new file mode 100644
index 0000000000..a5117dfe78
--- /dev/null
+++ b/graphics/pgf/contrib/circuitikz/tex/t-circuitikz.tex
@@ -0,0 +1,139 @@
+\def\pgfcircversion{0.9.4}
+\def\pgfcircversiondate{2019/08/30}
+\writestatus{loading}{\pgfcircversiondate{} The CircuiTikz circuit drawing package version \pgfcircversion}
+
+\usemodule[tikz]
+
+\startmodule[circuitikz]
+\usetikzlibrary[calc]
+\usetikzlibrary[arrows.meta, bending]
+
+\unprotect
+
+\edef\tikzatcode{\the\catcode`\@}
+\edef\tikzbarcode{\the\catcode`\|}
+\edef\tikzexclaimcode{\the\catcode`\!}
+\catcode`\@=11
+\catcode`\|=12
+\catcode`\!=12
+
+\let\tiny=\tfxx
+\let\small=\tfx
+
+\input pgfcirc.defines.tex
+\input pgfcircutils.tex
+
+\input pgfcircshapes.tex
+\input pgfcircmonopoles.tex
+\input pgfcircbipoles.tex
+\input pgfcirctripoles.tex
+\input pgfcircquadpoles.tex
+\input pgfcircmultipoles.tex
+
+\input pgfcirclabel.tex
+\input pgfcircvoltage.tex
+\input pgfcirccurrent.tex
+\input pgfcircflow.tex
+
+% defaults
+
+\setupmodule
+ [current=european,
+ voltage=european,
+ resistor=american,
+ inductor=cute,
+ logic=american,
+ siunitx=true,
+ arrowmos=false]
+
+\processaction
+ [\currentmoduleparameter{voltage}]
+ [european=>\ctikzset{voltage=european},
+ american=>\ctikzset{voltage=american}]
+
+\processaction
+ [\currentmoduleparameter{current}]
+ [european=>\ctikzset{ current=european},
+ american=>\ctikzset{ current=american}]
+
+\processaction
+ [\currentmoduleparameter{label}]
+ [straight=>\ctikzset{label/align = straight},
+ align=>\ctikzset{label/align = rotate},
+ smart=>\ctikzset{label/align = smart}]
+
+\processaction
+ [\currentmoduleparameter{resistor}]
+ [european=>\ctikzset{ resistor=european},
+ american=>\ctikzset{ resistor=american}]
+
+\processaction
+ [\currentmoduleparameter{inductor}]
+ [european=>\ctikzset{ inductor=european},
+ american=>\ctikzset{ inductor=american},
+ cute=>\ctikzset{ inductor=cute}]
+
+\processaction
+ [\currentmoduleparameter{diode}]
+ [full=>\ctikzset{ diode=full},
+ empty=>\ctikzset{ diode=empty}]
+
+\processaction
+ [\currentmoduleparameter{logic}]
+ [european=>\ctikzset{ logic ports=european},
+ american=>\ctikzset{ logic ports=american}]
+
+\processaction
+ [\currentmoduleparameter{siunitx}]
+ [true=>\def\SI#1#2{#1\,#2}
+ \def\ampere{\rm{A}}
+ \def\volt{\rm{V}}
+ \def\ohm{\Omega}
+ \def\siemens{\rm{S}}
+ \def\farad{\rm{F}}
+ \def\henry{\rm{H}}
+ \def\second{\rm{s}}
+ \def\coulomb{\rm{C}}
+ \def\siemens{\rm{S}}
+ \def\radians{\rm{rad}}
+ \def\milli{\rm{m}}
+ \def\micro{\mu}
+ \def\nano{\rm{n}}
+ \def\pico{\rm{p}}
+ \def\kilo{\rm{k}}
+ \def\mega{\rm{M}}
+ \def\giga{\rm{G}}
+ \def\tera{\rm{T}},
+ false=>]
+% \s!default=>\pgf@circ@siunitxtrue,
+
+\processaction
+ [\currentmoduleparameter{arrowmos}]
+ [true=>\pgf@circuit@mos@arrowstrue,
+ false=>\pgf@circuit@mos@arrowsfalse]
+% \s!default=>\pgf@circuit@mos@arrowstrue,
+
+
+\ifpgf@circ@siunitx
+ % nothing! siunitx and xstrings don't work in context
+\fi
+
+
+% Context specific
+
+\ctikzset{tripoles/op amp/font/.initial=\switchtobodyfont[small]}
+
+\input pgfcircpath.tex
+
+\catcode`\@=\tikzatcode
+\catcode`\|=\tikzbarcode
+\catcode`\!=\tikzexclaimcode
+
+% define the environment
+\long\def\startcircuitikz#1\stopcircuitikz{\starttikzpicture#1\stoptikzpicture}
+
+\protect
+
+\stopmodule
+
+\endinput
diff --git a/graphics/pgf/contrib/codeanatomy/README.md b/graphics/pgf/contrib/codeanatomy/README.md
new file mode 100644
index 0000000000..32d85cfa5b
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/README.md
@@ -0,0 +1,64 @@
+`codeanatomy` -- Draw Code Anatomy
+==================================
+
+(C) 2019 Hồng-Phúc Bùi
+
+The idea of this Package is to typeset illustrations of pieces of code with
+annotations on each single parts of code (Code Anatomy). The origin of this idea is
+code illustrations in the texbook _Computer Science An Interdisciplinary Approach_
+from Robert Sedgewick and Kevin Wayne.
+
+This package just provides tools to draw those figures.
+
+Some illustrations can be found here:
+
+<a href="https://introcs.cs.princeton.edu/java/home/">https://introcs.cs.princeton.edu/java/home/</a>
+
+for example the origin illustation of static method in java:
+<img src="https://introcs.cs.princeton.edu/java/11cheatsheet/images/function.png">
+
+
+Licence
+-------
+
+This package may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+License or any later version. The latest version
+of this license is in the file https://www.latex-project.org/lppl.txt
+
+Build and Install (for Distributor)
+-----------------------------------
+
+* To build the style file `codeanatomy.sty` just run **one** of
+
+```
+latex codeanatomy.ins
+pdflatex codeanatomy.ins
+xelatex codeanatomy.ins
+lualatex codeanatomy.ins
+```
+
+then you can copy `codeanatomy.sty` to your local `texmf` tree, where latex can find it.
+
+* To create PDF Document manual you must use `lualatex`
+
+```
+lualatex codeanatomy.dtx
+lualatex codeanatomy.usage.tex
+lualatex codeanatomy.lstlisting.tex
+```
+
+(`lualatex` because of my name, really ego right! It needs unicode to be typeset correctly.)
+
+Development
+-----------
+
+I try to use latex3 as much as posible. You can use
+
+```
+l3build doc
+```
+
+to create the style file and documentation files at once. You can also (like I also do) use `make`
+to call repeatly tasks.
+
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.dtx b/graphics/pgf/contrib/codeanatomy/codeanatomy.dtx
new file mode 100644
index 0000000000..4651dadeaa
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.dtx
@@ -0,0 +1,532 @@
+% \iffalse meta-comment
+%
+% File: codeanatomy.dtx Copyright (C) 2019 Hong-Phuc Bui
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% https://www.latex-project.org/lppl.txt
+%
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+% https://github.com/hpb-htw/codeanatomy
+%
+% for those people who are interested.
+%
+% -----------------------------------------------------------------------
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[2018/12/01]
+%<package>\ProvidesPackage{codeanatomy}[2019/07/12 v0.4-Alpha draw Code Anatomy]
+% \fi
+%
+% \iffalse
+%<*driver>
+\documentclass[full]{l3doc}
+
+\usepackage{fontspec}
+\usepackage{luaotfload}
+
+
+\usepackage{biblatex}
+\addbibresource{literatur.bib}
+\newcommand{\slsh}{\textbackslash{}}
+\newcommand{\TikZ}{Ti\textit{k}Z}
+\newcommand{\fixedBug}[1]{\tikz[baseline=(X.base)]\node[cross out,draw] (X) {#1};}
+\def\thinmargin{\list{}{\rightmargin-50pt\leftmargin-90pt}\item[]}
+\let\endthinmargin=\endlist
+
+\usepackage{listings}
+\lstset {
+ basicstyle=\small\ttfamily
+ ,escapeinside={+}{+}
+}
+
+\usepackage{codeanatomy}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{\jobname.sty}
+% \DoNotIndex{\definecolor, \colorlet}
+% \DoNotIndex{\NewDocumentCommand, \node}
+% \DoNotIndex{\phantom}
+% \DoNotIndex{\RequirePackage, \rule}
+% \DoNotIndex{\small, \sffamily}
+% \DoNotIndex{\textcolor, \tikzmarknode, \tikzset, \ttfamily}
+% \DoNotIndex{\usetikzlibrary}
+%
+% \title{^^A
+% \pkg{codeanatomy} -- Draw Code Anatomy^^A
+% \thanks{This file describes \fileversion, ^^A
+% last revised \filedate.}\\[1ex]^^A
+% \normalsize{Reference}^^A
+% }^^A
+%
+% \author{^^A
+% Hồng-Phúc Bùi^^A
+% \thanks{^^A
+% E-mail:
+% \href{mailto:Hồng-Phúc Bùi}
+% {hong-phuc.bui (at) htwsaar dot de}^^A
+% }^^A
+% }
+%
+% \date{Released \filedate}
+%
+% \parindent0pt
+%
+% \maketitle
+% \tableofcontents
+%
+% \section{Hints}
+% Usage of this Package can be found in \texttt{codeanatomy.usage.pdf} and \texttt{codeanatomy.lstlisting.pdf}.
+% This document show only generated reference of commands in this Package.
+%
+
+% ^^A %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Implementation}
+%
+% \changes{v0.2-Alpha}
+% {2019/07/10}
+% {This package does not load \pkg{xcolor} anymore.
+% It relies on \pkg{tikz}, that \pkg{tikz} loads \pkg{xcolor}
+% in a way that \pkg{codeanatomy} can define RGB color}
+%
+%
+% \subsection{Package Dependenies}
+%
+% \begin{macrocode}
+\RequirePackage{expl3}
+\RequirePackage{xparse}
+\RequirePackage{tikz}
+% \end{macrocode}
+%
+% Load necsessary \TikZ{} libraries.
+% \begin{macrocode}
+\usetikzlibrary{
+ tikzmark
+ ,fit
+ ,arrows.meta
+ ,bending
+ ,shapes
+ ,chains
+ ,backgrounds
+ ,scopes
+ ,decorations
+ ,decorations.pathmorphing
+}
+% \end{macrocode}
+%
+% \subsection{Setup styles}
+% ^^A+++++++++++++++++++++
+% \subsubsection{Colors}
+% ^^A-------------------
+% Define colors which are used in \pkg{codeanatomy}
+
+% \DescribeMacro{annotationcolor}
+% \tikz{\draw[fill=annotationcolor] circle(1ex); }
+% \begin{macrocode}
+\definecolor{annotationcolor}
+ {rgb}{0,0.50002,1} % Blue
+% \end{macrocode}
+%
+% \DescribeMacro{bgcmdcolor}
+% \tikz{\draw[fill=bgcmdcolor] circle(1ex); }
+% \begin{macrocode}
+\colorlet{bgcmdcolor}{gray} % Grey
+% \end{macrocode}
+%
+% \subsubsection{\TikZ{} styles for code in a Code Anatomy}
+% ^^A------------------------------------------------------
+%
+% \DescribeMacro{anatomy}
+% \TikZ{} style for annotation labels: \\
+% |\tikz{\node(code) [anatomy] at (0,0) {code line 1\\code line 2}; }|\\
+% yields \tikz{\node(code) [anatomy] at (0,0) {code line 1\\code line 2}; }
+% \begin{macrocode}
+\tikzset{anatomy/.style={%
+ anchor=south west,%
+ inner sep=0,%
+ align=left,%
+ font=\ttfamily
+ }
+}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{code part}
+% \TikZ{} style to marce a piece of code in an anatomy: \\
+% |\tikz{\node(code) [code part] at (0,0) {let a = 12;};}|\\
+% yields \tikz{\node(code) [code part] at (0,0) {let a = 12;};}
+% \begin{macrocode}
+\tikzset{code part/.style={%
+ rectangle,%
+ draw=annotationcolor,%
+ align=left,%
+ minimum height=1.175em,%
+ inner sep=1.75pt,%
+ outer sep=0.1pt,%
+ font=\ttfamily
+ }
+}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{fit extrem}
+% \TikZ{} style to mark a piece of multiple line code in an anatomy:\\
+% |\tikz{ \node(c)[fit extrem, fit={(0,0) (0.5,0.975) (1,0)}] {}; }|\\
+% yields \tikz{ \node(c)[fit extrem, fit={(0,0) (0.5,0.975) (1,0)}] {}; }
+% \begin{macrocode}
+\tikzset{fit extrem/.style={%
+ rectangle,%
+ draw=annotationcolor,%
+ align=left,%
+ minimum height=1.175em,%
+ inner sep=1.75pt,%
+ outer sep=0.1pt,%
+ font=\ttfamily
+ }
+}
+% \end{macrocode}
+%
+%
+%
+%
+% \DescribeMacro{annotation}
+% \TikZ{} style of arrows from annotation labels to code parts:\\
+% |\tikz{\draw[] (1,0) circle(3ex); \draw[->,annotation] (0,0) -- (1,0);}|\\
+% yields
+% \tikz{\draw[] (1,0) circle(3ex); \draw[->,annotation] (0,0) -- (1,0);}
+%
+% \changes{v0.4-Alpha}
+% {2019/07/12}
+% {Set \texttt{fill} to \texttt{annotationcolor} explicit for arrow style}
+%
+% \begin{macrocode}
+\tikzset{annotation/.style={%
+ preaction={
+ draw=white,%
+ line width=3.5pt,%
+ arrows={-Triangle Cap[]},%
+ },%
+ draw=annotationcolor,%
+ arrows={-Latex[%
+ round,%
+ color=annotationcolor,
+ fill=annotationcolor
+ ]
+ },
+ shorten >=0.25pt
+ }
+}
+% \end{macrocode}
+%
+%
+% \DescribeMacro{code annotation}
+% \TikZ{} style for a annotation label \tikz{\node(a)[code annotation] at (0,0) {function name};}
+% \begin{macrocode}
+\tikzset{code annotation/.style={%
+ inner sep=2pt,%
+ text=annotationcolor,%
+ align=center,%
+ font=\sffamily\small
+ }
+}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{code grid debug}
+% \TikZ{} style to draw debug grid on the background of anatomy
+% \begin{macrocode}
+\tikzset{code grid debug/.style={%
+ step=1.0,%
+ draw=gray!20,%
+ very thin,%
+ on background layer
+ }
+}
+% \end{macrocode}
+%
+%
+% ^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% \subsection{Command used to set code and code anatomy}
+% ^^A---------------------------------------------------
+%
+%
+% \DescribeMacro{\codeBlock} \marg{code}
+%
+% Complete code listing of a Code Anatomy figure is typeset by this command.
+% Whereas \marg{code} is the \emph{formatted} code listing.
+% This command can be used if there are no other packages to typeset code listing in use.
+% \begin{macrocode}
+\NewDocumentCommand{\codeBlock}{m}%
+ {\node(code) [anatomy] at (0,0) {#1};}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{\cPart} \marg{node name}\marg{piece of code}
+%
+% Assign a piece of typeset code --typical in one line-- to a \TikZ{} Node, so that it can
+% be annotated.
+% \begin{itemize}
+% \item \marg{node name} is a unique \TikZ{} node name in the |tikzpicture|
+% \item \marg{piece of code} is a single code part to be marked.
+% \end{itemize}
+% \begin{macrocode}
+\NewDocumentCommand{\cPart}{mm} %
+ {\tikzmarknode[code part]{#1}{#2}}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{\iPart} \marg{node name}\marg{piece of code}
+%
+% Assign a piece of typeset code --typical in one line-- to a \TikZ{} Node, so that it can
+% be annotated. It does not plot border around the pice of code as |\cPart| does.
+% \begin{itemize}
+% \item \marg{node name} is a unique \TikZ{} node name in the |tikzpicture|
+% \item \marg{piece of code} is a single code part to be marked.
+% \end{itemize}
+% \begin{macrocode}
+\NewDocumentCommand{\iPart}{mm} %
+ {\tikzmarknode[code part,draw=none,inner sep=0.75pt]{#1}{#2}}
+% \end{macrocode}
+%
+%
+%
+%
+% \DescribeMacro{\mtPoint}\marg{node name}
+%
+% Marks a point as a \textbf{m}ost \textbf{t}op in a Code Block.
+% \begin{macrocode}
+\NewDocumentCommand{\mtPoint}{m}
+ {\tikzmarknode{#1}{\phantom{\rule[1.8ex]{0.1ex}{0.1ex}}}}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{\hmtPoint}\marg{node name}
+%
+% Marks a point as a \textbf{h}eigher \textbf{m}ost \textbf{t}op point in a Code Block.
+% \begin{macrocode}
+\NewDocumentCommand{\hmtPoint}{m}
+ {\tikzmarknode{#1}{\phantom{\rule[2.5ex]{0.1ex}{0.1ex}}}}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{\mbPoint}\marg{node name}
+%
+% Marks a point as a \textbf{d}eeper \textbf{m}ost \textbf{b}ottom point in a Code Block.
+% \begin{macrocode}
+\NewDocumentCommand{\mbPoint}{m}
+ {\tikzmarknode{#1}{\phantom{\rule[-0.55ex]{0.1ex}{0.1ex}}}}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{\dmbPoint}\marg{node name}
+%
+% Marks a point as a \textbf{d}eeper \textbf{m}ost \textbf{b}ottom point in a Code Block.
+% \begin{macrocode}
+\NewDocumentCommand{\dmbPoint}{m}
+ {\tikzmarknode{#1}{\phantom{\rule[-2ex]{0.1ex}{0.1ex}}}}
+% \end{macrocode}
+%
+%
+% \DescribeMacro{\extremPoint}\marg{node name}\oarg{yshift}\oarg{xshift}\oarg{style}
+%
+% Create a \TikZ{} Node as reference point for later use in |\fitExtrem|.
+%
+% \begin{itemize}
+% \item \marg{node name} is the \TikZ{} node name which is used in |\fitExtrem| to reference to this point
+% \item \oarg{yshift} a length, default 0ex which places this markpoint on the base line,
+% shift this mark point vertical, for positive value over base line, negative value under
+% base line.
+% \item \oarg{xshift} same as \oarg{yshift} but for horizontal direction.
+% \item \oarg{style} is a \TikZ{} style (may be defined by user).
+% \end{itemize}
+%
+% For example:
+%
+% |\begin{tikzpicture}[remember picture]|\\
+% |\node(code) [anatomy] at (0,0) {|\\
+% | \extremPoint{tl}[2ex]Line with some text\extremPoint{br}[-1ex]\\|\\
+% | \extremPoint{tl2}other Line with some text\\|\\
+% | some more line\extremPoint{br2}\\|\\
+% |};|\\
+% |\fitExtrem{box1}{(tl) (br)}|\\
+% |\fitExtrem{box2}{(tl2) (br2)}|\\
+% |\end{tikzpicture}|\\
+%
+% yields\\
+%
+% \begin{tikzpicture}[remember picture]
+% \node(code) [anatomy] at (0,0) {
+% \extremPoint{tl}[2ex]Line with some text\extremPoint{br}[-1ex]\\
+% \extremPoint{tl2}other Line with some text\\
+% some more line\extremPoint{br2}\\
+% };
+% \fitExtrem{box1}{(tl) (br)}
+% \fitExtrem{box2}{(tl2) (br2)}
+% \end{tikzpicture}
+% \begin{macrocode}
+\NewDocumentCommand{\extremPoint}{m O{0ex} O{0.1ex} O{} }
+ {\tikzmarknode[#4]{#1}{\phantom{\rule[#2]{#3}{0.1ex}}}}
+% \end{macrocode}
+%
+%
+%
+%
+% \DescribeMacro{\fitExtrem} \marg{node name}\marg{extrem points}
+%
+% Create a rectangle box over given extrem points defined by |\*Point{}|.
+%
+% \begin{itemize}
+% \item \marg{node name} is a unique \TikZ{} node name in the current anatomy
+% \item \marg{extrem points} is a list of \TikZ{} node name created by |\*Point|,
+% each name is surrounded by |()|.
+% \end{itemize}
+%
+% Example:
+%
+% |\begin{tikzpicture}[remember picture]|\\
+% |\node(code) [anatomy] at (0,0) {|\\
+% |\mtPoint{left}Line 1\\|\\
+% |Long Line 2\extremPoint{right}\\|\\
+% |Line 3\mbPoint{bottom}|\\
+% |};|\\
+% |\fitExtrem{box} { (left) (bottom) (right) }|\\
+% |\end{tikzpicture}|\\
+%
+% yields\\
+%
+% \begin{tikzpicture}[remember picture]
+% \node(code) [anatomy] at (0,0) {
+% \mtPoint{left}Line 1\\
+% Long Line 2\extremPoint{right}\\
+% Line 3\mbPoint{bottom}
+% };
+% \fitExtrem{box} { (left) (bottom) (right) }
+% \end{tikzpicture}
+% \begin{macrocode}
+\NewDocumentCommand{\fitExtrem}{mm}
+ {\node(#1)[fit extrem,fit={#2}]{};}
+% \end{macrocode}
+%
+%
+% \DescribeMacro{\bgcode} \marg{piece of code}
+%
+% Typeset a piece of code in color |bgcmdcolor|.
+% For example
+%
+% |\tikz{\codeBlock{let a := 12\bgcode{;}}}|
+%
+% yields \tikz{\codeBlock{let a := 12\bgcode{;}}}
+% \begin{macrocode}
+\NewDocumentCommand{\bgcode}{m}{\textcolor{bgcmdcolor}{#1}}
+% \end{macrocode}
+%
+%
+% \DescribeMacro{\ptab}
+% \DescribeMacro{\phspace}
+% Produce a horizontal space of 4 small characters |h| respective 1 small character |h|\\
+% for example: |\tikz{\codeBlock{a\ptab{}b}}| yields \tikz{\codeBlock{a\ptab{}b}}
+% \begin{macrocode}
+\NewDocumentCommand{\ptab}{}{\phantom{hhhh}}
+\NewDocumentCommand{\phspace}{}{\phantom{h}}
+% \end{macrocode}
+%
+%
+%
+% \DescribeMacro{\codeAnnotation}\marg{node name}\parg{coordinate}\marg{label text}
+%
+% Typeset Annotation labels for a code part.
+% \begin{itemize}
+% \item \marg{node name} is a unique \TikZ{} node name in the |tikzpicture|,
+% \item \parg{coordinate} is the coordinate of the annotation label, surrounded by a |()|,
+% \item \marg{label text} text content to be typeset.
+% \end{itemize}
+%
+% For example:
+%
+% |\begin{tikzpicture}[remember picture]|\\
+% |\codeBlock{a \cPart{a}{:=} 12 + 13}|\\
+% |\codeAnnotation{codeLabel} (1,-0.5) {assignment}|\\
+% |\draw[->,annotation] (codeLabel) -- (a);|\\
+% |\end{tikzpicture}|\\
+%
+% yields\\ \medskip
+%
+% \begin{tikzpicture}[remember picture]
+% \codeBlock{a \cPart{a}{:=} 12 + 13}
+% \codeAnnotation{codeLabel} (1,-0.5) {assignment}
+% \draw[->,annotation] (codeLabel) -- (a);
+% \end{tikzpicture}
+% \begin{macrocode}
+\NewDocumentCommand{\codeAnnotation}{m r() m } %
+ { \node(#1)[code annotation] at (#2) {#3}; }
+% \end{macrocode}
+%
+%
+%
+%
+% ^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \section{Known Bugs}
+%
+% \paragraph*{\fixedBug{Arrows color}}
+% Arrows appear in some cases with mysterious color. I don't know why!
+% For example:
+%
+% |\begin{tikzpicture}[remember picture]|\\
+% |\node(code) [anatomy] at (0,0) {|\\
+% |\hmtPoint{a}Short line\\|\\
+% |code with some long text\extremPoint{b}[-0.5ex]|\\
+% |};|\\
+% |\fitExtrem{l}{(a) (b)}|\\
+% |\codeAnnotation{n} (-2,0){here is|\\
+% | a\extremPoint{point}[0.75ex][0.5ex]|\\
+% | long line}|\\
+% |\draw[->, annotation] (point) -- (l);|\\
+% |\end{tikzpicture}|
+%
+% yields
+%
+% \begin{tikzpicture}[remember picture]
+% \node(code) [anatomy] at (0,0) {
+% \hmtPoint{a}Short line\\
+% code with some long text\extremPoint{b}[-0.5ex]
+% };
+% \fitExtrem{l}{(a) (b)}
+% \codeAnnotation{n} (-2,0){here is\\
+% a\extremPoint{point}[0.75ex][0.5ex]\\
+% long line}
+% \draw[->, annotation] (point) -- (l);
+% \end{tikzpicture}
+%
+%
+% ^^A%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \PrintIndex
+% \PrintChanges
+%
+\endinput
+
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.ins b/graphics/pgf/contrib/codeanatomy/codeanatomy.ins
new file mode 100644
index 0000000000..6a04a9d154
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.ins
@@ -0,0 +1,62 @@
+\iffalse meta-comment
+
+File: codeanatomy.ins Copyright (C) 2019 by Me
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ https://www.latex-project.org/lppl.txt
+
+
+The released version of this bundle is available from CTAN.
+
+-----------------------------------------------------------------------
+
+The development version of the bundle can be found at
+
+ https://github.com/(TODO)
+
+for those people who are interested.
+
+-----------------------------------------------------------------------
+
+\fi
+
+\input l3docstrip.tex
+\askforoverwritefalse
+\usedir{tex/latex/codeanatomy}
+% stop DocStrip adding rather wordy text
+\preamble
+\endpreamble
+\postamble
+Copyright (C) 2008-2019 by
+ ME
+
+It may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), either version 1.3c of
+this license or (at your option) any later version. The latest
+version of this license is in the file:
+
+ https://www.latex-project.org/lppl.txt
+
+
+This work consists of the files codeanatomy.dtx,
+ codeanatomy.ins,
+ and the derived files codeanatomy.pdf,
+ codeanatomy.sty.
+
+\endpostamble
+
+\keepsilent
+
+\generate {%
+ \file{codeanatomy.sty} {%
+ \from{codeanatomy.dtx}{package}
+ }
+}
+
+\endbatchfile
+
+
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdf b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdf
new file mode 100644
index 0000000000..4279660c8c
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex
new file mode 100644
index 0000000000..b8956cea22
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.lstlisting.tex
@@ -0,0 +1,594 @@
+\documentclass[full]{l3doc}
+
+\usepackage{fontspec}
+\usepackage[backend=biber]{biblatex}
+\addbibresource{literatur.bib}
+
+\usepackage{codeanatomy}
+
+\usepackage{listings}
+\lstset {
+ basicstyle=\small\ttfamily%
+ ,language=%
+ ,escapeinside={!}{!}%
+ ,resetmargins=true%
+ ,columns=flexible%
+ ,literate={-}{-}1%
+ ,keepspaces=true
+}
+
+\def\thinmargin{\list{}{\rightmargin-30pt\leftmargin-70pt}\item[]}
+\let\endthinmargin=\endlist
+
+\usepackage{filecontents}
+
+% others shortcuts
+\newcommand{\slsh}{\textbackslash{}}
+\newcommand{\TikZ}{Ti\textit{k}Z}
+\newcommand{\inputlisting}[1]{%
+\lstinputlisting[%
+ basicstyle=\footnotesize\ttfamily%
+ ,xleftmargin=-70pt%
+ ,resetmargins=true%
+ ,firstline=5%
+ ,language=%
+ ,columns=flexible%
+ ,escapeinside={}{}%
+ ]{#1}%
+}
+
+\usepackage{hyperref}
+
+\GetFileInfo{codeanatomy.sty}
+\DoNotIndex{}
+
+\title{
+ \pkg{codeanatomy} -- Draw Code Anatomy%
+ \thanks{This file describes \fileversion,
+ last revised \filedate.}\\\vspace*{2ex}
+ \normalsize{Usage with \pkg{listings}}
+}
+
+\author{
+ Hồng-Phúc Bùi
+ \thanks{
+ E-mail:
+ \href{mailto:Hồng-Phúc Bùi}
+ {hong-phuc.bui (at) htwsaar dot de}
+ }
+}
+
+\date{Released \filedate}
+
+\AtEndDocument{
+ \printbibliography
+}
+
+\begin{document}
+
+\maketitle
+\tableofcontents
+
+\section{General Usage in Conjuntion with Package \pkg{listings}}
+\subsection{Setup Package \pkg{listings}}
+The most important setup for the package \pkg{listings} is the delimiter to escape \LaTeX{}
+commands in Listing. With this escape delimiter we can mark a piece of code as with |\cPart|.
+In this example we use |!| and |!| as delimiter. Code between |!| and |!| is evaluated as
+\LaTeX{}-code.
+
+\lstset {
+ escapeinside={+}{+}
+}
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+% {[on background layer]\draw[code grid debug] (-3.5,-0.5) grid (5.5,4.5);}
+\node(code) [anatomy] at (0,0){%
+\begin{lstlisting}
+\usepackage{codeanatomy}
+\usepackage{listings}
+\lstset {
+ basicstyle=\small\ttfamily
+ ,escapeinside=+\cPart{delimiter}{\{!\}\{!\}}+
+}
+\end{lstlisting}
+};
+\codeAnnotation{delimiterText} (4,-0.5) {Setup \texttt{!} and \texttt{!}\\as delimiter}
+
+\draw[->, annotation] (delimiterText) -- (delimiter);
+\end{tikzpicture}
+\end{thinmargin}
+
+
+Delimiter can also be reset in |document|-Environment, typical just before a new \verb:\begin{lstlisting}:
+environment so each anatomy can have different delimiter. The fact is, in this document I use |+| and |+| for
+the above listing, so that I can typeset |!| in this listing.
+
+\subsection{Typeset Code}
+The command |\codeBlock| does not work if the environment |lstlisting| is passed to its argument. So instead of
+|\codeBlock| we must use the \TikZ{} command |\node|:
+
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+\node(code) [anatomy] at (0,0) {
+\begin{lstlisting}
+\begin{tikzpicture}[remember picture]
++\cPart{tikzNode}{\slsh{}node(code) [anatomy] at (0,0)}+ {
++\cPart{listingBegin}{\texttt{\slsh{}begin\{lstlisting\}}}\vspace{1.5pt}+
++\mtPoint{mostLeft}+function gcd(p,q) {
+ if (q === 0) {
+ return q;
+ }else{
+ let r = p % q;
+ return gcd(q, r);+\extremPoint{mostRight}+
+ }
+}+\mbPoint{mostBottom}+
++\cPart{listingEnd}{\texttt{\slsh{}end\{lstlisting\}}}+
+}+\cPart{semiColon}{;}+
+\end{tikzpicture}
+\end{lstlisting}
+};
+
+\fitExtrem{listingContent}{(mostLeft) (mostRight) (mostBottom)}
+
+% Annotations
+\codeAnnotation{tikzNodeText} (-2, 5.5) {use \texttt{\slsh{}node}\\instead of\\\texttt{\slsh{}codeBlock}}
+\codeAnnotation{listingText} (-2, 3) {typeset code\\in\\\texttt{lstlisting}\\environment}
+\codeAnnotation{listingContentText} (6.5, 3) {whitespaces\\in code\\are kept}
+\codeAnnotation{semiColonText} (6.5, 0.6) {don't forget\\semicolon}
+
+% Arrows from labels to code parts
+\draw[->,annotation] (tikzNodeText) -- (tikzNode.west);
+\draw[->,annotation] (listingText) -- (listingBegin.west);
+\draw[->,annotation] (listingText) -- (listingEnd.west);
+\draw[->,annotation] (listingContentText) -- (listingContent);
+\draw[->,annotation] (semiColonText) -- (semiColon);
+\end{tikzpicture}
+\end{thinmargin}
+
+Figure~\ref{fig:full-formatted-code} shows result of the above code.
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}[remember picture]
+\node(code) [anatomy] at (0,0) {
+\begin{lstlisting}
+function gcd(p,q) {
+ if (q === 0) {
+ return q;
+ }else{
+ let r = p % q;
+ return gcd(q, r)
+ }
+}
+\end{lstlisting}
+};
+\end{tikzpicture}
+\caption{Code Listing is formatted\label{fig:full-formatted-code}}
+\end{figure}
+
+\subsection{Mark Code}
+% --------------------
+
+The command |\cPart| can be used to mark single-line code parts. For
+multiple-line code parts once can use |\extremPoint| to mark the outer most
+points of code parts and |\fitExtrem| to cover exterm points of a code part.
+These commmands must be put in delimiter, here |!| and |!|.
+
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+\node(code) [anatomy] at (0,0) {
+\begin{lstlisting}
+\begin{tikzpicture}[remember picture]
+\node(code) [anatomy] at (0,0) {
++\texttt{\slsh{}begin\{lstlisting\}}+
+!\cPart{fnHead}{function \cPart{fnName}{gcd}\cPart{paramList}{(p,q)}}! {
+ +\cPart{ep1}{!\slsh{}mtPoint\{mostLeft\}!}+if (q === 0) {
+ return q;
+ }else{
+ +\cPart{cp}{!\slsh{}cPart\{localVar\}\{let r\}!}+ = p % q;
+ return gcd(q, r);+\cPart{ep2}{!\slsh{}extremPoint\{mostRight\}!}+
+ }+\cPart{ep3}{!\slsh{}mbPoint\{mostBottom\}!}+
+}
++\texttt{\slsh{}end\{lstlisting\}}+
+};
+\fitExtrem{fnBody}{(mostLeft) (mostRight) (mostBottom)}
+\end{tikzpicture}
+\end{lstlisting}
+};
+% Annotations
+\codeAnnotation{epText} (11,2.5) {\texttt{extremPoint}-s mark\\outer most\\of the function body}
+\codeAnnotation{cpText} (-2,3) {\texttt{cPart} marks a\\single line\\code part}
+% Arrows
+\draw[->,annotation] (epText) -- (ep1.south east);
+\draw[->,annotation] (epText) -- (ep2.east);
+\draw[->,annotation] (epText) -- (ep3.south east);
+\draw[->,annotation] (cpText) -- (cp);
+\end{tikzpicture}
+\end{thinmargin}
+
+Figure~\ref{fig:listing-code-parts} shows the result of the above code.
+
+\begin{figure}[ht]
+\centering
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[remember picture]
+\node(code) [anatomy] at (0,0) {
+\begin{lstlisting}
+!\cPart{fnHead}{function \cPart{fnName}{gcd}\cPart{paramList}{(p,q)}}! {
+ !\mtPoint{mostLeft}!if (q === 0) {
+ return q;
+ }else{
+ !\cPart{localVar}{let r}! = p % q;
+ return gcd(q, r);!\extremPoint{mostRight}!
+ }!\mbPoint{mostBottom}!
+}
+\end{lstlisting}
+};
+\fitExtrem{fnBody}{(mostLeft) (mostRight) (mostBottom)}
+\end{tikzpicture}
+\caption{Code Listing with mark of code parts\label{fig:listing-code-parts}}
+\end{figure}
+
+\subsection{Add Annotations to Listing}
+% -------------------------------------
+This step is the same as the description in the main document of package \pkg{codeanatomy}.
+Readers can typeset annotations to the above listing like an exercise.
+
+
+
+
+
+
+\section{Some examples}
+% ====================
+% Reset to standard
+
+Most of examples in this section are redrawn from the textbook~\autocite{sedgewick-wayne-2016}.
+
+\subsection{Anatomy of a Java Program~\autocite[5]{sedgewick-wayne-2016}}
+% -----------------------------------
+
+\begin{filecontents}{java-program.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[remember picture]
+\node(code) [anatomy] at (0,0){%
+\begin{lstlisting}
+public !\iPart{class}{class}! !\cPart{className}{HelloWorld}!
+{
+ !\mtPoint{mainLeft}!public static void main(String[] argv)
+ {
+ !\hmtPoint{left}\iPart{assign}{
+ \bgcode{// Prints "Hello World" in the terminal window}}
+ \extremPoint{fnR} \extremPoint{mR}!
+ !\iPart{fnCall}{System.out.print( "Hello World");}\dmbPoint{mostBottom}!
+ }!\mbPoint{mainBottom}!
+}
+\end{lstlisting}
+};
+
+\fitExtrem{classBody}{(mainLeft) (mR) (mainBottom)}
+\fitExtrem{functionBody}{(left) (fnR) (mostBottom)}
+
+
+\codeAnnotation{fileNameText} (1.5,5) {text file named \texttt{HelloWorld.java}}
+\codeAnnotation{classNameText} (3.5,4.25) {name}
+\codeAnnotation{classBodyText} (6.5,3.6) {\texttt{main()} method}
+\codeAnnotation{functionBodyText} (2.5,-0.5) {body}
+\codeAnnotation{statement} (8,0) {statements}
+
+\draw[->,annotation] (fileNameText) -- (class);
+\draw[->,annotation] (classNameText) -- (className);
+\draw[->,annotation] (classBodyText.south west) -- (classBody);
+\draw[->,annotation] (functionBodyText) -- (functionBody);
+\draw[->,annotation] (statement) -- (assign.353);
+\draw[->,annotation] (statement) -- (fnCall.350);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+\inputlisting{java-program.tex}
+\end{thinmargin}
+
+\input{java-program.tex}
+
+\subsection{Anatomy of an expression~\autocite[17]{sedgewick-wayne-2016}}
+% -----------------------------------
+
+\begin{filecontents}{java-expression.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[remember picture]
+\codeBlock{\cPart{op1}{4} \cPart{op}{*} \cPart{op2}{( x - 3 )} }
+
+\codeAnnotation{operand} (1,1.5) {operands\\(and expression)}
+\codeAnnotation{operator} (0.7,-1) {operator}
+
+\draw[->,annotation] (operand) -- (op1.north);
+\draw[->,annotation] (operand) -- (op2.north);
+\draw[->,annotation] (operator) -- (op.south);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{java-expression.tex}
+\end{thinmargin}
+
+\input{java-expression.tex}
+
+\subsection{Using a primitive Data Type~\autocite[17]{sedgewick-wayne-2016}}
+% -------------------------------------
+
+\begin{filecontents}{using-a-primitive-data-type.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[
+ remember picture %
+ ,code annotation/.append style = { % customize style of annotation text
+ font=\sffamily\footnotesize
+ }
+]
+{[on background layer]\draw[code grid debug] (-2.5,-0.5) grid (2.5,2.5);}
+\node(code) [anatomy] at (0,0){%
+\begin{lstlisting}
+!\cPart{d}{int a, b;}!
+!\iPart{v}{a}! = !\cPart{l}{1234}!;
+!\iPart{a}{b = 99}!;
+!\cPart{i}{int c = a + b}!;
+\end{lstlisting}
+};
+% Annotations
+\codeAnnotation{declareText} ( 1,2.75 ) {declaration statement}
+\codeAnnotation{literalText} ( 2.5,1.45) {literal}
+\codeAnnotation{varText} (-1.5,1.75 ) {variable name}
+\codeAnnotation{assignText} (-1.5,0.75 ) {assignment\\statement}
+\codeAnnotation{initText} (-1.5,-0.75) {inline initialization\\statement}
+% Arrows
+\draw[->,annotation] (declareText) -- (d);
+\draw[->,annotation] (literalText) -- (l);
+\draw[->,annotation] (varText.south east) -- (v);
+\draw[->,annotation] (assignText) -- (a);
+\draw[->,annotation] (initText) -- (i.south west);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{using-a-primitive-data-type.tex}
+\end{thinmargin}
+
+\input{using-a-primitive-data-type.tex}
+
+\subsection{Anatomy of a method signature~\autocite[30]{sedgewick-wayne-2016}}
+% ---------------------------------------
+
+\begin{filecontents}{anatomy-of-a-method-signature.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[remember picture]
+\node(code) [anatomy] at (0,0) {
+\begin{lstlisting}
+public class !\iPart{l}{Math}!
+ ....
+ !\cPart{s}{\bgcode{static} \iPart{r}{double} \iPart{n}{sqrt}(\iPart{a}{double} a)}!
+ ....
+\end{lstlisting}
+};
+% Annotation
+\codeAnnotation{lText} (3,2.5) {library name}
+\codeAnnotation{sText} (-1,1) {signature}
+\codeAnnotation{nText} (4.5,1.5) {method name}
+\codeAnnotation{rText} (2.0,-0.51) {return type}
+\codeAnnotation{aText} (4.5,-0.51) {argument type}
+% Arrows
+\draw[->, annotation] (lText) -- (l);
+\draw[->, annotation] (nText) -- (n);
+\draw[->, annotation] (sText) -- (s);
+\draw[->, annotation] (rText) -- (r);
+\draw[->, annotation] (aText) -- (a);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{anatomy-of-a-method-signature.tex}
+\end{thinmargin}
+
+\input{anatomy-of-a-method-signature.tex}
+
+\subsection{Using a library method~\autocite[30]{sedgewick-wayne-2016}}
+% --------------------------------
+
+\begin{filecontents}{using-a-library-method.tex}
+\begin{tikzpicture}[remember picture]
+\codeBlock{%
+\iPart{r}{double} d = \iPart{l}{Math}.\iPart{m}{sqrt}(\iPart{a}{b*b - 4.0*a*c)};
+}
+% Annotation
+\codeAnnotation{lText} (2, 1.125) {library name}
+\codeAnnotation{mText} (4.5, 1.125) {method name}
+\codeAnnotation{rText} (2,-0.7) {return type}
+\codeAnnotation{aText} (4,-0.7) {argument}
+% Arrows
+\draw[->,annotation] (lText) -- (l);
+\draw[->,annotation] (mText) -- (m);
+\draw[->,annotation] (rText.north west) -- (r);
+\draw[->,annotation] (aText.north east) -- (a);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{using-a-library-method.tex}
+\end{thinmargin}
+
+\input{using-a-library-method.tex}
+
+\subsection{Anatomy of an \texttt{if} statement~\autocite[51]{sedgewick-wayne-2016}}
+% ---------------------------------------------
+
+\begin{filecontents}{anatomy-of-an-if-statement.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[remember picture]
+% {[on background layer]\draw[code grid debug] (-2.5,-0.5) grid (2.5,2.5);}
+\node(code) [anatomy] at (0,0) {%
+\begin{lstlisting}
+if (!\cPart{e}{x > y}!)
+{
+ int t = x;!\mtPoint{tr}!
+ x = y;
+ !\mbPoint{bl}! y = t;!\extremPoint{br}!
+}
+\end{lstlisting}
+};
+
+\fitExtrem{b}{(tr) (bl) (br)}
+% Annotation
+\codeAnnotation{eText} (1,3.5) {boolean\\expression}
+\codeAnnotation{bText} (-1,1.125) {sequence\\of \extremPoint{bPoint}[0.75ex]\\statements}
+% Arrow
+\draw[->,annotation] (eText) -- (e);
+\draw[->,annotation] (bPoint) -- (b);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{anatomy-of-an-if-statement.tex}
+\end{thinmargin}
+
+\input{anatomy-of-an-if-statement.tex}
+
+\subsection{Anatomy of a \texttt{while} loop~\autocite[54]{sedgewick-wayne-2016}}
+% ------------------------------------------
+
+\begin{filecontents}{anatomy-of-a-while-loop.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[remember picture]
+% {[on background layer]\draw[code grid debug] (-2.5,-0.5) grid (2.5,2.5);}
+\node(code) [anatomy] at (0,0) {
+\begin{lstlisting}
+!\cPart{i}{\bgcode{int power = 1;}}\phantom{\rule[-2ex]{0.1ex}{0.1ex}}!
+while ( !\cPart{c}{power <= n/2}! )
+!\cPart{po}{\{}!
+ !\cPart{b}{power = 2*power;}!
+!\cPart{pc}{\}}!
+\end{lstlisting}
+};
+
+% Annotation
+\codeAnnotation{iText} (-1,3.25) {initialization is a\\separate statement}
+\codeAnnotation{cText} (3.5,3) {loop-\\continuation\\condition}
+\codeAnnotation{pText} (-1.5,0.5) {braces are\\optional\\when body\\is a single\\statement}
+\codeAnnotation{bText} (2.125,-0.5) {body}
+% Arrows
+\draw[->,annotation] (iText) -- (i.north west);
+\draw[->,annotation] (cText) -- (c);
+\draw[->,annotation] (bText) -- (b);
+\draw[->,annotation] (pText) -- (po);
+\draw[->,annotation] (pText) -- (pc);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{anatomy-of-a-while-loop.tex}
+\end{thinmargin}
+
+{\sffamily test font if while do}
+
+\input{anatomy-of-a-while-loop.tex}
+
+\subsection{Anatomy of a \texttt{for} loop~\autocite[59]{sedgewick-wayne-2016}}
+% ----------------------------------------
+
+\begin{filecontents}{anatomy-of-a-for-loop.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[
+ remember picture
+ ,code annotation/.append style={%
+ font=\sffamily\itshape\scriptsize
+ }
+]
+ % {[on background layer]\draw[code grid debug] (-2.5,-0.5) grid (5.5,3.5);}
+\node(code) [anatomy] at (0,0){%
+\begin{lstlisting}
+!\iPart{init}{\bgcode{int power = 1;}}!
+for ( !\cPart{i}{int i = 0}!; !\cPart{c}{i <= n}!; !\cPart{u}{i++}! )
+{
+ !\mtPoint{left}!System.out.println(i + " " + power);!\mtPoint{right}!
+ power *= 2;!\mbPoint{bottom}!
+}
+\end{lstlisting}
+};
+\fitExtrem{b}{(left) (right) (bottom)}
+% Annotations
+\codeAnnotation{initText} (-1.5,2.7) {initialize another\\
+ variable in a \extremPoint{initPoint}[0.75ex]\\
+ separate\\statement}
+\codeAnnotation{iText} (1,3.5) {declare and initialize\\
+ a loop control variable}
+\codeAnnotation{cText} (3.5,3) {loop-\\continuation\\condition}
+\codeAnnotation{uText} (6,3) {increment}
+\codeAnnotation{bText} (3.5,-0.25) {body}
+% arrows on the background
+{[on background layer]
+\draw[->,annotation] (initPoint) -- (init.north west);
+\draw[->,annotation] (iText) -- (i);
+\draw[->,annotation] (cText) -- (c);
+\draw[->,annotation] (uText) -- (u);
+\draw[->,annotation] (bText) -- (b);
+}
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{anatomy-of-a-for-loop.tex}
+\end{thinmargin}
+
+\input{anatomy-of-a-for-loop.tex}
+
+\subsection{Anatomy of a static method~\autocite[196]{sedgewick-wayne-2016}}
+% ----------------------------------------
+\begin{filecontents}{anatomy-of-a-static-method.tex}
+\lstset{escapeinside={!}{!}}
+\begin{tikzpicture}[remember picture]
+ %{[on background layer]\draw[code grid debug] (-2.5,-0.5) grid (8.5,3.5);}
+\node(code) [anatomy] at (0,0) {%
+\begin{lstlisting}
+!\cPart{s}{public static \cPart{rt}{double} \cPart{fn}{harmonic}(\cPart{al}{\iPart{at}{int} \iPart{pv}{n}})}!
+{
+ !\hmtPoint{left}\cPart{lv}{double sum}! = 0.0;
+ for (int i = 0; i <= n; ++i)!\extremPoint{right}!
+ {
+ sum += 1.0/i;
+ }
+ !\cPart{rs}{return sum;}\dmbPoint{bottom}!
+}
+\end{lstlisting}
+};
+
+\fitExtrem{b}{(left) (right) (bottom)}
+
+% Annotation
+\codeAnnotation{sText} (-0.7,5) {signature}
+\codeAnnotation{rtText} (2,5) {return\\type}
+\codeAnnotation{fnText} ( 4,5) {method\\name}
+\codeAnnotation{alText} ( 6,5) {argument\\list}
+\codeAnnotation{atText} (6.5,1.75) {argument\\type}
+\codeAnnotation{pvText} (7.5,2.70) {parameter\\variable}
+\codeAnnotation{lvText} (-0.7,2.5) {local\\variable}
+\codeAnnotation{bText} (-0.7,1.5) {method\\body}
+\codeAnnotation{rsText} (3,-0.4) {return statement}
+% Arrows
+\draw[->,annotation] (sText) -- (s.north west);
+\draw[->,annotation] (rtText) -- (rt);
+\draw[->,annotation] (fnText) -- (fn);
+\draw[->,annotation] (alText) -- (al);
+\draw[->,annotation] (atText) -- (at);
+\draw[->,annotation] (pvText) -- (pv);
+\draw[->,annotation] (lvText) -- (lv.west);
+\draw[->,annotation] (bText) -- (b);
+\draw[->,annotation] (rsText) -- (rs);
+\end{tikzpicture}
+\end{filecontents}
+
+\begin{thinmargin}
+ \inputlisting{anatomy-of-a-static-method.tex}
+\end{thinmargin}
+
+\input{anatomy-of-a-static-method.tex}
+
+\end{document}
+
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.pdf b/graphics/pgf/contrib/codeanatomy/codeanatomy.pdf
new file mode 100644
index 0000000000..3348439ed5
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdf b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdf
new file mode 100644
index 0000000000..5057ad4a54
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex
new file mode 100644
index 0000000000..5136905bab
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/codeanatomy.usage.tex
@@ -0,0 +1,383 @@
+\documentclass[full]{l3doc}
+\usepackage{fontspec}
+\usepackage{biblatex}
+\addbibresource{literatur.bib}
+\newcommand{\slsh}{\textbackslash{}}
+\newcommand{\TikZ}{Ti\textit{k}Z}
+\def\thinmargin{\list{}{\rightmargin-50pt\leftmargin-90pt}\item[]}
+\let\endthinmargin=\endlist
+
+\usepackage{listings}
+\lstset {
+ basicstyle=\small\ttfamily
+ ,escapeinside={+}{+}
+}
+
+\usepackage{codeanatomy}
+
+\begin{document}
+
+\GetFileInfo{codeanatomy.sty}
+\DoNotIndex{}
+
+\title{
+ \pkg{codeanatomy} -- Draw Code Anatomy%
+ \thanks{This file describes \fileversion,
+ last revised \filedate.}\\[1ex]
+ \normalsize{Usage}
+}
+
+\author{
+ Hồng-Phúc Bùi
+ \thanks{
+ E-mail:
+ \href{mailto:Hồng-Phúc Bùi}
+ {hong-phuc.bui (at) htwsaar dot de}
+ }
+}
+
+\date{Released \filedate}
+
+\AtEndDocument{
+ \printbibliography
+}
+
+\maketitle
+\tableofcontents
+
+\begin{documentation}
+\section{Introduction}
+The idea of this Package is to typeset illustrations of pieces of code with
+annotations on each single parts of code (Code Anatomy). The origin of this idear is
+code illustrations in the texbook~\autocite{sedgewick-wayne-2016}. This package
+just provides tool to draw those figures.
+
+\section{Tutorial}
+In this tutorial we will draw an anatomy of a function like the
+figure~\ref{fig:tut1-function} step by step.
+
+\begin{figure}
+\begin{centering}
+\begin{tikzpicture}[remember picture]
+\codeBlock{
+\cPart{functionHead}{function \cPart{functionName}{gcd} \cPart{parameterList}{(p, q)}}\{ \\[2.5pt] %
+\ptab{}\mtPoint{mostLeft}if (q === 0) \{\\
+\ptab\ptab{}return p; \\
+\ptab{}\} else \{\\
+\ptab\ptab{}return gcd(q, p \% q);\extremPoint{mostRight}\\
+\ptab{}\}\mbPoint{mostBottom}\\
+\}
+};
+
+\node(functionBody)[draw,code part,fit=(mostLeft) (mostRight) (mostBottom)] {};
+
+% Anotation labels
+\codeAnnotation{functionHeadText}(-1,3) {Function\\Head}
+\codeAnnotation{functionBodyText}(-1,1.5){Function\\Body}
+\codeAnnotation{functionNameText}(1,4) {Function Name}
+\codeAnnotation{parameterListText} (4,4) {Paramter List}
+
+% Annotation labels to Code
+\draw[->, annotation] (functionBodyText) -- (functionBody);
+\draw[->, annotation] (functionHeadText) -- (functionHead);
+\draw[->, annotation] (functionNameText) -- (functionName);
+\draw[->, annotation] (parameterListText) -- (parameterList);
+\end{tikzpicture}
+
+\caption{Anatomy of a function\label{fig:tut1-function}}
+\end{centering}
+\end{figure}
+
+\subsection{Package Usage}
+To use this package, just insert |\usepackage{codeanatomy}| in your \LaTeX{} file.
+
+\subsection{Create an anatomy environment}
+Next step is to create a |tikzpicture| environment. All commands in this package must be placed in
+a |tikzpicture| environment with option |remember picture|.
+
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+\codeBlock{
+\textbackslash{}begin\{tikzpicture\}[\cPart{option}{remember picture}]\\
+\cPart{debugGrid}{\{[on background layer]\textbackslash{}draw[code grid debug] (-0.5,-0.5) grid (6.5,4.5);\}}\\
+\% ... \\
+\textbackslash{}end\{tikzpicture\}
+}
+
+% Annotation labels
+\codeAnnotation{optionText} (5,2.5) {necsessary for\\later mark}
+\codeAnnotation{debugGridText} (7,0) {plot a thin grey grid on background\\usefull to determinate coordinate of annotation}
+
+% Annotation labels to code
+\draw[->, annotation] (optionText) -- (option);
+\draw[->, annotation] (debugGridText) -- (debugGrid);
+\end{tikzpicture}
+\end{thinmargin}
+
+
+\subsection{Typeset Code Listing in a TikZ-Node}
+As next step we need to put the piece of code in the |tikzpicture| environment using
+the command |\codeBlock|. \medskip
+
+
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+\codeBlock{
+\textbackslash{}begin\{tikzpicture\}[remember picture]\\
+\{[on background layer]\textbackslash{}draw[code grid debug]\\
+ \ptab\ptab (-0.5,-0.5) grid (6.5,4.5);\}\\
+\textbackslash{}codeBlock\{\% \\
+\mtPoint{mostLeft}function gcd(p, q) \{ \\
+\ptab{}if (q === 0) \{ \\
+\ptab\ptab{}return p; \\
+\ptab{}\} else \{ \\
+\ptab\ptab{}return gcd(q, p\%q);\extremPoint{mostRight}\\
+\ptab\} \\
+\mbPoint{mostBottom}\}\\
+\} \\
+\textbackslash{}end\{tikzpicture\}
+}
+
+\node(codeBlockBody)[draw,code part,fit=(mostLeft) (mostRight) (mostBottom)] {};
+
+\codeAnnotation{codeBlockBodyText} (7,2.5) {Anatomy of Code}
+\draw[->, annotation] (codeBlockBodyText) -- (codeBlockBody);
+\end{tikzpicture}
+\end{thinmargin}
+
+The result of the above code is shown in the figure~\ref{fig:function-compressed},
+which is not what we really want. All extra whitespaces and newlines in the
+listing are removed, further more |{| and |}| are interpreted as \LaTeX{} tokens and are not
+displayed.
+
+\begin{figure}[h]
+\begin{centering}
+\begin{tikzpicture}[remember picture]
+{[on background layer]\draw[code grid debug] (-0.5,-0.5) grid (6.5,4.5);}
+\codeBlock{
+function gcd(p, q) {
+ if (q === 0) {
+ return p;
+ } else {
+ return gcd(q, p\%q);
+ }
+}
+}
+\end{tikzpicture}
+\caption{Unformated Code\label{fig:function-compressed}}
+\end{centering}
+\end{figure}
+
+
+We need to put |\ptab| and |\\| into code to keep whitespaces and newlines. The characters |{| and |}|
+also need to be escaped by prefixing a |\| before them.
+
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+\codeBlock{
+\textbackslash{}begin\{tikzpicture\}[remember picture]\\
+\{[on background layer]\textbackslash{}draw[code grid debug]\\
+ \ptab\ptab (-0.5,-0.5) grid (6.5,4.5);\}\\
+\textbackslash{}codeBlock\{\%\\
+function gcd(p, q) \slsh\{ \cPart{sh1}{\slsh\slsh}\\
+\cPart{ptab1}{\slsh{}ptab\{\}}if (q === 0) \slsh\{ \cPart{sh2}{\slsh\slsh}\\
+\cPart{ptab2}{\slsh{}ptab\slsh{}ptab\{\}}return p; \cPart{sh3}{\slsh\slsh}\\
+\cPart{ptab3}{\slsh{}ptab}\slsh\} else \slsh\{ \cPart{sh4}{\slsh\slsh}\\
+\cPart{ptab4}{\slsh{}ptab\slsh{}ptab\{\}}return gcd(q, p\slsh\%q); \cPart{sh5}{\slsh\slsh}\\
+\cPart{ptab5}{\slsh{}ptab}\slsh\} \cPart{sh6}{\slsh\slsh}\\
+\slsh\} \cPart{sh7}{\slsh\slsh}\\
+\} \\
+\textbackslash{}end\{tikzpicture\}
+}
+
+% Annotation labels
+\codeAnnotation{shText} (9,2.5) {Double backslash}
+\codeAnnotation{ptabText} (-2,2.5) {\texttt{\slsh{}ptab} proceduces\\whitespaces}
+% Annotation labels to code
+\draw[->, annotation] (shText.20) to[out=90,in=0] (sh1.east);
+\draw[->, annotation] (shText.80) to[out=95,in=0] (sh2.east);
+\draw[->, annotation] (shText) -- (sh3);
+\draw[->, annotation] (shText) -- (sh4);
+\draw[->, annotation] (shText) -- (sh5);
+\draw[->, annotation] (shText.270) to[out=260,in=0] (sh6);
+\draw[->, annotation] (shText.340) to[out=260,in=0] (sh7);
+
+\draw[->, annotation] (ptabText) -- (ptab1.west);
+\draw[->, annotation] (ptabText) -- (ptab2.west);
+\draw[->, annotation] (ptabText) -- (ptab3.west);
+\draw[->, annotation] (ptabText) -- (ptab4.west);
+\draw[->, annotation] (ptabText) -- (ptab5.west);
+\end{tikzpicture}
+\end{thinmargin}
+
+The result (figure~\ref{fig:function-formated}) is much more like what we expect
+than the version before (figure~\ref{fig:function-compressed}).
+
+\begin{figure}[h]
+\begin{centering}
+\begin{tikzpicture}[remember picture]
+{[on background layer]\draw[code grid debug] (-0.5,-0.5) grid (6.5,4.5);}
+\codeBlock{
+function gcd(p, q) \{ \\
+\ptab{}if (q === 0) \{ \\
+\ptab\ptab{}return p; \\
+\ptab\} else \{ \\
+\ptab\ptab{}return gcd(q, p\%q); \\
+\ptab\} \\
+\} \\
+}
+\end{tikzpicture}
+\caption{Formated Function\label{fig:function-formated}}
+\end{centering}
+\end{figure}
+
+\subsection{Mark Parts of Code}
+Now we can mark interesting parts of code with a blue boxes created by |\cPart|. At some positions
+we can use |\\[<length>]| to add a little amount of vertical space, sothat the boxes do not touch
+each others.
+
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+{[on background layer]\draw[code grid debug] (-0.5,-0.5) grid (10.5,4.5);}\\
+\codeBlock{
+\textbackslash{}begin\{tikzpicture\}[remember picture]\\
+\{[on background layer]\textbackslash{}draw[code grid debug]\\
+ \ptab\ptab (-0.5,-0.5) grid (6.5,4.5);\}\\
+\textbackslash{}codeBlock\{\%\\
+\cPart{nestedCodePart}{\slsh{}cPart\{functionHead\}\{function\slsh{}cPart\{functionName\}\{gcd\} \slsh{}cPart\{paramList\}\{(p, q)\}\}} \slsh\{\\
+ \slsh\slsh[2.5pt]\\
+\slsh{}ptab\{\}\cPart{ep1}{\slsh{}mtPoint\{mostLeft\}}if (q === 0) \slsh\{ \slsh\slsh\\
+\slsh{}ptab \slsh{}ptab\{\}return p; \slsh\slsh\\
+\slsh{}ptab \slsh\} else \slsh\{ \slsh\slsh\\
+\slsh{}ptab \slsh{}ptab\{\}return gcd(q, p\slsh\%q); \cPart{ep2}{\slsh{}extremPoint\{mostRight\}} \slsh\slsh\\
+\slsh{}ptab\cPart{ep3}{\slsh{}mbPoint\{mostBottom\}}\slsh\} \slsh\slsh\\
+\slsh\} \slsh\slsh\\
+\} \\
+ \\
+\cPart{fitExtemCmd}{\slsh{}fitExtrem\{functionBody\}\{(mostLeft) (mostRight) (mostBottom)\}}\\
+\slsh{}end\{tikzpicture\}
+}
+
+\codeAnnotation{nestedCodePartText}(11,6){\texttt{cPart} can be nested}
+\codeAnnotation{exText} (15,3){\texttt{extremPoint}s\\are used to mark\\outer most points of\\a multiline code part}
+\codeAnnotation{fitExtemCmdText} (6,-1){\texttt{fitExtrem} draws a rectangle\\which covers all passed extrem points}
+
+\draw[->, annotation] (nestedCodePartText) to[out=270,in=90] (nestedCodePart);
+\draw[->, annotation] (exText) to[out=145,in=320] (ep1.south east);
+\draw[->, annotation] (exText) to[out=190,in=300] (ep2.320);
+\draw[->, annotation] (exText) to[out=220,in=350] (ep3.340);
+\draw[->, annotation] (fitExtemCmdText) -- (fitExtemCmd);
+\end{tikzpicture}
+\end{thinmargin}
+
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}[remember picture]
+{[on background layer]\draw[code grid debug]
+ (-0.5,-0.5) grid (6.5,4.5);}
+\codeBlock{%
+\cPart{functionHead}{function\cPart{functionName}{gcd} \cPart{paramList}{(p, q)}} \{
+\\[2.5pt]
+\ptab{}\mtPoint{mostLeft} if (q === 0) \{ \\
+\ptab\ptab{}return p; \\
+\ptab\} else \{ \\
+\ptab\ptab{}return gcd(q, p\%q); \extremPoint{mostRight} \\
+\ptab\mbPoint{mostBottom}\} \\
+\} \\
+}
+\fitExtrem{functionBody}{(mostLeft) (mostRight) (mostBottom)}
+\end{tikzpicture}
+\caption{Function with marked parts\label{fig:function-parts}}
+\end{figure}
+
+\subsection{Create Annotation Labels}
+We can use |\codeAnnotation| to create annotation labels for each parts of code. To draw an
+arrow from label to a code part we can use the \TikZ{}command\\
+|\draw[->,annotation]| \parg{annotation label} |--| \parg{code part} |;|.\\
+Whereas \parg{annotation label}s are the first argument of |\codeAnnotation|s and
+\parg{code part}s are the first argument of |\cPart|s.
+
+\begin{thinmargin}
+\begin{tikzpicture}[remember picture]
+\codeBlock{
+\textbackslash{}begin\{tikzpicture\}[remember picture]\\
+\{[on background layer]\textbackslash{}draw[code grid debug]\\
+ \ptab\ptab (-0.5,-0.5) grid (6.5,4.5);\}\\
+\textbackslash{}codeBlock\{\%\\
+\slsh{}cPart\{functionHead\} \{function \slsh{}cPart\{functionName\}\{gcd\} \slsh{}cPart\{paramList\}\{(p, q)\}\} \slsh\{\\
+ \slsh\slsh[2.5pt]\\
+\slsh{}ptab\{\}\slsh{}mtPoint\{mostLeft\} if (q === 0) \slsh\{ \slsh\slsh\\
+\slsh{}ptab\slsh{}ptab\{\} return p; \slsh\slsh\\
+\slsh{}ptab\slsh \} else \slsh\{ \slsh\slsh\\
+\slsh{}ptab\slsh{}ptab\{\} return gcd(q, p\slsh\%q); \slsh{}extremPoint\{mostRight\} \slsh\slsh\\
+\slsh{}ptab\slsh{}mbPoint\{mostBottom\}\slsh\} \slsh\slsh\\
+\slsh\} \\
+\} \\
+ \\
+\slsh{}fitExtrem\{functionBody\}\{(mostLeft) (mostRight) (mostBottom)\}\\
+\\
+\% Annotations \\
+\slsh{}codeAnnotation\{functionHeadText\}(-1,3)\{Function\slsh\slsh{}head\} \\
+\slsh{}codeAnnotation\{functionBodyText\}(-1,1)\{Function\slsh\slsh{}body\} \\
+\slsh{}codeAnnotation\{functionNameText\}( 1,4)\{Function\slsh\slsh{}name\} \\
+\slsh{}codeAnnotation\{paramListText\} ( 3,4)\{Parameter\slsh\slsh{}list\} \\
+\\
+\% Annotation labels to code parts\\
+\slsh{}draw[->,annotation] (functionHeadText) -- (functionHead);\\
+\slsh{}draw[->,annotation] (functionBodyText) -- (functionBody);\\
+\slsh{}draw[->,annotation] (functionNameText) -- (functionName);\\
+\slsh{}draw[->,annotation] (paramListText) -- (paramList);\\
+\slsh{}end\{tikzpicture\}
+}
+
+\end{tikzpicture}
+\end{thinmargin}
+
+Instead of operator |--| we can use operator |to| \oarg{\TikZ{} options} to draw a path from
+\parg{annotation label} to \parg{code part}. Finally we can remove the command
+|\draw[code grid debug]...| at the begin of the |tikzpicture|.
+The final result is shown in the figure~\ref{fig:function-final}, which is almost the same
+as figure~\ref{fig:tut1-function}.
+
+\begin{figure}[ht]
+\centering
+\begin{tikzpicture}[remember picture]
+\codeBlock{%
+\cPart{functionHead} {function \cPart{functionName}{gcd} \cPart{paramList}{(p, q)}} \{
+\\[2.5pt]
+\ptab{}\mtPoint{mostLeft}if (q === 0) \{ \\
+\ptab\ptab{} return p; \\
+\ptab\} else \{ \\
+\ptab\ptab{} return gcd(q, p\%q);\extremPoint{mostRight} \\
+\ptab\mbPoint{mostBottom}\} \\
+\}
+}
+\fitExtrem{functionBody}{(mostLeft) (mostRight) (mostBottom)}
+% Annotations
+\codeAnnotation{functionHeadText}(-1,3){Function\\head}
+\codeAnnotation{functionBodyText}(-1,1){Function\\body}
+\codeAnnotation{functionNameText}( 1,4){Function\\name}
+\codeAnnotation{paramListText} ( 3,4){Parameter\\list}
+% Annotation labels to code parts
+\draw[->,annotation] (functionHeadText) -- (functionHead);
+\draw[->,annotation] (functionBodyText) -- (functionBody);
+\draw[->,annotation] (functionNameText) -- (functionName);
+\draw[->,annotation] (paramListText) -- (paramList);
+\end{tikzpicture}
+
+\caption{Function with Annotation Labels\label{fig:function-final}}
+\end{figure}
+
+\section{Usage in conjuntion with \pkg{listings}}
+
+As we see in the previous section, the command |\codeBlock| cannot typeset whitespaces correctly as we
+expect. A way to typeset code listing is using the package \pkg{listings}. See \texttt{codeanatomy.lstlisting.pdf}
+
+
+\section{Customize style}
+TODO
+
+\end{documentation}
+\end{document}
+
diff --git a/graphics/pgf/contrib/codeanatomy/literatur.bib b/graphics/pgf/contrib/codeanatomy/literatur.bib
new file mode 100644
index 0000000000..27824d42ac
--- /dev/null
+++ b/graphics/pgf/contrib/codeanatomy/literatur.bib
@@ -0,0 +1,8 @@
+@BOOK{sedgewick-wayne-2016,
+ place={Boston},
+ title={Computer Science},
+ subtitle={An Interdisciplinary Approach},
+ publisher={Addison-Wesley},
+ author={Sedgewick, Robert and Wayne, Kevin},
+ year={2016}
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/dynkin-diagrams/README b/graphics/pgf/contrib/dynkin-diagrams/README
new file mode 100644
index 0000000000..cdd04fdf1f
--- /dev/null
+++ b/graphics/pgf/contrib/dynkin-diagrams/README
@@ -0,0 +1,21 @@
+___________________________________
+
+ Dynkin diagrams
+
+ v3.141592
+
+ 24 January 2019
+___________________________________
+
+Authors : Ben McKay
+Maintainer: Ben McKay
+E-mail : b.mckay@ucc.ie
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+Draws Dynkin di­a­grams in LaTeX doc­u­ments, us­ing the TikZ pack­age.
+Version 3.141592 fixes a rarely encountered problem with changing the default root marker and default affine root marker simultaneously, and smooths the ceref style indefinite edges.
+
+
diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib
new file mode 100644
index 0000000000..949fd7f918
--- /dev/null
+++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.bib
@@ -0,0 +1,465 @@
+% Encoding: ISO-8859-1
+
+
+@Book{Adams:1996,
+ Title = {Lectures on exceptional {L}ie groups},
+ Author = {Adams, J. F.},
+ Publisher = {University of Chicago Press, Chicago, IL},
+ Year = {1996},
+ Note = {With a foreword by J. Peter May,
+ Edited by Zafer Mahmud and Mamoru Mimura},
+ Series = {Chicago Lectures in Mathematics},
+
+ ISBN = {0-226-00526-7; 0-226-00527-5},
+ Mrclass = {22-01 (22E10)},
+ Mrnumber = {1428422},
+ Mrreviewer = {William M. McGovern},
+ Owner = {user},
+ Pages = {xiv+122},
+ Timestamp = {2018.07.22}
+}
+
+@Article{Baba:2009,
+ Title = {Satake diagrams and restricted root systems of semisimple pseudo-{R}iemannian symmetric spaces},
+ Author = {Baba, Kurando},
+ Journal = {Tokyo J. Math.},
+ Year = {2009},
+ Number = {1},
+ Pages = {127--158},
+ Volume = {32},
+
+ Fjournal = {Tokyo Journal of Mathematics},
+ ISSN = {0387-3870},
+ Mrclass = {17B20 (17B22 53C35)},
+ Mrnumber = {2541161},
+ Mrreviewer = {Oksana S. Yakimova},
+ Owner = {user},
+ Timestamp = {2017.12.04},
+ Url = {https://doi.org/10.3836/tjm/1249648414}
+}
+
+@Book{Bourbaki:2002,
+ Title = {Lie groups and {L}ie algebras. {C}hapters 4--6},
+ Author = {Bourbaki, Nicolas},
+ Publisher = {Springer-Verlag, Berlin},
+ Year = {2002},
+ Note = {Translated from the 1968 French original by Andrew Pressley},
+ Series = {Elements of Mathematics (Berlin)},
+
+ ISBN = {3-540-42650-7},
+ Mrclass = {17-01 (00A05 20E42 20F55 22-01)},
+ Mrnumber = {1890629},
+ Owner = {user},
+ Pages = {xii+300},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-3-540-89394-3}
+}
+
+@Book{Carter:2005,
+ Title = {Lie algebras of finite and affine type},
+ Author = {Carter, R. W.},
+ Publisher = {Cambridge University Press, Cambridge},
+ Year = {2005},
+ Series = {Cambridge Studies in Advanced Mathematics},
+ Volume = {96},
+
+ ISBN = {978-0-521-85138-1; 0-521-85138-6},
+ Mrclass = {17-02 (17B67)},
+ Mrnumber = {2188930},
+ Mrreviewer = {Stephen Slebarski},
+ Owner = {user},
+ Pages = {xviii+632},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1017/CBO9780511614910}
+}
+
+@InCollection{Carter:1995,
+ Title = {On the representation theory of the finite groups of {L}ie
+ type over an algebraically closed field of characteristic 0 [
+ {MR}1170353 (93j:20034)]},
+ Author = {Carter, R. W.},
+ Booktitle = {Algebra, {IX}},
+ Publisher = {Springer, Berlin},
+ Year = {1995},
+ Pages = {1--120, 235--239},
+ Series = {Encyclopaedia Math. Sci.},
+ Volume = {77},
+
+ Doi = {10.1007/978-3-662-03235-0_1},
+ Mrclass = {20C33 (20-02 20G05)},
+ Mrnumber = {1392478},
+ Owner = {user},
+ Timestamp = {2018.05.19},
+ Url = {https://doi.org/10.1007/978-3-662-03235-0_1}
+}
+
+@Article{Chuah:2013,
+ Title = {Cartan automorphisms and {V}ogan superdiagrams},
+ Author = {Chuah, Meng-Kiat},
+ Journal = {Math. Z.},
+ Year = {2013},
+ Number = {3-4},
+ Pages = {793--800},
+ Volume = {273},
+
+ Fjournal = {Mathematische Zeitschrift},
+ ISSN = {0025-5874},
+ Mrclass = {17B20 (17B40)},
+ Mrnumber = {3030677},
+ Mrreviewer = {Zi-Xin Hou},
+ Owner = {user},
+ Timestamp = {2017.12.04},
+ Url = {https://doi.org/10.1007/s00209-012-1030-z}
+}
+
+@InCollection{Draper/Guido:2016,
+ Title = {On the real forms of the exceptional {L}ie algebra {$\mathfrak
+ e_6$} and their {S}atake diagrams},
+ Author = {Draper Fontanals, Cristina and Guido, Valerio},
+ Booktitle = {Non-associative and non-commutative algebra and operator
+ theory},
+ Publisher = {Springer, Cham},
+ Year = {2016},
+ Pages = {211--226},
+ Series = {Springer Proc. Math. Stat.},
+ Volume = {160},
+
+ Mrclass = {17B20 (17A75 17B25 17B60)},
+ Mrnumber = {3613831},
+ Mrreviewer = {Alberto Elduque},
+ Owner = {user},
+ Timestamp = {2018.04.30}
+}
+
+@Book{Dynkin:2000,
+ Title = {Selected papers of {E}. {B}. {D}ynkin with commentary},
+ Author = {Dynkin, E. B.},
+ Publisher = {American Mathematical Society, Providence, RI; International Press, Cambridge, MA},
+ Year = {2000},
+ Note = {Edited by A. A. Yushkevich, G. M. Seitz and A. L. Onishchik},
+
+ ISBN = {0-8218-1065-0},
+ Mrclass = {01A75 (60Jxx)},
+ Mrnumber = {1757976},
+ Mrreviewer = {William M. McGovern},
+ Owner = {user},
+ Pages = {xxviii+796},
+ Timestamp = {2017.11.15}
+}
+
+@Article{Dynkin:1952,
+ Title = {Semisimple subalgebras of semisimple {L}ie algebras},
+ Author = {Dynkin, E. B.},
+ Journal = {Mat. Sbornik N.S.},
+ Year = {1952},
+ Note = {Reprinted in English translation in \cite{Dynkin:2000}.},
+ Pages = {349--462 (3 plates)},
+ Volume = {30(72)},
+
+ Mrclass = {09.1X},
+ Mrnumber = {0047629},
+ Mrreviewer = {I. Kaplansky},
+ Owner = {user},
+ Timestamp = {2017.11.15}
+}
+
+@Article{Frappat/Sciarrino/Sorba:1989,
+ Title = {Structure of basic {L}ie superalgebras and of their affine extensions},
+ Author = {Frappat, L. and Sciarrino, A. and Sorba, P.},
+ Journal = {Comm. Math. Phys.},
+ Year = {1989},
+ Number = {3},
+ Pages = {457--500},
+ Volume = {121},
+
+ Fjournal = {Communications in Mathematical Physics},
+ ISSN = {0010-3616},
+ Mrclass = {17B70 (17A70 17B40)},
+ Mrnumber = {990776},
+ Mrreviewer = {A. Pianzola},
+ Owner = {user},
+ Timestamp = {2017.12.18},
+ Url = {http://0-projecteuclid.org.library.ucc.ie/euclid.cmp/1104178142}
+}
+
+@Book{Grove/Benson:1985,
+ Title = {Finite reflection groups},
+ Author = {Grove, L. C. and Benson, C. T.},
+ Publisher = {Springer-Verlag, New York},
+ Year = {1985},
+ Edition = {Second},
+ Series = {Graduate Texts in Mathematics},
+ Volume = {99},
+
+ ISBN = {0-387-96082-1},
+ Mrclass = {20-01 (20B25 20H15)},
+ Mrnumber = {777684},
+ Owner = {user},
+ Pages = {x+133},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-1-4757-1869-0}
+}
+
+@Book{Helgason:2001,
+ Title = {Differential geometry, {L}ie groups, and symmetric spaces},
+ Author = {Helgason, Sigurdur},
+ Publisher = {American Mathematical Society, Providence, RI},
+ Year = {2001},
+ Note = {Corrected reprint of the 1978 original},
+ Series = {Graduate Studies in Mathematics},
+ Volume = {34},
+
+ ISBN = {0-8218-2848-7},
+ Mrclass = {53C35 (22E10 22E46 22E60)},
+ Mrnumber = {1834454},
+ Owner = {user},
+ Pages = {xxvi+641},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1090/gsm/034}
+}
+
+@Book{Humphreys:1990,
+ Title = {Reflection groups and {C}oxeter groups},
+ Author = {Humphreys, James E.},
+ Publisher = {Cambridge University Press, Cambridge},
+ Year = {1990},
+ Series = {Cambridge Studies in Advanced Mathematics},
+ Volume = {29},
+
+ ISBN = {0-521-37510-X},
+ Mrclass = {20-02 (20F32 20F55 20G15 20H15)},
+ Mrnumber = {1066460},
+ Mrreviewer = {Louis Solomon},
+ Owner = {user},
+ Pages = {xii+204},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1017/CBO9780511623646}
+}
+
+@Book{Kac:1990,
+ Title = {Infinite-dimensional {L}ie algebras},
+ Author = {Kac, Victor G.},
+ Publisher = {Cambridge University Press, Cambridge},
+ Year = {1990},
+ Edition = {Third},
+
+ ISBN = {0-521-37215-1; 0-521-46693-8},
+ Mrclass = {17B65 (17B67 17B68 58F07)},
+ Mrnumber = {1104219},
+ Owner = {user},
+ Pages = {xxii+400},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1017/CBO9780511626234}
+}
+
+@Article{Khastgir/Sasaki:1996,
+ Title = {Non-canonical folding of {D}ynkin diagrams and reduction of affine {T}oda theories},
+ Author = {Khastgir, S. Pratik and Sasaki, Ryu},
+ Journal = {Progr. Theoret. Phys.},
+ Year = {1996},
+ Number = {3},
+ Pages = {503--518},
+ Volume = {95},
+
+ Fjournal = {Progress of Theoretical Physics},
+ ISSN = {0033-068X},
+ Mrclass = {81T10 (17B81 58F07 81R10)},
+ Mrnumber = {1388245},
+ Mrreviewer = {Mehmet Koca},
+ Owner = {user},
+ Timestamp = {2017.12.18},
+ Url = {https://doi.org/10.1143/PTP.95.503}
+}
+
+@book {Langlands:1967,
+ AUTHOR = {Langlands, Robert P.},
+ TITLE = {Euler products},
+ NOTE = {A James K. Whittemore Lecture in Mathematics given at Yale
+ University, 1967,
+ Yale Mathematical Monographs, 1},
+ PUBLISHER = {Yale University Press, New Haven, Conn.-London},
+ YEAR = {1971},
+ PAGES = {v+53},
+ MRCLASS = {10D20 (22E55)},
+ MRNUMBER = {0419366},
+MRREVIEWER = {Stephen Gelbart},
+}
+
+@Book{OnishchikVinberg:1990,
+ Title = {Lie groups and algebraic groups},
+ Author = {Onishchik, A. L. and Vinberg, {\`E}. B.},
+ Publisher = {Springer-Verlag},
+ Year = {1990},
+
+ Address = {Berlin},
+ Note = {Translated from the Russian and with a preface by D. A. Leites},
+ Series = {Springer Series in Soviet Mathematics},
+
+ ISBN = {3-540-50614-4},
+ Mrclass = {22-01 (17B20 20G20 22E10 22E15)},
+ Mrnumber = {91g:22001},
+ Mrreviewer = {James E. Humphreys},
+ Owner = {user},
+ Pages = {xx+328},
+ Timestamp = {2017.11.15}
+}
+
+@Book{Onishchik/Vinberg:1990,
+ Title = {Lie groups and algebraic groups},
+ Author = {Onishchik, A. L. and Vinberg, \`E. B.},
+ Publisher = {Springer-Verlag, Berlin},
+ Year = {1990},
+ Note = {Translated from the Russian and with a preface by D. A. Leites},
+ Series = {Springer Series in Soviet Mathematics},
+
+ ISBN = {3-540-50614-4},
+ Mrclass = {22-01 (17B20 20G20 22E10 22E15)},
+ Mrnumber = {1064110},
+ Mrreviewer = {James E. Humphreys},
+ Owner = {user},
+ Pages = {xx+328},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-3-642-74334-4}
+}
+
+@Article{Ransingh:2013,
+ Title = {Vogan diagrams of untwisted affine {K}ac-{M}oody superalgebras},
+ Author = {Ransingh, Biswajit},
+ Journal = {Asian-Eur. J. Math.},
+ Year = {2013},
+ Number = {4},
+ Pages = {1350062, 10},
+ Volume = {6},
+
+ Fjournal = {Asian-European Journal of Mathematics},
+ ISSN = {1793-5571},
+ Mrclass = {17B67 (17B05 17B22 17B40)},
+ Mrnumber = {3149279},
+ Mrreviewer = {Xiangqian Guo},
+ Owner = {user},
+ Timestamp = {2018.01.11}
+}
+
+@Article{Ransingh:unpub,
+ Title = {{Vogan diagrams of affine twisted Lie superalgebras}},
+ Author = {Ransingh, B.},
+ Journal = {ArXiv e-prints},
+ Year = {2013},
+
+ Month = mar,
+ Pages = {1--9},
+
+ Adsnote = {Provided by the SAO/NASA Astrophysics Data System},
+ Adsurl = {http://adsabs.harvard.edu/abs/2013arXiv1303.0092R},
+ Archiveprefix = {arXiv},
+ Eprint = {1303.0092},
+ Keywords = {Mathematical Physics, Mathematics - Representation Theory},
+ Owner = {user},
+ Primaryclass = {math-ph},
+ Timestamp = {2018.01.11}
+}
+
+@Article{Regelskis/Vlaar:2016,
+ Title = {{Reflection matrices, coideal subalgebras and generalized Satake diagrams of affine type}},
+ Author = {{Regelskis}, V. and {Vlaar}, B.},
+ Journal = {ArXiv e-prints},
+ Year = {2016},
+
+ Month = feb,
+ Pages = {1--118},
+
+ Adsnote = {Provided by the SAO/NASA Astrophysics Data System},
+ Adsurl = {http://adsabs.harvard.edu/abs/2016arXiv160208471R},
+ Archiveprefix = {arXiv},
+ Eprint = {1602.08471},
+ Keywords = {Mathematical Physics, Mathematics - Quantum Algebra, Mathematics - Representation Theory, Nonlinear Sciences - Exactly Solvable and Integrable Systems},
+ Owner = {user},
+ Primaryclass = {math-ph},
+ Timestamp = {2017.12.04}
+}
+
+@Book{Satake:1980,
+ Title = {Algebraic structures of symmetric domains},
+ Author = {Satake, Ichir\^o},
+ Publisher = {Iwanami Shoten, Tokyo; Princeton University Press, Princeton, N.J.},
+ Year = {1980},
+ Series = {Kan\^o Memorial Lectures},
+ Volume = {4},
+
+ Mrclass = {32-02 (17C35 32Mxx 53C35)},
+ Mrnumber = {591460},
+ Mrreviewer = {S. Murakami},
+ Owner = {user},
+ Pages = {xvi+321},
+ Timestamp = {2017.11.15}
+}
+
+@Book{Springer:2009,
+ Title = {Linear algebraic groups},
+ Author = {Springer, T. A.},
+ Publisher = {Birkh\"auser Boston, Inc., Boston, MA},
+ Year = {2009},
+ Edition = {second},
+ Series = {Modern Birkh\"auser Classics},
+
+ ISBN = {978-0-8176-4839-8},
+ Mrclass = {20G15 (14L10)},
+ Mrnumber = {2458469},
+ Owner = {user},
+ Pages = {xvi+334},
+ Timestamp = {2018.03.31}
+}
+
+@InCollection{Zuber:1998,
+ Title = {Generalized {D}ynkin diagrams and root systems and their folding},
+ Author = {Zuber, Jean-Bernard},
+ Booktitle = {Topological field theory, primitive forms and related topics ({K}yoto, 1996)},
+ Publisher = {Birkh\"auser Boston, Boston, MA},
+ Year = {1998},
+ Pages = {453--493},
+ Series = {Progr. Math.},
+ Volume = {160},
+
+ Mrclass = {17B20 (05C25 20F55)},
+ Mrnumber = {1653035},
+ Mrreviewer = {Saeid Azam},
+ Owner = {user},
+ Timestamp = {2017.12.18}
+}
+
+@Book{Vinberg:1994,
+ Title = {Lie groups and {L}ie algebras, {III}},
+ Editor = {Vinberg, \`E. B.},
+ Publisher = {Springer-Verlag, Berlin},
+ Year = {1994},
+ Note = {Structure of Lie groups and Lie algebras, A translation of {{\i}t Current problems in mathematics. Fundamental directions. Vol. 41} (Russian), Akad. Nauk SSSR, Vsesoyuz. Inst. Nauchn. i Tekhn. Inform., Moscow, 1990 [ MR1056485 (91b:22001)], Translation by V. Minachin [V. V. Minakhin], Translation edited by A. L. Onishchik and \`E. B. Vinberg},
+ Series = {Encyclopaedia of Mathematical Sciences},
+ Volume = {41},
+
+ ISBN = {3-540-54683-9},
+ Mrclass = {22-06 (17-06 22Exx)},
+ Mrnumber = {1349140},
+ Owner = {user},
+ Pages = {iv+248},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-3-662-03066-0}
+}
+
+@Book{Fulton.Harris:1991,
+ title = {Representation theory},
+ publisher = {Springer-Verlag, New York},
+ year = {1991},
+ author = {Fulton, William and Harris, Joe},
+ volume = {129},
+ series = {Graduate Texts in Mathematics},
+ isbn = {0-387-97527-6; 0-387-97495-4},
+ note = {A first course, Readings in Mathematics},
+ doi = {10.1007/978-1-4612-0979-9},
+ mrclass = {20G05 (17B10 20G20 22E46)},
+ mrnumber = {1153249},
+ mrreviewer = {James E. Humphreys},
+ pages = {xvi+551},
+ url = {https://doi.org/10.1007/978-1-4612-0979-9},
+}
+
+@Comment{jabref-meta: databaseType:bibtex;}
diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdf b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdf
new file mode 100644
index 0000000000..d28d05f96c
--- /dev/null
+++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty
new file mode 100644
index 0000000000..32e6c17833
--- /dev/null
+++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.sty
@@ -0,0 +1,4282 @@
+%
+%
+% The Dynkin Diagrams package.
+%
+% Version 3.141592
+%
+%
+% This package draws Dynkin diagrams in LaTeX documents, using the TikZ package.
+% Please see the file dynkin-diagrams.tex for examples of use of this package.
+%
+% Benjamin McKay
+% b.mckay@ucc.ie
+%
+% Released under the LaTeX Project Public License v1.3c or later, see
+% http://www.latex-project.org/lppl.txt
+%
+%
+%
+%
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{dynkin-diagrams}[2019/01/24 Dynkin diagrams]
+\RequirePackage{tikz}
+\RequirePackage{xstring}
+\RequirePackage{xparse}
+\RequirePackage{etoolbox}
+\RequirePackage{expl3}
+\RequirePackage{pgfkeys}
+\RequirePackage{pgfopts}
+\RequirePackage{amsmath}
+\RequirePackage{amssymb}
+\usetikzlibrary{
+ arrows,
+ arrows.meta,
+ backgrounds,
+ calc,
+ decorations.markings,
+ decorations.pathreplacing,
+ decorations.pathmorphing,
+ fit,
+ patterns,
+ shadows}
+
+%%%
+%%% Application programming interface:
+%%% See dynkin-diagrams.tex file for examples of use.
+%%%
+
+\NewDocumentCommand\dynkin{O{}mO{0}m}%
+{%
+ \ifdefined\filldraw%
+ \@dynkin[#1]{#2}[#3]{#4}%
+ \else%
+ \tikz[baseline=(origin.base)]{\@dynkin[#1]{#2}[#3]{#4}}%
+ \fi%
+}%
+
+\NewDocumentEnvironment{dynkinDiagram}{O{}mO{0}m}%
+{%
+\begin{tikzpicture}[baseline=(origin.base)]%
+\dynkin[#1]{#2}[#3]{#4}%
+}%
+{%
+\end{tikzpicture}%
+}%
+
+\NewDocumentCommand\dynkinRefreshRoots{}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \dynkin@draw@all@roots{}%
+ \ifdynkin@label@the@roots\dynkinPrintLabels{}\fi%
+}%
+
+
+\xdef\dynkin@label@direction{}
+
+\NewDocumentCommand\dynkin@translate@direction{m}%
+{%
+ \xdef\Dir{#1}
+ \ifdynkin@is@backwards
+ \IfStrEqCase{\Dir}{%
+ {0}{\xdef\Dir{4}}%
+ {1}{\xdef\Dir{3}}%
+ {2}{\xdef\Dir{2}}%
+ {3}{\xdef\Dir{1}}%
+ {4}{\xdef\Dir{0}}%
+ {5}{\xdef\Dir{7}}%
+ {6}{\xdef\Dir{6}}%
+ {7}{\xdef\Dir{5}}%
+ }%
+ [\ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized root label direction:
+ ``\temp'' in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}%
+ {}]
+ \fi
+ \ifdynkin@is@upsidedown
+ \IfStrEqCase{\Dir}{%
+ {1}{\xdef\Dir{7}}%
+ {2}{\xdef\Dir{6}}%
+ {3}{\xdef\Dir{5}}%
+ {5}{\xdef\Dir{3}}%
+ {6}{\xdef\Dir{2}}%
+ {7}{\xdef\Dir{1}}%
+ }%
+ \fi
+ \IfStrEqCase{\Dir}{%
+ {0}{\xdef\dynkin@label@direction{right}}%
+ {1}{\xdef\dynkin@label@direction{above right}}%
+ {2}{\xdef\dynkin@label@direction{above}}%
+ {3}{\xdef\dynkin@label@direction{above left}}%
+ {4}{\xdef\dynkin@label@direction{left}}%
+ {5}{\xdef\dynkin@label@direction{below left}}%
+ {6}{\xdef\dynkin@label@direction{below}}%
+ {7}{\xdef\dynkin@label@direction{below right}}%
+ }%
+}%
+
+\newcount\rpo%
+
+%% \dynkinLabelRoot{<r>}{<s>} or \dynkinLabelRoot*{<r>}{<s>}
+%% Prints the label string <s> on the Dynkin diagram at root number <r>, in the current ordering convention.
+%% Starred form uses the alternate label location.
+\NewDocumentCommand\dynkinLabelRoot{smm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \ifnum\dynkin@nodes<#2%
+ \ClassError{Dynkin diagrams}{Unrecognized root: ``#2'' found when labelling Dynkin diagram \dynkin@user@series{\dynkin@user@string}. Allowed values are up to \the\dynkin@nodes}{}%
+ \fi%
+ \IfStrEq{#3}{}%
+ {%
+ }%
+ {%
+ \rpo=#2%
+ \advance\rpo by 1%
+ \IfBooleanTF{#1}%
+ {%
+ \StrMid{\dynkin@label@directions@star}{\the\rpo}{\the\rpo}[\dynkin@direction@letter]%
+ }%
+ {%
+ \StrMid{\dynkin@label@directions}{\the\rpo}{\the\rpo}[\dynkin@direction@letter]%
+ }%
+ \dynkin@translate@direction{\dynkin@direction@letter}%
+ \IfBooleanTF{#1}%
+ {%
+ \node[inner sep=\dynkin@root@radius,%
+ label={%
+ [/Dynkin diagram/text style]%
+ \dynkin@label@direction:%
+ \(\pgfkeys{/Dynkin diagram/label macro*=#3}\)%
+ }%
+ ]%
+ at (\dynkin@root@name #2){};%
+ }%
+ {%
+ \node[inner sep=\dynkin@root@radius,%
+ label={%
+ [/Dynkin diagram/text style]%
+ \dynkin@label@direction:%
+ \(\pgfkeys{/Dynkin diagram/label macro=#3}\)%
+ }%
+ ]%
+ at (\dynkin@root@name #2){};%
+ }%
+ }%
+}%
+
+
+\newcounter{dynkinRootNo}
+\NewDocumentCommand\@dynkinLabelThisRoot{m}%
+{%
+\stepcounter{dynkinRootNo}%
+\dynkinLabelRoot{\arabic{dynkinRootNo}}{#1}%
+}%
+\NewDocumentCommand\@dynkinLabelThisRootStar{m}%
+{%
+\stepcounter{dynkinRootNo}%
+\dynkinLabelRoot*{\arabic{dynkinRootNo}}{#1}%
+}%
+
+
+\NewDocumentCommand\dynkinLabelRoots{sm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \setcounter{dynkinRootNo}{0}%
+ \ifdynkin@is@extended%
+ \setcounter{dynkinRootNo}{-1}%
+ \else%
+ \ifdynkin@is@twisted%
+ \setcounter{dynkinRootNo}{-1}%
+ \else%
+ \setcounter{dynkinRootNo}{0}%
+ \fi%
+ \fi%
+ \edef\XXX{#2}%
+ \foreach \i in \XXX%
+ {%
+ \IfBooleanTF{#1}%
+ {%
+ \@dynkinLabelThisRootStar{\i}%
+ }%
+ {%
+ \@dynkinLabelThisRoot{\i}%
+ }%
+ }%
+}%
+
+\NewDocumentCommand\dynkinBrace{somm}%[text]{start}{end}
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+\draw[
+decoration=
+ {
+ brace,
+ \IfBooleanF{#1}{mirror},
+ raise=0.05cm,
+ },
+ decorate]
+ ($(root #3)-({\dynkin@root@radius},\IfBooleanTF{#1}{{-\dynkin@root@radius}}{{\dynkin@root@radius}})$)
+ --
+ ($(root #4)+({\dynkin@root@radius},\IfBooleanTF{#1}{{\dynkin@root@radius}}{{-\dynkin@root@radius}})$)
+ node
+ [
+ pos=0.5,
+ anchor=\IfBooleanTF{#1}{south}{north},
+ yshift=\IfBooleanTF{#1}{1mm}{-1mm},
+ /Dynkin diagram/text style
+]
+{\IfValueT{#2}{\(#2\)}};%
+}
+
+
+%% \dynkinPrintLabels
+%% Prints the labels on the Dynkin diagram,in the given ordering. Uses the default labels if ``label'' is set without a list of ``labels'' being set.
+\newcommand{\dynkinPrintLabels}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfStrEq{\dynkin@label@list\dynkin@label@list@star}{}{%
+ \foreach \i in {1,...,\the\dynkin@nodes}{\dynkinLabelRoot{\i}{\i}}%
+ \ifdynkin@is@extended%
+ \dynkinLabelRoot{0}{0}%
+ \else%
+ \ifdynkin@is@twisted%
+ \dynkinLabelRoot{0}{0}%
+ \fi%
+ \fi%
+ }%
+ {%
+ \ifdynkin@is@extended%
+ \setcounter{dynkinRootNo}{-1}%
+ \else%
+ \ifdynkin@is@twisted%
+ \setcounter{dynkinRootNo}{-1}%
+ \else%
+ \setcounter{dynkinRootNo}{0}%
+ \fi%
+ \fi%
+ \edef\XXX{\dynkin@label@list}%
+ \foreach \i in \XXX%
+ {%
+ \@dynkinLabelThisRoot{\i}%
+ }%
+ \ifdynkin@is@extended%
+ \setcounter{dynkinRootNo}{-1}%
+ \else%
+ \ifdynkin@is@twisted%
+ \setcounter{dynkinRootNo}{-1}%
+ \else%
+ \setcounter{dynkinRootNo}{0}%
+ \fi%
+ \fi%
+ \edef\XXX{\dynkin@label@list@star}%
+ \foreach \i in \XXX%
+ {%
+ \@dynkinLabelThisRootStar{\i}%
+ }%
+ }%
+}%
+
+%% \dynkinCrossRootMark{<n>}
+%% Prints a cross at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinCrossRootMark{sO{}m}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#3}%
+ }%
+ {%
+ \RootNumber=#3%
+ }%
+ \draw[/Dynkin diagram,x,#2]%
+ ($(\dynkin@root@name \the\RootNumber)+(\dynkin@root@radius,\dynkin@root@radius)$)%
+ --%
+ ($(\dynkin@root@name \the\RootNumber)-(\dynkin@root@radius,\dynkin@root@radius)$);%
+ \draw[/Dynkin diagram,x,#2]%
+ ($(\dynkin@root@name \the\RootNumber)+(-\dynkin@root@radius,\dynkin@root@radius)$)%
+ --%
+ ($(\dynkin@root@name \the\RootNumber)+(\dynkin@root@radius,-\dynkin@root@radius)$);%
+}%
+
+%% \dynkinHeavyCrossRootMark{<n>}
+%% Prints a heavy cross at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinHeavyCrossRootMark{sO{}m}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#3}%
+ }%
+ {%
+ \RootNumber=#3%
+ }%
+ \draw[/Dynkin diagram,X,#2]%
+ ($(\dynkin@root@name \the\RootNumber)+(\dynkin@root@radius,\dynkin@root@radius)$)%
+ --%
+ ($(\dynkin@root@name \the\RootNumber)-(\dynkin@root@radius,\dynkin@root@radius)$);%
+ \draw[/Dynkin diagram,X,#2]%
+ ($(\dynkin@root@name \the\RootNumber)+(-\dynkin@root@radius,\dynkin@root@radius)$)%
+ --%
+ ($(\dynkin@root@name \the\RootNumber)+(\dynkin@root@radius,-\dynkin@root@radius)$);%
+}%
+
+
+%% \dynkinHollowRootMark{<n>}
+%% Prints an hollow dot at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinHollowRootMark{sO{}m}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#3}%
+ }%
+ {%
+ \RootNumber=#3%
+ }%
+ \fill[/Dynkin diagram,o,#2] (\dynkin@root@name \the\RootNumber) circle (\dynkin@root@radius);%
+}%
+
+%% \dynkinDoubleHollowRootMark{<n>}
+%% Prints a double hollow dot at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDoubleHollowRootMark{sO{}m}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#3}%
+ }%
+ {%
+ \RootNumber=#3%
+ }%
+ \fill[/Dynkin diagram,o,#2] (\dynkin@root@name \the\RootNumber) circle (2*\dynkin@root@radius);%
+ \fill[/Dynkin diagram,o,#2] (\dynkin@root@name \the\RootNumber) circle (\dynkin@root@radius);%
+}%
+
+%% \dynkinSolidRootMark{<n>}
+%% Prints a solid dot at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinSolidRootMark{sO{}m}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#3}%
+ }%
+ {%
+ \RootNumber=#3%
+ }%
+ \fill[/Dynkin diagram,*,#2] (\dynkin@root@name \the\RootNumber) circle (\dynkin@root@radius);%
+}%
+
+%% \dynkinTensorRootMark{<n>}
+%% Prints a tensor product symbol at root <n> on the current Dynkin diagram.
+%% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinTensorRootMark{sO{}m}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#3}%
+ }%
+ {%
+ \RootNumber=#3%
+ }%
+ \fill[/Dynkin diagram,o,#2] (\dynkin@root@name \the\RootNumber) circle ({\dynkin@root@radius});%
+ \draw[/Dynkin diagram,t,#2]%
+ ($(\dynkin@root@name \the\RootNumber)+({\dynkin@root@radius/sqrt(2)},{\dynkin@root@radius/sqrt(2)})$)%
+ --%
+ ($(\dynkin@root@name \the\RootNumber)-({\dynkin@root@radius/sqrt(2)},{\dynkin@root@radius/sqrt(2)})$);%
+ \draw[/Dynkin diagram,t,#2]%
+ ($(\dynkin@root@name \the\RootNumber)+({-\dynkin@root@radius/sqrt(2)},{\dynkin@root@radius/sqrt(2)})$)%
+ --%
+ ($(\dynkin@root@name \the\RootNumber)+({\dynkin@root@radius/sqrt(2)},{-\dynkin@root@radius/sqrt(2)})$);%
+}%
+
+% \dynkinRootMark{<s>}{<n>}
+% Prints a dot at root <n> on the current Dynkin diagram using mark style <s>.
+% Use <s> empty to get the default mark style.
+% The starred form accepts <n> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinRootMark{smm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \IfStrEqCase{#2}%
+ {%
+ {}{\dynkinRootMark*{\dynkin@root@mark}{#3}}%
+ {*}{\dynkinSolidRootMark*{#3}}%
+ {O}{\dynkinDoubleHollowRootMark*{#3}}%
+ {X}{\dynkinHeavyCrossRootMark*{#3}}%
+ {o}{\dynkinHollowRootMark*{#3}}%
+ {t}{\dynkinTensorRootMark*{#3}}%
+ {x}{\dynkinCrossRootMark*{#3}}%
+ }%
+ [\ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized root mark: ``#2'' in Dynkin diagram%
+ \dynkin@user@series{\dynkin@user@string}}%
+ {}]
+ }%
+ {%
+ \IfStrEqCase{#2}%
+ {%
+ {}{\dynkinRootMark{\dynkin@root@mark}{#3}}%
+ {*}{\dynkinSolidRootMark{#3}}%
+ {O}{\dynkinDoubleHollowRootMark{#3}}%
+ {X}{\dynkinHeavyCrossRootMark{#3}}%
+ {o}{\dynkinHollowRootMark{#3}}%
+ {t}{\dynkinTensorRootMark{#3}}%
+ {x}{\dynkinCrossRootMark{#3}}%
+ }%
+ [\ClassError{Dynkin diagrams}{Unrecognized root mark: ``#2'' in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}{}]
+ }%
+}%
+
+%% \dynkinDefiniteSingleEdge{<p>}{<q>}
+%% Draws a single line from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteSingleEdge{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,#2]
+ ($(\dynkin@root@name \the\@fromRoot)$)
+ --
+ ($(\dynkin@root@name \the\@toRoot)$);%
+ \end{scope}%
+}%
+
+%% \dynkinIndefiniteSingleEdge{<p>}{<q>}
+%% Draws a single line from root <p> to root <q> on the current Dynkin diagram in the current label ordering,
+%% drawn as dashed to indicate an edge containing an indefinite number of roots.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteSingleEdge{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,#2]
+ ($(\dynkin@root@name \the\@fromRoot)$)
+ --
+ (${(2/3)}*(\dynkin@root@name \the\@fromRoot)+{(1/3)}*(\dynkin@root@name \the\@toRoot)$);
+ \draw[/Dynkin diagram,indefinite edge,#2]
+ (${(2/3)}*(\dynkin@root@name \the\@fromRoot)+{(1/3)}*(\dynkin@root@name \the\@toRoot)$)
+ --
+ (${(1/3)}*(\dynkin@root@name \the\@fromRoot)+{(2/3)}*(\dynkin@root@name \the\@toRoot)$);
+ \draw[/Dynkin diagram,edge,#2]
+ (${(1/3)}*(\dynkin@root@name \the\@fromRoot)+{(2/3)}*(\dynkin@root@name \the\@toRoot)$)
+ --
+ ($(\dynkin@root@name \the\@toRoot)$);
+ \end{scope}%
+}%
+
+%%% \dynkinRightFold{<p>}{<q>}
+%%% Draws an arrow to represent folding from root <p> to root <q> on the current Dynkin diagram in the current label ordering, curving to the right.
+%%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinRightFold{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \dynkinFold*[/Dynkin diagram,fold right style,#2]{#3}{#4}%
+ }%
+ {%
+ \dynkinFold[/Dynkin diagram,fold right style,#2]{#3}{#4}%
+ }%
+}%
+
+%%% \dynkinLeftFold{<p>}{<q>}
+%%% Draws an arrow to represent folding from root <p> to root <q> on the current Dynkin diagram in the current label ordering, curving to the left.
+%%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinLeftFold{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \dynkinFold*[/Dynkin diagram,fold left style,#2]{#3}{#4}%
+ }%
+ {%
+ \dynkinFold[/Dynkin diagram,fold left style,#2]{#3}{#4}%
+ }%
+}%
+
+%% \dynkinFold{<p>}{<q>}
+%% Draws some colouring to indicate which roots are being folded together, including roots <p> and <q>.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinFold{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+% \convertRootPair{\@fromRoot}{\@toRoot}%
+ \begin{scope}[on background layer]
+ \draw[/Dynkin diagram/fold style,#2]
+ ($(\dynkin@root@name \the\@fromRoot)$)
+ to
+ ($(\dynkin@root@name \the\@toRoot)$);
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteRightDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteRightDownArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:0:\dynkin@fold@radius);%
+ \end{scope}%
+}%
+
+%% \dynkinIndefiniteRightDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteRightDownArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \node (center) at ($(\dynkin@root@name \the\@fromRoot)-(0,\dynkin@fold@radius)$) {};%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(90:\dynkin@fold@radius)
+ arc [start angle=90, end angle=60, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,indefinite edge,fill=none,#2]
+ (center)
+ ++(60:\dynkin@fold@radius)
+ arc [start angle=60, end angle=30, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(30:\dynkin@fold@radius)
+ arc [start angle=30, end angle=0, radius=\dynkin@fold@radius];%
+ \end{scope}%
+}%
+
+%% \dynkinDefiniteRightUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteRightUpArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (-90:0:\dynkin@fold@radius);%
+ \end{scope}%
+}%
+
+%% \dynkinIndefiniteRightUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteRightUpArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \node (center) at ($(\dynkin@root@name \the\@fromRoot)+(0,\dynkin@fold@radius)$) {};%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(-90:\dynkin@fold@radius)
+ arc [start angle=-90, end angle=-60, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,indefinite edge,fill=none,#2]
+ (center)
+ ++(-60:\dynkin@fold@radius)
+ arc [start angle=-60, end angle=-30, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(-30:\dynkin@fold@radius)
+ arc [start angle=-30, end angle=0, radius=\dynkin@fold@radius];%
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteLeftDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteLeftDownArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:180:\dynkin@fold@radius);%
+ \end{scope}%
+}%
+
+%% \dynkinIndefiniteLeftDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteLeftDownArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \node (center) at ($(\dynkin@root@name \the\@fromRoot)-(0,\dynkin@fold@radius)$) {};%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(90:\dynkin@fold@radius)
+ arc [start angle=90, end angle=120, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,indefinite edge,fill=none,#2]
+ (center)
+ ++(120:\dynkin@fold@radius)
+ arc [start angle=120, end angle=150, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(150:\dynkin@fold@radius)
+ arc [start angle=150, end angle=180, radius=\dynkin@fold@radius];%
+ \end{scope}%
+}%
+
+%% \dynkinDefiniteLeftUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteLeftUpArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ ($(\dynkin@root@name \the\@fromRoot)$)
+ arc (-90:-180:\dynkin@fold@radius);%
+ \end{scope}%
+}%
+
+%% \dynkinIndefiniteLeftUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteLeftUpArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \node (center) at ($(\dynkin@root@name \the\@fromRoot)+(0,\dynkin@fold@radius)$) {};%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(-90:\dynkin@fold@radius)
+ arc [start angle=-90, end angle=-120, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,indefinite edge,fill=none,#2]
+ (center)
+ ++(-120:\dynkin@fold@radius)
+ arc [start angle=-120, end angle=-150, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(-150:\dynkin@fold@radius)
+ arc [start angle=-150, end angle=-180, radius=\dynkin@fold@radius];%
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteSemiCircle{<p>}{<q>}
+%% Draws a half circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteSemiCircle{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ ($(\dynkin@root@name \the\@fromRoot)$)
+ arc (90:-90:\dynkin@fold@radius);%
+ \end{scope}%
+}%
+
+%% \dynkinIndefiniteSemiCircle{<p>}{<q>}
+%% Draws a half circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinIndefiniteSemiCircle{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \node (center) at ($(\dynkin@root@name \the\@fromRoot)-(0,\dynkin@fold@radius)$) {};%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(90:\dynkin@fold@radius)
+ arc [start angle=90, end angle=30, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,indefinite edge,fill=none,#2]
+ (center)
+ ++(30:\dynkin@fold@radius)
+ arc [start angle=30, end angle=-30, radius=\dynkin@fold@radius];%
+ \draw[/Dynkin diagram,edge,fill=none,#2]
+ (center)
+ ++(-90:\dynkin@fold@radius)
+ arc [start angle=-90, end angle=-30, radius=\dynkin@fold@radius];
+ \end{scope}%
+}%
+
+%% \dynkinDefiniteDoubleRightDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleRightDownArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:0:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (0:45:{\dynkin@fold@radius});%
+ \else%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:45:{\dynkin@fold@radius});%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleUpRightArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleUpRightArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (180:90:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[/Dynkin diagram,edge,
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (135:180:{\dynkin@fold@radius});%
+ \else%
+ \path[/Dynkin diagram,edge,
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (180:135:{\dynkin@fold@radius});%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleUpLeftArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleUpLeftArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (0:90:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (90:45:{\dynkin@fold@radius});%
+ \else%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (0:45:{\dynkin@fold@radius});%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+
+
+%% \dynkinDefiniteDoubleDownRightArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleDownRightArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ --
+ ($(\dynkin@root@name \the\@toRoot)+(-\dynkin@fold@radius,\dynkin@fold@radius)$)%
+ arc (-180:-90:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (-90:-135:{\dynkin@fold@radius});%
+ \else%
+ \path[-{Computer Modern Rightarrow [\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (180:225:{\dynkin@fold@radius});%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleRightUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleRightUpArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (270:360:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (0:-45:\dynkin@fold@radius);%
+ \else%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (270:315:\dynkin@fold@radius);%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+%% \dynkinDefiniteDoubleLeftDownArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleLeftDownArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:180:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (180:{180-45}:{\dynkin@fold@radius});%
+ \else%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:135:{\dynkin@fold@radius});%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleDownLeftArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleDownLeftArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (360:270:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (-90:-45:{\dynkin@fold@radius});%
+ \else%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (360:315:{\dynkin@fold@radius});%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+
+%% \dynkinDefiniteDoubleLeftUpArc{<p>}{<q>}
+%% Draws a quarter circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleLeftUpArc{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (-90:-180:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[-{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (-180:-135:\dynkin@fold@radius);%
+ \else%
+ \path[,
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (-90:-135:\dynkin@fold@radius);%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+%% \dynkinDefiniteDoubleDownRightSemiCircle{<p>}{<q>}
+%% Draws a semi circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleDownRightSemiCircle{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:-90:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (-90:0:\dynkin@fold@radius);%
+ \else%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:0:\dynkin@fold@radius);%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+
+
+%% \dynkinDefiniteTripleDownRightSemiCircle{<p>}{<q>}
+%% Draws a semi circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a triple path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteTripleDownRightSemiCircle{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,double distance=\dynkin@root@radius,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:-90:{\dynkin@fold@radius});%
+ \draw[/Dynkin diagram,edge,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:-90:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (-90:0:\dynkin@fold@radius);%
+ \else%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (90:0:\dynkin@fold@radius);%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+
+
+%% \dynkinDefiniteDoubleUpRightSemiCircle{<p>}{<q>}
+%% Draws a semi circle from root <p> to root <q> on the current Dynkin diagram in the current label ordering
+%% as a double path.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleUpRightSemiCircle{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,double,fill=none,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (-90:90:{\dynkin@fold@radius});%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ arc (90:0:\dynkin@fold@radius);%
+ \else%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ ,tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ arc (-90:0:\dynkin@fold@radius);%
+ \fi%
+ \fi%
+ \end{scope}%
+}%
+
+
+%% \dynkinEdge[<o>]{<f>}{<p>}{<q>}
+%% Applies \dynkinDefinite<f>[<o>]{<p>}{<q>} if the edge <p><q> is definite,
+%% otherwise applies \dynkinIndefinite<f>[<o>]{<p>}{<q>}
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinEdge{sO{}mmm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#4}{#5}%
+ \dynkin@is@edge@indefinite{\@fromRoot}{\@toRoot}%
+ \ifdynkin@is@indefinite@edge%
+ \csname dynkinIndefinite#3\endcsname[#2]{\@fromRoot}{\@toRoot}%
+ \else%
+ \csname dynkinDefinite#3\endcsname[#2]{\@fromRoot}{\@toRoot}%
+ \fi%
+ }%
+ {%
+ \dynkin@is@edge@indefinite{#4}{#5}%
+ \ifdynkin@is@indefinite@edge%
+ \csname dynkinIndefinite#3\endcsname[#2]{#4}{#5}%
+ \else%
+ \csname dynkinDefinite#3\endcsname[#2]{#4}{#5}%
+ \fi%
+ }%
+}%
+
+%% \dynkinEdgeArrow{<p>}{<q>}
+%% Draws an arrow head on the edge from root <p> to root <q>.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinEdgeArrow{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \ifdynkin@arrows%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \begin{scope}[on background layer]%
+ \ifdynkin@reverse@arrows%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ tips]
+ ($(\dynkin@root@name \the\@toRoot)$)
+ --
+ ($.3*(\dynkin@root@name \the\@toRoot)+.7*(\dynkin@root@name \the\@fromRoot)$);%
+ \else%
+ \path[
+ -{Computer Modern Rightarrow[\dynkin@arrow@color]},
+ tips]
+ ($(\dynkin@root@name \the\@fromRoot)$)
+ --
+ ($.3*(\dynkin@root@name \the\@fromRoot)+.7*(\dynkin@root@name \the\@toRoot)$);%
+ \fi%
+ \end{scope}%
+ \fi%
+}%
+
+\NewDocumentCommand\dynkinKacDoubleArrow{O{}mm}%
+{%
+ \draw[arrows = {-{Triangle Cap[length=.8mm,fill=white]}},%
+ /Dynkin diagram,edge, double=white,fill=white,double distance=1.8pt,#1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+ \draw[arrows = {-{Classical TikZ Rightarrow[length=1mm]}},%
+ /Dynkin diagram,edge,double distance=1.8pt,#1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+}%
+
+\NewDocumentCommand\dynkinKacTripleArrow{O{}mm}%
+{%
+ \draw[arrows = {-{Triangle Cap[length=.8mm,fill=white]}},%
+ /Dynkin diagram,edge,double=white,fill=white,double distance=1.8pt,#1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+ \draw[arrows = {-{Classical TikZ Rightarrow[length=1mm]}},%
+ /Dynkin diagram,edge,double distance=1.8pt,#1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+ \draw[/Dynkin diagram,edge,shorten >=1.1mm,#1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+}%
+
+\NewDocumentCommand\dynkinKacQuadrupleArrow{O{}mm}%
+{%
+ \draw[arrows = {-{Triangle Cap[length=1.127mm,fill=white]}},%
+ /Dynkin diagram,edge,double=white,fill=white,shorten >=1mm,shorten <=1mm, double distance=3.6pt,#1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+ \draw[arrows = {-{Classical TikZ Rightarrow[length=1.2mm]}},%
+ /Dynkin diagram,edge,double distance=3.6pt,shorten <=.83mm,#1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+ \draw[arrows = {-{Classical TikZ Rightarrow[length=1.2mm]}},%
+ /Dynkin diagram,edge,double distance=1.2pt,shorten <= .83mm,
+ #1]%
+ (\dynkin@root@name \the#2)--(\dynkin@root@name \the#3);%
+}%
+
+\newcount\onesbit%
+\newcount\twosbit%
+
+%% \dynkinDefiniteDoubleEdge{<p>}{<q>}
+%% Draws an oriented double line from root <p> to root <q> on the current Dynkin diagram.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinDefiniteDoubleEdge{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \StrChar{\dynkin@roots}{\the\@fromRoot}[\my@root@marker]%
+ \IfStrEq{\my@root@marker}{x}%
+ {%
+ \global\onesbit=1%
+ }%
+ {%
+ \global\onesbit=0%
+ }%
+ \StrChar{\dynkin@roots}{\the\@toRoot}[\my@root@marker]%
+ \IfStrEq{\my@root@marker}{x}%
+ {%
+ \global\twosbit=1%
+ }%
+ {%
+ \global\twosbit=0%
+ }%
+ \ifdynkin@Kac@arrows
+ \begin{scope}[on background layer]%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows
+ \ifdynkin@is@backwards
+ \dynkinKacDoubleArrow[#2]{\@fromRoot}{\@toRoot}
+ \else%
+ \dynkinKacDoubleArrow[#2]{\@toRoot}{\@fromRoot}
+ \fi%
+ \else%
+ \ifdynkin@is@backwards
+ \dynkinKacDoubleArrow[#2]{\@toRoot}{\@fromRoot}
+ \else%
+ \dynkinKacDoubleArrow[#2]{\@fromRoot}{\@toRoot}
+ \fi%
+ \fi%
+ \else%
+ \draw[/Dynkin diagram,edge,double distance=3pt,#2]%
+ (\dynkin@root@name \the\@fromRoot)%
+ --%
+ (\dynkin@root@name \the\@toRoot);%
+ \fi%
+ \end{scope}%
+ \else
+ \def\LL{.5*\dynkin@root@radius}
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ --%
+ +({\the\onesbit*\LL},{\LL})%
+ --%
+ ($(\dynkin@root@name \the\@toRoot)+(-\the\twosbit*\LL,\LL)$)%
+ --%
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ --%
+ ($(\dynkin@root@name \the\@toRoot)-(\the\twosbit*\LL,\LL)$)%
+ --%
+ ($(\dynkin@root@name \the\@fromRoot)+(\the\onesbit*\LL,-\LL)$)%
+ --%
+ cycle;%
+ \end{scope}%
+ \ifdynkin@arrows%
+ \dynkinEdgeArrow[#2]{\the\@fromRoot}{\the\@toRoot}%
+ \fi%
+ \fi%
+}%
+
+%% \dynkinTripleEdge{<p><q>}
+%% Draws an oriented triple line from root <p> to root <q> on the current Dynkin diagram.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinTripleEdge{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \StrChar{\dynkin@roots}{\the\@fromRoot}[\my@root@marker]%
+ \IfStrEq{\my@root@marker}{x}%
+ {%
+ \global\onesbit=1%
+ }%
+ {%
+ \global\onesbit=0%
+ }%
+ \StrChar{\dynkin@roots}{\the\@toRoot}[\my@root@marker]%
+ \IfStrEq{\my@root@marker}{x}%
+ {%
+ \global\twosbit=1%
+ }%
+ {%
+ \global\twosbit=0%
+ }%
+ \ifdynkin@Kac@arrows
+ \begin{scope}[on background layer]%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows
+ \ifdynkin@is@backwards
+ \dynkinKacTripleArrow[#2]{\@fromRoot}{\@toRoot}
+ \else%
+ \dynkinKacTripleArrow[#2]{\@toRoot}{\@fromRoot}
+ \fi%
+ \else%
+ \ifdynkin@is@backwards
+ \dynkinKacTripleArrow[#2]{\@toRoot}{\@fromRoot}
+ \else%
+ \dynkinKacTripleArrow[#2]{\@fromRoot}{\@toRoot}
+ \fi%
+ \fi%
+ \else%
+ \draw[/Dynkin diagram,edge,double distance=3pt,#2]%
+ (\dynkin@root@name \the\@fromRoot)%
+ --%
+ (\dynkin@root@name \the\@toRoot);%
+ \draw[/Dynkin diagram,edge,#2]%
+ (\dynkin@root@name \the\@fromRoot)%
+ --%
+ (\dynkin@root@name \the\@toRoot);%
+ \fi%
+ \end{scope}%
+ \else
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)$)%
+ --%
+ +({\the\onesbit*\dynkin@root@radius},{\dynkin@root@radius})%
+ --%
+ ($(\dynkin@root@name \the\@toRoot)+(-\twosbit*\dynkin@root@radius,\dynkin@root@radius)$)%
+ --%
+ ($(\dynkin@root@name \the\@toRoot)$)%
+ --%
+ ($(\dynkin@root@name \the\@toRoot)-(\twosbit*\dynkin@root@radius,\dynkin@root@radius)$)%
+ --%
+ ($(\dynkin@root@name \the\@fromRoot)+(\onesbit*\dynkin@root@radius,-\dynkin@root@radius)$)%
+ --%
+ cycle;%
+ \draw[/Dynkin diagram,edge,#2]
+ ($(\dynkin@root@name \the\@fromRoot)$)
+ --
+ ($(\dynkin@root@name \the\@toRoot)$);%
+ \end{scope}%
+ \ifdynkin@arrows%
+ \dynkinEdgeArrow[#2]{\the\@fromRoot}{\the\@toRoot}%
+ \fi%
+ \fi%
+}%
+
+
+%% \dynkinQuadrupleEdge{<p>}{<q>}
+%% \dynkinQuadrupleEdge*{<p>}{<q>}
+%% Draws an oriented edge of valence 4 from root <p> to root <q> on the current Dynkin diagram.
+%% The starred form accepts <p> and <q> in the Bourbaki ordering.
+\NewDocumentCommand\dynkinQuadrupleEdge{sO{}mm}%
+{%
+ \ifdefined\filldraw\else\dynkin@error@not@in@tikz\fi%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#4}%
+ }%
+ {%
+ \@fromRoot=#3%
+ \@toRoot=#4%
+ }%
+ \ifdynkin@Kac@arrows
+ \begin{scope}[on background layer]%
+ \ifdynkin@arrows%
+ \ifdynkin@reverse@arrows
+ \ifdynkin@is@backwards
+ \dynkinKacQuadrupleArrow[#2]{\@fromRoot}{\@toRoot}
+ \else%
+ \dynkinKacQuadrupleArrow[#2]{\@toRoot}{\@fromRoot}
+ \fi%
+ \else%
+ \ifdynkin@is@backwards
+ \dynkinKacQuadrupleArrow[#2]{\@toRoot}{\@fromRoot}
+ \else%
+ \dynkinKacQuadrupleArrow[#2]{\@fromRoot}{\@toRoot}
+ \fi%
+ \fi%
+ \else%
+ \draw[/Dynkin diagram,edge,double distance=3pt,#2]%
+ (\dynkin@root@name \the\@fromRoot)%
+ --%
+ (\dynkin@root@name \the\@toRoot);%
+ \draw[/Dynkin diagram,edge,#2]%
+ (\dynkin@root@name \the\@fromRoot)%
+ --%
+ (\dynkin@root@name \the\@toRoot);%
+ \fi%
+ \end{scope}%
+ \else
+ \begin{scope}[on background layer]%
+ \draw[/Dynkin diagram,edge,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)+(0,\dynkin@root@radius)$)--%
+ ($(\dynkin@root@name \the\@toRoot)+(0,\dynkin@root@radius)$)--%
+ ($(\dynkin@root@name \the\@toRoot)+(0,-\dynkin@root@radius)$)--%
+ ($(\dynkin@root@name \the\@fromRoot)+(0,-\dynkin@root@radius)$)--%
+ cycle;
+ \draw[/Dynkin diagram,edge,#2]%
+ ($(\dynkin@root@name \the\@fromRoot)+(0,\dynkin@root@radius/3)$)--%
+ ($(\dynkin@root@name \the\@toRoot)+(0,\dynkin@root@radius/3)$)--%
+ ($(\dynkin@root@name \the\@toRoot)+(0,-\dynkin@root@radius/3)$)--%
+ ($(\dynkin@root@name \the\@fromRoot)+(0,-\dynkin@root@radius/3)$)--%
+ cycle;
+ \end{scope}%
+ \ifdynkin@arrows%
+ \dynkinEdgeArrow[#2]{\the\@fromRoot}{\the\@toRoot}%
+ \fi%
+ \fi%
+}%
+
+
+%% \repeatCharacter{<n>}{<s>}
+%% Outputs <n> copies of the string <s>
+\ExplSyntaxOn
+\DeclareExpandableDocumentCommand{\repeatCharacter}{O{}mm}
+ {
+ \int_compare:nT { #2 > 0 }
+ {
+ #3 \prg_replicate:nn { #2 - 1 } { #1#3 }
+ }
+ }
+\ExplSyntaxOff
+
+%% \stringCharacterInPosition{<s>}{<n>}
+%% Outputs the element of string <s> in position <n>.
+\ExplSyntaxOn
+\cs_new:Npn \stringCharacterInPosition #1 #2
+{
+\str_item:fn { #1 } { #2 }
+}
+\cs_generate_variant:Nn \str_item:nn {f}
+\ExplSyntaxOff
+
+
+
+
+%%%
+%%% Implementation:
+%%%
+
+\def\dynkin@diagram@name{anonymous}
+% Default diagram name
+
+\def\dynkin@root@mark{*}
+% Default mark
+
+\def\dynkin@affine@root@mark{o}
+% Default affine root mark
+
+\def\dynkin@roots{}
+% List of marks for each root.
+
+\def\dynkin@user@series{}
+% Series string passed from user.
+% For example:
+% \dynkin{A}{3} passes the string A,
+% \dynkin{A2}{*o*} passes the string A2,
+% \dynkin{E2}{} passes the string E2.
+
+\def\dynkin@user@string{}
+% Control string passed from user.
+% For example:
+% \dynkin{A}{3} passes the string 3,
+% \dynkin{A}{*o*} passes the string *o*,
+% \dynkin{A}{III} passes the string III.
+
+\def\dynkin@string{}
+% \dynkin@user@string{} with some modifications to it to expand it out.
+
+\def\dynkin@series{A}
+% Which series of root system: A,B,C,D,E,F,G
+
+\def\dynkin@label@list{}
+% List of labels for the roots.
+
+\def\dynkin@label@list@star{}
+% List of alternate labels for the roots.
+
+\newcount\dynkin@rank
+% Which rank of root system: 1,2,...
+
+\newcount\dynkin@nodes
+% How many nodes (besides the zero node for affine diagrams) are there?
+
+\newif\ifdynkin@is@backwards
+% Are we drawing this thing in a reverse direction?
+
+\newif\ifdynkin@is@upsidedown
+% Are we drawing this thing in a reverse direction?
+
+\newif\ifdynkin@is@extended
+% Is this an extended extended root system?
+
+\newif\ifdynkin@is@twisted
+% Is this a twisted extended root system?
+
+\def\dynkin@twisted@series{0}
+% Which Kac series? 0=finite, 1,2,3->infinite
+
+\newif\ifdynkin@label@the@roots
+% Should we label the roots by the current root ordering convention?
+
+\newif\ifdynkin@reverse@arrows
+% Should we reverse the directions of all arrows?
+
+\newif\ifdynkin@arrows
+% Should we draw arrows on Dynkin diagrams?
+
+\newif\ifdynkin@left@fold
+% Is the left side of the Dynkin diagram folded?
+
+\newif\ifdynkin@right@fold
+% Is the right side of the Dynkin diagram folded?
+
+\newif\ifdynkin@Coxeter
+% Should we draw Coxeter diagrams?
+
+\newif\ifdynkin@Kac@arrows
+% Should we draw arrows following Kac?
+
+\newif\ifdynkin@odd
+% For twisted A series diagrams, is the rank odd?
+
+\newcount\dynkin@ply
+% Maximum number of nodes arranged vertically in the folding of the Dynkin diagram
+
+\def\dynkin@ply@value{1}
+% Default maximum number of nodes arranged vertically in the folding of the Dynkin diagram
+
+\def\dynkin@label@directions{}
+% List of directions in which to draw the labels attached to the roots.
+
+\def\dynkin@label@directions@star{}
+% List of directions in which to draw the labels attached to the roots, for alternate labels.
+
+\def\dynkin@current@location{(0,0)}
+
+\def\dynkin@arrow@color{}
+
+\NewDocumentCommand\regurgitate{m}{#1}
+
+\pgfkeys{
+ /Dynkin diagram/.is family,
+ /Dynkin diagram,
+ name/.estore in = \dynkin@diagram@name,
+ name = anonymous,
+ mark/.estore in = \dynkin@root@mark,
+ mark = *,
+ affine mark/.estore in = \dynkin@affine@root@mark,
+ affine-mark/.forward to = /Dynkin diagram/affine mark,
+ affine-mark = o,
+ edge length/.estore in = \dynkin@edge@length,
+ edge-length/.forward to=/Dynkin diagram/edge length,
+ edge length = .35cm,
+ edge/.style={solid,draw=black,fill=white,thin},
+ make indefinite edge/.code={\dynkin@set@edge@indefinite@pair{#1}},
+ make-indefinite-edge/.forward to=/Dynkin diagram/make indefinite edge,
+ indefinite edge ratio/.estore in = \dynkin@indefinite@edge@ratio,
+ indefinite-edge-ratio/.forward to = /Dynkin diagram/indefinite edge ratio,
+ indefinite edge ratio = 1.6,
+ indefinite edge/.style={solid,draw=black,fill=white,thin,densely dotted},
+ indefinite-edge/.forward to=/Dynkin diagram/indefinite edge/.style,
+ backwards/.is if = dynkin@is@backwards,
+ backwards = false,
+ upside down/.is if = dynkin@is@upsidedown,
+ upside down = false,
+ upside-down/.forward to = /Dynkin diagram/upside down,
+ arrows/.is if = dynkin@arrows,
+ arrows = true,
+ reverse arrows/.is if = dynkin@reverse@arrows,
+ reverse arrows = false,
+ reverse-arrows/.forward to = /Dynkin diagram/reverse arrows,
+ fold style/.style = {solid,draw=black!40,fill=none,line width=\dynkin@root@radius},
+ fold-style/.forward to=/Dynkin diagram/fold style/.style,
+ fold left style/.style = {},
+ fold-left-style/.forward to=/Dynkin diagram/fold left style/.style,
+ fold right style/.style = {},
+ fold-right-style/.forward to=/Dynkin diagram/fold right style/.style,
+ arrow color/.estore in = \dynkin@arrow@color,
+ arrow color = black,
+ arrow-color/.forward to=/Dynkin diagram/arrow color,
+ double edges/.style = {
+ fold style/.style = {
+ draw=black,
+ double=white,
+ fill=none,
+ double distance=\dynkin@root@radius,
+ line width=\defaultpgflinewidth}
+ },
+ double-edges/.forward to=/Dynkin diagram/double edges/.style,
+ double fold/.style = {
+ fold style/.style = {
+ draw=black,
+ double=black!40,
+ fill=none,
+ double distance=\dynkin@root@radius,
+ line width=\defaultpgflinewidth}
+ },
+ double-fold/.forward to=/Dynkin diagram/double fold/.style,
+ double left/.style = {
+ fold left style/.style = {
+ draw=black,
+ double=white,
+ fill=none,
+ double distance=\dynkin@root@radius,
+ line width=\defaultpgflinewidth}
+ },
+ double-left/.forward to=/Dynkin diagram/double left/.style,
+ double fold left/.style = {
+ fold left style/.style = {
+ draw=black,
+ double=black!40,
+ fill=none,
+ double distance=\dynkin@root@radius,
+ line width=\defaultpgflinewidth}
+ },
+ double-fold/.forward to=/Dynkin diagram/double fold/.style,
+ double right/.style = {
+ fold right style/.style = {
+ draw=black,
+ double=white,
+ fill=none,
+ double distance=\dynkin@root@radius,
+ line width=\defaultpgflinewidth}
+ },
+ double-right/.forward to=/Dynkin diagram/double right/.style,
+ double fold right/.style = {
+ fold right style/.style = {
+ draw=black,
+ double=black!40,
+ fill=none,
+ double distance=\dynkin@root@radius,
+ line width=\defaultpgflinewidth}
+ },
+ double-fold-right/.forward to=/Dynkin diagram/double fold right/.style,
+ root radius/.estore in = \dynkin@root@radius,
+ root-radius/.forward to=/Dynkin diagram/root radius,
+ root radius=.05cm,
+ fold radius/.estore in = \dynkin@fold@radius,
+ fold-radius/.forward to=/Dynkin diagram/fold radius,
+ fold radius=.3cm,
+ */.style = {
+ solid,
+ draw=black,
+ fill=black,
+ },
+ O/.style = {
+ solid,
+ draw=black,
+ fill=white,
+ },
+ X/.style = {
+ solid,
+ draw=black,
+ very thick,
+ line cap=round
+ },
+ o/.style = {
+ solid,
+ draw=black,
+ fill=white,
+ },
+ t/.style = {
+ solid,
+ draw=black,
+ fill=white,
+ },
+ x/.style = {
+ solid,
+ thick,
+ draw=black,
+ line cap=round
+ },
+ Coxeter/.is if = dynkin@Coxeter,
+ Coxeter=false,
+ ordering/.store in = \dynkin@ordering,
+ ordering = Bourbaki,
+ text style/.style={scale=.7},
+ text-style/.forward to=/Dynkin diagram/text style/.style,
+ label macro/.code = {\regurgitate{#1}},
+ label-macro/.forward to=/Dynkin diagram/label macro,
+ label macro*/.code = {\regurgitate{#1}},
+ label-macro*/.forward to=/Dynkin diagram/label macro*,
+ labels/.store in = \dynkin@label@list,
+ labels*/.store in = \dynkin@label@list@star,
+ odd/.is if = dynkin@odd,
+ odd=false,
+ Kac arrows/.is if = dynkin@Kac@arrows,
+ Kac-arrows/.forward to = /Dynkin diagram/Kac arrows,
+ Kac arrows=false,
+ Kac/.style={
+ Kac arrows=true,
+ ordering=Kac,
+ root radius=.05cm,
+ edge length=.66cm,
+ indefinite edge ratio = 3,
+ edge/.style={solid,draw=black,fill=white,thin,shorten <=1mm,shorten >=1mm},
+ fold style/.style = {solid,draw=black!40,fill=none,line width=\dynkin@root@radius,shorten <=1mm,shorten >=1mm},
+ mark=o,
+ indefinite edge/.style={solid,draw=black,fill=none,thin,loosely dotted},
+ },
+ ceref/.style={
+ edge length=.48cm,
+ indefinite edge/.style={
+ shorten <=2pt,
+ shorten >=2pt,
+ solid,
+ draw=black,
+ fill=white,
+ thin,
+ densely dotted
+ },
+ edge/.style={
+ solid,
+ draw=black,
+ fill=white,
+ thin,
+ double copy shadow={draw=black!90,fill=white,thin,shadow xshift=.1pt, shadow yshift=-.15pt},
+ },
+ */.style={
+ yscale=1.2,
+ solid,
+ draw=black,
+ fill=gray,
+ double copy shadow={fill=black,shadow xshift=0.1pt, shadow yshift=-0.15pt},
+ },
+ o/.style={
+ yscale=1.2,
+ solid,
+ draw=black,
+ fill=white,
+ double copy shadow={fill=black,shadow xshift=0.1pt, shadow yshift=-0.15pt},
+ },
+ O/.style={
+ yscale=1.2,
+ solid,
+ draw=black,
+ fill=white,
+ double copy shadow={fill=green,shadow xshift=0.1pt, shadow yshift=-0.15pt},
+ }
+ t/.style={
+ yscale=1.2,
+ solid,
+ draw=black,
+ fill=white,
+ },
+ },
+ default/.style = {
+ label/.is if = dynkin@label@the@roots,
+ label = false,
+ labels = {},
+ labels* = {},
+ at/.estore in = \dynkin@current@location,
+ at = {(0,0)},
+ parabolic/.estore in = \dynkin@parabolic,
+ parabolic = 0,
+ gonality/.estore in = \dynkin@gonality,
+ gonality = 0,
+ extended/.is if = dynkin@is@extended,
+ extended = false,
+ twisted/.is if = dynkin@is@twisted,
+ twisted = false,
+ twisted series/.estore in = \dynkin@twisted@series,
+ twisted-series/.forward to = /Dynkin diagram/twisted series,
+ twisted series = 0,
+ ply/.estore in = \dynkin@ply@value,
+ ply = 1,
+ fold/.style = {ply=2},
+ fold left/.is if = dynkin@left@fold,
+ fold-left/.forward to = /Dynkin diagram/fold left,
+ fold left = false,
+ fold right/.is if = dynkin@right@fold,
+ fold-right/.forward to = /Dynkin diagram/fold right,
+ fold right = false,
+ },
+ .search also={/tikz},
+}
+
+\ProcessPgfPackageOptions{/Dynkin diagram}\relax
+
+\newcount\drpo%
+\newcount\dynkin@where%
+
+%% \dynkin@put@direction{<r>}{<d>}{<d*>}
+%% Assigns to \dynkin@label@directions or \dynkin@label@directions@star the direction that the label of root <r> (in default ordering) should sit from the root node location, <d>=0,1,2,3,4,5,6,7 to indicate direction in multiples of 45 degrees
+\NewDocumentCommand\dynkin@put@direction{smm}%
+{%
+ \drpo=\the\dynkin@nodes%
+ \advance\drpo by 1%
+ \dynkin@where=#2%
+ \IfBooleanTF{#1}%
+ {%
+ \StrMid{\dynkin@label@directions@star}{1}{\the\dynkin@where}[\dynkin@start]%
+ \advance\dynkin@where by 2
+ \StrMid{\dynkin@label@directions@star}{\the\dynkin@where}{\the\drpo}[\dynkin@end]%
+ \IfStrEqCase{#3}{%
+ {right}{\xdef\dynkin@label@directions@star{\dynkin@start 0\dynkin@end}}%
+ {above right}{\xdef\dynkin@label@directions@star{\dynkin@start 1\dynkin@end}}%
+ {above}{\xdef\dynkin@label@directions@star{\dynkin@start 2\dynkin@end}}%
+ {above left}{\xdef\dynkin@label@directions@star{\dynkin@start 3\dynkin@end}}%
+ {left}{\xdef\dynkin@label@directions@star{\dynkin@start 4\dynkin@end}}%
+ {below left}{\xdef\dynkin@label@directions@star{\dynkin@start 5\dynkin@end}}%
+ {below}{\xdef\dynkin@label@directions@star{\dynkin@start 6\dynkin@end}}%
+ {below right}{\xdef\dynkin@label@directions@star{\dynkin@start 7\dynkin@end}}%
+ }%
+ [\ClassError{Dynkin diagrams}%
+ {Unrecognized direction: ``#2'' in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}{}]%
+ }%
+ {%
+ \StrMid{\dynkin@label@directions}{1}{\the\dynkin@where}[\dynkin@start]%
+ \advance\dynkin@where by 2
+ \StrMid{\dynkin@label@directions}{\the\dynkin@where}{\the\drpo}[\dynkin@end]%
+ \IfStrEqCase{#3}{%
+ {right}{\xdef\dynkin@label@directions{\dynkin@start 0\dynkin@end}}%
+ {above right}{\xdef\dynkin@label@directions{\dynkin@start 1\dynkin@end}}%
+ {above}{\xdef\dynkin@label@directions{\dynkin@start 2\dynkin@end}}%
+ {above left}{\xdef\dynkin@label@directions{\dynkin@start 3\dynkin@end}}%
+ {left}{\xdef\dynkin@label@directions{\dynkin@start 4\dynkin@end}}%
+ {below left}{\xdef\dynkin@label@directions{\dynkin@start 5\dynkin@end}}%
+ {below}{\xdef\dynkin@label@directions{\dynkin@start 6\dynkin@end}}%
+ {below right}{\xdef\dynkin@label@directions{\dynkin@start 7\dynkin@end}}%
+ }%
+ [\ClassError{Dynkin diagrams}%
+ {Unrecognized direction: ``#2'' in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}{}]%
+ }%
+}%
+
+
+%\xdef\replace@DR{}
+%
+% \expand@Dynkin@Roots@By@Char{<c>},
+% for example if <c> is the letter x, expands out any expression like
+% x7 in \dynkin@string into 7 copies of the letter x.
+\NewDocumentCommand\expand@Dynkin@Roots@By@Char{m}%
+{%
+ \xdef\replace@DR{}
+ \foreach \i in {0,...,9}%
+ {%
+ \StrSubstitute[0]{\dynkin@string}{#1\i}{\replace@DR}[\temp@DR]%
+ \xdef\dynkin@string{\temp@DR}%
+ \xdef\replace@DR{\replace@DR #1}%
+ }%
+}%
+
+% \expand@Dynkin@Roots@Digits{} expands out any expression like x7 in \dynkin@roots into 7 copies of the letter x, and so on for any letter which is not a digit.
+\NewDocumentCommand\expand@Dynkin@Roots@Digits{}%
+{%
+ \edef\current@string{\dynkin@string}
+ \StrLen{\current@string}[\string@len]
+ \foreach \j in {1,...,\string@len}%
+ {%
+ \StrChar{\current@string}{\j}[\cccc]%
+ \IfInteger{\cccc}%
+ {}%
+ {%
+ \expand@Dynkin@Roots@By@Char{\cccc}%
+ }%
+ }%
+}%
+
+% \dynkin@integer@rank{} expands a \dynkin@string 3 into ***, i.e.
+% writes the given number <n> of copies of the default root mark into the string \dynkin@string.
+\NewDocumentCommand\dynkin@integer@rank{}%
+{%
+ \global\dynkin@rank=\dynkin@string%
+ \global\dynkin@nodes=\dynkin@string%
+ \ifdynkin@is@twisted%
+ \IfStrEqCase{\dynkin@series}%
+ {%
+ {A}%
+ {%
+ \divide\dynkin@nodes by 2%
+ \ifodd\dynkin@rank%
+ \global\dynkin@oddtrue%
+ \advance\dynkin@nodes by 1%
+ \else%
+ \global\dynkin@oddfalse%
+ \fi%
+ }%
+ {D}%
+ {%
+ \IfStrEqCase{\dynkin@twisted@series}%
+ {%
+ {2}%
+ {%
+ \global\advance\dynkin@nodes by -1%
+ }%
+ {3}%
+ {%
+ \IfStrEq{\dynkin@string}{4}%
+ {%
+ \global\dynkin@nodes=2%
+ }%
+ {%
+ \dynkin@error@series%
+ }%
+ }%
+ }%
+ [\dynkin@error@series]%
+ }%
+ {E}%
+ {%
+ \IfStrEq{\dynkin@twisted@series}{2}%
+ {%
+ \IfStrEq{\dynkin@string}{6}%
+ {%
+ \global\dynkin@nodes=4%
+ }%
+ {%
+ \dynkin@error@series%
+ }%
+ }%
+ {%
+ \dynkin@error@series%
+ }%
+ }%
+ }%
+ \fi%
+ \xdef\dynkin@string{\repeatCharacter{\the\dynkin@nodes}{\dynkin@root@mark}}%
+}%
+
+\NewDocumentCommand\dynkin@clear@indefinite@edge@list{}%
+{%
+ \xdef\dynkin@indefinite@edge@list{}%
+}%
+%
+
+\newcount\first%
+\newcount\second%
+
+\NewDocumentCommand\dynkin@set@edge@indefinite{mm}%
+{%
+ \first=#1\relax%
+ \second=#2\relax%
+ \ifnum\the\first<\the\second%
+ \listxadd\dynkin@indefinite@edge@list{\the\first,\the\second}%
+ \else%
+ \listxadd\dynkin@indefinite@edge@list{\the\second,\the\first}%
+ \fi%
+}%
+
+\NewDocumentCommand\dynkin@set@edge@indefinite@pair{>{\SplitArgument{1}{-}}m}%
+{%
+\dynkin@set@edge@indefinite#1
+}%
+
+\newif\ifdynkin@is@indefinite@edge
+
+\NewDocumentCommand\dynkin@typeout@indefinite@edge@list{}%
+{%
+ \renewcommand*{\do}[1]{\typeout{##1}}%
+ \typeout{Indefinite edges: [}\dolistloop{\dynkin@indefinite@edge@list}\typeout{]}%
+}%
+
+
+%% \dynkin@is@edge@indefinite{<p>}{<q>} sets the global if \ifdynkin@is@indefinite@edge to true or false
+%% depending on whether there is an indefinite edge between roots <p> and <q>.
+%% The starred form uses Bourbaki ordering.
+\NewDocumentCommand\dynkin@is@edge@indefinite{smm}%
+{%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#2}{#3}%
+ }%
+ {%
+ \@fromRoot=#2%
+ \@toRoot=#3%
+ }%
+ % Next we sort the order, since edges are stored as undirected edges.
+ \global\first=\@fromRoot\relax%
+ \global\second=\@toRoot\relax%
+ \ifnum\the\second<\the\first%
+ \global\first=\@toRoot\relax%
+ \global\second=\@fromRoot\relax%
+ \fi%
+ \global\dynkin@is@indefinite@edgefalse\relax%
+ \renewcommand*{\do}[1]{%
+ \IfStrEq{##1}{\the\first,\the\second}%
+ {\global\dynkin@is@indefinite@edgetrue\listbreak}%
+ {}}%
+ \dolistloop{\dynkin@indefinite@edge@list}%
+}%
+
+
+\newcount\rootnum
+\newcount\dynkin@string@length
+\newcount\rootnumpo%
+
+% \dynkin@grok@indefinite@edges{} reads the input string <s> found when you write \dynkin{<c>}{<s>}, and
+% interprets it to say which edges are indefinite edges.
+\NewDocumentCommand\dynkin@grok@indefinite@edges{}%
+{%
+ \rootnum=1
+ \StrLen{\dynkin@string}[\temp]%
+ \dynkin@string@length=\temp
+ \foreach \i in {2,...,\the\dynkin@string@length}%
+ {%
+ \StrChar{\dynkin@string}{\i}[\c]%
+ \IfStrEq{\c}{.}%
+ {%
+ \rootnumpo=\rootnum%
+ \advance\rootnumpo by 1\relax%
+ \ifnum\the\rootnum<\the\dynkin@nodes%
+ \dynkin@set@edge@indefinite{\rootnum}{\rootnumpo}%
+ \fi%
+ }%
+ {%
+ \global\advance\rootnum by 1%
+ }%
+ }%
+}%
+
+\xdef\spacy{ }
+
+\xdef\questionMarks{}
+
+\NewDocumentCommand\dynkin@clear@label@directions{}%
+{%
+ \xdef\dynkin@label@directions{}%
+ \xdef\dynkin@label@directions@star{}%
+}%
+
+
+\NewDocumentCommand\dynkin@set@default@label@directions{}%
+{%
+% \newcount\drpo%
+ \drpo=\the\dynkin@nodes%
+ \advance\drpo by 1\relax%
+ \xdef\dynkin@label@directions{\repeatCharacter{\the\drpo}{?}}%
+ \xdef\dynkin@label@directions@star{\repeatCharacter{\the\drpo}{?}}%
+}%
+
+\newlength{\defaultpgflinewidth}%
+%
+%
+%% \@dynkin[<s>]{<X>}[<sb>]{<Y>}
+%% Draws a complete Dynkin diagram of
+%% series <X> and
+%% subseries <sb>,
+%% described by the string <Y>
+%% with TikZ options specified by <s>.
+\NewDocumentCommand\@dynkin{O{}mO{0}m}%
+{%
+ \setcounter{dynkinRootNo}{0}%
+ \setlength{\defaultpgflinewidth}{\pgflinewidth}%
+ \global\defaultpgflinewidth=\defaultpgflinewidth\relax%
+ \dynkin@clear@indefinite@edge@list%
+ \xdef\dynkin@parabolic{0}%
+ \pgfkeys{/Dynkin diagram, default, #1}%
+ \ifdynkin@is@backwards%
+ \tikzset{xscale=-1}%
+ \fi%
+ \ifdynkin@is@upsidedown%
+ \tikzset{yscale=-1}%
+ \fi%
+ \IfStrEq{\dynkin@label@list\dynkin@label@list@star}{}%
+ {%
+ }%
+ {%
+ \global\dynkin@label@the@rootstrue%
+ }%
+ \xdef\dynkin@user@series{#2}%
+ \xdef\dynkin@twisted@series{#3}%
+ \xdef\dynkin@user@string{#4}%
+ \global\dynkin@ply=\dynkin@ply@value\relax%
+ \xdef\dynkin@indefinite@edge@length{(\dynkin@edge@length*\dynkin@indefinite@edge@ratio)}\relax%
+ \xdef\dynkin@series{#2}%
+ \IfStrEq{\dynkin@diagram@name}{anonymous}%
+ {%
+ \xdef\dynkin@root@name{root\spacy}%
+ }%
+ {%
+ \xdef\dynkin@root@name{\dynkin@diagram@name\spacy root\spacy}%
+ }%
+ \dynkin@grok@series%
+ \IfSubStr{ABCDEFGHI}{\dynkin@series}{}{\dynkin@error@series}%
+ \xdef\dynkin@string{#4}
+ \IfInteger{\dynkin@string}%
+ {%
+ \dynkin@integer@rank%
+ }%
+ {%
+ % Turn Satake codes into Dynkin diagram expressions in \dynkin@string.
+ \dynkin@grok@Satake@codes%
+ }%
+ % Expand out any digits in \dynkin@string into multiples of the various root marks.
+ \expand@Dynkin@Roots@Digits%
+ % Assign to \dynkin@roots the input string \dynkin@string with all . symbols removed,
+ % so we only get the symbols representing the marks for the various roots.
+ \StrDel{\dynkin@string}{.}[\temp]%
+ \xdef\dynkin@roots{\temp}%
+ \StrLen{\dynkin@roots}[\temp]%
+ \global\dynkin@nodes=\temp\relax%
+ \dynkin@grok@indefinite@edges%
+ \dynkin@find@rank{}%
+ \dynkin@cross@out@parabolics{}%
+ \dynkin@set@default@label@directions{}%
+ \check@Dynkin@diagram{}%
+ \node[anchor=base,inner sep=0pt,outer sep=0pt] (origin) at \dynkin@current@location {};
+% \node (Dynkin current) at (origin) {};%
+ \node (Dynkin current) at ($(origin)+(0,0.5ex)$){};
+ \ifdynkin@is@twisted%
+ \csname twisted\dynkin@series dynkin\endcsname%
+ \else%
+ \ifdynkin@is@extended%
+ \csname extended\dynkin@series dynkin\endcsname%
+ \else%
+ \csname\dynkin@series dynkin\endcsname%
+ \fi%
+ \fi%
+ \dynkinRefreshRoots%
+}%
+%
+%% We know the number of nodes; lets find the rank.
+\NewDocumentCommand\dynkin@find@rank{}%
+{%
+ \global\dynkin@rank=\the\dynkin@nodes%
+ \ifdynkin@is@twisted%
+ \IfStrEqCase{\dynkin@series}%
+ {%
+ {A}%
+ {%
+ \multiply\dynkin@rank by 2%
+ \ifdynkin@odd%
+ \advance\dynkin@rank by -1%
+ \fi%
+ }%
+ {D}%
+ {%
+ \IfStrEqCase{\dynkin@twisted@series}%
+ {%
+ {2}
+ {%
+ \advance\dynkin@rank by 1%
+ }%
+ {3}
+ {%
+ \advance\dynkin@rank by 2%
+ }%
+ }%
+ }%
+ {E}%
+ {%
+ \advance\dynkin@rank by 2%
+ }%
+ }%
+ \fi%
+}%
+
+\newcount\lenny
+
+%% \dynkin@grok@series
+%% Interprets the dynkin@series, to see if it is extended, twisted, and what twisted series it is.
+\NewDocumentCommand\dynkin@grok@series{}%
+{%
+ \StrLen{\dynkin@series}[\lenny]
+ \ifnum\lenny>1%
+ \dynkin@error@series%
+ \fi
+ \edef\series{\dynkin@series}
+ \IfStrEqCase{\dynkin@twisted@series}%
+ {%
+ {0}{}%
+ {1}{ \global\dynkin@is@extendedtrue}%
+ {2}{%
+ \IfSubStr{ADE}{\dynkin@series}%
+ {%
+ \global\dynkin@is@twistedtrue%
+ }%
+ {%
+ \dynkin@error@series%
+ }%
+ }%
+ {3}{%
+ \IfStrEq{\dynkin@series}{D}%
+ {%
+ \global\dynkin@is@twistedtrue%
+ }%
+ {%
+ \dynkin@error@series%
+ }%
+ }%
+ }%
+ [\dynkin@error@series]%
+}%
+
+
+\newif\ifdynkin@Satake@diagram
+
+\NewDocumentCommand\dynkin@grok@Satake@codes{}%
+{%
+ \ifdynkin@is@extended%
+ \else%
+ \ifdynkin@is@twisted%
+ \else%
+ \global\dynkin@Satake@diagramtrue%
+ \fi%
+ \fi%
+ \IfStrEqCase{\dynkin@series}%
+ {%
+ {A}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {even}{\gdef\dynkin@string{ddd.ddd}\global\dynkin@oddfalse\global\dynkin@Satake@diagramfalse}%
+% {even}{\gdef\dynkin@string{***.***}\global\dynkin@oddfalse\global\dynkin@Satake@diagramfalse}%
+ {odd}{\gdef\dynkin@string{dddd.ddd}\global\dynkin@oddtrue\global\dynkin@Satake@diagramfalse}%
+% {odd}{\gdef\dynkin@string{****.***}\global\dynkin@oddtrue\global\dynkin@Satake@diagramfalse}%
+ {}{\gdef\dynkin@string{dd.dd}\global\dynkin@Satake@diagramfalse}%
+% {}{\gdef\dynkin@string{**.**}\global\dynkin@Satake@diagramfalse}%
+ {I}{ \gdef\dynkin@string{oo.oo}}%
+ {II}{\gdef\dynkin@string{*o*.o*}}%
+ {IIIa}{\global\dynkin@ply=2\gdef\dynkin@string{oo.o**.**o.oo}}%
+ {IIIb}{\global\dynkin@ply=2\gdef\dynkin@string{oo.ooo.oo}}%
+ {IV} {\global\dynkin@ply=2\gdef\dynkin@string{o*.*o}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {B}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {}{%
+ \global\dynkin@Satake@diagramfalse%
+ \ifdynkin@Coxeter%
+ \gdef\dynkin@string{ddd.ddd}%
+% \gdef\dynkin@string{***.***}%
+ \else%
+ \ifdynkin@is@extended%
+ \gdef\dynkin@string{ddd.ddd}%
+% \gdef\dynkin@string{***.***}%
+ \else%
+ \gdef\dynkin@string{dd.ddd}%
+% \gdef\dynkin@string{**.***}%
+ \fi%
+ \fi%
+ }%
+ {I}{\gdef\dynkin@string{oo.o*.**}}%
+ {II}{\gdef\dynkin@string{o*.**}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {C}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {}{%
+ \global\dynkin@Satake@diagramfalse%
+ \ifdynkin@Coxeter%
+ \gdef\dynkin@string{ddd.ddd}%
+% \gdef\dynkin@string{***.***}%
+ \else%
+ \gdef\dynkin@string{dd.ddd}%
+% \gdef\dynkin@string{**.***}%
+ \fi%
+ }%
+ {I}{\gdef\dynkin@string{oo.oo}}%
+ {IIa}{\gdef\dynkin@string{*o*.o*.**}}%
+ {IIb}{\gdef\dynkin@string{*o*.o*o}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {D}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {}{%
+ \global\dynkin@Satake@diagramfalse%
+ \ifdynkin@is@extended%
+ \ifnum\dynkin@ply=4%
+ \gdef\dynkin@string{dddd.d.ddddd}
+% \gdef\dynkin@string{****.*.*****}
+ \else%
+ \gdef\dynkin@string{ddd.dddd}%
+% \gdef\dynkin@string{***.****}%
+ \fi%
+ \else%
+ \ifdynkin@is@twisted%
+ \IfStrEqCase{\dynkin@twisted@series}%
+ {%
+ {2}{ \gdef\dynkin@string{dd.ddd}}%
+% {2}{ \gdef\dynkin@string{**.***}}%
+ {3}{\gdef\dynkin@string{ddd}}%
+% {3}{\gdef\dynkin@string{***}}%
+ }%
+ [\dynkin@error@series]%
+ \else%
+ \gdef\dynkin@string{dd.dddd}%
+% \gdef\dynkin@string{**.****}%
+ \fi%
+ \fi%
+ }%
+ {Ia}{\gdef\dynkin@string{oo.o*.***}}%
+ {Ib}{\global\dynkin@ply=2\gdef\dynkin@string{o.ooo}}%
+ {Ic}{\gdef\dynkin@string{o.ooo}}%
+ {II} {\gdef\dynkin@string{o*.***}}%
+ {IIIa}{\gdef\dynkin@string{*o*.o*o}}%
+ {IIIb}{\global\dynkin@ply=2\gdef\dynkin@string{*o*.o*oo}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {E}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {}%
+ {%
+ \global\dynkin@Satake@diagramfalse%
+ \IfStrEq{\dynkin@twisted@series}{2}%
+ {%
+ \gdef\dynkin@string{ddddd}%
+% \gdef\dynkin@string{*****}%
+ }%
+ {%
+ \dynkin@error@series%
+ }%
+ }%
+ {I}{ \global\dynkin@rank=6\gdef\dynkin@string{oooooo}}%
+ {II} {\global\dynkin@ply=2\gdef\dynkin@string{oooooo}}%
+ {III}{\global\dynkin@ply=2\gdef\dynkin@string{oo***o}}%
+ {IV} {\gdef\dynkin@string{o****o}}%
+ {V}{ \gdef\dynkin@string{ooooooo}}%
+ {VI} {\gdef\dynkin@string{o*oo*o*} }%
+ {VII}{\gdef\dynkin@string{o****oo}}%
+ {VIII}{\gdef\dynkin@string{oooooooo}}%
+ {IX} {\gdef\dynkin@string{o****ooo}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {F}%
+ {%
+ \global\dynkin@rank=4%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {I}{ \gdef\dynkin@string{oooo}}%
+ {II} {\gdef\dynkin@string{***o}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {G}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {I}{\gdef\dynkin@string{oo}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {H}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {}{\gdef\dynkin@string{**}}%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ {I}%
+ {%
+ \IfStrEqCase{\dynkin@string}%
+ {%
+ {}{\gdef\dynkin@string{**}}%
+ {%
+ }%
+ }%
+ [\global\dynkin@Satake@diagramfalse]%
+ }%
+ }%
+ [\dynkin@error@series]%
+ \ifdynkin@Satake@diagram%
+ \else%
+ \StrSubstitute{\dynkin@string}{d}{\dynkin@root@mark}[\temp]%
+ \xdef\dynkin@string{\temp}%
+ \fi%
+}%
+
+\NewDocumentCommand\dynkin@error@not@in@tikz{}
+{%
+ \ClassError%
+ {Dynkin diagrams}%
+ {Dynkin diagram macros called outside of tikz environment}%
+ {}%
+}%
+
+
+\NewDocumentCommand\dynkin@error@root@ordering{}
+{%
+ \ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized root ordering: ``\dynkin@ordering''
+ in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}%
+ {}%
+}%
+
+\NewDocumentCommand\dynkin@error@rank{}%
+{%
+ \ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized \dynkin@user@series\spacy series rank:
+ ``\the\dynkin@rank'' in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}%
+ {}%
+}%
+
+\NewDocumentCommand\dynkin@error@series{}%
+{%
+ \ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized series ``\dynkin@user@series''
+ in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}%
+ {}%
+}%
+
+
+\NewDocumentCommand\dynkin@error@ply{}
+{%
+ \ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized ply: ``\the\dynkin@ply''
+ in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}%
+ {}%
+}%
+
+
+%% \check@Dynkin@Roots
+%% Raises error messages for erroneous input in the list of Dynkin roots.
+\NewDocumentCommand\check@Dynkin@Roots{}%
+{%
+ \foreach \i in {1,...,\the\dynkin@nodes}%
+ {%
+ \StrChar{\dynkin@roots}{\i}[\cccc]%
+ \IfSubStr{*OXotx}{\cccc}%
+ {%
+ }%
+ {%else
+ \ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized Dynkin diagram root mark:
+ ``\cccc'' in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}%
+ {}%
+ }%
+ }%
+}%
+
+%% \check@Dynkin@diagram
+%% Raises error messages for erroneous inputs.
+\NewDocumentCommand\check@Dynkin@diagram{}%
+{%
+ \IfSubStr{1234}{\the\dynkin@ply}{}{\dynkin@error@ply}%
+ \check@Dynkin@Roots%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {Adams}{}%
+ {Bourbaki}{}%
+ {Carter}{}%
+ {Dynkin}{}%
+ {Kac}{}%
+ {TestOrder}{}%
+ }%
+ [\ClassError%
+ {Dynkin diagrams}%
+ {Unrecognized label ordering: ``\dynkin@ordering''
+ in Dynkin diagram \dynkin@user@series{\dynkin@user@string}}%
+ {}]%
+ \IfStrEqCase{\dynkin@series}%
+ {%
+ {A}{}%
+ {B}{}%
+ {C}{}%
+ {D}{}%
+ {E}%
+ {%
+ \ifnum\dynkin@nodes=5%
+ \ifnum\dynkin@rank=6%
+ \IfStrEq{\dynkin@twisted@series}{2}%
+ {%
+ }%
+ {%
+ \dynkin@error@rank%
+ }%
+ \else%
+ \dynkin@error@rank%
+ \fi%
+ \else
+ \ifnum\dynkin@rank=6%
+ \else%
+ \ifnum\dynkin@rank=7%
+ \else%
+ \ifnum\dynkin@rank=8%
+ \else%
+ \dynkin@error@rank%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ }%
+ {F}%
+ {%
+ \ifnum\dynkin@rank=4%
+ \else%
+ \dynkin@error@rank%
+ \fi%
+ }%
+ {G}%
+ {%
+ \ifnum\dynkin@rank=2%
+ \else%
+ \dynkin@error@rank%
+ \fi%
+ }%
+ {H}{}%
+ {I}{}%
+ }%
+ [\dynkin@error@series]%
+}%
+
+
+%% A slight headache: all of the routines that draw Dynkin diagrams are written
+%% in Bourbaki ordering. We store the roots in the current ordering.
+%% So when we draw edges, we need to convert from the Bourbaki ordering each time.
+%% We store the conversions here.
+\newcount\RootNumber
+\newcount\@fromRoot
+\newcount\@toRoot
+
+%% \swapRootIfInLastTwoRoots{<r>}
+%% If the input root <r> is one of the last two roots, then put the other in \RootNumber, otherwise
+%% let \RootNumber be <r>.
+\NewDocumentCommand\swapRootIfInLastTwoRoots{m}%
+{%
+ \ifnum\dynkin@rank>1%
+ \newcount\drmo\relax%
+ \drmo=\dynkin@rank\relax%
+ \advance\drmo by -1\relax%
+ \ifnum\dynkin@rank=#1%
+ \global\RootNumber=\the\drmo\relax%
+ \else%
+ \ifnum\drmo=#1%
+ \global\RootNumber=\the\dynkin@rank\relax%
+ \else%
+ \global\RootNumber=#1\relax%
+ \fi%
+ \fi%
+ \else%
+ \global\RootNumber=#1\relax%
+ \fi%
+}%
+
+%% \convertRootNumber{<n>}
+%% Converts <n> from Bourbaki ordering to the current ordering, storing the result in a count called \RootNumber.
+\NewDocumentCommand\convertRootNumber{m}%
+{%
+ \IfStrEq{#1}{0}%
+ {%
+ \global\RootNumber=0%
+ }%
+ {%
+ \IfStrEqCase{\dynkin@series}%
+ {%
+ {A}%
+ {%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {TestOrder}%
+ {%
+ \global\RootNumber=#1
+ \global\advance\RootNumber by 1
+ \ifnum\RootNumber>\the\dynkin@rank%
+ \global\RootNumber=1%
+ \fi%
+ }%
+ }%
+ [\global\RootNumber=#1]%
+ }%
+ {D}%
+ {%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {Adams}{\swapRootIfInLastTwoRoots{#1}}%
+ {Dynkin}{\swapRootIfInLastTwoRoots{#1}}%
+ {Kac}{%
+ \ifdynkin@is@twisted
+ \global\RootNumber=#1
+ \else
+ \ifdynkin@is@extended
+ \global\RootNumber=#1
+ \else
+ \swapRootIfInLastTwoRoots{#1}
+ \fi
+ \fi}%
+ }%
+ [\global\RootNumber=#1]%
+ }%
+ {E}%
+ {%
+ \ifdynkin@is@twisted%
+ \global\RootNumber=#1%
+ \else%
+ \ifnum\dynkin@rank=6%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {Adams}{\global\RootNumber=\stringCharacterInPosition{152436}{#1}}%
+ {Carter}{\global\RootNumber=\stringCharacterInPosition{142356}{#1}}%
+ {Dynkin}{\global\RootNumber=\stringCharacterInPosition{162345}{#1}}%
+ {Kac}{\global\RootNumber=\stringCharacterInPosition{162345}{#1}}%
+ }%
+ [\global\RootNumber=#1]%
+ \else%
+ \ifnum\dynkin@rank=7%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {Adams}{\global\RootNumber=\stringCharacterInPosition{6354217}{#1}}%
+ {Carter}{\global\RootNumber=\stringCharacterInPosition{7564321}{#1}}%
+ {Dynkin}{\global\RootNumber=\stringCharacterInPosition{1723456}{#1}}%
+ {Kac}{\global\RootNumber=\stringCharacterInPosition{1723456}{#1}}%
+ }%
+ [\global\RootNumber=#1]%
+ \else%
+ \ifnum\dynkin@rank=8%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {Adams}{\global\RootNumber=\stringCharacterInPosition{13245678}{#1}}%
+ {Carter}{\global\RootNumber=\stringCharacterInPosition{86754321}{#1}}%
+ {Dynkin}{\global\RootNumber=\stringCharacterInPosition{18234567}{#1}}%
+ {Kac}{\global\RootNumber=\stringCharacterInPosition{78654321}{#1}}%
+ }%
+ [\global\RootNumber=#1]%
+ \else%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ }%
+ {F}%
+ {%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {Adams}{\global\RootNumber=\stringCharacterInPosition{4321}{#1}}%
+ }%
+ [\global\RootNumber=#1]%
+ }%
+ {G}%
+ {%
+ \IfStrEqCase{\dynkin@ordering}%
+ {%
+ {Carter}{\global\RootNumber=\stringCharacterInPosition{21}{#1}}%
+ {Dynkin}{\global\RootNumber=\stringCharacterInPosition{21}{#1}}%
+ }%
+ [\global\RootNumber=#1]%
+ }%
+ }%
+ [\global\RootNumber=#1]%
+ }%
+}%
+
+%% \convertRootPair{<p>}{<q>}
+%% Stores conversions in \@fromRoot and \@toRoot.
+\NewDocumentCommand\convertRootPair{mm}
+{%
+ \convertRootNumber{#1}%
+ \global\@fromRoot=\RootNumber%
+ \convertRootNumber{#2}%
+ \global\@toRoot=\RootNumber%
+}%
+
+\ExplSyntaxOn
+\NewDocumentCommand\moduloInt{mm}{\int_mod:nn{#1}{#2}}
+\ExplSyntaxOff
+
+%% \testbit{<n>}{<b>}{<f>}{<g>}
+%% If bit number <b> of <n> is 1 then expand <f> else expand <g>.
+\NewDocumentCommand\testbit{mmmm}%
+{%
+ \newcount\x\relax%
+ \x=#1\relax%
+ \newcount\whichbit\relax%
+ \whichbit=#2\relax%
+ \ifnum\whichbit>0%
+ \foreach \i in {1,...,#2}%
+ {%
+ \global\divide \x by 2%
+ }%
+ \fi%
+ \xdef\temp{\moduloInt{\the\x}{2}}%
+ \x=\temp\relax%
+ \ifnum\the\x=1 #3\else #4\fi%
+}%
+
+\NewDocumentCommand\dynkin@put@cross{m}%
+{%
+ \newcount\dynkin@where%
+ \dynkin@where=#1%
+ \StrMid{\dynkin@roots}{1}{#1}[\dynkin@start]%
+ \advance\dynkin@where by 1%
+ \StrMid{\dynkin@roots}{\the\dynkin@where}{\the\dynkin@nodes}[\dynkin@end]%
+ \xdef\dynkin@roots{\dynkin@start x\dynkin@end}%
+}%
+
+\NewDocumentCommand\dynkin@cross@out@parabolics{}%
+{%
+ \IfInteger{\dynkin@parabolic}%
+ {%
+ \IfStrEq{\dynkin@parabolic}{0}%
+ {%
+ }%
+ {%
+ \newcount\drmo\relax%
+ \drmo=\the\dynkin@nodes\relax%
+ \advance\drmo by -1\relax%
+ \foreach \b in {0,...,\the\drmo}%
+ {%
+ \testbit{\dynkin@parabolic}{\b}{\dynkin@put@cross{\b}}{}%
+ }%
+ }%
+ }%
+}%
+
+\NewDocumentCommand\dynkinMoveToRoot{sm}%
+{%
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#2}%
+ }%
+ {%
+ \global\RootNumber=#2
+ }%
+ \node (Dynkin current) at (\dynkin@root@name \the\RootNumber){};%
+}%
+
+%% \dynkinPlaceRootHere{<n>}{<L>}{<L*>}
+%% \dynkinPlaceRootHere*{<n>}{<L>}{<L*>}
+%% Tell TikZ to place node <n> for a root of a Dynkin diagram at the current
+%% cursor location. Draws nothing.
+%% <L>=label positioning: above, below, left, right, above left, above right, below left, below right.
+%% <L*> similarly, the alternate label position.
+%% Starred form converts <n> from Bourbaki ordering to default ordering.
+\NewDocumentCommand\dynkinPlaceRootHere{smmm}%
+{%
+\xdef\yyyy{#2}
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootNumber{#2}%
+ }%
+ {%
+ \global\RootNumber=#2
+ }%
+ \node (\dynkin@root@name \the\RootNumber) at (Dynkin current) {};%
+ \dynkin@put@direction{\the\RootNumber}{#3}%
+ \dynkin@put@direction*{\the\RootNumber}{#4}%
+}%
+
+
+\newif\ifdynkin@hex@grid
+\dynkin@hex@gridtrue
+
+%% \dynkinPlaceRootRelativeTo{<p>}{<q>}{<d>}{<L>}{<L*>}
+%% \dynkinPlaceRootRelativeTo*{<p>}{<q>}{<d>}{<L>}{<L*>}
+%% Tell TikZ to place node <p> for a root of a Dynkin diagram at a location
+%% in direction <d> from root <q>. Draws nothing.
+%% <L> is the label position: above, below, left, right, above left, above right, below left, below right.
+%% <L*> is the position of the alternate label similarly.
+%% <d> is the direction from <q>:
+%% west,east,south,north,
+%% northeast,northwest,southeast,southwest,
+%% southfold,northfold,
+%% southeastfold,southwestfold,northeastfold,northwestfold.
+%% Starred form is in Bourbaki root ordering; otherwise default ordering.
+\NewDocumentCommand\dynkinPlaceRootRelativeTo{smmmmm}%
+{%
+\xdef\ssss{#2}
+ \IfBooleanTF{#1}%
+ {%
+ \convertRootPair{#3}{#2}%
+ }%
+ {%
+ \global\@fromRoot=#3%
+ \global\@toRoot=#2%
+ }%
+ \dynkin@is@edge@indefinite{\@fromRoot}{\@toRoot}%
+ \ifdynkin@is@indefinite@edge%
+ \xdef\dynkin@distance{\dynkin@indefinite@edge@length}
+ \else
+ \xdef\dynkin@distance{\dynkin@edge@length}
+ \fi
+ \ifdynkin@hex@grid
+ \IfStrEqCase{#4}%
+ {%
+ {west}{\xdef\xd{-\dynkin@distance}\xdef\yd{0}}%
+ {east}{\xdef\xd{\dynkin@distance}\xdef\yd{0}}%
+ {south}{\xdef\xd{0}\xdef\yd{-\dynkin@distance}}%
+ {north}{\xdef\xd{0}\xdef\yd{\dynkin@distance}}%
+ {southeast}{\xdef\xd{cos(-60)*\dynkin@distance}\xdef\yd{sin(-60)*\dynkin@distance}}%
+ {southwest}{\xdef\xd{cos(240)*\dynkin@distance}\xdef\yd{sin(240)*\dynkin@distance}}%
+ {northeast}{\xdef\xd{cos(60)*\dynkin@distance}\xdef\yd{sin(60)*\dynkin@distance}}%
+ {northwest}{\xdef\xd{cos(120)*\dynkin@distance}\xdef\yd{sin(120)*\dynkin@distance}}%
+ {southeastfold}{\xdef\xd{\dynkin@fold@radius}\xdef\yd{-\dynkin@fold@radius}}%
+ {southwestfold}{\xdef\xd{-\dynkin@fold@radius}\xdef\yd{-\dynkin@fold@radius}}%
+ {northeastfold}{\xdef\xd{\dynkin@fold@radius}\xdef\yd{\dynkin@fold@radius}}%
+ {northwestfold}{\xdef\xd{-\dynkin@fold@radius}\xdef\yd{\dynkin@fold@radius}}%
+ {northfold}{\xdef\xd{0}\xdef\yd{2*\dynkin@fold@radius}}%
+ {southfold}{\xdef\xd{0}\xdef\yd{-2*\dynkin@fold@radius}}%
+ }%
+ \else%
+ \IfStrEqCase{#4}%
+ {%
+ {west}{\xdef\xd{-\dynkin@distance}\xdef\yd{0}}%
+ {east}{\xdef\xd{\dynkin@distance}\xdef\yd{0}}%
+ {south}{\xdef\xd{0}\xdef\yd{-\dynkin@distance}}%
+ {north}{\xdef\xd{0}\xdef\yd{\dynkin@distance}}%
+ {southeast}{\xdef\xd{cos(-45)*\dynkin@distance}\xdef\yd{sin(-45)*\dynkin@distance}}%
+ {southwest}{\xdef\xd{cos(225)*\dynkin@distance}\xdef\yd{sin(225)*\dynkin@distance}}%
+ {northeast}{\xdef\xd{cos(45)*\dynkin@distance}\xdef\yd{sin(45)*\dynkin@distance}}%
+ {northwest}{\xdef\xd{cos(135)*\dynkin@distance}\xdef\yd{sin(135)*\dynkin@distance}}%
+ {southeastfold}{\xdef\xd{\dynkin@fold@radius}\xdef\yd{-\dynkin@fold@radius}}%
+ {southwestfold}{\xdef\xd{-\dynkin@fold@radius}\xdef\yd{-\dynkin@fold@radius}}%
+ {northeastfold}{\xdef\xd{\dynkin@fold@radius}\xdef\yd{\dynkin@fold@radius}}%
+ {northwestfold}{\xdef\xd{-\dynkin@fold@radius}\xdef\yd{\dynkin@fold@radius}}%
+ {northfold}{\xdef\xd{0}\xdef\yd{2*\dynkin@fold@radius}}%
+ {southfold}{\xdef\xd{0}\xdef\yd{-2*\dynkin@fold@radius}}%
+ }%
+ \fi
+ \node (Dynkin current) at ($(\dynkin@root@name \the\@fromRoot)+({\xd},{\yd})$){};
+ \dynkinPlaceRootHere{\the\@toRoot}{#5}{#6}%
+}%
+
+% Jump the current location by a certain multiple of the fold radius.
+\NewDocumentCommand\dynkin@jump{m}%
+{%
+\xdef\yj{#1*\dynkin@fold@radius}%
+\node (Dynkin current) at ($(Dynkin current)+(0,{\yj})$){};%
+}%
+
+% Jump the current location by a certain multiple of the edge radius multiplied by sin(60).
+\NewDocumentCommand\dynkin@hop{m}%
+{%
+\xdef\yjj{#1*\dynkin@edge@length*sin(60)}%
+\node (Dynkin current) at ($(Dynkin current)+(0,{\yjj})$){};%
+}%
+
+%% \dynkinEast
+%% Moves the TikZ cursor one edge to the right.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinEast{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at ($(Dynkin current)+({\distance},0)$) {};%
+}%
+
+%% \dynkinWest
+%% Moves the TikZ cursor one edge to the left.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinWest{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at ($(Dynkin current)+({-\distance},0)$) {};%
+}%
+
+%% \dynkinNorth
+%% Moves the TikZ cursor one edge up.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinNorth{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at ($(Dynkin current)+(0,{\distance})$) {};%
+}%
+
+%% \dynkinSouth
+%% Moves the TikZ cursor one edge to the left.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinSouth{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at ($(Dynkin current)+(0,{-\distance})$) {};%
+}%
+
+%% \dynkinNorthEast
+%% Moves the TikZ cursor one edge to the north east.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinNorthEast{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at
+ ($(Dynkin current)+
+ ({cos(60)*\distance},{sin(60)*\distance})$) {};%
+}%
+
+%% \dynkinSouthEast
+%% Moves the TikZ cursor one edge to the south east.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinSouthEast{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at
+ ($(Dynkin current)+
+ ({cos(-60)*\distance},{sin(-60)*\distance})$) {};%
+}%
+
+%% \dynkinNorthWest
+%% Moves the TikZ cursor one edge to the north west.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinNorthWest{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at
+ ($(Dynkin current)+
+ ({cos(120)*\distance},{sin(120)*\distance})$) {};%
+}%
+
+%% \dynkinSouthWest
+%% Moves the TikZ cursor one edge to the south west.
+%% Starred form for an indefinite edge.
+\NewDocumentCommand\dynkinSouthWest{s}%
+{%
+ \xdef\distance{\IfBooleanTF{#1}{\dynkin@indefinite@edge@length}{\dynkin@edge@length}}
+ \node (Dynkin current) at
+ ($(Dynkin current)+
+ ({cos(240)*\distance},{sin(240)*\distance})$) {};%
+}%
+
+
+%% \dynkinSouthEastFold
+%% Moves the TikZ cursor one edge to the south east in the middle of a fold.
+\NewDocumentCommand\dynkinSouthEastFold{}%
+{%
+ \node (Dynkin current) at ($(Dynkin current)+({\dynkin@fold@radius},{-\dynkin@fold@radius})$) {};%
+}%
+
+%% \dynkinSouthWestFold
+%% Moves the TikZ cursor one edge to the south west in the middle of a fold.
+\NewDocumentCommand\dynkinSouthWestFold{}%
+{%
+ \node (Dynkin current) at ($(Dynkin current)+({-\dynkin@fold@radius},{-\dynkin@fold@radius})$) {};%
+}%
+
+%% \dynkinSouthFold
+%% Moves the TikZ cursor one edge to the south in the middle of a fold.
+\NewDocumentCommand\dynkinSouthFold{}%
+{%
+ \node (Dynkin current) at ($(Dynkin current)+(0,{-2*\dynkin@fold@radius})$) {};%
+}%
+
+\NewDocumentCommand\find@mark@of@root{m}%
+{%
+ \StrChar{\dynkin@roots}{#1}[\my@root@marker]%
+ \my@root@marker
+}%
+
+\NewDocumentCommand\dynkin@draw@all@roots{}%
+{%
+ \foreach \b in {1,...,\the\dynkin@nodes}%
+ {%
+ \StrChar{\dynkin@roots}{\b}[\c]%
+ \dynkinRootMark{\c}{\b}%
+ }%
+ \ifdynkin@is@extended%
+ \dynkinRootMark*{\dynkin@affine@root@mark}{0}%
+ \else%
+ \ifdynkin@is@twisted%
+ \dynkinRootMark*{\dynkin@affine@root@mark}{0}%
+ \fi%
+ \fi%
+}%
+
+%% \dynkin@fold@arrow@if@oo{<p>}{<q>}
+%% Inputs are roots (in Bourbaki ordering).
+%% If we are working on a Satake diagram, and both roots are
+%% marked with hollow circles o, then draws a fold arrow between them.
+\NewDocumentCommand\dynkin@fold@arrow@if@oo{mm}%
+{%
+ \convertRootPair{#1}{#2}%
+ \ifdynkin@Satake@diagram%
+ \StrChar{\dynkin@roots}{\the\@fromRoot}[\my@root@marker]%
+ \IfStrEq{\my@root@marker}{o}%
+ {%
+ \StrChar{\dynkin@roots}{\the\@toRoot}[\my@other@root@marker]%
+ \IfStrEq{\my@other@root@marker}{o}%
+ {%
+ \dynkinFold{\the\@fromRoot}{\the\@toRoot}%
+ }%
+ {}%
+ }{}%
+ \else%
+ \dynkinFold{\the\@fromRoot}{\the\@toRoot}%
+ \fi%
+}%
+
+\newcount\pipebmo
+\newcount\pipefpo
+\newcount\pipe@end
+\newcount\start@pipe
+
+
+%% \dynkin@pipe{<f>}{<t>}{<D>}{<L>}{<L*>}
+%% Layout the roots (as TikZ nodes) <f>, <f>+1, \dots, <t> in the Bourbaki ordering, in a straight line,
+%% starting at the current position (Dynkin current), moving in the direction <D>=east, west, north, south, with labels placed according to <L>=left,right,above,below.
+%% Assumes that the root <f> is already created as a node in TikZ, but the others are not.
+\NewDocumentCommand\dynkin@pipe{mmmmm}%
+{%
+ \start@pipe=#1
+ \pipe@end=#2
+ \ifnum\start@pipe<\the\pipe@end%
+ \global\pipebmo=\the\start@pipe
+ \global\pipefpo=\the\start@pipe
+ \global\advance\pipefpo by 1
+ \foreach \bpipe in {\the\pipefpo,...,\the\pipe@end}%
+ {%
+ \dynkinPlaceRootRelativeTo*{\bpipe}{\the\pipebmo}{#3}{#4}{#5}%
+ \dynkinEdge*{SingleEdge}{\bpipe}{\the\pipebmo}%
+ \global\advance\pipebmo by 1%
+ }%
+ \fi%
+}%
+
+%% \dynkin@fold{<f>}{<t>}
+%% Layout the roots (as TikZ nodes) <f>, <f>+1, \dots, <t> in the Bourbaki ordering, in a folded arrangement,
+%% moving first east, then down, then west, starting at the current position (Dynkin current).
+%% Assumes that the root <f> is already created as a node in TikZ, but the others are not.
+\NewDocumentCommand\dynkin@fold{mm}%
+{%
+ \newcount\h%
+ \h=#1%
+ \advance\h by #2%
+ \advance\h by -1%
+ \divide\h by 2%
+ \dynkin@pipe{#1}{\the\h}{east}{above}{below right}
+ \newcount\hpo
+ \hpo=\the\h
+ \advance\hpo by 1
+ \newcount\afterfold
+ \global\afterfold=\the\hpo
+ \newcount\nrts
+ \nrts=#2
+ \advance\nrts by 1
+ \advance\nrts by -#1
+ \ifodd\nrts%
+ \global\advance\afterfold by 1
+ \dynkinPlaceRootRelativeTo*{\the\hpo}{\the\h}{southeastfold}{right}{left}
+ \dynkinEdge*{RightDownArc}{\the\h}{\the\hpo}%
+ \dynkinPlaceRootRelativeTo*{\the\afterfold}{\the\hpo}{southwestfold}{below}{above right}
+ \dynkinEdge*{RightUpArc}{\the\afterfold}{\the\hpo}%
+ \else
+ \dynkinPlaceRootRelativeTo*{\the\afterfold}{\the\h}{southfold}{below}{above right}
+ \dynkinEdge*{SemiCircle}{\the\h}{\the\afterfold}%
+ \fi
+ \dynkin@pipe{\the\afterfold}{#2}{west}{below}{above right}
+ \ifdynkin@arrows%
+ \newcount\countdown%
+ \countdown=#2%
+ \foreach \b in {#1,...,\the\h}%
+ {%
+ \dynkin@fold@arrow@if@oo{\b}{\the\countdown}%
+ \global\advance\countdown by -1%
+ }%
+ \fi%
+}%
+
+%% \Adynkin
+%% Draws an A series Dynkin diagram.
+\NewDocumentCommand\Adynkin{}%
+{%
+ \ifnum\dynkin@rank=1%
+ \global\dynkin@ply=1\relax%
+ \fi%
+% % Create the roots.
+ \ifnum\dynkin@ply>1%
+ \ifnum\dynkin@ply=2%
+ \dynkin@jump{1}%
+ \fi%
+ \dynkinPlaceRootHere*{1}{above}{below right}%
+ \dynkin@fold{1}{\the\dynkin@rank}%
+ \else%
+ \dynkinPlaceRootHere*{1}{below}{above}%
+ \ifnum\dynkin@rank>1%
+ \dynkin@pipe{1}{\the\dynkin@rank}{east}{below}{above}%
+ \fi%
+ \fi%
+}%
+
+%% \Bdynkin
+%% Draw a B series Dynkin diagram.
+\NewDocumentCommand\Bdynkin{}%
+{%
+ \ifnum\dynkin@rank<2
+ \Adynkin
+ \else
+ \newcount\drmo
+ \drmo=\the\dynkin@rank
+ \advance\drmo by -1
+ \ifdynkin@Coxeter
+ \Adynkin
+ \convertRootPair{\the\drmo}{\the\dynkin@rank}
+ \node[/Dynkin diagram/text style,above]
+ at ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$)
+ {\(4\)};
+ \else
+ % Create the roots.
+ \ifnum\dynkin@ply>1%
+ \ifnum\dynkin@rank>3%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{1}{above}{below right}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{above}{below right}%
+ \dynkin@fold{2}{\the\drmo}%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@rank}{\the\drmo}{west}{below}{above right}%
+ \dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin@rank}%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \else%
+ \ifnum\dynkin@rank=2%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{1}{above}{below right}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{southfold}{below}{above right}%
+ \dynkinEdge*{DoubleDownRightSemiCircle}{1}{2}%
+ \else%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{1}{above}{below right}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{southeastfold}{right}{left}%
+ \dynkinPlaceRootRelativeTo*{3}{2}{southwestfold}{below}{above right}%
+ \dynkinEdge*{RightDownArc}{1}{2}%
+ \dynkinEdge*{DoubleDownLeftArc}{2}{3}%
+ \fi%
+ \fi%
+ \else%
+ \dynkinPlaceRootHere*{1}{below}{above}
+ \dynkin@pipe{1}{\the\drmo}{east}{below}{above}
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@rank}{\the\drmo}{east}{below}{above}
+ \dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin@rank}%
+ \fi%
+ \ifdynkin@arrows%
+ \ifnum\dynkin@ply>1%
+ \dynkinLeftFold*{1}{\the\dynkin@rank}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+}
+
+%% \Cdynkin
+%% Draws a C series Dynkin diagram.
+\newcommand*{\Cdynkin}
+{
+ \ifdynkin@reverse@arrows%
+ \global\dynkin@reverse@arrowsfalse%
+ \else%
+ \global\dynkin@reverse@arrowstrue%
+ \fi%
+ \Bdynkin%
+ \ifdynkin@reverse@arrows%
+ \global\dynkin@reverse@arrowsfalse%
+ \else%
+ \global\dynkin@reverse@arrowstrue%
+ \fi%
+}
+
+%% \Ddynkin@roots
+%% Tell TikZ where to place the @roots for a D series Dynkin diagram. Draws nothing.
+\newcommand*{\Ddynkin@roots}
+{
+ % Create the roots.
+ \ifdynkin@is@extended%
+ \ifnum\dynkin@ply>1%
+ \ifnum\dynkin@rank=4%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{left}{right}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{below right}{above right}%
+ \fi%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}{above left}%
+ \else%
+ \ifdynkin@left@fold%
+ \ifnum\dynkin@rank=4%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{left}{right}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{below right}{above right}%
+ \fi%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}{above left}%
+ \else%
+ \ifnum\dynkin@rank=4%
+ \ifdynkin@right@fold%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeast}{left}{right}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeast}{below}{above}%
+ \fi%
+ \else%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeast}{below right}{above right}%
+ \fi%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwest}{left}{above left}%
+ \fi%
+ \fi%
+ \dynkinMoveToRoot*{2}%
+ \else
+ \dynkinPlaceRootHere*{1}{below}{above}
+ \ifnum\dynkin@rank=4%
+ \ifdynkin@right@fold%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}%
+ \else%
+ \ifnum\dynkin@ply>1%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below left}{above left}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below left}{above left}%
+ \fi%
+ \fi%
+ \else%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}%
+ \fi%
+ \fi
+ \newcount\rmo
+ \rmo=\dynkin@rank
+ \advance \rmo by -1
+ \newcount\rmt
+ \rmt=\rmo
+ \advance\rmt by -1
+ \newcount\rmth
+ \rmth=\rmt
+ \advance\rmth by -1
+ \ifnum\dynkin@rank>2
+ \ifnum\dynkin@rank>5%
+ \dynkinPlaceRootRelativeTo*{3}{2}{east}{below}{above}%
+ \else%
+ \ifnum\dynkin@ply>1%
+ \dynkinPlaceRootRelativeTo*{3}{2}{east}{below left}{above left}%
+ \else%
+ \ifnum\dynkin@rank=5%
+ \ifdynkin@right@fold%
+ \dynkinPlaceRootRelativeTo*{3}{2}{east}{below left}{above left}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{3}{2}{east}{below left}{above left}%
+ \fi%
+ \else%
+ \dynkinPlaceRootRelativeTo*{3}{2}{east}{below right}{above left}%
+ \fi%
+ \fi%
+ \fi%
+ \ifnum\rmth>3%
+ \dynkin@pipe{3}{\the\rmth}{east}{below}{above}%
+ \fi%
+ \ifnum\rmt>3%
+ \ifnum\dynkin@ply>1%
+ \dynkinPlaceRootRelativeTo*{\rmt}{\rmth}{east}{below left}{above left}%
+ \else%
+ \ifdynkin@right@fold%
+ \dynkinPlaceRootRelativeTo*{\rmt}{\rmth}{east}{below left}{above left}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{\rmt}{\rmth}{east}{below left}{above left}%
+ \fi%
+ \fi%
+ \dynkinEdge*{SingleEdge}{\rmt}{\rmth}%
+ \fi%
+ \ifnum\dynkin@ply=1%
+ \ifdynkin@right@fold%
+ \dynkinPlaceRootRelativeTo*{\the\rmo}{\the\rmt}{northeastfold}{right}{above right}%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@rank}{\the\rmt}{southeastfold}{right}{above right}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{\the\rmo}{\the\rmt}{northeast}{right}{above right}%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@rank}{\the\rmt}{southeast}{right}{above right}%
+ \fi%
+ \else%
+ \dynkinPlaceRootRelativeTo*{\the\rmo}{\the\rmt}{northeastfold}{right}{above right}%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@rank}{\the\rmt}{southeastfold}{right}{above right}%
+ \fi%
+ \fi%
+}%
+
+%% \Ddynkin@edges
+%% Draws edges on a D series Dynkin diagram.
+\NewDocumentCommand\Ddynkin@edges{}%
+{%
+ % Draw the edges.
+ \newcount\rmo
+ \rmo=\dynkin@rank
+ \advance \rmo by -1
+ \newcount\rmt
+ \rmt=\rmo
+ \advance\rmt by -1
+ \newcount\rmtr
+ \rmtr=\rmt
+ \advance\rmtr by -1
+ \ifnum\dynkin@ply>1%
+ \ifdynkin@is@extended%
+ \dynkinEdge*{RightUpArc}{1}{2}%
+ \else%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \fi%
+ \ifnum\dynkin@rank>4%
+ \dynkinEdge*{SingleEdge}{2}{3}%
+ \fi%
+ \dynkinEdge*{LeftDownArc}{\the\rmo}{\the\rmt}%
+ \dynkinEdge*{LeftUpArc}{\the\dynkin@rank}{\the\rmt}%
+ \ifdynkin@arrows%
+ \dynkinRightFold*{\the\rmo}{\the\dynkin@rank}%
+ \ifdynkin@is@extended%
+ \dynkinLeftFold*{0}{1}%
+ \fi%
+ \fi%
+ \else%
+ \ifnum\dynkin@rank=4%
+ \else%
+ \dynkinEdge*{SingleEdge}{2}{3}%
+ \fi%
+ \ifdynkin@is@extended%
+ \ifdynkin@left@fold%
+ \dynkinEdge*{RightUpArc}{1}{2}%
+ \ifdynkin@arrows%
+ \ifdynkin@is@extended%
+ \dynkinLeftFold*{0}{1}%
+ \fi%
+ \fi%
+ \else%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \fi%
+ \else%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \fi%
+ \ifdynkin@right@fold%
+ \dynkinEdge*{LeftDownArc}{\the\rmo}{\the\rmt}%
+ \dynkinEdge*{LeftUpArc}{\the\dynkin@rank}{\the\rmt}%
+ \dynkinRightFold*{\the\rmo}{\the\dynkin@rank}%
+ \else%
+ \dynkinEdge*{SingleEdge}{\the\rmt}{\the\rmo}%
+ \dynkinEdge*{SingleEdge}{\the\rmt}{\the\dynkin@rank}%
+ \fi%
+ \fi%
+}%
+
+\def\centerarc[#1](#2)(#3:#4:#5);%
+%Syntax: [draw options] (center) (initial angle:final angle:radius)
+ {
+ \draw[#1]([shift=(#3:#5)]#2) arc (#3:#4:#5);
+ }
+
+%% \DthreePly
+%% Draws a D series Dynkin diagram of rank 4, folded over a G2.
+\NewDocumentCommand\DthreePly{}%
+{%
+\ifdynkin@right@fold%
+ \dynkinPlaceRootHere*{1}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{east}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{2}{3}{north}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{south}{below}{above right}%
+ \edef\old@fold@radius{\dynkin@fold@radius}%
+ \xdef\dynkin@fold@radius{\dynkin@edge@length}%
+ \dynkinEdge*{SingleEdge}{1}{3}%
+ \dynkinEdge*{LeftDownArc}{2}{1}%
+ \dynkinEdge*{LeftUpArc}{4}{1}%
+ \xdef\dynkin@fold@radius{\old@fold@radius}%
+ \ifdynkin@arrows%
+ \dynkin@fold@arrow@if@oo{2}{3}%
+ \dynkin@fold@arrow@if@oo{3}{4}%
+ \fi%
+\else%
+ \dynkinPlaceRootHere*{1}{left}{above right}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below left}{above left}%
+ \dynkinPlaceRootRelativeTo*{3}{2}{northeast}{above right}{below}%
+ \dynkinPlaceRootRelativeTo*{4}{2}{southeast}{below right}{left}%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \dynkinEdge*{SingleEdge}{2}{3}%
+ \dynkinEdge*{SingleEdge}{2}{4}%
+ \begin{scope}[on background layer]%
+ \centerarc[/Dynkin diagram/fold style](\dynkin@root@name 2)(-60:60:\dynkin@edge@length);
+ \centerarc[/Dynkin diagram/fold style](\dynkin@root@name 2)(60:180:\dynkin@edge@length);
+ \centerarc[/Dynkin diagram/fold style](\dynkin@root@name 2)(180:300:\dynkin@edge@length);
+ \end{scope}%
+\fi%
+}%
+
+%% \Ddynkin
+%% Draws a D series Dynkin diagram.
+\NewDocumentCommand\Ddynkin{}%
+{%
+ \ifnum\dynkin@rank>3%
+ \ifnum\dynkin@rank=4%
+ \ifnum\dynkin@ply=3%
+ \DthreePly%
+ \else%
+ \Ddynkin@roots%
+ \Ddynkin@edges%
+ \fi%
+ \else%
+ \Ddynkin@roots%
+ \Ddynkin@edges%
+ \fi%
+ \else%
+ \gdef\dynkin@series{A}%
+ \Adynkin%
+ \ifnum\dynkin@ply>1%
+ \ifdynkin@arrows%
+ \ifnum\dynkin@rank=1%
+ \else%
+ \dynkinLeftFold*{1}{\the\dynkin@rank}%
+ \fi%
+ \fi%
+ \fi%
+ \gdef\dynkin@series{D}%
+ \fi%
+}%
+
+%% \Edynkin@unfolded
+%% Draws an E series Dynkin diagram not folded.
+\newcommand*{\Edynkin@unfolded}%
+{
+ % Create the @roots.
+ \dynkinPlaceRootHere*{1}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{east}{below}{above right}%
+ \ifdynkin@is@extended
+ \ifnum\dynkin@rank=6
+ \dynkinPlaceRootRelativeTo*{2}{4}{north}{right}{above right}%
+ \else
+ \dynkinPlaceRootRelativeTo*{2}{4}{north}{right}{above}%
+ \fi
+ \else
+ \dynkinPlaceRootRelativeTo*{2}{4}{north}{right}{above}%
+ \fi
+ \newcount\bmo\relax%
+ \bmo=4\relax%
+ \foreach \b in {5,...,\dynkin@rank}%
+ {%
+ \dynkinPlaceRootRelativeTo*{\b}{\the\bmo}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{\the\bmo}{\b}%
+ \global\advance\bmo by 1%
+ }%
+% % Draw the remaining edges.
+ \dynkinEdge*{SingleEdge}{1}{3}
+ \dynkinEdge*{SingleEdge}{3}{4}
+ \dynkinEdge*{SingleEdge}{4}{2}
+ \ifdynkin@is@extended%
+ \ifnum\dynkin@rank=6%
+ \dynkinPlaceRootRelativeTo*{0}{2}{north}{right}{above}%
+ \dynkinEdge*{SingleEdge}{0}{2}%
+ \else%
+ \ifnum\dynkin@rank=7%
+ \dynkinPlaceRootRelativeTo*{0}{1}{west}{below}{above}%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{0}{8}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{0}{8}%
+ \fi%
+ \fi%
+ \fi%
+}%
+
+
+%% \Edynkin@folded
+%% Draws a folded E6, affine E6 or affine E7 Dynkin diagram.
+\NewDocumentCommand\Edynkin@folded{}%
+{%
+ \ifnum\dynkin@rank=6%
+ \ifnum\dynkin@ply=2\ESixTwoPly\else\ESixThreePly\fi%
+ \else%
+ \extendedESevenFolded%
+ \fi%
+}%
+
+\NewDocumentCommand\ESixTwoPly{}%
+{%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{1}{above}{below right}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{east}{above}{below right}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{southeastfold}{below right}{above right}%
+ \dynkinPlaceRootRelativeTo*{5}{4}{southwestfold}{below}{above right}%
+ \dynkinPlaceRootRelativeTo*{6}{5}{west}{below}{above right}%
+ \ifdynkin@is@extended%
+ \dynkinPlaceRootRelativeTo*{2}{4}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{0}{2}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{0}{2}%
+ \else%
+ \dynkinPlaceRootRelativeTo*{2}{4}{east}{below}{above}%
+ \fi%
+ \dynkinEdge*{SingleEdge}{1}{3}%
+ \dynkinEdge*{SingleEdge}{2}{4}%
+ \dynkinEdge*{SingleEdge}{5}{6}%
+ \dynkinEdge*{RightDownArc}{3}{4}%
+ \dynkinEdge*{RightUpArc}{5}{4}%
+ \ifdynkin@arrows%
+ \dynkin@fold@arrow@if@oo{1}{6}%
+ \dynkin@fold@arrow@if@oo{3}{5}%
+ \fi%
+}%
+
+
+\NewDocumentCommand\ESixThreePly{}%
+{%
+ \dynkin@is@extendedtrue
+ \node (Dynkin current) at ($(Dynkin current)+(0,%1.5*
+ \dynkin@edge@length)$){};%
+ \dynkinPlaceRootHere*{3}{below left}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{3}{south}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{5}{2}{south}{below}{above right}%
+ \dynkinPlaceRootRelativeTo*{1}{3}{west}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{0}{2}{west}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{6}{5}{west}{below}{above right}%
+ \edef\old@fold@radius{\dynkin@fold@radius}%
+ \xdef\dynkin@fold@radius{\dynkin@edge@length}%
+ \dynkinPlaceRootRelativeTo*{4}{2}{east}{below left}{above right}%
+ \dynkinEdge*{SingleEdge}{4}{2}%
+ \dynkinEdge*{SingleEdge}{3}{1}%
+ \dynkinEdge*{SingleEdge}{2}{0}%
+ \dynkinEdge*{SingleEdge}{5}{6}%
+ \dynkinEdge*{RightDownArc}{3}{4}%
+ \dynkinEdge*{RightUpArc}{5}{4}%
+ \xdef\dynkin@fold@radius{\old@fold@radius}%
+ \ifdynkin@arrows%
+ \dynkin@fold@arrow@if@oo{1}{0}%
+ \dynkin@fold@arrow@if@oo{6}{0}%
+ \dynkin@fold@arrow@if@oo{3}{2}%
+ \dynkin@fold@arrow@if@oo{2}{5}%
+ \fi%
+}%
+
+\NewDocumentCommand\extendedESevenFolded{}%
+{%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{0}{above}{below}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{above}{below}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{east}{above}{below}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{southeastfold}{left}{right}%
+ \dynkinPlaceRootRelativeTo*{5}{4}{southwestfold}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{6}{5}{west}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{7}{6}{west}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{4}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \dynkinEdge*{SingleEdge}{1}{3}%
+ \dynkinEdge*{SingleEdge}{2}{4}%
+ \dynkinEdge*{SingleEdge}{5}{6}%
+ \dynkinEdge*{SingleEdge}{6}{7}%
+ \dynkinEdge*{RightDownArc}{3}{4}%
+ \dynkinEdge*{RightUpArc}{5}{4}%
+ \ifdynkin@arrows%
+ \dynkin@fold@arrow@if@oo{0}{7}%
+ \dynkin@fold@arrow@if@oo{1}{6}%
+ \dynkin@fold@arrow@if@oo{3}{5}%
+ \fi%
+}%
+
+
+%% \Edynkin
+%% Draws an E6 Dynkin diagram.
+\NewDocumentCommand\Edynkin{}%
+{%
+ \ifnum\dynkin@ply>1
+ \ifnum\dynkin@rank=6%
+ \Edynkin@folded%
+ \else%
+ \ifnum\dynkin@rank=7
+ \ifdynkin@is@extended
+ \Edynkin@folded%
+ \else%
+ \ClassError{Dynkin diagrams}%
+ {Can not fold a diagram of type \dynkin@user@series{} \the\dynkin@rank.}{}%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \Edynkin@unfolded%
+ \fi%
+}%
+
+%% \Fdynkin
+%% Draws an F series Dynkin diagram.
+\newcommand*{\Fdynkin}%
+{
+ \dynkinPlaceRootHere*{1}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{3}{2}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{east}{below}{above}%
+ \ifdynkin@Coxeter
+ \dynkinEdge*{SingleEdge}{1}{2}
+ \dynkinEdge*{SingleEdge}{2}{3}
+ \dynkinEdge*{SingleEdge}{3}{4}
+ \convertRootPair{2}{3}
+ \node[/Dynkin diagram/text style,above]
+ at ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$)
+ {\(4\)};
+ \else
+ \dynkinEdge*{SingleEdge}{1}{2}
+ \dynkinEdge*{SingleEdge}{3}{4}
+ \dynkinEdge*{DoubleEdge}{2}{3}
+ \fi
+}
+
+%% \Gdynkin
+%% Draws a G series Dynkin diagram.
+\NewDocumentCommand\Gdynkin{}%
+{%
+ \ifdynkin@Coxeter%
+ \Idynkin%
+ \else%
+ \ifnum\dynkin@ply>1%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{1}{left}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{southfold}{left}{below}%
+ \dynkinEdge*{TripleDownRightSemiCircle}{1}{2}%
+ \ifdynkin@arrows%
+ \dynkinLeftFold*{1}{2}%
+ \fi%
+ \else%
+ \dynkinPlaceRootHere*{1}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}%
+ \dynkinTripleEdge*{1}{2}%
+ \fi%
+ \fi%
+}%
+
+%% \Hdynkin
+%% Draws an H series Coxeter diagram.
+\newcommand*{\Hdynkin}%
+{%
+ \Adynkin%
+ \convertRootPair{1}{2}%
+ \node[/Dynkin diagram/text style,above] at ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$) {\(5\)};%
+}%
+
+%% \Idynkin
+%% Draws an I series Coxeter diagram.
+\newcommand*{\Idynkin}%
+{%
+ \newcount\In%
+ \In=\dynkin@rank%
+ \dynkin@rank=2%
+ \Adynkin%
+ \convertRootPair{1}{2}%
+ \node[/Dynkin diagram/text style,above] at ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$) {\(\dynkin@gonality\)};%
+}%
+
+%% \extendedAdynkin
+%% Draws an A series affine Dynkin/Coxeter diagram.
+\NewDocumentCommand\extendedAdynkin{}%
+{%
+ \ifnum\dynkin@rank=1%
+ \dynkinPlaceRootHere{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below}{above}%
+ \convertRootNumber{1}%
+ \begin{scope}{on background layer}%
+ \draw[/Dynkin diagram/t,double,
+ {Classical TikZ Rightarrow[length={2*\dynkin@root@radius}]}%
+ -{Classical TikZ Rightarrow[length={2*\dynkin@root@radius}]}%
+ ]%
+ ($(\dynkin@root@name 0)+(\dynkin@root@radius,0)$)
+ --
+ ($(\dynkin@root@name \the\RootNumber)-(\dynkin@root@radius,0)$);%
+ \end{scope}%
+ \else%
+ \ifnum\dynkin@ply=4%
+ \node (Dynkin current) at ($(Dynkin current)+(0,\dynkin@edge@length)$){};%
+ \dynkinPlaceRootHere*{0}{left}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{right}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{0}{south}{below}{left}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{south}{below}{right}%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \dynkinEdge*{SingleEdge}{2}{3}%
+ \dynkinEdge*{SingleEdge}{3}{0}%
+ \dynkinFold*{0}{2}%
+ \dynkinFold*{1}{3}%
+ \else%
+ \Adynkin{}%
+ \ifnum\dynkin@ply>1%
+ \dynkinPlaceRootRelativeTo*{0}{1}{southwestfold}{left}{right}%
+ \dynkinEdge*{LeftDownArc}{1}{0}%
+ \dynkinEdge*{LeftUpArc}{\the\dynkin@rank}{0}%
+ \else%
+ \node (Dynkin current) at ($.5*(\dynkin@root@name 1)+.5*(\dynkin@root@name \the\dynkin@rank)$){};%
+ \dynkinNorth%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \dynkinEdge*{SingleEdge}{0}{\the\dynkin@rank}%
+ \fi%
+ \dynkinRootMark*{}{0}%
+ \fi%
+ \fi%
+}%
+
+\NewDocumentCommand\extendedBthreePly{}%
+{%
+ \ifnum\dynkin@rank=3
+ \else
+ \ClassError{Dynkin diagrams}{B series extended 3-ply diagrams must have rank 3, so cannot have rank \the\dynkin@rank}{}%
+ \fi
+ \dynkinPlaceRootHere*{1}{right}{above left}%
+ \dynkinPlaceRootRelativeTo*{0}{1}{north}{above}{below left}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{south}{below}{above left}%
+ \edef\old@fold@radius{\dynkin@fold@radius}%
+ \xdef\dynkin@fold@radius{\dynkin@edge@length}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{west}{left}{above right}%
+ \dynkinEdge*{LeftDownArc}{0}{2}%
+ \dynkinFold*{0}{1}%
+ \dynkinFold*{1}{3}%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \dynkinEdge*{DoubleDownRightArc}{2}{3}%
+ \xdef\dynkin@fold@radius{\old@fold@radius}%
+}%
+
+%% \extendedBdynkin
+%% Draws a B series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedBdynkin}%
+{%
+ \ifnum\the\dynkin@rank=1
+ \extendedAdynkin%
+ \else%
+ \ifnum\the\dynkin@rank=2
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \dynkinEdge*{DoubleEdge}{1}{2}%
+ \else%
+ \ifnum\dynkin@ply=3%
+ \extendedBthreePly%
+ \else%
+ \ifnum\dynkin@ply=2%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{0}{left}{above left}%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{below right}{above right}%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}{above left}%
+ \dynkinLeftFold*{0}{1}%
+ \dynkinEdge*{RightDownArc}{0}{2}%
+ \dynkinEdge*{RightUpArc}{1}{2}%
+ \else%
+ \dynkin@hop{1}%
+ \dynkinPlaceRootHere*{0}{left}{above left}%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeast}{below right}{above right}%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwest}{left}{above left}%
+ \dynkinEdge*{SingleEdge}{0}{2}%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \fi%
+ \newcount\drmo%
+ \drmo=\the\dynkin@rank\relax%
+ \advance\drmo by -1\relax%
+ \newcount\bmo%
+ \bmo=2%
+ \ifnum\dynkin@rank>3%
+ \foreach \b in {3,...,\the\drmo}%
+ {%
+ \dynkinPlaceRootRelativeTo*{\b}{\the\bmo}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{\b}{\the\bmo}%
+ \global\advance\bmo by 1\relax%
+ }%
+ \fi%
+ \ifnum\dynkin@ply<3%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@rank}{\the\drmo}{east}{below}{above}%
+ \fi%
+ \ifdynkin@Coxeter%
+ \dynkinEdge*{SingleEdge}{\the\drmo}{\the\dynkin@rank}%
+ \convertRootPair{\the\drmo}{\the\dynkin@rank}
+ \node[/Dynkin diagram/text style,above] at
+ ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$) {\(4\)};
+ \else%
+ \ifnum\dynkin@ply<3%
+ \dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin@rank}%
+ \else%
+ \dynkinEdge*{DoubleDownRightArc}{\the\drmo}{\the\dynkin@rank}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+}%
+
+%% \extendedCdynkin
+%% Draws an C series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedCdynkin}%
+{%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinEast%
+ \Cdynkin{}%
+ \ifdynkin@Coxeter%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \convertRootPair{0}{1}
+ \node[/Dynkin diagram/text style,above] at
+ ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$) {\(4\)};
+ \else%
+ \dynkinEdge*{DoubleEdge}{0}{1}%
+ \fi%
+}%
+
+%% \DOneFourFourPly
+%% Draws a D^1_4 series affine Dynkin diagram folded about an A^2_2.
+\NewDocumentCommand\DOneFourFourPly{}%
+{%
+ \dynkin@hop{2.25}%
+ \dynkinPlaceRootHere*{0}{right}{left}%
+ \edef\old@edge@length{\dynkin@edge@length}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{south}{right}{left}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{south}{right}{left}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{south}{right}{left}%
+ \convertRootPair{0}{4}%
+ \node
+ (Dynkin current)
+ at
+ ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$){};%
+ \dynkinWest%
+ \dynkinPlaceRootHere*{2}{right}{left}%
+ \dynkinEdge*{SingleEdge}{0}{2}%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \dynkinEdge*{SingleEdge}{3}{2}%
+ \dynkinEdge*{SingleEdge}{4}{2}%
+ \dynkinFold*{0}{1}%
+ \dynkinFold*{1}{3}%
+ \dynkinFold*{3}{4}%
+}%
+
+
+%% \DfourPly
+%% Draws a D series affine Dynkin diagram folded about its middle.
+\NewDocumentCommand\DfourPly{}%
+{%
+ \xdef\yfp{2*\dynkin@fold@radius+2*cos(60)*\dynkin@edge@length}%
+ \node (Dynkin current) at ($(Dynkin current)+(0,{\yfp})$){};%
+ \dynkinPlaceRootHere*{0}{left}{above left}%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeastfold}{above right}{below right}%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}{above left}%
+ \dynkinMoveToRoot*{2}%
+ \newcount\drmo%
+ \drmo=\the\dynkin@rank%
+ \advance\drmo by -1%
+ \newcount\drmt%
+ \drmt=\the\drmo%
+ \advance\drmt by -1%
+ \xdef\old@fold{\dynkin@fold@radius}%
+ \pgfmathparse{\dynkin@fold@radius+2*cos(60)*\dynkin@edge@length}%
+ \xdef\dynkin@fold@radius{\pgfmathresult pt}%
+ \dynkin@fold{2}{\the\drmt}%
+ % We place the root number rank-2 once again (it is already placed in the \dynkin@fold):
+ \dynkinPlaceRootHere*{\the\drmt}{below right}{above right}%
+ \xdef\dynkin@fold@radius{\old@fold}%
+ \dynkinPlaceRootRelativeTo*{\the\drmo}{\the\drmt}{northwestfold}{left}{above left}%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@rank}{\the\drmt}{southwestfold}{left}{above left}%
+ \dynkinEdge*{RightDownArc}{0}{2}%
+ \dynkinEdge*{RightUpArc}{1}{2}%
+ \dynkinEdge*{RightDownArc}{\the\drmo}{\the\drmt}%
+ \dynkinEdge*{RightUpArc}{\the\dynkin@rank}{\the\drmt}%
+}%
+
+%% \extendedDthreePly
+%% Draws a D^1_4 series Dynkin diagram, folded over a B^1_3.
+\NewDocumentCommand\extendedDthreePly{}%
+{%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{3}{1}{east}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{2}{3}{north}{below left}{above right}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{south}{below}{above right}%
+ \dynkinEdge*{SingleEdge}{1}{3}%
+ \edef\old@fold@radius{\dynkin@fold@radius}%
+ \xdef\dynkin@fold@radius{\dynkin@edge@length}%
+ \dynkinEdge*{LeftDownArc}{2}{1}%
+ \dynkinEdge*{LeftUpArc}{4}{1}%
+ \xdef\dynkin@fold@radius{\old@fold@radius}%
+ \ifdynkin@arrows%
+ \dynkin@fold@arrow@if@oo{2}{3}%
+ \dynkin@fold@arrow@if@oo{3}{4}%
+ \fi%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+}%
+
+
+%% \extendedDdynkin
+%% Draws an D series affine Dynkin/Coxeter diagram.
+\NewDocumentCommand\extendedDdynkin{}%
+{%
+ \ifnum\dynkin@ply=4%
+ \ifnum\dynkin@rank=4%
+ \DOneFourFourPly%
+ \else%
+ \DfourPly%
+ \fi%
+ \else%
+ \ifnum\dynkin@ply=3%
+ \extendedDthreePly%
+ \else%
+ \ifnum\the\dynkin@rank=1%
+ \extendedAdynkin%
+ \else%
+ \ifnum\the\dynkin@rank=4%
+ \global\dynkin@hex@gridfalse
+ \fi
+ \dynkin@hop{1}%
+ \dynkinPlaceRootHere*{0}{left}{above left}%
+ \Ddynkin%
+ \ifnum\dynkin@ply=2%
+ \dynkinEdge*{RightDownArc}{0}{2}%
+ \else%
+ \ifdynkin@left@fold%
+ \dynkinEdge*{RightDownArc}{0}{2}%
+ \else%
+ \dynkinEdge*{SingleEdge}{0}{2}%
+ \fi%
+ \fi%
+ \ifnum\the\dynkin@rank=4%
+ \global\dynkin@hex@gridtrue
+ \fi
+ \fi%
+ \fi%
+ \fi%
+}%
+
+%% \extendedEdynkin
+%% Draws an E series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedEdynkin}%
+{%
+ \Edynkin%
+}%
+
+%% \extendedFdynkin
+%% Draws an F series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedFdynkin}%
+{%
+ \ifnum\dynkin@ply=1%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinEast%
+ \Fdynkin%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \else%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{0}{above}{below}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{above}{below}%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{southeastfold}{right}{left}%
+ \dynkinDefiniteRightDownArc*{1}{2}%
+ \dynkinPlaceRootRelativeTo*{3}{2}{southwestfold}{below}{above}%
+ \dynkinDefiniteDoubleDownLeftArc*{2}{3}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{west}{below}{above}%
+ \dynkinEdge*{SingleEdge}{3}{4}%
+ \ifdynkin@arrows%
+ \dynkinFold*{0}{4}%
+ \dynkinFold*{1}{3}%
+ \fi%
+ \fi%
+}%
+
+%% \extendedGdynkin
+%% Draws an G series affine Dynkin/Coxeter diagram.
+\newcommand*{\extendedGdynkin}%
+{%
+ \xdef\dynkin@gonality{6}%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinEast%
+ \Gdynkin%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+}%
+
+%% \extendedHdynkin
+%% Draws an H series affine Coxeter diagram.
+\newcommand*{\extendedHdynkin}%
+{%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinEast%
+ \Adynkin%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \ifnum\dynkin@rank=3%
+ \convertRootPair{1}{2}%
+ \else%
+ \convertRootPair{0}{1}%
+ \fi%
+ \node[/Dynkin diagram/text style,above]
+ at
+ ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$)
+ {\(5\)};%
+}%
+
+
+%% \extendedIdynkin
+%% Draws an I series affine Coxeter diagram.
+\newcommand*{\extendedIdynkin}%
+{
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinEast%
+ \dynkin@rank=1%
+ \Adynkin%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \convertRootPair{0}{1}%
+ \node[/Dynkin diagram/text style,above]
+ at
+ ($.5*(\dynkin@root@name \the\@fromRoot)+.5*(\dynkin@root@name \the\@toRoot)$)
+ {\(\infty\)};%
+}
+
+
+%% \twistedAdynkin
+%% Draws a twisted A series affine Dynkin diagram.
+\NewDocumentCommand\twistedAdynkin{}%
+{%
+ \ifnum\dynkin@rank=3
+ \ClassError{Dynkin diagrams}{A2 series twisted diagrams cannot have rank \the\dynkin@rank}{}%
+ \fi
+ \ifnum\dynkin@rank=2%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below}{above}%
+ \dynkinQuadrupleEdge*{1}{0}%
+ \else%
+ \newcount\hmo%
+ \hmo=\the\dynkin@nodes%
+ \advance\hmo by -1%
+ \ifodd\dynkin@rank%
+ \ifnum\dynkin@ply>1%
+ \dynkinPlaceRootHere*{2}{below right}{above right}%
+ \dynkinPlaceRootRelativeTo*{0}{2}{northwestfold}{left}{above left}%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwestfold}{left}{above left}%
+ \dynkinEdge*{RightDownArc}{0}{2}%
+ \dynkinEdge*{RightUpArc}{1}{2}%
+ \else%
+ \dynkin@hop{1}%
+ \dynkinPlaceRootHere*{0}{left}{right}%
+ \dynkinPlaceRootRelativeTo*{2}{0}{southeast}{left}{right}%
+ \dynkinPlaceRootRelativeTo*{1}{2}{southwest}{left}{right}%
+ \dynkinEdge*{SingleEdge}{0}{2}%
+ \dynkinEdge*{SingleEdge}{1}{2}%
+ \fi%
+ \dynkinMoveToRoot*{2}%
+ \dynkin@pipe{2}{\the\hmo}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@nodes}{\the\hmo}{east}{below}{above}%
+ \dynkinEdge*{DoubleEdge}{\the\dynkin@nodes}{\the\hmo}%
+ \ifnum\dynkin@ply>1%
+ \dynkinLeftFold*{0}{1}%
+ \fi%
+ \else%
+ \ifnum\dynkin@nodes>1%
+ \ifnum\dynkin@ply>1%
+ \ifnum\hmo>1%
+ \dynkin@jump{1}%
+ \fi%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below left}{above}%
+ \dynkinEdge*{DoubleEdge}{1}{0}%
+ \ifnum\hmo>1%
+ \dynkin@fold{1}{\the\hmo}%
+ \fi%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@nodes}{\the\hmo}{west}{below}{above}%
+ \else%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below right}{above}%
+ \dynkinEdge*{DoubleEdge}{1}{0}%
+ \ifnum\hmo>1%
+ \dynkin@pipe{1}{\the\hmo}{east}{below}{above}%
+ \fi%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@nodes}{\the\hmo}{east}{below}{above}%
+ \fi%
+ \dynkinEdge*{DoubleEdge}{\the\dynkin@nodes}{\the\hmo}%
+ \else%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below right}{above}%
+ \dynkinEdge*{DoubleEdge}{1}{0}%
+ \fi%
+ \fi%
+ \fi%
+}%
+
+%% \twistedDdynkin
+%% Draws a twisted D series affine Dynkin diagram.
+\NewDocumentCommand\twistedDdynkin{}%
+{%
+ \IfStrEqCase{\dynkin@twisted@series}%
+ {%
+ {1}{\extendedDdynkin}%
+ {2}{\twistedDTwo}%
+ {3}%
+ {%
+ \ifnum\dynkin@rank=4%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{0}{1}%
+ \dynkinTripleEdge*{2}{1}%
+ \else%
+ \ClassError%
+ {Dynkin diagrams}%
+ {D3 series twisted diagrams must have rank 2 and cannot have rank \the\dynkin@rank}%
+ {}%
+ \fi%
+ }%
+ }%
+}%
+
+
+\NewDocumentCommand\twistedDTwo{}%
+{%
+ \ifnum\dynkin@rank<3%
+ \ClassError{Dynkin diagrams}{D2 series twisted diagrams cannot have rank \the\dynkin@rank}{}%
+ \fi%
+ \newcount\drmo%
+ \drmo=\the\dynkin@nodes%
+ \advance\drmo by -1%
+ \ifnum\dynkin@ply=1%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{below}{above}%
+ \else%
+ \ifnum\dynkin@rank=3%
+ \dynkin@jump{1}%
+ \dynkinPlaceRootHere*{0}{above}{right}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{southwestfold}{left}{right}%
+ \dynkinPlaceRootRelativeTo*{2}{1}{southeastfold}{below}{right}%
+ \else%
+ \dynkinPlaceRootHere*{0}{above}{below}%
+ \dynkinPlaceRootRelativeTo*{1}{0}{east}{above}{below}%
+ \fi%
+ \fi%
+ \ifnum\dynkin@ply=2%
+ \dynkinEdge*{DoubleUpRightArc}{1}{0}%
+ \else
+ \dynkinEdge*{DoubleEdge}{1}{0}%
+ \fi%
+ \ifnum\dynkin@ply>1%
+ \ifnum\dynkin@rank>3%
+ \dynkin@fold{1}{\the\drmo}%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@nodes}{\the\drmo}{west}{below}{above}%
+ \dynkinFold*{0}{\the\dynkin@nodes}%
+ \else%
+ \dynkinFold*{0}{2}%
+ \fi%
+ \else%
+ \ifnum\dynkin@rank>2%
+ \dynkin@pipe{1}{\the\drmo}{east}{below}{above}%
+ \fi%
+ \dynkinPlaceRootRelativeTo*{\the\dynkin@nodes}{\the\drmo}{east}{below}{above}%
+ \fi%
+ \ifnum\dynkin@ply=2%
+ \dynkinEdge*{DoubleDownRightArc}{\the\drmo}{\the\dynkin@nodes}%
+ \else
+ \dynkinEdge*{DoubleEdge}{\the\drmo}{\the\dynkin@nodes}%
+ \fi%
+}%
+
+
+%% \twistedEdynkin
+%% Draws a twisted E series affine Dynkin diagram.
+\NewDocumentCommand\twistedEdynkin{}%
+{%
+ \IfStrEqCase{\dynkin@twisted@series}%
+ {%
+ {0}{\Edynkin}%
+ {1}{\extendedEdynkin}%
+ {2}%
+ {%
+ \dynkinPlaceRootHere*{0}{below}{above}%
+ \dynkin@pipe{0}{2}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{3}{2}{east}{below}{above}%
+ \dynkinPlaceRootRelativeTo*{4}{3}{east}{below}{above}%
+ \dynkinEdge*{SingleEdge}{3}{4}%
+ \dynkinEdge*{DoubleEdge}{3}{2}%
+ }%
+ }%
+ [\dynkin@error@series]%
+}%
+
+
+\endinput
diff --git a/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex
new file mode 100644
index 0000000000..6d84d1606d
--- /dev/null
+++ b/graphics/pgf/contrib/dynkin-diagrams/dynkin-diagrams.tex
@@ -0,0 +1,1757 @@
+\documentclass{amsart}
+
+\title{The Dynkin diagrams package \\ Version 3.141592}
+
+\makeatletter
+\DeclareRobustCommand{\scotsMc}{\scotsMcx{c}}
+\DeclareRobustCommand{\scotsMC}{\scotsMcx{\textsc{c}}}
+\DeclareRobustCommand{\scotsMcx}[1]{%
+ M%
+ \raisebox{\dimexpr\fontcharht\font`M-\height}{%
+ \check@mathfonts\fontsize{\sf@size}{0}\selectfont
+ \kern.3ex\underline{\kern-.3ex #1\kern-.3ex}\kern.3ex
+ }%
+}
+\expandafter\def\expandafter\@uclclist\expandafter{%
+ \@uclclist\scotsMc\scotsMC
+}
+\makeatother
+
+\author{Ben \scotsMc{}Kay}
+\address{School of Mathematical Sciences, University College Cork, Cork, Ireland}
+\email{b.mckay@ucc.ie}
+\date{24 January 2019}
+
+\usepackage{etex}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenx}
+\usepackage{etoolbox}
+\usepackage{lmodern}
+\usepackage[kerning=true,tracking=true]{microtype}
+\usepackage{amsmath}
+\usepackage{amsfonts}
+\usepackage{array}
+\usepackage{xstring}
+\usepackage{longtable}
+\usepackage[listings]{tcolorbox}
+\tcbuselibrary{breakable}
+\tcbuselibrary{skins}
+\usepackage[pdftex]{hyperref}
+\hypersetup{
+ colorlinks = true, %Colours links instead of ugly boxes
+ urlcolor = black, %Colour for external hyperlinks
+ linkcolor = black, %Colour of internal links
+ citecolor = black %Colour of citations
+}
+\usepackage{booktabs}
+\usepackage{colortbl}
+\usepackage{varwidth}
+\usepackage{dynkin-diagrams}
+\usepackage{fancyvrb}
+\usepackage{xspace}
+\newcommand{\TikZ}{Ti\textit{k}Z\xspace}
+\usepackage{filecontents}
+\usetikzlibrary{decorations.markings}
+\usetikzlibrary{decorations.pathmorphing}
+\arrayrulecolor{white}
+\makeatletter
+ \def\rulecolor#1#{\CT@arc{#1}}
+ \def\CT@arc#1#2{%
+ \ifdim\baselineskip=\z@\noalign\fi
+ {\gdef\CT@arc@{\color#1{#2}}}}
+ \let\CT@arc@\relax
+\rulecolor{white}
+\makeatother
+
+\newcommand{\C}[1]{\mathbb{C}^{#1}}
+\renewcommand*{\arraystretch}{1.5}
+\NewDocumentCommand\wdtA{}{.7cm}
+\NewDocumentCommand\wdtD{}{3cm}
+\NewDocumentCommand\wdtE{}{6cm}
+\NewDocumentCommand\wdtL{}{3cm}
+\newcolumntype{A}{@{}>{\columncolor[gray]{.9}$}m{\wdtA}<{$}}
+\newcolumntype{B}{@{}>{\columncolor[gray]{.9}}m{\wdtA}}
+\newcolumntype{D}{>{\columncolor[gray]{.9}}m{\wdtD}}
+\newcolumntype{E}{>{\columncolor[gray]{.9}}m{\wdtE}}
+\newcolumntype{L}{>{\columncolor[gray]{.9}}p{\wdtL}}
+\newcolumntype{M}{>{\columncolor[gray]{.9}}l}
+\newcolumntype{P}{>{\columncolor[gray]{.9}}p{10cm}}
+\NewDocumentCommand\textleftcurly{}{\texttt{\char'173}}%
+\NewDocumentCommand\textrightcurly{}{\texttt{\char'175}}%
+\NewDocumentCommand\csDynkin{omom}%
+{%
+ \texttt{\detokenize{\dynkin}\!\!\!%
+ \IfNoValueTF{#1}{}{[#1]}%
+ \textleftcurly#2\textrightcurly%
+ \IfNoValueTF{#3}{}{[#3]}%
+ \textleftcurly#4\textrightcurly%
+ }%
+}%
+
+\NewDocumentCommand\dynk{omom}%
+{%
+ \dynkin[#1]{#2}[#3]{#4}&\csDynkin[#1]{#2}[#3]{#4}\\
+}%
+
+\NewDocumentCommand\typesetSubseries{m}%
+{%
+ \IfInteger{#1}{#1}{\IfStrEq{#1}{}{n}{#1}}
+}%
+
+\NewDocumentCommand\dyn{omom}%
+{%
+ {#2}_{\typesetSubseries{#4}}^{\IfInteger{#3}{#3}{\IfStrEq{#1}{extended}{1}{}}} & \dynk[#1]{#2}[#3]{#4}%
+}%
+
+
+\NewDocumentEnvironment{dynkinTable}{mmm}%
+{%
+\RenewDocumentCommand\wdtD{}{#2}
+\RenewDocumentCommand\wdtL{}{#3}
+\begin{longtable}{ADM}
+\caption{#1}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{2}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+}%
+{%
+\end{longtable}
+}%
+
+
+\definecolor{example-color}{gray}{.85}
+\definecolor{example-border-color}{gray}{.7}
+
+\tcbset{coltitle=black,colback=example-color,colframe=example-border-color,enhanced,breakable,pad at break*=1mm,
+toprule=1.2mm,bottomrule=1.2mm,leftrule=1mm,rightrule=1mm,toprule at break=-1mm,bottomrule at break=-1mm,
+before upper={\widowpenalties=3 10000 10000 150}}
+
+\makeatletter
+\def\@tocline#1#2#3#4#5#6#7{\relax
+ \ifnum #1>\c@tocdepth%
+ \else
+ \par \addpenalty\@secpenalty\addvspace{#2}%
+ \begingroup \hyphenpenalty\@M
+ \@ifempty{#4}{%
+ \@tempdima\csname r@tocindent\number#1\endcsname\relax
+ }{%
+ \@tempdima#4\relax
+ }%
+ \parindent\z@ \leftskip#3\relax \advance\leftskip\@tempdima\relax
+ #5\leavevmode\hskip-\@tempdima #6\nobreak\relax
+ ,~#7\par
+ \endgroup
+ \fi}
+\makeatother
+
+\fvset{fontsize=\small}
+
+\begin{document}
+
+\maketitle
+\begin{center}
+\begin{varwidth}{\textwidth}
+\tableofcontents
+\end{varwidth}
+\end{center}
+
+
+\setlength{\arrayrulewidth}{1.5pt}
+
+\section{Quick introduction}
+\begin{tcolorbox}[title={Load the Dynkin diagram package (see options below)}]
+\begin{verbatim}
+\documentclass{amsart}
+\usepackage{dynkin-diagrams}
+\begin{document}
+The Dynkin diagram of \(B_3\) is \dynkin{B}{3}.
+\end{document}
+\end{verbatim}
+\end{tcolorbox}
+\begin{tcblisting}{title={Invoke it}}
+The Dynkin diagram of \(B_3\) is \dynkin{B}{3}.
+\end{tcblisting}
+\begin{tcblisting}{title={Inside a \TikZ statement}}
+The Dynkin diagram of \(B_3\) is
+\tikz \dynkin{B}{3};
+\end{tcblisting}
+\begin{tcblisting}{title={Inside a Dynkin diagram environment}}
+The Dynkin diagram of \(B_3\) is
+\begin{dynkinDiagram}{B}{3}
+\draw[very thick,red] (root 1) to [out=-45, in=-135] (root 3);
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Inside a \TikZ environment}}
+The baseline controls the vertical alignment:
+the Dynkin diagram of \(B_3\) is
+\begin{tikzpicture}[baseline=(origin.base)]
+\dynkin{B}{3}
+\draw[very thick,red] (root 1) to [out=-45, in=-135] (root 3);
+\end{tikzpicture}
+\end{tcblisting}
+\begin{tcblisting}{title={Indefinite rank Dynkin diagrams}}
+\dynkin{B}{}
+\end{tcblisting}
+
+\begin{dynkinTable}{The Dynkin diagrams of the reduced simple root systems \cite{Bourbaki:2002} pp. 265--290, plates I--IX}{2.25cm}{2.5cm}
+\dyn{A}{}
+\dyn{C}{}
+\dyn{D}{}
+\dyn{E}{6}
+\dyn{E}{7}
+\dyn{E}{8}
+\dyn{F}{4}
+\dyn{G}{2}
+\end{dynkinTable}
+
+
+\section{Set options globally}
+
+\begin{tcolorbox}[title={Most options set globally \dots}]
+\begin{verbatim}
+\pgfkeys{/Dynkin diagram,edge length=.5cm,fold radius=.5cm,
+indefinite edge/.style={
+ draw=black,fill=white,thin,densely dashed}}
+\end{verbatim}
+\end{tcolorbox}
+You can also pass options to the package in \verb!\usepackage!.
+\emph{Danger:} spaces in option names are replaced with hyphens: \texttt{edge length=1cm} is \texttt{edge-length=1cm} as a global option; moreover you should drop the extension \verb!/.style! on any option with spaces in its name (but not otherwise). For example,
+\begin{tcolorbox}[title={\dots or pass global options to the package}]
+\begin{verbatim}
+\usepackage[
+ ordering=Kac,
+ edge/.style=blue,
+ indefinite-edge={draw=green,fill=white,densely dashed},
+ indefinite-edge-ratio=5,
+ mark=o,
+ root-radius=.06cm]
+ {dynkin-diagrams}
+\end{verbatim}
+\end{tcolorbox}
+
+
+
+\section{Coxeter diagrams}
+
+\begin{tcblisting}{title={Coxeter diagram option}}
+\dynkin[Coxeter]{F}{4}
+\end{tcblisting}
+
+\begin{tcblisting}{title={gonality option for \(G_2\) and \(I_n\) Coxeter diagrams}}
+\(G_2=\dynkin[Coxeter,gonality=n]{G}{2}\), \
+\(I_n=\dynkin[Coxeter,gonality=n]{I}{}\)
+\end{tcblisting}
+
+\begin{dynkinTable}{The Coxeter diagrams of the simple reflection groups}{2.25cm}{6cm}
+\dyn[Coxeter]{A}{}
+\dyn[Coxeter]{B}{}
+\dyn[Coxeter]{C}{}
+\dyn[Coxeter]{E}{6}
+\dyn[Coxeter]{E}{7}
+\dyn[Coxeter]{E}{8}
+\dyn[Coxeter]{F}{4}
+\dyn[Coxeter,gonality=n]{G}{2}
+\dyn[Coxeter]{H}{3}
+\dyn[Coxeter]{H}{4}
+\dyn[Coxeter,gonality=n]{I}{}
+\end{dynkinTable}
+
+\section{Satake diagrams}\label{section:Satake}
+
+\begin{tcblisting}{title={Satake diagrams use the standard name instead of a rank}}
+\(A_{IIIb}=\dynkin{A}{IIIb}\)
+\end{tcblisting}
+
+We use a solid gray bar to denote the folding of a Dynkin diagram, rather than the usual double arrow, since the diagrams turn out simpler and easier to read.
+
+\begin{dynkinTable}{The Satake diagrams of the real simple Lie algebras \cite{Helgason:2001} p. 532--534}{2.75cm}{3cm}
+\dyn{A}{I}
+\dyn{A}{II}
+\dyn{A}{IIIa}
+\dyn{A}{IIIb}
+\dyn{A}{IV}
+\dyn{B}{I}
+\dyn{B}{II}
+\dyn{C}{I}
+\dyn{C}{IIa}
+\dyn{C}{IIb}
+\dyn{D}{Ia}
+\dyn{D}{Ib}
+\dyn{D}{Ic}
+\dyn{D}{II}
+\dyn{D}{IIIa}
+\dyn{D}{IIIb}
+\dyn{E}{I}
+\dyn{E}{II}
+\dyn{E}{III}
+\dyn{E}{IV}
+\dyn{E}{V}
+\dyn{E}{VI}
+\dyn{E}{VII}
+\dyn{E}{VIII}
+\dyn{E}{IX}
+\dyn{F}{I}
+\dyn{F}{II}
+\dyn{G}{I}
+\end{dynkinTable}
+
+\section{How to fold}
+\begin{tcblisting}{title={If you don't like the solid gray ``folding bar'', most people use arrows. Here is \(E_{II}\)}}
+\newcommand{\invol}[2]{\draw[latex-latex] (root #1) to
+[out=-60,in=-120] node[midway,below]{$\sigma$} (root #2);}
+\begin{dynkinDiagram}[edge length=.75cm,labels*={1,...,6}]{E}{6}
+\invol{1}{6}\invol{3}{5}
+\end{dynkinDiagram}
+\end{tcblisting}
+
+\begin{tcblisting}{title={The double arrows for \(A_{IIIa}\) are big}}
+\newcommand{\invol}[2]{\draw[latex-latex] (root #1) to
+[out=-60,in=-120] node[midway,below]{$\sigma$} (root #2);}
+\begin{dynkinDiagram}[edge length=.75cm]{A}{oo.o**.**o.oo}
+\invol{1}{10}\invol{2}{9}\invol{3}{8}\invol{4}{7}\invol{5}{6}
+\end{dynkinDiagram}
+\end{tcblisting}
+
+\begin{tcblisting}{title={If you don't like the solid gray ``folding bar'', most people use arrows \dots}}
+\tikzset{/Dynkin diagram/fold style/.style={stealth-stealth,thick,
+shorten <=1mm,shorten >=1mm,}}
+\dynkin[ply=3,edge length=.75cm]{D}{4}
+\begin{dynkinDiagram}[ply=4]{D}[1]%
+{****.*****.*****}
+ \dynkinFold{1}{13}
+ \dynkinFold[bend right=90]{0}{14}
+\end{dynkinDiagram}
+\end{tcblisting}
+
+\begin{tcblisting}{title={\dots but you could try springs pulling roots together}}
+\tikzset{/Dynkin diagram/fold style/.style=
+{decorate,decoration={name=coil,aspect=0.5,
+segment length=1mm,amplitude=.6mm}}}
+\dynkin[ply=3,edge length=.75cm]{D}{4}
+\begin{dynkinDiagram}[ply=4]{D}[1]%
+{****.*****.*****}
+ \dynkinFold{1}{13}
+ \dynkinFold[bend right=90]{0}{14}
+\end{dynkinDiagram}
+\end{tcblisting}
+
+
+\section{Labels for the roots}
+
+\begin{tcblisting}{title={Make a macro to assign labels to roots}}
+\dynkin[label,label macro/.code={\alpha_{#1}},edge length=.75cm]{D}{5}
+\end{tcblisting}
+\begin{tcblisting}{title={Labelling several roots}}
+\dynkin[labels={,2,...,5,,7},label macro/.code={\alpha_{#1}}]{A}{7}
+\end{tcblisting}
+\begin{tcblisting}{title={The \texttt{foreach} notation I}}
+\dynkin[labels={1,3,...,7},]{A}{9}
+\end{tcblisting}
+\begin{tcblisting}{title={The \texttt{foreach} notation II}}
+\dynkin[labels={,\alpha_2,\alpha_...,\alpha_7},]{A}{7}
+\end{tcblisting}
+\begin{tcblisting}{title={The \texttt{foreach} notation III}}
+\dynkin[label macro/.code={\beta_{#1}},labels={,2,...,7},]{A}{7}
+\end{tcblisting}
+\begin{tcblisting}{title={Label the roots individually by root number}}
+\dynkin[label]{B}{3}
+\end{tcblisting}
+\begin{tcblisting}{title={Label a single root}}
+\begin{dynkinDiagram}{B}{3}
+\dynkinLabelRoot{2}{\alpha_2}
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Use a text style}}
+\begin{dynkinDiagram}[text/.style={scale=1.2}]{B}{3};
+\dynkinLabelRoot{2}{\alpha_2}
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Access root labels via TikZ}}
+\begin{dynkinDiagram}{B}{3}
+\node[below] at (root 2) {\(\alpha_2\)};
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Commands to label several roots}}
+\begin{dynkinDiagram}{A}{7}
+\dynkinLabelRoots{,\alpha_2,\alpha_3,\alpha_4,\alpha_5,,\alpha_7}
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={The labels have default locations, mostly below roots}}
+\dynkin[edge length=.75cm,labels={1,2,3}]{E}{8}
+\end{tcblisting}
+\begin{tcblisting}{title={The starred form flips labels to alternate locations, mostly above roots}}
+\dynkin[edge length=.75cm,labels*={1,2,3}]{E}{8}
+\end{tcblisting}
+\begin{tcblisting}{title={Labelling several roots and alternates}}
+\dynkin[%
+label macro/.code={\alpha_{#1}},
+label macro*/.code={\gamma_{#1}},
+labels={,2,...,5,,7},
+labels*={1,3,4,5,6}]{A}{7}
+\end{tcblisting}
+\begin{tcblisting}{title={Commands to label several roots}}
+\begin{dynkinDiagram}{A}{7}
+\dynkinLabelRoots{,\alpha_2,\alpha_3,\alpha_4,\alpha_5,,\alpha_7}
+\dynkinLabelRoots*{a,b,c,d,e,f,g}
+\end{dynkinDiagram}
+\end{tcblisting}
+
+
+\section{Bracing roots}
+\begin{tcblisting}{title={Bracing roots}}
+\begin{dynkinDiagram}{A}{*.*x*.*}
+\dynkinBrace[p]{1}{2}
+\dynkinBrace[q]{4}{5}
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Bracing roots, and a starred form}}
+\begin{dynkinDiagram}{A}{10}
+\dynkinBrace[\text{Roots 2 to 9}]{2}{9}
+\dynkinBrace*[\text{Roots 3 to 8}]{3}{8}
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Bracing roots}}
+\newcommand\circleRoot[1]{\draw (root #1) circle (3pt);}
+\begin{dynkinDiagram}{A}{**.***.***.***.***.**}
+\circleRoot{4}\circleRoot{7}\circleRoot{10}\circleRoot{13}
+\dynkinBrace[y-1]{1}{3}
+\dynkinBrace[z-1]{5}{6}
+\dynkinBrace[t-1]{11}{12}
+\dynkinBrace[x-1]{14}{16}
+\end{dynkinDiagram}
+\end{tcblisting}
+
+\begin{filecontents*}{EulerProducts.tex}
+\tikzset{/Dynkin diagram,ordering=Dynkin,label macro/.code={\alpha_{#1}}}
+\newcounter{EPNo}
+\setcounter{EPNo}{0}
+\NewDocumentCommand\EP{smmmm}%
+{%
+\stepcounter{EPNo}\roman{EPNo}. &
+\def\eL{.6cm}
+\IfStrEqCase{#2}%
+{%
+{D}{\gdef\eL{1cm}}%
+{E}{\gdef\eL{.75cm}}%
+{F}{\gdef\eL{.35cm}}%
+{G}{\gdef\eL{.35cm}}%
+}%
+\tikzset{/Dynkin diagram,edge length=\eL}
+\IfBooleanTF{#1}%
+{\dynkin[backwards,labels*={#4},labels={#5}]{#2}{#3}}
+{\dynkin[labels*={#4},labels={#5}]{#2}{#3}}
+\\
+}%
+\begin{longtable}{MM}
+\caption{Dynkin diagrams from Euler products \cite{Langlands:1967}}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{2}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\EP{A}{***.**}{1,1,1,1,1}{,1,2,n-1,n}
+\EP{A}{***.**}{1,1,1,1,1}{1,2,n-1,n}
+\EP{A}{**.***.*}{1,1,1,1,1,1}{1,2,m-1,,m,n}
+\EP{B}{**.***}{2,2,2,2,1}{1,2,n-1,n}
+\EP*{B}{***.**}{2,2,2,2,1}{n,n-1,2,1,}
+\EP{C}{**.***}{1,1,1,1,2}{1,2,n-1,}
+\EP*{C}{***.**}{1,1,1,1,2}{n,n-1,2,1,}
+\EP{D}{**.****}{1,1,1,1,1,1}{1,2,n-2,n-1,n}
+\EP{D}{**.****}{1,1,1,1,1,1}{1,2,n-2,n-1,n}
+\EP{E}{6}{1,1,1,1,1,1}{1,...,5}
+\EP*{E}{7}{1,1,1,1,1,1,1}{6,...,1}
+\EP{E}{7}{1,1,1,1,1,1,1}{1,...,6}
+\EP*{E}{8}{1,1,1,1,1,1,1,1}{7,...,1}
+\EP{E}{8}{1,1,1,1,1,1,1,1}{1,...,7}
+\EP{G}{2}{1,3}{,1}
+\EP{G}{2}{1,3}{1}
+\EP{B}{**.*.**}{2,2,2,2,1}{,1,2,n-1,n}
+\EP{F}{4}{1,1,2,2}{,3,2,1}
+\EP{C}{3}{1,1,2}{,2,1}
+\EP{C}{**.***}{1,1,1,1,2}{,1,n-2,n-1,n}
+\EP*{B}{3}{2,2,1}{1,2}
+\EP{F}{4}{1,1,2,2}{1,2,3}
+\EP{D}{**.****}{1,1,1,1,1,1}{1,2,n-2,n-2,n,n}
+\EP{E}{6}{1,1,1,1,1,1}{1,2,3,4,,5}
+\EP{E}{6}{1,1,1,1,1,1}{1,2,3,5,,4}
+\EP*{E}{7}{1,1,1,1,1,1,1}{,5,...,1,6}
+\EP*{E}{7}{1,1,1,1,1,1,1}{,6,4,3,2,1,5}
+\EP*{E}{8}{1,1,1,1,1,1,1,1}{,6,...,1,7}
+\EP*{E}{8}{1,1,1,1,1,1,1,1}{,7,5,4,3,2,1,6}
+\EP*{E}{7}{1,1,1,1,1,1,1}{5,...,1,,6}
+\EP*{E}{7}{1,1,1,1,1,1,1}{1,...,5,,6}
+\EP*{E}{8}{1,1,1,1,1,1,1,1}{6,...,1,,7}
+\end{longtable}
+\end{filecontents*}
+{\input{EulerProducts}}\VerbatimInput{EulerProducts.tex}
+
+\section{Style}
+\begin{tcblisting}{title={Colours}}
+\dynkin[
+ edge/.style={blue!50,thick},
+ */.style=blue!50!red,
+ arrow color=red]{F}{4}
+\end{tcblisting}
+\begin{tcblisting}{title={Edge lengths}}
+The Dynkin diagram of \(A_3\) is \dynkin[edge length=1.2,parabolic=3]{A}{3}
+\end{tcblisting}
+\begin{tcblisting}{title={Root marks}}
+\dynkin{E}{8}
+\dynkin[mark=*]{E}{8}
+\dynkin[mark=o]{E}{8}
+\dynkin[mark=O]{E}{8}
+\dynkin[mark=t]{E}{8}
+\dynkin[mark=x]{E}{8}
+\dynkin[mark=X]{E}{8}
+\end{tcblisting}
+At the moment, you can only use:
+\par\noindent\begin{tabular}{>{\ttfamily}cl}
+* & solid dot \\
+o & hollow circle \\
+O & double hollow circle \\
+t & tensor root \\
+x & crossed root \\
+X & thickly crossed root
+\end{tabular}
+\begin{tcblisting}{title={Mark styles}}
+The parabolic subgroup \(E_{8,124}\) is \dynkin[parabolic=124,x/.style={brown,very thick}]{E}{8}
+\end{tcblisting}
+\begin{tcblisting}{title={Sizes of root marks}}
+\(A_{3,3}\) with big root marks is \dynkin[root radius=.08cm,parabolic=3]{A}{3}
+\end{tcblisting}
+
+
+\section{Suppress or reverse arrows}
+\begin{tcblisting}{title={Some diagrams have double or triple edges}}
+\dynkin{F}{4}
+\dynkin{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Suppress arrows}}
+\dynkin[arrows=false]{F}{4}
+\dynkin[arrows=false]{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Reverse arrows}}
+\dynkin[reverse arrows]{F}{4}
+\dynkin[reverse arrows]{G}{2}
+\end{tcblisting}
+
+
+\section{Backwards and upside down}
+
+\begin{tcblisting}{title={Default}}
+\dynkin{E}{8}
+\dynkin{F}{4}
+\dynkin{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Backwards}}
+\dynkin[backwards]{E}{8}
+\dynkin[backwards]{F}{4}
+\dynkin[backwards]{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Reverse arrows}}
+\dynkin[reverse arrows]{F}{4}
+\dynkin[reverse arrows]{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Backwards, reverse arrows}}
+\dynkin[backwards,reverse arrows]{F}{4}
+\dynkin[backwards,reverse arrows]{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Backwards versus upside down}}
+\dynkin[label]{E}{8}
+\dynkin[label,backwards]{E}{8}
+\dynkin[label,upside down]{E}{8}
+\dynkin[label,backwards,upside down]{E}{8}
+\end{tcblisting}
+
+
+\section{Drawing on top of a Dynkin diagram}
+
+\begin{tcblisting}{title={TikZ can access the roots themselves}}
+\begin{dynkinDiagram}{A}{4}
+ \fill[white,draw=black] (root 2) circle (.15cm);
+ \fill[white,draw=black] (root 2) circle (.1cm);
+ \draw[black] (root 2) circle (.05cm);
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Draw curves between the roots}}
+\begin{dynkinDiagram}[label]{E}{8}
+ \draw[very thick, black!50,-latex]
+ (root 3.south) to [out=-45, in=-135] (root 6.south);
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{title={Change marks}}
+\begin{dynkinDiagram}[mark=o,label]{E}{8}
+ \dynkinRootMark{*}{5}
+ \dynkinRootMark{*}{8}
+\end{dynkinDiagram}
+\end{tcblisting}
+
+
+\section{Mark lists}
+
+The package allows a list of root marks instead of a rank:
+
+\begin{tcblisting}{title={A mark list}}
+\dynkin{E}{oo**ttxx}
+\end{tcblisting}
+The mark list \verb!oo**ttxx! has one mark for each root: \verb!o!, \verb!o!, \dots, \verb!x!.
+Roots are listed in the current default ordering.
+(Careful: in an affine root system, a mark list will \emph{not} contain a mark for root zero.)
+
+If you need to repeat a mark, you can give a \emph{single digit} positive integer to indicate how many times to repeat it.
+\begin{tcblisting}{title={A mark list with repetitions}}
+\dynkin{A}{x4o3t4}
+\end{tcblisting}
+
+\NewDocumentCommand\ClassicalLieSuperalgebras{om}%
+{%
+\IfValueT{#1}{\tikzset{/Dynkin diagram,root radius=#1}}
+\RenewDocumentCommand\wdtE{}{10cm}
+\begin{dynkinTable}{Classical Lie superalgebras \cite{Frappat/Sciarrino/Sorba:1989}. #2}{3.5cm}{6.5cm}
+\IfValueT{#1}{
+& & \texttt{\textbackslash{}tikzset\{/Dynkin diagram,root radius=#1\}} \\
+}
+A_{mn} & \dynk{A}{o3.oto.oo}
+B_{mn} & \dynk{B}{o3.oto.oo}
+B_{0n} & \dynk{B}{o3.o3.o*}
+C_{n} & \dynk{C}{too.oto.oo}
+D_{mn} & \dynk{D}{o3.oto.o4}
+D_{21\alpha} & \dynk{A}{oto}
+F_4 & \dynk{F}{ooot}
+G_3 & \dynk[extended,affine mark=t,
+reverse arrows]{G}{2}
+\end{dynkinTable}
+\IfValueT{#1}{\tikzset{/Dynkin diagram,root radius=.05cm}}
+}%
+
+\ClassicalLieSuperalgebras[.07cm]{We need a slightly larger root radius parameter to distinguish the tensor product symbols from the solid dots.}
+
+\ClassicalLieSuperalgebras{Here we see the problem with using the default root radius parameter, which is too small for tensor product symbols.}
+
+
+
+\section{Indefinite edges}
+
+An \emph{indefinite edge} is a dashed edge between two roots, \dynkin{A}{*.*} indicating that an indefinite number of roots have been omitted from the Dynkin diagram.
+In between any two entries in a mark list, place a period to indicate an indefinite edge:
+\begin{tcblisting}{title={Indefinite edges}}
+\dynkin{D}{o.o*.*.t.to.t}
+\end{tcblisting}
+
+In certain diagrams, roots may have an edge between them even though they are not subsequent in the ordering.
+For such rare situations, there is an option:
+\begin{tcblisting}{title={Indefinite edge option}}
+\dynkin[make indefinite edge={3-5},label]{D}{5}
+\end{tcblisting}
+\begin{tcblisting}{title={Give a list of edges to become indefinite}}
+\dynkin[make indefinite edge/.list={1-2,3-5},label]{D}{5}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Indefinite edge style}}
+\dynkin[indefinite edge/.style={draw=black,fill=white,thin,densely dashed},%
+ edge length=1cm,%
+ make indefinite edge={3-5}]
+ {D}{5}
+\end{tcblisting}
+
+\begin{tcblisting}{title={The ratio of the lengths of indefinite edges to those of other edges}}
+\dynkin[edge length = .5cm,%
+ indefinite edge ratio=3,%
+ make indefinite edge={3-5}]
+ {D}{5}
+\end{tcblisting}
+
+
+\begingroup
+\RenewDocumentCommand\wdtA{}{.35cm}
+\RenewDocumentCommand\wdtE{}{6.55cm}
+\begin{dynkinTable}{Springer's table of indices \cite{Springer:2009}, pp. 320-321, with one form of \(E_7\) corrected}{2.5cm}{3.7cm}
+% 1
+A_n &
+\multicolumn{2}{E}{
+\begin{dynkinDiagram}{A}{o.o*o.o*o.o}
+\dynkinLabelRoot{3}{d}
+\dynkinLabelRoot{6}{n-d}
+\end{dynkinDiagram}
+}
+\\
+% 2
+A_n &
+\multicolumn{2}{E}{
+\begin{dynkinDiagram}{A}{o.o*o.o*o.o*o.o*o.o}
+\dynkinLabelRoot{3}{d}
+\dynkinLabelRoot{6}{rd}
+\dynkinLabelRoot{9}{n-rd}
+\dynkinLabelRoot{12}{n-d}
+\end{dynkinDiagram}
+}
+\\
+% 3
+B_n &
+\multicolumn{2}{E}{
+\begin{dynkinDiagram}{B}{**.*.o.oo}
+\dynkinLabelRoot{3}{r}
+\end{dynkinDiagram}
+}
+\\
+% 4
+C_n &
+\multicolumn{2}{E}{
+\begin{dynkinDiagram}{C}{o.o*o.o*o.oo}
+\dynkinLabelRoot{3}{d}
+\dynkinLabelRoot{6}{rd}
+\end{dynkinDiagram}
+}
+\\
+% 5
+D_n &
+\multicolumn{2}{E}{
+\begin{dynkinDiagram}{D}{o.o*o.o*o.ooo}
+\dynkinLabelRoot{3}{d}
+\dynkinLabelRoot{6}{rd}
+\end{dynkinDiagram}
+}
+\\
+% 6
+E_6 &
+\dynk{E}{*oooo*}
+% 7
+E_6 &
+\dynk{E}{o*o*oo}
+% 8
+E_6 &
+\dynk{E}{o*oooo}
+% 9
+E_6 &
+\dynk{E}{**ooo*}
+% 10
+E_7 &
+\dynk{E}{*oooooo}
+% 11
+E_7 &
+\dynk{E}{ooooo*o}
+% 12
+E_7 &
+\dynk{E}{oooooo*}
+% 13
+E_7 &
+\dynk{E}{*oooo*o}
+% 14 - corrected from Springer.
+E_7 &
+\dynk{E}{*oooo**}
+% 15
+E_7 &
+\dynk{E}{*o**o*o}
+% 16
+E_8 &
+\dynk{E}{*ooooooo}
+% 17
+E_8 &
+\dynk{E}{ooooooo*}
+% 18
+E_8 &
+\dynk{E}{*oooooo*}
+% 19
+E_8 &
+\dynk{E}{oooooo**}
+% 20
+E_8 &
+\dynk{E}{*oooo***}
+% 21
+F_4 &
+\dynk{F}{ooo*}
+% 22
+D_4 &
+\dynk{D}{o*oo}
+\end{longtable}
+\endgroup
+
+
+
+
+\section{Parabolic subgroups}
+
+Each set of roots is assigned a number, with each binary digit zero or one to say whether the corresponding root is crossed or not:
+\begin{tcblisting}{}
+The flag variety of pointed lines in
+projective 3-space is associated to
+the Dynkin diagram \dynkin[parabolic=3]{A}{3}.
+\end{tcblisting}
+
+\begin{filecontents*}{hermitian-symmetric-spaces.tex}
+\NewDocumentCommand\HSS{mommm}
+{#1&\IfNoValueTF{#2}{\dynkin{#3}{#4}}{\dynkin[parabolic=#2]{#3}{#4}}&#5\\}
+\renewcommand*{\arraystretch}{1.5}
+\begin{longtable}
+{>{\columncolor[gray]{.9}}>$l<$>{\columncolor[gray]{.9}}>$l<$>{\columncolor[gray]{.9}}l}
+\caption{The Hermitian symmetric spaces}\endfirsthead
+\caption{\dots continued}\\ \endhead
+\caption{continued \dots}\\ \endfoot
+\endlastfoot
+\HSS{A_n}{A}{**.*x*.**}{Grassmannian of $k$-planes in $\C{n+1}$}
+\HSS{B_n}[1]{B}{}{$(2n-1)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n+1}$}
+\HSS{C_n}[16]{C}{}{space of Lagrangian $n$-planes in $\C{2n}$}
+\HSS{D_n}[1]{D}{}{$(2n-2)$-dimensional hyperquadric, i.e. the variety of null lines in $\C{2n}$}
+\HSS{D_n}[32]{D}{}{one component of the variety of maximal dimension null subspaces of $\C{2n}$}
+\HSS{D_n}[16]{D}{}{the other component}
+\HSS{E_6}[1]{E}{6}{complexified octave projective plane}
+\HSS{E_6}[32]{E}{6}{its dual plane}
+\HSS{E_7}[64]{E}{7}{the space of null octave 3-planes in octave 6-space}
+\end{longtable}
+\end{filecontents*}
+\begingroup
+\input{hermitian-symmetric-spaces.tex}
+\endgroup
+\VerbatimInput{hermitian-symmetric-spaces.tex}
+
+\begin{tcblisting}{title={Folded parabolics look bad (zoom in on a root)}}
+\dynkin[fold,parabolic=3]{C}{2}
+\dynkin[fold,parabolic=3]{G}{2}
+\end{tcblisting}
+\begin{tcblisting}{title={Folded parabolics: you can try using thicker crosses}}
+\dynkin[fold,x/.style={very thick,line cap=round},parabolic=3]{C}{2}
+\dynkin[fold,x/.style={ultra thick,line cap=round},parabolic=3]{G}{2}
+\end{tcblisting}
+
+
+\section{Extended Dynkin diagrams}
+
+\begin{tcblisting}{title={Extended Dynkin diagrams}}
+\dynkin[extended]{A}{7}
+\end{tcblisting}
+
+
+The extended Dynkin diagrams are also described in the notation of Kac \cite{Kac:1990} p. 55 as affine untwisted Dynkin diagrams: we extend \verb!\dynkin{A}{7}! to become \verb!\dynkin{A}[1]{7}!:
+\begin{tcblisting}{title={Extended Dynkin diagrams}}
+\dynkin{A}[1]{7}
+\end{tcblisting}
+
+
+\renewcommand*{\arraystretch}{1.5}
+\begin{dynkinTable}{The Dynkin diagrams of the extended simple root systems}{3cm}{5cm}
+\dyn[extended]{A}{1}
+\dyn[extended]{A}{}
+\dyn[extended]{B}{}
+\dyn[extended]{C}{}
+\dyn[extended]{D}{}
+\dyn[extended]{E}{6}
+\dyn[extended]{E}{7}
+\dyn[extended]{E}{8}
+\dyn[extended]{F}{4}
+\dyn[extended]{G}{2}
+\end{dynkinTable}
+
+
+
+
+
+\section{Affine twisted and untwisted Dynkin diagrams}
+
+The affine Dynkin diagrams are described in the notation of Kac \cite{Kac:1990} p. 55:
+\begin{tcblisting}{title={Affine Dynkin diagrams}}
+\(A^{(1)}_7=\dynkin{A}[1]{7}, \
+E^{(2)}_6=\dynkin{E}[2]{6}, \
+D^{(3)}_4=\dynkin{D}[3]{4}\)
+\end{tcblisting}
+
+
+
+\begin{dynkinTable}{The affine Dynkin diagrams}{3cm}{3.75cm}
+\dyn{A}[1]{1}
+\dyn{A}[1]{}
+\dyn{B}[1]{}
+\dyn{C}[1]{}
+\dyn{D}[1]{}
+\dyn{E}[1]{6}
+\dyn{E}[1]{7}
+\dyn{E}[1]{8}
+\dyn{F}[1]{4}
+\dyn{G}[1]{2}
+\dyn{A}[2]{2}
+\dyn{A}[2]{even}
+\dyn{A}[2]{odd}
+\dyn{D}[2]{}
+\dyn{E}[2]{6}
+\dyn{D}[3]{4}
+\end{dynkinTable}
+
+\begin{dynkinTable}{Some more affine Dynkin diagrams}{3cm}{3.25cm}
+\dyn{A}[2]{4}
+\dyn{A}[2]{5}
+\dyn{A}[2]{6}
+\dyn{A}[2]{7}
+\dyn{A}[2]{8}
+\dyn{D}[2]{3}
+\dyn{D}[2]{4}
+\dyn{D}[2]{5}
+\dyn{D}[2]{6}
+\dyn{D}[2]{7}
+\dyn{D}[2]{8}
+\dyn{D}[3]{4}
+\dyn{E}[2]{6}
+\end{dynkinTable}
+
+
+
+
+\section{Extended Coxeter diagrams}
+
+\begin{tcblisting}{title={Extended and Coxeter options together}}
+\dynkin[extended,Coxeter]{F}{4}
+\end{tcblisting}
+
+
+\begin{dynkinTable}{The extended (affine) Coxeter diagrams}{3cm}{6cm}
+\dyn[extended,Coxeter]{A}{}
+\dyn[extended,Coxeter]{B}{}
+\dyn[extended,Coxeter]{C}{}
+\dyn[extended,Coxeter]{D}{}
+\dyn[extended,Coxeter]{E}{6}
+\dyn[extended,Coxeter]{E}{7}
+\dyn[extended,Coxeter]{E}{8}
+\dyn[extended,Coxeter]{F}{4}
+\dyn[extended,Coxeter]{G}{2}
+\dyn[extended,Coxeter]{H}{3}
+\dyn[extended,Coxeter]{H}{4}
+\dyn[extended,Coxeter]{I}{1}
+\end{dynkinTable}
+
+\section{Kac style}
+We include a style called \verb!Kac! which tries to imitate the style of \cite{Kac:1990}.
+\begin{tcblisting}{title={Kac style}}
+\dynkin[Kac]{F}{4}
+\end{tcblisting}
+\begingroup
+\pgfkeys{/Dynkin diagram,Kac}
+\begin{dynkinTable}{The Dynkin diagrams of the simple root systems in Kac style}{5cm}{4.5cm}
+\dyn{A}{}
+\dyn{B}{}
+\dyn{C}{}
+\dyn{D}{}
+\dyn{E}{6}
+\dyn{E}{7}
+\dyn{E}{8}
+\dyn{F}{4}
+\dyn{G}{2}
+\end{dynkinTable}
+\begin{dynkinTable}{The Dynkin diagrams of the extended simple root systems in Kac style}{5cm}{4.5cm}
+\dyn[extended]{A}{1}
+\dyn[extended]{A}{}
+\dyn[extended]{B}{}
+\dyn[extended]{C}{}
+\dyn[extended]{D}{}
+\dyn[extended]{E}{6}
+\dyn[extended]{E}{7}
+\dyn[extended]{E}{8}
+\dyn[extended]{F}{4}
+\dyn[extended]{G}{2}
+\end{dynkinTable}
+\begin{dynkinTable}{The Dynkin diagrams of the twisted simple root systems in Kac style}{6cm}{4.5cm}
+\dyn{A}[2]{2}
+\dyn{A}[2]{even}
+\dyn{A}[2]{odd}
+\dyn{D}[2]{}
+\dyn{E}[2]{6}
+\dyn{D}[3]{4}
+\end{dynkinTable}
+\endgroup
+
+\section{Ceref style}
+We include a style called \verb!ceref! which shapes the root markers more oblongly and with shadows.
+The word ``ceref'' is an old form of the word ``serif''.
+\begin{tcblisting}{title={Ceref style}}
+\dynkin[ceref]{F}{4}
+\end{tcblisting}
+\begingroup
+\pgfkeys{/Dynkin diagram,ceref}
+\begin{dynkinTable}{The Dynkin diagrams of the simple root systems in ceref style}{5cm}{4.5cm}
+\dyn{A}{}
+\dyn{B}{}
+\dyn{C}{}
+\dyn{D}{}
+\dyn{E}{6}
+\dyn{E}{7}
+\dyn{E}{8}
+\dyn{F}{4}
+\dyn{G}{2}
+\end{dynkinTable}
+\begin{dynkinTable}{The Dynkin diagrams of the extended simple root systems in ceref style}{5cm}{4.5cm}
+\dyn[extended]{A}{1}
+\dyn[extended]{A}{}
+\dyn[extended]{B}{}
+\dyn[extended]{C}{}
+\dyn[extended]{D}{}
+\dyn[extended]{E}{6}
+\dyn[extended]{E}{7}
+\dyn[extended]{E}{8}
+\dyn[extended]{F}{4}
+\dyn[extended]{G}{2}
+\end{dynkinTable}
+\begin{dynkinTable}{The Dynkin diagrams of the twisted simple root systems in ceref style}{6cm}{4.5cm}
+\dyn{A}[2]{2}
+\dyn{A}[2]{even}
+\dyn{A}[2]{odd}
+\dyn{D}[2]{}
+\dyn{E}[2]{6}
+\dyn{D}[3]{4}
+\end{dynkinTable}
+\endgroup
+
+
+\section{More on folded Dynkin diagrams}
+The Dynkin diagrams package has limited support for folding Dynkin diagrams.
+\begin{tcblisting}{title={Folding}}
+\dynkin[fold]{A}{13}
+\end{tcblisting}
+\begin{tcblisting}{title={Big fold radius}}
+\dynkin[fold,fold radius=1cm]{A}{13}
+\end{tcblisting}
+\begin{tcblisting}{title={Small fold radius}}
+\dynkin[fold,fold radius=.2cm]{A}{13}
+\end{tcblisting}
+Some Dynkin diagrams have multiple foldings, which we attempt to distinguish (not entirely successfully) by their \emph{ply}: the maximum number of roots folded together.
+Most diagrams can only allow a 2-ply folding, so \verb!fold! is a synonym for \verb!ply=2!.
+\begin{tcblisting}{title={3-ply}}
+\dynkin[ply=3]{D}{4}
+\dynkin[ply=3,fold right]{D}{4}
+\dynkin[ply=3]{D}[1]{4}
+\end{tcblisting}
+\begin{tcblisting}{title={4-ply}}
+\dynkin[ply=4]{D}[1]{4}
+\end{tcblisting}
+The \(D^{(1)}_{\ell}\) diagrams can be folded on their left end and separately on their right end:
+\begin{tcblisting}{title={Left, right and both}}
+\dynkin{D}[1]{} \
+\dynkin[fold left]{D}[1]{} \
+\dynkin[fold right]{D}[1]{} \
+\dynkin[fold]{D}[1]{}
+\end{tcblisting}
+We have to be careful about the 4-ply foldings of \(D^{(1)}_{2\ell}\), for which we can have two different patterns, so by default, the package only draws as much as it can without distinguishing the two:
+\begin{tcblisting}{title={Default \(D^{(1)}_{2\ell}\) and the two ways to finish it}}
+ \dynkin[ply=4]{D}[1]{****.*****.*****}%
+ \
+\begin{dynkinDiagram}[ply=4]{D}[1]{****.*****.*****}%
+ \dynkinFold[bend right=90]{1}{13}%
+ \dynkinFold[bend right=90]{0}{14}%
+\end{dynkinDiagram} \
+\begin{dynkinDiagram}[ply=4]{D}[1]{****.*****.*****}%
+ \dynkinFold{0}{1}%
+ \dynkinFold{1}{13}%
+ \dynkinFold{13}{14}%
+\end{dynkinDiagram}
+\end{tcblisting}
+\begingroup
+\RenewDocumentCommand\wdtA{}{.7cm}
+\RenewDocumentCommand\wdtD{}{3.5cm}
+\RenewDocumentCommand\wdtL{}{7cm}
+\NewDocumentCommand\seriesName{mmm}%
+{%
+ \IfStrEq{#2}{0}{#1_{#3}}{#1^{#2}_{#3}}%
+}%
+
+\NewDocumentCommand\foldingTable{smmmmmmmm}%
+{%
+\begin{tabular}{ADL}%
+\seriesName{#2}{#3}{#4}&#5
+\seriesName{#6}{#7}{#8}&\IfBooleanTF{#1}{\reflectbox{#9}}{#9}%
+\end{tabular}%
+\\ \hline
+}%
+\NewDocumentCommand\fold{smmmmmm}%
+{%
+ \IfBooleanTF{#1}%
+ {%
+ \foldingTable%
+ {#2}{#3}{#4}{\dynk[fold]{#2}[#3]{#4}}%
+ {#5}{#6}{#7}{\dynk[reverse arrows]{#5}[#6]{#7}}%
+ }%
+ {%
+ \foldingTable%
+ {#2}{#3}{#4}{\dynk[fold]{#2}[#3]{#4}}%
+ {#5}{#6}{#7}{\dynk{#5}[#6]{#7}}%
+ }%
+}%
+\begin{filecontents*}{DoneTwoElBendy.tex}
+\begin{dynkinDiagram}[ply=4]{D}[1]%
+{****.*****.*****}
+ \dynkinFold[bend right=90]{1}{13}
+ \dynkinFold[bend right=90]{0}{14}
+\end{dynkinDiagram}
+\end{filecontents*}
+\begin{filecontents*}{DoneTwoElStraight.tex}
+\begin{dynkinDiagram}[ply=4]{D}[1]%
+{****.*****.*****}
+ \dynkinFold{0}{1}
+ \dynkinFold{1}{13}
+ \dynkinFold{13}{14}
+\end{dynkinDiagram}
+\end{filecontents*}
+\pgfkeys{/Dynkin diagram,fold radius=.35cm}
+\begin{longtable}{@{}p{15cm}@{}}
+\caption{Some foldings of Dynkin diagrams. For these diagrams, we want to compare a folding diagram with the diagram that results when we fold it, so it looks best to set \texttt{fold radius} and \texttt{edge length} to equal lengths.}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{1}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\fold{A}{0}{3}{C}{0}{2}
+\foldingTable{A}{0}{2\ell-1}{\dynk[fold]{A}{**.*****.**}}%
+{C}{0}{\ell}{\dynk{C}{}}
+\fold*{B}{0}{3}{G}{0}{2}
+\foldingTable{D}{0}{4}{\dynk[ply=3,fold right]{D}{4}}%
+{G}{0}{2}{\dynk{G}{2}}
+\foldingTable{D}{0}{\ell+1}{\dynk[fold]{D}{}}%
+{B}{0}{\ell}{\dynk{B}{}}
+\fold*{E}{0}{6}{F}{0}{4}
+\foldingTable{A}{1}{3}{\dynk[ply=4]{A}[1]{3}}%
+{A}{1}{1}{\dynk{A}[1]{1}}
+\foldingTable{A}{1}{2\ell-1}{\dynk[fold]{A}[1]{**.*****.**}}%
+{C}{1}{\ell}{\dynk{C}[1]{}}
+\foldingTable{B}{1}{3}{\dynk[ply=3]{B}[1]{3}}%
+{A}{2}{2}{\dynk{A}[2]{2}}
+\foldingTable{B}{1}{3}{\dynk[ply=2]{B}[1]{3}}%
+{G}{1}{2}{\dynk{G}[1]{2}}
+\foldingTable{B}{1}{\ell}{\dynk[fold]{B}[1]{}}{D}{2}{\ell}{\dynk{D}[2]{}}
+\foldingTable{D}{1}{4}{\dynk[ply=3]{D}[1]{4}}%
+{B}{1}{3}{\dynk{B}[1]{3}}
+\foldingTable{D}{1}{4}{\dynk[ply=3]{D}[1]{4}}%
+{G}{1}{2}{\dynk{G}[1]{2}}
+\foldingTable{D}{1}{\ell+1}{\dynk[fold]{D}[1]{}}%
+{D}{2}{\ell}{\dynk{D}[2]{}}
+\foldingTable{D}{1}{\ell+1}{%
+\dynk[fold right]{D}[1]{}}%
+{B}{1}{\ell}{\dynk{B}[1]{}}
+\foldingTable{D}{1}{2\ell}{%
+\input{DoneTwoElStraight.tex}
+&
+\VerbatimInput{DoneTwoElStraight.tex} \\
+}%
+{A}{2}{\text{odd}}{\dynk{A}[2]{odd}}
+\foldingTable{D}{1}{2\ell}{%
+\input{DoneTwoElBendy.tex}
+&
+\VerbatimInput{DoneTwoElBendy.tex} \\
+}%
+{A}{2}{\text{even}}{\dynk{A}[2]{even}}
+\fold*{E}{1}{6}{F}{1}{4}
+\foldingTable{E}{1}{6}{\dynk[ply=3]{E}[1]{6}}%
+{D}{3}{4}{\dynk{D}[3]{4}}
+\fold{E}{1}{7}{E}{2}{6}
+\fold{F}{1}{4}{G}{1}{2}
+\foldingTable{A}{2}{\text{odd}}{%
+\dynk[odd,fold]{A}[2]{****.***}
+}%
+{A}{2}{\text{even}}{\dynk{A}[2]{even}}
+\foldingTable{D}{2}{3}{\dynk[fold]{D}[2]{3}}%
+{A}{2}{2}{\dynk{A}[2]{2}}
+\end{longtable}
+\endgroup
+\begingroup
+\RenewDocumentCommand\wdtA{}{.8cm}
+\begin{dynkinTable}{Frobenius fixed point subgroups of finite simple groups of Lie type \cite{Carter:1995} p. 15}{3cm}{6cm}
+A_{\ell\ge 1} & \dynk{A}{}
+{}^2\!A_{\ell\ge 2} & \dynk[fold]{A}{}
+B_{\ell\ge 2} & \dynk{B}{}
+{}^2\!B_2 & \dynk[fold]{B}{2}
+C_{\ell\ge3} & \dynk{C}{}
+D_{\ell\ge4} & \dynk{D}{}
+{}^2\!D_{\ell\ge4} & \dynk[fold]{D}{}
+{}^3\!D_4 & \dynk[ply=3]{D}{4}
+E_6 & \dynk{E}{6}
+{}^2\!E_6 & \dynk[fold]{E}{6}
+E_7 & \dynk{E}{7}
+E_8 & \dynk{E}{8}
+F_4 & \dynk{F}{4}
+{}^2\!F_4 & \dynk[fold]{F}{4}
+G_2 & \dynk{G}{2}
+{}^2G_2 & \dynk[fold]{G}{2}
+\end{dynkinTable}
+\endgroup
+
+\section{Root ordering}\label{section:order}
+\begin{tcblisting}{title={Root ordering}}
+\dynkin[label,ordering=Adams]{E}{6}
+\dynkin[label,ordering=Bourbaki]{E}{6}
+\dynkin[label,ordering=Carter]{E}{6}
+\dynkin[label,ordering=Dynkin]{E}{6}
+\dynkin[label,ordering=Kac]{E}{6}
+\end{tcblisting}
+Default is Bourbaki.
+Sources are Adams \cite{Adams:1996} p. 56--57, Bourbaki \cite{Bourbaki:2002} p. pp. 265--290 plates I-IX, Carter \cite{Carter:2005} p. 540--609, Dynkin \cite{Dynkin:1952}, Kac \cite{Kac:1990} p. 43.
+\NewDocumentCommand\tablerow{mm}%
+{%
+#1_{#2}&
+\dynkin[label,ordering=Adams]{#1}{#2}&
+\dynkin[label]{#1}{#2}&
+\dynkin[label,ordering=Carter]{#1}{#2}&
+\dynkin[label,ordering=Dynkin]{#1}{#2}&
+\dynkin[label,ordering=Kac]{#1}{#2}\\
+}%
+\begin{center}
+\RenewDocumentCommand\wdtA{}{.7cm}
+\RenewDocumentCommand\wdtL{}{2.2cm}
+\begin{longtable}{@{}ALLLLL@{}}
+\toprule
+& Adams & Bourbaki & Carter & Dynkin & Kac \\ \midrule
+\endfirsthead
+\toprule
+& Adams & Bourbaki & Carter & Dynkin & Kac \\ \midrule
+\endhead
+\bottomrule
+\endfoot
+\bottomrule
+\endlastfoot
+\tablerow{E}{6}\tablerow{E}{7}\tablerow{E}{8}\tablerow{F}{4}\tablerow{G}{2}
+\end{longtable}
+\end{center}
+The marks are set down in order according to the current root ordering:
+\begin{tcblisting}{}
+\dynkin[label]{E}{*otxXOt*}
+\dynkin[label,ordering=Carter]{E}{*otxXOt*}
+\dynkin[label,ordering=Kac]{E}{*otxXOt*}
+\end{tcblisting}
+
+\section{Connecting Dynkin diagrams}\label{section:name}
+We can make some sophisticated folded diagrams by drawing multiple diagrams, each with a name:
+\begin{tcblisting}{title={Name a diagram}}
+\dynkin[name=Bob]{D}{6}
+\end{tcblisting}
+We can then connect the two with folding edges:
+\begin{tcblisting}{title={Connect diagrams}}
+\begin{dynkinDiagram}[name=upper]{A}{3}
+ \node (current) at ($(upper root 1)+(0,-.3cm)$) {};
+ \dynkin[at=(current),name=lower]{A}{3}
+ \begin{scope}[on background layer]
+ \foreach \i in {1,...,3}%
+ {%
+ \draw[/Dynkin diagram/fold style]
+ ($(upper root \i)$)
+ -- ($(lower root \i)$);%
+ }%
+ \end{scope}
+\end{dynkinDiagram}
+\end{tcblisting}
+The following diagrams arise in the Satake diagrams of the pseudo-Riemannian symmetric spaces \cite{Baba:2009}.
+\begin{tcblisting}{}
+\pgfkeys{/Dynkin diagram,edge length=.5cm,fold radius=.5cm}
+\begin{tikzpicture}
+ \dynkin[name=1]{A}{IIIb}
+ \node (a) at (-.3,-.4){};
+ \dynkin[name=2,at=(a)]{A}{IIIb}
+ \begin{scope}[on background layer]
+ \foreach \i in {1,...,7}%
+ {%
+ \draw[/Dynkin diagram/fold style]
+ ($(1 root \i)$)
+ --
+ ($(2 root \i)$);%
+ }%
+ \end{scope}
+\end{tikzpicture}
+\end{tcblisting}
+\begin{tcblisting}{}
+\pgfkeys{/Dynkin diagram,
+edge length=.75cm,
+edge/.style={draw=example-color,double=black,very thick}}
+\begin{tikzpicture}
+ \foreach \d in {1,...,4}
+ {
+ \node (current) at ($(\d*.05,\d*.3)$){};
+ \dynkin[name=\d,at=(current)]{D}{oo.oooo}
+ }
+ \begin{scope}[on background layer]
+ \foreach \i in {1,...,6}%
+ {%
+ \draw[/Dynkin diagram/fold style] ($(1 root \i)$) -- ($(2 root \i)$);%
+ \draw[/Dynkin diagram/fold style] ($(2 root \i)$) -- ($(3 root \i)$);%
+ \draw[/Dynkin diagram/fold style] ($(3 root \i)$) -- ($(4 root \i)$);%
+ }%
+ \end{scope}
+\end{tikzpicture}
+\end{tcblisting}
+
+\section{Other examples}
+\begin{filecontents*}{d44.tex}
+\tikzset{/Dynkin diagram,edge length=1cm,fold radius=1cm}
+\tikzset{/Dynkin diagram,label macro/.code={\alpha_{#1}},label macro*/.code={\beta_{#1}}}
+\({}^1 D_4\) 4-ply tied straight:
+\begin{dynkinDiagram}[ply=4]{D}[1]%
+{****.*****.*****}
+ \dynkinFold{0}{1}
+ \dynkinFold{1}{13}
+ \dynkinFold{13}{14}
+\dynkinLabelRoots{0,...,14}
+\dynkinLabelRoots*{0,...,14}
+\end{dynkinDiagram}
+\({}^1 D_4\) 4-ply tied bending:
+\begin{dynkinDiagram}[ply=4]{D}[1]%
+{****.*****.*****}
+ \dynkinFold{1}{13}
+ \dynkinFold[bend right=65]{0}{14}
+\dynkinLabelRoots{0,...,14}
+\dynkinLabelRoots*{0,...,14}
+\end{dynkinDiagram}
+\end{filecontents*}
+\begingroup\input{d44}\endgroup
+\VerbatimInput{d44.tex}
+Below we draw the Vogan diagrams of some affine Lie superalgebras \cite{Ransingh:2013,Ransingh:unpub}.
+\begingroup
+\tikzset{/Dynkin diagram,edge length=.35cm,fold radius=.3cm}
+\NewDocumentCommand\labls{m}%
+{%
+ \ifcase#1%
+ {1}\or%
+ {1}\or%
+ {2}\or%
+ {2}\or%
+ {2}\or%
+ {2}\or%
+ {2}\or%
+ {1}\or%
+ {1}\or%
+ \else\typeout{What?}%
+ \fi%
+}%
+\NewDocumentCommand\lablIt{m}%
+{%
+ \ifnum#1=0\relax%
+ 1%
+ \else
+ 2%
+ \fi%
+}%
+\begingroup
+\tikzset{/Dynkin diagram,label macro/.code=\labls{#1},label,root radius=.06cm}
+\tcbset{text width=10cm}
+\RenewDocumentCommand\wdtA{}{2cm}
+\NewDocumentEnvironment{Category}{m}%
+{%
+\begin{tcolorbox}[title={\(#1\)},breakable]{}
+}%
+{%
+\end{tcolorbox}
+}%
+
+\begin{Category}{\mathfrak{sl}\left(2m|2n\right)^{(2)}}
+\begin{tcblisting}{}
+\begin{dynkinDiagram}[ply=2,label]{B}[1]{oo.oto.oo}
+ \dynkinLabelRoot*{7}{1}
+\end{dynkinDiagram}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oo.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{D}[1]{oO.otO.ooo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,fold]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{sl}\left(2m+1|2n\right)^2}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oo.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{B}[1]{oO.oto.oO}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,fold]{B}[1]{oo.oto.oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{sl}\left(2m+1|2n+1\right)^2}
+\begin{tcblisting}{}
+\dynkin[label]{D}[2]{o.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label]{D}[2]{o.OtO.oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{sl}\left(2|2n+1\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,double edges]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,double fold]{B}[1]{oo.Oto.Oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,double edges]{B}[1]{oo.OtO.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,double fold]{B}[1]{oo.OtO.oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{sl}\left(2|2n\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,double edges]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[ply=2,label,double fold left]{D}[1]{oo.oto.ooo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{osp}\left(2m|2n\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[label,label macro/.code={1}]{D}[2]{o.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,label macro/.code={1}]{D}[2]{o.Oto.Oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{osp}\left(2|2n\right)^{(2)}}
+\begin{tcblisting}{}
+\dynkin[label,label macro/.code=\lablIt{#1},
+ affine mark=*]
+ {D}[2]{o.o.o.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,label macro/.code=\lablIt{#1},
+ affine mark=*]
+ {D}[2]{o.O.o.o*}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{\mathfrak{sl}\left(1|2n+1\right)^{4}}
+\begin{tcblisting}{}
+\dynkin[label,label macro/.code={1}]{D}[2]{o.o.o.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[label,label macro/.code={1}]{D}[2]{o.o.O.o*}
+\end{tcblisting}
+\end{Category}
+
+
+\begin{Category}{A^1}
+\begin{tcblisting}{}
+\begin{tikzpicture}
+ \dynkin[name=upper]{A}{oo.t.oo}
+ \node (Dynkin current) at (upper root 1){};
+ \dynkinSouth
+ \dynkin[at=(Dynkin current),name=lower]{A}{oo.t.oo}
+ \begin{scope}[on background layer]
+ \foreach \i in {1,...,5}{
+ \draw[/Dynkin diagram/fold style]
+ ($(upper root \i)$) -- ($(lower root \i)$);
+ }
+ \end{scope}
+\end{tikzpicture}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[fold]{A}[1]{oo.t.ooooo.t.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[fold,affine mark=t]{A}[1]{oo.o.ootoo.o.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[affine mark=t]{A}[1]{o*.t.*o}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{B^1}
+\begin{tcblisting}{}
+\dynkin[affine mark=*]{A}[2]{o.oto.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[affine mark=*]{A}[2]{o.oto.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[affine mark=*]{A}[2]{o.ooo.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[odd]{A}[2]{oo.*to.*o}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[odd,fold]{A}[2]{oo.oto.oo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[odd,fold]{A}[2]{o*.oto.o*}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{D^1}
+\begin{tcblisting}{}
+\dynkin{D}{otoo}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin{D}{ot*o}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[fold]{D}{otoo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{C^1}
+\begin{tcblisting}{}
+\dynkin[double edges,fold,affine mark=t,odd]{A}[2]{to.o*}
+\end{tcblisting}
+\begin{tcblisting}{}
+\dynkin[double edges,fold,affine mark=t,odd]{A}[2]{t*.oo}
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{F^1}
+\begin{tcblisting}{}
+\begin{dynkinDiagram}{A}{oto*}%
+ \dynkinQuadrupleEdge{1}{2}%
+ \dynkinTripleEdge{4}{3}%
+\end{dynkinDiagram}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{dynkinDiagram}{A}{*too}%
+ \dynkinQuadrupleEdge{1}{2}%
+ \dynkinTripleEdge{4}{3}%
+\end{dynkinDiagram}%
+\end{tcblisting}
+\end{Category}
+
+\begin{Category}{G^1}
+\begin{tcblisting}{}
+\begin{dynkinDiagram}{A}{ot*oo}%
+ \dynkinQuadrupleEdge{1}{2}%
+ \dynkinDefiniteDoubleEdge{4}{3}%
+\end{dynkinDiagram}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{dynkinDiagram}{A}{oto*o}%
+ \dynkinQuadrupleEdge{1}{2}%
+ \dynkinDefiniteDoubleEdge{4}{3}%
+\end{dynkinDiagram}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{dynkinDiagram}{A}{*too*}%
+ \dynkinQuadrupleEdge{1}{2}%
+ \dynkinDefiniteDoubleEdge{4}{3}%
+\end{dynkinDiagram}%
+\end{tcblisting}
+\begin{tcblisting}{}
+\begin{dynkinDiagram}{A}{*tooo}%
+ \dynkinQuadrupleEdge{1}{2}%
+ \dynkinDefiniteDoubleEdge{4}{3}%
+\end{dynkinDiagram}%
+\end{tcblisting}
+\end{Category}
+\endgroup
+
+\section{Example: the complex simple Lie algebras}
+\begin{filecontents*}{simple-lie-algebras.tex}
+\NewDocumentEnvironment{bunch}{}%
+{\renewcommand*{\arraystretch}{1}\begin{array}{@{}ll@{}}\\ \midrule}{\\ \midrule\end{array}}
+\small
+\NewDocumentCommand\nct{mm}{\newcolumntype{#1}{>{\columncolor[gray]{.9}}>{$}m{#2cm}<{$}}}
+\nct{G}{.3}\nct{D}{2.1}\nct{W}{3}\nct{R}{3.7}\nct{S}{3}
+\NewDocumentCommand\LieG{}{\mathfrak{g}}
+\NewDocumentCommand\W{om}{\ensuremath{\mathbb{Z}^{#2}\IfValueT{#1}{/\left<#1\right>}}}
+\renewcommand*{\arraystretch}{1.5}
+\NewDocumentCommand\quo{}{\text{quotient of } E_8}
+\begin{longtable}{@{}GDWRS@{}}
+\LieG&\text{Diagram}&\text{Weights}&\text{Roots}&\text{Simple roots}\\ \midrule\endfirsthead
+\LieG&\text{Diagram}&\text{Weights}&\text{Roots}&\text{Simple roots}\\ \midrule\endhead
+A_n&\dynkin{A}{}&\frac{1}{r+1}\W[\sum e_j]{n+1}&e_i-e_j&e_i-e_{i+1}\\
+B_n&\dynkin{B}{}&\frac{1}{2}\W{n}& \pm e_i, \pm e_i \pm e_j, i\ne j&e_i-e_{i+1}, e_n\\
+C_n&\dynkin{C}{}&\W{n}& \pm 2 e_i, \pm e_i \pm e_j, i\ne j&e_i-e_{i+1}, 2e_n\\
+D_n&\dynkin{D}{}&\frac{1}{2}\W{n}& \pm e_i \pm e_j, i\ne j &
+\begin{bunch}e_i-e_{i+1},&i\le n-1\\e_{n-1}+e_n\end{bunch}\\
+E_8&\dynkin{E}{8}&\frac{1}{2}\W{8}&
+\begin{bunch}\pm2e_i\pm2e_j,&i\ne j,\\ \sum_i(-1)^{m_i}e_i,&\sum m_i \text{ even}\end{bunch}&
+\begin{bunch}
+2e_1-2e_2,\\2e_2-2e_3,\\2e_3-2e_4,\\2e_4-2e_5,\\2e_5-2e_6,\\2e_6+2e_7,\\
+-\sum e_j,\\2e_6-2e_7
+\end{bunch}\\
+E_7&\dynkin{E}{7}&\frac{1}{2}\W[e_1-e_2]{8}&\quo&\quo\\
+E_6&\dynkin{E}{6}&\frac{1}{3}\W[e_1-e_2,e_2-e_3]{8}&\quo&\quo\\
+F_4& \dynkin{F}{4}&\W{4}&
+\begin{bunch}\pm 2e_i,\\ \pm 2e_i \pm 2e_j, \quad i \ne j,\\ \pm e_1 \pm e_2 \pm e_3 \pm e_4
+\end{bunch}&
+\begin{bunch}2e_2-2e_3,\\2e_3-2e_4,\\2e_4,\\e_1-e_2-e_3-e_4\end{bunch}\\
+G_2&\dynkin{G}{2}&\W[\sum e_j]{3}&
+\begin{bunch}
+\pm(1,-1,0),\\ \pm(-1,0,1),\\ \pm(0,-1,1),\\ \pm(2,-1,-1),\\ \pm(1,-2,1),\\ \pm(-1,-1,2)
+\end{bunch}&
+\begin{bunch}(-1,0,1),\\(2,-1,-1)\end{bunch}
+\end{longtable}
+\end{filecontents*}
+\begingroup
+\input{simple-lie-algebras.tex}
+\endgroup
+\VerbatimInput{simple-lie-algebras.tex}
+
+\section{An example of Mikhail Borovoi}
+\begin{filecontents*}{borovoi.tex}
+\tikzset{big arrow/.style={
+ -Stealth,line cap=round,line width=1mm,
+ shorten <=1mm,shorten >=1mm}}
+\newcommand\catholic[2]{\draw[big arrow,green!25!white]
+(root #1) to (root #2);}
+\newcommand\protestant[2]{
+\begin{scope}[transparency group, opacity=.25]
+\draw[big arrow,orange] (root #1) to (root #2);
+\end{scope}}
+\begin{dynkinDiagram}[edge length=1.2cm,
+indefinite edge/.style={thick,loosely dotted},
+labels*={0,1,2,3,\ell-3,\ell-2,\ell-1,\ell}]{D}[1]{}
+\catholic{0}{6}\catholic{1}{7}
+\protestant{7}{0}\protestant{6}{1}
+\end{dynkinDiagram}
+\end{filecontents*}
+\begingroup
+\begin{center}
+\input{borovoi.tex}
+\end{center}
+\endgroup
+\VerbatimInput{borovoi.tex}
+\newpage
+
+
+\section{Syntax}
+The syntax is \verb!\dynkin[<options>]{<letter>}[<twisted rank>]{<rank>}! where \verb!<letter>! is \verb!A!, \verb!B!, \verb!C!, \verb!D!, \verb!E!, \verb!F! or \verb!G!, the family of root system for the Dynkin diagram, \verb!<twisted rank>! is \verb!0!, \verb!1!, \verb!2!, \verb!3! (default is \verb!0!) representing:
+\[
+\renewcommand*{\arraystretch}{1}
+\begin{array}{rp{8cm}}
+0 & finite root system \\ \hline
+1 & affine extended root system, i.e. of type \({}^{(1)}\) \\
+2 & affine twisted root system of type \({}^{(2)}\) \\
+3 & affine twisted root system of type \({}^{(3)}\) \\
+\end{array}
+\]
+and \verb!<rank>! is
+\begin{enumerate}
+\item
+an integer representing the rank or
+\item
+blank to represent an indefinite rank or
+\item
+the name of a Satake diagram as in section~\ref{section:Satake}.
+\end{enumerate}
+The environment syntax is \verb!\begin{dynkinDiagram}! followed by the same parameters as \verb!\dynkin!, then various Dynkin diagram and \TikZ{} commands, and then \verb!\end{dynkinDiagram}!.
+
+\section{Options}
+\newcommand*{\typ}[1]{\(\left<\texttt{#1}\right>\)}
+\newcommand*{\optionLabel}[3]{%%
+\multicolumn{2}{l}{\(\texttt{#1}=\texttt{#2}\),} \\
+\multicolumn{2}{l}{\(\textrm{default}: \texttt{#3}\)} \\
+}%%
+\renewcommand*{\arraystretch}{1}
+\par\noindent%
+\begin{longtable}{p{1cm}p{10cm}}
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{2}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\optionLabel{ceref}{\typ{true or false}}{false}
+& whether to draw roots in a ``ceref'' style. \\
+\optionLabel{edge length}{\typ{number}cm}{.35cm}
+& distance between nodes in the Dynkin diagram \\
+\optionLabel{edge/.style}{TikZ style data}{solid,draw=black,fill=white,thin}
+& style of edges in the Dynkin diagram \\
+\optionLabel{Kac}{\typ{true or false}}{false}
+& whether to draw in the style of \cite{Kac:1990} \\
+\optionLabel{name}{\typ{string}}{anonymous}
+& A name for the Dynkin diagram, with \texttt{anonymous} treated as a blank; see section~\ref{section:name}. \\
+\optionLabel{parabolic}{\typ{integer}}{0}
+& A parabolic subgroup with specified integer, where the integer
+is computed as \(n=\sum 2^{i-1} a_i\), \(a_i=0\) or \(1\), to say that root \(i\) is crossed, i.e. a noncompact root. \\
+\optionLabel{root radius}{\typ{number}cm}{.05cm}
+& size of the dots and of the crosses in the Dynkin diagram \\
+\optionLabel{text/.style}{\typ{TikZ style data}}{scale=.7}
+& Style for any labels on the roots. \\
+\optionLabel{mark}{\typ{o,O,t,x,X,*}}{*}
+& default root mark \\
+\optionLabel{affine mark}{o,O,t,x,X,*}{*}
+& default root mark for root zero in an affine Dynkin diagram \\
+\optionLabel{label}{true or false}{false}
+& whether to label the roots according to the current labelling scheme. \\
+\optionLabel{label macro}{\typ{1-parameter \TeX{} macro}}{\texttt{\#1}}
+& the current labelling scheme for roots. \\
+\optionLabel{label macro*}{\typ{1-parameter \TeX{} macro}}{\texttt{\#1}}
+& the current labelling scheme for alternate roots. \\
+\optionLabel{make indefinite edge}{\typ{edge pair \(i\)-\(j\) or list of such}}{\{\}}
+& edge pair or list of edge pairs to treat as having indefinitely many roots on them. \\
+\optionLabel{indefinite edge ratio}{\typ{float}}{1.6}
+& ratio of indefinite edge lengths to other edge lengths. \\
+\optionLabel{indefinite edge/.style}{\typ{TikZ style data}}{solid,draw=black,fill=white,thin,densely dotted}
+& style of the dotted or dashed middle third of each indefinite edge. \\
+\optionLabel{backwards}{\typ{true or false}}{false}
+& whether to reverse right to left. \\
+\optionLabel{upside down}{\typ{true or false}}{false}
+& whether to reverse up to down. \\
+\optionLabel{arrows}{\typ{true or false}}{true}
+& whether to draw the arrows that arise along the edges. \\
+\optionLabel{reverse arrows}{\typ{true or false}}{true}
+& whether to reverse the direction of the arrows that arise along the edges. \\
+\optionLabel{fold}{\typ{true or false}}{true}
+& whether, when drawing Dynkin diagrams, to draw them 2-ply. \\
+\optionLabel{ply}{\typ{0,1,2,3,4}}{0}
+& how many roots get folded together, at most. \\
+\optionLabel{fold left}{\typ{true or false}}{true}
+& whether to fold the roots on the left side of a Dynkin diagram. \\
+\optionLabel{fold right}{\typ{true or false}}{true}
+& whether to fold the roots on the right side of a Dynkin diagram. \\
+\optionLabel{fold radius}{\typ{length}}{.3cm}
+& the radius of circular arcs used in curved edges of folded Dynkin diagrams. \\
+\optionLabel{fold style/.style}{\typ{TikZ style data}}{solid,draw=black!40,fill=none,line width=radius}
+& when drawing folded diagrams, style for the fold indicators. \\
+\optionLabel{*/.style}{\typ{TikZ style data}}{solid,draw=black,fill=black}
+& style for roots like \dynkin{A}{*} \\
+\optionLabel{o/.style}{\typ{TikZ style data}}{solid,draw=black,fill=black}
+& style for roots like \dynkin{A}{o} \\
+\optionLabel{O/.style}{\typ{TikZ style data}}{solid,draw=black,fill=black}
+& style for roots like \dynkin{A}{O} \\
+\optionLabel{t/.style}{\typ{TikZ style data}}{solid,draw=black,fill=black}
+& style for roots like \dynkin{A}{t} \\
+\optionLabel{x/.style}{\typ{TikZ style data}}{solid,draw=black,line cap=round}
+& style for roots like \dynkin{A}{x} \\
+\optionLabel{X/.style}{\typ{TikZ style data}}{solid,draw=black,thick,line cap=round}
+& style for roots like \dynkin{A}{X} \\
+\optionLabel{fold left style/.style}{\typ{TikZ style data}}{}
+& style to override the \texttt{fold} style when folding roots together on the left half of a Dynkin diagram \\
+\optionLabel{fold right style/.style}{\typ{TikZ style data}}{}
+& style to override the \texttt{fold} style when folding roots together on the right half of a Dynkin diagram \\
+\optionLabel{double edges}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together in a Dynkin diagram, so that the foldings
+are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows). \\
+\optionLabel{double fold}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together in a Dynkin diagram, so that the foldings
+are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows), but filled in solidly. \\
+\optionLabel{double left}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together at the left side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows). \\
+\optionLabel{double fold left}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together at the left side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows), but filled in solidly. \\
+\optionLabel{double right}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together at the right side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows). \\
+\optionLabel{double fold right}{\typ{}}{not set}
+& set to override the \texttt{fold} style when folding roots together at the right side of a Dynkin diagram, so that the foldings are indicated with double edges (like those of an \(F_4\) Dynkin diagram without arrows), but filled in solidly.
+\\
+\optionLabel{arrow color}{\typ{}}{black}
+& set to override the default color for the arrows in nonsimply laced Dynkin diagrams. \\
+\optionLabel{Coxeter}{\typ{true or false}}{false}
+& whether to draw a Coxeter diagram, rather than a Dynkin diagram. \\
+\optionLabel{ordering}{\typ{Adams, Bourbaki, Carter, Dynkin, Kac}}{Bourbaki}
+& which ordering of the roots to use in exceptional root systems as in section~\ref{section:order}. \\
+\end{longtable}
+\par\noindent{}All other options are passed to TikZ.
+
+\nocite{*}
+\bibliographystyle{amsplain}
+\bibliography{dynkin-diagrams}
+\end{document}
diff --git a/graphics/pgf/contrib/fast b/graphics/pgf/contrib/fast
new file mode 120000
index 0000000000..c92243bf64
--- /dev/null
+++ b/graphics/pgf/contrib/fast
@@ -0,0 +1 @@
+fast-diagram \ No newline at end of file
diff --git a/graphics/pgf/contrib/fast-diagram/README b/graphics/pgf/contrib/fast-diagram/README
new file mode 100644
index 0000000000..95cf9c1ef5
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/README
@@ -0,0 +1,33 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package fast-diagram.sty
+%
+% Version 1.1 (27/02/13)
+% Ce package est destiné à réaliser facilement des diagrammes FAST
+% (voir http://fr.wikipedia.org/wiki/Function_Analysis_System_Technique ).
+%
+% Réalisé par Raphaël ALLAIS (Lycée G.Eiffel de Dijon),
+% avec l'importante contribution de Yannick Le Bras (Lycée Montesquieu du Mans)
+% et les conseils de Robert Papanicola (Lycée Jacques Amyot d'Auxerre)
+% et de Xavier Pessoles (Lycée Rouvière de Toulon).
+%
+% Ce package est proposé en licence LPPL (LaTeX Project Public License), version 1.3c 2008-05-04.
+% Cela implique que vous pouvez UTILISER ce package autant que vous le voulez,
+% mais que vous ne pouvez le MODIFIER que SOUS UN AUTRE NOM (créer un dérivé).
+% Toutefois, je suis totalement ouvert à toute contribution.
+% Je souhaite juste être prévenu si vous souhaitez apporter votre pierre à l'édifice.
+%
+% Pour toute question/conseil/commentaire/reproche/menace de mort ou autre :
+% allais.raphael -arobase- free.fr
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Mise à jour :
+% V1.0 (25/02/13) :
+% Uplaod du package "FAST.sty"
+% V1.1 (27/02/13) :
+% Renommage du package en "fast-diagram.sty"
+% ainsi que pour l'appel du package (\usepackage{fast-diagram})
+% Changement des noms des commandes (ex : \FASTFT --> \fastFT).
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/graphics/pgf/contrib/fast-diagram/fast-diagram.sty b/graphics/pgf/contrib/fast-diagram/fast-diagram.sty
new file mode 100644
index 0000000000..d5ddbbc2c1
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/fast-diagram.sty
@@ -0,0 +1,340 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package fast-diagram.sty
+%
+% Version 1.1 (27/02/13)
+% Ce package est destiné à réaliser facilement des diagrammes FAST
+% (voir http://fr.wikipedia.org/wiki/Function_Analysis_System_Technique ).
+%
+% Réalisé par Raphaël ALLAIS (Lycée G.Eiffel de Dijon),
+% avec l'importante contribution de Yannick Le Bras (Lycée Montesquieu du Mans)
+% et les conseils de Robert Papanicola (Lycée Jacques Amyot d'Auxerre)
+% et de Xavier Pessoles (Lycée Rouvière de Toulon).
+%
+% Ce package est proposé en licence LPPL (LaTeX Project Public License), version 1.3c 2008-05-04.
+% Cela implique que vous pouvez UTILISER ce package autant que vous le voulez,
+% mais que vous ne pouvez le MODIFIER que SOUS UN AUTRE NOM (créer un dérivé).
+% Toutefois, je suis totalement ouvert à toute contribution.
+% Je souhaite juste être prévenu si vous souhaitez apporter votre pierre à l'édifice.
+%
+% Pour toute question/conseil/commentaire/reproche/menace de mort ou autre :
+% allais.raphael -arobase- free.fr
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Mise à jour :
+% V1.0 (25/02/13) :
+% Uplaod du package "FAST.sty"
+% V1.1 (27/02/13) :
+% Renommage du package en "fast-diagram.sty"
+% ainsi que pour l'appel du package (\usepackage{fast-diagram})
+% Changement des noms des commandes (ex : \FASTFT --> \fastFT).
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Entête
+%-----------------------------------------
+%% Informations générales
+%-----------------------------------------
+\NeedsTeXFormat{LaTeX2e}[1999/01/01]
+\ProvidesPackage{fast-diagram}[2013/02/27]
+
+
+
+
+
+%% Chargement des extensions
+%--------------------------------------
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+\usetikzlibrary{calc,fit,shapes}
+\RequirePackage{relsize}
+\RequirePackage{xargs}
+
+\newif\if@fastRaccourcis \@fastRaccourcisfalse
+\DeclareOption{raccourcis} {\@fastRaccourcistrue}
+\ProcessOptions
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Paramètres divers
+%--------------------------
+%Dimentsions
+%........................
+
+\newcommand*{\fastInterligne} {} %Longueur d'interligne
+\newcommand*{\fastEspaceColonne} {} %Espace entre colonne (de coin supérieur droit à coin supérieur droit)
+\newcommand*{\fastLargeurBoite} {} %Largeur des boites
+\newcommand*{\fastHauteurBoite} {} %Largeur des boites
+\newcommand*{\fastDecalageTrait} {} %Décalage des connecteur vers le bas, par rapport au sommet de la boite
+\newcommand*{\fastDecalageOuVertical} {} %Décalage vertical du connecteur ``OU''
+\newcommand*{\fastDecalageOuHorizontal} {} %Décalage horizontal du connecteur ``OU''
+
+%Styles
+%.........................
+\newcommand*{\fastFSarrondi} {} %Rayon des arrondis des angles de la boite ``fonction de service'' (la 1ere boite)
+\newcommand*{\fastFTarrondi} {} %Rayon des arrondis des angles de la boite ``fonction de technique''
+\newcommand*{\fastSTarrondi} {} %Rayon des arrondis des angles de la boite ``solution technique''
+\newcommand*{\fastFSStyle} {}
+\newcommand*{\fastFTStyle} {}
+\newcommand*{\fastSTStyle} {}
+\newcommand*{\fastFVStyle} {}
+\newcommand*{\fastFStexteStyle} {} %Style du texte de la boite ``fonction de service'' (la 1ere boite)
+\newcommand*{\fastFTtexteStyle} {} %Style du texte de la boite ``fonction de technique''
+\newcommand*{\fastSTtexteStyle} {} %Style du texte de la boite ``solution technique''
+\newcommand*{\fastFVtexteStyle} {} %Style du texte de la boite ``vide''
+\newcommand*{\fastEpaisseurTraits} {} %Epaisseur des traits
+%Couleurs
+%.......................................
+\definecolor{fastCouleurTexteFS}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service'' (la 1ere boite)
+\definecolor{fastCouleurBorduresFS}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service'' (la 1ere boite)
+\definecolor{fastCouleurFondFS}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service'' (la 1ere boite)
+\definecolor{fastCouleurTexteFT}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de technique''
+\definecolor{fastCouleurBorduresFT}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de technique''
+\definecolor{fastCouleurFondFT}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de technique''
+\definecolor{fastCouleurTexteST}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service''
+\definecolor{fastCouleurBorduresST}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service''
+\definecolor{fastCouleurFondST}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service''
+\definecolor{fastCouleurConnecteurs}{rgb}{0,0,0}%Couleur des connecteurs
+\definecolor{fastCouleurTexteFV}{rgb}{0,0,0} %Couleur du texte de la boite ``vide''
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\newcommand*{\fastSetCouleurBordures}[2][named] %Commande qui change les couleurs de toutes les bordures
+ {\definecolor{fastCouleurBorduresFS}{#1}{#2}
+ \definecolor{fastCouleurBorduresFT}{#1}{#2}
+ \definecolor{fastCouleurBorduresST}{#1}{#2}}
+
+\newcommand*{\fastSetCouleurTexte}[2][named] %Commande qui change la couleur du texte
+ {\definecolor{fastCouleurTexteFS}{#1}{#2}
+ \definecolor{fastCouleurTexteFT}{#1}{#2}
+ \definecolor{fastCouleurTexteST}{#1}{#2}
+ \definecolor{fastCouleurTexteFV}{#1}{#2}}
+
+\newcommand*{\fastSetCouleurFond}[2][named] %Commande qui change la couleur de tous les fonds de boite
+ {\definecolor{fastCouleurFondFS}{#1}{#2}
+ \definecolor{fastCouleurFondFT}{#1}{#2}
+ \definecolor{fastCouleurFondST}{#1}{#2}}
+
+\newcommand*{\fastSetCouleurConnecteurs}[2][named] %Commande qui change la couleur du texte
+ {\definecolor{fastCouleurConnecteurs}{rgb}{#1}}
+
+\newcommand*{\fastSetCouleurTraits}[2][named] %Commande qui change la couleur à la fois des bordures et des connecteurs
+ {\fastSetCouleurConnecteurs[#1]{#2}
+ \fastSetCouleurBordures[#1]{#2}}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Commandes internes
+%-----------------------------
+
+\newcommand*{\fastReset} %Remet tous les paramètres à zéro (utilisé une fois au début pour initialisé)
+ {
+ \renewcommand*{\fastInterligne} {0.5em}
+ \renewcommand*{\fastEspaceColonne} {10em}
+ \renewcommand*{\fastLargeurBoite} {7em}
+ \renewcommand*{\fastHauteurBoite} {0}
+ \renewcommand*{\fastDecalageTrait} {-0.6em}
+ \renewcommand*{\fastDecalageOuVertical} {0.4em}
+ \renewcommand*{\fastDecalageOuHorizontal} {-0.4em}
+ \renewcommand*{\fastFSarrondi} {0em}
+ \renewcommand*{\fastFTarrondi} {0em}
+ \renewcommand*{\fastSTarrondi} {0.5em}
+ \renewcommand*{\fastEpaisseurTraits} {0.05em}
+
+ \renewcommand*{\fastFStexteStyle} {\scalefont{1}\selectfont\bfseries}
+ \renewcommand*{\fastFTtexteStyle} {\smaller}
+ \renewcommand*{\fastSTtexteStyle} {\smaller\itshape}
+ \renewcommand*{\fastFVtexteStyle} {}
+ \renewcommand*{\fastFSStyle} {}
+ \renewcommand*{\fastFTStyle} {}
+ \renewcommand*{\fastSTStyle} {}
+ \renewcommand*{\fastFVStyle} {}
+
+
+ \definecolor{fastCouleurTexteFS}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service'' (la 1ere boite)
+ \definecolor{fastCouleurBorduresFS}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service'' (la 1ere boite)
+ \definecolor{fastCouleurFondFS}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service'' (la 1ere boite)
+ \definecolor{fastCouleurTexteFT}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de technique''
+ \definecolor{fastCouleurBorduresFT}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de technique''
+ \definecolor{fastCouleurFondFT}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de technique''
+ \definecolor{fastCouleurTexteST}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service''
+ \definecolor{fastCouleurBorduresST}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service''
+ \definecolor{fastCouleurFondST}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service''
+ \definecolor{fastCouleurConnecteurs}{rgb}{0,0,0}%Couleur des connecteurs
+ \definecolor{fastCouleurTexteFV}{rgb}{0,0,0} %Couleur du texte de la boite ``vide''
+ }
+\fastReset %On lance le reset une fois au chargement du package pour initialiser toutes les variables.
+
+
+
+
+\newcounter{cptAbscisse} %Compteur d'abscisse (a quelle colonne sommes-nous ?) - Sert notamment à nommer les noeuds
+\newcounter{cptAbscisseParent} %abscisse parent
+\newcounter{cptBoite} %Compteur de boite (pour leur donner un nom different)
+\newlength\posX
+\posX=0em
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+\newcommand{\ttt}{\newcommand[1][ddd]{\lolo}{Hello !!!}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Environnement fast
+%-----------------------------
+\newenvironment{fast}[1]
+ {
+
+
+ \newcommand*{\fastAvanceColonne} %Avance à la colonne suivant
+ { \setcounter{cptAbscisseParent}{\thecptAbscisse} %On enregistre le compteur actuel (qui correspond encore au parent)
+ \addtocounter{cptAbscisse}{1} %puis on décale le compteur d'une colonne
+ %\advance \posX by \fastEspaceColonne %On se décale l'abscisse géométrique d'une colonne
+ %\setlength{\posX}{\posX + \fastEspaceColonne}
+ \addtolength{\posX}{\fastEspaceColonne}
+ }
+
+ \newcommand*{\fastEnregistreMinimum} % Enregistre la position minimum de la ligne en cours (pour aligner la ligne suivante)
+ { %Attention, c'est compliqué : le but est de chercher le minimum absolu des nodes de la ligne en cours, qui nous servira d'ordonnee pour la ligne suivante
+ \coordinate (SudBoite) at ($(noeud \thecptAbscisse.south)+(0,-\fastInterligne)$);%Sud de la boite + interligne
+ \node[inner sep=0,fit=(SudBoite) (BoiteMinimums)] (BoiteMinimumsAnnexe) {}; %On cree une boite qui contient le point minimum du node courant ainsi que le dernier minimum enregistré
+ \path let \p1=(BoiteMinimumsAnnexe.south) in coordinate (BoiteMinimums) at (0,\y1) ; %On enregistre ce minimum dans BoiteMinimums
+ }
+
+ \newcommand*{\fastReculeColonne}
+ { %\advance \posX by -\fastEspaceColonne %On recule l'abscisse géométrique d'une colonne
+ \addtolength{\posX}{-\fastEspaceColonne}
+ \addtocounter{cptAbscisse}{-1} %On recule le compteur d'une colonne
+ }
+
+ \newcommand*{\fastTraceConnecteurs}[1][]
+ {
+ \ifthenelse{\equal{##1}{tempo}} %Option ``tempo''
+ {\draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits] (noeud \thecptAbscisse.north) -- ($(noeud \thecptAbscisse.north)+(0,\fastInterligne)$); }{}
+
+ \ifthenelse{\equal{##1}{ou}}
+ {
+ \path ($(noeud \thecptAbscisse.north west)+(\fastDecalageOuHorizontal,\fastDecalageTrait)$) -- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)+(\fastDecalageOuHorizontal,-\fastDecalageOuVertical)$) coordinate[pos=.5] (milieu); %On cherche le point milieu du connecteur
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits] ($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$) -| (milieu) |- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)+(0,-\fastDecalageOuVertical)$); %On trace le connecteur en faisant un zig
+ }
+ { \path ($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$) -- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)$) coordinate[pos=.5] (milieu); %On cherche le point milieu du connecteur
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits]($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$) -| (milieu) |- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)$); %On trace le connecteur en faisant un zig-zag par le milieu
+ }
+ }
+
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Fonction technique
+ %---------------------------------------------
+ \newcommand*\fastFT[3][]{%Argument 1=option, Argument 2 = contenu de la fonction, Argument 3 = descendance)
+ \fastAvanceColonne
+ \addtocounter{cptBoite}{1} %//On incremente le numero de la boite
+ \ifthenelse{\equal{##2}{}}%Si la fonction est vide
+ { \node[text width=\fastLargeurBoite,anchor=north west] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {}; %Un node vide (parce que les enfants vont en avoir besoin)
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits]($(noeud \thecptAbscisse.north east)+(0,\fastDecalageTrait)$)--($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$);
+ \fastTraceConnecteurs
+ }%Si la fonction n'est pas vide
+ { \node[draw,rounded corners=\fastFTarrondi,text width=\fastLargeurBoite,minimum size=\fastHauteurBoite,text centered,anchor=north west,fastCouleurBorduresFT,fill=fastCouleurFondFT,text=fastCouleurTexteFT,line width=\fastEpaisseurTraits,\fastFTStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastFTtexteStyle ##2}; %On écrit le contenu de la fonction}
+ \fastTraceConnecteurs[##1]
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+ }
+ ##3 %Il s'agit de la descendance passée en argument, et affichée ici.
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Solution technique
+ %---------------------------
+ \newcommandx*\fastST[3][1=,3=]{%Argument 1 = option,Argument 2 = contenu de la solution technique)
+ \fastAvanceColonne %On avance d'une colonne
+ \addtocounter{cptBoite}{1} %//On incremente le numero de la boite
+ \node[dashed,rounded corners=\fastSTarrondi,draw,text width=\fastLargeurBoite,minimum size=\fastHauteurBoite,line width=\fastEpaisseurTraits,text centered,anchor=north west,fastCouleurBorduresST,fill=fastCouleurFondST,text=fastCouleurTexteST,\fastSTStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastSTtexteStyle ##2}; %On écrit le contenu de la fonction
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+ \fastTraceConnecteurs[##1]
+ ##3
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Boite vide
+ %---------------------------
+ \newcommandx*\fastVide[3][1=,3=]{%Argument 1 = option,Argument 2 = contenu de la solution technique)
+ \fastAvanceColonne %On avance d'une colonne
+ \addtocounter{cptBoite}{1} %//On incremente le numero de la boite
+ \node[text width=\fastLargeurBoite,minimum size=\fastHauteurBoite,text centered,anchor=north west,text=fastCouleurTexteFV,\fastFVStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastFVtexteStyle ##2}; %On écrit le contenu de la fonction
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+ ##3
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Ligne droite simple
+ %---------------------------
+ \newcommand*\fastTrait[1]{%
+ \fastAvanceColonne
+ \node[text width=\fastLargeurBoite,anchor=north west] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {}; %Un node vide (parce que les enfants vont en avoir besoin)
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits] ($(noeud \thecptAbscisse.north east)+(0,\fastDecalageTrait)$)--($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$);
+ \fastTraceConnecteurs
+ ##1 %Il s'agit de la descendance passée en argument, et affichée ici.
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ \if@fastRaccourcis
+ \newcommand*{\FT}[3][] {\fastFT[##1]{##2}{##3}}
+ \newcommandx*{\ST}[3][1=,3=] {\fastST[##1]{##2}[##3]}
+ \newcommandx*{\FV}[3][1=,3=] {\fastVide[##1]{##2}[##3]}
+ \newcommand*{\trait}[1] {\fastTrait{##1}}
+ \fi
+
+
+ \begin{tikzpicture} %On commence le dessin
+ \setcounter{cptAbscisse}{0}
+ \setcounter{cptAbscisseParent}{0}
+ \setcounter{cptBoite}{0}
+ \posX=0em %Abscisse des boites (0 au début)
+ \coordinate (BoiteMinimums) at (0,0); %noeud ou coordonnees, dont le south correspond au minimum de la ligne en cours (utile pour positionner la ligne suivante)
+ \node[draw,rounded corners=\fastFSarrondi,minimum size=\fastHauteurBoite,line width=\fastEpaisseurTraits,text width=\fastLargeurBoite,text centered,anchor=north west,fastCouleurBorduresFS,fill=fastCouleurFondFS,text=fastCouleurTexteFS,\fastFSStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastFStexteStyle #1}; %Fonction de service que l'on va développer dans ce FAST
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+
+ }
+ { \end{tikzpicture} %Fin du dessin
+
+ }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+%Fin du package
+\endinput
+
+
+
+
+
+
+
+
+
+
+
diff --git a/graphics/pgf/contrib/fast-diagram/help.pdf b/graphics/pgf/contrib/fast-diagram/help.pdf
new file mode 100644
index 0000000000..a00497650e
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/help.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/help.tex b/graphics/pgf/contrib/fast-diagram/help.tex
new file mode 100644
index 0000000000..ad0d0bf60a
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/help.tex
@@ -0,0 +1,72 @@
+\documentclass[a4paper,12pt]{article}
+
+\input{./sources_help/reglages.tex}
+
+\usepackage[raccourcis]{fast-diagram}
+
+\begin{document}
+
+ \maketitle
+
+
+ \renewcommand{\fastLargeurBoite}{3.5cm}
+ \renewcommand{\fastEspaceColonne}{5cm}
+ \renewcommand{\fastEpaisseurTraits}{1.5pt}
+ \renewcommand{\fastHauteurBoite}{2em}
+
+ \section*{Table des matières}
+ \vfill
+
+ \begin{center}
+ \footnotesize
+ \begin{fast}{Package ``fast-diagram.sty''}
+ \FT{\maref{intro}}{
+ \FT{\maref{auteur}}{}
+ \FT{\maref{rappel}}{}
+ \FT{\maref{limitations}}{}
+ }
+ \FT{\maref{exemple}}{}
+ \FT{\maref{MP}}{
+ \FT{\maref{installation}}{}
+ \FT{\maref{packages}}{}
+ \FT{\maref{appel}}{}
+ }
+ \FT{\maref{commandes}}{
+ \FT{\maref{environnement}}{}
+ \FT{\maref{principe}}{}
+ \FT{\maref{FT}}{}
+ \FT{\maref{ST}}{}
+ \FT{\maref{fvide}}{}
+ \FT{\maref{trait}}{}
+ }
+ \FT{\maref{MIP}}{
+ \FT{\maref{reset}}{}
+ \FT{\maref{dimensions}}{}
+ \FT{\maref{couleurs}}{}
+ }
+ \FT{\maref{tikzz}}{
+ \FT{\maref{tikzpartout}}{}
+ \FT{\maref{boites}}{}
+ \FT{\maref{perso}}{}
+ }
+ \end{fast}
+ \end{center}
+ \vfill
+
+ \fastReset
+
+ \newpage
+
+ \input{./sources_help/intro.tex}\newpage
+
+ \input{./sources_help/exemple.tex}\newpage
+
+ \input{./sources_help/installation.tex}\newpage
+
+ \input{./sources_help/commandes.tex}\newpage
+
+ \input{./sources_help/miseEnForme.tex}\newpage
+
+ \input{./sources_help/tikz.tex}\newpage
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/commandes.tex b/graphics/pgf/contrib/fast-diagram/sources_help/commandes.tex
new file mode 100644
index 0000000000..e15caa567e
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/commandes.tex
@@ -0,0 +1,312 @@
+\section{Détail des commandes}\label{commandes}
+%=====================================
+
+
+ \subsection{Environement ``fast''}\label{environnement}
+ %------------------------------------
+
+ Le diagramme fast est placé dans l'environnement {\color{blue}\verb'\begin{fast}...\end{fast}'}.
+ Cet environnement prend comme argument la \emph{fonction de service} que l'on souhaite développer.
+
+\begin{code}%##################################################################
+\begin{fast}{Fonction de Service}
+ %Votre diagramme FAST
+\end{fast}
+\end{code}%##################################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ %Votre diagramme FAST
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ A l'intérieur de l'environnement \verb!fast!, on va alors venir placer chacune des fonctions techniques, solutions techniques, etc.
+ Ces commandes vont être décrites dans les paragraphes suivants.
+
+
+
+
+
+ \subsection{Principe des commandes}\label{principe}
+ %----------------------------------------------
+
+ Une fois l'environnement fast ouvert, le but du jeu va être de créer des fonctions (c'est à dire des ``\emph{boites}'') à l'intérieur, reliées entre elles de manière hiérarchique.
+
+ Il existe plusieurs ``boites'' différentes qui seront chacune développées dans les paragraphes suivants.
+
+ Chaque boite possède un ``\textbf{parent}'' en amont, un ``\textbf{texte}'' à l'intérieur et éventuellement une ou plusieurs ``\textbf{descendances}'' en aval.
+
+ \begin{center}
+ \begin{fast}{Parent}
+ \definecolor{fastCouleurFondFT}{rgb}{1,0.5,0.5}
+ \FT{texte}{\fastReset
+ \FT{Descendance 1}{}
+ \FT{Descendance 2}{}
+ }
+ \end{fast}
+ \end{center}
+
+
+ Le texte de chaque fonction est passé en premier argument de la commande.
+
+ On parlera de fonctions ``\emph{s\oe urs}'' lorsque ces fonctions sont en parallèles, issues d'un même parent.
+ Les commandes permettant de créer plusieurs fonctions s\oe urs sont placées les unes à la suite des autres.
+
+%##################################################################
+\begin{code}
+\begin{fast}{PARENT}
+ \une_fonction{texte}{Descendance de la fonction}
+ \une_fonction_soeur{texte}{Descendance de la fonction soeur}
+\end{fast}
+\end{code}
+%##################################################################
+
+ On parlera de fonctions ``\emph{filles}'' les fonctions descendant d'un parent.
+ Les fonctions filles sont passées en deuxième argument de leur parent.
+
+%##################################################################
+\begin{code}
+\begin{fast}{PARENT}
+ \une_fonction{texte}{
+ \une_fonction_fille{texte}{descendance}
+ \une_autre_fonction_fille{texte}{descendance}
+ }
+\end{fast}
+\end{code}
+%##################################################################
+
+ En pratique, la descendance peut être n'importe quelle fonction \emph{TikZ} (voir \ref{tikzz}).
+ Elle peut également ne rien comporter.
+
+ La suite de ce chapitre va présenter les différentes fonctions disponibles.
+
+
+
+
+ \subsection{Fonction technique}\label{FT}
+ %----------------------------------------------
+
+ {\color{blue}\verb'\fastFT'} (raccourci : {\color{blue}\verb'\FT'}) est une commande ``de base'' du diagramme FAST.
+ Elle s'emploie de la manière suivante :
+
+%##################################################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \fastFT{Fonction technique FT}
+ {
+ %Descendance
+ }
+\end{fast}
+\end{code}
+%##################################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \fastFT{Fonction technique FT}
+ {
+ %Descendance
+ }
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Voici un exemple d'utilisation en série et en parallèle :
+
+%##################################################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \fastFT{FT1}
+ {
+ \fastFT{FT11}{}
+ \fastFT{FT12}{}
+ }
+ \fastFT{FT2}
+ {
+ \fastFT{FT21}{}
+ \fastFT{FT22}{}
+ }
+\end{fast}
+\end{code}
+%##################################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \fastFT{FT1}
+ {
+ \fastFT{FT11}{}
+ \fastFT{FT12}{}
+ }
+ \fastFT{FT2}
+ {
+ \fastFT{FT21}{}
+ \fastFT{FT22}{}
+ }
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Si le premier argument est vide, cela revient à faire un trait horizontal, au même titre que que la fonction {\color{blue}\verb'\fastFTrait'} (voir \ref{trait}).
+
+ La commande {\color{blue}\verb'\fastFT'} peut également prendre un mot-clé en options :
+ %\begin{itemize}
+ %\item le mot clé {\color{blue}\verb'[tempo]'} permet de rajouter un connecteur entre la fonction courante et la fonction située au dessus (Ne fonctionne pas si la fonction est vide).
+ le mot clé {\color{blue}\verb'[ou]'} ; il décale légèrement le connecteur pour représenter un liaison ``\emph{ou}'' (voir la mise en forme au paragraphe \ref{dimensions}).
+ %\end{itemize}
+
+%##################################################################
+\begin{code}
+\begin{fast}{FS}
+ \FT{FT1}
+ {
+ \fastFT{FT1}{}
+ \fastFT[ou]{FT2}{}
+ }
+\end{fast}
+\end{code}
+%##################################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{FS}
+ \fastFT{FT1}{}
+ \fastFT[ou]{FT2}{}
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+ \subsection{Solution technique }\label{ST}
+ %----------------------------------------------
+
+ {\color{blue}\verb'\fastST'} (raccourci : {\color{blue}\verb'\ST'}) prend un seul argument : le contenu de la solution technique.
+
+%##################################################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \fastST{Solution technique}
+\end{fast}
+\end{code}
+%##################################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \fastST{Solution technique}
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Normalement, la solution technique correspond à la fin d'une branche du diagramme FAST.
+ C'est pourquoi elle ne requière pas d'autre argument.
+ Toutefois, pour des besoins spécifiques (commentaire, image, etc.), on peut lui rajouter une descendance en option :
+
+%##################################################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \fastST{Solution technique}[\fastVide{Commentaire...}]
+\end{fast}
+\end{code}
+%##################################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \fastST{Solution technique}[\fastVide{Commentaire...}{}]
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ \subsection{Fonction vide}\label{fvide}
+ %-----------------------------------------
+
+ {\color{blue}\verb'\fastVide'} (raccourci : {\color{blue}\verb'\FV'}) permet de faire une case sans connecteur ni bordure.
+
+%####################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \fastFT{FT1} {
+ \fastVide{Boite sans trait}
+ \fastVide{Autre boite sans trait}
+ }
+ \fastFT{FT2}{ \fastVide{Encore une boite sans trait}}
+\end{fast}
+\end{code}
+%####################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \fastFT{FT1} {
+ \fastVide{Boite sans trait}
+ \fastVide{Autre boite sans trait}
+ }
+ \fastFT{FT2}{ \fastVide{Encore une boite sans trait}}
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Tout comme pour la boite ``solution technique'', cette fonction est destinée à être en bout de branche du diagramme.
+ On ne demande donc pas de descendance.
+ Toutefois, on peut la lui proposer en argument optionnel :
+
+%##################################################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \fastVide{Boite vide}[\fastFT{Descendance}{}]
+\end{fast}
+\end{code}
+%##################################################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \fastVide{Boite vide}[\fastFT{Descendance}{}]
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ \subsection{Trait continu}\label{trait}
+ %-----------------------------------------
+
+ {\color{blue}\verb'\fastTrait'} (raccourci : {\color{blue}\verb'\trait'}) représente un simple trait.
+ Il permet en effet de tracer un connecteur directement de la colonne $(n-1)$ à $(n+1)$, en ``sautant'' la colonne $(n)$.
+ Le seul argument demandé est la descendance de ce connecteur.
+ La fonction technique {\color{blue}\verb'\fastFT'} avec un premier argument vide réalise la même chose.
+
+%##################################################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \fastFT{De base}{}
+ \fastTrait {
+ \fastFT{avec fastTrait}{}
+ }
+ \fastFT{} {
+ \fastFT{avec fastFT dont le $1^{er}$ argument est vide}{}
+ }
+\end{fast}
+\end{code}
+%##################################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \fastFT{De base}{}
+ \fastTrait {
+ \fastFT{avec fastTrait}{}
+ }
+ \fastFT{} {
+ \fastFT{avec fastFT dont le $1^{er}$ argument est vide}{}
+ }
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/exemple.tex b/graphics/pgf/contrib/fast-diagram/sources_help/exemple.tex
new file mode 100644
index 0000000000..60b3d8b699
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/exemple.tex
@@ -0,0 +1,148 @@
+\section{Un exemple presque complet}\label{exemple}
+%==========================================
+
+
+
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \begin{center}
+ \footnotesize
+
+ \definecolor{fastCouleurFondFS}{rgb}{0.90,0.85,0.70}
+ \definecolor{fastCouleurFondFT}{rgb}{1,0.96,0.89}
+ \definecolor{fastCouleurFondST}{rgb}{1,1,1}
+ \renewcommand*{\fastHauteurBoite}{2.6em}
+ \renewcommand*{\fastDecalageTrait}{-1.3em}
+ \renewcommand*{\fastEspaceColonne}{9em}
+
+ \begin{fast}{Déplacer la voiture téléguidée}
+ \FT{Gérer les informations}
+ {
+ \FT{Démarrer la voiture}
+ {
+ \ST{Bouton marche/arrêt}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/bouton.png}}]
+ }
+ \FT{Capter les ordres de la télécommande}
+ {
+ \ST{Antenne}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/antenne.png}}]
+ }
+ \FT{Gérer les informations et distribuer}
+ {
+ \ST{Récepteur 2 voies}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/recepteur.png}}]
+ }
+ }
+ \FT{Stocker l'énergie}
+ {
+ \trait{\ST{Batterie électrique}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/batterie.png}}]
+ }}
+ \FT{Propulser la voiture}
+ {
+ \FT{Transformer en énergie mécanique}
+ {
+ \ST{Moteur à courant continu}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/moteur.png}}]
+ }
+ \FT{Adapter l'énergie mécanique}
+ {
+ \ST{Engrenages}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/pignons.png}}]
+ }
+ \FT{Transmettre l'énergie mécanique}
+ {
+ \ST{Roues}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/roue.png}}]
+ }
+ }
+ \FT{Diriger la voiture}
+ {
+ \FT{Transformer l'énergie}
+ {
+ \ST{Servomoteur}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/servomoteur.png}}]
+ }
+ \FT{Transmettre aux roues}
+ {
+ \ST{Biellettes}
+ [\FV{\includegraphics[height=1cm]{./sources_help/images/biellettes.png}}]
+ }
+ }
+ \end{fast}
+ \fastReset
+ \end{center}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ L'exemple ci-dessus est donné par le code suivant :
+
+%######################################
+\begin{lstlisting}
+\begin{center}
+\footnotesize
+
+\definecolor{fastCouleurFondFS}{rgb}{0.90,0.85,0.70}
+\definecolor{fastCouleurFondFT}{rgb}{1,0.96,0.89}
+\definecolor{fastCouleurFondST}{rgb}{1,1,1}
+\renewcommand*{\fastHauteurBoite}{2.6em}
+\renewcommand*{\fastDecalageTrait}{-1.3em}
+\renewcommand*{\fastEspaceColonne}{9em}
+
+\begin{fast}{Déplacer la voiture téléguidée}
+ \FT{Gérer les informations}
+ {\FT{Démarrer la voiture}
+ {\ST{Bouton marche/arrêt}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/bouton.png}}]
+ }
+ \FT{Capter les ordres de la télécommande}
+ {\ST{Antenne}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/antenne.png}}]
+ }
+ \FT{Gérer les informations et distribuer}
+ {\ST{Récepteur 2 voies}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/recepteur.png}}]
+ } }
+ \FT{Stocker énergie}
+ {\trait{
+ \ST{Batterie électrique}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/batterie.png}}]
+ } }
+ \FT{Propulser la voiture}
+ {\FT{Transformer en énergie mécanique}
+ {\ST{Moteur à courant continu}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/moteur.png}}]
+ }
+ \FT{Adapter l'énergie mécanique}
+ {\ST{Engrenages}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/pignons.png}}]
+ }
+ \FT{Transmettre l'énergie mécanique}
+ {\ST{Roues}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/roue.png}}]
+ } }
+ \FT{Diriger la voiture}
+ {\FT{Transformer l'énergie}
+ {\ST{Servomoteur}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/servomoteur.png}}]
+ }
+ \FT{Transmettre aux roues}
+ {\ST{Biellettes}
+ [\FV{\includegraphics[height=1cm]
+ {./sources_help/images/biellettes.png}}]
+ } }
+\end{fast}
+\fastReset
+\end{center}
+\end{lstlisting}
+
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/antenne.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/antenne.png
new file mode 100644
index 0000000000..b207ba3a14
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/antenne.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/batterie.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/batterie.png
new file mode 100644
index 0000000000..7ae7910764
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/batterie.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/biellettes.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/biellettes.png
new file mode 100644
index 0000000000..cab1337def
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/biellettes.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/bouton.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/bouton.png
new file mode 100644
index 0000000000..9093e0e9b3
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/bouton.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/moteur.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/moteur.png
new file mode 100644
index 0000000000..bf9ee0e94a
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/moteur.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/pedalier.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/pedalier.png
new file mode 100644
index 0000000000..293590dd91
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/pedalier.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/pignons.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/pignons.png
new file mode 100644
index 0000000000..77cd06dc8b
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/pignons.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/recepteur.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/recepteur.png
new file mode 100644
index 0000000000..a1542d1fd2
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/recepteur.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/roue.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/roue.png
new file mode 100644
index 0000000000..bc2d91f60b
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/roue.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/images/servomoteur.png b/graphics/pgf/contrib/fast-diagram/sources_help/images/servomoteur.png
new file mode 100644
index 0000000000..d7fc09e722
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/images/servomoteur.png
Binary files differ
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/installation.tex b/graphics/pgf/contrib/fast-diagram/sources_help/installation.tex
new file mode 100644
index 0000000000..58b4019bfd
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/installation.tex
@@ -0,0 +1,44 @@
+\section{Mise en place du package}\label{MP}
+%==================================
+
+
+ \subsection{Installation}\label{installation}
+ %--------------------------
+
+ Le package s'installe comme n'importe quel autre.
+ Après l'avoir téléchargé, copier le :
+ \begin{itemize}
+ \item soit dans le dossier du document que vous êtes en train de rédiger (c'est une méthode facile, mais il ne sera valable que pour ce document-là)
+ \item soit dans un des dossiers par défaut de latex.
+ L'emplacement de ces dossiers dépendent du logiciel et du système d'exploitation utilisé (Windows, Mac, Linux, etc.).
+ \end{itemize}
+
+ \subsection{Packages requis}\label{packages}
+ %-----------------------------------
+
+ Pour que le package fonctionne, vous devez déjà avoir les packages suivants d'installés :
+ \begin{itemize}
+ \item \href{http://sourceforge.net/projects/pgf/}{\textbf{TikZ}} : Package de dessin vectoriel sur lequel repose le diagramme fast,
+ \item \href{http://www.ctan.org/pkg/ifthen}{\textbf{ifthen}} : Package permettant une compilation à choix multiple,
+ \item \href{http://www.ctan.org/pkg/relsize}{\textbf{relsize}} : Package permettant de gérer les longueurs relatives (em, ...)
+ \item \href{http://tug.ctan.org/tex-archive/macros/latex/contrib/xargs}{\textbf{xarg}} : Package permettant de créer des commandes à plusieurs arguments optionnels.
+ \end{itemize}
+
+ \subsection{Appel du package ``fast-diagram.sty''}\label{appel}
+ %-------------------------------
+
+ L'appel du package se fait simplement en écrivant dans l'entête du document :
+%#########################
+\begin{code}
+\usepackage{fast-diagram}
+\end{code}
+%########################
+ Afin d'éviter d'éventuels conflits entre packages, toutes les commandes utilisées ici sont précédées du préfixe {\color{blue}\verb'fast'}
+ (par exemple {\color{blue}\verb'\fastFT'} pour désigner la fonction technique \verb'FT').
+ Pour la mise en place de raccourcis, l'option {\color{blue}\verb'[raccourcis]'} peut être apportée dans le package de la manière suivante :
+%#########################
+\begin{code}
+\usepackage[raccourcis]{fast-diagram}
+\end{code}
+%########################
+ Les raccourcis seront développés plus tard. \ No newline at end of file
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/intro.tex b/graphics/pgf/contrib/fast-diagram/sources_help/intro.tex
new file mode 100644
index 0000000000..003102efb0
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/intro.tex
@@ -0,0 +1,47 @@
+\section{Introduction}\label{intro}
+%=====================================
+
+ \subsection{Le pourquoi du comment}\label{auteur}
+ %--------------------------------
+
+ En tant qu'enseignant en sciences industrielles pour l'ingénieur, j'ai réalisé ce package en vue de m'aider à rédiger mes cours.
+ J'ai toutefois essayé de le rendre le plus paramétrable possible afin qu'il puisse être utilisé dans de nombreux cas.
+ (d'autres options/paramètres peuvent éventuellement être rajoutés selon la demande...).
+
+ Il s'agit de mon premier package \LaTeX.
+ De plus, ce package fonctionne sur la bibliothèque \emph{TikZ}, que je connaissais jusqu'alors assez mal.
+ Il n'est donc pas exclu qu'il y ait des bugs dans sa conception.
+ Si vous voyez quelque chose d'anormal ou d'incohérent, ou si vous avez des remarques, n'hésitez pas à m'en faire part à l'adresse suivante :
+ \href{mailto:allais.raphael@free.fr}{allais.raphael@free.fr}
+
+ Pour le petite histoire, la difficulté pour réaliser ce package a été le caractère récursif du diagramme FAST.
+ En effet, il semblerait que \emph{TikZ} gère très mal la portée locale des variables :
+ Les variables d'une fonction \emph{enfant} écrasaient les variables de sa fonction \emph{parent}.
+ Cela posait des problèmes sur l'alignement des boîtes.
+ D'autre part, \emph{TikZ} propose déjà des diagrammes en arborescence, mais je n'ai pas su créer mes propres fonctions par dessus.
+
+ Merci à Yannick Le Bras, Robert Papanicola et Xavier Pessoles pour leur aide et leurs conseils.
+
+
+ \subsection{Petit rappel}\label{rappel}
+ %-----------------------------
+ Le diagramme ``\emph{\href{http://fr.wikipedia.org/wiki/Function_Analysis_System_Technique}{Function Analysis System Technique}}'', plus couramment appelé ``\emph{diagramme FAST}''
+ est un outil de \textbf{\href{http://fr.wikipedia.org/wiki/Analyse_fonctionnelle_\%28conception\%29}{l'analyse fonctionnelle}},
+ permettant de décrire et de décomposer hiérarchique une \emph{fonction de service} en sous-fonctions, appelées \emph{fonctions techniques}.
+ L'aboutissement d'un tel schéma doit être un ensemble de choix concrets appelés ``\emph{solutions techniques}''.
+ Historiquement, ce type de diagramme a été un passage indispensable dans le domaine de la conception et la rédaction des cahiers des charges.
+ Aujourd'hui, une approche plus globale (mais partiellement basée sur des concepts similaires) est proposée au travers des diagrammes \href{http://fr.wikipedia.org/wiki/Systems_Modeling_Language}{SysML}.
+
+ Pour plus de détail, n'hésitez pas à consulter les nombreux cours qui existent sur Internet.
+
+
+
+
+ \subsection{Limitations - Perspectives}\label{limitations}
+ %----------------------------------------
+
+ Le package a été écrit pour répondre \textbf{aux principales attentes} du diagramme FAST.
+ Il n'est cependant pas complet.
+ Il n'est, par exemple, pas possible de relier \textbf{automatiquement} une solution technique commune à plusieurs fonctions techniques.
+ Cette possibilité n'est toutefois pas exclue puisque les commandes de \emph{TikZ} sont autorisées à l'intérieur de l'environnement (voir \ref{tikzz}) et rien n'empêche de le faire ``\emph{à la main}''.
+ N'hésitez donc pas à me faire part d'éventuelles autres fonctions à mettre en place. \ No newline at end of file
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/miseEnForme.tex b/graphics/pgf/contrib/fast-diagram/sources_help/miseEnForme.tex
new file mode 100644
index 0000000000..6f74de46a0
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/miseEnForme.tex
@@ -0,0 +1,474 @@
+\section{Mise en forme}\label{MIP}
+%========================
+
+ \subsection{Reset}\label{reset}
+ %--------------------------
+
+ {\color{blue}\verb'\fastReset'} permet de remettre les paramètres par défaut.
+
+
+
+ \subsection{Les dimensions}\label{dimensions}
+ %-------------------------------
+
+ Les dimensions du diagramme sont réglées via plusieurs commandes.
+ En voici la liste :
+ \begin{itemize}
+ \item {\color{blue}\verb'\fastInterligne'} : espace entre le bas de la boite la plus grande de la ligne en cours, et le haut des boites de la ligne suivante.
+ Ce nombre doit être positif.
+ (Par défaut : $0.5\uem$)
+ \item {\color{blue}\verb'\fastLargeurBoite'} : largeur des boites (Par défaut : $7\uem$)
+ \item {\color{blue}\verb'\fastHauteurBoite'} : hauteur \textbf{minimum} des boites (Par défaut : $0$)
+ \item {\color{blue}\verb'\fastEspaceColonne'} : distance entre le coin supérieur gauche d'une boite et le coin supérieur gauche de sa voisine.
+ (Par défaut : $10\uem$)
+ \item {\color{blue}\verb'\fastDecalageTrait'} : permet de décaler le connecteur par rapport au haut de la boite.
+ (Par défaut : $-0.6\uem$)
+ \item {\color{blue}\verb'\fastEpaisseurTraits'} : épaisseur des traits (bordures et connecteurs). (Par défaut : $0.05\uem$)
+ \item {\color{blue}\verb'\fastDecalageOuVertical'} : Décalage vertical du connecteur ``OU''. (Par défaut : $0.4\uem$)
+ \item {\color{blue}\verb'\fastDecalageOuHorizontal'} : Décalage horizontal du connecteur ``OU''. (Par défaut : $-0.4\uem$)
+ \end{itemize}
+
+ Les deux dernières fonctions peuvent être utiles si plusieurs connecteur ``OU'' sont utilisés sur la même lignée.
+
+ Toutes ces commandes peuvent être redéfinies via la fonction la fonction {\color{blue}\verb'\renewcommand'} (ou {\color{blue}\verb'\renewcommand*'}).
+ Voici ci-dessous une série d'exemples illustrant chacune de ces fonctions.
+
+
+ \subsubsection{Exemple : interlignes}\label{interligne}
+ %-----------------------------------
+
+%#####################################################
+\begin{code}
+\begin{fast}{Avant} %Interligne par défaut
+ \fastFT{FT1}{
+ \fastFT{FT11 avec un peu de texte}{
+ \fastFT{FT111}{}}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{
+ \fastFT{FT211}{}}}
+\end{fast}
+
+\renewcommand*{\fastInterligne}{1cm} %Nouvel interligne
+\begin{fast}{Après}
+ \fastFT{FT1}{
+ \fastFT{FT11 avec un peu de texte}{
+ \fastFT{FT111}{}}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{
+ \fastFT{FT211}{}}}
+\end{fast}
+\fastReset %Remise à zéro
+\end{code}
+%#####################################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Avant} %Interligne par défaut
+ \fastFT{FT1}{
+ \fastFT{FT11 avec un peu de texte}{
+ \fastFT{FT111}{}}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{
+ \fastFT{FT211}{}}}
+\end{fast}
+\renewcommand*{\fastInterligne}{1cm} %Nouvel interligne
+\begin{fast}{Après}
+ \fastFT{FT1}{
+ \fastFT{FT11 avec un peu de texte}{
+ \fastFT{FT111}{}}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{
+ \fastFT{FT211}{}}}
+\end{fast}
+\fastReset %Remise à zéro
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+ \subsubsection{Exemple : largeur des boîtes}\label{largeur}
+ %-----------------------------------
+
+
+%###############################################
+\begin{code}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+
+\renewcommand*{\fastLargeurBoite}{1.5cm} %Nouvelle largeur de boite
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\fastReset
+\end{code}
+%###############################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\renewcommand*{\fastLargeurBoite}{1.5cm}
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+ \subsubsection{Exemple : hauteur des boîtes}\label{hauteur}
+ %-----------------------------------
+
+
+%###############################################
+\begin{code}
+\begin{fast}{Avant}
+ \fastFT{FT1}{ \FT{FT11}{}
+ \FT{FT12 FT12 FT12 FT12}{}}
+ \fastFT{FT2}{ \FT{FT21}{}
+ \FT{FT22}{}}
+\end{fast}
+\renewcommand*{\fastHauteurBoite}{3em}
+\begin{fast}{Après}
+ \fastFT{FT1}{ \FT{FT11}{}
+ \FT{FT12 FT12 FT12 FT12}{}}
+ \fastFT{FT2}{ \FT{FT21}{}
+ \FT{FT22}{}}
+\end{fast}
+\fastReset
+\end{code}
+%###############################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Avant}
+ \fastFT{FT1}{ \FT{FT11}{}
+ \FT{FT12 FT12 FT12 FT12}{}}
+ \fastFT{FT2}{ \FT{FT21}{}
+ \FT{FT22}{}}
+\end{fast}
+\renewcommand*{\fastHauteurBoite}{3em}
+\begin{fast}{Après}
+ \fastFT{FT1}{ \FT{FT11}{}
+ \FT{FT12 FT12 FT12 FT12}{}}
+ \fastFT{FT2}{ \FT{FT21}{}
+ \FT{FT22}{}}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ \subsubsection{Exemple : espace entre colonnes}\label{espace}
+ %-----------------------------------
+
+
+%###############################################
+\begin{code}
+\begin{fast}{Avant}
+ \fastFT{FT1}{
+ \fastFT{FT11}{}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{}}
+\end{fast}
+
+\renewcommand*{\fastEspaceColonne}{6cm} %Nouvel espace inter-colonnes
+\begin{fast}{Après}
+ \fastFT{FT1}{
+ \fastFT{FT11}{}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{}}
+\end{fast}
+\fastReset
+\end{code}
+%###############################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Avant}
+ \fastFT{FT1}{
+ \fastFT{FT11}{}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{}}
+\end{fast}
+\renewcommand*{\fastEspaceColonne}{6cm}
+\begin{fast}{Après}
+ \fastFT{FT1}{
+ \fastFT{FT11}{}}
+ \fastFT{FT2}{
+ \fastFT{FT21}{}}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+ \subsubsection{Exemple : décalage des connecteurs}\label{decalage}
+ %----------------------------------------
+
+%###############################################
+\begin{code}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+
+\renewcommand*{\fastDecalageTrait}{-13pt} %Nouveau décalage des connecteur
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\fastReset
+\end{code}
+%###############################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\renewcommand*{\fastDecalageTrait}{-13pt}
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+ \subsubsection{Exemple : épaisseur des traits}\label{epaisseur}
+ %----------------------------------
+
+
+%###############################################
+\begin{code}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+
+\renewcommand*{\fastEpaisseurTraits}{2pt} %Nouvelle épaisseur de traits
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\fastReset
+\end{code}
+%###############################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\renewcommand*{\fastEpaisseurTraits}{2pt}
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+ \subsubsection{Exemple : Décalage des connecteur ``OU''}\label{connecteursOU}
+ %----------------------------------
+
+
+%###############################################
+\begin{code}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+ \fastFT[ou]{FT3}{}
+ \fastFT[ou]{FT4}{}
+\end{fast}
+
+\renewcommand*{\fastDecalageOuVertical}{3pt} %Redécalage vertical...
+\renewcommand*{\fastDecalageOuHorizontal}{-3pt} %... et horizontal du 1er "OU"
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+ \fastFT[ou]{FT3}{}
+ \renewcommand{\fastDecalageOuVertical}{6pt} %Décalage vertical...
+ \renewcommand{\fastDecalageOuHorizontal}{-6pt} %...et horizontal...
+ \fastFT[ou]{FT4}{} % ...du 2eme "OU"
+\end{fast}
+\fastReset
+\end{code}
+%###############################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Avant}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+ \fastFT[ou]{FT3}{}
+ \fastFT[ou]{FT4}{}
+\end{fast}
+\renewcommand*{\fastDecalageOuVertical}{3pt}
+\renewcommand*{\fastDecalageOuHorizontal}{-3pt}
+\begin{fast}{Après}
+ \fastFT{FT1}{}
+ \fastFT{FT2}{}
+ \fastFT[ou]{FT3}{}
+ \renewcommand{\fastDecalageOuVertical}{6pt}
+ \renewcommand{\fastDecalageOuHorizontal}{-6pt}
+ \fastFT[ou]{FT4}{}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+
+ \subsection{Couleurs}\label{couleurs}
+ %--------------------------
+
+ Il est possible de modifier les couleurs de plusieurs éléments tels que :
+ \begin{itemize}
+ \item \textbf{la fonction de service} (la première case),
+ \item \textbf{les fonctions techniques},
+ \item \textbf{les solutions techniques},
+ \item \textbf{les boîtes vides},
+ \item \textbf{les connecteurs}.
+ \end{itemize}
+ Pour chacun des quatre premiers points précédents, on peut définir :
+ \begin{itemize}
+ \item la couleur du \textbf{texte},
+ \item la couleur du \textbf{fond} (sauf boite vide),
+ \item la couleur du \textbf{cadre} (sauf boite vide).
+ \end{itemize}
+ Tout cela donne un total de $11$ couleurs, définies par les noms suivants :
+ \begin{itemize}
+ \item {\color{blue}\verb'fastCouleurTexteFS'} : Couleur du texte de la fonction de service (la $1^{ere}$ boite),
+ \item {\color{blue}\verb'fastCouleurBorduresFS'} : Couleur de bordure de la fonction de service (la $1^{ere}$ boite),
+ \item {\color{blue}\verb'fastCouleurFondFS'} : Couleur du fond de la fonction de service (la $1^{ere}$ boite),
+ \item {\color{blue}\verb'fastCouleurTexteFT'} : Couleur du texte des fonctions techniques,
+ \item {\color{blue}\verb'fastCouleurBorduresFT'} : Couleur de bordure des fonctions techniques,
+ \item {\color{blue}\verb'fastCouleurFondFT'} : Couleur du fond des fonctions techniques,
+ \item {\color{blue}\verb'fastCouleurTexteST'} : Couleur du texte des solutions techniques,
+ \item {\color{blue}\verb'fastCouleurBorduresST'} : Couleur de bordure des solutions techniques,
+ \item {\color{blue}\verb'fastCouleurFondST'} : Couleur du fond des solutions techniques,
+ \item {\color{blue}\verb'fastCouleurTexteFV'} : Couleur du texte de la fonction de boite vide,
+ \item {\color{blue}\verb'fastCouleurConnecteurs'} : Couleur des connecteurs.
+ \end{itemize}
+
+ Toutes ces couleurs peuvent être redéfinies par la fonction {\color{blue}\verb'\definecolor'}
+ (voir le package \href{http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor/}{xcolor}) :
+
+%###################################################
+\begin{code}
+\definecolor{fastCouleurTexteFS} {named} {white}
+\definecolor{fastCouleurBorduresFS} {named} {red}
+\definecolor{fastCouleurFondFS} {named} {red}
+
+\definecolor{fastCouleurTexteFT} {rgb} {1,0,1}
+\definecolor{fastCouleurBorduresFT} {rgb} {0,1,0}
+\definecolor{fastCouleurFondFT} {rgb} {1,1,0}
+
+\definecolor{fastCouleurTexteST} {named} {brown}
+\definecolor{fastCouleurBorduresST} {named} {blue}
+\definecolor{fastCouleurFondST} {rgb} {0.5,1,1}
+
+\definecolor{fastCouleurConnecteurs} {rgb} {1,0.5,1}
+\begin{fast}{FS1}
+ \fastFT{FT1}{
+ \fastST{Sol 1}}
+ \fastFT{}{
+ \fastST{Sol2}}
+\end{fast}
+\fastReset
+\end{code}
+%###################################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\definecolor{fastCouleurTexteFS} {named} {white}
+\definecolor{fastCouleurBorduresFS} {named} {red}
+\definecolor{fastCouleurFondFS} {named} {red}
+
+\definecolor{fastCouleurTexteFT} {rgb} {1,0,1}
+\definecolor{fastCouleurBorduresFT} {rgb} {0,1,0}
+\definecolor{fastCouleurFondFT} {rgb} {1,1,0}
+
+\definecolor{fastCouleurTexteST} {named} {brown}
+\definecolor{fastCouleurBorduresST} {named} {blue}
+\definecolor{fastCouleurFondST} {rgb} {0.5,1,1}
+
+\definecolor{fastCouleurConnecteurs} {rgb} {1,0.5,1}
+\begin{fast}{FS1}
+ \fastFT{FT1}{
+ \fastST{Sol 1}}
+ \fastFT{}{
+ \fastST{Sol2}}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Pour aller plus vite, trois commandes servent de raccourci :
+ \begin{itemize}
+ \item {\color{blue}\verb'\fastSetCouleurBordures[type]{couleur}'} : permet de changer la couleur de toutes les bordures,
+ \item {\color{blue}\verb'\fastSetCouleurTexte[type]{couleur}'} : permet de changer la couleur de tout le texte,
+ \item {\color{blue}\verb'\fastSetCouleurTraits[type]{couleur}'} : permet de changer la couleur de toutes les lignes (bordures + connecteurs),
+ \item {\color{blue}\verb'\fastSetCouleurFond[type]{couleur}'} : permet de changer la couleur du fond de toutes les boites,
+ \end{itemize}
+ où {\color{blue}\verb'[type]'} est le type d'affectation (\emph{rgb},\emph{cmyk},\emph{named}(par défaut),...)
+ et {\color{blue}\verb'[couleur]'} est la couleur, relativement à {\color{blue}\verb'[type]'} (voir {\color{blue}\verb'\definecolor'} du package \href{http://www.ctan.org/tex-archive/macros/latex/contrib/xcolor/}{xcolor}).
+
+
+%###################################################
+\begin{code}
+\fastSetCouleurBordures{red}
+\fastSetCouleurTexte[rgb]{1,1,1}
+\fastSetCouleurFond{black}
+\begin{fast}{FS1}
+ \fastFT{FT1}{
+ \fastST{Sol 1}}
+ \fastFT{}{
+ \fastST{Sol2}}
+\end{fast}
+\fastReset
+\end{code}
+%###################################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\fastSetCouleurBordures{red}
+\fastSetCouleurTexte[rgb]{1,1,1}
+\fastSetCouleurFond{black}
+\begin{fast}{FS1}
+ \fastFT{FT1}{
+ \fastST{Sol 1}}
+ \fastFT{}{
+ \fastST{Sol2}}
+\end{fast}
+\fastReset
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/reglages.tex b/graphics/pgf/contrib/fast-diagram/sources_help/reglages.tex
new file mode 100644
index 0000000000..b2e6d2196c
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/reglages.tex
@@ -0,0 +1,42 @@
+%%%%%%%%%%%%%%%%%%%
+\usepackage[latin1]{inputenc} %Caracteres francais
+\usepackage[T1]{fontenc} %Caracteres francais
+\usepackage[francais]{babel} %On ecrit en francais
+\usepackage{geometry}
+\usepackage{xcolor}
+\usepackage{listings}
+\usepackage[tikz]{bclogo}
+\usepackage{hyperref}
+\usepackage{amsmath}
+\usepackage{nameref}
+
+\hypersetup{colorlinks,citecolor=black,filecolor=black,linkcolor=red,urlcolor=blue}
+\geometry{margin=2cm}
+\title{Package ``fast-diagram.sty''}
+\author{Raphaël ALLAIS}
+\definecolor{fond}{RGB}{250,250,250}
+\lstset{language=[LaTeX]TeX,columns=flexible,basicstyle=\ttfamily,texcsstyle=*\color{blue},identifierstyle=\color{brown},commentstyle=\color{gray}\itshape,
+ moretexcs={FT,ST,fastDecalageTrait,FV,fastHauteurBoite,fastInterligne,fastLargeurBoite,fastEspaceColonne,fastReset,fastDecalageOuHorizontal,fastDecalageOuVertical,fastFT,fastST,fastVide,definecolor,fastSetCouleurBordures,fastSetCouleurTexte,fastSetCouleurFond}}
+\newcommand{\cqd}{Ce qui donne :\\}
+\newcommand{\comm}[1]{{\bfseries #1}}
+\newcommand{\uem} {\ensuremath{\footnotesize\text{ em}}}
+\newcommand{\ucm} {\ensuremath{\footnotesize\text{ cm}}}
+\newcommand{\maref}[1] {\nameref{#1} (p.\pageref{#1})}
+\definecolor{couleurExemple}{RGB}{240,240,240}%{250,250,250} %Couleur du fond
+\newenvironment{exemple}
+ {\begin{bclogo}[couleur=couleurExemple,arrondi=0.3,noborder = true,logo=\bcloupe,epBarre = 0]{}}
+ {\end{bclogo}\vspace{0.5cm}}
+
+\lstnewenvironment{code}
+ {\footnotesize\setbox1=\vbox
+ \bgroup}
+ {\egroup
+ \begin{center}
+ \begin{minipage}{0.8\linewidth}
+ \begin{bclogo}[couleur=white,logo=\bccrayon,noborder = true]{Code}
+ \box1
+ \end{bclogo}
+ \end{minipage}
+ \end{center}
+}
+%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff --git a/graphics/pgf/contrib/fast-diagram/sources_help/tikz.tex b/graphics/pgf/contrib/fast-diagram/sources_help/tikz.tex
new file mode 100644
index 0000000000..2babdd36df
--- /dev/null
+++ b/graphics/pgf/contrib/fast-diagram/sources_help/tikz.tex
@@ -0,0 +1,218 @@
+\section{Jouons avec TikZ\label{tikzz}}
+%=======================================
+
+
+
+ \subsection{TikZ dans le diagramme FAST}\label{tikzpartout}
+ %------------------------------------------------
+
+ L'environnement FAST est un environnement \emph{TikZ}.
+ Il est donc possible d'y ajouter n'importe quelle fonction de dessin de \emph{TikZ}.
+ Il en est de même pour les descendances des fonctions.
+%##########################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
+ (0,0) .. controls +(0,2) and +(0,3) .. (3,0)
+ .. controls +(0,-2) and +(0,2) .. (0,-4)
+ .. controls +(0,2) and +(0,-2) .. (-3,0)
+ .. controls +(0,2) and +(0,2) .. (0,0);
+ } %Exemple pris dans ``TikZ pour l'impatient''
+ \FT{FT2}{}
+\end{fast}
+\end{code}
+%##########################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
+ (0,0) .. controls +(0,2) and +(0,3) .. (3,0)
+ .. controls +(0,-2) and +(0,2) .. (0,-4)
+ .. controls +(0,2) and +(0,-2) .. (-3,0)
+ .. controls +(0,2) and +(0,2) .. (0,0);}
+ %Exemple pris dans ``TikZ pour l'impatient''
+ \FT{FT2}{}
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Il est à noter que dans l'exemple précédent, la seconde ligne du diagramme ne tient pas compte de la ``place'' que prend notre dessin.
+ Pour que ce soit le cas, il faut que la descendance (c'est à dire le dessin) ``marque'' sa place en créant une coordonnée correspondant au point le plus bas du dessin.
+ C'est sur ce point que la seconde ligne va se baser.
+
+ Ce point doit être enregistré dans la variable {\color{blue}\verb'BoiteMinimums'} de la manière suivante :
+%##########################################
+\begin{code}
+\coordinate (BoiteMinimums) at (X,Y);
+\end{code}
+%##########################################
+ où le couple $(X, Y)$ est la coordonnées du minimum.
+
+ Par exemple :
+%##########################################
+\begin{code}
+\begin{fast}{Fonction de Service}
+ \FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
+ (0,0) .. controls +(0,2) and +(0,3) .. (3,0)
+ .. controls +(0,-2) and +(0,2) .. (0,-4)
+ .. controls +(0,2) and +(0,-2) .. (-3,0)
+ .. controls +(0,2) and +(0,2) .. (0,0);
+ \coordinate (BoiteMinimums) at (0,-2.5);
+ } %Exemple pris dans ``TikZ pour l'impatient''
+ \FT{FT2}{}
+\end{fast}
+\end{code}
+%##########################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de Service}
+ \FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
+ (0,0) .. controls +(0,2) and +(0,3) .. (3,0)
+ .. controls +(0,-2) and +(0,2) .. (0,-4)
+ .. controls +(0,2) and +(0,-2) .. (-3,0)
+ .. controls +(0,2) and +(0,2) .. (0,0);
+ \coordinate (BoiteMinimums) at (0,-2.5);}
+ %Exemple pris dans ``TikZ pour l'impatient''
+ \FT{FT2}{}
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ \subsection{Gestion des boîtes}\label{boites}
+ %-----------------------------------------
+
+ Les boites créées dans le diagramme FAST sont réalisées par la fonction {\color{blue}\verb'\node'} de \emph{TikZ}.
+ Ces boîtes sont nommées sous la forme suivante : {\color{blue}\verb'\fastBoiteX'} où {\color{blue}\verb'X'} est remplacé par le numéro de la boite.
+ Ce numéro est défini par ordre de création des boites : de gauche à droite, de haut en bas.
+ Voici un exemple faisant apparaître le nom des boites :
+ \begin{center}
+ \begin{fast}{fastBoite0}
+ \FT{fastBoite1}{\FT{fastBoite2}{}
+ \FT{fastBoite3}{\FT{fastBoite4}{}}}
+ \FT{fastBoite5}{\FT{fastBoite6}{}
+ \FT{fastBoite7}{}}
+ \end{fast}
+ \end{center}
+
+ Partant de là, il est alors possible de réaliser des modifications manuelles sur le diagramme.
+ Par exemple, pour avoir une solution technique commune à deux fonctions techniques :
+%##########################################
+\begin{code}
+\begin{fast}{Fonction de service}
+ \fastFT{FT1}{\fastST{ST}}
+ \fastFT{FT2}{}
+ \draw[line width=\fastEpaisseurTraits]
+ (fastBoite3.east) -| ($0.5*(fastBoite2.north west)
+ +0.5*(fastBoite1.north east)+(0,\fastDecalageTrait)$);
+\end{fast}
+\end{code}
+%##########################################
+ \cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+\begin{fast}{Fonction de service}
+ \fastFT{FT1}{\fastST{ST}}
+ \fastFT{FT2}{}
+ \draw[line width=\fastEpaisseurTraits](fastBoite3.east) -| ($0.5*(fastBoite2.north west)+0.5*(fastBoite1.north east)+(0,\fastDecalageTrait)$);
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ \subsection{Créer sa propre boite}\label{perso}
+ %--------------------------------------
+
+ Les boites sont à peu prés toutes créées sur le même modèle et il est possible d'en créer d'autres :
+%##########################################
+\begin{code}
+\newcommand*{\maBoite}[2]{
+ \fastAvanceColonne %On avance d'une colonne
+ \addtocounter{cptBoite}{1} %On incremente le numero de la boite
+ %%%%%%%%%%%%%%%%%%%%%%%
+ %Créer votre boite ici :
+ \node [anchor=north west] (noeud \thecptAbscisse) at
+ ($(\posX,0)+(BoiteMinimums)$) {#1};
+ %%%%%%%%%%%%%%%%%%%%%%
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west)
+ (noeud \thecptAbscisse.south east)]
+ (fastBoite\thecptBoite) {};%Boite de nommage
+ \fastTraceConnecteurs
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %Votre descendance :
+ #2
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ \fastEnregistreMinimum %Enregistre le minimum de la boite
+ \fastReculeColonne %Recule d'une colonne
+}
+\end{code}
+%##########################################
+
+
+ Le n\oe ud créé sous la ligne ``{\color{blue}\verb'Créer votre boite ici'}'' est la boite que vous allez afficher.
+ C'est elle que vous allez pouvoir modifier pour l'adapter à vos besoins.
+ Ce n\oe ud doit obligatoirement porter le nom {\color{blue}\verb'(noeud \thecptAbscisse)'}.
+ Les autres commandes ne doivent pas être changées.
+
+ Voici un exemple :
+%##########################################
+\begin{code}
+ \newcommand*{\maBoite}[2]{
+ \fastAvanceColonne %On avance d'une colonne
+ \addtocounter{cptBoite}{1} %On incremente le numero de la boite
+ %%%%%%%%%%%%%%%%%%%%%%%
+ %Créer votre boite ici
+ \node [anchor=north west,draw,rounded corners=3pt,
+ aspect=2.5,text=red](noeud \thecptAbscisse)
+ at ($(\posX,0)+(BoiteMinimums)$) {#1};
+ %%%%%%%%%%%%%%%%%%%%%%
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west)
+ (noeud \thecptAbscisse.south east)]
+ (fastBoite\thecptBoite) {};
+ \fastTraceConnecteurs
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %Votre descendance
+ #2
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ \fastEnregistreMinimum %Enregistre le minimum de la boite
+ \fastReculeColonne %Recule d'une colonne
+}
+
+\begin{fast}{Fonction de Service}
+ \maBoite{Ma boite}
+ {\fastST{Solution}}
+ \FT{Fonction}{\maBoite{Ma boite bis}{}
+ \fastFT{Fonction}{}}
+\end{fast}
+\end{code}
+%##########################################
+\cqd
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{exemple}
+ \newcommand*{\maBoite}[2]{
+ \fastAvanceColonne %On avance d'une colonne
+ \addtocounter{cptBoite}{1} %On incremente le numero de la boite
+ %%%%%%%%%%%%%%%%%%%%%%%
+ %Créer votre boite ici
+ \node [anchor=north west,draw,rounded corners=3pt,aspect=2.5,text=red](noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {#1};
+ %%%%%%%%%%%%%%%%%%%%%%
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west)
+ (noeud \thecptAbscisse.south east)]
+ (fastBoite\thecptBoite) {};%Boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+ \fastTraceConnecteurs
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ %Votre descendance
+ #2
+ %%%%%%%%%%%%%%%%%%%%%%%%%
+ \fastEnregistreMinimum %Enregistre le minimum de la boite
+ \fastReculeColonne %Recule d'une colonne
+}
+
+\begin{fast}{Fonction de Service}
+ \maBoite{Ma boite}
+ {\fastST{Solution}}
+ \FT{Fonction}{\maBoite{Ma boite bis}{}
+ \fastFT{Fonction}{}}
+\end{fast}
+\end{exemple}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff --git a/graphics/pgf/contrib/flowchart/README b/graphics/pgf/contrib/flowchart/README
new file mode 100644
index 0000000000..138ebb4177
--- /dev/null
+++ b/graphics/pgf/contrib/flowchart/README
@@ -0,0 +1,32 @@
+flowchart 3.3 (19 March 2015)
+
+This package provides a set of shapes that can be used in
+TikZ picture environments to draw programming flowcharts.
+
+To install the package, run LaTeX on the installation script
+flowchart.ins and follow the instructions provided by the script
+itself.
+
+It requires that the makeshape and TikZ packages are also
+installed.
+
+Run LaTeX on flowchart.dtx to get the package's documentation.
+Comment out this files 'OnlyDescription' line to include the
+implementation documentation.
+
+Copyright (C) 2015 by Adrian P Robson
+ adrian.robson@nepsweb.co.uk
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Adrian Robson.
+
+This work consists of the files flowchart.dtx and
+ flowchart.ins
+and the derived files flowchart.sty and
+ flowchart.pdf
diff --git a/graphics/pgf/contrib/flowchart/flowchart.dtx b/graphics/pgf/contrib/flowchart/flowchart.dtx
new file mode 100644
index 0000000000..03711589cb
--- /dev/null
+++ b/graphics/pgf/contrib/flowchart/flowchart.dtx
@@ -0,0 +1,1390 @@
+% \iffalse meta-comment
+%
+% Flowchart 3.3
+% 19 March 2015
+%
+% flowchart.dtx
+%
+% Documented LaTeX file for the flowchart package.
+%
+% Run LaTeX on flowchart.ini to make the package's
+% flowchart.sty file.
+%
+% Run LaTeX on this file to produce the package
+% documentation.
+%
+% The flowchart package is an outcome of the Fluxion
+% project.
+%
+% Copyright (C) 2015 by Adrian P Robson
+% adrian.robson@nepsweb.co.uk
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Adrian Robson.
+%
+% This work consists of the files flowchart.dtx and
+% flowchart.ins
+% and the derived files flowchart.sty and
+% flowchart.pdf
+% -----------------------------------------------------------
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[2011/06/27]
+%<package>\ProvidesPackage{flowchart}
+%<package>[2015/03/19 3.3 Flowchart shapes for TikZ]
+%<*driver>
+\documentclass[10pt,a4paper]{ltxdoc}
+
+\usepackage{flowchart}
+\usetikzlibrary{arrows}
+
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{textcomp}
+
+\usepackage{fancyvrb}
+\usepackage{enumitem}
+\usepackage{url}
+\usepackage{array}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+%\OnlyDescription % comment out for code implementation
+
+\newcommand{\mnote}[1]
+{\marginpar{\scriptsize \raggedright #1 }}
+
+\def\tikzname{Ti\emph{k}Z}
+
+\begin{document}
+\DocInput{flowchart.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%^^A-------------------------------------------------------------------
+%^^A Change log...
+%^^A-------------------------------------------------------------------
+%^^A
+%^^A 27 January 2013
+%^^A Original
+% \changes{v3.1}{2014/01/27}{
+% Installation has been converted to dtx format,
+% and the {\tt flowchart.sty} is generated by the
+% {\tt flowchart.ins} file.
+% It replaces version 2.4 of the package, and
+% uses version 2.1 of the makeshape package.
+% }
+%^^A
+%^^A 28 January 2013
+%^^A Original
+% \changes{v3.2}{2014/01/28}{
+% The decision shape has been improved. }
+%^^A
+%^^A 19 March 2015
+%^^A Original
+% \changes{v3.3}{2015/03/19}{
+% An error in the documentation's sample code has been corrected.
+% }
+%^^A
+%^^A-------------------------------------------------------------------
+%
+% \CheckSum{0} ^^A no checksum for development
+%^^A \CheckSum{59}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \GetFileInfo{flowchart.sty}
+%
+% \title{The {\tt flowchart} package\thanks{
+% This document corresponds to \textsf{flowchart}~\fileversion,
+% dated~\filedate.}\\[0.5ex]
+% Flowchart Shapes for \tikzname}
+%
+% \author{Adrian P. Robson\thanks{\texttt{adrian.robson@nepsweb.co.uk}}}
+% \date{19 March 2015}
+%
+% \maketitle
+%
+%^^A \tableofcontents
+%
+%^^A-------------------------------------------------------------------
+%^^A Start report body
+%^^A-------------------------------------------------------------------
+%
+% \section{Introduction}
+%
+% This package provides shapes for drawing program flowcharts.
+% They are based on the classic \emph{IBM Flowcharting Template},
+% which conforms to ISO~1028:1973, with some IBM extensions.
+% (this has since been revised by ISO 5807:1985).
+%
+% At the moment, there is only a limited selection of the standard symbols,
+% but other symbols might be added in the future.
+%
+% This package requires that |makeshape| \cite{makeshape} and of course
+% PGF/\tikzname{} \cite{pgfMan} are also installed .
+%
+% \section{The Symbols}\label{symbols}
+%
+% The package provides the following symbols as defined in the ISO standard:
+%
+% \def\colA{3.2cm}
+% \def\colB{8cm}
+%
+% \def\swide{2.8cm}
+% \def\pht{1.3cm}
+% \def\dht{1.8cm}
+% \def\ppht{\pht}
+% \def\sht{\pht}
+% \def\tht{0.75cm}
+%
+%^^A - process symbol
+% \vspace{3mm}
+% \noindent
+% \begin{tabular}{m{\colA} m{\colB}}
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+% \node (process1) at (0,0) [draw, process,
+% minimum width=\swide,
+% minimum height=\pht] {PROCESS}; %PROCESS
+% \end{tikzpicture}
+% &
+% {\bf Process} -- Any processing function; or defined operations causing change in value,
+% form or location of information.\\
+% \end{tabular}
+%
+%^^A - decision symbol
+% \vspace{3mm}
+% \noindent
+% \begin{tabular}{m{\colA} m{\colB}}
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+% \node at (0,0) [draw, decision, %aspect=1.5,
+% minimum width=\swide,
+% minimum height=\dht] {DECISION};
+% \end{tikzpicture}
+% &
+% {\bf Decision} -- A decision or switching-type operation that determines
+% which of a number of alternative paths are followed.\\
+% \end{tabular}
+%
+%^^A - predefined process symbol
+% \vspace{5mm}
+% \noindent
+% \begin{tabular}{m{\colA} m{\colB}}
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+% \node at (0,0) [draw, predproc, align=left,
+% minimum width=\swide,
+% minimum height=\ppht] {Predefined\\
+% Process};
+% \end{tikzpicture}
+% &
+% {\bf Predefined Process} -- One or more named operations or program steps specified
+% in a subroutine or another set of flowcharts.\\
+% \end{tabular}
+%
+%^^A - storage symbol
+% \vspace{5mm}
+% \noindent
+% \begin{tabular}{m{\colA} m{\colB}}
+% \hspace*{-1.85mm}
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+% \node at (0,0) [draw, storage,
+% minimum width=\swide,
+% minimum height=\sht] {STORAGE};
+% \end{tikzpicture}
+% &
+% {\bf Storage} -- Input or output using any kind of online storage.\\
+%
+% \end{tabular}
+%
+%^^A - terminal symbol
+% \vspace{4mm}
+% \noindent
+% \begin{tabular}{m{\colA} m{\colB}}
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+% \node at (0,0) [ draw, terminal,
+% minimum width=\swide,
+% minimum height=\tht] {TERMINAL};
+% \end{tikzpicture}
+% &
+% {\bf Terminal} -- A terminal point in a flowchart: start, stop, halt delay or interrupt.
+% It may show exit from a closed subroutine.\\
+% \end{tabular}
+%
+% \section{Usage}
+%
+% The example below uses all of the symbols given in \S\ref{symbols},
+% and shows how they can be laid out and connected with \tikzname:
+%
+% \begin{center}
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+%
+% \def\smbwd{2cm}
+%
+% \node (terminal1) at (0,0) [draw, terminal,
+% minimum width=\smbwd,
+% minimum height=0.5cm] {START};
+%
+% \node (predproc1) at (0,-1.5) [draw, predproc, align=left,
+% minimum width=\smbwd,
+% minimum height=1cm] {GET\\ DATA};
+%
+% \node (decide1) at (0,-3.5) [draw, decision,
+% minimum width=\smbwd,
+% minimum height=1cm] {C$<$3};
+%
+% \node (storage1) at (0,-5.5) [draw, storage,
+% minimum width=\smbwd,
+% minimum height=1cm] {STORE};
+%
+% \node (process1) at (3,-5.5) [draw, process,
+% minimum width=\smbwd,
+% minimum height=1cm] {PROCESS};
+%
+% \coordinate (point1) at (0,-6.75);
+%
+% \node (terminal2) at (0,-7.75) [draw, terminal,
+% minimum width=\smbwd,
+% minimum height=0.5cm] {END};
+%
+% \draw[->] (terminal1) -- (predproc1);
+% \draw[->] (predproc1) -- (decide1);
+% \draw[->] (decide1) -| node[above]{YES} (process1);
+% \draw[->] (decide1) -- (storage1);
+% \draw[->] (process1) |- (point1);
+% \draw[->] (storage1) -- (point1) -- (terminal2);
+%
+% \end{tikzpicture}
+% \end{center}
+%
+% It needs the following in the document's preamble:
+%
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \usepackage{flowchart}
+% \usetikzlibrary{arrows}
+% \end{VerbatimOut}
+% \VerbatimInput[]{\jobname.tmp}
+%
+% \noindent
+% The \tikzname{} package is included in |flowchart|, so it does not have to be explicitly loaded.
+% However, any |\usetikzlibrary| commands that are needed must be placed after
+% |\loadpackage{flowchart}|.
+%
+% The flowchart above is produced by the following |tikzpicture| environment:
+%
+% \begin{VerbatimOut}[gobble=1]{\jobname.tmp}
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+%
+% \def\smbwd{2cm}
+%
+% \node (terminal1) at (0,0) [draw, terminal,
+% minimum width=\smbwd,
+% minimum height=0.5cm] {START};
+%
+% \node (predproc1) at (0,-1.5) [draw, predproc, align=left,
+% minimum width=\smbwd,
+% minimum height=1cm] {GET\\ DATA};
+%
+% \node (decide1) at (0,-3.5) [draw, decision,
+% minimum width=\smbwd,
+% minimum height=1cm] {C$<$3};
+%
+% \node (storage1) at (0,-5.5) [draw, storage,
+% minimum width=\smbwd,
+% minimum height=1cm] {STORE};
+%
+% \node (process1) at (3,-5.5) [draw, process,
+% minimum width=\smbwd,
+% minimum height=1cm] {PROCESS};
+%
+% \coordinate (point1) at (0,-6.75);
+%
+% \node (terminal2) at (0,-7.75) [draw, terminal,
+% minimum width=\smbwd,
+% minimum height=0.5cm] {END};
+%
+% \draw[->] (terminal1) -- (predproc1);
+% \draw[->] (predproc1) -- (decide1);
+% \draw[->] (decide1) -| node[above]{YES} (process1);
+% \draw[->] (decide1) -- (storage1);
+% \draw[->] (process1) |- (point1);
+% \draw[->] (storage1) -- (point1) -- (terminal2);
+%
+% \end{tikzpicture}
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left]{\jobname.tmp}
+%
+% \subsection{Symbols}
+%
+% The flow chart symbols are created as nodes, as shown in lines 5-7,
+% which defines a |terminal| shape.
+% The minimum dimension keys should be used to create consistently sized symbols.
+% In particular, a defined value should be used for the width in all symbols.
+% So |\smbwd| is defined on line 3, and used in lines 6, 10, 14, 18, 22, and 28.
+%
+% \subsection{Layout}
+%
+% In this example, we have used absolute coordinates to position the diagram's nodes.
+% This works well for small flowcharts, but relative positioning might be better for larger diagrams.
+%
+% \subsection{Connectors}
+%
+% The shapes are connected by drawing lines between them as shown in lines 31-36 of the example.
+% Here, unqualified node names are used,
+% but explicit anchor names such as |(nodename.north east)| could be used instead.
+%
+% It can sometimes be convenient to place a connector at an arbitrary point on a shape.
+% The |(nodename.45)| notation achieves this, where the number gives the angle from the centre of the
+% shape to the connecting point on its boundary.
+%
+% Right angled connections are traditionally used in flowcharts, and these are created with
+% the \verb+-|+ and \verb+|-+ notations shown in lines 33 and 35 of the example.
+%
+% Joining connectors is best done by declaring a named coordinate, and using it as the meeting point.
+% In the example, a coordinate called |point1| is declared on line 25,
+% and then used in line 35 and 36 % to connect |process1| and |storage1| to |terminal2|.
+%
+%^^A-------------------------------------------------------------------
+%^^A References
+%^^A-------------------------------------------------------------------
+%
+% \def\mybib{
+% \begin{thebibliography}{9}
+% \raggedright
+% \bibitem{makeshape}
+% Adrian P. Robson,
+% \emph{The makeshape package
+% and a method for creating custom shapes in PGF}, 2013.
+% Available as {\tt makeshape.pdf} from \url{ctan.org}.
+% \bibitem{pgfMan}
+% Till Tantau,
+% \emph{The TikZ and PGF Packages, Manual for version 2.10},
+% 2010.
+% Available as {\tt pgfmanual.pdf} from \url{ctan.org}.
+% \end{thebibliography}
+% }
+%
+%^^A-------------------------------------------------------------------
+%^^A Start code implementation
+%^^A-------------------------------------------------------------------
+%
+% \StopEventually{\mybib}
+%^^A \StopEventually{\mybib \PrintChanges}
+%^^A -> Run pdfLaTeX flowchart.dtx
+%^^A makeindex -s gglo.ist -o flowchart.gls flowchart.glo
+%^^A pdfLaTeX flowchart.dtx
+%
+% \section{Implementation}
+%
+% The implementation of |flowchart.sty| uses the |makeshape| package,
+% which provides support for custom PGF shapes.
+% With this, we have only have to create boundary and anchor path macros,
+% and anchor points for each shape.
+%
+% There are three pairs of keys that have to be accommodated by PGF shapes:
+% inner and outer separation, and minimum dimensions.
+% The |makeshape| package has corrected text box macros |\ctbnex| and |\ctbney|,
+% which automatically handle inner separation;
+% and the PGF keys |\pgfshapeouterxsep|, |\pgfshapeouterysep|, |\pgfshapeminheight| and
+% |\pgfshapeminwidth|, which give the outer separation and minimum dimensions of the shape.
+%
+% \subsection{Preamble}
+% The |makeshape| package provides the |tikz| package. However, the |shapes| library is also needed:
+%
+% \begin{macrocode}
+\RequirePackage{makeshape}
+\RequirePackage{tikz}
+\usetikzlibrary{shapes}
+% \end{macrocode}
+%
+%^^A ************************************************************
+%^^A * Predefined Process shape starts
+%^^A ************************************************************
+% \subsection{Predproc Shape}
+%
+% This is the Predefined Process symbol.
+%
+% \subsubsection{Anchor and background paths}\label{predprocpaths}
+%
+%
+% These macros define the paths that are used by the |makeshape| |setpaths| command in
+% the shape's |\pgfdeclareshape| macro, which is described in \S\ref{predprocShape}.
+%
+% \begin{macro}{\band}
+% The shape's side band size is an internal constant:
+% \begin{macrocode}
+\def\band{10pt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\predprocAnchorpath}
+% The |\predprocAnchorpath| macro defines the shape's \emph{anchor path}.
+% It `draws' the path on which the shape's calculated anchor points lay.
+% It is very similar to first part of |\predproc@shape| that draws the outer path,
+% but it corrects for outer separation and does not draw any side bands.
+% \begin{macrocode}
+\def\predprocAnchorpath{
+% \end{macrocode}
+%
+% First, get the corrected text box's NE corner using |\ctbnex| and |\ctbney|,
+% then make room for the side band.
+% \begin{macrocode}
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ \advance\pgf@xa by \band
+% \end{macrocode}
+% Correct for minimum dimensions and outer separation:
+% \begin{macrocode}
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \advance\pgf@xa\pgfshapeouterxsep
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+ \advance\pgf@ya\pgfshapeouterysep
+% \end{macrocode}
+%
+% Finally, draw the anchor path, which is a rectangle,
+% using the values in |\pgf@xa| and |\pgf@ya| that were calculated above:
+% \begin{macrocode}
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\predprocBackground}
+% The |\predprocBackground| macro draws the shape's path, including its side band.
+% It is used in the shape's |\backgroundpath| macro.
+% \begin{macrocode}
+\def\predprocBackground{
+% \end{macrocode}
+%
+% First, get the corrected text box's NE corner using |\ctbnex| and |\ctbney|,
+% then make room for the side band.
+% \begin{macrocode}
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ \advance\pgf@xa by \band
+% \end{macrocode}
+% Correct for minimum dimensions but \emph{do not add} outer separation:
+% \begin{macrocode}
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+% \end{macrocode}
+%
+% Finally, draw the outer shape, which is a rectangle,
+% using the values in |\pgf@xa| and |\pgf@ya| that were calculated above:
+% \begin{macrocode}
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathclose
+% \end{macrocode}
+%
+% Finally, we draw the inner shape, which completes the shape with its side bands.
+% The x-coordinate is aligned on the right side band position, then the side bands are drawn:
+% \begin{macrocode}
+ \advance\pgf@xa by -\band
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathmoveto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Predproc shape declaration}\label{predprocShape}
+%
+% \begin{macro}{\pgfdeclareshape}
+% \begin{macro}{predproc}
+% This is the |\pgfdeclareshape| declaration for the |predproc| shape.
+% \begin{macrocode}
+\pgfdeclareshape{predproc}{
+% \end{macrocode}
+% The path macros defined in \S\ref{predprocpaths} are used as follows
+% with the |setpaths| command provided by the |makeshape| package to draw the
+% shape and make boundary intersection calculations.
+% \begin{macrocode}
+ \setpaths{\predprocAnchorpath}{\predprocBackground}
+% \end{macrocode}
+%
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\northeast}
+% The |\northeast| saved anchor is used to define the position of the NE corner of the shape.
+% The calculation is similar that used in the anchor path described in \S\ref{predprocpaths},
+% and corrects for inner and outer separation, and minimum dimensions.
+% It returns the coordinates of the point in |\pgf@x| and |\pgf@y|.
+% \begin{macrocode}
+ \savedanchor{\northeast}{
+ \pgf@x = \ctbnex
+ \advance\pgf@x by \band
+ \mincorrect{\pgf@x}{\pgfshapeminwidth}
+ \advance\pgf@x\pgfshapeouterxsep
+ \pgf@y = \ctbney
+ \mincorrect{\pgf@y}{\pgfshapeminheight}
+ \advance\pgf@y\pgfshapeouterysep
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\anchor}
+% \begin{macro}{north}
+% \begin{macro}{north east}
+% \begin{macro}{east}
+% \begin{macro}{south east}
+% \begin{macro}{south}
+% \begin{macro}{south west}
+% \begin{macro}{west}
+% \begin{macro}{north west}
+% There are some standard anchors, which
+% are all based on the |\northeast| saved anchor:
+% \begin{macrocode}
+ \anchor{north}{ \northeast \pgf@x=0pt }
+ \anchor{north east}{ \northeast }
+ \anchor{east}{ \northeast \pgf@y=0pt }
+ \anchor{south east}{ \northeast \pgf@y=-\pgf@y }
+ \anchor{south}{ \northeast \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{south west}{ \northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{west}{ \northeast \pgf@x=-\pgf@x \pgf@y=0pt }
+ \anchor{north west}{ \northeast \pgf@x=-\pgf@x }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro} ^^A end predproc
+% \end{macro} ^^A end \pgfdeclareshape
+%
+%^^A ************************************************************
+%^^A * Predefined Process shape ends
+%^^A ************************************************************
+%
+%^^A ************************************************************
+%^^A * Storage shape starts
+%^^A ************************************************************
+% \subsection{Storage Shape}
+%
+% \subsubsection{Support Macros}
+%
+% \begin{macro}{\storagepath}
+% The |storage| shape's background path is defined in |\storagepath|.
+% It requires the following register to be set:
+%
+% \begin{tabular}{ll}
+% |\pgf@x| & x coordinate of NE corner excluding outer separation\\
+% |\pgf@y| & y coordinate of NE corner excluding outer separation\\
+% |\pgf@xc| & arc offset for y coordinate
+% \end{tabular}
+%
+%\medskip
+% The NE corner is stored in |\pgf@xa| and |\pgf@ya| and
+% and the SW corner is put in |\pgf@xb| and |\pgf@yb|.
+% The SW x-coordinate has to be moved right by the arc offset to compensate for the
+% curve of the shapes west side.
+% \begin{macrocode}
+\def\storagepath{
+ \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \pgf@xb=-\pgf@xa \pgf@yb=-\pgf@ya
+ \advance\pgf@xb by \pgf@xc
+% \end{macrocode}
+% The shape is drawn from its SW corner moving counter clockwise.
+% The radius for the arcs is the height.
+% \begin{macrocode}
+ \pgfpathmoveto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgfpatharc{210}{150}{2*\pgf@ya}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpatharc{150}{210}{2*\pgf@ya}
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\arcoffset}
+% The |storage| shape's arc offset is calculated by the |\arcoffset| macro.
+% The required arc offset is $b$, and the shape's height is $h$ in the diagram below.
+% \medskip
+%
+% \begin{tabular}{cc}
+% \begin{tikzpicture}
+% \def\sht{4cm}
+% \def\oset{0.536cm}
+% \def\a{\sht+\oset}
+% \draw[] (0,0) -- (-\sht,0);
+% \draw[] (-\sht,0) arc (0:40:-\sht);
+% \draw[] (-\sht,0) arc (180:140:\sht);
+% \draw[] (-\a,-\sht*0.5) -- (-\a,\sht*0.5);
+% \draw[] (-\a,\sht*0.5) -- (0,0);
+% \draw[] (-\a,\sht*0.5) -- ++(-1,0);
+% \draw[] (-\a,-\sht*0.5) -- ++(-1,0);
+% \node at (-2cm,1.5cm) [] {$h$};
+% \node at (-3.1cm,0.7cm) [] {$h/2$};
+% \node at (-2cm,-0.2cm) [] {$a$};
+% \node at (-3.7cm,-0.2cm) [] {$b$};
+% \end{tikzpicture}
+% &
+% \begin{minipage}[b]{6.5cm}
+% \begin{eqnarray}
+% h^2 &=& a^2 + \left(\frac{h}{2}\right)^2 \nonumber\\[3pt]
+% a^2 &=& h^2 - \frac{h^2}{4} = \frac{3h^2}{4} \nonumber\\[2pt]
+% a &=& h \sqrt{3/4}\\[2ex]
+% b &=& h - a = h - h \sqrt{3/4} \nonumber\\[2pt]
+% &=& h(1 - \sqrt{3/4}) \approx 0.134h \label{equoffset} \\\nonumber
+% \end{eqnarray}
+% \end{minipage}
+% \end{tabular}
+%
+% \bigskip
+% \noindent
+% The macro's parameters are:
+%
+% \begin{tabular}{ll}
+% |#1| & the calculated arc offset\\
+% |#2| & half the height\\
+% \end{tabular}
+%
+% \medskip\noindent
+% Equation \ref{equoffset} given above is implemented as follows:
+% \begin{macrocode}
+\def\arcoffset#1#2{
+ \pgfmathsetlength#1{0.134*2*#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\storageParams}
+% The |\storageParams| macro calculates reference values for the shape
+% with no outer separation.
+% The following have values assigned after it is called:
+%
+% \begin{tabular}{ll}
+% |\pgf@x| & x-coordinate of NE corner excluding outer separation\\
+% |\pgf@y| & y-coordinate of NE corner excluding outer separation\\
+% |\pgf@xc| & arc offset for y-coordinate
+% \end{tabular}
+%
+% \medskip
+% First get the shape's corrected text box:
+% \begin{macrocode}
+\def\storageParams{
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+% \end{macrocode}
+% Correct for minimum height but not for outer separation.
+% \begin{macrocode}
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+% \end{macrocode}
+% Calculate the room needed for the side arc, which is one of the macro's outputs,
+% and use it to change the x-coordinate:
+% \begin{macrocode}
+ \arcoffset{\pgf@xc}{\pgf@ya}
+ \advance\pgf@xa by \pgf@xc
+% \end{macrocode}
+% Finally, correct for minimum width and set the output registers:
+% \begin{macrocode}
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@ya
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\storageParamsOuter}
+% The |\storageParamsOuter| macro calculates reference values for the shape
+% with its outer separation included.
+% The following have values assigned after it is called:
+% \begin{tabular}{ll}
+% |\pgf@x| & x coordinate of NE corner including outer separation\\
+% |\pgf@y| & y coordinate of NE corner including outer separation\\
+% |\pgf@xc| & arc offset for y coordinate
+% \end{tabular}
+%
+% \medskip
+% Its implementation has a lot in common with |\storageParams|.
+% First, get the NE corner of the corrected text box:
+% \begin{macrocode}
+\def\storageParamsOuter{
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+% \end{macrocode}
+% Correct for minimum height and outer separation:
+% \begin{macrocode}
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+ \advance\pgf@ya\pgfshapeouterysep
+% \end{macrocode}
+% Calculate the arc offset, which is an output, and make room for the side curve:
+% \begin{macrocode}
+ \arcoffset{\pgf@xc}{\pgf@ya}
+ \advance\pgf@xa by \pgf@xc
+% \end{macrocode}
+% Finally, correct for minimum width and outer separation. Then set the output registers:
+% \begin{macrocode}
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \advance\pgf@xa\pgfshapeouterxsep
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@ya
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Anchor and background paths}\label{storagepaths}
+%
+% The anchor and background path macros both use |\storagepath|, but with with different parameters.
+% The output registers of the macros |\storageParams| and |\storageParamsOuter|
+% are compatible with the inputs of |\storagepath|.
+%
+% \begin{macro}{\storageAnchorpath}
+% The |\storageAnchorpath| macro defines the shape's \emph{anchor path}.
+% It `draws' the path on which the shape's calculated anchor points lay.
+% This is similar to the background path but it is corrected for outer separation
+% and minimum dimensions.
+% \begin{macrocode}
+\def\storageAnchorpath{
+ \storageParamsOuter
+ \storagepath
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\storageBackground}
+% The |\storageBackground| macro draws the path that is the outer boundary of the
+% |storage| shape. This excludes outer separation but corrects for minimum height and width.
+% \begin{macrocode}
+\def\storageBackground{
+ \storageParams
+ \storagepath
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Storage shape declaration}
+%
+% \begin{macro}{\pgfdeclareshape}
+% \begin{macro}{storage}
+% This is the |\pgfdeclareshape| declaration for the |storage| shape.
+% \begin{macrocode}
+\pgfdeclareshape{storage}{
+% \end{macrocode}
+% The path macros defined in \S\ref{storagepaths} are used
+% with the |setpaths| command provided by the |makeshape| package to draw the
+% shape and make boundary intersection calculations:
+% \begin{macrocode}
+ \setpaths{\storageAnchorpath}{\storageBackground}
+% \end{macrocode}
+%
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\northeast}
+% There are two saved anchors defined for the |storage| shape.
+% The |\northeast| saved anchor is used to define the position of the NE corner of the shape.
+% The calculation is similar that used in the anchor path described in \S\ref{storagepaths},
+% and corrects for inner and outer separation, and minimum dimensions.
+% It returns the coordinates of the point in |\pgf@x| and |\pgf@y|,
+% and its implementation is trivial since |\storageParamsOuter| does the required work.
+% \begin{macrocode}
+ \savedanchor{\northeast}{
+ \storageParamsOuter
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\northeast}
+% The |\northeastArc| saved anchor is similar, but corrects for the arc offset.
+%
+% \begin{macrocode}
+ \savedanchor{\northeastArc}{
+ \storageParamsOuter
+ \advance\pgf@x by -\pgf@xc
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\anchor}
+% \begin{macro}{north}
+% \begin{macro}{north east}
+% \begin{macro}{east}
+% \begin{macro}{south east}
+% \begin{macro}{south}
+% \begin{macro}{south west}
+% \begin{macro}{west}
+% \begin{macro}{north west}
+% The standard anchors are defined.
+% These are based on the |\northeast| and |\northeastArc| saved anchors:
+% \begin{macrocode}
+ \anchor{north}{ \northeast \pgf@x=0pt }
+ \anchor{north east}{ \northeast }
+ \anchor{east}{ \northeastArc \pgf@y=0pt }
+ \anchor{south east}{ \northeast \pgf@y=-\pgf@y }
+ \anchor{south}{ \northeast \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{south west}{ \northeastArc \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{west}{ \northeast \pgf@x=-\pgf@x \pgf@y=0pt }
+ \anchor{north west}{ \northeastArc \pgf@x=-\pgf@x }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\anchor}
+% \begin{macro}{north}
+% \begin{macro}{north east}
+% \begin{macro}{east}
+% Three additional anchors are defined that follow the shape's bounding rectangle.
+% \begin{macrocode}
+ \anchor{east r}{ \northeast \pgf@y=0pt }
+ \anchor{north west r}{ \northeast \pgf@x=-\pgf@x }
+ \anchor{south west r}{ \northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro} ^^A end storage
+% \end{macro} ^^A end \pgfdeclareshape
+%
+%^^A ************************************************************
+%^^A * Storage shape ends
+%^^A ************************************************************
+%
+%^^A ************************************************************
+%^^A * Process shape starts
+%^^A ************************************************************
+% \subsection{Process Shape}
+%
+% \begin{macro}{\pgfdeclareshape}
+% \begin{macro}{process}
+% The {\tt process} shape is simply implemented
+% by inheriting relevant anchors and paths from the standard |rectangle| shape
+% without any changes:
+% \begin{macrocode}
+\pgfdeclareshape{process}{
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{text}
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritbackgroundpath[from=rectangle]
+ \inheritanchorborder[from=rectangle]
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%^^A ************************************************************
+%^^A * Process shape ends
+%^^A ************************************************************
+%
+%^^A ************************************************************
+%^^A * Decision shape starts
+%^^A ************************************************************
+% \subsection{Decision Shape}
+%
+% \subsubsection{Support Macros}
+%
+% Two macros |\decisionref| and |\decisionrefout| give a reference point for the |decision| shape.
+% The default shape is a rotated square which touches the corrected text box.
+% The location and calculation of the default reference point is illustrated below:
+%
+% \begin{center}
+% \begin{tikzpicture}
+%
+% ^^A - Axis
+% \draw [dotted] (0,0) -- +(3cm,0) -- +(-3cm,0) +(0,3cm) -- +(0,-1cm);
+%
+% ^^A - draw line
+% \draw [] (0,2.5cm) -- (2.5cm,0);
+%
+% ^^A East point
+% \node at (3.4cm,-0.3cm) [] {$(0,x_t + y_t)$};
+% \draw [] (2.5cm,0) circle (2pt);
+%
+% ^^A North point
+% \node at (-1cm,2.5cm) [] {$(y_t + x_t,0)$};
+% \draw [] (0,2.5cm) circle (2pt);
+% \node at (-0.6cm,1.8cm) [outer sep=-2pt] (angletxt) {$45^\circ$};
+% \node at (0.15cm,2.1cm) [coordinate] (anglepnt) {};
+% \draw [->] (angletxt) -- (anglepnt);
+%
+% ^^A Reference point
+% \draw [dotted] (0,2.5cm) -- +(3,0);
+% \draw [dotted] (2.5cm,0) -- +(0,3);
+% \node at (3.7cm,2.7cm) [] {\sf \small reference point};
+% \node at (3.9cm,2.2cm) [] {$(y_t+x_t,x_t+y_t)$};
+% \draw (2.5cm,2.5cm) circle (2pt);
+% \draw (2.5cm,2.5cm) -- +(4pt,0) -- +(-4pt,0) +(0,4pt) -- +(0,-4pt);
+%
+% ^^A - Corrected text box
+% \node at (-1.5cm,0.7cm) [] {\sf \small corrected text box};
+% \node at (2.5cm,0.7cm) [rectangle,draw,fill,white,minimum height=12pt] {};
+% \node at (2.6cm,0.7cm) [] {$(x_t,y_t)$};
+% \draw [] (2cm,0.5cm) circle (2pt);
+% \node at (0,0)
+% [rectangle, draw,
+% minimum width=4cm,
+% minimum height=1cm,
+% ] (ctb) {};
+%
+% \end{tikzpicture}
+% \end{center}
+% \vspace{-2ex}
+%
+% \begin{macro}{\decisionrefout}
+% The |\decisionrefout| macro gives a reference point on the bounding rectangle of
+% the |decision| shape.
+% Inner and outer separation are included, and it is corrected for the shape's minimum dimensions.
+% On completion, the coordinates of the point are in |\pgf@xa| and |\pgf@ya|.
+%
+% First, the coordinates of the corrected text box are put into some registers:
+% \begin{macrocode}
+\def\decisionrefout{
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ \pgf@xb=\ctbnex
+ \pgf@yb=\ctbney
+% \end{macrocode}
+% The reference point's x-coordinates is calculated and corrected for minimum width,
+% and outer x-separation:
+% \begin{macrocode}
+ \advance\pgf@xa by \pgf@yb
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \advance\pgf@xa by \pgfshapeouterxsep
+% \end{macrocode}
+% Then the calculation and correction is repeated for the y-coordinate:
+% \begin{macrocode}
+ \advance\pgf@ya by \pgf@xb
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+ \advance\pgf@ya by \pgfshapeouterysep
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\decisionref}
+% The |\decisionref| macro is almost the same as |\decisionrefout|
+% but has no correction for outer separation.
+% Again, the coordinates of the point are in |\pgf@xa| and |\pgf@ya| on completion:
+% \begin{macrocode}
+\def\decisionref{
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ \pgf@xb=\ctbnex
+ \pgf@yb=\ctbney
+ \advance\pgf@xa by \pgf@yb
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \advance\pgf@ya by \pgf@xb
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\decisionpath}
+% The |\decisionpath| macro draws the |\decision| shape's path.
+% It expects the reference point coordinates to be in |\pgf@xa| and |\pgf@ya|.
+% The path is drawn clockwise starting at the top:
+% \begin{macrocode}
+\def\decisionpath{
+ \def\refx{\pgf@xa}
+ \def\refy{\pgf@ya}
+ \pgfpathmoveto{\pgfpoint{0}{\refy}}
+ \pgfpathlineto{\pgfpoint{\refx}{0}}
+ \pgfpathlineto{\pgfpoint{0}{-\refy}}
+ \pgfpathlineto{\pgfpoint{-\refx}{0}}
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\subsubsection{Anchor and background paths}\label{decisionpaths}
+%
+% \begin{macro}{\decisionanchor}
+% The |\decisionanchor| macro is the anchor path for the shape's |setpath|:
+% \begin{macrocode}
+\def\decisionanchor{
+ \decisionrefout
+ \decisionpath
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\decisionborder}
+% The |\decisionborder| macro is the border path for the shape's |setpath|:
+% \begin{macrocode}
+\def\decisionborder{
+ \decisionref
+ \decisionpath
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Decision shape declaration}
+%
+% \begin{macro}{\pgfdeclareshape}
+% \begin{macro}{decision}
+% This is the |\pgfdeclareshape| declaration for the |decision| shape.
+% \begin{macrocode}
+\pgfdeclareshape{decision}{
+% \end{macrocode}
+% The path macros defined in \S\ref{terminalpaths} are used
+% with the |setpaths| command provided by the |makeshape| package to draw the
+% shape and make boundary intersection calculations:
+% \begin{macrocode}
+ \setpaths{\decisionanchor}{\decisionborder}
+% \end{macrocode}
+%
+% There are three saved anchors defined for the |decision| shape.
+% They have to correct for inner and outer separation, and minimum dimensions;
+% and return the coordinates of the point in |\pgf@x| and |\pgf@y|.
+% However, this is simplified because |\decisionrefout| does the required work.
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\north}
+% The |\north| saved anchor uses the y-coordinate of the reference point:
+% \begin{macrocode}
+ \savedanchor{\north}{
+ \decisionrefout
+ \pgf@x = 0pt
+ \pgf@y = \pgf@ya
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\north}
+% The |\east| saved anchor uses the x-coordinate of the reference point:
+% \begin{macrocode}
+ \savedanchor{\east}{
+ \decisionrefout
+ \pgf@x = \pgf@xa
+ \pgf@y = 0pt
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\northeast}
+% The |\northeast| saved anchor uses the both coordinates of the reference point to
+% calculate the required point:
+% \begin{macrocode}
+ \savedanchor{\northeast}{
+ \decisionrefout
+ \divide\pgf@xa by 2
+ \divide\pgf@ya by 2
+ \pgf@x = \pgf@xa
+ \pgf@y = \pgf@ya
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\anchor}
+% \begin{macro}{north}
+% \begin{macro}{north east}
+% \begin{macro}{east}
+% \begin{macro}{south east}
+% \begin{macro}{south}
+% \begin{macro}{south west}
+% \begin{macro}{west}
+% \begin{macro}{north west}
+% The standard anchors are defined.
+% These are based on the |\north| |\east| and |\northeast| saved anchors:
+% \begin{macrocode}
+ \anchor{north}{ \north }
+ \anchor{north east}{ \northeast }
+ \anchor{east}{ \east }
+ \anchor{south east}{ \northeast \pgf@y=-\pgf@y }
+ \anchor{south}{ \north \pgf@y=-\pgf@y }
+ \anchor{south west}{ \northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{west}{ \east \pgf@x=-\pgf@x }
+ \anchor{north west}{ \northeast \pgf@x=-\pgf@x }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro} ^^A end decision
+% \end{macro} ^^A end \pgfdeclareshape
+%
+%^^A ************************************************************
+%^^A * Decision shape ends
+%^^A ************************************************************
+%
+%^^A ************************************************************
+%^^A * Terminal shape starts
+%^^A ************************************************************
+% \subsection{Terminal Shape}
+%
+% \subsubsection{Support Macros}
+%
+% Two macros |\terminalrefneout| and |\terminalrefne| give a reference point on the
+% boundary surface of the |terminal| shape.
+%
+% \begin{center}
+% \begin{tikzpicture}
+% ^^A - Axis
+% \draw [dotted] (0,0) -- +(2cm,0) -- +(-2cm,0) +(0,1cm) -- +(0,-1cm);
+% ^^A - Terminal shape
+% \node (terminal) at (0,0) [draw,terminal,minimum height=1cm, minimum width=3cm] {};
+% ^^ A - Reference point
+% \draw (terminal.north east) circle (2pt);
+% \node at (1.7cm,0.8cm) [] {\sf \small reference point};
+% \draw [dotted] (terminal.north east) -- +(0,-1.5cm) -- +(0,0.2cm);
+% \end{tikzpicture}
+% \end{center}
+% \vspace{-2ex}
+%
+% \begin{macro}{\terminalrefneout}
+% The |\terminalrefneout| macro gives a reference point on the boundary surface of
+% the |terminal| shape.
+% Inner and outer separation are included, and it is corrected for the shape's minimum dimensions.
+% On completion, the coordinates of the point are in |\pgf@xa| and |\pgf@ya|.
+%
+% First, the coordinates of the corrected text box are obtained,
+% and then the width of the rounded end is add to the x-coordinate to get the bounding
+% dimensions:
+% \begin{macrocode}
+\def\terminalrefneout{
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ \advance\pgf@xa by \pgf@ya
+% \end{macrocode}
+% Then these bounding coordinates are corrected for minimum dimensions, and outer separation:
+% \begin{macrocode}
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \advance\pgf@xa\pgfshapeouterxsep
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+ \advance\pgf@ya\pgfshapeouterysep
+% \end{macrocode}
+% Finally, the corrected x-coordinate is reduced by the width of the rounded end to give
+% the required reference point:
+% \begin{macrocode}
+ \advance\pgf@xa by -\pgf@ya
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\terminalrefne}
+% The |\terminalrefne| macro is almost the same as |\terminalrefneout|
+% but has no correction for outer separation.
+% Again, the coordinates of the point are in |\pgf@xa| and |\pgf@ya| on completion:
+% \begin{macrocode}
+\def\terminalrefne{
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ \advance\pgf@xa by \pgf@ya
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+ \advance\pgf@xa by -\pgf@ya
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\terminalpath}
+% The |\terminalpath| macro draws the |terminal| shape's path.
+% It expects the reference point coordinates to be in |\pgf@xa| and |\pgf@ya|.
+% The path is drawn anticlockwise:
+% \begin{macrocode}
+\def\terminalpath{
+ \def\refx{\pgf@xa}
+ \def\refy{\pgf@ya}
+ \def\radius{\refy}
+ \pgfpathmoveto{\pgfpoint{\refx}{\refy}}
+ \pgfpathlineto{\pgfpoint{-\refx}{\refy}}
+ \pgfpatharc{90}{270}{\radius}
+ \pgfpathlineto{\pgfpoint{\refx}{-\refy}}
+ \pgfpatharc{270}{360}{\radius}
+ \pgfpatharc{0}{90}{\radius}
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\subsubsection{Anchor and background paths}\label{terminalpaths}
+%
+% \begin{macro}{\terminalanchor}
+% The |\terminalanchor| macro is the anchor path for the shape's |setpath|:
+% \begin{macrocode}
+\def\terminalanchor{
+ \terminalrefneout
+ \terminalpath
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\terminalborder}
+% The |\terminalborder| macro is the border path for the shape's |setpath|:
+% \begin{macrocode}
+\def\terminalborder{
+ \terminalrefne
+ \terminalpath
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Terminal shape declaration}
+%
+% \begin{macro}{\pgfdeclareshape}
+% \begin{macro}{terminal}
+% This is the |\pgfdeclareshape| declaration for the |terminal| shape.
+% \begin{macrocode}
+\pgfdeclareshape{terminal}{
+% \end{macrocode}
+% The path macros defined in \S\ref{terminalpaths} are used
+% with the |setpaths| command provided by the |makeshape| package to draw the
+% shape and make boundary intersection calculations:
+% \begin{macrocode}
+ \setpaths{\terminalanchor}{\terminalborder}
+% \end{macrocode}
+%
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\northeast}
+% There are two saved anchors defined for the |terminal| shape.
+% The |\northeast| saved anchor gives the position of the shape's `reference point' used above.
+% It corrects for inner and outer separation, and minimum dimensions.
+% It returns the coordinates of the point in |\pgf@x| and |\pgf@y|,
+% and its implementation is simple since |\terminalrefneout| does the required work.
+% \begin{macrocode}
+ \savedanchor{\northeast}{
+ \terminalrefneout
+ \pgf@x = \pgf@xa
+ \pgf@y = \pgf@ya
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\savedanchor}
+% \begin{macro}{\northeastBB}
+% The |\northeastBB| macro gives the coordinates of the NE corner of the shape's
+% bounding rectangle in |\pgf@x| and |\pgf@y|.
+% It corrects for inner and outer separation, and minimum dimensions.
+% It is obtain by adding the width of the shape's round end to the x-coordinate of the
+% reference point:
+% \begin{macrocode}
+ \savedanchor{\northeastBB}{
+ \terminalrefneout
+ \advance \pgf@xa by \pgf@ya
+ \pgf@x = \pgf@xa
+ \pgf@y = \pgf@ya
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\anchor}
+% \begin{macro}{north}
+% \begin{macro}{north east}
+% \begin{macro}{east}
+% \begin{macro}{south east}
+% \begin{macro}{south}
+% \begin{macro}{south west}
+% \begin{macro}{west}
+% \begin{macro}{north west}
+% The standard anchors are defined.
+% These are based on the |\northeast| and |\northeastBB| saved anchors:
+% \begin{macrocode}
+ \anchor{north}{ \northeast \pgf@x=0pt }
+ \anchor{north east}{ \northeast }
+ \anchor{east}{ \northeastBB \pgf@y=0pt }
+ \anchor{south east}{ \northeast \pgf@y=-\pgf@y }
+ \anchor{south}{ \northeast \pgf@x=0pt \pgf@y=-\pgf@y }
+ \anchor{south west}{ \northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }
+ \anchor{west}{ \northeastBB \pgf@x=-\pgf@x \pgf@y=0pt }
+ \anchor{north west}{ \northeast \pgf@x=-\pgf@x }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\anchor}
+% \begin{macro}{north east r}
+% \begin{macro}{south east r}
+% \begin{macro}{south west r}
+% \begin{macro}{north west r}
+% Four additional anchors are defined that follow the shape's bounding rectangle.
+% \begin{macrocode}
+ \anchor{north east r}{\northeastBB}
+ \anchor{south east r}{\northeastBB \pgf@y=-\pgf@y}
+ \anchor{south west r}{\northeastBB \pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{north west r}{\northeastBB \pgf@x=-\pgf@x}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro} ^^A end terminal
+% \end{macro} ^^A end \pgfdeclareshape
+%
+%^^A ************************************************************
+%^^A * Terminal shape ends
+%^^A ************************************************************
+%
+% \Finale
+\endinput
diff --git a/graphics/pgf/contrib/flowchart/flowchart.ins b/graphics/pgf/contrib/flowchart/flowchart.ins
new file mode 100644
index 0000000000..9f03f576d3
--- /dev/null
+++ b/graphics/pgf/contrib/flowchart/flowchart.ins
@@ -0,0 +1,88 @@
+%
+% Flowchart 3.2
+% 28 January 2013
+%
+% flowchart.ins
+%
+% Installation file for the flowchart package.
+%
+% Run LaTeX on this file, with flowchart.dtx in the same
+% folder to make the package's flowchart.sty file.
+%
+% Run LaTeX on flowchart.dtx to produce the package
+% documentation.
+%
+% The flowchart package is an outcome of the Fluxion
+% project.
+%
+% Copyright (C) 2013 by Adrian P Robson
+% adrian.robson@nepsweb.co.uk
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Adrian Robson.
+%
+% This work consists of the files flowchart.dtx and
+% flowchart.ins
+% and the derived files flowchart.sty and
+% flowchart.pdf
+% -----------------------------------------------------------
+
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+\preamble
+
+Copyright (C) 2013 by Adrian P Robson
+ adrian.robson@nepsweb.co.uk
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Adrian Robson.
+
+This work consists of the files flowchart.dtx and
+ flowchart.ins
+and the derived files flowchart.sty and
+ flowchart.pdf
+
+\endpreamble
+
+\Msg{}
+\Msg{**********************************************************}
+\Msg{* The flowchart package}
+\Msg{* flowchart.ins and flowchart.dtx are being processed}
+\Msg{**********************************************************}
+
+\generate{\file{flowchart.sty}{\from{flowchart.dtx}{package}}}
+
+\Msg{**********************************************************}
+\Msg{* Processing complete ...}
+\Msg{*}
+\Msg{* To finish the installation, put flowchart.sty in a}
+\Msg{* suitable place on your system's TeX search path.}
+\Msg{*}
+\Msg{* Run LaTeX on flowchart.dtx to produce the documentation.}
+\Msg{* Comment out its 'OnlyDescription' line to include the}
+\Msg{* implementation documentation. }
+\Msg{*}
+\Msg{* You might like to keep flowchart.ins and flowchart.dtx}
+\Msg{* somewhere safe as a backup, or in case you want to }
+\Msg{* pass the flowchart package on to someone.}
+\Msg{*}
+\Msg{* Do not forget to delete the auxiliary files.}
+\Msg{**********************************************************}
+\Msg{}
+
+\endbatchfile \ No newline at end of file
diff --git a/graphics/pgf/contrib/flowchart/flowchart.pdf b/graphics/pgf/contrib/flowchart/flowchart.pdf
new file mode 100644
index 0000000000..97fc7ef1cc
--- /dev/null
+++ b/graphics/pgf/contrib/flowchart/flowchart.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/forest/LICENCE b/graphics/pgf/contrib/forest/LICENCE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/graphics/pgf/contrib/forest/LICENCE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/graphics/pgf/contrib/forest/README b/graphics/pgf/contrib/forest/README
new file mode 100644
index 0000000000..75702e750e
--- /dev/null
+++ b/graphics/pgf/contrib/forest/README
@@ -0,0 +1,37 @@
+LaTeX package: forest [2017/07/14 v2.1.5 Drawing (linguistic) trees]
+
+Copyright (c) 2012-2017 Saso Zivanovic
+ (Sa\v{s}o \v{Z}ivanovi\'{c})
+saso.zivanovic@guest.arnes.si
+
+
+ABSTRACT
+
+`forest' is a pgf/tikz-based package for drawing linguistic (and other
+kinds of) trees. Its main features are:
+- a packing algorithm which can produce very compact trees;
+- a user-friendly interface consisting of the familiar bracket
+encoding of trees plus the key--value interface to option-setting;
+- many tree-formatting options, with control over option values of
+individual nodes and mechanisms for their manipulation;
+- a powerful mechanism for traversing the tree;
+- the possibility to decorate the tree using the full power of pgf/tikz;
+- an externalization mechanism sensitive to code-changes.
+
+
+LICENSE
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+
+For the list of files constituting the work see the main source file
+of the package, `forest.dtx', or the derived `forest.sty'.
+
diff --git a/graphics/pgf/contrib/forest/forest-compat.sty b/graphics/pgf/contrib/forest/forest-compat.sty
new file mode 100644
index 0000000000..c69220844c
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-compat.sty
@@ -0,0 +1,271 @@
+% \CheckSum{12884}
+% \iffalse meta-comment
+% forest-index.dtx
+%% `forest-compat' defines a compatibility layer of package `forest'.
+%%
+%% Copyright (c) 2012-2017 Saso Zivanovic
+%% (Sa\v{s}o \v{Z}ivanovi\'{c})
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This file is a part of package `forest'. For the list of files
+%% constituting the package see main source file of the package,
+%% `forest.dtx', or the derived `forest.sty'.
+
+\ProvidesPackage{forest-compat}[2016/12/31]
+
+\def\forest@deprecated#1{%
+ \PackageWarning{forest}{Compatibility mode for #1}%
+}
+\forestset{@@deprecated/.code={\forest@deprecated{#1}}}
+\def\forestcompat#1{\pgfqkeys{/forest/@compat}{#1}}
+\def\forestcompat@patchfailed{%
+ \pgfkeys@split@path
+ \PackageError{forest}{Patching in compat=\pgfkeyscurrentname\space failed}{}%
+}
+\forestcompat{
+ silent/.code={\def\forest@deprecated##1{}},
+ %%% begin listing region: compat_keys
+ most/.style={1.0-most},
+ all/.style={1.0-all},
+ none/.style={},
+ 1.0-harmless/.style={
+ 1.0-triangle,1.0-linear,1.0-nodewalk,1.0-ancestors,
+ 1.0-fittotree,1.0-for,1.0-forall,
+ },
+ 1.0-most/.style={1.0-harmless,2.0.2-most},
+ 1.0-all/.style={1.0-harmless,
+ 1.0-forstep,1.0-rotate,1.0-stages,1.0-name,
+ 2.0.2-all,
+ },
+ 2.0.2-most/.style={2.0-most},
+ 2.0.2-all/.style={
+ 2.0.2-delayn,2.0.2-wrapnpgfmathargs,
+ 2.0-all,
+ },
+ 2.0-edges/.style={2.0-anchors,2.0-forkededge,2.0-folder},
+ 2.0-most/.style={2.1.1-most},
+ 2.0-all/.style={
+ 2.0-delayn,
+ 2.0-edges,
+ 2.1.1-all,
+ },
+ 2.1.1-most/.style={},
+ 2.1.1-all/.style={2.1.1-loops},
+ %%% end listing region: compat_keys
+ 1.0-triangle/.style={
+ /forest/triangle/.style={
+ @@deprecated={key "triangle" from v1.0.x. Use key "roof" from library "linguistics" instead},
+ edge path'={%
+ (.north west)--(!u.south)--(.north east)--cycle
+ }
+ }
+ },
+ 1.0-linear/.style={
+ /forest/define long step={linear next}{autostep}{%
+ \forest@deprecated{nodewalk step "linear next" from v1.0. Use key "next node" instead.}%
+ \edef\forest@cn{\forest@node@linearnextid}},
+ /forest/define long step={linear previous}{autostep}{%
+ \forest@deprecated{nodewalk step "linear previous" from v1.0. Use key "previous node" instead.}%
+ \edef\forest@cn{\forest@node@linearpreviousid}},
+ },
+ 1.0-nodewalk/.style={
+ /forest/node walk/before walk/.style={},
+ /forest/node walk/every step/.style={},
+ /forest/node walk/after walk/.style={},
+ /forest/node walk/.style={
+ @@deprecated={key "node walk" from v1.0. Use key "nodewalk" instead.},
+ /forest/node walk/before walk,
+ /forest/nodewalk/before walk/.style={/forest/node walk/before walk},
+ /forest/nodewalk/every step/.style={/forest/node walk/every step},
+ /forest/nodewalk/after walk/.style={/forest/node walk/after walk},
+ /forest/nodewalk/node walk/.style={before walk,for nodewalk={####1,options={/forest/nodewalk/after walk}}{/forest/nodewalk/every step}},
+ for nodewalk={##1,options={/forest/nodewalk/after walk}}{/forest/nodewalk/every step},
+ },
+ },
+ 1.0-ancestors/.style={
+ /forest/for ancestors'/.style={
+ @@deprecated={key "for ancestors'" from v1.0.x. Use key "for current and ancestors" instead.},
+ for current and ancestors={##1}},
+ },
+ 1.0-fittotree/.style={%
+ /tikz/fit to tree/.style={
+ /forest/@@deprecated={key "/tikz/fit to tree" from v1.0.x. Use "/tikz/fit to=tree" instead.},
+ inner sep=0pt,fit to=tree
+ }
+ },
+ 1.0-for/.style={
+ /forest/for/.code 2 args={% #1 = nodewalk, #2 = after walk keylist
+ \forest@deprecated{Key "for" from v1.0.x. Use key "for group" instead.}%
+ \forest@forthis{\forest@nodewalk{##1,options={##2}}{}}%
+ }
+ },
+ 1.0-forall/.style={
+ /forest/for all next/.style={
+ @@deprecated={Key "for all next" from v1.0.x. Use key "for following siblings" instead.},
+ for following siblings={##1}},
+ /forest/for all previous/.style={
+ @@deprecated={Key "for all previous" from v1.0.x. Use key "for preceding siblings" instead.},
+ for preceding siblings={##1}},
+ },
+ 1.0-forstep/.code={%
+ \def\forest@forstepwrapper##1##2{%
+ \forest@forthis{%
+ \forest@configured@nodewalk{independent}{independent}{compatfake}{##1}{##2}%
+ }%
+ }%
+ \def\forest@relatednode@option@compat@ignoreinvalidsteps##1{%
+ \forest@saveandrestoremacro\forest@nodewalk@oninvalid{%
+ \def\forest@nodewalk@oninvalid{compatfake}%
+ ##1%
+ }%
+ }%
+ },
+ 1.0-rotate/.style={
+ /forest/undef option=rotate,
+ rotate/.style={
+ @@deprecate={Using non-autoforwarded key "rotate". Some keys, like "forked edges" and "folder", might produce a wrong result.},
+ node options={rotate={##1}},
+ },
+ },
+ 1.0-stages/.style={
+ /forest/@@deprecated={Using v1.0.x "stages" style},
+ /forest/stages/.style={
+ process keylist=before typesetting nodes,
+ typeset nodes stage,
+ process keylist=before packing,
+ pack stage,
+ process keylist=before computing xy,
+ compute xy stage,
+ process keylist=before drawing tree,
+ draw tree stage,
+ },
+ /forest/TeX={%
+ \def\forest@defstages##1{%
+ \def\forest@stages{%
+ begin forest,
+ for root'={
+ process keylist register=default preamble,
+ process keylist register=preamble
+ },
+ process keylist=given options,
+ ##1,
+ end forest
+ }%
+ }%
+ },
+ },
+ 1.0-name/.code={%
+ \forest@deprecated{key "name": using key "name" from v1.0.x, which does not enforce uniqueness. If you really need this, you're doing something wrong.}%
+ \def\forest@node@setname##1{%
+ \ifstrempty{##1}{}{%
+ \forestoeset{name}{##1}%
+ \csedef{forest@id@of@##1}{\forest@cn}%
+ }%
+ }%
+ \def\forest@node@setalias##1{%
+ \ifstrempty{##1}{}{%
+ \csedef{forest@id@of@##1}{\forest@cn}%
+ }%
+ }%
+ },
+ 2.0.2-delayn/.style={
+ /forest/delay@n/.style 2 args={
+ @@deprecated={propagator "delay n" (it introduces two levels of hash doubling reevaluates the first argument (the desired number of cycles) at every cycle)},
+ if={##1==1}{delay={##2}}{delay={delay@n/.wrap pgfmath arg={{####1}{##2}}{##1-1}}}
+ },
+ 2.0-delayn/.style={}, % this key would patch the same thing!
+ },
+ 2.0.2-wrapnpgfmathargs/.code={%
+ \def\forest@wrap@pgfmath@args@@@wrapandpasson{%
+ \forest@deprecated{handler "wrap n pgfmath args" (it introduces two levels of hash doubling)}%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\forest@wrapped
+ \expandafter\expandafter\expandafter{%
+ \expandafter\forest@wrap@code\forest@wrap@args}%
+ \expandafter\pgfkeysalso\expandafter{\expandafter\pgfkeyscurrentpath\expandafter=\expandafter{\forest@wrapped}}%
+ }%
+ },
+ 2.0-delayn/.style={
+ /forest/delay n/.style 2 args={
+ @@deprecated={propagator "delay n" (it reevaluates the first argument (the desired number of cycles) at every cycle)},
+ if={##1==0}{##2}{delay@n={##1}{##2}}
+ },
+ /forest/delay@n/.style 2 args={
+ if={##1==1}{delay={##2}}{delay={delay@n/.process={P}{##1-1}{##2}}}
+ },
+ },
+ 2.0-anchors/.code={%
+ \csdef{forest@anchor@@parent'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor{\number\numexpr\forestove{grow}-\forestove{rotate}+180}%
+ }
+ \csdef{forest@anchor@@parent first'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor@parent{\number\numexpr\forestove{grow}-\forestove{rotate}+180}%
+ \edef\forest@temp@anchor@first{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 -\else+\fi90}%
+ \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@first}\forest@temp@anchor
+ }
+ \csdef{forest@anchor@@parent last'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor@parent{\number\numexpr\forestove{grow}-\forestove{rotate}+180}%
+ \edef\forest@temp@anchor@last{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 +\else-\fi90}%
+ \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@last}\forest@temp@anchor
+ }
+ },
+ 2.0-forkededge/.code={%
+ \forest@iflibraryloaded{edges}{%
+ \forestset{
+ forked edge/.style={
+ edge={rotate/.pgfmath=grow()},
+ edge path'={(!u.parent anchor) -- ++(\forestoption{fork sep},0) |- (.child anchor)},
+ },
+ forked edges/.style={
+ for tree={parent anchor=children},
+ for descendants={child anchor=parent,forked edge}
+ },
+ }%
+ }{%
+ \appto\forest@compat@libraries@edges{\forestcompat{2.0-forkededge}}%
+ }%
+ },
+ 2.0-folder/.code={%
+ \forest@iflibraryloaded{edges}{%
+ \expandafter\patchcmd\csname pgfk@/forest/folder/.@cmd\endcsname
+ {parent anchor=-children last}
+ {parent anchor=parent last}
+ {}{\forestcompat@patchfailed}%
+ \expandafter\patchcmd\csname pgfk@/forest/folder/.@cmd\endcsname
+ {edge={rotate/.option=!parent.grow},}
+ {edge={rotate/.pgfmath=grow()}}
+ {}{\forestcompat@patchfailed}%
+ }{%
+ \appto\forest@compat@libraries@edges{\forestcompat{2.0-folder}}%
+ }%
+ },
+ 2.1.1-loops/.code={%
+ \patchcmd\newsafeRKloop % pre-{##1}
+ {\forest@temp@toks}%
+ {%
+ \forest@deprecated{hash-doubling loops from pre-2.1.2}%
+ \def\forest@temp
+ }%
+ {}{\forestcompat@patchfailed}%
+ \patchcmd\newsafeRKloop % post-{##1}
+ {\csedef}%
+ {\forest@temp@toks\expandafter{\forest@temp}\csedef}%
+ {}{\forestcompat@patchfailed}%
+ },
+}
+\expandafter\forestcompat\expandafter{\forest@compat}
diff --git a/graphics/pgf/contrib/forest/forest-doc.ins b/graphics/pgf/contrib/forest/forest-doc.ins
new file mode 100644
index 0000000000..41e872e40b
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-doc.ins
@@ -0,0 +1,26 @@
+%% forest-doc.ins
+%%
+%% Copyright (c) 2015 Saso Zivanovic
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This file is a part of package `forest'. For the list of files
+%% constituting the package see main source file of the package,
+%% `forest.dtx', or the derived `forest.sty'.
+%%
+\input docstrip.tex
+\keepsilent
+\preamble
+\endpreamble
+\askforoverwritefalse
+\generate{\file{forest-index.sty}{\from{forest-index.dtx}{}}}
+\endbatchfile
diff --git a/graphics/pgf/contrib/forest/forest-doc.ist b/graphics/pgf/contrib/forest/forest-doc.ist
new file mode 100644
index 0000000000..8d3fec14b0
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-doc.ist
@@ -0,0 +1,25 @@
+%% This file is based on `gind.ist'.
+
+actual '='
+quote '&'
+level '>'
+preamble
+"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n"
+postamble
+"\n\n \\end{theindex}\n"
+item_x1 "\\efill \n \\subitem "
+item_x2 "\\efill \n \\subsubitem "
+delim_0 "\\pfill "
+delim_1 "\\pfill "
+delim_2 "\\pfill "
+% The next lines will produce some warnings when
+% running Makeindex as they try to cover two different
+% versions of the program:
+lethead_prefix "{\\bfseries\\hfil\\indexlettertotoc "
+lethead_suffix "\\relax\\hfil}\\nopagebreak\n"
+lethead_flag 1
+heading_prefix "{\\bfseries\\hfil\\indexlettertotoc "
+heading_suffix "\\relax\\hfil}\\nopagebreak\n"
+% heading_prefix "{\\bfseries\\hfil "
+% heading_suffix "\\hfil}\\nopagebreak\n"
+headings_flag 1
diff --git a/graphics/pgf/contrib/forest/forest-doc.pdf b/graphics/pgf/contrib/forest/forest-doc.pdf
new file mode 100644
index 0000000000..e9651a7fa3
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/forest/forest-doc.sty b/graphics/pgf/contrib/forest/forest-doc.sty
new file mode 100644
index 0000000000..865ed8bc1c
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-doc.sty
@@ -0,0 +1,244 @@
+%% forest-doc.sty
+%%
+%% `forest-doc.sty` is an auxiliary package needed to compile the documentation of package
+%% `forest`. (It is not needed to use the package.)
+%%
+%% Copyright (c) 2012-2017 Saso Zivanovic
+%% (Sa\v{s}o \v{Z}ivanovi\'{c})
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This file is a part of package `forest'. For the list of files
+%% constituting the package see main source file of the package,
+%% `forest.dtx', or the derived `forest.sty'.
+%%
+\ProvidesPackage{forest-doc}
+\RequirePackage{lstdoc}
+\RequirePackage{pgfkeys}
+\RequirePackage{forest-index}
+% if you want index support, load package "forest-index", but later
+
+\lstset{language={[LaTeX]TeX},tabsize=4,gobble=2,%
+ basicstyle=\small\ttfamily,basewidth=0.51em,boxpos=c,pointstyle=\pstyle,moredelim=[is][\pstyle]{~}{~}}
+%\lst@InstallKeywords{p}{point}{pointstyle}\relax{keywordstyle}{}ld
+\def\pstyle{\color{darkgreen}}
+\newcommand\itemnosep[1][0pt]{\vspace{\the\dimexpr-1.4ex+#1}}
+\lstset{
+ rangebeginprefix=\ \ \%\%\%\ begin\ listing\ region:\ ,
+ rangebeginsuffix=,
+ rangeendprefix=\ \ \%\%\%\ end\ listing\ region:\ ,
+ rangeendsuffix=,
+ includerangemarker=false,
+ keepspaces=true,
+}
+\newcommand\lstinputregion[3][]{\lstinputlisting[linerange=#3-#3,#1]{#2}}
+\def\lst@outputspace{{\ifx\lst@bkgcolor\empty\color{white}\else\lst@bkgcolor\fi\lst@visiblespace}}% this works for acroread, but not for atril :-(
+
+\lstnewenvironment{forestexample}[1][]{%
+ \PackageWarning{forest-doc}{Compiling example}{}%
+ \global\let\lst@intname\@empty
+ \gdef\lst@sample{}%
+ \def\forestexample@layout{tree on left}%
+ \def\forestexample@treebin{box}%
+ \pgfqkeys{/forestexample}{label format,#1}%
+ \pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
+ \ifdefempty\forestexample@temp{}{\addtocounter{\forestexample@temp}{1}}%
+ \setbox\lst@samplebox=\hbox\bgroup
+ \pgfkeysvalueof{/forestexample/tree prefix}%
+ \lst@BeginAlsoWriteFile{\jobname.tmp}%
+}{%
+ \lst@EndWriteFile
+ \pgfkeysvalueof{/forestexample/tree suffix}%
+ \egroup
+ \global\setbox\codebox=\box\lst@samplebox
+ \global\setbox
+ \treebox
+ \csname forestexample@treebin@\forestexample@treebin\endcsname
+ \pgfkeys{/forestexample/do layout/.expanded=\forestexample@layout}%
+}
+\pgfqkeys{/forestexample}{%
+ .unknown/.code={\lstset{\pgfkeyscurrentname={#1}}},
+ index/.code={\indexex[not print]{#1}},
+ index>/.code={\indexex[not print]>{#1}},
+ code prefix/.code={\gdef\lst@sample{#1}},
+ tree prefix/.initial={},
+ tree suffix/.initial={},
+ counter/.initial=lstlisting,
+ no label/.style={counter={}},
+ label format/.store in=\@currentlabel,
+ label format/.default={\arabic{\pgfkeysvalueof{/forestexample/counter}}},
+ tree width/.initial={\dimexpr\linewidth-\wd\codebox-
+ \glueexpr\pgfkeysvalueof{/forestexample/center skip}\relax\relax},
+ layout/.store in=\forestexample@layout,
+ tree bin/.store in=\forestexample@treebin,
+ do layout/.is choice,
+ do layout/export/.code={%
+ \pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
+ \ifdefempty\forestexample@temp{}{\addtocounter{\forestexample@temp}{-1}}%
+ },
+ left skip/.initial={\glueexpr 0pt plus .4\linewidth minus \marginparsep + 0pt minus \@totalleftmargin + 0pt minus .75\marginparwidth},
+ center skip/.initial={3em plus 0.1\linewidth minus 2em},
+ right skip/.initial={0pt plus .4\linewidth},
+ tree left skip/.initial=0pt,
+ tree right skip/.initial=0pt,
+ code left skip/.initial=0pt,
+ code right skip/.initial=0pt,
+ label y offset/.initial={\height-1ex}, % looks better to me this way
+ do layout/tree on left/.code={%
+ \begin{list}{}{\leftmargin 0pt}
+ \item
+ \@tempdima=\ifdim\totalht\treebox>\totalht\codebox
+ \dimexpr0.5 \totalht\treebox\relax
+ \else
+ \dimexpr0.5 \totalht\codebox\relax
+ \fi
+ \mbox{%
+ \mbox{\hbox to \linewidth{%
+ \hskip\pgfkeysvalueof{/forestexample/left skip}\relax
+ \textvcenter{\box\treebox}%
+ \hskip\pgfkeysvalueof{/forestexample/center skip}\relax
+ \hbox{\hskip-\@totalleftmargin\box\codebox\hskip\@totalleftmargin}%
+ \hskip\pgfkeysvalueof{/forestexample/right skip}\relax
+ }}%
+ \forestexample@label
+ }%
+ \end{list}
+ },
+ v sep/.initial={1ex},
+ align/.initial=center,
+ do layout/tree on top/.code={%
+ \begin{list}{}{\leftmargin 0pt \parsep 0pt \itemsep \pgfkeysvalueof{/forestexample/v sep}\relax}
+ \item \forestexample@align{tree}\forestexample@label
+ \item \forestexample@align{code}
+ \end{list}
+ },
+ do layout/tree on bottom/.code={%
+ \begin{list}{}{\leftmargin 0pt \parsep 0pt \itemsep \pgfkeysvalueof{/forestexample/v sep}\relax}
+ \item \forestexample@align{code}\forestexample@label
+ \item \forestexample@align{tree}
+ \end{list}
+ },
+ do layout/only tree/.code={%
+ \forestexample@align{tree}\forestexample@label
+ },
+ do layout/only code/.code={%
+ \forestexample@align{code}\forestexample@label
+ },
+}
+\newbox\treebox
+\newbox\codebox
+\def\forestexample@treebin@box{%
+ \hbox{\lst@sampleInput}%
+}
+\def\forestexample@treebin@minipage{%
+ \hbox{%
+ \begin{minipage}{\pgfkeysvalueof{/forestexample/tree width}}%
+ \lst@sampleInput
+ \end{minipage}%
+ }%
+}
+\def\forestexample@label{%
+ \pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
+ \ifdefempty\forestexample@temp{}{%
+ \makebox[0pt][l]{%
+ \hskip-\linewidth
+ \hskip-\@totalleftmargin
+ \hskip\textwidth
+ \hskip\marginparsep
+ \raisebox
+ {\dimexpr\@tempdima+\depth-\pgfkeysvalueof{/forestexample/label y offset}}%
+ {\hbox to 0pt{\scriptsize(\@currentlabel)}}%
+ }%
+ }%
+}
+\def\forestexample@align#1{%
+ \pgfkeysgetvalue{/forestexample/align}\forestexample@temp
+ \mbox{\hbox to \linewidth{%
+ \csname forestexample@align@left@\forestexample@temp\endcsname
+ \hspace*{\pgfkeysvalueof{/forestexample/#1 left skip}}%
+ \mbox{\expandafter\box\csname #1box\endcsname}%
+ \hspace*{\pgfkeysvalueof{/forestexample/#1 right skip}}%
+ \csname forestexample@align@right@\forestexample@temp\endcsname
+ }}%
+}
+\def\forestexample@align@left@left{}
+\def\forestexample@align@right@left{}
+\def\forestexample@align@left@right{\hfill}
+\def\forestexample@align@right@right{}
+\def\forestexample@align@left@center{\hfill}
+\def\forestexample@align@right@center{\hfill}
+\newcommand\forestexampleimport[1][]{%
+ \def\forestexample@layout{tree on left}%
+ \pgfkeysgetvalue{/forestexample/counter}\forestexample@temp
+ \ifdefempty\forestexample@temp{}{\addtocounter{\forestexample@temp}{1}}%
+ \pgfqkeys{/forestexample}{%
+ label format,
+ do layout/.expanded=\forestexample@layout
+ }%
+}
+
+\def\totalht#1{\dimexpr\ht#1 + \dp#1\relax}
+\def\textvcenter#1{\raisebox{\dimexpr .5\depth-.5\height}{#1}}
+
+% For some reason, lstdoc's version kills all spaces in defaults ...
+\def\lst@syntaxlabel@#1>#2\relax
+ %{\edef\lst@temp{\zap@space#2 \@empty}}
+ {\edef\lst@temp{#2}}
+
+
+
+
+\def\getforestversion#1/#2/#3 v#4 #5\getforestversion{v#4}
+\edef\forestversion{%
+\expandafter\expandafter\expandafter\getforestversion
+ \csname ver@forest.sty\endcsname\getforestversion}
+
+\def\settodayfromforestdateA#1/#2/#3 v#4 #5\settodayfromforestdateA{\def\year{#1}\def\month{#2}\def\day{#3}}
+\def\settodayfromforestdate{\expandafter\expandafter\expandafter\settodayfromforestdateA\csname ver@forest.sty\endcsname\settodayfromforestdateA}
+
+\def\TikZ;{{\rm Ti\emph{k}Z}}
+\def\PGF;{\textsc{pgf}}
+\def\foRest;{\textsc{Forest}}
+\def\FoRest;{\textsc{Forest}}
+
+\let\keyname\texttt
+\newcommand\cmdname[1]{\texttt{\char\escapechar#1}}
+
+\gdef\greaterthan{>}
+\def\gobbleone#1{}
+
+\newcommand{\Repeat}[1]{% from tex.se http://tex.stackexchange.com/a/16194/16819
+ \expandafter\@Repeat\expandafter{\the\numexpr #1\relax}%
+}
+\def\@Repeat#1{%
+ \ifnum#1>0
+ \expandafter\@@Repeat\expandafter{\the\numexpr #1-1\expandafter\relax\expandafter}%
+ \else
+ \expandafter\@gobble
+ \fi
+}
+\def\@@Repeat#1#2{%
+ \@Repeat{#1}{#2}#2%
+}
+\def\spaces#1{\Repeat{#1}\space}
+
+\RequirePackage{dingbat}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% fill-column: 100
+%%% TeX-command-default: "Make PDF"
+%%% TeX-master: "forest-doc"
+%%% End:
diff --git a/graphics/pgf/contrib/forest/forest-doc.tex b/graphics/pgf/contrib/forest/forest-doc.tex
new file mode 100644
index 0000000000..53410b697f
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-doc.tex
@@ -0,0 +1,6949 @@
+%% forest-doc.tex
+%% `forest-doc.tex` is a main documentation source of package `forest`.
+%%
+%% Copyright (c) 2012-2017 Saso Zivanovic
+%% (Sa\v{s}o \v{Z}ivanovi\'{c})
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest versionx of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This file is a part of package `forest'. For the list of files
+%% constituting the package see main source file of the package,
+%% `forest.dtx', or the derived `forest.sty'.
+%%
+\documentclass{ltxdoc}
+\usepackage[a4paper,
+ top=2cm,bottom=2.5cm,
+ reversemarginpar,marginparwidth=2cm,
+ right=1.5cm,
+ nohead
+]{geometry}
+
+\immediate\write18{makeindex -s forest-doc.ist forest-doc}
+\def\indexlettertotoc#1\relax{%
+ \phantomsection\addcontentsline{toc}{subsection}{#1}%
+ #1%
+}
+\makeatletter
+\c@IndexColumns=2 \makeatother
+\IndexPrologue{Color legend: \textcolor{red}{definition}, \textcolor{darkgreen}{example}, \textcolor{blue}{other}. If an entry belongs to a library, the library name is given in parenthesis. All page numbers are hyperlinks, and definitions in text are hyperlinked to this index.}
+\makeindex
+
+\makeatletter
+\def\bigbadforlist{}
+\def\forest@@doc@@hook@bigbadforlist{\aftergroup\forest@@doc@@hook@bigbadforlist@}
+\def\forest@@doc@@hook@bigbadforlist@{%
+ \forestset{define long step/.append code={%
+ \ifforest@nodewalkstephandler@makefor
+ \appto\bigbadforlist{[##1]}%
+ \fi
+ }%
+ }%
+}
+\def\bigbadprocesslist{}
+\makeatother
+\usepackage[external]{forest}
+\useforestlibrary{edges}
+\useforestlibrary{linguistics}
+% \tikzexternalize
+% forest-tikzexternalize either contains \tikzexternalize or not ... make adjusts this
+\IfFileExists{forest-doc.tex-externalize.tex}{%
+ \input forest-doc.tex-externalize\relax
+}{}
+\tikzset{
+ external/prefix={forest.for.dir/},
+ external/system call={
+ pdflatex \tikzexternalcheckshellescape -halt-on-error -interaction=nonstopmode -jobname "\image" "\texsource"},
+ external/up to date check=simple,
+}
+
+\usepackage{forest-doc}
+% \usepackage{patchpgf}
+% \newcommand\pgfprofilenewforcommandcs[2]{%
+% \expandafter\pgfprofilenewforcommand\expandafter{\csname #1\endcsname}{#2}}
+% \newcommand\pgfprofilenewforpgfkey[1]{%
+% \edef\marshal{%
+% \noexpand\pgfprofilenewforcommandpattern[#1]{\expandonce{\csname pgfk@#1/.@cmd\endcsname}}{####1\noexpand\pgfeov}{####1\noexpand\pgfeov}
+% }\marshal
+% }
+% \usetikzlibrary{profiler}
+% \makeatletter
+% \pgfprofilenewforcommand{\forestindex@index}{3}
+% \pgfprofilenewforcommand{\pgfmathparse}{1}
+% \pgfprofilenewforpgfkey{/forest/split}
+% \pgfprofilenewforpgfkey{/forest/nodewalk/reverse}
+% \pgfprofilenewforcommand{\forest@Nodewalk}{2}
+% \pgfprofilenewforcommand{\pgfkeysalso}{1}
+% \makeatother
+
+\usepackage{hyperref}
+\hypersetup{unicode=true,colorlinks=true,linkcolor=blue,citecolor=blue,hyperindex=false}
+\usepackage{url}
+\usepackage[numbers]{natbib}
+\usepackage[multiple]{footmisc}
+\usepackage{tipa}
+\usepackage[inline,shortlabels]{enumitem}
+\newlist{compactitem}{itemize}{2}
+\setlist[compactitem]{nosep,label=\textbullet}
+\newlist{arguments}{enumerate}{1}
+\setlist[arguments]{nosep,label=\textbf{\#\arabic*}}
+\renewcommand\DescribeMacro[1]{\texttt{\detokenize{#1}}\marginpar{\hfill\small\strut\texttt{\detokenize{#1}}}}
+\usepackage{printlen}
+\usepackage{tabularx}
+\DeleteShortVerb\|
+\newcommand\OR{\ensuremath{\,|\,}}%
+\usepackage{multicol}
+
+%\usepackage[silent]{trace-pgfkeys} % silent, stack, trace, verbose
+%\pgfkeystracelevel{trace}
+
+ %%% begin listing region: index_macro_style
+\forestset{
+ detokenize/.style={result=\protect\detokenize{##1}},
+ tt/.style={result=\protect\texttt{##1}},
+ macro/.style={detokenize, +result={\char\escapechar}, tt, print in color, hyper},
+}
+ %%% end listing region: index_macro_style
+\forestset{
+ pgfkey/.style={tt,print in color,hyper},
+ path/.style={+result={/},pgfkey},
+ handler/.style={+result={.},pgfkey},
+ option value/.style={
+ format={tt,result+={ value}},
+ for first={format=pgfkey},
+ },
+ environment/.style={
+ detokenize,
+ tt,
+ print in color,
+ if stage={index}{}{
+ if index entry type={definition}{
+ temptoksa/.register=result,
+ hyper,
+ result/.process=ROw2{result}{argument}{%
+ \texttt{\string\begin\char`\{##1\char`\}}%
+ ##2%
+ \texttt{\string\end\char`\{##1\char`\}}%
+ }
+ }{
+ hyper
+ }
+ }
+ },
+ empty/.style={result={{}}},
+ meta/.style={result=\protect\meta{##1},print in color,hyper},
+ index library/.style={
+ if index entry type={definition}{
+ for first leaf'={
+ index format+={
+ result+'={\space
+ {\protect\scriptsize
+ (\protect\texttt{\protect\hyperrefnocolor[sec:library-#1]{#1}})%
+ }%
+ }
+ }
+ },
+ }{}
+ },
+ margin/.style={print format={result=\marginpar{\strut##1}}},
+ also margin/.style={print format={result=##1\marginpar{\strut##1}}},
+}
+
+\let\origmeta\meta
+\renewcommand\meta[1]{\origmeta{\rm\ignorespaces#1}}
+\renewcommand\rstyle{\color{red}}
+\newcommand\hyperrefnocolor[2][]{{\hypersetup{linkcolor=black}\hyperref[#1]{#2}}}
+\newcommand\librarysection[1]{%
+ \subsection{\protect\texttt{#1}}%
+ \label{sec:library-#1}%
+ \forestset{every index end/.style={set={index library={#1}}}}%
+}
+\newcommand\reflibrary[1]{\hyperref[sec:library-#1]{\texttt{#1}}}
+
+\index[not print,not index,set={
+ index key=unknown,
+ form={\textbf{unknown!!}},
+ for first={format={
+ result/.expanded=\noexpand\textbf{\forestregister{result}??},
+ print in color}}}
+ ]>{@unknown}
+
+\indexset
+ [print form={},for first={format=pgfkey}]
+ >{node key}
+
+\indexset
+ [for first={format={+result={/tikz/},pgfkey}}]
+ >{tikz key}
+
+\indexset
+ [for first={format=pgfkey}]
+ >{option,readonly option,bracket key,nodewalk key,register,propagator,style,nodewalk style,stage,dynamic tree,step,loop,conditional,anchor,package option}
+
+ %%% begin listing region: index_macro_category
+\indexset
+ [for first={format=macro}]
+ >{macro}
+ %%% end listing region: index_macro_category
+
+\indexset
+ [for first={format=environment}]
+ >{environment}
+
+\indexset
+ [format=empty]>{empty}
+
+\indexset
+ [index form={type (of options and registers)},for first={format=meta}]
+ >{type}
+
+\indexset
+ [for first={format=handler}]
+ >{handler}
+
+\indexset
+ [format={aggregate function},for first={format=handler}]
+ >{aggregate}
+
+\indexset
+ [form={\texttt{pgfmath} function},for first={format={detokenize,pgfkey}}]
+ >{pgfmath}
+
+\indexset
+ [for first={format=path}]
+ >{path}
+
+\indexset[
+ form={},
+ index key={},
+ for first={
+ for first={
+ key+/.option=!parent.argument,
+ index format={
+ result+/.process={Ow1} {!parent.argument} {\protect\meta{##1 option}},
+ },
+ print format={
+ if argument={}{}{
+ result+/.option=argument
+ },
+ },
+ format={
+ pgfkey
+ },
+ }
+ }
+ ]>{prefix}
+
+\indexset[
+ form={},
+ index key={},
+ for first={
+ for first={
+ +key/.option=!parent.argument,
+ index format={
+ +result/.process={Ow1} {!parent.argument} {\protect\meta{##1 option}},
+ },
+ print format={
+ if argument={}{}{
+ +result/.option=argument
+ },
+ },
+ format={
+ pgfkey
+ },
+ }
+ }
+ ]>{suffix}
+
+\indexset[
+ form={},
+ index key={},
+ for first={
+ for first={
+ key/.process={OOw2} {key} {!parent,parent.argument} {##1 ##2},
+ index format={
+ result+/.process={Ow1} {!parent,parent.argument} {\space\protect\meta{##1}},
+ },
+ print format={
+ if argument={}{}{
+ result+={\space},
+ result+/.option=argument
+ }
+ },
+ format={
+ pgfkey
+ },
+ }
+ }
+ ]>{word prefix}
+
+\indexset[
+ form={},
+ index key={},
+ for first={
+ for first={
+ key/.process={OOw2} {key} {!parent,parent.argument} {##2 ##1},
+ index format={
+ +result/.process={Ow1} {!parent,parent.argument} {\protect\meta{##1}\space},
+ },
+ print format={
+ if argument={}{}{
+ +result={\space},
+ +result/.option=argument
+ }
+ },
+ format={
+ pgfkey
+ },
+ }
+ }
+ ]>{word suffix}
+
+\indexset[%option values
+ index key format={result/.expanded=\forestoption{argument} value},
+ format={result/.expanded=\noexpand\texttt{\forestoption{argument}} value},
+ for first={format=pgfkey}
+ ]>{value of}
+
+\indexset[
+ index key format={result/.expanded=\forestoption{argument} option},
+ format={result/.expanded=\noexpand\texttt{\forestoption{argument}} option},
+ for first={format=pgfkey}
+ ]>{option of}
+
+\indexset
+ [form={},for first={
+ print format={if argument={}{}{
+ result+={:\ },
+ result+/.option=argument,
+ }},
+ format=meta,
+ }]>{meta}
+
+\indexset[
+ for first={+key={{cs }},format={pgfkey}}
+ ]>{forest cs}
+
+\indexset[
+ for first={+key={{ss }},format={pgfkey}}
+ ]>{short step}
+
+\indexset
+ [for first={format=pgfkey}]
+ >{named nodewalk}
+
+\indexset[
+ format={result/.expanded=\noexpand\texttt{process instruction}},
+ for first={format=pgfkey}
+ ]>{processor}
+
+{\makeatletter % an dirty patch: \lst@nolig can sneak in the name...
+\gdef\myexampleindex#1{{\def\lst@nolig{}\lstaspectindex{#1}{}}}
+}
+\lstset{indexstyle={[1]\myexampleindex}}
+%%% end lst-related stuff
+
+\EnableCrossrefs
+\setlength\hfuzz{15pt} % dont make so many
+\hbadness=7000 % over and under full box warnings
+
+\usetikzlibrary{intersections}
+\tikzset{>=latex}
+\forestset{
+ background tree/.style={
+ for tree={text opacity=0.2,draw opacity=0.2,edge={draw opacity=0.2}}}
+}
+
+\title{\FoRest;: a \PGF;/\TikZ;-based package for drawing linguistic trees\\\normalsize\forestversion}
+\author{Sa\v so \v Zivanovi\'c\footnote{e-mail:
+ \href{mailto:saso.zivanovic@guest.arnes.si}{saso.zivanovic@guest.arnes.si};
+ web:
+ \href{http://spj.ff.uni-lj.si/zivanovic/}{http://spj.ff.uni-lj.si/zivanovic/}}}
+
+%\usepackage[verbose]{trace-pgfkeys} % silent, stack, trace, verbose
+%\pgfkeystracelevel{trace}
+
+\begin{document}
+
+\typeout{)}% hacking auctex's error finding routing
+
+% short verbatim: | (changes spaces into _)
+\DeleteShortVerb\|
+\def\indexpipe{|}
+{\catcode`\_=12 \def\marshal{%
+\lstMakeShortInline[basicstyle=\ttfamily,literate={_}{ }1 {__}{_}1]}%
+\expandafter}\marshal |
+
+\IfFileExists{forest-doc-test.tex}{%
+ \input forest-doc-test\relax
+}{}
+
+\newbox\treebox
+\newbox\codebox
+
+{\settodayfromforestdate\maketitle}
+
+\begin{abstract}
+\FoRest; is a \PGF;/\TikZ;-based package for drawing linguistic (and
+other kinds of) trees. Its main features are
+\begin{enumerate*}[(i)]
+\item a packing algorithm which can produce very compact trees;
+\item a user-friendly interface consisting of the familiar bracket encoding of trees plus the
+ key--value interface to option-setting;
+\item many tree-formatting options, with control over option values of individual nodes and
+ mechanisms for their manipulation;
+\item a powerful mechanism for traversing the tree;
+\item the possibility to decorate the tree using the full power of \PGF;/\TikZ;;
+\item an externalization mechanism sensitive to code-changes.
+\end{enumerate*}
+\end{abstract}
+
+\vspace{1cm}
+
+\begin{forestexample}[basicstyle=\ttfamily\scriptsize,layout=tree on top,no label,v sep=1cm,index={content,pgfmath,conditional>if,repeat,append,before drawing tree,y,alias,for step,step>children,edge,before typesetting nodes,tree,s sep,dimen+,option>l,ancestors,typeset node,nodewalk,readonly option>level,sort by,step>min}]
+ \pgfmathsetseed{14285}
+ \begin{forest}
+ random tree/.style n args={3}{% #1 = max levels, #2 = max children, #3 = max content
+ content/.pgfmath={random(0,#3)},
+ if={#1>0}{repeat={random(0,#2)}{append={[,random tree={#1-1}{#2}{#3}]}}}{}},
+ before typesetting nodes={for tree={draw,s sep=2pt,rotate={int(30*rand)},l+={5*rand},
+ if={isodd(level())}{fill=green}{fill=yellow}}},
+ important/.style={draw=red,line width=1.5pt,edge={red,line width=1.5pt}},
+ before drawing tree={sort by=y, for nodewalk={min=tree,ancestors}{important,typeset node}}
+ [,random tree={9}{3}{100}]
+ \end{forest}
+ \end{forestexample}%
+ \begin{center}\mbox{}\box\treebox\\\box\codebox\end{center}
+
+\newpage
+{%
+ \parskip 0pt
+ \begin{multicols}{2}
+ \tableofcontents
+ \end{multicols}
+}
+
+\newpage
+
+\section{Introduction}
+
+Over several years, I had been a grateful user of various packages
+for typesetting linguistic trees. My main experience was with
+|qtree| and |synttree|, but as far as I can tell, all of the tools
+on the market had the same problem: sometimes, the trees were just
+too wide. They looked something like the tree on the left,
+while I wanted something like the tree on the right.
+\begin{center}
+ \begin{forest}
+ baseline,
+ for tree={parent anchor=south,child anchor=north,l=7ex,s sep=10pt},
+ for children={fit=rectangle}
+ [CP
+ [DP
+ [D][NP[N][CP[C][TP[T][vP[v][VP[DP][V'[V][DP]]]]]]]]
+ [TP
+ [T][vP[v][VP[DP][V'[V][DP]]]]]
+ ]
+ \end{forest}
+ \hfill
+ \begin{forest}
+ baseline,
+ for tree={parent anchor=south,child anchor=north,l=7ex,s sep=10pt},
+ [CP
+ [DP
+ [D][NP[N][CP[C][TP[T][vP[v][VP[DP][V'[V][DP]]]]]]]]
+ [TP
+ [T][vP[v][VP[DP][V'[V][DP]]]]]
+ ]
+ \end{forest}
+\end{center}
+
+Luckily, it was possible to tweak some parameters by hand to get a
+narrower tree, but as I quite dislike constant manual adjustments, I
+eventually started to develop \foRest;. It started out as
+|xyforest|, but lost the |xy| prefix as I became increasingly fond
+of \PGF;/\TikZ;, which offered not only a drawing package but also a
+`programming paradigm.' It is due to the awesome power of the
+supplementary facilities of \PGF;/\TikZ; that \foRest; is now, I
+believe, the most flexible tree typesetting package for \LaTeX\ you can get.
+
+The latest stable version of \FoRest; is \href{http://www.ctan.org/pkg/forest}{available at CTAN}.
+Development version(s) can be found \href{https://github.com/sasozivanovic/forest}{at GitHub}.
+Comments, criticism, suggestions and code are all very welcome! If you find the package useful, you
+can show your appreciation by making a PayPal donation to \url{saso.zivanovic@guest.arnes.si}.
+
+
+\section{Tutorial}
+\label{sec:tutorial}
+
+This short tutorial progresses from basic through useful to obscure \dots fortunately, it is not the
+only newcomer's source of information on \foRest;: check out
+\href{http://mirrors.ctan.org/info/forest-quickstart/ForestQuickstart.pdf}{Forest Quickstart Guide
+ for Linguists}. Another very useful source of information (and help!) about \foRest; and \TeX\ in
+general is \href{http://tex.stackexchange.com}{\TeX\ StackExchange}. Check out the questions tagged
+\href{http://tex.stackexchange.com/questions/tagged/forest}{\texttt{forest}}!
+
+
+\subsection{Basic usage}
+\label{tut:basic-usage}
+
+A tree is input by enclosing its specification in a \index{forest}
+environment. The tree is encoded by \emph{the bracket syntax}:
+every node is enclosed in square brackets; the children of a
+node are given within its brackets, after its content.
+{\lstdefinelanguage[my]{TeX}[LaTeX]{TeX}{keywords=forest,
+ otherkeywords={[,]},keywordstyle=\pstyle,texcsstyle={}}%
+\lstset{language={[my]TeX}}%
+\begin{forestexample}
+ \begin{forest}
+ [VP
+ [DP]
+ [V'
+ [V]
+ [DP]
+ ]
+ ]
+ \end{forest}
+\end{forestexample}}
+Binary trees are nice, but not the only thing this package can draw.
+Note that by default, the children are vertically centered with
+respect to their parent, i.e.\ the parent is vertically aligned with the midpoint between the
+first and the last child.
+\begin{forestexample}
+ \begin{forest}
+ [VP
+ [DP[John]]
+ [V'
+ [V[sent]]
+ [DP[Mary]]
+ [DP[D[a]][NP[letter]]]
+ ]
+ ]
+ \end{forest}
+\end{forestexample}
+Spaces around brackets are ignored --- format your code as you
+desire!
+\begin{forestexample}
+ \begin{forest}
+ [VP[DP][V'[V][DP]]]
+ \end{forest}
+ \quad
+ \begin{forest}[VP
+ [DP ] [ V'[V][ DP]]
+ ]\end{forest}
+\end{forestexample}
+If you need a square bracket as part of a node's content, use
+braces. The same is true for the other characters which have a
+special meaning in the \foRest; package, like comma
+|,| and equality sign |=|.
+\begin{forestexample}
+ \begin{forest}
+ [V{P,}
+ [{[DP]}]
+ [V'
+ [V]
+ [{===DP===}]]]
+ \end{forest}
+\end{forestexample}
+Macros in a node specification will be expanded when the node is
+drawn --- you can freely use formatting commands inside nodes!
+\begin{forestexample}
+ \begin{forest}
+ [VP
+ [{~\textbf~{DP}}]
+ [V'
+ [V]
+ [DP]]]
+ \end{forest}
+\end{forestexample}
+
+All the examples given above produced top-down trees with centered children. The other sections
+of this manual explain how various properties of a tree can be changed, making it possible to
+typeset radically different-looking trees. However, you don't have to learn everything about this
+package to profit from its power. Using styles, you can draw predefined types of trees with ease.
+For example, a phonologist can use the \index{GP1} style from library \reflibrary{linguistics} to easily
+typeset (Government Phonology) phonological representations. The style is applied simply by
+writing its name before the first (opening) bracket of the tree.
+\begin{forestexample}[label=ex:gp1-frost,code prefix={\def\usepackage[##1]##2{}}]
+ \usepackage[~linguistics~]{forest}
+ % ...
+ \begin{forest} ~GP1~ [
+ [O[x[f]][x[r]]]
+ [R[N[x[o]]][x[s]]]
+ [O[x[t]]]
+ [R[N[x]]]
+ ]\end{forest}
+\end{forestexample}
+Of course, someone needs to develop the style --- you, me, your local \TeX nician \dots\@
+Fortunately, designing styles is not very difficult once you get the hang of \foRest;, if you
+write one, please contribute! Some macros relating to various fields are collected in
+\emph{libraries} that are distributed alongside the main package. This is the case for the
+\index{GP1} style used above, which is defined in the |linguistics| library. The simplest way to
+load a library is as shown in the example, by loading the package with an optional argument. For
+more information on loading libraries, see \S\ref{ref:package-options}.
+
+
+\subsection{Options}
+\label{tut:options}
+
+A node can be given various options, which control various
+properties of the node and the tree. For example, at the end of
+section~\ref{tut:basic-usage}, we have seen that the \index{GP1} style
+vertically aligns the parent with the first
+child. This is achieved by setting option \index{calign} (for
+\emph{c}hild-\emph{align}ment) to \index{value of=calign>first} (child).
+
+Let's try. Options are given inside the brackets, following the
+content, but separated from it by a comma. (If multiple options are
+given, they are also separated by commas.) A single option
+assignment takes the form \meta{option name}|=|\meta{option value}. (There are
+also options which do not require a value or have a default value:
+these are given simply as \meta{option name}.)
+\begin{forestexample}[label=ex:numerals-simple,index={calign,value of=align>first}]
+ \begin{forest}
+ [\LaTeX\ numerals, ~calign=first~
+ [arabic[1][2][3][4]]
+ [roman[i][ii][iii][iv]]
+ [alph[a][b][c][d]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+The experiment has succeeded only partially. The root node's
+children are aligned as desired (so \index{calign}|=|\index{value of=calign>first} applied to the
+root node), but the value of the \index{calign} option didn't get
+automatically assigned to the root's children! \emph{An option given
+at some node applies only to that node.} In \foRest;, the options
+are passed to the node's relatives via special keys, called
+\emph{propagators}. What we need above is the \index{for step=\index{tree}}
+propagator. Observe:
+
+\begin{forestexample}[label=ex:numerals-manual]
+ \begin{forest}
+ [\LaTeX\ numerals,
+ ~for tree~={calign=first}
+ [arabic[1][2][3][4]]
+ [roman[i][ii][iii][iv]]
+ [alph[a][b][c][d]]
+ ]
+ \end{forest}
+\end{forestexample}
+The value of propagator \index{for step=\index{tree}} is a list of keys that we
+want to process. This keylist is propagated to all the nodes in
+the subtree\footnote{It might be more precise to call \index{for step=\index{tree}}
+\texttt{for subtree} \dots\@ but this name at least saves some typing.}
+rooted in the current node (i.e.\ the node where \index{for step=\index{tree}} was
+given), including the node itself. (Propagator \index{for step=\index{descendants}} is
+just like \index{for step=\index{tree}}, only that it excludes the node itself. There
+are many other \index{for step=\meta{step}} propagators; for the complete list, see
+sections~\ref{ref:spatial-propagators} and \ref{ref:nodewalks}.)
+
+Some other useful options are \index{option>parent anchor}, \index{option>child anchor} and
+\index{tier}. The \index{option>parent anchor} and \index{option>child anchor} options tell
+where the parent's and child's endpoint of the edge between them should be, respectively: usually,
+the value is either empty (meaning a smartly determined border point
+\citep[see][\S16.11]{tikzpgf2.10}; this is the default) or a compass direction
+\citep[see][\S16.5.1]{tikzpgf2.10}. (Note: the \index{option>parent anchor} determines where the edge
+from the child will arrive to this node, not where the node's edge to its parent will start!)
+
+Option \index{tier} is what makes the
+skeletal points $\times$ in example (\ref{ex:gp1-frost}) align horizontally although they
+occur at different levels in the logical structure of the tree.
+Using option \index{tier} is very simple: just set |tier=tier_name| at
+all the nodes that you want to align horizontally. Any tier name
+will do, as long as the tier names of different tiers are
+different \dots\@ (Yes, you can have multiple tiers!)
+\begin{forestexample}[point={tier},index={option>parent anchor,option>child anchor,tier},label=ex:tier-manual]
+ \begin{forest}
+ [VP, for tree={~parent anchor~=south, ~child anchor~=north}
+ [DP[John,tier=word]]
+ [V'
+ [V[sent,tier=word]]
+ [DP[Mary,tier=word]]
+ [DP[D[a,tier=word]][NP[letter,tier=word]]]
+ ]
+ ]
+ \end{forest}
+\end{forestexample}
+Before discussing the variety of \foRest;'s options, it is worth
+mentioning that \foRest;'s node accepts all options \citep[see
+\S16]{tikzpgf2.10} that \TikZ;'s node does --- mostly, it just passes
+them on to \TikZ;. For example, you can easily encircle a node like
+this:\footnote{If option \texttt{draw} was not given, the shape of the node
+would still be circular, but the edge would not be drawn. For
+details, see \cite[\S16]{tikzpgf2.10}.}
+\begin{forestexample}
+ \begin{forest}
+ [VP,~circle~,~draw~
+ [DP][V'[V][DP]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+Let's have another look at example (\ref{ex:gp1-frost}). You will note that the skeletal
+positions were input by typing |x|s, while the result looks like
+this: $\times$ (input as |\times| in math mode). Obviously, the
+content of the node can be changed. Even more, it can be
+manipulated: added to, doubled, boldened, emphasized, etc. We will
+demonstrate this by making example (\ref{ex:numerals-manual}) a bit
+fancier: we'll write the input in the arabic numbers and have
+\LaTeX\ convert it to the other formats. We'll start with the
+easiest case of roman numerals: to get them, we can use the (plain)
+\TeX\ command |\romannumeral|. To change the content of the node,
+we use option \index{content}. When specifying its new value, we can use
+|#1| to insert the current content.\footnote{This mechanism is called
+ \emph{wrapping}. By default, \index{content} is the only \index{autowrapped toks} option,
+ i.e.\ option where wrapping works implicitely (simply
+because I assume that wrapping will be almost exclusively used with this option). To wrap values
+of other options, use handler \index{wrap value}; see~\S\ref{ref:handlers}.}
+\begin{forestexample}[point={content,delay},index={for step,step>children,content,delay},label=ex:romannumeral]
+ \begin{forest}
+ [roman, delay={for children={content=\romannumeral#1}}
+ [1][2][3][4]
+ ]
+ \end{forest}
+\end{forestexample}
+This example introduces another option: \index{delay}. Without it, the example wouldn't work: we
+would get arabic numerals. This is so because of the order in which the options are processed.
+First, the processing proceeds through the tree in a depth-first, parent-first fashion (first the
+parent is processed, and then its children, recursively; but see \index{processing order}). Next,
+the option string of a node is processed linearly, in the order they were given. Option
+\index{content} is specified implicitely and is always the first. If a propagator is encountered,
+the options given as its value are propagated \emph{immediately}. The net effect is that if the
+above example contained simply |roman,for_children={content=...}|, the \index{content} option
+given there would be processed \emph{before} the implicit content options given to the children
+(i.e.\ numbers |1|, |2|, |3| and |4|). Thus, there would be nothing for the |\romannumeral| to
+change --- it would actually crash; more generally, the content assigned in such a way would get
+overridden by the implicit content. Key \index{delay} is true to its name. It delays the
+processing of the keylist given as its argument until the whole tree was processed. In other words, it
+introduces cyclical option processing. Whatever is delayed in one cycle, gets processed in the next
+one. The number of cycles is not limited --- you can nest \index{delay}s as deep as you need.
+
+Unlike \index{for step=\meta{step}} keys we have met before, \index{delay} is not a
+spatial, but a temporal propagator. Several other temporal propagators options exist, see
+\S\ref{ref:stages}.
+
+We are now ready to learn about simple conditionals.\footnote{See \S\ref{ref:conditionals} for
+ further information on conditionals, including the generic \index{if} and \index{where}.} Every
+node option has the corresponding \index{if option=\meta{option}} and \index{where
+ option=\meta{option}} keys. \index{if option=\meta{option}}|=|\meta{value}\meta{true
+ options}\meta{false options} checks whether the value of \meta{option} equals \meta{value}. If
+so, \meta{true options} are processed, otherwise \meta{false options}. The \index{where
+ option=\meta{option}} keys are the same, but do this for the every node in the subtree; informally
+speaking, |where| = |for_tree| + |if|. To see this in action, consider the rewrite of the
+\index{tier} example (\ref{ex:tier-manual}) from above. We don't set the tiers manually, but rather
+put the terminal nodes (option \index{n children} is a read-only option containing the number of
+children) on tier \keyname{word}.\footnote{We could omit the braces around \texttt{0} because it is
+ a single character. If we were hunting for nodes with 42 children, we'd have to write
+ \texttt{where n children=\{42\}...}.}
+\begin{forestexample}[index={tier,where option,n children}]
+ \begin{forest}
+ ~where n children~=0{tier=word}{}
+ [VP
+ [DP[John]]
+ [V'
+ [V[sent]]
+ [DP[Mary]]
+ [DP[D[a]][NP[letter]]]
+ ]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\begin{advise}
+\item Note that you usually don't want to embed a \index{where option=...} conditional in a \index{for
+ step=\index{tree}}, as this will lead to a multiple traversal of many nodes, resulting in a
+ slower execution. If you're inside a \index{for step=\index{tree}}, you probably want to use
+ \index{if}.
+\end{advise}
+
+
+Finally, let's talk about styles.
+(They are not actually defined in the \foRest; package, but rather
+inherited from |pgfkeys|.)
+
+
+
+
+At the first approximation, styles are abbreviations: if you
+often want to have non-default parent/child anchors, say south/north as in example
+(\ref{ex:tier-manual}), you could save some typing by defining a style. Styles are defined using
+\PGF;'s handler |.style|, like shown below.\footnote{Style \index{sn edges} is actually already
+ defined by library \reflibrary{linguistics}. The definition there is a bit more generic.}
+\begin{forestexample}[index={tier,option>parent anchor,option>child anchor}]
+ \begin{forest}
+ ~sn edges~/~.style~={for tree={
+ parent anchor=south, child anchor=north}},
+ ~sn edges~
+ [VP,
+ [DP[John,tier=word]]
+ [V'
+ [V[sent,tier=word]]
+ [DP[Mary,tier=word]]
+ [DP[D[a,tier=word]][NP[letter,tier=word]]]]]
+ \end{forest}
+\end{forestexample}
+If you want to use a style in more than one tree, you have to define it outside the \index{forest}
+environment. Use macro \index{forestset} to do this.
+\begin{lstlisting}
+ ~\forestset~{
+ sn edges/.style={for tree={parent anchor=south, child anchor=north}},
+ background tree/.style={for tree={
+ text opacity=0.2,draw opacity=0.2,edge={draw opacity=0.2}}}
+ }
+\end{lstlisting}
+
+You might have noticed that in the last two examples, some keys occurred even before the
+first opening bracket, contradicting was said at the beginning of this section. This is mainly
+just syntactic sugar (it can separate the design and the content): such \emph{preamble}
+keys behave as if they were given in the root node, the only difference (which often does not
+matter) being that they get processed before all other root node options, even the implicit
+\index{content}.
+
+If you find yourself writing the same preamble for every tree in your document,
+consider modifying \index{default preamble}, which is implicitely included at the beginning
+of every preamble.
+
+\begin{forestexample}[index={default preamble}]
+ \forestset{
+ ~default preamble~={
+ font=\Huge,
+ for tree={circle,draw}
+ }
+ }
+ \begin{forest} [A[B][C]] \end{forest}
+ \begin{forest} red [D[E][F]] \end{forest}
+ \begin{forest} for tree={dotted} [G[H][I]] \end{forest}
+\end{forestexample}
+
+\subsection{Decorating the tree}
+\label{tut:decorating}
+
+The tree can be decorated (think movement arrows) with arbitrary
+\TikZ; code.
+\begin{forestexample}
+ \begin{forest}
+ [XP
+ [specifier]
+ [X$'$
+ [X$^0$]
+ [complement]
+ ]
+ ]
+ ~\node at (current bounding box.south)
+ [below=1ex,draw,cloud,aspect=6,cloud puffs=30]
+ {\emph{Figure 1: The X' template}};~
+ \end{forest}
+\end{forestexample}
+
+However, decorating the tree would make little sense if one could
+not refer to the nodes. The simplest way to do so is to give them a
+\TikZ; name using the \index{option>name} option, and then use this name in \TikZ;
+code as any other (\TikZ;) node name.
+\begin{forestexample}[point=name,index={option>phantom,option>name}]
+ \begin{forest}
+ [CP
+ [DP,name=spec CP]
+ [\dots
+ [,phantom]
+ [VP
+ [DP]
+ [V'
+ [V]
+ [DP,name=object]]]]]
+ \draw[->,dotted] ~(object)~ to[out=south west,in=south] ~(spec CP)~;
+ \end{forest}
+\end{forestexample}
+
+It gets better than this, however! In the previous examples, we put
+the \TikZ; code after the tree specification, i.e.\ after the closing
+bracket of the root node. In fact, you can put \TikZ; code after
+\emph{any} closing bracket, and \foRest; will know what the current
+node is. (Putting the code after a node's bracket is actually just a
+special way to provide a value for option \index{tikz} of that node.) To
+refer to the current node, simply use an empty node name. This works both with and without
+anchors \citep[see][\S16.11]{tikzpgf2.10}: below, |(.south east)| and |()|.
+\begin{forestexample}[index={option>phantom,option>name}]
+ \begin{forest}
+ [CP
+ [DP,name=spec CP]
+ [\dots
+ [,phantom]
+ [VP
+ [DP]
+ [V'
+ [V]
+ [DP,draw] ~{~
+ \draw[->,dotted] ~()~ to[out=south west,in=south] (spec CP);
+ \draw[<-,red] ~(.south east)~--++(0em,-4ex)--++(-2em,0pt)
+ node[anchor=east,align=center]{This guy\\has moved!};
+ ~}~
+ ]]]]
+ \end{forest}
+\end{forestexample}
+
+Important: \emph{the \TikZ; code should usually be enclosed in braces} to hide
+it from the bracket parser. You don't want all the bracketed code
+(e.g.\ |[->,dotted]|) to become tree nodes, right? (Well, they
+probably wouldn't anyway, because \TeX\ would spit out a thousand
+errors.)
+
+\bigskip
+
+Finally, the most powerful tool in the node reference toolbox:
+\emph{relative nodes}. It is possible to refer to other nodes which stand
+in some (most often geometrical) relation to the current node. To
+do this, follow the node's name with a \index>{!} and a \emph{nodewalk}
+specification.
+
+A nodewalk is a concise\footnote{Actually, \foRest; distinguishes two kinds of steps in node walks:
+ long-form and short-form steps. This section introduces only short-form steps. See
+ \S\ref{ref:nodewalks}.} way of expressing node relations. It is simply a string of steps, which
+are represented by single characters, where: \index{ss u} stands for the parent node (up); \index{ss
+ p} for the previous sibling; \index{ss n} for the next sibling; \index{ss s} for \emph{the}
+sibling (useful only in binary trees); \index{ss 1}, \index{ss 2}, \index[not print]{ss 3,ss 4,ss
+ 5,ss 6,ss 7,ss 8}\dots\ \index{ss 9} for first, second, \dots\ ninth child; \index{ss l}, for the
+last child, etc. For the complete specification, see section~\ref{ref:short-form-steps}.
+
+To see the nodewalk in action, consider the following examples.
+In the first example, the agree arrow connects the V node, specified
+simply as |()|, since the \TikZ; code follows |[V]|, and the DP node,
+which is described as ``a sister of V's parent'': |!us| = up +
+sibling.
+\begin{forestexample}[index>={!}]
+ \begin{forest}
+ [VP
+ [DP]
+ [V'
+ [V] {\draw[<->] ~()~
+ .. controls +(left:1cm) and +(south west:0.4cm) ..
+ node[very near start,below,sloped]{\tiny agree}
+ ~(!us)~;}
+ [DP]
+ ]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\begingroup
+\footnotesize
+\begin{forestexample}[index={option>phantom,tikz,fit to,tree},layout=export,basicstyle=\footnotesize\ttfamily]
+ \begin{forest}
+ [CP
+ [DP$_1$]
+ [\dots
+ [,phantom]
+ [VP,tikz={\node [draw,red,inner sep=0,~fit to~=tree]{};}
+ [DP$_2$]
+ [V'
+ [V]
+ [DP$_3$]
+ ]]]]
+ \end{forest}
+\end{forestexample}%
+\endgroup
+
+The second example uses \TikZ;'s fitting library (automatically loaded by \foRest;) to compute the
+smallest rectangle containing node VP, its first child (DP$_2$) and its last grandchild (DP$_3$).
+The example also illustrates that the \TikZ; code
+can be specified via the ``normal'' option syntax, i.e.\ as a value
+to option \index{tikz}.\footnote{\label{fn:fit-to-tree}Actually, there's a simpler way to do this: use \index{fit to}\keyname{=}\index{tree}!\forestexampleimport}
+\begin{forestexample}[point=tikz,index={option>phantom,tikz},index>={!}]
+ \begin{forest}
+ [CP
+ [DP$_1$]
+ [\dots
+ [,phantom]
+ [VP,tikz={\node [draw,red,fit=~()(!1)(!ll)~] {};}
+ [DP$_2$]
+ [V'
+ [V]
+ [DP$_3$]
+ ]]]]
+ \end{forest}
+\end{forestexample}
+
+
+\subsection{Node positioning}
+\label{tut:node-positioning}
+
+\FoRest; positions the nodes by a recursive bottom-up algorithm which, for every non-terminal node,
+computes the positions of the node's children relative to their parent. By default, all the
+children will be aligned horizontally some distance down from their parent: the ``normal'' tree
+grows down. More generally, however, the direction of growth can change from node to node; this is
+controlled by option \index{grow}=\meta{direction}.\footnote{The direction can be specified either in
+ degrees (following the standard mathematical convention that $0$ degrees is to the right, and that
+ degrees increase counter-clockwise) or by the compass directions: \texttt{east}, \texttt{north east},
+ \texttt{north}, etc.} The system computes and stores the positions of children using a
+coordinate system dependent on the parent, called an \emph{ls-coordinate system}: the origin is the
+parent's anchor; l-axis is in the direction of growth in the parent; s-axis is orthogonal to the
+l-axis (positive side in the counter-clockwise direction from $l$-axis); l stands for \emph{l}evel,
+s for \emph{s}ibling. The example shows the ls-coordinate system for a node with
+|grow=45|.\footnote{The axes are drawn using coordinates given in \texttt{forest cs} coordinate
+ system; the ``manually'' given polar coordinate equivalent is shown in the comment.}
+
+\begin{forestexample}[point=grow,index={grow}]
+ \begin{forest} background tree
+ [parent, grow=45
+ [child 1][child 2][child 3][child 4][child 5]
+ ]
+ %\draw[,->](-135:1cm)--(45:3cm) node[below]{$l$};
+ \draw[,->](forest cs:l=-1cm,s=0)--(forest cs:l=3cm,s=0) node[below]{$l$};
+ %\draw[,->](-45:1cm)--(135:3cm) node[right]{$s$};
+ \draw[,->](forest cs:s=-1cm,l=0)--(forest cs:s=3cm,l=0) node[right]{$s$};
+ \end{forest}
+\end{forestexample}
+
+\begin{forestexample}[basicstyle=\scriptsize\ttfamily,layout=export]
+ \newcommand\measurexdistance[5][####1]{\measurexorydistance{#2}{#3}{#4}{#5}{\x}{-|}{(5pt,0)}{#1}}
+ \newcommand\measureydistance[5][####1]{\measurexorydistance{#2}{#3}{#4}{#5}{\y}{|-}{(0,5pt)}{#1}}
+ \tikzset{dimension/.style={<->,>=latex,thin,every rectangle node/.style={midway,font=\scriptsize}},
+ guideline/.style=dotted}
+ \newdimen\absmd
+ \def\measurexorydistance#1#2#3#4#5#6#7#8{%
+ \path #1 #3 #6 coordinate(md1) #1; \draw[guideline] #1 -- (md1);
+ \path (md1) #6 coordinate(md2) #2; \draw[guideline] #2 -- (md2);
+ \path let \p1=($(md1)-(md2)$), \n1={abs(#51)} in \pgfextra{\xdef\md{#51}\global\absmd=\n1\relax};
+ \def\distancelabelwrapper##1{#8}%
+ \ifdim\absmd>5mm
+ \draw[dimension] (md1)--(md2) node[#4]{\distancelabelwrapper{\uselengthunit{mm}\rndprintlength\absmd}};
+ \else
+ \ifdim\md>0pt
+ \draw[dimension,<-] (md1)--+#7; \draw[dimension,<-] let \p1=($(0,0)-#7$) in (md2)--+(\p1);
+ \else
+ \draw[dimension,<-] let \p1=($(0,0)-#7$) in (md1)--+(\p1); \draw[dimension,<-] (md2)--+#7;
+ \fi
+ \draw[dimension,-] (md1)--(md2) node[#4]{\distancelabelwrapper{\uselengthunit{mm}\rndprintlength\absmd}};
+ \fi}
+\end{forestexample}
+\input{\jobname.tmp}
+
+
+The l-coordinate of children is (almost) completely under your control, i.e.\ you set what is often
+called the level distance by yourself. Simply set option \index{option>l} to change the distance of
+a node from its parent.\footnote{If setting \index{option>l} seems to have no effect, read about
+ \index{l sep} further down this section.} More precisely, \index{option>l}, and the related option
+\index{option>s}, control the distance between the (node) anchors of a node and its parent. The
+anchor of a node can be changed using option \index{option>anchor}: by default, nodes are anchored
+at their base; see \cite[\S16.5.1]{tikzpgf2.10}.) In the example below, positions of the anchors
+are shown by dots: observe that anchors of nodes with the same \index{option>l} are aligned and that
+the distances between the anchors of the children and the parent are as specified in the
+code.\footnote{Here are the definitons of the macros for measuring distances. Args: the x or y
+ distance between points \#2 and \#3 is measured; \#4 is where the distance line starts (given as
+ an absolute coordinate or an offset to \#2); \#5 are node options; the optional arg \#1 is the
+ format of label. (Lengths are printed using package \texttt{printlen}.)
+
+\box\codebox}
+\begin{forestexample}[layout=tree on top,index={for step,tree,tikz,option>l,option>anchor},index>={!}]
+ \begin{forest} background tree,
+ for tree={draw,tikz={\fill[](.anchor)circle[radius=1pt];}}
+ [parent
+ [child 1, ~l~=10mm, ~anchor~=north west]
+ [child 2, ~l~=10mm, ~anchor~=south west]
+ [child 3, ~l~=12mm, ~anchor~=south]
+ [child 4, ~l~=12mm, ~anchor~=base east]
+ ]
+ \measureydistance[\texttt{l(child)}=#1]{(!2.anchor)}{(.anchor)}{(!1.anchor)+(-5mm,0)}{left}
+ \measureydistance[\texttt{l(child)}=#1]{(!3.anchor)}{(.anchor)}{(!4.anchor)+(5mm,0)}{right}
+ \measurexdistance[\texttt{s sep(parent)}=#1]{(!1.south east)}{(!2.south west)}{+(0,-5mm)}{below}
+ \measurexdistance[\texttt{s sep(parent)}=#1]{(!2.south east)}{(!3.south west)}{+(0,-5mm)}{below}
+ \measurexdistance[\texttt{s sep(parent)}=#1]{(!3.south east)}{(!4.south west)}{+(0,-8mm)}{below}
+ \end{forest}
+\end{forestexample}
+
+Positioning the chilren in the s-dimension is the job and \emph{raison d'etre} of the package. As a
+first approximation: the children are positioned so that the distance between them is at least the
+value of option \index{s sep} (s-separation), which defaults to double \PGF;'s |inner_xsep| (and this
+is 0.3333em by default). As you can see from the example above, s-separation is the distance
+between the borders of the nodes, not their anchors!
+
+A fuller story is that \index{s sep} does not control the s-distance between two siblings, but rather
+the distance between the subtrees rooted in the siblings. When the green and the yellow child of
+the white node are s-positioned in the example below, the horizontal
+distance between the green and the yellow subtree is computed. It can be seen with the naked eye
+that the closest nodes of the subtrees are the TP and the DP with a red border. Thus, the children
+of the root CP (top green DP and top yellow TP) are positioned so that the horizontal distance
+between the red-bordered TP and DP equals \index{s sep}.
+\begin{forestexample}[index={for step,tree,s sep}]
+ \begin{forest}
+ important/.style={name=#1,draw={red,thick}}
+ [CP, ~s sep~=3mm, for tree=draw
+ [DP, for tree={fill=green}
+ [D][NP[N][CP[C][TP,important=left
+ [T][vP[v][VP[DP][V'[V][DP]]]]]]]]
+ [TP,for tree={fill=yellow}
+ [T][vP[v][VP[DP,important=right][V'[V][DP]]]]]
+ ]
+ \measurexdistance[\texttt{s sep(root)}=#1]
+ {(left.north east)}{(right.north west)}{(.north)+(0,3mm)}{above}
+ \end{forest}
+\end{forestexample}
+
+Note that \foRest; computes the same distances between nodes
+regardless of whether the nodes are filled or not, or whether their
+border is drawn or not. Filling the node or drawing its border does
+not change its size. You can change the size by adjusting \TikZ;'s
+|inner_sep| and |outer_sep| \citep[\S16.2.2]{tikzpgf2.10}, as shown
+below:
+\begin{forestexample}[index={for step,tree,s sep}]
+ \begin{forest}
+ important/.style={name=#1,draw={red,thick}}
+ [CP, s sep=3mm, for tree=draw
+ [DP, for tree={fill=green,~inner sep~=0}
+ [D][NP,important=left[N][CP[C][TP[T][vP[v]
+ [VP[DP][V'[V][DP]]]]]]]]
+ [TP,for tree={fill=yellow,~outer sep~=2pt}
+ [T,important=right][vP[v][VP[DP][V'[V][DP]]]]]
+ ]
+ \measurexdistance[\texttt{s sep(root)}=#1]
+ {(left.north east)}{(right.north west)}{(.north)+(0,3mm)}{above}
+ \end{forest}
+\end{forestexample}
+(This looks ugly!) Observe that having increased |outer sep| makes the edges stop touching
+borders of the nodes. By (\PGF;'s) default, the |outer sep| is exactly half of the border
+line width, so that the edges start and finish precisely at the border.
+
+Let's play a bit and change the \index{option>l} of the root of the yellow subtree. Below, we set the
+vertical
+distance of the yellow TP to its parent to 3\,cm: and the yellow submarine sinks diagonally \dots\@
+Now, the closest nodes are the higher yellow DP and the green VP.
+\begin{forestexample}[index={option>l,s sep,for step,tree}]
+ \begin{forest}
+ important/.style={name=#1,draw={red,thick}}
+ [CP, s sep=3mm, for tree=draw
+ [DP, for tree={fill=green}
+ [D][NP[N][CP[C][TP
+ [T][vP[v][VP,important=left[DP][V'[V][DP]]]]]]]]
+ [TP,for tree={fill=yellow}, l=3cm
+ [T][vP[v][VP[DP,important=right][V'[V][DP]]]]]
+ ]
+ \measurexdistance[\texttt{s sep(root)}=#1]
+ {(left.north east)}{(right.north west)}{(.north)+(0,3mm)}{above}
+ \end{forest}
+\end{forestexample}
+
+Note that the yellow and green nodes are not vertically aligned anymore. The positioning algorithm
+has no problem with that. But you, as a user, might have, so here's a neat trick. (This only works
+in the ``normal'' circumstances, which are easier to see than describe.)
+\begin{forestexample}[label=ex:l*,index={dimen*=l,option>phantom,for step,tree}]
+ \begin{forest}
+ [CP, for tree=draw
+ [DP, for tree={fill=green},~l*~=3
+ [D][NP]]
+ [TP,for tree={fill=yellow}
+ [T][VP[DP][V'[V][DP]]]]
+ ]
+ \end{forest}
+\end{forestexample}
+We have changed DP's \index{option>l}'s value via ``augmented assignment'' known from
+many programming languages: above, we have used |l*=3| to triple
+\index{option>l}'s value; we could have also said |l+=5mm| or |l-=5mm| to
+increase or decrease its value by 5\,mm, respectively. This
+mechanism works for every numeric and dimensional option in \foRest;.
+
+Let's now play with option \index{s sep}.
+\begin{forestexample}[index={s sep,option>l,dimen*=l,for step,tree}]
+ \begin{forest}
+ [CP, for tree=draw, ~s sep~=0
+ [DP, for tree={fill=green},l*=3
+ [D][NP]]
+ [TP,for tree={fill=yellow}
+ [T][VP[DP][V'[V][DP]]]]
+ ]
+ \end{forest}
+\end{forestexample}
+Surprised? You shouldn't be. The value of \index{s sep} at a given node controls the s-distance
+\emph{between the subtrees rooted in the children of that node}! It has no influence over the
+internal geometry of these subtrees. In the above example, we have set |s_sep=0| only for the root
+node, so the green and the yellow subtree are touching, although internally, their nodes are not.
+Let's play a bit more. In the following example, we set the \index{s sep} to: $0$ at the last
+branching level (level 3; the root is level 0), to 2\,mm at level 2, to 4\,mm at level 1 and to
+6\,mm at level 0.
+
+\begin{forestexample}[label=ex:spread-s,point={level},index={readonly option>level,for step,tree,s sep},index>={!}]
+ \begin{forest}
+ for tree={~s sep~=(3-level)*2mm}
+ [CP, for tree=draw
+ [DP, for tree={fill=green},l*=3
+ [D][NP]]
+ [TP,for tree={fill=yellow}
+ [T][VP[DP][V'[V][DP]]]]
+ ]
+ \measurexdistance{(!11.south east)}{(!12.south west)}{+(0,-5mm)}{below}
+ \path(md2)-|coordinate(md)(!221.south east);
+ \measurexdistance{(!221.south east)}{(!222.south west)}{(md)}{below}
+ \measurexdistance{(!21.north east)}{(!22.north west)}{+(0,2cm)}{above}
+ \measurexdistance{(!1.north east)}{(!221.north west)}{+(0,-2.4cm)}{below}
+ \end{forest}
+\end{forestexample}
+As we go up the tree, the nodes ``spread.'' At the lowest level, V and DP are touching. In the
+third level, the \index{s sep} of level 2 applies, so DP and V' are 2\,mm apart. At the second
+level we
+have two pairs of nodes, D and NP, and T and TP: they are 4\,mm apart. Finally, at level 1, the
+\index{s sep} of level 0 applies, so the green and yellow DP are 6\,mm apart. (Note that D and NP are
+at level 2, not 4! Level is a matter of structure, not geometry.)
+
+As you have probably noticed, this example also demostrated that we can compute the value of an
+option using an (arbitrarily complex) formula. This is thanks to \PGF;'s module |pgfmath|.
+\FoRest; provides an interface to |pgfmath| by defining |pgfmath| functions for every node option,
+and some other information, like the \index{readonly option>level} we have used above, the number of children
+\index{n children}, the sequential number of the child \index{readonly option>n}, etc. For details, see
+\S\ref{ref:pgfmath}.
+
+The final separation parameter is \index{l sep}. It determines the minimal
+separation of a
+node from its descendants. It the value of \index{option>l} is too small, then \emph{all} the
+children (and thus their subtrees)
+are pushed
+away from the parent (by increasing their \index{option>l}s), so that the distance between the node's
+and each child's subtree
+boundary is at least \index{l sep}. The initial \index{option>l} can be too small for
+two reasons: either
+some child is too high, or the parent is too deep. The first problem is easier to see: we force the
+situation using a bottom-aligned multiline node. (Multiline nodes can be easily created using |\\|
+as a line-separator. However, you must first specify the horizontal alignment using option
+\index{align} (see \S\ref{ref:node-appearance}).
+Bottom vertical alignment is achieved by setting \index{base}|=|\index{value of=base>bottom};
+the default, unlike in \TikZ;, is \index{base}|=|\index{value of=base>top}).
+\begin{forestexample}[point={align,base},index={align,base}]
+ \begin{forest}
+ [parent
+ [child]
+ [child]
+ [a very\\tall\\child, align=center, base=bottom]
+ ]
+ \end{forest}
+\end{forestexample}
+
+The defaults for \index{option>l} and \index{l sep} are set so that they ``cooperate.''
+What this
+means and why it is necessary is a complex issue explained in \S\ref{tut:defaults}, which you will
+hopefully never have to read \dots\@ You might be out of luck, however. What if you
+needed to decrease the level distance? And nothing happened, like below on the left? Or, what if
+you used lots of parenthesis in your nodes? And got a strange vertical misalignment, like below
+on the right? Then rest assured that these (at least) are features not bugs and read
+\S\ref{tut:defaults}.
+\begin{forestexample}[layout=tree on top,v sep=-55ex,code left skip=-3cm,label=ex:misalignments,index={option>phantom,for step,step>children,fit,baseline,edge,descendants,content,pgfmath,ss 1}]
+ \begin{forest}
+ [,phantom,for children={l sep=1ex,fit=band,
+ for 1={edge'=,l=0},baseline}
+ [{l+=5mm},for descendants/.pgfmath=content
+ [AdjP[AdvP][Adj'[Adj][PP]]]]
+ [default
+ [AdjP[AdvP][Adj'[Adj][PP]]]]
+ [{l-=5mm},for descendants/.pgfmath=content
+ [AdjP[AdvP][Adj'[Adj][PP]]]]
+ ]
+ \path (current bounding box.west)|-coordinate(l1)(!212.base);
+ \path (current bounding box.west)|-coordinate(l2)(!2121.base);
+ \path (current bounding box.east)|-coordinate(r1)(!212.base);
+ \path (current bounding box.east)|-coordinate(r2)(!2121.base);
+ \draw[dotted] (l1)--(r1) (l2)--(r2);
+ \end{forest}
+ \hspace{5cm}
+ \begin{forest}
+ [x forest, baseline
+ [x[x[x[x[x[x[x[x[x[x[x[x[x]]]]]]]]]]]]]
+ [(x)[(x)[(x)[(x)[(x)[(x)[(x)[(x)[(x)[(x)[(x)[(x)[(x)]]]]]]]]]]]]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\subsubsection{The defaults, or the hairy details of vertical alignment}
+\label{tut:defaults}
+
+In this section we discuss the default values of options controlling the l-alignment of the nodes.
+The defaults are set with top-down trees in mind, so l-alignment is actually vertical alignment.
+There are two desired effects of the defaults. First, the spacing between the nodes of a tree
+should adjust to the current font size. Second, the nodes of a given level should be vertically
+aligned (at the base), if possible.
+
+Let us start with the base alignment: \TikZ;'s default is to anchor the nodes at their center,
+while \foRest;, given the usual content of nodes in linguistic representations, rather anchors them
+at the base \cite[\S16.5.1]{tikzpgf2.10}. The difference is particularly clear for a ``phonological''
+representation:
+\begin{forestexample}[index={for step,tree,option>anchor}]
+ \begin{forest} for tree={anchor=center}
+ [maybe[m][a][y][b][e]]
+ \end{forest}\quad
+ \begin{forest}
+ [maybe[m][a][y][b][e]]
+ \end{forest}
+\end{forestexample}
+The following example shows that the vertical distance between nodes depends on the current font size.
+\begin{forestexample}
+ \hbox{\small A small tree
+ \begin{forest} baseline
+ [VP[DP][V'[V][DP]]]
+ \end{forest}
+ \normalsize and
+ \large
+ a large tree
+ \begin{forest} baseline
+ [VP[DP][V'[V][DP]]]
+ \end{forest}}
+\end{forestexample}
+Furthermore, the distance between nodes also depends on the value of \PGF;'s |inner_sep| (which
+also depends on the font size by default: it equals 0.3333\,em).
+\[\index{l sep}=\mbox{height}(\mbox{strut})+\mbox{\texttt{inner ysep}}\]
+The default value of \index{s sep} depends on |inner_xsep|: more precisely, it equals double
+|inner_xsep|).
+\begin{forestexample}[index={baseline,for step,tree}]
+ \begin{forest} baseline,for tree=draw
+ [VP[DP][V'[V][DP]]]
+ \end{forest}
+ \pgfkeys{/pgf/inner sep=0.6666em}
+ \begin{forest} baseline,for tree=draw
+ [VP[DP][V'[V][DP]]]
+ \end{forest}
+\end{forestexample}
+Now a hairy detail: the formula for the default \index{option>l}.
+\[\index{option>l}=\index{l sep}+2\cdot\mbox{\texttt{outer ysep}}+\mbox{total
+height}(\mbox{`dj'})\]
+
+To understand what this is all about we must first explain why it is necessary to set the default
+\index{option>l} at all? Wouldn't it be enough to simply set \index{l sep} (leaving
+\index{option>l} at 0)?
+The problem is that not all letters have the same height and depth. A tree where the vertical
+position of the nodes would be controlled solely by (a constant) \index{l sep} could
+result in a ragged tree (although the height of the child--parent edges would be constant).
+\begin{forestexample}[index={baseline,for step,step>children,no edge,option>name,descendants,option>l}]
+ \begin{forest}
+ [default,baseline,for children={no edge}
+ [DP
+ [AdjP[Adj]]
+ [D'[D][NP,name=np]]]]
+ \path (current bounding box.west)|-coordinate(l)(np.base);
+ \path (current bounding box.east)|-coordinate(r)(np.base);
+ \draw[dotted] (l)--(r);
+ \end{forest}
+ \begin{forest}
+ [{l=0},baseline,for children={no edge}
+ [DP,for descendants={l=0}
+ [AdjP[Adj]]
+ [D'[D][NP,name=np]]]]
+ \path (current bounding box.west)|-coordinate(l)(np.base);
+ \path (current bounding box.east)|-coordinate(r)(np.base);
+ \draw[dotted] (l)--(r);
+ \end{forest}
+\end{forestexample}
+The vertical misalignment of Adj in the right tree is a consequence of the fact that letter j is the
+only letter with non-zero depth in the tree. Since only \index{l sep} (which is constant
+throughout the tree) controls the vertical positioning, Adj, child of Ad\emph{j}P, is pushed lower
+than the other nodes on level 2. If the content of the nodes is variable enough (various heights
+and depths), the cumulative effect can be quite strong, see the right tree of example
+(\ref{ex:misalignments}).
+
+Setting only a default \index{l sep} thus does not work well enough in general. The same
+is true for the reverse possibility, setting a default \index{option>l} (and leaving \index{l sep} at 0). In the example below, the depth of the multiline node (anchored at the top
+line) is such that the child--parent edges are just too short if the level distance is kept constant.
+Sometimes, misalignment is much preferred \dots
+\begin{forestexample}[index={align,{value of=align>center},for step,tree,l sep}]
+ \mbox{}\begin{forest}
+ [default,baseline
+ [first child[a][b][c]]
+ [{second child\\[-1ex]\scriptsize(a copy)},
+ align=center[a][b][c]]
+ ]
+ \end{forest}\quad
+ \begin{forest} for tree={l sep=0}
+ [{\texttt{l sep}=0},baseline
+ [first child[a][b][c]]
+ [{second child\\[-1ex]\scriptsize(a copy)},
+ align=center[a][b][c]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+Thus, the idea is to make \index{option>l} and \index{l sep} work as a team:
+\index{option>l} prevents
+misalignments, if possible, while \index{l sep} determines the minimal vertical distance
+between levels. Each of the two options deals with a certain kind of a ``deviant'' node, i.e.\ a
+node which is too high or too deep, or a node which is not high or deep enough, so we need to
+postulate what a \emph{standard} node is, and synchronize them so that their effect on standard
+nodes is the same.
+
+By default, \foRest; sets the standard node to be a node containing letters d and j. Linguistic
+representations consist mainly of letters, and in the \TeX's default Computer Modern font, d is the
+highest letter (not character!), and j the deepest, so this decision guarantees that trees
+containing only letters will look nice. If the tree contains many parentheses, like the right
+tree of example (\ref{ex:misalignments}), the default will of course fail
+and the standard node needs to be modified. But for many applications, including nodes with
+indices, the default works.
+
+The standard node can be changed using macro \index{forestStandardNode};
+see \ref{ref:standard-node}.
+% TODO: primer? ali raje po spremembi interfaceja
+
+\subsection{Advanced option setting}
+\label{tut:advanced-option-setting}
+
+We have already seen that the value of options can be manipulated: in (\ref{ex:romannumeral}), we
+have converted numeric content from arabic into roman numerals using the \emph{wrapping} mechanism
+|content=\romannumeral#1|; in (\ref{ex:l*}), we have tripled the value of |l| by saying |l*=3|. In
+this section, we will learn more about the mechanisms for setting options and referring to their
+values.
+
+One other way to access an option value is using macro \index{forestoption}. The macro takes a
+single argument: an option name. In the
+following example, the node's child sequence number is appended to the existing content. (This is
+therefore also an example of wrapping.)
+\begin{forestexample}[label=ex:forestoption,index={option>phantom,delay,for step,descendants,content,readonly option>n,forestoption}]
+ \begin{forest}
+ [,phantom,delay={for descendants={
+ content=#1$_{~\forestoption~{n}}$}}
+ [c][o][u][n][t]]
+ \end{forest}
+\end{forestexample}
+
+However, only options of the current node can be accessed using \index{forestoption}. Possibly the simplest way to
+access option values of other nodes is to use \foRest;'s extensions to the \PGF;'s mathematical library
+|pgfmath|, documented in \citep[part VI]{tikzpgf2.10}. To see |pgfmath| in action,
+first take a look at the crazy tree on the title page, and observe how the nodes are
+rotated: the value given to option \index{rotate} is a full-fledged |pgfmath| expression
+yielding an integer
+in the range from $-30$ to $30$. Similiarly, \index{dimen+=l} adds a random float
+in the $[-5,5]$ range to the current value of \index{option>l}.
+
+Example (\ref{ex:spread-s}) demonstrated that information about
+the node, like the node's level, can be accessed within |pgfmath| expressions. All
+options are accessible in this way, i.e.\ every option has a corresponding |pgfmath| function.
+For example, we could rotate the node based on its content:
+\begin{forestexample}[index={delay,for step,tree,content}]
+ \begin{forest}
+ delay={for tree={~rotate=content~}}
+ [30[-10[5][0]][-90[180]][90[-60][90]]]
+ \end{forest}
+\end{forestexample}
+
+All numeric, dimensional and boolean options of \foRest; automatically pass the given value
+through |pgfmath|. If you need pass the value through |pgfmath|
+for a string option, use the \index{pgfmath} handler. The following example sets the node's
+content to its child sequence number (the root has child sequence number 0).
+\begin{forestexample}[index={delay,for step,tree,content,readonly option>n,pgfmath}]
+ \begin{forest}
+ delay={for tree={content/~.pgfmath~=int(n)}}
+ [[[][][]][[][]]]
+ \end{forest}
+\end{forestexample}
+
+As mentioned above, using |pgfmath| it is possible to access options of non-current nodes. This
+is achieved by providing the option function with a \index{relative node name}
+(see~\S\ref{ref:relative-node-names}) argument.\footnote{The form without
+parentheses \texttt{option\string_name} that we have been using until now to refer to an option of
+the
+current node is just a short-hand notation for \texttt{option\string_name()} --- note that in some
+contexts, like preceding \texttt{+} or \texttt{-}, the short form does not work! (The same
+seems to be true for all pgfmath functions with ``optional'' arguments.)} In the next example, we
+rotate the node based on the content of its parent (\index{short step>u} means `up').
+\begin{forestexample}[index={delay,for step,descendants,content,ss u},index>={!}]
+ \begin{forest}
+ delay={for descendants={rotate=content~("!u")~}}
+ [30[-10[5][0]][-90[180]][90[-60][90]]]
+ \end{forest}
+\end{forestexample}
+Note that the argument of the option function is surrounded by double quotation marks: this is
+to prevent evaluation of the relative node name as a |pgfmath| function --- which it is not.
+
+For further ways to access option values, see \S\ref{tut:wrapping}. Here, we continue by introducing
+\emph{relative node setting}: write \index{relative node name}|.|\meta{option}|=|\meta{value} to set
+the value of \meta{option} of the specified relative node. Important: computation of the value is
+done in the context of the original node. The following example defines style \keyname{move} which
+not only draws an arrow from the source (the current node) to the target, but also moves the content
+of the source to the target (leaving a trace). Note the difference between |#1| and |##1|: |#1| is
+the argument of the style \keyname{move} (a node walk determining the target), while |##1| is the
+original option (in this case, \indexex{option>content}) value.
+\begin{forestexample}[index={for step,tree,calign,tikz,delay,content},index>={!}]
+ \begin{forest}
+ for tree={calign=fixed edge angles},
+ move/.style={
+ tikz={\draw[->] () to[out=south west,in=south] (#1);},
+ delay={~#1.content~={##1},content=$t$}},
+ [CP[][C'[C][\dots[,phantom][VP[DP][V'[V][DP,move=!r1]]]]]]
+ \end{forest}
+\end{forestexample}
+
+\begin{forestexample}[index={if option,n children,content,for step,step>children,delay,pgfmath},index>={!},basicstyle=\scriptsize\ttfamily,layout=export]
+ \begin{forest}
+ calc/.style={if n children={0}{}{content=0,for children={calc,~!u.content~/.pgfmath=int(content("!u")+content())}}},
+ delay=calc,
+ [[[3][4][5]][[3][9]][8][[[1][2][3]]]]
+ \end{forest}
+\end{forestexample}
+
+In the following example, the content of the branching nodes is computed by \foRest;: a branching
+node is a sum of its children. The algorithm visits each node (but the root node) and adds its
+content to the content of the parent. Note that as the computation must proceed bottom-up,
+\index{for step=\index{descendants children-first}} propagator is used to walk through the
+tree.\footnote{It would be possible to emulate \index{for step=\index{descendants children-first}}
+ by defining a recursive style, as was done in this manual for versions of the package prior to
+ introduction of the bottom-up propagator. The following code produces identical result as the code
+ in the main text.
+
+ \box\codebox}
+
+\begin{forestexample}[index={if option,n children,content,for step,step>children,delay,pgfmath},index>={!}]
+ \begin{forest}
+ delay={
+ where n children={0}{}{content=0},
+ for descendants children-first={
+ ~!u.content~/.pgfmath=int(content("!u")+content())}
+ }
+ [[[3][4][5]][[3][9]][8][[[1][2][3]]]]
+ \end{forest}
+\end{forestexample}
+
+Actually, for common computations such as summing things up, \foRest; provides an easier way to do it: aggregate functions (\S\ref{ref:aggregate-functions}). Below, aggregate function \index{sum}, defined as |pgfkeys| handler, walks through the \index{step>children} (second argument) of the current node, summing up their \index{content} (first argument) and stores the result as the \index{content} of the current node (because \index{content} is the handled key).
+
+\begin{forestexample}[index={sum,aggregate postparse,for step,tree children-first,delay,n children,if option,content,step>children}]
+ \begin{forest}
+ delay={
+ aggregate postparse=int,
+ for tree children-first={
+ if n children={0}{}{
+ content/~.sum~={content}{children}
+ }
+ }
+ }
+ [[[3][4][5]][[3][9]][8][[[1][2][3]]]]
+ \end{forest}
+\end{forestexample}
+
+\subsection{Wrapping}
+\label{tut:wrapping}
+
+We have already seen examples of inserting option values into other expressions. In example
+(\ref{ex:romannumeral}), we have wrapped the value of the option being assigned to (|#1| stood for
+the current value of option \index{content}); example (\ref{ex:forestoption}) additionally wrapped
+the value of option \index{readonly option>n} (of the current node) using macro \index{forestoption}. In general,
+\foRest; offers two ways to perform computations (from simple option value lookups to
+complicated formulas) and insert their results into another expression (of any kind: \TeX\ code,
+|pgfkeys| keylist, |pgfmath| expression, etc.).
+
+Historically, the first \foRest;'s mechanism that offered wrapping of computed values were handlers
+\index{wrap pgfmath arg} and \index{wrap $n$ pgfmath args} (for $n=2,\dots,8$), which combine the
+wrapping mechanism with the |pgfmath| evaluation. The idea is to compute (most often, just access
+option values) arguments using |pgfmath| and then wrap them into the given macro body (marked below)
+using \TeX's parameters (|#1| etc.). Below, this is used to subscript the contents of a node with
+its sequential number and the number of parent's children.
+\begin{forestexample}[index={option>phantom,delay,for step,descendants,content,readonly option>n,n children,wrap $n$ pgfmath args},index>={!},label=ex:pgfmathwrap]
+ \begin{forest} [,phantom,delay={for descendants={
+ content/.wrap 3 pgfmath args=
+ ~{#1$_{#2/#3}$}~
+ {content}{n}{n_children("!u")}}}
+ [c][o][u][n][t]]
+ \end{forest}
+\end{forestexample}
+Note the underscore |__| character in |n__children|: in |pgfmath| function names, spaces,
+apostrophes and other non-alphanumeric characters from option names are all replaced by
+underscores.
+
+As another example, let's make the numerals example (\ref{ex:numerals-simple}) a bit fancier.
+The numeral type is read off the parent's content and used to construct the appropriate control
+sequence (|\@arabic|, |\@roman| and |\@alph|). (The numbers are not specified in content
+anymore: we simply read the sequence number \index{readonly option>n}.)
+\begin{forestexample}[index={delay,where option,readonly option>level,content,readonly option>n,for step,step>children,option>l,wrap $n$ pgfmath args},index>={!}]
+ \begin{forest}
+ delay={where level={2}{content/.wrap 2 pgfmath args=
+ {\csname @#1\endcsname{#2}}
+ {content("!u")}{n}}{}},
+ for children={l*=n},
+ [\LaTeX\ numerals,
+ [arabic[][][][]]
+ [roman[][][][]]
+ [alph[][][][]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+Invoking |pgfmath| is fairly time consuming and using it to do nothing but retrieve an option value
+seems a bit of an overkill. To remedy the situation, argument processor
+(\S\ref{ref:argument-processor}) was introduced in \FoRest; v2.0 and considerably expanded in v2.1.
+One way to invoke it is using handler \index{handler>process}.
+
+The argument processor takes a sequence of instructions and an arbitrary number of arguments,
+transforms the given arguments according to the instructions, and feeds the resulting list of
+arguments into the handled key.
+
+An instruction is given by a single-character code. The simplest instructions are:
+\index{processor>O}, which expects its argument to be an option name (possibly preceded by a
+\index{relative node name}|.| to access the option value of a non-current node) and returns the
+value of the option; \index{processor>R}, which does the same for registers; and \index{processor>noop}, which
+leaves the argument unchanged.
+
+In the following example, we define style |test| taking four arguments and call it by providing
+the arguments via \index{handler>process}. The instruction string |ROO__| tells the argument processor that
+the first argument is the value of (scratch) register \indexex{temptoksa}, the second the value of
+option \indexex{n children} at the current node, the third the value of option \indexex{content} of
+the second child of the current node, and the fourth just a plain string. Macro |test| is thus
+actually invoked with argument list |{Hello}{3}{Jane}{Goodbye}|.
+
+\begin{forestexample}[index={handler>process,processor>noop,processor>R,processor>O,delay,content,n
+children,temptoksa}]
+ \begin{forest}
+ test/.style n args={4}{align=center,
+ content={#1!\\I have #2 children.\\One of them is #3.\\#4!}}
+ [,delay={temptoksa=Hello,
+ test/.process={~ROO_~}{temptoksa}{n children}{!2.content}{Goodbye}}
+ [John][Jane][Joe]]
+ \end{forest}
+\end{forestexample}
+
+To wrap using the argument processor, use instruction \index{processor>w}. Unless wrapping a single
+argument, this instruction should be followed by a number indicating the number of arguments
+consumed. \index{processor>w} will take the required number of arguments from the list of already
+processed arguments and wrap them in the macro body given as the next (yet unprocessed) argument.
+
+The following example has the same result as example (\ref{ex:pgfmathwrap}). Note that the
+order of the wrapper-macro body and the arguments is different for \index{handler>process} and \index{wrap
+ $n$ pgfmath args}. (Experience shows that \index{handler>process}'s order is easier on the eyes.) The
+example also illustrates that (i) the instructions need not be enclosed in braces and (ii) that
+repetition of an argument processor instruction can be indicated by appending a number to the
+instruction: thus |O3| below means the same as |OOO|.
+
+\begin{forestexample}[index={option>phantom,delay,for step,descendants,content,readonly option>n,n children},index>={!}]
+ \begin{forest} [,phantom,delay={for descendants={
+ content/.process=~O3 w3~
+ {content}{n}{!u.n children}
+ {#1$_{#2/#3}$}
+ }}
+ [c][o][u][n][t]]
+ \end{forest}
+\end{forestexample}
+
+Note that the order of the wrapper-macro body and the arguments is different for
+\index{handler>process} and \index{wrap $n$ pgfmath args}. Experience shows that
+\index{handler>process}'s order is easier on the eyes. The example also illustrates that the
+instructions need not be enclosed in braces and that repetition of an argument processor instruction
+can be indicated by appending a number to the instruction: |O3| above is equivalent to |OOO|.
+
+% \begin{forestexample}[index={process,processor>w}]
+% \begin{forest}
+% [root,delay={align=center,
+% content/.process={OO ~w2~}
+% {n children}{content}
+% {This node has #1 children.\\It's original content is ``#2''.}
+% }]
+% \end{forest}
+% \end{forestexample}
+
+\index{wrap $n$ pgfmath args} always returns a single braced expression and is thus a bit cumbersome
+to use when the handled key expects multiple arguments: the trick is to enclose the expected
+argument list in extra braces (marked in the code below). As \index{handler>process} can return multiple
+arguments, there is no need for such a workaround. See the following example for comparison of the
+two methods.
+
+\begin{forestexample}[index={for step,step>name,handler>process,processor>O,processor>w,wrap $n$ pgfmath args}]
+ \begin{forest}
+ [,phantom
+ [pgfmath[2,delay={for n/.wrap 2 pgfmath args=
+ ~{~{#1}{content=#2,draw}~}~
+ {content}{content("!u")}
+ } [x][x][x][x]]]
+ [process[3, delay={for n/.process=
+ {O Ow1}{content}
+ {!u.content}{content=#1,draw}
+ } [x][x][x][x]]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+A single \index{handler>process} invocation can perform multiple wrappings. The numbering of arguments of
+each wrapping starts at |#1|. In the example below, \index{for step=\index{nodewalk}} takes two
+arguments, a nodewalk and a list of nodekeys. Each is produced by an independent wrapping (wrap bodies
+are marked in the code).
+
+\begin{forestexample}[index={handler>process,processor>R,processor>w,for step,nodewalk,+toks,content}]
+ \begin{forest}
+ declare toks register=prefix,
+ declare count register=level to prefix,
+ prefix=X-,
+ level to prefix=1,
+ delay={
+ for nodewalk/.process=Rw Rw
+ {level to prefix}{~level=#1~}
+ {prefix}{~+content=#1~}
+ }
+ [0[1[2]][3[4][5]][6[7][8][9]]]
+ \end{forest}
+\end{forestexample}
+
+
+
+
+\subsection{Externalization}
+\label{tut:externalization}
+
+\FoRest; can be quite slow, due to the slowness of both \PGF;/\TikZ; and its own computations.
+However, using \emph{externalization}, the amount of time spent in \foRest; in everyday life can
+be reduced dramatically. The idea is to typeset the trees only once, saving them in separate
+PDFs, and then, on the subsequent compilations of the document, simply include these PDFs instead
+of doing the lenghty tree-typesetting all over again.
+
+\FoRest;'s externalization mechanism is built on top of \TikZ;'s |external| library. It
+enhances it by automatically detecting the code and context changes: the tree is recompiled if and
+only if either the code in the \index{forest} environment or the context (arbitrary parameters; by
+default, the parameters of the standard node) changes.
+
+To use \foRest;'s externalization facilities, say:\footnote{When you switch on
+the externalization for a document containing many \keyname{forest} environments, the first
+compilation can take quite a while, much more than the compilation without externalization. (For
+example, more than ten minutes for the document you are reading!) Subsequent compilations,
+however, will be very fast.}\index[not print]{external}
+\begin{lstlisting}[point=external]
+ \usepackage[external]{forest}
+ ~\tikzexternalize~
+\end{lstlisting}
+
+If your \index{forest} environment contains some macro, you will probably want the externalized
+tree to be recompiled when the definition of the macro changes. To achieve this, use
+\index{forestset}|{|\index{external/depends on macro}|=|\cmdname{macro}|}|. The effect is
+local to the \TeX\ group.
+
+\TikZ;'s externalization library promises a |\label| inside the externalized graphics to work
+out-of-box, while |\ref| inside the externalized graphics should work only if the externalization
+is run manually or by |make| \citep[\S32.4.1]{tikzpgf2.10}. A bit surprisingly perhaps, the
+situation is roughly reversed in \foRest;. |\ref| inside the externalized graphics will work
+out-of-box. |\label| inside the externalized graphics will not work at all. Sorry. (The reason
+is that \foRest; prepares the node content in advance, before merging it in the whole tree, which
+is when \TikZ;'s externalization is used.)
+
+\subsection{Expansion control in the bracket parser}
+\label{tut:bracket}
+
+By default, macros in the bracket encoding of a tree are not
+expanded until nodes are being drawn --- this way, node
+specification can contain formatting instructions, as illustrated in
+section~\ref{tut:basic-usage}. However, sometimes it is useful to
+expand macros while parsing the bracket representation, for example to
+define tree templates such as the X-bar template, familiar
+to generative grammarians:\footnote{Honestly, dynamic node creation might be a better way to do
+this; see~\S\ref{ref:dynamic}.}
+\begin{forestexample}[index={bracketset,action character}]
+ ~\bracketset{action character=@}~
+ \def\XP#1#2#3{#1P[#2][#1'[#1][#3]]}
+ \begin{forest}
+ [~@~\XP T{DP}{~@~\XP V{DP}{DP}}]
+ \end{forest}
+\end{forestexample}
+In the above example, the |\XP| macro is preceded by the \emph{action character} |@|: as
+the result, the token following the action character was expanded before the parsing proceeded.
+
+The action character is not hard coded into \foRest;. Actually, there is no action character by
+default. (There's enough special characters in \foRest; already, anyway, and the situations where
+controlling the expansion is preferable to using the |pgfkeys| interface are not numerous.) It is
+defined at the top of the example by processing key \index{action character} in the
+|/bracket| path; the definition is local to the \TeX\ group.
+
+Let us continue with the description of the expansion control facilities of the bracket parser.
+The expandable token following the
+action character is expanded only once. Thus, if one defined macro
+|\VP| in terms of the general |\XP| and tried to use it in the same
+fashion as |\XP| above, he would fail. The correct way is to follow
+the action character by a braced expression: the braced expression
+is fully expanded before bracket-parsing is resumed.
+\begin{forestexample}[index={bracketset,action character}]
+ \bracketset{action character=@}
+ \def\XP#1#2#3{#1P[#2][#1'[#1][#3]]}
+ \def\VP#1#2{\XP V{#1}{#2}}
+ \begin{forest}
+ [@\XP T{DP}{~@{~\VP{DP}{DP}~}~}]
+ \end{forest}
+\end{forestexample}
+
+In some applications, the need for macro expansion might be much
+more common than the need to embed formatting instructions.
+Therefore, the bracket parser provides commands |@+| and |@-|: |@+|
+switches to full expansion mode --- all tokens are fully expanded
+before parsing them; |@-| switches back to the default mode, where
+nothing is automatically expanded.
+\begin{forestexample}[index={bracketset,action character}]
+ \bracketset{action character=@}
+ \def\XP#1#2#3{#1P[#2][#1'[#1][#3]]}
+ \def\VP#1#2{\XP V{#1}{#2}}
+ \begin{forest} ~@+~
+ [\XP T{DP}{\VP{DP}{DP}}]
+ \end{forest}
+\end{forestexample}
+
+All the action commands discussed above were dealing only with
+\TeX's macro expansion. There is one final action command, |@@|,
+which yields control to the user code and expects it to call
+|\bracketResume| to resume parsing. This is useful to e.g.\
+implement automatic node enumeration:
+\begin{forestexample}[index={bracketset,action character,option>phantom,delay,where option,readonly option>level,content}]
+ \bracketset{action character=@}
+ \newcount\xcount
+ \def\x#1{~@@~\advance\xcount1
+ \edef\xtemp{[$\noexpand\times_{\the\xcount}$[#1]]}%
+ \expandafter\bracketResume\xtemp
+ }
+ \begin{forest}
+ phantom,
+ delay={where level=1{content={\strut #1}}{}}
+ ~@+~
+ [\x{f}\x{o}\x{r}\x{e}\x{s}\x{t}]
+ \end{forest}
+\end{forestexample}
+This example is fairly complex, so let's discuss how it works. |@+| switches to the full
+expansion mode, so that macro |\x| can be easily run. The real magic hides in this macro. In
+order to be able to advance the node counter |\xcount|, the macro takes control from \foRest; by
+the |@@| command. Since we're already in control, we can use |\edef| to define the node content.
+Finally, the |\xtemp| macro containing the node specification is expanded with the resume command
+sticked in front of the expansion.
+
+
+
+\section{Reference}
+\label{sec:reference}
+
+This section documents all publicly exposed keys and macros defined by the core package. All other
+commands defined by the package (see the implementation typeset in |forest.pdf|) are considered
+internal and might change without prior notice or compatibility support.
+
+\subsection{Package loading and options}
+\label{ref:package-options}
+
+Load the package by writing |\usepackage{forest}| in the document preamble.
+
+Field-specific definitions and defaults are stored in separate libraries. Use
+|\usepackage[|\meta{library name}|]{forest}| to load library \meta{library name} and its defaults
+alongside the main package. Loading several libraries in this way is allowed: however, if you need
+more control over loading the defaults, use the following macros.
+
+\begin{syntax}
+\indexitem{macro>useforestlibrary}[|*|][|[|\meta{options}|]|]|{|\meta{library}|,...}|
+Loads the given libraries.
+
+The starred version applies their defaults as well, while the starless does not. Multiple library
+names can be given, separated by commas. Libraries can receive \meta{options}. This macro can only
+be used in the preamble.
+
+\indexitem{macro>forestapplylibrarydefaults}|{|\meta{library name},...|}|
+Loads the default settings of \meta{library}.
+
+Multiple library names can be given, separated by commas. This macro can be used either in the
+preamble or in the document body. Its effect is local to the current \TeX\ scope.
+\end{syntax}
+
+For example, the |linguistics| library defines c-command related nodewalks, changes the default
+parent--child edges to south--north (the main package default is border--border) and sets the
+baseline to the root\footnote{For details, see \S\ref{sec:library-linguistics}.} node. Thus, if you write |\usepackage[linguistics]{forest}| in your preamble,
+or use macro \cmdname{forestapplylibrarydefaults} like below, you get the following:
+
+\begin{forestexample}[tree bin=minipage,index={for step,c-commanded}]
+ package defaults:
+ \begin{forest}
+ [VP % cannot use "for c-commanded" below!
+ [DP, for sibling={for tree=red}]
+ [V'[V][DP]]
+ ]
+ \end{forest}\\[1ex]
+ |linguistics| library defaults:
+ ~\forestapplylibrarydefaults{linguistics}~
+ \begin{forest}
+ [VP
+ [DP, ~for c-commanded~={red}]
+ [V'[V][DP]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\begin{syntax}
+\indexitem(false){package option>external}|=|\alternative{true,false}
+
+ Enable/disable externalization, see \S\ref{ref:externalization}.
+
+\indexitem(most){package option>compat}|=|\meta{keylist}
+Enter compatibility mode with previous versions of the package.
+
+If at all possible, each backwards incompatible change is given a key in the |compat| path, e.g.\
+|compat=|\index{1.0-forstep} reverts to the old behaviour of spatial propagators \index{for
+ step=\meta{step}}, where a propagator could not fail.
+
+While each compatibility feature can be enabled individually, they are grouped for ease of use. To
+load compatibility features since the last version of form
+|x|[|.y|[|.z|]], write |compat=x|[|.y|[|.z|]]|-all| or
+|compat=x|[|.y|[|.z|]]|-most|. The former enables all compatibility features since that release, the
+latter only those that are guaranteed to not disrupt any new functionality of the package.
+
+To load all compatibility features since the last major release (|x| in |x.y.z|), write
+|compat=|\indexdef{value of=compat>all}; to load most of them, write |compat=|\indexdef{value of=compat>most} or simply |compat|.
+
+To enable multiple compatibility features, either use this option multiple times, or provide it with
+a comma-separated list of compatibility features. (Surround the list by braces.)
+
+Specifying this option also defines macro \indexdef{macro>forestcompat} (taking the same arguments
+as the package option) which can be used to enable compatibility features locally, within the
+document body. To enable compatibility mode but not enable any specific compatibility feature for
+the entire document, write |compat=|\indexdef{value of=compat>none} as a package option.
+
+For a list of compatibility features, see \S\ref{sec:changelog}.
+
+By default, the package warns when a compatibility feature is used. Disable this behaviour by
+|compat=|\indexdef{value of=compat>silent}.
+
+\indexitem(true){package option>tikzcshack}|=|\alternative{true,false}
+
+ Enable/disable the hack into \TikZ;'s implicit coordinate syntax, see
+ \S\ref{ref:relative-node-names}.
+
+\indexitem(true){package option>tikzinstallkeys}|=|\alternative{true,false}
+
+ Install certain keys into the \keyname{/tikz} path. Currently: \index{fit to}.
+
+\indexitem{package option>debug}|=|\meta{debug category}[, \meta{debug category}]*
+
+Prints out some debugging info to the log file. When given no argument, prints out all the
+available information, otherwise only the information on the listed (comma-separated) debug categories. The available categories are listed below.
+
+\begin{syntax}
+ \indexitem{value of=debug>nodewalks}
+ \indexitem{value of=debug>dynamics}
+ \indexitem{value of=debug>process}
+\end{syntax}
+
+\end{syntax}
+
+\subsection{Invocation}
+\label{sec:invocation}
+
+\begin{syntax}
+ %%% begin listing region: forest_environment_doc
+\indexitem{environment>forest={[\texttt{(}\meta{config}\texttt{)}]\meta{tree}}}
+ %%% end listing region: forest_environment_doc
+\indexitem{macro>Forest}[*][|(|\meta{config}|)|]\marg{tree}
+
+ The environment and the starless version of the macro introduce a group; the starred macro does
+ not, so the created nodes can be used afterwards, like in the example below. (Note that this will
+ leave a lot of temporary macros lying around. This shouldn't be a problem, however, since all of
+ them reside in the |\forest| ``namespace''.)
+
+{\tikzexternaldisable
+\begin{forestexample}
+ We create a
+ ~\Forest*~{
+ [DP,name=DP,baseline
+ [D]
+ [NP]
+ ]
+ }
+ and merge it into a
+ ~\Forest*~{
+ [VP,baseline
+ [V]
+ [,replace by=DP
+ ]
+ ]
+ }
+\end{forestexample}}
+
+\meta{config} is a keylist that configures the behaviour of the environment/macro. The
+configuration is the first operation that the environment/macro does; it precedes even the reading
+of the tree specification. Currently, \meta{config} accepts only one key:
+ \begin{syntax}
+ \indexitem{option of=forest>stages}|=|\meta{keylist}
+
+ By default, after reading the tree specification, \foRest; executes style \index{style>stages}.
+ If key |stages| is used in \meta{config}, \meta{keylist} is executed instead.
+ \end{syntax}
+
+\indexitem{macro>forestset}\marg{keylist}
+
+ Execute \meta{keylist} (of node keys) with the default path set to \keyname{/forest}.
+ \begin{advise}
+ \item This macro is usually used to define \foRest; styles.
+ \item Usually, no current node is set when this macro is called. Thus, executing most node keys
+ in this place will fail. However, if you have some nodes lying around, you can use
+ propagator \index{for step=\index{option>name}}|=|\meta{node name} to set the node with the given name as
+ current.
+ \end{advise}
+\end{syntax}
+
+
+\subsection{The bracket representation}
+\label{ref:bracket}
+
+A bracket representation of a tree is a token list with the following syntax:
+\begin{eqnarray*}
+ \meta{tree}&=&\left[\meta{preamble}\right]\meta{node}\\
+ \meta{node}&=&\texttt{[}\left[\meta{content}\right]\left[\texttt{,}\meta{keylist}\right]
+ \left[\meta{children}\right]\texttt{]}\meta{afterthought}\\
+ \meta{preamble}&=&\meta{keylist}\\
+ \meta{keylist}&=&\meta{key--value}\left[,\meta{keylist}\right]\\
+ \meta{key--value}&=&\meta{key}\OR\meta{key}\texttt{=}\meta{value}\\
+ \meta{children}&=&\meta{node}\left[\meta{children}\right]
+\end{eqnarray*}
+
+The \meta{preamble} keylist is stored into keylist register \index{preamble}. The \meta{keylist} of
+a \meta{node} is stored into keylist option \index{given options}. \meta{content} and
+\meta{afterthought} are normally stored by prepending and appending
+\index{content}|'=|\meta{content} and \index{afterthought}|=|\meta{afterthought} to \index{given
+ options}, respectively; this is customizable via \index{content to} and redefining style
+\index{afterthought}.
+
+Normally, the tokens in the bracket representation are not expanded while the input is parsed.
+However, it is possible to control expansion. Expansion control sequences of \foRest;'s bracket
+parser are shown below. Note that by default, there is no \index{action character}.
+\begin{center}
+ \begin{tabular}{ll}
+ \rstyle\meta{action character}\texttt{-}&no-expansion mode (default): nothing is expanded\\
+ \rstyle\meta{action character}\texttt{+}&expansion mode: everything is fully expanded\\
+ \rstyle\meta{action character}\texttt{}\meta{token}&expand \meta{token}\\
+ \rstyle\meta{action character}\texttt{}\meta{\TeX-group}&fully expand \meta{\TeX-group}\\
+ \rstyle\meta{action character}\meta{action character}&yield control;\\&upon finishing its job,
+ user's code should call \indexdef{macro>bracketResume}
+ \end{tabular}
+\end{center}
+
+To customize the bracket parser, call
+\indexdef{macro>bracketset}\meta{keylist}, where the keys can be the following.
+\begin{syntax}
+\indexitem({{[%]
+ }}){bracket key>opening bracket}|=|\meta{character}
+\indexitem({{{{%[
+ ]}}}}){bracket key>closing bracket}|=|\meta{character}
+\indexitem(none){bracket key>action character}|=|\meta{character}
+\end{syntax}
+
+\begin{advise}
+\item Careful when setting the \index{opening bracket} to |(|, %)
+ as an initial |(| %)
+ is understood as the delimiter of the optional \meta{config} argument of the
+ \index{environment>forest} environment or \index{macro>Forest} macro. The workaround is to either
+ provide an empty \meta{config} argument |()|, or put some whitespace (e.g.\ a newline) before the
+ tree specification.
+\end{advise}
+
+By redefining the following two keys, the bracket parser can be used outside \foRest;.
+\begin{syntax}
+\indexitem{bracket key>new node}|=|\meta{preamble}\meta{node specification}\meta{csname}.
+ Required semantics: create a new node given the preamble (in the case of a new
+ root node) and the node specification and store the new node's id into \meta{csname}.
+\indexitem{bracket key>set afterthought}|=|\meta{afterthought}\meta{node id}.
+ Required semantics: store the afterthought in the node with given id.
+\end{syntax}
+
+\subsection{The workflow}
+\label{sec:workflow}
+
+\subsubsection{Stages}
+\label{ref:stages}
+
+\FoRest; does its job in several stages. The default course of events is the following:
+\begin{enumerate}
+\item\label{step:parsing-bracket} The bracket representation of the tree (\S\ref{ref:bracket}) is
+ parsed and stored in a data structure.
+\item\label{step:given-options} The keys given in the bracket representation are processed. In
+ detail, \index{default preamble} is processed first, then the given \index{preamble} (both in the
+ context of the (formal) root node) and finally the keylists given to individual nodes. The latter
+ are processed recursively, in a depth-first, parent-first fashion.
+\item\label{step:typeset-nodes} Each node is typeset in its own |tikzpicture| environment, saved
+ in a box and its measures are taken.
+\item\label{step:pack} The nodes of the tree are \emph{packed}, i.e.\ the relative positions of the nodes are
+ computed so that the nodes don't overlap. That's difficult. The result: option \index{option>s} is
+ set for all nodes. (Sometimes, the value of \index{option>l} is adjusted as well.)
+\item\label{step:compute-xy} Absolute positions, or rather, positions of the nodes relative to the
+ root node are computed. That's easy. The result: options \index{option>x} and \index{y} are
+ set.
+\item\label{step:draw-tree} The \TikZ; code that will draw the tree is produced and executed. (The nodes are
+ drawn by using the boxes typeset in step~\ref{step:typeset-nodes}.)
+\end{enumerate}
+
+Stage~\ref{step:parsing-bracket} collects user input and is thus ``fixed''. However, the other
+stages, which do the actual work, are under user's control.
+
+First, hooks exist between the individual stages which make it possible (and easy) to change the
+properties of the tree between the processing stages. For a simple example, see
+example~(\ref{ex:adjustxy}): the manual adjustment of \index{y} can only be done after the absolute
+positions have been computed, so the processing of this option is deferred by \index{before drawing
+ tree}. For a more realistic example, see the definition of style \index{GP1}: before packing,
+\texttt{outer xsep} is set to a high (user determined) value to keep the $\times$s uniformly spaced;
+before drawing the tree, the \texttt{outer xsep} is set to \texttt{0pt} to make the arrows look
+better.
+
+Second, the execution of the processing stages \ref{step:given-options}--\ref{step:draw-tree} is
+\emph{completely} under user's control. To facilitate adjusting the processing flow, the approach
+is twofold. The outer level: \foRest; initiates the processing by executing style \index{style>stages},
+which by default executes the processing stages \ref{step:given-options}--\ref{step:draw-tree},
+preceding the execution of each but the first stage by processing the keys embedded in temporal
+propagators \keyname{before ...} (see \S\ref{ref:temporal-propagators}). The inner level: each
+processing step is the sole resident of a stage-style, which makes it easy to adjust the workings of
+a single step. What follows is the default content of style \keyname{stages}, including the default
+content of the individual stage-styles. Both nicely readable and ready to copy-paste versions are given.
+\begin{syntax}
+ \indexitem{style>stages}
+ \begin{syntax}
+ \item \index{for step=\index{root'}}|={|
+ \item | |\index{process keylist register}|=|\index{default preamble}|,|
+ \item | |\index{process keylist register}|=|\index{preamble}
+ \item |}|
+ \item \index{process keylist}|=|\index{given options}
+ \item \index{process keylist}|=|\index{before typesetting nodes}
+ \indexitem{style>typeset nodes stage}\hfill
+ |{|\index{for step=\index{root'}}|=|\index{typeset nodes}|}|
+ \item \index{process keylist}|=|\index{before packing}
+ \indexitem{style>pack stage}\hfill
+ |{|\index{for step=\index{root'}}|=|\index{pack}|}|
+ \item \index{process keylist}|=|\index{before computing xy}
+ \indexitem{style>compute xy stage}\hfill
+ |{|\index{for step=\index{root'}}|=|\index{compute xy}|}|
+ \item \index{process keylist}|=|\index{before drawing tree}
+ \indexitem{style>draw tree stage}\hfill
+ |{|\index{for step=\index{root'}}|=|\index{draw tree}|}|
+ \end{syntax}
+\end{syntax}
+\lstinputregion{forest.dtx}{stages}
+
+Both style \keyname{stages} and the individual stage-styles may be freely modified by the user.
+Obviously, as a style must be redefined before it is processed, |stages| should be redefined (using
+macro \index{forestset}) outside the \index{forest} environment; alternatively, stages can be given
+as the (parenthesized) optional argument of the environment (see~\S\ref{sec:invocation}). A stage
+style can also be redefined in the preamble or in any of the keylists processed prior to entering
+that stage.
+
+Here's the list of keys used either in the default processing or useful in an alternative
+processing flow.
+\begin{syntax}
+ \indexitem{stage>typeset nodes}
+ \itemnosep
+ \indexitem{stage>typeset nodes'}
+
+ Typesets each node of the current node's subtree in its own |tikzpicture| environment. The result
+ is saved in a box (which is used later, in the \index{draw tree stage}) and its measures are
+ taken.
+
+ In the |typeset_nodes'| variant, the node box's content is not overwritten if the box already
+ exists.
+
+ The order in which the nodes are typeset is controlled by nodewalk style \indexdef{nodewalk
+ style>typeset nodes processing order} or, if this style is not defined, by \index{processing
+ order}.
+
+\indexitem{node key>typeset node} Typesets the \emph{current} node, saving the result in the node box.
+
+ This key can be useful also in the default \index{style>stages}. If, for example, the node's content
+ is changed and the node retypeset just before drawing the tree, the node will be positioned as if
+ it contained the ``old'' content, but have the new content: this is how the constant distance
+ between $\times$s is implemented in the \index{GP1} style.
+
+\indexitem{stage>pack} The nodes of the tree are \emph{packed}, i.e.\ the relative positions of
+ the nodes are computed so that the nodes don't overlap. The result: option \index{option>s} is set
+ for all nodes; sometimes (in tier alignment and for some values of \index{calign}), the value
+ of some nodes' \index{option>l} is adjusted as well.
+
+\indexitem{node key>pack'} ``Non-recursive'' packing: packs the children of the current node only.
+ (Experimental, use with care, especially when combining with tier alignment.)
+
+\indexitem{stage>compute xy} Computes the positions of the nodes in the subtree relative to the
+ current node. The results are stored into options \index{option>x} and \index{y}. The current node's
+ \index{option>x} and \index{y} remain unchanged.
+
+\indexitem{stage>draw tree}
+\itemnosep
+\indexitem{stage>draw tree'}
+ Produces and executes the \TikZ; code that draws the (sub)tree rooted in the current node.
+
+ The procedure uses the node boxes typeset by \index{typeset nodes} or friends. The |'| variant
+ includes the node boxes in the picture using \cmdname{copy}, not \cmdname{box}, thereby preserving
+ them.
+
+ For details and customization, see \S\ref{sec:draw-tree}.
+
+\indexitem{node key>draw tree box}|=|[\meta{\TeX\ box}] The picture drawn by the subsequent
+ invocations of \index{draw tree} and \index{draw tree'} is put into \meta{\TeX\ box}. If
+ the argument is omitted, the subsequent pictures are typeset normally (the default).
+
+ \indexitem{node key>process keylist}|=|\meta{keylist option}
+ For each node in the entire tree, the keylist saved in \meta{keylist option} of the node is
+ processed (in the context of that node).
+
+ Note that this key is not sensitive to the current node: it processes the keylists for the whole
+ tree. Actually, it is possible to control which nodes are visited: \index{keylist option
+ processing order=\meta{keylist option}} is walked if it is defined, otherwise \index{processing
+ order}. In both cases, the processing nodewalk starts at the formal root of the tree (see
+ \index{root'} and \index{set root}), which is reevaluated at the beginning of each internal cycle
+ (see below). By default, \index{keylist option processing order=\meta{keylist option}} is indeed
+ undefined, while the \index{processing order} defauls to \index{tree}, which means that \emph{all
+ the nodes in the entire tree} are processed.
+
+ Keylist-processing proceeds in cycles. In a given cycle, the value of option \meta{keylist option
+ name} is processed for every node visited by the processing nodewalk. During a cycle, keys may
+ be \emph{delayed} using key \index{delay}. Keys delayed in a cycle are processed in the next
+ cycle. The number of cycles in unlimited.
+
+ Dynamic creation of nodes happens between the cycles. The options given to the dynamically
+ created nodes are implicitely delayed and thus processed at the end of the next cycle.
+
+ This key is primarily intended for use within \index{style>stages}.
+ The calls of this key should \emph{not} be nested, and it should not be embedded under
+ \index{process keylist'} or \index{process keylist register}.
+
+ When changing the processing nodewalk, note that delayed keys will be executed only for nodes
+ visited by the processing nodewalk. Delayed spatially propagated keys will be remembered,
+ though, and executed when the given keylist is processed for the target node. Using spatial
+ propagators without delaying cannot result in a non-processed key.
+
+\indexitem{node key>process keylist'}|=|\meta{keylist option}\meta{nodewalk}
+
+ This key is a variant of \index{process keylist}. The differences are as follows.
+
+ The processing nodewalk is given explicitely (by \meta{nodewalk}) and starts at the current node
+ (in each internal cycle).
+
+ There is no dynamic creation of nodes between the delay cycles. Any dynamic node
+ instructions will be remembered and executed after the next cycle of \index{process keylist}, or
+ an explicit call to \index{do dynamics}.
+
+ It is safe to embed this key within \index{process keylist} and (all) friends.
+
+\indexitem{node key>process keylist''}|=|\meta{keylist option}\meta{nodewalk}
+
+This key is a variant of \index{process keylist} which executes neither dynamic node operations nor
+delayed keys (there are thus no internal cycles). Any delayed keys will not be processed
+during the execution of this key. They will be remembered and executed at the end of the next cycle
+of \index{process keylist} or \index{process keylist'}.
+
+As for \index{process keylist'}, the processing nodewalk is given explicitely (by \meta{nodewalk})
+and starts at the current node.
+
+It is safe to embed this key within \index{process keylist} and (all) friends.
+
+\indexitem{node key>process keylist register}|=|\meta{register}
+
+ Process the keylist saved in \meta{register} in the context of the current node.
+
+ Any delayed keys will not be processed during the execution of this key. They will be
+ remembered and executed at the end of the next cycle of \index{process keylist} or
+ \index{process keylist'}.
+
+ It is safe to embed this key within \index{process keylist} or \index{process keylist'}.
+
+\indexitem{node key>process delayed}|=|\meta{nodewalk} Process delayed keys.
+
+ Keylist \index{delay} cannot be processed using \index{process keylist} or \index{process
+ keylist'}. Thus this key.
+
+ Like \index{process keylist} or \index{process keylist'}, this key uses internal cycles. Thus,
+ any embedded \index{delay}s will be processed.
+
+ There is no dynamic creation of nodes between the delay cycles. Any dynamic node instructions will
+ be remembered and executed after the next cycle of \index{process keylist} or \index{process
+ keylist'}, or an explicit call to \index{do dynamics}.
+
+ This key is safe to use within \index{process keylist}, \index{process keylist'} and
+ \index{process keylist register}.
+
+\indexitem(tree){nodewalk style>processing order}|/.nodewalk style=|\meta{nodewalk}
+
+Redefine this style to change the default order in which \index{process keylist} processes a keylist
+option. For example, to process the nodes in a child-first fashion, write
+\begin{lstlisting}
+ processing order/.nodewalk style=tree children first
+\end{lstlisting}
+Note that this is a \emph{nodewalk} style, so it must be defined either using |.style| handler
+during a nodewalk or using \index{nodewalk style}.
+
+\indexitem(processing order)[form={processing order}]{word suffix=keylist option>nodewalk style>processing order=\meta{keylist option}}|/.nodewalk style=|\meta{nodewalk}
+
+Redefine this style to change the \index{process keylist} processing order for a specific
+\meta{keylist option}. For example, to process \index{before drawing tree} options in the
+child-first fashion, leaving the processing of other |before ...| keylists untouched, write
+\begin{lstlisting}
+ before drawing tree processing order/.nodewalk style=tree children first
+\end{lstlisting}
+
+\indexitem{node key>do dynamics} Experimental. Perform pending dynamic tree operations.
+
+ Do not use this key within \index{process keylist} or \index{process keylist'}.
+
+\end{syntax}
+
+\subsubsection{Temporal propagators}
+\label{ref:temporal-propagators}
+
+Temporal propagators delay processing of given keys until some other point in the processing of the
+tree. There are three kinds of temporal propagators. Most of the propagators have the form
+|before_...| and defer the processing of the given keys to a hook just before some stage in the
+workflow (\S\ref{ref:stages}). \index{before packing node} and \index{after packing node} are
+special as they fire \emph{during} the packing stage. The \index{delay} propagator is
+``internal'' to the current hook: the keys in the hook are processed cyclically, and \keyname{delay}
+delays the processing of the given keys until the next cycle.
+
+Formally, temporal propagators are keylist options (except \index{delay n}, which is a style), so
+augmented assignments are possible (\S\ref{sec:option-setting}).
+
+All temporal propagators can be nested without limit.
+
+\begin{advise}
+\item A note on typos.
+
+ By default, all keys unknown to \foRest; are appended to keylist option \index{node options} The
+ value of \index{node options} is fed to \TikZ; when typesetting a node, so any typos are caught by
+ \TikZ;. However, as nodes are normally typeset in stage \index{typeset nodes stage}, any typos in
+ keys temporally propagated past that stage will not be noticed, simply because noone will use the
+ value of \index{node options} where they end up (the exception being nodes which are explicitely
+ retypeset by the user using \index{typeset node}).
+
+ To sum up, typos in any keys temporally propagated by \index{before packing}, \index{before
+ packing node}, \index{after packing node}, \index{before computing xy} and \index{before drawing
+ tree} will be silently ignored. This is probably not what you want, so double-check everything
+ you write there.
+
+ Using \index{unknown to}|=|\index{unknown key error}, it is possible to change the default
+ behaviour. You will catch all typos if you append the command to \index{pack stage}, as shown
+ below. This can be done either in the tree or by \index{forestset}.
+
+\begin{lstlisting}
+ typeset nodes stage/.append style={unknown to=unknown key error}
+\end{lstlisting}
+
+ Of course, this makes it impossible to write simply
+ |before_drawing_tree={inner_sep=5pt,_typeset_node}|. Any |tikz|'s options must be given
+ explicitely via \index{node options}:
+ |before_drawing_tree={node_options={inner_sep=5pt},_typeset_node}|.
+\end{advise}
+
+\begin{syntax}
+\indexitem{propagator>delay}|=|\meta{keylist} Defers the processing of the \meta{keylist} until the next
+ cycle.
+
+ Internally, |delay| is a keylist option, so augmented operators of the \index{keylist} type can be
+ used.
+
+ To check whether any keys were delayed, use conditional \index{if have delayed}.
+\indexitem{propagator>delay n}|=|\meta{integer}\meta{keylist} Defers the processing of the
+ \meta{keylist} for $n$ cycles. $n$ may be $0$, and it may be given as a |pgfmath| expression.
+
+\indexitem{propagator>given options}
+
+ When \index{style>stages} processing starts, this list holds the keys given by the user in the
+ bracket representation.
+
+\indexitem{propagator>before typesetting nodes}|=|\meta{keylist} Defers the processing of the
+ \meta{keylist} to until just before the nodes are typeset.
+
+\indexitem{propagator>before packing}|=|\meta{keylist}
+
+\indexitem{propagator>before packing node}|=|\meta{keylist}
+
+ Defers the processing of the \meta{keylist} given to the node to until just before/after the
+ subtree of \emph{this specific node} is packed. Even before packing node, the (subtrees of the)
+ children of the node have already been packed.\footnote{\FoRest; employs two variants of the
+ packing algorithm: the faster one is used for (parts of) trees with uniform growth, i.e.\
+ subtrees where \index{grow} does not change; the slower, generic variant is used in where this
+ is not the case. Now, the fast method works by dealing with l and s dimension separately, and
+ it is able to do this for the entire (sub)tree, without needing to invoke the packing method for
+ its constituents. The consequence is that there is no place where \index{before packing node}
+ could be called meaningfully, as the node's constituents are not packed individually, ``just
+ before packing the current node'' is the same as ``just before packing the tree'', and for many
+ nodes packing is not called anyway in the fast method. As the rationale behind \index{before
+ packing node} is to be able to adjust the options of the subtree based on the information
+ gained by packing its constituents, specifying \index{before packing node} automatically
+ switches to the generic method.} \indexitem{propagator>after packing node}|=|\meta{keylist} Defers
+ the processing of the \meta{keylist} given to the node to until just after \emph{this specific
+ node} is packed.
+
+\begin{forestexample}[index={after packing node,no edge,calign,value of=calign>first,option>l,l sep,content format,content,if option,n children,pgfmath,option>s,max x,min x,for step,step>children,wrap pgfmath arg,typeset node,dimen+=s}]
+ \forestset{box/.style={
+ draw, no edge, l=0, l sep=1.5ex,
+ calign=first, anchor=base west,
+ content format={\strut\forestoption{content}},
+ if n children=0{}{
+ ~after packing node~={
+ minimum width/.pgfmath=
+ {s("!l")+max_x("!l")-s("!1")-min_x("!1")},
+ for children/.wrap pgfmath arg={s+={##1}}{0},
+ typeset node}}}}
+ \begin{forest} for tree={box} [/
+ [home[saso[Download][TeX]][alja][joe]]
+ [usr[bin][share]]]
+ \end{forest}
+\end{forestexample}
+
+ \begin{advise}
+ \item Remember to typeset or pack the node using \index{pack'} if you have changed options
+ influencing the typesetting or packing process.
+ \end{advise}
+
+\indexitem{propagator>before computing xy}|=|\meta{keylist} Defers the processing of the
+ \meta{keylist} to until just before the absolute positions of the nodes are computed.
+\indexitem{propagator>before drawing tree}|=|\meta{keylist} Defers the processing of the
+ \meta{keylist} to until just before the tree is drawn.
+\end{syntax}
+
+
+\subsubsection{Drawing the tree}
+\label{sec:draw-tree}
+
+This section provides a detailed description of how \index{draw tree} and friends draw the tree.
+
+First, here's the default course of events. \index{draw tree} is called from style \index{draw tree
+ stage} in the context of the formal root node. It does not draw the tree directly, but rather
+produces \TikZ; code that actually does the drawing. The tree-drawing instructions are enclosed in
+a |tikzpicture| environment and come in three parts: the (non-phantom) nodes are drawn first,
+followed by edges between the drawn nodes and finally the custom \TikZ; code (of all, including
+phantom nodes). Each of those is drawn for the entire (sub)tree of the current node, in recursive,
+depth-first parent-first first-child-first order.
+
+Most parts of the tree drawing procedure are customizable. Zooming in from the invocation of
+\index{draw tree} to the keys that produce the drawing code, the customization options are as
+follows.
+
+There are two ways the invocation of \index{draw tree} can differ from the default. First,
+\index{draw tree} can be called within the context of any node. As a first approximation, that node
+will become the root of the tree that is being drawn; for the whole truth, see \index{draw tree
+ method}. Second, \index{draw tree} can be called not only at \index{draw tree stage}, but any
+time after the nodes to be drawn have been typeset (see \index{typeset nodes stage}) and their
+absolute coordinates (\index{option>x} and \index{option>y}) computed (see \index{compute xy stage}).
+
+
+\begin{syntax}
+\indexitem(\begin{tikzpicture}){node key>begin draw}|/.code=|\meta{toks: \TeX\ code} \vspace{-\parskip}
+\indexitem(\end{tikzpicture}){node key>end draw}|/.code=|\meta{toks: \TeX\ code}
+
+The code produced by \index{draw tree} is put in the environment specified by \keyname{begin
+draw} and \keyname{end draw}. Thus, it is this environment, normally a |tikzpicture|, that does
+the actual drawing.
+
+A common use of these keys might be to enclose the |tikzpicture| environment in a |center|
+environment, thereby automatically centering all trees; or, to provide the \TikZ; code to execute
+at the beginning and/or end of the picture.
+
+Note that \keyname{begin draw} and \keyname{end draw} are \emph{not} node options: they are
+|\pgfkeys|' code-storing keys \citep[\S55.4.3--4]{tikzpgf2.10}.
+
+\end{syntax}
+
+Repeating from (\S\ref{ref:stages}), there are two variants of \index{draw tree}, which differ in
+how they use the node boxes created by \index{typeset nodes}: \index{draw tree} includes them using
+\cmdname{box}, so they are gone; \index{draw tree'} uses \cmdname{copy}, so they are preserved.
+Next, setting \index{draw tree box} will cause the tree to be drawn in the given \TeX\ box.
+
+
+\begin{syntax}
+
+ \indexitem{style>draw tree method}
+
+ This is the heart of the tree-drawing procedure: it determines which parts of the tree are drawn
+ and in what order. What this style does by default was already described above, but is actually
+ best seen from the definition itself:
+
+\lstinputregion{forest.dtx}{draw_tree_method}
+
+This style may be modified by the user, but it is and should be invoked only within \index{draw
+ tree}, by the package: \emph{do not execute this style directly!}
+
+The nodewalks occurring in the default definition of this style are, with the exception of
+\index{processing order}, not used anywhere else in the package.
+
+ \indexitem{nodewalk style>draw tree nodes processing order}
+ \itemnosep
+ \indexitem{nodewalk style>draw tree edges processing order}
+ \itemnosep
+ \indexitem{nodewalk style>draw tree tikz processing order}
+
+ For each of these nodewalk styles the following holds. If it is defined, it determines which nodes
+ / edges / pieces of \index{tikz} code are drawn and in which order. If any of these styles is not
+ defined, its function is taken over by \index{draw tree processing order}. By default, none of
+ them are defined.
+
+ \indexitem{nodewalk style>draw tree processing order}
+
+ If this nodewalk is defined, it functions as a fallback for node-, edge- and tikz-code-specific
+ nodewalks. If it is not defined (the default situation), it has its own fallback:
+ \index{processing order} (which defaults to \index{tree}).
+
+\indexitem{node key>draw tree node}
+\itemnosep
+\indexitem{node key>draw tree node'}
+
+Draws the current node at location specified by \index{option>x} and \index{option>y}. The |'|
+variant draws the node even if it's \index{phantom}.
+
+These keys should only be used only within the definition of \index{draw tree method}.
+
+\indexitem{conditional>if node drawn}|=|\meta{nodewalk}\meta{true keylist}\meta{false keylist}
+
+Execute \meta{true keylist} if the node at the end of \meta{nodewalk} was already drawn in the
+current invocation of \index{draw tree}; otherwise, execute \meta{false keylist}.
+
+
+\indexitem{node key>draw tree edge}
+\itemnosep
+\indexitem{node key>draw tree edge'}
+
+Draws the edge from the current node to its parent, using the information in \index{edge path} and
+\index{edge}.
+
+The variant without |'| variant tries to be smart: it draws the edge only if both the current node
+and its parent have been drawn in the current invocation of \index{draw tree}. (This prevents
+drawing the edge from the root node and edges from or to phantom nodes.) The |'| variant is dumb.
+
+These keys should only be used only within the definition of \index{draw tree method}.
+
+\indexitem(draw tree tikz'){style>draw tree tikz}
+\itemnosep
+\indexitem{node key>draw tree tikz'}
+
+Executes the custom code stored in option \index{tikz} of the current node.
+
+By default, both keys execute the code without performing any checks. Specifically, \index{tikz}
+code of phantom nodes is executed. To change this behaviour easily, the user can redefine
+\index{draw tree tikz}, which is a style; probably, the definition will employ \index{draw tree
+ tikz'}. For example, to execute \index{tikz} code only if the node is not \index{phantom}, write
+
+\begin{lstlisting}
+ draw tree tikz/.style={if phantom={draw tree tikz'}{}}
+\end{lstlisting}
+
+These keys should only be used only within the definition of \index{draw tree method}.
+
+\end{syntax}
+
+
+
+\subsection{Node keys}
+\label{ref:node-keys}
+
+\FoRest; is mostly controlled using \PGF;'s key management utility |pgfkeys|
+\citep[\S55]{tikzpgf2.10}. Most of the keys can be given next to the content in the bracket
+representation of a tree (\S\ref{ref:bracket}): we call these \emph{node keys}. Some keys,
+notably \emph{nodewalk steps} (\S\ref{ref:nodewalks}), must be used as arguments of specific
+commands.
+
+Most node keys perform some operation on the \emph{current node}. When the keylist given after the
+content of a node is processed, the current node is set to that node. However, the current node can
+be temporarily changed, for example by spatial propagators (\S\ref{ref:spatial-propagators}) or,
+more genarally, nodewalks (\S\ref{ref:nodewalks}).
+
+The most common function that node keys perform is to set or modify an \emph{option} of the current
+node (\S\ref{sec:options-and-registers}), usually to determine the appearance or position of the
+node and its edge (\S\ref{sec:formatting-tree}), but there are also several kinds of more exotic
+keys like spatial (\S\ref{ref:spatial-propagators}) propagators, which temporarily change the
+current node, temporal (\S\ref{ref:temporal-propagators}) propagators, which delay the processing of
+the keylist until some other stage in the workflow, keys that dynamically create and move nodes
+(\S\ref{ref:dynamic}), keys that control the way \foRest; processes the tree (\S\ref{ref:stages})
+etc. Finally, users can also define their own keys, either by defining |pgfkeys| styles\footnote{%
+ Styles are a feature of the \keyname{pgfkeys} package. They are named keylists, whose usage
+ ranges from mere abbreviations through templates to devices implementing recursion. To define a
+ style, use \PGF;'s handler \keyname{.style} \citep[\S55.4.4]{tikzpgf2.10}: \meta{style
+ name}\keyname{/.style=}\meta{keylist}.} \citep[\S55.4.4]{tikzpgf2.10} or using \foRest;'s option
+declaration mechanism (\S\ref{sec:option-declaring}).
+
+\begin{advise}
+\item The style definitions and option declarations given among the other keys in the bracket
+ specification are local to the current tree (but note that \foRest;'s keylist processing,
+ including temporal and spatial propagation, introduces no groups). To define globally accessible
+ styles and options (well, they are always local to the current \TeX\ group), use
+ macro \cmdname{forestset} outside the \index{forest} environment, e.g.\ in the preamble of the
+ document. (Although \index{forestset}\meta{keylist} is currently equivalent to
+ \cmdname{pgfkeys}\texttt{\{/forest,}\meta{keylist}\texttt{\}}, don't rely on this as it will
+ change in some (near) future version of the package, as there is a plan to introduce namespaces
+ \dots)
+\end{advise}
+
+By default, unknown keys are assumed to be \TikZ; keys and are forwarded to \index{node options}.
+This behaviour can be changed using \index{unknown to}.
+
+The following subsections list the node keys which are not described elsewhere (see above): spatial
+propagators (\S\ref{ref:spatial-propagators}) and general-purpose node keys, i.e.\ those which don't
+deal with tree formatting (\S\ref{sec:node-keys-various}).
+
+
+\subsubsection{Spatial propagators}
+\label{ref:spatial-propagators}
+
+Spatial propagators pass the given \meta{keylist} to other node(s) in the tree.
+
+Spatial propagation does not change the current node: after visiting the nodes the keys are
+propagated to, a spatial propagator (silently, using a so-called fake step) returns to the origin of
+the embedded nodewalk.
+
+\FoRest; provides many spatial propagators. Almost all of them are built from long-form nodewalk
+steps using prefix \index{for step}. This is why the list below is so short: it only documents this
+prefix and the exceptions. For the list of nodewalk steps, see \S\ref{ref:nodewalks}, in particular
+\S\ref{ref:single-step-keys} for single-step keys and \S\ref{ref:multi-step-keys} for multi-step
+keys.
+
+
+\begin{syntax}
+\indexitem{word prefix=step>propagator>for=\meta{step}}|=|\meta{arg$_1$}|...|\meta{arg$_n$}\meta{keylist: every-step}
+\itemnosep
+\indexitem[not short]{word prefix=step>propagator>for=\index{nodewalk}}|=|\meta{nodewalk}\meta{keylist: every-step}
+\itemnosep
+\indexitem[not short]{word prefix=step>propagator>for=\index{nodewalk key>Nodewalk}}|=|\meta{keylist: config}\meta{nodewalk}\meta{keylist: every-step}
+
+ Walks the (single- or multi-step) \meta{step} from the current node and executes the given
+ \meta{keylist} at every visited node. The current node remains unchanged.
+
+ \meta{step} must be a long-form nodewalk step. If it has any arguments, they
+ (\meta{arg$_1$}|...|\meta{arg$_n$}) should be given before every-step \meta{keylist}, with two
+ exceptions: embedded nodewalk steps (\index{step>Nodewalk} and \index{nodewalk}) already require
+ the \meta{keylist: every-step} argument, so it should be omitted, as it makes no sense to provide
+ the every-step keylist twice.
+
+ Examples:
+ \begin{itemize}
+ \item |for_parent={l_sep+=3mm}|
+ \item |for_n=2{circle,draw}|
+ \item |for_nodewalk={uu2}{blue}|
+ \item |for_tree={s_sep+=1em}|
+ \end{itemize}
+
+\long\def\printbigbadforlist#1{%
+ {%
+ \tikzexternaldisable
+ \bracketset{action character=!}%
+ \begin{forest}(stages={
+ process keylist=given options,
+ for root'={
+ sort by={>O+t+c{content}},
+ %sort=children,
+ temptoksa={},
+ for sort={children}{
+ TeX and memoize/.process=ROw2{temptoksa}{content}{####1\texttt{for\space}\index{step>####2}},
+ temptoksa={,\space},
+ },
+ }
+ })
+ [!\bigbadforlist[nodewalk][nodewalk'][Nodewalk]]
+ \end{forest}%
+ }%
+}%
+\makeatletter
+\forest@memoize\printbigbadforlist
+\makeatother
+
+{\tolerance=10000
+Here's the big list of all spatial propagators built with prefix |for|:
+% to update,
+% - uncomment \appto\bigbadforlist{[#1]} in define long step in forest.dtx
+% - delete line \forest@memo@load {forest@memo@\printbigbadforlist ... in forest-doc.memo
+\printbigbadforlist{}.
+For details on nodewalk steps, see \S\ref{ref:nodewalks}.
+
+}
+
+\indexitem{propagator>for tree'}|=|\meta{keylist 1}\meta{keylist 2} A ``combination'' of
+ \index{for step=\index{tree children-first}} and \index{for step=\index{tree}}.
+
+ Passes the keylists to the current node and its the descendants. At each node, the \meta{keylist
+ 1} is processed first; then, children are processed recursively; finally, \meta{keylist 2}
+ is processed.
+
+ For an example, see the definition of \index{draw brackets} from \reflibrary{linguistics}.
+
+\indexitem{propagator>for 1}, \dots\indexdef[not print]{propagator>for 2}\indexdef[not print]{propagator>for 3}\indexdef[not print]{propagator>for 4}\indexdef[not print]{propagator>for 5}\indexdef[not print]{propagator>for 6}\indexdef[not print]{propagator>for 7}\indexdef[not print]{propagator>for 8}, \indexdef{propagator>for 9}|=|\meta{keylist}
+ \itemnosep
+\indexitem{propagator>for -1}, \dots\indexdef[not print]{propagator>for -2}\indexdef[not print]{propagator>for -3}\indexdef[not print]{propagator>for -4}\indexdef[not print]{propagator>for -5}\indexdef[not print]{propagator>for -6}\indexdef[not print]{propagator>for -7}\indexdef[not print]{propagator>for -8}, \indexdef{propagator>for -9}|=|\meta{keylist}
+
+ Although \index{for step} normally cannot precede short forms of steps, an exception is made
+ for \index{ss 1}\index[not print]{ss 2,ss 3,ss 4,ss 5,ss 6,ss 7,ss 8}, \dots, \index{ss 9}. (These keys will work even if the short steps are redefined.)
+
+ |for |$n$ passes the \meta{keylist} to the $n$th child of the current node. |for -|$n$ starts counting at the last child.
+\indexitem{node key>Nodewalk}|=|\meta{keylist: config}\meta{nodewalk}\meta{keylist: every-step}
+
+Configures and executes the \meta{nodewalk}. This key is a nodekey-space copy of nodewalk step
+\index{step>Nodewalk}.
+
+ \begin{advise}
+ \item Use this key carefully as it can change the current node!
+ \item The envisioned purpose of this key is to change the current node within the every-step
+ keylist of (an outer) nodewalk, where only node keys are accepted. The config defaults
+ (independent every-step, shared history) are set to facilitate that purpose. But it can also be
+ used as a simple node key, of course.
+ \end{advise}
+
+\indexitem{node key>node walk}|=|\meta{node walk} \textbf{Deprecated!!!} Requires
+ \index{compat}|=1.0-nodewalk|. Please use \index{for step=\index{nodewalk}} in new code. From the
+ old documentation:
+
+ \begin{quote}
+ This is the most general way to use a \meta{node walk}.
+
+ Before starting the \meta{node walk}, key \indexdef{node key>node walk/before walk} is processed.
+ Then, the \meta{step}s composing the \meta{node walk} are processed: making a step (normally)
+ changes the current node. After every step, key \indexdef{node key>node walk/every step} is
+ processed. After the walk, key \indexdef{node key>node walk/after walk} is processed.
+
+ \keyname{node walk/before walk}, \keyname{node walk/every step} and \keyname{node walk/after
+ walk} are processed with \keyname{/forest} as the default path: thus, \foRest;'s node keys can
+ be used normally inside their definitions.
+
+ \begin{advise}
+ \item Node walks can be tail-recursive, i.e.\ you can call another node walk from \keyname{node
+ walk/after walk} --- embedding another node walk in \keyname{node walk/before walk} or
+ \keyname{node walk/every step} will probably fail, because the three node walk styles are not
+ saved and restored (a node walk doesn't create a \TeX\ group).
+ \item \keyname{every step} and \keyname{after walk} can be redefined even during the walk.
+ Obviously, redefining \keyname{before walk} during the walk has no effect (in the current
+ walk).
+ \end{advise}
+ \end{quote}
+\end{syntax}
+
+
+\subsubsection{Various}
+\label{sec:node-keys-various}
+
+\begin{syntax}
+
+\indexitem{style>afterthought}|=|\meta{toks} Provides the afterthought explicitely.
+
+ This key is normally not used by the end-user, but rather called by the bracket parser. By
+ default, this key is a style defined by |afterthought/.style={tikz+={#1}}|: afterthoughts are
+ interpreted as (cumulative) \TikZ; code. If you'd like to use afterthoughts for some other
+ purpose, redefine this style --- this will take effect even if you do it in the tree preamble.
+
+\indexitem{node key>also}|=|\meta{keylist} Execute the keys in the given \meta{keylist}.
+
+If we are currently processing node keys, \meta{keylist} should contain node keys. If we are
+in a nodewalk, \meta{keylist} should (or rather, may also) contain nodewalk keys.
+
+For example, to execute, during a nodewalk, a nodewalk keylist stored in register |tempkeylista|,
+write |also/.register=|\indexex{tempkeylista}. Note that no embedded nodewalk will be introduced.
+
+\indexitem{node key>autoforward}|=|\meta{option}\meta{keylist}, \indexdef{node key>autoforward register}|=|\meta{register}\meta{keylist}
+\itemnosep
+\indexitem{node key>autoforward'}|=|\meta{option}\meta{keylist}, \indexdef{node key>autoforward register'}|=|\meta{register}\meta{keylist}
+
+Whenever the value of an autoforwarded option or register is given or changed (via an augmented
+assignment), \meta{option}|=|\meta{new value} or \meta{register}|=|\meta{new value} is appended to
+\meta{keylist}. This can be used to ``intercept and remember'' \TikZ; options, like \index{option>anchor}
+and \index{rotate}.
+
+ The |autoforward'| variant keeps only a single instance of \meta{option} in \meta{keylist}.
+
+ If you ever need to use the non-forwarded version of the key, prefix it with word |autoforwarded|,
+ e.g.\ |autoforwarded_rotate|. Autoforwarding is limited to the current \TeX\ group.
+
+\indexitem{node key>Autoforward}|=|\meta{option}\meta{style definition}, \indexdef{node key>Autoforward register}|=|\meta{register}\meta{style definition}
+
+This is a more generic variant of autoforwarding. After the value of an option or register
+autoforwarded with this key is changed, the style defined by \meta{style definition} is called with
+the new option/register value as its argument.
+
+\begin{forestexample}[index={Autoforward,content,node options}]
+ \forestset{~Autoforward~={content}{node options={#1}}}
+ \begin{forest}
+ [red[blue][green]]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{node key>unautoforward}|=|\meta{option or register} Undoes the autoforwarding of the
+option or register made by any of the autoforwarding keys.
+
+\indexitem{node key>content to}|=|\meta{key} When parsing the bracket representation of the tree,
+store the given content using \meta{key}|=|\meta{content}.
+
+\indexitem{node key>copy command key}|=|\meta{pgfkey: source}\meta{pgfkey: destination}
+
+ Copies the |pgf| key in a way that |.add code| and |.add style| handlers still work.
+
+\indexitem({{{{{}}}}}){register>default preamble}|=|\meta{keylist}
+ \itemnosep
+\indexitem{register>preamble}|=|\meta{keylist}
+
+ These registers hold the content of the default preamble and the preamble of the current tree.
+
+ |preamble| is set by the bracket parser. Set |default preamble| outside the \index{forest}
+ environment using \index{forestset}.
+
+ As |default preamble| and |preamble| are not styles but keylist registers, the |#| characters do
+ not need to be doubled: you can freely copy and paste your keylists between the node options of
+ the root node, the preamble and the default preamble. The only difference will be the order of
+ execution: first default preamble, then preamble, and finally the root node's options.
+
+\indexitem{node key>save and restore register}|=|\meta{register}\meta{keylist}
+
+Restores the current value of \meta{register} after executing the \meta{keylist}.
+
+\indexitem{node key>split}|=|\meta{toks}\meta{separator}\meta{keylist}
+ \itemnosep
+\indexitem{node key>split option}|=|\meta{option}\meta{separator}\meta{keylist}
+ \itemnosep
+\indexitem{node key>split register}|=|\meta{register}\meta{separator}\meta{keylist}
+
+Split \meta{toks} or the value of \meta{option} or \meta{register} at occurrences of
+\meta{separator} (which must be a single token), and process the keys in \meta{keylist} with the
+pieces of the split token list as arguments, in the order given.
+
+\meta{option} can be either a simple \meta{option name} or a \meta{relative node name}\texttt{.}\meta{option name}.
+
+ The difference in the number of split values and given keys is handled gracefully. If there is
+ not enough values, the superfluous keys are not processed; if there are too many values, the last
+ key is called repeatedly.
+
+ The keys in \meta{keylist} can be any valid keys, including augmented assignments, non-current
+ option assignments, even \index{TeX} or user-defined styles. Actually, as |split| works by simply
+ appending |={|\meta{current value}|}| to the relevant given key, it is possible for the key to be
+ a (sub)keylist ending in a simple, non-valued key, like shown below.
+
+ \begin{advise}
+ \item Pay attention to |%| characters around the subkeylist. In order for it to actually function
+ as a sublist, its braces should be stripped, but this can only happen if no spaces surround it.
+ \end{advise}
+
+\begin{forestexample}[point=split option,index={delay,content,split option,process args},label=ex:split option]
+ \begin{forest}
+ [
+ {1,2,3,4}
+ [,delay={
+ ~split option~=
+ {!parent.content}
+ {,}
+ {
+ content',%
+ {content+={+},content+}%
+ },
+ tempcounta'/.process={O+n}{content},
+ content+={=},
+ content+/.register=tempcounta,
+ }
+ ]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{node key>TeX}|=|\meta{toks: \TeX\ code} The given code is executed immediately.
+
+ This can be used for e.g.\ enumerating nodes:
+\begin{forestexample}[point=TeX,index={TeX,delay,where option,tier,content,GP1},label=ex:enumerate]
+ \newcount\xcount
+ \begin{forest} GP1,
+ delay={TeX={\xcount=0},
+ where tier={x}{TeX={\advance\xcount1},
+ content/.expanded={##1$_{\the\xcount}$}}{}}
+ [
+ [O[x[f]]]
+ [R[N[x[o]]]]
+ [O[x[r]]]
+ [R[N[x[e]]][x[s]]]
+ [O[x[t]]]
+ [R[N[x]]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{node key>TeX'}|=|\meta{toks: \TeX\ code} This key is a combination of keys \index{TeX}
+and \index{TeX''}: the given code is both executed and externalized.
+
+\indexitem{node key>TeX''}|=|\meta{toks: \TeX\ code} The given code is externalized, i.e.\ it will be
+executed when the externalized images are loaded.
+
+The image-loading and \keyname{TeX'(')} produced code are intertwined.
+
+\indexitem{node key>typeout}|=|\meta{toks} A \foRest; version of \LaTeX\ macro |\typeout|. Useful
+for debugging, trust me on this one.
+
+\indexitem(node options){node key>unknown to}|=|\meta{key} Forward unknown keys to \meta{key}.
+
+\begin{advise}
+\item Do \emph{not} use handler |.unknown| to deal with unknown keys, as it is used internally by
+\foRest;, and is set up to make it possible to set options of non-current nodes (see
+\S\ref{sec:option-setting}).
+\end{advise}
+
+\indexitem{node key>unknown key error}|=|\meta{keyval} Produces an error.
+
+Write \index{unknown to}|=unknown key error| to produce an error when a key unknown to \foRest; is
+used.
+
+\end{syntax}
+
+
+
+\subsection{Options and registers}
+\label{sec:options-and-registers}
+
+\FoRest; introduces two types of data storage: \emph{node options} (or just \emph{options} for
+short) and \emph{registers}.
+
+Options store data related to particular nodes. Each node has its own set of option values, i.e.\
+the value of an option at some node is independent of its value at other nodes: in particular,
+setting an option of a node does \emph{not} set this option for the node's descendants. Register
+values are not associated to nodes.
+
+Note that option and register keys share the same ``namespace'' (|pgfkeys| path and |pgfmath|
+function names) so it is not possible to have an option and a register of the same name!
+
+\subsubsection{Setting}
+\label{sec:option-setting}
+
+The simplest way to set the value of an option or a register is to use the key of the same name.
+\begin{syntax}
+ \indexitem[index key={@@@opt},form={}]{prefix>assignment>current node=\meta{option}}|=|\meta{value}
+ Sets the value of \meta{option} of the current node to \meta{value}.
+
+ Note that option types \index{keylist} and \index{autowrapped toks} redefine this basic key.
+
+ \indexitem[index key={@@@reg},form={}]{prefix>assignment>current node=\meta{register}}|=|\meta{value}
+ Sets the value of \meta{register} to \meta{value}.
+
+ Note that register types \index{keylist} and \index{autowrapped toks} redefine this basic key.
+\end{syntax}
+
+Options can also be set for the non-current node:
+\begin{syntax}
+ % \indexitem[index key={@@@.},form={.},+print format={+result={\index(not print){relative node name}\index(not index)[+print format=definition]{relative node name}}},+index format={+result={\meta{relative node name}}}]{prefix>assignment>relative node=\meta{option}}|=|\meta{value}
+ \indexitem[index key={@@@.},form={.},+print format={+result={\index{relative node name}}},+index format={+result={\meta{relative node name}}}]{prefix>assignment>relative node=\meta{option}}|=|\meta{value}
+
+ Sets the value of \meta{option} of the node specified by \meta{relative node name} to \meta{value}.
+
+ Notes: \begin{enumerate*}[(i)]
+ \item\emph{\meta{value} is evaluated in the context of the current node.}
+ \item In general, the resolution of \meta{relative node name} depends on the
+ current node; see \S\ref{ref:relative-node-names}.
+ \item \meta{option} can also be an ``augmented assignment operator'' (see below) or, indeed, any
+ node key.
+ \end{enumerate*}
+\end{syntax}
+
+Additional keys for setting and modifying the value of an option or a register exist, depending on
+its data type. Informally, you can think of these keys as \emph{augmented operators} known from
+various programming languages.
+
+\begin{syntax}
+\indexitem{type>toks} contains \TeX's \meta{balanced text} \citep[275]{texbook}.
+
+ A toks \meta{option} additionally defines the following keys:
+ \begin{syntax}
+ \indexitem{suffix>augmented assignment=toks>+=\meta{option}}|=|\meta{toks} appends the given \meta{toks} to the
+ current value of the option.
+
+ \indexitem{prefix>augmented assignment=toks>+=\meta{option}}|=|\meta{toks} prepends the given \meta{toks} to the
+ current value of the option.
+
+ % \item \index{if in toks option=\meta{toks option}}| =|\meta{toks}\meta{true
+ % keylist}\meta{false keylist} checks if \meta{toks} occurs in the option value; if it does,
+ % \meta{true keylist} are executed, otherwise \meta{false keylist}.
+
+ % \item \index{where in toks option=\meta{toks option}}| =|\meta{toks}\meta{true
+ % keylist}\meta{false keylist} is a style equivalent to \index{for step=\index{tree}}|={|\keyname{if in }\meta{option}=\meta{toks}\meta{true keylist}\meta{false keylist}|}|: for every node in
+ % the subtree rooted in the current node, \keyname{if in }\meta{option} is executed in
+ % the context of that node.
+ \end{syntax}
+
+\indexitem{type>autowrapped toks} is a subtype of \index{toks} and contains \TeX's \meta{balanced
+text} \citep[275]{texbook}.
+
+ {\rstyle\meta{option}}|=|\meta{toks} of an autowrapped \meta{option} is redefined to
+ \meta{option}|/|\index{wrap value}|=|\meta{toks} of a normal \meta{toks} option.
+
+ Keyvals \indexdef{suffix>augmented assignment=autowrapped toks>+=\meta{option}}|=|\meta{toks} and
+ \indexdef{prefix>augmented assignment=autowrapped toks>+=\meta{option}}|=|\meta{toks} are redefined to
+ \index{toks+=\meta{option}}|/|\index{wrap value}|=|\meta{toks} and
+ \index{+toks=\meta{option}}|/|\index{wrap value}|=|\meta{toks}, respectively. The normal toks
+ behaviour can be accessed via keys \indexdef{suffix>augmented assignment=autowrapped toks>'=\meta{option}},
+ \indexdef{suffix>augmented assignment=autowrapped toks>+'=\meta{option}}, and
+ \indexdef[set={print format={result/.expanded=+\forestoption{argument}',pgfkey},index form=+\meta{autowrapped toks option}',index format=pgfkey,index key=+'}]{augmented assignment>+autowrapped toks'=\meta{option}}.
+
+\indexitem{type>keylist} is a subtype of \index{toks} and contains a comma-separated list of
+ \meta{key}[|=|\meta{value}] pairs.
+
+ Augmented assignment operators \indexdef{suffix>augmented assignment=keylist>+=\meta{option}} and
+ \indexdef{prefix>augmented assignment=keylist>+=\meta{option}} automatically insert a comma
+ before/after the appended/prepended material.
+
+ Augmented assignment operator \indexdef{suffix>augmented assignment=keylist>-=\meta{option}}|=|\meta{keylist} deletes the keys
+ from keylist \meta{option}. \meta{keylist} specifies which keys to delete. If a key is given no
+ value, all occurrences of that key will be deleted. If a key is given a value, only occurrences
+ with that value will be deleted. To delete occurrences without value, use special value
+ \indexdef{macro>forestnovalue}. (Note: if you include a key in \meta{keylist} more than once,
+ only the last occurrence counts.)
+
+ {\rstyle\meta{option}}|=|\meta{keylist} of a keylist option is redefined to
+ \meta{option}\keyname{+}|=|\meta{keylist}. In other words, keylists behave additively by
+ default. The rationale is that one usually wants to add keys to a keylist. The usual,
+ non-additive behaviour can be accessed by \indexdef{suffix>augmented assignment=keylist>'=\meta{option}}|=|\meta{keylist}.
+
+ Manipulating the keylist option using augmented assignments might have the side-effect of adding
+ an empty key to the list.
+
+\indexitem{type>dimen} contains a dimension.
+
+ The value given to a dimension option is automatically evaluated by |pgfmath|. In other words,
+ {\rstyle\meta{option}}|=|\meta{value} is implicitly understood as
+ \meta{option}|/|\index{pgfmath}|=|\meta{value}.
+
+ For a \meta{dimen} option \meta{option}, the following additional keys (``augmented
+ assignments'') are defined:
+ \begin{syntax}
+ \indexitem{suffix>augmented assignment=dimen>+=\meta{option}}|=|\meta{value} is equivalent to \meta{option}|=|\meta{option}|()+|\meta{value}
+ \indexitem{suffix>augmented assignment=dimen>-=\meta{option}}|=|\meta{value} is equivalent to \meta{option}|=|\meta{option}|()-|\meta{value}
+ \indexitem{suffix>augmented assignment=dimen>*=\meta{option}}|=|\meta{value} is equivalent to \meta{option}|=|\meta{option}|()*|\meta{value}
+ \indexitem{suffix>augmented assignment=dimen>:=\meta{option}}|=|\meta{value} is equivalent to \meta{option}|=|\meta{option}|()/|\meta{value}
+ \end{syntax}
+
+ The evaluation of \meta{pgfmath} can be quite slow. There are two tricks to speed things up
+ \emph{if} the \meta{pgfmath} expression is simple, i.e.\ just a \TeX\ \meta{dimen}:
+ \begin{enumerate}
+ \item |pgfmath| evaluation of simple values can be sped up by prepending |+| to the value
+ \citep[\S62.1]{tikzpgf2.10};
+ \item use the key \indexdef{suffix>augmented assignment=dimen>'=\meta{option}}|=|\meta{value} to invoke a normal \TeX\ assignment.
+ \end{enumerate}
+
+ The two above-mentioned speed-up tricks work for the augmented assignments as well. The keys for
+ the second, \TeX-only trick are: \indexdef{suffix>augmented assignment=dimen>'+}, \indexdef{suffix>augmented assignment=dimen>'-}, \indexdef{suffix>augmented assignment=dimen>'*}, \indexdef{suffix>augmented assignment=dimen>':} --- note that for the latter two,
+ the value should be an integer.
+
+\indexitem{type>count} contains an integer.
+
+ The additional keys and their behaviour are the same as for the \meta{dimen} options.%
+ \indexdef[not print]{suffix>augmented assignment=count>+}%
+ \indexdef[not print]{suffix>augmented assignment=count>-}%
+ \indexdef[not print]{suffix>augmented assignment=count>*}%
+ \indexdef[not print]{suffix>augmented assignment=count>:}%
+ \indexdef[not print]{suffix>augmented assignment=count>'}%
+ \indexdef[not print]{suffix>augmented assignment=count>'+}%
+ \indexdef[not print]{suffix>augmented assignment=count>'-}%
+ \indexdef[not print]{suffix>augmented assignment=count>'*}%
+ \indexdef[not print]{suffix>augmented assignment=count>':}%
+
+\indexitem{type>boolean} contains $0$ (false) or $1$ (true).
+
+ In the general case, the value given to a \meta{boolean} option is automatically
+ parsed by |pgfmath| (just as for \meta{count} and \meta{dimen}): if the computed value is
+ non-zero, $1$ is stored; otherwise, $0$ is stored. Note that |pgfmath| recognizes constants
+ |true| and |false|, so it is possible to write \meta{option}|=true| and
+ \meta{option}|=false|.
+
+ If key \meta{option} is given no argument, pgfmath evaluation does not apply and a true value is
+ set. To quickly set a false value, use key \indexdef{word prefix=boolean option>>not=\meta{option}} (with no arguments).
+\end{syntax}
+
+\subsubsection{Reading}
+\label{sec:option-reading}
+
+Option and register values can be accessed using the four macros listed below, handlers
+\index{handler>option} and \index{handler>register} (\S\ref{ref:handlers}) and |pgfmath| functions
+(\ref{ref:pgfmath}).
+
+\begin{syntax}
+ \indexitem{macro>forestoption}|{|\meta{option}|}|
+ \itemnosep
+ \indexitem{macro>foresteoption}|{|\meta{option}|}|
+ \itemnosep
+ \indexitem{macro>forestregister}|{|\meta{register}|}|
+ \itemnosep
+ \indexitem{macro>foresteregister}|{|\meta{register}|}|
+
+ These macros expand to the value of the given option or register. Note that
+ \index{macro>forestoption} and \index{macro>foresteoption} expand to the value of the given option
+ of the \emph{current node}; to access option values of a non-current node, use |pgfmath|
+ functions.
+
+ In the context of |\edef|, \cmdname{forestoption} and \cmdname{forestregister} expand precisely to
+ the token list of the option value, while \cmdname{foresteoption} and \cmdname{foresteregister}
+ fully expand the value.
+
+ \begin{advise}
+ \item These macros can be useful in \TeX\ code introduced by \index{TeX} or \PGF;'s handler
+ |.expanded| \citep[\S55.4.6]{tikzpgf2.10}.
+ \end{advise}
+\end{syntax}
+
+
+\subsubsection{Declaring}
+\label{sec:option-declaring}
+
+Using the following keys, users can also declare their own options and registers. The new options
+and registers will behave exactly like the predefined ones.
+
+Note that the declaration of an option must provide a default value, while the declaration of a
+register must not do that (registers are initialized to the empty string, |0pt| or |0|, as
+appropriate for the type). The default value of an option will be assigned to any newly created
+nodes; the existing nodes are not affected.
+
+\begin{syntax}
+ \indexitem{node key>declare toks}|=|\meta{option name}\meta{default value}
+ Declares a \meta{toks} option.
+
+ \indexitem{node key>declare autowrapped toks}|=|\meta{option name}\meta{default value}
+ Declares an \meta{autowrapped toks} option.
+
+ \indexitem{node key>declare keylist}|=|\meta{option name}\meta{default value}
+ Declares a \meta{keylist} option.
+
+ \indexitem{node key>declare dimen}|=|\meta{option name}\meta{default value}
+ Declares a \meta{dimen} option. The default value is processed by \index{forestmath}.
+
+ \indexitem{node key>declare count}|=|\meta{option name}\meta{default value}
+ Declares a \meta{count} option. The default value is processed by \index{forestmath}.
+
+ \indexitem{node key>declare boolean}|=|\meta{option name}\meta{default value}
+ Declares a \meta{boolean} option. The default value is processed by \index{forestmath}.
+
+ \indexitem{node key>declare toks register}|=|\meta{register name}
+ Declares a \meta{toks} register.
+
+ \indexitem{node key>declare autowrapped toks register}|=|\meta{register name}
+ Declares an \meta{autowrapped toks} register.
+
+ \indexitem{node key>declare keylist register}|=|\meta{register name}
+ Declares a \meta{keylist} register.
+
+ \indexitem{node key>declare dimen register}|=|\meta{register name}
+ Declares a \meta{dimen} register.
+
+ \indexitem{node key>declare count register}|=|\meta{register name}
+ Declares a \meta{count} register.
+
+ \indexitem{node key>declare boolean register}|=|\meta{register name}
+ Declares a \meta{boolean} register.
+\end{syntax}
+
+Several scratch registers are predefined:
+\begin{syntax}
+ \indexitem{register>temptoksa}, \indexdef{register>temptoksb}, \indexdef{register>temptoksc}, \indexdef{register>temptoksd} Predefined \meta{toks} registers.
+
+ \indexitem{register>tempkeylista}, \indexdef{register>tempkeylistb}, \indexdef{register>tempkeylistc}, \indexdef{register>tempkeylistd} Predefined \meta{keylist} registers.
+
+ \indexitem{register>tempdima}, \indexdef{register>tempdimb}, \indexdef{register>tempdimc}, \indexdef{register>tempdimd}, \indexdef{register>tempdimx}, \indexdef{register>tempdimy}, \indexdef{register>tempdiml}, \indexdef{register>tempdims}, \indexdef{register>tempdimxa}, \indexdef{register>tempdimya}, \indexdef{register>tempdimla}, \indexdef{register>tempdimsa}, \indexdef{register>tempdimxb}, \indexdef{register>tempdimyb}, \indexdef{register>tempdimlb}, \indexdef{register>tempdimsb} Predefined \meta{dimen} registers.
+
+ \indexitem{register>tempcounta}, \indexdef{register>tempcountb}, \indexdef{register>tempcountc}, \indexdef{register>tempcountd} Predefined \meta{count} registers.
+
+ \indexitem{register>tempboola}, \indexdef{register>tempboolb}, \indexdef{register>tempboolc}, \indexdef{register>tempboold} Predefined \meta{boolean} registers.
+\end{syntax}
+
+
+
+\subsection{Formatting the tree}
+\label{sec:formatting-tree}
+
+
+\subsubsection{Node appearance}
+\label{ref:node-appearance}
+
+The following options apply at stage \index{typeset nodes}. Changing them
+afterwards has no effect in the normal course of events.
+
+\begin{syntax}
+\indexitem({{{{{}}}}}){option>align}|=|\index{value of=align>left}\OR\index{value of=align>center}\OR\index{value of=align>right}\OR\meta{toks: tabular header}
+
+ Creates a left/center/right-aligned multiline node, or a tabular node. In the
+ \index{content} option, the lines of the node should separated by |\\| and the columns (if
+ any) by |&|, as usual.
+
+ The vertical alignment of the multiline/tabular node can be specified by option \index{base}.
+
+\begin{forestexample}[index={l sep,align,base}]
+ \begin{forest} l sep+=2ex
+ [special value&actual value\\\hline
+ \indexdef{value of=align>left}&||\texttt{@\{\}l@\{\}}\\
+ \indexdef{value of=align>center}&||\texttt{@\{\}c@\{\}}\\
+ \indexdef{value of=align>right}&||\texttt{@\{\}r@\{\}}\\
+ ,~align~=ll,draw
+ [top base\\right aligned, ~align~=right,~base~=top]
+ [left aligned\\bottom base, ~align~=left,~base~=bottom]
+ ]
+ \end{forest}
+\end{forestexample}
+
+ Internally, setting this option has two effects:
+ \begin{enumerate}
+ \item The option value (a |tabular| environment header specification) is set. The special
+ values \keyname{left}, \keyname{center} and \keyname{right} invoke styles setting the actual
+ header to the value shown in the above example.
+ \begin{advise}
+ \item If you know that the \keyname{align} was set with a special value, you can easily check
+ the value using \index{if in toks option=\index{align}}.
+ \end{advise}
+ \item Option \index{content format} is set to the following value:
+ \begin{lstlisting}
+ \noexpand\begin{tabular}[\forestoption{base}]{\forestoption{align}}%
+ \forestoption{content}%
+ \noexpand\end{tabular}%
+ \end{lstlisting}
+ As you can see, it is this value that determines that options \keyname{base}, \keyname{align} and
+ \keyname{content} specify the vertical alignment, header and content of the table.
+ \end{enumerate}
+
+\indexitem(t){option>base}|=|\meta{toks: vertical alignment}
+
+This option controls the vertical alignment of multiline (and in general, \texttt{tabular}) nodes
+created with \index{align}. Its value becomes the optional argument to the \texttt{tabular}
+environment. Thus, sensible values are \indexdef{value of=base>t} (the top line of the table will
+be the baseline) and \indexdef{value of=base>b} (the bottom line of the table will be the baseline).
+Note that this will only have effect if the node is anchored on a baseline, like in the default
+case of \index{option>anchor}|=base|.
+
+For readability, you can use \indexdef{value of=base>top} and \indexdef{value of=base>bottom} instead
+of \keyname{t} and \keyname{b}. (\keyname{top} and \keyname{bottom} are still stored as
+\keyname{t} and \keyname{b}.)
+
+ \indexitem({{{{{}}}}}){option>content}|=|\meta{autowrapped toks} The content of the node.
+
+ Normally, the value of option \keyname{content} is given implicitely by virtue of the special
+ (initial) position of content in the bracket representation (see~\S\ref{ref:bracket}). However,
+ the option also be set explicitely, as any other option.
+
+\begin{forestexample}[index={for step,tree,if option,readonly option>n,readonly option>n'},point={content,delay},index={content,delay}]
+ \begin{forest}
+ delay={for tree={
+ if n=1{content=L}
+ {if n'=1{content=R}
+ {content=C}}}}
+ [[[][][]][[][][]]]
+ \end{forest}
+\end{forestexample}
+ Note that the execution of the \keyname{content} option should usually be delayed: otherwise, the
+ implicitely given content (in the example below, the empty string) will override the explicitely
+ given content.
+
+\begin{forestexample}[index={for step,tree,if option,readonly option>n,readonly option>n',content},point={content}]
+ \begin{forest}
+ for tree={
+ if n=1{content=L}
+ {if n'=1{content=R}
+ {content=C}}}
+ [[[][][]][[][][]]]
+ \end{forest}
+\end{forestexample}
+
+ \indexitem(\forestoption{content}){option>content format}|=|\meta{toks}
+
+ When typesetting the node under the default conditions (see option \index{node format}), the
+ value of this option is passed to the \TikZ; \texttt{node} operation as its \meta{text} argument
+ \citep[\S16.2]{tikzpgf2.10}. The default value of the option simply puts the content in the
+ node.
+
+ This is a fairly low level option, but sometimes you might still want to change its value. If
+ you do so, take care of what is expanded when. Most importantly, if you use a formatting
+ command such as |\textbf| in the default setting of \index{node format}, be sure to precede
+ it with |\noexpand|. For details, read the documentation of option \index{node format} and
+ macros \index{forestoption} and \index{foresteoption}; for an example, see option
+ \index{align}.
+
+\indexitem{node key>math content} Changes \index{content format} so that the content of the node
+ will be typeset in a math environment.
+
+\indexitem{node key>plain content} Resets \index{content format} to the default value.
+
+\indexitem{option>node format}|=|\meta{toks}
+ \hfill|\noexpand\node(\forestoption{name})|\\
+ \mbox{}\hfill|[\forestoption{node options}]{\foresteoption{content format}};|
+
+ The node is typeset by executing the expansion of this option's value in a |tikzpicture|
+ environment.
+
+ Important: the value of this option is first expanded using |\edef| and only then executed. Note
+ that in its default value, \index{content format} is fully expanded using
+ \index{foresteoption}: this is necessary for complex content formats, such as |tabular|
+ environments.
+
+ This is a low level option. Ideally, there should be no need to change its value. If you do,
+ note that the \TikZ; node you create should be named using the value of option \index{option>name};
+ otherwise, parent--child edges can't be drawn, see option \index{edge path}.
+
+\indexitem{node key>node format'}|=|\meta{toks}
+
+Sets \index{node format}, automatically wrapping the given \meta{toks} by
+|\noexpand\node(\forestoption{name})| and |;|. Only the node options and content must therefore be
+given.
+
+\indexitem(anchor=base){option>node options}|=|\meta{keylist}
+
+ When the node is being typeset under the default conditions (see option \index{node format}),
+ the content of this option is passed to \TikZ; as options to the
+ \TikZ; |node| operation \citep[\S16]{tikzpgf2.10}.
+
+ This option is rarely manipulated manually: almost all options unknown to \foRest; are
+ automatically appended to \keyname{node options}. Exceptions are (i) \index{label} and
+ \index{pin}, which require special attention in order to work; and (ii) \index{option>anchor},
+ which is saved in order to retain the information about the selected anchor.
+
+\begin{forestexample}[index={for step,descendants,option>anchor,option>child anchor,option>parent anchor,grow,l sep,tree,propagator>where,delay,content,node options,pgfmath}]
+ \begin{forest}
+ for descendants={anchor=east,child anchor=east},
+ grow=west,anchor=north,parent anchor=north,
+ l sep=1cm,
+ for tree={~fill=yellow~},where={n()<=3}{~draw=red~}{},
+ delay={for tree={content/.pgfmath=~node_options~}}
+ [root,rotate=90,
+ [,~fill=white~]
+ [,~node options'~]
+ []
+ []
+ [,~node options~={~ellipse~}]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\indexitem(false){option>phantom}|=|\meta{boolean}
+
+ A phantom node and its surrounding edges are taken into account when packing, but not
+ drawn. (This option applies in stage \index{draw tree}.)
+\begin{forestexample}[point=phantom,index={option>phantom}]
+ \begin{forest}
+ [VP[DP][V',phantom[V][DP]]]
+ \end{forest}
+\end{forestexample}
+
+\end{syntax}
+
+
+
+\subsubsection{Node position}
+\label{ref:ref-node-position}
+
+Most of the following options apply at stage \index{pack}. Changing them afterwards has no effect
+in the normal course of events. (Options \index{option>l}, \index{option>s}, \index{option>x}, \index{y} and
+\index{option>anchor} are exceptions; see their documentation for details).
+
+\begin{syntax}
+
+ \indexitem(base){option>anchor}|=|\meta{toks: \foRest; anchor}
+
+ While this option is saved by \foRest;, it is essentially an option of \TikZ;'s |\node| command
+ \citep[see][\S16.5.1]{tikzpgf2.10}. \FoRest; \index{autoforward}s it to keylist option
+ \index{node options}, which is passed on to \TikZ;'s |\node| command when the node is typeset.
+ (Option |anchor| thus normally applies in stage \index{typeset nodes}.)
+
+ In the \TikZ; code, you can refer to the node's anchor using \FoRest;'s anchor
+ \index{anchor>anchor}; this anchor is sometimes also called the node anchor in this
+ documentation, to distinguish it clearly from parent and child anchors.
+
+ \meta{toks: \foRest; anchor} can be any \TikZ; anchor. Additionally, \FoRest; defines several
+ tree hierarchy related anchors; for details, see \S\ref{sec:anchors}.
+
+ The effect of setting the node anchor is twofold:
+ \begin{itemize}
+ \item during packing, the anchors of all siblings are \index{option>l}-aligned;
+ \item some \index{calign} methods use node anchors (of the parent and/or certain children) to
+ \index{option>s}-align the block of children to the parent.
+ \end{itemize}
+
+ \indexitem(center){option>calign}|=|\alternative{child,child edge,midpoint,edge midpoint,fixed
+ angles,fixed edge angles}\\\alternative{first,last,center}.
+
+ The packing algorithm positions the children so that they don't overlap, effectively computing
+ the minimal distances between the node anchors of the children. This option (\keyname{calign}
+ stands for child alignment) specifies how the children are positioned
+ with respect to the parent (while respecting the above-mentioned minimal distances).
+
+ The child alignment methods refer to the primary and the secondary child, and to the primary and
+ the secondary angle. These are set using the keys described just after \keyname{calign}.
+
+ \let\outerleftmargin\leftmargin
+ \begin{syntax}
+ \item\keyname{calign}|=|\indexdef{value of=calign>child} s-aligns the node anchors of the parent and
+ the primary child.
+ \item\keyname{calign}|=|\indexdef{value of=calign>child edge} s-aligns the parent anchor of the parent
+ and the child anchor of the primary child.
+ \item \keyname{calign}|=|\indexdef{value of=calign>first} is an abbreviation for
+ |calign=child,calign_child=1|.
+ \item \keyname{calign}|=|\indexdef{value of=calign>last} is an abbreviation for
+ |calign=child,calign_child=-1|.
+ \item\keyname{calign}|=|\indexdef{value of=calign>midpoint} s-aligns the parent's node anchor and the
+ midpoint between the primary and the secondary child's node anchor.
+ \item\keyname{calign}|=|\indexdef{value of=calign>edge midpoint} s-aligns the parent's parent anchor
+ and the midpoint between the primary and the secondary child's child anchor.
+ \item \keyname{calign}|=|\indexdef{value of=calign>center} is an abbreviation for\\
+ |calign=midpoint,| |calign_primary_child=1,| |calign_secondary_child=-1|.
+\begin{forestexample}
+ \begin{forest}
+ [center,calign=center[1]
+ [first,calign=first[A][B][C]][3][4][5][6]
+ [last,calign=last[A][B][C]][8]]
+ \end{forest}
+\end{forestexample}
+ \item\keyname{calign}|=|\indexdef{value of=calign>fixed angles}: The angle between the direction of
+ growth at the current node (specified by option \index{grow}) and the line through the node
+ anchors of the parent and the primary/secondary child will equal the primary/secondary angle.
+
+ To achieve this, the block of children might be spread or further distanced from the parent.
+ \item\keyname{calign}|=|\indexdef{value of=calign>fixed edge angles}: The angle between the direction of
+ growth at the current node (specified by option \index{grow}) and the line through the
+ parent's parent anchor and the primary/secondary child's child anchor will equal the
+ primary/secondary angle.
+
+ To achieve this, the block of children might be spread or further distanced from the parent.
+\begin{forestexample}[point=calign,index={calign,fixed edge angles,calign primary angle,calign secondary angle,for step,tree,option>l},index>={!}]
+ \begin{forest}
+ calign=fixed edge angles,
+ calign primary angle=-30,calign secondary angle=60,
+ for tree={l=2cm}
+ [CP[C][TP]]
+ \draw[dotted] (!1) -| coordinate(p) () (!2) -| ();
+ \path ()--(p) node[pos=0.4,left,inner sep=1pt]{-30};
+ \path ()--(p) node[pos=0.1,right,inner sep=1pt]{60};
+ \end{forest}
+\end{forestexample}
+ \end{syntax}
+\indexitem{node key>calign child}|=|\meta{count} is an abbreviation for \index{calign primary
+ child}|=|\meta{count}.
+\indexitem(1){option>calign primary child}|=|\meta{count} Sets the primary child.
+ (See \index{calign}.)
+
+ \meta{count} is the child's sequence number. Negative numbers start counting at the last child.
+\indexitem(-1){option>calign secondary child}|=|\meta{count} Sets the secondary child.
+ (See \index{calign}.)
+
+ \meta{count} is the child's sequence number. Negative numbers start counting at the last child.
+\indexitem{node key>calign angle}|=|\meta{count} is an abbreviation for: \index{calign primary
+ angle}|=-|\meta{count}, \index{calign secondary angle}|=|\meta{count}.
+\indexitem(-35){option>calign primary angle}|=|\meta{count} Sets the primary angle.
+ (See \index{calign}.)
+\indexitem(35){option>calign secondary angle}|=|\meta{count} Sets the secondary angle.
+ (See \index{calign}.)
+\indexitem{node key>calign with current} s-aligns the node anchors of the current node and its
+ parent. This key is an abbreviation for:\indexex[not print]{wrap pgfmath arg,calign,child,calign primary child}
+\begin{lstlisting}
+ for parent/.wrap pgfmath arg={calign=child,calign primary child=##1}{n}.
+\end{lstlisting}
+\indexitem{node key>calign with current edge} s-aligns the child anchor of the current node and the
+ parent anchor of its parent. This key is an abbreviation for:\indexex[not print]{wrap pgfmath arg,calign,child edge,calign primary child}
+\begin{lstlisting}
+ for parent/.wrap pgfmath arg={calign=child edge,calign primary child=##1}{n}
+\end{lstlisting}
+
+ \indexitem(tight){option>fit}|=|\alternative{tight,rectangle,band}
+
+\begin{forestexample}[layout=export,basicstyle=\footnotesize\ttfamily]
+ \makeatletter\tikzset{use path/.code={\tikz@addmode{\pgfsyssoftpath@setcurrentpath#1}
+ \appto\tikz@preactions{\let\tikz@actions@path#1}}}\makeatother
+ \forestset{show boundary/.style={
+ before drawing tree={get min s tree boundary=\minboundary, get max s tree boundary=\maxboundary},
+ tikz+={\draw[red,use path=\minboundary]; \draw[red,use path=\maxboundary];}}}
+\end{forestexample}
+\input{\jobname.tmp}
+
+This option sets the type of the (s-)boundary that will be computed for the subtree rooted in the
+node, thereby determining how it will be packed into the subtree rooted in the node's parent.
+There are three choices:\footnote{Below is the definition of style \keyname{show boundary}. The
+\keyname{use path} trick is adjusted from \TeX\ Stackexchange question
+\href{http://tex.stackexchange.com/questions/26382/calling-a-previously-named-path-in-tikz}{Calling
+a previously named path in tikz}.
+
+\box\codebox}
+ \begin{itemize}
+ \item\keyname{fit}|=|\indexdef{value of=fit>tight}: an exact boundary of the node's subtree is computed,
+ resulting in a compactly packed tree. Below, the boundary of subtree L is drawn.
+\begin{forestexample}[point={fit,tight},index={fit,{value of=fit>tight},delay,for step,tree,option>name,content,pgfmath}]
+ \begin{forest}
+ delay={for tree={name/.pgfmath=content}}
+ [root
+ [L,fit=tight, % default
+ show boundary
+ [L1][L2][L3]]
+ [R]
+ ]
+ \end{forest}
+\end{forestexample}
+\makeatletter\tikzset{use path/.code={%
+ \tikz@addmode{\pgfsyssoftpath@setcurrentpath#1}%
+ \appto\tikz@preactions{\let\tikz@actions@path#1}%
+ }}\makeatother
+\item\keyname{fit}|=|\indexdef{value of=fit>rectangle}: puts the node's subtree in a rectangle and effectively
+ packs this rectangle; the resulting tree will usually be wider.
+\begin{forestexample}[point={fit,rectangle},index={fit,{value of=fit>rectangle},delay,for step,tree,option>name,content,pgfmath}]
+ \begin{forest}
+ delay={for tree={name/.pgfmath=content}}
+ [root
+ [L,fit=rectangle,
+ show boundary
+ [L1][L2][L3]]
+ [R]
+ ]
+ \end{forest}
+\end{forestexample}
+\item\keyname{fit}|=|\indexdef{value of=fit>band}: puts the node's subtree in a rectangle of ``infinite
+ depth'': the space under the node and its descendants will be kept clear.
+\begin{forestexample}[point={fit,band},index={fit,{value of=fit>band},delay,for step,tree,option>name,content,pgfmath}]
+ \begin{forest}
+ delay={for tree={name/.pgfmath=content}}
+ [root
+ [L[L1][L2][L3]]
+ [C,fit=band]
+ [R[R1][R2][R3]]
+ ]
+ \draw[thin,red]
+ (C.south west)--(C.north west)
+ (C.north east)--(C.south east);
+ \draw[thin,red,dotted]
+ (C.south west)--+(0,-1)
+ (C.south east)--+(0,-1);
+ \end{forest}
+\end{forestexample}
+ \end{itemize}
+
+\indexitem(270){option>grow}|=|\meta{count}, \indexdef{node key>grow'}|=|\meta{count},
+ \indexdef{node key>grow''}|=|\meta{count}
+
+ The direction of the tree's growth at the node.
+
+ The growth direction is understood as in \TikZ;'s tree library \citep[\S18.5.2]{tikzpgf2.10}
+ when using the default growth method: the (node anchor's of the) children of the node are placed
+ on a line orthogonal to the current direction of growth. (The final result might be different,
+ however, if \index{option>l} is changed after packing or if some child undergoes tier alignment.)
+
+ This option is essentially numeric (|pgfmath| function \keyname{grow} will always return an
+ integer), but there are some twists. The growth direction can be specified either numerically
+ or as a compass direction (|east|, |north east|, \dots). Furthermore, like in \TikZ;, setting
+ the growth direction using key \keyname{grow} additionally sets the value of option
+ \index{reversed} to |false|, while setting it with \keyname{grow'} sets it to |true|; to
+ change the growth direction without influencing \index{reversed}, use key \index{grow''}.
+
+ Between stages \index{pack} and \index{compute xy}, the value of \keyname{grow} should not
+ be changed.
+
+\begin{forestexample}[index={delay,where in toks option,content,for step,current,grow,grow',grow'',pgfmath}]
+ \begin{forest}
+ delay={where in content={~grow~}{
+ for current/.pgfmath=content,
+ content=\texttt{#1}
+ }{}
+ }
+ [{~grow~=south}
+ [{~grow'~=west}[1][2][3]
+ [{~grow''~=90}[1][2][3]]]
+ [2][3][4]
+ [{~grow~=east}[1][2][3]
+ [{~grow''~=90}[1][2][3]]]]
+ \end{forest}
+\end{forestexample}
+
+\indexitem(false){option>ignore}|=|\meta{boolean}
+
+If this option is set, the packing mechanism ignores the node, i.e.\ it pretends that the node has
+no boundary. Note: this only applies to the node, not to the tree.
+
+Maybe someone will even find this option useful for some reason \dots
+
+\indexitem(false){option>ignore edge}|=|\meta{boolean}
+
+If this option is set, the packing mechanism ignores the edge from the node to the parent, i.e.\
+nodes and other edges can overlap it. (See \S\ref{sec:bugs} for some problematic situations.)
+
+\begin{forestexample}[index={ignore edge,option>l,dimen*=l}]
+ \begin{forest}
+ [A[B[B][B][B][B]][C
+ [\texttt{not ignore edge},l*=2]]]
+ \end{forest}
+ \begin{forest}
+ [A[B[B][B][B][B]][C
+ [\texttt{ignore edge},l*=2,~ignore edge~]]]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{option>l}|=|\meta{dimen} The l-position of the node, in the parent's ls-coordinate system. (The
+origin of a node's ls-coordinate system is at its (node) anchor. The l-axis points in the
+direction of the tree growth at the node, which is given by option \index{grow}. The s-axis is
+orthogonal to the l-axis; the positive side is in the counter-clockwise direction from |l| axis.)
+
+The initial value of \keyname{l} is set from the standard node. By default, it equals:
+\[\index{l sep}+2\cdot\mbox{\texttt{outer ysep}}+\mbox{total
+height(standard node)}\]
+
+The value of \keyname{l} can be changed at any point, with different effects.
+\begin{itemize}
+\item The value of \keyname{l} at the beginning of stage \index{pack} determines the minimal
+ l-distance between the anchors of the node and its parent. Thus, changing \keyname{l} before
+ packing will influence this process. (During packing, \keyname{l} can be increased due to
+ parent's \index{l sep}, tier alignment, or \index{calign} methods
+ \index{fixed angles} and \index{fixed edge angles}.
+
+\item Changing \keyname{l} after packing but before stage \index{compute xy} will result in a
+ manual adjustment of the computed position. (The augmented assignment operators can be useful here.)
+
+\item Changing \keyname{l} after the absolute positions have been computed has no effect in the
+ normal course of events.
+\end{itemize}
+
+\indexitem{option>l sep}|=|\meta{dimen} The minimal l-distance between the node and its
+descendants.
+
+This option determines the l-distance between the \emph{boundaries} of the node and its descendants,
+not node anchors. The final effect is that there will be a \keyname{l sep} wide band,
+in the l-dimension, between the node and all its descendants.
+
+The initial value of \keyname{l sep} is set from the standard node and equals
+\[\mbox{height}(\mbox{strut})+\mbox{\texttt{inner ysep}}\]
+
+Note that despite the similar name, the semantics of \keyname{l sep} and \keyname{s sep} are
+quite different.
+
+\indexitem(false){option>reversed}|=|\meta{boolean}
+
+If |false|, the children are positioned around the node in the counter-clockwise direction; if
+|true|, in the clockwise direction. See also \index{grow}.
+
+\indexitem(0){option>rotate}|=|\meta{count}
+
+This option is saved and \index{autoforward}ed to \TikZ;'s |\node| command via \index{node options}.
+
+\indexitem{option>s}|=|\meta{dimen} The s-position of the node, in the parent's ls-coordinate system.
+(The origin of a node's ls-coordinate system is at its (node) anchor. The l-axis points in the
+direction of the tree growth at the node, which is given by option \index{grow}. The s-axis is
+orthogonal to the l-axis; the positive side is in the counter-clockwise direction from |l| axis.)
+
+The value of \keyname{s} is computed in stage \index{pack stage} and used in stage \index{compute xy
+ stage}, so it only makes sense to (inspect and) change it in \index{before computing xy} and
+during packing (\index{before packing node} and \index{after packing node}). \emph{Any value given
+ before packing is overridden, and changing the value after computing xy has no effect.}
+
+For example, consider the manual correction below. By default, B is closer to A than C because
+packing proceeds from the first to the last child --- the position of B would be the same if there
+was no C. Adjusting \keyname{s} at the right moment, it is easy to center B between A and C.
+\begin{forestexample}[tree bin=minipage,point=s,index={before computing xy,option>s}]
+ \begin{forest}
+ [no manual correction of B
+ [A[1][2][3][4]]
+ [B]
+ [C[1][2][3][4]]
+ ]
+ \end{forest}
+
+ \begin{forest}
+ [manual correction of B
+ [A[1][2][3][4]]
+ [B,before computing xy={s/.average={s}{siblings}}]
+ [C[1][2][3][4]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{option>s sep}|=|\meta{dimen}
+
+The subtrees rooted in the node's children will be kept at least \keyname{s sep} apart in the
+s-dimension. Note that \keyname{s sep} is about the minimal distance between node
+\emph{boundaries}, not node anchors.
+
+The initial value of \keyname{s sep} is set from the standard node and equals
+$2\cdot\mbox{\texttt{inner xsep}}$.
+
+Note that despite the similar name, the semantics of \keyname{s sep} and \keyname{l sep} are
+quite different.
+
+\indexitem({{{{{}}}}}){option>tier}|=|\meta{toks}
+
+Setting this option to something non-empty ``puts a node on a tier.'' All the nodes on the same
+tier are aligned in the l-dimension.
+
+Tier alignment across changes in growth direction is impossible. In the case of incompatible
+options, \foRest; will yield an error.
+
+Tier alignment also does not work well with \index{calign}|=|\index{fixed angles} and \index{calign}|=|\index{fixed edge angles}, because these child alignment methods may change the
+l-position of the children. When this might happen, \foRest; will yield a warning.
+
+\indexitem{option>x}=\meta{dimen}
+\vspace{-\parskip}
+\indexitem{option>y}=\meta{dimen}
+
+\keyname{x} and \keyname{y} are the coordinates of the node in the ``normal'' (paper) coordinate
+system, relative to the root of the tree that is being drawn. So, essentially, they are absolute
+coordinates.
+
+The values of \keyname{x} and \keyname{y} are computed in stage \index{compute xy}. It only
+makes sense to inspect and change them (for manual adjustments) afterwards (normally, in the
+\index{before drawing tree} hook, see \S\ref{ref:stages}.) \keyname{x} and \keyname{y} of the
+(formal) root node are exceptions, as they are not changed in stage \index{compute xy}.
+\begin{forestexample}[label=ex:adjustxy,index={y,dimen-,grow',option>l,for step,tree,before drawing tree}]
+ \begin{forest}
+ for tree={grow'=45,l=1.5cm}
+ [A[B][C][D,before drawing tree={~y-~=4mm}[1][2][3][4][5]][E][F]]
+ \end{forest}
+\end{forestexample}
+
+\end{syntax}
+
+\subsubsection{Edges}
+\label{ref:ref-edge}
+
+These options determine the shape and position of the edge from a node to its parent. They apply
+at stage \index{draw tree}.
+
+\begin{syntax}
+\indexitem({{{{{}}}}}){option>child anchor}|=|\meta{toks: \foRest; anchor} See \index{option>parent anchor}.
+
+\indexitem(draw){option>edge}|=|\meta{keylist}
+
+ When \index{edge path} has its default value, the value of this option is passed as options to
+ the \TikZ; |\path| expression used to draw the edge between the node and its parent.
+
+ Also see key \index{no edge}.
+
+\begin{forestexample}[point=edge,index={edge,no edge,for step,tree,grow',option>l,option>anchor,option>child anchor}]
+ \begin{forest} for tree={grow'=0,l=2cm,anchor=west,child anchor=west},
+ [root
+ [normal]
+ [none,~no~ edge]
+ [dotted,edge=dotted]
+ [dashed,edge=dashed]
+ [dashed,edge={dashed,red}]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\indexitem({{{{{}}}}}){option>edge label}|=|\meta{toks: \TikZ; code}
+
+When \index{edge path} has its default value, the value of this option is used at the end of
+the edge path specification to typeset a node (or nodes) along the edge.
+
+The packing mechanism is not sensitive to edge labels.
+
+\begin{forestexample}[index={edge label}]
+ \begin{forest}
+ [VP
+ [V,~edge label~={node[midway,left,font=\scriptsize]{head}}]
+ [DP,~edge label~={node[midway,right,font=\scriptsize]{complement}}]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{option>edge path}|=|\meta{toks: \TikZ; code}
+ \hfill |\noexpand\path[|\index{forestoption}|{|\index{edge}|}]|\\
+ \mbox{}\hfill |(|\index>{!}|u.|\index{anchor>parent anchor}|)--(.|\index{anchor>child anchor}|)|\index{forestoption}|{|\index{edge label}|};|
+
+This option contains the code that draws the edge from the node to its parent. By default, it
+creates a path consisting of a single line segment between the node's \index{option>child anchor} and
+its parent's \index{option>parent anchor}. Options given by \index{edge} are passed to the path; by
+default, the path is simply drawn. Contents of \index{edge label} are used to potentially place
+a node (or nodes) along the edge.
+
+When specifying the edge path, the values of options \index{edge} and \index{edge label} can be
+used. Furthermore, two anchors, \index{anchor>parent anchor} and \index{anchor>child anchor}, are defined,
+to facilitate access to options \index{option>parent anchor} and \index{option>child anchor} from the \TikZ; code.
+
+The node positioning algorithm is sensitive to edges, i.e.\ it will avoid a node overlapping an
+edge or two edges overlapping. However, the positioning algorithm always behaves as if the
+\keyname{edge path} had the default value --- \emph{changing the \keyname{edge path} does not
+influence the packing!} Sorry. (Parent--child edges can be ignored, however: see option
+\index{ignore edge}.)
+
+\indexitem{node key>edge path'}|=|\meta{toks: \TikZ; code}
+
+Sets \index{edge path}, automatically wrapping the given path by
+|\noexpand\path[\forestoption{edge}]| and |\forestoption{edge label};|.
+
+\indexitem({{{{{}}}}}){option>parent anchor}|=|\meta{toks: \foRest; anchor} (Information also applies to
+option \index{option>child anchor}.)
+
+\FoRest; defines anchors \index{anchor>parent anchor} and
+\index{anchor>child anchor} (which work only for \foRest; and not also \TikZ;
+nodes, of course) to facilitate reference to the desired endpoints of child--parent edges.
+Whenever one of these anchors is invoked, it looks up the value of the \keyname{parent anchor} or
+\keyname{child anchor} of the node named in the coordinate specification, and forwards the request
+to the (\TikZ;) anchor given as the value.
+
+The intended use of the two anchors is chiefly in \index{edge path} specification, but they can
+used in any \TikZ; code.
+\begin{forestexample}[index={anchor>parent anchor,anchor>child anchor,for step,tree},index>={!}]
+ \begin{forest}
+ for tree={~parent anchor~=south,~child anchor~=north}
+ [VP[V][DP]]
+ \path[fill=red] (.parent anchor) circle[radius=2pt];
+ \path[fill=blue] (!1.child anchor) circle[radius=2pt]
+ (!2.child anchor) circle[radius=2pt];
+ \end{forest}
+\end{forestexample}
+
+The empty value (which is the default) is interpreted as in \TikZ;: as an edge to the appropriate
+border point. See also \S\ref{sec:anchors} for a list of additional anchors defined by \foRest;.
+
+\indexitem{node key>no edge} Clears the edge options (\index{edge}|'={}|) and sets \index{ignore
+edge}.
+
+\end{syntax}
+
+\subsubsection{Information about node}
+\label{ref:node-info}
+\label{ref:readonly-options}
+
+The values of these options provide various information about the tree and its nodes.
+
+\begin{syntax}
+\indexitem{node key>alias}|=|\meta{toks}
+\itemnosep
+\indexitem{node key>alias'}|=|\meta{toks} Sets the alias for the node's name.
+
+ Unlike \index{option>name}, \keyname{alias} is \emph{not} an option: you cannot e.g.\ query it's
+ value via a |pgfmath| expression.
+
+ If the given alias clashes with an existing node name, |alias| will yield an error, while |alias'|
+ will silently rename the node with this name to its default value (|node@|\meta{id}).
+
+ Aliases can be used as the \meta{forest node name} part of a relative node name and as the
+ argument to the \index{step>name} step of a node walk. The latter includes the usage
+ as the argument of the \index{for step=\index{step>name}} propagator.
+
+ Technically speaking, \foRest; alias is \emph{not} a \TikZ; alias! However, you can still use
+ it as a ``node name'' in \TikZ; coordinates, since \foRest; hacks \TikZ;'s implicit node
+ coordinate system to accept relative node names; see \S\ref{ref:forest-cs}.
+
+\indexitem{readonly option>id}|=|\meta{count} The internal id of the node.
+
+\indexitem{readonly option>level}|=|\meta{count} The hierarchical level of the node. The root is on level $0$.
+
+\indexitem{readonly option>max x}|=|\meta{dimen} \vspace{-\parskip}
+\indexitem{readonly option>max y}|=|\meta{dimen} \vspace{-\parskip}
+\indexitem{readonly option>min x}|=|\meta{dimen} \vspace{-\parskip}
+\indexitem{readonly option>min y}|=|\meta{dimen}
+ Measures of the node, in the shape's coordinate system
+ \citep[see][\S16.2,\S48,\S75]{tikzpgf2.10} shifted so that the node anchor is at the origin.
+
+ In |pgfmath| expressions, these options are accessible as |max__x|, |max__y|, |min__x| and |min__y|.
+
+\indexitem{readonly option>n}|=|\meta{count} The child's sequence number in the list of its parent's
+ children.
+
+ The enumeration starts with 1. For a geometric root, \keyname{n} equals $0$.
+
+\indexitem{readonly option>n'}|=|\meta{count} Like \index{readonly option>n}, but starts counting at the last child.
+
+ In |pgfmath| expressions, this option is accessible as |n__|.
+
+\indexitem{option>name}|=|\meta{toks} \hfill \texttt{node@}\meta{id}
+\itemnosep
+\indexitem{node key>name'}|=|\meta{toks} Sets the name of the node.
+
+The expansion of \meta{toks} becomes the \meta{forest node name} of the node. The \TikZ; node
+created from the \foRest; node will get the name specified by this option.
+
+Node names must be unique. If a node with the given name already exists, |name| will yield an
+error, while |name'| will silently rename the node with this name to its default (|node@|\meta{id})
+value. Use an empty argument to reset the node's name to its default value.
+
+
+\indexitem{readonly option>n children}|=|\meta{count} The number of children of the node.
+
+ In |pgfmath| expressions, this option is accessible as |n__children|.
+\end{syntax}
+
+
+\subsubsection{Various}
+
+\begin{syntax}
+\indexitem{node key>baseline} The node's anchor becomes the baseline of the whole tree
+ \citep[cf.][\S69.3.1]{tikzpgf2.10}.
+
+ In plain language, when the tree is inserted in your (normal \TeX) text, it will be vertically
+ aligned to the anchor of the current node.
+
+ Behind the scenes, this style sets the alias of the current node to \keyname{forest@baseline@node}.
+ {\tikzexternaldisable
+\begin{forestexample}[index={baseline,use as bounding box'}]
+ Baseline at the
+ \begin{forest}
+ [parent,~baseline~,use as bounding box'
+ [child]]
+ \end{forest}
+ and baseline at the
+ \begin{forest}
+ [parent
+ [child,~baseline~,use as bounding box']]
+ \end{forest}.
+\end{forestexample}}
+
+\indexitem>{tikz key>fit to}|=|\meta{nodewalk} Fits the \TikZ; node to the nodes in the given
+ \meta{nodewalk}.
+
+This key should be used like \keyname{/tikz/fit} of the \TikZ;'s fitting library
+\citep[see][\S34]{tikzpgf2.10}: as an option to \emph{\TikZ;'s} |node| operation, the obvious
+restriction being that \keyname{fit to} must be used in the context of some \foRest; node.
+For an example, see footnote~\ref{fn:fit-to-tree}.
+
+This key works by calling \keyname{/tikz/fit} and providing it with the the coordinates of the
+subtree's boundary.
+
+The \meta{nodewalk} inherits its history from the outer nodewalk (if there is one). Its every-step
+keylist is empty.
+
+\indexitem{node key>get min s tree boundary}|=|\meta{cs} \vspace{-\parskip}
+\indexitem{node key>get max s tree boundary}|=|\meta{cs}
+
+Puts the boundary computed during the packing process into the given \meta{cs}. The boundary is
+in the form of \PGF; path. The |min| and |max| versions give the two sides of the node. For an
+example, see how the boundaries in the discussion of \index{fit} were drawn.
+
+\indexitem{option>label}|=|\meta{toks: \TikZ; node} The current node is labelled by a \TikZ; node.
+
+ The label is specified as a \TikZ; option \texttt{label} \citep[\S16.10]{tikzpgf2.10}.
+ Technically, the value of this option is passed to \TikZ;'s as a late option
+ \citep[\S16.14]{tikzpgf2.10}. (This is so because \foRest; must first typeset the nodes
+ separately to measure them (stage \index{typeset nodes}); the preconstructed nodes are inserted
+ in the big picture later, at stage \index{draw tree}.) Another option with the same
+ technicality is \index{pin}.
+
+\indexitem{option>pin}|=|\meta{toks: \TikZ; node} The current node gets a pin, see
+ \citep[\S16.10]{tikzpgf2.10}.
+¸
+ The technical details are the same as for \index{label}.
+
+
+\indexitem{node key>use as bounding box} The current node's box is used as a bounding box for the
+ whole tree.
+
+ \indexitem{node key>use as bounding box'} Like \index{use as bounding box}, but subtracts the
+ (current) inner and outer sep from the node's box. For an example, see \index{baseline}.
+
+ \indexitem({{{{{}}}}}){option>tikz}|=|\meta{toks: \TikZ; code} ``Decorations.''
+
+ The code given as the value of this option will be included in the |tikzpicture| environment used
+ to draw the tree. By default, the code is included after all nodes of the tree have been drawn,
+ so it can refer to any node of the tree (furthermore, relative node names can be used to refer to
+ nodes of the tree, see \S\ref{ref:relative-node-names}) and the code given to various nodes is
+ appended in a depth-first, parent-first fashion. See \S\ref{sec:draw-tree} for details and
+ customization.
+
+ By default, bracket parser's afterthoughts feed the value of this option. See
+ \index{afterthought}.
+
+\end{syntax}
+
+
+
+\subsection{Nodewalks}
+\label{ref:nodewalks}
+
+A \emph{nodewalk} is a sequence of \emph{steps} describing a path through the tree. Most steps
+are defined relative to the current node, for example \index{step>parent} steps to the parent of the
+current node, and \index{step>n}|=2| steps to the second child of the current node, where ``to make a
+step'' means to change the current node. Thus, nodewalk |parent,_parent,_n=2| describes the path
+which first steps to the parent of the \emph{origin} node, then to its grandparent and finally to
+the second child of the origin's grandparent.
+
+The origin of the nodewalk depends on how the nodewalk is invoked. When used after the \index>{!}
+in a relative node name (\S\ref{ref:relative-node-names}), the origin is the node with the name
+given before \index>{!}; when invoked by a spatial propagator such as \index{for
+ step=\index{nodewalk}} (\S\ref{ref:spatial-propagators}), the origin is the current node; when
+invoked within another (outer) nodewalk, the origin is the current node of the outer nodewalk.
+
+Formally, a \meta{nodewalk} is a list of |pgfkeys| key--value pairs. Steps in a nodewalk are thus
+separated by commas. However, \foRest; also recognizes \emph{short-form} steps, whose names consist
+of a single character and which do not need to be separated by a comma. For example, nodewalk
+|parent,_parent,_n=2| can be concisely written as |uu2|. Long and short forms can be mixed freely,
+like this: |next,_uu2,_previous|.
+
+Besides nodewalk keys, a \meta{nodewalk} can also contain node keys (or
+even \TikZ; keys).\footnote{The precise algorithm for keyname resulotion in nodewalks is as follows.
+\begin{itemize}
+\item First, \foRest; searches for the given \meta{keyname} in the \index{path>forest/nodewalk}
+ path. If found (a long-form step or a nodewalk style), it is executed.
+\item Next, it is checked whether \meta{keyname} is a sequence of short-form steps; is so, they are
+ executed.
+\item Otherwise, \meta{key} is executed in the \keyname{/forest} path. This includes both
+ \foRest;'s and \TikZ;'s keys. The latter are usually forwarded to \TikZ; via \index{node
+ options}.
+\end{itemize}
+There are some clashes between node key and nodewalk step names. For example, \keyname{l} is both a
+\meta{dimen} option and a short form of the step to the last child. According to the rules above,
+the nodewalk step will take precedence in case of a clash. Use nodewalk key \index{options} to
+execute a clashing node key.} These keys do their usual function, but within the context of the
+current node of the nodewalk: |parent, s=2em,| |parent, text=red| sets the parent's |s| to 2em and
+the grandparent's text color to red. It is worth noting that node keys include \index{TeX}, which
+makes it possible to execute any \TeX\ code while nodewalking.
+
+Some steps target a single node, like above-mentioned \index{step>parent} and \index{step>n}.
+Others, called multi-steps, describe mini-walks themselves: for example \index{step>children} visits
+each child of the node in turn, and \index{tree} visits each of the node's descendants (including
+the node itself). The path of many steps is determined by the geometric relations of the tree, or
+the value of some option. However, there are also keys for embedding nodewalks (\index{nodewalk
+ key>nodewalk}, \index{branch}, etc.), saving and loading nodewalks, sorting them, or even
+re-walking the history of steps made (like in a web browser).\footnote{Note that nesting operation
+ (\S\ref{ref:nodewalk-operations}) and history (\S\ref{ref:nodewalk-history}) steps, or embedding
+ nodewalks under these steps doesn't work, for most combinations, as many of them internally
+ manipulate nodewalk history.} Finally, if all this is not enough, you can define your own steps,
+see \S\ref{ref:defining-steps}.
+
+Each nodewalk has an associated \emph{every-step keylist}: a keylist of node keys\footnote{When
+ executing the \index{register>every step} keylist, \foRest; switches into the
+ \index{path>forest} path, which makes it impossible to directly include a nodewalk into the
+ every-step keylist. The reason is performance. Every time a \index{path>forest/nodewalk} key
+ is not found, the short-form nodewalk recognition algorithm is executed, and this algorithm is
+ slow. As \index{register>every step} is used a lot (it is for example used every invocation of
+ every spatial propagator) and the keys in \index{register>every step} are usually node options
+ from \index{path>forest} path, \foRest; would spend way too much time checking if a given node
+ option is actually a short-form nodewalk.
+
+ If you need to execute nodewalk keys within the every-step keylist, use node key \index{node
+ key>Nodewalk}.} which get executed after each step of the nodewalk. The every-step keylist of
+the current nodewalk is contained in register \index{register>every step} and can be changed at any
+point during the nodewalk. Its value at the start of the nodewalk depends on how the nodewalk was
+invoked. In most cases (e.g.\ \index{step>nodewalk} or prefix \index{for step}-based spatial
+propagators), it is given explicitely as an argument to the key that executes the nodewalk.
+However, see \index{step>Nodewalk} option \index{option of=Nodewalk>every step} for information on
+how the every-step keylist of an embedded nodewalk can interact with the every-step keylist of its
+parent nodewalk.
+
+Each nodewalk step can be either \emph{real} or \emph{fake}. Fake steps only change the current
+node. Real steps also trigger execution of the every-step keylist and update of history. Fake
+steps are sometimes useful as a ``computational tool''. They can be introduced explicitely using
+\index{nodewalk key>fake}; some other keys (like several history nodewalk keys,
+\S\ref{ref:nodewalk-history}) introduce fake steps implicitely.
+
+In some cases, the nodewalk might step ``out of the tree''. (Imagine using \index{step>parent} at the
+root of the tree, or \index{readonly option>n}|=42| at a node with less that 42 children.) Our official term will
+be that the nodewalk stepped on an \emph{invalid node}; what happens formally is that the current
+node is changed to the node with \index{readonly option>id}|=0|. Normally, such an event raises an
+error. However, the full story is told by \index{nodewalk key>on invalid}.
+
+Nodewalks can be hard to follow, especially when designing styles. \FoRest; does its best to
+help. First, it logs the nodewalk stack in case of error. Second, if package option
+\index{debug}|=|\index{option of=debug>nodewalks} is given, it logs every step made.
+
+
+\subsubsection{Invoking (embedded) nodewalks}
+\label{ref:embedded-walks}
+
+There are many ways to invoke a nodewalk. For example, several keys, like \index{fit to}, and
+aggregate functions (\S\ref{ref:aggregate-functions}) expect a \meta{nodewalk} argument. This
+section lists keys which can be used to explicitely invoke a nodewalk.
+
+The keys in this section can be used not only as node keys (in fact, not all of them can be used
+so), but also as nodewalk keys. The latter fact means that they can be used to introduce embedded
+nodewalks, which (can) have its own every-step keylist, history and on-invalid mode; for details on
+how these properties of outer and embedded nodewalk can interact, see \index{step>Nodewalk}. There
+is no limit to the depth of nodewalks embedding (nodewalk within nodewalk within nodewalk \dots).
+
+An embedded nodewalk functions as a single, fake step of the outer nodewalk. Specifically, this
+means that, while stepping through the embedded nodewalk, the every-step keylist of the outer
+nodewalk is not executed. Furthermore, by default, modifying the every-step keylist of the inner
+walk (by manipulating register \index{register>every step}) does not influence the outer nodewalk
+(but see option \index{option of=Nodewalk>every step}).
+
+An embedded nodewalk does not count as a (real, every-step keyslist invoking) step of the outer
+nodewalk. After it is finished, there are two options with respect to the new current node of the
+outer nodewalk,\footnote{Even the outermost explicitly invoked nodewalks actually have the outer
+ nodewalk. It is ``static'' in the sense that no real step is ever made in it, but it has all the
+ nodewalk properties --- the current node, \index{register>every step} keylist register, \index{option
+ of=Nodewalk>history} and \index{option of=Nodewalk>on invalid} mode (error) --- which can
+ interact with the embedded nodewalk.} depending on whether the embedded nodewalk was invoked using
+a variant of the key with or without the \index{for step} prefix (all keys in this section have the
+\index{for step} variant).
+\begin{itemize}
+\item For keys \emph{without} the \index{for step} prefix, the current node of the outer nodewalk
+ changes, \emph{via a fake step}, to the final node visited by the embedded nodewalk. This holds
+ even if the final node was reached as a fake step and even if it is invalid
+ (\index{option>id}|=0|). The fake step in the outer nodewalk cannot be made real, not even by
+ \index{nodewalk key>real}: if you want to execute the every-step keylist of the outer nodewalk at
+ the finishing node of the embedded nodewalk, follow the latter by step \index{current}.
+\item For keys \emph{with} the \index{for step} prefix, the current node of the outer nodewalk
+ remains unchanged. For this reason, the \index{for step}-prefixed keys are available as node keys
+ (we call them spatial propagators, \S\ref{ref:spatial-propagators}), while the steps without this
+ prefix are generally not, with the sole exception of \index{step>Nodewalk}, which I advise to use
+ carefully.
+\end{itemize}
+
+All steps described in this section can be prefixed by \index{for step}. All of them, with or
+without this prefix, are available as nodewalk keys. The list of keys from this section which are
+available as node keys: \index{step>Nodewalk}, \index{for step=\index{step>Nodewalk}}, \index{for
+ step=\index{nodewalk}}; you will most often want to use the latter.
+
+
+\begin{syntax}
+\indexitem{step>Nodewalk}|=|\meta{keylist: config}\meta{nodewalk}\meta{keylist: every-step}
+
+ Walks an \meta{nodewalk} starting at the current node.
+
+ This is the most generic form of embedding a nodewalk. Unlike other keys described in this
+ subsection, it can also be used as a node key even without the \index{for step} prefix, but take
+ care as it will, in general, change the current node.
+
+ The \meta{config} argument serves to specify the interaction between the outer and embedded
+ nodewalk. It can contain the following keys:
+
+ \let\outerleftmargin\leftmargin
+ \begin{syntax}
+ \indexitem(independent){option of=Nodewalk>every step}|={|\alternative{independent,inherited,shared}|}|
+ \indexitem(shared){option of=Nodewalk>history}|={|\alternative{independent,inherited,shared}|}|
+
+ The following table shows what happens to the every-step keylist and history depending on the
+ value of \keyname{every step} and \keyname{history}, respectively. State B is \meta{every-step}
+ for every step and empty for history.
+
+ \begin{tabular}{l|ccc}
+ &\keyname{independent}&\keyname{inherited}&\keyname{shared}\\\hline
+ state of the outer nodewalk&A&A&A\\
+ initial state of the inner nodewalk&B&A&A\\
+ \dots\\
+ final state of the inner nodewalk&C&C&C\\
+ state of the outer nodewalk&A&A&C
+ \end{tabular}
+ \end{syntax}
+
+ As shown in the table above, argument \meta{every-step} is used to initialize the
+ embedded nodewalk's every-step keylist when it is independent of the outer nodewalk. In other
+ cases, this argument is ignored (use |{}|).
+
+ \begin{syntax}
+ \indexitem(inherited){option of=Nodewalk>on invalid}|={|\alternative{error,fake,error in real,last valid,inherited}|}|
+
+ Like \index{nodewalk key>on invalid}, but local to this nodewalk. The additional alternative
+ \indexdef{value of=on invalid>inherited} (which is the default) means to retain the current
+ value, regardless of how it was set (by an outer nodewalk, explicit \index{nodewalk key>on
+ invalid}, or the package default, \index{value of=on invalid>error}).
+ \end{syntax}
+
+ \begin{advise}
+ \item Use \index{node key>Nodewalk} if you need to execute nodewalk keys within the every-step
+ keylist.
+ \end{advise}
+
+\begin{forestexample}[index={register>every step}]
+ \begin{forest}
+ for 2=calign with current, for children={for descendants={circle,draw}}
+ [every step,
+ [independent,for nodewalk={
+ 1,Nodewalk={~every step=independent~}{1,every step=fill,1}{},1
+ }{draw=red},
+ [[[[]]]]]
+ [inherited,for nodewalk={
+ 1,Nodewalk={~every step=inherited~}{1,every step=fill,1}{},1
+ }{draw=red},
+ [[[[]]]]]
+ [shared,for nodewalk={
+ 1,Nodewalk={~every step=shared~}{1,every step=fill,1}{},1
+ }{draw=red},
+ [[[[]]]]]]
+ \end{forest}
+\end{forestexample}
+
+
+\begin{forestexample}[index={history,walk back}]
+ \begin{forest}
+ mark/.style={tempcounta+=1,content+/.register=tempcounta,content+={,}},
+ [history:\\effect on the,align=center
+ [inner nodewalk
+ % uncommenting this would result in an error:
+ % [independent, delay={for nodewalk={
+ % tempcounta=0,111,
+ % Nodewalk={history=independent}{walk back=2}{mark,fill=yellow}
+ % }{mark,draw=red}},
+ % [[[]]]]
+ [inherited\\or\\shared, align=center,delay={for nodewalk={
+ tempcounta=0,111,
+ Nodewalk={~history=inherited~}{walk back=2}{mark,fill=yellow}
+ }{mark,draw=red}},
+ [[[]]]]]
+ [outer nodewalk
+ [inherited,delay={for nodewalk={
+ tempcounta=0,111,
+ Nodewalk={~history=inherited~}{11}{mark,fill=yellow},
+ walk back=2
+ }{mark,draw=red}},
+ [[[[[]]]]]]
+ [shared,delay={for nodewalk={
+ tempcounta=0,111,
+ Nodewalk={~history=shared~}{11}{mark,fill=yellow},
+ walk back=2
+ }{mark,draw=red}},
+ [[[[[]]]]]]]]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{step>nodewalk}|=|\meta{nodewalk}\meta{keylist: every-step}
+
+ This key is a shorthand for
+
+ \begin{center}
+ \index{step>Nodewalk}|={|\index{option of=Nodewalk>every step}|=independent,|\index{option
+ of=Nodewalk>history}|=independent,|\index{option of=Nodewalk>on
+ invalid}|=inherited}|\meta{nodewalk}\meta{keylist: every-step}
+ \end{center}
+
+ \begin{advise}
+ \item \index{for step=\index{nodewalk}} is the most common way to explicitely invoke a nodewalk from a
+ node keylist (the keylist immediately following the content of the node).
+ \end{advise}
+
+\indexitem{step>nodewalk'}|=|\meta{nodewalk}
+
+ This key is a shorthand for
+
+ \begin{center}
+ \index{step>Nodewalk}|={|\index{option of=Nodewalk>every step}|=inherited,|\index{option
+ of=Nodewalk>history}|=independent,|\index{option of=Nodewalk>on
+ invalid}|=inherited}|\meta{nodewalk}|{}|
+ \end{center}
+
+ \begin{advise}
+ \item Using this key, it is easy to ``\emph{temporarily} change'' the \index{register>every step}
+ keylist of a nodewalk.
+ \item Using \index{for step=\index{nodewalk'}} is probably the easiest way to make a ``trip''
+ within a nodewalk, i.e.\ walk some steps but return to their origin afterwards.
+ \item This key (with or without the \index{for step} prefix) is not available as a node key --- it
+ would make little sense there, as it has no every-step keylist argument.
+ \end{advise}
+
+\end{syntax}
+
+
+\subsubsection{Single-step keys}
+\label{ref:single-step-keys}
+
+Single-step nodewalk keys visit a single node. The behaviour in the situation when the target node
+does not exist is determined by \index{nodewalk key>on invalid}.
+
+For each single-step key, spatial propagator \index{for step=\meta{step}} is also defined.
+\index{for step=\meta{step}}|=|\meta{keylist} is equivalent to
+\index{for step=\index{nodewalk}}|={|\meta{step}|}{|\meta{keylist}|}|. If the step takes an argument, then its
+\index{for step=\meta{step}} propagator takes two and the argument of the step precedes the
+\meta{keylist}. See also \S\ref{ref:spatial-propagators}.
+
+Linear order below means the order of nodes in the bracket representation, i.e.\ depth-first
+parent-first first-child-first.
+
+\begin{syntax}
+\indexitem{step>current} an ``empty'' step: the current node remains the same\footnote{While it
+ might at first sight seem stupid to have an empty step, this is not the case. For example,
+ using propagator \index{for step=\index{current}} derived from this step, one can process a \meta{keylist} constructed using \index[not index,print format+={result+={\index[not print]{wrap pgfmath arg}\index[not print]{wrap $n$ pgfmath args}}}]{handler>wrap ($n$) pgfmath arg(s)} or \index{wrap value}.}
+\indexitem{step>first} the first child
+\indexitem{step>first leaf}, \indexdef{step>first leaf'} the first leaf (terminal node) of the
+ current node's descendants (|first leaf|) or subtree (|first leaf'|), in the linear order
+\indexitem{step>id}|=|\meta{id} the node with the given id; this step does not depend on the current node
+\indexitem{step>last} the last child
+\indexitem{step>last dynamic node} the last non-integrated (created/removed/replaced) node; see \S\ref{ref:dynamic}
+\indexitem{step>last leaf}, \indexdef{step>last leaf'} the last leaf (terminal node) of the
+ current node's descendants (|last leaf|) or subtree (|last leaf'|), in the linear order
+\indexitem{step>n}|=|$n$ the $n$th child; counting starts at $1$\footnote{Note that \keyname{n}
+ \emph{without} an argument is a short form of \keyname{next}.}
+\indexitem{step>n'}|=|$n$ the $n$th child, starting the count from the last child
+\indexitem{step>name}|=|\meta{name} the node with the given name or alias; this step does not depend on the current node
+\indexitem{step>next} the next sibling
+\indexitem{step>next leaf} the next node (in the linear order) which is a leaf (the current node need not be a leaf)
+\indexitem{step>next node} the next node of the entire tree, in the linear order
+\indexitem{step>next on tier}|=|\meta{tier} the next node (in the linear order) on the given tier; if no tier is given, assume the tier of the current node
+\indexitem{step>origin} the starting node of the nodewalk; note that the starting point does not automatically count as a step: if you want to step on it, use this key (or \index{current}, at the beginning of the nodewalk)
+\indexitem{step>parent} the parent
+\indexitem{step>previous} the previous sibling
+\indexitem{step>previous leaf} the previous node (in the linear order) which is a leaf (the current node need not be a leaf)
+\indexitem{step>previous node} the previous node of the entire tree, in the linear order
+\indexitem{step>previous on tier}|=|\meta{tier} the previous node (in the linear order) on the given tier; if no tier is given, assume the tier of the current node
+\indexitem{step>root} the root node, i.e.\ the ancestor of the current node without the parent; note that this key \emph{does} depend on the current node
+\indexitem{step>root'} the formal root node (see \index{set root} in \S\ref{ref:dynamic}); this key does not depend on the current node
+\indexitem{step>sibling} the sibling
+
+(don't use if the parent doesn't have exactly two children \dots)
+\indexitem{step>to tier}|=|\meta{tier} the first ancestor of the current node (or the node itself) on the given \meta{tier}
+\end{syntax}
+
+
+\subsubsection{Multi-step keys}
+\label{ref:multi-step-keys}
+
+Multi-step keys visit several nodes, in general. If a multi-step key visits no nodes, the current
+node remains unchanged.
+
+For each multi-step key, spatial propagator \index{for step=\meta{step}} is also defined, see
+\S\ref{ref:spatial-propagators}.
+
+Many of the keys below have a |reversed| variant. Those keys reverse the order of \emph{children}.
+Note that in general, this differs from operation key \index{reverse}, which reverses the order of
+the entire embedded nodewalk.
+
+Linear order below means the order of nodes in the bracket representation, i.e.\ depth-first
+parent-first first-child-first.
+
+\begin{syntax}
+ \indexitem{step>children}, \indexdef{step>children reversed}
+
+ Visit all the children of the current
+ node.
+
+\indexitem{step>tree}, \indexdef{step>tree reversed}
+ \itemnosep
+\indexitem{step>tree children-first}, \indexdef{step>tree children-first reversed}
+ \itemnosep
+\indexitem{step>tree breadth-first}, \indexdef{step>tree breadth-first reversed}
+
+ Visit the current node and all its descendants.
+
+ The above keys differ in the order the nodes are visited. The basic key, \keyname{tree},
+ traverses the nodes in the depth-first, parent-first first-child-first order, i.e.\ the order in
+ which they are given in the bracket representation: so it visits the parent before its children and
+ it visits the children from the first to the last.
+
+ |reversed| variants reverse the order of \emph{children}, visiting them from the last to the first
+ (from the viewpoint of the bracket representation).
+
+ |children-first| variants visit the children before the parent.
+
+ |breadth-first| variants behave like |level| steps below: they first visit level |0| nodes, then
+ level |1| nodes etc.
+
+ \begin{forestexample}[index={}]
+ \forestset{
+ enumerate/.style={
+ tempcounta=1,
+ for #1={
+ content/.pgfmath=tempcounta,
+ tempcounta+=1
+ }
+ }
+ }
+ \newcommand\enumtree[1]{%
+ \begin{forest}
+ [#1,l sep=0,for n=1{
+ l=0,no edge,delay={enumerate=#1}}
+ [[[[][]][[][]]][[[][]]]]
+ ]
+ \end{forest}
+ }
+ \renewcommand\arraystretch{2}
+ \begin{tabular}{cc}
+ \enumtree{tree}&
+ \enumtree{tree reversed}\\
+ \enumtree{tree children-first}&
+ \enumtree{tree children-first reversed}\\
+ \enumtree{tree breadth-first}&
+ \enumtree{tree breadth-first reversed}
+ \end{tabular}
+ \end{forestexample}
+
+\indexitem{step>descendants}, \indexdef{step>descendants reversed}
+ \itemnosep
+\indexitem{step>descendants children-first}, \indexdef{step>descendants children-first reversed}
+ \itemnosep
+\indexitem{step>descendants breadth-first}, \indexdef{step>descendants breadth-first reversed}
+
+ Visit all the descendants of the current node.
+
+ Like the |tree| keys, but the current node is not visited.
+
+\indexitem[print form+=\spaces{9}]{step>relative level<},
+ \indexdef[print form+=\spaces{9}]{step>relative level},
+ \indexdef[set={form=relative level\protect\greaterthan}]{step>relative levelGT}\texttt{\spaces{9}}|=|\meta{count}
+ \itemnosep
+\indexitem{step>relative level reversed<},
+ \indexdef{step>relative level reversed},
+ \indexdef[set={form=relative level reversed\protect\greaterthan}]{step>relative level reversedGT}|=|\meta{count}
+ \itemnosep
+\indexitem[print form+=\spaces{9},+print form=\spaces{9}]{step>level<},
+ \indexdef[print form+=\spaces{9},+print form=\spaces{9}]{step>level},
+ \indexdef[set={form=level\protect\greaterthan},+print form=\spaces{9}]{step>levelGT}\texttt{\spaces{9}}|=|\meta{count}
+ \itemnosep
+\indexitem[+print form=\spaces{9}]{step>level reversed<},
+ \indexdef[+print form=\spaces{9}]{step>level reversed},
+ \indexdef[set={form=level reversed\protect\greaterthan},+print form=\spaces{9}]{step>level reversedGT}|=|\meta{count}
+
+ Visits the nodes in the subtree of the current node whose level (depth) is less than \emph{or
+ equal to}, equal to, or greater than \emph{or equal to} the given level.
+
+ The |relative| variants consider the level as relative to the current node: relative level of the
+ current node is $0$; relative level of its children is $1$, of its grandchildren $2$, etc. The
+ absolute variants consider the depth with respect to the (geometric) root, i.e.\ as returned by
+ node option \index{readonly option>level}.
+
+ The nodes are traversed in the breadth-first order. The |reversed| variants reverse the order of
+ the children within each level, but the levels are still traversed from the highest to the
+ deepest.
+
+\indexitem{step>leaves}
+
+ Visits all the leaves in the current node's subtree.
+
+\indexitem[index key={level-}]{step>-level}|=|\meta{count}
+\itemnosep
+\indexitem[index key={level-'}]{step>-level'}|=|\meta{count}
+
+Visits all the nodes \meta{count} levels above the leaves in the current node's subtree.
+
+\indexitem[+print form=\spaces{12},print form+=\spaces{9}]{step>preceding siblings}\quad\quad
+ \indexdef[+print form=\spaces{12}]{step>following siblings}%
+ \itemnosep
+\indexitem[print form+=\spaces{9}]{step>current and preceding siblings}\quad\quad
+ \indexdef{step>current and following siblings}%
+ \itemnosep
+\indexitem[+print form=\spaces{12}]{step>preceding siblings reversed}\quad\quad
+ \indexdef[+print form=\spaces{12}]{step>following siblings reversed}%
+ \itemnosep
+\indexitem{step>current and preceding siblings reversed}\quad\quad
+ \indexdef{step>current and following siblings reversed}%
+ \itemnosep
+\indexitem[+print form=\spaces{22},print form+=\spaces{9}]{step>siblings}%
+ \itemnosep
+\indexitem[print form={current and \spaces{9} siblings\spaces{9}}]{step>current and siblings}%
+ \itemnosep
+\indexitem[+print form=\spaces{22},print form+=\spaces{9}]{step>siblings reversed}%
+ \itemnosep
+\indexitem[print form={current and \spaces{9} siblings reversed}]{step>current and siblings reversed}%
+
+Visit preceding, following or all siblings; visit the current node as well or not; visit in normal
+or reversed order.
+
+\indexitem{step>ancestors}
+ \itemnosep
+\indexitem{step>current and ancestors}
+
+Visit the ancestors of the current node, starting from the parent/current node, ending at the root node.
+
+\indexitem[+print form=\spaces{12}]{step>preceding nodes}\quad\quad
+ \indexdef[+print form=\spaces{12}]{step>following nodes}%
+ \itemnosep
+\indexitem{step>current and preceding nodes}\quad\quad
+ \indexdef{step>current and following nodes}%
+
+Visit all preceding or following nodes of the entire tree, in the linear order; visit the current node as well or not.
+
+\end{syntax}
+
+
+\subsubsection{Operations}
+\label{ref:nodewalk-operations}
+
+Generally speaking, nodewalk operations take an \emph{input nodewalk} and transform it into
+an \emph{output nodewalk}, while possibly also having side effects.
+
+The most important categorization of operations is in terms of the input nodewalk:
+\begin{itemize}
+\item ``Normal'' keys execute the input nodewalk ``invisibly'', i.e.\ with a every-step keylist that
+ is initially empty. However, even such an ``invisible'' nodewalk might not always be completely
+ without effect. For example, the effects of any node keys contained in the input nodewalk or
+ modifications of its (initially empty) every-step keylist will be felt.
+\item Most of the operation keys have the |walk_and_...| variant, where input given nodewalk is meant to
+ be ``visible'': it is walked directly in the context of the invoking nodewalk (specifically, with
+ its every-step keylist in effect).
+\item Some operation keys have the |..._in_nodewalk| variant, which operates on the portion of the
+ current nodewalk that was already walked.
+\item \index{load} has no input nodewalk.
+\end{itemize}
+All operation keys except |..._in_nodewalk| variants can be prefixed by \index{for step} to create a
+spatial propagator (\S\ref{ref:spatial-propagators}).
+
+The output nodewalk is always walked in the context of the invoking nodewalk. However, note that,
+as mentioned above, in the case of |walk_and_...| variants, that context can be changed during the
+execution of the input nodewalk.
+
+Trivia: \index{save} is the only operation with no output nodewalk and also the only operation with
+a ``side effect'' (of saving the nodewalk, obviously).
+
+For some operations (\index{filter} and \index{branch}), the every-step keylist contains instructions
+on how collect the relevant information. While you can safely append and prepend to
+\index{register>every step} keylist of their input nodewalk, you should not completely rewrite
+it. If you want the operations to actually work, of course.
+
+\begin{syntax}
+\indexitem{step>group}|=|\meta{nodewalk}
+
+ Treat \meta{nodewalk} as a single step of the (outer) nodewalk, i.e.\ the outer every-step keylist
+ is executed only at the end of the embedded nodewalk. The embedded \meta{nodewalk} inherits
+ history from the outer nodewalk. Using this key is equivalent to writing
+ \begin{center}
+ \index{step>Nodewalk}|={|\index{option of=Nodewalk>every step}|=independent,|\index{option
+ of=Nodewalk>history}|=inherited}|\meta{nodewalk}|{}, current|
+ \end{center}
+
+
+ \indexitem{step>reverse}|=|\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and reverse}|=|\meta{nodewalk}
+
+ Visits the nodes of the given \meta{nodewalk} in the reversed order.
+
+
+ \indexitem{step>unique}|=|\meta{nodewalk}
+
+ Walks the \meta{nodewalk}, but visits each node at most once.
+
+
+\indexitem{step>filter}|=|\meta{nodewalk}\index{forestmath=condition}
+
+Visit the nodes of the given \meta{nodewalk} for which the given \meta{condition} is true.
+
+ \begin{advise}
+ \item You can safely append and prepend to \index{register>every step} keylist during the input
+ \meta{nodewalk}, but you should not completely rewrite it.
+ \end{advise}
+
+
+\indexitem{step>branch}|={|\meta{nodewalk$_1$}|,...,|\meta{nodewalk$_n$}|}|
+ \itemnosep
+\indexitem{step>branch'}|={|\meta{nodewalk$_1$}|,...,|\meta{nodewalk$_n$}|}|
+
+Visit the nodes in a ``cartesian product'' of any number of nodewalks, where a cartesian product is
+defined as a nodewalk where at every step of \meta{nodewalk$_i$} ($1\leq i<n$),
+\meta{nodewalk$_{i+1}$} is executed.
+
+The |branch| variant visits only the nodes visited by the innermost nodewalk, \meta{nodewalk$_n$}.
+The |branch'| variant visits the nodes visited by all the nodewalks of the product,
+\meta{nodewalk$_1$} \dots\ \meta{nodewalk$_n$}.
+
+For an example of each, see \index{c-commanded} and \index{c-commanders} from the
+\reflibrary{linguistics} library.
+
+ \begin{advise}
+ \item You can safely append and prepend to \index{register>every step} keylists during the input
+ \meta{nodewalk}s, but you should not completely rewrite them.
+ \end{advise}
+
+
+ \indexitem{step>save}|=|\meta{toks: name}\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and save}|=|\meta{toks: name}\meta{nodewalk}
+
+ Saves the given \meta{nodewalk} under the given name.
+
+ \indexitem{step>save append}|=|\meta{toks: name}\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>save prepend}|=|\meta{toks: name}\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and save append}|=|\meta{toks: name}\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and save prepend}|=|\meta{toks: name}\meta{nodewalk}
+
+ Appends/prepends the given \meta{nodewalk} to nodewalk \meta{name}.
+
+ \indexitem{step>load}|=|\meta{toks: name} Walks the nodewalk saved under the given name.
+
+ Note that it is node \index{readonly option>id}s that are saved: loading a named nodewalk with in a context of
+ a different current node, or even with a tree whose geometry has changed (see \S\ref{ref:dynamic})
+ will still visit exactly the nodes that were visited when the nodewalk was saved.
+
+
+ \indexitem{step>sort}|=|\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>sort'}|=|\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and sort}|=|\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and sort'}|=|\meta{nodewalk}
+
+ Walks the nodes of the nodewalk in the order specified by the last invokation of \index{sort
+ by}. The \keyname{sort} variants sort in the ascending order, the \keyname{sort'} variants in
+ the descending order. The \keyname{walk and sort} variants first visit the nodes in the order
+ specified by the given \meta{nodewalk}.
+
+ \indexitem{node key>sort by}|={|\index{forestmath}|,|\dots|,|\index{forestmath}|}|
+
+ Sets the sorting order used by all keys comparing nodes: \index{step>sort}, \index{step>min}
+ and \index{step>max} key families in the nodewalk namespace, and the \index{dynamic
+ tree>sort} key family in the option namespace (dynamic tree).
+
+ For each node being ordered, an ``$n$-dimensional coordinate'' is computed by evaluating the given
+ list of |pgfmath| expressions in the context of that node.\footnote{Don't worry, lazy evaluation
+ is used.} Nodes are then ordered by the usual sort order for multi-dimensional arrays: the
+ first item is the most important, the second item is the second most important, etc.
+
+ Simply put, if you want to sort first by the number of children and then by content, say
+ |sort_by={|\index[+print format=pgfmath]{n children}|,_|\index{content}|}|.
+
+ In the simplest case, the given \index{forestmath} expressions are simply node options. However, as
+ any |pgfmath| expression is allowed in the sort key, you can easily sort by the product of the
+ content of the current node and the content of its first child:
+ |sort_by={|\index{content}|()*|\index{content}|("|\index>{!}|1")|.
+
+ To sort alphabetically, one must use the argument processor (\S\ref{ref:argument-processor}) to
+ specify the sort order. In particular, the key must be marked as text using \index{processor>t}.
+ The first example below shows a simple alphabetical sort by content; the second sorts the
+ filenames by suffix first (in the ascending order) and then by the basename (in the descending
+ order, see \index{processor>-}).
+
+\begin{forestexample}
+ \begin{forest}
+ [,phantom,grow'=0,for children={anchor=west,child anchor=west},s sep=0,
+ delay={~sort by=>O+t{content},sort~}
+ [example.tex][example.pdf][example.log][example.aux]
+ [thesis.tex][thesis.pdf][thesis.log][thesis.aux][thesis.toc]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\begin{forestexample}
+ \begin{forest}
+ declare toks={basename}{},
+ declare toks={extension}{},
+ [,phantom,grow'=0,for children={anchor=east},s sep=0,
+ delay={
+ for children={split option={content}{.}{basename,extension}},
+ ~sort by={>O+t{extension},>O+t-{basename}}~,
+ ~sort~,
+ }
+ [example.tex][example.pdf][example.log][example.aux]
+ [thesis.tex][thesis.pdf][thesis.log][thesis.aux][thesis.toc]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{step>min}|=|\meta{nodewalk}, \indexdef{step>max}|=|\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and min}|=|\meta{nodewalk}, \indexdef{step>walk and max}|=|\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>mins}|=|\meta{nodewalk}, \indexdef{step>maxs}|=|\meta{nodewalk}
+ \itemnosep
+ \indexitem{step>walk and mins}|=|\meta{nodewalk}, \indexdef{step>walk and maxs}|=|\meta{nodewalk}
+
+
+ Visit the node(s) in the given \meta{nodewalk} with a minimum/maximum value with
+ respect to the sort order previously specified by \index{sort by}.
+
+ Variants \keyname{mins}/\keyname{maxs} visit all the nodes that with the minimum/maximum value of
+ the sorting key; variants \keyname{min}/\keyname{max} visit only the first such node (first in the order specified by the given nodewalk).
+
+ \indexitem{step>min in nodewalk}, \indexdef{step>max in nodewalk}
+ \itemnosep
+ \indexitem{step>mins in nodewalk}, \indexdef{step>maxs in nodewalk}
+ \itemnosep
+ \indexitem{step>min in nodewalk'}, \indexdef{step>max in nodewalk'}
+
+ These keys search for the minimum/maximum among the nodes that were already visited in the current
+ nodewalk.
+
+ Keys \keyname{mins in nodewalk} and \keyname{maxs in nodewalk} visits all nodes that reach the minimum/maximum, while keys \keyname{min in nodewalk} and \keyname{max in nodewalk} variants visit only the first such node.
+
+ Keys \keyname{min in nodewalk'} and \keyname{max in nodewalk'} visit the first minimal/maximal
+ node by moving back in the history, see \index{back}.
+
+
+\end{syntax}
+
+\subsubsection{History}
+\label{ref:nodewalk-history}
+
+\FoRest; keeps track of nodes visited in a nodewalk and makes it possible to revisit them, in a
+fashion similar to clicking the back and forward button in a web browser.
+
+These keys cannot be prefixed by \index{for step}.
+
+\begin{syntax}
+ \indexitem{step>back}|=|\meta{count: n}
+ \itemnosep
+ \indexitem{step>jump back}|=|\meta{count: n}
+ \itemnosep
+ \indexitem{step>walk back}|=|\meta{count: n}
+
+ Move $n$ steps back in the history. In the \keyname{back} variant, all steps are fake; in
+ the \keyname{jump back} variant, the final step is real; and in the \keyname{walk back} variant,
+ all steps are real.
+
+ Note that as the origin is not a part of the history, these keys will \emph{not} step there
+ (unless \index{current} was the first step of your nodewalk). (Use \index{origin} to move
+ to the origin of the nodewalk.)
+
+ \indexitem{step>forward}|=|\meta{count: n}
+ \itemnosep
+ \indexitem{step>jump forward}|=|\meta{count: n}
+ \itemnosep
+ \indexitem{step>walk forward}|=|\meta{count: n}
+
+ Move $n$ steps forward in the history. In the \keyname{forward} variant, all steps are fake; in
+ the \keyname{jump forward} variant, the final step is real; and in the \keyname{walk forward} variant,
+ all steps are real.
+
+\indexitem{node key>save history}|=|\meta{toks: back name}\meta{toks: forward name}
+
+Saves the backwards and forwards history under the given names. (Load them using \index{load}.) The
+backwards history is saved in the reverse order of how it was walked, i.e.\ outward from the
+perspective of the current position in the nodewalk.
+\end{syntax}
+
+
+\subsubsection{Miscellaneous}
+\label{ref:nodewalk-miscellaneous}
+
+The following nodewalk keys are not steps. Rather, they influence the behaviour of nodewalk steps in
+various ways. The keys in this section having \meta{nodewalk} arguments do not start a new nodewalk
+in the sense of \S\ref{ref:embedded-walks}; the given nodewalk steps rather become a part of the
+current nodewalk.
+
+\begin{syntax}
+\indexitem{register>every step}|=|\meta{keylist} Contains the every-step keylist of the current
+ nodewalk.
+
+\indexitem{nodewalk key>fake}|=|\meta{nodewalk}
+ \itemnosep
+\indexitem{nodewalk key>real}|=|\meta{nodewalk}
+
+ The \meta{nodewalk} embedded under |fake| consists of ``fake'' steps: while
+ the current node is changed, every-step keylist is not executed and the history is not updated.
+
+ Note that these keys do not introduce an embedded nodewalk. The given \meta{nodewalk} will not
+ have its own history and every-step keylist.
+
+ |real| undoes the effect of |fake|, but cannot make real the implicitely fake steps, such as the
+ return to the origin in spatial propagators like \index{for step=\index{nodewalk}}.
+ |fake| and |real| can be nested without limit.
+
+\indexitem{step>last valid}
+ \itemnosep
+\indexitem{step>last valid'}
+
+ If the current node is valid, these keys do nothing. If the current node of the nodewalk is
+ invalid (i.e.\ its \index{readonly option>id} is $0$), they step to the last valid visited node. If
+ there was no such node, they step to the origin of the nodewalk.
+
+ The variant \emph{without} |'| makes a fake step. More precisely, it behaves as if both
+ \index{nodewalk key>fake} and \index{nodewalk key>on invalid}|=fake| are in effect.
+
+\indexitem{nodewalk key>on invalid}|={|\alternative{error,fake,step}|}|\meta{nodewalk}
+
+ This key determines what should happen if a nodewalk step landed on the invalid node, i.e.\ the node
+ with \index{readonly option>id}|=0|.
+
+ There is a moment within the step when the current node is changed but the step itself is not yet
+ really done, is ``still fake'', i.e.\ the history is not yet updated and the every-step keylist is
+ not yet executed. If the new current node is invalid, this key determines what should happen next.
+
+ \let\outerleftmargin\leftmargin
+ \begin{syntax}
+ \item |on invalid={|\indexdef{value of=on invalid>error}|}|\meta{nodewalk} produces an error;
+ \item |on invalid={|\indexdef{value of=on invalid>fake}|}|\meta{nodewalk} does nothing: history is
+ not updated and the every-step keylist is not executed, thus making the step essentialy fake;
+ \item |on invalid={|\indexdef{value of=on invalid>error if real}|}|\meta{nodewalk} produces an
+ error unless \index{nodewalk key>fake} is in effect.
+ \item |on invalid={|\indexdef{value of=on invalid>last valid}|}|\meta{nodewalk} returns to the
+ last valid node, by making a fake step, like \index{step>last valid}.
+ \end{syntax}
+
+ Loops with the implicit |id=0| condition (\S\ref{ref:loops}) automatically switch to
+ |on_invalid=fake| mode.
+
+ See also \index{step>Nodewalk} option \index{option of=Nodewalk>on invalid}.
+
+\indexitem{nodewalk key>options}=\meta{keylist: node keys}
+
+ Execute the given node options in the context of the current node.
+
+ There is not much need to use this key, as any keys that are not (long) steps or sequences of
+ short steps are automatically used as \foRest; node options any way, but there are still usage
+ cases, for example whenever the names of node options and (long) steps are the same, or in a style
+ that wants to ensure there is no overlap.
+
+\indexitem{nodewalk key>strip fake steps}|=|\meta{nodewalk}
+
+ If \meta{nodewalk} ends with fake steps, return to the last node current before those steps were made. For details, see \index{define long step}.
+
+\end{syntax}
+
+
+\subsubsection{Short-form steps}
+\label{ref:short-form-steps}
+
+All short forms of steps are one token long. When using them, there is no need to separate them by
+commas. Here's the list of predefined short steps and their corresponding long-form steps.
+
+\begin{syntax}
+\indexitem{short step>1}, \indexdef{short step>2}, \indexdef{short step>3}, \indexdef{short step>4}, \indexdef{short step>5}, \indexdef{short step>6}, \indexdef{short step>7}, \indexdef{short step>8}, \indexdef{short step>9} the first, \dots, ninth child --- \index{readonly option>n}|=1|,\dots,|,9|
+\indexitem{short step>l} the last child --- \index{step>last}
+\indexitem{short step>u} the parent (up) --- \index{step>parent}
+\indexitem{short step>p} the previous sibling --- \index{previous}
+\indexitem{short step>n} the next sibling --- \index{next}
+\indexitem{short step>s} the sibling --- \index{sibling}
+\indexitem{short step>P} the previous leaf --- \index{previous leaf}
+\indexitem{short step>N} the next leaf --- \index{next leaf}
+\indexitem{short step>F} the first leaf --- \index{first leaf}
+\indexitem{short step>L} the last leaf --- \index{last leaf}
+\indexitem[set={index key={<GT},form=\protect\greaterthan}]{short step>GT}
+ the next node on the current tier --- \index{next on tier}
+\indexitem{short step><} the previous node on the current tier --- \index{previous on tier}
+\indexitem{short step>c} the current node --- \index{current}
+\indexitem{short step>o} the origin --- \index{origin}
+\indexitem{short step>r} the root node --- \index{root}
+\indexitem{short step>R} the formal root node --- \index{root'}
+\indexitem{short step>b} back one fake step in history --- \index{back}|=1|
+\indexitem{short step>f} forward one fake step in history --- \index{forward}|=1|
+\indexitem{short step>v} last valid node in the current nodewalk, fake version --- \index{step>last valid}
+\indexitem{short step>*}\meta{count: n}\meta{keylist} repeat keylist $n$ times --- \index{repeat}|=|\meta{count: n}\meta{keylist}
+\item {\rstyle $\{$}\meta{keylist}{\rstyle $\}$} put keylist in a group --- \index{group}|=|\meta{keylist}
+\end{syntax}
+
+\subsubsection{Defining steps}
+\label{ref:defining-steps}
+
+You can define your own steps, both long and short, or even redefine predefined steps. Note,
+though, that it is not advisable to redefine long steps, as their definitions are interdependent;
+redefining short steps is always ok, however, as they are never used in the code of the package.
+
+\begin{syntax}
+\indexitem{node key>define long step}|=|\meta{name}\meta{options}\meta{nodewalk}
+
+ Define a long-form step named \meta{name} as equivalent to \meta{nodewalk}. \meta{options} control the exact behaviour or the defined step.
+
+ \let\outerleftmargin\leftmargin
+ \begin{syntax}
+ \item\indexdef{option of=define long step>n args}|=|\meta{number}\hfill |0|
+ \item\indexdef{option of=define long step>make for}|=|\meta{boolean}\hfill |true|
+
+ Should we make a \index{for step} prefix for the step?
+ \item\indexdef{option of=define long step>strip fake steps}|=|\meta{boolean}\hfill |true|
+
+ Imagine that \meta{nodewalk} ends with fake steps. Now, fake steps are usually just a computational tool, so we normally wouldn't want the current node after the walk to be one of them. As far as the outer world is concerned, we want the node to end at the last real step. However, simply appending \index{step>last valid} to our style will not work. Imagine that the nodewalk results in no steps. In this case, we'd want to remain at the origin of our empty nodewalk. However, imagine further that the (outer) step just before the empty nodewalk was fake. Then \index{step>last valid} will not step to the correct node: instead of staying at the origin, it will go to the node that the last real step prior to our nodewalk stepped to. In case there was no such real step, we'd even step to the invalid node (normally getting an error).
+
+ Defining the step using |strip fake steps| ensures the correct behaviour described
+ above. Set |strip fake steps=false| only when the fake steps at the end of the nodewalk are
+ important to you.
+
+ \begin{advise}
+ \item See also nodewalk key \index{nodewalk key>strip fake steps}.
+ \end{advise}
+
+ \end{syntax}
+
+\begin{forestexample}[index={define long step,option of=define long step>n args,conditional>if,step>n,while,readonly option>n,next}]
+ \forestset{
+ ~define long step~={children from to}{n args=2}{
+ if={#1>#2}{}{n=#1,while={n()<#2}{next}}
+ }
+ }
+ \begin{forest}
+ for children from to={2}{5}{draw}
+ [root[1][2][3][4][5][6]]
+ \end{forest}
+\end{forestexample}
+
+
+\indexitem{node key>define short step}|=|\meta{token: short step}\meta{n args}\meta{nodewalk}
+
+Define short step taking $n$ arguments as the given \meta{nodewalk}. Refer to the arguments in the usual way, via |#1|, \dots.
+
+To (re)define braces, |{}|, write |define short step={group}{1}{...}|.
+
+\indexitem{handler>nodewalk style}|=|\meta{nodewalk}
+
+\meta{nodewalk key}|/.nodewalk style=|\meta{nodewalk} is a shorthand for\\
+|for_nodewalk={|\meta{nodewalk key}|/.style=|\meta{nodewalk}|}{}|.
+
+\end{syntax}
+
+
+\subsection{Conditionals}
+\label{ref:conditionals}
+
+All conditionals take arguments \meta{true keylist} and \meta{false keylist}. The interpretation of
+the keys in these keylists depends on the environment the conditional appears in. If it is a part
+of a nodewalk specification, the keys are taken to be nodewalk keys (\S\ref{ref:nodewalks}),
+otherwise node keys (\S\ref{ref:node-keys}).
+
+All the conditionals can be nested safely.
+
+\begin{syntax}
+\indexitem{conditional>if}|=|\index{forestmath=condition}\meta{true keylist}\meta{false keylist}
+
+ If \index{forestmath=condition} evaluates to |true| (non-zero), \meta{true keylist} is processed (in
+ the context of the current node); otherwise, \meta{false keylist} is processed.
+
+ For a detailed description of |pgfmath| expressions, see \cite[part VI]{tikzpgf2.10}. (In short:
+ write the usual mathematical expressions.)
+
+ In the following example, \index{conditional>if} is used to orient the arrows from the smaller
+ number to the greater, and to color the odd and even numbers differently. (Style |random_tree| is
+ defined in the front page example.)
+
+\forestset{random tree/.style n args={3}{% #1=max levels, #2=max children, #3=max content
+ content/.pgfmath={random(0,#3)},
+ if={#1>0}{repeat={random(0,#2)}{append={[,random tree={#1-1}{#2}{#3}]}}}{}}}
+\begin{forestexample}[index={before typesetting nodes,for step,descendants,conditional>if,content,edge,edge label,tree},index>={!},point=if]
+ \pgfmathsetseed{314159}
+ \begin{forest}
+ before typesetting nodes={
+ for descendants={
+ if={content()>content("!u")}{edge=->}{
+ if={content()<content("!u")}{edge=<-}{}},
+ edge label/.wrap pgfmath arg=
+ {node[midway,above,sloped,font=\scriptsize]{+#1}}
+ {int(abs(content()-content("!u")))}
+ },
+ for tree={circle,if={mod(content(),2)==0}
+ {fill=yellow}{fill=green}}
+ }
+ [,random tree={3}{3}{100}]
+ \end{forest}
+\end{forestexample}
+
+
+
+
+\indexitem{word prefix=option>conditional>if=\meta{option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+
+This simple conditional is defined for every \meta{option} (except boolean options, see below): if
+\meta{value} equals the value of the option at the current node, \meta{true keylist} is executed;
+otherwise, \meta{false keylist}.
+
+\indexitem{word prefix=boolean option>conditional>if=\meta{boolean option}}|=|\meta{true keylist}\meta{false keylist}
+
+ Execute \meta{true keylist} if \meta{boolean option} is true; otherwise, execute \meta{false
+ keylist}.
+
+\indexitem{word prefix=toks option>conditional>if in=\meta{toks option}}|=|\meta{toks}\meta{true keylist}\meta{false
+ keylist}
+
+ Checks if \meta{toks} occurs in the option value; if it does, \meta{true keylist} are executed,
+ otherwise \meta{false keylist}.
+
+ This conditional is defined only for \meta{toks} options, see \S\ref{sec:option-setting}.
+
+
+
+\indexitem[set={
+ index format={result=if \protect\meta{dimen option}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={>}, pgfkey},
+}]{conditional>if dimen GT=\protect\meta{dimen option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=if \protect\meta{dimen option}<,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={<}, pgfkey},
+}]{conditional>if dimen LT=\protect\meta{dimen option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=if \protect\meta{count option}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={>}, pgfkey},
+}]{conditional>if count GT=\protect\meta{count option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=if \protect\meta{count option}<,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={<}, pgfkey},
+}]{conditional>if count LT=\protect\meta{count option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=if \protect\meta{dimen register}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={>}, pgfkey},
+}]{conditional>if dimen register GT=\protect\meta{dimen register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=if \protect\meta{dimen register}<,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={<}, pgfkey},
+}]{conditional>if dimen register LT=\protect\meta{dimen register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=if \protect\meta{count register}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={>}, pgfkey},
+}]{conditional>if count register GT=\protect\meta{count register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=if \protect\meta{count register}<,pgfkey},
+ print format={result/.option=argument,+result={if\ },result+={<}, pgfkey},
+}]{conditional>if count register LT=\protect\meta{count register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+
+If the current value of the dimen/count option/register is greater/less than or equal to
+\meta{value}, execute \meta{true keylist}; else, execute \meta{false keylist}.
+
+
+\indexitem{conditional>if nodewalk valid}|=|\meta{keylist: test nodewalk}\meta{true keylist}\meta{false keylist}
+
+ If the test nodewalk finished on a valid node, \meta{true keylist} is processed (in the context of
+ the current node); otherwise, \meta{false keylist} is processed.
+
+\indexitem{conditional>if nodewalk empty}|=|\meta{keylist: test nodewalk}\meta{true keylist}\meta{false keylist}
+
+ If the test nodewalk contains no (real) steps, \meta{true keylist} is processed (in the context of
+ the current node); otherwise, \meta{false keylist} is processed.
+
+\indexitem{conditional>if current nodewalk empty}|=|\meta{true keylist}\meta{false keylist}
+
+ If the current nodewalk contains no (real) steps, \meta{true keylist} is processed (in the context of
+ the current node); otherwise, \meta{false keylist} is processed.
+
+ \indexitem{conditional>if in saved nodewalk}|=|\meta{nodewalk}\meta{toks: nodewalk name}\meta{true keylist}\meta{false keylist}
+
+If the node at the end of \meta{nodewalk} occurs in the saved nodewalk, \meta{true keylist} is
+processed (in the context of the current node); otherwise, \meta{false keylist} is processed.
+
+\indexitem{propagator>if have delayed}|=|\meta{true keylist}\meta{false keylist} If any options were
+ delayed in the current cycle (more precisely, up to the point of the execution of this key),
+ process \meta{true keylist}, otherwise process \meta{false keylist}. (\index{delay n} will
+ trigger ``true'' for the intermediate cycles.)
+
+ This key assumes that the processing order of the innermost invocation of \index{process
+ keylist} or \index{process keylist'} is given by \index{processing order}. If this is not
+ the case, explicitely supply the processing order using \index{if have delayed'}.
+
+\indexitem{propagator>if have delayed'}|=|\meta{nodewalk}\meta{true keylist}\meta{false keylist}
+ Like \index{if have delayed}, but assume the processing order given by \meta{nodewalk}.
+
+\end{syntax}
+
+
+
+The following keys are shortcuts: they execute their corresponding |if ...| conditional for every
+node in the subtree of the current node (including the node itself). In other words:
+
+\begin{center}
+ |where ...|\meta{arg$_1$}\dots\meta{arg$_n$}|/.style={for tree={if ...=|\meta{arg$_1$}\dots\meta{arg$_n$}|}}|
+\end{center}
+
+\begin{advise}
+\item Except in special circumstances, you probably don't want to embed keys from the \index{where
+ option} family within a \index{for step=\index{tree}}, as this results in two nested loops. It
+ is more usual to use an \index{conditional>if} family key there. For an example where using
+ \index{where option} actually does the wrong thing, see question
+ \href{http://tex.stackexchange.com/questions/167978/smaller-roofs-for-forest}{Smaller roofs for
+ forest} on \TeX\ Stackexchange.
+\end{advise}
+
+\begin{syntax}
+\indexitem{conditional>where}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem{word prefix=option>conditional>where=\meta{option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem{word prefix=boolean option>conditional>where=\meta{boolean option}}|=|\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem{word prefix=toks option>conditional>where in=\meta{toks option}}|=|\meta{toks}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{dimen option}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={>}, pgfkey},
+}]{conditional>where dimen GT=\protect\meta{dimen option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{dimen option}<,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={<}, pgfkey},
+}]{conditional>where dimen LT=\protect\meta{dimen option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{count option}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={>}, pgfkey},
+}]{conditional>where count GT=\protect\meta{count option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{count option}<,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={<}, pgfkey},
+}]{conditional>where count LT=\protect\meta{count option}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{dimen register}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={>}, pgfkey},
+}]{conditional>where dimen register GT=\protect\meta{dimen register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{dimen register}<,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={<}, pgfkey},
+}]{conditional>where dimen register LT=\protect\meta{dimen register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{count register}\protect\greaterthan,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={>}, pgfkey},
+}]{conditional>where count register GT=\protect\meta{count register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem[set={
+ index format={result=where \protect\meta{count register}<,pgfkey},
+ print format={result/.option=argument,+result={where\ },result+={<}, pgfkey},
+}]{conditional>where count register LT=\protect\meta{count register}}|=|\meta{value}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem{conditional>where nodewalk valid}|=|\meta{toks: nodewalk name}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem{conditional>where nodewalk empty}|=|\meta{toks: nodewalk name}\meta{true keylist}\meta{false keylist}
+\itemnosep
+\indexitem{conditional>where in saved nodewalk}|=|\meta{nodewalk}\meta{toks: nodewalk name}\meta{true keylist}\meta{false keylist}
+\end{syntax}
+
+
+\subsection{Loops}
+\label{ref:loops}
+
+All loops take a \meta{keylist} argument. The interpretation of the keys in these keylists depends
+on the environment the loop appears in. If it is a part of a nodewalk specification,
+the keys are taken to be nodewalk keys (\S\ref{ref:nodewalks}), otherwise node keys
+(\S\ref{ref:node-keys}).
+
+All loops can be nested safely.
+
+
+\begin{syntax}
+
+\indexitem{loop>repeat}|=|\meta{number}\meta{keylist}
+
+ The \meta{keylist} is processed \meta{number} times.
+
+ The \meta{number} expression is evaluated using |pgfmath|.
+
+\indexitem{loop>while}|=|\index{forestmath=condition}\meta{keylist}
+ \itemnosep
+\indexitem{loop>do while}|=|\index{forestmath=condition}\meta{keylist}
+ \itemnosep
+\indexitem{loop>until}|=|\index{forestmath=condition}\meta{keylist}
+ \itemnosep
+\indexitem{loop>do until}|=|\index{forestmath=condition}\meta{keylist}
+
+ \keyname{while} loops cycle while the condition is true, \keyname{until} loops terminate when the
+ condition becomes true.
+
+ The \keyname{do} variants check the condition after processing the \meta{keylist}; thus, the
+ keylist is executed at least once. The variants without the \keyname{do} prefix check the
+ condition before processing the \meta{keylist}, which might therefore not be processed at all.
+
+ When \index{forestmath=condition} is an empty string, condition \index{valid} is implicitely used,
+ and \meta{keylist} is implicitely embedded in \index{nodewalk key>on invalid}|=fake|. Thus, the |while|
+ loops will cycle until they ``walk out of the tree'', and |until| loops will cycle until they
+ ``walk into the tree.''
+
+ \begin{advise}
+ \item If a loop ``walks out of the tree'', you can get it back in using \index{step>last valid} or
+ \index{nodewalk key>strip fake steps}.
+ \end{advise}
+
+
+\begin{forestexample}[index={root',content,step>n,delay,for step,nodewalk,do until}]
+ \pgfmathsetseed{1234}
+ \begin{forest}
+ try/.style={root',content+={#1,\ },n=#1},
+ delay={
+ for nodewalk={~do until~={}{try/.pgfmath={random(1,20)}},draw}{},
+ },
+ [tried:\ [1][2][3][4][5]]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{loop>while nodewalk valid}|=|\meta{nodewalk}\meta{keylist}
+ \itemnosep
+\indexitem{loop>do while nodewalk valid}|=|\meta{nodewalk}\meta{keylist}
+ \itemnosep
+\indexitem{loop>until nodewalk valid}|=|\meta{nodewalk}\meta{keylist}
+ \itemnosep
+\indexitem{loop>do until nodewalk valid}|=|\meta{nodewalk}\meta{keylist}
+ \itemnosep
+\indexitem{loop>while nodewalk empty}|=|\meta{nodewalk}\meta{keylist}
+ \itemnosep
+\indexitem{loop>do while nodewalk empty}|=|\meta{nodewalk}\meta{keylist}
+ \itemnosep
+\indexitem{loop>until nodewalk empty}|=|\meta{nodewalk}\meta{keylist}
+ \itemnosep
+\indexitem{loop>do until nodewalk empty}|=|\meta{nodewalk}\meta{keylist}
+
+ \meta{nodewalk} is embedded within \index{nodewalk key>on invalid}|=fake|.
+
+
+\indexitem(0){node key>break}|=|$n$ Break out of the loop.
+
+ The loop is only exited after all the keys in the current cycle have been processed.
+
+ The optional argument $n$ ($n\geq0$) specifies which level of embedding to break from; the default
+ is to break out of the innermost loop.
+
+\indexitem(0){pgfmath>forestloopcount}([$n$])
+
+ How many times has the loop repeated until now?
+
+ The optional argument $n$ ($n\geq0$) specifies the level of embedding to provide information for;
+ the default is to count the repetitions of the current, most deeply embedded loop.
+
+\end{syntax}
+
+
+\subsection{Dynamic tree}
+\label{ref:dynamic}
+
+The following keys can be used to change the geometry of the tree by creating new nodes and
+integrating them into the tree, moving and copying nodes around the tree, and removing nodes from
+the tree.
+
+The \meta{node} that will be (re)integrated into the tree can be specified in the following ways:
+\begin{syntax}
+\item \meta{empty}: uses the last non-integrated (i.e.\ created/removed/replaced) node.
+ \begin{advise}
+ \item This node can also be referred to using nodewalk step \index{last dynamic node}.
+ \item The list of all such nodes is automatically saved in named nodewalk \indexdef{named
+ nodewalk>dynamic nodes}, to be \index{load}ed when needed.
+ \end{advise}
+\item \meta{node}: a new node is created using the given bracket representation (the node may
+ contain children, i.e.\ a tree may be specified), and used as the argument to the key.
+
+ The bracket representation must be enclosed in brackets, which will usually be enclosed in
+ braces to prevent them being parsed while parsing the ``host tree.''
+ \begin{advise}
+ \item Unlike the bracket representation in a \index{environment>forest} environment, the bracket
+ representation of a dynamically created node \emph{must} start with |[|. Specifically, it cannot
+ begin with a preamble or the action character.
+ \end{advise}
+\item \index{relative node name}: the node \meta{relative node name} resolves to will be used.
+\end{syntax}
+
+A dynamic tree operation is made in two steps:
+\begin{itemize}
+\item If the argument is given by a \meta{node} argument, the new node is created immediately,
+ i.e.\ while the dynamic tree key is being processed. Any options of the new node are
+ implicitely \index{delay}ed.
+\item The requested changes in the tree structure are actually made between the cycles of keylist
+ processing.
+\end{itemize}
+
+\begin{advise}
+\item Such a two-stage approach is employed because changing the tree structure during the dynamic
+ tree key processing would lead to an unmanageable order of keylist processing.
+\item A consequence of this approach is that nested dynamic tree keys take several cycles to
+ complete. Therefore, be careful when using \index{delay} and dynamic tree keys simultaneously: in
+ such a case, it is often safer to use \index{before typesetting nodes} instead of \index{delay},
+ see example (\ref{ex:append}), and it is also possible to define additional stages, see
+ \S\ref{sec:workflow}.
+\item Examples: title page (in style |random tree|) and (\ref{ex:niceemptynodes}) (in style
+ |xlist|).
+\end{advise}
+
+Here is the list of dynamic tree keys:
+
+\begin{syntax}
+\indexitem{dynamic tree>append}|=|\meta{empty}\OR|[|\meta{node}|]|\OR\meta{relative node name}
+
+ The specified node becomes the new final child of the current node. If the specified node had a
+ parent, it is first removed from its old position.
+
+\begin{forestexample}[label=ex:append,point=append,index={append,delay,for step,tree,readonly option>n,content,readonly option>n',repeat}]
+ \begin{forest}
+ before typesetting nodes={for tree={
+ if n=1{content=L}
+ {if n'=1{content=R}
+ {content=C}}}}
+ [,repeat=2{append={[
+ ,repeat=3{append={[]}}
+ ]}}]
+ \end{forest}
+\end{forestexample}
+
+\indexitem{dynamic tree>create}|=[|\meta{node}|]|
+
+Create a new node. The new node becomes the last node.
+
+\indexitem{dynamic tree>create'}|=[|\meta{node}|]|
+
+Create a new node and process its given options immediately. The new node becomes the last node.
+
+\indexitem{dynamic tree>insert after}|=|\meta{empty}\OR|[|\meta{node}|]|\OR\meta{relative node name}
+
+ The specified node becomes the new following sibling of the current node. If the specified node had a
+ parent, it is first removed from its old position.
+
+\indexitem{dynamic tree>insert before}|=|\meta{empty}\OR|[|\meta{node}|]|\OR\meta{relative node name}
+
+ The specified node becomes the new previous sibling of the current node. If the specified node had a
+ parent, it is first removed from its old position.
+
+\indexitem{dynamic tree>prepend}|=|\meta{empty}\OR|[|\meta{node}|]|\OR\meta{relative node name}
+
+ The specified node becomes the new first child of the current node. If the specified node had a
+ parent, it is first removed from its old position.
+
+\indexitem{dynamic tree>remove}
+
+The current node is removed from the tree and becomes the last node.
+
+The node itself is not deleted: it is just not integrated in the tree anymore. Removing the root
+node has no effect.
+
+\indexitem{dynamic tree>replace by}|=|\meta{empty}\OR|[|\meta{node}|]|\OR\meta{relative node name}
+
+ The current node is replaced by the specified node. The current node becomes the last node.
+
+ If the specified node is a new node containing a dynamic tree key, it can refer to the replaced
+ node by the \meta{empty} specification. This works even if multiple replacements are made.
+
+ If \keyname{replace by} is used on the root node, the ``replacement'' becomes the root node
+ (\index{set root} is used).
+
+\end{syntax}
+
+If given an existing node, most of the above keys \emph{move} this node
+(and its subtree, of course). Below are the versions of these operations which rather \emph{copy}
+the node: either the whole subtree (|'|) or just the node itself (|''|).
+\begin{syntax}
+\indexitem{dynamic tree>append'}, \indexdef{dynamic tree>insert after'}, \indexdef{dynamic tree>insert before'}, \indexdef{dynamic tree>prepend'},
+ \indexdef{dynamic tree>replace by'}
+
+ Same as versions without |'| (also the same arguments), but it is the copy of the specified node
+ and its subtree that is integrated in the new place.
+\indexitem{dynamic tree>append''}, \indexdef{dynamic tree>insert after''}, \indexdef{dynamic tree>insert before''}, \indexdef{dynamic tree>prepend''},
+ \indexdef{dynamic tree>replace by''}
+
+ Same as versions without |''| (also the same arguments), but it is the copy of the specified node
+ (without its subtree) that is integrated in the new place.
+
+\begin{advise}
+\item You might want to \index{delay} the processing of the copying operations, giving the
+ original nodes the chance to process their keys first!
+\end{advise}
+
+\indexitem{dynamic tree>copy name template}|=|\meta{empty}\OR\meta{macro definition} \hfill\meta{empty}
+
+Defines a template for constructing the \index{option>name} of the copy from the name of the
+original. \meta{macro definition} should be either empty (then, the \index{option>name} is
+constructed from the \index{readonly option>id}, as usual), or an expandable macro taking one argument (the
+name of the original).
+
+\begin{forestexample}
+ \begin{forest}
+ copy name template={copy of #1}
+ [CP,delay={prepend'=subject}
+ [VP[DP,name=subject[D][NP]][V'[V][DP]]]]
+ \draw[->,dotted] (subject)--(copy of subject);
+ \end{forest}
+\end{forestexample}
+
+\indexitem{dynamic tree>set root}|=|\meta{empty}\OR|[|\meta{node}|]|\OR\meta{relative node name}
+
+The specified node becomes the new \emph{formal} root of the tree.
+
+Note: If the specified node has a parent, it is \emph{not} removed from it. The node becomes the
+root only in the sense that the default implementation of stage-processing will consider it a
+root, and thus typeset/pack/draw the (sub)tree rooted in this root. The processing of keys such
+as \index{for step=\index{step>parent}} and \index{for step=\index{root}} is not affected: \index{for step=\index{root}} finds the
+real, geometric root of the current node. To access the formal root, use nodewalk step
+\index{root'}, or the corresponding propagator \index{for step=\index{root'}}.
+
+\indexitem{dynamic tree>sort}, \indexdef{dynamic tree>sort'} Sort the children of the current node,
+ using the currently active sort key specified in \index{sort by} (see
+ \S\ref{ref:nodewalk-operations}). |sort| sorts in ascending and |sort'| in descending order.
+
+\end{syntax}
+
+
+\subsection{Handlers}
+\label{ref:handlers}
+
+Handlers are a powerful mechanism of |pgfkeys|, documented in \citep[\S82.3.5]{tikzpgf3.0.0}.
+Handlers defined by \foRest; perform a computation and invoke the handled key with its result. The
+simple handlers are documented in this section: for \index{handler>process}, see
+\S\ref{ref:argument-processor}; for aggregate function handlers, see
+\S\ref{ref:aggregate-functions}.
+
+\begin{syntax}
+\indexitem{handler>option}|=|\meta{option}
+
+The result is the value of \meta{option} at the current node.
+
+\indexitem{handler>register}|=|\meta{register}
+
+The result is the value of \meta{register}.
+
+\indexitem{handler>pgfmath}|=|\meta{pgfmath expression}
+
+The result is the evaluation of \meta{pgfmath expression} in the context of the current node.
+
+\begin{advise}
+\item
+ If you only need to access an option or register value, using \index{handler>option} or
+ \index{handler>register} is much faster than using \keyname{.pgfmath}.
+\end{advise}
+
+\indexitem{handler>wrap value}|=|\meta{macro definition}
+
+The result is the (single) expansion of the given
+ \meta{macro definition}. The defined macro takes one parameter. The current value of the
+ handled option will be passed as that parameter.
+
+\indexitem{handler>wrap $n$ pgfmath args}|=|\meta{macro definition}\meta{arg $1$}\dots\meta{arg $n$}
+
+ The result is the (single) expansion of the given \meta{macro definition}. The defined macro
+ takes $n$ parameters, where $n\in\{2,\dots,8\}$. Expressions \meta{arg $1$} to \meta{arg $n$}
+ are evaluated using |pgfmath| and passed as arguments to the defined macro.
+
+\indexitem{handler>wrap pgfmath arg}|=|\meta{macro definition}\meta{arg}
+
+ Like \index{wrap $n$ pgfmath args} would work for $n=1$.
+
+
+\end{syntax}
+
+\subsection{Argument processor}
+\label{ref:argument-processor}
+
+For a gentle(r) introduction to the argument processor, see \S\ref{tut:wrapping}.
+
+The argument processor takes a sequence of instructions and an arbitrary number of arguments and
+transforms the given arguments according to the instructions. This is the generic form of a process
+expression:
+
+\begin{syntax}
+ \item \indexdef{meta>process} = \meta{instructions}\meta{arg $1$}\dots\meta{arg $n$}
+\end{syntax}
+
+There are three ways to invoke the argument processor: via handler \index{handler>process}, as one
+of the two alternatives of a \index{forestmath} expression and recursively, by its instruction
+\index{processor>P}.
+
+\begin{syntax}
+
+\indexitem{handler>process}|=|\index{meta>process}
+
+The result of the computation is passed on to the handled key as a sequence of arguments. When the
+argument processor is invoked this way, any number of items can be returned.\footnote{For backward
+ compatibility, \index{handler>process} is also available as \indexdef{handler>process args}.}
+
+\item \indexdef{meta>forestmath} = \meta{pgfmath}\OR|>|\index{meta>process}
+
+ In words, a \index{forestmath} expression is either a \meta{pgfmath} expression or an argument
+ processor expression (\index{meta>process}) prefixed by |>|.
+
+ In other words, \FoRest; accepts an argument processor expression anywhere it accepts a
+ \meta{pgfmath} expression.\footnote{The only exceptions to the above rule are handler
+ \index{pgfmath} and argument processor instruction \index{processor>P}.} To indicate that we're
+ providing an argument processor expression, we prefix it with |>|.
+
+ When the argument processor is invoked this way, it should return a single item.
+
+\end{syntax}
+
+
+\begin{table}
+ \centering
+ \tikzexternaldisable
+ \bracketset{action character=!}%
+ \begin{forest}
+ phantom,
+ for tree={
+ grow'=0, no edge, inner sep=0, outer sep=0,
+ },
+ delay={
+ sort by={>O+t+c{content}},
+ sort,
+ },
+ before typesetting nodes={
+ for children={
+ content={\index{processor>#1}},
+ for children={
+ content+={\phantom{(%)
+ }}}}},
+ define long step={from to}{n args=2}{
+ tempcounta=#2,
+ n=#1,
+ while/.process=Rw{tempcounta}{n()<##1}{next}
+ },
+ draw tree stage/.style={
+ for root'={
+ if n children=0{% so that we don't get an error on the first run
+ }{
+ draw tree processing order/.nodewalk style={branch={{from to={1}{round(n_children()/3)}},tree}}, draw tree, TeX={~~},
+ draw tree processing order/.nodewalk style={branch={{from to={1+round(n_children()/3)}{2*round(n_children()/3)}},tree}}, draw tree, TeX={~~},
+ draw tree processing order/.nodewalk style={branch={{from to={1+2*round(n_children()/3)}{n_children()}},tree}}, draw tree,
+ }
+ }
+ }
+ [!\bigbadprocesslist]
+ \end{forest}%
+ \caption{Argument processor instructions}
+ \label{tab:allargprocins}
+\end{table}
+
+
+The syntax of argument processor is a cross between |expl3|'s function argument specification and a
+Turing machine, spiced with a bit of reversed Polish notation. ;-)
+
+Think of \meta{instructions} as a program and \meta{arg $1$}\dots\meta{arg $n$} as the data that
+this program operates on.
+
+If you're familiar with Turing machines: like a Turing machine, the argument processor has a notion
+of a head; unlike a Turing machine, the argument processor head is positioned not over some
+argument, but between two arguments. If you're not familiar with Turing machines: imagine the
+arguments as items on a tape and the argument processor as a head that is always located between
+some two items. As the head is between two arguments, we can talk about the arguments on the left
+and the arguments on the right.
+
+In general, an instruction will take some items from the left and some from the right (deleting them
+from the tape), perform some computation and insert the result on the tape, some result items to the
+left and some to the right. However, most instructions simply take an item from the right, do
+something with it, and put the (single-item) result to the left; in effect, the head is moved one
+item to the right. At the beggining, all the arguments are always on the right, so the general idea
+is that the program will walk through the given arguments, processing them in order.
+
+Descriptions of individual instructions, given below, contain (at the right edge of the page) the
+argument specification, which tells us about the number of input and output items and the movement
+of the head. The input and output are separated by an arrow ($\longrightarrow$), and the green eye
+(\textcolor{darkgreen}{\eye}) signifies the position of the head with respect to the (input or
+output) items.
+
+For example, instruction \index{processor>O}, which converts an option name into the option value,
+exemplifies the most common scenario: it takes one argument from the right and puts the result to
+the left (in other words, the head moves one item to the right). Wrapping instrucion
+\index{processor>w} is more complicated. Given instruction \index{processor>w}$n$, the argument
+processor takes one argument from the right (the wrapping macro body) and $n$ items from the left
+(which become the arguments of the wrapping macro), and puts the resulting item to the left.
+Comparisons and boolean operations are the instructions resembling the reverse Polish notation: they
+take the arguments from the left and put the result to the left, as well. Finally, it is worth
+mentioning instructions \index{processor>noop} and \index{processor>+}, which simply move the head
+to the right and left, respectively; given that the usual movement of the head is to the right,
+\index{processor>+} can be thought of as a process-the-argument-again instruction.
+
+
+Before we finally list the available instructions, some notes:
+\begin{itemize}
+\item \meta{Instructions} may be given in braces or not. If not, everything until the first opening
+ brace is considered to be an instruction.
+\item An argument item (\meta{arg$_k$}) is a standard \TeX\ macro argument: either a token or a
+ braced token list. (The obvious exception: \meta{arg$_1$} needs to be braced if it follows
+ braceless instructions.)
+\item Spaces in \meta{instructions} and between arguments are ignored. Format your \index{handler>process}
+ as you wish!
+\item Instructions followed by [$n$] below take an optional numeric modifier.
+ \begin{itemize}
+ \item The modifier should be given within the instruction string itself, immediately following the
+ instruction. In particular, no spaces are allowed there. (Sorry for the little white lie
+ above.) The number should not be enclosed in braces, even if it is more than one digit long.
+ \item This modifier is always optional: its default value varies from instruction to instruction.
+ (Providing $0$ means to use the default.)
+ \item Unless noted otherwise, the optional numerical argument $n$ instruct the argument processor
+ to repeat the previous instruction $n$ times (by default, 1). For example,
+ \index{processor>O}|3| is equivalent to
+ \index{processor>O}\index{processor>O}\index{processor>O}.
+ \end{itemize}
+\end{itemize}
+
+\makeatletter
+\NewDocumentEnvironment{indexitemprocessinstruction}{
+ D(){} % default
+ O{} % \index []
+ m % instruction char
+ o % form of instruction char, if different from #3
+ D(){} % instruction modifiers
+ m % first line
+ >{\ReverseBoolean} s % typeset processor signature?
+ >{\SplitArgument {3} {&} } m % processor signature
+}{%
+ \write\@auxout{\unexpanded{\gappto\bigbadprocesslist{[{#3}[{#6}]]}}}%
+ \IfValueTF{#4}{%
+ \indexitem(#1)[set={form={#4},index form={#4{\protect\ \protect\rm\protect\scriptsize (#6)}},#2}]{processor>#3}#5 #6%
+ }{%
+ \indexitem(#1)[set={index form={#3{\protect\ \protect\rm\protect\scriptsize (#6)}},#2}]{processor>#3}#5 #6%
+ }%
+ \IfBooleanT{#7}{\hfill\processorsignature#8}%
+
+}{}
+\makeatother
+
+\newcommand\processorsignature[4]{%
+ #1 \textcolor{darkgreen}{\eye} #2
+ $\longrightarrow$
+ #3 \textcolor{darkgreen}{\eye} #4%
+}
+
+
+\begin{syntax}
+
+\begin{indexitemprocessinstruction}[index key=_]{noop}[\_]([$n$]){no-op}
+ {&\meta{arg}&\meta{arg}&}
+
+ The argument is not processed, but simply skipped over. In other words, this instruction only
+ moves the head one item to the right. (This is like |expl3|'s argument specifier |n|.)
+
+ $n$ means repetition.
+
+ When the end of the instructions is reached, any remaining arguments on the right are processed
+ using this no-op instruction.
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{o}([$n$]){expand \protect\emph{o}nce}
+ {&\meta{arg}&\meta{result}&}
+
+ \meta{arg} is expanded once. (This is like |expl3|'s argument specifier |o|).
+
+ The operation is repeated $n$ times (default, one) without moving the head between the
+ repetition. For example, |o3| expands the argument three times (and then moves the head right).
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{x}{fully e\protect\emph{x}pand}
+ {&\meta{arg}&\meta{result}&}
+
+ \meta{arg} is fully expanded using |\edef|. (This is like |expl3|'s argument specifier |x|.)
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{O}([$n$]){\protect\emph{o}ption}
+ {&\meta{option}&\meta{result}&}
+
+ \meta{option}=\alternative{\meta{option name},\meta{relative node name}\texttt{.}\meta{option name}}
+
+ In the former case, \meta{result} is the value of option at the current node, in the latter, the
+ value of option at the node referred to by \meta{relative node name}.
+
+ $n$ means repetition.
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{R}([$n$]){\protect\emph{r}egister}
+ {&\meta{register}&\meta{result}&}
+
+ \meta{result} is the value of register \meta{register}.
+
+ $n$ means repetition.
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{p}([$n$]){\protect\emph{p}rocess}
+ {&\index{meta>process}&\meta{result}&}
+
+ Execute an embedded call of the argument processor.
+ The embedded argument processor may return any number of items.
+
+ $n$ means repetition.
+
+\begin{forestexample}[index={processor>p,processor>O,processor>w,processor>noop,grow',forked edges,content,handler>process}]
+ \begin{forest}
+ grow'=0, phantom,
+ delay={for children={
+ content/.process={_O= ? ~p~}
+ {}{content}
+ {_{No content was given, so there's nothing to do.}}
+ {Ow1{content}{We have content (##1), so we compute:
+ $##1+42=\the\numexpr ##1+42$}}
+ }}
+ [[][3][][5]]
+ \end{forest}
+\end{forestexample}
+
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{P}([$n$]){\protect\emph{p}gfmath}
+ {&\meta{pgfmath}&\meta{result}&}
+
+ \meta{result} is the result of evaluating \meta{pgfmath expr} using |\pgfmathparse|.
+
+ $n$ means repetition.
+
+ Combining \index{processor>P} and \index{processor>w}, \index{handler>process} is capable of anything
+ \index{wrap $n$ pgfmath args} can do. Even better, as we can combine pgfmath and non-pgfmath
+ methods, computations that use \index{handler>process} can be (much!) faster. Study the following
+ examples to see how less and less pgfmath is used to achieve the same result --- but note that
+ such extreme antipgfmathism probably only makes sense for style/package developers in computations
+ that get performed many times.
+
+\begin{forestexample}[index={handler>process,processor>w,processor>O,processor>W,processor>P,processor>+}]
+ \begin{forest}
+ [,grow'=east, where level=1{}{phantom,ignore,ignore edge}
+ [(a),delay={content/.wrap 4 pgfmath args={#1 $#2*#3=#4$}
+ {content}{content("!1")}{content("!2")}{int(content("!1")*content("!2"))}}
+ [6][7]]
+ [(b),delay={content/.process={O OO~P~ w4}
+ {content}
+ {!1.content}{!2.content}{int(content("!1")*content("!2"))}
+ {#1 $#2*#3=#4$}}
+ [6][7]]
+ [(c),delay={content/.process={O OO ~W2+P~ w4}
+ {content}
+ {!1.content}{!2.content}{int(#1*#2)}
+ {#1 $#2*#3=#4$}}
+ [6][7]]
+ [(d),delay={content/.process={O OO ~W2+n~ w4}
+ {content}
+ {!1.content}{!2.content}{#1*#2}
+ {#1 $#2*#3=#4$}}
+ [6][7]]
+ ]
+ \end{forest}
+\end{forestexample}
+
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{n}([$n$]){\protect\emph{n}umexpr}
+ {&\meta{numexpr}&\meta{result}&}
+
+ \meta{result} is the result of evaluating \meta{dimexpr} using e\TeX's |\number\numexpr|.
+
+ $n$ means repetition.
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{d}([$n$]){\protect\emph{d}imexpr}
+ {&\meta{dimexpr}&\meta{result}&}
+
+ \meta{result} is the result of evaluating \meta{dimexpr} using e\TeX's |\the\dimexpr|.
+
+ $n$ means repetition.
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{+}([$n$]){chain instructions}
+ {\meta{arg}&&&\meta{arg}}
+
+ This action allows one to ``process the same argument more than once''. It does not process the
+ current argument (in fact, there need not be any current argument), but rather moves the last
+ result back in the argument queue. In other words, our machine's head moves one step left. You
+ can also imagine it as an inverse of \index{processor>noop}.
+
+ $n$ means repetition.
+
+\end{indexitemprocessinstruction}
+
+\begin{forestexample}[index={handler>process,processor>O,processor>noop}]
+ \begin{forest}
+ test/.style n args={3}{align=center,
+ content={The value of my option \texttt{#1} is \texttt{#2}.\\#3}}
+ [~fit~,delay={test/.process={O ~O+O~}{content}~{content}~{Yes it is!}}]
+ \end{forest}
+\end{forestexample}
+
+
+\begin{indexitemprocessinstruction}{w}([$n$]){(consuming) \protect\emph{w}rap}
+ {\meta{arg$_{1}$}\dots\meta{arg$_{n}$}&\meta{macro body}&\meta{result}&}
+\end{indexitemprocessinstruction}
+\itemnosep[2pt]
+\begin{indexitemprocessinstruction}{W}([$n$]){(non-consuming) \protect\emph{w}rap}
+ {\meta{arg$_{1}$}\dots\meta{arg$_{n}$}&\meta{macro body}&
+ \meta{arg$_{1}$}\dots\meta{arg$_{n}$}\meta{result}&}
+
+ Defines a temporary macro with $n$ undelimited arguments using the \meta{macro body} given on the
+ right and expands it (once). The arguments given to the temporary macro are taken from the left:
+ \meta{arg$_{1}$}\dots\meta{arg$_{n}$}. The result of the expansion is stored as \meta{result} to
+ the right.
+
+ With |w|, \meta{arg$_{1}$}\dots\meta{arg$_{n}$} are ``consumed'', i.e.\ they are removed from the
+ result list on the left. |W| keeps \meta{arg$_{1}$}\dots\meta{arg$_{n}$} in the result list.
+
+ Default $n$ is 1. (Specifying $n>9$ raises an error.)
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}[index key=\&]{and}[\&]([$n$]){boolean ``and''}*{}
+\end{indexitemprocessinstruction}
+\itemnosep[2pt]
+\begin{indexitemprocessinstruction}[index key=\&or]{or}[\protect\indexpipe]([$n$]){boolean ``or''}
+ {\protect\meta{arg$_{1}$}\protect\meta{arg$_{2}$}&&\meta{result}&}
+
+ \meta{result} is a boolean conjunction/disjunction of $n$ arguments. The arguments are taken from
+ the left. They should be numbers (positive integers): |0| means false, any other number means
+ true. The \meta{result} is always |0| or |1|.
+
+ Default $n$ is 2.
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}[index key=!]{not}[!]{boolean ``not''}
+ {\meta{arg}&&\meta{result}&}
+
+ \meta{result} is a boolean negation of the argument. The argument is taken from the left. It
+ should be a number (positive integer): |0| means false, any other number means true. The
+ \meta{result} is always |0| or |1|.
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{?}{conditional (if \protect\dots\ then \protect\dots\ else)}
+ {\meta{condition}&\meta{true arg}\meta{false arg}&&\meta{result}}
+
+ \meta{result} is \meta{true arg} is \meta{condition} is true (non-zero), otherwise \meta{false
+ arg}.
+
+ The condition is taken from the left. The true and false arguments are expected on the right,
+ where the winner is left as well.
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}[index key={=}]{equal}[=]{comparison: $\protect\meta{arg$_{1}$}=\protect\meta{arg$_{2}$}$?}*{}
+\end{indexitemprocessinstruction}
+\itemnosep[1pt]
+\begin{indexitemprocessinstruction}[index key={<}]{lt}[<]{comparison: $\protect\meta{arg$_{1}$}<\protect\meta{arg$_{2}$}$?}*{}
+\end{indexitemprocessinstruction}
+\itemnosep[1pt]
+\begin{indexitemprocessinstruction}[index key={<<}]{gt}[\protect\greaterthan]{comparison: $\protect\meta{arg$_{1}$}\protect\greaterthan\protect\meta{arg$_{2}$}$?}
+ {\meta{arg$_{1}$}\meta{arg$_{2}$}&&\meta{result}&}
+
+ Compare \meta{arg$_{1}$} and \meta{arg$_{2}$}, returning |1| (true) if \meta{arg$_{1}$} is equal
+ to / less than / greater than \meta{arg$_{2}$}, |0| (false) otherwise.
+
+ The arguments are taken from the left. They can be either numbers, dimensions, text or token
+ lists. Both arguments are expected to be of the same type. The type of comparison is determined
+ by the type of the result returned by the last instruction.
+ \index{processor>O}/\index{processor>R} look up the type of option/register to determine the type
+ (booleans are numbers and keylists are toks). Text type must be marked explicitely using
+ \index{processor>t}.
+
+ Comparison is carried out using |\ifnum| for numbers, |\ifdim| for dimensions (this includes
+ unitless decimals returned by pgfmath) and |\pdfstrcmp|\footnote{\texttt{\string\pdfstrcmp}
+ expands its arguments.} for text --- for these three types, all three comparison operators are
+ supported. For generic token lists, only |=| makes sense and is carried out using |\ifx|.
+
+ In the following example, (a) performs lexicographical comparison because we have marked |21| as
+ text; (b) and (c) perform numeric comparison: in (b), the type is automatically determined from
+ the type of register \indexex{tempcounta}, in (c) |21| is marked manually using \index{processor>n}.
+
+\begin{forestexample}[index={if,processor>gt,processor>lt}]
+ \forestset{
+ tempcounta=100,
+ TeX/.process={Rw1}{tempcounta}{$#1>21$?\ },
+ TeX={(a)\ }, if={>{Rt>}{tempcounta}{21}}{TeX=yes}{TeX=no},TeX={,\ },
+ TeX={(b)\ }, if={>{_R<}{21}{tempcounta}}{TeX=yes}{TeX=no},TeX={,\ },
+ TeX={(c)\ }, if={>{Rn>}{tempcounta}{21}}{TeX=yes}{TeX=no},
+ }
+\end{forestexample}
+
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{t}{mark as \protect\emph{t}ext}
+ {&\meta{arg}&\meta{arg}&}
+
+ The result is not changed, only its type is changed to text. This is relevant only for
+ comparisons --- both argument processor's comparisons \index{processor>equal}, \index{processor>gt}
+ and \index{processor>lt} and sort keys (see \index{sort by}).
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{c}{to lowercase}
+ {&\meta{arg}&\meta{result}&}
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{C}{to uppercase}
+ {&\meta{arg}&\meta{result}&}
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{-}{toggle ascending/descending order (negate)}
+ {\meta{arg}&&\meta{result}&}
+
+ If the argument is of the text type, its sorting order is changed from ascending to descending or
+ vice versa.
+
+ For any numerical argument type (number, dimension, unitless dimension), the argument is actually
+ negated, which obviously has the same effect on sorting.
+
+ For generic type arguments, this operation is a no-op.
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{u}{\protect\emph{u}ngroup}
+ {&\meta{arg}&&\meta{item$_1$}\dots\meta{item$_n$}}
+
+ As every \TeX\ undelimited macro argument, \meta{arg} is a list of tokens or braced token lists.
+ This instruction puts those items back to the right as ``separate arguments''.
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{s}([$n$]){(consuming) \protect\emph{s}ave}
+ {\meta{arg$_{1}$}\dots\meta{arg$_{n}$}&&&}
+\end{indexitemprocessinstruction}
+\itemnosep[2pt]
+\begin{indexitemprocessinstruction}{S}([$n$]){(non-consuming) \protect\emph{s}ave}
+ {\meta{arg$_{1}$}\dots\meta{arg$_{n}$}&&\meta{arg$_{1}$}\dots\meta{arg$_{n}$}&}
+
+ Saves the last $n$ arguments from the left into a ``special place''.
+
+ With |s|, \meta{arg$_{1}$}\dots\meta{arg$_{n}$} are ``consumed'', i.e.\ they are removed from the
+ result list on the left. |S| keeps \meta{arg$_{1}$}\dots\meta{arg$_{n}$} in the result list.
+
+ Default $n$ is 1.
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{l}([$n$]){(consuming) \protect\emph{l}oad}
+ {&&\meta{arg$_{1}$}\dots\meta{arg$_{n}$}&}
+\end{indexitemprocessinstruction}
+\itemnosep[2pt]
+\begin{indexitemprocessinstruction}{L}([$n$]){(non-consuming) \protect\emph{l}oad}
+ {&&\meta{arg$_{1}$}\dots\meta{arg$_{n}$}&}
+
+ Loads last $n$ arguments from the ``special place'' to the left.
+
+ With |l|, \meta{arg$_{1}$}\dots\meta{arg$_{n}$} are ``consumed'', i.e.\ they are removed from the
+ special place. |S| keeps \meta{arg$_{1}$}\dots\meta{arg$_{n}$} in the special place.
+
+ The default $n$ is 0 and indicates that the entire special place should be loaded.
+\end{indexitemprocessinstruction}
+
+\begin{indexitemprocessinstruction}{r}{\protect\emph{r}everse (key)list}
+ {&\meta{list}&\meta{result}&}
+
+ \meta{list} should be a comma-separated list (\emph{not} a name of a keylist option or register).
+ \meta{result} contains the same elements in the reverse order.
+\end{indexitemprocessinstruction}
+
+\end{syntax}
+
+
+
+
+
+\subsection{Aggregate functions}
+\label{ref:aggregate-functions}
+
+Aggregate functions walk a nodewalk and use the information found in the visited nodes to calculate
+something.
+
+All aggregate functions are available both as key handlers and |pgfmath| functions.
+
+
+
+\begin{syntax}
+ \indexitem{aggregate>count}|=|\meta{nodewalk},
+ \indexdef[form={aggregate_count}]{pgfmath>aggregate count}|("|\meta{nodewalk}|")|
+
+ Store the number of nodes visited in the nodewalk into the handled option.
+
+\indexitem{aggregate>sum}|=|\index{forestmath}\meta{nodewalk},
+\indexdef[form={aggregate_sum}]{pgfmath>aggregate sum}|("|\index{forestmath}|","|\meta{nodewalk}|")|
+\itemnosep
+
+\indexitem{aggregate>average}|=|\index{forestmath}\meta{nodewalk},
+\indexdef[form={aggregate_average}]{pgfmath>aggregate average}|("|\index{forestmath}|","|\meta{nodewalk}|")|
+\itemnosep
+
+\indexitem{aggregate>product}|=|\index{forestmath}\meta{nodewalk},
+\indexdef[form={aggregate_product}]{pgfmath>aggregate product}|("|\index{forestmath}|","|\meta{nodewalk}|")|
+\itemnosep
+
+\indexitem{aggregate>min}|=|\index{forestmath}\meta{nodewalk},
+\indexdef[form={aggregate_min}]{pgfmath>aggregate min}|("|\index{forestmath}|","|\meta{nodewalk}|")|
+\itemnosep
+
+\indexitem{aggregate>max}|=|\index{forestmath}\meta{nodewalk},
+\indexdef[form={aggregate_max}]{pgfmath>aggregate max}|("|\index{forestmath}|","|\meta{nodewalk}|")|
+
+Calculate the value of the given \index{forestmath} expression at each visited node. Store the sum /
+average / product / minimum / maximum of these values into the handled option (handlers) or return
+it (pgfmath functions).
+
+\indexitem{aggregate>aggregate}|=|\index{forestmath=start value}\index{forestmath=every
+ step}\index{forestmath=after walk}\meta{nodewalk}
+\itemnosep
+\indexitem{pgfmath>aggregate}|("|\index{forestmath=start value}|","|\index{forestmath=every step}|","|\index{forestmath=after walk}|","|\meta{nodewalk}|")|
+
+The generic aggregate function. First, register \index{aggregate result} is set to
+\index{forestmath=start value}. Then, the given nodewalk is walked. After each step of the
+\meta{nodewalk}, \index{forestmath=every step} expression is evaluated in the context of the new
+current node and stored into \index{aggregate result}. After the walk, the current node is reset to
+the origin. \index{forestmath=after walk} expression is then evaluated in its context and stored
+into \index{aggregate result} as the final result.
+
+Use \index{aggregate result} and \index{aggregate n} in the \index{forestmath} expressions to refer to
+the current result value and step number.
+
+\indexitem{register>aggregate n}|=|\meta{count} the current step number
+
+In the every-step expression of an aggregate function, refers to the (real) step number in the
+aggregate's \meta{nodewalk}. In the after-walk expression, refers to the total number of (real)
+steps made.
+
+\indexitem{register>aggregate result}|=|\meta{toks} the current value of the result
+
+ This register is where the intermediate results are stored.
+
+\indexitem{register>aggregate value}|=|\meta{toks} the value of the expression at the current node
+
+This only applies to special aggregates like \index{aggregate>sum}, not to the generic
+\index{aggregate>aggregate}.
+
+\indexitem{node key>aggregate postparse}|=|\alternative{none,int,print,macro}
+
+Roughly speaking, how should the result be formatted? For details, see \citep[\S89]{tikzpgf3.0.0}.
+Applies only to |pgfmath| versions of aggregate functions, i.e.\ not to the |'| variants.
+
+ \begin{syntax}
+ \item\indexdef{value of=aggregate postparse>none}
+ No formatting.
+ \item\indexdef{value of=aggregate postparse>int}
+ The result is an integer.
+ \item\indexdef{value of=aggregate postparse>print}
+ Use |pgf|'s number printing extension, see \citep[\S93]{tikzpgf3.0.0}.
+ \item\indexdef{value of=aggregate postparse>macro}
+ Use a custom macro. Specify the macro using \indexdef{node key>aggregate postparse macro}|=|\meta{cs}.
+ \end{syntax}
+
+\end{syntax}
+
+Example 1. Randomly generate the content of leaves. The content of a parent is the sum of its
+children's content. Note how we use \indexex{tree children-first} to proceed in a bottom-up
+fashion.
+
+\begin{forestexample}[index={delay,aggregate postparse,for step,tree children-first,if option,n children,content,pgfmath,sum,step>children}]
+ \begin{forest}
+ delay={
+ aggregate postparse=int,
+ for tree children-first={
+ if n children=0
+ {content/.pgfmath={random(0,100)}}
+ {content/~.sum~={content}{children}}
+ }
+ }
+ [[[[][]][]][[][][[][][]]][[][[][]]]]
+ \end{forest}
+\end{forestexample}
+
+ Example 2: nested aggregate functions. We are given the black numbers. The inner aggregate, the
+ sum of children, is applied at every blue node. (See how we actually display the blue numbers by
+ storing \index{aggregate value} to \index{content}.) The outer aggregate stores the maximum blue
+ number into the red root.
+
+\begin{forestexample}
+ \begin{forest}
+ delay={
+ aggregate postparse=int,
+ content/~.max~=%
+ {~aggregate_sum~("content","children")}%
+ {every step={content/.register=~aggregate value~},children}%
+ } [ [[1][2][3]] [[3][4][5]] [[2][3][4]] ]
+ \end{forest}
+\end{forestexample}
+
+Example 3: calculate root mean square of children using the generic \index{aggregate>aggregate} handler.
+
+\begin{forestexample}
+ \begin{forest}
+ delay={
+ content/~.aggregate~=
+ {0}{~aggregate_result~()+content()^2}{sqrt(~aggregate_result~/~aggregate_n~)}
+ {children}
+ }
+ [[0][1][2][3][4]]
+ \end{forest}
+\end{forestexample}
+
+\subsection{Relative node names}
+\label{ref:relative-node-names}
+
+\begin{syntax}
+\indexitem{meta>relative node name}|=|[\meta{forest node name}][\indexdef[set={code}]>{!}\meta{nodewalk}]
+
+ \meta{relative node name} refers to the \foRest; node at the end of the \meta{nodewalk}
+ starting at node named \meta{forest node name}. If \meta{forest node name} is omitted, the walk
+ starts at the current node. If \meta{nodewalk} is omitted, the ``walk'' ends at the start
+ node. (Thus, an empty \meta{relative node name} refers to the current node.)
+
+ The \meta{nodewalk} inherits its history from the outer nodewalk (if there is one). Its every-step
+ keylist is empty.
+\end{syntax}
+
+Relative node names can be used in the following contexts:
+\begin{itemize}
+\item \FoRest;'s |pgfmath| option functions (\S\ref{ref:pgfmath}) take a relative node name as
+ their argument, e.g.\ |content("!u")| and |content("!parent")| refer to the content of the
+ parent node.
+\item An option of a non-current node can be set by \meta{relative node name}|.|\meta{option
+ name}|=|\meta{value}, see \S\ref{sec:option-setting}.
+\item The |forest| coordinate system, both explicit and implicit; see \S\ref{ref:forest-cs}.
+\end{itemize}
+
+\subsection{The \texttt{forest} coordinate system}
+\label{ref:forest-cs}
+
+Unless package options \index{tikzcshack} is set to |false|, \TikZ;'s implicit node coordinate
+system \citep[\S13.2.3]{tikzpgf2.10} is hacked to accept relative node names.\footnote{Actually,
+the hack can be switched on and off on the fly, using \cmdname{i}\keyname{foresttikzcshack}.}.
+
+The explicit \texttt{forest} coordinate system is called simply |forest| and used like this:
+|(forest_cs:|\meta{forest cs spec}|)|; see \citep[\S13.2.5]{tikzpgf2.10}. \meta{forest cs spec}
+is a keylist; the following keys are accepted.
+
+\begin{syntax}
+\indexitem{forest cs>name}|=|\meta{node name} The node with the given name becomes the current node. The
+resulting point is its (node) anchor.
+\indexitem{forest cs>id}|=|\meta{node id} The node with the given name becomes the current node. The
+resulting point is its (node) anchor.
+\indexitem{forest cs>go}|=|\meta{nodewalk} Walk the given nodewalk, starting at the current node. The
+ node at the end of the walk becomes the current node. The resulting point is its (node) anchor.
+ The embedded \meta{nodewalk} inherits history from the outer nodewalk.
+\indexitem{forest cs>anchor}|=|\meta{anchor} The resulting point is the given anchor of the current node.
+\indexitem{forest cs>l}|=|\meta{dimen} \vspace{-\parskip}
+\indexitem{forest cs>s}|=|\meta{dimen} Specify the \index{option>l} and \index{option>s}
+coordinate of the resulting point.
+
+The coordinate system is the node's ls-coordinate system: its origin is at its (node) anchor; the
+l-axis points in the direction of the tree growth at the node, which is given by option
+\index{grow}; the s-axis is orthogonal to the l-axis; the positive side is in the
+counter-clockwise direction from |l| axis.
+
+The resulting point is computed only after both \index{option>l} and \index{option>s} were given.
+\item Any other key is interpreted as a \index{relative node name}[.\meta{anchor}].
+\end{syntax}
+
+
+\subsection{Anchors}
+\label{sec:anchors}
+
+\FoRest; defines several anchors which can be used with any \TikZ; node belonging to a \FoRest;
+tree (manually added \TikZ; nodes are thus excluded).
+
+\newcommand\indexdefneganchor[1]{\indexdef[index key=#1]{anchor>-#1}}
+\begin{syntax}
+\indexitem{anchor>parent anchor}\itemnosep
+\indexitem{anchor>child anchor}\itemnosep
+\indexitem{anchor>anchor}
+
+ These anchors point to coordinates determined by node options \index{option>parent anchor},
+ \index{option>child anchor} and \index{option>anchor}.
+
+\indexitem{anchor>parent}, \indexdef{anchor>parent'}, \indexdefneganchor{parent}, \indexdefneganchor{parent'}\itemnosep
+\indexitem{anchor>parent first}, \indexdef{anchor>parent first'}, \indexdefneganchor{parent first}, \indexdefneganchor{parent first'}\itemnosep
+\indexitem{anchor>first}, \indexdef{anchor>first'}\itemnosep
+\indexitem{anchor>children first}, \indexdef{anchor>children first'}, \indexdefneganchor{children first}, \indexdefneganchor{children first'}\itemnosep
+\indexitem{anchor>children}, \indexdef{anchor>children'}, \indexdefneganchor{children}, \indexdefneganchor{children'}\itemnosep
+\indexitem{anchor>children last}, \indexdef{anchor>children last'}, \indexdefneganchor{children last}, \indexdefneganchor{children last'}\itemnosep
+\indexitem{anchor>last}, \indexdef{anchor>last'}\itemnosep
+\indexitem{anchor>parent last}, \indexdef{anchor>parent}, \indexdefneganchor{parent last},\indexdefneganchor{parent last'}
+
+Growth direction based anchors.
+
+ \TikZ;'s ``compass anchors'' |east|, |north| etc.\ resolve to coordinates on the border of the
+ node facing east, north etc.\ (for the shapes that define these anchors). The above \FoRest;'s
+ anchors are similar in that they also resolve to coordinates on the border of the node. However,
+ the ``cardinal directions'' are determined by the \index{grow}th direction of the tree in the node
+ and its parent:
+
+ \begin{itemize}
+ \item anchor |parent| faces the parent node (or, in case of the root, where the parent would be);
+ \item anchor |children| faces the children (or, in case of a node without children, where the children would be);
+ \item anchor |first| faces the first child (or \dots\ you get it, right?);
+ \item anchor |last| faces the last child (or \dots\ you know!).
+ \end{itemize}
+ Combinations like |children_first| work like combinations of compass directions, e.g.\
+ |north_west|, but note that
+ \begin{itemize}
+ \item when |first| and |last| are combined with |parent| into |parent_first| and |parent_last|,
+ they refer to the first and last child of the parent node, i.e.\ siblings of the current node.
+ \end{itemize}
+
+ While |first| and |last| always point in opposite directions, |parent| and |children| do not do so
+ if the \index{grow}th direction of the tree changes in the node, i.e.\ if the node's \index{grow}
+ differs from it's parent's \index{grow}. Thus in general, it is useful to have anchors |-parent|
+ and |-children|, which point in the opposite directions as |parent| and |children|, respectively,
+ and their combinations with |first| and |last|.
+
+ The |'| variants refer precisely to
+ the point where the cardinal growth direction intersects the border. Variants without |'| snap to
+ the closest compass anchor of the node.
+
+ These anchors work as expected even if the node is \index{rotate}d, or if the
+ children are \index{reversed}.
+
+ For simple examples, see definitions of \index{sn edges} and \index{roof}; for more involved
+ examples, see the \reflibrary{edges} library.
+\end{syntax}
+
+\begin{forestexample}[layout=tree on top]
+ \def\redorblue#1{\expandafter\redorbluei#1\END}%
+ \def\redorbluei#1#2\END{\expandafter\ifx#1-red\else blue\fi}%
+ \forestset{
+ draw anchors/.style n args=3{% #1=above, #2=below, #3='-variant of anchor?
+ tikz={
+ \foreach \a in {first,last,parent first,parent last,children,children last,#1}
+ {\fill[](.\a#3)circle[radius=1pt] node[above,font=\tiny,color=\redorblue\a]{\a#3};}
+ \foreach \a in {-parent first,-parent,-parent last,-children,-children first,#2}
+ {\fill[](.\a#3)circle[radius=1pt] node[below,font=\tiny,color=\redorblue\a]{\a#3};}
+ }
+ },
+ draw anchors/.default={parent,children first}{-children last}{},
+ }
+ \begin{forest}
+ for tree={
+ minimum width=10em, minimum height=13ex, s sep+=5em,
+ draw, draw anchors,
+ font=\tt, delay={content/.process=OOw2{grow}{reversed}{grow\ifnum#2=1'\fi=#1}}
+ }
+ [
+ [,rotate=20,draw anchors={parent,children first}{-children last}{'}]
+ [,for tree={grow'=0}, l sep+=5em, draw anchors={-children last}{parent,children first}{}
+ [,rotate=-60]
+ []
+ ]
+ ]
+ \end{forest}
+\end{forestexample}
+
+\subsection{Additional \texttt{pgfmath} functions}
+\label{ref:pgfmath}
+
+For every option and register, \foRest; defines a |pgfmath| function with the same name, with the
+proviso that the name might be mangled in order to conform to |pgfmath|'s naming rules. Specifically,
+all non-alphanumeric characters in the option/register name and the initial number, if
+the name starts with one, are replaced by an underscore |__| in the |pgfmath| function name.
+
+Pgfmath functions corresponding to options take one argument, a \index{relative node name}
+(see~\S\ref{ref:relative-node-names}) expression, making it possible to refer to option values of
+non-current nodes. The \meta{relative node name} expression must be enclosed in double quotes in
+order to
+prevent pgfmath evaluation: for example, to refer to the content of the parent, write
+\index{content}|("|\index>{!}|u")|. To refer to the option of the current node, use empty parentheses:
+\index{content}|()|.\footnote{In most cases, the parentheses are optional, so \texttt{content}
+is ok. A known case where this doesn't work is preceding an operator: \texttt{l+1cm} will fail.}
+
+If the \index{relative node name} resolves to the invalid node, these functions will an return empty
+token list (for \meta{toks} options), 0pt (for \meta{dimen} options) or 0 (for \meta{count}
+options).
+
+Note that the nodewalk in the relative node name inherits its history from the outer nodewalk (if
+there is one), so strange but useful constructions like the following are possible.
+
+\begin{forestexample}[index={tikz,wrap pgfmath arg,nodewalk,back,b,ancestors,register>every step}]
+ \begin{forest}
+ for tree={no edge},
+ before typesetting nodes={
+ for nodewalk={
+ c,
+ every step={
+ tikz/.wrap pgfmath arg=
+ {\draw[<-] ()--(#1);}
+ {name("~!b~")}
+ },
+ 21{up1},ancestors
+ }{}
+ },
+ [1[2[3]][4[5]]]
+ \end{forest}
+\end{forestexample}
+
+Boolean function \indexdef{pgfmath>valid} returns true if the node's \index{readonly option>id}$\neq0$, i.e.\ if the node is a real, valid node; see \S\ref{ref:spatial-propagators} and \S\ref{ref:nodewalks}. Boolean function \indexdef{pgfmath>invalid} is a negation of |valid|.
+
+\begin{syntax}
+\indexitem{pgfmath>min_l}|=(|\meta{nodewalk: node}|,|\meta{nodewalk: context node}|)| \itemnosep
+\indexitem{pgfmath>min_s}|=(|\meta{nodewalk: node}|,|\meta{nodewalk: context node}|)| \itemnosep
+\indexitem{pgfmath>max_l}|=(|\meta{nodewalk: node}|,|\meta{nodewalk: context node}|)| \itemnosep
+\indexitem{pgfmath>max_s}|=(|\meta{nodewalk: node}|,|\meta{nodewalk: context node}|)|
+
+ These functions return the minimum/maximum value of \index{option>l}/\index{option>s} of node at the end of \meta{nodewalk:
+ node} in the context (i.e.\ growth direction) of node at the end of \meta{nodewalk: context
+ node}.
+\end{syntax}
+
+Three string functions are also added to |pgfmath|: \indexdef{pgfmath>strequal} tests the equality of
+its two arguments; \indexdef{pgfmath>instr} tests if the first string is a substring of the second one;
+\indexdef{pgfmath>strcat} joins an arbitrary number of strings.
+
+\bigskip
+
+Some random notes on |pgfmath|: \begin{enumerate*}[(i)]
+\item |&&|, \verb!||! and |!| are boolean ``and'', ``or'' and ``not'', respectively.
+\item The equality operator (for numbers and dimensions) is |==|, \emph{not} |=|.
+\end{enumerate*} And some examples:
+
+\begin{forestexample}[layout=tree on top,index={for step,tree,grow',calign,option>l,l sep,option>child
+anchor,option>anchor,fit,tier,readonly option>level,delay,before typesetting nodes,content,wrap $n$ pgfmath args,pgfmath},index>={!}]
+ \begin{forest}
+ for tree={grow'=0,calign=first,l=0,l sep=2em,child anchor=west,anchor=base
+ west,fit=band,tier/.pgfmath=~level~()},
+ fullpath/.style={if n=0{}{content/.wrap 2
+ pgfmath args={##1/##2}{~content~("!u")}{~content~()}}},
+ delay={for tree=fullpath,content=/},
+ before typesetting nodes={for tree={content=\strut#1}}
+ [
+ [home
+ [joe
+ [\TeX]]
+ [saso
+ [\TeX]]
+ [a user with a long name
+ [\TeX]]]
+ [usr]]
+ \end{forest}
+\end{forestexample}
+
+\begin{forestexample}[point=instr,index={delay,for step,tree,conditional>if,content,n children}]
+ % mark non-phrasal terminal nodes
+ \begin{forest}
+ delay={for tree={if=
+ {!instr("P",~content~) && ~n_children~==0}
+ {fill=yellow}
+ {}
+ }}
+ [CP[DP][C'[C][TP[DP][T'[T][VP[DP][V'[V][DP]]]]]]]
+ \end{forest}
+\end{forestexample}
+
+{\def\useforestlibrary#1{}%
+\begin{forestexample}[point=instr,index={where option,n children,tier,content,no edge,tikz},index>={!}]
+ % roof terminal phrases
+ \useforestlibrary{linguistics}
+ % ...
+ \begin{forest}
+ delay={where n children=0{tier=word,
+ if={~instr~("P",~content~("!u"))}{roof}{}
+ }{}},
+ [VP[DP[Mary]][V'[V[loves]][DP[her cat]]]]
+ \end{forest}
+\end{forestexample}}
+
+
+\subsection{Standard node}
+\label{ref:standard-node}
+
+\begin{syntax}
+\indexitem{macro>forestStandardNode}\meta{node}\meta{environment fingerprint}\meta{calibration
+ procedure}\meta{exported options}
+
+ This macro defines the current \emph{standard node}. The standard node declares some options as
+ \emph{exported}. When a new node is created, the values of the exported options are initialized
+ from the standard node. At the beginning of every \index{forest} environment, it is checked whether
+ the \emph{environment fingerprint} of the standard node has changed. If it did, the standard
+ node is \emph{calibrated}, adjusting the values of exported options. The \emph{raison d'etre} for
+ such a system is given in \S\ref{tut:defaults}.
+
+ In \meta{node}, the standard node's content and possibly other options are specified, using the
+ usual bracket representation. The \meta{node}, however, \emph{must not contain children}. The
+ default: \texttt{[dj]}.
+
+ The \meta{environment fingerprint} must be an expandable macro definition. It's expansion
+ should change whenever the calibration is necessary.
+
+ \meta{calibration procedure} is a keylist (processed in the |/forest| path) which calculates the
+ values of exported options.
+
+ \meta{exported options} is a comma-separated list of exported options.
+
+ This is how the default standard node is created:
+\begin{lstlisting}
+ \forestStandardNode[dj]
+ {%
+ \forestOve{\csname forest@id@of@standard node\endcsname}{content},%
+ \the\ht\strutbox,\the\pgflinewidth,%
+ \pgfkeysvalueof{/pgf/inner ysep},\pgfkeysvalueof{/pgf/outer ysep},%
+ \pgfkeysvalueof{/pgf/inner xsep},\pgfkeysvalueof{/pgf/outer xsep}%
+ }
+ {
+ l sep={\the\ht\strutbox+\pgfkeysvalueof{/pgf/inner ysep}},
+ l={l_sep()+abs(max_y()-min_y())+2*\pgfkeysvalueof{/pgf/outer ysep}},
+ s sep={2*\pgfkeysvalueof{/pgf/inner xsep}}
+ }
+ {l sep,l,s sep}
+ \end{lstlisting}
+\end{syntax}
+
+\subsection{Externalization}
+\label{ref:externalization}
+
+Externalized tree pictures are compiled only once. The result of the compilation is saved into a
+separate |.pdf| file and reused on subsequent compilations of the document. If the code of the
+tree (or the context, see below) is changed, the tree is automatically recompiled.
+
+Externalization is enabled by:
+\begin{lstlisting}
+ \usepackage[~external~]{forest}
+ ~\tikzexternalize~
+\end{lstlisting}
+Both lines are necessary. \TikZ;'s externalization library is automatically loaded if necessary.
+
+\begin{syntax}
+\indexitem{node key>external/optimize} Parallels \keyname{/tikz/external/optimize}: if |true| (the
+default), the processing of non-current trees is skipped during the embedded compilation.
+\indexitem{node key>external/context} If the expansion of the macro stored in
+this option changes, the tree is recompiled.
+\indexitem{node key>external/depends on macro}|=|\meta{cs} Adds the definition of macro \meta{cs} to
+\keyname{external/context}. Thus, if the definition of \meta{cs} is changed, the tree will be
+recompiled.
+\end{syntax}
+
+\foRest; respects or is compatible with several (not all) keys and commands of \TikZ;'s
+externalization library. In particular, the following keys and commands might be useful; see
+\cite[\S32]{tikzpgf2.10}.
+\begin{itemize}
+\item\keyname{/tikz/external/remake next}
+\item\keyname{/tikz/external/prefix}
+\item\keyname{/tikz/external/system call}
+\item\cmdname{tikzexternalize}
+\item\cmdname{tikzexternalenable}
+\item\cmdname{tikzexternaldisable}
+\end{itemize}
+\FoRest; does not disturbe the externalization of non-\foRest; pictures. (At least it
+shouldn't \dots)
+
+The main auxiliary file for externalization has suffix |.for|. The externalized pictures have
+suffices |-forest-|$n$ (their prefix can be set by \keyname{/tikz/external/prefix}, e.g.\ to a
+subdirectory). Information on all trees that were ever externalized in the document (even if
+they were changed or deleted) is kept. If you need a ``clean'' |.for| file, delete it and
+recompile. Deleting |-forest-|$n$|.pdf| will result in recompilation of a specific tree.
+
+Using \keyname{draw tree} and \keyname{draw tree'} multiple times \emph{is} compatible with
+externalization, as is drawing the tree in the box (see \index{draw tree box}). If you are
+trying to externalize a \index{forest} environment which utilizes \index{TeX} to produce a
+visible effect, you will probably need to use \index{TeX'} and/or \index{TeX''}.
+
+\setcounter{CodelineNo}{0}
+\DocInput{forest-libs.dtx}
+
+\section{Gallery}
+\label{sec:gallery}
+
+\subsection{Decision tree}
+\label{sec:example-decision-tree}
+
+The following example was inspired by a question on \TeX\ Stackexchange:
+\href{http://tex.stackexchange.com/questions/39103/how-to-change-the-level-distance-in-tikz-qtree-for-one-level-only}{How to change the level distance in tikz-qtree for one level only?}. The question is about |tikz-qtree|: how to adjust the level distance for the first level only, in order to avoid first-level labels crossing the parent--child edge. While this example solves the problem (by manually shifting the offending labels; see \texttt{elo} below), it does more: the preamble is setup so that inputing the tree is very easy.
+
+\begin{forestexample}[layout=tree on top,index={if option,readonly option>n,no edge,tikz,strequal,strcat,option>child anchor,option>parent
+anchor,option>anchor,anchor>anchor,calign,for step,tree,s sep,option>l,n children,declare toks,delay,content,before typesetting nodes,descendants,keylist+=tikz,wrap pgfmath arg,wrap $n$ pgfmath args,split option},index>={!}]
+ \forestset{
+ declare toks={elo}{}, % Edge Label Options
+ anchors/.style={anchor=#1,child anchor=#1,parent anchor=#1},
+ dot/.style={tikz+={\fill (.child anchor) circle[radius=#1];}},
+ dot/.default=2pt,
+ decision edge label/.style n args=3{
+ edge label/.expanded={node[midway,auto=#1,anchor=#2,\forestoption{elo}]{\strut$\unexpanded{#3}$}}
+ },
+ decision/.style={if n=1
+ {decision edge label={left}{east}{#1}}
+ {decision edge label={right}{west}{#1}}
+ },
+ decision tree/.style={
+ for tree={
+ s sep=0.5em,l=8ex,
+ if n children=0{anchors=north}{
+ if n=1{anchors=south east}{anchors=south west}},
+ math content,
+ },
+ anchors=south, outer sep=2pt,
+ dot=3pt,for descendants=dot,
+ delay={for descendants={~split option~={content}{;}{content,decision}}},
+ }
+ }
+ \begin{forest} decision tree
+ [N,plain content
+ [I;{p_1=0.5},plain content,elo={yshift=4pt}
+ [{5,1};a]
+ [II;b,plain content
+ [{1,2};m]
+ [{2,3};n]
+ ]
+ ]
+ [II;{p_2=0.5},plain content,elo={yshift=4pt}
+ [;c
+ [{1,0};z]
+ [{2,2};t]
+ ]
+ [;d
+ [{3,1};z]
+ [{0,0};t]
+ ]
+ ] {\draw[dashed](!1.anchor)--(!2.anchor) node[pos=0.5,above]{I};}
+ ]
+ \end{forest}
+\end{forestexample}
+
+\setcounter{CodelineNo}{0}
+\DocInput{forest-index.dtx}
+
+\section{Past, present and future}
+\label{sec:changes}
+
+\paragraph{Roadmap} What's planned for future releases?
+\begin{itemize}
+\item filling up the libraries
+\item faster externalization
+\item custom-edge aware packing algorithm and a more flexible (successor of) \index{calign}
+\item support for specialized |forest| environments, including:
+ \begin{itemize}
+ \item selectable input parser,
+ \item namespaces (different function, different options),
+ \item better support for different output types.
+ \end{itemize}
+ In short, everything you need to make \foRest; your favourite spreadsheet! ;-)
+\item code cleanup and extraction of sub-packages possibly useful to other package writers
+\end{itemize}
+
+\subsection{Changelog}
+\label{sec:changelog}
+
+First of all, the list of all \index{compat} key values for backward compatibility, and their
+groupings. Remember, compat values that reside in styles with suffix |-most| are harmless: they will
+not disrupt the new functionality of the package. But take care when using stuff which only resides
+in |-all| styles.
+
+\lstinputregion{forest-compat.sty}{compat_keys}
+
+\newcommand\compatitem[2]{\item[,,in \texttt{-#1}]\texttt{compat=}\indexdef{value of=compat>#2}}
+
+\subsubsection{v2.1}
+
+\begin{description}
+\item[v2.1.5 (2017/07/14)] \mbox{}
+ Minor improvements:
+ \begin{itemize}
+ \item Smarter \index{baseline} defaults for the \reflibrary{linguistics} library.
+ \item Yield warning when the \index{baseline} is set to a node that is not drawn (e.g.\ a
+ \index{phantom} node).
+ \end{itemize}
+
+\item[v2.1.4 (2017/02/02)] \mbox{}
+
+ Performance:
+ \begin{itemize}
+ \item Reimplement some internals of the packing algorithm to avoid consuming the string pool in
+ documents with many trees. (We're about 10\% slower now, but (depending on the document) the
+ memory usage can drop up to five times!)
+ \end{itemize}
+
+ Bugfixes:
+ \begin{itemize}
+ \item Fix aggregate function \index{aggregate>count}.
+ \item Provide a workaround for a PGF bug: for coordinate-shaped nodes, |\positionnodelater|
+ provides dimensions with |pt| in a wrong catcode, so \index{max y} and friends did not work for
+ such nodes.
+ \end{itemize}
+
+\item[v2.1.3 (2017/01/27)] \mbox{}
+
+ Bugfixes:
+ \begin{itemize}
+ \item Update \index{nice empty nodes} to use \index{for step=\index{current and siblings}}.
+ \end{itemize}
+
+\item[v2.1.2 (2016/12/31)] \mbox{}
+
+ Bugfixes:
+ \begin{syntax}
+ \compatitem{all}{2.1.1-loops}
+ A level of hash doubling was unnecessarily introduced for the \meta{keylist} argument of all
+ loops (\S\ref{ref:loops}), and the \meta{nodewalk} argument of \index{process keylist'} and
+ \index{process delayed}. Use this key to revert to the old behaviour.
+ \end{syntax}
+
+ Minor improvements:
+ \begin{itemize}
+ \item Implemented key \index{also}.
+ \end{itemize}
+
+\item[v2.1.1 (2016/12/18)] \mbox{}
+
+ Minor improvements:
+ \begin{itemize}
+ \item Implemented argument processor instruction \index{processor>p}.
+ \end{itemize}
+
+ Bugfixes:
+ \begin{itemize}
+ \item Argument processor instruction \index{processor>u} introduced an extra layer of braces
+ around each result item.
+ \item Argument processor instructions \index{processor>l} and \index{processor>L} did not always
+ load the desided number of arguments.
+ \item Argument processor instructions \index{processor>and} and \index{processor>or} were taking
+ the arguments from the start of the left side instead of its end.
+ \end{itemize}
+
+\item[v2.1 (2016/12/05)] \mbox{}
+
+ Backward incompatible changes (with a \index{compat} key):
+ \begin{syntax}
+ \compatitem{all}{2.0-edges}
+ This compat key groups the three changes listed below: the final two depend on the first, so you
+ will probably want to revert them all or none.
+ \begin{syntax}
+ \compatitem{all}{2.0-anchors}
+ This is really a bugfix. Growth direction based anchors \index{anchor>parent},
+ \index{anchor>parent first} and \index{anchor>parent last} were not facing to the direction of the
+ parent if the growth direction of the tree changed at the node.
+ \compatitem{all}{2.0-forkededge}
+ \compatitem{all}{2.0-folder}
+ Update the code of keys \index{forked edge} (and friends) and \index{folder} from the
+ \reflibrary{edges} library to reflect the above bugfix.
+ \end{syntax}
+ \compatitem{all}{2.0-delayn} Fixing yet another bug in \index{delay n}! The number of cycles was
+ reevaluated at each cycle. Now it is computed immediately, and fixed. Use this key to revert to
+ the old behaviour.
+ \end{syntax}
+
+ Performance:
+ \begin{itemize}
+ \item Substantially enhance the argument processor (\S\ref{ref:argument-processor}), including the
+ ability to use it as a drop-in replacement for |pgfmath|.
+ \item Internally, avoid using |\pgfmathparse| and friends whereever possible.
+ \item Implement a fast set of macros to determine if a |pgfmath| expression is just a \meta{count}
+ or \meta{dimen} expression.
+ \item Optimize \index{split option} and \index{split register}.
+ \end{itemize}
+ Minor improvements:
+ \begin{itemize}
+ \item Allow \index{relative node name}s in \index{handler>option}.
+ \item Make aggregate functions (\S\ref{ref:aggregate-functions}) nestable and implement their
+ |pgfmath| versions.
+ \item Implement
+ \index{if dimen GT=\meta{dimen option}}, \index{if dimen LT=\meta{dimen option}},
+ \index{if count GT=\meta{count option}}, \index{if count LT=\meta{count option}},
+ \index{where dimen GT=\meta{dimen option}}, \index{where dimen LT=\meta{dimen option}},
+ \index{where count GT=\meta{count option}} and \index{where count LT=\meta{count option}},
+ \item Implement \index{if current nodewalk empty}.
+ \item Implement nodewalk steps \index{leaves}, \index{-level} and \index{-level'}.
+ \item Implement nodewalk operation \index{unique}.
+ \item Implement \index{nodewalk key>on invalid} values \index{value of=on invalid>error if real} and \index{value of=on invalid>last valid}, remove value |step| (no \index{compat} key, as it was broken and useless).
+ \item Implement `-` anchors (\index{anchor>-parent} etc.).
+ \item Implement \index{save and restore register}.
+ \item Implement \index{handler>nodewalk style}.
+ \item Implement \index{forestloopcount}.
+ \item Allow multiple occurrences of package option \index{compat}.
+ %\item Implement \index{foresttypeouttrees}.
+ %\item Implement \index{show register}.
+ \end{itemize}
+
+ Bugfixes:
+ \begin{itemize}
+ \item Fix a bug in externalization (|\forest@file@copy| set |\endlinechar| to |-1|, which caused
+ problems for several packages, e.g. |biblatex|).
+ \item Fix a bug in \index{delay n}: the number of cycles was reevaluated at each cycle.
+ \item Fix a bug in \index{fixed edge angles}.
+ \item Fix \index{compat} key values \index{value of=compat>silent}, \index{value of=compat>1.0-forstep} and \index{value of=compat>1.0-stages}.
+ \item Fix invocations of spatial propagators \index{for step=\index{step>nodewalk}} and \index{for step=\index{step>Nodewalk}} and \index{node key>Nodewalk}.
+ \item Fix invocations of \index{for step=group}, \index{for step=next on tier} and \index{for step=previous on tier}.
+ \item Fix behaviour of \index{for step=next on tier}, \index{for step=previous on tier} and \index{for step=to tier} on arrival to the invalid node.
+ \item Fix problems with interaction between \index{folder} and \index{forked edges}.
+ \end{itemize}
+
+\end{description}
+
+\subsubsection{v2.0}
+
+
+\begin{description}
+\item[v2.0.3 (2016/04/03)] \mbox{}
+
+ Backward incompatible changes (with a \index{compat} key):
+ \begin{syntax}
+ \compatitem{all}{2.0.2-delayn}
+ \compatitem{all}{2.0.2-wrapnpgfmathargs}
+
+ This is really a bugfix: keys \index{delay n} and \index{wrap $n$ pgfmath args} (for $n\geq 2$)
+ were introducing two layers of hash doubling. Now this confusing behaviour is gone, but as
+ finding the correct number of hashes is always a tough job, \index{compat} keys are provided.
+ \end{syntax}
+
+ Improvements:
+
+ \begin{itemize}
+ \item Rework \index{draw tree edge} so that by default, an edge is drawn only it both its node and
+ its node's parent are drawn. And yes, implement \index{if node drawn}.
+ \item Implement circularity detection in dynamic node operations.
+ \item Implement debug categories and debugging of dynamic node operations.
+ \item Declare some further |tempdim...| registers.
+ \item Make option \index{readonly option>id} accessible via \index{forestoption}.
+ \end{itemize}
+
+ Bugfixes:
+
+ \begin{itemize}
+ \item Execute \index{tikz} code for all (including phantom) nodes. (The feature of ignoring
+ phantom nodes was introduced in v2.0.2, but turns out it was a bad idea: for example, having a
+ phantom root with some tikz code is not uncommon.)
+ \item Keys \index{label} and \index{pin} now \emph{append} to option \index{tikz}, as makes sense.
+ \item Fix nodewalk steps \index{filter} and \index{branch} so that they can be embedded under
+ nodewalk operations. (Uh, and recategorize them as operations themselves.)
+ \item Execute \index{before packing node} even when the node has no children.
+ \item \index{step>level}|<={0}{...}| now works as expected.
+ \item Re-setting the node name to the same value doesn't yield an error anymore.
+ \item Don't add the separator when adding the first element to a keylist option or register.
+ \item Copy externalization files in TeX (don't rely on |\write18|).
+ \item Consistently store dimen options and registers with |pt|s of catcode other.
+ \item Properly initialize readonly count options (\index{readonly option>n}, \index{readonly option>n'}, \index{n children} and
+ \index{readonly option>level}).
+ \item Fix some typos.
+ \end{itemize}
+
+\item[v2.0.2 (2016/03/04)] \mbox{}
+
+ Backward incompatible changes:
+ \begin{itemize}
+ \item The semantics of the parenthesized optional argument to \index{forest} environment and
+ \index{Forest} macro has changed. The argument was introduced in v2.0.0: if present, it
+ redefined \index{style>stages} style for the current environment/macro. This argument is now
+ generalized to allow further (pre-\index{style>stages}) customization in future versions of the
+ package. To temporarily redefine \index{style>stages}, write |(|\index{option of=forest>stages}|={...})|.
+ \end{itemize}
+
+ New functionality:
+ \begin{itemize}
+ \item Key \index{last dynamic node} and named nodewalk \index{dynamic nodes}.
+ \item An optional argument to \index{useforestlibrary} to pass package options to libraries.
+ \item Handler \index{nodewalk style}.
+ \item Keys \index{draw tree node'}, \index{draw tree edge'} and \index{draw tree tikz'}.
+ \end{itemize}
+
+ Bugfixes:
+ \begin{itemize}
+ \item Fixed \index{replace by} when applied to the root node.
+ \item Registers are now initialized to an empty string, 0pt, or 0.
+ \item Packing doesn't destroy the current pgfpath anymore.
+ \item \index{forestStandardNode} now uses \index{name'}.
+ \item \index{draw tree edge} now respects \index{phantom}.
+ \end{itemize}
+
+\item[v2.0.1 (2016/02/20)] \mbox{}
+
+ New functionality:
+ \begin{itemize}
+ \item \index{current and siblings}, \index{current and siblings reversed}
+ \item Add |*| argument to \index{useforestlibrary}.
+ \end{itemize}
+
+ Bugfixes:
+ \begin{itemize}
+ \item Correctly mangle option/register names to pgfmath names (\S\ref{ref:pgfmath}).
+ \item Refer to parent (not node) anchor in \index{calign}|=|\index{edge midpoint}.
+ \item Accept key \index{history} in \index{step>Nodewalk} config.
+ \end{itemize}
+\item[v2.0.0 (2016/01/30)] \mbox{}\footnote{The year of the release date in the package was wrong \dots \ 2015.}
+
+ Backwards incompatible changes (\emph{without} a \index{compat} key --- sorry!):
+ \begin{itemize}
+ \item The unintended and undocumented way to specify defaults using |\forestset{.style={...}}|
+ (see question
+ \href{http://tex.stackexchange.com/questions/167972/making-a-certain-tree-style-the-default-for-forest}{Making
+ a certain tree style the default for forest} at \TeX\ SE) does not work anymore. (Actually, it
+ has never truly worked, and that's why it has not \index{compat} key.) Use \index{default
+ preamble}.
+ \item Renamed augmented assignment operator \meta{option}|-| for prepending to \meta{toks} and
+ \meta{keylist} options \index{+toks=\meta{option}}\index[not print]{+keylist}. A new
+ \index{keylist-=\meta{option}} is defined for keylist options and means ``delete key from keylist.''
+ \item Short nodewalk steps are not simply styles anymore: use \index{define short step} to
+ define them.
+ \end{itemize}
+
+ Backwards incompatible changes with a \index{compat} key:
+
+ \begin{syntax}
+ \compatitem{all}{1.0-stages}
+
+ Processing of \index{given options}, which is now exposed, and the new keylists \index{default
+ preamble} and \index{preamble} is now included at the start of the default \index{style>stages}
+ style. When changing \index{style>stages}, the instruction to process these keylists must now be
+ given explicitely.
+
+ \compatitem{all}{1.0-forstep}
+
+ In v1.0, a spatial propagator \index{for step=\meta{step}} could never fail. This turned out to
+ be difficult to debug. In this version, when a propagator steps ``out of the tree'', an error
+ is raised by default. Check out \index{option of=Nodewalk>on invalid} to learn how to simulate
+ the old behaviour without using this compatibility key.
+
+ \compatitem{all}{1.0-rotate}
+
+ This version of the package introduces
+ option \index{rotate} and \index{autoforward}s it to \index{node options}. This is needed to
+ handle the new \foRest; anchors (\S\ref{sec:anchors}). However, in some rare cases (like the
+ tree on the title page of this manual) it can lead to a discrepancy between the versions, as the
+ time when the value given to \index{rotate} is processed is different. |1.0-rotate| removes
+ option \index{rotate}.
+
+ \compatitem{all}{1.0-name}
+
+ Documentation of v1.0 requested that node names be unique, but this was not enforced by the
+ package, sometimes leading to errors. v2.0 enforces node name uniqueness. If this causes
+ problems, use this compatibility key. In most cases using \index{name'} instead of
+ \index{option>name} should fix the problem without using compatibility mode.
+
+ \item These keys have been renamed:
+
+ \begin{tabularx}{\linewidth}{lll}
+ old&new&\index{compat} key {\small (all but the last are in \texttt{-most})}\\\hline
+ \keyname{node walk}&\index{for step=nodewalk}\footnote{Nodewalks are much improved in v2.0, so some syntax and keys are different than in v1.0!}&\indexdef{value of=compat>1.0-nodewalk}\\
+ \keyname{for}&\index{for step=\index{group}}&\indexdef{value of=compat>1.0-for}\\
+ \keyname{for all next}&\index{for step=\index{following siblings}}&\indexdef{value of=compat>1.0-forall}\\
+ \keyname{for all previous}&\index{for step=\index{preceding siblings}}&\indexdef{value of=compat>1.0-forall}\\
+ \keyname{for ancestors'}&\index{for step=\index{current and ancestors}}&\indexdef{value of=compat>1.0-ancestors}\\
+ (\keyname{for}) \keyname{linear next}&(\index{for step}) \index{next node}&\indexdef{value of=compat>1.0-linear}\\
+ (\keyname{for}) \keyname{linear previous}&(\index{for step}) \index{previous node}&\indexdef{value of=compat>1.0-linear}\\
+ \keyname{triangle}&\index{roof} (library \reflibrary{linguistics})&\indexdef{value of=compat>1.0-triangle}\\
+ \keyname{/tikz/fit to tree}&\index{fit to}\keyname{=}\index{tree}\footnote{The v1.0 key \keyname{/tikz/fit to tree} also set \keyname{inner sep=0}; the v2.0 key \index{fit to} does not do that.}&\indexdef{value of=compat>1.0-fittotree}\\
+ \keyname{begin forest}, \keyname{end forest}&none (use \index{style>stages})&\index{1.0-stages}\\
+ \keyname{end forest}, \keyname{end forest}&none (use \index{style>stages})&\index{1.0-stages}\\
+ \end{tabularx}
+ \end{syntax}
+
+ Good news:
+ \begin{itemize}
+ \item Added temporal propagators \index{before packing node} and \index{after packing node}.
+ \item \emph{Much} improved nodewalks, see \S\ref{ref:nodewalks} and \S\ref{ref:spatial-propagators}.
+ \item Implemented looping mechanisms and more conditionals, see \S\ref{ref:conditionals}.
+ \item Implemented library support and started filling up the libraries:
+ \begin{itemize}
+ \item \reflibrary{linguistics}: \index{sn edges}, \index{nice empty nodes}, \index{draw
+ brackets}, \index{c-commanded} and \index{c-commanders}
+ \item \reflibrary{edges}: \index{forked edges} and \index{folder}
+ \end{itemize}
+ \item Implemented aggregate functions, see \S\ref{ref:aggregate-functions}.
+ \item Added key \index{default preamble}.
+ \item Implemented anchors \index{anchor>parent}, \index{anchor>children}, \index{anchor>first},
+ \index{anchor>last}, etc.
+ \item Added key \index{split} and friends.
+ \item Implemented sorting of children, see \S\ref{ref:dynamic}.
+ \item Introduced registers, see \S\ref{sec:options-and-registers}.
+ \item Implemented handlers \index{handler>option}, \index{handler>register} and \index{process args}.
+ \item Implemented several friends to \index{process keylist}, introduced \index{processing order}s
+ and \index{draw tree method}.
+ \item Added the optional argument |(|\meta{stages}|)| to the \index{forest} environment and
+ \index{Forest} macro.
+ \item Implemented \index{autoforward}ing.
+ \item Implemented flexible handling of unknown keys using \index{unknown to}.
+ \item Implemented |pgfmath| functions \index{pgfmath>min_l}, \index{pgfmath>max_l}, \index{pgfmath>min_s}, \index{pgfmath>max_s}.
+ \item Implemented augmented assignment operator \index{keylist-=\meta{keylist option}} for removing keys from keylists.
+ \item Implemented a generalized \index{fit to} key.
+ \item Implemented a very slow \foRest;-based indexing system (used to index this documentation)
+ and included it in the gallery (\S\ref{sec:forest-index}).
+ \item Added some minor keys: \index{edge path'}, \index{node format'}, \index{create'} and \index{plain content}.
+ \item Added some developer keys: \index{copy command key}, \index{typeout}.
+ \end{itemize}
+
+ Bugfixes:
+ \begin{itemize}
+ \item In computation of numeric tree-structure info, when called for a non-root node.
+ \item \TikZ;'s externalization internals (signature of
+ |\tikzexternal@externalizefig@systemcall@uptodatecheck|) have changed: keep up to date,
+ though only formally.
+ \item \index{delay} was not behaving additively.
+ \item \index{option>name}, \index{alias} and \index{baseline} didn't work properly when
+ setting them for a non-current node.
+ \item Augmented assignments for count options were leaking `.0pt'.
+ \item \index{create} didn't work properly in some cases.
+ \item \keyname{triangle} (now \index{roof} in \reflibrary{linguistics}) didn't use |cycle| in the edge path
+ \end{itemize}
+
+\end{description}
+
+\subsubsection{v1.0}
+
+\begin{description}
+\item[v1.0.10 (2015/07/22)] \mbox{}
+ \begin{compactitem}
+ \item Bugfix: a left-over debugging |\typeout| command was interfering with a |forest| within |tabular|, see \href{http://tex.stackexchange.com/questions/256509/odd-incompatibility-between-multi-line-forest-nodes-and-tabular}{this question on TeX.SE}.
+ \item A somewhat changed versioning scheme \dots
+ \end{compactitem}
+\item[v1.09 (2015/07/15)] \mbox{}
+ \begin{compactitem}
+ \item Bugfix: child alignment was not done in nodes with a single child, see \href{http://tex.stackexchange.com/questions/255309/elementary-forest-question-meaning-of-calign-parent-anchor-and-child-anchor}{this question on TeX.SE}.
+ \end{compactitem}
+\item[v1.08 (2015/07/10)] \mbox{}
+ \begin{compactitem}
+ \item Fix externalization (compatibility with new |tikz| features).
+ \end{compactitem}
+\item[v1.07 (2015/05/29)] \mbox{}
+ \begin{compactitem}
+ \item Require package |elocalloc| for local boxes, which were previously defined by package |etex|.
+ \end{compactitem}
+\item[v1.06 (2015/05/04)] \mbox{}
+ \begin{compactitem}
+ \item Load |etex| package: since v2.1a, |etoolbox| doesn't do it anymore.
+ \end{compactitem}
+\item[v1.05 (2014/03/07)] \mbox{}
+ \begin{compactitem}
+ \item Fix the node boundary code for rounded rectangle. (Patch contributed by Paul Gaborit.)
+ \end{compactitem}
+\item[v1.04 (2013/10/17)] \mbox{}
+ \begin{compactitem}
+ \item Fixed an \href{http://tex.stackexchange.com/questions/138986/error-using-tikzexternalize-with-forest/139145}{externalization bug}.
+ \end{compactitem}
+\item[v1.03 (2013/01/28)] \mbox{}
+ \begin{compactitem}
+ \item Bugfix: options of dynamically created nodes didn't get processed.
+ \item Bugfix: the bracket parser was losing spaces before opening braces.
+ \item Bugfix: a family of utility macros dealing with affixing token lists was not expanding
+ content correctly.
+ \item Added style \index{math content}.
+ \item Replace key \keyname{tikz preamble} with more general \index{begin draw} and
+ \index{end draw}.
+ \item Add keys \keyname{begin forest} and \keyname{end forest}.
+ \end{compactitem}
+\item[v1.02 (2013/01/20)] \mbox{}
+ \begin{compactitem}
+ \item Reworked style \index{style>stages}: it's easier to modify the processing flow now.
+ \item Individual stages must now be explicitely called in the context of some (usually root)
+ node.
+ \item Added \index{delay n} and \index{if have delayed}.
+ \item Added (experimental) \index{pack'}.
+ \item Added reference to the \href{https://github.com/sasozivanovic/forest-styles}{style
+ repository}.
+ \end{compactitem}
+\item[v1.01 (2012/11/14)] \mbox{}
+
+ \begin{compactitem}
+ \item Compatibility with the |standalone| package: temporarily disable the effect of
+ |standalone|'s package option |tikz| while typesetting nodes.
+ \item Require at least the [2010/08/21] (v2.0) release of package |etoolbox|.
+ \item Require version [2010/10/13] (v2.10, rcs-revision 1.76) of \PGF;/\TikZ;. Future
+ compatibility: adjust to the change of the ``not yet positioned'' node name (2.10 |@|
+ $\rightarrow$ 2.10-csv |PGFINTERNAL|).
+ \item Add this changelog.
+ \end{compactitem}
+\item[v1.0 (2012/10/31)] First public version
+\end{description}
+
+
+
+\subsection{Known bugs}
+\label{sec:bugs}
+
+If you find a bug (there are bound to be some \dots), please contact
+me at \href{mailto:saso.zivanovic@guest.arnes.si}{saso.zivanovic@guest.arnes.si}.
+
+\subsubsection*{System requirements}
+
+This package requires \LaTeX\ and e\TeX. If you use something
+else: sorry.
+
+The requirement for \LaTeX\ might be dropped in the future, when I get some time and energy for a
+code-cleanup (read: to remedy the consequences of my bad programming practices and general
+disorganization).
+
+The requirement for e\TeX\ will probably stay. If nothing else, \foRest; is heavy on boxes: every
+node requires its own \dots\ and consequently, I have freely used e\TeX\ constructs in the code
+\dots
+
+\subsubsection*{\PGF; internals}
+
+\FoRest; relies on some details of \PGF; implementation, like the name
+of the ``not yet positioned'' nodes. Thus, a new bug might appear with the development of \PGF;.
+If you notice one, please let me know.
+
+\subsubsection*{Edges cutting through sibling nodes}
+\label{sec:cutting-edge}
+
+In the following example, the R--B edge crosses the AAA node, although \index{ignore edge} is
+set to the default |false|.
+\begin{forestexample}[index={calign,{value of=calign>first},align,{value of=align>center},base,{value of=base>bottom}}]
+ \begin{forest}
+ calign=first
+ [R[AAAAAAAAAA\\AAAAAAAAAA\\AAAAAAAAAA,align=center,base=bottom][B]]
+ \end{forest}
+\end{forestexample}
+This happens because s-distances between the adjacent children are
+computed before child alignment (which is obviously the correct order in the general case), but
+child alignment non-linearly influences the edges. Observe that the with a different value of
+\index{calign}, the problem does not arise.
+\begin{forestexample}[index={calign,{value of=calign>last},align,{value of=align>center},base,{value of=base>bottom}}]
+ \begin{forest}
+ calign=last
+ [R[AAAAAAAAAA\\AAAAAAAAAA\\AAAAAAAAAA,align=center,base=bottom][B]]
+ \end{forest}
+\end{forestexample}
+While it would be possible to fix the situation after child alignment (at least for some child
+alignment methods), I have decided against that, since the distances between siblings would soon
+become too large. If the AAA node in the example above was large enough, B could easily be pushed
+off the paper. The bottomline is, please use manual adjustment to fix such situations.
+
+\subsubsection*{Orphans}
+\label{sec:orphans}
+
+If the \index{option>l} coordinates of adjacent children are too different (as a result of manual adjustment or
+tier alignment), the packing algorithm might have nothing so say about the desired distance
+between them: in this sense, node C below is an ``orphan.''
+\begin{forestexample}[index={for step,tree,s sep,option>l,dimen*}]
+ \begin{forest}
+ for tree={s sep=0,draw},
+ [R[A][B][C,l*=2][D][E]]
+ \end{forest}
+\end{forestexample}
+To prevent orphans from ending up just anywhere, I have decided to vertically align them with
+their preceding sibling --- although I'm not certain that's really the best solution. In other
+words, you can rely that the sequence of s-coordinates of siblings is non-decreasing.
+
+The decision also influences a similar situation illustrated below. The packing algorithm puts
+node E immediately next to B (i.e.\ under C): however, the monotonicity-retaining mechanism then
+vertically aligns it with its preceding sibling, D.
+\begin{forestexample}[index={for step,tree,s sep,tier}]
+ \begin{forest}
+ for tree={s sep=0,draw},
+ [R[A[B,tier=bottom]][C][D][E,tier=bottom]]
+ \end{forest}
+\end{forestexample}
+
+Obviously, both examples also create the situation of an edge crossing some sibling node(s).
+Again, I don't think anything sensible can be done about this, in general.
+
+
+\subsection{Acknowledgements}
+
+This package has turned out to be much more successful and widespread than I could have ever
+imagined and I want to thank all the users for the trust. Many of you have also contributed to the
+package in some way: by providing comments and ideas, sending patches, reporting bugs and so on. To
+you, I'm doubly grateful! I will not even try to list you all here, as the list is getting too long
+for me to maintain, but I do want to mention one person, a member of the friendly community at the
+excellent and indispensable \href{http://tex.stackexchange.com}{\TeX\ -- \LaTeX\ Stack Exchange} and
+the author of the very first \foRest;-based package,
+\href{http://ctan.org/pkg/prooftrees}{Prooftrees}: without |cfr|'s uncountable questions, answers,
+bug reports and ideas, \foRest; would be a much poorer package indeed.
+
+
+
+\addcontentsline{toc}{section}{References}
+\bibliography{tex}
+\bibliographystyle{plain}
+
+\newpage
+\phantomsection
+\addcontentsline{toc}{section}{\indexname}
+\addtocontents{toc}{\protect\setbox0=\protect\vbox{\protect\iffalse}\protect\fi}
+\PrintIndex
+%\addtocontents{toc}{\protect\iffalse{\protect\fi}}
+%http://tex.stackexchange.com/questions/10291/addtocontents-at-end-of-document-not-getting-written-to-toc-file
+\makeatletter
+\immediate\write\@auxout{\noexpand\@writefile{toc}{\noexpand\iffalse{\noexpand\fi}}}
+\makeatother
+
+
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% fill-column: 100
+%%% TeX-command-default: "Make PDF"
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/forest/forest-index.dtx b/graphics/pgf/contrib/forest/forest-index.dtx
new file mode 100644
index 0000000000..df2979690a
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-index.dtx
@@ -0,0 +1,911 @@
+% \CheckSum{755}
+% \iffalse meta-comment
+% forest-index.dtx
+%% `forest-index' is an indexing system for the documentation of package
+%% `forest', using the package itself. (The derived `forest-index.sty' is not
+%% needed to use the package.)
+%%
+%% Copyright (c) 2012-2017 Saso Zivanovic
+%% (Sa\v{s}o \v{Z}ivanovi\'{c})
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This file is a part of package `forest'. For the list of files
+%% constituting the package see main source file of the package,
+%% `forest.dtx', or the derived `forest.sty'.
+%%
+% \fi
+%
+% \newcommand\entry[1]{{``#1''}}
+%
+% \subsection{\protect{\texttt{forest-index}}}
+% \label{sec:forest-index}
+%
+% The indexing system used to document the \foRest; package uses the
+% package itself quite heavily. While this might be a bit surprising
+% at first sight, as indexing draws no trees, the indexing package
+% illustrates the usage of some of the more exotic features and
+% usage-cases of the \foRest; package, which is why its source is
+% included in this documentation.\footnote{Indexing with this package
+% makes the compilation very slow, so I cannot whole-heartedly
+% recommend it, but I still hope that it will make a useful example.}
+%
+% This package has three main functions:
+% \begin{itemize}
+% \item It is possible to index subentries using a \emph{short form}
+% of their index key, i.e.\ without referring to their ancestor
+% entries. For example, instead of writing |\index{option>content}|
+% one can simply write |\index{content}|. (Obviously, the subentry
+% must \entry{content} be defined as belonging to entry
+% \entry{option} first. This is done using
+% |\indexdef{option>content}|.) This works for all keys which are a
+% subentry of a single entry.
+% \item All subentries are automatically entered as main entries as
+% well, with a qualificator of which entry they belong to. So,
+% |\index{option>content}| produces two index entries: entry
+% \entry{option} with subentry \entry{content} and entry
+% \entry{content \scriptsize option}. This works for an arbitrary
+% number of subentry levels.
+% \item Entries can be given options that format the appearance of the
+% entry and/or its descendants in both text and index. (Entries that
+% format the appearance of their descendants are called categories
+% below.)
+% \item If |hyperref| package is loaded, the following hyperlinks are
+% created besides the standard ones linking the page numbers in
+% index to text:
+% \begin{enumerate*}[(i)]
+% \item entries in text link to the definition in text,
+% \item definitions in the text link to the index entry,
+% \item categories in index are cross-linked.
+% \end{enumerate*}
+%
+% \end{itemize}
+%
+% The \foRest; package mainly enters the picture with respect to the
+% entry formatting. A simple (narrow) tree is built containing an entry
+% and all its ancestors. Formatting instructions are then processed
+% using \foRest;'s option processing mechanisms.
+%
+% Finally, note that this package might change without retaining
+% backwards compatibility, and that changes of this package will not
+% be entered into the changelog.
+%
+% Identification.
+% \begin{macrocode}
+\ProvidesPackage{forest-index}
+\RequirePackage{forest}
+% \end{macrocode}
+% Remember the original \LaTeX's |\index| command.
+% \begin{macrocode}
+\let\forestindex@LaTeX@index\index
+% \end{macrocode}
+%
+% \subsubsection*{The user interface macros}
+%
+% \DescribeMacro{\index} is the general purpose macro.
+% \DescribeMacro{\indexdef} and \DescribeMacro{\indexex} are
+% shorthands for indexing definitions and
+% examples. \DescribeMacro{\indexitem} is a combination of |\indexdef|
+% and the |\item| of the |lstdoc| package. It automatically indexes
+% the command being documented. \DescribeMacro{\indexset} neither
+% typesets or indexes the entry, but only configures it; it is usually
+% used to configure categories. All these macros parse their
+% arguments using |xparse|. The arguments, listed in the reverse
+% order:
+% \begin{itemize}
+% \item The final argument, which is the only mandatory argument, is a
+% comma-separated list of index keys.
+% \item The boolean switch |>| just before the mandatory argument
+% signals that the keys are given in the full form. Otherwise, keys
+% without a level separator are considered short.
+% \item Indexing options are given by the |[|optional |]| argument.
+% \item The first |(|optional|)| argument of:
+% \begin{compactitem}
+% \item |\indexitem|: specifies the default value of the command.
+% \item |\index|: is used to
+% provide ``early'' options.
+% \end{compactitem}
+% \end{itemize}
+%
+% Among the options of these commands, three keylists are of special
+% importance: |index_key_format|, |index_form_format| and
+% |print_format|. These hold instructions on how to format the index
+% key, the form of the entry in the index and the form of the entry in
+% the main text. They work by modifying the contents of an
+% \indexex{autowrapped toks} register |result|.
+%
+% An example: how macros are indexed in this documentation. Style
+% |macro| defined below does everything needed to format a macro name:
+% it detokenizes the given name (in case the name contains some funny
+% characters), prefixes the backslash, wraps in in the typewriter
+% font, adds color and hyperlink (the final two styles are defined in
+% below this package). Note the usage of |\protect|: it is needed
+% because we want to use these styles to format entries not just in
+% the main next, but also in the index.
+% \lstinputregion{forest-doc.tex}{index_macro_style} Then, we
+% configure the main level entry \entry{macro}: the child of this
+% entry will be formatted (both in index and in the main text) using
+% the previously defined style.
+% \lstinputregion{forest-doc.tex}{index_macro_category} Usage is then
+% simple: we write |\indexex{macro>forestoption}| (or simply
+% |\indexex{forestoption}| to get \indexex{forestoption}.
+%
+% \begin{macrocode}
+\DeclareDocumentCommand\indexdef{O{} t> m}{%
+ \IfBooleanTF{#2}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@long}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@shortorlong}%
+ \forestindex@index{definition}{#1}{#3}}
+\DeclareDocumentCommand\indexex{O{} t> m}{%
+ \IfBooleanTF{#2}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@long}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@shortorlong}%
+ \forestindex@index{example}{#1}{#3}}
+% \DeclareDocumentCommand\indexitem{D(){} O{} t> m}{%
+% \IfBooleanTF{#3}
+% {\let\forestindex@resolvekey\forestindex@resolvekey@long}
+% {\let\forestindex@resolvekey\forestindex@resolvekey@shortorlong}%
+% \forestindex@index{definition}{default={#1},print format=item,#2}{#4}}
+\DeclareDocumentCommand\indexitem{D(){} O{} t> m}{%
+ \let\forestindex@resolvekey\forestindex@resolvekey@long
+ \forestindex@index{definition}{default={#1},#2,print format+=item}{#4}}
+\DeclareDocumentCommand\indexset{O{} t> m}{%
+ \IfBooleanTF{#2}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@long}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@shortorlong}%
+ \forestindex@index{not print,not index,definition}{set={#1}}{#3}}
+\DeclareDocumentCommand\index{D(){} O{} t> m}{%
+ \IfBooleanTF{#3}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@long}
+ {\let\forestindex@resolvekey\forestindex@resolvekey@shortorlong}%
+ \forestindex@index{#1}{#2}{#4}%
+}
+% \end{macrocode}
+% All UI macros call this macro.
+% \begin{arguments}
+% \item early option keylist
+% \item late option keylist
+% \item a comma-sep list of forest index key (full or short form). A
+% key can be given an argument using |key=argument| syntax. How the
+% argument is used is up to the user. For example, the
+% \entry{environment} entry of the \foRest; documentation uses it to
+% typeset the contents of the environment:
+% \lstinputregion{forest-doc.tex}{forest_environment_doc}
+% \end{arguments}
+% \begin{macrocode}
+\def\forestindex@index#1#2#3{%
+% \end{macrocode}
+% Partition the index keylist into single keys. And put it all in a group: the
+% persistent stuff is saved globally.
+% \begin{macrocode}
+ {\forcsvlist{\forestindex@forkey{#1}{#2}}{#3}}%
+}
+\def\forestindex@forkey#1#2#3{%
+% \end{macrocode}
+% Short-key resolution. The result is stored into |\forestindex@fullkey|.
+% \begin{macrocode}
+ \forestindex@resolvekey{#3}%
+% \end{macrocode}
+% Manipulate arguments a bit, so that we can use our quick-and-dirty one-arg
+% memoization.
+% \begin{macrocode}
+ %\forestset{@index/.process={__o}{#1}{#2}{\forestindex@fullkey}}
+ \edef\forest@marshal{%
+ \noexpand\forestindex@index@{%
+ {\unexpanded{#1}}%
+ {\unexpanded{#2}}%
+ {\expandonce{\forestindex@fullkey}}%
+ }%
+ }\forest@marshal
+}
+% \end{macrocode}
+% Call the central processing command, style |@index|. See how
+% \indexex{handler>process} is used to expand (once) the last argument.
+% \begin{macrocode}
+\def\forestindex@index@#1{\forestset{@index/.process={__o}#1}}
+\forestset{
+% \end{macrocode}
+% \subsubsection*{Declarations}
+%
+% Should we print and/or index the entry? For example,
+% |\index[not_print]{...}| will index silently (as \LaTeX's |\index|
+% command does).
+% \begin{macrocode}
+ declare boolean register=print,
+ declare boolean register=index,
+ declare boolean register=short,
+% \end{macrocode}
+% Options |name|, |content|, |key| and |argument| hold info about the
+% current entry. We need to declare only the latter two, the former
+% two we steal from \foRest;.
+% \begin{macrocode}
+ declare toks={key}{},
+ declare toks={argument}{},
+% \end{macrocode}
+% These options will hold first the initial, and then the calculated
+% values of the index key, index form and the form in text. When
+% (late) options are executed, these options are initialized to the
+% value of option |key|; it is safe to modify them at this point.
+% Afterwards, they will be further processed by keylists
+% |index_key_format|, |index_form_format| and |print_format|,
+% respectively.
+% \begin{macrocode}
+ declare toks={index key}{},
+ declare toks={index form}{},
+ declare toks={print form}{},
+% \end{macrocode}
+% The customization of entries' appearance is done by specifying the
+% following three keylists. The keylists work by modifying register
+% |result|.
+% \begin{macrocode}
+ declare keylist={index key format}{},
+ declare keylist={index format}{},
+ declare keylist={print format}{},
+ declare autowrapped toks register=result,
+% \end{macrocode}
+% Some shorthands.
+% \begin{macrocode}
+ format'/.style={print format'={#1}, index format'={#1}},
+ format/.style={print format={#1}, index format={#1}},
+ format+/.style={print format+={#1}, index format+={#1}},
+ +format/.style={+print format={#1}, +index format={#1}},
+ form/.style={print form={#1},index form={#1}},
+ form+/.style={print form+={#1},index form+={#1}},
+ +form/.style={+print form={#1},+index form={#1}},
+% \end{macrocode}
+% Entry types are normal (default), definition, example. Only
+% definitions are special, as their options are automatically saved.
+% \begin{macrocode}
+ declare toks register=index entry type,
+ definition/.style={index entry type=definition},
+ normal/.style={index entry type=normal},
+ example/.style={index entry type=example},
+ normal,
+% \end{macrocode}
+% This option is used internally to store the hyper ids.
+% \begin{macrocode}
+ declare toks={index@hypertarget}{},
+ every index begin/.style={},
+ every index end/.style={},
+% \end{macrocode}
+% Some formatting tools need to know whether we're typesetting text or
+% index: this info is stored in the |stage| register.\indexex[margin]{declare toks register}
+% \begin{macrocode}
+ declare toks register=stage,
+% \end{macrocode}
+%
+% \subsubsection*{The central processing command}
+% \begin{arguments}
+% \item early option keylist (these are only used to define category
+% ``@unknown'' at the end of this package)
+% \item late option keylist
+% \item index key (full form)
+% \end{arguments}
+% \begin{macrocode}
+ @index/.style n args={3}{
+% \end{macrocode}
+% Set the defaults.
+% \begin{macrocode}
+ print, index, index entry type=normal, set'={}, short,
+% \end{macrocode}
+% Create the tree structure:
+% |[entry[subentry[subsubentry...]]]|. Three options of every node
+% created:
+% \begin{compactitem}
+% \item |key| contains the key of the (sub)entry
+% \item |name| contains the full path to the (sub)entry
+% \item |arguments| contains the arguments given to the (sub)entry's key
+% \item |content| contains the full key, with arguments for all but
+% the most deeply embedded subentry
+% \end{compactitem}
+% \indexex{for step=\indexex{nodewalk}} is used because
+% |create@subentry@node| walks down the created tree. At |if n=0|
+% below, we're thus positioned at the lowest node.\indexex[margin]{step>nodewalk}
+% \begin{macrocode}
+ for nodewalk={
+% \end{macrocode}
+% The components of the full key are separated using \indexex{split},
+% with different keys being executed for the first component and the
+% rest.
+% \begin{macrocode}
+ split={#3}{>}{create@main@entry@node, create@subentry@node},
+% \end{macrocode}
+% Remove the argument from the most deeply embedded subentry.
+% \begin{macrocode}
+ if n=0{
+ content/.option=key,
+ }{
+ content/.process={OOw2} {!parent.content} {key} {##1>##2},
+ }
+ }{},
+ for root'={
+% \end{macrocode}
+% Don't memoize if the key is of an unknown category.
+% \begin{macrocode}
+ if strequal/.process={O}{!root.name}{@unknown}{TeX=\global\forest@memoizing@ok@false}{},
+% \end{macrocode}
+% Option |print_form| is what will be typeset in the text. Option
+% |index_key| is the key that will be used for sorting the
+% index. Option |index_form| is what will be typeset in the index. All
+% these are initialized to the |key|. See how
+% \indexex{handler>option} is used to assign an option value to
+% another option.
+% \begin{macrocode}
+ for tree={
+ print form/.option=key,
+ index key/.option=key,
+ index form/.option=key,
+ },
+% \end{macrocode}
+% Below, \indexex{node key>on invalid} is set to \indexex{value of=on invalid>fake} at four points.
+% This is so we won't get in trouble when |\indexset|ting the
+% categories: when the category formatting code will try to step into
+% the child, it will fail as the child does not exist when |\indexset|
+% is called for the category; but we ignore the failure.
+%
+% Go to the the most deeply embedded subentry.\indexex[margin]{first leaf'}
+% \begin{macrocode}
+ for first leaf'={
+% \end{macrocode}
+% Execute every index options and the given early options.
+% \begin{macrocode}
+ on invalid={fake}{
+ every index begin,
+ #1,
+ },
+% \end{macrocode}
+% Ancestors are walked in the \indexex{reverse} order (top down). At
+% every node, the saved configuration is executed (if it exists).
+% \begin{macrocode}
+ for reverse={current and ancestors}{on invalid={fake}{@@index/\forestoption{name}/.try}},
+% \end{macrocode}
+% We don't execute the saved configuration for definitions, as
+% definitions are where the configuration is set.
+% \begin{macrocode}
+ if index entry type={definition}{}{%
+ on invalid={fake}{@@index/\forestoption{name}/.try},
+ },
+% \end{macrocode}
+% Execute late (well, normal) options. See the discussion about early
+% options above.
+% \begin{macrocode}
+ on invalid={fake}{
+ #2,
+ every index end
+ },
+% \end{macrocode}
+% Remember the given config for the rest of the document.
+% \begin{macrocode}
+ if set={}{}{save@session},
+% \end{macrocode}
+% If we're at a definition, save the config into the auxiliary file.
+% \begin{macrocode}
+ if index entry type={definition}{save@foridx}{},
+ },
+ stage={},
+% \end{macrocode}
+% Create hyperlink targets of the form |.entry.subentry.subsubentry...|.
+%
+% \FoRest; points:
+% \begin{enumerate*}[(i)]
+% \item the generic conditional \indexex{if},
+% \item handler \index{handler>process},
+% \end{enumerate*}
+% \begin{macrocode}
+ if index={
+ index@hypertarget/.process={OS_= ? l_ w2}
+ {index key}
+ {}
+ {}{.}
+ {##2##1},
+ for descendants={
+ index@hypertarget/.process={OO S _l1= ? w2 }
+ {!parent.index@hypertarget}{index key}
+ {}
+ {##1} % empty index key
+ {##1.##2} % otherwise
+ },
+ }{},
+% \end{macrocode}
+% Index.
+% \begin{macrocode}
+ if index={
+ begingroup,
+ stage=index,
+% \end{macrocode}
+% For each (sub)entry, format the |index_key| using the instructions
+% in |index_key_format|.
+% \begin{macrocode}
+ for tree={
+ result/.option=index key,
+ process keylist'={index key format}{current},
+ index key/.register=result,
+ },
+% \end{macrocode}
+% For each (sub)entry, format the |index_form| using the instructions
+% in |index_form_format|.
+% \begin{macrocode}
+ for tree={
+ result/.option=index form,
+ process keylist'={index format}{current},
+ index form/.register=result,
+ },
+% \end{macrocode}
+% Create an index entry for all nodes where |index_form| is non-empty.
+% \begin{macrocode}
+ where index form={}{}{
+% \end{macrocode}
+% All the ancestor nodes with an non-empty |index_form| will be
+% appended (in script size, as a hyperlink) to the |index_form| of the
+% current node.
+% \begin{macrocode}
+ if n=0{
+ temptoksb={},
+ }{
+ temptoksc={},
+ for ancestors={
+ if index form={}{}{
+ temptoksb+/.expanded={\forestregister{temptoksc}%
+ \noexpand\protect\noexpand\hyperlinknocolor{%
+ \forestoption{index@hypertarget}}{\forestoption{index form}}},
+ temptoksc={,\space},
+ },
+ },
+ if temptoksb={}{}{
+ +temptoksb={\protect\space\begingroup\protect\scriptsize},
+ temptoksb+={\endgroup},
+ },
+ },
+ temptoksa={},
+ result'={},
+ if n children=0{tempboola}{not tempboola},
+ where index form={}{}{
+% \end{macrocode}
+% Create the hypertarget that the definitions in text and other index entries
+% will point to.
+% \begin{macrocode}
+ temptoksd/.expanded={\noexpand\protect\noexpand\hypertarget{%
+ \forestoption{index@hypertarget}}{}},
+% \end{macrocode}
+% Add the (inner) current node to the index entry of the (outer) current node.
+% \begin{macrocode}
+ result+/.expanded={%
+ \forestregister{temptoksa}%
+ \forestoption{index key}%
+ =\forestoption{index form}%
+ \forestregister{temptoksd}%
+ \forestregister{temptoksb}%
+ },
+ temptoksa={>},
+ temptoksb={},
+ },
+% \end{macrocode}
+% Do the actual indexing.
+% \begin{macrocode}
+ result+/.expanded={|indexpagenumber\forestregister{index entry type}},
+ TeX and memoize/.expanded={\noexpand\forestindex@LaTeX@index{\forestregister{result}}},
+ },
+ endgroup
+ }{},
+ if print={
+ begingroup,
+ stage=print,
+% \end{macrocode}
+% For each (sub)entry, format the |print_form| using the instructions
+% in |print_form_format|.
+% \begin{macrocode}
+ for tree={
+ result/.option=print form,
+ process keylist'={print format}{current},
+ print form/.register=result,
+ },
+% \end{macrocode}
+% Typeset the entry in the text.
+% \begin{macrocode}
+ for first leaf'={TeX and memoize/.expanded={\forestoption{print form}}},
+ endgroup,
+ }{},
+ }
+ },
+% \end{macrocode}
+% Create the main entry node and set to be the root.
+% \begin{macrocode}
+ create@main@entry@node/.style={% #1 = subentry
+ set root={[]},
+ do dynamics, for root'={process delayed=tree},
+ root',
+ setup@entry@node={#1}
+ },
+% \end{macrocode}
+% Create a subentry node and move into it.
+% \begin{macrocode}
+ create@subentry@node/.style={
+ append={[]},
+ do dynamics, for root'={process delayed=tree},
+ n=1,
+ setup@entry@node={#1}
+ },
+% \end{macrocode}
+% Parse \#1 into |key| and |argument|, and assign |name| and |content|.
+% \begin{macrocode}
+ setup@entry@node/.style={
+ options={
+ split={#1}{=}{key,argument},
+ if n=0{
+ name'/.option=key,
+ content={#1},
+ }{
+ name'/.process={OOw2} {!parent.name} {key} {##1>##2},
+ content/.process={Ow1} {!parent.content} {##1>#1},
+ },
+ }
+ },
+}
+% \end{macrocode}
+% \subsubsection*{Saving and loading the options}
+% \begin{macrocode}
+\forestset{
+% \end{macrocode}
+% This register holds whatever we need to remember.
+% \begin{macrocode}
+ declare keylist register=set,
+% \end{macrocode}
+% Besides storing the keylist in the register, also immediately
+% execute it.\indexex[margin]{Autoforward register}.
+% \begin{macrocode}
+ Autoforward register={set}{##1},
+% \end{macrocode}
+% Remember things by saving them in a global style.
+% \begin{macrocode}
+ save@session/.style={@@index/\forestoption{name}/.global style/.register=set},
+% \end{macrocode}
+% Save thinks to the auxiliary file.
+% \begin{macrocode}
+ save@foridx/.style={
+% \end{macrocode}
+% Don't save entries of unknown category.
+% \begin{macrocode}
+ if strequal/.process={O}{!root.name}{@unknown}{}{
+% \end{macrocode}
+% Don't save if nothing is set.
+% \begin{macrocode}
+ if set={}{}{
+ TeX and memoize/.expanded={%
+ \noexpand\immediate\noexpand\write\noexpand\forestindex@out{%
+ \noexpand\string\noexpand\indexloadsettings\noexpand\unexpanded{{\forestoption{name}}{\forestregister{set}}}%
+ }%
+ },
+ },
+ },
+% \end{macrocode}
+% Save the full form of the key in the auxiliary file. Obviously, do
+% it only for subentries. The full form contains whatever arguments
+% were given to the non-last component.
+% \begin{macrocode}
+ if key/.process={O}{content} {} {%
+ if short={
+ TeX and memoize/.expanded={%
+ \noexpand\immediate\noexpand\write\noexpand\forestindex@out{%
+ \noexpand\string\noexpand\indexdefineshortkey\noexpand\unexpanded{{\forestoption{key}}{\forestoption{content}}}%
+ }%
+ }%
+ }{}
+ }
+ }
+}
+% \end{macrocode}
+% Load settings from the auxiliary file into the global style. Warn
+% if anything was configured more than once (e.g.\ by |\indexdef|ing
+% the same key twice).
+% \begin{macrocode}
+\def\indexloadsettings#1#2{%
+ \pgfkeysifdefined{/forest/@@index/#1/.@cmd}{%
+ \forestindex@loadsettings@warning{#1}%
+ }{}%
+ % #s in #2 are doubled; the following \def removes one layer of doubling
+ \def\forest@temp{#2}%
+ \forestset{@@index/#1/.global style/.expand once=\forest@temp}%
+}
+\def\forestindex@loadsettings@warning#1{%
+ \PackageWarning{forest-index}{Forest index key "#1" was configured more than once!
+ I'm using the last configuration.}%
+}
+% \end{macrocode}
+% Load the full form of a short key from the auxiliary file. Out of
+% kindness for the end user, remember all the full keys corresponding
+% to a short key: this will make a more informative warning below.
+% \begin{macrocode}
+\def\indexdefineshortkey#1#2{%
+ \def\forestindex@temp@short{#1}%
+ \def\forestindex@temp@long{#2}%
+ \ifx\forestindex@temp@short\forestindex@temp@long
+ \else
+ \ifcsdef{index@long@#1}{%
+ \global\cslet{index@long@#1}\relax
+ \csgappto{index@alllong@#1}{,#2}%
+ }{%
+ \global\csgdef{index@long@#1}{#2}%
+ \global\csgdef{index@alllong@#1}{#2}%
+ }%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection*{Short key resolution}
+%
+% Nothing to do for a long key.
+% \begin{macrocode}
+\def\forestindex@resolvekey@long#1{\def\forestindex@fullkey{#1}}
+% \end{macrocode}
+% Decide whether a key is short or long based on the absence or
+% presence of the level separator |>|.
+% \begin{macrocode}
+\def\forestindex@resolvekey@shortorlong#1{%
+ \pgfutil@in@>{#1}%
+ \ifpgfutil@in@
+ \expandafter\def\expandafter\forestindex@fullkey
+ \else
+ \expandafter\forestindex@resolvekey@short
+ \fi
+ {#1}%
+}
+% \end{macrocode}
+% Before resolving the short key, we need to split the user input into
+% the key and the argument. The latter is then appended to the full
+% key (which can, in principle, contain arguments for other components
+% as well).
+% \begin{macrocode}
+\def\forestindex@resolvekey@short#1{%
+ \forestset{split={#1}{=}{index@resolveshortkey@key,index@resolveshortkey@arg}}%
+}
+\forestset{
+ index@resolveshortkey@key/.code={%
+ \ifcsvoid{index@long@#1}{%
+ \forestindex@resolveshortkey@warning{#1}%
+ \def\forestindex@fullkey{@unknown>#1}%
+ }{%
+ \letcs\forestindex@fullkey{index@long@#1}%
+ }%
+ },
+ index@resolveshortkey@arg/.code={%
+ \appto\forestindex@fullkey{=#1}%
+ },
+}
+\def\forestindex@resolveshortkey@warning#1{%
+ \PackageWarning{forest-index}{Cannot resolve short forest index key "#1".
+ These are the definitions I found (from the previous run):
+ "\csuse{index@alllong@#1}"}%
+}
+% \end{macrocode}
+% \subsubsection*{Formatting styles}
+%
+% Define default colors for index entry types and provide a style that
+% typesets the entry in text (but not index) in the desired color.
+% \begin{macrocode}
+\forestset{
+ normal color/.initial=blue,
+ definition color/.initial=red,
+ example color/.initial=darkgreen,
+ print in color/.style={if stage={print}{result/.expanded=\noexpand\protect\noexpand\textcolor{%
+ \pgfkeysvalueof{/forest/#1 color}}{\unexpanded{##1}}}{}},
+ print in color/.default=\forestregister{index entry type},
+% \end{macrocode}
+% Use this style in |..._format| keylists if you want the index
+% entries to be hyperlinks to the definition, and the definition to be
+% a hyperlink to the index.
+% \begin{macrocode}
+ hyper/.style={
+ if stage={index}{}{
+ if index entry type={definition}{
+ result/.expanded={\noexpand\hypertarget{\forestoption{name}}%
+ {\noexpand\hyperlink{\forestoption{index@hypertarget}}{\forestregister{result}}}}
+ }{
+ result/.expanded=\noexpand\hyperlink{\forestoption{name}}{\forestregister{result}}
+ }
+ }
+ },
+}
+% \end{macrocode}
+% Color page numbers in the index, with or without |hyperref| package.
+% \begin{macrocode}
+\ifdef\hyperpage{%
+ \newcommand\indexpagenumbernormal[1]{{%
+ \hypersetup{linkcolor=\pgfkeysvalueof{/forest/normal color}}\hyperpage{#1}}}
+ \newcommand\indexpagenumberdefinition[1]{{%
+ \hypersetup{linkcolor=\pgfkeysvalueof{/forest/definition color}}\hyperpage{#1}}}
+ \newcommand\indexpagenumberexample[1]{{%
+ \hypersetup{linkcolor=\pgfkeysvalueof{/forest/example color}}\hyperpage{#1}}}
+}{
+ \newcommand\indexpagenumbernormal[1]{%
+ \textcolor{\pgfkeysvalueof{/forest/normal color}}{#1}}
+ \newcommand\indexpagenumberdefinition[1]{%
+ \textcolor{\pgfkeysvalueof{/forest/definition color}}{#1}}
+ \newcommand\indexpagenumberexample[1]{%
+ \textcolor{\pgfkeysvalueof{/forest/example color}}{#1}}
+}
+% \end{macrocode}
+% Provide dummy |\hyper...| commands if |hyperref| is not loaded.
+% \begin{macrocode}
+\providecommand\hyperlink[2]{#2}
+\providecommand\hypertarget[2]{#2}
+\providecommand\hypersetup[1]{}
+% \end{macrocode}
+% This is used by entry qualifiers: we want them to be hyperlinks, but black.
+% \begin{macrocode}
+\newcommand\hyperlinknocolor[2]{{\hypersetup{linkcolor=black}\hyperlink{#1}{#2}}}
+% \end{macrocode}
+%
+% Use style |item| to have the index entry (in text) function as the
+% |\item| of a |lstdoc|'s |syntax| environment.
+% \begin{macrocode}
+\forestset{
+ declare toks register=default,
+ default={},
+ item/.style={
+ result/.process= {_RORw4}
+ {} {default} {!parent.print form} {result}
+ {\item[,##2,##3]{##4}},
+ },
+}
+% \end{macrocode}
+%
+% \subsubsection*{Utilities}
+%
+% We will need a global version of several |pgfkeys| commands.
+% \begin{macrocode}
+\pgfkeys{/handlers/.global style/.code=\pgfkeys{\pgfkeyscurrentpath/.global code=\pgfkeysalso{#1}}}
+\pgfkeysdef{/handlers/.global code}{\pgfkeysglobaldef{\pgfkeyscurrentpath}{#1}}
+\long\def\pgfkeysglobaldef#1#2{%
+ \long\def\pgfkeys@temp##1\pgfeov{#2}%
+ \pgfkeysgloballet{#1/.@cmd}{\pgfkeys@temp}%
+ \pgfkeysglobalsetvalue{#1/.@body}{#2}%
+}
+\def\pgfkeysgloballet#1#2{%
+ \expandafter\global\expandafter\let\csname pgfk@#1\endcsname#2%
+}
+\long\def\pgfkeysglobalsetvalue#1#2{%
+ \pgfkeys@temptoks{#2}\expandafter\xdef\csname pgfk@#1\endcsname{\the\pgfkeys@temptoks}%
+}
+\forestset{
+ % unlike pgfmath function strequal, |if strequal| does not expand the compared args!
+ if strequal/.code n args={4}{\ifstrequal{#1}{#2}{\pgfkeysalso{#3}}{\pgfkeysalso{#4}}},
+}
+% \end{macrocode}
+% Begin and end group, \foRest;-style:
+% \begin{macrocode}
+\forestset{
+ begingroup/.code={\begingroup},
+ endgroup/.code={\endgroup},
+}
+% \end{macrocode}
+%
+% \subsubsection{Memoize}
+%
+% Quick and dirty memoization. Single argument macros only. Does not support nesting.
+%
+% \begin{macrocode}
+\newtoks\forest@memo@key
+\newtoks\forest@memo
+\newif\ifforest@memoizing@now@
+\newif\ifforest@memoizing@ok@
+\newif\ifforest@execandmemoize@
+\def\forest@memoize#1{% #1 = \cs
+ \cslet{forest@memo@orig@\string#1}#1%
+ \def#1##1{%
+ \ifforest@memoizing@now@
+ \forest@globalsaveandrestoreifcs{forest@execandmemoize@}{%
+ \global\forest@execandmemoize@false
+ \csname forest@memo@orig@\string#1\endcsname{##1}%
+ }%
+ \else
+ \expandafter\global\expandafter\forest@memo@key\expandafter{\detokenize{forest@memo@#1{##1}}}%
+ \ifcsname\the\forest@memo@key\endcsname
+ \@escapeifif{\csname\the\forest@memo@key\endcsname}%
+ \else
+ \@escapeifif{%
+ \global\forest@memo{}%
+ \global\forest@memoizing@ok@true
+ \global\forest@memoizing@now@true
+ \global\forest@execandmemoize@true
+ \csname forest@memo@orig@\string#1\endcsname{##1}%
+ \global\forest@execandmemoize@false
+ \global\forest@memoizing@now@false
+ \ifforest@memoizing@ok@
+ \csxdef{\the\forest@memo@key}{\the\forest@memo}%
+ \immediate\write\forest@memo@out{%
+ \noexpand\forest@memo@load{\the\forest@memo@key}{\the\forest@memo}%
+ }%
+ \fi
+ }%
+ \fi
+ \fi
+ }%
+}
+\def\forest@memo@load#1#2{%
+% \end{macrocode}
+% The following two |\def|s remove one level of hash-doubling from the
+% arguments, introduced by |\write|.
+% \begin{macrocode}
+ \def\forest@temp@key{#1}%
+ \def\forest@temp@value{#2}%
+ \csxdef{\detokenize\expandafter{\forest@temp@key}}{\expandonce\forest@temp@value}%
+ \immediate\write\forest@memo@out{%
+ \noexpand\forest@memo@load{\detokenize\expandafter{\forest@temp@key}}{\detokenize\expandafter{\forest@temp@value}}%
+ }%
+}
+\forestset{
+ TeX and memoize/.code={\forest@execandmemoize{#1}},
+}
+\def\forest@execandmemoize#1{%
+ \ifforest@execandmemoize@
+ \let\forest@memo@next\forest@execandmemoize@
+ \else
+ \let\forest@memo@next\@gobble
+ \fi
+ \forest@memo@next{#1}%
+ #1%
+}
+\def\forest@execandmemoize@#1{%
+ \gapptotoks\forest@memo{#1}%
+}
+\def\forest@memo@filename{\jobname.memo}
+\newwrite\forest@memo@out
+\immediate\openout\forest@memo@out=\forest@memo@filename.tmp
+\IfFileExists{\forest@memo@filename}{%
+ \input\forest@memo@filename\relax
+}{}%
+\AtEndDocument{%
+ \immediate\closeout\forest@memo@out
+ \forest@file@copy{\forest@memo@filename.tmp}{\forest@memo@filename}%
+}
+% \end{macrocode}
+% Commenting the following line turns off memoization.
+% \begin{macrocode}
+\forest@memoize\forestindex@index@
+% \end{macrocode}
+%
+% \subsubsection*{Initialize}
+%
+% Declare category ``@unknown''.
+% \begin{macrocode}
+\index(not print,not index)[%
+ set={
+ index key=unknown,
+ form={\textbf{unknown!!}},
+ for first={format={result/.expanded=\noexpand\textbf{\forestregister{result}??}}}
+ },
+ ]>{@unknown}
+% \end{macrocode}
+% Load the auxiliary file made in the previous compilation, and open
+% it for writing to save data from this compilation.
+% \begin{macrocode}
+\def\forestindex@filename{\jobname.foridx}
+\IfFileExists{\forestindex@filename}{%
+ \input\forestindex@filename\relax
+}{}%
+\newwrite\forestindex@out
+\immediate\openout\forestindex@out=\forestindex@filename.tmp
+\AtEndDocument{%
+ \immediate\closeout\forestindex@out
+ \forest@file@copy{\forestindex@filename.tmp}{\forestindex@filename}%
+}
+\endinput
+% \end{macrocode}
+%
+%%% \iffalse
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: "forest-doc"
+%%% TeX-command-default: "sty"
+%%% End:
+%%% \fi
diff --git a/graphics/pgf/contrib/forest/forest-libs.dtx b/graphics/pgf/contrib/forest/forest-libs.dtx
new file mode 100644
index 0000000000..9873abfa54
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest-libs.dtx
@@ -0,0 +1,528 @@
+% \CheckSum{236}
+% \iffalse meta-comment
+% forest-libs.dtx
+%% `forest-libs' is a collection of libraries for package `forest'.
+%%
+%% Copyright (c) 2012-2017 Saso Zivanovic
+%% (Sa\v{s}o \v{Z}ivanovi\'{c})
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This file is a part of package `forest'. For the list of files
+%% constituting the package see main source file of the package,
+%% `forest.dtx', or the derived `forest.sty'.
+%%
+% \fi
+%
+% \section{Libraries}
+%
+% This chapter contains not only the reference of commands found in libraries and some examples of
+% their usage, but also their definitions. This is done in the hope that these definitions, being
+% mostly styles, will be useful as examples of the core features of the package. I even managed to
+% comment them a bit \dots
+%
+% \paragraph{Disclaimer.} At least in the initial stages of a library's development, the function
+% and interface of macros and keys defined in a library might change without backwards compatibility
+% support! Though I'll try to keep this from happening \dots
+%
+% \begin{macrocode}
+\RequirePackage{forest}
+% \end{macrocode}
+%
+%\iffalse
+%<*linguistics>
+%\fi
+% \librarysection{linguistics}
+% \begin{macrocode}
+\ProvidesForestLibrary{linguistics}[2017/07/14 v0.1.2]
+% \end{macrocode}
+%
+% Defaults:
+% \begin{macrocode}
+\forestset{
+ linguistics@set@baseline/.style={
+ if phantom={for next node=linguistics@set@baseline}{baseline}
+ },
+ libraries/linguistics/defaults/.style={
+ default preamble={
+% \end{macrocode}
+% Edges of the children will ``meet'' under the node:
+% \begin{macrocode}
+ sn edges,
+% \end{macrocode}
+% The root of the tree will be aligned with the text \dots\ or, more commonly, the example number.
+% More precisely, we actually align the first (in linear order) non-phantom node. This covers the
+% common case of side-by-side trees joined with a phantom root.
+% \begin{macrocode}
+ before drawing tree={
+ if nodewalk valid={name=forest@baseline@node}{}{linguistics@set@baseline},
+ },
+% \end{macrocode}
+% Enable (centered) multi-line nodes.
+% \begin{macrocode}
+ for tree={align=center},
+ },
+ },
+}
+% \end{macrocode}
+%
+% There's no linguistics without c-command\footnote{The definition of c-command is as follows: a node c-commands its siblings and their descendants.} \dots
+% \begin{syntax}
+% \indexitem{step>c-commanded} Visit all the nodes c-commanded by the current node.
+% \indexitem{step>c-commanders} Visit all the c-commanders of the current node, starting from the closest.
+%
+% \begin{forestexample}[tree bin=minipage,index={branch',c-commanded}]
+% \begin{forest}
+% [VP
+% [DP[John]]
+% [V'
+% [V, draw, for c-commanded={draw,circle}
+% [sent]
+% ]
+% [DP[Mary]]
+% [DP[D[a]][NP[letter]]]
+% ]
+% ]
+% \end{forest}
+% \end{forestexample}
+%
+% See how \indexex{branch'} is used to define |c-commanded|, and how \indexex{while nodewalk valid} and \indexex{nodewalk key>fake} are combined in the definition of |c-commanders|.
+% \begin{macrocode}
+\forestset{
+ define long step={c-commanded}{style}{branch'={siblings,descendants}},
+ define long step={c-commanders}{style}{while nodewalk valid={parent}{siblings,fake=parent}},
+}
+% \end{macrocode}
+%
+% |c-commanders| could also be defined using \indexex{branch}:
+% \begin{lstlisting}
+% branch={current and ancestors, siblings}
+% \end{lstlisting}
+%
+% \indexitem{node key>sn edges}
+%
+% In linguistics, most people want the parent-child edge to go from the \emph{s}outh of the parent
+% to the \emph{n}orth of the child. This is achieved by this (badly named) style, which makes the
+% entire (sub)tree have such edges.
+%
+% \begin{forestexample}
+% \begin{forest}
+% sn edges
+% [VP
+% [DP]
+% [V'
+% [V]
+% [DP]
+% ]
+% ]
+% \end{forest}
+% \end{forestexample}
+%
+% \begin{macrocode}
+\forestset{
+ sn edges/.style={
+ for tree={
+ parent anchor=children, child anchor=parent
+ }
+ },
+}
+% \end{macrocode}
+%
+% A note on implementation. Despite its name, this style does not refer to the |south| and |north|
+% anchor of the parent and the child node directly. If it did so, it would only work for trees with
+% standard linguistic \index{grow}|=-90|. So we rather use \FoRest;'s growth direction based
+% anchors: \index{anchor>children} always faces the children and \index{anchor>parent} always faces
+% the parent, so the edge will always be between them, and the normal, upward growing trees will
+% look good as well.
+%
+% \begin{forestexample}[index={anchor>south,anchor>north,option>parent anchor,option>child anchor}]
+% \begin{forest}
+% [bad![VP,no edge, for tree={grow=90, edge=red},
+% for tree={parent anchor=south, child anchor=north} % bad
+% [DP][V'[V][DP]]]]
+% \end{forest}
+% \begin{forest}
+% [good![VP, no edge, for tree={grow=90, edge=green},
+% ~sn edges~ % good!
+% [DP][V'[V][DP]]]]
+% \end{forest}
+% \end{forestexample}
+%
+% \indexitem{node key>roof} Makes the edge to parent a triangular roof.
+% \begin{macrocode}
+\forestset{
+ roof/.style={edge path'={%
+ (.parent first)--(!u.children)--(.parent last)--cycle
+ }
+ },
+}
+% \end{macrocode}
+%
+% \indexitem{node key>nice empty nodes}
+%
+% We often need empty nodes: tree (\ref{ex:niceemptynodes}a) shows how they look like by default:
+% ugly.
+%
+% First, we don't want the gaps: we change the shape of empty nodes to coordinate. We get tree
+% (\ref{ex:niceemptynodes}b).
+%
+% Second, the empty nodes seem too close
+% to the other (especially empty) nodes (this is a result of a small
+% default |s_sep|). We could use a greater \index{s sep}, but a better solution seems
+% to be to use |calign=fixed_angles|. The result is shown in (\ref{ex:niceemptynodes}c).
+%
+% However, at the transitions from empty to non-empty nodes, tree (\ref{ex:niceemptynodes}c)
+% seems to zigzag (although the base points of the spine nodes
+% are perfectly in line), and the edge to the empty node left to VP
+% seems too long (it reaches to the level of VP's base, while we'd
+% prefer it to stop at the same level as the edge to VP itself). The
+% first problem is solved by substituting |fixed_angles| for
+% |fixed_edge_angles|; the second one, by anchoring siblings of
+% empty nodes at north. Voilà, (\ref{ex:niceemptynodes}d)!
+%
+% \begin{forestexample}[label=ex:niceemptynodes,layout=tree on bottom,index={fixed angles,fixed edge angles,calign,tree,delay,where option,content,for step,step>parent,step>children,option>anchor}]
+% \forestset{
+% xlist/.style={
+% phantom,
+% for children={no edge,replace by={[,append,
+% delay={content/.wrap pgfmath arg={\csname @alph\endcsname{##1}.}{n()+#1}}
+% ]}}
+% },
+% xlist/.default=0
+% }
+% \begin{forest}
+% [,~xlist~,
+% for tree={after packing node={s+=0.1pt}}, % hack!!!
+% [CP, %(a)
+% [][[][[][VP[DP[John]][V'[V[loves]][DP[Mary]]]]]]]
+% [CP, delay={where content={}{shape=coordinate}{}} %(b)
+% [][[][[][VP[DP[John]][V'[V[loves]][DP[Mary]]]]]]]
+% [CP, for tree={calign=fixed angles}, %(c)
+% delay={where content={}{shape=coordinate}{}}
+% [][[][[][VP[DP[John]][V'[V[loves]][DP[Mary]]]]]]]
+% [CP, ~nice empty nodes~ %(d)
+% [][[][[][VP[DP[John]][V'[V[loves]][DP[Mary]]]]]]]
+% ]
+% \end{forest}
+% \end{forestexample}
+%
+% \begin{macrocode}
+\forestset{
+ nice empty nodes/.style={
+ for tree={calign=fixed edge angles},
+ delay={where content={}{shape=coordinate,
+ for current and siblings={anchor=north}}{}}
+ },
+}
+% \end{macrocode}
+%
+% \indexitem{node key>draw brackets} Outputs the bracket representation of the tree.
+% \indexitem{node key>draw brackets compact}
+% \itemnosep
+% \indexitem{node key>draw brackets wide} These keys control whether the brackets have extra
+% spaces around them (|wide|) or not (|compact|).
+% \begin{macrocode}
+\providecommand\text[1]{\mbox{\scriptsize#1}}
+\forestset{
+ draw brackets compact/.code={\let\drawbracketsspace\relax},
+ draw brackets wide/.code={\let\drawbracketsspace\space},
+ draw brackets/.style={
+% \end{macrocode}
+% There's stuff to do both before (output the opening bracket and the content) and after (output the
+% closing bracket) processing the children, so we use \indexex{for tree'}.
+% \begin{macrocode}
+ for tree'={
+ TeX={[%
+% \end{macrocode}
+% Complication: \index{content format} must be expanded in advance, to correctly process tabular environments implicitely loaded by \index{align}|=|\index{value of=align>center}, which is the default in this library. (Not that one would want a multiline output in the bracket representation, but it's better than crashing.)
+% \begin{macrocode}
+ \edef\forestdrawbracketscontentformat{\foresteoption{content format}}%
+ },
+ if n children=0{
+ TeX={\drawbracketsspace\forestdrawbracketscontentformat\drawbracketsspace}
+ }{
+ TeX={\textsubscript{\text{\forestdrawbracketscontentformat}}\drawbracketsspace}
+ },
+ }{
+ TeX={]\drawbracketsspace},
+ }
+ },
+ draw brackets wide
+}
+% \end{macrocode}
+% \end{syntax}
+%
+% \subsubsection{GP1}
+%
+% \begin{syntax}
+% \indexitem{node key>GP1}
+%
+% For Government Phonology (v1) representations. Here, the big trick
+% is to evenly space $\times$s by having a large enough |outer_xsep|
+% (adjustable), and then, before drawing (timing control option
+% |before_drawing_tree|), setting |outer_xsep| back to 0pt. The last step
+% is important, otherwise the arrows between $\times$s won't draw!
+%
+% An example of an ``embedded'' |GP1| style:
+% \begin{forestexample}[layout=tree on bottom,index={where option,tier,for step,step>children,content,tikz,option>l,dimen+,no edge},index>={!}]
+% \begin{forest}
+% myGP1/.style={
+% ~GP1~,
+% delay={where tier={x}{
+% for children={content=\textipa{##1}}}{}},
+% tikz={\draw[dotted](.south)--
+% (!1.north west)--(!l.north east)--cycle;},
+% for children={l+=5mm,no edge}
+% }
+% [VP[DP[John,tier=word,myGP1
+% [O[x[dZ]]]
+% [R[N[x[6]]]]
+% [O[x[n]]]
+% [R[N[x]]]
+% ]][V'[V[loves,tier=word,myGP1
+% [O[x[l]]]
+% [R[N[x[a]]]]
+% [O[x[v]]]
+% [R[N[x]]]
+% [O[x[z]]]
+% [R[N[x]]]
+% ]][DP[Mary,tier=word,myGP1
+% [O[x[m]]]
+% [R[N[x[e]]]]
+% [O[x[r]]]
+% [R[N[x[i]]]]
+% ]]]]
+% \end{forest}%
+% \end{forestexample}
+%
+% And an example of annotations.
+% \begin{forestexample}
+% \begin{forest}[,phantom,s sep=1cm
+% [{[ei]}, GP1
+% [R[N[x[A,~el~[I,~head~,~associate=N~]]][x]]]
+% ]
+% [{[mars]}, GP1
+% [O[x[m]]]
+% [R[N[x[a]]][x,~encircle~,densely dotted[r]]]
+% [O[x,~encircle~,~govern=<~[s]]]
+% [R,~fen~[N[x]]]
+% ]
+% ]\end{forest}
+% \end{forestexample}
+%
+% \begin{macrocode}
+\newbox\standardnodestrutbox
+\setbox\standardnodestrutbox=\hbox to 0pt{\phantom{\forestOve{standard node}{content}}}
+\def\standardnodestrut{\copy\standardnodestrutbox}
+\forestset{
+ GP1/.style 2 args={
+ for n={1}{baseline},
+ s sep=0pt, l sep=0pt,
+ for descendants={
+ l sep=0pt, l={#1},
+ anchor=base,calign=first,child anchor=north,
+ inner xsep=1pt,inner ysep=2pt,outer sep=0pt,s sep=0pt,
+ },
+ delay={
+ if content={}{phantom}{for children={no edge}},
+ for tree={
+ if content={O}{tier=OR}{},
+ if content={R}{tier=OR}{},
+ if content={N}{tier=N}{},
+ if content={x}{
+ tier=x,content={$\times$},outer xsep={#2},
+ for tree={calign=center},
+ for descendants={content format={\noexpand\standardnodestrut\forestoption{content}}},
+ before drawing tree={outer xsep=0pt,delay={typeset node}},
+ s sep=4pt
+ }{},
+ },
+ },
+ before drawing tree={where content={}{parent anchor=center,child anchor=center}{}},
+ },
+ GP1/.default={5ex}{8.0pt},
+ associate/.style={%
+ tikz+={\draw[densely dotted](!)--(!#1);}},
+ spread/.style={
+ before drawing tree={tikz+={\draw[dotted](!)--(!#1);}}},
+ govern/.style={
+ before drawing tree={tikz+={\draw[->](!)--(!#1);}}},
+ p-govern/.style={
+ before drawing tree={tikz+={\draw[->](.north) to[out=150,in=30] (!#1.north);}}},
+ no p-govern/.style={
+ before drawing tree={tikz+={\draw[->,loosely dashed](.north) to[out=150,in=30] (!#1.north);}}},
+ encircle/.style={before drawing tree={circle,draw,inner sep=0pt}},
+ fen/.style={pin={[font=\footnotesize,inner sep=1pt,pin edge=<-]10:\textsc{Fen}}},
+ el/.style={content=\textsc{\textbf{##1}}},
+ head/.style={content=\textsc{\textbf{\underline{##1}}}}
+}
+% \end{macrocode}
+% \end{syntax}
+%\iffalse
+%</linguistics>
+%\fi
+%
+%
+%
+%\iffalse
+%<*edges>
+%\fi
+% \librarysection{edges}
+% \begin{macrocode}
+\ProvidesForestLibrary{edges}[2016/12/05 v0.1.1]
+% \end{macrocode}
+%
+% \begin{syntax}
+%
+% \indexitem{node key>forked edge'}
+%
+% Sets a forked edge to the current node. Arbitrary growth direction and node rotation are
+% supported.
+%
+% \indexitem{node key>forked edge}
+%
+% Like \index{forked edge'}, but it also sets \index{option>parent anchor} and \index{option>child
+% anchor} to the likely values of \index{anchor>children} and \index{anchor>parent}, respectively.
+%
+% \indexitem(tree){node key>forked edges}|=|\meta{nodewalk}
+%
+% Invokes \index{forked edge} for all nodes in the \meta{nodewalk}, by default the entire (sub)tree
+% rooted in the current node.
+%
+% \indexitem{option>fork sep} The \index{forest cs>l}-distance between the parent anchor and the
+% fork.
+%
+% \end{syntax}
+%
+% \begin{forestexample}[index={for step,tree,grow',forked edges}]
+% \begin{forest}
+% for tree={grow'=0,draw},
+% forked edges,
+% [/
+% [home
+% [saso
+% [Download]
+% [TeX]
+% ]
+% [alja]
+% [joe]
+% ]
+% [usr
+% [bin]
+% [share]
+% ]
+% ]
+% \end{forest}
+% \end{forestexample}
+%
+% See how growth direction based anchors \indexex{anchor>children} and \indexex{anchor>parent} are
+% used in the definition below to easily take care of arbitrary \index{grow} and
+% \index{rotate}.
+% \begin{macrocode}
+\forestset{
+ declare dimen={fork sep}{0.5em},
+ forked edge'/.style={
+ edge={rotate/.option=!parent.grow},
+ edge path'={(!u.parent anchor) -- ++(\forestoption{fork sep},0) |- (.child anchor)},
+ },
+ forked edge/.style={
+ on invalid={fake}{!parent.parent anchor=children},
+ child anchor=parent,
+ forked edge',
+ },
+ forked edges/.style={for nodewalk={#1}{forked edge}},
+ forked edges/.default=tree,
+}
+% \end{macrocode}
+%
+% \begin{syntax}
+% \indexitem{node key>folder} The children of the node are drawn like folders.
+%
+% All growth directions are supported (well, cardinal directions work perfectly; the others await
+% the sensitivity of packing to \index{edge path}), as well as node rotation and \index{reversed}
+% order of children.
+%
+% The outlook of the folder can be influenced by setting standard \foRest;'s options \index{l sep}
+% and \index{s sep} any time before packing, or \index{option>l} and \index{option>s} after
+% packing. Setting \index{option>l} and \index{option>s} before packing will have no influence on
+% the layout of the tree.
+%
+% \begin{syntax}
+% \indexitem(.45em){register>folder indent}|=|\meta{dimen}
+%
+% Specifies the shift of the parent's side of the edge in the \index{forest cs>l}-direction.
+% \end{syntax}
+%
+% \end{syntax}
+%
+% \begin{forestexample}[index={for step,tree,grow',folder}]
+% \begin{forest}
+% for tree={grow'=0,~folder~,draw}
+% [/
+% [home
+% [saso
+% [Download]
+% [TeX]
+% ]
+% [alja]
+% [joe]
+% ]
+% [usr
+% [bin]
+% [share]
+% ]
+% ]
+% \end{forest}
+% \end{forestexample}
+% \begin{macrocode}
+\forestset{
+ declare dimen register=folder indent,
+ folder indent=.45em,
+ folder/.style={
+ parent anchor=-children last,
+ anchor=parent first,
+ calign=child,
+ calign primary child=1,
+ for children={
+ child anchor=parent,
+ anchor=parent first,
+ edge={rotate/.option=!parent.grow},
+ edge path'/.expanded={
+ ([xshift=\forestregister{folder indent}]!u.parent anchor) |- (.child anchor)
+ },
+ },
+ after packing node={
+ if n children=0{}{
+ tempdiml=l_sep()-l("!1"),
+ tempdims={-abs(max_s("","")-min_s("",""))-s_sep()},
+ for children={
+ l+=tempdiml,
+ s+=tempdims()*(reversed()-0.5)*2,
+ },
+ },
+ },
+ }
+}
+% \end{macrocode}
+%\iffalse
+%</edges>
+%\fi
+% \forestset{every index end/.style={}}
+% \endinput
+% Local Variables:
+% mode: doctex
+% TeX-command-default: "sty"
+% fill-column: 100
+% TeX-master: "forest"
+% End:
diff --git a/graphics/pgf/contrib/forest/forest.dtx b/graphics/pgf/contrib/forest/forest.dtx
new file mode 100644
index 0000000000..4b136615db
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest.dtx
@@ -0,0 +1,10913 @@
+% \CheckSum{16651}
+% \iffalse meta-comment
+% forest.dtx
+%% `forest' is a `pgf/tikz'-based package for drawing (linguistic) trees.
+%%
+%% Copyright (c) 2012-2017 Saso Zivanovic
+%% (Sa\v{s}o \v{Z}ivanovi\'{c})
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `author-maintained'.
+%%
+%% This work consists of the following files:
+%% - forest.dtx: central sources (with rudimentary implementation documentation)
+%% - forest-libs.dtx: sources and documentation for libraries
+%% + forest-compat.sty: sources/runtime for compatibility mode
+%% - forest.ins: produces derived runtime .sty files
+%% + forest.sty: main package
+%% + forest-lib-*.sty: libraries (for the list, see forest.ins)
+%% - forest-doc.tex: central documentation
+%% - forest-doc.sty: private package needed to compile the documentation
+%% - forest-index.dtx: sources of indexing package used in the documentation,
+%% and also part of the documentation itself
+%% - forest-doc.ins: produces derived .sty files needed to compile the documentation
+%% - forest-index.sty
+%% - forest-doc.ist: index style file needed to compile the documentation
+%% - forest.pdf: documentation of core package implementation
+%% - forest-doc.pdf: user's guide
+%% - README
+%% - LICENCE
+%% To use the package, only the files marked with + need to be installed.
+%%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+
+\usepackage{forest}
+\usepackage{forest-doc}
+
+\usepackage{fullpage}
+\usepackage{hyperref}
+\hypersetup{colorlinks=true,linkcolor=blue,citecolor=blue,hyperindex=false}
+\usepackage{url}
+
+%\input forest-common
+
+\begin{document}
+ \DocInput{forest.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{Implementation of \FoRest;, a \PGF;/\TikZ;-based package for drawing linguistic
+% trees\\\normalsize\forestversion}
+%
+% \author{Sa\v so \v Zivanovi\'c\footnote{e-mail:
+% \href{mailto:saso.zivanovic@guest.arnes.si}{saso.zivanovic@guest.arnes.si}; web:
+% \href{http://spj.ff.uni-lj.si/zivanovic/}{http://spj.ff.uni-lj.si/zivanovic/}}}
+%
+% \settodayfromforestdate
+%
+% \maketitle
+%
+% This file contains the documented source of \foRest;. If you are searching for the manual, follow
+% this link to \href{http://mirrors.ctan.org/graphics/pgf/contrib/forest/forest-doc.pdf}{forest-doc.pdf}.
+%
+% The latest release of the package, including the sources, can be found on
+% \href{http://ctan.org/pkg/forest}{CTAN}. For all versions of the package, including any
+% non-yet-released work in progress, visit \href{https://github.com/sasozivanovic/forest}{\foRest;'s
+% GitHub repo}. Contributions are welcome.
+%
+% A disclaimer: the code could've been much cleaner and better-documented \dots
+%
+% \tableofcontents
+%
+% \section{Identification}
+% \begin{macrocode}
+\ProvidesPackage{forest}[2017/07/14 v2.1.5 Drawing (linguistic) trees]
+
+\RequirePackage{tikz}[2013/12/13]
+\usetikzlibrary{shapes}
+\usetikzlibrary{fit}
+\usetikzlibrary{calc}
+\usepgflibrary{intersections}
+
+\RequirePackage{pgfopts}
+\RequirePackage{etoolbox}[2010/08/21]
+\RequirePackage{elocalloc}% for \locbox
+\RequirePackage{environ}
+\RequirePackage{xparse}
+
+\RequirePackage{inlinedef}
+\newtoks\ID@usercommands{}
+\newcommand\NewInlineCommand[3][0]{%
+ \newcommand#2[#1]{#3}%
+ \ID@usercommands\xa{%
+ \the\ID@usercommands
+ \ifx\@foo#2%
+ \def\next{\ID@expandunsafe#2}%
+ \fi
+ }%
+}
+\def\@ExpandIfTF#1{%
+ \csname
+ % I'm not 100% sure if this plays well in every situation
+ \csname if#1\endcsname
+ @firstoftwo%
+ \else
+ @secondoftwo%
+ \fi
+ \endcsname
+}
+\patchcmd{\ID@switch}
+ {\ifcat\noexpand\@foo\space}
+ {\the\ID@usercommands\ifcat\noexpand\@foo\space}
+ {%
+ \NewInlineCommand[2]\ExpandIfT{%
+ \MultiExpand{3}{%
+ \@ExpandIfTF{#1}{#2}{}%
+ }%
+ }
+ \NewInlineCommand[2]\ExpandIfF{%
+ \MultiExpand{3}{%
+ \@ExpandIfTF{#1}{}{#2}%
+ }%
+ }
+ \NewInlineCommand[3]\ExpandIfTF{%
+ \MultiExpand{3}{%
+ \@ExpandIfTF{#1}{#2}{#3}%
+ }%
+ }%
+ \newcommand\InlineNoDef[1]{%
+ \begingroup
+ % Define a few ``quarks''
+ \def\Expand{\Expand}\def\Super{\Super}%
+ \def\UnsafeExpand{\UnsafeExpand}\def\MultiExpand{\MultiExpand}%
+ \def\Recurse{\Recurse}\def\NoExpand{\NoExpand}%
+ \def\Q@END{\Q@END}%
+ % Define a toks register
+ \ID@toks{}%
+ % Signal that we need to look for a star
+ \@testtrue\ID@starfalse\ID@starstarfalse\ID@bangfalse
+ % Start scanning for \def or \gdef
+ \ID@scan#1\Q@END{}%
+ \expandafter\endgroup
+ %\expandafter\@firstofone
+ \the\ID@toks
+ }%
+ }%
+ {%
+ \PackageWarning{forest}{Could not patch inlinedef! Disabling it. Except in some special situations (nested arrays), stuff will probably still work, but there's no guarantee. Please report this situation to the author (but check first if a new version already exists).}{}%
+ \let\Inline\relax
+ \def\Expand#1{#1}%
+ \def\MultiExpand#1#2{#2}%
+ \def\InlineNoDef#1{#1}%
+ \def\ExpandIfT#1#2{\@ExpandIfTF{#1}{#2}{}}%
+ \def\ExpandIfF#1#2{\@ExpandIfTF{#1}{}{#2}}%
+ \def\ExpandIfTF#1#2#3{\@ExpandIfTF{#1}{#2}{#3}}%
+ }
+% \end{macrocode}
+%
+% |/forest| is the root of the key hierarchy.
+% \begin{macrocode}
+\pgfkeys{/forest/.is family}
+\def\forestset#1{\pgfqkeys{/forest}{#1}}
+% \end{macrocode}
+%
+% \section{Package options}
+% \begin{macrocode}
+\newif\ifforest@external@
+\newif\ifforesttikzcshack
+\newif\ifforest@install@keys@to@tikz@path@
+\newif\ifforestdebugnodewalks
+\newif\ifforestdebugdynamics
+\newif\ifforestdebugprocess
+\newif\ifforestdebugtemp
+\newif\ifforestdebug
+\def\forest@compat{}
+\forestset{package@options/.cd,
+ external/.is if=forest@external@,
+ tikzcshack/.is if=foresttikzcshack,
+ tikzinstallkeys/.is if=forest@install@keys@to@tikz@path@,
+ compat/.code={\appto\forest@compat{,#1}},
+ compat/.default=most,
+ .unknown/.code={% load library
+ \eappto\forest@loadlibrarieslater{%
+ \noexpand\useforestlibrary{\pgfkeyscurrentname}%
+ \noexpand\forestapplylibrarydefaults{\pgfkeyscurrentname}%
+ }%
+ },
+ debug/.code={\forestdebugtrue\pgfqkeys{/forest/package@options/debug}{#1}},
+ debug/.default={nodewalks,dynamics,process},
+ debug/nodewalks/.is if=forestdebugnodewalks,
+ debug/dynamics/.is if=forestdebugdynamics,
+ debug/process/.is if=forestdebugprocess,
+}
+\forest@install@keys@to@tikz@path@true
+\foresttikzcshacktrue
+\def\forest@loadlibrarieslater{}
+\AtEndOfPackage{\forest@loadlibrarieslater}
+\NewDocumentCommand\useforestlibrary{s O{} m}{%
+ \def\useforestlibrary@@##1{\useforestlibrary@{#2}{##1}}%
+ \forcsvlist\useforestlibrary@@{#3}%
+ \IfBooleanT{#1}{\forestapplylibrarydefaults{#3}}%
+}
+\def\useforestlibrary@#1#2{%
+ \RequirePackage[#1]{forest-lib-#2}%
+ \csuse{forest@compat@libraries@#2}%
+}
+\def\forestapplylibrarydefaults#1{\forcsvlist\forestapplylibrarydefaults@{#1}}
+\def\forestapplylibrarydefaults@#1{\forestset{libraries/#1/defaults/.try}}
+\NewDocumentCommand\ProvidesForestLibrary{m O{}}{%
+ \ProvidesPackage{forest-lib-#1}[#2]%
+ \csdef{forest@libraries@loaded@#1}{}%
+}
+\def\forest@iflibraryloaded#1#2#3{\ifcsdef{forest@libraries@loaded@#1}{#2}{#3}}
+\ProcessPgfPackageOptions{/forest/package@options}
+% \end{macrocode}
+% \section{Patches}
+%
+% This macro implements a fairly safe patching mechanism: the code is only patched if the original
+% hasn't changed. If it did change, a warning message is printed. (This produces a spurious warning
+% when the new version of the code fixes something else too, but what the heck.)
+%
+% \begin{macrocode}
+\def\forest@patch#1#2#3#4#5{%
+ % #1 = cs to be patched
+ % %2 = purpose of the patch
+ % #3 = macro arguments
+ % #4 = original code
+ % #5 = patched code
+ \csdef{forest@original@#1}#3{#4}%
+ \csdef{forest@patched@#1}#3{#5}%
+ \ifcsequal{#1}{forest@original@#1}{%
+ \csletcs{#1}{forest@patched@#1}%
+ }{%
+ \ifcsequal{#1}{forest@patched@#1}{% all is good, the patch is in!
+ }{%
+ \PackageWarning{forest}{Failed patching '\expandafter\string\csname #1\endcsname'. Purpose of the patch: #2}%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% Patches for \PGF; 3.0.0 --- required version is [2013/12/13].
+% \begin{macrocode}
+\forest@patch{pgfgettransform}{fix a leaking space}{#1}{%
+ \edef#1{{\pgf@pt@aa}{\pgf@pt@ab}{\pgf@pt@ba}{\pgf@pt@bb}{\the\pgf@pt@x}{\the\pgf@pt@y}}
+}{%
+ \edef#1{{\pgf@pt@aa}{\pgf@pt@ab}{\pgf@pt@ba}{\pgf@pt@bb}{\the\pgf@pt@x}{\the\pgf@pt@y}}%
+}
+% \end{macrocode}
+%
+% \section{Utilities}
+%
+% This is handy.
+% \begin{macrocode}
+\def\forest@empty{}
+% \end{macrocode}
+%
+% Escaping |\if|s.
+% \begin{macrocode}
+\long\def\@escapeif#1#2\fi{\fi#1}
+\long\def\@escapeifif#1#2\fi#3\fi{\fi\fi#1}
+\long\def\@escapeififif#1#2\fi#3\fi#4\fi{\fi\fi\fi#1}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\forest@repeat@n@times#1{% #1=n, #2=code
+ \expandafter\forest@repeat@n@times@\expandafter{\the\numexpr#1}}
+\def\forest@repeat@n@times@#1{%
+ \ifnum#1>0
+ \@escapeif{%
+ \expandafter\forest@repeat@n@times@@\expandafter{\the\numexpr#1-1}%
+ }%
+ \else
+ \expandafter\@gobble
+ \fi
+}
+\def\forest@repeat@n@times@@#1#2{%
+ #2%
+ \forest@repeat@n@times@{#1}{#2}%
+}
+% \end{macrocode}
+%
+% A factory for creating |\...loop...| macros.
+% \begin{macrocode}
+\def\newloop#1{%
+ \count@=\escapechar
+ \escapechar=-1
+ \expandafter\newloop@parse@loopname\string#1\newloop@end
+ \escapechar=\count@
+}%
+{\lccode`7=`l \lccode`8=`o \lccode`9=`p
+ \lowercase{\gdef\newloop@parse@loopname#17889#2\newloop@end{%
+ \edef\newloop@marshal{%
+ \noexpand\csdef{#1loop#2}####1\expandafter\noexpand\csname #1repeat#2\endcsname{%
+ \noexpand\csdef{#1iterate#2}{####1\relax\noexpand\expandafter\expandafter\noexpand\csname#1iterate#2\endcsname\noexpand\fi}%
+ \expandafter\noexpand\csname#1iterate#2\endcsname
+ \let\expandafter\noexpand\csname#1iterate#2\endcsname\relax
+ }%
+ }%
+ \newloop@marshal
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% Loop that can be arbitrarily nested. (Not in the same macro, however: use another macro for the inner loop.) Usage: |\safeloop_code_\if..._code_\saferepeat|. |\safeloopn| expands to the current repetition number of the innermost group.
+% \begin{macrocode}
+\def\newsafeloop#1{%
+ \csdef{safeloop@#1}##1\saferepeat{%
+ \forest@temp@toks{##1}%
+ \csedef{safeiterate@#1}{%
+ \the\forest@temp@toks\relax
+ \noexpand\expandafter
+ \expandonce{\csname safeiterate@#1\endcsname}%
+ \noexpand\fi
+ }%
+ \csuse{safeiterate@#1}%
+ \advance\noexpand\safeloop@depth-1\relax
+ \cslet{safeiterate@#1}\relax
+ }%
+ \expandafter\newif\csname ifsafebreak@\the\safeloop@depth\endcsname
+}%
+\newcount\safeloop@depth
+\def\safeloop{%
+ \advance\safeloop@depth1
+ \ifcsdef{safeloop@\the\safeloop@depth}{}{\expandafter\newsafeloop\expandafter{\the\safeloop@depth}}%
+ \csdef{safeloopn@\the\safeloop@depth}{0}%
+ \csuse{safeloop@\the\safeloop@depth}%
+ \csedef{safeloopn@\the\safeloop@depth}{\number\numexpr\csuse{safeloopn@\the\safeloop@depth}+1}%
+}
+\let\saferepeat\fi
+\def\safeloopn{\csuse{safeloopn@\the\safeloop@depth}}%
+% \end{macrocode}
+%
+% Another safeloop for usage with ``repeat'' / ``while'' // ``until'' keys, so that the user can refer to loop $n$s for outer loops.
+% \begin{macrocode}
+\def\newsafeRKloop#1{%
+ \csdef{safeRKloop@#1}##1\safeRKrepeat{%
+ \forest@temp@toks{##1}%
+ \csedef{safeRKiterate@#1}{%
+ \the\forest@temp@toks\relax
+ \noexpand\expandafter
+ \expandonce{\csname safeRKiterate@#1\endcsname}%
+ \noexpand\fi
+ }%
+ \csuse{safeRKiterate@#1}%
+ \advance\noexpand\safeRKloop@depth-1\relax
+ \cslet{safeRKiterate@#1}\relax
+ }%
+ \expandafter\newif\csname ifsafeRKbreak@\the\safeRKloop@depth\endcsname
+}%
+\newcount\safeRKloop@depth
+\def\safeRKloop{%
+ \advance\safeRKloop@depth1
+ \ifcsdef{safeRKloop@\the\safeRKloop@depth}{}{\expandafter\newsafeRKloop\expandafter{\the\safeRKloop@depth}}%
+ \csdef{safeRKloopn@\the\safeRKloop@depth}{0}%
+ \csuse{safeRKbreak@\the\safeRKloop@depth false}%
+ \csuse{safeRKloop@\the\safeRKloop@depth}%
+ \csedef{safeRKloopn@\the\safeRKloop@depth}{\number\numexpr\csuse{safeRKloopn@\the\safeRKloop@depth}+1}%
+}
+\let\safeRKrepeat\fi
+\def\safeRKloopn{\csuse{safeRKloopn@\the\safeRKloop@depth}}%
+% \end{macrocode}
+%
+% Additional loops (for embedding).
+% \begin{macrocode}
+\newloop\forest@loop
+% \end{macrocode}
+% New counters, dimens, ifs.
+% \begin{macrocode}
+\newdimen\forest@temp@dimen
+\newcount\forest@temp@count
+\newcount\forest@n
+\newif\ifforest@temp
+\newcount\forest@temp@global@count
+\newtoks\forest@temp@toks
+% \end{macrocode}
+%
+% Appending and prepending to token lists.
+% \begin{macrocode}
+\def\etotoks#1#2{\edef\pot@temp{#2}\expandafter#1\expandafter{\pot@temp}}
+\def\apptotoks#1#2{\expandafter#1\expandafter{\the#1#2}}
+\long\def\lapptotoks#1#2{\expandafter#1\expandafter{\the#1#2}}
+\def\eapptotoks#1#2{\edef\pot@temp{#2}\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter\the\expandafter#1\pot@temp}}
+\def\pretotoks#1#2{\toks@={#2}\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter\the\expandafter\toks@\the#1}}
+\def\epretotoks#1#2{\edef\pot@temp{#2}\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter\pot@temp\the#1}}
+\def\gapptotoks#1#2{\expandafter\global\expandafter#1\expandafter{\the#1#2}}
+\def\xapptotoks#1#2{\edef\pot@temp{#2}\expandafter\expandafter\expandafter\global\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter\the\expandafter#1\pot@temp}}
+\def\gpretotoks#1#2{\toks@={#2}\expandafter\expandafter\expandafter\global\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter\the\expandafter\toks@\the#1}}
+\def\xpretotoks#1#2{\edef\pot@temp{#2}\expandafter\expandafter\expandafter\global\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter\pot@temp\the#1}}
+% \end{macrocode}
+%
+% Expanding number arguments.
+% \begin{macrocode}
+\def\expandnumberarg#1#2{\expandafter#1\expandafter{\number#2}}
+\def\expandtwonumberargs#1#2#3{%
+ \expandafter\expandtwonumberargs@\expandafter#1\expandafter{\number#3}{#2}}
+\def\expandtwonumberargs@#1#2#3{%
+ \expandafter#1\expandafter{\number#3}{#2}}
+\def\expandthreenumberargs#1#2#3#4{%
+ \expandafter\expandthreenumberargs@\expandafter#1\expandafter{\number#4}{#2}{#3}}
+\def\expandthreenumberargs@#1#2#3#4{%
+ \expandafter\expandthreenumberargs@@\expandafter#1\expandafter{\number#4}{#2}{#3}}
+\def\expandthreenumberargs@@#1#2#3#4{%
+ \expandafter#1\expandafter{\number#4}{#2}{#3}}
+% \end{macrocode}
+%
+% A macro converting all non-alphanumerics (and an initial number) in a string to |__|. |#1| =
+% string, |#2| = receiving macro. Used for declaring pgfmath functions.
+% \begin{macrocode}
+\def\forest@convert@others@to@underscores#1#2{%
+ \def\forest@cotu@result{}%
+ \forest@cotu@first#1\forest@end
+ \let#2\forest@cotu@result
+}
+\def\forest@cotu{%
+ \let\forest@cotu@have@num\forest@cotu@have@alpha
+ \futurelet\forest@cotu@nextchar\forest@cotu@checkforspace
+}
+\def\forest@cotu@first{%
+ \let\forest@cotu@have@num\forest@cotu@haveother
+ \futurelet\forest@cotu@nextchar\forest@cotu@checkforspace
+}
+\def\forest@cotu@checkforspace{%
+ \expandafter\ifx\space\forest@cotu@nextchar
+ \let\forest@cotu@next\forest@cotu@havespace
+ \else
+ \let\forest@cotu@next\forest@cotu@nospace
+ \fi
+ \forest@cotu@next
+}
+\def\forest@cotu@havespace#1{%
+ \appto\forest@cotu@result{_}%
+ \forest@cotu#1%
+}
+\def\forest@cotu@nospace{%
+ \ifx\forest@cotu@nextchar\forest@end
+ \@escapeif\@gobble
+ \else
+ \@escapeif\forest@cotu@nospaceB
+ \fi
+}
+\def\forest@cotu@nospaceB#1{%
+ \ifcat#1a%
+ \let\forest@cotu@next\forest@cotu@have@alpha
+ \else
+ \if!\ifnum9<1#1!\fi
+ \let\forest@cotu@next\forest@cotu@have@num
+ \else
+ \let\forest@cotu@next\forest@cotu@haveother
+ \fi
+ \fi
+ \forest@cotu@next#1%
+}
+\def\forest@cotu@have@alpha#1{%
+ \appto\forest@cotu@result{#1}%
+ \forest@cotu
+}
+\def\forest@cotu@haveother#1{%
+ \appto\forest@cotu@result{_}%
+ \forest@cotu
+}
+% \end{macrocode}
+%
+% Additional list macros.
+% \begin{macrocode}
+\def\forest@listedel#1#2{% #1 = list, #2 = item
+ \edef\forest@marshal{\noexpand\forest@listdel\noexpand#1{#2}}%
+ \forest@marshal
+}
+\def\forest@listcsdel#1#2{%
+ \expandafter\forest@listdel\csname #1\endcsname{#2}%
+}
+\def\forest@listcsedel#1#2{%
+ \expandafter\forest@listedel\csname #1\endcsname{#2}%
+}
+\edef\forest@restorelistsepcatcode{\noexpand\catcode`|\the\catcode`|\relax}%
+\catcode`\|=3
+\gdef\forest@listdel#1#2{%
+ \def\forest@listedel@A##1|#2|##2\forest@END{%
+ \forest@listedel@B##1|##2\forest@END%|
+ }%
+ \def\forest@listedel@B|##1\forest@END{%|
+ \def#1{##1}%
+ }%
+ \expandafter\forest@listedel@A\expandafter|#1\forest@END%|
+}
+\forest@restorelistsepcatcode
+% \end{macrocode}
+%
+% Strip (the first level of) braces from all the tokens in the argument.
+% \begin{macrocode}
+\def\forest@strip@braces#1{%
+ \forest@strip@braces@A#1\forest@strip@braces@preend\forest@strip@braces@end
+}
+\def\forest@strip@braces@A#1#2\forest@strip@braces@end{%
+ #1\ifx\forest@strip@braces@preend#2\else\@escapeif{\forest@strip@braces@A#2\forest@strip@braces@end}\fi
+}
+% \end{macrocode}
+%
+% Utilities dealing with pgfkeys.
+% \begin{macrocode}
+\def\forest@copycommandkey#1#2{% copies command of #1 into #2
+ \pgfkeysifdefined{#1/.@cmd}{}{%
+ \PackageError{forest}{Key #1 is not a command key}{}%
+ }%
+ \pgfkeysgetvalue{#1/.@cmd}\forest@temp
+ \pgfkeyslet{#2/.@cmd}\forest@temp
+ \pgfkeysifdefined{#1/.@args}{%
+ \pgfkeysgetvalue{#1/.@args}\forest@temp
+ \pgfkeyslet{#2/.@args}\forest@temp
+ }{}%
+ \pgfkeysifdefined{#1/.@body}{%
+ \pgfkeysgetvalue{#1/.@body}\forest@temp
+ \pgfkeyslet{#2/.@body}\forest@temp
+ }{}%
+ \pgfkeysifdefined{#1/.@@body}{%
+ \pgfkeysgetvalue{#1/.@@body}\forest@temp
+ \pgfkeyslet{#2/.@@body}\forest@temp
+ }{}%
+ \pgfkeysifdefined{#1/.@def}{%
+ \pgfkeysgetvalue{#1/.@def}\forest@temp
+ \pgfkeyslet{#2/.@def}\forest@temp
+ }{}%
+}
+\forestset{
+ copy command key/.code 2 args={\forest@copycommandkey{#1}{#2}},
+ autoforward/.code 2 args={\forest@autoforward{#1}{#2={#1={##1}}}{true}},
+ autoforward'/.code 2 args={\forest@autoforward{#1}{#2-=#1,#2={#1={##1}}}{true}},
+ Autoforward/.code 2 args={\forest@autoforward{#1}{#2}{true}},
+ autoforward register/.code 2 args={\forest@autoforward{#1}{#2={#1={##1}}}{false}},
+ autoforward register'/.code 2 args={\forest@autoforward{#1}{#2-=#1,#2={#1={##1}}}{false}},
+ Autoforward register/.code 2 args={\forest@autoforward{#1}{#2}{false}},
+ copy command key@if it exists/.code 2 args={%
+ \pgfkeysifdefined{#1/.@cmd}{%
+ \forest@copycommandkey{#1}{#2}%
+ }{}%
+ },
+ unautoforward/.style={
+ typeout={unautoforwarding #1},
+ copy command key@if it exists={/forest/autoforwarded #1}{/forest/#1},
+ copy command key@if it exists={/forest/autoforwarded #1+}{/forest/#1+},
+ copy command key@if it exists={/forest/autoforwarded #1-}{/forest/#1-},
+ copy command key@if it exists={/forest/autoforwarded #1*}{/forest/#1*},
+ copy command key@if it exists={/forest/autoforwarded #1:}{/forest/#1:},
+ copy command key@if it exists={/forest/autoforwarded #1'}{/forest/#1'},
+ copy command key@if it exists={/forest/autoforwarded #1+'}{/forest/#1+'},
+ copy command key@if it exists={/forest/autoforwarded #1-'}{/forest/#1-'},
+ copy command key@if it exists={/forest/autoforwarded #1*'}{/forest/#1*'},
+ copy command key@if it exists={/forest/autoforwarded #1:'}{/forest/#1:'},
+ copy command key@if it exists={/forest/autoforwarded +#1}{/forest/+#1},
+ },
+ /handlers/.undef/.code={\csundef{pgfk@\pgfkeyscurrentpath}},
+ undef option/.style={
+ /forest/#1/.undef,
+ /forest/#1/.@cmd/.undef,
+ /forest/#1+/.@cmd/.undef,
+ /forest/#1-/.@cmd/.undef,
+ /forest/#1*/.@cmd/.undef,
+ /forest/#1:/.@cmd/.undef,
+ /forest/#1'/.@cmd/.undef,
+ /forest/#1+'/.@cmd/.undef,
+ /forest/#1-'/.@cmd/.undef,
+ /forest/#1*'/.@cmd/.undef,
+ /forest/#1:'/.@cmd/.undef,
+ /forest/+#1/.@cmd/.undef,
+ /forest/TeX={\patchcmd{\forest@node@init}{\forestoinit{#1}}{}{}{}},
+ },
+ undef register/.style={undef option={#1}},
+}
+\def\forest@autoforward#1#2#3{%
+ % #1 = option name
+ % #2 = code of a style taking one arg (new option value),
+ % which expands to whatever should be done with the new value
+ % autoforward(') adds to the keylist (arg#2)
+ % #3 = true=option, false=register
+ \forest@autoforward@createforwarder{}{#1}{}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{+}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{-}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{*}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{:}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{'}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{+'}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{-'}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{*'}{#2}{#3}%
+ \forest@autoforward@createforwarder{}{#1}{:'}{#2}{#3}%
+ \forest@autoforward@createforwarder{+}{#1}{}{#2}{#3}%
+}
+\def\forest@autoforward@createforwarder#1#2#3#4#5{%
+ % #1=prefix, #2=option name, #3=suffix, #4=macro code (#2 above), #5=option or register
+ \pgfkeysifdefined{/forest/#1#2#3/.@cmd}{%
+ \forest@copycommandkey{/forest/#1#2#3}{/forest/autoforwarded #1#2#3}%
+ \pgfkeyssetvalue{/forest/autoforwarded #1#2#3/option@name}{#2}%
+ \pgfkeysdef{/forest/#1#2#3}{%
+ \pgfkeysalso{autoforwarded #1#2#3={##1}}%
+ \def\forest@temp@macro####1{#4}%
+ \csname forest@temp#5\endcsname
+ \edef\forest@temp@value{\ifforest@temp\expandafter\forestOv\expandafter{\expandafter\forest@setter@node\expandafter}\else\expandafter\forestrv\fi{#2}}%
+ %\expandafter\expandafter\expandafter\pgfkeysalso\expandafter\expandafter\expandafter{\expandafter\forest@temp@macro\expandafter{\forest@temp@value}}% ??? how many expansions are really needed?
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfkeysalso\expandafter\expandafter\expandafter{\expandafter\forest@temp@macro\expandafter{\forest@temp@value}}%
+ }%
+ }{}%
+}
+\def\forest@node@removekeysfromkeylist#1#2{% #1 = keys to remove, #2 = option name
+ \edef\forest@marshal{%
+ \noexpand\forest@removekeysfromkeylist{\unexpanded{#1}}{\forestov{#2}}\noexpand\forest@temp@toks}\forest@marshal
+ \forestoeset{#2}{\the\forest@temp@toks}%
+}
+\def\forest@removekeysfromkeylist#1#2#3{%
+ % #1 = keys to remove (a keylist: an empty value means remove a key with any value)
+ % #2 = keylist
+ % #3 = toks cs for result
+ \forest@temp@toks{}%
+ \def\forestnovalue{\forestnovalue}%
+ \pgfqkeys{/forest/remove@key@installer}{#1}%
+ \let\forestnovalue\pgfkeysnovaluetext
+ \pgfqkeys{/forest/remove@key}{#2}%
+ \pgfqkeys{/forest/remove@key@uninstaller}{#1}%
+ #3\forest@temp@toks
+}
+\def\forest@remove@key@novalue{\forest@remove@key@novalue}%
+\forestset{
+ remove@key@installer/.unknown/.code={% #1 = (outer) value
+ \def\forest@temp{#1}%
+ \ifx\forest@temp\pgfkeysnovalue@text
+ \pgfkeysdef{/forest/remove@key/\pgfkeyscurrentname}{}%
+ \else
+ \ifx\forest@temp\forestnovalue
+ \expandafter\forest@remove@key@installer@defwithvalue\expandafter{\pgfkeyscurrentname}{\pgfkeysnovalue}%
+ \else
+ \expandafter\forest@remove@key@installer@defwithvalue\expandafter{\pgfkeyscurrentname}{#1}%
+ \fi
+ \fi
+ },
+ remove@key/.unknown/.code={% #1 = (inner) value
+ \expandafter\apptotoks\expandafter\forest@temp@toks\expandafter{\pgfkeyscurrentname={#1},}%
+ },
+ remove@key@uninstaller/.unknown/.code={%
+ \pgfkeyslet{/forest/remove@key/\pgfkeyscurrentname/.@cmd}\@undefined},
+}
+\def\forest@remove@key@installer@defwithvalue#1#2{% #1=key name, #2 = outer value
+ \pgfkeysdef{/forest/remove@key/#1}{% ##1 = inner value
+ \def\forest@temp@outer{#2}%
+ \def\forest@temp@inner{##1}%
+ \ifx\forest@temp@outer\forest@temp@inner
+ \else
+ \apptotoks\forest@temp@toks{#1={##1},}%
+ \fi
+ }%
+}
+\forestset{
+ show register/.code={%
+ \forestrget{#1}\foresttemp
+ \typeout{Forest register "#1"=\expandafter\detokenize\expandafter{\foresttemp}}%
+ },
+}
+% \end{macrocode}
+% \subsection{Arrays}
+%
+% \begin{macrocode}
+\def\forest@newarray#1{%
+ \forest@tempfalse % non-global
+ {%
+ \escapechar=-1
+ \expandafter\escapechar\expandafter\count@\expandafter
+ }%
+ \expandafter\forest@newarray@\expandafter{\string#1}%
+}
+\def\forest@newglobalarray#1{%
+ \forest@temptrue % global
+ {%
+ \escapechar=-1
+ \expandafter\escapechar\expandafter\count@\expandafter
+ }%
+ \expandafter\forest@newarray@\expandafter{\string#1}%
+}
+\def\forest@array@empty@error#1{%
+ \PackageError{forest}{Cannot pop from empty array "#1".}{}}%
+\def\forest@array@oub@error#1#2{%
+ \PackageError{forest}{#2 is out of bounds of array "#1"
+ (\the\csuse{#1M}--\the\csuse{#1N}).}{}}%
+% \end{macrocode}
+% Define array macros. For speed, we define most of them to be ``direct'', i.e.\ cointain the resolved control sequences specific to this array.
+% \begin{macrocode}
+\def\forest@newarray@#1{%
+ % array bounds: M <= i < N
+ \expandafter\newcount\csname#1M\endcsname
+ \expandafter\newcount\csname#1N\endcsname
+ \csedef{#1clear}{%
+ \ifforest@temp\global\fi\expandonce{\csname#1M\endcsname}0
+ \ifforest@temp\global\fi\expandonce{\csname#1N\endcsname}0
+ }%
+ \csedef{#1ifempty}{%
+ \noexpand\ifnum\expandonce{\csname#1M\endcsname}<\expandonce{\csname#1N\endcsname}\relax
+ \unexpanded{\expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}%
+ }%
+ \csedef{#1length}{% a numexpr
+ \noexpand\numexpr\expandonce{\csname#1N\endcsname}-\expandonce{\csname#1M\endcsname}\relax
+ }%
+ \csedef{#1checkrange}##1##2{% args can be \numexprs
+ \noexpand\forest@tempfalse
+ \noexpand\ifnum\numexpr##1<\expandonce{\csname#1M\endcsname}\relax
+ \noexpand\forest@temptrue
+ \noexpand\fi
+ \noexpand\ifnum\numexpr##2>\expandonce{\csname#1N\endcsname}\relax
+ \noexpand\forest@temptrue
+ \noexpand\fi
+ \noexpand\ifforest@temp
+ \noexpand\forest@array@oub@error{#1}{Range "\noexpand\number\noexpand\numexpr##1\relax--\noexpand\number\noexpand\numexpr##2\relax"}%
+ \noexpand\fi
+ }%
+ \csedef{#1checkindex}##1{% arg can be a \numexpr
+ \noexpand\forest@tempfalse
+ \noexpand\ifnum\numexpr##1<\expandonce{\csname#1M\endcsname}\relax
+ \noexpand\forest@temptrue
+ \noexpand\fi
+ \noexpand\ifnum\numexpr##1<\expandonce{\csname#1N\endcsname}\relax
+ \noexpand\else
+ \noexpand\forest@temptrue
+ \noexpand\fi
+ \noexpand\ifforest@temp
+ \noexpand\forest@array@oub@error{#1}{Index "\noexpand\number\noexpand\numexpr##1\relax"}%
+ \noexpand\fi
+ }%
+ \csedef{#1get}##1##2{% ##1 = index, ##2 = receiving cs
+ \expandonce{\csname#1checkindex\endcsname}{##1}%
+ \noexpand\letcs##2{#1##1}%
+ }%
+ \csedef{#1get@}##1##2{% ##1 = index, ##2 = receiving cs (don't check bounds)
+ \noexpand\letcs##2{#1##1}%
+ }%
+ \csedef{#1toppop}##1{% ##1 = receiving cs
+ \expandonce{\csname#1ifempty\endcsname}{%
+ \noexpand\forest@array@empty@error{#1}%
+ }{%
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1N\endcsname}-1
+ \noexpand\letcs\noexpand##1{#1\noexpand\the\expandonce{\csname#1N\endcsname}}%
+ }%
+ }%
+ \InlineNoDef{\csdef{#1bottompop}##1{% ##1 = receiving cs
+ \Expand{\csname#1ifempty\endcsname}{%
+ \forest@array@empty@error{#1}%
+ }{%
+ \letcs##1{#1\the\Expand{\csname#1M\endcsname}}%
+ \ExpandIfT{forest@temp}\global\advance\Expand{\csname#1M\endcsname 1}%
+ }%
+ }}%
+ % \csdef{#1bottompop}##1{}% we need this as \Inline chokes on \let\macro=\relax
+ % \expandafter\Inline\expandafter\def\csname#1bottompop\endcsname##1{% ##1 = receiving cs
+ % \Expand{\csname#1ifempty\endcsname}{%
+ % \forest@array@empty@error{#1}%
+ % }{%
+ % \letcs##1{#1\the\Expand{\csname#1M\endcsname}}%
+ % \ExpandIfT{forest@temp}\global\advance\Expand{\csname#1M\endcsname 1}%
+ % }%
+ % }%
+ % \csedef{#1bottompop}##1{% ##1 = receiving cs
+ % \expandonce{\csname#1ifempty\endcsname}{%
+ % \noexpand\forest@array@empty@error{#1}%
+ % }{%
+ % \noexpand\letcs\noexpand##1{#1\noexpand\the\expandonce{\csname#1M\endcsname}}%
+ % \ifforest@temp\global\fi\advance\expandonce{\csname#1M\endcsname}1
+ % }%
+ % }%
+ \csedef{#1setappend}##1{% ##1 = definition
+ \ifforest@temp\noexpand\csxdef\else\noexpand\csedef\fi
+ {#1\noexpand\the\expandonce{\csname#1N\endcsname}}%
+ {\noexpand\unexpanded{##1}}%
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1N\endcsname}1
+ }%
+ \csedef{#1setappend@}##1##2{% ##1 = continue by, ##2 = definition
+ \ifforest@temp\noexpand\csxdef\else\noexpand\csedef\fi
+ {#1\noexpand\the\expandonce{\csname#1N\endcsname}}%
+ {\noexpand\unexpanded{##2}}%
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1N\endcsname}1
+ ##1%
+ }%
+ \csedef{#1setprepend}##1{% ##1 = definition
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1M\endcsname}-1
+ \ifforest@temp\noexpand\csxdef\else\noexpand\csedef\fi
+ {#1\noexpand\the\expandonce{\csname#1M\endcsname}}%
+ {\noexpand\unexpanded{##1}}%
+ }%
+ \csedef{#1esetappend}##1{% ##1 = definition
+ \ifforest@temp\noexpand\csxdef\else\noexpand\csedef\fi{#1\noexpand\the\expandonce{\csname#1N\endcsname}}{##1}%
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1N\endcsname}1
+ }%
+ \csedef{#1esetprepend}##1{% ##1 = definition
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1M\endcsname}-1
+ \ifforest@temp\noexpand\csxdef\else\noexpand\csedef\fi{#1\noexpand\the\expandonce{\csname#1M\endcsname}}{##1}%
+ }%
+ \csedef{#1letappend}##1{% ##1 = cs
+ \ifforest@temp\noexpand\expandafter\noexpand\global\fi\noexpand\expandafter\noexpand\let
+ \noexpand\csname#1\noexpand\the\expandonce{\csname#1N\endcsname}\noexpand\endcsname
+ ##1%
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1N\endcsname}1
+ }%
+ \csedef{#1letprepend}##1{% ##1 = cs
+ \ifforest@temp\global\fi\advance\expandonce{\csname#1M\endcsname}-1
+ \ifforest@temp\noexpand\expandafter\noexpand\global\fi\noexpand\expandafter\noexpand\let
+ \noexpand\csname#1\noexpand\the\expandonce{\csname#1M\endcsname}\noexpand\endcsname
+ ##1%
+ }%
+% \end{macrocode}
+% I would love to define these only generically, as they will not be called often, but they need to be expandable. Argh.
+% right?
+% \begin{lstlisting}
+% \def\arrayvalues{% <-- \csedef{#1values}
+% \expandafter\expandafter\expandafter\arrayvaluesfromrange %\arrayvaluesfromrange <-- \expandonce{\csname#1valuesfromrange\endcsname}
+% \expandafter\expandafter\expandafter{%
+% \expandafter\the
+% \expandafter\arrayM %\arrayM <-- \expandonce{\csname#1M\endcsname}%
+% \expandafter}%
+% \expandafter{%
+% \the\arrayN %\arrayN <-- \expandonce{\csname#1N\endcsname}%
+% }%
+% }%
+% \end{lstlisting}
+% \begin{macrocode}
+ \csedef{#1values}{%
+ \noexpand\expandafter\noexpand\expandafter\noexpand\expandafter\expandonce{\csname#1valuesfromrange\endcsname}%
+ \noexpand\expandafter\noexpand\expandafter\noexpand\expandafter{%
+ \noexpand\expandafter\noexpand\the
+ \noexpand\expandafter\expandonce{\csname#1M\endcsname}%
+ \noexpand\expandafter}%
+ \noexpand\expandafter{\noexpand\the\expandonce{\csname#1N\endcsname}}%
+ }%
+% \end{macrocode}
+% \begin{lstlisting}
+% \def\arrayvaluesfromrange##1##2{% ##1/##2 = lower/upper bounds (we receive them expanded) <-- \csedef{#1vuesfromrange}
+% \ifnum##1<##2
+% {\expandafter\expandonce\expandafter{\csname#1##1\endcsname}}% here we add braces (for the general case, we might want an arbitrary prefix&suffix)
+% \expandafter\@escapeif\expandafter{\expandafter\arrayvaluesfromrange % <-- \expandonce{\csname#1valuesfromrange\endcsname}%
+% \expandafter{\number\numexpr##1+1}{##2}}%
+% \fi
+% }%
+% \end{lstlisting}
+% As we need this to be expandable, we cannot check the range within the macro. You need to to this on your own using |...checkrange| defined above.
+% \begin{macrocode}
+ \csedef{#1valuesfromrange}##1##2{% ##1/##2 = lower/upper bounds (we receive them expanded)
+ \noexpand\ifnum##1<##2
+ {\noexpand\expandafter\noexpand\expandonce\noexpand\expandafter{\noexpand\csname#1##1\noexpand\endcsname}}% here we add braces (for the general case, we might want an arbitrary prefix&suffix)
+ \noexpand\expandafter\noexpand\@escapeif\noexpand\expandafter{\noexpand\expandafter\expandonce{\csname#1valuesfromrange\endcsname}%
+ \noexpand\expandafter{\noexpand\number\noexpand\numexpr##1+1}{##2}}%
+ \noexpand\fi
+ }%
+% \end{macrocode}
+% Puts all items until |\forest@eov| into the array. After that is done, execute |\forest@topextend@next| (Why this macro? So that we can extend the array by tokens never seen before.). This code is difficult and not run often, so it doesn't need specialized control sequences.
+% \begin{macrocode}
+ \csdef{#1topextend}{\def\forest@array@currentarray{#1}\forest@array@topextend}%
+}
+\def\forest@array@topextend{\futurelet\forest@ate@next@token\forest@ate@checkforspace}
+\def\forest@ate@checkforspace{%
+ \expandafter\ifx\space\forest@ate@next@token
+ \expandafter\forest@ate@havespace
+ \else
+ \expandafter\forest@ate@checkforgroup
+ \fi
+}
+\def\forest@ate@havespace{\expandafter\forest@array@topextend\romannumeral-`0}%
+\def\forest@ate@checkforgroup{%
+ \ifx\forest@ate@next@token\bgroup
+ \expandafter\forest@ate@appendgroup
+ \else
+ \expandafter\forest@ate@checkforeov
+ \fi
+}
+\def\forest@ate@appendgroup{%
+ \expandonce{\csname\forest@array@currentarray setappend@\endcsname}\forest@array@topextend
+}
+\def\forest@ate@checkforeov{%
+ \ifx\forest@ate@next@token\forest@eov
+ \expandafter\forest@ate@finish
+ \else
+ \expandafter\forest@ate@appendtoken
+ \fi
+}
+\def\forest@ate@appendtoken#1{%
+ \expandonce{\csname\forest@array@currentarray setappend\endcsname}{#1}%
+ \forest@array@topextend
+}
+\def\forest@ate@finish\forest@eov{\forest@topextend@next}
+\let\forest@topextend@next\relax
+\forest@newarray\forest@temparray@
+\forest@newglobalarray\forest@global@temparray@
+% \end{macrocode}
+%
+%
+% \subsection{Testing for numbers and dimensions}
+% \label{sec:is-count-or-dimen}
+%
+% Test if the argument is an integer (only base 10) that can be assigned to a \TeX\ count register.
+% This is supposed to be a fast, not complete test, as anything not recognized as an integer will be
+% passed on to |pgfmath| (by the code that uses these macros).
+%
+% We support |+|s, |-|s and spaces before the number. We don't support count registers.
+%
+% Dillema? Should |0abc| be interpreted as \TeX\ style (decimal) or PGF style (octal)? We go for
+% \TeX\ style.
+%
+% The return value will hide in \TeX-style |\if|-macro |\forest@isnum| and counter |\forest@isnum@count|.
+%
+% \begin{macrocode}
+\def\forest@eon{ }
+\newif\ifforest@isnum@minus
+\newif\ifforest@isnum
+\def\forest@isnum#1{%
+ \forest@isnum@minusfalse
+ \let\forest@isnum@next\forest@isnum@finish
+% \end{macrocode}
+% Expand in advance, like pgfmath does.
+% \begin{macrocode}
+ \edef\forest@isnum@temp{#1}%
+% \end{macrocode}
+% Add two end-of-value markers. The first one might be eaten by count assignment: that's why there
+% are two and they expand to a space.
+% \begin{macrocode}
+ \expandafter\forest@isnum@a\forest@isnum@temp\forest@eon\forest@eon\forest@END
+ \ifforest@isnum
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\def\forest@isnum@a{\futurelet\forest@isnum@token\forest@isnum@b}
+% \end{macrocode}
+% Test for three special characters: |-|, |+|, and space.
+% \begin{macrocode}
+\def\forest@isnum@minustoggle{%
+ \ifforest@isnum@minus\forest@isnum@minusfalse\else\forest@isnum@minustrue\fi
+}
+\def\forest@isnum@b{%
+ \let\forest@next\forest@isnum@p
+ \ifx-\forest@isnum@token
+ \forest@isnum@minustoggle
+ \let\forest@next\forest@isnum@c
+ \else
+ \ifx+\forest@isnum@token
+ \let\forest@next\forest@isnum@c
+ \else
+ \expandafter\ifx\space\forest@isnum@token
+ \let\forest@next\forest@isnum@s
+ \fi
+ \fi
+ \fi
+ \forest@next
+}
+% \end{macrocode}
+% Eat |+| and |-|.
+% \begin{macrocode}
+\def\forest@isnum@c#1{\forest@isnum@a}%
+% \end{macrocode}
+% Eat the space!
+% \begin{macrocode}
+\def\forest@isnum@s#1{\forest@isnum@a#1}%
+\newcount\forest@isnum@count
+% \end{macrocode}
+% Check for |0|. Why? If we have one, we know that the initial argument started with a number, so
+% we have a chance that it is a number even if our assignment will yield $0$. If we have no |0| and the assignment yields $0$, we know we don't have a number.
+% \begin{macrocode}
+\def\forest@isnum@p{%
+ \ifx0\forest@isnum@token
+ \let\forest@next\forest@isnum@next
+ \else
+ \let\forest@next\forest@isnum@nz@
+ \fi
+ \forest@isnumtrue
+ \afterassignment\forest@isnum@q\forest@isnum@count\ifforest@isnum@minus-\fi0%
+}
+\def\forest@isnum@q{%
+ \futurelet\forest@isnum@token\forest@next
+}
+\def\forest@isnum@nz@{%
+ \ifnum\forest@isnum@count=0
+ \forest@isnumfalse
+ \fi
+ \forest@isnum@next
+}
+% \end{macrocode}
+% This is the end of testing for an integer. If we have left-over stuff (|#1|), this was not a number.
+% \begin{macrocode}
+\def\forest@isnum@finish#1\forest@END{%
+ \ifx\forest@isnum@token\forest@eon
+ \else
+ \forest@isnumfalse
+ \fi
+}
+% \end{macrocode}
+%
+% Is it a dimension? We support all \TeX's units but |true| units. Also supported are unitless
+% dimensions (i.e.\ decimal numbers), which are interpreted as |pt|s, as in pgfmath.
+%
+% The return value will hide in \TeX-style |\if|-macro |\forest@isdim| and counter |\forest@isdim@dimen|.
+%
+% \begin{macrocode}
+\newcount\forest@isdim@nonintpart
+\newif\ifforest@isdim
+\def\forest@isdim#1{%
+ \forest@isdimfalse
+ \forest@isnum@minusfalse
+ \def\forest@isdim@leadingzeros{}%
+ \forest@isdim@nonintpart=0
+ \def\forest@isdim@unit{pt}%
+ \let\forest@isnum@next\forest@isdim@checkfordot
+ \edef\forest@isnum@temp{#1}%
+% \end{macrocode}
+% 4 end-of-value markers (|forest@eon|): one can be eaten by number (after the dot), two by a non-existing unit.
+% \begin{macrocode}
+ \expandafter\forest@isnum@a\forest@isnum@temp\forest@eon\forest@eon\forest@eon\forest@eon\forest@END
+ \ifforest@isdim
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\def\forest@isdim@checkfordot{%
+ \ifx.\forest@isnum@token
+ \expandafter\forest@isdim@dot
+ \else
+ \ifx,\forest@isnum@token
+ \expandafter\expandafter\expandafter\forest@isdim@dot
+ \else
+ \expandafter\expandafter\expandafter\forest@isdim@nodot
+ \fi
+ \fi
+}
+\def\forest@isdim@nodot{%
+ \ifforest@isnum
+% \end{macrocode}
+% No number, no dot, so not a dimension.
+% \begin{macrocode}
+ \expandafter\forest@isdim@checkforunit
+ \else
+ \expandafter\forest@isdim@finish@nodim
+ \fi
+}
+\def\forest@isdim@dot#1{% #1=. or ,
+ \futurelet\forest@isnum@token\forest@isdim@collectzero
+}
+\def\forest@isdim@collectzero{%
+ \ifx0\forest@isnum@token
+ \expandafter\forest@isdim@collectzero@
+ \else
+ \expandafter\forest@isdim@getnonintpart
+ \fi
+}
+\def\forest@isdim@collectzero@#1{% #1 = 0
+ \appto\forest@isdim@leadingzeros{0}%
+ \futurelet\forest@isnum@token\forest@isdim@collectzero
+}
+\def\forest@isdim@getnonintpart{%
+ \afterassignment\forest@isdim@checkforunit\forest@isdim@nonintpart0%
+}
+% \end{macrocode}
+% Nothing else should be defined in |\forest@unit@| namespace.
+% \begin{macrocode}
+\def\forest@def@unit#1{\csdef{forest@unit@#1}{#1}}
+\forest@def@unit{em}
+\forest@def@unit{ex}
+\forest@def@unit{pt}
+\forest@def@unit{pc}
+\forest@def@unit{in}
+\forest@def@unit{bp}
+\forest@def@unit{cm}
+\forest@def@unit{mm}
+\forest@def@unit{dd}
+\forest@def@unit{cc}
+\forest@def@unit{sp}
+\def\forest@isdim@checkforunit#1#2{%
+ \lowercase{\edef\forest@isnum@temp{\detokenize{#1#2}}}%
+ \ifcsname forest@unit@\forest@isnum@temp\endcsname
+ \let\forest@isdim@next\forest@isdim@finish@dim
+ \edef\forest@isdim@unit{\csname forest@unit@\forest@isnum@temp\endcsname}%
+ \else
+ \ifx#1\forest@eon
+ \let\forest@isdim@next\forest@isdim@finish@dim
+ \else
+ \let\forest@isdim@next\forest@isdim@finish@nodim
+ \fi
+ \fi
+ \forest@isdim@next
+}
+\def\forest@isdim@finish@dim{%
+ \futurelet\forest@isnum@token\forest@isdim@finish@dim@a
+}
+\def\forest@isdim@finish@dim@a{%
+ \expandafter\ifx\space\forest@isnum@token
+ \expandafter\forest@isdim@finish@dim@b
+ \else
+ \expandafter\forest@isdim@finish@dim@c
+ \fi
+}
+\expandafter\def\expandafter\forest@isdim@finish@dim@b\space{% eat one space
+ \futurelet\forest@isnum@token\forest@isdim@finish@dim@c
+}
+\def\forest@isdim@finish@dim@c#1\forest@END{%
+ \ifx\forest@isnum@token\forest@eon
+ \forest@isdimtrue
+ \forest@isdim@dimen\the\forest@isnum@count.\forest@isdim@leadingzeros\the\forest@isdim@nonintpart\forest@isdim@unit\relax
+ \else
+ \forest@isdimfalse
+ \fi
+}
+\def\forest@isdim@finish@nodim#1\forest@END{%
+ \forest@isdimfalse
+}
+\newdimen\forest@isdim@dimen
+ % \long\def\@firstofthree#1#2#3{#3} % defined by LaTeX
+\long\def\@firstofthree#1#2#3{#1}
+\long\def\@secondofthree#1#2#3{#2}
+\def\forest@isnumdim#1{%
+ \forest@isdim{#1}{%
+ \forest@isnumdim@
+ }{%
+ \@thirdofthree
+ }%
+}
+\def\forest@isnumdim@{%
+ \ifforest@isnum
+ \expandafter\@firstofthree
+ \else
+ \expandafter\@secondofthree
+ \fi
+}
+% \end{macrocode}
+%
+%
+% \subsection{forestmath}
+%
+% We imitate |pgfmath| a lot, but we remember the type of the result so that we can use \TeX's
+% primitives when possible.
+% \begin{macrocode}
+\def\forestmathtype@generic{_} % generic (token list)
+\def\forestmathtype@count{n} % integer
+\def\forestmathtype@dimen{d} % a dimension: <decimal> pt
+\def\forestmathtype@unitless{P} % <decimal> (a unitless dimension) (P because pgfmath returns such numbers)
+\def\forestmathtype@textasc{t} % text (ascending)
+\def\forestmathtype@textdesc{T} % text (descending)
+\def\forestmathtype@none{} % internal (for requests - means whatever)
+\def\forestmathresult{}
+\let\forestmathresulttype\forestmathtype@generic
+% \end{macrocode}
+% |\forest@tryprocess| takes four ``arguments''. The first is a true/false switch telling whether
+% to return the full result array in case we have a |.process| expression. The second is a
+% forestmath expression, delimited by |\forest@spacegen|: if it starts with a |>|, we take it to be
+% a |.process| expression, evaluate it using |\forest@process|, and execute the third argument; it
+% it doesn't, we execute the fourth argument.
+% \begin{macrocode}
+\def\forest@tryprocess#1{%
+ \def\forest@tryprocess@returnarray{#1}%
+ \expandafter\forest@tryprocess@a\romannumeral-`0}
+\def\forest@tryprocess@a{\futurelet\forest@temp@token\forest@tryprocess@b}
+\def\forest@tryprocess@b{%
+ \ifx>\forest@temp@token
+ \expandafter\forest@tryprocess@yes
+ \else
+ \expandafter\forest@tryprocess@no
+ \fi
+}
+\def\forest@spacegen{ \forest@spacegen}
+\def\forest@tryprocess@yes#1#2\forest@spacegen{%
+ \expandafter\forest@process\expandafter{\forest@tryprocess@returnarray}#2\forest@eov
+ \@firstoftwo
+}
+\def\forest@tryprocess@no#1\forest@spacegen{\@secondoftwo}
+% \end{macrocode}
+% Forestmath versions of pgfmath macros. They accept process and pgfmath expressions, as described
+% above. In the case of a pgfmath expression, they use |\forest@isnum| and |\forest@isdim| for to
+% see if they can avoid pgfmath evaluation. (These checks are generally faster than pgfmath's fast
+% track.)
+% \begin{macrocode}
+\def\forestmathsetcount#1#2{%
+ \forest@tryprocess{false}#2\forest@spacegen{%
+ #1=\forest@process@result\relax
+ }{%
+ \forestmathsetcount@#1{#2}%
+ }%
+}
+\def\forestmathsetcount@#1#2{%
+ \forest@isnum{#2}{%
+ #1=\forest@isnum@count
+ }{%
+ \pgfmathsetcount#1{#2}%
+ }%
+}
+\def\forestmathsetlength#1#2{%
+ \forest@tryprocess{false}#2\forest@spacegen{%
+ #1=\forest@process@result\relax
+ }{%
+ \forestmathsetlength@#1{#2}%
+ }%
+}
+\def\forestmathsetlength@#1#2{%
+ \forest@isdim{#2}{%
+ #1=\forest@isdim@dimen
+ }{%
+ \pgfmathsetlength#1{#2}%
+ }%
+}
+\def\forestmathtruncatemacro#1#2{%
+ \forest@tryprocess{false}#2\forest@spacegen{%
+ \forest@temp@count=\forest@process@result\relax
+ \edef#1{\the\forest@temp@count}%
+ }{%
+ \forestmathtruncatemacro@#1{#2}%
+ }%
+}
+\def\forestmathtruncatemacro@#1#2{%
+ \forest@isnum{#2}{%
+ \edef#1{\the\forest@isnum@count}%
+ }{%
+ \pgfmathtruncatemacro#1{#2}%
+ }%
+}
+\def\forestmathsetlengthmacro#1#2{%
+ \forest@tryprocess{false}#2\forest@spacegen{%
+ \forest@temp@dimen=\forest@process@result\relax
+ \edef#1{\the\forest@temp@dimen}%
+ }{%
+ \forestmathsetlengthmacro@#1{#2}%
+ }%
+}
+\def\forestmathsetlengthmacro@#1#2{%
+ \forest@isdim{#2}{%
+ \edef#1{\the\forest@isdim@dimen}%
+ }{%
+ \pgfmathsetlengthmacro#1{#2}%
+ }%
+}
+\def\forestmathsetmacro#1#2{%
+ \forest@tryprocess{false}#2\forest@spacegen{%
+ \let#1\forest@process@result
+ \let\forestmathresulttype\forest@process@result@type
+ }{%
+ \forestmathsetmacro@#1{#2}%
+ \let\forestmathresulttype\forestmathtype@unitless
+ }%
+}
+\def\forestmathsetmacro@#1#2{%
+ \forest@isdim{#2}{%
+ \edef#1{\expandafter\Pgf@geT\the\forest@isdim@dimen}%
+ }{%
+ \pgfmathsetmacro#1{#2}%
+ }%
+}
+\def\forestmathparse#1{%
+ \forest@tryprocess{false}#1\forest@spacegen{%
+ \let\forestmathresult\forest@process@result
+ \let\forestmathresulttype\forest@process@result@type
+ }{%
+ \forestmathparse@{#1}%
+ \let\forestmathresulttype\forestmathtype@unitless
+ }%
+}
+\def\forestmathparse@#1{%
+ \forest@isdim{#1}{%
+ \edef\forestmathresult{\expandafter\Pgf@geT\the\forest@isdim@dimen}%
+ }{%
+ \pgfmathsetmacro\forestmathresult{#1}%
+ }%
+}
+% \end{macrocode}
+% The following macro, which is the only place that sets |\forest@tryprocess|'s |#1| to |true|, is
+% actually not used anywhere. It was meant for an argument processor instruction accepting
+% \meta{forestmath}, but that got separated into P and p. Not much harm is done by keeping it,
+% however, so we do, just in case.
+% \begin{macrocode}
+ %\def\forestmathparse@returnarray#1{% same as above, but returns the result as an array (used only internally)
+ % \forest@tryprocess{true}#1\forest@spacegen{}{%
+ % \forestmathparse@{#1}%
+ % \let\forest@process@result@type\forestmathtype@unitless
+ % \forest@process@result@clear
+ % \forest@process@result@letappend\forestmathresult
+ % }%
+ %}
+% \end{macrocode}
+% Evaluates |#1| to a boolean: if true execute |#2|, otherwise |#3|. |#2| and |#3| are \TeX\ code.
+% Includes a shortcut for some common values.
+% \begin{macrocode}
+\csdef{forest@bh@0}{0}
+\csdef{forest@bh@false}{0}
+\csdef{forest@bh@1}{1}
+\csdef{forest@bh@true}{1}
+\def\forestmath@if#1{%
+ \ifcsdef{forest@bh@\detokenize{#1}}{%
+ \let\forest@next\forestmath@if@fast
+ }{%
+ \let\forest@next\forestmath@if@slow
+ }%
+ \forest@next{#1}%
+ \ifnum\forest@temp=0
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+\def\forestmath@if@fast#1{\letcs\forest@temp{forest@bh@\detokenize{#1}}}
+\def\forestmath@if@slow#1{\forestmathtruncatemacro\forest@temp{#1}}
+% \end{macrocode}
+% These macros expandably convert a num(n)/dim(d)/unitless dim(P) to a num(n)/dim(d)/unitless
+% dim(P).
+% \begin{macrocode}
+\def\forestmath@convert@fromto#1#2#3{%
+ \edef\forestmathresult{\csname forestmath@convert@from@#1@to@#2\endcsname{#3}}}
+\def\forestmath@convert@from#1{\forestmath@convert@fromto{#1}{\forestmathresulttype}}
+\def\forestmath@convert@to{\forestmath@convert@fromto{\forestmathresulttype}}
+\def\forestmath@convert@from@n@to@n#1{#1}
+\def\forestmath@convert@from@n@to@d#1{#1\pgfmath@pt}
+\def\forestmath@convert@from@n@to@P#1{#1}
+\def\forestmath@convert@from@d@to@n#1{%
+ \expandafter\forestmath@convert@uptodot\Pgf@geT#1.\forest@eov}
+\def\forestmath@convert@from@d@to@d#1{#1}
+\def\forestmath@convert@from@d@to@P#1{\Pgf@geT#1}
+\def\forestmath@convert@from@P@to@n#1{%
+ \forestmath@convert@uptodot#1.\forest@eov}
+\def\forestmath@convert@from@P@to@d#1{#1\pgfmath@pt}
+\def\forestmath@convert@from@P@to@P#1{#1}
+\def\forestmath@convert@uptodot#1.#2\forest@eov{#1}
+\def\forestmathzero{\forestmath@convert@from\forestmathtype@count{0}}
+% \end{macrocode}
+% These defer conversion (see aggregates).
+% \begin{macrocode}
+\csdef{forestmath@convert@from@n@to@_}#1{\unexpanded{#1}}
+\csdef{forestmath@convert@from@d@to@_}#1{\unexpanded{#1}}
+\csdef{forestmath@convert@from@P@to@_}#1{\unexpanded{#1}}
+% \end{macrocode}
+% Sets |\pgfmathresulttype| to the type of |#1|.
+% \begin{macrocode}
+\def\forestmathsettypefrom#1{%
+ \forest@isnumdim{%
+ \let\forestmathresulttype\forestmathtype@count
+ }{%
+ \let\forestmathresulttype\forestmathtype@dimen
+ }{%
+ \let\forestmathresulttype\forestmathtype@unitless
+ }%
+}
+% \end{macrocode}
+% The following functions expect numbers or (bare or specified) dimensions as their parameters. The
+% version ending in |@| should get the argument type as its first argument; the version without |@|
+% uses |\forestmathresulttype|. The result type doesn't need to be changed, obviously.
+% \begin{macrocode}
+\def\forestmathadd#1#2{\edef\forestmathresult{%
+ \csname forestmathadd@\forestmathresulttype\endcsname{#1}{#2}}}
+\def\forestmathadd@#1#2#3{\edef\forestmathresult{%
+ \csname forestmathadd@#1\endcsname{#2}{#3}}}
+\def\forestmathadd@n#1#2{\the\numexpr#1+#2\relax}
+\def\forestmathadd@d#1#2{\the\dimexpr#1+#2\relax}
+\def\forestmathadd@P#1#2{\expandafter\Pgf@geT\the\dimexpr#1pt+#2pt\relax}
+\def\forestmathmultiply#1#2{%
+ \csname forestmathmultiply@\forestmathresulttype\endcsname{#1}{#2}}
+\def\forestmathmultiply@#1#2#3{%
+ \csname forestmathmultiply@#1\endcsname{#2}{#3}}
+\def\forestmathmultiply@n#1#2{\edef\forestmathresult{%
+ \the\numexpr#1*#2\relax}}
+\def\forestmathmultiply@d#1#2{%
+ \edef\forestmath@marshal{\forestmathmultiply@d@{#1}{#2}}\forestmath@marshal
+}
+\def\forestmathmultiply@d@#1#2{%
+ \edef\forestmath@marshal{%
+ \noexpand\pgfmathmultiply@{\Pgf@geT#1}{\Pgf@geT#2}%
+ }\forestmath@marshal
+ \edef\forestmathresult{\pgfmathresult\pgfmath@pt}%
+}
+\def\forestmathmultiply@P#1#2{%
+ \pgfmathmultiply@{#1}{#2}%
+ \let\forestmathresult\pgfmathresult
+}
+% \end{macrocode}
+% The return type of |forestmathdivide| is the type of the dividend. So, |n| and |d| type can only
+% be divided by integers; as |\numexpr| and |\dimexpr| are used, the result is rounded.
+% \begin{macrocode}
+\def\forestmathdivide#1#2{%
+ \csname forestmathdivide@\forestmathresulttype\endcsname{#1}{#2}}
+\def\forestmathdivide@#1#2#3{%
+ \csname forestmathdivide@#1\endcsname{#2}{#3}}
+\def\forestmathdivide@n#1#2{\edef\forestmathresult{%
+ \the\numexpr#1/#2\relax}}
+\def\forestmathdivide@d#1#2{\edef\forestmathresult{%
+ \the\dimexpr#1/#2\relax}}
+\def\forestmathdivide@P#1#2{%
+ \edef\forest@marshal{%
+ \noexpand\pgfmathdivide{+#1}{+#2}%
+ }\forest@marshal
+ \let\forestmathresult\pgfmathresult
+}
+% \end{macrocode}
+% Booleans.
+% \begin{macrocode}
+\def\forestmathtrue{%
+ \def\forestmathresult{1}%
+ \let\forestmathresulttype\forestmathtype@count}
+\def\forestmathfalse{%
+ \def\forestmathresult{0}%
+ \let\forestmathresulttype\forestmathtype@count}
+% \end{macrocode}
+% Comparisons. |\pdfstrcmp| is used to compare text (types |t| and |T|); note that it expands its
+% arguments. |<| and |>| comparison of generic type obviously makes no sense; |=| comparison is
+% done using |\ifx|: this is also the reason why these macros are not fully expandable, as we need
+% to |\def| the arguments to |\ifx|.
+%
+% Low level |<|.
+% \begin{macrocode}
+\def\forestmath@if@lt@n#1#2{\ifnum#1<#2\relax
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forestmath@if@lt@d#1#2{\ifdim#1<#2\relax
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forestmath@if@lt@P#1#2{\ifdim#1pt<#2pt
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forestmath@if@lt@t#1#2{\ifnum\pdfstrcmp{#1}{#2}<0
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forestmath@if@lt@T#1#2{\ifnum\pdfstrcmp{#1}{#2}>0
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forest@cmp@error#1#2{\PackageError{forest}{Comparison
+ ("<" or ">") of generic type arguments "#1" and "#2"
+ makes no sense}{Use one of argument processor instructions
+ "n", "d", "P" or "t" to change the type. Use package option
+ "debug=process" to see what's happening here.}}
+\cslet{forestmath@if@lt@_}\forest@cmp@error
+% \end{macrocode}
+% Low level |=|.
+% \begin{macrocode}
+\def\forestmath@if@eq@n#1#2{\ifnum#1=#2\relax
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forestmath@if@eq@d#1#2{\ifdim#1=#2\relax
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forestmath@if@eq@P#1#2{\ifdim#1pt=#2pt
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\def\forestmath@if@eq@t#1#2{\ifnum\pdfstrcmp{#1}{#2}=0
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+\let\forestmath@if@eq@T\forestmath@if@eq@t
+\csdef{forestmath@if@eq@_}#1#2{%
+ \def\forestmath@tempa{#1}%
+ \def\forestmath@tempb{#2}%
+ \ifx\forestmath@tempa\forestmath@tempb
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+% \end{macrocode}
+% High level |<|, |>| and |=|.
+% \begin{macrocode}
+\def\forestmathlt#1#2{%
+ \csname forestmath@if@lt@\forestmathresulttype\endcsname{#1}{#2}%
+ \forestmathtrue
+ \forestmathfalse}
+\def\forestmathlt@#1#2#3{%
+ \csname forestmath@if@lt@#1\endcsname{#2}{#3}%
+ \forestmathtrue
+ \forestmathfalse}
+\def\forestmathgt#1#2{%
+ \csname forestmath@if@lt@\forestmathresulttype\endcsname{#2}{#1}%
+ \forestmathtrue
+ \forestmathfalse}
+\def\forestmathgt@#1#2#3{%
+ \csname forestmath@if@lt@#1\endcsname{#3}{#2}%
+ \forestmathtrue
+ \forestmathfalse}
+\def\forestmatheq#1#2{%
+ \csname forestmath@if@eq@\forestmathresulttype\endcsname{#1}{#2}%
+ \forestmathtrue
+ \forestmathfalse}
+\def\forestmatheq@#1#2#3{%
+ \csname forestmath@if@eq@#1\endcsname{#2}{#3}%
+ \forestmathtrue
+ \forestmathfalse}
+% \end{macrocode}
+% Min and max. The complication here is that for numeric/dimension types, we want the empty value to
+% signal ``no argument'', i.e.\ the other argument should be the result; this is used in
+% aggregates. (For text types, the empty value is obviously the lesser one.) The arguments are expanded.
+% \begin{macrocode}
+\def\forestmathmin{\forestmath@minmax{min}{\forestmathresulttype}}
+\def\forestmathmax{\forestmath@minmax{max}{\forestmathresulttype}}
+\def\forestmathmin@{\forestmath@minmax{min}}
+\def\forestmathmax@{\forestmath@minmax{max}}
+\def\forestmath@minmax#1#2#3#4{% #1=min/max, #2=type, #3,#4=args
+ \edef\forestmath@tempa{#3}%
+ \edef\forestmath@tempb{#4}%
+ \if\relax\detokenize\expandafter{\forestmath@tempa}\relax
+ \forestmath@minmax@one{#1}{#2}\forestmath@tempb
+ \else
+ \if\relax\detokenize\expandafter{\forestmath@tempb}\relax
+ \forestmath@minmax@one{#1}{#2}\forestmath@tempa
+ \else
+ \csname forestmath@#1\endcsname{#2}%
+ \fi
+ \fi
+}
+\def\forestmath@minmax@one#1#2#3{% #1=min/max, #2=type, #3 = the (possibly) non-empty arg
+ \ifcsname forestmath@#1@one@#2\endcsname
+ \csname forestmath@#1@one@#2\endcsname#3%
+ \else
+ \let\forestmathresult#3%
+ \fi
+}
+\def\forestmath@min@one@t#1{\let\forestmathresult\forest@empty}
+\def\forestmath@max@one@t#1{\let\forestmathresult#1}
+\def\forestmath@min@one@T#1{\let\forestmathresult#1}
+\def\forestmath@max@one@T#1{\let\forestmathresult\forest@empty}
+
+\def\forestmath@min#1{% #1 = type
+ \csname forestmath@if@lt@#1\endcsname\forestmath@tempa\forestmath@tempb
+ {\let\forestmathresult\forestmath@tempa}%
+ {\let\forestmathresult\forestmath@tempb}%
+}
+\def\forestmath@max#1{% #1 = type
+ \csname forestmath@if@lt@#1\endcsname\forestmath@tempa\forestmath@tempb
+ {\let\forestmathresult\forestmath@tempb}%
+ {\let\forestmathresult\forestmath@tempa}%
+}
+% \end{macrocode}
+%
+% \subsection{Sorting}
+%
+% Macro |\forest@sort| is the user interface to sorting.
+%
+% The user should prepare the data in an arbitrarily encoded
+% array,\footnote{In forest, arrays are encoded as families of
+% macros. An array-macro name consists of the (optional, but
+% recommended) prefix, the index, and the (optional) suffix (e.g.\
+% \texttt{$\backslash$forest@42x}). Prefix establishes the ``namespace'',
+% while using more than one suffix simulates an array of named tuples.
+% The length of the array is stored in macro \texttt{$\backslash$<prefix>n}.}
+% and provide the sorting macro (given in |#1|) and the array let
+% macro (given in |#2|): these are the only ways in which sorting
+% algorithms access the data. Both user-given macros should take two
+% parameters, which expand to array indices. The comparison macro
+% should compare the given array items and call |\forest@sort@cmp@gt|,
+% |\forest@sort@cmp@lt| or |\forest@sort@cmp@eq| to signal that the
+% first item is greater than, less than, or equal to the second item.
+% The let macro should ``copy'' the contents of the second item onto
+% the first item.
+%
+% The sorting direction is be given in |#3|: it can one of
+% |\forest@sort@ascending| and |\forest@sort@descending|. |#4| and
+% |#5| must expand to the lower and upper (both inclusive) indices of
+% the array to be sorted.
+%
+% |\forest@sort| is just a wrapper for the central sorting macro
+% |\forest@@sort|, storing the comparison macro, the array let macro
+% and the direction. The central sorting macro and the
+% algorithm-specific macros take only two arguments: the array bounds.
+% \begin{macrocode}
+\def\forest@sort#1#2#3#4#5{%
+ \let\forest@sort@cmp#1\relax
+ \let\forest@sort@let#2\relax
+ \let\forest@sort@direction#3\relax
+ \forest@@sort{#4}{#5}%
+}
+% \end{macrocode}
+% The central sorting macro. Here it is decided which sorting
+% algorithm will be used: for arrays at least
+% |\forest@quicksort@minarraylength| long, quicksort is used;
+% otherwise, insertion sort.
+% \begin{macrocode}
+\def\forest@quicksort@minarraylength{10000}
+\def\forest@@sort#1#2{%
+ \ifnum#1<#2\relax\@escapeif{%
+ \forest@sort@m=#2
+ \advance\forest@sort@m -#1
+ \ifnum\forest@sort@m>\forest@quicksort@minarraylength\relax\@escapeif{%
+ \forest@quicksort{#1}{#2}%
+ }\else\@escapeif{%
+ \forest@insertionsort{#1}{#2}%
+ }\fi
+ }\fi
+}
+% \end{macrocode}
+% Various counters and macros needed by the sorting algorithms.
+% \begin{macrocode}
+\newcount\forest@sort@m\newcount\forest@sort@k\newcount\forest@sort@p
+\def\forest@sort@ascending{>}
+\def\forest@sort@descending{<}
+\def\forest@sort@cmp{%
+ \PackageError{sort}{You must define forest@sort@cmp function before calling
+ sort}{The macro must take two arguments, indices of the array
+ elements to be compared, and return '=' if the elements are equal
+ and '>'/'<' if the first is greater /less than the secong element.}%
+}
+\def\forest@sort@cmp@gt{\def\forest@sort@cmp@result{>}}
+\def\forest@sort@cmp@lt{\def\forest@sort@cmp@result{<}}
+\def\forest@sort@cmp@eq{\def\forest@sort@cmp@result{=}}
+\def\forest@sort@let{%
+ \PackageError{sort}{You must define forest@sort@let function before calling
+ sort}{The macro must take two arguments, indices of the array:
+ element 2 must be copied onto element 1.}%
+}
+% \end{macrocode}
+% Quick sort macro (adapted from
+% \href{http://www.ctan.org/pkg/laansort}{laansort}).
+% \begin{macrocode}
+\newloop\forest@sort@loop
+\newloop\forest@sort@loopA
+\def\forest@quicksort#1#2{%
+% \end{macrocode}
+% Compute the index of the middle element (|\forest@sort@m|).
+% \begin{macrocode}
+ \forest@sort@m=#2
+ \advance\forest@sort@m -#1
+ \ifodd\forest@sort@m\relax\advance\forest@sort@m1 \fi
+ \divide\forest@sort@m 2
+ \advance\forest@sort@m #1
+% \end{macrocode}
+% The pivot element is the median of the first, the middle and the
+% last element.
+% \begin{macrocode}
+ \forest@sort@cmp{#1}{#2}%
+ \if\forest@sort@cmp@result=%
+ \forest@sort@p=#1
+ \else
+ \if\forest@sort@cmp@result>%
+ \forest@sort@p=#1\relax
+ \else
+ \forest@sort@p=#2\relax
+ \fi
+ \forest@sort@cmp{\the\forest@sort@p}{\the\forest@sort@m}%
+ \if\forest@sort@cmp@result<%
+ \else
+ \forest@sort@p=\the\forest@sort@m
+ \fi
+ \fi
+% \end{macrocode}
+% Exchange the pivot and the first element.
+% \begin{macrocode}
+ \forest@sort@xch{#1}{\the\forest@sort@p}%
+% \end{macrocode}
+% Counter |\forest@sort@m| will hold the final location of the pivot
+% element.
+% \begin{macrocode}
+ \forest@sort@m=#1\relax
+% \end{macrocode}
+% Loop through the list.
+% \begin{macrocode}
+ \forest@sort@k=#1\relax
+ \forest@sort@loop
+ \ifnum\forest@sort@k<#2\relax
+ \advance\forest@sort@k 1
+% \end{macrocode}
+% Compare the pivot and the current element.
+% \begin{macrocode}
+ \forest@sort@cmp{#1}{\the\forest@sort@k}%
+% \end{macrocode}
+% If the current element is smaller (ascending) or greater
+% (descending) than the pivot element, move it into the first part of
+% the list, and adjust the final location of the pivot.
+% \begin{macrocode}
+ \ifx\forest@sort@direction\forest@sort@cmp@result
+ \advance\forest@sort@m 1
+ \forest@sort@xch{\the\forest@sort@m}{\the\forest@sort@k}
+ \fi
+ \forest@sort@repeat
+% \end{macrocode}
+% Move the pivot element into its final position.
+% \begin{macrocode}
+ \forest@sort@xch{#1}{\the\forest@sort@m}%
+% \end{macrocode}
+% Recursively call sort on the two parts of the list: elements before
+% the pivot are smaller (ascending order) / greater (descending order)
+% than the pivot; elements after the pivot are greater (ascending
+% order) / smaller (descending order) than the pivot.
+% \begin{macrocode}
+ \forest@sort@k=\forest@sort@m
+ \advance\forest@sort@k -1
+ \advance\forest@sort@m 1
+ \edef\forest@sort@marshal{%
+ \noexpand\forest@@sort{#1}{\the\forest@sort@k}%
+ \noexpand\forest@@sort{\the\forest@sort@m}{#2}%
+ }%
+ \forest@sort@marshal
+}
+% We defines the item-exchange macro in terms of the (user-provided)
+% array let macro.
+% \begin{macrocode}
+\def\forest@sort@aux{aux}
+\def\forest@sort@xch#1#2{%
+ \forest@sort@let{\forest@sort@aux}{#1}%
+ \forest@sort@let{#1}{#2}%
+ \forest@sort@let{#2}{\forest@sort@aux}%
+}
+% \end{macrocode}
+% Insertion sort.
+% \begin{macrocode}
+\def\forest@insertionsort#1#2{%
+ \forest@sort@m=#1
+ \edef\forest@insertionsort@low{#1}%
+ \forest@sort@loopA
+ \ifnum\forest@sort@m<#2
+ \advance\forest@sort@m 1
+ \forest@insertionsort@Qbody
+ \forest@sort@repeatA
+}
+\newif\ifforest@insertionsort@loop
+\def\forest@insertionsort@Qbody{%
+ \forest@sort@let{\forest@sort@aux}{\the\forest@sort@m}%
+ \forest@sort@k\forest@sort@m
+ \advance\forest@sort@k -1
+ \forest@insertionsort@looptrue
+ \forest@sort@loop
+ \ifforest@insertionsort@loop
+ \forest@insertionsort@qbody
+ \forest@sort@repeat
+ \advance\forest@sort@k 1
+ \forest@sort@let{\the\forest@sort@k}{\forest@sort@aux}%
+}
+\def\forest@insertionsort@qbody{%
+ \forest@sort@cmp{\the\forest@sort@k}{\forest@sort@aux}%
+ \ifx\forest@sort@direction\forest@sort@cmp@result\relax
+ \forest@sort@p=\forest@sort@k
+ \advance\forest@sort@p 1
+ \forest@sort@let{\the\forest@sort@p}{\the\forest@sort@k}%
+ \advance\forest@sort@k -1
+ \ifnum\forest@sort@k<\forest@insertionsort@low\relax
+ \forest@insertionsort@loopfalse
+ \fi
+ \else
+ \forest@insertionsort@loopfalse
+ \fi
+}
+% \end{macrocode}
+%
+% Below, several helpers for writing comparison macros are
+% provided. They take take two (pairs of) control sequence names and
+% compare their contents.
+%
+% Compare numbers.
+% \begin{macrocode}
+\def\forest@sort@cmpnumcs#1#2{%
+ \ifnum\csname#1\endcsname>\csname#2\endcsname\relax
+ \forest@sort@cmp@gt
+ \else
+ \ifnum\csname#1\endcsname<\csname#2\endcsname\relax
+ \forest@sort@cmp@lt
+ \else
+ \forest@sort@cmp@eq
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Compare dimensions.
+% \begin{macrocode}
+\def\forest@sort@cmpdimcs#1#2{%
+ \ifdim\csname#1\endcsname>\csname#2\endcsname\relax
+ \forest@sort@cmp@gt
+ \else
+ \ifdim\csname#1\endcsname<\csname#2\endcsname\relax
+ \forest@sort@cmp@lt
+ \else
+ \forest@sort@cmp@eq
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Compare points (pairs of dimension) |(#1,#2)| and |(#3,#4)|.
+% \begin{macrocode}
+\def\forest@sort@cmptwodimcs#1#2#3#4{%
+ \ifdim\csname#1\endcsname>\csname#3\endcsname\relax
+ \forest@sort@cmp@gt
+ \else
+ \ifdim\csname#1\endcsname<\csname#3\endcsname\relax
+ \forest@sort@cmp@lt
+ \else
+ \ifdim\csname#2\endcsname>\csname#4\endcsname\relax
+ \forest@sort@cmp@gt
+ \else
+ \ifdim\csname#2\endcsname<\csname#4\endcsname\relax
+ \forest@sort@cmp@lt
+ \else
+ \forest@sort@cmp@eq
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% The following macro reverses an array. The arguments: |#1| is
+% the array let macro; |#2| is the start index (inclusive), and
+% |#3| is the end index (exclusive).
+% \begin{macrocode}
+\def\forest@reversearray#1#2#3{%
+ \let\forest@sort@let#1%
+ \c@pgf@countc=#2
+ \c@pgf@countd=#3
+ \advance\c@pgf@countd -1
+ \safeloop
+ \ifnum\c@pgf@countc<\c@pgf@countd\relax
+ \forest@sort@xch{\the\c@pgf@countc}{\the\c@pgf@countd}%
+ \advance\c@pgf@countc 1
+ \advance\c@pgf@countd -1
+ \saferepeat
+}
+% \end{macrocode}
+%
+% \section{The bracket representation parser}
+% \label{imp:bracket}
+%
+% \subsection{The user interface macros}
+%
+% Settings.
+% \begin{macrocode}
+\def\bracketset#1{\pgfqkeys{/bracket}{#1}}%
+\bracketset{%
+ /bracket/.is family,
+ /handlers/.let/.style={\pgfkeyscurrentpath/.code={\let#1##1}},
+ opening bracket/.let=\bracket@openingBracket,
+ closing bracket/.let=\bracket@closingBracket,
+ action character/.let=\bracket@actionCharacter,
+ opening bracket=[,
+ closing bracket=],
+ action character,
+ new node/.code n args={3}{% #1=preamble, #2=node spec, #3=cs receiving the id
+ \forest@node@new#3%
+ \forestOeset{#3}{given options}{\forest@contentto=\unexpanded{#2}}%
+ \ifblank{#1}{}{%
+ \forestrset{preamble}{#1}%
+ }%
+ },
+ set afterthought/.code 2 args={% #1=node id, #2=afterthought
+ \ifblank{#2}{}{\forestOappto{#1}{given options}{,afterthought={#2}}}%
+ }
+}
+% \end{macrocode}
+%
+% |\bracketParse| is the macro that should be called to parse a
+% balanced bracket representation. It takes two parameters: |#1| is the code that will be run
+% after parsing the bracket; |#2| is a control sequence that will receive the id of the root of the
+% created tree structure. (The bracket representation should follow (after optional spaces), but is
+% is not a formal parameter of the macro.)
+% \begin{macrocode}
+\newtoks\bracket@content
+\newtoks\bracket@afterthought
+\def\bracketParse#1#2={%
+ \def\bracketEndParsingHook{#1}%
+ \def\bracket@saveRootNodeTo{#2}%
+% \end{macrocode}
+% Content and afterthought will be appended to these macros. (The |\bracket@afterthought| toks register is
+% abused for storing the preamble as well --- that's ok, the preamble comes before any afterhoughts.)
+% \begin{macrocode}
+ \bracket@content={}%
+ \bracket@afterthought={}%
+% \end{macrocode}
+% The parser can be in three states: in content (0), in afterthought
+% (1), or starting (2). While in the content/afterthought state, the
+% parser appends all non-control tokens to the content/afterthought macro.
+% \begin{macrocode}
+ \let\bracket@state\bracket@state@starting
+ \bracket@ignorespacestrue
+% \end{macrocode}
+% By default, don't expand anything.
+% \begin{macrocode}
+ \bracket@expandtokensfalse
+% \end{macrocode}
+% We initialize several control sequences that are used to store some
+% nodes while parsing.
+% \begin{macrocode}
+ \def\bracket@parentNode{0}%
+ \def\bracket@rootNode{0}%
+ \def\bracket@newNode{0}%
+ \def\bracket@afterthoughtNode{0}%
+% \end{macrocode}
+% Finally, we start the parser.
+% \begin{macrocode}
+ \bracket@Parse
+}
+% \end{macrocode}
+% The other macro that an end user (actually a power user) can use, is
+% actually just a synonym for |\bracket@Parse|. It should be used to
+% resume parsing when the action code has finished its work.
+% \begin{macrocode}
+\def\bracketResume{\bracket@Parse}%
+% \end{macrocode}
+%
+% \subsection{Parsing}
+%
+% We first check if the next token is a space. Spaces need special
+% treatment because they are eaten by both the |\romannumeral| trick
+% and \TeX s (undelimited) argument parsing algorithm. If a space is
+% found, remember that, eat it up, and restart the parsing.
+% \begin{macrocode}
+\def\bracket@Parse{%
+ \futurelet\bracket@next@token\bracket@Parse@checkForSpace
+}
+\def\bracket@Parse@checkForSpace{%
+ \expandafter\ifx\space\bracket@next@token\@escapeif{%
+ \ifbracket@ignorespaces\else
+ \bracket@haveSpacetrue
+ \fi
+ \expandafter\bracket@Parse\romannumeral-`0%
+ }\else\@escapeif{%
+ \bracket@Parse@maybeexpand
+ }\fi
+}
+% \end{macrocode}
+%
+% We either fully expand the next token (using a popular \TeX nical
+% trick \dots) or don't expand it at all, depending on the state of
+% |\ifbracket@expandtokens|.
+% \begin{macrocode}
+\newif\ifbracket@expandtokens
+\def\bracket@Parse@maybeexpand{%
+ \ifbracket@expandtokens\@escapeif{%
+ \expandafter\bracket@Parse@peekAhead\romannumeral-`0%
+ }\else\@escapeif{%
+ \bracket@Parse@peekAhead
+ }\fi
+}
+% \end{macrocode}
+% We then look ahead to see what's coming.
+% \begin{macrocode}
+\def\bracket@Parse@peekAhead{%
+ \futurelet\bracket@next@token\bracket@Parse@checkForTeXGroup
+}
+% \end{macrocode}
+% If the next token is a begin-group token, we append the whole group to
+% the content or afterthought macro, depending on the state.
+% \begin{macrocode}
+\def\bracket@Parse@checkForTeXGroup{%
+ \ifx\bracket@next@token\bgroup%
+ \@escapeif{\bracket@Parse@appendGroup}%
+ \else
+ \@escapeif{\bracket@Parse@token}%
+ \fi
+}
+% \end{macrocode}
+% This is easy: if a control token is found, run the appropriate
+% macro; otherwise, append the token to the content or afterthought
+% macro, depending on the state.
+% \begin{macrocode}
+\long\def\bracket@Parse@token#1{%
+ \ifx#1\bracket@openingBracket
+ \@escapeif{\bracket@Parse@openingBracketFound}%
+ \else
+ \@escapeif{%
+ \ifx#1\bracket@closingBracket
+ \@escapeif{\bracket@Parse@closingBracketFound}%
+ \else
+ \@escapeif{%
+ \ifx#1\bracket@actionCharacter
+ \@escapeif{\futurelet\bracket@next@token\bracket@Parse@actionCharacterFound}%
+ \else
+ \@escapeif{\bracket@Parse@appendToken#1}%
+ \fi
+ }%
+ \fi
+ }%
+ \fi
+}
+% \end{macrocode}
+% Append the token or group to the content or afterthought macro. If a
+% space was found previously, append it as well.
+% \begin{macrocode}
+\newif\ifbracket@haveSpace
+\newif\ifbracket@ignorespaces
+\def\bracket@Parse@appendSpace{%
+ \ifbracket@haveSpace
+ \ifcase\bracket@state\relax
+ \eapptotoks\bracket@content\space
+ \or
+ \eapptotoks\bracket@afterthought\space
+ \or
+ \eapptotoks\bracket@afterthought\space
+ \fi
+ \bracket@haveSpacefalse
+ \fi
+}
+\long\def\bracket@Parse@appendToken#1{%
+ \bracket@Parse@appendSpace
+ \ifcase\bracket@state\relax
+ \lapptotoks\bracket@content{#1}%
+ \or
+ \lapptotoks\bracket@afterthought{#1}%
+ \or
+ \lapptotoks\bracket@afterthought{#1}%
+ \fi
+ \bracket@ignorespacesfalse
+ \bracket@Parse
+}
+\def\bracket@Parse@appendGroup#1{%
+ \bracket@Parse@appendSpace
+ \ifcase\bracket@state\relax
+ \apptotoks\bracket@content{{#1}}%
+ \or
+ \apptotoks\bracket@afterthought{{#1}}%
+ \or
+ \apptotoks\bracket@afterthought{{#1}}%
+ \fi
+ \bracket@ignorespacesfalse
+ \bracket@Parse
+}
+% \end{macrocode}
+% Declare states.
+% \begin{macrocode}
+\def\bracket@state@inContent{0}
+\def\bracket@state@inAfterthought{1}
+\def\bracket@state@starting{2}
+% \end{macrocode}
+%
+% Welcome to the jungle. In the following two macros, new nodes are
+% created, content and afterthought are sent to them, parents and
+% states are changed\dots\@ Altogether, we distinguish six cases, as
+% shown below: in the schemas, we have just crossed the symbol after
+% the dots. (In all cases, we reset the |\if| for spaces.)
+% \begin{macrocode}
+\def\bracket@Parse@openingBracketFound{%
+ \bracket@haveSpacefalse
+ \ifcase\bracket@state\relax% in content [ ... [
+% \end{macrocode}
+% |[...[|: we have just finished gathering the content and are about
+% to begin gathering the content of another node. We create a
+% new node (and put the content (\dots) into
+% it). Then, if there is a parent node, we append the new node to the
+% list of its children. Next, since we have just crossed an opening
+% bracket, we declare the newly created node to be the parent of the
+% coming node. The state does not change. Finally, we continue parsing.
+% \begin{macrocode}
+ \@escapeif{%
+ \bracket@createNode
+ \ifnum\bracket@parentNode=0 \else
+ \forest@node@Append{\bracket@parentNode}{\bracket@newNode}%
+ \fi
+ \let\bracket@parentNode\bracket@newNode
+ \bracket@Parse
+ }%
+ \or % in afterthought ] ... [
+% \end{macrocode}
+% |]...[|: we have just finished gathering the afterthought and are
+% about to begin gathering the content of another node. We add the
+% afterthought (\dots) to the ``afterthought node'' and change into the
+% content state. The parent does not change. Finally, we continue
+% parsing.
+% \begin{macrocode}
+ \@escapeif{%
+ \bracket@addAfterthought
+ \let\bracket@state\bracket@state@inContent
+ \bracket@Parse
+ }%
+ \else % starting
+% \end{macrocode}
+% |{start}...[|: we have just started. Nothing to do yet (we couldn't
+% have collected any content yet), just get into the content state and
+% continue parsing.
+% \begin{macrocode}
+ \@escapeif{%
+ \let\bracket@state\bracket@state@inContent
+ \bracket@Parse
+ }%
+ \fi
+}
+\def\bracket@Parse@closingBracketFound{%
+ \bracket@haveSpacefalse
+ \ifcase\bracket@state\relax % in content [ ... ]
+% \end{macrocode}
+% |[...]|: we have just finished gathering the content of a node and
+% are about to begin gathering its afterthought. We create a new node
+% (and put the content (\dots) into it). If there is no parent node,
+% we're done with parsing. Otherwise, we set the newly created
+% node to be the ``afterthought node'', i.e.\ the node that will
+% receive the next afterthought, change into the afterthought mode,
+% and continue parsing.
+% \begin{macrocode}
+ \@escapeif{%
+ \bracket@createNode
+ \ifnum\bracket@parentNode=0
+ \@escapeif\bracketEndParsingHook
+ \else
+ \@escapeif{%
+ \let\bracket@afterthoughtNode\bracket@newNode
+ \let\bracket@state\bracket@state@inAfterthought
+ \forest@node@Append{\bracket@parentNode}{\bracket@newNode}%
+ \bracket@Parse
+ }%
+ \fi
+ }%
+ \or % in afterthought ] ... ]
+% \end{macrocode}
+% |]...]|: we have finished gathering an afterthought of some node and
+% will begin gathering the afterthought of its parent. We first add
+% the afterthought to the afterthought node and set the current parent
+% to be the next afterthought node. We change the parent to the
+% current parent's parent and check if that node is null. If it is,
+% we're done with parsing (ignore the trailing spaces), otherwise we continue.
+% \begin{macrocode}
+ \@escapeif{%
+ \bracket@addAfterthought
+ \let\bracket@afterthoughtNode\bracket@parentNode
+ \edef\bracket@parentNode{\forestOve{\bracket@parentNode}{@parent}}%
+ \ifnum\bracket@parentNode=0
+ \expandafter\bracketEndParsingHook
+ \else
+ \expandafter\bracket@Parse
+ \fi
+ }%
+ \else % starting
+% \end{macrocode}
+% |{start}...]|: something's obviously wrong with the input here\dots
+% \begin{macrocode}
+ \PackageError{forest}{You're attempting to start a bracket representation
+ with a closing bracket}{}%
+ \fi
+}
+% \end{macrocode}
+%
+% The action character code. What happens is determined by the next token.
+% \begin{macrocode}
+\def\bracket@Parse@actionCharacterFound{%
+% \end{macrocode}
+% If a braced expression follows, its contents will be fully expanded.
+% \begin{macrocode}
+ \ifx\bracket@next@token\bgroup\@escapeif{%
+ \bracket@Parse@action@expandgroup
+ }\else\@escapeif{%
+ \bracket@Parse@action@notagroup
+ }\fi
+}
+\def\bracket@Parse@action@expandgroup#1{%
+ \edef\bracket@Parse@action@expandgroup@macro{#1}%
+ \expandafter\bracket@Parse\bracket@Parse@action@expandgroup@macro
+}
+\let\bracket@action@fullyexpandCharacter+
+\let\bracket@action@dontexpandCharacter-
+\let\bracket@action@executeCharacter!
+\def\bracket@Parse@action@notagroup#1{%
+% \end{macrocode}
+% If + follows, tokens will be fully expanded from this point on.
+% \begin{macrocode}
+ \ifx#1\bracket@action@fullyexpandCharacter\@escapeif{%
+ \bracket@expandtokenstrue\bracket@Parse
+ }\else\@escapeif{%
+% \end{macrocode}
+% If - follows, tokens will not be expanded from this point on. (This is the default behaviour.)
+% \begin{macrocode}
+ \ifx#1\bracket@action@dontexpandCharacter\@escapeif{%
+ \bracket@expandtokensfalse\bracket@Parse
+ }\else\@escapeif{%
+% \end{macrocode}
+% Inhibit expansion of the next token.
+% \begin{macrocode}
+ \ifx#10\@escapeif{%
+ \bracket@Parse@appendToken
+ }\else\@escapeif{%
+% \end{macrocode}
+% If another action characted follows, we yield the control. The user is
+% expected to resume the parser manually, using |\bracketResume|.
+% \begin{macrocode}
+ \ifx#1\bracket@actionCharacter
+ \else\@escapeif{%
+% \end{macrocode}
+% Anything else will be expanded once.
+% \begin{macrocode}
+ \expandafter\bracket@Parse#1%
+ }\fi
+ }\fi
+ }\fi
+ }\fi
+}
+% \end{macrocode}
+%
+% \subsection{The tree-structure interface}
+%
+% This macro creates a new node and sets its content (and preamble, if it's a root node). Bracket
+% user must define a 3-arg key |/bracket/new node=|\meta{preamble}\meta{node
+% specification}\meta{node cs}. User's key must define \meta{node cs} to be a macro holding the
+% node's id.
+% \begin{macrocode}
+\def\bracket@createNode{%
+ \ifnum\bracket@rootNode=0
+ % root node
+ \bracketset{new node/.expanded=%
+ {\the\bracket@afterthought}%
+ {\the\bracket@content}%
+ \noexpand\bracket@newNode
+ }%
+ \bracket@afterthought={}%
+ \let\bracket@rootNode\bracket@newNode
+ \expandafter\let\bracket@saveRootNodeTo\bracket@newNode
+ \else
+ % other nodes
+ \bracketset{new node/.expanded=%
+ {}%
+ {\the\bracket@content}%
+ \noexpand\bracket@newNode
+ }%
+ \fi
+ \bracket@content={}%
+}
+% \end{macrocode}
+%
+% This macro sets the afterthought. Bracket user must define a 2-arg key
+% |/bracket/set_afterthought=|\meta{node id}\meta{afterthought}.
+% \begin{macrocode}
+\def\bracket@addAfterthought{%
+ \bracketset{%
+ set afterthought/.expanded={\bracket@afterthoughtNode}{\the\bracket@afterthought}%
+ }%
+ \bracket@afterthought={}%
+}
+% \end{macrocode}
+%
+%
+% \section{Nodes}
+%
+% Nodes have numeric ids. The node option values of node $n$ are saved in the |\pgfkeys| tree in
+% path |/forest/@node/|$n$.
+%
+% \subsection{Option setting and retrieval}
+%
+% Macros for retrieving/setting node options of the current node.
+% \begin{macrocode}
+ % full expansion expands precisely to the value
+\def\forestov#1{\expandafter\expandonce\csname fRsT\forest@cn/#1\endcsname}
+ % full expansion expands all the way
+\def\forestove#1{\csname fRsT\forest@cn/#1\endcsname}
+ % full expansion expands to the cs holding the value
+\def\forestom#1{\expandonce{\csname fRsT\forest@cn/#1\endcsname}}
+\def\forestoget#1#2{\expandafter\let\expandafter#2\csname fRsT\forest@cn/#1\endcsname}
+\def\forestolet#1#2{\expandafter\let\csname fRsT\forest@cn/#1\endcsname#2}
+% \def\forestocslet#1#2{%
+% \edef\forest@marshal{%
+% \noexpand\pgfkeyslet{/forest/@node/\forest@cn/#1}{\expandonce{\csname#2\endcsname}}%
+% }\forest@marshal
+% }
+\def\forestoset#1#2{\expandafter\edef\csname fRsT\forest@cn/#1\endcsname{\unexpanded{#2}}}
+\def\forestoeset#1%#2
+ {\expandafter\edef\csname fRsT\forest@cn/#1\endcsname
+ %{#2}
+ }
+\def\forestoappto#1#2{%
+ \forestoeset{#1}{\forestov{#1}\unexpanded{#2}}%
+}
+\def\forestoifdefined#1%#2#3
+{%
+ \ifcsdef{fRsT\forest@cn/#1}%{#2}{#3}%
+}
+% \end{macrocode}
+% User macros for retrieving node options of the current node.
+% \begin{macrocode}
+\let\forestoption\forestov
+\let\foresteoption\forestove
+% \end{macrocode}
+% Macros for retrieving node options of a node given by its id.
+% \begin{macrocode}
+\def\forestOv#1#2{\expandafter\expandonce\csname fRsT#1/#2\endcsname}
+\def\forestOve#1#2{\csname fRsT#1/#2\endcsname}
+ % full expansion expands to the cs holding the value
+\def\forestOm#1#2{\expandonce{\csname fRsT#1/#2\endcsname}}
+\def\forestOget#1#2#3{\expandafter\let\expandafter#3\csname fRsT#1/#2\endcsname}
+\def\forestOlet#1#2#3{\expandafter\let\csname fRsT#1/#2\endcsname#3}
+% \def\forestOcslet#1#2#3{%
+% \edef\forest@marshal{%
+% \noexpand\pgfkeyslet{/forest/@node/#1/#2}{\expandonce{\csname#3\endcsname}}%
+% }\forest@marshal
+% }
+\def\forestOset#1#2#3{\expandafter\edef\csname fRsT#1/#2\endcsname{\unexpanded{#3}}}
+\def\forestOeset#1#2%#3
+{\expandafter\edef\csname fRsT#1/#2\endcsname
+ % {#3}
+}
+\def\forestOappto#1#2#3{%
+ \forestOeset{#1}{#2}{\forestOv{#1}{#2}\unexpanded{#3}}%
+}
+\def\forestOeappto#1#2#3{%
+ \forestOeset{#1}{#2}{\forestOv{#1}{#2}#3}%
+}
+\def\forestOpreto#1#2#3{%
+ \forestOeset{#1}{#2}{\unexpanded{#3}\forestOv{#1}{#2}}%
+}
+\def\forestOepreto#1#2#3{%
+ \forestOeset{#1}{#2}{#3\forestOv{#1}{#2}}%
+}
+\def\forestOifdefined#1#2%#3#4
+{%
+ \ifcsdef{fRsT#1/#2}%{#3}{#4}%
+}
+\def\forestOletO#1#2#3#4{% option #2 of node #1 <-- option #4 of node #3
+ \forestOget{#3}{#4}\forestoption@temp
+ \forestOlet{#1}{#2}\forestoption@temp}
+\def\forestOleto#1#2#3{%
+ \forestoget{#3}\forestoption@temp
+ \forestOlet{#1}{#2}\forestoption@temp}
+\def\forestoletO#1#2#3{%
+ \forestOget{#2}{#3}\forestoption@temp
+ \forestolet{#1}\forestoption@temp}
+\def\forestoleto#1#2{%
+ \forestoget{#2}\forestoption@temp
+ \forestolet{#1}\forestoption@temp}
+% \end{macrocode}
+% Macros for retrieving node options given by \meta{relative node name}|.|\meta{option}.
+% \begin{macrocode}
+\def\forestRNOget#1#2{% #1=rn!option, #2 = receiving cs
+ \pgfutil@in@{.}{#1}%
+ \ifpgfutil@in@
+ \forestRNOget@rn#2#1\forest@END
+ \else
+ \forestoget{#1}#2%
+ \fi
+}
+\def\forestRNOget@rn#1#2.#3\forest@END{%
+ \forest@forthis{%
+ \forest@nameandgo{#2}%
+ \forestoget{#3}#1%
+ }%
+}
+\def\forestRNO@getvalueandtype#1#2#3{% #1=rn.option, #2,#3 = receiving css
+ \pgfutil@in@{.}{#1}%
+ \ifpgfutil@in@
+ \forestRNO@getvalueandtype@rn#2#3#1\forest@END
+ \else
+ \forestoget{#1}#2%
+ \pgfkeysgetvalue{/forest/#1/@type}#3%
+ \fi
+}
+\def\forestRNO@getvalueandtype@rn#1#2#3.#4\forest@END{%
+ % #1,#2=receiving css, #3=relative node name, #4=option name
+ \forest@forthis{%
+ \forest@nameandgo{#3}%
+ \forestoget{#4}#1%
+ }%
+ \pgfkeysgetvalue{/forest/#4/@type}#2%
+}
+% \end{macrocode}
+% Macros for retrieving/setting registers.
+% \begin{macrocode}
+ % full expansion expands precisely to the value
+\def\forestrv#1{\expandafter\expandonce\csname fRsT/#1\endcsname}
+ % full expansion expands all the way
+\def\forestrve#1{\csname fRsT/#1\endcsname}
+ % full expansion expands to the cs holding the value
+\def\forestrm#1{\expandonce{\csname fRsT/#1\endcsname}}
+\def\forestrget#1#2{\expandafter\let\expandafter#2\csname fRsT/#1\endcsname}
+\def\forestrlet#1#2{\expandafter\let\csname fRsT/#1\endcsname#2}
+% \def\forestrcslet#1#2{%
+% \edef\forest@marshal{%
+% \noexpand\pgfkeyslet{/forest/@node/register/#1}{\expandonce{\csname#2\endcsname}}%
+% }\forest@marshal
+% }
+\def\forestrset#1#2{\expandafter\edef\csname fRsT/#1\endcsname{\unexpanded{#2}}}
+\def\forestreset#1%#2
+ {\expandafter\edef\csname fRsT/#1\endcsname}%{#2}
+\def\forestrappto#1#2{%
+ \forestreset{#1}{\forestrv{#1}\unexpanded{#2}}%
+}
+\def\forestrpreto#1#2{%
+ \forestreset{#1}{\unexpanded{#2}\forestrv{#1}}%
+}
+\def\forestrifdefined#1%#2#3
+{%
+ \ifcsdef{fRsT/#1}%{#2}{#3}%
+}
+% \end{macrocode}
+% User macros for retrieving node options of the current node.
+% \begin{macrocode}
+\def\forestregister#1{\forestrv{#1}}
+\def\foresteregister#1{\forestrve{#1}}
+% \end{macrocode}
+% Node initialization. Node option declarations append to |\forest@node@init|.
+% \begin{macrocode}
+\def\forest@node@init{%
+ \forestoset{@parent}{0}%
+ \forestoset{@previous}{0}% previous sibling
+ \forestoset{@next}{0}% next sibling
+ \forestoset{@first}{0}% primary child
+ \forestoset{@last}{0}% last child
+}
+\def\forestoinit#1{%
+ \pgfkeysgetvalue{/forest/#1}\forestoinit@temp
+ \forestolet{#1}\forestoinit@temp
+}
+\newcount\forest@node@maxid
+\def\forest@node@new#1{% #1 = cs receiving the new node id
+ \advance\forest@node@maxid1
+ \forest@fornode{\the\forest@node@maxid}{%
+ \forest@node@init
+ \forestoeset{id}{\forest@cn}%
+ \forest@node@setname{node@\forest@cn}%
+ \forest@initializefromstandardnode
+ \edef#1{\forest@cn}%
+ }%
+}
+\let\forestoinit@orig\forestoinit
+\def\forest@node@copy#1#2{% #1=from node id, cs receiving the new node id
+ \advance\forest@node@maxid1
+ \def\forestoinit##1{\ifstrequal{##1}{name}{\forestoset{name}{node@\forest@cn}}{\forestoletO{##1}{#1}{##1}}}%
+ \forest@fornode{\the\forest@node@maxid}{%
+ \forest@node@init
+ \forestoeset{id}{\forest@cn}%
+ \forest@node@setname{\forest@copy@name@template{\forestOve{#1}{name}}}%
+ \edef#2{\forest@cn}%
+ }%
+ \let\forestoinit\forestoinit@orig
+}
+\forestset{
+ copy name template/.code={\def\forest@copy@name@template##1{#1}},
+ copy name template/.default={node@\the\forest@node@maxid},
+ copy name template
+}
+\def\forest@tree@copy#1#2{% #1=from node id, #2=cs receiving the new node id
+ \forest@node@copy{#1}\forest@node@copy@temp@id
+ \forest@fornode{\forest@node@copy@temp@id}{%
+ \expandafter\forest@tree@copy@\expandafter{\forest@node@copy@temp@id}{#1}%
+ \edef#2{\forest@cn}%
+ }%
+}
+\def\forest@tree@copy@#1#2{%
+ \forest@node@Foreachchild{#2}{%
+ \expandafter\forest@tree@copy\expandafter{\forest@cn}\forest@node@copy@temp@childid
+ \forest@node@Append{#1}{\forest@node@copy@temp@childid}%
+ }%
+}
+% \end{macrocode}
+% Macro |\forest@cn| holds the current node id (a number). Node 0 is a special ``null'' node which
+% is used to signal the absence of a node.
+% \begin{macrocode}
+\def\forest@cn{0}
+\forest@node@init
+% \end{macrocode}
+%
+% \subsection{Tree structure}
+% Node insertion/removal.
+%
+% For the lowercase variants, |\forest@cn| is the parent/removed node. For the uppercase variants,
+% |#1| is the parent/removed node. For efficiency, the public macros all expand the arguments
+% before calling the internal macros.
+% \begin{macrocode}
+\def\forest@node@append#1{\expandtwonumberargs\forest@node@Append{\forest@cn}{#1}}
+\def\forest@node@prepend#1{\expandtwonumberargs\forest@node@Insertafter{\forest@cn}{#1}{0}}
+\def\forest@node@insertafter#1#2{%
+ \expandthreenumberargs\forest@node@Insertafter{\forest@cn}{#1}{#2}}
+\def\forest@node@insertbefore#1#2{%
+ \expandthreenumberargs\forest@node@Insertafter{\forest@cn}{#1}{\forestOve{#2}{@previous}}%
+}
+\def\forest@node@remove{\expandnumberarg\forest@node@Remove{\forest@cn}}
+\def\forest@node@Append#1#2{\expandtwonumberargs\forest@node@Append@{#1}{#2}}
+\def\forest@node@Prepend#1#2{\expandtwonumberargs\forest@node@Insertafter{#1}{#2}{0}}
+\def\forest@node@Insertafter#1#2#3{% #2 is inserted after #3
+ \expandthreenumberargs\forest@node@Insertafter@{#1}{#2}{#3}%
+}
+\def\forest@node@Insertbefore#1#2#3{% #2 is inserted before #3
+ \expandthreenumberargs\forest@node@Insertafter{#1}{#2}{\forestOve{#3}{@previous}}%
+}
+\def\forest@node@Remove#1{\expandnumberarg\forest@node@Remove@{#1}}
+\def\forest@node@Insertafter@#1#2#3{%
+ \ifnum\forestOve{#2}{@parent}=0
+ \else
+ \PackageError{forest}{Insertafter(#1,#2,#3):
+ node #2 already has a parent (\forestOve{#2}{@parent})}{}%
+ \fi
+ \ifnum#3=0
+ \else
+ \ifnum#1=\forestOve{#3}{@parent}
+ \else
+ \PackageError{forest}{Insertafter(#1,#2,#3): node #1 is not the parent of the
+ intended sibling #3 (with parent \forestOve{#3}{@parent})}{}%
+ \fi
+ \fi
+ \forestOeset{#2}{@parent}{#1}%
+ \forestOeset{#2}{@previous}{#3}%
+ \ifnum#3=0
+ \forestOget{#1}{@first}\forest@node@temp
+ \forestOeset{#1}{@first}{#2}%
+ \else
+ \forestOget{#3}{@next}\forest@node@temp
+ \forestOeset{#3}{@next}{#2}%
+ \fi
+ \forestOeset{#2}{@next}{\forest@node@temp}%
+ \ifnum\forest@node@temp=0
+ \forestOeset{#1}{@last}{#2}%
+ \else
+ \forestOeset{\forest@node@temp}{@previous}{#2}%
+ \fi
+}
+\def\forest@node@Append@#1#2{%
+ \ifnum\forestOve{#2}{@parent}=0
+ \else
+ \PackageError{forest}{Append(#1,#2):
+ node #2 already has a parent (\forestOve{#2}{@parent})}{}%
+ \fi
+ \forestOeset{#2}{@parent}{#1}%
+ \forestOget{#1}{@last}\forest@node@temp
+ \forestOeset{#1}{@last}{#2}%
+ \forestOeset{#2}{@previous}{\forest@node@temp}%
+ \ifnum\forest@node@temp=0
+ \forestOeset{#1}{@first}{#2}%
+ \else
+ \forestOeset{\forest@node@temp}{@next}{#2}%
+ \fi
+}
+\def\forest@node@Remove@#1{%
+ \forestOget{#1}{@parent}\forest@node@temp@parent
+ \ifnum\forest@node@temp@parent=0
+ \else
+ \forestOget{#1}{@previous}\forest@node@temp@previous
+ \forestOget{#1}{@next}\forest@node@temp@next
+ \ifnum\forest@node@temp@previous=0
+ \forestOeset{\forest@node@temp@parent}{@first}{\forest@node@temp@next}%
+ \else
+ \forestOeset{\forest@node@temp@previous}{@next}{\forest@node@temp@next}%
+ \fi
+ \ifnum\forest@node@temp@next=0
+ \forestOeset{\forest@node@temp@parent}{@last}{\forest@node@temp@previous}%
+ \else
+ \forestOeset{\forest@node@temp@next}{@previous}{\forest@node@temp@previous}%
+ \fi
+ \forestOset{#1}{@parent}{0}%
+ \forestOset{#1}{@previous}{0}%
+ \forestOset{#1}{@next}{0}%
+ \fi
+}
+% \end{macrocode}
+% Do some stuff and return to the current node.
+% \begin{macrocode}
+\def\forest@forthis#1{%
+ \edef\forest@node@marshal{\unexpanded{#1}\def\noexpand\forest@cn}%
+ \expandafter\forest@node@marshal\expandafter{\forest@cn}%
+}
+\def\forest@fornode#1#2{%
+ \edef\forest@node@marshal{\edef\noexpand\forest@cn{#1}\unexpanded{#2}\def\noexpand\forest@cn}%
+ \expandafter\forest@node@marshal\expandafter{\forest@cn}%
+}
+% \end{macrocode}
+% Looping methods: children.
+% \begin{macrocode}
+\def\forest@node@foreachchild#1{\forest@node@Foreachchild{\forest@cn}{#1}}
+\def\forest@node@Foreachchild#1#2{%
+ \forest@fornode{\forestOve{#1}{@first}}{\forest@node@@forselfandfollowingsiblings{#2}}%
+}
+\def\forest@node@@forselfandfollowingsiblings#1{%
+ \ifnum\forest@cn=0
+ \else
+ \forest@forthis{#1}%
+ \@escapeif{%
+ \edef\forest@cn{\forestove{@next}}%
+ \forest@node@@forselfandfollowingsiblings{#1}%
+ }%
+ \fi
+}
+\def\forest@node@@forselfandfollowingsiblings@reversed#1{%
+ \ifnum\forest@cn=0
+ \else
+ \@escapeif{%
+ \edef\forest@marshal{%
+ \noexpand\def\noexpand\forest@cn{\forestove{@next}}%
+ \noexpand\forest@node@@forselfandfollowingsiblings@reversed{\unexpanded{#1}}%
+ \noexpand\forest@fornode{\forest@cn}{\unexpanded{#1}}%
+ }\forest@marshal
+ }%
+ \fi
+}
+\def\forest@node@foreachchild@reversed#1{\forest@node@Foreachchild@reversed{\forest@cn}{#1}}
+\def\forest@node@Foreachchild@reversed#1#2{%
+ \forest@fornode{\forestOve{#1}{@last}}{\forest@node@@forselfandprecedingsiblings@reversed{#2}}%
+}
+\def\forest@node@@forselfandprecedingsiblings@reversed#1{%
+ \ifnum\forest@cn=0
+ \else
+ \forest@forthis{#1}%
+ \@escapeif{%
+ \edef\forest@cn{\forestove{@previous}}%
+ \forest@node@@forselfandprecedingsiblings@reversed{#1}%
+ }%
+ \fi
+}
+\def\forest@node@@forselfandprecedingsiblings#1{%
+ \ifnum\forest@cn=0
+ \else
+ \@escapeif{%
+ \edef\forest@marshal{%
+ \noexpand\def\noexpand\forest@cn{\forestove{@previous}}%
+ \noexpand\forest@node@@forselfandprecedingsiblings{\unexpanded{#1}}%
+ \noexpand\forest@fornode{\forest@cn}{\unexpanded{#1}}%
+ }\forest@marshal
+ }%
+ \fi
+}
+% \end{macrocode}
+% Looping methods: (sub)tree and descendants.
+% \begin{macrocode}
+\def\forest@node@@foreach#1#2#3#4{%
+ % #1 = do what
+ % #2 = do that -1=before,1=after processing children
+ % #3 & #4: normal or reversed order of children?
+ % #3 = @first/@last
+ % #4 = \forest@node@@forselfandfollowingsiblings / \forest@node@@forselfandprecedingsiblings@reversed
+ \ifnum#2<0 \forest@forthis{#1}\fi
+ \ifnum\forestove{#3}=0
+ \else\@escapeif{%
+ \forest@forthis{%
+ \edef\forest@cn{\forestove{#3}}%
+ #4{\forest@node@@foreach{#1}{#2}{#3}{#4}}%
+ }%
+ }\fi
+ \ifnum#2>0 \forest@forthis{#1}\fi
+}
+\def\forest@node@foreach#1{%
+ \forest@node@@foreach{#1}{-1}{@first}{\forest@node@@forselfandfollowingsiblings}}
+\def\forest@node@Foreach#1#2{%
+ \forest@fornode{#1}{\forest@node@@foreach{#2}{-1}{@first}{\forest@node@@forselfandfollowingsiblings}}}
+\def\forest@node@foreach@reversed#1{%
+ \forest@node@@foreach{#1}{-1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}
+\def\forest@node@Foreach@reversed#1#2{%
+ \forest@fornode{#1}{\forest@node@@foreach{#2}{-1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}}
+\def\forest@node@foreach@childrenfirst#1{%
+ \forest@node@@foreach{#1}{1}{@first}{\forest@node@@forselfandfollowingsiblings}}
+\def\forest@node@Foreach@childrenfirst#1#2{%
+ \forest@fornode{#1}{\forest@node@@foreach{#2}{1}{@first}{\forest@node@@forselfandfollowingsiblings}}}
+\def\forest@node@foreach@childrenfirst@reversed#1{%
+ \forest@node@@foreach{#1}{1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}
+\def\forest@node@Foreach@childrenfirst@reversed#1#2{%
+ \forest@fornode{#1}{\forest@node@@foreach{#2}{1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}}
+\def\forest@node@foreachdescendant#1{%
+ \forest@node@foreachchild{\forest@node@@foreach{#1}{-1}{@first}{\forest@node@@forselfandfollowingsiblings}}}
+\def\forest@node@Foreachdescendant#1#2{%
+ \forest@node@Foreachchild{#1}{\forest@node@@foreach{#2}{-1}{@first}{\forest@node@@forselfandfollowingsiblings}}}
+\def\forest@node@foreachdescendant@reversed#1{%
+ \forest@node@foreachchild@reversed{\forest@node@@foreach{#1}{-1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}}
+\def\forest@node@Foreachdescendant@reversed#1#2{%
+ \forest@node@Foreachchild@reversed{#1}{\forest@node@@foreach{#2}{-1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}}
+\def\forest@node@foreachdescendant@childrenfirst#1{%
+ \forest@node@foreachchild{\forest@node@@foreach{#1}{1}{@first}{\forest@node@@forselfandfollowingsiblings}}}
+\def\forest@node@Foreachdescendant@childrenfirst#1#2{%
+ \forest@node@Foreachchild{#1}{\forest@node@@foreach{#2}{1}{@first}{\forest@node@@forselfandfollowingsiblings}}}
+\def\forest@node@foreachdescendant@childrenfirst@reversed#1{%
+ \forest@node@foreachchild@reversed{\forest@node@@foreach{#1}{1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}}
+\def\forest@node@Foreachdescendant@childrenfirst@reversed#1#2{%
+ \forest@node@Foreachchild@reversed{#1}{\forest@node@@foreach{#2}{1}{@last}{\forest@node@@forselfandprecedingsiblings@reversed}}}
+% \end{macrocode}
+% Looping methods: breadth-first.
+% \begin{macrocode}
+\def\forest@node@foreach@breadthfirst#1#2{% #1 = max level, #2 = code
+ \forest@node@Foreach@breadthfirst@{\forest@cn}{@first}{@next}{#1}{#2}}
+\def\forest@node@foreach@breadthfirst@reversed#1#2{% #1 = max level, #2 = code
+ \forest@node@Foreach@breadthfirst@{\forest@cn}{@last}{@previous}{#1}{#2}}
+\def\forest@node@Foreach@breadthfirst#1#2#3{% #1 = node id, #2 = max level, #3 = code
+ \forest@node@Foreach@breadthfirst@{#1}{@first}{@next}{#2}{#3}}
+\def\forest@node@Foreach@breadthfirst@reversed#1#2#3{% #1 = node id, #2 = max level, #3 = code
+ \forest@node@Foreach@breadthfirst@{#1}{@last}{@previous}{#2}{#3}}
+\def\forest@node@Foreach@breadthfirst@#1#2#3#4#5{%
+ % #1 = root node,
+ % #2 = @first/@last, #3 = @next/@previous (must be in sync with #2),
+ % #4 = max level (< 0 means infinite)
+ % #5 = code to execute at each node
+ \forest@node@Foreach@breadthfirst@processqueue{#1,}{#2}{#3}{#4}{#5}%
+}
+\def\forest@node@Foreach@breadthfirst@processqueue#1#2#3#4#5{%
+ % #1 = queue,
+ % #2 = @first/@last, #3 = @next/@previous (must be in sync with #2),
+ % #4 = max level (< 0 means infinite)
+ % #5 = code to execute at each node
+ \ifstrempty{#1}{}{%
+ \forest@node@Foreach@breadthfirst@processqueue@#1\forest@node@Foreach@breadthfirst@processqueue@
+ {#2}{#3}{#4}{#5}%
+ }%
+}
+\def\forest@node@Foreach@breadthfirst@processqueue@#1,#2\forest@node@Foreach@breadthfirst@processqueue@#3#4#5#6{%
+ % #1 = first,
+ % #2 = rest,
+ % #3 = @first/@last, #4 = next/previous (must be in sync with #2),
+ % #5 = max level (< 0 means infinite)
+ % #6 = code to execute at each node
+ \forest@fornode{#1}{%
+ #6%
+ \ifnum#5<0
+ \forest@node@getlistofchildren\forest@temp{#3}{#4}%
+ \else
+ \ifnum\forestove{level}>#5\relax
+ \def\forest@temp{}%
+ \else
+ \forest@node@getlistofchildren\forest@temp{#3}{#4}%
+ \fi
+ \fi
+ \edef\forest@marshal{%
+ \noexpand\forest@node@Foreach@breadthfirst@processqueue{\unexpanded{#2}\forest@temp}%
+ {#3}{#4}{#5}{\unexpanded{#6}}%
+ }\forest@marshal
+ }%
+}
+\def\forest@node@getlistofchildren#1#2#3{% #1 = list cs, #2 = @first/@last, #3 = @next/@previous
+ \forest@node@Getlistofchildren{\forest@cn}{#1}{#2}{#3}%
+}
+\def\forest@node@Getlistofchildren#1#2#3#4{% #1 = node, #2 = list cs, #3 = @first/@last, #4 = @next/@previous
+ \def#2{}%
+ \ifnum\forestove{#3}=0
+ \else
+ \eappto#2{\forestOve{#1}{#3},}%
+ \@escapeif{%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@Getlistofchildren@{\forestOve{#1}{#3}}\noexpand#2{#4}%
+ }\forest@marshal
+ }%
+ \fi
+}
+\def\forest@node@Getlistofchildren@#1#2#3{% #1 = node, #2 = list cs, #3 = @next/@previous
+ \ifnum\forestOve{#1}{#3}=0
+ \else
+ \eappto#2{\forestOve{#1}{#3},}%
+ \@escapeif{%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@Getlistofchildren@{\forestOve{#1}{#3}}\noexpand#2{#3}%
+ }\forest@marshal
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+% Compute |n|, |n'|, |n children| and |level|.
+% \begin{macrocode}
+\def\forest@node@Compute@numeric@ts@info@#1{%
+ \forest@node@Foreach{#1}{\forest@node@@compute@numeric@ts@info}%
+ \ifnum\forestOve{#1}{@parent}=0
+ \else
+ \forest@fornode{#1}{\forest@node@@compute@numeric@ts@info@nbar}%
+ % hack: the parent of the node we called the update for gets +1 for n_children
+ \edef\forest@node@temp{\forestOve{#1}{@parent}}%
+ \forestOeset{\forest@node@temp}{n children}{%
+ \number\numexpr\forestOve{\forest@node@temp}{n children}-1%
+ }%
+ \fi
+ \forest@node@Foreachdescendant{#1}{\forest@node@@compute@numeric@ts@info@nbar}%
+}
+\def\forest@node@@compute@numeric@ts@info{%
+ \forestoset{n children}{0}%
+ %
+ \edef\forest@node@temp{\forestove{@previous}}%
+ \ifnum\forest@node@temp=0
+ \forestoset{n}{1}%
+ \else
+ \forestoeset{n}{\number\numexpr\forestOve{\forest@node@temp}{n}+1}%
+ \fi
+ %
+ \edef\forest@node@temp{\forestove{@parent}}%
+ \ifnum\forest@node@temp=0
+ \forestoset{n}{0}%
+ \forestoset{n'}{0}%
+ \forestoset{level}{0}%
+ \else
+ \forestOeset{\forest@node@temp}{n children}{%
+ \number\numexpr\forestOve{\forest@node@temp}{n children}+1%
+ }%
+ \forestoeset{level}{%
+ \number\numexpr\forestOve{\forest@node@temp}{level}+1%
+ }%
+ \fi
+}
+\def\forest@node@@compute@numeric@ts@info@nbar{%
+ \forestoeset{n'}{\number\numexpr\forestOve{\forestove{@parent}}{n children}-\forestove{n}+1}%
+}
+\def\forest@node@compute@numeric@ts@info#1{%
+ \expandnumberarg\forest@node@Compute@numeric@ts@info@{\forest@cn}%
+}
+\def\forest@node@Compute@numeric@ts@info#1{%
+ \expandnumberarg\forest@node@Compute@numeric@ts@info@{#1}%
+}
+% \end{macrocode}
+%
+% Tree structure queries.
+% \begin{macrocode}
+\def\forest@node@rootid{%
+ \expandnumberarg\forest@node@Rootid{\forest@cn}%
+}
+\def\forest@node@Rootid#1{% #1=node
+ \ifnum\forestOve{#1}{@parent}=0
+ #1%
+ \else
+ \@escapeif{\expandnumberarg\forest@node@Rootid{\forestOve{#1}{@parent}}}%
+ \fi
+}
+\def\forest@node@nthchildid#1{% #1=n
+ \ifnum#1<1
+ 0%
+ \else
+ \expandnumberarg\forest@node@nthchildid@{\number\forestove{@first}}{#1}%
+ \fi
+}
+\def\forest@node@nthchildid@#1#2{%
+ \ifnum#1=0
+ 0%
+ \else
+ \ifnum#2>1
+ \@escapeifif{\expandtwonumberargs
+ \forest@node@nthchildid@{\forestOve{#1}{@next}}{\numexpr#2-1}}%
+ \else
+ #1%
+ \fi
+ \fi
+}
+\def\forest@node@nbarthchildid#1{% #1=n
+ \expandnumberarg\forest@node@nbarthchildid@{\number\forestove{@last}}{#1}%
+}
+\def\forest@node@nbarthchildid@#1#2{%
+ \ifnum#1=0
+ 0%
+ \else
+ \ifnum#2>1
+ \@escapeifif{\expandtwonumberargs
+ \forest@node@nbarthchildid@{\forestOve{#1}{@previous}}{\numexpr#2-1}}%
+ \else
+ #1%
+ \fi
+ \fi
+}
+\def\forest@node@nornbarthchildid#1{%
+ \ifnum#1>0
+ \forest@node@nthchildid{#1}%
+ \else
+ \ifnum#1<0
+ \forest@node@nbarthchildid{-#1}%
+ \else
+ \forest@node@nornbarthchildid@error
+ \fi
+ \fi
+}
+\def\forest@node@nornbarthchildid@error{%
+ \PackageError{forest}{In \string\forest@node@nornbarthchildid, n should !=0}{}%
+}
+\def\forest@node@previousleafid{%
+ \expandnumberarg\forest@node@Previousleafid{\forest@cn}%
+}
+\def\forest@node@Previousleafid#1{%
+ \ifnum\forestOve{#1}{@previous}=0
+ \@escapeif{\expandnumberarg\forest@node@previousleafid@Goup{#1}}%
+ \else
+ \expandnumberarg\forest@node@previousleafid@Godown{\forestOve{#1}{@previous}}%
+ \fi
+}
+\def\forest@node@previousleafid@Goup#1{%
+ \ifnum\forestOve{#1}{@parent}=0
+ \PackageError{forest}{get previous leaf: this is the first leaf}{}%
+ \else
+ \@escapeif{\expandnumberarg\forest@node@Previousleafid{\forestOve{#1}{@parent}}}%
+ \fi
+}
+\def\forest@node@previousleafid@Godown#1{%
+ \ifnum\forestOve{#1}{@last}=0
+ #1%
+ \else
+ \@escapeif{\expandnumberarg\forest@node@previousleafid@Godown{\forestOve{#1}{@last}}}%
+ \fi
+}
+\def\forest@node@nextleafid{%
+ \expandnumberarg\forest@node@Nextleafid{\forest@cn}%
+}
+\def\forest@node@Nextleafid#1{%
+ \ifnum\forestOve{#1}{@next}=0
+ \@escapeif{\expandnumberarg\forest@node@nextleafid@Goup{#1}}%
+ \else
+ \expandnumberarg\forest@node@nextleafid@Godown{\forestOve{#1}{@next}}%
+ \fi
+}
+\def\forest@node@nextleafid@Goup#1{%
+ \ifnum\forestOve{#1}{@parent}=0
+ \PackageError{forest}{get next leaf: this is the last leaf}{}%
+ \else
+ \@escapeif{\expandnumberarg\forest@node@Nextleafid{\forestOve{#1}{@parent}}}%
+ \fi
+}
+\def\forest@node@nextleafid@Godown#1{%
+ \ifnum\forestOve{#1}{@first}=0
+ #1%
+ \else
+ \@escapeif{\expandnumberarg\forest@node@nextleafid@Godown{\forestOve{#1}{@first}}}%
+ \fi
+}
+
+
+
+\def\forest@node@linearnextid{%
+ \ifnum\forestove{@first}=0
+ \expandafter\forest@node@linearnextnotdescendantid
+ \else
+ \forestove{@first}%
+ \fi
+}
+\def\forest@node@linearnextnotdescendantid{%
+ \expandnumberarg\forest@node@Linearnextnotdescendantid{\forest@cn}%
+}
+\def\forest@node@Linearnextnotdescendantid#1{%
+ \ifnum\forestOve{#1}{@next}=0
+ \ifnum\forestOve{#1}{@parent}=0
+ 0%
+ \else
+ \@escapeifif{\expandnumberarg\forest@node@Linearnextnotdescendantid{\forestOve{#1}{@parent}}}%
+ \fi
+ \else
+ \forestOve{#1}{@next}%
+ \fi
+}
+\def\forest@node@linearpreviousid{%
+ \ifnum\forestove{@previous}=0
+ \forestove{@parent}%
+ \else
+ \forest@node@previousleafid
+ \fi
+}
+% \end{macrocode}
+% Test if the current node is an ancestor the node given by its id in the first argument. The code graciously deals with circular trees. The second and third argument (not formally present) are the true and the false case code.
+% \begin{macrocode}
+
+\def\forest@ifancestorof#1{% is the current node an ancestor of #1? Yes: #2, no: #3
+ \begingroup
+ \expandnumberarg\forest@ifancestorof@{\forestOve{#1}{@parent}}%
+}
+\def\forest@ifancestorof@#1{%
+ \ifnum#1=0
+ \def\forest@ifancestorof@next{\expandafter\endgroup\@secondoftwo}%
+ \else
+ \ifnum\forest@cn=#1
+ \def\forest@ifancestorof@next{\expandafter\endgroup\@firstoftwo}%
+ \else
+ \ifcsdef{forest@circularity@used#1}{%
+% \end{macrocode}
+% We have just detected circularity: the potential descendant is in fact an ancestor of itself. Our answer is ``false'': the current node is not an ancestor of the potential descendant.
+% \begin{macrocode}
+ \def\forest@ifancestorof@next{\expandafter\endgroup\@secondoftwo}%
+ }{%
+ \csdef{forest@circularity@used#1}{}%
+ \def\forest@ifancestorof@next{\expandnumberarg\forest@ifancestorof@{\forestOve{#1}{@parent}}}%
+ }%
+ \fi
+ \fi
+ \forest@ifancestorof@next
+}
+% \end{macrocode}
+% A debug tool which prints out the hierarchy of all nodes.
+% \begin{macrocode}
+\NewDocumentCommand\forestdebugtypeouttrees{o}{%
+ \forestdebug@typeouttrees\forest@temp
+ \typeout{%
+ \forestdebugtypeouttreesprefix
+ \IfValueTF{#1}{#1: }{}%
+ \detokenize\expandafter{\forest@temp}%
+ \forestdebugtypeouttreessuffix
+ }%
+}
+\def\forestdebug@typeouttrees#1{% #1 = cs to store the result
+ \begingroup
+ \edef\forest@temp@message{}%
+ \def\forestdebug@typeouttrees@n{0}%
+% \end{macrocode}
+% Loop through all known ids. When finding a node that has not been visited yet (probably as a part of a previous tree), find its root and typeout the root's tree.
+% \begin{macrocode}
+ \loop
+ \ifnum\forestdebug@typeouttrees@n<\forest@node@maxid
+ \edef\forestdebug@typeouttrees@n{\number\numexpr\forestdebug@typeouttrees@n+1}%
+ \ifcsdef{forestdebug@typeouttree@used@\forestdebug@typeouttrees@n}{}{%
+ \forest@fornode{\forestdebug@typeouttrees@n}{%
+% \end{macrocode}
+% After finding the root, we need to restore our notes about visited nodes.
+% \begin{macrocode}
+ \begingroup
+ \forestdebug@typeouttrees@findroot
+ \expandafter\endgroup
+ \expandafter\edef\expandafter\forest@cn\expandafter{\forest@cn}%
+ \forestdebug@typeouttree@build
+ \appto\forest@temp@message{ }%
+ }%
+ }%
+ \repeat
+ \expandafter\endgroup
+ \expandafter\def\expandafter#1\expandafter{\forest@temp@message}%
+}
+\def\forestdebug@typeouttrees@findroot{%
+ \let\forestdebug@typeouttrees@next\relax
+ \edef\forestdebug@typeouttrees@parent{\forestOve{\forest@cn}{@parent}}%
+ \ifnum\forestdebug@typeouttrees@parent=0
+ \else
+ \ifcsdef{forestdebug@typeouttree@used@\forest@cn}{}{%
+ \csdef{forestdebug@typeouttree@used@\forest@cn}{}%
+ \edef\forest@cn{\forestdebug@typeouttrees@parent}%
+ \let\forestdebug@typeouttrees@next\forestdebug@typeouttrees@findroot
+ }%
+ \fi
+ \forestdebug@typeouttrees@next
+}
+\def\forestdebug@typeouttree#1#2{% #1=root id, #2=cs to receive result
+ \begingroup
+ \edef\forest@temp@message{}%
+ \forest@fornode{#1}{\forestdebug@typeouttree@build}%
+ \expandafter\endgroup
+ \expandafter\edef\expandafter#2\expandafter{\forest@temp@message}%
+}
+\NewDocumentCommand\forestdebugtypeouttree{d() O{\forest@cn}}{%
+ \forestdebug@typeouttree{#2}\forest@temp
+ \typeout{\IfValueTF{#1}{#1: }{}\forest@temp}%
+}
+% \end{macrocode}
+% Recurse through the tree. If a circularity is detected, mark it with |*| and stop recursion.
+% \begin{macrocode}
+\def\forestdebug@typeouttree@build{%
+ \eappto\forest@temp@message{[\forestdebugtypeouttreenodeinfo%]
+ \ifcsdef{forestdebug@typeouttree@used@\forest@cn}{*}{}%
+ }%
+ \ifcsdef{forestdebug@typeouttree@used@\forest@cn}{}{%
+ \csdef{forestdebug@typeouttree@used@\forest@cn}{}%
+ \forest@node@foreachchild{\forestdebug@typeouttree@build}%
+ }%
+ \eappto\forest@temp@message{%[
+ ]}%
+}
+\def\forestdebugtypeouttreenodeinfo{\forest@cn}
+\def\forestdebugtypeouttreesprefix{}
+\def\forestdebugtypeouttreessuffix{}
+% \end{macrocode}
+%
+%
+% \subsection{Node options}
+%
+% \subsubsection{Option-declaration mechanism}
+%
+% Common code for declaring options.
+% \begin{macrocode}
+\def\forest@declarehandler#1#2#3{%#1=handler for specific type,#2=option name,#3=default value
+ \pgfkeyssetvalue{/forest/#2}{#3}%
+ \appto\forest@node@init{\forestoinit{#2}}%
+ \pgfkeyssetvalue{/forest/#2/node@or@reg}{\forest@cn}%
+ \forest@convert@others@to@underscores{#2}\forest@pgfmathoptionname
+ \edef\forest@marshal{%
+ \noexpand#1{/forest/#2}{/forest}{#2}{\forest@pgfmathoptionname}%
+ }\forest@marshal
+}
+\def\forest@def@with@pgfeov#1#2{% \pgfeov mustn't occur in the arg of the .code handler!!!
+ \long\def#1##1\pgfeov{#2}%
+}
+% \end{macrocode}
+% Option-declaration handlers.
+% \begin{macrocode}
+\def\forest@declaretoks@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declaretoks@handler@A{#1}{#2}{#3}{#4}{}%
+}
+\def\forest@declarekeylist@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declaretoks@handler@A{#1}{#2}{#3}{#4}{,}%
+ \forest@copycommandkey{#1}{#1'}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \forest@copycommandkey{#1+}{#1}%
+ \pgfkeysalso{#1-/.code={%
+ \forest@fornode{\forest@setter@node}{%
+ \forest@node@removekeysfromkeylist{##1}{#3}%
+ }}}%
+ \pgfkeyssetvalue{#1-/option@name}{#3}%
+}
+\def\forest@declaretoks@handler@A#1#2#3#4#5{% #1=key,#2=path,#3=name,#4=pgfmathname,#5=infix
+ \pgfkeysalso{%
+ #1/.code={\forestOset{\forest@setter@node}{#3}{##1}},
+ #2/if #3/.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \edef\forest@temp@compared@value{\unexpanded{##1}}%
+ \ifx\forest@temp@option@value\forest@temp@compared@value
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ #2/if in #3/.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \edef\forest@temp@compared@value{\unexpanded{##1}}%
+ \expandafter\expandafter\expandafter\pgfutil@in@\expandafter\expandafter\expandafter{\expandafter\forest@temp@compared@value\expandafter}\expandafter{\forest@temp@option@value}%
+ \ifpgfutil@in@
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ #2/where #3/.style n args={3}{for tree={#2/if #3={##1}{##2}{##3}}},
+ #2/where in #3/.style n args={3}{for tree={#2/if in #3={##1}{##2}{##3}}}
+ }%
+ \ifstrempty{#5}{%
+ \pgfkeysalso{%
+ #1+/.code={\forestOappto{\forest@setter@node}{#3}{#5##1}},
+ #2/+#3/.code={\forestOpreto{\forest@setter@node}{#3}{##1#5}},
+ }%
+ }{%
+ \pgfkeysalso{%
+ #1+/.code={%
+ \forestOget{\forest@setter@node}{#3}\forest@temp
+ \ifdefempty{\forest@temp}{%
+ \forestOset{\forest@setter@node}{#3}{##1}%
+ }{%
+ \forestOappto{\forest@setter@node}{#3}{#5##1}%
+ }%
+ },
+ #2/+#3/.code={%
+ \forestOget{\forest@setter@node}{#3}\forest@temp
+ \ifdefempty{\forest@temp}{%
+ \forestOset{\forest@setter@node}{#3}{##1}%
+ }{%
+ \forestOpreto{\forest@setter@node}{#3}{##1#5}%
+ }%
+ }%
+ }%
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyssetvalue{#1+/option@name}{#3}%
+ \pgfkeyssetvalue{#2/+#3/option@name}{#3}%
+ \pgfkeyslet{#1/@type}\forestmathtype@generic % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@attribute@toks{##1}{#3}}%
+}
+\def\forest@declareautowrappedtoks@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname,#5=infix
+ \forest@declaretoks@handler{#1}{#2}{#3}{#4}%
+ \forest@copycommandkey{#1}{#1'}%
+ \pgfkeysalso{#1/.style={#1'/.wrap value={##1}}}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \forest@copycommandkey{#1+}{#1+'}%
+ \pgfkeysalso{#1+/.style={#1+'/.wrap value={##1}}}%
+ \pgfkeyssetvalue{#1+'/option@name}{#3}%
+ \forest@copycommandkey{#2/+#3}{#2/+#3'}%
+ \pgfkeysalso{#2/+#3/.style={#2/+#3'/.wrap value={##1}}}%
+ \pgfkeyssetvalue{#2/+#3'/option@name}{#3}%
+}
+\def\forest@declarereadonlydimen@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ % this is to have `pt` with the correct category code
+ \pgfutil@tempdima=\pgfkeysvalueof{/forest/#3}\relax
+ \edef\forest@marshal{%
+ \noexpand\pgfkeyssetvalue{/forest/#3}{\the\pgfutil@tempdima}%
+ }\forest@marshal
+ \pgfkeysalso{%
+ #2/if #3/.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \ifdim\forest@temp@option@value=##1\relax
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ #2/if #3</.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \ifdim\forest@temp@option@value>##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ #2/if #3>/.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \ifdim\forest@temp@option@value<##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ #2/where #3/.style n args={3}{for tree={#2/if #3={##1}{##2}{##3}}},
+ #2/where #3</.style n args={3}{for tree={#2/if #3<={##1}{##2}{##3}}},
+ #2/where #3>/.style n args={3}{for tree={#2/if #3>={##1}{##2}{##3}}},
+ }%
+ \pgfkeyslet{#1/@type}\forestmathtype@dimen % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@attribute@dimen{##1}{#3}}%
+}
+\def\forest@declaredimen@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declarereadonlydimen@handler{#1}{#2}{#3}{#4}%
+ \pgfkeysalso{%
+ #1/.code={%
+ \forestmathsetlengthmacro\forest@temp{##1}%
+ \forestOlet{\forest@setter@node}{#3}\forest@temp
+ },
+ #1+/.code={%
+ \forestmathsetlengthmacro\forest@temp{##1}%
+ \pgfutil@tempdima=\forestove{#3}
+ \advance\pgfutil@tempdima\forest@temp\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\pgfutil@tempdima}%
+ },
+ #1-/.code={%
+ \forestmathsetlengthmacro\forest@temp{##1}%
+ \pgfutil@tempdima=\forestove{#3}
+ \advance\pgfutil@tempdima-\forest@temp\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\pgfutil@tempdima}%
+ },
+ #1*/.style={%
+ #1={#4()*(##1)}%
+ },
+ #1:/.style={%
+ #1={#4()/(##1)}%
+ },
+ #1'/.code={%
+ \pgfutil@tempdima=##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\pgfutil@tempdima}%
+ },
+ #1'+/.code={%
+ \pgfutil@tempdima=\forestove{#3}\relax
+ \advance\pgfutil@tempdima##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\pgfutil@tempdima}%
+ },
+ #1'-/.code={%
+ \pgfutil@tempdima=\forestove{#3}\relax
+ \advance\pgfutil@tempdima-##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\pgfutil@tempdima}%
+ },
+ #1'*/.style={%
+ \pgfutil@tempdima=\forestove{#3}\relax
+ \multiply\pgfutil@tempdima##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\pgfutil@tempdima}%
+ },
+ #1':/.style={%
+ \pgfutil@tempdima=\forestove{#3}\relax
+ \divide\pgfutil@tempdima##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\pgfutil@tempdima}%
+ },
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyssetvalue{#1+/option@name}{#3}%
+ \pgfkeyssetvalue{#1-/option@name}{#3}%
+ \pgfkeyssetvalue{#1*/option@name}{#3}%
+ \pgfkeyssetvalue{#1:/option@name}{#3}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \pgfkeyssetvalue{#1'+/option@name}{#3}%
+ \pgfkeyssetvalue{#1'-/option@name}{#3}%
+ \pgfkeyssetvalue{#1'*/option@name}{#3}%
+ \pgfkeyssetvalue{#1':/option@name}{#3}%
+}
+\def\forest@declarereadonlycount@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \pgfkeysalso{
+ #2/if #3/.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value=##1\relax
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ #2/if #3</.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value>##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ #2/if #3>/.code n args={3}{%
+ \forestoget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value<##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ #2/where #3/.style n args={3}{for tree={#2/if #3={##1}{##2}{##3}}},
+ #2/where #3</.style n args={3}{for tree={#2/if #3<={##1}{##2}{##3}}},
+ #2/where #3>/.style n args={3}{for tree={#2/if #3>={##1}{##2}{##3}}},
+ }%
+ \pgfkeyslet{#1/@type}\forestmathtype@count % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@attribute@count{##1}{#3}}%
+}
+\def\forest@declarecount@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declarereadonlycount@handler{#1}{#2}{#3}{#4}%
+ \pgfkeysalso{
+ #1/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \forestOlet{\forest@setter@node}{#3}\forest@temp
+ },
+ #1+/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestove{#3}\relax
+ \advance\c@pgf@counta\forest@temp\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1-/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestove{#3}\relax
+ \advance\c@pgf@counta-\forest@temp\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1*/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestove{#3}\relax
+ \multiply\c@pgf@counta\forest@temp\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1:/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestove{#3}\relax
+ \divide\c@pgf@counta\forest@temp\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1'/.code={%
+ \c@pgf@counta=##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1'+/.code={%
+ \c@pgf@counta=\forestove{#3}\relax
+ \advance\c@pgf@counta##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1'-/.code={%
+ \c@pgf@counta=\forestove{#3}\relax
+ \advance\c@pgf@counta-##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1'*/.style={%
+ \c@pgf@counta=\forestove{#3}\relax
+ \multiply\c@pgf@counta##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ #1':/.style={%
+ \c@pgf@counta=\forestove{#3}\relax
+ \divide\c@pgf@counta##1\relax
+ \forestOeset{\forest@setter@node}{#3}{\the\c@pgf@counta}%
+ },
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyssetvalue{#1+/option@name}{#3}%
+ \pgfkeyssetvalue{#1-/option@name}{#3}%
+ \pgfkeyssetvalue{#1*/option@name}{#3}%
+ \pgfkeyssetvalue{#1:/option@name}{#3}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \pgfkeyssetvalue{#1'+/option@name}{#3}%
+ \pgfkeyssetvalue{#1'-/option@name}{#3}%
+ \pgfkeyssetvalue{#1'*/option@name}{#3}%
+ \pgfkeyssetvalue{#1':/option@name}{#3}%
+}
+% \end{macrocode}
+% Nothing else should be defined in this namespace.
+% \begin{macrocode}
+\def\forest@declareboolean@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \pgfkeysalso{%
+ #1/.code={%
+ \forestmath@if{##1}{%
+ \def\forest@temp{1}%
+ }{%
+ \def\forest@temp{0}%
+ }%
+ \forestOlet{\forest@setter@node}{#3}\forest@temp
+ },
+ #1/.default=1,
+ #2/not #3/.code={\forestOset{\forest@setter@node}{#3}{0}},
+ #2/if #3/.code 2 args={%
+ \forestoget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value=0
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##1}%
+ \fi
+ },
+ #2/where #3/.style 2 args={for tree={#2/if #3={##1}{##2}}}
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyslet{#1/@type}\forestmathtype@count % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@attribute@count{##1}{#3}}%
+}
+\forestset{
+ declare toks/.code 2 args={%
+ \forest@declarehandler\forest@declaretoks@handler{#1}{#2}%
+ },
+ declare autowrapped toks/.code 2 args={%
+ \forest@declarehandler\forest@declareautowrappedtoks@handler{#1}{#2}%
+ },
+ declare keylist/.code 2 args={%
+ \forest@declarehandler\forest@declarekeylist@handler{#1}{#2}%
+ },
+ declare readonly dimen/.code 2 args={%
+ \forestmathsetlengthmacro\forest@temp{#2}%
+ \edef\forest@marshal{%
+ \unexpanded{\forest@declarehandler\forest@declarereadonlydimen@handler{#1}}{\forest@temp}%
+ }\forest@marshal
+ },
+ declare dimen/.code 2 args={%
+ \forestmathsetlengthmacro\forest@temp{#2}%
+ \edef\forest@marshal{%
+ \unexpanded{\forest@declarehandler\forest@declaredimen@handler{#1}}{\forest@temp}%
+ }\forest@marshal
+ },
+ declare readonly count/.code 2 args={%
+ \forestmathtruncatemacro\forest@temp{#2}%
+ \edef\forest@marshal{%
+ \unexpanded{\forest@declarehandler\forest@declarereadonlycount@handler{#1}}{\forest@temp}%
+ }\forest@marshal
+ },
+ declare count/.code 2 args={%
+ \forestmathtruncatemacro\forest@temp{#2}%
+ \edef\forest@marshal{%
+ \unexpanded{\forest@declarehandler\forest@declarecount@handler{#1}}{\forest@temp}%
+ }\forest@marshal
+ },
+ declare boolean/.code 2 args={%
+ \forestmath@if{#2}{%
+ \def\forest@temp{1}%
+ }{%
+ \def\forest@temp{0}%
+ }%
+ \edef\forest@marshal{%
+ \unexpanded{\forest@declarehandler\forest@declareboolean@handler{#1}}{\forest@temp}%
+ }\forest@marshal
+ },
+% \end{macrocode}
+%
+% \section{Handlers}
+%
+% \begin{macrocode}
+ /handlers/.restore default value/.code={%
+ \edef\forest@handlers@currentpath{\pgfkeyscurrentpath}%
+ \pgfkeysgetvalue{\pgfkeyscurrentpath/option@name}\forest@currentoptionname
+ \pgfkeysgetvalue{/forest/\forest@currentoptionname}\forest@temp
+ \expandafter\pgfkeysalso\expandafter{\forest@handlers@currentpath/.expand once=\forest@temp}%
+ },
+ /handlers/.pgfmath/.code={%
+ \pgfmathparse{#1}%
+ \pgfkeysalso{\pgfkeyscurrentpath/.expand once=\pgfmathresult}%
+ },
+ /handlers/.wrap value/.code={%
+ \edef\forest@handlers@wrap@currentpath{\pgfkeyscurrentpath}%
+ \pgfkeysgetvalue{\forest@handlers@wrap@currentpath/option@name}\forest@currentoptionname
+ \forestOget{\pgfkeysvalueof{/forest/\forest@currentoptionname/node@or@reg}}{\forest@currentoptionname}\forest@option@value
+ \forest@def@with@pgfeov\forest@wrap@code{#1}%
+ \expandafter\edef\expandafter\forest@wrapped@value\expandafter{\expandafter\expandonce\expandafter{\expandafter\forest@wrap@code\forest@option@value\pgfeov}}%
+ \pgfkeysalso{\forest@handlers@wrap@currentpath/.expand once=\forest@wrapped@value}%
+ },
+ /handlers/.option/.code={%
+ \edef\forest@temp{\pgfkeyscurrentpath}%
+ \expandafter\forest@handlers@option\expandafter{\forest@temp}{#1}%
+ },
+}
+\def\forest@handlers@option#1#2{%#1=pgfkeyscurrentpath,#2=relative node name
+ \forestRNOget{#2}\forest@temp
+ \pgfkeysalso{#1/.expand once={\forest@temp}}%
+}%
+\forestset{
+ /handlers/.register/.code={%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\pgfkeyscurrentpath={\forestregister{#1}}}%
+ }\forest@marshal
+ },
+ /handlers/.wrap pgfmath arg/.code 2 args={%
+ \forestmathparse{#2}\let\forest@wrap@arg@i\forestmathresult
+ \edef\forest@wrap@args{{\expandonce\forest@wrap@arg@i}}%
+ \def\forest@wrap@code##1{#1}%
+ % here we don't call \forest@wrap@pgfmath@args@@@wrapandpasson, as compat-2.0.2-wrappgfmathargs changes that to achieve the old, confusing state of affairs, which *didn't* apply at *1*-arg pgfmath wrapping
+ \expandafter\expandafter\expandafter\forest@temp@toks\expandafter\expandafter\expandafter{\expandafter\forest@wrap@code\forest@wrap@args}%
+ \expandafter\pgfkeysalso\expandafter{\expandafter\pgfkeyscurrentpath\expandafter=\expandafter{\the\forest@temp@toks}}%
+ },
+ /handlers/.wrap 2 pgfmath args/.code n args={3}{%
+ \forestmathparse{#2}\let\forest@wrap@arg@i\forestmathresult
+ \forestmathparse{#3}\let\forest@wrap@arg@ii\forestmathresult
+ \edef\forest@wrap@args{{\expandonce\forest@wrap@arg@i}{\expandonce\forest@wrap@arg@ii}}%
+ \def\forest@wrap@code##1##2{#1}%
+ \forest@wrap@pgfmath@args@@@wrapandpasson
+ },
+ /handlers/.wrap 3 pgfmath args/.code n args={4}{%
+ \forest@wrap@n@pgfmath@args{#2}{#3}{#4}{}{}{}{}{}{3}%
+ \forest@wrap@n@pgfmath@do{#1}{3}},
+ /handlers/.wrap 4 pgfmath args/.code n args={5}{%
+ \forest@wrap@n@pgfmath@args{#2}{#3}{#4}{#5}{}{}{}{}{4}%
+ \forest@wrap@n@pgfmath@do{#1}{4}},
+ /handlers/.wrap 5 pgfmath args/.code n args={6}{%
+ \forest@wrap@n@pgfmath@args{#2}{#3}{#4}{#5}{#6}{}{}{}{5}%
+ \forest@wrap@n@pgfmath@do{#1}{5}},
+ /handlers/.wrap 6 pgfmath args/.code n args={7}{%
+ \forest@wrap@n@pgfmath@args{#2}{#3}{#4}{#5}{#6}{#7}{}{}{6}%
+ \forest@wrap@n@pgfmath@do{#1}{6}},
+ /handlers/.wrap 7 pgfmath args/.code n args={8}{%
+ \forest@wrap@n@pgfmath@args{#2}{#3}{#4}{#5}{#6}{#7}{#8}{}{7}%
+ \forest@wrap@n@pgfmath@do{#1}{7}},
+ /handlers/.wrap 8 pgfmath args/.code n args={9}{%
+ \forest@wrap@n@pgfmath@args{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}{8}%
+ \forest@wrap@n@pgfmath@do{#1}{8}},
+}
+\def\forest@wrap@n@pgfmath@args#1#2#3#4#5#6#7#8#9{%
+ \forestmathparse{#1}\let\forest@wrap@arg@i\forestmathresult
+ \ifnum#9>1 \forestmathparse{#2}\let\forest@wrap@arg@ii\forestmathresult\fi
+ \ifnum#9>2 \forestmathparse{#3}\let\forest@wrap@arg@iii\forestmathresult\fi
+ \ifnum#9>3 \forestmathparse{#4}\let\forest@wrap@arg@iv\forestmathresult\fi
+ \ifnum#9>4 \forestmathparse{#5}\let\forest@wrap@arg@v\forestmathresult\fi
+ \ifnum#9>5 \forestmathparse{#6}\let\forest@wrap@arg@vi\forestmathresult\fi
+ \ifnum#9>6 \forestmathparse{#7}\let\forest@wrap@arg@vii\forestmathresult\fi
+ \ifnum#9>7 \forestmathparse{#8}\let\forest@wrap@arg@viii\forestmathresult\fi
+ \edef\forest@wrap@args{%
+ {\expandonce\forest@wrap@arg@i}
+ \ifnum#9>1 {\expandonce\forest@wrap@arg@ii}\fi
+ \ifnum#9>2 {\expandonce\forest@wrap@arg@iii}\fi
+ \ifnum#9>3 {\expandonce\forest@wrap@arg@iv}\fi
+ \ifnum#9>4 {\expandonce\forest@wrap@arg@v}\fi
+ \ifnum#9>5 {\expandonce\forest@wrap@arg@vi}\fi
+ \ifnum#9>6 {\expandonce\forest@wrap@arg@vii}\fi
+ \ifnum#9>7 {\expandonce\forest@wrap@arg@viii}\fi
+ }%
+}
+\def\forest@wrap@n@pgfmath@do#1#2{%
+ \ifcase#2\relax
+ \or\def\forest@wrap@code##1{#1}%
+ \or\def\forest@wrap@code##1##2{#1}%
+ \or\def\forest@wrap@code##1##2##3{#1}%
+ \or\def\forest@wrap@code##1##2##3##4{#1}%
+ \or\def\forest@wrap@code##1##2##3##4##5{#1}%
+ \or\def\forest@wrap@code##1##2##3##4##5##6{#1}%
+ \or\def\forest@wrap@code##1##2##3##4##5##6##7{#1}%
+ \or\def\forest@wrap@code##1##2##3##4##5##6##7##8{#1}%
+ \fi
+ \forest@wrap@pgfmath@args@@@wrapandpasson
+}
+% \end{macrocode}
+% The following macro is redefined by compat key |2.0.2-wrappgfmathargs|.
+% \begin{macrocode}
+\def\forest@wrap@pgfmath@args@@@wrapandpasson{%
+ \expandafter\expandafter\expandafter\forest@temp@toks
+ \expandafter\expandafter\expandafter{%
+ \expandafter\forest@wrap@code\forest@wrap@args}%
+ \expandafter\pgfkeysalso\expandafter{%
+ \expandafter\pgfkeyscurrentpath\expandafter=\expandafter{%
+ \the\forest@temp@toks}}%
+}
+% \end{macrocode}
+%
+% \subsection{.process}
+%
+% \begin{macrocode}
+\def\forest@process@catregime{} % filled by processor defs
+\forest@newarray\forest@process@left@ % processed args
+\forest@newarray\forest@process@right@ % unprocessed args
+\forest@newarray\forest@process@saved@ % used by instructions |S| and |U|
+\let\forest@process@savedtype\forestmathtype@none
+\forest@newglobalarray\forest@process@result@
+\newif\ifforest@process@returnarray@
+% \end{macrocode}
+% Processing instruction need not (but may) be enclosed in braces.
+% \begin{macrocode}
+\def\forest@process#1#2#{% #1 = true/false (should we return an array?)
+ % #2 = processing instructions (if non-empty),
+ % (initial) args follow
+ \ifblank{#2}{\forest@process@a{#1}}{\forest@process@a{#1}{#2}}%
+}
+\Inline\def\forest@process@a#1#2{%
+ \begingroup
+ \forest@process@left@clear
+ \forest@process@right@clear
+ \forest@process@saved@clear
+ \let\forest@process@savedtype\forestmathtype@generic
+ \csname forest@process@returnarray@#1\endcsname
+ \def\forest@topextend@next{%
+ \ExpandIfT{forestdebug}{%
+ \edef\forest@process@debug@args{\unexpanded{#2}}%
+ \forest@processor@debuginfo@template{Start "\unexpanded{#2}}%
+ }%
+ \forest@process@catregime
+ \endlinechar=-1
+ \scantokens{#2}%
+ \forest@process@finish
+ }%
+ \forest@process@right@topextend
+}
+\pgfkeys{%
+ /handlers/.process/.code={%
+ \forest@process{true}#1\forest@eov
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\noexpand\pgfkeyscurrentpath=\forest@process@result@values}%
+ }\forest@marshal
+ },
+ /forest/copy command key={/handlers/.process}{/handlers/.process args},
+}
+\def\forest@process@finish{%
+ \ifforest@process@returnarray@
+ \forest@process@finish@array
+ \else
+ \forest@process@finish@single
+ \fi
+ \global\let\forest@process@result@type\forestmathresulttype
+ \ifforestdebugprocess\forest@process@debug@end\fi
+ \endgroup
+}
+\def\forest@process@finish@single{%
+ \edef\forest@temp{forest@process@finish@single@%
+ \the\numexpr\forest@process@left@N-\forest@process@left@M\relax
+ \the\numexpr\forest@process@right@N-\forest@process@right@M\relax
+ }%
+ \ifcsname\forest@temp\endcsname
+ \csname\forest@temp\endcsname
+ \global\let\forest@process@result\forest@temp
+ \else
+ \forest@process@lengtherror
+ \fi
+}
+\csdef{forest@process@finish@single@10}{\forest@process@left@toppop\forest@temp}
+\csdef{forest@process@finish@single@01}{\forest@process@right@toppop\forest@temp}
+\def\forest@process@finish@array{%
+ \forest@process@result@clear
+ \forest@temp@count\forest@process@left@M\relax
+ \forest@loop
+ \ifnum\forest@temp@count<\forest@process@left@N\relax
+ \forest@process@left@get@{\the\forest@temp@count}\forest@temp
+ \forest@process@result@letappend\forest@temp
+ \advance\forest@temp@count1
+ \forest@repeat
+ \forest@temp@count\forest@process@right@M\relax
+ \forest@loop
+ \ifnum\forest@temp@count<\forest@process@right@N\relax
+ \forest@process@right@get@{\the\forest@temp@count}\forest@temp
+ \forest@process@result@letappend\forest@temp
+ \advance\forest@temp@count1
+ \forest@repeat
+}
+% \end{macrocode}
+% Debugging and error messages.
+% \begin{macrocode}
+\ifforestdebug
+ \let\forest@process@d\forest@process@b
+ \def\forest@process@b#1\forest@eov{% save and print initial arguments
+ \edef\forest@process@debug@args{\unexpanded{#1}}%
+ \typeout{[forest .process] Start "\unexpanded{#1}"}%
+ \forest@process@d#1\forest@eov
+ }
+\fi
+\def\forest@process@debug@end{%
+ \typeout{[forest .process] End "\expandonce{\forest@process@debug@args}" -> "\forest@process@left@values\forest@process@right@values"}%
+}
+\def\forest@process@lengtherror{%
+ \PackageError{forest}{%
+ The ".process" expression was expected to evaluate to a single argument,
+ but the result is \the\forest@process@result@N
+ \space items long.}{}%
+}
+% \end{macrocode}
+% Define the definer of processors. First, deal with the catcode of the instruction char.
+% \begin{macrocode}
+\def\forest@def@processor#1{%
+ {%
+ \def\forest@dp@double##1{%
+ \gdef\forest@global@temp{\forest@def@processor@{#1}{##1}}%
+ }%
+ \let\\\forest@dp@double
+ \catcode`#1=13
+ \scantokens{\\#1}%
+ }%
+ \forest@global@temp
+}
+\def\forest@def@processor@#1#2{%
+ % #1 = instruction char (normal catcode), #2 = instruction char (active)
+ % #3 = default n (optional numeric arg, which precedes any other args;
+ % if the default is empty, this means no optional n)
+ % #4 = args spec,
+ % #5 = code
+ \eappto\forest@process@catregime{%
+ \unexpanded{\let#2}\expandonce{\csname forest@processor@#1\endcsname}%
+ \unexpanded{\catcode`#1=13 }%
+ }%
+ \def\forest@def@processor@inschar{#1}%
+ \forest@def@processor@@
+}
+% \end{macrocode}
+% If |#1| is non-empty, the processor accepts the optional numeric argument: |#1| is the default.
+% \begin{macrocode}
+\def\forest@def@processor@@#1{%
+ \ifstrempty{#1}{%
+ \forest@def@processor@@non
+ }{%
+ \def\forest@def@processor@@default@n{#1}%
+ \forest@def@processor@@n
+ }%
+}
+% \end{macrocode}
+% We need |\relax| below because the next instruction character might get expanded when assigning the optional numerical argument which is not there.
+%
+% No optional n:
+% \begin{macrocode}
+\def\forest@def@processor@@non#1#2{% #1=args spec, #2=code
+ \csedef{forest@processor@\forest@def@processor@inschar}#1{%
+ \relax %% we need this (see above)
+ \unexpanded{#2}%
+ \expandafter\forest@def@processor@debuginfo\expandafter{%
+ \expandafter"\forest@def@processor@inschar"\ifstrempty{#1}{}{(#1)}}%
+ \ignorespaces
+ }%
+}
+% \end{macrocode}
+% Optional n: |*| after the given default means that the operation should be repeated n times.
+% \begin{macrocode}
+\def\forest@def@processor@@n{%
+ \@ifnextchar*%
+ {\forest@temptrue\forest@def@processor@@n@}%
+ {\forest@tempfalse\forest@def@processor@@n@@}%
+}
+\def\forest@def@processor@@n@*{\forest@def@processor@@n@@}
+\def\forest@def@processor@@n@@#1#2{% #1=args spec, #2=code
+ \csedef{forest@processor@\forest@def@processor@inschar}{%
+ \relax %% we need this (see above)
+ \noexpand\forestprocess@get@n
+ {\forest@def@processor@@default@n}%
+ \expandonce{\csname forest@processor@\forest@def@processor@inschar @\endcsname}%
+ }%
+ \ifforest@temp
+ \csedef{forest@processor@\forest@def@processor@inschar @}{%
+ \noexpand\forest@repeat@n@times{\forest@process@n}{%
+ \expandonce{\csname forest@processor@\forest@def@processor@inschar @rep\endcsname}%
+ }%
+ }%
+ \fi
+ \edef\forest@temp{%
+ \forest@def@processor@inschar
+ \ifforest@temp\else\noexpand\the\forest@process@n\fi
+ "}%
+ \csedef{forest@processor@\forest@def@processor@inschar @\ifforest@temp rep\fi}#1{%
+ \unexpanded{#2}%
+ \expandafter\forest@def@processor@debuginfo\expandafter{%
+ \forest@temp
+ \ifstrempty{#1}{}{(#1)}}%
+ }%
+}
+\def\forest@def@processor@debuginfo#1{% #1 = instruction call
+ \ifforestdebug
+ \expandonce{\forest@processor@debuginfo@template{\space\space After #1}}%
+ \fi
+}
+\def\forest@processor@debuginfo@template#1{%
+ \ifforestdebugprocess
+ \edef\forest@temp@left{\forest@process@left@values}%
+ \edef\forest@temp@right{\forest@process@right@values}%
+ \edef\forest@temp@saved{\forest@process@saved@values}%
+ \typeout{[forest .process] #1: left="\expandonce{\forest@temp@left}", right="\expandonce{\forest@temp@right}", saved="\expandonce{\forest@temp@saved}", type=\forestmathresulttype}%
+ \fi
+}
+% \end{macrocode}
+% A helper macro which puts the optional numeric argument into count |\forest@process@n| (default being |#1|) and then executes control sequence |#2|.
+% \begin{macrocode}
+\newcount\forest@process@n
+\def\forestprocess@get@n#1#2{%
+ \def\forestprocess@default@n{#1}%
+ \let\forestprocess@after@get@n@#2%
+ \afterassignment\forestprocess@get@n@\forest@process@n=0%
+}
+\def\forestprocess@get@n@{%
+ \ifnum\forest@process@n=0
+ \forest@process@n\forestprocess@default@n\relax
+ \fi
+ \forestprocess@after@get@n@
+}
+% \end{macrocode}
+%
+% Definitions of processing instructions. Processors should be defined using |\forest@def@processor|. If they take arguments: yes, they follow, but they were scanned in |\forest@process@catregime|. Processors should manipulate arrays |\forest@process@left@| and |\forest@process@right|. They should set |\def\forestmathresulttype| to |_| not defined, |n| number, |d| dimension, |P| pgfmath or |t| text.
+% \begin{macrocode}
+\forest@def@processor{_}{1}*{}{% no processing, no type
+ \forest@process@right@bottompop\forest@temp
+ \forest@process@left@letappend\forest@temp
+}
+\forest@def@processor{n}{1}*{}{% numexpr
+ \forest@process@right@bottompop\forest@temp
+ \forest@process@left@esetappend{\number\numexpr\forest@temp}%
+ \let\forestmathresulttype\forestmathtype@count
+}
+\forest@def@processor{d}{1}*{}{% dimexpr
+ \forest@process@right@bottompop\forest@temp
+ \forest@process@left@esetappend{\the\dimexpr\forest@temp}%
+ \let\forestmathresulttype\forestmathtype@dimen
+}
+\forest@def@processor{P}{1}*{}{% pgfmath expression
+ \forest@process@right@bottompop\forest@temp
+ \pgfmathparse{\forest@temp}%
+ \forest@process@left@letappend\pgfmathresult
+ \let\forestmathresulttype\forestmathtype@unitless
+}
+\forest@def@processor{p}{1}*{}{% process expression
+ \forest@process@right@bottompop\forest@temp@a
+ \def\forest@temp{\forest@process{true}}%
+ \expandafter\forest@temp\forest@temp@a\forest@eov
+ \let\forest@topextend@next\relax
+ \edef\forest@temp{\forest@process@result@values}%
+ \expandafter\forest@process@left@topextend\forest@temp\forest@eov
+ \let\forestmathresulttype\forest@process@result@type
+}
+\forest@def@processor{t}{1}*{}{% text
+ \forest@process@right@bottompop\forest@temp
+ \forest@process@left@letappend\forest@temp
+ \let\forestmathresulttype\forestmathtype@textasc
+}
+\forest@def@processor{-}{}{}{% toggle ascending/descending
+ \forest@process@left@toppop\forestmathresult
+ \csname forest@processor@-@\forestmathresulttype\endcsname
+ \forest@process@left@letappend\forestmathresult
+}
+\cslet{forest@processor@-@\forestmathtype@generic}\relax
+\csdef{forest@processor@-@\forestmathtype@count}{%
+ \forestmathadd{\forestmathzero}{-\forestmathresult}}
+\csletcs{forest@processor@-@\forestmathtype@dimen}
+ {forest@processor@-@\forestmathtype@count}
+\csletcs{forest@processor@-@\forestmathtype@unitless}
+ {forest@processor@-@\forestmathtype@count}
+\csdef{forest@processor@-@\forestmathtype@textasc}{%
+ \let\forestmathresulttype\forestmathtype@textdesc}
+\csdef{forest@processor@-@\forestmathtype@textdesc}{%
+ \let\forestmathresulttype\forestmathtype@textasc}
+
+\forest@def@processor{c}{}{}{% to lowercase
+ \forest@process@right@bottompop\forest@temp
+ \expandafter\lowercase\expandafter{\expandafter\def\expandafter\forest@temp\expandafter{\forest@temp}}%
+ \forest@process@left@letappend\forest@temp
+}
+\forest@def@processor{C}{}{}{% to uppercase
+ \forest@process@right@bottompop\forest@temp
+ \expandafter\uppercase\expandafter{\expandafter\def\expandafter\forest@temp\expandafter{\forest@temp}}%
+ \forest@process@left@letappend\forest@temp
+}
+% \end{macrocode}
+% Expansions:
+% \begin{macrocode}
+\forest@def@processor{x}{}{}{% expand
+ \forest@process@right@bottompop\forest@temp
+ \forest@process@left@esetappend{\forest@temp}%
+ \let\forestmathresulttype\forestmathtype@generic
+}
+\forest@def@processor{o}{1}{}{% expand once (actually, \forest@count@n times)
+ \forest@process@right@bottompop\forest@temp
+ \forest@repeat@n@times{\forest@process@n}{%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\forest@temp
+ \expandafter\expandafter\expandafter{\forest@temp}%
+ }%
+ \expandafter\forest@process@left@setappend\expandafter{\forest@temp}%
+ \let\forestmathresulttype\forestmathtype@generic
+}
+% \end{macrocode}
+% Access to \foRest; data.
+% \begin{macrocode}
+\forest@def@processor{O}{1}*{}{% option
+ \forest@process@right@bottompop\forest@temp
+ \expandafter\forestRNO@getvalueandtype\expandafter{\forest@temp}\forest@tempvalue\forest@temp@type
+ \let\forestmathresulttype\forest@temp@type
+ \forest@process@left@letappend\forest@tempvalue
+}
+\forest@def@processor{R}{1}*{}{% register
+ \forest@process@right@bottompop\forest@temp
+ \forestrget{\forest@temp}\forest@tempvalue
+ \forest@process@left@letappend\forest@tempvalue
+ \pgfkeysgetvalue{/forest/\forest@temp/@type}\forest@temp@type
+ \let\forestmathresulttype\forest@temp@type
+}
+% \end{macrocode}
+% The following processors muck about with the argument / result list.
+% \begin{macrocode}
+\forest@def@processor{+}{1}*{}{% join processors = pop one from result
+ \forest@process@left@toppop\forest@temp
+ \forest@process@right@letprepend\forest@temp
+}
+\forest@def@processor{u}{}{}{% ungroup: remove braces and leave in the argument list
+ \forest@process@right@bottompop\forest@temp
+ \forest@temparray@clear
+ \let\forestmathresulttype\forestmathtype@generic
+ \let\forest@topextend@next\forest@processor@u@
+ \expandafter\forest@temparray@topextend\forest@temp\forest@eov
+}
+\def\forest@processor@u@{%
+ \forest@loop
+ \ifnum\forest@temparray@N>0
+ \forest@temparray@toppop\forest@temp
+ \expandafter\forest@process@right@setprepend\expandafter{\forest@temp}%
+ \forest@repeat
+}
+\def\forest@process@check@mn#1#2#3#4{%
+ % #1 = processor, #2 = given n, #3/#4 = lower/upper bound (inclusive)
+ \ifnum#3>#2\relax
+ \forest@process@check@n@error{#1}{#2}{#3<=}{<=#4}%
+ \else
+ \ifnum#4<#2\relax
+ \forest@process@check@n@error{#1}{#2}{#3<=}{<=#4}%
+ \fi
+ \fi
+}
+\def\forest@process@check@m#1#2#3{%
+ % #1 = processor, #2 = given n, #3 = lower bound (inclusive)
+ \ifnum#2<#3\relax
+ \forest@process@check@n@error{#1}{#2}{#3<=}{}%
+ \fi
+}
+\def\forest@process@check@n@error#1#2#3#4{%
+ \PackageError{forest}{'.process' instruction '#1' requires a numeric modifier #3n#4, but n="#2" was given.}{}%
+}
+\newif\ifforest@process@W
+\forest@def@processor{w}{1}{}{% consuming wrap: first test 1<=#1<=9
+ \forest@process@Wtrue
+ \forest@process@check@mn{w}{0\the\forest@process@n}{1}{9}%
+ \expandafter\forest@processor@wW@\expandafter{\the\forest@process@n}%
+}
+\forest@def@processor{W}{1}{}{% nonconsuming wrap: first test 1<=#1<=9
+ \forest@process@Wfalse
+ \forest@process@check@mn{W}{0\the\forest@process@n}{1}{9}%
+ \expandafter\forest@processor@wW@\expandafter{\the\forest@process@n}%
+}
+\def\forest@processor@wW@#1{%
+ \forest@process@left@checkindex{\forest@process@left@N-#1}%
+ \edef\forest@marshal{%
+ \edef\noexpand\forest@temp@args{%
+ \noexpand\forest@process@left@valuesfromrange
+ {\number\numexpr\forest@process@left@N-#1}%
+ {\the\forest@process@left@N}%
+ }%
+ }\forest@marshal
+ \ifforest@process@W
+ \advance\forest@process@left@N-#1\relax
+ \fi
+ \forest@process@right@bottompop\forest@temp@macrobody
+ \expandafter\forest@def@n\expandafter\forest@process@temp@macro\expandafter{\expandafter#1\expandafter}\expandafter{\forest@temp@macrobody}%
+ \expandafter\expandafter\expandafter\forest@process@left@setappend\expandafter\expandafter\expandafter{\expandafter\forest@process@temp@macro\forest@temp@args}%
+ \let\forestmathresulttype\forestmathtype@generic
+}
+\def\forest@def@n#1#2{\csname forest@def@n@#2\endcsname#1}
+\csdef{forest@def@n@1}#1{\def#1##1}
+\csdef{forest@def@n@2}#1{\def#1##1##2}
+\csdef{forest@def@n@3}#1{\def#1##1##2##3}
+\csdef{forest@def@n@4}#1{\def#1##1##2##3##4}
+\csdef{forest@def@n@5}#1{\def#1##1##2##3##4##5}
+\csdef{forest@def@n@6}#1{\def#1##1##2##3##4##5##6}
+\csdef{forest@def@n@7}#1{\def#1##1##2##3##4##5##6##7}
+\csdef{forest@def@n@8}#1{\def#1##1##2##3##4##5##6##7##8}
+\csdef{forest@def@n@9}#1{\def#1##1##2##3##4##5##6##7##8##9}
+% \end{macrocode}
+% Save last |n| arguments from the left side into a special place. |s| deletes them from the left side, |S| keeps them there as well.
+% \begin{macrocode}
+\forest@def@processor{s}{1}{}{%
+ \forest@temptrue % delete the originals
+ \expandafter\forest@processor@save\expandafter{%
+ \the\numexpr\forest@process@left@N-\forest@process@n}}
+\forest@def@processor{S}{1}{}{%
+ \forest@tempfalse % keep the originals
+ \expandafter\forest@processor@save\expandafter{%
+ \the\numexpr\forest@process@left@N-\forest@process@n}}
+\def\forest@processor@save#1{%
+ \forest@process@left@checkindex{#1}%
+ \forest@temp@count#1
+ \forest@loop
+ \ifnum\forest@temp@count<\forest@process@left@N\relax
+ \forest@process@left@get@{\the\forest@temp@count}\forest@temp
+ \forest@process@saved@letappend\forest@temp
+ \advance\forest@temp@count+1
+ \forest@repeat
+ \let\forest@process@savedtype\forestmathresulttype
+ \ifforest@temp
+ \forest@process@left@N=#1
+ \fi
+}
+% \end{macrocode}
+% Load |n| arguments from the end of the special place to the left side. If $n=0$, load the entire special place. |l| deletes the args from the special place, |L| keeps them there as well.
+% \begin{macrocode}
+\forest@def@processor{l}{0}{}{%
+ \forest@temptrue
+ \forest@processor@U@@
+}
+\forest@def@processor{L}{0}{}{%
+ \forest@tempfalse
+ \forest@processor@U@@
+}
+
+\def\forest@processor@U@@{%
+ \ifnum\forest@process@n=0
+ \forest@process@n\forest@process@saved@N\relax
+ \fi
+ \expandafter\forest@processor@U@@@\expandafter{%
+ \the\numexpr\forest@process@saved@N-\forest@process@n}%
+}
+\def\forest@processor@U@@@#1{%
+ \forest@temp@count#1
+ \forest@loop
+ \ifnum\forest@temp@count<\forest@process@saved@N\relax
+ \forest@process@saved@get@{\the\forest@temp@count}\forest@temp
+ \forest@process@left@letappend\forest@temp
+ \advance\forest@temp@count1
+ \forest@repeat
+ \let\forestmathresulttype\forest@process@savedtype
+ \ifforest@temp
+ \let\forest@process@savedtype\forestmathtype@none
+ \forest@process@saved@N#1
+ \fi
+}
+% \end{macrocode}
+% Boolean operations:
+% \begin{macrocode}
+\forest@def@processor{&}{2}{}{% and
+ \def\forest@tempa{1}%
+ \forest@repeat@n@times{\forest@process@n}{%
+ \forest@process@left@toppop\forest@tempb
+ \edef\forest@tempa{\ifnum10<\forest@tempa\forest@tempb\space 1\else0\fi}%
+ }%
+ \forest@process@left@esetappend{\forest@tempa}%
+ \let\forestmathresulttype\forestmathtype@count
+}
+\forest@def@processor{|}{2}{}{% or
+ \def\forest@tempa{0}%
+ \forest@repeat@n@times{\forest@process@n}{%
+ \forest@process@left@toppop\forest@tempb
+ \edef\forest@tempa{\ifnum0=\forest@tempa\forest@tempb\space 0\else1\fi}%
+ }%
+ \forest@process@left@esetappend{\forest@tempa}%
+ \let\forestmathresulttype\forestmathtype@count
+}
+\forest@def@processor{!}{}{}{% not
+ \forest@process@left@toppop\forest@temp
+ \forest@process@left@esetappend{\ifnum0=\forest@temp\space 1\else0\fi}%
+ \let\forestmathresulttype\forestmathtype@count
+}
+\forest@def@processor{?}{}{}{%
+ \forest@process@left@toppop\forest@temp
+ \forest@process@right@bottompop\forest@tempa
+ \forest@process@right@bottompop\forest@tempb
+ \ifnum\forest@temp=0
+ \forest@process@right@letprepend\forest@tempb
+ \else
+ \forest@process@right@letprepend\forest@tempa
+ \fi
+ \let\forestmathresulttype\forestmathtype@generic
+}
+% \end{macrocode}
+% Comparisons. They automatically determine the type (number, dimen, other) of the arguments, by checking what the last processing instruction was.
+% \begin{macrocode}
+\forest@def@processor{=}{}{}{%
+ \forest@process@left@toppop\forest@tempa
+ \forest@process@left@toppop\forest@tempb
+ \forest@process@left@esetappend{\ifx\forest@tempa\forest@tempb 1\else0\fi}%
+ \let\forestmathresulttype\forestmathtype@count
+}
+\forest@def@processor{<}{}{}{%
+ \forest@process@left@toppop\forest@tempb
+ \forest@process@left@toppop\forest@tempa
+ \ifx\forestmathresulttype\forestmathtype@generic
+ \forest@cmp@error\forest@tempa\forest@tempb
+ \else
+ \forestmathlt{\forest@tempa}{\forest@tempb}%
+ \forest@process@left@esetappend{\forestmathresult}%
+ \fi
+}
+\forest@def@processor{>}{}{}{%
+ \forest@process@left@toppop\forest@tempb
+ \forest@process@left@toppop\forest@tempa
+ \ifx\forestmathresulttype\forestmathtype@generic
+ \forest@cmp@error\forest@tempa\forest@tempb
+ \else
+ \forestmathgt{\forest@tempa}{\forest@tempb}%
+ \forest@process@left@esetappend{\forestmathresult}%
+ \fi
+}
+% \end{macrocode}
+% Various.
+% \begin{macrocode}
+\forest@def@processor{r}{}{}{% reverse keylist
+ \forest@process@right@bottompop\forest@temp
+ \expandafter\forest@processor@r@\expandafter{\forest@temp}%
+}
+\def\forest@processor@r@#1{%
+ \forest@process@left@esetappend{}%
+ \def\forest@tempcomma{}%
+ \pgfqkeys{/forest}{split={#1}{,}{process@rk}}%
+ \let\forestmathresulttype\forestmathtype@generic
+}
+\forestset{%
+ process@rk/.code={%
+ \forest@process@left@toppop\forest@temp
+ \forest@temp@toks{#1}%
+ \forest@process@left@esetappend{\the\forest@temp@toks\forest@tempcomma\expandonce{\forest@temp}}%
+ \def\forest@tempcomma{,}%
+ }%
+}
+% \end{macrocode}
+%
+% \subsubsection{Registers}
+% Register declaration mechanism is an adjusted copy-paste of the option declaration mechanism.
+% \begin{macrocode}
+\def\forest@pgfmathhelper@register@toks#1#2{% #1 is discarded: it is present only for analogy with options
+ \forestrget{#2}\pgfmathresult
+}
+\def\forest@pgfmathhelper@register@dimen#1#2{%
+ \forestrget{#2}\forest@temp
+ \edef\pgfmathresult{\expandafter\Pgf@geT\forest@temp}%
+}
+\def\forest@pgfmathhelper@register@count#1#2{%
+ \forestrget{#2}\pgfmathresult
+}
+\def\forest@declareregisterhandler#1#2{%#1=handler for specific type,#2=option name
+ \pgfkeyssetvalue{/forest/#2/node@or@reg}{}% empty = register (node id=node)
+ \forest@convert@others@to@underscores{#2}\forest@pgfmathoptionname
+ \edef\forest@marshal{%
+ \noexpand#1{/forest/#2}{/forest}{#2}{\forest@pgfmathoptionname}%
+ }\forest@marshal
+}
+\def\forest@declaretoksregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declaretoksregister@handler@A{#1}{#2}{#3}{#4}{}%
+}
+\def\forest@declarekeylistregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declaretoksregister@handler@A{#1}{#2}{#3}{#4}{,}%
+ \forest@copycommandkey{#1}{#1'}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \forest@copycommandkey{#1+}{#1}%
+ \pgfkeysalso{#1-/.code={%
+ \forest@fornode{}{%
+ \forest@node@removekeysfromkeylist{##1}{#3}%
+ }}}%
+ \pgfkeyssetvalue{#1-/option@name}{#3}%
+}
+\def\forest@declaretoksregister@handler@A#1#2#3#4#5{% #1=key,#2=path,#3=name,#4=pgfmathname,#5=infix
+ \pgfkeysalso{%
+ #1/.code={\forestrset{#3}{##1}},
+ #2/if #3/.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \edef\forest@temp@compared@value{\unexpanded{##1}}%
+ \ifx\forest@temp@option@value\forest@temp@compared@value
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ #2/if in #3/.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \edef\forest@temp@compared@value{\unexpanded{##1}}%
+ \expandafter\expandafter\expandafter\pgfutil@in@\expandafter\expandafter\expandafter{\expandafter\forest@temp@compared@value\expandafter}\expandafter{\forest@temp@option@value}%
+ \ifpgfutil@in@
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ }%
+ \ifstrempty{#5}{%
+ \pgfkeysalso{%
+ #1+/.code={\forestrappto{#3}{#5##1}},
+ #2/+#3/.code={\forestrpreto{#3}{##1#5}},
+ }%
+ }{%
+ \pgfkeysalso{%
+ #1+/.code={%
+ \forestrget{#3}\forest@temp
+ \ifdefempty{\forest@temp}{%
+ \forestrset{#3}{##1}%
+ }{%
+ \forestrappto{#3}{#5##1}%
+ }%
+ },
+ #2/+#3/.code={%
+ \forestrget{#3}\forest@temp
+ \ifdefempty{\forest@temp}{%
+ \forestrset{#3}{##1}%
+ }{%
+ \forestrpreto{#3}{##1#5}%
+ }%
+ }%
+ }%
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyssetvalue{#1+/option@name}{#3}%
+ \pgfkeyssetvalue{#2/+#3/option@name}{#3}%
+ \pgfkeyslet{#1/@type}\forestmathtype@generic % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@register@toks{##1}{#3}}%
+}
+\def\forest@declareautowrappedtoksregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname,#5=infix
+ \forest@declaretoksregister@handler{#1}{#2}{#3}{#4}%
+ \forest@copycommandkey{#1}{#1'}%
+ \pgfkeysalso{#1/.style={#1'/.wrap value={##1}}}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \forest@copycommandkey{#1+}{#1+'}%
+ \pgfkeysalso{#1+/.style={#1+'/.wrap value={##1}}}%
+ \pgfkeyssetvalue{#1+'/option@name}{#3}%
+ \forest@copycommandkey{#2/+#3}{#2/+#3'}%
+ \pgfkeysalso{#2/+#3/.style={#2/+#3'/.wrap value={##1}}}%
+ \pgfkeyssetvalue{#2/+#3'/option@name}{#3}%
+}
+\def\forest@declarereadonlydimenregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \pgfkeysalso{%
+ #2/if #3/.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \ifdim\forest@temp@option@value=##1\relax
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ #2/if #3</.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \ifdim\forest@temp@option@value>##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ #2/if #3>/.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \ifdim\forest@temp@option@value<##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ }%
+ \pgfkeyslet{#1/@type}\forestmathtype@dimen % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@register@dimen{##1}{#3}}%
+}
+\def\forest@declaredimenregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declarereadonlydimenregister@handler{#1}{#2}{#3}{#4}%
+ \pgfkeysalso{%
+ #1/.code={%
+ \forestmathsetlengthmacro\forest@temp{##1}%
+ \forestrlet{#3}\forest@temp
+ },
+ #1+/.code={%
+ \forestmathsetlengthmacro\forest@temp{##1}%
+ \pgfutil@tempdima=\forestrve{#3}
+ \advance\pgfutil@tempdima\forest@temp\relax
+ \forestreset{#3}{\the\pgfutil@tempdima}%
+ },
+ #1-/.code={%
+ \forestmathsetlengthmacro\forest@temp{##1}%
+ \pgfutil@tempdima=\forestrve{#3}
+ \advance\pgfutil@tempdima-\forest@temp\relax
+ \forestreset{#3}{\the\pgfutil@tempdima}%
+ },
+ #1*/.style={%
+ #1={#4()*(##1)}%
+ },
+ #1:/.style={%
+ #1={#4()/(##1)}%
+ },
+ #1'/.code={%
+ \pgfutil@tempdima=##1\relax
+ \forestreset{#3}{\the\pgfutil@tempdima}%
+ },
+ #1'+/.code={%
+ \pgfutil@tempdima=\forestrve{#3}\relax
+ \advance\pgfutil@tempdima##1\relax
+ \forestreset{#3}{\the\pgfutil@tempdima}%
+ },
+ #1'-/.code={%
+ \pgfutil@tempdima=\forestrve{#3}\relax
+ \advance\pgfutil@tempdima-##1\relax
+ \forestreset{#3}{\the\pgfutil@tempdima}%
+ },
+ #1'*/.style={%
+ \pgfutil@tempdima=\forestrve{#3}\relax
+ \multiply\pgfutil@tempdima##1\relax
+ \forestreset{#3}{\the\pgfutil@tempdima}%
+ },
+ #1':/.style={%
+ \pgfutil@tempdima=\forestrve{#3}\relax
+ \divide\pgfutil@tempdima##1\relax
+ \forestreset{#3}{\the\pgfutil@tempdima}%
+ },
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyssetvalue{#1+/option@name}{#3}%
+ \pgfkeyssetvalue{#1-/option@name}{#3}%
+ \pgfkeyssetvalue{#1*/option@name}{#3}%
+ \pgfkeyssetvalue{#1:/option@name}{#3}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \pgfkeyssetvalue{#1'+/option@name}{#3}%
+ \pgfkeyssetvalue{#1'-/option@name}{#3}%
+ \pgfkeyssetvalue{#1'*/option@name}{#3}%
+ \pgfkeyssetvalue{#1':/option@name}{#3}%
+}
+\def\forest@declarereadonlycountregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \pgfkeysalso{
+ #2/if #3/.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value=##1\relax
+ \pgfkeysalso{##2}%
+ \else
+ \pgfkeysalso{##3}%
+ \fi
+ },
+ #2/if #3</.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value>##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ #2/if #3>/.code n args={3}{%
+ \forestrget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value<##1\relax
+ \pgfkeysalso{##3}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ }%
+ \pgfkeyslet{#1/@type}\forestmathtype@count % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@register@count{##1}{#3}}%
+}
+\def\forest@declarecountregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \forest@declarereadonlycountregister@handler{#1}{#2}{#3}{#4}%
+ \pgfkeysalso{
+ #1/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \forestrlet{#3}\forest@temp
+ },
+ #1+/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \advance\c@pgf@counta\forest@temp\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1-/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \advance\c@pgf@counta-\forest@temp\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1*/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \multiply\c@pgf@counta\forest@temp\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1:/.code={%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \divide\c@pgf@counta\forest@temp\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1'/.code={%
+ \c@pgf@counta=##1\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1'+/.code={%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \advance\c@pgf@counta##1\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1'-/.code={%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \advance\c@pgf@counta-##1\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1'*/.style={%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \multiply\c@pgf@counta##1\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ #1':/.style={%
+ \c@pgf@counta=\forestrve{#3}\relax
+ \divide\c@pgf@counta##1\relax
+ \forestreset{#3}{\the\c@pgf@counta}%
+ },
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyssetvalue{#1+/option@name}{#3}%
+ \pgfkeyssetvalue{#1-/option@name}{#3}%
+ \pgfkeyssetvalue{#1*/option@name}{#3}%
+ \pgfkeyssetvalue{#1:/option@name}{#3}%
+ \pgfkeyssetvalue{#1'/option@name}{#3}%
+ \pgfkeyssetvalue{#1'+/option@name}{#3}%
+ \pgfkeyssetvalue{#1'-/option@name}{#3}%
+ \pgfkeyssetvalue{#1'*/option@name}{#3}%
+ \pgfkeyssetvalue{#1':/option@name}{#3}%
+}
+\def\forest@declarebooleanregister@handler#1#2#3#4{% #1=key,#2=path,#3=name,#4=pgfmathname
+ \pgfkeysalso{%
+ #1/.code={%
+ \ifcsdef{forest@bh@\detokenize{##1}}{%
+ \letcs\forest@temp{forest@bh@\detokenize{##1}}%
+ }{%
+ \forestmathtruncatemacro\forest@temp{##1}%
+ \ifx\forest@temp0\else\def\forest@temp{1}\fi
+ }%
+ \forestrlet{#3}\forest@temp
+ },
+ #1/.default=1,
+ #2/not #3/.code={\forestrset{#3}{0}},
+ #2/if #3/.code 2 args={%
+ \forestrget{#3}\forest@temp@option@value
+ \ifnum\forest@temp@option@value=1
+ \pgfkeysalso{##1}%
+ \else
+ \pgfkeysalso{##2}%
+ \fi
+ },
+ }%
+ \pgfkeyssetvalue{#1/option@name}{#3}%
+ \pgfkeyslet{#1/@type}\forestmathtype@count % for .process & co
+ \pgfmathdeclarefunction{#4}{1}{\forest@pgfmathhelper@register@count{##1}{#3}}%
+}
+\forestset{
+ declare toks register/.code={%
+ \forest@declareregisterhandler\forest@declaretoksregister@handler{#1}%
+ \forestset{#1={}}%
+ },
+ declare autowrapped toks register/.code={%
+ \forest@declareregisterhandler\forest@declareautowrappedtoksregister@handler{#1}%
+ \forestset{#1={}}%
+ },
+ declare keylist register/.code={%
+ \forest@declareregisterhandler\forest@declarekeylistregister@handler{#1}%
+ \forestset{#1'={}}%
+ },
+ declare dimen register/.code={%
+ \forest@declareregisterhandler\forest@declaredimenregister@handler{#1}%
+ \forestset{#1'=0pt}%
+ },
+ declare count register/.code={%
+ \forest@declareregisterhandler\forest@declarecountregister@handler{#1}%
+ \forestset{#1'=0}%
+ },
+ declare boolean register/.code={%
+ \forest@declareregisterhandler\forest@declarebooleanregister@handler{#1}%
+ \forestset{#1=0}%
+ },
+}
+% \end{macrocode}
+% Declare some temporary registers.
+% \begin{macrocode}
+\forestset{
+ declare toks register=temptoksa,temptoksa={},
+ declare toks register=temptoksb,temptoksb={},
+ declare toks register=temptoksc,temptoksc={},
+ declare toks register=temptoksd,temptoksd={},
+ declare keylist register=tempkeylista,tempkeylista'={},
+ declare keylist register=tempkeylistb,tempkeylistb'={},
+ declare keylist register=tempkeylistc,tempkeylistc'={},
+ declare keylist register=tempkeylistd,tempkeylistd'={},
+ declare dimen register=tempdima,tempdima'={0pt},
+ declare dimen register=tempdimb,tempdimb'={0pt},
+ declare dimen register=tempdimc,tempdimc'={0pt},
+ declare dimen register=tempdimd,tempdimd'={0pt},
+ declare dimen register=tempdimx,tempdimx'={0pt},
+ declare dimen register=tempdimxa,tempdimxa'={0pt},
+ declare dimen register=tempdimxb,tempdimxb'={0pt},
+ declare dimen register=tempdimy,tempdimy'={0pt},
+ declare dimen register=tempdimya,tempdimya'={0pt},
+ declare dimen register=tempdimyb,tempdimyb'={0pt},
+ declare dimen register=tempdiml,tempdiml'={0pt},
+ declare dimen register=tempdimla,tempdimla'={0pt},
+ declare dimen register=tempdimlb,tempdimlb'={0pt},
+ declare dimen register=tempdims,tempdims'={0pt},
+ declare dimen register=tempdimsa,tempdimsa'={0pt},
+ declare dimen register=tempdimsb,tempdimsb'={0pt},
+ declare count register=tempcounta,tempcounta'={0},
+ declare count register=tempcountb,tempcountb'={0},
+ declare count register=tempcountc,tempcountc'={0},
+ declare count register=tempcountd,tempcountd'={0},
+ declare boolean register=tempboola,tempboola={0},
+ declare boolean register=tempboolb,tempboolb={0},
+ declare boolean register=tempboolc,tempboolc={0},
+ declare boolean register=tempboold,tempboold={0},
+}
+% \end{macrocode}
+% \subsubsection{Declaring options}
+%
+% \begin{macrocode}
+\def\forest@node@Nametoid#1{% #1 = name
+ \csname forest@id@of@#1\endcsname
+}
+\def\forest@node@Ifnamedefined#1#2#3{% #1 = name, #2=true,#3=false
+ \ifcsvoid{forest@id@of@#1}{#3}{#2}%
+}
+\def\forest@node@setname#1{%
+ \def\forest@temp@setname{y}%
+ \def\forest@temp@silent{n}%
+ \def\forest@temp@propagating{n}%
+ \forest@node@setnameoralias{#1}%
+}
+\def\forest@node@setname@silent#1{%
+ \def\forest@temp@setname{y}%
+ \def\forest@temp@silent{y}%
+ \def\forest@temp@propagating{n}%
+ \forest@node@setnameoralias{#1}%
+}
+\def\forest@node@setalias#1{%
+ \def\forest@temp@setname{n}%
+ \def\forest@temp@silent{n}%
+ \def\forest@temp@propagating{n}%
+ \forest@node@setnameoralias{#1}%
+}
+\def\forest@node@setalias@silent#1{%
+ \def\forest@temp@setname{n}%
+ \def\forest@temp@silent{y}%
+ \def\forest@temp@propagating{n}%
+ \forest@node@setnameoralias{#1}%
+}
+\def\forest@node@setnameoralias#1{%
+ \ifstrempty{#1}{%
+ \forest@node@setnameoralias{node@\forest@cn}%
+ }{%
+ \forest@node@Ifnamedefined{#1}{%
+ \if y\forest@temp@propagating
+ % this will find a unique name, eventually:
+ \@escapeif{\forest@node@setnameoralias{#1@\forest@cn}}%
+ \else\@escapeif{%
+ \if y\forest@temp@setname
+ \edef\forest@marshal{%
+ \ifstrequal{\forestove{name}}{#1}%
+ }\forest@marshal{%
+ % same name, no problem
+ }{%
+ \@escapeif{\forest@node@setnameoralias@nameclash{#1}}%
+ }%
+ \else\@escapeif{% setting an alias: clashing with alias is not a problem
+ \forestOget{\forest@node@Nametoid{#1}}{name}\forest@temp
+ \expandafter\ifstrequal\expandafter{\forest@temp}{#1}{%
+ \forest@node@setnameoralias@nameclash{#1}%
+ }{%
+ \forest@node@setnameoralias@do{#1}%
+ }%
+ }\fi
+ }\fi
+ }{%
+ \forest@node@setnameoralias@do{#1}%
+ }%
+ }%
+}
+\def\forest@node@setnameoralias@nameclash#1{%
+ \if y\forest@temp@silent
+ \forest@fornode{\forest@node@Nametoid{#1}}{%
+ \def\forest@temp@propagating{y}%
+ \forest@node@setnameoralias{}%
+ }%
+ \forest@node@setnameoralias@do{#1}%
+ \else
+ \PackageError{forest}{Node name "#1" is already used}{}%
+ \fi
+}
+\def\forest@node@setnameoralias@do#1{%
+ \if y\forest@temp@setname
+ \csdef{forest@id@of@\forestove{name}}{}%
+ \forestoeset{name}{#1}%
+ \fi
+ \csedef{forest@id@of@#1}{\forest@cn}%
+}
+\forestset{
+ TeX/.code={#1},
+ TeX'/.code={\appto\forest@externalize@loadimages{#1}#1},
+ TeX''/.code={\appto\forest@externalize@loadimages{#1}},
+ options/.code={\forestset{#1}},
+ also/.code={\pgfkeysalso{#1}},
+ typeout/.style={TeX={\typeout{#1}}},
+ declare toks={name}{},
+ name/.code={% override the default setter
+ \forest@fornode{\forest@setter@node}{\forest@node@setname{#1}}%
+ },
+ name/.default={},
+ name'/.code={% override the default setter
+ \forest@fornode{\forest@setter@node}{\forest@node@setname@silent{#1}}%
+ },
+ name'/.default={},
+ alias/.code={\forest@fornode{\forest@setter@node}{\forest@node@setalias{#1}}},
+ alias'/.code={\forest@fornode{\forest@setter@node}{\forest@node@setalias@silent{#1}}},
+ begin draw/.code={\begin{tikzpicture}},
+ end draw/.code={\end{tikzpicture}},
+ declare keylist register=default preamble,
+ default preamble'={},
+ declare keylist register=preamble,
+ preamble'={},
+ declare autowrapped toks={content}{},
+ % #1 = which option to split, #2 = separator (one char!), #3 = receiving options
+ split option/.code n args=3{%
+ \forestRNOget{#1}\forest@temp
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{split={\expandonce{\forest@temp}}\unexpanded{{#2}{#3}}}%
+ }\forest@marshal
+ },
+ split register/.code n args=3{% #1 = which register to split, #2 = separator (one char!), #3 = receiving options
+ \forestrget{#1}\forest@temp
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{split={\expandonce{\forest@temp}}\unexpanded{{#2}{#3}}}%
+ }\forest@marshal
+ },
+ TeX={%
+ \def\forest@split@sourcevalues{}%
+ \def\forest@split@sourcevalue{}%
+ \def\forest@split@receivingoptions{}%
+ \def\forest@split@receivingoption{}%
+ },
+ split/.code n args=3{% #1 = string to split, #2 = separator (one char!), #3 = receiving options
+ \forest@saveandrestoremacro\forest@split@sourcevalues{%
+ \forest@saveandrestoremacro\forest@split@sourcevalue{%
+ \forest@saveandrestoremacro\forest@split@receivingoptions{%
+ \forest@saveandrestoremacro\forest@split@receivingoption{%
+ \def\forest@split@sourcevalues{#1#2}%
+ \edef\forest@split@receivingoptions{#3,}%
+ \def\forest@split@receivingoption{}%
+ \safeloop
+ \expandafter\forest@split\expandafter{\forest@split@sourcevalues}{#2}\forest@split@sourcevalue\forest@split@sourcevalues
+ \ifdefempty\forest@split@receivingoptions{}{%
+ \expandafter\forest@split\expandafter{\forest@split@receivingoptions}{,}\forest@temp\forest@split@receivingoptions
+ \ifdefempty\forest@temp{}{\let\forest@split@receivingoption\forest@temp\def\forest@temp{}}%
+ }%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\forest@split@receivingoption={\expandonce{\forest@split@sourcevalue}}}%
+ }\forest@marshal
+ \ifdefempty\forest@split@sourcevalues{\forest@tempfalse}{\forest@temptrue}%
+ \ifforest@temp
+ \saferepeat
+ }}}}%
+ },
+ declare count={grow}{270},
+ TeX={% a hack for grow-reversed connection, and compass-based grow specification
+ \forest@copycommandkey{/forest/grow}{/forest/grow@@}%
+ %\pgfkeysgetvalue{/forest/grow/.@cmd}\forest@temp
+ %\pgfkeyslet{/forest/grow@@/.@cmd}\forest@temp
+ },
+ grow/.style={grow@={#1},reversed=0},
+ grow'/.style={grow@={#1},reversed=1},
+ grow''/.style={grow@={#1}},
+ grow@/.is choice,
+ grow@/east/.style={/forest/grow@@=0},
+ grow@/north east/.style={/forest/grow@@=45},
+ grow@/north/.style={/forest/grow@@=90},
+ grow@/north west/.style={/forest/grow@@=135},
+ grow@/west/.style={/forest/grow@@=180},
+ grow@/south west/.style={/forest/grow@@=225},
+ grow@/south/.style={/forest/grow@@=270},
+ grow@/south east/.style={/forest/grow@@=315},
+ grow@/.unknown/.code={\let\forest@temp@grow\pgfkeyscurrentname
+ \pgfkeysalso{/forest/grow@@/.expand once=\forest@temp@grow}},
+ declare boolean={reversed}{0},
+ declare toks={parent anchor}{},
+ declare toks={child anchor}{},
+ declare toks={anchor}{base},
+ Autoforward={anchor}{
+ node options-=anchor,
+ node options+={anchor={##1}}
+ },
+ anchor'/.style={anchor@no@compass=true,anchor=#1},
+ anchor+'/.style={anchor@no@compass=true,anchor+=#1},
+ anchor-'/.style={anchor@no@compass=true,anchor-=#1},
+ anchor*'/.style={anchor@no@compass=true,anchor*=#1},
+ anchor:'/.style={anchor@no@compass=true,anchor:=#1},
+ anchor'+'/.style={anchor@no@compass=true,anchor'+=#1},
+ anchor'-'/.style={anchor@no@compass=true,anchor'-=#1},
+ anchor'*'/.style={anchor@no@compass=true,anchor'*=#1},
+ anchor':'/.style={anchor@no@compass=true,anchor':=#1},
+ % /tikz/forest anchor/.style={
+ % /forest/TeX={\forestanchortotikzanchor{#1}\forest@temp@anchor},
+ % anchor/.expand once=\forest@temp@anchor
+ % },
+ declare toks={calign}{midpoint},
+ TeX={%
+ \forest@copycommandkey{/forest/calign}{/forest/calign'}%
+ },
+ calign/.is choice,
+ calign/child/.style={calign'=child},
+ calign/first/.style={calign'=child,calign primary child=1},
+ calign/last/.style={calign'=child,calign primary child=-1},
+ calign with current/.style={for parent/.wrap pgfmath arg={calign=child,calign primary child=##1}{n}},
+ calign with current edge/.style={for parent/.wrap pgfmath arg={calign=child edge,calign primary child=##1}{n}},
+ calign/child edge/.style={calign'=child edge},
+ calign/midpoint/.style={calign'=midpoint},
+ calign/center/.style={calign'=midpoint,calign primary child=1,calign secondary child=-1},
+ calign/edge midpoint/.style={calign'=edge midpoint},
+ calign/fixed angles/.style={calign'=fixed angles},
+ calign/fixed edge angles/.style={calign'=fixed edge angles},
+ calign/.unknown/.code={\PackageError{forest}{unknown calign '\pgfkeyscurrentname'}{}},
+ declare count={calign primary child}{1},
+ declare count={calign secondary child}{-1},
+ declare count={calign primary angle}{-35},
+ declare count={calign secondary angle}{35},
+ calign child/.style={calign primary child={#1}},
+ calign angle/.style={calign primary angle={-#1},calign secondary angle={#1}},
+ declare toks={tier}{},
+ declare toks={fit}{tight},
+ declare boolean={ignore}{0},
+ declare boolean={ignore edge}{0},
+ no edge/.style={edge'={},ignore edge},
+ declare keylist={edge}{draw},
+ declare toks={edge path}{%
+ \noexpand\path[\forestoption{edge}]%
+ (\forestOve{\forestove{@parent}}{name}.parent anchor)--(\forestove{name}.child anchor)
+ % =
+ % (!u.parent anchor)--(.child anchor)\forestoption{edge label};
+ \forestoption{edge label};%
+ },
+ edge path'/.style={
+ edge path={%
+ \noexpand\path[\forestoption{edge}]%
+ #1%
+ \forestoption{edge label};
+ }
+ },
+ declare toks={edge label}{},
+ declare boolean={phantom}{0},
+ baseline/.style={alias={forest@baseline@node}},
+ declare readonly count={id}{0},
+ declare readonly count={n}{0},
+ declare readonly count={n'}{0},
+ declare readonly count={n children}{-1},
+ declare readonly count={level}{-1},
+ declare dimen=x{0pt},
+ declare dimen=y{0pt},
+ declare dimen={s}{0pt},
+ declare dimen={l}{6ex}, % just in case: should be set by the calibration
+ declare dimen={s sep}{0.6666em},
+ declare dimen={l sep}{1ex}, % just in case: calibration!
+ declare keylist={node options}{anchor=base},
+ declare toks={tikz}{},
+ afterthought/.style={tikz+={#1}},
+ label/.style={tikz+={\path[late options={%
+ name=\forestoption{name},label={#1}}];}},
+ pin/.style={tikz+={\path[late options={%
+ name=\forestoption{name},pin={#1}}];}},
+ declare toks={content format}{\forestoption{content}},
+ plain content/.style={content format={\forestoption{content}}},
+ math content/.style={content format={\noexpand\ensuremath{\forestoption{content}}}},
+ declare toks={node format}{%
+ \noexpand\node
+ (\forestoption{name})%
+ [\forestoption{node options}]%
+ {\foresteoption{content format}};%
+ },
+ node format'/.style={
+ node format={\noexpand\node(\forestoption{name})#1;}
+ },
+ tabular@environment/.style={content format={%
+ \noexpand\begin{tabular}[\forestoption{base}]{\forestoption{align}}%
+ \forestoption{content}%
+ \noexpand\end{tabular}%
+ }},
+ declare toks={align}{},
+ TeX={%
+ \forest@copycommandkey{/forest/align}{/forest/align'}%
+ %\pgfkeysgetvalue{/forest/align/.@cmd}\forest@temp
+ %\pgfkeyslet{/forest/align'/.@cmd}\forest@temp
+ },
+ align/.is choice,
+ align/.unknown/.code={%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{%
+ align'={\pgfkeyscurrentname},%
+ tabular@environment
+ }%
+ }\forest@marshal
+ },
+ align/center/.style={align'={@{}c@{}},tabular@environment},
+ align/left/.style={align'={@{}l@{}},tabular@environment},
+ align/right/.style={align'={@{}r@{}},tabular@environment},
+ declare toks={base}{t},
+ TeX={%
+ \forest@copycommandkey{/forest/base}{/forest/base'}%
+ %\pgfkeysgetvalue{/forest/base/.@cmd}\forest@temp
+ %\pgfkeyslet{/forest/base'/.@cmd}\forest@temp
+ },
+ base/.is choice,
+ base/top/.style={base'=t},
+ base/bottom/.style={base'=b},
+ base/.unknown/.style={base'/.expand once=\pgfkeyscurrentname},
+ unknown to/.store in=\forest@unknownto,
+ unknown to=node options,
+ unknown key error/.code={\PackageError{forest}{Unknown keyval: \detokenize{#1}}{}},
+ content to/.store in=\forest@contentto,
+ content to=content,
+ .unknown/.code={%
+ \expandafter\pgfutil@in@\expandafter.\expandafter{\pgfkeyscurrentname}%
+ \ifpgfutil@in@
+ \expandafter\forest@relatednode@option@setter\pgfkeyscurrentname=#1\forest@END
+ \else
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\forest@unknownto={\pgfkeyscurrentname=\unexpanded{#1}}}%
+ }\forest@marshal
+ \fi
+ },
+ get node boundary/.code={%
+ \forestoget{@boundary}\forest@node@boundary
+ \def#1{}%
+ \forest@extendpath#1\forest@node@boundary{\pgfqpoint{\forestove{x}}{\forestove{y}}}%
+ },
+ % get min l tree boundary/.code={%
+ % \forest@get@tree@boundary{negative}{\the\numexpr\forestove{grow}-90\relax}#1},
+ % get max l tree boundary/.code={%
+ % \forest@get@tree@boundary{positive}{\the\numexpr\forestove{grow}-90\relax}#1},
+ get min s tree boundary/.code={%
+ \forest@get@tree@boundary{negative}{\forestove{grow}}#1},
+ get max s tree boundary/.code={%
+ \forest@get@tree@boundary{positive}{\forestove{grow}}#1},
+ use as bounding box/.style={%
+ before drawing tree={
+ tikz+/.expanded={%
+ \noexpand\pgfresetboundingbox
+ \noexpand\useasboundingbox
+ ($(.anchor)+(\forestoption{min x},\forestoption{min y})$)
+ rectangle
+ ($(.anchor)+(\forestoption{max x},\forestoption{max y})$)
+ ;
+ }
+ }
+ },
+ use as bounding box'/.style={%
+ before drawing tree={
+ tikz+/.expanded={%
+ \noexpand\pgfresetboundingbox
+ \noexpand\useasboundingbox
+ ($(.anchor)+(\forestoption{min x}+\pgfkeysvalueof{/pgf/outer xsep}/2+\pgfkeysvalueof{/pgf/inner xsep},\forestoption{min y}+\pgfkeysvalueof{/pgf/outer ysep}/2+\pgfkeysvalueof{/pgf/inner ysep})$)
+ rectangle
+ ($(.anchor)+(\forestoption{max x}-\pgfkeysvalueof{/pgf/outer xsep}/2-\pgfkeysvalueof{/pgf/inner xsep},\forestoption{max y}-\pgfkeysvalueof{/pgf/outer ysep}/2-\pgfkeysvalueof{/pgf/inner ysep})$)
+ ;
+ }
+ }
+ },
+}%
+\def\forest@iftikzkey#1#2#3{% #1 = key name, #2 = true code, #3 = false code
+ \forest@temptrue
+ \pgfkeysifdefined{/tikz/\pgfkeyscurrentname}{}{%
+ \pgfkeysifdefined{/tikz/\pgfkeyscurrentname/.@cmd}{}{%
+ \pgfkeysifdefined{/pgf/\pgfkeyscurrentname}{}{%
+ \pgfkeysifdefined{/pgf/\pgfkeyscurrentname/.@cmd}{}{%
+ \forest@tempfalse
+ }}}}%
+ \ifforest@temp\@escapeif{#2}\else\@escapeif{#3}\fi
+}
+\def\forest@ifoptionortikzkey#1#2#3{% #1 = key name, #2 = true code, #3 = false code
+ \forest@temptrue
+ \pgfkeysifdefined{/forest/\pgfkeyscurrentname}{}{%
+ \pgfkeysifdefined{/forest/\pgfkeyscurrentname/.@cmd}{}{%
+ \forest@iftikzkey{#1}{}{}%
+ }}%
+ \ifforest@temp\@escapeif{#2}\else\@escapeif{#3}\fi
+}
+\def\forest@get@tree@boundary#1#2#3{%#1=pos/neg,#2=grow,#3=receiving cs
+ \def#3{}%
+ \forest@node@getedge{#1}{#2}\forest@temp@boundary
+ \forest@extendpath#3\forest@temp@boundary{\pgfqpoint{\forestove{x}}{\forestove{y}}}%
+}
+\def\forest@setter@node{\forest@cn}%
+\def\forest@relatednode@option@compat@ignoreinvalidsteps#1{#1}
+\def\forest@relatednode@option@setter#1.#2=#3\forest@END{%
+ \forest@forthis{%
+ \forest@relatednode@option@compat@ignoreinvalidsteps{%
+ \forest@nameandgo{#1}%
+ \let\forest@setter@node\forest@cn
+ }%
+ }%
+ \ifnum\forest@setter@node=0
+ \else
+ \forestset{#2={#3}}%
+ \fi
+ \def\forest@setter@node{\forest@cn}%
+}%
+\def\forest@split#1#2#3#4{% #1=list (assuming that the list is nonempty and finishes with the separator), #2 = sep, #3 = cs receiving first, #4 = cs receiving last
+ \def\forest@split@@##1#2##2\forest@split@@##3##4{\def##3{##1}\def##4{##2}}%
+ \forest@split@@#1\forest@split@@{#3}{#4}}
+% \end{macrocode}
+%
+% \subsubsection{Option propagation}
+%
+% The propagators targeting single nodes are automatically defined by nodewalk steps definitions.
+%
+% \begin{macrocode}
+\forestset{
+ for tree'/.style 2 args={#1,for children={for tree'={#1}{#2}},#2},
+ if/.code n args={3}{%
+ \forestmathtruncatemacro\forest@temp{#1}%
+ \ifnum\forest@temp=0
+ \@escapeif{\pgfkeysalso{#3}}%
+ \else
+ \@escapeif{\pgfkeysalso{#2}}%
+ \fi
+ },
+ %LaTeX if/.code n args={3}{#1{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}},
+ if nodewalk valid/.code n args={3}{%
+ \forest@forthis{%
+ \forest@configured@nodewalk{independent}{inherited}{fake}{%
+ #1,
+ TeX={\global\let\forest@global@temp\forest@cn}
+ }{}%
+ }%
+ \ifnum\forest@global@temp=0
+ \@escapeif{\pgfkeysalso{#3}}%
+ \else
+ \@escapeif{\pgfkeysalso{#2}}%
+ \fi
+ },
+ if nodewalk empty/.code n args={3}{%
+ \forest@forthis{%
+ \forest@configured@nodewalk{independent}{independent}{fake}{%
+ #1,
+ TeX={\global\let\forest@global@temp\forest@nodewalk@n},
+ }{}%
+ }%
+ \ifnum\forest@global@temp=0
+ \@escapeif{\pgfkeysalso{#2}}%
+ \else
+ \@escapeif{\pgfkeysalso{#3}}%
+ \fi
+ },
+ if current nodewalk empty/.code 2 args={%
+ \ifnum\forest@nodewalk@n=0
+ \@escapeif{\pgfkeysalso{#1}}%
+ \else
+ \@escapeif{\pgfkeysalso{#2}}%
+ \fi
+ },
+ where/.style n args={3}{for tree={if={#1}{#2}{#3}}},
+ where nodewalk valid/.style n args={3}{for tree={if nodewalk valid={#1}{#2}{#3}}},
+ where nodewalk empty/.style n args={3}{for tree={if nodewalk empty={#1}{#2}{#3}}},
+ repeat/.code 2 args={%
+ \forestmathtruncatemacro\forest@temp{#1}%
+ \expandafter\forest@repeatkey\expandafter{\forest@temp}{#2}%
+ },
+ until/.code 2 args={%
+ \ifstrempty{#1}{%
+ \forest@untilkey{\ifnum\forest@cn=0\else\relax\forestloopbreak\fi}{on invalid={fake}{#2}}%
+ }{%
+ \forest@untilkey{\forestmath@if{#1}{\forestloopbreak}{}}{#2}%
+ }%
+ },
+ while/.code 2 args={%
+ \ifstrempty{#1}{%
+ \forest@untilkey{\ifnum\forest@cn=0\relax\forestloopbreak\fi}{on invalid={fake}{#2}}%
+ }{%
+ \forest@untilkey{\forestmath@if{#1}{}{\forestloopbreak}}{#2}%
+ }%
+ },
+ do until/.code 2 args={%
+ \ifstrempty{#1}{%
+ \forest@dountilkey{\ifnum\forest@cn=0\else\relax\forestloopbreak\fi}{on invalid={fake}{#2}}%
+ }{%
+ \forest@dountilkey{\forestmath@if{#1}{\forestloopbreak}{}}{#2}%
+ }%
+ },
+ do while/.code 2 args={%
+ \ifstrempty{#1}{%
+ \forest@dountilkey{\ifnum\forest@cn=0\relax\forestloopbreak\fi}{on invalid={fake}{#2}}%
+ }{%
+ \forest@dountilkey{\forestmath@if{#1}{}{\forestloopbreak}}{#2}%
+ }%
+ },
+ until nodewalk valid/.code 2 args={%
+ \forest@untilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@cn=0\relax\else\forestloopbreak\fi}}{}}}{#2}%
+ },
+ while nodewalk valid/.code 2 args={%
+ \forest@untilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@cn=0\relax\forestloopbreak\fi}}{}}}{#2}%
+ },
+ do until nodewalk valid/.code 2 args={%
+ \forest@dountilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@cn=0\relax\else\forestloopbreak\fi}}{}}}{#2}%
+ },
+ do while nodewalk valid/.code 2 args={%
+ \forest@dountilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@cn=0\relax\forestloopbreak\fi}}{}}}{#2}%
+ },
+ until nodewalk empty/.code 2 args={%
+ \forest@untilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@nodewalk@n=0\relax\forestloopbreak\fi}}{}}}{#2}%
+ },
+ while nodewalk empty/.code 2 args={%
+ \forest@untilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@nodewalk@n=0\relax\else\forestloopbreak\fi}}{}}}{#2}%
+ },
+ do until nodewalk empty/.code 2 args={%
+ \forest@dountilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@nodewalk@n=0\relax\forestloopbreak\fi}}{}}}{#2}%
+ },
+ do while nodewalk empty/.code 2 args={%
+ \forest@dountilkey{\forest@forthis{%
+ \forest@nodewalk{on invalid={fake}{#1},TeX={\ifnum\forest@nodewalk@n=0\relax\else\forestloopbreak\fi}}{}}}{#2}%
+ },
+ break/.code={\forestloopBreak{#1}},
+ break/.default=0,
+}
+\def\forest@repeatkey#1#2{%
+ \safeRKloop
+ \ifnum\safeRKloopn>#1\relax
+ \csuse{safeRKbreak@\the\safeRKloop@depth true}%
+ \fi
+ \expandafter\unless\csname ifsafeRKbreak@\the\safeRKloop@depth\endcsname
+ \pgfkeysalso{#2}%
+ \safeRKrepeat
+}
+\def\forest@untilkey#1#2{% #1 = condition, #2 = keys
+ \safeRKloop
+ #1%
+ \expandafter\unless\csname ifsafeRKbreak@\the\safeRKloop@depth\endcsname
+ \pgfkeysalso{#2}%
+ \safeRKrepeat
+}
+\def\forest@dountilkey#1#2{% #1 = condition, #2 = keys
+ \safeRKloop
+ \pgfkeysalso{#2}%
+ #1%
+ \expandafter\unless\csname ifsafeRKbreak@\the\safeRKloop@depth\endcsname
+ \safeRKrepeat
+}
+\def\forestloopbreak{%
+ \csname safeRKbreak@\the\safeRKloop@depth true\endcsname
+}
+\def\forestloopBreak#1{%
+ \csname safeRKbreak@\number\numexpr\the\safeRKloop@depth-#1\relax true\endcsname
+}
+\def\forestloopcount{%
+ \csname safeRKloopn@\number\numexpr\the\safeRKloop@depth\endcsname
+}
+\def\forestloopCount#1{%
+ \csname safeRKloopn@\number\numexpr\the\safeRKloop@depth-#1\endcsname
+}
+\pgfmathdeclarefunction{forestloopcount}{1}{%
+ \edef\pgfmathresult{\forestloopCount{\ifstrempty{#1}{0}{#1}}}%
+}
+\forest@copycommandkey{/forest/repeat}{/forest/nodewalk/repeat}
+\forest@copycommandkey{/forest/while}{/forest/nodewalk/while}
+\forest@copycommandkey{/forest/do while}{/forest/nodewalk/do while}
+\forest@copycommandkey{/forest/until}{/forest/nodewalk/until}
+\forest@copycommandkey{/forest/do until}{/forest/nodewalk/do until}
+\forest@copycommandkey{/forest/if}{/forest/nodewalk/if}
+\forest@copycommandkey{/forest/if nodewalk valid}{/forest/nodewalk/if nodewalk valid}
+%
+% \end{macrocode}
+%
+% \subsection{Aggregate functions}
+%
+% \begin{macrocode}
+\forestset{
+ aggregate postparse/.is choice,
+ aggregate postparse/int/.code={%
+ \let\forest@aggregate@pgfmathpostparse\forest@aggregate@pgfmathpostparse@toint},
+ aggregate postparse/none/.code={%
+ \let\forest@aggregate@pgfmathpostparse\relax},
+ aggregate postparse/print/.code={%
+ \let\forest@aggregate@pgfmathpostparse\forest@aggregate@pgfmathpostparse@print},
+ aggregate postparse/macro/.code={%
+ \let\forest@aggregate@pgfmathpostparse\forest@aggregate@pgfmathpostparse@usemacro},
+ aggregate postparse macro/.store in=\forest@aggregate@pgfmathpostparse@macro,
+}
+\def\forest@aggregate@pgfmathpostparse@print{%
+ \pgfmathprintnumberto{\pgfmathresult}{\pgfmathresult}%
+}
+\def\forest@aggregate@pgfmathpostparse@toint{%
+ \expandafter\forest@split\expandafter{\pgfmathresult.}{.}\pgfmathresult\forest@temp
+}
+\def\forest@aggregate@pgfmathpostparse@usemacro{%
+ \forest@aggregate@pgfmathpostparse@macro
+}
+\let\forest@aggregate@pgfmathpostparse\relax
+\forestset{
+ /handlers/.aggregate/.code n args=4{%
+ % #1 = start value (forestmath)
+ % #2 = forestmath expression that calculates "aggregate result" at each step
+ % #3 = forestmath expression that calculates "aggregate result" at the end of the nodewalk
+ % #4 = nodewalk
+ \forest@aggregate@handler{\forest@aggregate@generic{#1}{#2}{#3}{#4}}%
+ },
+ /handlers/.sum/.code 2 args={% #1=forestmath, #2=nodewalk
+ \forest@aggregate@handler{\forest@aggregate@sum{#1}{#2}}%
+ },
+ /handlers/.count/.code={% #1=nodewalk
+ \forest@aggregate@handler{\forest@aggregate@count{#1}}%
+ },
+ /handlers/.average/.code 2 args={% #1=forestmath, #2=nodewalk
+ \forest@aggregate@handler{\forest@aggregate@average{#1}{#2}}%
+ },
+ /handlers/.product/.code 2 args={% #1=forestmath, #2=nodewalk
+ \forest@aggregate@handler{\forest@aggregate@product{#1}{#2}}%
+ },
+ /handlers/.min/.code 2 args={% #1=forestmath, #2=nodewalk
+ \forest@aggregate@handler{\forest@aggregate@min{#1}{#2}}%
+ },
+ /handlers/.max/.code 2 args={% #1=forestmath, #2=nodewalk
+ \forest@aggregate@handler{\forest@aggregate@max{#1}{#2}}%
+ },
+ declare count register={aggregate n},
+ declare toks register={aggregate value},
+ declare toks register={aggregate result},
+ aggregate result={},
+}
+\def\forest@aggregate@handler#1{%
+ \edef\forest@marshal{%
+ \unexpanded{%
+ #1%
+ }{%
+ \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.register=aggregate result}%
+ }%
+ }\forest@marshal
+}
+\def\forest@aggregate@pgfmathfunction@finish{%
+ \forestrget{aggregate result}\pgfmathresult
+}
+\pgfmathdeclarefunction{aggregate}{4}{%
+ \forest@aggregate@generic{#1}{#2}{#3}{#4}%
+ \forest@aggregate@pgfmathfunction@finish
+}
+\pgfmathdeclarefunction{aggregate_count}{1}{%
+ \forest@aggregate@sum{#1}%
+ \forest@aggregate@pgfmathfunction@finish
+}
+\pgfmathdeclarefunction{aggregate_sum}{2}{%
+ \forest@aggregate@sum{#1}{#2}%
+ \forest@aggregate@pgfmathfunction@finish
+}
+\pgfmathdeclarefunction{aggregate_product}{2}{%
+ \forest@aggregate@product{#1}{#2}%
+ \forest@aggregate@pgfmathfunction@finish
+}
+\pgfmathdeclarefunction{aggregate_average}{2}{%
+ \forest@aggregate@average{#1}{#2}%
+ \forest@aggregate@pgfmathfunction@finish
+}
+\pgfmathdeclarefunction{aggregate_min}{2}{%
+ \forest@aggregate@min{#1}{#2}%
+ \forest@aggregate@pgfmathfunction@finish
+}
+\pgfmathdeclarefunction{aggregate_max}{2}{%
+ \forest@aggregate@max{#1}{#2}%
+ \forest@aggregate@pgfmathfunction@finish
+}
+% \end{macrocode}
+% Define particular aggregate functions.
+% \begin{macrocode}
+\def\forest@aggregate#1#2#3#4#5#6{% #1...#5=real args,
+ % #6=what to do with |aggregate result| register
+ % #1 = start value (forestmath)
+ % #2 = forestmath expression that calculates "aggregate current" at each step
+ % #3 = forestmath expression that calculates "aggregate result" at each step
+ % #4 = forestmath expression that calculates "aggregate result" at the end of the nodewalk
+ % #5 = nodewalk
+ \forest@saveandrestoreregister{aggregate result}{%
+ \forest@saveandrestoreregister{aggregate n}{%
+ \forest@aggregate@{#1}{#2}{#3}{#4}{#5}%
+ #6%
+ }%
+ }%
+}
+\def\forest@aggregate@generic#1#2#3#4{\forest@aggregate
+ {\forestmathparse{#1}}%
+ {}%
+ {\forestmathparse{#2}}%
+ {\forestmathparse{#3}}%
+ {#4}%
+}
+\def\forest@aggregate@sum#1#2{\forest@aggregate
+ {\forestmath@convert@fromto\forestmathtype@count\forestmathtype@generic{0}}%
+ {\forestmathparse{#1}}%
+ {\forestmathadd{\forestregister{aggregate value}}{\forestregister{aggregate result}}}%
+ {\forestrget{aggregate result}\forestmathresult}%
+ {#2}%
+}
+\def\forest@aggregate@count#1{\forest@aggregate
+ {\def\forestmathresult{0}\let\forestmathresulttype\forestmathtype@count}%
+ {\def\forestmathresult{1}\let\forestmathresulttype\forestmathtype@count}%
+ {\edef\forestmathresult{\the\numexpr\forestregister{aggregate result}+1}\let\forestmathresulttype\forestmathtype@count}%
+ {\forestrget{aggregate result}\forestmathresult\let\forestmathresulttype\forestmathtype@count}%
+ {#1}%
+}
+\def\forest@aggregate@average#1#2{\forest@aggregate
+ {\forestmath@convert@fromto\forestmathtype@count\forestmathtype@generic{0}}%
+ {\forestmathparse{#1}}%
+ {\forestmathadd{\forestregister{aggregate value}}{\forestregister{aggregate result}}}%
+ {\forestmathdivide@P{\forestregister{aggregate result}}{\forestregister{aggregate n}}}%
+ {#2}%
+}
+\def\forest@aggregate@product#1#2{\forest@aggregate
+ {\forestmath@convert@fromto\forestmathtype@count\forestmathtype@generic{1}}%
+ {\forestmathparse{#1}}%
+ {\forestmathmultiply{\forestregister{aggregate value}}{\forestregister{aggregate result}}}%
+ {\forestrget{aggregate result}\forestmathresult}%
+ {#2}%
+}
+\def\forest@aggregate@min#1#2{\forest@aggregate
+ {\def\forestmathresult{}}%
+ {\forestmathparse{#1}}%
+ {\forestmathmin{\forestregister{aggregate value}}{\forestregister{aggregate result}}}%
+ {\forestrget{aggregate result}\forestmathresult}%
+ {#2}%
+}
+\def\forest@aggregate@max#1#2{\forest@aggregate
+ {\def\forestmathresult{}}%
+ {\forestmathparse{#1}}%
+ {\forestmathmax{\forestregister{aggregate value}}{\forestregister{aggregate result}}}%
+ {\forestrget{aggregate result}\forestmathresult}%
+ {#2}%
+}
+% \end{macrocode}
+% Actual computation.
+% \begin{macrocode}
+\def\forest@aggregate@#1#2#3#4#5{%
+ % #1 = start value (forestmath)
+ % #2 = forestmath expression that calculates "aggregate current" at each step
+ % #3 = forestmath expression that calculates "aggregate result" at each step
+ % #4 = forestmath expression that calculates "aggregate result" at the end of the nodewalk
+ % #5 = nodewalk
+ #1%
+ \forestrlet{aggregate result}\forestmathresult
+ \forestrset{aggregate value}{}%
+ \forestrset{aggregate n}{0}%
+ \forest@forthis{%
+ \forest@nodewalk{#5}{%
+ TeX={%
+ \forestreset{aggregate n}{\number\numexpr\forestrv{aggregate n}+1}%
+ #2%
+ \forestrlet{aggregate value}\forestmathresult
+ #3%
+ \forestrlet{aggregate result}\forestmathresult
+ }%
+ }{}%
+ }%
+ #4%
+ \let\forest@temp@pgfmathpostparse\pgfmathpostparse
+ \let\pgfmathpostparse\forest@aggregate@pgfmathpostparse
+ \forestmath@convert@to\forestmathtype@dimen{\forestmathresult}%
+ \pgfmathqparse{\forestmathresult}%
+ \let\pgfmathpostparse\forest@temp@pgfmathpostparse
+ \forestrlet{aggregate result}\pgfmathresult
+}
+% \end{macrocode}
+% \subsubsection{\texttt{pgfmath} extensions}
+%
+% \begin{macrocode}
+\pgfmathdeclarefunction{strequal}{2}{%
+ \ifstrequal{#1}{#2}{\def\pgfmathresult{1}}{\def\pgfmathresult{0}}%
+}
+\pgfmathdeclarefunction{instr}{2}{%
+ \pgfutil@in@{#1}{#2}%
+ \ifpgfutil@in@\def\pgfmathresult{1}\else\def\pgfmathresult{0}\fi
+}
+\pgfmathdeclarefunction{strcat}{...}{%
+ \edef\pgfmathresult{\forest@strip@braces{#1}}%
+}
+\pgfmathdeclarefunction{min_s}{2}{% #1 = node, #2 = context node (for growth rotation)
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \forest@compute@minmax@ls{#2}%
+ \edef\forest@temp{\forestove{min@s}}%
+ \edef\pgfmathresult{\expandafter\Pgf@geT\forest@temp}%
+ }%
+}
+\pgfmathdeclarefunction{min_l}{2}{% #1 = node, #2 = context node (for growth rotation)
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \forest@compute@minmax@ls{#2}%
+ \edef\forest@temp{\forestove{min@l}}%
+ \edef\pgfmathresult{\expandafter\Pgf@geT\forest@temp}%
+ }%
+}
+\pgfmathdeclarefunction{max_s}{2}{% #1 = node, #2 = context node (for growth rotation)
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \forest@compute@minmax@ls{#2}%
+ \edef\forest@temp{\forestove{max@s}}%
+ \edef\pgfmathresult{\expandafter\Pgf@geT\forest@temp}%
+ }%
+}
+\pgfmathdeclarefunction{max_l}{2}{% #1 = node, #2 = context node (for growth rotation)
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \forest@compute@minmax@ls{#2}%
+ \edef\forest@temp{\forestove{max@l}}%
+ \edef\pgfmathresult{\expandafter\Pgf@geT\forest@temp}%
+ }%
+}
+\def\forest@compute@minmax@ls#1{% #1 = nodewalk; in the context of which node?
+ {%
+ \pgftransformreset
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \forest@pgfqtransformrotate{-\forestove{grow}}%
+ }%
+ \forestoget{min x}\forest@temp@minx
+ \forestoget{min y}\forest@temp@miny
+ \forestoget{max x}\forest@temp@maxx
+ \forestoget{max y}\forest@temp@maxy
+ \pgfpointtransformed{\pgfqpoint{\forest@temp@minx}{\forest@temp@miny}}%
+ \forestoeset{min@l}{\the\pgf@x}%
+ \forestoeset{min@s}{\the\pgf@y}%
+ \forestoeset{max@l}{\the\pgf@x}%
+ \forestoeset{max@s}{\the\pgf@y}%
+ \pgfpointtransformed{\pgfqpoint{\forest@temp@minx}{\forest@temp@maxy}}%
+ \ifdim\pgf@x<\forestove{min@l}\relax\forestoeset{min@l}{\the\pgf@x}\fi
+ \ifdim\pgf@y<\forestove{min@s}\relax\forestoeset{min@s}{\the\pgf@y}\fi
+ \ifdim\pgf@x>\forestove{max@l}\relax\forestoeset{max@l}{\the\pgf@x}\fi
+ \ifdim\pgf@y>\forestove{max@s}\relax\forestoeset{max@s}{\the\pgf@y}\fi
+ \pgfpointtransformed{\pgfqpoint{\forest@temp@maxx}{\forest@temp@miny}}%
+ \ifdim\pgf@x<\forestove{min@l}\relax\forestoeset{min@l}{\the\pgf@x}\fi
+ \ifdim\pgf@y<\forestove{min@s}\relax\forestoeset{min@s}{\the\pgf@y}\fi
+ \ifdim\pgf@x>\forestove{max@l}\relax\forestoeset{max@l}{\the\pgf@x}\fi
+ \ifdim\pgf@y>\forestove{max@s}\relax\forestoeset{max@s}{\the\pgf@y}\fi
+ \pgfpointtransformed{\pgfqpoint{\forest@temp@maxx}{\forest@temp@maxy}}%
+ \ifdim\pgf@x<\forestove{min@l}\relax\forestoeset{min@l}{\the\pgf@x}\fi
+ \ifdim\pgf@y<\forestove{min@s}\relax\forestoeset{min@s}{\the\pgf@y}\fi
+ \ifdim\pgf@x>\forestove{max@l}\relax\forestoeset{max@l}{\the\pgf@x}\fi
+ \ifdim\pgf@y>\forestove{max@s}\relax\forestoeset{max@s}{\the\pgf@y}\fi
+ % smuggle out
+ \edef\forest@marshal{%
+ \noexpand\forestoeset{min@l}{\forestove{min@l}}%
+ \noexpand\forestoeset{min@s}{\forestove{min@s}}%
+ \noexpand\forestoeset{max@l}{\forestove{max@l}}%
+ \noexpand\forestoeset{max@s}{\forestove{max@s}}%
+ }\expandafter
+ }\forest@marshal
+}
+\def\forest@pgfmathhelper@attribute@toks#1#2{%
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \ifnum\forest@cn=0
+ \def\pgfmathresult{}%
+ \else
+ \forestoget{#2}\pgfmathresult
+ \fi
+ }%
+}
+\def\forest@pgfmathhelper@attribute@dimen#1#2{%
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \ifnum\forest@cn=0
+ \def\pgfmathresult{0}%
+ \else
+ \forestoget{#2}\forest@temp
+ \edef\pgfmathresult{\expandafter\Pgf@geT\forest@temp}%
+ \fi
+ }%
+}
+\def\forest@pgfmathhelper@attribute@count#1#2{%
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \ifnum\forest@cn=0
+ \def\pgfmathresult{0}%
+ \else
+ \forestoget{#2}\pgfmathresult
+ \fi
+ }%
+}
+\pgfmathdeclarefunction*{id}{1}{%
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \let\pgfmathresult\forest@cn
+ }%
+}
+% \end{macrocode}
+%
+% \subsection{Nodewalk}
+%
+% Setup machinery.
+%
+% \begin{macrocode}
+\def\forest@nodewalk@n{0}
+\def\forest@nodewalk@historyback{0,}
+\def\forest@nodewalk@historyforward{0,}
+\def\forest@nodewalk@origin{0}
+\def\forest@nodewalk@config@everystep@independent@before#1{% #1 = every step keylist
+ \forestrset{every step}{#1}%
+}
+\def\forest@nodewalk@config@everystep@independent@after{%
+ \noexpand\forestrset{every step}{\forestrv{every step}}%
+}
+\def\forest@nodewalk@config@history@independent@before{%
+ \def\forest@nodewalk@n{0}%
+ \edef\forest@nodewalk@origin{\forest@cn}%
+ \def\forest@nodewalk@historyback{0,}%
+ \def\forest@nodewalk@historyforward{0,}%
+}
+\def\forest@nodewalk@config@history@independent@after{%
+ \edef\noexpand\forest@nodewalk@n{\expandonce{\forest@nodewalk@n}}%
+ \edef\noexpand\forest@nodewalk@origin{\expandonce{\forest@nodewalk@origin}}%
+ \edef\noexpand\forest@nodewalk@historyback{\expandonce{\forest@nodewalk@historyback}}%
+ \edef\noexpand\forest@nodewalk@historyforward{\expandonce{\forest@nodewalk@historyforward}}%
+}
+\def\forest@nodewalk@config@everystep@shared@before#1{}% #1 = every step keylist
+\def\forest@nodewalk@config@everystep@shared@after{}
+\def\forest@nodewalk@config@history@shared@before{}
+\def\forest@nodewalk@config@history@shared@after{}
+\def\forest@nodewalk@config@everystep@inherited@before#1{}% #1 = every step keylist
+\let\forest@nodewalk@config@everystep@inherited@after\forest@nodewalk@config@everystep@independent@after
+\def\forest@nodewalk@config@history@inherited@before{}
+\let\forest@nodewalk@config@history@inherited@after\forest@nodewalk@config@history@independent@after
+\def\forest@nodewalk#1#2{% #1 = nodewalk, #2 = every step keylist
+ \forest@configured@nodewalk{independent}{independent}{inherited}{#1}{#2}%
+}
+\def\forest@configured@nodewalk#1#2#3#4#5{%
+ % #1 = every step method, #2 = history method, #3 = on invalid
+ % #4 = nodewalk, #5 = every step keylist
+ \def\forest@nodewalk@config@everystep@method{#1}%
+ \def\forest@nodewalk@config@history@method{#2}%
+ \def\forest@nodewalk@config@oninvalid{#3}%
+ \forest@Nodewalk{#4}{#5}%
+}
+\def\forest@nodewalk@oninvalid@inherited@text{inherited}
+\def\forest@Nodewalk#1#2{% #1 = nodewalk, #2 = every step keylist
+ \ifx\forest@nodewalk@config@oninvalid\forest@nodewalk@oninvalid@inherited@text
+ \edef\forest@nodewalk@config@oninvalid{\forest@nodewalk@oninvalid}%
+ \fi
+ \edef\forest@nw@marshal{%
+ \noexpand\pgfqkeys{/forest/nodewalk}{\unexpanded{#1}}%
+ \csname forest@nodewalk@config@everystep@\forest@nodewalk@config@everystep@method @after\endcsname
+ \csname forest@nodewalk@config@history@\forest@nodewalk@config@history@method @after\endcsname
+ \edef\noexpand\forest@nodewalk@oninvalid{\forest@nodewalk@oninvalid}%
+ }%
+ \csname forest@nodewalk@config@everystep@\forest@nodewalk@config@everystep@method @before\endcsname{#2}%
+ \csname forest@nodewalk@config@history@\forest@nodewalk@config@history@method @before\endcsname
+ \edef\forest@nodewalk@oninvalid{\forest@nodewalk@config@oninvalid}%
+ \forest@saveandrestoreifcs{forest@nodewalk@fake}{%
+ \forest@nodewalk@fakefalse
+ \forest@nw@marshal
+ }%
+}
+\pgfmathdeclarefunction{valid}{1}{%
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \edef\pgfmathresult{\ifnum\forest@cn=0 0\else 1\fi}%
+ }%
+}
+\pgfmathdeclarefunction{invalid}{1}{%
+ \forest@forthis{%
+ \forest@nameandgo{#1}%
+ \edef\pgfmathresult{\ifnum\forest@cn=0 1\else 0\fi}%
+ }%
+}
+\newif\ifforest@nodewalk@fake
+\def\forest@nodewalk@oninvalid{error}
+\def\forest@nodewalk@makestep{%
+ \ifnum\forest@cn=0
+ \csname forest@nodewalk@makestep@oninvalid@\forest@nodewalk@oninvalid\endcsname
+ \else
+ \forest@nodewalk@makestep@
+ \fi
+}
+\csdef{forest@nodewalk@makestep@oninvalid@error if real}{\ifforest@nodewalk@fake\expandafter\forest@nodewalk@makestep@\else\expandafter\forest@nodewalk@makestep@oninvalid@error\fi}
+\csdef{forest@nodewalk@makestep@oninvalid@last valid}{%
+ \forest@nodewalk@tolastvalid
+ \ifforestdebugnodewalks\forest@nodewalk@makestep@invalidtolastvalid@debug\fi}%
+\def\forest@nodewalk@makestep@oninvalid@error{\PackageError{forest}{nodewalk stepped to the invalid node\MessageBreak nodewalk stack: "\forest@nodewalk@currentstepname"}{}}%
+\let\forest@nodewalk@makestep@oninvalid@fake\relax
+\def\forest@nodewalk@makestep@oninvalid@compatfake{%
+ \forest@deprecated{last step in stack "\forest@nodewalk@currentstepname", which stepped on an invalid node; enabled by "compat=1.0-forstep". Use "on invalid={fake}{...}" or "for Nodewalk={on invalid=fake}{...}{...}" instead.}%
+}%
+\def\forest@nodewalk@makestep@{%
+ \ifforestdebugnodewalks\forest@nodewalk@makestep@debug\fi
+ \ifforest@nodewalk@fake
+ \else
+ \edef\forest@nodewalk@n{\number\numexpr\forest@nodewalk@n+1}%
+ \epreto\forest@nodewalk@historyback{\forest@cn,}%
+ \def\forest@nodewalk@historyforward{0,}%
+ \forest@process@keylist@register{every step}%
+ \fi
+}
+\def\forest@nodewalk@makestep@debug{%
+ \edef\forest@marshal{%
+ \noexpand\typeout{\ifforest@nodewalk@fake fake \fi "\forest@nodewalk@currentstepname" step to node id=\forest@cn, content=\forestoption{content}}%
+ }\forest@marshal
+}%
+\def\forest@nodewalk@makestep@invalidtolastvalid@debug{%
+ \edef\forest@marshal{%
+ \noexpand\typeout{\ifforest@nodewalk@fake fake \fi "\forest@nodewalk@currentstepname" step to invalid node, (fake) return to last valid id=\forest@cn, content=\forestoption{content}}%
+ }\forest@marshal
+}%
+\def\forest@handlers@savecurrentpath{%
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentpath}%
+ \let\forest@currentkey\pgfkeyscurrentkey
+ \pgfkeys@split@path
+ \edef\forest@currentpath{\pgfkeyscurrentpath}%
+ \let\forest@currentname\pgfkeyscurrentname
+}
+\pgfkeys{/handlers/save current path/.code={\forest@handlers@savecurrentpath}}
+\newif\ifforest@nodewalkstephandler@style
+\newif\ifforest@nodewalkstephandler@autostep
+\newif\ifforest@nodewalkstephandler@stripfakesteps
+\newif\ifforest@nodewalkstephandler@muststartatvalidnode
+\newif\ifforest@nodewalkstephandler@makefor
+\let\forest@nodewalkstephandler@styletrueorfalse\forest@nodewalkstephandler@stylefalse
+\def\forest@nodewalk@currentstepname{}
+\forestset{
+ /forest/define@step/style/.is if=forest@nodewalkstephandler@style,
+ /forest/define@step/autostep/.is if=forest@nodewalkstephandler@autostep,
+ % the following is useful because some macros use grouping (by \forest@forthis or similar) and therefore, after making the last step, revert \forest@cn to the original value, essentially making a fake step
+ /forest/define@step/strip fake steps/.is if=forest@nodewalkstephandler@stripfakesteps,
+ % this can never happen with autosteps ...
+ /forest/define@step/autostep/.append code={%
+ \ifforest@nodewalkstephandler@autostep
+ \forest@nodewalkstephandler@stripfakestepsfalse
+ \fi
+ },
+ /forest/define@step/must start at valid node/.is if=forest@nodewalkstephandler@muststartatvalidnode,
+ /forest/define@step/n args/.store in=\forest@nodewalkstephandler@nargs,
+ /forest/define@step/make for/.is if=forest@nodewalkstephandler@makefor,
+ /forest/define@step/@bare/.style={strip fake steps=false,must start at valid node=false,make for=false},
+ define long step/.code n args=3{%
+ \forest@nodewalkstephandler@styletrueorfalse % true for end users; but in the package, most of steps are defined by .code
+ \forest@nodewalkstephandler@autostepfalse
+ \forest@nodewalkstephandler@stripfakestepstrue
+ \forest@nodewalkstephandler@muststartatvalidnodetrue % most steps can only start at a valid node
+ \forest@nodewalkstephandler@makefortrue % make for prefix?
+ \def\forest@nodewalkstephandler@nargs{0}%
+ \pgfqkeys{/forest/define@step}{#2}%
+ \forest@temp@toks{#3}% handler code
+ \ifforest@nodewalkstephandler@style
+ \expandafter\forest@temp@toks\expandafter{%
+ \expandafter\pgfkeysalso\expandafter{\the\forest@temp@toks}%
+ }%
+ \fi
+ \ifforest@nodewalkstephandler@autostep
+ \apptotoks\forest@temp@toks{\forest@nodewalk@makestep}%
+ \fi
+ \ifforest@nodewalkstephandler@stripfakesteps
+ \expandafter\forest@temp@toks\expandafter{\expandafter\forest@nodewalk@stripfakesteps\expandafter{\the\forest@temp@toks}}%
+ \fi
+ \ifforest@nodewalkstephandler@muststartatvalidnode
+ \edef\forest@marshal{%
+ \noexpand\forest@temp@toks{%
+ \unexpanded{%
+ \ifnum\forest@cn=0
+ \csname forest@nodewalk@start@oninvalid@\forest@nodewalk@oninvalid\endcsname{#1}%
+ \else
+ }%
+ \noexpand\@escapeif{\the\forest@temp@toks}%
+ \noexpand\fi
+ }%
+ }\forest@marshal
+ \fi
+ \pretotoks\forest@temp@toks{\appto\forest@nodewalk@currentstepname{,#1}}%
+ \expandafter\forest@temp@toks\expandafter{\expandafter\forest@saveandrestoremacro\expandafter\forest@nodewalk@currentstepname\expandafter{\the\forest@temp@toks}}%
+ \ifforestdebugnodewalks
+ \epretotoks\forest@temp@toks{\noexpand\typeout{Starting step "#1" from id=\noexpand\forest@cn
+ \ifnum\forest@nodewalkstephandler@nargs>0 \space with args \noexpand\unexpanded{####1}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>1 ,\noexpand\unexpanded{####2}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>2 ,\noexpand\unexpanded{####3}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>3 ,\noexpand\unexpanded{####4}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>4 ,\noexpand\unexpanded{####5}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>5 ,\noexpand\unexpanded{####6}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>6 ,\noexpand\unexpanded{####7}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>7 ,\noexpand\unexpanded{####8}\fi
+ \ifnum\forest@nodewalkstephandler@nargs>8 ,\noexpand\unexpanded{####9}\fi
+ }}%
+ \fi
+ \def\forest@temp{/forest/nodewalk/#1/.code}%
+ \ifnum\forest@nodewalkstephandler@nargs<2
+ \eappto\forest@temp{=}%
+ \else\ifnum\forest@nodewalkstephandler@nargs=2
+ \eappto\forest@temp{ 2 args=}%
+ \else
+ \eappto\forest@temp{ n args={\forest@nodewalkstephandler@nargs}}%
+ \fi\fi
+ \eappto\forest@temp{{\the\forest@temp@toks}}%
+ \expandafter\pgfkeysalso\expandafter{\forest@temp}%
+ \ifforest@nodewalkstephandler@makefor
+ \ifnum\forest@nodewalkstephandler@nargs=0
+ \forestset{%
+ for #1/.code={\forest@forstepwrapper{#1}{##1}},
+ }%
+ \else\ifnum\forest@nodewalkstephandler@nargs=1
+ \forestset{%
+ for #1/.code 2 args={\forest@forstepwrapper{#1={##1}}{##2}},
+ }%
+ \else
+ \forestset{%
+ for #1/.code n args/.expanded=%
+ {\number\numexpr\forest@nodewalkstephandler@nargs+1}%
+ {\noexpand\forest@forstepwrapper{#1\ifnum\forest@nodewalkstephandler@nargs>0=\fi\forest@util@nargs{####}{\number\numexpr\forest@nodewalkstephandler@nargs}{0}}{####\number\numexpr\forest@nodewalkstephandler@nargs+1}},
+ }%
+ \fi\fi
+ \fi
+ },
+}
+{\csname forest@@doc@@hook@bigbadforlist\endcsname}%
+\pgfqkeys{/handlers}{
+ .nodewalk style/.code={\forest@handlers@savecurrentpath\pgfkeysalso{%
+ \forest@currentpath/nodewalk/\forest@currentname/.style={#1}%
+ }},
+}
+% \end{macrocode}
+% |\forest@forstepwrapper| is defined so that it can be changed by |compat| to create unfailable spatial propagators from v1.0.
+% \begin{macrocode}
+\def\forest@forstepwrapper#1#2{\forest@forthis{\forest@nodewalk{#1}{#2}}}
+\def\forest@util@nargs#1#2#3{% #1 = prefix (#, ##, ...), #2 = n args, #3=start; returns {#start+1}...{#start+n}
+ \ifnum#2>0 {#1\number\numexpr#3+1}\fi
+ \ifnum#2>1 {#1\number\numexpr#3+2}\fi
+ \ifnum#2>2 {#1\number\numexpr#3+3}\fi
+ \ifnum#2>3 {#1\number\numexpr#3+4}\fi
+ \ifnum#2>4 {#1\number\numexpr#3+5}\fi
+ \ifnum#2>5 {#1\number\numexpr#3+6}\fi
+ \ifnum#2>6 {#1\number\numexpr#3+7}\fi
+ \ifnum#2>7 {#1\number\numexpr#3+8}\fi
+ \ifnum#2>8 {#1\number\numexpr#3+9}\fi
+}
+\def\forest@nodewalk@start@oninvalid@fake#1{}
+\def\forest@nodewalk@start@oninvalid@compatfake#1{%
+ \forest@deprecated{last step in stack "\forest@nodewalk@currentstepname", which started from an invalid node; enabled by "compat=1.0-forstep". Use "on invalid={fake}{...}" or "for Nodewalk={on invalid=fake}{...}{...}" instead.}%
+}%
+\let\forest@nodewalk@start@oninvalid@errorifreal\forest@nodewalk@start@oninvalid@fake % the step will be to an invalid node anyway
+\let\forest@nodewalk@start@oninvalid@lastvalid\forest@nodewalk@start@oninvalid@fake
+\def\forest@nodewalk@start@oninvalid@error#1{\PackageError{forest}{nodewalk step "#1" cannot start at the invalid node}{}}
+% \end{macrocode}
+% Define long-form single-step walks.
+% \begin{macrocode}
+\forestset{
+ define long step={current}{autostep}{},
+ define long step={next}{autostep}{\edef\forest@cn{\forestove{@next}}},
+ define long step={previous}{autostep}{\edef\forest@cn{\forestove{@previous}}},
+ define long step={parent}{autostep}{\edef\forest@cn{\forestove{@parent}}},
+ define long step={first}{autostep}{\edef\forest@cn{\forestove{@first}}},
+ define long step={last}{autostep}{\edef\forest@cn{\forestove{@last}}},
+ define long step={sibling}{autostep}{%
+ \edef\forest@cn{%
+ \ifnum\forestove{@previous}=0
+ \forestove{@next}%
+ \else
+ \forestove{@previous}%
+ \fi
+ }%
+ },
+ define long step={next node}{autostep}{\edef\forest@cn{\forest@node@linearnextid}},
+ define long step={previous node}{autostep}{\edef\forest@cn{\forest@node@linearpreviousid}},
+ define long step={first leaf}{autostep}{%
+ \safeloop
+ \edef\forest@cn{\forestove{@first}}%
+ \unless\ifnum\forestove{@first}=0
+ \saferepeat
+ },
+ define long step={first leaf'}{autostep}{%
+ \safeloop
+ \unless\ifnum\forestove{@first}=0
+ \edef\forest@cn{\forestove{@first}}%
+ \saferepeat
+ },
+ define long step={last leaf}{autostep}{%
+ \safeloop
+ \edef\forest@cn{\forestove{@last}}%
+ \unless\ifnum\forestove{@last}=0
+ \saferepeat
+ },
+ define long step={last leaf'}{autostep}{%
+ \safeloop
+ \unless\ifnum\forestove{@last}=0
+ \edef\forest@cn{\forestove{@last}}%
+ \saferepeat
+ },
+ define long step={next leaf}{style,strip fake steps=false}{group={do until={n_children()==0}{next node}}},
+ define long step={previous leaf}{style,strip fake steps=false}{group={do until={n_children()==0}{previous node}}},
+ define long step={next on tier}{autostep,n args=1}{%
+ \def\forest@temp{#1}%
+ \ifx\forest@temp\pgfkeysnovalue@text
+ \forestoget{tier}\forest@nodewalk@giventier
+ \else
+ \def\forest@nodewalk@giventier{#1}%
+ \fi
+ \edef\forest@cn{\forest@node@linearnextid}%
+ \safeloop
+ \forest@nodewalk@gettier
+ \ifforest@temp
+ \edef\forest@cn{\forest@node@linearnextid}%
+ \saferepeat
+ },
+ define long step={previous on tier}{autostep,n args=1}{%
+ \def\forest@temp{#1}%
+ \ifx\forest@temp\pgfkeysnovalue@text
+ \forestoget{tier}\forest@nodewalk@giventier
+ \else
+ \def\forest@nodewalk@giventier{#1}%
+ \fi
+ \safeloop
+ \edef\forest@cn{\forest@node@linearpreviousid}%
+ \forest@nodewalk@gettier
+ \ifforest@temp
+ \saferepeat
+ },
+ TeX={%
+ \def\forest@nodewalk@gettier{%
+ \ifnum\forest@cn=0
+ \forest@tempfalse
+ \else
+ \forestoget{tier}\forest@temp
+ \ifx\forest@temp\forest@nodewalk@giventier
+ \forest@tempfalse
+ \else
+ \forest@temptrue
+ \fi
+ \fi
+ }%
+ },
+ %
+ define long step={root}{autostep,must start at valid node=false}{%
+ \edef\forest@cn{\forest@node@rootid}},
+ define long step={root'}{autostep,must start at valid node=false}{%
+ \forestOifdefined{\forest@root}{@parent}{\edef\forest@cn{\forest@root}}{\edef\forest@cn{0}}%
+ },
+ define long step={origin}{autostep,must start at valid node=false}{\edef\forest@cn{\forest@nodewalk@origin}},
+ %
+ define long step={n}{autostep,n args=1}{%
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \edef\forest@cn{\forest@node@nthchildid{\forest@temp@n}}%
+ },
+ define long step={n}{autostep,make for=false,n args=1}{%
+ % Yes, twice. ;-)
+ % n=1 and n(ext)
+ \def\forest@nodewalk@temp{#1}%
+ \ifx\forest@nodewalk@temp\pgfkeysnovalue@text
+ \edef\forest@cn{\forestove{@next}}%
+ \else
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \edef\forest@cn{\forest@node@nthchildid{\forest@temp@n}}%
+ \fi
+ },
+ define long step={n'}{autostep,n args=1}{%
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \edef\forest@cn{\forest@node@nbarthchildid{\forest@temp@n}}%
+ },
+ define long step={to tier}{autostep,n args=1}{%
+ \def\forest@nodewalk@giventier{#1}%
+ \safeloop
+ \forest@nodewalk@gettier
+ \ifforest@temp
+ \forestoget{@parent}\forest@cn
+ \saferepeat
+ },
+ %
+ define long step={name}{autostep,n args=1,must start at valid node=false}{%
+ \edef\forest@cn{%
+ \forest@node@Ifnamedefined{#1}{\forest@node@Nametoid{#1}}{0}%
+ }%
+ },
+ define long step={id}{autostep,n args=1,must start at valid node=false}{%
+ \forestOifdefined{#1}{@parent}{\edef\forest@cn{#1}}{\edef\forest@cn{0}}%
+ },
+ define long step={Nodewalk}{n args=3,@bare}{% #1 = config, #2 = nodewalk
+ \def\forest@nodewalk@config@everystep@method{independent}%
+ \def\forest@nodewalk@config@history@method{shared}%
+ \def\forest@nodewalk@config@oninvalid{inherited}%
+ \pgfqkeys{/forest/nodewalk@config}{#1}%
+ \forest@Nodewalk{#2}{#3}%
+ },
+ define long step={nodewalk}{n args=2,@bare}{% #1 = nodewalk, #2 = every step
+ \forest@nodewalk{#1}{#2}%
+ },
+ define long step={nodewalk'}{n args=1,@bare}{% #1 = nodewalk
+ \forest@configured@nodewalk{inherited}{independent}{inherited}{#1}{}%
+ },
+ % these "for ..." keys must be defined explicitely
+ % (and copied into node keyspace manually),
+ % as prefix "for" normally introduces the every-step keylist
+ define long step={for nodewalk}{n args=2,@bare}{% #1 = nodewalk, #2 = every step
+ \forest@forthis{\forest@nodewalk{#1}{#2}}},
+ define long step={for nodewalk'}{n args=1,@bare}{% #1 = nodewalk
+ \forest@forthis{%
+ \forest@configured@nodewalk{inherited}{independent}{inherited}{#1}{}%
+ }%
+ },
+ define long step={for Nodewalk}{n args=3,@bare}{% #1 = config, #2 = nodewalk, #3 = every-step
+ \def\forest@nodewalk@config@everystep@method{independent}%
+ \def\forest@nodewalk@config@history@method{shared}%
+ \def\forest@nodewalk@config@oninvalid{inherited}%
+ \pgfqkeys{/forest/nodewalk@config}{#1}%
+ \forest@forthis{\forest@Nodewalk{#2}{#3}}%
+ },
+ copy command key={/forest/nodewalk/Nodewalk}{/forest/Nodewalk},
+ copy command key={/forest/nodewalk/for nodewalk}{/forest/for nodewalk},
+ copy command key={/forest/nodewalk/for Nodewalk}{/forest/for Nodewalk},
+ declare keylist register=every step,
+ every step'={},
+ %%% begin nodewalk config
+ nodewalk@config/.cd,
+ every@step/.is choice,
+ every@step/independent/.code={},
+ every@step/inherited/.code={},
+ every@step/shared/.code={},
+ every step/.store in=\forest@nodewalk@config@everystep@method,
+ every step/.prefix style={every@step=#1},
+ @history/.is choice,
+ @history/independent/.code={},
+ @history/inherited/.code={},
+ @history/shared/.code={},
+ history/.store in=\forest@nodewalk@config@history@method,
+ history/.prefix style={@history=#1},
+ on@invalid/.is choice,
+ on@invalid/error/.code={},
+ on@invalid/fake/.code={},
+ on@invalid/error if real/.code={},
+ on@invalid/last valid/.code={},
+ on@invalid/inherited/.code={},
+ on invalid/.store in=\forest@nodewalk@config@oninvalid,
+ on invalid/.prefix style={on@invalid=#1},
+ %%% end nodewalk config
+}
+\newtoks\forest@nodewalk@branch@toks
+\forestset{
+ declare toks register=branch@temp@toks,
+ branch@temp@toks={},
+ declare keylist register=branched@nodewalk,
+ branched@nodewalk={},
+ define long step={branch}{n args=1,@bare,make for,style}{@branch={#1}{branch@build@realstep,branch@build@fakestep}},
+ define long step={branch'}{n args=1,@bare,make for,style}{@branch={#1}{branch@build@realstep}},
+ @branch/.style 2 args={%
+ save and restore register={branched@nodewalk}{
+ branch@temp@toks={},
+ split/.process={r}{#1}{,}{#2},
+ also/.register=branch@temp@toks,
+ also/.register=branched@nodewalk,
+ }
+ },
+ nodewalk/branch@build@realstep/.style={% #1 = nodewalk for this branch
+ branch@temp@toks/.expanded={for nodewalk={\unexpanded{#1}}{
+ branched@nodewalk+/.expanded={id=\noexpand\forestoption{id}},
+ \forestregister{branch@temp@toks}}},
+ },
+ nodewalk/branch@build@fakestep/.style={% #1 = nodewalk for this branch
+ branch@temp@toks/.expanded={for nodewalk={\unexpanded{#1}}{
+ \forestregister{branch@temp@toks}}},
+ },
+ define long step={group}{autostep,n args=1}{\forest@go{#1}},
+ nodewalk/fake/.code={%
+ \forest@saveandrestoreifcs{forest@nodewalk@fake}{%
+ \forest@nodewalk@faketrue
+ \pgfkeysalso{#1}%
+ }%
+ },
+ nodewalk/real/.code={%
+ \forest@saveandrestoreifcs{forest@nodewalk@fake}{%
+ \forest@nodewalk@fakefalse
+ \pgfkeysalso{#1}%
+ }%
+ },
+ declare keylist register=filtered@nodewalk,
+ filtered@nodewalk={},
+ define long step={filter}{n args=2,@bare,make for,style}{% #1 = nodewalk, #2 = condition
+ save and restore register={filtered@nodewalk}{
+ filtered@nodewalk'={},
+ Nodewalk=%
+ {history=inherited}%
+ {#1}%
+ {if={#2}{filtered@nodewalk+/.expanded={id=\forestoption{id}}}{}},
+ filtered@nodewalk@style/.style/.register=filtered@nodewalk,
+ filtered@nodewalk@style
+ },
+ },
+ on@invalid/.is choice,
+ on@invalid/error/.code={},
+ on@invalid/fake/.code={},
+ on@invalid/error if real/.code={},
+ on@invalid/last valid/.code={},
+ on invalid/.code 2 args={%
+ \pgfkeysalso{/forest/on@invalid={#1}}%
+ \forest@saveandrestoremacro\forest@nodewalk@oninvalid{%
+ \def\forest@nodewalk@oninvalid{#1}%
+ \pgfkeysalso{#2}%
+ }%
+ },
+ define long step={strip fake steps}{n args=1,@bare}{%
+ \forest@nodewalk@stripfakesteps{\pgfkeysalso{#1}}},
+ define long step={unique}{n args=1}{%
+ \begingroup
+ \def\forest@nodewalk@unique@temp{}%
+ \forest@nodewalk{#1}{%
+ TeX={%
+ \forestoget{unique@visited}\forest@temp
+ \ifx\forest@temp\relax
+ \forestoset{unique@visited}{1}%
+ \eappto\forest@nodewalk@unique@temp{,id=\forest@cn}%
+ \fi
+ }%
+ }%
+ \global\let\forest@global@temp\forest@nodewalk@unique@temp
+ \endgroup
+ \pgfkeysalsofrom{\forest@global@temp}%
+ },
+ define long step={walk back}{n args=1,@bare}{%
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \forest@nodewalk@walklist{\forest@nodewalk@historyforward}{\forest@nodewalk@historyback}{\ifnum\forest@cn=0 0\else1\fi}{\forest@temp@n+\ifnum\forest@cn=0 0\else1\fi}{\let\forest@cn\forest@nodewalk@cn\forest@nodewalk@makestep}%
+ \forest@nodewalk@back@updatehistory
+ },
+ nodewalk/walk back/.default=1,
+ define long step={jump back}{n args=1,@bare}{%
+ \forestmathtruncatemacro\forest@temp@n{(#1)+\ifnum\forest@cn=0 0\else1\fi}%
+ \forest@nodewalk@walklist{\forest@nodewalk@historyforward}{\forest@nodewalk@historyback}{\forest@temp@n-1}{\forest@temp@n}{\let\forest@cn\forest@nodewalk@cn\forest@nodewalk@makestep}%
+ \forest@nodewalk@back@updatehistory
+ },
+ nodewalk/jump back/.default=1,
+ define long step={back}{n args=1,@bare}{%
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \forest@nodewalk@walklist{\forest@nodewalk@historyforward}{\forest@nodewalk@historyback}{\ifnum\forest@cn=0 0\else1\fi}{\forest@temp@n+\ifnum\forest@cn=0 0\else1\fi}{\let\forest@cn\forest@nodewalk@cn\forest@saveandrestoreifcs{forest@nodewalk@fake}{\forest@nodewalk@faketrue\forest@nodewalk@makestep}}%
+ \forest@nodewalk@back@updatehistory
+ },
+ nodewalk/back/.default=1,
+ define long step={walk forward}{n args=1,@bare}{%
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \forest@nodewalk@walklist{\forest@nodewalk@historyback}{\forest@nodewalk@historyforward}{0}{\forest@temp@n}{\let\forest@cn\forest@nodewalk@cn\forest@nodewalk@makestep}%
+ \forest@nodewalk@forward@updatehistory
+ },
+ nodewalk/walk forward/.default=1,
+ define long step={jump forward}{n args=1,@bare}{%
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \forest@nodewalk@walklist{\forest@nodewalk@historyback}{\forest@nodewalk@historyforward}{\forest@temp@n-1}{\forest@temp@n}{\let\forest@cn\forest@nodewalk@cn\forest@nodewalk@makestep}%
+ \forest@nodewalk@forward@updatehistory
+ },
+ nodewalk/jump forward/.default=1,
+ define long step={forward}{n args=1,@bare}{%
+ \forestmathtruncatemacro\forest@temp@n{#1}%
+ \forest@nodewalk@walklist{\forest@nodewalk@historyback}{\forest@nodewalk@historyforward}{0}{\forest@temp@n}{\let\forest@cn\forest@nodewalk@cn\forest@saveandrestoreifcs{forest@nodewalk@fake}{\forest@nodewalk@faketrue\forest@nodewalk@makestep}}%
+ \forest@nodewalk@forward@updatehistory
+ },
+ nodewalk/forward/.default=1,
+ define long step={last valid'}{@bare}{%
+ \ifnum\forest@cn=0
+ \forest@nodewalk@tolastvalid
+ \forest@nodewalk@makestep
+ \fi
+ },
+ define long step={last valid}{@bare}{%
+ \forest@nodewalk@tolastvalid
+ },
+ define long step={reverse}{n args=1,@bare,make for}{%
+ \forest@nodewalk{#1,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ \global\let\forest@global@tempn\forest@nodewalk@n
+ }}{}%
+ \forest@nodewalk@walklist{}{\forest@global@temp}{0}{\forest@global@tempn}{\let\forest@cn\forest@nodewalk@cn\forest@nodewalk@makestep}%
+ },
+ define long step={walk and reverse}{n args=1,@bare,make for}{%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#1}}%
+ \noexpand\forest@nodewalk@walklist{}{\noexpand\forest@nodewalk@historyback}{0}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}{\let\noexpand\forest@cn\noexpand\forest@nodewalk@cn\noexpand\forest@nodewalk@makestep}%
+ }\forest@marshal
+ },
+ define long step={sort}{n args=1,@bare,make for}{%
+ \forest@nodewalk{#1,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ \global\let\forest@global@tempn\forest@nodewalk@n
+ }}{}%
+ \forest@nodewalk@sortlist{\forest@global@temp}{\forest@global@tempn}\forest@sort@ascending
+ },
+ define long step={sort'}{n args=1,@bare,make for}{%
+ \forest@nodewalk{#1,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ \global\let\forest@global@tempn\forest@nodewalk@n
+ }}{}%
+ \forest@nodewalk@sortlist{\forest@global@temp}{\forest@global@tempn}\forest@sort@descending
+ },
+ define long step={walk and sort}{n args=1,@bare,make for}{% walk as given, then walk sorted
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#1}}%
+ \noexpand\forest@nodewalk@sortlist{\noexpand\forest@nodewalk@historyback}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}\noexpand\forest@sort@ascending
+ }\forest@marshal
+ },
+ define long step={walk and sort'}{n args=1,@bare,make for}{%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#1}}%
+ \noexpand\forest@nodewalk@sortlist{\noexpand\forest@nodewalk@historyback}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}\noexpand\forest@sort@descending
+ }\forest@marshal
+ },
+ declare keylist register=sort by,
+ copy command key={/forest/sort by'}{/forest/sort by},
+ sort by={},
+ define long step={save}{n args=2,@bare,make for}{% #1 = name, #2 = nodewalk
+ \forest@forthis{%
+ \forest@nodewalk{#2,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ \global\let\forest@global@tempn\forest@nodewalk@n
+ }}{}%
+ }%
+ \forest@nodewalk@walklist{}{\forest@global@temp}{0}{\forest@global@tempn}\relax
+ \csedef{forest@nodewalk@saved@#1}{\forest@nodewalk@walklist@walked}%
+ },
+ define long step={walk and save}{n args=2,@bare,make for}{% #1 = name, #2 = nodewalk
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#2}}%
+ \noexpand\forest@nodewalk@walklist{}{\noexpand\forest@nodewalk@historyback}{0}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}\relax
+ }\forest@marshal
+ \csedef{forest@nodewalk@saved@#1}{\forest@nodewalk@walklist@walked}%
+ },
+ define long step={save append}{style,n args=2,@bare,make for}{% #1 = nodewalk name, #2 = nodewalk
+ save@append@prepend={#1}{#2}{save}{\cseappto}},
+ define long step={save prepend}{style,n args=2,@bare,make for}{% #1 = nodewalk name, #2 = nodewalk
+ save@append@prepend={#1}{#2}{save}{\csepreto}},
+ define long step={walk and save append}{style,n args=2,@bare,make for}{% #1 = nodewalk name, #2 = nodewalk
+ save@append@prepend={#1}{#2}{walk and save}{\cseappto}},
+ define long step={walk and save prepend}{style,n args=2,@bare,make for}{% #1 = nodewalk name, #2 = nodewalk
+ save@append@prepend={#1}{#2}{walk and save}{\csepreto}},
+ nodewalk/save@append@prepend/.code n args=4{%
+ % #1 = nodewalk name, #2 = nodewalk
+ % #3 = "(walk and) save" #4 = \cseappto/\csepreto
+ \pgfkeysalso{#3={@temp}{#2}}%
+ \letcs\forest@temp{forest@nodewalk@saved@@temp}%
+ #4{forest@nodewalk@saved@#1}{\expandonce{\forest@temp}}%
+ },
+ nodewalk/save history/.code 2 args={% #1 = back, forward
+ \csedef{forest@nodewalk@saved@#1}{\forest@nodewalk@historyback}%
+ \csedef{forest@nodewalk@saved@#2}{\forest@nodewalk@historyforward}%
+ },
+ define long step={load}{n args=1,@bare,make for}{%
+ \forest@nodewalk@walklist{}{\csuse{forest@nodewalk@saved@#1}0,}{0}{-1}{\ifnum\forest@nodewalk@cn=0 \else\let\forest@cn\forest@nodewalk@cn\forest@nodewalk@makestep\fi}%
+ },
+ if in saved nodewalk/.code n args=4{% is node #1 in nodewalk #2; yes: #3, no: #4
+ \forest@forthis{%
+ \forest@go{#1}%
+ \edef\forest@marshal{%
+ \noexpand\pgfutil@in@{,\forest@cn,}{,\csuse{forest@nodewalk@saved@#2},}%
+ }\forest@marshal
+ }%
+ \ifpgfutil@in@
+ \@escapeif{\pgfkeysalso{#3}}%
+ \else
+ \@escapeif{\pgfkeysalso{#4}}%
+ \fi
+ },
+ where in saved nodewalk/.style n args=4{
+ for tree={if in saved nodewalk={#1}{#2}{#3}{#4}}
+ },
+ nodewalk/options/.code={\forestset{#1}},
+ nodewalk/TeX/.code={#1},
+ nodewalk/TeX'/.code={\appto\forest@externalize@loadimages{#1}#1},
+ nodewalk/TeX''/.code={\appto\forest@externalize@loadimages{#1}},
+ nodewalk/typeout/.style={TeX={\typeout{#1}}},
+ % repeat is taken later from /forest/repeat
+}
+\def\forest@nodewalk@walklist#1#2#3#4#5{%
+ % #1 = list of preceding, #2 = list to walk
+ % #3 = from, #4 = to
+ % #5 = every step code
+ \let\forest@nodewalk@cn\forest@cn
+ \edef\forest@marshal{%
+ \noexpand\forest@nodewalk@walklist@{#1}{#2}{\number\numexpr#3}{\number\numexpr#4}{1}{0}{\unexpanded{#5}}%
+ }\forest@marshal
+}
+\def\forest@nodewalk@walklist@#1#2#3#4#5#6#7{%
+ % #1 = list of walked, #2 = list to walk
+ % #3 = from, #4 = to
+ % #5 = current step n, #6 = steps made
+ % #7 = every step code
+ \def\forest@nodewalk@walklist@walked{#1}%
+ \def\forest@nodewalk@walklist@rest{#2}%
+ \edef\forest@nodewalk@walklist@stepsmade{#6}%
+ \ifnum#4<0
+ \forest@temptrue
+ \else
+ \ifnum#5>#4\relax
+ \forest@tempfalse
+ \else
+ \forest@temptrue
+ \fi
+ \fi
+ \ifforest@temp
+ \edef\forest@nodewalk@cn{\forest@csvlist@getfirst@{#2}}%
+ \ifnum\forest@nodewalk@cn=0
+ #7%
+ \else
+ \ifnum#5>#3\relax
+ #7%
+ \edef\forest@nodewalk@walklist@stepsmade{\number\numexpr#6+1}%
+ \fi
+ \forest@csvlist@getfirstrest@{#2}\forest@nodewalk@cn\forest@nodewalk@walklist@rest
+ \@escapeifif{%
+ \edef\forest@marshal{%
+ \noexpand\forest@nodewalk@walklist@
+ {\forest@nodewalk@cn,#1}{\forest@nodewalk@walklist@rest}{#3}{#4}{\number\numexpr#5+1}{\forest@nodewalk@walklist@stepsmade}{\unexpanded{#7}}%
+ }\forest@marshal
+ }%
+ \fi
+ \fi
+}
+
+\def\forest@nodewalk@back@updatehistory{%
+ \ifnum\forest@cn=0
+ \let\forest@nodewalk@historyback\forest@nodewalk@walklist@rest
+ \let\forest@nodewalk@historyforward\forest@nodewalk@walklist@walked
+ \else
+ \expandafter\forest@csvlist@getfirstrest@\expandafter{\forest@nodewalk@walklist@walked}\forest@temp\forest@nodewalk@historyforward
+ \edef\forest@nodewalk@historyback{\forest@temp,\forest@nodewalk@walklist@rest}%
+ \fi
+}
+\def\forest@nodewalk@forward@updatehistory{%
+ \let\forest@nodewalk@historyforward\forest@nodewalk@walklist@rest
+ \let\forest@nodewalk@historyback\forest@nodewalk@walklist@walked
+}
+\def\forest@go#1{%
+ \forest@configured@nodewalk{independent}{inherited}{inherited}{#1}{}%
+}
+\def\forest@csvlist@getfirst@#1{% assuming that the list is nonempty and finishes with a comma
+ \forest@csvlist@getfirst@@#1\forest@csvlist@getfirst@@}
+\def\forest@csvlist@getfirst@@#1,#2\forest@csvlist@getfirst@@{#1}
+\def\forest@csvlist@getrest@#1{% assuming that the list is nonempty and finishes with a comma
+ \forest@csvlist@getrest@@#1\forest@csvlist@getrest@@}
+\def\forest@csvlist@getrest@@#1,#2\forest@csvlist@getrest@@{#2}
+\def\forest@csvlist@getfirstrest@#1#2#3{% assuming that the list is nonempty and finishes with a comma
+ % #1 = list, #2 = cs receiving first, #3 = cs receiving rest
+ \forest@csvlist@getfirstrest@@#1\forest@csvlist@getfirstrest@@{#2}{#3}}
+\def\forest@csvlist@getfirstrest@@#1,#2\forest@csvlist@getfirstrest@@#3#4{%
+ \def#3{#1}%
+ \def#4{#2}%
+}
+\def\forest@nodewalk@stripfakesteps#1{%
+ % go to the last valid node if the walk contained any nodes, otherwise restore the current node
+ \edef\forest@marshal{%
+ \unexpanded{#1}%
+ \noexpand\ifnum\noexpand\forest@nodewalk@n=\forest@nodewalk@n\relax
+ \def\noexpand\forest@cn{\forest@cn}%
+ \noexpand\else
+ \unexpanded{%
+ \edef\forest@cn{%
+ \expandafter\forest@csvlist@getfirst@\expandafter{\forest@nodewalk@historyback}%
+ }%
+ }%
+ \noexpand\fi
+ }\forest@marshal
+}
+\def\forest@nodewalk@tolastvalid{%
+ \ifnum\forest@cn=0
+ \edef\forest@cn{\expandafter\forest@csvlist@getfirst@\expandafter{\forest@nodewalk@historyback}}%
+ \ifnum\forest@cn=0
+ \let\forest@cn\forest@nodewalk@origin
+ \fi
+ \fi
+}
+\def\forest@nodewalk@sortlist#1#2#3{%#1=list,#2=to,#3=asc/desc
+ \edef\forest@nodewalksort@list{#1}%
+ \expandafter\forest@nodewalk@sortlist@\expandafter{\number\numexpr#2}{#3}%
+}
+\def\forest@nodewalk@sortlist@#1#2{%#1=to,#2=asc/desc
+ \safeloop
+ \unless\ifnum\safeloopn>#1\relax
+ \expandafter\forest@csvlist@getfirstrest@\expandafter{\forest@nodewalksort@list}\forest@nodewalksort@cn\forest@nodewalksort@list
+ \csedef{forest@nodesort@\safeloopn}{\forest@nodewalksort@cn}%
+ \saferepeat
+ \forestrget{sort by}\forest@nodesort@sortkey
+ \forest@sort\forest@nodesort@cmpnodes\forest@nodesort@let#2{1}{#1}%
+ \def\forest@nodewalksort@sorted{}%
+ \safeloop
+ \unless\ifnum\safeloopn>#1\relax
+ \edef\forest@cn{\csname forest@nodesort@\safeloopn\endcsname}%
+ \forest@nodewalk@makestep
+ \saferepeat
+}
+% \end{macrocode}
+%
+% Find minimal/maximal node in a walk.
+% \begin{macrocode}
+\forestset{
+ define long step={min}{n args=1,@bare,make for}{% the first min in the argument nodewalk
+ \forest@nodewalk{#1,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ }}{}%
+ \forest@nodewalk@minmax{\forest@global@temp}{-1}{<}{\forest@nodewalk@minmax@node,}%
+ },
+ define long step={mins}{n args=1,@bare,make for}{% all mins in the argument nodewalk
+ \forest@nodewalk{#1,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ }}{}%
+ \forest@nodewalk@minmax{\forest@global@temp}{-1}{<}{\forest@nodewalk@minmax@nodes}%
+ },
+ define long step={walk and min}{n args=1,@bare}{%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#1}}%
+ \noexpand\forest@nodewalk@minmax{\noexpand\forest@nodewalk@historyback}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}{<}{\noexpand\forest@nodewalk@minmax@node,}%%
+ }\forest@marshal
+ },
+ define long step={walk and mins}{n args=1,@bare}{%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#1}}%
+ \noexpand\forest@nodewalk@minmax{\noexpand\forest@nodewalk@historyback}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}{<}{\noexpand\forest@nodewalk@minmax@nodes}%%
+ }\forest@marshal
+ },
+ define long step={min in nodewalk}{@bare}{% find the first min in the preceding nodewalk, step to it
+ \forest@nodewalk@minmax{\forest@nodewalk@historyback}{-1}{<}{\forest@nodewalk@minmax@node,}%
+ },
+ define long step={mins in nodewalk}{@bare}{% find mins in the preceding nodewalk, step to mins
+ \forest@nodewalk@minmax{\forest@nodewalk@historyback}{-1}{<}{\forest@nodewalk@minmax@nodes}%
+ },
+ define long step={min in nodewalk'}{@bare}{% find the first min in the preceding nodewalk, step to min in history
+ \forest@nodewalk@minmax{\forest@nodewalk@historyback}{-1}{<}{}%
+ },
+ %
+ define long step={max}{n args=1,@bare,make for}{% the first max in the argument nodewalk
+ \forest@nodewalk{#1,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ }}{}%
+ \forest@nodewalk@minmax{\forest@global@temp}{-1}{>}{\forest@nodewalk@minmax@node,}%
+ },
+ define long step={maxs}{n args=1,@bare,make for}{% all maxs in the argument nodewalk
+ \forest@nodewalk{#1,TeX={%
+ \global\let\forest@global@temp\forest@nodewalk@historyback
+ }}{}%
+ \forest@nodewalk@minmax{\forest@global@temp}{-1}{>}{\forest@nodewalk@minmax@nodes}%
+ },
+ define long step={walk and max}{n args=1,@bare}{%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#1}}%
+ \noexpand\forest@nodewalk@minmax{\noexpand\forest@nodewalk@historyback}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}{>}{\noexpand\forest@nodewalk@minmax@node,}%%
+ }\forest@marshal
+ },
+ define long step={walk and maxs}{n args=1,@bare}{%
+ \edef\forest@marshal{%
+ \noexpand\pgfkeysalso{\unexpanded{#1}}%
+ \noexpand\forest@nodewalk@minmax{\noexpand\forest@nodewalk@historyback}{\noexpand\forest@nodewalk@n-\forest@nodewalk@n}{>}{\noexpand\forest@nodewalk@minmax@nodes}%%
+ }\forest@marshal
+ },
+ define long step={max in nodewalk}{@bare}{% find the first max in the preceding nodewalk, step to it
+ \forest@nodewalk@minmax{\forest@nodewalk@historyback}{-1}{>}{\forest@nodewalk@minmax@node,}%
+ },
+ define long step={maxs in nodewalk}{@bare}{% find maxs in the preceding nodewalk, step to maxs
+ \forest@nodewalk@minmax{\forest@nodewalk@historyback}{-1}{>}{\forest@nodewalk@minmax@nodes}%
+ },
+ define long step={max in nodewalk'}{@bare}{% find the first max in the preceding nodewalk, step to max in history
+ \forest@nodewalk@minmax{\forest@nodewalk@historyback}{-1}{>}{}%
+ },
+}
+
+\def\forest@nodewalk@minmax#1#2#3#4{%
+ % #1 = list of nodes
+ % #2 = max index in list (start with 1)
+ % #3 = min/max = ascending/descending = </>
+ % #4 = how many results? 1 = {\forest@nodewalk@minmax@node,}, all={\forest@nodewalk@minmax@nodes}, walk in history={}
+ \forestrget{sort by}\forest@nodesort@sortkey
+ \edef\forest@nodewalk@minmax@N{\number\numexpr#2}%
+ \edef\forest@nodewalk@minmax@n{}%
+ \edef\forest@nodewalk@minmax@list{#1}%
+ \def\forest@nodewalk@minmax@nodes{}%
+ \def\forest@nodewalk@minmax@node{}%
+ \ifdefempty{\forest@nodewalk@minmax@list}{%
+ }{%
+ \safeloop
+ \expandafter\forest@csvlist@getfirstrest@\expandafter{\forest@nodewalk@minmax@list}\forest@nodewalk@minmax@cn\forest@nodewalk@minmax@list
+ \ifnum\forest@nodewalk@minmax@cn=0 \else
+ \ifdefempty{\forest@nodewalk@minmax@node}{%
+ \edef\forest@nodewalk@minmax@node{\forest@nodewalk@minmax@cn}%
+ \edef\forest@nodewalk@minmax@nodes{\forest@nodewalk@minmax@cn,}%
+ \edef\forest@nodewalk@minmax@n{\safeloopn}%
+ }{%
+ \csedef{forest@nodesort@1}{\forest@nodewalk@minmax@node}%
+ \csedef{forest@nodesort@2}{\forest@nodewalk@minmax@cn}%
+ \forest@nodesort@cmpnodes{2}{1}%
+ \if=\forest@sort@cmp@result
+ \edef\forest@nodewalk@minmax@node{\forest@nodewalk@minmax@cn}%
+ \epreto\forest@nodewalk@minmax@nodes{\forest@nodewalk@minmax@cn,}%
+ \edef\forest@nodewalk@minmax@n{\safeloopn}%
+ \else
+ \if#3\forest@sort@cmp@result
+ \edef\forest@nodewalk@minmax@node{\forest@nodewalk@minmax@cn}%
+ \edef\forest@nodewalk@minmax@nodes{\forest@nodewalk@minmax@cn,}%
+ \edef\forest@nodewalk@minmax@n{\safeloopn}%
+ \fi
+ \fi
+ }%
+ \fi
+ \ifdefempty{\forest@nodewalk@minmax@list}{\forest@tempfalse}{\forest@temptrue}%
+ \ifnum\safeloopn=\forest@nodewalk@minmax@N\relax\forest@temptrue\fi
+ \ifforest@temp
+ \saferepeat
+ \edef\forest@nodewalk@minmax@list{#4}%
+ \ifdefempty\forest@nodewalk@minmax@list{%
+ \forestset{nodewalk/jump back=\forest@nodewalk@minmax@n-1}% CHECK
+ }{%
+ \safeloop
+ \expandafter\forest@csvlist@getfirstrest@\expandafter{\forest@nodewalk@minmax@list}\forest@cn\forest@nodewalk@minmax@list
+ \forest@nodewalk@makestep
+ \ifdefempty{\forest@nodewalk@minmax@list}{\forest@tempfalse}{\forest@temptrue}%
+ \ifforest@temp
+ \saferepeat
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% The short-form step mechanism. The complication is that we want to be able to collect tikz and pgf options here, and it is impossible(?) to know in advance what keys are valid there. So we rather check whether the given keyname is a sequence of short steps; if not, we pass the key on.
+% \begin{macrocode}
+\newtoks\forest@nodewalk@shortsteps@resolution
+\newif\ifforest@nodewalk@areshortsteps
+\pgfqkeys{/forest/nodewalk}{
+ .unknown/.code={%
+ \forest@nodewalk@areshortstepsfalse
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text % no value, so possibly short steps
+ \forest@nodewalk@shortsteps@resolution{}%
+ \forest@nodewalk@areshortstepstrue
+ \expandafter\forest@nodewalk@shortsteps\pgfkeyscurrentname==========,% "=" and "," cannot be short steps, so they are good as delimiters
+ \fi
+ \ifforest@nodewalk@areshortsteps
+ \@escapeif{\expandafter\pgfkeysalso\expandafter{\the\forest@nodewalk@shortsteps@resolution}}%
+ \else
+ \@escapeif{\pgfkeysalso{/forest/\pgfkeyscurrentname={#1}}}%
+ \fi
+ },
+}
+\def\forest@nodewalk@shortsteps{%
+ \futurelet\forest@nodewalk@nexttoken\forest@nodewalk@shortsteps@
+}
+\def\forest@nodewalk@shortsteps@{%
+ \ifx\forest@nodewalk@nexttoken=%
+ \let\forest@nodewalk@nextop\forest@nodewalk@shortsteps@end
+ \else
+ \ifx\forest@nodewalk@nexttoken\bgroup
+ \letcs\forest@nodewalk@nextop{forest@shortstep@group}%
+ \else
+ \let\forest@nodewalk@nextop\forest@nodewalk@shortsteps@@
+ \fi
+ \fi
+ \forest@nodewalk@nextop
+}
+\def\forest@nodewalk@shortsteps@@#1{%
+ \ifcsdef{forest@shortstep@#1}{%
+ \csname forest@shortstep@#1\endcsname
+ }{%
+ \forest@nodewalk@areshortstepsfalse
+ \forest@nodewalk@shortsteps@end
+ }%
+}
+% in the following definitions:
+% #1 = short step
+% #2 = (long) step, or a style in /forest/nodewalk (taking n args)
+\csdef{forest@nodewalk@defshortstep@0@args}#1#2{%
+ \csdef{forest@shortstep@#1}{%
+ \apptotoks\forest@nodewalk@shortsteps@resolution{,#2}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@1@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1{%
+ \edef\forest@marshal####1{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@2@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2{%
+ \edef\forest@marshal####1####2{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@3@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2##3{%
+ \edef\forest@marshal####1####2####3{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}{##3}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@4@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2##3##4{%
+ \edef\forest@marshal####1####2####3####4{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}{##3}{##4}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@5@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2##3##4##5{%
+ \edef\forest@marshal####1####2####3####4####5{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}{##3}{##4}{##5}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@6@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2##3##4##5##6{%
+ \edef\forest@marshal####1####2####3####4####5####6{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}{##3}{##4}{##5}{##6}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@7@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2##3##4##5##6##7{%
+ \edef\forest@marshal####1####2####3####4####5####6####7{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}{##3}{##4}{##5}{##6}{##7}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@8@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2##3##4##5##6##7##8{%
+ \edef\forest@marshal####1####2####3####4####5####6####7####8{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}%
+ \forest@nodewalk@shortsteps}}
+\csdef{forest@nodewalk@defshortstep@9@args}#1#2{%
+ \csdef{forest@shortstep@#1}##1##2##3##4##5##6##7##8##9{%
+ \edef\forest@marshal####1####2####3####4####5####6####7####8####9{#2}%
+ \eapptotoks\forest@nodewalk@shortsteps@resolution{,\forest@marshal{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}%
+ \forest@nodewalk@shortsteps}}
+\forestset{
+ define short step/.code n args=3{% #1 = short step, #2 = n args, #3 = long step
+ \csname forest@nodewalk@defshortstep@#2@args\endcsname{#1}{#3}%
+ },
+}
+\def\forest@nodewalk@shortsteps@end#1,{}
+% \end{macrocode}
+%
+% Define short-form steps.
+% \begin{macrocode}
+\forestset{
+ define short step={group}{1}{group={#1}}, % {braces} are special
+ define short step={p}{0}{previous},
+ define short step={n}{0}{next},
+ define short step={u}{0}{parent},
+ define short step={s}{0}{sibling},
+ define short step={c}{0}{current},
+ define short step={o}{0}{origin},
+ define short step={r}{0}{root},
+ define short step={R}{0}{root'},
+ define short step={P}{0}{previous leaf},
+ define short step={N}{0}{next leaf},
+ define short step={F}{0}{first leaf},
+ define short step={L}{0}{last leaf},
+ define short step={>}{0}{next on tier},
+ define short step={<}{0}{previous on tier},
+ define short step={1}{0}{n=1},
+ define short step={2}{0}{n=2},
+ define short step={3}{0}{n=3},
+ define short step={4}{0}{n=4},
+ define short step={5}{0}{n=5},
+ define short step={6}{0}{n=6},
+ define short step={7}{0}{n=7},
+ define short step={8}{0}{n=8},
+ define short step={9}{0}{n=9},
+ define short step={l}{0}{last},
+ define short step={b}{0}{back},
+ define short step={f}{0}{forward},
+ define short step={v}{0}{last valid},
+ define short step={*}{2}{repeat={#1}{#2}},
+ for 1/.style={for nodewalk={n=1}{#1}},
+ for 2/.style={for nodewalk={n=2}{#1}},
+ for 3/.style={for nodewalk={n=3}{#1}},
+ for 4/.style={for nodewalk={n=4}{#1}},
+ for 5/.style={for nodewalk={n=5}{#1}},
+ for 6/.style={for nodewalk={n=6}{#1}},
+ for 7/.style={for nodewalk={n=7}{#1}},
+ for 8/.style={for nodewalk={n=8}{#1}},
+ for 9/.style={for nodewalk={n=9}{#1}},
+ for -1/.style={for nodewalk={n'=1}{#1}},
+ for -2/.style={for nodewalk={n'=2}{#1}},
+ for -3/.style={for nodewalk={n'=3}{#1}},
+ for -4/.style={for nodewalk={n'=4}{#1}},
+ for -5/.style={for nodewalk={n'=5}{#1}},
+ for -6/.style={for nodewalk={n'=6}{#1}},
+ for -7/.style={for nodewalk={n'=7}{#1}},
+ for -8/.style={for nodewalk={n'=8}{#1}},
+ for -9/.style={for nodewalk={n'=9}{#1}},
+}
+% \end{macrocode}
+%
+% Define multiple-step walks.
+% \begin{macrocode}
+\forestset{
+ define long step={tree}{}{\forest@node@foreach{\forest@nodewalk@makestep}},
+ define long step={tree reversed}{}{\forest@node@foreach@reversed{\forest@nodewalk@makestep}},
+ define long step={tree children-first}{}{\forest@node@foreach@childrenfirst{\forest@nodewalk@makestep}},
+ define long step={tree children-first reversed}{}{\forest@node@foreach@childrenfirst@reversed{\forest@nodewalk@makestep}},
+ define long step={tree breadth-first}{}{\forest@node@foreach@breadthfirst{-1}{\forest@nodewalk@makestep}},
+ define long step={tree breadth-first reversed}{}{\forest@node@foreach@breadthfirst@reversed{-1}{\forest@nodewalk@makestep}},
+ define long step={descendants}{}{\forest@node@foreachdescendant{\forest@nodewalk@makestep}},
+ define long step={descendants reversed}{}{\forest@node@foreachdescendant@reversed{\forest@nodewalk@makestep}},
+ define long step={descendants children-first}{}{\forest@node@foreachdescendant@childrenfirst{\forest@nodewalk@makestep}},
+ define long step={descendants children-first reversed}{}{\forest@node@foreachdescendant@childrenfirst@reversed{\forest@nodewalk@makestep}},
+ define long step={descendants breadth-first}{}{\forest@node@foreach@breadthfirst{0}{\forest@nodewalk@makestep}},
+ define long step={descendants breadth-first reversed}{}{\forest@node@foreach@breadthfirst@reversed{0}{\forest@nodewalk@makestep}},
+ define long step={level}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{#1}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst
+ {\forest@temp}%
+ {\noexpand\ifnum\noexpand\forestove{level}=\forest@temp\relax\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={level>}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{#1}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst
+ {-1}%
+ {\noexpand\ifnum\noexpand\forestove{level}<\forest@temp\relax\noexpand\else\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={level<}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)-1}%
+ \ifnum\forest@temp=-1
+ % special case, as \forest@node@foreach@breadthfirst uses level<0 as a signal for unlimited max level
+ \ifnum\forestove{level}=0
+ \forest@nodewalk@makestep
+ \fi
+ \else
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst
+ {\forest@temp}%
+ {\noexpand\forest@nodewalk@makestep}%
+ }\forest@marshal
+ \fi
+ },
+ define long step={level reversed}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{#1}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst@reversed
+ {\forest@temp}%
+ {\noexpand\ifnum\noexpand\forestove{level}=\forest@temp\relax\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={level reversed>}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{#1}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst@reversed
+ {-1}%
+ {\noexpand\ifnum\noexpand\forestove{level}<\forest@temp\relax\noexpand\else\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={level reversed<}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)-1}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst@reversed
+ {\forest@temp}%
+ {\noexpand\forest@nodewalk@makestep}%
+ }\forest@marshal
+ },
+ %
+ define long step={relative level}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)+\forestove{level}}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst
+ {\forest@temp}%
+ {\noexpand\ifnum\noexpand\forestove{level}=\forest@temp\relax\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={relative level>}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)+\forestove{level}}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst
+ {-1}%
+ {\noexpand\ifnum\noexpand\forestove{level}<\forest@temp\relax\noexpand\else\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={relative level<}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)+\forestove{level}-1}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst
+ {\forest@temp}%
+ {\noexpand\forest@nodewalk@makestep}%
+ }\forest@marshal
+ },
+ define long step={relative level reversed}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)+\forestove{level}}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst@reversed
+ {\forest@temp}%
+ {\noexpand\ifnum\noexpand\forestove{level}=\forest@temp\relax\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={relative level reversed>}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)+\forestove{level}}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst@reversed
+ {-1}%
+ {\noexpand\ifnum\noexpand\forestove{level}<\forest@temp\relax\noexpand\else\noexpand\forest@nodewalk@makestep\noexpand\fi}%
+ }\forest@marshal
+ },
+ define long step={relative level reversed<}{n args=1}{%
+ \forestmathtruncatemacro\forest@temp{(#1)+\forestove{level}-1}%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreach@breadthfirst@reversed
+ {\forest@temp}%
+ {\noexpand\forest@nodewalk@makestep}%
+ }\forest@marshal
+ },
+ define long step={leaves}{}{%
+ \forest@node@foreach{%
+ \ifnum\forestove{n children}=0
+ \forest@nodewalk@makestep
+ \fi
+ }%
+ },
+ define long step={-level}{n args=1,style}{%
+ unique={branch={leaves,{group={repeat={#1}{parent}}}}}
+ },
+ define long step={-level'}{n args=1,style}{%
+ unique={on invalid={fake}{branch={leaves,{group={repeat={#1}{parent}}}}}}
+ },
+ define long step={children}{}{\forest@node@foreachchild{\forest@nodewalk@makestep}},
+ define long step={children reversed}{}{\forest@node@foreachchild@reversed{\forest@nodewalk@makestep}},
+ define long step={current and following siblings}{}{\forest@node@@forselfandfollowingsiblings{\forest@nodewalk@makestep}},
+ define long step={following siblings}{style}{if nodewalk valid={next}{fake=next,current and following siblings}{}},
+ define long step={current and preceding siblings}{}{\forest@node@@forselfandprecedingsiblings{\forest@nodewalk@makestep}},
+ define long step={preceding siblings}{style}{if nodewalk valid={previous}{fake=previous,current and preceding siblings}{}},
+ define long step={current and following siblings reversed}{}{\forest@node@@forselfandfollowingsiblings@reversed{\forest@nodewalk@makestep}},
+ define long step={following siblings reversed}{style}{fake=next,current and following siblings reversed},
+ define long step={current and preceding siblings reversed}{}{\forest@node@@forselfandprecedingsiblings@reversed{\forest@nodewalk@makestep}},
+ define long step={preceding siblings reversed}{style}{fake=previous,current and preceding siblings reversed},
+ define long step={siblings}{style}{for nodewalk'={preceding siblings},following siblings},
+ define long step={siblings reversed}{style}{for nodewalk'={following siblings reversed},preceding siblings reversed},
+ define long step={current and siblings}{style}{for nodewalk'={preceding siblings},current and following siblings},
+ define long step={current and siblings reversed}{style}{for nodewalk'={current and following siblings reversed},preceding siblings reversed},
+ define long step={ancestors}{style}{while={}{parent},last valid},
+ define long step={current and ancestors}{style}{current,ancestors},
+ define long step={following nodes}{style}{while={}{next node},last valid},
+ define long step={preceding nodes}{style}{while={}{previous node},last valid},
+ define long step={current and following nodes}{style}{current,following nodes},
+ define long step={current and preceding nodes}{style}{current,preceding nodes},
+}
+\let\forest@nodewalkstephandler@styletrueorfalse\forest@nodewalkstephandler@styletrue
+% \end{macrocode}
+%
+%
+% \subsection{Dynamic tree}
+% \label{sec:impl:dynamic}
+%
+% \begin{macrocode}
+\def\forest@last@node{0}
+\csdef{forest@nodewalk@saved@dynamic nodes}{}
+\def\forest@nodehandleby@name@nodewalk@or@bracket#1{%
+ \ifx\pgfkeysnovalue#1%
+ \edef\forest@last@node{\forest@node@Nametoid{forest@last@node}}%
+ \else
+ \forest@nodehandleby@nnb@checkfirst#1\forest@END
+ \fi
+}
+\def\forest@nodehandleby@nnb@checkfirst#1#2\forest@END{%
+ \ifx[#1%]
+ \forest@create@node{#1#2}%
+ \cseappto{forest@nodewalk@saved@dynamic nodes}{\forest@last@node,}%
+ \else
+ \forest@forthis{%
+ \forest@nameandgo{#1#2}%
+ \ifnum\forest@cn=0
+ \PackageError{forest}{Cannot use a dynamic key on the invalid node}{}%
+ \fi
+ \let\forest@last@node\forest@cn
+ }%
+ \fi
+}
+\def\forest@create@node#1{% #1=bracket representation
+ \bracketParse{\forest@create@collectafterthought}%
+ \forest@last@node=#1\forest@end@create@node
+}
+\def\forest@create@collectafterthought#1\forest@end@create@node{%
+ \forest@node@Foreach{\forest@last@node}{%
+ \forestoleto{delay}{given options}%
+ \forestoset{given options}{}%
+ }%
+ \forestOeappto{\forest@last@node}{delay}{,\unexpanded{#1}}%
+ \forestOset{\forest@last@node}{given options}{delay={}}%
+}
+\def\forest@create@node@and@process@given@options#1{% #1=bracket representation
+ \bracketParse{\forest@createandprocess@collectafterthought}%
+ \forest@last@node=#1\forest@end@create@node
+}
+\def\forest@createandprocess@collectafterthought#1\forest@end@create@node{%
+ \forest@node@Compute@numeric@ts@info{\forest@last@node}%
+ \forest@saveandrestoremacro\forest@root{%
+ \let\forest@root\forest@last@node
+ \forestset{process keylist=given options}%
+ }%
+}
+\def\forest@saveandrestoremacro#1#2{% #1 = the (zero-arg) macro to save before and restore after processing code in #2
+ \edef\forest@marshal{%
+ \unexpanded{#2}%
+ \noexpand\def\noexpand#1{\expandonce{#1}}%
+ }\forest@marshal
+}
+\def\forest@saveandrestoreifcs#1#2{% #1 = the if cs to save before and restore after processing code in #2
+ \edef\forest@marshal{%
+ \unexpanded{#2}%
+ \ifbool{#1}{\noexpand\setbool{#1}{true}}{\noexpand\setbool{#1}{false}}%
+ }\forest@marshal
+}
+\def\forest@globalsaveandrestoreifcs#1#2{% #1 = the if cs to save before and restore after processing code in #2
+ \edef\forest@marshal{%
+ \unexpanded{#2}%
+ \ifbool{#1}{\global\noexpand\setbool{#1}{true}}{\global\noexpand\setbool{#1}{false}}%
+ }\forest@marshal
+}
+\def\forest@saveandrestoretoks#1#2{% #1 = the toks to save before and restore after processing code in #2
+ \edef\forest@marshal{%
+ \unexpanded{#2}%
+ \noexpand#1{\the#1}%
+ }\forest@marshal
+}
+\def\forest@saveandrestoreregister#1#2{% #1 = the register to save before and restore after processing code in #2
+ \edef\forest@marshal{%
+ \unexpanded{#2}%
+ \noexpand\forestrset{#1}{\forestregister{#1}}%
+ }\forest@marshal
+}
+\forestset{
+ save and restore register/.code 2 args={%
+ \forest@saveandrestoreregister{#1}{%
+ \pgfkeysalso{#2}%
+ }%
+ },
+}
+\def\forest@remove@node#1{%
+ \ifforestdebugdynamics\forestdebug@dynamics{before removing #1}\fi
+ \forest@node@Remove{#1}%
+}
+\def\forest@append@node#1#2{%
+ \ifforestdebugdynamics\forestdebug@dynamics{before appending #2 to #1}\fi
+ \forest@dynamic@circularitytest{#2}{#1}{append}%
+ \forest@node@Remove{#2}%
+ \forest@node@Append{#1}{#2}%
+}
+\def\forest@prepend@node#1#2{%
+ \ifforestdebugdynamics\forestdebug@dynamics{before prepending #2 to #1}\fi
+ \forest@dynamic@circularitytest{#2}{#1}{prepend}%
+ \forest@node@Remove{#2}%
+ \forest@node@Prepend{#1}{#2}%
+}
+\def\forest@insertafter@node#1#2{%
+ \ifforestdebugdynamics\forestdebug@dynamics{before inserting #2 after #1}\fi
+ \forest@node@Remove{#2}%
+ \forest@node@Insertafter{\forestOve{#1}{@parent}}{#2}{#1}%
+}
+\def\forest@insertbefore@node#1#2{%
+ \ifforestdebugdynamics\forestdebug@dynamics{before inserting #2 before #1}\fi
+ \forest@node@Remove{#2}%
+ \forest@node@Insertbefore{\forestOve{#1}{@parent}}{#2}{#1}%
+}
+\def\forest@set@root#1#2{%
+ \ifforestdebugdynamics\forestdebug@dynamics{before setting #1 as root}\fi
+ \def\forest@root{#2}%
+}
+\def\forest@dynamic@circularitytest#1#2#3{%
+ % #1=potenitial ancestor,#2=potential descendant, #3=message prefix
+ \ifnum#1=#2
+ \forest@circularityerror{#1}{#2}{#3}%
+ \else
+ \forest@fornode{#1}{%
+ \forest@ifancestorof{#2}{\forest@circularityerror{#1}{#2}{#3}}{}%
+ }%
+ \fi
+}
+\def\forest@circularityerror#1#2#3{%
+ \forestdebug@typeouttrees{\forest@temp}%
+ \PackageError{forest}{#3ing node id=#1 to id=#2 would result in a circular tree\MessageBreak forest of ids: \forest@temp}{}%
+}%
+\def\forestdebug@dynamics#1{%
+ \forestdebug@typeouttrees\forest@temp
+ \typeout{#1: \forest@temp}%
+}
+\def\forest@appto@do@dynamics#1#2{%
+ \forest@nodehandleby@name@nodewalk@or@bracket{#2}%
+ \ifcase\forest@dynamics@copyhow\relax\or
+ \forest@tree@copy{\forest@last@node}\forest@last@node
+ \or
+ \forest@node@copy{\forest@last@node}\forest@last@node
+ \fi
+ \forest@node@Ifnamedefined{forest@last@node}{%
+ \forestOepreto{\forest@last@node}{delay}
+ {for id={\forest@node@Nametoid{forest@last@node}}{alias=forest@last@node},}%
+ }{}%
+ \edef\forest@marshal{%
+ \noexpand\apptotoks\noexpand\forest@do@dynamics{%
+ \noexpand#1{\forest@cn}{\forest@last@node}}%
+ }\forest@marshal
+}
+\forestset{%
+ create/.code={%
+ \forest@create@node{#1}%
+ \forest@fornode{\forest@last@node}{%
+ \forest@node@setalias{forest@last@node}%
+ \cseappto{forest@nodewalk@saved@dynamic nodes}{\forest@last@node,}%
+ }%
+ },
+ create'/.code={%
+ \forest@create@node@and@process@given@options{#1}%
+ \forest@fornode{\forest@last@node}{%
+ \forest@node@setalias{forest@last@node}%
+ \cseappto{forest@nodewalk@saved@dynamic nodes}{\forest@last@node,}%
+ }%
+ },
+ append/.code={\def\forest@dynamics@copyhow{0}\forest@appto@do@dynamics\forest@append@node{#1}},
+ prepend/.code={\def\forest@dynamics@copyhow{0}\forest@appto@do@dynamics\forest@prepend@node{#1}},
+ insert after/.code={\def\forest@dynamics@copyhow{0}\forest@appto@do@dynamics\forest@insertafter@node{#1}},
+ insert before/.code={\def\forest@dynamics@copyhow{0}\forest@appto@do@dynamics\forest@insertbefore@node{#1}},
+ append'/.code={\def\forest@dynamics@copyhow{1}\forest@appto@do@dynamics\forest@append@node{#1}},
+ prepend'/.code={\def\forest@dynamics@copyhow{1}\forest@appto@do@dynamics\forest@prepend@node{#1}},
+ insert after'/.code={\def\forest@dynamics@copyhow{1}\forest@appto@do@dynamics\forest@insertafter@node{#1}},
+ insert before'/.code={\def\forest@dynamics@copyhow{1}\forest@appto@do@dynamics\forest@insertbefore@node{#1}},
+ append''/.code={\def\forest@dynamics@copyhow{2}\forest@appto@do@dynamics\forest@append@node{#1}},
+ prepend''/.code={\def\forest@dynamics@copyhow{2}\forest@appto@do@dynamics\forest@prepend@node{#1}},
+ insert after''/.code={\def\forest@dynamics@copyhow{2}\forest@appto@do@dynamics\forest@insertafter@node{#1}},
+ insert before''/.code={\def\forest@dynamics@copyhow{2}\forest@appto@do@dynamics\forest@insertbefore@node{#1}},
+ remove/.code={%
+ \pgfkeysalso{alias=forest@last@node}%
+ \cseappto{forest@nodewalk@saved@dynamic nodes}{\forest@cn,}%
+ \expandafter\apptotoks\expandafter\forest@do@dynamics\expandafter{%
+ \expandafter\forest@remove@node\expandafter{\forest@cn}}%
+ },
+ set root/.code={%
+ \def\forest@dynamics@copyhow{0}%
+ \forest@appto@do@dynamics\forest@set@root{#1}%
+ },
+ replace by/.code={\forest@replaceby@code{#1}{insert after}},
+ replace by'/.code={\forest@replaceby@code{#1}{insert after'}},
+ replace by''/.code={\forest@replaceby@code{#1}{insert after''}},
+ sort/.code={%
+ \eapptotoks\forest@do@dynamics{%
+ \def\noexpand\forest@nodesort@sortkey{\forestrv{sort by}}%
+ \noexpand\forest@nodesort\noexpand\forest@sort@ascending{\forest@cn}
+ }%
+ },
+ sort'/.code={%
+ \eapptotoks\forest@do@dynamics{%
+ \def\noexpand\forest@nodesort@sortkey{\forestrv{sort by}}%
+ \noexpand\forest@nodesort\noexpand\forest@sort@descending{\forest@cn}
+ }%
+ },
+}
+\def\forest@replaceby@code#1#2{%#1=node spec,#2=insert after['][']
+ \ifnum\forestove{@parent}=0
+ \cseappto{forest@nodewalk@saved@dynamic nodes}{\forest@cn,}%
+ \pgfkeysalso{alias=forest@last@node,set root={#1}}%
+ \else
+ \cseappto{forest@nodewalk@saved@dynamic nodes}{\forest@cn,}%
+ \pgfkeysalso{alias=forest@last@node,#2={#1}}%
+ \eapptotoks\forest@do@dynamics{%
+ \noexpand\ifnum\noexpand\forestOve{\forest@cn}{@parent}=\forestove{@parent}
+ \noexpand\forest@remove@node{\forest@cn}%
+ \noexpand\fi
+ }%
+ \fi
+}
+\def\forest@nodesort#1#2{% #1 = direction, #2 = parent node
+ \ifforestdebugdynamics\forestdebug@dynamics{before sorting children of #2}\fi
+ \forest@fornode{#2}{\forest@nodesort@#1}%
+ \ifforestdebugdynamics\forestdebug@dynamics{after sorting children of #2}\fi
+}
+\def\forest@nodesort@#1{%
+ % prepare the array of child ids
+ \c@pgf@counta=0
+ \forestoget{@first}\forest@nodesort@id
+ \forest@loop
+ \ifnum\forest@nodesort@id>0
+ \advance\c@pgf@counta 1
+ \csedef{forest@nodesort@\the\c@pgf@counta}{\forest@nodesort@id}%
+ \forestOget{\forest@nodesort@id}{@next}\forest@nodesort@id
+ \forest@repeat
+ % sort
+ \forestoget{n children}\forest@nodesort@n
+ \forest@sort\forest@nodesort@cmpnodes\forest@nodesort@let#1{1}{\forest@nodesort@n}%
+ % remove all children
+ \forestoget{@first}\forest@nodesort@id
+ \forest@loop
+ \ifnum\forest@nodesort@id>0
+ \forest@node@Remove{\forest@nodesort@id}%
+ \forestoget{@first}\forest@nodesort@id
+ \forest@repeat
+ % insert the children in new order
+ \c@pgf@counta=0
+ \forest@loop
+ \ifnum\c@pgf@counta<\forest@nodesort@n\relax
+ \advance\c@pgf@counta 1
+ \forest@node@append{\csname forest@nodesort@\the\c@pgf@counta\endcsname}%
+ \forest@repeat
+}
+\def\forest@nodesort@cmpnodes#1#2{%
+ \expandafter\forest@nodesort@cmpnodes@\forest@nodesort@sortkey,\forest@END{#1}{#2}%
+}
+\def\forest@nodesort@cmpnodes@#1,#2\forest@END#3#4{%
+ % #1=process ins+arg for this dimension, #2=for next dimensions
+ % #3, #4 = node ids
+ {%
+ \forest@fornode{\csname forest@nodesort@#3\endcsname}{%
+ \forestmathsetmacro\forest@nodesort@resulta{#1}%
+ }%
+ \forest@fornode{\csname forest@nodesort@#4\endcsname}{%
+ \forestmathsetmacro\forest@nodesort@resultb{#1}%
+ }%
+ \ifx\forestmathresulttype\forestmathtype@generic
+ \forest@cmp@error{\forest@nodesort@resulta}{\forest@nodesort@resultb}%
+ \fi
+ \edef\forest@temp{%
+ \noexpand\forest@nodesort@cmp
+ {\expandonce{\forest@nodesort@resulta}}%
+ {\expandonce{\forest@nodesort@resultb}}%
+ }%
+ \xdef\forest@global@temp{\forest@temp}%
+ }%
+ \if=\forest@global@temp
+ \let\forest@next\forest@nodesort@cmpnodes@
+ \else
+ \let\forest@next\forest@nodesort@cmpnodes@finish
+ \fi
+ \ifstrempty{#2}{\let\forest@next\forest@nodesort@cmpnodes@finish}{}%
+ \forest@next#2\forest@END{#3}{#4}%
+}
+\def\forest@nodesort@cmpnodes@finish#1\forest@END#2#3{%
+ \let\forest@sort@cmp@result\forest@global@temp
+}
+% \end{macrocode}
+% Usage: |\forest@nodesort@cmp|\meta{first}\meta{second}. Fully expandable. Return |<|, |=| or |>|, as required by |\forest@sort|.
+% \begin{macrocode}
+\def\forest@nodesort@cmp{\csname fRsT@nsc@\forestmathresulttype\endcsname}
+\def\fRsT@nsc@#1{\csname fRsT@nsc@#1\endcsname}
+\def\fRsT@nsc@n#1#2{\ifnum#1<#2 <\else\ifnum#1=#2 =\else>\fi\fi}
+\def\fRsT@nsc@d#1#2{\ifdim#1<#2 <\else\ifdim#1=#2 =\else>\fi\fi}
+\def\fRsT@nsc@P#1#2{\ifdim#1pt<#2pt <\else\ifdim#1pt=#2pt =\else>\fi\fi}
+\def\fRsT@nsc@t#1#2{\csname fRsT@nsc@\pdfstrcmp{#1}{#2}\endcsname}
+\def\fRsT@nsc@T#1#2{\csname fRsT@nsc@\pdfstrcmp{#2}{#1}\endcsname}
+\csdef{fRsT@nsc@-1}{<}
+\csdef{fRsT@nsc@0}{=}
+\csdef{fRsT@nsc@1}{>}
+\def\forest@nodesort@let#1#2{%
+ \csletcs{forest@nodesort@#1}{forest@nodesort@#2}%
+}
+\forestset{
+ define long step={last dynamic node}{style,must start at valid node=false}{%
+ name=forest@last@node
+ }
+}
+% \end{macrocode}
+%
+% \section{Stages}
+%
+% \begin{macrocode}
+\def\forest@root{0}
+ %%% begin listing region: stages
+\forestset{
+ stages/.style={
+ for root'={
+ process keylist register=default preamble,
+ process keylist register=preamble
+ },
+ process keylist=given options,
+ process keylist=before typesetting nodes,
+ typeset nodes stage,
+ process keylist=before packing,
+ pack stage,
+ process keylist=before computing xy,
+ compute xy stage,
+ process keylist=before drawing tree,
+ draw tree stage
+ },
+ typeset nodes stage/.style={for root'=typeset nodes},
+ pack stage/.style={for root'=pack},
+ compute xy stage/.style={for root'=compute xy},
+ draw tree stage/.style={for root'=draw tree},
+}
+ %%% end listing region: stages
+\forestset{
+ process keylist/.code={%
+ \forest@process@hook@keylist{#1}{#1 processing order/.try,processing order/.lastretry}},
+ process keylist'/.code 2 args={\forest@process@hook@keylist@nodynamics{#1}{#2}},
+ process keylist''/.code 2 args={\forest@process@hook@keylist@{#1}{#2}},
+ process keylist register/.code={\forest@process@keylist@register{#1}},
+ process delayed/.code={%
+ \forest@havedelayedoptions{@delay}{#1}%
+ \ifforest@havedelayedoptions
+ \forest@process@hook@keylist@nodynamics{@delay}{#1}%
+ \fi
+ },
+ do dynamics/.code={%
+ \the\forest@do@dynamics
+ \forest@do@dynamics{}%
+ \forest@node@Compute@numeric@ts@info{\forest@root}%
+ },
+ declare keylist={given options}{},
+ declare keylist={before typesetting nodes}{},
+ declare keylist={before packing}{},
+ declare keylist={before packing node}{},
+ declare keylist={after packing node}{},
+ declare keylist={before computing xy}{},
+ declare keylist={before drawing tree}{},
+ declare keylist={delay}{},
+ delay n/.code 2 args={%
+ \forestmathsetcount\forest@temp@count{#1}%
+ \pgfkeysalso{delay n'={\forest@temp@count}{#2}}%
+ },
+ delay n'/.code 2 args={
+ \ifnum#1=0
+ \pgfkeysalso{#2}%
+ \else
+ \pgfkeysalso{delay={delay n'/.expand once=\expandafter{\number\numexpr#1-1\relax}{#2}}}%
+ \fi
+ },
+ if have delayed/.style 2 args={if have delayed'={processing order}{#1}{#2}},
+ if have delayed'/.code n args=3{%
+ \forest@havedelayedoptionsfalse
+ \forest@forthis{%
+ \forest@nodewalk{#1}{%
+ TeX={%
+ \forestoget{delay}\forest@temp@delayed
+ \ifdefempty\forest@temp@delayed{}{\forest@havedelayedoptionstrue}%
+ }%
+ }%
+ }%
+ \ifforest@havedelayedoptions\pgfkeysalso{#2}\else\pgfkeysalso{#3}\fi
+ },
+ typeset nodes/.code={%
+ \forest@drawtree@preservenodeboxes@false
+ \forest@nodewalk
+ {typeset nodes processing order/.try,processing order/.lastretry}%
+ {TeX={\forest@node@typeset}}%
+ },
+ typeset nodes'/.code={%
+ \forest@drawtree@preservenodeboxes@true
+ \forest@nodewalk
+ {typeset nodes processing order/.try,processing order/.lastretry}%
+ {TeX={\forest@node@typeset}}%
+ },
+ typeset node/.code={%
+ \forest@drawtree@preservenodeboxes@false
+ \forest@node@typeset
+ },
+ pack/.code={\forest@pack},
+ pack'/.code={\forest@pack@onlythisnode},
+ compute xy/.code={\forest@node@computeabsolutepositions},
+ draw tree box/.store in=\forest@drawtreebox,
+ draw tree box,
+ draw tree/.code={%
+ \forest@drawtree@preservenodeboxes@false
+ \forest@node@drawtree
+ },
+ draw tree'/.code={%
+ \forest@drawtree@preservenodeboxes@true
+ \forest@node@drawtree
+ },
+ %%% begin listing region: draw_tree_method
+ draw tree method/.style={
+ for nodewalk={
+ draw tree nodes processing order/.try,
+ draw tree processing order/.retry,
+ processing order/.lastretry
+ }{draw tree node},
+ for nodewalk={
+ draw tree edges processing order/.try,
+ draw tree processing order/.retry,
+ processing order/.lastretry
+ }{draw tree edge},
+ for nodewalk={
+ draw tree tikz processing order/.try,
+ draw tree processing order/.retry,
+ processing order/.lastretry
+ }{draw tree tikz}
+ },
+ %%% end listing region: draw_tree_method
+ draw tree node/.code={\forest@draw@node},
+ draw tree node'/.code={\forest@draw@node@},
+ if node drawn/.code n args={3}{%
+ \forest@forthis{%
+ \forest@configured@nodewalk{independent}{inherited}{fake}{#1}{}%
+ \ifnum\forest@cn=0
+ \forest@tempfalse
+ \else
+ \ifcsdef{forest@drawn@\forest@cn}{\forest@temptrue}{\forest@tempfalse}%
+ \fi
+ }%
+ \ifforest@temp\pgfkeysalso{#2}\else\pgfkeysalso{#3}\fi
+ },
+ draw tree edge/.code={\forest@draw@edge},
+ draw tree edge'/.code={\forest@draw@edge@},
+ draw tree tikz/.code={\forest@draw@tikz@}, % always!
+ draw tree tikz'/.code={\forest@draw@tikz@},
+ processing order/.nodewalk style={tree},
+ %given options processing order/.style={processing order},
+ %before typesetting nodes processing order/.style={processing order},
+ %before packing processing order/.style={processing order},
+ %before computing xy processing order/.style={processing order},
+ %before drawing tree processing order/.style={processing order},
+}
+\newtoks\forest@do@dynamics
+\newif\ifforest@havedelayedoptions
+\def\forest@process@hook@keylist#1#2{%,#1=keylist,#2=processing order nodewalk
+ \safeloop
+ \forest@fornode{\forest@root}{\forest@process@hook@keylist@{#1}{#2}}%
+ \expandafter\ifstrempty\expandafter{\the\forest@do@dynamics}{}{%
+ \the\forest@do@dynamics
+ \forest@do@dynamics={}%
+ \forest@node@Compute@numeric@ts@info{\forest@root}%
+ }%
+ \forest@fornode{\forest@root}{\forest@havedelayedoptions{#1}{#2}}%
+ \ifforest@havedelayedoptions
+ \saferepeat
+}
+\def\forest@process@hook@keylist@nodynamics#1#2{%#1=keylist,#2=processing order nodewalk
+ % note: this macro works on (nodewalk starting at) the current node
+ \safeloop
+ \forest@forthis{\forest@process@hook@keylist@{#1}{#2}}%
+ \forest@havedelayedoptions{#1}{#2}%
+ \ifforest@havedelayedoptions
+ \saferepeat
+}
+\def\forest@process@hook@keylist@#1#2{%#1=keylist,#2=processing order nodewalk
+ \forest@nodewalk{#2}{%
+ TeX={%
+ \forestoget{#1}\forest@temp@keys
+ \ifdefvoid\forest@temp@keys{}{%
+ \forestoset{#1}{}%
+ \expandafter\forestset\expandafter{\forest@temp@keys}%
+ }%
+ }%
+ }%
+}
+\def\forest@process@keylist@register#1{%
+ \edef\forest@marshal{%
+ \noexpand\forestset{\forestregister{#1}}%
+ }\forest@marshal
+}
+% \end{macrocode}
+% Clear the keylist, transfer delayed into it, and set |\ifforest@havedelayedoptions|.
+% \begin{macrocode}
+\def\forest@havedelayedoptions#1#2{%#1 = keylist, #2=nodewalk
+ \forest@havedelayedoptionsfalse
+ \forest@forthis{%
+ \forest@nodewalk{#2}{%
+ TeX={%
+ \forestoget{delay}\forest@temp@delayed
+ \ifdefempty\forest@temp@delayed{}{\forest@havedelayedoptionstrue}%
+ \forestolet{#1}\forest@temp@delayed
+ \forestoset{delay}{}%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \subsection{Typesetting nodes}
+%
+% \begin{macrocode}
+\def\forest@node@typeset{%
+ \let\forest@next\forest@node@typeset@
+ \forestoifdefined{@box}{%
+ \forestoget{@box}\forest@temp
+ \ifdefempty\forest@temp{%
+ \locbox\forest@temp@box
+ \forestolet{@box}\forest@temp@box
+ }{%
+ \ifforest@drawtree@preservenodeboxes@
+ \let\forest@next\relax
+ \fi
+ }%
+ }{%
+ \locbox\forest@temp@box
+ \forestolet{@box}\forest@temp@box
+ }%
+ \def\forest@node@typeset@restore{}%
+ \ifdefined\ifsa@tikz\forest@standalone@hack\fi
+ \forest@next
+ \forest@node@typeset@restore
+}
+\def\forest@standalone@hack{%
+ \ifsa@tikz
+ \let\forest@standalone@tikzpicture\tikzpicture
+ \let\forest@standalone@endtikzpicture\endtikzpicture
+ \let\tikzpicture\sa@orig@tikzpicture
+ \let\endtikzpicture\sa@orig@endtikzpicture
+ \def\forest@node@typeset@restore{%
+ \let\tikzpicture\forest@standalone@tikzpicture
+ \let\endtikzpicture\forest@standalone@endtikzpicture
+ }%
+ \fi
+}
+\newbox\forest@box
+\def\forest@pgf@notyetpositioned{not yet positionedPGFINTERNAL}
+\def\forest@node@typeset@{%
+ \forestanchortotikzanchor{anchor}\forest@temp
+ \edef\forest@marshal{%
+ \noexpand\forestolet{anchor}\noexpand\forest@temp
+ \noexpand\forest@node@typeset@@
+ \noexpand\forestoset{anchor}{\forestov{anchor}}%
+ }\forest@marshal
+}
+\def\forest@node@typeset@@{%
+ \forestoget{name}\forest@nodename
+ \edef\forest@temp@nodeformat{\forestove{node format}}%
+ \gdef\forest@smuggle{}%
+ \setbox0=\hbox{%
+ \begin{tikzpicture}[%
+ /forest/copy command key={/tikz/anchor}{/tikz/forest@orig@anchor},
+ anchor/.style={%
+ /forest/TeX={\forestanchortotikzanchor{##1}\forest@temp@anchor},
+ forest@orig@anchor/.expand once=\forest@temp@anchor
+ }]
+ \pgfpositionnodelater{\forest@positionnodelater@save}%
+ \forest@temp@nodeformat
+ \pgfinterruptpath
+ \pgfpointanchor{\forest@pgf@notyetpositioned\forest@nodename}{forestcomputenodeboundary}%
+ \endpgfinterruptpath
+ \end{tikzpicture}%
+ }%
+ \setbox\forestove{@box}=\box\forest@box % smuggle the box
+ \forestolet{@boundary}\forest@global@boundary
+ \forest@smuggle % ... and the rest
+}
+
+
+\forestset{
+ declare readonly dimen={min x}{0pt},
+ declare readonly dimen={min y}{0pt},
+ declare readonly dimen={max x}{0pt},
+ declare readonly dimen={max y}{0pt},
+}
+\def\forest@patch@enormouscoordinateboxbounds@plus#1{%
+ \expandafter\ifstrequal\expandafter{#1}{16000.0pt}{\edef#1{0.0\pgfmath@pt}}{}%
+}
+\def\forest@patch@enormouscoordinateboxbounds@minus#1{%
+ \expandafter\ifstrequal\expandafter{#1}{-16000.0pt}{\edef#1{0.0\pgfmath@pt}}{}%
+}
+\def\forest@positionnodelater@save{%
+ \global\setbox\forest@box=\box\pgfpositionnodelaterbox
+ \xappto\forest@smuggle{\noexpand\forestoset{later@name}{\pgfpositionnodelatername}}%
+ % a bug in pgf? ---well, here's a patch
+ \forest@patch@enormouscoordinateboxbounds@plus\pgfpositionnodelaterminx
+ \forest@patch@enormouscoordinateboxbounds@plus\pgfpositionnodelaterminy
+ \forest@patch@enormouscoordinateboxbounds@minus\pgfpositionnodelatermaxx
+ \forest@patch@enormouscoordinateboxbounds@minus\pgfpositionnodelatermaxy
+ % end of patch
+ % when shape=coordinate, pgf returns \pgfpositionnodelater... with wrong catcode of pt
+ \forest@pnn@addtosmuggle{min x}\pgfpositionnodelaterminx
+ \forest@pnn@addtosmuggle{max x}\pgfpositionnodelatermaxx
+ \forest@pnn@addtosmuggle{min y}\pgfpositionnodelaterminy
+ \forest@pnn@addtosmuggle{max y}\pgfpositionnodelatermaxy
+}
+\def\forest@pnn@addtosmuggle#1#2{%
+ {%
+ \pgfutil@tempdima=#2\relax
+ \xappto\forest@smuggle{\noexpand\forestoset{#1}{\the\pgfutil@tempdima}}%
+ }%
+}
+\def\forest@node@forest@positionnodelater@restore{%
+ \ifforest@drawtree@preservenodeboxes@
+ \let\forest@boxorcopy\copy
+ \else
+ \let\forest@boxorcopy\box
+ \fi
+ \forestoget{@box}\forest@temp
+ \setbox\pgfpositionnodelaterbox=\forest@boxorcopy\forest@temp
+ \edef\pgfpositionnodelatername{\forestove{later@name}}%
+ \edef\pgfpositionnodelaterminx{\forestove{min x}}%
+ \edef\pgfpositionnodelaterminy{\forestove{min y}}%
+ \edef\pgfpositionnodelatermaxx{\forestove{max x}}%
+ \edef\pgfpositionnodelatermaxy{\forestove{max y}}%
+ \ifforest@drawtree@preservenodeboxes@
+ \else
+ \forestoset{@box}{}%
+ \fi
+}
+% \end{macrocode}
+%
+% \subsection{Packing}
+% \label{imp:packing}
+%
+% Method |pack| should be called to calculate the positions of
+% descendant nodes; the positions are stored in attributes |l| and |s|
+% of these nodes, in a level/sibling coordinate system with origin at
+% the parent's anchor.
+% \begin{macrocode}
+\def\forest@pack{%
+ \pgfsyssoftpath@getcurrentpath\forest@pack@original@path
+ \forest@pack@computetiers
+ \forest@pack@computegrowthuniformity
+ \forest@@pack
+ \pgfsyssoftpath@setcurrentpath\forest@pack@original@path
+}
+\def\forest@@pack{%
+ \ifnum\forestove{uniform growth}>0
+ \ifnum\forestove{n children}>0
+ \forest@pack@level@uniform
+ \forest@pack@aligntiers@ofsubtree
+ \forest@pack@sibling@uniform@recursive
+ \fi
+ \else
+ \forest@node@foreachchild{\forest@@pack}%
+ \forest@process@hook@keylist@nodynamics{before packing node}{current}%
+ \ifnum\forestove{n children}>0
+ \forest@pack@level@nonuniform
+ \forest@pack@aligntiers
+ \forest@pack@sibling@uniform@applyreversed
+ \fi
+ \forestoget{after packing node}\forest@temp@keys
+ \forest@process@hook@keylist@nodynamics{after packing node}{current}%
+ \fi
+}
+% \forestset{recalculate tree boundary/.code={\forest@node@recalculate@edges}}
+% \def\forest@node@recalculate@edges{%
+% \edef\forest@marshal{%
+% \noexpand\forest@forthis{\noexpand\forest@node@getedges{\forestove{grow}}}%
+% }\forest@marshal
+% }
+\def\forest@pack@onlythisnode{%
+ \ifnum\forestove{n children}>0
+ \forest@pack@computetiers
+ \forest@pack@level@nonuniform
+ \forest@pack@aligntiers
+ \forest@node@foreachchild{\forestoset{s}{0\pgfmath@pt}}%
+ \forest@pack@sibling@uniform@applyreversed
+ \fi
+}
+% \end{macrocode}
+%
+% Compute growth uniformity for the subtree. A tree grows uniformly is all its branching nodes have
+% the same |grow|.
+% \begin{macrocode}
+\def\forest@pack@computegrowthuniformity{%
+ \forest@node@foreachchild{\forest@pack@computegrowthuniformity}%
+ \edef\forest@pack@cgu@uniformity{%
+ \ifnum\forestove{n children}=0
+ 2\else 1\fi
+ }%
+ \forestoget{grow}\forest@pack@cgu@parentgrow
+ \forest@node@foreachchild{%
+ \ifnum\forestove{uniform growth}=0
+ \def\forest@pack@cgu@uniformity{0}%
+ \else
+ \ifnum\forestove{uniform growth}=1
+ \ifnum\forestove{grow}=\forest@pack@cgu@parentgrow\relax\else
+ \def\forest@pack@cgu@uniformity{0}%
+ \fi
+ \fi
+ \fi
+ }%
+ \forestoget{before packing node}\forest@temp@a
+ \forestoget{after packing node}\forest@temp@b
+ \expandafter\expandafter\expandafter\ifstrempty\expandafter\expandafter\expandafter{\expandafter\forest@temp@a\forest@temp@b}{%
+ \forestolet{uniform growth}\forest@pack@cgu@uniformity
+ }{%
+ \forestoset{uniform growth}{0}%
+ }%
+}
+% \end{macrocode}
+%
+% Pack children in the level dimension in a uniform tree.
+% \begin{macrocode}
+\def\forest@pack@level@uniform{%
+ \let\forest@plu@minchildl\relax
+ \forestoget{grow}\forest@plu@grow
+ \forest@node@foreachchild{%
+ \forest@node@getboundingrectangle@ls{\forest@plu@grow}%
+ \advance\pgf@xa\forestove{l}\relax
+ \ifx\forest@plu@minchildl\relax
+ \edef\forest@plu@minchildl{\the\pgf@xa}%
+ \else
+ \ifdim\pgf@xa<\forest@plu@minchildl\relax
+ \edef\forest@plu@minchildl{\the\pgf@xa}%
+ \fi
+ \fi
+ }%
+ \forest@node@getboundingrectangle@ls{\forest@plu@grow}%
+ \pgfutil@tempdima=\pgf@xb\relax
+ \advance\pgfutil@tempdima -\forest@plu@minchildl\relax
+ \advance\pgfutil@tempdima \forestove{l sep}\relax
+ \ifdim\pgfutil@tempdima>0pt
+ \forest@node@foreachchild{%
+ \forestoeset{l}{\the\dimexpr\forestove{l}+\the\pgfutil@tempdima}%
+ }%
+ \fi
+ \forest@node@foreachchild{%
+ \ifnum\forestove{n children}>0
+ \forest@pack@level@uniform
+ \fi
+ }%
+}
+% \end{macrocode}
+%
+% Pack children in the level dimension in a non-uniform tree. (Expects
+% the children to be fully packed.)
+% \begin{macrocode}
+\def\forest@pack@level@nonuniform{%
+ \let\forest@plu@minchildl\relax
+ \forestoget{grow}\forest@plu@grow
+ \forest@node@foreachchild{%
+ \forest@node@getedge{negative}{\forest@plu@grow}{\forest@plnu@negativechildedge}%
+ \forest@node@getedge{positive}{\forest@plu@grow}{\forest@plnu@positivechildedge}%
+ \def\forest@plnu@childedge{\forest@plnu@negativechildedge\forest@plnu@positivechildedge}%
+ \forest@path@getboundingrectangle@ls\forest@plnu@childedge{\forest@plu@grow}%
+ \advance\pgf@xa\forestove{l}\relax
+ \ifx\forest@plu@minchildl\relax
+ \edef\forest@plu@minchildl{\the\pgf@xa}%
+ \else
+ \ifdim\pgf@xa<\forest@plu@minchildl\relax
+ \edef\forest@plu@minchildl{\the\pgf@xa}%
+ \fi
+ \fi
+ }%
+ \forest@node@getboundingrectangle@ls{\forest@plu@grow}%
+ \pgfutil@tempdima=\pgf@xb\relax
+ \advance\pgfutil@tempdima -\forest@plu@minchildl\relax
+ \advance\pgfutil@tempdima \forestove{l sep}\relax
+ \ifdim\pgfutil@tempdima>0pt
+ \forest@node@foreachchild{%
+ \forestoeset{l}{\the\dimexpr\the\pgfutil@tempdima+\forestove{l}}%
+ }%
+ \fi
+}
+% \end{macrocode}
+%
+% Align tiers.
+% \begin{macrocode}
+\def\forest@pack@aligntiers{%
+ \forestoget{grow}\forest@temp@parentgrow
+ \forestoget{@tiers}\forest@temp@tiers
+ \forlistloop\forest@pack@aligntier@\forest@temp@tiers
+}
+\def\forest@pack@aligntiers@ofsubtree{%
+ \forest@node@foreach{\forest@pack@aligntiers}%
+}
+\def\forest@pack@aligntiers@computeabsl{%
+ \forestoleto{abs@l}{l}%
+ \forest@node@foreachdescendant{\forest@pack@aligntiers@computeabsl@}%
+}
+\def\forest@pack@aligntiers@computeabsl@{%
+ \forestoeset{abs@l}{\the\dimexpr\forestove{l}+\forestOve{\forestove{@parent}}{abs@l}}%
+}
+\def\forest@pack@aligntier@#1{%
+ \forest@pack@aligntiers@computeabsl
+ \pgfutil@tempdima=-\maxdimen\relax
+ \def\forest@temp@currenttier{#1}%
+ \forest@node@foreach{%
+ \forestoget{tier}\forest@temp@tier
+ \ifx\forest@temp@currenttier\forest@temp@tier
+ \ifdim\pgfutil@tempdima<\forestove{abs@l}\relax
+ \pgfutil@tempdima=\forestove{abs@l}\relax
+ \fi
+ \fi
+ }%
+ \ifdim\pgfutil@tempdima=-\maxdimen\relax\else
+ \forest@node@foreach{%
+ \forestoget{tier}\forest@temp@tier
+ \ifx\forest@temp@currenttier\forest@temp@tier
+ \forestoeset{l}{\the\dimexpr\pgfutil@tempdima-\forestove{abs@l}+\forestove{l}}%
+ \fi
+ }%
+ \fi
+}
+% \end{macrocode}
+% Pack children in the sibling dimension in a uniform tree:
+% recursion.
+% \begin{macrocode}
+\def\forest@pack@sibling@uniform@recursive{%
+ \forest@node@foreachchild{\forest@pack@sibling@uniform@recursive}%
+ \forest@pack@sibling@uniform@applyreversed
+}
+% \end{macrocode}
+% Pack children in the sibling dimension in a uniform tree: applyreversed.
+% \begin{macrocode}
+\def\forest@pack@sibling@uniform@applyreversed{%
+ \ifnum\forestove{n children}>1
+ \ifnum\forestove{reversed}=0
+ \forest@pack@sibling@uniform@main{first}{last}{next}{previous}%
+ \else
+ \forest@pack@sibling@uniform@main{last}{first}{previous}{next}%
+ \fi
+ \else
+ \ifnum\forestove{n children}=1
+% \end{macrocode}
+% No need to run packing, but we still need to align the children.
+% \begin{macrocode}
+ \csname forest@calign@\forestove{calign}\endcsname
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Pack children in the sibling dimension in a uniform tree: the main
+% routine.
+% \begin{macrocode}
+\def\forest@pack@sibling@uniform@main#1#2#3#4{%
+% \end{macrocode}
+% Loop through the children. At each iteration, we compute the
+% distance between the negative edge of the current child and the
+% positive edge of the block of the previous children, and then set
+% the |s| attribute of the current child accordingly.
+%
+% We start the loop with the second (to last) child, having
+% initialized the positive edge of the previous children to the
+% positive edge of the first child.
+% \begin{macrocode}
+ \forestoget{@#1}\forest@child
+ \edef\forest@marshal{%
+ \noexpand\forest@fornode{\forestove{@#1}}{%
+ \noexpand\forest@node@getedge
+ {positive}%
+ {\forestove{grow}}%
+ \noexpand\forest@temp@edge
+ }%
+ }\forest@marshal
+ \forest@pack@pgfpoint@childsposition\forest@child
+ \let\forest@previous@positive@edge\pgfutil@empty
+ \forest@extendpath\forest@previous@positive@edge\forest@temp@edge{}%
+ \forestOget{\forest@child}{@#3}\forest@child
+% \end{macrocode}
+% Loop until the current child is the null node.
+% \begin{macrocode}
+ \edef\forest@previous@child@s{0\pgfmath@pt}%
+ \safeloop
+ \unless\ifnum\forest@child=0
+% \end{macrocode}
+% Get the negative edge of the child.
+% \begin{macrocode}
+ \edef\forest@temp{%
+ \noexpand\forest@fornode{\forest@child}{%
+ \noexpand\forest@node@getedge
+ {negative}%
+ {\forestove{grow}}%
+ \noexpand\forest@temp@edge
+ }%
+ }\forest@temp
+% \end{macrocode}
+% Set |\pgf@x| and |\pgf@y| to the position of the child (in the
+% coordinate system of this node).
+% \begin{macrocode}
+ \forest@pack@pgfpoint@childsposition\forest@child
+% \end{macrocode}
+% Translate the edge of the child by the child's position.
+% \begin{macrocode}
+ \let\forest@child@negative@edge\pgfutil@empty
+ \forest@extendpath\forest@child@negative@edge\forest@temp@edge{}%
+% \end{macrocode}
+% Setup the grow line: the angle is given by this node's |grow|
+% attribute.
+% \begin{macrocode}
+ \forest@setupgrowline{\forestove{grow}}%
+% \end{macrocode}
+% Get the distance (wrt the grow line) between the positive edge of
+% the previous children and the negative edge of the current
+% child. (The distance can be negative!)
+% \begin{macrocode}
+ \forest@distance@between@edge@paths\forest@previous@positive@edge\forest@child@negative@edge\forest@csdistance
+% \end{macrocode}
+% If the distance is |\relax|, the projections of the edges onto the
+% grow line don't overlap: do nothing. Otherwise, shift the current child so that its distance to the block
+% of previous children is |s_sep|.
+% \begin{macrocode}
+ \ifx\forest@csdistance\relax
+ %\forestOeset{\forest@child}{s}{\forest@previous@child@s}%
+ \else
+ \advance\pgfutil@tempdimb-\forest@csdistance\relax
+ \advance\pgfutil@tempdimb\forestove{s sep}\relax
+ \forestOeset{\forest@child}{s}{\the\dimexpr\forestOve{\forest@child}{s}-\forest@csdistance+\forestove{s sep}}%
+ \fi
+% \end{macrocode}
+% Retain monotonicity (is this ok?). (This problem arises when the adjacent children's |l| are too
+% far apart.)
+% \begin{macrocode}
+ \ifdim\forestOve{\forest@child}{s}<\forest@previous@child@s\relax
+ \forestOeset{\forest@child}{s}{\forest@previous@child@s}%
+ \fi
+% \end{macrocode}
+% Prepare for the next iteration: add the current child's positive
+% edge to the positive edge of the previous children, and set up the
+% next current child.
+% \begin{macrocode}
+ \forestOget{\forest@child}{s}\forest@child@s
+ \edef\forest@previous@child@s{\forest@child@s}%
+ \edef\forest@temp{%
+ \noexpand\forest@fornode{\forest@child}{%
+ \noexpand\forest@node@getedge
+ {positive}%
+ {\forestove{grow}}%
+ \noexpand\forest@temp@edge
+ }%
+ }\forest@temp
+ \forest@pack@pgfpoint@childsposition\forest@child
+ \forest@extendpath\forest@previous@positive@edge\forest@temp@edge{}%
+ \forest@getpositivetightedgeofpath\forest@previous@positive@edge\forest@previous@positive@edge
+ \forestOget{\forest@child}{@#3}\forest@child
+ \saferepeat
+% \end{macrocode}
+% Shift the position of all children to achieve the desired alignment
+% of the parent and its children.
+% \begin{macrocode}
+ \csname forest@calign@\forestove{calign}\endcsname
+}
+% \end{macrocode}
+% Get the position of child |#1| in the current node, in node's l-s
+% coordinate system.
+% \begin{macrocode}
+\def\forest@pack@pgfpoint@childsposition#1{%
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forestove{grow}}%
+ \forest@fornode{#1}{%
+ \pgfpointtransformed{\pgfqpoint{\forestove{l}}{\forestove{s}}}%
+ }%
+ }%
+}
+% \end{macrocode}
+% Get the position of the node in the grow (|#1|)-rotated coordinate
+% system.
+% \begin{macrocode}
+\def\forest@pack@pgfpoint@positioningrow#1{%
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{#1}%
+ \pgfpointtransformed{\pgfqpoint{\forestove{l}}{\forestove{s}}}%
+ }%
+}
+% \end{macrocode}
+%
+% Child alignment.
+% \begin{macrocode}
+\def\forest@calign@s@shift#1{%
+ \pgfutil@tempdima=#1\relax
+ \forest@node@foreachchild{%
+ \forestoeset{s}{\the\dimexpr\forestove{s}+\pgfutil@tempdima}%
+ }%
+}
+\def\forest@calign@child{%
+ \forest@calign@s@shift{-\forestOve{\forest@node@nornbarthchildid{\forestove{calign primary child}}}{s}}%
+}
+\csdef{forest@calign@child edge}{%
+ {%
+ \edef\forest@temp@child{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forestove{grow}}%
+ \pgfpointtransformed{\pgfqpoint{\forestOve{\forest@temp@child}{l}}{\forestOve{\forest@temp@child}{s}}}%
+ \pgf@xa=\pgf@x\relax\pgf@ya=\pgf@y\relax
+ \forest@Pointanchor{\forest@temp@child}{child anchor}%
+ \advance\pgf@xa\pgf@x\relax\advance\pgf@ya\pgf@y\relax
+ \forest@pointanchor{parent anchor}%
+ \advance\pgf@xa-\pgf@x\relax\advance\pgf@ya-\pgf@y\relax
+ \edef\forest@marshal{%
+ \noexpand\pgftransformreset
+ \noexpand\forest@pgfqtransformrotate{-\forestove{grow}}%
+ \noexpand\pgfpointtransformed{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ }\forest@marshal
+ }%
+ \forest@calign@s@shift{\the\dimexpr-\the\pgf@y}%
+}
+\csdef{forest@calign@midpoint}{%
+ \forest@calign@s@shift{\the\dimexpr 0pt -%
+ (\forestOve{\forest@node@nornbarthchildid{\forestove{calign primary child}}}{s}%
+ +\forestOve{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}{s}%
+ )/2\relax
+ }%
+}
+\csdef{forest@calign@edge midpoint}{%
+ {%
+ \edef\forest@temp@firstchild{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
+ \edef\forest@temp@secondchild{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forestove{grow}}%
+ \pgfpointtransformed{\pgfqpoint{\forestOve{\forest@temp@firstchild}{l}}{\forestOve{\forest@temp@firstchild}{s}}}%
+ \pgf@xa=\pgf@x\relax\pgf@ya=\pgf@y\relax
+ \forest@Pointanchor{\forest@temp@firstchild}{child anchor}%
+ \advance\pgf@xa\pgf@x\relax\advance\pgf@ya\pgf@y\relax
+ \edef\forest@marshal{%
+ \noexpand\pgfpointtransformed{\noexpand\pgfqpoint{\forestOve{\forest@temp@secondchild}{l}}{\forestOve{\forest@temp@secondchild}{s}}}%
+ }\forest@marshal
+ \advance\pgf@xa\pgf@x\relax\advance\pgf@ya\pgf@y\relax
+ \forest@Pointanchor{\forest@temp@secondchild}{child anchor}%
+ \advance\pgf@xa\pgf@x\relax\advance\pgf@ya\pgf@y\relax
+ \divide\pgf@xa2 \divide\pgf@ya2
+ \forest@pointanchor{parent anchor}%
+ \advance\pgf@xa-\pgf@x\relax\advance\pgf@ya-\pgf@y\relax
+ \edef\forest@marshal{%
+ \noexpand\pgftransformreset
+ \noexpand\forest@pgfqtransformrotate{-\forestove{grow}}%
+ \noexpand\pgfpointtransformed{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ }\forest@marshal
+ }%
+ \forest@calign@s@shift{\the\dimexpr-\the\pgf@y}%
+}
+% \end{macrocode}
+% Aligns the children to the center of the angles given by the options
+% |calign_first_angle| and |calign_second_angle| and spreads them additionally if needed to fill the
+% whole
+% space determined by the option. The version |fixed_angles| calculates the
+% angles between node anchors; the version |fixes_edge_angles| calculates the angles between the
+% node edges.
+% \begin{macrocode}
+\def\forest@edef@strippt#1#2{%
+ \edef#1{#2}%
+ \edef#1{\expandafter\Pgf@geT#1}%
+}
+\csdef{forest@calign@fixed angles}{%
+ \ifnum\forestove{n children}>1
+ \edef\forest@ca@first@child{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
+ \edef\forest@ca@second@child{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}%
+ \ifnum\forestove{reversed}=1
+ \let\forest@temp\forest@ca@first@child
+ \let\forest@ca@first@child\forest@ca@second@child
+ \let\forest@ca@second@child\forest@temp
+ \fi
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \edef\forest@ca@first@l{\expandafter\Pgf@geT\forest@ca@first@l}%
+ \forestOget{\forest@ca@second@child}{l}\forest@ca@second@l
+ \edef\forest@ca@second@l{\expandafter\Pgf@geT\forest@ca@second@l}%
+ \pgfmathtan@{\forestove{calign secondary angle}}%
+ \pgfmathmultiply@{\pgfmathresult}{\forest@ca@second@l}%
+ \let\forest@calign@temp\pgfmathresult
+ \pgfmathtan@{\forestove{calign primary angle}}%
+ \pgfmathmultiply@{\pgfmathresult}{\forest@ca@first@l}%
+ \edef\forest@ca@desired@s@distance{\the\dimexpr
+ \forest@calign@temp pt-\pgfmathresult pt}%
+ % \pgfmathsetlengthmacro\forest@ca@desired@s@distance{%
+ % tan(\forestove{calign secondary angle})*\forest@ca@second@l
+ % -tan(\forestove{calign primary angle})*\forest@ca@first@l
+ % }%
+ \forestOget{\forest@ca@first@child}{s}\forest@ca@first@s
+ \forestOget{\forest@ca@second@child}{s}\forest@ca@second@s
+ \edef\forest@ca@actual@s@distance{\the\dimexpr
+ \forest@ca@second@s-\forest@ca@first@s}%
+ %\pgfmathsetlengthmacro\forest@ca@actual@s@distance{%
+ % \forest@ca@second@s-\forest@ca@first@s}%
+ \ifdim\forest@ca@desired@s@distance>\forest@ca@actual@s@distance\relax
+ \ifdim\forest@ca@actual@s@distance=0pt
+ \pgfmathtan@{\forestove{calign primary angle}}%
+ \pgfmathmultiply@{\pgfmathresult}{\forest@ca@second@l}%
+ \pgfutil@tempdima=\pgfmathresult pt
+ % \pgfmathsetlength\pgfutil@tempdima{tan(\forestove{calign primary angle})*\forest@ca@second@l}%
+ \pgfutil@tempdimb=\dimexpr
+ \forest@ca@desired@s@distance/(\forestove{n children}-1)\relax%
+ %\pgfmathsetlength\pgfutil@tempdimb{\forest@ca@desired@s@distance/(\forestove{n children}-1)}%
+ \forest@node@foreachchild{%
+ \forestoeset{s}{\the\pgfutil@tempdima}%
+ \advance\pgfutil@tempdima\pgfutil@tempdimb
+ }%
+ \def\forest@calign@anchor{0pt}%
+ \else
+ \edef\forest@marshal{\noexpand\pgfmathdivide@
+ {\expandafter\Pgf@geT\forest@ca@desired@s@distance}%
+ {\expandafter\Pgf@geT\forest@ca@actual@s@distance}%
+ }\forest@marshal
+ \let\forest@ca@ratio\pgfmathresult
+ %\pgfmathsetmacro\forest@ca@ratio{%
+ % \forest@ca@desired@s@distance/\forest@ca@actual@s@distance}%
+ \forest@node@foreachchild{%
+ \forest@edef@strippt\forest@temp{\forestove{s}}%
+ \pgfmathmultiply@{\forest@ca@ratio}{\forest@temp}%
+ \forestoeset{s}{\the\dimexpr\pgfmathresult pt}%
+ %\pgfmathsetlengthmacro\forest@temp{\forest@ca@ratio*\forestove{s}}%
+ %\forestolet{s}\forest@temp
+ }%
+ \pgfmathtan@{\forestove{calign primary angle}}%
+ \pgfmathmultiply@{\pgfmathresult}{\forest@ca@first@l}%
+ \edef\forest@calign@anchor{\the\dimexpr-\pgfmathresult pt}%
+ %\pgfmathsetlengthmacro\forest@calign@anchor{%
+ % -tan(\forestove{calign primary angle})*\forest@ca@first@l}%
+ \fi
+ \else
+ \ifdim\forest@ca@desired@s@distance<\forest@ca@actual@s@distance\relax
+ \edef\forest@marshal{\noexpand\pgfmathdivide@
+ {\expandafter\Pgf@geT\forest@ca@actual@s@distance}%
+ {\expandafter\Pgf@geT\forest@ca@desired@s@distance}%
+ }\forest@marshal
+ \let\forest@ca@ratio\pgfmathresult
+ %\pgfmathsetlengthmacro\forest@ca@ratio{%
+ % \forest@ca@actual@s@distance/\forest@ca@desired@s@distance}%
+ \forest@node@foreachchild{%
+ \forest@edef@strippt\forest@temp{\forestove{l}}%
+ \pgfmathmultiply@{\forest@ca@ratio}{\forest@temp}%
+ \forestoeset{l}{\the\dimexpr\pgfmathresult pt}%
+ %\pgfmathsetlengthmacro\forest@temp{\forest@ca@ratio*\forestove{l}}%
+ %\forestolet{l}\forest@temp
+ }%
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \edef\forest@ca@first@l{\expandafter\Pgf@geT\forest@ca@first@l}%
+ \pgfmathtan@{\forestove{calign primary angle}}%
+ \pgfmathmultiply@{\pgfmathresult}{\forest@ca@first@l}%
+ \edef\forest@calign@anchor{\the\dimexpr-\pgfmathresult pt}%
+ %\pgfmathsetlengthmacro\forest@calign@anchor{%
+ % -tan(\forestove{calign primary angle})*\forest@ca@first@l}%
+ \fi
+ \fi
+ \forest@calign@s@shift{-\forest@calign@anchor}%
+ \fi
+}
+\csdef{forest@calign@fixed edge angles}{%
+ \ifnum\forestove{n children}>1
+ \edef\forest@ca@first@child{\forest@node@nornbarthchildid{\forestove{calign primary child}}}%
+ \edef\forest@ca@second@child{\forest@node@nornbarthchildid{\forestove{calign secondary child}}}%
+ \ifnum\forestove{reversed}=1
+ \let\forest@temp\forest@ca@first@child
+ \let\forest@ca@first@child\forest@ca@second@child
+ \let\forest@ca@second@child\forest@temp
+ \fi
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \forestOget{\forest@ca@second@child}{l}\forest@ca@second@l
+ \forest@pointanchor{parent anchor}%
+ \edef\forest@ca@parent@anchor@s{\the\pgf@x}%
+ \edef\forest@ca@parent@anchor@l{\the\pgf@y}%
+ \forest@Pointanchor{\forest@ca@first@child}{child anchor}%
+ \edef\forest@ca@first@child@anchor@s{\the\pgf@x}%
+ \edef\forest@ca@first@child@anchor@l{\the\pgf@y}%
+ \forest@Pointanchor{\forest@ca@second@child}{child anchor}%
+ \edef\forest@ca@second@child@anchor@s{\the\pgf@x}%
+ \edef\forest@ca@second@child@anchor@l{\the\pgf@y}%
+ \pgfmathtan@{\forestove{calign secondary angle}}%
+ \edef\forest@temp{\the\dimexpr
+ \forest@ca@second@l-\forest@ca@second@child@anchor@l+\forest@ca@parent@anchor@l}%
+ \pgfmathmultiply@{\pgfmathresult}{\expandafter\Pgf@geT\forest@temp}%
+ \edef\forest@ca@desired@second@edge@s{\the\dimexpr\pgfmathresult pt}%
+ %\pgfmathsetlengthmacro\forest@ca@desired@second@edge@s{%
+ % tan(\forestove{calign secondary angle})*%
+ % (\forest@ca@second@l-\forest@ca@second@child@anchor@l+\forest@ca@parent@anchor@l)}%
+ \pgfmathtan@{\forestove{calign primary angle}}%
+ \edef\forest@temp{\the\dimexpr
+ \forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l}%
+ \pgfmathmultiply@{\pgfmathresult}{\expandafter\Pgf@geT\forest@temp}%
+ \edef\forest@ca@desired@first@edge@s{\the\dimexpr\pgfmathresult pt}%
+ %\pgfmathsetlengthmacro\forest@ca@desired@first@edge@s{%
+ % tan(\forestove{calign primary angle})*%
+ % (\forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l)}%
+ \edef\forest@ca@desired@s@distance{\the\dimexpr
+ \forest@ca@desired@second@edge@s-\forest@ca@desired@first@edge@s}%
+ %\pgfmathsetlengthmacro\forest@ca@desired@s@distance{\forest@ca@desired@second@edge@s-\forest@ca@desired@first@edge@s}%
+ \forestOget{\forest@ca@first@child}{s}\forest@ca@first@s
+ \forestOget{\forest@ca@second@child}{s}\forest@ca@second@s
+ \edef\forest@ca@actual@s@distance{\the\dimexpr
+ \forest@ca@second@s+\forest@ca@second@child@anchor@s
+ -\forest@ca@first@s-\forest@ca@first@child@anchor@s}%
+ %\pgfmathsetlengthmacro\forest@ca@actual@s@distance{%
+ % \forest@ca@second@s+\forest@ca@second@child@anchor@s
+ % -\forest@ca@first@s-\forest@ca@first@child@anchor@s}%
+ \ifdim\forest@ca@desired@s@distance>\forest@ca@actual@s@distance\relax
+ \ifdim\forest@ca@actual@s@distance=0pt
+ \forestoget{n children}\forest@temp@n@children
+ \forest@node@foreachchild{%
+ \forest@pointanchor{child anchor}%
+ \edef\forest@temp@child@anchor@s{\the\pgf@x}%
+ \forestoeset{s}{\the\dimexpr
+ \forest@ca@desired@first@edge@s+\forest@ca@desired@s@distance*(\forestove{n}-1)/(\forest@temp@n@children-1)+\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
+ %\pgfmathsetlengthmacro\forest@temp{%
+ % \forest@ca@desired@first@edge@s+(\forestove{n}-1)*\forest@ca@desired@s@distance/(\forest@temp@n@children-1)+\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
+ %\forestolet{s}\forest@temp
+ }%
+ \def\forest@calign@anchor{0pt}%
+ \else
+ \edef\forest@marshal{\noexpand\pgfmathdivide@
+ {\expandafter\Pgf@geT\forest@ca@desired@s@distance}%
+ {\expandafter\Pgf@geT\forest@ca@actual@s@distance}%
+ }\forest@marshal
+ \let\forest@ca@ratio\pgfmathresult
+ %\pgfmathsetmacro\forest@ca@ratio{%
+ % \forest@ca@desired@s@distance/\forest@ca@actual@s@distance}%
+ \forest@node@foreachchild{%
+ \forest@pointanchor{child anchor}%
+ \edef\forest@temp@child@anchor@s{\the\pgf@x}%
+ \edef\forest@marshal{\noexpand\pgfmathmultiply@
+ {\forest@ca@ratio}%
+ {\expandafter\Pgf@geT\the\dimexpr
+ \forestove{s}-\forest@ca@first@s+%
+ \forest@temp@child@anchor@s-\forest@ca@first@child@anchor@s}%
+ }\forest@marshal
+ \forestoeset{s}{\the\dimexpr\pgfmathresult pt+\forest@ca@first@s
+ +\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
+ % \pgfmathsetlengthmacro\forest@temp{%
+ % \forest@ca@ratio*(%
+ % \forestove{s}-\forest@ca@first@s
+ % +\forest@temp@child@anchor@s-\forest@ca@first@child@anchor@s)%
+ % +\forest@ca@first@s
+ % +\forest@ca@first@child@anchor@s-\forest@temp@child@anchor@s}%
+ % \forestolet{s}\forest@temp
+ }%
+ \pgfmathtan@{\forestove{calign primary angle}}%
+ \edef\forest@marshal{\noexpand\pgfmathmultiply@
+ {\pgfmathresult}%
+ {\expandafter\Pgf@geT\the\dimexpr
+ \forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l}%
+ }\forest@marshal
+ \edef\forest@calign@anchor{\the\dimexpr
+ -\pgfmathresult pt+\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s}%
+ % \pgfmathsetlengthmacro\forest@calign@anchor{%
+ % -tan(\forestove{calign primary angle})*(\forest@ca@first@l-\forest@ca@first@child@anchor@l+\forest@ca@parent@anchor@l)%
+ % +\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s
+ % }%
+ \fi
+ \else
+ \ifdim\forest@ca@desired@s@distance<\forest@ca@actual@s@distance\relax
+ \edef\forest@marshal{\noexpand\pgfmathdivide@
+ {\expandafter\Pgf@geT\forest@ca@actual@s@distance}%
+ {\expandafter\Pgf@geT\forest@ca@desired@s@distance}%
+ }\forest@marshal
+ \let\forest@ca@ratio\pgfmathresult
+ %\pgfmathsetlengthmacro\forest@ca@ratio{%
+ % \forest@ca@actual@s@distance/\forest@ca@desired@s@distance}%
+ \forest@node@foreachchild{%
+ \forest@pointanchor{child anchor}%
+ \edef\forest@temp@child@anchor@l{\the\pgf@y}%
+ \edef\forest@marshal{\noexpand\pgfmathmultiply@
+ {\forest@ca@ratio}%
+ {\expandafter\Pgf@geT\the\dimexpr\forestove{l}+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l}%
+ }\forest@marshal
+ \forestoeset{l}{\the\dimexpr
+ \pgfmathresult pt-\forest@ca@parent@anchor@l+\forest@temp@child@anchor@l}%
+ % \pgfmathsetlengthmacro\forest@temp{%
+ % \forest@ca@ratio*(%
+ % \forestove{l}+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l)
+ % -\forest@ca@parent@anchor@l+\forest@temp@child@anchor@l}%
+ % \forestolet{l}\forest@temp
+ }%
+ \forestOget{\forest@ca@first@child}{l}\forest@ca@first@l
+ \pgfmathtan@{\forestove{calign primary angle}}%
+ \edef\forest@marshal{\noexpand\pgfmathmultiply@
+ {\pgfmathresult}%
+ {\expandafter\Pgf@geT\the\dimexpr
+ \forest@ca@first@l+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l}%
+ }\forest@marshal
+ \edef\forest@calign@anchor{\the\dimexpr
+ -\pgfmathresult pt+\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s}%
+ % \pgfmathsetlengthmacro\forest@calign@anchor{%
+ % -tan(\forestove{calign primary angle})*(\forest@ca@first@l+\forest@ca@parent@anchor@l-\forest@temp@child@anchor@l)%
+ % +\forest@ca@first@child@anchor@s-\forest@ca@parent@anchor@s
+ % }%
+ \fi
+ \fi
+ \forest@calign@s@shift{-\forest@calign@anchor}%
+ \fi
+}
+% \end{macrocode}
+%
+% Get edge: |#1| = |positive|/|negative|, |#2| = grow (in degrees), |#3| = the control
+% sequence receiving the resulting path. The edge is taken from the
+% cache (attribute |#1@edge@#2|) if possible; otherwise, both
+% positive and negative edge are computed and stored in the cache.
+% \begin{macrocode}
+\def\forest@node@getedge#1#2#3{%
+ \forestoget{#1@edge@#2}#3%
+ \ifx#3\relax
+ \forest@node@foreachchild{%
+ \forest@node@getedge{#1}{#2}{\forest@temp@edge}%
+ }%
+ \forest@forthis{\forest@node@getedges{#2}}%
+ \forestoget{#1@edge@#2}#3%
+ \fi
+}
+% \end{macrocode}
+% Get edges. |#1| = grow (in degrees). The result is stored in
+% attributes |negative@edge@#1| and |positive@edge@#1|. This method
+% expects that the children's edges are already cached.
+% \begin{macrocode}
+\def\forest@node@getedges#1{%
+% \end{macrocode}
+% Run the computation in a \TeX\ group.
+% \begin{macrocode}
+ %{%
+% \end{macrocode}
+% Setup the grow line.
+% \begin{macrocode}
+ \forest@setupgrowline{#1}%
+% \end{macrocode}
+% Get the edge of the node itself.
+% \begin{macrocode}
+ \ifnum\forestove{ignore}=0
+ \forestoget{@boundary}\forest@node@boundary
+ \else
+ \def\forest@node@boundary{}%
+ \fi
+ \csname forest@getboth\forestove{fit}edgesofpath\endcsname
+ \forest@node@boundary\forest@negative@node@edge\forest@positive@node@edge
+ \forestolet{negative@edge@#1}\forest@negative@node@edge
+ \forestolet{positive@edge@#1}\forest@positive@node@edge
+% \end{macrocode}
+% Add the edges of the children.
+% \begin{macrocode}
+ \forest@get@edges@merge{negative}{#1}%
+ \forest@get@edges@merge{positive}{#1}%
+ %}%
+}
+% \end{macrocode}
+% Merge the |#1| (=|negative| or |positive|) edge of the node with
+% |#1| edges of the children. |#2| = grow angle.
+% \begin{macrocode}
+\def\forest@get@edges@merge#1#2{%
+ \ifnum\forestove{n children}>0
+ \forestoget{#1@edge@#2}\forest@node@edge
+% \end{macrocode}
+% Remember the node's |parent anchor| and add it to the path (for breaking).
+% \begin{macrocode}
+ \forest@pointanchor{parent anchor}%
+ \edef\forest@getedge@pa@l{\the\pgf@x}%
+ \edef\forest@getedge@pa@s{\the\pgf@y}%
+ \eappto\forest@node@edge{\noexpand\pgfsyssoftpath@movetotoken{\forest@getedge@pa@l}{\forest@getedge@pa@s}}%
+% \end{macrocode}
+% Switch to this node's |(l,s)| coordinate system (origin at the
+% node's anchor).
+% \begin{macrocode}
+ \pgfgettransform\forest@temp@transform
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forestove{grow}}%
+% \end{macrocode}
+% Get the child's (cached) edge, translate it by the child's position,
+% and add it to the path holding all edges. Also add the edge from parent to the child to the path.
+% This gets complicated when the child and/or parent anchor is empty, i.e.\ automatic border: we can
+% get self-intersecting paths. So we store all the parent--child edges to a safe place first,
+% compute all the possible breaking points (i.e.\ all the points in node@edge path), and break the
+% parent--child edges on these points.
+% \begin{macrocode}
+ \def\forest@all@edges{}%
+ \forest@node@foreachchild{%
+ \forestoget{#1@edge@#2}\forest@temp@edge
+ \pgfpointtransformed{\pgfqpoint{\forestove{l}}{\forestove{s}}}%
+ \forest@extendpath\forest@node@edge\forest@temp@edge{}%
+ \ifnum\forestove{ignore edge}=0
+ \pgfpointadd
+ {\pgfpointtransformed{\pgfqpoint{\forestove{l}}{\forestove{s}}}}%
+ {\forest@pointanchor{child anchor}}%
+ \pgfgetlastxy{\forest@getedge@ca@l}{\forest@getedge@ca@s}%
+ \eappto\forest@all@edges{%
+ \noexpand\pgfsyssoftpath@movetotoken{\forest@getedge@pa@l}{\forest@getedge@pa@s}%
+ \noexpand\pgfsyssoftpath@linetotoken{\forest@getedge@ca@l}{\forest@getedge@ca@s}%
+ }%
+ % this deals with potential overlap of the edges:
+ \eappto\forest@node@edge{\noexpand\pgfsyssoftpath@movetotoken{\forest@getedge@ca@l}{\forest@getedge@ca@s}}%
+ \fi
+ }%
+ \ifdefempty{\forest@all@edges}{}{%
+ \pgfintersectionofpaths{\pgfsetpath\forest@all@edges}{\pgfsetpath\forest@node@edge}%
+ \def\forest@edgenode@intersections{}%
+ \forest@merge@intersectionloop
+ \eappto\forest@node@edge{\expandonce{\forest@all@edges}\expandonce{\forest@edgenode@intersections}}%
+ }%
+ \pgfsettransform\forest@temp@transform
+% \end{macrocode}
+% Process the path into an edge and store the edge.
+% \begin{macrocode}
+ \csname forest@get#1\forestove{fit}edgeofpath\endcsname\forest@node@edge\forest@node@edge
+ \forestolet{#1@edge@#2}\forest@node@edge
+ \fi
+}
+%\newloop\forest@merge@loop
+\def\forest@merge@intersectionloop{%
+ \c@pgf@counta=0
+ \forest@loop
+ \ifnum\c@pgf@counta<\pgfintersectionsolutions\relax
+ \advance\c@pgf@counta1
+ \pgfpointintersectionsolution{\the\c@pgf@counta}%
+ \eappto\forest@edgenode@intersections{\noexpand\pgfsyssoftpath@movetotoken
+ {\the\pgf@x}{\the\pgf@y}}%
+ \forest@repeat
+}
+% \end{macrocode}
+%
+% Get the bounding rectangle of the node (without descendants). |#1| =
+% grow.
+% \begin{macrocode}
+\def\forest@node@getboundingrectangle@ls#1{%
+ \forestoget{@boundary}\forest@node@boundary
+ \forest@path@getboundingrectangle@ls\forest@node@boundary{#1}%
+}
+% \end{macrocode}
+%
+% Applies the current coordinate transformation to the points in the
+% path |#1|. Returns via the current path (so that the coordinate
+% transformation can be set up as local).
+% \begin{macrocode}
+\def\forest@pgfpathtransformed#1{%
+ \forest@save@pgfsyssoftpath@tokendefs
+ \let\pgfsyssoftpath@movetotoken\forest@pgfpathtransformed@moveto
+ \let\pgfsyssoftpath@linetotoken\forest@pgfpathtransformed@lineto
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty
+ #1%
+ \forest@restore@pgfsyssoftpath@tokendefs
+}
+\def\forest@pgfpathtransformed@moveto#1#2{%
+ \forest@pgfpathtransformed@op\pgfsyssoftpath@moveto{#1}{#2}%
+}
+\def\forest@pgfpathtransformed@lineto#1#2{%
+ \forest@pgfpathtransformed@op\pgfsyssoftpath@lineto{#1}{#2}%
+}
+\def\forest@pgfpathtransformed@op#1#2#3{%
+ \pgfpointtransformed{\pgfqpoint{#2}{#3}}%
+ \edef\forest@temp{%
+ \noexpand#1{\the\pgf@x}{\the\pgf@y}%
+ }%
+ \forest@temp
+}
+% \end{macrocode}
+%
+% \subsubsection{Tiers}
+%
+% Compute tiers to be aligned at a node. The result in saved in
+% attribute |@tiers|.
+% \begin{macrocode}
+\def\forest@pack@computetiers{%
+ {%
+ \forest@pack@tiers@getalltiersinsubtree
+ \forest@pack@tiers@computetierhierarchy
+ \forest@pack@tiers@findcontainers
+ \forest@pack@tiers@raisecontainers
+ \forest@pack@tiers@computeprocessingorder
+ \gdef\forest@smuggle{}%
+ \forest@pack@tiers@write
+ }%
+ \forest@node@foreach{\forestoset{@tiers}{}}%
+ \forest@smuggle
+}
+% \end{macrocode}
+% Puts all tiers contained in the subtree into attribute
+% |tiers|.
+% \begin{macrocode}
+\def\forest@pack@tiers@getalltiersinsubtree{%
+ \ifnum\forestove{n children}>0
+ \forest@node@foreachchild{\forest@pack@tiers@getalltiersinsubtree}%
+ \fi
+ \forestoget{tier}\forest@temp@mytier
+ \def\forest@temp@mytiers{}%
+ \ifdefempty\forest@temp@mytier{}{%
+ \listeadd\forest@temp@mytiers\forest@temp@mytier
+ }%
+ \ifnum\forestove{n children}>0
+ \forest@node@foreachchild{%
+ \forestoget{tiers}\forest@temp@tiers
+ \forlistloop\forest@pack@tiers@forhandlerA\forest@temp@tiers
+ }%
+ \fi
+ \forestolet{tiers}\forest@temp@mytiers
+}
+\def\forest@pack@tiers@forhandlerA#1{%
+ \ifinlist{#1}\forest@temp@mytiers{}{%
+ \listeadd\forest@temp@mytiers{#1}%
+ }%
+}
+% \end{macrocode}
+% Compute a set of higher and lower tiers for each tier. Tier A is
+% higher than tier B iff a node on tier A is an ancestor of a
+% node on tier B.
+% \begin{macrocode}
+\def\forest@pack@tiers@computetierhierarchy{%
+ \def\forest@tiers@ancestors{}%
+ \forestoget{tiers}\forest@temp@mytiers
+ \forlistloop\forest@pack@tiers@cth@init\forest@temp@mytiers
+ \forest@pack@tiers@computetierhierarchy@
+}
+\def\forest@pack@tiers@cth@init#1{%
+ \csdef{forest@tiers@higher@#1}{}%
+ \csdef{forest@tiers@lower@#1}{}%
+}
+\def\forest@pack@tiers@computetierhierarchy@{%
+ \forestoget{tier}\forest@temp@mytier
+ \ifdefempty\forest@temp@mytier{}{%
+ \forlistloop\forest@pack@tiers@forhandlerB\forest@tiers@ancestors
+ \listeadd\forest@tiers@ancestors\forest@temp@mytier
+ }%
+ \forest@node@foreachchild{%
+ \forest@pack@tiers@computetierhierarchy@
+ }%
+ \forestoget{tier}\forest@temp@mytier
+ \ifdefempty\forest@temp@mytier{}{%
+ \forest@listedel\forest@tiers@ancestors\forest@temp@mytier
+ }%
+}
+\def\forest@pack@tiers@forhandlerB#1{%
+ \def\forest@temp@tier{#1}%
+ \ifx\forest@temp@tier\forest@temp@mytier
+ \PackageError{forest}{Circular tier hierarchy (tier \forest@temp@mytier)}{}%
+ \fi
+ \ifinlistcs{#1}{forest@tiers@higher@\forest@temp@mytier}{}{%
+ \listcsadd{forest@tiers@higher@\forest@temp@mytier}{#1}}%
+ \xifinlistcs\forest@temp@mytier{forest@tiers@lower@#1}{}{%
+ \listcseadd{forest@tiers@lower@#1}{\forest@temp@mytier}}%
+}
+\def\forest@pack@tiers@findcontainers{%
+ \forestoget{tiers}\forest@temp@tiers
+ \forlistloop\forest@pack@tiers@findcontainer\forest@temp@tiers
+}
+\def\forest@pack@tiers@findcontainer#1{%
+ \def\forest@temp@tier{#1}%
+ \forestoget{tier}\forest@temp@mytier
+ \ifx\forest@temp@tier\forest@temp@mytier
+ \csedef{forest@tiers@container@#1}{\forest@cn}%
+ \else\@escapeif{%
+ \forest@pack@tiers@findcontainerA{#1}%
+ }\fi%
+}
+\def\forest@pack@tiers@findcontainerA#1{%
+ \c@pgf@counta=0
+ \forest@node@foreachchild{%
+ \forestoget{tiers}\forest@temp@tiers
+ \ifinlist{#1}\forest@temp@tiers{%
+ \advance\c@pgf@counta 1
+ \let\forest@temp@child\forest@cn
+ }{}%
+ }%
+ \ifnum\c@pgf@counta>1
+ \csedef{forest@tiers@container@#1}{\forest@cn}%
+ \else\@escapeif{% surely =1
+ \forest@fornode{\forest@temp@child}{%
+ \forest@pack@tiers@findcontainer{#1}%
+ }%
+ }\fi
+}
+\def\forest@pack@tiers@raisecontainers{%
+ \forestoget{tiers}\forest@temp@mytiers
+ \forlistloop\forest@pack@tiers@rc@forhandlerA\forest@temp@mytiers
+}
+\def\forest@pack@tiers@rc@forhandlerA#1{%
+ \edef\forest@tiers@temptier{#1}%
+ \letcs\forest@tiers@containernodeoftier{forest@tiers@container@#1}%
+ \letcs\forest@temp@lowertiers{forest@tiers@lower@#1}%
+ \forlistloop\forest@pack@tiers@rc@forhandlerB\forest@temp@lowertiers
+}
+\def\forest@pack@tiers@rc@forhandlerB#1{%
+ \letcs\forest@tiers@containernodeoflowertier{forest@tiers@container@#1}%
+ \forestOget{\forest@tiers@containernodeoflowertier}{content}\lowercontent
+ \forestOget{\forest@tiers@containernodeoftier}{content}\uppercontent
+ \forest@fornode{\forest@tiers@containernodeoflowertier}{%
+ \forest@ifancestorof
+ {\forest@tiers@containernodeoftier}
+ {\csletcs{forest@tiers@container@\forest@tiers@temptier}{forest@tiers@container@#1}}%
+ {}%
+ }%
+}
+\def\forest@pack@tiers@computeprocessingorder{%
+ \def\forest@tiers@processingorder{}%
+ \forestoget{tiers}\forest@tiers@cpo@tierstodo
+ \safeloop
+ \ifdefempty\forest@tiers@cpo@tierstodo{\forest@tempfalse}{\forest@temptrue}%
+ \ifforest@temp
+ \def\forest@tiers@cpo@tiersremaining{}%
+ \def\forest@tiers@cpo@tiersindependent{}%
+ \forlistloop\forest@pack@tiers@cpo@forhandlerA\forest@tiers@cpo@tierstodo
+ \ifdefempty\forest@tiers@cpo@tiersindependent{%
+ \PackageError{forest}{Circular tiers!}{}}{}%
+ \forlistloop\forest@pack@tiers@cpo@forhandlerB\forest@tiers@cpo@tiersremaining
+ \let\forest@tiers@cpo@tierstodo\forest@tiers@cpo@tiersremaining
+ \saferepeat
+}
+\def\forest@pack@tiers@cpo@forhandlerA#1{%
+ \ifcsempty{forest@tiers@higher@#1}{%
+ \listadd\forest@tiers@cpo@tiersindependent{#1}%
+ \listadd\forest@tiers@processingorder{#1}%
+ }{%
+ \listadd\forest@tiers@cpo@tiersremaining{#1}%
+ }%
+}
+\def\forest@pack@tiers@cpo@forhandlerB#1{%
+ \def\forest@pack@tiers@cpo@aremainingtier{#1}%
+ \forlistloop\forest@pack@tiers@cpo@forhandlerC\forest@tiers@cpo@tiersindependent
+}
+\def\forest@pack@tiers@cpo@forhandlerC#1{%
+ \ifinlistcs{#1}{forest@tiers@higher@\forest@pack@tiers@cpo@aremainingtier}{%
+ \forest@listcsdel{forest@tiers@higher@\forest@pack@tiers@cpo@aremainingtier}{#1}%
+ }{}%
+}
+\def\forest@pack@tiers@write{%
+ \forlistloop\forest@pack@tiers@write@forhandler\forest@tiers@processingorder
+}
+\def\forest@pack@tiers@write@forhandler#1{%
+ \forest@fornode{\csname forest@tiers@container@#1\endcsname}{%
+ \forest@pack@tiers@check{#1}%
+ }%
+ \xappto\forest@smuggle{%
+ \noexpand\listadd
+ \forestOm{\csname forest@tiers@container@#1\endcsname}{@tiers}%
+ {#1}%
+ }%
+}
+ % checks if the tier is compatible with growth changes and calign=node/edge angle
+\def\forest@pack@tiers@check#1{%
+ \def\forest@temp@currenttier{#1}%
+ \forest@node@foreachdescendant{%
+ \ifnum\forestove{grow}=\forestOve{\forestove{@parent}}{grow}
+ \else
+ \forest@pack@tiers@check@grow
+ \fi
+ \ifnum\forestove{n children}>1
+ \forestoget{calign}\forest@temp
+ \ifx\forest@temp\forest@pack@tiers@check@nodeangle
+ \forest@pack@tiers@check@calign
+ \fi
+ \ifx\forest@temp\forest@pack@tiers@check@edgeangle
+ \forest@pack@tiers@check@calign
+ \fi
+ \fi
+ }%
+}
+\def\forest@pack@tiers@check@nodeangle{node angle}%
+\def\forest@pack@tiers@check@edgeangle{edge angle}%
+\def\forest@pack@tiers@check@grow{%
+ \forestoget{content}\forest@temp@content
+ \let\forest@temp@currentnode\forest@cn
+ \forest@node@foreachdescendant{%
+ \forestoget{tier}\forest@temp
+ \ifx\forest@temp@currenttier\forest@temp
+ \forest@pack@tiers@check@grow@error
+ \fi
+ }%
+}
+\def\forest@pack@tiers@check@grow@error{%
+ \PackageError{forest}{Tree growth direction changes in node \forest@temp@currentnode\space
+ (content: \forest@temp@content), while tier '\forest@temp' is specified for nodes both
+ out- and inside the subtree rooted in node \forest@temp@currentnode. This will not work.}{}%
+}
+\def\forest@pack@tiers@check@calign{%
+ \forest@node@foreachchild{%
+ \forestoget{tier}\forest@temp
+ \ifx\forest@temp@currenttier\forest@temp
+ \forest@pack@tiers@check@calign@warning
+ \fi
+ }%
+}
+\def\forest@pack@tiers@check@calign@warning{%
+ \PackageWarning{forest}{Potential option conflict: node \forestove{@parent} (content:
+ '\forestOve{\forestove{@parent}}{content}') was given 'calign=\forestove{calign}', while its
+ child \forest@cn\space (content: '\forestove{content}') was given 'tier=\forestove{tier}'.
+ The parent's 'calign' will only work if the child was the lowest node on its tier before the
+ alignment.}%
+}
+% \end{macrocode}
+%
+%
+% \subsubsection{Node boundary}
+%
+% Compute the node boundary: it will be put in the pgf's current path. The computation is done
+% within a generic anchor so that the shape's saved anchors and macros are available.
+% \begin{macrocode}
+\pgfdeclaregenericanchor{forestcomputenodeboundary}{%
+ \letcs\forest@temp@boundary@macro{forest@compute@node@boundary@#1}%
+ \ifcsname forest@compute@node@boundary@#1\endcsname
+ \csname forest@compute@node@boundary@#1\endcsname
+ \else
+ \forest@compute@node@boundary@rectangle
+ \fi
+ \pgfsyssoftpath@getcurrentpath\forest@temp
+ \global\let\forest@global@boundary\forest@temp
+}
+\def\forest@mt#1{%
+ \expandafter\pgfpointanchor\expandafter{\pgfreferencednodename}{#1}%
+ \pgfsyssoftpath@moveto{\the\pgf@x}{\the\pgf@y}%
+}%
+\def\forest@lt#1{%
+ \expandafter\pgfpointanchor\expandafter{\pgfreferencednodename}{#1}%
+ \pgfsyssoftpath@lineto{\the\pgf@x}{\the\pgf@y}%
+}%
+\def\forest@compute@node@boundary@coordinate{%
+ \forest@mt{center}%
+}
+\def\forest@compute@node@boundary@circle{%
+ \forest@mt{east}%
+ \forest@lt{north east}%
+ \forest@lt{north}%
+ \forest@lt{north west}%
+ \forest@lt{west}%
+ \forest@lt{south west}%
+ \forest@lt{south}%
+ \forest@lt{south east}%
+ \forest@lt{east}%
+}
+\def\forest@compute@node@boundary@rectangle{%
+ \forest@mt{south west}%
+ \forest@lt{south east}%
+ \forest@lt{north east}%
+ \forest@lt{north west}%
+ \forest@lt{south west}%
+}
+\def\forest@compute@node@boundary@diamond{%
+ \forest@mt{east}%
+ \forest@lt{north}%
+ \forest@lt{west}%
+ \forest@lt{south}%
+ \forest@lt{east}%
+}
+\let\forest@compute@node@boundary@ellipse\forest@compute@node@boundary@circle
+\def\forest@compute@node@boundary@trapezium{%
+ \forest@mt{top right corner}%
+ \forest@lt{top left corner}%
+ \forest@lt{bottom left corner}%
+ \forest@lt{bottom right corner}%
+ \forest@lt{top right corner}%
+}
+\def\forest@compute@node@boundary@semicircle{%
+ \forest@mt{arc start}%
+ \forest@lt{north}%
+ \forest@lt{east}%
+ \forest@lt{north east}%
+ \forest@lt{apex}%
+ \forest@lt{north west}%
+ \forest@lt{west}%
+ \forest@lt{arc end}%
+ \forest@lt{arc start}%
+}
+%\newloop\forest@computenodeboundary@loop
+\csdef{forest@compute@node@boundary@regular polygon}{%
+ \forest@mt{corner 1}%
+ \c@pgf@counta=\sides\relax
+ \forest@loop
+ \ifnum\c@pgf@counta>0
+ \forest@lt{corner \the\c@pgf@counta}%
+ \advance\c@pgf@counta-1
+ \forest@repeat
+}%
+\def\forest@compute@node@boundary@star{%
+ \forest@mt{outer point 1}%
+ \c@pgf@counta=\totalstarpoints\relax
+ \divide\c@pgf@counta2
+ \forest@loop
+ \ifnum\c@pgf@counta>0
+ \forest@lt{inner point \the\c@pgf@counta}%
+ \forest@lt{outer point \the\c@pgf@counta}%
+ \advance\c@pgf@counta-1
+ \forest@repeat
+}%
+\csdef{forest@compute@node@boundary@isosceles triangle}{%
+ \forest@mt{apex}%
+ \forest@lt{left corner}%
+ \forest@lt{right corner}%
+ \forest@lt{apex}%
+}
+\def\forest@compute@node@boundary@kite{%
+ \forest@mt{upper vertex}%
+ \forest@lt{left vertex}%
+ \forest@lt{lower vertex}%
+ \forest@lt{right vertex}%
+ \forest@lt{upper vertex}%
+}
+\def\forest@compute@node@boundary@dart{%
+ \forest@mt{tip}%
+ \forest@lt{left tail}%
+ \forest@lt{tail center}%
+ \forest@lt{right tail}%
+ \forest@lt{tip}%
+}
+\csdef{forest@compute@node@boundary@circular sector}{%
+ \forest@mt{sector center}%
+ \forest@lt{arc start}%
+ \forest@lt{arc center}%
+ \forest@lt{arc end}%
+ \forest@lt{sector center}%
+}
+\def\forest@compute@node@boundary@cylinder{%
+ \forest@mt{top}%
+ \forest@lt{after top}%
+ \forest@lt{before bottom}%
+ \forest@lt{bottom}%
+ \forest@lt{after bottom}%
+ \forest@lt{before top}%
+ \forest@lt{top}%
+}
+\cslet{forest@compute@node@boundary@forbidden sign}\forest@compute@node@boundary@circle
+\cslet{forest@compute@node@boundary@magnifying glass}\forest@compute@node@boundary@circle
+\def\forest@compute@node@boundary@cloud{%
+ \getradii
+ \forest@mt{puff 1}%
+ \c@pgf@counta=\puffs\relax
+ \forest@loop
+ \ifnum\c@pgf@counta>0
+ \forest@lt{puff \the\c@pgf@counta}%
+ \advance\c@pgf@counta-1
+ \forest@repeat
+}
+\def\forest@compute@node@boundary@starburst{
+ \calculatestarburstpoints
+ \forest@mt{outer point 1}%
+ \c@pgf@counta=\totalpoints\relax
+ \divide\c@pgf@counta2
+ \forest@loop
+ \ifnum\c@pgf@counta>0
+ \forest@lt{inner point \the\c@pgf@counta}%
+ \forest@lt{outer point \the\c@pgf@counta}%
+ \advance\c@pgf@counta-1
+ \forest@repeat
+}%
+\def\forest@compute@node@boundary@signal{%
+ \forest@mt{east}%
+ \forest@lt{south east}%
+ \forest@lt{south west}%
+ \forest@lt{west}%
+ \forest@lt{north west}%
+ \forest@lt{north east}%
+ \forest@lt{east}%
+}
+\def\forest@compute@node@boundary@tape{%
+ \forest@mt{north east}%
+ \forest@lt{60}%
+ \forest@lt{north}%
+ \forest@lt{120}%
+ \forest@lt{north west}%
+ \forest@lt{south west}%
+ \forest@lt{240}%
+ \forest@lt{south}%
+ \forest@lt{310}%
+ \forest@lt{south east}%
+ \forest@lt{north east}%
+}
+\csdef{forest@compute@node@boundary@single arrow}{%
+ \forest@mt{tip}%
+ \forest@lt{after tip}%
+ \forest@lt{after head}%
+ \forest@lt{before tail}%
+ \forest@lt{after tail}%
+ \forest@lt{before head}%
+ \forest@lt{before tip}%
+ \forest@lt{tip}%
+}
+\csdef{forest@compute@node@boundary@double arrow}{%
+ \forest@mt{tip 1}%
+ \forest@lt{after tip 1}%
+ \forest@lt{after head 1}%
+ \forest@lt{before head 2}%
+ \forest@lt{before tip 2}%
+ \forest@mt{tip 2}%
+ \forest@lt{after tip 2}%
+ \forest@lt{after head 2}%
+ \forest@lt{before head 1}%
+ \forest@lt{before tip 1}%
+ \forest@lt{tip 1}%
+}
+\csdef{forest@compute@node@boundary@arrow box}{%
+ \forest@mt{before north arrow}%
+ \forest@lt{before north arrow head}%
+ \forest@lt{before north arrow tip}%
+ \forest@lt{north arrow tip}%
+ \forest@lt{after north arrow tip}%
+ \forest@lt{after north arrow head}%
+ \forest@lt{after north arrow}%
+ \forest@lt{north east}%
+ \forest@lt{before east arrow}%
+ \forest@lt{before east arrow head}%
+ \forest@lt{before east arrow tip}%
+ \forest@lt{east arrow tip}%
+ \forest@lt{after east arrow tip}%
+ \forest@lt{after east arrow head}%
+ \forest@lt{after east arrow}%
+ \forest@lt{south east}%
+ \forest@lt{before south arrow}%
+ \forest@lt{before south arrow head}%
+ \forest@lt{before south arrow tip}%
+ \forest@lt{south arrow tip}%
+ \forest@lt{after south arrow tip}%
+ \forest@lt{after south arrow head}%
+ \forest@lt{after south arrow}%
+ \forest@lt{south west}%
+ \forest@lt{before west arrow}%
+ \forest@lt{before west arrow head}%
+ \forest@lt{before west arrow tip}%
+ \forest@lt{west arrow tip}%
+ \forest@lt{after west arrow tip}%
+ \forest@lt{after west arrow head}%
+ \forest@lt{after west arrow}%
+ \forest@lt{north west}%
+ \forest@lt{before north arrow}%
+}
+\cslet{forest@compute@node@boundary@circle split}\forest@compute@node@boundary@circle
+\cslet{forest@compute@node@boundary@circle solidus}\forest@compute@node@boundary@circle
+\cslet{forest@compute@node@boundary@ellipse split}\forest@compute@node@boundary@ellipse
+\cslet{forest@compute@node@boundary@rectangle split}\forest@compute@node@boundary@rectangle
+\def\forest@compute@node@boundary@@callout{%
+ \beforecalloutpointer
+ \pgfsyssoftpath@moveto{\the\pgf@x}{\the\pgf@y}%
+ \calloutpointeranchor
+ \pgfsyssoftpath@lineto{\the\pgf@x}{\the\pgf@y}%
+ \aftercalloutpointer
+ \pgfsyssoftpath@lineto{\the\pgf@x}{\the\pgf@y}%
+}
+\csdef{forest@compute@node@boundary@rectangle callout}{%
+ \forest@compute@node@boundary@rectangle
+ \rectanglecalloutpoints
+ \forest@compute@node@boundary@@callout
+}
+\csdef{forest@compute@node@boundary@ellipse callout}{%
+ \forest@compute@node@boundary@ellipse
+ \ellipsecalloutpoints
+ \forest@compute@node@boundary@@callout
+}
+\csdef{forest@compute@node@boundary@cloud callout}{%
+ \forest@compute@node@boundary@cloud
+ % at least a first approx...
+ \forest@mt{center}%
+ \forest@lt{pointer}%
+}%
+\csdef{forest@compute@node@boundary@cross out}{%
+ \forest@mt{south east}%
+ \forest@lt{north west}%
+ \forest@mt{south west}%
+ \forest@lt{north east}%
+}%
+\csdef{forest@compute@node@boundary@strike out}{%
+ \forest@mt{north east}%
+ \forest@lt{south west}%
+}%
+\csdef{forest@compute@node@boundary@rounded rectangle}{%
+ \forest@mt{east}%
+ \forest@lt{north east}%
+ \forest@lt{north}%
+ \forest@lt{north west}%
+ \forest@lt{west}%
+ \forest@lt{south west}%
+ \forest@lt{south}%
+ \forest@lt{south east}%
+ \forest@lt{east}%
+}%
+\csdef{forest@compute@node@boundary@chamfered rectangle}{%
+ \forest@mt{before south west}%
+ \forest@mt{after south west}%
+ \forest@lt{before south east}%
+ \forest@lt{after south east}%
+ \forest@lt{before north east}%
+ \forest@lt{after north east}%
+ \forest@lt{before north west}%
+ \forest@lt{after north west}%
+ \forest@lt{before south west}%
+}%
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{Compute absolute positions}
+%
+% Computes absolute positions of descendants relative to this node.
+% Stores the results in attributes |x| and |y|.
+% \begin{macrocode}
+\def\forest@node@computeabsolutepositions{%
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreachchild{%
+ \noexpand\forest@node@computeabsolutepositions@{\forestove{x}}{\forestove{y}}{\forestove{grow}}%
+ }%
+ }\forest@marshal
+}
+\def\forest@node@computeabsolutepositions@#1#2#3{%
+ \pgfpointadd
+ {\pgfqpoint{#1}{#2}}%
+ {\pgfpointadd
+ {\pgfqpointpolar{#3}{\forestove{l}}}%
+ {\pgfqpointpolar{\numexpr 90+#3\relax}{\forestove{s}}}%
+ }%
+ \pgfgetlastxy\forest@temp@x\forest@temp@y
+ \forestolet{x}\forest@temp@x
+ \forestolet{y}\forest@temp@y
+ \edef\forest@marshal{%
+ \noexpand\forest@node@foreachchild{%
+ \noexpand\forest@node@computeabsolutepositions@{\forest@temp@x}{\forest@temp@y}{\forestove{grow}}%
+ }%
+ }\forest@marshal
+}
+% \end{macrocode}
+%
+%
+% \subsection{Drawing the tree}
+% \label{imp:drawing-the-tree}
+% \begin{macrocode}
+\newif\ifforest@drawtree@preservenodeboxes@
+\def\forest@node@drawtree{%
+ \expandafter\ifstrequal\expandafter{\forest@drawtreebox}{\pgfkeysnovalue}{%
+ \let\forest@drawtree@beginbox\relax
+ \let\forest@drawtree@endbox\relax
+ }{%
+ \edef\forest@drawtree@beginbox{\global\setbox\forest@drawtreebox=\hbox\bgroup}%
+ \let\forest@drawtree@endbox\egroup
+ }%
+ \ifforest@external@
+ \ifforest@externalize@tree@
+ \forest@temptrue
+ \else
+ \tikzifexternalizing{%
+ \ifforest@was@tikzexternalwasenable
+ \forest@temptrue
+ \pgfkeys{/tikz/external/optimize=false}%
+ \let\forest@drawtree@beginbox\relax
+ \let\forest@drawtree@endbox\relax
+ \else
+ \forest@tempfalse
+ \fi
+ }{%
+ \forest@tempfalse
+ }%
+ \fi
+ \ifforest@temp
+ \advance\forest@externalize@inner@n 1
+ \edef\forest@externalize@filename{%
+ \tikzexternalrealjob-forest-\forest@externalize@outer@n
+ \ifnum\forest@externalize@inner@n=0 \else.\the\forest@externalize@inner@n\fi}%
+ \expandafter\tikzsetnextfilename\expandafter{\forest@externalize@filename}%
+ \tikzexternalenable
+ \pgfkeysalso{/tikz/external/remake next,/tikz/external/export next}%
+ \fi
+ \ifforest@externalize@tree@
+ \typeout{forest: Invoking a recursive call to generate the external picture
+ '\forest@externalize@filename' for the following context+code:
+ '\expandafter\detokenize\expandafter{\forest@externalize@id}'}%
+ \fi
+ \fi
+ %
+ \ifforesttikzcshack
+ \let\forest@original@tikz@parse@node\tikz@parse@node
+ \let\tikz@parse@node\forest@tikz@parse@node
+ \fi
+ \pgfkeysgetvalue{/forest/begin draw/.@cmd}\forest@temp@begindraw
+ \pgfkeysgetvalue{/forest/end draw/.@cmd}\forest@temp@enddraw
+ \edef\forest@marshal{%
+ \noexpand\forest@drawtree@beginbox
+ \expandonce{\forest@temp@begindraw\pgfkeysnovalue\pgfeov}%
+ \noexpand\forest@node@drawtree@
+ \expandonce{\forest@temp@enddraw\pgfkeysnovalue\pgfeov}%
+ \noexpand\forest@drawtree@endbox
+ }\forest@marshal
+ \ifforesttikzcshack
+ \let\tikz@parse@node\forest@original@tikz@parse@node
+ \fi
+ %
+ \ifforest@external@
+ \ifforest@externalize@tree@
+ \tikzexternaldisable
+ \eappto\forest@externalize@checkimages{%
+ \noexpand\forest@includeexternal@check{\forest@externalize@filename}%
+ }%
+ \expandafter\ifstrequal\expandafter{\forest@drawtreebox}{\pgfkeysnovalue}{%
+ \eappto\forest@externalize@loadimages{%
+ \noexpand\forest@includeexternal{\forest@externalize@filename}%
+ }%
+ }{%
+ \eappto\forest@externalize@loadimages{%
+ \noexpand\forest@includeexternal@box\forest@drawtreebox{\forest@externalize@filename}%
+ }%
+ }%
+ \fi
+ \fi
+}
+\def\forest@drawtree@root{0}
+\def\forest@node@drawtree@{%
+ \def\forest@clear@drawn{}%
+ \forest@forthis{%
+ \forest@saveandrestoremacro\forest@drawtree@root{%
+ \edef\forest@drawtree@root{\forest@cn}%
+ \forestset{draw tree method}%
+ }%
+ }%
+ \forest@node@Ifnamedefined{forest@baseline@node}{%
+ \edef\forest@baseline@id{\forest@node@Nametoid{forest@baseline@node}}%
+ \ifnum\forest@baseline@id=0
+ \else
+ \ifcsdef{forest@drawn@\forest@baseline@id}{%
+ \edef\forest@marshal{%
+ \noexpand\pgfsetbaselinepointlater{%
+ \noexpand\pgfpointanchor
+ {\forestOve{\forest@baseline@id}{name}}%
+ {\forestOve{\forest@baseline@id}{anchor}}%
+ }%
+ }\forest@marshal
+ }{%
+ \PackageWarning{forest}{Baseline node (id=\forest@cn) was not drawn (most likely it's a phantom node)}%
+ }%
+ \fi
+ }%
+ \forest@clear@drawn
+}
+\def\forest@draw@node{%
+ \ifnum\forestove{phantom}=0
+ \forest@draw@node@
+ \fi
+}
+\def\forest@draw@node@{%
+ \forest@node@forest@positionnodelater@restore
+ \ifforest@drawtree@preservenodeboxes@
+ \pgfnodealias{forest@temp}{\forestove{later@name}}%
+ \fi
+ \pgfpositionnodenow{\pgfqpoint{\forestove{x}}{\forestove{y}}}%
+ \ifforest@drawtree@preservenodeboxes@
+ \pgfnodealias{\forestove{later@name}}{forest@temp}%
+ \fi
+ \csdef{forest@drawn@\forest@cn}{}%
+ \eappto\forest@clear@drawn{\noexpand\csundef{forest@drawn@\forest@cn}}%
+}
+\def\forest@draw@edge{%
+ \ifcsdef{forest@drawn@\forest@cn}{% was the current node drawn?
+ \ifnum\forestove{@parent}=0 % do we have a parent?
+ \else
+ \ifcsdef{forest@drawn@\forestove{@parent}}{% was the parent drawn?
+ \forest@draw@edge@
+ }{}%
+ \fi
+ }{}%
+}
+\def\forest@draw@edge@{%
+ \edef\forest@temp{\forestove{edge path}}\forest@temp
+}
+\def\forest@draw@tikz{%
+ \ifnum\forestove{phantom}=0
+ \forest@draw@tikz@
+ \fi
+}
+\def\forest@draw@tikz@{%
+ \forestove{tikz}%
+}
+% \end{macrocode}
+%
+% \section{Geometry}
+% \label{imp:geometry}
+%
+% A \emph{$\alpha$ grow line} is a line through the origin at angle
+% $\alpha$. The following macro sets up the grow line, which can then
+% be used by other code (the change is local to the \TeX\ group). More
+% precisely, two normalized vectors are set up: one $(x_g,y_g)$ on the
+% grow line, and one $(x_s,y_s)$ orthogonal to it---to get
+% $(x_s,y_s$), rotate $(x_g,y_g)$ 90$^\circ$ counter-clockwise.
+% \begin{macrocode}
+\newdimen\forest@xg
+\newdimen\forest@yg
+\newdimen\forest@xs
+\newdimen\forest@ys
+\def\forest@setupgrowline#1{%
+ \edef\forest@grow{#1}%
+ \pgfqpointpolar{\forest@grow}{1pt}%
+ \forest@xg=\pgf@x
+ \forest@yg=\pgf@y
+ \forest@xs=-\pgf@y
+ \forest@ys=\pgf@x
+}
+% \end{macrocode}
+%
+% \subsection{Projections}
+% \label{imp:projections}
+%
+% The following macro belongs to the |\pgfpoint...| family: it
+% projects point |#1| on the grow line. (The result is returned via
+% |\pgf@x| and |\pgf@y|.) The implementation is based on code from
+% |tikzlibrarycalc|, but optimized for projecting on grow lines, and
+% split to optimize serial usage in |\forest@projectpath|.
+% \begin{macrocode}
+\def\forest@pgfpointprojectiontogrowline#1{{%
+ \pgf@process{#1}%
+% \end{macrocode}
+% Calculate the scalar product of $(x,y)$ and $(x_g,y_g)$: that's the
+% distance of $(x,y)$ to the grow line.
+% \begin{macrocode}
+ \pgfutil@tempdima=\pgf@sys@tonumber{\pgf@x}\forest@xg%
+ \advance\pgfutil@tempdima by\pgf@sys@tonumber{\pgf@y}\forest@yg%
+% \end{macrocode}
+% The projection is $(x_g,y_g)$ scaled by the distance.
+% \begin{macrocode}
+ \global\pgf@x=\pgf@sys@tonumber{\pgfutil@tempdima}\forest@xg%
+ \global\pgf@y=\pgf@sys@tonumber{\pgfutil@tempdima}\forest@yg%
+}}
+% \end{macrocode}
+%
+% The following macro calculates the distance of point |#2| to the
+% grow line and stores the result in \TeX-dimension |#1|. The distance
+% is the scalar product of the point vector and the normalized vector
+% orthogonal to the grow line.
+% \begin{macrocode}
+\def\forest@distancetogrowline#1#2{%
+ \pgf@process{#2}%
+ #1=\pgf@sys@tonumber{\pgf@x}\forest@xs\relax
+ \advance#1 by\pgf@sys@tonumber{\pgf@y}\forest@ys\relax
+}
+% \end{macrocode}
+% Note that the distance to the grow line is positive for points on
+% one of its sides and negative for points on the other side. (It is
+% positive on the side which $(x_s,y_s)$ points to.) We thus say that
+% the grow line partitions the plane into a \emph{positive} and a
+% \emph{negative} side.
+%
+% The following macro projects all segment edges (``points'') of a
+% simple\footnote{A path is \emph{simple} if it consists of only
+% move-to and line-to operations.} path |#1| onto the grow line.
+% The result is an array of tuples (|xo|, |yo|, |xp|, |yp|), where
+% |xo| and |yo| stand for the \emph{o}riginal point, and |xp| and |yp|
+% stand for its \emph{p}rojection. The prefix of the array is given by
+% |#2|. If the array already exists, the new items are appended to
+% it. The array is not sorted: the order of original points in the
+% array is their order in the path. The computation does not destroy
+% the current path. All result-macros have local scope.
+%
+% The macro is just a wrapper for |\forest@projectpath@process|.
+% \begin{macrocode}
+\let\forest@pp@n\relax
+\def\forest@projectpathtogrowline#1#2{%
+ \edef\forest@pp@prefix{#2}%
+ \forest@save@pgfsyssoftpath@tokendefs
+ \let\pgfsyssoftpath@movetotoken\forest@projectpath@processpoint
+ \let\pgfsyssoftpath@linetotoken\forest@projectpath@processpoint
+ \c@pgf@counta=0
+ #1%
+ \csedef{#2n}{\the\c@pgf@counta}%
+ \forest@restore@pgfsyssoftpath@tokendefs
+}
+% \end{macrocode}
+% For each point, remember the point and its projection to grow line.
+% \begin{macrocode}
+\def\forest@projectpath@processpoint#1#2{%
+ \pgfqpoint{#1}{#2}%
+ \expandafter\edef\csname\forest@pp@prefix\the\c@pgf@counta xo\endcsname{\the\pgf@x}%
+ \expandafter\edef\csname\forest@pp@prefix\the\c@pgf@counta yo\endcsname{\the\pgf@y}%
+ \forest@pgfpointprojectiontogrowline{}%
+ \expandafter\edef\csname\forest@pp@prefix\the\c@pgf@counta xp\endcsname{\the\pgf@x}%
+ \expandafter\edef\csname\forest@pp@prefix\the\c@pgf@counta yp\endcsname{\the\pgf@y}%
+ \advance\c@pgf@counta 1\relax
+}
+% \end{macrocode}
+% Sort the array (prefix |#1|) produced by
+% |\forest@projectpathtogrowline| by |(xp,yp)|, in the ascending order.
+% \begin{macrocode}
+\def\forest@sortprojections#1{%
+ % todo: optimize in cases when we know that the array is actually a
+ % merger of sorted arrays; when does this happen? in
+ % distance_between_paths, and when merging the edges of the parent
+ % and its children in a uniform growth tree
+ \edef\forest@ppi@inputprefix{#1}%
+ \c@pgf@counta=\csname#1n\endcsname\relax
+ \advance\c@pgf@counta -1
+ \forest@sort\forest@ppiraw@cmp\forest@ppiraw@let\forest@sort@ascending{0}{\the\c@pgf@counta}%
+}
+% \end{macrocode}
+%
+% The following macro processes the data gathered by (possibly more
+% than one invocation of) |\forest@projectpathtogrowline| into array
+% with prefix |#1|. The resulting data is the following.
+% \begin{itemize}
+% \item Array of projections (prefix |#2|)
+% \begin{itemize}
+% \item its items are tuples |(x,y)| (the array is sorted by |x|
+% and |y|), and
+% \item an inner array of original points (prefix |#2N@|, where $N$
+% is the index of the item in array |#2|. The items of |#2N@|
+% are |x|, |y| and |d|: |x| and |y| are the coordinates of the
+% original point; |d| is its distance to the grow line. The inner
+% array is not sorted.
+% \end{itemize}
+% \item A ``dictionary'' |#3|: keys are the coordinates |(x,y)| of
+% the original points; a value is the index of the original point's
+% projection in array |#2|.\footnote{At first sight, this
+% information could be cached ``at the source'': by
+% forest@pgfpointprojectiontogrowline. However, due to imprecise
+% intersecting (in breakpath), we cheat and merge very adjacent
+% projection points, expecting that the points to project to the
+% merged projection point. All this depends on the given path, so a
+% generic cache is not feasible.} In v2.1.4, the ``dictionary'' was
+% reimplemented using a toks register, to prevent using up the string
+% pool; that's when |#3| was introduced.
+% \end{itemize}
+% \begin{macrocode}
+\def\forest@processprojectioninfo#1#2#3{%
+ \edef\forest@ppi@inputprefix{#1}%
+% \end{macrocode}
+% Loop (counter |\c@pgf@counta|) through the sorted array of raw data.
+% \begin{macrocode}
+ \c@pgf@counta=0
+ \c@pgf@countb=-1
+ \safeloop
+ \ifnum\c@pgf@counta<\csname#1n\endcsname\relax
+% \end{macrocode}
+% Check if the projection tuple in the current raw item equals the
+% current projection.
+% \begin{macrocode}
+ \letcs\forest@xo{#1\the\c@pgf@counta xo}%
+ \letcs\forest@yo{#1\the\c@pgf@counta yo}%
+ \letcs\forest@xp{#1\the\c@pgf@counta xp}%
+ \letcs\forest@yp{#1\the\c@pgf@counta yp}%
+ \ifnum\c@pgf@countb<0
+ \forest@equaltotolerancefalse
+ \else
+ \forest@equaltotolerance
+ {\pgfqpoint\forest@xp\forest@yp}%
+ {\pgfqpoint
+ {\csname#2\the\c@pgf@countb x\endcsname}%
+ {\csname#2\the\c@pgf@countb y\endcsname}%
+ }%
+ \fi
+ \ifforest@equaltotolerance\else
+% \end{macrocode}
+% It not, we will append a new item to the outer result array.
+% \begin{macrocode}
+ \advance\c@pgf@countb 1
+ \cslet{#2\the\c@pgf@countb x}\forest@xp
+ \cslet{#2\the\c@pgf@countb y}\forest@yp
+ \csdef{#2\the\c@pgf@countb @n}{0}%
+ \fi
+% \end{macrocode}
+% If the projection is actually a projection of one point in our path (it will not be when this macro is called from |\forest@distance@between@edge@paths|):
+% \begin{macrocode}
+ % todo: this is ugly!
+ \ifdefined\forest@xo\ifx\forest@xo\relax\else
+ \ifdefined\forest@yo\ifx\forest@yo\relax\else
+% \end{macrocode}
+% Append the point of the current raw item to the inner array of
+% points projecting to the current projection.
+% \begin{macrocode}
+ \forest@append@point@to@inner@array
+ \forest@xo\forest@yo
+ {#2\the\c@pgf@countb @}%
+% \end{macrocode}
+% Put a new item in the dictionary: key = the original point, value =
+% the projection index.
+% \begin{macrocode}
+ \eapptotoks#3{(\forest@xo,\forest@yo){\the\c@pgf@countb}}%
+ \fi\fi
+ \fi\fi
+% \end{macrocode}
+% Clean-up the raw array item.
+% \begin{macrocode}
+ % todo: is this really necessary? (yes: see the "ugly" thing above)
+ \cslet{#1\the\c@pgf@counta xo}\relax
+ \cslet{#1\the\c@pgf@counta yo}\relax
+ \cslet{#1\the\c@pgf@counta xp}\relax
+ \cslet{#1\the\c@pgf@counta yp}\relax
+ \advance\c@pgf@counta 1
+ \saferepeat
+% \end{macrocode}
+% Clean up the raw array length.
+% \begin{macrocode}
+ % todo: is this really necessary?
+ \cslet{#1n}\relax
+% \end{macrocode}
+% Store the length of the outer result array.
+% \begin{macrocode}
+ \advance\c@pgf@countb 1
+ \csedef{#2n}{\the\c@pgf@countb}%
+}
+% \end{macrocode}
+%
+% Item-exchange macro for sorting the raw projection data. (|#1|
+% is copied into |#2|.)
+% \begin{macrocode}
+\def\forest@ppiraw@let#1#2{%
+ \csletcs{\forest@ppi@inputprefix#1xo}{\forest@ppi@inputprefix#2xo}%
+ \csletcs{\forest@ppi@inputprefix#1yo}{\forest@ppi@inputprefix#2yo}%
+ \csletcs{\forest@ppi@inputprefix#1xp}{\forest@ppi@inputprefix#2xp}%
+ \csletcs{\forest@ppi@inputprefix#1yp}{\forest@ppi@inputprefix#2yp}%
+}
+% \end{macrocode}
+% Item comparision macro for sorting the raw projection data.
+% \begin{macrocode}
+\def\forest@ppiraw@cmp#1#2{%
+ \forest@sort@cmptwodimcs
+ {\forest@ppi@inputprefix#1xp}{\forest@ppi@inputprefix#1yp}%
+ {\forest@ppi@inputprefix#2xp}{\forest@ppi@inputprefix#2yp}%
+}
+% \end{macrocode}
+%
+% Append the point |(#1,#2)| to the (inner) array of points
+% (prefix |#3|).
+% \begin{macrocode}
+\def\forest@append@point@to@inner@array#1#2#3{%
+ \c@pgf@countc=\csname#3n\endcsname\relax
+ \csedef{#3\the\c@pgf@countc x}{#1}%
+ \csedef{#3\the\c@pgf@countc y}{#2}%
+ \forest@distancetogrowline\pgfutil@tempdima{\pgfqpoint#1#2}%
+ \csedef{#3\the\c@pgf@countc d}{\the\pgfutil@tempdima}%
+ \advance\c@pgf@countc 1
+ \csedef{#3n}{\the\c@pgf@countc}%
+}
+% \end{macrocode}
+%
+% \subsection{Break path}
+%
+% The following macro computes from the given path (|#1|) a ``broken''
+% path (|#4|) that contains the same points of the plane, but has
+% potentially more segments, so that, for every point from a given set
+% of points on the grow line, a line through this point perpendicular
+% to the grow line intersects the broken path only at its edge
+% segments (i.e.\ not between them).
+%
+% The macro works only for \emph{simple} paths, i.e.\ paths built
+% using only move-to and line-to operations. Furthermore,
+% |\forest@processprojectioninfo| must be called before calling
+% |\forest@breakpath|: we expect information in an array with prefix
+% |#2| (projections and (an inner array of) their original points)
+% and toks register |#3| (a ``dictionary'': for each original points,
+% the index of its projection in |#2|). The macro updates array |#2|.
+% (No need to update |#3|, as it is not used anymore.)
+% \begin{macrocode}
+\def\forest@breakpath#1#2#3#4{%
+% \end{macrocode}
+% Store the current path in a macro and empty it, then process the
+% stored path. The processing creates a new current path.
+% \begin{macrocode}
+ \edef\forest@bp@prefix{#2}%
+ \let\forest@breakpath@toks#3%
+ \forest@save@pgfsyssoftpath@tokendefs
+ \let\pgfsyssoftpath@movetotoken\forest@breakpath@processfirstpoint
+ \let\pgfsyssoftpath@linetotoken\forest@breakpath@processfirstpoint
+ %\pgfusepath{}% empty the current path. ok?
+ #1%
+ \forest@restore@pgfsyssoftpath@tokendefs
+ \pgfsyssoftpath@getcurrentpath#4%
+}
+% \end{macrocode}
+% The original and the broken path start in the same way. (This code
+% implicitely ``repairs'' a path that starts illegally, with a line-to
+% operation.)
+% \begin{macrocode}
+\def\forest@breakpath@processfirstpoint#1#2{%
+ \forest@breakpath@processmoveto{#1}{#2}%
+ \let\pgfsyssoftpath@movetotoken\forest@breakpath@processmoveto
+ \let\pgfsyssoftpath@linetotoken\forest@breakpath@processlineto
+}
+% \end{macrocode}
+% When a move-to operation is encountered, it is simply copied to the
+% broken path, starting a new subpath. Then we remember the last
+% point, its projection's index (the point dictionary is used here)
+% and the actual projection point.
+% \begin{macrocode}
+\def\forest@breakpath@processmoveto#1#2{%
+ \pgfsyssoftpath@moveto{#1}{#2}%
+ \def\forest@previous@x{#1}%
+ \def\forest@previous@y{#2}%
+ \forest@breakpath@getfromtoks\forest@breakpath@toks\forest@previous@i{#1}{#2}%
+ \expandafter\let\expandafter\forest@previous@px
+ \csname\forest@bp@prefix\forest@previous@i x\endcsname
+ \expandafter\let\expandafter\forest@previous@py
+ \csname\forest@bp@prefix\forest@previous@i y\endcsname
+}
+\def\forest@breakpath@getfromtoks#1#2#3#4{%
+ % #1=cache toks register, #2=receiving cs, (#3,#4)=point;
+ % we rely on the fact that the point we're looking up should always be present
+ \def\forest@breakpath@getfromtoks@##1(#3,#4)##2##3\forest@END{##2}%
+ \edef#2{\expandafter\forest@breakpath@getfromtoks@\the#1\forest@END}%
+}
+% \end{macrocode}
+%
+% This is the heart of the path-breaking procedure.
+% \begin{macrocode}
+\def\forest@breakpath@processlineto#1#2{%
+% \end{macrocode}
+% Usually, the broken path will continue with a line-to operation (to
+% the current point |(#1,#2)|).
+% \begin{macrocode}
+ \let\forest@breakpath@op\pgfsyssoftpath@lineto
+% \end{macrocode}
+% Get the index of the current point's projection and the projection
+% itself. (The point dictionary is used here.)
+% \begin{macrocode}
+ \forest@breakpath@getfromtoks\forest@breakpath@toks\forest@i{#1}{#2}%
+ \expandafter\let\expandafter\forest@px
+ \csname\forest@bp@prefix\forest@i x\endcsname
+ \expandafter\let\expandafter\forest@py
+ \csname\forest@bp@prefix\forest@i y\endcsname
+% \end{macrocode}
+% Test whether the projections of the previous and the current point
+% are the same.
+% \begin{macrocode}
+ \forest@equaltotolerance
+ {\pgfqpoint{\forest@previous@px}{\forest@previous@py}}%
+ {\pgfqpoint{\forest@px}{\forest@py}}%
+ \ifforest@equaltotolerance
+% \end{macrocode}
+% If so, we are dealing with a segment, perpendicular to the grow
+% line. This segment must be removed, so we change the operation to
+% move-to.
+% \begin{macrocode}
+ \let\forest@breakpath@op\pgfsyssoftpath@moveto
+ \else
+% \end{macrocode}
+% Figure out the ``direction'' of the segment: in the order of the
+% array of projections, or in the reversed order? Setup the loop step
+% and the test condition.
+% \begin{macrocode}
+ \forest@temp@count=\forest@previous@i\relax
+ \ifnum\forest@previous@i<\forest@i\relax
+ \def\forest@breakpath@step{1}%
+ \def\forest@breakpath@test{\forest@temp@count<\forest@i\relax}%
+ \else
+ \def\forest@breakpath@step{-1}%
+ \def\forest@breakpath@test{\forest@temp@count>\forest@i\relax}%
+ \fi
+% \end{macrocode}
+% Loop through all the projections between (in the (possibly reversed)
+% array order) the projections of the previous and the current point
+% (both exclusive).
+% \begin{macrocode}
+ \safeloop
+ \advance\forest@temp@count\forest@breakpath@step\relax
+ \expandafter\ifnum\forest@breakpath@test
+% \end{macrocode}
+% Intersect the current segment with the line through the current (in
+% the loop!) projection perpendicular to the grow line. (There
+% \emph{will} be an intersection.)
+% \begin{macrocode}
+ \pgfpointintersectionoflines
+ {\pgfqpoint
+ {\csname\forest@bp@prefix\the\forest@temp@count x\endcsname}%
+ {\csname\forest@bp@prefix\the\forest@temp@count y\endcsname}%
+ }%
+ {\pgfpointadd
+ {\pgfqpoint
+ {\csname\forest@bp@prefix\the\forest@temp@count x\endcsname}%
+ {\csname\forest@bp@prefix\the\forest@temp@count y\endcsname}%
+ }%
+ {\pgfqpoint{\forest@xs}{\forest@ys}}%
+ }%
+ {\pgfqpoint{\forest@previous@x}{\forest@previous@y}}%
+ {\pgfqpoint{#1}{#2}}%
+% \end{macrocode}
+% Break the segment at the intersection.
+% \begin{macrocode}
+ \pgfgetlastxy\forest@last@x\forest@last@y
+ \pgfsyssoftpath@lineto\forest@last@x\forest@last@y
+% \end{macrocode}
+% Append the breaking point to the inner array for the projection.
+% \begin{macrocode}
+ \forest@append@point@to@inner@array
+ \forest@last@x\forest@last@y
+ {\forest@bp@prefix\the\forest@temp@count @}%
+ \saferepeat
+ \fi
+% \end{macrocode}
+% Add the current point.
+% \begin{macrocode}
+ \forest@breakpath@op{#1}{#2}%
+% \end{macrocode}
+% Setup new ``previous'' info: the segment edge, its projection's
+% index, and the projection.
+% \begin{macrocode}
+ \def\forest@previous@x{#1}%
+ \def\forest@previous@y{#2}%
+ \let\forest@previous@i\forest@i
+ \let\forest@previous@px\forest@px
+ \let\forest@previous@py\forest@py
+}
+% \end{macrocode}
+% Patch for speed: no need to call |\pgfmathparse| here.
+% \begin{macrocode}
+\patchcmd{\pgfpointintersectionoflines}{\pgfpoint}{\pgfqpoint}{}{}
+% \end{macrocode}
+%
+% \subsection{Get tight edge of path}
+%
+% This is one of the central algorithms of the package. Given a simple
+% path and a grow line, this method computes its (negative and
+% positive) ``tight edge'', which we (informally) define as follows.
+%
+% Imagine an infinitely long light source parallel to the grow line,
+% on the grow line's negative/positive side.\footnote{For the
+% definition of negative/positive side, see {\tt\string\forest@distancetogrowline}
+% in \S\ref{imp:projections}} Furthermore imagine that the path is
+% opaque. Then the negative/positive tight edge of the path is the
+% part of the path that is illuminated.
+%
+% This macro takes three arguments: |#1| is the path; |#2| and |#3|
+% are macros which will receive the negative and the positive edge,
+% respectively. The edges are returned in the softpath format. Grow
+% line should be set before calling this macro.
+%
+% Enclose the computation in a \TeX\ group. This is actually quite
+% crucial: if there was no enclosure, the temporary data (the segment
+% dictionary, to be precise) computed by the prior invocations of the
+% macro could corrupt the computation in the current invocation.
+% \begin{macrocode}
+\def\forest@getnegativetightedgeofpath#1#2{%
+ \forest@get@onetightedgeofpath#1\forest@sort@ascending#2}
+\def\forest@getpositivetightedgeofpath#1#2{%
+ \forest@get@onetightedgeofpath#1\forest@sort@descending#2}
+\def\forest@get@onetightedgeofpath#1#2#3{%
+ {%
+ \forest@get@one@tightedgeofpath#1#2\forest@gep@edge
+ \global\let\forest@gep@global@edge\forest@gep@edge
+ }%
+ \let#3\forest@gep@global@edge
+}
+\newtoks\forest@pi@toks
+\newtoks\forest@segment@toks
+\def\forest@get@one@tightedgeofpath#1#2#3{%
+% \end{macrocode}
+% Project the path to the grow line and compile some useful information.
+% \begin{macrocode}
+ \forest@projectpathtogrowline#1{forest@pp@}%
+ \forest@sortprojections{forest@pp@}%
+ \forest@processprojectioninfo{forest@pp@}{forest@pi@}\forest@pi@toks
+% \end{macrocode}
+% Break the path.
+% \begin{macrocode}
+ \forest@breakpath#1{forest@pi@}\forest@pi@toks\forest@brokenpath
+% \end{macrocode}
+% Compile some more useful information.
+% \begin{macrocode}
+ \forest@sort@inner@arrays{forest@pi@}#2%
+ \forest@pathtodict\forest@brokenpath\forest@segment@toks
+% \end{macrocode}
+% The auxiliary data is set up: do the work!
+% \begin{macrocode}
+ \forest@gettightedgeofpath@getedge\forest@edge
+% \end{macrocode}
+% Where possible, merge line segments of the path into a single line
+% segment. This is an important optimization, since the edges of the
+% subtrees are computed recursively. Not simplifying the edge could
+% result in a wild growth of the length of the edge (in the sense of
+% the number of segments).
+% \begin{macrocode}
+ \forest@simplifypath\forest@edge#3%
+}
+% \end{macrocode}
+% Get both negative (stored in |#2|) and positive (stored in |#3|)
+% edge of the path |#1|.
+% \begin{macrocode}
+\def\forest@getbothtightedgesofpath#1#2#3{%
+ {%
+ \forest@get@one@tightedgeofpath#1\forest@sort@ascending\forest@gep@firstedge
+% \end{macrocode}
+% Reverse the order of items in the inner arrays.
+% \begin{macrocode}
+ \c@pgf@counta=0
+ \forest@loop
+ \ifnum\c@pgf@counta<\forest@pi@n\relax
+ \forest@ppi@deflet{forest@pi@\the\c@pgf@counta @}%
+ \forest@reversearray\forest@ppi@let
+ {0}%
+ {\csname forest@pi@\the\c@pgf@counta @n\endcsname}%
+ \advance\c@pgf@counta 1
+ \forest@repeat
+% \end{macrocode}
+% Calling |\forest@gettightedgeofpath@getedge| now will result in the
+% positive edge.
+% \begin{macrocode}
+ \forest@gettightedgeofpath@getedge\forest@edge
+ \forest@simplifypath\forest@edge\forest@gep@secondedge
+% \end{macrocode}
+% Smuggle the results out of the enclosing \TeX\ group.
+% \begin{macrocode}
+ \global\let\forest@gep@global@firstedge\forest@gep@firstedge
+ \global\let\forest@gep@global@secondedge\forest@gep@secondedge
+ }%
+ \let#2\forest@gep@global@firstedge
+ \let#3\forest@gep@global@secondedge
+}
+% \end{macrocode}
+%
+% Sort the inner arrays of original points wrt the distance to the
+% grow line. |#2| =
+% |\forest@sort@ascending|/|\forest@sort@descending|.
+% \begin{macrocode}
+\def\forest@sort@inner@arrays#1#2{%
+ \c@pgf@counta=0
+ \safeloop
+ \ifnum\c@pgf@counta<\csname#1n\endcsname
+ \c@pgf@countb=\csname#1\the\c@pgf@counta @n\endcsname\relax
+ \ifnum\c@pgf@countb>1
+ \advance\c@pgf@countb -1
+ \forest@ppi@deflet{#1\the\c@pgf@counta @}%
+ \forest@ppi@defcmp{#1\the\c@pgf@counta @}%
+ \forest@sort\forest@ppi@cmp\forest@ppi@let#2{0}{\the\c@pgf@countb}%
+ \fi
+ \advance\c@pgf@counta 1
+ \saferepeat
+}
+% \end{macrocode}
+%
+% A macro that will define the item exchange macro for quicksorting
+% the inner arrays of original points. It takes one argument: the
+% prefix of the inner array.
+% \begin{macrocode}
+\def\forest@ppi@deflet#1{%
+ \edef\forest@ppi@let##1##2{%
+ \noexpand\csletcs{#1##1x}{#1##2x}%
+ \noexpand\csletcs{#1##1y}{#1##2y}%
+ \noexpand\csletcs{#1##1d}{#1##2d}%
+ }%
+}
+% \end{macrocode}
+% A macro that will define the item-compare macro for quicksorting the
+% embedded arrays of original points. It takes one argument: the
+% prefix of the inner array.
+% \begin{macrocode}
+\def\forest@ppi@defcmp#1{%
+ \edef\forest@ppi@cmp##1##2{%
+ \noexpand\forest@sort@cmpdimcs{#1##1d}{#1##2d}%
+ }%
+}
+% \end{macrocode}
+%
+% Put path segments into a ``segment dictionary'': for each segment of
+% the pgf path (given in |#1|) from $(x_1,y_1)$ to $(x_2,y_2)$ we put
+% |(x1,y1)--(x2,y2)| into toks |#2|. (The ``dictionary'' was
+% reimplemented in v2.1.4. It's based on a toks register now, we search using
+% |\pgfutil@in@|.)
+% \begin{macrocode}
+\def\forest@pathtodict#1#2{%
+ \let\forest@pathtodict@toks#2%
+ \forest@save@pgfsyssoftpath@tokendefs
+ \let\pgfsyssoftpath@movetotoken\forest@pathtodict@movetoop
+ \let\pgfsyssoftpath@linetotoken\forest@pathtodict@linetoop
+ \def\forest@pathtodict@subpathstart{}%
+ #1%
+ \forest@restore@pgfsyssoftpath@tokendefs
+}
+% \end{macrocode}
+% When a move-to operation is encountered:
+% \begin{macrocode}
+\def\forest@pathtodict@movetoop#1#2{%
+ \apptotoks\forest@pathtodict@toks{(#1,#2)}%
+}
+% \end{macrocode}
+% When a line-to operation is encountered:
+% \begin{macrocode}
+\def\forest@pathtodict@linetoop#1#2{%
+ \apptotoks\forest@pathtodict@toks{--(#1,#2)}%
+}
+% \end{macrocode}
+%
+% In this macro, the edge is actually computed.
+% \begin{macrocode}
+\def\forest@gettightedgeofpath@getedge#1{% cs to store the edge into
+% \end{macrocode}
+% Clear the path and the last projection.
+% \begin{macrocode}
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty
+ \let\forest@last@x\relax
+ \let\forest@last@y\relax
+% \end{macrocode}
+% Loop through the (ordered) array of projections. (Since we will be
+% dealing with the current and the next projection in each iteration
+% of the loop, we loop the counter from the first to the
+% second-to-last projection.)
+% \begin{macrocode}
+ \c@pgf@counta=0
+ \forest@temp@count=\forest@pi@n\relax
+ \advance\forest@temp@count -1
+ \edef\forest@nminusone{\the\forest@temp@count}%
+ \safeloop
+ \ifnum\c@pgf@counta<\forest@nminusone\relax
+ \forest@gettightedgeofpath@getedge@loopa
+ \saferepeat
+% \end{macrocode}
+% A special case: the edge ends with a degenerate subpath (a
+% point).
+% \begin{macrocode}
+ \ifnum\forest@nminusone<\forest@n\relax\else
+ \ifnum\csname forest@pi@\forest@nminusone @n\endcsname>0
+ \forest@gettightedgeofpath@maybemoveto{\forest@nminusone}{0}%
+ \fi
+ \fi
+ \pgfsyssoftpath@getcurrentpath#1%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty
+}
+% \end{macrocode}
+% The body of a loop containing an embedded loop must be put in a
+% separate macro because it contains the |\if...| of the embedded
+% |\forest@loop...| without the matching |\fi|: |\fi| is ``hiding'' in the
+% embedded |\forest@loop|, which has not been expanded yet.
+% \begin{macrocode}
+\def\forest@gettightedgeofpath@getedge@loopa{%
+ \ifnum\csname forest@pi@\the\c@pgf@counta @n\endcsname>0
+% \end{macrocode}
+% Degenerate case: a subpath of the edge is a point.
+% \begin{macrocode}
+ \forest@gettightedgeofpath@maybemoveto{\the\c@pgf@counta}{0}%
+% \end{macrocode}
+% Loop through points projecting to the current projection. The
+% preparations above guarantee that the points are ordered (either in
+% the ascending or the descending order) with respect to their
+% distance to the grow line.
+% \begin{macrocode}
+ \c@pgf@countb=0
+ \safeloop
+ \ifnum\c@pgf@countb<\csname forest@pi@\the\c@pgf@counta @n\endcsname\relax
+ \forest@gettightedgeofpath@getedge@loopb
+ \saferepeat
+ \fi
+ \advance\c@pgf@counta 1
+}
+% \end{macrocode}
+% Loop through points projecting to the next projection. Again, the
+% points are ordered.
+% \begin{macrocode}
+\def\forest@gettightedgeofpath@getedge@loopb{%
+ \c@pgf@countc=0
+ \advance\c@pgf@counta 1
+ \edef\forest@aplusone{\the\c@pgf@counta}%
+ \advance\c@pgf@counta -1
+ \safeloop
+ \ifnum\c@pgf@countc<\csname forest@pi@\forest@aplusone @n\endcsname\relax
+% \end{macrocode}
+% Test whether [the current point]--[the next point] or [the next
+% point]--[the current point] is a segment in the (broken) path. The
+% first segment found is the one with the minimal/maximal distance
+% (depending on the sort order of arrays of points projecting to the
+% same projection) to the grow line.
+%
+% Note that for this to work in all cases, the original path should
+% have been broken on its self-intersections. However, a careful
+% reader will probably remember that |\forest@breakpath| does
+% \emph{not} break the path at its self-intersections. This is
+% omitted for performance reasons. Given the intended use of the
+% algorithm (calculating edges of subtrees), self-intersecting paths
+% cannot arise anyway, if only the node boundaries are
+% non-self-intersecting. So, a warning: if you develop a new shape and
+% write a macro computing its boundary, make sure that the computed
+% boundary path is non-self-intersecting!
+% \begin{macrocode}
+ \edef\forest@temp{%
+ (\csname forest@pi@\the\c@pgf@counta @\the\c@pgf@countb x\endcsname,%
+ \csname forest@pi@\the\c@pgf@counta @\the\c@pgf@countb y\endcsname)--(%
+ \csname forest@pi@\forest@aplusone @\the\c@pgf@countc x\endcsname,%
+ \csname forest@pi@\forest@aplusone @\the\c@pgf@countc y\endcsname)%
+ }%
+ \expandafter\expandafter\expandafter\pgfutil@in@\expandafter\expandafter\expandafter
+ {\expandafter\forest@temp\expandafter}\expandafter
+ {\the\forest@segment@toks}%
+ \ifpgfutil@in@
+ \else
+ \edef\forest@temp{%
+ (\csname forest@pi@\forest@aplusone @\the\c@pgf@countc x\endcsname,%
+ \csname forest@pi@\forest@aplusone @\the\c@pgf@countc y\endcsname)--(%
+ \csname forest@pi@\the\c@pgf@counta @\the\c@pgf@countb x\endcsname,%
+ \csname forest@pi@\the\c@pgf@counta @\the\c@pgf@countb y\endcsname)%
+ }%
+ \expandafter\expandafter\expandafter\pgfutil@in@\expandafter\expandafter\expandafter
+ {\expandafter\forest@temp\expandafter}\expandafter
+ {\the\forest@segment@toks}%
+ \fi
+ \ifpgfutil@in@
+% \end{macrocode}
+% We have found the segment with the minimal/maximal distance to the
+% grow line. So let's add it to the edge path.
+%
+% First, deal with the
+% start point of the edge: check if the current point is the last
+% point. If that is the case (this happens if the current point was
+% the end point of the last segment added to the edge), nothing needs
+% to be done; otherwise (this happens if the current point will start
+% a new subpath of the edge), move to the current point, and update
+% the last-point macros.
+% \begin{macrocode}
+ \forest@gettightedgeofpath@maybemoveto{\the\c@pgf@counta}{\the\c@pgf@countb}%
+% \end{macrocode}
+% Second, create a line to the end point.
+% \begin{macrocode}
+ \edef\forest@last@x{%
+ \csname forest@pi@\forest@aplusone @\the\c@pgf@countc x\endcsname}%
+ \edef\forest@last@y{%
+ \csname forest@pi@\forest@aplusone @\the\c@pgf@countc y\endcsname}%
+ \pgfsyssoftpath@lineto\forest@last@x\forest@last@y
+% \end{macrocode}
+% Finally, ``break'' out of the innermost two loops.
+% \begin{macrocode}
+ \c@pgf@countc=\csname forest@pi@\forest@aplusone @n\endcsname
+ \c@pgf@countb=\csname forest@pi@\the\c@pgf@counta @n\endcsname
+ \fi
+ \advance\c@pgf@countc 1
+ \saferepeat
+ \advance\c@pgf@countb 1
+}
+% \end{macrocode}
+% |\forest@#1@| is an (ordered) array of points projecting to
+% projection with index |#1|. Check if |#2|th point of that array
+% equals the last point added to the edge: if not, add it.
+% \begin{macrocode}
+\def\forest@gettightedgeofpath@maybemoveto#1#2{%
+ \forest@temptrue
+ \ifx\forest@last@x\relax\else
+ \ifdim\forest@last@x=\csname forest@pi@#1@#2x\endcsname\relax
+ \ifdim\forest@last@y=\csname forest@pi@#1@#2y\endcsname\relax
+ \forest@tempfalse
+ \fi
+ \fi
+ \fi
+ \ifforest@temp
+ \edef\forest@last@x{\csname forest@pi@#1@#2x\endcsname}%
+ \edef\forest@last@y{\csname forest@pi@#1@#2y\endcsname}%
+ \pgfsyssoftpath@moveto\forest@last@x\forest@last@y
+ \fi
+}
+% \end{macrocode}
+%
+% Simplify the resulting path by ``unbreaking'' segments where
+% possible. (The macro itself is just a wrapper for path processing
+% macros below.)
+% \begin{macrocode}
+\def\forest@simplifypath#1#2{%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty
+ \forest@save@pgfsyssoftpath@tokendefs
+ \let\pgfsyssoftpath@movetotoken\forest@simplifypath@moveto
+ \let\pgfsyssoftpath@linetotoken\forest@simplifypath@lineto
+ \let\forest@last@x\relax
+ \let\forest@last@y\relax
+ \let\forest@last@atan\relax
+ #1%
+ \ifx\forest@last@x\relax\else
+ \ifx\forest@last@atan\relax\else
+ \pgfsyssoftpath@lineto\forest@last@x\forest@last@y
+ \fi
+ \fi
+ \forest@restore@pgfsyssoftpath@tokendefs
+ \pgfsyssoftpath@getcurrentpath#2%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty
+}
+% \end{macrocode}
+% When a move-to is encountered, we flush whatever segment we were
+% building, make the move, remember the last position, and set the
+% slope to unknown.
+% \begin{macrocode}
+\def\forest@simplifypath@moveto#1#2{%
+ \ifx\forest@last@x\relax\else
+ \pgfsyssoftpath@lineto\forest@last@x\forest@last@y
+ \fi
+ \pgfsyssoftpath@moveto{#1}{#2}%
+ \def\forest@last@x{#1}%
+ \def\forest@last@y{#2}%
+ \let\forest@last@atan\relax
+}
+% \end{macrocode}
+% How much may the segment slopes differ that we can still merge them?
+% (Ignore |pt|, these are degrees.) Also, how good is this number?
+% \begin{macrocode}
+\def\forest@getedgeofpath@precision{1pt}
+% \end{macrocode}
+% When a line-to is encountered\dots
+% \begin{macrocode}
+\def\forest@simplifypath@lineto#1#2{%
+ \ifx\forest@last@x\relax
+% \end{macrocode}
+% If we're not in the middle of a merger, we need to nothing but start
+% it.
+% \begin{macrocode}
+ \def\forest@last@x{#1}%
+ \def\forest@last@y{#2}%
+ \let\forest@last@atan\relax
+ \else
+% \end{macrocode}
+% Otherwise, we calculate the slope of the current segment (i.e.\ the
+% segment between the last and the current point), \dots
+% \begin{macrocode}
+ \pgfpointdiff{\pgfqpoint{#1}{#2}}{\pgfqpoint{\forest@last@x}{\forest@last@y}}%
+ \ifdim\pgf@x<\pgfintersectiontolerance
+ \ifdim-\pgf@x<\pgfintersectiontolerance
+ \pgf@x=0pt
+ \fi
+ \fi
+ \edef\forest@marshal{%
+ \noexpand\pgfmathatantwo@
+ {\expandafter\Pgf@geT\the\pgf@x}%
+ {\expandafter\Pgf@geT\the\pgf@y}%
+ }\forest@marshal
+ \let\forest@current@atan\pgfmathresult
+ \ifx\forest@last@atan\relax
+% \end{macrocode}
+% If this is the first segment in the current merger, simply remember
+% the slope and the last point.
+% \begin{macrocode}
+ \def\forest@last@x{#1}%
+ \def\forest@last@y{#2}%
+ \let\forest@last@atan\forest@current@atan
+ \else
+% \end{macrocode}
+% Otherwise, compare the first and the current slope.
+% \begin{macrocode}
+ \pgfutil@tempdima=\forest@current@atan pt
+ \advance\pgfutil@tempdima -\forest@last@atan pt
+ \ifdim\pgfutil@tempdima<0pt\relax
+ \multiply\pgfutil@tempdima -1
+ \fi
+ \ifdim\pgfutil@tempdima<\forest@getedgeofpath@precision\relax
+ \else
+% \end{macrocode}
+% If the slopes differ too much, flush the path up to the previous
+% segment, and set up a new first slope.
+% \begin{macrocode}
+ \pgfsyssoftpath@lineto\forest@last@x\forest@last@y
+ \let\forest@last@atan\forest@current@atan
+ \fi
+% \end{macrocode}
+% In any event, update the last point.
+% \begin{macrocode}
+ \def\forest@last@x{#1}%
+ \def\forest@last@y{#2}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+%
+% \subsection{Get rectangle/band edge}
+%
+% \begin{macrocode}
+\def\forest@getnegativerectangleedgeofpath#1#2{%
+ \forest@getnegativerectangleorbandedgeofpath{#1}{#2}{\the\pgf@xb}}
+\def\forest@getpositiverectangleedgeofpath#1#2{%
+ \forest@getpositiverectangleorbandedgeofpath{#1}{#2}{\the\pgf@xb}}
+\def\forest@getbothrectangleedgesofpath#1#2#3{%
+ \forest@getbothrectangleorbandedgesofpath{#1}{#2}{#3}{\the\pgf@xb}}
+\def\forest@bandlength{5000pt} % something large (ca. 180cm), but still manageable for TeX without producing `too large' errors
+\def\forest@getnegativebandedgeofpath#1#2{%
+ \forest@getnegativerectangleorbandedgeofpath{#1}{#2}{\forest@bandlength}}
+\def\forest@getpositivebandedgeofpath#1#2{%
+ \forest@getpositiverectangleorbandedgeofpath{#1}{#2}{\forest@bandlength}}
+\def\forest@getbothbandedgesofpath#1#2#3{%
+ \forest@getbothrectangleorbandedgesofpath{#1}{#2}{#3}{\forest@bandlength}}
+\def\forest@getnegativerectangleorbandedgeofpath#1#2#3{%
+ \forest@path@getboundingrectangle@ls#1{\forest@grow}%
+ \edef\forest@gre@path{%
+ \noexpand\pgfsyssoftpath@movetotoken{\the\pgf@xa}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@linetotoken{#3}{\the\pgf@ya}%
+ }%
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forest@grow}%
+ \forest@pgfpathtransformed\forest@gre@path
+ }%
+ \pgfsyssoftpath@getcurrentpath#2%
+}
+\def\forest@getpositiverectangleorbandedgeofpath#1#2#3{%
+ \forest@path@getboundingrectangle@ls#1{\forest@grow}%
+ \edef\forest@gre@path{%
+ \noexpand\pgfsyssoftpath@movetotoken{\the\pgf@xa}{\the\pgf@yb}%
+ \noexpand\pgfsyssoftpath@linetotoken{#3}{\the\pgf@yb}%
+ }%
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forest@grow}%
+ \forest@pgfpathtransformed\forest@gre@path
+ }%
+ \pgfsyssoftpath@getcurrentpath#2%
+}
+\def\forest@getbothrectangleorbandedgesofpath#1#2#3#4{%
+ \forest@path@getboundingrectangle@ls#1{\forest@grow}%
+ \edef\forest@gre@negpath{%
+ \noexpand\pgfsyssoftpath@movetotoken{\the\pgf@xa}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@linetotoken{#4}{\the\pgf@ya}%
+ }%
+ \edef\forest@gre@pospath{%
+ \noexpand\pgfsyssoftpath@movetotoken{\the\pgf@xa}{\the\pgf@yb}%
+ \noexpand\pgfsyssoftpath@linetotoken{#4}{\the\pgf@yb}%
+ }%
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forest@grow}%
+ \forest@pgfpathtransformed\forest@gre@negpath
+ }%
+ \pgfsyssoftpath@getcurrentpath#2%
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forest@grow}%
+ \forest@pgfpathtransformed\forest@gre@pospath
+ }%
+ \pgfsyssoftpath@getcurrentpath#3%
+}
+% \end{macrocode}
+%
+% \subsection{Distance between paths}
+% \label{imp:distance}
+%
+% Another crucial part of the package.
+%
+% \begin{macrocode}
+\newtoks\forest@PIi@toks
+\newtoks\forest@PIii@toks
+\def\forest@distance@between@edge@paths#1#2#3{%
+ \begingroup
+ % #1, #2 = (edge) paths
+ %
+ % project paths
+ \forest@projectpathtogrowline#1{forest@p1@}%
+ \forest@projectpathtogrowline#2{forest@p2@}%
+ % merge projections (the lists are sorted already, because edge
+ % paths are |sorted|)
+ \forest@dbep@mergeprojections
+ {forest@p1@}{forest@p2@}%
+ {forest@P1@}{forest@P2@}%
+ % process projections
+ \forest@processprojectioninfo{forest@P1@}{forest@PI1@}\forest@PIi@toks
+ \forest@processprojectioninfo{forest@P2@}{forest@PI2@}\forest@PIii@toks
+ % break paths
+ \forest@breakpath#1{forest@PI1@}\forest@PIi@toks\forest@broken@one
+ \forest@breakpath#2{forest@PI2@}\forest@PIii@toks\forest@broken@two
+ % sort inner arrays ---optimize: it's enough to find max and min
+ \forest@sort@inner@arrays{forest@PI1@}\forest@sort@descending
+ \forest@sort@inner@arrays{forest@PI2@}\forest@sort@ascending
+ % compute the distance
+ \let\forest@distance\relax
+ \c@pgf@countc=0
+ \forest@loop
+ \ifnum\c@pgf@countc<\csname forest@PI1@n\endcsname\relax
+ \ifnum\csname forest@PI1@\the\c@pgf@countc @n\endcsname=0 \else
+ \ifnum\csname forest@PI2@\the\c@pgf@countc @n\endcsname=0 \else
+ \pgfutil@tempdima=\csname forest@PI2@\the\c@pgf@countc @0d\endcsname\relax
+ \advance\pgfutil@tempdima -\csname forest@PI1@\the\c@pgf@countc @0d\endcsname\relax
+ \ifx\forest@distance\relax
+ \edef\forest@distance{\the\pgfutil@tempdima}%
+ \else
+ \ifdim\pgfutil@tempdima<\forest@distance\relax
+ \edef\forest@distance{\the\pgfutil@tempdima}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \advance\c@pgf@countc 1
+ \forest@repeat
+ \global\let\forest@global@temp\forest@distance
+ \endgroup
+ \let#3\forest@global@temp
+}
+ % merge projections: we need two projection arrays, both containing
+ % projection points from both paths, but each with the original
+ % points from only one path
+\def\forest@dbep@mergeprojections#1#2#3#4{%
+ % TODO: optimize: v bistvu ni treba sortirat, ker je edge path že sortiran
+ \forest@sortprojections{#1}%
+ \forest@sortprojections{#2}%
+ \c@pgf@counta=0
+ \c@pgf@countb=0
+ \c@pgf@countc=0
+ \edef\forest@input@prefix@one{#1}%
+ \edef\forest@input@prefix@two{#2}%
+ \edef\forest@output@prefix@one{#3}%
+ \edef\forest@output@prefix@two{#4}%
+ \forest@dbep@mp@iterate
+ \csedef{#3n}{\the\c@pgf@countc}%
+ \csedef{#4n}{\the\c@pgf@countc}%
+}
+\def\forest@dbep@mp@iterate{%
+ \let\forest@dbep@mp@next\forest@dbep@mp@iterate
+ \ifnum\c@pgf@counta<\csname\forest@input@prefix@one n\endcsname\relax
+ \ifnum\c@pgf@countb<\csname\forest@input@prefix@two n\endcsname\relax
+ \let\forest@dbep@mp@next\forest@dbep@mp@do
+ \else
+ \let\forest@dbep@mp@next\forest@dbep@mp@iteratefirst
+ \fi
+ \else
+ \ifnum\c@pgf@countb<\csname\forest@input@prefix@two n\endcsname\relax
+ \let\forest@dbep@mp@next\forest@dbep@mp@iteratesecond
+ \else
+ \let\forest@dbep@mp@next\relax
+ \fi
+ \fi
+ \forest@dbep@mp@next
+}
+\def\forest@dbep@mp@do{%
+ \forest@sort@cmptwodimcs%
+ {\forest@input@prefix@one\the\c@pgf@counta xp}%
+ {\forest@input@prefix@one\the\c@pgf@counta yp}%
+ {\forest@input@prefix@two\the\c@pgf@countb xp}%
+ {\forest@input@prefix@two\the\c@pgf@countb yp}%
+ \if\forest@sort@cmp@result=%
+ \forest@dbep@mp@@store@p\forest@input@prefix@one\c@pgf@counta
+ \forest@dbep@mp@@store@o\forest@input@prefix@one
+ \c@pgf@counta\forest@output@prefix@one
+ \forest@dbep@mp@@store@o\forest@input@prefix@two
+ \c@pgf@countb\forest@output@prefix@two
+ \advance\c@pgf@counta 1
+ \advance\c@pgf@countb 1
+ \else
+ \if\forest@sort@cmp@result>%
+ \forest@dbep@mp@@store@p\forest@input@prefix@two\c@pgf@countb
+ \forest@dbep@mp@@store@o\forest@input@prefix@two
+ \c@pgf@countb\forest@output@prefix@two
+ \advance\c@pgf@countb 1
+ \else%<
+ \forest@dbep@mp@@store@p\forest@input@prefix@one\c@pgf@counta
+ \forest@dbep@mp@@store@o\forest@input@prefix@one
+ \c@pgf@counta\forest@output@prefix@one
+ \advance\c@pgf@counta 1
+ \fi
+ \fi
+ \advance\c@pgf@countc 1
+ \forest@dbep@mp@iterate
+}
+\def\forest@dbep@mp@@store@p#1#2{%
+ \csletcs
+ {\forest@output@prefix@one\the\c@pgf@countc xp}%
+ {#1\the#2xp}%
+ \csletcs
+ {\forest@output@prefix@one\the\c@pgf@countc yp}%
+ {#1\the#2yp}%
+ \csletcs
+ {\forest@output@prefix@two\the\c@pgf@countc xp}%
+ {#1\the#2xp}%
+ \csletcs
+ {\forest@output@prefix@two\the\c@pgf@countc yp}%
+ {#1\the#2yp}%
+}
+\def\forest@dbep@mp@@store@o#1#2#3{%
+ \csletcs{#3\the\c@pgf@countc xo}{#1\the#2xo}%
+ \csletcs{#3\the\c@pgf@countc yo}{#1\the#2yo}%
+}
+\def\forest@dbep@mp@iteratefirst{%
+ \forest@dbep@mp@iterateone\forest@input@prefix@one\c@pgf@counta\forest@output@prefix@one
+}
+\def\forest@dbep@mp@iteratesecond{%
+ \forest@dbep@mp@iterateone\forest@input@prefix@two\c@pgf@countb\forest@output@prefix@two
+}
+\def\forest@dbep@mp@iterateone#1#2#3{%
+ \forest@loop
+ \ifnum#2<\csname#1n\endcsname\relax
+ \forest@dbep@mp@@store@p#1#2%
+ \forest@dbep@mp@@store@o#1#2#3%
+ \advance\c@pgf@countc 1
+ \advance#21
+ \forest@repeat
+}
+% \end{macrocode}
+%
+% \subsection{Utilities}
+%
+% Equality test: points are considered equal if they differ less than
+% |\pgfintersectiontolerance| in each coordinate.
+% \begin{macrocode}
+\newif\ifforest@equaltotolerance
+\def\forest@equaltotolerance#1#2{{%
+ \pgfpointdiff{#1}{#2}%
+ \ifdim\pgf@x<0pt \multiply\pgf@x -1 \fi
+ \ifdim\pgf@y<0pt \multiply\pgf@y -1 \fi
+ \global\forest@equaltotolerancefalse
+ \ifdim\pgf@x<\pgfintersectiontolerance\relax
+ \ifdim\pgf@y<\pgfintersectiontolerance\relax
+ \global\forest@equaltotolerancetrue
+ \fi
+ \fi
+}}
+% \end{macrocode}
+%
+% Save/restore |pgf|s |\pgfsyssoftpath@...token| definitions.
+% \begin{macrocode}
+\def\forest@save@pgfsyssoftpath@tokendefs{%
+ \let\forest@origmovetotoken\pgfsyssoftpath@movetotoken
+ \let\forest@origlinetotoken\pgfsyssoftpath@linetotoken
+ \let\forest@origcurvetosupportatoken\pgfsyssoftpath@curvetosupportatoken
+ \let\forest@origcurvetosupportbtoken\pgfsyssoftpath@curvetosupportbtoken
+ \let\forest@origcurvetotoken\pgfsyssoftpath@curvetototoken
+ \let\forest@origrectcornertoken\pgfsyssoftpath@rectcornertoken
+ \let\forest@origrectsizetoken\pgfsyssoftpath@rectsizetoken
+ \let\forest@origclosepathtoken\pgfsyssoftpath@closepathtoken
+ \let\pgfsyssoftpath@movetotoken\forest@badtoken
+ \let\pgfsyssoftpath@linetotoken\forest@badtoken
+ \let\pgfsyssoftpath@curvetosupportatoken\forest@badtoken
+ \let\pgfsyssoftpath@curvetosupportbtoken\forest@badtoken
+ \let\pgfsyssoftpath@curvetototoken\forest@badtoken
+ \let\pgfsyssoftpath@rectcornertoken\forest@badtoken
+ \let\pgfsyssoftpath@rectsizetoken\forest@badtoken
+ \let\pgfsyssoftpath@closepathtoken\forest@badtoken
+}
+\def\forest@badtoken{%
+ \PackageError{forest}{This token should not be in this path}{}%
+}
+\def\forest@restore@pgfsyssoftpath@tokendefs{%
+ \let\pgfsyssoftpath@movetotoken\forest@origmovetotoken
+ \let\pgfsyssoftpath@linetotoken\forest@origlinetotoken
+ \let\pgfsyssoftpath@curvetosupportatoken\forest@origcurvetosupportatoken
+ \let\pgfsyssoftpath@curvetosupportbtoken\forest@origcurvetosupportbtoken
+ \let\pgfsyssoftpath@curvetototoken\forest@origcurvetotoken
+ \let\pgfsyssoftpath@rectcornertoken\forest@origrectcornertoken
+ \let\pgfsyssoftpath@rectsizetoken\forest@origrectsizetoken
+ \let\pgfsyssoftpath@closepathtoken\forest@origclosepathtoken
+}
+% \end{macrocode}
+%
+% Extend path |#1| with path |#2| translated by point |#3|.
+% \begin{macrocode}
+\def\forest@extendpath#1#2#3{%
+ \pgf@process{#3}%
+ \pgfsyssoftpath@setcurrentpath#1%
+ \forest@save@pgfsyssoftpath@tokendefs
+ \let\pgfsyssoftpath@movetotoken\forest@extendpath@moveto
+ \let\pgfsyssoftpath@linetotoken\forest@extendpath@lineto
+ #2%
+ \forest@restore@pgfsyssoftpath@tokendefs
+ \pgfsyssoftpath@getcurrentpath#1%
+}
+\def\forest@extendpath@moveto#1#2{%
+ \forest@extendpath@do{#1}{#2}\pgfsyssoftpath@moveto
+}
+\def\forest@extendpath@lineto#1#2{%
+ \forest@extendpath@do{#1}{#2}\pgfsyssoftpath@lineto
+}
+\def\forest@extendpath@do#1#2#3{%
+ {%
+ \advance\pgf@x #1
+ \advance\pgf@y #2
+ #3{\the\pgf@x}{\the\pgf@y}%
+ }%
+}
+% \end{macrocode}
+%
+% Get bounding rectangle of the path. |#1| = the path, |#2| = grow.
+% Returns (|\pgf@xa|=min x/l, |\pgf@ya|=max y/s, |\pgf@xb|=min x/l, |\pgf@yb|=max y/s). (If path |#1|
+% is empty, the result is undefined.)
+% \begin{macrocode}
+\def\forest@path@getboundingrectangle@ls#1#2{%
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{-#2}%
+ \forest@pgfpathtransformed#1%
+ }%
+ \pgfsyssoftpath@getcurrentpath\forest@gbr@rotatedpath
+ \forest@path@getboundingrectangle@xy\forest@gbr@rotatedpath
+}
+\def\forest@path@getboundingrectangle@xy#1{%
+ \forest@save@pgfsyssoftpath@tokendefs
+ \let\pgfsyssoftpath@movetotoken\forest@gbr@firstpoint
+ \let\pgfsyssoftpath@linetotoken\forest@gbr@firstpoint
+ #1%
+ \forest@restore@pgfsyssoftpath@tokendefs
+}
+\def\forest@gbr@firstpoint#1#2{%
+ \pgf@xa=#1 \pgf@xb=#1 \pgf@ya=#2 \pgf@yb=#2
+ \let\pgfsyssoftpath@movetotoken\forest@gbr@point
+ \let\pgfsyssoftpath@linetotoken\forest@gbr@point
+}
+\def\forest@gbr@point#1#2{%
+ \ifdim#1<\pgf@xa\relax\pgf@xa=#1 \fi
+ \ifdim#1>\pgf@xb\relax\pgf@xb=#1 \fi
+ \ifdim#2<\pgf@ya\relax\pgf@ya=#2 \fi
+ \ifdim#2>\pgf@yb\relax\pgf@yb=#2 \fi
+}
+% \end{macrocode}
+% Hack: create our own version of |pgf|'s |\pgftransformrotate| which does not call |\pgfmathparse|. Nothing really bad happens if patch fails. We're just a bit slower.
+% \begin{macrocode}
+\let\forest@pgfqtransformrotate\pgftransformrotate
+\let\forest@pgftransformcm\pgftransformcm
+\let\forest@pgf@transformcm\pgf@transformcm
+\patchcmd{\forest@pgfqtransformrotate}{\pgfmathparse{#1}}{\edef\pgfmathresult{\number\numexpr#1}}{}{}
+\patchcmd{\forest@pgfqtransformrotate}{\pgftransformcm}{\forest@pgftransformcm}{}{}
+\patchcmd{\forest@pgftransformcm}{\pgf@transformcm}{\forest@pgf@transformcm}{}{}
+\patchcmd{\forest@pgf@transformcm}{\pgfmathsetlength}{\forest@pgf@transformcm@setlength}{}{} % 4x
+\patchcmd{\forest@pgf@transformcm}{\pgfmathsetlength}{\forest@pgf@transformcm@setlength}{}{} % 4x
+\patchcmd{\forest@pgf@transformcm}{\pgfmathsetlength}{\forest@pgf@transformcm@setlength}{}{} % 4x
+\patchcmd{\forest@pgf@transformcm}{\pgfmathsetlength}{\forest@pgf@transformcm@setlength}{}{} % 4x
+\def\forest@pgf@transformcm@setlength#1#2{#1=#2pt}
+% \end{macrocode}
+%
+% \section{The outer UI}
+%
+%
+% \subsection{Externalization}
+% \begin{macrocode}
+\pgfkeys{/forest/external/.cd,
+ %copy command/.initial={cp "\source" "\target"},
+ copy command/.initial={},
+ optimize/.is if=forest@external@optimize@,
+ context/.initial={%
+ \forestOve{\csname forest@id@of@standard node\endcsname}{environment@formula}},
+ depends on macro/.style={context/.append/.expanded={%
+ \expandafter\detokenize\expandafter{#1}}},
+}
+\def\forest@file@copy#1#2{%
+ \IfFileExists{#1}{%
+ \pgfkeysgetvalue{/forest/external/copy command}\forest@copy@command
+ \ifdefempty\forest@copy@command{%
+ \forest@file@copy@{#1}{#2}%
+ }{ % copy by external command
+ \def\source{#1}%
+ \def\target{#2}%
+ \immediate\write18{\forest@copy@command}%
+ }%
+ }{}%
+}
+\newread\forest@copy@in
+\newwrite\forest@copy@out
+\def\forest@file@copy@#1#2{%
+ \begingroup
+ \openin\forest@copy@in=#1
+ \immediate\openout\forest@copy@out#2
+ \endlinechar-1
+ \loop
+ \unless\ifeof\forest@copy@in
+ \readline\forest@copy@in to\forest@temp
+ \immediate\write\forest@copy@out{\forest@temp}%
+ \repeat
+ \immediate\closeout\forest@copy@out
+ \closein\forest@copy@in
+ \endgroup
+}
+\newif\ifforest@external@optimize@
+\forest@external@optimize@true
+\ifforest@install@keys@to@tikz@path@
+\tikzset{
+ fit to/.style={
+ /forest/for nodewalk=%
+ {TeX={\def\forest@fitto{}},#1}%
+ {TeX={\eappto\forest@fitto{(\forestove{name})}}},
+ fit/.expanded={\forest@fitto}
+ },
+}
+\fi
+\ifforest@external@
+ \ifdefined\tikzexternal@tikz@replacement\else
+ \usetikzlibrary{external}%
+ \fi
+ \pgfkeys{%
+ /tikz/external/failed ref warnings for={},
+ /pgf/images/aux in dpth=false,
+ }%
+ \tikzifexternalizing{}{%
+ \forest@file@copy{\jobname.aux}{\jobname.aux.copy}%
+ }%
+ \AtBeginDocument{%
+ \tikzifexternalizing{%
+ \IfFileExists{\tikzexternalrealjob.aux.copy}{%
+ \makeatletter
+ \input\tikzexternalrealjob.aux.copy\relax
+ \makeatother
+ }{}%
+ }{%
+ \newwrite\forest@auxout
+ \immediate\openout\forest@auxout=\tikzexternalrealjob.for.tmp
+ }%
+ \IfFileExists{\tikzexternalrealjob.for}{%
+ {%
+ \makehashother\makeatletter
+ \input\tikzexternalrealjob.for\relax
+ }%
+ }{}%
+ }%
+ \AtEndDocument{%
+ \tikzifexternalizing{}{%
+ \immediate\closeout\forest@auxout
+ \forest@file@copy{\jobname.for.tmp}{\jobname.for}%
+ }%
+ }%
+\fi
+% \end{macrocode}
+%
+% \subsection{The \texttt{forest} environment}
+% \label{imp:forest-environment}
+%
+% There are three ways to invoke \foRest;: the environment and the starless and the starred version
+% of the macro. The latter creates no group.
+%
+% Most of the code in this section deals with externalization.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment{forest}{D(){}}{%
+ \forest@config{#1}%
+ \Collect@Body
+ \forest@env
+}{}
+\NewDocumentCommand{\Forest}{s D(){} m}{%
+ \forest@config{#2}%
+ \IfBooleanTF{#1}{\let\forest@next\forest@env}{\let\forest@next\forest@group@env}%
+ \forest@next{#3}%
+}
+\def\forest@config#1{%
+ \forest@defstages{stages}%
+ \forestset{@config/.cd,#1}%
+}
+\def\forest@defstages#1{%
+ \def\forest@stages{#1}%
+}
+\forestset{@config/.cd,
+ %stages/.store in=\forest@stages,
+ stages/.code={\forest@defstages{#1}},
+ .unknown/.code={\PackageError{forest}{Unknown config option for forest environment/command.}{In Forest v2.0.0 and v2.0.1, this (parenthesized) argument accepted the definition of style stages for the current forest environment/macro. Since v2.0.2, you should write "\string\begin{forest}(stages={...})...\string\end{forest}", or "\string\Forest(stages={...}){...}" instead.}}
+}
+\def\forest@group@env#1{{\forest@env{#1}}}
+\newif\ifforest@externalize@tree@
+\newif\ifforest@was@tikzexternalwasenable
+\newcommand\forest@env[1]{%
+ \let\forest@external@next\forest@begin
+ \forest@was@tikzexternalwasenablefalse
+ \ifdefined\tikzexternal@tikz@replacement
+ \ifx\tikz\tikzexternal@tikz@replacement
+ \forest@was@tikzexternalwasenabletrue
+ \tikzexternaldisable
+ \fi
+ \fi
+ \forest@externalize@tree@false
+ \ifforest@external@
+ \ifforest@was@tikzexternalwasenable
+ \forest@env@
+ \fi
+ \fi
+ \forest@standardnode@calibrate
+ \forest@external@next{#1}%
+}
+\def\forest@env@{%
+ \iftikzexternalexportnext
+ \tikzifexternalizing{%
+ \let\forest@external@next\forest@begin@externalizing
+ }{%
+ \let\forest@external@next\forest@begin@externalize
+ }%
+ \else
+ \tikzexternalexportnexttrue
+ \fi
+}
+% \end{macrocode}
+% We're externalizing, i.e.\ this code gets executed in the embedded call.
+% \begin{macrocode}
+\long\def\forest@begin@externalizing#1{%
+ \forest@external@setup{#1}%
+ \let\forest@external@next\forest@begin
+ \forest@externalize@inner@n=-1
+ \ifforest@external@optimize@\forest@externalizing@maybeoptimize\fi
+ \forest@external@next{#1}%
+ \tikzexternalenable
+}
+\def\forest@externalizing@maybeoptimize{%
+ \edef\forest@temp{\tikzexternalrealjob-forest-\forest@externalize@outer@n}%
+ \edef\forest@marshal{%
+ \noexpand\pgfutil@in@
+ {\expandafter\detokenize\expandafter{\forest@temp}.}
+ {\expandafter\detokenize\expandafter{\pgfactualjobname}.}%
+ }\forest@marshal
+ \ifpgfutil@in@
+ \else
+ \let\forest@external@next\@gobble
+ \fi
+}
+% \end{macrocode}
+% Externalization is enabled, we're in the outer process, deciding if the picture is up-to-date.
+% \begin{macrocode}
+\long\def\forest@begin@externalize#1{%
+ \forest@external@setup{#1}%
+ \iftikzexternal@file@isuptodate
+ \setbox0=\hbox{%
+ \csname forest@externalcheck@\forest@externalize@outer@n\endcsname
+ }%
+ \fi
+ \iftikzexternal@file@isuptodate
+ \csname forest@externalload@\forest@externalize@outer@n\endcsname
+ \else
+ \forest@externalize@tree@true
+ \forest@externalize@inner@n=-1
+ \forest@begin{#1}%
+ \ifcsdef{forest@externalize@@\forest@externalize@id}{}{%
+ \immediate\write\forest@auxout{%
+ \noexpand\forest@external
+ {\forest@externalize@outer@n}%
+ {\expandafter\detokenize\expandafter{\forest@externalize@id}}%
+ {\expandonce\forest@externalize@checkimages}%
+ {\expandonce\forest@externalize@loadimages}%
+ }%
+ }%
+ \fi
+ \tikzexternalenable
+}
+\def\forest@includeexternal@check#1{%
+ \tikzsetnextfilename{#1}%
+ \IfFileExists{\tikzexternal@filenameprefix/#1}{\tikzexternal@file@isuptodatetrue}{\tikzexternal@file@isuptodatefalse}%
+}
+\def\makehashother{\catcode`\#=12}%
+\long\def\forest@external@setup#1{%
+ % set up \forest@externalize@id and \forest@externalize@outer@n
+ % we need to deal with #s correctly (\write doubles them)
+ \setbox0=\hbox{\makehashother\makeatletter
+ \scantokens{\forest@temp@toks{#1}}\expandafter
+ }%
+ \expandafter\forest@temp@toks\expandafter{\the\forest@temp@toks}%
+ \edef\forest@temp{\pgfkeysvalueof{/forest/external/context}}%
+ \edef\forest@externalize@id{%
+ \expandafter\detokenize\expandafter{\forest@temp}%
+ @@%
+ \expandafter\detokenize\expandafter{\the\forest@temp@toks}%
+ }%
+ \letcs\forest@externalize@outer@n{forest@externalize@@\forest@externalize@id}%
+ \ifdefined\forest@externalize@outer@n
+ \global\tikzexternal@file@isuptodatetrue
+ \else
+ \global\advance\forest@externalize@max@outer@n 1
+ \edef\forest@externalize@outer@n{\the\forest@externalize@max@outer@n}%
+ \global\tikzexternal@file@isuptodatefalse
+ \fi
+ \def\forest@externalize@loadimages{}%
+ \def\forest@externalize@checkimages{}%
+}
+\newcount\forest@externalize@max@outer@n
+\global\forest@externalize@max@outer@n=0
+\newcount\forest@externalize@inner@n
+% \end{macrocode}
+% The \texttt{.for} file is a string of calls of this macro.
+% \begin{macrocode}
+\long\def\forest@external#1#2#3#4{% #1=n,#2=context+source code,#3=update check code, #4=load code
+ \ifnum\forest@externalize@max@outer@n<#1
+ \global\forest@externalize@max@outer@n=#1
+ \fi
+ \global\csdef{forest@externalize@@\detokenize{#2}}{#1}%
+ \global\csdef{forest@externalcheck@#1}{#3}%
+ \global\csdef{forest@externalload@#1}{#4}%
+ \tikzifexternalizing{}{%
+ \immediate\write\forest@auxout{%
+ \noexpand\forest@external{#1}%
+ {\expandafter\detokenize\expandafter{#2}}%
+ {\unexpanded{#3}}%
+ {\unexpanded{#4}}%
+ }%
+ }%
+}
+% \end{macrocode}
+% These two macros include the external picture.
+% \begin{macrocode}
+\def\forest@includeexternal#1{%
+ \edef\forest@temp{\pgfkeysvalueof{/forest/external/context}}%
+ %\typeout{forest: Including external picture '#1' for forest context+code: '\expandafter\detokenize\expandafter{\forest@externalize@id}'}%
+ {%
+ %\def\pgf@declaredraftimage##1##2{\def\pgf@image{\hbox{}}}%
+ \tikzsetnextfilename{#1}%
+ \tikzexternalenable
+ \tikz{}%
+ }%
+}
+\def\forest@includeexternal@box#1#2{%
+ \global\setbox#1=\hbox{\forest@includeexternal{#2}}%
+}
+% \end{macrocode}
+% This code runs the bracket parser and stage processing.
+% \begin{macrocode}
+\long\def\forest@begin#1{%
+ \iffalse{\fi\forest@parsebracket#1}%
+}
+\def\forest@parsebracket{%
+ \bracketParse{\forest@get@root@afterthought}\forest@root=%
+}
+\def\forest@get@root@afterthought{%
+ \expandafter\forest@get@root@afterthought@\expandafter{\iffalse}\fi
+}
+\long\def\forest@get@root@afterthought@#1{%
+ \ifblank{#1}{}{%
+ \forestOeappto{\forest@root}{given options}{,afterthought={\unexpanded{#1}}}%
+ }%
+ \forest@do
+}
+\def\forest@do{%
+ \forest@node@Compute@numeric@ts@info{\forest@root}%
+ \expandafter\forestset\expandafter{\forest@stages}%
+ \ifforest@was@tikzexternalwasenable
+ \tikzexternalenable
+ \fi
+}
+% \end{macrocode}
+%
+% \subsection{Standard node}
+% \label{impl:standard-node}
+%
+% The standard node should be calibrated when entering the forest env: ^^AAAAAAAAAAAAAAAAAAAAAAAA
+% ^^A|\forestNodeHandle{standard node}.calibrate()|. What the calibration does is defined in a call to
+% ^^A|\forestStandardNode|.
+% The standard node init does \emph{not} initialize options from a(nother) standard node!
+% \begin{macrocode}
+\def\forest@standardnode@new{%
+ \advance\forest@node@maxid1
+ \forest@fornode{\the\forest@node@maxid}{%
+ \forest@node@init
+ \forestoeset{id}{\forest@cn}%
+ \forest@node@setname@silent{standard node}%
+ }%
+}
+\def\forest@standardnode@calibrate{%
+ \forest@fornode{\forest@node@Nametoid{standard node}}{%
+ \edef\forest@environment{\forestove{environment@formula}}%
+ \forestoget{previous@environment}\forest@previous@environment
+ \ifx\forest@environment\forest@previous@environment\else
+ \forestolet{previous@environment}\forest@environment
+ \forest@node@typeset
+ \forestoget{calibration@procedure}\forest@temp
+ \expandafter\forestset\expandafter{\forest@temp}%
+ \fi
+ }%
+}
+% \end{macrocode}
+% Usage: |\forestStandardNode[#1]{#2}{#3}{#4}|. |#1| = standard node specification --- specify it
+% as any other node content (but without children, of course). |#2| = the environment fingerprint:
+% list the values of parameters that influence the standard node's height and depth; the standard
+% will be adjusted whenever any of these parameters changes. |#3| = the calibration procedure: a
+% list of usual forest options which should calculating the values of exported options. |#4| = a
+% comma-separated list of exported options: every newly created node receives the initial values of
+% exported options from the standard node. (The standard node definition is local to the \TeX\
+% group.)
+% \begin{macrocode}
+\def\forestStandardNode[#1]#2#3#4{%
+ \let\forest@standardnode@restoretikzexternal\relax
+ \ifdefined\tikzexternaldisable
+ \ifx\tikz\tikzexternal@tikz@replacement
+ \tikzexternaldisable
+ \let\forest@standardnode@restoretikzexternal\tikzexternalenable
+ \fi
+ \fi
+ \forest@standardnode@new
+ \forest@fornode{\forest@node@Nametoid{standard node}}{%
+ \forestset{content=#1}%
+ \forestoset{environment@formula}{#2}%
+ \edef\forest@temp{\unexpanded{#3}}%
+ \forestolet{calibration@procedure}\forest@temp
+ \def\forest@calibration@initializing@code{}%
+ \pgfqkeys{/forest/initializing@code}{#4}%
+ \forestolet{initializing@code}\forest@calibration@initializing@code
+ \forest@standardnode@restoretikzexternal
+ }
+}
+\forestset{initializing@code/.unknown/.code={%
+ \eappto\forest@calibration@initializing@code{%
+ \noexpand\forestOget{\forest@node@Nametoid{standard node}}{\pgfkeyscurrentname}\noexpand\forest@temp
+ \noexpand\forestolet{\pgfkeyscurrentname}\noexpand\forest@temp
+ }%
+ }
+}
+% \end{macrocode}
+% This macro is called from a new (non-standard) node's init.
+% \begin{macrocode}
+\def\forest@initializefromstandardnode{%
+ \forestOve{\forest@node@Nametoid{standard node}}{initializing@code}%
+}
+% \end{macrocode}
+% Define the default standard node. Standard content: dj --- in Computer Modern font, d is the
+% highest and j the deepest letter (not character!). Environment fingerprint: the height of the
+% strut and the values of inner and outer seps. Calibration procedure: (i) \keyname{l sep}
+% equals the height of the strut plus the value of \keyname{inner ysep}, implementing both font-size and
+% inner sep dependency; (ii) The effect of \keyname{l} on the standard node should be the same as the
+% effect of \keyname{l sep}, thus, we derive \keyname{l} from \keyname{l sep} by adding
+% to the latter the total height of the standard node (plus the double outer sep, one for the parent
+% and one for the child). (iii) s sep is straightforward: a double inner xsep. Exported options:
+% options, calculated in the calibration. (Tricks: to change the default anchor, set it in |#1| and
+% export it; to set a non-forest node option (such as \keyname{draw} or \keyname{blue}) as default, set it
+% in |#1| and export the (internal) option \keyname{node options}.)
+% \begin{macrocode}
+\forestStandardNode[dj]
+ {%
+ \forestOve{\forest@node@Nametoid{standard node}}{content},%
+ \the\ht\strutbox,\the\pgflinewidth,%
+ \pgfkeysvalueof{/pgf/inner ysep},\pgfkeysvalueof{/pgf/outer ysep},%
+ \pgfkeysvalueof{/pgf/inner xsep},\pgfkeysvalueof{/pgf/outer xsep}%
+ }
+ {
+ l sep'/.expanded={\the\dimexpr\the\ht\strutbox+\pgfkeysvalueof{/pgf/inner ysep}},
+ l={l_sep()+abs(max_y()-min_y())+2*\pgfkeysvalueof{/pgf/outer ysep}},
+ s sep'/.expanded={\the\dimexpr \pgfkeysvalueof{/pgf/inner xsep}*2}
+ }
+ {l sep,l,s sep}
+% \end{macrocode}
+%
+%
+% \subsection{\texttt{ls} coordinate system}
+% \label{imp:ls-coordinates}
+%
+% \begin{macrocode}
+\pgfqkeys{/forest/@cs}{%
+ name/.code={%
+ \edef\forest@cn{\forest@node@Nametoid{#1}}%
+ \forest@forestcs@resetxy},
+ id/.code={%
+ \edef\forest@cn{#1}%
+ \forest@forestcs@resetxy},
+ go/.code={%
+ \forest@go{#1}%
+ \forest@forestcs@resetxy},
+ anchor/.code={\forest@forestcs@anchor{#1}},
+ l/.code={%
+ \forestmathsetlengthmacro\forest@forestcs@l{#1}%
+ \forest@forestcs@ls
+ },
+ s/.code={%
+ \forestmathsetlengthmacro\forest@forestcs@s{#1}%
+ \forest@forestcs@ls
+ },
+ .unknown/.code={%
+ \expandafter\pgfutil@in@\expandafter.\expandafter{\pgfkeyscurrentname}%
+ \ifpgfutil@in@
+ \expandafter\forest@forestcs@namegoanchor\pgfkeyscurrentname\forest@end
+ \else
+ \expandafter\forest@nameandgo\expandafter{\pgfkeyscurrentname}%
+ \forest@forestcs@resetxy
+ \fi
+ }
+}
+\def\forest@forestcs@resetxy{%
+ \ifnum\forest@cn=0 \forest@cs@invalidnodeerror\fi
+ \global\pgf@x\forestove{x}\relax
+ \global\pgf@y\forestove{y}\relax
+}
+\def\forest@forestcs@ls{%
+ \ifdefined\forest@forestcs@l
+ \ifdefined\forest@forestcs@s
+ {%
+ \pgftransformreset
+ \forest@pgfqtransformrotate{\forestove{grow}}%
+ \pgfpointtransformed{\pgfqpoint{\forest@forestcs@l}{\forest@forestcs@s}}%
+ }%
+ \global\advance\pgf@x\forestove{x}%
+ \global\advance\pgf@y\forestove{y}%
+ \fi
+ \fi
+}
+\def\forest@forestcs@anchor#1{%
+ \edef\forest@marshal{%
+ \noexpand\forest@original@tikz@parse@node\relax
+ (\forestove{name}\ifx\relax#1\relax\else.\fi#1)%
+ }\forest@marshal
+}
+\def\forest@forestcs@namegoanchor#1.#2\forest@end{%
+ \forest@nameandgo{#1}%
+ \ifnum\forest@cn=0 \forest@cs@invalidnodeerror\fi
+ \forest@forestcs@anchor{#2}%
+}
+\def\forest@cs@invalidnodeerror{%
+ \PackageError{forest}{Attempt to refer to the invalid node by "forest cs"}{}%
+}
+\tikzdeclarecoordinatesystem{forest}{%
+ \forest@forthis{%
+ \forest@forestcs@resetxy
+ \ifdefined\forest@forestcs@l\undef\forest@forestcs@l\fi
+ \ifdefined\forest@forestcs@s\undef\forest@forestcs@s\fi
+ \pgfqkeys{/forest/@cs}{#1}%
+ }%
+}
+% \end{macrocode}
+%
+% \subsection{Relative node names in \TikZ;}
+% \label{sec:relative-node-names}
+%
+% A hack into \TikZ;'s coordinate parser: implements relative node names!
+% \begin{macrocode}
+\def\forest@tikz@parse@node#1(#2){%
+ \pgfutil@in@.{#2}%
+ \ifpgfutil@in@
+ \expandafter\forest@tikz@parse@node@checkiftikzname@withdot
+ \else%
+ \expandafter\forest@tikz@parse@node@checkiftikzname@withoutdot
+ \fi%
+ #1(#2)\forest@end
+}
+\def\forest@tikz@parse@node@checkiftikzname@withdot#1(#2.#3)\forest@end{%
+ \forest@tikz@parse@node@checkiftikzname#1{#2}{.#3}}
+\def\forest@tikz@parse@node@checkiftikzname@withoutdot#1(#2)\forest@end{%
+ \forest@tikz@parse@node@checkiftikzname#1{#2}{}}
+\def\forest@tikz@parse@node@checkiftikzname#1#2#3{%
+ \expandafter\ifx\csname pgf@sh@ns@#2\endcsname\relax
+ \forest@forthis{%
+ \forest@nameandgo{#2}%
+ \ifnum\forest@cn=0 \forest@cs@invalidnodeerror\fi
+ \edef\forest@temp@relativenodename{\forestove{name}}%
+ }%
+ \else
+ \def\forest@temp@relativenodename{#2}%
+ \fi
+ \expandafter\forest@original@tikz@parse@node\expandafter#1\expandafter(\forest@temp@relativenodename#3)%
+}
+\def\forest@nameandgo#1{%
+ \pgfutil@in@!{#1}%
+ \ifpgfutil@in@
+ \forest@nameandgo@(#1)%
+ \else
+ \ifstrempty{#1}{}{\edef\forest@cn{\forest@node@Nametoid{#1}}}%
+ \fi
+}
+\def\forest@nameandgo@(#1!#2){%
+ \ifstrempty{#1}{}{\edef\forest@cn{\forest@node@Nametoid{#1}}}%
+ \forest@go{#2}%
+}
+% \end{macrocode}
+%
+% \subsection{Anchors}
+% \label{sec:anchors}
+%
+% \FoRest; anchors are |(child/parent)_anchor| and growth anchors |parent/children_first/last|. The following code resolves them into \TikZ; anchors, based on the value of option |(child/parent)_anchor| and values of |grow| and |reversed|.
+%
+% We need to access |rotate| for the anchors below to work in general.
+% \begin{macrocode}
+\forestset{
+ declare count={rotate}{0},
+ autoforward'={rotate}{node options},
+}
+% \end{macrocode}
+% Variants of |parent/children_first/last| without |'| snap border anchors to the closest compass direction.
+% \begin{macrocode}
+\newif\ifforest@anchor@snapbordertocompass
+% \end{macrocode}
+% The code is used both in generic anchors (then, the result should be forwarded to \TikZ; for evaluation into coordinates) and in the UI macro |\forestanchortotikzanchor|.
+% \begin{macrocode}
+\newif\ifforest@anchor@forwardtotikz
+% \end{macrocode}
+% Growth-based anchors set this to true to signal that the result is a border anchor.
+% \begin{macrocode}
+\newif\ifforest@anchor@isborder
+% \end{macrocode}
+% The UI macro.
+% \begin{macrocode}
+\def\forestanchortotikzanchor#1#2{% #1 = forest anchor, #2 = macro to receive the tikz anchor
+ \forest@anchor@forwardtotikzfalse
+ \forest@anchor@do{}{#1}{\forest@cn}%
+ \let#2\forest@temp@anchor
+}
+% \end{macrocode}
+% Generic anchors.
+% \begin{macrocode}
+\pgfdeclaregenericanchor{child anchor}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{child anchor}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{parent anchor}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{parent anchor}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{anchor}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{anchor}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{children}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{children}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-children}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-children}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{children first}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{children first}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-children first}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-children first}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{first}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{first}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{parent first}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{parent first}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-parent first}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-parent first}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{parent}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{parent}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-parent}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-parent}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{parent last}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{parent last}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-parent last}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-parent last}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{last}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{last}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{children last}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{children last}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-children last}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-children last}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{children'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{children'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-children'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-children'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{children first'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{children first'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-children first'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-children first'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{first'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{first'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{parent first'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{parent first'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-parent first'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-parent first'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{parent'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{parent'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-parent'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-parent'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{parent last'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{parent last'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-parent last'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-parent last'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{last'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{last'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{children last'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{children last'}{\forest@referencednodeid}%
+}
+\pgfdeclaregenericanchor{-children last'}{%
+ \forest@anchor@forwardtotikztrue
+ \forest@anchor@do{#1}{-children last'}{\forest@referencednodeid}%
+}
+% \end{macrocode}
+% The driver. The result is being passed around in |\forest@temp@anchor|.
+% \begin{macrocode}
+\def\forest@anchor@do#1#2#3{% #1 = shape name, #2 = (potentially) forest anchor, #3 = node id
+ \forest@fornode{#3}{%
+ \def\forest@temp@anchor{#2}%
+ \forest@anchor@snapbordertocompassfalse
+ \forest@anchor@isborderfalse
+ \forest@anchor@to@tikz@anchor
+ \forest@anchor@border@to@compass
+ \ifforest@anchor@forwardtotikz
+ \forest@anchor@forward{#1}%
+ \else
+ \fi
+ }%
+}
+% \end{macrocode}
+% This macro will loop (resolving the anchor) until the result is not a \FoRest; macro.
+% \begin{macrocode}
+\def\forest@anchor@to@tikz@anchor{%
+ \ifcsdef{forest@anchor@@\forest@temp@anchor}{%
+ \csuse{forest@anchor@@\forest@temp@anchor}%
+ \forest@anchor@to@tikz@anchor
+ }{}%
+}
+% \end{macrocode}
+% Actual computation.
+% \begin{macrocode}
+\csdef{forest@anchor@@parent anchor}{%
+ \forestoget{parent anchor}\forest@temp@anchor}
+\csdef{forest@anchor@@child anchor}{%
+ \forestoget{child anchor}\forest@temp@anchor}
+\csdef{forest@anchor@@anchor}{%
+ \forestoget{anchor}\forest@temp@anchor}
+\csdef{forest@anchor@@children'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor{\number\numexpr\forestove{grow}-\forestove{rotate}}%
+}
+\csdef{forest@anchor@@-children'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor{\number\numexpr 180+\forestove{grow}-\forestove{rotate}}%
+}
+\csdef{forest@anchor@@parent'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@grow{\ifnum\forestove{@parent}=0 \forestove{grow}\else\forestOve{\forestove{@parent}}{grow}\fi}%
+ \edef\forest@temp@anchor{\number\numexpr\forest@temp@grow-\forestove{rotate}+180}%
+}
+\csdef{forest@anchor@@-parent'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@grow{\ifnum\forestove{@parent}=0 \forestove{grow}\else\forestOve{\forestove{@parent}}{grow}\fi}%
+ \edef\forest@temp@anchor{\number\numexpr\forest@temp@grow-\forestove{rotate}}%
+}
+\csdef{forest@anchor@@first'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 -\else+\fi90}%
+}
+\csdef{forest@anchor@@last'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 +\else-\fi90}%
+}
+\csdef{forest@anchor@@parent first'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@grow{\ifnum\forestove{@parent}=0 \forestove{grow}\else\forestOve{\forestove{@parent}}{grow}\fi}%
+ \edef\forest@temp@reversed{\ifnum\forestove{@parent}=0 \forestove{reversed}\else\forestOve{\forestove{@parent}}{reversed}\fi}%
+ \edef\forest@temp@anchor@parent{\number\numexpr\forest@temp@grow-\forestove{rotate}+180}%
+ \edef\forest@temp@anchor@first{\number\numexpr\forest@temp@grow-\forestove{rotate}\ifnum\forest@temp@reversed=0 -\else+\fi90}%
+ \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@first}\forest@temp@anchor
+}
+\csdef{forest@anchor@@-parent first'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@grow{\ifnum\forestove{@parent}=0 \forestove{grow}\else\forestOve{\forestove{@parent}}{grow}\fi}%
+ \edef\forest@temp@reversed{\ifnum\forestove{@parent}=0 \forestove{reversed}\else\forestOve{\forestove{@parent}}{reversed}\fi}%
+ \edef\forest@temp@anchor@parent{\number\numexpr\forest@temp@grow-\forestove{rotate}}%
+ \edef\forest@temp@anchor@first{\number\numexpr\forest@temp@grow-\forestove{rotate}\ifnum\forest@temp@reversed=0 -\else+\fi90}%
+ \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@first}\forest@temp@anchor
+}
+\csdef{forest@anchor@@parent last'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@grow{\ifnum\forestove{@parent}=0 \forestove{grow}\else\forestOve{\forestove{@parent}}{grow}\fi}%
+ \edef\forest@temp@reversed{\ifnum\forestove{@parent}=0 \forestove{reversed}\else\forestOve{\forestove{@parent}}{reversed}\fi}%
+ \edef\forest@temp@anchor@parent{\number\numexpr\forest@temp@grow-\forestove{rotate}+180}%
+ \edef\forest@temp@anchor@last{\number\numexpr\forest@temp@grow-\forestove{rotate}\ifnum\forest@temp@reversed=0 +\else-\fi90}%
+ \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@last}\forest@temp@anchor
+}
+\csdef{forest@anchor@@-parent last'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@grow{\ifnum\forestove{@parent}=0 \forestove{grow}\else\forestOve{\forestove{@parent}}{grow}\fi}%
+ \edef\forest@temp@reversed{\ifnum\forestove{@parent}=0 \forestove{reversed}\else\forestOve{\forestove{@parent}}{reversed}\fi}%
+ \edef\forest@temp@anchor@parent{\number\numexpr\forest@temp@grow-\forestove{rotate}}%
+ \edef\forest@temp@anchor@last{\number\numexpr\forest@temp@grow-\forestove{rotate}\ifnum\forest@temp@reversed=0 +\else-\fi90}%
+ \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@last}\forest@temp@anchor
+}
+\csdef{forest@anchor@@children first'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor@first{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 -\else+\fi90}%
+ \forest@getaverageangle{\forestove{grow}-\forestove{rotate}}{\forest@temp@anchor@first}\forest@temp@anchor
+}
+\csdef{forest@anchor@@-children first'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor@first{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 -\else+\fi90}%
+ \forest@getaverageangle{180+\forestove{grow}-\forestove{rotate}}{\forest@temp@anchor@first}\forest@temp@anchor
+}
+\csdef{forest@anchor@@children last'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor@last{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 +\else-\fi90}%
+ \forest@getaverageangle{\forestove{grow}-\forestove{rotate}}{\forest@temp@anchor@last}\forest@temp@anchor
+}
+\csdef{forest@anchor@@-children last'}{%
+ \forest@anchor@isbordertrue
+ \edef\forest@temp@anchor@last{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 +\else-\fi90}%
+ \forest@getaverageangle{180+\forestove{grow}-\forestove{rotate}}{\forest@temp@anchor@last}\forest@temp@anchor
+}
+\csdef{forest@anchor@@children}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@children'}%
+}
+\csdef{forest@anchor@@-children}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@-children'}%
+}
+\csdef{forest@anchor@@parent}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@parent'}%
+}
+\csdef{forest@anchor@@-parent}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@-parent'}%
+}
+\csdef{forest@anchor@@first}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@first'}%
+}
+\csdef{forest@anchor@@last}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@last'}%
+}
+\csdef{forest@anchor@@parent first}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@parent first'}%
+}
+\csdef{forest@anchor@@-parent first}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@-parent first'}%
+}
+\csdef{forest@anchor@@parent last}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@parent last'}%
+}
+\csdef{forest@anchor@@-parent last}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@-parent last'}%
+}
+\csdef{forest@anchor@@children first}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@children first'}%
+}
+\csdef{forest@anchor@@-children first}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@-children first'}%
+}
+\csdef{forest@anchor@@children last}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@children last'}%
+}
+\csdef{forest@anchor@@-children last}{%
+ \forest@anchor@snapbordertocompasstrue
+ \csuse{forest@anchor@@-children last'}%
+}
+% \end{macrocode}
+% This macro computes the "average" angle of |#1| and |#2| and stores in into |#3|.
+% The angle computed is the geometrically "closer" one. The formula is
+% adapted from \url{http://stackoverflow.com/a/1159336/624872}.
+% \begin{macrocode}
+\def\forest@getaverageangle#1#2#3{%
+ \edef\forest@temp{\number\numexpr #1-#2+540}%
+ \expandafter\pgfmathMod@\expandafter{\forest@temp}{360}%
+ \forest@truncatepgfmathresult
+ \edef\forest@temp{\number\numexpr 360+#2+((\pgfmathresult-180)/2)}%
+ \expandafter\pgfmathMod@\expandafter{\forest@temp}{360}%
+ \forest@truncatepgfmathresult
+ \let#3\pgfmathresult
+}
+\def\forest@truncatepgfmathresult{%
+ \afterassignment\forest@gobbletoEND
+ \forest@temp@count=\pgfmathresult\forest@END
+ \def\pgfmathresult{\the\forest@temp@count}%
+}
+\def\forest@gobbletoEND#1\forest@END{}
+% \end{macrocode}
+% The first macro changes border anchor to compass anchor. The second one does this only if the node shape allows it.
+% \begin{macrocode}
+\def\forest@anchor@border@to@compass{%
+ \ifforest@anchor@isborder % snap to 45 deg, to range 0-360
+ \ifforest@anchor@snapbordertocompass
+ \forest@anchor@snap@border@to@compass
+ \else % to range 0-360
+ \pgfmathMod@{\forest@temp@anchor}{360}%
+ \forest@truncatepgfmathresult
+ \let\forest@temp@anchor\pgfmathresult
+ \fi
+ \ifforest@anchor@snapbordertocompass
+ \ifforest@anchor@forwardtotikz
+ \ifcsname pgf@anchor%
+ @\csname pgf@sh@ns@\pgfreferencednodename\endcsname
+ @\csname forest@compass@\forest@temp@anchor\endcsname
+ \endcsname
+ \letcs\forest@temp@anchor{forest@compass@\forest@temp@anchor}%
+ \fi
+ \else
+ \letcs\forest@temp@anchor{forest@compass@\forest@temp@anchor}%
+ \fi
+ \fi
+ \fi
+}
+\csdef{forest@compass@0}{east}
+\csdef{forest@compass@45}{north east}
+\csdef{forest@compass@90}{north}
+\csdef{forest@compass@135}{north west}
+\csdef{forest@compass@180}{west}
+\csdef{forest@compass@225}{south west}
+\csdef{forest@compass@270}{south}
+\csdef{forest@compass@315}{south east}
+\csdef{forest@compass@360}{east}
+% \end{macrocode}
+% This macro approximates an angle (stored in |\forest@temp@anchor|) with a compass direction (stores it in the same macro).
+% \begin{macrocode}
+\def\forest@anchor@snap@border@to@compass{%
+ \pgfmathMod@{\forest@temp@anchor}{360}%
+ \pgfmathdivide@{\pgfmathresult}{45}%
+ \pgfmathround@{\pgfmathresult}%
+ \pgfmathmultiply@{\pgfmathresult}{45}%
+ \forest@truncatepgfmathresult
+ \let\forest@temp@anchor\pgfmathresult
+}
+% \end{macrocode}
+% This macro forwards the resulting anchor to \TikZ;.
+% \begin{macrocode}
+\def\forest@anchor@forward#1{% #1 = shape name
+ \ifdefempty\forest@temp@anchor{%
+ \pgf@sh@reanchor{#1}{center}%
+ \xdef\forest@hack@tikzshapeborder{%
+ \noexpand\tikz@shapebordertrue
+ \def\noexpand\tikz@shapeborder@name{\pgfreferencednodename}%
+ }\aftergroup\forest@hack@tikzshapeborder
+ }{%
+ \pgf@sh@reanchor{#1}{\forest@temp@anchor}%
+ }%
+}
+% \end{macrocode}
+%
+% Expandably strip "not yet positionedPGFINTERNAL" from |\pgfreferencednodename| if it is there.
+% \begin{macrocode}
+\def\forest@referencednodeid{\forest@node@Nametoid{\forest@referencednodename}}%
+\def\forest@referencednodename{%
+ \expandafter\expandafter\expandafter\forest@referencednodename@\expandafter\pgfreferencednodename\forest@pgf@notyetpositioned\relax
+}
+\expandafter\def\expandafter\forest@referencednodename@\expandafter#\expandafter1\forest@pgf@notyetpositioned#2\relax{%
+ \if\relax#1\relax\forest@referencednodename@stripafter#2\relax\fi
+ \if\relax#2\relax#1\fi
+}
+\expandafter\def\expandafter\forest@referencednodename@stripafter\expandafter#\expandafter1\forest@pgf@notyetpositioned\relax{#1}
+% \end{macrocode}
+%
+% This macro sets up |\pgf@x| and |\pgf@y| to the given anchor's coordinates, within the node's coordinate system. It works even before the node was positioned. If the anchor is empty, i.e.\ if is the implicit border anchor, we return the coordinates for the center.
+% \begin{macrocode}
+\def\forest@pointanchor#1{% #1 = anchor
+ \forest@Pointanchor{\forest@cn}{#1}%
+}
+\def\forest@Pointanchor#1#2{% #1 = node id, #2 = anchor
+ \def\forest@pa@temp@name{name}%
+ \forestOifdefined{#1}{@box}{%
+ \forestOget{#1}{@box}\forest@temp
+ \ifdefempty\forest@temp{}{%
+ \def\forest@pa@temp@name{later@name}%
+ }%
+ }{}%
+ \setbox0\hbox{%
+ \begin{pgfpicture}%
+ \if\relax\forestOve{#1}{#2}\relax
+ \pgfpointanchor{\forestOve{#1}{\forest@pa@temp@name}}{center}%
+ \else
+ \pgfpointanchor{\forestOve{#1}{\forest@pa@temp@name}}{\forestOve{#1}{#2}}%
+ \fi
+ \xdef\forest@global@marshal{%
+ \noexpand\global\noexpand\pgf@x=\the\pgf@x\relax
+ \noexpand\global\noexpand\pgf@y=\the\pgf@y\relax\relax
+ }%
+ \end{pgfpicture}%
+ }%
+ \forest@global@marshal
+}
+% \end{macrocode}
+% Fill in the values of the invalid node. (It's now easy to test for |id=0|.)
+% \begin{macrocode}
+\forest@node@init
+% \end{macrocode}
+% \section{Compatibility with previous versions}
+% \begin{macrocode}
+\ifdefempty{\forest@compat}{}{%
+ \RequirePackage{forest-compat}
+}
+% \end{macrocode}
+%
+% \endinput
+%
+% Local Variables:
+% mode: doctex
+% fill-column: 100
+% TeX-command-default: "sty"
+% TeX-master: t
+% End:
diff --git a/graphics/pgf/contrib/forest/forest.ins b/graphics/pgf/contrib/forest/forest.ins
new file mode 100644
index 0000000000..4bbad239b9
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest.ins
@@ -0,0 +1,28 @@
+%% forest.ins
+%%
+%% Copyright (c) 2012-2017 Saso Zivanovic
+%% saso.zivanovic@guest.arnes.si
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This file is a part of package `forest'. For the list of files
+%% constituting the package see main source file of the package,
+%% `forest.dtx', or the derived `forest.sty'.
+%%
+\input docstrip.tex
+\keepsilent
+\preamble
+\endpreamble
+\askforoverwritefalse
+\generate{\file{forest.sty}{\from{forest.dtx}{}}}
+\generate{\file{forest-lib-linguistics.sty}{\from{forest-libs.dtx}{linguistics}}}
+\generate{\file{forest-lib-edges.sty}{\from{forest-libs.dtx}{edges}}}
+\endbatchfile
diff --git a/graphics/pgf/contrib/forest/forest.pdf b/graphics/pgf/contrib/forest/forest.pdf
new file mode 100644
index 0000000000..34a1a3df39
--- /dev/null
+++ b/graphics/pgf/contrib/forest/forest.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/forest/tex.bib b/graphics/pgf/contrib/forest/tex.bib
new file mode 100644
index 0000000000..0f0b8795c7
--- /dev/null
+++ b/graphics/pgf/contrib/forest/tex.bib
@@ -0,0 +1,20 @@
+@Manual{tikzpgf2.10,
+ title = {TikZ \& PGF, Manual for Version 2.10},
+ author = {Till Tantau},
+ year = 2007,
+ url = {http://sourceforge.net/projects/pgf}
+}
+
+@book{texbook,
+ author = "Donald E. Knuth",
+ title = "The {TeX}book",
+ publisher = "Addison-Wesley",
+ year = 1996,
+}
+
+@Manual{tikzpgf3.0.0,
+ title = {TikZ \& PGF, Manual for Version 3.0.0},
+ author = {Till Tantau},
+ year = 2013,
+ url = {http://sourceforge.net/projects/pgf}
+}
diff --git a/graphics/pgf/contrib/grafcet/README b/graphics/pgf/contrib/grafcet/README
new file mode 100644
index 0000000000..8d25e4bb52
--- /dev/null
+++ b/graphics/pgf/contrib/grafcet/README
@@ -0,0 +1,4 @@
+The grafcet package is for drawing Grafcet/SFC diagrams in accordance
+with EN 60848, using PGF/TikZ.
+
+License: LPPL, version 1 or later.
diff --git a/graphics/pgf/contrib/grafcet/grafcet.pdf b/graphics/pgf/contrib/grafcet/grafcet.pdf
new file mode 100644
index 0000000000..a8a9bcbc1f
--- /dev/null
+++ b/graphics/pgf/contrib/grafcet/grafcet.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/grafcet/grafcet.sty b/graphics/pgf/contrib/grafcet/grafcet.sty
new file mode 100644
index 0000000000..42864545bd
--- /dev/null
+++ b/graphics/pgf/contrib/grafcet/grafcet.sty
@@ -0,0 +1,620 @@
+\NeedsTeXFormat{LaTeX2e}[1999/01/01]
+\ProvidesPackage{grafcet}[2007/03/05]
+
+\RequirePackage{tikz}
+\usetikzlibrary{shapes,arrows}
+\RequirePackage{ifthen}
+\RequirePackage{ifsym}
+%macros commande diverses
+
+
+\newcommand{\Etape}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+\node (AX#2) at (X#2){};
+\DecaleNoeudy[2.5]{X#2}{NoeudGraf}
+\node (VX#2) at (NoeudGraf) {};
+}
+
+\newcommand{\EtapeSeule}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+\node (AX#2) at (X#2){};
+}
+\newcommand{\EtapeInit}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+\path (X#2.north west) --++(0.3em,0) coordinate(NOh) -- (X#2.north east)--++(-0.3em,0)coordinate(NEh);
+\path (X#2.south west) --++(0.3em,0) coordinate(SOh) -- (X#2.south east)--++(-0.3em,0)coordinate(SEh);
+\path (X#2.north west) --++(0,-0.3em) coordinate(NOv) -- (X#2.south west)--++(0,0.3em)coordinate(SOv);
+\path (X#2.north east) --++(0,-0.3em) coordinate(NEv) -- (X#2.south east)--++(0,0.3em)coordinate(SEv);
+
+\draw (NOh|-NOv)coordinate(NO) -- (SOh|-SOv) coordinate (SO) -- (SEh|-SEv)coordinate(SE) -- (NEh|-NEv) -- cycle;
+%\node (coin1) at (X#2.north west)[minimum size=0.1em]{}{};
+%\node (coin2) at (X#2.south east)[minimum size=0.1em]{}{};
+%\draw (coin1.south east) rectangle (coin2.north west);
+\node (AX#2) at (X#2){};
+\DecaleNoeudy[2.5]{X#2}{NoeudGraf}
+\node (VX#2) at (NoeudGraf) {};
+}
+
+\newcommand{\MacroEtape}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+\node (coin1) at (X#2.north west)[minimum size=0.1em]{}{};
+\node (coin2) at (X#2.south east)[minimum size=0.1em]{}{};
+\node (coin3) at (X#2.north east)[minimum size=0.1em]{}{};
+\node (coin4) at (X#2.south west)[minimum size=0.1em]{}{};
+\draw (coin1.south) -- (coin3.south);
+\draw (coin2.north) -- (coin4.north);
+\node (AX#2) at (X#2){};
+\DecaleNoeudy[2.5]{X#2}{NoeudGraf}
+\node (VX#2) at (NoeudGraf) {};
+}
+\newcommand{\MacroEtapeE}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+\node (coin1) at (X#2.north west)[minimum size=0.1em]{}{};
+\node (coin2) at (X#2.south east)[minimum size=0.1em]{}{};
+\node (coin3) at (X#2.north east)[minimum size=0.1em]{}{};
+\node (coin4) at (X#2.south west)[minimum size=0.1em]{}{};
+\draw (coin1.south) -- (coin3.south);
+\node (AX#2) at (X#2){};
+\DecaleNoeudy[2.5]{X#2}{NoeudGraf}
+\node (VX#2) at (NoeudGraf) {};
+}
+
+\newcommand{\MacroEtapeS}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+\node (coin1) at (X#2.north west)[minimum size=0.1em]{}{};
+\node (coin2) at (X#2.south east)[minimum size=0.1em]{}{};
+\node (coin3) at (X#2.north east)[minimum size=0.1em]{}{};
+\node (coin4) at (X#2.south west)[minimum size=0.1em]{}{};
+\draw (coin2.north) -- (coin4.north);
+\node (AX#2) at (X#2){};
+\DecaleNoeudy[2.5]{X#2}{NoeudGraf}
+\node (VX#2) at (NoeudGraf) {};
+}
+
+\newcommand{\EtapeEncapsulante}[2][NoeudGraf]{
+\node[inner sep=0,outer sep=0] (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+
+\path (X#2.north west) --++(0.8em,0) coordinate(NOh) -- (X#2.north east)--++(-0.8em,0)coordinate(NEh);
+\path (X#2.south west) --++(0.8em,0) coordinate(SOh) -- (X#2.south east)--++(-0.8em,0)coordinate(SEh);
+\path (X#2.north west) --++(0,-0.8em) coordinate(NOv) -- (X#2.south west)--++(0,0.8em)coordinate(SOv);
+\path (X#2.north east) --++(0,-0.8em) coordinate(NEv) -- (X#2.south east)--++(0,0.8em)coordinate(SEv);
+
+\draw (X#2.north west) -- (NOh) -- (NOv) -- cycle;
+\draw (X#2.south west) -- (SOh) -- (SOv) -- cycle;
+\draw (X#2.north east) -- (NEh) -- (NEv) -- cycle;
+\draw (X#2.south east) -- (SEh) -- (SEv) -- cycle;
+
+\node (AX#2) at (X#2){};
+\DecaleNoeudy[2.5]{X#2}{NoeudGraf}
+\node (VX#2) at (NoeudGraf) {};
+}
+
+\newcommand{\EtapeEncapsulanteInit}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [draw, rectangle,
+ minimum height=2.5em,minimum width=2.5em] (X#2) {#2};
+\path (X#2.north west) --++(0.3em,0) coordinate(NOh) -- (X#2.north east)--++(-0.3em,0)coordinate(NEh);
+\path (X#2.south west) --++(0.3em,0) coordinate(SOh) -- (X#2.south east)--++(-0.3em,0)coordinate(SEh);
+\path (X#2.north west) --++(0,-0.3em) coordinate(NOv) -- (X#2.south west)--++(0,0.3em)coordinate(SOv);
+\path (X#2.north east) --++(0,-0.3em) coordinate(NEv) -- (X#2.south east)--++(0,0.3em)coordinate(SEv);
+
+\draw (NOh|-NOv)coordinate(NO) -- (SOh|-SOv) coordinate (SO) -- (SEh|-SEv)coordinate(SE) -- (NEh|-NEv)coordinate(NE) -- cycle;
+
+\path (NO) --++(0.5em,0) coordinate(NOh) -- (NE)--++(-0.5em,0)coordinate(NEh);
+\path (SO) --++(0.5em,0) coordinate(SOh) -- (SE)--++(-0.5em,0)coordinate(SEh);
+\path (NO) --++(0,-0.5em) coordinate(NOv) -- (SO)--++(0,0.5em)coordinate(SOv);
+\path (NE) --++(0,-0.5em) coordinate(NEv) -- (SE)--++(0,0.5em)coordinate(SEv);
+
+\draw (NO) -- (NOh) -- (NOv) -- cycle;
+\draw (SO) -- (SOh) -- (SOv) -- cycle;
+\draw (NE) -- (NEh) -- (NEv) -- cycle;
+\draw (SE) -- (SEh) -- (SEv) -- cycle;
+
+\node (AX#2) at (X#2){};
+\DecaleNoeudy[2.5]{X#2}{NoeudGraf}
+\node (VX#2) at (NoeudGraf) {};
+}
+
+\newcommand{\LienActivation}[1]{
+\DecaleNoeudx[-2]{#1}{LA}
+\node (LA#1) at (LA) {\textbf *};
+}
+
+\newcommand{\EtapeActive}[1]{
+\DecaleNoeudy[1]{#1}{EA}
+\node (EA#1) at (EA) {\textbullet};
+}
+
+\newcommand{\CadreEncap}[4]{
+\draw (#1) rectangle (#2);
+\DecaleNoeudx[3]{#1}{NumEtape}
+\node (NumEtape) at (NumEtape)[right,fill=white]{#3}{};
+\DecaleNoeudx[-3]{#2}{NumEncap}
+\node (NumEncap) at (NumEncap)[left,fill=white]{#4}{};
+}
+
+\newenvironment{Encap}[4][encapsulation]
+{\def\encap1{#1}
+\def\nometape{#3}
+\def\nomgraphe{#4}
+
+\matrix[matrix anchor=north west] (#1) at (#2)
+\bgroup
+ \node(espace){};\\
+ \begin{scope}
+}
+{
+\end{scope}\\
+\egroup;
+\path (\encap1.north west) -- node[pos=0.3](nometape){\nometape} (\encap1.north east);
+\path (\encap1.south west) -- node[pos=0.3](nomgraphe){\nomgraphe} (\encap1.south east);
+\draw (nometape) -- (\encap1.east|-nometape) --++(0.5em,0)|- (nomgraphe);
+\draw (nometape) -- (\encap1.west|-nometape) --++(-0.5em,0)|- (nomgraphe);
+}
+
+
+
+
+\newcommand{\Comment}[3][0]{
+\DecaleNoeudx[#1]{#2}{comm#2}
+\draw (comm#2) node[text width=15em,text justified,right]{\og\textit{ #3 }\fg};
+}
+
+
+\newcommand{\Transition}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [minimum height=2.5em,minimum width=1em] (T#2) {};
+\draw (T#2.west) -- (T#2.east);
+\draw (T#2.north) -- (T#2.south);
+\node (RT#2) at (T#2.east){};
+\DecaleNoeudy[2.5]{T#2}{NoeudGraf}
+\node (VT#2) at (NoeudGraf) {};
+}
+
+\newcommand{\TransitionSource}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [minimum height=2.5em,minimum width=1em] (T#2) {};
+\draw (T#2.west) -- (T#2.east);
+\draw (T#2.base) -- (T#2.south);
+\node (RT#2) at (T#2.east){};
+\DecaleNoeudy[2.5]{T#2}{NoeudGraf}
+\node (VT#2) at (NoeudGraf) {};
+}
+
+\newcommand{\TransitionPuits}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) [minimum height=2.5em,minimum width=1em] (T#2) {};
+\draw (T#2.west) -- (T#2.east);
+\draw (T#2.north) -- (T#2.base);
+\node (RT#2) at (T#2.east){};
+\DecaleNoeudy[2.5]{T#2}{NoeudGraf}
+\node (VT#2) at (NoeudGraf) {};
+}
+
+\newcommand{\Action}[3][0]{
+\foreach \x in {#3}
+{\node (NoeudGraf) at (A#2.east) [draw, rectangle, right,minimum height=2.5em,
+ minimum width=2.5em] (A#2) {\x};
+}
+}
+
+
+
+
+\newcommand{\ActionFranchissement}[2]{
+\draw (#1.center) -- ++ (1.5em,-2em) node[name=A#1]{} ;
+\node[draw, rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#1) at (A#1) {#2};
+}
+
+\newcommand{\ActionActiv}[1]{
+\node (coin1) at (A#1.north west)[minimum size=1.5em]{}{};
+%\draw [-triangle 90] (coin1.base) -- (coin1.north);
+\draw[fill] (coin1.base)--++(0,0.3em)--++(0.3em,0)--++(-0.3em,0.4em) --++(-0.3em,-0.4em)--++(0.3em,0);
+}
+\newcommand{\ActionDesactiv}[1]{
+\node (coin1) at (A#1.south west)[minimum size=1.2em]{}{};
+%\draw [-triangle 90] (coin1.base) -- (coin1.south);
+%\draw [-triangle 90] (coin1.base) -- (coin1.north);
+\draw[fill] (coin1.base)--++(0,-0.3em)--++(0.3em,0)--++(-0.3em,-0.4em) --++(-0.3em,+0.4em)--++(0.3em,0);
+}
+
+\newcommand{\ActionCond}[2]{
+\node (coin1) at (A#1.north west)[minimum size=1.5em]{};
+\draw (coin1.east) -- (coin1.north east)[name=vcond];
+\node (cond) at (coin1.east) [above right]{\small{#2}};
+}
+\newcommand{\ActionEvenement}[2]{
+\node (coin1) at (A#1.north west)[minimum size=1.5em]{};
+\node (coin2) at (coin1.north east) [minimum size=0.5em]{};
+\node (coin2) at (coin2.south) [minimum size=0.5em]{};
+\draw [fill] (coin1.east) -- (coin2.north)--(coin2.west)--(coin2.south);
+\node (cond) at (coin1.east) [above right]{#2};
+
+}
+\newcommand{\ActionX}[3][2.5]{
+\DecaleNoeudx[#1]{#2}{A#2};
+\draw (#2) -- (A#2.east);
+\foreach \x in {#3}
+{\node (NoeudGraf) at (A#2.east) [draw, rectangle, right,minimum height=2.5em,
+ minimum width=2.5em] (A#2) {\x};
+}
+}
+\newcommand{\ActionXV}[3][2.5]{
+\DecaleNoeudx[#1]{#2}{A#2};
+\draw (#2) --coordinate[midway](LA#2)coordinate[midway](LA#2b) (A#2.east);
+\foreach \x in {#3}
+{\DecaleNoeudy[2.5]{A#2}{NA#2};
+\draw(LA#2) |- (A#2.east);
+\node (NoeudGraf) at (A#2.east) [draw, rectangle,right,minimum height=2.5em,
+ minimum width=2.5em] (A#2) {\x};
+\DecaleNoeudy[0]{NA#2}{A#2}
+}
+}
+
+
+
+\newcommand{\ActionEfface}[2][2.5]{
+\DecaleNoeudx[#1]{#2}{A#2};
+\draw [white] (#2) -- (A#2.east);
+{\node (NoeudGraf) at (A#2.east) [draw,fill, color=white ,rectangle, right,minimum height=2.5em,
+ minimum width=2.5em] (A#2) { };
+}
+}
+
+
+\newcommand{\Forcage}[3][0]{
+\foreach \x in {#3}
+{\node (NoeudGraf) at (A#2.east) [draw, rectangle, right,minimum height=2.5em,
+ minimum width=2.5em] (A#2) {\x};
+ \node (coin1) at (A#2.north west)[minimum size=0.1em]{}{};
+\node (coin2) at (A#2.south east)[minimum size=0.1em]{}{};
+\draw (coin1.south east) rectangle (coin2.north west);
+}
+}
+
+\newcommand{\ForcageX}[3][2.5]{
+\DecaleNoeudx[#1]{#2}{A#2};
+\draw (#2) -- (A#2.east);
+\foreach \x in {#3}
+{\node (noeudaction) at (A#2.east) [draw, rectangle, right,minimum height=2.5em,
+ minimum width=2.5em] (A#2) {\x};
+\node (coin1) at (A#2.north west)[minimum size=0.1em]{}{};
+\node (coin2) at (A#2.south east)[minimum size=0.1em]{}{};
+\draw (coin1.south east) rectangle (coin2.north west);
+}
+}
+
+
+\newcommand{\ForcageXV}[3][2.5]{
+\DecaleNoeudx[#1]{#2}{A#2};
+\draw (#2) --coordinate[midway](LA#2)coordinate[midway](LA#2b) (A#2.east);
+\foreach \x in {#3}
+{\DecaleNoeudy[2.5]{A#2}{NA#2};
+\draw(LA#2) |- (A#2.east);
+\node (noeudaction) at (A#2.east) [draw, rectangle, right,minimum height=2.5em,
+ minimum width=2.5em] (A#2) {\x};
+\node (coin1) at (A#2.north west)[minimum size=0.1em]{}{};
+\node (coin2) at (A#2.south east)[minimum size=0.1em]{}{};
+\draw (coin1.south east) rectangle (coin2.north west);
+\DecaleNoeudy[0]{NA#2}{A#2};
+}
+}
+
+
+
+
+\newcommand{\Recept}[2]{
+\node (NoeudGraf) at (R#1.east) [right,minimum height=0em,
+ minimum width=0em] (Rcp#1) {#2};
+}
+
+\newcommand{\Recepts}[1]{
+\foreach \trans / \receptivite in {#1}{
+\Recept{T\trans}{\receptivite};
+}
+}
+
+\newcommand{\TransitionRecept}[3][NoeudGraf]{
+\Transition[#1]{#2}
+\Recept{T#2}{#3}
+}
+
+\newcommand{\Actions}[1]{
+\foreach \etape / \action in {#1}{
+\ActionX{X\etape}{\action};
+}
+}
+
+\newcommand{\ActionRecept}[1]{
+\foreach \etape / \action / \receptivite in {#1}{
+ \ifthenelse{\equal{\action}{}}{}
+ {\ActionX{X\etape}{\action};}
+\Recept{T\etape}{\receptivite};
+}
+}
+
+
+\newcommand{\EtapeAction}[3][NoeudGraf]{
+\Etape[#1]{#2}
+ \ifthenelse{\equal{#3}{}}{}
+ {\ActionX{X#2}{#3}}
+}
+
+\newcommand{\EtapeInitAction}[3][NoeudGraf]{
+\EtapeInit[#1]{#2}
+ \ifthenelse{\equal{#3}{}}{}
+ {\ActionX{X#2}{#3}}
+}
+
+\newcommand{\EtapeTransition}[4][NoeudGraf]{
+\Etape[#1]{#2}
+ \ifthenelse{\equal{#3}{}}{}
+ {\ActionX{X#2}{#3}}
+\Transition{#2}
+\Recept{T#2}{#4}
+}
+
+\newcommand{\EtapeInitTransition}[4][NoeudGraf]{
+\EtapeInit[#1]{#2}
+ \ifthenelse{\equal{#3}{}}{}
+ {\ActionX{X#2}{#3}}
+\Transition{#2}
+\Recept{T#2}{#4}
+}
+
+
+\newcommand{\SequenceET}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) {};
+\foreach \x in {#2}
+{\Etape[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{X\x}{NoeudGraf}
+\Transition[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{T\x}{NoeudGraf}
+\node (VT\x) at (NoeudGraf) {};
+}
+}
+
+\newcommand{\SequenceTT}[3][NoeudGraf]{
+\node (NoeudGraf) at (#1) {};
+\Transition[NoeudGraf]{#2}
+\DecaleNoeudy[2.5]{T#2}{NoeudGraf}
+\foreach \x in {#3}
+{\Etape[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{X\x}{NoeudGraf}
+\Transition[NoeudGraf]{\x}
+\node (Ts) at (T\x) [minimum height=2.5em,minimum width=1em]{};
+\DecaleNoeudy[2.5]{T\x}{NoeudGraf}
+\node (VT\x) at (NoeudGraf) {};
+\node (VTs) at (VT\x) [minimum height=2.5em,minimum width=1em]{};
+}
+}
+
+\newcommand{\SequenceTE}[4][NoeudGraf]{
+\node (NoeudGraf) at (#1) {};
+\Transition[NoeudGraf]{#2}
+\SequenceEE{#3}{#4}
+}
+
+
+\newcommand{\SequenceEE}[3][NoeudGraf]{
+\node (NoeudGraf) at (#1) {};
+\foreach \x in {#2}
+{\Etape[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{X\x}{NoeudGraf}
+\Transition[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{T\x}{NoeudGraf}
+\node (VT\x) at (NoeudGraf) {};
+}
+\Etape[NoeudGraf]{#3}
+\DecaleNoeudy[2.5]{X#3}{NoeudGraf}
+\node (VX#3) at (NoeudGraf) {};
+}
+
+
+\newcommand{\Graphe}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) {};
+\node (debut) at (#1)[minimum size=2.5em] {};
+\foreach \x / \y / \z in {#2}{
+\Etape[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{X\x}{NoeudGraf}
+\Transition[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{T\x}{NoeudGraf}
+}
+\ActionRecept{#2}
+}
+\newcommand{\GrapheBoucle}[2][NoeudGraf]{
+\node (NoeudGraf) at (#1) {};
+\node (debutgraphe) at (#1)[minimum size=2.5em] {};
+\foreach \x / \y / \z in {#2}{
+\Etape[NoeudGraf]{\x}
+\DecaleNoeudy[2.5]{X\x}{NoeudGraf}
+\Transition[NoeudGraf]{\x}
+\node (fingraphe) at (T\x)[minimum size=2.5em] {};
+\DecaleNoeudy[2.5]{T\x}{NoeudGraf}
+}
+\ActionRecept{#2}
+\LienRetour{fingraphe}{debutgraphe}
+}
+
+\newcommand{\SautEtapes}[4][-5]{
+\DivOU{#2}{#1/L#2s,2/L#2}
+\Transition[L#2s]{#2s}
+\SequenceTT[L#2]{#2}{#3}
+\DecaleNoeudy[-2.5]{NoeudGraf}{VNoeudGraf}
+\ConvOU[-2]{Ts}{T#2s}{#4}
+}
+
+\newcommand{\RepriseEtapes}[4][-5]{
+\DecaleNoeudx[#1]{#2}{#2r}
+\DecaleNoeudx[-1]{#2r}{#2r}
+\DecaleNoeudx[#1]{V#2}{V#2r}
+\DecaleNoeudx[-1]{V#2r}{V#2r}
+\node(V#2r) at (V#2r) [minimum height=2.5em,minimum width=1em,rectangle]{};
+\ConvOU[-1]{#2}{#2r}{noeudreprise}
+\SequenceEE[noeudreprise]{#3}{#4}
+\DivOU{X#4}{#1/L#4r,1/L#4}
+\Transition[L#4]{#4}
+\Transition[L#4r]{#4r}
+\LienRetour[2]{T#4r}{V#2r}
+}
+
+\newcommand{\DivET}[2]{
+\node (div1) at (#1)[minimum height=2.5em,minimum width=1em]{};
+\draw (div1.base) -- (div1.south){};
+\DecaleNoeudy[2.5]{#1}{div1}
+\foreach \x / \y in {#2} {
+\DecaleNoeudx[\x]{div1}{div2}
+\node (V\y) at (div2)[minimum height=2.5em,minimum width=1em]{};
+\draw (V\y.base) -- (V\y.north);
+\draw [double distance=0.15em,thick] (div1.north) -- (V\y.north east) --(V\y.north west) {}{};
+\node (\y) at (V\y){}[minimum size=0];
+\node (V\y) at (V\y.south){};
+}
+}
+
+\newcommand{\BrancheOU}[2][0]{
+\node[below of=V#2,node distance=1 em,minimum height=2.5em,minimum width=1em](NoeudGraf){};
+\node [right of=NoeudGraf, node distance=#1 em,minimum height=2.5em,minimum width=1em] (NoeudGraf){};
+\draw (#2.south) -- ++(0,-0.5em) -| (NoeudGraf);
+}
+
+\newcommand{\FinBrancheOU}[3][0]{
+\ifthenelse{\equal{CountB}{}}{
+\node[below of=V#3,node distance=2 em,minimum height=2.5em,minimum width=1em](NoeudGraf){};
+\node [right of=NoeudGraf, node distance=#1 em,minimum height=2.5em,minimum width=1em] (NoeudGraf){};
+\draw (#3.south) -- ++(0,-0.5em) -| (NoeudGraf);}
+{ aaa}
+}
+
+\newcommand{\FinBrancheOUa}[3][0]{
+\newboolean{TestBoucle}
+\ifthenelse{\boolean{TestBoucle}{true}}{\draw(T53) -- (#3);}{
+\node[below of=V#2,node distance=2 em,minimum height=2.5em,minimum width=1em](NoeudGraf){};
+\node [right of=NoeudGraf, node distance=#1 em,minimum height=2.5em,minimum width=1em] (NoeudGraf){};
+\node[minimum height=2.5em,minimum width=1em] (#3) at (NoeudGraf){};
+\draw (#2.south) -- ++(0,-0.5em) -| (NoeudGraf);
+with:
+\setboolean{TestBoucle}{true}
+}
+
+}
+
+
+\newcommand{\DivOU}[2]{
+\node (div1) at (V#1)[minimum height=2.5em,minimum width=1em]{};
+\draw (div1.base) -- (div1.north) {}{};
+\foreach \x / \y in {#2} {
+\DecaleNoeudx[\x]{div1}{div2}
+\node (div2) at (div2)[minimum height=2.5em,minimum width=1em]{};
+\node (\y) at (div2)[minimum height=2.5em,minimum width=1em]{};
+\draw (div1.base) -- (\y.east) --(\y.west) {}{};
+\node (\y) at (div2.south)[minimum height=2.5em,minimum width=1em]{};
+\draw(\y.base)--(\y.north){}{};
+}
+}
+
+
+\newcommand{\ConvET}[4][0]{
+\node (div) at (#2) [minimum height=2.5em,minimum width=1em]{};
+\DecaleNoeudy[2.5]{div}{div}
+\foreach \x in {#3}{
+\draw (#2) -- (div.base) -| (\x);\node (int\x) at (div.base -|\x) {};
+}
+\DecaleNoeudx[#1]{div}{#4}
+\DecaleNoeudy[1.5]{#4}{#4}
+\draw (#4.base) |- (div.base);
+\foreach \x in {#3}{
+\draw [double distance=0.15em,thick](int\x.east) -- (int\x.west);
+\draw [double distance=0.15em,thick](int\x.east) -- (div.east);
+}
+\draw [double distance=0.15em,thick](div.west) -- (div.east);
+}
+
+
+\newcommand{\ConvOU}[4][0]{
+\node (div#2) at (#2.base)[minimum height=2.5em,minimum width=1em]{};
+\DecaleNoeudx[0]{div#2}{div#2}
+\DecaleNoeudy[1.3]{div#2}{div}
+\DecaleNoeudx[#1]{V#2}{#4}
+\foreach \x in {#3} {
+\draw (div.base)--(div.east)--(div.west) -| (\x.base);
+\node (divi) at (div.west -| \x.base) [minimum width=1em,minimum height=2.5em]{};
+\draw (divi.west) -- (divi.east);
+}
+\DecaleNoeudy[1.5]{#4}{#4}
+\draw (div#2.base)--(div.base)-|(#4.north);
+}
+
+\newcommand{\DecaleNoeudx}[3][0]{
+\node [right of=#2, node distance=#1em](#3) {};
+\node (#3) at (#3) [rectangle,minimum height=2.5em,minimum width=1em]{};
+}
+\newcommand{\DecaleNoeudy}[3][0]{
+\node [below of=#2, node distance=#1em](#3) {};
+\node (#3) at (#3) [rectangle,minimum height=2.5em,minimum width=1em]{};
+}
+
+
+\newcommand{\LienRetour}{\@ifstar\LienRetourUp\LienRetourN}
+
+\newcommand{\LienRetourN}[3][4]{
+\node [left of=#2, node distance=#1em, minimum size=0cm](retourb#2) {};
+\node [above of=#3, node distance=2.5em, minimum size=0cm](retourh#2) {};
+%\DecaleNoeudx[-#1]{retourh#2}{retourh#2}
+\draw[->,>=latex'](#2.base)--(#2.south)-|(retourb#2.north)--(retourb#2|-#3)|-(retourh#2.base)-| (#3.north);
+}
+
+\newcommand{\LienRetourUp}[4][4]{
+\node [left of=#2, node distance=#1em, minimum size=0cm](retourb#2) {};
+\node [above of=#3, node distance=#4em, minimum size=0cm](retourh#2) {};
+%\DecaleNoeudx[-#1]{retourh#2}{retourh#2}
+\draw[->,>=latex'](#2.base)--(#2.south)-|(retourb#2.north)--(retourb#2|-#3)|-(retourh#2.base)-| (#3.north);
+}
+
+\newcommand{\LienRetoura}[3][4]{
+\node [left of=#3, node distance=#1em, minimum size=0cm](retourb#2) {};
+\node [above of=retourb#2, node distance=2.5em, minimum size=0cm](retourh#2) {};
+%\DecaleNoeudx[-#1]{retourh#2}{retourh#2}
+\draw [->,>=latex'] (#2.base)--(#2.south)-| (retourh#2.base) -| node[name=#2-#3,near end,right] {} (#3.north) ;
+}
+
+\newcommand{\Lien}[4][0]{
+\node [above of=#4, node distance=2.5em, minimum size=0cm](retourh#3) {};
+\DecaleNoeudy[#1]{retourh#3}{retourh#3}
+\draw [->,>=latex'] (#2.base) -- (#2.south) -| (#3.base) |- (retourh#3.base) -- (#4.north);
+}
+
+\newcommand{\Lieny[2]}[2.5]{
+\DecaleNoeudy[#1]{#2}{V#2}
+\draw (#2.base) -- (V#2.base) {};
+\DecaleNoeudy[#1]{#2}{#2}
+}
+\newcommand{\LienET[2]}[2.5]{
+\DecaleNoeudy[#1]{#2}{V#2}
+\draw (#2) -- (V#2.base) {};
+}
+\newcommand{\LienTE[2]}[2.5]{
+\DecaleNoeudy[#1]{#2}{V#2}
+\draw (#2.base) -- (V#2) {};
+}
+
+
+\newcommand{\LienRetourOU}[3][4]{
+\coordinate [left of=#2, node distance=#1em, minimum size=0cm](retourb#2) {};
+\coordinate [above of=#3, node distance=3.5em, minimum size=0cm](retourh#2) {};
+\coordinate [above of=#3, node distance=2.5em, minimum size=0cm](retourh#3) {};
+%\DecaleNoeudx[-#1]{retourh#2}{retourh#2}
+\draw (#2.base) -- (#2.south) -| (retourb#2) -- (retourb#2 |- #3)coordinate[pos=0.5,name=df]coordinate[pos=0.55,name=ff] |-
+(retourh#2-|#2) -- (retourh#3 -|#2) --++(-0.5em,0) -++ (1em,0) -|(#3.north) ;
+\draw[-latex] (df) -- (ff) ;
+}
+
+
+\newcommand{\EspaceV}[2][2.5]{
+\node[below of=V#2,node distance=#1 em,minimum height=2.5em,minimum width=1em](NoeudGraf){};
+\draw (#2.south) -- (NoeudGraf);
+\node[minimum height=2.5em,minimum width=1em] (V#2) at (NoeudGraf){};
+}
diff --git a/graphics/pgf/contrib/grafcet/grafcet.tex b/graphics/pgf/contrib/grafcet/grafcet.tex
new file mode 100644
index 0000000000..75d7883aed
--- /dev/null
+++ b/graphics/pgf/contrib/grafcet/grafcet.tex
@@ -0,0 +1,2024 @@
+
+%-------------
+\documentclass[a4paper,DIV15]{scrbook}
+\usepackage[T1]{fontenc} % Correspondance clavier -> document
+\usepackage{fourier}
+\usepackage[usenames,dvipsnames]{xcolor}
+\usepackage{atbegshi}
+\usepackage{tikz}
+\usetikzlibrary{arrows,snakes}%
+
+%\usetikzlibrary{external}
+%\tikzexternalize{main} % provide the file's real name
+\usepackage{makeidx}
+\usepackage{fancyhdr} % entete et pied de pages
+\usepackage{wrapfig}
+
+\usepackage{calc,fullpage}
+\usepackage{amsmath,amssymb}
+\usepackage[frenchb]{babel}
+\usepackage{url}
+\usepackage{here}
+
+\usepackage{multicol}
+
+\usepackage{tkzexample}
+%\usepackage{microtype}
+\usepackage{graphicx}
+
+
+\usepackage{hyperref}
+\parindent=0pt
+
+\newdimen\oldparindent
+%-------------PACKAGES PERSO---------------------------------------------------------
+\usepackage{grafcet}
+
+
+%*******Macros diverses ***********
+
+
+%-------------ENTETE-ET-PIED-DE-PAGE-------------------------------------------
+\headheight= 1.5cm % taille entete
+\renewcommand{\headrulewidth}{0pt} % epaisseur du trait apres entete
+\renewcommand{\footrulewidth}{0pt} % epaisseur du trait avant pied de page
+\pagestyle{fancy}
+
+%\lhead{gauche haut} % entete gauche perso
+%\chead{} % entete centre perso
+%\rhead{} % entete droit perso
+%\lfoot{} % pied gauche perso
+%\cfoot{} % pied centre perso
+%\rfoot{} % pied droit perso
+
+%-------------PAGE-DE-GARDE----------------------------------------------------
+
+\title{Grafcet avec PGF/TIKZ} % Titre
+\author{Papanicola Robert} % Auteur(s)
+\date{\today} % Date (\today pour aujourd'hui)
+%\graphicspath{}
+
+%%%% debut macro %%%%
+\makeatletter
+\def\@captype{figure}
+\makeatother
+%%%% fin macro %%%%
+
+\makeindex
+%-------------DEBUT-DU-DOCUMENT-----------------------------------------------
+
+
+\begin{document}
+\maketitle
+
+\chapter{GRAFCET / SFC avec TIKZ}
+\section*{Mise à jour}
+
+
+
+\begin{tabular}{l |l| p{10cm} }
+Version & Date & Évolution \\*
+1.3.5 & mai 2011 & mise en ligne sur le Ctan\\
+1.3.1 & février 2010 & ajout de la commande étoilée \verb"\LienRetour" qui admet un quatrième argument pour forcer le retour à passer \verb"#4" em au dessus de l'étape d'arrivée.\\
+1.3 & novembre 2009 & \begin{itemize}
+\item Ajout du package \verb"tkzexample" pour décrire les exemples,
+\item Ajout des commandes \verb"\ActionXV" et \verb"\ForcageXV" qui permettent de placer les actions les unes sous les autres,
+\item Modification du code de quelques commandes (étapes encapsulantes, initiales,...)
+\end{itemize} \\
+1.2 & avril 2009 & Ajout raccourcis \verb"\EtapeTransition", test absence action et suppression de la commande \verb"\ActionEfface" \\
+1.1 & avril 2008 & Ajout Action au franchissement, Ajout marquage Étape active nouveaux exemples \\
+1 & Mars 2007 & première mise en ligne \\
+\end{tabular}
+
+
+
+
+\section{Utilisation}
+L'objectif de la librairie GRAFCET est de permettre le tracé de grafcet selon la norme EN~60848 (la norme est disponible à l'achat sur le site de l'ISO:\\ \href{http://webstore.iec.ch/Webstore/webstore.nsf/ArtNum\_PK/28544}{http://webstore.iec.ch/Webstore/webstore.nsf/ArtNum\_PK/28544}).
+\subsection{Exemple typique}
+On retrouve dans le graphe fig~\ref{fig:Grafcetdebase} les principaux éléments graphiques de la librairie GRAFCET
+
+\begin{figure}[!ht]
+\centering
+
+\begin{tkzexample}[small]
+
+\begin{tikzpicture}
+\EtapeInit[0,0]{100}
+\Transition[VX100]{100}
+\Etape[VT100]{110}
+\Transition{110}
+\Etape[VT110]{120}
+\Transition[VX120]{120}
+\LienRetour{T120}{X100}
+\Recept{T100}{$dcy \cdot a_0$}
+\ActionX{X110}{Sortir A}
+\Recept{T110}{condition}
+\ActionX{X120}{Rentrer }
+\Recept{T120}{$a_0$}
+\end{tikzpicture}
+
+\end{tkzexample}
+
+\caption{GRAFCET de base}
+\label{fig:Grafcetdebase}
+\end{figure}
+
+
+La commande associée à chaque élément graphique est explicite:
+\begin{itemize}
+\item \verb"\Etape[VT100]{110}" pour dessiner une étape après la transition T110 avec le numéro 110;
+\item \verb"\Transition[VX120]{120}" pour dessiner une transition après l'étape X120, cette transition est référencée 120;
+\item \verb"\EtapeInit[0,0]{100}" pour dessiner une étape initiale au point (O,O) avec le numéro 100;
+\item \verb"\ActionX{X110}{Sortir A}" pour associer l'action \textit{Sortir A} à l'étape X110;
+\item \verb"\Recept{T100}{$dcy \cdot a_0$}" pour associer la réceptivité $dcy \cdot a_0$ à la transition T100;
+\item \verb"\LienRetour{T120}{X100}" pour tracer le lien orienté de la dernière transition vers l'étape initiale.
+\end{itemize}
+
+\textbf{Remarque:} Il n'est pas forcément nécessaire de préciser le numéro de l'étape (respectivement de la transition) précédente, si le graphe est construit linéairement en respectant l'alternance étape transition (Fig~\ref{fig:Grafcetdebase2}). Chaque symbole de base s'accroche par défaut au n\oe ud de base précédent, en effet le n\oe ud d'accrochage par défaut est le n\oe ud NoeudGraf défini dans chaque commande.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[small]
+\begin{tikzpicture}
+\EtapeInit[5,0]{100}
+\Transition{100}
+\Etape{110}
+\Transition{110}
+\Etape{120}
+\Transition{120}
+\LienRetour{T120}{X100}
+\Recept{T100}{$dcy \cdot a_0$}
+\ActionX{X110}{Sortir A}
+\Recept{T110}{condition}
+\ActionX{X120}{Rentrer }
+\Recept{T120}{$a_0$}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{GRAFCET de base 2}
+\label{fig:Grafcetdebase2}
+\end{figure}
+
+\section{Installation}
+
+\begin{itemize}
+\item Pré-requis indispensable : avoir une version à jour du package TikZ/pgf;
+\item Copier le fichier grafcet.sty avec vos packages personnels (localtexmf/tex/latex/) ou dans votre répertoire de travail;
+\item Appeler le package dans l'entête de vos fichier \LaTeX \verb"\usepackage{grafcet}".
+\end{itemize}
+
+C'est tout!
+
+
+
+\section{Les éléments de base}
+
+\subsection{Étapes}
+Les commandes ci-dessous permettent de représenter les étapes et étapes initiales.
+\index{Etape}
+\index{EtapeInit}
+
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape};
+\Etape[5,0]{10}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}"};
+\draw (0,-1) node[,text width=5cm,text justified]{Etape initiale};
+\EtapeInit[5,-1]{10}
+\draw (10,-1) node[fill=blue!20,text width=7cm,text justified]{\verb"\EtapeInit[pos]{nom}"};
+\end{tikzpicture}
+
+Tous les symboles de la librairie possèdent des paramètres de configuration et des n\oe uds d'accrochages pour les lier aux éléments suivant.
+
+Les deux paramètres d'une étape sont la position et le nom,
+\begin{description}
+\item [pos] La position peut être définie soit de manière absolue en précisant les coordonnées [x,y] dans la tikzpicture (en cm , x vers la droite, y vers le haut), soit en faisant référence à un n\oe ud (\verb"\node" de tikz) précédemment défini. La référence à une position est optionnelle, si vous ne la précisez pas, la macro commande va chercher à placer l'étape sur le n\oe ud \verb"NoeudGraf". Ce n\oe ud est défini automatiquement dans chaque symbole d'étape et transition, ce qui permet de dessiner un graphe sans préciser à quel élément doit être raccroché l'étape, la seule contrainte alors est de respecter l'alternance étape transition pour une même séquence linéaire.
+\item [nom] le nom est un nom alphanumérique,l'usage est de numéroter les étapes dans l'ordre croissant (ne pas utiliser le mode mathématique pour ce paramètre).
+\end{description}
+
+\begin{wrapfigure}{r}{6cm}
+\begin{tikzpicture}
+\Etape[0,0]{10}
+\Transition{10}
+\ActionX{X10}{Action}
+\draw [->] (3,2) node[right] {n\oe ud X10} -- (X10.base);
+\draw [->] (3,1)node[right] {n\oe ud AX10} -- (AX10.west);
+\draw [->] (3,-1) node[right] {n\oe ud VX10}-- (VX10.base);
+\end{tikzpicture}
+\caption{N\oe ud d'une étape}
+\label{fig:noeudetape}
+\end{wrapfigure}
+
+Les étapes possèdent trois n\oe uds d'accrochage (fig~\ref{fig:noeudetape}) permettant de lier au symbole la transition suivante et les actions associées.
+
+\begin{enumerate}
+\item [Xnnn] Ce n\oe ud correspond physiquement au \guillemotleft centre \guillemotright du symbole, nnn est le nom de l'étape;\label{Xnnn}
+\item [VXnnn] Ce n\oe ud est le point d'accrochage des transitions et plus généralement des éléments placés au dessous du symbole (mais pas tous);\label{VXnnn}
+\item [AXnnn] Ce n\oe ud est le point d'accrochage des actions, à droite du symbole. Ce n\oe ud n'est pas appelé directement mais il est utilisé par les macros \verb"\ActionX" et \verb"\Action" pour placer les actions les unes après les autres.\label{AXnnn}
+\end{enumerate}
+
+Un quatrième n\oe ud flottant, \emph{NoeudGraf}, est aussi défini, ce noeud est le n\oe ud de connexion par défaut, il est superposé au n\oe ud \emph{VXnnn}.
+
+Les dimensions des étapes sont de $2{,}5 em$ (hauteur et largeur) cela permet d'écrire un numéro à trois chiffres dans un carré, au delà, la largeur s'adapte au nombre de caractères et la hauteur reste inchangée.
+
+\subsubsection{Étape active}
+la commande \verb"EtapeActive" permet de marquer d'un point l'étape active d'un grafcet.
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape \\ Marquage étape active};
+\Etape[2,0]{50}
+\EtapeActive{X50}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[2,0]{50}" \\
+\verb"\EtapeActive{X50}"};
+
+\end{tikzpicture}
+
+\subsection{Macro-étapes}\index{MacroEtape}\index{MacroEtapeE}\index{MacroEtapeS}
+
+La librairie GRAFCET permet aussi de représenter les macro-étapes. La numérotation des macro-étapes ne comprends pas par défaut les lettres M, E, S, c'est à vous de les préciser. La norme ne prévoit plus de symbole spécifique pour les étapes d'entrée et de sortie de l'expansion de la macro-étape, on utilisera donc la commande \verb"\Etape" pour en précisant la lettre E ou S devant le numéro.
+
+Exemple d'utilisation : figure~\ref{fig:grfME}.
+
+\begin{tikzpicture}
+\draw (0,-2) node[,text width=5cm,text justified]{Macro Etape};
+\MacroEtape[5,-2]{M20}
+\draw (10,-2) node[fill=blue!20,text width=7cm,text justified]{\verb"\MacroEtape[pos]{nom}"};
+\draw (0,-3) node[,text width=5cm,text justified]{Macro Etape - Entrée};
+\Etape[5,-3]{E20}
+\draw (10,-3) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{Enom}"};
+\draw (0,-4) node[,text width=5cm,text justified]{Macro Etape - Sortie};
+\Etape[5,-4]{S20}
+\draw (10,-4) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{Snom}"};
+
+\end{tikzpicture}
+
+
+
+\begin{wrapfigure}{r}{6cm}
+\begin{tikzpicture}
+\MacroEtape[0,0]{M10}
+\Transition{10}
+\ActionX{XM10}{Action}
+\draw [->] (3,2) node[right] {n\oe ud XM10} -- (XM10.base);
+\draw [->] (3,1)node[right] {n\oe ud AXM10} -- (AXM10.west);
+\draw [->] (3,-1) node[right] {n\oe ud VMX10}-- (VXM10.base);
+\end{tikzpicture}
+\caption{N\oe ud d'une macro-étape}
+\label{fig:noeudmacro}
+\end{wrapfigure}
+
+Les paramètres de configuration et les n\oe uds d'ancrage sont les mêmes que pour les étapes (position et nom), en prenant en compte le nom complet de la macro-étape, si votre macro-étape est nommée M10, les n\oe uds associés seront:
+\begin{itemize}
+\item XM10 pour le n\oe ud associé à l'étape,
+\item AXM10 pour le n\oe ud d'accrochage des actions,
+\item VXM10 pour le n\oe ud d'accrochage de la transition.
+\end{itemize}
+
+\paragraph{Anciens symboles:}
+La librairie grafcet propose aussi les anciens symboles pour leur vertu pédagogique.
+
+\begin{tikzpicture}
+\draw (0,-3) node[,text width=5cm,text justified]{Macro Etape - Entrée};
+\MacroEtapeE[5,-3]{E20}
+\draw (10,-3) node[fill=blue!20,text width=7cm,text justified]{\verb"\MacroEtapeE[pos]{nom}"};
+\draw (0,-4) node[,text width=5cm,text justified]{Macro Etape - Sortie};
+\MacroEtapeS[5,-4]{S20}
+\draw (10,-4) node[fill=blue!20,text width=7cm,text justified]{\verb"\MacroEtapeS[pos]{nom}"};
+\end{tikzpicture}
+
+
+
+\subsection{Étapes encapsulantes}\index{EtapeEncapsulante}\index{EtapeEncapsulanteInit}
+
+Avec, la norme EN 60848 un nouveau concept est apparu, le concept d'encapsulation, La librairie GRAFCET permet de dessiner ces nouveaux symboles.
+
+Exemple d'utilisation: figure~\ref{fig:Grfencap}.
+
+{\shorthandoff{;:!?}
+\begin{tikzpicture}
+\draw (0,-5) node[,text width=5cm,text justified]{Etape Encapsulante};
+\EtapeEncapsulante[5,-5]{50}
+\draw (10,-5) node[fill=blue!20,text width=7cm,text justified]{\verb"\EtapeEncapsulante[pos]{nom}"};
+\draw (0,-6) node[,text width=5cm,text justified]{Etape Encapsulante Initiale};
+\EtapeEncapsulanteInit[5,-6]{501}
+\draw (10,-6) node[fill=blue!20,text width=7cm,text justified]{\verb"\EtapeEncapsulanteInit[pos]{nom}"};
+\end{tikzpicture}
+}
+
+Les n\oe uds d'accrochage d'une étape encapsulante sont les mêmes que pour une étape classique.
+
+
+
+L'étape activée du grafcet encapsulé est représentée par un astérisque, celui-ci est dessiné par la commande \verb"\LienActivation{nom}", avec nom, le repère de l'étape activée (ne pas oublier le X).\index{LienActivation}
+
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape activée};
+\Etape[5,0]{50}
+\LienActivation{X50}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape{50}" \\ \verb"\LienActivation{X50}"};
+\end{tikzpicture}
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[small,latex=8cm]
+\begin{tikzpicture}
+\EtapeInitTransition[0,0]{10}{}{r10}
+\EtapeTransition{11}{}{r11}
+\EtapeTransition{12}{}{r12}
+\EtapeTransition{13}{}{r13}
+\EtapeEncapsulante[X12]{12}
+\LienRetour{T13}{X10}
+
+
+\begin{Encap}[nom]{1.5,1}{12}{G2}
+\Etape[0,0]{1}
+\DivOU{X1}{-3/L20,2/L10}
+\Transition[L10]{10a}
+\Etape{10}
+\SequenceTT[L20]{20}{21,22}
+\LienRetour{T22}{X1}
+\LienActivation{X1}
+\end{Encap}
+
+
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Encapsulation et grafcet encapsulé}
+\label{fig:}
+\end{figure}
+
+
+La norme prévoit d'encadrer le grafcet encapsulé, l'environnement \verb"\begin{Encap}[nom]{pos}{etape}{Grafcet}....\end{Encap}" permet de tracer le cadre autour du grafcet encapsulé en nommant le grafcet et en précisant le numéro de l'étape encapsulante\label{sec:encapsulation}.
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Cadre encapsulation};
+\begin{Encap}[nom]{3,0}{10}{G1}
+\Etape[0,0]{0}
+\end{Encap}
+\draw (5,-1) node[right,fill=blue!20,text width=7cm,text justified]{\verb"\begin{Encap}[nom]{pos}{etape}{Grafcet}" \\
+dessin du grafcet encapsulé\\
+\verb"\end{Encap}"};
+\end{tikzpicture}
+
+
+
+
+
+\subsection{Transition - Réceptivité}\index{Transition}\index{Receptivite}
+
+Ces deux éléments sont indissociables, le premier est l'élément graphique de liaison entre les étapes, le second représente la condition logique associée.
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Transition \\ Réceptivité};
+\Transition[3,0]{50}
+\Recept{T50}{condition}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\transition[pos]{nom}" \\ \verb"\Recept{Tnom}{condition}"};
+\end{tikzpicture}
+
+\subsubsection{Transition}
+\begin{itemize}
+\item La transition est placée sur le noeud définie par \verb"pos", si ou souhaite placer la transition à la suite de l'étape \emph{Xnnn}, il faut préciser le n\oe ud \emph{VXnnn} (Cf \ref{VXnnn}), en l'absence de précision, la transition se place sur le n\oe ud nommé \verb"NoeudGraf";
+\item Le nom associée à la transition sert à nommer les n\oe uds associés à celle-ci, c'est à dire
+\begin{itemize}
+\item VTnnn: le n\oe ud suivant (à 2{,}5 em) la transition, utile pour placer l'étape suivante; \label{VTnnn}
+\item RTnnn: le n\oe ud à droite de la transition permettant de positionner la réceptivité associée;\label{RTnnn}
+\item NoeudGraf: ce n\oe ud est superposé à \emph{VTnnn}, il est utile pour placer de manière automatique l'élément suivant (étape).
+\end{itemize}
+\end{itemize}
+
+\subsubsection{Réceptivité}
+\begin{itemize}
+\item La réceptivité doit être associée à une transition, celle-ci est désignée en précisant le nom de la transition Tnnn, la réceptivité est alors placée sur le n\oe ud \emph{RTnnn} (Cf. \ref{RTnnn})
+\item la condition peut tout aussi bien être du code alphanumérique que du code mathématique $a_0$, $\uparrow m$ ou $\overline{dcy}$ .
+\end{itemize}
+
+Une commande complémentaire permet d'affecter une liste de réceptivités à une liste de transition, \verb"\Recepts{1/r1,2/r2,3/r3,...,n/rn}". Cette commande associe chaque réceptivité ri avec chaque transition i. Un exemple d'utilisation est précisé plus bas.\index{Recepts}
+
+\subsubsection{Transition Source, Transition Puits}
+
+
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\TransitionSource[0,0]{1}
+\Etape{2}
+\TransitionPuits{2}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Transition source, Transition puits}
+\label{fig:TsTp}
+\end{figure}
+
+\subsection{Actions}\index{Action}\index{ActionX}
+
+La librairie GRAFCET permet de tracer les différents types d'action proposés par la norme. On distingue deux commandes différentes suivant que l'action (ou la liste d'action) doit être placée à coté de l'étape, ou juste après une action existante.
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape \\ Action};
+\Etape[2,0]{50}
+\ActionX{X50}{Action}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ActionX{Xnnn}{Action}"};
+
+\draw (0,-2) node[,text width=5cm,text justified]{Etape \\ Action \\Action};
+\Etape[2,-2]{50}
+\ActionX{X50}{Action1}
+\Action{X50}{Action2}
+\draw (10,-2) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ActionX{Xnnn}{Action}"\\
+\verb"\Action{Xnnn}{Action}" };
+\end{tikzpicture}
+
+Ces deux mêmes commandes permettent d'associer une liste d'action à une étape, en les séparant par une virgule.
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape \\ Liste d'actions};
+\Etape[2,0]{50}
+\ActionX{X50}{Action1,Action2}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ActionX{Xnnn}{Action1,..., Action3}"};
+\end{tikzpicture}
+
+A ces actions élémentaires, se rajoutent des actions particulières:
+\begin{itemize}
+\item Action conditionnelle;
+\item Action à l'activation;
+\item Action à la désactivation;
+\item Action sur événement;
+\item Action au franchissement.
+\end{itemize}
+Les quatre premières sont réalisées en complétant le symbole de base, avec une des commande suivantes:
+\index{ActionCond}
+\index{ActionActiv}
+\index{ActionDesactiv}
+\index{ActionEvenement}
+
+\begin{itemize}
+\item \verb"ActionCond{Xnnn}{condition}" : permet de préciser une condition \emph{condition} pour la "dernière" action de l'étape \emph{Xnnn};
+\item \verb"ActionActiv{Xnnn}" : permet de préciser une action à l'activation pour la "dernière" action de l'étape \emph{Xnnn};
+\item \verb"ActionDesactiv{Xnnn}: permet de préciser une action à la désactivation pour la "dernière" action de l'étape \emph{Xnnn};
+\item \verb"ActionEvenement{Xnnn}{condition}" : permet de préciser l'événement (la condition) \emph{condition} pour la "dernière" action de l'étape \emph{Xnnn}.
+\end{itemize}
+
+et la dernière avec la commande \index{ActionFranchissement}
+\begin{itemize}
+\item \verb"ActionFranchissement{Tnnn}{Action}" : permet de dessiner un action au franchissement de la transition \emph{Tnnn}.
+\end{itemize}
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape \\ Action conditionnelle};
+\Etape[2,0]{50}
+\ActionX{X50}{Action1}
+\ActionCond{X50}{$b_0$}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ActionX{Xnnn}{Action1}" \\
+\verb"\ActionCond{Xnnn}{condition}"};
+
+\draw (0,-2) node[,text width=5cm,text justified]{Etape \\ Action à l'activation};
+\Etape[2,-2]{50}
+\ActionX{X50}{Action1}
+\ActionActiv{X50}
+\draw (10,-2) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ActionX{Xnnn}{Action1:=1}" \\
+\verb"\ActionActiv{Xnnn}"};
+
+\draw (0,-4) node[,text width=5cm,text justified]{Etape \\ Action à la désactivation};
+\Etape[2,-4]{50}
+\ActionX{X50}{Action1:=1}
+\ActionDesactiv{X50}
+\draw (10,-4) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ActionX{Xnnn}{Action1}" \\
+\verb"\ActionDesactiv{Xnnn}"};
+
+\draw (0,-6) node[,text width=5cm,text justified]{Etape \\ Action sur événement};
+\Etape[2,-6]{50}
+\ActionX{X50}{Action1:=1}
+\ActionEvenement{X50}{$b_0$}
+\draw (10,-6) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ActionX{Xnnn}{Action1}" \\
+\verb"\ActionEvenement{Xnnn}{condition}"};
+
+\draw (0,-8) node[,text width=5cm,text justified]{Etape \\ Action au franchissement};
+\Transition[2,-8]{50}
+\Recept{T50}{$a$}
+\ActionFranchissement{T50}{Action1:=1}
+\draw (10,-8) node[fill=blue!20,text width=7cm,text justified]{\verb"\Transition[pos]{nnn}" \\ \verb"\Recept{Tnnn}{$cond$}" \\
+\verb"\ActionFranchissement{Tnnn}{Action}"};
+
+\end{tikzpicture}
+
+
+A partir de ces différentes commandes, il est possible de préciser tous les types d'actions pour obtenir un grafcet comme celui de la figure~\ref{fig:grfactpart}.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\Etape[0,0]{10}
+\Transition{10}\Recept{T10}{$r_{10}$}
+\Etape{11}
+\Transition{11}\Recept{T11}{$r_{11}$}
+\Etape{12}
+\ActionX{X10}{$Action_1$,$Action_2$}
+\ActionCond{X10}{$cond_1$}
+\Action{X10}{$Action_3$}
+\ActionX[4]{X11}{$Action_4:=1$}
+\ActionActiv{X11}
+\Action{X11}{$Action_5$,$Action_6$}
+\ActionX{X12}{$Action_4:=0$}
+\ActionDesactiv{X12}
+\end{tikzpicture}
+\end{tkzexample}
+
+\caption{Actions particulières}
+\label{fig:grfactpart}
+\end{figure}
+
+\subsubsection{Placement vertical des actions}
+
+La commande \verb"\ActionXV[dist]{Etape}{liste actions}" permet de placer les cadres d'actions les uns sous les autres plutôt qu'à l'horizontale.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\Etape[0,0]{36}
+\LienET[6]{X36}
+\TransitionRecept[VX36]{36}{r36}
+\Etape{37}
+\ActionXV{X36}{A+,Sortir,B-}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Actions verticales}
+\label{fig:actionsV}
+\end{figure}
+
+\subsubsection{Raccourcis Étapes/actions}
+A ces commandes se rajoute une dernière commande qui permet d'affecter une liste d'actions à une liste d'étapes, \verb"\Actions{1/A1,2/A2,...,n/An}". Cette commande affecte l'action Ai à l'étape i. un exemple d'utilisation est présenté plus bas.\index{Actions}
+
+
+\subsection{Forçage}\index{ForcageX}
+La librairie GRAFCET permet de dessiner le double cadre des ordres de forçage.
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape \\ Forçage};
+\Etape[1,0]{50}
+\ForcageX{X50}{Forçage}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ForcageX{Xnnn}{Forçage}"};
+\end{tikzpicture}
+
+Cette même commande permet aussi de tracer plusieurs ordres de forçage associées à une même étape, en séparant les ordres par des virgules.
+
+\begin{tikzpicture}
+\draw (0,0) node[,text width=5cm,text justified]{Etape \\ Forçage};
+\Etape[1,0]{50}
+\ForcageX{X50}{Forçage 1,Forçage 2}
+\draw (10,0) node[fill=blue!20,text width=7cm,text justified]{\verb"\Etape[pos]{nom}" \\ \verb"\ForcageX{Xnnn}{Forçage 1,Forçage 2}"};
+\end{tikzpicture}
+
+\subsubsection{Forçages placés verticalement}
+
+La commande \verb"\ForcageXV[dis]{Etape}{liste forçage}" permet de placer les ordres de forçage verticalement.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\Etape[0,0]{36}
+\LienET[6]{X36}
+\TransitionRecept[VX36]{36}{r36}
+\Etape{37}
+\ForcageXV{X36}{G1\{Init\},
+G0\{Init\},
+G2\{Init\}}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Forçages verticaux}
+\label{fig:forcagesV}
+\end{figure}
+
+\subsection{Raccourcis}
+
+Plusieurs commandes permettent de raccourcir l'écriture du grafcet
+\subsubsection{EtapeTransition}
+
+
+La commande \verb"\EtapeTransition[pos]{num}{action}{recept}" permet de dessiner directement, l'étape avec le numéro num, l'action et la réceptivité. En l'absence d'action, le cadre n'est pas dessiné. Cette commande fonctionne aussi avec une liste d'actions.
+
+On trouve aussi la commande \verb"\EtapeInitTransition[pos]{num}{action}{recept}" qui dessine une étape initiale.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\EtapeInitTransition[3,0]{10}{}
+{$b_f\cdot m$}
+\EtapeTransition{11}{OUVRIR}{$b_o$}
+\EtapeTransition{12}{}{$5s/X12$}
+\EtapeTransition{13}{FERMER,B+}{$b_f$}
+\LienRetour{T13}{X10}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Raccourcis Etape/Transition}
+\label{fig:EtapeTransition}
+\end{figure}
+
+
+\section{Séquences}
+Plusieurs commandes permettent d'automatiser le tracé des différentes séquences usuelles du grafcet mais aussi des graphes complets:
+\begin{itemize}
+\item Séquence linéaire,
+\item Séquences exclusives,
+\item Séquence simultanées.
+\end{itemize}
+
+\subsection{Séquence linéaire}
+Plusieurs commandes sont disponibles, selon que le premier et le dernier élément de la séquence sont soit une étape soit une transition.
+
+\subsubsection{Séquence Étape Transition}\index{SequenceET}
+
+La commande \verb"\SequenceET" permet de tracer une séquence débutant par une étape et finissant par une transition (figure~\ref{fig:SeqLin}).
+\begin{tikzpicture}
+\draw (0,0) node[fill=blue!20,text width=5.5cm,text justified]{\verb"\SequenceET[pos]{liste}"};
+\end{tikzpicture}
+
+Cette commande nécessite un seul paramètre obligatoire, la liste des étapes, le paramètre optionnel \verb"[pos]" permet de positionner la séquence.
+
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\small
+\SequenceET[0,0]
+{50,51,...,53}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Séquence Étape Étape}\index{SequenceEE}
+
+La commande \verb"\SequenceEE" permet de tracer une séquence débutant et se terminant par une étape (figure~\ref{fig:SeqLin} ).
+
+\begin{tikzpicture}
+\draw (0,0) node[fill=blue!20,text width=5.5cm,text justified]{\verb"\SequenceEE[pos]{liste}{nn}"};
+\end{tikzpicture}
+
+Cette commande nécessite deux paramètres obligatoires:
+\begin{itemize}
+\item une liste d'étape hormis la dernière,
+\item la dernière étape (nn).
+\end{itemize}
+
+
+
+
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\small
+\SequenceEE[0,0]
+{50,51,52,53}{54}
+\end{tikzpicture}
+\end{tkzexample}
+
+\subsubsection{Séquence Transition Etape}\index{SequenceTE}
+La commande \verb"\SequenceTE" permet de tracer une séquence débutant et se terminant par une étape (figure~\ref{fig:SeqLin}).
+\begin{tikzpicture}
+\draw (0,0) node[fill=blue!20,text width=5.5cm,text justified]{\verb"\SequenceTE[pos]{nunTrans}{liste etapes}{derniere etape}"};
+\end{tikzpicture}
+
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\small
+\SequenceTE[0,0]{49}
+{50,51,51}{53}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\subsubsection{Séquence Transition Transition}\index{SequenceTT}
+La commande \verb"\SequenceTT" permet de tracer une séquence débutant et se terminant par une transition (figure~\ref{fig:SeqLin}).
+\begin{tikzpicture}
+\draw (0,0) node[fill=blue!20,text width=5.5cm,text justified]{\verb"\SequenceTT[pos]{nn}{liste}"};
+\end{tikzpicture}
+
+Cette commande nécessite deux paramètres obligatoires:
+\begin{itemize}
+\item une liste d'étape,
+\item le numéro de la transition initiale (nn).
+\end{itemize}
+
+
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\small
+\SequenceTT[0,0]{49}
+{50,52,54,56}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+
+\textbf{Nota:} la notion de liste s'entend au sens de TiKz, c'est à dire :
+\begin{itemize}
+\item soit une liste d'élément séparé par une virgule comme dans la commande suivante, \\
+\verb"\SequenceTT[0,0]{49}{50,52,56,65}" du dernier exemple;
+\item soit une liste sous la forme \verb"{50,51,...,53}", ou seul le premier, le second et le dernier élément sont précisés, TikZ calcule les autres en déterminant le pas ($pas=second-premier$).
+\end{itemize}
+
+A ces commandes de liste on peut associer, comme les trois commandes : \index{Actions}\index{Recepts}\index{ActionRecept}
+\begin{itemize}
+\item \verb"\Actions{1/A1,2/A2,....,n/An}" qui permet d'associer l'action Ai à l'étape i (figure~\ref{fig:ComActa});
+\item \verb"\Recepts{1/r1,2,r2,...,n/rn]" qui permet d'associer la réceptivité ri à la transition i(figure~\ref{fig:ComActa}).
+\item \verb"\ActionRecept{1/A1/r1,2/A2/r2,...,n/An/rn}" qui permet d'associer à la fois une action Ai et une réceptivité ri à une étape i(figure~\ref{fig:ComActb}). En l'absence d'action, le cadre n'est pas dessiné.
+\end{itemize}
+
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\SequenceET[0,0]{10,15,...,25}
+\Actions{15/$A_1^+$,20/$A_1^-$,25/$B:=0$}
+\Recepts{10/$m$,15/$a_1$,20/$a_0$,25/$\underline{1}$}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Description des actions et des réceptivités -1}
+\label{fig:ComActa}
+\end{figure}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+
+\SequenceET[3,0]{30,35,40}
+\ActionRecept{
+30/$Action_1$/$recept_1$,
+35//$recept_2$,
+40/$Action_3$/$recept_3$
+}
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Description des actions et des réceptivités - 2}
+\label{fig:ComActb}
+\end{figure}
+
+
+
+
+\subsection{Graphe linéaire}\index{Graphe}
+La commande \verb"\Graphe" permet de réaliser automatiquement le tracé d'une séquence linéaire en associant étapes, actions et réceptivités (fig~\ref{fig:graphlin}). La syntaxe d'écriture de cette liste des étapes, actions, réceptivités est assez stricte et doit être complète, elle est écrite avec la syntaxe suivante:
+\verb"{num/action/recept, num/action/recept, .....}" chaque groupe doit être séparé du suivant par une virgule (ce qui interdit de fait la virgule dans le texte des actions et réceptivités, les trois éléments de chaque groupe sont séparés par des \verb"/". en l'absence d'action associée à une étape, le cadre n'est pas dessiné.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\Graphe[0,0]{
+1/$Action_1$/$recept_1$,
+2//$recept_2$,
+3/$Action_3$/$recept_3$,
+4/$Action_4$/$recept_4$
+}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Sequence - Graphe linéaire}
+\label{fig:graphlin}
+\end{figure}
+
+\subsection{Graphe bouclé}\index{GrapheBoucle}
+La commande \verb"\GrapheBoucle" permet de tracer un grafcet bouclé en une seule commande (fig~\ref{fig:graphboucl}).
+
+\begin{figure}[!ht]
+\centering\small
+
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\GrapheBoucle[3,0]{
+0//$r_1$,
+5/$A_2$/$r_2$,
+10/$A_3$/$r_3$,
+15/$A_4$/$r_4$
+}
+\EtapeInit[X0]{0}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Séquence - Graphe bouclé}
+\label{fig:graphboucl}
+\end{figure}
+
+
+
+
+
+La qualité du graphisme généré par TiKz permet de transformer un étape normale, en une autre étape, en superposant au symbole initial, le nouveau symbole, vous pouvez aussi superposer une étape initiale sur l'étape O avec la commande \verb"\EtapeInit[X0]{0}".
+
+
+\subsection{Sélection de séquences}\index{DivOU}\index{ConvOU}
+Les deux commandes \verb"\DivOU" et \verb"\ConvOU" permettent de réaliser une sélection de séquence. La syntaxe de ces deux commandes est relativement complexe, nous allons nous appuyer sur l'exemple figure~\ref{fig:selseq} pour l'expliquer.
+
+\begin{figure}[!ht]
+\centering
+
+\begin{tkzexample}[latex=7.8cm,small]
+
+\begin{tikzpicture}
+\Etape[0,0]{1}
+\DivOU{X1}{-5/L1a,3/L1b,11/L1c}
+\SequenceTT[L1a]{1a}{11}
+\SequenceTT[L1b]{1b}{21,22,23}
+\SequenceTT[L1c]{1c}{31,32}
+\ConvOU[-3]{T23}{T32,T11}{L2}
+\Etape[L2]{2}
+\DecaleNoeudy[-3]{VX2}{VX2}
+\DecaleNoeudy[-3]{NoeudGraf}{NoeudGraf}
+\Actions{1/A1,11/A11,21/A11,22/A22,
+23/A23,31/A31,2/A2}
+\Recepts{1a/r1a,1b/r1b,1c/r1c,11/r11,
+21/r21,22/r22,23/r23,31/r31,32/r32}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Sélection de séquence}
+\label{fig:selseq}
+\end{figure}
+
+Commentaires du code:
+\begin{itemize}
+\item Commande \verb"\DivOU{X1}{-5/L1a,3/L1b,11/L1c}" : cette commande permet de réaliser une divergence en OU à partir du n\oe ud inférieur de l'étape (\verb"{X1})". La première branche est placée à -5~em (5 em à gauche) du n\oe ud VX1 (cf~\ref{VXnnn}), le lien associé se nomme 1a (\verb"-5/L1a"). La seconde à 3~em à droite du n\oe ud VX1 et se nomme L1b, la dernière à 11~em et se nomme L1c. La commande \verb"\DivOU" recherche le lien \verb"VXnnn" de l'étape Xnnn pour accrocher le symbole.
+\item Commande \verb"\SequenceTT[L1b]{1b}{21,22,23}" : la séquence Transition-Transition s'accroche au n\oe ud (\verb"[L1b]") de la divergence, la première transition est numérotée 1b.
+\item Commande \verb"\ConvOU[-3]{T23}{T32,T11}{L2}" : cette commande réalise la fermeture de la divergence, le premier paramètre obligatoire \verb"{T23}" correspond au numéro de la dernière transition de la branche la plus longue (c'est le point le plus bas), le deuxième paramètre \verb"{T32,T11}" décrit la liste des dernières transitions de chaque branche à relier. Le dernier paramètre \verb"{L2}" représente le nom du lien sortant. Afin de limiter les conflits de noms, il faut éviter de le nommer uniquement par un numéro, préférez un nom signifiant -branche1- par exemple, ce nom sera utilisé pour connecter l'étape suivante, la distance de ce lien au premier lien est précisé par le paramètre optionnel \verb"[-3]". La figure\ref{fig:noeudConvOU} précise les différents n\oe uds utilisés et définis par la commande.
+
+\end{itemize}
+
+
+\subsubsection{Les n\oe uds des divergences/convergences en OU}
+
+Il est important pour les tracés complexes de comprendre comment sont dessinées les divergences et convergences et surtout quels sont les n\oe uds utilisés et définis par ces fonctions.
+
+\paragraph{ConvOU} Cf. figure~\ref{fig:noeudConvOU}\index{ConvOU}
+
+\begin{itemize}
+\item Le symbole de convergence est positionné verticalement par rapport à la première transition (ici T23), il se place juste en dessous de celle-ci (au sud au sens de Tikz)
+\item Pour chaque transition le lien vertical par du centre (la base au sens de tikz) du symbole vers la ligne horizontale. Pour tracer une convergence, il faut donc définir autant de n\oe uds Txxx que de branches à relier, cette commande ne s'accroche pas aux n\oe uds VTxxx des transitions.
+\item Le n\oe ud de sortie est le n\oe ud L2, l'étape suivante se superpose exactement à ce n\oe ud.
+\end{itemize}
+\begin{figure}[!ht]
+\centering
+\begin{multicols}{3}
+\small
+Extrait du code
+\begin{verbatim}
+\Transition[T23]{23}
+\Transition[T32]{32}
+\Transition[T11]{11}
+\ConvOU[-3]{T23}{T32,
+T11}{L2}
+\Etape[L2]{2}
+\end{verbatim}
+
+\columnbreak
+
+\begin{tikzpicture}
+\node (debut) at (0,0) {};
+\DecaleNoeudx{debut}{T11}
+\DecaleNoeudx[7]{T11}{T23}
+\DecaleNoeudy[6]{T23}{T23}
+\DecaleNoeudx[14]{T11}{T32}
+\DecaleNoeudy[2]{T32}{T32}
+\Transition[T23]{23}
+\Transition[T32]{32}
+\Transition[T11]{11}
+\ConvOU[-3]{T23}{T32,T11}{L2}
+\Etape[L2]{2}
+
+\draw[->,red] (-0.3,-1.5) node[left] {T23} -- (T23.base){};
+\draw[->,red] (4,-0.5) node[left] {T32} -- (T32.base){};
+\draw[->,red] (-0.3,0.5) node[left] {T11} -- (T11.base){};
+\draw[->,red] (-0.3,-3) node[left] {L2} -- (L2.base){};
+
+\end{tikzpicture}
+
+\columnbreak
+\begin{tikzpicture}
+\node (debut) at (0,0) {};
+\DecaleNoeudx{debut}{T11}
+\DecaleNoeudx[7]{T11}{T23}
+\DecaleNoeudy[6]{T23}{T23}
+\DecaleNoeudx[14]{T11}{T32}
+\DecaleNoeudy[2]{T32}{T32}
+\DecaleNoeudy[2.5]{T23}{VT23}
+\DecaleNoeudy[2.5]{T32}{VT32}
+\DecaleNoeudy[2.5]{T11}{VT11}
+\ConvOU[-3]{T23}{T32,T11}{L2}
+
+\draw[->,red] (-0.3,-1.5) node[left] {T23} -- (T23.base){};
+\draw[->,red] (4,-0.5) node[left] {T32} -- (T32.base){};
+\draw[->,red] (-0.3,0.5) node[left] {T11} -- (T11.base){};
+\draw[->,red] (-0.3,-3) node[left] {L2} -- (L2.base){};
+\DecaleNoeudy[2.5]{L2}{VL2}
+
+\end{tikzpicture}
+\normalsize
+\end{multicols}
+\caption{N\oe uds de ConvOU}
+\label{fig:noeudConvOU}
+\end{figure}
+
+\paragraph{DivOU}(figure~\ref{fig:noeudDivOU}
+
+\begin{itemize}
+\item La divergence s'accroche au n\oe ud défini dans le premier paramètre (dans l'exemple le n\oe ud X1. le lien vertical est tracé entre le sud (au sens tikz) du n\oe ud et la ligne horizontale (longueur = $\dfrac{2.5}{2}$~em)
+\item Les n\oe uds sortants sont placés de part et d'autre du n \oe ud d'accrochage au dessous de la ligne horizontale à une distance verticale de $\dfrac{2.5}{2}$~em, les distances horizontales sont précisés dans la commande.
+\item Les transitions ou les liens se superposent à ces n\oe uds.
+\end{itemize}
+
+\begin{figure}[!ht]
+\centering
+\begin{multicols}{3}
+\small\begin{verbatim}
+\Etape[0,0]{1}
+\DivOU{X1}{-5/L1a,3/L1b,11/L1c}
+\Transition[L1a]{1a}
+\Transition[L1b]{1b}
+\Transition[L1c]{1c}
+\end{verbatim}
+
+\columnbreak
+
+\begin{tikzpicture}
+\node (X1) at (0,0){};
+\DivOU{X1}{-5/L1a,3/L1b,11/L1c}
+\draw[->,red] (-1.5,0.5) node[left] {X1} -- (X1.base){};
+\draw[->,red] (-0.3,-1.5) node[right] {L1a} -- (L1a.base){};
+\draw[->,red] (0,-2.5) node[left] {L1b} -- (L1b.base){};
+\draw[->,red] (3,-2.5) node[left] {L1c} -- (L1c.base){};
+\end{tikzpicture}
+
+\columnbreak
+
+\begin{tikzpicture}
+\Etape[0,0]{1}
+\DivOU{X1}{-5/L1a,3/L1b,11/L1c}
+\Transition[L1a]{1a}
+\Transition[L1b]{1b}
+\Transition[L1c]{1c}
+\draw[->,red] (-1.5,0.5) node[left] {X1} -- (X1.base){};
+\draw[->,red] (-0.3,-1.5) node[right] {L1a} -- (L1a.base){};
+\draw[->,red] (0,-2.5) node[left] {L1b} -- (L1b.base){};
+\draw[->,red] (3,-2.5) node[left] {L1c} -- (L1c.base){};
+\draw[->,red] (-0.3,-2) node[right] {T1a} -- (T1a.base){};
+\end{tikzpicture}
+
+\normalsize
+\end{multicols}
+
+\caption{les n\oe uds de DivOU}
+\label{fig:noeudDivOU}
+\end{figure}
+
+Il est possible avec ces deux commandes de générer des grafcets tel celui présenté décrit sur le grafcet \ref{fig:selseqb} et sur les exemples suivants dont les sauts d'étapes et les reprises d'étapes.
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\Etape[0,0]{1}
+\DivOU{X1}{-3/L10,2/L20,6/L30}
+\SequenceTT[L10]{10}{11}
+\SequenceTT[L20]{20}{21,22}
+\SequenceTT[L30]{30}{31,32,33}
+\ConvOU[-2]{T22}{T11}{L2}
+\SequenceET[L2]{2}
+\ConvOU[2]{T2}{T33}{L3}
+\Etape[L3]{3}
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Sélection de séquences -2}
+\label{fig:selseqb}
+\end{figure}
+
+
+
+\subsection{Saut d'étapes}\index{SautEtapes}
+La commande \verb"\SautEtapes" permet de générer directement un saut d'étapes (Cf. \ref{fig:sautetape}).
+\subsubsection{Utilisation de la commande saut d'étapes}
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\Etape[0,0]{121}
+\SautEtapes[-6]{X121}{122,123}{L200}
+\Etape[L200]{200}
+\Recept{TX121s}{$rX121_s$}
+\Recept{TX121}{$rX121$}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Saut d'étapes}
+\label{fig:sautetape}
+\end{figure}
+
+Syntaxe de la commande:
+\verb"\SautEtapes[-6]{X121}{122,123}{L200}"
+\begin{itemize}
+\item \verb"[-6]" : distance de la branche de saut (paramètre optionnel, 5 em par défaut);
+\item \verb"{X121}" : numéro de l'étape de départ;
+\item \verb"{122,123}" : liste des étapes de la branche principale;
+\item \verb"{L200}" : nom du lien de sortie, l'étape suivante s'accroche à ce lien.
+\end{itemize}
+
+Les deux transitions sont référencées en fonction du nom de l'étape de départ (ici \verb"X121") soit:
+\begin{itemize}
+\item \verb"TXnnn" (ici \verb"TX121" pour la transition de la branche principale, d'où la commande \verb"\Recept{TX121}{$rX121$}" pour affecter la réceptivité;
+\item \verb"TXnnns" (ici \verb"TX121s" pour la transition de la branche du saut, la réceptivité est associée à cette transition par la commande \verb"\Recept{TX121s}{$rX121_s$}".
+\end{itemize}
+
+\subsubsection{Saut d'étape comme une sélection de séquence}
+Un saut d'étapes est aussi une sélection de séquence particulière, il est donc possible de tracer cette structure directement comme une sélection de séquence classique (Fig~\ref{fig:sautetape2}). L'intérêt de le tracer comme une sélection de séquence est de rester maître de tous les paramètres du tracé comme :
+\begin{itemize}
+\item la position de la branche de saut ( à gauche par défaut dans la commande \verb"\SautEtapes"),
+\item l'écartement des deux branches (seule la branche de saut est modifiable par \verb"\SautEtapes").
+\item la numérotation des transitions.
+\end{itemize}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[latex=5cm,small]
+\begin{tikzpicture}
+\Etape[0,0]{121}
+\DivOU{X121}{-5/L130a,5/L130b}
+\Transition[L130b]{130b}
+\SequenceTT[L130a]{130a}{210,220}
+\ConvOU[5]{T220}{T130b}{L300}
+\Etape[L300]{300}
+\Recept{T130a}{r130a}
+\Recept{T130b}{r130b}
+\ActionX{X210}{Action 1}
+\ActionX{X220}{Action 2}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Saut d'étapes 2}
+\label{fig:sautetape2}
+\end{figure}
+
+
+\subsection{Reprise d'étapes}\index{RepriseEtapes}
+La librairie GRAFCET propose une commande pour tracer une reprise d'étapes \verb"\RepriseEtapes" (Fig~\ref{fig:repetape}).
+
+\begin{figure}[!ht]
+\centering\small
+\begin{tkzexample}[latex=5cm,small]
+
+\begin{tikzpicture}
+\Etape[0,0]{121}
+\Transition{121}
+\RepriseEtapes[-6]{T121}{122,123}{124}
+\Etape[VT124]{125}
+\Recept{T124}{r124}
+\Recept{T124r}{r124r}
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Reprise d'étapes}
+\label{fig:repetape}
+\end{figure}
+
+
+
+\subsubsection{Reprise d'étapes comme une sélection de séquence}
+Une reprise d'étapes étant une sélection de séquence particulière il est bien sûr possible de tracer celle-ci avec les commandes de base \verb"\DivOU" et \verb"\ConvOU" mais ici contrairement au saut d'étapes, la réalisation est assez complexe (fig~\ref{fig:repriseetape2}).
+
+\begin{figure}[!ht]
+\centering\small
+\begin{tkzexample}[latex=5cm,small]
+
+\begin{tikzpicture}
+\Etape[0,0]{121}
+\Transition{121}
+\DecaleNoeudx[-6]{T121}{T121r}
+\DecaleNoeudx[-6]{VT121}{VT121r}
+\ConvOU[-1]{T121}{T121r}{L122}
+\SequenceEE[L122]{122,123}{125}
+\DivOU{X125}{-5/L125a,1/L125b}
+\Transition[L125b]{125b}
+\Transition[L125a]{125a}
+\Etape[VT125b]{126}
+\LienRetour[2]{T125a}{VT121r}
+\Recept{T125a}{r125a}
+\Recept{T125b}{r125b}
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Reprise d'étapes 2 }
+\label{fig:repriseetape2}
+\end{figure}
+
+
+
+La particularité de ce tracé réside dans les deux lignes:
+\small\begin{verbatim}
+\DecaleNoeudx[-6]{T121}{T121r},
+\DecaleNoeudx[-6]{VT121}{VT121r}.
+\end{verbatim}\normalsize
+
+Ces commandes permettent de créer deux n\oe uds fictifs permettant de tracer la convergence en OU qui ferme la reprise d'étapes.
+\begin{itemize}
+\item T121r : ce n\oe ud est une pseudo transition décalée de -6~em par rapport à la transition T121, ce n\oe ud permet de définir le second n\oe ud d'accrochage de la convergence en OU (Cf. figure\ref{fig:noeudConvOU}).;
+\item VT121r : ce n\oe ud est le pseudo n\oe ud de connexion de la transition T121r, il n'est utile ici que pour réaliser un tracé correct de la boucle de retour.
+\end{itemize}
+
+La commande \verb"DecaleNoeudx" est détaillée page~\pageref{DecaleNoeudx}.
+
+\subsection{Séquences simultanées} \index{DivET}\index{ConvET}
+
+Les deux commandes \verb"\DivET" et \verb"\ConvET" permettent de tracer des séquences simultanées, l'exemple fig~\ref{fig:seqsimul} en montre l'utilisation.
+
+
+\begin{figure}[!ht]
+\centering\small
+\begin{tkzexample}[latex=8cm,small]
+\begin{tikzpicture}
+\Etape{3}
+\Transition{3}
+\DivET{T3}{-5/br1,4.5/br3,13/br2}
+\Graphe[Vbr1]{
+21/$A^+$/$a_1$,
+22/$A^-$/$a_0$,
+23/$Vanne^+$ /$Vanne_1$
+}
+\Etape{24}
+\Etape[Vbr2]{31}
+\SequenceEE[Vbr3]{11,12,...,14}{15}
+\ConvET[-6]{X15}{X24,X31}{b40}
+\Transition[b40]{40}
+\Etape{41}
+\ActionRecept{
+11/$B^+$/$b_1$,
+12/$B^-$/$b_0$,
+13/$Ouvrir$/$ouvert$,
+14/$Fermer$/$fermé$
+}
+\ActionX{X31}{$Km_1$}
+\Recept{T3}{$marche$}
+\Recept{T40}{$\underline1$}
+\end{tikzpicture}
+
+\end{tkzexample}
+\caption{Séquence simultanées}
+\label{fig:seqsimul}
+\end{figure}
+
+\paragraph{Commentaires du code}
+\begin{itemize}
+\item La divergence débute par la commande \verb"\DivET{T3}{-5/br1,4.5/br3,13/br2}",
+\begin{itemize}
+\item le premier paramètre correspond au n\oe ud associé à la transition de début de la divergence (ici \verb"{VT3}"), les branches de la divergence sont positionnées par rapport à ce n\oe ud ,
+\item le deuxième paramètre (ici \verb"{-5/br1,4.5/br3,13/br2}" ) permet de positionner et nommer les n\oe uds de départ de chaque branche par rapport au n\oe ud VT3:
+\begin{itemize}
+\item \verb"-5/br1" : la branche br1 est placée à -5em (5em à gauche) du n\oe ud VT3,
+\item \verb"4.5/br3" : la branche br3 est placée à 4{,}5em (4{,}5em à droite) de n\oe ud VT3,
+\item \verb"13/br2" : la branche br2 est placée à 13em du n\oe ud VT3;
+\end{itemize}
+\end{itemize}
+\item La commande \verb"\ConvET[-6]{X15}{X24,X31}{b40}" permet de clore la divergence (la convergence),
+\begin{itemize}
+\item le premier paramètre \verb"[-6]" (optionnel) permet de positionner (distance en em) le n\oe ud de sortie (la transition) par rapport à la branche la plus \guillemotleft longue\guillemotright;
+\item Le deuxième paramètre \verb"{15}" correspond à la dernière étape de la branche la plus \guillemotleft longue\guillemotright;
+\item le troisième paramètre \verb"{24,31}" présente la liste des dernières étapes de chaque branche (hormis celle de la branche la plus longue),
+\item Le dernier paramètre correspond au nom du n\oe ud d'accrochage de la transition de sortie.
+\end{itemize}
+\item Entre ces deux commandes on doit trouver les différentes séquences, elles peuvent être réalisées soit directement avec des séquences \verb"\Etape", \verb"\Transition", soit avec une séquence Etape/Etape \verb"\SequenceEE", soit à l'aide de la commande \verb"\Graphe".
+\end{itemize}
+
+\subsubsection{Les n\oe uds des divergences/convergence en ET}
+
+\paragraph{N\oe uds de DivET}\index{DivET}
+
+\begin{figure}[!ht]
+\centering
+\begin{tikzpicture}
+\node (T3) at (0,0) {}{};
+\DecaleNoeudy[2.5]{T3}{VT3}
+\DivET{T3}{-3/br1,3.5/br3,8/br2}
+\draw[->,red] (-2.5,0.5) node[left] {T3} -- (T3.base){};
+\draw[->,red] (-2.5,-0.5) node[left] {br1} -- (br1.base){};
+\draw[->,red] (-2.5,-1) node[left] {Vbr1} -- (Vbr1.base){};
+\draw[->,red] (2,-2.5) node[left] {br2} -- (br2.base){};
+\draw[->,red] (-0,-2.5) node[left] {br3} -- (br3.base){};
+\end{tikzpicture}
+\begin{tikzpicture}
+\Transition[0,0]{3}
+\DivET{T3}{-3/br1,3.5/br3,8/br2}
+\Etape[Vbr1]{21}
+\Etape[Vbr2]{31}
+\Etape[Vbr3]{11}
+\draw[->,red] (-2.5,0.5) node[left] {T3} -- (T3.base){};
+\draw[->,red] (-2.5,-0.5) node[left] {br1} -- (br1.base){};
+\draw[->,red] (-2.5,-1) node[left] {Vbr1} -- (Vbr1.base){};
+\draw[->,red] (2,-2.5) node[left] {br2} -- (br2.base){};
+\draw[->,red] (-0,-2.5) node[left] {br3} -- (br3.base){};
+\end{tikzpicture}
+\caption{N\oe uds de DivET}
+\label{fig:noeudDivET}
+\end{figure}
+
+\paragraph{N\oe ud de ConvET}\index{ConvET}
+
+Comme on le voit sur la figure~\ref{fig:noeudConvET},
+\begin{figure}[!ht]
+\centering
+\begin{tikzpicture}
+\Etape[0,-1.5]{15}
+\Etape[-3,-1]{24}
+\Etape[2.5,-0.5]{31}
+\ConvET[-6]{X15}{X24,X31}{b40}
+\Transition[b40]{40}
+\draw[->,red] (-1.5,0) node[left] {X15} -- (X15.base){};
+\draw[->,red] (0.5,0) node[left] {X31} -- (X31.base){};
+\draw[->,red] (-4,-0.5) node[left] {X24} -- (X24.base){};
+\draw[->,red] (-4,-2.5) node[left] {b40} -- (b40.base){};
+\draw[->,red] (-4,-3) node[left] {T40} -- (T40.base){};
+\end{tikzpicture}
+\begin{tikzpicture}
+\node (X15) at (0,-1.5){};\DecaleNoeudy[0]{X15}{X15}
+\node(X24) at (-3,-1){};\DecaleNoeudy[0]{X24}{X24}
+\node(X31) at (2.5,-0.5){};\DecaleNoeudy[0]{X31}{X31}
+\ConvET[-6]{X15}{X24,X31}{b40}
+\DecaleNoeudy[2.5]{b40}{Vb40}
+\draw[->,red] (-1.5,0) node[left] {X15} -- (X15.base){};
+\draw[->,red] (0.5,0) node[left] {X31} -- (X31.base){};
+\draw[->,red] (-4,-0.5) node[left] {X24} -- (X24.base){};
+\draw[->,red] (-4,-3) node[left] {b40} -- (b40.base){};
+\end{tikzpicture}
+\caption{N\oe uds de ConvET}
+\label{fig:noeudConvET}
+\end{figure}
+
+
+\subsubsection{Sélection de séquences à partir d'une synchronisation}
+Le petit grafcet figure~\ref{fig:grfselseqsync} montre quelques problèmes liés à la réalisation de liens entre des éléments de type divergence/convergence en ET et en OU. ici on constate que la succession de la divergence en ou et de la convergence en ET laisse un \guillemotleft vide \guillemotright entre les deux extrémités, en effet la première est conçus pour s'accrocher à une transition et l'autre à une étape.
+Une solution pour résoudre le problème est présentée sur la figure~\ref{fig:grfselseqsync2} ou les n\oe uds de sortie des divergences ont été décalés vers le haut.
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[very small,latex=8cm]
+\begin{tikzpicture}
+\Etape[0,0]{8}
+\DecaleNoeudx[8]{X8}{X9}
+\Etape[X9]{9}
+\LienET[3.5]{X9}
+\DivOU{X8}{-1/b8a,6/b8b}
+\DivOU{X9}{-6/b9a,1/b9b}
+\ConvET[-2]{b9a}{b8a}{ba}
+\ConvET[-1]{b9b}{b8b}{bb}
+\Transition[ba]{8}\Recept{T8}
+{$\uparrow{X8}\cdot X9$}
+\Transition[bb]{9}\Recept{T9}
+{$\uparrow{X9}\cdot X8$}
+\ActionX{X9}{A+}
+\ActionX{X8}{B+}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Sélection de séquences et synchronisation}
+\label{fig:grfselseqsync}
+\end{figure}
+
+\begin{figure}[!ht]
+\centering
+\begin{tkzexample}[very small,latex=8cm]
+
+\begin{tikzpicture}
+\Etape[0,0]{8}
+\DecaleNoeudx[8]{X8}{X9}
+\Etape[X9]{9}
+\LienET[3.5]{X9}
+\DivOU{X8}{-1/b8a,6/b8b}
+\DivOU{X9}{-6/b9a,1/b9b}
+\DecaleNoeudy[-2]{b8a}{b8a}
+\DecaleNoeudy[-2]{b9a}{b9a}
+\DecaleNoeudy[-2]{b8b}{b8b}
+\DecaleNoeudy[-2]{b9b}{b9b}
+\ConvET[-2]{b9a}{b8a}{ba}
+\ConvET[-1]{b9b}{b8b}{bb}
+\Transition[ba]{8}\Recept{T8}
+{$\uparrow{X8}\cdot X9$}
+\Transition[bb]{9}\Recept{T9}
+{$\uparrow{X9}\cdot X8$}
+\ActionX{X9}{A+}
+\ActionX{X8}{B+}
+\DecaleNoeudy[2]{VT8}{VT8}
+\end{tikzpicture}
+\end{tkzexample}
+
+
+\caption{Sélection de séquences et synchronisation - résolu}
+\label{fig:grfselseqsync2}
+\end{figure}
+
+\section{Commandes diverses}
+\subsection{Déplacer un n\oe ud} \index{DecaleNoeudx}\index{DecaleNoeudy}\label{DecaleNoeudx}\label{DecaleNoeudy}
+Deux commandes permettent de déplacer et ou créer un nouveau n\oe ud
+\begin{itemize}
+\item \verb"\DeplaceNoeudx[dist]{ni}{nf}" : cette commande permet de positionner horizontalement le n\oe ud \verb"{nf}" par rapport au n\oe ud \verb"{ni}" à la distance \verb"[dist]" (la distance est notée en unité em, et orientée positivement vers la droite);
+\item \verb"\DeplaceNoeudy[dist]{ni}{nf}" : cette commande permet de positionner verticalement le n\oe ud \verb"{nf}" par rapport au n\oe ud \verb"{ni}" à la distance \verb"[dist]" (la distance est notée en unité em, et orientée positivement vers le bas).
+\end{itemize}
+
+Ces deux commandes créent un n\oe ud dont les dimensions sont de 2{,}5~em en hauteur et de 1~em en largeur.
+
+En précisant, le même nom pour les n\oe uds \verb"{nf}" et \verb"{ni}" \verb"\DecaleNoeudx[dist]{ni}[ni}", on obtient le déplacement du n\oe ud.
+
+En précisant un distance nulle, on superpose les deux n\oe uds \verb"\DecaleNoeudx[0]{ni}[nf}" (la valeur par défaut de la distance est 0~em).
+
+\subsection{liens orientés}
+\subsubsection{LienRetour}\index{LienRetour}
+La commande \verb"\LienRetour[dist]{Tnnn}{Xnnn}" permet de tracer le LienRetour orienté d'une transition vers une étape plus haut sur le grafcet.
+
+Cette commande ne fonctionne correctement que si les deux extrémités du lien sont alignés, sinon il est préférable d'utiliser la commande suivante.
+
+\subsubsection{Lien}\index{Lien}
+La commande \verb"\Lien[dist]{NoeudGraf}{noeud2}{noeud3}", trace un lien entre une transition et une étape, le lien va du n\oe ud1 au n\oe ud3 en passant par le n\oe ud2. La commande optionnelle \verb"[dist]" permet de décaler le dernier lien horizontal.
+\begin{figure*}[!ht]
+\centering
+\begin{multicols}{2}
+\begin{tikzpicture}
+\node (noeuddebut) at (0,0)[draw,red]{}{};
+\node (noeudpassage) at (1,1)[draw,blue]{}{};
+\node (noeudfin) at (2,2)[draw,green]{}{};
+\Lien{noeuddebut}{noeudpassage}{noeudfin}
+\end{tikzpicture}
+
+\columnbreak
+
+\verb"\begin{tikzpicture}"\\
+\verb"\node (noeuddebut) at (0,0)[draw,red]{}{};"\\
+\verb"\node (noeudpassage) at (1,1)[draw,blue]{}{};"\\
+\verb"\node (noeudfin) at (2,-2)[draw,green]{}{};"\\
+\verb"\Lien{noeuddebut}{noeudpassage}{noeudfin}}"\\
+\verb"\end{tikzpicture}"
+\end{multicols}
+\end{figure*}
+
+\begin{figure*}[!ht]
+\begin{multicols}{2}
+\begin{tikzpicture}
+\node (noeuddebut) at (0,0)[draw,red]{}{};
+\node (noeudpassage) at (1,1)[draw,blue]{}{};
+\node (noeudfin) at (-2,2)[draw,green]{}{};
+\Lien{noeuddebut}{noeudpassage}{noeudfin}
+\end{tikzpicture}
+
+\columnbreak
+
+\verb"\begin{tikzpicture}"\\
+\verb"\node (noeuddebut) at (0,0)[draw,red]{}{};"\\
+\verb"\node (noeudpassage) at (1,1)[draw,blue]{}{};"\\
+\verb"\node (noeudfin) at (-2,2)[draw,green]{}{};"\\
+\verb"\Lien{noeuddebut}{noeudpassage}{noeudfin}"\\
+\verb"\end{tikzpicture}"
+\end{multicols}
+
+\end{figure*}
+
+\begin{figure*}[!ht]
+\begin{multicols}{2}
+\begin{tikzpicture}
+\node (noeuddebut) at (0,0)[draw,red]{}{};
+\node (noeudpassage) at (-1,1)[draw,blue]{}{};
+\node (noeudfin) at (-2,2)[draw,green]{}{};
+\Lien{noeuddebut}{noeudpassage}{noeudfin}
+\end{tikzpicture}
+
+\columnbreak
+
+\verb"\begin{tikzpicture}"\\
+\verb"\node (noeuddebut) at (0,0)[draw,red]{}{};"\\
+\verb"\node (noeudpassage) at (-1,1)[draw,blue]{}{};"\\
+\verb"\node (noeudfin) at (-2,2)[draw,green]{}{};"\\
+\verb"\Lien{noeuddebut}{noeudpassage}{noeudfin}"\\
+\verb"\end{tikzpicture}"
+\end{multicols}
+
+\end{figure*}
+
+\begin{figure*}
+
+
+\begin{multicols}{2}
+\begin{tikzpicture}
+\node (noeuddebut) at (-2,2)[draw,red]{}{};
+\node (noeudpassage) at (-2,1)[draw,blue]{}{};
+\node (noeudfin) at (0,0)[draw,green]{}{};
+\Lien{noeuddebut}{noeudpassage}{noeudfin}
+\end{tikzpicture}
+
+\columnbreak
+
+\verb"\begin{tikzpicture}"\\
+\verb"\node (noeuddebut) at (-2,2)[draw,red]{}{};"\\
+\verb"\node (noeudpassage) at (-2,1)[draw,blue]{}{};"\\
+\verb"\node (noeudfin) at (0,0)[draw,green]{}{};"\\
+\verb"\Lien{noeuddebut}{noeudpassage}{noeudfin}"\\
+\verb"\end{tikzpicture}"
+\end{multicols}
+\end{figure*}
+
+\subsubsection{Liens d'espacement}
+
+Il est parfois nécessaire d'augmenter l'intervalle entre une étape et un transition, pour cela, deux commandes permettent de créer un lien vertical en déplaçant les n\oe uds de connexion.
+\begin{itemize}
+ \item La commande \verb"LienET[long]{Xnnn}" trace un lien vertical de longueur long depuis le bas de l'étape Xnnn, le n\oe ud de connexion VXnnn associé à cette étape est déplacé de la même quantité (Cf. exemple figure~\ref{fig:grfselseqsync})\index{LienET}.
+ \item La commande \verb"\LienTE[long]{Xnnn}" permet elle de tracer un lien vertical depuis une transition vers le haut d'une étape\index{LienTE}.
+\end{itemize}
+
+Ces liens peuvent aussi être utilisés pour "remplir un vide" lors d'un tracé entre des divergences et des convergences (Cf. figure\ref{fig:grfpartage})
+
+
+\begin{figure}[!ht]
+\centering
+\begin{multicols}{4}
+\begin{tikzpicture}
+\Etape[0,0]{9}
+\LienET[4]{X9}
+\Transition[VX9]{9}
+\Etape{10}
+\ActionX{X9}{$A+$}
+\Recept{T9}{$a_0$}
+\end{tikzpicture}
+\columnbreak
+\small
+\begin{verbatim}
+\begin{tikzpicture}
+\Etape[0,0]{9}
+\LienET[4]{X9}
+\Transition[VX9]{9}
+\Etape{10}
+\ActionX{X9}{$A+$}
+\Recept{T9}{$a_0$}
+\end{tikzpicture}
+\end{verbatim}\normalsize
+\columnbreak
+\begin{tikzpicture}
+\Etape[0,0]{9}
+\Transition[VX9]{9}
+\LienTE[4]{T9}
+\Etape[VT9]{10}
+\ActionX{X9}{$A+$}
+\Recept{T9}{$a_0$}
+\end{tikzpicture}
+\columnbreak
+\small
+\begin{verbatim}
+\begin{tikzpicture}
+\Etape[0,0]{9}
+\Transition[VX9]{9}
+\LienTE[4]{T9}
+\Etape[VT9]{10}
+\ActionX{X9}{$A+$}
+\Recept{T9}{$a_0$}
+\end{tikzpicture}
+\end{verbatim}\normalsize
+\end{multicols}
+\caption{Liens Étape-Transition et Transition-Étape}
+\label{fig:lienETetTE}
+\end{figure}
+
+\subsection{Commentaires}\index{Comment}
+
+La commande \verb"\Comment[dist]{pos}{commentaire}" permet d'écrire un commentaire dans la page, ce commentaire est positionné à la distance \textit{dist} par rapport au n\oe ud \textit{pos}.
+
+Exemple d'utilisation: figure~\ref{fig:grfpartage}.
+
+\subsection{Modifier la taille des figures}
+
+Tous les symboles étant dessinés avec une taille en em, la modification de la taille des caractères entraîne une modification en conséquence des grafcets, ainsi les grafcets de la figure~\ref{fig:modiftaille} sont tracés avec un code analogue à celui ci-contre (code pour la taille small):
+
+
+\small\begin{verbatim}
+\begin{small}
+\begin{tikzpicture}
+code
+.....
+\end{tikzpicture}
+\end{small}
+\end{verbatim}\normalsize
+
+
+\begin{figure}[!ht]
+\centering
+\begin{multicols}{3}
+\Large
+Large
+
+\begin{tikzpicture}
+\GrapheBoucle{
+10//$marche$,
+20/$A^+$/$a_1$,
+30/$A^-$/$a_0$
+}
+\ActionEfface{X10}
+\EtapeInit[X10]{10}
+\end{tikzpicture}
+
+\columnbreak
+
+\normalsize
+normalsize
+\begin{tikzpicture}
+\GrapheBoucle{
+10//$marche$,
+20/$A^+$/$a_1$,
+30/$A^-$/$a_0$
+}
+\ActionEfface{X10}
+\EtapeInit[X10]{10}
+\end{tikzpicture}
+
+\columnbreak
+
+\small
+small
+
+\begin{tikzpicture}
+\GrapheBoucle{
+10//$marche$,
+20/$A^+$/$a_1$,
+30/$A^-$/$a_0$
+}
+\ActionEfface{X10}
+\EtapeInit[X10]{10}
+\end{tikzpicture}
+\end{multicols}
+
+\begin{multicols}{3}
+\footnotesize
+footnotesize
+
+\begin{tikzpicture}
+\GrapheBoucle{
+10//$marche$,
+20/$A^+$/$a_1$,
+30/$A^-$/$a_0$
+}
+\ActionEfface{X10}
+\EtapeInit[X10]{10}
+\end{tikzpicture}
+
+\columnbreak
+
+\tiny
+tiny
+
+\begin{tikzpicture}
+\GrapheBoucle{
+10//$marche$,
+20/$A^+$/$a_1$,
+30/$A^-$/$a_0$
+}
+\ActionEfface{X10}
+\EtapeInit[X10]{10}
+\end{tikzpicture}
+
+\columnbreak
+
+\small
+
+\begin{verbatim}
+\begin{small}
+\begin{tikzpicture}
+\GrapheBoucle{
+10//$marche$,
+20/$A^+$/$a_1$,
+30/$A^-$/$a_0$
+}
+\ActionEfface{X10}
+\EtapeInit[X10]{10}
+\end{tikzpicture}
+\end{small}
+\end{verbatim}
+
+\end{multicols}
+\normalsize
+\caption{Modification de la taille des grafcets}
+\label{fig:modiftaille}
+\end{figure}
+
+
+
+\newpage
+
+
+\section{Exemples}
+\subsection{Exemples de la norme EN~60848}
+Les grafcets suivant sont extraits de la norme EN~60848 et traite de l'exemple du doseur-Malaxeur.
+
+\subsubsection{Doseur malaxeur - Actions continues}
+La première représentation (fig~\ref{fig:DMactcont} ) est une représentation classique à base d'action mémorisée.
+\begin{figure}[H]
+\centering
+\scriptsize
+%\begin{multicols}{2}
+\begin{tkzexample}[latex=8cm,very small]
+\begin{tikzpicture}
+\EtapeInit[0,0]{1}
+\Transition{1}
+\DivET{T1}{-5/b1,7/b2}
+\SequenceEE[Vb1]{2,3,4}{5}
+\SequenceEE[Vb2]{6,7,8}{10}
+\ConvET[5]{X5}{X10}{b3}
+\Transition[b3]{10}
+\DivET{T10}{-5/b4,7/b5}
+\SequenceEE[Vb4]{11}{12}
+\Etape[Vb5]{13}
+\ConvET[5]{X12}{X13}{b6}
+\Transition[b6]{12}
+\Etape{14}
+\Transition{14}
+\LienRetour[8]{T14}{X1}
+\Actions{
+2/VA,
+3/VB,
+4/VC,
+6/MT,
+7/MT,
+8/MT,
+12/MP+,
+13/MR,
+14/MP-}
+\Recepts{
+1/$DC_y\cdot z\cdot S_0$,
+2/$a$,
+3/$b$,
+4/$z$,
+6/$DP$,
+7/$\overline{DP}$,
+8/$DP$,
+10/$\underline{1}$,
+12/$S_1$,
+14/$S_0$
+}
+\Recept{T11}{$t_1/X11$}
+\end{tikzpicture}
+\end{tkzexample}
+
+\caption{Doseur Malaxeur - Description avec des actions continues}
+\label{fig:DMactcont}
+\end{figure}
+
+
+
+\paragraph{Remarques:}
+Les actions et réceptivités sont installées grâce aux commandes \verb"\Recepts" et \verb"\Actions", seule la réceptivité associée à la transition T11 (la temporisation $t_1/X11$ est programmée par la commande \verb"\Recept", en effet la commande \verb"\Recepts" comprend $/$ comme un séparateur de la liste. Un problème identique se produit lorsque l'action ou la réceptivité comporte une virgule.
+
+\subsubsection{Doseur malaxeur - Actions mémorisées}
+Le grafcet figure~\ref{fig:DMactmem} présente une autre traduction du cahier des charges en utilisant des actions mémorisées sur l'activation et la désactivation d'une étape. \index{ActionActiv} \index{ActionDesactiv}
+\begin{figure}[H]
+\centering\scriptsize
+\begin{tkzexample}[latex=8cm,very small]
+\begin{tikzpicture}
+\EtapeInit[0,0]{1}
+\Transition{1}
+\DivET{T1}{-5/b1,7/b2}
+\SequenceEE[Vb1]{2,3,4}{5}
+\SequenceEE[Vb2]{6,7,8}{10}
+\ConvET[5]{X5}{X10}{b3}
+\Transition[b3]{10}
+\SequenceET[VT10]{11,12,13}
+\LienRetour[8]{T13}{X1}
+\Actions{
+2/VA,
+3/VB,
+4/VC,
+6/MT:=1,
+8/MT:=0,
+11/MR:=1,
+12/MP+,
+13/MP-}
+\ActionActiv{X6}
+\ActionDesactiv{X8}
+\ActionActiv{X11}
+\Action{X12}{MR:=0}
+\ActionDesactiv{X12}
+\Recepts{
+1/$DC_y\cdot z\cdot S_0$,
+2/$a$,
+3/$b$,
+4/$z$,
+6/$DP$,
+7/$\overline{DP}$,
+8/$DP$,
+10/$\underline{1}$,
+12/$S_1$,
+13/$S_0$
+}
+\Recept{T11}{$t_1/X11$}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Doseur Malaxeur - Description avec des actions mémorisées}
+\label{fig:DMactmem}
+\end{figure}
+
+
+\paragraph{Remarques:}
+Les actions à l'activation et à la désactivation sont programmées en deux temps, dans la liste des actions avec la commande \verb"\Actions" pour placer les cadres d'action puis les symboles d'activation et de désactivation sont placés avec les deux commandes \verb"\ActionActiv" et \verb"\ActionDesactiv". \\
+La commande \verb"\Actions" ne permettant de placer qu'une action par étape, la deuxième action associée à l'étape X12 est rajoutée par la commande \verb"\Action", la commande de désactivation est placée à la suite.
+
+
+
+\subsubsection{Utilisation de Macro-étapes}
+La figure~\ref{fig:grfME} présente une solution du même cahier des charges à base de macro-étapes.
+
+\begin{figure}[H]
+\scriptsize
+\begin{tkzexample}[vbox,very small]
+\begin{tikzpicture}
+\EtapeInit[0,0]{1} \Transition{1}
+\DivET{T1}{-3/b1,3/b2}
+\MacroEtape[Vb1]{M20} \MacroEtape[Vb2]{M30}
+\ConvET[3]{XM20}{XM30}{b3}
+\Transition[b3]{2} \MacroEtape{M40}
+\Transition{40}
+\LienRetour[6]{T40}{X1}
+\Recept{T1}{$DC_y\cdot z \cdot S_0$}
+\Recept{T2}{$\underline{1}$}
+\Recept{T40}{$S_0$}
+\draw (4,1.) node[text width=5cm,text centered]
+{Macro-étape M40 \\ "Malaxage - Évacuation"};
+\SequenceEE[3,0]{E40,41}{S40}
+\draw (8,1.) node[text width=4cm,text centered]
+{Macro-étape M30 \\ "Amenage briquettes"};
+\SequenceEE[7,0]{E30,31,32}{S30}
+\draw (12,1.) node[text width=4cm,text centered]
+{Macro-étape M20 \\ "Dosage produit"};
+\SequenceEE[11,0]{E20,21,22}{S22}
+\ActionRecept{E20/VA/$a$,21/VB/$b$,22/VC/$z$}
+\ActionRecept{E30/M/$DP$ ,31/MT/$\overline{DP}$,32/MT/$DP$}
+\Actions{ E40/MR,41/MP+,S40/MP-}
+\Action{X41}{MR}
+\Recept{TE40}{$t1/XE40$}
+\Recept{T41}{$s_1$}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Doseur Malaxeur - Description avec des macro-étapes}
+\label{fig:grfME}
+\end{figure}
+
+
+\vfill
+\newpage
+
+\subsubsection{Grafcet avec encapsulation}
+
+
+\begin{figure}[H]
+\tiny
+\begin{tkzexample}[vbox,very small]
+\begin{tikzpicture}
+\EtapeInit[0,0]{D1}
+\TransitionRecept{D1}{$\overline{BPAU}\cdot S_{manu}$}
+\DecaleNoeudx[-4]{TD1}{b1} \DecaleNoeudx[-4]{VTD1}{Vb1}
+\ConvOU[-2]{TD1}{b1}{b2}
+\Etape[b2]{A6}
+\DivOU{XA6}{-1/b3,8/b4}
+\TransitionRecept[b3]{A6-a}{$z \cdot S_0 \cdot S_{auto}$}
+\TransitionRecept[b4]{A6-b}{$BPAU$}
+\EtapeEncapsulante[VTA6-a]{F1}
+\DivOU{XF1}{-1/b5,4.5/b6}
+\TransitionRecept[b5]{F1-a}{$S_{manu}$}
+\LienRetour[2]{TF1-a}{Vb1}
+\TransitionRecept[b6]{F1-b}{$BPAU$}
+\ConvOU[2]{TF1-b}{TA6-b}{b7}
+\DecaleNoeudx[11]{XD1}{liens} \DecaleNoeudy[-1.5]{b7}{b7}
+\Lien{b7}{liens}{XD1}
+\begin{Encap}[F1]{15em,0}{F1}{GM}
+\SequenceET[0,0]{0,1} \EtapeEncapsulante[X1]{1} \LienActivation{X0}
+\LienRetour[4]{T1}{X0}
+\Recepts{0/$Dcy$,1/$X44$}
+\end{Encap}
+\begin{Encap}[dosage]{30em,0}{1}{Gdosage}
+\SequenceEE[0,0]{20,21,22}{23} \LienActivation{X20}
+\ActionRecept{20/VA/$a$,21/VB/$b$,22/VC/$z$}
+\end{Encap}
+\begin{Encap}[amenage]{45em,0}{1}{Gamenage}
+\SequenceEE[0,0]{30,31,32}{33} \LienActivation{X30}
+\ActionRecept{30/MT/$DP$,31/MT/$\overline{DP}$,32/MT/$DP$}
+\end{Encap}
+\begin{Encap}[malaxage]{60em,5em}{1}{GMalaxage}
+\SequenceEE[0,0]{40,41,...,43}{44}
+\LienActivation{X40}
+\ActionRecept{42/MP+/$S_1$,43/MP-/$S_0$}
+\Recept{T40}{$X23\cdot X33$} \ActionX{X41}{MR}
+\Recept{T41}{$t_1/X41$} \Action{X43}{MR}
+\end{Encap}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Doseur Malaxeur - Description avec des encapsulations}
+\label{fig:Grfencap}
+\end{figure}
+
+L'exemple~\ref{fig:Grfencap} propose une représentation à base d'encapsulation. Le premier grafcet est le grafcet des modes de marche.
+
+
+
+\subsection{Exemples à tracé complexe}
+Les quelques exemples qui suivent présentent des grafcets à structure complexe, ils montrent les possibilités et les limites de la librairie GRAFCET.
+
+\subsubsection{Exemple avec action au franchissement}\index{ActionFranchissement}
+
+L'exemple fig~\ref{fig:grfactfranch} montre comment tracer une action au franchissement, cet exemple est tiré de la norme.
+
+
+\begin{figure}[H]
+\scriptsize
+\begin{tkzexample}[small]
+\begin{tikzpicture}
+\Etape[0,0]{12}
+\DecaleNoeudx[8]{X12}{X24}
+\Etape[X24]{24}
+\LienET[3.75]{X12}
+\Transition[VX12]{12}\Recept{T12}{$a$}
+\DivOU{X24}{-4.5/L1a,2/L1b}
+\Transition[L1a]{1a}\Recept{T1a}{$b$}
+\ActionFranchissement{T1a}{M:=1}
+\Transition[L1b]{1b}\Recept{T1b}{$c$}
+\ConvOU[1]{T12}{T1a}{L2}
+\Etape[L2]{13}
+\LienTE[4]{T1b}
+\Etape[VT1b]{23}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Action au franchissement}
+\label{fig:grfactfranch}
+\end{figure}
+
+
+
+
+
+\subsubsection{Partage de ressource}
+
+L'exemple suivant (Fig~\ref{fig:grfpartage} ) montre un exemple de grafcet avec partage de ressource, celui-ci décrit quelques particularités du tracé d'un grafcet complexe.
+
+\begin{figure}[!ht]
+\tiny
+\begin{tkzexample}[very small]
+\begin{tikzpicture}
+\SequenceEE[0,0]{10,M11,12}{13} \EtapeInit[X10]{10}
+\DecaleNoeudx[28]{X10}{X20}
+\SequenceEE[X20]{20,M21,22}{23} \EtapeInit[X20]{20}
+\DecaleNoeudx[19]{T12}{X0} \EtapeInit[X0]{0}
+\MacroEtape[XM11]{M11} \MacroEtape[XM21]{M21}
+\DivOU{X0}{-4/b1,4/b2}
+\DecaleNoeudy[-2.5]{b1}{b1}
+\ConvET[3]{X13}{b1}{b3} \Transition[b3]{13}
+\DecaleNoeudy[-2.5]{b2}{b2}
+\ConvET[-3]{X23}{b2}{b4} \Transition[b4]{23}
+\SequenceET[VT13]{14,15,M16,17} \MacroEtape[XM16]{M16}
+\SequenceET[VT23]{24,25,M26,27} \MacroEtape[XM26]{M26}
+\DivET{T17}{-3/b5,16/b7}
+\SequenceET[Vb5]{19} \LienRetour[4]{T19}{X10}
+\DivET{T27}{-3/b6,3/b8}
+\SequenceET[Vb8]{29} \LienRetour[-19]{T29}{X20}
+\DecaleNoeudy[2.5]{Vb7}{VVb7}
+\ConvOU[2]{Vb7}{Vb6}{b9}
+\LienTE[3]{b7} \LienTE[3]{b6}
+\DecaleNoeudx[-5]{X10}{pointdepassage}
+\Lien[-13]{b9}{pointdepassage}{X0}
+\LienTE[-3]{b9}
+\Actions{12/Avancer Wagonnet A,22/Avancer Wagonnet B,14/Aiguiller voie A,24/Aiguiller voie B,
+15/Avancer Wagonnet A,25/Avancer Wagonnet B,19/Reculer Wagonnet A,29/Reculer Wagonner B}
+\Recepts{10/prod. Wagonnet en A,M11/fin remplissage A,12/Wagonnet au poste d'attente A,
+13/$\underline{1}$,14/aiguillage vers voie A,15/Wagonnet au poste de déchargement,
+M16/fin déchargement,17/Wagonnet au poste d'attente A,19/Wagonnet au poste de chargement A,
+20/prod. Wagonnet en B,M21/fin remplissage B,22/Wagonnet au poste d'attente B,23/$\underline{1}$,
+24/aiguillage vers voie B,25/Wagonnet au poste de déchargement,M26/fin déchargement,
+27/Wagonnet au poste d'attente B,29/Wagonnet au poste de chargement B}
+\Comment[3]{XM11}{\textit{\guillemotleft Remplissage A \guillemotright}}
+\Comment[3]{XM21}{\textit{\guillemotleft Remplissage B\guillemotright}}
+\Comment[3]{XM16}{\textit{\guillemotleft Décharger \\ Wagonnet\guillemotright}}
+\Comment[3]{XM26}{\textit{\guillemotleft Décharger \\ Wagonnet\guillemotright}}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Partage de ressources}
+\label{fig:grfpartage}
+\end{figure}
+
+
+
+Le grafcet Fig~\ref{fig:grfpartage} présente quelques particularités graphiques qui font que le tracé de ce grafcet n'est pas aisé avec la librairie GRAFCET. Le problème réside dans la liaison entre les divergence/convergence en OU et les divergences/convergences en ET. Ces éléments de la librairie GRAFCET sont conçus pour être connectés à des étapes, des transitions et des liens, ici les éléments sont reliés entre eux.
+
+
+Le premier problème réside dans le fait que les commandes \verb"\ConvET" se connectent aux n\oe uds nommés \verb"Xxxx", elle trouvent bien les n\oe uds \verb"X13" et \verb"X23" mais aucun n\oe ud \verb"Xb1" ou \verb"Xb2" pour se connecter aux sorties de la divergence \verb"\DivOU{X0}{-4/b1,4/b2}". Il est donc nécessaire de créer ces deux n\oe uds, c'est ce que font les deux commandes \verb"\DecaleNoeudy[-2.5]{b2}{Xb2}" et \\ \verb"\DecaleNoeudy[-2.5]{b3}{Xb3}". Le décalage de 2.5~em correspond au pas étape/transition.
+
+
+\subsubsection{Pose-Dépose}
+
+La figure~\ref{fig:grafposedepos} présente un grafcet avec deux séquences simultanées croisées.
+
+\begin{figure}[!ht]
+\centering
+\scriptsize
+\begin{tkzexample}[very small]
+\begin{tikzpicture}
+\SequenceEE[0,0]{10,11}{12}
+\DecaleNoeudx[10]{X12}{X1}
+\EtapeInit[X10]{10} \EtapeInit[X1]{1}
+\ConvET[3]{X12}{X1}{b1}
+\Transition[b1]{b1} \Etape{13}
+\Transition{13}
+\DivET{T13}{-3/br1,7/br2}
+\LienRetour{br1}{X10}
+\Recepts{10/$marche\cdot\overline{arret}\cdot usinage$,
+11/pièce usinée,
+b1/$\underline{1}$,
+13/pièce déposée}
+\Actions{11/USINAGE,13/DEPOSE}
+
+\DecaleNoeudx[22]{X11}{X20}
+\SequenceEE[X20]{20}{21} \EtapeInit[X20]{20}
+\DecaleNoeudx[-6]{X21}{X2}
+\Etape[X2]{2}
+\ConvET[3]{X2}{X21}{b2}
+\Transition[b2]{b2} \Etape[VTb2]{22}
+\Transition{22}
+\DivET{T22}{-3/br3,3/br4}
+\Etape[Vbr4]{23} \Transition{23}
+\LienRetour[-15]{T23}{X20}
+\Recepts{20/$marche\cdot \overline{arret} \cdot assemblage$,
+b2/prise manuelle + prise automatique,
+22/pièce prise,
+23/pièce assemblée}
+\Actions{22/PRISE,23/ASSEMBLAGE}
+\DecaleNoeudx[3]{X1}{liens1}
+\Lien[0]{br2}{liens1}{X2}
+\DecaleNoeudx[4]{X1}{liens2}
+\Lien[-1]{br3}{liens2}{X1}
+\end{tikzpicture}
+\end{tkzexample}
+\caption{GRAFCET - Cycle pose dépose}
+\label{fig:grafposedepos}
+\end{figure}
+
+
+
+
+
+
+Commentaires
+
+La première commande crée la séquence 10,11,12.\\
+La commande de décalage permet de positionner le noeud pour installer l'étape initiale X1.
+L'étape X10 est surchargée en étape initiale.\\
+La commande \verb"\ConvET" permet de regrouper la divergence simultanée.\\
+Les actions et réceptivités sont mises en place avec les commandes \verb"\Actions" et \verb"\Recept".\\
+
+L'autre moitié du graphe est généré de la même manière. Il est positionné par rapport au premier par la commande \verb"DecaleNoeudx" qui positionne l'étape X20 par rapport à l'étape X11, l'étape X2 est ensuite positionné par rapport à l'étape X21.
+
+Le lien entre la divergence et l'étape X2 est réalisé par la commande \verb"\Lien", le n\oe ud lien1 permet de positionner le lien vertical, ce lien passe par ce n\oe ud.\\
+Le lien de la seconde divergence à l'étape X1 est aussi tracé avec la commande \verb"\lien", le paramètre optionnel \verb"[-1]" permet de décaler vers le haut de 1~em le retour pour éviter la superpositions des liens.
+
+
+
+
+\begin{figure}[!ht]
+\scriptsize
+\begin{tkzexample}[very small]
+\begin{tikzpicture}
+\SequenceEE[0,0]{10,M20}{21}\MacroEtape[XM20]{M20}
+\DecaleNoeudx[10]{X21}{X1}
+\EtapeInit[X10]{10}
+\EtapeInit[X1]{1}
+\ConvET[3]{X21}{X1}{b1}
+\Transition[b1]{b1}
+
+\DivET{Tb1}{-3/br1,7/br2}
+\MacroEtape[Vbr1]{M30}
+\TransitionRecept{M30}{$\underline{1}$}
+\DivET{TM30}{-3/br3,6/br4}
+\LienRetour[1]{br3}{X10}
+\Etape[Vbr4]{32}
+\SequenceEE[Vbr2]{M40}{42}
+\Recepts{M40/$\underline{1}$}
+\MacroEtape[XM40]{M40}
+\ConvET[3]{X32}{X42}{b40}
+\TransitionRecept[b40]{40}{$\underline{1}$}
+
+\MacroEtape{M50}
+\Transition{M50}
+\LienRetour[-6]{TM50}{X1}
+\Recepts{
+10/$dcy\cdot auto\cdot N_A\cdot N_B\cdot c_i $,
+M20/$\underline{1}$,
+b1/$\underline{1}$,
+M50/$\underline{1}$
+}
+
+\end{tikzpicture}
+\end{tkzexample}
+\caption{Exemples divers}
+\label{fig:Exdiv1}
+\end{figure}
+
+
+
+\backmatter % Épilogue
+\printindex
+\tableofcontents % Table des matières
+\listoffigures % Table des figures
+
+\end{document}
diff --git a/graphics/pgf/contrib/harveyballs/README b/graphics/pgf/contrib/harveyballs/README
new file mode 100644
index 0000000000..f351b18fa5
--- /dev/null
+++ b/graphics/pgf/contrib/harveyballs/README
@@ -0,0 +1,25 @@
+Harvey Balls for LaTeX
+Copyright (C) 2013 Sascha Roth, Technical University Munich, sascha.roth@mytum.de
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+This package provides the commands to create Harvey Balls using tikz.
+
+ \harveyBallNone
+ \harveyBallQuarter
+ \harveyBallHalf
+ \harveyBallThreeQuarter
+ \harveyBallFull
+
+All commands take an optional parameter to set the size. User variables can be used to customize the appearance of the Harvey Balls. \ No newline at end of file
diff --git a/graphics/pgf/contrib/harveyballs/harveyballs-Manual.pdf b/graphics/pgf/contrib/harveyballs/harveyballs-Manual.pdf
new file mode 100644
index 0000000000..63a48d36b9
--- /dev/null
+++ b/graphics/pgf/contrib/harveyballs/harveyballs-Manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/harveyballs/harveyballs-Manual.tex b/graphics/pgf/contrib/harveyballs/harveyballs-Manual.tex
new file mode 100644
index 0000000000..cbf6f40dcf
--- /dev/null
+++ b/graphics/pgf/contrib/harveyballs/harveyballs-Manual.tex
@@ -0,0 +1,142 @@
+\documentclass{article}%
+
+\title{The \texttt{harveyballs} Package}
+\author{Sascha Roth\\Technische Universit\"at M\"unchen\\sascha.roth@mytum.de}
+
+\usepackage{booktabs}%
+\usepackage{xspace}%
+\usepackage{HarveyBalls}%
+%
+\begin{document}%
+\maketitle
+
+
+%\@harveyBallsSize and \@harveyBallsLineWidth
+
+\newcommand{\pkgName}{\texttt{harveyballs}\xspace}
+
+\begin{abstract}
+This document exemplifies the \pkgName package for \LaTeXe in a nutshell. Harvey balls can be used in arbitrary contexts such as to present survey results in a visual manner or express parameter values of certain characteristics. They provide a visual means to easily compare these values best facilitated by the sophisticated pattern recognition techniques of build in visual human cognition by mother nature.
+\end{abstract}
+
+\section{Package Dependencies}
+
+The \pkgName package requires the \texttt{tikz} package.
+
+
+\section{Examples and Options}
+
+\subsection{In text}
+
+This is a normal text with Harvey Balls included.
+Here is a value commonly indicating a property is not fulfilled \harveyBallNone.
+For partially fulfilled properties you could use a Harvey Ball filled by a quarter, e.g.\,\harveyBallQuarter.
+If it is half fulfilled, you could use \harveyBallHalf.
+Almost fulfilled properties could be illustrated with \harveyBallThreeQuarter.
+Finally, if a certain property is fullfilled entirely you should use \harveyBallFull.
+
+\subsection{In table}
+Harvey Balls can also be integrated in tables (cf.\,Table \ref{tab:ExampleForATableIncludingHarveyBalls}).
+
+
+\begin{table}[h]
+ \centering
+ \begin{tabular}{lccc}
+\hline
+ & Approach 1 & Approach 2 & Approach 3\\
+\hline
+ Property 1 & \harveyBallNone & \harveyBallQuarter & \harveyBallHalf \\
+ Property 2 & \harveyBallHalf & \harveyBallThreeQuarter & \harveyBallFull \\
+ Property 3 & \harveyBallFull & \harveyBallThreeQuarter & \harveyBallQuarter\\
+\hline
+ \end{tabular}
+ \caption{Example for a table including Harvey Balls}
+ \label{tab:ExampleForATableIncludingHarveyBalls}
+\end{table}
+
+\subsection{Custom size}
+
+There are two variables available to the user to override the size of the Harvey Balls globally.
+\begin{itemize}
+\item \verb|\harveyBallsSize|, i.e. the size of the Harvey Balls and
+\item \verb|\harveyBallsLineWidth|, i.e. the line width used to draw the Harvey Balls.
+\end{itemize}
+Threse values can be changed using the following commands:
+\begin{itemize}
+\item \verb|\def\harveyBallsSize{0.85ex}|
+\item \verb|\def\harveyBallsLineWidth{0.2pt}|
+\end{itemize}
+Whereas 0.85ex and 0.2pt would be parameters, i.e. your custom sizes. Note that these are also the default values.
+\verb|\def\harveyBallsLineWidth{1pt}| and \verb|\def\harveyBallsSize{3ex}| produces:\\
+\def\harveyBallsLineWidth{1pt}\def\harveyBallsSize{3ex}
+\harveyBallNone, \harveyBallNone, \harveyBallQuarter, \harveyBallHalf, \harveyBallThreeQuarter, \harveyBallFull. \\
+
+%reset to defaults
+%\def\harveyBallsSize{0.85ex}
+%\def\harveyBallsLineWidth{0.2pt}
+
+
+You can also use custom sized using an optional parameter for each Harvey Ball\\
+%
+\begin{table}[h]
+ \centering
+\begin{tabular}{lc}
+\hline
+Command & {Produced Harvey Ball}\\
+\hline
+\verb|\harveyBallNone[14pt]| & \harveyBallNone[14pt] \\
+\verb|\harveyBallQuarter[14pt]|& \harveyBallQuarter[14pt]\\
+\verb|\harveyBallHalf[14pt]|& \harveyBallHalf[14pt]\\
+\verb|\harveyBallThreeQuarter[14pt]|& \harveyBallThreeQuarter[14pt]\\
+\verb|\harveyBallFull[14pt]|& \harveyBallFull[14pt]\\
+\hline
+\end{tabular}
+ \caption{Example for custom-sized Harvey Balls}
+\end{table}
+
+\subsection{Custom Colors}
+The colors of the Havey Balls can be overridden utilizing the user variables
+\begin{itemize}
+\item \verb|\harveyBallsColor|, i.e. the fill color of the Harvey Ball and
+\item \verb|\harveyBallsLineColor|, i.e. the border color of the Harvey Ball.
+\end{itemize}
+For instance with \verb|\def\harveyBallsColor{red}| and \verb|\def\harveyBallsLineColor{blue}| you Harvey Balls will apear like this:\\
+\def\harveyBallsColor{red}
+\def\harveyBallsLineColor{blue}
+\harveyBallNone, \harveyBallQuarter, \harveyBallHalf, \harveyBallThreeQuarter, \harveyBallFull. \\
+
+\def\harveyBallsColor{blue}
+
+\section{Changelog}
+\begin{tabular}{llp{8cm}}
+Date & Version & Changes\\
+\hline
+2013/10/26 & Version 1.1 & Added user variables for fill and border colors, custom sizes and improved visual appreareance. Thanks to Daniel H. Luecking from University of Arkansas for the valuable feedback to the initial version and suggestions for improvements \\
+2013/10/22 & Version 1.0 & Initial release.\\
+\end{tabular}
+
+
+\section{License}
+\begin{verbatim}
+Harvey Balls for LaTeX
+Copyright (C) 2013 Sascha Roth, Technical University Munich
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+\end{verbatim}
+
+%This work consists of the files README, svg.dtx (with derived files svg.sty, svg.pdf, Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png, sample.tex), preamble.tex, example.svg (with derived files example.pdf and example.pdf).
+
+% The following files constitute the svg package and should be distributed as a whole: README, svg.dtx, svg.sty, svg.pdf, Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png, preamble.tex example.svg, example.pdf, example.pdf_tex, root.C, root.svg, root.pdf, and root.pdf_tex.
+
+\end{document}
diff --git a/graphics/pgf/contrib/harveyballs/harveyballs.sty b/graphics/pgf/contrib/harveyballs/harveyballs.sty
new file mode 100644
index 0000000000..fba6ac5d11
--- /dev/null
+++ b/graphics/pgf/contrib/harveyballs/harveyballs.sty
@@ -0,0 +1,56 @@
+%% Harvey Balls for LaTeX
+%% Copyright (C) 2013 Sascha Roth, Technical University Munich
+%%
+%% This program is free software: you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by
+%% the Free Software Foundation, either version 3 of the License, or
+%% (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%%
+
+
+\NeedsTeXFormat{LaTeX2e}[2001/06/01]
+\ProvidesPackage{harveyballs}[2013/10/22 Harvey Balls for LaTeX by Sascha Roth, Technical University Munich, sascha.roth@mytum.de]
+\RequirePackage{tikz}
+%user variables
+\def\harveyBallsSize{0.85ex}%size of the harvey balls
+\def\harveyBallsLineWidth{0.2pt}%line width of the harvey balls
+\def\harveyBallsColor{black}
+\def\harveyBallsLineColor{black}
+
+%
+\DeclareRobustCommand{\harveyBallNone}[1][\harveyBallsSize]{%
+\begin{tikzpicture}%
+\draw[draw=\harveyBallsLineColor,line width=\harveyBallsLineWidth] (0,0) circle (#1);%
+\end{tikzpicture}%
+}%
+\DeclareRobustCommand{\harveyBallQuarter}[1][\harveyBallsSize]{%
+\begin{tikzpicture}%
+\draw[draw=\harveyBallsLineColor,line width=\harveyBallsLineWidth](0,0) circle (#1);%
+\fill[fill=\harveyBallsColor] (0,0) -- (#1,0mm) arc (0:90:#1) -- cycle;%
+\end{tikzpicture}%
+}%
+\DeclareRobustCommand{\harveyBallHalf}[1][\harveyBallsSize]{%
+\begin{tikzpicture}%
+\draw[draw=\harveyBallsLineColor,line width=\harveyBallsLineWidth](0,0) circle (#1);%
+ \fill [fill=\harveyBallsColor] (0,0) -- (0mm,#1) arc (90:-90:#1) -- cycle;%
+\end{tikzpicture}%
+}%
+\DeclareRobustCommand{\harveyBallThreeQuarter}[1][\harveyBallsSize]{%
+\begin{tikzpicture}%
+\draw[draw=\harveyBallsLineColor,line width=\harveyBallsLineWidth](0,0) circle (#1);%
+ \fill [fill=\harveyBallsColor] (0,0) -- (0mm,#1) arc (90:-180:#1) -- cycle;%
+\end{tikzpicture}%
+}%
+\DeclareRobustCommand{\harveyBallFull}[1][\harveyBallsSize]{%
+\begin{tikzpicture}%
+\filldraw[draw=\harveyBallsLineColor,fill=\harveyBallsColor,line width=\harveyBallsLineWidth] (0,0) circle (#1);%
+\end{tikzpicture}%
+}% \ No newline at end of file
diff --git a/graphics/pgf/contrib/hf-tikz/README b/graphics/pgf/contrib/hf-tikz/README
new file mode 100644
index 0000000000..207fac77a8
--- /dev/null
+++ b/graphics/pgf/contrib/hf-tikz/README
@@ -0,0 +1,15 @@
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* hf-tikz --- A simple way to highlight formulas and formula parts.
+*
+* E-mail: claudio dot fiandrino at gmail dot com
+*
+* Released under the LaTeX Project Public License v1.3c or later
+*
+* See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package provides a way to highlight formulas and formula parts
+in both documents and presentations thanks to TikZ.
+
+
+
diff --git a/graphics/pgf/contrib/hf-tikz/hf-tikz.dtx b/graphics/pgf/contrib/hf-tikz/hf-tikz.dtx
new file mode 100644
index 0000000000..067d4ee9f5
--- /dev/null
+++ b/graphics/pgf/contrib/hf-tikz/hf-tikz.dtx
@@ -0,0 +1,1108 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* hf-tikz --- A simple way to highlight formulas and formula parts.
+*
+* E-mail: claudio dot fiandrino at gmail dot com
+*
+* Released under the LaTeX Project Public License v1.3c or later
+*
+* See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package provides a way to highlight formulas and formula parts
+in both documents and presentations thanks to TikZ.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* hf-tikz --- A simple way to highlight formulas and formula parts.
+*
+* E-mail: claudio dot fiandrino at gmail dot com
+*
+* Released under the LaTeX Project Public License v1.3c or later
+*
+* See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+\endpreamble
+\postamble
+
+Copyright (C) 2012-2014 by Claudio Fiandrino <claudio.fiandrino@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Claudio Fiandrino.
+
+This work consists of the file hf-tikz.dtx
+and the derived files hf-tikz.ins and
+ hf-tikz.pdf
+ hf-tikz.sty.
+\endpostamble
+\usedir{tex/latex/hf-tikz}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hf-tikz}[2014/07/25 v0.3a A simple way to highlight formulas and formula parts.]
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{csquotes}
+\usepackage{lmodern}
+\usepackage{amsmath,amssymb}
+\usepackage[width=14cm]{geometry}
+\usepackage{charter,pxfonts}
+\usepackage[customcolors,shade,markings]{\jobname}
+\usetikzlibrary{calc}
+\usepackage{hypdoc}
+\newcommand{\library}[1]{\textcolor{red!80!black}{\texttt{#1}}}
+\newcommand{\packoption}[2]{\textcolor{blue!60!cyan}{\texttt{#1}} \texttt{(initial:~#2)}}
+\newcommand{\smkey}[1]{\textcolor{blue!60!cyan}{\texttt{#1}}}
+\newcommand{\smoption}[1]{\textcolor{orange!30!red}{\texttt{#1}}}
+\newcommand{\hftikz}{\textsf{hf-tikz}}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{482}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v0.1}{2012/08/17}{Initial version}
+% \changes{v0.1a}{2012/12/18}{Fixed bug \pgfpointorigin}
+% \changes{v0.2}{2013/01/13}{Added norndcorners and warning second run}
+% \changes{v0.3}{2013/03/01}{Key interface and markings option}
+% \changes{v0.3}{2014/07/25}{Documentation}
+%
+% \GetFileInfo{hf-tikz.sty}
+%
+% \title{The \textsf{hf-tikz} package\thanks{This document
+% corresponds to \textsf{hf-tikz}~\fileversion,
+% dated \filedate.}}
+% \author{Claudio Fiandrino\thanks{e-mail: \texttt{claudio dot fiandrino at gmail dot com}}}
+% \maketitle
+% \begin{abstract}
+% This package provides a way to \emph{highlight} formulas in both documents and presentations thanks to Ti\emph{k}Z.
+% The idea originated in \href{http://tex.stackexchange.com/questions/52598/beamer-highlighting-aligned-math-with-overlay}{this question} on \href{http://tex.stackexchange.com}{TeX.StackExchange}
+% and it is based on the \texttt{tikzmark} macro from \href{http://tex.stackexchange.com/users/86/andrew-stacey}{Andrew Stacey} and
+%\href{http://tex.stackexchange.com/users/4301/peter-grill}{Peter Grill}.
+%
+% \end{abstract}
+% \tableofcontents
+%
+% \section{Introduction and requirements}
+% The aim of the package is to provide a simple way to highlight formulas. \hftikz\ is not the first package that tries to accomplish this task, but, despite \href{http://www.ctan.org/pkg/empheq}{empheq}, it provides not only a way to highlight formulas in standard document, but also inside a presentation though Beamer overlay-aware specifications. In addition, with respect to \href{http://www.ctan.org/pkg/empheq}{empheq}, \hftikz\ even allows to highlight just a part of a formula.
+%
+% The package uses Ti\emph{k}Z and it is based on the \texttt{tikzmark} macro from \href{http://tex.stackexchange.com/users/86/andrew-stacey}{Andrew Stacey} and
+%\href{http://tex.stackexchange.com/users/4301/peter-grill}{Peter Grill} (see \href{http://tex.stackexchange.com/questions/51582/background-coloring-with-overlay-specification-in-algorithm2e-beamer-package}{this answer} and \href{http://tex.stackexchange.com/questions/50015/tikzmark-to-have-different-behaviour-if-first-run-and-mark-locations-not-yet-av}{this question}): among the numerous versions present on \href{http://tex.stackexchange.com}{TeX.SX}, the one the package implements is taken from \href{http://tex.stackexchange.com/questions/57537/issues-and-potentiality-of-the-tikzmark-macro-dynamic-box-adaptation#57655}{this answer}. Indeed, as explained later, the concept of \emph{extendible markers} helps a lot in customizing the box dimension.
+%
+% The packages loaded by \hftikz\ are:
+% \begin{itemize}
+% \item Ti\emph{k}Z and the libraries \library{shadings} and \library{decorations.markings} (this library is not always loaded, see subsection \ref{subsec:markings});
+% \item \textsf{xparse};
+% \item \textsf{etoolbox}.
+% \end{itemize}
+%
+%
+% \section{Using the package}
+% \subsection{The basic commands}
+% Formulas can be highlighted by inserting a pair of delimiters before and
+% after the part to be highlighted. Two compilation runs are always necessary: the first one to compute the position of the delimiters (also called markers in this manual) and the second one to actually place the box.
+% \DescribeMacro{\tikzmarkin}^^A
+% The starting delimiter should be introduced with the \cs{tikzmarkin} macro: it may assume a different syntax upon
+% being in \texttt{beamer} mode or not as it will be pointed out in subsection \ref{subsec:beamer}.
+%
+% \DescribeMacro{\tikzmarkend}^^A
+% The end delimiter should be introduced by means of the \cs{tikzmarkend} macro: despite \cs{tikzmarkin},
+% this macro keeps the same syntax in \texttt{beamer} mode too.
+%
+% An example of the basic use is:
+% \begin{verbatim}
+% \[x+\tikzmarkin{a}y\tikzmarkend{a}=400\]
+% \end{verbatim}
+% which produces:
+% \[x+\tikzmarkin{a}y\tikzmarkend{a}=400\]
+%
+% Notice that the delimiter labels, also called \texttt{marker-id}s, should characterize \emph{uniquely} the part highlighted. Reusing the same name more than once will lead to undesired results. Along this documentation there are examples that illustrates some guidelines to provide names consistenly.
+%
+% In presence of fractions, sums, integrals and other operators, the standard command is not appropriate. Consider the following example:
+% \begin{verbatim}
+% \[\tikzmarkin{a-1}x+\dfrac{z}{y}=400\tikzmarkend{a-1}\]
+% \end{verbatim}
+% It leads to:
+% \[\tikzmarkin{a-1}x+\dfrac{z}{y}=400\tikzmarkend{a-1}\]
+% In this case, the user must specify manually which are the \emph{shift-offsets} that delimits the box:
+% \begin{verbatim}
+% \begin{equation}
+% \tikzmarkin{right delim frac}(0.1,-0.4)(-0.1,0.5)
+% x+\dfrac{z}{y}=400
+% \tikzmarkend{right delim frac}
+% \end{equation}
+% \end{verbatim}
+% and this fixes the problem:
+% \begin{equation}
+% \tikzmarkin{right delim frac}(0.1,-0.4)(-0.1,0.5)
+% x+\dfrac{z}{y}=400
+% \tikzmarkend{right delim frac}
+% \end{equation}
+%
+% The \emph{shift-offsets} should be introduced using the following syntax:
+% \begin{verbatim}
+% \tikzmarkin{marker-id}(below right offset)(above left offset)
+% \end{verbatim}
+%
+% The following image explains pretty well the difference between the default setting and the \emph{shift-offsets} used in the previous example:
+% \bigskip
+% \begin{center}
+% \tikzmarkin{r}(0.1,-0.4)(-0.1,0.5)\tikz[baseline=-0.5ex]\node[opacity=0]{\ensuremath{x+\dfrac{z}{y}=400}};\tikzmarkend{r}
+% $
+% \qquad
+% x+\dfrac{z}{y}=400
+% \qquad
+% $
+% \tikzmarkin{f}\tikz[baseline=-0.5ex]\node[opacity=0]{\ensuremath{x+\dfrac{z}{y}=400}};\tikzmarkend{f}
+% \end{center}
+% \begin{tikzpicture}[remember picture,overlay]
+% \foreach \coord in {pic cs:r,pic cs:f}
+% \draw plot[mark=x] coordinates{(\coord)} node[left]{\scriptsize{\texttt{\coord}}};
+%
+% \draw plot[mark=x] coordinates{($(pic cs:r)+(0.1,-0.4)$)} node[below]{\scriptsize{\texttt{(0.1,-0.4)}}};
+% \draw plot[mark=x] coordinates{(r)} node[above]{\scriptsize{\texttt{(-0.1,0.5)}}};
+%
+% \draw plot[mark=x] coordinates{($(pic cs:f)+(0.1,-0.18)$)} node[below]{\scriptsize{\texttt{default setting}}};
+% \draw plot[mark=x] coordinates{(f)} node[above]{\scriptsize{\texttt{default setting}}};
+% \end{tikzpicture}
+%
+% Manual shifts allow to customize the box dimension on the base of user's needs: they should be introduced inside round braces as coordinate points. Coordinates, indeed, provide more degree of freedom from the user's point of view whereas other solutions are more restrictive. Markers, therefore, are \emph{extensible}. Notice that with the aformentioned syntax, it is not possible to use the markers separately, but they should be declared in pair.
+%
+% From version 0.3, it is also possible to exploit a key-based interface to set the \emph{shift-offsets}; for example, the previous example, could have been done as follows:
+% \begin{verbatim}
+% \begin{equation}
+% \tikzmarkin[below right offset={0.1,-0.4},above left offset={-0.1,0.5}]
+% {right delim frac 2}
+% x+\dfrac{z}{y}=400
+% \tikzmarkend{right delim frac 2}
+% \end{equation}
+% \end{verbatim}
+% leads to:
+% \begin{equation}
+% \tikzmarkin[below right offset={0.1,-0.4},above left offset={-0.1,0.5}]{right delim frac 2}
+% x+\dfrac{z}{y}=400
+% \tikzmarkend{right delim frac 2}
+% \end{equation}
+%
+% The list of keys available to customize the \emph{shift-offsets} are:
+% \begin{itemize}
+% \item \packoption{left}{-0.1/-0.075}: this key sets the left offset (the second value is active when the \smoption{fill} option is passed to the package);
+%
+% \item \packoption{right}{0.1/0.075}: this key sets the right offset (the second value is active when the \smoption{fill} option is passed to the package);
+%
+% \item \packoption{above}{0.35}: this key sets the above offset;
+%
+% \item \packoption{below}{-0.18}: this key sets the below offset;
+%
+% \item \packoption{below right}{0.1/0.075,0.35}: this key sets contemporarely the below and the right offsets;
+%
+% \item \packoption{above left}{-0.1/-0.075,0.35}: this key sets contemporarely the above and the left offsets.
+%
+% \end{itemize}
+%
+% All the keys, not only the ones devoted to the \emph{shift-offsets}, should be introduced in the first optional argument only if the \smoption{beamer} option is not loaded. In the other case, the first argument of \verb|\tikzmarkin| concerns the overly-specification definition. Furthermore, the keys provided in the optional argument have a local scope. On the contrary, when they are set by means of \verb|\tikzset{}|, they are applied to the whole document. For example:
+% \begin{verbatim}
+% \tikzset{above left offset={-0.1,0.325},below right offset={0.1,-0.4}}
+% \end{verbatim}
+%
+% \subsection{An advanced example}
+% This example shows how to insert an annotation aligned with a sentence: it requires the \library{calc} library from Ti\emph{k}Z. The colors have been set accordingly to the explanation provided in subsection \ref{subsec:customcolors}.
+% \hfsetfillcolor{red!10}
+% \hfsetbordercolor{red}
+% \begin{equation*}
+% \left.\begin{array}{cc}
+% -2\cdot \tikzmarkin{col}(0.05,-0.3)(-0.05,0.4)2=& -4 \\
+% -2\cdot 1=& -2 \\
+% -2\cdot 0\tikzmarkend{col}=& 0
+% \end{array}\right\} \text{\small Product increases by 2 each time.}
+% \end{equation*}
+
+% \begin{tikzpicture}[remember picture,overlay]
+% \coordinate (col-aa) at ($(col)+(1.825,-1.8)$);
+% \node[align=left,right] at (col-aa) {\small{Annotation}};
+% \path[-stealth,red,draw] (col-aa) -| ($(col)+(0.14,-1.55)$);
+% \end{tikzpicture}
+% \linebreak
+%
+% The code is:
+% \begin{verbatim}
+% \begin{equation*}
+% \left.\begin{array}{cc}
+% -2\cdot \tikzmarkin{col}(0.05,-0.3)(-0.05,0.4)2=& -4 \\
+% -2\cdot 1=& -2 \\
+% -2\cdot 0\tikzmarkend{col}=& 0
+% \end{array}\right\} \text{\small Product increases by 2 each time.}
+% \end{equation*}
+%
+% % To insert the annotation
+% \begin{tikzpicture}[remember picture,overlay]
+% % adjust the shift from "col" to move the position of the annotation
+% \coordinate (col-aa) at ($(col)+(1.825,-1.8)$);
+% \node[align=left,right] at (col-aa) {\small{Annotation}};
+% \path[-stealth,red,draw] (col-aa) -| ($(col)+(0.14,-1.55)$);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Note that when a formula is highlighted, the \texttt{marker-id} can be used to subsequently add elements on the image, i.e. annotations.
+%
+% From the version 0.3, it exists simpler manner to add annotations that requires the option \smoption{markings} to be enabled. Under such an hypothesis, the previous example can be done as follows (the annotation has been put a little bit close to the highlighted area intentionally):
+% \begin{equation*}
+% \left.\begin{array}{cc}
+% -2\cdot \tikzmarkin[mark at=0.93]{col 1}(0.05,-0.2)(-0.05,0.4)2=& -4 \\
+% -2\cdot 1=& -2 \\
+% -2\cdot 0\tikzmarkend{col 1}=& 0
+% \end{array}\right\} \text{\small Product increases by 2 each time.}
+% \end{equation*}
+
+% \begin{tikzpicture}[remember picture,overlay]
+% \coordinate (col-aa) at ($(col 1)+(1.3,-1.8)$);
+% \node[align=left,right] at (col-aa) {\small{Annotation}};
+% \path[-stealth,red,draw,use marker id] (col-aa) -| (0,0);
+% \end{tikzpicture}
+% \linebreak
+%
+% The code:
+% \begin{verbatim}
+% \begin{equation*}
+% \left.\begin{array}{cc}
+% -2\cdot \tikzmarkin[mark at=0.93]{col 1}(0.05,-0.2)(-0.05,0.4)2=& -4 \\
+% -2\cdot 1=& -2 \\
+% -2\cdot 0\tikzmarkend{col 1}=& 0
+% \end{array}\right\} \text{\small Product increases by 2 each time.}
+% \end{equation*}
+
+% \begin{tikzpicture}[remember picture,overlay]
+% \coordinate (col-aa) at ($(col 1)+(1.3,-1.8)$);
+% \node[align=left,right] at (col-aa) {\small{Annotation}};
+% \path[-stealth,red,draw,use marker id] (col-aa) -| (0,0);
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% Thus, it is sufficient to mark the box delimiting the highlighted area with the option \smkey{mark at}. Then, it is possible to access this coordinate by means of \smkey{use marker id}. Further details are provided in subsection \ref{subsec:markings}.
+%
+% \section{The options}
+% \subsection{The \texttt{beamer} mode}\label{subsec:beamer}
+% \DescribeMacro{beamer}^^A
+% The call:
+% \begin{verbatim}
+% \usepackage[beamer]{hf-tikz}
+% \end{verbatim}
+% let the package to enter in \texttt{beamer} mode and the \cs{tikzmarkin} macro becomes \emph{overlay-aware}. As a resutl, overlay specifications can be introduced as first argument. For example:
+% \begin{verbatim}
+% \begin{align}
+% \tikzmarkin<1->{a1}a_i\tikzmarkend{a1} + b_j = 10 \\
+% \tikzmarkin<3>{c}c_j + d_j +
+% \tikzmarkin<2>{b}a_i\tikzmarkend{b}
+% >= 30\tikzmarkend{c}
+% \end{align}
+% \end{verbatim}
+% Here it follows a list of examples in which overlay-specifications can be defined:
+% \begin{itemize}
+% \item a single number: \texttt{<1>};
+% \item multiple numbers separated by commas and delimited by braces: \texttt{<\{1,2,3\}>};
+% \item a single number followed by a dash: \texttt{<1->}.
+% \end{itemize}
+%
+% \subsection{Customize colors}\label{subsec:customcolors}
+% \DescribeMacro{customcolors}^^A
+% This option allows to customize both the fill and the border color. While using this option, two commands become available:
+% \begin{itemize}
+% \item \cs{hfsetfillcolor}
+% \item \cs{hfsetbordercolor}
+% \end{itemize}
+% These commands can be used at any time in the document. For example:
+% \begin{verbatim}
+% \hfsetfillcolor{red!10}
+% \hfsetbordercolor{red}
+% \[
+% \tikzmarkin{z}(0.2,-0.4)(-0.2,0.6)
+% \dfrac{100}{x}
+% \tikzmarkend{z}
+% \]
+% \end{verbatim}
+% produces:
+% \hfsetfillcolor{red!10}
+% \hfsetbordercolor{red}
+% \[\tikzmarkin{z}(0.2,-0.4)(-0.2,0.6)\dfrac{100}{x}\tikzmarkend{z}\]
+% Then:
+% \begin{verbatim}
+% \hfsetfillcolor{blue!10}
+% \hfsetbordercolor{blue}
+% \[\tikzmarkin{z1}x+y=400\tikzmarkend{z1}\]
+% \end{verbatim}
+% gives:
+% \hfsetfillcolor{blue!10}
+% \hfsetbordercolor{blue}
+% \[\tikzmarkin{z1}x+y=400\tikzmarkend{z1}\]
+%
+% From the version 0.3, it is also possible to customize the fill and the border color by means of the following keys:
+% \begin{itemize}
+% \item \packoption{set fill color}{fancybrown}: this key sets the fill color;
+% \item \packoption{set border color}{fancyviolet}: this key sets the border color.
+% \end{itemize}
+%
+% An example:
+% \begin{verbatim}
+% \[
+% \tikzmarkin[set fill color=green!50!lime!30,
+% set border color=green!40!black]{z-a}(0.2,-0.4)(-0.2,0.6)
+% \dfrac{100}{x}
+% \tikzmarkend{z-a}
+% \]
+% \end{verbatim}
+% The result:
+% \[\tikzmarkin[set fill color=green!50!lime!30,set border color=green!40!black]{z-a}(0.2,-0.4)(-0.2,0.6)\dfrac{100}{x}\tikzmarkend{z-a}\]
+%
+% Notice that:
+% \begin{itemize}
+% \item the color definition can also be done via \cs{tikzset}; in this case its application is global in the document
+% \begin{verbatim}
+% \tikzset{set fill color=orange!30,set border color=orange}
+% \end{verbatim}
+% \item global definitions defined via \cs{tikzset} or \cs{hfsetfillcolor} and \cs{hfsetbordercolor} can always be overridden by local ones; that is:
+% \end{itemize}
+% \begin{verbatim}
+% \tikzset{set fill color=orange!30,set border color=orange}
+% \[
+% \tikzmarkin[set fill color=green!50!lime!30,
+% set border color=green!40!black]{label}(0.2,-0.4)(-0.2,0.6)
+% \dfrac{100}{x}
+% \tikzmarkend{z-a}
+% \]
+% \end{verbatim}
+% still gives:
+% \tikzset{set fill color=orange!30,set border color=orange}
+% \[
+% \tikzmarkin[set fill color=green!50!lime!30,set border color=green!40!black]{lab}(0.2,-0.4)(-0.2,0.6)
+% \dfrac{100}{x}
+% \tikzmarkend{lab}
+% \]
+%
+% \subsection{Using shadings}
+% \DescribeMacro{shade}^^A
+% \hfsetfillcolor{blue!10}
+% \hfsetbordercolor{blue}
+% The option \smoption{shade} activates the possibility of introducing shaded backgrounds besides any fill color definition currently set up. Available shadings are:
+% \begin{itemize}
+% \item vertical shading;
+% \item horizontal shading;
+% \item radial shading.
+% \end{itemize}
+%
+% \subsubsection*{Example with vertical shading}
+% Code:
+% \begin{verbatim}
+% \[
+% \tikzmarkin[top color=white, bottom color=blue!20]{vshade}
+% x+y=400
+% \tikzmarkend{vshade}
+% \]
+% \end{verbatim}
+% Result:
+% \[\tikzmarkin[top color=white, bottom color=blue!20]{vshade}x+y=400\tikzmarkend{vshade}\]
+%
+% \subsubsection*{Example with horizontal shading}
+% Code:
+% \begin{verbatim}
+% \[
+% \tikzmarkin[left color=white, right color=blue!20]{hoshade}
+% x+y=400
+% \tikzmarkend{hoshade}
+% \]
+% \end{verbatim}
+% Result:
+% \[\tikzmarkin[left color=white, right color=blue!20]{hoshade}x+y=400\tikzmarkend{hoshade}\]
+%
+% % \subsubsection*{Example with radial shading}
+% Code:
+% \begin{verbatim}
+% \[
+% \tikzmarkin[outer color=white, inner color=blue!20]{rshade}
+% x+y=400
+% \tikzmarkend{rshade}
+% \]
+% \end{verbatim}
+% Result:
+% \[\tikzmarkin[outer color=white, inner color=blue!20]{rshade}x+y=400\tikzmarkend{rshade}\]
+%
+% \subsection{Avoiding the background color}
+% \DescribeMacro{nofill}^^A
+% Using the \smoption{nofill} option allows very simply to not introduce the background color.
+% When the option is active, you can not change this behaviour inside the document. Another way to remove the background color, is to set the fill color by means of \cs{hfsetfillcolor} to be of the same color of the page.
+% \subsection{Disable rounded corners}
+% \DescribeMacro{norndcorners}^^A
+% To disable the rounded corners, it exists two ways actually. The first one, which is a global approach, is the option \smoption{norndcorners}: as any of the other package options, it should be provided during the package load.
+%
+% It exists a second way that disables the rounded corners only locally; this approach needs the \smkey{disable rounded corners} key to be set to \verb|true|.
+%
+% For example:
+% \begin{verbatim}
+% \[
+% \tikzmarkin[disable rounded corners=true]{mark 1}
+% x+y=400
+% \tikzmarkend{mark 1}
+% \]
+% \end{verbatim}
+% The result:
+% \[\tikzmarkin[disable rounded corners=true]{mark 1}x+y=400\tikzmarkend{mark 1}\]
+%
+% \subsection{The \texttt{markings} option}\label{subsec:markings}
+% \DescribeMacro{markings}^^A
+% Loading the package with the \smoption{markings} option allows to mark positions on the box delimiting the highlighted area. This can be achieved by setting the key \smkey{mark at}\verb|=<pos>| where \verb|<pos>=[0,1]|; the positions can be later accessed with the key \smkey{use marker id}\verb|=<id-num>| where \verb|<id-num>| is the progressive identifier of the positions previously marked.
+%
+% For example:
+% \tikzset{set fill color=orange!30,set border color=orange}
+% \[
+% \tikzmarkin[show markers,mark at=0,]{marker 1}
+% x+y=400
+% \tikzmarkend{marker 1}
+% \tikz[remember picture,overlay]{
+% \draw[use marker id,blue,xscale=-1](0,0)arc(270:90:1.5mm);
+% }
+% \]
+% is realized by means of:
+% \begin{verbatim}
+% \tikzset{set fill color=orange!30,set border color=orange}
+% \[
+% \tikzmarkin[show markers,mark at=0,]{marker 1}
+% x+y=400
+% \tikzmarkend{marker 1}
+% \tikz[remember picture,overlay]{
+% \draw[use marker id,blue,xscale=-1](0,0)arc(270:90:1.5mm);
+% }
+% \]
+% \end{verbatim}
+%
+% Actually, it is possible to mark more than one point:
+% \[
+% \tikzmarkin[show markers,mark at=0,mark at=0.55]{marker 2}
+% x+y=400
+% \tikzmarkend{marker 2}
+% \tikz[remember picture,overlay]\draw[use marker id=1,blue,xscale=-1](0,0)arc(270:90:1.5mm);
+% \tikz[remember picture,overlay]\draw[use marker id=2,blue](0,0)arc(270:90:1.5mm);
+% \]
+% by referring them in the same order in which they have been marked:
+% \begin{verbatim}
+% \[
+% \tikzmarkin[show markers,mark at=0,mark at=0.55]{marker 2}
+% x+y=400
+% \tikzmarkend{marker 2}
+% \tikz[remember picture,overlay]{
+% \draw[use marker id=1,blue,xscale=-1](0,0)arc(270:90:1.5mm);
+% }
+% \tikz[remember picture,overlay]{
+% \draw[use marker id=2,blue](0,0)arc(270:90:1.5mm);
+% }
+% \]
+% \end{verbatim}
+%
+% The markers can become visible when the \smkey{show markers} key is activated. By default, they are invisible, but during the working process it may be useful to know their location. In addition, the markers can be customized:
+% \begin{itemize}
+% \item \packoption{marker size}{1pt}: this key sets the radius of the marker;
+% \item \packoption{marker color}{blue}: this key sets the color of the marker.
+% \end{itemize}
+%
+% The options necessitates of the \library{decorations.markings} of Ti\textit{k}Z: this library, however, is not always loaded, but just in case the \hftikz\ \smoption{markings} option is active.
+%
+% \section{Efficient use of Ti\textit{k}Z styles}
+% Ti\textit{k}Z are very powerful and their use is recommended also with \hftikz. For example, an intelligent way to proceed if two different highlighting colors have to be used is as follows:
+%\begin{verbatim}
+%\tikzset{offset definition/.style={
+% above left offset={-0.1,0.6},
+% below right offset={0.1,-0.45},
+% },
+% h1/.style={
+% offset definition,
+% set fill color=green!50!lime!60,
+% set border color=green!40!black,
+% },
+% h2/.style={
+% offset definition,
+% set fill color=blue!20!cyan!60,
+% set border color=blue!60!cyan,
+% }
+%}
+%\end{verbatim}
+%\tikzset{offset definition/.style={
+% above left offset={-0.1,0.6},
+% below right offset={0.1,-0.45},
+% },
+% h1/.style={
+% offset definition,
+% set fill color=green!50!lime!60,
+% set border color=green!40!black,
+% },
+% h2/.style={
+% offset definition,
+% set fill color=blue!20!cyan!60,
+% set border color=blue!60!cyan,
+% }
+%}
+% Their use in the document is:
+% \begin{verbatim}
+% \[\tikzmarkin[h1]{st-a}x + \dfrac{y}{z} = 400\tikzmarkend{st-a}\]
+% \[\tikzmarkin[h2]{st-b}x + \dfrac{y}{z} = 400\tikzmarkend{st-b}\]
+% \end{verbatim}
+% which gives as result:
+% \[\tikzmarkin[h1]{st-a}x + \dfrac{y}{z} = 400\tikzmarkend{st-a}\]
+% and
+% \[\tikzmarkin[h2]{st-b}x + \dfrac{y}{z} = 400\tikzmarkend{st-b}\]
+%
+% \StopEventually{\PrintChanges}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \begin{macrocode}
+\RequirePackage{tikz}
+\usetikzlibrary{shadings}
+\RequirePackage{xparse}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+%
+% This warning is arised after the first compilation run to inform that a second run is necessary for the final result. The code
+% has been inspired by \href{http://tex.stackexchange.com/a/82072/13304}{this answer on TeX.SX}.
+%
+% \begin{macrocode}
+\AtEndDocument{%
+\let\oldpgfsyspdfmark\pgfsyspdfmark
+\def\pgfsyspdfmark#1#2#3{%
+ \expandafter\let\expandafter\tmp\csname pgf@sys@pdf@mark@pos@#1\endcsname
+ \oldpgfsyspdfmark{#1}{#2}{#3}%
+ \expandafter\ifx\csname pgf@sys@pdf@mark@pos@#1\endcsname\tmp\else
+ \let\oldsavepointas\savepointas
+ \def\savepointas##1##2{%
+ \immediate\write\@auxout{hf-TikZ Warning: Mark '##1' changed. Rerun to get mark in right position.}%
+ }
+ \fi
+}}
+% \end{macrocode}
+%
+% \subsection{Options definition}
+% This subsection is devoted to define options and default colors.
+%
+% \begin{macrocode}
+%% Colors
+
+% Pre-defined colors
+\definecolor{fancybrown}{RGB}{255,216,197}
+\definecolor{fancyviolet}{RGB}{197,122,197}
+
+\newcommand{\fcol}{fancybrown}
+\newcommand{\bcol}{fancyviolet}
+
+%% Package option
+
+\newbool{fill}
+\booltrue{fill}
+\DeclareOption{nofill}{\boolfalse{fill}}
+
+\DeclareOption{customcolors}{
+\def\hfsetfillcolor#1{\renewcommand{\fcol}{#1}}
+\def\hfsetbordercolor#1{\renewcommand{\bcol}{#1}}
+\pgfkeys{/tikz/.cd,
+ set fill color/.code={\renewcommand{\fcol}{#1}},
+ set border color/.code={\renewcommand{\bcol}{#1}}
+ }
+}
+
+\newbool{shade}
+\boolfalse{shade}
+\DeclareOption{shade}{\booltrue{shade}}
+
+\newbool{beamer}
+\boolfalse{beamer}
+\DeclareOption{beamer}{\booltrue{beamer}}
+
+\newbool{norndcorners}
+\boolfalse{norndcorners}
+\DeclareOption{norndcorners}{\booltrue{norndcorners}}
+
+\newbool{markings}
+\boolfalse{markings}
+\DeclareOption{markings}{\booltrue{markings}}
+
+\ProcessOptions
+% \end{macrocode}
+%
+% It follows the definition of the keys devoted to disable the rounded corners.
+%
+% \begin{macrocode}
+\pgfkeys{/tikz/.cd,%
+ not use rounded corners/.is choice,%
+ not use rounded corners/true/.style={rounded corners=0pt},%
+ not use rounded corners/false/.style={rounded corners},%
+}%
+
+\tikzset{disable rounded corners/.estyle={%
+ not use rounded corners=#1,%
+ },%
+ disable rounded corners/.default=false,%
+}%
+
+% \end{macrocode}
+%
+% Offsets keys' definition: for compatibility reasons, the initial values change according to the presence of the \smoption{fill} option.
+%
+% \begin{macrocode}
+
+\ifbool{fill}{%
+ \pgfkeys{/tikz/.cd,%
+ left offset/.initial=-0.1,
+ right offset/.initial=0.1,
+ above offset/.initial=0.35,
+ below offset/.initial=-0.18,
+ }
+}{
+ \pgfkeys{/tikz/.cd,%
+ left offset/.initial=-0.075,
+ right offset/.initial=0.075,
+ above offset/.initial=0.35,
+ below offset/.initial=-0.18,
+ }
+}
+
+
+\pgfkeys{/tikz/.cd,%
+ left offset/.get=\leftoff,
+ left offset/.store in=\leftoff,
+ right offset/.get=\rightoff,
+ right offset/.store in=\rightoff,
+ above offset/.get=\aboveoff,
+ above offset/.store in=\aboveoff,
+ below offset/.get=\belowoff,
+ below offset/.store in=\belowoff,
+ below right offset/.initial={\rightoff,\belowoff},
+ below right offset/.get=\belowrightoff,
+ below right offset/.store in=\belowrightoff,
+ above left offset/.initial={\leftoff,\aboveoff},
+ above left offset/.get=\aboveleftoff,
+ above left offset/.store in=\aboveleftoff,
+}%
+% \end{macrocode}
+%
+% Keys and style definition of the markings: they are activated when the \smoption{markings} option is present. This is a feature request from Bodo Manthey and the implementation has been inspired by Jake's \href{http://tex.stackexchange.com/a/25940/13304}{answer on TeX.SX}: thanks to both.
+%
+% \begin{macrocode}
+\ifbool{markings}{
+ \usetikzlibrary{decorations.markings}
+ \newif\ifshowmarkers
+ \pgfkeys{/tikz/show markers/.is if=showmarkers}
+ \pgfkeys{/tikz/show markers=false}
+
+ \pgfkeys{/tikz/.cd,%
+ marker color/.initial=blue,
+ marker color/.get=\colmarker,
+ marker color/.store in=\colmarker,
+ marker size/.initial=1pt,
+ marker size/.get=\sizemarker,
+ marker size/.store in=\sizemarker,
+ }
+
+ \tikzset{
+ mark at/.style={
+ decoration={
+ markings,
+ mark=
+ at position #1
+ with
+ {
+ \coordinate (marker point-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
+ \coordinate (marker unit vector-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
+ \coordinate (marker orthogonal unit vector-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
+ \ifshowmarkers% conditional to make them appear just when invoked
+ \draw[draw=none,fill=\colmarker,radius=\sizemarker] (0,0) circle ;
+ \else
+ \relax
+ \fi
+ }
+ },
+ postaction=decorate
+ },
+ use marker id/.style={
+ shift=(marker point-#1),
+ x=(marker unit vector-#1),
+ y=(marker orthogonal unit vector-#1)
+ },
+ use marker id/.default=1,
+ }
+}
+% \end{macrocode}
+% \subsection{General settings}
+% This subsection is devoted to illustrate the code used for defining the settings used by the highlighting commands.
+% \begin{macrocode}
+%% Settings
+
+\ifbool{beamer}{%true
+ \newcounter{jumping}
+ \resetcounteronoverlays{jumping}
+
+ \def\jump@setbb#1#2#3{%
+ \@ifundefined{jump@#1@maxbb}{%
+ \expandafter\gdef\csname jump@#1@maxbb\endcsname{#3}%
+ }{%
+ \csname jump@#1@maxbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ #3
+ \pgfmathsetlength\pgf@x{max(\pgf@x,\pgf@xa)}%
+ \pgfmathsetlength\pgf@y{max(\pgf@y,\pgf@ya)}%
+ \expandafter\xdef\csname jump@#1@maxbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ }
+ \@ifundefined{jump@#1@minbb}{%
+ \expandafter\gdef\csname jump@#1@minbb\endcsname{#2}%
+ }{%
+ \csname jump@#1@minbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ #2
+ \pgfmathsetlength\pgf@x{min(\pgf@x,\pgf@xa)}%
+ \pgfmathsetlength\pgf@y{min(\pgf@y,\pgf@ya)}%
+ \expandafter\xdef\csname jump@#1@minbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ }
+ }
+
+ \tikzset{%
+ remember picture with id/.style={%
+ remember picture,
+ overlay,
+ save picture id=#1,
+ },
+ save picture id/.code={%
+ \edef\pgf@temp{#1}%
+ \immediate\write\pgfutil@auxout{%
+ \noexpand\savepointas{\pgf@temp}{\pgfpictureid}}%
+ },
+ if picture id/.code args={#1#2#3}{%
+ \@ifundefined{save@pt@#1}{%
+ \pgfkeysalso{#3}%
+ }{
+ \pgfkeysalso{#2}%
+ }
+ },
+ onslide/.code args={<#1>#2}{%
+ \only<#1>{\pgfkeysalso{#2}}%
+ },
+ alt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}%
+ },
+ stop jumping/.style={
+ execute at end picture={%
+ \stepcounter{jumping}%
+ \immediate\write\pgfutil@auxout{%
+ \noexpand\jump@setbb{\the\value{jumping}}{\noexpand\pgfpoint{\the\pgf@picminx}{\the\pgf@picminy}}{\noexpand\pgfpoint{\the\pgf@picmaxx}{\the\pgf@picmaxy}}
+ },
+ \csname jump@\the\value{jumping}@maxbb\endcsname
+ \path (\the\pgf@x,\the\pgf@y);
+ \csname jump@\the\value{jumping}@minbb\endcsname
+ \path (\the\pgf@x,\the\pgf@y);
+ },
+ }
+ }
+}{% false
+ \tikzset{%
+ remember picture with id/.style={%
+ remember picture,
+ overlay,
+ save picture id=#1,
+ },
+ save picture id/.code={%
+ \edef\pgf@temp{#1}%
+ \immediate\write\pgfutil@auxout{%
+ \noexpand\savepointas{\pgf@temp}{\pgfpictureid}}%
+ },
+ if picture id/.code args={#1#2#3}{%
+ \@ifundefined{save@pt@#1}{%
+ \pgfkeysalso{#3}%
+ }{
+ \pgfkeysalso{#2}%
+ }
+ }
+ }
+}
+
+\def\savepointas#1#2{%
+ \expandafter\gdef\csname save@pt@#1\endcsname{#2}%
+}
+
+\def\tmk@labeldef#1,#2\@nil{%
+ \def\tmk@label{#1}%
+ \def\tmk@def{#2}%
+}
+
+\tikzdeclarecoordinatesystem{pic}{%
+ \pgfutil@in@,{#1}%
+ \ifpgfutil@in@%
+ \tmk@labeldef#1\@nil
+ \else
+ \tmk@labeldef#1,(0pt,0pt)\@nil
+ \fi
+ \@ifundefined{save@pt@\tmk@label}{%
+ \tikz@scan@one@point\pgfutil@firstofone\tmk@def
+ }{%
+ \pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}\save@orig@pic%
+ \pgfsys@getposition{\pgfpictureid}\save@this@pic%
+ \pgf@process{\pgfpointorigin\save@this@pic}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{\pgfpointorigin\save@orig@pic}%
+ \advance\pgf@x by -\pgf@xa
+ \advance\pgf@y by -\pgf@ya
+ }%
+}
+% \end{macrocode}
+% \subsection{The highlighting commands}
+% In this subsection the definitions of the highlighing commands are shown when the \texttt{beamer} mode is active and when it is not. Thanks to \textsf{etoolbox} it is possible to perform a check on the active options. Then the commands are declared.
+% \begin{macrocode}
+\ifbool{norndcorners}{%true-norndcorners
+ \ifbool{beamer}{%true-beamer
+ \ifbool{fill}{%true-fill
+ \ifbool{shade}{%true-shade
+ \NewDocumentCommand{\tikzmarkin}{r<> o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#2}{%true-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}
+ }{%false-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol,#2]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}}
+ }
+ }{%false-shade
+ \NewDocumentCommand{\tikzmarkin}{r<> o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#2}{%true-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}
+ }{%false-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol,#2]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}}
+ }
+ }
+ }{%false-fill
+ \NewDocumentCommand{\tikzmarkin}{r<> o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#2}{%true-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,draw=\bcol]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}
+ }{%false-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,draw=\bcol,#2]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}}
+ }
+ }
+ }{%false-beamer
+ \ifbool{fill}{%true-fill
+ \ifbool{shade}{%true-shade
+ \NewDocumentCommand{\tikzmarkin}{o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#1}{%true-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;
+ }{%false-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol,#1]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;}}
+ }{%false-shade
+ \NewDocumentCommand{\tikzmarkin}{o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#1}{%true-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;
+ }{%false-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,fill=\fcol,draw=\bcol,#1]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;}}
+ }
+ }{%false-fill
+ \NewDocumentCommand{\tikzmarkin}{o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#1}{%true-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,draw=\bcol]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;
+ }{%false-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,draw=\bcol,#1]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;}}
+% \NewDocumentCommand{\tikzmarkin}{m D(){0.075,-0.18} D(){-0.075,0.35}}{%
+% \tikz[remember picture,overlay]
+% \draw[line width=1pt,rectangle,draw=\bcol]
+% (pic cs:#1) ++(#2) rectangle (#3) node [anchor=base] (#1){}
+% ;}
+ }
+ }
+}{%false-norndcorners
+ \ifbool{beamer}{%true-beamer
+ \ifbool{fill}{%true-fill
+ \ifbool{shade}{%true-shade
+ \NewDocumentCommand{\tikzmarkin}{r<> o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#2}{%true-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}
+ }{%false-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol,#2]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}}
+ }
+ }{%false-shade
+ \NewDocumentCommand{\tikzmarkin}{r<> o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#2}{%true-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}
+ }{%false-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol,#2]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}}
+ }
+ }
+ }{%false-fill
+ \NewDocumentCommand{\tikzmarkin}{r<> o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#2}{%true-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,draw=\bcol]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}
+ }{%false-val
+ \only<#1>{\tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,draw=\bcol,#2]
+ (pic cs:#3) ++(#4) rectangle (#5) node [anchor=base] (#3){}
+ ;}}
+ }
+ }
+ }{%false-beamer
+ \ifbool{fill}{%true-fill
+ \ifbool{shade}{%true-shade
+ \NewDocumentCommand{\tikzmarkin}{o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#1}{%true-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;
+ }{%false-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol,#1]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;}}
+ }{%false-shade
+ \NewDocumentCommand{\tikzmarkin}{o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#1}{%true-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;
+ }{%false-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,fill=\fcol,draw=\bcol,#1]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;}}
+ }
+ }{%false-fill
+ \NewDocumentCommand{\tikzmarkin}{o m D(){\belowrightoff} D(){\aboveleftoff}}{%
+ \IfNoValueTF{#1}{%true-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,draw=\bcol]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;
+ }{%false-val
+ \tikz[remember picture,overlay]
+ \draw[line width=1pt,rectangle,disable rounded corners,draw=\bcol,#1]
+ (pic cs:#2) ++(#3) rectangle (#4) node [anchor=base] (#2){}
+ ;}}
+ }
+ }
+}
+
+\newcommand\tikzmarkend[2][]{%
+\tikz[remember picture with id=#2] #1;}
+% \end{macrocode}
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
diff --git a/graphics/pgf/contrib/hf-tikz/hf-tikz.ins b/graphics/pgf/contrib/hf-tikz/hf-tikz.ins
new file mode 100644
index 0000000000..0d60ee6aa4
--- /dev/null
+++ b/graphics/pgf/contrib/hf-tikz/hf-tikz.ins
@@ -0,0 +1,76 @@
+%%
+%% This is file `hf-tikz.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% hf-tikz.dtx (with options: `install')
+%% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%% * hf-tikz --- A simple way to highlight formulas and formula parts.
+%% *
+%% * E-mail: claudio dot fiandrino at gmail dot com
+%% *
+%% * Released under the LaTeX Project Public License v1.3c or later
+%% *
+%% * See http://www.latex-project.org/lppl.txt
+%% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* hf-tikz --- A simple way to highlight formulas and formula parts.
+*
+* E-mail: claudio dot fiandrino at gmail dot com
+*
+* Released under the LaTeX Project Public License v1.3c or later
+*
+* See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+\endpreamble
+\postamble
+
+Copyright (C) 2012-2014 by Claudio Fiandrino <claudio.fiandrino@gmail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Claudio Fiandrino.
+
+This work consists of the file hf-tikz.dtx
+and the derived files hf-tikz.ins and
+ hf-tikz.pdf
+ hf-tikz.sty.
+\endpostamble
+\usedir{tex/latex/hf-tikz}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\endbatchfile
+
+
+
+%%
+%% Copyright (C) 2012-2014 by Claudio Fiandrino <claudio.fiandrino@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Claudio Fiandrino.
+%%
+%% This work consists of the file hf-tikz.dtx
+%% and the derived files hf-tikz.ins and
+%% hf-tikz.pdf
+%% hf-tikz.sty.
+%%
+%% End of file `hf-tikz.ins'.
diff --git a/graphics/pgf/contrib/hf-tikz/hf-tikz.pdf b/graphics/pgf/contrib/hf-tikz/hf-tikz.pdf
new file mode 100644
index 0000000000..9df3f8fa05
--- /dev/null
+++ b/graphics/pgf/contrib/hf-tikz/hf-tikz.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/hobby/README.txt b/graphics/pgf/contrib/hobby/README.txt
new file mode 100644
index 0000000000..04af0731d6
--- /dev/null
+++ b/graphics/pgf/contrib/hobby/README.txt
@@ -0,0 +1,14 @@
+----------------------------------------------------------------
+hobby --- a TikZ/PGF library for drawing smooth(ish) curves using
+ Hobby's algorithm (implemented in LaTeX3)
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package defines a path generation function for TikZ/PGF
+which implements Hobby's algorithm for a path built out of Bezier
+curves which passes through a given set of points.
+
+The implementation is in LaTeX3. It can be used as as a TikZ
+`to path`.
diff --git a/graphics/pgf/contrib/hobby/hobby.dtx b/graphics/pgf/contrib/hobby/hobby.dtx
new file mode 100644
index 0000000000..d555a5b2f3
--- /dev/null
+++ b/graphics/pgf/contrib/hobby/hobby.dtx
@@ -0,0 +1,3500 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+hobby --- a TikZ/PGF library for drawing smooth(ish) curves using
+ Hobby's algorithm (implemented in LaTeX3)
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package defines a path generation function for TikZ/PGF
+which implements Hobby's algorithm for a path built out of Bezier
+curves which passes through a given set of points.
+
+The implementation is in LaTeX3. It can be used as as a TikZ
+`to path`.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+hobby --- a TikZ/PGF library for drawing smooth(ish) curves using
+ Hobby's algorithm (implemented in LaTeX3)
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2012 by Andrew Stacey <loopspace@mathforge.org>
+
+This file may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version.
+The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work is "maintained" (as per LPPL maintenance status) by
+Andrew Stacey.
+
+This work consists of the files hobby.dtx
+ hobby_doc.tex
+and the derived files hobby.code.tex
+ pgflibraryhobby.code.tex
+ tikzlibraryhobby.code.tex
+ pml3array.sty
+ hobby.ins
+ hobby.pdf
+ hobby_code.pdf
+ README.txt
+
+\endpostamble
+\usedir{tex/latex/hobby}
+\generate{\file{tikzlibraryhobby.code.tex} {\from{hobby.dtx}{tikzlibrary}}}
+\generate{\file{pgflibraryhobby.code.tex} {\from{hobby.dtx}{pgflibrary}}}
+\generate{\file{hobby.code.tex}
+{\from{hobby.dtx}{hobby}}}
+\generate{\file{pml3array.sty}
+{\from{hobby.dtx}{array}}}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/hobby}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage[T1]{fontenc}
+\usepackage{csquotes}
+\usepackage{lmodern}
+\usepackage{tikz}
+\usepackage{amsmath}
+\usetikzlibrary{hobby,decorations.pathreplacing}
+\usepackage[margin=3cm]{geometry}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\addtolength{\hoffset}{.4in}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{3382}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \title{The \textsf{Hobby} package: code}
+% \author{Andrew Stacey \\ \url{loopspace@mathforge.org}}
+% \date{\hobbyVersion\ from\ \hobbyDate}
+% \maketitle
+%
+%
+% \StopEventually{\PrintChanges}
+% \section{Implementation}
+%
+% \subsection{Main Code}
+%
+% \iffalse
+%<*hobby>
+% \fi
+%
+% We use \LaTeX3 syntax so need to load the requisite packages
+% \begin{macrocode}
+\RequirePackage{expl3}
+\RequirePackage{xparse}
+\RequirePackage{pml3array}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \fp_set:Nn {Nx}
+\cs_generate_variant:Nn \tl_if_eq:nnTF {VnTF}
+\cs_generate_variant:Nn \tl_if_eq:nnTF {xnTF}
+% \end{macrocode}
+%
+% \subsubsection{Initialisation}
+%
+% We declare all our variables.
+%
+% Start with version and date, together with a check to see if we've been loaded twice (fail gracefully if so).
+%
+% \begin{macrocode}
+\tl_clear:N \l_tmpa_tl
+\tl_if_exist:NT \g__hobby_version
+{
+ \tl_set:Nn \l_tmpa_tl {
+ \ExplSyntaxOff
+ \tl_clear:N \l_tmpa_tl
+ \endinput
+ }
+}
+\tl_use:N \l_tmpa_tl
+
+\tl_new:N \g__hobby_version
+\tl_new:N \g__hobby_date
+\tl_set:Nn \g__hobby_version {1.8}
+\tl_set:Nn \g__hobby_date {2017-06-01}
+\DeclareDocumentCommand \hobbyVersion {}
+{
+ \tl_use:N \g__hobby_version
+}
+\DeclareDocumentCommand \hobbyDate {}
+{
+ \tl_use:N \g__hobby_date
+}
+% \end{macrocode}
+%
+% The function for computing the lengths of the control points depends on three parameters.
+% These are set to \(a = \sqrt{2}\), \(b = 1/16\), and \(c = \frac{3 - \sqrt{5}}{2}\).
+% \begin{macrocode}
+\fp_new:N \g_hobby_parama_fp
+\fp_new:N \g_hobby_paramb_fp
+\fp_new:N \g_hobby_paramc_fp
+\fp_gset:Nn \g_hobby_parama_fp {2^.5}
+\fp_gset:Nn \g_hobby_paramb_fp {1/16}
+\fp_gset:Nn \g_hobby_paramc_fp {(3-5^.5)/2}
+% \end{macrocode}
+%
+% Now we define our objects for use in generating the path.
+%
+% \begin{macro}{\l_hobby_closed_bool}
+% \Verb+\l_hobby_closed_bool+ is \Verb+true+ if the path is closed.
+% \begin{macrocode}
+\bool_new:N \l_hobby_closed_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_disjoint_bool}
+% \Verb+\l_hobby_disjoint_bool+ is \Verb+true+ if the path should start with a \Verb+moveto+ command.
+% \begin{macrocode}
+\bool_new:N \l_hobby_disjoint_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_save_aux_bool}
+% \Verb+\l_hobby_save_aux_bool+ is \Verb+true+ if when saving paths then they should be saved to the \Verb+aux+ file.
+% \begin{macrocode}
+\bool_new:N \l_hobby_save_aux_bool
+\bool_set_true:N \l_hobby_save_aux_bool
+\DeclareDocumentCommand \HobbyDisableAux {}
+{
+ \bool_set_false:N \l_hobby_save_aux_bool
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_points_array}
+% \Verb+\l_hobby_points_array+ is an array holding the specified points on the path.
+% In the \LaTeX3 code, a ``point'' is a token list of the form \Verb+x = <number>, y = <number>+.
+% This gives us the greatest flexibility in passing points back and forth between the \LaTeX3 code and any calling code.
+% The array is indexed by integers beginning with \(0\).
+% In the documentation, we will use the notation \(z_k\) to refer to the \(k\)th point.
+% \begin{macrocode}
+\array_new:N \l_hobby_points_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_points_x_array}
+% \Verb+\l_hobby_points_x_array+ is an array holding the \(x\)--{}coordinates of the specified points.
+% \begin{macrocode}
+\array_new:N \l_hobby_points_x_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_points_y_array}
+% \Verb+\l_hobby_points_y_array+ is an array holding the \(y\)--{}coordinates of the specified points.
+% \begin{macrocode}
+\array_new:N \l_hobby_points_y_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_actions_array}
+% \Verb+\l_hobby_actions_array+ is an array holding the (encoded) action to be taken out on the segment of the path ending at that point.
+% \begin{macrocode}
+\array_new:N \l_hobby_actions_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_angles_array}
+% \Verb+\l_hobby_angles_array+ is an array holding the angles of the lines between the points.
+% Specifically, the angle indexed by \(k\) is the angle in radians of the line from \(z_k\) to \(z_{k+1}\).
+% \begin{macrocode}
+\array_new:N \l_hobby_angles_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_distances_array}
+% \Verb+\l_hobby_distances_array+ is an array holding the distances between the points.
+% Specifically, the distance indexed by \(k\), which we will write as \(d_k\), is the length of the line from \(z_k\) to \(z_{k+1}\).
+% \begin{macrocode}
+\array_new:N \l_hobby_distances_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_tension_out_array}
+% \Verb+\l_hobby_tension_out_array+ is an array holding the tension for the path as it leaves each point.
+% This is a parameter that controls how much the curve ``flexes'' as it leaves the point.
+% In the following, this will be written \(\tau_k\).
+% \begin{macrocode}
+\array_new:N \l_hobby_tension_out_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_tension_in_array}
+% \Verb+\l_hobby_tension_in_array+ is an array holding the tension for the path as it arrives at each point.
+% This is a parameter that controls how much the curve ``flexes'' as it gets to the point.
+% In the following, this will be written \(\overline{\tau}_k\).
+% \begin{macrocode}
+\array_new:N \l_hobby_tension_in_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_matrix_a_array}
+% \Verb+\l_hobby_matrix_a_array+ is an array holding the subdiagonal of the linear system that has to be solved to find the angles of the control points.
+% In the following, this will be denoted by \(A_i\).
+% The first index is \(1\).
+% \begin{macrocode}
+\array_new:N \l_hobby_matrix_a_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_matrix_b_array}
+% \Verb+\l_hobby_matrix_b_array+ is an array holding the diagonal of the linear system that has to be solved to find the angles of the control points.
+% In the following, this will be denoted by \(B_i\).
+% The first index is \(0\).
+% \begin{macrocode}
+\array_new:N \l_hobby_matrix_b_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_matrix_c_array}
+% \Verb+\l_hobby_matrix_c_array+ is an array holding the superdiagonal of the linear system that has to be solved to find the angles of the control points.
+% In the following, this will be denoted by \(C_i\).
+% The first index is \(0\).
+% \begin{macrocode}
+\array_new:N \l_hobby_matrix_c_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_matrix_d_array}
+% \Verb+\l_hobby_matrix_d_array+ is an array holding the target vector of the linear system that has to be solved to find the angles of the control points.
+% In the following, this will be denoted by \(D_i\).
+% The first index is \(1\).
+% \begin{macrocode}
+\array_new:N \l_hobby_matrix_d_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_vector_u_array}
+% \Verb+\l_hobby_vector_u_array+ is an array holding the perturbation of the linear system for closed paths.
+% The coefficient matrix for an \emph{open} path is tridiagonal and that means that Gaussian elimination runs faster than expected (\(O(n)\) instead of \(O(n^3)\)).
+% The matrix for a closed path is not tridiagonal but is not far off.
+% It can be solved by perturbing it to a tridiagonal matrix and then modifying the result.
+% This array represents a utility vector in that perturbation.
+% In the following, the vector will be denoted by \(u\).
+% The first index is \(1\).
+% \begin{macrocode}
+\array_new:N \l_hobby_vector_u_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_excess_angle_array}
+% \Verb+\l_hobby_excess_angle_array+ is an array that allows the user to say that the algorithm should add a multiple of \(2 \pi\) to the angle differences.
+% This is because these angles are wrapped to the interval \((-\pi,\pi]\) but the wrapping might go wrong near the end points due to computation accuracy.
+% The first index is \(1\).
+% \begin{macrocode}
+\array_new:N \l_hobby_excess_angle_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_psi_array}
+% \Verb+\l_hobby_psi_array+ is an array holding the difference of the angles of the lines entering and exiting a point.
+% That is, \(\psi_k\) is the angle between the lines joining \(z_k\) to \(z_{k-1}\) and \(z_{k+1}\).
+% The first index is \(1\).
+% \begin{macrocode}
+\array_new:N \l_hobby_psi_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_theta_array}
+% \Verb+\l_hobby_theta_array+ is an array holding the angles of the outgoing control points for the generated path.
+% These are measured relative to the line joining the point to the next point on the path.
+% The first index is \(0\).
+% \begin{macrocode}
+\array_new:N \l_hobby_theta_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_phi_array}
+% \Verb+\l_hobby_phi_array+ is an array holding the angles of the incoming control points for the generated path.
+% These are measured relative to the line joining the point to the previous point on the path.
+% The first index is \(1\).
+% \begin{macrocode}
+\array_new:N \l_hobby_phi_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_sigma_array}
+% \Verb+\l_hobby_sigma_array+ is an array holding the lengths of the outgoing control points for the generated path.
+% The units are such that the length of the line to the next specified point is one unit.
+% \begin{macrocode}
+\array_new:N \l_hobby_sigma_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_rho_array}
+% \Verb+\l_hobby_rho_array+ is an array holding the lengths of the incoming control points for the generated path.
+% The units are such that the length of the line to the previous specified point is one unit.
+% \begin{macrocode}
+\array_new:N \l_hobby_rho_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_controla_array}
+% \Verb+\l_hobby_controla_array+ is an array holding the coordinates of the first control points on the curves.
+% The format is the same as for \Verb+\l_hobby_points_array+.
+% \begin{macrocode}
+\array_new:N \l_hobby_controla_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_controlb_array}
+% \Verb+\l_hobby_controlb_array+ is an array holding the coordinates of the second control points on the curves.
+% The format is the same as for \Verb+\l_hobby_points_array+.
+% \begin{macrocode}
+\array_new:N \l_hobby_controlb_array
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_matrix_v_fp}
+% \Verb+\l_hobby_matrix_v_fp+ is a number which is used when doing the perturbation of the solution of the linear system for a closed curve.
+% There is actually a vector, \(v\), that this corresponds to but that vector only has one component that needs computation.
+% \begin{macrocode}
+\fp_new:N \l_hobby_matrix_v_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_tempa_fp}
+% \Verb+\l_hobby_tempa_fp+ is a temporary variable of type \Verb+fp+.
+% \begin{macrocode}
+\fp_new:N \l_hobby_tempa_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_tempb_fp}
+% \Verb+\l_hobby_tempb_fp+ is a temporary variable of type \Verb+fp+.
+% \begin{macrocode}
+\fp_new:N \l_hobby_tempb_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_tempc_fp}
+% \Verb+\l_hobby_tempc_fp+ is a temporary variable of type \Verb+fp+.
+% \begin{macrocode}
+\fp_new:N \l_hobby_tempc_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_tempd_fp}
+% \Verb+\l_hobby_tempd_fp+ is a temporary variable of type \Verb+fp+.
+% \begin{macrocode}
+\fp_new:N \l_hobby_tempd_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_temps_fp}
+% \Verb+\l_hobby_temps_fp+ is a temporary variable of type \Verb+fp+.
+% \begin{macrocode}
+\fp_new:N \l_hobby_temps_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_in_curl_fp}
+% \Verb+\l_hobby_in_curl_fp+ is the ``curl'' at the end of an open path.
+% This is used if the angle at the end is not specified.
+% \begin{macrocode}
+\fp_new:N \l_hobby_in_curl_fp
+\fp_set:Nn \l_hobby_in_curl_fp {1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_out_curl_fp}
+% \Verb+\l_hobby_out_curl_fp+ is the ``curl'' at the start of an open path.
+% This is used if the angle at the start is not specified.
+% \begin{macrocode}
+\fp_new:N \l_hobby_out_curl_fp
+\fp_set:Nn \l_hobby_out_curl_fp {1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_in_angle_fp}
+% \Verb+\l_hobby_in_angle_fp+ is the angle at the end of an open path.
+% If this is not specified, it will be computed automatically.
+% It is set to \Verb+\c_inf_fp+ to allow easy detection of when it has been specified.
+% \begin{macrocode}
+\fp_new:N \l_hobby_in_angle_fp
+\fp_set_eq:NN \l_hobby_in_angle_fp \c_inf_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_out_angle_fp}
+% \Verb+\l_hobby_out_angle_fp+ is the angle at the start of an open path.
+% If this is not specified, it will be computed automatically.
+% It is set to \Verb+\c_inf_fp+ to allow easy detection of when it has been specified.
+% \begin{macrocode}
+\fp_new:N \l_hobby_out_angle_fp
+\fp_set_eq:NN \l_hobby_out_angle_fp \c_inf_fp
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_npoints_int}
+% \Verb+\l_hobby_npoints_int+ is one less than the number of points on the curve.
+% As our list of points starts at \(0\), this is the index of the last point.
+% In the algorithm for a closed curve, some points are repeated whereupon this is incremented so that it is always the index of the last point.
+% \begin{macrocode}
+\int_new:N \l_hobby_npoints_int
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_hobby_draw_int}
+% \begin{macrocode}
+\int_new:N \l_hobby_draw_int
+% \end{macrocode}
+% \end{macro}
+%
+% A ``point'' is a key-value list setting the x-value, the y-value, and the tensions at that point.
+% Using keys makes it easier to pass points from the algorithm code to the calling code and vice versa without either knowing too much about the other.
+% \begin{macrocode}
+\keys_define:nn {hobby / read in all} {
+ x .fp_set:N = \l_hobby_tempa_fp,
+ y .fp_set:N = \l_hobby_tempb_fp,
+ tension~out .fp_set:N = \l_hobby_tempc_fp,
+ tension~in .fp_set:N = \l_hobby_tempd_fp,
+ excess~angle .fp_set:N = \l_hobby_temps_fp,
+ break .tl_set:N = \l_tmpb_tl,
+ blank .tl_set:N = \l_tmpa_tl,
+ tension .meta:n = { tension~out=#1, tension~in=#1 },
+ break .default:n = false,
+ blank .default:n = false,
+ invert~soft~blanks .choice:,
+ invert~soft~blanks / true .code:n = {
+ \int_gset:Nn \l_hobby_draw_int {0}
+ },
+ invert~soft~blanks / false .code:n = {
+ \int_gset:Nn \l_hobby_draw_int {1}
+ },
+ invert~soft~blanks .default:n = true,
+ tension~out .default:n = 1,
+ tension~in .default:n = 1,
+ excess~angle .default:n = 0,
+ in~angle .fp_gset:N = \l_hobby_in_angle_fp,
+ out~angle .fp_gset:N = \l_hobby_out_angle_fp,
+ in~curl .fp_gset:N = \l_hobby_in_curl_fp,
+ out~curl .fp_gset:N = \l_hobby_out_curl_fp,
+ closed .bool_gset:N = \l_hobby_closed_bool,
+ closed .default:n = true,
+ disjoint .bool_gset:N = \l_hobby_disjoint_bool,
+ disjoint .default:n = true,
+ break~default .code:n = {
+ \keys_define:nn { hobby / read in all }
+ {
+ break .default:n = #1
+ }
+ },
+ blank~default .code:n = {
+ \keys_define:nn { hobby / read in all }
+ {
+ blank .default:n = #1
+ }
+ },
+}
+% \end{macrocode}
+% There are certain other parameters that can be set for a given curve.
+% \begin{macrocode}
+\keys_define:nn { hobby / read in params} {
+ in~angle .fp_gset:N = \l_hobby_in_angle_fp,
+ out~angle .fp_gset:N = \l_hobby_out_angle_fp,
+ in~curl .fp_gset:N = \l_hobby_in_curl_fp,
+ out~curl .fp_gset:N = \l_hobby_out_curl_fp,
+ closed .bool_gset:N = \l_hobby_closed_bool,
+ closed .default:n = true,
+ disjoint .bool_gset:N = \l_hobby_disjoint_bool,
+ disjoint .default:n = true,
+ break~default .code:n = {
+ \keys_define:nn { hobby / read in all }
+ {
+ break .default:n = #1
+ }
+ },
+ blank~default .code:n = {
+ \keys_define:nn { hobby / read in all }
+ {
+ blank .default:n = #1
+ }
+ },
+ invert~soft~blanks .choice:,
+ invert~soft~blanks / true .code:n = {
+ \int_gset:Nn \l_hobby_draw_int {0}
+ },
+ invert~soft~blanks / false .code:n = {
+ \int_gset:Nn \l_hobby_draw_int {1}
+ },
+ invert~soft~blanks .default:n = true,
+}
+% \end{macrocode}
+% \begin{macro}{\hobby_distangle:n}
+% Computes the distance and angle between successive points.
+% The argument given is the index of the current point.
+% Assumptions: the points are in \Verb+\l_hobby_points_x_array+ and \Verb+\l_hobby_points_y_array+ and the index of the last point is \Verb+\l_hobby_npoints_int+.
+% \begin{macrocode}
+\cs_set:Nn \hobby_distangle:n {
+ \fp_set:Nn \l_hobby_tempa_fp {
+ (\array_get:Nn \l_hobby_points_x_array {#1 + 1})
+ - (\array_get:Nn \l_hobby_points_x_array {#1})}
+
+ \fp_set:Nn \l_hobby_tempb_fp {
+ (\array_get:Nn \l_hobby_points_y_array {#1 + 1})
+ - (\array_get:Nn \l_hobby_points_y_array {#1})}
+
+ \fp_set:Nn \l_hobby_tempc_fp { atan ( \l_hobby_tempb_fp, \l_hobby_tempa_fp ) }
+ \fp_veclen:NVV \l_hobby_tempd_fp \l_hobby_tempa_fp \l_hobby_tempb_fp
+
+ \array_push:Nx \l_hobby_angles_array {\fp_to_tl:N \l_hobby_tempc_fp}
+ \array_push:Nx \l_hobby_distances_array {\fp_to_tl:N \l_hobby_tempd_fp}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fp_veclen:NVV}
+% Computes the length of the vector specified by the latter two arguments, storing the answer in the first.
+% \begin{macrocode}
+\cs_new:Nn \fp_veclen:Nnn {
+ \fp_set:Nn #1 {((#2)^2 + (#3)^2)^.5}
+}
+\cs_generate_variant:Nn \fp_veclen:Nnn {NVV}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_ctrllen:Nnn}
+% Computes the length of the control point vector from the two angles, storing the answer in the first argument given.
+% \begin{macrocode}
+\cs_new:Nn \hobby_ctrllen:Nnn {
+ \fp_set:Nn #1 {(2 - \g_hobby_parama_fp
+ * ( sin(#2) - \g_hobby_paramb_fp * sin(#3) )
+ * ( sin(#3) - \g_hobby_paramb_fp * sin(#2) )
+ * ( cos(#2) - cos(#3) ) )
+ / ( 1 + (1 - \g_hobby_paramc_fp) * cos(#3) + \g_hobby_paramc_fp * cos(#2))}
+}
+\cs_generate_variant:Nn \hobby_ctrllen:Nnn {NVV}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_append_point_copy:n}
+% This function adds a copy of the point (numbered by its argument) to the end of the list of points, copying all the relevant data (coordinates, tension, etc.).
+%
+% Originally from Bruno Le Foch on TeX-SX.
+% \begin{macrocode}
+\cs_new_protected:Npn \hobby_append_point_copy:n #1
+ {
+ \hobby_append_point_copy_aux:Nn \l_hobby_points_array {#1}
+ \hobby_append_point_copy_aux:Nn \l_hobby_points_x_array {#1}
+ \hobby_append_point_copy_aux:Nn \l_hobby_points_y_array {#1}
+ \hobby_append_point_copy_aux:Nn \l_hobby_tension_in_array {#1}
+ \hobby_append_point_copy_aux:Nn \l_hobby_tension_out_array {#1}
+ \hobby_append_point_copy_aux:Nn \l_hobby_excess_angle_array {#1}
+ \hobby_append_point_copy_aux:Nn \l_hobby_actions_array {#1}
+ }
+\cs_new_protected:Npn \hobby_append_point_copy_aux:Nn #1#2
+ { \array_gpush:Nx #1 { \array_get:Nn #1 {#2} } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_gen_path:}
+% This is the curve generation function.
+% We assume at the start that we have an array containing all the points that the curve must go through, and the various curve parameters have been initialised.
+% So these must be set up by a wrapper function which then calls this one.
+% The list of required information is:
+% \begin{enumerate}
+% \item \Verb+\l_hobby_points_x_array+
+% \item \Verb+\l_hobby_points_y_array+
+% \item \Verb+\l_hobby_tension_out_array+
+% \item \Verb+\l_hobby_tension_in_array+
+% \item \Verb+\l_hobby_excess_angle_array+
+% \item \Verb+\l_hobby_in_curl_fp+
+% \item \Verb+\l_hobby_out_curl_fp+
+% \item \Verb+\l_hobby_in_angle_fp+
+% \item \Verb+\l_hobby_out_angle_fp+
+% \item \Verb+\l_hobby_closed_bool+
+% \item \Verb+\l_hobby_actions_array+
+% \end{enumerate}
+%
+% \begin{macrocode}
+\cs_new:Nn \hobby_gen_path:
+{
+% \end{macrocode}
+% For much of the time, we can pretend that a closed path is the same as an open path.
+% To do this, we need to make the end node an internal node by repeating the \(z_1\) node as the \(z_{n+1}\)th node.
+% We also check that the last (\(z_n\)) and first (\(z_0\)) nodes are the same, otherwise we repeat the \(z_0\) node as well.
+% \begin{macrocode}
+\bool_if:NT \l_hobby_closed_bool {
+% \end{macrocode}
+% Are the \(x\)-values of the first and last points different?
+% \begin{macrocode}
+ \fp_compare:nTF {(\array_get:Nn \l_hobby_points_x_array {0})
+ =
+ (\array_top:N \l_hobby_points_x_array)}
+ {
+% \end{macrocode}
+% No, so compare the \(y\)-values.
+% Are the \(y\)-values of the first and last points different?
+% \begin{macrocode}
+ \fp_compare:nF {
+ \array_get:Nn \l_hobby_points_y_array {0}
+ =
+ \array_top:N \l_hobby_points_y_array
+ }
+ {
+% \end{macrocode}
+% Yes, so we need to duplicate the first point, with all of its data.
+% \begin{macrocode}
+ \hobby_append_point_copy:n {0}
+ }
+ }
+ {
+% \end{macrocode}
+% Yes, so we need to duplicate the first point, with all of its data.
+% \begin{macrocode}
+ \hobby_append_point_copy:n {0}
+ }
+% \end{macrocode}
+% Now that we are sure that the first and last points are identical, we need to duplicate the first-but-one point (and all of its data).
+% \begin{macrocode}
+ \hobby_append_point_copy:n {1}
+}
+% \end{macrocode}
+%
+% Set \Verb+\l_hobby_npoints_int+ to the number of points (minus one).
+% \begin{macrocode}
+\int_gset:Nn \l_hobby_npoints_int {\array_length:N \l_hobby_points_y_array}
+% \end{macrocode}
+% At this point, we need to decide what to do.
+% This will depend on whether we have any intermediate points.
+% \begin{macrocode}
+\int_compare:nNnTF {\l_hobby_npoints_int} = {0} {
+% \end{macrocode}
+% Only one point, do nothing
+% \begin{macrocode}
+}
+{
+ \int_compare:nNnTF {\l_hobby_npoints_int} = {1} {
+% \end{macrocode}
+% Only two points, skip processing.
+% Just need to set the incoming and outgoing angles
+% \begin{macrocode}
+\hobby_distangle:n {0}
+\fp_compare:nF { \l_hobby_out_angle_fp == \c_inf_fp }
+{
+ \fp_set:Nn \l_hobby_tempa_fp { \l_hobby_out_angle_fp
+ - \array_get:Nn \l_hobby_angles_array {0}}
+% \end{macrocode}
+% We want to ensure that these angles lie in the range \((-\pi,\pi]\).
+% So if the angle is bigger than \(\pi\), we subtract \(2 \pi\).
+% (It shouldn't be that we can get bigger than \(3 \pi\) - check this)
+% \begin{macrocode}
+ \fp_compare:nT {\l_hobby_tempa_fp > \c_pi_fp }
+ {
+ \fp_sub:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+% \end{macrocode}
+% Similarly, we check to see if the angle is less than \(-\pi\).
+% \begin{macrocode}
+ \fp_compare:nT {\l_hobby_tempa_fp < -\c_pi_fp }
+ {
+ \fp_add:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+ \array_put:Nnx \l_hobby_theta_array {0} {\fp_to_tl:N \l_hobby_tempa_fp}
+ \fp_compare:nT { \l_hobby_in_angle_fp == \c_inf_fp }
+ {
+%^^A \fp_mul:Nn \l_hobby_tempa_fp {-1}
+ \array_put:Nnx \l_hobby_phi_array {1}{ \fp_to_tl:N \l_hobby_tempa_fp}
+ }
+ }
+\fp_compare:nTF { \l_hobby_in_angle_fp == \c_inf_fp }
+{
+ \fp_compare:nT { \l_hobby_out_angle_fp == \c_inf_fp }
+ {
+ \array_put:Nnx \l_hobby_phi_array {1} {0}
+ \array_put:Nnx \l_hobby_theta_array {0} {0}
+ }
+}
+{
+ \fp_set:Nn \l_hobby_tempa_fp { - \l_hobby_in_angle_fp + \c_pi_fp
++ (\array_get:Nn \l_hobby_angles_array {0})}
+ \fp_compare:nT {\l_hobby_tempa_fp > \c_pi_fp }
+ {
+ \fp_sub:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+ \fp_compare:nT {\l_hobby_tempa_fp < -\c_pi_fp }
+ {
+ \fp_add:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+
+ \array_put:Nnx \l_hobby_phi_array {1}
+ {\fp_to_tl:N \l_hobby_tempa_fp}
+ \fp_compare:nT { \l_hobby_out_angle_fp == \c_inf_fp }
+ {
+%^^A \fp_mul:Nn \l_hobby_tempa_fp {-1}
+ \array_put:Nnx \l_hobby_theta_array {0}{ \fp_to_tl:N \l_hobby_tempa_fp}
+ }
+}
+
+ }
+ {
+% \end{macrocode}
+% Got enough points, go on with processing
+% \begin{macrocode}
+ \hobby_compute_path:
+ }
+ \hobby_build_path:
+}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\hobby_compute_path:}
+% This is the path builder where we have enough points to run the algorithm.
+% \begin{macrocode}
+\cs_new:Nn \hobby_compute_path:
+{
+% \end{macrocode}
+% Our first step is to go through the list of points and compute the distances and angles between successive points.
+% Thus \(d_i\) is the distance from \(z_i\) to \(z_{i+1}\) and the angle is the angle of the line from \(z_i\) to \(z_{i+1}\).
+% \begin{macrocode}
+\int_step_function:nnnN {0} {1} {\l_hobby_npoints_int - 1} \hobby_distangle:n
+% \end{macrocode}
+%
+% For the majority of the code, we're only really interested in the differences of the angles.
+% So for each internal point we compute the differences in the angles.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 1} {
+ \fp_set:Nx \l_hobby_tempa_fp {
+ \array_get:Nn \l_hobby_angles_array {##1}
+ - \array_get:Nn \l_hobby_angles_array {##1 - 1}}
+% \end{macrocode}
+% We want to ensure that these angles lie in the range \((-\pi,\pi]\).
+% So if the angle is bigger than \(\pi\), we subtract \(2 \pi\).
+% (It shouldn't be that we can get bigger than \(3 \pi\) - check this.)
+% \begin{macrocode}
+ \fp_compare:nTF {\l_hobby_tempa_fp > \c_pi_fp }
+ {
+ \fp_sub:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+ {}
+% \end{macrocode}
+% Similarly, we check to see if the angle is less than \(-\pi\).
+% \begin{macrocode}
+ \fp_compare:nTF {\l_hobby_tempa_fp <= -\c_pi_fp }
+ {
+ \fp_add:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+ {}
+% \end{macrocode}
+% The wrapping routine might not get it right at the edges so we add in the override.
+% \begin{macrocode}
+\array_get:NnNTF \l_hobby_excess_angle_array {##1} \l_tmpa_tl {
+ \fp_add:Nn \l_hobby_tempa_fp {2 * \c_pi_fp * \l_tmpa_tl}
+ }{}
+% \end{macrocode}
+% \begin{macrocode}
+ \array_put:Nnx \l_hobby_psi_array {##1}{\fp_to_tl:N \l_hobby_tempa_fp}
+ }
+% \end{macrocode}
+%
+% Next, we generate the matrix.
+% We start with the subdiagonal.
+% This is indexed from \(1\) to \(n-1\).
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 1} {
+ \array_put:Nnx \l_hobby_matrix_a_array {##1} {\fp_to_tl:n {
+ \array_get:Nn \l_hobby_tension_in_array {##1}^2
+ * \array_get:Nn \l_hobby_distances_array {##1}
+ * \array_get:Nn \l_hobby_tension_in_array {##1 + 1}
+ }}
+}
+% \end{macrocode}
+%
+% Next, we attack main diagonal.
+% We might need to adjust the first and last terms, but we'll do that in a minute.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 1} {
+
+ \array_put:Nnx \l_hobby_matrix_b_array {##1} {\fp_to_tl:n
+{(3 * (\array_get:Nn \l_hobby_tension_in_array {##1 + 1}) - 1) *
+ (\array_get:Nn \l_hobby_tension_out_array {##1})^2 *
+(\array_get:Nn \l_hobby_tension_out_array {##1 - 1})
+* ( \array_get:Nn \l_hobby_distances_array {##1 - 1})
++
+(3 * (\array_get:Nn \l_hobby_tension_out_array {##1 - 1}) - 1)
+* (\array_get:Nn \l_hobby_tension_in_array {##1})^2
+* (\array_get:Nn \l_hobby_tension_in_array {##1 + 1})
+* (\array_get:Nn \l_hobby_distances_array {##1})}
+}
+}
+% \end{macrocode}
+%
+% Next, the superdiagonal.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 2} {
+
+ \array_put:Nnx \l_hobby_matrix_c_array {##1} {\fp_to_tl:n
+{(\array_get:Nn \l_hobby_tension_in_array {##1})^2
+* (\array_get:Nn \l_hobby_tension_in_array {##1 - 1})
+* (\array_get:Nn \l_hobby_distances_array {##1 - 1})
+}}
+
+}
+% \end{macrocode}
+%
+% Lastly (before the adjustments), the target vector.
+% \begin{macrocode}
+ \int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 2} {
+
+ \array_put:Nnx \l_hobby_matrix_d_array {##1} {\fp_to_tl:n
+{
+- (\array_get:Nn \l_hobby_psi_array {##1 + 1})
+* (\array_get:Nn \l_hobby_tension_out_array {##1})^2
+* (\array_get:Nn \l_hobby_tension_out_array {##1 - 1})
+* (\array_get:Nn \l_hobby_distances_array {##1 - 1})
+- (3 * (\array_get:Nn \l_hobby_tension_out_array {##1 - 1}) - 1)
+* (\array_get:Nn \l_hobby_psi_array {##1})
+* (\array_get:Nn \l_hobby_tension_in_array {##1})^2
+* (\array_get:Nn \l_hobby_tension_in_array {##1 + 1})
+* (\array_get:Nn \l_hobby_distances_array {##1})
+}
+}
+}
+% \end{macrocode}
+%
+% Next, there are some adjustments at the ends.
+% These differ depending on whether the path is open or closed.
+% \begin{macrocode}
+\bool_if:NTF \l_hobby_closed_bool {
+% \end{macrocode}
+% Closed path
+% \begin{macrocode}
+\array_put:Nnx \l_hobby_matrix_c_array {0} {\fp_to_tl:n {
+- (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int - 2})
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 2})
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 1})^2
+}}
+
+\array_put:Nnn \l_hobby_matrix_b_array {0} {1}
+\array_put:Nnn \l_hobby_matrix_d_array {0} {0}
+
+\array_put:Nnx \l_hobby_matrix_b_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n {
+(\array_get:Nn \l_hobby_matrix_b_array {\l_hobby_npoints_int - 1})
++ 1
+}}
+
+ \array_put:Nnx \l_hobby_matrix_d_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n {
+- (\array_get:Nn \l_hobby_psi_array {1})
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int -1})^2
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int -2})
+* (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int - 2})
+- (3 * (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 2}) - 1)
+* (\array_get:Nn \l_hobby_psi_array {\l_hobby_npoints_int - 1})
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int - 1})^2
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int})
+* (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int -1})
+}
+}
+% \end{macrocode}
+% We also need to populate the \(u\)-vector
+% \begin{macrocode}
+ \array_put:Nnn \l_hobby_vector_u_array {0} {1}
+\array_put:Nnn \l_hobby_vector_u_array {\l_hobby_npoints_int - 1} {1}
+ \int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 2} {
+ \array_put:Nnn \l_hobby_vector_u_array {##1} {0}
+ }
+% \end{macrocode}
+% And define the significant entry in the \(v\)-vector.
+% \begin{macrocode}
+\fp_set:Nn \l_hobby_matrix_v_fp {
+(\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int -1})^2
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int -2})
+* (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int -2})
+}
+}
+{
+% \end{macrocode}
+% Open path.
+% First, we test to see if \(\theta_0\) has been specified.
+% \begin{macrocode}
+\fp_compare:nTF { \l_hobby_out_angle_fp == \c_inf_fp }
+{
+ \array_put:Nnx \l_hobby_matrix_b_array {0} {\fp_to_tl:n {
+ (\array_get:Nn \l_hobby_tension_in_array {1})^3
+* \l_hobby_in_curl_fp
++
+(3 * (\array_get:Nn \l_hobby_tension_in_array {1}) - 1)
+* (\array_get:Nn \l_hobby_tension_out_array {0})^3
+}}
+
+ \array_put:Nnx \l_hobby_matrix_c_array {0} {\fp_to_tl:n {
+ (\array_get:Nn \l_hobby_tension_out_array {0})^3
++
+(3 * (\array_get:Nn \l_hobby_tension_out_array {0}) - 1)
+* (\array_get:Nn \l_hobby_tension_in_array {1})^3
+* \l_hobby_in_curl_fp
+}}
+
+ \array_put:Nnx \l_hobby_matrix_d_array {0} {\fp_to_tl:n {
+-( (\array_get:Nn \l_hobby_tension_out_array {0})^3
++
+(3 * (\array_get:Nn \l_hobby_tension_out_array {0}) - 1)
+* (\array_get:Nn \l_hobby_tension_in_array {1})^3
+* \l_hobby_in_curl_fp)
+* (\array_get:Nn \l_hobby_psi_array {1})
+}}
+
+}
+{
+ \array_put:Nnn \l_hobby_matrix_b_array {0} {1}
+ \array_put:Nnn \l_hobby_matrix_c_array {0} {0}
+ \fp_set:Nn \l_hobby_tempa_fp { \l_hobby_out_angle_fp
+ - \array_get:Nn \l_hobby_angles_array {0}}
+% \end{macrocode}
+% We want to ensure that these angles lie in the range \((-\pi,\pi]\).
+% So if the angle is bigger than \(\pi\), we subtract \(2 \pi\).
+% (It shouldn't be that we can get bigger than \(3 \pi\) - check this)
+% \begin{macrocode}
+ \fp_compare:nT {\l_hobby_tempa_fp > \c_pi_fp }
+ {
+ \fp_sub:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+% \end{macrocode}
+% Similarly, we check to see if the angle is less than \(-\pi\).
+% \begin{macrocode}
+ \fp_compare:nT {\l_hobby_tempa_fp < -\c_pi_fp }
+ {
+ \fp_add:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+ \array_put:Nnx \l_hobby_matrix_d_array {0} {\fp_to_tl:N \l_hobby_tempa_fp}
+}
+% \end{macrocode}
+%
+% Next, if \(\phi_n\) has been given.
+% \begin{macrocode}
+\fp_compare:nTF { \l_hobby_in_angle_fp == \c_inf_fp }
+{
+
+ \array_put:Nnx \l_hobby_matrix_b_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n {
+\array_get:Nn \l_hobby_matrix_b_array {\l_hobby_npoints_int - 1}
+- (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 1})^2
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 2})
+* (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int - 2})
+*
+((3 * (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int} ) - 1)
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 1})^3 \l_tmpa_tl
+* \l_hobby_out_curl_fp
++
+(\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int })^3)
+/
+((3 * (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int -2}) - 1)
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int})^3
++
+( \array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 1})^3
+* \l_hobby_out_curl_fp)
+}}
+
+ \array_put:Nnx \l_hobby_matrix_d_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n {
+- (3 * (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 2}) - 1)
+* (\array_get:Nn \l_hobby_psi_array {\l_hobby_npoints_int - 1})
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int - 1})^2
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int})
+* (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int - 1})
+}}
+
+}
+{
+ \fp_set:Nn \l_hobby_tempa_fp { - \l_hobby_in_angle_fp + \c_pi_fp
++ (\array_get:Nn \l_hobby_angles_array {\l_hobby_npoints_int - 1})}
+ \fp_compare:nT {\l_hobby_tempa_fp > \c_pi_fp }
+ {
+ \fp_sub:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+ \fp_compare:nT {\l_hobby_tempa_fp < -\c_pi_fp }
+ {
+ \fp_add:Nn \l_hobby_tempa_fp {2 * \c_pi_fp}
+ }
+
+ \array_put:Nnx \l_hobby_phi_array {\l_hobby_npoints_int}
+ {\fp_to_tl:N \l_hobby_tempa_fp}
+
+ \array_put:Nnx \l_hobby_matrix_d_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n {
+ \l_hobby_tempa_fp
+ * (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 1})^2
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 2})
+* (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int - 2})
+-
+(3 * ( \array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 2}) - 1)
+* (\array_get:Nn \l_hobby_psi_array {\l_hobby_npoints_int - 1})
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int - 1})^2
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int})
+* (\array_get:Nn \l_hobby_distances_array {\l_hobby_npoints_int - 1}) }}
+}
+% \end{macrocode}
+% End of adjustments for open paths.
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+% Now we have the tridiagonal matrix in place, we implement the solution.
+% We start with the forward eliminations.
+% \begin{macrocode}
+\int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 1} {
+
+ \array_put:Nnx \l_hobby_matrix_b_array {##1} {\fp_to_tl:n {
+ (\array_get:Nn \l_hobby_matrix_b_array {##1 - 1})
+* (\array_get:Nn \l_hobby_matrix_b_array {##1})
+-
+(\array_get:Nn \l_hobby_matrix_c_array {##1 - 1})
+* (\array_get:Nn \l_hobby_matrix_a_array {##1})
+}}
+% \end{macrocode}
+% The last time, we don't touch the \(C\)-vector.
+% \begin{macrocode}
+ \int_compare:nT {##1 < \l_hobby_npoints_int - 1} {
+
+ \array_put:Nnx \l_hobby_matrix_c_array {##1} {\fp_to_tl:n {
+(\array_get:Nn \l_hobby_matrix_b_array {##1 - 1})
+ * (\array_get:Nn \l_hobby_matrix_c_array {##1})
+}}
+ }
+
+ \array_put:Nnx \l_hobby_matrix_d_array {##1} {\fp_to_tl:n {
+(\array_get:Nn \l_hobby_matrix_b_array {##1 - 1})
+ * (\array_get:Nn \l_hobby_matrix_d_array {##1})
+-
+ (\array_get:Nn \l_hobby_matrix_d_array {##1 - 1})
+ * (\array_get:Nn \l_hobby_matrix_a_array {##1})
+}}
+% \end{macrocode}
+% On a closed path, we also want to know \(M^{-1} u\) so need to do the elimination steps on \(u\) as well.
+% \begin{macrocode}
+ \bool_if:NT \l_hobby_closed_bool {
+ \array_put:Nnx \l_hobby_vector_u_array {##1} {\fp_to_tl:n {
+(\array_get:Nn \l_hobby_matrix_b_array {##1 - 1})
+* (\array_get:Nn \l_hobby_vector_u_array {##1})
+-
+(\array_get:Nn \l_hobby_vector_u_array {##1 - 1})
+* (\array_get:Nn \l_hobby_matrix_a_array {##1})
+}}
+}
+}
+% \end{macrocode}
+% Now we start the back substitution.
+% The first step is slightly different to the general step.
+% \begin{macrocode}
+ \array_put:Nnx \l_hobby_theta_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n {
+(\array_get:Nn \l_hobby_matrix_d_array {\l_hobby_npoints_int - 1})
+/ (\array_get:Nn \l_hobby_matrix_b_array {\l_hobby_npoints_int - 1})
+}}
+% \end{macrocode}
+% For a closed path, we need to work with \(u\) as well.
+% \begin{macrocode}
+\bool_if:NT \l_hobby_closed_bool {
+ \array_put:Nnx \l_hobby_vector_u_array {\l_hobby_npoints_int - 1} {\fp_to_tl:n {
+ (\array_get:Nn \l_hobby_vector_u_array {\l_hobby_npoints_int - 1})
+/ (\array_get:Nn \l_hobby_matrix_b_array {\l_hobby_npoints_int - 1})
+}}
+}
+% \end{macrocode}
+% Now we iterate over the vectors, doing the remaining back substitutions.
+% \begin{macrocode}
+\int_step_inline:nnnn {\l_hobby_npoints_int - 2} {-1} {0} {
+
+ \array_put:Nnx \l_hobby_theta_array {##1} {\fp_to_tl:n {
+( (\array_get:Nn \l_hobby_matrix_d_array {##1})
+ - (\array_get:Nn \l_hobby_theta_array {##1 + 1})
+ * (\array_get:Nn \l_hobby_matrix_c_array {##1})
+) / (\array_get:Nn \l_hobby_matrix_b_array {##1})
+}}
+}
+\bool_if:NT \l_hobby_closed_bool {
+% \end{macrocode}
+% On a closed path, we also need to work out \(M^{-1} u\).
+% \begin{macrocode}
+\int_step_inline:nnnn {\l_hobby_npoints_int - 2} {-1} {0} {
+ \array_put:Nnx \l_hobby_vector_u_array {##1} {\fp_to_tl:n
+{
+ ((\array_get:Nn \l_hobby_vector_u_array {##1})
+ - (\array_get:Nn \l_hobby_vector_u_array {##1 + 1})
+ * (\array_get:Nn \l_hobby_matrix_c_array {##1})
+ ) / (\array_get:Nn \l_hobby_matrix_b_array {##1})
+}}
+}
+% \end{macrocode}
+% Then we compute \(v^\top M^{-1}u\) and \(v^\top M^{-1} \theta\).
+% As \(v\) has a particularly simple form, these inner products are easy to compute.
+% \begin{macrocode}
+
+\fp_set:Nn \l_hobby_tempb_fp {
+((\array_get:Nn \l_hobby_theta_array {1})
+* \l_hobby_matrix_v_fp
+- (\array_get:Nn \l_hobby_theta_array {\l_hobby_npoints_int - 1})
+) / (
+(\array_get:Nn \l_hobby_vector_u_array {1})
+* \l_hobby_matrix_v_fp
+- (\array_get:Nn \l_hobby_vector_u_array {\l_hobby_npoints_int - 1})
++ 1
+)}
+
+\int_step_inline:nnnn {0} {1} {\l_hobby_npoints_int - 1} {
+
+ \array_put:Nnx \l_hobby_theta_array {##1} {\fp_to_tl:n {
+ (\array_get:Nn \l_hobby_theta_array {##1})
+ - (\array_get:Nn \l_hobby_vector_u_array {##1})
+ * \l_hobby_tempb_fp
+}}
+}
+}
+% \end{macrocode}
+%
+% Now that we have computed the \(\theta_i\)s, we can quickly compute the \(\phi_i\)s.
+%
+% \begin{macrocode}
+\int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int - 1} {
+
+ \array_put:Nnx \l_hobby_phi_array {##1} {\fp_to_tl:n {
+ - (\array_get:Nn \l_hobby_psi_array {##1})
+ - (\array_get:Nn \l_hobby_theta_array {##1})
+ }}
+ }
+% \end{macrocode}
+%
+% If the path is open, this works for all except \(\phi_n\).
+% If the path is closed, we can drop our added point.
+% Cheaply, of course.
+% \begin{macrocode}
+\bool_if:NTF \l_hobby_closed_bool {
+ \int_gdecr:N \l_hobby_npoints_int
+}{
+% \end{macrocode}
+% If \(\phi_n\) was not given, we compute it from \(\theta_{n-1}\).
+% \begin{macrocode}
+\fp_compare:nT { \l_hobby_in_angle_fp == \c_inf_fp }
+{
+ \array_put:Nnx \l_hobby_phi_array {\l_hobby_npoints_int} {\fp_to_tl:n {
+((3 * (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int}) - 1)
+* (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 1})^3
+* \l_hobby_out_curl_fp
++
+(\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int })^3)
+/
+((3 * (\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int -2}) - 1)
+* (\array_get:Nn \l_hobby_tension_in_array {\l_hobby_npoints_int})^3 \l_tmpa_tl
++
+(\array_get:Nn \l_hobby_tension_out_array {\l_hobby_npoints_int - 1})^3
+* \l_hobby_out_curl_fp)
+*
+(\array_get:Nn \l_hobby_theta_array {\l_hobby_npoints_int -1})
+}}
+}
+}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\hobby_build_path:}
+% Once we've computed the angles, we build the actual path.
+% \begin{macrocode}
+\cs_new:Nn \hobby_build_path:
+{
+% \end{macrocode}
+% Next task is to compute the \(\rho_i\) and \(\sigma_i\).
+% \begin{macrocode}
+\int_step_inline:nnnn {0} {1} {\l_hobby_npoints_int - 1} {
+
+ \fp_set:Nn \l_hobby_tempa_fp {\array_get:Nn \l_hobby_theta_array {##1}}
+
+ \fp_set:Nn \l_hobby_tempb_fp {\array_get:Nn \l_hobby_phi_array {##1 + 1}}
+
+ \hobby_ctrllen:NVV \l_hobby_temps_fp \l_hobby_tempa_fp \l_hobby_tempb_fp
+
+ \array_put:Nnx \l_hobby_sigma_array {##1 + 1} {\fp_to_tl:N \l_hobby_temps_fp}
+
+ \hobby_ctrllen:NVV \l_hobby_temps_fp \l_hobby_tempb_fp \l_hobby_tempa_fp
+
+ \array_put:Nnx \l_hobby_rho_array {##1} {\fp_to_tl:N \l_hobby_temps_fp}
+
+ }
+% \end{macrocode}
+% Lastly, we generate the coordinates of the control points.
+% \begin{macrocode}
+\int_step_inline:nnnn {0} {1} {\l_hobby_npoints_int - 1} {
+\array_gput:Nnx \l_hobby_controla_array {##1 + 1} {x = \fp_eval:n {
+(\array_get:Nn \l_hobby_points_x_array {##1})
++
+ (\array_get:Nn \l_hobby_distances_array {##1}) *
+ (\array_get:Nn \l_hobby_rho_array {##1}) *
+cos ( (\array_get:Nn \l_hobby_angles_array {##1})
++
+ (\array_get:Nn \l_hobby_theta_array {##1}))
+/3
+}, y = \fp_eval:n {
+( \array_get:Nn \l_hobby_points_y_array {##1}) +
+ (\array_get:Nn \l_hobby_distances_array {##1}) *
+ (\array_get:Nn \l_hobby_rho_array {##1}) *
+sin ( (\array_get:Nn \l_hobby_angles_array {##1})
++
+ (\array_get:Nn \l_hobby_theta_array {##1}))
+/3
+}
+}
+}
+\int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int} {
+ \array_gput:Nnx \l_hobby_controlb_array {##1} {
+ x = \fp_eval:n {\array_get:Nn \l_hobby_points_x_array {##1}
+- (\array_get:Nn \l_hobby_distances_array {##1 - 1})
+* (\array_get:Nn \l_hobby_sigma_array {##1})
+* cos((\array_get:Nn \l_hobby_angles_array {##1 - 1})
+- (\array_get:Nn \l_hobby_phi_array {##1}))/3
+}, y = \fp_eval:n {
+ (\array_get:Nn \l_hobby_points_y_array {##1})
+- (\array_get:Nn \l_hobby_distances_array {##1 - 1})
+* (\array_get:Nn \l_hobby_sigma_array {##1})
+* sin((\array_get:Nn \l_hobby_angles_array {##1 - 1})
+- (\array_get:Nn \l_hobby_phi_array {##1}))/3
+} }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbyinit}
+% Initialise the settings for Hobby's algorithm
+% \begin{macrocode}
+\NewDocumentCommand \hobbyinit {m m m} {
+ \hobby_set_cmds:nnn#1#2#3
+ \hobby_clear_path:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbyaddpoint}
+% This adds a point, possibly with tensions, to the current stack.
+% \begin{macrocode}
+\NewDocumentCommand \hobbyaddpoint { m } {
+ \keys_set:nn { hobby/read in all }
+ {
+ tension~out,
+ tension~in,
+ excess~angle,
+ blank,
+ break,
+ #1
+ }
+ \tl_if_eq:VnTF {\l_tmpa_tl} {true}
+ {\tl_set:Nn \l_tmpa_tl {2}}
+ {
+ \tl_if_eq:VnTF {\l_tmpa_tl} {soft}
+ {\tl_set:Nn \l_tmpa_tl {0}}
+ {\tl_set:Nn \l_tmpa_tl {1}}
+ }
+ \tl_if_eq:VnTF {\l_tmpb_tl} {true}
+ {\tl_put_right:Nn \l_tmpa_tl {1}}
+ {\tl_put_right:Nn \l_tmpa_tl {0}}
+ \array_gpush:Nx \l_hobby_actions_array {\l_tmpa_tl}
+ \array_gpush:Nx \l_hobby_tension_out_array {\fp_to_tl:N \l_hobby_tempc_fp}
+ \array_gpush:Nx \l_hobby_tension_in_array {\fp_to_tl:N \l_hobby_tempd_fp}
+ \array_gpush:Nx \l_hobby_excess_angle_array {\fp_to_tl:N \l_hobby_temps_fp}
+ \array_gpush:Nx \l_hobby_points_array {
+ x = \fp_use:N \l_hobby_tempa_fp,
+ y = \fp_use:N \l_hobby_tempb_fp }
+ \array_gpush:Nx \l_hobby_points_x_array {\fp_to_tl:N \l_hobby_tempa_fp}
+ \array_gpush:Nx \l_hobby_points_y_array {\fp_to_tl:N \l_hobby_tempb_fp}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbysetparams}
+% This sets the parameters for the curve.
+% \begin{macrocode}
+\NewDocumentCommand \hobbysetparams { m } {
+ \keys_set:nn { hobby / read in params }
+ {
+ #1
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_set_cmds:nnn}
+% The path-generation code doesn't know what to actually do with the path so the initialisation code will set some macros to do that.
+% This is an auxiliary command that sets these macros.
+% \begin{macrocode}
+\cs_new:Npn \hobby_moveto:nnn #1#2#3 {}
+\cs_new:Npn \hobby_curveto:nnn #1#2#3 {}
+\cs_new:Npn \hobby_close:n #1 {}
+\cs_generate_variant:Nn \hobby_moveto:nnn {VVV,nnV}
+\cs_generate_variant:Nn \hobby_curveto:nnn {VVV}
+\cs_generate_variant:Nn \hobby_close:n {V}
+\cs_new:Nn \hobby_set_cmds:nnn {
+ \cs_gset_eq:NN \hobby_moveto:nnn #1
+ \cs_gset_eq:NN \hobby_curveto:nnn #2
+ \cs_gset_eq:NN \hobby_close:n #3
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbygenpath}
+% This is the user (well, sort of) command that generates the curve.
+% \begin{macrocode}
+\NewDocumentCommand \hobbygenpath { } {
+ \array_if_empty:NF \l_hobby_points_array {
+ \hobby_gen_path:
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbygenifnecpath}
+% If the named path doesn't exist, it is generated and named.
+% If it does exist, we restore it.
+% Either way, we save it to the aux file.
+% \begin{macrocode}
+\NewDocumentCommand \hobbygenifnecpath { m } {
+ \tl_if_exist:cTF {g_hobby_#1_path}
+ {
+ \tl_use:c {g_hobby_#1_path}
+ }
+ {
+ \hobby_gen_path:
+ }
+ \hobby_save_path:n {#1}
+ \hobby_save_path_to_aux:x {#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbygenifnecusepath}
+% If the named path doesn't exist, it is generated and named.
+% If it does exist, we restore it.
+% Either way, we save it to the aux file.
+% \begin{macrocode}
+\NewDocumentCommand \hobbygenuseifnecpath { m } {
+ \tl_if_exist:cTF {g_hobby_#1_path}
+ {
+ \tl_use:c {g_hobby_#1_path}
+ }
+ {
+ \hobby_gen_path:
+ }
+ \hobby_save_path:n {#1}
+ \hobby_save_path_to_aux:x {#1}
+ \hobby_use_path:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbyusepath}
+% This is the user (well, sort of) command that uses the last generated curve.
+% \begin{macrocode}
+\NewDocumentCommand \hobbyusepath { m } {
+ \hobbysetparams{#1}
+ \hobby_use_path:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbysavepath}
+% This is the user (well, sort of) command that uses the last generated curve.
+% \begin{macrocode}
+\NewDocumentCommand \hobbysavepath { m } {
+ \hobby_save_path:n {#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbyrestorepath}
+% This is the user (well, sort of) command that uses the last generated curve.
+% \begin{macrocode}
+\NewDocumentCommand \hobbyrestorepath { m } {
+ \tl_if_exist:cT {g_hobby_#1_path} {
+ \tl_use:c {g_hobby_#1_path}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbyshowpath}
+% This is the user (well, sort of) command that uses the last generated curve.
+% \begin{macrocode}
+\NewDocumentCommand \hobbyshowpath { m } {
+ \tl_if_exist:cT {g_hobby_#1_path} {
+ \tl_show:c {g_hobby_#1_path}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbygenusepath}
+% This is the user (well, sort of) command that generates a curve and uses it.
+% \begin{macrocode}
+\NewDocumentCommand \hobbygenusepath { } {
+ \array_if_empty:NF \l_hobby_points_array {
+ \hobby_gen_path:
+ \hobby_use_path:
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobbyclearpath}
+% This is the user (well, sort of) command that generates a curve and uses it.
+% \begin{macrocode}
+\NewDocumentCommand \hobbyclearpath { } {
+ \hobby_clear_path:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_use_path:}
+% This is the command that uses the curve.
+% As the curve data is stored globally, the same data can be reused by calling this function more than once without calling the generating function.
+% \begin{macrocode}
+\tl_new:N \l_tmpc_tl
+\cs_new:Nn \hobby_use_path: {
+ \bool_if:NT \l_hobby_disjoint_bool {
+ \array_get:NnN \l_hobby_points_array {0} \l_tmpa_tl
+ \hobby_moveto:nnV {} {} \l_tmpa_tl
+ }
+ \int_step_inline:nnnn {1} {1} {\l_hobby_npoints_int} {
+ \array_get:NnN \l_hobby_controla_array {##1} \l_tmpa_tl
+ \array_get:NnN \l_hobby_controlb_array {##1} \l_tmpb_tl
+ \array_get:NnN \l_hobby_points_array {##1} \l_tmpc_tl
+ \array_get:NnN \l_hobby_actions_array {##1} \l_tmpd_tl
+ \int_compare:nNnTF {\tl_item:Nn \l_tmpd_tl {1}} = {\l_hobby_draw_int} {
+ \hobby_curveto:VVV \l_tmpa_tl \l_tmpb_tl \l_tmpc_tl
+ }{
+ \bool_gset_false:N \l_hobby_closed_bool
+ \hobby_moveto:VVV \l_tmpa_tl \l_tmpb_tl \l_tmpc_tl
+ }
+ \tl_if_eq:xnTF {\tl_item:Nn \l_tmpd_tl {2}} {1} {
+ \bool_gset_false:N \l_hobby_closed_bool
+ \hobby_moveto:VVV \l_tmpa_tl \l_tmpb_tl \l_tmpc_tl
+ }{}
+ }
+ \bool_if:NT \l_hobby_closed_bool {
+ \array_get:NnN \l_hobby_points_array {0} \l_tmpa_tl
+ \hobby_close:V \l_tmpa_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_save_path:n}
+% This command saves all the data needed to reinvoke the curve in a global token list that can be used to restore it afterwards.
+% \begin{macrocode}
+\cs_new:Nn \hobby_save_path:n {
+ \tl_clear:N \l_tmpa_tl
+ \tl_put_right:Nn \l_tmpa_tl {\int_gset:Nn \l_hobby_npoints_int}
+ \tl_put_right:Nx \l_tmpa_tl {{\int_use:N \l_hobby_npoints_int}}
+ \bool_if:NTF \l_hobby_disjoint_bool {
+ \tl_put_right:Nn \l_tmpa_tl {\bool_gset_true:N}
+ }{
+ \tl_put_right:Nn \l_tmpa_tl {\bool_gset_false:N}
+ }
+ \tl_put_right:Nn \l_tmpa_tl {\l_hobby_disjoint_bool}
+ \bool_if:NTF \l_hobby_closed_bool {
+ \tl_put_right:Nn \l_tmpa_tl {\bool_gset_true:N}
+ }{
+ \tl_put_right:Nn \l_tmpa_tl {\bool_gset_false:N}
+ }
+ \tl_put_right:Nn \l_tmpa_tl {\l_hobby_closed_bool}
+ \tl_put_right:Nn \l_tmpa_tl {\array_gclear:N \l_hobby_points_array}
+ \array_map_inline:Nn \l_hobby_points_array {
+ \tl_put_right:Nn \l_tmpa_tl {
+ \array_gput:Nnn \l_hobby_points_array {##1} {##2}
+ }
+ }
+ \tl_put_right:Nn \l_tmpa_tl {\array_gclear:N \l_hobby_actions_array}
+ \array_map_inline:Nn \l_hobby_actions_array {
+ \tl_put_right:Nn \l_tmpa_tl {
+ \array_gput:Nnn \l_hobby_actions_array {##1} {##2}
+ }
+ }
+ \tl_put_right:Nn \l_tmpa_tl {\array_gclear:N \l_hobby_controla_array}
+ \array_map_inline:Nn \l_hobby_controla_array {
+ \tl_put_right:Nn \l_tmpa_tl {
+ \array_gput:Nnn \l_hobby_controla_array {##1} {##2}
+ }
+ }
+ \tl_put_right:Nn \l_tmpa_tl {\array_gclear:N \l_hobby_controlb_array}
+ \array_map_inline:Nn \l_hobby_controlb_array {
+ \tl_put_right:Nn \l_tmpa_tl {
+ \array_gput:Nnn \l_hobby_controlb_array {##1} {##2}
+ }
+ }
+ \tl_gclear_new:c {g_hobby_#1_path}
+ \tl_gset_eq:cN {g_hobby_#1_path} \l_tmpa_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_save_path_to_aux:n}
+% \begin{macrocode}
+\int_set:Nn \l_tmpa_int {\char_value_catcode:n {`@}}
+\char_set_catcode_letter:N @
+\cs_new:Npn \hobby_save_path_to_aux:n #1 {
+ \bool_if:nT {
+ \tl_if_exist_p:c {g_hobby_#1_path}
+ &&
+ ! \tl_if_exist_p:c {g_hobby_#1_path_saved}
+ &&
+ \l_hobby_save_aux_bool
+ }
+ {
+ \tl_clear:N \l_tmpa_tl
+ \tl_put_right:Nn \l_tmpa_tl {
+ \ExplSyntaxOn
+ \tl_gclear_new:c {g_hobby_#1_path}
+ \tl_gput_right:cn {g_hobby_#1_path}
+ }
+ \tl_put_right:Nx \l_tmpa_tl {
+ {\tl_to_str:c {g_hobby_#1_path}}
+ }
+ \tl_put_right:Nn \l_tmpa_tl {
+ \ExplSyntaxOff
+ }
+ \protected@write\@auxout{}{
+ \tl_to_str:N \l_tmpa_tl
+ }
+ \tl_new:c {g_hobby_#1_path_saved}
+ }
+}
+\char_set_catcode:nn {`@} {\l_tmpa_int}
+\cs_generate_variant:Nn \hobby_save_path_to_aux:n {x}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby_clear_path:}
+% \begin{macrocode}
+\cs_new:Nn \hobby_clear_path:
+{
+\array_gclear:N \l_hobby_points_array
+\array_gclear:N \l_hobby_points_x_array
+\array_gclear:N \l_hobby_points_y_array
+\array_gclear:N \l_hobby_angles_array
+\array_gclear:N \l_hobby_actions_array
+\array_gclear:N \l_hobby_distances_array
+\array_gclear:N \l_hobby_tension_out_array
+\array_gclear:N \l_hobby_tension_in_array
+\array_gclear:N \l_hobby_excess_angle_array
+\array_gclear:N \l_hobby_matrix_a_array
+\array_gclear:N \l_hobby_matrix_b_array
+\array_gclear:N \l_hobby_matrix_c_array
+\array_gclear:N \l_hobby_matrix_d_array
+\array_gclear:N \l_hobby_vector_u_array
+\array_gclear:N \l_hobby_psi_array
+\array_gclear:N \l_hobby_theta_array
+\array_gclear:N \l_hobby_phi_array
+\array_gclear:N \l_hobby_sigma_array
+\array_gclear:N \l_hobby_rho_array
+\array_gclear:N \l_hobby_controla_array
+\array_gclear:N \l_hobby_controlb_array
+\bool_gset_false:N \l_hobby_closed_bool
+\bool_gset_false:N \l_hobby_disjoint_bool
+
+ \int_gset:Nn \l_hobby_npoints_int {-1}
+ \int_gset:Nn \l_hobby_draw_int {1}
+ \fp_gset_eq:NN \l_hobby_in_angle_fp \c_inf_fp
+ \fp_gset_eq:NN \l_hobby_out_angle_fp \c_inf_fp
+ \fp_gset_eq:NN \l_hobby_in_curl_fp \c_one_fp
+ \fp_gset_eq:NN \l_hobby_out_curl_fp \c_one_fp
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+% \iffalse
+%</hobby>
+% \fi
+%
+% \subsection{PGF Library}
+%
+% \iffalse
+%<*pgflibrary>
+% \fi
+%
+% The PGF level is very simple.
+% All we do is set up the path-construction commands that get passed to the path-generation function.
+% \begin{macrocode}
+\input{hobby.code.tex}
+% \end{macrocode}
+% Points are communicated as key-pairs.
+% These keys translate from the \LaTeX3 style points to PGF points.
+% \begin{macrocode}
+\pgfkeys{
+ /pgf/hobby/.is family,
+ /pgf/hobby/.cd,
+ x/.code={\pgf@x=#1cm},
+ y/.code={\pgf@y=#1cm}
+}
+% \end{macrocode}
+%
+% \begin{macro}{hobbyatan2}
+% The original PGF version of \Verb+atan2+ had the arguments the wrong way around.
+% This was fixed in the CVS version in July 2013, but as old versions are likely to be in use for some time, we define a wrapper function that ensures that the arguments are correct.
+% \begin{macrocode}
+\pgfmathparse{atan2(0,1)}
+\def\hobby@temp{0.0}
+\ifx\pgfmathresult\hobby@temp
+ \pgfmathdeclarefunction{hobbyatan2}{2}{%
+ \pgfmathatantwo@{#1}{#2}%
+ }
+\else
+ \pgfmathdeclarefunction{hobbyatan2}{2}{%
+ \pgfmathatantwo@{#2}{#1}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@curveto}
+% This is passed to the path-generation code to translate the path into a PGF path.
+% \begin{macrocode}
+\def\hobby@curveto#1#2#3{%
+ \pgfpathcurveto{\hobby@topgf{#1}}{\hobby@topgf{#2}}{\hobby@topgf{#3}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@moveto}
+% This is passed to the path-generation code to translate the path into a PGF path.
+% \begin{macrocode}
+\def\hobby@moveto#1#2#3{%
+ \pgfpathmoveto{\hobby@topgf{#3}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@topgf}
+% Translates a \LaTeX3 point to a PGF point.
+% \begin{macrocode}
+\def\hobby@topgf#1{%
+ \pgfqkeys{/pgf/hobby}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@close}
+% Closes a path.
+% \begin{macrocode}
+\def\hobby@close#1{%
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfpathhobby}
+% Low-level interface to the hobby construction.
+% This sets up the commands and starts the iterator.
+% \begin{macrocode}
+\def\pgfpathhobby{%
+ \pgfutil@ifnextchar\bgroup{\pgfpath@hobby}{\pgfpath@hobby{}}}
+\def\pgfpath@hobby#1{%
+ \hobbyinit\hobby@moveto\hobby@curveto\hobby@close
+ \hobbysetparams{#1}%
+ \pgfmathsetmacro\hobby@x{\the\pgf@path@lastx/1cm}%
+ \pgfmathsetmacro\hobby@y{\the\pgf@path@lasty/1cm}%
+ \hobbyaddpoint{x = \hobby@x, y = \hobby@y}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfpathhobbypt}
+% Adds a point to the construction
+% \begin{macrocode}
+\def\pgfpathhobbypt#1{%
+ #1%
+ \pgfmathsetmacro\hobby@x{\the\pgf@x/1cm}%
+ \pgfmathsetmacro\hobby@y{\the\pgf@y/1cm}%
+ \pgfutil@ifnextchar\bgroup{\pgfpathhobbyptparams}{\pgfpathhobbyptparams{}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfpathhobbyptparams}
+% \begin{macrocode}
+\def\pgfpathhobbyptparams#1{%
+ \hobbyaddpoint{#1,x = \hobby@x, y = \hobby@y}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfpathhobbyend}
+% \begin{macrocode}
+\def\pgfpathhobbyend{%
+ \ifhobby@externalise
+ \ifx\hobby@path@name\pgfutil@empty
+ \hobbygenusepath
+ \else
+ \hobbygenuseifnecpath{\hobby@path@name}%
+ \fi
+ \else
+ \hobbygenusepath
+ \fi
+ \ifx\hobby@path@name\pgfutil@empty
+ \else
+ \hobbysavepath{\hobby@path@name}%
+ \fi
+ \global\let\hobby@path@name=\pgfutil@empty
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Plot handlers
+%
+% \begin{macro}{\pgfplothanderhobby}
+% Basic plot handler; uses full algorithm but therefore expensive
+% \begin{macrocode}
+\def\pgfplothandlerhobby{%
+ \def\pgf@plotstreamstart{%
+ \hobbyinit\hobby@moveto\hobby@curveto\hobby@close
+ \global\let\pgf@plotstreampoint=\pgf@plot@hobby@firstpt
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble
+ \gdef\pgf@plotstreamend{%
+ \ifhobby@externalise
+ \ifx\hobby@path@name\pgfutil@empty
+ \hobbygenusepath
+ \else
+ \hobbygenuseifnecpath{\hobby@path@name}%
+ \fi
+ \else
+ \hobbygenusepath
+ \fi
+ \ifx\hobby@path@name\pgfutil@empty
+ \else
+ \hobbysavepath{\hobby@path@name}%
+ \fi
+ \global\let\hobby@path@name=\pgfutil@empty
+ }%
+ \let\tikz@scan@point@options=\pgfutil@empty
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfplothandlerclosedhobby}
+% Same as above but produces a closed curve
+% \begin{macrocode}
+\def\pgfplothandlerclosedhobby{%
+ \def\pgf@plotstreamstart{%
+ \hobbyinit\hobby@moveto\hobby@curveto\hobby@close
+ \hobbysetparams{closed=true,disjoint=true}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@hobby@firstpt
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble
+ \gdef\pgf@plotstreamend{%
+ \ifhobby@externalise
+ \ifx\hobby@path@name\pgfutil@empty
+ \hobbygenusepath
+ \else
+ \hobbygenuseifnecpath{\hobby@path@name}%
+ \fi
+ \else
+ \hobbygenusepath
+ \fi
+ \ifx\hobby@path@name\pgfutil@empty
+ \else
+ \hobbysavepath{\hobby@path@name}%
+ \fi
+ \global\let\hobby@path@name=\pgfutil@empty
+ }%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgf@plot@hobby@firstpt}
+% First point, move or line as appropriate and then start the algorithm.
+% \begin{macrocode}
+\def\pgf@plot@hobby@firstpt#1{%
+ \pgf@plot@first@action{#1}%
+ \pgf@plot@hobby@handler{#1}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@hobby@handler
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgf@plot@hobby@handler}
+% Add points to the array for the algorithm to work on.
+% \begin{macrocode}
+\def\pgf@plot@hobby@handler#1{%
+ #1%
+ \pgfmathsetmacro\hobby@x{\the\pgf@x/1cm}%
+ \pgfmathsetmacro\hobby@y{\the\pgf@y/1cm}%
+ \hobbyaddpoint{x = \hobby@x, y = \hobby@y}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfplothandlerquickhobby}
+% Uses the ``quick'' algorithm.
+% \begin{macrocode}
+\def\pgfplothandlerquickhobby{%
+ \def\pgf@plotstreamstart{%
+ \global\let\hobby@quick@curveto=\pgfpathcurveto
+ \global\let\pgf@plotstreampoint=\pgf@plot@qhobby@firstpt
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble
+ \global\let\pgf@plotstreamend=\pgf@plot@qhobby@end
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgf@plot@qhobby@firstpt}
+% Carry out first action (move or line) and save point.
+% \begin{macrocode}
+\def\pgf@plot@qhobby@firstpt#1{%
+ #1%
+ \edef\hobby@temp{\noexpand\pgf@plot@first@action{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}\hobby@temp%
+ \xdef\hobby@qpoints{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \gdef\hobby@qpointa{}%
+ \gdef\hobby@angle{}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@qhobby@secondpt
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgf@plot@qhobby@secondpt}
+% Also need to save second point.
+% \begin{macrocode}
+\def\pgf@plot@qhobby@secondpt#1{%
+ #1%
+ \xdef\hobby@qpointa{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@qhobby@handler
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgf@plot@qhobby@handler}
+% Wrapper around the computation macro that saves the variables globally.
+% \begin{macrocode}
+\def\pgf@plot@qhobby@handler#1{%
+ #1
+ \edef\hobby@temp{\noexpand\hobby@quick@compute{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}\hobby@temp
+ \global\let\hobby@qpointa=\hobby@qpointa
+ \global\let\hobby@qpoints=\hobby@qpoints
+ \global\let\hobby@angle=\hobby@angle
+% \end{macrocode}
+% Also need to save some data for the last point
+% \begin{macrocode}
+ \global\let\hobby@thetaone=\hobby@thetaone
+ \global\let\hobby@phitwo=\hobby@phitwo
+ \global\let\hobby@done=\hobby@done
+ \global\let\hobby@omegaone=\hobby@omegaone
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgf@plot@qhobby@end}
+% Wrapper around the finalisation step.
+% \begin{macrocode}
+\def\pgf@plot@qhobby@end{%
+ \hobby@quick@computeend
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@sf}
+% Working with points leads to computations out of range so we scale to get them into the computable arena.
+% \begin{macrocode}
+\pgfmathsetmacro\hobby@sf{10cm}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\hobby@quick@compute}
+% This is the macro that does all the work of computing the control points.
+% The argument is the current point, \Verb+\hobby@qpointa+ is the middle point, and \Verb+\hobby@qpoints+ is the first point.
+% \begin{macrocode}
+\def\hobby@quick@compute#1{%
+% \end{macrocode}
+% Save the current (second - counting from zero) point in \Verb+\pgf@xb+ and \Verb+\pgf@yb+.
+% \begin{macrocode}
+ #1%
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+% \end{macrocode}
+% Save the previous (first) point in \Verb+\pgf@xa+ and \Verb+\pgf@ya+.
+% \begin{macrocode}
+ \hobby@qpointa
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+% \end{macrocode}
+% Adjust so that \Verb+(\pgf@xb,\pgf@yb)+ is the vector from second to third.
+% Then compute and store the distance and angle of this vector.
+% We view this as the vector \emph{from} the midpoint and everything to do with that point has the suffix \Verb+one+.
+% Note that we divide by the scale factor here.
+% \begin{macrocode}
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgfmathsetmacro\hobby@done{sqrt((\pgf@xb/\hobby@sf)^2 + (\pgf@yb/\hobby@sf)^2)}%
+ \pgfmathsetmacro\hobby@omegaone{rad(hobbyatan2(\pgf@yb,\pgf@xb))}%
+% \end{macrocode}
+% Now we do the same with the vector from the zeroth to the first point.
+% \begin{macrocode}
+ \hobby@qpoints
+ \advance\pgf@xa by -\pgf@x
+ \advance\pgf@ya by -\pgf@y
+ \pgfmathsetmacro\hobby@dzero{sqrt((\pgf@xa/\hobby@sf)^2 + (\pgf@ya/\hobby@sf)^2)}%
+ \pgfmathsetmacro\hobby@omegazero{rad(hobbyatan2(\pgf@ya,\pgf@xa))}%
+% \end{macrocode}
+% \Verb+\hobby@psi+ is the angle subtended at the midpoint.
+% We adjust to ensure that it is in the right range.
+% \begin{macrocode}
+ \pgfmathsetmacro\hobby@psi{\hobby@omegaone - \hobby@omegazero}%
+ \pgfmathsetmacro\hobby@psi{\hobby@psi > pi ? \hobby@psi - 2*pi : \hobby@psi}%
+ \pgfmathsetmacro\hobby@psi{\hobby@psi < -pi ? \hobby@psi + 2*pi : \hobby@psi}%
+% \end{macrocode}
+% Now we test to see if we're on the first run or not.
+% If the first, we have no incoming angle.
+% \begin{macrocode}
+ \ifx\hobby@angle\pgfutil@empty
+% \end{macrocode}
+% First.
+% \begin{macrocode}
+ \pgfmathsetmacro\hobby@thetaone{-\hobby@psi * \hobby@done%
+/(\hobby@done + \hobby@dzero)}%
+ \pgfmathsetmacro\hobby@thetazero{-\hobby@psi - \hobby@thetaone}%
+ \let\hobby@phione=\hobby@thetazero
+ \let\hobby@phitwo=\hobby@thetaone
+ \else
+% \end{macrocode}
+% Second or later.
+% \begin{macrocode}
+ \let\hobby@thetazero=\hobby@angle
+ \pgfmathsetmacro\hobby@thetaone{%
+ -(2 * \hobby@psi + \hobby@thetazero) * \hobby@done%
+ / (2 * \hobby@done + \hobby@dzero)}%
+ \pgfmathsetmacro\hobby@phione{-\hobby@psi - \hobby@thetaone}%
+ \let\hobby@phitwo=\hobby@thetaone
+ \fi
+% \end{macrocode}
+% Save the outgoing angle.
+% \begin{macrocode}
+ \let\hobby@angle=\hobby@thetaone
+% \end{macrocode}
+% Compute the control points from the angles.
+% \begin{macrocode}
+ \hobby@quick@ctrlpts{\hobby@thetazero}{\hobby@phione}{\hobby@qpoints}{\hobby@qpointa}{\hobby@dzero}{\hobby@omegazero}%
+% \end{macrocode}
+% Now call the call-back function
+% \begin{macrocode}
+ \edef\hobby@temp{\noexpand\hobby@quick@curveto{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}{\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}%
+\hobby@temp
+% \end{macrocode}
+% Cycle the points round for the next iteration.
+% \begin{macrocode}
+ \global\let\hobby@qpoints=\hobby@qpointa
+ #1
+ \xdef\hobby@qpointa{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+% \end{macrocode}
+% Save needed values in global macros
+% \begin{macrocode}
+ \global\let\hobby@angle=\hobby@angle
+ \global\let\hobby@phitwo=\hobby@phitwo
+ \global\let\hobby@thetaone=\hobby@thetaone
+\global\let\hobby@done=\hobby@done
+\global\let\hobby@omegaone=\hobby@omegaone
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@wuick@computeend}
+% This is the additional code for the final run.
+% \begin{macrocode}
+\def\hobby@quick@computeend{%
+% \end{macrocode}
+% Compute the control points for the second part of the curve and add that to the path.
+% \begin{macrocode}
+ \hobby@quick@ctrlpts{\hobby@thetaone}{\hobby@phitwo}{\hobby@qpoints}{\hobby@qpointa}{\hobby@done}{\hobby@omegaone}%
+% \end{macrocode}
+% Now call the call-back function
+% \begin{macrocode}
+ \edef\hobby@temp{\noexpand\hobby@quick@curveto{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}{\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}%
+\hobby@temp
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@quick@ctrlpts}
+% Compute the control points from the angles and points given.
+% \begin{macrocode}
+\def\hobby@quick@ctrlpts#1#2#3#4#5#6{%
+ \pgfmathsetmacro\hobby@alpha{%
+ sqrt(2) * (sin(#1 r) - 1/16 * sin(#2 r))%
+* (sin(#2 r) - 1/16 * sin(#1 r))%
+ * (cos(#1 r) - cos(#2 r))}%
+ \pgfmathsetmacro\hobby@rho{%
+ (2 + \hobby@alpha)/(1 + (1 - (3 - sqrt(5))/2)%
+ * cos(#1 r) + (3 - sqrt(5))/2 * cos(#2 r))}%
+ \pgfmathsetmacro\hobby@sigma{%
+ (2 - \hobby@alpha)/(1 + (1 - (3 - sqrt(5))/2)%
+ * cos(#2 r) + (3 - sqrt(5))/2 * cos(#1 r))}%
+ #3%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfmathsetlength\pgf@xa{%
+ \pgf@xa + #5 * \hobby@rho%
+ * cos((#1 + #6) r)/3*\hobby@sf}%
+ \pgfmathsetlength\pgf@ya{%
+ \pgf@ya + #5 * \hobby@rho%
+ * sin((#1 + #6) r)/3*\hobby@sf}%
+ #4%
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgfmathsetlength\pgf@xb{%
+ \pgf@xb - #5 * \hobby@sigma%
+ * cos((-#2 + #6) r)/3*\hobby@sf}%
+ \pgfmathsetlength\pgf@yb{%
+ \pgf@yb - #5 * \hobby@sigma%
+ * sin((-#2 + #6) r)/3*\hobby@sf}%
+ #4%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</pgflibrary>
+% \fi
+%
+% \subsection{TikZ Library}
+%
+% \iffalse
+%<*tikzlibrary>
+% \fi
+%
+% \begin{macrocode}
+\usepgflibrary{hobby}
+\let\hobby@this@opts=\pgfutil@empty
+\let\hobby@next@opts=\pgfutil@empty
+\let\hobby@action=\pgfutil@empty
+\let\hobby@path@name=\pgfutil@empty
+\newif\ifhobby@externalise
+% \end{macrocode}
+%
+% We set various TikZ keys.
+% These include the \Verb+to path+ constructor and all the various parameters that will eventually get passed to the path-generation code.
+% \begin{macrocode}
+\def\hobby@point@options{}%
+\tikzset{
+ curve through/.style={
+ to path={
+ \pgfextra{
+ \expandafter\curvethrough\expandafter[\hobby@next@opts]{%
+ (\tikztostart) .. #1 .. (\tikztotarget)%
+ }
+ }
+ }
+ },
+ tension in/.code = {%
+ \expandafter\gdef\expandafter\hobby@point@options\expandafter%
+ {\hobby@point@options,tension in=#1}%
+ },
+ tension out/.code = {%
+ \expandafter\gdef\expandafter\hobby@point@options\expandafter%
+ {\hobby@point@options,tension out=#1}%
+ },
+ tension/.code = {%
+ \expandafter\gdef\expandafter\hobby@point@options\expandafter%
+ {\hobby@point@options,tension=#1}%
+ },
+ excess angle/.code = {%
+ \expandafter\gdef\expandafter\hobby@point@options\expandafter%
+ {\hobby@point@options,excess angle=#1}%
+ },
+ break/.code = {%
+ \expandafter\gdef\expandafter\hobby@point@options\expandafter%
+ {\hobby@point@options,break=#1}%
+ },
+ blank/.code = {%
+ \expandafter\gdef\expandafter\hobby@point@options\expandafter%
+ {\hobby@point@options,blank=#1}%
+ },
+ designated Hobby path/.initial={next},
+ clear next Hobby path options/.code={%
+ \gdef\hobby@next@opts{}%
+ },
+ clear this Hobby path options/.code={%
+ \gdef\hobby@this@opts{}%
+ },
+ clear Hobby path options/.style={%
+ clear \pgfkeysvalueof{/tikz/designated Hobby path} Hobby path options
+ },
+ add option to this Hobby path/.code={%
+ \expandafter\gdef\expandafter\hobby@this@opts\expandafter{\hobby@this@opts#1,}%
+ },
+ add option to next Hobby path/.code={%
+ \expandafter\gdef\expandafter\hobby@next@opts\expandafter{\hobby@next@opts#1,}%
+ },
+ add option to Hobby path/.style={%
+ add option to \pgfkeysvalueof{/tikz/designated Hobby path} Hobby path={#1}%
+ },
+ closed/.style = {%
+ add option to Hobby path={closed=#1,disjoint=#1}%
+ },
+ invert blank/.style = {%
+ add option to Hobby path={invert blank=#1}%
+ },
+ closed/.default = true,
+ blank/.default = true,
+ break/.default = true,
+ invert blank/.default = true,
+ in angle/.code = {%
+ \pgfmathparse{(#1)*pi/180}%
+ \edef\@temp{in angle=\pgfmathresult,}%
+ \pgfkeysalso{add option to Hobby path/.expand once=\@temp}%
+ },
+ out angle/.code = {%
+ \pgfmathparse{(#1)*pi/180}%
+ \edef\@temp{out angle=\pgfmathresult,}%
+ \pgfkeysalso{add option to Hobby path/.expand once=\@temp}%
+ },
+ in curl/.style = {%
+ add option to Hobby path={in curl=#1}%
+ },
+ out curl/.code = {%
+ add option to Hobby path={out curl=#1}%
+ },
+ use Hobby shortcut/.code={%
+ \let\tikz@curveto@auto=\hobby@curveto@override
+ \global\let\hobby@curveto@delegate=\hobby@curveto@auto
+ },
+ use quick Hobby shortcut/.code={%
+ \let\tikz@curveto@auto=\hobby@curveto@override
+ \global\let\hobby@curveto@delegate=\hobby@qcurveto@auto
+ },
+ use previous Hobby path/.code={%
+ \pgfextra{\hobbyusepath{#1}}
+ },
+ use previous Hobby path/.default={},%
+ save Hobby path/.code={%
+ \xdef\hobby@path@name{#1}%
+ },
+ restore Hobby path/.code={%
+ \pgfextra{%
+ \hobbyinit\hobby@tikz@moveto\hobby@tikz@curveto\hobby@tikz@close
+ \global\let\hobby@collected@onpath\pgfutil@empty
+ \hobbyrestorepath{#1}}
+ },
+ restore and use Hobby path/.code 2 args={%
+ \pgfextra{%
+ \hobbyinit\hobby@tikz@moveto\hobby@tikz@curveto\hobby@tikz@close
+ \global\let\hobby@collected@onpath\pgfutil@empty
+ \hobbyrestorepath{#1}%
+ \hobbyusepath{#2}%
+ }
+ },
+ show Hobby path/.code={%
+ \pgfextra{\hobbyshowpath{#1}}
+ },
+ Hobby action/.code={%
+ \expandafter\gdef\expandafter\hobby@action\expandafter{\hobby@action#1}%
+ },
+ Hobby finish/.style={%
+ Hobby action=\hobby@finish%
+ },
+ Hobby externalise/.is if=hobby@externalise,
+ Hobby externalize/.is if=hobby@externalise
+}
+% \end{macrocode}
+%
+% \begin{macro}{\hobby@tikz@curveto}
+% This is passed to the path-generation code to translate the path into a PGF path.
+% \begin{macrocode}
+\def\hobby@tikz@curveto#1#2#3{%
+ \pgfutil@ifundefined{tikz@timer@start}{%
+ \expandafter\hobby@topgf\expandafter{\hobby@initial@pt}%
+ \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ }{}%
+ \hobby@topgf{#1}%
+ \edef\tikz@timer@cont@one{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \hobby@topgf{#2}%
+ \edef\tikz@timer@cont@two{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \hobby@topgf{#3}%
+ \let\tikz@timer=\tikz@timer@curve
+ \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \ifx\hobby@collected@onpath\pgfutil@empty
+ \else
+ \expandafter\hobby@nodes@onpath\hobby@collected@onpath\relax\relax
+ \fi
+ \pgfpathcurveto{\hobby@topgf{#1}}{\hobby@topgf{#2}}{\hobby@topgf{#3}}%
+ \hobby@topgf{#3}%
+ \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@tikz@moveto}
+% This is passed to the path-generation code to translate the path into a PGF path.
+% \begin{macrocode}
+\def\hobby@tikz@moveto#1#2#3{%
+ \pgfutil@ifundefined{tikz@timer@start}{%
+ \expandafter\hobby@topgf\expandafter{\hobby@initial@pt}%
+ \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ }{}%
+ \hobby@topgf{#3}%
+ \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \def\pgf@temp{#1}%
+ \ifx\pgf@temp\pgfutil@empty
+ \let\tikz@timer=\tikz@timer@line
+ \expandafter\def\expandafter\hobby@collected@onpath\expandafter{\expandafter{\expandafter}\hobby@collected@onpath}
+ \else
+ \hobby@topgf{#1}%
+ \edef\tikz@timer@cont@one{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \hobby@topgf{#2}%
+ \edef\tikz@timer@cont@two{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \let\tikz@timer=\tikz@timer@curve
+ \fi
+ \ifx\hobby@collected@onpath\pgfutil@empty
+ \else
+ \expandafter\hobby@nodes@onpath\hobby@collected@onpath\relax\relax
+ \fi
+ \pgfpathmoveto{\hobby@topgf{#3}}%
+ \hobby@topgf{#3}%
+ \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@tikz@close}
+% Closes a path.
+% \begin{macrocode}
+\def\hobby@tikz@close#1{%
+ \hobby@topgf{#1}%
+ \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \let\tikz@timer=\tikz@timer@line
+ \ifx\hobby@collected@onpath\pgfutil@empty
+ \else
+ \expandafter\hobby@nodes@onpath\hobby@collected@onpath\relax\relax
+ \fi
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@nodes@onpath}
+% \begin{macrocode}
+\def\hobby@nodes@onpath#1#2\relax{%
+ \gdef\hobby@collected@onpath{#2}%
+ \def\pgf@temp{#1}%
+ \ifx\pgf@temp\pgfutil@empty
+ \else
+ \def\@gtempa{\relax}
+ \ifx\pgf@temp\@gtempa
+ \else
+ \tikz@node@is@a@labeltrue
+ \tikz@scan@next@command#1\pgf@stop
+ \tikz@node@is@a@labelfalse
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\curvethrough}
+% This is the parent command.
+% We initialise the path-generation code, set any parameters, and then hand over control to the point processing macro.
+% \begin{macrocode}
+\newcommand\curvethrough[2][]{%
+ \hobbyinit\hobby@tikz@moveto\hobby@tikz@curveto\hobby@tikz@close
+ \global\let\hobby@collected@onpath\pgfutil@empty
+ \let\hobby@initial@pt\pgfutil@empty
+ \hobbysetparams{#1}%
+ \tikzset{designated Hobby path=this}%
+ \global\let\hobby@this@opts=\pgfutil@empty
+ \global\let\hobby@next@opts=\pgfutil@empty
+ \let\tikz@scan@point@options=\pgfutil@empty
+ \def\hobby@point@options{}%
+ \tikz@scan@one@point\hobby@processpt #2 \relax%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@processpt}
+% This processes a list of points in the format \Verb+(0,0) [..] (1,1)+.
+% Each point is scanned by TikZ and then added to the stack to be built into the path.
+% If there are any remaining points, we call ourself again with them.
+% Otherwise, we hand over control to the path-generation code.
+% \begin{macrocode}
+\newcommand\hobby@processpt[1]{%
+ #1%
+ \pgfmathsetmacro\hobby@x{\the\pgf@x/1cm}%
+ \pgfmathsetmacro\hobby@y{\the\pgf@y/1cm}%
+ \ifx\hobby@initial@pt\pgfutil@empty
+ \xdef\hobby@initial@pt{x = \hobby@x, y = \hobby@y}%
+ \fi
+ \expandafter\hobbyaddpoint\expandafter{\hobby@point@options,%
+ x = \hobby@x, y = \hobby@y}%
+ \def\hobby@point@options{}%
+ \let\tikz@scan@point@options=\pgfutil@empty
+ \pgfutil@ifnextchar\relax{%
+ \expandafter\hobbysetparams\expandafter{\hobby@this@opts}%
+ \ifhobby@externalise
+ \ifx\hobby@path@name\pgfutil@empty
+ \hobbygenusepath
+ \else
+ \hobbygenuseifnecpath{\hobby@path@name}%
+ \fi
+ \else
+ \hobbygenusepath
+ \fi
+ \ifx\hobby@path@name\pgfutil@empty
+ \else
+ \hobbysavepath{\hobby@path@name}%
+ \fi
+ \global\let\hobby@path@name=\pgfutil@empty
+ }{%
+ \pgfutil@ifnextchar.{%
+ \hobby@swallowdots}{%
+ \tikz@scan@one@point\hobby@processpt}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@swallowdots}
+% Remove dots from the input stream.
+% \begin{macrocode}
+\def\hobby@swallowdots.{%
+ \pgfutil@ifnextchar.{%
+ \hobby@swallowdots}{%
+ \tikz@scan@one@point\hobby@processpt}}
+% \end{macrocode}
+% \end{macro}
+%
+% There is a ``spare hook'' in the TikZ path processing code.
+% If TikZ encounters a path of the form \Verb+(0,0) .. (1,1)+ then it calls a macro \Verb+\tikz@curveto@auto+.
+% However, that macro is not defined in the TikZ code.
+% The following code provides a suitable definition.
+% To play nice, we don't install it by default but define a key (defined above) that installs it.
+%
+% \begin{macro}{\hobby@curveto@override}
+% \begin{macrocode}
+\def\hobby@curveto@override{%
+ \hobby@curveto@delegate}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@curveto@auto}
+% When we're called by TikZ, we initialise the path generation code and start adding points.
+% To ensure that the generation code is called, we add a lot of hooks to lots of TikZ commands.
+% \begin{macrocode}
+\def\hobby@curveto@auto{%
+ \hobbyinit\hobby@tikz@moveto\hobby@tikz@curveto\hobby@tikz@close
+ \expandafter\gdef\expandafter\hobby@collected@onpath\expandafter{\expandafter{\tikz@collected@onpath} }%
+ \let\tikz@collected@onpath=\pgfutil@empty
+ \pgfmathsetmacro\hobby@x{\the\tikz@lastx/1cm}%
+ \pgfmathsetmacro\hobby@y{\the\tikz@lasty/1cm}%
+ \xdef\hobby@initial@pt{x = \hobby@x, y = \hobby@y}%
+ \expandafter\hobbysetparams\expandafter{\hobby@next@opts}%
+ \expandafter\hobbyaddpoint\expandafter{\hobby@point@options,%
+ x = \hobby@x, y = \hobby@y}%
+ \hobby@init@tikz@commands
+ \tikzset{designated Hobby path=this}%
+ \let\tikz@scan@point@options=\pgfutil@empty
+ \global\let\hobby@action=\pgfutil@empty
+ \global\let\hobby@this@opts=\pgfutil@empty
+ \global\let\hobby@next@opts=\pgfutil@empty
+ \global\let\hobby@point@options=\pgfutil@empty
+ \tikz@scan@one@point\hobby@addfromtikz%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@addfromtikz}
+% This adds our current point to the stack.
+% \begin{macrocode}
+\def\hobby@addfromtikz#1{%
+ #1%
+ \tikz@make@last@position{#1}%
+ \pgfmathsetmacro\hobby@x{\the\pgf@x/1cm}%
+ \pgfmathsetmacro\hobby@y{\the\pgf@y/1cm}%
+ \expandafter\hobbysetparams\expandafter{\hobby@this@opts}%
+ \expandafter\hobbyaddpoint\expandafter{\hobby@point@options,%
+ x = \hobby@x, y = \hobby@y}%
+ \hobby@action
+ \global\let\hobby@this@opts=\pgfutil@empty
+ \global\let\hobby@action=\pgfutil@empty
+ \global\let\hobby@point@options=\pgfutil@empty
+ \tikz@scan@next@command%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@init@tikz@commands}
+% \begin{macrocode}
+\def\hobby@init@tikz@commands{%
+ \hobby@init@tikz@modcmd\tikz@movetoabs
+ \hobby@init@tikz@modcmd\tikz@movetorel
+ \hobby@init@tikz@modcmd\tikz@lineto
+ \hobby@init@tikz@modcmd\tikz@rect
+ \hobby@init@tikz@modcmd\tikz@cchar
+ \hobby@init@tikz@modcmd\tikz@finish
+ \hobby@init@tikz@modcmd\tikz@arcA
+ \hobby@init@tikz@modcmd\tikz@e@char
+ \hobby@init@tikz@modcmd\tikz@g@char
+ \hobby@init@tikz@modcmd\tikz@schar
+ \hobby@init@tikz@modcmd\tikz@vh@lineto
+ \hobby@init@tikz@modcmd\tikz@pchar
+ \hobby@init@tikz@modcmd\tikz@to
+ \hobby@init@tikz@modcmd\pgf@stop
+ \hobby@init@tikz@modcmd\tikz@decoration
+ \global\let\hobby@curveto@delegate=\hobby@midcurveto@auto
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@restore@tikz@commands}
+% \begin{macrocode}
+\def\hobby@restore@tikz@commands{%
+ \hobby@restore@tikz@modcmd\tikz@movetoabs
+ \hobby@restore@tikz@modcmd\tikz@movetorel
+ \hobby@restore@tikz@modcmd\tikz@lineto
+ \hobby@restore@tikz@modcmd\tikz@rect
+ \hobby@restore@tikz@modcmd\tikz@cchar
+ \hobby@restore@tikz@modcmd\tikz@finish
+ \hobby@restore@tikz@modcmd\tikz@arcA
+ \hobby@restore@tikz@modcmd\tikz@e@char
+ \hobby@restore@tikz@modcmd\tikz@g@char
+ \hobby@restore@tikz@modcmd\tikz@schar
+ \hobby@restore@tikz@modcmd\tikz@vh@lineto
+ \hobby@restore@tikz@modcmd\tikz@pchar
+ \hobby@restore@tikz@modcmd\tikz@to
+ \hobby@restore@tikz@modcmd\pgf@stop
+ \hobby@restore@tikz@modcmd\tikz@decoration
+ \global\let\hobby@curveto@delegate=\hobby@curveto@auto
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@init@tikz@modcmd}
+% \begin{macrocode}
+\def\hobby@init@tikz@modcmd#1{%
+ \expandafter\global\expandafter\let\csname hobby@orig@\string#1\endcsname=#1%
+ \gdef#1{\hobby@finish#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@restore@tikz@modcmd}
+% \begin{macrocode}
+\def\hobby@restore@tikz@modcmd#1{%
+ \expandafter\global\expandafter\let\expandafter#1\csname hobby@orig@\string#1\endcsname%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@midcurveto@auto}
+% \begin{macrocode}
+\def\hobby@midcurveto@auto{%
+ \expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\hobby@collected@onpath\expandafter\expandafter\expandafter{\expandafter\hobby@collected@onpath\expandafter{\tikz@collected@onpath} }%
+ \let\tikz@collected@onpath=\pgfutil@empty
+ \let\tikz@scan@point@options=\pgfutil@empty
+ \global\let\hobby@action=\pgfutil@empty
+ \global\let\hobby@this@opts=\pgfutil@empty
+ \global\let\hobby@point@options=\pgfutil@empty
+ \tikz@scan@one@point\hobby@addfromtikz%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@finish}
+% \begin{macrocode}
+\def\hobby@finish{%
+ \hobby@restore@tikz@commands
+ \ifhobby@externalise
+ \ifx\hobby@path@name\pgfutil@empty
+ \hobbygenusepath
+ \else
+ \hobbygenuseifnecpath{\hobby@path@name}%
+ \fi
+ \else
+ \hobbygenusepath
+ \fi
+ \ifx\hobby@path@name\pgfutil@empty
+ \else
+ \hobbysavepath{\hobby@path@name}%
+ \fi
+ \global\let\hobby@path@name=\pgfutil@empty
+ \tikzset{designated Hobby path=next}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{quick curve through}
+% The \Verb+quick curve through+ is a \Verb+to path+ which does the ``quick'' version of Hobby's algorithm.
+% The syntax is as with the \Verb+curve through+: to pass the midpoints as the argument to the style.
+% We need to pass three points to the auxiliary macro.
+% These are passed as \Verb+\hobby@qpoints+, \Verb+\hobby@qpointa+, and the current point.
+% Then these get cycled round for the next triple.
+% The path gets built up and stored as \Verb+\hobby@quick@path+.
+% We also have to remember the angle computed for the next round.
+% \begin{macrocode}
+\tikzset{
+ quick curve through/.style={%
+ to path={%
+ \pgfextra{%
+% \end{macrocode}
+% Scan the starting point and store the coordinates in \Verb+\hobby@qpointa+
+% \begin{macrocode}
+ \let\hobby@next@qbreak=\relax
+ \let\hobby@next@qblank=\relax
+ \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)%
+ \tikz@make@last@position{\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \edef\hobby@qpoints{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+% \end{macrocode}
+% Blank the path and auxiliary macros.
+% \begin{macrocode}
+ \def\hobby@qpointa{}%
+ \def\hobby@quick@path{}%
+ \def\hobby@angle{}%
+ \let\hobby@quick@curveto=\hobby@quick@makepath
+% \end{macrocode}
+% Now start parsing the rest of the coordinates.
+% \begin{macrocode}
+ \tikz@scan@one@point\hobby@quickfirst #1 (\tikztotarget)\relax
+ }
+% \end{macrocode}
+% Invoke the path
+% \begin{macrocode}
+ \hobby@quick@path
+ }
+ },
+ quick hobby/blank curve/.is choice,
+ quick hobby/blank curve/true/.code={%
+ \gdef\hobby@next@qblank{%
+ \qhobby@blanktrue
+ \global\let\hobby@next@qblank=\relax
+ }%
+ },
+ quick hobby/blank curve/false/.code={%
+ \gdef\hobby@next@qblank{%
+ \qhobby@blankfalse
+ \global\let\hobby@next@qblank=\relax
+ }%
+ },
+ quick hobby/blank curve/once/.code={%
+ \gdef\hobby@next@qblank{%
+ \qhobby@blanktrue
+ \gdef\hobby@next@qblank{%
+ \qhobby@blankfalse
+ \global\let\hobby@next@qblank=\relax
+ }%
+ }%
+ },
+ quick hobby/blank curve/.default=true,
+ quick hobby/break curve/.is choice,
+ quick hobby/break curve/true/.code={%
+ \gdef\hobby@next@qbreak{%
+ \qhobby@breaktrue
+ \global\let\hobby@next@qbreak=\relax
+ }%
+ },
+ quick hobby/break curve/false/.code={%
+ \gdef\hobby@next@qbreak{%
+ \qhobby@breakfalse
+ \global\let\hobby@next@qbreak=\relax
+ }%
+ },
+ quick hobby/break curve/once/.code={%
+ \gdef\hobby@next@qbreak{%
+ \qhobby@breaktrue
+ \gdef\hobby@next@qbreak{%
+ \qhobby@breakfalse
+ \global\let\hobby@next@qbreak=\relax
+ }%
+ }%
+ },
+ quick hobby/break curve/.default=true,
+}
+\newif\ifqhobby@break
+\newif\ifqhobby@blank
+% \end{macrocode}
+% \end{macro}
+%
+% Add plot handlers
+% \begin{macrocode}
+\tikzoption{hobby}[]{\let\tikz@plot@handler=\pgfplothandlerhobby}
+\tikzoption{quick hobby}[]{\let\tikz@plot@handler=\pgfplothandlerquickhobby}
+\tikzoption{closed hobby}[]{\let\tikz@plot@handler=\pgfplothandlerclosedhobby}
+% \end{macrocode}
+%
+% \begin{macro}{\hobby@quickfirst}
+% The first time around we just set the next point.
+% \begin{macrocode}
+\def\hobby@quickfirst#1{%
+ #1%
+ \xdef\hobby@qpointa{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \tikz@make@last@position{\hobby@qpointa}%
+% \end{macrocode}
+% Now a check to ensure that we have more points.
+% \begin{macrocode}
+ \pgfutil@ifnextchar\relax{%
+% \end{macrocode}
+% Ooops, no more points.
+% That's not good.
+% Bail-out.
+% \begin{macrocode}
+ \xdef\hobby@quick@path{ -- (\the\pgf@x,\the\pgf@y)}%
+ }{%
+% \end{macrocode}
+% Okay, have more points.
+% Phew.
+% Call the next round.
+% If we have dots, swallow them.
+% \begin{macrocode}
+ \pgfutil@ifnextchar.{%
+ \hobby@qswallowdots}{%
+ \tikz@scan@one@point\hobby@quick}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qswallowdots}
+% Remove dots from the input stream.
+% \begin{macrocode}
+\def\hobby@qswallowdots.{%
+ \pgfutil@ifnextchar.{%
+ \hobby@qswallowdots}{%
+ \tikz@scan@one@point\hobby@quick}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@quick}
+% This is our wrapper function that handles the loop.
+% \begin{macrocode}
+\def\hobby@quick#1{%
+ \hobby@quick@compute{#1}%
+ \tikz@make@last@position{\hobby@qpointa}%
+ \pgfutil@ifnextchar\relax{%
+% \end{macrocode}
+% End of loop
+% \begin{macrocode}
+ \hobby@quick@computeend%
+ }{%
+% \end{macrocode}
+% More to go, scan in the next coordinate and off we go again.
+% \begin{macrocode}
+ \pgfutil@ifnextchar.{%
+ \hobby@qswallowdots}{%
+ \tikz@scan@one@point\hobby@quick}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@quick@makepath}
+% Path constructor for \Verb+to path+ use.
+% \begin{macrocode}
+\def\hobby@quick@makepath#1#2#3{%
+ #1%
+ \pgf@xa=\pgf@x\relax
+ \pgf@ya=\pgf@y\relax
+ #2%
+ \pgf@xb=\pgf@x\relax
+ \pgf@yb=\pgf@y\relax
+ #3%
+ \ifqhobby@blank
+ \xdef\hobby@quick@path{\hobby@quick@path (\the\pgf@x,\the\pgf@y)}%
+ \else
+ \xdef\hobby@quick@path{\hobby@quick@path .. controls%
+ (\the\pgf@xa,\the\pgf@ya) and (\the\pgf@xb,\the\pgf@yb) .. (\the\pgf@x,\the\pgf@y) }%
+ \fi
+ \ifqhobby@break
+ \xdef\hobby@quick@path{\hobby@quick@path +(0,0)}%
+ \fi
+ \hobby@next@qbreak
+ \hobby@next@qblank
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qcurveto@auto}
+% Uses the ``quick'' method for the shortcut syntax.
+% \begin{macrocode}
+\def\hobby@qcurveto@auto{%
+ \global\let\hobby@next@qbreak=\relax
+ \global\let\hobby@next@qblank=\relax
+ \xdef\hobby@qpoints{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
+ \gdef\hobby@qpointa{}%
+ \gdef\hobby@quick@path{}%
+ \gdef\hobby@angle{}%
+ \global\let\hobby@quick@curveto=\hobby@quick@makepathauto
+ \hobby@qinit@tikz@commands
+ \let\tikz@scan@point@options=\pgfutil@empty
+ \global\let\hobby@action=\pgfutil@empty
+ \global\let\hobby@point@options=\pgfutil@empty
+ \tikz@scan@one@point\hobby@qfirst@auto}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qmidcurveto@auto}
+% \begin{macrocode}
+\def\hobby@qmidcurveto@auto{%
+ \let\tikz@scan@point@options=\pgfutil@empty
+ \global\let\hobby@action=\pgfutil@empty
+ \global\let\hobby@point@options=\pgfutil@empty
+ \tikz@scan@one@point\hobby@qaddfromtikz}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qfirst@auto}
+% \begin{macrocode}
+\def\hobby@qfirst@auto#1{%
+ #1%
+ \xdef\hobby@qpointa{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \tikz@make@last@position{\hobby@qpointa}%
+ \tikz@scan@next@command%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@quick@makepathauto}
+% Path constructor for shortcut method to use.
+% \begin{macrocode}
+\def\hobby@quick@makepathauto#1#2#3{%
+ #1%
+ \pgf@xa=\pgf@x\relax
+ \pgf@ya=\pgf@y\relax
+ #2%
+ \pgf@xb=\pgf@x\relax
+ \pgf@yb=\pgf@y\relax
+ #3%
+ \ifqhobby@blank
+ \edef\hobby@temp{%
+ \noexpand\pgfpathmoveto{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ }%
+ \hobby@temp
+ \else
+ \edef\hobby@temp{%
+ \noexpand\pgfpathcurveto{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}%
+ {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ }%
+ \hobby@temp
+ \fi
+ \ifqhobby@break
+ #3%
+ \edef\hobby@temp{%
+ \noexpand\pgfpathmoveto{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ }%
+ \hobby@temp
+ \fi
+ \hobby@next@qbreak
+ \hobby@next@qblank
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qaddfromtikz}
+% This adds our current point to the stack.
+% \begin{macrocode}
+\def\hobby@qaddfromtikz#1{%
+ \hobby@quick@compute{#1}%
+ \tikz@make@last@position{\hobby@qpointa}%
+ \tikz@scan@next@command%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qinit@tikz@commands}
+% \begin{macrocode}
+\def\hobby@qinit@tikz@commands{%
+ \hobby@qinit@tikz@modcmd\tikz@movetoabs
+ \hobby@qinit@tikz@modcmd\tikz@movetorel
+ \hobby@qinit@tikz@modcmd\tikz@lineto
+ \hobby@qinit@tikz@modcmd\tikz@rect
+ \hobby@qinit@tikz@modcmd\tikz@cchar
+ \hobby@qinit@tikz@modcmd\tikz@finish
+ \hobby@qinit@tikz@modcmd\tikz@arcA
+ \hobby@qinit@tikz@modcmd\tikz@e@char
+ \hobby@qinit@tikz@modcmd\tikz@g@char
+ \hobby@qinit@tikz@modcmd\tikz@schar
+ \hobby@qinit@tikz@modcmd\tikz@vh@lineto
+ \hobby@qinit@tikz@modcmd\tikz@pchar
+ \hobby@qinit@tikz@modcmd\tikz@to
+ \hobby@qinit@tikz@modcmd\pgf@stop
+ \hobby@qinit@tikz@modcmd\tikz@decoration
+ \hobby@qinit@tikz@modcmd\tikz@@close
+ \global\let\hobby@curveto@delegate=\hobby@qmidcurveto@auto
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qrestore@tikz@commands}
+% \begin{macrocode}
+\def\hobby@qrestore@tikz@commands{%
+ \hobby@restore@tikz@modcmd\tikz@movetoabs
+ \hobby@restore@tikz@modcmd\tikz@movetorel
+ \hobby@restore@tikz@modcmd\tikz@lineto
+ \hobby@restore@tikz@modcmd\tikz@rect
+ \hobby@restore@tikz@modcmd\tikz@cchar
+ \hobby@restore@tikz@modcmd\tikz@finish
+ \hobby@restore@tikz@modcmd\tikz@arcA
+ \hobby@restore@tikz@modcmd\tikz@e@char
+ \hobby@restore@tikz@modcmd\tikz@g@char
+ \hobby@restore@tikz@modcmd\tikz@schar
+ \hobby@restore@tikz@modcmd\tikz@vh@lineto
+ \hobby@restore@tikz@modcmd\tikz@pchar
+ \hobby@restore@tikz@modcmd\tikz@to
+ \hobby@restore@tikz@modcmd\pgf@stop
+ \hobby@restore@tikz@modcmd\tikz@decoration
+ \hobby@restore@tikz@modcmd\tikz@@close
+ \global\let\hobby@curveto@delegate=\hobby@qcurveto@auto
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qinit@tikz@modcmd}
+% \begin{macrocode}
+\def\hobby@qinit@tikz@modcmd#1{%
+ \expandafter\global\expandafter\let\csname hobby@orig@\string#1\endcsname=#1%
+ \gdef#1{\hobby@qfinish#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hobby@qfinish}
+% \begin{macrocode}
+\def\hobby@qfinish{%
+ \hobby@quick@computeend
+ \hobby@qrestore@tikz@commands
+}
+% \end{macrocode}
+% \end{macro}
+
+% \iffalse
+%</tikzlibrary>
+% \fi
+%
+% \subsection{Arrays}
+%
+% \iffalse
+%<*array>
+% \fi
+%
+%
+% A lot of our data structures are really arrays.
+% These are implemented as \LaTeX3 ``property lists''.
+% For ease of use, an array is a property list with numeric entries together with entries ``base'' and ``top'' which hold the lowest and highest indices that have been set.
+%
+% \begin{macrocode}
+\RequirePackage{expl3}
+\ExplSyntaxOn
+% \end{macrocode}
+% Some auxiliary variables.
+% \begin{macrocode}
+\tl_new:N \l_array_tmp_tl
+\tl_new:N \l_array_show_tl
+\int_new:N \l_array_base_int
+\int_new:N \l_array_top_int
+\int_new:N \l_array_tmp_int
+% \end{macrocode}
+% The global variable \Verb+\g_array_base_int+ says what index a blank array should start with when pushed or unshifted.
+% \begin{macrocode}
+\int_new:N \g_array_base_int
+\int_set:Nn \g_array_base_int {0}
+% \end{macrocode}
+% \begin{macro}{\array_adjust_ends:Nn}
+% This ensures that the ``base'' and ``top'' are big enough to include the given index.
+% \begin{macrocode}
+\cs_new:Npn \array_adjust_ends:Nn #1#2 {
+ \prop_get:NnNTF #1 {base} \l_tmpa_tl
+ {
+ \int_compare:nNnTF {\l_tmpa_tl} > {#2}
+ {
+ \prop_put:Nnx #1 {base} {\int_eval:n {#2}}
+ }
+ {}
+ }
+ {
+ \prop_put:Nnx #1 {base} {\int_eval:n {#2}}
+ }
+ \prop_get:NnNTF #1 {top} \l_tmpa_tl
+ {
+ \int_compare:nNnTF {\l_tmpa_tl} < {#2}
+ {
+ \prop_put:Nnx #1 {top} {\int_eval:n {#2}}
+ }
+ {}
+ }
+ {
+ \prop_put:Nnx #1 {top} {\int_eval:n {#2}}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gadjust_ends:Nn}
+% This ensures that the ``base'' and ``top'' are big enough to include the given index.
+% (Global version)
+% \begin{macrocode}
+\cs_new:Npn \array_gadjust_ends:Nn #1#2 {
+ \prop_get:NnNTF #1 {base} \l_tmpa_tl
+ {
+ \int_compare:nNnTF {\l_tmpa_tl} > {#2}
+ {
+ \prop_gput:Nnx #1 {base} {\int_eval:n {#2}}
+ }
+ {}
+ }
+ {
+ \prop_gput:Nnx #1 {base} {\int_eval:n {#2}}
+ }
+ \prop_get:NnNTF #1 {top} \l_tmpa_tl
+ {
+ \int_compare:nNnTF {\l_tmpa_tl} < {#2}
+ {
+ \prop_gput:Nnx #1 {top} {\int_eval:n {#2}}
+ }
+ {}
+ }
+ {
+ \prop_gput:Nnx #1 {top} {\int_eval:n {#2}}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_put:Nnn}
+% When adding a value to an array we have to adjust the ends.
+% \begin{macrocode}
+\cs_new:Npn \array_put:Nnn #1#2#3 {
+ \exp_args:NNx \prop_put:Nnn #1 {\int_eval:n {#2}} {#3}
+ \array_adjust_ends:Nn #1{#2}
+}
+\cs_generate_variant:Nn \array_put:Nnn {Nnx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gput:Nnn}
+% When adding a value to an array we have to adjust the ends.
+% (Global version)
+% \begin{macrocode}
+\cs_new:Npn \array_gput:Nnn #1#2#3 {
+ \exp_args:NNx \prop_gput:Nnn #1 {\int_eval:n {#2}} {#3}
+ \array_gadjust_ends:Nn #1{#2}
+}
+\cs_generate_variant:Nn \array_gput:Nnn {Nnx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_get:NnN}
+% \begin{macrocode}
+\cs_new:Npn \array_get:NnN #1#2#3 {
+ \exp_args:NNx \prop_get:NnN #1 {\int_eval:n {#2}} #3
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\array_get:Nn}
+% \begin{macrocode}
+\cs_new:Npn \array_get:Nn #1#2 {
+ \exp_args:NNf \prop_item:Nn #1 { \int_eval:n {#2} }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_get:NnNTF}
+% \begin{macrocode}
+\cs_new:Npn \array_get:NnNTF #1#2#3#4#5 {
+ \exp_args:NNx \prop_get:NnNTF #1 {\int_eval:n {#2}} #3 {#4}{#5}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_if_empty:NTF}
+% \begin{macrocode}
+\prg_new_conditional:Npnn \array_if_empty:N #1 { p, T, F, TF }
+{
+ \if_meaning:w #1 \c_empty_prop
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_if_exist:NTF}
+% \begin{macrocode}
+\prg_new_eq_conditional:NNn \array_if_exist:N \cs_if_exist:N { p, T, F, TF }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_new:N}
+% \begin{macrocode}
+\cs_new_eq:NN \array_new:N \prop_new:N
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_clear:N}
+% \begin{macrocode}
+\cs_new_eq:NN \array_clear:N \prop_clear:N
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gclear:N}
+% \begin{macrocode}
+\cs_new_eq:NN \array_gclear:N \prop_gclear:N
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_map_function}
+% When stepping through an array, we want to iterate in order so a simple wrapper to \Verb+\prop_map_function+ is not enough.
+% This maps through every value from the base to the top so the function should be prepared to deal with a \Verb+\q_no_value+.
+% \begin{macrocode}
+\cs_new:Npn \array_map_function:NN #1#2
+{
+ \array_if_empty:NTF #1 {} {
+ \prop_get:NnNTF #1 {base} \l_array_tmp_tl {
+ \int_set:Nn \l_array_base_int {\l_array_tmp_tl}
+ }{
+ \int_set:Nn \l_array_base_int {0}
+ }
+ \prop_get:NnNTF #1 {top} \l_array_tmp_tl {
+ \int_set:Nn \l_array_top_int {\l_array_tmp_tl}
+ }{
+ \int_set:Nn \l_array_top_int {0}
+ }
+ \int_step_inline:nnnn {\l_array_base_int} {1} {\l_array_top_int} {
+ \array_get:NnN #1 {##1} \l_array_tmp_tl
+ \exp_args:NnV #2 {##1} \l_array_tmp_tl
+}
+} {}
+}
+\cs_generate_variant:Nn \array_map_function:NN { Nc }
+\cs_generate_variant:Nn \array_map_function:NN { c , cc }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_reverse_map_function}
+% This steps through the array in reverse order.
+% \begin{macrocode}
+\cs_new:Npn \array_reverse_map_function:NN #1#2
+{
+ \array_if_empty:NTF #1 {} {
+ \prop_get:NnNTF #1 {base} \l_array_tmp_tl {
+ \int_set:Nn \l_array_base_int {\l_array_tmp_tl}
+ }{
+ \int_set:Nn \l_array_base_int {0}
+ }
+ \prop_get:NnNTF #1 {top} \l_array_tmp_tl {
+ \int_set:Nn \l_array_top_int {\l_array_tmp_tl}
+ }{
+ \int_set:Nn \l_array_top_int {0}
+ }
+ \int_step_inline:nnnn {\l_array_top_int} {-1} {\l_array_base_int} {
+ \array_get:NnN #1 {##1} \l_array_tmp_tl
+ \exp_args:Nno #2 {##1} \l_array_tmp_tl
+}
+} {}
+}
+\cs_generate_variant:Nn \array_reverse_map_function:NN { Nc }
+\cs_generate_variant:Nn \array_reverse_map_function:NN { c , cc }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_map_inline:Nn}
+% Inline version of the above.
+% \begin{macrocode}
+\cs_new_protected:Npn \array_map_inline:Nn #1#2
+ {
+ \int_gincr:N \g__prg_map_int
+ \cs_gset:cpn { array_map_inline_ \int_use:N \g__prg_map_int :nn }
+ ##1##2 {#2}
+ \exp_args:NNc \array_map_function:NN #1
+ { array_map_inline_ \int_use:N \g__prg_map_int :nn }
+ \__prg_break_point:Nn \array_map_break: { \int_gdecr:N \g__prg_map_int }
+ }
+\cs_generate_variant:Nn \array_map_inline:Nn { c }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_reverse_map_inline:Nn}
+% Inline version of the above.
+% \begin{macrocode}
+\cs_new_protected:Npn \array_reverse_map_inline:Nn #1#2
+ {
+ \int_gincr:N \g__prg_map_int
+ \cs_gset:cpn { array_map_inline_ \int_use:N \g__prg_map_int :nn }
+ ##1##2 {#2}
+ \exp_args:NNc \array_reverse_map_function:NN #1
+ { array_map_inline_ \int_use:N \g__prg_map_int :nn }
+ \__prg_break_point:Nn \array_map_break: { \int_gdecr:N \g__prg_map_int }
+ }
+\cs_generate_variant:Nn \array_reverse_map_inline:Nn { c }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_map_break:}
+% \begin{macrocode}
+\cs_new_nopar:Npn \array_map_break:
+ { \__prg_map_break:Nn \array_map_break: { } }
+\cs_new_nopar:Npn \array_map_break:n
+ { \__prg_map_break:Nn \array_map_break: }
+% \end{macrocode}
+% \end{macro}
+%
+% For displaying arrays, we need some messages.
+% \begin{macrocode}
+\msg_new:nnn { kernel } { show-array }
+ {
+ The~array~\token_to_str:N #1~
+ \array_if_empty:NTF #1
+ { is~empty }
+ { contains~the~items~(without~outer~braces): }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\array_show:N}
+% Mapping through an array isn't expandable so we have to set a token list to its contents first before passing it to the message handler.
+% \begin{macrocode}
+\cs_new_protected:Npn \array_show:N #1
+ {
+ \__msg_show_variable:NNNnn
+ #1
+ \array_if_exist:NTF
+ \array_if_empty:NTF
+ { array }
+ { \array_map_function:NN #1 \__msg_show_item:nn }
+ }
+\cs_generate_variant:Nn \array_show:N { c }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_push:Nn}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_push:Nn #1#2
+{
+ \prop_get:NnNTF #1 {top} \l_array_tmp_tl
+ {
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \int_incr:N \l_array_tmp_int
+ \array_put:Nnn #1 {\l_array_tmp_int} {#2}
+ }
+ {
+ \array_put:Nnn #1 {\g_array_base_int} {#2}
+ }
+}
+\cs_generate_variant:Nn \array_push:Nn {Nx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gpush:Nn}b
+% \begin{macrocode}
+\cs_new_protected:Npn \array_gpush:Nn #1#2
+{
+ \prop_get:NnNTF #1 {top} \l_array_tmp_tl
+ {
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \int_incr:N \l_array_tmp_int
+ \array_gput:Nnn #1 {\l_array_tmp_int} {#2}
+ }
+ {
+ \array_gput:Nnn #1 {\g_array_base_int} {#2}
+ }
+}
+\cs_generate_variant:Nn \array_gpush:Nn {Nx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_unshift:Nn}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_unshift:Nn #1#2
+{
+ \prop_get:NnNTF #1 {base} \l_array_tmp_tl
+ {
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \int_decr:N \l_array_tmp_int
+ \array_put:Nnn #1 {\l_array_tmp_int} {#2}
+ }
+ {
+ \array_put:Nnn #1 {\g_array_base_int} {#2}
+ }
+}
+\cs_generate_variant:Nn \array_unshift:Nn {Nx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gunshift:Nn}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_gunshift:Nn #1#2
+{
+ \prop_get:NnNTF #1 {base} \l_array_tmp_tl
+ {
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \int_decr:N \l_array_tmp_int
+ \array_gput:Nnn #1 {\l_array_tmp_int} {#2}
+ }
+ {
+ \array_gput:Nnn #1 {\g_array_base_int} {#2}
+ }
+}
+\cs_generate_variant:Nn \array_gunshift:Nn {Nx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_pop:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_pop:NN #1#2
+{
+ \prop_get:NnN #1 {top} \l_array_tmp_tl
+ \array_get:NnN #1 {\l_array_tmp_tl} #2
+ \array_del:Nn #1 {\l_array_tmp_tl}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gpop:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_gpop:NN #1#2
+{
+ \prop_get:NnN #1 {top} \l_array_tmp_tl
+ \array_get:NnN #1 {\l_array_tmp_tl} #2
+ \array_gdel:Nn #1 {\l_array_tmp_tl}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_shift:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_shift:NN #1#2
+{
+ \prop_get:NnN #1 {base} \l_array_tmp_tl
+ \array_get:NnN #1 {\l_array_tmp_tl} #2
+ \array_del:Nn #1 {\l_array_tmp_tl}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gshift:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_gshift:NN #1#2
+{
+ \prop_get:NnN #1 {base} \l_array_tmp_tl
+ \array_get:NnN #1 {\l_array_tmp_tl} #2
+ \array_gdel:Nn #1 {\l_array_tmp_tl}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_top:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_top:NN #1#2
+{
+ \prop_get:NnN #1 {top} \l_array_tmp_tl
+ \array_get:NnN #1 {\l_array_tmp_tl} #2
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_base:NN}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_base:NN #1#2
+{
+ \prop_get:NnN #1 {base} \l_array_tmp_tl
+ \array_get:NnN #1 {\l_array_tmp_tl} #2
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_top:N}
+% \begin{macrocode}
+\cs_new:Npn \array_top:N #1
+{
+ \array_get:Nn #1 {\prop_item:Nn #1 {top}}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_base:N}
+% \begin{macrocode}
+\cs_new:Npn \array_base:N #1
+{
+ \array_get:Nn #1 {\prop_item:Nn #1 {base}}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_del:Nn}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_del:Nn #1#2
+{
+ \exp_args:NNx \prop_pop:Nn #1 {\int_eval:n {#2}}
+ \int_set:Nn \l_array_tmp_int {0}
+ \array_map_inline:Nn #1 {
+ \tl_if_eq:NNTF {##2} {\q_no_value} {}
+ {
+ \int_incr:N \l_array_tmp_int
+ }
+ }
+ \int_compare:nNnTF {\l_array_tmp_int} = {0}
+ {
+ \prop_clear:N #1
+ }
+ {
+ \prop_get:NnN #1 {top} \l_array_tmp_tl
+ \int_compare:nNnTF {#2} = {\l_array_tmp_tl} {
+ \prop_get:NnN #1 {base} \l_array_tmp_tl
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \array_map_inline:Nn #1 {
+ \tl_if_eq:NNTF {##2} {\q_no_value} {}
+ {
+ \int_compare:nNnTF {\l_array_tmp_int} < {##1} {
+ \int_set:Nn \l_array_tmp_int {##1}
+ }{}
+ }
+ }
+ \prop_put:Nnx #1 {top} {\int_use:N \l_array_tmp_int}
+ }{}
+ \prop_get:NnN #1 {base} \l_array_tmp_tl
+ \int_compare:nNnTF {#2} = {\l_array_tmp_tl} {
+ \prop_get:NnN #1 {top} \l_array_tmp_tl
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \array_map_inline:Nn #1 {
+ \tl_if_eq:NNTF {##2} {\q_no_value} {}
+ {
+ \int_compare:nNnTF {\l_array_tmp_int} > {##1} {
+ \int_set:Nn \l_array_tmp_int {##1}
+ }{}
+ }
+ }
+ \prop_put:Nnx #1 {base} {\int_use:N \l_array_tmp_int}
+ }{}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_gdel:Nn}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_gdel:Nn #1#2
+{
+ \exp_args:NNx \prop_gpop:Nn #1 {\int_eval:n {#2}}
+ \int_set:Nn \l_array_tmp_int {0}
+ \array_map_inline:Nn #1 {
+ \tl_if_eq:NNTF {##2} {\q_no_value} {}
+ {
+ \int_incr:N \l_array_tmp_int
+ }
+ }
+ \int_compare:nNnTF {\l_array_tmp_int} = {0}
+ {
+ \prop_gclear:N #1
+ }
+ {
+ \prop_get:NnN #1 {top} \l_array_tmp_tl
+ \int_compare:nNnTF {#2} = {\l_array_tmp_tl} {
+ \prop_get:NnN #1 {base} \l_array_tmp_tl
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \array_map_inline:Nn #1 {
+ \tl_if_eq:NNTF {##2} {\q_no_value} {}
+ {
+ \int_compare:nNnTF {\l_array_tmp_int} < {##1} {
+ \int_set:Nn \l_array_tmp_int {##1}
+ }{}
+ }
+ }
+ \prop_gput:Nnx #1 {top} {\int_use:N \l_array_tmp_int}
+ }{}
+ \prop_get:NnN #1 {base} \l_array_tmp_tl
+ \int_compare:nNnTF {#2} = {\l_array_tmp_tl} {
+ \prop_get:NnN #1 {top} \l_array_tmp_tl
+ \int_set:Nn \l_array_tmp_int {\l_array_tmp_tl}
+ \array_map_inline:Nn #1 {
+ \tl_if_eq:NNTF {##2} {\q_no_value} {}
+ {
+ \int_compare:nNnTF {\l_array_tmp_int} > {##1} {
+ \int_set:Nn \l_array_tmp_int {##1}
+ }{}
+ }
+ }
+ \prop_gput:Nnx #1 {base} {\int_use:N \l_array_tmp_int}
+ }{}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\array_length:N}
+% \begin{macrocode}
+\cs_new_protected:Npn \array_length:N #1
+{
+ \int_eval:n {\prop_item:Nn #1 {top} - \prop_item:Nn #1 {base}}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \iffalse
+%</array>
+% \fi
+%
+%\Finale
diff --git a/graphics/pgf/contrib/hobby/hobby.pdf b/graphics/pgf/contrib/hobby/hobby.pdf
new file mode 100644
index 0000000000..1235aa74c1
--- /dev/null
+++ b/graphics/pgf/contrib/hobby/hobby.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/hobby/hobby_code.pdf b/graphics/pgf/contrib/hobby/hobby_code.pdf
new file mode 100644
index 0000000000..9b8f4973b9
--- /dev/null
+++ b/graphics/pgf/contrib/hobby/hobby_code.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/hobby/hobby_doc.tex b/graphics/pgf/contrib/hobby/hobby_doc.tex
new file mode 100644
index 0000000000..6e487bfb18
--- /dev/null
+++ b/graphics/pgf/contrib/hobby/hobby_doc.tex
@@ -0,0 +1,917 @@
+\immediate\write18{tex hobby.dtx}
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{csquotes}
+\usepackage{lmodern}
+\usepackage{tikz}
+\usepackage{pgfplots}
+\usepackage{amsmath}
+\usepackage{fancyvrb}
+\usetikzlibrary{hobby,decorations.pathreplacing}
+\usepackage{listings}
+\usepackage{hyperref}
+\pgfplotsset{compat=1.9}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \centering
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+
+
+\tikzset{
+ show curve controls/.style={
+ decoration={
+ show path construction,
+ curveto code={
+ \draw [blue, dashed]
+ (\tikzinputsegmentfirst) -- (\tikzinputsegmentsupporta)
+ node [at end, draw, solid, red, inner sep=2pt]{};
+ \draw [blue, dashed]
+ (\tikzinputsegmentsupportb) -- (\tikzinputsegmentlast)
+ node [at start, draw, solid, red, inner sep=2pt]{};
+ }
+ },decorate
+ },
+}
+
+%\bibliographystyle{plain}
+
+\renewcommand{\thefootnote}{\fnsymbol{footnote}}
+
+\providecommand*{\url}{\texttt}
+\title{The \textsf{Hobby} package}
+\author{Andrew Stacey \\ \url{loopspace@mathforge.org}}
+\date{\hobbyVersion\ from\ \hobbyDate}
+\begin{document}
+\maketitle
+
+\section{Introduction}
+
+John Hobby's algorithm, \cite{MR834054}, produces a curve through a given set of points.
+The curve is constructed as a list of cubic B\'ezier curves with endpoints at subsequent points in the list.
+The parameters of the curves are chosen so that the joins are ``smooth''.
+The algorithm was devised as part of the MetaPost program.
+
+TikZ/PGF has the ability to draw a curve through a given set of points but its algorithm is somewhat simpler than Hobby's and consequently does not produce as aesthetically pleasing curve as Hobby's algorithm does.
+This package implements Hobby's algorithm in \TeX{} so that TikZ/PGF can make use of it and thus produce nicer curves through a given set of points.
+
+Hobby's algorithm allows for considerable customisation in that it can take into account various parameters.
+These are all allowed in this implementation.
+
+There is also a ``quick'' version presented here.
+This is a modification of Hobby's algorithm with the feature that any point only influences a finite number (in fact, two) of the previous segments (in Hobby's algorithm the influence of a point dies out exponentially but never completely).
+This is achieved by applying Hobby's algorithm to subpaths.
+The resulting path produced with this ``quick'' version is not as ideal as that produced by Hobby's full algorithm, but is still much better than that produced by the \Verb+plot[smooth]+ method in TikZ/PGF, as can be seen in Figure~\ref{fig:comparison}.
+As this is intended as a simpler method, it does not (at present) admit the same level of customisation as the full implementation.
+The ``quick'' algorithm is described in full in Section~\ref{sec:quick}.
+
+The full algorithm is implemented in \LaTeX3 with no reference to TikZ or PGF.
+It makes extensive use of the \Verb+fp+ and \Verb+prop+ libraries for the computation steps.
+The TikZ library is simply a wrapper that takes the user's input, converts it into the right format for the \LaTeX3 code, and then calls that code to generate the path.
+The ``quick'' version does not use \LaTeX3 and relies instead on the \Verb+PGFMath+ library for the computation.
+
+
+Figure~\ref{fig:comparison} is a comparison of the three methods.
+The red curve is drawn using Hobby's algorithm.
+The blue curve is drawn with the \Verb+plot[smooth]+ method from TikZ/PGF.
+The green curve uses the ``quick'' version.
+Figure~\ref{fig:metapost} compares the implementation with that given by MetaPost.
+
+\begin{figure}
+\centering
+\begin{tikzpicture}[scale=.5]
+\draw[red,line width=5pt] (0,0) to[curve through={(6,4) .. (4,9) .. (1,7)}] (3,5);
+\draw[ultra thick,blue] plot[smooth] coordinates {(0,0) (6,4) (4,9) (1,7) (3,5)};
+\draw[green,line width=2pt] (0,0) to[quick curve through={(6,4) (4,9) (1,7)}] (3,5);
+\end{tikzpicture}
+\caption{Comparison of the three algorithms}
+\label{fig:comparison}
+\end{figure}
+
+
+\begin{figure}
+\centering
+\begin{tikzpicture}[scale=.5]
+\draw[scale=.1,postaction=show curve controls,line width=1mm,red] (0,0)
+.. controls (26.76463,-1.84543) and (51.4094,14.58441) .. (60,40)
+.. controls (67.09875,61.00188) and (59.76253,84.57518) .. (40,90)
+.. controls (25.35715,94.01947) and (10.48064,84.5022) .. (10,70)
+.. controls (9.62895,58.80421) and (18.80421,49.62895) .. (30,50);
+\fill[green] (0,0) circle[radius=2pt]
+(6,4) circle[radius=2pt]
+(4,9) circle[radius=2pt]
+(1,7) circle[radius=2pt]
+(3,5) circle[radius=2pt];
+\draw[postaction=show curve controls,thick] (0,0) to[curve through={(6,4) .. (4,9) .. (1,7)}] (3,5);
+\begin{scope}[xshift=10cm]
+\draw[scale=.1,postaction=show curve controls,line width=1mm,red] (0,0)
+.. controls (5.18756,-26.8353) and (60.36073,-18.40036) .. (60,40)
+.. controls (59.87714,59.889) and (57.33896,81.64203) .. (40,90)
+.. controls (22.39987,98.48387) and (4.72404,84.46368) .. (10,70)
+.. controls (13.38637,60.7165) and (26.35591,59.1351) .. (30,50)
+.. controls (39.19409,26.95198) and (-4.10555,21.23804) .. (0,0); %
+\fill[green] (0,0) circle[radius=2pt]
+(6,4) circle[radius=2pt]
+(4,9) circle[radius=2pt]
+(1,7) circle[radius=2pt]
+(3,5) circle[radius=2pt];
+\draw[postaction=show curve controls,thick] (0,0) to[closed,curve through={(6,4) .. (4,9) .. (1,7)}] (3,5);
+\end{scope}
+\end{tikzpicture}
+\caption{Hobby's algorithm in TikZ overlaying the output of MetaPost}
+\label{fig:metapost}
+\end{figure}
+
+\section{Usage}
+The package is provided in form of a TikZ library.
+It can be loaded with
+\begin{verbatim}
+\usetikzlibrary{hobby}
+\end{verbatim}
+
+\textbf{Warning}: This package makes extensive use of \LaTeX3.
+On occasion, updates to \LaTeX3 packages have resulted in this package behaving oddly or not working at all.
+The most up to date version of this package can be obtained from the \href{http://bazaar.launchpad.net/~tex-sx/tex-sx/development/files}{TeX-SX Launchpad page} (download \Verb+hobby.dtx+ and run \Verb+tex hobby.dtx+ to generate the files).
+Often, such issues are reported on the \href{http://tex.stackexchange.com}{TeX-SX} site and workarounds quickly found so it is worth checking there as well.
+
+\bigskip
+
+There are a variety of ways of specifying the data to the algorithm to generate the curve.
+
+\subsection{As a \textsf{to path}.}
+
+The key \Verb+curve through={<points>}+ installs a \Verb+to path+ which draws a smooth curve through the given points.
+The points should be specified as a list which can be optionally separated by dots.
+The purpose of allowing the dots is to make it simpler to switch between the \Verb+to path+ method and the \Verb+shortcut+ method (described in Section~\ref{sec:shortcut}).
+However, note that the two methods are not completely synonymous due to how one can specify options so care must still be taken when switching.
+
+\begin{example}
+\begin{tikzpicture}[scale=.5]
+\draw (0,0) to[curve through={(6,4) .. (4,9) .. (1,7)}] (3,5);
+\end{tikzpicture}
+\end{example}
+
+\begin{example}
+\begin{tikzpicture}[scale=.5]
+\draw (0,0) to[curve through={(6,4) (4,9) (1,7)}] (3,5);
+\end{tikzpicture}
+\end{example}
+
+There is a corresponding key \Verb+quick curve through={<points>}+ which uses the ``quick'' algorithm.
+Again, the dots are optional.
+
+\begin{example}
+\begin{tikzpicture}[scale=.5]
+\draw (0,0) to[quick curve through={(6,4) .. (4,9) .. (1,7)}] (3,5);
+\end{tikzpicture}
+\end{example}
+
+\subsection{The \textsf{shortcut} Method}
+\label{sec:shortcut}
+
+There is also the facility to subvert TikZ's path processor and define curves simply using the \Verb+..+ separator between points.
+Note that this relies on something a little special in TikZ: the syntax \Verb+(0,0) .. (2,3)+ is currently detected and processed but there is no action assigned to that syntax.
+As a later version of TikZ may assign some action to that syntax, this package makes its override optional via the key \Verb+use Hobby shortcut+ (which can be set globally if so desired).
+
+\begin{example}
+\begin{tikzpicture}[scale=.5,use Hobby shortcut]
+\draw (-3,0) -- (0,0) .. (6,4) .. (4,9) .. (1,7) .. (3,5) -- ++(2,0);
+\end{tikzpicture}
+\end{example}
+
+\begin{example}
+\begin{tikzpicture}[scale=.5,use quick Hobby shortcut]
+\draw (-3,0) -- (0,0) .. (6,4) .. (4,9) .. (1,7) .. (3,5) -- ++(2,0);
+\end{tikzpicture}
+\end{example}
+
+\subsection{The \textsf{Plot Handler} Method}
+
+The algorithms can also be used via the \Verb+plot handler+ syntax.
+This library registers three plot handlers: \Verb+hobby+, \Verb+closed hobby+, and \Verb+quick hobby+.
+The first is an open curve through the points using the full algorithm, the second is a closed curve, and the third uses the quick algorithm (and is thus an open curve).
+
+\begin{example}
+\tikz[smooth] \draw plot coordinates {(0,0) (1,1) (2,0) (3,1) (2,1) (10:2cm)};
+
+\tikz[hobby] \draw plot coordinates {(0,0) (1,1) (2,0) (3,1) (2,1) (10:2cm)};
+
+\tikz[closed hobby] \draw plot coordinates {(0,0) (1,1) (2,0) (3,1) (2,1) (10:2cm)};
+
+\tikz[quick hobby] \draw plot coordinates {(0,0) (1,1) (2,0) (3,1) (2,1) (10:2cm)};
+\end{example}
+
+This has the side effect that these can be used with the \Verb+pgfplots+ package.
+However, the Hobby algorithm is designed to draw a curve in 2D-{}space and does not take into account the fact that when plotting a graph then the two dimensions are treated differently.
+
+\begin{example}
+\begin{tikzpicture}
+\begin{axis}
+\addplot +[smooth] {rnd};
+\addplot +[hobby] {rnd};
+\end{axis}
+\end{tikzpicture}
+\end{example}
+
+\subsection{Basic Level PGF Commands}
+
+(Suggested by the question \href{http://tex.stackexchange.com/q/159896/86}{How to combine Hobby paths with PGF Basic Layer commands?} on TeX-SX.)
+
+In some circumstances, it is convenient to bypass TikZ and use more basic PGF commands for building a path.
+It is possible to add a path built using Hobby's algorithm in this fashion.
+The commands are:
+
+\begin{itemize}
+\item \Verb+\pgfpathhobby+ to initialise the path.
+If this is followed by a braced group then the contents of that are taken as options to the algorithm.
+
+\item \Verb+\pgfpathhobbypt{<pgf point specification>}+ to add a point to the path.
+If this is followed by a braced group then the contents of that are taken as options for that point.
+
+\item \Verb+\pgfpathhobbyend+ finalises the path.
+This applies the algorithm to the set of specified points and adds it to the current path.
+\end{itemize}
+
+\begin{example}
+\begin{tikzpicture}
+\pgfpathmoveto{\pgfpoint{0}{0}}
+\pgfpathlineto{\pgfpoint{1cm}{0}}
+\pgfpathhobby{closed=true}
+\pgfpathhobbypt{\pgfpoint{1cm}{2cm}}{tension in=2}
+\pgfpathhobbypt{\pgfpoint{2cm}{1cm}}
+\pgfpathhobbypt{\pgfpoint{3cm}{0cm}}
+\pgfpathhobbyend
+\pgfusepath{stroke}
+\end{tikzpicture}
+\end{example}
+
+\section{Customisation}
+
+There are various ways to customise the path generated by the Hobby algorithms.
+The full algorithm has a variety of parameters which can be varied to produce different paths through the same points.
+These vary from specifying that the path be open or closed, to specifying ``tensions'' at each point to change how the path approaches or leaves it.
+
+\subsection{Algorithm Customisations}
+
+The main algorithm (i.e., not the ``quick'' variant) can deal with open or closed paths, it is possible to vary the ``tensions'' between the specified points of the paths, and for an open path it is possible to specify the incoming and outgoing angles either directly or via certain ``curl'' parameters.
+When using the \Verb+to path+ specification, the parameters can be specified before or after the \Verb+curve through+ key or as options to the coordinates.
+When using the \Verb+shortcut+ specification, the parameters can be given on the path or on coordinates.
+
+On occasion, it is ambiguous which curve an option belongs to.
+This is most likely if a coordinate happens to belong to two curves, or if a coordinate is parsed before TikZ knows that it is constructing a curve using this library.
+The simplest solution is to move the option to a place where there is no ambiguity.
+Other solutions to this problem will be detailed later.
+
+Let us start with the customisations to the algorithm.
+
+\begin{itemize}
+\item Basic curve.
+\begin{example}
+\begin{tikzpicture}
+\draw[postaction=show curve controls]
+(0,0) to[curve through={(1,.5) .. (2,0) .. (3,.5)}] (4,0);
+\draw[xshift=5cm,use Hobby shortcut,postaction=show curve controls]
+(0,0) .. (1,.5) .. (2,0) .. (3,.5) .. (4,0);
+\end{tikzpicture}
+\end{example}
+
+\item The path can be open, as above, or closed.
+%%
+\begin{example}
+\begin{tikzpicture}[scale=.5]
+\draw[postaction=show curve controls]
+(0,0) to[closed,curve through={(1,.5) .. (2,0) .. (3,.5)}] (4,0);
+\draw[xshift=5cm,use Hobby shortcut,postaction=show curve controls]
+([closed]0,0) .. (1,.5) .. (2,0) .. (3,.5) .. (4,0);
+\end{tikzpicture}
+\end{example}
+
+\item Specifying the angle at which the curve goes \emph{out} and at which it comes \emph{in}.
+The angles given are absolute.
+\begin{example}
+\begin{tikzpicture}
+\draw[postaction=show curve controls]
+(0,0) to[out angle=0,in angle=180,curve through={(1,.5) .. (2,0) .. (3,.5)}] (4,0);
+\draw[xshift=5cm,use Hobby shortcut,postaction=show curve controls]
+([out angle=0,in angle=180]0,0) .. (1,.5) .. (2,0) .. (3,.5) .. (4,0);
+\end{tikzpicture}
+\end{example}
+
+\item Applying tension as the curve comes in to a point.
+\begin{example}
+\begin{tikzpicture}
+\draw[postaction=show curve controls]
+(0,0) to[curve through={(1,.5) .. ([tension in=2]2,0) .. (3,.5)}] (4,0);
+\draw[xshift=5cm,use Hobby shortcut,postaction=show curve controls]
+(0,0) .. (1,.5) .. ([tension in=2]2,0) .. (3,.5) .. (4,0);
+\end{tikzpicture}
+\end{example}
+
+\item Applying the same tension as a curve comes in and goes out of a point.
+\begin{example}
+\begin{tikzpicture}
+\draw[postaction=show curve controls]
+(0,0) to[curve through={(1,.5) .. ([tension=2]2,0) .. (3,.5)}] (4,0);
+\end{tikzpicture}
+\end{example}
+
+\item Specifying the \emph{curl} parameters.
+\begin{example}
+\begin{tikzpicture}
+\draw[postaction=show curve controls]
+(0,0) to[in curl=.1,out curl=3,curve through={(1,.5) .. (2,0) .. (3,.5)}] (4,0);
+\draw[xshift=5cm,use Hobby shortcut,postaction=show curve controls]
+(0,0) .. ([in curl=.1,out curl=3]1,.5) .. (2,0) .. (3,.5) .. (4,0);
+\end{tikzpicture}
+\end{example}
+\end{itemize}
+
+\subsection{Edge Cases}
+
+Angles are constrained to lie in the interval \((-\pi,\pi]\).
+This can introduce edge cases as there is a point where we have to compare an angle with \(-\pi\) and if it is equal, add \(2 \pi\).
+This will occur if the path ``doubles back'' on itself as in the next example.
+By nudging the repeated point slightly, the behaviour changes drastically.
+
+\begin{example}
+\begin{tikzpicture}[use Hobby shortcut]
+\draw (0,0) .. (1,0) .. (0,0) .. (0,-1);
+\draw[xshift=2cm] (0,0) .. (1,0) .. (0,0.1) .. (0,-1);
+\draw[xshift=4cm] (0,0) .. (1,0) .. (0,-0.1) .. (0,-1);
+\end{tikzpicture}
+\end{example}
+
+Due to the precision of the computations, it is not possible to always get this test correct.
+The simplest solution is to nudge the repeated point in one direction or the other.
+Experimenting shows that the ``nudge factor'' can be extremely small (note that it will be proportional to the distance between the specified points).
+It is best to nudge it in the direction most normal to the line between the specified points as the goal is to nudge the difference of the angles.
+An alternative solution is to add an additional point for the curve to go through.
+\begin{example}
+\begin{tikzpicture}[use Hobby shortcut]
+\draw (0,0) .. (1,0) .. (0,0) .. (0,-1);
+\draw[xshift=2cm] (0,0) .. (1,0) .. (0,0.002) .. (0,-1);
+\draw[xshift=4cm] (0,0) .. (1,0) .. (0,-0.002) .. (0,-1);
+\end{tikzpicture}
+\end{example}
+
+Lastly, it is possible to add an \Verb+excess angle+ key to a coordinate.
+This will add the corresponding multiple of \(2\pi\) to the angle difference.
+\begin{example}
+\begin{tikzpicture}[use Hobby shortcut]
+\draw (0,0) .. (1,0) .. (0,0) .. (0,-1);
+\draw[xshift=2cm] (0,0) .. ([excess angle=1]1,0) .. (0,0) .. (0,-1);
+\draw[xshift=4cm] (0,0) .. ([excess angle=-1]1,0) .. (0,0) .. (0,-1);
+\end{tikzpicture}
+\end{example}
+
+Although this is intended to be an integer, no check is done and so some quite odd curves can result from changing this parameter.
+
+\subsection{Reusing Paths}
+
+Although the (full) algorithm has good theoretical computation time, using \TeX\ for its implementation does not provide for fast runs.
+The externalisation library of TikZ/PGF can be used to save whole pictures, but it can be useful to save a generated path within a single \Verb+tikzpicture+ for later use within that same picture.
+The implementation allows for this by separating the generation of the path from its use.
+
+\begin{example}
+\begin{tikzpicture}
+\draw[line width=3mm,red,use Hobby shortcut,save Hobby path={saved}] (0,0) .. (1,1) .. (2,0);
+\draw[xshift=2cm,ultra thick,yellow] (0,0) [restore and use Hobby path={saved}{}];
+\end{tikzpicture}
+\end{example}
+%
+
+Note that the key \Verb+restore and use Hobby path+ is given \emph{after} the initial \Verb+(0,0)+.
+This is because by default the path generated by the Hobby algorithm does not start with an explicit \Verb+moveto+ since that is the standard behaviour of all of PGF's path construction macros.
+So the \Verb+(0,0)+ ensures that our path is well-{}formed by issuing an initial \Verb+moveto+.
+An alternative would be to use the key \Verb+disjoint+ which does add an initial \Verb+moveto+.
+
+\begin{example}
+\begin{tikzpicture}
+\draw[line width=3mm,red,use Hobby shortcut,save Hobby path={saved}] (0,0) .. (1,1) .. (2,0);
+\draw[xshift=2cm,ultra thick,yellow,restore and use Hobby path={saved}{disjoint}];
+\end{tikzpicture}
+\end{example}
+%
+
+An example of where this is useful is in drawing knot diagrams.
+When so doing, it is sometimes convenient to draw a path (or segment of a path) twice in order to get the under/over crossings correct.
+For this situation, it can be useful to designate certain parts of the path as \Verb+blank+, whereby we mean to redraw them later.
+The point of a blank segment of a curve is that it is still taken into account when computing the algorithm but is left blank when it comes to rendering.
+A path can then be redrawn with the blank/non-{}blank segments reversed.
+As it might be desired to have only some blank segments drawn the second time, there are two types of blank.
+Only a \Verb+soft+ blank will be reversed in these circumstances.
+
+\begin{example}
+\begin{tikzpicture}[use Hobby shortcut,line width=1mm,rotate=90]
+\draw[blue,save Hobby path={left}]
+ ([out angle=90,in angle=-90]1,0) .. (1,1) .. ([blank=soft]0,2) .. (1,3) .. (1,4);
+\draw[red] ([out angle=90,in angle=-90]0,0) .. (0,1) .. (1,2) .. (0,3) .. (0,4);
+\draw[blue,restore and use Hobby path={left}{disjoint,invert soft blanks}];
+\end{tikzpicture}
+\end{example}
+%
+
+This can be taken a step further.
+The generated data can be saved to the \Verb+aux+ file and read back in, avoiding the need to regenerate it on each run.
+To engage this facility, the Hobby path has to be named (via \Verb+save Hobby path+) and the key \Verb+Hobby externalise+ (or \Verb+Hobby externalize+) must be given in a context that applies (such as on the path or on the surrounding scope).
+
+\bigskip
+
+
+The relevant keys are the following.
+
+\begin{itemize}
+\item \Verb+use previous Hobby path[=<options>]+.
+This (re)uses the previously generated Hobby path.
+As all the data is globally stored, this can technically be in a different \Verb+tikzpicture+.
+The \Verb+<options>+ will be applied, in so far as they are options that can be applied after the algorithm has run.
+
+\item \Verb+save Hobby path=<name>+.
+Saves a path for later use.
+The path is saved in a global macro so can be reused in another picture.
+
+\item \Verb+restore Hobby path=<name>+.
+This restores the named Hobby path (if it exists).
+It does not \emph{use} it.
+After this key, \Verb+use previous Hobby path+ will use the restored path.
+
+\item \Verb+restore and use Hobby path={<name>}{<options>}+.
+This restores the named path and uses it with \Verb+<options>+ applied.
+
+\item \Verb+Hobby externalise+ or \Verb+Hobby externalize+.
+This puts in place the code for saving the generated data to the \Verb+aux+ file.
+On subsequent runs, it uses the saved data rather than the current data.
+For a curve to make use of this, it has to be named via the \Verb+save Hobby path+ key.
+So to regenerate the data, either delete the \Verb+aux+ file, remove the \Verb+save Hobby path+ key for one compilation run, or issue the command \Verb+\HobbyDisableAux+ which disables writing paths to the \Verb+aux+ file (note that the paths will be regenerated on the run \emph{after} the first run with this command issued).
+\end{itemize}
+
+The options that can be applied are those that affect the rendering of the curve but not its generation.
+When the curve is rendered (or \emph{used}, in the above parlance), \TeX\ steps along the coordinates of the generated curve and carries out an action for each piece.
+This action can be modified after the curve has been generated.
+The action will be one of:
+%
+\begin{itemize}
+\item Move to the end point (ignoring the control points).
+\item Draw a Bezier curve to the end point through the control points.
+\item Draw a Bezier curve to the end point through the control points and then move to the end point.
+\end{itemize}
+%
+The last is subtle: the move doesn't actually go anywhere but it ``breaks'' the curve at the designated point.
+In particular, a later \Verb+cycle+ would return to this point (or a later break) rather than to the start of the curve.
+
+These actions are triggered by the keys \Verb+blank+ and \Verb+break+.
+Each should be specified to the coordinate at the \emph{end} of the segment under consideration.
+The \Verb+blank+ key can be given the argument \Verb+soft+.
+The effect of this is seen when the key \Verb+invert soft blanks+ is used.
+This swaps the drawing action so that non-{}blank segments are skipped and \emph{soft} blanks are drawn.
+Non-{}soft-{}blank segments are still not drawn.
+
+\begin{example}
+\begin{tikzpicture}[use Hobby shortcut]
+\draw (0,0) .. (1,1) .. ([blank=soft]2,0) .. (3,1) .. ([blank]4,0) .. (5,1);
+\draw[red,use previous Hobby path={invert soft blanks,disjoint}];
+\end{tikzpicture}
+\end{example}
+%
+
+As a more practical application, consider the following rendering of a trefoil knot.
+
+\begin{example}
+\begin{tikzpicture}[
+ use Hobby shortcut,
+ every path/.style={
+ line width=1mm,
+ white,
+ double=red,
+ double distance=.5mm
+ }
+]
+\draw ([closed]0,2) .. ([blank=soft]210:.5) .. (-30:2) ..
+([blank=soft]0,.5) .. (210:2) .. ([blank=soft]-30:.5);
+\draw[use previous Hobby path={invert soft blanks,disjoint}];
+\end{tikzpicture}
+\end{example}
+%
+
+This could easily be generalised using the \Verb+\foreach+ command, as demonstrated in the next code.
+
+\begin{example}
+\begin{tikzpicture}[
+ use Hobby shortcut,
+ every path/.style={
+ line width=1mm,
+ white,
+ double=red,
+ double distance=.5mm
+ }
+]
+\def\nfoil{9}
+\draw ([closed]0,2)
+\foreach \k in {1,...,\nfoil} {
+ .. ([blank=soft]90+360*\k/\nfoil-180/\nfoil:-.5) .. (90+360*\k/\nfoil:2)
+};
+\draw[use previous Hobby path={invert soft blanks,disjoint}];
+\end{tikzpicture}
+\end{example}
+%
+
+\subsection{Breaking the Path}
+
+One issue with the shortcut notation is that it is not possible (using this notation) to have two sets of curves following directly on from each other because there is no clear demarcation of the boundary.
+To make this possible, there is a key \Verb+Hobby action+, which installs an action to be taken after the point has been processed.
+The general key \Verb+Hobby action={code}+ can install arbitrary code.
+Probably the more useful variant is \Verb+Hobby finish+ which runs the algorithm on the points gathered so far.
+An example of the use of this is to make it possible to specify tangencies at certain points.
+Technically, once a tangent direction has been specified, the Hobby algorithm splits the set of points there and works on each piece separately.
+The following key implements this, the technicalities are due to the fact that the tangent angle has to be used twice: once to specify the angle of the path coming in to that point and once to specify the angle of the path coming out.
+Note that specifying the tangent vector at every point means that the algorithm is not actually being used.
+However, Hobby's formulae for the lengths of the control points is still being used.
+
+\begin{example}
+\begin{tikzpicture}[
+ use Hobby shortcut,
+ tangent/.style={%
+ in angle={(180+#1)},
+ Hobby finish,
+ designated Hobby path=next,
+ out angle=#1,
+ },
+]
+\draw[help lines] (-5,-5) grid (5,5);
+\draw (-5,0) -- (5,0) (0,-5) -- (0,5);
+\draw[thick] (-5,2) .. ([tangent=0]-3,3) .. (-1,1) .. (0,-1.3) .. %
+([tangent=0]1,-2) .. ([tangent=45]2,-1.5) .. ([tangent=0]3,-2) .. (5,-4);
+\end{tikzpicture}
+\end{example}
+%
+
+
+
+\section{Implementing Hobby's Algorithm}
+We start with a list of \(n+1\) points, \(z_0, \dotsc, z_n\).
+The base code assumes that these are already stored in two arrays\footnote{Arrays are thinly disguised property lists.}: the \(x\)--coordinates in \Verb+\l_hobby_points_x_array+ and the \(y\)--coordinates in \Verb+\l_hobby_points_y_array+.
+As our arrays are \(0\)--indexed, the actual number of points is one more than this.
+For a closed curve, we have \(z_n = z_0\)\footnote{Note that there is a difference between a closed curve and an open curve whose endpoints happen to overlap.}.
+For closed curves it will be convenient to add an additional point at \(z_1\): thus \(z_{n+1} = z_1\).
+This makes \(z_n\) an internal point and makes the algorithms for closed paths and open paths agree longer than they would otherwise.
+The number of apparent points is stored as \Verb+\l_hobby_npoints_int+.
+Thus for an open path, \Verb+\l_hobby_npoints_int+ is \(n\), whilst for a closed path, it is \(n+1\)\footnote{In fact, we allow for the case where the user specifies a closed path but with \(z_n \ne z_0\).
+In that case, we assume that the user meant to repeat \(z_0\).
+This adds another point to the list.}.
+Following Hobby, let us write \(n'\) for \(n\) if the path is open and \(n+1\) if closed.
+From this we compute the distances and angles between successive points, storing these again as arrays.
+These are \Verb+\l_hobby_distances_array+ and \Verb+\l_hobby_angles_array+.
+The term indexed by \(k\) is the distance (or angle) of the line between the \(k\)th point and the \(k+1\)th point.
+For the internal nodes\footnote{Hobby calls the specified points \emph{knots}.}, we store the difference in the angles in \Verb+\l_hobby_psi_array+.
+The \(k\)th value on this is the angle subtended at the \(k\)th node.
+This is thus indexed from \(1\) to \(n'-1\).
+The bulk of the work consists in setting up a linear system to compute the angles of the control points.
+At a node, say \(z_i\), we have various pieces of information:
+\begin{enumerate}
+\item The angle of the incoming curve, \(\phi_i\), relative to the straight line from \(z_{i-1}\) to \(z_i\)
+\item The angle of the outgoing curve, \(\theta_i\), relative to the straight line from \(z_i\) to \(z_{i+1}\)
+\item The tension of the incoming curve, \(\overline{\tau}_i\)
+\item The tension of the outgoing curve, \(\tau_i\)
+\item The speed of the incoming curve, \(\sigma_i\)
+\item The speed of the outgoing curve, \(\rho_i\)
+\end{enumerate}
+The tensions are known at the start.
+The speeds are computed from the angles.
+Thus the key thing to compute is the angles.
+This is done by imposing a ``mock curvature'' condition.
+The formula for the mock curvature is:
+%%
+\[
+\hat{k}(\theta,\phi,\tau,\overline{\tau}) = \tau^2 \left( \frac{2(\theta + \phi)}{\overline{\tau}} - 6\theta\right)
+\]
+%%
+and the condition that the mock curvatures have to satisfy is that at each \emph{internal} node, the curvatures must match:
+%
+\[
+\hat{k}(\phi_i,\theta_{i-1},\overline{\tau}_i,\tau_{i-1})/d_{i-1} = \hat{k}(\theta_i,\phi_{i+1},\tau_i,\overline{\tau}_{i+1})/d_i.
+\]
+%%
+Substituting in yields:
+%%
+\[
+\frac{\overline{\tau}_i^2}{d_{i-1}} \left( \frac{2(\phi_i + \theta_{i-1})}{\tau_{i-1}} - 6\phi_i\right) = \frac{\tau_i^2}{d_i} \left( \frac{2(\theta_i + \phi_{i+1})}{\overline{\tau}_{i+1}} - 6\theta_i \right).
+\]
+%%
+Let us rearrange that to the following:
+%%
+\begin{align*}
+d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 &\theta_{i-1} \\
+%%
+{}+
+d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 (1 - 3 \tau_{i-1}) &\phi_i \\
+%%
+{}-
+d_{i-1} \tau_{i-1} \tau_i^2 (1 - 3 \overline{\tau}_{i+1}) &\theta_i \\
+%%
+{}-
+d_{i-1} \tau_{i-1} \tau_i^2 &\phi_{i+1} \\
+%%
+&\qquad =
+0
+\end{align*}
+%%
+For both open and closed paths this holds for \(i=1\) to \(i=n' - 1\).
+We also have the condition that \(\theta_i + \phi_i = -\psi_i\) where \(\psi_i\) is the angle subtended at a node by the lines to the adjacent nodes.
+This holds for the internal nodes\footnote{Recall that by dint of repetition, all nodes are effectively internal for a closed path.}.
+Therefore for \(i=1\) to \(n'-1\) the above simplifies to the following:
+%
+\begin{align*}
+d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 &\theta_{i-1} \\
+{}+
+(d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 (3 \tau_{i-1} - 1)
+{}+
+d_{i-1} \tau_{i-1} \tau_i^2 (3 \overline{\tau}_{i+1} - 1)) &\theta_i \\
+{}+
+d_{i-1} \tau_{i-1} \tau_i^2 & \theta_{i+1} \\
+=
+- d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 (3 \tau_{i-1} - 1) &\psi_i \\
+{}- d_{i-1} \tau_{i-1} \tau_i^2& \psi_{i+1}
+\end{align*}
+For an open path we have two more equations.
+One involves \(\theta_0\).
+The other is the above for \(i = n'-1 = n-1\) with additional information regarding \(\psi_n\).
+It may be that one or either of \(\theta_0\) or \(\phi_n\) is specified in advance.
+If so, we shall write the given values with a bar: \(\overline{\theta}_0\) and \(\overline{\phi}_n\).
+In that case, the first equation is simply setting \(\theta_0\) to that value and the last equation involves substituting the value for \(\phi_n\) into the above.
+If not, they are given by formulae involving ``curl'' parameters \(\chi_0\) and \(\chi_n\) and result in the equations:
+%
+\begin{align*}
+\theta_0 &= \frac{\tau_0^3 + \chi_0 \overline{\tau}_1^3(3 \tau_0 - 1)}{\tau_0^3(3 \overline{\tau}_1 - 1) + \chi_0 \overline{\tau}_1^3} \phi_1 \\
+\phi_n &= \frac{\overline{\tau}_n^3 + \chi_n \tau_{n-1}^3(3 \overline{\tau}_n - 1)}{\overline{\tau}_n^3(3 \tau_{n-1} - 1) + \chi_n \tau_{n-1}^3} \theta_{n-1}
+\end{align*}
+%%
+Using \(\phi_1 = - \psi_1 - \theta_1\), the first rearranges to:
+%%
+\[
+(\tau_0^3(3 \overline{\tau}_1 - 1) + \chi_0 \overline{\tau}_1^3) \theta_0 + (\tau_0^3 + \chi_0 \overline{\tau}_1^3(3 \tau_0 - 1)) \theta_1 = - (\tau_0^3 + \chi_0 \overline{\tau}_1^3(3 \tau_0 - 1)) \psi_1.
+\]
+%%
+The second should be substituted in to the general equation with \(i = n-1\).
+This yields:
+%%
+\begin{align*}
+d_{n-1} \overline{\tau}_{n} \overline{\tau}_{n-1}^2 &\theta_{n-2} \\
+{}+
+\big(d_{n-1} \overline{\tau}_{n} \overline{\tau}_{n-1}^2 (3 \tau_{n-2} - 1)
+{}+
+d_{n-2} \tau_{n-2} \tau_{n-1}^2 (3 \overline{\tau}_{n} - 1) \\
+{}- d_{n-2} \tau_{n-2} \tau_{n-1}^2 \frac{\overline{\tau}_n^3 + \chi_n \tau_{n-1}^3(3 \overline{\tau}_n - 1)}{\overline{\tau}_n^3(3 \tau_{n-1} - 1) + \chi_n \tau_{n-1}^3}\big) & \theta_{n-1} \\
+=
+- d_{n-1} \overline{\tau}_{n} \overline{\tau}_{n-1}^2 (3 \tau_{n-2} - 1) &\psi_{n-1}
+\end{align*}
+%%
+This gives \(n'\) equations in \(n'\) unknowns (\(\theta_0\) to \(\theta_{n-1}\)).
+The coefficient matrix is tridiagonal.
+It is more natural to index the entries from \(0\).
+Let us write \(A_i\) for the subdiagonal, \(B_i\) for the main diagonal, and \(C_i\) for the superdiagonal.
+Let us write \(D_i\) for the target vector.
+Then for an open path we have the following formulae:
+%%
+\begin{align*}
+A_i &= d_i \overline{\tau}_{i+1} \overline{\tau}^2_i \\
+B_0 &= \begin{cases}
+1 & \text{if}\; \overline{\theta}_0\; \text{given} \\
+\tau_0^3(3 \overline{\tau}_1 - 1) + \chi_0 \overline{\tau}^3_1 & \text{otherwise}
+\end{cases} \\
+B_i &= d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 (3 \tau_{i-1} -1) + d_{i-1} \tau_{i-1} \tau_i^2(3 \overline{\tau}_{i+1} - 1) \\
+B_{n-1} &= \begin{cases} d_{n-1} \overline{\tau}_{n} \overline{\tau}_{n-1}^2 (3 \tau_{n-2} - 1) + d_{n-2} \tau_{n-2} \tau_{n-1}^2(3 \overline{\tau}_{n} - 1) & \text{if}\; \overline{\phi}_n\; \text{given} \\
+d_{n-1} \overline{\tau}_{n} \overline{\tau}_{n-1}^2 (3 \tau_{n-2} - 1) + d_{n-2} \tau_{n-2} \tau_{n-1}^2(3 \overline{\tau}_{n} - 1)
+\\
+- d_{n-2} \tau_{n-2} \tau_{n-1}^2 \frac{\overline{\tau}_n^3 + \chi_n \tau_{n-1}^3(3 \overline{\tau}_n - 1)}{\overline{\tau}_n^3(3 \tau_{n-1} - 1) + \chi_n \tau_{n-1}^3}) & \text{otherwise}
+\end{cases} \\
+C_0 &= \begin{cases}
+0 & \text{if}\; \overline{\theta}_0\; \text{given} \\
+\tau_0^3 + \chi_0 \overline{\tau}_1^3(3\tau_0 - 1) & \text{otherwise}
+\end{cases} \\
+C_i &= d_{i-1} \tau_{i-1} \tau_i^2 \\
+D_0 &= \begin{cases}
+\overline{\theta}_0 & \text{if}\; \overline{\theta}_0\; \text{given} \\
+- (\tau_0^3 + \chi_0 \overline{\tau}_1^3(3 \tau_0 - 1)) \psi_1 & \text{otherwise}
+\end{cases} \\
+D_i &= - d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 (3 \tau_{i-1} - 1) \psi_i
+- d_{i-1} \tau_{i-1} \tau_i^2 \psi_{i+1} \\
+D_{n-1} &= \begin{cases}
+- d_{n-1} \overline{\tau}_{n} \overline{\tau}_{n-1}^2 (3 \tau_{n-2} - 1) \psi_{n-1} - d_{n-2} \tau_{n-2} \tau_{n-1}^2 \overline{\phi}_n & \text{if}\; \overline{\phi}_n\; \text{given} \\
+- d_{n-1} \overline{\tau}_{n} \overline{\tau}_{n-1}^2 (3 \tau_{n-2} - 1) \psi_{n-1} & \text{otherwise}
+\end{cases}
+\end{align*}
+For a closed path, we have \(n\) equations in \(n+2\) unknowns (\(\theta_0\) to \(\theta_{n+1}\)).
+However, we have not included all the information.
+Since we have repeated points, we need to identify \(\theta_0\) with \(\theta_n\) and \(\theta_1\) with \(\theta_{n+1}\).
+To get a system with \(n'\) equations in \(n'\) unknowns, we add the equation \(\theta_0 - \theta_n = 0\) and substitute in \(\theta_{n+1} = \theta_1\).
+The resulting matrix is not quite tridiagonal but has extra entries on the off-corners.
+However, it can be written in the form \(M + u v^\top\) with \(M\) tridiagonal.
+There is some freedom in choosing \(u\) and \(v\).
+For simplest computation, we take \(u = e_0 + e_{n'-1}\).
+This means that \(v = d_{n'-2} \tau_{n'-2} \tau_{n'-1}^2 e_1 - e_{n'-1}\).
+With the same notation as above, the matrix \(M\) is given by the following formulae:
+%%
+\begin{align*}
+A_i &= d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 \\
+%%
+B_0 &= 1 \\
+%%
+B_i &= d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 (3 \tau_{i-1} -1) + d_{i-1} \tau_{i-1} \tau_i^2(3 \overline{\tau}_{i+1} - 1) \\
+%%
+B_{n'-1} &= d_{n'-1} \overline{\tau}_{n'} \overline{\tau}_{n'-1}^2 (3 \tau_{n'-2} -1) + d_{n'-2} \tau_{n'-2} \tau_{n'-1}^2(3 \overline{\tau}_{n'} - 1) + 1\\
+%%
+C_0 &= - d_{n'-2} \tau_{n'-2} \tau_{n'-1}^2 \\
+%%
+C_i &= d_{i-1} \tau_{i-1} \tau_i^2 \\
+%%
+D_0 &= 0 \\
+%%
+D_i &= - d_i \overline{\tau}_{i+1} \overline{\tau}_i^2 (3 \tau_{i-1} - 1) \psi_i
+- d_{i-1} \tau_{i-1} \tau_i^2 \psi_{i+1} \\
+%%
+D_{n'-1} &= - d_{n'-1} \overline{\tau}_{n'} \overline{\tau}_{n'-1}^2 (3 \tau_{n'-2} - 1) \psi_{n'-1}
+- d_{n'-2} \tau_{n'-2} \tau_{n'-1}^2 \psi_1
+\end{align*}
+The next step in the implementation is to compute these coefficients and store them in appropriate arrays.
+Having done that, we need to solve the resulting tridiagonal system.
+This is done by looping through the arrays doing the following substitutions (starting at \(i = 1\)):
+%
+\begin{align*}
+B_i' &= B_{i-1}' B_i - A_i C_{i-1}' \\
+C_i' &= B_{i-1}' C_i \\
+D_i' &= B_{i-1}' D_i - A_i D_{i-1}'
+\end{align*}
+%%
+followed by back-substitution:
+%%
+\begin{align*}
+\theta_{n-1} &= D_{n-1}'/B_{n-1}' \\
+\theta_i &= (D_i' - C_i' \theta_{i+1})/B_i'
+\end{align*}
+%%
+For a closed path, we run this both with the vector \(D\) and the vector \(u = e_0 + e_{n'-1}\).
+Then to get the real answer, we use the Sherman--{}Morrison formula:
+%%
+\[
+(M + u v^\top)^{-1} D = M^{-1} D - \frac{M^{-1} u v^\top M^{-1} D}{1 + v^\top M^{-1} u}.
+\]
+%%
+This leaves us with the values for \(\theta_i\).
+We now substitute these into Hobby's formulae for the lengths:
+%%
+\begin{align*}
+\rho_i &= \frac{2 + \alpha_i}{1 + (1 - c) \cos \theta_i + c \cos \phi_{i+1}} \\
+\sigma_{i+1} &= \frac{2 - \alpha_i}{1 + (1 - c) \cos \phi_{i+1} + c \cos \theta_i} \\
+\text{where} \;\alpha_i &= a (\sin \theta_i - b \sin \phi_{i+1})(\sin \phi_{i+1} - b \sin \theta_i)(\cos \theta_i - \cos \phi_{i+1})
+\end{align*}
+%%
+and \(a = \sqrt{2}\), \(b = 1/16\), and \(c = (3 - \sqrt{5})/2\).
+These are actually the \emph{relative} lengths so need to be adjusted by a factor of \(d_i/3\).
+Now \(\theta_i\) is the angle relative to the line from \(z_i\) to \(z_{i+1}\), so to get the true angle we need to add back that angle.
+Fortunately, we stored those angles at the start.
+So the control points are:
+%%
+\begin{gather*}
+d_i \rho_i (\cos (\theta_i + \omega_i), \sin (\theta_i + \omega_i))/3 + z_i \\
+- d_i \sigma_{i+1} (\cos(\omega_i - \phi_{i+1}), \sin(\omega_i - \phi_{i+1}))/3 + z_{i+1}
+\end{gather*}
+
+\section{A Piecewise Version of Hobby's Algorithm}
+\label{sec:quick}
+Here we present a variant of Hobby's algorithm.
+One difficulty with Hobby's algorithm is that it works with the path as a whole.
+It is therefore not possible to build up a path piecewise.
+We therefore modify it to correct for this.
+Obviously, the resulting path will be less ``ideal'', but will have the property that adding new points will not affect earlier segments.
+The method we use is to employ Hobby's algorithm on two-{}segment subpaths.
+When applied to a two-{}segment subpath, the algorithm provides two cubic Bezier curves: one from the \(k\)th point to the \(k+1\)st point and the second from the \(k+1\)st to the \(k+2\)nd.
+Of this data, we keep the first segment and use that for the path between the \(k\)th and \(k+1\)st points.
+We also remember the outgoing angle of the first segment and use that as the incoming angle on the next computation (which will involve the \(k+1\)st, \(k+2\)nd, and \(k+3\)rd points).
+The two ends are slightly different to the middle segments.
+On the first segment, we might have no incoming angle.
+On the last segment, we render both pieces.
+This means that for the initial segment, we have a \(2 \times 2\) linear system:
+%%
+\[
+\begin{bmatrix}
+B_0 & C_0 \\
+A_1 & B_1
+\end{bmatrix}
+\Theta = \begin{bmatrix}
+D_0 \\ D_1
+\end{bmatrix}
+\]
+%%
+This has solution:
+%%
+\[
+\Theta = \frac{1}{B_0 B_1 - C_0 A_1} \begin{bmatrix} B_1 & - C_0 \\ -A_1 & B_0 \end{bmatrix} \begin{bmatrix} D_0 \\ D_1 \end{bmatrix} = \frac{1}{B_0 B_1 - C_0 A_1} \begin{bmatrix} B_1 D_0 - C_0 D_1 \\ B_0 D_1 - A_1 D_0 \end{bmatrix}
+\]
+Now we have the following values for the constants:
+%%
+\begin{align*}
+A_1 &= d_1 \overline{\tau}_2 \overline{\tau}_1^2 \\
+%%
+B_0 &= \tau_0^3 (3 \overline{\tau}_1 - 1) + \chi_0 \overline{\tau}_1^3 \\
+%%
+B_1 &= d_1 \overline{\tau}_2 \overline{\tau}_1^2 (3 \tau_0 - 1) + d_0 \tau_0 \tau_1^2(3 \overline{\tau}_2 - 1) - d_0 \tau_0 \tau_1^2 \frac{\overline{\tau}_2^3 + \chi_2 \tau_1^3 (3 \overline{\tau}_2 - 1)}{\overline{\tau}_2^3 (3 \tau_1 - 1) + \chi_2 \tau_1^3} \\
+%%
+C_0 &= \tau_0^3 + \chi_0 \overline{\tau}_1^3 (3 \tau_0 - 1) \\
+%%
+D_0 &= - (\tau_0^3 + \chi_0 \overline{\tau}_1^3 ( 3 \tau_0 - 1)) \psi_1 \\
+%%
+D_1 &= - d_1 \overline{\tau}_2 \overline{\tau}_1^2 (3 \tau_0 - 1) \psi_1
+\end{align*}
+
+Let us, as we are aiming for simplicity, assume that the tensions and curls are all \(1\).
+Then we have \(A_1 = d_1\), \(B_0 = 3\), \(B_1 = 2 d_1 + 2 d_0 - d_0 = 2 d_1 + d_0\), \(C_0 = 3\), \(D_0 = - 3 \psi_1\), \(D_1 = - 2 d_1 \psi_1\).
+Thus the linear system is:
+%%
+\[
+\begin{bmatrix}
+3 & 3 \\
+d_1 & 2 d_1 + d_0
+\end{bmatrix}
+\Theta = - \psi_1 \begin{bmatrix}
+3 \\ 2 d_1
+\end{bmatrix}
+\]
+%%
+which we can row reduce to:
+%%
+\[
+\begin{bmatrix}
+1 & 1 \\
+0 & d_1 + d_0
+\end{bmatrix}
+\Theta = -\psi_1 \begin{bmatrix}
+1 \\ d_1
+\end{bmatrix}
+\]
+%%
+whence \(\theta_1 = -\psi_1 \frac{d_1}{d_0 + d_1}\) and \(\theta_0 = -\psi_1 - \theta_1 = -\psi_1\frac{d_0 }{d_0 + d_1}\).
+We also compute \(\phi_1 = -\psi_1 - \theta_1 = \theta_0\) and \(\phi_2 = \theta_1\) (in the simple version).
+We use \(\theta_0\) and \(\phi_1\) to compute the bezier curve of the first segment, make a note of \(\theta_1\), and -- assuming there are more segments -- throw away \(\phi_2\).
+
+For the inner segments, we have the system:
+%%
+\[
+\begin{bmatrix}
+1 & 0 \\
+A_1 & B_1
+\end{bmatrix}
+\Theta = \begin{bmatrix}
+\theta_0 \\
+D_1
+\end{bmatrix}
+\]
+%%
+which has the solution \(\theta_1 = (D_1 - A_1 \theta_0)/B_1\).
+The values of the constants in this case are:
+%%
+\begin{align*}
+A_1 &= d_1 \overline{\tau}_2 \overline{\tau}_1^2 \\
+%%
+B_1 &= d_1 \overline{\tau}_2 \overline{\tau}_1^2 (3 \tau_0 - 1) + d_0 \tau_0 \tau_1^2(3 \overline{\tau}_2 - 1) - d_0 \tau_0 \tau_1^2 \frac{\overline{\tau}_2^3 + \chi_2 \tau_1^3 (3 \overline{\tau}_2 - 1)}{\overline{\tau}_2^3 (3 \tau_1 - 1) + \chi_2 \tau_1^3} \\
+%%
+D_1 &= - d_1 \overline{\tau}_2 \overline{\tau}_1^2 (3 \tau_0 - 1) \psi_1
+\end{align*}
+Again, let us consider the simpler case.
+Then \(A_1 = d_1\), \(B_1 = 2 d_1 + d_0\), and \(D_1 = - 2 d_1 \psi_1\).
+Thus \(\theta_1 = (-2 d_1 \psi_1 - d_1 \theta_0)/(2 d_1 + d_0) = - (2 \psi_1 + \theta_0) \frac{d_1}{2 d_1 + d_0}\).
+We compute \(\phi_1 = -\psi_1 - \theta_1 = \frac{- \psi_1 d_0 + \theta_0 d_1}{2 d_1 + d_0}\) and \(\phi_2 = \theta_1\).
+Then we store \(\theta_1\) for the next iteration.
+
+The actual curves are then produced from the angles using the same formulae for the lengths of the control points as in the main algorithm.
+
+At the last stage, we render both segments of the generated curve.
+
+\section{Acknowledgements}
+
+This package began life as an answer to the question \href{http://tex.stackexchange.com/q/54771/86}{Curve through a sequence of points with Metapost and TikZ}.
+Once released upon the unsuspecting world, various questions on the \href{http://tex.stackexchange.com}{TeX-SX} site have prompted new features (and bug-fixes).
+Most of these can be found by looking at the \href{http://tex.stackexchange.com/questions/tagged/hobby}{list of questions tagged ``hobby''} on that site.
+
+
+\begin{thebibliography}{1} \bibitem{MR834054} John~D. Hobby. \newblock Smooth, easy to compute interpolating splines. \newblock {\em Discrete Comput. Geom.}, 1:123--140, 1986. \end{thebibliography}
+
+\end{document}
diff --git a/graphics/pgf/contrib/istgame/README.txt b/graphics/pgf/contrib/istgame/README.txt
new file mode 100644
index 0000000000..38155f274a
--- /dev/null
+++ b/graphics/pgf/contrib/istgame/README.txt
@@ -0,0 +1,31 @@
+istgame.sty: Drawing Game Trees with TikZ
+=========================================
+
+Author: In-Sung Cho
+
+Introduction:
+
+This is a LaTeX package that provides macros based on TikZ to draw a game tree.
+The main idea underlying the core macros here is the completion of a whole tree
+by using a sequence of simple 'parent-child' tree structures,
+with no longer relations involved
+like the use of grandchildren or great-grandchildren.
+With the istgame package, you can draw a game tree
+as easily as drawing a game tree with pen and paper.
+
+Dependencies:
+
+The package istgame depends on the packages tikz, xparse, and expl3.
+
+License:
+
+This work may be distributed and/or modified
+under the conditions of the LaTeX Project Public License,
+either version 1.3c of this license or any later version.
+The latest version of this license is in
+http://www.latex-project.org/lppl.txt.
+
+Contacts:
+
+Please report any errors or suggestions to the author,
+In-Sung Cho at <ischo at ktug.org>. \ No newline at end of file
diff --git a/graphics/pgf/contrib/istgame/istgame-doc-v2.0.tex b/graphics/pgf/contrib/istgame/istgame-doc-v2.0.tex
new file mode 100644
index 0000000000..aa91c4d807
--- /dev/null
+++ b/graphics/pgf/contrib/istgame/istgame-doc-v2.0.tex
@@ -0,0 +1,7464 @@
+%!TEX root = istgame-doc.tex
+
+%\begin{document}
+\setcounter{section}{-1}
+
+\section{Changes and remarks}
+
+\subsection{Changes}
+
+Some macros have been \textsc{changed} and \textsc{removed}.
+Those who have used these changed and removed macros may want to \textsc{find} and \textsc{replace} the followings:
+
+%\begin{center}
+%\begin{tabu} {X[l1.5]X[l1.5]} \toprule %to .5\linewidth
+%\makecell[l]{\textbf{ver. 1.0}} & \makecell[l]{\textbf{ver. 2.0 or later}} \\\midrule
+%\cmd{\istb.} & \cmd{\istbt} \\\tabucline-
+%\cmd{\xtInfoset'} & \cmd{\xtInfoset} \\\tabucline-
+%\cmd{\xtInfosetO'} & \cmd{\xtInfosetO} \\\tabucline-
+%\cmd{\setistgrowkey} & \cmd{\setxtgrowkey} \\\tabucline-
+%\end{tabu}
+%\end{center}
+
+\begin{center}
+\begin{tabular} {lll} \toprule %to .5\linewidth
+\makecell[l]{\textbf{ver. 1.0}} & \makecell[l]{\textbf{ver. 2.0 or later}} \\\midrule
+\cmd{\istb.} & \cmd{\istbt} \\\cline{1-2}
+\cmd{\xtInfoset'} & \cmd{\xtInfoset} \\\cline{1-2}
+\cmd{\xtInfosetO'} & \cmd{\xtInfosetO} \\\cline{1-2}
+\cmd{\setistgrowkey} & \cmd{\setxtgrowkey} \\\cline{1-2}
+\end{tabular}
+\end{center}
+
+\paragraph{Changed and removed macros}
+
+\begin{itemize}\tightlist
+ \item The macro name \cmd{\istb.}(terminal version) has been changed
+ to \cmd{\istbt} (terminal version).
+ \begin{itemize}
+ \item This is the opportunity cost of having a new macro \cmd{\istB}.
+ \end{itemize}
+\item The two (unsatisfactory) macros \cmd{\xtInfoset'} and \cmd{\xtInfosetO'} have been removed.
+ \begin{itemize}
+ \item The macro \cmd{\xtInfosetO} is completely redesigned,
+ so that we do not need the macro \cmd{\xtInfosetO'} any more.
+ \item No reasons could be found to keep (even for the backward compatibility)
+ the swap versions \cmd{\xtInfoset'} and \cmd{\xtInfosetO'},
+ except for the inconvenience to do `find and replace.'
+ \end{itemize}
+\item To keep consistency in naming macros, \cmd{\setistgrowkey} is renamed as \cmd{\setxtgrowkey}.
+\end{itemize}
+
+
+\paragraph{Redesigned macros and the environment}
+
+\begin{itemize}\firmlist
+\item \cmd{\xtInfosetO}: completely redefined to improve its function
+ \begin{itemize}
+ \item Now a \emph{sloped} information set is possible.
+ \item It connects two nodes like \cmd{\xtInfosetO(coor1)(coor2)},
+ but if the two coordinates are identical it represents a \emph{singleton information set}
+ by a \emph{circle} by default.
+ \item This change does not seem to cause much harm, but be aware that
+ the swap version \cmd{\xtInfosetO'} has been removed and replaced by \cmd{\xtInfosetO}.
+ \item Be aware also that the way to change the \emph{height} (\xw{1em} by new default)
+ of an information set has been \emph{changed},
+ though you might not see much difference if you have only used the default information sets.
+ \item With \emph{new macros} \cmd{\xtCInfoset} and \cmd{\xtCInfosetO}, a curved (even skewed curved) information set is now possible.
+ \end{itemize}
+\item \env{istgame} environment: (internal change)
+ \begin{itemize}
+ \item Now the each value of the option of \xw{xscale} and \xw{yscale}, if exists,
+ is extracted and saved at \cmd{\xtxscale} and \cmd{\xtyscale}, respectively.
+ The value of \xw{scale} is also saved at \cmd{\xtscale}
+ only when it is used without \xw{xscale} nor \xw{yscale}.
+ These values are internally used to get the best outputs of trees in many ways.
+ \item If the \Tikz\ arrow option \xw{->} exists in the option list of an \env{istgame} environment,
+ you can globally control the arrow-end-shorten value (by default, \xw{shorten >=0pt})
+ by using a new macro \cmd{\setistgameshorten}.
+ This is to get a better result of branches with arrows.
+ \end{itemize}
+\item Some changes that you might not notice have been made, including:
+ \begin{itemize}
+ \item The core macros \cmd{\istroot}, \cmd{\istb}, and \cmd{\endist} have literally been redefined
+ for some purposes, but this makes no difference to users.
+ \item The options \xw{thin} and \xw{solid} have been added to the definitions of basic node styles.
+ \item Some default values have been slightly changed.
+ \end{itemize}
+\end{itemize}
+
+\subsection{What's new}
+
+\paragraph{Some new functions}
+
+\begin{itemize}\tightlist
+\item \emph{input mode changer} (math or text) for important labels: owners, action labels, and payoffs
+ \begin{itemize}\tightlist
+ \item \cmd{\setistmathTF} as the input mode changer for the important labels
+ \item \cmd{\setistmathTF*} having additional function as the \emph{text font style changer}
+ \end{itemize}
+\item \emph{curved} (even \emph{skewed}) \emph{information sets}
+ \begin{itemize}\tightlist
+ \item \cmd{\xtCInfoset} for curved information sets
+ \item \cmd{\xtCInfosetO} for curved bubble type information sets
+ \end{itemize}
+\item enhanced \emph{continuum of branches} (making \cmd{\istcntm} and \cmd{\istcntmarc} obsolete)
+ \begin{itemize}\tightlist
+ \item \cmd{\istrootcntm} for a continuum triangle
+ \item \cmd{\istrootcntmA} for a continuum arc (with \cmd{\istbA})
+ \item \cmd{\cntmAInfoset} and \cmd{\cmtmAInfosetO} for information sets for a continuum of branches
+ \end{itemize}
+\item \emph{arrows} and \emph{middle arrows} on branches
+ \begin{itemize}\tightlist
+ \item controllable arrow option \xw{->-} with \cmd{\setxtarrowtips} and middle arrow tip styles
+ \item \cmd{\xtShowMidArrows} and \cmd{\xtShowArrows}
+ \end{itemize}
+\item and some more
+ \begin{itemize}
+ \item \cmd{\istB} for dual action labels
+ \item \cmd{\xtTimeLineH}, \cmd{\xtTimeLineV}, \cmd{\xtCommentTo}, \cmd{\xtCommentFrom}, etc.
+ \end{itemize}
+\end{itemize}
+
+\paragraph{List of new macros}
+\begin{itemize}\tightlist
+\item \cmd{\istbt(*)}: terminal version of \cmd{\istb(*)}
+ (replacement of the removed macro \cmd{\istb.(*)})
+\item \cmd{\istB(*)}: dual action label version of \cmd{\istb(*)}
+\item \cmd{\istBt(*)}: terminal version of \cmd{\istB(*)}
+\item \cmd{\istbA(*)}: alternative version of \cmd{\istb(*)} (intended to work with a continuum arc)
+\item \cmd{\istbAt(*)}: terminal version of \cmd{\istbA(*)}
+%
+\listdivider
+
+\item \cmd{\setistmathTF}: input mode changer (math or text) for owners, action labels, and payoffs
+% \begin{itemize}\tightlist
+% \item \cmd{\istownermathtrue}, \cmd{\istactionlabelmathtrue}, \cmd{\istpayoffmathtrue}: math mode
+% \item \cmd{\istownermathfalse}, \cmd{\istactionlabelmathfalse}, \cmd{\istpayoffmathfalse}: text mode
+% \end{itemize}
+\item \cmd{\setistmathTF*}: input mode and font style changer for owners, action labels, and payoffs
+% \begin{itemize}\tightlist
+% \item \cmd{\istownertextfont}, \cmd{\istactionlabeltextfont}, \cmd{\istpayofftextfont}
+% \end{itemize}
+%
+\listdivider
+
+\item \cmd{\xtCInfoset}: (curved version) curved information set
+\item \cmd{\xtCInfosetO}: (curved oval version) curved oval type information set
+\item \cmd{\xtCInfosetOTurnX}: turns \xw{X} circles of \cmd{\xtCInfosetO} (to use it just in case)
+%
+\listdivider
+
+\item \cmd{\xtInfoset*}: prints owners according to the input mode as set by \cmd{\setistmathTF(*)}
+\item \cmd{\xtInfosetO*}: prints owners according to the input mode as set by \cmd{\setistmathTF(*)}
+\item \cmd{\xtCInfoset*}: prints owners according to the input mode as set by \cmd{\setistmathTF(*)}
+\item \cmd{\xtCInfosetO*}: prints owners according to the input mode as set by \cmd{\setistmathTF(*)}
+\item \cmd{\xtOwner*}: prints owners according to the input mode as set by \cmd{\setistmathTF(*)}
+\item \cmd{\xtActionLabel*}: prints action labels according to the input mode set by \cmd{\setistmathTF(*)}
+\item \cmd{\xtPayoff*}: prints payoffs according to the input mode as set by \cmd{\setistmathTF(*)}
+\item \cmd{\xtInfosetOwner*}: prints owners according to the input mode set by \cmd{\setistmathTF(*)}
+%
+\listdivider
+
+\item \cmd{\setxtinfosetstyle}: changes line the style (line style, fill, etc.) for all information sets
+\item \cmd{\setxtinfosetlayer}: changes the layer of information sets
+\item \cmd{\setxtsubgamelayer}: changes the layer of \cmd{\xtSubgameBox} and \cmd{\xtSubgameOval}
+\item \cmd{\setistgameshorten}: value of the key \xw{shorten >} in \env{istgame} environment option list
+%
+\listdivider
+
+\item \cmd{\cntmdistance}: analogous to \cmd{\xtdistance}, for a continuum of branches
+\item \cmd{\cntmdistance*}: incorporates \cmd{\cntmdistance} with \cmd{\xtdistance}
+%\item \cmd{\cntmactsibdist}: sibling distance for action branches from \cmd{\istrootcntm} and its variants
+\item \cmd{\istrootcntm}: \cmd{\istroot} \xw{+} \xw{cntm}, printing a continuum of branches
+\item \cmd{\istrootcntm'}: swap version of \cmd{\istrootcntm}
+\item \cmd{\istrootocntm}: (oval version) \cmd{\istrooto} \xw{+} \xw{cntm}, printing a continuum triangle
+\item \cmd{\istrootocntm'}: swap version of \cmd{\istrootocntm}
+\item \cmd{\cntmpreset}: controls a continuum of branches (line style, color, size, fill color)
+\item \cmd{\cntmpreset*}: controls a simple triangle continuum of branches with no background color
+\item \cmd{\cntmistb}: similar to \cmd{\istb} for the outermost branches of a continuum triangle
+\item \cmd{\cntmistb*}: draws \xw{solid node}s at the ends of the continuum outermost branches
+\item \cmd{\istrootcntmA}: \cmd{\istroot} \xw{+} \xw{cntmA}, printing a continuum arc
+\item \cmd{\istrootcntmA'}: swap version of \cmd{\istrootcntmA}
+\item \cmd{\istrootocntmA}: (oval version) \cmd{\istrooto} \xw{+} \xw{cntmA}, printing a continuum arc
+\item \cmd{\istrootocntmA'}: swap version of \cmd{\istrootocntmA}
+\item \cmd{\cntmApreset}: controls the features of a continuum arc
+\item \cmd{\cntmAlayerpreset}: sets the layer of a continuum wedge (with fill color)
+\item \cmd{\cntmAistb}: similar to \cmd{\istb} for the outermost branches of a continuum arc
+\item \cmd{\cntmAistb*}: draws \xw{solid node}s at the ends of the continuum arc outermost branches
+\item \cmd{\cntmAInfoset}: prints an information set for a continuum arc
+\item \cmd{\cntmAInfosetO}: oval version of \cmd{\cntmAInfoset}
+\item \cmd{\xtShowEndPoints*}: shows additionally the outermost endpoints of a continuum of branches
+\item \cmd{\xtHideEnpPoints*}: turns off only the endpoints of a continuum of branches
+\item \cmd{\cntmAexpostShowEndPoints}: shows the two endpoints of a continuum arc
+%
+\listdivider
+
+\item \cmd{\setxtarrowtips}: works through \xw{->-} to control the features of middle arrow tips
+\item \cmd{\xtShowMidArrows}: shows arrows in the middle of branches
+\item \cmd{\xtHideMidArrows}: hides middle arrows drawn by \cmd{\xtShowMidArrows}
+\item \cmd{\setxtshowmidarrows}: controls the middle arrows on branches in a simple tree
+\item \cmd{\xtShowArrows}: shows arrows at the ends of branches with endpoints
+\item \cmd{\xtHideArrows}: hides arrows drawn by \cmd{\xtShowArrows}
+\item \cmd{\xtHideArrows*}: hides arrows but with endpoints remained
+\item \cmd{\setxtshowarrows}: controls the features of the arrows shown by \cmd{\xtShowArrows}
+%
+\listdivider
+
+\item \cmd{\xtTimeLineH}: a horizontal time-line
+\item \cmd{\xtTimeLineH'}: a horizontal time-line with a label at the other end
+\item \cmd{\xtTimeLineV}: a vertical time-line
+\item \cmd{\xtTimeLineV'}: a vertical time-line with a label at the other end
+\item \cmd{\xtCommentTo}: to leave a comment \xw{to} a node \xw{from} a \emph{relative} coordinate
+\item \cmd{\xtCommentFrom}: to leave a comment \xw{from} an \emph{absolute} coordinate \xw{to} a node
+%
+\listdivider
+
+\item \cmd{\xtcureslopedlabelsNS}: cures the \TikZ\ issue of sloped labels with asymmetric scales
+\item \cmd{\xtcureslopedlabelsEW}: same, for a tree growing eastwards or westwards\par
+ The last two macros are for only temporary use and could be removed at any time.
+\end{itemize}
+
+
+\paragraph{List of new arrow styles}
+
+\begin{itemize}\tightlist
+\item \xw{->-}: (controllable) middle arrow tip, taking one optional argument
+\item \xw{->>-}: double middle arrow tip
+\item \xw{->>>-}: triple middle arrow tip
+\item \xw{-o-}: circle middle arrow tip
+\item \xw{-x-}: cross middle arrow tip
+\end{itemize}
+
+\subsection{How to read this document}
+
+%First of all, since this package is just an application of \Tikz\ to draw game trees, not for learning \Tikz, you should have basic knowledge of using \Tikz\ to take a full advantage of this package.
+
+As a \Tikz\ user, if this is your first read of this manual, \emph{all you need to read} is Section~\ref{sec:gettingstarted} entitled ``\emph{Getting started}."
+That's only \emph{four} pages long. (You can find a little secret at the first part of Section~\ref{sec:desperateusers} entitled ``\emph{Complete examples for desperate users}.")
+Every example in this document is provided with its complete codes you can copy to use.
+Now you can go to Section~\ref{sec:gettingstarted} to get started!
+
+If you are not urgent, you can continue to read sections on \emph{core macros} up to Section~\ref{sec:istb}. That's about \emph{twenty} pages total. Still more time? Then read Section~\ref{sec:corelabels} (entitiled ``\emph{Important labels: players, action labels, and payoffs}") and Section~\ref{sec:setistmathTF} (entitled ``\emph{Input mode and text font style changer}").
+That's about \emph{thirty} pages all total.
+
+Throughout the manual, just disregard the parts with marks including ``\emph{fine-tuning}" or ``\emph{not for most users}," if you are not an experienced user of this package. Just reading first part of each section will suffice most users to draw game trees in almost all cases, hopefully.
+
+If you you are an experienced user of the \pkg{istgame} package, enjoy every detail of the package.
+
+%\clearpage
+\subsection{Remarks}
+
+\paragraph{Rules of thumb for the usage of delimiters}
+
+Though the rules are not strictly observed, it might be useful to go over the rules of thumb for the usage of delimiters.
+
+\begin{itemize}\tightlist
+\item \verb+{ }+: contents, texts, important dimensions (mandatory or optional)
+\item \xw{[ ]}: usual options, positions or directions, node types, fill color
+\item \xw{( )}: coordinate related arguments, dimension as the last optional argument, special purposes
+\item \xw{< >}: angles (or directions), special purposes (mostly used right before \verb+{ }+)
+\item \xw{+ .. +}: only for the local change of level and sibling distances with \cmd{\istroot} and its friends
+\item \xw{! !}: \xw{midpoint factor} only for curved information sets
+\end{itemize}
+
+As for the order of delimiters, the (somewhat loose) rules are as follows:
+
+\begin{itemize}\tightlist
+\item Generally, all macros are designed to avoid leaving an empty argument like \xw{[][blue]}, as possible as they can do. (This is \emph{input minimalism} for lazy users including myself!)
+\item \xw{< >} is used just before \verb+{ }+, except for \xw{\istb} and its friends.
+\item \xw{( )} as the last optional argument is for dimensions, like \xw{(1em)} or \xw{(3pt)}.
+\item The order mostly looks like \xw{<>\{\}[]} or \xw{<>\{\}[]()}, especially after a mandatory argument.
+\end{itemize}
+
+\paragraph{Optional versions of macros}
+
+Some macros have a starred(\xw{*}) version or a swap(\xw{'}) version, for example, \cmd{\istb*} or \cmd{\istroot'}.
+
+\begin{itemize}\tightlist
+\item \xw{* version}: just another version with different functions (in some cases, it's quite different)
+\item \xw{' version}: clockwise arrangement of branches or its related version
+\end{itemize}
+
+
+\paragraph{Global macros}
+
+Some macros have global effects, so you can use them outside of the \env{istgame} environment or even in the preamble of your document, but \emph{with very great caution}.
+
+The following macros, all prefixed by \cmd{\setist...}, can be used outside of the \env{istgame} environment, to change the default values of the options:
+
+\begin{itemize}\tightlist
+\item \icmd{\setistgamefontsize}\verb+{<text size>}+ \hfill (default: \cmd{\normalsize})
+\item \icmd{\setistgameshorten}\verb+{<arrow end shorten dim>}+ \hfill (default: \xw{0pt})
+ \begin{itemize}
+ \item This works only when \xw{->} exists in the option list of the \env{istgame} environment.
+ \end{itemize}
+\end{itemize}
+
+Though it is not recommended, you can use all the macros prefixed by \cmd{\setist...} inside or outside of the \env{istgame} environment to change the default values.
+
+\begin{itemize}\tightlist
+\item \icmd{\setistmathTF}, \icmd{\setistmathTF*} \hfill (initially: \xw{011})
+\item \icmd{\setistdefaultnodeinnersep} \hfill (default: \xw{1pt})
+\item \icmd{\setistdefaultnodeoutersep} \hfill (default: \xw{0pt})
+\item \icmd{\setistdefaultnodedrawcolor} \hfill (default: \xw{black})
+\item \icmd{\setistdefaultnodefillcolor} \hfill (default: \xw{white})
+\item \icmd{\setist<...>NodeStyle}
+\item \icmd{\setistgrowdirection}, \icmd{\setistgrowdirection'} \hfill (default: \xw{south}):
+ \begin{itemize}
+ \item You may not want to use (but still can use) this outside of an \env{istgame} environment.
+ \end{itemize}
+\end{itemize}
+
+You can even do, in the preamble of your document, like:
+
+\begin{verbatim}
+ \usepackage{istgame}
+ \setistgamefontsize{\normalsize}
+ \setistdefaultnodedrawcolor{black}
+ \setistSolidNodeStyle{2.4pt}
+ \setistgameshorten{.3pt}
+ \setistmathTF011
+\end{verbatim}
+
+The node styles such as \xw{ellipse node} and \xw{rectangle node} has \xw{white} as the default background color.
+This means that if the paper color of your document is not white, say, \xw{blue!16}, you might not satisfy the results because the nodes have \xw{white} background.
+In this case you can resolve the conflict by adding the following two lines at the very first of your document:
+\begin{verbatim}
+ \papercolor{blue!16}
+ \setistdefaultnodefillcolor{blue!16}
+\end{verbatim}
+
+The background color of the TeXShop preview in the dark mode of \xw{macOS} \xw{Mojave} is very similar to \xw{black!16}.
+
+
+\paragraph{Known problem with the \pkg{tikz-qtree} package}
+
+It seems that
+\pkg{tikz-qtree} changes node anchors.
+So, with the \pkg{tikz-qtree} package uploaded, you will get unexpected results
+when you draw a game tree by using the \xw{tree} library in \TikZ.
+Since \pkg{istgame} is based on the \xw{tree} library, it is also affected by \pkg{tikz-qtree}, resulting in unexpected outputs.
+
+The best way to resolve this problem is that you DO NOT LOAD \pkg{tikz-qtree} when you draw game trees with \TikZ.
+If, for some reason, you need to load \pkg{tikz-qtree} when you draw a game tree by using the \pkg{istgame} package, a temporary solution to resolve the conflict is to add the \TikZ\ option \xw{edge from parent path} in the option list of \pkg{istgame} environment as follows:
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+ % tikz-qtree conflict resolution (only with \usepackage{tikz-qtree})
+ [
+ edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}
+ ]
+\end{tcblisting}
+%\begin{tcblisting}{listing only}
+%\begin{istgame}%
+% [ % tikz-qtree conflict resolution (only with \usepackage{tikz-qtree})
+% edge from parent path={(\tikzparentnode) -- (\tikzchildnode)}
+% ]
+% < istgame codes >
+%\end{istgame}
+%\end{tcblisting}
+%\xbigskip1
+
+%\tmpclearpage
+\subsection{Previous changes (up to version 1.0)}
+
+A considerable number of macro names have been changed in the version 0.8 (Jan.\@ 17, 2017) of this package.\footnote{The \pkg{istgame} package of the version older than ver.\@ 1.0 had been distributed via the KTUG (Korean TeX Users Group) Private Repository.}
+The following old macro names in any previously written documents using codes in \pkg{istgame} ver.\@ 0.7 or before, should be replaced by the new names, accordingly.
+
+Also, \cmd{\istroot*}, \cmd{\istcntm*}, and \cmd{\xtInfoset*} should be replaced by \cmd{\istrooto}, \cmd{\istcntmarc}, and \cmd{\xtInfoseto}, respectively, in the version 1.0 or later.
+
+%\begin{center}
+%\begin{tabu} {X[l4]X[l3]X[l2]} \toprule % to\linewidth
+%\makecell[l]{\textbf{ver.\@ 0.7 or before}} & \makecell[l]{\textbf{ver.\@ 0.8 or later}} & \makecell[l]{\textbf{ver.\@ 1.0 or later}}\\\midrule
+%\cmd{\xdistance} & \cmd{\xtdistance} & \\\tabucline-
+%\cmd{\xDot} &\cmd{\xtNode} & \\\tabucline-
+%\cmd{\xInfoset} &\cmd{\xtInfoset} & \\\tabucline-
+%\cmd{\xInfoset*} &\cmd{\xtInfoset*} & \cmd{\xtInfosetO} \\\tabucline-
+%\cmd{\xInfosetOwner} &\cmd{\xtInfosetOwner} & \\\tabucline-
+%\cmd{\xActionLabel} &\cmd{\xtActionLabel} & \\\tabucline-
+%\cmd{\xPayoff} &\cmd{\xtPayoff} & \\\tabucline-
+%\cmd{\ShowTerminalNodes} &\cmd{\xtShowTerminalNodes} & \\\tabucline-
+%\cmd{\HideTerminalNodes} &\cmd{\xtHideTerminalNodes} & \\\tabucline-
+%\cmd{\levdist} &\cmd{\xtlevdist} & \\\tabucline-
+%\cmd{\sibdist} &\cmd{\xtsibdist} & \\\tabucline-
+%\cmd{\setistactionlabelshift} & ~ & \cmd{\xtALPush} \\\tabucline-
+%\cmd{\setistactionlabelposition} & ~ & \cmd{\xtALShift} \\\tabucline-
+%\cmd{\istroot*} & & \cmd{\istrooto} \\\tabucline-
+%\cmd{\istcntm*} & & \cmd{\istcntmarc} \\\tabucline-
+%\end{tabu}
+%\end{center}
+
+\begin{center}
+\begin{tabular} {lll} \toprule % to\linewidth
+\makecell[l]{\textbf{ver.\@ 0.7 or before}} & \makecell[l]{\textbf{ver.\@ 0.8 or later}} & \makecell[l]{\textbf{ver.\@ 1.0 or later}}\\\midrule
+\cmd{\xdistance} & \cmd{\xtdistance} & \\\cline{1-3}
+\cmd{\xDot} &\cmd{\xtNode} & \\\cline{1-3}
+\cmd{\xInfoset} &\cmd{\xtInfoset} & \\\cline{1-3}
+\cmd{\xInfoset*} &\cmd{\xtInfoset*} & \cmd{\xtInfosetO} \\\cline{1-3}
+\cmd{\xInfosetOwner} &\cmd{\xtInfosetOwner} & \\\cline{1-3}
+\cmd{\xActionLabel} &\cmd{\xtActionLabel} & \\\cline{1-3}
+\cmd{\xPayoff} &\cmd{\xtPayoff} & \\\cline{1-3}
+\cmd{\ShowTerminalNodes} &\cmd{\xtShowTerminalNodes} & \\\cline{1-3}
+\cmd{\HideTerminalNodes} &\cmd{\xtHideTerminalNodes} & \\\cline{1-3}
+\cmd{\levdist} &\cmd{\xtlevdist} & \\\cline{1-3}
+\cmd{\sibdist} &\cmd{\xtsibdist} & \\\cline{1-3}
+\cmd{\setistactionlabelshift} & ~ & \cmd{\xtALPush} \\\cline{1-3}
+\cmd{\setistactionlabelposition} & ~ & \cmd{\xtALShift} \\\cline{1-3}
+\cmd{\istroot*} & & \cmd{\istrooto} \\\cline{1-3}
+\cmd{\istcntm*} & & \cmd{\istcntmarc} \\\cline{1-3}
+\end{tabular}
+\end{center}
+
+
+%\clearpage
+
+\section{Getting started}
+\label{sec:gettingstarted}
+
+The package \ipkg{istgame} provides macros built on \TikZ\ to draw game trees. The core macros provided with this package are \icmd{\istroot}, \icmd{\istb}, and \icmd{\endist}.
+\cmd{\istroot} pins down the root of a tree or a subtree, \cmd{\istb} represents a branch, and \cmd{\endist} indicates the end of drawing a simple tree. Without \cmd{\endist}, the tree is NOT actually drawn, with no error messages produced.
+A tree drawn by the sequence of \cmd{\istroot-}\cmd{\istb-}\cmd{\endist} is a \ixsw{simple tree}.
+You can draw a whole game tree by repeatedly connecting these \emph{simple tree structures}.
+
+\xbigskip1
+
+Here, the prefix `ist' stands for `it's a simple tree.' You can also read it as `insung's simple tree' if you would like.
+
+\xbigskip1
+
+The package \pkg{istgame} depends on the packages \ipkg{tikz}, \ipkg{xparse}, and \ipkg{expl3}.
+
+To use the \pkg{istgame} package you must load the package in the preamble of your document:
+\begin{verbatim}
+ \usepackage{istgame}
+\end{verbatim}
+The package uses the following \TikZ\ libraries:
+\begin{verbatim}
+ trees,calc,arrows,shapes,positioning,backgrounds,fit,decorations.markings,
+\end{verbatim}
+and also loads \xw{patterns} and \xw{intersections} for additional use.
+
+
+\subsection{Getting-started example: a simple tree}
+
+Let us get started with a simple self-explanatory example:
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+%% \usepackage{istgame}
+% Example: a simple tree
+\begin{istgame}
+\istroot(0)(0,0) % names the root as (0) at (0,0)
+ \istb % endpoint will be (0-1), automatically
+ \istb % endpoint will be (0-2), automatically
+ \istb % endpoint will be (0-3), automatically
+ \endist % end of simple (parent-child) structure
+\end{istgame}
+\end{tcblisting}
+
+The resulting tree has the \emph{height} of \xw{15mm} and
+the \emph{distance between two neighbor endpoints} (not shown) is also \xw{15mm} by default.
+In \TikZ, the height is called the \ixw{level distance} and
+the distance between two neighbor endpoints is called the \ixw{sibling distance}.
+
+If the second parenthesis argument of \cmd{\istroot} is omitted, it is regarded as \xw{(0,0)} by default,
+otherwise it is necessary to specify the coordinate from which a simple tree starts.
+
+\subsection{Connecting simple tree structures}
+
+Basically, in order to draw a whole game tree, we just repeat the simple \verb|\istroot-\istb-\endist| structure.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: connecting simple trees
+\begin{istgame}
+\istroot(0) % names the root (0) at (0,0)
+ \istb % endpoint will be (0-1), automatically
+ \istb % endpoint will be (0-2)
+ \istb % endpoint will be (0-3)
+ \endist % end of simple (parent-child) structure
+\istroot(c)(0-3) % names the subroot (c) at (0-3)
+ \istb % endpoint will be (c-1)
+ \istb % endpoint will be (c-2)
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+In the above example, the simple \emph{subtree} is rooted at \xw{(0-3)}, names the subroot \xw{(c)}, and has two branches whose endpoints are automatically named \xw{(c-1)} and \xw{(c-2)}, respectively.
+
+Note that the user-defined names of the (sub)roots and the names of endpoints are arranged \xw{counterclockwise} (from left to right) by \TikZ\ at the endpoints of branches, which can be used as coordinates in the usual \TikZ\ way.
+
+\subsection{Complete examples for desperate users}
+\label{sec:desperateusers}
+
+Basically, \cmd{\istroot} designates a \emph{decision node} and its \emph{owner} (or a \emph{player}),
+\cmd{\istb} prints a \emph{branch} coming out from the decision node with \emph{action labels} and \emph{payoffs}, and \cmd{\endist} actually draws the tree structures. (One secret is that I almost always use only the basic features of the \pkg{istgame} package, discussed in this subsection.)
+
+\subsubsection{How to put a decision node and its owner}
+
+\begin{tcblisting}{listing only}
+\istroot(<decision node name>)(<root location>)<owner position>{<owner>}
+\end{tcblisting}
+
+The only \emph{mandatory} argument of \icmd{\istroot} is \xw{(<decision node name>)} and all others are \emph{optional}.
+If the \xw{(<location>)} where the \emph{\isw{root}} or a \emph{decision node} is placed is omitted, it is regarded as \xw{(0,0)} by default.
+The position of an \isw{owner} (or a \isw{player}) is \xw{<above>} (or equivalently, \xw{<90>} degree) by default.
+The \emph{owner} of a node is printed in \emph{text mode} by default.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth,breakable}
+% Example: first try
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot(0)(0,0){Child}
+ \istb%{Good}[above left]{(0,2)}
+ \istb%{Bad}[above right]
+ \endist
+\istroot(1)(0-2)<30>{Parent}
+ \istb%{Forgive}[above left]{(1,1)}
+ \istb%{Punish}[above right]{(-1,-1)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+In fact, \cmd{\istroot} and its variants have much more functions than these. Later, you can look into Section~\ref{sec:istroot} on page~\pageref{sec:istroot} for more details.
+
+\subsubsection{How to print branches with action labels and payoffs}
+
+\begin{tcblisting}{listing only}
+\istb{<action label>}[<action label pos>]{<payoffs>}[<payoff pos>]
+\end{tcblisting}
+
+With the macro \icmd{\istb}, you can draw a \emph{\isw{branch}} and put an \emph{\isw{action}} label and \emph{\isw{payoff}}s as optional arguments.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth,breakable}
+% Example: first try
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot(0){Child}
+ \istb{Good}[above left]{(0,2)}
+ \istb{Bad}[above right]
+ \endist
+\istroot(1)(0-2)<30>{Parent}
+ \istb{Forgive}[al]{(1,1)}
+ \istb{Punish}[ar]{(-1,-1)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+The positions of an action label and payoffs are specified as options right after each of the two.
+When you omit the position of payoffs, the package prints them naturally, but still you can change the location using an option like \xw{[left]} or \xw{[above left]}. For the positions of action labels and payoffs, you can use an abbreviation \xw{[al]} for \xw{[above left]} and similarly \xw{[ar]}, \xw{[bl]}, and \xw{[br]}.
+The abbreviations \xw{[a]}, \xw{[b]}, \xw{[l]}, and \xw{[r]} are also available.
+
+Both of the \emph{action labels} and \emph{payoffs} are printed in \emph{math mode} by defualt. (You can change the input mode for owners, action labels, and payoffs using a very useful macro \cmd{\setistmathTF}, documented in Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}.)
+
+In fact, \cmd{\istb} and its variants have much more functions than these. For more details, see Section~\ref{sec:istb}, on page~\pageref{sec:istb}. If this is your first read of this manual, however, you don't need to bother about all the details at the moment.
+
+Following three sections are about an information set, a continuum of branches, and changing the direction of tree growing. If you do not need to use them now, the core macros \cmd{\istroot}, \cmd{\istb}, and \cmd{\endist} are \emph{all you need to know about} drawing game trees of any size, small or big.
+Just connect simple trees to complete a whole tree.
+
+\subsubsection{How to put information sets}
+
+The macro \icmd{\xtInfoset} connects two nodes with a densely dotted line, by default, representing an information set.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+\xtInfoset(<from coor>)(<end coor>){<owner>}[<owner pos>]
+\end{tcblisting}
+
+
+The two node coordinates are \emph{mandatory}.
+You can put the owner of an information set as an optional argument. An owner is printed above (by default) the line in \emph{text mode}, which can be changed.
+For more details about \cmd{\xtInfoset}, see Section~\ref{sec:infoset} on page~\pageref{sec:infoset}.
+
+%\xbigskip1
+In the example below, the macro \cmd{\xtInfoset} is used to show an \isw{information set}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% Example: information set
+\begin{istgame}
+%\setistgrowdirection'{east}
+\xtdistance{15mm}{30mm}
+\istroot(0){Alice}
+ \istb{A}[al]{(2,2)}
+ \istb{D}[ar]
+ \endist
+\istroot(1)(0-2)<above right>{Alice}
+ \istb{L}[al]
+ \istb{R}[ar]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[ar]{(0,3)}
+ \endist
+\xtInfoset(2)(3){Elaine}
+\end{istgame}
+\end{tcblisting}
+\xsmallskip1
+
+The package also provides the macro \cmd{\xtInfosetO} to draw a bubble type information set.
+Just replace \cmd{\xtInfoset} with \cmd{\xtInfosetO} (see Section~\ref{ssec:xtInfosetO} on page~\pageref{ssec:xtInfosetO}).
+
+You can also draw a curved information by using \cmd{\xtCInfoset} (Section~\ref{ssec:xtCInfoset}) and even a curved bubble type by using \cmd{\xtCInfosetO} (Section~\ref{ssec:xtCInfosetO}). You can try now.
+
+
+\subsubsection{How to put a continuum of branches}
+
+Just use \cmd{\istrootcntm} (\cmd{\istroot\ + cntm}), instead of \cmd{\istroot}, to draw a \isw{continuum} of branches.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+\istrootcntm(<decision node name>)(<root location>)<owner position>{<owner>}
+\end{tcblisting}
+
+The macro \icmd{\istrootcntm} works just like \cmd{\istroot}, but it prints a background triangle in \xw{black!25}, by default, representing a continuum of branches.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% Example: continuum of branches
+\begin{istgame}[font=\scriptsize]
+\istrootcntm(0){1}
+ \istb{x}[r] \istbm \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<120>{2}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+\xsmallskip1
+
+Here, \cmd{\istbm} represents a missing (or an invisible) branch (see page~\pageref{page:istbm}).
+
+%\xbigskip1
+You can also change the color and size of the triangle representing a continuum of branches.
+For more details on \cmd{\istrootcntm} see Section~\ref{ssec:istrootcntm}, on page~\pageref{ssec:istrootcntm}.
+
+The package also provides the macro \cmd{\istrootcntmA} to draw an arc to represent a continuum of branches.
+You can just replace \cmd{\istrootcntm} by \cmd{\istrootcntmA} to do that, but let us not try this now.
+(If you really want to try this now, you should change the first \cmd{\istb} to \cmd{\istbA} and then take out \cmd{\istbm} in the above example. It is said not to try this now.)
+For more details on \cmd{\istrootcntmA} see Section~\ref{ssec:istrootcntmA}, on page~\pageref{ssec:istrootcntmA}.
+
+You can use every options and macros you can use for the \env{tikzpicture} environment with the \env{istgame} environment. In the above example, \verb+font=\scriptsize+ is used as an option.
+
+\subsubsection{How to change the growing direction of a tree}
+
+With \cmd{\setistgrowdirection} or \cmd{\setistgrowdirection'}, you can easily change the \isw{direction} (\xw{south} by default) to which a game tree grows, as shown in the example below.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% Example: \setistgrowdirection(')
+\begin{istgame}[scale=1.2]
+\setistgrowdirection'{east}
+\istroot(0)<180>{1}
+ \istb{a}[al]
+ \istb{b}[a]
+ \istb{c}[bl]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-2)<135>{2}
+ \istb{Y}[al]{x,1-x}
+ \istb{N}[bl]{0,0}
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+All you need to do is just to specify the direction you want, like \cmd{\setistgrowdirection\{west\}}, \cmd{\setistgrowdirection'\{east\}}, or \cmd{\setistgrowdirection'\{-45\}}. The prime version (\xw{'}) is just to arrange branches \xw{clockwise} (by default \xw{coutnerclockwise}). In the above example, if you use \cmd{\setistgrowdirection} without the prime, the branches will be arranged \xw{counterclockwise}, like $a$, $b$, and $c$ \emph{from bottom to top}.
+When changing the direction of a tree, you may want to relocate the owner and action labels.
+For more details, see Sections~\ref{sec:growing} (on page~\pageref{sec:growing}) and~\ref{sec:payoffdirection} (on page~\pageref{sec:payoffdirection}).
+
+Now you are ready to draw any standard game trees such as all game trees in Osborne's book.
+
+
+\section{Important distances: \protect\cmd{\xtdistance}}
+
+\label{sec:xtdistance}
+
+The length and direction of branches in a simple tree can be controlled by the macro \icmd{\xtdistance}.
+Here, the prefix \xw{xt} stands for \ixsw{extensive tree}.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% syntax: \xtdistance
+ \xtdistance[<level depth>]{<level dist>}{<sibling dist>}
+% defaults:
+ [1]{15mm}{15mm}
+\end{tcblisting}
+\xbigskip1
+
+The macro \cmd{\xtdistance} sets or resets the \xw{level distance} and the \xw{sibling distance}, respectively.
+Note also that internally, for example, \cmd{\xtdistance\{20mm\}\{30mm\}} assigns \xw{20mm} to \icmd{\xtlevdist} and \xw{30mm} to \icmd{\xtsibdist}, which renew the default distances.
+It is effective until you change the distances by using another \cmd{\xtdistance}.
+
+\begin{center}
+\begin{istgame}[scale=2]
+\istroot(0)
+\istb* \istb* \istb* \endist
+\coordinate (A) at ([xshift=-10pt]0-|0-1) ;
+\coordinate (B) at ([xshift=-10pt]0-1) ;
+\coordinate (C) at ([yshift=-10pt]0-1) ;
+\coordinate (D) at ([yshift=-10pt]0-2) ;
+\begin{scope}[blue]
+\draw [|<->|] (A) -- (B) ;
+\draw [|<->|] (C) -- (D) ;
+\node at ($(A)!.5!(B)$) [left] {\makecell[c]{level distance\\\xw{\xtlevdist}}} ;
+\node at ($(C)!.5!(D)$) [below] {\makecell[c]{sibling distance\\\xw{\xtsibdist}}} ;
+\end{scope}
+\end{istgame}
+\end{center}
+
+You can use \cmd{\xtdistance} at any time you want to change the length and the directions of branches.
+Since we are dealing with simple \emph{parent-child} tree structures, \xw{<level depth>} is \xw{1} by default.
+(The level depth number other than \xw{1} is not expected to be used.)
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \xtdistance
+\begin{istgame}
+\xtdistance{15mm} % default
+\istroot(0) % names the root (0) at (0,0)
+ \istb % endpoint will be (0-1), automatically
+ \istb % endpoint will be (0-2)
+ \istb % endpoint will be (0-3)
+ \endist % end of simple (parent-child) structure
+\xtdistance{15mm}{30mm} % changes sibling dist
+\istroot(a)(0-1) % names the subroot (a) at (0-1)
+ \istb % endpoint will be (a-1)
+ \istb % endpoint will be (a-2)
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+
+%\xbigskip1
+\remark
+
+\begin{itemize}
+\item Since \cmd{\xtlevdist} and \cmd{\xtsibdist} are assigned values by \cmd{\xtdistance}, you can use
+these values to do some calculation, for example, like \verb+1.2*\xtlevdis+ or \verb+1.5*\xtsibdist+.
+\item The starred version \icmd{\cntmdistance*} is provided to deal with a continuum of branches and \cmd{\xtdistances} together, which is not documented at the moment.
+See Section~\ref{sec:xtdistance*}, on page~\pageref{sec:xtdistance*},
+for more details about \cmd{\cntmdistance*}.
+\end{itemize}
+%\xbigskip1
+
+In fact, the core macros are much more powerful. \cmd{\istroot} controls the direction to which a simple parent-child tree grows,
+node styles, the node owner and its position, the height and sibling distance of a current simple tree, etc.
+\cmd{\istb} specifies the growing direction of an individual branch, branch line styles, branch color, action labels, and payoffs and their position.
+Below we will see in more details on how the core macros and others work.
+
+
+\section{The \env{istgame} environment and node styles}
+
+\subsection{The \env{istgame} environment}
+
+\label{ssec:envistgame}
+
+The package provides the \ienv{istgame} environment, which is basically the sum of the \ienv{tikzpicture} environment plus some additional functions and different initial values.
+So it accepts all the options and macros that can be used for the \env{tikzpicture} environment. (Note that most of the macros provided by the package work also in the \env{tikzpicture} environment, but some works only in the \env{istgame} environment.)
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% istgame environment
+% \def\istgame@default@fontsize{\normalsize}
+\begin{istgame}[ <Tikz options> ]
+ < istgame contents >
+ < tikzpicture contents >
+\end{istgame}
+% default options:
+[ font=\normalsize , >=stealth ]
+\end{tcblisting}
+
+The default font size is set as \verb|font=\normalsize|.
+You can globally change the default font size by using \icmd{\setistgamefontsize}, like
+\verb|\setistgamefontsize{\scriptsize}|.
+Since the environment \env{istgame} is basically the same as \env{tikzpicture}, you can also locally change the font size by using the \xw{font} option key, like
+\verb|\begin{istgame}[font=\scriptsize]...\end{istgame}|.
+
+\xbigskip1
+\remark \textbf{(Not for most users)} What the \env{istgame} environment \emph{internally} does includes:
+% more than \env{tikzpicture}:
+
+\begin{itemize}
+\item
+In the newly designed \env{istgame} environment, it internally checks and extracts the optional values of \xw{xscale} and \xw{yscale} and, if exist, saves the values (\xw{1.0} by default) at \icmd{\xtxscale} and \icmd{\xtyscale}, respectively.
+And If the optional value of \xw{scale} exists, it is saved at \icmd{\xtscale} only when neither \xw{xscale} nor \xw{yscale} exists.
+You can use these values to calculate something you want, like \verb|5*1/\xtscale|.
+The extracted values are internally used to get the best results of the shapes of bubble type information sets.
+\item
+The \env{istgame} environment also checks if the arrow option \xw{[->]} exists in the option list for the environment. If it exists the \env{istgame} adds \xw{shorten >=<dim>} (by default \xw{0pt}) to the list as the first option together with \xw{[->]}.
+You can change the default value,
+like \cmd{\setistgameshorten\{1.3pt\}}. (Though this is \emph{not for most users}, you can see some more details, in Section~\ref{sec:setistgamearrowendshorten}.)
+\end{itemize}
+
+%\tmpclearpage
+
+\subsection{Node styles}
+\label{sec:nodestyles}
+
+\subsubsection{Basic node styles}
+
+The \xw{tikzstyle}'s of the six basic node styles are predefined.
+
+\begin{itemize}\tightlist
+\item \ixw{plain node}: draws nothing
+ \hfill (default: \xw{inner sep=1pt})
+\item \ixw{null node}: \begin{istgame}\istroot(0)[null node]\endist\end{istgame} (very small node)
+ \hfill (default: \xw{minimum size=0.2pt})
+\item \ixw{solid node}: \begin{istgame}\istroot(0)[solid node]\endist\end{istgame} (default node style)
+ \hfill (default: \xw{minimum size=2.4pt})
+\item \ixw{hollow node}: \begin{istgame}\istroot(0)[hollow node]\endist\end{istgame}
+ \hfill (default: \xw{minimum size=2.8pt})
+\item \ixw{rectangle node}: \begin{istgame}\istroot(0)[rectangle node]\endist\end{istgame}
+ \hfill (defaults: \xw{inner sep=2pt}, \xw{minimum size=4pt})
+\item \ixw{ellipse node}: \begin{istgame}\istroot(0)[ellipse node]\endist\end{istgame}
+ \hfill (defaults: \xw{inner sep=1.5pt}, \xw{minimum size=4.8pt})
+\end{itemize}
+
+
+For some special cases, you may want to change some node styles, including the minimum size. This can be done by \icmd{\setist<...>NodeStyle}, all of whose arguments are optional.
+
+\begin{verbatim}
+syntax:
+ \setistPlainNodeStyle{<inner sep dim>}{<outer sep dim>}
+ \setistNullNodeStyle[<draw color>]{<min-size dim>}[<bg color>][<opacity>]
+ \setistSolidNodeStyle[<draw color>]{<min-size dim>}[<bg color>][<opacity>]
+ \setistHollowNodeStyle[<draw color>]{<min-size dim>}[<bg color>][<opacity>]
+ \setistRectangleNodeStyle[<draw color>]{<min-size dim>}[<bg color>][<opacity>]
+ \setistEllipseNodeStyle[<draw color>]{<min-size dim>}[<bg color>][<opacity>]
+\end{verbatim}
+
+
+\begin{tcblisting}{listing outside text, righthand width=.1\linewidth}
+% Examples:
+\begin{istgame}\setistSolidNodeStyle[blue]{10pt}
+ \istroot(0)[solid node]\endist\end{istgame}\\[1ex]
+\begin{istgame}\setistHollowNodeStyle[blue]{10pt}[yellow]
+ \istroot(0)[hollow node]\endist\end{istgame}\\[1ex]
+\begin{istgame}\setistRectangleNodeStyle{10pt}[red][.5]
+ \istroot(0)[rectangle node]\endist\end{istgame}\\[1ex]
+\begin{istgame}\setistEllipseNodeStyle[blue]{10pt}[green]
+ \istroot(0)[ellipse node]\endist\end{istgame}\\[1ex]
+\begin{istgame}\setistNullNodeStyle[blue!20]{10pt}
+ \istroot(0)[null node]\endist\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+
+These basic node styles have their aliases, for convenience, for those who are familiar with game theoretic terminology.
+
+\begin{tcblisting}{listing only,breakable}
+% aliases for game theorists
+\tikzset{decision node/.style=solid node} % decision nodes
+\tikzset{terminal node/.style=solid node} % terminal nodes
+\tikzset{initial node/.style=hollow node}
+\tikzset{chance node/.style=hollow node}
+\end{tcblisting}
+
+The set of all nodes of a game tree can be partitioned into
+the set of \ixw{decision nodes} and that of \ixw{terminal nodes}.
+You can use \ixw{initial node}
+to distinguish the \ixsw{root} (or the \xw{initial node}) of a game tree from decision nodes.
+You can also use \ixw{chance node} to represent a chance node of a game tree.
+
+%You can also change the node styles, like \verb|\setistDecisionNodeStyle[blue]{3pt}|.
+
+\xbigskip1
+Additional convenient node aliases are also provided: \ixw{box node}, \ixw{square node}, and \ixw{oval node}.
+
+\begin{tcblisting}{listing only,breakable}
+% some more aliases
+\tikzset{box node/.style=rectangle node}
+\tikzset{square node/.style=rectangle node}
+\tikzset{oval node/.style=ellipse node}
+\end{tcblisting}
+
+For aliases, you can also change the node styles, like \verb|\setistDecisionNodeStyle[blue]{3pt}| or \verb|\setistBoxNodeStyle{3pt}[green][.5]|.
+
+\subsubsection{Your own node styles: \protect\cmd{\setistNewNodeStyle}}
+
+You can create your own node style by \icmd{\setistNewNodeStyle}.
+
+\begin{tcblisting}{listing only}
+% \setistNewNodeStyle
+% syntax:
+ \setistNewNodeStyle{<style name>}[<opt>]{<minimum size>}
+% defaults:
+ {<m>}[-,circle,draw=black,fill=white,inner sep=1pt]{6mm}
+\end{tcblisting}
+
+The first, mandatory denoted by \verb+{<m>}+, argument is \verb+{style name}+ to be used.
+The second, optional, argument is \xw{[<options>]} to determine the style of a new node, with defaults.
+The third, optional, argument should be \verb+{<minimum size>}+ only in dimension, which may be frequently used.
+
+To define, for example, a circle (by default) node with the minimum size of \xw{3mm} filled with \xw{red}, you can do like this: \verb+\setistNewNodeStyle{new node}[fill=red]{3mm}+. In fact, this is an abbreviation of the following \TikZ\ macro:
+\begin{verbatim}
+ \tikzset{new node/.style={
+ circle , draw=black , fill=red , innser sep=1pt , minimum size=3mm }
+ }
+\end{verbatim}
+
+Here is an example of using \cmd{\setistNewNodeStyle}.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \setistNewNodeStyle
+\begin{istgame}[scale=1.5]
+\setistNewNodeStyle{new 1}
+ [regular polygon,regular polygon sides=3,
+ shape border rotate=180]
+\setistNewNodeStyle{new 2}
+ [regular polygon,regular polygon sides=3]
+\setistNewNodeStyle{new 3}[star]
+\xtdistance{15mm}{30mm}
+\istroot(0)[new 1]<center>{I}
+ \istb \istb \endist
+\xtdistance{15mm}{15mm}
+\istrooto(1)(0-1)[new 2]{II} % \istrooto
+ \istb \istb \endist
+\istroot(2)(0-2)[new 3]<center>{III}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+\remark
+From the above example, observe that when you use \cmd{\istroot} to put the owner of a node, you need to specify \xw{<center>} for the position of the node owner.
+However, if you use the oval version \cmd{\istrooto}, you don't need that.
+(About \cmd{\istroot} and \cmd{\istrooto}, see Section~\ref{sec:istroot}.)
+
+\xbigskip1
+\remark
+In \TikZ, the shape of a node is independent of the \xw{scale} option in \env{tikzpicture}.
+If you want to make the shape scaled according to the \xw{scale} option, you can use the \TikZ\ option \ixw{transform shape}, as shown below. (In this kind of case, \cmd{\istrooto} helps, rather than \cmd{\istroot}.)
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \setistrNewNodeStyle (scaled)
+\begin{istgame}[scale=1.5]
+\setistNewNodeStyle{new 1}
+ [regular polygon,regular polygon sides=3,
+ shape border rotate=180]
+\setistNewNodeStyle{new 2}
+ [regular polygon,regular polygon sides=3]
+\setistNewNodeStyle{new 3}[star]
+\xtdistance{15mm}{30mm}
+\istroot(0)
+ [new 1,transform shape]<center>{I}
+ \istb \istb \endist
+\xtdistance{15mm}{15mm}
+\istrooto(1)(0-1)[new 2]{II} % \istrooto
+ \istb \istb \endist
+\istroot(2)(0-2)
+ [new 3,transform shape]<center>{III}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\section{Core macro: \protect\cmd{\istroot}}
+\label{sec:istroot}
+
+\subsection{\protect\cmd{\istroot}: basics}
+
+\subsubsection{\protect\cmd{\istroot} -- counterclockwise: standard version}
+\label{ssec:istroot}
+
+The macro \icmd{\istroot} defines the \emph{\isw{root}} of a game or a subgame at a designated location, specifies the \emph{owner} of the root or the subroot, and does other functions.
+In game theoretic terminology, \cmd{\istroot} designates a decision node and its \isw{owner} (or a \isw{player}).
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% \istroot
+% syntax:
+ \istroot[<grow keyval>,<tree opt>](<coor1>)(<coor2>)
+ [<node style>,<node opt>]<[owner opt]owner label angle>{<owner>}
+ +<lev-distance>..<sib-distance>+
+% defaults:
+ [south](<m>)(0,0)[decision node]<above>{}+15mm..15mm+
+% arguments: (coor1) is mandatory, all others are optional arguments
+ [grow] % the direction of growing <default: south>
+ (coor1) % name of the (sub)root: mandatory
+ (coor2) % the (sub)root is at (coor2) <default: (0,0)>
+ [node style] % node style <default: decision node>
+ <angle> % position of owner name <default: above>
+ {owner} % name of the owner of the (sub)root
+ +level dist..sibling dist+ % <defaults: 15mm,15mm>
+\end{tcblisting}
+%\xbigskip1
+
+
+\subsubsection*{the root}
+
+The only mandatory argument, denoted by \xw{<m>}, of \cmd{\istroot} is \xw{(<coor1>)}, which gives the name of the root or subroot. All the other arguments are optional. The name of the (sub)root, \xw{(<coor1>)}, can be referred as a normal coordinate.
+\xw{(coor2)} specifies the location where the (sub)root is placed.
+If \xw{(coor2)} is omitted, it is regarded as \xw{(0,0)} by default.
+
+The default node style of the root is a \xw{decision node}, which is just a \xw{solid node}. You can change the node style to any other node style such as \xw{initial node}, \xw{chance node}, \xw{oval node}, \xw{box node}, and so on.
+
+\xbigskip1
+
+Here is a simple example of drawing a tree structure.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istroot
+\begin{istgame}
+\istroot(0)
+ \istb \istb \istb \endist
+\istroot(a)(0-1)[chance node]
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+
+\subsubsection*{naming children: counterclockwise or clockwise}
+
+In the previous example, the game tree has the root named \xw{(0)}, located at \xw{(0,0)} by default, which has three branches (by three \cmd{\istb}'s).
+Since \TikZ\ arranges branches of a tree \xw{counterclockwise}, by default,
+the endpoints of the three branches are automatically named \xw{(0-1)}, \xw{(0-2)}, and \xw{(0-3)} \emph{from left to right} (when a tree grows down).
+
+The root of the subtree is named \xw{(a)}, located at \xw{(0-1)}, and has two children.
+Its children are automatically named \xw{(a-1)} and \xw{(a-2)} \ixsw{counterclockwise} (or from left to right if the tree grows down).
+See the following code example with explanatory labels to see what is going on.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istroot (explained with labels)
+\begin{istgame}[font=\scriptsize]
+\istroot(0)
+ \istb \istb \istb \endist
+\istroot(a)(0-1)
+ \istb \istb \endist
+%% labels: (ignore the following lines at the moment)
+\setistmathTF000
+\xtOwner(0){(0)}
+\xtOwner(a){(a)}[l]
+\xtPayoff*(0-1){(0-1)}[r]
+\xtPayoff*(0-2){(0-2)}[b]
+\xtPayoff*(0-3){(0-3)}[b]
+\xtPayoff*(a-1){(a-1)}[b]
+\xtPayoff*(a-2){(a-2)}[b]
+\draw [->,ultra thick,blue!20](-260:1.5)
+ arc (-260:80:1.5cm)
+ node [above,blue!30] {counterclockwise};
+\end{istgame}
+\end{tcblisting}
+\label{page:clockwise}
+
+
+%\xbigskip1
+\subsubsection*{owner (or player)}
+
+The owner of a decision node (or a player) is expressed in curly braces, like \verb|{player 1}|, and printed in \emph{text mode}. The input mode and text font style of an owner can be changed by \cmd{\setistmathTF(*)}
+(see Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}, for more details).
+
+The position of the owner of a decision node is specified in angle brackets, like \xw{<90>}, \xw{<above>}, or \xw{<north>}.
+To specify the position of an owner you can use \xw{<degrees>}, or the compass directions such as \xw{<north>}, \xw{<south>}, \xw{<east>}, \xw{<west>}, and their valid combinations.
+You can also use the positional words such as \xw{<above>}, \xw{<below>}, \xw{<left>}, \xw{<rigth>}, and their valid combinations.
+
+%\xbigskip1
+\subsubsection*{growing direction of a simple tree}
+
+The first bracket option is mainly for the direction of a simple tree (\xw{[south]} by default).
+Internally, \xw{[<grow keyval>]} typed in as the first option of \cmd{\istroot} renews the direction of tree growing by assigning its value to \icmd{\istgrowdirection}, whose default is \xw{south}.
+
+\xsmallskip1
+\begin{adjustwidth}{\parindent}{\parindent}
+\remark
+\begin{itemize}
+\item In fact, the first option of \cmd{\istroot} controls the features of an whole simple tree (but a node style), while the second bracket option controls a node style only.
+\item In addition to the direction of a simple tree, you can add more options to control the whole branch styles and their labels (except a node sytle).
+For example, if you want, at any reason, to draw a simple tree with all \emph{red dashes branches with red labels} growing south-eastwards, you can do like \xw{[south east,red,dashed]}.
+(For examples in more detail, see Section~\ref{sec:firstthing} on page~\pageref{sec:firstthing}.)
+\item Be aware that the first entry in the option list \emph{must} be a \emph{directional word} for a simple tree.
+\end{itemize}
+\end{adjustwidth}
+\xsmallskip1
+
+The tree growing direction can be specified by \xw{[<degrees>]} or by using the compass directions such as
+\xw{[north]}, \xw{[south]}, \xw{[east]}, \xw{[west]}, \xw{[north east]}, \xw{[north west]}, \xw{[south east]}, \xw{[south west]}.
+You can also use positional words like \xw{[left]}, \xw{[rigth]}, \xw{[down]}, and \xw{[up]}, but you cannot use \xw{[above]} nor \xw{[below]}.
+
+%\xsmallskip1
+\label{page:onesimpletree}
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 1: \istroot (one simple tree)
+\begin{istgame}[font=\itshape]
+\istroot[right](0)<left>{player 1}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+%\xsmallskip1
+
+
+\remark One thing you should remember about this is that \cmd{\istgrowdirection} is internally used
+in the definition of \cmd{\istb} to control the label position for payoffs.
+However, for the label position in \TikZ, \xw{[below]} and \xw{[above]} are good,
+but not \xw{[down]} nor \xw{[up]}.
+So DO NOT USE \xw{[down]} nor \xw{[up]} to specify the tree growing direction.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 2: \istroot (three simple trees connected)
+\begin{istgame}
+\xtdistance{20mm}{20mm}
+\istroot[right](0)[oval node]<left>{player 1}
+ \istb \istb \endist
+\istroot(a)(0-1)<right>{player 2}+15mm..10mm+
+ \istb \istb \endist
+\istroot[right](b)(0-2)[box node]<135>{player 3}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+\label{page:threesimpletrees}
+%\xbigskip1
+
+\subsubsection*{local change of distances}
+
+The last two options of \cmd{\istroot} specify the \xw{level distance} and the \xw{sibling distance}.
+This \emph{local} change of distances is valid only for the corresponding simple tree, while the distances changed by \cmd{\xtdistance} are valid within the current \pkg{istgame} environment unless they are changed again by \cmd{\xtdistance}.
+Do not forget, when you use decimal distances, to delimit the decimal dimensions with curly braces, like
+\verb|+{15.5mm}..{10.5mm}+|.
+
+\subsubsection{\protect\cmd{\istroot'} -- clockwise: swap version}
+
+\label{ssec:istroot'}
+
+The macro \icmd{\istroot'} is the swap version of \cmd{\istroot}.
+\cmd{\istroot'} works just like \cmd{\istroot} but with one exception: going \emph{clockwise} instead of \emph{counterclockwise}.
+\cmd{\istroot'} arranges its branches \ixsw{clockwise} (or from right to left if the tree grows down).
+
+Compare the following example with that of \cmd{\istroot} above on page~\pageref{page:clockwise}.
+The two examples have exactly the same codes as each other except for one thing: either \cmd{\istroot} or \cmd{\istroot'}.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istroot' (explained with labels)
+\begin{istgame}[font=\scriptsize]
+\istroot'(0)
+ \istb \istb \istb \endist
+\istroot'(a)(0-1)
+ \istb \istb \endist
+%% labels: (ignore the following lines at the moment)
+\setistmathTF000
+\xtOwner(0){(0)}
+\xtOwner(a){(a)}[l]
+\xtPayoff*(0-1){(0-1)}[r]
+\xtPayoff*(0-2){(0-2)}[b]
+\xtPayoff*(0-3){(0-3)}[b]
+\xtPayoff*(a-1){(a-1)}[b]
+\xtPayoff*(a-2){(a-2)}[b]
+\draw [<-,ultra thick,blue!20](-260:1.5)
+ arc (-260:80:1.5cm)
+ node [above,blue!30] {clockwise};
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+We will look into this issue (of going counterclockwise or clockwise) in more detail in Section~\ref{sec:growing} (on page~\pageref{sec:growing}), where we discuss the tree growing direction.
+
+If you draw a game tree growing south, you don't need to worry about the swap version \cmd{\istroot'}. Just use \cmd{\istroot}.
+
+\subsection{\protect\cmd{\istrooto}: oval version}
+
+\label{ssec:istrootstar}
+
+\subsubsection{\protect\cmd{\istrooto} -- counterclockwise}
+
+The macro \icmd{\istrooto} is the oval version of \cmd{\istroot}.
+This allows us to draw a bubble (by default, \xw{oval node}) with a node owner (or a game player) in it. Except for this difference, \cmd{\istrooto} works just like \cmd{\istroot}. Since an owner is shown in a specified node with \cmd{\istrooto}, the option \xw{<owner label angle>} of the standard version \cmd{\istroot} is ignored.
+
+\begin{tcblisting}{listing only,breakable}
+% \istrooto
+% syntax:
+ \istrooto[<grow keyval,tree opt>](<coor1>)(<coor2>)
+ [<node style>,<node opt>]{<owner>}+<lev-distance>..<sib-distance>+
+% default: only (coor1) is mandatory, <m>, all others optional
+ [south](<m>)(0,0)[oval node]{}+15mm..15mm+
+\end{tcblisting}
+
+%\xbigskip1
+The following two examples are the same as above with \cmd{\istroot} on pages~\pageref{page:onesimpletree} and \pageref{page:threesimpletrees}, respectively, but now with the oval version \cmd{\istrooto}.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 1: \istrooto (one simple tree)
+\begin{istgame}[font=\itshape]
+\istrooto[right](0)<180>{player 1}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+%The following example is also the same as above with \cmd{\istroot} on page~\pageref{page:threesimpletrees} but now with the oval version \cmd{\istrooto}.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 2: \istrooto (three simple trees connected)
+\begin{istgame}
+\xtdistance{20mm}{20mm}
+\istrooto[right](0)[oval node]<left>{player 1}
+ \istb \istb \endist
+\istroot(a)(0-1)<right>{player 2}+15mm..10mm+
+ \istb \istb \endist
+\istrooto[right](b)(0-2)[box node]<135>{player 3}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+Observe that the angle \xw{<180>}, \xw{<left>}, \xw{<right>}, or \xw{<135>} specifying the position of an owner's name is redundant to \cmd{\istrooto}.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example 3: \istrooto (counterclockwise)
+\begin{istgame}
+\setistOvalNodeStyle{.6cm}
+\istrooto(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtShowEndPoints[oval node]
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center]
+ \istb{}{8}[center] \endist
+\istrooto(6)(2-1){6}
+ \istb{}{9}[center] \istb{}{10}[center]
+ \endist
+\draw [->,ultra thick,blue!20](-260:1.5)
+ arc (-260:80:1.5cm)
+ node [above,blue!30] {counterclockwise};
+\end{istgame}
+\end{tcblisting}
+
+
+%\xbigskip1
+%\remark Note that, in \TikZ, a tree branch comes from the center of the parent node
+%and goes to the center of the child node.
+%Now what if you want to have branches coming from some point of the circumference of, say,
+%an oval parent node to that of a child node.
+%\cmd{\setistbranchanchors} specifies the anchors of parent node and child node. (experimental!)
+%
+%\begin{tcblisting}{listing only}
+%% \setistbranchanchors (experimental!)
+%% syntax: \setistbranchanchors
+% \setistbranchanchors{<parent anchor>}{<child anchor>}
+%% defaults: <parent anchor> is mandatory
+% {}{center}
+%\end{tcblisting}
+
+\xsmallskip1
+The previous example shows how \cmd{\istrooto} arranges its branches: \ixsw{counterclockwise}, by default.
+
+
+
+\subsubsection{\protect\cmd{\istrooto'} -- clockwise: swap version}
+
+The swap version of the oval version, \icmd{\istrooto'}, works just like \cmd{\istroot'} with one exception that it puts an owner within an \xw{oval node}, by default.
+%\xbigskip1
+
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 2: \istrooto' (clockwise)
+\begin{istgame}
+\xtdistance{20mm}{20mm}
+\istrooto'[right](0)[oval node]<left>{player 1}
+ \istb \istb \endist
+\istrooto'[right](b)(0-1)[box node]<135>{player 2}
+ \istb \istb \endist
+\istroot(a)(0-2)<right>{player 3}+15mm..10mm+
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+The swap version is useful when a tree grows northwards or eastwards.
+The example below shows a tree rotated to the east by \icmd{\setistgrowdirection}.
+Note that \cmd{\istrooto'} arranges its branches \ixsw{clockwise}.
+
+
+%\xbigskip1
+%\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+%% Example 3: \istrooto' (clockwise)
+%\begin{istgame}
+%\setistgrowdirection{north}
+%\setistOvalNodeStyle{.6cm}
+%\istrooto'(0){0}+{12.5mm}..{3.45cm}+
+% \istb \istb \endist
+%\xtShowEndPoints[oval node]
+%\xtdistance{12.5mm}{11.5mm}
+%\istrooto'(1)(0-1){1}
+% \istb{}{3}[center] \istb{}{4}[center]
+% \istb{}{5}[center] \endist
+%\istrooto'(2)(0-2){2}
+% \istb{}{6}[center] \istb{}{7}[center]
+% \istb{}{8}[center] \endist
+%\istrooto'(6)(2-1){6}
+% \istb{}{9}[center] \istb{}{10}[center]
+% \endist
+%\draw [->,ultra thick,blue!20](260:1.5)
+% arc (260:-80:1.5cm)
+% node [below,blue!30] {clockwise};
+%\end{istgame}
+%\end{tcblisting}
+
+
+%\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example 3: \istrooto' (clockwise)
+\begin{istgame}
+\setistgrowdirection'{east}
+\setistOvalNodeStyle{.6cm}
+\istrooto'(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtShowEndPoints[oval node]
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center]
+ \istb{}{8}[center] \endist
+\istrooto(6)(2-1){6}
+ \istb{}{9}[center] \istb{}{10}[center]
+ \endist
+\draw [->,ultra thick,blue!20](260:1.5)
+ arc (260:-80:1.5cm)
+ node [below,blue!30] {clockwise};
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark
+When you use the swap version \icmd{\setistgrowdirection'}, using either \cmd{\istroot} or \cmd{\istroot'} makes no difference. (For more details, see Section~\ref{sec:growing} on page~\pageref{sec:growing}.)
+
+
+%\clearpage
+\section{Core macro: \protect\cmd{\istb}}
+\label{sec:istb}
+
+\subsection{\protect\cmd{\istb}: basics}
+\label{ssec:istb}
+
+\subsubsection{Basics: branches, action labels, and payoffs}
+
+The macro \icmd{\istb}, basically, prints a \emph{\isw{branch}}.
+Having all arguments as options, a simple \cmd{\istb} draws a branch from a parent node designated by \cmd{\istroot} to a child node (or endpoint of \cmd{\istb}).
+If, for example, a parent node is named \xw{(A)} by \cmd{\istroot}, the first child node is automatically named \xw{(A-1)}, the second child node \xw{(A-2)}, and so on.
+
+\xbigskip1
+The macro \cmd{\istb} also puts an \emph{\isw{action}} label and \emph{\isw{payoff}\,}s along with a branch, and does other functions.
+Note that the \emph{action labels} and \emph{payoffs} are to be typeset in \emph{math mode}.
+If you want to change the input mode to text mode, you can use the macro \cmd{\setistmathTF(*)}.
+This issue is discussed in Section~\ref{ssec:setistmathTF} below. (You can also see Section~\ref{sec:setistmathTF}, on page~\pageref{sec:setistmathTF}, for more details).
+
+\xbigskip1
+\begin{tcblisting}{listing only,breakable}
+% \istb
+% syntax:
+ \istb<grow, distance, missing>[<line style>]{<action>}[<pos>]{<payoff>}[<pos>]
+% defaults:
+ <grow=south>{-}{}[center]{}[\istgrowdirection]
+% arguments: all arguments are optional
+ <grow=keyval> % the direction of a branch <default: south>
+ [line style] % branch line style <default: solid>
+ {action} % action label (in math mode)
+ [action pos] % position of action label <default: center>
+ {payoff} % payoffs (in math mode)
+ [payoff pos] % position of payoffs <default: \istgrwodirection: south>
+\end{tcblisting}
+
+\remark The macro \cmd{\istb} has many variants including
+\cmd{\istb*} (starred version), \cmd{\istbt} (terminal version), and \cmd{\istbm} (missing version).
+It also has other very close friends: \cmd{\istB} (dual label version) and \cmd{\istbA} (alternative or arc version).
+Each friend of \cmd{\istb} has its starred version and terminal version, of course, except \cmd{\istbm}.
+\cmd{\cntmistb(*)} and \cmd{\cntmAistb(*)} are also friends only when a continuum of branches is in play.
+
+
+\subsubsection*{branches}
+
+In the example below, each \cmd{\istb} draws a branch.
+With the option \ixw{missing}, \cmd{\istb} prints an \emph{invisible} branch.
+Since the third child is \emph{missing}, the last child is named \xw{(0-4)}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istb<missing> (simply, \istbm)
+\begin{istgame}
+\istroot(0)
+ \istb \istb \istb<missing> \istb \endist
+\istroot(D)(0-4)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+To make it simple, you can use the \emph{missing version} \icmd{\istbm} instead of \cmd{\istb<missing>}.
+\label{page:istbm}
+
+\begin{tcblisting}{listing only}
+% \istbm
+ \newcommand\istbm{\istb<missing>}
+\end{tcblisting}
+
+\xbigskip1
+The macro \cmd{\istb} also has various options to control the line style of a branch, and the direction and length of a branch.
+\cmd{\istb} can also place payoffs to the direction of tree growth by default.
+
+\xbigskip1
+For various line styles of each branch, you can use any \TikZ\ options of arrows, line style, color, and so on.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istb (branch line styles)
+\begin{istgame}
+\istroot(0)
+ \istb[dashed,thick]
+ \istb[->]
+ \istb[draw=blue,thick]
+ \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+\subsubsection*{action labels}
+
+By default, an action label is put on the midpoint of the corresponding branch, in \emph{math} mode.
+%\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: action labels
+\begin{istgame}
+\istroot(0)
+ \istb[dashed,thick]{A}
+ \istb[->]{\beta}[right]
+ \istb[draw=blue,thick]{Right}[ar]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+To specify the position of an action label,
+you can use the positional words or their \emph{\isw{abbreviations}}:\par
+\xw{[a]} for \xw{[above]}, \xw{[b]} for \xw{[below]}, \xw{[l]} for \xw{[left]}, \xw{[r]} for \xw{[right]},\par
+\xw{[al]} for \xw{[above left]}, \xw{[ar]} for \xw{[above right]}, \par
+\xw{[bl]} for \xw{[below left]}, and \xw{[br]} for \xw{[below right]}.
+
+\xbigskip1
+\remark
+Note that these abbreviations must be used with no other options, otherwise you will get a compile \emph{error}.
+For example, when you want to print \isw{sloped labels} for actions, you should do like \xw{[above,sloped]} but not like \xw{[a,sloped]}.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: sloped labels
+\begin{istgame}[font=\footnotesize]
+\istroot(0)
+ \istb[dashed,thick]{Left}[above,sloped]
+ \istb[->]{Center}[above,sloped]
+ \istb[draw=blue,thick]{Right}[above,sloped]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\warning \label{page:slopedlabels-warning}
+Issues in \emph{sloped labels} in \TikZ\ with \emph{asymmetric scales}:
+\begin{itemize}\tightlist
+\item The \xw{tree} library in \TikZ\ does not seem to treat sloped labels properly, when \xw{xscale} or \xw{yscale} is used asymmetrically.
+
+\begin{tcblisting}{listing outside text, righthand width=.319\linewidth}
+% Example: sloped labels problem
+\begin{istgame}[xscale=2,font=\footnotesize]
+%\xtcureslopedlabelsNS
+\istroot(0)
+ \istb[dashed,thick]{Left}[above,sloped]
+ \istb[->]{Center}[above,sloped]
+ \istb[draw=blue,thick]{Right}[above,sloped]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\item This package provides a temporary solution to cure this issue: \icmd{\xtcureslopedlabelsNS} for trees growing northwards or southwards. If a tree grows eastwards or westwards, then use \icmd{\xtcureslopedlabelsEW}.
+These must be used in a TeX group with caution.
+\emph{These are only temporary solutions that have not been tested for every occasion}.
+
+\begin{tcblisting}{listing outside text, righthand width=.319\linewidth}
+% Example: sloped labels problem cured
+\begin{istgame}[xscale=2,font=\footnotesize]
+\xtcureslopedlabelsNS
+\istroot(0)
+ \istb[dashed,thick]{Left}[above,sloped]
+ \istb[->]{Center}[above,sloped]
+ \istb[draw=blue,thick]{Right}[above,sloped]
+ \endist
+\end{istgame}
+\end{tcblisting}
+\end{itemize}
+
+%\xbigskip1
+\subsubsection*{payoffs}
+
+The second curly braces option of the macro \cmd{\istb} is for \emph{payoffs} and the last bracket option for the position of payoffs.
+
+By default, \cmd{\istb} prints payoffs in \emph{math mode}, which can be changed by \cmd{\setistmathTF(*)}.
+By default, payoffs are put in the direction of \cmd{\istgrowdirection} (\xw{[south]} by default).
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: payoffs
+\begin{istgame}
+\istroot(0)
+ \istb[dashed,thick]{A}{(0,1)}
+ \istb[->]{}{(1,-1)}
+ \istb[draw=blue,thick]{\beta}[a]{u_1,u_2}
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+\remark What is \icmd{\istgrowdirection} and what is it used for?
+\begin{itemize}
+\item \cmd{\istgrowdirection} has the value of \xw{[<grow keyval>]} typed in \cmd{\istroot} (default: \xw{south}).
+\item The value of \cmd{\istgrowdirection} is (internally) used to determine the direction of putting \emph{payoffs} (\xw{south} by default).
+\end{itemize}
+\xbigskip1
+
+
+In the following example, notice that the tree grows south-eastwards, so the payoffs are placed to the south-east of the endpoints.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: tree toward south east (or -45 degree)
+\begin{istgame}
+\istroot[-45](0)
+ \istb[dashed,thick]{A}{(0,1)}
+ \istb[->]{}{(1,-1)}
+ \istb[draw=blue,thick]{\beta}[a]{u_1,u_2}
+ \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+If you do not like the position of payoffs, you can change it by using degrees, the compass directions, or the positional words and their \emph{abbreviations} mentioned above.
+In the example below, the tree grows south-westwards, but the position of payoffs at the end of the blue branch is changed to \xw{[below]} or \xw{[b]}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: tree toward south west (or 225 degree)
+\begin{istgame}
+\istroot[south west](0)
+ \istb[dashed,thick]{A}{(0,1)}
+ \istb[->]{}{(1,-1)}
+ \istb[draw=blue,thick]{\beta}[r]{u_1,u_2}[below]
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+\remark
+\begin{itemize}\tightlist
+\item \cmd{\istb} expects a \emph{directional word} to be input as the last optional argument (by default,
+\cmd{\istgrowdirection}).
+\item You can add more options to change the position of payoffs, but the first entry of the option list \emph{must} be a \emph{directional word}, like \xw{[below,xshift=5mm]}, but not like \xw{[xshift=5mm,below]}.
+Otherwise, a compile \emph{error} will be produced.
+\item Note also that you can do like \xw{[[xshift=5mm]below}, instead (see also page~\pageref{page:finetuningpayoffs}).
+\end{itemize}
+
+\subsubsection{Printing action labels in italics in text mode: \protect\cmd{\setistmathTF*}}
+\label{ssec:setistmathTF}
+
+By default, an owner is printed in \emph{text mode}, action labels and payoffs in \emph{math mode}.
+With the macro \cmd{\setistmathTF(*)}, you can change the input mode for those labels.
+These are discussed in Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}.
+
+Here, it is briefly discussed how to change the input mode of action labels to \emph{text mode}.
+To do that, just declare \cmd{\setistmathTF001}.
+The second zero means that the input mode for action labels is in text mode.
+(The first number is for owners and the third one for payoffs.)
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+\begin{istgame}[font=\footnotesize]
+\setistmathTF001
+\istroot(0)
+ \istb[dashed,thick]{Left}[above,sloped]{(0,1)}
+ \istb[->]{Center}[above,sloped]{(1,-1)}
+ \istb[draw=blue,thick]{Right}[above,sloped]{u_1,u_2}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+If you use the starred version, like \cmd{\setistmathTF*001}, action labels are printed in \emph{italics}, by default.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+\begin{istgame}[font=\footnotesize]
+\setistmathTF*001
+\istroot(0)
+ \istb[dashed,thick]{Left}[above,sloped]{(0,1)}
+ \istb[->]{Center}[above,sloped]{(1,-1)}
+ \istb[draw=blue,thick]{Right}[above,sloped]{u_1,u_2}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+You can, of course, do the same thing in the default math mode.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+\begin{istgame}[font=\footnotesize]
+%\setistmathTF011 (default modes)
+\istroot(0)
+ \istb[dashed,thick]
+ {\textit{Left}}[above,sloped]{(0,1)}
+ \istb[->]{\textit{Center}}[above,sloped]{(1,-1)}
+ \istb[draw=blue,thick]
+ {\textit{Right}}[above,sloped]{u_1,u_2}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\istb*}: starred version}
+\label{ssec:istbstar}
+
+\subsubsection{\protect\cmd{\istb*}: basics}
+
+The starred version \icmd{\istb*} prints a \xw{solid node} at the end of the corresponding branch.
+This is the only difference between \cmd{\istb} and \cmd{\istb*}.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+\begin{istgame}
+\istroot[east](0)
+ \istb[dashed,thick]{A}
+ \istb*[->]{}{(1,-1)}
+ \istb*[draw=blue,thick]{\beta}[a]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\subsubsection{\protect\cmd{\xtShowEndPoints} and \protect\cmd{\xtHideEndPoints}}
+\label{page:endpoint}
+
+Each endpoint is printed by each execution of \cmd{\istb*}.
+You can print solid nodes (by default) at \emph{all} the endpoints of \emph{simple trees} by the macro \icmd{\xtShowEndPoints}.
+You can also change the style of nodes for all the endpoints of simple trees, by specifying it as an optional argument, like \cmd{\xtShowEndPoints[oval node]}.
+
+\begin{tcblisting}{listing only,breakable}
+% \xtShowEndPoints
+% syntax:
+ \xtShowEndPoints[<node style>]
+% default:
+ [solid node]
+\end{tcblisting}
+
+\xbigskip1
+The macro \icmd{\xtHideEndPoints} turns off the effects of \cmd{\xtShowEndPoints}.
+
+It is too early to say that the starred version \icmd{\xtShowEndPoints*} additionally prints the two outermost endpoints of a continuum.
+\cmd{\xtHideEndPoints*} turns off only the outermost endpoints a continuum, but not the other endpoints. (See Section~\ref{ssec:xtShowEndPoints*} on page~\pageref{ssec:xtShowEndPoints*}, for more details.)
+
+\xbigskip1
+Here is an example of using \cmd{\xtShowEndPoints} and \cmd{\xtHideEndPoints}.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+\begin{istgame}
+\xtShowEndPoints[oval node,minimum size=6pt]
+\istroot(0)[solid node]
+ \istb[dashed,thick]{A}
+ \istb
+ \istb[very thick]{\beta}[ar]
+ \endist
+\xtShowEndPoints % default: solid nodes
+\xtdistance{15mm}{10mm}
+\istroot(b)(0-2) \istb \istb \endist
+\xtHideEndPoints % \istb* overrides
+\istroot(b)(0-3) \istb \istb* \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+Note that \cmd{\xtShowEndPoints} and \cmd{\xtHideEndPoints} should be in an \env{istgame} environment to avoid unexpected results.
+Note also that \cmd{\istb*} overrides all the effects of these two macros by forcing to print a \pkg{solid node}.
+
+
+\subsection{\protect\cmd{\istbt}: terminal version}
+\label{ssec:istbperiod}
+
+\subsubsection{\protect\cmd{\istbt}: basics}
+
+The terminal version \icmd{\istbt}\ is designed to represent a \emph{terminal move} in a game tree.
+Basically, \cmd{\istbt}\ works exactly the same way as \cmd{\istb} does.
+However, using \cmd{\istbt}\ together with the macro \cmd{\xtShowTerminalNodes} you can control the shape of the terminal nodes, \emph{all at once}.
+
+\subsubsection{\protect\cmd{\xtShowTerminalNodes} and \protect\cmd{\xtHideTerminalNodes}}
+\label{page:terminalnode}
+
+The terminal version \cmd{\istbt}\ used with \icmd{\xtShowTerminalNodes} prints a \xw{solid node} (by default).
+You can change the style of the terminal nodes, like \cmd{\xtShowTerminalNodes[oval node]}.
+This effect can be turned off by \icmd{\xtHideTerminalNodes}.
+
+%\xbigskip1
+\begin{tcblisting}{listing only,breakable}
+% \xtShowTerminalNodes (works only with \istbt and other terminal versions)
+% syntax:
+ \xtShowTerminalNodes[<node style>]
+% default:
+ [solid node]
+\end{tcblisting}
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \xtShowTerminalNodes, \xtHideTerminalNodes
+\begin{istgame}
+\xtShowTerminalNodes[box node,fill=green]
+\istroot(0)[solid node]
+ \istbt[dashed,thick]{A}
+ \istb
+ \istb[very thick]{\beta}[ar]
+ \endist
+\xtdistance{15mm}{10mm}
+\istroot(b)(0-2) \istbt* \istbt \endist
+\xtHideTerminalNodes
+\istroot(b)(0-3) \istbt \istbt \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+\remark
+Note that controlling terminal nodes by using \cmd{\xtShowTerminalNodes} works only with the terminal versions \cmd{\istbt}, \cmd{\istBt} (documented below in Section~\ref{sec:istB}) and \cmd{\istbAt} (in Section~\ref{sec:istbA}), but there will be no effect and no harm with other versions.
+Note also that \icmd{\istbt*} overrides the effects of \cmd{\xtShowTerminalNodes} and \cmd{\xtHideTerminalNodes}.
+
+\subsection{\protect\cmd{\istB}: dual label version}
+\label{sec:istB}
+
+\subsubsection{\protect\cmd{\istB}: basics}
+
+The macro \icmd{\istB}\ works just like \cmd{\istb}, except one thing: \cmd{\istB} prints \emph{dual labels}\index{dual labels} for a branch.
+
+The starred version \icmd{\istB*} prints a solid node at the end of the corresponding branch, just like \cmd{\istb*}.
+And the terminal versions \cmd{\istBt} and \icmd{\istBt*} work just like \cmd{\istbt} and \cmd{\istbt*}, respectively, except for dual labels.
+
+%\xbigskip1
+\begin{tcblisting}{listing only,breakable}
+% \istB
+% syntax:
+ \istB<grow>[<opt>]{<action1>}[<pos1>]{<action2>}[<pos2>]{<payoff>}[<pos>]
+% defaults:
+ <grow=south>{-}{}[center]{}[center]{}[\istgrowdirection]
+% arguments: all arguments are optional
+ <grow=keyval> % the direction of a branch <default: south>
+ [line style] % branch line style <default: solid>
+ {action label 1} % action label 1 (in math mode)
+ [action pos 1] % position of action label 1 <default: center>
+ {action 2} % action label 2 (in math mode)
+ [action label pos 2] % position of action label 2 <default: center>
+ {payoff} % payoffs (in math mode)
+ [payoff pos] % position of payoffs <default: \istgrwodirection: south>
+\end{tcblisting}
+\xbigskip1
+
+With \cmd{\istB}, do not forget to put two labels. Otherwise, you might get an unexpected result.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% \istB
+\begin{istgame}[font=\footnotesize]
+\xtdistance{15mm}{30mm}
+\istroot(0)[chance node]
+ \istB{Black}[al]{x}[br]
+ \istB{Red}[ar]{1-x}[bl]
+ \endist
+\istroot(1)(0-1)[initial node]
+ \istBt{Head}[al]{y}[br]
+ \istBt[draw=blue,thick]{Tail}[ar]{1-y}[bl]
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+\subsubsection{\protect\cmd{\xtActionLabel} and \protect\cmd{\xtActionLabel*}}
+\label{ssec:istbandxtActionLabel}
+
+You can also use the supplementary macro \icmd{\xtActionLabel} to print additional action labels (see also Section~\ref{sec:showmidarrows} on page~\pageref{sec:showmidarrows}).
+The macro \cmd{\xtActionLabel} controls, from outside of a simple tree, a branch (by default \xw{draw=none}) with a label (in math mode by default), connecting two nodes.
+
+\xbigskip1
+\begin{tcblisting}{listing only,breakable}
+% \xtActionLabel
+% syntax:
+ \xtActionLabel*[<line opt>](<from>)(<to>){<action>}[<pos>,<node opt>]
+% default:
+ [-,draw=none](<m>)(<m>){}[black,text depth=.25]
+\end{tcblisting}
+
+
+\remark
+In some cases, it is not a good idea to use \cmd{\istB} to print dual action labels.
+\begin{itemize}\tightlist
+\item With \cmd{\istB}, the features of \emph{middle arrows} provided by this package does not work well (see Section~\ref{sec:showmidarrows} on page~\pageref{sec:showmidarrows}).
+\label{page:noistB}
+
+\item With respect to a \emph{continuum} of branches, \cmd{\istB} has little role to play.
+\end{itemize}
+
+You can do the same thing as \cmd{\istB} does by using \cmd{\istb} and together with \cmd{\xtActionLabel}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istb and \xtActionLabel
+\begin{istgame}[font=\footnotesize]
+\xtdistance{15mm}{30mm}
+\istroot(0)[chance node]
+ \istb{Left}[al]
+ \istb{Right}[ar]
+ \endist
+\istroot(1)(0-1)[initial node]
+ \istbt{Head}[al]
+ \istbt{Tail}[ar]
+ \endist
+\xtActionLabel(0)(0-1){x}[br]
+\xtActionLabel(0)(0-2){1-x}[bl]
+\xtActionLabel(1)(1-1){y}[br]
+\xtActionLabel[draw,blue,thick](1)(1-2){1-y}[bl]
+\end{istgame}
+\end{tcblisting}
+
+The starred version \cmd{\xtActionLabel*} prints its label in the input mode as set by \cmd{\setistmathTF*} (see Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}, for more details on \cmd{\setistmatTF}).
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istb and \xtActionLabel*
+\begin{istgame}[font=\footnotesize]
+\xtdistance{15mm}{30mm}
+\istroot(0)[chance node]
+ \istb{Left}[al]
+ \istb{Right}[ar]
+ \endist
+\istroot(1)(0-1)[initial node]
+ \istbt{Head}[al]
+ \istbt{Tail}[ar]
+ \endist
+\xtActionLabel(0)(0-1){x}[br]
+\xtActionLabel(0)(0-2){1-x}[bl]
+\setistmathTF*001{texttt}
+\xtActionLabel*(1)(1-1){y}[br]
+\xtActionLabel*[draw,blue,thick](1)(1-2){1-y}[bl]
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\istbA}: alternative (or arc) version}
+\label{sec:istbA}
+
+\subsubsection{\protect\cmd{\istbA}: basics}
+
+The macro \icmd{\istbA} is an alternative (or arc) version, doing one more thing than \cmd{\istb}. With \cmd{\istbA} you can \emph{easily change the level distance} of an individual branch using a factor (\xw{1}, by default) \emph{as the first optional argument} in parentheses. All other arguments are the same as in \cmd{\istb}.
+For example, \cmd{\istbA(.5)} is an abbreviation of \cmd{\istb<level distance=.5*\textbackslash xtlevdist>},
+as you can see in the example below:
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istbA
+\begin{istgame}
+\istroot(0) \istb \istbA \endist
+\istroot(1)(0-1) \istb \istbA(.5){b} \endist
+\istroot(2)(0-2) \istb
+ \istbA<level distance=.5*\xtlevdist>{b} \endist
+\end{istgame}
+\end{tcblisting}
+
+You can interchangeably use \icmd{\istbA} and \cmd{\istb}, except for one case, in which you are working with a continuum of branches.
+
+\xbigskip1
+\remark (too early to comment)
+\begin{itemize}\tightlist
+\item The macro \cmd{\istbA} is originally created to work with \cmd{\istrootcntmA} as an arc version.
+\item \cmd{\istbA} draws, by default, a branch up to an arc when used with the continuum arc version \cmd{\istrootcntmA}, but \cmd{\istb} does not. (For more details, see Section~\ref{ssec:cntmA} on page~\pageref{ssec:cntmA}.)
+\item Except for the case of using a continuum of branches, \cmd{\istbA} is equivalent to \cmd{\istb} for users.
+\end{itemize}
+
+Its terminal version \icmd{\istbAt} is also available, but the dual label version of \cmd{\istbA} is not provided.
+The starred versions \icmd{\istbA*} and \icmd{\istbAt*} print an solid node (by default) at the end of the corresponding branch.
+
+\subsubsection{\protect\cmd{\istbA}: application}
+By specifying the \xw{grow} key of \cmd{\istb} you can draw a branch with the exact length you want.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istbA
+\begin{istgame}
+\xtdistance{10mm}{15mm}
+\istroot(0) \istb \istb \istb \endist
+\istroot(1)(0-1)
+ \istbA(.7)<grow=-120> % 7mm long
+ \istb % 10mm long
+ \istbA(1)<grow=-30>{b} % 10mm long
+ \endist
+\istroot(2)(0-3) \istb \istbA{b} \endist
+\draw [dashed] (1) circle (10mm);
+\draw [dotted] (1) circle (7mm);
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+You can also apply \cmd{\istbA} to easily ruin your regular balanced trees.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \istbA
+\begin{istgame}
+\xtdistance{10mm}{15mm}
+\istroot(0) \istbA(.2) \istbA(1.5) \istbA(1.2) \endist
+\istroot(1)(0-1)
+ \istbA(.7) \istb \istbA(2)<grow=-60>{b} \endist
+\istroot(2)(0-3) \istbA(.2) \istbA(-1){b} \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\section{Important labels: players, action labels, and payoffs}
+\label{sec:corelabels}
+
+\subsection{How to put players}
+
+\subsubsection{Players: basics}
+
+%As discussed in~\ref{ssec:istroot} on page~\pageref{ssec:istroot}, t
+The macro \icmd{\istroot} specifies the (sub)root of a simple tree and puts its \isw{owner} (or a \isw{player}).
+The direction to which a player label is put is set by the angle \xw{< >} option of \cmd{\istroot}, like \xw{<above>} (by default), \xw{<east>}, or \xw{<45>}.
+To specify the direction you can use degrees, the compass directions, or positional words.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: node owner
+\begin{istgame}
+\istroot(0)<above>{Child} % default: <above>
+ \istb \istb \endist
+\istroot(1)(0-2)<45>{Parent}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+\remark
+\begin{itemize}
+\item
+The supplementary macro \cmd{\xtOwner} is provided as an extra way of putting owners of decision nodes (see Section~\ref{ssec:suppmac} on page~\pageref{ssec:suppmac}).
+\item
+Though an owner is to be input in text mode, by default, it is also possible to change the input mode to math mode with \cmd{\setistmathTF(*)} (see below in Section~\ref{ssec:setistmathTF-owners} and Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}).
+\end{itemize}
+
+\xbigskip1
+Note that the oval version \cmd{\istrooto} produces a bubble type node with an owner in it, so the directional option \xw{<angle>} is redundant with \cmd{\istrooto} (see Section~\ref{ssec:istrootstar} on page~\pageref{ssec:istrootstar}).
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: node owner (with \istrooto)
+\begin{istgame}
+\istrooto(0){Child}
+ \istb \istb \endist
+\istrooto(1)(0-2)<45>{\textbf{Parent}}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\subsubsection{Coloring players or a whole simple tree using \protect\cmd{\istroot}}
+
+\label{sec:firstthing}
+
+You can change the color of a player's name by giving \xw{color} in the angle option of \cmd{\istroot}, like \xw{<[red]>} or \xw{<[blue]45>}.
+(This is the \TikZ\ way of giving options for a node \xw{label}.)
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: coloring players
+\begin{istgame}
+\istroot(0)<[red]>{Child}
+ \istb
+ \istb
+ \endist
+\istroot(1)(0-2)<[blue]45>{\textsf{Parent}}
+ \istb
+ \istb
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+%\xbigskip1
+The example below shows how you color a whole simple tree: \xw{red} for the Child's simple tree and \xw{blue} for the Parent's simple tree.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: coloring a simple tree
+\begin{istgame}
+\istroot[south,red](0) % whole simple tree, but node
+ [draw=red,fill=red] % for node only
+ <[red]45>{Child} % for onwer only
+ \istb{l}[al]{0,2}[south]
+ \istb{r}[ar]
+ \endist
+\istroot[south,draw=blue](1)(0-2)<45>{\texttt{Parent}}
+ \istb{l}[al]{1,-1}[south]
+ \istb{r}[ar]{1,1}[-90]
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+\remark
+\begin{itemize}
+\item In the above example, the first \cmd{\istroot} has three bracket \xw{[option]}'s: the first bracket option is for a \emph{whole simple tree} including \emph{branches} and \emph{labels} (except a node style), the second for a a \emph{node} style of a decision node, and the third for the \emph{owner} of the (sub)root.
+ \begin{itemize}
+ \item If you want to have all the branches, action labels, and payoffs in red,
+ just use the color name like \xw{[south,red]}.
+ If you want to have just the branches in blue, use the \xw{draw} option key like \xw{[south,draw=blue]}.
+ (This is what \TikZ\ does.)
+ \end{itemize}
+\item Note that the \emph{first entry} in the first \xw{[option]} list of \cmd{\istroot} \emph{must} be \emph{the growing direction of a simple tree}. So it should be input like \xw{[south,red]}, but never like \xw{[red,south]}.
+(This is what \cmd{\istroot} requires.) Otherwise, you will get a compile \emph{error}.
+\end{itemize}
+
+\subsubsection{Decorating players or a whole simple tree using \protect\cmd{\istrooto}}
+
+The oval version \icmd{\istrooto} puts an owner whithin a bubble type node.
+With \cmd{\istrooto}, the color of a player can be changed by the second bracket \xw{[option]}, such as \xw{[red]} or \xw{[blue]}.
+(This is the \TikZ\ way for giving options for a \xw{node}.)
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: decorating players (with \istrooto)
+\begin{istgame}
+\istrooto(0)[red]{Child}
+ \istb{a}{B}[below] \istb{c} \endist
+\istrooto(1)(0-2)[blue,dashed]{Parent}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The following example shows how you can color, with \cmd{\istrooto}, a whole simple tree including action labels and payoffs in \xw{red} or \xw{blue}, except for node styles.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: decorating players (with \istrooto)
+\begin{istgame}
+\istrooto[south,red](0)[draw=green,blue]{Child}
+ \istb*{a}{B}[below] \istb{c} \endist
+\istrooto[-90,blue](1)(0-2)[draw=blue,blue]{Parent}
+ \istb* \istb \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+What if you want to paint some color into the background of each oval node or box node? You can also do this simply by using the \TikZ\ way of giving options for nodes.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: decorating oval/box nodes
+\begin{istgame}
+\istrooto(0)[top color=white,
+ bottom color=blue!80!black,yellow]{Child}
+ \istb \istb \endist
+\istrooto(1)(0-2)[box node,fill=red!20,blue]{Parent}
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+\subsubsection{Changing the input mode and text font style: \protect\cmd{\setistmathTF(*)}}
+\label{ssec:setistmathTF-owners}
+
+You can change the input mode for owners from text mode (by default) to math mode by using the macro \cmd{\setistmathTF111} which has three mandatory arguments.
+The first number \xw{1} means that an owner is printed in \emph{math mode}.
+(The second number \xw{1} and third number \xw{1} mean that action labels and payoffs are in math mode, respectively.)
+\cmd{\setistmath011} means that an owner is printed in text mode (this is default).
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \setistmathTF
+\begin{istgame}
+\setistmathTF111 % owner: math mode
+\istroot(0){\Omega_{\alpha}}+10mm..20mm+
+ \istb \istb \endist
+\istroot(1)(0-1)<180>{Alpha 2} \istb \istb \endist
+\setistmathTF011 % owner: text mode
+\istroot(2)(0-2)<0>{Omega 2} \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+The starred version, for example, \cmd{\setistmathTF*011}, enables you to change the font style of an owner.
+Moreover, by specifying a text font style, like \cmd{\setistmathTF*011<texttt>}, in angle brackets, you can print an owner in typewriter font. (See Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}, for more details.)
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \setistmathTF(*)
+\begin{istgame}
+\setistmathTF111 % owner: math mode
+\istroot(0){\Omega_{\alpha}}+10mm..20mm+
+ \istb \istb \endist
+\setistmathTF011 % owner: text mode
+\istroot(1)(0-1)<180>{Alpha 2} \istb \istb \endist
+\setistmathTF*011<texttt> % owner: in texttt
+\istroot(2)(0-2)<0>{Omega 2} \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The supplementary macro \cmd{\xtOwner} gives an alternative way of putting, outside of a simple tree, an owner in \emph{text mode} at a node.
+The starred version \cmd{\xtOwner*} prints an owner as in the input mode set by \cmd{\setistmathTF*}.
+(See Section~\ref{ssec:suppmac} on page~\pageref{ssec:suppmac}, for more details on \cmd{\xtOwner}.)
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \setistmathTF(*)
+\begin{istgame}
+\setistmathTF111 % owner: math mode
+\istroot(0){\Omega_{\alpha}}+10mm..20mm+
+ \istb \istb \endist
+\setistmathTF*011<textbf> % owner: text mode
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtOwner*(1){Alpha 2}[left] % owner: textbf
+\xtOwner(2){Omega 2}[r] % owner: normal font
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+
+\subsection{How to put action labels}
+
+\subsubsection{Action labels: basics}
+
+The macro \icmd{\istb} prints a \isw{branch} and its \isw{action} label.
+Note that action labels should be input in \emph{math mode}, by default.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: action labels
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[above left] \istb{Bad} \endist
+\istroot(1)(0-2)
+ \istb{\text{\fbox{$\alpha$}}}[above left]
+ \istb{\text{\fbox{$\beta$}}}[above right]
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+By default, \cmd{\istb} prints its action label on the midpoint of the corresponding branch.
+You can specify the position of an action label with the positional words and their abbreviations but not by the compass directions or degrees.
+
+In the following example, the abbreviations are used to place action labels.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: action labels with abbreviations
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[al] \istb{Bad} \endist
+\istroot(1)(0-2)
+ \istb{\text{\fbox{$\alpha$}}}[al]
+ \istb{\text{\fbox{$\beta$}}}[ar]
+ \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+Notice that with the \emph{abbreviations} the position of an action label is (internally) adjusted to get better result (for more details, see Section~\ref{sec:abb} on page~\pageref{sec:abb}).
+
+\xbigskip1
+\remark
+\begin{itemize}\tightlist
+\item
+The supplementary macro \cmd{\xtActionLabel} is provided for an extra way of putting an action label (see Section~\ref{ssec:suppmac} on page~\pageref{ssec:suppmac}, for more details).
+\item
+By default, action labels are to be input in \emph{math mode}. You can change the input mode to text mode by using \cmd{\setistmathTF} or \cmd{\setistmathTF*} (see below in Section~\ref{ssec:setistmathTF-actionlabels} and Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}).
+\end{itemize}
+
+\subsubsection{Decorating action labels}
+
+You can change the color of action labels with \TikZ\ options.
+In the example below, the bracket options before an action label are for branches and those after are only for the action labels.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: color and line style
+\begin{istgame}
+\istroot(0)
+ \istb[dashed,thick]{A}[al]
+ \istb[blue,very thick]{B}[r]
+ \istb[blue,very thick]{C}[above right,red]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark It is \emph{important} to remember that you cannot use the abbreviations with additional options. For example, you can do like \cmd{\itsb\{C\}[ar]} but not like \cmd{\istb\{B\}[ar,red]}. Instead, you should do like \cmd{\istb\{C\}[above right,red]}.
+\xbigskip1
+
+You can also express action labels in a box or a circle, or other shapes with colors.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: decorating action labels
+\begin{istgame}
+\istroot(0)
+ \istb{A}[above left,draw=black,circle,fill=red!20]
+ \istb{B}[right,draw=black,fill=green,inner sep=0pt]
+ \istb{\textbf{C}}[above right,fill=blue,yellow]
+ \endist
+\istroot(1)(0-2)
+ \istb{D}[above left,xshift=-3pt,draw=blue,double]
+ \istb{E}[above right,xshift=5pt,draw,star]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{Sloped action labels}
+\label{ssec:slopedlabels}
+
+You can print \isw{sloped labels} for actions by using the \TikZ\ option \xw{sloped}.
+Still you should remember that you cannot use the abbreviations to place action labels with other options like \xw{sloped}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[above,sloped]
+ \istb{Bad}[above,sloped] \endist
+\istroot(1)(0-2)
+ \istb{\text{\fbox{$\alpha$}}}[above,sloped]
+ \istb{\text{\fbox{$\beta$}}} \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+\warning
+Issues in \emph{sloped labels} in \TikZ\ with \emph{asymmetric scales}:
+\begin{itemize}\tightlist
+\item The \xw{tree} library in \TikZ\ does not seem to treat sloped labels properly, when \xw{xscale} or \xw{yscale} is used asymmetrically.
+
+% Example: actions labels with abbreviations
+\begin{tcblisting}{listing outside text, righthand width=.31\linewidth}
+\begin{istgame}[xscale=2.5]
+\istroot(0)
+ \istb{Good}[above,sloped]
+ \istb{Bad}[above,sloped] \endist
+\istroot(1)(0-2)
+ \istb{\text{\fbox{$\alpha$}}}[above,sloped]
+ \istb{\text{\fbox{$\beta$}}} \endist
+\end{istgame}
+\end{tcblisting}
+
+\item A temporary solution to cure this issue is to declare the macro \cmd{\xtcureslopedlabelsNS}, provided with this package, in a TeX group with caution.
+For a tree growing eastwards or westwards, use \cmd{\xtcureslopelabelsEW}, instead.
+(\emph{These solutions are only temporary. They have not been tested for every occasion.})
+
+% Example: actions labels with abbreviations
+\begin{tcblisting}{listing outside text, righthand width=.31\linewidth}
+\begin{istgame}[xscale=2.5]
+\xtcureslopedlabelsNS
+\istroot(0)
+ \istb{Good}[above,sloped]
+ \istb{Bad}[above,sloped] \endist
+\istroot(1)(0-2)
+ \istb{\text{\fbox{$\alpha$}}}[above,sloped]
+ \istb{\text{\fbox{$\beta$}}} \endist
+\end{istgame}
+\end{tcblisting}
+\end{itemize}
+
+
+%\clearpage
+\subsubsection{Dual action labels}
+
+You can also express \isw{dual labels} for actions by using \icmd{\istB} or \icmd{\istBt}.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[sloped,font=\footnotesize]
+\xtdistance{15mm}{25mm}
+\istroot(0)[chance node]
+ \istB{Black}[a]{x}[b]
+ \istB{Red}[a]{1-x}[b] \endist
+\istroot(1)(0-1)[chance node]
+ \istBt{Head}[a]{y}[b]
+ \istBt{Tail}[a]{1-y}[b] \endist
+\end{istgame}
+\end{tcblisting}
+
+You can do the same thing as \cmd{\istB} does by using \cmd{\istb} together with the supplementary macro \cmd{\xtActionLabel} (see Section~\ref{ssec:istbandxtActionLabel} for more details on dual action labels).
+
+\subsubsection{Changing the input mode and text font style: \protect\cmd{\setistmathTF(*)}}
+\label{ssec:setistmathTF-actionlabels}
+
+By default the input mode for action labels is in \emph{math mode}. With \icmd{\setistmathTF}, you can change the input mode for labels. The package's default input mode is set as \cmd{\setistmathTF011}, meaning that the input mode for an owner is in text mode (denoted by the first \xw{0}), for action labels in math mode (denoted by the second number \xw{1}), and for payoffs in math mode (denoted by the third number \xw{1}).
+
+So if do like \cmd{\setistmathTF001} (with the second number \xw{0}), action labels are in \emph{text mode}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \setistmathTF001
+\begin{istgame}[sloped,font=\footnotesize]
+\istroot(0)[chance node]+15mm..25mm+
+ \istB{Left}[a]{x}[b] \istB{Right}[a]{1-x}[b] \endist
+\setistmathTF001 % action labels: in text mode
+\istroot(1)(0-1)[chance node]
+ \istBt{Left}[a]{y}[b] \istBt{Right}[a]{1-y}[b] \endist
+\istroot(2)(0-2)[chance node]
+ \istBt{Head}[a]{z}[b] \istBt{Tail}[a]{1-z}[b] \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+Moreover, if you use the starred vesrion, like \icmd{\setistmathTF*}\xw{001}, action labels automatically are printed in \emph{italics}.
+If you specify a font style in \emph{curly braces}, like \cmd{\setistmathTF*001\{texttt\}}, you can even print action labels in typewriter font.
+For more details, see Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \setistmathTF*001 (in italics)
+\begin{istgame}[sloped,font=\footnotesize]
+\istroot(0)[chance node]+15mm..25mm+
+ \istB{Left}[a]{x}[b] \istB{Right}[a]{1-x}[b] \endist
+\setistmathTF*001 % action labels: in italics
+\istroot(1)(0-1)[chance node]
+ \istB{Left}[a]{y}[b] \istB{Right}[a]{1-y}[b] \endist
+\setistmathTF*001{texttt} % action labels: in texttt
+\istroot(2)(0-2)[chance node]
+ \istB{Head}[a]{z}[b] \istB{Tail}[a]{1-z}[b] \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The supplementary macro \cmd{\xtActionLabel} prints, from outside of a simple tree, an action label in \emph{math mode}.
+The starred version \cmd{\xtActionLabel*} prints an action label in the input mode as set by \cmd{\setistmathTF*}.
+For more details, see Section~\ref{ssec:istbandxtActionLabel} (on page~\pageref{ssec:istbandxtActionLabel}) and Section~\ref{sec:setistmathTF} (on page~\pageref{sec:setistmathTF}).
+
+%\xbigskip1
+%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+%% Example: \xtActionLabel* (with \setistmathTF*)
+%\begin{istgame}[sloped,font=\footnotesize]
+%\istroot(0)[chance node]+15mm..25mm+
+% \istb{Left}[a] \istb{Right}[a] \endist
+%\setistmathTF*001 % action labels: in italics
+%\istroot(1)(0-1)[chance node]
+% \istb{Left}[a] \istb{Right}[a] \endist
+%\setistmathTF*001{texttt} % action labels: in texttt
+%\istroot(2)(0-2)[chance node]
+% \istb{Head}[a] \istb{Tail}[a] \endist
+%\xtActionLabel*(0)(0-2){1-x}[b] % in texttt
+%\xtActionLabel(1)(1-2){1-y}[b] % in math mode (default)
+%\xtActionLabel*(2)(2-2){1-z}[b] % in texttt
+%\end{istgame}
+%\end{tcblisting}
+%\xbigskip1
+
+
+%\clearpage
+\subsection{How to put payoffs}
+
+\subsubsection{Payoffs: basics}
+
+The macro \icmd{\istb} can print a branch and also the corresponding payoffs, in \emph{math mode} by default, near at its endpoint.
+The payoffs are put in the direction set by \icmd{\setistgrowdirection} (\xw{south}, by default), unless it is changed by \xw{<grow keyval>} of \cmd{\istroot}.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: payoffs
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[l]{0,2}
+ \istb{Bad}
+ \endist
+\istroot(1)(0-2)
+ \istb{\alpha}[al]{(1,1)}
+ \istb{\beta}[ar]{-1,-1}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark
+\begin{itemize}\tightlist
+\item
+The supplementary macro \cmd{\xtPayoff} is provided for an extra way of putting payoffs (see Section~\ref{ssec:suppmac} on page~\pageref{ssec:suppmac}).
+\item
+The payoffs are to be input in math mode, by default, you change the input mode to text mode by using \cmd{\setistmathTF(*)} (see Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}).
+\end{itemize}
+
+\subsubsection{Payoffs and \protect\xttw{\textbackslash istgrowdirection}}
+\label{sec:payoffdirection}
+
+The \isw{direction} of where payoffs are put from a terminal node follows \icmd{\istgrowdirection} typed in as the first optional argument of \cmd{\istroot}.
+The default direction is \xw{south} and can be changed by \cmd{\setistgrowdirection}.
+For example, \cmd{\setistgrwodirection\{north\}} changes the default direction to \xw{north}.
+
+To specify the tree growing direction or the position of payoffs to be put, you can use degrees, the compass directions, or the positional words and their \emph{abbreviations}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: grow=south (default)
+\begin{istgame}
+\istroot(0)
+ \istb[dashed,thick]{A}{\binom23}
+ \istb*{}{(-2,3)}
+ \istbt[blue,very thick]{B}[ar]{2,3}
+ \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+By default, \xw{grow=south}, so \cmd{\istgrowdirection} is \xw{south} (or \xw{below} or \xw{-90}).
+The above example shows payoffs at the south (by default) of terminal nodes.
+
+\xbigskip1
+\remark
+ \begin{itemize}\tightlist
+ \item
+ You can simply omit the position of payoffs. Then they are printed, by default, in the direction as set by \cmd{\istgrowdirection}.
+ \item
+ However, if you use options other than the direction of payoffs, you must specify the direction with others.
+ \item
+ Moreover, the direction \emph{must} be the \emph{first} entry of the option list for payoffs and the abbreviations cannot be used.
+ For example, \xw{[b,yshift=-3mm]} and \xw{[yshift=-3mm,below]} are not accetable.
+ It must be that \xw{[below,yshift=-3mm]}.
+ \item Note also that you can do like \xw{[[yshift=-3mm]below}, instead (see also page~\pageref{page:finetuningpayoffs}).
+ \end{itemize}
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: grow=south (default)
+\begin{istgame}
+\istroot(0)
+ \istb[dashed,thick]{A}{\binom23}
+ \istb*{}{(-2,3)}
+ \istbt[blue,very thick]{B}[ar]{2,3}
+ [below,yshift=-3mm,draw]
+ \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+You can see more examples, below, that show the positions of payoffs, by default, depend on the tree growing directions, unless you specify different directions.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: grow=right (or east or 0 degree)
+\begin{istgame}
+\istroot[right](0)
+ \istb[dashed,thick]{A}{\binom23}
+ \istb*{}{(-2,3)}
+ \istbt[blue,very thick]{B}[al]{2,3}
+ \endist
+\xtHideTerminalNodes
+\end{istgame}
+\end{tcblisting}
+
+\verb|grow=right=\istgrowdirection|, so payoffs are put on the right.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: grow=north
+\begin{istgame}
+\setistgrowdirection{north}
+\istroot(0)
+ \istb[dashed,thick]{A}{\binom23}
+ \istb*{}{(-2,3)}
+ \istbt[blue,very thick]{B}[bl]{2,3}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\verb|grow=north=\istgrowdirection|, so payoffs are put above the terminal nodes.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: grow=south west
+\begin{istgame}
+\istroot[south west](0)
+ \istb[dashed,thick]{A}{\binom23}
+ \istb{}{(-2,3)}
+ \istb[blue,very thick]{B}[right]{2,3}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\verb|grow=south west=\istgrowdirection|, so payoffs are put below left of the terminal node.
+
+\xbigskip1
+You can adjust the direction of putting payoffs by specifying a directional word right after payoffs, like \verb|\istb[blue,very thick]{B}[right]{2,3}[below]|.
+
+You can use the \isw{abbreviations} \xw{[l]}, \xw{[r]}, \xw{[a]}, and \xw{[b]} for \xw{[left]}, \xw{[right]}, \xw{[above]}, and \xw{[below]}, respectively.
+The abbreviations \xw{[al]}, \xw{[ar]}, \xw{[bl]}, and \xw{[br]} can also be used
+for \xw{[above left]}, \xw{[above right]}, \xw{[below left]}, and \xw{[below right]}, respectively,
+to put payoffs (for more details about abbreviations, see Section~\ref{sec:abb} on page~\pageref{sec:abb}).
+
+Notice also that, instead of the positional words, you can use the compass directions or degrees, like \verb|\istb[blue,very thick]{B}[right]{2,3}[-90]|.
+
+
+\subsubsection{Decorating payoffs}
+
+You can change the color of payoffs by giving \TikZ\ options right before the positional words for payoffs.
+For example you can do like \xw{\istb...\{(1,1)\}[[blue]below]}.
+%This is the \TikZ\ way of giving options for \xw{label}.
+Note that, in this case, you cannot use the abbreviation of the positional words.
+
+\begin{tcblisting}{listing outside text, righthand width=.2\linewidth}
+% Example: coloring payoffs
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[l]{0,2} \istb{Bad} \endist
+\istroot(1)(0-2)
+ \istb{\alpha}[al]{(1,1)}[[red]below]
+ \istb{\beta}[ar]{-1,-1}[[blue]below]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+You can also put payoffs in a box, a circle, or other shapes, even with color in the background.
+
+\begin{tcblisting}{listing outside text, righthand width=.2\linewidth}
+% Example: decorating payoffs
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[l]{0,2}[[draw,circle,double,fill=green]below]
+ \istb{Bad} \endist
+\istroot(1)(0-2)
+ \istb{\alpha}[al]{(1,1)}[[red,draw=black]below]
+ \istb{\beta}[ar]{\textbf{-1,-1}}
+ [[draw,ellipse,fill=blue,yellow,inner sep=2pt]below]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{Changing the input mode and text font style: \protect\cmd{\setistmathTF(*)}}
+\label{ssec:setistmathTF-payoffs}
+
+You can change the input mode for payoffs from math mode (by default) to text mode,
+by using \cmd{\setistmathTF010}. The last \xw{0} means that payoffs are in text mode.
+
+\begin{tcblisting}{listing outside text, righthand width=.2\linewidth}
+% Example: \setistmathTF
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[l]{pizza 1} \istb{Bad} \endist
+\setistmathTF010 % payoffs: in text mode
+\istroot(1)(0-2)
+ \istb{\alpha}[al]{out 1} \istb{\beta}[ar]{in 1} \endist
+\end{istgame}
+\end{tcblisting}
+
+The starred version, for example, \cmd{\setistmathTF*010[texttt]}, with a font style specified in brackets, prints payoffs in typewriter font.
+
+\begin{tcblisting}{listing outside text, righthand width=.2\linewidth}
+% Example: \setistmathTF*
+\begin{istgame}
+\setistmathTF010 % payoffs: in text mode
+\istroot(0)
+ \istb{Good}[l]{pizza 1} \istb{Bad} \endist
+\setistmathTF*010[texttt] % payoffs: in texttt
+\istroot(1)(0-2)
+ \istb{\alpha}[al]{out 1} \istb{\beta}[ar]{in 1} \endist
+\end{istgame}
+\end{tcblisting}
+
+The supplementary macro \cmd{\xtPayoff} prints, outside of a simple tree, payoffs in \emph{math mode}.
+The starred version \cmd{\xtPayoff*} prints payoffs in the input mode as set by \cmd{\setistmathTF*}.
+See Section~\ref{sec:setistmathTF} on page~\pageref{sec:setistmathTF}.
+
+
+\section{Input mode and text font style changer: \protect\cmd{\setistmathTF(*)}}
+\label{sec:setistmathTF}
+
+The macro \icmd{\setistmathTF} enables you to change the input mode for important labels: owners, action labels, and payoff.
+It takes three numbers (\xw{0} or \xw{1}) as \emph{mandatory} arguments. Here, \xw{1} (\xw{true}) means the input mode is in \emph{math mode} and \xw{0} (\xw{false}) in \emph{text mode}.
+The three numbers represents the input mode for owners, action labels, and payoffs, respectively.
+In this package, it is initially set as \verb|\setistmathTF{0}{1}{1}|, meaning that owners are to be input in text mode, and action labels and payoffs in math mode.
+
+\begin{tcblisting}{listing only}
+% \setistmathTF
+% syntax:
+ \setistmathTF{<owner input mode>}{<action input mode>}{<payoff input mode>}
+% initial values:
+ {0}{1}{1}
+\end{tcblisting}
+
+The starred version \icmd{\setistmathTF*} accepts (in addition to three \emph{mandatory} numbers) three \emph{optional} arguments, each of which is effective \emph{only when} the corresponding input mode is in \emph{text mode}.
+The arguments are to be one of text font styles \emph{without a backslash} such as \xw{textrm}, \xw{textit}, \xw{itshape}, \xw{textbf}, \xw{scriptsize}, \xw{tiny}, and so on.
+Each of the three optional arguments is ignored when used with \cmd{\setistmathTF} and when the corresponding input mode is in math mode.
+
+\begin{tcblisting}{listing only}
+% \setistmathTF
+% syntax:
+ \setistmathTF{}{}{}<owner font>{<action label font>}[<payoff font>]
+% defaults
+ {0}{1}{1}<>{textit}[]
+\end{tcblisting}
+
+The first optional argument in \emph{angle brackets} is the font style for an owner, the second in \emph{curly braces} for action labels, and the third \emph{in brackets} for payoffs. By default action labels are printed in \emph{italics}.
+
+For example, with \cmd{\setistmathTF*000<texttt>\{textit\}[tiny]} delared, an owner is printed in typewriter font, action labels in italics, and payoffs in the tiny size of normal text font (roman, upright).
+With \cmd{\setistmathTF000<texttt>\{textit\}[tiny]}, all the optional arguments are ignored and all the labels are printed in normal text font.
+Note also that with \cmd{\setistmathTF*001}, you can print action labels in \emph{italics} (by default).
+
+\subsection{\protect\cmd{\setistmathTF}: input mode changer}
+
+The macro \cmd{\setistmathTF} is an \emph{input mode changer}, taking three numbers as mandatory arguments.
+The default input modes for important labels are set as \cmd{\setistmathTF011}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \setistmathTF
+\begin{istgame}
+%\setistmathTF011 % (default mode)
+\xtdistance{20mm}{20mm}
+\istroot(0){Alan 1}+20mm..40mm+
+ \istb{left 1}[al]
+ \istb{right 1}[ar] \endist
+\setistmathTF001 % mode: text,text,math
+\istroot(1)(0-1)<180>{Bob 2}
+ \istb{left 2}[al]{pie 1}
+ \istb{right 2}[ar]{pie 2} \endist
+\setistmathTF100 % mode: math,text,text
+\istroot(2)(0-2)<0>{Kim 3}
+ \istb{left 3}[al]{pie 3}
+ \istb{right 3}[ar]{pie 4} \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\setistmathTF*}: input mode and text font style changer}
+
+The starred version \cmd{\setistmathTF*} is a \emph{text font style changer} as well as an \emph{input mode changer}. It takes three numbers as \emph{mandatory} arguments followed by three \emph{optional} arguments in the order of \verb+<>{}[]+. The first option \xw{<>} is for an owner, the second \verb+{}+ for action labels, and the third \xw{[]} for payoffs.
+
+Each optional argument should be one of valid font shapes and sizes, but without a textbackslash (not as a command),
+such as \xw{textbf}, \xw{textsc}, \xw{textit}, \xw{large}, \xw{tiny}, and so on.
+Each of the options is effective only when it is used with the starred version \cmd{\setistmathTF*} and the corresponding input mode is in text mode.
+
+\xsmallskip1
+\remark
+Note that if the second optional argument is omitted when action labels are in text mode, for example, like \cmd{\setistmathTF*001}, \emph{action labels} are printed in \emph{italics} by default.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \setistmathTF*
+\begin{istgame}
+\xtdistance{20mm}{20mm}
+\setistmathTF*011<textsc>{tiny}[textbf]
+\istroot(0){Alan 1}+20mm..40mm+
+ \istb{left 1}[al]
+ \istb{right 1}[ar] \endist
+\setistmathTF*001<textsc>{tiny}[textbf]
+\istroot(1)(0-1)<180>{Bob 2}
+ \istb{left 2}[al]{pie 1}
+ \istb{right 2}[ar]{pie 2} \endist
+\setistmathTF*100[textbf] % actions labels in italics (by default)
+\istroot(2)(0-2)<0>{Kim 3}
+ \istb{left 3}[al]{pie 3}
+ \istb{right 3}[ar]{pie 4} \endist
+\end{istgame}
+\end{tcblisting}
+
+\subsection{\protect\cmd{\setistmathTF*} and supplementary macros \texttt{\textbackslash xtFoo*} printing labels}
+
+Many supplementary macros, working outside of a simple tree, optionally print important labels: owners, action labels, and payoffs.
+These include \icmd{\xtOwner}, \icmd{\xtActionLabel}, \icmd{\xtPayoff}, \icmd{\xtInfosetOwner} and many more.
+All of the macros for information sets (except \cmd{\cntmAInfoset} and \cmd{\cntmAInfosetO}) such as \cmd{\xtInfoset} or \cmd{\xtCInfosetO} also print the owners of information sets.
+With any supplementary macros, by default, an owner is printed in text mode and action labels and payoffs are printed in math mode.
+
+All of these macros have their own \emph{starred} (\xw{*}) versions, which print the labels in the input mode as set by \icmd{\setistmathTF*} (but not by \cmd{\setistmathTF}). For example, \icmd{\xtActionLabel*} prints action labels in \emph{italics} with \cmd{\setistmathTF*001}, while \cmd{\xtActionLabel} prints action labels in \emph{math mode}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \setistmathTF*
+\begin{istgame}
+\xtdistance{20mm}{20mm}
+\setistmathTF*000<textsc>{tiny}[textbf]
+\istroot(0)+20mm..40mm+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\xtOwner*(0){Alan 1} \xtOwner(1){Bob 2}[l]
+\xtActionLabel(0)(0-1){left 1}[al]
+\xtActionLabel*(1)(1-1){left 2}[al]
+\xtPayoff*(1-1){pie 1}
+\end{istgame}
+\end{tcblisting}
+
+You can find more examples for supplementary macros in this regard that are scattered here and there throughout the manual in appropriate places. See Section~\ref{ssec:setistmathTF-owners} Section~\ref{ssec:setistmathTF-actionlabels} Section~\ref{ssec:setistmathTF-payoffs}.
+
+\xbigskip1
+Here are some more examples on owners of information sets (see Section~\ref{sec:infoset} for more details on information sets).
+
+\label{page:xtInfoset*}
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\setistmathTF*011<textsf>
+\istroot(0){Alice}+15mm..30mm+ \istb{A} \istb{B} \endist
+\istroot(1)(0-1)<135>{Ben} \istb{C} \istb{D} \endist
+\istroot(2)(0-2) \istb{a} \istb{b} \endist
+\istroot(3)(1-2) \istb{a} \istb{b} \endist
+\setistmathTF*011<textbf>
+\xtInfosetO(0)(0)
+\xtInfosetO[rectangle,rounded corners=.2em](1)(1)
+\xtInfosetO*[ellipse,fill=blue!60]
+ (3)(2){Cate}[sloped,white](1.5em)
+\end{istgame}
+\end{tcblisting}
+
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}
+\setistmathTF*100{textsc}[texttt]
+\istroot(0){\alpha}+15mm..30mm+
+ \istb{Left}[al] \istb{Right}[ar] \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2)
+ \istb \istb{Go}[r]{omega} \endist
+\xtInfoset*(1)(2)
+\xtInfosetOwner*(1)(2){beta}[a]
+\setistmathTF*011<textbf>
+\xtCInfoset*(1-1)(2-1){Ben}
+\xtCInfoset*(1-2)(2-2){Cate}
+\end{istgame}
+\end{tcblisting}
+
+
+\label{page:xtCInfoset*}
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}
+\setistmathTF*011<texttt>
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\xtCInfosetO*(1)(0){imperfect recall}[left]
+\xtCInfosetO*[dashed,blue,thick](1)(2)<.7>{Blue}
+\xtCInfosetO(1-1)(2-1){Ben}
+\xtCInfosetO(1-2)(2-2){Cate}
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\section{Fine-tuning positions of players, action labels, and payoffs (experimental)}
+
+\subsection{Fine-tuning positions: owners}
+
+If you are not satisfied the position of an owner (or a player), you can change it by using the \TikZ\ options such as \xw{xshift}, \xw{yshift}, or \xw{label distance} with the angle option of \cmd{\istroot}.
+
+Examples are \xw{<[xshift=10pt]above>\{Child\}} and \xw{<[label distance=-5pt]45>\{Parent\}}, as shown in the following:
+
+\begin{tcblisting}{listing outside text, righthand width=.2\linewidth}
+% Example: node owner
+\begin{istgame}
+\istroot(0)<[xshift=10pt]above>{Child}
+ \istb
+ \istb
+ \endist
+\istroot(1)(0-2)<[label distance=-5pt]45>{Parent}
+ \istb
+ \istb
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+%\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+%\begin{istgame}[scale=1.2]
+%\istcntm(cntm)[green]+8mm..24mm+
+%\istroot(0)(cntm){I}+8mm..8mm+
+% \istb{x}[r]
+% \istbm
+% \endist
+%\xtdistance{10mm}{18mm}
+%\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+% \istb{Y}[l]{x,1-x}
+% \istb{N}[r]{0,0}
+% \endist
+%\end{istgame}
+%\end{tcblisting}
+
+
+\subsection{Fine-tuning positions: action labels}
+
+\subsubsection{Abbreviations: \xw{[l]}, \xw{[r]}, \xw{[a]}, and \xw{[b]}}
+
+As discussed in~\ref{ssec:istb} on page~\pageref{ssec:istb}, the macro \cmd{\istb} deals with the action labels.
+
+In order to determine the direction of action labels for branches to put, you can use degrees, the compass directions, or the positional words and their abbreviations as mentioned above.
+(Internally, the \isw{abbreviations} for payoffs and those for action labels work slightly differently in terms of \xw{xshift} and \xw{yshift}.)
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.2\linewidth}
+% Example: action labels (default position)
+\begin{istgame}[scale=1.2]
+\xtShowEndPoints
+\xtdistance{12mm}{16mm}
+\istroot(0)[initial node]
+ \istb<grow=0>{\fbox{$a$}}[a] \istb<grow=90>{\fbox{$l$}}[l]
+ \istb<grow=180>{\fbox{$b$}}[b] \istb<grow=-90>{\fbox{$r$}}[r]
+ \endist
+\end{istgame}
+\end{tcblisting}
+%\captionof{figure}{action labels by defaults with \xw{l}, \xw{r}, \xw{a}, and \xw{b}}
+
+\xbigskip1
+When you use these abbreviations you can manipulate the horizontal and/or the vertical shifts toward branches by using \icmd{\xtALPush}. (This is experimental!)
+
+\xbigskip1
+
+\begin{tcblisting}{listing only}
+% syntax:
+ \xtALPush{<xshift dim> for l and r}{<yshift dim> for a and b}
+% default:
+ {0pt}{0pt}
+\end{tcblisting}
+
+\xbigskip1
+For example, \verb|\xtALPush{-3pt}{5pt}| draws the labels left and right by \xw{3pt} to the branch and push those put above and below \xw{5pt} away from the branch, as shown in the following:
+
+\begin{tcblisting}{listing outside text, righthand width=.2\linewidth}
+% Example: \xtALPush
+\begin{istgame}[scale=1.2]
+\xtShowEndPoints
+\xtALPush{-3pt}{5pt} % look here
+\xtdistance{12mm}{16mm}
+\istroot(0)[initial node]
+ \istb<grow=0>{\fbox{$a$}}[a] \istb<grow=90>{\fbox{$l$}}[l]
+ \istb<grow=180>{\fbox{$b$}}[b] \istb<grow=-90>{\fbox{$r$}}[r]
+ \endist
+\end{istgame}
+\end{tcblisting}
+%\captionof{figure}{action labels shifted: comparison}
+
+
+\subsubsection{Abbreviations: \xw{[al]}, \xw{[ar]}, \xw{[bl]}, and \xw{[br]}}
+\label{sec:abb}
+
+You can also use the \isw{abbreviations} \xw{al}, \xw{ar}, \xw{bl}, and \xw{br} to represent
+\xw{above left}, \xw{above right}, \xw{below left}, and \xw{below right}, respectively,
+to position action labels. Precise representation of abbreviations is as follows:
+\begin{itemize}\tightlist
+\item \xw{[al]} represents \verb|[above left,xshift=1pt,yshift=-2pt,black]|
+\item \xw{[ar]} represents \verb|[above right,xshift=-1pt,yshift=-2pt,black]|
+\item \xw{[bl]} represents \verb|[below left,xshift=1pt,yshift=2pt,black]|
+\item \xw{[br]} represents \verb|[below right,xshift=-1pt,yshift=2pt,black]|
+\end{itemize}
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+%\begin{tcblisting}{listing above text}
+% Example: action labels with abbreviations
+\begin{istgame}[scale=1.1]
+\xtShowTerminalNodes[oval node,line width=.3pt]
+\def\xbox#1{\fbox{$#1$}} \def\ybox#1{#1}
+\xtdistance{12mm}{16mm}
+\istroot(0)[initial node]
+ \istb<grow=0>{\ybox{a}}[a]
+ \istb<grow=90>{\ybox{l}}[l]
+ \istb<grow=180>{\ybox{b}}[b]
+ \istb<grow=-90>{\ybox{r}}[r]
+ \endist
+\begin{scope}[line width=1.2]
+\xtdistance{10mm}{20mm}
+\istroot[90](N)(0-2)
+ \istbt[red]{\xbox{br}}[br]{1,1}
+ \istbt[blue,dashed]{\xbox{bl}}[bl]{2,2}
+ \endist
+\istroot[180](W)(0-3)
+ \istbt[green]{\xbox{ar}}[ar]{0,3}
+ \istbt[red]{\xbox{br}}[br]{2,1}
+ \endist
+\istroot[-90](S)(0-4)
+ \istbt[dotted]{\xbox{al}}[al]{1,-1}
+ \istbt[green]{\xbox{ar}}[ar]{-1,1}
+ \endist
+\istroot[0](E)(0-1)
+ \istbt[blue,dashed]{\xbox{bl}}[bl]{1,3}
+ \istbt[dotted]{\xbox{al}}[al]{2,0}
+ \endist
+\foreach \x in {1,...,4} {\xtNode(0-\x)}
+\end{scope}
+\end{istgame}
+\end{tcblisting}
+\captionof{figure}{positioning action labels with the abbreviations}\label{fig:actlabel3}
+
+In Figure~\ref{fig:actlabel3}, \fbox{$al$}'s are put in the same position from dotted branches,
+and so are the other labels from their corresponding branches, like \fbox{$bl$}'s from the blue dashed branches.
+
+\xbigskip1
+You can also use \icmd{\xtALShift} to put and push labels horizontally and vertically. (This is experimental!)
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% syntax:
+ \xtALShift{<horizontal shift dim>}{<vertical shift dim>}
+% defaults:
+ {1pt}{2pt}
+\end{tcblisting}
+
+\xbigskip1
+When the dimensions get bigger than the defaults (\xw{1pt} and \xw{2pt}) the labels get closer to the midpoints of the corresponding branches, and when the numbers get smaller the labels get farther from their branches.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: node owner
+\begin{istgame}
+\xtALShift{4pt}{3pt}
+\istroot(0)<above>{Child} % default: <above>
+ \istb{A}[al] \istb{B}[ar] \endist
+\istroot(1)(0-2)<45>{Parent}
+ \istb{L}[al] \istb{R}[ar] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{Fine-tuning positions: payoffs}
+
+You can change the position of payoffs with \TikZ\ options: \xw{xshift} and \xw{yshift}.
+For example, you can do as shown in the following:
+\label{page:finetuningpayoffs}
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: payoffs
+\begin{istgame}
+\istroot(0)
+ \istb{Good}[l]{0,2} \istb{Bad} \endist
+\istroot(1)(0-2)
+ \istb{\alpha}[al]{(1,1)}[[xshift=-10pt]below]
+ \istb{\beta}[ar]{-1,-1}[[yshift=-10pt]below]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\section{Growing direction of trees}
+\label{sec:growing}
+
+You can draw a game tree that grows in any \isw{direction}.
+By default, a game tree grows down and the \xw{child} branches are arranged and named counterclockwise with respect to their parent node.
+When a tree grows down, the branches are arranged from left to right.
+When a tree grows to the right, the branches are arranged and named from below to above.
+
+\xbigskip1
+Sometimes you may want a tree with the branches arranged clockwise with respect to their parent node because it seems to look more natural, especially when a tree grows north or east.
+In \TikZ, \xw{grow'=<direction>} enables you to draw a tree developed clockwise.
+
+To deal with the direction of the tree growth and the order of arranging branches, this package provides \icmd{\setistgrowdirection'} as well as \icmd{\setistgrowdirection}.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% default: growing south counterclockwise
+ \def\xtgrow{grow}
+ \def\istdefault@grow{south} % tree growing direction
+
+% \setistgrowdirection(')
+ \NewDocumentCommand\setistgrowdirection{t'm}
+ {\IfBooleanTF {#1}
+ { \renewcommand\xtgrow{grow'}
+ \renewcommand\istdefault@grow{#2}
+ }
+ { \renewcommand\xtgrow{grow}
+ \renewcommand\istdefault@grow{#2}
+ }
+ }
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\setistgrowdirection} -- counterclockwise}
+
+Our first example is a tree drawn using the default values: growing \xw{south} with branches going \ixsw{counterclockwise} with respect to their parent nodes (from left to right).
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 1: \setistgrowdirection{south}
+\begin{istgame}
+\setistOvalNodeStyle{.6cm}
+\xtShowEndPoints[oval node]
+\istrooto(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center] \endist
+\end{istgame}
+\end{tcblisting}
+
+By default or with \cmd{\setistgrowdirection\{south\}}, the numbers written in the child nodes increase counterclockwise with respect to their parent nodes.
+
+\subsection{\protect\cmd{\setistgrowdirection'} -- clockwise}
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 2: \setistgrowdirection'{south}
+\begin{istgame}
+\setistgrowdirection'{south}
+% same codes as in Example 1
+\setistOvalNodeStyle{.6cm}
+\xtShowEndPoints[oval node]
+\istrooto(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center] \endist
+\end{istgame}
+\end{tcblisting}
+
+With \cmd{\setistgrowdirection'\{south\}}, the numbers written in the child nodes increase \ixsw{clockwise} with respect to their parent nodes, which does not look natural.
+
+\subsection{Examples of rotating trees with \protect\cmd{\setistgrowdirection}}
+
+This macro allows you to to rotate a game tree.
+
+When you rotate a game tree to the north or to the east, it is a good idea to use the swap version \icmd{\setistgrowdirection'}.
+
+
+\xbigskip1
+
+\noindent\textbf{Tips:} \label{page:growtips}
+Though it is not necessary, it is suggested to use the following combinations of the macros and the directions.
+
+\xw{\setistgrowdirection\{south\}}: branches going counterclockwise (from left to right)\par
+\xw{\setistgrowdirection\{west\}}: branches going counterclockwise (downward)\par
+\xw{\setistgrowdirection'\{north\}}: branches going clockwise (from left to right)\par
+\xw{\setistgrowdirection'\{east\}}: branches going clockwise (downward)
+
+\xbigskip1
+\remark When you use the swap version \cmd{\setistgrowdirection'}, using either \cmd{\istroot} or \cmd{\istroot'} gives you the same result.
+
+\subsubsection{A tree growing east -- counterclockwise}
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 3: \setistgrowdirection{east}
+\begin{istgame}
+\setistgrowdirection{east}
+% same codes as in Example 1
+\setistOvalNodeStyle{.6cm}
+\xtShowEndPoints[oval node]
+\istrooto(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+Numbers increase upward (or counterclockwise).
+
+\subsubsection{A tree growing east -- clockwise}
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 4: \setistgrowdirection'{east}
+\begin{istgame}
+\setistgrowdirection'{east}
+% same codes as in Example 1
+\setistOvalNodeStyle{.6cm}
+\xtShowEndPoints[oval node]
+\istrooto(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+Here, numbers increase downward (or clockwise).
+This looks more natural.
+
+\subsubsection{A tree growing north -- counterclockwise}
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 5: \setistgrowdirection{north}
+\begin{istgame}
+\setistgrowdirection{north}
+% same codes as in Example 1
+\setistOvalNodeStyle{.6cm}
+\xtShowEndPoints[oval node]
+\istrooto(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+Numbers increase from right to left (or counterclockwise).
+
+\subsubsection{A tree growing north -- clockwise}
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example 6: \setistgrowdirection'{north}
+\begin{istgame}
+\setistgrowdirection'{north}
+\setistOvalNodeStyle{.6cm}
+\xtShowEndPoints[oval node]
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(0){0}+{12.5mm}..{3.45cm}+
+ \istb \istb \endist
+\xtdistance{12.5mm}{11.5mm}
+\istrooto(1)(0-1){1}
+ \istb{}{3}[center] \istb{}{4}[center]
+ \istb{}{5}[center] \endist
+\istrooto(2)(0-2){2}
+ \istb{}{6}[center] \istb{}{7}[center]
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+Numbers increase from left to right (or clockwise).
+This looks more natural.
+
+\subsubsection{\protect\cmd{\setxtgrowkey} for one simple tree}
+
+\icmd{\setxtgrowkey} can be used to change the key between \xw{grow} and \xw{grow'}, which is useful especially for one simple tree, not a whole tree.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% \setxtgrowkey: definition
+\NewDocumentCommand\setxtgrowkey{m}
+{
+ \renewcommand\xtgrow{#1}
+}
+% #1 is either grow or grow'
+\end{tcblisting}
+\xbigskip1
+
+The example below shows that the branches are arranged clockwise by \cmd{\setistgrowdirection'}.
+So you will need to use \cmd{\setistgrow\{grow\}} to locally get back to \emph{counterclockwise}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: using \setistgrowdirection' (swap version)
+\begin{istgame}[scale=.7,font=\scriptsize]
+\setistgrowdirection'{east}
+\istroot(0) \istb{a}[al] \istb{b}[bl] \endist
+\istroot[north](1)(0-1) \istb{c}[bl] \istb{d}[br] \endist
+{\setxtgrowkey{grow}
+\istroot[south](2)(0-2) \istb{e}[al] \istb{f}[ar] \endist
+}
+\istroot'(3)(2-2) \istb{g}[al] \istb{h}[bl] \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+You can do the same thing by using \cmd{\setistgrowdirection} and \cmd{\istroot'}. See the following example, in which
+you do not need to use \cmd{\setxtgrowkey}.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: using \istroot' (swap version)
+\begin{istgame}[scale=.7,font=\scriptsize]
+\setistgrowdirection{east}
+\istroot'(0) \istb{a}[al] \istb{b}[bl] \endist
+\istroot'[north](1)(0-1) \istb{c}[bl] \istb{d}[br] \endist
+\istroot[south](2)(0-2) \istb{e}[al] \istb{f}[ar] \endist
+\istroot'(3)(2-2) \istb{g}[al] \istb{h}[bl] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\section{Information sets}
+
+\label{sec:infoset}
+
+\subsection{\protect\cmd{\xtInfoset}: standard version}
+\label{ssec:xtInfoset}
+
+The macro \icmd{\xtInfoset} draws an \isw{information set}, connecting two decision nodes.
+
+The starred version \icmd{\xtInfoset*} prints the owner of an information set in input mode and text font style as set by \cmd{\setistmathTF(*)} (see page~\pageref{page:xtInfoset*} for examples).
+
+\begin{tcblisting}{listing only}
+% \xtInfoset
+% syntax: from left to right
+ \xtInfoset[<info line type>](<from>)(<to>){<owner>}[<pos>,<node opt>]
+% defaults:
+ [-,infoset style](<m>)(<m>){}[above]
+% option style for (all) information sets
+ infoset style={semithick,densely dotted}
+\end{tcblisting}
+
+The two coordinates \xw{(<from>)} and \xw{(<to>)} are mandatory and all other arguments are optional.
+
+\xbigskip1
+\remark
+This package provides macros to draw various types of information sets. They all include an option style \xw{[}\ixw{infoset style}\xw{]}, which is equivalent to \xw{[semithick,densely dotted]}. You can change the style or add more options to it by using the macro \cmd{\setxtinfosetstyle}. For more details, see Section~\ref{ssec:setxtinfosetstyle} on page~\pageref{ssec:setxtinfosetstyle}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtInfoset
+\begin{istgame}
+\istroot(0){1}+15mm..30mm+
+ \istb{a} \istb{b} \endist
+\istroot(1)(0-1)
+ \istb{c} \istb{d} \endist
+\istroot(2)(0-2)
+ \istb{c'} \istb{d'} \endist
+\xtInfoset(1)(2){2}
+\end{istgame}
+\end{tcblisting}
+
+When you specify the owner of an information set, it appears (by default) above the midpoint of the two nodes. To change the location of the information set owner, you can use the abbreviations of directional words like \xw{a}, \xw{l}, \xw{ar}, or \xw{bl}. However, when you use other options with the position you cannot use the abbreviations. If you want an owner in red on the left, you can do it like \xw{[left,red]} as shown below.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\setistgrowdirection'{east}
+\setxtinfosetstyle{dashed} % changes line style
+\istroot(0){1}+15mm..30mm+
+ \istb{a} \istb{b} \endist
+\istroot(1)(0-1)
+ \istb{c} \istb{d} \endist
+\istroot(2)(0-2)
+ \istb{c'} \istb{d'} \endist
+\xtInfoset(1)(2){2}[left,red]
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+For a curved information set, you can do, for example, like \cmd{\xtInfoset[bend left](1)(2)}.
+However this depends on the direction of tree growing or swapping the arrangement of branches.
+So, in order to draw a curved information set, it is recommended for you to use the curved version \cmd{\xtCInfoset}, documented in Section~\ref{ssec:xtCInfoset} on page~\pageref{ssec:xtCInfoset}.
+
+\subsection{\protect\cmd{\xtInfosetO}: oval version}
+
+\subsubsection{\protect\cmd{\xtInfosetO}: basics}
+\label{ssec:xtInfosetO}
+
+The oval version \icmd{\xtInfosetO} prints a bubble type (by default, a \xw{rounded rectangle}) \isw{information set} connecting two nodes, on the background layer by default.
+However, when you specify two identical nodes, it prints a densely dotted \xw{circle} (by default) at the node to express a \emph{\isw{singleton information set}}.
+
+Its starred version \icmd{\xtInfosetO*} prints the owner of an information set in input mode and text font style as set by \cmd{\setistmathTF(*)} (see page~\pageref{page:xtInfoset*} for examples).
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% \xtInfosetO (from left to right)
+% syntax:
+ \xtInfosetO[<bubble opt>](<from>)(<to>){<owner>}[<pos>,<owner opt>](min. height)
+% defaults: connecting two nodes: \xtInfoset(coor1)(coor2)
+ [ rectangle,rounded corners=.5*<minimum height>*<\xtscale>,
+ minimum width=\n1+<minimum height>,minimum height=1em,inner sep=0pt,
+ infoset style ]
+ (<m>)(<m>){}[](1em)
+% option style for (all) information sets
+ infoset style={semithick,densely dotted}
+\end{tcblisting}
+\xbigskip1
+
+Here is an example that shows a bubble type information set as a rounded rectangle and a singleton information set as a circle.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtInfsetO
+\begin{istgame}
+\istroot(0){1}+15mm..30mm+
+ \istb{a} \istb{b} \endist
+\istroot(1)(0-1) \istb{c} \istb{d} \endist
+\istroot(2)(0-2) \istb{c'} \istb{d'} \endist
+\xtInfosetO(0)(0)
+\xtInfosetO(1)(2){2}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The the height (or thickness) of an information set does not depend on \xw{scale}, \xw{xscale}, nor \xw{yscale}.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtInfosetO with x-y-scale
+\begin{istgame}[xscale=1.2,yscale=.7]
+\istroot(0){1}+15mm..30mm+
+ \istb{a} \istb{b} \endist
+\istroot(1)(0-1) \istb{c} \istb{d} \endist
+\istroot(2)(0-2) \istb{c'} \istb{d'} \endist
+\xtInfosetO(0)(0)
+\xtInfosetO(1)(2){2}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The size of an information set adjusts accordingly to the scale values.
+
+\xbigskip1
+\remark
+
+\begin{itemize}\firmlist
+\item The (minimum) height of a bubble type information set is \xw{1em} by default. This can be changed by the last optional argument of \cmd{\xtInfosetO}, like \verb+\xtInfosetO(1)(2)(2em)+.
+\item The width of a bubble information set is \xw{\n1+<minimum height>} by default,
+where \xw{\n1} is the Euclidean distance (measured by \TikZ) between two nodes in an information set.
+\end{itemize}
+
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtInfosetO: changing shape or color
+\begin{istgame}
+\setistgrowdirection'{east}
+\istroot(0){1}+15mm..30mm+
+ \istb{a} \istb{b} \endist
+\istroot(1)(0-1) \istb{c} \istb{d} \endist
+\istroot(2)(0-2) \istb{c'} \istb{d'} \endist
+\xtInfosetO[fill=blue!20,minimum width=\n1+3em]
+ (1)(2){2}(2em)
+\xtInfosetO(0)(0)(3em)
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The shape of an information set does not depend on the direction of tree growing, either.
+You can change the shape to, for example, an ellipse by specifying it in the first bracket option list.
+You can also change the color of the bubble representing an information set by specifying it in the option list.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: south east and yscale
+\begin{istgame}[yscale=1.5]
+\setistgrowdirection'{south east}
+\istroot(0) \istb \istb* \endist
+\istroot(1)(0-1){2} \istb* \istb* \endist
+\setxtinfosetstyle{fill=red!20,ellipse}
+\xtInfosetO(0)(0-2){1}
+\setxtinfosetstyle{solid,fill=blue!40,opacity=.5}
+\xtInfosetO(1-1)(1-2){3}
+\setxtinfosetstyle % restore defaults
+\xtInfosetO(1)(1)
+\end{istgame}
+\end{tcblisting}
+
+Note that, in the above example, \cmd{\setxtinfosetstyle} is used to change the style of information sets.
+In order to restore the option value to default (i.e., \xw{semithick,densely dotted}) just declare \cmd{\setxtinfosetstyle}. (See Section~\ref{ssec:setxtinfosetstyle} on page~\pageref{ssec:setxtinfosetstyle}.
+
+%\clearpage
+\subsubsection{Sloped information sets}
+
+With the \pkg{istgame} package, a \isw{sloped information set} is not special. Just connect any two nodes using \cmd{\xtInfoset} or \cmd{\xtInfosetO}.
+
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: sloped infoset
+\begin{istgame}
+\istroot(0){Alice}+15mm..30mm+
+ \istb{A} \istb{B} \endist
+\istroot(1)(0-1)<135>{Ben} \istb{C} \istb{D} \endist
+\istroot(2)(0-2) \istb{a} \istb{b} \endist
+\istroot(3)(1-2) \istb{a} \istb{b} \endist
+\xtInfosetO(0)(0)(2em)
+\xtInfosetO[rectangle](1)(1)
+\xtInfosetO(3)(2){Cate}
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+If you want to have an owner sloped too, you need the option \xw{[sloped]}, as shown below.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: sloped infoset with sloped text
+\begin{istgame}
+\setistgrowdirection'{east}
+\istroot(0){Alice}+15mm..30mm+ \istb{A} \istb{B} \endist
+\istroot(1)(0-1)<135>{Ben} \istb{C} \istb{D} \endist
+\istroot(2)(0-2) \istb{a} \istb{b} \endist
+\istroot(3)(1-2) \istb{a} \istb{b} \endist
+\setistmathTF*011<textbf>
+\xtInfosetO(0)(0)
+\xtInfosetO[rectangle,rounded corners=.2em](1)(1)
+\xtInfosetO*[ellipse,fill=blue!60]
+ (3)(2){Cate}[sloped,white](1.5em)
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\warning
+Issues in \emph{sloped labels} in \TikZ\ with \emph{asymmetric scales}:
+\begin{itemize}\tightlist
+\item The \xw{tree} library in \TikZ\ does not seem to treat sloped labels properly, when \xw{xscale} or \xw{yscale} is used asymmetrically.
+\item To cure this problem you can use \cmd{\xtcureslopedlabelsNS} for trees growing northwards and southwards and \cmd{\xtcureslopedlabelsWS} for trees growing eastwards and westwards.
+(See Section~\ref{ssec:slopedlabels} and page~\pageref{page:slopedlabels-warning}, for more details with examples.)
+\item Note, however, that sloped labels for information owners printed by \cmd{\xtInfosetO} do not depend on scaling.
+\end{itemize}
+
+\subsubsection{\protect\cmd{\setxtinfosetstyle}}
+\label{ssec:setxtinfosetstyle}
+
+With the macro \icmd{\setxtinfosetstyle} you can change the style of all information sets, at once.
+For this end, a simple new style \xw{infoset style} is defined as follows:
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% \setxtinfosetstyle
+\NewDocumentCommand \setxtinfosetstyle { m }
+{ \tikzset { infoset style/.style = { semithick , densely dotted , #1 } } }
+\end{tcblisting}
+\xbigskip1
+
+You can change the line style of an information set or add more options to the option list, for example, like \cmd{\setxtinfosetstyle\{thin,dashed\}}, or, like \cmd{\setxtinfosetstyle\{blue\}}.
+
+If you want get the option values back to the default values, then just declare \cmd{\setxtinfosetstyle}.
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% Example: \setxtinfosetstyle
+\begin{istgame}
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istbA(1.3) \istb \endist
+\istroot(2)(0-2) \istbA(1.3) \istb \endist
+\xtdistance{10mm}{8mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\setxtinfosetstyle{dashed,blue,thick}
+\xtInfoset(1)(2){Blue}
+\xtInfoset(1-1)(2-1)
+\xtInfosetO(1-2)(2-2)
+\setxtinfosetstyle % restore defaults
+\xtInfosetO(0)(0)
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+With \cmd{\setxtinfosetstyle}, you can also change the background color of information sets.
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% Example: \setxtinfosetstyle
+\begin{istgame}
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istbA(1.3) \istb \endist
+\istroot(2)(0-2) \istbA(1.3) \istb \endist
+\xtdistance{10mm}{8mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\setxtinfosetstyle{dashed,blue,thick,fill=blue!20}
+\xtInfosetO(1)(2){Blue}
+\xtInfosetO(1-1)(2-1)
+\xtInfoset(1-2)(2-2)
+\setxtinfosetstyle % restore defaults
+\xtInfosetO(0)(0)
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\setxtinfosetlayer}}
+\label{sec:setxtinfosetlayer}
+
+You can use the macro \icmd{\setxtinfosetlayer} to change the \isw{layer} on which an information set lies from \xw{background} (by default) to \xw{behind}, \xw{main}, \xw{above}, or \xw{foreground}, in that order.
+To go back to the default layer, just declare \cmd{\setxtinfosetlayer} or \cmd{\setxtinfosetlayer\{\}}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \setxtinfosetlayer
+\begin{istgame}
+\setistgrowdirection'{east}
+\istroot(0){1}+15mm..30mm+ \istb{a} \istb{b} \endist
+\istroot(1)(0-1) \istb{c} \istb{d} \endist
+\istroot(2)(0-2) \istb{c'} \istb{d'} \endist
+\setxtinfosetlayer{behind}
+\xtInfosetO[fill=red,ellipse,opacity=.2](0)(1)(1.5em)
+\setxtinfosetlayer
+\xtInfosetO[fill=blue!20](0-1)(0-2){2}(2em)
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\subsection{\protect\cmd{\xtCInfoset}: curved version}
+\label{ssec:xtCInfoset}
+
+With the macro \icmd{\xtCInfoset} you can draw, by default, a \emph{curved} information set and even a \emph{skewed curved} information set, on the \emph{background layer} by default. \index{curved information set}
+
+Its starred version \icmd{\xtCInfoset*} prints the owner of an information set with the input mode and text font style as set by \cmd{\setistmathTF(*)} (see page~\pageref{page:xtCInfoset*} for examples).
+
+\subsubsection{Curved information sets with \protect\cmd{\xtCInfoset}: basics}
+
+The macro \icmd{\xtCInfoset} connects two nodes with a curved \isw{information set} like an arch that looks like a left-bent curve (by default) from start point to end point.
+The basic usage of \cmd{\xtCInfoset} is the same as of \cmd{\xtInfoset}.
+
+\xsmallskip1
+\begin{tcblisting}{listing only}
+% \xtCInfoset : basics
+% syntax:
+ \xtCInfoset[<bubble opt>](<from>)(<to>){<owner>}[<pos>,<owner opt>](min. height)
+% defaults: connecting two nodes: \xtInfoset(coor1)(coor2)
+ [ rectangle,rounded corners=.5*<minimum height>*<\xtscale>,
+ minimum width=\n1+<minimum height>,minimum height=1em,inner sep=0pt,
+ infoset style ] % infoset style = { semithick , densely dotted }
+ (<m>)(<m>){}[](1em)
+\end{tcblisting}
+
+Here is an example of drawing curved information sets.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \xtCInfoset
+\begin{istgame}
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\xtCInfoset(1)(0){imperfect recall}[left]
+\xtCInfoset[dashed,blue,thick](1)(2){Blue}
+\xtCInfoset(1-1)(2-1){Ben}
+\xtCInfoset(1-2)(2-2){Cate}
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\subsubsection{Skewed \protect\cmd{\xtCInfoset}: full function}
+
+Besides the basic functions, \cmd{\xtCInfoset} has two additional optional arguments to control the shape of a curved information set.
+With the macro \cmd{\xtCInfoset}, you can control the shape of an information set curve by using \ixw{plot factor} like \xw{<1.3>} or \xw{<0.7>} (by default \xw{<1.3>}) and \ixw{midpoint factor} like \xw{!.4!} or \xw{!.6!} (by default \xw{!.5!}).
+
+\xsmallskip1
+\begin{tcblisting}{listing only}
+% \xtCInfoset : full defninition
+% syntax:
+ \xtCInfoset[<bubble opt>](<from>)!midpoint factor!(<to>)
+ <plot factor>{<owner>}[<pos>,<owner opt>](min. height)
+% defaults: connecting two nodes: \xtInfoset(coor1)(coor2)
+ [ rectangle,rounded corners=.5*<minimum height>*<\xtscale>,
+ minimum width=\n1+<minimum height>,minimum height=1em,inner sep=0pt,
+ infoset stlye ] % infoset style = {semithick , densely dotted}
+ (<m>)(<m>){}[](1em)
+\end{tcblisting}
+
+\label{page:plotfactor}
+By \ixw{plot factor}, we mean that it determines the maximum or minimum value of a curve.
+If the \xw{plot factor} is greater than \xw{1} it prints a \emph{concave} curve, equal to \xw{1} a \emph{straight} line, and less than \xw{1} a \emph{convex} curve, connecting form left to right.
+For example, \cmd{\xtCInfoset(1)(2)<.7>} (left to right) and \cmd{\xtCInfoset(2)(1)<1.3>} (right to left) will give the same result.
+
+%\xbigskip1
+% Example: sloped infoset
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}[scale=1.5,font=\scriptsize]
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\setistmathTF*011<texttt>
+\xtCInfoset*[dashed,blue](1)(2)<1.5>{1.5}
+\xtCInfoset*[dashed,blue](1)(2)<1.3>{1.3}
+\xtCInfoset*[dashed,blue](1)(2)<1>{1}
+\setxtinfosetlayer{above}
+\xtCInfoset*[dashed,blue](1)(2)<.7>{.7}
+\setxtinfosetlayer{background}
+\xtCInfoset*[solid,green,thick](2)(1)<1.3>
+\xtCInfoset*[dashed,blue](1)(2)<.5>{.5}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+
+By \ixw{midpoint factor}, we mean that, roughly speaking, it determines the maximum or minimum point of a curve. If the \xw{midpoint factor} is less than \xw{.5} the curve is positively skewed, and greater than \xw{.5} negatively skewed.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}[font=\scriptsize]
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\xtCInfoset(0)(1)<.7>{imperfect recall}[left]
+\xtCInfoset(1-1)!-.05!(2-1)<1.6>{Ben}
+\xtCInfoset(1-2)!.9!(2-2)<1.4>{Cate}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+A curved information set drawn by \cmd{\xtCInfoset} does not depend on the tree growing direction.
+It does not depend on scaling nor swapping branches, either.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}[scale=.9,font=\scriptsize]
+\setistgrowdirection'{east}
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\xtCInfoset(0)(1)<.7>{imperfect recall}[left]
+\xtCInfoset(1-1)!-.05!(2-1)<1.6>{Ben}
+\xtCInfoset(1-2)!.9!(2-2)<1.4>{Cate}
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\xtCInfosetO}: curved oval version}
+\label{ssec:xtCInfosetO}
+
+The macro \icmd{\xtCInfosetO} enables you to draw a \emph{curved bubble type} \isw{information set} and even a \emph{skewed curved bubble type} information set on the \emph{background layer} by default.
+
+Its starred version \icmd{\xtCInfosetO*} prints the owner of an information set in input mode and text font style in accordance with \cmd{\setistmathTF(*)} (see page~\pageref{page:xtCInfoset*} for examples).
+
+\subsubsection{Curved bubble type information sets with \protect\cmd{\xtCInfosetO}: basics}
+
+The basic usage of \cmd{\xtCInfosetO} is the same as of \cmd{\xtInfosetO}.
+If the two mandatory coordinates are identical, a \emph{circle} is drawn to represent a \emph{\isw{singleton information set}}, like the case of \cmd{\xtInfosetO}.
+
+\begin{tcblisting}{listing only}
+% \xtCInfosetO : basics
+% syntax:
+ \xtCInfosetO[<bubble opt>](<from>)(<to>){<owner>}[<pos>,<owner opt>](min. height)
+% defaults: connecting two nodes: \xtInfoset(coor1)(coor2)
+ [ rectangle,rounded corners=.5*<minimum height>*<\xtscale>,
+ minimum width=\n1+<minimum height>,minimum height=1em,inner sep=0pt,
+ infoset stlye ] % infoset style = { semithick , densely dotted }
+ (<m>)(<m>){}[](1em)
+\end{tcblisting}
+
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}
+\setistmathTF*011<texttt>
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\xtCInfosetO*(1)(0){imperfect recall}[left]
+\xtCInfosetO(1-1)(2-1){Ben}
+\xtCInfosetO(1-2)(2-2){Cate}
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+The shape of information sets does not depend on the direction of tree growing.
+You also can change the background color and the height, like \xw{(1.5em)} as the last option.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}[font=\scriptsize]
+\setistgrowdirection'{east}
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\xtCInfosetO[fill=blue!20]
+ (1)(0){imperfect recall}[left](.7em)
+\xtCInfosetO[fill=blue!20]
+ (1-1)(2-1){Ben}
+\xtCInfosetO[fill=red!40,opacity=.5]
+ (1-2)(2-2)<1.3>{Cate}(1.5em)
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{Skewed \protect\cmd{\xtCInfosetO}: full function}
+
+Besides the basic functions, the macro \icmd{\xtCInfosetO} has two additional optional arguments to control the shape of a bubble representing a curved information set.
+The two optional arguments are \ixw{plot factor} and \ixw{midpoint factor}. (The meanings are documented on page~\pageref{page:plotfactor}.)
+
+The \xw{plot factor} makes a curved information set higher or lower and is used in angle brackets, like \xw{<1.5>} or \xw{<.7>} (by default \xw{<1.3>}), right after the two mandatory coordinates. The \xw{midpoint factor} controls skewness of a curved information set and is used in between the two mandatory arguments, like \xw{!.35!} (by defaut \xw{!.5!}).
+
+\begin{tcblisting}{listing only}
+% \xtCInfosetO : full definition
+% syntax:
+ \xtCInfosetO[<bubble opt>](<from>)!<midpoint factor>!(<to>)
+ <plot factor>{<owner>}[<pos>,<owner opt>](min. height)
+% defaults: connecting two nodes: \xtInfoset(coor1)(coor2)
+ [ rectangle,rounded corners=.5*<minimum height>*<\xtscale>,
+ minimum width=\n1+<minimum height>,minimum height=1em,
+ semithick,densely dotted,inner sep=0pt ]
+ (<m>)(<m>){}[](1em)
+\end{tcblisting}
+
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \xtCInfosetO: skewed
+\begin{istgame}[font=\scriptsize]
+\istroot(0){Alice}+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(3)(1-1) \istb \istb \endist
+\istroot(4)(1-2) \istb \istb \endist
+\istroot(5)(2-1) \istb \istb \endist
+\istroot(6)(2-2) \istb \istb \endist
+\xtCInfosetO[fill=blue!20]
+ (1)(0){imperfect recall}[left]
+\xtCInfosetO[dashed,blue](1)(2)<.7>{Blue}
+\xtCInfosetO(1-1)!.35!(2-1){Ben}
+\xtCInfosetO[fill=red!40,opacity=.5]
+ (1-2)!.65!(2-2)<1.5>{Cate}
+\end{istgame}
+\end{tcblisting}
+
+
+\xbigskip1
+\remark
+
+\begin{itemize}
+\item When using \cmd{\xtCInfosetO}, the \emph{recommended range} of the \ixw{midpoint factor} is between \xw{.4} and \xw{.6}, at most between \xw{.35} and \xw{.65}, otherwise you might get a result with which you are not satisfied. (You can see below Section~\ref{ssec:extrememidpointfactor} on this issue, only when you are interested in.)
+\item You do not need to bother if the tree is swapped, because the package internally takes care of that instead.
+\item An information set drawn by \cmd{\xtCInfosetO} is appropriately adjusted with \xw{scale}, \xw{xscale}, or \xw{yscale}, but the height (or thickness) is independent of the scale values. (You can see below Section~\ref{ssec:scaleissue} on the issue of scaling, only when you are interested in.)
+\end{itemize}
+
+
+\subsection{Fine-tuning \protect\cmd{\xtCInfosetO}: Not for most users}
+
+\subsubsection{\protect\cmd{\xtCInfosetOTurnX}: too high or too low \xw{midpoint factor}}
+\label{ssec:extrememidpointfactor}
+
+What if you really want to use the \xw{midpoint factor} close to \xw{0} or \xw{1}?
+In this case, you will possibly get some unsatisfactory result as shown in the example below.
+(Note that this being unsatisfied might not happen if you use the \xw{midpoint factor} within the recommended range.)
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Example: \xtCInfoset (to be cured)
+\begin{istgame}[yscale=1.5,font=\scriptsize]
+\xtdistance{10mm}{10mm}
+\istroot(0){Alice}+15mm..15mm+
+ \istb \istb \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\istroot(3)(0-3) \istb \istb \endist
+\istroot(4)(0-4) \istb \istb \endist
+\xtCInfosetO[fill=blue!20]
+ (1)!.2!(3)<1.4>{Ben}
+\xtCInfosetO[fill=red!40,opacity=.5]
+ (2)!.8!(4)<1.5>{Cate}
+\tikzset{tmp/.style={draw,circle,opacity=.5,
+ minimum size=1em}}
+\node at (1) [tmp,blue] {};
+\node at (4) [tmp,red] {};
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+The package provides the macro \icmd{\xtCInfosetOTurnX} to make it straight.
+
+\begin{tcblisting}{listing only}
+% \xtCInfosetOTurnX
+% syntax: X angle is mandatory
+ \xtCInfosetOTurnX {turn X angle}{turn Y angle}
+\end{tcblisting}
+
+First, find the blue circle and the red circle in the above example.
+Let us call by \xw{X} the (blue) circle at the beginning of an information set and by \xw{Y} at the end.
+With \cmd{\xtCInfosetOTurnX} you can turn these circles to get a better result.
+
+\xbigskip1
+In the following example, \cmd{\xtCInfosetOTurnX\{45\}\{0\}} and \cmd{\xtCInfosetOTurnX\{0\}\{-45\}} are used to correct the result. If you omit the second angle like, for example, \cmd{\xtCInfosetOTurnX\{45\}}, it is equivalent to \cmd{\xtCInfosetOTurnX\{45\}\{-45\}}, meaning that it turns the both circles symmetrically.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}[yscale=1.5,font=\scriptsize]
+\xtdistance{10mm}{10mm}
+\istroot(0){Alice}+15mm..15mm+
+ \istb \istb \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\istroot(3)(0-3) \istb \istb \endist
+\istroot(4)(0-4) \istb \istb \endist
+\setxtinfosetlayer{behind}
+\xtCInfosetOTurnX{40}{0}
+\xtCInfosetO[fill=blue!20]
+ (1)!.3!(3)<1.4>{Ben}[left]
+\setxtinfosetlayer{background}
+\xtCInfosetOTurnX{0}{-45}
+\xtCInfosetO[fill=red!40]
+ (2)!.7!(4)<1.5>{Cate}
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark
+\begin{itemize}\tightlist
+\item
+\cmd{\xtCInfosetOTurnX} works just once only for the following \cmd{\xtCInfosetO}, without affecting any other.
+\item
+You can also change the layer of an information set, as shown in the previous example, by using \icmd{\setxtinfosetlayer} (see Secion~\ref{sec:setxtinfosetlayer}).
+\end{itemize}
+
+
+\subsubsection{Scaling information sets according to the value of \TikZ\ \xw{scale}}
+\label{ssec:scaleissue}
+
+The height (or thickness) of bubble type information sets drawn by \cmd{\xtInfosetO} and \cmd{\xtCInfosetO},
+does not depend on the values of \TikZ\ scales.
+What if you want to make them scaled according the value of \TikZ\ symmetric scale, for example, \xw{[scale=.5]}?
+Then use, instead, \xw{[scale=.5,xscale=1]} or equivalently \xw{[yscale=1,scale=.5]} in any order of the options.
+
+\xbigskip1
+Here is an ordinary example of using \xw{[scale=.5]}.
+%, where the heights (or thickness) of bubble type information sets are not affected by the value of \TikZ\ scale.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}[scale=.5]
+\xtdistance{40mm}{30mm}
+\istroot(0)+40mm..40mm+
+ \istb \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\istroot(3)(0-3) \istb \istb \endist
+\xtCInfosetO(0)(0)(2em)
+\xtInfosetO[fill=green](1)(2)[green]
+\xtCInfosetO(1)(3){player}(1.5em)
+\end{istgame}
+\end{tcblisting}
+
+Here is an example to use \xw{[scale=.5,xscale=1]}, where the height (or thickness) of information sets is scaled according to the value of \TikZ\ scale.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+\begin{istgame}[scale=.5,xscale=1]
+\xtdistance{40mm}{30mm}
+\istroot(0)+40mm..40mm+
+ \istb \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\istroot(3)(0-3) \istb \istb \endist
+\xtInfosetO(0)(0)(2em)
+\xtInfosetO[fill=green](1)(2)
+\xtCInfosetO(1)(3){player}(1.5em)
+\end{istgame}
+\end{tcblisting}
+
+
+\xbigskip1
+\remark (\textbf{Not for most users})
+How the \env{istgame} environment works with the \Tikz\ scales, regarding oval type information sets.
+\begin{itemize}\tightlist
+\item
+In the \ipkg{istgame} package, it is intended that the height (or thickness) of any bubble type information set
+is not affected by the values of \TikZ\ scale, unless users change it. (This is a desirable feature.)
+\item
+The shapes of bubble type information sets work perfectly fine, as intended, when:
+ \begin{itemize}
+ \item \ixw{scale} only (not with \ixw{xscale} nor \ixw{yscale}) is used in the environment option list
+ \item and either \xw{xscale} or \xw{yscale} or both (not with \xw{scale}) are used in the option list.
+ \end{itemize}
+\item
+Now, this is how the \env{istgame} environment works when \xw{scale} is used with \xw{xscale} or \xw{yscale}.
+ \begin{itemize}
+ \item When this is the case, the value of \xw{scale} is not taken care of by the package.
+ Only the values of \xw{xscale} and \xw{yscale} are internally extracted and used to compensate the distortion of the shapes of information sets caused by the \emph{\isw{asymmetric scaling}}.
+ \item For example, \xw{[scale=.5]} and \xw{[scale=.5,xscale=1]} are treated as different (with respect to bubble type information sets) by the \env{istgame} environment, while the \env{tikzpicture} environment treats them as equal. With the latter, the \env{istgame} environment does not extract the value of \xw{scale} to use it internally, but does only the value of \xw{xscale}. So \xw{scale} can affect the sizes of bubble type information sets.
+ \item Still, the shapes of bubble type information sets drawn by this package are not distorted by the mixed (even asymmetrical) use of \TikZ\ scales. (In the case of asymmetric scaling, there is one exception for \cmd{\cntmAInfosetO}, which is equipped with an option to cure the distortion. See Section~\ref{sec:cntmAInfosetO} on page~\pageref{sec:cntmAInfosetO} for more details.)
+ \end{itemize}
+%\item
+%You can also try using \icmd{\pgftransformscale} like \verb+\pgftransfromscale{1/\xtscale}+.
+\end{itemize}
+
+\section{Continuum of branches}
+
+\label{sec:cntm}
+
+The package \pkg{istgame} provides the macro \cmd{\istrootcntm} and its several variants (all prefixed by \cmd{\istroot} or \cmd{\istrooto}) to express a \isw{continuum} of branches and an action taken.
+As you will see, all the supplemental macros to a continuum of branches are prefixed by \cmd{\cntm}.
+
+Two types of graphic objects, a triangle type and an arc type, are provided in the package to represent a continuum of branches.
+So you can start by choosing one type of a continuum of branches.
+
+\subsection{\protect\cmd{\istrootcntm}: standard continuum version}
+\label{ssec:istrootcntm}
+
+\subsubsection{\protect\cmd{\istrootcntm}: basics}
+
+The standard version \icmd{\istrootcntm} prints a background triangle, in \xw{black!25} by default, representing a continuum of branches, on the \emph{background layer} by default. It works just like \cmd{\istroot}, for one exception: it controls, by the last two options \verb|+<cntmlevdist>..<cntmsibdist>+|, the distances for only the background triangle, but not the \cmd{\istb}'s following it.
+You can regard \cmd{\istrootcntm} as the sum \cmd{\istroot} \xw{+} \xw{cntm}.
+
+%\xbigskip1
+\begin{tcblisting}{listing only,breakable}
+% \istrootcntm
+% syntax:
+ \istrootcntm[<grow keyval>,<opt>](<coor1>)(<coor2>)[<node style>,<opt>]%
+ <owner label angle>{<owner>}+<cntm-levdist>..<cntm-sibdist>+
+% defaults:
+ [south](<m>)(0,0)[decision node]<above>{}+8mm..24mm+
+% arguments: (coor1) is mandatory, all others are optional arguments
+ [grow] % the direction of growing <default: south>
+ (coor1) % name of the (sub)root: mandatory
+ (coor2) % the (sub)root is at (coor2) <default: (0,0)>
+ [node style] % node style <default: decision node>
+ <angle> % position of owner name <default: above>
+ {owner} % name of the owner of the (sub)root
+ +cntmlevdist..cntmsibdist+ % <defaults: 8mm,24mm>
+\end{tcblisting}
+%\xbigskip1
+
+The background is a isosceles triangle, with the height of \icmd{\cntmlevdist} (\xw{8mm} by default) and the base length of \icmd{\cntmsibdist} (\xw{24mm} by default).
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrootcntm
+\begin{istgame}[scale=1.2]
+\cntmlevdist{10mm}
+\istrootcntm(0){I}
+ \istb{x}[r] \istbm \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The action taken by the owner of the root has the sibling distance (to a missing branch represented by \cmd{\istbm}, if exists) of one third (by default) of the base length of the continuum triangle.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: action sibling distance
+\begin{istgame}[scale=1.2]
+\xtdistance{10mm}{20mm}
+\istrootcntm(0){I}+10mm..20mm+
+ \istb{x}[r] \istb*[dashed,white] \endist
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+You can change the level and sibling distances of an individual continuum triangle by specifying the last two options of the macro \cmd{\istrootcntm} like, for example, \verb|+10mm..15mm+|.
+Note that these options do not affect the action sibling distance.
+
+\xbigskip1
+\remark
+Below we will see the convenient \emph{distance changers} \cmd{\cntmdistance} and \cmd{\cntmdistance*} to change the distances for all types of continua. These macros also have a control on the \emph{\isw{action sibling distance}.}
+
+%The \emph{action sibling distance} can be controlled by the macro \icmd{\cntmactsibdist}. For this distance being \xw{3mm}, you can do like \verb|\cntmactsibdistance{3mm}| or \verb|\cntmactsibdist{2*1.5mm}|.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth,breakable}
+\begin{istgame}[font=\scriptsize]
+\xtdistance{10mm}{20mm}
+\istrootcntm(1){1} % period 1
+ \istb{x}[r] \istbm \endist
+\istroot(A1)(1-1)<[label distance=-3pt]135>{2}
+ \istb{A}[al]{x,1-x} \istb{R}[ar] \endist
+\istrootcntm(2)(A1-2){2}+10mm..15mm+ % period 2
+ \istb{y}[r] \istbm \endist
+\istroot(A2)(2-1)<[label distance=-3pt]135>{1}
+ \istb{A}[al]{1-y,y} \istb{R}[ar] \endist
+\istrootcntm(3)(A2-2){1} % period 3
+ \istb{x}[r] \istbm \endist
+\istroot(A1)(3-1)<[label distance=-3pt]135>{2}
+ \istb{A}[al]{x,1-x} \istb{R}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+\xbigskip1
+\remark
+\begin{itemize}\tightlist
+\item
+Once the work of \cmd{\istrootcntm} is completed by \cmd{\endist}, \cmd{\istrootcntm} internally produces three node coordinates: \xw{(cntm)}, \xw{(cntm-1)}, and \xw{(cntm-2)}.
+\item You can use these coordinates after \cmd{\istrootcntm} and before another \cmd{\istrootcntm} or one of its variant, like \cmd{\istrootcntmA}, is used.
+\end{itemize}
+
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: using coordinates: (cntm),(cntm-1),(cntm-2)
+\begin{istgame}[scale=1.2]
+\istrootcntm(0){I}
+ \istb{x}[r] \istbm \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[bl]{0,0} \endist
+\xtInfosetO(cntm)(cntm)
+\xtInfosetO[draw=none,fill=red,opacity=.3](cntm-1)(cntm-2)
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+\subsubsection*{\protect\cmd{\istrootcntm'}: swap version}
+
+The swap version \icmd{\istrootcntm'} arranges branches clockwise just like \cmd{\istroot'} does.
+With \cmd{\setistgrowdirection'}, both \cmd{\istrootcntm} and its swap version \cmd{\istrootcntm'} end up with the same result.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[scale=1.2]
+\setistgrowdirection'{east}
+\istrootcntm'(0){I}
+ \istb{x}[b] \istbm \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[bl]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+%The continuum level distance (or the height) and the continuum sibling distance (or the width), and the action sibling distance can be all controlled by the macro \cmd{\cntmdistance}, as discussed below in Section~\ref{page:cntmdistance} on page~\pageref{page:cntmdistance}.
+
+
+\subsubsection{\protect\cmd{\cntmdistance}}
+\label{page:cntmdistance}
+
+The macro \icmd{\cntmdistance} working for \cmd{\istrootcntm} (and \cmd{\istrootcntmA}) is analogous to \cmd{\xdistance} working for \cmd{\istroot}.
+As \cmd{\xtdistance} controls the height and width of a simple tree, \cmd{\cntmdistance} controls the height and width of a background triangle representing a continuum, but it has one more function.
+With \icmd{\cntmdistance} you can also control the sibling distance of action branches (\emph{\isw{action sibling distance}})that are taken by the owner of the root.
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% \cntmdistance
+% syntax:
+ \cntmdistance{<cntm levdist>}{<cntm sibdist>}{<action sibdist>}
+% defaults: <cntm levdist> is mandatory, and all others are optional
+ {8mm}{3*<cntm lev dist>}{(1/3)*<cntm sib dist>}
+\end{tcblisting}
+%\xbigskip1
+
+Note that the first argument of \cmd{\cntmdistance} is \emph{mandatory}, and all the others are optional.
+For example, \verb+\cntmdistance{10mm}{20mm}+ means the followings:
+\begin{verbatim}
+ \cntmlevdist = 10mm, \cntmsibdist = 20mm, and
+ \cntmactsibdist = (1/3)*\cntmsibdist, from now on.
+\end{verbatim}
+
+And \verb+\cntmdistance{10mm}{20mm}{3mm}+ means now \cmd{\cntmactsibdist\ = 3mm}.
+
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \cntmdistance
+\begin{istgame}[font=\scriptsize]
+\xtdistance{10mm}{20mm}
+\cntmdistance{10mm}{20mm}{3mm}
+\istrootcntm(1){1} % period 1
+ \istb{x}[r] \istbm \endist
+\istroot(A1)(1-1)<[label distance=-3pt]135>{2}
+ \istb{A}[al]{x,1-x} \istb{R}[ar] \endist
+\istrootcntm(2)(A1-2){2} % period 2
+ \istb{y}[r] \istbm \endist
+\istroot(A2)(2-1)<[label distance=-3pt]135>{1}
+ \istb{A}[al]{1-y,y} \istb{R}[ar] \endist
+\istrootcntm(3)(A2-2){1} % period 3
+ \istb{x}[r] \istbm \endist
+\istroot(A1)(3-1)<[label distance=-3pt]135>{2}
+ \istb{A}[al]{x,1-x} \istb{R}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+
+%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+%% Example:
+%\begin{istgame}[scale=1.2]
+%\cntmdistance{10mm}{3*\cntmlevdist}{1.5*10mm}
+%\istrootcntm(0){I}
+% \istb*{x}[r] \istbm \endist
+%\end{istgame}
+%\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\cntmdistance*}: combined with \protect\cmd{\xtdistance}}
+\label{sec:xtdistance*}
+
+The macro \icmd{\cntmdistance*} incorporates \cmd{\cntmdistance} with \cmd{\xtdistance}.
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% \cntmdistance*
+% syntax:
+ \cntmdistance*{<lev dist>}{<sib dist>}{<action sib dist>}
+% defaults:
+ {15mm}{15mm}{(1/3)*<sib dist>}
+\end{tcblisting}
+%\xbigskip1
+
+The macro \cmd{\cntmdistance} does not have anything to do with \cmd{\xdistance}, but the starred version \cmd{\cntmdistance*} does.
+For example, \cmd{\cntmdistance*\{10mm\}\{20mm\}} means the followings:
+\begin{verbatim}
+ \cntmlevdist = \xtlevdist = 10mm, \cntmsibdist = \xtsibdist = 20mm, and
+ \cntmdistance = (1/3)*\cntmdisdist, from now on.
+\end{verbatim}
+And \cmd{\cntmdistance*\{10mm\}\{20mm\}\{3mm\}} means now \cmd{\cntmactsibdist\ = 3mm}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \cntmdistance*: with \xtdistance
+\begin{istgame}[scale=1.2]
+\cntmdistance*{10mm}{20mm}{3mm}
+\istrootcntm(0){I}
+ \istb{x}[r] \istbm \endist
+%\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+
+
+%%%You can use \cmd{\cntmpreset}, \cmd{\cntmactsibdist}, and \cmd{\cntmdistance} in any order, but whichever comes later overrides the previous effects.
+
+
+\subsubsection{\protect\cmd{\cntmpreset}: controlling continuum triangles}
+\label{ssec:cntmpreset}
+
+The macro \icmd{\cntmpreset} controls the line style and color, size (via the \xw{shrink factor} with \xw{1} as default), and fill color of a continuum triangle drawn by \cmd{\istrootcntm}.
+
+\begin{tcblisting}{listing only}
+% \cntmpreset
+% syntax:
+ \cntmpreset[<line style>,<opts>]{<shrink factor>}[<fill color>]
+% defaults
+ [-,solid,draw=black!25,fill=<draw color>]{1}[]
+\end{tcblisting}
+
+To change the background color you can do like, for example, either \xw{\cntmpreset[blue!20]} or \xw{\cntmpreset\{1\}[blue!20]}.
+However, like \xw{\cntmpreset[blue!20][red!20]}, if you specify both of the bracket optional arguments, then the \emph{first one wins}. The second bracket option is just for your convenience to put \emph{fill color} easily.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{10mm}{20mm}{3mm}
+\istrootcntm(1)
+ \istb \istbm \endist
+\istroot(A1)(1-1)
+ \istb \istb \endist
+\cntmpreset[draw=blue,dashed][red!20]
+\istrootcntm(2)(A1-2)
+ \istb \istbm \endist
+\istroot(A2)(2-1)
+ \istb \istb \endist
+\cntmpreset[blue!20][red!20]
+\istrootcntm(3)(A2-2)
+ \istb \istbm \endist
+\istroot(A1)(3-1)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+
+%% example with labels
+%\xbigskip1
+%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+%\begin{istgame}[font=\scriptsize]
+%\xtdistance{10mm}{20mm}
+%\cntmdistance{10mm}{20mm}{3mm}
+%\istrootcntm(1){1} % period 1
+% \istb{x}[r] \istbm \endist
+%\istroot(A1)(1-1)<[label distance=-3pt]135>{2}
+% \istb{A}[al]{x,1-x} \istb{R}[ar] \endist
+%\cntmpreset[draw=blue,dashed][red!20]
+%\istrootcntm(2)(A1-2){2} % period 2
+% \istb{y}[r] \istbm \endist
+%\istroot(A2)(2-1)<[label distance=-3pt]135>{1}
+% \istb{A}[al]{1-y,y} \istb{R}[ar] \endist
+%\cntmpreset[blue!20][red!20]
+%\istrootcntm(3)(A2-2){1} % period 3
+% \istb{x}[r] \istbm \endist
+%\istroot(A1)(3-1)<[label distance=-3pt]135>{2}
+% \istb{A}[al]{x,1-x} \istb{R}[ar]{0,0} \endist
+%\end{istgame}
+%\end{tcblisting}
+%%\xbigskip1
+
+
+\xbigskip1
+You can also draw a \emph{smaller} triangle, by specifying \ixw{shrink factor} as a decimal number in the curly braces.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{10mm}{20mm}
+\cntmpreset{.7}
+\istrootcntm(1) \istb \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\cntmpreset[draw=blue,dashed]{.8}[red!20]
+\istrootcntm(2)(A1-2) \istb \istbm \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+%\xbigskip1
+
+
+\subsubsection{\protect\cmd{\cntmpreset*}: simple triangles with no background color}
+\label{ssec:cntmpreset*}
+
+The macro \icmd{\cntmpreset*} works like \cmd{\cntmpreset}, for one exception: it prints, by default, a \emph{\isw{simple triangle} with sides drawn, but with no background color}.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% \cntmpreset
+% syntax:
+ \cntmpreset*[<line style>,<opts>]{<shrink factor>}[<fill color>]
+% defaults
+ [-,solid,draw=black,fill=none]{1}[]
+\end{tcblisting}
+\xbigskip1
+
+\remark
+In order to restore the standard triangle options (i.e., \xw{[-,draw=none,black!25]}), you can just declare \cmd{\cntmpreset} followed by nothing. More precisely, if you use \cmd{\cntmpreset} without specifying the first bracket option, like \cmd{\cntmpreset\{.7\}}, the default options are restored.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \cntmpreset(*)
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{10mm}{20mm}
+\cntmpreset*
+\istrootcntm(1)
+ \istb \endist
+\istroot(A1)(1-1)
+ \istb \istb \endist
+\cntmpreset*[fill=blue!20]
+\istrootcntm(2)(A1-2)
+ \istb \endist
+\istroot(A2)(2-1)
+ \istb \istb \endist
+\cntmpreset % restore default triangle options
+\istrootcntm(3)(A2-2)
+ \istb \istbm \endist
+\istroot(A1)(3-1)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+
+You can also draw a \emph{smaller} triangle, by specifying \ixw{shrink factor} as a decimal number in the curly braces.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \cntmpreset(*)
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{10mm}{20mm}
+\cntmpreset*{.5}
+\istrootcntm(1)
+ \istb \endist
+\istroot(A1)(1-1)
+ \istb \istb \endist
+\istrootcntm(2)(A1-2)
+ \istb \endist
+\istroot(A2)(2-1)
+ \istb \istb \endist
+\cntmpreset{.7} % restore default triangle options
+\istrootcntm(3)(A2-2)
+ \istb \istbm \endist
+\istroot(A1)(3-1)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\istrootcntmA}: continuum arc version}
+\label{ssec:istrootcntmA}
+
+\subsubsection{\protect\cmd{\istrootcntmA}: basics}
+\label{ssec:cntmA}
+
+The macro \icmd{\istrootcntmA} works just like \cmd{\istroot}, but it draws an arc to express a continuum of branches. Here \xw{cntmA} is an abbreviation of \xw{cntmarc}.
+You can regard \cmd{\istrootcntmA} as the sum \cmd{\istroot} \xw{+} \xw{cntmA}.
+
+\xbigskip1
+\remark
+\begin{itemize}\tightlist
+\item
+There is one important difference between \cmd{\istroot} and \cmd{\istrootcntmA}. By the last two options (for example, \xw{+10mm..20mm+}), the \cmd{\istrootcntmA} controls the level and sibling distances of a continuum arc, while \cmd{\istroot} controls the level and sibling distances of action branches (represented by the \cmd{\istb}) following it.
+\item
+Note that the distance changers \cmd{\cntmdistance} and \cmd{\cntmdistance*} work the same for \cmd{\istrootcntmA} as well as \cmd{\istrootcntm}. (\emph{There is no such thing as \cmd{\cntmAdistance}}.)
+\end{itemize}
+%\xbigskip1
+
+\begin{tcblisting}{listing only,breakable}
+% \istrootcntmA
+% syntax:
+ \istrootcntmA[<grow keyval>,<opt>](<coor1>)(<coor2>)[<node style>,<opt>]%
+ <arc pos>{<owner>}+<cntm levdist>..<cntm sibdist>+
+% defaults:
+ [south](<m>)(0,0)[decision node]<above>{}+8mm..24mm+
+% arguments: (coor1) is mandatory, all others are optional arguments
+ [grow] % the direction of growing <default: south>
+ (coor1) % name of the (sub)root: mandatory
+ (coor2) % the (sub)root is at (coor2) <default: (0,0)>
+ [node style] % node style <default: decision node>
+ <owner pos> % position of the ownter's name
+ {owner} % name of the owner of the (sub)root
+ +level dist..sibling dist+ % <defaults: 8mm,24mm>
+\end{tcblisting}
+
+The default level and sibling distance of a continuum of branches are \xw{8mm} and \xw{3*8mm}.
+With the default distances, the distance between the root and the lowest point of the arc is one third longer (with all default values) than the continuum level distance.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[scale=1.2]
+\istrootcntmA(0){I} \istb{x}[r] \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\draw [dashed,red]
+ ([xshift=-3mm]cntm-1) -- ([xshift=3mm]cntm-2);
+\coordinate (C) at ($(cntm)!1.333!(0-1)$);
+\draw [dashed,blue] (C-|{-1.5,0}) -- (C-|{1.5,0});
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+With the macro \icmd{\istbA} you can draw a single branch ending up with an endpoint on the continuum arc.
+Just remember \cmd{\istb} always reaches the \emph{red dashed line} and \cmd{\istbA} the \emph{blue dashed line}.
+For more details, see below Section~\ref{ssec:istbAfigure} (though it is not for first readers).
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[scale=1.2]
+\istrootcntmA(0){I}
+ \istbA{x}[r] \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\xtTimeLineH[dashed,blue](0-1){-1.5}{1.5}
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection*{\protect\cmd{\istrootcntmA'}}
+
+The swap version \icmd{\istrootcntmA'} arranges branches clockwise, like \cmd{\istroot'} does.
+Note also that if you use \cmd{\setistgrowdirection'}, then
+using the swap version makes no difference in results.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrootcntmA' (growing east)
+\begin{istgame}[scale=1.2]
+\setistgrowdirection'{east}
+\istrootcntmA'(0){I}
+ \istb<level distance=1.3*\cntmlevdist>{x}[b] \istbm \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[bl]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\istrootcntmA} and \protect\cmd{\istbA}}
+\label{ssec:istbAfigure}
+
+As discussed in Section~\ref{sec:istbA} on page~\pageref{sec:istbA} \cmd{\istb} and \cmd{\istbA} can be used interchangeably (but with one exception).
+However, when it comes to \icmd{\istrootcntmA}, \icmd{\istbA} has a unique function: it reaches a continuum arc.
+
+\begin{center}
+%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrootcntmA
+\begin{istgame}[scale=2.2,font=\scriptsize]
+%\cntmApreset<1.7>
+\istrootcntmA(0)
+ \istb*{\tiny\cmd{\istb}}[left,yshift=-1mm] \istbm \endist
+\istrootcntmA(0)
+ \istbm \istbA{\tiny\cmd{\istbA}}[right,xshift=-1mm,yshift=-1mm] \istbA*{\tiny\cmd{\istbA}}[right,yshift=-1mm]\endist
+\xtdistance{6mm}{12mm}
+\istroot(1)(0-2)
+ \istb \istb \endist
+\draw [dashed,red]
+ ([xshift=-3mm]cntm-1) -- ([xshift=3mm]cntm-2);
+\coordinate (C) at ($(cntm)!1.333!(0-1)$);
+\draw [dashed,blue]
+ (C-|{-1.5,0}) -- (C-|{1.5,0});
+\draw [|<->|,red] (0,0-|-1.5,0) -- ({0-1}-|-1.5,0);
+\draw [|<->|,blue] (0,0-|1.5,0) -- (C-|1.5,0);
+\node at (-1.5,-.2) [left] {\cmd{level distance of \textbackslash istb}};
+\node at (1.5,-.2) [right] {\cmd{\istbA's level distance}};
+\node at (-1.5,-.4) [left] {\cmd{= \textbackslash cntmlevdist}};
+\node at (1.5,-.4) [right] {\cmd{= k*\textbackslash cntmlevdist}};
+\node at (1.5,-.6) [right] {\xw{ (k=1.333 with default values)}};
+\end{istgame}
+%\end{tcblisting}
+\end{center}
+
+To be precise, \cmd{\istbA} reaches the \emph{blue dashed line}, as shown in the above picture, while \cmd{\istb} reaches the \emph{red dashed line}.
+So when \cmd{\istbA} is the only child of the root, it arrives exactly at the continuum arc.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrootcntmA and \istbA
+\begin{istgame}[scale=1.2]
+\istrootcntmA(0)
+ \istbA*
+ \istbA*
+ \istbA*
+ \endist
+\xtTimeLineH[dashed,blue](0-2){-1.5}{1.5}
+\end{istgame}
+\end{tcblisting}
+
+
+Moreover, as also discussed in Section~\ref{sec:istbA} on page~\pageref{sec:istbA}, \cmd{\istbA} has one more function than \cmd{\istb}: it can easily change its level distance by using the first parenthesis option.
+This allows you to make any \cmd{\istbA} reach the continuum arc, but after some trial and errors.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrootcntmA and \istbA
+\begin{istgame}[scale=1.2]
+\istrootcntmA(0)
+ \istbA*(.89) \istbA* \istbA*(.89)
+ \endist
+\istrootcntmA(1)(0-1)
+ \istbA*(.97) \istbA*(.97) \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\cntmApreset}: controlling continuum arcs and wedges}
+
+You can control the line style, position (via \xw{arc position factor}), and \emph{curvature} (via \xw{arc plot factor}) of a continuum arc with \icmd{\cntmApreset}.
+You can also change the background color (by default \xw{transparent}) of the \emph{wedge} formed by a continuum arc.
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% syntax: \cntmApreset
+ \cntmApreset*[<arc line opt>]<arc plot factor>{<arc pos factor>}[<fill color>]
+% defaults: all arguments are optional
+ [-,tension=1]<1.333>{1}[transparent]
+\end{tcblisting}
+\xbigskip1
+
+You can change the line style or the color of a continuum arc, in the usual \TikZ\ way, like \xw{[dashed,thick,blue]}.
+If you do not specify any optional argument, the corresponding argument will have the default values.
+So, by declaring \cmd{\cntmApreset} followed by nothing, you can restore all the default values.
+
+A continuum arc connects the two endpoints, by default, of the two outermost branches.
+If the arc position factor (between zero and one) is less than \verb+{.5}+ the arc gets closer to the root, and if greater then it gets closer to the endpoints.
+(What if the factor is greater than \xw{1}? You try!)
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\cntmdistance*{10mm}{20mm}
+\cntmApreset[dashed,blue,thick]
+\istrootcntmA(1)
+ \istbA \endist
+\istroot(A1)(1-1)
+ \istb \istb \endist
+\cntmApreset[dashed]{.6}
+\istrootcntmA(2)(A1-2)
+ \istb \endist
+\istroot(A2)(2-1)
+ \istb \istb \endist
+\cntmApreset % restore defaults
+\istrootcntmA(3)(A2-2)
+ \istbA \endist
+\istroot(A1)(3-1)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+Note that \cmd{\istbA} (if it is the only child) always prints a branch with its endpoint on an arc .
+Note also that the effect of \icmd{\cntmApreset} goes on until another \cmd{\cntmApreset}, which restores the values to defautls, is used.
+
+
+%\xbigskip1
+As for the curvature, if the factor (usually, greater than 1) typed in angle brackets is smaller than the default value \xw{<1.333>} the arc gets flatter, and if larger it gets sharper. (If the factor is \xw{1}, it becomes a straight line. What if the factor is less than \xw{1}? You guess!)
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\cntmdistance*{10mm}{20mm}
+\cntmApreset<1.2>
+\istrootcntmA(1)
+ \istbA \endist
+\cntmApreset[tension=1.12]<1.508>
+\istrootcntmA(2)(1-1)
+ \istbA \endist
+\cntmApreset<1.7>[green]
+\istrootcntmA(3)(2-1)
+ \istbA* \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+
+In order to change the background color of the wedge formed by an arc, you should use the \emph{second bracket option}.
+The first one is for a continuum arc line.
+The color filled wedge lies on the \xw{behind} layer, by default.
+You can change the \isw{layer} by using \icmd{\cntmAlayerpreset}.
+Available layers are: \xw{background}, \xw{behind}, \xw{main}, \xw{above}, and \xw{foreground}, in that order.
+To restore the default layer (i.e., \xw{behind}), just declare \cmd{\cntmAlayerpreset}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\cntmdistance*{10mm}{20mm}
+\cntmApreset{.5}[blue!20]
+\cntmAlayerpreset{background}
+\istrootcntmA(1) \istbA \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\istrootcntmA(2)(A1-2) \istbA \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\cntmApreset[dashed,blue,thick][red!20]
+\cntmAlayerpreset % restore default (behind)
+\istrootcntmA(3)(A2-2) \istbA \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\xtInfosetO[fill=green](A1)(A3)
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\istrootocntm} and \protect\cmd{\istrootocntmA}: oval continuum versions}
+
+In some cases, you may want to use \icmd{\istrootocntmA}, the oval version of \cmd{\istrootcntmA}.
+It can be regarded as the sum \cmd{\istrooto} \xw{+} \xw{cntmA}. The swap version \icmd{\istrootocntmA'} is also provided.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrooto+cntmA
+\begin{istgame}
+\setistEllipseNodeStyle[white]
+\cntmdistance*{10mm}{20mm}
+\cntmApreset[dashed]
+\istrootocntmA(1){A} \istbA{x}[r] \istbm \endist
+\istrooto(1a)(1-1){B}
+ \istb{Y}[al] \istb{N}[ar] \endist
+\istrootocntmA(2)(1a-2){B} \istbA{y}[r] \istbm \endist
+\istrooto(2a)(2-1){A}
+ \istb{Y}[al] \istb{N}[ar] \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+It is anyway possible to use \icmd{\istrootocntm}, which is the oval version of \cmd{\istrootcntm}.
+It can be regarded as the sum \cmd{\istrooto} \xw{+} \xw{cntm}.
+You can also use its swap version \icmd{\istrootocntm'}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrooto+cntm
+\begin{istgame}
+\cntmdistance*{10mm}{20mm}
+\cntmApreset[dashed]
+\istrootocntm(1){A} \istbA{x}[r] \istbm \endist
+\istrooto(1a)(1-1){B}
+ \istb{Y}[al] \istb{N}[ar] \endist
+\istrootocntm(2)(1a-2){B} \istbA{y}[r] \istbm \endist
+\istrooto(2a)(2-1){A}
+ \istb{Y}[al] \istb{N}[ar] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{Doing some chores: not for most users}
+
+\subsubsection{\protect\cmd{\cntmistb}: controlling outermost branches}
+
+The macro \icmd{\cntmistb} controls the outermost branches of a continuum triangle.
+This works similar to \cmd{\istb}, but you need to use this macro \emph{right before} the \cmd{\istrootcntm}.
+And it works just \emph{once} only for the immediately following \cmd{\istrootcntm} and its close variants, but not for the continuum arc versions.
+
+\xbigskip1
+\remark
+The macro \icmd{\cntmistb*} prints \xw{solid nodes} at the endpoints of the outermost branches.
+\begin{itemize}\tightlist
+\item The effect of printing \xw{solid nodes} affects \emph{all the following continua}.
+It can be \emph{turned off} by the starred version \icmd{\xtHideEndPoints*} (see Section~\ref{ssec:xtShowEndPoints*}, for more details).
+\end{itemize}
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% syntax: \cntmistb
+ \cntmistb[<branch opt>]{<left action label>}[<pos>]{<right action label>}[<pos>]
+% defaults: all arguments are optional
+ [-,draw=none]{}[]{}[]
+\end{tcblisting}
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{10mm}{20mm}{3mm}
+\cntmistb[draw=blue,dashed]{x=0}[l]{x=1}[above,sloped]
+\istrootcntm(1)
+ \istb \istbm \endist
+\istroot(A1)(1-1)
+ \istb \istb \endist
+\cntmistb*[blue]{x=0}[l]{x=1}[above,sloped]
+\istrootcntm(2)(A1-2)
+ \istb \istbm \endist
+\istroot(A2)(2-1)
+ \istb \istb \endist
+\setistmathTF*000{texttt}
+\cntmistb[red,draw=blue,thick]{x=0}[l]{x=1}[above,sloped]
+\istrootcntm(3)(A2-2)
+ \istb \istbm \endist
+\istroot(A1)(3-1)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\cmd{\cntmistb(*)} prints action labels in math mode by default, and the input mode can be changed by \cmd{\setistmathTF(*)}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmpreset*[dashed]{.7}
+\cntmdistance*{10mm}{20mm}{3mm}
+\cntmistb{x=0}[l]{x=1}[above,sloped]
+\istrootcntm(1) \istb \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\cntmistb*[blue]{x=0}[l]{x=1}[above,sloped]
+\istrootcntm(2)(A1-2) \istb \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\setistmathTF*000{texttt}
+\cntmpreset*{.9}[blue!20]
+\cntmistb{x=0}[l]{x=1}[above,sloped]
+\istrootcntm(3)(A2-2) \istb \endist
+\istroot(A1)(3-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\subsubsection{\protect\cmd{\cntmAistb}: controlling outermost branches}
+
+The macro \icmd{\cntmAistb} controls the outermost branches of a continuum arc.
+This works similar to \cmd{\istb}, but you need to use this macro \emph{right before} the \cmd{\istrootcntmA}.
+And it works just \emph{once} only for the immediately following \cmd{\istrootcntmA} and its close variants, but not for the continuum triangle versions.
+
+The macro \icmd{\cntmAistb*} prints \xw{solid nodes} at the endpoints of the outermost branches.
+The effect of printing \xw{solid nodes} affects \emph{all the following continua}.
+It can be \emph{turned off} by the starred version \icmd{\xtHideEndPoints*} (see Section~\ref{ssec:xtShowEndPoints*}, for more details).
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% syntax: \cntmAistb
+ \cntmistb[<branch opt>]{<left action label>}[<pos>]{<right action label>}[<pos>]
+% defaults: all arguments are optional
+ [-]{}[]{}[]
+\end{tcblisting}
+\xbigskip1
+
+Note that \cmd{\cntmAistb} controls outermost branches of a continuum, while \cmd{\cntmApreset} controls the arc line.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{10mm}{20mm}
+\cntmAistb[dotted]{x=0}[above,sloped]{x=1}[above,sloped]
+\cntmApreset[dashed,blue,thick]{.7}
+\istrootcntmA(1) \istbA \endist
+\istroot(A1)(1-1) \istbA \istbA \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+
+\cmd{\cntmAistb(*)} prints action labels in math mode by default, and the input mode can be changed by \cmd{\setistmathTF(*)}.
+
+%\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{10mm}{20mm}
+\cntmAistb[dashed]{x=0}[l]{x=1}[above,sloped]
+\cntmApreset[dashed]{.7}
+\istrootcntmA(1) \istbA \endist
+\istroot(A1)(1-1) \istbA \istbA \endist
+\cntmAistb*[red,draw=black]{x=0}[l]{x=1}[above,sloped]
+\istrootcntmA(2)(A1-2) \istb \endist
+\istroot(A2)(2-1) \istbA \istbA \endist
+\setistmathTF*000{texttt}
+\cntmAistb[draw=blue,thick]{x=0}[l]{x=1}[above,sloped]
+\cntmApreset{.9}[blue!20]
+\istrootcntmA(3)(A2-2) \istbA \endist
+\istroot(A1)(3-1) \istbA \istbA \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+
+It is not impossible to print two endpoints of a continuum arc, even thought it does not make any game theoretical sense. You can easily do that by using \icmd{\cntmAexpostShowEndPoints} right after \cmd{\istrootcntmA}.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmAistb*
+\cntmApreset{.7}
+\istrootcntmA(1) \istbA \endist
+\cntmAexpostShowEndPoints
+\istrootcntmA(A1)(1-1) \istbA* \endist
+\cntmAexpostShowEndPoints[oval node][box node]
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\xtShowEndPoints*}}
+\label{ssec:xtShowEndPoints*}
+
+The starred version \icmd{\xtShowEndPoints*} has additional control over the endpoints of outermost branches of a continuum, when it is used with \cmd{\cntmistb} or \cmd{\cntmAistb}.
+However, the starred versions \cmd{\cntmistb*} and \cmd{\cntmAistb*} do not obey \cmd{\xtShowEndPoints*}.
+They anyway print solid nodes at the endpoints of outermost branches and the effect goes on until it is blocked by \cmd{\xtShowEndPoints*} or \cmd{\xtHidePoints*}.
+
+\cmd{\xtShowEndPoints*} competes with each of the starred versions \cmd{\cntmistb*} and \cmd{\cntmAistb*} for the control over \cmd{\cntmistb} and \cmd{\cntmAistb} with respect to the endpoints of outermost branches.
+Whichever comes later wins.
+
+The starred version \cmd{\xtHideEndPoints*} works \emph{only for the endpoints of the outermost branches} to turn off the effects of \cmd{\xtShowEndPoints(*)}, \cmd{\cntmistb*}, and \cmd{\cntmAistb*}. But whichever comes later wins.
+
+Note that the non-starred versions \cmd{\xtShowEndPoints} and \cmd{\xtHideEndPoints} have nothing to do with the outermost endpoints of a continuum.
+
+\xbigskip1
+In the example below, \cmd{\cntmistb*} overrides the effect of \cmd{\xtShowEndPoint*[oval node]}, with respect to the outermost endpoints of continua.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\cntmdistance*{8mm}{16mm}
+\cntmpreset*
+\xtShowEndPoints*[oval node]
+\cntmistb
+\istrootcntm(1) \istb \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\cntmistb
+\istrootcntm(2)(A1-2) \istb \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\cntmistb*
+\istrootcntm(3)(A2-2) \istb \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\cntmistb
+\istrootcntm(4)(A3-2) \istb \endist
+\istroot(A4)(4-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+
+In the example below, \cmd{\xtHideEndPoints} and \cmd{\xtHidePoints*} cooperatively turn off the effects of \cmd{\xtShowEndPoints*} and \cmd{\cntmAistb}*.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\cntmdistance*{8mm}{16mm}
+\xtShowEndPoints*[oval node]
+\cntmAistb*
+\istrootcntmA(1) \istbA \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\xtShowEndPoints*[box node]
+\cntmAistb
+\istrootcntmA(2)(A1-2) \istbA \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\cntmAistb
+\istrootcntmA(3)(A2-2) \istbA \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\cntmAistb*
+\xtHideEndPoints* % turns off only cntm endpoints
+\xtHideEndPoints
+\istrootcntmA(4)(A3-2) \istbA \endist
+\istroot(A4)(4-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{Information sets for continua of branches}
+
+\subsubsection{Information sets for continuum triangles}
+
+It is not an issue to draw information sets for continuum triangles. You can just apply \cmd{\xtInfoset} or \cmd{\xtInfosetO}.
+%This section is for drawing information sets for continuum arcs.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\cntmdistance*{8mm}
+\cntmpreset{1}[green]
+\istrootcntm(1) \istb \endist
+\xtInfoset([yshift=-1mm]cntm-1)([yshift=-1mm]cntm-2)
+\istroot(A1)(1-1) \istb \istb \endist
+\istrootcntm(2)(A1-2) \istb \endist
+\xtInfosetO[fill=red,opacity=.4](cntm-1)(cntm-2)
+\istroot(A2)(2-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\cntmAInfoset} for continuum arcs}
+
+The macro \icmd{\cntmAInfoset} draws an arc to represent an \isw{information set} for an arc type continuum of branches,
+on the background layer.
+The default position of the arc information set is \xw{1+.1}, meaning that \xw{.1} (by default) is added to the position (\xw{1} by default) of a continuum arc.
+It must be used \emph{right after} the corresponding \cmd{\istrootcntmA} whose root coordinate is its \emph{mandatory argument}. It does not have an option for an information set owner. (If needed, you can use supplementary macros such as \cmd{\xtInfosetOwner} and \cmd{\xtOwner}.)
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% syntax: \cntmAInfoset
+ \cntmAInfoset*[<line opt>](<cntm root>)<plot factor>{<addto cntmApos>}
+% defaults: (<cntm root>) is mandatory
+ [](<m>)<1.333>{.1}
+\end{tcblisting}
+%\xbigskip1
+
+You can change, if necessary, the curvature of an information set arc by using \ixw{plot factor} (\xw{<1.333>} by default).
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \cntmAInfoset
+\begin{istgame}[scale=1.5]
+\istrootcntmA(0)
+ \istbA \endist
+\cntmAInfoset(0)<1.34>
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+%% Example: \istrootcntmA
+%\begin{istgame}[scale=1.2]
+%\istrootcntmA(0){I}
+% \istbA{x}[r] \endist
+%\cntmAInfoset(0)
+%\xtdistance{10mm}{20mm}
+%\istroot(1)(0-1)<120>{II}
+% \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+%\end{istgame}
+%\end{tcblisting}
+
+You can also change the position and the line style of an information set arc, as shown in the following example:
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \cntmAInfoset
+\begin{istgame}[scale=1.5]
+\istrootcntmA(0)
+ \istbA \endist
+\cntmAInfoset[red,dashed,thick](0){-.1}
+\cntmAInfoset(0)
+\cntmAInfoset[blue,dashed,thick](0){.2}
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)
+ \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\subsubsection{\protect\cmd{\cntmAInfosetO}: oval version}
+\label{sec:cntmAInfosetO}
+
+The oval version \icmd{\cntmAInfosetO} enables you to draw a bubble type \isw{information set} for a continuum arc. It must be used right after a simple tree with the root produced by \cmd{\istrootcntmA} and accepts the root of the continuum as the mandatory argument. \cmd{\cntmAInfosetO} can control the style of the information set and height (or thickness), but it does not have an option for the owner of a information set.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% syntax: \cntmAInfosetO
+ \cntmAInfosetO[<line opt>](<cntm root>)
+ <plot factor>{<addto cntmApos>}[<turn X-ang>](<infoset height>)
+% defaults: (<cntm root>) is mandatory
+ [](<m>)<1.333>{.1}[0](1em)
+\end{tcblisting}
+\xbigskip1
+
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[scale=1.2]
+\istrootcntmA(0) \istbA \endist
+\cntmAInfosetO(0)
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+You can change the style of an information set by using usual \TikZ\ options.
+You can also change its position and curvature via \cmd{\cntmApreset}.
+
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[scale=1.2]
+\cntmdistance*{10mm}{20mm}
+\istrootcntmA(0) \istbA \endist
+\cntmAInfosetO[blue,dashed,thick](0)
+\cntmApreset{.6}
+\istrootcntmA(1)(0-1) \istbA \endist
+\cntmAInfosetO[solid,fill=green](1)(.5em)
+\cntmApreset<1.8>{.6}
+\istrootcntmA(2)(1-1) \istbA \endist
+\cntmAInfosetO[fill=blue!20](2)
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+You do not need to bother if a tree is swapped or rotated.
+Note also that the height (or thickness) of information set are not affected by \TikZ\ scaling.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[scale=.8]
+\setistgrowdirection'{east}
+\cntmdistance*{10mm}{20mm}
+\istrootcntmA(0) \istbA \endist
+\cntmAInfosetO[blue,dashed,thick](0)
+\cntmApreset{.6}
+\istrootcntmA(1)(0-1) \istbA \endist
+\cntmAInfosetO[solid,fill=green](1)(.5em)
+\cntmApreset<1.8>{.6}
+\istrootcntmA(2)(1-1) \istbA \endist
+\cntmAInfosetO[fill=blue!20](2)
+\end{istgame}
+\end{tcblisting}
+
+
+\xbigskip1
+If necessary, you can use the \xw{turn X-angle} option to get a better result (see the following Section~\ref{ssec:turnxangles} for this issue).
+
+\subsubsection{Fine-tuning \protect\cmd{\cntmAInfosetO}: Not for most users}
+\label{ssec:turnxangles}
+
+\subsubsection*{turing X circles}
+
+In the case of a severely asymmetrical \TikZ\ scale (using \xw{xsacle} and \xw{yscale} asymmetrically), an information set drawn by \cmd{\cntmAInfosetO} will probably be distorted, as shown in the upper part of the example below.
+The bracket option to be used after the mandatory argument of \cmd{\cntmAInfosetO} can solve this problem by turning the \emph{blue circle} (called, an \xw{X} circle) drawn at the beginning point of the information set.
+To do that, specify an appropriate degree of rotation in brackets, like \cmd{\cntmAInfosetO(2)[60]}, as shown below.
+(See Section~\ref{ssec:extrememidpointfactor} for a related topic.)
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: fine-tunig \cntmAInfosetO
+\begin{istgame}[xscale=4]
+\cntmdistance*{15mm}{10mm}
+\cntmApreset<1.8>
+\istrootcntmA(1) \istbA \endist
+\node at (cntm-1)
+ [draw,circle,blue,opacity=.4,minimum size=1em]{};
+\cntmAInfosetO(1)
+\istrootcntmA(2)(1-1) \istbA \endist
+\cntmAInfosetO(2)[60]
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection*{scaling \cmd{\cntmAInfosetO} according to \TikZ\ scales}
+\label{page:scaleissue-cntm}
+
+The height (or thickness) of an information set drawn by \cmd{\cntmAInfosetO} is not affected by \TikZ\ scales.
+In some cases, you may want to change the height according to the values of \TikZ\ scales.
+
+As discussed in Section~\ref{ssec:scaleissue}, the \env{istgame} environment treats, for example, \xw{[scale=.7]} and \xw{[scale=.7,xscale=1]} as different, while the \env{tikzpicture} environment treats them as equal.
+With the package \pkg{istgame}, if you use \xw{[scale=.7,xscale=1]} then the value of \xw{scale} is not used to keep the height of an oval type information set unchanged, so that you can scale the information set accordingly.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[scale=.7,xscale=1]
+\istrootcntmA(0) \istbA \endist
+\cntmAInfosetO[fill=blue!20](0)
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{Transition from obsolete macros \protect\cmd{\istcntm} and \protect\cmd{\istcntmarc}}
+
+It turned out to be inconvenient to use the two macros \cmd{\istcntm} and \cmd{\istcntmarc} to express a continuum of branches because it requires two steps. Use, instead, a one step method (if you use only default settings) with \cmd{\istrootcntm} and \cmd{\istrootcntmA} that combine the two steps. Anyway, the two \emph{obsolete} macros are provided only for backward compatibility with no maintenance and possible to be removed later.
+
+\paragraph{\protect\cmd{\istcntm}}
+
+The macro \cmd{\istcntm} draws only a background triangle for a continuum of branches.
+And then you can draw an action taken using \cmd{\istroot}.
+
+\begin{tcblisting}{listing only}
+% \istcntm
+% syntax:
+ \istcntm[<grow keyval>](<coor1>)(<coor2>)[<fill color>]+<levdist>..<sibdist>+
+% defaults: [south]()(0,0)[black!25]+8mm..24mm+
+\end{tcblisting}
+
+%\xbigskip1
+
+%Using \cmd{\istroot} with \cmd{\istcntm} draws a representative branch of a continuum of branches.
+%Note, in the following example, that the second branch of \cmd{\istroot} is \xw{missing}\index{missing} to express the representative branch among a continuum of branches. Again, \cmd{\cntmlevdist} is \xw{8mm} by default.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istcntm (obsolete)
+\begin{istgame}[scale=1.2]
+\istcntm(cntm)
+\istroot(0)(cntm){I}+8mm..8mm+
+ \istb{x}[r] \istbm \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The above old way can be switched to the following new way:
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrootcntm (new way)
+\begin{istgame}[scale=1.2]
+\istrootcntm(0){I}
+ \istb{x}[r] \istbm \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+
+%%%\subsubsection*{Changing the size and the color of a continuum of branches}
+%%%
+%%%You can change the height (or the level distance) and the base (or the sibling distance) of the background isosceles triangle by specifying them, for example, like \xw{+10mm..20mm+}.
+%%%
+%%%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+%%%% Example: \istcntm (changing the size)
+%%%\begin{istgame}
+%%%\istcntm(cntm)+10mm..20mm+
+%%%\istroot(0)(cntm){1}+10mm..10mm+
+%%% \istbm \istb{x}[l] \endist
+%%%\end{istgame}
+%%%\end{tcblisting}
+%%%
+%%%Once the distances are type in as options of \cmd{\istcntm}, they internally change the default values, which apply only to the corresponding triangle.
+%%%For example, \xw{+10mm..20mm+} will result in \cmd{\cntmlevdist=10mm} and \cmd{\cntmsibdist=20mm}.
+%%%So you can get exactly the same result as previous one by doing the following:
+%%%
+%%%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+%%%% Example: \istcntm (changing the size)
+%%%\begin{istgame}
+%%%\istcntm(cntm)+10mm..20mm+
+%%%\istroot(0)(cntm){1}+\cntmlevdist..\cntmlevdist+
+%%% \istbm \istb{x}[l] \endist
+%%%\end{istgame}
+%%%\end{tcblisting}
+%%%
+%%%You can change the color of the background triangle by using an option as you can see in the following example:
+%%%
+%%%\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+%%%\begin{istgame}
+%%%\xtdistance{10mm}{20mm}
+%%%\istroot(0){1}
+%%% \istb{A}[al] \istb{B}[ar]{1,1} \endist
+%%%\istcntm(cntm)(0-1)[green]+10mm..20mm+
+%%%\istroot(1)(cntm)<135>{2}+\cntmlevdist..\cntmlevdist+
+%%% \istbm \istb{x}[l] \endist
+%%%\istroot(2)(1-2)<[label distance=-4pt]45>{1}
+%%% \istb{Y}[l]{3-x,x} \istb{N}[r]{0,0} \endist
+%%%\end{istgame}
+%%%\end{tcblisting}
+
+
+\paragraph{\protect\cmd{\istcntmarc} (arc version)}
+
+The macro \cmd{\istcntmarc} is the arc version, which draws a background arc to represent a continuum of branches.
+
+\begin{tcblisting}{listing only}
+% \istcntmarc
+% syntax:
+ \istcntmarc[<grow keyval>](<coor1>)(<coor2>)[<color,opt>]{<num>}+levd..sibd+
+% defaults: [south](<m>)(0,0)[bend right]{.5}+8mm..24mm+
+\end{tcblisting}
+
+%The option \xw{<num>} (\xw{0.5} by default) specifies
+%the convex combination of the root and each of the background child nodes.
+%The smaller \xw{<num>} is, the closer is the connecting arc to the root.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istcntmarc (obsolete)
+\begin{istgame}[scale=1.2]
+\istcntmarc(cntm)[green]
+\istroot(0)(cntm){I}+8mm..8mm+
+ \istb{x}[r] \istbm \endist
+\xtdistance{10mm}{18mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The above old way can be switched to the following new way.
+One difference is that the position of a continuum arc is now \xw{1} by default, while it was \xw{.5}.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \istrootcntmA (new way)
+\begin{istgame}[scale=1.2]
+\cntmApreset<1.44>{.5}[green]
+\istrootcntmA(0){I}
+ \istb{x}[r] \istbm \endist
+\xtdistance{10mm}{18mm}
+\istroot(1)(0-1)<[label distance=-3pt]120>{II}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar]{0,0} \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\section{Arrows}
+\label{sec:arrows}
+
+\subsection{Using \TikZ\ arrow options with \env{istgame}}
+
+
+\subsubsection{\TikZ\ arrow option \xw{->}}
+
+The simplest way of printing \isw{arrow}s in \emph{a whole game tree} is to use the \Tikz\ option \xw{->} as an option for the \env{istgame} environment. To get the best result, you may want to use \cmd{\xtShowEndPoints} together with the option \xw{->}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: arrows
+\begin{istgame}[->,scale=.8]
+\istroot(0)+15mm..30mm+ \istb \istb \endist
+\xtShowEndPoints
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\istroot(3)(1-2) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+For an arrow on an individual branch, you can use arrow options with each \cmd{\istb}.
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: arrows
+\begin{istgame}[scale=.8]
+\istroot(0)+15mm..30mm+ \istb[->] \istb \endist
+\xtShowEndPoints
+\istroot(1)(0-1) \istb[->] \istb \endist
+\xtHideEndPoints
+\istroot(2)(0-2) \istb[-|<>|] \istb[->o>>>o>] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{Fine-tuning with \protect\cmd{\setistgameshorten}: Not for most users}
+\label{sec:setistgamearrowendshorten}
+Assuming that you do not want the terminal points to be shown, in order to get the best result of arrows you can use the macro \icmd{\setistgameshorten},
+like \cmd{\setistgameshorten\{1.3pt\}}, right \emph{before} the \env{istgame} environment.
+Note that \cmd{\setistgameshorten} has a global effect. So, when necessary, you should use the macro within a TeX group.
+
+\xbigskip1
+\remark (not for most users)
+\begin{itemize}\tightlist
+\item Internally, the \env{istgame} environment checks the existence of the option \xw{->} and automatically adds \xw{shorten >=<keyval>} (by default, \xw{0pt}) to the option list as the first entry together with \xw{->}.
+\item You can do the same thing, without using this macro, by manually adding, for example, \xw{[->,shorten >=1.3pt]} to the list of options.
+\end{itemize}
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \setistgameshorten
+\setistgameshorten{1.3pt} % use in a TeX group
+\begin{istgame}[->,scale=.8]
+%\xtShowEndPoints
+\istroot(0)+15mm..30mm+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\istroot(3)(1-2) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+You should also be aware that, in \Tikz, the options \xw{shorten} and \xw{->} affect any lines or curves in the current environment.
+
+
+\subsection{Middle arrows for a branch}
+\label{sec:showmidarrows}
+
+\index{middle arrow}
+With \cmd{\istb}, you can print an arrow tip in the middle of \emph{a branch} by using a new \emph{controllable} arrow tip style \ixttw{->-},
+like \xw{\istb[->-]}.
+
+\subsubsection{A middle arrow for each \protect\cmd{\istb}}
+
+To print an arrow tip in the middle of a branch, you can use \xw{->-} as an option for \cmd{\istb}.
+The \emph{controllable} middle arrow style \xw{->-} takes one optional value, which is a number between 0 and 1 (by default \xw{->-=.55}) determining a relative position from a parent node to a child node, where the end of an arrow tip is placed.
+For example, \xw{\istb[->-=0.1]} prints an arrow tip near the parent node, and \xw{\istb[->-=0.9]} near the child node.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: new style: middle arrow tip
+\begin{istgame}[scale=.8]
+\istroot(0)+15mm..30mm+
+ \istb[->-] \istb[->-] \endist
+\istroot(1)(0-1)
+ \istb[->-=.3] \istb[->-=.9] \endist
+\istroot(2)(0-2)
+ \istb[->-=.7,draw=blue] \istb[->-=.2,draw=red] \endist
+\istroot(3)(1-2)
+ \istb \istb[->-=1] \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark issues on middle arrows with \cmd{\istB}:
+\begin{itemize}\tightlist
+\item Middle arrows work well with \cmd{\istb}, but the exact position of a middle arrow tip does NOT work very well with \cmd{\istB}.
+\item So, if you want to print dual labels for branches with middle arrows, it is recommended to use \cmd{\istb} together with \cmd{\xtActionLabel}, instead of \cmd{\istB} (see also page~\pageref{page:noistB}).
+\end{itemize}
+
+Except for \cmd{\istB}, all the other variants of \cmd{\istb} including \cmd{\istbA}, \cmd{\cntmistb}, and \cmd{\cntmAistb} work well with the middle arrow option \xw{->-}.
+
+
+\subsubsection{Middle arrow tip styles}
+
+
+The package also provides additional styles for middle arrow tips, which have a \emph{fixed} position and shape.
+(Note that the \ixw{single arrow tip} \xw{->-} is \emph{controllable}.)
+
+\xbigskip1
+
+ Additional \ixw{middle arrow tip style}\xw{s}:
+\begin{itemize}\tightlist
+\item \ixttw{->>-} : \ixw{double arrow tip} in the middle of a branch at the position of \xw{.6}
+\item \ixttw{->>>-} : \ixw{triple arrow tip} in the middle of a branch at the position of \xw{.65}
+\item \ixttw{-o-} : \ixw{circle arrow tip} in the middle of a branch at the position of \xw{.55}
+\item \ixttw{-x-} : \ixw{cross arrow tip} in the middle of a branch at the position of \xw{.5}
+\end{itemize}
+
+\remark
+All the middle arrow tips are printed in black, by default.
+Their color can be changed by \cmd{\setxtarrowtips} (see the following Section~\ref{ssec:setxtarrowtips}).
+\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[xscale=.8]
+\istroot(0)+15mm..30mm+
+ \istb[->>-] \istb[->>>-,red] \endist
+\istroot(1)(0-1)
+ \istb[-o-,red] \istb[-x-,blue] \endist
+\setxtarrowtips[blue,thick]
+\istroot(2)(0-2)
+ \istb[-o-] \istb[-x-] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\setxtarrowtips}: controlling middle arrow tips via \xw{->-}}
+\label{ssec:setxtarrowtips}
+
+The macro \icmd{\setxtarrowtips} controls the position and shape of a middle arrow tip,
+but only works through the \emph{controllable} middle arrow style \xw{->-}, not the other \emph{fixed} arrow styles.
+However, it controls the color of \emph{all} the middle arrow tips. The effect of change by this macro continues until the end of the current environment unless it is changed again. To restore the default values, just declare \cmd{\setxtarrowtips} followed by nothing.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% \setxtarrowtips
+% syntax: all arguments are optional
+ \setxtarrowtips<midarrow tip pos>{<arrow shape>}[<arrow opt>]
+% defaults: <.55>{>}[black,-,thin,solid,shorten >=0pt]
+\end{tcblisting}
+%\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \setxtarrowtips
+\begin{istgame}[scale=1]
+\setxtarrowtips<.9>{>>}[blue,thick]
+\istroot(0)+15mm..25mm+
+ \istb[->-] \istb[->-] \endist
+\istroot(1)(0-1)
+ \istb[->-=.5] \istb[->-=.3] \endist
+\setxtarrowtips<.9>{<*|o|>}[blue,thick,opacity=.4]
+\istroot(2)(0-2)
+ \istb[->-,green] \istb[->-,red] \endist
+\setxtarrowtips<.7>
+\istroot(3)(1-2) \istb \istb[->-] \endist
+\istroot(4)(2-2) \istb[-o-] \istb[-x-] \endist
+\end{istgame}
+\end{tcblisting}
+
+Note that, as seen in the example above, the position set individually by an option value of \cmd{\istb}, like \cmd{\istb[->-=.3]},
+wins the position set by \cmd{\setxtarrowtips<.9>}.
+
+
+\subsection{Middle arrow for simple tress}
+
+\subsubsection{\protect\cmd{\xtShowMidArrows} and \protect\cmd{\xtHideMidArrows}}
+
+The macro \icmd{\xtShowMidArrows} prints \emph{middle arrows} (a single arrow tip, by default) for \emph{all the branches} of a \emph{simple tree} (but not for a separate branch).
+The effect of \cmd{\xtShowMidArrows} continues until it is changed by another \cmd{\xtShowMidArrows} or blocked by \icmd{\xtHideMidArrows}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtShowMidArrows, \xtHideMidArrows
+\begin{istgame}
+\xtShowMidArrows
+\istroot(0)+15mm..30mm+ \istb[blue] \istb[red] \endist
+\xtHideMidArrows
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtShowMidArrows
+\istroot(3)(1-2) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+
+\remark
+\begin{itemize}\firmlist
+\item \cmd{\xtShowMidArrows} works for all branches of simple trees.
+\item The middle arrow option styles work separately only for \cmd{\istb}'s having them and \cmd{\setxtarrowtips} works only for \cmd{\istb}'s having the option \xw{->-}.
+\item Since the middle arrow tip styles and \cmd{\xtShowMidArrows} work completely independently, if you use both of them, they are all printed.
+\item Note also that \cmd{\xtHideMidArrows} removes only the effect of \cmd{\xtShowMidArrows}.
+\end{itemize}
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtShowMidArrows, \xtHideMidArrows
+\begin{istgame}
+\setxtarrowtips<.3>{*}[red]
+\xtShowMidArrows
+\istroot(0)+15mm..30mm+ \istb[blue] \istb[red] \endist
+\xtHideMidArrows
+\istroot(1)(0-1) \istb[->-] \istb[-o-] \endist
+\istroot(2)(0-2) \istb \istb \endist
+\xtShowMidArrows
+\istroot(3)(1-2) \istb[->-] \istb[-o-] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\setxtshowmidarrows}: controlling \protect\cmd{\xtShowMidArrows}}
+
+The macro \icmd{\setxtshowmidarrows},
+you can control the position, color, style, and shape of middle arrow tips, to be drawn by \cmd{\xtShowMidArrows}.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% \setxtshowmidarrows
+% syntax:
+ \setxtshomidwarrows<midarrow tip relative pos>{<arrow shape>}[<arrow opt>]
+% defaults: <.55>{>}[black]
+\end{tcblisting}
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \setxtshowmidarrows
+\begin{istgame}
+\xtShowMidArrows
+\istroot(0)+15mm..30mm+
+ \istb \istb \endist
+\xtHideMidArrows
+\istroot(1)(0-1) \istb \istb \endist
+\xtShowMidArrows
+\setxtshowmidarrows<.8>{>>>}[red,thick]
+\istroot(2)(0-2) \istb \istb \endist
+\setxtshowmidarrows<1>
+\istroot(3)(1-2) \istb \istb \endist
+%----- Remark ---------------------------------------
+%\draw ([yshift=-5pt]2-1) -- ([yshift=-5pt]2-2); % NO!
+\coordinate (A) at ([yshift=-5pt]2-1);
+\coordinate (B) at ([yshift=-5pt]2-2);
+\draw [|-|] (A) -- (B);
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark issues in adding other graphic objects (not for most users)
+\label{page:showarrows}
+\begin{itemize}%\tightlist
+\item As you can see in the above example, when \cmd{\xtShowMidArrows} is used, you should redefine coordinates for endpoints before you use them for other graphic objects.
+\item This is because, in \Tikz, \xw{shift} or \xw{scope} does not work in this case. So, alternatively, you can use \verb+\draw [transform canvas={yshift=-5pt}] (2-1) -- (2-2);+ (See \TikZ\ manual about \xw{transform canvas}).
+\item \cmd{\xtShowArrows} does not affect the \Tikz\ absolute coordinates.
+\end{itemize}
+
+
+\subsection{Arrows for simple trees}
+
+\subsubsection{\protect\cmd{\xtShowArrows} and \protect\cmd{\xtHideArrows}}
+
+In many cases you might not need to care about the position of arrow tips, just wanting to put them at the ends of branches for simple trees. For this purpose, the macro \cmd{\xtShowArrows} (accepting one bracket option for a node style) is provided.
+
+\icmd{\xtShowArrows}, internally, calls \cmd{\xtShowEndPoints} (with \xw{solid node}, by default) first and then prints arrows in order to produce the best result of showing arrows.
+So, for example, \cmd{\xtShowArrows[oval node]} is equivalent to \cmd{\xtShowEndPoints[oval node]} followed by printing of arrows (in black by default).
+
+The macro \icmd{\xtHideArrows} turns off all the effect of \cmd{\xtShowArrows}, while \icmd{\xtHideArrows*} has the endpoints remained. (\cmd{\xtShowArrows} does not have its starred version.)
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtShowArrows, \xtHideArrows
+\begin{istgame}
+\xtShowArrows
+\istroot(0)+15mm..30mm+ \istb[blue] \istb[red] \endist
+\xtHideArrows
+\istroot(1)(0-1) \istb{a} \istb \endist
+\xtHideArrows* % endpoints remain
+\istroot(2)(0-2) \istb{b} \istb \endist
+\xtShowArrows[oval node]
+\istroot(3)(1-2) \istb{c} \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark issues in adding other graphic objects (not for most users)
+\begin{itemize}\tightlist
+\item Like \cmd{\xtShowMidArrows}, when \cmd{\xtShowArrows} is used, you should redefine coordinates for endpoints before you use them for other graphic objects, or use \xw{transform canvas}.
+\end{itemize}
+
+
+\subsubsection{\protect\cmd{\setxtshowarrows}: controlling \protect\cmd{\xtShowArrows}}
+
+The macro \icmd{\setxtshowarrows} controls the color and shape of arrow tips.
+You can even change the position of arrow tips by specifying the distance (\xw{1.2pt} by default) from the endpoint as the last parenthesis optional argument, like \xw{(5pt)}.
+
+\xbigskip1
+\begin{tcblisting}{listing only}
+% \setxtshowarrows
+% syntax:
+ \setxtshowarrows[<arrow opt>]{<arrow shape>}(<arrow end shorten dim>)
+% defaults: []{>}(1.2pt)
+\end{tcblisting}
+\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+% Example: \xtShowArrows, \xtHideArrows
+\begin{istgame}
+\setxtshowarrows{<|o|>}[blue,thick](5pt)
+\xtShowArrows
+\istroot(0)+15mm..30mm+ \istb[blue] \istb[red] \endist
+\xtHideArrows
+\istroot(1)(0-1) \istb{a} \istb \endist
+\xtHideArrows* % endpoints remain
+\istroot(2)(0-2) \istb{b} \istb \endist
+\xtShowArrows[oval node]
+\istroot(3)(1-2) \istb{c} \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{Arrows and continua of branches: examples (Not for most users)}
+
+There is nothing special in using arrow tips in game trees having continua of branches.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\xtdistance{10mm}{20mm}
+\xtShowArrows
+\istrootcntm(0)(0,0){1} \istb{x}[r] \istbm \endist
+\istroot(1)(0-1)<[label distance=-3pt]120>{2}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar] \endist
+\istrootcntm(2)(1-2){2} \istb{y}[r] \istbm \endist
+\istroot(3)(2-1)<[label distance=-3pt]120>{1}
+ \istb[]{Y}[al]{1-y,y} \istb{N}[ar] \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+It is not impossible to put arrow tips on the outermost branches of a continuum.
+To do that, you can use \cmd{\cntmistb(*)} and \cmd{\cntmAistb(*)} together with the middle arrow tip styles and \cmd{\setxtarrowtips}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\xtdistance{10mm}{20mm}
+\xtShowArrows
+\setxtarrowtips<.97>
+\cntmistb*[->-,draw]
+\istrootcntm(0)(0,0){1} \istb{x}[r] \istbm \endist
+\istroot(1)(0-1)<[label distance=-3pt]120>{2}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar] \endist
+\cntmistb*[->-,draw]
+\istrootcntm(2)(1-2){2} \istb{y}[r] \istbm \endist
+\istroot(3)(2-1)<120>{1}
+ \istb[]{Y}[al]{1-y,y} \istb{N}[ar] \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+Here is one more example.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}
+\cntmdistance*{8mm}{16mm}
+\xtShowArrows
+\xtShowEndPoints*[oval node]
+\setxtarrowtips<.93>{>>}[red,thick]
+\cntmAistb[->-]
+\istrootcntmA(1) \istbA[-x-] \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\cntmAistb[->-]
+\istrootcntmA(2)(A1-2) \istbA[-o-] \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\setxtarrowtips<.93>
+\cntmAistb[->-]
+\istrootcntmA(3)(A2-2) \istbA[-x-] \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\cntmAistb[->-]
+\istrootcntmA(4)(A3-2) \istbA[-o-] \endist
+\istroot(A4)(4-1) \istb \istb \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\section{Supplementary macros}
+
+\label{sec:suppmac}
+
+\subsection{Supplementary macros to important labels}
+
+\label{ssec:suppmac}
+
+The \pkg{istgame} package also provides some supplementary macros to important labels: players, action labels, and payoffs. The supplementary macros work outside of simple trees.
+%And the abbreviations of the position of labels are available for these supplemental macros.
+
+\begin{description}\tightlist
+\item \icmd{\xtOwner} puts the owner of a node (or a player), in text mode
+\item \icmd{\xtOwner}* puts an owner in the input mode as set by \cmd{\setistmathTF(*)}\par
+ syntax: \xw{\xtOwner(<coor>)\{<owner>\}[<pos>,<node opt>]}\par
+ defaults: \verb+(<m>){}[above]+\par
+ (abbreviations for \xw{<pos>} available)
+
+\item \icmd{\xtActionLabel} puts an action label to a branch, in math mode
+\item \icmd{\xtActionLabel*} puts an owner in the input mode as set by \cmd{\setistmathTF(*)}\par
+ syntax: \xw{\xtActionLabel[<opt>](<from>)(<to>)\{<action>\}[<pos>,<node opt>]}\par
+ defaults: \verb+[-,draw=none](<m>)(<m>){}[black,text depth=.25ex]+\par
+ (abbreviations for \xw{<pos>} available)
+
+\item \icmd{\xtPayoff} puts payoffs, in math mode
+\item \icmd{\xtPayoff*} puts payoffs in the input mode as set by \cmd{\setistmathTF(*)}\par
+ syntax: \xw{\xtPayoff(<coor>)\{<payoff>\}[<pos>,<node opt>]}\par
+ defaults: \verb+(<m>){}[inner sep=0pt,outer sep=4pt,text depth=.25ex]+\par
+ (abbreviations for \xw{<pos>} available)
+
+\item \icmd{\xtInfosetOwner} puts the owner of an information set, in text mode
+\item \icmd{\xtInfosetOwner*} puts an information set owner in the input mode as set by \cmd{\setistmathTF(*)}\par
+ syntax: \xw{\xtInfosetOwner(<from>)(<to>)\{<owner>\}[<pos>,<node opt>]}\par
+ defaults: \verb+(<m>)(<m>){}[]+\par
+ (abbreviations for \xw{<pos>} available)
+
+\item \icmd{\xtNode} puts `something,' say an owner, into a node\par
+ syntax: \xw{\xtNode[<opt>](<coor>)[<node style>,<node opt>]\{<node text>\}}\par
+ defaults: \verb+[-](<m>)[solid node]{}+
+
+\item \icmd{\xtNode*} puts `something' into a \ixw{plain node}\par
+ syntax: \xw{\xtNode*(<coor>)[<node style>,<node opt>]\{<node text>\}}\par
+ defaults: \verb+(<m>)[plain node]{}+
+\end{description}
+
+%\xbigskip1
+The supplementary macros depend on the coordinates defined
+in the sequence of \cmd{\istroot}--\cmd{\istb}--\cmd{\endist}
+and print their corresponding objects on or around the specified coordinates.
+So, in the above supplementary macros, all the coordinates such as \xw{(<from>)}, \xw{(<to>)},
+and \xw{(<coor>)} are mandatory arguments, denoted by \xw{<m>}.
+
+\xbigskip1
+\begin{tcblisting}{}
+\begin{istgame}[scale=1.5]
+\istroot(0)[chance node]
+ \istb[dashed]{A} \istb*
+ \istb*[blue,very thick]{B}[right,xshift=2pt,yshift=2pt,red] \endist
+\xtInfosetO(0)(0)
+\xtInfoset[thick](0-1)(0-2){1}
+\xtInfosetO[thick,red,rounded corners=.5em](0-2)(0-3){2}
+\xtInfoset[dashed,bend right=25](0-1)(0-3)
+%-----------------
+\xtActionLabel(0)(0-3){1-\epsilon}[below,sloped] % action label in math mode
+\xtInfosetOwner(0-1)(0-3){3}[xshift=-25pt,yshift=-25pt]
+\xtOwner(0){Nash}[xshift=-5pt,left]
+\xtPayoff(0-3){(u_1,u_2)}[right,xshift=5pt] % payoffs in math mode
+\xtNode[dotted](0-1)[box node,fill=blue!20]{Smith}
+%-----------------
+\istroot[east](a)(0)[chance node] \istb \endist
+\xtNode*(a-1){text}
+\end{istgame}
+\end{tcblisting}
+
+
+To specify the \xw{[<pos>]} option for the above supplementary macros (other than \cmd{\xtNode}),
+you can use the \isw{abbreviations}
+\xw{[l]}, \xw{[r]}, \xw{[a]}, \xw{[b]}, \xw{[al]}, \xw{[ar]}, \xw{[bl]}, and \xw{[br]}.
+Each of these abbreviations works only when used alone without any other option keys in the option list.
+For example, the option \xw{[b]} or \xw{[below]} or \xw{[below,xshift=5pt]} works, but \xw{[b,xshift=5pt]} does not, producing a compile error.
+
+\subsection{More supplementary macros}
+
+\subsubsection{\protect\cmd{\xtTimeLineH} and \protect\cmd{\xtTimeLineV}}
+
+With the macro \icmd{\xtTimeLineH}, you can draw a horizontal time-line.
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% \xtTimeLineH (same logic for \xtTimeLineV)
+% syntax: %% if tree swapped, the following means -<from> -<to>
+ \xtTimeLineH[<opt>](<coor>){<from>}{<to>}{<label>}[<pos>,<opt>]
+% defaults:
+ [-,dotted,shorten <=0pt,shorten >=0pt](<m>){}{}[right]
+\end{tcblisting}
+
+For example, \verb+\xtTimeLineH(coor){-1.5}{3}+ draws a dotted (by default) horizontal time-line going through \xw{(coor)} from \xw{-1.5cm} to \xw{3cm} with a label on the \xw{right} (by default).
+Recall that, by default, the root of a tree is located at \xw{(0,0)}. The two numbers determine the $x$-coordinates of a time-line.
+To change the position of the label, you can use the abbreviations, like \xw{[a]} or \xw{[ar]}.
+
+The swap version \icmd{\xtTimeLineH'} simply puts the label on the other end of a time-line, \xw{left} by default.
+That's the only difference to the normal version, \cmd{\xtTimeLineH}.
+
+%\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: \xtTimeLineH('): not swapped
+\begin{istgame}[font=\scriptsize]
+\setistgrowdirection{south} % default
+\xtdistance{10mm}{20mm}
+\istrootcntm(1) \istb \istbm \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\istrootcntm(2)(A1-2) \istb \istbm \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\istrootcntm(3)(A2-2) \istb \istbm \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\xtTimeLineH[->](1){-1.5}{3}{period 1}
+\xtTimeLineH(2){-1.5}{3}{period 2}
+\xtTimeLineH'(3){-1.5}{3}{period 3}
+\end{istgame}
+\end{tcblisting}
+
+
+\xbigskip1
+
+\remark
+The direction to which a time-line goes depends on whether a tree is swapped or not.
+\index{clockwise} \index{counterclockwise}
+\begin{itemize}\tightlist
+\item If branches are arranged \xw{counterclockwise} (by default), a time-line goes \emph{from left to right} or \emph{from below to above}. As to \cmd{\xtTimeLineH}, we take this as a standard case: \emph{left to right}.
+\item If a tree is \emph{swapped}, so the branches are arranged \xw{clockwise}, \cmd{\xtTimeLineH} draws a line going to the opposite direction: \emph{from right to left} (for trees growing southwards). So, if a tree is swapped by \icmd{\setistgrowdirection}\xw{'}, for example, \verb+\xtTimeLine(coor){-1.5}{3}+ draws a time-line going the to the opposite direction: from \xw{1.5cm} to \xw{-3cm}.
+\end{itemize}
+
+The following codes are the same as the above, except that the tree is swapped.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: \xtTimeLineH: swapped
+\begin{istgame}[font=\scriptsize]
+\setistgrowdirection'{south} % clockwise
+\xtdistance{10mm}{20mm}
+\istrootcntm(1) \istb \istbm \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\istrootcntm(2)(A1-2) \istb \istbm \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\istrootcntm(3)(A2-2) \istb \istbm \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\xtTimeLineH[->](1){-1.5}{3}{period 1}
+\xtTimeLineH(2){-1.5}{3}{period 2}
+\xtTimeLineH'(3){-1.5}{3}{period 3}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+With the macro \icmd{\xtTimeLineV}, you can draw a vertical time-line with a label on the top right, by default.
+As to \cmd{\xtTimeLineV}, we take a time-line going \emph{from above to below} as a standard case, because it is natural.
+So, if a tree grows eastwards, the \emph{swapped tree} (arranging branches \emph{from above to below}) is taken as a standard case for \cmd{\xtTimeLineV}.
+
+The swap version \icmd{\xtTimeLineV'} simply puts the label on the other side of a time-line.
+That's the only difference to the normal version, \cmd{\xtTimeLineV}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: \xtTimeLineV('): swapped
+\begin{istgame}[font=\scriptsize]
+\setistgrowdirection'{east} % clockwise
+\xtdistance{10mm}{20mm}
+\istrootcntm(1) \istb \istbm \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\istrootcntm(2)(A1-2) \istb \istbm \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\istrootcntm(3)(A2-2) \istb \istbm \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\xtTimeLineV[->](1){1.5}{-3}{period 1}
+\xtTimeLineV(2){1.5}{-3}{period 2}
+\xtTimeLineV'(3){1.5}{-3}{period 3}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The following codes are the same as the above, except that the tree is \emph{not} swapped.
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+\begin{istgame}[font=\scriptsize]
+\setistgrowdirection{east} % counterclockwise
+\xtdistance{10mm}{20mm}
+\istrootcntm(1) \istb \istbm \endist
+\istroot(A1)(1-1) \istb \istb \endist
+\istrootcntm(2)(A1-2) \istb \istbm \endist
+\istroot(A2)(2-1) \istb \istb \endist
+\istrootcntm(3)(A2-2) \istb \istbm \endist
+\istroot(A3)(3-1) \istb \istb \endist
+\xtTimeLineV[->](1){1.5}{-3}{period 1}
+\xtTimeLineV(2){1.5}{-3}{period 2}
+\xtTimeLineV'(3){1.5}{-3}{period 3}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+In the example above, since the tree is not swapped, \verb+\xtTimeLineV(coor){1.5}{-3}+ draws a vertical time-line going to the opposite direction: from \xw{-1.5cm} to \xw{3cm}.
+
+%Here is one more example of using \cmd{\xtTimeLineH}.
+%
+%\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+%% Example: \xtTimeLineH
+%\begin{istgame}[font=\scriptsize]
+%\xtShowMidArrows
+%\xtdistance{10mm}{20mm}
+%\istrootcntm(1){1} % period 1
+% \istb{x}[r] \istbm \endist
+%\istroot(A1)(1-1)
+% <[label distance=-3pt]135>{2}
+% \istb{A}[al]{x,1-x} \istb{R}[ar] \endist
+%\istrootcntm(2)(A1-2){2} % period 2
+% \istb{y}[r] \istbm \endist
+%\istroot(A2)(2-1)
+% <[label distance=-3pt]135>{1}
+% \istb{A}[al]{1-y,y} \istb{R}[ar] \endist
+%\istrootcntm(3)(A2-2){1} % period 3
+% \istb{x}[r] \istbm \endist
+%\istroot(A3)(3-1)
+% <[label distance=-3pt]135>{2}
+% \istb{A}[al]{x,1-x}\istb{R}[ar]{0,0}\endist
+%\xtTimeLineH[draw=none](1){-2}{3}{period 1}[l]
+%\xtTimeLineH[draw=none](2){-2}{3}{period 2}
+%\xtTimeLineH[draw=none](3){-2}{3}{period 3}
+%\xtTimeLineH[draw=none](A2-1){2.5}{-2.5}
+% {$\left(\makecell{\delta\\\delta}
+% \right)\cdots$}[yshift=-.8em]
+%\xtTimeLineH[draw=none](A3-1){2.5}{-2.5}
+% {$\left(\makecell{\delta^2\\\delta^2}
+% \right)\cdots$}[yshift=-.8em]
+%\end{istgame}
+%\end{tcblisting}
+%\xbigskip1
+
+
+\subsubsection{\protect\cmd{\xtCommentTo} and \protect\cmd{\xtCommentFrom}}
+
+With the macro \icmd{\xtCommentTo}, you can attach a comment to a node from a coordinate \emph{relative} to the node with a densely dotted arrow line (by default).
+Note that with \cmd{\xtCommentTo} you need to specify a \emph{target absolute} coordinate followed by a \emph{start \textbf{relative}} coordinate.
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% \xtCommentTo
+% syntax:
+ \xtCommentTo[<line opt>](<absolute to-coor>)(<relative from-coor>){<comment>}
+ [<pos>,<node opt>](<end-shorten dim>)
+% defaults:
+ [densely dotted,->,>=stealth,shorten >=1pt](<m>)(<m>){}[above](1pt)
+\end{tcblisting}
+\xbigskip1
+
+The last parenthesis option if for shortening arrow end.
+You can use the abbreviations of the directional words, but not with other options in the option list.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \xtCommentTo
+\begin{istgame}[->,scale=.7]
+\xtShowEndPoints
+\istroot(0)+15mm..30mm+ \istb \istb \endist
+\istroot(1)(0-1) \istb \istb \endist
+\istroot(2)(0-2)[chance node] \istb \istb \endist
+\xtCommentTo[bend right](0)(150:2){Alice moves}[l]
+\xtCommentTo[bend right](1)(150:2){Ben moves}
+\xtCommentTo[bend left](2)(0,2){Nature moves}[a](5pt)
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The macro \icmd{\xtCommentFrom} enables you to attach a comment to one or more nodes from an \emph{absolute} coordinate with a densely dotted arrow line.
+Note that with \cmd{\xtCommentFrom} you need to specify a \emph{start absolute} coordinate followed by a \emph{target absolute} coordinate.
+The last parenthesis option if for shortening arrow end.
+You can use the abbreviations of the directional words.
+
+%\xbigskip1
+\begin{tcblisting}{listing only}
+% \xtCommentFrom
+% syntax:
+ \xtCommentFrom[<line opt>](<from>)(<to>){<comment>}[<pos>,<node opt>]<arrow end shorten>
+% defaults:
+ [densely dotted,->,>=stealth,shorten >=1pt](<m>)(<m>){}[above](1pt)
+\end{tcblisting}
+
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth}
+% Example: \xtCommentFrom
+\begin{istgame}[scale=.6]
+\xtShowEndPoints
+\istroot(0)+15mm..30mm+
+ \istb \istb \endist
+\istroot(1)(0-1)
+ \istb \istb \endist
+\istroot(2)(0-2)[chance node]
+ \istb \istb \endist
+\xtCommentFrom[bend right](-3,2)(0){decision nodes}
+\xtCommentFrom[bend right](-3,2)(1)
+\xtCommentFrom[bend right,solid,blue](-3,2)(2)
+\xtCommentFrom[bend right](-3,-5)(1-1)
+ {terminal nodes}[b]
+\xtCommentFrom[bend right](-3,-5)(1-2)
+\xtCommentFrom[bend right](-3,-5)(2-1)
+\xtCommentFrom[bend right](-3,-5)(2-2)(5pt)
+\end{istgame}
+\end{tcblisting}
+
+%\subsubsection{To show and hide end-points and terminal nodes}
+%
+%With the macro \icmd{\xtShowEndPoints}, you can control the node shape of every endpoint of every simple tree, all at once.
+%(For more details, see page~\pageref{page:endpoint}.)
+%
+%\icmd{\xtHideEndPoints} turns off the effect of \cmd{\xtShowEndPoints}.
+%
+%\begin{tcblisting}{listing only}
+%syntax: \xtShowEndPoints[<node style>]
+%syntax: \xtHideEndPoints
+%\end{tcblisting}
+%
+%
+%The macro \icmd{\xtShowTerminalNodes} works only with \cmd{\istbt}\@ and \cmd{\istBt} to control the node shape of terminal nodes, all at once.
+%(For more details, see page~\pageref{page:terminalnode}.)
+%
+%\icmd{\xtHideTerminalNodes} turns off the effect of \cmd{\xtShowTerminalNodes}.
+%
+%\begin{tcblisting}{listing only}
+%syntax: \xtShowTerminalNodes[<node style>] % work only with \istbt and \istBt
+%syntax: \xtHideTerminalNodes
+%\end{tcblisting}
+
+\section{Representing subgames}
+
+Here is an example of a whole game tree.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth,breakable}
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l] \istb{D}[r] \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al] \istb{R}[ar] \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)} \istb{r}[ar]{(1,1)} \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)} \istb{r}[ar]{(0,3)} \endist
+\end{istgame}
+\end{tcblisting}
+
+\subsection{\protect\cmd{\xtSubgameBox} (experimental)}
+
+\subsubsection{\protect\cmd{\xtSubgameBox}}
+
+\icmd{\xtSubgameBox} is for indicating a \ixsw{subgame} by a box (or a rectangle) with rounded corners.
+
+\begin{tcblisting}{listing only}
+% \xtSubgameBox(*)
+% syntax:
+ \xtSubgame(*)(<subroot coor>){(<coor1>) (<coor2>) ... }[<opt>]
+% options:
+ *: filled box
+ (<subroot coor>): the subroot of a subgame (mandatory)
+ {(coor1) (coor2) ...}: coordinates of terminal nodes (mandatory)
+ [<opt>]: color, line style
+% defaults:
+ (<m>){}[rectangle,dashed,inner sep=20pt,rounded corners=15pt,black!50]
+ *(<m>){}[rectangle,inner sep=20pt,rounded corners=15pt,red!20]
+\end{tcblisting}
+
+\xbigskip1
+The subgame box embraces the subroot indicated in parentheses and terminal nodes specified within curly braces.
+The coordinates of terminal nodes are listed in curly braces without delimiters (spaces are allowed).
+The default options for the subgame box are \xw{dashed}, \xw{inner sep=20pt}, \xw{rounded corners=15pt}, and \xw{black!50}.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth,breakable}
+% subgame: rectangle
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l] \istb{D}[r] \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al] \istb{R}[ar] \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)} \istb{r}[ar]{(1,1)} \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)} \istb{r}[ar]{(0,3)} \endist
+\xtSubgameBox(1){(2-1)(3-2)}
+\xtSubgameBox(2){(2-1)(2-2)}[solid,blue]
+\end{istgame}
+\end{tcblisting}
+
+You can change the size of the box in two ways.
+First, you can change it by using \xw{inner sep}, \xw{inner xsep}, or \xw{inner ysep}. Secondly, you can shift the subroot, like \xw{([xshift=5pt]1)} when the subroot is \xw{(1)}.
+Of course, you can do the both at the same time.
+
+% subgame: rectangle (inner sep,yshift)
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth,breakable}
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l] \istb{D}[r] \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al] \istb{R}[ar] \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)} \istb{r}[ar]{(1,1)} \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)} \istb{r}[ar]{(0,3)} \endist
+\xtSubgameBox(1){(2-1)(3-2)}
+\xtSubgameBox([yshift=5pt]2){(2-1)(2-2)}%
+ [solid,blue,inner sep=10pt]
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{\protect\cmd{\xtSubgameBox*}}
+
+The starred version \icmd{\xtSubgameBox*} produces a subgame box with background color (by default \xw{red!20}).
+In the following example, where the tree grows east, the size of the filled subgame box is adjusted by manipulating \xw{inner sep} and \xw{xshift}.
+
+\begin{tcblisting}{listing outside text, righthand width=.3\linewidth,breakable}
+% subgame: rectangle*
+\begin{istgame}
+\setistgrowdirection'{east}
+\xtdistance{15mm}{30mm}
+\istroot[45](0)[initial node]<180>{1}
+ \istb{A}[l]{(2,2)}[a] \istb{D}[b] \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al] \istb{R}[bl] \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)} \istb{r}[bl]{(1,1)} \endist
+\istroot(3)(1-2)<-135>{2}
+ \istb{\ell}[al]{(3,2)} \istb{r}[bl]{(0,3)} \endist
+\xtSubgameBox*([xshift=20pt]1){(2-1)(3-2)}%
+ [inner xsep=30pt]
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{\protect\cmd{\xtSubgameOval} and \protect\cmd{\xtSubgameOval*} (experimental)}
+
+\icmd{\xtSubgameOval} and \icmd{\xtSubgameOval*} are also provided.
+
+\begin{tcblisting}{listing only}
+% \xtSubgameOval(*)
+% syntax:
+ \xtSubgameOval(*)(<subroot coor>){(<coor1>) (<coor2>) ... }[<opt>]
+% options:
+ *: filled box
+ (<subroot coor>): the subroot of a subgame (mandatory)
+ {(coor1) (coor2) ...}: coordinates of terminal nodes (mandatory)
+ [<opt>]: color, line style
+% defaults:
+ (<m>){}[ellipse,dashed,inner sep=20pt,rounded corners=15pt,black!50]
+ *(<m>){}[ellipse,inner sep=20pt,rounded corners=15pt,red!20]
+\end{tcblisting}
+
+
+%\begin{tcblisting}{listing only}
+%% \xtSubgameOval(*)
+%% syntax:
+% \xtSubgame(*)(<subroot coor>){(<coor1>) (<coor2>) ... }[<opt>]
+%%% \xtSubgameOval: definition
+%\def\xtdefaultsubrootshiftoval{0,-.7}
+%\DeclareDocumentCommand\xtSubgameOval{ s r() m O{}}
+%{ \IfBooleanTF #1
+% {
+% \coordinate (xtsubroot) at ($(#2)+(\xtdefaultsubrootshiftoval)$);
+% \begin{scope}[on background layer]
+% \node [ellipse,fill=red!20,inner sep=15pt,#4]
+% [fit=(xtsubroot) #3] {};
+% \end{scope}
+% }
+% {
+% \coordinate (xtsubroot) at ($(#2)+(0,-.7)$);
+% \begin{scope}[on background layer]
+% \node [ellipse,draw,dashed,inner sep=15pt,black!50,#4]
+% [fit=(xtsubroot) #3] {};
+% \end{scope}
+% }
+%}
+%\end{tcblisting}
+
+\cmd{\xtSubgameOval(*)} works just like \cmd{\xtSubgameBox(*)}, except for one thing: an oval instead of a rectangle.
+\cmd{\xtSubgameOval} draws an oval (or an ellipse) to represent a subgame, and \cmd{\xtSubgameOval*} draws a filled oval with \xw{red!20} by default.
+
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% subgame: ellipse
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l]
+ \istb{D}[r]
+ \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al]
+ \istb{R}[ar]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[ar]{(0,3)}
+ \endist
+\xtSubgameOval(1){(2-1)(3-2)}
+\xtSubgameOval(2){(2-1)(2-2)}
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+The way of changing the size of the subgame oval is the same as with \cmd{\xtSubgameBox}: first, changing inner sep, and secondly, shifting the subroot.
+In the example below, the options \xw{inner xsep=25pt} and \xw{([xshift=30pt]1)} are used to change the size of the subgame oval. Its color is changed by \xw{blue!20}.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% subgame: ellipse*
+\begin{istgame}
+\setistgrowdirection'{east}
+\xtdistance{15mm}{30mm}
+\istroot[45](0)[initial node]<180>{1}
+ \istb{A}[l]{(2,2)}[a]
+ \istb{D}[b]
+ \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al]
+ \istb{R}[bl]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[bl]{(1,1)}
+ \endist
+\istroot(3)(1-2)<-135>{2}
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[bl]{(0,3)}
+ \endist
+\xtSubgameOval*([xshift=30pt]1){(2-1)(3-2)}%
+ [inner xsep=25pt,blue!20]
+\end{istgame}
+\end{tcblisting}
+
+\subsection{\protect\cmd{\setxtsubgamelayer}}
+
+You can change the shape of a subgame representation to other shapes such as \xw{semicircle} and \xw{circle} or even \xw{star}. You will need to change the size of the shape by using \xw{inner sep} and by shifting the subroot to get the result you want.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% subgame: half circle
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l]
+ \istb{D}[r] \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al]
+ \istb{R}[ar] \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[ar]{(0,3)}
+ \endist
+\xtSubgameBox([yshift=-2cm]1){(2-1)(3-2)}%
+ [semicircle,inner sep=15pt]
+\end{istgame}
+\end{tcblisting}
+
+
+%\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+%% subgame: half circle*
+%\begin{istgame}
+%\setistgrowdirection'{east}
+%\xtdistance{15mm}{30mm}
+%\istroot[45](0)[initial node]<180>{1}
+% \istb{A}[l]{(2,2)}[a]
+% \istb{D}[b]
+% \endist
+%\istroot(1)(0-2)<135>{1}
+% \istb{L}[al]
+% \istb{R}[bl]
+% \endist
+%\xtdistance{10mm}{20mm}
+%\istroot(2)(1-1)<135>{2}
+% \istb{\ell}[al]{(4,2)}
+% \istb{r}[bl]{(1,1)}
+% \endist
+%\istroot(3)(1-2)<-135>{2}
+% \istb{\ell}[al]{(3,2)}
+% \istb{r}[bl]{(0,3)}
+% \endist
+%\xtSubgameBox*([xshift=2cm]1){(2-1)(3-2)}%
+% [semicircle,rotate=90,inner sep=0pt]
+%\end{istgame}
+%\end{tcblisting}
+
+Here are more examples showing how to draw a rectangle and circles to represent subgames.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% subgame: rectangle*
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l]
+ \istb{D}[r] \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al]
+ \istb{R}[ar] \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[ar]{(0,3)}
+ \endist
+\xtSubgameBox*(1){(2-1)(3-2)}
+\xtSubgameOval*(2){(2-1)(2-2)}%
+ [circle,blue!20,inner xsep=9pt]
+\xtSubgameOval(3){(3-1)(3-2)}%
+ [circle,inner xsep=9pt]
+\end{istgame}
+\end{tcblisting}
+
+
+You can use \icmd{\setxtsubgamelayer} to change the \isw{layer} of a subgame from \xw{background} to \xw{behind}, \xw{main}, \xw{above}, or \xw{foreground}, in that order. In order to go back to the default layer, you can just declare \cmd{\setxtsubgamelayer} or do \cmd{\setxtsubgamelayer\{\}}.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% subgame: \setxtsubgamelayer
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l]
+ \istb{D}[r] \endist
+\istroot(1)(0-2)<135>{1}
+ \istb{L}[al]
+ \istb{R}[ar] \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[ar]{(0,3)}
+ \endist
+\setxtsubgamelayer{behind}
+\xtSubgameOval*(2){(2-1)(2-2)}%
+ [circle,blue!80,inner xsep=9pt,opacity=.25]
+\setxtsubgamelayer % restore defaults
+\xtSubgameBox*(1){(2-1)(3-2)}
+\xtSubgameOval(3){(3-1)(3-2)}%
+ [circle,inner xsep=9pt]
+\end{istgame}
+\end{tcblisting}
+
+
+\section{Miscellany}
+
+\subsection{Various branch types, directions, and lengths}
+
+Here is an example of how to deal with various line types, directions, and lengths of branches.
+You can do this using \cmd{\istbA} (see Section~\ref{sec:istbA}, for more details).
+\xbigskip1
+\begin{tcblisting}{breakable}
+\begin{istgame}
+\istroot(0)[chance node]<[blue]>{N}+10mm..30mm+
+ \istb[->,shorten >=.8pt]{p}[above left,red]
+ \istb[->,shorten >=.8pt]{1-p}[ar] \endist
+\istroot(1)(0-1)+15mm..30mm+
+ \istb<level distance=7mm,sibling distance=14mm>{L}[al]
+ \istb*[->>>]{R}[ar] \endist
+\istroot(2)(0-2)+10mm..15mm+
+ \istb[->,dashed]{A}
+ \istbA(2.5)<grow=30>[red]{a}[al]{(1,-1)}[[blue]right]
+ \istb*<grow=-45>[blue,text=red,thick]{b}[ar]{(u_1,u_2)}[[green]-90] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{Code reuse}
+
+\subsubsection{Drawing subgames}
+
+Suppose that you have the following tree as a whole game.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: a whole game
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l]
+ \istb{D}[r]
+ \endist
+\istroot(1)(0-2)<left>{1}
+ \istb{L}[al]
+ \istb{R}[ar]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[ar]{(0,3)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+It is easy to draw a subgame if you use the existing codes for a whole game.
+To get a subgame, just comment out the codes for the rest of the subgame.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: a subgame
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+%\istroot[-135](0)[initial node]<0>{1}
+% \istb{A}[a]{(2,2)}[l]
+% \istb{D}[r]
+%\endist
+\istroot(1)(0-2)<left>{1}
+ \istb{L}[al]
+ \istb{R}[ar]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)<45>{2}
+ \istb{\ell}[al]{(3,2)}
+ \istb{r}[ar]{(0,3)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+\remark If you copy and paste the previous codes alone and try to complie to get a subgame, you will get an error message:
+
+\verb+! Package pgf Error: No shape named 0-2 is known.+
+
+\noindent
+This is because the first active \cmd{\istroot} refers to the undefined coordinate \xw(0-2). In this case you need to change the line as:
+
+\verb+\istroot(1)(0,0)<left>{1}+
+
+\noindent
+However, if you have the codes for a whole game before the codes with some lines commented out for a subgame, you will not get the error message when you compile the file (because the coordinate \xw{(0-2)} is already defined in the whole game).
+Therefore, most of the time you will not get the error message by commenting out some lines to get a subgame.
+
+\xbigskip1
+
+A smaller subgame is also easy to get by commenting out the rest of the subgame you want.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: a smaller subgame
+\begin{istgame}
+%\xtdistance{15mm}{30mm}
+%\istroot[-135](0)[initial node]<0>{1}
+% \istb{A}[a]{(2,2)}[l]
+% \istb{D}[r]
+%\endist
+%\istroot(1)(0-2)<left>{1}
+% \istb{L}[al]
+% \istb{R}[ar]
+%\endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+%\istroot(3)(1-2)<45>{2}
+% \istb{\ell}[al]{(3,2)}
+% \istb{r}[ar]{(0,3)}
+%\endist
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip1
+It is not possible to make a subgame stay put where it appears in a whole game.
+(Replace \xw{[black!5]} by \xw{[white]} to make the rest of the game disappear in the example below.)
+
+\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: a subgame stays put
+\begin{istgame}
+\setistDecisionNodeStyle[black!5]
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)%[initial node]<0>{1}
+ \istb[black!5]%{A}[a]{(2,2)}[l]
+ \istb[black!5]%{D}[r]
+ \endist
+\istroot(1)(0-2)%<left>{1}
+ \istb[black!5]%{L}[al]
+ \istb[black!5]%{R}[ar]
+ \endist
+\setistDecisionNodeStyle
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb{\ell}[al]{(4,2)}
+ \istb{r}[ar]{(1,1)}
+ \endist
+\setistDecisionNodeStyle[black!5]
+\istroot(3)(1-2)%<45>{2}
+ \istb[black!5]%{\ell}[al]{(3,2)}
+ \istb[black!5]%{r}[ar]{(0,3)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\subsubsection{Backward induction}
+
+It is also easy to illustrate the procedure of \isw{backward induction}, when you analyze an extensive game.
+
+\xbigskip1
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+\begin{istgame}[>=stealth]
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb[dashed]{A}[a]{(2,2)}[l]
+ \istb[very thick]{D}[r]
+\endist
+\istroot(1)(0-2)<left>{1}
+ \istb[very thick]{L}[al]
+ \istb<dashed>{R}[ar]
+\endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb[->,very thick,blue]{\ell}[al]{(4,2)}
+ \istb[thick,dotted]{r}[ar]{(1,1)}
+\endist
+\istroot(3)(1-2)<45>{2}
+ \istb[thick,dotted]{\ell}[al]{(3,2)}
+ \istb[very thick,blue]{r}[ar]{(0,3)}
+\endist
+\end{istgame}
+\end{tcblisting}
+\xbigskip1
+
+By using \cmd{\istb} with options for the middle arrow tips, you can effectively express the backward induction procedure.
+The command \cmd{\setxtarrowtips} controls the style of arrow tips and just declaring \cmd{\setxtarrowtips} followed by nothing restores defaults for the middle arrow tips styles. See Section~\ref{sec:arrows}, for more details.
+change the color and the style of a line representing a branch and an arrow tip to it.
+
+\xbigskip1
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth,breakable}
+% Example: backward induction
+\begin{istgame}
+\setxtarrowtips[red,very thick,shorten >=-2pt,shorten <=-2pt]
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb[-x-,dashed,blue]{A}[a]{(2,2)}[l]
+ \istb[-o-,very thick]{D}[r]
+ \endist
+\istroot(1)(0-2)<left>{1}
+ \istb[very thick]{L}[al]
+ \istb[dashed,-x-]{R}[ar]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)<135>{2}
+ \istb[->>>-,very thick,draw=blue]{\ell}[al]{(4,2)}
+ \istb[-x-,thick,dotted]{r}[ar]{(1,1)}
+ \endist
+\setxtarrowtips % restore defaults
+\istroot(3)(1-2)<45>{2}
+ \istb[-x-,thick,dotted]{\ell}[al]{(3,2)}
+ \istb[->-,draw=blue]{r}[ar]{(0,3)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\subsubsection{Code reusability}
+
+Chen(2013)'s work is good to understand how drawing a game tree with \TikZ\ works.
+
+\begin{tcblisting}{listing above text}
+% Chen (2013)
+\begin{tikzpicture}[scale=1,font=\footnotesize]
+\tikzstyle{solid node}=[circle,draw,inner sep=1.5,fill=black]
+\tikzstyle{hollow node}=[circle,draw,inner sep=1.5]
+\tikzstyle{level 1}=[level distance=15mm,sibling distance=3.5cm]
+\tikzstyle{level 2}=[level distance=15mm,sibling distance=1.5cm]
+\tikzstyle{level 3}=[level distance=15mm,sibling distance=1cm]
+\node(0)[solid node,label=above:{$P1$}]{}
+child{node[solid node,label=above left:{$P2$}]{}
+child{node[hollow node,label=below:{$(1,2)$}]{} edge from parent node[left]{$C$}}
+child{node[hollow node,label=below:{$(1,-1)$}]{} edge from parent node[left]{$D$}}
+child{node[hollow node,label=below:{$(0,2)$}]{} edge from parent node[right]{$E$}}
+edge from parent node[left,xshift=-5]{$A$}
+}
+child{node[solid node,label=above right:{$P2$}]{}
+child{node[hollow node,label=below:{$(2,2)$}]{} edge from parent node[left]{$F$}}
+child{node[hollow node,label=below:{$(1,3)$}]{} edge from parent node[right]{$G$}}
+edge from parent node[right,xshift=5]{$B$}
+};
+\end{tikzpicture}
+\end{tcblisting}
+
+%\xbigskip1
+
+You can get a quite similar (actually the same) result by using the \pkg{istgame} package.
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% istgame
+\begin{istgame}[scale=1,font=\footnotesize]
+\setistDecisionNodeStyle{4pt}
+\xtdistance{15mm}{3.5cm}
+\istroot(0){$P1$}
+ \istb{A}[al]
+ \istb{B}[ar]
+ \endist
+\xtShowEndPoints[oval node]
+\xtdistance{15mm}{1.5cm}
+\istroot(1)(0-1)<135>{$P2$}
+ \istb{C}[l]{(1,2)}
+ \istb{D}[l]{(1,-1)}
+ \istb{E}[r]{(0,2)}
+ \endist
+\istroot(2)(0-2)<45>{$P2$}
+ \istb{F}[l]{(2,2)}
+ \istb{G}[r]{(1,3)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+The \pkg{istgame} package enhances simplicity and readability, and hence it is easy to reuse codes. You can easily read and modify game tree codes even if you go over them after a while.
+
+%\clearpage
+\section{Game tree examples}
+
+This section provides some examples of extensive games.
+Before we start, let us change the default font size of the \env{istgame} environment by stating
+\cmd{\setistgamefontsize\{\cmd{\footnotesize\}}} outside of the environment. (Right here!)
+
+\setistgamefontsize{\footnotesize}
+
+\subsection{Simple examples}
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth,breakable}
+\begin{istgame}[->,shorten >=1.3pt]
+\setistmathTF*001
+\xtdistance{15mm}{30mm}
+\istroot(0)[initial node]{Child}
+ \istb{Good}[above left]{(0,2)}
+ \istb{Bad}[above right]
+ \endist
+\istroot(1)(0-2)<30>{Parent}
+ \istb{Forgive}[above left]{(1,1)}
+ \istb{Punish}[above right]{(-1,-1)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\medskip
+
+%\begin{tcblisting}{listing outside text, righthand width=.35\linewidth,breakable}
+%% sloped action labels
+%\begin{istgame}[->]
+%\setistmathTF*001 % action labels in italics
+%\xtShowEndPoints
+%\xtdistance{15mm}{30mm}
+%\istroot(0)[initial node]{Child}
+% \istb{Good}[above,sloped]{(0,2)}
+% \istb{Bad}[above,sloped]
+% \endist
+%\istroot(1)(0-2)<30>{Parent}
+% \istb{Forgive}[above,sloped]{(1,1)}
+% \istb{Punish}[above,sloped]{(-1,-1)}
+% \endist
+%\end{istgame}
+%\end{tcblisting}
+%
+%\medskip
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth,breakable}
+% dual sloped action labels (\istB)
+\begin{istgame}
+\setistmathTF*001 % action labels in italics
+\xtShowArrows
+\xtdistance{15mm}{30mm}
+\istroot(0)[initial node]{Child}
+ \istB{Good}[above,sloped]
+ {$p$}[below, sloped]{(0,2)}
+ \istB{Bad}[above,sloped]
+ {$1-p$}[below, sloped]
+ \endist
+\istroot(1)(0-2)<30>{Parent}
+ \istB{Forgive}[above,sloped]
+ {$q$}[below, sloped]{(1,1)}
+ \istB{Punish}[above,sloped]
+ {$1-q$}[below, sloped]{(-1,-1)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\medskip
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% IGT 218.1 (Osborne, 2004b)
+\begin{istgame}[font=\normalsize]
+\xtdistance{10mm}{20mm}
+ \istroot(0){Vote}
+ \istb{a}[al]{x}
+ \istb{b}[ar]
+ \endist
+\istroot(1)([yshift=-1.5em]0-2){Vote}
+ \istb{c}[al]{y}
+ \istb{d}[ar]{z}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+\medskip
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% information set
+\begin{istgame}
+\xtdistance{10mm}{30mm}
+\istroot(0){1}
+ \istb{L}[al] \istb{R}[ar]
+ \endist
+\xtdistance{7mm}{15mm}
+\istroot(1a)(0-1)
+ \istb{a}[al]{1,0}
+ \istb{b}[ar]{2,3}
+ \endist
+\istroot(1b)(0-2)
+ \istb{c}[al]{0,1} \istb{d}[ar]{-1,0}
+ \endist
+\xtInfoset(1a)(1b){2}
+\end{istgame}
+\end{tcblisting}
+
+\medskip
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+% information set
+\begin{istgame}
+\xtShowEndPoints[oval node]
+\xtdistance{10mm}{30mm}
+\istroot(0){1}
+ \istb{L}[al] \istb{R}[ar]
+ \endist
+\xtdistance{7mm}{15mm}
+\istroot(1a)(0-1)
+ \istb{a}[al]{1,0} \istb{b}[ar]{2,3}
+ \endist
+\istroot(1b)(0-2)
+ \istb{c}[al]{0,1} \istb{d}[ar]{-1,0}
+ \endist
+\xtInfoset[bend left=30](1a)(1b){2}
+\end{istgame}
+\end{tcblisting}
+
+\medskip
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth,breakable}
+% (oval) information set
+\begin{istgame}
+\xtdistance{15mm}{30mm}
+\istroot[-135](0)[initial node]<0>{1}
+ \istb{A}[a]{(2,2)}[l] \istb{D}[r]
+ \endist
+\istroot(1)(0-2)<left>{1}
+ \istb{L}[al] \istb{R}[ar]
+ \endist
+\xtInfosetO(1-1)(1-2){2}
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-1)
+ \istb{\ell}[al]{(4,2)} \istb{r}[ar]{(1,1)}
+ \endist
+\istroot(3)(1-2)
+ \istb{\ell}[al]{(3,2)} \istb{r}[ar]{(0,3)}
+ \endist
+\end{istgame}
+\end{tcblisting}
+
+
+\clearpage
+\subsection{A game tree with a strategic game}
+
+\begin{tcblisting}{listing outside text, righthand width=.35\linewidth}
+%\usepackage{tabu}
+%\NewExpandableDocumentCommand\xcol{mO{c|}m}
+% {\multicolumn{#1}{#2}{\ensuremath{#3}}}
+\def\strategicgame{
+\begin{tabular} {c|c|c|} % to 3cm
+\xcol1[c]{~} & \xcol1[c]{$B$} & \xcol1[c]{$S$} \\\cline{2-3}
+$B$ & $3,1$ & $0,0$ \\\cline{2-3}
+$S$ & $0,0$ & $1,3$ \\\cline{2-3}
+\end{tabular}
+}
+ \begin{istgame}
+\setistmathTF*001
+\xtdistance{10mm}{40mm}
+\istroot(0)[initial node]{1}
+ \istb{Book}[al]{2,2}
+ \istb{Concert}[ar]
+ \endist
+\xtPayoff(0-2){\strategicgame}[below,xshift=-7pt]
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\subsection{Larger game trees with information sets}
+
+\begin{tcblisting}{}
+\begin{istgame}
+\xtShowEndPoints
+\xtdistance{10mm}{40mm}
+\istroot(0)[initial node]{1} \istb \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(1)(0-1) \istb \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \istb \endist
+\xtdistance{10mm}{20mm}
+\istroot(3)(0-3) \istb \istb \endist
+\xtdistance{10mm}{7mm}
+\istroot(a)(1-3){3} \istb \istb \istb \endist
+\xtdistance{10mm}{14mm}
+\istroot(b)(2-3) \istb \istb \endist
+\istroot(c)(3-1){2} \istb \istb \endist
+\istroot(d)(3-2){2} \istb \istb \endist
+\xtInfosetO[fill=red!20](0)(0)
+\xtInfoset(1)(2){2}
+\xtCInfosetO[fill=blue!20](a)(a)
+\setxtinfosetstyle{blue,thick,dashed}
+\xtInfosetO(b)(3){3}
+\setxtinfosetstyle % restore defaults
+\xtCInfosetO(d)(d)
+\end{istgame}
+\end{tcblisting}
+
+
+\begin{tcblisting}{}
+\begin{istgame}[scale=1]
+\useasboundingbox (-7,-3) rectangle (7,.5);
+\xtdistance{10mm}{40mm}
+\istroot(0)[initial node]{1} \istb \istb \istb \istb \endist
+\xtdistance{10mm}{10mm}
+\istroot(1)(0-1) \istb \istb \istb \endist
+\istroot(2)(0-2) \istb \istb \istb \endist
+\xtdistance{10mm}{20mm}
+\istroot(3)(0-3) \istb \istb \endist
+\istroot(4)(0-4) \istb \istb \endist
+\xtdistance{10mm}{7mm}
+\istroot(a)(1-3) \istb \istb \istb \endist
+\istroot(b)(2-3) \istb \istb \endist
+\istroot(c)(3-1) \istb \istb \istb \endist
+\xtCInfosetO[fill=red!20](1)!.4!(3){2}
+\xtInfosetO(2)(2){1}[above]
+\setxtinfosetlayer{behind}
+\xtCInfoset[blue,thick,dashed](a)(c)<.85>{3}[below]
+\setxtinfosetlayer % restore default layer (behnd)
+\xtCInfosetO[fill=blue!20](b)(4)<.7>{2}
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{A continuum of branches}
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{8mm}{16mm}
+\cntmpreset*[dashed]{.7} % white triangle
+\istrootcntm(0)(0,0){1} \istb{x}[r] \endist
+\istroot(1)(0-1)<[label distance=-3pt]120>{2}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar] \endist
+\cntmpreset % restore defaults
+\istrootcntm(2)(1-2){2} \istb{y}[r] \istbm \endist
+\istroot(3)(2-1)<[label distance=-3pt]120>{1}
+ \istb[]{Y}[al]{1-y,y} \istb{N}[ar] \endist
+\end{istgame}
+\end{tcblisting}
+
+%\medskip
+
+\begin{tcblisting}{listing outside text, righthand width=.25\linewidth}
+\begin{istgame}[font=\scriptsize]
+\cntmdistance*{8mm}{16mm}
+\istrootcntmA(0)(0,0){1} \istbA{x}[r] \endist
+\cntmAInfoset(0)
+\istroot(1)(0-1)<[label distance=-3pt]120>{2}
+ \istb{Y}[al]{x,1-x} \istb{N}[ar] \endist
+\istrootcntmA(2)(1-2){2} \istbA{y}[r] \endist
+\cntmAInfosetO[fill=blue!20](2)
+\istroot(3)(2-1)<[label distance=-3pt]120>{1}
+ \istb[]{Y}[al]{1-y,y} \istb{N}[ar] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\subsection{Tic-tac-toe (sketch)}
+
+% tic-tac-toe
+\begin{tcblisting}{}
+% tic-tac-toe (sketch)
+\begin{istgame}[scale=1.8,font=\tiny]
+\xtdistance{20mm}{7mm}
+\istroot(0) \istb \istb \istb \istb \istb \istb{\dots} \istb \istb \istb{9}[r] \endist
+\foreach \x in {1,...,4}
+{\xtActionLabel(0)(0-\x){\x}[l]}
+\xtdistance{10mm}{3mm}
+\istroot(a1)(0-1) \istb{2}[l] \istb \istb \istb \istb \istb \istb \istb{9}[r] \endist
+\istroot(a7)(0-7) \istb{1}[l] \istb \istb \istb \istb \istb \istb \istb{9}[r] \endist
+\xtdistance{10mm}{2mm}
+\istroot(A)(a1-3) \istb{2}[l] \istb \istb \istb \istb \istb \istb{9}[r] \endist
+\istroot(B)(a1-8) \istb{2}[l] \istb \istb \istb \istb \istb \istb{8}[r] \endist
+\istroot(C)(a7-8) \istb{1}[l] \istb \istb \istb \istb \istb \istb{8}[r] \endist
+\istroot(Bx)(B-7) \istb{2}[l] \istb \istb \istb \istb \istb{7}[r] \endist
+\istroot(By)(Bx-1) \istb{3}[l] \istb \istb \istb \istb{7}[r] \endist
+\istroot(Bz)(By-1) \istb{4}[l] \istb \istb \istb{7}[r] \endist
+\xtPayoff(Bz-4){\vdots} \xtPayoff(Bz-4){\cdots}[right,xshift=10pt]
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\subsection{Selten's horse}
+
+\begin{tcblisting}{listing outside text, righthand width=.4\linewidth}
+% Selten's horse: IGT 331.2 (Osborne, 2004b)
+\begin{istgame}
+\xtdistance{8mm}{16mm}
+\istroot[-45](0)[initial node]{1}
+ \istb{D}[r]
+ \istb<grow=east,level distance=30mm>{C}[a]
+ \endist
+\istroot(1)(0-1)+10mm..20mm+
+ \istb{L}[al]{3,3,2}
+ \istb{R}[ar]{0,0,0}
+ \endist
+\istroot[-45](a)(0-2){2}
+ \istb{d}[r]
+ \istb<grow=0,level distance=20mm>{c}[a]{1,1,1}[r]
+ \endist
+\istroot(a1)(a-1)+10mm..20mm+
+ \istb{L}[al]{4,4,0}
+ \istb{R}[ar]{0,0,1}
+ \endist
+\xtInfoset(1)(a1){3}
+\end{istgame}
+\captionof{figure}{IGT 331.2}
+\end{tcblisting}
+
+
+\subsection{Centipede game}
+
+\begin{tcblisting}{}
+% centipede
+\begin{istgame}[scale=1.5]
+\setistmathTF*001
+\setistgrowdirection{south east}
+\xtdistance{10mm}{20mm}
+\istroot(0)[initial node]{1}
+ \istb{Take}[r]{(2,0)}[b] \istb{Pass}[a] \endist
+\istroot(1)(0-2){2}
+ \istb{Take}[r]{(1,3)}[b] \istb{Pass}[a] \endist
+\istroot(2)(1-2){1}
+ \istb{Take}[r]{(4,2)}[b] \istb{Pass}[a] \endist
+\xtInfoset(2-2)([xshift=5mm]2-2)
+%-------------
+\istroot(3)([xshift=5mm]2-2){2}
+ \istb{Take}[r]{(97,99)}[b] \istb{Pass}[a] \endist
+\istroot(4)(3-2){1}
+ \istb{Take}[r]{(100,98)}[b] \istb{Pass}[a] \endist
+\istroot(5)(4-2){2}
+ \istb{Take}[r]{(99,101)}[b] \istb{Pass}[a]{(100,100)}[r] \endist
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\subsection{Poker game}
+
+% poker
+\begin{tcblisting}{}
+% poker: growing south
+\begin{istgame}[scale=1.7]
+\setistmathTF*001
+\xtShowEndPoints
+\xtdistance{15mm}{30mm}
+\istroot(0)[chance node]{N}
+ \istB{Black}[al]{$\frac12$}[br]
+ \istB{Red}[ar]{$\frac12$}[bl]
+ \endist
+\xtdistance{15mm}{30mm}
+\istroot(1-1)(0-1){1}
+ \istbA(.5)<grow=-135>{Fold}[al]{1,-1}
+ \istb{Raise}[ar]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(1-1-2)
+ \istb{Pass}[al]{1,-1}
+ \istb{Meet}[ar]{2,-2}
+ \endist
+\xtdistance{15mm}{30mm}
+\istroot(1-2)(0-2){1}
+ \istbA(.5)<grow=-135>{Fold}[al]{-1,1}
+ \istb{Raise}[ar]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(2)(1-2-2){}
+ \istb{Pass}[al]{1,-1}
+ \istb{Meet}[ar]{-2,2}
+ \endist
+\xtInfoset(1)(2){2}
+\end{istgame}
+\end{tcblisting}
+
+
+\subsection{Poker game: growing to the right}
+\label{p:poker-right}
+
+\begin{tcblisting}{}
+% poker: growing east -- counterclockwise
+\begin{istgame}[scale=1.3]
+\setistmathTF*001
+\setistgrowdirection{0} % default grow-direction is 'east' from now on
+\xtdistance{15mm}{30mm}
+\istroot(0)[chance node]<left>{N}
+ \istB{Black}[bl]{$\frac12$}[ar]
+ \istB{Red}[al]{$ \frac12$}[br]
+ \endist
+\xtdistance{15mm}{30mm}
+\istroot(1-1)(0-1)<left>{1}
+ \istb<grow=-45,level distance=10mm>{Fold}[bl]{1,-1}
+ \istb{Raise}[al]
+ \endist
+\xtdistance{12mm}{24mm}
+\istroot(1)(1-1-2)
+ \istb{Pass}[bl]{1,-1}
+ \istb{Meet}[al]{2,-2}
+ \endist
+\xtdistance{15mm}{30mm}
+\istroot(1-2)(0-2)<left>{1}
+ \istb<grow=-45,level distance=10mm>{Fold}[bl]{-1,1}[[xshift=5pt]below]
+ \istb{Raise}[al]
+ \endist
+\xtdistance{12mm}{24mm}
+\istroot(2)(1-2-2)
+ \istb{Pass}[bl]{1,-1}
+ \istb{Meet}[al]{-2,2}
+ \endist
+\xtCInfosetO[fill=blue!20](1-1-2)(1-2-2){2}
+\end{istgame}
+\end{tcblisting}
+
+\begin{tcblisting}{}
+% poker: growing east -- clockwise (swap version)
+\begin{istgame}[scale=1.3]
+\setistmathTF*001
+\setistgrowdirection'{0} % \setistgrowdirection'
+\xtdistance{15mm}{30mm}
+\istroot(0)[chance node]<left>{N}
+ \istB{Black}[al]{$\frac12$}[br]
+ \istB{Red}[bl]{$\frac12$}[ar]
+ \endist
+\xtdistance{15mm}{30mm}
+\istroot(1-1)(0-1)<left>{1}
+ \istb<grow=45,level distance=10mm>{Fold}[al]{1,-1}
+ \istb{Raise}[bl]
+ \endist
+\xtdistance{12mm}{24mm}
+\istroot(1)(1-1-2)
+ \istb{Pass}[al]{1,-1}
+ \istb{Meet}[bl]{2,-2}
+ \endist
+\xtdistance{15mm}{30mm}
+\istroot(1-2)(0-2)<left>{1}
+ \istb<grow=45,level distance=10mm>{Fold}[al]{-1,1}
+ \istb{Raise}[bl]
+ \endist
+\xtdistance{12mm}{24mm}
+\istroot(2)(1-2-2)
+ \istb{Pass}[al]{1,-1}
+ \istb{Meet}[bl]{-2,2}
+ \endist
+\xtInfosetO[fill=red!20](1-1-2)(1-2-2){2}
+\end{istgame}
+\end{tcblisting}
+
+\subsection{Signaling games}
+
+\begin{tcblisting}{listing above text,halign lower=center}
+% signaling game: IGT 337.1 (Osborne, 2004b)
+\begin{istgame}
+\setistgrowdirection'{right}
+% game start: choice of chance
+\xtdistance{20mm}{20mm}
+\istroot(0)[chance node]<180>{Chance}
+ \istB<grow=north>{H}[l]{\pi}[r] \istB<grow=south>{L}[l]{1-\pi}[r] \endist
+\istroot(H0)(0-1)<180>{F}
+ \istb{(p_1,E)}[a] \endist
+\istroot(L0)(0-2)<180>{F}
+ \istb{(p_1,E)}[a] \endist
+\setistmathTF*001
+\cntmdistance*{10mm}{20mm}{8mm}
+% subtree after H is chosen
+\istroot(H)(H0-1)
+ \istb{Buy}[br] \istb{Refrain}[ar]{-E,0} \endist
+\istrootcntm(H1)(H-1)
+ \istb{$p_2^H$}[b] \istbm \endist
+\istroot(CH)(H1-1)<[label distance=-4pt]135>{C}
+ \istb{Buy}[br]{p_1-E-c_H+p_2^H-c_H, 2H-p_1-p_2^H}
+ \istb{Refrain}[ar]{p_1-E-c_H, H-p_1}
+ \endist
+% subtree after L is chosen
+\istroot(L)(L0-1)
+ \istb{Buy}[br] \istb{Refrain}[ar]{-E,0} \endist
+\istrootcntm(L1)(L-1)
+ \istbm \istb{$p_2^L$}[a] \endist
+\istroot(CL)(L1-2)<[label distance=-4pt]-135>{C}
+ \istb{Buy}[br]{p_1-E-c_L+p_2^L-c_L, 2L-p_1-p_2^L}
+ \istb{Refrain}[ar]{p_1-E-c_L, L-p_1}
+ \endist
+\xtInfoset(H)(L){C}[left]
+\end{istgame}
+\end{tcblisting}
+
+\xbigskip2
+
+\begin{tcblisting}{listing outside text, righthand width=.5\linewidth}
+% signaling game
+\begin{istgame}[scale=1.3]
+\xtdistance{20mm}{20mm}
+\istroot(0)[chance node]{$c$}
+ \istb<grow=left>{\frac12}[a]
+ \istb<grow=right>{\frac12}[a]
+ \endist
+\xtdistance{10mm}{20mm}
+\istroot(1)(0-1)<180>{1}
+ \istb<grow=north>{a}[l]
+ \istb<grow=south>{b}[l]
+ \endist
+\istroot(2)(0-2)<0>{1}
+ \istb<grow=north>{a}[r]
+ \istb<grow=south>{b}[r]
+ \endist
+\istroot'[north](a1)(1-1)
+ \istb{L}[bl]{-1,0}
+ \istb{R}[br]{0,-1}
+ \endist
+\istroot(b1)(1-2)
+ \istb{L}[al]{2,0}
+ \istb{R}[ar]{0,2}
+ \endist
+\istroot(a2)(2-2)
+ \istb{L}[al]{3,0}
+ \istb{R}[ar]{0,3}
+ \endist
+\istroot'[north](b2)(2-1)
+ \istb{L}[bl]{1,0}
+ \istb{R}[br]{0,1}
+ \endist
+\xtInfoset(a1)(b2){2}
+\xtInfoset(b1)(a2){2}
+\end{istgame}
+\end{tcblisting}
+
+
+%\clearpage
+\setsecnumdepth{chapter}
+\section{Version history}
+
+\begin{itemize}
+\item v\tmpversion (\tmpdate) to be upload to CTAN
+ \begin{itemize}
+ \item changed the title of the package to ``Draw Game Trees with \Tikz"
+ \item package document done
+ \end{itemize}
+\item v2.0rc (2019/01/27)
+ \begin{itemize}
+ \item introduced \cmd{\setxtinfosetstyle}
+ \begin{itemize}
+ \item introduced \xw{infoset style}, a new style for information sets
+ \item modified all definitions of information sets, accordingly
+ \end{itemize}
+ \item redefined macros related to layer, to easily restore default values
+ \item modified the cross arrow tip options
+ \item modified defaults of \cmd{\setxtarrowtips} not to depend on branch styles initially
+ \item code refinement
+ \end{itemize}
+\item v2.0beta1 (2019/01/26)
+ \begin{itemize}
+% \item beta test
+ \item introduced \cmd{\xtshowXpoints} and \cmd{\xtshowXcircles} (for developer only, not documented)
+ \end{itemize}
+%\item v1.99x (2019/01/24)
+% \begin{itemize}
+% \item changed \xw{expl3} macros
+% \begin{itemize}
+% \item \verb+\str_case_x:nnTF+ to \verb+\str_case_e:nnTF+ and then to \verb+\str_case:nnTF+
+% \item \verb+\str_if_eq_x:nnTF+ to \verb+\str_if_eq:eeTF+ and then to \verb+\str_if_eq:nnTF+
+% \end{itemize}
+% \item modified macros on arrows and middle arrows
+% \item redefined \cmd{\xtTimeLineH} and \cmd{\xtTimeLineV} to deal with swap of branches
+% \item modified \cmd{\xtCommentTo} and \cmd{\xtCommentFrom} for the last option delimiters
+% \end{itemize}
+%\item v1.99w (2019/01/21)
+% \begin{itemize}
+% \item fixed bug in \cmd{\xtInfosetO} regarding \cmd{\xtinfosetheihtvar} for \xw{rounded corner}
+% \item corrected \cmd{\cntmistb} and \cmd{\cntmAistb}
+% \begin{itemize}
+% \item separated options for \cmd{\cntmAistb} from those for \cmd{\cntmistb}
+% \item those two are independent to each other (except the way to deal with endpoints)
+% \end{itemize}
+% \item redefined \cmd{\endist} to restore initial values after each execution of the \verb+cntm(A)istb+
+% \begin{itemize}
+% \item but not for the effect of printing endpoints
+% \item (internally introduced) \cmd{\cntmistbVariablesRestore}
+% \item (internally introduced) \cmd{\cntmAistbVariablesRestore}
+% \end{itemize}
+% \item introduced \cmd{\xtHideEndPoints*} for extra work for continuum endpoints
+% \item introduced \cmd{\cntmAlayerpreset}, with \xw{behind} as default
+% \item redefined \cmd{\xtShowArrows} to add an option for a node style
+% \item changed the order of options for \cmd{\setxtshowarrows}
+% \item changed the order of options for \cmd{\setxtarrowtips}
+% \item renamed \cmd{\setxtmidarrows} to \cmd{\setxtarrowtips}
+% \end{itemize}
+%\item v1.99v (2018/01/17)
+% \begin{itemize}
+% \item redefined the \env{istgame} environment and \cmd{\istgameScaleCallTestAndAdjust}
+% to take care of simultaneous use of \xw{xscale} and \xw{yscale}.
+% \item modified macros to make singleton information sets scaled accordingly when needed
+% \begin{itemize}
+% \item \cmd{\xtInfosetO}, \cmd{\xtCInfosetO}, \cmd{\cntmAInfosetO}, \cmd{\istgameScaleCallTestAndAdjust}
+% \item (internally) added \cmd{\xtinfosetheightvar} and \cmd{\cntminfosetheightvar}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99u (2019/01/15)
+% \begin{itemize}
+% \item redefined macros to deal with local change of sibling distances
+% \begin{itemize}
+% \item redefined \cmd{\istrootcntm}, \cmd{\istrootcntmA}, \cmd{\istrootocntm}, \cmd{\istrootocntmA},
+% \item redefined \cmd{\istbA}, \cmd{\istbAt}
+% \item redefined \cmd{\cntmpreset}, \cmd{\cntmApreset} -- NEED TO GO BACK (no need call test)
+% \end{itemize}
+% \item redefined \cmd{\xtCInfoset} to add abbreviations for the position of owners
+% \item redefined \cmd{\xtCInfoset} to print a singleton information set
+% \item modified \cmd{\xtCInfoset} to change the way of input for its position (\xw{add to \textbackslash cntmApos})
+% \end{itemize}\
+%\item v1.99t (2019/01/13)
+% \begin{itemize}
+% \item redefined macros to deal with local change of level and sibling distances for \cmd{\istbA}
+% \begin{itemize}
+% \item code complication, inevitable to take care of too many cases
+% \item redefined \cmd{\istroot} and \cmd{\istrooto}
+% \item redefined \cmd{\istrootcntm} and its variants
+% \item redefined \cmd{\istbA} and \cmd{\istbAt}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99s (2019/01/10)
+% \begin{itemize}
+% \item modified \cmd{\xtCInfosetO} for better results when swapped with \xw{plotfactor} less than 1
+% \item modified \cmd{\istrootcntm} and its variants for better results of shrunken continua
+% \item redefined \cmd{\xtTimeLineH} (for a horizontal time-line)
+% \item introduced \cmd{\xtTimeLineH(')} for a vertical time-line
+% \item introduced \cmd{\xtCInfosetOTurnX} for turning X circles to use it just in case
+% \end{itemize}
+%\item v1.99r (2019/01/07)
+% \begin{itemize}
+% \item redefined \cmd{\istrootcntm} and \cmd{\istrootocntm} for smaller triangle continua of branches
+% \item introduced \cmd{\cntmpreset} and \cmd{\cntmpreset*}
+% \item put `call test' for cases of how to change level distance with \cmd{\istbA}
+% \item modified \cmd{\xtCInfosetO} and \cmd{\cntmAInfosetO} for coloring
+% \end{itemize}
+%\item v1.99q (2019/01/05)
+% \begin{itemize}
+% \item modified \cmd{\xtInfosetO} to print a singleton information set by a circle.
+% \item finished fine-tuning \cmd{\cntmAInfosetO} (for tuning base circles)
+% \end{itemize}
+%\item v1.99p (2019/01/02)
+% \begin{itemize}
+% \item redefined \cmd{\xtInfoset} and \cmd{\xtInfosetO} in accordance with new \cmd{\xtCInfosetO}
+% \item redefined completely \cmd{\cntmAInfoset} and \cmd{\cntmAInfsetO} in the way of \cmd{\xtCInfosetO}
+% \item redefined \cmd{\cntmAInfoset}, \cmd{\cntmAInfosetO}, \cmd{\istrootcntmA}, and \cmd{\istrootocntmA}
+% \begin{itemize}
+% \item to compensate the dependency of arcs on the ratio of \cmd{\cntmlevdist} to \cmd{\cntmsibdist}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99o (2018/12/31)
+% \begin{itemize}
+% \item redefined completely \cmd{\xtCInfosetO} and \cmd{\xtCInfoset} for enhancement
+% \begin{itemize}
+% \item (internally) added \cmd{\setxtCIAngleAccordingtoGrowswapCallForCI}
+% \item to make it possible for the control points to turn accordingly along the base circles
+% for sides of curved information sets
+% \end{itemize}
+% \end{itemize}
+%\item v1.99n (2018/12/27)
+% \begin{itemize}
+% \item redefined \cmd{\setistmathTF*} to make it work with basic text font styles
+% \begin{itemize}
+% \item \cmd{\istownertextfont}, \cmd{\istactionlabeltextfont}, \cmd{\istpayofftextfont}
+% \item all working only in text mode
+% \end{itemize}
+% \item introduced \cmd{\xtcureslopedlabelsNS} and \cmd{\xtcureslopedlabelsEW} to resolve a \Tikz\ conflict to sloped labels
+% \begin{itemize}
+% \item (internally) added \cmd{\xtlevdistadj} and \cmd{\xtsibdistadj}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99m (2018/12/21)
+% \begin{itemize}
+% \item added starred versions that work with \cmd{\setistmathTF}
+% \begin{itemize}
+% \item \cmd{\xtInfoset*}, \cmd{\xtInfosetO*}, \cmd{\xtCInfoset}, \cmd{\xtCInfosetO}
+% \item \cmd{\xtOwner*}, \cmd{\xtActionLabel*}, \cmd{\xtPayoff*}, \cmd{\xtInfosetOwner*}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99l (2018/12/18)
+% \begin{itemize}
+% \item changed the order and the type of argument delimiters for input consistency
+% \begin{itemize}
+% \item \cmd{\xtCInfosetO}, \cmd{\cmtmAinfosetO}, and their related macros
+% \item effective from \xw{v.1.99l}
+% \begin{itemize}
+% \item not consistent with the earlier versions of update
+% \item but intact with the \xw{version 1}
+% \end{itemize}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99k (2018/12/15)
+% \begin{itemize}
+% \item introduced \cmd{\xtCInfosetO} for bubble type curved information sets
+% \begin{itemize}
+% \item (internally) added \cmd{\xtPrototypeForCInfosetO} -- only for \cmd{\xtCInfosetO}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99j (2018/12/11)
+% \begin{itemize}
+% \item introduced \cmd{\xtCInfoset} for curved information sets
+% \begin{itemize}
+% \item (internally) added \cmd{\istgameScaleCallTestAndAdjust} (must be used in a group)
+% \item (internally) added \cmd{\setxtCIAngleAccordingtoGrowswapCall}
+% \end{itemize}
+% \end{itemize}
+%\item v1.99i (2018/12/08)
+% \begin{itemize}
+% \item (macro name change, effective from \xw{v1.99i}) all `\xw{cntmarc}' changed to `\xw{cntmA}'
+% \item introduced \cmd{\cntmAInfosetO}
+% \item introduced \cmd{\cntmAexpostShowEndPoints}
+% \item introduced \cmd{\istbA(*)} and \cmd{\istbAt(*)}
+% \end{itemize}
+%\item v1.99h (2018/11/07)
+% \begin{itemize}
+% \item changed the default position of a continuum arc from \xw{.5} to \xw{1}
+% \item introduced \cmd{\cntmarcInfoset}
+% \end{itemize}
+%\item v1.99g (2018/09/30)
+% \begin{itemize}
+% \item put \cmd{\xtShowArrows} and \cmd{\xtShowMidArrows} into \cmd{\istB}
+% \item found issues with \cmd{\xtShowArrows} and \cmd{\xtShowMidArrows} related to \xw{postaction}
+% \item added the arrow end shorten option to \cmd{\xtCommentTo} and \cmd{\xtCommentFrom}.
+% \item (internal) minor changes
+% \begin{itemize}
+% \item redefined \cmd{\setistSolidNodeStyle} to keep consistency with other node styles
+% \item redefined \cmd{\setistNullNodeStyle} to keep consistency with other node styles
+% \end{itemize}
+% \end{itemize}
+%\item v1.99f (2018/09/19)
+% \begin{itemize}
+% \item (internally) redefined \cmd{\cntmistb} and \cmd{\cntmarcistb} to resolve endpoints problems
+% \begin{itemize}
+% \item (internally) added \cmd{\cntmOUTERistb} and \cmd{\cntmarcOUTERistb}
+% \item (internally) removed \cmd{\cntmendpointsShow} and \cmd{\cntmendpointsPrint}
+% \item (internally) redefined \cmd{\istrootcntm} and its variants accordingly
+% \end{itemize}
+% \end{itemize}
+%\item v1.99e (2018/09/15)
+% \begin{itemize}
+% \item introduced \cmd{\xtShowArrows} and \cmd{\xtHideArrows(*)}
+% \item introduced \cmd{\setxtshowarrows}
+% \item introduced \cmd{\xtShowMidArrows} and \cmd{\xtHideMidArrows}
+% \end{itemize}
+%\item v1.99d (2018/09/13)
+% \begin{itemize}
+% \item introduced \cmd{\setxtarrowtips} with a tikzstyle \xw{->-}
+% \item introduced new arrow styles: \xw{->>-}, \xw{->>>-}, \xw{-o-}, and \xw{-x-}
+% \end{itemize}
+%\item v1.99c (2018/09/09)
+% \begin{itemize}
+% \item introduced \cmd{\cntmistb} and \cmd{\cntmarcistb}
+% \item redefined \cmd{\cntmdistance} to check if \cmd{\cntmactsibdist} is called or not
+% \item (internally) added \cmd{\cntmendpointsShow}
+% \begin{itemize}
+% \item redefined \cmd{\xtShowEndPoints} and \cmd{\xtHideEndPoints} accordingly
+% \item introduced \cmd{\xtShowEndPoints*} (for outermost branches of a continuum)
+% \end{itemize}
+% \item (internally) added \cmd{\cntmendpointsPrint}
+% \begin{itemize}
+% \item redefined \cmd{\istrootcntm} and its variants accordingly
+% \end{itemize}
+% \end{itemize}
+%\item v1.99b (2018/09/07)
+% \begin{itemize}
+% \item redesigned \cmd{\istrootcntm} and its variants
+% \begin{itemize}
+% \item removed \cmd{\ISTCntm(')} and \cmd{\ISTCntmArc(')}
+% \end{itemize}
+% \item introduced \cmd{\cntmdraw}, \cmd{\cntmdrawset} and related macros
+% \item redfined \cmd{\cntmdistance} to check if \cmd{\cntmactsibdist} is called or not
+% \end{itemize}
+%\item v1.99a (2018/09/05)
+% \begin{itemize}
+% \item introduced \cmd{\setistgameshorten} (for \env{istgame} environment option)
+% \end{itemize}
+%\item v1.98 (2018/09/03)
+% \begin{itemize}
+% \item redefined \cmd{\istrootcntm(arc)} to make it work with \cmd{\setistmathTF(*)}
+% \item redefined \cmd{\istrootocntm(arc)} to make it work with \cmd{\setistmathTF(*)}
+% \end{itemize}
+%\item v1.97 (2018/09/02)
+% \begin{itemize}
+% \item redefined \cmd{\istroot(o)} to resolve tex expansion problems
+% \item redefined \cmd{\istrootcntm(arc)} to resolve tex expansion problems
+% \item redefined \cmd{\istrootocntm(arc)} to resolve tex expansion problems
+% \item redefined the \env{istgame} environment to add \xw{[shorten >=0pt]} if \xw{[->]} exists
+% \end{itemize}
+%\item 1.96 (2018/08/30)
+% \begin{itemize}
+% \item minor changes
+% \begin{itemize}
+% \item altered the default sibling distance of \cmd{\xtdistance} from \xw{15mm} to \xw{\levdist}
+% \item altered initial options for \xw{null}, \xw{solid}, and \xw{hollow} nodes (added \xw{thin}, \xw{solid})
+% \item added \xw{text depth=.25ex} for some definitions
+% \end{itemize}
+% \end{itemize}
+%\item v1.95 (2018/08/27)
+% \begin{itemize}
+% \item resolved dimension issues for \cmd{\cntmdistance}
+% \item added \cmd{\xtOwner*}, \cmd{\xtActionLabel*}, \cmd{\xtPayoff*} (working with \cmd{\setistmathTF(*)})
+% \end{itemize}
+%\item v1.94 (2018/08/22)
+% \begin{itemize}
+% \item resolved tex expansion issues in the macros for a continuum of branches
+% \end{itemize}
+%\item v1.93 (2018/08/19)
+% \begin{itemize}
+% \item introduced \cmd{\setistmath} to set input mode for owners, action labels, and payoffs
+% \item introduced \cmd{\setistmath*} to print action labels in italics, in case of text mode
+% \item (internally) added \cmd{\istownerstyle}, \cmd{\istactionlabelstyle}, and \cmd{\istpayoffstyle}
+% \end{itemize}
+%\item v1.92 (2018/08/17)
+% \begin{itemize}
+% \item redesigned the \env{istgame} environment
+% \begin{itemize}
+% \item to extract the number input from \xw{scale}, \xw{xscale}, or \xw{yscale}
+% \item added \cmd{\xtscale}, \cmd{\xtxscale}, and \cmd{\xtyscale} to save scale option values
+% \end{itemize}
+% \item tested to apply scale values to improve the result of \cmd{\xtInfosetO}
+% \end{itemize}
+%\item v1.91 (2018/08/16)
+% \begin{itemize}
+% \item many changes to resolve expansion problems
+% \begin{itemize}
+% \item redefined \cmd{\cntmset}, \cmd{\cntmarcset}, and related macors
+% \item redifined \cmd{\cntmlevdist} and \cmd{\cntmsibdist} as lengths
+% \end{itemize}
+% \end{itemize}
+%\item v1.9 (2018/08/11)
+% \begin{itemize}
+% \item introduced \cmd{\cntmarcplotfactorset}
+% \end{itemize}
+%\item v1.8 (2018/08/09)
+% \begin{itemize}
+% \item made possible to use the directional abbreviations with \cmd{\xtInfoset}
+% \item introduced \cmd{\istrootocntm} and \cmd{\istrootocntmarc} (oval versions)
+% \end{itemize}
+%\item v1.7 (2018/08/04)
+% \begin{itemize}
+% \item introduced \cmd{\istbm}
+% \item introduced \cmd{\setistNewNodeStyle}
+% \end{itemize}
+%\item v1.6 (2018/08/01)
+% \begin{itemize}
+% \item resigned \cmd{\cntmdistance} (now ready for users)
+% \begin{itemize}
+% \item added \cmd{\cntmactsibdist} to distinguish it from \cmd{\cntmsibdist}
+% \end{itemize}
+% \item added \cmd{\cntmdistance*} to incorporate with \cmd{\xtdistance}
+% \item introduced \cmd{\istrootcntmA(')}
+% \begin{itemize}
+% \item added (internally) \cmd{\ISTCntmArc(')}
+% \item added \cmd{\cntmarcset}
+% \end{itemize}
+% \item introduced \cmd{\istrootcntm(')}
+% \begin{itemize}
+% \item added (internally) \cmd{\ISTCntm(')}
+% \end{itemize}
+% \item (internally) renamed \cmd{\istCntmRoot(Arc)} to \cmd{\obsoleteISTCntm(Arc)}
+% \end{itemize}
+%\item v1.5 (2018/07/26)
+% \begin{itemize}
+% \item introduced \cmd{\setxtinfosetlayer}
+% \item introduced \cmd{\setxtsubgamelayer}
+% \end{itemize}
+%\item v1.4 (2018/07/12)
+% \begin{itemize}
+% \item completely rewrote \cmd{\xtInfosetO} to deal with sloped information sets
+% \begin{itemize}
+% \item removed \cmd{\xtInfosetO'} and \cmd{\xtInfoset'} (critical change for users!)
+% \end{itemize}
+% \end{itemize}
+%\item v1.3 (2018/07/06)
+% \begin{itemize}
+% \item (internally) renamed some macros (such as \cmd{\xt@...})
+% \item (internally) renamed \cmd{\xtaction} to \cmd{\istaction}
+% \item (internally) renamed \cmd{\xtpayoff} to \cmd{\istpayoff}
+% \item (internally) renamed \cmd{\istRoot(O)} to \cmd{\ISTRoot(O)}
+% \end{itemize}
+%\item v1.2 (2017/12/11)
+% \begin{itemize}
+% \item replaced \cmd{\istb.} by \cmd{\istbt} (critical change for users!)
+% \begin{itemize}
+% \item \cmd{\istb} redefined accordingly
+% \item this is the cost of introducing \cmd{\istB(*)}
+% \end{itemize}
+% \item introduced \cmd{\istB(*)} to deal with dual action labels
+% \item added \cmd{\istbt(*)} and \cmd{\istBt(*)}
+% \item added \xw{text depth=.25ex} as an option to \cmd{\istroot} and \cmd{\istrooto}
+% \end{itemize}
+%\item v1.1 (2017/10/02)
+% \begin{itemize}
+% \item introduced \cmd{\xtCommentTo} and \cmd{\xtCommentFrom}
+% \item introduced \cmd{\xtTimeLineH(')}
+% \item redefined \cmd{\xtActionLabel} to deal with sloped labels
+% \item replaced \cmd{\tikzstyle} by \cmd{\tikzset}
+% \end{itemize}
+\item v1.0 (2017/09/04)
+ \begin{itemize}
+ \item introduced \cmd{\cntmlevdist} and \cmd{\cntmsibdist}
+ \item introduced \cmd{\cntmdistance}
+ \item redefined related marcos
+ \item package document done
+ \end{itemize}
+%%%\item v1.0 (2017/09/04) ready to submit to CTAN
+%%% \begin{itemize}
+%%% \item introduced \cmd{\cntmlevdist} and \cmd{\cntmsibdist}
+%%% \item introduced \cmd{\cntmdistance} (for internal use)
+%%% \item redefined related marcos.
+%%% \item package document done
+%%% \end{itemize}
+%%%\item v0.99g (2017/08/21)
+%%% \begin{itemize}
+%%% \item redefined the \env{istgame} environment to add \xw{>=stealth} as default
+%%% \item added \xw{text depth=.25ex} as an option to \cmd{\istb} to get better alignment of action labels
+%%% \end{itemize}
+%%%\item v0.99f (2017/08/02)
+%%% \begin{itemize}
+%%% \item redefined \cmd{\xtInfosetO(')}
+%%% \begin{itemize}
+%%% \item added \verb+\begin{scope}[on background layer]...\end{scope}+
+%%% \end{itemize}
+%%% \end{itemize}
+%%%\item v0.99e (2017/08/01)
+%%% \begin{itemize}
+%%% \item introduced the prime(\xw{'}) versions to deal with \xw{grow'} (this is the swap version in \TikZ)
+%%% \item redefined \cmd{\istroot(')}
+%%% \item defined \cmd{\istrooto(')} to replace \cmd{\istroot*}
+%%% \begin{itemize}
+%%% \item \cmd{\istroot*} completely replaced by \cmd{\istrooto}
+%%% \end{itemize}
+%%% \item redefinde \cmd{\istcntm}
+%%% \item defined \cmd{\istcntmarc}
+%%% \begin{itemize}
+%%% \item \cmd{\istcntm*} completely replaced by \cmd{\istcntmarc}
+%%% \end{itemize}
+%%% \item redefined \cmd{\xtInfoset(')} and \cmd{\xtInfosetOwner(')}
+%%% \item introduced \cmd{\xtInfosetO(')}
+%%% \begin{itemize}
+%%% \item \cmd{\xtInfoset*} completely replaced by \cmd{\xtInfosetO}
+%%% \end{itemize}
+%%% \item introduced \cmd{\xt@growswap} introduced
+%%% \item redefined \cmd{\xtNode} accordingly
+%%% \end{itemize}
+%%%\item v0.99d (2017/07/27)
+%%% \begin{itemize}
+%%% \item defined \cmd{\xtSubgameBox(*)} and \cmd{\xtSubgameOval(*)} to express a subgame
+%%% \end{itemize}
+%%%\item v0.99c (2017/07/20)
+%%% \begin{itemize}
+%%% \item defined \cmd{\xtgrow} to deal with going `clockwise' of branch arrangement
+%%% \item defined \cmd{\setxtgrowkey} to change between \xw{grow} and \xw{grow'}
+%%% \item introduced \cmd{\setistgrowdirection'} by redefining \cmd{\setistgrowdirection}
+%%% \item updated `related macros' accordingly
+%%% \end{itemize}
+%%%\item v0.99b (2017/07/16)
+%%% \begin{itemize}
+%%% \item renamed \xw{zero node} as \xw{plain node}
+%%% \item added \cmd{\setistPlainNodeStyle}
+%%% \item defined \cmd{\xtNode*} (for a terminal node text with a plain node)
+%%% \item redefined \cmd{\xt<...>NodeStyle} (now all arguments are optional)
+%%% \item renamed \cmd{\isthorizontallabelshift} as \cmd{\istactionlabelxshift}, with default \xw{1pt}
+%%% \item renamed \cmd{\istverticallabelshift} as \cmd{\istactionlabelyshift}, with default \xw{2pt}
+%%% \end{itemize}
+%%%\item v0.99a (2017/03/10)
+%%% \begin{itemize}
+%%% \item started rewriting package manual
+%%% \item introduced \cmd{\istb.}\ (for terminal nodes)
+%%% \item redefined \cmd{\xtShowTerminalNodes}
+%%% \item introduced \cmd{\xtShowEndPoints} and \cmd{\xtHideEndPoints}
+%%% \item redefined \cmd{\xtInfoset*}, with \cmd{\xtdefaultinfosep} added
+%%% \end{itemize}
+%%%\item v0.9 (2017/02/13)
+%%% \begin{itemize}
+%%% \item some internal macro names changed (\cmd{\xtnode}, \cmd{\xttnode},\cmd{\xtshowtnode})
+%%%% \item conflict with \pkg{tikz-qtree} resolved. (\env{istgame} differs from \env{tikzpicture} with \pkg{tikz-qtree})
+%%%% \item \cmd{\setistbranchanchors} added
+%%% \item added \xw{zero node}
+%%% \end{itemize}
+%%%\item v0.8 (2017/01/17)
+%%% \begin{itemize}
+%%% \item macro names changed
+%%% \begin{itemize}
+%%% \item \cmd{\xtdistance}: prefix `\xw{x}' changed to `\xw{xt}' meaning `extensive tree'
+%%% \item \cmd{\xtInfoset(*)}, \cmd{\xtInfosetOwner}, \cmd{\xtActionLabel}, \cmd{xtOwner}, \cmd{\xtPayoff}, \cmd{\xtNode}
+%%% \item \cmd{\xtShowTerminalNodes}, \cmd{\xtHideTerminalNodes}
+%%% \item \cmd{\xtlevdist}, \cmd{\xtsibdist}
+%%% \end{itemize}
+%%% \item \cmd{\xtNode} redefined
+%%% \item some internal macro names changed (including \cmd{\xtpayff}, \cmd{\xtmove})
+%%% \item node styles redefined
+%%% \item \cmd{\setist<Solid>NodeStyle} added for <Various> node styles
+%%% \item \cmd{\setistdefaultnodecolor}, \cmd{setistdefaultnodebgcolor} added
+%%% \end{itemize}
+\end{itemize}
+
+
+\section{Acknowledgement}
+
+The basic idea of the \pkg{istgame} package came from Osborne's \pkg{egameps} package and Chen (2013).
+The update of the package \pkg{istgame} to \xw{version 2.0} is partly motivated by the questions and discussions on the subject of \xw{game tree} at \url{https://tex.stackexchange.com/}, where Alan Munn is thanked for his kind interest in the \pkg{istgame} package.
+Special thanks go to Kangsoo Kim of KTUG for his great help in using \pkg{expl3} to simplify the appearance and the usage of the macros, and to resolve the issues on \TeX's expansion.
+
+
+\section{References}
+\hpara{}Chen, H.~K.~(2013), ``Drawing Game Trees with \TikZ,'' \url{http://www.sfu.ca/~haiyunc/notes/Game_Trees_with_TikZ.pdf}.
+
+\hpara{}Cho, I-S.~(2017), ``\pkg{istgame}: Drawing Game Trees with \TikZ,'' in Korean TeX Society, \emph{\TeX, Beyond the World of Typesetting}, Seoul: Kyungmoonsa, 203--237.
+
+\hpara{}Osborne, M.~J.~(2004a), ``Manual for \pkg{egameps.sty},'' Version 1.1, \url{http://texdoc.net/texmf-dist/doc/latex/egameps/egameps.pdf}
+
+\hpara{}\uline{\hphantom{Osborne, M.~J}}~(2004b), \emph{An Introduction to Game Theory}, New York: Oxford.
+
+\hpara{}Tantau, T.~(2015), ``\TikZ\ and PGF: Manual for version 3.0.1a,'' \url{http://sourceforge.net/projects/pgf}.
+
+%\section*{Discussions (in Korean) on KTUG board}
+%
+%\begin{itemize}
+%\item Drawing Game Trees 1: \url{http://www.ktug.org/xe/index.php?document_srl=207287}
+%
+%\item Drawing Game Trees 1-1: \url{http://www.ktug.org/xe/index.php?document_srl=207513}
+%
+%\item Drawing Game Trees 1-2:
+%\url{http://www.ktug.org/xe/index.php?document_srl=208286}
+%
+%\item Drawing Game Trees 2: \url{http://www.ktug.org/xe/index.php?document_srl=212043}
+%
+%\item Drawing Game Trees 2-1:
+%\url{http://www.ktug.org/xe/index.php?document_srl=212225}
+%
+%\item Drawing Game Trees 2-2:
+%\url{http://www.ktug.org/xe/index.php?document_srl=212319}
+%\end{itemize}
diff --git a/graphics/pgf/contrib/istgame/istgame-doc.pdf b/graphics/pgf/contrib/istgame/istgame-doc.pdf
new file mode 100644
index 0000000000..5c0dcfea07
--- /dev/null
+++ b/graphics/pgf/contrib/istgame/istgame-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/istgame/istgame-doc.tex b/graphics/pgf/contrib/istgame/istgame-doc.tex
new file mode 100644
index 0000000000..af88f6a5d2
--- /dev/null
+++ b/graphics/pgf/contrib/istgame/istgame-doc.tex
@@ -0,0 +1,193 @@
+%!TEX program = arara
+% arara: xelatex: {synctex: yes}
+% arara: xelatex: {synctex: yes}
+% arara: makeindex: {style: istgame}
+% arara: xelatex: {synctex: yes}
+% arara: xelatex: {synctex: yes}
+
+\def\tmpdate{2019/01/27} % final
+\def\tmpversion{2.0}
+
+\def\printtikztreetest{}
+\def\printtest{}
+\def\printdoc{}
+%\renewcommand\printtikztreetest{\input{istgame_test_tree}}
+%\renewcommand\printtest{\input{istgame_test}}
+\renewcommand\printdoc{\include{istgame-doc-v2.0}}
+
+\documentclass[a4paper,amsmath]{oblivoir}
+
+\usepackage{istgame}
+
+\usepackage{fapapersize}
+\usefapapersize{*,*,30mm,*,28mm,*}
+\setsecnumdepth{subsubsection}
+\settocdepth{subsubsection}
+\setlength\cftsubsubsectionindent{4.5em}
+
+\renewcommand\contentsname{Table of Contents}
+\renewcommand\figurename{Figure}
+\renewcommand\tablename{Table}
+\renewcommand\abstractname{Abstract}
+\renewcommand\indexname{Index}
+\renewcommand\pagerefname{\kern-4pt}
+
+\hypersetup{pdfborder={0 0 0}} % to suppress the hyperlink red box
+
+\usepackage{mathtools}
+%\usepackage{xparse} %% oblivoir loads xparse
+%\usepackage{tikz} %% istgame loads tikz
+\usepackage{makecell}
+\usepackage{capt-of}
+\usepackage{multido}
+\usepackage[normalem]{ulem} % [normalem] to correct the pdf bookmark broken characters
+\usepackage{idxlayout}
+%\usepackage{url}
+
+%\setistdefaultnodedrawcolor{red} % test
+%\setistdefaultnodefillcolor{black!16} % (try for macos mohave dark mode, TeXShop background color)
+
+\usepackage{tcolorbox}
+\tcbuselibrary{listings,breakable}
+ \tcbset{breakable,listing above text,center upper,sidebyside gap=10pt,
+ lower separated=true,center lower,
+ listing options={
+ style=tcblatex,
+ keywordstyle=\color{blue},
+ commentstyle=\color{black!20!green},
+ morekeywords={
+ istgamefontsize,setistgamefontsize,setistgamearrowendshorten,
+ istgame,istroot,istrooto,istb,endist,xtdistance,istbm,
+ istbt,istB,istBt,istbA,cntmAInfoset,cntmAInfosetO,
+ istrootcntm,istrootcntmA,istrootocntm,istrootocntmA,
+ setistgrowdirection,istgrowdirection,
+ setistmathTF,istownerlmathtrue,istownermathfalse,istactioinlabelmathtrue,
+ istactionlabelmathfalse,istpayoffmathtrue,istpayoffmathfalse,
+ cntmdistance,cntmlevdist,cntmsibdist,
+ cntmApreset,cntmistb,cntmAistb,cntmAexpostShowEndPoints,
+ xtInfoset,xtInfosetO,xtActionLabel,
+ xtSubgame,xtSubgameBox,xtSubgameOval,
+ xtgrow,setxtgrowkey,xtInfosetOwner,xtOwner,xtPayoff,xtNode,
+ xtALPush,xtALShift,
+ xtShowEndPoints,xtHideEndPoints,
+ xtShowTerminalNodes,xtHideTerminalNodes,
+ xtTimeLineH,xtTimeLineV,xtCommentTo,xtCommentFrom,xtShowArrows,xtHideArrows,
+ xtlevdist,xtsibdist,
+ xtShowArrows,xtHideArrows,xtShowMidArrows,xtHideMidArrows,
+ setxtshowarrows,setxtmidarrows,setxtshowmidarrows,
+ setxtinfosetlayer,setxtsubgamelayer,
+ setistNewNodeStyle,
+ setistDecisionNodeStyle,setistOvalNodeStyle,
+ setistSolidNodeStyle,setistHollowNodeStyle,
+ setistEllipseNodeStyle,setistNullNodeStyle,setistRectangleNodeStyle,
+ xtALpush,xtALshift,
+ xtdefaultsubrootshiftoval,
+ tikzstyle,draw,coordinate,foreach,setlength,
+ NewDocumentCommand,NewDocumentEnvironment,IfBooleanTF,tikzset,
+ xtCInfoset,xtCInfosetO,xtCInfosetOTurnX,
+ cntmpreset,cntmApreset,cntmAlayerpreset
+ setxtinfosetstyle,setxtarrowtips,setxtinfosetstyle
+ }
+ }
+ }
+
+%\usepackage{tikz-qtree} %%% DO NOT USE
+% or, add the following in the option
+% [ edge from parent path={(\tikzparentnode) -- (\tikzchildnode)} ]
+
+
+\linespread{1}
+
+\newcommand*\Tikz{Ti\textit{k}Z}
+\let\TikZ\Tikz
+
+\newenvironment{keywords}{%
+ \par\vskip2pt
+ \noindent\hangfrom{\textsc{Keywords: }}%
+}
+
+\NewDocumentEnvironment{mytcblisting}{O{}}
+{ \medskip
+ \begin{tcblisting}{#1}
+}
+{ \end{tcblisting}
+ \medskip
+}
+
+\NewExpandableDocumentCommand\xcol{mO{c|}m}
+ {\multicolumn{#1}{#2}{\ensuremath{#3}}}
+
+%% more lazy macros
+\newcommand\xbigskip[1]{\multido{}{#1}\bigskip}
+\newcommand\xmedskip[1]{\multido{}{#1}\bigskip}
+\newcommand\xsmallskip[1]{\multido{}{#1}\bigskip}
+\def\hpara{\hangpara{1.52em}{1}}
+\def\listdivider{\leavevmode\smallskip\hrule width 1.5em\smallskip}
+
+\newcommand\remark{\noindent \textbf{Remark: }}
+\newcommand\warning{\noindent \textbf{Warning: }}
+
+%% index
+%\renewcommand\cmd[1]{\cmdprint{#1}}
+\ExplSyntaxOn
+\renewcommand \cmd [1]
+{
+ \texorpdfstring
+ { \cmdprint {#1} }
+ { \textbackslash \cs_to_str:N #1 }
+}
+\ExplSyntaxOff
+
+\newcommand\xw[1]{\cmd{#1}}
+\newcommand\xttw[1]{\texttt{#1}}
+\newcommand\pkg[1]{\textsf{#1}}
+\newcommand\env[1]{\textsf{#1}}
+\newcommand\isw[1]{#1\index{#1}} % simple word in text/index
+\newcommand\ixsw[1]{\cmd{#1}\index{#1}} % texttt in text, simple word in index
+\newcommand\ixw[1]{\textsf{#1}\index{#1@\textsf{#1}}} % textsf in text/index
+\newcommand\ixttw[1]{\texttt{#1}\index{#1@\texttt{#1}}} % texttt in text/index
+\newcommand\ipkg[1]{\textsf{#1}\index{#1@\textsf{#1}}}
+\newcommand\ienv[1]{\textsf{#1}\index{#1@\textsf{#1}}}
+
+\makeatletter
+\newcommand{\icmd}[1]{\cmdprint{#1}%
+ \index{\expandafter\@gobble\string#1@\string\cmdprint{\string#1}}}
+\makeatother
+
+\makeindex
+
+\title{\texttt{istgame.sty} \\
+Draw Game Trees with \Tikz}
+\author{In-Sung Cho \\ \texttt{ischo <at> ktug.org}}
+\date{Economics, Kongju National University\\[3pt] \tmpdate\quad version \tmpversion}
+
+\def\tmpclearpage{\clearpage}
+
+%%=======================================================================
+\begin{document}
+
+\frontmatter
+\maketitle
+
+\renewcommand{\abstracttextfont}{\normalfont\small\noindent\ignorespaces}
+\begin{abstract}
+This is a \LaTeX{} package that provides macros based on \Tikz\ to draw a game tree. The main idea underlying the core macros here is the completion of a whole tree by using a sequence of simple `parent-child' tree structures, with no longer nested relations involved like the use of grandchildren or great-grandchildren.
+With the \ipkg{istgame} package, you can draw a game tree as easily as drawing a game tree with pen and paper.
+
+\begin{keywords}
+game trees, nodes, branches, information sets, continuum of branches, subgames
+\end{keywords}
+\end{abstract}
+
+\tableofcontents*
+
+\mainmatter
+
+
+\printtikztreetest
+\printtest
+\printdoc
+
+\printindex
+
+\end{document}
diff --git a/graphics/pgf/contrib/istgame/istgame.ist b/graphics/pgf/contrib/istgame/istgame.ist
new file mode 100644
index 0000000000..813fdbce59
--- /dev/null
+++ b/graphics/pgf/contrib/istgame/istgame.ist
@@ -0,0 +1,16 @@
+preamble "\\begin{theindex}\n
+\\def\\hindexhead#1{\\ifcase#1ㄱ\\or ㄴ\\or ㄷ\\or ㄹ\\or
+ ã…\\or ã…‚\\or ã……\\or ã…¿\\or ã…‡\\or ã†\\or ã…ˆ\\or ã…Š\\or ã…‹\\or
+ ã…Œ\\or ã…\\or ã…Ž\\or ㆆ\\or ã…\\or ã…‘\\or ã…“\\or ã…•\\or ã…—\\or
+ ã…›\\or ã…œ\\or ã… \\or ã…¡\\or ã…£\\or ã†\\else 종성\\fi}\n\n"
+
+headings_flag 1
+group_skip "\n\n\\indexspace\n"
+item_0 "\n\\item "
+heading_prefix "{\\sffamily〠"
+heading_suffix " 】}\\nopagebreak\n"
+%symhead_positive "Symbols"
+%numhead_positive "Numbers"
+delim_0 "\\quad "
+delim_1 "\\quad "
+delim_2 "\\quad " \ No newline at end of file
diff --git a/graphics/pgf/contrib/istgame/istgame.sty b/graphics/pgf/contrib/istgame/istgame.sty
new file mode 100644
index 0000000000..04d00fc444
--- /dev/null
+++ b/graphics/pgf/contrib/istgame/istgame.sty
@@ -0,0 +1,3451 @@
+%% file: istgame.sty
+%%
+%% Drawing Game Trees with TikZ
+%%
+%% (C) Copyright 2015-2019 In-Sung Cho <ischo at ktug.org>
+%%
+%% This work may be distributed and/or modified
+%% under the conditions of the LaTeX Project Public License,
+%% either version 1.3c of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt.
+%%
+%% -------------------------------------------------
+\ProvidesPackage{istgame}[2019/01/27 v2.0 Draw Game Trees with TikZ]
+
+% expl3,xparse: LPPL
+% tikz: LPPL and/or GNU GPL
+\RequirePackage{expl3,xparse,tikz}
+\usetikzlibrary
+{
+ trees , calc , arrows , shapes , positioning ,
+ backgrounds , % for information sets and subgames
+ fit , % for \xtSubgameBox(Oval)
+ decorations.markings , % for \xtShowArrows and middle arrows
+ patterns , intersections % for additional use
+}
+
+% backgrounds
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{behind}
+\pgfdeclarelayer{above}
+\pgfdeclarelayer{foreground}
+
+\pgfsetlayers{background,behind,main,above,foreground}
+
+
+%% prefixes for macros and defaults
+% \ist<...> stands for "an insung's simple tree" (or "it's a simple tree")
+% \xt<...> stands for "extensive tree"
+% \xtCI stands for "curved information set"
+% \cntm<...> stands for "continuum"
+% \cntmA<...> stands for "continuum arc"
+% \istdefault@<...>
+% \xtdefault@<...>
+% \xtCI@default@<...>
+% \cntm@default@<...>
+% \cntmA@default@<...>
+
+
+%% node styles
+
+\ExplSyntaxOn
+
+% basics (in node styles)
+\def\istdefault@node@innersep{1pt} %% default node inner sep
+\def\istdefault@node@outersep{0pt} %% default node outer sep
+\def\istdefault@node@drawcolor{black} %% default node color
+\def\istdefault@node@fillcolor{white} %% default node background color
+% (can be used in preamble)
+\newcommand*\setistdefaultnodeinnersep[1]{\renewcommand*\istdefault@node@innersep{#1}}
+\newcommand*\setistdefaultnodeoutersep[1]{\renewcommand*\istdefault@node@outersep{#1}}
+\newcommand*\setistdefaultnodefillcolor[1]{\renewcommand*\istdefault@node@fillcolor{#1}}
+\newcommand*\setistdefaultnodedrawcolor[1]{\renewcommand*\istdefault@node@drawcolor{#1}}
+
+% plain node: definition
+\newcommand*\istplainnodeinnersep { \istdefault@node@innersep } % 1pt by default
+\newcommand*\istplainnodeoutersep { \istdefault@node@outersep } % 0pt by default
+
+% {inner sep} {outer sep}
+\NewDocumentCommand \setistPlainNodeStyle
+{ G{\istdefault@node@innersep} G{\istdefault@node@outersep} }
+{
+ \renewcommand*\istplainnodeinnersep {#1} % 1pt by default
+ \renewcommand*\istplainnodeoutersep {#2} % 0pt by default
+}
+\tikzset{ plain~node /.style =
+ {
+ draw = none ,
+ inner~sep = \istplainnodeinnersep , outer~sep = \istplainnodeoutersep
+ }
+}
+
+% null node: definition
+\newcommand*\istnullnodedrawcolor { \istdefault@node@drawcolor } % (#1) black
+\def\istdefault@null@nodesize { .2pt } % default of (#2)
+\def\istdefault@null@node@fillcolor { \istnullnodedrawcolor } % fill color = draw color
+\newcommand*\istnullnodesize { \istdefault@null@nodesize } % (#2)
+\newcommand*\istnullnodefillcolor { \istdefault@node@drawcolor } % (#3) <= black (o.k.)
+\newcommand*\istnullnodefillopacity { 1 } % (#4)
+
+% [draw color] {minimum size} [fill color] [fill opacity]
+\NewDocumentCommand \setistNullNodeStyle
+{ O{\istdefault@node@drawcolor} G{\istdefault@null@nodesize} O{\istdefault@null@node@fillcolor} O{1} }
+{
+ \renewcommand*\istnullnodedrawcolor{#1}
+ \renewcommand*\istnullnodesize{#2} % .2pt by default
+ \IfNoValueTF {#3}
+ {
+ \renewcommand*\istnullnodefillcolor{#1} % same as {#1} with default black
+ }
+ {
+ \renewcommand*\istnullnodefillcolor{#3}
+ }
+ \renewcommand*\istnullnodefillopacity{#4}
+}
+\tikzset{ null~node /.style =
+ {
+ circle , draw , thin , solid ,
+ inner~sep = 0pt , outer~sep = \istdefault@node@outersep ,
+ minimum~size = \istnullnodesize ,
+ draw = \istnullnodedrawcolor ,
+ fill = \istnullnodedrawcolor ,
+ fill~opacity = \istnullnodefillopacity
+ }
+}
+
+% solid node: definition
+\newcommand*\istsolidnodedrawcolor { \istdefault@node@drawcolor } % (#1) black
+\def\istdefault@solid@node@size { 2.4pt } % default of (#2)
+\def\istdefault@solid@node@fillcolor { \istsolidnodedrawcolor }
+\newcommand*\istsolidnodesize { \istdefault@solid@node@size } % (#2)
+\newcommand*\istsolidnodefillcolor { \istdefault@solid@node@fillcolor } % (#3) <= black (o.k.)
+\newcommand*\istsolidnodefillopacity { 1 } % (#4)
+
+% [draw color] {minimum size} [fill color] [fill opacity]
+\NewDocumentCommand \setistSolidNodeStyle
+{ O{\istdefault@node@drawcolor} G{\istdefault@solid@node@size} O{\istdefault@solid@node@fillcolor} O{1} }
+{
+ \renewcommand*\istsolidnodedrawcolor{#1}
+ \renewcommand*\istsolidnodesize{#2}
+ \IfNoValueTF {#3}
+ {
+ \renewcommand*\istsolidnodefillcolor{#1} % same as {#1} with default black
+ }
+ {
+ \renewcommand*\istsolidnodefillcolor{#3}
+ }
+ \renewcommand*\istsolidnodefillopacity{#4}
+}
+\tikzset{ solid~node /.style =
+ {
+ circle , draw , thin , solid ,
+ inner~sep = 0pt , outer~sep = \istdefault@node@outersep ,
+ minimum~size = \istsolidnodesize ,
+ draw = \istsolidnodedrawcolor ,
+ fill = \istsolidnodefillcolor ,
+ fill~opacity = \istsolidnodefillopacity
+ }
+}
+
+% decision node & terminal node
+\let\setistDecisionNodeStyle\setistSolidNodeStyle
+\let\setistTerminalNodeStyle\setistSolidNodeStyle
+
+% hollow node: definition
+\newcommand*\isthollownodedrawcolor { \istdefault@node@drawcolor } % (#1) black
+\def\istdefault@hollow@node@size { 2.8pt } % default of (#2)
+\newcommand*\isthollownodesize { \istdefault@hollow@node@size } % (#2)
+\newcommand*\isthollownodefillcolor { \istdefault@node@fillcolor } % (#3) white
+\newcommand*\isthollownodefillopacity { 1 } % (#4)
+
+% [draw color] {minimum size} [fill color] [fill opacity]
+\NewDocumentCommand \setistHollowNodeStyle
+{ O{\istdefault@node@drawcolor} G{\istdefault@hollow@node@size} O{\istdefault@node@fillcolor} O{1} }
+{
+ \renewcommand*\isthollownodedrawcolor{#1}
+ \renewcommand*\isthollownodesize{#2}
+ \renewcommand*\isthollownodefillcolor{#3}
+ \renewcommand*\isthollownodefillopacity{#4}
+}
+\tikzset{ hollow~node /.style =
+ {
+ circle , draw , thin , solid ,
+ inner~sep = 0pt , outer~sep = \istdefault@node@outersep ,
+ minimum~size = \isthollownodesize ,
+ draw = \isthollownodedrawcolor ,
+ fill = \isthollownodefillcolor ,
+ fill~opacity = \isthollownodefillopacity
+ }
+}
+
+% initial node & chance node
+\let\setistInitialNodeStyle\setistHollowNodeStyle
+\let\setistChanceNodeStyle\setistHollowNodeStyle
+
+% rectangle node: definition
+\newcommand*\istrectanglenodedrawcolor { \istdefault@node@drawcolor } %(#1) black
+\def\istdefault@rectangle@node@size { 4pt } % default of (#2)
+\newcommand*\istrectanglenodesize { \istdefault@rectangle@node@size } % (#2)
+\newcommand*\istrectanglenodefillcolor { \istdefault@node@fillcolor } % (#3) white
+\newcommand*\istrectanglenodefillopacity { 1 } % (#4)
+
+% [draw color] {minimum size} [fill color] [fill opacity]
+\NewDocumentCommand \setistRectangleNodeStyle
+{ O{\istdefault@node@drawcolor} G{\istdefault@rectangle@node@size} O{\istdefault@node@fillcolor} O{1} }
+{
+ \renewcommand*\istrectanglenodedrawcolor{#1}
+ \renewcommand*\istrectanglenodesize{#2}
+ \renewcommand*\istrectanglenodefillcolor{#3}
+ \renewcommand*\istrectanglenodefillopacity{#4}
+}
+\tikzset{ rectangle~node /.style =
+ {
+ rectangle , draw , thin , solid ,
+ inner~sep = 2pt , outer~sep = \istdefault@node@outersep ,
+ minimum~size = \istrectanglenodesize ,
+ draw = \istrectanglenodedrawcolor ,
+ fill = \istrectanglenodefillcolor ,
+ fill~opacity = \istrectanglenodefillopacity
+ }
+}
+
+% box node & square node
+\let\setistBoxNodeStyle\setistRectangleNodeStyle
+\let\setistSquareNodeStyle\setistRectangleNodeStyle
+
+% ellipse node: definition
+\newcommand*\istellipsenodedrawcolor { \istdefault@node@drawcolor } % (#1) black
+\def\istdefault@ellipse@node@size { 4.8pt } % default of (#2)
+\newcommand*\istellipsenodesize { \istdefault@ellipse@node@size } % (#2)
+\newcommand*\istellipsenodefillcolor { \istdefault@node@fillcolor } % (#3) white
+\newcommand*\istellipsenodefillopacity { 1 } % (#4)
+
+\NewDocumentCommand \setistEllipseNodeStyle
+{ O{\istdefault@node@drawcolor} G{\istdefault@ellipse@node@size} O{\istdefault@node@fillcolor} O{1} }
+{
+ \renewcommand*\istellipsenodedrawcolor{#1}
+ \renewcommand*\istellipsenodesize{#2}
+ \renewcommand*\istellipsenodefillcolor{#3}
+ \renewcommand*\istellipsenodefillopacity{#4}
+}
+\tikzset{ ellipse~node /.style =
+ {
+ ellipse , draw , thin , solid ,
+ inner~sep = 1.5pt , outer~sep = \istdefault@node@outersep ,
+ minimum~size = \istellipsenodesize ,
+ draw = \istellipsenodedrawcolor ,
+ fill = \istellipsenodefillcolor ,
+ fill~opacity = \istellipsenodefillopacity
+ }
+}
+
+% oval node
+\let\setistOvalNodeStyle\setistEllipseNodeStyle
+
+
+%% aliases: node styles
+\tikzset{ initial~node /.style = hollow~node }
+\tikzset{ chance~node /.style = hollow~node }
+\tikzset{ decision~node /.style = solid~node } % decision nodes
+\tikzset{ terminal~node /.style = solid~node } % terminal nodes
+\tikzset{ box~node /.style = rectangle~node }
+\tikzset{ square~node /.style = rectangle~node }
+\tikzset{ oval~node /.style = ellipse~node }
+
+
+% \setistNewNodeStyle
+% {node name} [node opt] {minimum size}
+\NewDocumentCommand \setistNewNodeStyle { m O{} G{6mm} }
+{
+ \tikzset
+ { #1 /.style =
+ {
+ - , circle , thin , solid ,
+ inner~sep = \istdefault@node@innersep ,
+ minimum~size = #3 ,
+ draw = \istdefault@node@drawcolor ,
+ fill = \istdefault@node@fillcolor ,
+ #2
+ }
+ }
+}
+
+
+%% input mode changer: (math mode True/False) - owner, action labels, payoff
+
+% owner: (default: mathfalse)
+
+\newcount\istmathflagowner
+\def\istownermathtrue { \istmathflagowner = 1 }
+\def\istownermathfalse { \istmathflagowner = 0 }
+\istownermathfalse % default declared : mathfalse
+
+% owner text font
+\newcommand*\istownertextfont [1] { \def\ist@owner@text@font {#1} }
+\istownertextfont { }
+
+% \istownerstyle
+\NewDocumentCommand \istownerstyle { m }
+{
+ \ifnum 1 = \istmathflagowner
+ \ensuremath {#1}
+ \else
+ \expandafter \csname \ist@owner@text@font \endcsname {#1} % owner text font
+ \fi
+}
+
+
+% action labels: (default: mathtrue)
+
+\newcount\istmathflagactionlabel
+\newcommand*\istactionlabelmathtrue { \istmathflagactionlabel = 1 }
+\newcommand*\istactionlabelmathfalse { \istmathflagactionlabel = 0 }
+\istactionlabelmathtrue % default declared : mathtrue
+
+% action labels text font
+% used for automatic "italics" for action labels (with \setistmathTF*001 -- second zero)
+\newcommand*\istactionlabeltextfont [1] { \def\ist@actionlabel@text@font {#1} }
+\istactionlabeltextfont { }
+
+% \istactionlabelstyle
+\NewDocumentCommand \istactionlabelstyle{m}
+{
+ \ifnum 1 = \istmathflagactionlabel
+ \ensuremath {#1}
+ \else
+ \expandafter \csname \ist@actionlabel@text@font \endcsname {#1} % AL text font
+ \fi
+}
+
+% payoffs: (default: mathtrue)
+
+\newcount\istmathflagpayoff
+\newcommand*\istpayoffmathtrue { \istmathflagpayoff = 1 }
+\newcommand*\istpayoffmathfalse { \istmathflagpayoff = 0 }
+\istpayoffmathtrue % default declared : mathtrue
+
+% payoff text font
+% (not used)
+\newcommand*\istpayofftextfont [1] { \def\ist@payoff@text@font {#1} }
+\istpayofftextfont { }
+
+% \istpayoffstyle
+\NewDocumentCommand \istpayoffstyle{m}
+{
+ \ifnum 1 = \istmathflagpayoff
+ \ensuremath {#1}
+ \else
+ \expandafter \csname \ist@payoff@text@font \endcsname {#1} % payoff text font
+ \fi
+}
+
+% \setistmathTF(*)
+% * {} {} {} <owner font> [action labels font] {payoff font]
+\NewDocumentCommand \setistmathTF{ s m m m D<>{} G{textit} O{} }
+{
+ \ifnum #2 = 1 \istownermathtrue \else \istownermathfalse \fi
+ \ifnum #3 = 1 \istactionlabelmathtrue \else \istactionlabelmathfalse \fi
+ \ifnum #4 = 1 \istpayoffmathtrue \else \istpayoffmathfalse \fi
+ \IfBooleanT {#1}
+ {
+ \istownertextfont { #5 }
+ \istactionlabeltextfont { #6 }
+ \istpayofftextfont { #7 }
+ }
+}
+
+
+%% fine tuning: labels (experimental)
+\newcommand*\xtALxShift{0pt} % default xshift
+\newcommand*\xtALyShift{0pt} % default yshift
+
+\NewDocumentCommand \xtALPush { m m }
+{
+ \renewcommand*\xtALxShift{#1}
+ \renewcommand*\xtALyShift{#2}
+}
+
+\newcommand*\istactionlabelxshift{1pt} % default horizontal push (alternatively, .67pt)
+\newcommand*\istactionlabelyshift{2pt} % default vertical push (alternatively, 2.5pt)
+
+\NewDocumentCommand \xtALShift { G{\istactionlabelxshift} G{\istactionlabelyshift} }
+{
+ \renewcommand*\istactionlabelxshift{#1}
+ \renewcommand*\istactionlabelyshift{#2}
+}
+
+
+%% node anchors (experimental, used only in test, not documented)
+\let\istparentanchor\tikzparentanchor % empty by default
+\let\istchildanchor\tikzchildanchor % empty by default
+\newcommand*\setistparentanchor [1] { \renewcommand*\istparentanchor{.#1} }
+\newcommand*\setistchildanchor [1] { \renewcommand*\istchildanchor{.#1} }
+
+\NewDocumentCommand \setistbranchanchors{ m G{center} }
+{
+ \renewcommand*\istparentanchor {.#1}
+ \renewcommand \istchildanchor {.#2}
+}
+
+
+%%%%%%%%%%%%%%%%%
+%% istgame macros
+%%%%%%%%%%%%%%%%%
+
+%% basics (in child)
+% -- used in the definition of \istb and its variants
+\def\xt@ndot{node[solid~node]{}} % (within child) default node dot: decision node
+\def\xt@show@tndot{} % default: no terminal nodes printed
+\def\xt@show@endpoint{} % default: no endpoints printed
+\def\cntm@ndot{} % default: no cntm node dot printed
+\def\cntm@show@endpoint{} % default: no cntm endpoint printed
+
+
+\ExplSyntaxOff
+
+%%-----------------
+%% expl3 up to here (paused, because of colon problem)
+%%-----------------
+
+
+%% payoffs
+
+
+%---syntaxoff-----
+% remark: label={[opt]pos:{text}} (needed this form for \istgrowdirection to put payoffs)
+\NewDocumentCommand \istpayoff{ m +m }
+{
+ node [ inner sep = 0pt , text depth = .25ex ,
+ label = {#1:\istpayoffstyle{#2} } ] {} % colon here
+}
+
+%---syntaxoff-----
+% \ISTRoot
+% (used in \istroot)
+% ' [grow] (root) (at) [node] <angle> {owner} +levdis..sibdist+
+\NewDocumentCommand \ISTRoot
+{ t' O{south} r() D(){0,0} O{} D<>{} G{} D+.{\xtlevdist} D.+{\xtsibdist} }
+{
+ \IfBooleanTF {#1}
+ {
+ \tikzset{level 1/.style = { level distance = #8 , sibling distance = #9 } } % colon here
+ \node (#3) at (#4) [decision node , #5 , label = {#6:{#7} } ]
+ {} [ \xt@growswap=#2 ]
+ }
+ {
+ \tikzset{level 1/.style = { level distance = #8 , sibling distance = #9 } } % colon here
+ \node (#3) at (#4) [ decision node , #5 , label = {#6:{#7} } ]
+ {} [ \xt@grow=#2 ]
+ }
+}
+
+
+%%-----------------
+%% expl3 from here again
+%%-----------------
+
+\ExplSyntaxOn
+
+%% main macros: \xtdistance, \ISTRoot(O), \ISTCntm(Arc)
+
+\def\xtdefault@levdist {15mm} %% (default) level distance : 15mm
+\def\xtdefault@sibdist {\xtdefault@levdist} %% (default) sibling distance : 15mm
+\newcommand*\xtlevdist {\xtdefault@levdist}
+\newcommand*\xtsibdist {\xtdefault@sibdist}
+
+\NewDocumentCommand \xtdistance
+{ O{1} m G{\xtdefault@sibdist} }
+{
+ \renewcommand*\xtlevdist {#2}
+ \renewcommand*\xtsibdist {#3}
+ \tikzset{ level~#1/.style = {level~distance = \xtlevdist , sibling~distance = \xtsibdist } }
+}
+
+
+%% counterclockwise (grow=) or clockwise (grow'=)
+
+% default: growing south counterclockwise
+\def\xt@grow { grow }
+\def\xt@growswap { grow' }
+\def\istdefault@grow { south } % tree growing direction
+
+% \setxtgrowkey %% just for one simple tree
+\NewDocumentCommand \setxtgrowkey { m }
+{
+ \renewcommand*\xt@grow {#1}
+}
+
+% growsawp call test
+\bool_new:N \xt_growswap_call_bool
+\bool_set_false:N \xt_growswap_call_bool
+
+% \setistgrowdirection %% for whole tree
+\NewDocumentCommand \setistgrowdirection{ t' m }
+{ \IfBooleanTF {#1}
+ {
+ \bool_set_true:N \xt_growswap_call_bool
+ \renewcommand*\xt@grow { grow' }
+ \renewcommand*\istdefault@grow {#2}
+ }
+ {
+ \renewcommand*\xt@grow { grow }
+ \renewcommand*\istdefault@grow {#2}
+ }
+}
+
+
+% \ISTRootO (oval version)
+% (used in \istrooto)
+% ' [grow] (root) (at) [node] <angle> {owner} +levdis..sibdist+
+\NewDocumentCommand \ISTRootO
+{ t' O{south} r() D(){0,0} O{} D<>{} G{} D+.{\xtlevdist} D.+{\xtsibdist} }
+{
+ \IfBooleanTF {#1}
+ {
+ \tikzset { level~1/.style = { level~distance = #8 , sibling~distance = #9} }
+ \node (#3) at (#4) [ oval~node , #5 ] {#7} [ \xt@growswap = #2 ]
+ }
+ {
+ \tikzset { level~1/.style = { level~distance = #8 , sibling~distance = #9 } }
+ \node (#3) at (#4) [ oval~node , #5 ] {#7} [ \xt@grow = #2 ]
+ }
+}
+
+%% istgame environment
+
+\def\istgame@default@fontsize { \normalsize }
+\def\istgame@default@arrowend@shorten { 0pt } % 0pt needed, otherwise affects all the lines
+
+\NewDocumentCommand \setistgamefontsize { m }
+{
+ \renewcommand*{\istgame@default@fontsize} {#1}
+}
+
+\NewDocumentCommand \setistgameshorten { m }
+{
+ \renewcommand*{\istgame@default@arrowend@shorten} {#1}
+}
+
+% get ready for checking (x)(y)scale option
+\clist_new:N \l_parseopt_clist
+
+% \xtxscale
+\cs_new_nopar:Npn \get_xscale_option_string:n #1
+{
+ \get_opt_xvalue:w #1\q_stop
+}
+\cs_new_nopar:Npn \get_opt_xvalue:w #1=#2\q_stop
+{
+ % keep the value of xscale
+ \tl_gset:Nn \xtxscale { #2 }
+}
+
+% \xtyscale
+\cs_new_nopar:Npn \get_yscale_option_string:n #1
+{
+ \get_opt_yvalue:w #1\q_stop
+}
+\cs_new_nopar:Npn \get_opt_yvalue:w #1=#2\q_stop
+{
+ % keep the value of yscale
+ \tl_gset:Nn \xtyscale { #2 }
+}
+
+% \xtscale
+\cs_new_nopar:Npn \get_scale_option_string:n #1
+{
+ \get_opt_value:w #1\q_stop
+}
+\cs_new_nopar:Npn \get_opt_value:w #1=#2\q_stop
+{
+ % keep the value of scale
+ \tl_gset:Nn \xtscale { #2 }
+}
+
+
+\DeclareDocumentEnvironment {istgame} { O{} } % accepts tikzpicture options
+{
+ % call set (false)
+ \bool_set_false:N \cntm_distance_call_bool % to distinguish cntm sibdist
+ \bool_set_false:N \cntm_act_sibdist_call_bool % from cntm action sibdist
+ \bool_set_false:N \xt_xscale_call_bool % for InfosetO, CInfosetO, and more
+ \bool_set_false:N \xt_yscale_call_bool % for InfosetO, CInfosetO, and more
+ \bool_set_false:N \xt_scale_call_bool % for InfosetO, CInfosetO, and more
+ \bool_set_false:N \_arrow_option_exist_bool % for arrow shorten
+ \bool_set_false:N \xt_growswap_call_bool % for CInfoset(O)
+ \bool_set_false:N \_istroot_cntmA_call_bool % for \istbA
+ \bool_set_false:N \_istroot_cntm_call_bool % for \istbA
+ \bool_set_false:N \_xt_levdist_local_call_bool % for \istbA
+ \bool_set_false:N \_cntm_distance_local_call_bool % for \istbA
+ \bool_set_false:N \_cntmA_distance_local_call_bool % for \istbA
+
+ % extract the value of xscale/yscale/scale
+ % (extract scale value, only if it is used alone)
+ \clist_set:Nn \l_parseopt_clist { #1 }
+ \tl_gset:Nn \xtxscale {1.0}
+ \tl_gset:Nn \xtyscale {1.0}
+ \tl_gset:Nn \xtscale {1.0}
+ \clist_map_inline:Nn \l_parseopt_clist
+ {
+ \str_if_in:nnTF { ##1 } { xscale }
+ {
+ \bool_set_true:N \xt_xscale_call_bool
+ \get_xscale_option_string:n { ##1 }
+ \str_if_in:nnT { ##1 } {yscale}
+ {
+ \bool_set_true:N \xt_yscale_call_bool
+ \get_yscale_option_string:n { ##1 }
+ }
+ }
+ {
+ \str_if_in:nnTF { ##1 } { yscale }
+ {
+ \bool_set_true:N \xt_yscale_call_bool
+ \get_yscale_option_string:n { ##1 }
+ \str_if_in:nnT {##1} { xscale }
+ {
+ \bool_set_true:N \xt_xscale_call_bool
+ \get_xscale_option_string:n { ##1 }
+ }
+ }
+ { % xscale:false, yscale:false
+ \str_if_in:nnT { ##1 } { scale }
+ {
+ \bool_set_true:N \xt_scale_call_bool
+ \get_scale_option_string:n { ##1 }
+ }
+ }
+ }
+ }
+
+ \clist_if_in:NnT \l_parseopt_clist { -> } % check if [->] exists
+ {
+ \bool_set_true:N \_arrow_option_exist_bool
+ \clist_remove_all:Nn \l_parseopt_clist { -> }
+ \clist_put_left:Nn \l_parseopt_clist { -> , shorten~> = \istgame@default@arrowend@shorten }
+ }
+
+ \tl_set:Nn \l_tmpa_tl { font = \istgame@default@fontsize , > = stealth , }
+ \tl_put_right:Nx \l_tmpa_tl { \clist_use:Nn \l_parseopt_clist { , } }
+
+ \exp_last_unbraced:NnNo
+ \begin{tikzpicture} [ \l_tmpa_tl ]
+}
+{
+ \end{tikzpicture}
+}
+%%% % add the following as env option: tikz-qtree conflict resolution
+%%% edge~from~parent~path = { (\tikzparentnode) -- (\tikzchildnode) }
+
+
+%% scale call test and adjust
+
+\def\xtinfosetheightvar {\xtinfosetheight}
+\def\cntminfosetheightvar {\cntminfosetheight}
+
+% \istgameScaleCallTestAndAdjust
+% use this only in a GROUP
+\NewExpandableDocumentCommand \istgameScaleCallTestAndAdjust { }
+{
+ \bool_if:NTF \xt_xscale_call_bool
+ {
+ \pgftransformxscale{1/\xtxscale}
+ % keep going for yscale
+ \bool_if:NT \xt_yscale_call_bool
+ {
+ \pgftransformyscale{1/\xtyscale}
+ }
+ % for scaling infosetO if scaled together with x-y-scale
+ \renewcommand*\xtinfosetheightvar {\xtinfosetheight*\xtscale}
+ \renewcommand*\cntminfosetheightvar {\cntminfosetheight*\xtscale}
+ }
+ {
+ \bool_if:NTF \xt_yscale_call_bool
+ {
+ \pgftransformyscale{1/\xtyscale}
+ % keep going for xscale
+ \bool_if:NT \xt_xscale_call_bool
+ {
+ \pgftransformxscale{1/\xtxscale}
+ }
+ % for scaling infosetO if scaled together with x-y-scale
+ \renewcommand*\xtinfosetheightvar {\xtinfosetheight*\xtscale}
+ \renewcommand*\cntminfosetheightvar {\cntminfosetheight*\xtscale}
+ }
+ {
+ \bool_if:NT \xt_scale_call_bool
+ {
+ % no scaling infosetO if scaled without x-y-scale
+ \pgftransformscale{1/\xtscale}
+ }
+ }
+ }
+}
+
+% to resolve TikZ problem: sloped label conflict with x-y-scale
+% temporary solution (experimental)
+
+% \xtcureslopedlabelsNS (for north and south growing tree)
+\NewDocumentCommand \xtcureslopedlabelsNS { }
+{
+ \istgameScaleCallTestAndAdjust
+ \bool_if:NTF \xt_xscale_call_bool
+ {
+ \pgfmathsetmacro\xtsibdistadj {\xtxscale*\xtsibdist}
+ \pgfmathsetmacro\xtlevdistadj {1*\xtlevdist}
+ }
+ {
+ \bool_if:NT \xt_yscale_call_bool
+ {
+ \pgfmathsetmacro\xtsibdistadj {1*\xtsibdist}
+ \pgfmathsetmacro\xtlevdistadj {\xtyscale*\xtlevdist}
+ }
+ }
+ \xtdistance{\xtlevdistadj}{\xtsibdistadj}
+}
+
+% \xtcureslopedlabelsEW (for east and west growing tree)
+\NewDocumentCommand \xtcureslopedlabelsEW { }
+{
+ \istgameScaleCallTestAndAdjust
+ \bool_if:NTF \xt_xscale_call_bool
+ {
+ \pgfmathsetmacro\xtsibdistadj {1*\xtsibdist}
+ \pgfmathsetmacro\xtlevdistadj {\xtxscale*\xtlevdist}
+ }
+ {
+ \bool_if:NT \xt_yscale_call_bool
+ {
+ \pgfmathsetmacro\xtsibdistadj {\xtyscale*\xtsibdist}
+ \pgfmathsetmacro\xtlevdistadj {1*\xtlevdist}
+ }
+ }
+ \xtdistance{\xtlevdistadj}{\xtsibdistadj}
+}
+
+%% ---------------
+%% core macro part
+%% ---------------
+
+% get ready
+\tl_new:N \ischo_game_tl
+
+% action (with abbreviations)
+% BE CAREFUL: each case has different options (do not try to shorten)
+% {#1: branch line style} {#2: position} {#3: action labels}
+\cs_new:Npn \ist_move:nnn #1 #2 #3
+{
+% \str_case_e:nnF { #2 }
+ \str_case:nnF { #2 }
+ {
+ { al } {
+ edge~from~parent [ #1 ]
+ node [ above~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = -\istactionlabelyshift ]
+ {\istactionlabelstyle{#3} }
+ }
+ { ar } {
+ edge~from~parent [ #1 ]
+ node [ above~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = -\istactionlabelyshift ]
+ { \istactionlabelstyle{#3} }
+ }
+ { bl } {
+ edge~from~parent [ #1 ]
+ node [ below~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = \istactionlabelyshift ]
+ { \istactionlabelstyle{#3} }
+ }
+ { br } {
+ edge~from~parent [ #1 ]
+ node [ below~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = \istactionlabelyshift ]
+ { \istactionlabelstyle{#3} }
+ }
+ { l } {
+ edge~from~parent [ #1 ]
+ node [ left , text~depth = .25ex , xshift = -\xtALxShift ]
+ { \istactionlabelstyle{#3} }
+ }
+ { r } {
+ edge~from~parent [ #1 ]
+ node [ right , text~depth = .25ex , xshift = \xtALxShift ]
+ { \istactionlabelstyle{#3} }
+ }
+ { a } {
+ edge~from~parent [ #1 ]
+ node [ above , text~depth = .25ex , yshift = \xtALyShift ]
+ { \istactionlabelstyle{#3} }
+ }
+ { b } {
+ edge~from~parent [ #1 ]
+ node [ below , text~depth = .25ex , yshift = -\xtALyShift ]
+ { \istactionlabelstyle{#3} }
+ }
+ }
+ {
+ edge~from~parent [ #1 ]
+ node [ text~depth = .25ex , #2 ] { \istactionlabelstyle{#3} } % was \istmove{#1}{#2}{#3}
+ }
+}
+
+% payoff (with abbreviations)
+% {#1: position} {#2: payoffs}
+\cs_new:Npn \ist_payoff:nn #1 #2
+{
+% \str_case_e:nnF { #1 }
+ \str_case:nnF { #1 }
+ {
+ { al } { \istpayoff { above~left } { #2 } }
+ { ar } { \istpayoff { above~right } { #2 } }
+ { bl } { \istpayoff { below~left } { #2 } }
+ { br } { \istpayoff { below~right } { #2 } }
+ { l } { \istpayoff { left } { #2 } }
+ { r } { \istpayoff { right } { #2 } }
+ { a } { \istpayoff { above } { #2 } }
+ { b } { \istpayoff { below } { #2 } }
+ }
+ {
+ \istpayoff { #1 } { #2 }
+ }
+}
+
+
+%% core macros: \istroot, \istb, \endist
+
+% \istroot(') -- standard version
+% ' [grow, tree opt] (root) (at) [node style] <angle> {owner} +levdis..sibdist+
+\NewDocumentCommand \istroot
+{ t' O{\istdefault@grow} r() D(){0,0} O{} D<>{above} G{} d+. D.+{\xtsibdist} }
+{
+ % for \istbA
+ \IfNoValueTF {#8}
+ { % if the third option exists in \cntmdistance(*)
+ \bool_set_false:N \_xt_levdist_local_call_bool
+ \tl_set:Nn \_xt_levdist_local_tl { \xtlevdist }
+ \tl_set:Nn \_xt_sibdist_local_tl { \xtsibdist }
+ }
+ {
+ \bool_set_true:N \_xt_levdist_local_call_bool
+ \tl_set:Nn \_xt_levdist_local_tl { #8 }
+ \tl_set:Nn \_xt_sibdist_local_tl { #9 }
+ }
+ % normal process
+ \tl_clear:N \ischo_game_tl
+ \xdef\istgrowdirection{#2} % used in \istb to specify [payoff direction]
+
+ \IfBooleanTF {#1}
+ {
+ \tl_put_right:Nn \ischo_game_tl { \ISTRoot' }
+ }
+ {
+ \tl_put_right:Nn \ischo_game_tl { \ISTRoot }
+ }
+
+ \tl_put_right:Nx \ischo_game_tl { [ \istgrowdirection ] ( #3 ) ( #4 ) [ #5 ] < #6 > }
+ \tl_put_right:Nn \ischo_game_tl { { \istownerstyle{ #7 } } }
+ \tl_put_right:Nx \ischo_game_tl { + { \_xt_levdist_local_tl } .. { #9 } + }
+ % { } needed for #8 and #9 with decimal dim
+}
+
+% \istrooto(') -- oval version
+% ' [grow] (root) (at) [node style] <angle> {owner} +levdis..sibdist+ --- <angle>: redundant
+\NewDocumentCommand \istrooto
+{ t' O{\istdefault@grow} r() D(){0,0} O{} D<>{above} G{} d+. D.+{\xtsibdist} }
+{
+ % for \istbA
+ \IfNoValueTF {#8}
+ {
+ \bool_set_false:N \_xt_levdist_local_call_bool
+ \tl_set:Nn \_xt_levdist_local_tl { \xtlevdist }
+ \tl_set:Nn \_xt_sibdist_local_tl { \xtsibdist }
+ }
+ {
+ \bool_set_true:N \_xt_levdist_local_call_bool
+ \tl_set:Nn \_xt_levdist_local_tl { #8 }
+ \tl_set:Nn \_xt_sibdist_local_tl { #9 }
+ }
+ % normal process
+ \tl_clear:N \ischo_game_tl
+ \xdef\istgrowdirection{#2} % used in \istb to specify [payoff direction]
+
+ \IfBooleanTF {#1}
+ {
+ \tl_put_right:Nn \ischo_game_tl { \ISTRootO' }
+ }
+ {
+ \tl_put_right:Nn \ischo_game_tl { \ISTRootO }
+ }
+
+ \tl_put_right:Nx \ischo_game_tl { [ \istgrowdirection ] ( #3 ) ( #4 ) [ #5 ] }
+ \tl_put_right:Nn \ischo_game_tl { { \istownerstyle { #7 } } }
+ \tl_put_right:Nx \ischo_game_tl { + { \_xt_levdist_local_tl } .. { #9 } + }
+ % { } needed for #8 and #9 with decimal dim
+}
+
+% \istbm % missing version
+\NewDocumentCommand \istbm { }
+{
+ \istb<missing>
+}
+
+% \istbm % missing version (just in case)
+\NewDocumentCommand \istbAm { }
+{
+ \istbA<missing>
+}
+
+
+% \istb(*)
+% * (redundant) <grow,xtdistances> [line style] {action labels} [pos] {payoffs} [pos]
+% second option is redundant (this helps not getting errors when playing with \istbA)
+% default payoff postion: \istgrowdirection
+\NewDocumentCommand \istb
+{ s D(){1} D<>{} O{} +G{} O{} +g O{\istgrowdirection} }
+{
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ #3 ]
+ {
+ \IfBooleanTF { #1 } { \xt@ndot } { \xt@show@endpoint }
+ \IfValueT { #7 } { \ist_payoff:nn { #8 } { #7 } }
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow , #4 } { #6 } { #5 }
+ }
+ }
+}
+
+% \istbt(*) % terminal version
+% this is the replacement of \istb.(*)
+% * (redundant) <grow,xtdistances> [line style] {action labels} [pos] {payoffs} [pos]
+% second option is redundant (this helps not getting errors when playing with \istbA)
+\NewDocumentCommand \istbt
+{ s D(){1} D<>{} O{} +G{} O{} +g O{\istgrowdirection} }
+{
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ #3 ]
+ {
+ \IfBooleanTF { #1 } { \xt@ndot } { \xt@show@tndot }
+ \IfValueT { #7 } { \ist_payoff:nn { #8 } { #7 } }
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow , #4 } { #6 } { #5 }
+ }
+ }
+}
+
+
+% \istB(*) % dual version
+% * <grow,xtdistances> [line style] {AL 1} [pos 1] {AL 2} [pos 2] {payoffs} [pos]
+\NewDocumentCommand \istB
+{ s D<>{} O{} +G{} O{} +G{} O{} +g O{\istgrowdirection} }
+{
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ #2 ]
+ {
+ \IfBooleanTF { #1 } { \xt@ndot } { \xt@show@endpoint }
+ \IfValueT { #8 } { \ist_payoff:nn { #9 } { #8 } }
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow } { #7 } { #6 }
+ \ist_move:nnn { #3 } { #5 } { #4 }
+ }
+ }
+}
+
+
+% \istBt(*) % dual terminal version
+% * <grow,xt-distances> [line style] {AL 1} [pos 1] {AL 2} [pos 2] {payoffs} [pos]
+\NewDocumentCommand \istBt
+{ s D<>{} O{} +G{} O{} +G{} O{} +g O{\istgrowdirection} }
+{
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ #2 ]
+ {
+ \IfBooleanTF { #1 } { \xt@ndot } { \xt@show@tndot }
+ \IfValueT { #8 } { \ist_payoff:nn { #9 } { #8 } }
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow } { #7 } { #6 }
+ \ist_move:nnn { #3 } { #5 } { #4 }
+ }
+ }
+}
+
+
+% \istbA (arc version) -- to work with \istrootcntmA and variants
+% * (Xpoint adj factor) <grow,xt-distances> [line style] {action labels} [pos] {payoffs} [pos]
+% code complication, inevitable to take care of too many cases
+\NewDocumentCommand \istbA
+{ s D(){1} D<>{} O{} +G{} O{} +g O{\istgrowdirection} }
+{
+ %% to toss adjusted levdist and sibdist for every case
+ \bool_if:NTF \_istroot_cntmA_call_bool
+ { % with \istrootcntmA
+ % adjust levdist (to make longer branch only for \istrootcntmA and its oval version)
+ \pgfmathsetmacro \xtlevdistVarA { \cntmApos * \_cntmA_levdist_local_tl * \cntmAplotfactorAdj }
+ \pgfmathsetmacro \xtsibdistVarA { \cntmApos * \_cntm_act_sibdist_local_tl } % better not mul \...Adj
+ % this is correct (there is no \_cntmA_act_sibdist_local_tl)
+ }
+ {
+ \bool_if:NTF \_istroot_cntm_call_bool
+ { % with \istrootcntm
+ \pgfmathsetmacro \xtlevdistVarA { \cntmpos * \_cntm_levdist_local_tl }
+ \pgfmathsetmacro \xtsibdistVarA { \cntmpos * \_cntm_act_sibdist_local_tl }
+ }
+ {
+ \bool_if:NTF \_xt_levdist_local_call_bool
+ { % if +#8..#9+ exists ( \_xt_levdist_local_tl defined in \istroot )
+ \pgfmathsetmacro \xtlevdistVarA { \_xt_levdist_local_tl }
+ \pgfmathsetmacro \xtsibdistVarA { \_xt_sibdist_local_tl }
+ }
+ { % ordinary case
+ \pgfmathsetmacro \xtlevdistVarA { \xtlevdist }
+ \pgfmathsetmacro \xtsibdistVarA { \xtsibdist }
+ }
+ }
+ }
+ %% draw branch
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ level~distance = #2 * \xtlevdistVarA , sibling~distance = \xtsibdistVarA , #3 ]
+ {
+ \IfBooleanTF { #1 } { \xt@ndot } { \xt@show@endpoint }
+ \IfValueT { #7 } { \ist_payoff:nn { #8 } { #7 } }
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow , #4 } { #6 } { #5 }
+ }
+ }
+}
+
+
+% \istbAt (arc terminal version)
+% * (Xpoint adj factor) <grow,xt-distances> [line style] {action labels} [pos] {payoffs} [pos]
+\NewDocumentCommand \istbAt
+{ s D(){1} D<>{} O{} +G{} O{} +g O{\istgrowdirection} }
+{
+ %% to toss adjusted levdist and sibdist for every case
+ \bool_if:NTF \_istroot_cntmA_call_bool
+ { % with \istrootcntmA
+ % adjust levdist (to make longer branch only for \istrootcntmA and its oval version)
+ \pgfmathsetmacro \xtlevdistVarA { \cntmApos * \_cntmA_levdist_local_tl * \cntmAplotfactorAdj }
+ \pgfmathsetmacro \xtsibdistVarA { \cntmApos * \_cntm_act_sibdist_local_tl } % better not mul \...Adj
+ % this is correct (there is no \_cntmA_act_sibdist_local_tl)
+ }
+ {
+ \bool_if:NTF \_istroot_cntm_call_bool
+ { % with \istrootcntm
+ \pgfmathsetmacro \xtlevdistVarA { \cntmpos * \_cntm_levdist_local_tl }
+ \pgfmathsetmacro \xtsibdistVarA { \cntmpos * \_cntm_act_sibdist_local_tl }
+ }
+ {
+ \bool_if:NTF \_xt_levdist_local_call_bool
+ { % if +#8..#9+ exists ( \_xt_levdist_local_tl defined in \istroot )
+ \pgfmathsetmacro \xtlevdistVarA { \_xt_levdist_local_tl }
+ \pgfmathsetmacro \xtsibdistVarA { \_xt_sibdist_local_tl }
+ }
+ { % ordinary case
+ \pgfmathsetmacro \xtlevdistVarA { \xtlevdist }
+ \pgfmathsetmacro \xtsibdistVarA { \xtsibdist }
+ }
+ }
+ }
+ %% draw branch
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ level~distance = #2 * \xtlevdistVarA , sibling~distance = \xtsibdistVarA , #3 ]
+ {
+ \IfBooleanTF { #1 } { \xt@ndot } { \xt@show@tndot }
+ \IfValueT { #7 } { \ist_payoff:nn { #8 } { #7 } }
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow , #4 } { #6 } { #5 }
+ }
+ }
+}
+
+
+% \printist (to use \istrootcntm and all its variants)
+\NewDocumentCommand \printist { }
+{
+ \tl_use:N \ischo_game_tl
+}
+
+% \endist
+\NewDocumentCommand \endist { }
+{
+ % call set false for changing branch lengths with \istbA
+ \bool_set_false:N \_istroot_cntm_call_bool
+ \bool_set_false:N \_istroot_cntmA_call_bool
+ % final print of simple tree
+ \printist ;
+ % restore initial values for \cntmistb and \cntmAistb
+ \cntmistbVariablesRestore
+ \cntmAistbVariablesRestore
+}
+
+
+%%% continuum of branches %%%
+
+
+%% preset for continuum of branches (used in \ISTCntm, \ISTCntmArc)
+
+%% cntm distances
+\def\cntmdefaultlevdist{8mm}
+%\def\cntmdefaultsibdist{3*\cntmdefaultlevdist}
+\def\cntmdefaultsibdist{24mm}
+\newcommand*\cntmlevdist{\cntmdefaultlevdist}
+\pgfmathsetmacro\tmpcntmsibdist{3*\cntmlevdist} % this detour is safer
+\newcommand*\cntmsibdist{\tmpcntmsibdist}
+
+% cntm action sibling distance (used in \ISTCntm, \ISTCntmArc)
+\def\cntm@default@actsibdist{\cntmsibdist/3}
+\newcommand*\cntmACTsibdist{\cntm@default@actsibdist}
+\NewDocumentCommand \cntmactsibdist{m}
+{
+ \renewcommand*\cntmACTsibdist{#1}
+}
+
+% \cntmdistance call test
+\bool_new:N \cntm_distance_call_bool
+\bool_set_false:N \cntm_distance_call_bool
+\bool_new:N \cntm_act_sibdist_call_bool
+\bool_set_false:N \cntm_act_sibdist_call_bool
+
+% \cntmdistance
+% use this BEFORE \istrootcntm and \istrootcntmA
+% * {cntmlevdist} {cntmsibdist} {cntm act sibdist} [cntm color]
+\NewDocumentCommand \cntmdistance
+{ s m G{ \cntmdefaultsibdist } g }
+{
+ \IfBooleanT {#1}
+ {
+ \renewcommand*\xtlevdist { \cntmlevdist }
+ \renewcommand*\xtsibdist { \cntmsibdist }
+ }
+
+ \renewcommand*\cntmlevdist {#2}
+ \renewcommand*\cntmsibdist {#3}
+
+ \IfValueTF {#4}
+ { % this call set is used in \istrootcntm and its variants
+ % distinguish \cntmactsibdist from \cntmsibdist, the latter used only for cntm
+ \bool_set_true:N \cntm_act_sibdist_call_bool
+ \cntmactsibdist {#4}
+ }
+ {
+ \cntmactsibdist { \cntm@default@actsibdist }
+ }
+
+ \bool_set_true:N \cntm_distance_call_bool
+% \tikzset{level~1/.style={level~distance=\cntmlevdist,sibling~distance=\cntmsibdist}}
+}
+
+%===========================================
+%===========================================
+
+%% information sets
+
+% infoset layer (for every infoset)
+\def\xtdefault@infosetlayer{background}
+\newcommand*\xtinfosetlayer{\xtdefault@infosetlayer}
+\NewDocumentCommand \setxtinfosetlayer{ G{ \xtdefault@infosetlayer } }
+{
+ \renewcommand*\xtinfosetlayer {#1}
+}
+
+% infoset style (for every infoset)
+\def\xtdefault@infoset@style{}
+\newcommand*\xtdefaultinfosetstyle{\xtdefault@infoset@style}
+
+\NewDocumentCommand \setxtinfosetstyle { G{} }
+{
+ \tikzset { infoset~style/.style = { semithick, densely~dotted, #1 } }
+}
+% initial set (as infoset style = {semithick,densely dotted})
+\setxtinfosetstyle
+
+% infoset height (for oval type)
+\def\xtdefault@infosetheight { 1em } % 1em=12pt
+\newcommand*\xtinfosetheight { \xtdefault@infosetheight }
+
+
+% \xtInfoset
+% * [opt] (from) (to) {owner} [pos]
+\NewDocumentCommand \xtInfoset { s O{} r() r() +G{} O{} }
+{
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \draw [ - , infoset~style , #2 ] (#3) to (#4) ;
+ \IfBooleanTF {#1} { } { \setistmathTF011 \istownertextfont{} } % must be in group
+% \str_case_e:nnF {#6}
+ \str_case:nnF {#6}
+ {
+ {al} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ above~left ] { \istownerstyle{#5} } ; }
+ {ar} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ above~right ] { \istownerstyle{#5} } ; }
+ {bl} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ below~left ] { \istownerstyle{#5} } ; }
+ {br} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ below~right ] { \istownerstyle{#5} } ; }
+ {l} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ left ] { \istownerstyle{#5} } ; }
+ {r} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ right ] { \istownerstyle{#5} } ; }
+ {a} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ above ] { \istownerstyle{#5} } ; }
+ {b} { \node at ( $ (#3) ! .5 ! (#4) $ ) [ below ] { \istownerstyle{#5} } ; }
+ }
+ {
+ \node at ( $ (#3) ! .5 ! (#4) $ ) [ above , #6 ] { \istownerstyle{#5} } ;
+ }
+ \end{pgfonlayer}
+}
+
+% \xtInfosetO -- oval version
+
+% * [opt] (from) (to) {owner} [pos] (height dim)
+\NewDocumentCommand \xtInfosetO { s O{} r() r() +G{} O{} D(){\xtdefault@infosetheight} }
+{
+ \begin{scope} % in group: to make \setistmathT011 local
+ \IfBooleanTF {#1} { } { \setistmathTF011 \istownertextfont{} }
+ \coordinate (xtinfoA) at (#3) ;
+ \coordinate (xtinfoB) at (#4) ;
+ \renewcommand*\xtinfosetheight {#7}
+
+ \istgameScaleCallTestAndAdjust % (must be in a GROUP) % this determines \xsinfosetheightvar
+
+% \str_if_eq:eeTF { #3 } { #4 }
+ \str_if_eq:nnTF { #3 } { #4 }
+ {% singleton infoset with a circle
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \draw (xtinfoA) node [ - , draw , circle , samples=500 , inner~sep = 0pt,
+ minimum~size = \xtinfosetheightvar , infoset~style , #2 ] {} ; % -var needed for scaling
+ \end{pgfonlayer}
+ \draw [ draw = none ] (#3) node [ #6 ] { \istownerstyle{#5} } ;
+ }
+ {% connecting two nodes
+ \renewcommand*\xtinfosetheight {#7}
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \path
+ let
+ \p1 = ( $ (xtinfoA.center) - (xtinfoB.center) $ ) ,
+ \n1 = { veclen(\x1,\y1) }
+ in
+ (xtinfoA) -- (xtinfoB)
+ node [ - , draw , rectangle , samples = 500 , inner~sep = 0pt ,
+ transform~shape , sloped , midway ,
+ rounded~corners = .5*\xtinfosetheightvar , % var needed for scaling
+ minimum~width = \n1 + \xtinfosetheight ,
+ minimum~height = \xtinfosetheight , infoset~style , #2 ] { } ;
+ \draw [ draw = none ] (xtinfoA) to
+ [ edge~node = { node [ #6 ] { \istownerstyle{#5} } } ] (xtinfoB) ; % (in group)
+ \end{pgfonlayer}
+ }
+ \end{scope}
+}
+
+
+%===========================================
+
+%% CI(curve infoset) defaults
+\def\xtCI@default@opt { } % CI line option
+\def\xtCI@default@pos { 1 } % CI position
+\def\xtCI@default@plotfactor { 1.3 } % CI curvature
+\def\xtCInfosetplotfactor { \xtCI@default@plotfactor }
+\newcommand*\xtCIopt { \xtCI@default@opt }
+\newcommand*\xtCIpos { \xtCI@default@pos }
+\newcommand*\xtCIplotfactor { \xtCI@default@plotfactor }
+\def\xtcimidvarfactor { .5 }
+
+% base distance to CI-root and mid-point (used in \xtCInfosetO)
+\def\xtCI@default@rootdist { 25mm }
+
+% xtCI default positions (used in \xtCInfosetO)
+\def\xtCIdefaultpos { 0 }
+\def\xtCIdefaultposA { -1 }
+\def\xtCIdefaultposB { 1 }
+
+% \setxtCIplotfactor
+% use this before \istrootcntmA
+\NewDocumentCommand \setxtCIplotfactor { m }
+{
+ \renewcommand*\xtCIplotfactor {#1}
+ \edef\xtCInfosetplotfactor {#1}
+}
+
+% detouring colon problem
+\NewExpandableDocumentCommand \setxtCIAngleAccordingtoGrowswapCall { }
+{
+ \bool_if:NTF \xt_growswap_call_bool
+ { \tl_set:Nn \xtCIang { 90 } }
+ { \tl_set:Nn \xtCIang { -90 } }
+}
+
+% detouring colon problem
+\def\xtciang@adjusted { 35 }
+\def\xtciang@adjustedLessThanOne { -15 }
+
+% #1 : \xtciplotfactor
+% #2 : midvarfactor
+\NewExpandableDocumentCommand \setxtCIAngleAccordingtoGrowswapCallForCI { m m }
+{
+ \bool_if:NTF \xt_growswap_call_bool
+ { % growswap true
+ \tl_set:Nn \xtCIangNew { 90 }
+ \tl_set:Nn \xtcisign { -1 }
+ \pgfmathsetmacro \xtciangA { 45-45*(#1-1)/.6 }
+ \pgfmathsetmacro \xtciangB { -45+45*(#1-1)/.6 }
+ \tl_if_novalue:nF { #2 } %% equivalent to \IfNoValueTF
+ {
+ \fp_compare:nTF { .5 > #2 }
+ {
+ \fp_compare:nTF { 1 > #1 }
+ {
+ \pgfmathsetmacro \xtciangA { \xtciangA + 60 - \xtciang@adjusted }
+ }
+ {
+ \pgfmathsetmacro \xtciangA { \xtciangA - \xtciang@adjusted }
+ }
+ }
+ {
+ \fp_compare:nT { .5 < #2 }
+ {
+ \fp_compare:nTF { 1 > #1 }
+ {
+ \pgfmathsetmacro \xtciangB { \xtciangB - 60 + \xtciang@adjusted }
+ }
+ {
+ \pgfmathsetmacro \xtciangB { \xtciangB + \xtciang@adjusted }
+ }
+ }
+ }
+ }
+ }
+ { % growswap false (no problem)
+ \tl_set:Nn \xtCIangNew { -90 }
+ \tl_set:Nn \xtcisign { 1 }
+ \pgfmathsetmacro\xtciangA{ -45+45*(#1-1)/.6 }
+ \pgfmathsetmacro\xtciangB{ 45-45*(#1-1)/.6 }
+ \fp_compare:nT { 1.0 > #1 } { \edef\xtciang@adjusted { \xtciang@adjustedLessThanOne } }
+ \tl_if_novalue:nF { #2 } %% equivalent to \IfNoValueTF
+ {
+ \fp_compare:nTF { .5 > #2 }
+ {
+ \pgfmathsetmacro \xtciangA { \xtciangA + \xtciang@adjusted } % if midvarfactor < .5
+ }
+ {
+ \fp_compare:nT { .5 < #2 }
+ {
+ \pgfmathsetmacro \xtciangB { \xtciangB - \xtciang@adjusted } % if midvarfactor > .5
+ }
+ }
+ }
+ }
+}
+
+
+%% detouring colon problem
+\def\ciang@adjusted { 35 }
+\def\ciang@adjustedLessThanOne { -15 }
+
+\let \cntminfosetheight \xtinfosetheight
+% #1 : \ciplotfactor
+\NewExpandableDocumentCommand \setciAngleAccordingtoGrowswapCallForCntmAI { m }
+{
+ \bool_if:NTF \xt_growswap_call_bool
+ { % growswap true
+ \tl_set:Nn \ciangNew { 90 }
+ \tl_set:Nn \cisign { -1 }
+ \pgfmathsetmacro \ciangA { -45+45*(#1-1)/.9 }
+ \pgfmathsetmacro \ciangB { 45-45*(#1-1)/.9 }
+ }
+ { % growswap false
+ \tl_set:Nn \ciangNew { -90 }
+ \tl_set:Nn \cisign { 1 }
+ \pgfmathsetmacro \ciangA { 45-45*(#1-1)/.9 }
+ \pgfmathsetmacro \ciangB { -45+45*(#1-1)/.9 }
+ }
+}
+
+%% detouring abbreviations (used in \xtCInfoset)
+\NewDocumentCommand \xtCInfosetAbbreviations { m }
+{
+% \str_case_e:nnF {#1}
+ \str_case:nnF {#1}
+ {
+ {l} { \def\xtciowner@pos { left } }
+ {r} { \def\xtciowner@pos { right} }
+ {a} { \def\xtciowner@pos { above} }
+ {b} { \def\xtciowner@pos { below} }
+ {al} { \def\xtciowner@pos { above~left } }
+ {ar} { \def\xtciowner@pos { above~right } }
+ {bl} { \def\xtciowner@pos { below~left } }
+ {br} { \def\xtciowner@pos { below~right } }
+ }
+ {
+ \def\xtciowner@pos {#1}
+ }
+ \tl_set:Nx \xtcioptionstring { at (xtC) [ above , \xtciowner@pos ] }
+}
+
+% detouring colon problem (for comparing two node being identical or not)
+% \xtCITestCoordinates (used in \xtCInfoset)
+\newif \ifxtCIsamecoordinates
+\NewDocumentCommand \xtCITestCoordinates { m m }
+{
+% \str_if_eq:eeTF {#1} {#2}
+ \str_if_eq:nnTF {#1} {#2}
+ {
+ \xtCIsamecoordinatestrue
+ }
+ {
+ \xtCIsamecoordinatesfalse
+ }
+}
+
+
+%++++++++++++++++++++++++++++++++++++
+%% +++ ONLY FOR DEVELOPER +++++++++++
+%% to show X points and X circles (this is used in definition of \xtCInfosetO and \cntmAInfosetO)
+
+% getting ready to show X points
+\newif \ifxtXpoints
+\newif \ifxtXpointsONE
+\newif \ifxtXpointsTWO
+\newif \ifxtXpointsTHREE
+\newif \ifxtXpointsFOUR
+\newif \ifxtXpointsLabel
+% getting ready to show X circles
+\newif \ifxtXcircles
+\newif \ifxtXcircleX
+\newif \ifxtXcircleY
+
+% showing X circles
+% used in \xtshowXpoints
+% can be used independently
+\NewDocumentCommand \xtshowXcircles { m }
+{
+ \xtXcircleXfalse
+ \xtXcircleYfalse
+ \xtXcirclestrue
+ \int_compare:nTF { #1 >= 3 }
+ {
+ \xtXcircleXtrue
+ \xtXcircleYtrue
+ }
+ {
+ \int_compare:nTF { #1 >= 2 }
+ {
+ \xtXcircleXfalse
+ \xtXcircleYtrue
+ }
+ {
+ \int_compare:nT { #1 >= 1 }
+ {
+ \xtXcircleXtrue
+ \xtXcircleYfalse
+ }
+ }
+ }
+}
+
+% hide X circles
+\NewDocumentCommand \xthideXcircles { }
+{
+ \xtXcirclesfalse
+}
+
+% to control point size
+\def\xtXpoint@sizeA { \istsolidnodesize }
+\def\xtXpoint@sizeB { 5/3 * \istsolidnodesize }
+\newcommand*\xtXpointsizeA { \xtXpoint@sizeA }
+\newcommand*\xtXpointsizeB { \xtXpoint@sizeB }
+
+% showing X points
+% \xtshowXpoints
+% * {point choice num}{circle choice num}(points size dim)(basic points size dim)
+% usage: \xtshowXpoints33(2pt)(3pt)
+% point choice number: 0,1,2,3,4
+% circle choice number: 0,1,2,3
+% this serves \xtCInfosetO as well as \cntmAInfosetO
+\NewDocumentCommand \xtshowXpoints { s m m D(){\xtXpoint@sizeA} D(){\xtXpoint@sizeB} }
+{
+ \renewcommand*\xtXpointsizeA {#4}
+ \renewcommand\xtXpointsizeB {#5}
+ \xtXpointsLabelfalse
+ \IfBooleanTF {#1} { \xtXpointsLabeltrue } { \xtXpointsLabelfalse }
+ \xtXpointsONEfalse
+ \xtXpointsTWOfalse
+ \xtXpointsTHREEfalse
+ \xtXpointsFOURfalse
+ \xtXpointstrue
+ \int_compare:nTF { #2 >= 4 }
+ {
+ \xtXpointsTHREEtrue
+ \xtXpointsTWOtrue
+ \xtXpointsONEtrue
+ }
+ {
+ \int_compare:nTF { #2 >= 3 }
+ {
+ \xtXpointsONEfalse
+ \xtXpointsTWOtrue
+ \xtXpointsTHREEtrue
+ }
+ {
+ \int_compare:nTF { #2 >= 2 }
+ {
+ \xtXpointsONEtrue
+ \xtXpointsTWOtrue
+ \xtXpointsTHREEfalse
+ }
+ {
+ \int_compare:nT { #2 >= 1 }
+ {
+ \xtXpointsONEtrue
+ \xtXpointsTWOfalse
+ \xtXpointsTHREEfalse
+ }
+ }
+ }
+ }
+ \xtshowXcircles{#3}
+}
+
+% hide X points
+\NewDocumentCommand \xthideXpoints {}
+{
+ \xtXpointsfalse
+}
+%++++++++++++++++++++++++++++++++++++
+
+
+\ExplSyntaxOff
+
+%%-----------------
+%% expl3 up to here (paused, because of colon problem)
+%%-----------------
+
+%---syntaxoff-----
+% \xtCInfoset
+% * [line opt] (beg-coor) !offmid weight! (end-coor) <plotfactor> +G{} O{} (info height dim)
+\NewDocumentCommand \xtCInfoset
+{ s O{} r() d!! r() D<>{\xtCIplotfactor} +G{} O{} }
+{
+\begin{scope}
+\istgameScaleCallTestAndAdjust % (must be in a GROUP)
+ \IfBooleanTF {#1} { } { \setistmathTF011 \istownertextfont{} } % must be in a group
+
+ \coordinate (xtA) at (#3) ;
+ \coordinate (xtB) at (#5) ;
+ \edef\xtciplotfactor {#6}
+ \def\xtcitension { 1 }
+
+ \IfValueT {#4} { \edef\xtcimidvarfactor {#4} }
+ \setxtCIAngleAccordingtoGrowswapCallForCI {#6} {#4}
+
+ \path
+ let \p1 = ($(xtA)-(xtB)$) , \n1 = { veclen(\p1) }
+ in \pgfextra{ \xdef\xtcidist {\n1} } ;
+
+ \coordinate (xtcimid) at ( $ (xtA) ! .5 ! (xtB) $ ) ;
+ \coordinate (xtciroot) at ( $ (xtcimid) ! .5 * \xtcidist ! \xtCIangNew:(xtB) $ ) ;
+ \coordinate (xtcimid-var) at ( $ (xtA) ! \xtcimidvarfactor ! (xtB) $ ) ;
+ \coordinate (xtC) at ( $ (xtciroot) ! \xtciplotfactor ! (xtcimid-var) $ ) ;
+
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \draw [ - , samples=500 , tension = \xtcitension , infoset style , #2 ]
+ plot [ smooth ] coordinates { (xtA) (xtC) (xtB) } ;
+ % detoured abbreviations (\node at (xtC) [ above , #8 ] { \istownerstyle{#7} } ;)
+ \xtCInfosetAbbreviations {#8}
+ \expandafter \node \xtcioptionstring { \istownerstyle{#7} };
+ \end{pgfonlayer}
+\end{scope}
+}
+
+%++++++++++++++++++++++++++++++++++++
+%% +++ ONLY FOR DEVELOPER +++++++++++
+%---syntaxoff-----
+% for controlling X points
+\tikzset { nodedot/.style =
+ { - , draw , fill , circle , inner sep = 0pt , minimum size = 2pt }
+ }
+
+%---syntaxoff-----
+% * [node opt] (coor) <pos> {label} (min size dim)
+\NewDocumentCommand \xtXnodedot { s O{} r() D<>{above} G{} D(){\istsolidnodesize} }
+{
+ \IfBooleanTF {#1}
+ {
+ \node at (#3) [ nodedot , minimum size = #6 ,
+ label={[label distance=-2pt]#4:{\tiny\ttfamily #5}} , #2 ] {} ;
+ }
+ {
+ \node at (#3) [ nodedot , minimum size = #6 , #2 ] {} ;
+ }
+}
+%++++++++++++++++++++++++++++++++++++
+
+%---syntaxoff-----
+% initial values
+\def\xtcibegang {0}
+\def\xtciendang {0}
+
+\NewDocumentCommand \xtCInfosetOTurnX { m g }
+{
+ \renewcommand*\xtcibegang{#1}
+ \IfNoValueTF {#2}
+ { \renewcommand*\xtciendang{-\xtcibegang} }
+ { \renewcommand*\xtciendang{#2} }
+}
+
+%---syntaxoff-----
+% \xtCInfosetO
+% * [line opt] (beg-coor) !offmid weight! (end-coor) <plotfactor> +G{} O{} (info height dim)
+\NewDocumentCommand \xtCInfosetO
+{ s O{} r() d!! r() D<>{\xtCIplotfactor} +G{} O{} D(){\xtdefault@infosetheight} }
+{
+ \begin{scope}
+ \IfBooleanTF {#1} { } { \setistmathTF011 \istownertextfont{} } % must be in a group
+
+ \coordinate (xtA) at (#3) ;
+ \coordinate (xtB) at (#5) ;
+ \renewcommand*\xtinfosetheight{#9}
+
+ \istgameScaleCallTestAndAdjust % (must be in a GROUP) % this determines \xsinfosetheightvar
+ \xtCITestCoordinates{#3}{#5}
+ \ifxtCIsamecoordinates
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \draw (xtA) node [ draw , circle , samples = 500 , inner sep = 0pt ,
+ minimum size=\xtinfosetheightvar , % var needed for scaling
+ infoset style , #2] {} ;
+ \end{pgfonlayer}
+ \node at (#3) [ #8 ] { \istownerstyle{#7} } ;
+ \else
+ \edef\xtciplotfactor{#6}
+ \def\xtcitension{1}
+ \def\xradius{ .5*\xtinfosetheight }
+ \xdef\tosstoxtXcircles{\xtinfosetheightvar} % +++ for developer (see below) +++
+
+ \IfValueT {#4} {\edef\xtcimidvarfactor{#4}}
+ \setxtCIAngleAccordingtoGrowswapCallForCI{#6}{#4}
+
+ \path
+ let \p1 = ($(xtA)-(xtB)$) , \n1 = {veclen(\p1)}
+ in \pgfextra{\xdef\xtcidist{\n1}} ;
+
+ \pgfmathsetmacro\xratio{ scalar(\xtCI@default@rootdist/\xtcidist) }
+
+ \coordinate (xtcimid) at ($(xtA)!.5!(xtB)$) ;
+ \coordinate (xtciroot) at ($(xtcimid)!.5*\xtcidist!\xtCIangNew:(xtB)$) ;
+ \coordinate (xtcimid-var) at ($(xtA)!\xtcimidvarfactor!(xtB)$) ;
+ \coordinate (xtC) at ($(xtciroot)!\xtciplotfactor!(xtcimid-var)$) ;
+
+ \path (xtciroot) -- (xtA) -- ( [turn] \xtciangA+\xtcibegang:\xradius) coordinate (xtAA1) ;
+ \path (xtciroot) -- (xtB) -- ( [turn] \xtciangB+\xtciendang:\xradius) coordinate (xtBB1) ;
+
+ \coordinate (xtAA2) at ($(xtAA1)!2!(xtA)$) ;
+ \coordinate (xtBB2) at ($(xtBB1)!2!(xtB)$) ;
+
+ \draw [draw=none] (xtciroot) -- (xtC) -- ([turn]0:\xradius) coordinate (xtCC1) ;
+ \draw [draw=none] (xtciroot) -- (xtC) -- ([turn]180:\xradius) coordinate (xtCC2) ;
+
+ \coordinate (XpointA) at ($(xtA)!\xradius!-\xtCIangNew:(xtAA1)$) ;
+ \coordinate (XpointB) at ($(xtB)!\xradius! \xtCIangNew:(xtBB1)$) ;
+
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \draw [ - , samples = 500 , tension = \xtcitension , infoset style , #2 ]
+ plot [smooth] coordinates {(xtAA1)(xtCC1)(xtBB1)} --
+ plot [smooth,tension=1.75] coordinates {(xtBB1)(XpointB)(xtBB2)} --
+ plot [smooth] coordinates {(xtBB2)(xtCC2)(xtAA2)} --
+ plot [smooth,tension=1.75] coordinates {(xtAA2)(XpointA)(xtAA1)} -- cycle ;
+ \node at (xtC) [ #8 ] { \istownerstyle{#7} } ;
+ \end{pgfonlayer}
+ \fi
+ \end{scope}
+ % back to initial values
+ \def\xtcibegang{0}
+ \def\xtciendang{0}
+ %++++++++++++++++++++++++++++++++++++
+ %% +++ ONLY FOR DEVELOPER +++++++++++
+ %% control points
+ \ifxtXpoints
+ \ifxtXpointsONE
+ \ifxtXpointsLabel
+ \xtXnodedot*[fill=green](xtA)<right>{A}(\xtXpointsizeB)
+ \xtXnodedot*[fill=green](xtB)<left>{B}(\xtXpointsizeB)
+ \xtXnodedot*[green](xtC)<right>{C}(\xtXpointsizeB)
+ \xtXnodedot*[fill=blue!40](xtciroot)<right>{root}(\xtXpointsizeB)
+ \xtXnodedot*[fill=green](xtcimid-var)<right>{m}(\xtXpointsizeB)
+ \else
+ \xtXnodedot[fill=green](xtA)<right>{A}(\xtXpointsizeB)
+ \xtXnodedot[fill=green](xtB)<left>{B}(\xtXpointsizeB)
+ \xtXnodedot[green](xtC)<right>{C}(\xtXpointsizeB)
+ \xtXnodedot[fill=blue!40](xtciroot)<right>{root}(\xtXpointsizeB)
+ \xtXnodedot[fill=green](xtcimid-var)<right>{m}(\xtXpointsizeB)
+ \fi
+ \fi
+ \ifxtXpointsTWO
+ \ifxtXpointsLabel
+ \xtXnodedot*[blue](xtAA1){a1}(\xtXpointsizeA)
+ \xtXnodedot*[red](xtAA2)<below>{a2}(\xtXpointsizeA)
+ \xtXnodedot*[blue](xtBB1){b1}
+ \xtXnodedot*[red](xtBB2)<below>{b2}(\xtXpointsizeA)
+ \xtXnodedot*[blue](xtCC1){c1}(\xtXpointsizeA)
+ \xtXnodedot*[red](xtCC2)<below>{c2}(\xtXpointsizeA)
+ \else
+ \xtXnodedot[blue](xtAA1){a1}(\xtXpointsizeA)
+ \xtXnodedot[red](xtAA2)<below>{a2}(\xtXpointsizeA)
+ \xtXnodedot[blue](xtBB1){b1}(\xtXpointsizeA)
+ \xtXnodedot[red](xtBB2)<below>{b2}(\xtXpointsizeA)
+ \xtXnodedot[blue](xtCC1){c1}(\xtXpointsizeA)
+ \xtXnodedot[red](xtCC2)<below>{c2}(\xtXpointsizeA)
+ \fi
+ \fi
+ \ifxtXpointsTHREE
+ \ifxtXpointsLabel
+ \xtXnodedot*[blue](XpointA)<left>{x}(\xtXpointsizeA)
+ \xtXnodedot*[red](XpointB)<right>{y}(\xtXpointsizeA)
+ \else
+ \xtXnodedot[blue](XpointA)<left>{x}(\xtXpointsizeA)
+ \xtXnodedot[red](XpointB)<right>{y}(\xtXpointsizeA)
+ \fi
+ \fi
+ \fi
+ % X circles
+ \ifxtXcircles
+ \ifxtXcircleX
+ \node at (xtA) [-,circle,draw=blue,opacity=.5,minimum size=\tosstoxtXcircles ] {} ;
+ \fi
+ \ifxtXcircleY
+ \node at (xtB) [-,circle,draw=red,opacity=.5,minimum size=\tosstoxtXcircles ] {} ;
+ \fi
+ \fi
+ %++++++++++++++++++++++++++++++++++++
+}
+
+
+%% continuum of branches : information sets
+
+%---syntaxoff-----
+%% cntmA defaults (used in \ISTCntmArc)
+\def\cntmA@default@opt {} % arc line option
+\def\cntmA@default@pos {1} % arc position %% default was .5
+\def\cntmA@default@plotfactor {1.333} % arc curvature
+\def\cntmAInfosetplotfactor {\cntmA@default@plotfactor}
+\def\cntmA@default@fillcolor {transparent} % no white
+\newcommand*\cntmAopt {\cntmA@default@opt}
+\newcommand*\cntmApos {\cntmA@default@pos}
+\newcommand*\cntmAplotfactor {\cntmA@default@plotfactor}
+\newcommand*\cntmAfillcolor {\cntmA@default@fillcolor}
+
+%---syntaxoff-----
+% \cntmAplotfactorset
+% use this before \istrootcntmA
+\NewDocumentCommand \cntmAplotfactorset { m }
+{
+ \renewcommand*\cntmAplotfactor {#1}
+ \edef\cntmAInfosetplotfactor {#1}
+}
+
+%---syntaxoff-----
+% \cntmApreset
+% use this before \istrootcntmA
+% \cntmApreset
+% [Aopt]<plotfactor>{Apos}[fill color]
+% use fill color only at the second bracket option (not first)
+\NewDocumentCommand \cntmApreset
+{ O{\cntmA@default@opt} D<>{\cntmA@default@plotfactor} g O{\cntmA@default@fillcolor} }
+{
+ \IfNoValueTF {#3}
+ {
+ \renewcommand*\cntmApos {\cntmA@default@pos}
+ }
+ {
+ \renewcommand*\cntmApos {#3}
+ }
+ \renewcommand*\cntmAopt {#1}
+ \cntmAplotfactorset {#2}
+ \renewcommand*\cntmAfillcolor {#4}
+}
+
+
+%---syntaxoff-----
+% cntm layer
+\def\cntm@default@layer{background} % better than behind
+\NewDocumentCommand \cntmlayerset{ m }
+{
+ \renewcommand*\cntm@default@layer{#1}
+}
+
+%---syntaxoff-----
+% cntmA layer
+\def\cntmA@default@layer{behind} % better than background
+\newcommand*\cntmAdefaultlayer{\cntmA@default@layer}
+\NewDocumentCommand \cntmAlayerpreset{ G{\cntmA@default@layer} }
+{
+ \renewcommand*\cntmAdefaultlayer{#1}
+}
+
+
+%---syntaxoff-----
+% \cntmAInfoset
+% [Aopt] (cntm-root) <\xtCIplotfactor> {addto cntmApos}
+\NewDocumentCommand \cntmAInfoset
+{ O{\cntmA@default@opt} r() D<>{\cntmAInfosetplotfactor} G{.1} }
+{
+ % save arc options and position
+ \let\tmpAIpos\cntmApos
+ \let\tmpAIopt\cntmAopt
+ \pgfmathsetmacro{\cntmAInfosetpos}{\cntmApos+#4}
+
+ \coordinate (ciroot) at (#2) ;
+ \coordinate (ciA) at ($(ciroot)!\cntmAInfosetpos!(cntm-1)$) ;
+ \coordinate (ciB) at ($(ciroot)!\cntmAInfosetpos!(cntm-2)$) ;
+ \edef\ciplotfactor{#3}
+ \def\citension{1}
+
+ \pgfmathsetmacro\cidistratio{ scalar(\cntmlevdist/\cntmsibdist) }
+ \pgfmathsetmacro\ciplotfactorVal{ 1 + (\ciplotfactor-1) * sqrt(1/3) / sqrt(\cidistratio) }
+
+ \coordinate (cimid) at ($(ciA)!.5!(ciB)$) ;
+ \coordinate (ciC) at ($(ciroot)!\ciplotfactorVal!(cimid)$) ;
+
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \draw [ - , samples=500 , tension = \citension , infoset style , #1 ]
+ plot [smooth] coordinates {(ciA)(ciC)(ciB)} ;
+ \end{pgfonlayer}
+ \let\cntmApos\tmpAIpos
+ \let\cntmAopt\tmpAIopt
+}
+
+
+%---syntaxoff-----
+% \cntmAInfosetO
+% [Aopt] (cntm-root) <plot factor> {Apos} [turn X-ang] (infoset height)
+\NewDocumentCommand \cntmAInfosetO
+{ O{\cntmA@default@opt} r() D<>{\cntmAInfosetplotfactor} G{\cntmApos} O{0} D(){\xtdefault@infosetheight} }
+{
+ \begin{scope}
+ \coordinate (ciroot) at (#2) ;
+ \coordinate (ciA) at ($(ciroot)!#4!(cntm-1)$) ;
+ \coordinate (ciB) at ($(ciroot)!#4!(cntm-2)$) ;
+ \edef\ciplotfactor{#3}
+ \def\ciAdjXang{#5}
+ \def\cntminfosetheight{#6}
+ \def\citension{1}
+
+ \istgameScaleCallTestAndAdjust % (must be in a GROUP)
+ \def\ciradius{ .5*\cntminfosetheight } % not -var
+ \xdef\tosstocntmXcircles{\cntminfosetheightvar} % +++ for developer (see below) +++
+ \setciAngleAccordingtoGrowswapCallForCntmAI{#3}
+
+ \pgfmathsetmacro\cidistratio{ scalar(\cntmlevdist/\cntmsibdist) }
+ % to ease the curvature (using \cidistratio)
+ \pgfmathsetmacro\ciplotfactorVal{ 1 + (\ciplotfactor-1)*sqrt(1/3)/sqrt(\cidistratio) }
+ % adjust Xangle
+ \ifdim .5pt <\cidistratio pt
+ \pgfmathsetmacro\ciDefaultAdjXang{ -5 + 30*\cidistratio } % (10 if ratio=1/2 )
+ \else
+ \pgfmathsetmacro\ciDefaultAdjXang{ -10 + 30*\cidistratio } % (0 if ratio=1/3 )
+ \fi
+ \pgfmathsetmacro\ciXadj{ \cisign * (\ciDefaultAdjXang - \ciAdjXang) }
+
+ % defining coordinates
+ \coordinate (cimid) at ($(ciA)!.5!(ciB)$) ;
+ \coordinate (ciC) at ($(ciroot)!\ciplotfactorVal!(cimid)$) ;
+
+ \path (ciroot) -- (ciA) -- ( [turn] \ciangA-\ciXadj:\ciradius) coordinate (ciAA1) ;
+ \path (ciroot) -- (ciB) -- ( [turn] \ciangB+\ciXadj:\ciradius) coordinate (ciBB1) ;
+
+ \coordinate (ciAA2) at ($(ciAA1)!2!(ciA)$) ;
+ \coordinate (ciBB2) at ($(ciBB1)!2!(ciB)$) ;
+
+ \draw [draw=none] (ciroot) -- (ciC) -- ([turn]0:\ciradius) coordinate (ciCC1) ;
+ \draw [draw=none] (ciroot) -- (ciC) -- ([turn]180:\ciradius) coordinate (ciCC2) ;
+
+ \coordinate (ciXpointA) at ($(ciA)!\ciradius! \ciangNew:(ciAA1)$) ;
+ \coordinate (ciXpointB) at ($(ciB)!\ciradius!-\ciangNew:(ciBB1)$) ;
+
+ \begin{pgfonlayer}{\xtinfosetlayer}
+ \draw [ - , samples=500 , tension = \citension , infoset style , #1 ]
+ plot [smooth] coordinates {(ciAA1)(ciCC1)(ciBB1)} --
+ plot [smooth,tension=1.75] coordinates {(ciBB1)(ciXpointB)(ciBB2)} --
+ plot [smooth] coordinates {(ciBB2)(ciCC2)(ciAA2)} --
+ plot [smooth,tension=1.75] coordinates {(ciAA2)(ciXpointA)(ciAA1)} -- cycle ;
+ \end{pgfonlayer}
+ \end{scope}
+ %++++++++++++++++++++++++++++++++++++
+ %% +++ ONLY FOR DEVELOPER +++++++++++
+ %% control points
+ \ifxtXpoints
+ \ifxtXpointsONE
+ \ifxtXpointsLabel
+ \xtXnodedot*[fill=green](ciA)<right>{A}(\xtXpointsizeB)
+ \xtXnodedot*[fill=green](ciB)<left>{B}(\xtXpointsizeB)
+ \xtXnodedot*[green](ciC)<right>{A}(\xtXpointsizeB)
+ \xtXnodedot*[fill=green](ciroot)(\xtXpointsizeB)
+ \xtXnodedot*[fill=green](cimid)<right>{m}(\xtXpointsizeB)
+ \else
+ \xtXnodedot[fill=green](ciA)<right>{A}(\xtXpointsizeB)
+ \xtXnodedot[fill=green](ciB)<left>{B}(\xtXpointsizeB)
+ \xtXnodedot[green](ciC)<right>{A}(\xtXpointsizeB)
+ \xtXnodedot[fill=green](ciroot)(\xtXpointsizeB)
+ \xtXnodedot[fill=green](cimid)<right>{m}(\xtXpointsizeB)
+ \fi
+ \fi
+ \ifxtXpointsTWO
+ \ifxtXpointsLabel
+ \xtXnodedot*[blue](ciAA1)<below>{a1}(\xtXpointsizeA)
+ \xtXnodedot*[red](ciAA2)<above>{a2}(\xtXpointsizeA)
+ \xtXnodedot*[blue](ciBB1)<below>{b1}(\xtXpointsizeA)
+ \xtXnodedot*[red](ciBB2)<above>{b2}(\xtXpointsizeA)
+ \xtXnodedot*[blue](ciCC1)<below>{c1}(\xtXpointsizeA)
+ \xtXnodedot*[red](ciCC2)<above>{c2}(\xtXpointsizeA)
+ \else
+ \xtXnodedot[blue](ciAA1)<below>{a1}(\xtXpointsizeA)
+ \xtXnodedot[red](ciAA2)<above>{a2}(\xtXpointsizeA)
+ \xtXnodedot[blue](ciBB1)<below>{b1}(\xtXpointsizeA)
+ \xtXnodedot[red](ciBB2)<above>{b2}(\xtXpointsizeA)
+ \xtXnodedot[blue](ciCC1)<below>{c1}(\xtXpointsizeA)
+ \xtXnodedot[red](ciCC2)<above>{c2}(\xtXpointsizeA)
+ \fi
+ \fi
+ \ifxtXpointsTHREE
+ \ifxtXpointsLabel
+ \xtXnodedot*[blue](ciXpointA)<left>{x}(\xtXpointsizeA)
+ \xtXnodedot*[red](ciXpointB)<right>{y}(\xtXpointsizeA)
+ \else
+ \xtXnodedot[blue](ciXpointA)<left>{x}(\xtXpointsizeA)
+ \xtXnodedot[red](ciXpointB)<right>{y}(\xtXpointsizeA)
+ \fi
+ \fi
+ \fi
+ % X circles
+ \ifxtXcircles
+ \ifxtXcircleX
+ \node at (ciA) [-,circle,draw=blue,opacity=.5,minimum size=\tosstocntmXcircles ] {} ;
+ \fi
+ \ifxtXcircleY
+ \node at (ciB) [-,circle,draw=red,opacity=.5,minimum size=\tosstocntmXcircles ] {} ;
+ \fi
+ \fi
+ %++++++++++++++++++++++++++++++++++++
+}
+
+
+%%-----------------
+%% expl3 from here again
+%%-----------------
+
+\ExplSyntaxOn
+
+%% preset for \istb (for outermost branches) for "cntm triangle" and "cntm arc"
+% cntmA stands for "cntm arc"
+
+% cntm color
+
+\def\cntm@default@opt { }
+\newcommand*\cntmopt { \cntm@default@opt }
+
+\def\cntm@default@drawcolor { black!25 }
+\newcommand*\cntmdrawcolor { \cntm@default@drawcolor }
+\def\cntm@default@fillcolor { \cntm@default@drawcolor }
+\newcommand*\cntmfillcolor { \cntm@default@fillcolor }
+\def\cntm@default@pos { 1 }
+\newcommand*\cntmpos { \cntm@default@pos }
+
+% cntm outermost draw options
+\def\cntm@default@branchopt { draw = none } % "draw=none" needed to keep cntm "triangle" default
+\newcommand*\cntmbranchopt { \cntm@default@branchopt }
+
+\def\cntmLeftAL { } % leftmost AL
+\def\cntmLeftALpos { } % leftmost AL position
+\def\cntmRightAL { } % rightmost AL
+\def\cntmRightALpos { } % rightmost AL position
+
+% cntmA outermost draw options
+\def\cntmAbranchdrawopt { } % "empty" needed for cntmA outermost "branch" control
+
+\def\cntmALeftAL { } % leftmost AL
+\def\cntmALeftALpos { } % leftmost AL position
+\def\cntmARightAL { } % rightmost AL
+\def\cntmARightALpos { } % rightmost AL position
+
+
+\bool_set_false:N \_cntm_pos_call_bool
+
+% \cntmpreset
+% * [ draw, color, fill ] { shrink factor } [ fill color ]
+% the first, if exists, [ fill=color ] wins the second [ fill color ]
+% that is, \cntmopt (with fill=color) wins \cntmfillcolor
+\NewDocumentCommand \cntmpreset { s O{} g o }
+{
+ \IfNoValueTF {#3}
+ {
+ \renewcommand*\cntmpos{\cntm@default@pos}
+ }
+ {
+ \renewcommand*\cntmpos{#3}
+ \bool_set_true:N \_cntm_pos_call_bool
+ }
+ \IfBooleanTF {#1}
+ {
+ \IfValueTF {#4}
+ {
+ \renewcommand*\cntmfillcolor{#4}
+ \renewcommand*\cntmopt{ - , solid , draw = black , fill = \cntmfillcolor , #2 }
+ }
+ {
+ \renewcommand*\cntmopt{ - , solid , draw = black , fill = none , #2 }
+ }
+ }
+ {
+ \IfValueT {#4}
+ {
+ \renewcommand*\cntmdrawcolor{#4}
+ \let\cntmfillcolor\cntmdrawcolor
+ }
+ \renewcommand*\cntmopt{ - , solid, draw = \cntmdrawcolor , fill = \cntmfillcolor, #2}
+ }
+}
+
+
+% ============
+% complication needed to resolve tex expansion issues
+% ------------
+
+% \cntmistb
+% complication:
+ % controls options for outermost branches via \l_cntm_left/rightmost_branch_opt_tl
+ % finally used in \istrootcntm and \istrootocntm
+% USE this BEFORE \istrootcntm
+% * [ line opt ] { LEFT AL } [ LEFT pos ] { RIGHT AL } [ RIGHT pos ]
+\NewDocumentCommand \cntmistb{ s O{} +G{} O{} +G{} O{} }
+{
+ \renewcommand*\cntmbranchopt { - , draw=none, #2 }
+ \renewcommand*\cntmLeftAL {#3}
+ \renewcommand*\cntmRightAL {#5}
+ \renewcommand*\cntmLeftALpos
+ {
+% \str_case_e:nnF {#4}
+ \str_case:nnF {#4}
+ {
+ {al} { above~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {ar} { above~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {bl} { below~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = \istactionlabelyshift }
+ {br} { below~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = \istactionlabelyshift }
+ {l} { left , text~depth = .25ex , xshift = -\xtALxShift }
+ {r} { right , text~depth = .25ex , xshift = \xtALxShift }
+ {a} { above , text~depth = .25ex , xshift = \xtALxShift }
+ {b} { below , text~depth = .25ex , xshift = -\xtALxShift }
+ }
+ {
+ #4
+ }
+ }
+ \renewcommand*\cntmRightALpos
+ {
+% \str_case_e:nnF {#6}
+ \str_case:nnF {#6}
+ {
+ {al} { above~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {ar} { above~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {bl} { below~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = \istactionlabelyshift }
+ {br} { below~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = \istactionlabelyshift }
+ {l} { left , text~depth = .25ex , xshift = -\xtALxShift }
+ {r} { right , text~depth = .25ex , xshift = \xtALxShift }
+ {a} { above , text~depth = .25ex , xshift = \xtALxShift }
+ {b} { below , text~depth = .25ex , xshift = -\xtALxShift }
+ }
+ {
+ #6
+ }
+ }
+ \IfBooleanTF {#1}
+ { % disobey \xtShowEndPoints* -- force to print solid node
+ \renewcommand*\cntm@show@endpoint { node [ at~end , solid~node ] {} }
+ }
+ { % obey \xtShowEndPoints* and toss the value to \istrootntm(A) via \cntmOUTERistb
+ \cntm@show@endpoint
+ }
+}
+
+
+% \cntmAistb
+% complication:
+ % controls options for outermost branches via \l_cntmA_left/rightmost_branch_opt_tl
+ % finally used in \istrootcntmA and \istrootocntmA
+% USE this BEFORE \istrootcntmA
+% * [ line opt ] { LEFT AL } [ LEFT pos ] { RIGHT AL } [ RIGHT pos ]
+\NewDocumentCommand \cntmAistb { s O{-} +G{} O{} +G{} O{} }
+{
+ \renewcommand*\cntmAbranchdrawopt {#2}
+ \renewcommand*\cntmALeftAL {#3}
+ \renewcommand*\cntmARightAL {#5}
+ \renewcommand*\cntmALeftALpos
+ {
+% \str_case_e:nnF {#4}
+ \str_case:nnF {#4}
+ {
+ {al} { above~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {ar} { above~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {bl} { below~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = \istactionlabelyshift }
+ {br} { below~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = \istactionlabelyshift }
+ {l} { left , text~depth = .25ex , xshift = -\xtALxShift }
+ {r} { right , text~depth = .25ex , xshift = \xtALxShift }
+ {a} { above , text~depth = .25ex , xshift = \xtALxShift }
+ {b} { below , text~depth = .25ex , xshift = -\xtALxShift }
+ }
+ {
+ #4
+ }
+ }
+ \renewcommand*\cntmARightALpos
+ {
+% \str_case_e:nnF {#6}
+ \str_case:nnF {#6}
+ {
+ {al} { above~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {ar} { above~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = -\istactionlabelyshift }
+ {bl} { below~left , text~depth = .25ex ,
+ xshift = \istactionlabelxshift , yshift = \istactionlabelyshift }
+ {br} { below~right , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift , yshift = \istactionlabelyshift }
+ {l} { left , text~depth = .25ex , xshift = -\xtALxShift }
+ {r} { right , text~depth = .25ex , xshift = \xtALxShift }
+ {a} { above , text~depth = .25ex , xshift = \xtALxShift }
+ {b} { below , text~depth = .25ex , xshift = -\xtALxShift }
+ }
+ {
+ #6
+ }
+ }
+ \IfBooleanTF {#1}
+ { % disobey \xtShowEndPoints* -- force to print solid node
+ \renewcommand*\cntm@show@endpoint { node [ at~end , solid~node ] {} }
+ }
+ { % obey \xtShowEndPoints* and toss the value to \istrootntm(A) via \cntmOUTERistb
+ \cntm@show@endpoint
+ }
+}
+
+% to restore initial values after \cntmistb
+% (restore is done by \endist)
+\def\cntmistbVariablesRestore
+{
+ \renewcommand*\cntmbranchopt { \cntm@default@branchopt }
+ \renewcommand*\cntmLeftAL { }
+ \renewcommand*\cntmRightAL { }
+ \renewcommand*\cntmLeftALpos { }
+ \renewcommand*\cntmRightALpos { }
+}
+
+% to restore initial values after \cntmistb
+% (restore is done by \endist)
+\def\cntmAistbVariablesRestore
+{
+ \renewcommand*\cntmAbranchdrawopt { }
+ \renewcommand*\cntmALeftAL { }
+ \renewcommand*\cntmARightAL { }
+ \renewcommand*\cntmALeftALpos { }
+ \renewcommand*\cntmARightALpos { }
+}
+
+% \cntmistb LEFT/RIGHT options:
+% (still in the complication) collecting branch options input by \cntmistb
+% the collected token list will be used in \istrootcntm and \istrootocntm
+% [ - , \cntmAbranchdrawopt ] { LEFT AL } [ LEFT pos ] { RIGHT AL } [ RIGHT pos ]
+\cs_new:Npn \_collect_cntm_leftmost_branch_opts:
+{
+ \tl_set:Nn \l_cntm_leftmost_branch_opt_tl { [ - , }
+ \tl_put_right:Nx \l_cntm_leftmost_branch_opt_tl { \cntmbranchopt ] }
+ \tl_put_right:Nn \l_cntm_leftmost_branch_opt_tl { { \istactionlabelstyle { \cntmLeftAL } } }
+ \tl_put_right:Nx \l_cntm_leftmost_branch_opt_tl { [ \cntmLeftALpos ] }
+}
+
+\cs_new:Npn \_collect_cntm_rightmost_branch_opts:
+{
+ \tl_set:Nn \l_cntm_rightmost_branch_opt_tl { [ - , }
+ \tl_put_right:Nx \l_cntm_rightmost_branch_opt_tl { \cntmbranchopt ] }
+ \tl_put_right:Nn \l_cntm_rightmost_branch_opt_tl { { \istactionlabelstyle { \cntmRightAL } } }
+ \tl_put_right:Nx \l_cntm_rightmost_branch_opt_tl { [ \cntmRightALpos ] }
+}
+
+
+% \cntmAistb LEFT/RIGHT options:
+% (still in the complication) collecting branch options input by \cntmAistb
+% the collected token list will be used in \istrootcntmA and \istrootocntmA
+% [ - , \cntmAbranchdrawopt ] { LEFT AL } [ LEFT pos ] { RIGHT AL } [ RIGHT pos ]
+\cs_new:Npn \_collect_cntmA_leftmost_branch_opts:
+{
+ \tl_set:Nn \l_cntmA_leftmost_branch_opt_tl { [ - , }
+ \tl_put_right:Nx \l_cntmA_leftmost_branch_opt_tl { \cntmAbranchdrawopt ] }
+ \tl_put_right:Nn \l_cntmA_leftmost_branch_opt_tl { { \istactionlabelstyle { \cntmALeftAL } } }
+ \tl_put_right:Nx \l_cntmA_leftmost_branch_opt_tl { [ \cntmALeftALpos ] }
+}
+
+\cs_new:Npn \_collect_cntmA_rightmost_branch_opts:
+{
+ \tl_set:Nn \l_cntmA_rightmost_branch_opt_tl { [ - , }
+ \tl_put_right:Nx \l_cntmA_rightmost_branch_opt_tl { \cntmAbranchdrawopt ] }
+ \tl_put_right:Nn \l_cntmA_rightmost_branch_opt_tl { { \istactionlabelstyle { \cntmARightAL } } }
+ \tl_put_right:Nx \l_cntmA_rightmost_branch_opt_tl { [ \cntmARightALpos ] }
+}
+
+
+% complication needed to resolve tex expansion issues (for cntm triangle)
+% this will be used to draw cntm triangle in \istrootcntm and \istrootcntmo
+% [ - , draw = \cntmdrawcolor , fill = \cntmfillcolor ]
+\cs_new:Npn \_collect_cntm_triangle_cmdstr:
+{
+ \tl_set:Nn \l_tmp_option_str_tl { [ - , }
+ \tl_put_right:Nn \l_tmp_option_str_tl { draw = }
+ \tl_put_right:Nx \l_tmp_option_str_tl { \cntmdrawcolor , }
+ \tl_put_right:Nn \l_tmp_option_str_tl { fill = }
+ \tl_put_right:Nx \l_tmp_option_str_tl { \cntmfillcolor , }
+ \tl_put_right:Nx \l_tmp_option_str_tl { \cntmopt ] }
+}
+
+
+% \cntmOUTERistb
+% modification of \istb for cntm outermost branches with NO PAYOFF
+% this actually draws outermost branches (used in \istrootcntm and \istrootocntm)
+\NewDocumentCommand \cntmOUTERistb
+{ s D<>{} O{} +G{} O{} }
+{
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ #2 ]
+ {
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow , #3 } { #5 } { #4 }
+ % the next must NOT go BEFORE \ist_move:nnn : PROBLEMatic (possibly TikZ problem)
+ \IfBooleanTF { #1 } { \cntm@ndot } { \cntm@show@endpoint }
+ }
+ }
+}
+
+
+% \cntmAOUTERistb
+% modification of \istb for cntmA outermost branches with NO PAYOFF
+% this actually draws outermost branches (used in \istrootcntmA and \istrootocntmA)
+\NewDocumentCommand \cntmAOUTERistb
+{ s D<>{} O{} +G{} O{} +g O{\istgrowdirection} }
+{
+ \tl_put_right:Nn \ischo_game_tl
+ {
+ child [ #2 ]
+ {
+ \ist_move:nnn { \xt@show@midarrow , \xt@show@arrow , #3 } { #5 } { #4 }
+ % the next must NOT go BEFORE \ist_move:nnn : PROBLEMatic (possibly TikZ problem)
+ \IfBooleanTF { #1 } { \cntm@ndot } { \cntm@show@endpoint }
+ }
+ }
+}
+
+% ------------
+% complication so far needed to resolve tex expansion issues
+% still more complication below
+% ============
+
+
+%% main macros: continuum of branches
+
+% \istrootcntm -- standard cntm version
+% ' [grow] (root) (at) [node style] <angle> {owner} +cntmlevdist..cntmsibdist+
+\NewDocumentCommand \istrootcntm
+{ t' O{\istdefault@grow} r() D(){0,0} O{} D<>{above} G{} d+. d.+ }
+{
+ % to suppress \xtShowArrows for cntm
+ \let\tmp@xt@show@arrow\xt@show@arrow
+ \def\xt@show@arrow { }
+ \let\tmp@xt@show@midarrow\xt@show@midarrow
+ \def\xt@show@midarrow { }
+
+ % Now \_cntm_levdist_local_tl and \_cntm_sibdist_local_tl is the bases
+ \IfNoValueTF {#8}
+ {
+ \bool_set_false:N \_cntm_distance_local_call_bool
+ \tl_set:Nn \_cntm_levdist_local_tl { \cntmlevdist }
+ \tl_set:Nn \_cntm_sibdist_local_tl { \cntmsibdist }
+ }
+ {
+ \bool_set_true:N \_cntm_distance_local_call_bool
+ \tl_set:Nn \_cntm_levdist_local_tl { #8 }
+ \tl_set:Nn \_cntm_sibdist_local_tl { #9 }
+ }
+
+ % Now \_cntm_act_sibdist_tl is the base
+ \bool_if:NTF \cntm_act_sibdist_call_bool
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl { \cntmACTsibdist }
+ }
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl { 1/3 * \_cntm_sibdist_local_tl }
+ }
+
+ % adjust \cntm position for smaller triangle
+ \pgfmathsetmacro \cntmlevdistVar { \cntmpos * \_cntm_levdist_local_tl }
+ \pgfmathsetmacro \cntmsibdistVar { \cntmpos * \_cntm_sibdist_local_tl }
+
+ %% \istroot(') : cntm outermost branches
+ \tl_clear:N \ischo_game_tl
+ \xdef\istgrowdirection{#2}
+
+ % execute \ISTRoot [\istgrowdirection] (cntm) (#4) [null node] +{#8}..{#9}+
+ % this defines (cntm)
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl
+ {
+ [ \istgrowdirection ] (cntm) (#4) [ null~node ]
+ + { \cntmlevdistVar } .. { \cntmsibdistVar } +
+ }
+
+ %% (before executing \istb) call options collected from above complication
+ \_collect_cntm_leftmost_branch_opts:
+ \_collect_cntm_rightmost_branch_opts:
+
+ % execute \istb \istb for cntm LEFT/RIGHT outermost branches
+ % this defines (cntm-1) and (cntm-2)
+ \exp_last_unbraced:NV \cntmOUTERistb \l_cntm_leftmost_branch_opt_tl
+ \exp_last_unbraced:NV \cntmOUTERistb \l_cntm_rightmost_branch_opt_tl
+ \printist ;
+
+ %% draw cntm triangle, using (cntm), (cntm-1), (cntm-2)
+ \begin{scope}[ shorten~< = 0pt , shorten~> = 0pt ]
+ % call (draw and fill) options collected from above complication
+ \_collect_cntm_triangle_cmdstr:
+ % and finally draw "cntm triangle"
+ % \draw [opts] (cntm) -- (cntm-1) -- (cntm-2) - (cntm) ;
+ \begin{pgfonlayer}{\cntm@default@layer} % default: background
+ \exp_last_unbraced:No \draw \l_tmp_option_str_tl (cntm)--(cntm-1)--(cntm-2)--(cntm) ;
+ \end{pgfonlayer}
+ \end{scope}
+
+ %% cntm action (actually taken by a player)
+ % this is normal \istroot(')
+ \tl_clear:N \ischo_game_tl
+
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl { [ \istgrowdirection ] (#3) (cntm) [#5] <#6> }
+ \tl_put_right:Nn \ischo_game_tl { { \istownerstyle{ #7 } } }
+ \tl_put_right:Nx \ischo_game_tl { +{ \_cntm_levdist_local_tl }..{ 1*\_cntm_act_sibdist_local_tl }+ }
+
+ % call set (for \istbA)
+ \bool_set_true:N \_istroot_cntm_call_bool % for \istbA
+
+ % back to normal \xtShowArrows
+ \let\xt@show@arrow\tmp@xt@show@arrow
+ \let\xt@show@midarrow\tmp@xt@show@midarrow
+}
+
+
+% resolving expansion issue (for cntmA)
+% [ - , tension=1 , \cntmAopt ]
+\cs_new:Npn \_collect_cntmA_cmdstr:
+{
+ \tl_set:Nn \l_tmp_arc_option_str_tl { [ - , tension=1 , }
+ \tl_put_right:Nx \l_tmp_arc_option_str_tl { \cntmAopt ] }
+}
+
+% [ - , tension=1 , \cntmAfillcolor ]
+\cs_new:Npn \_collect_cntmA_color_cmdstr:
+{
+ \tl_set:Nn \l_tmp_arc_color_str_tl { [ - , tension=1 , }
+ \tl_put_right:Nx \l_tmp_arc_color_str_tl { \cntmAfillcolor ] }
+}
+
+% \istrootcntmA -- cntm arc version
+% ' [grow] (root) (at) [node style] <angle> {owner} +cntmlevdist..cntmsibdist+
+\NewDocumentCommand \istrootcntmA
+{ t' O{\istdefault@grow} r() D(){0,0} O{} D<>{above} G{} d+. d.+ }
+{
+ % to suppress \xtShowArrows for cntm
+ \let\tmp@xt@show@arrow\xt@show@arrow
+ \def\xt@show@arrow { }
+ \let\tmp@xt@show@midarrow\xt@show@midarrow
+ \def\xt@show@midarrow { }
+
+ % Now \_cntm_levdist_local_tl and \_cntm_sibdist_local_tl is the bases
+ \IfNoValueTF {#8}
+ {
+ \bool_set_false:N \_cntmA_distance_local_call_bool
+ \tl_set:Nn \_cntmA_levdist_local_tl { \cntmlevdist }
+ \tl_set:Nn \_cntmA_sibdist_local_tl { \cntmsibdist }
+ }
+ {
+ \bool_set_true:N \_cntmA_distance_local_call_bool
+ \tl_set:Nn \_cntmA_levdist_local_tl { #8 }
+ \tl_set:Nn \_cntmA_sibdist_local_tl { #9 }
+ }
+
+ % Now \_cntm_act_sibdist_tl is the base
+ \bool_if:NTF \cntm_act_sibdist_call_bool
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl {\cntmACTsibdist}
+ }
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl {1/3*\_cntmA_sibdist_local_tl}
+ }
+
+ %% \ISTRoot(') : for drawing cntmA outermost branches
+ \tl_clear:N \ischo_game_tl
+ \xdef\istgrowdirection{#2}
+
+ % execute \ISTRoot
+ % this defines (cntm)
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl
+ { [ \istgrowdirection ] (cntm) (#4) [ null~node ]
+ +{\_cntmA_levdist_local_tl}..{\_cntmA_sibdist_local_tl}+ }
+
+ %% (before executing \istb) call options collected from above complication
+ \_collect_cntmA_leftmost_branch_opts:
+ \_collect_cntmA_rightmost_branch_opts:
+
+ % execute \istb \istb for cntmA LEFT/RIGHT outermost branches
+ % this defines (cntm-1) and (cntm-2)
+ \exp_last_unbraced:NV \cntmAOUTERistb \l_cntmA_leftmost_branch_opt_tl
+ \exp_last_unbraced:NV \cntmAOUTERistb \l_cntmA_rightmost_branch_opt_tl
+ \printist ;
+
+ %% defining cntmA points
+ % First, adjust plot vertex to compensate dependency of tree shape
+ \pgfmathsetmacro\cntmdistratio{ scalar (\_cntmA_levdist_local_tl/\_cntmA_sibdist_local_tl) }
+ % sqrt(1/3) is to make the cntmdist ratio 1/3 as standard
+ \pgfmathsetmacro\cntmAplotfactorVal
+ { 1 + (\cntmAplotfactor-1) * sqrt(1/3) / sqrt(\cntmdistratio) }
+ \pgfextra{\xdef\cntmAplotfactorAdj{\cntmAplotfactorVal}} % used also in \istbA(t)
+ \coordinate (cntmA-beg) at ( $ (cntm) ! \cntmApos ! (cntm-1) $ ) ; % begin point
+ \coordinate (cntmA-end) at ( $ (cntm) ! \cntmApos ! (cntm-2) $ ) ; % end point
+ \coordinate (cntmA-mid-base) at ( $ (cntm-1) ! .5 ! (cntm-2)$) ; % base midpoint
+ % defines "compensated" plot vertex
+ \coordinate (cntmA-vertex)
+ at ( $ (cntm) ! \cntmAplotfactorAdj*\cntmApos ! (cntmA-mid-base) $ ) ;
+ % (for expost/outside use)
+ \coordinate (cntmAi-begpoint) at ( $ (cntm) ! \cntmApos ! (cntm-1) $ ) ;
+ \coordinate (cntmAi-endpoint) at ( $ (cntm) ! \cntmApos ! (cntm-2) $ ) ;
+
+ %% plot cntmA
+ % \draw [ \cntmAopt , - , <opts> , tension=1 ]
+ \_collect_cntmA_cmdstr:
+ \_collect_cntmA_color_cmdstr:
+
+ \begin{scope}[ shorten~< = 0pt , shorten~> = 0pt ]
+ \begin{pgfonlayer}{\cntmAdefaultlayer} % default: behind
+ \exp_last_unbraced:No \fill \l_tmp_arc_color_str_tl
+ (cntm) -- plot [ smooth ] coordinates { (cntmA-beg) (cntmA-vertex) (cntmA-end) } -- cycle ;
+ \exp_last_unbraced:No \draw \l_tmp_arc_option_str_tl
+ plot [ smooth ] coordinates { (cntmA-beg) (cntmA-vertex) (cntmA-end) } ;
+ \end{pgfonlayer}
+ \end{scope}
+
+ %% cntmA action (actually taken by a player)
+ % this is normal \istroot(')
+ \tl_clear:N \ischo_game_tl
+
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRoot } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl { [ \istgrowdirection ] (#3) (cntm) [#5] <#6> }
+ \tl_put_right:Nn \ischo_game_tl { { \istownerstyle{ #7 } } }
+ \tl_put_right:Nx \ischo_game_tl { +{ \_cntmA_levdist_local_tl }..{ 1*\_cntm_act_sibdist_local_tl }+ }
+
+ % call set (for \istbA)
+ \bool_set_true:N \_istroot_cntmA_call_bool
+
+ % back to normal \xtShowArrows
+ \let\xt@show@arrow\tmp@xt@show@arrow
+ \let\xt@show@midarrow\tmp@xt@show@midarrow
+}
+
+% \cntmAexpostShowEndPoints
+% use this right after \istrootcntmA and \istrootocntmA
+% (before \cntmAInfoset and \cntmAInfosetO)
+\NewDocumentCommand \cntmAexpostShowEndPoints
+{ O{} O{} }
+{
+%\begin{pgfonlayer}{above} % main is ok
+\node [ solid~node , #1 ] at (cntmAi-begpoint) {} ;
+\node [ solid~node , #2 ] at (cntmAi-endpoint) {} ;
+%\end{pgfonlayer}
+}
+
+
+% \istrootocntm -- oval cntm version
+% ' [grow] (root) (at) [node style] <angle> {owner} +cntmlevdist..cntmsibdist+
+\NewDocumentCommand \istrootocntm
+{ t' O{\istdefault@grow} r() D(){0,0} O{} D<>{above} G{} d+. d.+ }
+{
+ % to suppress \xtShowArrows for cntm
+ \let\tmp@xt@show@arrow\xt@show@arrow
+ \def\xt@show@arrow { }
+ \let\tmp@xt@show@midarrow\xt@show@midarrow
+ \def\xt@show@midarrow { }
+
+ % Now \_cntm_levdist_local_tl and \_cntm_sibdist_local_tl is the bases
+ \IfNoValueTF {#8}
+ {
+ \bool_set_false:N \_cntm_distance_local_call_bool
+ \tl_set:Nn \_cntm_levdist_local_tl { \cntmlevdist }
+ \tl_set:Nn \_cntm_sibdist_local_tl { \cntmsibdist }
+ }
+ {
+ \bool_set_true:N \_cntm_distance_local_call_bool
+ \tl_set:Nn \_cntm_levdist_local_tl { #8 }
+ \tl_set:Nn \_cntm_sibdist_local_tl { #9 }
+ }
+
+ % Now \_cntm_act_sibdist_tl is the base
+ \bool_if:NTF \cntm_act_sibdist_call_bool
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl {\cntmACTsibdist}
+ }
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl {1/3*\_cntm_sibdist_local_tl}
+ }
+
+ % adjust \cntm position for smaller triangle
+ \pgfmathsetmacro\cntmlevdistVar{\cntmpos*\_cntm_levdist_local_tl}
+ \pgfmathsetmacro\cntmsibdistVar{\cntmpos*\_cntm_sibdist_local_tl}
+
+ %% \istrooto(') : cntm outermost branches
+ \tl_clear:N \ischo_game_tl
+ \xdef\istgrowdirection{#2}
+
+ % execute \ISTRoot [\istgrowdirection] (cntm) (#4) [null node] +{#8}..{#9}+
+ % this defines (cntm)
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl
+ {
+ [ \istgrowdirection ] (cntm) (#4) [ null~node ]
+ +{\cntmlevdistVar}..{\cntmsibdistVar}+
+ }
+
+ %% (before executing \istb) call options collected from above complication
+ \_collect_cntm_leftmost_branch_opts:
+ \_collect_cntm_rightmost_branch_opts:
+
+ % execute \istb \istb for cntm LEFT/RIGHT outermost branches
+ % this defines (cntm-1) and (cntm-2)
+ \exp_last_unbraced:NV \cntmOUTERistb \l_cntm_leftmost_branch_opt_tl
+ \exp_last_unbraced:NV \cntmOUTERistb \l_cntm_rightmost_branch_opt_tl
+ \printist ;
+
+ %% draw cntm triangle, using (cntm), (cntm-1), (cntm-2)
+ \begin{scope}[ shorten~< = 0pt , shorten~> = 0pt ]
+ % call (draw and fill) options collected from above complication
+ \_collect_cntm_triangle_cmdstr:
+ % and finally draw "cntm triangle"
+ % \draw [opts] (cntm) -- (cntm-1) -- (cntm-2) - (cntm) ;
+ \begin{pgfonlayer}{\cntm@default@layer} % default: background
+ \exp_last_unbraced:No \draw \l_tmp_option_str_tl (cntm)--(cntm-1)--(cntm-2)--(cntm) ;
+ \end{pgfonlayer}
+ \end{scope}
+
+ %% cntm action (actually taken by a player)
+ % this is normal \istrooto(')
+ \tl_clear:N \ischo_game_tl
+
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl { [ \istgrowdirection ] (#3) (cntm) [#5] <#6> }
+ \tl_put_right:Nn \ischo_game_tl { { \istownerstyle{ #7 } } }
+ \tl_put_right:Nx \ischo_game_tl { +{ \_cntm_levdist_local_tl }..{ 1*\_cntm_act_sibdist_local_tl }+ }
+
+ % call set (for \istbA)
+ \bool_set_true:N \_istroot_cntm_call_bool % for \istbA (HERE, USE \_istroot_ but not \_istrooto_ )
+
+ % back to normal \xtShowArrows
+ \let\xt@show@arrow\tmp@xt@show@arrow
+ \let\xt@show@midarrow\tmp@xt@show@midarrow
+}
+
+% \istrootocntmA -- oval cntm arc version
+% ' [grow] (root) (at) [node style] <angle> {owner} +cntmlevdist..cntmsibdist+
+\NewDocumentCommand \istrootocntmA
+{ t' O{\istdefault@grow} r() D(){0,0} O{} D<>{above} G{} d+. d.+ }
+{
+ % to suppress \xtShowArrows for cntm
+ \let\tmp@xt@show@arrow\xt@show@arrow
+ \def\xt@show@arrow { }
+ \let\tmp@xt@show@midarrow\xt@show@midarrow
+ \def\xt@show@midarrow { }
+
+ % Now \_cntm_levdist_local_tl and \_cntm_sibdist_local_tl is the bases
+ \IfNoValueTF {#8}
+ {
+ \bool_set_false:N \_cntmA_distance_local_call_bool
+ \tl_set:Nn \_cntmA_levdist_local_tl { \cntmlevdist }
+ \tl_set:Nn \_cntmA_sibdist_local_tl { \cntmsibdist }
+ }
+ {
+ \bool_set_true:N \_cntmA_distance_local_call_bool
+ \tl_set:Nn \_cntmA_levdist_local_tl { #8 }
+ \tl_set:Nn \_cntmA_sibdist_local_tl { #9 }
+ }
+
+ % Now \_cntm_act_sibdist_tl is the base
+ \bool_if:NTF \cntm_act_sibdist_call_bool
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl {\cntmACTsibdist}
+ }
+ {
+ \tl_set:Nn \_cntm_act_sibdist_local_tl {1/3*\_cntmA_sibdist_local_tl}
+ }
+
+ %% \ISTRootO(') : for drawing cntmA outermost branches
+ \tl_clear:N \ischo_game_tl
+ \xdef\istgrowdirection{#2}
+
+ % execute \ISTRootO
+ % this defines (cntm)
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl
+ { [ \istgrowdirection ] (cntm) (#4) [ null~node ]
+ +{\_cntmA_levdist_local_tl}..{\_cntmA_sibdist_local_tl}+ }
+
+ %% (before executing \istb) call options collected from above complication
+ \_collect_cntmA_leftmost_branch_opts:
+ \_collect_cntmA_rightmost_branch_opts:
+
+ % execute \istb \istb for cntmA LEFT/RIGHT outermost branches
+ % this defines (cntm-1) and (cntm-2)
+ \exp_last_unbraced:NV \cntmAOUTERistb \l_cntmA_leftmost_branch_opt_tl
+ \exp_last_unbraced:NV \cntmAOUTERistb \l_cntmA_rightmost_branch_opt_tl
+ \printist ;
+
+ %% defining cntmA points
+ % First, adjust plot vertex to compensate dependency of tree shape
+ \pgfmathsetmacro\cntmdistratio{ scalar (\_cntmA_levdist_local_tl/\_cntmA_sibdist_local_tl) }
+ % sqrt(1/3) is to make the cntmdist ratio 1/3 as standard
+ \pgfmathsetmacro\cntmAplotfactorVal
+ { 1 + (\cntmAplotfactor-1) * sqrt(1/3) / sqrt(\cntmdistratio) }
+ \pgfextra{\xdef\cntmAplotfactorAdj{\cntmAplotfactorVal}} % used also in \istbA(t)
+ \coordinate (cntmA-beg) at ( $ (cntm) ! \cntmApos ! (cntm-1) $ ) ; % begin point
+ \coordinate (cntmA-end) at ( $ (cntm) ! \cntmApos ! (cntm-2) $ ) ; % end point
+ \coordinate (cntmA-mid-base) at ( $ (cntm-1) ! .5 ! (cntm-2)$) ; % base midpoint
+ % defines "compensated" plot vertex
+ \coordinate (cntmA-vertex)
+ at ( $ (cntm) ! \cntmAplotfactorAdj*\cntmApos ! (cntmA-mid-base) $ ) ;
+ % (for expost/outside use)
+ \coordinate (cntmAi-begpoint) at ( $ (cntm) ! \cntmApos ! (cntm-1) $ ) ;
+ \coordinate (cntmAi-endpoint) at ( $ (cntm) ! \cntmApos ! (cntm-2) $ ) ;
+
+ %% plot cntmA
+ % \draw [ \cntmAopt , - , <opts> , tension=1 ]
+ \_collect_cntmA_cmdstr:
+ \_collect_cntmA_color_cmdstr:
+
+ \begin{scope}[ shorten~< = 0pt , shorten~> = 0pt ]
+ \begin{pgfonlayer}{\cntmAdefaultlayer} % default: behind
+ \exp_last_unbraced:No \fill \l_tmp_arc_color_str_tl
+ (cntm) -- plot [ smooth ] coordinates { (cntmA-beg) (cntmA-vertex) (cntmA-end) } -- cycle ;
+ \exp_last_unbraced:No \draw \l_tmp_arc_option_str_tl
+ plot [ smooth ] coordinates { (cntmA-beg) (cntmA-vertex) (cntmA-end) } ;
+ \end{pgfonlayer}
+ \end{scope}
+
+ %% cntmA action (actually taken by a player)
+ % this is normal \istrooto(')
+ \tl_clear:N \ischo_game_tl
+
+ \IfBooleanTF {#1}
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO' } }
+ { \tl_put_right:Nn \ischo_game_tl { \ISTRootO } }
+ % collect arguments
+ \tl_put_right:Nx \ischo_game_tl { [ \istgrowdirection ] (#3) (cntm) [#5] <#6> }
+ \tl_put_right:Nn \ischo_game_tl { { \istownerstyle{ #7 } } }
+ \tl_put_right:Nx \ischo_game_tl { +{ \_cntmA_levdist_local_tl }..{ 1*\_cntm_act_sibdist_local_tl }+ }
+
+ % call set (for \istbA)
+ \bool_set_true:N \_istroot_cntmA_call_bool
+
+ % back to normal \xtShowArrows
+ \let\xt@show@arrow\tmp@xt@show@arrow
+ \let\xt@show@midarrow\tmp@xt@show@midarrow
+}
+
+
+%% OBSOLETE macros - backward compatibility (to be removed next update)
+
+% \obsoleteISTCntm (obsolete) - backward compatibility
+% (used in \istcntm)
+\NewDocumentCommand \obsoleteISTCntm
+{ t' O{south} r() D(){0,0} O{\cntm@default@drawcolor} G{.5}
+ D+.{\cntmdefaultlevdist} D.+{\cntmdefaultsibdist} }
+{
+ \cntmdistance{#7}{#8}
+ \tikzset{level~1/.style={level~distance=\cntmlevdist,sibling~distance=\cntmsibdist}}
+ %
+ \IfBooleanTF {#1}
+ {
+ \setistNullNodeStyle[#5]{\istdefault@null@nodesize}[#5]
+ \begin{pgfonlayer}{background}
+ \node (#3) at (#4) [ null~node ] { } [ \xt@growswap = #2 ] child child ;
+ \draw [ #5 , fill = #5 ] (#3) -- (#3-1) -- (#3-2) -- (#3) ;
+ \end{pgfonlayer}
+ \setistNullNodeStyle{\istdefault@null@nodesize}
+ }
+ {
+ \setistNullNodeStyle[#5]{\istdefault@null@nodesize}[#5]
+ \begin{pgfonlayer}{background}
+ \node (#3) at (#4) [ null~node ] { } [ \xt@grow = #2 ] child child ;
+ \draw [ #5 , fill = #5 ] (#3) -- (#3-1) -- (#3-2) -- (#3) ;
+ \end{pgfonlayer}
+ \setistNullNodeStyle{\istdefault@null@nodesize}
+ }
+}
+
+% \obsoleteISTCntmArc (arc version) (obsolete) - backward compatibility
+% (used in \istcntmA)
+\NewDocumentCommand \obsoleteISTCntmArc
+{ t' O{south} r() D(){0,0} O{} G{.5} D+.{\cntmdefaultlevdist} D.+{\cntmdefaultsibdist} }
+{
+ \cntmdistance{#7}{#8}
+ \tikzset{level~1/.style={level~distance=\cntmlevdist,sibling~distance=\cntmsibdist}}
+ %
+ \IfBooleanTF {#1}
+ {
+ \begin{pgfonlayer}{background}
+ \node (#3) at (#4) [ null~node ] { } [\xt@growswap=#2] child child ;
+ \draw [ bend~left , #5 ] ( $ (#3) ! #6 ! (#3-1) $ ) to ( $ (#3) ! #6 ! (#3-2) $ ) ;
+ \end{pgfonlayer}
+ }
+ {
+ \begin{pgfonlayer}{background}
+ \node (#3) at (#4) [ null~node ] { } [\xt@grow=#2] child child ;
+ \draw [ bend~right , #5 ] ( $ (#3) ! #6 ! (#3-1) $ ) to ( $ (#3) ! #6 ! (#3-2) $ ) ;
+ \end{pgfonlayer}
+ }
+}
+
+
+% \istcntm(') (obsolete) - backward compatibility
+\NewDocumentCommand \istcntm
+{ t' O{\istdefault@grow} r() D(){0,0} O{\cntm@default@drawcolor} G{}
+ D+.{\cntmdefaultlevdist} D.+{\cntmdefaultsibdist} }
+{
+ \xdef\istgrowdirection{#2} % used in \istb to specify [payoff direction]
+ \IfBooleanTF {#1}
+ {
+ \obsoleteISTCntm' [ \istgrowdirection ] ( #3 ) ( #4 ) [ #5 ] + #7 .. #8 +
+ }
+ {
+ \obsoleteISTCntm [ \istgrowdirection ] ( #3 ) ( #4 ) [ #5 ] + #7 .. #8 +
+ }
+}
+
+% \istcntmarc(') (obsolete) - backward compatibility
+\NewDocumentCommand \istcntmarc
+{ t' O{\istdefault@grow} r() D(){0,0} O{} G{.5} D+.{\cntmdefaultlevdist} D.+{\cntmdefaultsibdist} }
+{
+ \xdef\istgrowdirection{#2} % used in \istb to specify [payoff direction]
+ \IfBooleanTF {#1}
+ {
+ \obsoleteISTCntmArc' [ \istgrowdirection ] ( #3 ) ( #4 ) [ #5 ] { #6 } + #7 .. #8 +
+ }
+ {
+ \obsoleteISTCntmArc [ \istgrowdirection ] ( #3 ) ( #4 ) [ #5 ] { #6 }+ #7 .. #8 +
+ }
+}
+
+
+%% supplementary macros
+
+%% \xInfosetOwner (with abbreviations)
+% * (from) (to) {owner} [pos]
+\NewDocumentCommand \xtInfosetOwner{ s r() r() +m O{} }
+{
+ \begin{scope} % in group: to make \setistmathTF011 local
+ \IfBooleanTF { #1 } { } { \setistmathTF011 \istownertextfont{} }
+% \str_case_e:nnF { #5 }
+ \str_case:nnF { #5 }
+ {
+ { al } { \node [ above~left ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ { ar } { \node [ above~right ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ { bl } { \node [ below~left ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ { br } { \node [ below~right ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ { l } { \node [ left ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ { r } { \node [ right ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ { a } { \node [ above ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ { b } { \node [ below ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ; }
+ }
+ {
+ \node [ #5 ] at ( $ (#2)!.5!(#3) $ ) { \istownerstyle{#4} } ;
+ }
+ \end{scope}
+}
+
+% \xtOwner (with abbreviations)
+% * (coor) {owner} [pos]
+\NewDocumentCommand \xtOwner{ s r() +m O{} }
+{
+ \begin{scope} % in group: to make \setistmathTF011 local
+ \IfBooleanTF { #1 } { } { \setistmathTF011 \istownertextfont{} }
+% \str_case_e:nnF { #4 }
+ \str_case:nnF { #4 }
+ {
+ { al } { \node [ above~left ] at (#2) { \istownerstyle{#3} } ; }
+ { ar } { \node [ above~right ] at (#2) { \istownerstyle{#3} } ; }
+ { bl } { \node [ below~left ] at (#2) { \istownerstyle{#3} } ; }
+ { br } { \node [ below~right ] at (#2) { \istownerstyle{#3} } ; }
+ { l } { \node [ left ] at (#2) { \istownerstyle{#3} } ; }
+ { r } { \node [ right ] at (#2) { \istownerstyle{#3} } ; }
+ { a } { \node [ above ] at (#2) { \istownerstyle{#3} } ; }
+ { b } { \node [ below ] at (#2) { \istownerstyle{#3} } ; }
+ }
+ {
+ \node [ above , #4 ] at (#2) { \istownerstyle{#3} } ;
+ }
+ \end{scope}
+}
+
+% \xtActionLabel
+% BE CAREFUL: each case has different options (do not try to shorten)
+% * [opt] (parent) (child) {action label} [pos]
+\NewDocumentCommand \xtActionLabel{ s O{} r() r() G{} O{} }
+{
+ \begin{scope} % in group: to make \setistmathTF011 local
+ \IfBooleanTF { #1 } { } { \setistmathTF011 \istactionlabeltextfont{} }
+% \str_case_e:nnF { #6 }
+ \str_case:nnF { #6 }
+ {
+ { al } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ above~left , black , text~depth = .25ex ,
+ xshift = \istactionlabelxshift ,
+ yshift = -\istactionlabelyshift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ { ar } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ above~right , black , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift ,
+ yshift = -\istactionlabelyshift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ { bl } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ below~left , black , text~depth = .25ex ,
+ xshift = \istactionlabelxshift ,
+ yshift = \istactionlabelyshift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ { br } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ below~right , black , text~depth = .25ex ,
+ xshift = -\istactionlabelxshift ,
+ yshift = \istactionlabelyshift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ { l } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ left , black , text~depth = .25ex ,
+ yshift = -\xtALyShift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ { r } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ right , black , text~depth = .25ex ,
+ yshift = \xtALyShift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ { a } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ above , black , text~depth = .25ex ,
+ yshift = \xtALyShift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ { b } {
+ \draw [ - , draw = none , #2 ] (#3) to
+ [ edge~node = { node [ below , black , text~depth = .25ex ,
+ yshift = -\xtALyShift ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ }
+ {
+ \draw [ - , draw = none , #2] (#3) to
+ [ edge~node = { node [ black , text~depth = .25ex , #6 ]
+ { \istactionlabelstyle{#5} } } ] (#4) ;
+ }
+ \end{scope}
+}
+
+
+
+\def\xtdefault@xtpayoff@outersep{4pt}
+% \xtPayoff (with abbreviations)
+% * (coor) {payoffs} [pos]
+\NewDocumentCommand \xtPayoff{ s r() +m O{below} }
+{
+ \begin{scope} % in group: to make \setistmathTF011 local
+ \IfBooleanTF { #1 } { } { \setistmathTF011 \istpayofftextfont{} }
+% \str_case_e:nnF { #4 }
+ \str_case:nnF { #4 }
+ {
+ { al } {
+ \node [ above~left , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ;
+ }
+ { ar } {
+ \node [ above~right , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ;
+ }
+ { bl } {
+ \node [ below~left , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ;
+ }
+ { br } {
+ \node [ below~right , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ;
+ }
+ { l } {
+ \node [ left , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ;
+ }
+ { r } {
+ \node [ right , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ; }
+ { a } {
+ \node [ above , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ; }
+ { b } {
+ \node [ below , inner~sep = 0pt ,
+ outer~sep = \xtdefault@xtpayoff@outersep , text~depth = .25ex ]
+ at (#2) { \istpayoffstyle{#3} } ; }
+ }
+ {
+ \node [ inner~sep = 0pt , outer~sep = \xtdefault@xtpayoff@outersep ,
+ text~depth = .25ex , #4 ]
+ at (#2) { \istpayoffstyle{#3} } ;
+ }
+ \end{scope}
+}
+
+
+% \xtNode(*)
+% * [opt] (coor) [node style] {text}
+\NewDocumentCommand \xtNode{ s O{} r() O{} +G{} }
+{ \IfBooleanTF {#1}
+ {
+ \istrooto (#3) (#3) [ plain~node , #4 ] {#5} \printist ;
+ }
+ {
+ \node [ - , #2 ] at (#3) [ solid~node , #4 ] {#5} ;
+ }
+}
+
+
+%% show and hide endpoints
+
+\NewDocumentCommand \xtShowEndPoints{ s O{solid~node} }
+{ \IfBooleanTF {#1}
+ {
+ \def\xt@show@endpoint{node[#2]{}}
+ \def\xt@show@tndot{node[#2]{}}
+ \def\cntm@show@endpoint{node[at~end,#2]{}} %% PROBLEMatic: node [#2] (ref. \cntmOUTERistb)
+ }
+ {
+ \def\xt@show@endpoint{node[#2]{}}
+ \def\xt@show@tndot{node[#2]{}}
+ }
+}
+
+\NewDocumentCommand \xtHideEndPoints{s}
+{
+ \IfBooleanTF {#1}
+ { % works only for cntm
+ \renewcommand*\cntm@show@endpoint{}
+ }
+ {
+ \renewcommand*\xt@show@endpoint{}
+ \renewcommand*\xt@show@tndot{}
+ }
+}
+
+%% show and hide terminal nodes
+
+\NewDocumentCommand \xtShowTerminalNodes{ O{terminal~node} }
+{
+ \def\xt@show@tndot{node[#1]{}}
+}
+
+\NewDocumentCommand \xtHideTerminalNodes{}
+{
+ \renewcommand*\xt@show@tndot{}
+}
+
+
+%% subgames
+
+% subgame box/oval layer
+\def\xtdefault@subgamelayer { background }
+\newcommand*\xtsubgamelayer{ \xtdefault@subgamelayer }
+\NewDocumentCommand \setxtsubgamelayer { G{\xtdefault@subgamelayer} }
+{
+ \renewcommand \xtsubgamelayer { #1 }
+}
+
+\def\xtdefault@subrootshiftbox { 0 , -.3 }
+% \xtSubgameBox
+% * (root coor) { (coor1) (coor2)... } [additional opt]
+\NewDocumentCommand \xtSubgameBox { s r() m O{} }
+{
+ \IfBooleanTF {#1}
+ {
+ \coordinate (xtsubroot) at ( $ (#2) + (\xtdefault@subrootshiftbox) $ ) ;
+ \begin{pgfonlayer}{\xtsubgamelayer}
+ \node [ rectangle , fill , red!20 , inner~sep = 20pt , rounded~corners = 15pt , #4 ]
+ [ fit = (xtsubroot) #3 ] { } ;
+ \end{pgfonlayer}
+ }
+ {
+ \coordinate (xtsubroot) at ( $ (#2) + ( 0 , -.3 ) $ ) ;
+ \begin{pgfonlayer}{\xtsubgamelayer}
+ \node [ rectangle , draw , dashed , inner~sep = 20pt , rounded~corners = 15pt , black!50 , #4 ]
+ [ fit = (xtsubroot) #3 ] {} ;
+ \end{pgfonlayer}
+ }
+}
+
+\def\xtdefault@subrootshiftoval { 0 , -.7 }
+% \xtSubgameOval
+% * (root coor) { (coor1) (coor2)... } [additional opt]
+\NewDocumentCommand \xtSubgameOval { s r() m O{} }
+{
+ \IfBooleanTF {#1}
+ {
+ \coordinate (xtsubroot) at ( $ (#2) + (\xtdefault@subrootshiftoval) $ ) ;
+ \begin{pgfonlayer}{\xtsubgamelayer}
+ \node [ ellipse , fill , red!20 , inner~sep = 15pt , #4 ]
+ [ fit = (xtsubroot) #3 ] { } ;
+ \end{pgfonlayer}
+ }
+ {
+ \coordinate (xtsubroot) at ( $ (#2) + ( 0 , -.7 ) $ ) ;
+ \begin{pgfonlayer}{\xtsubgamelayer} % borrowed from infoset
+ \node [ ellipse , draw , dashed , inner~sep = 15pt , black!50 , #4 ]
+ [ fit = (xtsubroot) #3 ] { } ;
+ \end{pgfonlayer}
+ }
+}
+
+% \xtTimeLineH
+% ' [line opt] (passing point) {from dim} {to dim} {label} [pos]
+\NewDocumentCommand \xtTimeLineH { t' O{} r() m m G{} O{}}
+{
+ \bool_if:NTF \xt_growswap_call_bool
+ { % if swapped, go opposite direction
+ \pgfmathsetmacro \tlhAA { -1 * #4 }
+ \pgfmathsetmacro \tlhBB { -1 * #5 }
+ \IfBooleanTF { #1 }
+ {
+ \coordinate (tlhCC) at ( #3 -| { \tlhBB , \tlhAA } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { left }
+ }
+ {
+ \coordinate (tlhCC) at ( #3 -| { \tlhAA , \tlhBB } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { right }
+ }
+ }
+ {
+ \def \tlhAA { #4 }
+ \def \tlhBB { #5 }
+ \IfBooleanTF {#1}
+ {
+ \coordinate (tlhCC) at ( #3 -| { \tlhAA , \tlhBB } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { left }
+ }
+ {
+ \coordinate (tlhCC) at ( #3 -| { \tlhBB , \tlhAA } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { right }
+ }
+ }
+ \begin{pgfonlayer}{\xtsubgamelayer}
+% \str_case_e:nnF {#7}
+ \str_case:nnF {#7}
+ {
+ {al} { \node at (tlhCC) [ above~left ] {#6} ; }
+ {ar} { \node at (tlhCC) [ above~right ] {#6} ; }
+ {bl} { \node at (tlhCC) [ below~left ] {#6} ; }
+ {br} { \node at (tlhCC) [ below~right ] {#6} ; }
+ {l} { \node at (tlhCC) [ left ] {#6} ; }
+ {r} { \node at (tlhCC) [ right ] {#6} ; }
+ {a} { \node at (tlhCC) [ above ] {#6} ; }
+ {b} { \node at (tlhCC) [ below ] {#6} ; }
+ }
+ {
+ \node at ( tlhCC ) [ \_TH_label_pos_tl , #7 ] {#6} ;
+ }
+ \draw [ - , dotted , shorten~< = 0pt, shorten~> = 0pt , #2 ]
+ ( #3 -| { \tlhAA , \tlhBB } ) -- ( #3 -| { \tlhBB , \tlhAA } ) ;
+ \end{pgfonlayer}
+}
+
+
+% \xtTimeLineV
+% ' [line opt] (passing point) {from dim} {to dim} {label} [pos]
+\NewDocumentCommand \xtTimeLineV { t' O{} r() m m G{} O{}}
+{
+ \bool_if:NTF \xt_growswap_call_bool
+ {
+ \def\tlvAA{#4}
+ \def\tlvBB{#5}
+ \IfBooleanTF {#1}
+ {
+ \coordinate (tlvCC) at ( #3 |- { \tlvAA , \tlvBB } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { right }
+ }
+ {
+ \coordinate (tlvCC) at ( #3 |- { \tlvBB , \tlvAA } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { right }
+ }
+ }
+ { % if not swapped, go opposite direction
+ \pgfmathsetmacro\tlvAA{-1*#4}
+ \pgfmathsetmacro\tlvBB{-1*#5}
+ \IfBooleanTF {#1}
+ {
+ \coordinate (tlvCC) at ( #3 |- { \tlvBB , \tlvAA } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { right }
+ }
+ {
+ \coordinate (tlvCC) at ( #3 |- { \tlvAA , \tlvBB } ) ;
+ \tl_set:Nn \_TH_label_pos_tl { right }
+ }
+ }
+
+ \begin{pgfonlayer}{\xtsubgamelayer}
+% \str_case_e:nnF {#7}
+ \str_case:nnF {#7}
+ {
+ {al} { \node at (tlvCC) [ above~left ] {#6} ; }
+ {ar} { \node at (tlvCC) [ above~right ] {#6} ; }
+ {bl} { \node at (tlvCC) [ below~left ] {#6} ; }
+ {br} { \node at (tlvCC) [ below~right ] {#6} ; }
+ {l} { \node at (tlvCC) [ left ] {#6} ; }
+ {r} { \node at (tlvCC) [ right ] {#6} ; }
+ {a} { \node at (tlvCC) [ above ] {#6} ; }
+ {b} { \node at (tlvCC) [ below ] {#6} ; }
+ }
+ {
+ \node at ( tlvCC ) [ \_TH_label_pos_tl , #7 ] {#6} ;
+ }
+ \draw [ - , dotted , shorten~< = 0pt, shorten~> = 0pt , #2 ]
+ ( #3 |- { \tlvBB , \tlvAA } ) -- ( #3 |- { \tlvAA , \tlvBB } ) ;
+ \end{pgfonlayer}
+}
+
+
+%% \xtCommentTo
+% [line opt] (absolute to-coor) (relative from-coor) {text} [pos] (arrow end shorten dim)
+\NewDocumentCommand \xtCommentTo { O{} r() r() G{} O{} D(){1pt} }
+{
+ \draw [ -> , densely~dotted , shorten~< = 0pt , shorten~> = #6 , #1 ]
+ ( $ (#2) + (#3) $ ) to (#2) ;
+% \str_case_e:nnF {#5}
+ \str_case:nnF {#5}
+ {
+ {al} { \node at ( $ (#2) + (#3) $ ) [ above~left ] {#4} ; }
+ {ar} { \node at ( $ (#2) + (#3) $ ) [ above~right ] {#4} ; }
+ {bl} { \node at ( $ (#2) + (#3) $ ) [ below~left ] {#4} ; }
+ {br} { \node at ( $ (#2) + (#3) $ ) [ below~right ] {#4} ; }
+ {l} { \node at ( $ (#2) + (#3) $ ) [ left ] {#4} ; }
+ {r} { \node at ( $ (#2) + (#3) $ ) [ right ] {#4} ; }
+ {a} { \node at ( $ (#2) + (#3) $ ) [ above ] {#4} ; }
+ {b} { \node at ( $ (#2) + (#3) $ ) [ below ] {#4} ; }
+ }
+ {
+ \node at ( $ (#2) + (#3) $ ) [ above, #5 ] {#4} ;
+ }
+}
+
+%% \xtCommentFrom
+% [line opt] (absolute from-coor) (absolute from-coor) {text} [pos] (arrow end shorten dim)
+\NewDocumentCommand \xtCommentFrom{ O{} r() r() G{} O{} D(){1pt}}
+{
+ \draw [ -> , densely~dotted , shorten~< = 0pt , shorten~> = #6 , #1 ] (#2) to (#3) ;
+% \str_case_e:nnF {#5}
+ \str_case:nnF {#5}
+ {
+ {al} { \node at (#2) [ above~left ] {#4} ; }
+ {ar} { \node at (#2) [ above~right ] {#4} ; }
+ {bl} { \node at (#2) [ below~left ] {#4} ; }
+ {br} { \node at (#2) [ below~right ] {#4} ; }
+ {l} { \node at (#2) [ left ] {#4} ; }
+ {r} { \node at (#2) [ right ] {#4} ; }
+ {a} { \node at (#2) [ above ] {#4} ; }
+ {b} { \node at (#2) [ below ] {#4} ; }
+ }
+ {
+ \node at (#2) [ above , #5 ] {#4} ;
+ }
+}
+
+%% mid arrow styles: basics
+% \xt@default... used
+
+\def\xt@default@arrow@pos { .55 }
+\def\xt@arrow@pos { \xt@default@arrow@pos }
+\def\xt@default@arrow@opt { black } % black needed here (not to depend on branch color)
+\def\xt@arrow@opt { \xt@default@arrow@opt }
+\def\xt@default@arrow@shape { > }
+\def\xt@arrow@shape { \xt@default@arrow@shape }
+\newcommand*\xtarrowpos { \xt@arrow@pos }
+\newcommand*\xtarrowopt { \xt@arrow@opt }
+\newcommand*\xtarrowshape { \xt@arrow@shape }
+
+
+% \setxtarrowtips
+% to toss values to arrow tip styls
+\NewDocumentCommand \setxtarrowtips
+{
+ D<>{ \xt@default@arrow@pos }
+ G{ \xt@default@arrow@shape }
+ O{ \xt@default@arrow@opt }
+}
+{
+ \renewcommand*\xt@arrow@pos {#1}
+ \renewcommand*\xt@arrow@shape {#2}
+ \renewcommand*\xtarrowopt { - , thin , solid , shorten~> = 0 , #3}
+}
+% initial set for defaults
+\setxtarrowtips
+
+% variable style [->]:
+% accepts an option value changed by \xtarrowopt (this is better)
+% alternative choice: use original value \xt@arrow@opt by default
+\tikzset
+{ ->- /.style =
+ {
+ decoration =
+ {
+ markings ,
+ mark = at~position~ #1 ~with~
+ { \exp_last_unbraced:NNV \arrow [ \xtarrowopt ] { \xtarrowshape } }
+ } ,
+ postaction = {decorate}
+ } ,
+ ->-/.default = \xt@arrow@pos
+}
+
+\tikzset
+{ ->>- /.style =
+ {
+ decoration =
+ {
+ markings ,
+ mark = at~position~ #1 ~with~
+ { \exp_last_unbraced:NNo \arrow [ \xtarrowopt ] { >> } }
+ } ,
+ postaction = {decorate}
+ } ,
+ ->>-/.default = .6
+}
+
+\tikzset
+{ ->>>- /.style =
+ {
+ decoration =
+ {
+ markings ,
+ mark = at~position~ #1 ~with~
+ { \exp_last_unbraced:NNo \arrow [ \xtarrowopt ] { >>> } }
+ } ,
+ postaction = {decorate}
+ } ,
+ ->>>-/.default = .65
+}
+
+\tikzset
+{ -o- /.style =
+ {
+ decoration =
+ {
+ markings ,
+ mark = at~position~ #1 ~with~
+ { \exp_last_unbraced:NNo \arrow [ \xtarrowopt ] { o } }
+ } ,
+ postaction = {decorate}
+ } ,
+ -o-/.default = .55
+}
+
+\tikzset
+{ -x- /.style =
+ {
+ decoration =
+ {
+ markings ,
+ mark
+ = at~position~ #1 ~with~
+ {
+ \exp_last_unbraced:NNo \draw [ \xtarrowopt ]
+ (-2pt,-2pt) -- (2pt,2pt);
+ \exp_last_unbraced:NNo \draw [ \xtarrowopt ]
+ (2pt,-2pt) -- (-2pt,2pt);
+ }
+ } ,
+ postaction = {decorate}
+ } ,
+ -x-/.default = .5
+}
+
+
+%% show midarrows
+
+\def\xt@show@midarrow { }
+\def\xt@default@show@midarrow@pos { .55 }
+\def\xt@show@midarrow@pos { \xt@default@show@midarrow@pos }
+\def\xt@default@show@midarrow@opt { black }
+\def\xt@show@midarrow@opt { \xt@default@show@midarrow@opt }
+\def\xt@default@show@midarrow@shape { >}
+\def\xt@show@midarrow@shape { \xt@default@show@midarrow@shape }
+\newcommand*\xtshowmidarrowpos { \xt@show@midarrow@pos }
+\newcommand*\xtshowmidarrowopt { \xt@show@midarrow@opt }
+\newcommand*\xtshowmidarrowshape { \xt@show@midarrow@shape }
+
+% \setxtshowmidarrows (for simple tree)
+% to toss values to [show~midarrow]
+\NewDocumentCommand \setxtshowmidarrows
+{
+ D<>{ \xt@default@show@midarrow@pos }
+ G{ \xt@default@show@midarrow@shape }
+ O{ \xt@default@show@midarrow@opt }
+}
+{
+ \renewcommand*\xt@show@midarrow@pos {#1} % default: .55
+ \renewcommand*\xt@show@midarrow@shape {#2}
+ \renewcommand*\xtshowmidarrowopt {#3}
+}
+
+
+% show midarrow style
+\tikzset { stoppostaction/.code = { \let \tikz@postactions \pgfutil@empty } }
+\tikzset
+{ show~midarrow /.style =
+ {
+ decoration =
+ {
+ markings ,
+ mark = { at~position~ #1 ~with~
+ { \exp_last_unbraced:NNV
+ \arrow [ \xtshowmidarrowopt ] { \xt@show@midarrow@shape } }
+ }
+ } ,
+ postaction = { stoppostaction , decorate }
+ } ,
+ show~midarrow/.default = \xt@show@midarrow@pos % default: .55
+}
+
+
+% \xtShowMidArrows
+% on [show~midarrow]
+\NewDocumentCommand \xtShowMidArrows{ }
+{
+ \renewcommand*\xt@show@midarrow { show~midarrow }
+}
+
+% \xtHideMidArrows
+% off [show~midarrow]
+\NewDocumentCommand \xtHideMidArrows { }
+{
+ \renewcommand \xt@show@midarrow { }
+}
+
+
+%% show arrows
+
+\def\xt@show@arrow { }
+\def\xt@default@show@arrow@pos { .55 }
+\def\xt@show@arrow@pos { \xt@default@show@arrow@pos }
+\def\xt@default@show@arrow@opt { black }
+\def\xt@show@arrow@opt { \xt@default@show@arrow@opt }
+\def\xt@default@show@arrow@shape { > }
+\def\xt@show@arrow@shape { \xt@default@show@arrow@shape }
+\def\xt@default@show@arrow@shorten { 1.2pt }
+\def\xt@show@arrow@shorten { \xt@default@show@arrow@shorten }
+\newcommand*\xtshowarrowpos { \xt@show@arrow@pos }
+\newcommand*\xtshowarrowopt { \xt@show@arrow@opt }
+\newcommand*\xtshowarrowshape { \xt@show@arrow@shape }
+\newcommand*\xtshowarrowshorten { \xt@show@arrow@shorten }
+
+% \setxtshowarrows
+% to toss values to [show~arrow]
+\NewDocumentCommand \setxtshowarrows
+{
+ G{>}
+ O{\xt@default@show@arrow@opt}
+ D(){\xt@default@show@arrow@shorten}
+}
+{
+ \renewcommand*\xt@show@arrow@shape{#1} % default: >
+ \renewcommand*\xtshowarrowopt{#2} % default: black
+ \renewcommand*\xt@show@arrow@shorten{#3} % default: 1.2pt
+}
+
+% show arrow style
+\tikzset{stoppostaction/.code={\let\tikz@postactions\pgfutil@empty}}
+\tikzset
+{ show~arrow /.style =
+ {
+ decoration =
+ {
+ markings ,
+ mark = {
+ at~position~ 1 + - \pgf@shorten@end@additional + - #1 ~with~
+ { \exp_last_unbraced:NNV
+ \arrow [ \xtshowarrowopt ] { \xt@show@arrow@shape } }
+ }
+ } ,
+ postaction = { stoppostaction , decorate }
+ } ,
+ show~arrow/.default = \xt@show@arrow@shorten % default: 1.2pt
+}
+
+% \xtShowArrows
+% on [show~arrow]
+\NewDocumentCommand \xtShowArrows { O{solid~node} }
+{
+ \xtShowEndPoints[#1]
+ \renewcommand*\xt@show@arrow { show~arrow }
+}
+
+% \xtHideArrows
+% off [show~arrow]
+\NewDocumentCommand \xtHideArrows { s }
+{
+ \IfBooleanTF {#1} { \xtShowEndPoints } { \xtHideEndPoints }
+ \renewcommand\xt@show@arrow { }
+}
+
+\ExplSyntaxOff
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/jigsaw/LICENSE.txt b/graphics/pgf/contrib/jigsaw/LICENSE.txt
new file mode 100644
index 0000000000..f8b699e6eb
--- /dev/null
+++ b/graphics/pgf/contrib/jigsaw/LICENSE.txt
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/graphics/pgf/contrib/jigsaw/README.md b/graphics/pgf/contrib/jigsaw/README.md
new file mode 100644
index 0000000000..104fd5748c
--- /dev/null
+++ b/graphics/pgf/contrib/jigsaw/README.md
@@ -0,0 +1,7 @@
+# Jigsaw
+
+A small LaTeX package to draw jigsaw pieces with TikZ. It is possible to draw individual pieces and adjust their shape, produce tile patterns or to automatically generate complete jigsaws.
+
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/jigsaw/issues
diff --git a/graphics/pgf/contrib/jigsaw/jigsaw-doc.pdf b/graphics/pgf/contrib/jigsaw/jigsaw-doc.pdf
new file mode 100644
index 0000000000..1f16a672e4
--- /dev/null
+++ b/graphics/pgf/contrib/jigsaw/jigsaw-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/jigsaw/jigsaw-doc.tex b/graphics/pgf/contrib/jigsaw/jigsaw-doc.tex
new file mode 100644
index 0000000000..9689ef8932
--- /dev/null
+++ b/graphics/pgf/contrib/jigsaw/jigsaw-doc.tex
@@ -0,0 +1,205 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Documentation for the jigsaw package
+% A package to draw jigsaw pieces with tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/jigsaw
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.1a
+% NOv 9, 2018
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[parskip=half]{scrartcl}
+
+% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[english]{babel}
+\usepackage[bitstream-charter]{mathdesign}
+\usepackage{jigsaw}
+\usepackage[most]{tcolorbox}
+\usepackage[paper=a4paper,margin=2.9cm]{geometry}
+\usepackage{url}
+\usepackage{xspace}
+\usepackage{scrlayer-scrpage}
+\usepackage[hang,flushmargin,bottom]{footmisc}
+\usepackage[colorlinks=true,breaklinks=true,urlcolor=duckblue,linkcolor=duckblue,citecolor=duckblue,filecolor=duckblue]{hyperref}
+
+% macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\CTAN}{\textsc{CTAN}\xspace}
+\newcommand{\TikZ}{Ti\emph{k}Z\xspace}
+\newcommand{\miktex}{MiK\TeX\xspace}
+\newcommand{\texlive}{\TeX{}Live\xspace}
+
+% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{duckblue}{RGB}{0,70,140}
+\definecolor{marmotred}{RGB}{140,20,40}
+\addtokomafont{sectioning}{\color{teal}}
+\addtokomafont{date}{\normalsize}
+\addtokomafont{author}{\normalsize}
+\setlength{\footnotemargin}{0.7em}
+
+% from https://tex.stackexchange.com/a/147848
+\def\beginlstdelim#1#2#3%
+{%
+ \def\endlstdelim{#2\egroup}%
+ \ttfamily#1\bgroup\color{#3}\aftergroup\endlstdelim%
+}
+
+\lstdefinestyle{jigsawstyle}{%
+ language={[latex]TeX},
+ tabsize=2,
+ breaklines,
+ basicstyle=\footnotesize\ttfamily,
+ commentstyle={\color{teal}\slshape},
+ columns=fullflexible,
+ texcsstyle=*\color{duckblue}\bfseries,
+ keywordstyle=\color{red!60!black}\bfseries,
+ morekeywords={tikzpicture,scope},
+ moretexcs={path,node,draw,clip,includegraphics,color,piece,tile,jigsaw},
+ delim ={[s][\ttfamily\color{green!50!black}]{$}{$}},
+ moredelim=[is][\footnotesize\ttfamily\color{orange!70!black}]{|}{|},
+ moredelim={[s][\color{gray}]{<}{>}},
+% moredelim = **[is][\beginlstdelim{\{}{\}}{orange!70!black}]{\{}{\}},
+% moredelim = **[is][\beginlstdelim{[}{]}{orange!70!black}]{[}{]},
+}
+
+\tcbset{%
+ colframe=teal,
+ arc=2mm,
+ fonttitle=\bfseries,
+ sidebyside,
+ listing options={style=jigsawstyle},
+ center lower,
+ righthand width=5.7cm,
+ bottom=0pt,
+ top=0pt,
+ sidebyside gap=10pt
+}
+
+\lstset{style=jigsawstyle}
+
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{The jigsaw package}
+\subtitle{Drawing jigsaw pieces in \TikZ}
+\author{%
+ \texorpdfstring{
+ \begin{tikzpicture}
+ \piece[lightgray!70!white]{1}{-1}{1}{-1}
+ \end{tikzpicture}\\[0.8em]
+ \texttt{samcarter}\\
+ \url{https://github.com/samcarter/jigsaw}\\
+ \url{https://www.ctan.org/pkg/jigsaw}
+ }{samcarter}}
+\date{Version 0.1a -- \today}
+
+\begin{document}
+\maketitle
+
+\section{Introduction}
+\label{intro}
+
+The jigsaw package allows to draw adjustable jigsaw pieces in \TikZ, to combine them and even to automatically create complete jigsaws. It is based on the TeX.Stackexchange answers \url{https://tex.stackexchange.com/a/446296/36296}.
+
+The package is included in both \texlive and \miktex and available from \CTAN (\url{https://ctan.org/pkg/jigsaw}). The development version of this package is located at \url{github.com/samcarter/jigsaw}. If you have any problems, ideas or other feedback, please make constructive use of its bug tracker.
+
+Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
+
+\section{Usage}
+
+An individual jigsaw piece can be drawn with
+
+\begin{tcolorbox}[title={Jigsaw piece}]
+\begin{lstlisting}
+\piece{<bottom>}{<right>}{<top>}{<left>}
+\end{lstlisting}
+\tcblower
+\begin{tikzpicture}
+ \piece{1}{-1}{1}{1}
+\end{tikzpicture}
+\end{tcolorbox}
+
+wherein arguments specify for each side if it should be a tab (-1), a straight line (0) or a slot (1). The following example will produce a jigsaw piece with one tab sticking out, one straight boarder and one slot:
+
+\begin{tcblisting}{title={Jigsaw piece}}
+\begin{tikzpicture}
+ \piece{1}{-1}{0}{1}
+\end{tikzpicture}
+\end{tcblisting}
+
+With an optional argument, a fill colour can be passed to the piece:
+
+\begin{tcblisting}{title={Filled piece}}
+\begin{tikzpicture}
+ \piece[teal]{-1}{1}{-1}{1}
+\end{tikzpicture}
+\end{tcblisting}
+
+Or to change the line colour:
+
+\begin{tcblisting}{title={Coloured piece}}
+\begin{tikzpicture}
+ \color{teal}\piece{-1}{-1}{1}{1}
+\end{tikzpicture}
+\end{tcblisting}
+
+The shapes of the jigsaw pieces are designed to seamlessly fit into each other which allows to produce tile patters.
+
+\begin{tcblisting}{title={Manual tile pattern}}
+\begin{tikzpicture}
+\begin{scope}
+ \piece[teal]{1}{1}{0}{0}
+\end{scope}
+\begin{scope}[xshift=1cm]
+ \piece[lightgray]{1}{0}{0}{-1}
+\end{scope}
+\begin{scope}[yshift=-1cm]
+ \piece[lightgray]{0}{-1}{-1}{0}
+\end{scope}
+\begin{scope}[xshift=1cm,yshift=-1cm]
+ \piece[teal]{0}{0}{-1}{1}
+\end{scope}
+\end{tikzpicture}
+\end{tcblisting}
+
+Manually position each jigsaw piece at the correct position can be tedious, therefore the command \lstinline|\tile[<colour>]{<bottom>}{<right>}{<top>}{<left>}| was added. It can be used outside of of the \lstinline|tikzpicture| environment to place the pieces besides each other like normal letters in a text. Line breaks have to be added at the appropriate positions and one has to be careful not to introduce additional spaces between the jigsaw pieces from unprotected line endings.
+
+\begin{tcblisting}{title={The tile command}}
+\tile[violet]{1}{1}{0}{0}%
+\tile[lightgray]{1}{-1}{0}{-1}%
+\tile[teal]{1}{0}{0}{1}
+
+\tile[teal]{1}{-1}{-1}{0}%
+\tile[violet]{1}{-1}{-1}{1}%
+\tile[lightgray]{-1}{0}{-1}{1}
+
+\tile[lightgray]{0}{-1}{-1}{0}%
+\tile[teal]{0}{-1}{-1}{1}%
+\tile[violet]{0}{0}{1}{1}
+\end{tcblisting}
+
+Finally there is also the possibility to automatically generate complete jigsaw puzzles using the command \lstinline|\jigsaw{<x>}{<y>}|, with \lstinline|<x>| and \lstinline|<y>| the number of rows and columns, respectively.
+
+\begin{tcblisting}{title={Automatic jigsaw generation}}
+\begin{tikzpicture}
+\jigsaw{6}{4}
+\end{tikzpicture}
+\end{tcblisting}
+
+This automatically generated jigsaw can also be overlaid on a picture:
+
+\begin{tcblisting}{title={Overlaid image}}
+\begin{tikzpicture}
+\clip (0,0) rectangle (6,4);
+\node at (3,2) {\includegraphics[width=6cm]
+ {example-image-duck}};
+\jigsaw{6}{4}
+\end{tikzpicture}
+\end{tcblisting}
+
+\end{document}
diff --git a/graphics/pgf/contrib/jigsaw/jigsaw.sty b/graphics/pgf/contrib/jigsaw/jigsaw.sty
new file mode 100644
index 0000000000..748014c842
--- /dev/null
+++ b/graphics/pgf/contrib/jigsaw/jigsaw.sty
@@ -0,0 +1,100 @@
+% !TeX root = jigsaw-doc.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The jigsaw package
+% A package to draw jigsaw pieces with tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/jigsaw
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.1a
+% NOv 9, 2018
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{jigsaw}
+ [2018/11/09 v0.1a Draw jigsaw pieces in TikZ]
+
+\RequirePackage{tikz}
+
+\RequirePackage{ifluatex}
+\RequirePackage{ifxetex}
+
+\ifluatex
+ \let\pdfrandomseed\randomseed
+\fi
+
+\ifxetex
+ \pgfmathsetseed{\time}
+\else
+ \pgfmathsetseed{\number\pdfrandomseed}
+\fi
+
+\pgfmathparse{int(random(1,120))}
+
+\newcommand{\side}[1]{
+(0.0,#1*0.00) .. controls (0.0,#1*0.00) and (0.4,#1*-0.04) ..
+(0.4,#1*0.04) .. controls (0.4,#1*0.11) and (0.2,#1*0.26) ..
+(0.5,#1*0.26) .. controls (0.8,#1*0.26) and (0.6,#1*0.11) ..
+(0.6,#1*0.04) .. controls (0.6,#1*-0.04) and (1.0,#1*0.00) ..
+(1.0,#1*0.00)
+}
+
+\newcommand{\halfpiece}[2]{
+ \draw \side{#1} [rotate around={90:(0.5,0.5)}] \side{#2};
+}
+
+\newcommand{\piece}[5][\@nil]{
+ \def\tmp{#1}%
+ \ifx\tmp\@nnil
+ \else
+ \fill[#1]
+ \side{#2} -- (0.5,0.5)
+ [rotate around={90:(0.5,0.5)}] \side{#3} -- (0.5,0.5)
+ [rotate around={180:(0.5,0.5)}] \side{#5} -- (0.5,0.5)
+ [rotate around={270:(0.5,0.5)}] \side{#4} -- (0.5,0.5)
+ -- cycle;
+ \fi
+ \draw
+ \side{#2}
+ [rotate around={90:(0.5,0.5)}] \side{#3}
+ [rotate around={180:(0.5,0.5)}] \side{#5}
+ [rotate around={270:(0.5,0.5)}] \side{#4};
+}
+
+\newcommand{\tile}[5][\@nil]{%
+ \begin{tikzpicture}
+ \path (0,0) rectangle (1,0.97);
+ \begin{pgfinterruptboundingbox}
+ \piece[#1]{#2}{#3}{#4}{#5}
+ \end{pgfinterruptboundingbox}
+ \end{tikzpicture}%
+}
+
+\pgfmathdeclarerandomlist{inout}{{-1}{1}}
+
+\newcommand{\jigsaw}[2]{%
+ \def\xmax{#1}
+ \def\ymax{#2}
+ \foreach \x in {1,...,\xmax}{
+ \foreach \y in {1,...,\ymax}{
+ \ifnum\y=1
+ \def\bottom{0}
+ \else
+ \pgfmathrandomitem{\bottom}{inout}%
+ \fi
+ \ifnum\x=\xmax
+ \def\right{0}
+ \else
+ \pgfmathrandomitem{\right}{inout}%
+ \fi
+ \begin{scope}[xshift=\x cm-1cm, yshift=\y cm-1cm]
+ \halfpiece{\bottom}{\right}
+ \end{scope}
+ }
+ }
+ \draw (0,0) -- (0,\ymax) -- (\xmax,\ymax);
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/karnaugh-map/README.md b/graphics/pgf/contrib/karnaugh-map/README.md
new file mode 100644
index 0000000000..6203d1f32d
--- /dev/null
+++ b/graphics/pgf/contrib/karnaugh-map/README.md
@@ -0,0 +1,21 @@
+# karnaugh-map
+This package draws [karnaugh maps](https://en.wikipedia.org/wiki/Karnaugh_map) with 2, 3, 4, 5, and 6 variables.
+It also contains commands for filling the karnaugh map with terms semi-automatically or manually.
+Last but not least it contains commands for drawing implicants on top of the map.
+
+## Installation
+ # to get the karnaugh-map.sty file
+ pdflatex karnaugh-map.ins
+ # to get the documentation: karnaugh-map.pdf
+ pdflatex karnaugh-map.dtx
+
+## Dependencies
+* tikz
+* xparse
+* xstring
+
+## Development
+The karnaugh-map package source is hosted at [https://github.com/2pi/karnaugh-map](https://github.com/2pi/karnaugh-map) as well as the [bugtracker](https://github.com/2pi/karnaugh-map/issues).
+
+## License
+This work, karnaugh-map, is written from the ground up by Mattias Jacobsson. However the general implementation idea is based on the work published on [TeX - LaTeX Stack Exchange](https://tex.stackexchange.com) by [Ignasi](https://tex.stackexchange.com/users/1952/ignasi) found [here](https://tex.stackexchange.com/a/140581) and [here](https://tex.stackexchange.com/a/36879) which is licensed under [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/). karnaugh-map is therefore licensed under [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/). Contributors include [Oscar Gustafsson](https://github.com/oscargus).
diff --git a/graphics/pgf/contrib/karnaugh-map/karnaugh-map.dtx b/graphics/pgf/contrib/karnaugh-map/karnaugh-map.dtx
new file mode 100644
index 0000000000..c097998717
--- /dev/null
+++ b/graphics/pgf/contrib/karnaugh-map/karnaugh-map.dtx
@@ -0,0 +1,1266 @@
+% \iffalse meta-comment
+% Copyright (C) 2015, 2016, 2017 Mattias Jacobsson and contributors
+% This work, karnaugh-map, is written from the ground up by Mattias Jacobsson. However the general implementation idea is based on the work published on [TeX - LaTeX Stack Exchange](https://tex.stackexchange.com) by [Ignasi](https://tex.stackexchange.com/users/1952/ignasi) found [here](https://tex.stackexchange.com/a/140581) and [here](https://tex.stackexchange.com/a/36879) which is licensed under [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/). karnaugh-map is therefore licensed under [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/). Contributors include [Oscar Gustafsson](https://github.com/oscargus).
+% \fi
+%
+% \iffalse
+%
+%<package>
+%<package>%%
+%<package>%% Copyright (C) 2015, 2016, 2017 Mattias Jacobsson and contributors
+%<package>%% This work, karnaugh-map, is written from the ground up by Mattias Jacobsson. However the general implementation idea is based on the work published on [TeX - LaTeX Stack Exchange](https://tex.stackexchange.com) by [Ignasi](https://tex.stackexchange.com/users/1952/ignasi) found [here](https://tex.stackexchange.com/a/140581) and [here](https://tex.stackexchange.com/a/36879) which is licensed under [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/). karnaugh-map is therefore licensed under [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/). Contributors include [Oscar Gustafsson](https://github.com/oscargus).
+%<package>%%
+%<package>
+%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\ProvidesPackage{karnaugh-map}[2017/02/20 v1.1 Draw Karnaugh Maps]
+%
+%<*driver>
+ \documentclass{ltxdoc}
+ \usepackage{karnaugh-map}
+ \usepackage{multicol}% for documentation
+ \usepackage{tabularx}% for documentation
+ \usepackage{float}% for documentation
+ \usepackage{hyperref}% for documentation
+ \setlength{\parindent}{0pt}
+ \setlength{\parskip}{0.6em}
+ \EnableCrossrefs
+ \CodelineIndex
+ \RecordChanges
+ \OnlyDescription
+ \begin{document}
+ \DocInput{karnaugh-map.dtx}
+ \PrintChanges
+ \end{document}
+%</driver>
+% \fi
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2015/10/09}{Initial version}
+%
+% \GetFileInfo{karnaugh-map.sty}
+%
+% \title{The \textsf{karnaugh-map} package}
+% \author{Mattias Jacobsson}
+% \date{\textsf{karnaugh-map}~\fileversion, \filedate}
+%
+%\maketitle
+%
+% \begin{abstract}
+% This package draws karnaugh maps with 2, 3, 4, 5, and 6 variables.
+% It also contains commands for filling the karnaugh map with terms semi-automatically or manually.
+% Last but not least it contains commands for drawing implicants on top of the map.
+% Below is an example of a two variable karnaugh map of $X_0 \oplus X_1$.
+% \end{abstract}
+% \begin{figure}[H]
+% \centering
+% \begin{karnaugh-map}[2][2][1][$X_0$][$X_1$]
+% \minterms{1,2}
+% \autoterms[0]
+% \implicant{1}{1}
+% \implicant{2}{2}
+% \end{karnaugh-map}
+% \end{figure}
+% \tableofcontents
+% \pagebreak
+%
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+
+%%
+%% Dependencies
+%%
+
+%% parsing arguments
+\RequirePackage{xparse}
+
+%% working with strings
+\RequirePackage{xstring}
+
+%% drawing
+\RequirePackage{tikz}
+\usetikzlibrary{calc,matrix}
+
+%%
+%% Helpers
+%%
+
+%% convert decimal to color
+\newcommand{\@karnaughmap@func@decimaltocolor@}[1]{%
+ \ifnum#1=0 red\fi
+ \ifnum#1=1 green\fi
+ \ifnum#1=2 yellow\fi
+ \ifnum#1=3 cyan\fi
+ \ifnum#1=4 blue\fi
+ \ifnum#1=5 magenta\fi
+ \ifnum#1>5 cyan\fi
+}
+
+%% convert decimal to binary 6-bit
+\newcommand{\@karnaughmap@func@decimaltobin@}[1]{%
+ \ifnum#1=0 000000\fi
+ \ifnum#1=1 000001\fi
+ \ifnum#1=2 000010\fi
+ \ifnum#1=3 000011\fi
+ \ifnum#1=4 000100\fi
+ \ifnum#1=5 000101\fi
+ \ifnum#1=6 000110\fi
+ \ifnum#1=7 000111\fi
+ \ifnum#1=8 001000\fi
+ \ifnum#1=9 001001\fi
+ \ifnum#1=10 001010\fi
+ \ifnum#1=11 001011\fi
+ \ifnum#1=12 001100\fi
+ \ifnum#1=13 001101\fi
+ \ifnum#1=14 001110\fi
+ \ifnum#1=15 001111\fi
+ \ifnum#1=16 010000\fi
+ \ifnum#1=17 010001\fi
+ \ifnum#1=18 010010\fi
+ \ifnum#1=19 010011\fi
+ \ifnum#1=20 010100\fi
+ \ifnum#1=21 010101\fi
+ \ifnum#1=22 010110\fi
+ \ifnum#1=23 010111\fi
+ \ifnum#1=24 011000\fi
+ \ifnum#1=25 011001\fi
+ \ifnum#1=26 011010\fi
+ \ifnum#1=27 011011\fi
+ \ifnum#1=28 011100\fi
+ \ifnum#1=29 011101\fi
+ \ifnum#1=30 011110\fi
+ \ifnum#1=31 011111\fi
+ \ifnum#1=32 100000\fi
+ \ifnum#1=33 100001\fi
+ \ifnum#1=34 100010\fi
+ \ifnum#1=35 100011\fi
+ \ifnum#1=36 100100\fi
+ \ifnum#1=37 100101\fi
+ \ifnum#1=38 100110\fi
+ \ifnum#1=39 100111\fi
+ \ifnum#1=40 101000\fi
+ \ifnum#1=41 101001\fi
+ \ifnum#1=42 101010\fi
+ \ifnum#1=43 101011\fi
+ \ifnum#1=44 101100\fi
+ \ifnum#1=45 101101\fi
+ \ifnum#1=46 101110\fi
+ \ifnum#1=47 101111\fi
+ \ifnum#1=48 110000\fi
+ \ifnum#1=49 110001\fi
+ \ifnum#1=50 110010\fi
+ \ifnum#1=51 110011\fi
+ \ifnum#1=52 110100\fi
+ \ifnum#1=53 110101\fi
+ \ifnum#1=54 110110\fi
+ \ifnum#1=55 110111\fi
+ \ifnum#1=56 111000\fi
+ \ifnum#1=57 111001\fi
+ \ifnum#1=58 111010\fi
+ \ifnum#1=59 111011\fi
+ \ifnum#1=60 111100\fi
+ \ifnum#1=61 111101\fi
+ \ifnum#1=62 111110\fi
+ \ifnum#1=63 111111\fi
+}
+
+%% command raises an error if executed outside the karnaugh-map environment
+\newcommand{\@karnaughmap@func@bailoutsideenvironment@}[0]{%
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=000
+ \PackageError{karnaugh-map}{%
+ Command can not be used outside karnaugh-map environment%
+ }{%
+ Do not use this command outside the karnaugh-map environment.%
+ }
+ \fi
+}
+
+%% store map size
+\newcommand{\@karnaughmap@var@mapsizex@}{0}
+\newcommand{\@karnaughmap@var@mapsizey@}{0}
+\newcommand{\@karnaughmap@var@mapsizez@}{0}
+
+%% render in black and white or color default to '0'(false/color)
+\newcommand{\@karnaughmap@var@bw@}{0}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+%
+% \section{Usage}
+%
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+
+%%
+%% Environment
+%%
+
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \begin{environment}{karnaugh-map}
+% The |karnaugh-map| environment is the base for this package, and everything related to this package happens inside an instances of this environment.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\begin{karnaugh-map}|} & \\
+% \small{\meta{*}} & \small{One asterisk for black and white implicants, non for colorized implicants} \\
+% \small{\oarg{X size}} & \small{Number of X-axis cells. Default: ''4''} \\
+% \small{\oarg{Y size}} & \small{Number of Y-axis cells. Default: ''4''} \\
+% \small{\oarg{Z size}} & \small{Number of X$\times$Y submaps. Default: ''1''} \\
+% \small{\oarg{X label}} & \small{Label for the X-axis. Default: ''$X_1X_0$''} \\
+% \small{\oarg{Y label}} & \small{Label for the Y-axis. Default: ''$X_3X_2$''} \\
+% \small{\oarg{Z label}} & \small{Label for the submaps. Default: ''$X_5X_4$''} \\
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% Four variable karnaugh map, colorized, with X label $X_1X_0$, and Y label $X_3X_2$.
+% \begin{verbatim}
+%\begin{karnaugh-map}
+%\end{karnaugh-map}
+%
+%or
+%
+%\begin{karnaugh-map}[4][4][1][$X_1X_0$][$X_3X_2$]
+%\end{karnaugh-map}
+% \end{verbatim}
+% Six variable karnaugh map, black and white, with X label $ba$, Y label $dc$, and Z label $fe$.
+% \begin{verbatim}
+%\begin{karnaugh-map}*[4][4][4][$ba$][$dc$][$fe$]
+%\end{karnaugh-map}
+% \end{verbatim}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\NewDocumentEnvironment{karnaugh-map}{s O{4} O{4} O{1} O{$X_1X_0$} O{$X_3X_2$} O{$X_5X_4$}} {%
+ \begingroup
+ % store map size {[START]
+ \renewcommand{\@karnaughmap@var@mapsizex@}{#2}%
+ \renewcommand{\@karnaughmap@var@mapsizey@}{#3}%
+ \renewcommand{\@karnaughmap@var@mapsizez@}{#4}%
+ % [END]}
+ % determinate if markings should be color or black and white
+ \IfBooleanTF{#1}{%
+ % should be black and white
+ \renewcommand{\@karnaughmap@var@bw@}{1}%
+ }{%
+ % should be color
+ \renewcommand{\@karnaughmap@var@bw@}{0}%
+ }%
+ %
+ % find matching matrix template and alignment parameters {[START]
+ \newcommand{\@karnaughmap@local@matrixtemplate@}{0}% '0' is considered as missing matrix template
+ \newcommand{\@karnaughmap@local@maprealignmentx@}{0}%
+ \newcommand{\@karnaughmap@local@maprealignmenty@}{0}%
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=221
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 0 \& 1 \& \phantom{0} \\
+ 0 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& \\
+ 1 \& |(000010)| \phantom{0} \& |(000011)| \phantom{0} \& \\
+ \phantom{0} \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=241
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 0 \& 1 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& \\
+ 01 \& |(000010)| \phantom{0} \& |(000011)| \phantom{0} \& \\
+ 11 \& |(000110)| \phantom{0} \& |(000111)| \phantom{0} \& \\
+ 10 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=421
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 0 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \\
+ 1 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=441
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \\
+ 01 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \\
+ 11 \& |(001100)| \phantom{0} \& |(001101)| \phantom{0} \& |(001111)| \phantom{0} \& |(001110)| \phantom{0} \& \\
+ 10 \& |(001000)| \phantom{0} \& |(001001)| \phantom{0} \& |(001011)| \phantom{0} \& |(001010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \\
+ }%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=442
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \& |(010000)| \phantom{0} \& |(010001)| \phantom{0} \& |(010011)| \phantom{0} \& |(010010)| \phantom{0} \& \\
+ 01 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \& |(010100)| \phantom{0} \& |(010101)| \phantom{0} \& |(010111)| \phantom{0} \& |(010110)| \phantom{0} \& \\
+ 11 \& |(001100)| \phantom{0} \& |(001101)| \phantom{0} \& |(001111)| \phantom{0} \& |(001110)| \phantom{0} \& \& |(011100)| \phantom{0} \& |(011101)| \phantom{0} \& |(011111)| \phantom{0} \& |(011110)| \phantom{0} \& \\
+ 10 \& |(001000)| \phantom{0} \& |(001001)| \phantom{0} \& |(001011)| \phantom{0} \& |(001010)| \phantom{0} \& \& |(011000)| \phantom{0} \& |(011001)| \phantom{0} \& |(011011)| \phantom{0} \& |(011010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \& \& \& \& \& \\
+ }%
+ \renewcommand{\@karnaughmap@local@maprealignmentx@}{2.5}%
+ \fi
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@\@karnaughmap@var@mapsizez@=444
+ \renewcommand{\@karnaughmap@local@matrixtemplate@}{%
+ \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \& 00 \& 01 \& 11 \& 10 \& \phantom{00} \\
+ 00 \& |(000000)| \phantom{0} \& |(000001)| \phantom{0} \& |(000011)| \phantom{0} \& |(000010)| \phantom{0} \& \& |(010000)| \phantom{0} \& |(010001)| \phantom{0} \& |(010011)| \phantom{0} \& |(010010)| \phantom{0} \& \\
+ 01 \& |(000100)| \phantom{0} \& |(000101)| \phantom{0} \& |(000111)| \phantom{0} \& |(000110)| \phantom{0} \& \& |(010100)| \phantom{0} \& |(010101)| \phantom{0} \& |(010111)| \phantom{0} \& |(010110)| \phantom{0} \& \\
+ 11 \& |(001100)| \phantom{0} \& |(001101)| \phantom{0} \& |(001111)| \phantom{0} \& |(001110)| \phantom{0} \& \& |(011100)| \phantom{0} \& |(011101)| \phantom{0} \& |(011111)| \phantom{0} \& |(011110)| \phantom{0} \& \\
+ 10 \& |(001000)| \phantom{0} \& |(001001)| \phantom{0} \& |(001011)| \phantom{0} \& |(001010)| \phantom{0} \& \& |(011000)| \phantom{0} \& |(011001)| \phantom{0} \& |(011011)| \phantom{0} \& |(011010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \& \& \& \& \& \\
+ 00 \& |(100000)| \phantom{0} \& |(100001)| \phantom{0} \& |(100011)| \phantom{0} \& |(100010)| \phantom{0} \& \& |(110000)| \phantom{0} \& |(110001)| \phantom{0} \& |(110011)| \phantom{0} \& |(110010)| \phantom{0} \& \\
+ 01 \& |(100100)| \phantom{0} \& |(100101)| \phantom{0} \& |(100111)| \phantom{0} \& |(100110)| \phantom{0} \& \& |(110100)| \phantom{0} \& |(110101)| \phantom{0} \& |(110111)| \phantom{0} \& |(110110)| \phantom{0} \& \\
+ 11 \& |(101100)| \phantom{0} \& |(101101)| \phantom{0} \& |(101111)| \phantom{0} \& |(101110)| \phantom{0} \& \& |(111100)| \phantom{0} \& |(111101)| \phantom{0} \& |(111111)| \phantom{0} \& |(111110)| \phantom{0} \& \\
+ 10 \& |(101000)| \phantom{0} \& |(101001)| \phantom{0} \& |(101011)| \phantom{0} \& |(101010)| \phantom{0} \& \& |(111000)| \phantom{0} \& |(111001)| \phantom{0} \& |(111011)| \phantom{0} \& |(111010)| \phantom{0} \& \\
+ \phantom{00} \& \& \& \& \& \& \& \& \& \& \\
+ }%
+ \renewcommand{\@karnaughmap@local@maprealignmentx@}{2.5}%
+ \renewcommand{\@karnaughmap@local@maprealignmenty@}{-2.5}%
+ \fi
+ % [END]}
+ % test if a matrix template is found or not(aka "\@karnaughmap@local@matrixtemplate@" equals to '0')
+ \ifnum0=\@karnaughmap@local@matrixtemplate@
+ % print error if no template could be found
+ \PackageError{karnaugh-map}{%
+ Can not find a template fitting your specification (\@karnaughmap@var@mapsizex@\space x \@karnaughmap@var@mapsizey@\space x \@karnaughmap@var@mapsizez@)%
+ }{%
+ Existing templates have the following dimensions: 2x2x1, 2x4x1, 4x2x1, 4x4x1, 4x4x2, and 4x4x4.
+ }%
+ \fi
+ \begin{tikzpicture}
+ % grid
+ % for all dimensions
+ \draw[color=black, ultra thin] (0,0) grid (\@karnaughmap@var@mapsizex@,\@karnaughmap@var@mapsizey@);
+ % when there are 2 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=2
+ \draw[color=black, ultra thin] (5,0) grid (9,4);
+ \fi
+ % when there are 4 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=4
+ \draw[color=black, ultra thin] (5,0) grid (9,4);
+ \draw[color=black, ultra thin] (0,-5) grid (4,-1);
+ \draw[color=black, ultra thin] (5,-5) grid (9,-1);
+ \fi
+ % labels
+ % for all dimensions
+ \node[above] at (\@karnaughmap@var@mapsizex@*0.5,\@karnaughmap@var@mapsizey@+0.9) {\small{#5}};
+ \node[left] at (-0.9,\@karnaughmap@var@mapsizey@*0.5) {\small{#6}};
+ % when there are 2 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=2
+ \node[above] at (7,4.9) {\small{#5}};
+ % extra sub maps labels
+ \node[below] at (2,-0.1) {\small{#7$=0$}};
+ \node[below] at (7,-0.1) {\small{#7$=1$}};
+ \fi
+ % when there are 4 sub maps
+ \ifnum\@karnaughmap@var@mapsizez@=4
+ \node[above] at (7,4.9) {\small{#5}};
+ \node[left] at (-0.9,-3) {\small{#6}};
+ % extra sub maps labels
+ \node[below] at (2,-0.1) {\small{#7$=00$}};
+ \node[below] at (7,-0.1) {\small{#7$=01$}};
+ \node[below] at (2,-5.1) {\small{#7$=10$}};
+ \node[below] at (7,-5.1) {\small{#7$=11$}};
+ \fi
+ % data
+ \matrix[
+ matrix of nodes,
+ ampersand replacement=\&,
+ column sep={1cm,between origins},
+ row sep={1cm,between origins},
+ ] at (\@karnaughmap@var@mapsizex@*0.5+\@karnaughmap@local@maprealignmentx@,\@karnaughmap@var@mapsizey@*0.5+\@karnaughmap@local@maprealignmenty@) {
+ \@karnaughmap@local@matrixtemplate@%
+ };
+}{
+ \end{tikzpicture}
+ \endgroup
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{environment}
+%
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+
+%%
+%% Commands for filling out the cells
+%%
+
+%% store already used cells to avoid double filled cells and for auto completion
+\newcommand{\@karnaughmap@var@usedcells@}{,}
+
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+%
+% \newpage
+% \subsection{Terms}
+% \begin{macro}{\autoterms}
+% The |\autoterms| command fills the remaining unfilled cells of the karnaugh map with the contents of the optional argument.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\autoterms|} & \\
+% \small{\oarg{content}} & \small{Content for the remaining unfilled cells. Default: ''-''}
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% Fill all remaining unfilled cells with ''-''.
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \autoterms[-]
+%\end{karnaugh-map}
+% \end{verbatim}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\autoterms}{O{-}} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \begingroup
+ % calculate max cell number {[START]
+ \newcount\@karnaughmap@local@max@\relax
+ \@karnaughmap@local@max@=\@karnaughmap@var@mapsizex@\relax
+ \multiply\@karnaughmap@local@max@ by \@karnaughmap@var@mapsizey@\relax
+ \multiply\@karnaughmap@local@max@ by \@karnaughmap@var@mapsizez@\relax
+ \advance\@karnaughmap@local@max@ by -1\relax
+ % [END]}
+ % fill terms
+ \foreach \cell in {0,1,2,...,\@karnaughmap@local@max@} {%
+ \IfSubStr{\@karnaughmap@var@usedcells@}{,\cell,}{}{%
+ \path (\@karnaughmap@func@decimaltobin@{\cell}) node {#1};
+ }
+ }
+ \endgroup
+ % update \@karnaughmap@var@usedcells@ (all cells are used now)
+ \renewcommand{\@karnaughmap@var@usedcells@}{,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,}
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \begin{macro}{\indeterminants}
+% The |\indeterminants| command fills the specified cells with ''-'' if they aren't already filled. Order of the cell numbers does not matter.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\indeterminants|} & \\
+% \small{\marg{cells}} & \small{Comma separated list of cells to fill with ''-''}
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% Fill the top left and right cell with ''-''.
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \indeterminants{0,2}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\indeterminants}{m} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \terms{#1}{-}
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \begin{macro}{\manualterms}
+% The |\manualterms| command fills the 0th cell with the first element in the argument, the 1st cell with the second element in the argument, and so on. If any of the cells already is filled, it is left as it was.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\manualterms|} & \\
+% \small{\marg{content}} & \small{Comma separated list of cell contents}
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% Fill the first four cells with 0, 1, 0, and 1 respectively.
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \manualterms{0,1,0,1}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\manualterms}{m} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \foreach \cellinfo [count=\cell from 0] in {#1} {%
+ % only write to cell if it is empty otherwise fail silently
+ \IfSubStr{\@karnaughmap@var@usedcells@}{,\cell,}{}{%
+ \path (\@karnaughmap@func@decimaltobin@{\cell}) node {\cellinfo};
+ }
+ }
+ % update \@karnaughmap@var@usedcells@ (previous cells + all cells up to \@karnaughmap@local@cellcount@ are used now) {[START]
+ \newcommand{\@karnaughmap@local@tmpusedcells@}{}
+ \newcount\@karnaughmap@local@cellcount@\relax
+ % count number of cells in #1 {[START]
+ \StrCount{#1}{,}[\@karnaughmap@local@tmpusedcells@]
+ \@karnaughmap@local@cellcount@=\@karnaughmap@local@tmpusedcells@\relax
+ \advance\@karnaughmap@local@cellcount@ by 1\relax
+ \multiply\@karnaughmap@local@cellcount@ by 2\relax
+ % [END]}
+ % create sequence for \@karnaughmap@local@tmpusedcells@
+ \StrLeft{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,}{\@karnaughmap@local@cellcount@}[\@karnaughmap@local@tmpusedcells@]
+ % update \@karnaughmap@var@usedcells@ (append \@karnaughmap@local@tmpusedcells@)
+ \expandafter\def\expandafter\@karnaughmap@var@usedcells@\expandafter{\@karnaughmap@var@usedcells@\@karnaughmap@local@tmpusedcells@}
+ % [END]}
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \newpage
+% \begin{macro}{\maxterms}
+% The |\maxterms| command fills the specified cells with ''0'' if they aren't already filled. Order of the cell numbers does not matter.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\maxterms|} & \\
+% \small{\marg{cells}} & \small{Comma separated list of cells to fill with ''0''} \\
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% Fill the top left and right cell with ''0''.
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \maxterms{0,2}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\maxterms}{m} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \terms{#1}{0}
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \begin{macro}{\minterms}
+% The |\minterms| command fills the specified cells with ''1'' if they aren't already filled. Order of the cell numbers does not matter.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\minterms|} & \\
+% \small{\marg{cells}} & \small{Comma separated list of cells to fill with ''1''} \\
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% Fill the top left and right cell with ''1''.
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \minterms{0,2}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\minterms}{m} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \terms{#1}{1}
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \begin{macro}{\terms}
+% \changes{v1.1}{2017/02/06}{Support user specified term content and variable entered maps}
+% The |\terms| command fills the specified cells with the specified content if they aren't already filled. Order of the cell numbers does not matter.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\terms|} & \\
+% \small{\marg{cells}} & \small{Comma separated list of cells to fill with content} \\
+% \small{\marg{content}} & \small{Content to fill the cells with} \\
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% Fill the top left and right cell with ''X''.
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \terms{0,2}{X}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\terms}{m m} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \foreach \cell in {#1} {%
+ % only write to cell if it is empty otherwise fail silently
+ \IfSubStr{\@karnaughmap@var@usedcells@}{,\cell,}{}{%
+ \path (\@karnaughmap@func@decimaltobin@{\cell}) node {#2};
+ }
+ }
+ % update \@karnaughmap@var@usedcells@
+ \expandafter\def\expandafter\@karnaughmap@var@usedcells@\expandafter{\@karnaughmap@var@usedcells@#1,}
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+
+%%
+%% Commands for marking the cells
+%%
+
+%% keep track of used colors
+\newcount\@karnaughmap@var@colorindex@\relax
+\@karnaughmap@var@colorindex@=0\relax
+
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+%
+% \newpage
+% \subsection{Implicants}
+% \begin{macro}{\implicant}
+% The |\implicant| command draws quadratic implicants on one or multiple submaps. If the implicant shall be drawn on multiple submaps, \marg{northwest cell} and \marg{southeast cell} must be specified as if the implicant was to be drawn on the 0:th submap. When turned on, colorization is done automatically, following a global sequence of available colors.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\implicant|} & \\
+% \small{\marg{northwest cell}} & \small{The most northwest cell in the implicant} \\
+% \small{\marg{southeast cell}} & \small{The most southeast cell in the implicant} \\
+% \small{\oarg{submaps}} & \small{Comma separated list of submaps the implicant should be drawn on. Default: ''0''} \\
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% \begin{multicols}{2}
+% [Implicant around the four most inner cells.]
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \implicant{5}{15}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \columnbreak
+% \resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}
+% \implicant{5}{15}
+% \end{karnaugh-map}
+% }
+% \end{multicols}
+% \begin{multicols}{2}
+% [Single cell implicant, 0:th cell, on all four submaps.]
+% \begin{verbatim}
+%\begin{karnaugh-map}[4][4][4]
+% \implicant{0}{0}[0,1,2,3]
+%\end{karnaugh-map}
+% \end{verbatim}
+% \columnbreak
+% \resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}[4][4][4]
+% \implicant{0}{0}[0,1,2,3]
+% \end{karnaugh-map}
+% }
+% \end{multicols}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\implicant}{m m O{0}} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \begingroup
+ % loop through specified sub maps
+ \foreach \map in {#3} {%
+ % make sure we don't try to draw on non existing sub maps
+ \ifnum\map<\@karnaughmap@var@mapsizez@
+ % calculate cell number for the specified sub maps {[START]
+ \newcount\@karnaughmap@local@northwest@\relax
+ \newcount\@karnaughmap@local@southeast@\relax
+ \@karnaughmap@local@northwest@=\map\relax
+ \@karnaughmap@local@southeast@=\map\relax
+ \multiply\@karnaughmap@local@northwest@ by 16\relax
+ \multiply\@karnaughmap@local@southeast@ by 16\relax
+ \advance\@karnaughmap@local@northwest@ by #1\relax
+ \advance\@karnaughmap@local@southeast@ by #2\relax
+ % [END]}
+ % only fill marking when \@karnaughmap@var@bw@ = '0'
+ \ifnum0=\@karnaughmap@var@bw@
+ \fill[
+ rounded corners=3pt,
+ fill=\@karnaughmap@func@decimaltocolor@{\@karnaughmap@var@colorindex@},
+ fill opacity=0.25,
+ ] {
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@northwest@}.center)+(-0.3,0.3)$)
+ rectangle
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@southeast@}.center)+(0.3,-0.3)$)
+ };
+ \fi
+ \draw[
+ rounded corners=3pt,
+ draw opacity=1.0,
+ ] {
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@northwest@}.center)+(-0.3,0.3)$)
+ rectangle
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@southeast@}.center)+(0.3,-0.3)$)
+ };
+ \else
+ \PackageWarning{karnaugh-map}{%
+ You can only draw on existing sub maps.
+ Ignoring instruction to draw on non existing sub map number \map%
+ }
+ \fi
+ }
+ \endgroup
+ % mark color as used
+ \advance\@karnaughmap@var@colorindex@ by 1\relax
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \newpage
+% \begin{macro}{\implicantedge}
+% The |\implicantedge| command draws quadratic implicants with the middle of the implicant facing the edge of a submap either horizontally or vertically. The function is able to draw the same implicant on one or multiple submaps. However if the implicant shall be drawn on multiple submaps, \marg{northwest part - northwest cell}, \marg{northwest part - southeast cell}, \marg{southeast part - northwest cell}, \marg{southeast part - southeast cell} must be specified as if the implicant was to be drawn on the 0:th submap. When turned on, colorization is done automatically, following a global sequence of available colors.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\implicantedge|} & \\
+% \small{\marg{northwest part - northwest cell}} & \small{The most northwest cell in the northwest part of the implicant} \\
+% \small{\marg{northwest part - southeast cell}} & \small{The most southeast cell in the northwest part of the implicant} \\
+% \small{\marg{southeast part - northwest cell}} & \small{The most northwest cell in the southeast part of the implicant} \\
+% \small{\marg{southeast part - southeast cell}} & \small{The most southeast cell in the southeast part of the implicant} \\
+% \small{\oarg{submaps}} & \small{Comma separated list of submaps the implicant should be drawn on. Default: ''0''} \\
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% \begin{multicols}{2}
+% [Horizontal implicant over the submap edge containing the cells 4, 6, 12, and 14.]
+% \begin{verbatim}
+%\begin{karnaugh-map}
+% \implicantedge{4}{12}{6}{14}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \columnbreak
+% \resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}
+% \implicantedge{4}{12}{6}{14}
+% \end{karnaugh-map}
+% }
+% \end{multicols}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\implicantedge}{m m m m O{0}} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ \begingroup
+ % helper variables {[START]
+ \newcommand{\@karnaughmap@local@orientation@}{0} % '0' is a vertical and '1' is a horizontal implicant
+ \newcommand{\@karnaughmap@local@coordinateone@}{0}
+ \newcommand{\@karnaughmap@local@coordinatetwo@}{0}
+ \newcommand{\@karnaughmap@local@mirror@}{1} % '1' or '-1' to mirror
+ \newcommand{\@karnaughmap@local@bordercontent@}{}
+ \newcommand{\@karnaughmap@local@fillcontent@}{}
+ % [END]}
+ % determinate if this is an horizontal or vertical implicant {[START]
+ \newcount\@karnaughmap@local@testcaseone@\relax
+ \newcount\@karnaughmap@local@testcasetwo@\relax
+ \@karnaughmap@local@testcaseone@=#1\relax
+ \@karnaughmap@local@testcasetwo@=#1\relax
+ \advance\@karnaughmap@local@testcaseone@ by -#2\relax
+ \advance\@karnaughmap@local@testcasetwo@ by -#3\relax
+ \ifnum\@karnaughmap@local@testcaseone@<0 \multiply\@karnaughmap@local@testcaseone@ by -1\relax\fi
+ \ifnum\@karnaughmap@local@testcasetwo@<0 \multiply\@karnaughmap@local@testcasetwo@ by -1\relax\fi
+ % test case one
+ \ifnum\@karnaughmap@local@testcaseone@<\@karnaughmap@var@mapsizex@
+ % this is a vertical implicant
+ \renewcommand{\@karnaughmap@local@orientation@}{0}
+ \else
+ % this is a horizontal implicant
+ \renewcommand{\@karnaughmap@local@orientation@}{1}
+ \fi
+ % test case two
+ \ifnum\@karnaughmap@local@testcasetwo@<\@karnaughmap@var@mapsizex@
+ % this is a vertical implicant
+ \renewcommand{\@karnaughmap@local@orientation@}{1}
+ \fi
+ % [END]}
+ % loop through specified sub maps
+ \foreach \map in {#5} {%
+ % make sure we don't try to draw on non existing sub maps
+ \ifnum\map<\@karnaughmap@var@mapsizez@
+ % loop through both parts of the marking(ie. left and right part)
+ \foreach \i in {0,1} {%
+ % set parameters depending on the part of the marking(ie. left and right part) {[START]
+ \ifnum\i=0
+ \renewcommand{\@karnaughmap@local@coordinateone@}{#1}
+ \renewcommand{\@karnaughmap@local@coordinatetwo@}{#2}
+ \renewcommand{\@karnaughmap@local@mirror@}{1}
+ \else
+ \renewcommand{\@karnaughmap@local@coordinateone@}{#3}
+ \renewcommand{\@karnaughmap@local@coordinatetwo@}{#4}
+ \renewcommand{\@karnaughmap@local@mirror@}{-1}
+ \fi
+ % [END]}
+ % calculate cell numbers for the specified sub map {[START]
+ \newcount\@karnaughmap@local@coordinateonecounter@\relax
+ \newcount\@karnaughmap@local@coordinatetwocounter@\relax
+ \@karnaughmap@local@coordinateonecounter@=\map\relax
+ \@karnaughmap@local@coordinatetwocounter@=\map\relax
+ \multiply\@karnaughmap@local@coordinateonecounter@ by 16\relax
+ \multiply\@karnaughmap@local@coordinatetwocounter@ by 16\relax
+ \advance\@karnaughmap@local@coordinateonecounter@ by \@karnaughmap@local@coordinateone@\relax
+ \advance\@karnaughmap@local@coordinatetwocounter@ by \@karnaughmap@local@coordinatetwo@\relax
+ \renewcommand{\@karnaughmap@local@coordinateone@}{\@karnaughmap@local@coordinateonecounter@}
+ \renewcommand{\@karnaughmap@local@coordinatetwo@}{\@karnaughmap@local@coordinatetwocounter@}
+ % [END]}
+ % select drawing content depending on orientation {[START]
+ \ifnum\@karnaughmap@local@orientation@=0
+ % this is a vertical implicant
+ \renewcommand{\@karnaughmap@local@fillcontent@}{%
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(-.3,.6*\@karnaughmap@local@mirror@)$)
+ --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(.3,.6*\@karnaughmap@local@mirror@)$)
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(.3,-.3*\@karnaughmap@local@mirror@)$) }
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(-.3,-.3*\@karnaughmap@local@mirror@)$) }
+ -- cycle
+ }
+ \renewcommand{\@karnaughmap@local@bordercontent@}{%
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(.3,.6*\@karnaughmap@local@mirror@)$)
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(.3,-.3*\@karnaughmap@local@mirror@)$) }
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(-.3,-.3*\@karnaughmap@local@mirror@)$) }
+ --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(-.3,.6*\@karnaughmap@local@mirror@)$)
+ }
+ \else
+ % this is a horizontal implicant
+ \renewcommand{\@karnaughmap@local@fillcontent@}{%
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(-.6*\@karnaughmap@local@mirror@,-.3)$)
+ --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(-.6*\@karnaughmap@local@mirror@,.3)$)
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(.3*\@karnaughmap@local@mirror@,.3)$) }
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(.3*\@karnaughmap@local@mirror@,-.3)$) }
+ -- cycle
+ }
+ \renewcommand{\@karnaughmap@local@bordercontent@}{%
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(-.6*\@karnaughmap@local@mirror@,.3)$)
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinateone@}.center)+(.3*\@karnaughmap@local@mirror@,.3)$) }
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(.3*\@karnaughmap@local@mirror@,-.3)$) }
+ --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinatetwo@}.center)+(-.6*\@karnaughmap@local@mirror@,-.3)$)
+ }
+ \fi
+ % [END]}
+ % draw
+ % only fill marking when \@karnaughmap@var@bw@ = '0'
+ \ifnum0=\@karnaughmap@var@bw@
+ \fill[
+ sharp corners,
+ fill=\@karnaughmap@func@decimaltocolor@{\@karnaughmap@var@colorindex@},
+ fill opacity=0.25,
+ ] {
+ \@karnaughmap@local@fillcontent@%
+ };
+ \fi
+ \draw[
+ sharp corners,
+ draw opacity=1.0,
+ ] {
+ \@karnaughmap@local@bordercontent@%
+ };
+ }
+ \else
+ \PackageWarning{karnaugh-map}{%
+ You can only draw on existing sub maps.
+ Ignoring instruction to draw on non existing sub map number \map%
+ }
+ \fi
+ }
+ \endgroup
+ % mark color as used
+ \advance\@karnaughmap@var@colorindex@ by 1\relax
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \newpage
+% \begin{macro}{\implicantcorner}
+% The |\implicantcorner| command draws an implicant around only the four corner pieces on one or multiple four variable karnaugh submaps. When turned on, colorization is done automatically, following a global sequence of available colors.
+%
+% \textbf{Usage:}
+%
+% \begin{tabularx}{\textwidth}{l X}
+% \small{|\implicantcorner|} & \\
+% \small{\oarg{submaps}} & \small{Comma separated list of submaps the implicant should be drawn on. Default: ''0''} \\
+% \end{tabularx}
+%
+% \textbf{Example:}
+%
+% \begin{multicols}{2}
+% [Draw an implicant around all corners on 0th and 2nd submap of a six variable karnaugh map.]
+% \begin{verbatim}
+%\begin{karnaugh-map}[4][4][4]
+% \implicantcorner[0,2]
+%\end{karnaugh-map}
+% \end{verbatim}
+% \columnbreak
+% \resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}[4][4][4]
+% \implicantcorner[0,2]
+% \end{karnaugh-map}
+% }
+% \end{multicols}
+% \iffalse code
+% \begin{macrocode}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+\DeclareDocumentCommand{\implicantcorner}{O{0}} {%
+ % bail if outside environment karnaugh-map
+ \@karnaughmap@func@bailoutsideenvironment@{}
+ %
+ % make sure "\implicantcorner" only are used on 4x4 maps
+ \ifnum\@karnaughmap@var@mapsizex@\@karnaughmap@var@mapsizey@=44
+ % loop through specified sub maps
+ \foreach \map in {#1} {%
+ % make sure we don't try to draw on non existing sub maps
+ \ifnum\map<\@karnaughmap@var@mapsizez@
+ % loop through the four corners
+ \foreach \corner in {0,2,8,10} {%
+ % calculate corner's properties {[START]
+ \newcount\@karnaughmap@local@coordinate@\relax
+ \@karnaughmap@local@coordinate@=\map\relax
+ \multiply\@karnaughmap@local@coordinate@ by 16\relax
+ \advance\@karnaughmap@local@coordinate@ by \corner\relax
+ \newcommand{\@karnaughmap@local@mirrorx@}{0} % '1' or '-1' to mirror
+ \newcommand{\@karnaughmap@local@mirrory@}{0} % '1' or '-1' to mirror
+ \ifnum\corner=0 \renewcommand{\@karnaughmap@local@mirrorx@}{1}\renewcommand{\@karnaughmap@local@mirrory@}{1}\fi
+ \ifnum\corner=2 \renewcommand{\@karnaughmap@local@mirrorx@}{-1}\renewcommand{\@karnaughmap@local@mirrory@}{1}\fi
+ \ifnum\corner=8 \renewcommand{\@karnaughmap@local@mirrorx@}{1}\renewcommand{\@karnaughmap@local@mirrory@}{-1}\fi
+ \ifnum\corner=10 \renewcommand{\@karnaughmap@local@mirrorx@}{-1}\renewcommand{\@karnaughmap@local@mirrory@}{-1}\fi
+ % [END]}
+ % draw
+ % only fill marking when \@karnaughmap@var@bw@ = '0'
+ \ifnum0=\@karnaughmap@var@bw@
+ \fill[
+ sharp corners,
+ fill=\@karnaughmap@func@decimaltocolor@{\@karnaughmap@var@colorindex@},
+ fill opacity=0.25,
+ ]
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinate@}.center)+(-.6*\@karnaughmap@local@mirrorx@,.6*\@karnaughmap@local@mirrory@)$)
+ --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinate@}.center)+(.3*\@karnaughmap@local@mirrorx@,.6*\@karnaughmap@local@mirrory@)$)
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinate@}.center)+(.3*\@karnaughmap@local@mirrorx@,-.3*\@karnaughmap@local@mirrory@)$) }
+ --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinate@}.center)+(-.6*\@karnaughmap@local@mirrorx@,-.3*\@karnaughmap@local@mirrory@)$)
+ -- cycle;
+ \fi
+ \draw[
+ sharp corners,
+ draw opacity=1.0,
+ ]
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinate@}.center)+(.3*\@karnaughmap@local@mirrorx@,.6*\@karnaughmap@local@mirrory@)$)
+ { [rounded corners=3pt] --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinate@}.center)+(.3*\@karnaughmap@local@mirrorx@,-.3*\@karnaughmap@local@mirrory@)$) }
+ --
+ ($(\@karnaughmap@func@decimaltobin@{\@karnaughmap@local@coordinate@}.center)+(-.6*\@karnaughmap@local@mirrorx@,-.3*\@karnaughmap@local@mirrory@)$);
+ }
+ \else
+ \PackageWarning{karnaugh-map}{%
+ You can only draw on existing sub maps.
+ Ignoring instruction to draw on non existing sub map number \map%
+ }
+ \fi
+ }
+ % mark color as used
+ \advance\@karnaughmap@var@colorindex@ by 1\relax
+ \else
+ % print error if "\implicantcorner" are used on non 4x4 map
+ \PackageError{karnaugh-map}{%
+ \protect\implicantcorner\space can only be used on 4x4 maps%
+ }{%
+ You are trying to use \protect\implicantcorner\space on non 4x4 map.%
+ }
+ \fi
+}
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% ^^A #### /CODE ####
+% ^^A ##########################################################################
+% ^^A ##########################################################################
+% \end{macrocode}
+% \fi
+% \end{macro}
+%
+% \newpage
+% \section{Examples}
+% \begin{multicols}{2}
+% [Draw a karnaugh map for \small{$f(a,b,c,d,e,f) =$\\$\Sigma(0,1,2,3,8,13,17,20,22,28,33,32,30,19,40,35,49,42,34,10,60,54,62,51,52)$\\$+d(15,45,47)$}.]
+% \begin{verbatim}
+%\begin{karnaugh-map}[4][4][4][$ba$][$dc$][$fe$]
+% \minterms{0,1,2,3,8,13,17,20,22,28,
+% 33,32,30,19,40,35,49,42,34,10,60,
+% 54,62,51,52}
+% \indeterminants{15,45,47}
+% \autoterms[0]
+% \implicantcorner[0,2]
+% \implicant{1}{3}[0,1,2,3]
+% \implicantedge{4}{12}{6}{14}[1,3]
+% \implicant{13}{15}[0,2]
+%\end{karnaugh-map}
+% \end{verbatim}
+% \columnbreak
+% \resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}[4][4][4][$ba$][$dc$][$fe$]
+% \minterms{0,1,2,3,8,13,17,20,22,28,33,32,30,19,40,35,49,42,34,10,60,54,62,51,52}
+% \indeterminants{15,45,47}
+% \autoterms[0]
+% \implicantcorner[0,2]
+% \implicant{1}{3}[0,1,2,3]
+% \implicantedge{4}{12}{6}{14}[1,3]
+% \implicant{13}{15}[0,2]
+% \end{karnaugh-map}
+% }
+% \end{multicols}
+%
+% \begin{multicols}{2}
+% [Draw a karnaugh map for \small{$f(X_0,X_1) = \Pi(0,2,3)$} in black and white.]
+% \begin{verbatim}
+%\begin{karnaugh-map}*[2][2][1][$X_0$][$X_1$]
+% \maxterms{0,2,3}
+% \autoterms[1]
+% \implicant{1}{1}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \columnbreak
+% \resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}*[2][2][1][$X_0$][$X_1$]
+% \maxterms{0,2,3}
+% \autoterms[1]
+% \implicant{1}{1}
+% \end{karnaugh-map}
+% }
+% \end{multicols}
+%
+% \newpage
+% \begin{multicols}{2}
+% [Draw a variable entered map.]
+% \begin{verbatim}
+%\begin{karnaugh-map}[4][2][1][$ab$][$c$]
+% \maxterms{0,2,4,5,6}
+% \minterms{3}
+% \terms{1}{$d$}
+% \terms{7}{$d'$}
+% \implicant{1}{3}
+% \implicant{3}{7}
+%\end{karnaugh-map}
+% \end{verbatim}
+% \columnbreak
+% \resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}[4][2][1][$ab$][$c$]
+% \maxterms{0,2,4,5,6}
+% \minterms{3}
+% \terms{1}{$d$}
+% \terms{7}{$d'$}
+% \implicant{1}{3}
+% \implicant{3}{7}
+% \end{karnaugh-map}
+% }
+% \end{multicols}
+%
+% \section{Dependencies}
+% \begin{itemize}
+% \item tikz
+% \item xparse
+% \item xstring
+% \end{itemize}
+%
+% \newpage
+% \section{Miscellaneous}
+% \subsection*{Resizing}
+% The karnaugh maps produced with this package have a prespecified size which can not be changed. However you can resize the karnaugh map to your desired size. Resizing can be done using the |\resizebox| command from the graphicx package. Scaling the karnaugh map to fill the column width while preserving the aspect ratio can be done as follows.
+% \begin{verbatim}
+%\resizebox{\columnwidth}{!}{
+% \begin{karnaugh-map}
+% \end{karnaugh-map}
+%}
+% \end{verbatim}
+%
+% \subsection*{Comma separated lists}
+% Anywhere in this package where a comma separated list is used data should only be comma separated. Therefore a comma and space separeated list will for example \textit{not} work properly.
+%
+% An example of errorious usage related to the \small{\marg{cells}} parameter in the terms related commands can result in multiple zeros, ones and other terms overlapping in the same cell in the outputted karnaugh map.
+%
+\endinput
diff --git a/graphics/pgf/contrib/karnaugh-map/karnaugh-map.ins b/graphics/pgf/contrib/karnaugh-map/karnaugh-map.ins
new file mode 100644
index 0000000000..42a6c0e33c
--- /dev/null
+++ b/graphics/pgf/contrib/karnaugh-map/karnaugh-map.ins
@@ -0,0 +1,29 @@
+\input docstrip.tex
+
+\keepsilent
+
+\usedir{tex/latex/karnaugh-map}
+
+\preamble
+
+This generated file originates from the karnaugh-map package!
+
+\endpreamble
+
+% generate sty file
+\generate{\file{karnaugh-map.sty}{\from{karnaugh-map.dtx}{package}}}
+
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space karnaugh-map.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file}
+\Msg{* karnaugh-map.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+
+\endbatchfile
diff --git a/graphics/pgf/contrib/karnaugh-map/karnaugh-map.pdf b/graphics/pgf/contrib/karnaugh-map/karnaugh-map.pdf
new file mode 100644
index 0000000000..472e5a65d6
--- /dev/null
+++ b/graphics/pgf/contrib/karnaugh-map/karnaugh-map.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/karnaughmap/README b/graphics/pgf/contrib/karnaughmap/README
new file mode 100644
index 0000000000..47ec072c50
--- /dev/null
+++ b/graphics/pgf/contrib/karnaughmap/README
@@ -0,0 +1,22 @@
+Copyright (C) 2015 by Michael Vonbun <m.vonbun@gmail.com>
+---------------------------------------------------------
+
+The karnaughmap package may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.2
+of this license or (at your option) any later version.
+The latest version of this license is in:
+ http://www.latex-project.org/lppl.txt
+and version 1.2 or later is part of all distributions of LaTeX
+version 1999/12/01 or later.
+
+
+April 20, 2015
+
+KARNAUGHMAP is a LaTeX package used to draw Karnaugh maps.
+
+It got inspired by the karnaugh macros provided at https://www.ctan.org/tex-archive/macros/latex/contrib/karnaugh.
+
+It offers an easy to use key-value interface, based on the input of an ordered truth table.
+Intended for educational purposes, it allows to customize the fields of the Karnaugh map (e.g. by enumerating the fields).
+
+For details see the package documentation.
diff --git a/graphics/pgf/contrib/karnaughmap/karnaughmap.dtx b/graphics/pgf/contrib/karnaughmap/karnaughmap.dtx
new file mode 100644
index 0000000000..7f9244b7f6
--- /dev/null
+++ b/graphics/pgf/contrib/karnaughmap/karnaughmap.dtx
@@ -0,0 +1,1815 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2015 by Michael Vonbun <m.vonbun@gmail.com>
+% ---------------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.2
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.2 or later is part of all distributions of LaTeX
+% version 1999/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{karnaughmap.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{karnaughmap}
+%<*package>
+ [2015/04/20 v2.0 draw karnaugh maps using tikz]
+%</package>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{xkvview}
+\usepackage{hyperref}
+\usepackage{karnaughmap}[2013/12/06]
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{karnaughmap.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{751}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2013/08/29}{Initial version}
+% \changes{v1.0a}{2013/08/29}{Added a to do section}
+% \changes{v1.1}{2013/08/29}{Added binary indices}
+% \changes{v1.2}{2013/08/30}{Added negated labels
+% and adjusted the positioning of variable and function labels.}
+% \changes{v1.3}{2013/09/04}{Made the table color adjustable.}
+% \changes{v1.4}{2013/12/06}{Added a colored box highlight macro.}
+% \changes{v2.0}{2015/04/20}{Minor touchup for publication.}
+%
+% \GetFileInfo{karnaughmap.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment,\else,\fi}
+%
+%
+% \title{The \textsf{karnaughmap} package\thanks{This document
+% corresponds to \textsf{karnaughmap}~\fileversion, dated \filedate.}}
+% \author{Michael Vonbun \\ \texttt{m.vonbun@gmail.com}}
+%
+% \maketitle
+%
+% \section{Introduction}% \iffalse TODO: SEC:Intoduction \fi
+%
+% This package uses TikZ to typeset Karnaugh maps in an easy way.
+% Though the map size is restricted to four variables (as for \fileversion),
+% it is easier and customizable compared to \textsf{karnaugh.tex}.
+%
+% \section{Installation}% \iffalse TODO: SEC:Installation \fi
+%
+% Install this package like any other \LaTeX~package.\\
+%
+% \noindent
+% The end of this file contains the installation file (.ins) code in case
+% the provided ins-file got lost.\\
+%
+% \noindent
+% For style creation run |latex karnaughmap.ins|.
+% For doc/manual creation run |latex karnaughmap.dtx| afterwards.
+%
+% \section{Dependencies}% \iffalse TODO: SEC:Dependencies \fi
+%
+% As of \textsf{karnaughmap}~\fileversion~this package depends on
+% \begin{itemize}
+% \item \textsf{tikz}
+% \item \textsf{xkeyval}
+% \item \textsf{ifthen}
+% \item \textsf{xstring}
+% \end{itemize}
+%
+% \section{Usage}% \iffalse TODO: SEC:Usage \fi
+%
+% \subsection{Karnaugh Map Macros}% \iffalse TODO: SUBSEC:Karnaugh Map Macros \fi
+%
+% \DescribeMacro{\karnaughmap} |\karnaughmap|\oarg{key=value}\marg{entries}
+%
+% Use this macro inside of a |tikzpicture|-environment to typeset a Karnaugh map
+% of a corresponding truth table.\\
+%
+% \paragraph{Example}
+% Assume the truth table with inputs $a$ and $b$ and output $z$ is
+% \begin{center}
+% \begin{tabular}{ccc}
+% $a$ & $b$ & $z$ \\\hline
+% 0 & 0 & 0 \\
+% 0 & 1 & 0 \\
+% 1 & 0 & * \\
+% 1 & 1 & 1
+% \end{tabular}
+% \end{center}
+%
+% \begin{minipage}[t]{0.45\textwidth}%
+% Then, the corresponding Karnaugh map with default layout is:\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap{00*1}
+% \end{tikzpicture}\\
+% \end{minipage}
+% \hfill
+% \begin{minipage}[t]{0.45\textwidth}%
+% Which was typeset using:\\
+% |\begin{tikzpicture}[thick] |\\
+% | \karnaughmap{00*1} |\\
+% |\end{tikzpicture} |
+% \end{minipage}
+%
+% To produce empty maps, there are two possibilities.
+% First is to use the key |defaultmap| described later and omit the mandatory input,
+% the second is by providing a scalar mandatory argument that is equal the number of cells desired,
+% i.e. 4,8, or 16.
+%
+% \begin{minipage}[t]{0.45\textwidth}%
+% \begin{center}
+% |\karnaughmap{4}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap{4}
+% \end{tikzpicture}\\
+% \end{center}
+% \end{minipage}
+% \hfill
+% \begin{minipage}[t]{0.45\textwidth}%
+% \begin{center}
+% |\karnaughmap[defaultmap=4]{}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[defaultmap=4]{}
+% \end{tikzpicture}\\
+% \end{center}
+% \end{minipage}\\
+%
+% \medskip
+%
+% Note that it is also possible to provide the input string with blanks:
+%
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap{1100 0101}|\\
+% |\end{tikzpicture}|\\
+%
+% \begin{center}
+% \begin{tikzpicture}[thick]
+% \karnaughmap{1100 0101}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% This is especially useful when larger maps are typeset as it increases
+% readability of the \LaTeXe code.\\
+%
+%
+% \DescribeMacro{\karnaughmapcolorfield} |\karnaughmapcolorfield|\oarg{key=value}\marg{map size}\marg{field string}\marg{color}
+%
+% Use this macro inside of a |tikzpicture|-environment to color a Karnaugh map of size |map size|.
+% Use hexadecimal values to address a certain field of the map in the |field string|.\\
+%
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% |\karnaughmapcolorfield{2}{01}{teal!50}%|\\
+% |\karnaughmapcolorfield{2}{3}{violet!50}%|\\
+% |\karnaughmap{4}|\\
+% |\end{tikzpicture}|\\
+%
+% \begin{center}
+% \begin{tikzpicture}[thick]
+% \karnaughmapcolorfield{2}{01}{teal!50}%
+% \karnaughmapcolorfield{2}{3}{violet!50}%
+% \karnaughmap{4}
+% \end{tikzpicture}\\
+% \end{center}%
+%
+% The keys for this macro allow for two different styles:
+% \emph{filled} |fill| and \emph{outlined} |outline|.
+% The default is filled.
+% In addition, TikZ keys are forwarded to the |\draw| or |\fill| command,
+% allowing a good adjustment of styles.\\
+%
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% |\karnaughmapcolorfield[outline]{2}{01}{teal!50}%|\\
+% |\karnaughmapcolorfield[outline,ultra thick]{2}{3}{violet!50}%|\\
+% |\karnaughmap{4}|\\
+% |\end{tikzpicture}|\\
+%
+% \begin{center}
+% \begin{tikzpicture}[thick]
+% \karnaughmapcolorfield[outline]{2}{01}{teal!50}%
+% \karnaughmapcolorfield[outline,ultra thick]{2}{3}{violet!50}%
+% \karnaughmap{4}
+% \end{tikzpicture}\\
+% \end{center}%
+%
+%
+%
+%
+%
+%
+%
+% \subsection{Style Customizations}% \iffalse TODO: SUBSEC:Style Customizations \fi
+%
+% For style customization a key-value system is provided.
+%
+% \DescribeMacro{\setkarnaughmap} |\setkarnaughmap|\oarg{key=value}
+% This is the interface function for setting the keys.
+% To restore the defaults call |\setkarnaughmap|.
+%
+% The defaults are\\
+% | \setkarnaughmap[omitzeros, defaultmap=16, |\\
+% | function=z, variables=abcd, dontcare=*]|.
+%
+% \paragraph{Key-Value List} The following table is an overview over all options provided.
+% The exact behavior and description of the keys are described below.
+%
+% \xkvview{family=karnaughmap}
+%
+% \paragraph{Selective Entry Printing}
+% The following keys control the printing of different types of Karnaugh map cell entries.
+%
+% \DescribeMacro{omitzeros} |omitzeros|\oarg{=\textbf{true}/false}
+% Toggle between printing and omitting zero-valued entries in the Karnaugh map.
+% \begin{center}
+% |\karnaughmap[omitzeros=false]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[omitzeros=false]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{omitones} |omitones|\oarg{=true/\textbf{false}}
+% Toggle between printing and omitting one-valued entries in the Karnaugh map.
+% \begin{center}
+% |\karnaughmap[omitzeros=false,omitones]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[omitzeros=false,omitones]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{omitdontcares} |omitdontcares|\oarg{=true/\textbf{false}}
+% Toggle between printing and omitting don't care entries in the Karnaugh map.
+% \begin{center}
+% |\karnaughmap[omitzeros=false,omitdontcares]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[omitzeros=false,omitdontcares]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \paragraph{Karnaugh Map Style}
+% The following keys control the printing of different types of Karnaugh map labels.
+%
+% \DescribeMacro{omitbinaries} |omitbinaries|\oarg{true/\textbf{false}}
+% Toggle between printing and omitting the binary encoding on top and left of the Karnaugh map.
+% \begin{center}
+% |\karnaughmap[omitbinaries]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[omitbinaries]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{omitvariables} |omitvariables|\oarg{=true/\textbf{false}}
+% Toggle between printing and omitting the variable labeling of rows and columns around the Karnaugh map.
+% \begin{center}
+% |\karnaughmap[omitvariables]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[omitvariables]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{omitidx} |omitidx|\oarg{=true/\textbf{false}}
+% Toggle between printing and omitting index values besides the cell entries in the Karnaugh map.
+% \begin{center}
+% |\karnaughmap[omitidx]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[omitidx]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{binaryidx} |binaryidx|\oarg{=true/\textbf{false}}
+% Toggle between decimal and binary indices.
+% \begin{center}
+% |\karnaughmap[binaryidx]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[binaryidx]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{omitnegated} |omitnegated|\oarg{=\textbf{true}/false}
+% Toggle between typesetting the negated in addition to the non-negated variable labels.
+% \begin{center}
+% |\karnaughmap[omitnegated=false]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[omitnegated=false]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \paragraph{Map Customizations}
+% The following keys can be used to customize the Karnaugh maps in various ways.
+%
+% \DescribeMacro{defaultmap} |defaultmap|\oarg{=\textbf{16}}
+% Set the default map size (4,8, or 16), i.e. this map size is used if the mandatory argument of
+% |\karnaughmap{}| is empty. Thus, empty maps can be produced.
+% \begin{center}
+% |\karnaughmap[defaultmap=4]{}|, |\karnaughmap[defaultmap=8]{}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[defaultmap=4]{}
+% \end{tikzpicture}
+% \begin{tikzpicture}[thick]
+% \karnaughmap[defaultmap=8]{}
+% \end{tikzpicture}\\
+% \end{center}
+% Note that the same functionality can be achieved by providing a scalar mandatory input
+% \begin{center}
+% |\karnaughmap{4}|, |\karnaughmap[defaultmap=8]{}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap{4}
+% \end{tikzpicture}
+% \begin{tikzpicture}[thick]
+% \karnaughmap{8}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{function} |function|\oarg{=\textbf{z}}
+% Set the function label used to label the Karnaugh map.
+% \begin{center}
+% |\karnaughmap[function={f(a,b)}]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[function={f(a,b)}]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+% \begin{center}
+% |\karnaughmap[function=]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[function=]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{variables} |variables|\oarg{=\textbf{abcd}}
+% Set the variable names used in the Karnaugh map.
+% Note that you have to provide a single string of variables
+% or variables embraced by curly braces.
+% \begin{center}
+% |\karnaughmap[variables=kl]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=kl]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \begin{center}
+% |\karnaughmap[variables={{s_2}{s_1}{s_0}{a}}]{01** 10** 0101 **00}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables={{s_2}{s_1}{s_0}{a}}]{01** 10** 0101 **00}
+% \end{tikzpicture}\\
+% \end{center}
+%
+%
+%
+% \DescribeMacro{dontcare} |dontcare|\oarg{=\textbf{*}}
+% Set the don't care character.
+% This is only needed if you provide the |omitdontcares| key and use
+% don't care characters other than |*| in the |\karnaughmap{x}| inputstring.
+% \begin{center}
+% |\karnaughmap[dontcare=X,omitdontcares,omitzeros=false]{00X1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[dontcare=X,omitdontcares,omitzeros=false]{00X1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{color} |color|\oarg{=\textbf{black}}
+% Set the color of the \emph{entire} Karnaugh map, including labels, entries, etc.
+% \begin{center}
+% |\karnaughmap[color=teal]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[color=teal]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{draw} |draw|\oarg{=\textbf{same as color}}
+% Set the color of the Karnaugh map \emph{only}, i.e. the lines that are drawn.
+% The labels are not affected.
+% \begin{center}
+% |\karnaughmap[draw=teal]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[draw=teal]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{labelcolor} |labelcolor|\oarg{=\textbf{same as color}}
+% Set the color of the labels of the Karnaugh map \emph{only}.
+% The lines are not affected.
+% \begin{center}
+% |\karnaughmap[labelcolor=teal]{00*1}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[labelcolor=teal]{00*1}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \paragraph{Multiple Karnaugh Maps in one TikZ Picture}
+% To typeset more than one Karnaugh map into one TikZ Picture,
+% use |xshift| and |yshift|, just as usual n TikZ.
+%
+% \DescribeMacro{xshift} |xshift|\oarg{=\textbf{0}}
+% Shift the Karnaugh map in x-direction within the TikZ picture.
+% \begin{center}
+% |\karnaughmap{4}\karnaughmap[xshift=5cm]{4}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap{4}
+% \karnaughmap[xshift=5cm]{4}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \DescribeMacro{yshift} |yshift|\oarg{=\textbf{0}}
+% Shift the Karnaugh map in x-direction within the TikZ picture.
+% \begin{center}
+% |\karnaughmap{4}\karnaughmap[yshift=5cm]{4}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap{4}
+% \karnaughmap[yshift=5cm]{4}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \section{Examples}% \iffalse TODO: SEC:Examples \fi
+% \subsection{Basic Usage Examples:}% \iffalse TODO: SUBSEC:Basic Examples \fi
+% \begin{center}
+% |\karnaughmap[defaultmap=16,binaryidx,omitnegated=false]{}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[defaultmap=16,binaryidx,omitnegated=false,function={f(a,b,c,d)}]{}
+% \end{tikzpicture}\\
+% \end{center}
+%
+% \begin{center}
+% |\karnaughmap[defaultmap=4,binaryidx,omitnegated=false,color=teal]{}|\\
+% \begin{tikzpicture}[thick]
+% \karnaughmap[defaultmap=4,binaryidx,omitnegated=false,color=teal]{}
+% \end{tikzpicture}\\
+% \end{center}
+%
+%
+% \noindent
+% |\karnaughmap{4}|
+% \begin{center}
+% \begin{tikzpicture}[thick]
+% \karnaughmap{4}
+% \end{tikzpicture}\\
+% \end{center}
+%
+%
+% \subsection{Field coloring}% \iffalse TODO: SUBSEC:Field Coloring \fi
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% |\foreach \x [count=\xi] in {0,1,2,3} {%|\\
+% | \pgfmathparse{-20+30*\xi}%|\\
+% | \karnaughmapcolorfield{2}{\x}{teal!\pgfmathresult}%|\\
+% |}%|\\
+% |\karnaughmap{2}|\\
+% |\end{tikzpicture}|\\
+%
+% \begin{center}
+% \begin{tikzpicture}[thick]
+% \foreach \x [count=\xi] in {0,1,2,3} {%
+% \pgfmathparse{-20+30*\xi}
+% \karnaughmapcolorfield{2}{\x}{teal!\pgfmathresult}%
+% }%
+% \karnaughmap{4}
+% \end{tikzpicture}\\
+% \end{center}
+%
+%
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% |\foreach \x [count=\xi] in {0,1,2,3} {%|\\
+% | \pgfmathparse{-20+30*\xi}%|\\
+% | \karnaughmapcolorfield{3}{\x}{teal!\pgfmathresult}%|\\
+% |}%|\\
+% |\foreach \x [count=\xi] in {4,5,6,7} {%|\\
+% | \pgfmathparse{-20+30*\xi}%|\\
+% | \karnaughmapcolorfield{3}{\x}{purple!\pgfmathresult}%|\\
+% |}%|\\
+% |\karnaughmap{8}|\\
+% |\end{tikzpicture}|\\
+%
+% \begin{center}
+% \begin{tikzpicture}[thick]
+% \foreach \x [count=\xi] in {0,1,2,3} {%
+% \pgfmathparse{-20+30*\xi}%
+% \karnaughmapcolorfield{3}{\x}{teal!\pgfmathresult}%
+% }%
+% \foreach \x [count=\xi] in {4,5,6,7} {%
+% \pgfmathparse{-20+30*\xi}%
+% \karnaughmapcolorfield{3}{\x}{purple!\pgfmathresult}%
+% }%
+% \karnaughmap{8}
+% \end{tikzpicture}\\
+% \end{center}
+%
+%
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% |\foreach \x [count=\xi] in {0,1,2,3} {%|\\
+% | \pgfmathparse{-20+30*\xi}%|\\
+% | \karnaughmapcolorfield{4}{\x}{teal!\pgfmathresult}%|\\
+% |}%|\\
+% |\foreach \x [count=\xi] in {4,5,6,7} {%|\\
+% | \pgfmathparse{-20+30*\xi}%|\\
+% | \karnaughmapcolorfield{4}{\x}{purple!\pgfmathresult}%|\\
+% |}%|\\
+% |\foreach \x [count=\xi] in {8,9,a,b} {%|\\
+% | \pgfmathparse{-20+30*\xi}%|\\
+% | \karnaughmapcolorfield{4}{\x}{olive!\pgfmathresult}%|\\
+% |}%|\\
+% |\foreach \x [count=\xi] in {c,d,e,f} {%|\\
+% | \pgfmathparse{-20+30*\xi}%|\\
+% | \karnaughmapcolorfield{4}{\x}{violet!\pgfmathresult}%|\\
+% |}%|\\
+% |\karnaughmap[defaultmap=16]{}%|\\
+% |\end{tikzpicture}|\\
+%
+% \begin{center}
+% \begin{tikzpicture}[thick]
+% \foreach \x [count=\xi] in {0,1,2,3} {%
+% \pgfmathparse{-20+30*\xi}%
+% \karnaughmapcolorfield{4}{\x}{teal!\pgfmathresult}%
+% }%
+% \foreach \x [count=\xi] in {4,5,6,7} {%
+% \pgfmathparse{-20+30*\xi}%
+% \karnaughmapcolorfield{4}{\x}{purple!\pgfmathresult}%
+% }%
+% \foreach \x [count=\xi] in {8,9,a,b} {%
+% \pgfmathparse{-20+30*\xi}%
+% \karnaughmapcolorfield{4}{\x}{olive!\pgfmathresult}%
+% }%
+% \foreach \x [count=\xi] in {c,d,e,f} {%
+% \pgfmathparse{-20+30*\xi}%
+% \karnaughmapcolorfield{4}{\x}{violet!\pgfmathresult}%
+% }%
+% \karnaughmap[defaultmap=16]{}
+% \end{tikzpicture}\\
+% \end{center}
+%
+%
+% \section{Field Allocation Reference}\iffalse TODO: SEC: Field Alloc Reference \fi
+% This package provides maps with full control up to \emph{4} variables,
+% which is equivalent to a map size of \emph{16} fields.\\
+% For bigger maps, the package provides just basic typesetting,
+% i.e. just the column and row encoding and the, possibly filled matrix.\\
+% However, the biggest map supported yet has 256 fields.\\
+%
+% The reference can be read as follows:
+% the first row contains the value of the rows,
+% the columns are then likewise enumerated.
+% By this procedure, you can check if everything went right (debugging)
+% and got an easy reference.
+%
+% \subsection{2 Variables -- 4 Fields}
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap[variables=ab]{o1 11 }|\\
+% |\end{tikzpicture}|
+%
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=ab]{o1 11 }
+% \end{tikzpicture}
+%
+%
+% \subsection{3 Variables -- 8 Fields}
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap[variables=abc]{o1 11 21 31 }|\\
+% |\end{tikzpicture}|
+%
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=abc]{o1 11 21 31 }
+% \end{tikzpicture}
+%
+%
+% \subsection{4 Variables -- 16 Fields}
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap[variables=abcd]{o123 1123 2123 3123 }|\\
+% |\end{tikzpicture}|
+%
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=abcd]{o123 1123 2123 3123 }
+% \end{tikzpicture}
+%
+%
+% \subsection{5 Variables -- 32 Fields}
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap[variables=abcde]{0000 0001 0010 0011 0100 0101 0110 1111}|\\
+% |\end{tikzpicture}|
+%
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=abcde]{o123 1123 2123 3123 4123 5123 6123 7123}
+% \end{tikzpicture}
+%
+%
+% \subsection{6 Variables -- 64 Fields}
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap[variables=abcdef]{o1234567 11234567 21234567 31234567 |\\
+% | 41234567 51234567 61234567 71234567 }|\\
+% |\end{tikzpicture}|
+%
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=abcdef]{o1234567 11234567 21234567 31234567
+% 41234567 51234567 61234567 71234567 }
+% \end{tikzpicture}
+%
+%
+% \subsection{7 Variables -- 128 Fields}
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap[variables=abcdefg]{o1234567 11234567 21234567 31234567 |\\
+% | 41234567 51234567 61234567 71234567 |\\
+% | 81234567 91234567 a1234567 b1234567 |\\
+% | c1234567 d1234567 e1234567 f1234567 }|\\
+% |\end{tikzpicture}|
+%
+% \hspace*{-4cm}
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=abcdefg]{o1234567 11234567 21234567 31234567
+% 41234567 51234567 61234567 71234567
+% 81234567 91234567 a1234567 b1234567
+% c1234567 d1234567 e1234567 f1234567 }
+% \end{tikzpicture}
+%
+%
+% \subsection{8 Variables -- 256 Fields}
+% \noindent
+% |\begin{tikzpicture}[thick]|\\
+% | \karnaughmap[variables=abcdefg]{o123456789abcdef 1123456789abcdef |\\
+% | 2123456789abcdef 3123456789abcdef |\\
+% | 4123456789abcdef 5123456789abcdef |\\
+% | 6123456789abcdef 7123456789abcdef |\\
+% | 8123456789abcdef 9123456789abcdef |\\
+% | a123456789abcdef b123456789abcdef |\\
+% | c123456789abcdef d123456789abcdef |\\
+% | e123456789abcdef f123456789abcdef }|\\
+% |\end{tikzpicture}|
+%
+% \hspace*{-4cm}
+% \begin{tikzpicture}[thick]
+% \karnaughmap[variables=abcdefg]{o123456789abcdef 1123456789abcdef 2123456789abcdef 3123456789abcdef
+% 4123456789abcdef 5123456789abcdef 6123456789abcdef 7123456789abcdef
+% 8123456789abcdef 9123456789abcdef a123456789abcdef b123456789abcdef
+% c123456789abcdef d123456789abcdef e123456789abcdef f123456789abcdef }
+% \end{tikzpicture}
+%
+%
+%
+%
+%
+%
+% \section{Macros for Internal Usage}% \iffalse TODO: SEC:Macros for Internal Usage \fi
+% These macros are not intended to be used by the user,
+% rather these are auxiliary functions invoked by the main macro |\karnaughmap{x}|.
+%
+% Nevertheless, for documentation these macros are described here briefly.
+%
+%
+% \StopEventually{}
+%
+% \section{Implementation}% \iffalse TODO: SEC:Implementation \fi
+%
+% \subsection{Load Dependencies}% \iffalse TODO: SUBSEC:Load Dependencies \fi
+% \begin{macrocode}
+\RequirePackage{tikz}
+\RequirePackage{xkeyval}
+\RequirePackage{ifthen}
+\RequirePackage{xstring}
+% \end{macrocode}
+%
+% \subsection{Allocate Counters}% \iffalse TODO: SUBSEC:Allocate Counters \fi
+% \begin{macrocode}
+\newcounter{karnaughmapIdxCounter}
+\newcounter{karnaughmapStrCounter}
+\setcounter{karnaughmapIdxCounter}{0}
+\setcounter{karnaughmapStrCounter}{0}
+% \end{macrocode}
+%
+% \subsection{Key-Val Interface}% \iffalse TODO: SUBSEC:Key-Val Interface \fi
+% \paragraph{Switches}
+% Simple switches are used to control basic layout options of the Karnaugh map.\\
+%
+% These boolean switches control if specific entries
+% -- i.e. zeros, ones, and don't cares -- are printed or not (omitted).
+% \begin{macrocode}
+\define@boolkeys{karnaughmap}{omitzeros, omitones, omitdontcares}[true]
+% \end{macrocode}
+%
+% These boolean switches control the layout of the Karnaugh map.
+% The |omitbinaries| switch is used to control if binary encoding is typeset left and on top of the Karnaugh map.
+% The |omitvariables| switch is used to control if the Karnaugh map is labeled with the variables.
+% The |omitidx| switch controls the typesetting of decimal indices within the cells of the Karnaugh map.
+% The |binaryidx| switch controls whether the indices are decimal or binary.
+% The |omitnegated| switch controls whether the negated variable labels are typeset as well.
+% \begin{macrocode}
+\define@boolkeys{karnaughmap}{omitbinaries, omitvariables, omitidx, binaryidx, omitnegated}[true]
+% \end{macrocode}
+%
+% These boolean switches control the behavior of the highlighting function.
+%
+% \begin{macrocode}
+\define@boolkey{karnaughmap}{outline}[true]{\setkeys{karnaughmap}{fill=false}}
+\define@boolkeys{karnaughmap}{fill}[true]
+\define@cmdkey{karnaughmap}{opacity}[0.5]{}
+% \end{macrocode}
+%
+% \paragraph{Customizations}
+% In contrast to the boolean switches these keys are used to customize the Karnaugh map.\\
+%
+% This key controls the default size of the Karnaugh map.
+% It is set to 16, i.e. a 4 variable map is typeset.
+% \begin{macrocode}
+\define@cmdkey{karnaughmap}{defaultmap}[16]{}
+% \end{macrocode}
+%
+% This key controls the Karnaugh map function label.
+% The default is 'z'.
+% \begin{macrocode}
+\define@cmdkey{karnaughmap}{function}[z]{}
+% \end{macrocode}
+%
+% This key controls the variables.
+% Provide the variables as a string.
+% Maybe more control over variables will be added in a later version.
+% The default is 'abcd'
+% \begin{macrocode}
+\define@cmdkey{karnaughmap}{variables}[abcd]{}
+% \end{macrocode}
+%
+% Define the standard "`Don't Care"' character.
+% The default is '*'.
+% \begin{macrocode}
+\define@cmdkey{karnaughmap}{dontcare}[*]{}
+% \end{macrocode}
+%
+% Define the color.
+% For desired functionality both the draw and color have to be set.
+% \begin{macrocode}
+\define@key{karnaughmap}{color}[black]{%
+ \colorlet{karnaughmapColor}{#1}%
+ \colorlet{karnaughmapMapColor}{#1}}
+% \end{macrocode}
+%
+% Define the draw color, i.e. the color of the map itself.
+% Default is the same as color.
+% \begin{macrocode}
+\define@key{karnaughmap}{draw}[karnaughmapColor]{\colorlet{karnaughmapMapColor}{#1}}
+% \end{macrocode}
+%
+% Define the label color.
+% By setting the color only, the draw remains unchanged.
+% \begin{macrocode}
+\define@key{karnaughmap}{labelcolor}[karnaughmapColor]{%
+ \colorlet{karnaughmapColor}{#1}}
+% \end{macrocode}
+%
+% Define the shifts.
+% \begin{macrocode}
+\define@cmdkeys{karnaughmap}{xshift,yshift}[0]
+% \end{macrocode}
+%
+% \paragraph{Set Key Defaults}
+% The default is a map with full information,
+% i.e. binary and variable labels as well as decimal indices.
+% The zeros are omitted by default.\\
+%
+% \begin{macro}{\setkarnaughmap}
+% Simple interface function.
+% \begin{macrocode}
+\newcommand{\setkarnaughmap}[1][]{%
+\ifthenelse{\equal{#1}{}}{%
+% \end{macrocode}
+%
+% Change the default behavior by uncommenting the specific key.
+% \begin{macrocode}
+\setkeys{karnaughmap}{%
+% \end{macrocode}
+% omitones,
+% omitdontcares,
+% omitbinaries,
+% omitvariables,
+% omitidx,
+% binaryidx
+% \begin{macrocode}
+omitzeros, omitnegated}
+% \end{macrocode}
+%
+% The key-definition defaults are assigned here.
+% See the definition of the keys above for the defaults.
+% \begin{macrocode}
+\setkeys{karnaughmap}{defaultmap, function, variables, dontcare, color, draw, labelcolor, xshift, yshift}
+% \end{macrocode}
+%
+% If the optional input is provided set the keys accordingly.
+% \begin{macrocode}
+}{
+\setkeys{karnaughmap}{#1}
+}}
+% \end{macrocode}
+% \end{macro}
+%
+% Assign the defaults during style file call.
+% \begin{macrocode}
+\setkarnaughmap
+% \end{macrocode}
+%
+%
+%
+% \subsection{Auxiliary Functions}% \iffalse TODO: SUBSEC:Auxiliary Functions \fi
+% These function are called by the main function to facilitate code execution.
+%
+% \begin{macro}{\karnaughmapPrintIndex}
+% |\karnaughmapPrintIndex|\oarg{numBits}
+%
+% This macro typesets the indices inside the cells.
+% If the switch |binaryidx| is true binary instead of decimal indices are typeset.
+% The number provided as optional argument is used to determine the number of bits used.
+%
+% Every time the macro is called, it prints the counter value
+% of counter |karnaughmapIdxCounter| and increments the counter thereafter.
+%
+% The size of the indices is very small (scriptsize).
+% \begin{macrocode}
+\newcommand{\karnaughmapPrintIndex}[1][4]{%
+\scriptsize%
+\ifKV@karnaughmap@binaryidx
+% \end{macrocode}
+%
+% Typeset binary indices.
+% \begin{macrocode}
+ \ifthenelse{\equal{#1}{2}}{%
+ \ifcase\value{karnaughmapIdxCounter}%
+ 00\or 01\or 10\or 11
+ \fi
+ }{}%
+ \ifthenelse{\equal{#1}{3}}{%
+ \ifcase\value{karnaughmapIdxCounter}%
+ 000\or 001\or 010\or 011\or 100\or 101\or 110\or 111
+ \fi
+ }{}%
+ \ifthenelse{\equal{#1}{4}}{%
+ \ifcase\value{karnaughmapIdxCounter}%
+ 0000\or 0001\or 0010\or 0011\or 0100\or 0101\or 0110\or 0111\or
+ 1000\or 1001\or 1010\or 1011\or 1100\or 1101\or 1110\or 1111
+ \fi
+ }{}%
+\else
+% \end{macrocode}
+%
+% Typeset decimal indices.
+% \begin{macrocode}
+$\thekarnaughmapIdxCounter$%
+\fi
+\stepcounter{karnaughmapIdxCounter}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\karnaughmapPrintValue}
+% |\karnaughmapPrintValue|\marg{inputstring}
+%
+% This macro typesets the entries of the Karnaugh map.
+% Every time the macro is called, it increments the counter |karnaughmapStrCounter|
+% and prints the character at position of the counter value of its mandatory input.
+% \begin{macrocode}
+\newcommand{\karnaughmapPrintValue}[2][]{%
+ \stepcounter{karnaughmapStrCounter}%
+ \StrChar{#2}{\thekarnaughmapStrCounter}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\karnaughmapPrintCellContents}
+% |\karnaughmapPrintCellContents|\oarg{node-position}\marg{x-offset}\marg{y-offset}\\
+% \marg{size}\marg{rowsize}\marg{function}
+%
+% This macro is used to provide the positions of the cells of the map,
+% as they are not straight forward (e.g. order is 0-1-3-2 for first column of 4x4 maps).
+% It takes 5 mandatory and one optional arguments as specified above.
+%
+% By default, it evaluates |function| as contents of a node at the top left
+% of each cell of a Karnaugh map of size |size| with |rowsize| rows.
+% By providing the bias (x- and y-offset), the provided point is shifted accordingly.
+% The alignment of the node is controlled by the optional argument.
+% \begin{macrocode}
+\newcommand{\karnaughmapPrintCellContents}[6][]{%
+% \end{macrocode}
+% If map is 2x2, the order is pretty simple:\\
+% 0 2 \\
+% 1 3
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{4}}{%
+ \def\karnaughmapPCCColumnSpecifier{++( 0,-1) node[#1] {#6}}%
+ \path (0, #5)
+ ++(#2,#3) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+1) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ;
+}{}
+% \end{macrocode}
+% If map is 2x4, the order is more complex:\\
+% 0 2 6 4 \\
+% 1 3 7 5
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{8}}{%
+ \def\karnaughmapPCCColumnSpecifier{++( 0,-1) node[#1] {#6}}%
+ \path (0, #5)
+ ++(#2,#3) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+1) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+1) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+1) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ;
+}{}
+% \end{macrocode}
+% If map is 4x4, the same ordering as before is present in both x- and y-direction:\\
+% 0 4 12 8 \\
+% 1 5 13 9 \\
+% 3 7 15 11 \\
+% 2 6 14 10
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{16}}{%
+ \def\karnaughmapPCCColumnSpecifier{%
+ ++( 0,-1) node[#1] {#6}
+ ++( 0,-2) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ }%
+ \path (0, #5)
+ ++(#2,#3) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ;
+}{}
+% \end{macrocode}
+%
+% If map is 4x8, the ordering as before has to be extended in x-direction,
+% but from the middle in reverse order:\\
+% 0 4 12 8 24 28 20 16 \\
+% 1 5 13 9 25 29 21 17 \\
+% 3 7 15 11 27 31 23 29 \\
+% 2 6 14 10 26 30 22 18
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{32}}{%
+ \def\karnaughmapPCCColumnSpecifier{%
+ ++( 0,-1) node[#1] {#6}
+ ++( 0,-2) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ }%
+ \path (0, #5)
+ ++(#2,#3) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+5,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-2,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+2) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ;
+}{}
+% \end{macrocode}
+%
+% If map is 8x8, the ordering as before has to be extended in y-direction, too.\\
+% 0 8 24 16 48 56 40 32 \\
+% 1 9 25 17 49 57 41 33 \\
+% 3 11 27 19 51 59 43 35 \\
+% 2 10 26 18 50 58 42 34 \\
+% 6 14 30 22 54 62 46 38 \\
+% 7 15 31 23 55 63 47 39 \\
+% 5 13 29 21 53 61 45 37 \\
+% 4 12 28 20 52 60 44 36
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{64}}{%
+ \def\karnaughmapPCCColumnSpecifier{%
+ ++( 0,-1) node[#1] {#6}
+ ++( 0,-2) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ ++( 0,-5) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ ++( 0,+2) node[#1] {#6}
+ ++( 0,-1) node[#1] {#6}
+ }%
+ \path (0, #5)
+ ++(#2,#3) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+5,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-2,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ;
+}{}
+% \end{macrocode}
+%
+% If map is 8x16, the ordering is:\\
+% 0 8 24 16 48 56 40 32 \\
+% 1 9 25 17 49 57 41 33 \\
+% 3 11 27 19 51 59 43 35 \\
+% 2 10 26 18 50 58 42 34 \\
+% 6 14 30 22 54 62 46 38 \\
+% 7 15 31 23 55 63 47 39 \\
+% 5 13 29 21 53 61 45 37 \\
+% 4 12 28 20 52 60 44 36
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{128}}{%
+ \def\karnaughmapPCCColumnSpecifier{%
+ ++( 0,-1) node[#1] {#6}
+ ++( 0,-2) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ ++( 0,-5) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ ++( 0,+2) node[#1] {#6}
+ ++( 0,-1) node[#1] {#6}
+ }%
+ \path (0, #5)
+ ++(#2,#3) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+5,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-2,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+10,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-2,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-5,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+5) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ;
+}{}
+% \end{macrocode}
+%
+% If map is 16x16, the ordering is:\\
+% 0 8 24 16 48 56 40 32 \\
+% 1 9 25 17 49 57 41 33 \\
+% 3 11 27 19 51 59 43 35 \\
+% 2 10 26 18 50 58 42 34 \\
+% 6 14 30 22 54 62 46 38 \\
+% 7 15 31 23 55 63 47 39 \\
+% 5 13 29 21 53 61 45 37 \\
+% 4 12 28 20 52 60 44 36
+% \begin{macrocode}
+\ifthenelse{\equal{#4}{256}}{%
+ \def\karnaughmapPCCColumnSpecifier{%
+ ++( 0,-1) node[#1] {#6}
+ ++( 0,-2) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ ++( 0,-5) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ ++( 0,+2) node[#1] {#6}
+ ++( 0,-1) node[#1] {#6}
+
+ ++( 0,-10) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ ++( 0,+2) node[#1] {#6}
+ ++( 0,-1) node[#1] {#6}
+ ++( 0,+5) node[#1] {#6}
+ ++( 0,-1) node[#1] {#6}
+ ++( 0,-2) node[#1] {#6}
+ ++( 0,+1) node[#1] {#6}
+ }%
+ \path (0, #5)
+ ++(#2,#3) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+5,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-2,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+10,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-2,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-5,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(+2,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ++(-1,+10) node[#1] {#6}
+ \karnaughmapPCCColumnSpecifier
+ ;
+}{}
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+% \begin{macro}{\karnaughmapHighlightField}
+% Macro that defines the highlighting.
+% |\karnaughmapHighlightField|\oarg{key=value}\marg{coordinates}\marg{color name}
+%
+%
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\karnaughmapHighlightField}[3][]{%
+\ifKV@karnaughmap@fill
+ \path[fill=#3,opacity=\cmdKV@karnaughmap@opacity,#1] (#2) rectangle ++(1,1);%
+\fi
+\ifKV@karnaughmap@outline
+ \draw[#3,#1] (#2) ++ (0.1,0.1) rectangle ++(0.8,0.8);%
+\fi
+}
+% \end{macrocode}
+% \begin{macro}{\karnaughmapShadeMapfieldTWO}
+% Macro to shade square two input karnaugh map fields.\\
+% |\karnaughmapShadeMapfieldTWO|\oarg{key=value}\marg{decimal field number}\marg{color name}
+%
+% Optional macro is used as key-val interface for option processing,
+% mandatory ones specify the color used for highlighting and
+% the fields that are to be highlighted as decimal integers from $1$ to $2^{\textrm{map size}}-1$.
+% \begin{macrocode}
+\newcommand{\karnaughmapShadeMapfieldTWO}[3][]{%
+\begin{scope}[scale=1]
+ \ifthenelse{\equal{#2}{0}}{\karnaughmapHighlightField[#1]{0,1}{#3}}{}%
+ \ifthenelse{\equal{#2}{1}}{\karnaughmapHighlightField[#1]{0,0}{#3}}{}%
+ \ifthenelse{\equal{#2}{2}}{\karnaughmapHighlightField[#1]{1,1}{#3}}{}%
+ \ifthenelse{\equal{#2}{3}}{\karnaughmapHighlightField[#1]{1,0}{#3}}{}%
+\end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\karnaughmapShadeMapfieldTHREE}
+% Macro to shade three input karnaugh map fields.\\
+% |\karnaughmapShadeMapfieldTHREE|\oarg{key=value}\marg{decimal field number}\marg{color name}
+%
+% Optional macro is used as key-val interface for option processing,
+% mandatory ones specify the color used for highlighting and
+% the fields that are to be highlighted as decimal integers from $1$ to $2^{\textrm{map size}}-1$.
+% \begin{macrocode}
+\newcommand{\karnaughmapShadeMapfieldTHREE}[3][]{%
+\begin{scope}[scale=1]
+ \ifthenelse{\equal{#2}{0}}{\karnaughmapHighlightField[#1]{0,1}{#3}}{}%
+ \ifthenelse{\equal{#2}{1}}{\karnaughmapHighlightField[#1]{0,0}{#3}}{}%
+ \ifthenelse{\equal{#2}{2}}{\karnaughmapHighlightField[#1]{1,1}{#3}}{}%
+ \ifthenelse{\equal{#2}{3}}{\karnaughmapHighlightField[#1]{1,0}{#3}}{}%
+ \ifthenelse{\equal{#2}{4}}{\karnaughmapHighlightField[#1]{3,1}{#3}}{}%
+ \ifthenelse{\equal{#2}{5}}{\karnaughmapHighlightField[#1]{3,0}{#3}}{}%
+ \ifthenelse{\equal{#2}{6}}{\karnaughmapHighlightField[#1]{2,1}{#3}}{}%
+ \ifthenelse{\equal{#2}{7}}{\karnaughmapHighlightField[#1]{2,0}{#3}}{}%
+\end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\karnaughmapShadeMapfieldFOUR}
+% Macro to shade square four input karnaugh map fields.\\
+% |\karnaughmapShadeMapfieldFOUR|\oarg{key=value}\marg{decimal field number}\marg{color name}
+%
+% Optional macro is used as key-val interface for option processing,
+% mandatory ones specify the color used for highlighting and
+% the fields that are to be highlighted as decimal integers from $1$ to $2^{\textrm{map size}}-1$.
+% \begin{macrocode}
+\newcommand{\karnaughmapShadeMapfieldFOUR}[3][]{%
+\begin{scope}[scale=1]%
+% \end{macrocode}
+% 1st column
+% \begin{macrocode}
+\ifthenelse{\equal{#2}{0}}{\karnaughmapHighlightField[#1]{0,3}{#3}}{}%
+\ifthenelse{\equal{#2}{1}}{\karnaughmapHighlightField[#1]{0,2}{#3}}{}%
+\ifthenelse{\equal{#2}{2}}{\karnaughmapHighlightField[#1]{0,0}{#3}}{}%
+\ifthenelse{\equal{#2}{3}}{\karnaughmapHighlightField[#1]{0,1}{#3}}{}%
+% \end{macrocode}
+% 2nd column
+% \begin{macrocode}
+\ifthenelse{\equal{#2}{4}}{\karnaughmapHighlightField[#1]{1,3}{#3}}{}%
+\ifthenelse{\equal{#2}{5}}{\karnaughmapHighlightField[#1]{1,2}{#3}}{}%
+\ifthenelse{\equal{#2}{6}}{\karnaughmapHighlightField[#1]{1,0}{#3}}{}%
+\ifthenelse{\equal{#2}{7}}{\karnaughmapHighlightField[#1]{1,1}{#3}}{}%
+% \end{macrocode}
+% 4th column
+% \begin{macrocode}
+\ifthenelse{\equal{#2}{8}}{\karnaughmapHighlightField[#1]{3,3}{#3}}{}%
+\ifthenelse{\equal{#2}{9}}{\karnaughmapHighlightField[#1]{3,2}{#3}}{}%
+\ifthenelse{\equal{#2}{a}\OR\equal{#2}{A}}{\karnaughmapHighlightField[#1]{3,0}{#3}}{}%
+\ifthenelse{\equal{#2}{b}\OR\equal{#2}{B}}{\karnaughmapHighlightField[#1]{3,1}{#3}}{}%
+% \end{macrocode}
+% 3rd column
+% \begin{macrocode}
+\ifthenelse{\equal{#2}{c}\OR\equal{#2}{C}}{\karnaughmapHighlightField[#1]{2,3}{#3}}{}%
+\ifthenelse{\equal{#2}{d}\OR\equal{#2}{D}}{\karnaughmapHighlightField[#1]{2,2}{#3}}{}%
+\ifthenelse{\equal{#2}{e}\OR\equal{#2}{E}}{\karnaughmapHighlightField[#1]{2,0}{#3}}{}%
+\ifthenelse{\equal{#2}{f}\OR\equal{#2}{F}}{\karnaughmapHighlightField[#1]{2,1}{#3}}{}%
+\end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Main Functions}% \iffalse TODO: SUBSEC:Main Functions \fi
+%
+% Here come the main functions to typeset the map
+% and to mark certain cells (not implemented yet).
+%
+% \begin{macro}{\karnaughmap}
+% The main macro takes one mandatory and one optional argument:\\
+% \oarg{key=value}\marg{inputstring}.
+%
+% The optional is used as key-val inteface,
+% the mandatory is empty or holds the entry-pattern (inputstring)
+% according to the corresponding ordered truth table
+% of the desired logic function.
+% \begin{macrocode}
+\newcommand{\karnaughmap}[2][]{%
+% \end{macrocode}
+%
+% If the optional input is not empty, assign the key-val.
+% \begin{macrocode}
+\ifthenelse{\equal{#1}{}}{}{\setkeys{karnaughmap}{#1}}
+% \end{macrocode}
+%
+% For easy access store the mandatory argument as variable |\karnaughmapCellEntries|.
+% \begin{macrocode}
+\def\karnaughmapCellEntries{#2}%
+% \end{macrocode}
+%
+% Check length of mandatory argument and store the result in |\karnaughmapSize|.
+%
+% If the mandatory argument is empty,
+% use the default map size provided by the key-val interface (|defaultmap| key).
+% \begin{macrocode}
+\ifthenelse{\equal{#2}{}}{%
+ \def\karnaughmapSize{\cmdKV@karnaughmap@defaultmap}
+}{%
+% \end{macrocode}
+%
+% Else, determine the length of the input string to determine the map size.
+%
+% Before calculating the string length, remove any blanks in the input string.
+% Usage of blanks in the input string can increase readability,
+% e.g. when groups of four are provided.
+% \begin{macrocode}
+\IfSubStr{\karnaughmapCellEntries}{ }{%
+\StrDel[0]{\karnaughmapCellEntries}{ }[\karnaughmapCellEntries]
+}{}
+% \end{macrocode}
+%
+% Now, calculate the string length.
+% This is the old version.
+% |\StrLen{#2}[\karnaughmapSize]%|
+% \begin{macrocode}
+ \StrLen{\karnaughmapCellEntries}[\karnaughmapSize]%
+% \end{macrocode}
+%
+% If the input is a scalar number, i.e. it is < 1000 (decimal),
+% it is treated as number and is used to determine the map size.
+% In this case adapt the variable |\karnaughmapCellEntries| accordingly.
+% |\ifthenelse{\equal{\karnaughmapSize}{1}}{%|
+% \begin{macrocode}
+ \ifthenelse{\karnaughmapSize < 4}{%
+ \def\karnaughmapSize{#2}\def\karnaughmapCellEntries{}}{}%
+}
+% \end{macrocode}
+%
+%
+% Parse the input string and omit printing of '0', '1', or '*' entries
+% if the switches say so.
+% \begin{macrocode}
+\ifKV@karnaughmap@omitzeros
+ \StrSubstitute[0]{\karnaughmapCellEntries}{0}{ }[\karnaughmapCellEntries]
+\fi
+\ifKV@karnaughmap@omitones
+ \StrSubstitute[0]{\karnaughmapCellEntries}{1}{ }[\karnaughmapCellEntries]
+\fi
+\ifKV@karnaughmap@omitdontcares
+ \StrSubstitute[0]{\karnaughmapCellEntries}{\cmdKV@karnaughmap@dontcare}{ }[\karnaughmapCellEntries]
+\fi
+% \end{macrocode}
+%
+% Initialize internal counters.
+% \begin{macrocode}
+\setcounter{karnaughmapIdxCounter}{0}
+\setcounter{karnaughmapStrCounter}{0}
+% \end{macrocode}
+%
+% Extract the map variables and alloc row and col sizes.
+% In addition, store the number of variables in variable |\karnaughmapNumVar|.
+% \begin{macrocode}
+\ifthenelse{\karnaughmapSize = 4}{%
+ \StrChar{\cmdKV@karnaughmap@variables}{1}[\karnaughmapVarLabelA]
+ \def\karnaughmapVarLabelB{}
+ \StrChar{\cmdKV@karnaughmap@variables}{2}[\karnaughmapVarLabelC]
+ \def\karnaughmapVarLabelD{}
+ \def\karnaughmapNumRow{2}
+ \def\karnaughmapNumCol{2}
+ \def\karnaughmapNumVar{2}
+}{}
+\ifthenelse{\karnaughmapSize = 8}{%
+ \StrChar{\cmdKV@karnaughmap@variables}{1}[\karnaughmapVarLabelA]
+ \StrChar{\cmdKV@karnaughmap@variables}{2}[\karnaughmapVarLabelB]
+ \StrChar{\cmdKV@karnaughmap@variables}{3}[\karnaughmapVarLabelC]
+ \def\karnaughmapVarLabelD{}
+ \def\karnaughmapNumRow{2}
+ \def\karnaughmapNumCol{4}
+ \def\karnaughmapNumVar{3}
+}{}
+\ifthenelse{\karnaughmapSize = 16}{%
+ \StrChar{\cmdKV@karnaughmap@variables}{1}[\karnaughmapVarLabelA]
+ \StrChar{\cmdKV@karnaughmap@variables}{2}[\karnaughmapVarLabelB]
+ \StrChar{\cmdKV@karnaughmap@variables}{3}[\karnaughmapVarLabelC]
+ \StrChar{\cmdKV@karnaughmap@variables}{4}[\karnaughmapVarLabelD]
+ \def\karnaughmapNumRow{4}
+ \def\karnaughmapNumCol{4}
+ \def\karnaughmapNumVar{4}
+}{}
+% \end{macrocode}
+%
+% The bigger karnaugh maps, i.e. 32, 64, 128 and 512, lack finer control possibilities.
+% Rather, the variables are set such that they can be used as map descriptors,
+% but not for some fancy stuff like indicating the variable blocks.
+% This means, that we force to omit printing of the the indices (omitidx=true)
+% and we force to omit printing of the variables.\\
+% For the variable macros to work, we set the B and D macro to empty
+% and put the remaining variables in the A for column and C for row variables.
+% \begin{macrocode}
+\ifthenelse{\karnaughmapSize = 32}{%
+ \setkeys{karnaughmap}{omitidx=true, omitvariables=true}
+ \StrMid{\cmdKV@karnaughmap@variables}{1}{3}[\karnaughmapVarLabelA]
+ \def\karnaughmapVarLabelB{}
+ \StrMid{\cmdKV@karnaughmap@variables}{4}{5}[\karnaughmapVarLabelC]
+ \def\karnaughmapVarLabelD{}
+ \def\karnaughmapNumRow{4}
+ \def\karnaughmapNumCol{8}
+ \def\karnaughmapNumVar{5}
+}{}
+\ifthenelse{\karnaughmapSize = 64}{%
+ \setkeys{karnaughmap}{omitidx=true, omitvariables=true}
+ \StrMid{\cmdKV@karnaughmap@variables}{1}{3}[\karnaughmapVarLabelA]
+ \def\karnaughmapVarLabelB{}
+ \StrMid{\cmdKV@karnaughmap@variables}{4}{6}[\karnaughmapVarLabelC]
+ \def\karnaughmapVarLabelD{}
+ \def\karnaughmapNumRow{8}
+ \def\karnaughmapNumCol{8}
+ \def\karnaughmapNumVar{6}
+}{}
+\ifthenelse{\karnaughmapSize = 128}{%
+ \setkeys{karnaughmap}{omitidx=true, omitvariables=true}
+ \StrMid{\cmdKV@karnaughmap@variables}{1}{4}[\karnaughmapVarLabelA]
+ \def\karnaughmapVarLabelB{}
+ \StrMid{\cmdKV@karnaughmap@variables}{5}{7}[\karnaughmapVarLabelC]
+ \def\karnaughmapVarLabelD{}
+ \def\karnaughmapNumRow{8}
+ \def\karnaughmapNumCol{16}
+ \def\karnaughmapNumVar{7}
+}{}
+\ifthenelse{\karnaughmapSize = 256}{%
+ \setkeys{karnaughmap}{omitidx=true, omitvariables=true}
+ \StrMid{\cmdKV@karnaughmap@variables}{1}{4}[\karnaughmapVarLabelA]
+ \def\karnaughmapVarLabelB{}
+ \StrMid{\cmdKV@karnaughmap@variables}{5}{8}[\karnaughmapVarLabelC]
+ \def\karnaughmapVarLabelD{}
+ \def\karnaughmapNumRow{16}
+ \def\karnaughmapNumCol{16}
+ \def\karnaughmapNumVar{8}
+}{}
+% \end{macrocode}
+%
+% \paragraph{Basic table} Typeset the basic table.
+%
+% Embed the draw commands in a scope environment for style control.
+% \begin{macrocode}
+ \begin{scope}[xshift=\cmdKV@karnaughmap@xshift,
+ yshift=\cmdKV@karnaughmap@yshift,
+ color=karnaughmapColor,
+ draw=karnaughmapMapColor ]
+% \end{macrocode}
+%
+% Draw table boundaries.
+% \begin{macrocode}
+ \draw (0,0) rectangle (\karnaughmapNumCol, \karnaughmapNumRow);
+% \end{macrocode}
+%
+% Draw column seperators.
+% \begin{macrocode}
+ \foreach \x in {1,2,...,\karnaughmapNumCol} {%
+ \ifthenelse{\equal{\x}{1}}{}{%
+ \draw (\x-1,0) -- ++(0,\karnaughmapNumRow);%
+ }%
+ }%
+% \end{macrocode}
+%
+% Draw row seperators.
+% \begin{macrocode}
+ \foreach \x in {1,2,...,\karnaughmapNumRow} {%
+ \ifthenelse{\equal{\x}{1}}{}{%
+ \draw (0,\x-1) -- ++(\karnaughmapNumCol,0);%
+ }%
+ }%
+% \end{macrocode}
+%
+% Draw map labels;
+% Diagonal line and anchor first.
+% \begin{macrocode}
+\draw (0,\karnaughmapNumRow) -- ++(-0.4,0.4) coordinate(identifier)
+ -- ++(-0.4,0.4)
+% \end{macrocode}
+%
+% Function label at the top of the map,
+% if the function label is non-empty the label is followed by a colon.
+% \begin{macrocode}
+ node[yshift=7.5,xshift=-3.5,right] {%
+ \ifthenelse{\equal{\cmdKV@karnaughmap@function}{}}{}{$\cmdKV@karnaughmap@function\colon$}};
+% \end{macrocode}
+%
+% Variable label right and below the diagonal.
+% \begin{macrocode}
+ \path (identifier) node[above right, xshift=-2.5] {$\karnaughmapVarLabelA\karnaughmapVarLabelB$};
+ \path (identifier) node[below left, yshift=0.5] {$\karnaughmapVarLabelC\karnaughmapVarLabelD$};
+% \end{macrocode}
+%
+% Typeset binaries if |omitbinaries| switch is false;
+% \begin{macrocode}
+\ifKV@karnaughmap@omitbinaries
+\else
+% \end{macrocode}
+%
+% 2 columns: anchors are above the top row |\karnaughmapNumRow|
+% and in the middle of the cells at 0.5 and 1.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumCol}{2}}{%
+ \foreach \pos/\lab in {0.5/0, 1.5/1} {%
+ \path (\pos, \karnaughmapNumRow) node[above] {$\lab$};%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% 4 columns: anchors are above the top row |\karnaughmapNumRow|
+% and in the middle of the cells at 0.5 ... 3.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumCol}{4}}{%
+ \foreach \pos/\lab in {0.5/00, 1.5/01, 2.5/11, 3.5/10} {%
+ \path (\pos, \karnaughmapNumRow) node[above] {$\lab$};%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% 8 columns: anchors are above the top row |\karnaughmapNumRow|
+% and in the middle of the cells at 0.5 ... 7.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumCol}{8}}{%
+ \foreach \pos/\lab in {0.5/000, 1.5/001, 2.5/011, 3.5/010, 4.5/110, 5.5/111, 6.5/101, 7.5/100} {%
+ \path (\pos, \karnaughmapNumRow) node[above] {$\lab$};%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% 16 columns: anchors are above the top row |\karnaughmapNumRow|
+% and in the middle of the cells at 0.5 ... 15.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumCol}{16}}{%
+ \foreach \pos/\lab in {0.5/0000, 1.5/0001, 2.5/0011, 3.5/0010, 4.5/0110, 5.5/0111, 6.5/0101, 7.5/0100,
+ 8.5/1100, 9.5/1101,10.5/1111,11.5/1110,12.5/1010,13.5/1011,14.5/1001,15.5/1000} {%
+ \path (\pos, \karnaughmapNumRow) node[above] {$\lab$};%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% 2 rows: anchors are left of the first column with coordinate (0, x)
+% and in the middle of the cells at 0.5 and 1.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumRow}{2}}{%
+ \foreach \pos/\lab in {0.5/0, 1.5/1} {%
+ \path (0, \karnaughmapNumRow-\pos) node[left] {$\lab$};%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% 4 rows: anchors are left of the first column with coordinate (0, x)
+% and in the middle of the cells at 0.5 ... 3.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumRow}{4}}{%
+ \foreach \pos/\lab in {0.5/00, 1.5/01, 2.5/11, 3.5/10} {%
+ \path (0, \karnaughmapNumRow-\pos) node[left] {$\lab$};%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% 8 rows: anchors are left of the first column with coordinate (0, x)
+% and in the middle of the cells at 0.5 ... 7.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumRow}{8}}{%
+ \foreach \pos/\lab in {0.5/000, 1.5/001, 2.5/011, 3.5/010, 4.5/110, 5.5/111, 6.5/101, 7.5/100} {%
+ \path (-0.125, \karnaughmapNumRow-\pos) node[left] {$\lab$};%
+ }%
+ }{}%
+% \end{macrocode}
+%
+% 16 rows: anchors are left of the first column with coordinate (0, x)
+% and in the middle of the cells at 0.5 ... 15.5.
+% \begin{macrocode}
+ \ifthenelse{\equal{\karnaughmapNumRow}{16}}{%
+ \foreach \pos/\lab in {0.5/0000, 1.5/0001, 2.5/0011, 3.5/0010, 4.5/0110, 5.5/0111, 6.5/0101, 7.5/0100,
+ 8.5/1100, 9.5/1101,10.5/1111,11.5/1110,12.5/1010,13.5/1011,14.5/1001,15.5/1000} {%
+ \path (-0.1875, \karnaughmapNumRow-\pos) node[left] {$\lab$};%
+ }%
+ }{}%
+\fi
+% \end{macrocode}
+%
+% Typeset binary labels above and left of the map if switch |omitbinaries| is false.
+%
+% Set base bias of variable labels;
+% the top and left bias is modified depending on if the binary labels are set or not.
+% \begin{macrocode}
+\def\karnaughmapVariableBaseBias{0.2}
+\ifKV@karnaughmap@omitbinaries
+% \end{macrocode}
+%
+% Set bias to 0 if binaries are not typeset.
+% \begin{macrocode}
+ \def\karnaughmapVariableTopBias{0}
+ \def\karnaughmapVariableLeftBias{0}
+\else
+% \end{macrocode}
+%
+% Set bias accordingly if binaries have 1 or 2 characters.
+% \begin{macrocode}
+ \def\karnaughmapVariableTopBias{0.3}
+ \ifthenelse{\equal{\karnaughmapVarLabelD}{}}{%
+ \def\karnaughmapVariableLeftBias{0.2}
+ }{%
+ \def\karnaughmapVariableLeftBias{0.4}
+ }
+\fi
+% \end{macrocode}
+%
+% Typeset the variable labels around the map if switch |omitvariables| is false.
+% \begin{macrocode}
+\ifKV@karnaughmap@omitvariables
+\else
+ \ifthenelse{\equal{\karnaughmapVarLabelA}{}}{%
+ }{%
+ \ifthenelse{\equal{\karnaughmapVarLabelB}{}}{%
+ \draw (1.1, \karnaughmapNumRow + \karnaughmapVariableBaseBias + \karnaughmapVariableTopBias)
+ -- node[above] {$\karnaughmapVarLabelA$} ++(0.8, 0);
+ \ifKV@karnaughmap@omitnegated
+ \else
+ \draw (0.1, \karnaughmapNumRow + \karnaughmapVariableBaseBias + \karnaughmapVariableTopBias)
+ -- node[above] {$\overline{\karnaughmapVarLabelA}$} ++(0.8, 0);
+ \fi
+ }{%
+ \draw (2.1, \karnaughmapNumRow + \karnaughmapVariableBaseBias + \karnaughmapVariableTopBias)
+ -- node[above] {$\karnaughmapVarLabelA$} ++(1.8, 0);
+ \draw (1.1, -\karnaughmapVariableBaseBias)
+ -- node[below] {$\karnaughmapVarLabelB$} ++(1.8, 0);
+ \ifKV@karnaughmap@omitnegated
+ \else
+ \draw (0.1, \karnaughmapNumRow + \karnaughmapVariableBaseBias + \karnaughmapVariableTopBias)
+ -- node[above] {$\overline{\karnaughmapVarLabelA}$} ++(1.8, 0);
+ \draw (0.1, -\karnaughmapVariableBaseBias)
+ -- node[below] {$\overline{\karnaughmapVarLabelB}$} ++(0.8, 0);
+ \draw (3.1, -\karnaughmapVariableBaseBias)
+ -- node[below] {$\overline{\karnaughmapVarLabelB}$} ++(0.8, 0);
+ \fi
+ }
+ }
+ \ifthenelse{\equal{\karnaughmapVarLabelC}{}}{%
+ }{%
+ \ifthenelse{\equal{\karnaughmapVarLabelD}{}}{%
+ \draw (-\karnaughmapVariableBaseBias -\karnaughmapVariableLeftBias, 0.1)
+ -- node[left] {$\karnaughmapVarLabelC$} ++(0, 0.8);
+ \ifKV@karnaughmap@omitnegated
+ \else
+ \draw (-\karnaughmapVariableBaseBias -\karnaughmapVariableLeftBias, 1.1)
+ -- node[left] {$\overline{\karnaughmapVarLabelC}$} ++(0, 0.8);
+ \fi
+ }{%
+ \draw (-\karnaughmapVariableBaseBias -\karnaughmapVariableLeftBias, 0.1)
+ -- node[left] {$\karnaughmapVarLabelC$} ++(0, 1.8);
+ \draw (\karnaughmapNumCol + \karnaughmapVariableBaseBias, 1.1)
+ -- node[right] {$\karnaughmapVarLabelD$} ++(0, 1.8);
+ \ifKV@karnaughmap@omitnegated
+ \else
+ \draw (-\karnaughmapVariableBaseBias -\karnaughmapVariableLeftBias, 2.1)
+ -- node[left] {$\overline{\karnaughmapVarLabelC}$} ++(0, 1.8);
+ \draw (\karnaughmapNumCol + \karnaughmapVariableBaseBias, 0.1)
+ -- node[right] {$\overline{\karnaughmapVarLabelD}$} ++(0, 0.8);
+ \draw (\karnaughmapNumCol + \karnaughmapVariableBaseBias, 3.1)
+ -- node[right] {$\overline{\karnaughmapVarLabelD}$} ++(0, 0.8);
+ \fi
+ }
+ }
+\fi
+% \end{macrocode}
+%
+% Typeset decimal index if switch |omitidx| is false.
+% \begin{macrocode}
+\ifKV@karnaughmap@omitidx
+\else
+ \karnaughmapPrintCellContents[anchor=west]{0.0}{-0.2}{\karnaughmapSize}{\karnaughmapNumRow}{\karnaughmapPrintIndex[\karnaughmapNumVar]}
+\fi
+% \end{macrocode}
+%
+% Typeset the cell entries.
+% \begin{macrocode}
+\karnaughmapPrintCellContents{0.5}{-0.5}{\karnaughmapSize}{\karnaughmapNumRow}{\karnaughmapPrintValue{\karnaughmapCellEntries}}
+% \end{macrocode}
+%
+% Close the scope
+% \begin{macrocode}
+ \end{scope}
+% \end{macrocode}
+%
+% Finishing macro bracket.
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\karnaughmapcolorfield}
+% The coloring macro takes two mandatory and one optional argument:\\
+% \oarg{key=value}\marg{map size}\marg{fields}\marg{color}.
+% \begin{macrocode}
+\newcommand{\karnaughmapcolorfield}[4][]{%
+\setkeys{karnaughmap}{fill,opacity}%
+\ifthenelse{\equal{#1}{}}{}{\setkeys*{karnaughmap}{#1}}%
+\ifthenelse{\equal{#3}{}}{}{%
+\StrSplit{#3}{1}{\karnaughmapColorfieldCur}{\karnaughmapColorfieldRem}
+\ifthenelse{\equal{#2}{2}}{%
+\karnaughmapShadeMapfieldTWO[\XKV@rm]{\karnaughmapColorfieldCur}{#4}
+}{}
+\ifthenelse{\equal{#2}{3}}{%
+\karnaughmapShadeMapfieldTHREE[\XKV@rm]{\karnaughmapColorfieldCur}{#4}
+}{}
+\ifthenelse{\equal{#2}{4}}{%
+\karnaughmapShadeMapfieldFOUR[\XKV@rm]{\karnaughmapColorfieldCur}{#4}
+}{}
+\karnaughmapcolorfield[#1]{#2}{\karnaughmapColorfieldRem}{#4}
+}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+%
+%
+% \section{To Do}% \iffalse TODO: SEC:To Do \fi
+% \begin{itemize}
+% \item Adjust the map label positions as well as the function label to fit the negated variant.
+% \item Increase supported karnaugh map size: 5 and 6 variables should be feasible in a single karnaugh map
+% \item Provide the possibility to permute the karnaugh map
+% \end{itemize}
+%
+%
+%
+% \iffalse ins meta-comment
+%
+% For convenience, the corresponding .ins file is provided here.
+% Just copy this in a file called karnaughmap.ins and run it through latex.
+%
+% %%
+% %% Copyright (C) 2013 by Michael Vonbun <michael.vonbun@tum.de>
+% %%
+% %% This file may be distributed and/or modified under the conditions of
+% %% the LaTeX Project Public License, either version 1.2 of this license
+% %% or (at your option) any later version. The latest version of this
+% %% license is in:
+% %%
+% %% http://www.latex-project.org/lppl.txt
+% %%
+% %% and version 1.2 or later is part of all distributions of LaTeX version
+% %% 1999/12/01 or later.
+% %%
+%
+% \input docstrip.tex
+% \keepsilent
+%
+% \usedir{tex/latex/lisstyles/karnaughmap}
+%
+% \preamble
+%
+% This is a generated file.
+%
+% Copyright (C) 2013 by Michael Vonbun <michael.vonbun@tum.de>
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.2 of this license
+% or (at your option) any later version. The latest version of this
+% license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.2 or later is part of all distributions of LaTeX version
+% 1999/12/01 or later.
+%
+% \endpreamble
+%
+% \generate{\file{karnaughmap.sty}{\from{karnaughmap.dtx}{package}}}
+%
+% \obeyspaces
+% \Msg{*************************************************************}
+% \Msg{* *}
+% \Msg{* To finish the installation you have to move the following *}
+% \Msg{* file into a directory searched by TeX: *}
+% \Msg{* *}
+% \Msg{* karnaughmap.sty *}
+% \Msg{* *}
+% \Msg{* To produce the documentation run the file karnaughmap.dtx *}
+% \Msg{* through LaTeX/pdfLaTeX. *}
+% \Msg{* To produce the changelog, run *}
+% \Msg{* makeindex -s gind.ist -o karnaughmap.ind karnaughmap.idx *}
+% \Msg{* To produce the index, run *}
+% \Msg{* makeindex -s gglo.ist -o karnaughmap.gls karnaughmap.glo *}
+% \Msg{* *}
+% \Msg{* gglo.ist and gind.ist are shipped with the doc-package *}
+% \Msg{* *}
+% \Msg{* Happy TeXing! *}
+% \Msg{* *}
+% \Msg{*************************************************************}
+%
+% \endbatchfile
+%
+% \fi
+%
+% \setcounter{IndexColumns}{2}
+% \Finale \PrintChanges \PrintIndex
+\endinput
diff --git a/graphics/pgf/contrib/karnaughmap/karnaughmap.ins b/graphics/pgf/contrib/karnaughmap/karnaughmap.ins
new file mode 100644
index 0000000000..0d45506b70
--- /dev/null
+++ b/graphics/pgf/contrib/karnaughmap/karnaughmap.ins
@@ -0,0 +1,64 @@
+%%
+%% Copyright (C) 2015 by Michael Vonbun <m.vonbun@gmail.com>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.2 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.2 or later is part of all distributions of LaTeX version
+%% 1999/12/01 or later.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{./}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2013 by Michael Vonbun <michael.vonbun@tum.de>
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.2 of this license
+or (at your option) any later version. The latest version of this
+license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.2 or later is part of all distributions of LaTeX version
+1999/12/01 or later.
+
+\endpreamble
+
+\askforoverwritefalse
+\generate{\file{karnaughmap.sty}{\from{karnaughmap.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* karnaughmap.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file karnaughmap.dtx *}
+\Msg{* through LaTeX/pdfLaTeX. *}
+\Msg{* To produce the changelog, run *}
+\Msg{* To produce the changelog, run *}
+\Msg{* makeindex -s gind.ist -o karnaughmap.ind karnaughmap.idx *}
+\Msg{* To produce the index, run *}
+\Msg{* makeindex -s gglo.ist -o karnaughmap.gls karnaughmap.glo *}
+\Msg{* Run LaTeX/pdfLaTeX again afterwards *}
+\Msg{* *}
+\Msg{* gglo.ist and gind.ist are shipped with the doc-package *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/graphics/pgf/contrib/karnaughmap/karnaughmap.pdf b/graphics/pgf/contrib/karnaughmap/karnaughmap.pdf
new file mode 100644
index 0000000000..92896da46e
--- /dev/null
+++ b/graphics/pgf/contrib/karnaughmap/karnaughmap.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/ladder/README.md b/graphics/pgf/contrib/ladder/README.md
new file mode 100644
index 0000000000..3634746fab
--- /dev/null
+++ b/graphics/pgf/contrib/ladder/README.md
@@ -0,0 +1,29 @@
+# Lader TeX package
+_This package permit the creation of simple ladder diagram into TeX documents._
+
+[Example](https://github.com/AurelienC/tex-ladder/blob/master/ladder.pdf)
+
+## Usage
+The code must be inserted between en `tikzpicture` section.
+
+Add the packages :
+ \usepackage{tikz}
+ \usepackage{Ladder}
+
+
+
+### Net
+_All contacts and relays are, by default, added in series_
+* `LadderLine` begin a new ladder net
+* `startParallel` begin a parallel segment
+* `setParallel` begin the new parallel segment
+* `unsetParallel` end of the parallel segment
+
+### Contacts
+* `LadderNO[type]{name}{mnemonic}` a Normally Opened contact
+* `LadderNC[type]{name}{mnemonic}` a Normaly Closed contact
+_Type may be P (rising edge), N (falling edge)..._
+
+### Relays
+* `LadderB[type]{name}{mnemonic}` a relay
+_Type may be R (reset), S (set)..._
diff --git a/graphics/pgf/contrib/ladder/ladder.pdf b/graphics/pgf/contrib/ladder/ladder.pdf
new file mode 100644
index 0000000000..8ab3233ae7
--- /dev/null
+++ b/graphics/pgf/contrib/ladder/ladder.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/ladder/ladder.sty b/graphics/pgf/contrib/ladder/ladder.sty
new file mode 100644
index 0000000000..cd537d7177
--- /dev/null
+++ b/graphics/pgf/contrib/ladder/ladder.sty
@@ -0,0 +1,127 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LADDER %%
+%% Aurélien CADIOU %%
+%% contact@aureliencadiou.fr %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Licence : MIT licence
+%% Repository : https://github.com/AurelienC/tex-ladder
+
+\NeedsTeXFormat{LaTeX2e}[1999/01/01]
+\ProvidesPackage{ladder}[2017/05/17]
+
+
+% Packages required
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+\RequirePackage{calc}
+
+
+\newcounter{nextY}%
+\newcounter{nextYPar}%
+\newcounter{nextX}%
+\newcounter{currentY}%
+\newcounter{currentX}%
+\newcounter{tempCurrentY}%
+\newcounter{startPar}%
+\newcounter{stopPar}%
+\newcounter{memCurrentX}%
+\newcounter{memCurrentY}%
+
+
+%%% NEW LINE %%%
+\newcommand{\ladderLine}[0]{
+ % Updating variables
+ \setcounter{currentX}{0}
+ \setcounter{nextX}{0}
+ \setcounter{currentY}{\value{nextY}}
+}
+
+
+%%% TEXT %%%
+\newcommand{\ladderText}[3][]{
+ \draw[text centered](\value{currentX}+1,\value{currentY}+1) node {\textbf{#2}};
+ \draw[text centered](\value{currentX}+1,\value{currentY}+0.5) node {\textit{#3}};
+ \draw[text centered](\value{currentX}+1,\value{currentY}) node {\texttt{\LARGE{#1}}};
+}
+
+
+%%% NO CONTACT %%%
+\newcommand{\ladderNO}[3][]{
+ % Updating variables
+ \setcounter{currentX}{\value{nextX}}
+ \setcounter{tempCurrentY}{\value{currentY}-2}
+ \ifthenelse{\value{nextY}>\value{tempCurrentY}}{\setcounter{nextY}{\value{tempCurrentY}}}{}
+ \ifthenelse{\value{nextYPar}>\value{tempCurrentY}}{\setcounter{nextYPar}{\value{tempCurrentY}}}{}
+ \addtocounter{nextX}{2}
+
+ % Drawing
+ \draw(\value{currentX}+0.75,\value{currentY}+0.25) -- (\value{currentX}+0.75,\value{currentY}-0.25); % First bar of NO contact
+ \draw(\value{currentX}+1.25,\value{currentY}+0.25) -- (\value{currentX}+1.25,\value{currentY}-0.25); % Second bar of NO contact
+ \draw(\value{currentX},\value{currentY}) -- (\value{currentX}+0.75,\value{currentY}); % Connection
+ \draw(\value{currentX}+1.25,\value{currentY}) -- (\value{nextX},\value{currentY}); % Connection
+ \ladderText[#1]{#2}{#3}
+}
+
+
+%%% NC CONTACT %%%
+\newcommand{\ladderNC}[3][]{
+ % Updating variables
+ \setcounter{currentX}{\value{nextX}}
+ \setcounter{tempCurrentY}{\value{currentY}-2}
+ \ifthenelse{\value{nextY}>\value{tempCurrentY}}{\setcounter{nextY}{\value{tempCurrentY}}}{}
+ \ifthenelse{\value{nextYPar}>\value{tempCurrentY}}{\setcounter{nextYPar}{\value{tempCurrentY}}}{}
+ \addtocounter{nextX}{2}
+
+ % Drawing
+ \draw(\value{currentX}+0.75,\value{currentY}+0.25) -- (\value{currentX}+0.75,\value{currentY}-0.25) -- (\value{currentX}+1.25,\value{currentY}+0.25) -- (\value{currentX}+1.25,\value{currentY}-0.25); % NC contact
+ \draw(\value{currentX},\value{currentY}) -- (\value{currentX}+0.75,\value{currentY}); % Connection
+ \draw(\value{currentX}+1.25,\value{currentY}) -- (\value{nextX},\value{currentY}); % Connection
+ \ladderText[#1]{#2}{#3}
+}
+
+
+%%% COILS %%%
+\newcommand{\ladderC}[3][]{
+ % Updating variables
+ \setcounter{currentX}{\value{nextX}}
+ \setcounter{tempCurrentY}{\value{currentY}-2}
+ \ifthenelse{\value{nextY}>\value{tempCurrentY}}{\setcounter{nextY}{\value{tempCurrentY}}}{}
+ \ifthenelse{\value{nextYPar}>\value{tempCurrentY}}{\setcounter{nextYPar}{\value{tempCurrentY}}}{}
+ \addtocounter{nextX}{2}
+
+ % Drawing
+ \draw (\value{currentX}+1,\value{currentY}) circle (0.3);
+ \draw(\value{currentX},\value{currentY}) -- (\value{currentX}+0.7,\value{currentY}); % Connection
+ \draw(\value{currentX}+1.3,\value{currentY}) -- (\value{nextX},\value{currentY}); % Connection
+ \ladderText[#1]{#2}{#3}
+}
+
+
+
+%%% START OF PARALLEL SECTION %%%
+\newcommand{\startParallel}[0]{
+ \setcounter{startPar}{\value{nextX}} % Store the X of beginning
+}
+
+
+
+%%% DEBUT PARALLELE %%%
+\newcommand{\setParallel}[0]{
+ \setcounter{stopPar}{\value{nextX}}%
+ \draw(\value{startPar},\value{currentY}) -- (\value{startPar},\value{nextYPar}); % Vertical bar
+ \setcounter{memCurrentX}{\value{nextX}}%
+ \setcounter{memCurrentY}{\value{currentY}}%
+ \setcounter{nextX}{\value{startPar}}%
+ \setcounter{currentY}{\value{nextYPar}}%
+}
+
+
+%%% END OF PARALLEL SECTION %%%
+\newcommand{\unsetParallel}[0]{
+ % Parallel section is more larger than "normal" section test
+ \ifthenelse{\value{nextX}>\value{memCurrentX}}{}{\draw(\value{nextX},\value{currentY}) -- (\value{stopPar},\value{currentY}) -- (\value{stopPar},\value{memCurrentY});}
+ \ifthenelse{\value{nextX}>\value{memCurrentX}}{\draw (\value{nextX},\value{currentY}) -- (\value{nextX},\value{memCurrentY}) -- (\value{memCurrentX},\value{memCurrentY});}{\setcounter{nextX}{\value{memCurrentX}}}
+ \setcounter{currentY}{\value{memCurrentY}}
+ \setcounter{nextYPar}{0}
+}
diff --git a/graphics/pgf/contrib/ladder/ladder.tex b/graphics/pgf/contrib/ladder/ladder.tex
new file mode 100644
index 0000000000..33bff63fc2
--- /dev/null
+++ b/graphics/pgf/contrib/ladder/ladder.tex
@@ -0,0 +1,268 @@
+\documentclass[a4paper]{article}
+
+%% Language and font encodings
+\usepackage[english]{babel}
+\usepackage[utf8x]{inputenc}
+\usepackage[T1]{fontenc}
+
+%% Sets page size and margins
+\usepackage[a4paper,top=3cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}
+
+%% Useful packages
+\usepackage{ladder}
+\usepackage{hyperref}
+\usepackage{xcolor}
+\usepackage{minted}
+
+\definecolor{LG}{HTML}{F9F9F9}
+
+%% Informations
+\title{\textsf{ladder} package}
+\author{Aurélien CADIOU \\ \href{mailto:contact@aureliencadiou.fr}{contact@aureliencadiou.fr}}
+
+\begin{document}
+\maketitle
+
+\setcounter{tocdepth}{1}
+\tableofcontents
+
+\section*{Introduction}
+This package permit the creation of simple ladder diagram into TeX documents.
+
+\href{https://github.com/AurelienC/tex-ladder}{Github repository : tex-ladder}
+
+\section{Installation}
+Install this package like any other \LaTeX~package.
+
+\section{Dependencies}
+This package depends on :
+\begin{itemize}
+\item \href{https://www.ctan.org/search/?phrase=tikz}{tikz}
+\item \href{https://www.ctan.org/pkg/ifthen}{ifthen}
+\item \href{https://www.ctan.org/pkg/calc}{calc}
+\end{itemize}
+
+
+\section{Usage}
+\subsection{Package}
+Add following packages on your document : \mintinline{latex}{\usepackage{tikz} \usepackage{ladder}}.
+
+
+\subsection{Net}
+All contacts and relays are, by default, added in serie.
+\begin{itemize}
+\item \mintinline{latex}{\ladderLine} begin a new ladder net
+\item \mintinline{latex}{\startParallel} begin a parallel segment
+\item \mintinline{latex}{\setParallel} begin the new parallel segment
+\item \mintinline{latex}{\unsetParallel} end of the parallel segment
+\end{itemize}
+
+\subsection{Contacts}
+\texttt{type} of contacts may be any letter. Conventionnaly, we use \texttt{P} for rising edge contact and \texttt{N} for falling edge contact.\\
+
+\begin{itemize}
+\item \mintinline{latex}{\ladderNO[type]{name}{mnemonic}} Normally Opened contact
+\item \mintinline{latex}{\ladderNC[type]{name}{mnemonic}} Normaly Closed contact
+\end{itemize}
+
+
+\subsection{Coils}
+\texttt{type} of coils may be any letter. Conventionnaly, we use \texttt{R} for reset coil, \texttt{S} for set coil.\\
+
+\begin{itemize}
+\item \mintinline{latex}{\ladderC[type]{name}{mnemonic}} a coil
+\end{itemize}
+
+
+\section{Simple example}
+\subsection{Preview}
+\begin{figure}[h!]
+ \begin{tikzpicture}
+ \ladderLine
+ \ladderNO{Switch}{I1.0}
+ \ladderNC{Breaker}{I0.1}
+ \ladderNO[P]{Start}{M0.0}
+ \ladderC[S]{Running}{M1.0}
+
+ \ladderLine
+ \ladderNO{Breaker}{I0.1}
+ \ladderC{Fault}{M10.0}
+ \end{tikzpicture}
+ \caption{Example with contacts and coil}
+ \label{example1}
+\end{figure}
+
+\subsection{Code}
+Code of figure \ref{example1}.
+\begin{minted}[bgcolor=LG, fontsize=\footnotesize]{latex}
+\begin{tikzpicture}
+ \ladderLine
+ \ladderNO{Switch}{I1.0}
+ \ladderNC{Breaker}{I0.1}
+ \ladderNO[P]{Start}{M0.0}
+ \ladderC[S]{Running}{M1.0}
+
+ \ladderLine
+ \ladderNO{Breaker}{I0.1}
+ \ladderC{Fault}{M10.0}
+\end{tikzpicture}
+\end{minted}
+
+
+\section{Parallel section}
+\subsection{Preview}
+\begin{figure}[h!]
+ \begin{tikzpicture}
+ \ladderLine
+ \ladderNO[P]{Button}{I1.0}
+
+ \startParallel % Begin of section
+ \ladderNO{Running}{M1.0}
+ \ladderNC{Fault}{M10.0}
+
+ \setParallel
+ \ladderNO{Manual}{M2.3}
+ \unsetParallel
+
+ \ladderC[S]{Validation}{M1.1}
+ \end{tikzpicture}
+ \caption{Example with parallel section}
+ \label{example2}
+\end{figure}
+
+\subsection{Code}
+Code of figure \ref{example2}.
+
+\begin{minted}[bgcolor=LG, fontsize=\footnotesize]{latex}
+\begin{tikzpicture}
+ \ladderLine
+ \ladderNO[P]{Button}{I1.0}
+
+ \startParallel % Begin of section
+ \ladderNO{Running}{M1.0}
+ \ladderNC{Fault}{M10.0}
+
+ \setParallel
+ \ladderNO{Manual}{M2.3}
+ \unsetParallel
+
+ \ladderC[S]{Validation}{M1.1}
+\end{tikzpicture}
+\end{minted}
+
+
+
+
+\section{Complete example}
+\subsection{Preview}
+\begin{figure}[!h]
+ \begin{tikzpicture}
+ \ladderLine % Begenning new line
+ \ladderNO{bla}{I1.0}
+
+ % M0 will be in parallel with I1.0 and I1.1
+ \startParallel
+ \ladderNC{bli}{M0.0}
+
+ \setParallel
+ \ladderNO{blou}{I1.0}
+ \ladderNO{blo}{I1.1}
+ \unsetParallel
+
+ \ladderC{blu}{M1} % On met une "bobine"
+ \ladderNO[P]{ble}{I2.0}
+
+ \startParallel
+ \ladderC[R]{bleu}{M0.1}
+ \setParallel
+
+ \ladderC[S]{bleu}{M1.2}
+ \unsetParallel
+
+ % New section
+ \ladderLine
+
+ \ladderNO{bla}{I3.7}
+
+ \startParallel
+ \ladderNC{bli}{M1.0}
+ \ladderNO[P]{blou}{I1.0}
+
+ \setParallel
+ \ladderNO{blo}{I1.6}
+ \unsetParallel
+
+ \ladderC{blu}{M4.1}
+
+ \ladderNO{ble}{I7.2}
+
+ \startParallel
+ \ladderC{bleu}{M1}{R}
+
+ \setParallel
+ \ladderNO{ble}{I7.3}
+ \ladderC[S]{bleu}{M4.2}
+ \unsetParallel
+ \end{tikzpicture}
+ \caption{Example of ladder package usage}
+ \label{example3}
+\end{figure}
+
+\subsection{Code}
+Code of figure \ref{example3}.
+
+\begin{minted}[bgcolor=LG, fontsize=\footnotesize]{latex}
+\begin{figure}
+ \begin{tikzpicture}
+ \ladderLine % Begenning new line
+ \ladderNO{bla}{I1.0}
+
+ % M0 will be in parallel with I1.0 and I1.1
+ \startParallel
+ \ladderNC{bli}{M0.0}
+
+ \setParallel
+ \ladderNO{blou}{I1.0}
+ \ladderNO{blo}{I1.1}
+ \unsetParallel
+
+ \ladderC{blu}{M1} % On met une "bobine"
+ \ladderNO[P]{ble}{I2.0}
+
+ \startParallel
+ \ladderC[R]{bleu}{M0.1}
+ \setParallel
+ \ladderC[S]{bleu}{M1.2}
+ \unsetParallel
+
+ % New section
+ \ladderLine
+
+ \ladderNO{bla}{I3.7}
+
+ \startParallel
+ \ladderNC{bli}{M1.0}
+ \ladderNO[P]{blou}{I1.0}
+
+ \setParallel
+ \ladderNO{blo}{I1.6}
+ \unsetParallel
+
+ \ladderC{blu}{M4.1}
+
+ \ladderNO{ble}{I7.2}
+
+ \startParallel
+ \ladderC{bleu}{M1}{R}
+
+ \setParallel
+ \ladderNO{ble}{I7.3}
+ \ladderC[S]{bleu}{M4.2}
+ \unsetParallel
+ \end{tikzpicture}
+ \caption{Example of ladder package usage}
+\end{figure}
+\end{minted}
+
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/logicpuzzle/README b/graphics/pgf/contrib/logicpuzzle/README
new file mode 100644
index 0000000000..2201013711
--- /dev/null
+++ b/graphics/pgf/contrib/logicpuzzle/README
@@ -0,0 +1,109 @@
+The logicpuzzle bundle allows you to typeset various logic
+puzzles. At the moment the following puzzles are supported:
+
+* 2D-Sudoku (aka Magiequadrat, Diagon, ...)
+* Battleship (aka Bimaru, Marinespiel, Batalla Naval, ...)
+* Bokkusu (aka Kakurasu, Feldersummenrätsel, ...)
+* Bridges (aka Brückenbau, Hashi, ...)
+* Chaos Sudoku
+* Four Winds (aka Eminent Domain, Lichtstrahl, ...)
+* Hakyuu (aka Seismic, Ripple Effect, ...)
+* Hitori
+* Kakuro
+* Kendoku (aka Mathdoku, Calcudoku, Basic, MiniPlu, Ken Ken,
+ Square Wisdom, Sukendo, Caldoku, ...)
+* Killer Sudoku (aka Samunapure, Sum Number Place, Sumdoku,
+ Gebietssummen, ...)
+* Laser Beam (aka Laserstrahl, ...)
+* Magic Labyrinth (aka Magic Spiral, Magisches Labyrinth, ...)
+* Magnets (aka Magnetplatte, Magnetfeld, ...)
+* Masyu (aka Mashi, {White|Black} Pearls, ...)
+* Minesweeper (aka Minensuche, ...)
++ Nonogram (aka Griddlers, Hanjie, Tsunami, Logic Art,
+ Logimage, ...)
+* Number Link (aka Alphabet Link, Arukone, Buchstabenbund, ...)
+* Resuko
+* Schatzsuche
+* Skyline (aka Skycrapers, Wolkenkratzer, Hochhäuser, ...)
+ incl. Skyline Sudoku and Skyline Sudoku (N*N) variants
+* Slitherlink (aka Fences, Number Line, Dotty Dilemma,
+ Sli-Lin, Takegaki, Great Wall of China,
+ Loop the Loop, Rundweg, Gartenzaun, ...)
+* Star Battle (aka Sternenschlacht, ...)
+* Stars and Arrows (aka Sternenhimmel, ...)
+* Sudoku
+* Sun and Moon (aka Sternenhaufen, Munraito, ...)
+* Tents and Trees (aka Zeltlager, Zeltplatz, Camping, ...)
+* Tunnel
+
+License: LPPL
+
+Changes in v2.5:
+
+- added support for Nonogram puzzle
+ https://bitbucket.org/kleberj/logicpuzzle/wiki/Nonogram
+ https://bitbucket.org/kleberj/logicpuzzle/downloads/example-nonogram.pdf
+
+ feature request by: Theresa Spannbauer
+
+- added documented source (dtx)
+
+- added LPpreset TikZ style to all puzzle environments plus some minor
+ changes
+
+ INSTALL
+===========
+
+First of all, install the package with the package manager of your
+TeX distribution, if possible.
+
+Or download logicpuzzle.tds.zip and unzip it in the root directory
+of your local TeX tree! Run texhash, that's it!
+
+Manual installation:
+
+- download logicpuzzle.dtx and qrcode.png
+
+- extract all other files with pdftex logicpuzzle.dtx
+ If you also want to create logicpuzzle.pdf, you can also run
+ pdflatex logicpuzzle.dtx
+
+- finish logicpuzzle.pdf by running:
+
+ (pdflatex logicpuzzle.dtx) already done???
+ bibtex logicpuzzle
+ makeindex -s gind.ist logicpuzzle
+ makeindex -s gglo.ist logicpuzzle.glo -o logicpuzzle.gls
+ pdflatex logicpuzzle.dtx
+ bibtex logicpuzzle
+ makeindex -s gind.ist logicpuzzle
+ makeindex -s gglo.ist logicpuzzle.glo -o logicpuzzle.gls
+ pdflatex logicpuzzle.dtx
+
+- rename some files:
+
+ createlpsudoku.sh -> createlpsudoku
+ lpsmag.sh -> lpsmag
+ README.txt -> README
+
+ or use one of the scripts:
+
+ * Linux: simply run ./rename.sh
+ * Windows: rename rename.win -> rename.bat and run it
+ Windows does pdftex not allow to write a batch file (.bat)
+
+- move the files:
+
+ *.sty -> localtexmf/tex/latex/logicpuzzle/
+ *.pdf -> localtexmf/doc/latex/logicpuzzle/
+ *.dtx -> localtexmf/doc/latex/logicpuzzle/
+ *.txt -> localtexmf/doc/latex/logicpuzzle/
+ README -> localtexmf/doc/latex/logicpuzzle/
+ bash scripts + *.smc -> somewhere in $PATH
+
+- update your FNDB (Filename database)
+
+ run texhash
+
+You really should use the package manager! ;-)
+
diff --git a/graphics/pgf/contrib/logicpuzzle/logicpuzzle.dtx b/graphics/pgf/contrib/logicpuzzle/logicpuzzle.dtx
new file mode 100644
index 0000000000..66eddead16
--- /dev/null
+++ b/graphics/pgf/contrib/logicpuzzle/logicpuzzle.dtx
@@ -0,0 +1,8896 @@
+% \iffalse meta-comment
+% !TEX program = pdfLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+The logicpuzzle bundle allows you to typeset various logic
+puzzles. At the moment the following puzzles are supported:
+
+* 2D-Sudoku (aka Magiequadrat, Diagon, ...)
+* Battleship (aka Bimaru, Marinespiel, Batalla Naval, ...)
+* Bokkusu (aka Kakurasu, Feldersummenrätsel, ...)
+* Bridges (aka Brückenbau, Hashi, ...)
+* Chaos Sudoku
+* Four Winds (aka Eminent Domain, Lichtstrahl, ...)
+* Hakyuu (aka Seismic, Ripple Effect, ...)
+* Hitori
+* Kakuro
+* Kendoku (aka Mathdoku, Calcudoku, Basic, MiniPlu, Ken Ken,
+ Square Wisdom, Sukendo, Caldoku, ...)
+* Killer Sudoku (aka Samunapure, Sum Number Place, Sumdoku,
+ Gebietssummen, ...)
+* Laser Beam (aka Laserstrahl, ...)
+* Magic Labyrinth (aka Magic Spiral, Magisches Labyrinth, ...)
+* Magnets (aka Magnetplatte, Magnetfeld, ...)
+* Masyu (aka Mashi, {White|Black} Pearls, ...)
+* Minesweeper (aka Minensuche, ...)
++ Nonogram (aka Griddlers, Hanjie, Tsunami, Logic Art,
+ Logimage, ...)
+* Number Link (aka Alphabet Link, Arukone, Buchstabenbund, ...)
+* Resuko
+* Schatzsuche
+* Skyline (aka Skycrapers, Wolkenkratzer, Hochhäuser, ...)
+ incl. Skyline Sudoku and Skyline Sudoku (N*N) variants
+* Slitherlink (aka Fences, Number Line, Dotty Dilemma,
+ Sli-Lin, Takegaki, Great Wall of China,
+ Loop the Loop, Rundweg, Gartenzaun, ...)
+* Star Battle (aka Sternenschlacht, ...)
+* Stars and Arrows (aka Sternenhimmel, ...)
+* Sudoku
+* Sun and Moon (aka Sternenhaufen, Munraito, ...)
+* Tents and Trees (aka Zeltlager, Zeltplatz, Camping, ...)
+* Tunnel
+
+License: LPPL
+
+Changes in v2.5:
+
+- added support for Nonogram puzzle
+ https://bitbucket.org/kleberj/logicpuzzle/wiki/Nonogram
+ https://bitbucket.org/kleberj/logicpuzzle/downloads/example-nonogram.pdf
+
+ feature request by: Theresa Spannbauer
+
+- added documented source (dtx)
+
+- added LPpreset TikZ style to all puzzle environments plus some minor
+ changes
+
+ INSTALL
+===========
+
+First of all, install the package with the package manager of your
+TeX distribution, if possible.
+
+Or download logicpuzzle.tds.zip and unzip it in the root directory
+of your local TeX tree! Run texhash, that's it!
+
+Manual installation:
+
+- download logicpuzzle.dtx and qrcode.png
+
+- extract all other files with pdftex logicpuzzle.dtx
+ If you also want to create logicpuzzle.pdf, you can also run
+ pdflatex logicpuzzle.dtx
+
+- finish logicpuzzle.pdf by running:
+
+ (pdflatex logicpuzzle.dtx) already done???
+ bibtex logicpuzzle
+ makeindex -s gind.ist logicpuzzle
+ makeindex -s gglo.ist logicpuzzle.glo -o logicpuzzle.gls
+ pdflatex logicpuzzle.dtx
+ bibtex logicpuzzle
+ makeindex -s gind.ist logicpuzzle
+ makeindex -s gglo.ist logicpuzzle.glo -o logicpuzzle.gls
+ pdflatex logicpuzzle.dtx
+
+- rename some files:
+
+ createlpsudoku.sh -> createlpsudoku
+ lpsmag.sh -> lpsmag
+ README.txt -> README
+
+ or use one of the scripts:
+
+ * Linux: simply run ./rename.sh
+ * Windows: rename rename.win -> rename.bat and run it
+ Windows does pdftex not allow to write a batch file (.bat)
+
+- move the files:
+
+ *.sty -> localtexmf/tex/latex/logicpuzzle/
+ *.pdf -> localtexmf/doc/latex/logicpuzzle/
+ *.dtx -> localtexmf/doc/latex/logicpuzzle/
+ *.txt -> localtexmf/doc/latex/logicpuzzle/
+ README -> localtexmf/doc/latex/logicpuzzle/
+ bash scripts + *.smc -> somewhere in $PATH
+
+- update your FNDB (Filename database)
+
+ run texhash
+
+You really should use the package manager! ;-)
+
+%</readme>
+%<*manifest>
+This work consists of the following files:
+
+logicpuzzle.dtx
+logicpuzzle.pdf
+qrcode.png
+README
+%</manifest>
+%<*renamebat>
+ren createlpsudoku.sh createlpsudoku
+ren lpsmag.sh lpsmag
+ren README.txt README
+%</renamebat>
+%<*renamesh>
+#!/bin/bash
+#
+mv createlpsudoku.sh createlpsudoku
+mv lpsmag.sh lpsmag
+mv README.txt README
+%</renamesh>
+%<*lpsmag>
+#!/bin/bash
+#
+# lpsmag CONFIGFILE
+#
+# creates a LaTeX file for the production
+# a Sudoku magazine with lpsudoku.sty
+#
+# License: LPPL
+#
+VERSION="v1.1 (06/05/2013)"
+CONFIGFILE="$1"
+TEXFILE="lpsmag.tex"
+TEXFILEBAK="${TEXFILE}.bak"
+typeset -i COUNT=0
+SUDOKUPP="6"
+SUDOKUPPD="12"
+#
+if [ -z "$CONFIGFILE" ]
+then
+ echo "no config file"
+ echo "Usage: `basename $0` configfile"
+ exit 1
+fi
+#
+exec 1> $TEXFILE
+#
+startpuzzles()
+{
+ echo "\lpsudokusetup{scale=0.75,width=6.8cm,fontsize=Large,cvoffset=-24pt}"
+ echo "\setpuzzlecounter{1}"
+}
+#
+startsolutions()
+{
+ echo "\lpsudokusetup{scale=0.5,width=4.6cm,fontsize=normalsize}"
+ echo "\setpuzzlecounter{1}"
+}
+#
+page()
+{
+ local name="$1"
+ local difficulty="$2"
+ qqwing --generate $SUDOKUPP --one-line --difficulty $difficulty >${name}.81
+ cat ${name}.81 | qqwing --solve --one-line >${name}_sol.81
+}
+#
+typesetpage()
+{
+ local name="$1"
+ local last="$2"
+ local puzzlenummer="uneven"
+ COUNT=0
+ echo "%startpage"
+ for puzzle in `cat ${name}.81`
+ do
+ ((COUNT++))
+ echo $puzzle >puzzle.81
+ createlpsudoku -i puzzle.81
+ if [ "$puzzlenummer" = "uneven" ]
+ then
+ echo "\hfill"
+ # toggle even/uneven
+ puzzlenummer="even"
+ else
+ # no \vfill after last lpsudoku
+ # environment of the page
+ if [ $COUNT -lt $SUDOKUPP ]
+ then
+ echo "\vfill"
+ else
+ if [ "$last" != "last" ]
+ then
+ echo "\clearpage"
+ fi
+ fi
+ puzzlenummer="uneven"
+ fi
+ done
+}
+#
+tspfor()
+{
+ local name="$1"
+ local last="$2"
+ local puzzlepos="one"
+ for puzzle in `cat ${name}.81`
+ do
+ ((COUNT++))
+ if [ $COUNT -eq 1 -o $COUNT -eq 7 ]
+ then
+ echo "%startpage"
+ fi
+ echo $puzzle >puzzle.81
+ createlpsudoku -i puzzle.81
+ if [ "$puzzlepos" = "one" ]
+ then
+ echo "\hfill"
+ puzzlepos="two"
+ elif [ "$puzzlepos" = "two" ]
+ then
+ echo "\hfill"
+ puzzlepos="three"
+ else
+ if [ $COUNT -lt $SUDOKUPPD ]
+ then
+ echo "\vfill"
+ puzzlepos="one"
+ else
+ if [ "$last" = "last" ]
+ then
+ puzzlepos="one"
+ else
+ echo "\clearpage"
+ puzzlepos="one"
+ fi
+ fi
+ fi
+ done
+}
+#
+typesetsolpage()
+{
+ local name1="$1_sol"
+ local name2="$2_sol"
+ local last="$3"
+ COUNT=0
+ tspfor $name1 $last
+ tspfor $name2 $last
+}
+#
+addcounterstyle()
+{
+ grep -ne'startpage' $TEXFILE | cut -d':' -f1 >csl.tmp
+ for linenumber in `cat csl.tmp`
+ do
+ COUNT="$linenumber"
+ ((COUNT++))
+ echo "$COUNT a [counterstyle=left]" >>sed.tmp
+ echo "$linenumber d" >>sed.tmp
+ done
+ sed -f sed.tmp $TEXFILE >$TEXFILEBAK
+ rm $TEXFILE
+ mv $TEXFILEBAK $TEXFILE
+}
+#
+addpercent()
+{
+ sed -e's/$/%/' $TEXFILE >$TEXFILEBAK
+ rm $TEXFILE
+ mv $TEXFILEBAK $TEXFILE
+}
+#
+deleteauxfiles()
+{
+ rm *.81
+ rm *.tmp
+}
+#
+cat >preamble.tmp <<EOF
+\documentclass[a4paper]{article}%
+\usepackage[bottom=3cm,top=3cm,left=2.7cm,right=2.7cm]{geometry}
+\usepackage{logicpuzzle}%
+\lpsudokusetup{width=5cm,scale=0.55,fontsize=normalsize}%
+EOF
+#
+cat preamble.tmp
+echo "\begin{document}"
+#
+. $CONFIGFILE
+#
+echo "\end{document}"
+#
+addcounterstyle
+addpercent
+deleteauxfiles
+exit 0
+#
+%</lpsmag>
+%<*createlpsudoku>
+#!/bin/bash
+#
+# createlpsudoku [options] [-o output] -i input
+#
+# transforms Sudokus in 81 format (-e) or Simple Sudoku format (-s)
+# into lpsudoku environments for lpsudoku.sty
+#
+# License: LPPL
+#
+FORMAT="81"
+VERSION="v1.1"
+LINEENDINGS="UNIX"
+IFILE=""
+OFILE=""
+#
+typeset -i SLBEGIN=1
+typeset -i SLEND=9
+typeset -i COUNT=9
+#
+while getopts "eshwvi:o:" FLAG
+do
+ case "$FLAG" in
+ e) FORMAT="81";;
+ s) FORMAT="ss";;
+ w) LINEENDINGS="WINDOWS";;
+ i) IFILE="$OPTARG";;
+ o) OFILE="$OPTARG";;
+ h) echo "`basename $0` [options] [-o output] -i input"; exit 0;;
+ v) echo "`basename $0` $VERSION (C) 2013 Josef Kleber"; exit 0;;
+ esac
+done
+#
+if [ -z "$IFILE" ]
+then
+ echo "no input file"
+ echo "Usage: `basename $0` [options] [-o output] -i input"
+ exit 1
+fi
+#
+if [ ! -e "$IFILE" ]
+then
+ echo "ERROR: input file $IFILE does not exist"
+ exit 1
+fi
+#
+if [ -n "$OFILE" ]
+then
+ exec 1> $OFILE
+fi
+#
+if [ "$FORMAT" = "ss" ]
+then
+ echo "\begin{lpsudoku}"
+ for SDLINE in `cat $IFILE | sed -e '1d' -e'5d' -e'9d' -e'13,200d' | sed -e 's/|//g' | sed -e's/^[[:space:]]//g'`
+ do
+ ROWARG=`echo $SDLINE | sed -e's/\./{},/g' -e's/\([[:digit:]]\)/\1,/g' | sed -e's/,$//'`
+ echo " \setrow{$COUNT}{$ROWARG}"
+ ((COUNT--))
+ done
+ echo "\end{lpsudoku}"
+ echo
+fi
+#
+if [ "$FORMAT" = "81" ]
+then
+ for SUDOKU in `cat $IFILE | sed -e's/#.*//'`
+ do
+ echo "\begin{lpsudoku}"
+ while [ $COUNT -gt 0 ]
+ do
+ SDLINE=`echo $SUDOKU | cut -c${SLBEGIN}-${SLEND}`
+ ROWARG=`echo $SDLINE | sed -e's/\./{},/g' -e's/\([[:digit:]]\)/\1,/g' | sed -e's/,$//'`
+ echo " \setrow{$COUNT}{$ROWARG}"
+ ((COUNT--))
+ ((SLBEGIN+=9))
+ ((SLEND+=9))
+ done
+ SLBEGIN=1
+ SLEND=9
+ COUNT=9
+ echo "\end{lpsudoku}"
+ echo
+ done
+fi
+#
+if [ -n "$OFILE" -a "$LINEENDINGS" = "WINDOWS" ]
+then
+ unix2dos -q $OFILE
+fi
+#
+exit 0
+%</createlpsudoku>
+%<*simple>
+page p1 easy
+page p2 easy
+startpuzzles
+typesetpage p1
+typesetpage p2
+startsolutions
+typesetsolpage p1 p2 last
+%</simple>
+%<*bibfile>
+@misc{bib:webbb:logigpuzzle,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/}(https://bitbucket.org/kleberj/logicpuzzle/)},
+ title = {The logicpuzzle bundle},
+ year = {2013},
+ }
+
+@misc{bib:weblp:logigpuzzle,
+ author = {Josef Kleber},
+ note = {\href{http://logicpuzzle.square7.de/}(http://logicpuzzle.square7.de/)},
+ title = {{logicpuzzle -- A LaTeX style file for typesetting logic puzzles}},
+ year = {2013},
+ }
+
+@misc{bib:wiki:createlpsudoku,
+ author = {Josef Kleber},
+ note = {\href{http://logicpuzzle.square7.de/createlpsudoku}(http://logicpuzzle.square7.de/createlpsudoku)},
+ title = {createlpsudoku},
+ year = {2013},
+ }
+
+@misc{bib:wiki:lpsmag,
+ author = {Josef Kleber},
+ note = {\href{http://logicpuzzle.square7.de/lpsmag}(http://logicpuzzle.square7.de/lpsmag)},
+ title = {lpsmag},
+ year = {2013},
+ }
+
+@misc{bib:wiki:howtosudoku,
+ author = {Josef Kleber},
+ note = {\href{http://logicpuzzle.square7.de/sudoku_magazine}(http://logicpuzzle.square7.de/sudoku\_magazine)},
+ title = {{How to create a Sudoku magazine}},
+ year = {2013},
+ }
+
+@misc{bib:web:qqwing,
+ author = {Stephen Ostermiller},
+ note = {\href{http://ostermiller.org/qqwing/}(http://ostermiller.org/qqwing/)},
+ title = {{QQwing -- Sudoku Generator and Solver}},
+ year = {2011},
+ }
+
+@misc{bib:web:hodoku,
+ author = {Bernhard Hobiger},
+ note = {\href{http://hodoku.sourceforge.net/en/index.php}(http://hodoku.sourceforge.net/en/index.php)},
+ title = {{HoDoKu}},
+ year = {2012},
+ }
+
+@misc{bib:ex:ddsudoku,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-ddsudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-ddsudoku.pdf)},
+ title = {{Examples \& Solutions (ddsudoku)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:battleship,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-battleship.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-battleship.pdf)},
+ title = {{Examples \& Solutions (battleship)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:bokkusu,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bokkusu.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bokkusu.pdf)},
+ title = {{Examples \& Solutions (bokkusu)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:chaossudoku,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-chaossudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-chaossudoku.pdf)},
+ title = {{Examples \& Solutions (chaossudoku)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:hakyuu,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hakyuu.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hakyuu.pdf)},
+ title = {{Examples \& Solutions (hakyuu)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:hitori,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hitor.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-hitori.pdf)},
+ title = {{Examples \& Solutions (hitori)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:kendoku,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kendoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kendoku.pdf)},
+ title = {{Examples \& Solutions (kendoku)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:killersudoku,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-killersudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-killersudoku.pdf)},
+ title = {{Examples \& Solutions (killersudoku)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:laserbeam,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-laserbeam.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-laserbeam.pdf)},
+ title = {{Examples \& Solutions (laserbeam)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:minesweeper,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-minesweeper.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-minesweeper.pdf)},
+ title = {{Examples \& Solutions (minesweeper)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:skyline,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-skyline.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-skyline.pdf)},
+ title = {{Examples \& Solutions (skyline)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:slitherlink,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-slitherlink.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-slitherlink.pdf)},
+ title = {{Examples \& Solutions (slitherlink)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:lpsudoku,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-lpsudoku.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-lpsudoku.pdf)},
+ title = {{Examples \& Solutions (lpsudoku)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:tunnel,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tunnel.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tunnel.pdf)},
+ title = {{Examples \& Solutions (tunnel)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:schatzsuche,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-schatzsuche.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-schatzsuche.pdf)},
+ title = {{Examples \& Solutions (schatzsuche)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:kakuro,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kakuro.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-kakuro.pdf)},
+ title = {{Examples \& Solutions (kakuro)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:tentsandtrees,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tentsandtrees.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-tentsandtrees.pdf)},
+ title = {{Examples \& Solutions (tentsandtrees)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:sunandmoon,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-sunandmoon.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-sunandmoon.pdf)},
+ title = {{Examples \& Solutions (sunandmoon)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:bridges,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bridges.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-bridges.pdf)},
+ title = {{Examples \& Solutions (bridges)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:fourwinds,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-fourwinds.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-fourwinds.pdf)},
+ title = {{Examples \& Solutions (fourwinds)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:numberlink,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-numberlink.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-numberlink.pdf)},
+ title = {{Examples \& Solutions (numberlink)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:magiclabyrinth,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-magiclabyrinth.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-magiclabyrinth.pdf)},
+ title = {{Examples \& Solutions (magiclabyrinth)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:masyu,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-masyu.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-masyu.pdf)},
+ title = {{Examples \& Solutions (masyu)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:magnets,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-magnets.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-magnets.pdf)},
+ title = {{Examples \& Solutions (magnets)}},
+ year = {2013},
+ }
+
+@misc{bib:ex:nonogram,
+ author = {Josef Kleber},
+ note = {\href{https://bitbucket.org/kleberj/logicpuzzle/downloads/example-nonogram.pdf}(https://bitbucket.org/kleberj/logicpuzzle/downloads/example-nonogram.pdf)},
+ title = {{Examples \& Solutions (nonogram)}},
+ year = {2014},
+ }
+
+%</bibfile>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+
+Copyright (C) 2013-2014 by:
+Josef Kleber
+<josef.kleber@gmx.de>
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of this
+license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2003/12/01 or later.
+
+This work has the LPPL maintenance status "author-maintained".
+
+The Current Maintainer of this work is Josef Kleber.
+
+This work consists of all files listed in manifest.txt.
+
+\endpreamble
+
+\usedir{tex/latex/logicpuzzle}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\generate{
+ \file{lpenv.sty}{\from{\jobname.dtx}{lpenv}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\nopreamble\nopostamble
+\usedir{source/latex/logicpuzzle}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\usedir{doc/latex/logicpuzzle}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\generate{
+ \file{manifest.txt}{\from{\jobname.dtx}{manifest}}
+}
+\generate{
+ \file{\jobname.bib}{\from{\jobname.dtx}{bibfile}}
+}
+\usedir{scripts/logicpuzzle}
+\generate{
+ \file{simple.smc}{\from{\jobname.dtx}{simple}}
+}
+\generate{
+ \file{lpsmag.sh}{\from{\jobname.dtx}{lpsmag}}
+}
+\generate{
+ \file{createlpsudoku.sh}{\from{\jobname.dtx}{createlpsudoku}}
+}
+\generate{
+ \file{rename.sh}{\from{\jobname.dtx}{renamesh}}
+}
+\generate{
+ \file{rename.win}{\from{\jobname.dtx}{renamebat}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*lpenv>
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesPackage{lpenv}[2015/06/15 v2.5 lpenv.sty - Josef Kleber (C) 2013-2014]%
+%</lpenv>
+%<*driver>
+\documentclass[a4paper]{ltxdoc}%
+\usepackage[english]{babel}%
+\usepackage[utf8]{inputenc}%
+\usepackage[T1]{fontenc}%
+\usepackage{textcomp}%
+\usepackage{lmodern}%
+\usepackage{bera}%
+\usepackage{makeidx}
+\usepackage{ccicons}
+\usepackage{tabularx}
+\usepackage{microtype}%
+\usepackage{listings}
+\usepackage{nicefrac}
+\usepackage[numbered]{hypdoc}
+\usepackage{marginnote}%
+\usepackage[svgnames,rgb]{xcolor}%
+\usepackage[automark,nouppercase]{scrpage2}
+\usepackage[tocgraduated]{tocstyle}
+\usetocstyle{classic}
+\usepackage{logicpuzzle}
+\usepackage{hyperref}
+\makeatletter
+\global\let\tikz@ensure@dollar@catcode=\relax
+\makeatother
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\makeatletter
+\setlength{\headheight}{1.1\baselineskip}%
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
+ {-2.5ex\@plus -1ex \@minus -.25ex}%
+ {1.25ex \@plus .25ex}%
+ {\normalfont\normalsize\bfseries}}
+\setcounter{secnumdepth}{5}
+\setcounter{tocdepth}{5}
+\AtBeginDocument{\IfFileExists{qrcode.png}{}{\write18{wget -O qrcode.png http://i.imgur.com/KAunnuS.png}}}%
+\hypersetup{colorlinks=true,urlcolor=NavyBlue,linkcolor=NavyBlue,citecolor=CornflowerBlue}%
+\lstset{language=[LaTeX]TeX,numbers=left,numberstyle=\tiny, basicstyle=\ttfamily, aboveskip=\baselineskip, frame=single, backgroundcolor=\color{LightGoldenrodYellow}, keywordstyle=\color{Blue},
+emph={ddsudoku, battleship, bokkusu, chaossudoku, hakyuu, hitori, kakuro, kendoku, killersudoku, laserbeam, skyline, slitherlink, lpsudoku, minesweeper, schatzsuche, tentsandtrees, tunnel, bridges, starsandarrows, starbattle, sunandmoon, fourwinds, numberlink, resuko, magiclabyrinth, masyu, magnets, nonogram
+,minipage, tikzpicture, puzzlebackground, puzzleforeground, center, pgfonlayer, left,
+shape, fill, inner, sep, draw, rounded, corners, thick},
+emphstyle=\color{Tomato}, emph={[2]Wheat, HotPink, GreenYellow, LightBlue, LightSalmon,
+LightYellow, green, sudoku, rows, columns, scale, layer, color, bgcolor, counterstyle, title,
+titleindent, titlewidth, cvoffset, width, grid, fontsize, extracells, helplines, solution},
+emphstyle={[2]\color{OliveDrab}}, morekeywords={LP@definecolor, LP@define@choicekey@fontsize,
+ExecuteOptionsX, ProcessOptionsX, LP@init@counter, valueH, valueV, sumH, sumV, LP@bottomrow,
+LP@toprow, LP@rightcolumn, bokkususetup, setkeys, LP@set@package, LP@set@env@prefix,
+ifthenelse, equal, LP@drawbackground, LP@drawgrid, LP@drawcounter, ProvidesPackage,
+RequirePackage, LP@BK@init@prefix, LP@BK@init@package, LP@leftcolumn, skylineL,
+LP@define@key, framearea, framepuzzle, fillarea, filldiagonals, tikzpath, setrule, colorarea,
+ddsudokucell, chaossudokucell, hakyuucell, setrow, LP@cvoffset, titleformat, definecounterstyle,
+marginnote, tikz, node, placesegment, placeship, shipH, shipV, shipbox, puzzlecounter, color,
+fillrow, setcolorrow, laserV, laserH, mirrorV, mirrorH, placearrow, placecross, placemirror,
+laser, skylineT, skylineB, skylineR, skylineL, skylinecell, setbigcell, slitherlinkcell,
+tunnelH, tunnelV, tube, portal, Mine, Diamond, ShipR, kakurosetup, kakurorow, KKR, Black,
+Tent, Tree, definecolor, tentH, tentV, bridgesrow, starbattlecell, starsH, starsV, [, ],
+RightDown, Right, LeftDown, LeftUp, Up, RightUp, Left, Star, Cloud, Moon, MoonTL, MoonR,
+MoonT, colorlet, bridge, fourwindscell, numberlinkcell, link, resukosetup, resukocell,
+Graveltrap, Cross, StraightV, StraightH, CurveTR, CurveBR, trackH, trackV, track,
+parkinglot, pitlane, xtikzpath, mlline, setcells, magiclabyrinthcell, magnetssetup, minusH,
+minusV, plusH, plusV, magnetsH, magnetsV, PMH, PMV, MPH, MPV, masyucell, masyuline,
+masyusetup, MasyuW, MasyuB, nonogramV, nonogramH, nonogramrow, puzzlestrut}}
+\renewcommand{\maketitle}%
+{%
+ \thispagestyle{empty}%
+ \pagecolor{Ivory}%
+ \begin{titlepage}%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \node[yshift=-2cm] at (current page.north west)%
+ {%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle%
+ (\paperwidth,2cm);%
+ \draw[anchor=west,yshift=-4cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\RaggedRight\Huge\sffamily\textbf{\@title}}};%
+ \draw[anchor=west,yshift=-6cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\huge\sffamily\textbf{\@fileversion}}};%
+ \draw[anchor=west,yshift=-9cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\RaggedRight\huge\sffamily\textbf{\@subtitle}}};%
+ \draw[anchor=west,yshift=-13cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\usebox\logo};%
+ \draw[anchor=west,yshift=-17cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\huge\sffamily\textbf{\@date}}};%
+ \draw[anchor=west,yshift=-20cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\Large\sffamily{\@authorline\\\textbf{\@author}}}};%
+ \end{tikzpicture}%
+ };%
+ \node[yshift=0cm] at (current page.south west)%
+ {%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \draw[fill=NavyBlue,color=NavyBlue,yshift=6cm,xshift=2cm] (0,0) rectangle (0.2cm,19cm);%
+ \draw[fill=CornflowerBlue,color=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);%
+ \draw[anchor=west,yshift=1cm,xshift=3cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\large\sffamily{\@refline}}};%
+ \end{tikzpicture}%
+ };%
+ \end{tikzpicture}%
+ \end{titlepage}%
+ \pagecolor{white}%
+}%
+%
+\newcommand*{\@tikzhead}[1]%
+{%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \node[yshift=-2cm] at (current page.north west)%
+ {%
+ \begin{tikzpicture}[remember picture, overlay]%
+ \draw[fill=CornflowerBlue] (0,0) rectangle (\paperwidth,2cm);%
+ \draw[anchor=west,yshift=1cm,xshift=1.5cm,color=NavyBlue] (0,0) node%
+ {\parbox{15cm}{\LARGE\sffamily\textbf{\@title}}};%
+ \node[anchor=east,xshift=.9\paperwidth,rectangle,%
+ rounded corners=15pt,inner sep=11pt,fill=NavyBlue]%
+ {\color{white}\textsc{#1}};%
+ \end{tikzpicture}%
+ };%
+ \end{tikzpicture}%
+}%
+\clearscrheadings%
+\ihead{\@tikzhead{\headmark}}%
+\cfoot{\upshape\thepage}%
+\pagestyle{scrheadings}%
+%
+\newcommand*{\Headline}[1]{\@mkboth{#1}{#1}}%
+%
+\renewcommand{\headfont}{\normalfont\mdseries\scshape}
+%
+\gdef\@subtitle{}%
+\providecommand*{\Subtitle}[1]{\gdef\@subtitle{#1}}%
+\gdef\@fileversion{}%
+\providecommand*{\Fileversion}[1]{\gdef\@fileversion{#1}}%
+\gdef\@author{}%
+\providecommand*{\Author}[1]{\gdef\@author{#1}}%
+\gdef\@authorline{Package author:}%
+\providecommand*{\Authorline}[1]{\gdef\@authorline{#1}}%
+\gdef\@refline{}%
+\providecommand*{\Refline}[1]{\gdef\@refline{#1}}%
+\gdef\and{\unskip{}, }%
+\newcommand\doubledash{-\kern0.5pt-}
+\def\filename{logicpuzzle.sty}%
+\def\XeLaTeX{Xe\LaTeX}%
+%
+\newenvironment{optionlist}
+{\begin{trivlist}\setlength\leftskip{2em}}
+{\end{trivlist}}
+\newcommand\optitem[3]{\item [\texttt{\textbf{\textcolor{DodgerBlue}{#1}} \lbrack\textcolor{Crimson}{#2}\rbrack}] #3}
+\renewcommand\tableofcontents%
+{%
+% \section*{\contentsname}%
+ \@mkboth{%
+ \MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
+ \@starttoc{toc}%
+}%
+%
+\newcommand\env[1]{\texttt{#1}}%
+\newcommand\layer[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (PGF layer)}%
+ \SortIndex{PGF layer>#1}{\texttt{#1}}}%
+\newcommand\styleoption[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Style option)}%
+ \SortIndex{Style option>#1}{\texttt{#1}}}%
+\newcommand\envoption[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Puzzle option)}%
+ \SortIndex{Puzzle option>#1}{\texttt{#1}}}%
+\newcommand\stylename[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Style file)}%
+ \SortIndex{Style file>#1}{\texttt{#1}}}%
+\newcommand\package[1]{\texttt{#1}\SortIndex{#1}{\texttt{#1} (Package)}%
+ \SortIndex{Package>#1}{\texttt{#1}}}%
+\newcommand*\margcs[1]{\marginnote{\hbadness=10000\RaggedLeft\scriptsize #1}}%
+\hypersetup{pdfauthor={Josef Kleber},pdftitle={A style file for typesetting logic puzzles},pdfsubject={Documentation for LaTeX style \filename},pageanchor=true,hyperindex=true}%
+\def\PrintIndex{\clearpage\Headline{Index}\@input@{\jobname.ind}%
+ \global\let\PrintIndex\@empty}
+ \renewenvironment{theindex}
+ {\if@twocolumn
+ \@restonecolfalse
+ \else
+ \@restonecoltrue
+ \fi
+ \columnseprule \z@
+ \columnsep 35\p@
+\def\see##1##2{\textit{See} ##1}%
+\def\seealso##1##2{\textit{See also} ##1}%
+\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}%
+\def\@url##1{\url@break\ttt{##1}\endgroup}%
+\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}%
+\def\@ttt##1{##1\endgroup}%
+\mathchardef\save@secnumdepth\c@secnumdepth
+\c@secnumdepth\m@ne
+ \phantomsection%
+ \twocolumn%[\section{\indexname}]%
+ \refstepcounter{section}
+ \addcontentsline{toc}{section}{\protect\numberline{\thesection}Index}%
+\c@secnumdepth\save@secnumdepth
+% \thispagestyle{plain}
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem}
+ {\if@restonecol\onecolumn\else\clearpage\fi}
+\setlength\parindent{0pt}%
+\makeatother
+\newenvironment{mydescription}%
+{%
+ \begin{list}{}{\setlength\leftmargin{0pt}\setlength\labelwidth{-6pt}}
+}%
+{%
+ \end{list}
+}%
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\GetFileInfo{\jobname.sty}
+%\DoNotIndex{\,,\addtocounter,\allowbreak,\arabic,\centering,\clip,\color,\colorlet,
+%\csname,\definecolor,\draw,\endcsname,\enspace,\equal,\ExecuteOptionsX,\fill,\footnotesize,
+%\foreach,\hbadness,\Huge,\huge,\i,\if,\ifthenelse,\j,\LARGE,\Large,\large,\marginnote,
+%\medskip,\MessageBreak,\newif,\node,\normalsize,\PackageError,\parbox,\ProcessOptionsX,
+%\RaggedRight,\RequirePackage,\scalebox,\scriptsize,\setkeys,\sffamily,\shade,\small,
+%\stepcounter,\strut,\tiny,\usetikzlibrary,\value,\whiledo,\xdef,\define@choicekey,
+%\define@key,\begingroup,\begin,\bgroup,\bfseries,\def,\egroup,\else,\end,\endgroup,
+%\expandafter,\fi,\gdef,\hspace,\ifcase,\ifnum,\let,\newcommand,\newcounter,
+%\newenvironment,\newlength,\noindent,\or,\par,\relax,\renewcommand,\setcounter,
+%\space,\vspace}
+%
+% \bibliographystyle{plain}
+% \ddsudokusetup{width=4.5cm,scale=0.85}
+% \battleshipsetup{width=4.5cm,scale=0.77,sbindent=0.65cm,sbwidth=3.6cm}
+% \bokkususetup{width=4.5cm,scale=0.64,fontsize=normalsize}
+% \chaossudokusetup{width=4.5cm,scale=0.89}
+% \hakyuusetup{width=4.5cm,scale=0.89}
+% \hitorisetup{width=4.5cm,scale=0.85}
+% \kakurosetup{width=4.5cm,scale=0.85}
+% \kendokusetup{width=4.5cm,scale=0.89}
+% \killersudokusetup{width=4.5cm,scale=0.89}
+% \laserbeamsetup{width=4.5cm,scale=0.66,fontsize=normalsize}
+% \minesweepersetup{width=4.5cm,scale=0.85}
+% \schatzsuchesetup{width=4.5cm,scale=0.85}
+% \skylinesetup{width=4.5cm,scale=0.66,fontsize=normalsize}
+% \slitherlinksetup{width=4.5cm,scale=0.85}
+% \lpsudokusetup{width=4.5cm,scale=0.49,fontsize=small}
+% \tentsandtreessetup{width=4.5cm,scale=0.75}
+% \tunnelsetup{width=4.5cm,scale=0.75}
+% \sunandmoonsetup{width=4.5cm,scale=0.85}
+% \starsandarrowssetup{width=4.5cm,scale=0.75}
+% \starbattlesetup{width=4.5cm,scale=0.85}
+% \bridgessetup{width=4.5cm,rows=8,columns=8,scale=0.55,color=orange!40}
+% \resukosetup{rows=8,columns=8,width=4cm,fontsize=Huge,scale=.48}
+% \numberlinksetup{width=4.5cm,scale=0.89}
+% \killersudokusetup{width=4.5cm,scale=0.89}
+% \magiclabyrinthsetup{width=4.5cm,scale=0.89}
+% \masyusetup{width=4.5cm,scale=0.89,color=Teal}
+% \magnetssetup{width=4.5cm,scale=0.55,bgcolor=Teal!50}
+% \title{\filename}%
+% \Subtitle{A style file for typesetting logic puzzles}%
+% \author{Josef Kleber}
+% \Fileversion{\fileversion}
+% \date{\filedate}
+% \Refline{\href{mailto:josef.kleber@gmx.de}{\texttt{josef.kleber@gmx.de}}\\\href{https://bitbucket.org/kleberj/logicpuzzle/}{\texttt{https://bitbucket.org/kleberj/logicpuzzle/}}}
+% \newsavebox\logo
+% \savebox\logo{%
+% \begin{laserbeam}
+% \laserV{1}
+% \laserH{{}}
+% \mirrorH{{},2}
+% \mirrorV{{},{},{},{},{},2}
+% \framepuzzle[LP@c@mirror]
+% \placearrow{3}{1}{LeftUp}
+% \placearrow{6}{4}{RightUp}
+% \placecross{3}{3}
+% \end{laserbeam}
+% \hspace{1.5cm}
+% \begin{laserbeam}
+% \laserV{1}
+% \laserH{{}}
+% \mirrorH{{},2}
+% \mirrorV{{},{},{},{},{},2}
+% \framepuzzle[LP@c@mirror]
+% \placearrow{3}{1}{LeftUp}
+% \placearrow{6}{4}{RightUp}
+% \placecross{3}{3}
+% \placemirror{2}{2}{V}
+% \placemirror{4}{2}{H}
+% \placemirror{5}{5}{V}
+% \placemirror{3}{5}{H}
+% \begin{puzzlebackground}
+% \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}}
+% \end{puzzlebackground}
+% \end{laserbeam}
+%}
+% \maketitle
+% \stepcounter{page}
+% \tableofcontents
+% \clearpage
+% \setlength\parskip{6pt}%
+%
+%
+%\StopEventually{^^A
+% {
+% \clearpage
+% \raggedright
+% \nocite{*}
+% \bibliography{logicpuzzle}
+% }
+% \clearpage
+% \PrintChanges
+% \PrintIndex
+%}
+%
+% \section{Roll out your own grid-based logic puzzle}
+% \label{sec:rollout}
+% As an example we take a look at the former \package{bokkusu.sty} package. First, we ignore the LPPL license stuff.
+% \lstset{numbers=none,basicstyle=\ttfamily\footnotesize}%
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\ProvidesPackage{bokkusu}[2013/03/25 bokkusu.sty v1.2 - Josef Kleber (C) 2013]%
+\RequirePackage{logicpuzzle}%
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% We wrote a package \package{bokkusu.sty} with version number v1.2 and date 2013/03/25 and added a copyright remark. We need to load the code base package \package{logicpuzzle.sty}.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\newcommand*\LP@BK@init@prefix{LP@BK}%
+\newcommand*\LP@BK@init@package{bokkusu}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{rows}{5}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{columns}{5}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{scale}{1}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{color}{black}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{bgcolor}{}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{width}{6.7cm}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{cvoffset}{-38pt}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{title}{}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titleindent}{0.75cm}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titlewidth}{5.85cm}%
+\LP@define@choicekey@fontsize{\LP@BK@init@prefix}{\LP@BK@init@package}{Large}%
+\ExecuteOptionsX{rows,columns,width,fontsize,scale,color,bgcolor,cvoffset,
+ counterstyle,title,titleindent,titlewidth}%
+\ProcessOptionsX\relax%
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% We save the package prefix and name in a macro for easy change. Then we define the options for package \package{bokkusu.sty} and the environment \env{bokkusu}, which are executed afterwards to create the macros for the option values.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\let\valueH\LP@bottomrow%
+\let\valueV\LP@leftcolumn%
+\let\sumH\LP@toprow%
+\let\sumV\LP@rightcolumn%
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% We need numbers around the grid. Therefore, we define some aliases for the existing generic commands.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\newcommand*\bokkususetup[1]%
+{%
+ \setkeys{bokkusu.sty}{#1}%
+}%
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% We define \cmd\bokkususetup\ for resetting the global package options.
+% \clearpage
+% \noindent{}Finally, we define the \env{bokkusu} environment.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\newenvironment{bokkusu}[1][]%
+{%
+ \setkeys{bokkusu}{#1}%
+ \LP@set@package{bokkusu}%
+ \LP@set@env@prefix{LP@BK}%
+ \setcounter{LP@rows}{\LP@BK@rows}%
+ \setcounter{LP@columns}{\LP@BK@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% We locally set the environment options and the prefix and name of the current puzzle environment. We need to reset the counters for \envoption{rows} and \envoption{columns}, as they might have been altered.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+ \begin{minipage}[t]{\LP@BK@width}%
+ \ifthenelse{\equal{\LP@BK@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@BK@titleindent}\parbox{\LP@BK@titlewidth}
+ {\strut\LP@titleformat\LP@BK@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[scale=\LP@BK@scale]%
+ \LP@drawbackground{1}{1}{\LP@BK@columns}{\LP@BK@rows}{\LP@BK@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@BK@columns}{\LP@BK@rows}{1cm}%
+}%
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% We start a minipage with width \marg{width}. If the user defined a title, we typeset the title and add a vertical space. Then, we draw the puzzle with the help of \package{tikz.sty}. We start drawing the background and the grid.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@BK@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% Finally, we just end the picture for the puzzle. We draw and step the counter. As last action, we need to close the \env{minipage} environment. That's it. Easy, isn't it? You just need to copy this skelton and change or add some code for your specific puzzle.
+%
+% \section{User documentation}
+% \label{sec:code}
+% \lstset{basicstyle=\ttfamily\normalsize}%
+% \subsection{PGF Layers}
+% \label{sec:layer}
+% The \package{logicpuzzle.sty} package defines the PGF layers: \layer{LPdump}, \layer{LPbgcolor}, \layer{LPbackgroundtwo}, \layer{LPbackground}, \layer{LPforeground} and \layer{LPforegroundtwo}
+%
+% Without specifying a special layer, the standard \layer{main} layer is used. The \texttt{LPback\-ground} and \layer{LPforeground} layers can be accessed with the \env{puzzlebackground} and \env{puzzleforeground} environments.
+% The \layer{LPbgcolor} is and should only be used for the background color of the grid.
+%
+% All layers can also be accessed with the generic PGF method:
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{pgfonlayer}{layer}
+ ...
+\end{pgfonlayer}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \begin{tabularx}{\textwidth}{lX}
+% Order: & \layer{LPdump} $\rightarrow$ \layer{LPbgcolor} $\rightarrow$ \layer{LPbackgroundtwo} $\rightarrow$ \layer{LPbackground} $\rightarrow$ \layer{main} $\rightarrow$ \layer{LPforeground} $\rightarrow$ \layer{LPforegroundtwo} \\
+% \end{tabularx}
+%
+% So, if you are in the need to place something behind \layer{LPbackground} or in front of \layer{LPforeground}, you can use the \layer{LPbackgroundtwo} and \layer{LPforegroundtwo} layers. You can hide elements like help nodes behind the background color on the \layer{LPdump} layer.
+%
+% \subsection{Environments}
+% \label{sec:env}
+% \subsubsection{\texttt{Puzzle environments}}
+% \DescribeEnv{logicpuzzle}
+% The \env{logicpuzzle} environment is the generic environment for typesetting logic puzzles. With the optional argument of the environment, you can reset the options with local scope. Here, a blank grid is created.
+% Furthermore, there are the other puzzle environments. They have their own set of options, that is also different option values and defaults! These can be changed with the \texttt{\textbackslash puzzlesetup} commands with global scope or in the optional argument of the environment with local scope.
+%
+% \paragraph{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{}{specifies the color for coloring the cells.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+% \subsubsection{\texttt{Supporting environments}}
+% \label{sec:puzzlebackground}
+% The \env{puzzlebackground} \DescribeEnv{puzzlebackground}environment allows you to place elements behind the \layer{main} layer on the \layer{LPbackground} layer. This is for example usefull for the \cmd\fillarea\ command.
+%
+% \label{sec:puzzleforeground}
+% The \env{puzzleforeground} \DescribeEnv{puzzleforeground}environment allows you to place elements in front of the \layer{main} layer on the \layer{LPforeground} layer. This is for example usefull for the \cmd\framearea\ command.
+%
+% \subsection{Commands}
+% \subsubsection{In the grid}
+% \label{sec:setcell}
+% \setlength\leftmargin{0pt}
+% \setlength\leftskip{0pt}
+% \begin{mydescription}
+% \item[\cs{setcell}\marg{column}\marg{row}\marg{element}] \DescribeMacro{\setcell}\mbox{}\\sets an \marg{element} into cell \marg{column}\marg{row} as central node. It is aware of the current values of the surrounding environment options \envoption{rows}, \envoption{columns}, \envoption{scale} and \envoption{fontsize}. Furthermore, a check if \marg{element} is within the grid is applied.
+% \label{sec:setcells}
+% \item[\cs{setcells}\marg{csv list}\marg{element}] \DescribeMacro{\setcells}\mbox{}\\ sets \marg{element} into several cells by using the \texttt{column}/\texttt{row} format in \marg{csv list}. It works for numbers, letters and most graphical objects, with the exception of commands like \cmd\KKR, which is not a graphic itself, but drawing something into the grid.
+% \label{sec:setbigcell}
+% \item[\cs{setbigcell}\oarg{fontsize}\marg{column}\marg{row}\marg{element}] \DescribeMacro{\setbigcell}\mbox{}\\sets \marg{element} into a big (\texttt{$2\times2$}) cell \marg{column}\marg{row} as central node. The optional argument \oarg{fontsize} is set to 'Huge' by default.
+% \label{sec:setrow}
+% \item[\cs{setrow}\marg{row}\marg{csv list}] \DescribeMacro{\setrow}\mbox{}\\sets the contents of a \marg{row}. These may be numbers or letters.
+% \label{sec:setcolorrow}
+% \item[\cs{setcolorrow}\marg{row}\marg{csv list}] \DescribeMacro{\setcolorrow}\mbox{}\\sets the contents of a \marg{row}. Furthermore, the background of the cell is filled with color \texttt{LP@c@romannumber}. With the number 0, you can black out the grid cell.
+% \label{sec:setcolumn}
+% \item[\cs{setcolumn}\marg{column}\marg{csv list}] \DescribeMacro{\setcolumn}\mbox{}\\sets the contents of a \marg{column}. These may be numbers or letters.
+% \label{sec:setcolorcolumn}
+% \item[\cs{setcolorcolumn}\marg{column}\marg{csv list}] \DescribeMacro{\setcolorcolumn}\mbox{}\\sets the contents of a \marg{column}. Furthermore, the background of the cell is filled with color \texttt{LP@c@romannumber}.
+% \label{sec:setrule}
+% \item[\cs{setrule}\marg{column}\marg{row}\marg{rule}] \DescribeMacro{\setrule}\mbox{}\\sets a calculation rule \marg{rule} into the top left corner of cell \marg{column}\marg{row}. The rule is typeset in inline math mode. You might consider using the \cmd\times\ and \cmd\div\ commands.
+% \label{sec:fillcell}
+% \item[\cs{fillcell}\marg{column}\marg{row}] \DescribeMacro{\fillcell}\mbox{}\\fills cell \marg{column}\marg{row} with the color defined with environment option \envoption{color}\footnote{Therefore, you must define an option \envoption{color} in the style file you want to use fill commands}. It is aware of the current values of the surrounding envionment options \envoption{rows}, \envoption{columns}, \envoption{scale} and \envoption{color}. Furthermore, a check if the cell is within the grid is applied.
+% \label{sec:fillrow}
+% \item[\cs{fillrow}\marg{row}\marg{csv list}] \DescribeMacro{\fillrow}\mbox{}\\fills a \marg{row}. In \marg{csv list} '1' means 'fill' and '0' means 'don't fill'. Internally, \cmd\fillrow\ uses \cmd\fillcell.
+% \label{sec:fillcolumn}
+% \item[\cs{fillcolumn}\marg{column}\marg{csv list}] \DescribeMacro{\fillcolumn}\mbox{}\\fills a \marg{column}. In \marg{csv list} '1' means 'fill' and '0' means 'don't fill'. Internally, \cmd\fillcolumn\ uses \cmd\fillcell.
+% \label{sec:filldiagonals}
+% \item[\cs{filldiagonals}\oarg{color}] \DescribeMacro{\filldiagonals}\mbox{}\\fills the diagonals with the color specified with the optional argument \oarg{color} (default: yellow!20). Furthermore, it checks for a quadratic grid, otherwise an error message is issued.
+% \label{sec:framearea}
+% \item[\cs{framearea}\marg{color}\marg{TikZ path}] \DescribeMacro{\framearea}\mbox{}\\frames the area given by \marg{Ti\textit{k}Z path} with color \marg{color}. The reference for coordinates is the bottom left corner of the cell.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\framearea{green}{(2,2)--(2,3)--(3,3)--(3,2)--(2,2)}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% This command will color the frame of the grid cell \texttt{(2,2)} green. You should consider using this command in the \env{puzzleforeground} environment.
+% \label{sec:fillarea}
+% \item[\cs{fillarea}\marg{color}\marg{TikZ path}] \DescribeMacro{\fillarea}\mbox{}\\fills the area given by \marg{Ti\textit{k}Z path} with color \marg{color}. The reference for coordinates is the bottom left corner of the cell. You should consider using this command in the \env{puzzlebackground} environment.
+% \label{sec:colorarea}
+% \item[\cs{colorarea}\marg{color}\marg{TikZ path}] \DescribeMacro{\colorarea}\mbox{}\\fills the area given by \marg{Ti\textit{k}Z path} with color \marg{color} -- just like \cmd\framearea\ without frame.
+% \clearpage
+% \label{sec:framepuzzle}
+% \item[\cs{framepuzzle}\oarg{color}] \DescribeMacro{\framepuzzle}\mbox{}\\frames the grid (thicker line) with the color specified with the optional argument \oarg{color} (default: black).
+% \label{sec:tikzpath}
+% \item[\cs{tikzpath}\marg{column}\marg{row}\marg{csv list}] \DescribeMacro{\tikzzpath}\mbox{}\\does easily construct a Ti\textit{k}Z path. You just need to define a starting point \marg{column}\marg{row} (bottom left corner) and a \marg{csv list} with direction indicators relative to the current position.
+%
+% \begin{center}
+% \begin{tabular}{rlrlrl}
+% 7: & up left & 8: & up & 9: & up right \\
+% 4: & left & 5: & no change & 6: & right \\
+% 1: & down left & 2: & down & 3: & down right \\
+% \end{tabular}
+% \end{center}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\framearea{green}{\tikzpath{2}{2}{8,6,2,4}}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% This command will frame grid cell \texttt{(2,2)} green.
+%
+% \label{sec:xtikzpath}
+% \item[\cs{xtikzpath}\marg{column}\marg{row}\marg{csv list}] \DescribeMacro{\xtikzpath}\mbox{}\\is an evolution of the \cmd\tikzpath\ command with slightly different input syntax. In the \marg{csv list} argument, it expects pairs in the form \texttt{direction/length}. Therefore, you can easily define paths from corner to corner.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\framearea{green}{\xtikzpath{2}{2}{8/2,6/2,2/2,4/2}}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% This command will frame an area defined by the grid cells \texttt{(2,2)} and \texttt{(3,3)} green.
+% \end{mydescription}
+% \subsubsection{Presentation}
+% \begin{mydescription}
+% \label{sec:titleformat}
+% \item[\cs{titleformat}\marg{format}] \DescribeMacro{\titleformat}\mbox{}\\defines the \marg{format} of the title. By default, the definition is as follows:
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\titleformat{\centering\Large\color{blue}}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \label{sec:puzzlecounter}
+% \item[\cs{puzzlecounter}] \DescribeMacro{\puzzlecounter}\mbox{}\\provides the puzzle counter in textual form to use it in \cmd\definecounterstyle.
+% \label{sec:setpuzzlecounter}
+% \item[\cs{setpuzzlecounter}\marg{number}] \DescribeMacro{\setpuzzlecounter}\mbox{}\\resets the puzzle counter, for example before the solutions.
+% \label{sec:definecounterstyle}
+% \item[\cs{definecounterstyle}\marg{name}\marg{definition}] \DescribeMacro{\definecounterstyle}\mbox{}\\allows you to define your own styles. For example, the style \texttt{left} is defined as follows:
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\definecounterstyle{left}{
+ \begingroup\reversemarginpar\marginnote{
+ \tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,
+ draw,rounded corners=3pt,thick]
+ {\Huge\puzzlecounter};}[\LP@cvoffset]\endgroup}
+}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% To typeset the counter into the margin we use the command \cmd\marginnote. We need to use the command \cmd\reversemarginpar\ to set the counter into the left margin. Of course, we must use this command in a group for local scope. Finally we use \cmd\puzzlecounter\ in a \cmd\tikz\ node with a vertical offset set with the option \envoption{cvoffset}.
+% \label{sec:setgridlinestyle}
+% \item[\cs{setgridlinestyle}\marg{style}] \DescribeMacro{\setgridlinestyle}\mbox{}\\sets the style of lines used in the grid. By default, the style is set to \texttt{solid}, whereas \env{slitherlink} uses \texttt{dashed}.
+% \label{sec:setnormallinewidth}
+% \item[\cs{setnormallinewidth}\marg{dimension}] \DescribeMacro{\setnormallinewidth}\mbox{}\\sets the width of the standard lines (default: \texttt{0.5pt})
+% \label{sec:setthicklinewidth}
+% \item[\cs{setthicklinewidth}\marg{dimension}] \DescribeMacro{\setthicklinewidth}\mbox{}\\sets the width of the 'thicker' lines (default: \texttt{1.5pt})
+% \end{mydescription}
+% \subsubsection{Puzzle specific commands}
+% \label{sec:pscommands}
+% \paragraph{2D-Sudoku}
+% \label{sec:pscddsudoku}
+% \begin{mydescription}
+% \item[\cs{ddsudokucell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\ddsudokucell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column}\marg{row}.
+% \item[\cs{ddsudokusetup}\marg{options}] \DescribeMacro{\ddsudokusetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Battleship}
+% \label{sec:pscbattleship}
+% \begin{mydescription}
+% \item[\cs{placeship}\marg{direction}\marg{column}\marg{row}\marg{length}] \DescribeMacro{\placeship}\mbox{}\\
+% places complete ships in the grid. It expects the specification of the direction as horizontal (H) or vertical (V). Furthermore, it requires the starting coordinates and the length of the ship.
+% \item[\cs{placesegment}\marg{column}\marg{row}\marg{ship segment}] \DescribeMacro{\placesegment}\mbox{}\\
+% is used for the placement of ship segments in the grid. In the mandatory argument \marg{ship segment}, you can use the following commands:
+% \begin{center}
+% \begin{tabular}{lccl}
+% \cs{Ship} & \scalebox{.5}{\Ship} & \scalebox{.5}{\ShipC} & \cs{ShipC} \\
+% \cs{ShipL} & \scalebox{.5}{\ShipL} & \scalebox{.5}{\ShipR} & \cs{ShipR} \\
+% \cs{ShipB} & \scalebox{.5}{\ShipB} & \scalebox{.5}{\ShipT} & \cs{ShipT} \\
+% \end{tabular}
+% \end{center}
+% \item[\cs{ship}] \DescribeMacro{\ship}\mbox{}\\
+% The command \cs{ship} was replaced by the \cs{placesegment} command. The command \cs{ship} is deprecated and should not be used longer. It may still be used, but it is not recommended.
+% \item[\cs{placewater}\marg{column}\marg{row}] \DescribeMacro{\placewater}\mbox{}\\
+% places water markers \mbox{( \raisebox{2pt}{\Water} )} in the grid.
+% \item[\cs{placeisland}\marg{column}\marg{row}] \DescribeMacro{\placeisland}\mbox{}\\
+% places islands ( \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}} ) in the grid. The island outlines are created randomly: \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, \raisebox{-2pt}{\resizebox{!}{10pt}{\Island}}, ...
+% \item[\cs{shipH}\marg{csv list}] \DescribeMacro{\shipH}\mbox{}\\
+% typesets the horizontal numbers above the grid. It expects a comma-separated list as an argument.
+% \subparagraph{\texttt{shipV}}
+% \item[\cs{shipV}\marg{csv list}] \DescribeMacro{\shipV}\mbox{}\\
+% typesets the vertical numbers beside the grid. It also expects a comma separated list.
+% \item[\cs{shipbox}\marg{csv list}] \DescribeMacro{\shipbox}\mbox{}\\
+% defines the number and size of the ships, which are typeset under the grid.
+% \item[\cs{battleshipsetup}\marg{options}] \DescribeMacro{\battleshipsetup}\mbox{}\\
+% resets the options with global scope.
+% \item[\cs{classicgame}\marg{csv list}] \DescribeMacro{\classicgame}\mbox{}\\
+% typesets a game sheet for playing classic Battleship. It expects a comma separated list with the number and sizes of the ships.
+% \end{mydescription}
+% \paragraph{Bokkusu}
+% \label{sec:pscbokkusu}
+% \begin{mydescription}
+% \item[\cs{valueH}\marg{csv list}] \DescribeMacro{\valueH}\mbox{}\\
+% typesets the numbers left to the grid indicating the values of the cells. It expects a comma-separated list as an argument.
+% \item[\cs{valueV}\marg{csv list}] \DescribeMacro{\valueV}\mbox{}\\
+% typesets the numbers below the grid specifying the values of the cells. It also expects a comma separated list.
+% \item[\cs{sumH}\marg{csv list}] \DescribeMacro{\sumH}\mbox{}\\
+% typesets the numbers right to the grid indicating the sums of the values of the colored cells. It expects a comma-separated list.
+% \item[\cs{sumV}\marg{csv list}] \DescribeMacro{\sumV}\mbox{}\\
+% typesets the numbers above the grid specifying the sums of the values of the colored cells. It expects a comma separated list.
+% \item[\cs{bokkususetup}\marg{options}] \DescribeMacro{\bokkususetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Bridges}
+% \label{sec:pscbridges}
+% \begin{mydescription}
+% \item[\cs{bridgesrow}\marg{row}\marg{csv list}] \DescribeMacro{\bridgesrow}\mbox{}\\
+% sets the contents of a bridges \marg{row}. These are the numbers indicating how many bridges originate from this specific island.
+% \item[\cs{bridgescolumn}\marg{column}\marg{csv list}] \DescribeMacro{\bridgescolumn}\mbox{}\\
+% sets the contents of a bridges \marg{column}.
+% \item[\cs{bridge}\oarg{optional arguments}marg{Ti\textit{k}Z path}] \DescribeMacro{\bridge}\mbox{}\\
+% draws the bridges between islands. With the optional argument \oarg{double} you can draw a double bridge. Furthermore, you can set the color of the bridge with the option \oarg{color}.
+% \item[\cs{bridgessetup}\marg{options}] \DescribeMacro{\bridgessetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Chaos Sudoku}
+% \label{sec:pscchaossudoku}
+% \begin{mydescription}
+% \item[\cs{chaossudokucell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\chaossudokucell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column}\marg{row}.
+% \item[\cs{chaossudokusetup}\marg{options}] \DescribeMacro{\chaossudokusetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Four Winds}
+% \label{sec:pscfourwinds}
+% \begin{mydescription}
+% \item[\cs{fourwindscell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\fourwindscell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column}\marg{row}. Furthermore, it draws lines specified in \marg{csv list} in the \texttt{direction/length} format.
+% \item[\cs{fourwindssetup}\marg{options}] \DescribeMacro{\fourwindssetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Hakyuu}
+% \label{sec:pschakyuu}
+% \begin{mydescription}
+% \item[\cs{hakyuucell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\hakyuucell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column}\marg{row}.
+% \item[\cs{hakyuusetup}\marg{options}] \DescribeMacro{\hakyuusetup}\mbox{}\\
+% reset the options with global scope.
+% \end{mydescription}
+% \paragraph{Hitori}
+% \label{sec:pschitori}
+% \begin{mydescription}
+% \item[\cs{hitorisetup}\marg{options}] \DescribeMacro{\hitorisetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Kakuro}
+% \label{sec:psckakuro}
+% \begin{mydescription}
+% \item[\cs{kakurorow}\marg{row}\marg{csv list}] \DescribeMacro{\kakurorow}\mbox{}\\
+% sets the contents of a kakuro \marg{row}. These may be numbers and the commands \cmd\KKR\ or \cmd\Black.
+% \item[\cs{kakurocolumn}\marg{column}\marg{csv list}] \DescribeMacro{\kakurocolumn}\mbox{}\\
+% sets the contents of a kakuro \marg{column}.
+% \item[\cs{KKR}\marg{sumV}\marg{sumH}] \DescribeMacro{\KKR}\mbox{}\\
+% sets the contents of a kakuro cell.
+% \item[\cs{Black}] \DescribeMacro{\Black}\mbox{}\\
+% blacks out a cell.
+% \item[\cs{kakurosetup}\marg{options}] \DescribeMacro{\kakurosetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Kendoku}
+% \label{sec:psckendoku}
+% \begin{mydescription}
+% \item[\cs{kendokucell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\kendokucell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column}\marg{row}.
+% \item[\cs{kendokusetup}\marg{options}] \DescribeMacro{\kendokusetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Killer Sudoku}
+% \label{sec:psckillersudoku}
+% \begin{mydescription}
+% \item[\cs{killersudokucell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\killersudokucell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column} \marg{row}.
+% \subparagraph{\texttt{killersudokusetup}}
+% \item[\cs{killersudokusetup}\marg{options}] \DescribeMacro{\killersudokusetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Laser Beam}
+% \label{sec:psclaserbeam}
+% \begin{mydescription}
+% \item[\cs{laserH}\marg{csv list}] \DescribeMacro{\laserH}\mbox{}\\
+% typesets the numbers above the grid indicating how many cells are traversed by the laser beam. It expects a comma-separated list as an argument.
+% \item[\cs{laserV}\marg{csv list}] \DescribeMacro{\laserV}\mbox{}\\
+% typesets the numbers left to the grid.
+% \item[\cs{mirrorH}\marg{csv list}] \DescribeMacro{\mirrorH}\mbox{}\\
+% typesets the numbers below the grid indicating how many mirrors are placed in the intersections of this column.
+% \item[\cs{mirrorV}\marg{csv list}] \DescribeMacro{\mirrorV}\mbox{}\\
+% typesets the numbers right to the grid.
+% \subparagraph{\texttt{placearrow}}
+% \item[\cs{placearrow}\marg{column}\marg{row}] \DescribeMacro{\placearrow}\mbox{}\\
+% is used for the placement of arrows at the grid frame. The reference for coordinates is the bottom left corner of the cell. In the mandatory argument \marg{direction}, you can use the following indicators: LeftUp, LeftDown, RightUp, RightDown
+% \item[\cs{placecross}\marg{column}\marg{row}] \DescribeMacro{\placecross}\mbox{}\\
+% places a cross in the intersections of the grid.
+% \item[\cs{placemirror}\marg{column}\marg{row}\marg{direction}] \DescribeMacro{\placemirror}\mbox{}\\
+% places mirrors in the intersections of the grid. In the mandatory argument \marg{direction}, you can use the following indicators: H, V
+% \subparagraph{\texttt{laser}}
+% \item[\cs{laser}\oarg{color}\marg{Ti\textit{k}Z path}] \DescribeMacro{\laser}\mbox{}\\
+% draws the laser beam given by \marg{Ti\textit{k}Z path} with color \oarg{color} (default: red). The reference for coordinates is the bottom left corner of the cell.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\laser[green]{(1,2)--(2,3)--(1,4)}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% You should consider using this command in the \env{puzzlebackground} environment.
+% \item[\cs{laserbeamsetup}\marg{options}] \DescribeMacro{\laserbeamsetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Magic Labyrinth}
+% \label{sec:pscmagiclabyrinth}
+% \begin{mydescription}
+% \item[\cs{magiclabyrinthcell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\magiclabyrinthcell}\mbox{}\\
+% sets a number into grid cell \marg{column} \marg{row}.
+% \item[\cs{mlline}\marg{Ti\textit{k}Z path}] \DescribeMacro{\mlline}\mbox{}\\
+% draws a line given by \marg{Ti\textit{k}Z path}.
+% \item[\cs{magiclabyrinthsetup}\marg{options}] \DescribeMacro{\magiclabyrinthsetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Magnets}
+% \label{sec:pscmagnets}
+% \begin{mydescription}
+% \item[\cs{plusH}\marg{csv list}] \DescribeMacro{\plusH}\mbox{}\\
+% typesets the numbers above the grid indicating how many positive poles are in the respective column. It expects a comma-separated list as an argument.
+% \item[\cs{minusH}\marg{csv list}] \DescribeMacro{\minusH}\mbox{}\\
+% typesets the numbers above the grid indicating how many negative poles are in the respective column.
+% \item[\cs{plusV}\marg{csv list}] \DescribeMacro{\plusV}\mbox{}\\
+% typesets the numbers left to the grid indicating how many positive poles are in the respective row.
+% \item[\cs{minusV}\marg{csv list}] \DescribeMacro{\minusV}\mbox{}\\
+% typesets the numbers left to the grid indicating how many negative pole ares in the respective row.
+% \item[\cs{magnetsH}\marg{csv list}] \DescribeMacro{\magnetsH}\mbox{}\\
+% typesets non-magnetic horizontal plates by using the \texttt{column}/\texttt{row} format in \marg{csv list}.
+% \subparagraph{\texttt{magnetsV}}
+% \item[\cs{magnetsV}\marg{csv list}] \DescribeMacro{\magnetsV}\mbox{}\\
+% typesets non-magnetic vertical plates by using the \texttt{column}/\texttt{row} format in \marg{csv list}.
+% \item[\cs{PMH}\marg{csv list}] \DescribeMacro{\PMH}\DescribeMacro{\MPH}\DescribeMacro{\PMV}\DescribeMacro{\MPV}\mbox{}\\
+% draws horizontal magnetic plates with \fbox{$+$ $-$} arrangement. It expects the \texttt{column}/\texttt{row} format in \marg{csv list}. You can typeset the three other magnetic arrangements by using the \cmd\MPH, \cmd\PMV\ and \cmd\MPV\ commands.
+% \item[\cs{magnetssetup}\marg{options}] \DescribeMacro{\magnetssetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Masyu}
+% \label{sec:pscmasyu}
+% \begin{mydescription}
+% \item[\cs{masyucell}\marg{column}\marg{row}\marg{element}] \DescribeMacro{\masyucell}\mbox{}\\
+% sets an element into grid cell \marg{column} \marg{row}.
+% \item[\cs{MasyuW}] \DescribeMacro{\MasyuW}\mbox{}\\
+% draws an empty (white) circle.
+% \item[\cs{MasyuB}] \DescribeMacro{\MasyuB}\mbox{}\\
+% draws a black circle.
+% \item[\cs{masyuline}\marg{Ti\textit{k}Z path}] \DescribeMacro{\masyuline}\mbox{}\\
+% draws a line given by \marg{Ti\textit{k}Z path}.
+% \item[\cs{masyusetup}\marg{options}] \DescribeMacro{\masyusetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Minesweeper}
+% \label{sec:pscminesweeper}
+% \begin{mydescription}
+% \item[\cs{Mine}] \DescribeMacro{\Mine}\mbox{}\\
+% draws a mine. It can be used in commands like \cmd\setcell\ or \cmd\setrow!
+% \item[\cs{minesweepersetup}\marg{options}] \DescribeMacro{\minesweepersetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Nonogram}
+% \label{sec:pscnonogram}
+% \begin{mydescription}
+% \item[\cs{nonogramrow}\marg{row}\marg{csv list}] \DescribeMacro{\nonogramrow}\mbox{}\\
+% sets the contents of row \marg{row}. In \marg{csv list} it expects the \texttt{column/length} format.
+% \item[\cs{nonogramcolumn}\marg{column}\marg{csv list}] \DescribeMacro{\nonogramcolumn}\mbox{}\\
+% sets the contents of column \marg{column}. In \marg{csv list} it expects the \texttt{row/length} format.
+% \item[\cs{nonogramV}\marg{csv list}] \DescribeMacro{\nonogramV}\mbox{}\\
+% sets the contents of the extra cells left to the grid. By definition, the first number is always typeset next to the grid!
+% \item[\cs{nonogramH}\marg{csv list}] \DescribeMacro{\nonogramH}\mbox{}\\
+% sets the contents of the extra cells on top of the grid.
+% \item[\cs{puzzlestrut}] \DescribeMacro{\puzzlestrut}\mbox{}\\
+% serves the height adjustment depending on option \texttt{extracells} when you want to typeset puzzle and solution (without extra cells) next to each other.
+% \item[\cs{nonogramsetup}\marg{options}] \DescribeMacro{\nonogramsetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Number Link}
+% \label{sec:pscnumberlink}
+% \begin{mydescription}
+% \item[\cs{numberlinkcell}\marg{column}\marg{row}\marg{element}] \DescribeMacro{\numberlinkcell}\mbox{}\\
+% sets a number or letter into grid cell \marg{column}\marg{row}.
+% \item[\cs{link}\marg{\marg{Ti\textit{k}Z path}}] \DescribeMacro{\link}\mbox{}\\
+% draws a line given by \marg{Ti\textit{k}Z path}.
+% \item[\cs{numberlinksetup}\marg{options}] \DescribeMacro{\numberlinksetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Resuko}
+% \label{sec:pscresuko}
+% \begin{mydescription}
+% \item[\cs{resukocell}\marg{column}\marg{row}\marg{element}] \DescribeMacro{\resukocell}\mbox{}\\
+% sets the \marg{element} into grid cell \marg{column}\marg{row}.
+% \subparagraph{\texttt{Track tiles}}
+% \DescribeMacro{\Straight}\DescribeMacro{\StraightH}\DescribeMacro{\StraightV}\DescribeMacro{\Cross}\DescribeMacro{\CrossH}\DescribeMacro{\CrossV}
+%
+% \DescribeMacro{\CurveTL}\DescribeMacro{\CurveTR}\DescribeMacro{\CurveBL}\DescribeMacro{\CurveBR}\DescribeMacro{\Graveltrap}
+% You can use the following commands to draw different track tiles, e.g. with the \cmd\resukocell\ command:
+%
+% \begin{center}
+% \begin{tabular}{rlrlrl}
+% \raisebox{-7pt}{\Straight} & \cmd\Straight & \raisebox{-7pt}{\StraightH} & \cmd\StraightH & \raisebox{-7pt}{\StraightV} & \cmd\StraightV \\
+% & & & & & \\
+% \raisebox{-7pt}{\Cross} & \cmd\Cross & \raisebox{-7pt}{\CrossH} & \cmd\CrossH & \raisebox{-7pt}{\CrossV} & \cmd\CrossV \\
+% & & & & & \\
+% \raisebox{-7pt}{\CurveTL} & \cmd\CurveTL & \raisebox{-7pt}{\CurveTR} & \cmd\CurveTR & \raisebox{-7pt}{\CurveBL} & \cmd\CurveBL \\
+% & & & & & \\
+% \raisebox{-7pt}{\CurveBR} & \cmd\CurveBR & \raisebox{-7pt}{\Graveltrap} & \cmd\Graveltrap & \\
+% \end{tabular}
+% \end{center}
+%
+% \item[\cs{pitlane}\marg{column}\marg{row}\marg{direction}] \DescribeMacro{\pitlane}\mbox{}\\
+% draws the pit lane in grid cell \{\marg{column}\}\{\marg{row}\} with \{\marg{direction}\} V or H.
+% \item[\cs{parkinglot}\marg{column}\marg{row}] \DescribeMacro{\parkinglot}\mbox{}\\
+% draws the parking lot in grid cell \marg{column}\marg{row}.
+% \item[\cs{trackH}\marg{csv list}] \DescribeMacro{\trackH}\mbox{}\\
+% typesets the track tiles below the grid indicating how many different tiles are in the respective column. It expects a comma-separated list as an argument with the format \texttt{straights/curves/intersections}.
+% \item[\cs{trackV}\marg{csv list}] \DescribeMacro{\trackV}\mbox{}\\
+% typesets the track tiles left to the grid.
+% \item[\cs{track}\marg{Ti\textit{k}Z path}] \DescribeMacro{\track}\mbox{}\\
+% draws the race track given by \marg{Ti\textit{k}Z path}. The design of the race track is based on \href{http://tex.stackexchange.com/users/3708/frederic}{Frédéric}'s answer to this \href{http://tex.stackexchange.com/questions/115923/crossing-paths-in-tikz-without-intersection}{question} on \TeX.sx. The design with auto-generated bridges will only work, if the path is not constructed with an intersection point. It's recommended to start the path on a standard straight and define the path from corner to corner with \cmd\xtikzpath.
+% \item[\cs{resukosetup}\marg{options}] \DescribeMacro{\resukosetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Schatzsuche}
+% \label{sec:pscschatzsuche}
+% \begin{mydescription}
+% \item[\cs{Diamond}] \DescribeMacro{\Diamond}\mbox{}\\
+% draws a diamond. It can be used in commands like \cmd\setcell\ or \cmd\setrow!
+% \item[\cs{schatzsuchesetup}\marg{options}] \DescribeMacro{\schatzsuchesetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Skyline}
+% \label{sec:pscskyline}
+% \begin{mydescription}
+% \item[\cs{skylineT}\marg{csv list}] \DescribeMacro{\skylineT}\mbox{}\\
+% typesets the numbers above the grid indicating how many skycrapers are visible. It expects a comma-separated list as an argument.
+% \item[\cs{skylineB}\marg{csv list}] \DescribeMacro{\skylineB}\mbox{}\\
+% typesets the numbers below the grid.
+% \item[\cs{skylineL}\marg{csv list}] \DescribeMacro{\skylineL}\mbox{}\\
+% typesets the numbers left to the grid.
+% \item[\cs{skylineR}\marg{csv list}] \DescribeMacro{\skylineR}\mbox{}\\
+% typesets the numbers right to the grid.
+% \item[\cs{skylinecell}\marg{column}\marg{row}\}\marg{height}] \DescribeMacro{\skylinecell}\mbox{}\\
+% sets \marg{height} into grid cell \marg{column}\marg{row}.
+% \item[\cs{skylinesetup}\marg{options}] \DescribeMacro{\skylinesetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Slitherlink}
+% \label{sec:pscslitherlink}
+% \begin{mydescription}
+% \item[\cs{slitherlinkcell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\slitherlinkcell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column}\marg{row}.
+% \item[\cs{slitherlinksetup}\marg{options}] \DescribeMacro{\slitherlinksetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Star Battle}
+% \label{sec:pscstarbattle}
+% \begin{mydescription}
+% \item[\cs{starbattlecell}\marg{column}\marg{row}\marg{element}] \DescribeMacro{\starbattlecell}\mbox{}\\
+% sets \marg{element} into grid cell \marg{column}\marg{row}, e.g. the \cmd\Star\ command.
+% \item[\cs{starbattlesetup}\marg{options}] \DescribeMacro{\starbattlesetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Stars and Arrows}
+% \label{sec:pscstarsandarrows}
+% \begin{mydescription}
+% \item[\cs{starsH}\marg{csv list}] \DescribeMacro{\starsH}\mbox{}\\
+% typesets the numbers above the grid indicating how many stars are in the respective column. It expects a comma-separated list as an argument.
+% \item[\cs{starsV}\marg{csv list}] \DescribeMacro{\starsV}\mbox{}\\
+% typesets the numbers left to the grid.
+% \item[\cs{Star}] \DescribeMacro{\Star}\mbox{}\\
+% draws a star. It can be used in commands like \cmd\setcell\ or \cmd\setrow!
+% \subparagraph{Arrows}
+% \DescribeMacro{\Right}\DescribeMacro{\RightUp}\DescribeMacro{\Up}\DescribeMacro{\LeftUp}
+%
+% \DescribeMacro{\Left}\DescribeMacro{\LeftDown}\DescribeMacro{\Down}\DescribeMacro{\RightDown}
+% You can use the following commands to draw different arrows:
+%
+% \begin{center}
+% \begin{tabular}{lrlrlrlr}
+% \cmd\Right & \raisebox{3pt}{\Right} & \cmd\RightUp & \raisebox{-4pt}{\RightUp} & \cmd\Up & \raisebox{-7pt}{\Up} & \cmd\LeftUp & \raisebox{-4pt}{\LeftUp} \\
+% \cmd\Left & \raisebox{3pt}{\Left} & \cmd\LeftDown & \raisebox{-4pt}{\LeftDown} & \cmd\Down & \raisebox{-7pt}{\Down} & \cmd\RightDown & \raisebox{-4pt}{\RightDown} \\
+% \end{tabular}
+% \end{center}
+% \item[\cs{starsandarrowssetup}\marg{options}] \DescribeMacro{\starsandarrowssetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Sudoku}
+% \label{sec:psclpsudoku}
+% \begin{mydescription}
+% \item[\cs{lpsudokucell}\marg{column}\marg{row}\marg{number}] \DescribeMacro{\lpsudokucell}\mbox{}\\
+% sets \marg{number} into grid cell \marg{column}\marg{row}.
+% \item[\cs{lpsudokusetup}\marg{options}] \DescribeMacro{\lpsudokusetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Sun and Moon}
+% \label{sec:pscsunandmoon}
+% \begin{mydescription}
+% \item[\cs{Star}] \DescribeMacro{\Star}\mbox{}\\
+% draws a star. It can be used in commands like \cmd\setcell\ or \cmd\setrow!
+% \item[\cs{Cloud}] \DescribeMacro{\Cloud}\mbox{}\\
+% draws a dark cloud.
+% \subparagraph{Howl at the Moon}
+% \DescribeMacro{\Moon}\DescribeMacro{\MoonT}\DescribeMacro{\MoonB}\DescribeMacro{\MoonR}\DescribeMacro{\MoonL}
+%
+% \DescribeMacro{\MoonTR}\DescribeMacro{\MoonTL}\DescribeMacro{\MoonBR}\DescribeMacro{\MoonBL}
+% You can use the following commands to draw different iluminated moons:
+%
+% \begin{center}
+% \begin{tabular}{lrlrlr}
+% \cmd\Moon & \raisebox{-4pt}{\Moon} & \cmd\MoonT & \raisebox{-4pt}{\MoonT} & \cmd\MoonB & \raisebox{-4pt}{\MoonB} \\
+% & & & & & \\
+% \cmd\MoonR & \raisebox{-4pt}{\MoonR} & \cmd\MoonL & \raisebox{-4pt}{\MoonL} & \cmd\MoonTR & \raisebox{-4pt}{\MoonTR} \\
+% & & & & & \\
+% \cmd\MoonTL & \raisebox{-4pt}{\MoonTL} & \cmd\MoonBR & \raisebox{-4pt}{\MoonBR} & \cmd\MoonBL & \raisebox{-4pt}{\MoonBL} \\
+% \end{tabular}
+% \end{center}
+% \item[\cs{sunandmoonssetup}\marg{options}] \DescribeMacro{\sunandmoonssetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Tents and Trees}
+% \label{sec:psctentsandtrees}
+% \begin{mydescription}
+% \item[\cs{tentH}\marg{csv list}] \DescribeMacro{\tentH}\mbox{}\\
+% typesets the numbers above the grid indicating how many tents are in the respective column. It expects a comma-separated list as an argument.
+% \item[\cs{tentV}\marg{csv list}] \DescribeMacro{\tentV}\mbox{}\\
+% typesets the numbers left to the grid.
+% \item[\cs{Tree}] \DescribeMacro{\Tree}\mbox{}\\
+% draws a tree. It can be used in commands like \cmd\setcell\ or \cmd\setrow! The design of the tree is based on \href{http://tex.stackexchange.com/users/3144/alain-matthes}{Alain Matthes}' answer to this \href{http://tex.stackexchange.com/questions/39149/how-can-we-draw-a-christmas-tree-with-decorations-using-tikz}{question} on \TeX.sx.
+% \item[\cs{Tent}] \DescribeMacro{\Tent}\mbox{}\\
+% draws a tent.
+% \item[\cs{tentsandtreessetup}\marg{options}] \DescribeMacro{\tentsandtreessetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \paragraph{Tunnel}
+% \label{sec:psctunnel}
+% \begin{mydescription}
+% \item[\cs{tunnelH}\marg{csv list}] \DescribeMacro{\tunnelH}\mbox{}\\
+% typesets the numbers above the grid indicating how many tube segments are in the respective column. It expects a comma-separated list as an argument.
+% \item[\cs{tunnelV}\marg{csv list}] \DescribeMacro{\tunnelV}\mbox{}\\
+% typesets the numbers left to the grid.
+% \item[\cs{portal}\marg{column}\}\{\marg{row}] \DescribeMacro{\portal}\mbox{}\\
+% is used for the placement of tunnel portals in the grid.
+% \item[\cs{tube}\marg{Ti\textit{k}Z path}] \DescribeMacro{\tube}\mbox{}\\
+% draws the tunnel tube given by \marg{Ti\textit{k}Z path}. The reference for coordinates is the center of the cell. The design of the tube is based on \href{http://tex.stackexchange.com/users/16772/xoff}{Xoff}'s answer to this \href{http://tex.stackexchange.com/questions/109410/how-to-pimp-my-tube}{question} on \TeX.sx.
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\tube{(1.5,2.5)--(3.5,2.5)--(3.5,4.5)}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \item[\cs{tunnelsetup}\marg{options}] \DescribeMacro{\tunnelsetup}\mbox{}\\
+% resets the options with global scope.
+% \end{mydescription}
+% \section{Examples}
+% \subsection{2D-Sudoku}
+% Fill every row, every column and each of the two diagonals -- if indicated -- with numbers from 1 to SIZE of the grid.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{ddsudoku}
+% \framepuzzle
+% \filldiagonals[orange!50]
+% \ddsudokucell{1}{5}{1}
+% \ddsudokucell{1}{4}{3}
+% \ddsudokucell{2}{3}{4}
+% \ddsudokucell{4}{1}{3}
+% \ddsudokucell{4}{3}{2}
+% \ddsudokucell{5}{4}{4}
+% \end{ddsudoku}
+% \hspace{1.5cm}
+% \begin{ddsudoku}
+% \framepuzzle
+% \filldiagonals[orange!50]
+% \setrow{5}{1,3,4,5,2}
+% \setrow{4}{3,2,5,1,4}
+% \setrow{3}{5,4,3,2,1}
+% \setrow{2}{2,5,1,4,3}
+% \setrow{1}{4,1,2,3,5}
+% \end{ddsudoku}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{ddsudoku}
+ \framepuzzle
+ \filldiagonals[orange!50]
+ \ddsudokucell{1}{5}{1}
+ \ddsudokucell{1}{4}{3}
+ \ddsudokucell{2}{3}{4}
+ \ddsudokucell{4}{1}{3}
+ \ddsudokucell{4}{3}{2}
+ \ddsudokucell{5}{4}{4}
+ \end{ddsudoku}
+ \hspace{1.5cm}
+ \begin{ddsudoku}
+ \framepuzzle
+ \filldiagonals[orange!50]
+ \setrow{5}{1,3,4,5,2}
+ \setrow{4}{3,2,5,1,4}
+ \setrow{3}{5,4,3,2,1}
+ \setrow{2}{2,5,1,4,3}
+ \setrow{1}{4,1,2,3,5}
+ \end{ddsudoku}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Battleship}
+% Try to find the positions of the ships listed below the puzzle. The numbers on the side of the puzzle reveals how many ship segments can be found in the rows and columns. All remaining fields indicate 'water'. Consider the following rules: The ships are arranged horizontally and vertically. No ship touches another ship at any point, not even diagonally.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{battleship}
+% \placesegment{4}{1}{\ShipR}
+% \shipH{4,1,2,2,2}
+% \shipV{3,1,4,0,3}
+% \shipbox{3,3,2,2,1}
+% \end{battleship}
+% \hspace{1.5cm}
+% \begin{battleship}
+% \placeship{V}{1}{1}{3}
+% \placeship{H}{1}{5}{2}
+% \placeship{H}{3}{1}{2}
+% \placeship{H}{3}{3}{3}
+% \placeship{H}{5}{5}{1}
+% \shipH{4,1,2,2,2}
+% \shipV{3,1,4,0,3}
+% \end{battleship}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{battleship}
+ \placesegment{4}{1}{\ShipR}
+ \shipH{4,1,2,2,2}
+ \shipV{3,1,4,0,3}
+ \shipbox{3,3,2,2,1}
+ \end{battleship}
+ \hspace{1.5cm}
+ \begin{battleship}
+ \placeship{V}{1}{1}{3}
+ \placeship{H}{1}{5}{2}
+ \placeship{H}{3}{1}{2}
+ \placeship{H}{3}{3}{3}
+ \placeship{H}{5}{5}{1}
+ \shipH{4,1,2,2,2}
+ \shipV{3,1,4,0,3}
+ \end{battleship}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid.}
+% \optitem{shipcolor}{green}{sets the color of the ship segments.}
+% \optitem{\envoption{width}}{6cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.15cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{sbindent}}{0.75cm}{defines the indent of the ship box below the grid.}
+% \optitem{\envoption{sbwidth}}{5.15cm}{specifies the width of the minipage, in which the ships are typeset.}
+% \optitem{\envoption{sbshipscale}}{1}{scales the size of the ships in the ship box.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Bokkusu}
+% Black out some of the grid cells. The numbers on the left and the bottom edge of the grid indicate the values of the cells for adding up. The numbers on the right and the top edge of the grid specify the sums of the values of the colored cells.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{bokkusu}
+% \valueH{1,2,3,4,5}
+% \valueV{1,2,3,4,5}
+% \sumH{7,1,11,9,6}
+% \sumV{2,12,5,13,?}
+% \end{bokkusu}
+% \hspace{1.5cm}
+% \begin{bokkusu}
+% \valueH{1,2,3,4,5}
+% \valueV{1,2,3,4,5}
+% \sumH{7,1,11,9,6}
+% \sumV{2,12,5,13,?}
+% \fillrow{1}{0,1,0,0,0}
+% \fillrow{2}{0,0,1,1,1}
+% \fillrow{3}{1,0,0,1,0}
+% \fillrow{4}{1,0,1,1,1}
+% \fillrow{5}{0,0,1,0,0}
+% \end{bokkusu}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{bokkusu}
+ \valueH{1,2,3,4,5}
+ \valueV{1,2,3,4,5}
+ \sumH{7,1,11,9,6}
+ \sumV{2,12,5,13,?}
+ \end{bokkusu}
+ \hspace{1.5cm}
+ \begin{bokkusu}
+ \valueH{1,2,3,4,5}
+ \valueV{1,2,3,4,5}
+ \sumH{7,1,11,9,6}
+ \sumV{2,12,5,13,?}
+ \fillrow{5}{0,0,1,0,0}
+ \fillrow{4}{1,0,1,1,1}
+ \fillrow{3}{1,0,0,1,0}
+ \fillrow{2}{0,0,1,1,1}
+ \fillrow{1}{0,1,0,0,0}
+ \end{bokkusu}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{6.7cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.85cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{black}{specifies the color for coloring the cells.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Bridges}
+% Connect all the islands (circles) located in the grid by bridges. The bridges may only be routed horizontally and vertically. Islands may be connected by a maximum of two bridges. The bridges must neither overlap nor cross. They may also not be built over islands. The numbers in the islands indicate how many bridges originate from this island. All islands must be fully connected.
+%
+% \subsubsection{Example}
+% \colorlet{LP@c@bridge}{Teal}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{bridges}
+% \framepuzzle
+% \bridgesrow{8}{{},4,{},{},{},5,{},2}
+% \bridgesrow{7}{{},{},1}
+% \bridgesrow{5}{{},{},3,{},4}
+% \bridgesrow{4}{{},3,{},1,{},2}
+% \bridgesrow{3}{{},{},{},{},{},{},{}}
+% \bridgesrow{2}{{},2,{},{},5,{},{},2}
+% \end{bridges}
+% \hspace{1.5cm}
+% \begin{bridges}[grid=none]
+% \framepuzzle
+% \bridgesrow{8}{{},4,{},{},{},5,{},2}
+% \bridgesrow{7}{{},{},1}
+% \bridgesrow{5}{{},{},3,{},4}
+% \bridgesrow{4}{{},3,{},1,{},2}
+% \bridgesrow{3}{{},{},{},{},{},{},{}}
+% \bridgesrow{2}{{},2,{},{},5,{},{},2}
+% \bridge[double]{\tikzpath{2}{4}{8,8,8,8,6,6,6,6,2,2,2,2}}
+% \bridge[double]{\tikzpath{2}{2}{6,6,6,8,8,8,4,4}}
+% \bridge{\tikzpath{2}{4}{6,6}}
+% \bridge{\tikzpath{3}{5}{8,8}}
+% \bridge{\tikzpath{5}{2}{6,6,6,8,8,8,8,8,8,4,4}}
+% \end{bridges}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\colorlet{LP@c@bridge}{Teal}
+\begin{center}
+ \begin{bridges}
+ \framepuzzle
+ \bridgesrow{8}{{},4,{},{},{},5,{},2}
+ \bridgesrow{7}{{},{},1}
+ \bridgesrow{5}{{},{},3,{},4}
+ \bridgesrow{4}{{},3,{},1,{},2}
+ \bridgesrow{3}{{},{},{},{},{},{},{}}
+ \bridgesrow{2}{{},2,{},{},5,{},{},2}
+ \end{bridges}
+ \hspace{1.5cm}
+ \begin{bridges}[grid=none]
+ \framepuzzle
+ \bridgesrow{8}{{},4,{},{},{},5,{},2}
+ \bridgesrow{7}{{},{},1}
+ \bridgesrow{5}{{},{},3,{},4}
+ \bridgesrow{4}{{},3,{},1,{},2}
+ \bridgesrow{3}{{},{},{},{},{},{},{}}
+ \bridgesrow{2}{{},2,{},{},5,{},{},2}
+ \bridge[double]{\tikzpath{2}{4}{8,8,8,8,6,6,6,6,2,2,2,2}}
+ \bridge[double]{\tikzpath{2}{2}{6,6,6,8,8,8,4,4}}
+ \bridge{\tikzpath{2}{4}{6,6}}
+ \bridge{\tikzpath{3}{5}{8,8}}
+ \bridge{\tikzpath{5}{2}{6,6,6,8,8,8,8,8,8,4,4}}
+ \end{bridges}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{6.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{6.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{green}{specifies the color for coloring the islands.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \optitem{\envoption{grid}}{dashed}{sets the style of the grid. Possible values: \underline{\texttt{dashed}}, \texttt{none}, \texttt{solid}}
+% \end{optionlist}
+%
+% \subsection{Chaos Sudoku}
+% Fill the cells of an area with numbers from 1 to N of the N*N grid. Each number can appear only once - in each area, column, row or diagonal if indicated.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{chaossudoku}
+% \chaossudokucell{1}{1}{3}
+% \chaossudokucell{1}{5}{4}
+% \chaossudokucell{3}{2}{4}
+% \chaossudokucell{4}{2}{5}
+% \chaossudokucell{5}{5}{2}
+% \begin{puzzlebackground}
+% \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1)--(1,1)}
+% \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5)--(2,2)--(1,2)}
+% \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4)--(5,2)--(4,2)--(4,3)--(2,3)}
+% \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5)--(5,4)--(3,4)}
+% \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5)--(6,1)--(4,1)}
+% \end{puzzlebackground}
+% \end{chaossudoku}
+% \hspace{1.5cm}
+% \begin{chaossudoku}
+% \setrow{5}{4,3,5,1,2}
+% \setrow{4}{2,1,3,4,5}
+% \setrow{3}{5,4,2,3,1}
+% \setrow{2}{1,2,4,5,3}
+% \setrow{1}{3,5,1,2,4}
+% \begin{puzzlebackground}
+% \fillarea{Wheat}{\tikzpath{1}{1}{8,6,8,6,6,2,2,4,4,4}}
+% \fillarea{HotPink!30}{\tikzpath{1}{2}{8,8,8,8,6,6,2,4,2,2,2,4}}
+% \fillarea{GreenYellow}{\tikzpath{2}{3}{8,8,6,2,6,6,2,2,4,8,4,4}}
+% \fillarea{LightBlue}{\tikzpath{3}{4}{8,8,6,6,6,2,4,2,4,4}}
+% \fillarea{LightYellow}{\tikzpath{4}{1}{8,6,8,8,8,6,2,2,2,2,4,4}}
+% \end{puzzlebackground}
+% \end{chaossudoku}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{chaossudoku}
+ \chaossudokucell{1}{1}{3}
+ \chaossudokucell{1}{5}{4}
+ \chaossudokucell{3}{2}{4}
+ \chaossudokucell{4}{2}{5}
+ \chaossudokucell{5}{5}{2}
+ \begin{puzzlebackground}
+ \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1)
+ --(1,1)}
+ \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5)
+ --(2,2)--(1,2)}
+ \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4)
+ --(5,2)--(4,2)--(4,3)--(2,3)}
+ \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5)
+ --(5,4)--(3,4)}
+ \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5)
+ --(6,1)--(4,1)}
+ \end{puzzlebackground}
+ \end{chaossudoku}
+ \hspace{1.5cm}
+ \begin{chaossudoku}
+ \setrow{5}{4,3,5,1,2}
+ \setrow{4}{2,1,3,4,5}
+ \setrow{3}{5,4,2,3,1}
+ \setrow{2}{1,2,4,5,3}
+ \setrow{1}{3,5,1,2,4}
+ \begin{puzzlebackground}
+ \fillarea{Wheat}{(1,1)--(1,2)--(2,2)--(2,3)--(4,3)--(4,1)
+ --(1,1)}
+ \fillarea{HotPink!30}{(1,2)--(1,6)--(3,6)--(3,5)--(2,5)
+ --(2,2)--(1,2)}
+ \fillarea{GreenYellow}{(2,3)--(2,5)--(3,5)--(3,4)--(5,4)
+ --(5,2)--(4,2)--(4,3)--(2,3)}
+ \fillarea{LightBlue}{(3,4)--(3,6)--(6,6)--(6,5)--(5,5)
+ --(5,4)--(3,4)}
+ \fillarea{LightYellow}{(4,1)--(4,2)--(5,2)--(5,5)--(6,5)
+ --(6,1)--(4,1)}
+ \end{puzzlebackground}
+ \end{chaossudoku}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Four Winds}
+% Fill all cells with light rays. These may not intersect. Cells with numbers represent the lighting system that lits horizontally and vertically. The number indicates how many cells are illuminated. Cells with numbers do not count. No cell must remain empty.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{fourwinds}
+% \framepuzzle
+% \fourwindscell{1}{2}{2}{}
+% \fourwindscell{1}{5}{2}{}
+% \fourwindscell{2}{4}{3}{}
+% \fourwindscell{3}{3}{3}{}
+% \fourwindscell{4}{1}{4}{}
+% \fourwindscell{5}{5}{5}{}
+% \end{fourwinds}
+% \hspace{1.5cm}
+% \begin{fourwinds}
+% \framepuzzle
+% \fourwindscell{1}{2}{2}{2/1,6/1}
+% \fourwindscell{1}{5}{2}{2/2}
+% \fourwindscell{2}{4}{3}{8/1,6/2}
+% \fourwindscell{3}{3}{3}{4/1,6/1,2/1}
+% \fourwindscell{4}{1}{4}{4/2,6/1,8/1}
+% \fourwindscell{5}{5}{5}{4/2,2/3}
+% \end{fourwinds}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{fourwinds}
+ \framepuzzle
+ \fourwindscell{1}{2}{2}{}
+ \fourwindscell{1}{5}{2}{}
+ \fourwindscell{2}{4}{3}{}
+ \fourwindscell{3}{3}{3}{}
+ \fourwindscell{4}{1}{4}{}
+ \fourwindscell{5}{5}{5}{}
+\end{fourwinds}
+\hspace{1.5cm}
+\begin{fourwinds}
+ \framepuzzle
+ \fourwindscell{1}{2}{2}{2/1,6/1}
+ \fourwindscell{1}{5}{2}{2/2}
+ \fourwindscell{2}{4}{3}{8/1,6/2}
+ \fourwindscell{3}{3}{3}{4/1,6/1,2/1}
+ \fourwindscell{4}{1}{4}{4/2,6/1,8/1}
+ \fourwindscell{5}{5}{5}{4/2,2/3}
+\end{fourwinds}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{blue}{sets the color of the lines.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Hakyuu}
+% Fill the cells of an area with numbers from 1 to SIZE of the area. If there are two cells with the same number N in a row or a column, there must be at least N cells between those two cells.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{hakyuu}
+% \hakyuucell{1}{5}{2}
+% \hakyuucell{3}{5}{6}
+% \hakyuucell{4}{5}{5}
+% \hakyuucell{4}{4}{4}
+% \hakyuucell{1}{3}{3}
+% \hakyuucell{2}{2}{2}
+% \hakyuucell{5}{2}{5}
+% \hakyuucell{4}{1}{1}
+% \begin{puzzlebackground}
+% \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)}
+% \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)--(3,4)--(1,4)}
+% \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)--(4,4)--(4,3)--(2,3)--(2,4)}
+% \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)--(5,4)--(5,5)}
+% \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)--(2,2)}
+% \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)--(6,1)--(2,1)}
+% \end{puzzlebackground}
+% \end{hakyuu}
+% \hspace{1.5cm}
+% \begin{hakyuu}
+% \setrow{5}{2,3,6,5,4}
+% \setrow{4}{1,7,3,4,2}
+% \setrow{3}{3,1,2,1,3}
+% \setrow{2}{1,2,1,3,5}
+% \setrow{1}{2,3,4,1,2}
+% \begin{puzzlebackground}
+% \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)}
+% \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)--(3,4)--(1,4)}
+% \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)--(4,4)--(4,3)--(2,3)--(2,4)}
+% \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)--(5,4)--(5,5)}
+% \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)--(2,2)}
+% \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)--(6,1)--(2,1)}
+% \end{puzzlebackground}
+% \end{hakyuu}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{hakyuu}
+ \hakyuucell{1}{5}{2}
+ \hakyuucell{3}{5}{6}
+ \hakyuucell{4}{5}{5}
+ \hakyuucell{4}{4}{4}
+ \hakyuucell{1}{3}{3}
+ \hakyuucell{2}{2}{2}
+ \hakyuucell{5}{2}{5}
+ \hakyuucell{4}{1}{1}
+ \begin{puzzlebackground}
+ \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)}
+ \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)
+ --(3,4)--(1,4)}
+ \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)
+ --(4,4)--(4,3)--(2,3)--(2,4)}
+ \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)
+ --(5,4)--(5,5)}
+ \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)
+ --(2,2)}
+ \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)
+ --(6,1)--(2,1)}
+ \end{puzzlebackground}
+ \end{hakyuu}
+ \hspace{1.5cm}
+ \begin{hakyuu}
+ \setrow{5}{2,3,6,5,4}
+ \setrow{4}{1,7,3,4,2}
+ \setrow{3}{3,1,2,1,3}
+ \setrow{2}{1,2,1,3,5}
+ \setrow{1}{2,3,4,1,2}
+ \begin{puzzlebackground}
+ \fillarea{Wheat}{(1,1)--(1,4)--(2,4)--(2,1)--(1,1)}
+ \fillarea{HotPink!30}{(1,4)--(1,6)--(6,6)--(6,5)--(3,5)
+ --(3,4)--(1,4)}
+ \fillarea{GreenYellow}{(2,4)--(3,4)--(3,5)--(5,5)--(5,4)
+ --(4,4)--(4,3)--(2,3)--(2,4)}
+ \fillarea{LightBlue}{(5,5)--(6,5)--(6,3)--(4,3)--(4,4)
+ --(5,4)--(5,5)}
+ \fillarea{LightSalmon!50}{(2,2)--(2,3)--(5,3)--(5,2)
+ --(2,2)}
+ \fillarea{LightYellow}{(2,1)--(2,2)--(5,2)--(5,3)--(6,3)
+ --(6,1)--(2,1)}
+ \end{puzzlebackground}
+ \end{hakyuu}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Hitori}
+% Black out some cells according to these specifications: In each row and each column a number may only occur once or can be completely blackened. The blackened cells can touch neither horizontal nor vertical. All non blackened cells must remain connected. Each number has its own color, which otherwise has no meaning.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{hitori}
+% \framepuzzle
+% \setcolorrow{5}{2,4,2,1,1}
+% \setcolorrow{4}{1,3,2,4,1}
+% \setcolorrow{3}{1,3,3,3,2}
+% \setcolorrow{2}{4,2,1,3,3}
+% \setcolorrow{1}{4,1,2,2,3}
+% \end{hitori}
+% \hspace{1.5cm}
+% \begin{hitori}
+% \framepuzzle
+% \setcolorrow{5}{2,4,0,1,0}
+% \setcolorrow{4}{0,3,2,4,1}
+% \setcolorrow{3}{1,0,3,0,2}
+% \setcolorrow{2}{4,2,1,3,0}
+% \setcolorrow{1}{0,1,0,2,3}
+% \end{hitori}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{hitori}
+ \framepuzzle
+ \setcolorrow{5}{2,4,2,1,1}
+ \setcolorrow{4}{1,3,2,4,1}
+ \setcolorrow{3}{1,3,3,3,2}
+ \setcolorrow{2}{4,2,1,3,3}
+ \setcolorrow{1}{4,1,2,2,3}
+ \end{hitori}
+ \hspace{1.5cm}
+ \begin{hitori}
+ \framepuzzle
+ \setcolorrow{5}{2,4,0,1,0}
+ \setcolorrow{4}{0,3,2,4,1}
+ \setcolorrow{3}{1,0,3,0,2}
+ \setcolorrow{2}{4,2,1,3,0}
+ \setcolorrow{1}{0,1,0,2,3}
+ \end{hitori}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Kakuro}
+% Enter numbers from 1 to 9 in any order into the blank cells. Here, the given horizontal and vertical sums should result. The zero does not occur. Within a summation, no number can be repeated.
+% \subsubsection{Example}
+% \definecolor{kakuro}{RGB}{155,206,167}
+% \kakurosetup{color=kakuro}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{kakuro}
+% \framepuzzle
+% \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black}
+% \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}}
+% \kakurorow{3}{\KKR{}{16},6,5,3,2}
+% \kakurorow{2}{\KKR{}{14},8,3,2,1}
+% \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black}
+% \end{kakuro}
+% \hspace{1.5cm}
+% \begin{kakuro}[solution]
+% \framepuzzle
+% \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black}
+% \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}}
+% \kakurorow{3}{\KKR{}{16},6,5,3,2}
+% \kakurorow{2}{\KKR{}{14},8,3,2,1}
+% \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black}
+% \end{kakuro}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\definecolor{kakuro}{RGB}{155,206,167}
+\kakurosetup{color=kakuro}
+\begin{center}
+ \begin{kakuro}
+ \framepuzzle
+ \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black}
+ \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}}
+ \kakurorow{3}{\KKR{}{16},6,5,3,2}
+ \kakurorow{2}{\KKR{}{14},8,3,2,1}
+ \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black}
+ \end{kakuro}
+ \hspace{1.5cm}
+ \begin{kakuro}[solution]
+ \framepuzzle
+ \kakurorow{5}{\Black,\KKR{23}{},\KKR{16}{},\KKR{10}{},\Black}
+ \kakurorow{4}{\KKR{}{14},9,1,4,\KKR{3}{}}
+ \kakurorow{3}{\KKR{}{16},6,5,3,2}
+ \kakurorow{2}{\KKR{}{14},8,3,2,1}
+ \kakurorow{1}{\Black,\KKR{}{8},7,1,\Black}
+ \end{kakuro}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{green}{specifies the color of the kakuro cells.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \optitem{\envoption{solution}}{false}{You can use the solution also for the puzzle, as the numbers in the cells are only typeset with option \envoption{solution}\texttt{=true}.}
+% \end{optionlist}
+%
+% \subsection{Kendoku}
+% Fill the cells with the numbers from 1 to SIZE of the puzzle. In the top left corner of a framed area, you will find the result of the specified arithmetic function, which is applied on the entered numbers. The numbers may occur only once in each row and column. The numbers of an area may not necessarily be different when they are in different rows or columns.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{kendoku}
+% \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}}
+% \framearea{black}{\tikzpath{1}{3}{8,6,2,4}}
+% \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}}
+% \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}}
+% \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}}
+% \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}}
+% \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{5}{3}{8,6,2,4}}
+% \framearea{black}{\tikzpath{5}{4}{8,6,2,4}}
+% \framearea{black}{\tikzpath{5}{5}{8,6,2,4}}
+% \setrule{1}{2}{8\times}
+% \setrule{1}{3}{5}
+% \setrule{1}{5}{4+}
+% \setrule{2}{3}{60\times}
+% \setrule{2}{5}{2\div}
+% \setrule{3}{2}{2-}
+% \setrule{3}{5}{75\times}
+% \setrule{4}{1}{8+}
+% \setrule{4}{2}{1-}
+% \setrule{4}{4}{2\times}
+% \setrule{5}{3}{1}
+% \setrule{5}{5}{2}
+% \end{kendoku}
+% \hspace{1.5cm}
+% \begin{kendoku}
+% \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}}
+% \framearea{black}{\tikzpath{1}{3}{8,6,2,4}}
+% \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}}
+% \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}}
+% \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}}
+% \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}}
+% \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{5}{3}{8,6,2,4}}
+% \framearea{black}{\tikzpath{5}{4}{8,6,2,4}}
+% \framearea{black}{\tikzpath{5}{5}{8,6,2,4}}
+% \setrule{1}{2}{8\times}
+% \setrule{1}{3}{5}
+% \setrule{1}{5}{4+}
+% \setrule{2}{3}{60\times}
+% \setrule{2}{5}{2\div}
+% \setrule{3}{2}{2-}
+% \setrule{3}{5}{75\times}
+% \setrule{4}{1}{8+}
+% \setrule{4}{2}{1-}
+% \setrule{4}{4}{2\times}
+% \setrule{5}{3}{1}
+% \setrule{5}{5}{2}
+% \setrow{5}{1,4,3,5,2}
+% \setrow{4}{3,2,5,1,4}
+% \setrow{3}{5,3,4,2,1}
+% \setrow{2}{2,5,1,4,3}
+% \setrow{1}{4,1,2,3,5}
+% \end{kendoku}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{kendoku}
+ \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}}
+ \framearea{black}{\tikzpath{1}{3}{8,6,2,4}}
+ \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}}
+ \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}}
+ \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}}
+ \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}}
+ \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{5}{3}{8,6,2,4}}
+ \framearea{black}{\tikzpath{5}{4}{8,6,2,4}}
+ \framearea{black}{\tikzpath{5}{5}{8,6,2,4}}
+ \setrule{1}{2}{8\times}
+ \setrule{1}{3}{5}
+ \setrule{1}{5}{4+}
+ \setrule{2}{3}{60\times}
+ \setrule{2}{5}{2\div}
+ \setrule{3}{2}{2-}
+ \setrule{3}{5}{75\times}
+ \setrule{4}{1}{8+}
+ \setrule{4}{2}{1-}
+ \setrule{4}{4}{2\times}
+ \setrule{5}{3}{1}
+ \setrule{5}{5}{2}
+ \end{kendoku}
+ \hspace{1.5cm}
+ \begin{kendoku}
+ \framearea{black}{\tikzpath{1}{1}{8,8,6,2,6,2,4,4}}
+ \framearea{black}{\tikzpath{1}{3}{8,6,2,4}}
+ \framearea{black}{\tikzpath{1}{4}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{2}{2}{8,8,6,6,2,4,2,4}}
+ \framearea{black}{\tikzpath{2}{4}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{3}{1}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{3}{4}{8,8,6,6,2,4,2,4}}
+ \framearea{black}{\tikzpath{4}{1}{8,6,6,2,4,4}}
+ \framearea{black}{\tikzpath{4}{2}{8,6,6,2,4,4}}
+ \framearea{black}{\tikzpath{4}{3}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{5}{3}{8,6,2,4}}
+ \framearea{black}{\tikzpath{5}{4}{8,6,2,4}}
+ \framearea{black}{\tikzpath{5}{5}{8,6,2,4}}
+ \setrule{1}{2}{8\times}
+ \setrule{1}{3}{5}
+ \setrule{1}{5}{4+}
+ \setrule{2}{3}{60\times}
+ \setrule{2}{5}{2\div}
+ \setrule{3}{2}{2-}
+ \setrule{3}{5}{75\times}
+ \setrule{4}{1}{8+}
+ \setrule{4}{2}{1-}
+ \setrule{4}{4}{2\times}
+ \setrule{5}{3}{1}
+ \setrule{5}{5}{2}
+ \setrow{5}{1,4,3,5,2}
+ \setrow{4}{3,2,5,1,4}
+ \setrow{3}{5,3,4,2,1}
+ \setrow{2}{2,5,1,4,3}
+ \setrow{1}{4,1,2,3,5}
+ \end{kendoku}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Killer Sudoku}
+% Fill the cells with the numbers from 1 to SIZE of the puzzle. The numbers may occur only once in each row, column and colored area if specified. In the top left corner of a framed area, you will find the sum of the entered numbers. The numbers of an area may not necessarily be different, when they are in different rows or columns. But they must be different, when additional colored areas are specified.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{killersudoku}[columns=4,rows=4,scale=1.11]
+% \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}}
+% \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}}
+% \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}}
+% \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}}
+% \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}}
+% \begin{puzzlebackground}
+% \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}}
+% \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}}
+% \end{puzzlebackground}
+% \setrule{1}{2}{7}
+% \setrule{1}{4}{7}
+% \setrule{2}{1}{9}
+% \setrule{2}{4}{6}
+% \setrule{3}{4}{5}
+% \setrule{4}{3}{6}
+% \end{killersudoku}
+% \hspace{1.5cm}
+% \begin{killersudoku}[columns=4,rows=4,scale=1.11]
+% \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}}
+% \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}}
+% \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}}
+% \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}}
+% \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}}
+% \begin{puzzlebackground}
+% \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}}
+% \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}}
+% \end{puzzlebackground}
+% \setrule{1}{2}{7}
+% \setrule{1}{4}{7}
+% \setrule{2}{1}{9}
+% \setrule{2}{4}{6}
+% \setrule{3}{4}{5}
+% \setrule{4}{3}{6}
+% \setrow{4}{3,2,4,1}
+% \setrow{3}{4,1,3,2}
+% \setrow{2}{2,4,1,3}
+% \setrow{1}{1,3,2,4}
+% \end{killersudoku}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{killersudoku}
+ \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}}
+ \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}}
+ \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}}
+ \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}}
+ \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}}
+ \begin{puzzlebackground}
+ \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}}
+ \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}}
+ \end{puzzlebackground}
+ \setrule{1}{2}{7}
+ \setrule{1}{4}{7}
+ \setrule{2}{1}{9}
+ \setrule{2}{4}{6}
+ \setrule{3}{4}{5}
+ \setrule{4}{3}{6}
+ \end{killersudoku}
+ \hspace{1.5cm}
+ \begin{killersudoku}
+ \framearea{black}{\tikzpath{1}{1}{8,8,6,6,2,4,2,4}}
+ \framearea{black}{\tikzpath{1}{3}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{2}{1}{8,6,6,6,2,4,4,4}}
+ \framearea{black}{\tikzpath{2}{3}{8,8,6,2,6,2,4,4}}
+ \framearea{black}{\tikzpath{3}{2}{8,6,8,6,2,2,4,4}}
+ \framearea{black}{\tikzpath{3}{4}{8,6,6,2,4,4}}
+ \begin{puzzlebackground}
+ \colorarea{orange!20}{\tikzpath{1}{1}{8,8,6,6,2,2,4,4}}
+ \colorarea{orange!20}{\tikzpath{3}{3}{8,8,6,6,2,2,4,4}}
+ \end{puzzlebackground}
+ \setrule{1}{2}{7}
+ \setrule{1}{4}{7}
+ \setrule{2}{1}{9}
+ \setrule{2}{4}{6}
+ \setrule{3}{4}{5}
+ \setrule{4}{3}{6}
+ \setrow{4}{3,2,4,1}
+ \setrow{3}{4,1,3,2}
+ \setrow{2}{2,4,1,3}
+ \setrow{1}{1,3,2,4}
+ \end{killersudoku}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Laser Beam}
+% Draw a laser beam in each grid according to the following guidelines. The beam has to enter or to leave the grid at the arrows. At each intersection, a mirror, on which the laser beam must reflect on one side, can be placed horizontally or vertically. The other side must not be touched by the beam. All locations where the laser crosses are given. The numbers to the left and above the grid indicate how many cells are traversed by the beam in the corresponding row or column. The numbers to the right and below reveal, how many mirrors are found in the intersection of the corresponding row or column.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{laserbeam}
+% \laserV{1}
+% \laserH{{}}
+% \mirrorH{{},2}
+% \mirrorV{{},{},{},{},{},2}
+% \framepuzzle[LP@c@mirror]
+% \placearrow{3}{1}{LeftUp}
+% \placearrow{6}{4}{RightUp}
+% \placecross{3}{3}
+% \end{laserbeam}
+% \hspace{1.5cm}
+% \begin{laserbeam}
+% \laserV{1}
+% \laserH{{}}
+% \mirrorH{{},2}
+% \mirrorV{{},{},{},{},{},2}
+% \framepuzzle[LP@c@mirror]
+% \placearrow{3}{1}{LeftUp}
+% \placearrow{6}{4}{RightUp}
+% \placecross{3}{3}
+% \placemirror{2}{2}{V}
+% \placemirror{4}{2}{H}
+% \placemirror{5}{5}{V}
+% \placemirror{3}{5}{H}
+% \begin{puzzlebackground}
+% \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}}
+% \end{puzzlebackground}
+% \end{laserbeam}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{laserbeam}
+ \laserV{1}
+ \laserH{{}}
+ \mirrorH{{},2}
+ \mirrorV{{},{},{},{},{},2}
+ \framepuzzle[LP@c@mirror]
+ \placearrow{3}{1}{LeftUp}
+ \placearrow{6}{4}{RightUp}
+ \placecross{3}{3}
+ \end{laserbeam}
+ \hspace{1cm}
+ \begin{laserbeam}
+ \laserV{1}
+ \laserH{{}}
+ \mirrorH{{},2}
+ \mirrorV{{},{},{},{},{},2}
+ \framepuzzle[LP@c@mirror]
+ \placearrow{3}{1}{LeftUp}
+ \placearrow{6}{4}{RightUp}
+ \placecross{3}{3}
+ \placemirror{2}{2}{V}
+ \placemirror{4}{2}{H}
+ \placemirror{5}{5}{V}
+ \placemirror{3}{5}{H}
+ \begin{puzzlebackground}
+ \laser{\tikzpath{3}{1}{7,9,9,9,7,1,7,1,3,3,3,9,9}}
+ \end{puzzlebackground}
+ \end{laserbeam}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{6.5cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{6.5cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Magic Labyrinth}
+% Enter the numbers 1 to N into the grid. Each number can appear only once in each column and row. Following the labyrinth from the outside inwards, then the given number sequence must be repeated continuously.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{magiclabyrinth}
+% \mlline{\xtikzpath{1}{6}{6/5,2/5,4/5,8/4,6/4,2/3,4/3,8/2,6/2,2/1,4/1}}
+% \setcells{1/1,2/4,4/5}{3}
+% \magiclabyrinthcell{4}{2}{2}
+% \magiclabyrinthcell{5}{4}{1}
+% \end{magiclabyrinth}
+% \hspace{1.5cm}
+% \begin{magiclabyrinth}
+% \mlline{\xtikzpath{1}{6}{6/5,2/5,4/5,8/4,6/4,2/3,4/3,8/2,6/2,2/1,4/1}}
+% \setrow{5}{{},1,2,3}
+% \setrow{4}{2,3,{},{},1}
+% \setrow{3}{{},{},3,1,2}
+% \setrow{2}{1,{},{},2,3}
+% \setrow{1}{3,2,1}
+% \end{magiclabyrinth}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{magiclabyrinth}
+ \mlline{\xtikzpath{1}{6}{6/5,2/5,4/5,8/4,6/4,2/3,4/3,8/2,6/2,
+ 2/1,4/1}}
+ \setcells{1/1,2/4,4/5}{3}
+ \magiclabyrinthcell{4}{2}{2}
+ \magiclabyrinthcell{5}{4}{1}
+\end{magiclabyrinth}
+\hspace{1.5cm}
+\begin{magiclabyrinth}
+ \mlline{\xtikzpath{1}{6}{6/5,2/5,4/5,8/4,6/4,2/3,4/3,8/2,6/2,
+ 2/1,4/1}}
+ \setrow{5}{{},1,2,3}
+ \setrow{4}{2,3,{},{},1}
+ \setrow{3}{{},{},3,1,2}
+ \setrow{2}{1,{},{},2,3}
+ \setrow{1}{3,2,1}
+\end{magiclabyrinth}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Magnets}
+% Draw magnetic and neutral plates into the grid. The magnetic plates have a positive and a negative pole, neutral plates do not. The same poles must not touch neither horizontal nor vertical. Neutral plates may touch. The numbers to the left and above the grid indicate how many plus or minus poles are present in the respective column or row.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{magnets}
+% \minusH{2,1,2,2,1,2}
+% \minusV{2,1,3,1,2,1}
+% \plusH{2,1,2,2,2,1}
+% \plusV{1,2,1,3,2,1}
+% \magnetsH{2/1,2/4,2/5,2/6,3/2,3/3,4/1,4/4,5/5,5/6}
+% \magnetsV{1/1,1/3,1/5,2/2,4/5,5/2,6/1,6/3}
+% \MPH{2/6}
+% \PMH{5/5}
+% \MPV{6/3}
+% \end{magnets}
+% \hspace{1.5cm}
+% \begin{magnets}
+% \minusH{2,1,2,2,1,2}
+% \minusV{2,1,3,1,2,1}
+% \plusH{2,1,2,2,2,1}
+% \plusV{1,2,1,3,2,1}
+% \MPH{2/6,3/2,4/1}
+% \PMH{2/5,5/5,4/4,3/3}
+% \MPV{1/1,1/3,6/3}
+% \end{magnets}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\magnetssetup{bgcolor=Teal!50}
+\begin{magnets}
+ \minusH{2,1,2,2,1,2}
+ \minusV{2,1,3,1,2,1}
+ \plusH{2,1,2,2,2,1}
+ \plusV{1,2,1,3,2,1}
+ \magnetsH{2/1,2/4,2/5,2/6,3/2,3/3,4/1,4/4,5/5,5/6}
+ \magnetsV{1/1,1/3,1/5,2/2,4/5,5/2,6/1,6/3}
+ \MPH{2/6}
+ \PMH{5/5}
+ \MPV{6/3}
+\end{magnets}
+\hspace{1.5cm}
+\begin{magnets}
+ \minusH{2,1,2,2,1,2}
+ \minusV{2,1,3,1,2,1}
+ \plusH{2,1,2,2,2,1}
+ \plusV{1,2,1,3,2,1}
+ \MPH{2/6,3/2,4/1}
+ \PMH{2/5,5/5,4/4,3/3}
+ \MPV{1/1,1/3,6/3}
+\end{magnets}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{6}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{6}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{8.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{8.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid for indicating the neutral areas.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Masyu}
+% Draw a line into the grid. The line can only run horizontally and vertically and must pass through all the circles. In cells with a black circle it have to turn in a 90 degree angle and go straight on for at least another cell. The line must go straight through empty circles, but turn left or right in at least one of the neighboring cells. There is no need to go through all cells.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{masyu}
+% \framepuzzle
+% \setcells{1/2,3/3,4/1,4/2,4/5,5/4}{\MasyuW}
+% \masyucell{1}{4}{\MasyuB}
+% \end{masyu}
+% \hspace{1.5cm}
+% \begin{masyu}
+% \framepuzzle
+% \setcells{1/2,3/3,4/1,4/2,4/5,5/4}{\MasyuW}
+% \masyucell{1}{4}{\MasyuB}
+% \masyuline{\xtikzpath{1}{1}{8/3,6/2,8/1,6/2,2/2,4/3,2/1,6/3,2/1,4/4}}
+% \end{masyu}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\masyusetup{color=Teal}
+\begin{masyu}
+ \framepuzzle
+ \setcells{1/2,3/3,4/1,4/2,4/5,5/4}{\MasyuW}
+ \masyucell{1}{4}{\MasyuB}
+\end{masyu}
+\hspace{1.5cm}
+\begin{masyu}
+ \framepuzzle
+ \setcells{1/2,3/3,4/1,4/2,4/5,5/4}{\MasyuW}
+ \masyucell{1}{4}{\MasyuB}
+ \masyuline{\xtikzpath{1}{1}{8/3,6/2,8/1,6/2,2/2,4/3,2/1,6/3,
+ 2/1,4/4}}
+\end{masyu}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{green}{sets the color of the line.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Minesweeper}
+% Draw a mine in some cells of the grid. The number in a cell indicates how many of the eight neighboring cells contain a mine. A numbered cell does not contain a mine.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{minesweeper}
+% \framepuzzle
+% \setrow{5}{{},1}
+% \setrow{4}{{},{},3,3}
+% \setrow{3}{3,{},4,2}
+% \setrow{2}{{},{},{},{},0}
+% \setrow{1}{{},2}
+% \end{minesweeper}
+% \hspace{1.5cm}
+% \begin{minesweeper}
+% \framepuzzle
+% \setrow{5}{{},1,{},\Mine,\Mine}
+% \setrow{4}{{},\Mine,3,3,\Mine}
+% \setrow{3}{3,\Mine,4,2}
+% \setrow{2}{{},\Mine,\Mine,{},0}
+% \setrow{1}{{},2}
+% \end{minesweeper}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{minesweeper}
+ \framepuzzle
+ \setrow{5}{{},1}
+ \setrow{4}{{},{},3,3}
+ \setrow{3}{3,{},4,2}
+ \setrow{2}{{},{},{},{},0}
+ \setrow{1}{{},2}
+ \end{minesweeper}
+ \hspace{1.5cm}
+ \begin{minesweeper}
+ \framepuzzle
+ \setrow{5}{{},1,{},\Mine,\Mine}
+ \setrow{4}{{},\Mine,3,3,\Mine}
+ \setrow{3}{3,\Mine,4,2}
+ \setrow{2}{{},\Mine,\Mine,{},0}
+ \setrow{1}{{},2}
+ \end{minesweeper}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Nonogram}
+% Black out some cells of the grid. The black squares form stripes. The number, order, and length is defined by the number sequences on the top and left edge of the grid. Each number represents the length of the strip of black squares in the corresponding row or column. Two stripes are separated by at least one white square.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{nonogram}[rows=10,columns=10,scale=0.35,width=4.8cm,fontsize=footnotesize,helplines=5,extracells=3]
+% \nonogramV{{5},{2,4},{2,6},{9},{1,7},{9},{2,1,2},{1,1},{1,4},{2}}
+% \nonogramH{{1},{4,1},{6,2},{7,2},{6,1},{8},{1,4,1},{2,4},{3,2},{4}}
+% \end{nonogram}
+% \hspace{1cm}
+% \begin{nonogram}[rows=10,columns=10,scale=0.35,width=3.8cm,solution=true,extracells=3]
+% \nonogramrow{10}{3/2}
+% \nonogramrow{9}{2/4,7/1}
+% \nonogramrow{8}{1/1,6/1}
+% \nonogramrow{7}{3/2,6/1,8/2}
+% \nonogramrow{6}{2/9}
+% \nonogramrow{5}{2/7,10/1}
+% \nonogramrow{4}{2/9}
+% \nonogramrow{3}{2/6,9/2}
+% \nonogramrow{2}{3/4,8/2}
+% \nonogramrow{1}{4/5}
+% \puzzlestrut
+% \end{nonogram}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{nonogram}[rows=10,columns=10,scale=0.35,width=4.8cm,
+ fontsize=footnotesize,helplines=5,
+ extracells=3]
+ \nonogramV{{5},{2,4},{2,6},{9},{1,7},{9},{2,1,2},{1,1},
+ {1,4},{2}}
+ \nonogramH{{1},{4,1},{6,2},{7,2},{6,1},{8},{1,4,1},{2,4},
+ {3,2},{4}}
+ \end{nonogram}
+ \hspace{1cm}
+ \begin{nonogram}[rows=10,columns=10,scale=0.35,width=3.8cm,
+ solution=true,extracells=3]
+ \nonogramrow{10}{3/2}
+ \nonogramrow{9}{2/4,7/1}
+ \nonogramrow{8}{1/1,6/1}
+ \nonogramrow{7}{3/2,6/1,8/2}
+ \nonogramrow{6}{2/9}
+ \nonogramrow{5}{2/7,10/1}
+ \nonogramrow{4}{2/9}
+ \nonogramrow{3}{2/6,9/2}
+ \nonogramrow{2}{3/4,8/2}
+ \nonogramrow{1}{4/5}
+ \puzzlestrut
+ \end{nonogram}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{black}{sets the color of the lines.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \optitem{\envoption{extracells}}{5}{sets the number of extra cells for the grid.}
+% \optitem{\envoption{helplines}}{5}{sets the space between thicker help lines. You can switch off help lines with \texttt{0}!}
+% \optitem{\envoption{solution}}{false}{will switch off extra cells if set to \texttt{true}.}
+% \end{optionlist}
+%
+% \subsection{Number Link}
+% Link all the same numbers or letters in each case by a line. The lines can run horizontally, vertically and in 90 degree angles. Each cell must be traversed by exactly one line. The lines must not intersect.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{numberlink}
+% \framepuzzle
+% \numberlinkcell{2}{1}{B}
+% \numberlinkcell{5}{1}{C}
+% \numberlinkcell{2}{2}{C}
+% \numberlinkcell{4}{2}{D}
+% \numberlinkcell{3}{3}{A}
+% \numberlinkcell{4}{3}{E}
+% \numberlinkcell{1}{4}{B}
+% \numberlinkcell{1}{5}{A}
+% \numberlinkcell{3}{5}{E}
+% \numberlinkcell{4}{5}{D}
+% \end{numberlink}
+% \hspace{1.5cm}
+% \begin{numberlink}
+% \framepuzzle
+% \numberlinkcell{2}{1}{B}
+% \numberlinkcell{5}{1}{C}
+% \numberlinkcell{2}{2}{C}
+% \numberlinkcell{4}{2}{D}
+% \numberlinkcell{3}{3}{A}
+% \numberlinkcell{4}{3}{E}
+% \numberlinkcell{1}{4}{B}
+% \numberlinkcell{1}{5}{A}
+% \numberlinkcell{3}{5}{E}
+% \numberlinkcell{4}{5}{D}
+% \link{\tikzpath{4}{3}{8,4,8}}
+% \link{\tikzpath{2}{1}{4,8,8,8}}
+% \link{\tikzpath{2}{2}{6,2,6,6}}
+% \link{\tikzpath{1}{5}{6,2,2,6}}
+% \link{\tikzpath{4}{2}{6,8,8,8,4}}
+% \end{numberlink}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{numberlink}
+ \framepuzzle
+ \numberlinkcell{2}{1}{B}
+ \numberlinkcell{5}{1}{C}
+ \numberlinkcell{2}{2}{C}
+ \numberlinkcell{4}{2}{D}
+ \numberlinkcell{3}{3}{A}
+ \numberlinkcell{4}{3}{E}
+ \numberlinkcell{1}{4}{B}
+ \numberlinkcell{1}{5}{A}
+ \numberlinkcell{3}{5}{E}
+ \numberlinkcell{4}{5}{D}
+\end{numberlink}
+\hspace{1.5cm}
+\begin{numberlink}
+ \framepuzzle
+ \numberlinkcell{2}{1}{B}
+ \numberlinkcell{5}{1}{C}
+ \numberlinkcell{2}{2}{C}
+ \numberlinkcell{4}{2}{D}
+ \numberlinkcell{3}{3}{A}
+ \numberlinkcell{4}{3}{E}
+ \numberlinkcell{1}{4}{B}
+ \numberlinkcell{1}{5}{A}
+ \numberlinkcell{3}{5}{E}
+ \numberlinkcell{4}{5}{D}
+ \link{\tikzpath{4}{3}{8,4,8}}
+ \link{\tikzpath{2}{1}{4,8,8,8}}
+ \link{\tikzpath{2}{2}{6,2,6,6}}
+ \link{\tikzpath{1}{5}{6,2,2,6}}
+ \link{\tikzpath{4}{2}{6,8,8,8,4}}
+\end{numberlink}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{red}{sets the color of the lines.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Resuko}
+% Complete the given elements in the grid to two race tracks (a race track and a much shorter test track) with pitlane and parking lot. The elements below and to the left of the grid indicate how many straights, curves and intersections are located in the respective columns and rows. The pit lane is always located next to four straights of the circuit on a free area of 1x4 cells. At the end, the parking lot is located on the only free area of 2x2 cells. Both can not be built on a gravel trap.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{resuko}[width=5.2cm]
+% \resukocell{1}{7}{\Graveltrap}
+% \resukocell{4}{7}{\Graveltrap}
+% \resukocell{7}{3}{\Graveltrap}
+% \resukocell{6}{2}{\Cross}
+% \resukocell{8}{4}{\StraightV}
+% \resukocell{6}{7}{\StraightH}
+% \resukocell{3}{5}{\CurveBR}
+% \resukocell{5}{5}{\CurveTR}
+% \trackH{1/4/0,4/0/0,3/2/0,2/2/0,3/2/0,3/2/1,2/2/2,2/4/0}
+% \trackV{4/2/0,5/2/1,2/0/0,2/4/0,2/4/1,4/2/0,1/2/1,0/2/0}
+% \framepuzzle
+% \end{resuko}
+% \hspace{1.5cm}
+% \begin{resuko}
+% \resukocell{1}{7}{\Graveltrap}
+% \resukocell{4}{7}{\Graveltrap}
+% \resukocell{7}{3}{\Graveltrap}
+% \parkinglot{2}{7}
+% \pitlane{2}{3}{H}
+% \track{\tikzpath{2}{4}{6,8,6,8,4,4,4,2,2,6}}
+% \track{\xtikzpath{2}{1}{6/4,8/3,6/1,8/4,6/1,2/1,4/3,2/2,6/3,2/3,4/7,2/1,6/1}}
+% \framepuzzle
+% \end{resuko}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\resukosetup{rows=8,columns=8,width=5.8cm,fontsize=Huge,
+ scale=.708}
+\begin{resuko}[width=7.4cm]
+ \resukocell{1}{7}{\Graveltrap}
+ \resukocell{4}{7}{\Graveltrap}
+ \resukocell{7}{3}{\Graveltrap}
+ \resukocell{6}{2}{\Cross}
+ \resukocell{8}{4}{\StraightV}
+ \resukocell{6}{7}{\StraightH}
+ \resukocell{3}{5}{\CurveBR}
+ \resukocell{5}{5}{\CurveTR}
+ \trackH{1/4/0,4/0/0,3/2/0,2/2/0,3/2/0,3/2/1,2/2/2,2/4/0}
+ \trackV{4/2/0,5/2/1,2/0/0,2/4/0,2/4/1,4/2/0,1/2/1,0/2/0}
+ \framepuzzle
+\end{resuko}
+\hspace{1.5cm}
+\begin{resuko}
+ \resukocell{1}{7}{\Graveltrap}
+ \resukocell{4}{7}{\Graveltrap}
+ \resukocell{7}{3}{\Graveltrap}
+ \parkinglot{2}{7}
+ \pitlane{2}{3}{H}
+ \track{\tikzpath{2}{4}{6,8,6,8,4,4,4,2,2,6}}
+ \track{\xtikzpath{2}{1}{6/4,8/3,6/1,8/4,6/1,2/1,4/3,2/2,6/3,
+ 2/3,4/7,2/1,6/1}}
+ \framepuzzle
+\end{resuko}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{color}}{blue}{sets the color of the pitlane and parking lot.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Schatzsuche}
+% It's a variant of Minesweeper, just with diamonds instead of mines. Draw a diamond in some cells of the grid. The number in a cell indicates how many of the eight neighboring cells contain a diamond. A numbered cell does not contain a diamond.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{schatzsuche}
+% \framepuzzle
+% \setrow{5}{{},1}
+% \setrow{4}{{},{},3,3}
+% \setrow{3}{3,{},4,2}
+% \setrow{2}{{},{},{},{},0}
+% \setrow{1}{{},2}
+% \end{schatzsuche}
+% \hspace{1.5cm}
+% \begin{schatzsuche}
+% \framepuzzle
+% \setrow{5}{{},1,{},\Diamond,\Diamond}
+% \setrow{4}{{},\Diamond,3,3,\Diamond}
+% \setrow{3}{3,\Diamond,4,2}
+% \setrow{2}{{},\Diamond,\Diamond,{},0}
+% \setrow{1}{{},2}
+% \end{schatzsuche}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{schatzsuche}
+ \framepuzzle
+ \setrow{5}{{},1}
+ \setrow{4}{{},{},3,3}
+ \setrow{3}{3,{},4,2}
+ \setrow{2}{{},{},{},{},0}
+ \setrow{1}{{},2}
+ \end{schatzsuche}
+ \hspace{1.5cm}
+ \begin{schatzsuche}
+ \framepuzzle
+ \setrow{5}{{},1,{},\Diamond,\Diamond}
+ \setrow{4}{{},\Diamond,3,3,\Diamond}
+ \setrow{3}{3,\Diamond,4,2}
+ \setrow{2}{{},\Diamond,\Diamond,{},0}
+ \setrow{1}{{},2}
+ \end{schatzsuche}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Skyline}
+% There are skyscrapers located in each cell. Try to find out the height of the skyscraper in the respective cell. There are heights of 1 to MAX in every row, every column, and in each of the two diagonals if indicated. Some cells may be empty (parks). The numbers around the grid indicate how many buildings you can see from this position when you look at the skyscraper lineup. Bear in mind that only those skyscrapers are visible which are higher than the ones in front.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{skyline}
+% \skylineB{3,{},3,1,{}}
+% \skylineL{{},4,3,{},{}}
+% \skylineT{{},{},2,{},3}
+% \skylineR{{},1,3,{},{}}
+% \skylinecell{1}{3}{2}
+% \skylinecell{4}{2}{3}
+% \end{skyline}
+% \hspace{1cm}
+% \begin{skyline}
+% \skylineB{3,{},3,1,{}}
+% \skylineL{{},4,3,{},{}}
+% \skylineT{{},{},2,{},3}
+% \skylineR{{},1,3,{},{}}
+% \setrow{5}{5,4,3,1,2}
+% \setrow{4}{4,5,1,2,3}
+% \setrow{3}{2,3,5,4,1}
+% \setrow{2}{1,2,4,3,5}
+% \setrow{1}{3,1,2,5,4}
+% \end{skyline}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{skyline}
+ \skylineB{3,{},3,1,{}}
+ \skylineL{{},4,3,{},{}}
+ \skylineT{{},{},2,{},3}
+ \skylineR{{},1,3,{},{}}
+ \skylinecell{1}{3}{2}
+ \skylinecell{4}{2}{3}
+ \end{skyline}
+ \hspace{1cm}
+ \begin{skyline}
+ \skylineB{3,{},3,1,{}}
+ \skylineL{{},4,3,{},{}}
+ \skylineT{{},{},2,{},3}
+ \skylineR{{},1,3,{},{}}
+ \setrow{5}{5,4,3,1,2}
+ \setrow{4}{4,5,1,2,3}
+ \setrow{3}{2,3,5,4,1}
+ \setrow{2}{1,2,4,3,5}
+ \setrow{1}{3,1,2,5,4}
+ \end{skyline}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \paragraph{Variants}
+% \subparagraph{Skyline Sudoku}
+%
+% \begin{center}
+% \begin{skyline}[sudoku,scale=.4]
+% \skylineB{4,5,2,5,2,1,2,4,3}
+% \skylineL{4,2,2,2,1,3,3,3,2}
+% \skylineT{4,1,3,2,3,5,3,2,3}
+% \skylineR{3,3,1,3,4,2,3,2,4}
+% \setrow{9}{{},{},{},8,{},{},{},7}
+% \setrow{8}{{},{},4,{},{},6,{},{},8}
+% \setrow{7}{{},2,{},7,{},{},{},{},1}
+% \setrow{6}{{},{},{},{},8,2}
+% \setrow{5}{{},{},2,{},4,{},7}
+% \setrow{4}{{},{},{},3,{},{},4}
+% \setrow{3}{{},{},{},{},1}
+% \setrow{2}{{},3,{},{},{},{},1,2}
+% \setrow{1}{{},{},5}
+% \end{skyline}
+% \hspace{1cm}
+% \begin{skyline}[sudoku,scale=.4]
+% \skylineB{4,5,2,5,2,1,2,4,3}
+% \skylineL{4,2,2,2,1,3,3,3,2}
+% \skylineT{4,1,3,2,3,5,3,2,3}
+% \skylineR{3,3,1,3,4,2,3,2,4}
+% \setrow{9}{3,9,6,8,5,1,2,7,4}
+% \setrow{8}{1,7,4,9,2,6,3,5,8}
+% \setrow{7}{5,2,8,7,3,4,9,6,1}
+% \setrow{6}{7,4,3,1,8,2,6,9,5}
+% \setrow{5}{9,8,2,6,4,5,7,1,3}
+% \setrow{4}{6,5,1,3,9,7,4,8,2}
+% \setrow{3}{8,6,7,2,1,3,5,4,9}
+% \setrow{2}{4,3,9,5,6,8,1,2,7}
+% \setrow{1}{2,1,5,4,7,9,8,3,6}
+% \end{skyline}
+% \end{center}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{skyline}[sudoku,scale=.4]
+ \skylineB{4,5,2,5,2,1,2,4,3}
+ \skylineL{4,2,2,2,1,3,3,3,2}
+ \skylineT{4,1,3,2,3,5,3,2,3}
+ \skylineR{3,3,1,3,4,2,3,2,4}
+ \setrow{9}{{},{},{},8,{},{},{},7}
+ \setrow{8}{{},{},4,{},{},6,{},{},8}
+ \setrow{7}{{},2,{},7,{},{},{},{},1}
+ \setrow{6}{{},{},{},{},8,2}
+ \setrow{5}{{},{},2,{},4,{},7}
+ \setrow{4}{{},{},{},3,{},{},4}
+ \setrow{3}{{},{},{},{},1}
+ \setrow{2}{{},3,{},{},{},{},1,2}
+ \setrow{1}{{},{},5}
+ \end{skyline}
+ \hspace{1cm}
+ \begin{skyline}[sudoku,scale=.4]
+ \skylineB{4,5,2,5,2,1,2,4,3}
+ \skylineL{4,2,2,2,1,3,3,3,2}
+ \skylineT{4,1,3,2,3,5,3,2,3}
+ \skylineR{3,3,1,3,4,2,3,2,4}
+ \setrow{9}{3,9,6,8,5,1,2,7,4}
+ \setrow{8}{1,7,4,9,2,6,3,5,8}
+ \setrow{7}{5,2,8,7,3,4,9,6,1}
+ \setrow{6}{7,4,3,1,8,2,6,9,5}
+ \setrow{5}{9,8,2,6,4,5,7,1,3}
+ \setrow{4}{6,5,1,3,9,7,4,8,2}
+ \setrow{3}{8,6,7,2,1,3,5,4,9}
+ \setrow{2}{4,3,9,5,6,8,1,2,7}
+ \setrow{1}{2,1,5,4,7,9,8,3,6}
+ \end{skyline}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subparagraph{Skyline Sudoku (N*N)}
+%
+% \begin{center}
+% \begin{skyline}[rows=6,columns=6,scale=.58]
+% \skylineB{4,2,1,3,3,2}
+% \skylineL{3,3,4,3,2,1}
+% \skylineT{1,2,3,3,2,4}
+% \skylineR{4,1,2,2,2,3}
+% \skylinecell{2}{4}{1}
+% \skylinecell{4}{1}{4}
+% \skylinecell{5}{2}{3}
+% \begin{puzzlebackground}
+% \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)}
+% \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6)
+% --(2,3)--(1,3)}
+% \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)}
+% \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2)
+% --(4,2)--(4,1)}
+% \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6)
+% --(6,5)--(7,5)--(7,7)--(4,7)}
+% \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6)
+% --(6,2)--(4,2)}
+% \end{puzzlebackground}
+% \end{skyline}
+% \hspace{1cm}
+% \begin{skyline}[rows=6,columns=6,scale=.58]
+% \skylineB{4,2,1,3,3,2}
+% \skylineL{3,3,4,3,2,1}
+% \skylineT{1,2,3,3,2,4}
+% \skylineR{4,1,2,2,2,3}
+% \setrow{6}{6,3,4,1,5,2}
+% \setrow{5}{5,6,2,3,1,4}
+% \setrow{4}{2,1,3,6,4,5}
+% \setrow{3}{1,4,5,2,6,3}
+% \setrow{2}{4,2,1,5,3,6}
+% \setrow{1}{3,5,6,4,2,1}
+% \begin{puzzlebackground}
+% \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)}
+% \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6)
+% --(2,3)--(1,3)}
+% \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)}
+% \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2)
+% --(4,2)--(4,1)}
+% \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6)
+% --(6,5)--(7,5)--(7,7)--(4,7)}
+% \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6)
+% --(6,2)--(4,2)}
+% \end{puzzlebackground}
+% \end{skyline}
+% \end{center}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{skyline}[rows=6,columns=6,scale=.58]
+ \skylineB{4,2,1,3,3,2}
+ \skylineL{3,3,4,3,2,1}
+ \skylineT{1,2,3,3,2,4}
+ \skylineR{4,1,2,2,2,3}
+ \skylinecell{2}{4}{1}
+ \skylinecell{4}{1}{4}
+ \skylinecell{5}{2}{3}
+ \begin{puzzlebackground}
+ \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)}
+ \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6)
+ --(2,3)--(1,3)}
+ \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)}
+ \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2)
+ --(4,2)--(4,1)}
+ \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6)
+ --(6,5)--(7,5)--(7,7)--(4,7)}
+ \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6)
+ --(6,2)--(4,2)}
+ \end{puzzlebackground}
+ \end{skyline}
+ \hspace{1cm}
+ \begin{skyline}[rows=6,columns=6,scale=.58]
+ \skylineB{4,2,1,3,3,2}
+ \skylineL{3,3,4,3,2,1}
+ \skylineT{1,2,3,3,2,4}
+ \skylineR{4,1,2,2,2,3}
+ \setrow{6}{6,3,4,1,5,2}
+ \setrow{5}{5,6,2,3,1,4}
+ \setrow{4}{2,1,3,6,4,5}
+ \setrow{3}{1,4,5,2,6,3}
+ \setrow{2}{4,2,1,5,3,6}
+ \setrow{1}{3,5,6,4,2,1}
+ \begin{puzzlebackground}
+ \fillarea{Wheat}{(1,1)--(1,3)--(4,3)--(4,1)--(1,1)}
+ \fillarea{HotPink!30}{(1,3)--(1,7)--(4,7)--(4,6)--(2,6)
+ --(2,3)--(1,3)}
+ \fillarea{GreenYellow}{(2,3)--(2,6)--(4,6)--(4,3)--(2,3)}
+ \fillarea{LightBlue}{(4,1)--(7,1)--(7,5)--(6,5)--(6,2)
+ --(4,2)--(4,1)}
+ \fillarea{LightSalmon!50}{(4,7)--(4,4)--(5,4)--(5,6)--(6,6)
+ --(6,5)--(7,5)--(7,7)--(4,7)}
+ \fillarea{LightYellow}{(4,2)--(4,4)--(5,4)--(5,6)--(6,6)
+ --(6,2)--(4,2)}
+ \end{puzzlebackground}
+ \end{skyline}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{sudoku}}{false}{sets \envoption{rows} and \envoption{columns} to 9, in case of \texttt{true} is specified. Additionally the classic Sudoku grid is drawn.}
+% \optitem{\envoption{width}}{6.7cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0.75cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.85cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-38pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Slitherlink}
+% Draw a closed line into the grid. This line must be on the existing dashed lines, but do not have to go through all grid points. If numbers are present in the grid cells, they indicate how many sides of the cell are touched by the line. The line must not touch or cross itself.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{slitherlink}
+% \setbigcell{1}{1}{4}
+% \slitherlinkcell{1}{3}{3}
+% \slitherlinkcell{3}{1}{3}
+% \slitherlinkcell{3}{3}{0}
+% \slitherlinkcell{3}{4}{3}
+% \slitherlinkcell{4}{4}{2}
+% \slitherlinkcell{5}{1}{0}
+% \slitherlinkcell{5}{2}{2}
+% \end{slitherlink}
+% \hspace{1.5cm}
+% \begin{slitherlink}
+% \setbigcell{1}{1}{4}
+% \slitherlinkcell{1}{3}{3}
+% \slitherlinkcell{3}{1}{3}
+% \slitherlinkcell{3}{3}{0}
+% \slitherlinkcell{3}{4}{3}
+% \slitherlinkcell{4}{4}{2}
+% \slitherlinkcell{5}{1}{0}
+% \slitherlinkcell{5}{2}{2}
+% \framearea{black}{\tikzpath{3}{1}{8,8,4,4,8,6,6,8,6,2,6,6,2,4,2,4,2,4}}
+% \end{slitherlink}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{slitherlink}
+ \setbigcell{1}{1}{4}
+ \slitherlinkcell{1}{3}{3}
+ \slitherlinkcell{3}{1}{3}
+ \slitherlinkcell{3}{3}{0}
+ \slitherlinkcell{3}{4}{3}
+ \slitherlinkcell{4}{4}{2}
+ \slitherlinkcell{5}{1}{0}
+ \slitherlinkcell{5}{2}{2}
+ \end{slitherlink}
+ \hspace{1.5cm}
+ \begin{slitherlink}
+ \setbigcell{1}{1}{4}
+ \slitherlinkcell{1}{3}{3}
+ \slitherlinkcell{3}{1}{3}
+ \slitherlinkcell{3}{3}{0}
+ \slitherlinkcell{3}{4}{3}
+ \slitherlinkcell{4}{4}{2}
+ \slitherlinkcell{5}{1}{0}
+ \slitherlinkcell{5}{2}{2}
+ \framearea{black}{\tikzpath{3}{1}{8,8,4,4,8,6,6,8,6,2,
+ 6,6,2,4,2,4,2,4}}
+ \end{slitherlink}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.2cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.2cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Star Battle}
+% Enter exactly one star in each row, each column and each area of the grid. Cells with stars must not touch each other orthogonally or diagonally.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{starbattle}
+% \framepuzzle
+% \framearea{black}{\tikzpath{1}{1}{8,6,8,6,6,2,6,6,2,4,4,4,4,4}}
+% \framearea{black}{\tikzpath{1}{2}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{1}{4}{8,8,6,6,2,6,2,2,4,4,8,4}}
+% \framearea{black}{\tikzpath{4}{2}{8,8,8,4,8,6,6,6,2,4,2,2,6,2,4,4}}
+% \framearea{black}{\tikzpath{5}{3}{8,8,6,2,2,4}}
+% \end{starbattle}
+% \hspace{1.5cm}
+% \begin{starbattle}
+% \framepuzzle
+% \framearea{black}{\tikzpath{1}{1}{8,6,8,6,6,2,6,6,2,4,4,4,4,4}}
+% \framearea{black}{\tikzpath{1}{2}{8,8,6,2,2,4}}
+% \framearea{black}{\tikzpath{1}{4}{8,8,6,6,2,6,2,2,4,4,8,4}}
+% \framearea{black}{\tikzpath{4}{2}{8,8,8,4,8,6,6,6,2,4,2,2,6,2,4,4}}
+% \framearea{black}{\tikzpath{5}{3}{8,8,6,2,2,4}}
+% \starbattlecell{1}{2}{\Star}
+% \starbattlecell{2}{4}{\Star}
+% \starbattlecell{3}{1}{\Star}
+% \starbattlecell{4}{5}{\Star}
+% \starbattlecell{5}{3}{\Star}
+% \end{starbattle}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{starbattle}
+ \framepuzzle
+ \framearea{black}{\tikzpath{1}{1}{8,6,8,6,6,2,6,6,2,4,4,4,
+ 4,4}}
+ \framearea{black}{\tikzpath{1}{2}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{1}{4}{8,8,6,6,2,6,2,2,4,4,8,4}}
+ \framearea{black}{\tikzpath{4}{2}{8,8,8,4,8,6,6,6,2,4,2,2,6,
+ 2,4,4}}
+ \framearea{black}{\tikzpath{5}{3}{8,8,6,2,2,4}}
+ \end{starbattle}
+ \hspace{1.5cm}
+ \begin{starbattle}
+ \framepuzzle
+ \framearea{black}{\tikzpath{1}{1}{8,6,8,6,6,2,6,6,2,4,4,4,
+ 4,4}}
+ \framearea{black}{\tikzpath{1}{2}{8,8,6,2,2,4}}
+ \framearea{black}{\tikzpath{1}{4}{8,8,6,6,2,6,2,2,4,4,8,4}}
+ \framearea{black}{\tikzpath{4}{2}{8,8,8,4,8,6,6,6,2,4,2,2,6,
+ 2,4,4}}
+ \framearea{black}{\tikzpath{5}{3}{8,8,6,2,2,4}}
+ \starbattlecell{1}{2}{\Star}
+ \starbattlecell{2}{4}{\Star}
+ \starbattlecell{3}{1}{\Star}
+ \starbattlecell{4}{5}{\Star}
+ \starbattlecell{5}{3}{\Star}
+ \end{starbattle}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Stars and Arrows}
+% Enter a star in some empty cells of the grid. Each arrow points to at least one star and every star is referenced by at least one arrow. Arrows point to a whole row, column or diagonal, also through other stars and arrows. The numbers on the left and top of the grid indicate how many stars are located in the row or column.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{starsandarrows}
+% \framepuzzle
+% \starsH{1,2,3,2,0}
+% \starsV{1,0,3,2,2}
+% \setrow{5}{\RightDown,{},\LeftDown}
+% \setrow{4}{{},\Right,{},{},\LeftUp}
+% \setrow{2}{{},\Up,{},{},{}}
+% \setrow{1}{\RightUp,{},{},\LeftUp,\Left}
+% \end{starsandarrows}
+% \hspace{1.5cm}
+% \begin{starsandarrows}
+% \framepuzzle
+% \starsH{1,2,3,2,0}
+% \starsV{1,0,3,2,2}
+% \setrow{5}{\RightDown,\Star,\LeftDown,\Star}
+% \setrow{4}{{},\Right,\Star,\Star,\LeftUp}
+% \setrow{3}{\Star,\Star,\Star}
+% \setrow{2}{{},\Up,{},{},{}}
+% \setrow{1}{\RightUp,{},\Star,\LeftUp,\Left}
+% \end{starsandarrows}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{starsandarrows}
+ \framepuzzle
+ \starsH{1,2,3,2,0}
+ \starsV{1,0,3,2,2}
+ \setrow{5}{\RightDown,{},\LeftDown}
+ \setrow{4}{{},\Right,{},{},\LeftUp}
+ \setrow{2}{{},\Up,{},{},{}}
+ \setrow{1}{\RightUp,{},{},\LeftUp,\Left}
+ \end{starsandarrows}
+ \hspace{1.5cm}
+ \begin{starsandarrows}
+ \framepuzzle
+ \starsH{1,2,3,2,0}
+ \starsV{1,0,3,2,2}
+ \setrow{5}{\RightDown,\Star,\LeftDown,\Star}
+ \setrow{4}{{},\Right,\Star,\Star,\LeftUp}
+ \setrow{3}{\Star,\Star,\Star}
+ \setrow{2}{{},\Up,{},{},{}}
+ \setrow{1}{\RightUp,{},\Star,\LeftUp,\Left}
+ \end{starsandarrows}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.9cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.9cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Sudoku}
+% Well, it's Sudoku -- nothing to explain! Fill each row and column with numbers from 1 to 9.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{lpsudoku}
+% \setrow{9}{{},2,6,{},{},{},{},{},{}}
+% \setrow{8}{{},{},{},{},{},{},1,7,{}}
+% \setrow{7}{{},{},3,1,{},6,{},{},{}}
+% \setrow{6}{{},6,{},{},5,{},8,{},3}
+% \setrow{5}{{},{},9,2,6,1,7,{},{}}
+% \setrow{4}{5,{},4,{},8,{},{},6,{}}
+% \setrow{3}{{},{},{},8,{},4,3,{},{}}
+% \setrow{2}{{},4,8,{},{},{},{},{},{}}
+% \setrow{1}{{},{},{},{},{},{},9,4,{}}
+% \end{lpsudoku}
+% \hspace{1.5cm}
+% \begin{lpsudoku}
+% \setrow{9}{1,2,6,5,7,8,4,3,9}
+% \setrow{8}{4,8,5,9,3,2,1,7,6}
+% \setrow{7}{7,9,3,1,4,6,5,8,2}
+% \setrow{6}{2,6,1,4,5,7,8,9,3}
+% \setrow{5}{8,3,9,2,6,1,7,5,4}
+% \setrow{4}{5,7,4,3,8,9,2,6,1}
+% \setrow{3}{6,5,2,8,9,4,3,1,7}
+% \setrow{2}{9,4,8,7,1,3,6,2,5}
+% \setrow{1}{3,1,7,6,2,5,9,4,8}
+% \end{lpsudoku}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{lpsudoku}
+ \setrow{9}{{},2,6,{},{},{},{},{},{}}
+ \setrow{8}{{},{},{},{},{},{},1,7,{}}
+ \setrow{7}{{},{},3,1,{},6,{},{},{}}
+ \setrow{6}{{},6,{},{},5,{},8,{},3}
+ \setrow{5}{{},{},9,2,6,1,7,{},{}}
+ \setrow{4}{5,{},4,{},8,{},{},6,{}}
+ \setrow{3}{{},{},{},8,{},4,3,{},{}}
+ \setrow{2}{{},4,8,{},{},{},{},{},{}}
+ \setrow{1}{{},{},{},{},{},{},9,4,{}}
+ \end{lpsudoku}
+ \hspace{1.5cm}
+ \begin{lpsudoku}
+ \setrow{9}{1,2,6,5,7,8,4,3,9}
+ \setrow{8}{4,8,5,9,3,2,1,7,6}
+ \setrow{7}{7,9,3,1,4,6,5,8,2}
+ \setrow{6}{2,6,1,4,5,7,8,9,3}
+ \setrow{5}{8,3,9,2,6,1,7,5,4}
+ \setrow{4}{5,7,4,3,8,9,2,6,1}
+ \setrow{3}{6,5,2,8,9,4,3,1,7}
+ \setrow{2}{9,4,8,7,1,3,6,2,5}
+ \setrow{1}{3,1,7,6,2,5,9,4,8}
+ \end{lpsudoku}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{width}}{9.1cm}{sets the width of the minipage, in which the grid is typeset. 9 cells of width 1cm plus a litle extra for lines.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage. To get a width of 5cm you need to scale by $\nicefrac{5}{9}$}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{9.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsubsection{Supporting \texttt{bash} scripts}
+% \paragraph{createlpsudoku}
+% The \texttt{createlpsudoku} \cite{bib:wiki:createlpsudoku} \texttt{bash} script can transform Sudoku format files into \env{lpsudoku} environments. It can process files in the so called one line 81 format\footnote{processing of several sudokus in 81 format (one in each line) is possible} (option -e (default)) and in simple sudoku format (option -s)
+%
+% \medskip
+% Usage: \texttt{createlpsudoku [options] [-o output] -i input}
+%
+% \medskip
+% It expects an input file with the option \texttt{-i}. You can specify an output file with the option \texttt{-o}. Otherwise it writes to \texttt{stdout}. Furthermore, the following options are possible:
+%
+% \medskip
+% \begin{tabular}{ll}
+% -w & write Windows line endings (CR/LF) to file \\
+% -v & prints version number \\
+% -h & prints help \\
+% \end{tabular}
+%
+% \paragraph{lpsmag}
+%
+% With the \texttt{lpsmag} \cite{bib:wiki:lpsmag} \texttt{bash} script you can half automatically produce a Sudoku magazine using the \env{lpsudoku} environment and the \texttt{createlpsudoku} bash script.
+%
+% \medskip
+% Usage: \texttt{lpsmag configfile}
+%
+% \medskip
+% The script needs an installed \href{http://ostermiller.org/qqwing/}{QQwing} \cite{bib:web:qqwing} and a config file for defining the magazine's contents:
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+page p1 easy
+page p2 easy
+startpuzzles
+typesetpage p1
+typesetpage p2
+startsolutions
+typesetsolpage p1 p2 last
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% This config file will be sourced into the \texttt{lpsmag bash} script and contains calls of \texttt{lpsmag} functions. Make sure, that the config file has UNIX line endings (LF). For a detailed documentation I refer to the following \href{http://logicpuzzle.square7.de/lpsmag}{wiki} \cite{bib:wiki:lpsmag} entry.
+%
+% After running \texttt{lpsmag} you will find a \texttt{lpsmag.tex} in your working directory. Just run \texttt{pdflatex lpsmag.tex} twice and you finally get for example this \href{https://bitbucket.org/kleberj/logicpuzzle/downloads/lpsmag.pdf}{\texttt{lpsmag.pdf}}.
+%
+% \subsection{Sun and Moon}
+% Enter exactly one star and one dark cloud in each row and each column of the grid, so that the planets are illuminated as specified. The stars shine horizontally or vertically arbitrarily far, but not through a planet or a dark cloud.
+%
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{sunandmoon}
+% \framepuzzle
+% \setrow{5}{{},{},{},{},\Moon}
+% \setrow{4}{{},{},\MoonTL}
+% \setrow{3}{\Moon}
+% \setrow{2}{{},\MoonR}
+% \setrow{1}{{},{},{},\MoonT}
+% \end{sunandmoon}
+% \hspace{1.5cm}
+% \begin{sunandmoon}
+% \framepuzzle
+% \setrow{5}{{},{},\Star,\Cloud,\Moon}
+% \setrow{4}{{},\Star,\MoonTL,{},\Cloud}
+% \setrow{3}{\Moon,\Cloud,{},{},\Star}
+% \setrow{2}{\Cloud,\MoonR,{},\Star}
+% \setrow{1}{\Star,{},\Cloud,\MoonT}
+% \end{sunandmoon}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{sunandmoon}
+ \framepuzzle
+ \setrow{5}{{},{},{},{},\Moon}
+ \setrow{4}{{},{},\MoonTL}
+ \setrow{3}{\Moon}
+ \setrow{2}{{},\MoonR}
+ \setrow{1}{{},{},{},\MoonT}
+ \end{sunandmoon}
+ \hspace{1.5cm}
+ \begin{sunandmoon}
+ \framepuzzle
+ \setrow{5}{{},{},\Star,\Cloud,\Moon}
+ \setrow{4}{{},\Star,\MoonTL,{},\Cloud}
+ \setrow{3}{\Moon,\Cloud,{},{},\Star}
+ \setrow{2}{\Cloud,\MoonR,{},\Star}
+ \setrow{1}{\Star,{},\Cloud,\MoonT}
+ \end{sunandmoon}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.1cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.1cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Tents and Trees}
+% Draw tents in the grid. Next to each tree, a tent must be entered in a horizontally or vertically adjacent cell, which is associated with this tree. The numbers next to the grid indicate the quantity of tents in each row or column. No tent can stand directly next to another one, not even diagonally.
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{tentsandtrees}
+% \framepuzzle
+% \tentH{1,2,1,1,2}
+% \tentV{2,0,2,0,3}
+% \setrow{4}{\Tree,{},\Tree,\Tree,\Tree}
+% \setrow{2}{{},\Tree}
+% \setrow{1}{\Tree,{},{},\Tree}
+% \end{tentsandtrees}
+% \hspace{1.5cm}
+% \begin{tentsandtrees}
+% \framepuzzle
+% \tentH{1,2,1,1,2}
+% \tentV{2,0,2,0,3}
+% \setrow{5}{\Tent,{},\Tent,{},\Tent,}
+% \setrow{4}{\Tree,{},\Tree,\Tree,\Tree}
+% \setrow{3}{{},\Tent,{},\Tent}
+% \setrow{2}{{},\Tree}
+% \setrow{1}{\Tree,\Tent,{},\Tree,\Tent}
+% \end{tentsandtrees}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{tentsandtrees}
+ \framepuzzle
+ \tentH{1,2,1,1,2}
+ \tentV{2,0,2,0,3}
+ \setrow{4}{\Tree,{},\Tree,\Tree,\Tree}
+ \setrow{2}{{},\Tree}
+ \setrow{1}{\Tree,{},{},\Tree}
+ \end{tentsandtrees}
+ \hspace{1.5cm}
+ \begin{tentsandtrees}
+ \framepuzzle
+ \tentH{1,2,1,1,2}
+ \tentV{2,0,2,0,3}
+ \setrow{5}{\Tent,{},\Tent,{},\Tent,}
+ \setrow{4}{\Tree,{},\Tree,\Tree,\Tree}
+ \setrow{3}{{},\Tent,{},\Tent}
+ \setrow{2}{{},\Tree}
+ \setrow{1}{\Tree,\Tent,{},\Tree,\Tent}
+ \end{tentsandtrees}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.9cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.9cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+%
+% \subsection{Tunnel}
+% Determine the course of the tube. Draw the only possible connection. from the beginning to the end. The numbers indicate how many tube segments (including portals) are present in the corresponding rows and columns. The tube is one cell wide, and does not cross or touch itself!
+% \subsubsection{Example}
+% \begin{figure}[htbp]
+% \begin{center}
+% \begin{tunnel}
+% \framepuzzle
+% \tunnelH{4,3,3,3,4}
+% \tunnelV{5,1,5,1,5}
+% \portal{1}{1}
+% \portal{5}{5}
+% \end{tunnel}
+% \hspace{1.5cm}
+% \begin{tunnel}
+% \framepuzzle
+% \tunnelH{4,3,3,3,4}
+% \tunnelV{5,1,5,1,5}
+% \portal{1}{1}
+% \portal{5}{5}
+% \tube{\tikzpath{1}{1}{6,6,6,6,8,8,4,4,4,4,8,8,6,6,6,6}}
+% \end{tunnel}
+% \end{center}
+% \end{figure}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{center}
+ \begin{tunnel}
+ \framepuzzle
+ \tunnelH{4,3,3,3,4}
+ \tunnelV{5,1,5,1,5}
+ \portal{1}{1}
+ \portal{5}{5}
+ \end{tunnel}
+ \hspace{1.5cm}
+ \begin{tunnel}
+ \framepuzzle
+ \tunnelH{4,3,3,3,4}
+ \tunnelV{5,1,5,1,5}
+ \portal{1}{1}
+ \portal{5}{5}
+ \tube{\tikzpath{1}{1}{6,6,6,6,8,8,4,4,4,4,8,8,6,6,6,6}}
+ \end{tunnel}
+\end{center}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \subsubsection{Options}
+% \begin{optionlist}
+% \optitem{\envoption{rows}}{5}{defines the number of rows in the grid.}
+% \optitem{\envoption{columns}}{5}{specifies the number of columns in the grid}
+% \optitem{\envoption{width}}{5.9cm}{sets the width of the minipage, in which the grid is typeset.}
+% \optitem{\envoption{scale}}{1}{scales the size of the grid in the minipage.}
+% \optitem{\envoption{fontsize}}{Large}{specifies the size of the numbers next to the grid. Here, the usual \LaTeX\ sizes are used. Possible values: \texttt{tiny}, \texttt{scriptsize}, \texttt{footnotesize}, \texttt{small}, \texttt{normalsize}, \texttt{large}, \underline{\texttt{Large}}, \texttt{LARGE}, \texttt{huge}, \texttt{Huge}}
+% \optitem{\envoption{title}}{}{sets the title of a puzzle.}
+% \optitem{\envoption{titleindent}}{0cm}{defines the indent of the title.}
+% \optitem{\envoption{titlewidth}}{5.9cm}{specifies the width of the box the title is set in.}
+% \optitem{\envoption{bgcolor}}{}{sets the background color of the grid.}
+% \optitem{\envoption{counterstyle}}{none}{defines the counter style. Predefined styles: none, left, right}
+% \optitem{\envoption{cvoffset}}{-23pt}{sets the vertical offset of the counters in the margin.}
+% \end{optionlist}
+% You\IfFileExists{qrcode.png}{\marginnote{\href{https://bitbucket.org/kleberj/logicpuzzle/}{\includegraphics[height=2cm]{qrcode.png}}}[-37pt]}{} can download application examples and their solutions from the \href{https://bitbucket.org/kleberj/logicpuzzle/}{project page}. The puzzles are originally licensed under \href{http://creativecommons.org/licenses/by-nc-sa/3.0/}{\ccbyncsa}.
+% \section{Implemenation}
+%
+% \changes{v1.0}{2013/02/09}{first version of battleship.sty on CTAN}
+% \changes{v1.2}{2013/02/17}{moved code base for logic puzzles into logicpuzzle.sty}
+% \changes{v1.3}{2013/03/05}{added support for \texttt{bokkusu} puzzle}
+% \changes{v1.4}{2013/03/05}{added support for \texttt{skyline} puzzle}
+% \changes{v1.5}{2013/03/05}{added support for \texttt{hakyuu} puzzle}
+% \changes{v1.5}{2013/03/13}{added support for \texttt{skyline} and \texttt{chaossudoku} puzzles}
+% \changes{v1.6}{2013/03/18}{added support for \texttt{lpsudoku} puzzle}
+% \changes{v1.7}{2013/03/28}{added support for \texttt{ddsudoku} puzzle}
+% \changes{v1.7}{2013/04/03}{added support for \texttt{hitori} puzzle}
+% \changes{v1.8}{2013/04/09}{added support for \texttt{killersudoku} and \texttt{kendokut} puzzles}
+% \changes{v1.9}{2013/04/15}{added support for \texttt{slitherlink} puzzle}
+% \changes{v1.9}{2013/04/17}{added support for \texttt{laserbeam} puzzle}
+% \changes{v2.0}{2013/04/22}{added support for \texttt{minesweeper} puzzle}
+% \changes{v2.0}{2013/04/23}{added support for \texttt{tunnel} puzzle}
+% \changes{v2.0}{2013/04/30}{moved code from packages to \texttt{logicpuzzle.sty}}
+% \changes{v2.1}{2013/05/04}{added support for \texttt{tentsandtrees} puzzle}
+% \changes{v2.1}{2013/05/05}{added support for \texttt{kakuro} puzzle}
+% \changes{v2.1}{2013/05/06}{added support for \texttt{schatzsuche} puzzle}
+% \changes{v2.2}{2013/05/14}{added support for \texttt{sunandmoon} and \texttt{starsandarrows} puzzles}
+% \changes{v2.2}{2013/05/15}{added support for \texttt{starbattle} puzzle}
+% \changes{v2.2}{2013/05/16}{added support for \texttt{bridges} puzzle}
+% \changes{v2.3}{2013/05/27}{added support for \texttt{resuko} puzzle}
+% \changes{v2.3}{2013/05/28}{added support for \texttt{fourwinds} puzzle}
+% \changes{v2.3}{2013/05/29}{added support for \texttt{numberlink} puzzle}
+% \changes{v2.4}{2013/06/03}{added support for \texttt{magiclabyrinth} snd \texttt{masyu} puzzles}
+% \changes{v2.4}{2013/06/04}{added support for \texttt{magnets} puzzle}
+% \changes{v2.5}{2014/06/13}{added \texttt{LPpreset} Ti\textit{k}Z style to all puzzle environments}
+% \changes{v2.5}{2014/06/14}{added support for \texttt{nonogram} puzzle. Feature request by: Theresa Spannbauer}
+%
+% \subsection{\texttt{logicpuzzle.sty}}
+% \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesPackage{logicpuzzle}[2014/06/15 v2.5 logicpuzzle.sty%
+ - Josef Kleber (C) 2013-2014]%
+% \end{macrocode}
+% \subsubsection{Package initialization}
+% First, we load the packages needed by \package{logicpuzzle.sty} and the Ti\textit{k}Z libraries we need.
+% \begin{macrocode}
+\RequirePackage{xkeyval}%
+\RequirePackage{ifthen}%
+\RequirePackage{ragged2e}%
+\RequirePackage{marginnote}%
+\RequirePackage{tikz}%
+\usetikzlibrary{decorations.pathmorphing,decorations.pathreplacing,%
+ calc,shapes.geometric}%
+% \end{macrocode}
+% We define a set of PGF layers for placing material on them and their order.
+% \begin{macrocode}
+\pgfdeclarelayer{LPdump}%
+\pgfdeclarelayer{LPbgcolor}%
+\pgfdeclarelayer{LPbackgroundtwo}%
+\pgfdeclarelayer{LPbackground}%
+\pgfdeclarelayer{LPforeground}%
+\pgfdeclarelayer{LPforegroundtwo}%
+\pgfsetlayers{LPdump,LPbgcolor,LPbackgroundtwo,LPbackground,main,%
+ LPforeground,LPforegroundtwo}%
+%
+% \end{macrocode}
+% We also need some counters and lengths
+% \changes{v2.2}{2013/05/07}{reduced counters to \texttt{LP@rows} and \texttt{LP@columns} instead of \texttt{LP@XX@...}}
+% \begin{macrocode}
+\newcounter{LP@rows}%
+\newcounter{LP@columns}%
+\newcounter{LP@counter@unique}%
+\newcounter{LP@counti}%
+\newcounter{LP@countii}%
+\newcounter{LP@countiii}%
+\newcounter{LP@whiledo@i}%
+\newcounter{LP@whiledo@ii}%
+\newcounter{LP@count@ig@i}%
+\newcounter{LP@count@ig@ii}%
+\newcounter{LP@count@ig@iii}%
+\newcounter{LP@count@ig@iv}%
+\newcounter{LP@puzzlecounter}%
+\setcounter{LP@puzzlecounter}{1}%
+%
+\newlength\LP@length%
+% \end{macrocode}
+% We define generic macros for puzzle options and add some defaults. Furthermore we define some macros, we will use all over the package.
+% \begin{macrocode}
+\gdef\LP@rows{}%
+\gdef\LP@columns{}%
+\gdef\LP@scale{1}%
+\gdef\LP@color{black}%
+\gdef\LP@bgcolor{}%
+\gdef\LP@fontsize\Large%
+\gdef\LP@cvoffset{0pt}%
+%
+\newcommand*\LP@counterstyle{none}%
+\newcommand*\LP@titleformat{}%
+\gdef\LP@env@prefix{}%
+\gdef\LP@package{}%
+\def\LP@normallines{0.5pt}%
+\def\LP@thicklines{1.5pt}%
+\def\LP@grid@linestyle{}%
+\def\LP@draw@opacity{1}%
+\def\LP@rel@tikzpath{}%
+\def\LP@tracks@scale{.3}%
+\def\LP@fw@linestyle{-|}%
+\newcommand*\LP@Pfive{.5}%
+% \end{macrocode}
+% \subsubsection{Defining options}
+% \begin{macro}{\LP@define@key}
+% We define a generic command for the definition of puzzle options
+% with both global (for the |\puzzlesetup| commands) and local scope for the optional argument of the puzzles!
+%
+% \cs{LP@define@key}\marg{puzzle prefix}\marg{puzzle}\marg{option}\marg{default}
+% \begin{macrocode}
+\newcommand*\LP@define@key[4]%
+{%
+ \expandafter\gdef\csname#1@#3\endcsname{#4}%
+ \define@key{#2.sty}{#3}[#4]%
+ {%
+ \expandafter\gdef\csname#1@#3\endcsname{##1}%
+ }%
+ \define@key{#2}{#3}%
+ {%
+ \expandafter\def\csname#1@#3\endcsname{##1}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@define@choicekey@fontsize}
+% We do the same for the more complicated |choicekey| for the |fontsize| option.
+%
+% \cs{LP@define@choicekey@fontsize}\marg{puzzle prefix}\marg{puzzle}\marg{default}
+% \begin{macrocode}
+\newcommand*\LP@define@choicekey@fontsize[3]%
+{%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\Large}%
+ \define@choicekey*{#2.sty}{fontsize}[\LP@dck@fontsize\nr]{%
+ tiny,scriptsize,footnotesize,small,normalsize,%
+ large,Large,LARGE,huge,Huge}[#3]%
+ {%
+ \ifcase\nr\relax%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\tiny}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\scriptsize}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\footnotesize}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\small}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\normalsize}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\large}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\Large}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\LARGE}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\huge}%
+ \or%
+ \expandafter\gdef\csname#1@fontsize\endcsname{\Huge}%
+ \fi%
+ }%
+ \define@choicekey*{#2}{fontsize}[\LP@dck@fontsize\nr]{%
+ tiny,scriptsize,footnotesize,small,normalsize,%
+ large,Large,LARGE,huge,Huge}[#3]%
+ {%
+ \ifcase\nr\relax%
+ \expandafter\def\csname#1@fontsize\endcsname{\tiny}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\scriptsize}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\footnotesize}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\small}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\normalsize}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\large}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\Large}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\LARGE}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\huge}%
+ \or%
+ \expandafter\def\csname#1@fontsize\endcsname{\Huge}%
+ \fi%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Defining colors}
+% \begin{macro}{\LP@definecolor}
+% We define a command for defining (rgb) colors. For other color models, use
+% |xcolor|'s |\definecolor| command.
+%
+% \cs{LP@definecolor}\marg{name}\marg{rgb color}
+% \begin{macrocode}
+\newcommand*\LP@definecolor[2]%
+{%
+ \definecolor{#1}{rgb}{#2}%
+}%
+% \end{macrocode}
+% Predefined colors:
+% \begin{macrocode}
+\LP@definecolor{LP@c@i}{.9,.9,.98}%
+\LP@definecolor{LP@c@ii}{.688,.932,.932}%
+\LP@definecolor{LP@c@iii}{.88,1,1}%
+\LP@definecolor{LP@c@iv}{1,1,.88}%
+\LP@definecolor{LP@c@v}{1,.855,.725}%
+\LP@definecolor{LP@c@vi}{.498,1,0}%
+\LP@definecolor{LP@c@vii}{.53,.808,.98}%
+\LP@definecolor{LP@c@viii}{.196,.804,.196}%
+\LP@definecolor{LP@c@ix}{1,.96,.932}%
+\LP@definecolor{LP@c@griddots}{.25,.51,.33}%
+\LP@definecolor{LP@c@cross}{.25,.51,.33}%
+\LP@definecolor{LP@c@mirror}{.8,.8,.8}%
+\LP@definecolor{LP@c@tunnel}{.7,.7,.7}%
+\LP@definecolor{LP@c@tunnel@i}{.8,.8,.8}%
+\LP@definecolor{LP@c@tunnel@ii}{.5,.5,.5}%
+\LP@definecolor{LP@c@bridge}{1,0,0}%
+\colorlet{LP@c@track}{black!80}%
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Drawing grids}
+% \begin{macro}{\LP@drawgrid}
+% We define a command for drawing the standard grid used by all puzzles. In general,
+% this should be a grid with a step of 1cm and thin lines with size
+% (1,1) to ($|columns|+1$,$|rows|+1$). You can influence the grid by redefining
+% the |\LP@grid@linestyle| (default: |solid| -- maybe you want |dashed|) and |\LP@draw@opacity|
+% (0 (transparent) -- 1 (opaque)). They should be changed only within groups, like puzzle environment definitions.
+%
+% \cs{LP@drawgrid}\marg{xmin}\marg{ymin}\marg{xmax}\marg{ymax}\marg{step}
+% \begin{macrocode}
+\newcommand*\LP@drawgrid[5]%
+{%
+ \setcounter{LP@counti}{#3}% max column
+ \setcounter{LP@countii}{#4}% max row
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+ \draw[step=#5,line width=\LP@normallines,\LP@grid@linestyle,%
+ draw opacity=\LP@draw@opacity]%
+ (#1,#2) grid (\value{LP@counti},\value{LP@countii});%
+}%
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Drawing the puzzle background}
+% \begin{macro}{\LP@drawbackground}
+% For drawing the puzzle background, we simply draw a rectangle with the size
+% of the puzzle on the \layer{LPbgcolor} layer and fill it with \marg{bgcolor}.
+%
+% \cs{LP@drawbackground}\marg{xmin}\marg{ymin}\marg{xmax}\marg{ymax}\marg{bgcolor}
+% \begin{macrocode}
+\newcommand*\LP@drawbackground[5]%
+{%
+% \end{macrocode}
+% Of course, we only draw a background, if \marg{bgcolor} is not empty!
+% \begin{macrocode}
+ \ifthenelse{\equal{#5}{}}%
+ {}% no bgcolor
+ {%
+ \setcounter{LP@counti}{#3}% max column
+ \setcounter{LP@countii}{#4}% max row
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+ \begin{pgfonlayer}{LPbgcolor}%
+ \fill[color=#5] (#1,#2) rectangle%
+ (\value{LP@counti},\value{LP@countii});%
+ \end{pgfonlayer}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{In the grid}
+% \changes{v1.1}{2013/02/11}{implemented \cmd\BS@ingrid\ checks if coordinate is in the grid $\rightarrow$ PackageError}
+% \begin{macro}{\LP@ingrid}
+% With this macro, we can check if the specified |column| and |row| is within
+% the puzzle borders. Otherwise we issue en error message. This macro can be used
+% by higher level commands, which try to place something in the grid.
+%
+% \cs{LP@ingrid}\marg{column}\marg{row}\marg{max column}\marg{max row}\marg{package}
+% \begin{macrocode}
+\newcommand*\LP@ingrid[5]%
+{%
+% \end{macrocode}
+% First, we define some counters to store the arguments.
+% \begin{macrocode}
+ \setcounter{LP@count@ig@i}{#1}% column
+ \setcounter{LP@count@ig@ii}{#2}% row
+ \setcounter{LP@count@ig@iii}{#3}% max column
+ \setcounter{LP@count@ig@iv}{#4}% max row
+% \end{macrocode}
+% Then, we can check, if the specified |coordinate| is within the borders of the puzzle.
+% \begin{macrocode}
+ \ifnum\value{LP@count@ig@i}<1%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak%
+ which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+ \ifnum\value{LP@count@ig@ii}<1%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak%
+ which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+ \ifnum\value{LP@count@ig@i}>\value{LP@count@ig@iii}%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak%
+ which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+ \ifnum\value{LP@count@ig@ii}>\value{LP@count@ig@iv}%
+ \PackageError{#5}%
+ {element outside of the grid}%
+ {You tried to set an element at (#1,#2),\MessageBreak%
+ which is outside the grid (1,1) .. (#3,#4)}%
+ \fi%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setrule}
+% For the \env{kendoku} and \env{killersudoku} environments, we need a command to
+% place a calculation rule in the top left corner of the specified cell.
+%
+% \cs{setrule}\marg{column}\marg{row}\marg{rule}
+% \begin{macrocode}
+\newcommand*\setrule[3]%
+{%
+% \end{macrocode}
+% First, we copy the |scale| and |bgcolor| values from the current environment.
+% \begin{macrocode}
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@bgcolor{\LP@env@prefix}%
+% \end{macrocode}
+% If no |bgcolor| is specified, we use |white| for drawing our helper rectangle.
+% We also step our unique node counter, we need for referencing nodes between different layers.
+% \begin{macrocode}
+ \ifthenelse{\equal{\LP@bgcolor}{}}%
+ {\gdef\LP@sr@bgcolor{white}}%
+ {\gdef\LP@sr@bgcolor{\LP@bgcolor}}%
+ \stepcounter{LP@counter@unique}%
+% \end{macrocode}
+% First, we draw a (invisible) helper rectangle on the \layer{LPdump} layer (behind the
+% \layer{LPbgcolor} layer) in the node |A_\theLP@counter@unique|
+% \begin{macrocode}
+ \begin{pgfonlayer}{LPdump}%
+ \node [shape=rectangle,inner sep=0pt] (A_\theLP@counter@unique)%
+ at (#1\LP@Pfive,#2\LP@Pfive)%
+ {\tikz\draw[scale=\LP@scale,color=\LP@sr@bgcolor]%
+ (0.08,0.1) rectangle (0.92,0.9);};%
+ \end{pgfonlayer}%
+% \end{macrocode}
+% Then, we can place a visible node on the \layer{main} layer in the top left corner
+% of the invisible helper rectangle with the rule (size: $|\tiny|\times|scale|$).
+% \begin{macrocode}
+ \node [shape=rectangle,inner sep=0pt,anchor=north west,%
+ scale=\LP@scale,font=\tiny] at%
+ (A_\theLP@counter@unique.north west) {$#3$};%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@G@setcellcontent}
+% Here, we define a generic macro for placing material into nodes
+% placed in the bottom left corner of the grid cell. You can use
+% the options |vcenter| and |hcenter| in the optional argument \oarg{options}
+% of the macro to center the content horizontally and/or vertically.
+%
+% \cs{LP@G@setcellcontent}\oarg{options}\marg{column}\marg{row}\marg{content}
+% \begin{macrocode}
+\define@key{LP@G@setcellcontent}{vcenter}[\LP@Pfive]%
+{%
+ \def\LP@scc@v{\LP@Pfive}%
+}%
+\define@key{LP@G@setcellcontent}{hcenter}[\LP@Pfive]%
+{%
+ \def\LP@scc@h{\LP@Pfive}%
+}%
+%
+\newcommand*\LP@G@setcellcontent[4][]%
+{%
+ \def\LP@scc@h{}%
+ \def\LP@scc@v{}%
+ \setkeys{LP@G@setcellcontent}{#1}%
+ \node at (#2\LP@scc@h,#3\LP@scc@v){#4};%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setcellcontent}
+% For compatibility, we still provide the old |\LP@setcellcontentXY| macros.
+% \begin{macrocode}
+\newcommand*\LP@setcellcontent[3]%
+{%
+ \LP@G@setcellcontent[hcenter,vcenter]{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setcellcontentC}
+% \begin{macrocode}
+\newcommand*\LP@setcellcontentC[3]%
+{%
+ \LP@G@setcellcontent{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setcellcontentVE}
+% \begin{macrocode}
+\newcommand*\LP@setcellcontentVE[3]%
+{%
+ \LP@G@setcellcontent[vcenter]{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setcellcontentHE}
+% \begin{macrocode}
+\newcommand*\LP@setcellcontentHE[3]%
+{%
+ \LP@G@setcellcontent[hcenter]{#1}{#2}{#3}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setrowcontents}
+% \changes{v1.3}{2013/02/26}{Bugfix: mix up column and row}
+% We want also be able to set the contents of a complete row.
+%
+% \cs{LP@setrowcontents}\marg{csv list}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\LP@setrowcontents[3]%
+{%
+% \end{macrocode}
+% We copy |fontsize| from the current environment, if we want to typeset numbers or letters.
+% \begin{macrocode}
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \setcounter{LP@counti}{#2}%
+ \setcounter{LP@countii}{#3}%
+% \end{macrocode}
+% We loop through the list and create a centered node in cell (|column|,|row|). Finally, we step the |column| counter.
+% \begin{macrocode}
+ \foreach \LP@element in {#1}%
+ {%
+ \LP@G@setcellcontent[vcenter,hcenter]%
+ {\arabic{LP@counti}}{\arabic{LP@countii}}%
+ {\LP@fontsize\LP@element}%
+ \stepcounter{LP@counti}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setcolumncontents}
+% \changes{v1.3}{2013/02/26}{Bugfix: mix up column and row}
+% Of course, we want to do the same for columns.
+%
+% \cs{LP@setcolumncontens}\marg{csv list}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\LP@setcolumncontents[3]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \setcounter{LP@counti}{#2}%
+ \setcounter{LP@countii}{#3}%
+ \foreach \LP@element in {#1}%
+ {%
+ \LP@G@setcellcontent[vcenter,hcenter]%
+ {\arabic{LP@counti}}{\arabic{LP@countii}}%
+ {\LP@fontsize\LP@element}%
+ \stepcounter{LP@countii}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setrowcontents@edge}
+% For environments like \env{laserbeam}, we need to typeset |row| contents on the left
+% border of the cell, instead of centered. Therfore, we only use |vcenter|.
+%
+% \cs{LP@setrowcontents@edge}\marg{csv list}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\LP@setrowcontents@edge[3]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \setcounter{LP@counti}{#2}%
+ \setcounter{LP@countii}{#3}%
+ \foreach \LP@element in {#1}%
+ {%
+ \LP@G@setcellcontent[vcenter]%
+ {\arabic{LP@counti}}{\arabic{LP@countii}}%
+ {\LP@fontsize\LP@element}%
+ \stepcounter{LP@counti}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@setcolumncontents@edge}
+% Furthermore, we need the ability to typeset a column on the bottom border of a
+% cell (|hcenter|).
+%
+% \cs{LP@setcolumncontents@edge}\marg{csv list}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\LP@setcolumncontents@edge[3]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \setcounter{LP@counti}{#2}%
+ \setcounter{LP@countii}{#3}%
+ \foreach \LP@element in {#1}%
+ {%
+ \LP@G@setcellcontent[hcenter]%
+ {\arabic{LP@counti}}{\arabic{LP@countii}}%
+ {\LP@fontsize\LP@element}%
+ \stepcounter{LP@countii}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setrow}
+% \changes{v1.4}{2013/03/05}{added \cmd\setrow}
+% The user command for typesetting row contents.
+%
+% \cs{setrow}\marg{row}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\setrow[2]%
+{%
+% \end{macrocode}
+% First, we copy |scale|, which might be necessary for graphical objects, like \cs{Mine}.
+% Then, we hand over the arguments to the generic macro for typesetting |row| contents and start with |column| 1.
+% \begin{macrocode}
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@setrowcontents{#2}{1}{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setcolumn}
+% \changes{v1.4}{2013/03/05}{added \cmd\setcolumn}
+% Again, we do the same for columns.
+%
+% \cs{setcolumn}\marg{column}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\setcolumn[2]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@setcolumncontents{#2}{#1}{1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setcell}
+% \changes{v1.4}{2013/03/06}{added \cmd\setcell}
+% We need to set numbers, letters or a graphical object into a central node
+% in grid cell (|column|,|row|)
+%
+% \cs{setcell}\marg{column}\marg{row}\marg{element}
+% \begin{macrocode}
+\newcommand*\setcell[3]%
+{%
+% \end{macrocode}
+% First, we copy |scale|, |fontsize|, |rows| and |columns| from the current environment.
+% \begin{macrocode}
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \LP@set@LP@columns{\LP@env@prefix}%
+% \end{macrocode}
+% Then, we test if (\marg{column},\marg{row}) is within the borders of the puzzle.
+% Finally, we typeset \marg{element} into a central node.
+% \begin{macrocode}
+ \LP@ingrid{#1}{#2}{\LP@columns}{\LP@rows}{\LP@package}%
+ \LP@G@setcellcontent[hcenter,vcenter]{#1}{#2}{\LP@fontsize#3}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setcells}
+% \changes{v2.4}{2013/06/03}{added \cmd\setcells}
+% We also want to typeset the same element into several grid cells.
+% Therefore, we use a \marg{csv list} with the format: \marg{|column/row|, ...}
+%
+% \cs{setcells}\marg{csv list}\marg{element}
+% \begin{macrocode}
+\newcommand*\setcells[2]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \LP@set@LP@columns{\LP@env@prefix}%
+ \foreach \LP@sc@column/\LP@sc@row in {#1}%
+ {%
+ \LP@ingrid{\LP@sc@column}{\LP@sc@row}%
+ {\LP@columns}{\LP@rows}{\LP@package}%
+ \LP@G@setcellcontent[hcenter,vcenter]%
+ {\LP@sc@column}{\LP@sc@row}{\LP@fontsize#2}%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setbigcell}
+% For the \env{slitherlink} environment, we need to typeset a huge ($2\times 2$) grid cell.
+%
+% \cs{setbigcell}\oarg{fontsize}\marg{column}\marg{row}\marg{element}
+% \begin{macrocode}
+\newcommand*\setbigcell[4][Huge]%
+{%
+% \end{macrocode}
+% First, we copy |scale| and |bgcolor|. If |bgcolor| is not specified, we assume |bgcolor| is || white!
+% \begin{macrocode}
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@bgcolor{\LP@env@prefix}%
+ \ifthenelse{\equal{\LP@bgcolor}{}}%
+ {\gdef\LP@sbc@bgcolor{white}}%
+ {\gdef\LP@sbc@bgcolor{\LP@bgcolor}}%
+% \end{macrocode}
+% The center of ($2\times 2$) cell is the bottom left corner of ($|column|+1,|row|+1$)
+% \begin{macrocode}
+ \setcounter{LP@counti}{#2}%
+ \setcounter{LP@countii}{#3}%
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+% \end{macrocode}
+% First, we 'clear' ($2\times 2$) area with |bgcolor| and respect the grid line style.
+% \begin{macrocode}
+ \draw[line width=\LP@normallines,fill=\LP@sbc@bgcolor,%
+ \LP@grid@linestyle]%
+ (#2,#3) rectangle ++(2,2);%
+% \end{macrocode}
+% As the grid dots were drawn on the \layer{LPforeground} layer, we have to
+% 'overpaint' the center dot on the \layer{LPforegroundtwo} layer with |bgcolor|.
+% Finally, we can typeset \marg{element}.
+% \begin{macrocode}
+ \begin{pgfonlayer}{LPforegroundtwo}%
+ \fill[color=\LP@sbc@bgcolor]%
+ (\arabic{LP@counti},\arabic{LP@countii})%
+ circle [radius=3.5pt*\LP@scale];%
+ \node at (\arabic{LP@counti},\arabic{LP@countii})%
+ {\csname#1\endcsname#4};%
+ \end{pgfonlayer}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setcolorrow}
+% For the \env{hitori} environment, we need to typeset row contents
+% with numbers associated to background colors.
+%
+% \cs{setcolorrow}\marg{row}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\setcolorrow[2]%
+{%
+% \end{macrocode}
+% We start at |column| 1 and loop through \marg{csv list}
+% \begin{macrocode}
+ \setcounter{LP@counti}{1}%
+ \setcounter{LP@countii}{#1}%
+ \foreach \LP@element in {#2}%
+ {%
+% \end{macrocode}
+% If the list element is 0, we fill the cell |black| on the \layer{LPbackground} layer.
+% \begin{macrocode}
+ \ifthenelse{\equal{\LP@element}{0}}%
+ {%
+ \gdef\LP@HT@color{black}%
+ \begin{puzzlebackground}%
+ \fillcell{\arabic{LP@counti}}{\arabic{LP@countii}}%
+ \end{puzzlebackground}%
+ }%
+ {%
+% \end{macrocode}
+% Otherwise, we fill the cell with predefined color |LP@c@romannumber| on the
+% \layer{LPbackground} layer and typeset the list element into the grid cell.
+% \begin{macrocode}
+ \expandafter\gdef\expandafter\LP@HT@color%
+ {LP@c@\romannumeral\LP@element}%
+ \begin{puzzlebackground}%
+ \fillcell{\arabic{LP@counti}}{\arabic{LP@countii}}%
+ \end{puzzlebackground}%
+ \setcell{\arabic{LP@counti}}{\arabic{LP@countii}}{\LP@element}%
+ }%
+ \stepcounter{LP@counti}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setcolorcolumn}
+% Again, the same for columns.
+% \begin{macrocode}
+\newcommand*\setcolorcolumn[2]%
+{%
+ \setcounter{LP@counti}{#1}%
+ \setcounter{LP@countii}{1}%
+ \foreach \LP@element in {#2}%
+ {%
+ \ifthenelse{\equal{\LP@element}{0}}%
+ {%
+ \gdef\LP@HT@color{black}%
+ \begin{puzzlebackground}%
+ \fillcell{\arabic{LP@counti}}{\arabic{LP@countii}}%
+ \end{puzzlebackground}%
+ }%
+ {%
+ \expandafter\gdef\expandafter\LP@HT@color%
+ {LP@c@\romannumeral\LP@element}%
+ \begin{puzzlebackground}%
+ \fillcell{\arabic{LP@counti}}{\arabic{LP@countii}}%
+ \end{puzzlebackground}%
+ \setcell{\arabic{LP@counti}}{\arabic{LP@countii}}{\LP@element}%
+ }%
+ \stepcounter{LP@countii}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fillcell}
+% \changes{v1.3}{2013/02/26}{added \cmd\LP@ingrid\ to \cmd\fillcell}
+% Sometimes, we need to 'blacken' a grid cell.
+%
+% \cs{fillcell}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\fillcell[2]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \LP@set@LP@columns{\LP@env@prefix}%
+% \end{macrocode}
+% After a border check, we typeset a black block (\cs{LP@Block}) into the grid cell.
+% \begin{macrocode}
+ \LP@ingrid{#1}{#2}{\LP@columns}{\LP@rows}{\LP@package}%
+ \LP@G@setcellcontent[hcenter,vcenter]{#1}{#2}{\LP@Block}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fillrow}
+% We also want to allow the filling of (parts of a) row.
+%
+% \cs{fillrow}\marg{row}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\fillrow[2]%
+{%
+ \setcounter{LP@counti}{1}%
+ \setcounter{LP@countii}{#1}%
+ \foreach \LP@element in {#2}%
+ {%
+% \end{macrocode}
+% We loop through the list and if |element| is 1, we fill this grid cell.
+% \begin{macrocode}
+ \ifthenelse{\equal{\LP@element}{1}}%
+ {\fillcell{\arabic{LP@counti}}{\arabic{LP@countii}}}%
+ {}%
+ \stepcounter{LP@counti}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fillcolumn}
+% Again the same, for columns!
+%
+% \cs{fillcolumn}\marg{column}\marg{csv list}
+% \begin{macrocode}
+%
+\newcommand*\fillcolumn[2]%
+{%
+ \setcounter{LP@counti}{#1}%
+ \setcounter{LP@countii}{1}%
+ \foreach \LP@element in {#2}%
+ {%
+ \ifthenelse{\equal{\LP@element}{1}}%
+ {\fillcell{\arabic{LP@counti}}{\arabic{LP@countii}}}%
+ {}%
+ \stepcounter{LP@countii}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\framearea}
+% \changes{v1.4}{2013/03/06}{added \cmd\framearea}
+% Sometimes, we need to frame a specified area.
+%
+% \cs{framearea}\marg{color}\marg{TikZ path}
+% \begin{macrocode}
+\newcommand*\framearea[2]%
+{%
+ \draw[line width=\LP@thicklines,color=#1] #2;%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fillarea}
+% \changes{v1.4}{2013/03/06}{added \cmd\fillarea}
+% Sometimes, we even want to fill the area.
+%
+% \cs{fillarea}\marg{color}\marg{TikZ path}
+% \begin{macrocode}
+\newcommand*\fillarea[2]%
+{%
+ \draw[line width=\LP@thicklines,fill=#1] #2;%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\colorarea}
+% \changes{v1.8}{2013/04/09}{added \cmd\colorarea\ (\cmd\framearea\ without frame)}
+% In some cases it might be better just to fill the area without drawing a frame.
+%
+% \cs{colorarea}\marg{color}\marg{TikZ path}
+% \begin{macrocode}
+\newcommand*\colorarea[2]%
+{%
+ \fill[color=#1] #2 ;%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\tikzpath}
+% Using a \marg{Tikz path} can be cumbersome. \cs{tikzpath} construct a path starting at the
+% bottom left corner of grid cell (|column|,|row|). If want to start in the center of the cell,
+% redefine \cs{LP@rel@tikzpath} to |.5| inside a group! Inside \marg{csv list of relative moves},
+% you can specify relative movements from one grid cell to the next based on num pad
+% (4 $\rightarrow$ one cell right, 2 $\rightarrow$ one cell down and 9 $\rightarrow$
+% one cell right up).
+%
+% \cs{tikzpath}\marg{column}\marg{row}\marg{csv list of relative movement}
+% \begin{macrocode}
+\newcommand*\tikzpath[3]%
+{%
+% \end{macrocode}
+% starting point
+% \begin{macrocode}
+ (#1\LP@rel@tikzpath,#2\LP@rel@tikzpath)%
+% \end{macrocode}
+% We loop through the list and add a relative path segment based on the direction indicator.
+% \begin{macrocode}
+ \foreach \LP@direction in {#3}%
+ {%
+ \ifnum\LP@direction=1%
+ --++(-1,-1)%
+ \fi%
+ \ifnum\LP@direction=2%
+ --++(0,-1)%
+ \fi%
+ \ifnum\LP@direction=3%
+ --++(1,-1)%
+ \fi%
+ \ifnum\LP@direction=4%
+ --++(-1,0)%
+ \fi%
+ \ifnum\LP@direction=6%
+ --++(1,0)%
+ \fi%
+ \ifnum\LP@direction=7%
+ --++(-1,1)%
+ \fi%
+ \ifnum\LP@direction=8%
+ --++(0,1)%
+ \fi%
+ \ifnum\LP@direction=9%
+ --++(1,1)%
+ \fi%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\xtikzpath}
+% \cs{xtikzpath} is based on \cs{tikzpath} with a slightly different format in
+% \marg{csv list of relative movements}. It allows pairs of |direction/length|, e.g.
+% (6/2) means two cells right.
+%
+% \cs{xtikzpath}\marg{column}\marg{row}\marg{csv list of relative movements}
+% \begin{macrocode}
+\newcommand*\xtikzpath[3]%
+{%
+ (#1\LP@rel@tikzpath,#2\LP@rel@tikzpath)%
+ \foreach \LP@dir/\LP@plength in {#3}%
+ {%
+ \ifnum\LP@dir=1%
+ --++(-\LP@plength,-\LP@plength)%
+ \fi%
+ \ifnum\LP@dir=2%
+ --++(0,-\LP@plength)%
+ \fi%
+ \ifnum\LP@dir=3%
+ --++(\LP@plength,-\LP@plength)%
+ \fi%
+ \ifnum\LP@dir=4%
+ --++(-\LP@plength,0)%
+ \fi%
+ \ifnum\LP@dir=6%
+ --++(\LP@plength,0)%
+ \fi%
+ \ifnum\LP@dir=7%
+ --++(-\LP@plength,\LP@plength)%
+ \fi%
+ \ifnum\LP@dir=8%
+ --++(0,\LP@plength)%
+ \fi%
+ \ifnum\LP@dir=9%
+ --++(\LP@plength,\LP@plength)%
+ \fi%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\filldiagonals}
+% For some puzzles we need colored diagonals indicating that also the diagonals are relevant,
+% not just rows and columns.
+%
+% \cs{filldiagonals}\oarg{color}
+% \begin{macrocode}
+\newcommand*\filldiagonals[1][yellow!20]%
+{%
+% \end{macrocode}
+% We copy and get |scale|, |$rows+1$| and |$columns+1$|,
+% \begin{macrocode}
+ \LP@set@LP@columns{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \setcounter{LP@counti}{\LP@columns}%
+ \setcounter{LP@countii}{\LP@rows}%
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+% \end{macrocode}
+% We only color the diagonals, if the puzzle is quadratic. Otherwise, coloring diagonals
+% doen't make sense and we issue an error.
+% \begin{macrocode}
+ \ifnum\value{LP@counti}=\value{LP@countii}%
+% \end{macrocode}
+% We color the diagonals on the \layer{LPbackground} layer and redefine \cs{LP@color}
+% (for \cs{LP@Block}) inside a group with local scope.
+% \begin{macrocode}
+ \begin{puzzlebackground}%
+ \def\LP@color{#1}%
+% \end{macrocode}
+% We use two counters running from (|1 .. rows|) and (|rows .. 1|) and color the cells
+% on the diagonals in a loop.
+% \begin{macrocode}
+ \setcounter{LP@whiledo@i}{1}%
+ \setcounter{LP@whiledo@ii}{\LP@rows}%
+ \whiledo{\value{LP@whiledo@i}<\value{LP@counti}}%
+ {%
+ \LP@G@setcellcontent[hcenter,vcenter]%
+ {\arabic{LP@whiledo@i}}{\arabic{LP@whiledo@i}}{\LP@Block}%
+ \LP@G@setcellcontent[hcenter,vcenter]%
+ {\arabic{LP@whiledo@i}}{\arabic{LP@whiledo@ii}}{\LP@Block}%
+ \stepcounter{LP@whiledo@i}%
+ \addtocounter{LP@whiledo@ii}{-1}%
+ }%
+ \end{puzzlebackground}%
+ \else%
+ \PackageError{\LP@package}%
+ {non quadratic grid (\filldiagonals)}%
+ {You tried to fill diagonals,\MessageBreak in a non quadratic%
+ grid (1,1) .. (\arabic{LP@counti},\arabic{LP@countii})%
+ \MessageBreak doesn't make sense!}%
+ \fi%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\framepuzzle}
+% \changes{v2.3}{2013/05/28}{Bugfix: \cmd\framepuzzle\ only worked correctly for quadratic puzzles}
+% We might want to frame the puzzle with a thicker line.
+%
+% \cs{framepuzzle}\oarg{color}
+% \begin{macrocode}
+\newcommand*\framepuzzle[1][black]%
+{%
+ \LP@set@LP@columns{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \setcounter{LP@counti}{\LP@columns}%
+ \setcounter{LP@countii}{\LP@rows}%
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+% \end{macrocode}
+% We copied |rows| and |columns| to get the top right corner of the puzzle.
+% Now, we can draw the thicker lines.
+% \begin{macrocode}
+ \draw[line width=\LP@thicklines,color=#1]%
+ (1,1)--(1,\arabic{LP@countii});%
+ \draw[line width=\LP@thicklines,color=#1]%
+ (1,\arabic{LP@countii})--%
+ (\arabic{LP@counti},\arabic{LP@countii});%
+ \draw[line width=\LP@thicklines,color=#1]%
+ (\arabic{LP@counti},\arabic{LP@countii})--%
+ (\arabic{LP@counti},1);%
+ \draw[line width=\LP@thicklines,color=#1]%
+ (\arabic{LP@counti},1)--(1,1);%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{puzzlebackground}
+% \changes{v1.4}{2013/03/06}{added \env{puzzlebackground}}
+% Sometimes, we want to move material to the \layer{LPbackground} layer.
+% \begin{macrocode}
+\newenvironment{puzzlebackground}%
+{%
+ \begin{pgfonlayer}{LPbackground}%
+}%
+{%
+ \end{pgfonlayer}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{environment}{puzzleforeground}
+% \changes{v1.4}{2013/03/06}{added \env{puzzleforeground}}
+% Sometimes, we want to move material to the \layer{LPforeground} layer.
+% \begin{macrocode}
+\newenvironment{puzzleforeground}%
+{%
+ \begin{pgfonlayer}{LPforeground}%
+}%
+{%
+ \end{pgfonlayer}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \subsubsection{Around the grid}
+%
+% For most puzzles, we need to put numbers below, above, to the right or to the left of the puzzle.
+% \begin{macro}{\LP@bottomrow}
+% Put numbers below the puzzle.
+%
+% \cs{LP@bottomrow}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\LP@bottomrow[1]%
+{%
+ \LP@setrowcontents{#1}{1}{0}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@bottomrow@edge}
+% Put numbers below the puzzle, but on the edge.
+%
+% \cs{LP@bottomrow@edge}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\LP@bottomrow@edge[1]%
+{%
+ \LP@setrowcontents@edge{#1}{1}{0}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@leftcolumn}
+% Put numbers left to the puzzle.
+%
+% \cs{LP@leftcolumn}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\LP@leftcolumn[1]%
+{%
+ \LP@setcolumncontents{#1}{0}{1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@toprow}
+% Put number on top of the puzzle.
+%
+% \cs{LP@toprow}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\LP@toprow[1]%
+{%
+ \LP@setrowcontents{#1}{1}{\theLP@rows}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@rightcolumn}
+% Put numbers right to the puzzle.
+%
+% \cs{LP@rightcolumn}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\LP@rightcolumn[1]%
+{%
+ \LP@setcolumncontents{#1}{\theLP@columns}{1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@rightcolumn@edge}
+% Put numbers right next to the puzzle, but on the edge.
+%
+% \cs{LP@rightcolumn@rdge}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\LP@rightcolumn@edge[1]%
+{%
+ \LP@setcolumncontents@edge{#1}{\theLP@columns}{1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \subsubsection{Presentation}
+% \begin{macro}{\titleformat}
+% You can redefine the format of the puzzle at any time.
+% \begin{macrocode}
+\newcommand*\titleformat[1]%
+{%
+ \renewcommand*\LP@titleformat{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% We define thew default title format:
+% \begin{macrocode}
+\titleformat{\centering\Large\color{blue}}%
+% \end{macrocode}
+% \begin{macro}{\puzzlecounter}
+% User command to get the current puzzle counter.
+% \begin{macrocode}
+\newcommand*\puzzlecounter{\theLP@puzzlecounter}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setpuzzlecounter}
+% User command to reset the puzzle counter, e.g. before the solution section.
+% \begin{macrocode}
+\newcommand*\setpuzzlecounter[1]%
+{%
+ \setcounter{LP@puzzlecounter}{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@drawcounter}
+% Maybe we want to draw puzzle counter, or not (|counterstyle=none|).
+%
+% \cs{LP@drawcounter}\marg{counterstyle}
+% \begin{macrocode}
+\newcommand*\LP@drawcounter[1]%
+{%
+% \end{macrocode}
+% We copy |cvoffset| and execute the macro we defined for the respective |counterstyle|.
+% \begin{macrocode}
+ \LP@set@LP@cvoffset{\LP@env@prefix}%
+ \csname LP@cs@#1\endcsname%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\definecounterstyle}
+% Maybe a user want to define his/her own counter style.
+%
+% \cs{definecounterstyle}\marg{counterstyle}\marg{definition}
+% \begin{macrocode}
+\newcommand*{\definecounterstyle}[2]%
+{%
+% \end{macrocode}
+% We define a |counterstyle| macro and store its definition.
+% \begin{macrocode}
+ \expandafter\gdef\csname LP@cs@#1\endcsname{#2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% We define three predefined |counterstyle|s |none|, |left| and |right|.
+% \begin{macrocode}
+\definecounterstyle{none}{}%
+\definecounterstyle{left}{%
+ \begingroup\reversemarginpar%
+ \marginnote{%
+ \tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,draw,%
+ rounded corners=3pt,thick]%
+ {\Huge\puzzlecounter};}[\LP@cvoffset]%
+ \endgroup%
+}%
+\definecounterstyle{right}{%
+ \marginnote{%
+ \tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,draw,%
+ rounded corners=3pt,thick]%
+ {\Huge\puzzlecounter};%
+ }[\LP@cvoffset]%
+}%
+% \end{macrocode}
+% \subsubsection{Misc macros}
+% \begin{macro}{\LP@Block}
+% We define a Ti{\itshape k}Z picture with the size of a grid cell ($1cm\times 1cm$)
+% and fill it with |color|.
+% \begin{macrocode}
+\newcommand*\LP@Block{%
+ \tikz[scale=\LP@scale]%
+ \draw[line width=\LP@normallines,fill=\LP@color]%
+ (0,0) rectangle (1,1);}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@Line}
+% A generic command for drawing lines with options |double|, |color| and |linewidth|.
+%
+% \cs{LP@Line}\oarg{options}\marg{TikZ path}
+% \begin{macrocode}
+\define@key{LP@Line}{double}[double]%
+{%
+ \def\LP@Line@double{double}%
+}%
+%
+\define@key{LP@Line}{color}[LP@c@bridge]%
+{%
+ \def\LP@Line@linecolor{#1}%
+}%
+%
+\define@key{LP@Line}{linewidth}[1mm]%
+{%
+ \def\LP@Line@linewidth{#1}%
+}%
+%
+\newcommand*\LP@Line[2][]%
+{%
+ \def\LP@Line@double{}%
+ \def\LP@Line@linecolor{LP@c@bridge}%
+ \def\LP@Line@linewidth{1mm}%
+ \setkeys{LP@Line}{#1}%
+% \end{macrocode}
+% By default we draw a single 1mm wide line with color |LP@c@bridge|.%
+% But we can change thar with \oarg{options}.
+% \begin{macrocode}
+ \LP@set@LP@scale{\LP@env@prefix}%
+% \end{macrocode}
+% Then we can draw a single or double line based on the defined options or defaults.
+% \begin{macrocode}
+ \begin{pgfonlayer}{LPbackgroundtwo}%
+ \ifthenelse{\equal{\LP@Line@double}{double}}%
+ {\draw[double,double distance=\LP@Line@linewidth*\LP@scale,%
+ color=\LP@Line@linecolor,%
+ line width=\LP@Line@linewidth*\LP@scale] #2;}%
+ {\draw[color=\LP@Line@linecolor,%
+ line width=\LP@Line@linewidth*\LP@scale] #2;}%
+ \end{pgfonlayer}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@scale}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@scale[1]%
+{%
+ \expandafter\xdef\expandafter\LP@scale{\csname #1@scale\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@color}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@color[1]%
+{%
+ \expandafter\xdef\expandafter\LP@color{\csname #1@color\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@rows}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@rows[1]%
+{%
+ \expandafter\xdef\expandafter\LP@rows{\csname #1@rows\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@columns}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@columns[1]%
+{%
+ \expandafter\xdef\expandafter\LP@columns{\csname #1@columns\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@cvoffset}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@cvoffset[1]%
+{%
+ \expandafter\xdef\expandafter\LP@cvoffset{\csname #1@cvoffset\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@bgcolor}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@bgcolor[1]%
+{%
+ \expandafter\xdef\expandafter\LP@bgcolor{\csname #1@bgcolor\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@extracells}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@extracells[1]%
+{%
+ \expandafter\xdef\expandafter\LP@extracells{\csname #1@extracells\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@LP@fontsize}
+% \begin{macrocode}
+\newcommand*\LP@set@LP@fontsize[1]%
+{%
+% can't expand \Large
+ \expandafter\gdef\expandafter\LP@fontsize{\csname #1@fontsize\endcsname}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@env@prefix}
+% \begin{macrocode}
+\newcommand*\LP@set@env@prefix[1]%
+{%
+ \gdef\LP@env@prefix{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@set@package}
+% \begin{macrocode}
+\newcommand*\LP@set@package[1]%
+{%
+ \gdef\LP@package{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setgridlinestyle}
+% \begin{macrocode}
+\newcommand*\setgridlinestyle[1]%
+{%
+ \def\LP@grid@linestyle{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setnormallinewidth}
+% \begin{macrocode}
+\newcommand*\setnormallinewidth[1]%
+{%
+ \def\LP@normallines{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setthicklinewidth}
+% \begin{macrocode}
+\newcommand*\setthicklinewidth[1]%
+{%
+ \def\LP@thicklines{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\puzzlestrut}
+% \begin{macrocode}
+\newcommand*\puzzlestrut%
+{%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \ifthenelse{\equal{\LP@package}{nonogram}}%
+ {%
+ \LP@set@LP@extracells{\LP@env@prefix}%
+ \setcounter{LP@counti}{\LP@rows}% max row
+ \stepcounter{LP@counti}%
+ \addtocounter{LP@counti}{\LP@NG@extracells}%
+ \draw[line width=\LP@thicklines, transparent]%
+ (1,1) -- (1,\arabic{LP@counti});%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setTikZpreset}
+% \begin{macrocode}
+\newcommand*\setTikZpreset[1]%
+{%
+ \tikzset{%
+ LPpreset/.style={#1}%
+ }%
+}%
+%
+\setTikZpreset{line cap=rect,line join=round}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{logicpuzzle}
+% \begin{macrocode}
+\newcommand*\LP@LP@init@prefix{LP@LP}%
+\newcommand*\LP@LP@init@package{logicpuzzle}%
+%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{rows}{5}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{columns}{5}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{scale}{1}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{counterstyle}{none}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{color}{}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{bgcolor}{}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{width}{5.1cm}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{cvoffset}{-23pt}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{title}{}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{titleindent}{0cm}%
+\LP@define@key{\LP@LP@init@prefix}{\LP@LP@init@package}%
+{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@LP@init@prefix}%
+{\LP@LP@init@package}{Large}%
+%
+\ExecuteOptionsX{rows,columns,width,fontsize,scale,bgcolor%
+,cvoffset,counterstyle,title,titleindent,titlewidth}%
+%
+\ProcessOptionsX\relax%
+%
+\let\logicpuzzlecell\setcell%
+%
+\newcommand*\logicpuzzlesetup[1]%
+{%
+ \setkeys{logicpuzzle.sty}{#1}%
+}%
+%
+\newenvironment{logicpuzzle}[1][]%
+{%
+ \setkeys{logicpuzzle}{#1}%
+ \LP@set@package{logicpuzzle}%
+ \LP@set@env@prefix{LP@LP}%
+ \setcounter{LP@rows}{\LP@LP@rows}%
+ \setcounter{LP@columns}{\LP@LP@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@LP@width}%
+ \ifthenelse{\equal{\LP@LP@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@LP@titleindent}%
+ \parbox{\LP@LP@titlewidth}{\strut\LP@titleformat\LP@LP@title}%
+ \vspace{3mm}\par}%
+ \begin{tikzpicture}[scale=\LP@LP@scale]%
+ \LP@drawbackground{1}{1}{\LP@LP@columns}{\LP@LP@rows}%
+ {\LP@LP@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@LP@columns}{\LP@LP@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@LP@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+%
+\RequirePackage{lpenv}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \subsection{lpenv.sty}
+% Here's just a flat copy of \package{lpenv.sty}! The code for the puzzles are more or less simple copy \& paste.
+% Take a look at section 1 for a detailed explanation of code needed for a puzzle environment.
+% \begin{macrocode}
+%<*lpenv>
+% \end{macrocode}
+% \begin{macrocode}
+%
+% battleship environment and options
+%
+\newcommand*\LP@BS@init@prefix{LP@BS}%
+\newcommand*\LP@BS@init@package{battleship}%
+%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{rows}{5}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{columns}{5}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{shipcolor}{green}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{scale}{1}%
+% \end{macrocode}
+% \changes{v1.2}{2013/02/18}{added option \texttt{counterstyle}}
+% \begin{macrocode}
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{counterstyle}{none}%
+% \end{macrocode}
+% \changes{v1.2}{2013/02/17}{added option \texttt{bgcolor}}
+% \begin{macrocode}
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{bgcolor}{}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{width}{6cm}%
+% \end{macrocode}
+% \changes{v1.3}{2013/02/27}{added option cvoffset}
+% \begin{macrocode}
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{cvoffset}{-23pt}%
+% \end{macrocode}
+% \changes{v1.2}{2013/02/18}{added option \texttt{title}}
+% \begin{macrocode}
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{title}{}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{titleindent}{0.75cm}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{titlewidth}{5.15cm}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{sbindent}{0.75cm}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{sbwidth}{5.15cm}%
+\LP@define@key{\LP@BS@init@prefix}{\LP@BS@init@package}{sbshipscale}{1}%
+\LP@define@choicekey@fontsize{\LP@BS@init@prefix}{\LP@BS@init@package}{{Large}}%
+%
+\gdef\LP@BS@shipbox{}%
+\tikzstyle{island} = [fill=yellow!30,draw, decorate, decoration={random steps,segment length=2.7pt,amplitude=1.7pt}]%
+%
+\newcommand*\Ship{\tikz[scale=\LP@BS@scale]\draw[scale=.36,fill=\LP@BS@shipcolor] (0,0) circle (1);}%
+\newcommand*\ShipC{\tikz[scale=\LP@BS@scale]\draw[scale=.36,fill=\LP@BS@shipcolor] (0,0)--(0,2)--(2,2)--(2,0)--cycle;}%
+\newcommand*\ShipT{\tikz[scale=\LP@BS@scale]\draw[scale=.36,fill=\LP@BS@shipcolor](2,1)--(2,0)--(0,0)--(0,1) arc (180:0:1);}%
+\newcommand*\ShipB{\tikz[scale=\LP@BS@scale]\draw[scale=.36,fill=\LP@BS@shipcolor](2,1)--(2,2)--(0,2)--(0,1) arc (180:360:1);}%
+\newcommand*\ShipL{\tikz[scale=\LP@BS@scale]\draw[scale=.36,fill=\LP@BS@shipcolor](1,2)--(2,2)--(2,0)--(1,0) arc (270:90:1);}%
+\newcommand*\ShipR{\tikz[scale=\LP@BS@scale]\draw[scale=.36,fill=\LP@BS@shipcolor](1,2)--(0,2)--(0,0)--(1,0) arc (270:450:1);}%
+\newcommand*\Island{\tikz[scale=\LP@BS@scale]\draw[scale=.36,island] (0,0) rectangle (2,2);}%
+\newcommand*\Water{\tikz[scale=\LP@BS@scale]\draw[scale=.36,fill,blue!40] (1,1) circle (0.2);}%
+% versions for \shipbox without second scale
+\newcommand*\@Ship{\tikz\draw[scale=.144,fill=\LP@BS@shipcolor] (0,0) circle (1);}%
+\newcommand*\@ShipC{\tikz\draw[scale=.144,fill=\LP@BS@shipcolor] (0,0)--(0,2)--(2,2)--(2,0)--cycle;}%
+\newcommand*\@ShipT{\tikz\draw[scale=.144,fill=\LP@BS@shipcolor](2,1)--(2,0)--(0,0)--(0,1) arc (180:0:1);}%
+\newcommand*\@ShipB{\tikz\draw[scale=.144,fill=\LP@BS@shipcolor](2,1)--(2,2)--(0,2)--(0,1) arc (180:360:1);}%
+\newcommand*\@ShipL{\tikz\draw[scale=.144,fill=\LP@BS@shipcolor](1,2)--(2,2)--(2,0)--(1,0) arc (270:90:1);}%
+\newcommand*\@ShipR{\tikz\draw[scale=.144,fill=\LP@BS@shipcolor](1,2)--(0,2)--(0,0)--(1,0) arc (270:450:1);}%
+%
+\newcommand*\LP@BS@printship[1]%
+{%
+ \ifthenelse{\equal{#1}{1}}{\scalebox{\LP@BS@sbshipscale}{\@Ship}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{2}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{3}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{4}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{5}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{6}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{7}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{8}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{9}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+ \ifthenelse{\equal{#1}{10}}{\scalebox{\LP@BS@sbshipscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}%
+}%
+%
+\newcommand*\LP@BS@printshipbox[1]%
+{%
+% no {#1}! to avoid expansion
+ \foreach \LP@element in #1%
+ {%
+ \LP@BS@printship{\LP@element}%
+ }%
+}%
+%
+\newcommand*\shipH[1]%
+{%
+ \LP@setrowcontents{#1}{1}{\value{LP@rows}}%
+}%
+%
+\newcommand*\shipV[1]%
+{%
+ \LP@setcolumncontents{#1}{0}{1}%
+}%
+% \end{macrocode}
+% \changes{v1.1}{2013/02/12}{renamed \cmd\ship\ $\rightarrow$ \cmd\placesegment}
+% \begin{macrocode}
+\newcommand*\placesegment[3]%
+{%
+ \LP@ingrid{#1}{#2}{\LP@BS@columns}{\LP@BS@rows}{battleship}%
+ \LP@G@setcellcontent[hcenter,vcenter]{#1}{#2}{#3}%
+}%
+%
+\let\ship\placesegment%
+% \end{macrocode}
+% \changes{v1.1}{2013/02/12}{added \cmd\placeisland}
+% \begin{macrocode}
+\newcommand*\placeisland[2]%
+{%
+ \LP@ingrid{#1}{#2}{\LP@BS@columns}{\LP@BS@rows}{battleship}%
+ \LP@G@setcellcontent[hcenter,vcenter]{#1}{#2}{\Island}%
+}%
+% \end{macrocode}
+% \changes{v1.1}{2013/02/12}{added \cmd\placewater}
+% \begin{macrocode}
+\newcommand*\placewater[2]%
+{%
+ \LP@ingrid{#1}{#2}{\LP@BS@columns}{\LP@BS@rows}{battleship}%
+ \LP@G@setcellcontent[hcenter,vcenter]{#1}{#2}{\Water}%
+}%
+%
+\newcommand*\shipbox[2][]%
+{%
+ \setkeys{shipbox}{#1}%
+ \gdef\LP@BS@shipbox{#2}%
+}%
+% \end{macrocode}
+% \changes{v1.1}{2013/02/11}{implemented \cmd\placeship; placement of a complete ship}
+% \begin{macrocode}
+\newcommand*\placeship[4]%
+{%
+ \setcounter{LP@counti}{#4}% length
+ \ifnum\value{LP@counti}<1%
+ \PackageError{battleship}%
+ {ship length < 1}%
+ {The length of your ship should be at least 1}%
+ \fi%
+ \ifnum\value{LP@counti}>10%
+ \PackageError{battleship}%
+ {ship length > 10}%
+ {The supported max length of ships is 10!}%
+ \fi%
+ \ifnum\value{LP@counti}=1%
+ \placesegment{#2}{#3}{\Ship}%
+ \else%
+ \setcounter{LP@whiledo@i}{\value{LP@counti}}%
+ \addtocounter{LP@whiledo@i}{-2}% length of middle ship
+ \ifthenelse{\equal{#1}{V}}%
+ {%
+ \placesegment{#2}{#3}{\ShipB}%
+ \setcounter{LP@countii}{#3}%
+ \whiledo{\value{LP@whiledo@i}>0}%
+ {%
+ \addtocounter{LP@whiledo@i}{-1}%
+ \stepcounter{LP@countii}%
+ \placesegment{#2}{\theLP@countii}{\ShipC}%
+ }%
+ \stepcounter{LP@countii}%
+ \placesegment{#2}{\theLP@countii}{\ShipT}%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{H}}%
+ {%
+ \placesegment{#2}{#3}{\ShipL}%
+ \setcounter{LP@counti}{#2}%
+ \whiledo{\value{LP@whiledo@i}>0}%
+ {%
+ \addtocounter{LP@whiledo@i}{-1}%
+ \stepcounter{LP@counti}%
+ \placesegment{\theLP@counti}{#3}{\ShipC}%
+ }%
+ \stepcounter{LP@counti}%
+ \placesegment{\theLP@counti}{#3}{\ShipR}%
+ }%
+ {\PackageError{battleship}%
+ {invalid direction (H/V)}%
+ {You can place your ship only\MessageBreak%
+ horizontally (H) or vertically (V)!}%
+ }%
+ }%
+ \fi%
+}%
+%
+% \end{macrocode}
+% \changes{v1.1}{2013/02/10}{added \cmd\battleshipsetup\ for resetting global options}
+% \begin{macrocode}
+\newcommand*\battleshipsetup[1]%
+{%
+ \setkeys{battleship.sty}{#1}%
+}%
+%
+% \end{macrocode}
+% \changes{v1.2}{2013/02/19}{added \cmd\classicgame\ for drawing game sheets for classic Battleship}
+% \begin{macrocode}
+\newcommand{\classicgame}[1]%
+{%
+ \begin{center}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Me,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \shipbox{#1}%
+ \end{battleship}%
+ \hspace{1cm}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Enemy,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \end{battleship}%
+ \end{center}%
+ \par\vspace{1cm}%
+ \begin{center}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Me,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \shipbox{#1}%
+ \end{battleship}%
+ \hspace{1cm}%
+ \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Enemy,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]%
+ \shipV{J,I,H,G,F,E,D,C,B,A}%
+ \shipH{1,2,3,4,5,6,7,8,9,10}%
+ \end{battleship}%
+ \end{center}%
+}%
+% \end{macrocode}
+% \begin{environment}{battleship}
+% \begin{macrocode}
+\newenvironment{battleship}[1][]%
+{%
+ \setkeys{battleship}{#1}%
+ \LP@set@package{battleship}%
+ \LP@set@env@prefix{LP@BS}%
+ \shipbox{}% clear shipbox
+ \setcounter{LP@rows}{\LP@BS@rows}%
+ \setcounter{LP@columns}{\LP@BS@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@BS@width}%
+ \ifthenelse{\equal{\LP@BS@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@BS@titleindent}\parbox{\LP@BS@titlewidth}{\strut\LP@titleformat\LP@BS@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@BS@scale]%
+ \LP@drawbackground{1}{1}{\LP@BS@columns}{\LP@BS@rows}{\LP@BS@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@BS@columns}{\LP@BS@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@BS@counterstyle}%
+ \par\hbadness=10000\medskip\noindent\hspace{\LP@BS@sbindent}\begin{minipage}{\LP@BS@sbwidth}{\hbadness=10000\RaggedRight\LP@BS@printshipbox{\LP@BS@shipbox}}\end{minipage}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \changes{v1.3}{2013/02/28}{added support for bokkusu puzzle}
+% \begin{macrocode}
+%
+% bokkusu environment and options
+%
+\newcommand*\LP@BK@init@prefix{LP@BK}%
+\newcommand*\LP@BK@init@package{bokkusu}%
+%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{rows}{5}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{columns}{5}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{scale}{1}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{color}{black}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{bgcolor}{}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{width}{6.7cm}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{cvoffset}{-38pt}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{title}{}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titleindent}{0.75cm}%
+\LP@define@key{\LP@BK@init@prefix}{\LP@BK@init@package}{titlewidth}{5.85cm}%
+\LP@define@choicekey@fontsize{\LP@BK@init@prefix}{\LP@BK@init@package}{Large}%
+%
+\let\valueH\LP@bottomrow%
+\let\valueV\LP@leftcolumn%
+\let\sumH\LP@toprow%
+\let\sumV\LP@rightcolumn%
+%
+\newcommand*\bokkususetup[1]%
+{%
+ \setkeys{bokkusu.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{bokkusu}
+% \begin{macrocode}
+\newenvironment{bokkusu}[1][]%
+{%
+ \setkeys{bokkusu}{#1}%
+ \LP@set@package{bokkusu}%
+ \LP@set@env@prefix{LP@BK}%
+ \setcounter{LP@rows}{\LP@BK@rows}%
+ \setcounter{LP@columns}{\LP@BK@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@BK@width}%
+ \ifthenelse{\equal{\LP@BK@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@BK@titleindent}\parbox{\LP@BK@titlewidth}{\strut\LP@titleformat\LP@BK@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@BK@scale]%
+ \LP@drawbackground{1}{1}{\LP@BK@columns}{\LP@BK@rows}{\LP@BK@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@BK@columns}{\LP@BK@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@BK@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% bridges environment and options
+%
+\newcommand*\LP@BG@init@prefix{LP@BG}%
+\newcommand*\LP@BG@init@package{bridges}%
+%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{rows}{5}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{columns}{5}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{scale}{1}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{grid}{dashed}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{bgcolor}{}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{color}{green}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{width}{6.1cm}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{title}{}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@BG@init@prefix}{\LP@BG@init@package}{titlewidth}{6.1cm}%
+\LP@define@choicekey@fontsize{\LP@BG@init@prefix}{\LP@BG@init@package}{Large}%
+%
+\let\bridgescell\setcell%
+%
+\newcommand*\bridgessetup[1]%
+{%
+ \setkeys{bridges.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\bridgesrow}
+% For the \env{bridges} environment, we need a special row command for drawing
+% the islands with the numbers of bridges.
+%
+% \cs{bridgesrow}\marg{row}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\bridgesrow[2]%
+{%
+ \setcounter{LP@counti}{1}%
+ \setcounter{LP@countii}{#1}%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \foreach \LP@element in {#2}%
+ {%
+% \end{macrocode}
+% We loop through the list anf if |element| is not empty, we draw an island
+% (circle filled with |bgcolor|) and typeset the number of bridges into to center of the circle.
+% \begin{macrocode}
+ \ifthenelse{\equal{\LP@element}{}}%
+ {}%
+ {%
+ \draw[fill=\LP@color] (\arabic{LP@counti},\arabic{LP@countii})%
+ circle (0.5cm);%
+ \node[scale=\LP@scale,font=\LP@fontsize] at%
+ (\arabic{LP@counti},\arabic{LP@countii}){\LP@element};%
+ }%
+ \stepcounter{LP@counti}%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bridgescolumn}
+% And again, for columns!
+% \begin{macrocode}
+\newcommand*\bridgescolumn[2]%
+{%
+ \setcounter{LP@counti}{#1}%
+ \setcounter{LP@countii}{1}%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \foreach \LP@element in {#2}%
+ {%
+ \ifthenelse{\equal{\LP@element}{}}%
+ {}%
+ {%
+ \draw[fill=\LP@color] (\arabic{LP@counti},\arabic{LP@countii})%
+ circle (0.5cm);%
+ \node[scale=\LP@scale,font=\LP@fontsize]%
+ at (\arabic{LP@counti},\arabic{LP@countii})%
+ {\LP@element};%
+ }%
+ \stepcounter{LP@countii}%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bridge}
+% For the \env{bridges} environment, we need to draw bridges.
+% Keep in mind that you can influence the appearance of the brigde with the options
+% |double|, |color| and |linewidth|.
+%
+% \cs{bridge}\oarg{options}\marg{Tikz path}
+% \begin{macrocode}
+\newcommand*\bridge[2][]%
+{%
+ \LP@Line[#1]{#2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{bridges}
+% \begin{macrocode}
+\newenvironment{bridges}[1][]%
+{%
+ \setkeys{bridges}{#1}%
+ \LP@set@package{bridges}%
+ \LP@set@env@prefix{LP@BG}%
+ \setcounter{LP@rows}{\LP@BG@rows}%
+ \setcounter{LP@columns}{\LP@BG@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@BG@width}%
+ \ifthenelse{\equal{\LP@BG@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@BG@titleindent}\parbox{\LP@BG@titlewidth}{\strut\LP@titleformat\LP@BG@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@BG@scale]%
+ \LP@drawbackground{1}{1}{\LP@BG@columns}{\LP@BG@rows}{\LP@BG@bgcolor}%
+ \ifthenelse{\equal{\LP@BG@grid}{none}}%
+ {}%
+ {%
+ \ifthenelse{\equal{\LP@BG@grid}{dashed}}%
+ {%
+ \setgridlinestyle{dashed}%
+ \LP@drawgrid{1}{1}{\LP@BG@columns}{\LP@BG@rows}{1cm}%
+ }%
+ {%
+ \LP@drawgrid{1}{1}{\LP@BG@columns}{\LP@BG@rows}{1cm}%
+ }%
+ }%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@BG@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% chaossudoku environment and options
+%
+\newcommand*\LP@CS@init@prefix{LP@CS}%
+\newcommand*\LP@CS@init@package{chaossudoku}%
+%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{rows}{5}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{columns}{5}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{scale}{1}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{bgcolor}{}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{title}{}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@CS@init@prefix}{\LP@CS@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@CS@init@prefix}{\LP@CS@init@package}{Large}%
+%
+\let\chaossudokucell\setcell%
+%
+\newcommand*\chaossudokusetup[1]%
+{%
+ \setkeys{chaossudoku.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{chaossudoku}
+% \begin{macrocode}
+\newenvironment{chaossudoku}[1][]%
+{%
+ \setkeys{chaossudoku}{#1}%
+ \LP@set@package{chaossudoku}%
+ \LP@set@env@prefix{LP@CS}%
+ \setcounter{LP@rows}{\LP@CS@rows}%
+ \setcounter{LP@columns}{\LP@CS@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@CS@width}%
+ \ifthenelse{\equal{\LP@CS@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@CS@titleindent}\parbox{\LP@CS@titlewidth}{\strut\LP@titleformat\LP@CS@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@CS@scale]%
+ \LP@drawbackground{1}{1}{\LP@CS@columns}{\LP@CS@rows}{\LP@CS@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@CS@columns}{\LP@CS@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@CS@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% ddsudoku environment and options
+%
+\newcommand*\LP@DDS@init@prefix{LP@DDS}%
+\newcommand*\LP@DDS@init@package{ddsudoku}%
+%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{rows}{5}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{columns}{5}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{scale}{1}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{bgcolor}{}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{title}{}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@DDS@init@prefix}{\LP@DDS@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@DDS@init@prefix}{\LP@DDS@init@package}{Large}%
+%
+\let\ddsudokucell\setcell%
+%
+\newcommand*\ddsudokusetup[1]%
+{%
+ \setkeys{ddsudoku.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{ddsudoku}
+% \begin{macrocode}
+\newenvironment{ddsudoku}[1][]%
+{%
+ \setkeys{ddsudoku}{#1}%
+ \LP@set@package{ddsudoku}%
+ \LP@set@env@prefix{LP@DDS}%
+ \setcounter{LP@rows}{\LP@DDS@rows}%
+ \setcounter{LP@columns}{\LP@DDS@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@DDS@width}%
+ \ifthenelse{\equal{\LP@DDS@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@DDS@titleindent}\parbox{\LP@DDS@titlewidth}{\strut\LP@titleformat\LP@DDS@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@DDS@scale]%
+ \LP@drawbackground{1}{1}{\LP@DDS@columns}{\LP@DDS@rows}{\LP@DDS@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@DDS@columns}{\LP@DDS@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@DDS@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% fourwinds environment and options
+%
+\newcommand*\LP@FW@init@prefix{LP@FW}%
+\newcommand*\LP@FW@init@package{fourwinds}%
+%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{rows}{5}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{columns}{5}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{scale}{1}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{bgcolor}{}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{color}{blue}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{title}{}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@FW@init@prefix}{\LP@FW@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@FW@init@prefix}{\LP@FW@init@package}{Large}%
+%
+\newcommand*\fourwindscell[4]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \LP@set@LP@bgcolor{\LP@env@prefix}%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \ifthenelse{\equal{\LP@bgcolor}{}}%
+ {\gdef\LP@c@bg@fw{white}}%
+ {\gdef\LP@c@bg@fw{\LP@bgcolor}}%
+ \foreach \LP@fw@dir/\LP@fw@length in {#4}%
+ {%
+ \begin{pgfonlayer}{LPbackgroundtwo}%
+ \def\LP@rel@tikzpath{.5}%
+ \draw[\LP@fw@linestyle,color=\LP@color,line width=.1cm*\LP@scale,shorten >=-3mm*\LP@scale]%
+ \xtikzpath{#1}{#2}{\LP@fw@dir/\LP@fw@length};%
+ \end{pgfonlayer}%
+ };%
+ \begin{puzzlebackground}%
+ \node[fill=\LP@c@bg@fw,font=\LP@fontsize] at (#1.5,#2.5) {#3};%
+ \end{puzzlebackground}%
+}%
+%
+\newcommand*\fourwindssetup[1]%
+{%
+ \setkeys{fourwinds.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{fourwinds}
+% \begin{macrocode}
+\newenvironment{fourwinds}[1][]%
+{%
+ \setkeys{fourwinds}{#1}%
+ \LP@set@package{fourwinds}%
+ \LP@set@env@prefix{LP@FW}%
+ \setcounter{LP@rows}{\LP@FW@rows}%
+ \setcounter{LP@columns}{\LP@FW@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@FW@width}%
+ \ifthenelse{\equal{\LP@FW@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@FW@titleindent}\parbox{\LP@FW@titlewidth}{\strut\LP@titleformat\LP@FW@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@FW@scale]%
+ \LP@drawbackground{1}{1}{\LP@FW@columns}{\LP@FW@rows}{\LP@FW@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@FW@columns}{\LP@FW@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@FW@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% hakyuu environment and options
+%
+\newcommand*\LP@HY@init@prefix{LP@HY}%
+\newcommand*\LP@HY@init@package{hakyuu}%
+%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{rows}{5}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{columns}{5}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{scale}{1}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{bgcolor}{}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{title}{}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@HY@init@prefix}{\LP@HY@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@HY@init@prefix}{\LP@HY@init@package}{Large}%
+%
+\let\hakyuucell\setcell%
+%
+\newcommand*\hakyuusetup[1]%
+{%
+ \setkeys{hakyuu.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{hakyuu}
+% \begin{macrocode}
+\newenvironment{hakyuu}[1][]%
+{%
+ \setkeys{hakyuu}{#1}%
+ \LP@set@package{hakyuu}%
+ \LP@set@env@prefix{LP@HY}%
+ \setcounter{LP@rows}{\LP@HY@rows}%
+ \setcounter{LP@columns}{\LP@HY@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@HY@width}%
+ \ifthenelse{\equal{\LP@HY@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@HY@titleindent}\parbox{\LP@HY@titlewidth}{\strut\LP@titleformat\LP@HY@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@HY@scale]%
+ \LP@drawbackground{1}{1}{\LP@HY@columns}{\LP@HY@rows}{\LP@HY@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@HY@columns}{\LP@HY@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@HY@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% hitori environment and options
+%
+\newcommand*\LP@HT@init@prefix{LP@HT}%
+\newcommand*\LP@HT@init@package{hitori}%
+%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{rows}{5}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{columns}{5}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{scale}{1}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{bgcolor}{}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{title}{}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@HT@init@prefix}{\LP@HT@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@HT@init@prefix}{\LP@HT@init@package}{Large}%
+%
+\let\hitoricell\setcell%
+%
+\newcommand*\hitorisetup[1]%
+{%
+ \setkeys{hitori.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{hitori}
+% \begin{macrocode}
+\newenvironment{hitori}[1][]%
+{%
+ \setkeys{hitori}{#1}%
+ \LP@set@package{hitori}%
+ \LP@set@env@prefix{LP@HT}%
+ \setcounter{LP@rows}{\LP@HT@rows}%
+ \setcounter{LP@columns}{\LP@HT@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@HT@width}%
+ \ifthenelse{\equal{\LP@HT@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@HT@titleindent}\parbox{\LP@HT@titlewidth}{\strut\LP@titleformat\LP@HT@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@HT@scale]%
+ \LP@drawbackground{1}{1}{\LP@HT@columns}{\LP@HT@rows}{\LP@HT@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@HT@columns}{\LP@HT@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@HT@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% kakuro environment and options
+%
+\newcommand*\LP@KKR@init@prefix{LP@KKR}%
+\newcommand*\LP@KKR@init@package{kakuro}%
+%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{rows}{5}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{columns}{5}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{scale}{1}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{bgcolor}{}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{color}{green}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{title}{}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@KKR@init@prefix}{\LP@KKR@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@KKR@init@prefix}{\LP@KKR@init@package}{Large}%
+%
+\newif\ifLP@KKR@solution\LP@KKR@solutionfalse%
+%
+\define@choicekey*{kakuro.sty}{solution}[\LP@KKR@solution\nr]{true,false}[true]%
+{%
+ \ifcase\nr\relax%
+ \renewcommand*\LP@KKR@solution{true}%
+ \LP@KKR@solutiontrue%
+ \or%
+ \renewcommand*\LP@KKR@solution{false}%
+ \LP@KKR@solutionfalse%
+ \fi%
+}%
+%
+\define@choicekey*{kakuro}{solution}[\LP@KKR@solution\nr]{true,false}[true]%
+{%
+ \ifcase\nr\relax%
+ \renewcommand*\LP@KKR@solution{true}%
+ \LP@KKR@solutiontrue%
+ \or%
+ \renewcommand*\LP@KKR@solution{false}%
+ \LP@KKR@solutionfalse%
+ \fi%
+}%
+%
+\let\kakurocell\setcell%
+%
+\newcommand*\kakurosetup[1]%
+{%
+ \setkeys{kakuro.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@KKR@print@element}
+% For the \env{kakuro} environment, we need to typeset numbers and special
+% Kakuro cells (\cs{KKR}).
+%
+% \cs{LP@KKR@print@element}\marg{element}
+% \begin{macrocode}
+\def\LP@KKR@print@element#1%
+{%
+% \end{macrocode}
+% First, we test if \marg{element} is a number and typeset \marg{element}
+% into the grid cell, if we are in solution mode. Otherwise, we execute the \cs{KKR} command.
+% \begin{macrocode}
+ \if!\ifnum9<1#1!\else_\fi%
+ \ifLP@KKR@solution%
+ \setcell{\arabic{LP@counti}}{\arabic{LP@countii}}{#1}%
+ \else%
+ \fi%
+ \else%
+ #1%
+ \fi%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\kakurorow}
+% For the \env{kakuro} environment, we need special row and column commands, which
+% can also handle the \cs{KKR} commands.
+% \begin{macrocode}
+\newcommand*\kakurorow[2]%
+{%
+ \setcounter{LP@counti}{1}%
+ \setcounter{LP@countii}{#1}%
+ \foreach \LP@element in {#2}%
+ {%
+ \LP@KKR@print@element{\LP@element}%
+ \stepcounter{LP@counti}%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\kakurocolumn}
+% \begin{macrocode}
+\newcommand*\kakurocolumn[2]%
+{%
+ \setcounter{LP@counti}{#1}%
+ \setcounter{LP@countii}{1}%
+ \foreach \LP@element in {#2}%
+ {%
+ \LP@KKR@print@element{\LP@element}%
+ \stepcounter{LP@countii}%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\KKR}
+% For the \env{kakuro} environment, we need to draw complex kakuro cells. They consist of
+% a diagonally divided cell with the sums of the cells below and right of the current cell.
+% They also have a special background color.
+%
+% \cs{KKR}\marg{vertical sum}\marg{horizontal sum}
+% \begin{macrocode}
+\newcommand*\KKR[2]%
+{%
+% \end{macrocode}
+% First of all, we copy |scale|, |bgcolor| and |color|.
+% \begin{macrocode}
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@bgcolor{\LP@env@prefix}%
+ \LP@set@LP@color{\LP@env@prefix}%
+% \end{macrocode}
+% If |bgcolor| is undefined, we assume |white|.
+% \begin{macrocode}
+ \ifthenelse{\equal{\LP@bgcolor}{}}%
+ {\gdef\LP@sr@bgcolor{white}}%
+ {\gdef\LP@sr@bgcolor{\LP@bgcolor}}%
+% \end{macrocode}
+% To get unique node names, we step our |unique| counter.
+% \begin{macrocode}
+ \stepcounter{LP@counter@unique}%
+% \end{macrocode}
+% In a first step, we draw a rectangular helper node in |bgcolor| color on the \layer{LPdump} layer.
+% \begin{macrocode}
+ \begin{pgfonlayer}{LPdump}%
+ \node [shape=rectangle,inner sep=0pt] (A_\theLP@counter@unique)%
+ at (\arabic{LP@counti}\LP@Pfive,\arabic{LP@countii}\LP@Pfive)%
+ {\tikz\draw[scale=\LP@scale,color=\LP@sr@bgcolor]%
+ (0.08,0.1) rectangle (0.92,0.9);};%
+ \end{pgfonlayer}%
+% \end{macrocode}
+% In the second step, we fill the cell with |color| color and draw a diagonal line.
+% \begin{macrocode}
+ \begin{puzzlebackground}%
+ \fill[color=\LP@color]%
+ (\arabic{LP@counti},\arabic{LP@countii}) rectangle ++(1,1);%
+ \draw[line width=\LP@normallines]%
+ (\arabic{LP@counti},\arabic{LP@countii}) -- ++(0,1) -- ++(1,-1);%
+ \end{puzzlebackground}%
+% \end{macrocode}
+% Finally, we use the corners of the helper node to place the sums.
+% \begin{macrocode}
+ \node [shape=rectangle,inner sep=0pt,anchor=south west,%
+ scale=\LP@scale,font=\small]%
+ at (A_\theLP@counter@unique.south west) {#1};%
+ \node [shape=rectangle,inner sep=0pt,anchor=north east,%
+ scale=\LP@scale,font=\small]%
+ at (A_\theLP@counter@unique.north east) {#2};%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Black}
+% Sometimes, we need black cells.
+% \begin{macrocode}
+\newcommand*\Black%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{puzzlebackground}%
+ \fill[color=black]%
+ (\arabic{LP@counti},\arabic{LP@countii}) rectangle ++(1,1);%
+ \end{puzzlebackground}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{kakuro}
+% \begin{macrocode}
+\newenvironment{kakuro}[1][]%
+{%
+ \setkeys{kakuro}{#1}%
+ \LP@set@package{kakuro}%
+ \LP@set@env@prefix{LP@KKR}%
+ \setcounter{LP@rows}{\LP@KKR@rows}%
+ \setcounter{LP@columns}{\LP@KKR@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@KKR@width}%
+ \ifthenelse{\equal{\LP@KKR@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@KKR@titleindent}\parbox{\LP@KKR@titlewidth}{\strut\LP@titleformat\LP@KKR@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@KKR@scale]%
+ \LP@drawbackground{1}{1}{\LP@KKR@columns}{\LP@KKR@rows}{\LP@KKR@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@KKR@columns}{\LP@KKR@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@KKR@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% kendoku environment and options
+%
+\newcommand*\LP@KD@init@prefix{LP@KD}%
+\newcommand*\LP@KD@init@package{kendoku}%
+%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{rows}{5}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{columns}{5}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{scale}{1}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{bgcolor}{}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{title}{}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@KD@init@prefix}{\LP@KD@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@KD@init@prefix}{\LP@KD@init@package}{Large}%
+%
+\let\kendokucell\setcell%
+%
+\newcommand*\kendokusetup[1]%
+{%
+ \setkeys{kendoku.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{kendoku}
+% \begin{macrocode}
+\newenvironment{kendoku}[1][]%
+{%
+ \setkeys{kendoku}{#1}%
+ \LP@set@package{kendoku}%
+ \LP@set@env@prefix{LP@KD}%
+ \setcounter{LP@rows}{\LP@KD@rows}%
+ \setcounter{LP@columns}{\LP@KD@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@KD@width}%
+ \ifthenelse{\equal{\LP@KD@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@KD@titleindent}\parbox{\LP@KD@titlewidth}{\strut\LP@titleformat\LP@KD@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@KD@scale]%
+ \LP@drawbackground{1}{1}{\LP@KD@columns}{\LP@KD@rows}{\LP@KD@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@KD@columns}{\LP@KD@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@KD@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% killersudoku environment and options
+%
+\newcommand*\LP@KSDK@init@prefix{LP@KSDK}%
+\newcommand*\LP@KSDK@init@package{killersudoku}%
+%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{rows}{5}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{columns}{5}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{scale}{1}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{bgcolor}{}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{title}{}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@KSDK@init@prefix}{\LP@KSDK@init@package}{Large}%
+%
+\let\killersudokucell\setcell%
+%
+\newcommand*\killersudokusetup[1]%
+{%
+ \setkeys{killersudoku.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{killersudoku}
+% \begin{macrocode}
+\newenvironment{killersudoku}[1][]%
+{%
+ \setkeys{killersudoku}{#1}%
+ \LP@set@package{killersudoku}%
+ \LP@set@env@prefix{LP@KSDK}%
+ \setcounter{LP@rows}{\LP@KSDK@rows}%
+ \setcounter{LP@columns}{\LP@KSDK@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@KSDK@width}%
+ \ifthenelse{\equal{\LP@KSDK@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@KSDK@titleindent}\parbox{\LP@KSDK@titlewidth}{\strut\LP@titleformat\LP@KSDK@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@KSDK@scale]%
+ \LP@drawbackground{1}{1}{\LP@KSDK@columns}{\LP@KSDK@rows}{\LP@KSDK@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@KSDK@columns}{\LP@KSDK@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@KSDK@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% laserbeam environment and options
+%
+\newcommand*\LP@LB@init@prefix{LP@LB}%
+\newcommand*\LP@LB@init@package{laserbeam}%
+%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{rows}{5}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{columns}{5}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{scale}{1}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{bgcolor}{}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{width}{6.5cm}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{cvoffset}{-38pt}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{title}{}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@LB@init@prefix}{\LP@LB@init@package}{titlewidth}{6.5cm}%
+\LP@define@choicekey@fontsize{\LP@LB@init@prefix}{\LP@LB@init@package}{Large}%
+%
+\let\laserH\LP@toprow%
+\let\laserV\LP@leftcolumn%
+\let\mirrorH\LP@bottomrow@edge%
+\let\mirrorV\LP@rightcolumn@edge%
+%
+\newcommand*\laser[2][red]%
+{%
+% avoid little laser peaks outside grid
+ \clip (1,1) rectangle (\arabic{LP@columns},\arabic{LP@rows});%
+ \framearea{#1}{#2}%
+}%
+%
+\newcommand*\laserbeamsetup[1]%
+{%
+ \setkeys{laserbeam.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\placecross}
+% Place a cross in the bottom left corner of the grid cell.
+%
+% \cs{placecross}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\placecross[2]%
+{%
+ \LP@G@setcellcontent{#1}{#2}{\LP@Cross}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\placemirror}
+% Place a mirror in the bottom left corner of the grid cell.
+%
+% \cs{placemirror}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\placemirror[3]%
+{%
+ \LP@G@setcellcontent{#1}{#2}{\LP@Mirror{#3}}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\placearrow}
+% Place an arrow in the bottom left corner of the grid cell.
+% \marg{direction} may be: |RightUp|, |LeftUp|, |LeftDown| or |RightDown|
+%
+% \cs{placearrow}\marg{column}\marg{row}\marg{direction}
+% \begin{macrocode}
+\newcommand*\placearrow[3]%
+{%
+ \LP@G@setcellcontent{#1}{#2}{\LP@Arrow{#3}}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@Arrow}
+% We define a Ti{\itshape k}Z picture for an arrow in four directions:
+% |RightUp|, |LeftUp|, |LeftDown| or |RightDown|
+% \begin{macrocode}
+\newcommand*\LP@Arrow[1]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \def\LP@rotate{45}%
+ \ifthenelse{\equal{#1}{LeftUp}}{\def\LP@rotate{135}}{}%
+ \ifthenelse{\equal{#1}{LeftDown}}{\def\LP@rotate{225}}{}%
+ \ifthenelse{\equal{#1}{RightDown}}{\def\LP@rotate{315}}{}%
+% \end{macrocode}
+% We define the line width of the arrow base on |scale|. Line widths are absolut and not
+% influenced by a |scale| factor of the picture.
+% \begin{macrocode}
+ \pgfmathsetmacro{\LPlinewidth}{3pt*\LP@scale}%
+ \tikz\draw[->,line width=\LPlinewidth,%
+ rotate=\LP@rotate,scale=\LP@scale]%
+ (0.1,.5) -- (0.9,.5);%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@Cross}
+% We define a Ti{\itshape k}Z picture of a cross.
+% \begin{macrocode}
+\newcommand*\LP@Cross%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}%
+% \end{macrocode}
+% We ensure that the cross is on top of all elements on the \layer{main} layer.
+% \begin{macrocode}
+ \begin{pgfonlayer}{LPforeground}%
+ \pgfmathsetmacro{\LPlinewidth}{3pt*\LP@scale}%
+% \end{macrocode}
+% For drawing the cross we defined a line width. Now we can draw the cross with the
+% predefined color |LP@c@cross|.
+% \begin{macrocode}
+ \draw[line width=\LPlinewidth,scale=\LP@scale,color=LP@c@cross]%
+ (.35,.35) -- (0.65,.65) -- (.5,.5) -- (.65,.35)-- (.35,.65);%
+ \end{pgfonlayer}%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@Mirror}
+% We define a Ti{\itshape k}Z picture for a mirror.
+%
+% \cs{LP@Mirror}\marg{direction}
+% \begin{macrocode}
+\newcommand*\LP@Mirror[1]%
+{%
+% \end{macrocode}
+% Based on \marg{direction}, we define the angle of the mirror.
+% \begin{macrocode}
+ \def\LP@rotate{0}%
+ \ifthenelse{\equal{#1}{V}}{\def\LP@rotate{90}}{}%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}%
+% \end{macrocode}
+% Mirrors should be on to of everything, therefore we draw them on the
+% \layer{LPforegroundtwo} layer and use the predefined color |LP@c@mirror|.
+% \begin{macrocode}
+ \begin{pgfonlayer}{LPforegroundtwo}%
+ \pgfmathsetmacro{\LPlinewidth}{3pt*\LP@scale}%
+ \draw[line width=\LPlinewidth,scale=\LP@scale,%
+ color=LP@c@mirror,rotate=\LP@rotate]%
+ (.35,.5) -- (0.65,.5);%
+ \end{pgfonlayer}%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{laserbeam}
+% \begin{macrocode}
+\newenvironment{laserbeam}[1][]%
+{%
+ \setkeys{laserbeam}{#1}%
+ \LP@set@package{laserbeam}%
+ \LP@set@env@prefix{LP@LB}%
+ \setcounter{LP@rows}{\LP@LB@rows}%
+ \setcounter{LP@columns}{\LP@LB@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@LB@width}%
+ \ifthenelse{\equal{\LP@LB@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@LB@titleindent}\parbox{\LP@LB@titlewidth}{\strut\LP@titleformat\LP@LB@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@LB@scale]%
+ \LP@drawbackground{1}{1}{\LP@LB@columns}{\LP@LB@rows}{\LP@LB@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@LB@columns}{\LP@LB@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@LB@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% lpsudoku environment and options
+%
+\newcommand*\LP@SDK@init@prefix{LP@SDK}%
+\newcommand*\LP@SDK@init@package{lpsudoku}%
+%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{rows}{9}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{columns}{9}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{scale}{1}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{bgcolor}{}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{width}{9.1cm}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{title}{}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@SDK@init@prefix}{\LP@SDK@init@package}{titlewidth}{9.1cm}%
+\LP@define@choicekey@fontsize{\LP@SDK@init@prefix}{\LP@SDK@init@package}{Large}%
+%
+\let\lpsudokucell\setcell%
+%
+\newcommand*\lpsudokusetup[1]%
+{%
+ \setkeys{lpsudoku.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@drawsudokugrid}
+% For the \env{lpsudoku} and \env{skyscrapers} environments, we need to add the typical
+% thick Sudoku lines to the standard grid.
+% \begin{macrocode}
+\newcommand*\LP@drawsudokugrid%
+{%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (1,1) -- (1,10);%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (4,1) -- (4,10);%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (7,1) -- (7,10);%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (10,1) -- (10,10);%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (1,1) -- (10,1);%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (1,4) -- (10,4);%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (1,7) -- (10,7);%
+ \draw[line width=\LP@thicklines,draw opacity=\LP@draw@opacity]%
+ (1,10) -- (10,10);%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@magnetsgrid}
+% For the \env{magnets} environment, we need to add some lines to the
+% standard grid.
+% \begin{macrocode}
+\newcommand*\LP@magnetsgrid%
+{%
+% \end{macrocode}
+% First, we copy the values of |fontsize|, |columns| and |rows| from
+% the environment we are in at the moment. Then, we step |columns| and
+% |rows| to get the upper right grid coordinate.
+% \begin{macrocode}
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \LP@set@LP@columns{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \setcounter{LP@counti}{\LP@columns}% max column
+ \setcounter{LP@countii}{\LP@rows}% max row
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+% \end{macrocode}
+% Now, we can draw the additional lines and the |+| and |-| signs.
+% \begin{macrocode}
+ \draw[step=1cm,line width=\LP@normallines]%
+ (-1,1) grid (1,\arabic{LP@countii});%
+ \draw[step=1cm,line width=\LP@normallines]%
+ (1,\arabic{LP@countii}) grid ++(\LP@columns,2);%
+ \draw[line width=\LP@normallines]%
+ (0,\arabic{LP@countii}) -- ++(0,1) -- ++(1,0);%
+ \draw[line width=\LP@thicklines]%
+ (-1,1) rectangle (1,\arabic{LP@countii});%
+ \draw[line width=\LP@thicklines]%
+ (1,\arabic{LP@countii}) rectangle ++(\LP@columns,2);%
+ \draw[line width=\LP@thicklines]%
+ (1,\arabic{LP@countii}) rectangle ++(-2,2);%
+ \node[font=\LP@fontsize\bfseries] at (0.5,\arabic{LP@counti}.5)%
+ {$-$};%
+ \stepcounter{LP@counti}%
+ \node[font=\LP@fontsize\bfseries] at (-0.5,\arabic{LP@counti}.5)%
+ {$+$};%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{lpsudoku}
+% \begin{macrocode}
+\newenvironment{lpsudoku}[1][]%
+{%
+ \setkeys{lpsudoku}{#1}%
+ \LP@set@package{lpsudoku}%
+ \LP@set@env@prefix{LP@SDK}%
+ \setcounter{LP@rows}{\LP@SDK@rows}%
+ \setcounter{LP@columns}{\LP@SDK@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@SDK@width}%
+ \ifthenelse{\equal{\LP@SDK@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@SDK@titleindent}\parbox{\LP@SDK@titlewidth}{\strut\LP@titleformat\LP@SDK@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@SDK@scale]%
+ \LP@drawbackground{1}{1}{\LP@SDK@columns}{\LP@SDK@rows}{\LP@SDK@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@SDK@columns}{\LP@SDK@rows}{1cm}%
+ \LP@drawsudokugrid%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@SDK@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% magiclabyrinth environment and options
+%
+\newcommand*\LP@ML@init@prefix{LP@ML}%
+\newcommand*\LP@ML@init@package{magiclabyrinth}%
+%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{rows}{5}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{columns}{5}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{scale}{1}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{bgcolor}{}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{title}{}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@ML@init@prefix}{\LP@ML@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@ML@init@prefix}{\LP@ML@init@package}{Large}%
+%
+\let\magiclabyrinthcell\setcell%
+%
+\newcommand*\magiclabyrinthsetup[1]%
+{%
+ \setkeys{magiclabyrinth.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\mlline}
+% \begin{macrocode}
+\newcommand*\mlline[1]%
+{%
+ \draw[color=black, line width=\LP@thicklines] #1;%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MasyuW}
+% \begin{macrocode}
+\newcommand*\MasyuW%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \draw[color=black,fill=white] (0.5,0.5) circle (0.5cm);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{magiclabyrinth}
+% \begin{macrocode}
+\newenvironment{magiclabyrinth}[1][]%
+{%
+ \setkeys{magiclabyrinth}{#1}%
+ \LP@set@package{magiclabyrinth}%
+ \LP@set@env@prefix{LP@ML}%
+ \setcounter{LP@rows}{\LP@ML@rows}%
+ \setcounter{LP@columns}{\LP@ML@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@ML@width}%
+ \ifthenelse{\equal{\LP@ML@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@ML@titleindent}\parbox{\LP@ML@titlewidth}{\strut\LP@titleformat\LP@ML@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@ML@scale]%
+ \LP@drawbackground{1}{1}{\LP@ML@columns}{\LP@ML@rows}{\LP@ML@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@ML@columns}{\LP@ML@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@ML@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% magnets environment and options
+%
+\newcommand*\LP@MN@init@prefix{LP@MN}%
+\newcommand*\LP@MN@init@package{magnets}%
+%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{rows}{6}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{columns}{6}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{scale}{1}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{bgcolor}{}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{width}{8.1cm}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{title}{}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@MN@init@prefix}{\LP@MN@init@package}{titlewidth}{8.1cm}%
+\LP@define@choicekey@fontsize{\LP@MN@init@prefix}{\LP@MN@init@package}{Large}%
+%
+\let\magnetscell\setcell%
+%
+\let\minusH\LP@toprow%
+\let\minusV\LP@leftcolumn%
+%
+\newcommand*\plusV[1]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \setcounter{LP@counti}{1}%
+ \foreach \LP@element in{#1}%
+ {%
+ \node at (-0.5,\arabic{LP@counti}\LP@Pfive){\LP@fontsize\LP@element};%
+ \stepcounter{LP@counti}%
+ };%
+}%
+%
+\newcommand*\plusH[1]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \setcounter{LP@counti}{1}%
+ \setcounter{LP@countii}{\LP@rows}%
+ \addtocounter{LP@countii}{2}%
+ \foreach \LP@element in{#1}%
+ {%
+ \node at (\arabic{LP@counti}\LP@Pfive,\arabic{LP@countii}\LP@Pfive){\LP@fontsize\LP@element};%
+ \stepcounter{LP@counti}%
+ };%
+}%
+%
+\newcommand*\magnetssetup[1]%
+{%
+ \setkeys{magnets.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\PMH}
+% \begin{macrocode}
+\newcommand*\PMH[1]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \foreach \LP@fe@column/\LP@fe@row in {#1}%
+ {%
+ \setcounter{LP@counti}{\LP@fe@column}%
+ \setcounter{LP@countii}{\LP@fe@row}%
+ \draw[line width=\LP@thicklines,fill=white]%
+ (\arabic{LP@counti},\arabic{LP@countii}) rectangle ++(2,1);%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$+$};%
+ \stepcounter{LP@counti}%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$-$};%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MPH}
+% \begin{macrocode}
+\newcommand*\MPH[1]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \foreach \LP@fe@column/\LP@fe@row in {#1}%
+ {%
+ \setcounter{LP@counti}{\LP@fe@column}%
+ \setcounter{LP@countii}{\LP@fe@row}%
+ \draw[line width=\LP@thicklines,fill=white]%
+ (\arabic{LP@counti},\arabic{LP@countii}) rectangle ++(2,1);%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$-$};%
+ \stepcounter{LP@counti}%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$+$};%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\PMV}
+% \begin{macrocode}
+\newcommand*\PMV[1]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \foreach \LP@fe@column/\LP@fe@row in {#1}%
+ {%
+ \setcounter{LP@counti}{\LP@fe@column}%
+ \setcounter{LP@countii}{\LP@fe@row}%
+ \draw[line width=\LP@thicklines,fill=white]%
+ (\arabic{LP@counti},\arabic{LP@countii}) rectangle ++(1,2);%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$+$};%
+ \stepcounter{LP@countii}%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$-$};%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MPV}
+% \begin{macrocode}
+\newcommand*\MPV[1]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \foreach \LP@fe@column/\LP@fe@row in {#1}%
+ {%
+ \setcounter{LP@counti}{\LP@fe@column}%
+ \setcounter{LP@countii}{\LP@fe@row}%
+ \draw[line width=\LP@thicklines,fill=white]%
+ (\arabic{LP@counti},\arabic{LP@countii}) rectangle ++(1,2);%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$-$};%
+ \stepcounter{LP@countii}%
+ \node[font=\LP@fontsize\bfseries]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii}.5) {$+$};%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\magnetsH}
+% \begin{macrocode}
+\newcommand*\magnetsH[1]%
+{%
+ \foreach \LP@fe@column/\LP@fe@row in {#1}%
+ {%
+ \draw[line width=\LP@thicklines,fill=white]%
+ (\LP@fe@column,\LP@fe@row) rectangle ++(2,1);%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\magnetsV}
+% \begin{macrocode}
+\newcommand*\magnetsV[1]%
+{%
+ \foreach \LP@fe@column/\LP@fe@row in {#1}%
+ {%
+ \draw[line width=\LP@thicklines,fill=white]%
+ (\LP@fe@column,\LP@fe@row) rectangle ++(1,2);%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{magnets}
+% \begin{macrocode}
+\newenvironment{magnets}[1][]%
+{%
+ \setkeys{magnets}{#1}%
+ \LP@set@package{magnets}%
+ \LP@set@env@prefix{LP@MN}%
+ \setcounter{LP@rows}{\LP@MN@rows}%
+ \setcounter{LP@columns}{\LP@MN@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@MN@width}%
+ \ifthenelse{\equal{\LP@MN@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@MN@titleindent}\parbox{\LP@MN@titlewidth}{\strut\LP@titleformat\LP@MN@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@MN@scale]%
+ \LP@drawbackground{1}{1}{\LP@MN@columns}{\LP@MN@rows}{\LP@MN@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@MN@columns}{\LP@MN@rows}{1cm}%
+ \LP@magnetsgrid%
+ \framepuzzle%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@MN@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% masyu environment and options
+%
+\newcommand*\LP@MY@init@prefix{LP@MY}%
+\newcommand*\LP@MY@init@package{masyu}%
+%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{rows}{5}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{columns}{5}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{scale}{1}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{color}{green}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{bgcolor}{}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{title}{}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@MY@init@prefix}{\LP@MY@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@MY@init@prefix}{\LP@MY@init@package}{Large}%
+%
+\let\masyucell\setcell%
+%
+\newcommand*\masyusetup[1]%
+{%
+ \setkeys{masyu.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\MasyuB}
+% \begin{macrocode}
+\newcommand*\MasyuB%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=black] (0.5,0.5) circle (0.5cm);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\masyuline}
+% \begin{macrocode}
+\newcommand*\masyuline[1]%
+{%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \begin{puzzleforeground}%
+ \bgroup%
+ \def\LP@rel@tikzpath{.5}%
+ \draw[color=\LP@color, line width=\LP@thicklines] #1;%
+ \egroup%
+ \end{puzzleforeground}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{masyu}
+% \begin{macrocode}
+\newenvironment{masyu}[1][]%
+{%
+ \setkeys{masyu}{#1}%
+ \LP@set@package{masyu}%
+ \LP@set@env@prefix{LP@MY}%
+ \setcounter{LP@rows}{\LP@MY@rows}%
+ \setcounter{LP@columns}{\LP@MY@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@MY@width}%
+ \ifthenelse{\equal{\LP@MY@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@MY@titleindent}\parbox{\LP@MY@titlewidth}{\strut\LP@titleformat\LP@MY@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@MY@scale]%
+ \LP@drawbackground{1}{1}{\LP@MY@columns}{\LP@MY@rows}{\LP@MY@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@MY@columns}{\LP@MY@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@MY@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% minesweeper environment and options
+%
+\newcommand*\LP@MS@init@prefix{LP@MS}%
+\newcommand*\LP@MS@init@package{minesweeper}%
+%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{rows}{5}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{columns}{5}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{scale}{1}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{bgcolor}{}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{title}{}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@MS@init@prefix}{\LP@MS@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@MS@init@prefix}{\LP@MS@init@package}{Large}%
+%
+\let\minesweepercell\setcell%
+%
+\newcommand*\minesweepersetup[1]%
+{%
+ \setkeys{minesweeper.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@Mine}
+% We define a Ti{\itshape k}Z picture for a mine.
+% \begin{macrocode}
+\newcommand*\LP@Mine%
+{%
+ \begin{tikzpicture}[scale=\LP@scale]%
+% \end{macrocode}
+% We simply draw a shaded ball with four spikes.
+% \begin{macrocode}
+ \fill[color=black] (.2,.5) -- (.5,.6) -- (.5,.4) -- cycle;%
+ \fill[color=black] (.8,.5) -- (.5,.6) -- (.5,.4) -- cycle;%
+ \fill[color=black] (.5,.8) -- (.4,.5) -- (.6,.5) -- cycle;%
+ \fill[color=black] (.5,.2) -- (.4,.5) -- (.6,.5) -- cycle;%
+ \shade[ball color=black] (.5,.5) circle (.225cm);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Mine}
+% A user command for mines.
+% \begin{macrocode}
+\let\Mine\LP@Mine%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{minesweeper}
+% \begin{macrocode}
+\newenvironment{minesweeper}[1][]%
+{%
+ \setkeys{minesweeper}{#1}%
+ \LP@set@package{minesweeper}%
+ \LP@set@env@prefix{LP@MS}%
+ \setcounter{LP@rows}{\LP@MS@rows}%
+ \setcounter{LP@columns}{\LP@MS@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@MS@width}%
+ \ifthenelse{\equal{\LP@MS@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@MS@titleindent}\parbox{\LP@MS@titlewidth}{\strut\LP@titleformat\LP@MS@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@MS@scale]%
+ \LP@drawbackground{1}{1}{\LP@MS@columns}{\LP@MS@rows}{\LP@MS@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@MS@columns}{\LP@MS@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@MS@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% nonogram environment and options
+%
+\newcommand*\LP@NG@init@prefix{LP@NG}%
+\newcommand*\LP@NG@init@package{nonogram}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{rows}{5}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{columns}{5}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{extracells}{5}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{helplines}{5}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{solution}{false}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{scale}{1}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{bgcolor}{}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{color}{black}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{title}{}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@NG@init@prefix}{\LP@NG@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@NG@init@prefix}{\LP@NG@init@package}{Large}%
+%
+% \end{macrocode}
+% \begin{macro}{\nonogramrow}
+% \begin{macrocode}
+\newcommand*\nonogramrow[2]%
+{%
+ \foreach \LP@fe@column/\LP@fe@length in {#2}%
+ {%
+ \setcounter{LP@whiledo@i}{\LP@fe@length}%
+ \setcounter{LP@countiii}{\LP@fe@column}%
+ \whiledo{\value{LP@whiledo@i}>0}%
+ {%
+ \fillcell{\arabic{LP@countiii}}{#1}%
+ \addtocounter{LP@countiii}{1}%
+ \addtocounter{LP@whiledo@i}{-1}%
+ }%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nonogramcolumn}
+% \begin{macrocode}
+\newcommand*\nonogramcolumn[2]%
+{%
+ \foreach \LP@fe@row/\LP@fe@length in {#2}%
+ {%
+ \setcounter{LP@whiledo@i}{\LP@fe@length}%
+ \setcounter{LP@countiii}{\LP@fe@row}%
+ \whiledo{\value{LP@whiledo@i}>0}%
+ {%
+ \fillcell{#1}{\arabic{LP@countiii}}%
+ \addtocounter{LP@countiii}{1}%
+ \addtocounter{LP@whiledo@i}{-1}%
+ }%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nonogramV}
+% \begin{macrocode}
+\newcommand*\nonogramV[1]%
+{%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \setcounter{LP@whiledo@i}{0}%
+ \foreach \LP@line in {#1}%
+ {%
+ \setcounter{LP@countiii}{0}%
+ \addtocounter{LP@whiledo@i}{1}%
+ \foreach \LP@element in \LP@line%
+ {%
+ \ifthenelse{\value{LP@countiii}=0}%
+ {%
+ {\LP@fontsize\node at (0.5,\arabic{LP@whiledo@i}.5){\LP@element};}%
+ }%
+ {%
+ \ifthenelse{\value{LP@countiii}=-1}%
+ {%
+ {\LP@fontsize\node at (-0.5,\arabic{LP@whiledo@i}.5){\LP@element};}%
+ }%
+ {%
+ \addtocounter{LP@countiii}{1}%
+ {\LP@fontsize\node at%
+ (\arabic{LP@countiii}.5,\arabic{LP@whiledo@i}.5){\LP@element};}%
+ \addtocounter{LP@countiii}{-1}%
+ }%
+ }%
+ \addtocounter{LP@countiii}{-1}%
+ }%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nonogramH}
+% \begin{macrocode}
+\newcommand*\nonogramH[1]%
+{%
+ \setcounter{LP@whiledo@i}{0}%
+ \foreach \LP@line in {#1}%
+ {%
+ \setcounter{LP@countiii}{\LP@rows}%
+ \addtocounter{LP@countiii}{1}%
+ \addtocounter{LP@whiledo@i}{1}%
+ \foreach \LP@element in \LP@line%
+ {%
+ {\LP@fontsize\node at%
+ (\arabic{LP@whiledo@i}.5,\arabic{LP@countiii}.5){\LP@element};}%
+ \addtocounter{LP@countiii}{1}%
+ }%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@nonogramgrid}
+% \begin{macrocode}
+\newcommand*\LP@nonogramgrid%
+{%
+ \LP@set@LP@columns{\LP@env@prefix}%
+ \LP@set@LP@rows{\LP@env@prefix}%
+ \setcounter{LP@counti}{\LP@columns}% max column
+ \setcounter{LP@countii}{\LP@rows}% max row
+ \setcounter{LP@countiii}{\LP@NG@extracells}%
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+ \addtocounter{LP@countiii}{-1}%
+ \setcounter{LP@whiledo@i}{1}%
+ \setcounter{LP@whiledo@ii}{\LP@NG@extracells}%
+ \addtocounter{LP@whiledo@ii}{\arabic{LP@countii}}%
+ \setcounter{LP@countiii}{\arabic{LP@countii}}%
+ \addtocounter{LP@countiii}{\LP@NG@extracells}%
+ \addtocounter{LP@counti}{1}%
+ \whiledo{\value{LP@whiledo@i}<\value{LP@counti}}%
+ {%
+ \draw[line width=\LP@normallines]%
+ (\arabic{LP@whiledo@i},1) --%
+ (\arabic{LP@whiledo@i},\arabic{LP@countiii});%
+ \addtocounter{LP@whiledo@i}{1}%
+ }%
+ \addtocounter{LP@counti}{-1}%
+ \setcounter{LP@whiledo@i}{1}%
+ \setcounter{LP@whiledo@ii}{-\LP@NG@extracells}%
+ \addtocounter{LP@whiledo@ii}{1}%
+ \addtocounter{LP@countii}{1}%
+ \whiledo{\value{LP@whiledo@i}<\value{LP@countii}}%
+ {%
+ \draw[line width=\LP@normallines]%
+ (\arabic{LP@whiledo@ii},\arabic{LP@whiledo@i}) --%
+ (\arabic{LP@counti},\arabic{LP@whiledo@i});%
+ \addtocounter{LP@whiledo@i}{1}%
+ }%
+ \addtocounter{LP@countii}{-1}%
+ \setcounter{LP@countiii}{\LP@NG@helplines}%
+ \ifthenelse{\arabic{LP@countiii}>0}%
+ {%
+ \setcounter{LP@whiledo@i}{1}%
+ \addtocounter{LP@whiledo@i}{\LP@NG@helplines}%
+ \setcounter{LP@whiledo@ii}{\LP@NG@extracells}%
+ \addtocounter{LP@whiledo@ii}{\arabic{LP@countii}}%
+ \setcounter{LP@countiii}{\arabic{LP@countii}}%
+ \addtocounter{LP@countiii}{\LP@NG@extracells}%
+ \whiledo{\value{LP@whiledo@i}<\value{LP@counti}}%
+ {%
+ \draw[line width=\LP@thicklines]%
+ (\arabic{LP@whiledo@i},1) --%
+ (\arabic{LP@whiledo@i},\arabic{LP@countiii});%
+ \addtocounter{LP@whiledo@i}{\LP@NG@helplines}%
+ }%
+ \draw[line width=\LP@thicklines] (1,1) -- (1,\arabic{LP@countiii});%
+ \draw[line width=\LP@thicklines]%
+ (\arabic{LP@counti},1) --%
+ (\arabic{LP@counti},\arabic{LP@countiii});%
+ \setcounter{LP@whiledo@i}{1}%
+ \addtocounter{LP@whiledo@i}{\LP@NG@helplines}%
+ \setcounter{LP@whiledo@ii}{-\LP@NG@extracells}%
+ \addtocounter{LP@whiledo@ii}{1}%
+ \whiledo{\value{LP@whiledo@i}<\value{LP@countii}}%
+ {%
+ \draw[line width=\LP@thicklines]%
+ (\arabic{LP@whiledo@ii},\arabic{LP@whiledo@i}) --%
+ (\arabic{LP@counti},\arabic{LP@whiledo@i});%
+ \addtocounter{LP@whiledo@i}{\LP@NG@helplines}%
+ }%
+ \draw[line width=\LP@thicklines]%
+ (\arabic{LP@whiledo@ii},1) -- (\arabic{LP@counti},1);%
+ \draw[line width=\LP@thicklines]%
+ (\arabic{LP@whiledo@ii},\arabic{LP@countii}) --%
+ (\arabic{LP@counti},\arabic{LP@countii});%
+ }%
+ {}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\nonogramsetup}
+% \begin{macrocode}
+\newcommand*\nonogramsetup[1]%
+{%
+ \setkeys{nonogram.sty}{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{nonogram}
+% \begin{macrocode}
+\newenvironment{nonogram}[1][]%
+{%
+ \setkeys{nonogram}{#1}%
+ \LP@set@package{nonogram}%
+ \LP@set@env@prefix{LP@NG}%
+ \setcounter{LP@rows}{\LP@NG@rows}%
+ \setcounter{LP@columns}{\LP@NG@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@NG@width}%
+ \ifthenelse{\equal{\LP@NG@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@NG@titleindent}\parbox{\LP@NG@titlewidth}{\strut\LP@titleformat\LP@NG@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@NG@scale]%
+ \LP@drawbackground{1}{1}{\LP@NG@columns}{\LP@NG@rows}{\LP@NG@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@NG@columns}{\LP@NG@rows}{1cm}%
+ \framepuzzle%
+ \ifthenelse{\equal{\LP@NG@solution}{false}}%
+ {%
+ \LP@nonogramgrid%
+ }%
+ {}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@NG@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% numberlink environment and options
+%
+\newcommand*\LP@NL@init@prefix{LP@NL}%
+\newcommand*\LP@NL@init@package{numberlink}%
+%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{rows}{5}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{columns}{5}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{scale}{1}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{bgcolor}{}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{color}{red}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{title}{}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@NL@init@prefix}{\LP@NL@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@NL@init@prefix}{\LP@NL@init@package}{Large}%
+%
+\newcommand*\numberlinkcell[3]%
+{%
+ \fourwindscell{#1}{#2}{#3}{}%
+}%
+%
+%
+\newcommand*\numberlinksetup[1]%
+{%
+ \setkeys{numberlink.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\link}
+% \begin{macrocode}
+\newcommand*\link[2][]%
+{%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \bgroup%
+ \def\LP@rel@tikzpath{.5}%
+ \LP@Line[color=\LP@color,#1]{#2}%
+ \egroup%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{numberlink}
+% \begin{macrocode}
+\newenvironment{numberlink}[1][]%
+{%
+ \setkeys{numberlink}{#1}%
+ \LP@set@package{numberlink}%
+ \LP@set@env@prefix{LP@NL}%
+ \setcounter{LP@rows}{\LP@NL@rows}%
+ \setcounter{LP@columns}{\LP@NL@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@NL@width}%
+ \ifthenelse{\equal{\LP@NL@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@NL@titleindent}\parbox{\LP@NL@titlewidth}{\strut\LP@titleformat\LP@NL@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@NL@scale]%
+ \LP@drawbackground{1}{1}{\LP@NL@columns}{\LP@NL@rows}{\LP@NL@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@NL@columns}{\LP@NL@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@NL@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% resuko environment and options
+%
+\newcommand*\LP@RSK@init@prefix{LP@RSK}%
+\newcommand*\LP@RSK@init@package{resuko}%
+%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{rows}{5}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{columns}{5}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{scale}{1}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{bgcolor}{}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{color}{blue}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{title}{}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@RSK@init@prefix}{\LP@RSK@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@RSK@init@prefix}{\LP@RSK@init@package}{Large}%
+%
+\let\resukocell\setcell%
+%
+\newcommand*\resukosetup[1]%
+{%
+ \setkeys{resuko.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@trackC}
+% For the \env{resuko} environment, we need to draw differnt tiles of track segments.
+% First, we start with a curve from the bottom to the left.
+% \begin{macrocode}
+\newcommand*\LP@trackC%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}[scale=\LP@scale]%
+ \pgfsetcornersarced{\pgfpoint{4mm*\LP@scale}{4mm*\LP@scale}}%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0,.5)--(.5,.5)--(.5,0);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@G@trackC}
+% A generic command for drawing track curves with a rotation \oarg{angle}.
+%
+% \cs{LP@G@trackC}\oarg{angle}
+% \begin{macrocode}
+\newcommand*\LP@G@trackC[1][0]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+% \end{macrocode}
+% We draw a Ti\textit{k}Z picture and apply a rotation.
+% \begin{macrocode}
+ \begin{tikzpicture}[scale=\LP@scale,rotate=#1]%
+% \end{macrocode}
+% We want tiles fitting into a cell, so we clip the picture. Furthermore, we
+% want rounded corners for the race track, of course!
+% \begin{macrocode}
+ \clip (0,0) rectangle (1,1);%
+ \pgfsetcornersarced{\pgfpoint{4mm*\LP@scale}{4mm*\LP@scale}}%
+% \end{macrocode}
+% Then we draw a track curve from the bottom to the left. Rotation applies
+% for the complete picture!
+% \begin{macrocode}
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0,.5)--(.5,.5)--(.5,0);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CurveBL}
+% \begin{macrocode}
+\let\CurveBL\LP@G@trackC%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CurveBR}
+% \begin{macrocode}
+\newcommand*\CurveBR{\LP@G@trackC[90]}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CurveTR}
+% \begin{macrocode}
+\newcommand*\CurveTR{\LP@G@trackC[180]}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\CurveTL}
+% \begin{macrocode}
+\newcommand*\CurveTL{\LP@G@trackC[270]}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@trackS}
+% Of course, we also need straights.
+% \begin{macrocode}
+\newcommand*\LP@trackS%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}[scale=\LP@scale]%
+ \draw[draw opacity=0] (.2,0) -- (.8,1);%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (.5,0)--(.5,1);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@G@trackS}
+% We need horizontal and vertical straights, therefore we allow an rotate angle.
+%
+% \cs{LP@G@trackS}\oarg{angle}
+% \begin{macrocode}
+\newcommand*\LP@G@trackS[1][0]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}[scale=\LP@scale,rotate=#1]%
+ \clip (0,0) rectangle (1,1);%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (.5,0)--(.5,1);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\StraightV}
+% \begin{macrocode}
+\newcommand*\StraightV{\LP@G@trackS}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\StraightH}
+% \begin{macrocode}
+\newcommand*\StraightH{\LP@G@trackS[90]}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Straight}
+% \begin{macrocode}
+\let\Straight\StraightV%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@trackCR}
+% Crossings are needed as well!
+% \begin{macrocode}
+\newcommand*\LP@trackCR%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}[scale=\LP@scale]%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0,0.5)--(1,.5);%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0.5,0)--(.5,.2);%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0.5,1)--(.5,.8);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@G@trackCR}
+% Same game again, we need also rotated versions.
+% \begin{macrocode}
+\newcommand*\LP@G@trackCR[1][0]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}[scale=\LP@scale,rotate=#1]%
+ \clip (0,0) rectangle (1,1);%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0,0.5)--(1,.5);%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0.5,0)--(.5,.2);%
+ \draw[color=LP@c@track, line width=.3cm*\LP@scale]%
+ (0.5,1)--(.5,.8);%
+ \end{tikzpicture}%
+}%
+%
+\newcommand*\CrossH{\LP@G@trackCR}%
+\newcommand*\CrossV{\LP@G@trackCR[90]}%
+\let\Cross\CrossH%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@graveltrap}
+% We also need a gravel trap.
+%
+% \begin{macrocode}
+\newcommand*\LP@graveltrap%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}[scale=\LP@scale]%
+ \clip (0,0) rectangle (1,1);%
+ \fill[color=LP@c@track] (.5,.5) circle (.1cm);%
+ \end{tikzpicture}%
+}%
+%
+\let\Graveltrap\LP@graveltrap%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\parkinglot}
+% And a parking lot!
+% \begin{macrocode}
+\newcommand*\parkinglot[2]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \LP@set@LP@bgcolor{\LP@env@prefix}%
+ \LP@set@LP@fontsize{\LP@env@prefix}%
+ \ifthenelse{\equal{\LP@color}{}}%
+ {\gdef\LP@c@parkinglot{black}}%
+ {\gdef\LP@c@parkinglot{\LP@color}}%
+ \ifthenelse{\equal{\LP@bgcolor}{}}%
+ {\gdef\LP@c@bg@parkinglot{white}}%
+ {\gdef\LP@c@bg@parkinglot{\LP@bgcolor}}%
+ \setcounter{LP@counti}{#1}%
+ \setcounter{LP@countii}{#2}%
+ \stepcounter{LP@counti}%
+ \stepcounter{LP@countii}%
+ \draw[color=\LP@c@parkinglot,line width=\LP@normallines,%
+ fill=\LP@c@bg@parkinglot] (#1,#2) rectangle ++(2,2);%
+ \node[color=\LP@c@parkinglot,font=\sffamily\bfseries\LP@fontsize]%
+ at (\arabic{LP@counti},\arabic{LP@countii}){P};%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pitlane}
+% And finally, the pitlane!
+% \begin{macrocode}
+\newcommand*\pitlane[3]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@color{\LP@env@prefix}%
+ \ifthenelse{\equal{\LP@color}{}}%
+ {\gdef\LP@c@pitlane{black}}%
+ {\gdef\LP@c@pitlane{\LP@color}}%
+ \ifthenelse{\equal{#3}{V}}%
+ {\draw[color=black,line width=\LP@normallines,fill=\LP@c@pitlane]%
+ (#1,#2) rectangle ++(1,4);}%
+ {\draw[color=black,line width=\LP@normallines,fill=\LP@c@pitlane]%
+ (#1,#2) rectangle ++(4,1);}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@trackline}
+% This macro provides the "box" placed next to the grid, showing the
+% straights, curves and crossings, which are needed in that line!
+%
+% \cs{LP@trackline}\marg{\string# straights}\marg{\string# curves}\marg{\string# crossings}
+% \begin{macrocode}
+\newcommand*\LP@trackline[3]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \pgfmathsetlength{\LP@length}{.1cm*\LP@scale}%
+ \scalebox{\LP@tracks@scale}%
+ {%
+ \hspace{\LP@length}%
+ \setcounter{LP@whiledo@i}{#1}%
+ \whiledo{\arabic{LP@whiledo@i}>0}%
+ {%
+ \LP@trackS%
+ \addtocounter{LP@whiledo@i}{-1}%
+ }%
+ \setcounter{LP@whiledo@i}{#2}%
+ \whiledo{\arabic{LP@whiledo@i}>0}%
+ {%
+ \LP@trackC%
+ \addtocounter{LP@whiledo@i}{-1}%
+ }%
+ \hspace{\LP@length}%
+ \setcounter{LP@whiledo@i}{#3}%
+ \whiledo{\arabic{LP@whiledo@i}>0}%
+ {%
+ \LP@trackCR%
+ \addtocounter{LP@whiledo@i}{-1}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\trackV}
+% This macro places the vertical track lines and expects a csv list
+% in the format straights/curves/crossings!
+%
+% \cs{trackV}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\trackV[1]%
+{%
+ \LP@set@LP@columns{\LP@env@prefix}%
+ \setcounter{LP@counti}{\LP@columns}%
+ \stepcounter{LP@counti}%
+ \setcounter{LP@countii}{1}%
+ \foreach \LP@c@straight/\LP@c@curve/\LP@c@cross in {#1}%
+ {%
+ \node[anchor=west] at (\arabic{LP@counti},\arabic{LP@countii}.5)%
+ {\LP@trackline{\LP@c@straight}{\LP@c@curve}{\LP@c@cross}};%
+ \stepcounter{LP@countii}%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\trackH}
+% The same for the horizontal track lines!
+%
+% \cs{trackH}\marg{csv list}
+% \begin{macrocode}
+\newcommand*\trackH[1]%
+{%
+ \setcounter{LP@counti}{1}%
+ \setcounter{LP@countii}{1}%
+ \foreach \LP@c@straight/\LP@c@curve/\LP@c@cross in {#1}%
+ {%
+ \node[anchor=west,rotate=-90]%
+ at (\arabic{LP@counti}.5,\arabic{LP@countii})%
+ {\LP@trackline{\LP@c@straight}{\LP@c@curve}{\LP@c@cross}};%
+ \stepcounter{LP@counti}%
+ };%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\track}
+% We still need to draw the race track. The used decoration - which allows
+% automatic over-/underbridges - was provided by
+% \href{http://tex.stackexchange.com/users/3708/frederic}{Frédéric} in this
+% \href{http://tex.stackexchange.com/questions/115923/crossing-paths-in-tikz-without-intersection}{question}!
+%
+% \cs{track}\marg{Ti\textit{k}z path}
+% \begin{macrocode}
+\newcommand*\track[1]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \LP@set@LP@bgcolor{\LP@env@prefix}%
+ \ifthenelse{\equal{\LP@bgcolor}{}}%
+ {\gdef\LP@c@bg@track{white}}%
+ {\gdef\LP@c@bg@track{\LP@bgcolor}}%
+ \bgroup%
+ \def\LP@rel@tikzpath{.5}%
+ \begin{pgfonlayer}{LPbackgroundtwo}%
+ \pgfsetcornersarced{\pgfpoint{4.9mm*\LP@scale}{4.9mm*\LP@scale}}%
+ \draw[decorate,decoration={show path construction,%
+ lineto code={%
+ \draw [\LP@c@bg@track,line width=0.15cm*\LP@scale,%
+ double=LP@c@track,double distance=.3cm*\LP@scale]%
+ (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);},%
+ curveto code={%
+ \draw [LP@c@track,line width=0.3cm*\LP@scale]%
+ (\tikzinputsegmentfirst) .. controls%
+ (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)%
+ ..(\tikzinputsegmentlast);}}] #1;%
+ \end{pgfonlayer}%
+ \egroup%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{resuko}
+% \begin{macrocode}
+\newenvironment{resuko}[1][]%
+{%
+ \setkeys{resuko}{#1}%
+ \LP@set@package{resuko}%
+ \LP@set@env@prefix{LP@RSK}%
+ \setcounter{LP@rows}{\LP@RSK@rows}%
+ \setcounter{LP@columns}{\LP@RSK@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@RSK@width}%
+ \ifthenelse{\equal{\LP@RSK@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@RSK@titleindent}\parbox{\LP@RSK@titlewidth}{\strut\LP@titleformat\LP@RSK@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@RSK@scale]%
+ \LP@drawbackground{1}{1}{\LP@RSK@columns}{\LP@RSK@rows}{\LP@RSK@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@RSK@columns}{\LP@RSK@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@RSK@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% schatzsuche environment and options
+%
+\newcommand*\LP@SS@init@prefix{LP@SS}%
+\newcommand*\LP@SS@init@package{schatzsuche}%
+%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{rows}{5}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{columns}{5}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{scale}{1}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{bgcolor}{}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{title}{}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@SS@init@prefix}{\LP@SS@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@SS@init@prefix}{\LP@SS@init@package}{Large}%
+%
+\let\schatzsuchecell\setcell%
+%
+\newcommand*\schatzsuchesetup[1]%
+{%
+ \setkeys{schatzsuche.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@Diamond}
+% For the \env{schatzsuche} environment, we need to draw diamonds.
+% \begin{macrocode}
+\newcommand*\LP@Diamond%
+{%
+ \begin{tikzpicture}[scale=\LP@scale*.9]%
+ \clip (.05,.905) rectangle (.95,.1);%
+ \draw[line width=\LP@normallines,fill=yellow!20]%
+ (.5,.1) -- (.7,.9) -- (.3,.9) -- cycle;%
+ \draw[line width=\LP@normallines,fill=orange!20]%
+ (.5,.1) -- (.7,.9) -- (.9,.8) -- cycle;%
+ \draw[line width=\LP@normallines,fill=orange!20]%
+ (.5,.1) -- (.3,.9) -- (.1,.8) -- cycle;%
+ \draw[line width=\LP@normallines] (.1,.8) -- (.9,.8);%
+\end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Diamond}
+% A user command for drawing diamonds.
+% \begin{macrocode}
+\let\Diamond\LP@Diamond%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{schatzsuche}
+% \begin{macrocode}
+\newenvironment{schatzsuche}[1][]%
+{%
+ \setkeys{schatzsuche}{#1}%
+ \LP@set@package{schatzsuche}%
+ \LP@set@env@prefix{LP@SS}%
+ \setcounter{LP@rows}{\LP@SS@rows}%
+ \setcounter{LP@columns}{\LP@SS@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@SS@width}%
+ \ifthenelse{\equal{\LP@SS@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@SS@titleindent}\parbox{\LP@SS@titlewidth}{\strut\LP@titleformat\LP@SS@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@SS@scale]%
+ \LP@drawbackground{1}{1}{\LP@SS@columns}{\LP@SS@rows}{\LP@SS@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@SS@columns}{\LP@SS@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@SS@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% skyline environment and options
+%
+\newcommand*\LP@SL@init@prefix{LP@SL}%
+\newcommand*\LP@SL@init@package{skyline}%
+%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{rows}{5}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{columns}{5}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{scale}{1}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{bgcolor}{}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{width}{6.7cm}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{cvoffset}{-38pt}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{title}{}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{titleindent}{0.75cm}%
+\LP@define@key{\LP@SL@init@prefix}{\LP@SL@init@package}{titlewidth}{5.85cm}%
+\LP@define@choicekey@fontsize{\LP@SL@init@prefix}{\LP@SL@init@package}{Large}%
+%
+\newcommand*\LP@SL@sudoku{false}%
+%
+\define@choicekey*{skyline.sty}{sudoku}[\LP@SL@sudoku\nr]{true,false}[true]%
+{%
+ \ifcase\nr\relax%
+ \renewcommand*\LP@SL@sudoku{true}%
+ \renewcommand*\LP@SL@rows{9}%
+ \renewcommand*\LP@SL@columns{9}%
+ \or%
+ \renewcommand*\LP@SL@sudoku{false}%
+ \fi%
+}%
+%
+\define@choicekey*{skyline}{sudoku}[\LP@SL@sudoku\nr]{true,false}[true]%
+{%
+ \ifcase\nr\relax%
+ \renewcommand*\LP@SL@sudoku{true}%
+ \renewcommand*\LP@SL@rows{9}%
+ \renewcommand*\LP@SL@columns{9}%
+ \or%
+ \renewcommand*\LP@SL@sudoku{false}%
+ \fi%
+}%
+%
+\let\skylineB\LP@bottomrow%
+\let\skylineT\LP@toprow%
+\let\skylineL\LP@leftcolumn%
+\let\skylineR\LP@rightcolumn%
+\let\skylinecell\setcell%
+%
+\newcommand*\skylinesetup[1]%
+{%
+ \setkeys{skyline.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{skyline}
+% \begin{macrocode}
+\newenvironment{skyline}[1][]%
+{%
+ \setkeys{skyline}{#1}%
+ \LP@set@package{skyline}%
+ \LP@set@env@prefix{LP@SL}%
+ \setcounter{LP@rows}{\LP@SL@rows}%
+ \setcounter{LP@columns}{\LP@SL@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@SL@width}%
+ \ifthenelse{\equal{\LP@SL@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@SL@titleindent}\parbox{\LP@SL@titlewidth}{\strut\LP@titleformat\LP@SL@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@SL@scale]%
+ \LP@drawbackground{1}{1}{\LP@SL@columns}{\LP@SL@rows}{\LP@SL@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@SL@columns}{\LP@SL@rows}{1cm}%
+ \ifthenelse{\equal{\LP@SL@sudoku}{true}}%
+ {\LP@drawsudokugrid}%
+ {}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@SL@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% slitherlink environment and options
+%
+\newcommand*\LP@SK@init@prefix{LP@SK}%
+\newcommand*\LP@SK@init@package{slitherlink}%
+%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{rows}{5}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{columns}{5}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{scale}{1}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{bgcolor}{}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{width}{5.2cm}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{title}{}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@SK@init@prefix}{\LP@SK@init@package}{titlewidth}{5.2cm}%
+\LP@define@choicekey@fontsize{\LP@SK@init@prefix}{\LP@SK@init@package}{Large}%
+%
+\let\slitherlinkcell\setcell%
+%
+\newcommand*\slitherlinksetup[1]%
+{%
+ \setkeys{slitherlink.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@drawgriddots}
+% For the \env{slitherlink} environment, we need little dots in every cell corner.
+% Therefore, we loop through all rows and columns and paint the dots on the \layer{LPforeground} layer.
+% \changes{v2.5}{2013/07/22}{removed unnecessary \texttt{scale} update}
+% \begin{macrocode}
+\newcommand*\LP@drawgriddots%
+{%
+ \pgfmathsetmacro{\START}{1}%
+% \end{macrocode}
+% The dots are drawn immediatly after the grid, so we can recycle |LP@counti| and |LP@countii|.
+% \begin{macrocode}
+ \pgfmathsetmacro{\ENDC}{\arabic{LP@counti}}%
+ \pgfmathsetmacro{\ENDR}{\arabic{LP@countii}}%
+ \begin{pgfonlayer}{LPforeground}%
+ \foreach \i in {\START,...,\ENDC}%
+ \foreach \j in {\START,...,\ENDR}%
+ \fill[color=LP@c@griddots] (\i,\j) circle [radius=3pt];%
+ \end{pgfonlayer}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{slitherlink}
+% \begin{macrocode}
+\newenvironment{slitherlink}[1][]%
+{%
+ \setkeys{slitherlink}{#1}%
+ \LP@set@package{slitherlink}%
+ \LP@set@env@prefix{LP@SK}%
+ \ifthenelse{\equal{\LP@grid@linestyle}{}}%
+ {\setgridlinestyle{dashed}}{}%
+ \setcounter{LP@rows}{\LP@SK@rows}%
+ \setcounter{LP@columns}{\LP@SK@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@SK@width}%
+ \ifthenelse{\equal{\LP@SK@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@SK@titleindent}\parbox{\LP@SK@titlewidth}{\strut\LP@titleformat\LP@SK@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@SK@scale]%
+ \LP@drawbackground{1}{1}{\LP@SK@columns}{\LP@SK@rows}{\LP@SK@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@SK@columns}{\LP@SK@rows}{1cm}%
+ \LP@drawgriddots%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@SK@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% starbattle environment and options
+%
+\newcommand*\LP@SB@init@prefix{LP@SB}%
+\newcommand*\LP@SB@init@package{starbattle}%
+%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{rows}{5}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{columns}{5}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{scale}{1}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{bgcolor}{}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{title}{}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@SB@init@prefix}{\LP@SB@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@SB@init@prefix}{\LP@SB@init@package}{Large}%
+%
+\let\starbattlecell\setcell%
+%
+\newcommand*\starbattlesetup[1]%
+{%
+ \setkeys{starbattle.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{environment}{starbattle}
+% \begin{macrocode}
+\newenvironment{starbattle}[1][]%
+{%
+ \setkeys{starbattle}{#1}%
+ \LP@set@package{starbattle}%
+ \LP@set@env@prefix{LP@SB}%
+ \setcounter{LP@rows}{\LP@SB@rows}%
+ \setcounter{LP@columns}{\LP@SB@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@SB@width}%
+ \ifthenelse{\equal{\LP@SB@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@SB@titleindent}\parbox{\LP@SB@titlewidth}{\strut\LP@titleformat\LP@SB@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@SB@scale]%
+ \LP@drawbackground{1}{1}{\LP@SB@columns}{\LP@SB@rows}{\LP@SB@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@SB@columns}{\LP@SB@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@SB@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% starsandarrows environment and options
+%
+\newcommand*\LP@SAA@init@prefix{LP@SAA}%
+\newcommand*\LP@SAA@init@package{starsandarrows}%
+%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{rows}{5}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{columns}{5}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{scale}{1}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{bgcolor}{}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{width}{5.9cm}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{title}{}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@SAA@init@prefix}{\LP@SAA@init@package}{titlewidth}{5.9cm}%
+\LP@define@choicekey@fontsize{\LP@SAA@init@prefix}{\LP@SAA@init@package}{Large}%
+%
+\let\starsH\LP@toprow%
+\let\starsV\LP@leftcolumn%
+%
+\newcommand*\starsandarrowssetup[1]%
+{%
+ \setkeys{starsandarrows.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@Star}
+% For several environments, we need to draw stars.
+% \begin{macrocode}
+\newcommand*\LP@Star%
+{%
+ \tikz\node[shape=star,fill=yellow,draw,scale=.8*\LP@scale,%
+ star point height=.25cm] {};%
+}%
+% \end{macrocode}
+% A user command for drawing stars.
+% \begin{macrocode}
+\let\Star\LP@Star%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@ArrowA}
+% A generic macro for drawing arrows with different colors and angles.
+%
+% \cs{LP@ArrowA}\oarg{color}\marg{angle}
+% \begin{macrocode}
+\newcommand*\LP@ArrowA[2][red]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \pgfmathsetmacro{\LPlinewidth}{3pt*\LP@scale}%
+ \tikz\draw[->,line width=\LPlinewidth,rotate=#2,%
+ scale=\LP@scale,color=#1]%
+ (0.1,.5) -- (0.9,.5);%
+}%
+% \end{macrocode}
+% The we define some arrows with standard angles.
+% \begin{macrocode}
+\newcommand*\LP@c@stararrow{red}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Right}
+% \begin{macrocode}
+\newcommand*\Right{\LP@ArrowA[\LP@c@stararrow]{0}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RightUp}
+% \begin{macrocode}
+\newcommand*\RightUp{\LP@ArrowA[\LP@c@stararrow]{45}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Up}
+% \begin{macrocode}
+\newcommand*\Up{\LP@ArrowA[\LP@c@stararrow]{90}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LeftUp}
+% \begin{macrocode}
+\newcommand*\LeftUp{\LP@ArrowA[\LP@c@stararrow]{135}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Left}
+% \begin{macrocode}
+\newcommand*\Left{\LP@ArrowA[\LP@c@stararrow]{180}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LeftDown}
+% \begin{macrocode}
+\newcommand*\LeftDown{\LP@ArrowA[\LP@c@stararrow]{225}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Down}
+% \begin{macrocode}
+\newcommand*\Down{\LP@ArrowA[\LP@c@stararrow]{270}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\RightDown}
+% \begin{macrocode}
+\newcommand*\RightDown{\LP@ArrowA[\LP@c@stararrow]{315}}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{starsandarrows}
+% \begin{macrocode}
+\newenvironment{starsandarrows}[1][]%
+{%
+ \setkeys{starsandarrows}{#1}%
+ \LP@set@package{starsandarrows}%
+ \LP@set@env@prefix{LP@SAA}%
+ \setcounter{LP@rows}{\LP@SAA@rows}%
+ \setcounter{LP@columns}{\LP@SAA@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@SAA@width}%
+ \ifthenelse{\equal{\LP@SAA@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@SAA@titleindent}\parbox{\LP@SAA@titlewidth}{\strut\LP@titleformat\LP@SAA@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@SAA@scale]%
+ \LP@drawbackground{1}{1}{\LP@SAA@columns}{\LP@SAA@rows}{\LP@SAA@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@SAA@columns}{\LP@SAA@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@SAA@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% sunandmoon environment and options
+%
+\newcommand*\LP@SAM@init@prefix{LP@SAM}%
+\newcommand*\LP@SAM@init@package{sunandmoon}%
+%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{rows}{5}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{columns}{5}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{scale}{1}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{bgcolor}{}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{width}{5.1cm}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{title}{}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@SAM@init@prefix}{\LP@SAM@init@package}{titlewidth}{5.1cm}%
+\LP@define@choicekey@fontsize{\LP@SAM@init@prefix}{\LP@SAM@init@package}{Large}%
+%
+\let\sunandmooncell\setcell%
+%
+\newcommand*\sunandmoonsetup[1]%
+{%
+ \setkeys{sunandmoon.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@DarkCloud}
+% For the \env{sunandmoon} environment, we need to draw a dark cloud and differently%
+% lighted moons.
+% \begin{macrocode}
+\newcommand*\LP@DarkCloud{%
+ \tikz[scale=0.7*\LP@scale]\fill[color=black!60] (0,0)%
+ rectangle (1,1);%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@Moon}
+% \begin{macrocode}
+\newcommand*\LP@Moon{%
+ \tikz[scale=0.7*\LP@scale]\fill[color=black!60]%
+ (0,0) circle (0.5cm);%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonR}
+% \begin{macrocode}
+\newcommand*\LP@MoonR%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=black!60] (0.5,0.5) circle (0.5cm);%
+ \fill[color=yellow] (.5,0) arc (270:450:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonL}
+% \begin{macrocode}
+\newcommand*\LP@MoonL%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=black!60] (0.5,0.5) circle (0.5cm);%
+ \fill[color=yellow] (.5,0) arc (270:90:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonT}
+% \begin{macrocode}
+\newcommand*\LP@MoonT%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=black!60] (0.5,0.5) circle (0.5cm);%
+ \fill[color=yellow] (0,0.5) arc (180:0:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonB}
+% \begin{macrocode}
+\newcommand*\LP@MoonB%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=black!60] (0.5,0.5) circle (0.5cm);%
+ \fill[color=yellow] (0,0.5) arc (180:360:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonTL}
+% \begin{macrocode}
+\newcommand*\LP@MoonTL%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=yellow] (0.5,0.5) circle (0.5cm);%
+ \fill[color=black!60] (1,.5) -- (.5,.5) -- (.5,0)%
+ arc (270:360:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonBL}
+% \begin{macrocode}
+\newcommand*\LP@MoonBL%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=yellow] (0.5,0.5) circle (0.5cm);%
+ \fill[color=black!60] (1,.5) -- (.5,.5) -- (.5,1)%
+ arc (90:0:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonBR}
+% \begin{macrocode}
+\newcommand*\LP@MoonBR%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=yellow] (0.5,0.5) circle (0.5cm);%
+ \fill[color=black!60] (0,.5) -- (.5,.5) -- (.5,1)%
+ arc (90:180:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@MoonTR}
+% \begin{macrocode}
+\newcommand*\LP@MoonTR%
+{%
+ \begin{tikzpicture}[scale=0.7*\LP@scale]%
+ \fill[color=yellow] (0.5,0.5) circle (0.5cm);%
+ \fill[color=black!60] (0,.5) -- (.5,.5) -- (.5,0)%
+ arc (270:180:.5);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Cloud}
+% \begin{macrocode}
+\let\Cloud\LP@DarkCloud%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Moon}
+% \begin{macrocode}
+\let\Moon\LP@Moon%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonR}
+% \begin{macrocode}
+\let\MoonR\LP@MoonR%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonL}
+% \begin{macrocode}
+\let\MoonL\LP@MoonL%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonT}
+% \begin{macrocode}
+\let\MoonT\LP@MoonT%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonB}
+% \begin{macrocode}
+\let\MoonB\LP@MoonB%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonTL}
+% \begin{macrocode}
+\let\MoonTL\LP@MoonTL%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonBL}
+% \begin{macrocode}
+\let\MoonBL\LP@MoonBL%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonBR}
+% \begin{macrocode}
+\let\MoonBR\LP@MoonBR%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MoonTR}
+% \begin{macrocode}
+\let\MoonTR\LP@MoonTR%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{sunandmoon}
+% \begin{macrocode}
+\newenvironment{sunandmoon}[1][]%
+{%
+ \setkeys{sunandmoon}{#1}%
+ \LP@set@package{sunandmoon}%
+ \LP@set@env@prefix{LP@SAM}%
+ \setcounter{LP@rows}{\LP@SAM@rows}%
+ \setcounter{LP@columns}{\LP@SAM@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@SAM@width}%
+ \ifthenelse{\equal{\LP@SAM@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@SAM@titleindent}\parbox{\LP@SAM@titlewidth}{\strut\LP@titleformat\LP@SAM@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@SAM@scale]%
+ \LP@drawbackground{1}{1}{\LP@SAM@columns}{\LP@SAM@rows}{\LP@SAM@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@SAM@columns}{\LP@SAM@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@SAM@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% tentsandtrees environment and options
+%
+\newcommand*\LP@TAT@init@prefix{LP@TAT}%
+\newcommand*\LP@TAT@init@package{tentsandtrees}%
+%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{rows}{5}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{columns}{5}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{scale}{1}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{bgcolor}{}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{width}{5.9cm}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{title}{}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@TAT@init@prefix}{\LP@TAT@init@package}{titlewidth}{5.9cm}%
+\LP@define@choicekey@fontsize{\LP@TAT@init@prefix}{\LP@TAT@init@package}{Large}%
+%
+\let\tentH\LP@toprow%
+\let\tentV\LP@leftcolumn%
+%
+\newcommand*\tentsandtreessetup[1]%
+{%
+ \setkeys{tentsandtrees.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@Tree}
+% For the \env{tentsandtree} environments, we need to draw trees.
+% \begin{macrocode}
+\newcommand*\LP@Tree%
+{%
+ \begin{tikzpicture}[scale=.07*\LP@scale]%
+ \draw[fill=brown!95!black!95,line width=.1pt*\LP@scale]%
+ (.75,-1) .. controls (.5,.5) and (.5,3) .. (0.5,4) --%
+ (-0.5,4) .. controls (-.5,3) and (-.5,.5) .. (-.75,-1);%
+ \shade[top color=green!50!black!60,draw=black,%
+ line width=.1pt*\LP@scale,bottom color=green!50!black]%
+ (0,10) .. controls (0,8) and (1,7) .. (1.5,7)%
+ .. controls (1,7) and (1,7) .. (0.5,7.25)%
+ .. controls (1.5,5) and (2.5,4) .. (3,4)%
+ .. controls (2,4) and (1.25,4) .. (1,4.5)%
+ .. controls (2,2) and (3.5,2) .. (4,2)%
+ .. controls (1,1) and (-1,1) .. (-4,2)%
+ .. controls (-3.5,2) and (-2,2) .. (-1,4.5)%
+ .. controls (-1.25,4) and (-2,4) .. (-3,4)%
+ .. controls (-2.5,4) and (-1.5,5) .. (-0.5,7.25)%
+ .. controls (-1,7) and (-1,7) .. (-1.5,7)%
+ .. controls (-1,7) and (0,8) .. (0,10);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Tree}
+% A user command for drawing a tree.
+% \begin{macrocode}
+\let\Tree\LP@Tree%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\LP@Tent}
+% We also need tents.
+% \begin{macrocode}
+\newcommand*\LP@Tent%
+{%
+ \begin{tikzpicture}[scale=\LP@scale]%
+ \draw[fill=yellow!50,line width=.1pt*\LP@scale]%
+ (.1,.1) -- (.6,.1) -- (.9,.5) -- (.75,.8) -- (.35,.6)%
+ -- cycle;%
+ \draw[line width=.1pt*\LP@scale] (.35,.6) -- (.35,.1);%
+ \draw[line width=.1pt*\LP@scale] (.35,.6) -- (.6,.1);%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Tent}
+% A user command for drawing tents.
+% \begin{macrocode}
+\let\Tent\LP@Tent%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{tentsandtrees}
+% \begin{macrocode}
+\newenvironment{tentsandtrees}[1][]%
+{%
+ \setkeys{tentsandtrees}{#1}%
+ \LP@set@package{tentsandtrees}%
+ \LP@set@env@prefix{LP@TAT}%
+ \setcounter{LP@rows}{\LP@TAT@rows}%
+ \setcounter{LP@columns}{\LP@TAT@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@TAT@width}%
+ \ifthenelse{\equal{\LP@TAT@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@TAT@titleindent}\parbox{\LP@TAT@titlewidth}{\strut\LP@titleformat\LP@TAT@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@TAT@scale]%
+ \LP@drawbackground{1}{1}{\LP@TAT@columns}{\LP@TAT@rows}{\LP@TAT@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@TAT@columns}{\LP@TAT@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@TAT@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%
+% tunnel environment and options
+%
+\newcommand*\LP@TN@init@prefix{LP@TN}%
+\newcommand*\LP@TN@init@package{tunnel}%
+%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{rows}{5}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{columns}{5}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{scale}{1}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{counterstyle}{none}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{bgcolor}{}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{width}{5.9cm}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{cvoffset}{-23pt}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{title}{}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{titleindent}{0cm}%
+\LP@define@key{\LP@TN@init@prefix}{\LP@TN@init@package}{titlewidth}{5.9cm}%
+\LP@define@choicekey@fontsize{\LP@TN@init@prefix}{\LP@TN@init@package}{Large}%
+%
+\let\tunnelH\LP@toprow%
+\let\tunnelV\LP@leftcolumn%
+%
+\newcommand*\tunnelsetup[1]%
+{%
+ \setkeys{tunnel.sty}{#1}%
+}%
+% \end{macrocode}
+% \begin{macro}{\LP@Portal}
+% We define a Ti{\itshape k}Z picture that symbolizes a tunnel portal.
+% \begin{macrocode}
+\newcommand*\LP@Portal%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \begin{tikzpicture}[scale=\LP@scale]%
+ \fill[color=black]%
+ (0,0) -- (0,1) -- (.4,.5) -- (.4,0) -- cycle;%
+ \fill[color=LP@c@tunnel@ii]%
+ (0,1) -- (1,1) -- (1,.5) -- (.4,.5) -- cycle;%
+ \fill[color=LP@c@tunnel@i]%
+ (.4,0) rectangle (1,.5);%
+ \draw[line width=\LP@normallines] (0,0) rectangle (1,1) ;%
+ \end{tikzpicture}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\portal}
+% We define a user command to set a tunnel portal into a grid cell.
+%
+% \cs{portal}\marg{column}\marg{row}
+% \begin{macrocode}
+\newcommand*\portal[2]%
+{%
+% \end{macrocode}
+% To avoid interference with the grid lines, we use the \layer{LPbackground} layer.
+% \begin{macrocode}
+ \begin{puzzlebackground}%
+ \LP@G@setcellcontent[hcenter,vcenter]{#1}{#2}{\LP@Portal}%
+ \end{puzzlebackground}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\tube}
+% For the \env{tunnel} environments, we need to draw tubes.
+%
+% \cs{tube}\marg{TikZ path}
+% \begin{macrocode}
+\newcommand*\tube[1]%
+{%
+ \LP@set@LP@scale{\LP@env@prefix}%
+ \bgroup%
+% \end{macrocode}
+% Tubes start in the center of a grid cell, therefore we must redefine\newline
+% \cs{LP@rel@tikzpath} to |.5| inside a group for \cs{tikzpath} and \cs{xtikzpath}.
+% \begin{macrocode}
+ \def\LP@rel@tikzpath{.5}%
+% \end{macrocode}
+% We draw on the \layer{LPbackgroundtwo} layer to get a segmented look behind
+% the grid lines.
+% \begin{macrocode}
+ \begin{pgfonlayer}{LPbackgroundtwo}%
+ \pgfsetcornersarced{\pgfpoint{3mm}{3mm}}%
+% \end{macrocode}
+% We draw the tube several times with slightly different colors to get a 3D effect.
+% \begin{macrocode}
+ \draw[color=LP@c@tunnel!80!black, line width=.4cm*\LP@scale]%
+ #1;%
+ \draw[color=LP@c@tunnel, line width=.38cm*\LP@scale] #1;%
+ \draw[color=LP@c@tunnel!85, line width=.35cm*\LP@scale] #1;%
+ \draw[color=LP@c@tunnel!70, line width=.32cm*\LP@scale] #1;%
+ \draw[color=LP@c@tunnel!55, line width=.29cm*\LP@scale] #1;%
+ \draw[color=LP@c@tunnel!45, line width=.25cm*\LP@scale] #1;%
+ \draw[color=LP@c@tunnel!35, line width=.2cm*\LP@scale] #1;%
+ \end{pgfonlayer}%
+ \egroup%
+}%
+% \end{macrocode}
+% \end{macro}
+% \begin{environment}{tunnel}
+% \begin{macrocode}
+\newenvironment{tunnel}[1][]%
+{%
+ \setkeys{tunnel}{#1}%
+ \LP@set@package{tunnel}%
+ \LP@set@env@prefix{LP@TN}%
+ \setcounter{LP@rows}{\LP@TN@rows}%
+ \setcounter{LP@columns}{\LP@TN@columns}%
+ \stepcounter{LP@rows}%
+ \stepcounter{LP@columns}%
+ \begin{minipage}[t]{\LP@TN@width}%
+ \ifthenelse{\equal{\LP@TN@title}{}}%
+ {\par\enspace\par}% empty
+ {\enspace\par\noindent\hspace{\LP@TN@titleindent}\parbox{\LP@TN@titlewidth}{\strut\LP@titleformat\LP@TN@title}\vspace{3mm}\par}%
+ \begin{tikzpicture}[LPpreset,scale=\LP@TN@scale]%
+ \LP@drawbackground{1}{1}{\LP@TN@columns}{\LP@TN@rows}{\LP@TN@bgcolor}%
+ \LP@drawgrid{1}{1}{\LP@TN@columns}{\LP@TN@rows}{1cm}%
+}%
+{%
+ \end{tikzpicture}%
+ \LP@drawcounter{\LP@TN@counterstyle}%
+ \stepcounter{LP@puzzlecounter}%
+ \end{minipage}%
+}%
+% \end{macrocode}
+% \end{environment}
+% \begin{macrocode}
+%</lpenv>
+% \end{macrocode}
+%\Finale \ No newline at end of file
diff --git a/graphics/pgf/contrib/logicpuzzle/logicpuzzle.pdf b/graphics/pgf/contrib/logicpuzzle/logicpuzzle.pdf
new file mode 100644
index 0000000000..f9843ac2f1
--- /dev/null
+++ b/graphics/pgf/contrib/logicpuzzle/logicpuzzle.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/logicpuzzle/qrcode.png b/graphics/pgf/contrib/logicpuzzle/qrcode.png
new file mode 100644
index 0000000000..60738d47ca
--- /dev/null
+++ b/graphics/pgf/contrib/logicpuzzle/qrcode.png
Binary files differ
diff --git a/graphics/pgf/contrib/makeshape/README b/graphics/pgf/contrib/makeshape/README
new file mode 100644
index 0000000000..1b02f73771
--- /dev/null
+++ b/graphics/pgf/contrib/makeshape/README
@@ -0,0 +1,64 @@
+
+makeshape 2.1 (25 January 2013)
+
+The makeshape package simplifies writing PGF shapes.
+
+Declaring custom shapes with correct anchor borders can be difficult.
+Complex shapes often need complicated calculations to find the touching
+point of a connecting line. This package only requires that a developer
+write a PGF path describing the anchor border. It also provides macros
+that help with the management of shape parameters, and the definition
+of anchor points.
+
+-------------------------------------------------------------------------
+The package's documentation files are
+
+makeshape.pdf - The package's user guide
+sampleshape.tex - A sample shape.
+testsample.tex - Source for a document that tests the sample shape.
+testsample.pdf - The outcome of the tests.
+ontesting.pdf - A report on the various tests used in testsample.tex
+
+The package's installation files are
+
+makeshape.sty - The package's style file
+
+makeshape.ins - The package's installation file.
+makeshape.dtx - Source for the package's user documentation and code.
+ontesting.dtx - Source for a report on testing and code for the test
+ document.
+
+These files can be generated with the following commands
+
+pdflatex makeshape.ins
+pdflatex makeshape.dtx
+pdflatex ontesting.dtx
+pdflatex testsample.tex
+
+Comment out the 'OnlyDescription' line in makeshape.dtx to include the
+package's implementation documentation.
+
+-------------------------------------------------------------------------
+Copyright (C) 2013 by Adrian P Robson
+ adrian.robson@nepsweb.co.uk
+
+This work may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in
+ http://www.latex-project.org/lppl.txt
+
+This work has the LPPL maintenance status `maintained'. The Current
+Maintainer of this work is Adrian P Robson.
+
+This work consists of the files makeshape.ins
+ makeshape.dtx and
+ ontesting.dtx
+and the derived files makeshape.sty
+ makeshape.pdf
+ sampleshape.tex
+ ontesting.pdf
+ testsample.tex and
+ testsample.pdf
+
+-------------------------------------------------------------------------
diff --git a/graphics/pgf/contrib/makeshape/makeshape.dtx b/graphics/pgf/contrib/makeshape/makeshape.dtx
new file mode 100644
index 0000000000..795d3d569c
--- /dev/null
+++ b/graphics/pgf/contrib/makeshape/makeshape.dtx
@@ -0,0 +1,1757 @@
+% \iffalse meta-comment
+%
+% makeshape.dtx
+% 25 January 2013
+%
+% This is version 1.0 of makeshape.dtx
+% It generates a style file (makeshape.sty), a sample shape (sampleshape.tex),
+% and a user guide and documentation (makeshape.pdf).
+%
+% Generation of the makeshape.sty and sampleshape.tex is with
+% pdflatex makeshape.ins
+% which contains
+% \generate{\file{makeshape.sty}
+% {\from{makeshape.dtx}{package}}}
+% \generate{\file{sampleshape.tex}
+% {\from{makeshape.dtx}{sample}}}
+%
+% Generation of makeshape.pdf is with
+% pdflatex makeshape.dtx
+%
+% The \OnlyDescription command is used to suppress implementation
+% documentation.
+%
+% This is part of Silhouette 2.1
+%
+% -----------------------------------------------------------
+% \fi
+%
+%^^A-------------------------------------------------------------------
+%^^A .sty file header
+%^^A-------------------------------------------------------------------
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[2011/06/27]
+%^^A - ** Use package version number (not file version) **
+%<package>\ProvidesPackage{makeshape}
+%<package> [2013/01/25 2.1 Making custom shapes for PGF/TikZ]
+%<package>\RequirePackage{tikz}
+%<package>\usepgflibrary{intersections}
+%
+%^^A-------------------------------------------------------------------
+%^^A Preamble for documentation
+%^^A-------------------------------------------------------------------
+%<*driver>
+\documentclass[10pt,a4paper]{ltxdoc}
+
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+
+\usepackage{fancyvrb}
+\usepackage{enumitem}
+\usepackage{url}
+\usepackage{bigstrut}
+\usepackage[draft]{hyperref}
+%\usepackage{hyperref}
+
+\usepackage{tikz}
+\usetikzlibrary{patterns}
+\usetikzlibrary{arrows}
+\usetikzlibrary{positioning}
+\usepgflibrary{intersections}
+
+\input{sampleshape} % includes makeshape.sty
+
+\newcommand{\mnote}[1]
+{\marginpar{\scriptsize \raggedright #1 }}
+
+\newcommand{\pfgManCiteA}{\cite{pgfMan}, \emph{Constructing Paths}, \S71, pp 579-589}
+\newcommand{\pfgManCiteB}{\cite{pgfMan}, \emph{Declaring New Shapes}, \S75.5, pp 625-631}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\OnlyDescription % comment out for code implementation
+
+\begin{document}
+\DocInput{makeshape.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%^^A-------------------------------------------------------------------
+%^^A Change log...
+%^^A-------------------------------------------------------------------
+%^^A
+%^^A 0.0 - 5 January 2013
+% \changes{0.0}{2013/01/05}{
+% Experimental -
+% Develop the style file and a sample shape.
+% Write the user guide.
+% Incorporate makeshape.sty generation and documentation.
+% Generate the samplshape.tex file.
+% }
+%^^A
+%^^A 0.1 - 11 January 2013
+% \changes{0.1}{2013/01/11}{
+% Experimental -
+% Fix the sample shape's cardinal anchor points problem by
+% correcting a bug in the north-east saved anchor.
+% Correct errors in the user guide and fill in omissions.
+% \emph{Experimental phase complete.}}
+%^^A
+%^^A 25 January 2013
+% \changes{1.0}{2013/01/25}{
+% Prepare for publication -
+% Very minor changes made to the style file code.
+% Standard path commands used in sample shape code.
+% A lot of the report is rewritten.
+% An abstract is added, and its contents removed. }
+%^^A
+%^^A-------------------------------------------------------------------
+%^^A Check sums...
+%^^A-------------------------------------------------------------------
+%
+%^^A \CheckSum{0} ^^A no checksum for development
+% \CheckSum{272}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%^^A===========================================================================
+%^^A Generate figure files for input into this report
+%^^A===========================================================================
+%
+%^^A---------------------------------------------------------------------------
+%^^A Background path diagram file
+%^^A---------------------------------------------------------------------------
+% \begin{VerbatimOut}[gobble=5]{msbackground.tmp}
+% %^^A - The background path diagram, part of makeshape,dtx
+% %^^A - This is a temporary file and should be deleted
+% %^^A
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+%
+% %^^A-- diagram 1 --------------------------------------------
+% \begin{scope}
+%
+% \def\ctbw{88pt}
+% \def\ctbh{14pt}
+%
+% \def\ctbnex{\ctbw/2}
+% \def\ctbney{\ctbh/2}
+%
+% \node (outer) at (0,0) [draw, rectangle, pattern=crosshatch dots,
+% minimum width=\ctbw+20pt,
+% minimum height=\ctbh+20pt,
+% ] {} ;
+%
+% \node at (\ctbnex,\ctbney) [circle, fill=white] {};
+%
+% \node (ctb) at (0,0) [draw, rectangle, fill=white,
+% minimum width=\ctbw,
+% minimum height=\ctbh,
+% ] {};
+%
+% \node (ctbne) at (\ctbnex,\ctbney) [draw, circle] {};
+%
+% %^^A - Labels
+% \node (ctbneLabel) at (4cm,1cm)
+% [inner sep = 0] {(\verb|\ctbnex|,\verb|\ctbney|)};
+% \node (ctbLabel) at (2cm,-1.2cm)
+% [inner sep = 0] {corrected text box};
+% \node (innerLabel) at (-1.8cm,1.2cm)
+% [] {inner surface};
+% \node (outerLabel) at (-2cm,-1.2cm)
+% [inner sep = 0] {outer surface};
+%
+% \draw [->] (ctbneLabel.south west) -- (ctbne);
+% \draw [->] (ctbLabel.north west) -- (ctb.320);
+% \draw [->] (innerLabel.320) -- (ctb.160);
+% \draw [->] (outerLabel.north east) -- (outer);
+%
+% %^^A - xy axis
+% \draw [dotted] (0,0) -- ++(2.5cm,0); % origin
+% \draw [dotted] (0,0) -- ++(-2.5cm,0); % origin
+% \draw [dotted] (0,0) -- ++(0,1cm); % origin
+% \draw [dotted] (0,0) -- ++(0,-1cm); % origin
+%
+% \end{scope}
+%
+% %^^A-- diagram 2 --------------------------------------------
+% \begin{scope}[yshift=-4cm]
+%
+% \def\ctbw{88pt}
+% \def\ctbh{14pt}
+%
+% \def\ctbnex{\ctbw/2}
+% \def\ctbney{\ctbh/2}
+%
+% \node (outer) at (0,0) [draw, rectangle, pattern=crosshatch dots,
+% minimum width=\ctbw+40pt,
+% minimum height=\ctbh+40pt,
+% ] {} ;
+%
+% \node at (\ctbnex,\ctbney) [circle, fill=white] {};
+%
+% \node (inner) at (0,0) [draw, rectangle, fill=white,
+% minimum width=\ctbw+20pt,
+% minimum height=\ctbh+20pt,
+% ] {};
+%
+% \node (ctb) at (0,0) [draw, rectangle, fill=white,
+% minimum width=\ctbw,
+% minimum height=\ctbh,
+% ] {};
+%
+% \node at (\ctbnex,\ctbney) [draw, circle] (ctbne) {};
+%
+% %^^A - Labels
+% \node (ctbneLabel) at (4cm,1cm)
+% [inner sep = 0] {(\verb|\ctbnex|,\verb|\ctbney|)};
+% \node (ctbLabel) at (2cm,-1.5cm)
+% [inner sep = 0] {corrected text box};
+% \node (innerLabel) at (-2cm,-2cm)
+% [inner sep = 0] {inner surface};
+% \node (outerLabel) at (-2.5cm,-1.5cm)
+% [inner sep = 0] {outer surface};
+%
+% \draw [->] (ctbneLabel.south west) -- (ctbne);
+% \draw [->] (ctbLabel.north west) -- (ctb.320);
+% \draw [->] (innerLabel.north east) -- (inner.250);
+% \draw [->] (outerLabel.north east) -- (outer);
+%
+% %^^A - minimum dimensions
+% \node (a) [coordinate, left=15pt of outer.south west] {};
+% \node (b) [coordinate, left=15pt of outer.north west] {};
+% \draw [|<->|] (a) -- (b) node [midway,left] {\tt minimum height};
+%
+% \node (c) [coordinate, above=15pt of outer.north west] {};
+% \node (d) [coordinate, above=15pt of outer.north east] {};
+% \draw [|<->|] (c) -- (d) node [midway,above] {\tt minimum width};
+%
+% %^^A - xy axis
+% \draw [dotted] (0,0) -- ++(2.8cm,0); % origin
+% \draw [dotted] (0,0) -- ++(-2.5cm,0); % origin
+% \draw [dotted] (0,0) -- ++(0,1.2cm); % origin
+% \draw [dotted] (0,0) -- ++(0,-1.2cm); % origin
+%
+% \end{scope}
+%
+% \end{tikzpicture}
+% \end{VerbatimOut}
+%
+%^^A---------------------------------------------------------------------------
+%^^A Anchor path diagram file
+%^^A---------------------------------------------------------------------------
+% \begin{VerbatimOut}[gobble=5]{msanchor.tmp}
+% %^^A - The anchor path diagram, part of makeshape,dtx
+% %^^A - This is a temporary file and should be deleted
+% %^^A
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+%
+% \def\ctbw{88pt}
+% \def\ctbh{14pt}
+%
+% \def\ctbnex{\ctbw/2}
+% \def\ctbney{\ctbh/2}
+%
+% %^^A-- diagram 1 --------------------------------------------
+% \begin{scope}
+%
+% \node (outer) at (0,0) [draw, rectangle, pattern=crosshatch dots,
+% minimum width=\ctbw+20pt,
+% minimum height=\ctbh+20pt,
+% ] {};
+%
+% \node at (\ctbnex,\ctbney) [circle, fill=white] {};
+%
+% \node (ctb) at (0,0) [draw, rectangle, fill=white,
+% minimum width=\ctbw,
+% minimum height=\ctbh,
+% ] {};
+%
+% \node (ctbne) at (\ctbnex,\ctbney) [draw, circle] {};
+%
+% %^^A - Labels
+% \node (ctbneLabel) at (4cm,1cm)
+% [inner sep = 0] {(\verb|\ctbnex|,\verb|\ctbney|)};
+% \node (ctbLabel) at (2cm,-1.2cm)
+% [inner sep = 0] {corrected text box};
+% \node (spaceLabel) at (-1.8cm,1.2cm)
+% [] {background path space};
+% \node (outerLabel) at (-2.3cm,-1.2cm)
+% [inner sep = 0] {outer shape surface};
+% \node (anchorLabel) at (-1.5cm,-1.7cm)
+% [inner sep = 0] {anchor surface};
+%
+% \draw [->] (ctbneLabel.south west) -- (ctbne);
+% \draw [->] (ctbLabel.north west) -- (ctb.320);
+% \draw [->, shorten >=5pt] (spaceLabel.320) -- (ctb.160);
+% \draw [->] (outerLabel.north east) -- (outer);
+% \draw [->] (anchorLabel.north east) -- (outer);
+%
+% %^^A - xy axis
+% \draw [dotted] (0,0) -- ++(2.5cm,0); % origin
+% \draw [dotted] (0,0) -- ++(-2.5cm,0); % origin
+% \draw [dotted] (0,0) -- ++(0,1cm); % origin
+% \draw [dotted] (0,0) -- ++(0,-1cm); % origin
+%
+% \end{scope}
+%
+% %^^A-- diagram 2 --------------------------------------------
+% \begin{scope}[yshift=-5cm]
+%
+% \node (anchor) at (0,0) [draw, rectangle,
+% minimum width=\ctbw+70pt,
+% minimum height=\ctbh+70pt,
+% ] {} ;
+%
+% \node (outer) at (0,0) [draw, rectangle, pattern=crosshatch dots,
+% minimum width=\ctbw+40pt,
+% minimum height=\ctbh+40pt,
+% ] {} ;
+%
+% \node at (\ctbnex,\ctbney) [circle, fill=white] {};
+%
+% \node (inner) at (0,0) [draw, rectangle, fill=white,
+% minimum width=\ctbw+20pt,
+% minimum height=\ctbh+20pt,
+% ] {};
+%
+% \node (ctb) at (0,0) [draw, rectangle, fill=white,
+% minimum width=\ctbw,
+% minimum height=\ctbh,
+% ] {};
+%
+% \node at (\ctbnex,\ctbney) [draw, circle] (ctbne) {};
+%
+% %^^A - Labels
+% \node (ctbneLabel) at (4.3cm,1cm)
+% [inner sep = 0] {(\verb|\ctbnex|,\verb|\ctbney|)};
+% \node (ctbLabel) at (2cm,-1.8cm)
+% [inner sep = 0] {corrected text box};
+% \node (spaceLabel) at (-3.3cm,-1.8cm)
+% [inner sep = 0] {background path space};
+% \node (outerLabel) at (-2.8cm,-2.3cm)
+% [inner sep = 0] {outer path surface};
+% \node (anchorLabel) at (-2.7cm,-2.8cm)
+% [inner sep = 0] {anchor path surface};
+%
+% \draw [->] (ctbneLabel.south west) -- (ctbne);
+% \draw [->] (ctbLabel.north west) -- (ctb.320);
+% \draw [->, shorten >=4pt] (spaceLabel.north east) -- (inner.210);
+% \draw [->] (outerLabel.north east) -- (outer.227);
+% \draw [->] (anchorLabel.north east) -- (anchor);
+%
+% %^^A - minimum dimensions
+% \node (a) [coordinate, left=30pt of outer.south west] {};
+% \node (b) [coordinate, left=30pt of outer.north west] {};
+% \draw [|<->|] (a) -- (b) node [midway,left] {\tt minimum height};
+%
+% \node (c) [coordinate, above=30pt of outer.north west] {};
+% \node (d) [coordinate, above=30pt of outer.north east] {};
+% \draw [|<->|] (c) -- (d) node [midway,above] {\tt minimum width};
+%
+% \node (e) [coordinate, left=15pt of anchor.north west] {};
+% \draw [<->|] (b) -- (e) node [midway,left] {\tt outer ysep};
+%
+% \node (f) [coordinate, above=15pt of anchor.north east] {};
+% \draw [<->|] (d) -- (f) node [right,above] {\hspace{30pt}\tt outer xsep};
+%
+% \draw [dotted] (a) -- ++(30pt,0);
+% \draw [dotted] (b) -- ++(30pt,0);
+% \draw [dotted] (c) -- ++(0,-30pt);
+% \draw [dotted] (d) -- ++(0,-30pt);
+%
+% %^^A - xy axis
+% \draw [dotted] (0,0) -- ++(3cm,0); % origin
+% \draw [dotted] (0,0) -- ++(-3cm,0); % origin
+% \draw [dotted] (0,0) -- ++(0,1.2cm); % origin
+% \draw [dotted] (0,0) -- ++(0,-1.2cm); % origin
+%
+% \end{scope}
+%
+% \end{tikzpicture}
+% \end{VerbatimOut}
+%
+%^^A===========================================================================
+%^^A Start report body
+%^^A===========================================================================
+%
+% \GetFileInfo{makeshape.sty}
+%
+% \title{The {\sf makeshape} package\thanks{
+% This document corresponds to \textsf{makeshape}~\fileversion,
+% dated~\filedate.}\\
+% and\\
+% A Method for Creating Custom Shapes in PGF}
+%
+% \author{Adrian P. Robson\thanks{\texttt{adrian.robson@nepsweb.co.uk}}}
+% \date{25 January 2013}
+%
+% \maketitle
+%
+%^^A - Abstract
+% \vspace{-3ex}
+% \begin{quote}
+% The {\sf makeshape} package simplifies writing PGF shapes.
+% Declaring a custom shape with a correct anchor border can be difficult.
+% Complex shapes often need complicated calculations to find the touching point
+% of a connecting line.
+% This package only requires that a developer write a PGF path describing the
+% anchor border.
+% It also provides macros that help with the management of shape parameters
+% and the definition of anchor points.
+% \end{quote}
+%
+%
+%^^A \tableofcontents
+%
+%\section{Introduction}
+%
+% The |\pgfdeclareshape| command can be used to create new shapes with the PGF package
+% (\pfgManCiteB).
+% The following are typically needed:
+% \begin{itemize} [itemsep=-0.5ex]
+% \item A shape name.
+% \item Code for computing saved anchors and saved dimensions.
+% \item Code for computing anchor positions in terms of the saved anchors.
+% \item Code for computing border anchors (|\anchorborder|).
+% \item Code for drawing a background path.
+% \end{itemize}
+% Writing these can be hard for completely new shapes, and in particular the declaration of a
+% suitable |\anchorborder| command can be very difficult for complex shapes.
+%
+% \emph{This paper presents a method that makes the process of writing new shapes from scratch
+% a little easier.}
+% Its key features are:
+% a mechanism for specifying the |\anchorborder| behaviour as a path;
+% a package that provides a set of useful macros for writing and allocating anchor
+% and background paths;
+% and an example |\pgfdeclareshape| command that can be used as a template for new shapes.
+%
+% The method involves writing some original code and modifying the template.
+% In brief, the process involves:
+% \begin{enumerate} [itemsep=-0.5ex]
+% \item Writing \emph{background path} and \emph{anchor path} macros.
+% \item Writing one or more \emph{saved anchors}.
+% \item Writing \emph{anchors} using the above saved anchors.
+% \end{enumerate}
+%
+%
+% \section{Preliminaries}
+%
+% \subsection{Background Path Macro}\label{sec:backgroundpath}
+%
+% \begin{figure}
+% \begin{center}
+% \input{msbackground.tmp}
+% \end{center}
+% \caption{The Background Path}\label{fig:backgroundpath}
+% \end{figure}
+%
+% The \emph{background path}, as illustrated in figure~\ref{fig:backgroundpath},
+% describes the curves that form the actual shape.
+% It can be just a single line and does not have to be closed.
+% However, there are no limits on is complexity.
+% If it is more than a simple outline, then its \emph{inner} and \emph{outer} surfaces
+% need to be considered separately.
+%
+% The inner surface should contain the \emph{corrected text box},
+% which is the shape's text box surrounded by the space specified by its
+% {\tt inner xsep} and {\tt inner ysep} keys.
+% The coordinates of this box are given by the package's |\ctbnex| and |\ctbnex| macros,
+% which are described in \S\ref{sec:corrctdTextBox}.
+%
+% The outer surface should have height and width dimensions that are the same as
+% the shape's {\tt minimum} {\tt width} and {\tt minimum} {\tt height}
+% keys if these are larger than the basic dimensions.
+% These keys can be obtained with the |\pgfshapeminwidth| and |\pgfshapeminheight| macros,
+% as described in \S\ref{sec:keycommands}.
+% The |\mincorrect| macro described in \S\ref{sec:mincorrmacro} can be used make the necessary
+% comparison and assignment.
+%
+% \subsubsection{Background Path Algorithm}\label{sec:backgroundpathmacro}
+%
+% The background path should be implemented as a macro with the following structure:
+% \begin{enumerate}
+%
+% \item \label{item:ctb} Use |\ctbnex| and |\ctbnex|,
+% which give the north east corner of the corrected text box,
+% to calculate significant reference coordinates.
+%
+% \item \label{item:mindim} Use |\mincorrect| to modify the reference coordinates to
+% take account of the shape's minimum dimension keys,
+% which are given by |\pgfshapeminwidth| and |\pgfshapeminheight|.
+%
+%
+% \item Use the reference coordinates from step \ref{item:mindim} to draw the actual path
+% using PGF path commands (\pfgManCiteA). Typical commands are
+% |\pgfpathmoveto|,
+% |\pgfpathlineto| and
+% |\pgfpathclose|.
+% The |\pgfpoint| command will also be needed.
+% Do this for
+% \begin{enumerate}
+% \item the outer surface curve, and \label{item:outer}
+% \item curves in the shape's inner path space
+% \end{enumerate}
+% Usually when a path is defined, it is displayed with |\pgfusepath{stroke}|.
+% However, it is not needed here.
+%
+% \end{enumerate}
+%
+% \subsection{Anchor Path Macro}\label{sec:anchorpath}
+%
+% The \emph{anchor path}, as illustrated in figure~\ref{fig:anchorpath},
+% describes the curve that forms the surface where connecting lines meet the shape.
+% It it must be a single closed path, and it is normally strongly related to
+% background path's outer surface (see \S\ref{sec:backgroundpath}).
+%
+% Like the background path, it should use the fundamental reference point of the
+% \emph{corrected text box}, which automatically includes the shape's inner
+% separation.
+% It should also take regard of the shape's {\tt minimum} {\tt width}
+% and {\tt minimum} {\tt height} keys if these are larger than the basic dimensions.
+% Furthermore, it should compensate for the {\tt outer} {\tt xsep} and {\tt outer} {\tt ysep}
+% keys as shown in figure~\ref{fig:anchorpath}.
+%
+% The corrected text box macros are decribed in \S\ref{sec:corrctdTextBox}.
+% The minimum dimension keys are given by |\pgfshapeminwidth| and |\pgfshapeminheight|,
+% and the outer separation keys are given by |\pgfshapeouterxsep| and
+% |\pgfshapeouterysep|, as described in \S\ref{sec:keycommands}.
+% The minimum dimension comparision and assignment is provided by |\mincorect| macro,
+% which is discussed in \S\ref{sec:mincorrmacro}.
+%
+% \subsubsection{Anchor Path Algorithm}\label{sec:anchorpathmacro}
+%
+%
+% The anchor path should be implemented as a macro with the following structure:
+% \begin{enumerate}
+%
+% \item Use |\ctbnex| and |\ctbnex|,
+% which give the north east corner of the corrected text box,
+% to calculate significant reference coordinates. (Normally the same as
+% \S\ref{sec:backgroundpathmacro} step \ref{item:ctb}).
+% \label{item:apctb}
+%
+% \item Use |\mincorrect| to modify the reference coordinates to
+% take account of the shape's minimum dimension keys,
+% which given by |\pgfshapeminwidth| and |\pgfshapeminheight|.
+% (Normally the same as \S\ref{sec:backgroundpathmacro} step \ref{item:mindim}).
+% \label{item:apmindim}
+%
+% \item Modify the reference coordinates to take account of outer separation,
+% which is given by |\pgfshapeouterxsep| and |\pgfshapeouterysep|.
+% \label{item:apouter}
+%
+% \item Use the corrected reference coordinates from step \ref{item:apouter} to specify
+% the anchor path using PGF path commands (\pfgManCiteA).
+% The path should be closed so a |\pgfpathclose| command is required.
+% The path will not actually be drawn, and the |\pgfusepath{stroke}| macro
+% should not be used.
+% (Normally the same as \S\ref{sec:backgroundpathmacro} step \ref{item:outer}).
+% \label{item:appath}
+%
+% \end{enumerate}
+%
+% \subsection{Anchors}
+%
+% A PGF shape requires the definition of a set of anchor point commands,
+% and these need \emph{saved anchors} to provide necessary coordinates.
+% All anchor macros should return a point coordinate by assigning values to the
+% registers |\pgf@x| and |\pgf@y|.
+%
+% Like the anchor path macro, saved anchors should use the fundamental reference point of the
+% \emph{corrected text box}, which automatically includes the shape's inner
+% separation.
+% They should also take regard of the shape's {\tt minimum} {\tt width}
+% and {\tt minimum} {\tt height} keys if these are larger than the basic dimensions.
+% Furthermore, they should compensate for the {\tt outer} {\tt xsep} and {\tt outer} {\tt ysep}
+% keys as shown in figure~\ref{fig:anchorpath}.
+%
+% The corrected text box macros are decribed in \S\ref{sec:corrctdTextBox}.
+% The minimum dimension keys are given by |\pgfshapeminwidth| and |\pgfshapeminheight|,
+% and the outer separation keys are given by |\pgfshapeouterxsep| and
+% |\pgfshapeouterysep|, as described in \S\ref{sec:keycommands}.
+% The minimum dimension comparision and assignment is provided by |\mincorect| macro,
+% which is discussed in \S\ref{sec:mincorrmacro}.
+%
+% \begin{figure}
+% \begin{center}
+% \input{msanchor.tmp}
+% \end{center}
+% \caption{The Anchor Path}\label{fig:anchorpath}
+% \end{figure}
+%
+% \subsubsection{Saved Anchor Algorithm}
+%
+% A saved anchor must set the PGF registers |\pgf@x| and |\pgf@y|
+% with the required coordinates.
+% It has a structure similar to the anchor path.
+%
+% \begin{enumerate}
+%
+% \item Use |\ctbnex| and |\ctbnex|,
+% which give the north east corner of the corrected text box,
+% to calculate significant reference coordinates.
+% (Normally similar to \S\ref{sec:anchorpathmacro} step \ref{item:apctb}).
+%
+% \item Use |\mincorrect| to modify the reference coordinates to
+% take account of the shape's minimum dimension keys,
+% which given by |\pgfshapeminwidth| and |\pgfshapeminheight|.
+% (Normally the same as \S\ref{sec:anchorpathmacro} step \ref{item:apmindim}).
+%
+% \item Modify the reference coordinates to take account of outer separation,
+% which is given by |\pgfshapeouterxsep| and |\pgfshapeouterxsep|.
+% (Normally the same as \S\ref{sec:anchorpathmacro} step \ref{item:apouter}).
+% \label{item:sanchosep}
+%
+% \item Use the reference coordinates from step \ref{item:sanchosep} to calculate the
+% location of the anchor point, and assign values to the |\pgf@x| and |\pgf@y|
+% registers.
+%
+% \end{enumerate}
+%
+% \section{Making a Shape}
+%
+% \subsection{Helper Macros}\label{sec:macros}
+%
+% The following macros are available for use in the anchor path,
+% background path and saved anchors.
+%
+% \subsubsection{Corrected text box}\label{sec:corrctdTextBox}
+%
+% The \emph{corrected text box} is a bounding box for the
+% shape's text that includes the shape's {\tt inner} {\tt xsep} and {\tt inner} {\tt ysep} keys.
+% The box is symmetric about the origin.
+% Its x and y coordinates are given by the following commands:
+%
+% \begin{description} [itemsep=-0.5ex, labelindent=-0.5em]
+%
+% \item[] |\ctbnex|:
+% The x-coordinate of the north east corner of the shape's corrected text box.
+%
+% \item[] |\ctbney|:
+% The y-coordinate of the north east corner of the shape's
+% corrected text box.
+%
+% \end{description}
+%
+% \subsubsection{Correcting for minimum dimensions}\label{sec:mincorrmacro}
+%
+% A shape's size should be corrected for its
+% {\tt minimum} {\tt width} and {\tt minimum} {\tt height} keys.
+% The |\mincorrect| macro is provided to help with this.
+%
+% \begin{description} [itemsep=-0.5ex, labelindent=-0.5em]
+%
+% \item[] |\mincorrect{|{\it dimreg\/}|}{|{\it minkey\/}|}|:
+% Correct an x or y outer bound dimension for {\tt minimum} {\tt width} or
+% {\tt minimum} {\tt height} keys.
+%
+% \vspace{-1.5ex}
+% \begin{description}
+%
+% \item[{\it dimreg} \rm --] A dimension register.
+% On entry, it should hold the normal dimension of the shape.
+% On exit, $dimreg$ is assigned the larger of its original value or $minkey/2$.
+%
+% \item[{\it minkey} \rm--] A minimum dimension key value.
+% In practice, one of the minimum height or width commands given in
+% \S\ref{sec:keycommands} below.
+%
+% \end{description}
+%
+% \end{description}
+%
+% \subsubsection{Getting key values}\label{sec:keycommands}
+%
+% The shape's key values can be accesses with the following commands:
+%
+% \begin{center}
+% \begin{tabular}{ll}
+% \hline
+% key & command \bigstrut\\\hline
+% {\tt minimum} {\tt width} & |\pgfshapeminwidth| \bigstrut[t]\\
+% {\tt minimum} {\tt height} & |\pgfshapeminheight| \\
+% {\tt outer} {\tt xsep} & |\pgfshapeouterxsep| \\
+% {\tt outer} {\tt ysep} & |\pgfshapeouterysep| \bigstrut[b]\\\hline
+% \end{tabular}
+% \end{center}
+%
+% \noindent
+% The outer separation keys are not relevant to the background path,
+% but should be used by the anchor path and saved anchors.
+%
+% The shape's inner separation keys are automatically included in the \emph{corrected text box}
+% coordinates |\ctbnex| and |\ctbney|.
+%
+% \subsubsection{Testing support}
+%
+% There are a couple of macros can be used in the background path to delineate a
+% shape's text box during development:
+%\begin{description}[nosep]
+% \item[{\tt \textbackslash path@textbox}] draws a line around the the shape's text
+% that is the uncorrected text box.
+% \item[{\tt \textbackslash path@ctextbox}] shows the shape's corrected text box,
+% which includes inner separation.
+% \end{description}
+% These macros should not be used in `production' shapes.
+%
+% \subsection{Procedure}
+%
+% The procedure in outline for making a new shape is as follows:
+% \medskip
+%
+% \begin{enumerate}[nosep]
+% \item Create the border path
+% \item Create the anchor path
+%\item Declare the shape
+% \begin{enumerate}[nosep]
+% \item Use |\setpaths| to employ the paths
+% \item Create the anchors
+% \end{enumerate}
+% \end{enumerate}
+% \medskip
+%
+% The sample shape given in \S\ref{sec:samplecode} can be used as a template to
+% create a new shape.
+% The code can be copied from there, or it can be acquired as the file |sampleshape.tex|,
+% which is part of the package's distribution.
+%
+% The procedure for adapting the template code is as follows:
+% \begin{enumerate}
+%
+% \item Change the name of the shape in the |\pgfdeclareshape| command
+% from `{\tt sample}' to the name of the new shape.
+%
+% \item \label{item:steppaths} Write \emph{anchor path} and \emph{background path} macros.
+%
+% These and any sub macros are placed at the start of the file and replace
+% the sample |\sampleanchor| and |\sampleborder| macros.
+%
+% As discussed in \S\ref{sec:backgroundpath} and \S\ref{sec:anchorpath},
+% the background path should take account of the minimum dimension keys,
+% and the anchor path should handle the minimum keys, and outer
+% separation.
+% The macros given in \S\ref{sec:macros} are provided to help with this,
+% and the sample code gives an indication of how they can be used.
+%
+% \item Change the arguments of |\setpaths| in the template to the macros written
+% in step \ref{item:steppaths}.
+% The first is the anchor path and the second is the background path.
+%
+% \item \label{item:stepsavedanchors} Write the saved anchors that will needed by the anchors
+% written in step~\ref{item:stepanchors}.
+%
+% Saved anchors, like the anchor path written in step \ref{item:steppaths},
+% should correct for outer separation, and minimum dimensions
+% using the macros in \S\ref{sec:macros}.
+% They should set the |\pgf@x| and |\pgf@y| registers.
+%
+% \item \label{item:stepanchors}
+% Write anchors that set |\pgf@x| and |\pgf@y| registers using
+% the saved anchors from step \ref{item:stepsavedanchors}.
+%
+% \begin{enumerate}
+%
+% \item Write anchors for the cardinal and sub cardinal points:
+%
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \anchor{north}{ ... }
+% \anchor{north east}{ ... }
+% \anchor{east}{ ... }
+% \anchor{south east}{ ... }
+% \anchor{south}{ ... }
+% \anchor{south west}{ ... }
+% \anchor{west}{ ... }
+% \anchor{north west}{ ... }
+% \end{VerbatimOut}
+% \VerbatimInput{\jobname.tmp}
+%
+% \item Write any additional anchors that the shape needs.
+%
+% \end{enumerate}
+%
+% \end{enumerate}
+%
+% The PGF registers used throughout this method of declaring new shapes have the
+% |@| character in their names.
+% Unfortunately, this character has a special role in \LaTeX{}.
+% So either the |\makeatletter| and |\makeatother| commands must be used as in
+% |sampleshape.tex|, or the shape must be defined in a |sty| file.
+%
+% \section{Path and Anchor Examples}
+%
+% Here an example of an actual shape that is implemented using the {\sf makeshape} method:
+%
+% \bigskip
+%
+% \begin{tikzpicture}%[>=latex',font={\sf \small}]
+% \node at (0,0) [draw, sample,
+% minimum width=2cm,
+% minimum height=1cm] {};
+% \end{tikzpicture}
+% \bigskip
+%
+% Its background path, anchor path, and anchor points use a common macro that gives
+% the space between the outer and inner boundaries of the shape.
+%
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \def\gap{4pt}
+% \end{VerbatimOut}
+% \VerbatimInput{\jobname.tmp}
+%
+% \subsection{Background Path}\label{sec:backgroundpathexmpl}
+%
+% In this example, the background path macro is called {\tt sampleshape}.
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \def\sampleshape{
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left]{\jobname.tmp}
+% First we get the corrected text box coordinates,
+% and add space for the shape using the |\gap| macro.
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \pgf@xa=\ctbnex
+% \pgf@ya=\ctbney
+% \advance\pgf@xa by \gap
+% \advance\pgf@ya by \gap
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=2]{\jobname.tmp}
+% Then the standard correction for minimum size is applied using the |\mincorrect| macro.
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+% \mincorrect{\pgf@ya}{\pgfshapeminheight}
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=6]{\jobname.tmp}
+% Using these coordinates the outer boundary of the shape can be drawn
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+% \pgfpathclose
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=8]{\jobname.tmp}
+% Finally, the reference coordinates are moved to the inner boundary and the shape is completed
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \advance\pgf@xa by -\gap
+% \advance\pgf@ya by -\gap
+% \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+% \pgfpathclose
+% }
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=13]{\jobname.tmp}
+%
+% \subsection{Anchor Path}\label{sec:anchorpathexmpl}
+%
+% The shape's anchor path macro called {\tt sampleanchor},
+% and is similar to the path macro in \S\ref{sec:backgroundpathexmpl},
+% but it also handles outer separation.
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \def\sampleanchor{
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left]{\jobname.tmp}
+% First we get the corrected text box coordinates, and add space for the shape using
+% the |\gap| macro.
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \pgf@xa=\ctbnex
+% \pgf@ya=\ctbney
+% \advance\pgf@xa by \gap
+% \advance\pgf@ya by \gap
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=2]{\jobname.tmp}
+% Then corrections for minimum size and outer separation are applied:
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+% \advance\pgf@xa\pgfshapeouterxsep
+% \mincorrect{\pgf@ya}{\pgfshapeminheight}
+% \advance\pgf@ya\pgfshapeouterysep
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=6]{\jobname.tmp}
+% Using these coordinates the anchor boundary path is finally drawn
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+% \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+% \pgfpathclose
+% }
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=10]{\jobname.tmp}
+%
+% \subsection{Shape Declaration and Anchor Points}
+%
+% The {\tt sample} shape declaration is started with
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \pgfdeclareshape{sample}{
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left]{\jobname.tmp}
+% Then the shape and anchor paths, which were defined in \S\ref{sec:backgroundpathexmpl}
+% and \S\ref{sec:anchorpathexmpl}, are employed with
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \setpaths{\sampleanchor}{\sampleshape}
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=2]{\jobname.tmp}
+%
+% \subsubsection{Anchors}
+%
+% Next in the shape's declaration are its saved anchors.
+% In this case, we establish the north east anchor location with code that is equivalent
+% to the first part of the anchor path macro (\S\ref{sec:anchorpathexmpl}).
+% Note how the anchor point's coordinate is returned in |\pgf@x| and |\pgf@y|.
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \savedanchor{\northeast}{
+% \pgf@x = \ctbnex
+% \pgf@y = \ctbney
+% \advance\pgf@xa by \gap
+% \advance\pgf@ya by \gap
+% \mincorrect{\pgf@x}{\pgfshapeminwidth}
+% \mincorrect{\pgf@y}{\pgfshapeminheight}
+% \advance\pgf@x\pgfshapeouterxsep
+% \advance\pgf@y\pgfshapeouterysep
+% }
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=3]{\jobname.tmp}
+%
+% \noindent
+% The saved anchor is then used to construct the shape's anchors,
+% and the declaration is ended as follows:
+%
+% \begin{VerbatimOut}[gobble=5]{\jobname.tmp}
+% \anchor{north}{\northeast \pgf@x=0pt}
+% \anchor{north east}{\northeast}
+% \anchor{east}{\northeast \pgf@y=0pt}
+% \anchor{south east}{\northeast \pgf@y=-\pgf@y}
+% \anchor{south}{\northeast \pgf@x=0pt \pgf@y=-\pgf@y}
+% \anchor{south west}{\northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+% \anchor{west}{\northeast \pgf@x=-\pgf@x \pgf@y=0pt}
+% \anchor{north west}{\northeast \pgf@x=-\pgf@x}
+% }
+% \end{VerbatimOut}
+% \VerbatimInput[numbers=left, firstnumber=13]{\jobname.tmp}
+%
+%
+% \subsection{Sample Shape Code}\label{sec:samplecode}
+%
+% The following is a full listing of the code needed to make the sample shape
+% described above.
+% It can be used as a templete for new shapes.
+% A copy of this code can be found in the the file {\tt sampleshape.tex},
+% which is included in the package's distribution.
+% Note the use of the |\makeatletter| and |\makeatother| commands, which are required
+% because the sample shape is in a |tex| file.
+%
+%^^A - Code must be < 67 characters to fit on page at 10pt ...
+% \VerbatimInput[ ^^A numbers=left,
+% firstline=40, lastline=127]{sampleshape}
+%
+%
+%^^A===========================================================================
+%^^A References
+%^^A===========================================================================
+%
+%^^A - Used in \StopEventually ...
+%
+% \def\printBib{
+% \begin{thebibliography}{9}
+% \raggedright
+%
+% \bibitem{pgfMan}
+% Till Tantau,
+% \emph{The TikZ and PGF Packages, Manual for version 2.10},
+% 2010.
+% Available as
+% \href{http://mirrors.ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf}
+% {\tt pgfmanual.pdf}
+% from the \href{http://ctan.org}{Comprehensive TeX Archive Network}.
+%
+%^^A in pgfMan \emph{Constructing Paths}, section 71, pp 579-589.
+%^^A in pgfMan \emph{Declaring New Shapes}, section 75.5, pp 625-631.
+%
+% \end{thebibliography}
+% }
+%
+%
+%^^A===========================================================================
+%^^A Start code implementation
+%^^A===========================================================================
+%
+% \StopEventually{ \printBib }
+%^^A \StopEventually{ \printBib \PrintChanges }
+%^^A -> Run pdfLaTeX makeshape.dtx
+%^^A makeindex -s gglo.ist -o makeshape.gls makeshape.glo
+%^^A pdfLaTeX makeshape.dtx
+%
+% \section{Implementation}
+%
+% \subsection{Text Box Calculations}\label{sec:textboxcalc}
+%
+% The shape's text is at its centre for shape's made with this package.
+% The text box position is defined by the shape's |text| anchor, which must give the coordinate
+% of the west end of the text's base line.
+% PGF provides three useful dimensions:
+%
+% \smallskip
+% \begin{tabular}{lll}
+% |\wd\pgfnodeparttextbox| & width & $wd$\\
+% |\ht\pgfnodeparttextbox| & height & $ht$\\
+% |\dp\pgfnodeparttextbox| & depth & $dp$\\
+% \end{tabular}
+%
+% \smallskip\noindent
+% These are related as follows:
+% \medskip
+%
+%^^A----------------------------------
+%^^A- Text box diagram - start
+%^^A----------------------------------
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+%
+% \def\tbht{30pt} ^^A - text box height
+% \def\tbdp{15pt} ^^A - text box depth
+% \def\tbwd{150pt} ^^A - text box width
+%
+% \def\blwx{-\tbwd/2} ^^A - baseline west x
+% \def\blwy{-\tbht/2+\tbdp/2} ^^A - baseline west y
+%
+% \def\tbnex{\tbwd/2} ^^A - text box north east x
+% \def\tbney{\tbht/2+\tbdp/2} ^^A - text box north east y
+%
+% \node (textbox) at (0,0) [draw, rectangle, fill=white,
+% minimum width=\tbwd,
+% minimum height=\tbht+\tbdp,
+% ] {};
+% \draw [] (\blwx,\blwy) -- ++(\tbwd,0);
+%
+% \node (textanchor) [coordinate] at (\blwx,\blwy){};
+%
+% \node at (textanchor) [draw, circle] (blinewest) {};
+%
+%^^A - Labels
+% \node (blinelable) at (3.5cm,\blwy) [inner sep = 0] {baseline};
+% \node (textanchlabel) at (\blwx+28pt,\blwy+8pt) [inner sep = 0] {text anchor};
+%
+%^^A - Dimensions
+% \node (hta) [coordinate, left=15pt of textbox.south west] {};
+% \node (htc) [coordinate, left=15pt of textbox.north west] {};
+% \node (htb) [coordinate, left=15pt of textanchor] {};
+% \draw [|<->|] (hta) -- (htb) node [midway,left] {depth};
+% \draw [<->|] (htb) -- (htc) node [midway,left] {height};
+% \node (wda) [coordinate, above=10pt of textbox.north west] {};
+% \node (wdb) [coordinate, above=10pt of textbox.north east] {};
+% \draw [|<->|] (wda) -- (wdb) node [midway,above] {width};
+%
+%^^A - xy axis
+% \def\xaxisdim{0.5cm}
+% \def\yaxisdim{0.5cm}
+% \draw [dotted] (0,0) -- ++(\xaxisdim,0); ^^A - origin
+% \draw [dotted] (0,0) -- ++(-\xaxisdim,0); ^^A - origin
+% \draw [dotted] (0,0) -- ++(0,\yaxisdim); ^^A - origin
+% \draw [dotted] (0,0) -- ++(0,-\yaxisdim); ^^A - origin
+%
+% \end{tikzpicture}
+%^^A----------------------------------
+%^^A- Text box diagram - end
+%^^A----------------------------------
+%\medskip
+%
+% For this box to be centred on the origin, we need to calculate suitable coordinates for
+% the |text| anchor.
+% So, if the box's south west corner is at $(x_{sw},y_{sw})$ and the box is centred, then
+% $x_{sw} = -wd/2$ and $y_{sw}=-(ht+dp)/2$.
+% If the |text| anchor is at $(x_{text},y_{text})$, then
+% \vspace{-2ex}
+%\begin{eqnarray}
+% x_{text} & = & x_{sw} = -\frac{wd}{2}\label{eqn:xtext}\\
+% y_{text} & = & y_{sw} + dp = -\frac{ht}{2} - \frac{dp}{2} + dp
+% = \frac{dp}{2} - \frac{ht}{2} \label{eqn:ytext}
+%\end{eqnarray}
+%
+% Furthermore, the shape's north east corner $(x_{ne},y_{ne})$ is at
+%\begin{eqnarray}
+% x_{ne} & = & \frac{wd}{2} \label{eqn:xne}\\[1ex]
+% y_{ne} & = & \frac{ht+dp}{2} \label{eqn:yne}
+%\end{eqnarray}
+%
+%\iffalse
+%<*package>
+%\fi
+%
+%\subsection{Symetric bounding box}\label{sec:symbbox}
+%
+% We require a rectangle that contains the anchor path, and has its centre at the origin.
+% Such a rectangle, defined by the coordinate of its north east corner, is needed
+% in the anchor border algorithm described in \S\ref{sec:anchoralgorithm}.
+%
+% \vspace{2ex}
+%
+%^^A----------------------------------
+%^^A- Bounding box diagram - start
+%^^A----------------------------------
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+%
+% \def\bbnex{60pt} ^^A - box ne x
+% \def\bbney{30pt} ^^A - box ne y
+%
+% \node (boundingbox) at (0,0) [draw, rectangle, dashed,
+% minimum width=2*\bbnex,
+% minimum height=2*\bbney,
+% ] {};
+%
+% \node at (\bbnex,\bbney) [draw, circle] (boxne) {};
+%
+% \def\nx{0pt} \def\ny{20pt}
+% \def\ex{30pt} \def\ey{-10pt}
+% \def\sx{-20pt} \def\sy{-\bbney}
+% \def\wx{-\bbnex} \def\wy{10pt}
+%
+%^^A - Anchor path
+% \draw [] (\nx,\ny) -- (\ex,\ey);
+% \draw [] (\ex,\ey) -- (\sx,\sy);
+% \draw [] (\sx,\sy) -- (\wx,\wy);
+% \draw [] (\wx,\wy) -- (\nx,\ny);
+%
+%^^A - mins and maxs with labels
+% \draw [dotted] (\nx,\ny) -- (\bbnex+10pt,\ny);
+% \draw [dotted] (\bbnex,\sy) -- (\bbnex+10pt,\sy);
+% \draw [dotted] (\ex,\ey) -- (\ex,-\bbney-10pt);
+% \draw [dotted] (\wx,-\bbney) -- (\wx,-\bbney-10pt);
+% \node (maxy) at (\bbnex+24pt,\ny) [inner sep = 0] {$y_{max}$};
+% \node (miny) at (\bbnex+24pt,\sy) [inner sep = 0] {$y_{min}$};
+% \node (maxx) at (\wx,-\bbney-16pt) [inner sep = 0] {$x_{min}$};
+% \node (maxx) at (\ex,-\bbney-16pt) [inner sep = 0] {$x_{max}$};%
+%
+%^^A - Labels
+% \node (path) at (\wx-40pt,\wy-32pt) [inner sep = 0] {anchor path};
+% \draw [->] (path.east) -- (-40pt,-10pt);
+% \node (box) at (\wx-40pt,\wy+13pt) [inner sep = 0] {bounding box};
+% \draw [->] (box.east) -- (\wx,23pt);
+% \node (bbne) at (\bbnex+25pt,\bbney+10pt) [inner sep = 0] {$(x_{ne},y_{ne})$};
+%
+%^^A - xy axis
+% \def\xaxisdim{0.2cm}
+% \def\yaxisdim{0.2cm}
+% \draw [] (0,0) -- ++(\xaxisdim,0); ^^A - origin
+% \draw [] (0,0) -- ++(-\xaxisdim,0); ^^A - origin
+% \draw [] (0,0) -- ++(0,\yaxisdim); ^^A - origin
+% \draw [] (0,0) -- ++(0,-\yaxisdim); ^^A - origin
+%
+% \end{tikzpicture}
+%^^A----------------------------------
+%^^A- Bounding box diagram - end
+%^^A----------------------------------
+%
+% \medskip
+% The \emph{symmetric bounding box} is defined by the coordinate of its north east corner:
+% \vspace{-3ex}
+% \begin{eqnarray}
+% x_{ne} &=& \max{(\vert x_{min} \vert \, ,\vert x_{max} \vert )} \label{eqn:bbx}\\
+% y_{ne} &=& \max{(\vert y_{min} \vert \, ,\vert y_{max} \vert )} \label{eqn:bby}
+% \end{eqnarray}
+%
+% \subsection{The Anchor Border Algorithm}\label{sec:anchoralgorithm}
+%
+% A shape's |\anchorborder| command must calculate the intersection of a line drawn
+% between the origin and a target point, and the shape's border.
+% The aim here is to do this calculation using an \emph{anchor path} that describes
+% the shapes outer border.
+%
+% The |\pgfintersectionofpaths| command can be used to do this, but it will only work
+% for points that are outside the anchor path.
+% The solution is to \emph{externalise the point} using the |\pgfpointborderrectangle| command.
+%
+% \bigskip
+%^^A------------------------------------------------
+%^^A- Anchor border point algorithm diagram - start
+%^^A------------------------------------------------
+% \begin{tikzpicture}[>=latex',font={\sf \small}]
+%
+%^^A - xy axis
+% \def\xaxisdim{0.2cm}
+% \def\yaxisdim{0.2cm}
+% \draw [] (0,0) -- ++(-\xaxisdim,0); ^^A - origin
+% \draw [] (0,0) -- ++(0,\yaxisdim); ^^A - origin
+% \draw [] (0,0) -- ++(0,-\yaxisdim); ^^A - origin
+% \filldraw[white] (0,0) circle (2pt);
+%
+%^^A - Bounding box
+% \def\bbnex{60pt} ^^A - box ne x
+% \def\bbney{30pt} ^^A - box ne y
+%
+% \node (boundingbox) at (0,0) [draw, rectangle, dashed,
+% minimum width=2*\bbnex,
+% minimum height=2*\bbney,
+% ] {};
+%
+% \draw ((\bbnex,\bbney) circle (2pt);
+%
+%^^A - Anchor path
+% \def\nx{30pt} \def\ny{20pt}
+% \def\ex{50pt} \def\ey{-20pt}
+% \def\sx{-20pt} \def\sy{-\bbney}
+% \def\wx{-\bbnex} \def\wy{10pt}
+%
+% \def\apath{
+% \pgfpathmoveto{\pgfpoint{\nx}{\ny}}
+% \pgfpathlineto{\pgfpoint{\ex}{\ey}}
+% \pgfpathlineto{\pgfpoint{\sx}{\sy}}
+% \pgfpathlineto{\pgfpoint{\wx}{\wy}}
+% \pgfpathclose }
+%
+%^^A - Draw the anchor path
+% \apath
+% \pgfusepath{stroke}
+%
+%^^A - Target point and vectors
+% \def\tx{20pt}
+% \def\ty{5pt}
+% \def\endx{3.5*\tx}
+% \def\endy{3.5*\ty}
+%
+% \draw [] (0,0) -- (\tx,\ty);
+% \draw [dotted] (\tx,\ty) -- (\endx,\endy);
+% \filldraw (\tx,\ty) circle (2pt);
+%
+%^^A - Intersection with bounding box
+% \pgfpathcircle{\pgfpointborderrectangle{\pgfpoint{\tx}{\ty}}
+% {\pgfpoint{\bbnex}{\bbney}}}{2pt}
+% \pgfusepath{stroke}
+%
+%^^A - intersection with anchor path
+% \pgfintersectionofpaths{\apath}
+% { \pgfpathmoveto{\pgfpoint{0}{0}}
+% \pgfpathlineto{\pgfpoint{\endx}{\endy}} }
+% \pgfpathcircle{\pgfpointintersectionsolution{1}}{2pt}
+% \pgfusepath{stroke}
+%
+%^^A - Labels
+% \node (path) at (\wx-40pt,\wy-32pt) [inner sep = 0] {anchor path};
+% \draw [->] (path.east) -- (-40pt,-10pt);
+% \node (box) at (\wx-40pt,\wy+13pt) [inner sep = 0] {bounding box};
+% \draw [->] (box.east) -- (\wx,23pt);
+% \node (p1) at (\tx+5pt,\ty-8pt) [inner sep = 0] {p1};
+% \node (p2) at (\bbnex+10pt,\bbney+5pt) [inner sep = 0] {p2};
+% \node (p3) at (\bbnex+10pt,8pt) [inner sep = 0] {p3};
+% \node (p4) at (40pt,18pt) [inner sep = 0] {p4};
+%
+%^^A - point key
+%^^A \def\pkeyx{90pt}
+%^^A \def\pkeyy{10pt}
+%^^A \def\pkeystep{-10pt}
+%^^A \node (key1) at (\pkeyx,\pkeyy) [right, inner sep = 0] {p1 = target point};
+%^^A \node (key2) at (\pkeyx,\pkeyy+\pkeystep) [right, inner sep = 0] {p2 = bounding box corner};
+%^^A \node (key3) at (\pkeyx,\pkeyy+2*\pkeystep) [right, inner sep = 0]
+%^^A {p3 = bounding box intersection};
+%^^A \node (key4) at (\pkeyx,\pkeyy+3*\pkeystep) [right, inner sep = 0]
+%^^A {p4 = anchor path intersection};
+%
+% \end{tikzpicture}
+%^^A------------------------------------------------
+%^^A- Anchor border point algorithm diagram - end
+%^^A------------------------------------------------
+%
+%\bigskip
+%
+%\begin{description}
+%
+% \item[Step 1 - Externalise the target point]
+%
+% The vector to the target point {\sf p1} is extended to the bounding box to find
+% the intersection {\sf p3}.
+% The bounding box is by definition outside the anchor path.
+% Thus point {\sf p3} must also be outside the anchor path.
+%
+% To achieve this, the |\pgfpointborderrectangle| command is applied to the target point {\sf p1}
+% and the centred rectangle defined by {\sf p2}, which is the symmetric bounding box defined
+% in \S\ref{sec:symbbox}.
+%
+% \item[Step 2 - Find the border intersection]
+%
+% The line from the origin to the point {\sf p3} passes through {\sf p1},
+% and its intersection with the anchor path is the required point {\sf p4}.
+%
+% The intersection is found with the |\pgfintersectionofpaths| command,
+% which takes the anchor path and the path of the line from the origin to {\sf p3} as input.
+% Since {\sf p3} is always outside the anchor path, such an intersection will always be found.
+%
+% \end{description}
+%
+% \subsection{Declare Shape Commands}
+%
+% \begin{macro}{\setpaths}
+% The |\setpaths| macro is used in |\pgfdeclareshape| definitions to specify the shape's paths.
+% It has two parameters:
+% \begin{description}[nosep]
+% \item[\tt ~\#1] is a macro defining the anchor path.
+% \item[\tt ~\#2] is a macro defining the background path.
+% \end{description}
+%
+% \begin{macrocode}
+\def\setpaths#1#2{
+% \end{macrocode}
+%
+% \noindent
+% It defines saved macros for use in the shape's path macros and saved anchors.
+% There are also macros defined that are only used within the packages other macros.
+%
+% \subsubsection{Corrected text box saved macros}
+%
+% These two saved macros give the x and y coordinates of the corrected text box's north east corner.
+% They are invoked by users of the package to define a shape's path macros.
+%
+% \begin{macro}{\ctbnex}
+% The |\ctbnex| saved macro gives the x-coordinate,
+% which is calculated as described by equation \ref{eqn:xne} in \S\ref{sec:textboxcalc}.
+% \begin{macrocode}
+ \savedmacro\ctbnex{
+ \pgf@x=.5\wd\pgfnodeparttextbox
+ \pgfmathsetlength\pgf@xa{\pgfshapeinnerxsep}
+ \advance\pgf@x\pgf@xa
+ \edef\temp@x{\the\pgf@x}
+ \let\ctbnex\temp@x
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ctbney}
+% The y-coordinate is given by the |\ctbney| saved macro,
+% which implements equation \ref{eqn:yne} in \S\ref{sec:textboxcalc}.
+% \begin{macrocode}
+ \savedmacro\ctbney{
+ \pgf@y=.5\ht\pgfnodeparttextbox
+ \advance\pgf@y.5\dp\pgfnodeparttextbox
+ \pgfmathsetlength\pgf@ya{\pgfshapeinnerysep}
+ \advance\pgf@y\pgf@ya
+ \edef\temp@y{\the\pgf@y}
+ \let\ctbney\temp@y
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Key value saved macros}
+%
+% These saved macros give the values of significant shape keys.
+% They have the same names as the standard PGF macros,
+% and allow the user's anchor and background path macros to use the standard names.
+%
+% \begin{macro}{\pgfshapeouterxsep}
+% The value of the x outer separation key is given by |\pgfshapeouterxsep|.
+% \begin{macrocode}
+ \savedmacro\pgfshapeouterxsep{
+ \pgfkeysgetvalue{/pgf/outer xsep}{\temp@sep}
+ \let\pgfshapeouterxsep\temp@sep
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfshapeouterysep}
+% The value of the y outer separation key is given by |\pgfshapeouterysep|.
+% \begin{macrocode}
+ \savedmacro\pgfshapeouterysep{
+ \pgfkeysgetvalue{/pgf/outer ysep}{\temp@sep}
+ \let\pgfshapeouterysep\temp@sep
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfshapeminwidth}
+% The value of the minimum width key is given by |\pgfshapeminwidth|.
+% \begin{macrocode}
+ \savedmacro{\pgfshapeminwidth}{
+ \pgfkeysgetvalue{/pgf/minimum width}{\temp@wd}
+ \let\pgfshapeminwidth\temp@wd
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfshapeminheight}
+% The value of the minimum height key is given by |\pgfshapeminheight|.
+% \begin{macrocode}
+ \savedmacro{\pgfshapeminheight}{
+ \pgfkeysgetvalue{/pgf/minimum height}{\temp@ht}
+ \let\pgfshapeminheight\temp@ht
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Saved anchors}\label{sec:savedanchors}
+%
+% The saved anchors are used to implement the anchors provided by the package,
+% but can be used by the user to define custom anchors if required.
+% They are required to return the coordinates of a point in |\pgf@x| and |\pgf@y|.
+%
+% \begin{macro}{\centre}
+% The |\centre| saved anchor is used to implement the package |center| anchor.
+% The |\pgfpointorigin| command sets |\pgf@x| and |\pgf@y|.
+% \begin{macrocode}
+ \savedanchor{\centre}{
+ \pgfpointorigin
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\text}
+% The |\text| saved anchor is used to implement the package |text| anchor.
+% It gives the coordinate of the west end of the text base line.
+% The calculation it uses is explained in \S\ref{sec:textboxcalc}.
+% Equation \ref{eqn:xtext} gives the x-coordinate
+% and equation \ref{eqn:ytext} gives the y-coordinate.
+% \begin{macrocode}
+ \savedanchor{\text}{
+ \pgf@y=-0.5\ht\pgfnodeparttextbox
+ \advance\pgf@y by 0.5\dp\pgfnodeparttextbox
+ \pgf@x=-0.5\wd\pgfnodeparttextbox
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\boundbox@ne}
+% The |\boundbox@ne| saved anchor gives the north east corner of the
+% anchor path's symmetric bounding rectangle (see \S\ref{sec:symbbox}).
+% \begin{macrocode}
+ \savedanchor{\boundbox@ne}{
+% \end{macrocode}
+%
+% First clear any existing path, and then execute the anchor path macro given as
+% the first parameter of |\setpaths|.
+% \begin{macrocode}
+ \pgfusepath{}
+ #1
+% \end{macrocode}
+% Store the path's minimum and maximum coordinates, and then discard the path.
+% \begin{macrocode}
+ \pgf@xb=\pgf@pathmaxx
+ \pgf@yb=\pgf@pathmaxy
+ \pgf@xc=\pgf@pathminx
+ \pgf@yc=\pgf@pathminy
+ \pgfusepath{}
+% \end{macrocode}
+%
+% The north east corner x-coordinate of the symmetric bounding box is calculated using
+% equation \ref{eqn:bbx} from \S\ref{sec:symbbox}.
+%
+% \begin{macrocode}
+ \ifdim\pgf@xb<0pt \pgf@xb=-\pgf@xb \fi
+ \ifdim\pgf@xc<0pt \pgf@xc=-\pgf@xc \fi
+ \ifdim\pgf@xb<\pgf@xc
+ \pgf@x=\pgf@xc
+ \else
+ \pgf@x=\pgf@xb
+ \fi
+% \end{macrocode}
+% The y-coordinate is calculated with equation \ref{eqn:bby}:
+% \begin{macrocode}
+ \ifdim\pgf@yb<0pt \pgf@yb=-\pgf@yb \fi
+ \ifdim\pgf@yc<0pt \pgf@yc=-\pgf@yc \fi
+ \ifdim\pgf@yb<\pgf@yc
+ \pgf@y=\pgf@yc
+ \else
+ \pgf@y=\pgf@yb
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Anchors}
+%
+% \begin{macro}{center}
+% \begin{macro}{text}
+% PGF shapes require |center| and |text| anchors.
+% They are implemented by the saved anchors |\center| and |\text| (see \ref{sec:savedanchors}),
+% and in effect centre the shape's text on the origin.
+% \begin{macrocode}
+ \anchor{center}{\centre}
+ \anchor{text}{\text}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\anchorborder}
+% The |\anchorborder| anchor is critically responsible for calculating points on
+% the shape's boundary
+% Its algoritm is explained in \S\ref{sec:anchoralgorithm}.
+% \begin{macrocode}
+ \anchorborder{
+% \end{macrocode}
+% On entry, the coordinates of the target point are supplied in |\pgf@x| and |\pgf@y|,
+% and these are immediately saved:
+% \begin{macrocode}
+ \edef\targpointx{\the\pgf@x}
+ \edef\targpointy{\the\pgf@y}
+% \end{macrocode}
+%
+% A couple of settings are needed to support shapes that are not centred on the origin:
+% \begin{macrocode}
+ \pgf@relevantforpicturesizefalse
+ \pgftransformreset
+% \end{macrocode}
+% The first suppresses updating of the picture bounding box and ensures correct positioning
+% of the shape.
+% The second stops coordinate transformations being applied,
+% which is needed for the correct behaviour of points relying on the |\anchorborder| command.
+%
+% Start the computation by finding the north east corner of the anchor path's bounding box:
+% \begin{macrocode}
+ \boundbox@ne
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+% \end{macrocode}
+% Perform step 1 of the algorithm described in \S\ref{sec:anchoralgorithm} to externalise
+% the target to a point on the bounding box:
+% \begin{macrocode}
+ \pgfpointborderrectangle{\pgfpoint{\targpointx}{\targpointy}}
+ {\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \edef\corrx{\the\pgf@x}
+ \edef\corry{\the\pgf@y}
+% \end{macrocode}
+% Next, use this externalised point to find the required boundary point with step 2 of
+% the algorithm.
+% The anchor path is |#1|, which is the first argument |setpaths|.
+% \begin{macrocode}
+ \pgfintersectionofpaths {
+ #1
+ }{
+ \pgfpathmoveto{\pgfpoint{0}{0}}
+ \pgfpathlineto{\pgfpoint{\corrx}{\corry}}
+ }
+% \end{macrocode}
+% Finally, the command |\pgfpointintersectionsolution| puts the point's coordinates in
+% |\pgf@x| and |\pgf@y|.
+% \begin{macrocode}
+ \pgfpointintersectionsolution{1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Background path}
+%
+% \begin{macro}{\backgroundpath}
+% The shape is actually drawn by |\backgroundpath|, which executes the second argument of
+% |\setpaths|, which is the shape's background path.
+% \begin{macrocode}
+ \backgroundpath{
+ #2
+ }
+% \end{macrocode}
+% \end{macro}
+% Finally, |setpaths| is completed.
+% \begin{macrocode}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Utility macros}
+%
+% \subsubsection{Dimension correction}
+%
+% \begin{macro}{\mincorrect}
+% The |\mincorrect| macro finds the larger of two dimensions.
+% It is applied to shape coordinates and keys.
+% It uses a working dimension register, and has two parameters
+% \begin{macrocode}
+\newdimen\crct@dim
+\def\mincorrect#1#2{
+% \end{macrocode}
+% The parameters have the following roles:
+% \begin{description}[nosep]
+% \item[\tt ~\#1] A register holding the normal outer bound dimension of the shape,
+% and then the largest value, in a PGF register such as |\pgf@xa|.
+% \item[\tt ~\#2] A key value, normally one of |\pgfshapeminwidth| or |\pgfshapeminheight|.
+% \end{description}
+% The |\crct@dim| register is used to calculate half of |#2|:
+% \begin{macrocode}
+ \pgfmathsetlength\crct@dim{#2}
+ \pgfmathsetlength\crct@dim{0.5\crct@dim}
+% \end{macrocode}
+%
+% Then if |#1| is larger than |\crct@dim|, |#1| is assigned this value
+% otherwise |#1| remains unchanged.
+% \begin{macrocode}
+ \ifdim#1<\crct@dim
+ #1=\crct@dim
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Macros for testing}
+%
+% There are a couple of macros can be used to delineate a shape's text box during development.
+% They should not be used in `production' shapes.
+%
+% \begin{macro}{\path@textbox}
+% The |\path@textbox| macro draws a line around the the shape's text that is the
+% uncorrected text box.
+% \begin{macrocode}
+\def\path@textbox{
+ \pgf@xa=.5\wd\pgfnodeparttextbox
+ \pgf@ya=.5\ht\pgfnodeparttextbox
+ \advance\pgf@ya.5\dp\pgfnodeparttextbox
+ \typeout{**** TEST text box (x,y) = (\the\pgf@xa,\the\pgf@ya) }
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\path@ctextbox}
+% The |\path@ctextbox| macro shows the shape's corrected text box,
+% which includes inner separation.
+% \begin{macrocode}
+\def\path@ctextbox{
+ \pgf@xa=.5\wd\pgfnodeparttextbox
+ \pgfmathsetlength\pgf@xc{\pgfshapeinnerxsep}
+ \advance\pgf@xa\pgf@xc
+ \pgf@ya=.5\ht\pgfnodeparttextbox
+ \advance\pgf@ya.5\dp\pgfnodeparttextbox
+ \pgfmathsetlength\pgf@yc{\pgfshapeinnerysep}
+ \advance\pgf@ya\pgf@yc
+ \typeout{**** TEST corrected text box (x,y) =
+ (\the\pgf@xa,\the\pgf@ya) }
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathclose
+}
+% \end{macrocode}
+% \end{macro}
+%
+%\iffalse
+%</package>
+%\fi
+%
+% \Finale
+%
+%^^A###########################################################################
+%^^A# Additional installed files #
+%^^A###########################################################################
+%
+%^^A - Option = sample ...
+%^^A - This is the package's sample shape.
+%^^A - It is included in the report, and it is given as a file to be used as
+%^^A - a template for new shapes.
+%\iffalse
+%<*sample>
+%%--------------------------------------------------
+%%
+%% This is a sample shape for the makeshape package
+%%
+%% It can be adapted for other shapes. See
+%% makeshape.pdf for instructions.
+%%
+%% 25 January 2013
+
+\usepackage{makeshape}
+\makeatletter
+
+%% Constant for sample shape
+\def\gap{4pt}
+
+%% Anchor path <- change and rename as required
+\def\sampleanchor{
+ % get corrected text box
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ % make room for shape
+ \advance\pgf@xa by \gap
+ \advance\pgf@ya by \gap
+ % correct for minheight and minwidth and
+ % for outerxsep or outerysep
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \advance\pgf@xa\pgfshapeouterxsep
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+ \advance\pgf@ya\pgfshapeouterysep
+ % draw the path
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathclose
+}
+
+%% Background path <- change and rename as required
+\def\sampleborder{
+ % get corrected text box
+ \pgf@xa=\ctbnex
+ \pgf@ya=\ctbney
+ % make room for shape
+ \advance\pgf@xa by \gap
+ \advance\pgf@ya by \gap
+ % correct for minheight and minwidth but
+ % not for outerxsep or outerysep
+ \mincorrect{\pgf@xa}{\pgfshapeminwidth}
+ \mincorrect{\pgf@ya}{\pgfshapeminheight}
+ % draw outer shape
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathclose
+ % draw inner shape
+ \advance\pgf@xa by -\gap
+ \advance\pgf@ya by -\gap
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{-\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathclose
+}
+
+%%------------------------------------------------
+%% Shape declaration <- Change name as required
+\pgfdeclareshape{sample}{
+
+ % Set paths <- change path macros as required
+ \setpaths{\sampleanchor}{\sampleborder}
+
+ % Saved anchors <- change as required
+ \savedanchor{\northeast}{
+ \pgf@x = \ctbnex
+ \pgf@y = \ctbney
+ \advance\pgf@x by \gap
+ \advance\pgf@y by \gap
+ \mincorrect{\pgf@x}{\pgfshapeminwidth}
+ \mincorrect{\pgf@y}{\pgfshapeminheight}
+ \advance\pgf@x\pgfshapeouterxsep
+ \advance\pgf@y\pgfshapeouterysep
+ }
+
+ % Anchors <- change as required
+ \anchor{north}{\northeast \pgf@x=0pt}
+ \anchor{north east}{\northeast}
+ \anchor{east}{\northeast \pgf@y=0pt}
+ \anchor{south east}{\northeast \pgf@y=-\pgf@y}
+ \anchor{south}{\northeast \pgf@x=0pt \pgf@y=-\pgf@y}
+ \anchor{south west}{\northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y}
+ \anchor{west}{\northeast \pgf@x=-\pgf@x \pgf@y=0pt}
+ \anchor{north west}{\northeast \pgf@x=-\pgf@x}
+
+}
+
+\makeatother
+
+%</sample>
+%\fi
+%
+\endinput
+
diff --git a/graphics/pgf/contrib/makeshape/makeshape.ins b/graphics/pgf/contrib/makeshape/makeshape.ins
new file mode 100644
index 0000000000..c954e6ae4c
--- /dev/null
+++ b/graphics/pgf/contrib/makeshape/makeshape.ins
@@ -0,0 +1,108 @@
+% makeshape.ins
+% 18 January 2013
+%
+% Installation file for the makeshape package.
+%
+% Run LaTeX on this file, with makeshape.dtx and ontesting.dtx
+% in the same folder to make the package's makeshape.sty,
+% sampleshape.tex and testshape.tex files.
+%
+% Run LaTeX on makeshape.dtx and ontesting.dtx to produce
+% the package documentation.
+%
+% This is part of Silhouette 2.1
+%
+% Copyright (C) 2013 by Adrian P Robson
+% adrian.robson@nepsweb.co.uk
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Adrian Robson.
+%
+% This work consists of the files makeshape.ins
+% makeshape.dtx and
+% ontesting.dtx
+% and the derived files makeshape.sty
+% makeshape.pdf
+% sampleshape.tex
+% ontesting.pdf
+% testsample.tex and
+% testsample.pdf
+% -----------------------------------------------------------
+
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+% default preamble
+\preamble
+
+Copyright (C) 2013 by Adrian P Robson
+ adrian.robson@nepsweb.co.uk
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+
+This work has the LPPL maintenance status `maintained'.
+The Current Maintainer of this work is Adrian Robson.
+
+This work consists of the files makeshape.ins
+ makeshape.dtx and
+ ontesting.dtx
+and the derived files makeshape.sty
+ makeshape.pdf
+ sampleshape.tex
+ ontesting.pdf
+ testsample.tex and
+ testsample.pdf
+
+\endpreamble
+
+\Msg{}
+\Msg{**********************************************************}
+\Msg{* The makeshape package ... }
+\Msg{* makeshape.ins, makeshape.dtx and ontesting.dtx are being}
+\Msg{* processed }
+\Msg{**********************************************************}
+
+\generate{\file{makeshape.sty}{\from{makeshape.dtx}{package}}}
+\generate{\file{sampleshape.tex}{\from{makeshape.dtx}{sample}}}
+\generate{\file{testsample.tex}{\from{ontesting.dtx}{testbed}}}
+
+\Msg{**********************************************************}
+\Msg{* Processing complete ... }
+\Msg{* }
+\Msg{* To finish the installation, put makeshape.sty in a }
+\Msg{* suitable place on your system's TeX search path. }
+\Msg{* }
+\Msg{* Run LaTeX on makeshape.dtx to produce the package's user}
+\Msg{* guide. Comment out its 'OnlyDescription' line to include}
+\Msg{* the implementation documentation. }
+\Msg{* Also run LaTeX on ontesting.dtx to produce an article on}
+\Msg{* testing the package and custom shapes. }
+\Msg{* The files sampleshape.tex and testshape.tex should be }
+\Msg{* kept as examples. }
+\Msg{* }
+\Msg{* You should also keep sampleshape.tex and testsample.tex }
+\Msg{* as a templates for making and testing new shapes. }
+\Msg{* }
+\Msg{* You might also like to keep makeshape.ins, makeshape.dtx}
+\Msg{* and ontesting.dtx somewhere safe as a backup, or in case}
+\Msg{* you want to pass the makeshape package on to someone. }
+\Msg{* }
+\Msg{* Do not forget to delete the auxiliary and temporary }
+\Msg{* files. }
+\Msg{**********************************************************}
+\Msg{}
+
+
+\endbatchfile \ No newline at end of file
diff --git a/graphics/pgf/contrib/makeshape/makeshape.pdf b/graphics/pgf/contrib/makeshape/makeshape.pdf
new file mode 100644
index 0000000000..fa61daa503
--- /dev/null
+++ b/graphics/pgf/contrib/makeshape/makeshape.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/makeshape/ontesting.dtx b/graphics/pgf/contrib/makeshape/ontesting.dtx
new file mode 100644
index 0000000000..9f1bf6cf5f
--- /dev/null
+++ b/graphics/pgf/contrib/makeshape/ontesting.dtx
@@ -0,0 +1,1124 @@
+% \iffalse meta-comment
+%
+% ontesting.dtx
+% 22 January 2013
+%
+% This is version 1.1
+% It generates a test bed (testsample.tex) for the sample shape,
+% and an article (ontesting.pdf) on the tests.
+%
+% Generation of testsample.tex is with
+% pdflatex makeshape.ins
+% which contains
+% \generate{\file{testsample.tex}
+% {\from{ontesting.dtx}{testbed}}}
+%
+% Generation of ontesting.pdf is with
+% pdflatex ontesting.dtx
+%
+% The \OnlyDescription command is not used for this document.
+%
+% This is part of Silhouette 2.1
+%
+% ------------------------------------------------------------------
+% \fi
+%
+% \iffalse
+%^^A---------------------------------------------------------
+%^^A Preamble for documentation
+%^^A---------------------------------------------------------
+%<*driver>
+\documentclass[10pt,a4paper]{ltxdoc}
+
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+
+\usepackage{hyperref}
+
+\usepackage{makeshape}
+\GetFileInfo{makeshape.sty}
+
+\newcommand{\mnote}[1]
+{\marginpar{\scriptsize \raggedright #1 }}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+\begin{document}
+\DocInput{ontesting.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%^^A-------------------------------------------------------------------
+%^^A Change log...
+%^^A-------------------------------------------------------------------
+%^^A
+%^^A 0.0 - 6 January 2013
+% \changes{0.0}{2013/01/06}{
+% Experimental - part of Silhouette 2.0.1.
+% Testing code is adopted from existing documents but improved.
+% Monolithic testing code generation.
+% User documentation is incomplete.
+% }
+%^^A
+%^^A 1.0 - 9 January 2013 (started 7 January)
+% \changes{1.0}{2013/01/09}{
+% \emph{Experimental phase complete.}
+% Testing code generation is embedded in the documentation.
+% Testing code is updated with improved tests.
+% Documentation on the role of the tests is completed.
+% File names are finalised.
+% }
+%^^A
+%^^A 1.1 - 22 January 2013
+% \changes{1.1}{2013/01/22}{
+% Tidied up the structure and layout of the test code.
+% The description of the tests is improved.
+% The report's title is changed.
+% }
+%^^A
+%^^A-------------------------------------------------------------------
+%^^A Check sums...
+%^^A-------------------------------------------------------------------
+%
+%^^A no checksum required
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%^^A===========================================================================
+%^^A Start report body
+%^^A===========================================================================
+%
+% \title{The {\sf makeshape} package\thanks{
+% This document is part of \textsf{makeshape}~\fileversion, dated~\filedate.}\\
+% {\tt testshape.tex}\\A Document for Testing the Package and \\Custom Shapes}
+%
+% \author{Adrian P. Robson\thanks{\texttt{adrian.robson@nepsweb.co.uk}}}
+% \date{22 January 2013}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+%\section{Introduction}
+%
+% Here we discus the |testsample.tex| document
+% that is a test bed for the {\sf makeshape} package \cite{makeshape}
+% and its sample shape.
+% The package is in |makeshape.sty| and the sample shape is defined in |sampleshape.tex|.
+% The test bed can be usefully adapted to work with any PGF \cite{pgfMan} shape
+% developed with the {\sf makeshape} package.
+%
+% There are 11 test PGF pictures in the |testsample.tex| document,
+% and we describe what each of these tests achieves, and what aspects are important for custom shapes.
+%
+%
+%^^A#################################################################
+%^^A# Test bed document - preamble - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+%%
+%% This is a test bed for the makeshape package's
+%% sampleshape in sampleshape.tex
+%%
+%% It can be easily adapted for other shapes.
+%%
+%% 22 January 2013
+
+\documentclass[10pt,a4paper]{article}
+
+\usepackage{enumitem}
+\usepackage{tikz}
+\usetikzlibrary{backgrounds}
+\usetikzlibrary{arrows}
+
+%%-------------------------------------------------
+%% file and shape being tested
+\def\filename{sampleshape} % file being tested
+\input{\filename} % It is a .tex
+%%\usepackage{\filename} % It is a .sty
+\def\testshape{sample} % shape being tested
+%%-------------------------------------------------
+
+%%--------------------------------------------------------
+%% Utility macros
+%%--------------------------------------------------------
+
+%% \spot{x}{y}
+\newcommand{\spot}[2]{
+ \draw[help lines,red] (#1,#2) circle (1pt);
+}
+
+%% \markOrig
+\def\mrksz{4pt}
+\def\mrkcol{yellow}
+\newcommand{\markOrig}{
+ \draw[help lines,\mrkcol] (0,0) circle (\mrksz);
+ \draw[help lines,\mrkcol] (-\mrksz,0) -- (\mrksz,0);
+ \draw[help lines,\mrkcol] (0,-\mrksz) -- (0,\mrksz);
+}
+
+%% \markOrigC{colour}
+\def\mrksz{4pt}
+\newcommand{\markOrigC}[1]{
+ \draw[help lines,#1] (0,0) circle (\mrksz);
+ \draw[help lines,#1] (-\mrksz,0) -- (\mrksz,0);
+ \draw[help lines,#1] (0,-\mrksz) -- (0,\mrksz);
+}
+
+%% Anchors ...
+%% \***{node}{size}{colour}
+
+\def\centeranchor#1#2#3{
+ \draw[help lines,#3] (#1.center) circle (#2);
+}
+
+\def\textanchor#1#2#3{
+ \draw[help lines,#3] (#1.text) circle (#2);
+}
+
+\def\cardinalanchors#1#2#3{
+ \draw[help lines,#3] (#1.north) circle (#2);
+ \draw[help lines,#3] (#1.west) circle (#2);
+ \draw[help lines,#3] (#1.south) circle (#2);
+ \draw[help lines,#3] (#1.east) circle (#2);
+}
+
+\def\corneranchors#1#2#3{
+ \draw[help lines,#3] (#1.north west) circle (#2);
+ \draw[help lines,#3] (#1.south west) circle (#2);
+ \draw[help lines,#3] (#1.south east) circle (#2);
+ \draw[help lines,#3] (#1.north east) circle (#2);
+}
+
+\def\allanchors#1#2#3{
+ \corneranchors{#1}{#2}{#3}
+ \cardinalanchors{#1}{#2}{#3}
+}
+
+%%--------------------------------------------------------
+
+\title{The {\sf makeshape} package\\
+ Shape Test Bed
+ \vspace{-3ex} }
+\author{}
+\date{
+\begin{tabular}{rl}
+ File & {\tt \filename}\\
+ Shape & {\tt \testshape}
+\end{tabular}
+\\[2ex]
+\today}
+
+\begin{document}
+
+\maketitle
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - preamble - end
+%^^A#################################################################
+%
+% \section{The Tests}
+%
+% \subsection{Basic Shape}
+%
+% This section shows the shape with its default size and separation options.
+% Cardinal anchor points are show in red; the centre anchor in blue;
+% and the text anchor in green.
+% The green lines show the the text box size.
+%
+% It tests the package's management of the text box, the text and centre anchors,
+% and the shape's cardinal anchors.
+% \emph{Check that the background path is correct,
+% and that the anchors are in the correct positions.}
+%
+%^^A#################################################################
+%^^A# Test bed document - basic shape tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\section*{Basic Shape}
+
+\begin{center}
+\begin{tikzpicture}
+
+\node at (0,0)
+ [\testshape, draw
+ ] (test) {\verb|x x|} ;
+
+\allanchors{test}{2pt}{red}
+\textanchor{test}{2pt}{green}
+\draw[help lines,green] (test.text) -- ++(7pt,0);
+\draw[help lines,green] (test.text) -- ++(0,5pt);
+\centeranchor{test}{2pt}{blue}
+
+%% mark the anchors with arrows from enclosing rectangle
+\node at (0,0)
+ [rectangle, red,
+ minimum width=4cm,
+ minimum height=2cm
+ ] (outer) {} ;
+\begin{scope}[>=latex']
+\draw[->,help lines,red] (outer.north) -- (test.north);
+\draw[->,help lines,red] (outer.east) -- (test.east);
+\draw[->,help lines,red] (outer.south) -- (test.south);
+\draw[->,help lines,red] (outer.west) -- (test.west);
+\draw[->,help lines,red] (outer.north east) -- (test.north east);
+\draw[->,help lines,red] (outer.south east) -- (test.south east);
+\draw[->,help lines,red] (outer.south west) -- (test.south west);
+\draw[->,help lines,red] (outer.north west) -- (test.north west);
+\end{scope}
+
+\begin{scope}[on background layer]
+\node at (4cm,0)
+ [rectangle, draw
+ ] (rectRmin) {\verb|x x|};
+
+\node at (0,-1.7cm)
+ [rectangle, draw
+ ] (rectBmin) {\verb|x x|};
+
+\draw[help lines,green] (rectRmin.north west) -- ++(-4.5cm,0);
+\draw[help lines,green] (rectRmin.south west) -- ++(-4.5cm,0);
+\draw[help lines,green] (rectBmin.north west) -- ++(0,2.3cm);
+\draw[help lines,green] (rectBmin.north east) -- ++(0,2.3cm);
+\markOrig
+\end{scope}
+
+\end{tikzpicture}
+
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - basic shape tests - end
+%^^A#################################################################
+%
+% \subsection{Minimum Dimensions}
+%
+% This tests support for minimum width and height keys.
+% Yellow lines mark the required sizes and centres, and
+% green lines show the text box location.
+% Cardinal anchors are shown in red.
+%
+% \emph{Check that the background path has scaled properly to the correct dimensions;
+% and the anchors are in the right places.}
+%
+%^^A#################################################################
+%^^A# Test bed document - minimum dimension tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+\vfill
+%%--------------------------------------------------------
+\section*{Minimum Dimensions}
+
+\def\minh{30pt}
+\def\minw{80pt}
+
+{\tt minimum width = \minw}\\
+{\tt minimum height = \minh}
+
+\begin{center}
+\begin{tikzpicture}
+
+%% The test shape
+\node at (0,0)
+ [\testshape, draw,
+ minimum width=\minw,
+ minimum height=\minh,
+ ] (test) {\verb|x x|} ;
+
+\allanchors{test}{1pt}{red}
+
+%% Guide lines
+\begin{scope}[on background layer]
+\node at (4.5cm+\minw,0)
+ [rectangle, draw
+ ] (rectRmin) {\verb|x x|};
+
+\node at (1.5cm+\minw,0)
+ [rectangle, draw,
+ minimum width=\minw,
+ minimum height=\minh
+ ] (rectR) {\verb|x x|};
+
+\node at (0,-1cm-\minh)
+ [rectangle, draw,
+ minimum width=\minw,
+ minimum height=\minh
+ ] (rectB) {\verb|x x|};
+
+\node at (0,-2.5cm-\minh)
+ [rectangle, draw,
+ ] (rectBmin) {\verb|x x|};
+
+\markOrig
+\draw[help lines,yellow] (rectR.north west) -- ++(-1.7cm-\minw,0);
+\draw[help lines,yellow] (rectR.south west) -- ++(-1.7cm-\minw,0);
+\draw[help lines,yellow] (rectR.west) -- ++(-1.7cm-\minw,0);
+\draw[help lines,yellow] (rectR.west) -- ++(\minw+0.2cm,0);
+\draw[help lines,yellow] (rectB.north west) -- ++(0,1.2cm+\minh);
+\draw[help lines,yellow] (rectB.north east) -- ++(0,1.2cm+\minh);
+\draw[help lines,yellow] (rectB.north) -- ++(0,1.2cm+\minh);
+\draw[help lines,yellow] (rectB.north) -- ++(0,-\minh-0.2cm);
+
+\draw[help lines,green] (rectRmin.north west) -- ++(-4.6cm-\minw,0);
+\draw[help lines,green] (rectBmin.north west) -- ++(0,2.6cm+\minh);
+\end{scope}
+
+\end{tikzpicture}
+\end{center}
+\vfill
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - minimum dimension tests - end
+%^^A#################################################################
+%
+% \subsection{Inner Separation}
+%
+% This tests support for the inner separation keys.
+% Inner separation is handled by the package and is included in
+% the corrected text box.
+% Green lines show the basic text box location, and
+% blue lines show the corrected text box location.
+% Cardinal anchors are shown in red.
+%
+% \emph{Check that the shape has scaled properly under the influence of the two keys;
+% and the anchors are in the right places.}
+%
+%^^A#################################################################
+%^^A# Test bed document - inner separation tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+\newpage
+%%--------------------------------------------------------
+\section*{Inner Separation}
+
+\def\insepx{20pt}
+\def\insepy{10pt}
+
+{\tt inner x seperation = \insepx}\\
+{\tt inner y seperation = \insepy}
+
+\begin{center}
+\begin{tikzpicture}
+
+%% The test shape
+\node at (0,0)
+ [\testshape, draw,
+ inner xsep=\insepx, inner ysep=\insepy
+ ] (test) {\verb|x x|} ;
+
+\allanchors{test}{1pt}{red}
+
+%% Guide lines
+\begin{scope}[on background layer]
+\markOrig
+
+\node at (2.5cm,0)
+ [rectangle, draw
+ ] (rectRmin) {\verb|x x|};
+
+\node at (0,-1.5cm)
+ [rectangle, draw
+ ] (rectBmin) {\verb|x x|};
+
+\node at (4cm,0)
+ [rectangle, draw,
+ inner ysep=\insepy
+ ] (rectRwithSep) {\verb|x x|};
+
+\node at (0,-2.2cm)
+ [rectangle, draw,
+ inner xsep=\insepx
+ ] (rectBwithSep) {\verb|x x|};
+
+\draw[help lines,green] (rectRmin.north west) -- ++(-3.4cm,0);
+\draw[help lines,green] (rectBmin.north west) -- ++(0,2cm);
+\draw[help lines,blue] (rectRwithSep.north west) -- ++(-4.9cm,0);
+\draw[help lines,blue] (rectBwithSep.north west) -- ++(0,2.7cm);
+\end{scope}
+
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - inner separation tests - end
+%^^A#################################################################
+%
+% \subsection{Outer Separation}
+%
+% This section tests the outer separation keys.
+% The actual shape is drawn in black.
+% To shown the boundary of the outer separation surface,
+% the shape is expanded and drawn in green.
+% Anchors, which should be on this surface are displayed in red.
+%
+% \emph{Check that the expanded green shape is well formed,
+% and that the anchors are in the correct place.}
+%
+%^^A#################################################################
+%^^A# Test bed document - outer separation tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\section*{Outer Separation}
+
+\def\minh{20pt}
+\def\minw{60pt}
+\def\outerx{20pt}
+\def\outery{10pt}
+
+{\tt outer x separation = \outerx}\\
+{\tt outer y separation = \outery}
+
+\begin{center}
+\begin{tikzpicture}
+
+\markOrig
+
+%% the shape with outer separation
+\node at (0,0)
+ [\testshape, draw,
+ minimum width=\minw,
+ minimum height=\minh,
+ outer xsep=\outerx, outer ysep=\outery
+ ] (test) {\verb|x x|} ;
+
+%% shape expanded to outer separation boundary
+\node at (0,0)
+ [\testshape, draw, help lines, green,
+ minimum width=\minw+2*\outerx,
+ minimum height=\minh+2*\outery,
+ ] (bigger) {} ;
+
+%% mark the anchors with arrows from enclosing rectangle
+\node at (0,0)
+ [rectangle,
+ minimum width=\minw+1cm,
+ minimum height=\minh+1cm,
+ outer xsep=\outerx, outer ysep=\outery
+ ] (outer) {} ;
+
+\begin{scope}[>=latex']
+\draw[->,help lines,red] (outer.north) -- (test.north);
+\draw[->,help lines,red] (outer.east) -- (test.east);
+\draw[->,help lines,red] (outer.south) -- (test.south);
+\draw[->,help lines,red] (outer.west) -- (test.west);
+\draw[->,help lines,red] (outer.north east) -- (test.north east);
+\draw[->,help lines,red] (outer.south east) -- (test.south east);
+\draw[->,help lines,red] (outer.south west) -- (test.south west);
+\draw[->,help lines,red] (outer.north west) -- (test.north west);
+\end{scope}
+
+%% mark anchors with circles
+\allanchors{test}{2pt}{red}
+
+%% mark text and centre anchors
+\textanchor{test}{2pt}{green}
+\draw[help lines,green] (test.text) -- ++(7pt,0);
+\draw[help lines,green] (test.text) -- ++(0,5pt);
+\centeranchor{test}{2pt}{blue}
+
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - outer separation tests - end
+%^^A#################################################################
+%
+% \subsection{Anchorborder}
+%
+% There are three tests that are applied to verify the behaviour of
+% the package's |\anchorborder|, and the shape's anchor path.
+%
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\section*{Anchorborder }
+
+%</testbed>
+%\fi
+%
+% \subsubsection{\texorpdfstring{External Points with Outer Separation and\\
+% Minimum Dimensions}
+% {External Points with Outer Separation and
+% Minimum Dimensions}}
+%
+% This tests the connection of an external point to the shape's surface.
+% It exercises outer separation and minimum dimensions.
+% The black surface is the shape without any separation,
+% and the outer green surface is where the outer separation surface should be.
+% \emph{Check that the black arrows touch the outer green surface;
+% and that the green shape is correct.}
+%
+%^^A#################################################################
+%^^A# Test bed document - external points with outer separation and
+%^^A# minimum dimensions tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\subsection*{External Points with Outer Separation and\\Minimum Dimensions}
+
+\def\width{2cm}
+\def\height{1cm}
+\def\testouter{10pt}
+
+{\tt outer sep = \testouter}\\
+{\tt minimum height = \height}\\
+{\tt minimum width = \width}
+
+\begin{center}
+\begin{tikzpicture}
+
+\markOrig
+
+%% The test shape
+\node at (0,0) [\testshape, draw, font={\sf \small},
+ minimum width=\width,
+ minimum height=\height,
+ outer sep=\testouter
+ ] (test) {Test};
+
+%% green path where anchors should be
+\node at (0,0) [\testshape, draw, help lines, green,
+ minimum width=\width+2*\testouter,
+ minimum height=\height+2*\testouter,
+ ] (bigger) {} ;
+
+\def\n{20}
+\def\radius{3cm}
+\draw[dotted] (0,0) circle (\radius);
+\foreach \s in {1,...,\n}
+{
+ \draw[->, >=latex'] ({360/\n * (\s - 1)}:\radius) -- (test);
+}
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - external points with outer separation and
+%^^A# minimum dimensions tests - end
+%^^A#################################################################
+%
+% \subsubsection{Internal Points with Minimum Dimensions}
+%
+% This tests the connection of an internal point to the shape's surface.
+% It uses minimum dimensions.
+% \emph{Check that the red arrows touch the outer black surface,
+% and that the black shape is correct.}
+%
+%^^A#################################################################
+%^^A# Test bed document - internal points with minimum dimensions
+%^^A# tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\subsection*{Internal Points with Minimum Dimensions}
+
+\def\width{3cm}
+\def\height{3cm}
+
+{\tt minimum height = \height}\\
+{\tt minimum width = \width}
+
+\vspace{-3ex}
+\begin{center}
+\begin{tikzpicture}
+
+\markOrig
+
+%% The test shape
+\node at (0,0) [\testshape, draw, font={\sf \small},
+ minimum width=\width,
+ minimum height=\height,
+ ] (test) {};
+
+\def\n{20}
+\def\radius{1cm}
+\draw[dotted] (0,0) circle (\radius);
+\foreach \s in {1,...,\n}
+{
+ \draw[->, >=latex', red] ({360/\n * (\s - 1)}:\radius) -- (test);
+}
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - internal points with minimum dimensions
+%^^A# tests - end
+%^^A#################################################################
+
+% \subsubsection{Angles with Outer Separation and Minimum Dimensions}
+%
+% This tests the `connect a line at an angle' feature.
+% Different x and y outer separations and minimum dimensions are used.
+% The black surface is the shape without any separation,
+% and the outer red surface is where the outer separation surface should be.
+% \emph{Check that the blue dots are on the outer red surface,
+% and that the red shape is correct.}
+%
+%^^A#################################################################
+%^^A# Test bed document - angles with outer separation and minimum
+%^^A# dimensions tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\subsection*{Angles with Outer Separation and Minimum Dimensions}
+
+\def\angle{120}
+\def\width{2cm}
+\def\height{1cm}
+\def\testouterx{20pt}
+\def\testoutery{10pt}
+
+Marked angle = \angle\\
+{\tt outer xsep = \testouterx}\\
+{\tt outer ysep = \testoutery}\\
+{\tt minimum height = \height}\\
+{\tt minimum width = \width}
+
+\vspace{-5ex}
+\begin{center}
+\begin{tikzpicture}
+
+\markOrig
+
+%% red path where anchors should be ?
+\node at (0,0) [\testshape, draw, help lines, red,
+ minimum width=\width+2*\testouterx,
+ minimum height=\height+2*\testoutery,
+ ] (bigger) {};
+
+\node at (0,0) [\testshape, draw,
+ minimum width=\width,
+ minimum height=\height,
+ outer xsep=\testouterx,
+ outer ysep=\testoutery
+ ] (test) {};
+
+\foreach \angle in {0,5,...,355} {
+ \fill[blue] (test.\angle) circle[radius=1pt];
+}
+
+%% single angle test
+\def\angle{120}
+\draw [help lines] (test.center) -- ++(\angle:1.5cm);
+\draw[green] (test.\angle) circle[radius=2pt];
+\draw[green] (test.\angle) -- ++(3pt,3pt);
+\draw[green] (test.\angle) -- ++(-3pt,-3pt);
+\draw[green] (test.\angle) -- ++(-3pt,3pt);
+\draw[green] (test.\angle) -- ++(3pt,-3pt);
+
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - angles with outer separation and minimum
+%^^A# dimensions tests - end
+%^^A#################################################################
+%
+% \subsection{Simple Node Connections}
+%
+% This tests simple node connection.
+% \emph{Check that the centre shape is connect to the surrounding eight shapes.}
+%
+%^^A#################################################################
+%^^A# Test bed document - simple node connections tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\section*{Simple Node Connections}
+
+\begin{center}
+\begin{tikzpicture}
+\def\ra{0} \def\rb{60pt} \def\rc{120pt}
+\def\ca{0} \def\cb{100pt} \def\cc{200pt}
+
+\draw[help lines,step=20pt,dotted] (0pt,0pt) grid (\cc,\rc);
+
+\tikzset{node style/.style={ minimum width=40pt,minimum height=20pt}}
+
+\markOrig
+
+\node at (\ca,\ra) [draw, \testshape, node style] (A) {A};
+\node at (\cb,\ra) [draw, \testshape, node style] (B) {B};
+\node at (\cc,\ra) [draw, \testshape, node style] (C) {C};
+%%
+\node at (\ca,\rb) [draw, \testshape, node style] (D) {D};
+\node at (\cb,\rb) [draw, \testshape, node style] (E) {E};
+\node at (\cc,\rb) [draw, \testshape, node style] (F) {F};
+%%
+\node at (\ca,\rc) [draw, \testshape, node style] (G) {G};
+\node at (\cb,\rc) [draw, \testshape, node style] (H) {H};
+\node at (\cc,\rc) [draw, \testshape, node style] (I) {I};
+
+\draw (E) -- (F);
+\draw (E) -- (D);
+\draw (E) -- (B);
+\draw (E) -- (H);
+\draw (E) -- (G);
+\draw (E) -- (A);
+\draw (E) -- (I);
+\draw (E) -- (C);
+
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - simple node connections tests - end
+%^^A#################################################################
+%
+% \subsection{Scaling}
+%
+% This is a simple scaling test that uses minimum dimensions to draw
+% the shape at three sizes.
+% There are guide lines showing dimensions for each size.
+% \emph{Check that all of the shapes are correct.}
+%
+%^^A#################################################################
+%^^A# Test bed document - scaling tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\section*{Scaling}
+
+\def\minh{20pt}
+\def\minw{80pt}
+\def\exd{5pt}
+
+\begin{center}
+\begin{tikzpicture}
+
+\node at (0,0)
+ [\testshape, draw,
+ minimum width=\minw,
+ minimum height=\minh,
+ ] (test1) {} ;
+
+\node at (0,0)
+ [\testshape, draw, blue,
+ minimum width=\minw+1cm,
+ minimum height=\minh+1cm,
+ ] (test2) {} ;
+
+\node at (0,0)
+ [\testshape, draw, red,
+ minimum width=\minw+2cm,
+ minimum height=\minh+2cm,
+ ] (test3) {} ;
+
+\def\tgridA#1#2{
+\draw[help lines] ({0.5*(\minw+#1)+\exd},{0.5*(\minh+#1)}) -- ({-0.5*(\minw+#1)-\exd},{0.5*(\minh+#1)});
+\draw[help lines] ({0.5*(\minw+#1)+\exd},{-0.5*(\minh+#1)}) -- ({-0.5*(\minw+#1)-\exd},{-0.5*(\minh+#1)});
+\draw[help lines] ({0.5*(\minw+#1)},{0.5*(\minh+#1)+\exd}) -- ({0.5*(\minw+#1)},{-0.5*(\minh+#1)-\exd});
+\draw[help lines] ({-0.5*(\minw+#1)},{0.5*(\minh+#1)+\exd}) -- ({-0.5*(\minw+#1)},{-0.5*(\minh+#1)-\exd});
+}
+
+\begin{scope}[on background layer]
+\tgridA{0pt}{0pt}
+\tgridA{1cm}{1cm}
+\tgridA{2cm}{2cm}
+\markOrig
+\end{scope}
+
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - scaling tests - end
+%^^A#################################################################
+%
+%
+% \subsection{Package Tests}
+%
+%^^A#################################################################
+%^^A# Test bed document - package tests peamble - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\section*{Package Tests}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - package tests preamble- end
+%^^A#################################################################
+%
+% \subsubsection{Text Alignment and the Text Box}
+%
+% This verifies the operation of the text box macros.
+% All combinations of test ascenders and descenders are used.
+% It tests the package's management of the text box and the text and centre anchors.
+% The left hand shapes are standard text boxes.
+%
+% \emph{
+% Check the shape's text boxes align with the standard boxes.
+% Also that the blue centre anchor is at the yellow origin;
+% and the green text anchor is in the correct place.
+% Finally, the red cardinal anchors should be suitably located on the shapes boundary. }
+%
+%^^A#################################################################
+%^^A# Test bed document - text alignment and
+%^^A# the text box tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\subsection*{Text Alignment and the Text Box}
+
+\begin{center}
+\begin{tikzpicture}
+
+\node at (0,0)
+ [\testshape, draw
+ ] (test1) {\verb|x x|} ;
+
+\node[ \testshape, draw,
+ below of=test1,
+ node distance=1cm
+ ] (test2) {\verb|x dx|} ;
+
+\node[ \testshape, draw,
+ below of=test2, node distance=1cm
+ ] (test3) {\verb|xp x|} ;
+
+\node[ \testshape, draw,
+ below of=test3, node distance=1cm
+ ] (test4) {\verb|xp dx|} ;
+
+\allanchors{test1}{1pt}{red}
+\corneranchors{test2}{1pt}{red}
+\corneranchors{test3}{1pt}{red}
+\corneranchors{test4}{1pt}{red}
+\centeranchor{test1}{2pt}{blue}
+\centeranchor{test2}{2pt}{blue}
+\centeranchor{test3}{2pt}{blue}
+\centeranchor{test4}{2pt}{blue}
+\textanchor{test1}{1pt}{green}
+\draw[help lines,green] (test1.text) -- ++(7pt,0);
+\draw[help lines,green] (test1.text) -- ++(0,5pt);
+\textanchor{test2}{1pt}{green}
+\textanchor{test3}{1pt}{green}
+\textanchor{test4}{1pt}{green}
+
+\begin{scope}[on background layer]
+
+\markOrig
+
+\node at(4cm,0) [ rectangle, draw
+ ] (ref1) {\verb|x x|} ;
+\draw[green] (ref1.north west) -- ++(-5cm,0);
+\draw[green] (ref1.south west) -- ++(-5cm,0);
+
+\node[rectangle, draw,
+ below of=ref1, node distance=1cm
+ ] (ref2) {\verb|x dx|} ;
+\draw[green] (ref2.north west) -- ++(-5cm,0);
+\draw[green] (ref2.south west) -- ++(-5cm,0);
+
+\node[rectangle, draw,
+ below of=ref2, node distance=1cm
+ ] (ref3) {\verb|xp x|} ;
+\draw[green] (ref3.north west) -- ++(-5cm,0);
+\draw[green] (ref3.south west) -- ++(-5cm,0);
+
+\node[rectangle, draw,
+ below of=ref3, node distance=1cm
+ ] (ref4) {\verb|xp dx|} ;
+\draw[green] (ref4.north west) -- ++(-5cm,0);
+\draw[green] (ref4.south west) -- ++(-5cm,0);
+
+\end{scope}
+
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - text alignment and
+%^^A# the text box tests - end
+%^^A#################################################################
+%
+% \subsubsection{Inner, Outer and Angle for Shape Off Origin}
+%
+% This is a test for the correct operation of the package's |\anchorborder|
+% with off-origin shapes.
+% In particular, its use of the |\pgf@relevantforpicturesizefalse|
+% and |\pgftransformreset| commands.
+%
+% \emph{Check that the outer box `closely' contains the picture,
+% and that the green arrows and points are on the shape's boundary.}
+%
+%^^A#################################################################
+%^^A# Test bed document - inner, outer and angle for shape off
+%^^A# origin tests - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+%%--------------------------------------------------------
+\subsection*{Inner, Outer and Angle for Shape Off Origin}
+
+The box should closely contain picture if {\tt anchorborder} is working correctly.
+\bigskip
+
+\begin{center}
+\begin{tikzpicture}[framed]
+
+\markOrigC{black}
+\draw (2pt,0) node[anchor=west]{\tt \tiny origin};
+
+%% The test shape
+\node at (70pt,40pt)
+ [\testshape, draw,
+ red, minimum width=60pt, minimum height=40pt
+ ] (node) {};
+
+%% outer test line
+\path (node);
+\pgfgetlastxy{\macrox}{\macroy}
+\coordinate (Xout) at (\macrox+20pt,\macroy+40pt);
+
+\draw (Xout) circle(3pt);
+\draw [help lines] (node.center) -- (Xout);
+\draw [->, >=latex',green] (Xout) -- (node); % <<<
+
+%% inner test line
+\path (node);
+\pgfgetlastxy{\macrox}{\macroy}
+\coordinate (Xin) at (\macrox-5pt,\macroy-5pt);
+
+\draw (Xin) circle(3pt);
+\draw [help lines,shorten >=-1cm] (node.center) -- (Xin);
+\draw [->, >=latex',green] (Xin) -- (node); % <<<
+
+%% test angle
+\def\angle{120}
+\draw [help lines] (node.center) -- ++(\angle:1.5cm);
+\draw[green] (node.\angle) circle[radius=2pt]; % <<<
+
+\end{tikzpicture}
+\end{center}
+
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - inner, outer and angle for shape off
+%^^A# origin tests - end
+%^^A#################################################################
+%
+%^^A#################################################################
+%^^A# Test bed document - epilogue - start
+%^^A#################################################################
+%\iffalse
+%<*testbed>
+\end{document}
+%</testbed>
+%\fi
+%^^A#################################################################
+%^^A# Test bed document - epilogue - end
+%^^A#################################################################
+%
+% \section{Reuse}
+%
+% The |testsample.tex| file can be adapted to test other shapes developed using
+% the {\sf makeshape} package. Find the following section:
+%
+% \begin{verbatim}
+% %%-------------------------------------------------
+% %% file and shape being tested
+% \def\filename{sampleshape} % file being tested
+% \input{\filename} % It is a .tex
+% %%\usepackage{\filename} % It is a .sty
+% \def\testshape{sample} % shape being tested
+% %%-------------------------------------------------
+% \end{verbatim}
+% Then change |sampleshape| to the new file name, and |sample| to the particular shape's name.
+% Choose |\input| or |\usepackage| dependinmg on the file type.
+%
+% The report's ending `Package Test' section can be deleted, and additional shape specific tests added.
+% The file's {\sf makeshape} package oriented name
+% and its heading comment should probably be changed as well.
+%
+%^^A===========================================================================
+%^^A References
+%^^A===========================================================================
+%
+% \begin{thebibliography}{9}
+% \raggedright
+%
+% \bibitem{makeshape}
+% Adrian P. Robson,
+% \emph{The makeshape package
+% and a method for creating custom shapes in PGF}, 2013.
+%
+% \bibitem{pgfMan}
+% Till Tantau, \emph{The TikZ and PGF Packages, Manual for version 2.10},
+% 2010.
+% Available as
+% \href{http://mirrors.ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf}
+% {\tt pgfmanual.pdf}
+% from the \href{http://ctan.org}{Comprehensive TeX Archive Network}.
+%
+% \end{thebibliography}
+%
+%^^A===========================================================================
+%^^A Print Changes
+%^^A
+%^^A -> Run pdfLaTeX ontesting.dtx
+%^^A makeindex -s gglo.ist -o ontesting.gls ontesting.glo
+%^^A pdfLaTeX ontesting.dtx
+%^^A===========================================================================
+%
+%^^A \PrintChanges
+%
+\endinput
+
diff --git a/graphics/pgf/contrib/makeshape/ontesting.pdf b/graphics/pgf/contrib/makeshape/ontesting.pdf
new file mode 100644
index 0000000000..c007b430aa
--- /dev/null
+++ b/graphics/pgf/contrib/makeshape/ontesting.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/makeshape/testsample.pdf b/graphics/pgf/contrib/makeshape/testsample.pdf
new file mode 100644
index 0000000000..fe589db561
--- /dev/null
+++ b/graphics/pgf/contrib/makeshape/testsample.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/matrix-skeleton/LICENSE b/graphics/pgf/contrib/matrix-skeleton/LICENSE
new file mode 100644
index 0000000000..cf5d56f156
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/LICENSE
@@ -0,0 +1,5 @@
+Copyright (c) 2013-2019, Nicolas Dudebout <nicolas.dudebout@gatech.edu>
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/graphics/pgf/contrib/matrix-skeleton/README.md b/graphics/pgf/contrib/matrix-skeleton/README.md
new file mode 100644
index 0000000000..a084f16689
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/README.md
@@ -0,0 +1,34 @@
+`matrix.skeleton` is a `PGF/TikZ` library that simplifies working with multiple matrix nodes.
+To do so, `matrix.skeleton` correctly aligns groups of nodes with the content of the whole matrix.
+Furthermore, `matrix.skeleton` provides rows and columns for easy styling.
+
+For example, the following picture is easily typeset:
+
+![Example](example.pdf)
+
+with this simple code:
+
+```TeX
+\documentclass[tikz]{standalone}
+
+\usetikzlibrary{matrix.skeleton}
+
+\begin{document}
+ \begin{tikzpicture}
+ \matrix (m) [matrix of math nodes,
+ style odd rows on layer={background}{fill=black!25}] {
+ 1 & \frac{\frac{16}{2}}{4} & 3 \\
+ 4.0000001 & 5 & 6 \\
+ 7 & 8 & 9 \\
+ 10 & 11 & 12 \\
+ 13 & 14 & 15 \\
+ };
+ \fitandstyle{(m-cell-1-1) (m-cell-2-2)}{draw=red, fill=red!25, opacity=0.5}
+ \end{tikzpicture}
+\end{document}
+```
+
+More information and examples are available in [the manual](manual.pdf).
+
+Author: Nicolas Dudebout
+License: ISC
diff --git a/graphics/pgf/contrib/matrix-skeleton/example.pdf b/graphics/pgf/contrib/matrix-skeleton/example.pdf
new file mode 100644
index 0000000000..1bf57b0b62
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/example.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/matrix-skeleton/example.tex b/graphics/pgf/contrib/matrix-skeleton/example.tex
new file mode 100644
index 0000000000..eff0bd0d14
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/example.tex
@@ -0,0 +1,17 @@
+\documentclass[tikz]{standalone}
+
+\usetikzlibrary{matrix.skeleton}
+
+\begin{document}
+ \begin{tikzpicture}
+ \matrix (m) [matrix of math nodes,
+ style odd rows on layer={background}{fill=black!25}] {
+ 1 & \frac{\frac{16}{2}}{4} & 3 \\
+ 4.0000001 & 5 & 6 \\
+ 7 & 8 & 9 \\
+ 10 & 11 & 12 \\
+ 13 & 14 & 15 \\
+ };
+ \fitandstyle{(m-cell-1-1) (m-cell-2-2)}{draw=red, fill=red!25, opacity=0.5}
+ \end{tikzpicture}
+\end{document}
diff --git a/graphics/pgf/contrib/matrix-skeleton/manual.pdf b/graphics/pgf/contrib/matrix-skeleton/manual.pdf
new file mode 100644
index 0000000000..878e7af24a
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/matrix-skeleton/manual.tex b/graphics/pgf/contrib/matrix-skeleton/manual.tex
new file mode 100644
index 0000000000..14ee41c69a
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/manual.tex
@@ -0,0 +1,397 @@
+\documentclass{scrartcl}
+
+\usepackage{tikz}
+\usetikzlibrary{matrix.skeleton}
+
+\usepackage[justification=centering,labelfont={sf,bf,up},labelsep=period,font=small]{caption}
+\captionsetup[figure]{position=bottom,singlelinecheck=false}
+\usepackage[font=small,justification=centering]{subcaption}
+\usepackage{float}
+\floatstyle{komabelow}
+\restylefloat{figure}
+
+\usepackage{xspace}
+
+\usepackage{hyperref}
+\hypersetup{ colorlinks=true
+ , linkcolor=blue!75
+ , citecolor=black
+ , urlcolor=blue!75
+ }
+
+\usepackage[noabbrev, capitalize]{cleveref}
+
+\tikzset{highlight/.style={draw=#1!75, fill=#1!25, rounded corners=1pt}}
+\newcommand\code\texttt
+\newcommand{\TikZ}{Ti\textit{k}Z\xspace}
+
+\title{\texttt{matrix.skeleton}'s Manual}
+\author{Nicolas Dudebout}
+\date{}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+The \TikZ \code{matrix} library places nodes on a grid.
+However, this grid is discarded after the nodes have been placed.
+As a result, certain constructions involving multiple nodes become cumbersome.
+The following two examples highlight some of the difficulties.
+
+\subsection{Alignment Issues with \code{fit}}
+
+The \code{fit} library is used to highlight a subset of nodes in a matrix.
+If all the nodes in the matrix have the same dimension, as in~\cref{fig:highlighting_identical_dimensions}, \code{fit} produces the desired output.
+
+\begin{figure}[h]
+\centering
+
+\begin{subfigure}{0.45\textwidth}
+\centering
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, column sep = 3pt, row sep = 3pt] {
+1 & 2 \\
+3 & 4 \\
+5 & 6 \\
+};
+\end{tikzpicture}
+\caption{Input matrix}
+\end{subfigure}
+%
+\begin{subfigure}{0.45\textwidth}
+\centering
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, column sep = 3pt, row sep = 3pt] {
+1 & 2 \\
+3 & 4 \\
+5 & 6 \\
+};
+
+\fitandstyle[background]{(m-1-1) (m-2-1)}{highlight = yellow}
+\fitandstyle[background]{(m-1-2) (m-2-2)}{highlight = red}
+\fitandstyle[background]{(m-3-1) (m-3-2)}{highlight = green}
+\end{tikzpicture}
+\caption{Desired output and result with \code{fit}}
+\end{subfigure}
+
+\caption{Highlighting in a matrix with nodes of identical dimensions}
+\label{fig:highlighting_identical_dimensions}
+\end{figure}
+
+However, if the nodes have different heights and widths, as illustrated in~\cref{fig:highlighting_different_dimensions}, some alignment issues arise.
+
+\begin{figure}[h]
+\centering
+\begin{subfigure}{0.3\textwidth}
+\centering
+
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, column sep = 3pt, row sep = 3pt] {
+1 & \frac{\frac{16}{4}}{1 + \frac{2}{2}} \\
+2.999999 & 4 \\
+5 & 6.000001 \\
+};
+\end{tikzpicture}
+\caption{Input matrix}
+\end{subfigure}
+%
+\begin{subfigure}{0.3\textwidth}
+\centering
+
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, column sep = 3pt, row sep = 3pt, label skeleton] {
+1 & \frac{\frac{16}{4}}{1 + \frac{2}{2}} \\
+2.999999 & 4 \\
+5 & 6.000001 \\
+};
+
+\fitandstyle[background]{(m-cell-1-1) (m-cell-2-1)}{highlight = yellow}
+\fitandstyle[background]{(m-cell-1-2) (m-cell-2-2)}{highlight = red}
+\fitandstyle[background]{(m-cell-3-1) (m-cell-3-2)}{highlight = green}
+\end{tikzpicture}
+\caption{Desired output}
+\end{subfigure}
+%
+\begin{subfigure}{0.3\textwidth}
+\centering
+
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, column sep = 3pt, row sep = 3pt] {
+1 & \frac{\frac{16}{4}}{1 + \frac{2}{2}} \\
+2.999999 & 4 \\
+5 & 6.000001 \\
+};
+
+\fitandstyle[background]{(m-1-1) (m-2-1)}{highlight = yellow}
+\fitandstyle[background]{(m-1-2) (m-2-2)}{highlight = red}
+\fitandstyle[background]{(m-3-1) (m-3-2)}{highlight = green}
+\end{tikzpicture}
+\caption{Result with \code{fit}}
+\end{subfigure}
+
+\caption{Highlighting in a matrix with nodes of different dimensions}
+\label{fig:highlighting_different_dimensions}
+\end{figure}
+
+These problems can be addressed using \code{minimum width} and \code{minimum height}.
+However, adjusting manually these parameters in every matrix is a waste of time.
+
+The \code{matrix.skeleton} library provides a clean solution through the use of nodes called~\code{cells}.
+These \code{cells} and other skeleton nodes are described in~\cref{sec:skeleton}.
+
+\subsection{Working with Rows and Columns}
+
+The readability of a matrix can sometimes be improved by adding a background on every other row.
+This simple task is not easily achievable with \code{matrix} alone.
+The style \code{every odd column} only affects the nodes of the said columns.
+There is no real column object to work with.
+
+The \code{matrix.skeleton} library provides \TikZ styles to achieve this goal easily.
+These styles are described in~\cref{sec:styling}
+
+\section{Skeleton}
+\label{sec:skeleton}
+
+\subsection{Nodes}
+
+\code{matrix.skeleton} works by positioning a set of nodes to recreate the \code{matrix} grid.
+The eight types of such nodes are illustrated in~\cref{fig:skeleton_nodes}.
+
+\begin{figure}[h]
+\centering
+\begin{subfigure}{0.3\textwidth}
+\centering
+\begin{tikzpicture}
+\matrix (m) [draw, matrix of nodes, column sep=10pt, row sep=10pt, label skeleton] {
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9 \\
+};
+
+\fitandstyle[background]{(m-cell-1-1)}{fill=yellow!30}
+\fitandstyle[background]{(m-row-2)}{fill=red!25}
+\fitandstyle[background]{(m-column-3)}{fill=green!25, opacity=.75}
+\end{tikzpicture}
+\caption{\textcolor{yellow!80!orange}{Cell}, \textcolor{red!50}{row}, and \textcolor{green!60}{column}}
+\end{subfigure}
+%
+\begin{subfigure}{0.3\textwidth}
+\centering
+\begin{tikzpicture}
+\matrix (m) [draw, matrix of nodes, column sep=10pt, row sep=10pt, label skeleton] {
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9 \\
+};
+
+\fitandstyle[background]{(m-inter-row-1)}{fill=red!25}
+\fitandstyle[background]{(m-inter-column-2)}{fill=green!25, opacity=.75}
+\end{tikzpicture}
+\caption{\textcolor{red!50}{Inter-row} and \textcolor{green!60}{inter-column}}
+\end{subfigure}
+%
+\begin{subfigure}{0.3\textwidth}
+\centering
+\begin{tikzpicture}
+\matrix (m) [draw, matrix of nodes, column sep=10pt, row sep=10pt, label skeleton] {
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9 \\
+};
+\fitandstyle[background]{(m-tiling-cell-1-1)}{fill=yellow!30}
+\fitandstyle[background]{(m-tiling-row-2)}{fill=red!25}
+\fitandstyle[background]{(m-tiling-column-3)}{fill=green!25, opacity=.75}
+\end{tikzpicture}
+\caption{\textcolor{yellow!80!orange}{Tiling cell}, \textcolor{red!50}{tiling row}, and \textcolor{green!60}{tiling column}}
+\end{subfigure}
+\caption{Skeleton nodes}
+\label{fig:skeleton_nodes}
+\end{figure}
+
+\subsection{Using \code{matrix.skeleton}}
+
+The recommended way of using \code{matrix.skeleton} is through \TikZ.
+First, load the library with:
+\begin{verbatim}
+ \usetikzlibrary{matrix.skeleton}
+\end{verbatim}
+Then add an option to your matrix:
+\begin{verbatim}
+ \matrix (m) [label skeleton] {...};
+\end{verbatim}
+This creates a set of nodes that can be used for styling.
+For example, the nodes illustrated in~\cref{fig:skeleton_nodes} are named: \code{m-cell-1-1}, \code{m-row-2}, \code{m-column-3}, \code{m-inter-row-1}, \code{m-inter-column-2}, \code{m-tiling-cell-1}, \code{m-tiling-row-2}, and \code{m-tiling-column-3}.
+
+\section{Styling}
+\label{sec:styling}
+
+The skeleton nodes are PGF nodes not meant to be styled.
+Styles should be applied to nodes whose shapes depend on the skeleton ones.
+
+\subsection{Macros}
+
+Styling in \code{matrix.skeleton} is done with the~\code{fit} library.
+The following macro creates a \code{fit} node with the specified style:
+\begin{verbatim}
+ \fitandstyle{(m-cell-1-1) (m-cell-2-2)}{draw=red};
+\end{verbatim}
+
+It takes an optional argument to place the node in a \code{pgfonlayer} environment:
+\begin{verbatim}
+ \fitandstyle[background]{(m-cell-1-1) (m-cell-2-2)}{fill=red};
+\end{verbatim}
+
+\subsection{\TikZ \code{matrix} Options}
+
+Common styling options are also provided as \TikZ options.
+These options call~\code{label skeleton} before styling the appropriate nodes.
+They take the following form:
+\begin{verbatim}
+ \matrix (m) [style odd rows = {draw=red}] {...};
+\end{verbatim}
+
+\begin{verbatim}
+ \matrix (m) [style odd tiling rows = {draw=red}] {...};
+\end{verbatim}
+
+\begin{verbatim}
+ \matrix (m) [style grid = {draw}] {...};
+\end{verbatim}
+
+\begin{verbatim}
+ \matrix (m) [style tiling grid = {draw}] {...};
+\end{verbatim}
+
+All of these options have an \code{on layer} variant taking the following form:
+\begin{verbatim}
+ \matrix (m) [style odd rows on layer = {background}{fill=red}] {...};
+\end{verbatim}
+
+\section{Examples}
+
+The following examples illustrate the styling capabilities offered by \code{matrix.skeleton}.
+
+\subsection{Grid}
+
+\begin{figure}[h]
+\centering
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, style contour = {draw, very thick}, style grid = {draw, thin}] {
+1 & \frac{\frac{16}{4}}{1 + \frac{2}{2}} & 3 \\
+3.999999 & 5 & 6 \\
+7 & 8.000001 & 3 + 3 + 3 \\
+};
+\end{tikzpicture}
+\end{figure}
+
+\begin{verbatim}
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, style contour = {draw, very thick},
+ style grid = {draw, thin}] {
+1 & \frac{\frac{16}{4}}{1 + \frac{2}{2}} & 3 \\
+3.999999 & 5 & 6 \\
+7 & 8.000001 & 3 + 3 + 3 \\
+};
+\end{tikzpicture}
+\end{verbatim}
+
+\subsection{Rows}
+
+\begin{figure}[h]
+\centering
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, row sep = 10pt, style odd rows on layer={background}{fill=green!25}, style even rows on layer={background}{fill=yellow!30}] {
+1 & \frac{\frac{16}{4}}{1 + \frac{2}{2}} & 3 \\
+3.999999 & 5 & 6 \\
+7 & 8.000001 & 3 + 3 + 3 \\
+};
+
+\fitandstyle{(m-inter-row-1)}{fill=red!25}
+\fitandstyle{(m-inter-row-2)}{fill=red!25}
+\end{tikzpicture}
+\end{figure}
+
+\begin{verbatim}
+\begin{tikzpicture}
+\matrix (m) [matrix of math nodes, row sep = 10pt,
+ style odd rows on layer={background}{fill=green!25},
+ style even rows on layer={background}{fill=yellow!30}] {
+1 & \frac{\frac{16}{4}}{1 + \frac{2}{2}} & 3 \\
+3.999999 & 5 & 6 \\
+7 & 8.000001 & 3 + 3 + 3 \\
+};
+
+\fitandstyle{(m-inter-row-1)}{fill=red!25}
+\fitandstyle{(m-inter-row-2)}{fill=red!25}
+\end{tikzpicture}
+\end{verbatim}
+
+\subsection{Checker Board}
+
+This example is inspired by the following \href{http://tex.stackexchange.com}{\TeX{} - \LaTeX{} Stack Exchange} question: \href{http://tex.stackexchange.com/questions/14061/how-can-i-set-the-background-color-of-the-rows-and-columns-of-a-matrix-node-in-t}{How can I set the background color of the rows and columns of a matrix node in Tikz?}
+
+\begin{figure}[h]
+\centering
+\begin{tikzpicture}
+\matrix (m) [draw, matrix of nodes, row sep=2mm, column sep=1mm, nodes={draw, thick, circle, inner sep=1pt}, label skeleton] {
+ & 1 & &[2mm]|[gray]|1\\
+ & & 2 &|[gray]|2\\
+ |[gray]|2 & & &|[gray]|2\\[4mm]
+ 3 & & & 3\\
+};
+\foreach \row in {1, ..., 4} {
+ \foreach \col in {1, ..., 4} {
+ \pgfmathparse{Mod(\row + \col, 2) ? "red!25" : "yellow!30"}
+ \colorlet{squarebg}{\pgfmathresult}
+ \fitandstyle[background]{(m-tiling-cell-\row-\col)}{fill = squarebg}
+ }
+}
+\end{tikzpicture}
+\end{figure}
+
+\newpage
+
+\begin{verbatim}
+\begin{tikzpicture}
+\matrix (m) [draw, matrix of nodes, row sep=2mm, column sep=1mm,
+ nodes={draw, thick, circle, inner sep=1pt}, label skeleton] {
+ & 1 & &[2mm]|[gray]|1\\
+ & & 2 &|[gray]|2\\
+ |[gray]|2 & & &|[gray]|2\\[4mm]
+ 3 & & & 3\\
+};
+\foreach \row in {1, ..., 4} {
+ \foreach \col in {1, ..., 4} {
+ \pgfmathparse{Mod(\row + \col, 2) ? "red!25" : "yellow!30"}
+ \colorlet{squarebg}{\pgfmathresult}
+ \fitandstyle[background]{(m-tiling-cell-\row-\col)}{fill = squarebg}
+ }
+}
+\end{tikzpicture}
+\end{verbatim}
+
+\section{Internals}
+
+\code{matrix.skeleton} was heavily inspired by \href{http://tex.stackexchange.com/users/86/andrew-stacey}{Andrew Stacey}'s \code{matrixcells} \LaTeX{} package.
+It has three distinctive features.
+First, it works with any \code{anchor}.
+Second, it provides finer control with respect to \code{row sep}, \code{column sep}, and \code{inner sep}.
+Third, the skeleton node positioning relies only on \TeX{} and PGF, not on \LaTeX{} or \TikZ.
+
+\code{matrixcells} properly aligns its \code{cells} when the node \code{anchor} is \code{base}.
+However, when the alignment is different it runs into problems, as exposed in the following \href{http://tex.stackexchange.com}{\TeX{} - \LaTeX{} Stack Exchange} question: \href{http://tex.stackexchange.com/questions/128045/matrixcells-problem-with-the-y-axis-only}{Matrixcells problem with the y-axis only}.
+This shortcoming is the result of some loss of information in \code{pgfmodulematrix.code.tex}.
+A dimension used during the placement of nodes is overwritten.
+Therefore, this information is not available to build the grid.
+In \code{matrixcells}, this lost dimension is reconstructed as the average of two other dimensions.
+This method only gives the right dimension when the nodes are anchored at \code{base}.
+To always get proper alignment, the~\code{pgfmodulematrix.code.tex} macro erasing the dimension was rewritten.
+Following \href{http://tex.stackexchange.com/users/3235/percusse}{\code{@percusse}}'s recommendation this change is transparent to the user and does not require updating PGF/\TikZ.
+
+\code{matrixcells} only provides \code{cells} corresponding the \code{tiling-cells} in \code{matrix.skeleton}.
+This tiling behavior is sometimes desired.
+However, it can result in unexpected behaviors when: using a non-base \code{anchor}, using \code{row sep} or \code{column sep}, or when working on boundary nodes.
+
+\end{document}
diff --git a/graphics/pgf/contrib/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex b/graphics/pgf/contrib/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex
new file mode 100644
index 0000000000..b031338eb3
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/pgflibrarymatrix.skeleton.code.tex
@@ -0,0 +1,330 @@
+\usepgfmodule{matrix}
+
+\def\pgfmatrixlabelskeleton{
+ \let\pgf@matrix@compute@origin\pgf@matrix@skeleton@compute@origin
+ \let\pgf@matrix@shift@nodes@initial\pgf@matrix@skeleton@shift@nodes@initial
+ \let\pgf@end@matrix\pgf@end@matrix@skeleton
+}
+
+\expandafter\def\expandafter\pgf@end@matrix@skeleton\expandafter{\pgf@end@matrix \pgf@matrix@create@skeleton}%
+
+% Creates the skeleton
+
+% orig contains the upper left corner of the different boxes
+
+\def\pgf@matrix@create@skeleton{%
+ \xdef\pgf@matrix@skel@innerxsep{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \xdef\pgf@matrix@skel@innerysep{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \pgfscope%
+ \pgfgetlastxy\ck@shift@x\ck@shift@y
+ \pgftransformshift{\pgfpoint{\ck@shift@x}{\ck@shift@y}}%
+ \pgfset{inner sep=0pt}%
+ \pgf@matrix@skeleton@create@cells%
+ \pgf@matrix@skeleton@create@tiling@cells%
+ \pgf@matrix@skeleton@create@rows%
+ \pgf@matrix@skeleton@create@tiling@rows%
+ \pgf@matrix@skeleton@create@columns%
+ \pgf@matrix@skeleton@create@tiling@columns%
+ \endpgfscope%
+}
+
+\def\pgf@matrix@skeleton@create@cells{%
+ \newcount\pgf@matrix@skel@next@row
+ \foreach \pgf@matrix@skel@row in {1, ..., \pgfmatrixcurrentrow} {%
+ \pgf@matrix@skel@next@row=\pgf@matrix@skel@row
+ \advance\pgf@matrix@skel@next@row by 1
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\csname pgf@matrix@origy\pgf@matrix@skel@row\endcsname + \csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname - \csname pgf@matrix@miny\pgf@matrix@skel@row\endcsname - \pgflinewidth}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height - \csname pgf@matrix@row@sep@\the\pgf@matrix@skel@next@row\endcsname}
+ \foreach \pgf@matrix@skel@col in {1, ..., \pgf@matrix@numberofcolumns} {%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@maxx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname - \pgflinewidth}%
+ \ifnum\pgf@matrix@skel@col>1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\pgf@matrix@skel@origx + \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width - \pgflinewidth - \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \fi%
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-cell-\pgf@matrix@skel@row-\pgf@matrix@skel@col}{}%
+ }
+ }
+ }
+}
+
+\def\pgf@matrix@skeleton@create@tiling@cells{%
+ \newcount\pgf@matrix@skel@next@col
+ \newcount\pgf@matrix@skel@next@row
+ \foreach \pgf@matrix@skel@row in {1, ..., \pgfmatrixcurrentrow} {%
+ \pgf@matrix@skel@next@row=\pgf@matrix@skel@row
+ \advance\pgf@matrix@skel@next@row by 1
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\csname pgf@matrix@origy\pgf@matrix@skel@row\endcsname + \csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname - \csname pgf@matrix@miny\pgf@matrix@skel@row\endcsname - \pgflinewidth}%
+ \ifnum\pgf@matrix@skel@row=1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\pgf@matrix@skel@origy + \pgf@matrix@skel@innerysep}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height + \pgf@matrix@skel@innerysep}%
+ \fi
+ \ifnum\pgf@matrix@skel@row=\pgfmatrixcurrentrow\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height + \pgf@matrix@skel@innerysep - \pgfmatrixrowsep}%
+ \fi
+ \ifnum\pgf@matrix@skel@row>1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\pgf@matrix@skel@origy + 0.5 * \csname pgf@matrix@row@sep@\pgf@matrix@skel@row\endcsname}
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height + 0.5 * \csname pgf@matrix@row@sep@\pgf@matrix@skel@row\endcsname}
+ \fi
+ \ifnum\pgf@matrix@skel@row<\pgfmatrixcurrentrow\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height - 0.5 * \csname pgf@matrix@row@sep@\the\pgf@matrix@skel@next@row\endcsname}
+ \fi
+ \foreach \pgf@matrix@skel@col in {1, ..., \pgf@matrix@numberofcolumns} {%
+ \pgf@matrix@skel@next@col=\pgf@matrix@skel@col
+ \advance\pgf@matrix@skel@next@col by 1
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@maxx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname- \pgflinewidth}%
+ \ifnum\pgf@matrix@skel@col=1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\pgf@matrix@skel@origx - \pgf@matrix@skel@innerxsep}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width + \pgf@matrix@skel@innerxsep}%
+ \fi%
+ \ifnum\pgf@matrix@skel@col=\pgf@matrix@numberofcolumns\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width + \pgf@matrix@skel@innerxsep}%
+ \fi%
+ \ifnum\pgf@matrix@skel@col<\pgf@matrix@numberofcolumns%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width + 0.5 * \csname pgf@matrix@column@sep@\the\pgf@matrix@skel@next@col\endcsname}%
+ \fi%
+ \ifnum\pgf@matrix@skel@col>1%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\pgf@matrix@skel@origx + 0.5 * \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width - 0.5 * \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \fi%
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-tiling-cell-\pgf@matrix@skel@row-\pgf@matrix@skel@col}{}%
+ }
+ }
+ }
+}
+
+\def\pgf@matrix@skeleton@create@rows{%
+ \newcount\pgf@matrix@skel@next@row%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@origx\the\pgf@matrix@numberofcolumns\endcsname + \csname pgf@matrix@maxx\the\pgf@matrix@numberofcolumns\endcsname - \pgflinewidth}%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx1\endcsname + \csname pgf@matrix@minx1\endcsname}%
+ \foreach \pgf@matrix@skel@row in {1, ..., \pgfmatrixcurrentrow} {%
+ \pgf@matrix@skel@next@row=\pgf@matrix@skel@row\relax%
+ \advance\pgf@matrix@skel@next@row by1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\csname pgf@matrix@origy\pgf@matrix@skel@row\endcsname + \csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname - \csname pgf@matrix@miny\pgf@matrix@skel@row\endcsname - \csname pgf@matrix@row@sep@\the\pgf@matrix@skel@next@row\endcsname - \pgflinewidth}%
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-row-\pgf@matrix@skel@row}{}%
+ }
+ \ifnum\pgf@matrix@skel@row<\pgfmatrixcurrentrow\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\csname pgf@matrix@origy\the\pgf@matrix@skel@next@row\endcsname + \csname pgf@matrix@maxy\the\pgf@matrix@skel@next@row\endcsname + \csname pgf@matrix@row@sep@\the\pgf@matrix@skel@next@row\endcsname + 0.5 * \pgflinewidth}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\csname pgf@matrix@row@sep@\the\pgf@matrix@skel@next@row\endcsname}%
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-inter-row-\pgf@matrix@skel@row}{}%
+ }
+ \fi%
+ }
+}
+
+\def\pgf@matrix@skeleton@create@tiling@rows{%
+ \newcount\pgf@matrix@skel@next@row%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@origx\the\pgf@matrix@numberofcolumns\endcsname + \csname pgf@matrix@maxx\the\pgf@matrix@numberofcolumns\endcsname - \pgflinewidth + 2 * \pgf@matrix@skel@innerxsep}%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx1\endcsname + \csname pgf@matrix@minx1\endcsname - \pgf@matrix@skel@innerxsep}%
+ \foreach \pgf@matrix@skel@row in {1, ..., \pgfmatrixcurrentrow} {%
+ \pgf@matrix@skel@next@row=\pgf@matrix@skel@row\relax%
+ \advance\pgf@matrix@skel@next@row by1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\csname pgf@matrix@origy\pgf@matrix@skel@row\endcsname + \csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\csname pgf@matrix@maxy\pgf@matrix@skel@row\endcsname - \csname pgf@matrix@miny\pgf@matrix@skel@row\endcsname - \csname pgf@matrix@row@sep@\the\pgf@matrix@skel@next@row\endcsname - \pgflinewidth}%
+ \ifnum\pgf@matrix@skel@row=1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\pgf@matrix@skel@origy + \pgf@matrix@skel@innerysep}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height + \pgf@matrix@skel@innerysep}%
+ \fi
+ \ifnum\pgf@matrix@skel@row=\pgfmatrixcurrentrow\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height + \pgf@matrix@skel@innerysep}%
+ \fi
+ \ifnum\pgf@matrix@skel@row>1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\pgf@matrix@skel@origy + 0.5 * \csname pgf@matrix@row@sep@\pgf@matrix@skel@row\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height + 0.5 * \csname pgf@matrix@row@sep@\pgf@matrix@skel@row\endcsname}%
+ \fi%
+ \ifnum\pgf@matrix@skel@row<\pgfmatrixcurrentrow\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\pgf@matrix@skel@height + 0.5 * \csname pgf@matrix@row@sep@\the\pgf@matrix@skel@next@row\endcsname}%
+ \fi%
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-tiling-row-\pgf@matrix@skel@row}{}%
+ }
+ }
+}
+
+\def\pgf@matrix@skeleton@create@columns{%
+ \newcount\pgf@matrix@skel@prev@col%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\csname pgf@matrix@origy1\endcsname + \csname pgf@matrix@maxy1\endcsname - \csname pgf@matrix@miny\the\pgfmatrixcurrentrow\endcsname - \pgfmatrixrowsep - \pgflinewidth}%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\csname pgf@matrix@origy1\endcsname + \csname pgf@matrix@maxy1\endcsname}%
+ \foreach \pgf@matrix@skel@col in {1, ..., \pgf@matrix@numberofcolumns} {%
+ \ifnum\pgf@matrix@skel@col>1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@maxx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname - \pgflinewidth}%
+ \else%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@maxx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname - \pgflinewidth}%
+ \fi%
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-column-\pgf@matrix@skel@col}{}%
+ }
+ \ifnum\pgf@matrix@skel@col>1\relax%
+ \pgf@matrix@skel@prev@col=\pgf@matrix@skel@col\relax%
+ \advance\pgf@matrix@skel@prev@col by-1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx\the\pgf@matrix@skel@prev@col\endcsname + \csname pgf@matrix@maxx\the\pgf@matrix@skel@prev@col\endcsname - 0.5 * \pgflinewidth}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-inter-column-\the\pgf@matrix@skel@prev@col}{}%
+ }
+ \fi%
+ }
+}
+
+\def\pgf@matrix@skeleton@create@tiling@columns{%
+ \newcount\pgf@matrix@skel@next@col%
+ \pgfmathsetmacro{\pgf@matrix@skel@height}{\csname pgf@matrix@origy1\endcsname + \csname pgf@matrix@maxy1\endcsname - \csname pgf@matrix@miny\the\pgfmatrixcurrentrow\endcsname - \pgfmatrixrowsep - \pgflinewidth + 2 * \pgf@matrix@skel@innerysep}%
+ \pgfmathsetmacro{\pgf@matrix@skel@origy}{\csname pgf@matrix@origy1\endcsname + \csname pgf@matrix@maxy1\endcsname + \pgf@matrix@skel@innerysep}%
+ \foreach \pgf@matrix@skel@col in {1, ..., \pgf@matrix@numberofcolumns} {%
+ \pgf@matrix@skel@next@col=\pgf@matrix@skel@col\relax%
+ \advance\pgf@matrix@skel@next@col by1\relax%
+ \ifnum\pgf@matrix@skel@col>1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@maxx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname - \pgflinewidth}%
+ \else%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\csname pgf@matrix@origx\pgf@matrix@skel@col\endcsname + \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\csname pgf@matrix@maxx\pgf@matrix@skel@col\endcsname - \csname pgf@matrix@minx\pgf@matrix@skel@col\endcsname - \pgflinewidth}%
+ \fi%
+ \ifnum\pgf@matrix@skel@col=1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\pgf@matrix@skel@origx - \pgf@matrix@skel@innerxsep}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width + \pgf@matrix@skel@innerxsep}%
+ \fi
+ \ifnum\pgf@matrix@skel@col=\pgf@matrix@numberofcolumns\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width + \pgf@matrix@skel@innerxsep}%
+ \fi
+ \ifnum\pgf@matrix@skel@col>1\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@origx}{\pgf@matrix@skel@origx - 0.5 * \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width + 0.5 * \csname pgf@matrix@column@sep@\pgf@matrix@skel@col\endcsname}%
+ \fi
+ \ifnum\pgf@matrix@skel@col<\pgf@matrix@numberofcolumns\relax%
+ \pgfmathsetmacro{\pgf@matrix@skel@width}{\pgf@matrix@skel@width + 0.5 * \csname pgf@matrix@column@sep@\the\pgf@matrix@skel@next@col\endcsname}%
+ \fi
+ {%
+ \pgfset{minimum width=\pgf@matrix@skel@width, minimum height=\pgf@matrix@skel@height}%
+ \pgftransformshift{\pgfpoint{\pgf@matrix@skel@origx pt}{\pgf@matrix@skel@origy pt}}%
+ \pgfnode{rectangle}{north west}{}{\pgf@matrix@par@name-tiling-column-\pgf@matrix@skel@col}{}%
+ }
+ }
+}
+
+% Compute the real positions of the origins
+
+% We must now compute the real positions of the origins of all the
+% small pictures. To this end, we need to compute prefix sums. After
+% the procedure is done, the origx and the origy will contain the origin
+% positions.
+
+\def\pgf@matrix@skeleton@compute@origin{%
+ %
+ % Inverse prefix sum on the vertical positions
+ %
+ {%
+ \ifnum\pgfmatrixcurrentrow>0\relax%
+ \expandafter\gdef\csname pgf@matrix@origy\the\pgfmatrixcurrentrow\endcsname{0pt}%
+ \fi%
+ \c@pgf@counta=\pgfmatrixcurrentrow\relax%
+ \loop%
+ \ifnum\c@pgf@counta>1\relax%
+ \pgf@y=\csname pgf@matrix@origy\the\c@pgf@counta\endcsname\relax%
+ \advance\pgf@y by\csname pgf@matrix@maxy\the\c@pgf@counta\endcsname\relax
+ \advance\c@pgf@counta by-1\relax%
+ \pgf@ya=\csname pgf@matrix@miny\the\c@pgf@counta\endcsname\relax%
+ \advance\pgf@y by-\pgf@ya\relax%
+ \expandafter\xdef\csname pgf@matrix@origy\the\c@pgf@counta\endcsname{\the\pgf@y}%
+ \repeat%
+ }%
+ %
+ % Prefix sum on the horizontal positions
+ %
+ {%
+ \ifnum\pgf@matrix@numberofcolumns>0\relax%
+ \pgf@x=\csname pgf@matrix@minx1\endcsname\relax%
+ \pgf@x=-\pgf@x%
+ \expandafter\xdef\csname pgf@matrix@origx1\endcsname{\the\pgf@x}%
+ \fi%
+ \c@pgf@counta=1\relax%
+ \loop%
+ \ifnum\c@pgf@counta<\pgf@matrix@numberofcolumns\relax%
+ \pgf@x=\csname pgf@matrix@origx\the\c@pgf@counta\endcsname\relax%
+ \advance\pgf@x by\csname pgf@matrix@maxx\the\c@pgf@counta\endcsname\relax%
+ \advance\c@pgf@counta by1\relax%
+ \pgf@xa=\csname pgf@matrix@minx\the\c@pgf@counta\endcsname\relax%
+ \advance\pgf@x by-\pgf@xa\relax%
+ \expandafter\xdef\csname pgf@matrix@origx\the\c@pgf@counta\endcsname{\the\pgf@x}%
+ \repeat%
+ }%
+}
+
+
+% Shift the nodes to their origins
+
+% The following procedure shifts all nodes in
+% \pgf@matrix@node@list to their location inside a temporary
+% picture. This picture will later be shifted again to its final
+% position in the real picture.
+
+\def\pgf@matrix@skeleton@shift@nodes@initial{%
+ {%
+ \pgfutil@for\pgf@matrix@node@name:=\pgf@matrix@node@list\do{%
+ \ifx\pgf@matrix@node@name\pgfutil@empty%
+ \else%
+ \expandafter\ifx\csname pgf@matrix@node@visited@\pgf@matrix@node@name\endcsname\relax%
+ \pgf@shift@node{\pgf@matrix@node@name}{%
+ \pgf@x=\csname pgf@matrix@origx%
+ \expandafter\expandafter\expandafter\pgfutil@secondoftwo\csname pgf@matrix@node@location@\pgf@matrix@node@name\endcsname\endcsname%
+ \pgf@y=\csname pgf@matrix@origy%
+ \expandafter\expandafter\expandafter\pgfutil@firstoftwo\csname pgf@matrix@node@location@\pgf@matrix@node@name\endcsname\endcsname%
+ }%
+ \expandafter\let\csname pgf@matrix@node@visited@\pgf@matrix@node@name\endcsname=\pgfutil@empty%
+ \fi%
+ \fi%
+ }%
+ }%
+}
+
+
+% End of line
+\def\pgfmatrixendrow{%
+ % if the cell contains nothing, the following \let will be at the
+ % beginning (macro expansion has stopped here since neither \omit
+ % nor \span was found)
+ \let\pgf@matrix@signal@cell@end=\pgf@matrix@signal@cell@end%
+ &\pgf@matrix@correct@calltrue%
+ \global\pgf@matrix@fixedfalse%
+ \pgf@y=0pt%
+ \pgf@matrix@addtolength\pgf@y{\pgfmatrixrowsep}%
+ \pgfutil@ifnextchar[{\pgfmatrixendrow@skip}{
+ {
+ \advance\pgfmatrixcurrentrow by1\relax % only temporary for the following:
+ \expandafter\xdef\csname pgf@matrix@row@sep@\the\pgfmatrixcurrentrow\endcsname{\the\pgf@y}%
+ }
+ \pgf@matrix@finish@line}%
+}
+
+\def\pgfmatrixendrow@skip[#1]{%
+ \pgf@matrix@addtolength\pgf@y{#1}%
+ {
+ \advance\pgfmatrixcurrentrow by1\relax % only temporary for the following:
+ \expandafter\xdef\csname pgf@matrix@row@sep@\the\pgfmatrixcurrentrow\endcsname{\the\pgf@y}%
+ }
+ \pgf@matrix@finish@line%
+}
diff --git a/graphics/pgf/contrib/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex b/graphics/pgf/contrib/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex
new file mode 100644
index 0000000000..8f342e8ae7
--- /dev/null
+++ b/graphics/pgf/contrib/matrix-skeleton/tikzlibrarymatrix.skeleton.code.tex
@@ -0,0 +1,278 @@
+\usepgflibrary{matrix.skeleton}
+
+\usetikzlibrary{matrix}
+\usetikzlibrary{fit}
+\usetikzlibrary{backgrounds}
+
+\tikzset{
+ label skeleton/.code = {
+ \pgfmatrixlabelskeleton
+ },
+ add styling node/.style = {
+ append after command = {
+ \pgfextra
+ \pgfinterruptpath
+ % This next line is not useful in CVS. This is protection that was needed in the past for nodes.
+ \setbox\tikz@figbox=\box\pgfutil@voidb@x
+ #1
+ \endpgfinterruptpath
+ \endpgfextra
+ }
+ },
+ style odd rows/.style = {
+ label skeleton,
+ add styling node = {
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \fitandstyle{(\tikzlastnode-row-\row)}{#1}
+ \fi
+ }
+ }
+ },
+ style even rows/.style = {
+ label skeleton,
+ add styling node={
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \else
+ \fitandstyle{(\tikzlastnode-row-\row)}{#1}
+ \fi
+ }
+ }
+ },
+ style odd rows on layer/.style 2 args= {
+ label skeleton,
+ add styling node = {
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \fitandstyle[#1]{(\tikzlastnode-row-\row)}{#2}
+ \fi
+ }
+ }
+ },
+ style even rows on layer/.style 2 args = {
+ label skeleton,
+ add styling node={
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \else
+ \fitandstyle[#1]{(\tikzlastnode-row-\row)}{#2}
+ \fi
+ }
+ }
+ },
+ style odd tiling rows/.style = {
+ label skeleton,
+ add styling node = {
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \fitandstyle{(\tikzlastnode-tiling-row-\row)}{#1}
+ \fi
+ }
+ }
+ },
+ style even tiling rows/.style = {
+ label skeleton,
+ add styling node={
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \else
+ \fitandstyle{(\tikzlastnode-tiling-row-\row)}{#1}
+ \fi
+ }
+ }
+ },
+ style odd tiling rows on layer/.style 2 args= {
+ label skeleton,
+ add styling node = {
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \fitandstyle[#1]{(\tikzlastnode-tiling-row-\row)}{#2}
+ \fi
+ }
+ }
+ },
+ style even tiling rows on layer/.style 2 args = {
+ label skeleton,
+ add styling node={
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifodd\row
+ \else
+ \fitandstyle[#1]{(\tikzlastnode-tiling-row-\row)}{#2}
+ \fi
+ }
+ }
+ },
+ style odd columns/.style = {
+ label skeleton,
+ add styling node = {
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \fitandstyle{(\tikzlastnode-column-\col)}{#1}
+ \fi
+ }
+ }
+ },
+ style even columns/.style = {
+ label skeleton,
+ add styling node={
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \else
+ \fitandstyle{(\tikzlastnode-column-\col)}{#1}
+ \fi
+ }
+ }
+ },
+ style odd columns on layer/.style 2 args= {
+ label skeleton,
+ add styling node = {
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \fitandstyle[#1]{(\tikzlastnode-column-\col)}{#2}
+ \fi
+ }
+ }
+ },
+ style even columns on layer/.style 2 args = {
+ label skeleton,
+ add styling node={
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \else
+ \fitandstyle[#1]{(\tikzlastnode-column-\col)}{#2}
+ \fi
+ }
+ }
+ },
+ style odd tiling columns/.style = {
+ label skeleton,
+ add styling node = {
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \fitandstyle{(\tikzlastnode-tiling-column-\col)}{#1}
+ \fi
+ }
+ }
+ },
+ style even tiling columns/.style = {
+ label skeleton,
+ add styling node={
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \else
+ \fitandstyle{(\tikzlastnode-tiling-column-\col)}{#1}
+ \fi
+ }
+ }
+ },
+ style odd tiling columns on layer/.style 2 args= {
+ label skeleton,
+ add styling node = {
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \fitandstyle[#1]{(\tikzlastnode-tiling-column-\col)}{#2}
+ \fi
+ }
+ }
+ },
+ style even tiling columns on layer/.style 2 args = {
+ label skeleton,
+ add styling node={
+ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifodd\col
+ \else
+ \fitandstyle[#1]{(\tikzlastnode-tiling-column-\col)}{#2}
+ \fi
+ }
+ }
+ },
+ style contour/.style = {%
+ label skeleton,
+ add styling node = {
+ \stylecontour{#1}
+ }
+ },
+ style contour on layer/.style 2 args= {%
+ label skeleton,
+ add styling node = {
+ \pgfonlayer{#1}
+ \stylecontour{#2}
+ \endpgfonlayer
+ }
+ },
+ style grid/.style = {%
+ label skeleton,
+ add styling node = {
+ \stylegrid{#1}
+ }
+ },
+ style grid on layer/.style 2 args= {%
+ label skeleton,
+ add styling node = {
+ \pgfonlayer{#1}
+ \stylegrid{#2}
+ \endpgfonlayer
+ }
+ },
+ style tiling grid/.style = {%
+ label skeleton,
+ add styling node = {
+ \styletilinggrid{#1}
+ }
+ },
+ style tiling grid on layer/.style 2 args= {%
+ label skeleton,
+ add styling node = {
+ \pgfonlayer{#1}
+ \styletilinggrid{#2}
+ \endpgfonlayer
+ }
+ },
+}
+
+\def\fitandstyle{\@ifnextchar[{\fitandstyle@layer}{\fitandstyle@main}}
+\def\fitandstyle@layer[#1]#2#3{
+ \pgfonlayer{#1}
+ \fitandstyle@main{#2}{#3}
+ \endpgfonlayer
+}
+\def\fitandstyle@main#1#2{\node [fit = #1, inner sep = 0pt, #2] {};}
+
+\def\stylecontour#1{
+ \path [#1] (\tikzlastnode-row-1.north west) -- (\tikzlastnode-row-1.north east) -- (\tikzlastnode-row-\the\pgfmatrixcurrentrow.south east) -- (\tikzlastnode-row-\the\pgfmatrixcurrentrow.south west) -- cycle;
+}
+
+\def\stylegrid#1{
+ \ifnum\the\pgfmatrixcurrentrow>1\relax%
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifnum\row<\the\pgfmatrixcurrentrow\relax%
+ \path [#1] (\tikzlastnode-inter-row-\row.west) -- (\tikzlastnode-inter-row-\row.east);
+ \fi
+ }
+ \fi
+ \ifnum\the\pgf@matrix@numberofcolumns>1\relax%
+ \foreach \column in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifnum\column<\the\pgf@matrix@numberofcolumns\relax%
+ \path [#1] (\tikzlastnode-inter-column-\column.north) -- (\tikzlastnode-inter-column-\column.south);
+ \fi
+ }
+ \fi
+}
+
+\def\styletilinggrid#1{
+ \ifnum\the\pgfmatrixcurrentrow>1\relax%
+ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{
+ \ifnum\row<\the\pgfmatrixcurrentrow\relax%
+ \path [#1] (\tikzlastnode-tiling-row-\row.south west) -- (\tikzlastnode-tiling-row-\row.south east);
+ \fi
+ }
+ \fi
+ \ifnum\the\pgf@matrix@numberofcolumns>1\relax%
+ \foreach \column in {1, ..., \the\pgf@matrix@numberofcolumns}{
+ \ifnum\column<\the\pgf@matrix@numberofcolumns\relax%
+ \path [#1] (\tikzlastnode-tiling-column-\column.north east) -- (\tikzlastnode-tiling-column-\column.south east);
+ \fi
+ }
+ \fi
+}
diff --git a/graphics/pgf/contrib/memorygraphs/README.md b/graphics/pgf/contrib/memorygraphs/README.md
new file mode 100644
index 0000000000..dc9f95729e
--- /dev/null
+++ b/graphics/pgf/contrib/memorygraphs/README.md
@@ -0,0 +1,30 @@
+# memorygraphs
+Ti*k*Z styles to typeset graphs of program memory
+
+This package is on [CTAN][].
+
+Development happens on [GitLab][].
+You can download the latest version of the package and the
+[latest documentation][doc] there.
+
+## Colophon
+
+Copyright &copy; 2018&ndash;present [Camil Staps][camilstaps].
+
+This work may be distributed and/or modified under the conditions of the LaTeX
+Project Public License, either version 1.3 of this license or (at your option)
+any later version. The latest version of this license is in
+http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+distributions of LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status “maintainedâ€.
+
+The Current Maintainer of this work is C. Staps.
+
+This work consists of the files `memorygraphs.sty` and the documentation in
+`memorygraphs.tex` and `example-fibonacci.tex`.
+
+[CTAN]: http://www.ctan.org/pkg/memorygraphs
+[GitLab]: https://gitlab.science.ru.nl/cstaps/memorygraphs
+[doc]: https://gitlab.science.ru.nl/cstaps/memorygraphs/-/jobs/artifacts/master/raw/memorygraphs.pdf?job=doc
+[camilstaps]: https://camilstaps.nl
diff --git a/graphics/pgf/contrib/memorygraphs/memorygraphs.pdf b/graphics/pgf/contrib/memorygraphs/memorygraphs.pdf
new file mode 100644
index 0000000000..38dbfbe836
--- /dev/null
+++ b/graphics/pgf/contrib/memorygraphs/memorygraphs.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/memorygraphs/memorygraphs.sty b/graphics/pgf/contrib/memorygraphs/memorygraphs.sty
new file mode 100644
index 0000000000..15a13207ec
--- /dev/null
+++ b/graphics/pgf/contrib/memorygraphs/memorygraphs.sty
@@ -0,0 +1,167 @@
+%% memorygraphs.tex
+%% Copyright 2018-2019 C. Staps
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status “maintainedâ€.
+%
+% The Current Maintainer of this work is C. Staps.
+%
+% This work consists of the files memorygraphs.sty and the documentation in
+% memorygraphs.tex and example-fibonacci.tex.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{memorygraphs}[2019/01/06 v0.1.1 Draw memory graphs using TikZ]
+
+\RequirePackage{tikz}
+\usetikzlibrary{arrows.meta,calc,positioning,shapes}
+
+\def\pgfaddtoshape#1#2{%
+ \begingroup
+ \def\pgf@sm@shape@name{#1}%
+ #2%
+ \endgroup
+}
+
+\pgfaddtoshape{rectangle split}{%
+ \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/rectangle split parts}}%
+ \edef\parts{\the\c@pgf@counta}%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@head north east\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@one split north\endcsname}%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@head south east\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@one split south\endcsname}%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@head north west\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@north west\endcsname}%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@head south west\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@south west\endcsname}%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\parts%
+ \else%
+ \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space center\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space north\endcsname%
+ \pgf@ya=\pgf@y%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space south\endcsname%
+ \advance\pgf@ya by-\pgf@y%
+ \advance\pgf@y by.5\pgf@ya}%
+ \c@pgf@counta=\pgfmathcounter%
+ \advance\c@pgf@counta by-1\relax%
+ \edef\name{\ifnum\c@pgf@counta=0 head\else arg \the\c@pgf@counta\fi}%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\name\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\endcsname}%
+ \pgfutil@for\pgf@lib@sh@rs@temp:={center,north,east,south,west}\do{%
+ \expandafter\xdef\csname pgf@anchor@rectangle split@\name\space\pgf@lib@sh@rs@temp\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle split@\pgf@lib@sh@rs@number\space\pgf@lib@sh@rs@temp\endcsname}}%
+ \repeatpgfmathloop%
+}
+\pgfaddtoshape{rectangle}{%
+ \expandafter\xdef\csname pgf@anchor@rectangle@head north east\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle@north east\endcsname}%
+ \expandafter\xdef\csname pgf@anchor@rectangle@head south east\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle@south east\endcsname}%
+ \expandafter\xdef\csname pgf@anchor@rectangle@head north west\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle@north west\endcsname}%
+ \expandafter\xdef\csname pgf@anchor@rectangle@head south west\endcsname{%
+ \expandafter\noexpand\csname pgf@anchor@rectangle@south west\endcsname}%
+}
+
+\newcommand{\memorygraphs@arg}[1]{%
+ \pgfmathsetcount\c@pgf@counta{#1}%
+ \advance\c@pgf@counta by1\relax%
+ \expandafter\nodepart\expandafter{\expandafter\pgf@lib@sh@toalpha\expandafter{\the\c@pgf@counta}}}
+
+\newdimen\memorygraphs@marklength
+\memorygraphs@marklength=4pt
+
+\tikzset{
+ memory graph/.style={
+ node distance=1.5em,
+ },
+ every block/.style={},
+ block/.style={
+ draw,
+ text height=height("I"),
+ text depth=depth("I"),
+ anchor=mid,
+ every block,
+ },
+ block/.append code={%
+ \let\arg\memorygraphs@arg%
+ \gdef\memorygraphs@arity{0}%
+ },
+ block mark north east/.style={
+ append after command={
+ \pgfextra
+ \pgfinterruptpath
+ \draw[#1]
+ ($(\tikzlastnode.head north east)-(\ifnum\memorygraphs@arity=0 .5\pgflinewidth\else0\fi,.5\pgflinewidth)$)
+ -- +(0,-\memorygraphs@marklength)
+ -- ($(\tikzlastnode.head north east)-(\ifnum\memorygraphs@arity=0 .5\pgflinewidth\else0\fi+\memorygraphs@marklength,.5\pgflinewidth)$)
+ -- cycle;
+ \endpgfinterruptpath
+ \endpgfextra
+ },
+ },
+ block mark south east/.style={
+ append after command={
+ \pgfextra
+ \pgfinterruptpath
+ \draw[#1]
+ ($(\tikzlastnode.head south east)+(\ifnum\memorygraphs@arity=0 -.5\pgflinewidth\else0\fi,.5\pgflinewidth)$)
+ -- +(0,\memorygraphs@marklength)
+ -- ($(\tikzlastnode.head south east)+(\ifnum\memorygraphs@arity=0 -.5\pgflinewidth\else0\fi-\memorygraphs@marklength,.5\pgflinewidth)$)
+ -- cycle;
+ \endpgfinterruptpath
+ \endpgfextra
+ },
+ },
+ block mark north west/.style={
+ append after command={
+ \pgfextra
+ \pgfinterruptpath
+ \draw[#1]
+ ($(\tikzlastnode.head north west)+(.5\pgflinewidth,-.5\pgflinewidth)$)
+ -- +(0,-\memorygraphs@marklength)
+ -- ($(\tikzlastnode.head north west)-(-.5\pgflinewidth-\memorygraphs@marklength,.5\pgflinewidth)$)
+ -- cycle;
+ \endpgfinterruptpath
+ \endpgfextra
+ },
+ },
+ block mark south west/.style={
+ append after command={
+ \pgfextra
+ \pgfinterruptpath
+ \draw[#1]
+ ($(\tikzlastnode.head south west)+(.5\pgflinewidth,.5\pgflinewidth)$)
+ -- +(0,\memorygraphs@marklength)
+ -- ($(\tikzlastnode.head south west)+(.5\pgflinewidth+\memorygraphs@marklength,.5\pgflinewidth)$)
+ -- cycle;
+ \endpgfinterruptpath
+ \endpgfextra
+ },
+ },
+ arity/.style={
+ block,
+ rectangle split,
+ rectangle split parts=#1+1,
+ rectangle split horizontal,
+ rectangle split every empty part={},
+ rectangle split empty part width=.2em,
+ },
+ arity/.append code={%
+ \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/rectangle split parts}}%
+ \ifnum\c@pgf@counta=0\else\advance\c@pgf@counta by-1 \fi
+ \xdef\memorygraphs@arity{\the\c@pgf@counta}%
+ },
+ ref/.style={
+ {Circle[length=3pt]}-Latex,
+ shorten <=-1.5pt,
+ rounded corners=.2em,
+ },
+}
diff --git a/graphics/pgf/contrib/memorygraphs/memorygraphs.tex b/graphics/pgf/contrib/memorygraphs/memorygraphs.tex
new file mode 100644
index 0000000000..d7f9c811b1
--- /dev/null
+++ b/graphics/pgf/contrib/memorygraphs/memorygraphs.tex
@@ -0,0 +1,328 @@
+%% memorygraphs.tex
+%% Copyright 2018-2019 C. Staps
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status “maintainedâ€.
+%
+% The Current Maintainer of this work is C. Staps.
+%
+% This work consists of the files memorygraphs.sty and the documentation in
+% memorygraphs.tex and example-fibonacci.tex.
+\documentclass[a4paper]{article}
+
+\usepackage{geometry}
+\usepackage[hidelinks]{hyperref}
+\usepackage{csquotes}
+\usepackage{cleveref}
+
+\usepackage[nonewpage]{imakeidx}
+\makeindex[intoc]
+
+\usepackage{latexgit}
+\usepackage{fancyvrb}
+\usepackage{listings}
+\usepackage{color}
+\definecolor{codebg}{rgb}{0.8,0.8,1}
+\lstset{backgroundcolor=\color{codebg},
+ frame=single,
+ framerule=0pt,
+ basicstyle=\ttfamily\footnotesize,
+ columns=fullflexible}
+
+\usepackage{memorygraphs}
+
+\newcommand{\memorygraphs}{\textsf{memorygraphs}}
+\newcommand{\TikZ}{Ti\textit{k}Z}
+
+\title{The \memorygraphs{} package}
+\author{Camil Staps\thanks{info@camilstaps.nl}}
+\date{\gitcommitdate[formatDate]}
+
+\newif\ifexamplehorizontal
+\newenvironment{example}{%
+ \medskip%
+ \VerbatimOut{\jobname.tmp}}
+ {\endVerbatimOut%
+ \ifexamplehorizontal%
+ \noindent\begin{minipage}{\linewidth}
+ \centering
+ \input{\jobname.tmp}
+ \end{minipage}
+ \par\bigskip
+ \noindent\begin{minipage}{\linewidth}
+ \lstinputlisting{\jobname.tmp}
+ \end{minipage}
+ \else%
+ \hfill%
+ \noindent\begin{minipage}{.4\linewidth}
+ \centering
+ \input{\jobname.tmp}
+ \end{minipage}%
+ \noindent\begin{minipage}{.6\linewidth}
+ \lstinputlisting{\jobname.tmp}
+ \end{minipage}
+ \fi%
+ }
+
+\makeatletter
+\definecolor{keyheading}{rgb}{0.75,0,0}
+\newcommand{\keyheading}[2][\pgfutil@empty]{%
+ \index{#2@\texttt{#2} key}%
+ \edef\pgf@test{#1}%
+ \item\texttt{{\color{keyheading}{/tikz/#2}}\ifx\pgf@test\pgfutil@empty\else\,=\,#1\fi}\par}
+\newenvironment{keydescription}[2][\pgfutil@empty]{%
+ \list{}{\leftmargin=2em\itemindent-\leftmargin}
+ \itemsep=0pt
+ \parskip=0pt
+ \topsep=0pt
+ \keyheading[#1]{#2}
+ }{\endlist}
+\newenvironment{macrodescription}[2][\pgfutil@empty]{%
+ \index{#2@\texttt{\textbackslash{}#2}}%
+ \list{}{\leftmargin=2em\itemindent-\leftmargin}
+ \itemsep=0pt
+ \parskip=0pt
+ \topsep=0pt
+ \item\texttt{{\color{keyheading}{\textbackslash#2}}\,#1}
+ \par\parskip3pt
+ }{\endlist}
+\newcommand{\marg}[1]{\texttt{\textbraceleft}$#1$\texttt{\textbraceright}}
+\makeatother
+
+\newcommand{\opt}[1]{$\langle#1\rangle$}
+
+\begin{document}
+
+\maketitle
+
+\begin{center}
+\input{example-fibonacci}
+\end{center}
+
+\tableofcontents
+
+\section{Introduction}
+This is the documentation of the \LaTeX{} package \memorygraphs{}.
+It defines some \TikZ{} styles and adds anchors to existing styles that ease the declaration of \enquote{memory graphs}.
+It is intended for graphs that represent the memory of a computer program during its execution.
+
+\section{Functionality}
+
+\begin{keydescription}{memory graph}
+The \verb$memory graph$ style is to be used on \verb$tikzpicture$.
+It sets a different node distance that the author finds suitable for this kind of graphs.
+
+\begin{example}
+\begin{tikzpicture}[memory graph]
+ \node[draw] (x) {37};
+ \node[draw,right=of x] {42};
+\end{tikzpicture}
+\end{example}
+\end{keydescription}
+
+\subsection{Nodes}
+The following styles can be used to typeset memory blocks:
+
+\begin{keydescription}{block}
+This is the most basic style to define a memory block.
+By default, this shape is a rectangle with borders:
+
+\begin{example}
+\begin{tikzpicture}[memory graph]
+ \node[block] {37};
+\end{tikzpicture}
+\end{example}
+\end{keydescription}
+
+\begin{keydescription}[\opt{n}]{arity}
+The \verb$arity$ style can be used to create a node with arguments.
+This implies \verb$block$:
+
+\begin{example}
+\begin{tikzpicture}[memory graph]
+ \node[arity=2] {Cons};
+\end{tikzpicture}
+\end{example}
+\end{keydescription}
+
+\begin{macrodescription}[\marg{i}]{arg}
+Because blocks with \verb$arity$ are multipart rectangles,
+ one can use \TikZ{}'s \verb$\nodepart$ to put contents in the arguments.
+However, it can be confusing that \verb$\nodepart{two}$ refers to the \emph{first} argument,
+ so we redefine \verb$\arg$ in \verb$block$s to identify arguments of the memory block:
+
+\begin{example}
+\begin{tikzpicture}[memory graph]
+ \node[arity=2] {Cons \arg{1} 37 \arg{2} \dots};
+\end{tikzpicture}
+\end{example}
+
+Should one want to use math mode's \verb$\arg$ in a memory block, they can first rename it:
+
+\begin{example}
+\let\matharg\arg
+\begin{tikzpicture}[memory graph]
+ \node[block] {$\matharg(1)$};
+\end{tikzpicture}
+\end{example}
+\end{macrodescription}
+
+\subsection{Markings}
+It is possible to mark the head of memory blocks using triangles in the north east and south east corners.
+
+\begin{keydescription}[\opt{style}]{block mark north east}
+\keyheading[\opt{style}]{block mark north west}
+\keyheading[\opt{style}]{block mark south east}
+\keyheading[\opt{style}]{block mark south west}
+With this key, triangular marks can be added to the corners of the head of a node:
+
+\begin{example}
+\begin{tikzpicture}[memory graph]
+ \node[arity=2,block mark north east] {Cons};
+\end{tikzpicture}
+\end{example}
+
+It is optional to add a style:
+
+\begin{example}
+\begin{tikzpicture}
+ [memory graph,every node/.style={block}]
+ \node[block mark north east={fill,red}] at (1,1) {1};
+ \node[block mark north west={blue}] at (0,1) {2};
+ \node[block mark south west={fill,green}] at (0,0) {3};
+ \node[block mark south east={brown}] at (1,0) {4};
+\end{tikzpicture}
+\end{example}
+
+The key is long to avoid clashes with other packages,
+ and because it depends on the context what nodes should be marked for.
+It is of course possible to define a shorthand in your own document.
+One application is to mark nodes that are in head normal form (HNF),
+ for which one may define the key \verb$hnf$:
+
+\begin{example}
+\tikzset{every block/.style={block mark south east}}
+\tikzset{hnf/.style={block mark south east=fill}}
+\begin{tikzpicture}[memory graph]
+ \node[arity=2,hnf]
+ {Cons \arg{1}$\dots$ \arg{2}$\dots$};
+ \node[arity=2] at (0,-1)
+ {map \arg{1}$\dots$ \arg{2}$\dots$};
+\end{tikzpicture}
+\end{example}
+
+The size of the rectangles is defined by \verb$\memorygraphs@marklength$,
+ which can of course be changed.
+The default is \makeatletter\the\memorygraphs@marklength\makeatother.
+
+\begin{example}
+\makeatletter
+\memorygraphs@marklength=7pt
+\makeatother
+\begin{tikzpicture}[memory graph]
+ \node[arity=2,block mark north west=fill]
+ {Cons \arg{1}$\dots$ \arg{2}$\dots$};
+\end{tikzpicture}
+\end{example}
+\end{keydescription}
+
+\subsection{Anchors}
+\index{anchors}
+Because blocks with \verb$arity$ are multipart rectangles,
+ one can use anchors like \verb$two south$ to refer to the south of the second part of a node.
+These are aliased as \texttt{arg $i$ south} (and similar for other anchors on multipart nodes),
+ where \verb$arg 1$ stands for \verb$two$.
+The first block of a node is aliased as \verb$head$ instead of \verb$arg 0$,
+ so one can use \verb$head south$.
+For \verb$head$, anchors for the corners (\verb$head north east$, etc.) are defined as well.
+
+The parts of multipart rectangles do not normally have a \verb$center$ anchor, but \memorygraphs{} defines these.
+One can use both \verb$two center$ and \verb$arg 1 center$ to refer to the center of the first argument of a node.
+
+The additional anchors are shown below.
+See the \TikZ{} manual for the predefined anchors.
+
+{\examplehorizontaltrue
+\begin{example}
+\Large
+\begin{tikzpicture}
+ \node
+ [arity=2,
+ line width=.25cm,inner xsep=1.25cm,inner ysep=.75cm,
+ color=black!30,fill=yellow!30]
+ (v) {Head \arg{1} 1 \arg{2} 2};
+ \foreach \anchor/\placement in
+ {head north/above,head south/below,head center/below,
+ head north east/below,head south east/above,head north west/left,head south west/left,
+ arg 1 north/above,arg 1 south/below,arg 1 center/below,
+ arg 2 north/above,arg 2 south/below,arg 2 center/below}
+ \draw[shift=(v.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{v.\anchor}};
+\end{tikzpicture}
+\end{example}
+}
+
+\subsection{References}
+
+\begin{keydescription}{ref}
+This is a simple style for arrows with a circle at the start and slightly rounded corners:
+
+\begin{example}
+\begin{tikzpicture}[memory graph]
+ \node[arity=2] (hd) {Cons};
+ \node
+ [arity=2,below=of hd.arg 2 center,anchor=head north]
+ (tl) {Cons};
+ \draw[ref] (hd.arg 2 center)
+ -- (tl.head north);
+ \draw[ref] (tl.arg 2 center)
+ |- ($(hd.head north)+(0,.4)$)
+ -- (hd.head north);
+\end{tikzpicture}
+\end{example}
+\end{keydescription}
+
+\section{Examples}
+\examplehorizontaltrue
+
+\begin{itemize}
+\item
+The linked list of Fibonacci numbers on the title page was generated with:
+
+\noindent\begin{minipage}{\linewidth}
+ \centering
+ \input{example-fibonacci.tex}
+\end{minipage}
+\par\bigskip
+\noindent\begin{minipage}{\linewidth}
+ \lstinputlisting{example-fibonacci.tex}
+\end{minipage}
+
+\item
+A cyclical linked list, with unboxed integers:
+
+\begin{example}
+\begin{tikzpicture}[memory graph]
+ \node[block,arity=2] (xs) {Cons \arg{1} 1};
+
+ \node[block,arity=2,right=of xs.arg 2 east] (xsb) {Cons \arg{1} 2};
+ \draw[ref] (xs.arg 2 center) -- (xsb);
+
+ \node[block,arity=2,right=of xsb.arg 2 east] (xsc) {Cons \arg{1} 3};
+ \draw[ref] (xsb.arg 2 center) -- (xsc);
+
+ \draw[ref] (xsc.arg 2 center) -- +(0,.6) -| (xs.head north);
+\end{tikzpicture}
+\end{example}
+\end{itemize}
+
+\printindex
+
+\end{document}
diff --git a/graphics/pgf/contrib/milsymb/LICENCE.md b/graphics/pgf/contrib/milsymb/LICENCE.md
new file mode 100644
index 0000000000..4cc9cb55d1
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/LICENCE.md
@@ -0,0 +1 @@
+This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
diff --git a/graphics/pgf/contrib/milsymb/README.md b/graphics/pgf/contrib/milsymb/README.md
new file mode 100644
index 0000000000..b6dfe3680f
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/README.md
@@ -0,0 +1,8 @@
+# MilSymb
+LaTeX package for TikZ based drawing of military symbols as per NATO [APP-6(C)](https://www.awl.edu.pl/images/en/APP_6_C.pdf).
+
+# Installation
+Download the latest release and copy **milsymb.sty** to your package directory, or install via [CTAN](https://ctan.org/pkg/milsymb) or your TeX software package manager.
+
+# Licence
+This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. To view a copy of this license, visit [http://creativecommons.org/licenses/by-sa/4.0/](http://creativecommons.org/licenses/by-sa/4.0/) or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
diff --git a/graphics/pgf/contrib/milsymb/manual_examples/772px-1st_Marine_Division_insignia.png b/graphics/pgf/contrib/milsymb/manual_examples/772px-1st_Marine_Division_insignia.png
new file mode 100644
index 0000000000..2c264c180c
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_examples/772px-1st_Marine_Division_insignia.png
Binary files differ
diff --git a/graphics/pgf/contrib/milsymb/manual_examples/mef.tex b/graphics/pgf/contrib/milsymb/manual_examples/mef.tex
new file mode 100644
index 0000000000..eb7c0eff9a
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_examples/mef.tex
@@ -0,0 +1,108 @@
+
+\definecolor{salmon}{HTML}{F69289} %custom tank symbol colour
+
+%custom icons
+\makeatletter
+\tikzset{
+MilSymb custom/marine/.pic={
+ \pic{MilSymb land/main/infantry/\MilSymb@selectedfaction};
+ \clip \clipfriendly;
+ \pic[yshift=-10.75]{MilSymb land/main/amphibious/\MilSymb@selectedfaction};
+},
+MilSymb custom/tank/.pic={
+ \filldraw[fill=salmon]circle(0.5 and 0.15);
+},
+MilSymb custom/reconnaissance tank/.pic={
+ \pic{MilSymb custom/tank};
+ \pic{MilSymb land/main/reconnaissance/\MilSymb@selectedfaction};
+},
+MilSymb custom/amphibious tank/.pic={
+ \pic{MilSymb custom/tank};
+ \clip \clipfriendly;
+ \pic[yshift=-10.75]{MilSymb land/main/amphibious/\MilSymb@selectedfaction};
+}
+}
+\makeatother
+
+\fontsize{6}{0}\selectfont
+
+\begin{tikzpicture}
+
+% grid of symbols
+\node(H) at (7,0){\includegraphics[width=1.5cm]{manual_examples/772px-1st_Marine_Division_insignia}};
+\node[right of=H, node distance=1.85cm, align=left](HT){1\textsuperscript{st} Marine Division\\ CAMP PENDLETON};
+\node[above of=H, star,star points=5, star point ratio=0.5, rotate=180, xshift=-3, fill=yellow, draw] {};
+\node[above of=H, star,star points=5, star point ratio=0.5, rotate=180, xshift=3, fill=yellow, draw] {};
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=marine](3.5, -2)(C11){1\textsuperscript{st} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=marine](7, -2)(C21){5\textsuperscript{th} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=marine](10.5, -2)(C31){7\textsuperscript{th} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=field artillery](14, -2)(C41){11\textsuperscript{th} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=headquarters](0, -3)(C02){Headquarters \\ Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](3.75, -3)(C12){~\\ HQ Coy.}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](7.25, -3)(C22){~\\ HQ Coy.}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](10.75, -3)(C32){~\\ HQ Coy.}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](14.25, -3)(C42){~\\ HQ Battery}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=tank](0, -4)(C03){1\textsuperscript{st} Tank \\ Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -4)(C13){1\textsuperscript{st} Btn. \\ 1\textsuperscript{st} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -4)(C23){1\textsuperscript{st} Btn. \\ 5\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -4)(C33){1\textsuperscript{st} Btn. \\ 7\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery](14.25, -4)(C43){1\textsuperscript{st} Btn. \\ 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=reconnaissance tank, lower=wheeled](0, -5)(C04){1\textsuperscript{st} Light Armoured \\ Reconnaissance Btn.}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -5)(C14){2\textsuperscript{nd} Btn. \\ 1\textsuperscript{st} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -5)(C24){2\textsuperscript{nd} Btn. \\ 5\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -5)(C34){2\textsuperscript{nd} Btn. \\ 7\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery](14.25, -5)(C44){2\textsuperscript{nd} Btn. \\ 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=reconnaissance tank, lower=wheeled](0, -6)(C05){3\textsuperscript{rd} Light Armoured \\ Reconnaissance Btn.}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -6)(C15){3\textsuperscript{rd} Btn. \\ 1\textsuperscript{st} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -6)(C25){3\textsuperscript{rd} Btn. \\ 5\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -6)(C35){3\textsuperscript{rd} Btn. \\ 7\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery](14.25, -6)(C45){3\textsuperscript{rd} Btn. \\ 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=reconnaissance](0, -7)(C06){1\textsuperscript{st} Reconnaissance \\ Battalion}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -7)(C16){1\textsuperscript{st} Btn. \\ 4\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -7)(C26){2\textsuperscript{nd} Btn. \\ 4\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -7)(C36){3\textsuperscript{rd} Btn. \\ 4\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery, upper=multiple rocket launcher, lower=wheeled](14.25, -7)(C46){5\textsuperscript{rd} Btn. 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=engineer](0, -8)(C07){1\textsuperscript{st} Combat \\ Engineer Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=engineer](0, -9)(C08){3\textsuperscript{rd} Combat \\ Engineer Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=amphibious tank](0, -10)(C09){3\textsuperscript{rd} Assault \\ Amphibian Battalion}
+
+%connecting lines
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C11.north);
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C21.north);
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C31.north);
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C41.north);
+\draw (H.south) |- ($(H.south)!0.5!(C11.north)$) -| ($(C02.west)+(-0.25, 0)$) -| (C02.west);
+
+\draw (C11.south west) |- (C12.west);
+\draw (C11.south west) |- (C13.west);
+\draw (C11.south west) |- (C14.west);
+\draw (C11.south west) |- (C15.west);
+\draw (C11.south west) |- (C16.west);
+
+\draw (C21.south west) |- (C22.west);
+\draw (C21.south west) |- (C23.west);
+\draw (C21.south west) |- (C24.west);
+\draw (C21.south west) |- (C25.west);
+\draw (C21.south west) |- (C26.west);
+
+\draw (C31.south west) |- (C32.west);
+\draw (C31.south west) |- (C33.west);
+\draw (C31.south west) |- (C34.west);
+\draw (C31.south west) |- (C35.west);
+\draw (C31.south west) |- (C36.west);
+
+\draw (C41.south west) |- (C42.west);
+\draw (C41.south west) |- (C43.west);
+\draw (C41.south west) |- (C44.west);
+\draw (C41.south west) |- (C45.west);
+\draw (C41.south west) |- (C46.west);
+
+\draw (C02.west) -| ($(C02.west)+(-0.25, 0)$) |- (C03.west);
+\draw (C03.west) -| ($(C02.west)+(-0.25, 0)$) |- (C04.west);
+\draw (C04.west) -| ($(C02.west)+(-0.25, 0)$) |- (C05.west);
+\draw (C05.west) -| ($(C02.west)+(-0.25, 0)$) |- (C06.west);
+\draw (C06.west) -| ($(C02.west)+(-0.25, 0)$) |- (C07.west);
+\draw (C07.west) -| ($(C02.west)+(-0.25, 0)$) |- (C08.west);
+\draw (C08.west) -| ($(C02.west)+(-0.25, 0)$) |- (C09.west);
+
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Activity_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Activity_main_table.tex
new file mode 100644
index 0000000000..a2cf500e13
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Activity_main_table.tex
@@ -0,0 +1,29 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{arrest} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=arrest]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=arrest]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=arrest]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=arrest]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=arrest]}}\\ \hline
+\texttt{attempted criminal activity} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=attempted criminal activity]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=attempted criminal activity]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=attempted criminal activity]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=attempted criminal activity]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=attempted criminal activity]}}\\ \hline
+\texttt{automobile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=automobile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=automobile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=automobile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=automobile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=automobile]}}\\ \hline
+\texttt{demonstration} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=demonstration]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=demonstration]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=demonstration]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=demonstration]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=demonstration]}}\\ \hline
+\texttt{drive by shooting} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=drive by shooting]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=drive by shooting]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=drive by shooting]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=drive by shooting]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=drive by shooting]}}\\ \hline
+\texttt{drug related activities} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=drug related activities]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=drug related activities]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=drug related activities]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=drug related activities]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=drug related activities]}}\\ \hline
+\texttt{explosion} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=explosion]}}\\ \hline
+\texttt{extortion 1} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=extortion 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=extortion 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=extortion 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=extortion 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=extortion 1]}}\\ \hline
+\texttt{extortion 2} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=extortion 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=extortion 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=extortion 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=extortion 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=extortion 2]}}\\ \hline
+\texttt{extortion 3} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=extortion 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=extortion 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=extortion 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=extortion 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=extortion 3]}}\\ \hline
+\texttt{extortion 4} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=extortion 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=extortion 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=extortion 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=extortion 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=extortion 4]}}\\ \hline
+\texttt{fire} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=fire]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=fire]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=fire]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=fire]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=fire]}}\\ \hline
+\texttt{graffiti} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=graffiti]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=graffiti]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=graffiti]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=graffiti]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=graffiti]}}\\ \hline
+\texttt{improvised explosive device explosion} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=improvised explosive device explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=improvised explosive device explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=improvised explosive device explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=improvised explosive device explosion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=improvised explosive device explosion]}}\\ \hline
+\texttt{individual} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=individual]}}\\ \hline
+\texttt{killing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=killing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=killing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=killing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=killing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=killing]}}\\ \hline
+\texttt{patrolling} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=patrolling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=patrolling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=patrolling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=patrolling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=patrolling]}}\\ \hline
+\texttt{pleasure craft} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=pleasure craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=pleasure craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=pleasure craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=pleasure craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=pleasure craft]}}\\ \hline
+\texttt{poisoning} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=poisoning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=poisoning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=poisoning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=poisoning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=poisoning]}}\\ \hline
+\texttt{psychological operations} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=psychological operations]}}\\ \hline
+\texttt{radio and television psychological operations} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=radio and television psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=radio and television psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=radio and television psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=radio and television psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=radio and television psychological operations]}}\\ \hline
+\texttt{riot} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=riot]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=riot]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=riot]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=riot]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=riot]}}\\ \hline
+\texttt{searching} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, main=searching]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, main=searching]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, main=searching]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, main=searching]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, main=searching]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilActivity}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Activity_upper_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Activity_upper_table.tex
new file mode 100644
index 0000000000..b767cd5200
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Activity_upper_table.tex
@@ -0,0 +1,15 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{assassination} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=assassination]}}\\ \hline
+\texttt{execution} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=execution]}}\\ \hline
+\texttt{hijack} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=hijack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=hijack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=hijack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=hijack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=hijack]}}\\ \hline
+\texttt{house to house} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=house to house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=house to house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=house to house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=house to house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=house to house]}}\\ \hline
+\texttt{kidnapping} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=kidnapping]}}\\ \hline
+\texttt{murder} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=murder]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=murder]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=murder]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=murder]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=murder]}}\\ \hline
+\texttt{piracy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=piracy]}}\\ \hline
+\texttt{rape} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=rape]}}\\ \hline
+\texttt{written} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=none, upper=written]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly, upper=written]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile, upper=written]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral, upper=written]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown, upper=written]}}\\ \hline
+\caption{Table for \texttt{upper} values in the \textbf{\texttt{MilActivity}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Air_lower_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Air_lower_table.tex
new file mode 100644
index 0000000000..ffe186216e
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Air_lower_table.tex
@@ -0,0 +1,16 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{boom and drogue} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=boom and drogue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=boom and drogue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=boom and drogue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=boom and drogue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=boom and drogue]}}\\ \hline
+\texttt{boom only} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=boom only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=boom only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=boom only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=boom only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=boom only]}}\\ \hline
+\texttt{close range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=close range]}}\\ \hline
+\texttt{drogue only} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=drogue only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=drogue only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=drogue only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=drogue only]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=drogue only]}}\\ \hline
+\texttt{heavy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=heavy]}}\\ \hline
+\texttt{light} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=light]}}\\ \hline
+\texttt{long range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=long range]}}\\ \hline
+\texttt{medium range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=medium range]}}\\ \hline
+\texttt{medium} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=medium]}}\\ \hline
+\texttt{short range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, lower=short range]}}\\ \hline
+\caption{Table for \texttt{lower} values in the \textbf{\texttt{MilAir}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Air_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Air_main_table.tex
new file mode 100644
index 0000000000..686da4be85
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Air_main_table.tex
@@ -0,0 +1,46 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{air decoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=air decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=air decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=air decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=air decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=air decoy]}}\\ \hline
+\texttt{airborne command post} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=airborne command post]}}\\ \hline
+\texttt{airborne early warning} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=airborne early warning]}}\\ \hline
+\texttt{anti submarine warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=anti submarine warfare]}}\\ \hline
+\texttt{anti surface warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=anti surface warfare]}}\\ \hline
+\texttt{attack} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=attack]}}\\ \hline
+\texttt{bomber} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=bomber]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=bomber]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=bomber]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=bomber]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=bomber]}}\\ \hline
+\texttt{cargo} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=cargo]}}\\ \hline
+\texttt{civilian airship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=civilian airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=civilian airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=civilian airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=civilian airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=civilian airship]}}\\ \hline
+\texttt{civilian balloon} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=civilian balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=civilian balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=civilian balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=civilian balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=civilian balloon]}}\\ \hline
+\texttt{civilian fixed wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=civilian fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=civilian fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=civilian fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=civilian fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=civilian fixed wing]}}\\ \hline
+\texttt{civilian rotary wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=civilian rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=civilian rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=civilian rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=civilian rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=civilian rotary wing]}}\\ \hline
+\texttt{civilian} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=civilian]}}\\ \hline
+\texttt{combat search and rescue} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=combat search and rescue]}}\\ \hline
+\texttt{communications} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=communications]}}\\ \hline
+\texttt{electronic support measures} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=electronic support measures]}}\\ \hline
+\texttt{fighter} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=fighter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=fighter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=fighter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=fighter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=fighter]}}\\ \hline
+\texttt{government} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=government]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=government]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=government]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=government]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=government]}}\\ \hline
+\texttt{jammer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=jammer]}}\\ \hline
+\texttt{medic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=medic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=medic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=medic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=medic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=medic]}}\\ \hline
+\texttt{military airship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=military airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=military airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=military airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=military airship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=military airship]}}\\ \hline
+\texttt{military balloon} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=military balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=military balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=military balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=military balloon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=military balloon]}}\\ \hline
+\texttt{military fixed wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=military fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=military fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=military fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=military fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=military fixed wing]}}\\ \hline
+\texttt{military rotary wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=military rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=military rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=military rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=military rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=military rotary wing]}}\\ \hline
+\texttt{military} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=military]}}\\ \hline
+\texttt{mine countermeasures} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=mine countermeasures]}}\\ \hline
+\texttt{passenger} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=passenger]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=passenger]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=passenger]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=passenger]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=passenger]}}\\ \hline
+\texttt{patrol} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=patrol]}}\\ \hline
+\texttt{personnel recovery} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=personnel recovery]}}\\ \hline
+\texttt{reconnaissance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=reconnaissance]}}\\ \hline
+\texttt{search and rescue} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=search and rescue]}}\\ \hline
+\texttt{special operations forces} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=special operations forces]}}\\ \hline
+\texttt{suppression of enemy air defence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=suppression of enemy air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=suppression of enemy air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=suppression of enemy air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=suppression of enemy air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=suppression of enemy air defence]}}\\ \hline
+\texttt{tanker} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=tanker]}}\\ \hline
+\texttt{trainer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=trainer]}}\\ \hline
+\texttt{ultra light} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=ultra light]}}\\ \hline
+\texttt{unmanned aerial vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=unmanned aerial vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=unmanned aerial vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=unmanned aerial vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=unmanned aerial vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=unmanned aerial vehicle]}}\\ \hline
+\texttt{utility} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=utility]}}\\ \hline
+\texttt{vertical short takeoff and landing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=vertical short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=vertical short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=vertical short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=vertical short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=vertical short takeoff and landing]}}\\ \hline
+\texttt{very important person} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, main=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, main=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, main=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, main=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, main=very important person]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilAir}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Air_upper_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Air_upper_table.tex
new file mode 100644
index 0000000000..6b0dc1d9c3
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Air_upper_table.tex
@@ -0,0 +1,34 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{airborne command post} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=airborne command post]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=airborne command post]}}\\ \hline
+\texttt{airborne early warning} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=airborne early warning]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=airborne early warning]}}\\ \hline
+\texttt{anti submarine warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=anti submarine warfare]}}\\ \hline
+\texttt{anti surface warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=anti surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=anti surface warfare]}}\\ \hline
+\texttt{cargo} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=cargo]}}\\ \hline
+\texttt{combat search and rescue} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=combat search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=combat search and rescue]}}\\ \hline
+\texttt{communications} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=communications]}}\\ \hline
+\texttt{electronic support measures} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=electronic support measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=electronic support measures]}}\\ \hline
+\texttt{escort} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=escort]}}\\ \hline
+\texttt{government flight} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=government flight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=government flight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=government flight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=government flight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=government flight]}}\\ \hline
+\texttt{intensive care} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=intensive care]}}\\ \hline
+\texttt{jammer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=jammer]}}\\ \hline
+\texttt{jammer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=jammer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=jammer]}}\\ \hline
+\texttt{medical evacuation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=medical evacuation]}}\\ \hline
+\texttt{mine countermeasures} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=mine countermeasures]}}\\ \hline
+\texttt{passenger plane} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=passenger plane]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=passenger plane]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=passenger plane]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=passenger plane]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=passenger plane]}}\\ \hline
+\texttt{patrol} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=patrol]}}\\ \hline
+\texttt{personnel recovery} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=personnel recovery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=personnel recovery]}}\\ \hline
+\texttt{photographic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=photographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=photographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=photographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=photographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=photographic]}}\\ \hline
+\texttt{reconnaissance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=reconnaissance]}}\\ \hline
+\texttt{search and rescue} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=search and rescue]}}\\ \hline
+\texttt{special operations forces} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=special operations forces]}}\\ \hline
+\texttt{suppression of enemy air defenses} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=suppression of enemy air defenses]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=suppression of enemy air defenses]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=suppression of enemy air defenses]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=suppression of enemy air defenses]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=suppression of enemy air defenses]}}\\ \hline
+\texttt{tanker} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=tanker]}}\\ \hline
+\texttt{trainer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=trainer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=trainer]}}\\ \hline
+\texttt{ultra light} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=ultra light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=ultra light]}}\\ \hline
+\texttt{utility} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=utility]}}\\ \hline
+\texttt{very important person} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=none, upper=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly, upper=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile, upper=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral, upper=very important person]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown, upper=very important person]}}\\ \hline
+\caption{Table for \texttt{upper} values in the \textbf{\texttt{MilAir}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Equipment_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Equipment_main_table.tex
new file mode 100644
index 0000000000..83c436ecb3
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Equipment_main_table.tex
@@ -0,0 +1,85 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{air defence gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=air defence gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=air defence gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=air defence gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=air defence gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=air defence gun]}}\\ \hline
+\texttt{air defence missile launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=air defence missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=air defence missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=air defence missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=air defence missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=air defence missile launcher]}}\\ \hline
+\texttt{antennae} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=antennae]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=antennae]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=antennae]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=antennae]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=antennae]}}\\ \hline
+\texttt{anti tank gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=anti tank gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=anti tank gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=anti tank gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=anti tank gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=anti tank gun]}}\\ \hline
+\texttt{anti tank missile launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=anti tank missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=anti tank missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=anti tank missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=anti tank missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=anti tank missile launcher]}}\\ \hline
+\texttt{anti tank rocket launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=anti tank rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=anti tank rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=anti tank rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=anti tank rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=anti tank rocket launcher]}}\\ \hline
+\texttt{antipersonnel land mine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=antipersonnel land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=antipersonnel land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=antipersonnel land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=antipersonnel land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=antipersonnel land mine]}}\\ \hline
+\texttt{antitank land mine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=antitank land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=antitank land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=antitank land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=antitank land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=antitank land mine]}}\\ \hline
+\texttt{armoured fighting vehicle command and control} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=armoured fighting vehicle command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=armoured fighting vehicle command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=armoured fighting vehicle command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=armoured fighting vehicle command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=armoured fighting vehicle command and control]}}\\ \hline
+\texttt{armoured fighting vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=armoured fighting vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=armoured fighting vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=armoured fighting vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=armoured fighting vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=armoured fighting vehicle]}}\\ \hline
+\texttt{armoured medical personnel carrier} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=armoured medical personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=armoured medical personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=armoured medical personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=armoured medical personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=armoured medical personnel carrier]}}\\ \hline
+\texttt{armoured personnel carrier} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=armoured personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=armoured personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=armoured personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=armoured personnel carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=armoured personnel carrier]}}\\ \hline
+\texttt{armoured protected recovery vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=armoured protected recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=armoured protected recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=armoured protected recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=armoured protected recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=armoured protected recovery vehicle]}}\\ \hline
+\texttt{armoured protected vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=armoured protected vehicle]}}\\ \hline
+\texttt{automatic rifle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=automatic rifle]}}\\ \hline
+\texttt{bomb} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=bomb]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=bomb]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=bomb]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=bomb]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=bomb]}}\\ \hline
+\texttt{booby trap} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=booby trap]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=booby trap]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=booby trap]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=booby trap]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=booby trap]}}\\ \hline
+\texttt{bridge mounted on utility vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=bridge mounted on utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=bridge mounted on utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=bridge mounted on utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=bridge mounted on utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=bridge mounted on utility vehicle]}}\\ \hline
+\texttt{bridge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=bridge]}}\\ \hline
+\texttt{bus} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=bus]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=bus]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=bus]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=bus]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=bus]}}\\ \hline
+\texttt{chemical biological radiological nuclear equipment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=chemical biological radiological nuclear equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=chemical biological radiological nuclear equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=chemical biological radiological nuclear equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=chemical biological radiological nuclear equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=chemical biological radiological nuclear equipment]}}\\ \hline
+\texttt{computer system} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=computer system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=computer system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=computer system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=computer system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=computer system]}}\\ \hline
+\texttt{direct fire gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=direct fire gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=direct fire gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=direct fire gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=direct fire gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=direct fire gun]}}\\ \hline
+\texttt{drill mounted on vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=drill mounted on vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=drill mounted on vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=drill mounted on vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=drill mounted on vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=drill mounted on vehicle]}}\\ \hline
+\texttt{drill} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=drill]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=drill]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=drill]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=drill]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=drill]}}\\ \hline
+\texttt{earthmover} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=earthmover]}}\\ \hline
+\texttt{fixed bridge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=fixed bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=fixed bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=fixed bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=fixed bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=fixed bridge]}}\\ \hline
+\texttt{flame thrower} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=flame thrower]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=flame thrower]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=flame thrower]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=flame thrower]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=flame thrower]}}\\ \hline
+\texttt{folding girder bridge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=folding girder bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=folding girder bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=folding girder bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=folding girder bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=folding girder bridge]}}\\ \hline
+\texttt{generator set} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=generator set]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=generator set]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=generator set]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=generator set]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=generator set]}}\\ \hline
+\texttt{grenade launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=grenade launcher]}}\\ \hline
+\texttt{heavy grenade launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=heavy grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=heavy grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=heavy grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=heavy grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=heavy grenade launcher]}}\\ \hline
+\texttt{heavy machine gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=heavy machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=heavy machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=heavy machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=heavy machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=heavy machine gun]}}\\ \hline
+\texttt{heavy tank} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=heavy tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=heavy tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=heavy tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=heavy tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=heavy tank]}}\\ \hline
+\texttt{hollow deck bridge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=hollow deck bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=hollow deck bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=hollow deck bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=hollow deck bridge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=hollow deck bridge]}}\\ \hline
+\texttt{howitzer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=howitzer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=howitzer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=howitzer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=howitzer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=howitzer]}}\\ \hline
+\texttt{improvised explosive device} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=improvised explosive device]}}\\ \hline
+\texttt{land mine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=land mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=land mine]}}\\ \hline
+\texttt{laser} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=laser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=laser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=laser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=laser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=laser]}}\\ \hline
+\texttt{light grenade launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=light grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=light grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=light grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=light grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=light grenade launcher]}}\\ \hline
+\texttt{light machine gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=light machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=light machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=light machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=light machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=light machine gun]}}\\ \hline
+\texttt{light tank} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=light tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=light tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=light tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=light tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=light tank]}}\\ \hline
+\texttt{machine gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=machine gun]}}\\ \hline
+\texttt{medical evacuation armoured protected vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=medical evacuation armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=medical evacuation armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=medical evacuation armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=medical evacuation armoured protected vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=medical evacuation armoured protected vehicle]}}\\ \hline
+\texttt{medical evacuation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=medical evacuation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=medical evacuation]}}\\ \hline
+\texttt{medical vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=medical vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=medical vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=medical vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=medical vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=medical vehicle]}}\\ \hline
+\texttt{medium grenade launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=medium grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=medium grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=medium grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=medium grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=medium grenade launcher]}}\\ \hline
+\texttt{medium machine gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=medium machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=medium machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=medium machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=medium machine gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=medium machine gun]}}\\ \hline
+\texttt{medium tank} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=medium tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=medium tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=medium tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=medium tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=medium tank]}}\\ \hline
+\texttt{mine clearing equipment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=mine clearing equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=mine clearing equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=mine clearing equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=mine clearing equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=mine clearing equipment]}}\\ \hline
+\texttt{mine clearing vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=mine clearing vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=mine clearing vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=mine clearing vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=mine clearing vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=mine clearing vehicle]}}\\ \hline
+\texttt{mine laying equipment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=mine laying equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=mine laying equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=mine laying equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=mine laying equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=mine laying equipment]}}\\ \hline
+\texttt{mine laying vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=mine laying vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=mine laying vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=mine laying vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=mine laying vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=mine laying vehicle]}}\\ \hline
+\texttt{missile launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=missile launcher]}}\\ \hline
+\texttt{mobile emergency physician} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=mobile emergency physician]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=mobile emergency physician]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=mobile emergency physician]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=mobile emergency physician]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=mobile emergency physician]}}\\ \hline
+\texttt{mortar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=mortar]}}\\ \hline
+\texttt{multifunctional earthmover} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=multifunctional earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=multifunctional earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=multifunctional earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=multifunctional earthmover]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=multifunctional earthmover]}}\\ \hline
+\texttt{multiple rocket launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=multiple rocket launcher]}}\\ \hline
+\texttt{non lethal grenade launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=non lethal grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=non lethal grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=non lethal grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=non lethal grenade launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=non lethal grenade launcher]}}\\ \hline
+\texttt{non lethal weapon} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=non lethal weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=non lethal weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=non lethal weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=non lethal weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=non lethal weapon]}}\\ \hline
+\texttt{petroleum oil and lubricants vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=petroleum oil and lubricants vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=petroleum oil and lubricants vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=petroleum oil and lubricants vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=petroleum oil and lubricants vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=petroleum oil and lubricants vehicle]}}\\ \hline
+\texttt{psychological operations equipment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=psychological operations equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=psychological operations equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=psychological operations equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=psychological operations equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=psychological operations equipment]}}\\ \hline
+\texttt{radar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=radar]}}\\ \hline
+\texttt{recoilless gun} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=recoilless gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=recoilless gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=recoilless gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=recoilless gun]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=recoilless gun]}}\\ \hline
+\texttt{rifle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=rifle]}}\\ \hline
+\texttt{semi automatic rifle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=semi automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=semi automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=semi automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=semi automatic rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=semi automatic rifle]}}\\ \hline
+\texttt{semi trailer truck} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=semi trailer truck]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=semi trailer truck]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=semi trailer truck]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=semi trailer truck]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=semi trailer truck]}}\\ \hline
+\texttt{sensor emplaced} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=sensor emplaced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=sensor emplaced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=sensor emplaced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=sensor emplaced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=sensor emplaced]}}\\ \hline
+\texttt{sensor} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=sensor]}}\\ \hline
+\texttt{single rocket launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=single rocket launcher]}}\\ \hline
+\texttt{single shot rifle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=single shot rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=single shot rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=single shot rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=single shot rifle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=single shot rifle]}}\\ \hline
+\texttt{surface to surface missile launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=surface to surface missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=surface to surface missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=surface to surface missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=surface to surface missile launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=surface to surface missile launcher]}}\\ \hline
+\texttt{tank recovery vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=tank recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=tank recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=tank recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=tank recovery vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=tank recovery vehicle]}}\\ \hline
+\texttt{tank} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=tank]}}\\ \hline
+\texttt{taser} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=taser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=taser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=taser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=taser]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=taser]}}\\ \hline
+\texttt{train locomotive} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=train locomotive]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=train locomotive]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=train locomotive]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=train locomotive]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=train locomotive]}}\\ \hline
+\texttt{utility vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=utility vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=utility vehicle]}}\\ \hline
+\texttt{water cannon} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=water cannon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=water cannon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=water cannon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=water cannon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=water cannon]}}\\ \hline
+\texttt{water vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, main=water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, main=water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, main=water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, main=water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, main=water vehicle]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilEquipment}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Equipment_mobility_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Equipment_mobility_table.tex
new file mode 100644
index 0000000000..fd7c6de4ba
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Equipment_mobility_table.tex
@@ -0,0 +1,18 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{amphibious} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=amphibious]}}\\ \hline
+\texttt{barge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=barge]}}\\ \hline
+\texttt{over snow} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=over snow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=over snow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=over snow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=over snow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=over snow]}}\\ \hline
+\texttt{pack animal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=pack animal]}}\\ \hline
+\texttt{railroad} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=railroad]}}\\ \hline
+\texttt{sled} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=sled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=sled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=sled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=sled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=sled]}}\\ \hline
+\texttt{towed} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=towed]}}\\ \hline
+\texttt{tracked} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=tracked]}}\\ \hline
+\texttt{wheeled and tracked} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=wheeled and tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=wheeled and tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=wheeled and tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=wheeled and tracked]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=wheeled and tracked]}}\\ \hline
+\texttt{wheeled cross country} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=wheeled cross country]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=wheeled cross country]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=wheeled cross country]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=wheeled cross country]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=wheeled cross country]}}\\ \hline
+\texttt{wheeled limited mobility} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=wheeled limited mobility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=wheeled limited mobility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=wheeled limited mobility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=wheeled limited mobility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=wheeled limited mobility]}}\\ \hline
+\texttt{wheeled semi trailer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=none, mobility=wheeled semi trailer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly, mobility=wheeled semi trailer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile, mobility=wheeled semi trailer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral, mobility=wheeled semi trailer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=unknown, mobility=wheeled semi trailer]}}\\ \hline
+\caption{Table for \texttt{mobility} values in the \textbf{\texttt{MilEquipment}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Installation_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Installation_main_table.tex
new file mode 100644
index 0000000000..643eea97b2
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Installation_main_table.tex
@@ -0,0 +1,27 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{ammunition cache} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=ammunition cache]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=ammunition cache]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=ammunition cache]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=ammunition cache]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=ammunition cache]}}\\ \hline
+\texttt{black list location} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=black list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=black list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=black list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=black list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=black list location]}}\\ \hline
+\texttt{broadcast transmitter antenna} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=broadcast transmitter antenna]}}\\ \hline
+\texttt{chemical biological radiological nuclear} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=chemical biological radiological nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=chemical biological radiological nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=chemical biological radiological nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=chemical biological radiological nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=chemical biological radiological nuclear]}}\\ \hline
+\texttt{civilian telecommunications} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=civilian telecommunications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=civilian telecommunications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=civilian telecommunications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=civilian telecommunications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=civilian telecommunications]}}\\ \hline
+\texttt{electric power} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=electric power]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=electric power]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=electric power]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=electric power]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=electric power]}}\\ \hline
+\texttt{food distribution} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=food distribution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=food distribution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=food distribution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=food distribution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=food distribution]}}\\ \hline
+\texttt{grey list location} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=grey list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=grey list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=grey list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=grey list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=grey list location]}}\\ \hline
+\texttt{mass grave site} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=mass grave site]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=mass grave site]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=mass grave site]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=mass grave site]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=mass grave site]}}\\ \hline
+\texttt{medical treatment facility} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=medical treatment facility]}}\\ \hline
+\texttt{medical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=medical]}}\\ \hline
+\texttt{mine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=mine]}}\\ \hline
+\texttt{naval} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=naval]}}\\ \hline
+\texttt{nuclear} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=nuclear]}}\\ \hline
+\texttt{printed media} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=printed media]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=printed media]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=printed media]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=printed media]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=printed media]}}\\ \hline
+\texttt{safe house} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=safe house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=safe house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=safe house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=safe house]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=safe house]}}\\ \hline
+\texttt{transportation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=transportation]}}\\ \hline
+\texttt{transportation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=transportation]}}\\ \hline
+\texttt{water treatment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=water treatment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=water treatment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=water treatment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=water treatment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=water treatment]}}\\ \hline
+\texttt{water} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=water]}}\\ \hline
+\texttt{white list location} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, main=white list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, main=white list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, main=white list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, main=white list location]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, main=white list location]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilInstallation}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Installation_upper_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Installation_upper_table.tex
new file mode 100644
index 0000000000..98738c731b
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Installation_upper_table.tex
@@ -0,0 +1,20 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{biological} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=biological]}}\\ \hline
+\texttt{chemical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=chemical]}}\\ \hline
+\texttt{coal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=coal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=coal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=coal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=coal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=coal]}}\\ \hline
+\texttt{geothermal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=geothermal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=geothermal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=geothermal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=geothermal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=geothermal]}}\\ \hline
+\texttt{hydroelectric} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=hydroelectric]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=hydroelectric]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=hydroelectric]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=hydroelectric]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=hydroelectric]}}\\ \hline
+\texttt{natural gas} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=natural gas]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=natural gas]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=natural gas]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=natural gas]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=natural gas]}}\\ \hline
+\texttt{nuclear energy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=nuclear energy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=nuclear energy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=nuclear energy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=nuclear energy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=nuclear energy]}}\\ \hline
+\texttt{nuclear} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=nuclear]}}\\ \hline
+\texttt{petroleum} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=petroleum]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=petroleum]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=petroleum]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=petroleum]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=petroleum]}}\\ \hline
+\texttt{radio} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=radio]}}\\ \hline
+\texttt{railroad} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=railroad]}}\\ \hline
+\texttt{telephone} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=telephone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=telephone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=telephone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=telephone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=telephone]}}\\ \hline
+\texttt{television} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=television]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=television]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=television]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=television]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=television]}}\\ \hline
+\texttt{yard} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=none, upper=yard]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly, upper=yard]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile, upper=yard]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral, upper=yard]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown, upper=yard]}}\\ \hline
+\caption{Table for \texttt{upper} values in the \textbf{\texttt{MilInstallation}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Land_lower_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Land_lower_table.tex
new file mode 100644
index 0000000000..896bac8d7a
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Land_lower_table.tex
@@ -0,0 +1,51 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{airborne} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=airborne]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=airborne]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=airborne]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=airborne]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=airborne]}}\\ \hline
+\texttt{arctic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=arctic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=arctic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=arctic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=arctic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=arctic]}}\\ \hline
+\texttt{battle damage repair} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=battle damage repair]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=battle damage repair]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=battle damage repair]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=battle damage repair]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=battle damage repair]}}\\ \hline
+\texttt{bicycle equipped} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=bicycle equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=bicycle equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=bicycle equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=bicycle equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=bicycle equipped]}}\\ \hline
+\texttt{clearing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=clearing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=clearing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=clearing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=clearing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=clearing]}}\\ \hline
+\texttt{close range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=close range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=close range]}}\\ \hline
+\texttt{control} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=control]}}\\ \hline
+\texttt{decontamination} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=decontamination]}}\\ \hline
+\texttt{demolition} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=demolition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=demolition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=demolition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=demolition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=demolition]}}\\ \hline
+\texttt{dental} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=dental]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=dental]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=dental]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=dental]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=dental]}}\\ \hline
+\texttt{digital} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=digital]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=digital]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=digital]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=digital]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=digital]}}\\ \hline
+\texttt{enhanced location reporting system} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=enhanced location reporting system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=enhanced location reporting system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=enhanced location reporting system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=enhanced location reporting system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=enhanced location reporting system]}}\\ \hline
+\texttt{equipment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=equipment]}}\\ \hline
+\texttt{heavy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=heavy]}}\\ \hline
+\texttt{intensive care} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=intensive care]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=intensive care]}}\\ \hline
+\texttt{intermodal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=intermodal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=intermodal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=intermodal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=intermodal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=intermodal]}}\\ \hline
+\texttt{laboratory} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=laboratory]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=laboratory]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=laboratory]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=laboratory]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=laboratory]}}\\ \hline
+\texttt{launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=launcher]}}\\ \hline
+\texttt{light} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=light]}}\\ \hline
+\texttt{long range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=long range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=long range]}}\\ \hline
+\texttt{medium range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=medium range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=medium range]}}\\ \hline
+\texttt{mountain} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=mountain]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=mountain]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=mountain]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=mountain]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=mountain]}}\\ \hline
+\texttt{multi channel} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=multi channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=multi channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=multi channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=multi channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=multi channel]}}\\ \hline
+\texttt{optical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=optical]}}\\ \hline
+\texttt{pack animal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=pack animal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=pack animal]}}\\ \hline
+\texttt{patient evacuation coordination} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=patient evacuation coordination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=patient evacuation coordination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=patient evacuation coordination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=patient evacuation coordination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=patient evacuation coordination]}}\\ \hline
+\texttt{preventative maintenance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=preventative maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=preventative maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=preventative maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=preventative maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=preventative maintenance]}}\\ \hline
+\texttt{psychological} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=psychological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=psychological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=psychological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=psychological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=psychological]}}\\ \hline
+\texttt{radio relay line of sight} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=radio relay line of sight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=radio relay line of sight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=radio relay line of sight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=radio relay line of sight]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=radio relay line of sight]}}\\ \hline
+\texttt{railroad} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=railroad]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=railroad]}}\\ \hline
+\texttt{recovery maintenance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=recovery maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=recovery maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=recovery maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=recovery maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=recovery maintenance]}}\\ \hline
+\texttt{recovery unmanned systems} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=recovery unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=recovery unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=recovery unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=recovery unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=recovery unmanned systems]}}\\ \hline
+\texttt{rescue coordination centre} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=rescue coordination centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=rescue coordination centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=rescue coordination centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=rescue coordination centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=rescue coordination centre]}}\\ \hline
+\texttt{riverine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=riverine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=riverine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=riverine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=riverine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=riverine]}}\\ \hline
+\texttt{short range} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=short range]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=short range]}}\\ \hline
+\texttt{single channel} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=single channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=single channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=single channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=single channel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=single channel]}}\\ \hline
+\texttt{ski} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=ski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=ski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=ski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=ski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=ski]}}\\ \hline
+\texttt{strategic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=strategic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=strategic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=strategic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=strategic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=strategic]}}\\ \hline
+\texttt{support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=support]}}\\ \hline
+\texttt{tactical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=tactical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=tactical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=tactical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=tactical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=tactical]}}\\ \hline
+\texttt{towed} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=towed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=towed]}}\\ \hline
+\texttt{troop} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=troop]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=troop]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=troop]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=troop]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=troop]}}\\ \hline
+\texttt{vertical of short takeoff and landing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=vertical of short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=vertical of short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=vertical of short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=vertical of short takeoff and landing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=vertical of short takeoff and landing]}}\\ \hline
+\texttt{veterinary} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=veterinary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=veterinary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=veterinary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=veterinary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=veterinary]}}\\ \hline
+\texttt{wheeled} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, lower=wheeled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, lower=wheeled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, lower=wheeled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, lower=wheeled]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, lower=wheeled]}}\\ \hline
+\caption{Table for \texttt{lower} values in the \textbf{\texttt{MilLand}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Land_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Land_main_table.tex
new file mode 100644
index 0000000000..1e957b4552
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Land_main_table.tex
@@ -0,0 +1,130 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{above corps support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=above corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=above corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=above corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=above corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=above corps support]}}\\ \hline
+\texttt{administrative} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=administrative]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=administrative]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=administrative]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=administrative]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=administrative]}}\\ \hline
+\texttt{air and naval gunfire liaison company} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=air and naval gunfire liaison company]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=air and naval gunfire liaison company]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=air and naval gunfire liaison company]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=air and naval gunfire liaison company]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=air and naval gunfire liaison company]}}\\ \hline
+\texttt{air assault with organic lift} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=air assault with organic lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=air assault with organic lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=air assault with organic lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=air assault with organic lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=air assault with organic lift]}}\\ \hline
+\texttt{air defence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=air defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=air defence]}}\\ \hline
+\texttt{air traffic services} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=air traffic services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=air traffic services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=air traffic services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=air traffic services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=air traffic services]}}\\ \hline
+\texttt{ammunition} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=ammunition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=ammunition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=ammunition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=ammunition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=ammunition]}}\\ \hline
+\texttt{amphibious} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=amphibious]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=amphibious]}}\\ \hline
+\texttt{analysis electronic warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=analysis electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=analysis electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=analysis electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=analysis electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=analysis electronic warfare]}}\\ \hline
+\texttt{analysis} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=analysis]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=analysis]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=analysis]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=analysis]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=analysis]}}\\ \hline
+\texttt{anti tank anti armour} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=anti tank anti armour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=anti tank anti armour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=anti tank anti armour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=anti tank anti armour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=anti tank anti armour]}}\\ \hline
+\texttt{armoured engineer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=armoured engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=armoured engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=armoured engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=armoured engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=armoured engineer]}}\\ \hline
+\texttt{armoured} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=armoured]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=armoured]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=armoured]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=armoured]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=armoured]}}\\ \hline
+\texttt{aviation composite fixed wing and rotary wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=aviation composite fixed wing and rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=aviation composite fixed wing and rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=aviation composite fixed wing and rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=aviation composite fixed wing and rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=aviation composite fixed wing and rotary wing]}}\\ \hline
+\texttt{aviation fixed wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=aviation fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=aviation fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=aviation fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=aviation fixed wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=aviation fixed wing]}}\\ \hline
+\texttt{aviation rotary wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=aviation rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=aviation rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=aviation rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=aviation rotary wing]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=aviation rotary wing]}}\\ \hline
+\texttt{band} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=band]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=band]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=band]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=band]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=band]}}\\ \hline
+\texttt{broadcast transmitter antenna} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=broadcast transmitter antenna]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=broadcast transmitter antenna]}}\\ \hline
+\texttt{chemical biological radiological nuclear defence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=chemical biological radiological nuclear defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=chemical biological radiological nuclear defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=chemical biological radiological nuclear defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=chemical biological radiological nuclear defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=chemical biological radiological nuclear defence]}}\\ \hline
+\texttt{civil affairs} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=civil affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=civil affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=civil affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=civil affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=civil affairs]}}\\ \hline
+\texttt{civilian military cooperation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=civilian military cooperation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=civilian military cooperation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=civilian military cooperation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=civilian military cooperation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=civilian military cooperation]}}\\ \hline
+\texttt{civilian police} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=civilian police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=civilian police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=civilian police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=civilian police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=civilian police]}}\\ \hline
+\texttt{combat service support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=combat service support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=combat service support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=combat service support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=combat service support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=combat service support]}}\\ \hline
+\texttt{combat support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=combat support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=combat support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=combat support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=combat support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=combat support]}}\\ \hline
+\texttt{combat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=combat]}}\\ \hline
+\texttt{combined arms} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=combined arms]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=combined arms]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=combined arms]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=combined arms]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=combined arms]}}\\ \hline
+\texttt{corps support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=corps support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=corps support]}}\\ \hline
+\texttt{counter intelligence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=counter intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=counter intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=counter intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=counter intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=counter intelligence]}}\\ \hline
+\texttt{criminal investigation division} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=criminal investigation division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=criminal investigation division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=criminal investigation division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=criminal investigation division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=criminal investigation division]}}\\ \hline
+\texttt{direction finding electronic warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=direction finding electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=direction finding electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=direction finding electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=direction finding electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=direction finding electronic warfare]}}\\ \hline
+\texttt{direction finding} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=direction finding]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=direction finding]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=direction finding]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=direction finding]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=direction finding]}}\\ \hline
+\texttt{diving} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=diving]}}\\ \hline
+\texttt{dog} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=dog]}}\\ \hline
+\texttt{drilling} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=drilling]}}\\ \hline
+\texttt{electronic ordinance disposal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=electronic ordinance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=electronic ordinance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=electronic ordinance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=electronic ordinance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=electronic ordinance disposal]}}\\ \hline
+\texttt{electronic ranging} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=electronic ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=electronic ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=electronic ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=electronic ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=electronic ranging]}}\\ \hline
+\texttt{electronic warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=electronic warfare]}}\\ \hline
+\texttt{engineer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=engineer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=engineer]}}\\ \hline
+\texttt{environmental protection} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=environmental protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=environmental protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=environmental protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=environmental protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=environmental protection]}}\\ \hline
+\texttt{field artillery observer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=field artillery observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=field artillery observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=field artillery observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=field artillery observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=field artillery observer]}}\\ \hline
+\texttt{field artillery} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=field artillery]}}\\ \hline
+\texttt{finance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=finance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=finance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=finance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=finance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=finance]}}\\ \hline
+\texttt{fire protection} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=fire protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=fire protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=fire protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=fire protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=fire protection]}}\\ \hline
+\texttt{geospatial support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=geospatial support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=geospatial support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=geospatial support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=geospatial support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=geospatial support]}}\\ \hline
+\texttt{government organization} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=government organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=government organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=government organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=government organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=government organization]}}\\ \hline
+\texttt{headquarters} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=headquarters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=headquarters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=headquarters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=headquarters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=headquarters]}}\\ \hline
+\texttt{individual} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=individual]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=individual]}}\\ \hline
+\texttt{infantry} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=infantry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=infantry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=infantry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=infantry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=infantry]}}\\ \hline
+\texttt{information operations} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=information operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=information operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=information operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=information operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=information operations]}}\\ \hline
+\texttt{intercept electronic warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=intercept electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=intercept electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=intercept electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=intercept electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=intercept electronic warfare]}}\\ \hline
+\texttt{intercept} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=intercept]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=intercept]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=intercept]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=intercept]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=intercept]}}\\ \hline
+\texttt{internal security force} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=internal security force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=internal security force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=internal security force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=internal security force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=internal security force]}}\\ \hline
+\texttt{interrogation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=interrogation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=interrogation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=interrogation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=interrogation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=interrogation]}}\\ \hline
+\texttt{jamming electronic warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=jamming electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=jamming electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=jamming electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=jamming electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=jamming electronic warfare]}}\\ \hline
+\texttt{jamming} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=jamming]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=jamming]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=jamming]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=jamming]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=jamming]}}\\ \hline
+\texttt{joint fire support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=joint fire support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=joint fire support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=joint fire support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=joint fire support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=joint fire support]}}\\ \hline
+\texttt{judge advocate general} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=judge advocate general]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=judge advocate general]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=judge advocate general]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=judge advocate general]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=judge advocate general]}}\\ \hline
+\texttt{killing victim} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=killing victim]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=killing victim]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=killing victim]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=killing victim]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=killing victim]}}\\ \hline
+\texttt{killing victims} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=killing victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=killing victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=killing victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=killing victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=killing victims]}}\\ \hline
+\texttt{labour} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=labour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=labour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=labour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=labour]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=labour]}}\\ \hline
+\texttt{laundry} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=laundry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=laundry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=laundry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=laundry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=laundry]}}\\ \hline
+\texttt{liaison} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=liaison]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=liaison]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=liaison]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=liaison]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=liaison]}}\\ \hline
+\texttt{main gun system} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=main gun system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=main gun system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=main gun system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=main gun system]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=main gun system]}}\\ \hline
+\texttt{maintenance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=maintenance]}}\\ \hline
+\texttt{material} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=material]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=material]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=material]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=material]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=material]}}\\ \hline
+\texttt{medical treatment facility} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=medical treatment facility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=medical treatment facility]}}\\ \hline
+\texttt{medical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=medical]}}\\ \hline
+\texttt{meteorological} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=meteorological]}}\\ \hline
+\texttt{military intelligence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=military intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=military intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=military intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=military intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=military intelligence]}}\\ \hline
+\texttt{military police} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=military police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=military police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=military police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=military police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=military police]}}\\ \hline
+\texttt{mine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=mine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=mine]}}\\ \hline
+\texttt{missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=missile]}}\\ \hline
+\texttt{morale welfare and recreation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=morale welfare and recreation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=morale welfare and recreation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=morale welfare and recreation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=morale welfare and recreation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=morale welfare and recreation]}}\\ \hline
+\texttt{mortar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=mortar]}}\\ \hline
+\texttt{mortuary affairs} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=mortuary affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=mortuary affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=mortuary affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=mortuary affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=mortuary affairs]}}\\ \hline
+\texttt{motorized} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=motorized]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=motorized]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=motorized]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=motorized]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=motorized]}}\\ \hline
+\texttt{naval} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=naval]}}\\ \hline
+\texttt{observer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=observer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=observer]}}\\ \hline
+\texttt{ordnance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=ordnance]}}\\ \hline
+\texttt{organisation or group} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=organisation or group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=organisation or group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=organisation or group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=organisation or group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=organisation or group]}}\\ \hline
+\texttt{personnel services} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=personnel services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=personnel services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=personnel services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=personnel services]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=personnel services]}}\\ \hline
+\texttt{petroleum oil and lubricants} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=petroleum oil and lubricants]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=petroleum oil and lubricants]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=petroleum oil and lubricants]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=petroleum oil and lubricants]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=petroleum oil and lubricants]}}\\ \hline
+\texttt{pipeline} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=pipeline]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=pipeline]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=pipeline]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=pipeline]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=pipeline]}}\\ \hline
+\texttt{postal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=postal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=postal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=postal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=postal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=postal]}}\\ \hline
+\texttt{psychological operations broadcast} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=psychological operations broadcast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=psychological operations broadcast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=psychological operations broadcast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=psychological operations broadcast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=psychological operations broadcast]}}\\ \hline
+\texttt{psychological operations} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=psychological operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=psychological operations]}}\\ \hline
+\texttt{public affairs} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=public affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=public affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=public affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=public affairs]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=public affairs]}}\\ \hline
+\texttt{quartermaster} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=quartermaster]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=quartermaster]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=quartermaster]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=quartermaster]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=quartermaster]}}\\ \hline
+\texttt{radar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=radar]}}\\ \hline
+\texttt{radio relay} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=radio relay]}}\\ \hline
+\texttt{radio teletype centre} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=radio teletype centre]}}\\ \hline
+\texttt{radio} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=radio]}}\\ \hline
+\texttt{reconnaissance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=reconnaissance]}}\\ \hline
+\texttt{religious support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=religious support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=religious support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=religious support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=religious support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=religious support]}}\\ \hline
+\texttt{replacement holding unit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=replacement holding unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=replacement holding unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=replacement holding unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=replacement holding unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=replacement holding unit]}}\\ \hline
+\texttt{sea air land} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=sea air land]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=sea air land]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=sea air land]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=sea air land]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=sea air land]}}\\ \hline
+\texttt{search electronic warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=search electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=search electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=search electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=search electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=search electronic warfare]}}\\ \hline
+\texttt{search} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=search]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=search]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=search]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=search]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=search]}}\\ \hline
+\texttt{security} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=security]}}\\ \hline
+\texttt{self propelled field artillery} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=self propelled field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=self propelled field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=self propelled field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=self propelled field artillery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=self propelled field artillery]}}\\ \hline
+\texttt{sensor} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=sensor]}}\\ \hline
+\texttt{shore patrol security police} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=shore patrol security police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=shore patrol security police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=shore patrol security police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=shore patrol security police]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=shore patrol security police]}}\\ \hline
+\texttt{signal radio relay} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=signal radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=signal radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=signal radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=signal radio relay]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=signal radio relay]}}\\ \hline
+\texttt{signal radio teletype centre} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=signal radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=signal radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=signal radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=signal radio teletype centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=signal radio teletype centre]}}\\ \hline
+\texttt{signal radio} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=signal radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=signal radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=signal radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=signal radio]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=signal radio]}}\\ \hline
+\texttt{signal tactical satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=signal tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=signal tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=signal tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=signal tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=signal tactical satellite]}}\\ \hline
+\texttt{signal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=signal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=signal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=signal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=signal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=signal]}}\\ \hline
+\texttt{sniper} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=sniper]}}\\ \hline
+\texttt{special forces} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=special forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=special forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=special forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=special forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=special forces]}}\\ \hline
+\texttt{special operations forces} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=special operations forces]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=special operations forces]}}\\ \hline
+\texttt{spy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=spy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=spy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=spy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=spy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=spy]}}\\ \hline
+\texttt{supply} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=supply]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=supply]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=supply]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=supply]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=supply]}}\\ \hline
+\texttt{surveillance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=surveillance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=surveillance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=surveillance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=surveillance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=surveillance]}}\\ \hline
+\texttt{survey} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=survey]}}\\ \hline
+\texttt{sustainment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=sustainment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=sustainment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=sustainment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=sustainment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=sustainment]}}\\ \hline
+\texttt{tactical mortar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=tactical mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=tactical mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=tactical mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=tactical mortar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=tactical mortar]}}\\ \hline
+\texttt{tactical satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=tactical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=tactical satellite]}}\\ \hline
+\texttt{topographic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=topographic]}}\\ \hline
+\texttt{transportation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=transportation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=transportation]}}\\ \hline
+\texttt{unmanned systems} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=unmanned systems]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=unmanned systems]}}\\ \hline
+\texttt{victim of an attempted crime} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=victim of an attempted crime]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=victim of an attempted crime]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=victim of an attempted crime]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=victim of an attempted crime]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=victim of an attempted crime]}}\\ \hline
+\texttt{video imagery} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=video imagery]}}\\ \hline
+\texttt{water purification} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=water purification]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=water purification]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=water purification]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=water purification]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=water purification]}}\\ \hline
+\texttt{water} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, main=water]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, main=water]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilLand}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Land_upper_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Land_upper_table.tex
new file mode 100644
index 0000000000..94f576a650
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Land_upper_table.tex
@@ -0,0 +1,93 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{Mil medical role 1} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=Mil medical role 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=Mil medical role 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=Mil medical role 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=Mil medical role 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=Mil medical role 1]}}\\ \hline
+\texttt{Mil medical role 2} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=Mil medical role 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=Mil medical role 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=Mil medical role 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=Mil medical role 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=Mil medical role 2]}}\\ \hline
+\texttt{Mil medical role 3} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=Mil medical role 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=Mil medical role 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=Mil medical role 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=Mil medical role 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=Mil medical role 3]}}\\ \hline
+\texttt{Mil medical role 4} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=Mil medical role 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=Mil medical role 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=Mil medical role 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=Mil medical role 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=Mil medical role 4]}}\\ \hline
+\texttt{air assault} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=air assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=air assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=air assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=air assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=air assault]}}\\ \hline
+\texttt{area} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=area]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=area]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=area]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=area]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=area]}}\\ \hline
+\texttt{assassination} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=assassination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=assassination]}}\\ \hline
+\texttt{attack} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=attack]}}\\ \hline
+\texttt{biological} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=biological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=biological]}}\\ \hline
+\texttt{border} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=border]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=border]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=border]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=border]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=border]}}\\ \hline
+\texttt{bridging} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=bridging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=bridging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=bridging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=bridging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=bridging]}}\\ \hline
+\texttt{chemical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=chemical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=chemical]}}\\ \hline
+\texttt{close protection} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=close protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=close protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=close protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=close protection]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=close protection]}}\\ \hline
+\texttt{coerced or impressed recruit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=coerced or impressed recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=coerced or impressed recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=coerced or impressed recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=coerced or impressed recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=coerced or impressed recruit]}}\\ \hline
+\texttt{combat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=combat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=combat]}}\\ \hline
+\texttt{command and control} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=command and control]}}\\ \hline
+\texttt{communications contingency package} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=communications contingency package]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=communications contingency package]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=communications contingency package]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=communications contingency package]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=communications contingency package]}}\\ \hline
+\texttt{construction} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=construction]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=construction]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=construction]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=construction]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=construction]}}\\ \hline
+\texttt{cross cultural communication} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=cross cultural communication]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=cross cultural communication]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=cross cultural communication]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=cross cultural communication]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=cross cultural communication]}}\\ \hline
+\texttt{crowd and riot control} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=crowd and riot control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=crowd and riot control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=crowd and riot control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=crowd and riot control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=crowd and riot control]}}\\ \hline
+\texttt{decontamination} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=decontamination]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=decontamination]}}\\ \hline
+\texttt{detention} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=detention]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=detention]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=detention]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=detention]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=detention]}}\\ \hline
+\texttt{direct communications} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=direct communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=direct communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=direct communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=direct communications]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=direct communications]}}\\ \hline
+\texttt{displaced persons refugees and evacuees} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=displaced persons refugees and evacuees]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=displaced persons refugees and evacuees]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=displaced persons refugees and evacuees]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=displaced persons refugees and evacuees]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=displaced persons refugees and evacuees]}}\\ \hline
+\texttt{diving} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=diving]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=diving]}}\\ \hline
+\texttt{division} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=division]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=division]}}\\ \hline
+\texttt{dog} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=dog]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=dog]}}\\ \hline
+\texttt{drilling} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=drilling]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=drilling]}}\\ \hline
+\texttt{electro optical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=electro optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=electro optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=electro optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=electro optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=electro optical]}}\\ \hline
+\texttt{enhanced} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=enhanced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=enhanced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=enhanced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=enhanced]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=enhanced]}}\\ \hline
+\texttt{execution} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=execution]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=execution]}}\\ \hline
+\texttt{explosive ordnance disposal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=explosive ordnance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=explosive ordnance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=explosive ordnance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=explosive ordnance disposal]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=explosive ordnance disposal]}}\\ \hline
+\texttt{fire direction centre} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=fire direction centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=fire direction centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=fire direction centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=fire direction centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=fire direction centre]}}\\ \hline
+\texttt{force} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=force]}}\\ \hline
+\texttt{foreign fighters} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=foreign fighters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=foreign fighters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=foreign fighters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=foreign fighters]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=foreign fighters]}}\\ \hline
+\texttt{forward} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=forward]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=forward]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=forward]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=forward]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=forward]}}\\ \hline
+\texttt{gang member or gang} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=gang member or gang]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=gang member or gang]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=gang member or gang]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=gang member or gang]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=gang member or gang]}}\\ \hline
+\texttt{government organisation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=government organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=government organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=government organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=government organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=government organisation]}}\\ \hline
+\texttt{ground station module} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=ground station module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=ground station module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=ground station module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=ground station module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=ground station module]}}\\ \hline
+\texttt{hijacking} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=hijacking]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=hijacking]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=hijacking]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=hijacking]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=hijacking]}}\\ \hline
+\texttt{kidnapping} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=kidnapping]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=kidnapping]}}\\ \hline
+\texttt{landing support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=landing support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=landing support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=landing support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=landing support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=landing support]}}\\ \hline
+\texttt{large extension node} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=large extension node]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=large extension node]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=large extension node]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=large extension node]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=large extension node]}}\\ \hline
+\texttt{leader or leadership} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=leader or leadership]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=leader or leadership]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=leader or leadership]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=leader or leadership]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=leader or leadership]}}\\ \hline
+\texttt{maintenance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=maintenance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=maintenance]}}\\ \hline
+\texttt{meteorological} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=meteorological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=meteorological]}}\\ \hline
+\texttt{mine countermeasure} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=mine countermeasure]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=mine countermeasure]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=mine countermeasure]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=mine countermeasure]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=mine countermeasure]}}\\ \hline
+\texttt{missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=missile]}}\\ \hline
+\texttt{mobile advisor and support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=mobile advisor and support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=mobile advisor and support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=mobile advisor and support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=mobile advisor and support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=mobile advisor and support]}}\\ \hline
+\texttt{mobile subscriber equipment} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=mobile subscriber equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=mobile subscriber equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=mobile subscriber equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=mobile subscriber equipment]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=mobile subscriber equipment]}}\\ \hline
+\texttt{mobility support} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=mobility support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=mobility support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=mobility support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=mobility support]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=mobility support]}}\\ \hline
+\texttt{movement control centre} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=movement control centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=movement control centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=movement control centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=movement control centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=movement control centre]}}\\ \hline
+\texttt{multinational specialized unit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=multinational specialized unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=multinational specialized unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=multinational specialized unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=multinational specialized unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=multinational specialized unit]}}\\ \hline
+\texttt{multinational} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=multinational]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=multinational]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=multinational]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=multinational]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=multinational]}}\\ \hline
+\texttt{multiple rocket launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=multiple rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=multiple rocket launcher]}}\\ \hline
+\texttt{murder victims} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=murder victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=murder victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=murder victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=murder victims]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=murder victims]}}\\ \hline
+\texttt{naval} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=naval]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=naval]}}\\ \hline
+\texttt{node centre} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=node centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=node centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=node centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=node centre]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=node centre]}}\\ \hline
+\texttt{non-governmental organization member or non-governmental organization} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=non-governmental organization member or non-governmental organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=non-governmental organization member or non-governmental organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=non-governmental organization member or non-governmental organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=non-governmental organization member or non-governmental organization]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=non-governmental organization member or non-governmental organization]}}\\ \hline
+\texttt{nuclear} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=nuclear]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=nuclear]}}\\ \hline
+\texttt{operations} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=operations]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=operations]}}\\ \hline
+\texttt{piracy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=piracy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=piracy]}}\\ \hline
+\texttt{radar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=radar]}}\\ \hline
+\texttt{radiological} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=radiological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=radiological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=radiological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=radiological]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=radiological]}}\\ \hline
+\texttt{rape} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=rape]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=rape]}}\\ \hline
+\texttt{religious or religious organisation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=religious or religious organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=religious or religious organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=religious or religious organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=religious or religious organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=religious or religious organisation]}}\\ \hline
+\texttt{runway} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=runway]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=runway]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=runway]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=runway]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=runway]}}\\ \hline
+\texttt{search and rescue} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=search and rescue]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=search and rescue]}}\\ \hline
+\texttt{security} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=security]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=security]}}\\ \hline
+\texttt{sensor control module} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=sensor control module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=sensor control module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=sensor control module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=sensor control module]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=sensor control module]}}\\ \hline
+\texttt{sensor} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=sensor]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=sensor]}}\\ \hline
+\texttt{signals intelligence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=signals intelligence]}}\\ \hline
+\texttt{single rocket launcher} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=single rocket launcher]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=single rocket launcher]}}\\ \hline
+\texttt{single shelter switch} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=single shelter switch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=single shelter switch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=single shelter switch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=single shelter switch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=single shelter switch]}}\\ \hline
+\texttt{smoke} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=smoke]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=smoke]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=smoke]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=smoke]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=smoke]}}\\ \hline
+\texttt{sniper} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=sniper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=sniper]}}\\ \hline
+\texttt{sound ranging} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=sound ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=sound ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=sound ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=sound ranging]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=sound ranging]}}\\ \hline
+\texttt{special weapons and tactics} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=special weapons and tactics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=special weapons and tactics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=special weapons and tactics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=special weapons and tactics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=special weapons and tactics]}}\\ \hline
+\texttt{survey} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=survey]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=survey]}}\\ \hline
+\texttt{tactical exploitation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=tactical exploitation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=tactical exploitation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=tactical exploitation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=tactical exploitation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=tactical exploitation]}}\\ \hline
+\texttt{target acquisition} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=target acquisition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=target acquisition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=target acquisition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=target acquisition]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=target acquisition]}}\\ \hline
+\texttt{targeted individual or organisation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=targeted individual or organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=targeted individual or organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=targeted individual or organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=targeted individual or organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=targeted individual or organisation]}}\\ \hline
+\texttt{terrorist or terrorist organisation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=terrorist or terrorist organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=terrorist or terrorist organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=terrorist or terrorist organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=terrorist or terrorist organisation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=terrorist or terrorist organisation]}}\\ \hline
+\texttt{topographic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=topographic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=topographic]}}\\ \hline
+\texttt{utility} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=utility]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=utility]}}\\ \hline
+\texttt{video imagery} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=video imagery]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=video imagery]}}\\ \hline
+\texttt{willing recruit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, upper=willing recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, upper=willing recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, upper=willing recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, upper=willing recruit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, upper=willing recruit]}}\\ \hline
+\caption{Table for \texttt{upper} values in the \textbf{\texttt{MilLand}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Missile_left_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Missile_left_table.tex
new file mode 100644
index 0000000000..88e9d9426b
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Missile_left_table.tex
@@ -0,0 +1,13 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{air} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, left=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, left=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, left=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, left=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, left=air]}}\\ \hline
+\texttt{anti ballistic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, left=anti ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, left=anti ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, left=anti ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, left=anti ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, left=anti ballistic]}}\\ \hline
+\texttt{ballistic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, left=ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, left=ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, left=ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, left=ballistic]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, left=ballistic]}}\\ \hline
+\texttt{cruise} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, left=cruise]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, left=cruise]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, left=cruise]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, left=cruise]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, left=cruise]}}\\ \hline
+\texttt{space} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, left=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, left=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, left=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, left=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, left=space]}}\\ \hline
+\texttt{sub surface} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, left=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, left=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, left=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, left=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, left=sub surface]}}\\ \hline
+\texttt{surface} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, left=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, left=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, left=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, left=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, left=surface]}}\\ \hline
+\caption{Table for \texttt{left} values in the \textbf{\texttt{MilMissile}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Missile_right_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Missile_right_table.tex
new file mode 100644
index 0000000000..fcf8d90cf1
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Missile_right_table.tex
@@ -0,0 +1,12 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{air} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, right=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, right=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, right=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, right=air]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, right=air]}}\\ \hline
+\texttt{launched} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, right=launched]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, right=launched]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, right=launched]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, right=launched]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, right=launched]}}\\ \hline
+\texttt{missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, right=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, right=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, right=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, right=missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, right=missile]}}\\ \hline
+\texttt{space} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, right=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, right=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, right=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, right=space]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, right=space]}}\\ \hline
+\texttt{sub surface} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, right=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, right=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, right=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, right=sub surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, right=sub surface]}}\\ \hline
+\texttt{surface} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=none, right=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=friendly, right=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=hostile, right=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=neutral, right=surface]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMissile[faction=unknown, right=surface]}}\\ \hline
+\caption{Table for \texttt{right} values in the \textbf{\texttt{MilMissile}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_lower_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_lower_table.tex
new file mode 100644
index 0000000000..df146122d1
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_lower_table.tex
@@ -0,0 +1,22 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{air independent propulsion} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=air independent propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=air independent propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=air independent propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=air independent propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=air independent propulsion]}}\\ \hline
+\texttt{autonomous control} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=autonomous control]}}\\ \hline
+\texttt{diesel propulsion} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=diesel propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=diesel propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=diesel propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=diesel propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=diesel propulsion]}}\\ \hline
+\texttt{diesel type 1} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=diesel type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=diesel type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=diesel type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=diesel type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=diesel type 1]}}\\ \hline
+\texttt{diesel type 2} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=diesel type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=diesel type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=diesel type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=diesel type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=diesel type 2]}}\\ \hline
+\texttt{diesel type 3} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=diesel type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=diesel type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=diesel type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=diesel type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=diesel type 3]}}\\ \hline
+\texttt{expendable} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=expendable]}}\\ \hline
+\texttt{nuclear propulsion} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear propulsion]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear propulsion]}}\\ \hline
+\texttt{nuclear type 1} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear type 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear type 1]}}\\ \hline
+\texttt{nuclear type 2} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear type 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear type 2]}}\\ \hline
+\texttt{nuclear type 3} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear type 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear type 3]}}\\ \hline
+\texttt{nuclear type 4} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear type 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear type 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear type 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear type 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear type 4]}}\\ \hline
+\texttt{nuclear type 5} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear type 5]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear type 5]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear type 5]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear type 5]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear type 5]}}\\ \hline
+\texttt{nuclear type 6} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear type 6]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear type 6]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear type 6]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear type 6]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear type 6]}}\\ \hline
+\texttt{nuclear type 7} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=nuclear type 7]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=nuclear type 7]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=nuclear type 7]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=nuclear type 7]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=nuclear type 7]}}\\ \hline
+\texttt{remotely piloted} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, lower=remotely piloted]}}\\ \hline
+\caption{Table for \texttt{lower} values in the \textbf{\texttt{MilSeaSubsurface}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_main_table.tex
new file mode 100644
index 0000000000..27f2a6e0f0
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_main_table.tex
@@ -0,0 +1,29 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{autonomous underwater vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=autonomous underwater vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=autonomous underwater vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=autonomous underwater vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=autonomous underwater vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=autonomous underwater vehicle]}}\\ \hline
+\texttt{bottomed sea mine decoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=bottomed sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=bottomed sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=bottomed sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=bottomed sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=bottomed sea mine decoy]}}\\ \hline
+\texttt{bottomed submarine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=bottomed submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=bottomed submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=bottomed submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=bottomed submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=bottomed submarine]}}\\ \hline
+\texttt{civilian autonomous underwatervehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=civilian autonomous underwatervehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=civilian autonomous underwatervehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=civilian autonomous underwatervehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=civilian autonomous underwatervehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=civilian autonomous underwatervehicle]}}\\ \hline
+\texttt{civilian diver} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=civilian diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=civilian diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=civilian diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=civilian diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=civilian diver]}}\\ \hline
+\texttt{civilian seabed installation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=civilian seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=civilian seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=civilian seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=civilian seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=civilian seabed installation]}}\\ \hline
+\texttt{civilian submersible} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=civilian submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=civilian submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=civilian submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=civilian submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=civilian submersible]}}\\ \hline
+\texttt{civilian} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=civilian]}}\\ \hline
+\texttt{improvised explosive device} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=improvised explosive device]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=improvised explosive device]}}\\ \hline
+\texttt{military diver} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=military diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=military diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=military diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=military diver]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=military diver]}}\\ \hline
+\texttt{military seabed installation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=military seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=military seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=military seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=military seabed installation]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=military seabed installation]}}\\ \hline
+\texttt{military} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=military]}}\\ \hline
+\texttt{moored sea mine decoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=moored sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=moored sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=moored sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=moored sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=moored sea mine decoy]}}\\ \hline
+\texttt{non submarine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=non submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=non submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=non submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=non submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=non submarine]}}\\ \hline
+\texttt{other submersible} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=other submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=other submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=other submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=other submersible]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=other submersible]}}\\ \hline
+\texttt{sea mine decoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=sea mine decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=sea mine decoy]}}\\ \hline
+\texttt{snorkelling submarine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=snorkelling submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=snorkelling submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=snorkelling submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=snorkelling submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=snorkelling submarine]}}\\ \hline
+\texttt{submarine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=submarine]}}\\ \hline
+\texttt{surfaced submarine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=surfaced submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=surfaced submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=surfaced submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=surfaced submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=surfaced submarine]}}\\ \hline
+\texttt{torpedo} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=torpedo]}}\\ \hline
+\texttt{underwater decoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=underwater decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=underwater decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=underwater decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=underwater decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=underwater decoy]}}\\ \hline
+\texttt{underwater weapon} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=underwater weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=underwater weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=underwater weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=underwater weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=underwater weapon]}}\\ \hline
+\texttt{unexploded ordnance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, main=unexploded ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, main=unexploded ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, main=unexploded ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, main=unexploded ordnance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, main=unexploded ordnance]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilSeaSubsurface}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_upper_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_upper_table.tex
new file mode 100644
index 0000000000..f45937d3c9
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSubsurface_upper_table.tex
@@ -0,0 +1,24 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{anti submarine warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=anti submarine warfare]}}\\ \hline
+\texttt{attack} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=attack]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=attack]}}\\ \hline
+\texttt{auxiliary} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=auxiliary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=auxiliary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=auxiliary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=auxiliary]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=auxiliary]}}\\ \hline
+\texttt{ballistic missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=ballistic missile]}}\\ \hline
+\texttt{certain submarine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=certain submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=certain submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=certain submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=certain submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=certain submarine]}}\\ \hline
+\texttt{command and control} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=command and control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=command and control]}}\\ \hline
+\texttt{guided missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=guided missile]}}\\ \hline
+\texttt{intelligence surveillance reconnaissance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=intelligence surveillance reconnaissance]}}\\ \hline
+\texttt{mine countermeasures} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=mine countermeasures]}}\\ \hline
+\texttt{mine warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=mine warfare]}}\\ \hline
+\texttt{other guided missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=other guided missile]}}\\ \hline
+\texttt{possible submarine high 3} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=possible submarine high 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=possible submarine high 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=possible submarine high 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=possible submarine high 3]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=possible submarine high 3]}}\\ \hline
+\texttt{possible submarine high 4} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=possible submarine high 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=possible submarine high 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=possible submarine high 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=possible submarine high 4]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=possible submarine high 4]}}\\ \hline
+\texttt{possible submarine low 1} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=possible submarine low 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=possible submarine low 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=possible submarine low 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=possible submarine low 1]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=possible submarine low 1]}}\\ \hline
+\texttt{possible submarine low 2} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=possible submarine low 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=possible submarine low 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=possible submarine low 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=possible submarine low 2]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=possible submarine low 2]}}\\ \hline
+\texttt{probable submarine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=probable submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=probable submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=probable submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=probable submarine]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=probable submarine]}}\\ \hline
+\texttt{special operations force} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=special operations force]}}\\ \hline
+\texttt{surface warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=none, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown, upper=surface warfare]}}\\ \hline
+\caption{Table for \texttt{upper} values in the \textbf{\texttt{MilSeaSubsurface}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_lower_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_lower_table.tex
new file mode 100644
index 0000000000..8191ab2ef0
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_lower_table.tex
@@ -0,0 +1,21 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{air cushioned alternate} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=air cushioned alternate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=air cushioned alternate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=air cushioned alternate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=air cushioned alternate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=air cushioned alternate]}}\\ \hline
+\texttt{air cushioned} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=air cushioned]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=air cushioned]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=air cushioned]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=air cushioned]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=air cushioned]}}\\ \hline
+\texttt{autonomous control} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=autonomous control]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=autonomous control]}}\\ \hline
+\texttt{dock} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=dock]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=dock]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=dock]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=dock]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=dock]}}\\ \hline
+\texttt{expendable} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=expendable]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=expendable]}}\\ \hline
+\texttt{fast} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=fast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=fast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=fast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=fast]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=fast]}}\\ \hline
+\texttt{heavy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=heavy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=heavy]}}\\ \hline
+\texttt{hydrofoil} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=hydrofoil]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=hydrofoil]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=hydrofoil]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=hydrofoil]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=hydrofoil]}}\\ \hline
+\texttt{light} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=light]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=light]}}\\ \hline
+\texttt{logistics} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=logistics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=logistics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=logistics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=logistics]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=logistics]}}\\ \hline
+\texttt{medium} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=medium]}}\\ \hline
+\texttt{nuclear powered} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=nuclear powered]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=nuclear powered]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=nuclear powered]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=nuclear powered]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=nuclear powered]}}\\ \hline
+\texttt{remotely piloted} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=remotely piloted]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=remotely piloted]}}\\ \hline
+\texttt{tank} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=tank]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=tank]}}\\ \hline
+\texttt{vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, lower=vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, lower=vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, lower=vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, lower=vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, lower=vehicle]}}\\ \hline
+\caption{Table for \texttt{lower} values in the \textbf{\texttt{MilSeaSurface}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_main_table.tex
new file mode 100644
index 0000000000..f24cac02cc
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_main_table.tex
@@ -0,0 +1,93 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{ammunition ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=ammunition ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=ammunition ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=ammunition ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=ammunition ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=ammunition ship]}}\\ \hline
+\texttt{amphibious assault ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=amphibious assault ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=amphibious assault ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=amphibious assault ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=amphibious assault ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=amphibious assault ship]}}\\ \hline
+\texttt{amphibious assault} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=amphibious assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=amphibious assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=amphibious assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=amphibious assault]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=amphibious assault]}}\\ \hline
+\texttt{amphibious assualt ship helicopter} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=amphibious assualt ship helicopter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=amphibious assualt ship helicopter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=amphibious assualt ship helicopter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=amphibious assualt ship helicopter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=amphibious assualt ship helicopter]}}\\ \hline
+\texttt{amphibious command ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=amphibious command ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=amphibious command ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=amphibious command ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=amphibious command ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=amphibious command ship]}}\\ \hline
+\texttt{amphibious transport} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=amphibious transport]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=amphibious transport]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=amphibious transport]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=amphibious transport]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=amphibious transport]}}\\ \hline
+\texttt{amphibious warfare ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=amphibious warfare ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=amphibious warfare ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=amphibious warfare ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=amphibious warfare ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=amphibious warfare ship]}}\\ \hline
+\texttt{auxiliary flag ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=auxiliary flag ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=auxiliary flag ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=auxiliary flag ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=auxiliary flag ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=auxiliary flag ship]}}\\ \hline
+\texttt{auxiliary ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=auxiliary ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=auxiliary ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=auxiliary ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=auxiliary ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=auxiliary ship]}}\\ \hline
+\texttt{barge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=barge]}}\\ \hline
+\texttt{battleship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=battleship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=battleship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=battleship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=battleship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=battleship]}}\\ \hline
+\texttt{cargo} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=cargo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=cargo]}}\\ \hline
+\texttt{carrier} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=carrier]}}\\ \hline
+\texttt{civilian boat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=civilian boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=civilian boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=civilian boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=civilian boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=civilian boat]}}\\ \hline
+\texttt{civilian jetski} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=civilian jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=civilian jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=civilian jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=civilian jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=civilian jetski]}}\\ \hline
+\texttt{civilian rigid hull inflatable boat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=civilian rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=civilian rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=civilian rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=civilian rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=civilian rigid hull inflatable boat]}}\\ \hline
+\texttt{civilian speedboat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=civilian speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=civilian speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=civilian speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=civilian speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=civilian speedboat]}}\\ \hline
+\texttt{civilian unmanned surface water vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=civilian unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=civilian unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=civilian unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=civilian unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=civilian unmanned surface water vehicle]}}\\ \hline
+\texttt{civilian} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=civilian]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=civilian]}}\\ \hline
+\texttt{combat support ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=combat support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=combat support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=combat support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=combat support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=combat support ship]}}\\ \hline
+\texttt{combatant} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=combatant]}}\\ \hline
+\texttt{container ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=container ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=container ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=container ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=container ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=container ship]}}\\ \hline
+\texttt{convoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=convoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=convoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=convoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=convoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=convoy]}}\\ \hline
+\texttt{corvette} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=corvette]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=corvette]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=corvette]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=corvette]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=corvette]}}\\ \hline
+\texttt{cruiser guided missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=cruiser guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=cruiser guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=cruiser guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=cruiser guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=cruiser guided missile]}}\\ \hline
+\texttt{destroyer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=destroyer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=destroyer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=destroyer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=destroyer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=destroyer]}}\\ \hline
+\texttt{dredge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=dredge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=dredge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=dredge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=dredge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=dredge]}}\\ \hline
+\texttt{drifter} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=drifter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=drifter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=drifter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=drifter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=drifter]}}\\ \hline
+\texttt{ferry} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=ferry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=ferry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=ferry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=ferry]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=ferry]}}\\ \hline
+\texttt{fishing vessel} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=fishing vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=fishing vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=fishing vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=fishing vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=fishing vessel]}}\\ \hline
+\texttt{frigate} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=frigate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=frigate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=frigate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=frigate]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=frigate]}}\\ \hline
+\texttt{harbour tug} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=harbour tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=harbour tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=harbour tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=harbour tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=harbour tug]}}\\ \hline
+\texttt{hazardous material transport ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=hazardous material transport ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=hazardous material transport ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=hazardous material transport ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=hazardous material transport ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=hazardous material transport ship]}}\\ \hline
+\texttt{heavy lift} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=heavy lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=heavy lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=heavy lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=heavy lift]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=heavy lift]}}\\ \hline
+\texttt{hospital ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=hospital ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=hospital ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=hospital ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=hospital ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=hospital ship]}}\\ \hline
+\texttt{hovercraft} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=hovercraft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=hovercraft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=hovercraft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=hovercraft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=hovercraft]}}\\ \hline
+\texttt{intelligence collector} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=intelligence collector]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=intelligence collector]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=intelligence collector]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=intelligence collector]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=intelligence collector]}}\\ \hline
+\texttt{junk} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=junk]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=junk]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=junk]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=junk]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=junk]}}\\ \hline
+\texttt{landing craft} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=landing craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=landing craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=landing craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=landing craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=landing craft]}}\\ \hline
+\texttt{landing ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=landing ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=landing ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=landing ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=landing ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=landing ship]}}\\ \hline
+\texttt{lash carrier} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=lash carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=lash carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=lash carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=lash carrier]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=lash carrier]}}\\ \hline
+\texttt{launch} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=launch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=launch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=launch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=launch]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=launch]}}\\ \hline
+\texttt{law enforcement vessel} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=law enforcement vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=law enforcement vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=law enforcement vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=law enforcement vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=law enforcement vessel]}}\\ \hline
+\texttt{littoral combatant ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=littoral combatant ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=littoral combatant ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=littoral combatant ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=littoral combatant ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=littoral combatant ship]}}\\ \hline
+\texttt{military jetski} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=military jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=military jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=military jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=military jetski]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=military jetski]}}\\ \hline
+\texttt{military rigid hull inflatable boat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=military rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=military rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=military rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=military rigid hull inflatable boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=military rigid hull inflatable boat]}}\\ \hline
+\texttt{military speedboat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=military speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=military speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=military speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=military speedboat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=military speedboat]}}\\ \hline
+\texttt{military unmanned surface water vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=military unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=military unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=military unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=military unmanned surface water vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=military unmanned surface water vehicle]}}\\ \hline
+\texttt{military} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=military]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=military]}}\\ \hline
+\texttt{mine countermeasure support ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=mine countermeasure support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=mine countermeasure support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=mine countermeasure support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=mine countermeasure support ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=mine countermeasure support ship]}}\\ \hline
+\texttt{mine countermeasures} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=mine countermeasures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=mine countermeasures]}}\\ \hline
+\texttt{mine warfare vessel} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=mine warfare vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=mine warfare vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=mine warfare vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=mine warfare vessel]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=mine warfare vessel]}}\\ \hline
+\texttt{minehunter} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=minehunter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=minehunter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=minehunter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=minehunter]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=minehunter]}}\\ \hline
+\texttt{minelayer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=minelayer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=minelayer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=minelayer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=minelayer]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=minelayer]}}\\ \hline
+\texttt{minesweeper drone} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=minesweeper drone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=minesweeper drone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=minesweeper drone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=minesweeper drone]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=minesweeper drone]}}\\ \hline
+\texttt{minesweeper} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=minesweeper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=minesweeper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=minesweeper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=minesweeper]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=minesweeper]}}\\ \hline
+\texttt{multi purpose amphibious assualt ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=multi purpose amphibious assualt ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=multi purpose amphibious assualt ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=multi purpose amphibious assualt ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=multi purpose amphibious assualt ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=multi purpose amphibious assualt ship]}}\\ \hline
+\texttt{naval cargo ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=naval cargo ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=naval cargo ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=naval cargo ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=naval cargo ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=naval cargo ship]}}\\ \hline
+\texttt{navy task element} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=navy task element]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=navy task element]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=navy task element]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=navy task element]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=navy task element]}}\\ \hline
+\texttt{navy task force} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=navy task force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=navy task force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=navy task force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=navy task force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=navy task force]}}\\ \hline
+\texttt{navy task group} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=navy task group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=navy task group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=navy task group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=navy task group]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=navy task group]}}\\ \hline
+\texttt{navy task organisation unit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=navy task organisation unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=navy task organisation unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=navy task organisation unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=navy task organisation unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=navy task organisation unit]}}\\ \hline
+\texttt{navy task unit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=navy task unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=navy task unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=navy task unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=navy task unit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=navy task unit]}}\\ \hline
+\texttt{non combatant} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=non combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=non combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=non combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=non combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=non combatant]}}\\ \hline
+\texttt{non self propelled barge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=non self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=non self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=non self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=non self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=non self propelled barge]}}\\ \hline
+\texttt{ocean going tug} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=ocean going tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=ocean going tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=ocean going tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=ocean going tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=ocean going tug]}}\\ \hline
+\texttt{ocean research ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=ocean research ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=ocean research ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=ocean research ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=ocean research ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=ocean research ship]}}\\ \hline
+\texttt{oiler} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=oiler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=oiler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=oiler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=oiler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=oiler]}}\\ \hline
+\texttt{passenger ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=passenger ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=passenger ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=passenger ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=passenger ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=passenger ship]}}\\ \hline
+\texttt{patrol craft} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=patrol craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=patrol craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=patrol craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=patrol craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=patrol craft]}}\\ \hline
+\texttt{patrol ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=patrol ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=patrol ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=patrol ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=patrol ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=patrol ship]}}\\ \hline
+\texttt{patrol} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=patrol]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=patrol]}}\\ \hline
+\texttt{repair ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=repair ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=repair ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=repair ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=repair ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=repair ship]}}\\ \hline
+\texttt{roll on roll off} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=roll on roll off]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=roll on roll off]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=roll on roll off]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=roll on roll off]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=roll on roll off]}}\\ \hline
+\texttt{sailing boat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=sailing boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=sailing boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=sailing boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=sailing boat]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=sailing boat]}}\\ \hline
+\texttt{sea surface decoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=sea surface decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=sea surface decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=sea surface decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=sea surface decoy]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=sea surface decoy]}}\\ \hline
+\texttt{self propelled barge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=self propelled barge]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=self propelled barge]}}\\ \hline
+\texttt{service craft} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=service craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=service craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=service craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=service craft]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=service craft]}}\\ \hline
+\texttt{ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=ship]}}\\ \hline
+\texttt{stores ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=stores ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=stores ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=stores ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=stores ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=stores ship]}}\\ \hline
+\texttt{submarine tender} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=submarine tender]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=submarine tender]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=submarine tender]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=submarine tender]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=submarine tender]}}\\ \hline
+\texttt{surface combatant} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=surface combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=surface combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=surface combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=surface combatant]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=surface combatant]}}\\ \hline
+\texttt{survey ship} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=survey ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=survey ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=survey ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=survey ship]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=survey ship]}}\\ \hline
+\texttt{tanker} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=tanker]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=tanker]}}\\ \hline
+\texttt{tow} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=tow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=tow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=tow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=tow]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=tow]}}\\ \hline
+\texttt{trawler} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=trawler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=trawler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=trawler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=trawler]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=trawler]}}\\ \hline
+\texttt{tug} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, main=tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, main=tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, main=tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, main=tug]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, main=tug]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilSeaSurface}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_upper_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_upper_table.tex
new file mode 100644
index 0000000000..1c31940e2b
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/SeaSurface_upper_table.tex
@@ -0,0 +1,24 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{anti air warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=anti air warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=anti air warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=anti air warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=anti air warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=anti air warfare]}}\\ \hline
+\texttt{anti submarine warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=anti submarine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=anti submarine warfare]}}\\ \hline
+\texttt{ballistic missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=ballistic missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=ballistic missile]}}\\ \hline
+\texttt{drone equipped} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=drone equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=drone equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=drone equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=drone equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=drone equipped]}}\\ \hline
+\texttt{electronic warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=electronic warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=electronic warfare]}}\\ \hline
+\texttt{escort} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=escort]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=escort]}}\\ \hline
+\texttt{guided missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=guided missile]}}\\ \hline
+\texttt{helicopter equipped} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=helicopter equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=helicopter equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=helicopter equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=helicopter equipped]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=helicopter equipped]}}\\ \hline
+\texttt{intelligence surveillance reconnaissance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=intelligence surveillance reconnaissance]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=intelligence surveillance reconnaissance]}}\\ \hline
+\texttt{medical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=medical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=medical]}}\\ \hline
+\texttt{mine counter measures} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=mine counter measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=mine counter measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=mine counter measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=mine counter measures]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=mine counter measures]}}\\ \hline
+\texttt{mine warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=mine warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=mine warfare]}}\\ \hline
+\texttt{missile defence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=missile defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=missile defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=missile defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=missile defence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=missile defence]}}\\ \hline
+\texttt{other guided missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=other guided missile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=other guided missile]}}\\ \hline
+\texttt{remote multi mission vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=remote multi mission vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=remote multi mission vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=remote multi mission vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=remote multi mission vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=remote multi mission vehicle]}}\\ \hline
+\texttt{special operations force} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=special operations force]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=special operations force]}}\\ \hline
+\texttt{surface warfare} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=surface warfare]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=surface warfare]}}\\ \hline
+\texttt{torpedo} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=none, upper=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=friendly, upper=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=hostile, upper=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=neutral, upper=torpedo]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSurface[faction=unknown, upper=torpedo]}}\\ \hline
+\caption{Table for \texttt{upper} values in the \textbf{\texttt{MilSeaSurface}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Space_lower_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Space_lower_table.tex
new file mode 100644
index 0000000000..4b4a2aca8e
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Space_lower_table.tex
@@ -0,0 +1,10 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{infra red} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, lower=infra red]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, lower=infra red]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, lower=infra red]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, lower=infra red]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, lower=infra red]}}\\ \hline
+\texttt{optical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, lower=optical]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, lower=optical]}}\\ \hline
+\texttt{radar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, lower=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, lower=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, lower=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, lower=radar]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, lower=radar]}}\\ \hline
+\texttt{signals intelligence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, lower=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, lower=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, lower=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, lower=signals intelligence]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, lower=signals intelligence]}}\\ \hline
+\caption{Table for \texttt{lower} values in the \textbf{\texttt{MilSpace}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Space_main_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Space_main_table.tex
new file mode 100644
index 0000000000..531002c9e1
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Space_main_table.tex
@@ -0,0 +1,36 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{anti satellite weapon} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=anti satellite weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=anti satellite weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=anti satellite weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=anti satellite weapon]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=anti satellite weapon]}}\\ \hline
+\texttt{civilian astronomical satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian astronomical satellite]}}\\ \hline
+\texttt{civilian bio satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian bio satellite]}}\\ \hline
+\texttt{civilian capsule} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian capsule]}}\\ \hline
+\texttt{civilian communications satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian communications satellite]}}\\ \hline
+\texttt{civilian earth observation satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian earth observation satellite]}}\\ \hline
+\texttt{civilian miniaturised satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian miniaturised satellite]}}\\ \hline
+\texttt{civilian navigational satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian navigational satellite]}}\\ \hline
+\texttt{civilian orbiter shuttle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian orbiter shuttle]}}\\ \hline
+\texttt{civilian satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian satellite]}}\\ \hline
+\texttt{civilian space station} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian space station]}}\\ \hline
+\texttt{civilian tether satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian tether satellite]}}\\ \hline
+\texttt{civilian weather satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=civilian weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=civilian weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=civilian weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=civilian weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=civilian weather satellite]}}\\ \hline
+\texttt{military astronomical satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military astronomical satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military astronomical satellite]}}\\ \hline
+\texttt{military bio satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military bio satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military bio satellite]}}\\ \hline
+\texttt{military capsule} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military capsule]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military capsule]}}\\ \hline
+\texttt{military communications satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military communications satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military communications satellite]}}\\ \hline
+\texttt{military earth observation satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military earth observation satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military earth observation satellite]}}\\ \hline
+\texttt{military miniaturised satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military miniaturised satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military miniaturised satellite]}}\\ \hline
+\texttt{military navigational satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military navigational satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military navigational satellite]}}\\ \hline
+\texttt{military orbiter shuttle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military orbiter shuttle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military orbiter shuttle]}}\\ \hline
+\texttt{military satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military satellite]}}\\ \hline
+\texttt{military space station} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military space station]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military space station]}}\\ \hline
+\texttt{military tether satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military tether satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military tether satellite]}}\\ \hline
+\texttt{military weather satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=military weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=military weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=military weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=military weather satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=military weather satellite]}}\\ \hline
+\texttt{planet lander} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=planet lander]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=planet lander]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=planet lander]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=planet lander]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=planet lander]}}\\ \hline
+\texttt{reconnaissance satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=reconnaissance satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=reconnaissance satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=reconnaissance satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=reconnaissance satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=reconnaissance satellite]}}\\ \hline
+\texttt{reentry vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=reentry vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=reentry vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=reentry vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=reentry vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=reentry vehicle]}}\\ \hline
+\texttt{satellite} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=satellite]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=satellite]}}\\ \hline
+\texttt{space vehicle} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, main=space vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, main=space vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, main=space vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, main=space vehicle]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, main=space vehicle]}}\\ \hline
+\caption{Table for \texttt{main} values in the \textbf{\texttt{MilSpace}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/Space_upper_table.tex b/graphics/pgf/contrib/milsymb/manual_scripts/Space_upper_table.tex
new file mode 100644
index 0000000000..e7092c177d
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/Space_upper_table.tex
@@ -0,0 +1,12 @@
+\begin{tabularx}{\linewidth}{|m{5cm}|c|c|c|c|c|}
+\hline
+ \thead{Value} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}} \\
+\hline
+\texttt{geostationary orbit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, upper=geostationary orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, upper=geostationary orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, upper=geostationary orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, upper=geostationary orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, upper=geostationary orbit]}}\\ \hline
+\texttt{geosynchronous orbit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, upper=geosynchronous orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, upper=geosynchronous orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, upper=geosynchronous orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, upper=geosynchronous orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, upper=geosynchronous orbit]}}\\ \hline
+\texttt{high earth orbit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, upper=high earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, upper=high earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, upper=high earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, upper=high earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, upper=high earth orbit]}}\\ \hline
+\texttt{low earth orbit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, upper=low earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, upper=low earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, upper=low earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, upper=low earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, upper=low earth orbit]}}\\ \hline
+\texttt{medium earth orbit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, upper=medium earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, upper=medium earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, upper=medium earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, upper=medium earth orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, upper=medium earth orbit]}}\\ \hline
+\texttt{molinya orbit} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=none, upper=molinya orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly, upper=molinya orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile, upper=molinya orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral, upper=molinya orbit]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown, upper=molinya orbit]}}\\ \hline
+\caption{Table for \texttt{upper} values in the \textbf{\texttt{MilSpace}} command.}
+\end{tabularx} \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/gen_hidden.py b/graphics/pgf/contrib/milsymb/manual_scripts/gen_hidden.py
new file mode 100644
index 0000000000..4d437b2906
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/gen_hidden.py
@@ -0,0 +1,67 @@
+import re
+import os
+
+dr = os.path.dirname(__file__)
+fn = os.path.join(dr, '../milsymb.sty')
+f = open(fn, 'r')
+r = f.read()
+f.close()
+
+li = []
+
+for i in ['Air', 'Missile', 'Land', 'Equipment', 'Installation', 'SeaSurface', 'SeaSubsurface', 'Space', 'Activity']:
+ if i == 'Missile':
+ t = re.search(
+ r'\\NewDocumentCommand\\MilMissile{ o D\(\)\{0,0} d\(\) g}{'
+ r'.*left/\.is choice,\n *?(.*?)^(?! *left)'
+ r'.*right/\.is choice,\n *?(.*?)^(?! *right)',
+ r, re.S | re.M)
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(1)))
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(2)))
+
+ elif i == 'Equipment':
+ t = re.search(
+ r'\\NewDocumentCommand\\MilEquipment{ o D\(\)\{0,0} d\(\) g}{'
+ r'.*main/\.is choice,\n *?(.*?)^(?! *main)'
+ r'.*mobility/\.is choice,\n *?(.*?)^(?! *mobility)',
+ r, re.S | re.M) # extract all main, mobility
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(1)))
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(2)))
+
+ elif i == 'Installation' or i == 'Activity':
+ t = re.search(
+ r'\\NewDocumentCommand\\Mil' + i + '{ o D\(\)\{0,0} d\(\) g}{.*?main/\.is choice,\n *(.*?)^(?! *main)'
+ r'.*?upper/\.is choice,\n *(.*?)^(?! *upper)',
+ r, re.S | re.M) # extract all main, upper
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(1)))
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(2)))
+
+ else:
+ t = re.search(
+ r'\\NewDocumentCommand\\Mil' + i + '{ o D\(\)\{0,0} d\(\) g}{.*?main/\.is choice,\n *(.*?)^(?! *main)'
+ r'.*?upper/\.is choice,\n *(.*?)^(?! *upper)'
+ r'.*?lower/\.is choice,\n *(.*?)^(?! *lower)',
+ r, re.S | re.M) # extract all main, upper, lower
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(1)))
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(2)))
+ li.extend(re.split('}(?:\n|, *\n) *', t.group(3)))
+
+li = list(filter(None, li))
+
+li = [re.search('Symb[CUL]=(.*?)(?:,|}|/\\\MilSymb@selectedfaction|$)', k).group(1) for k in li]
+
+co = re.search('%% AIR SYMBOLS %%(.*)%% TEMPLATES %%', r, re.S | re.M).group(1)
+
+co = re.findall('MilSymb (.*?/.*?/.*?)(?:/.*?)?/.pic', co)
+
+li = set(li)
+
+co = set(co)
+
+d = co.difference(li)
+
+d = list(filter(lambda i: not re.search('(multi|/debris/|/mine/)', i), list(d)))
+
+d.sort()
+
+pass
diff --git a/graphics/pgf/contrib/milsymb/manual_scripts/gen_symbol_tables.py b/graphics/pgf/contrib/milsymb/manual_scripts/gen_symbol_tables.py
new file mode 100644
index 0000000000..117ac245c1
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/manual_scripts/gen_symbol_tables.py
@@ -0,0 +1,74 @@
+import re
+import os
+
+
+def maketable(x, y):
+ l = list()
+ s = re.split('}(?:\n|, *\n) *', x)
+ del s[-1]
+ s.sort()
+ c = re.match('^ *(.*?)/', x).group(1) # get type
+ for j in s: # split up into each definition
+ n = re.search('.*?/(.*?)/', j).group(1) # get name
+ if n == 'none' or n == '.unknown':
+ continue # skip if a blank placeholder
+ ro = r'\texttt{' + n + r'} & \adjustbox{valign=m,margin=0.25cm}{\tikz{' \
+ r'\Mil' + y + r'[faction=none, ' + c + r'=' + n + r']}}' \
+ r' & \adjustbox{valign=m,margin=0.25cm}{\tikz{' \
+ r'\Mil' + y + r'[faction=friendly, ' + c + r'=' + n + r']}}' \
+ r' & \adjustbox{valign=m,margin=0.25cm}{\tikz{' \
+ r'\Mil' + y + r'[faction=hostile, ' + c + r'=' + n + r']}}' \
+ r' & \adjustbox{valign=m,margin=0.25cm}{\tikz{' \
+ r'\Mil' + y + r'[faction=neutral, ' + c + r'=' + n + r']}}' \
+ r' & \adjustbox{valign=m,margin=0.25cm}{\tikz{' \
+ r'\Mil' + y + r'[faction=unknown, ' + c + r'=' + n + r']}}' \
+ r'\\ \hline'
+ l.append(ro)
+ ta = '\\begin{tabularx}{\\linewidth}{|m{5cm}|c|c|c|c|c|}\n\\hline\n \\thead{Value} & ' \
+ '\\thead{Glyph} & \multicolumn{4}{c|}{\\thead{Examples}} \\\\ ''\n\\hline\n' + '\n'.join(l) + '\n\\' \
+ 'caption{Table for \\texttt{' + c + '} values in the \\textbf{\\texttt{Mil' + y + '}} command.}' \
+ '\n\\end{tabularx}'
+ ofn = os.path.join(dr, y + '_' + c + '_table.tex')
+ of = open(ofn, 'w')
+ of.write(ta)
+ of.close()
+
+
+dr = os.path.dirname(__file__)
+fn = os.path.join(dr, '../milsymb.sty')
+f = open(fn, 'r')
+r = f.read()
+f.close()
+for i in ['Air', 'Missile', 'Land', 'Equipment', 'Installation', 'SeaSurface', 'SeaSubsurface', 'Space', 'Activity']:
+ if i == 'Missile':
+ t = re.search(
+ r'\\NewDocumentCommand\\MilMissile{ o D\(\)\{0,0} d\(\) g}{'
+ r'.*left/\.is choice,\n *?(.*?)^(?! *left)'
+ r'.*right/\.is choice,\n *?(.*?)^(?! *right)',
+ r, re.S | re.M)
+ maketable(t.group(1), i) # left
+ maketable(t.group(2), i) # right
+ elif i == 'Equipment':
+ t = re.search(
+ r'\\NewDocumentCommand\\MilEquipment{ o D\(\)\{0,0} d\(\) g}{'
+ r'.*main/\.is choice,\n *?(.*?)^(?! *main)'
+ r'.*mobility/\.is choice,\n *?(.*?)^(?! *mobility)',
+ r, re.S | re.M) # extract all main, mobility
+ maketable(t.group(1), i) # main
+ maketable(t.group(2), i) # mobility
+ elif i == 'Installation' or i == 'Activity':
+ t = re.search(
+ r'\\NewDocumentCommand\\Mil' + i + '{ o D\(\)\{0,0} d\(\) g}{.*?main/\.is choice,\n *(.*?)^(?! *main)'
+ r'.*?upper/\.is choice,\n *(.*?)^(?! *upper)',
+ r, re.S | re.M) # extract all main, upper
+ maketable(t.group(1), i) # main
+ maketable(t.group(2), i) # upper
+ else:
+ t = re.search(
+ r'\\NewDocumentCommand\\Mil' + i + '{ o D\(\)\{0,0} d\(\) g}{.*?main/\.is choice,\n *(.*?)^(?! *main)'
+ r'.*?upper/\.is choice,\n *(.*?)^(?! *upper)'
+ r'.*?lower/\.is choice,\n *(.*?)^(?! *lower)',
+ r, re.S | re.M) # extract all main, upper, lower
+ maketable(t.group(1), i) # main
+ maketable(t.group(2), i) # upper
+ maketable(t.group(3), i) # lower
diff --git a/graphics/pgf/contrib/milsymb/milsymb.pdf b/graphics/pgf/contrib/milsymb/milsymb.pdf
new file mode 100644
index 0000000000..6e736c98e0
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/milsymb.pdf
@@ -0,0 +1,13632 @@
+%PDF-1.5
+%ÐÔÅØ
+4 0 obj
+<< /S /GoTo /D (section.1) >>
+endobj
+7 0 obj
+(Introduction)
+endobj
+8 0 obj
+<< /S /GoTo /D (subsection.1.1) >>
+endobj
+11 0 obj
+(Package Summary)
+endobj
+12 0 obj
+<< /S /GoTo /D (subsection.1.2) >>
+endobj
+15 0 obj
+(Package Dependencies)
+endobj
+16 0 obj
+<< /S /GoTo /D (subsection.1.3) >>
+endobj
+19 0 obj
+(Using MilSymb)
+endobj
+20 0 obj
+<< /S /GoTo /D (subsubsection.1.3.1) >>
+endobj
+23 0 obj
+(Package Options)
+endobj
+24 0 obj
+<< /S /GoTo /D (subsubsection.1.3.2) >>
+endobj
+27 0 obj
+(Symbol Construction)
+endobj
+28 0 obj
+<< /S /GoTo /D (section.2) >>
+endobj
+31 0 obj
+(Symbol Commands)
+endobj
+32 0 obj
+<< /S /GoTo /D (subsection.2.1) >>
+endobj
+35 0 obj
+(General Command Structure)
+endobj
+36 0 obj
+<< /S /GoTo /D (subsubsection.2.1.1) >>
+endobj
+39 0 obj
+(Shared Keys)
+endobj
+40 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.1) >>
+endobj
+43 0 obj
+(main)
+endobj
+44 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.2) >>
+endobj
+47 0 obj
+(upper)
+endobj
+48 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.3) >>
+endobj
+51 0 obj
+(lower)
+endobj
+52 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.4) >>
+endobj
+55 0 obj
+(frame status)
+endobj
+56 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.5) >>
+endobj
+59 0 obj
+(faction)
+endobj
+60 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.6) >>
+endobj
+63 0 obj
+(monochrome)
+endobj
+64 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.7) >>
+endobj
+67 0 obj
+(scale)
+endobj
+68 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.8) >>
+endobj
+71 0 obj
+(no frame)
+endobj
+72 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.9) >>
+endobj
+75 0 obj
+(speed leader \(Amplifier\))
+endobj
+76 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.10) >>
+endobj
+79 0 obj
+(offset, movement \(Amplifier\))
+endobj
+80 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.11) >>
+endobj
+83 0 obj
+(feint or dummy \(Amplifier\))
+endobj
+84 0 obj
+<< /S /GoTo /D (paragraph.2.1.1.12) >>
+endobj
+87 0 obj
+(headquarters \(Amplifier\))
+endobj
+88 0 obj
+<< /S /GoTo /D (subsubsection.2.1.2) >>
+endobj
+91 0 obj
+(Text Fields)
+endobj
+92 0 obj
+<< /S /GoTo /D (subsubsection.2.1.3) >>
+endobj
+95 0 obj
+(Full Frame Icons)
+endobj
+96 0 obj
+<< /S /GoTo /D (subsubsection.2.1.4) >>
+endobj
+99 0 obj
+(Grouping)
+endobj
+100 0 obj
+<< /S /GoTo /D (subsection.2.2) >>
+endobj
+103 0 obj
+(Air Command \(MilAir\))
+endobj
+104 0 obj
+<< /S /GoTo /D (subsubsection.2.2.1) >>
+endobj
+107 0 obj
+(Icons and Modifiers)
+endobj
+108 0 obj
+<< /S /GoTo /D (paragraph.2.2.1.1) >>
+endobj
+111 0 obj
+(main)
+endobj
+112 0 obj
+<< /S /GoTo /D (paragraph.2.2.1.2) >>
+endobj
+115 0 obj
+(upper)
+endobj
+116 0 obj
+<< /S /GoTo /D (paragraph.2.2.1.3) >>
+endobj
+119 0 obj
+(lower)
+endobj
+120 0 obj
+<< /S /GoTo /D (subsubsection.2.2.2) >>
+endobj
+123 0 obj
+(Amplifiers)
+endobj
+124 0 obj
+<< /S /GoTo /D (paragraph.2.2.2.1) >>
+endobj
+127 0 obj
+(Text Fields)
+endobj
+128 0 obj
+<< /S /GoTo /D (subsection.2.3) >>
+endobj
+131 0 obj
+(Missile Command \(MilMissile\))
+endobj
+132 0 obj
+<< /S /GoTo /D (subsubsection.2.3.1) >>
+endobj
+135 0 obj
+(Modifiers)
+endobj
+136 0 obj
+<< /S /GoTo /D (paragraph.2.3.1.1) >>
+endobj
+139 0 obj
+(left)
+endobj
+140 0 obj
+<< /S /GoTo /D (paragraph.2.3.1.2) >>
+endobj
+143 0 obj
+(right)
+endobj
+144 0 obj
+<< /S /GoTo /D (subsubsection.2.3.2) >>
+endobj
+147 0 obj
+(Amplifiers)
+endobj
+148 0 obj
+<< /S /GoTo /D (paragraph.2.3.2.1) >>
+endobj
+151 0 obj
+(Text Fields)
+endobj
+152 0 obj
+<< /S /GoTo /D (subsection.2.4) >>
+endobj
+155 0 obj
+(Land Command \(MilLand\))
+endobj
+156 0 obj
+<< /S /GoTo /D (subsubsection.2.4.1) >>
+endobj
+159 0 obj
+(Icons and Modifiers)
+endobj
+160 0 obj
+<< /S /GoTo /D (paragraph.2.4.1.1) >>
+endobj
+163 0 obj
+(main)
+endobj
+164 0 obj
+<< /S /GoTo /D (paragraph.2.4.1.2) >>
+endobj
+167 0 obj
+(upper)
+endobj
+168 0 obj
+<< /S /GoTo /D (paragraph.2.4.1.3) >>
+endobj
+171 0 obj
+(lower)
+endobj
+172 0 obj
+<< /S /GoTo /D (subsubsection.2.4.2) >>
+endobj
+175 0 obj
+(Amplifiers)
+endobj
+176 0 obj
+<< /S /GoTo /D (paragraph.2.4.2.1) >>
+endobj
+179 0 obj
+(Echelon)
+endobj
+180 0 obj
+<< /S /GoTo /D (paragraph.2.4.2.2) >>
+endobj
+183 0 obj
+(Task Force)
+endobj
+184 0 obj
+<< /S /GoTo /D (paragraph.2.4.2.3) >>
+endobj
+187 0 obj
+(Status)
+endobj
+188 0 obj
+<< /S /GoTo /D (paragraph.2.4.2.4) >>
+endobj
+191 0 obj
+(Text Fields)
+endobj
+192 0 obj
+<< /S /GoTo /D (subsubsection.2.4.3) >>
+endobj
+195 0 obj
+(Supply Icons)
+endobj
+196 0 obj
+<< /S /GoTo /D (subsubsection.2.4.4) >>
+endobj
+199 0 obj
+(Altitude Modifier)
+endobj
+200 0 obj
+<< /S /GoTo /D (subsection.2.5) >>
+endobj
+203 0 obj
+(Equipment Command \(MilEquipment\))
+endobj
+204 0 obj
+<< /S /GoTo /D (subsubsection.2.5.1) >>
+endobj
+207 0 obj
+(Icons and Modifiers)
+endobj
+208 0 obj
+<< /S /GoTo /D (paragraph.2.5.1.1) >>
+endobj
+211 0 obj
+(Main)
+endobj
+212 0 obj
+<< /S /GoTo /D (paragraph.2.5.1.2) >>
+endobj
+215 0 obj
+(Mobility)
+endobj
+216 0 obj
+<< /S /GoTo /D (subsubsection.2.5.2) >>
+endobj
+219 0 obj
+(Amplifiers)
+endobj
+220 0 obj
+<< /S /GoTo /D (paragraph.2.5.2.1) >>
+endobj
+223 0 obj
+(Text Fields)
+endobj
+224 0 obj
+<< /S /GoTo /D (subsection.2.6) >>
+endobj
+227 0 obj
+(Installation Command \(MilInstallation\))
+endobj
+228 0 obj
+<< /S /GoTo /D (subsubsection.2.6.1) >>
+endobj
+231 0 obj
+(Icons and Modifiers)
+endobj
+232 0 obj
+<< /S /GoTo /D (paragraph.2.6.1.1) >>
+endobj
+235 0 obj
+(Main)
+endobj
+236 0 obj
+<< /S /GoTo /D (paragraph.2.6.1.2) >>
+endobj
+239 0 obj
+(Upper)
+endobj
+240 0 obj
+<< /S /GoTo /D (subsubsection.2.6.2) >>
+endobj
+243 0 obj
+(Amplifiers)
+endobj
+244 0 obj
+<< /S /GoTo /D (paragraph.2.6.2.1) >>
+endobj
+247 0 obj
+(Text Fields)
+endobj
+248 0 obj
+<< /S /GoTo /D (subsection.2.7) >>
+endobj
+251 0 obj
+(Sea Surface Command \(MilSeaSurface\))
+endobj
+252 0 obj
+<< /S /GoTo /D (subsubsection.2.7.1) >>
+endobj
+255 0 obj
+(Icons and Modifiers)
+endobj
+256 0 obj
+<< /S /GoTo /D (paragraph.2.7.1.1) >>
+endobj
+259 0 obj
+(Main)
+endobj
+260 0 obj
+<< /S /GoTo /D (paragraph.2.7.1.2) >>
+endobj
+263 0 obj
+(Upper)
+endobj
+264 0 obj
+<< /S /GoTo /D (paragraph.2.7.1.3) >>
+endobj
+267 0 obj
+(Lower)
+endobj
+268 0 obj
+<< /S /GoTo /D (subsubsection.2.7.2) >>
+endobj
+271 0 obj
+(Amplifiers)
+endobj
+272 0 obj
+<< /S /GoTo /D (paragraph.2.7.2.1) >>
+endobj
+275 0 obj
+(Text Fields)
+endobj
+276 0 obj
+<< /S /GoTo /D (subsection.2.8) >>
+endobj
+279 0 obj
+(Own Ship Command \(OwnShip\))
+endobj
+280 0 obj
+<< /S /GoTo /D (subsection.2.9) >>
+endobj
+283 0 obj
+(Sea Subsurface Command \(MilSeaSubsurface\))
+endobj
+284 0 obj
+<< /S /GoTo /D (subsubsection.2.9.1) >>
+endobj
+287 0 obj
+(Icons and Modifiers)
+endobj
+288 0 obj
+<< /S /GoTo /D (paragraph.2.9.1.1) >>
+endobj
+291 0 obj
+(Main)
+endobj
+292 0 obj
+<< /S /GoTo /D (paragraph.2.9.1.2) >>
+endobj
+295 0 obj
+(Upper)
+endobj
+296 0 obj
+<< /S /GoTo /D (paragraph.2.9.1.3) >>
+endobj
+299 0 obj
+(Lower)
+endobj
+300 0 obj
+<< /S /GoTo /D (subsubsection.2.9.2) >>
+endobj
+303 0 obj
+(Amplifiers)
+endobj
+304 0 obj
+<< /S /GoTo /D (paragraph.2.9.2.1) >>
+endobj
+307 0 obj
+(Text Fields)
+endobj
+308 0 obj
+<< /S /GoTo /D (subsection.2.10) >>
+endobj
+311 0 obj
+(Sea Mine Command \(MilMine\))
+endobj
+312 0 obj
+<< /S /GoTo /D (subsubsection.2.10.1) >>
+endobj
+315 0 obj
+(Amplifiers)
+endobj
+316 0 obj
+<< /S /GoTo /D (paragraph.2.10.1.1) >>
+endobj
+319 0 obj
+(Text Fields)
+endobj
+320 0 obj
+<< /S /GoTo /D (subsection.2.11) >>
+endobj
+323 0 obj
+(Space Command \(MilSpace\))
+endobj
+324 0 obj
+<< /S /GoTo /D (subsubsection.2.11.1) >>
+endobj
+327 0 obj
+(Icons and Modifiers)
+endobj
+328 0 obj
+<< /S /GoTo /D (paragraph.2.11.1.1) >>
+endobj
+331 0 obj
+(Main)
+endobj
+332 0 obj
+<< /S /GoTo /D (paragraph.2.11.1.2) >>
+endobj
+335 0 obj
+(Upper)
+endobj
+336 0 obj
+<< /S /GoTo /D (paragraph.2.11.1.3) >>
+endobj
+339 0 obj
+(Lower)
+endobj
+340 0 obj
+<< /S /GoTo /D (subsubsection.2.11.2) >>
+endobj
+343 0 obj
+(Amplifiers)
+endobj
+344 0 obj
+<< /S /GoTo /D (paragraph.2.11.2.1) >>
+endobj
+347 0 obj
+(Text Fields)
+endobj
+348 0 obj
+<< /S /GoTo /D (subsection.2.12) >>
+endobj
+351 0 obj
+(Space Debris Command \(MilDebris\))
+endobj
+352 0 obj
+<< /S /GoTo /D (subsection.2.13) >>
+endobj
+355 0 obj
+(Activity Command \(MilActivity\))
+endobj
+356 0 obj
+<< /S /GoTo /D (subsubsection.2.13.1) >>
+endobj
+359 0 obj
+(Icons and Modifiers)
+endobj
+360 0 obj
+<< /S /GoTo /D (paragraph.2.13.1.1) >>
+endobj
+363 0 obj
+(Main)
+endobj
+364 0 obj
+<< /S /GoTo /D (paragraph.2.13.1.2) >>
+endobj
+367 0 obj
+(Upper)
+endobj
+368 0 obj
+<< /S /GoTo /D (subsubsection.2.13.2) >>
+endobj
+371 0 obj
+(Amplifiers)
+endobj
+372 0 obj
+<< /S /GoTo /D (paragraph.2.13.2.1) >>
+endobj
+375 0 obj
+(Text Fields)
+endobj
+376 0 obj
+<< /S /GoTo /D (section.3) >>
+endobj
+379 0 obj
+(Custom Icons and Modifiers)
+endobj
+380 0 obj
+<< /S /GoTo /D (subsection.3.1) >>
+endobj
+383 0 obj
+(MilSymb TikZ Picture Directory Structure)
+endobj
+384 0 obj
+<< /S /GoTo /D (subsection.3.2) >>
+endobj
+387 0 obj
+(Drawing Bounds)
+endobj
+388 0 obj
+<< /S /GoTo /D (subsection.3.3) >>
+endobj
+391 0 obj
+(Border Anchors)
+endobj
+392 0 obj
+<< /S /GoTo /D (subsection.3.4) >>
+endobj
+395 0 obj
+(Faction Variants)
+endobj
+396 0 obj
+<< /S /GoTo /D (subsection.3.5) >>
+endobj
+399 0 obj
+(Clipping)
+endobj
+400 0 obj
+<< /S /GoTo /D (subsection.3.6) >>
+endobj
+403 0 obj
+(Using Existing Icons and Modifiers)
+endobj
+404 0 obj
+<< /S /GoTo /D (subsubsection.3.6.1) >>
+endobj
+407 0 obj
+(Text Templates)
+endobj
+408 0 obj
+<< /S /GoTo /D (subsubsection.3.6.2) >>
+endobj
+411 0 obj
+(Multiple Class)
+endobj
+412 0 obj
+<< /S /GoTo /D (subsubsection.3.6.3) >>
+endobj
+415 0 obj
+(Hidden Glyphs)
+endobj
+416 0 obj
+<< /S /GoTo /D (section.4) >>
+endobj
+419 0 obj
+(Examples)
+endobj
+420 0 obj
+<< /S /GoTo /D (subsection.4.1) >>
+endobj
+423 0 obj
+(Front Cover)
+endobj
+424 0 obj
+<< /S /GoTo /D (subsection.4.2) >>
+endobj
+427 0 obj
+(1st Marine Division \(USA\))
+endobj
+428 0 obj
+<< /S /GoTo /D (section.5) >>
+endobj
+431 0 obj
+(Control Measures)
+endobj
+432 0 obj
+<< /S /GoTo /D [433 0 R /Fit] >>
+endobj
+435 0 obj
+<<
+/Length 5345
+/Filter /FlateDecode
+>>
+stream
+xÚí\I¯$Çq¾Ï¯(ø p
+??Üpÿº¼ù”b\uˆq¹è´Úä”'úÆÚ5m@ß…5Z• õz/ñ{ÈßÉüw»Iî«ÇÌô°«¬žÁ«úù÷õ¶Œ+ûn#sit62ûY<Ùë5YûÉ#odö#ocÒ~JK^3féO±çrZµÃBÆlVã2QùüÛ¿ù9ܯ9Æ°|øfiX éÃï–¯?û«·¿þð‹7?ûЉÍX…w!YáöÒÙ=œPⳟ–ö–žÏËÅØ
+fŸ9ézÑgþ:[6Ø3x
+<ùÚ“/p›œ]}"«K'¦ÇžÀ:¶+†É:Þ¸½ABaœaÑ¢’ƼV£Âá%ølÈ:g'Іöä8²¦bDÜÎÆu|÷ãÄ=?q%’â½kB4`xP³.”ùz®!!œÊ†]¶Í^“½ÛÐHÝzÜéÆ^Ž AlˆIifá¼ÁhÒs;NáО³Þ§2&"Ù€Î^g[6Ù3 0‡ÎûÀ¶nðôO:©ÊÚa§6i=t9x>Œ/# Ó†™±ÃN·Ñg• ¢¡¬IχŒ}¡lŒ=ri 0Æ*çË¡‚a£N>³u*–ØË’„òQÓyµYù0¢³Ï¶‘²€vF
+Ñ
+A­ž'„€ˆÈ-LØäœY;R–Б¡¡±¥Zƒ…!$¤X×+v¨†ùàà †‰*y—Ú'WÈ+›ÂÐÙX†}ÆP*ºpÄÔLD°™cªAò3 0û*[kªÎØôßiC'Õ•ÉA§[úp$f·”ãÝ7ÔbCtÃbk—ÊlðÒ»˜Ÿåùý¹rÇ;IyÍãèi[Nx…‘/ T¸'–VÙú]):Aää¼Ð Û”úvúnP„ëˆNàÔ7Öv
+€Ö LnÀiÜGQ
+¢`˜OËEXŸáØɈ†5f#vÉ–mŠS*¿ÇùˆI4‡ˆÙ-c|¥`{H‘“ŠÝ’s:¬b5$ìß^LLø5‹7!Ïâž/éûá×3¹ÊéAÿÚ- ÌŠùçRCé±ê%ƒ© ÂÞh£P Åý™‹üMæ„óß•l‹
+RÙ¾¿»Vd›²ålXX­§ä3“2äi&>¥.ZÃ
+MÌ~G&0"¥3…‰¶'– §6öû§wÏÃ{ÄLó¤²H1²³´)ÕfrÝ ›B0ÕÙ«(8piŠ/'±7ðFûeàÿ8(‘²¡“º=ÆZ!ryø,ÙüxÜá,ž*?™<e}‘ ú¾×ÇàJj‚ìh¤Qy{C;‰Âå~a2RB¬¥`û  bÌ
+Oî_cUî=ÿXw²h_ª
+Ë|Š£®ìùUQ)Íqe:²=ÄŠ¤PëYÈ0a6êÕk@ Ïûn Æ;¶ÎQs;åj´gùUñÀú…È1©Ñ…²Ï‰«Æ, [È5§ GéirMh>)pp¶äÁBU'Ðѱh[lvøÁià Oµì9J†{8MbL±xP ¾d+\E¼Öíg«êLŠÃ–‹t‡U‡^QµùjqÔ«ÑÁ9åI-‹/auÿQaˆq±Ì°}~¤Ú u}:œYv…3fñXfXUŸË)âyKÝ8¾O™ ÷²:]SFhVf°ʾR­SQPLÅr™´©u¯„Z¯H ‡Õúfµ>!j½ò*X}®Jã
+m7!\*ˆåµ±\QI8ël\ZgÏ,\Ê×$¯KHÙËRCA¼Ý9IV;×'Ò ¥¢ŒSµØ¯>R l@ÇGJV\´çÜh)Àví¢“5€YyJÍoT&tòL‰$qþxä%©5f ŠÌᯖˬ4Ñ\jµ%˜;_.F£¥£Ãƒhšhæ©£s j„¡ú³]Á¸¦dý„Nyv,A4>ÝŽÀµv{|…%1ÚMø22‡%ýMjS“‡^Êwž€{̨ ºò ¤ý9¸S)Ó{Ôá‘oªImP’J;„<¯Í}:L «MK>L8«Ï`¤†Ã'ü§o½úìW_í«4Ô]LáY°üÈ=¥Z!Vº:Q‰Ú«Å¤ƒLF”ŠàNÅd¤†Ãbþ“ßK8`í$,ì
+nï벧kͨb^YöDþöÜàÌ›@u}[QYIÃ7:CµÙØåvrûRÕ–àŠîÔ c8·&Géð—óÂ.ªÒ$çÊ*³zûÊü·ƒ;£Èår‘†trÙÉ›2eÙ+VCâuÿòËŸ|ù/»¥Ÿ0絯L žŸ.ï2”-ü3”” :O F*ó“ÇtÎo5`±ažø&Ës%ù«Kö<]ûèHug癑¯ë¿Ã®–«é¯ƒB>ÑwwÊ‹B†OÌê
+Of‘=Y<ñ`ƒn à.—<³À‡%ƒª´¯68K.ñ§;ÓÃî·bœ½áªm[tµ›GƒÝ…¹*¦‹Œ°WœÜèÅa8IŒCÿ$¨4 â<E=¶$÷Ä ~åH`Vƒ™2TTƒáŒæŠÿ2
+|lµ›P´ß9\Öjšòäþƒ¶Cx”§1$únŒcu*æ^–
+t¥ÈžG©WÐwà:Ö»"ò¬R0dDök‚n¥k»¯ÅßÒ!PJN"—Ú;’Ý€¦ àh´J„¼‘5T»ƒØs®Â®Ålìn¨BÞæÁ$\«Cu<o罹Jþ6‚-brÄÕ> ÃÈ&å«,MÚ×Ðg9Á}í¿û‰×œ6ÈI,
+M;Í[}tÜ…çúÒH¯d¶YÚÈŠ“i£Ëz@%‚iJ ˜P Þf ÝfJHµMèÆhG”u‚Â×)=ž­qJEœ+‘È‹ô¶œ›øœ†„Ï ÷£ +§”ž|FÃ‰á µh»~
+ÛöTVe“í¾^CSeú,'•ñªTž¾B†D·¤iî áÃÊP•Tp;žDƒâ£Øß ¹• 1Sê4ÑþyƒK×P"t©â¨àØÃmX éøÝéŒ5º¸_ÁîQ6„÷‡jb…ü:±,.?zД¿;ñÛ+RÃa¡Þÿj–jš^Óf¯÷îB±'j©\°?ÕéÕÕ;²ö:õnC'Õn®:M·ïÏ<û£ü)¶,"m‡×k±
+H¾™pºO ˆ|Áædƒ„b³ð ªˆlPñ„¢H«Å;³xHlñ‹p
+Þçã,ªØËÄ›J'Ñ]‰W¥vN*C%þ\._ƒiÙ£ûâ噧ɜÜ&•ã¨Ž =Ñ™/¡¶†ú¢ÅPZÛÒ#T“ÜjøéLyÛQ^-Óz‘Í7¾Öp ˜¬Ü¬G®ëƒfzô1tàrºP)ó#„ÎÓ£Ÿð]£æGJô…W?½§[1r0ß'Ÿ<½/H ‡µÅ‡]B|š´EåV0ûg¹Ö½ˆû[Jº”¾ bJ„nÒýöi:0ìˆR•_äZnPñ}²5]Üã
+ÒÚ9¹î_Äþÿç¸>E•×4•Tš]¢ó¸–*ygÏ缡“êeGîÛ^¶›Ó!7÷ ¼%ÝÊÉî7¹§ð)~ØçVÒ!v’iYô팫«µ©þ³†Nçåú‹xH,R›Rj¡‡î4xºü¾|Å'Áñc©-¼œã2RoÐòBSÑ;‰œFôM‰JÒÚ8¹Ž:×™¼*8“diKeDŠÒÂC®¶AËÍñ }²“>œ“k[Úã‰|¿oK¾½Ò Èë¥ïÁ=Úreð87Bùlœ`5ÉÕ¡er,•,Ù[gРÊAx
+¢çémÐkÝ-ë ]È·>šŒãÉíÕMüã“é©HÈõˆnð
+Ó-×φÈï¡{hØ.úΧŸÚÑç;$p»Ú‘àà°‡ý‚l¿j¸èÐŽÐÇÊÓÍ×G… ùb`£Cµ²>y?Ž)¡’ÁÞ¥‘”7Á%#z§vZjOŒPn¶,Ú
+§\»ž](ª\ÔÛnS}¬ÐÓ¥ÄËÜ€ÈÌiþhA©u§ÀF¢h—Ÿøy|
+^Ï+Ë.tcê"?®NtuúJÑHÏÑþöô üL´‚ÔpX´¯¾ÚUÃNh³l…]Á­î[þ÷ìÆ—ö ã‹øˆqáÓÑÇ éc*ÎzUôDøjÞÔDÎ?þþåý÷·ß·_¯ÙSNøz¹ÏÏ%è-µ­è÷›ÛïóíÛ‹Õñ³¿ýã[c>ûÏÿúí÷Ô{Ñü))JHQ¢ ÿâ¿_¾/Èþ¯Ëo£tæ©™¥ÁTý|%;
+endstream
+endobj
+433 0 obj
+<<
+/Type /Page
+/Contents 435 0 R
+/Resources 434 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 442 0 R
+>>
+endobj
+436 0 obj
+<<
+/D [433 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+437 0 obj
+<<
+/D [433 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+434 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F45 438 0 R /F81 439 0 R /F50 440 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+445 0 obj
+<<
+/Length 378
+/Filter /FlateDecode
+>>
+stream
+xÚ’Ín«0…÷y
+/T›{lìeÿÛ»¼BÝÜvAm‘’©”·¯ 4í²èlsÎw†{eÀnW°¼/ÊU~ã!IMV±ò…‘—,+
+/ ¬¬Ù?þ·ùh‡¶{Ï„&ÇïÚ!tý>{*ÿä7Ž˜—Þ*›¼À„BéÐÏ69K"ÿ[¢IzMQR+:Æ£àWUh2A:.ÏÇðÖõ``ˆLQÑ ë¾Ý…ä9Y’`¡£„DsW>Ê ;$mÛ*ýü²Ï”âÝð¼ÁjZNšê+f£ôÆÀ±"]ä`r(ÙÿŠ|ž¡ãuÝÔ™PÆx¾ÞT}û ÖßaAzÄ%ÒÌ‘©GÆ[~•
+endstream
+endobj
+444 0 obj
+<<
+/Type /Page
+/Contents 445 0 R
+/Resources 443 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 442 0 R
+>>
+endobj
+446 0 obj
+<<
+/D [444 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+448 0 obj
+<<
+/D [444 0 R /XYZ 49.606 745.957 null]
+>>
+endobj
+443 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F84 441 0 R /F93 449 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+464 0 obj
+<<
+/Length 898
+/Filter /FlateDecode
+>>
+stream
+xÚÍVK“£6¾Ï¯à¨
+Z=
+3©fî„éž¼¤S›„q0›´7™ÖbØÑÞåRwÞ©aå?{Ù×ÒŒ~¿^žm^X¬ãÂŒFÄiî!¾ušáŒDGâß¼Ý8‰fã}Ê„”ñGûh
+tμYš3ë‹‘So”x[ɈünûÔÿãÐù ½HDZ6õŸŒcc«1øJ€†T1úpýÒ™çV4w g±›µ4ç´8éû”10>S  ?MFÕ©‡T¢ÅK縚MhX7U*v´8jsO3Ý×bÃtaþä‘êàM5ÚÖ‚ÂÁÝ›ºà¬ÉÍrTðƒÙ{ÕÝKq?›¥hä… %A¤¤Gpz1´>ÎZŒ>P-e-Z±“ –¾³{¿K„Äœ6úà6ï´Ùœ¤.Èu8ͯ֗ڨ0(ÉçälÉV O[@z5õÓ•Ø çæ
+LíGý PÏC+ŸÇÙuW··~ã›æï®+ÒûÈ¿ö
+†ð¥jäÐHtq®sÈg:çãÈ1ãÒŒVñýdæfš]}œ¨t׈U‘ 8Ê9ñNÊ!Ç ,Ì°ñ!¡‡çhß{£<ýV=ªQÙzÚx8ǾOW{öÄeë>±Öš–gi³ˆ÷åíiÄüW±½6¬®£å£íC‹áå:Óî˜ó"YEãy†;ç/+%8G”–§ýI7hµù?°ìú0dðÞàó?߇‹@»[áù$á’‡Á±í¿ÁNMëçsº…8ž¹éèçˆÕÖúQ~}åÀ ÔÁÔaÆ>­ÿ.›Ù'Ù<»ê"še ø!ÊÊ 9÷Ia'›Þ.nþ&‡Š5
+endstream
+endobj
+463 0 obj
+<<
+/Type /Page
+/Contents 464 0 R
+/Resources 462 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 442 0 R
+/Annots [ 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R ]
+>>
+endobj
+450 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [73.517 720.861 88.58 730.614]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/users/39222)>>
+>>
+endobj
+451 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [73.517 699.078 103.943 710.261]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/users/9335)>>
+>>
+endobj
+452 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [73.517 679.152 126.667 690.764]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/users/586)>>
+>>
+endobj
+453 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [73.517 661.085 142.04 670.839]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://tex.stackexchange.com/users/2388)>>
+>>
+endobj
+454 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [477.262 602.02 503.345 614.035]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://commons.wikimedia.org/wiki/File:Small_battle_symbol.svg)>>
+>>
+endobj
+455 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [176.221 590.065 218.931 601.677]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://commons.wikimedia.org/wiki/User:Kathovo)>>
+>>
+endobj
+456 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [271.903 590.065 338.034 601.677]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://creativecommons.org/licenses/by-sa/3.0/)>>
+>>
+endobj
+457 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [299.21 570.14 313.875 583.233]
+/A << /S /GoTo /D (figure.caption.39) >>
+>>
+endobj
+458 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [455.008 570.14 488.005 583.233]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://commons.wikimedia.org/wiki/File:1st_US_Marine_Division.png)>>
+>>
+endobj
+459 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [73.517 560.043 119.873 569.796]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://commons.wikimedia.org/wiki/User:Noclador)>>
+>>
+endobj
+460 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [172.844 560.043 238.976 569.796]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://creativecommons.org/licenses/by-sa/3.0/)>>
+>>
+endobj
+461 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [469.203 501.382 535.334 512.993]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://creativecommons.org/licenses/by-sa/4.0/)>>
+>>
+endobj
+465 0 obj
+<<
+/D [463 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+462 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F84 441 0 R /F94 466 0 R /F93 449 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+531 0 obj
+<<
+/Length 1578
+/Filter /FlateDecode
+>>
+stream
+xÚíœKs£FÇïþQU4;ïÇÑIl×&q%kOÞXilS‹@ (‰¿ýÉ’ȲìòÎ ©Ê ®þ©»ÿÓÝôî=è]ÁúúóäìÃ¥‚¢€PŽ½ÉGà{B"@¤ô&3ïÖÿ%‰sçÙèŸÉogÈÜ ½ôÞ«>ü}U-¡€â˜+@oŒPˆW7£ÑXBæŒó4™-§y˜Äå:«ÿÁ£RD”ùRþ=o}Š¤OSARÒ#ó0Æê‡ó8DôÿQæÓ¯#$ýà^Æ ÿf9ŸéãöóoÇBHŒÆ”¸Kï ’µ²*~ÛXp–_õBÇ3OC5Øpì,~4 ¤Æð) ãûâ®—± ·âHãgµ/^‡ÑÍãüË“?¤ÈV78(/Ît,)àÕdùšlù˜°»ØŸ‹"ð6½ )gôNpˆwUaÎ0(¼&‰*Ó›ì™å©-óÝŽ¥r¦îaê…1&HªjQ›W:cmy*åMºgY§ÞÏÑx­7®t¬Ó`¼|p-:JøËt„±¯w
+²ŽJ2†M)0Ù”
+HˆV¾7¸K\ ¢N\âJ²]@` ³ø’I_ûˆ- :doÙ‹,JþsÈÞ2ºÙ]ÌpçûYäˬ Ÿ
+ÛO%hjøÝÝ°4ÒR:ý4E;'%€2Ý‚‰ïIœLÒd®»Hq³a–È‘jó!ÕîCÈhq‰mŠOì…“MƒH»dtjfíÉHîE'U&ª’R:Æ
+?Cˆuj¾¢Ýí2AìGc€)PØšzª»:!$ww™Î-–'ÌÄ̵Hûɲñ§ö¯žëضC›£CAñ;ÆE ÀÔJkùáN‡ÆÄ¥Ë$iu-çóG‹Õ¥0žCXcôN|µŸpã+vëï/%<˜(õm¤¹N3«²?ãÆ %¶jCLFH@_ ÿóª0z9Äu4k”F%u½ gÂ=EÔXVà`Ì_FÑœjï_|ý8µ´ìw˜ŽŠ‚Ö(®ÊB²\Ô­ñ­h.\ÛàE¹Œí žÕØÈy˜Z:kER° 1 h4RS ÅýûD™U;)îøuBe>¢¥”j”ÛðºmWE¸æšêu2«³|3E¹a ›WÑa½9|¼Þœ+;™XU©±yÌÑšsŽÙaÌäÌŽÕsÌb†;öNˆÁUÚjï´±Ûlä!L˜3óKâÙJ\›pJåÀ ¶µ¥Øñ:ÄI˜ñÙ¨G¯†ˆ¯Ã, #=D˜c
+øÓ´°æ«5,uNóQtŠsEñ*¹1ik.5¡§ñàyÍ•pŽq‡"ÃÂé¥Ç#}—;pjb-ÚŽôÒãixÿà˜½3:TÛ§íÞž¶ è´ÝIÄ®íh­íþXk¹~Â1À¶*®åMUGÍÓ$éRu܈°)>ÖÑ…¥€)º«ø¨+²Õ“Ø°xF]‘õÍkuÔY_›9„™+²¾*3Š‡
+qê„ø ñ N\OBübú #Ë©eIœ…6;l*µªëPo}8÷ƒìëjÛCx1›ˆ±?mœ¦È µvûóÞ#@…ýImÿ›æq«ò˜>u¶}»S·å?€q[À_ #Þm=vÌRâfƒ"xÅj ñ<ÊÃ|9Ó»;öæë«Üpâ>
+ۭɵ"ãµ"ûgyEAù.Ž!¢Œ1±ùjË­…,G>Ë] Kø®šŒ¼ãx"€4ß~Ç;¦O´°G&î´Ø›%Ö¢Åx/-öÉ5_ÝŽF
+L (b„¢•E·ÿäbröW¶eä
+endstream
+endobj
+530 0 obj
+<<
+/Type /Page
+/Contents 531 0 R
+/Resources 529 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 442 0 R
+/Annots [ 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R ]
+>>
+endobj
+469 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [48.61 758.401 135.052 768.035]
+/A << /S /GoTo /D (section.1) >>
+>>
+endobj
+470 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 744.523 187.946 756.135]
+/A << /S /GoTo /D (subsection.1.1) >>
+>>
+endobj
+471 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 732.568 210.671 744.18]
+/A << /S /GoTo /D (subsection.1.2) >>
+>>
+endobj
+472 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 720.598 168.41 732.628]
+/A << /S /GoTo /D (subsection.1.3) >>
+>>
+endobj
+473 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 708.658 211.102 720.269]
+/A << /S /GoTo /D (subsubsection.1.3.1) >>
+>>
+endobj
+474 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 696.703 231.884 708.314]
+/A << /S /GoTo /D (subsubsection.1.3.2) >>
+>>
+endobj
+475 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [48.61 674.732 172.153 686.344]
+/A << /S /GoTo /D (section.2) >>
+>>
+endobj
+476 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 664.69 238.437 674.443]
+/A << /S /GoTo /D (subsection.2.1) >>
+>>
+endobj
+477 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 650.877 189.712 662.488]
+/A << /S /GoTo /D (subsubsection.2.1.1) >>
+>>
+endobj
+478 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 640.78 194.115 650.354]
+/A << /S /GoTo /D (paragraph.2.1.1.1) >>
+>>
+endobj
+479 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 626.857 200.113 638.15]
+/A << /S /GoTo /D (paragraph.2.1.1.2) >>
+>>
+endobj
+480 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 616.869 200.113 626.443]
+/A << /S /GoTo /D (paragraph.2.1.1.3) >>
+>>
+endobj
+481 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 604.914 242.095 614.488]
+/A << /S /GoTo /D (paragraph.2.1.1.4) >>
+>>
+endobj
+482 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 592.959 212.108 602.533]
+/A << /S /GoTo /D (paragraph.2.1.1.5) >>
+>>
+endobj
+483 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 581.004 230.1 590.578]
+/A << /S /GoTo /D (paragraph.2.1.1.6) >>
+>>
+endobj
+484 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 569.049 200.113 578.623]
+/A << /S /GoTo /D (paragraph.2.1.1.7) >>
+>>
+endobj
+485 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 557.094 218.105 566.668]
+/A << /S /GoTo /D (paragraph.2.1.1.8) >>
+>>
+endobj
+486 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 543.171 297.866 554.892]
+/A << /S /GoTo /D (paragraph.2.1.1.9) >>
+>>
+endobj
+487 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 531.325 316.177 542.937]
+/A << /S /GoTo /D (paragraph.2.1.1.10) >>
+>>
+endobj
+488 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 519.26 309.861 530.981]
+/A << /S /GoTo /D (paragraph.2.1.1.11) >>
+>>
+endobj
+489 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 507.305 297.866 519.026]
+/A << /S /GoTo /D (paragraph.2.1.1.12) >>
+>>
+endobj
+490 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 497.318 179.719 507.071]
+/A << /S /GoTo /D (subsubsection.2.1.2) >>
+>>
+endobj
+491 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 485.363 208.611 495.116]
+/A << /S /GoTo /D (subsubsection.2.1.3) >>
+>>
+endobj
+492 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 471.549 173.971 483.161]
+/A << /S /GoTo /D (subsubsection.2.1.4) >>
+>>
+endobj
+493 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 460.202 210.332 471.609]
+/A << /S /GoTo /D (subsection.2.2) >>
+>>
+endobj
+494 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 449.497 224.721 459.25]
+/A << /S /GoTo /D (subsubsection.2.2.1) >>
+>>
+endobj
+495 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 437.547 194.115 447.116]
+/A << /S /GoTo /D (paragraph.2.2.1.1) >>
+>>
+endobj
+496 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 423.619 200.113 434.912]
+/A << /S /GoTo /D (paragraph.2.2.1.2) >>
+>>
+endobj
+497 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 413.632 200.113 423.206]
+/A << /S /GoTo /D (paragraph.2.2.1.3) >>
+>>
+endobj
+498 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 399.818 178.315 411.43]
+/A << /S /GoTo /D (subsubsection.2.2.2) >>
+>>
+endobj
+499 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 389.721 221.552 399.475]
+/A << /S /GoTo /D (paragraph.2.2.2.1) >>
+>>
+endobj
+500 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 376.516 254.009 387.923]
+/A << /S /GoTo /D (subsection.2.3) >>
+>>
+endobj
+501 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 365.811 173.712 375.564]
+/A << /S /GoTo /D (subsubsection.2.3.1) >>
+>>
+endobj
+502 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 353.856 194.115 363.43]
+/A << /S /GoTo /D (paragraph.2.3.1.1) >>
+>>
+endobj
+503 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 339.933 200.113 351.475]
+/A << /S /GoTo /D (paragraph.2.3.1.2) >>
+>>
+endobj
+504 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 328.087 178.315 339.699]
+/A << /S /GoTo /D (subsubsection.2.3.2) >>
+>>
+endobj
+505 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 317.99 221.552 327.744]
+/A << /S /GoTo /D (paragraph.2.3.2.1) >>
+>>
+endobj
+506 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 304.785 226.93 316.192]
+/A << /S /GoTo /D (subsection.2.4) >>
+>>
+endobj
+507 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 294.08 224.721 303.833]
+/A << /S /GoTo /D (subsubsection.2.4.1) >>
+>>
+endobj
+508 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 282.125 194.115 291.699]
+/A << /S /GoTo /D (paragraph.2.4.1.1) >>
+>>
+endobj
+509 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 268.202 200.113 279.495]
+/A << /S /GoTo /D (paragraph.2.4.1.2) >>
+>>
+endobj
+510 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 258.214 200.113 267.788]
+/A << /S /GoTo /D (paragraph.2.4.1.3) >>
+>>
+endobj
+511 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 244.401 178.315 256.013]
+/A << /S /GoTo /D (subsubsection.2.4.2) >>
+>>
+endobj
+512 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 234.304 209.467 244.057]
+/A << /S /GoTo /D (paragraph.2.4.2.1) >>
+>>
+endobj
+513 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 222.349 221.682 232.102]
+/A << /S /GoTo /D (paragraph.2.4.2.2) >>
+>>
+endobj
+514 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 210.394 201.836 219.719]
+/A << /S /GoTo /D (paragraph.2.4.2.3) >>
+>>
+endobj
+515 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 198.438 221.552 208.192]
+/A << /S /GoTo /D (paragraph.2.4.2.4) >>
+>>
+endobj
+516 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 184.625 191.326 196.237]
+/A << /S /GoTo /D (subsubsection.2.4.3) >>
+>>
+endobj
+517 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 174.528 210.584 184.282]
+/A << /S /GoTo /D (subsubsection.2.4.4) >>
+>>
+endobj
+518 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 160.7 286.676 172.73]
+/A << /S /GoTo /D (subsection.2.5) >>
+>>
+endobj
+519 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 150.618 224.721 160.371]
+/A << /S /GoTo /D (subsubsection.2.5.1) >>
+>>
+endobj
+520 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 138.663 194.115 148.237]
+/A << /S /GoTo /D (paragraph.2.5.1.1) >>
+>>
+endobj
+521 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 124.74 218.105 136.282]
+/A << /S /GoTo /D (paragraph.2.5.1.2) >>
+>>
+endobj
+522 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 112.894 178.315 124.506]
+/A << /S /GoTo /D (subsubsection.2.5.2) >>
+>>
+endobj
+523 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 102.797 221.552 112.551]
+/A << /S /GoTo /D (paragraph.2.5.2.1) >>
+>>
+endobj
+524 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 89.592 305.735 100.999]
+/A << /S /GoTo /D (subsection.2.6) >>
+>>
+endobj
+525 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 78.887 224.721 88.64]
+/A << /S /GoTo /D (subsubsection.2.6.1) >>
+>>
+endobj
+526 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 66.932 194.115 76.506]
+/A << /S /GoTo /D (paragraph.2.6.1.1) >>
+>>
+endobj
+527 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 53.009 200.113 64.551]
+/A << /S /GoTo /D (paragraph.2.6.1.2) >>
+>>
+endobj
+532 0 obj
+<<
+/D [530 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+529 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F84 441 0 R /F115 467 0 R /F93 449 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+582 0 obj
+<<
+/Length 1379
+/Filter /FlateDecode
+>>
+stream
+xÚíšËRãF†÷<…–ÒÂ=}¿,’T¨¤‚É"3³¶T1–K–¹¼}Ž®Èº‹™ ½Á%· ¿>ÿùÏéÆ僳œø‰èÚÉ.þ:;8|:ÕÜ1ÈH*ñwG+Ä…p”¦ˆQ⌧Η"‰¨7"\(÷ðv9¾bLgÑÊû6þ­Üù2¢L¸Èq¦íÇË>QÜ•"Ø&-‡¤sà1d
+¥ÁÞHÁKó|,zÙf&ÁšŠoNxI飔üà
+'»NH4¼I/‰!M‰U¸bKõS¸NŠGj«pPèØ8%$W¸eφ
+] ڰߟgWQ°êupQ"­yÅŠçC4½¸`È(µÍŒ i>€–±î}<’œmrb§Ã$H&qpĽª%xµX:,Æh2’moá—}¶´·T¢´é˜­^SÙxÏüÂlmô~c¦}/efk£ýBë}„¨Y›=˜ ªÞ2hmöp@·pEˆFÒd‡²(@!9pr ÷x½ŠÃ[ÀÀuéà2sp±Å!0Âvéü#6Ô¢Öðš¡dEjÜ´‰tVW[ê·Wmu/åxì1âÿþ“­¨?=JÝ`¯£ä¢()‚ìn‡Qn[/âhýôTýäü§ÔÖîÓJ Lk›#,; ¨?Gþ}°¸Îfî(\/šñʤ²úC‚—àÎãb¸A,‡sF‰¤NÁ“¤|“›°ÅÖs hX@<têêúPð†ùùñ¿=Bþ"n`’ÄN÷°˜DŽéx,—‰ÊÕ» DÚ™}oÐdírU楓‡`—w=›BÐ7Û»P”"ƒuÝ Èò(‹‘ϘÏZZJØ®ó¨èmTš1P`=_Ïã`9/ίÌýUK^±ÞËIüL§³<ÍŸÍ—7-bg¹¶cµËÒÜlV»<«vO|Цº2q({¨)+I‚ùn%íˆKŒX­åÎ3}L ŸbnZY†‹¸Ø%¹«õ “¤CmL¾YvãÏE¯,°U.)[
+ p}i+D® ęʞ_Å- ‚‘VàÓsç`ðeÿá.X•ö?Ù$»¼€—÷°u ’[…è±kë‹ Ejb òÖ„eÎó>×Ì_­£g•Aokøƒ¨cÄ©J6ã0ÒÔ¯«~çd|ð ”Ùk
+endstream
+endobj
+581 0 obj
+<<
+/Type /Page
+/Contents 582 0 R
+/Resources 580 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 442 0 R
+/Annots [ 528 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R 560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R ]
+>>
+endobj
+528 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 779.327 178.315 790.939]
+/A << /S /GoTo /D (subsubsection.2.6.2) >>
+>>
+endobj
+533 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 769.23 221.552 778.983]
+/A << /S /GoTo /D (paragraph.2.6.2.1) >>
+>>
+endobj
+534 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 756.024 298.263 767.432]
+/A << /S /GoTo /D (subsection.2.7) >>
+>>
+endobj
+535 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 745.32 224.721 755.073]
+/A << /S /GoTo /D (subsubsection.2.7.1) >>
+>>
+endobj
+536 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 733.364 194.115 742.938]
+/A << /S /GoTo /D (paragraph.2.7.1.1) >>
+>>
+endobj
+537 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 719.442 200.113 730.983]
+/A << /S /GoTo /D (paragraph.2.7.1.2) >>
+>>
+endobj
+538 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 709.454 200.113 719.028]
+/A << /S /GoTo /D (paragraph.2.7.1.3) >>
+>>
+endobj
+539 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 695.641 178.315 707.252]
+/A << /S /GoTo /D (subsubsection.2.7.2) >>
+>>
+endobj
+540 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 685.544 221.552 695.297]
+/A << /S /GoTo /D (paragraph.2.7.2.1) >>
+>>
+endobj
+541 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 671.716 249.804 683.745]
+/A << /S /GoTo /D (subsection.2.8) >>
+>>
+endobj
+542 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 660.383 334.058 671.79]
+/A << /S /GoTo /D (subsection.2.9) >>
+>>
+endobj
+543 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 649.678 224.721 659.432]
+/A << /S /GoTo /D (subsubsection.2.9.1) >>
+>>
+endobj
+544 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 637.723 194.115 647.297]
+/A << /S /GoTo /D (paragraph.2.9.1.1) >>
+>>
+endobj
+545 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 623.8 200.113 635.342]
+/A << /S /GoTo /D (paragraph.2.9.1.2) >>
+>>
+endobj
+546 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 613.813 200.113 623.387]
+/A << /S /GoTo /D (paragraph.2.9.1.3) >>
+>>
+endobj
+547 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 600 178.315 611.611]
+/A << /S /GoTo /D (subsubsection.2.9.2) >>
+>>
+endobj
+548 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 589.902 221.552 599.656]
+/A << /S /GoTo /D (paragraph.2.9.2.1) >>
+>>
+endobj
+549 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 576.697 248.141 588.104]
+/A << /S /GoTo /D (subsection.2.10) >>
+>>
+endobj
+550 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 564.134 178.315 575.745]
+/A << /S /GoTo /D (subsubsection.2.10.1) >>
+>>
+endobj
+551 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 554.037 221.552 563.79]
+/A << /S /GoTo /D (paragraph.2.10.1.1) >>
+>>
+endobj
+552 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 540.209 238.985 552.239]
+/A << /S /GoTo /D (subsection.2.11) >>
+>>
+endobj
+553 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 530.127 224.721 539.88]
+/A << /S /GoTo /D (subsubsection.2.11.1) >>
+>>
+endobj
+554 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 518.171 194.115 527.745]
+/A << /S /GoTo /D (paragraph.2.11.1.1) >>
+>>
+endobj
+555 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 504.249 200.113 515.79]
+/A << /S /GoTo /D (paragraph.2.11.1.2) >>
+>>
+endobj
+556 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 494.261 200.113 503.835]
+/A << /S /GoTo /D (paragraph.2.11.1.3) >>
+>>
+endobj
+557 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 480.448 178.315 492.059]
+/A << /S /GoTo /D (subsubsection.2.11.2) >>
+>>
+endobj
+558 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 470.351 221.552 480.104]
+/A << /S /GoTo /D (paragraph.2.11.2.1) >>
+>>
+endobj
+559 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 456.538 280.29 468.552]
+/A << /S /GoTo /D (subsection.2.12) >>
+>>
+endobj
+560 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 444.567 263.862 456.597]
+/A << /S /GoTo /D (subsection.2.13) >>
+>>
+endobj
+561 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 434.485 224.721 444.239]
+/A << /S /GoTo /D (subsubsection.2.13.1) >>
+>>
+endobj
+562 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 422.53 194.115 432.104]
+/A << /S /GoTo /D (paragraph.2.13.1.1) >>
+>>
+endobj
+563 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 408.607 200.113 420.149]
+/A << /S /GoTo /D (paragraph.2.13.1.2) >>
+>>
+endobj
+564 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 396.762 178.315 408.373]
+/A << /S /GoTo /D (subsubsection.2.13.2) >>
+>>
+endobj
+565 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [118.331 386.665 221.552 396.418]
+/A << /S /GoTo /D (paragraph.2.13.2.1) >>
+>>
+endobj
+566 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [48.61 364.814 220.88 374.448]
+/A << /S /GoTo /D (section.3) >>
+>>
+endobj
+567 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 350.921 297.575 362.951]
+/A << /S /GoTo /D (subsection.3.1) >>
+>>
+endobj
+568 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 338.981 176.998 350.592]
+/A << /S /GoTo /D (subsection.3.2) >>
+>>
+endobj
+569 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 328.884 172.215 338.637]
+/A << /S /GoTo /D (subsection.3.3) >>
+>>
+endobj
+570 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 316.928 174.497 326.682]
+/A << /S /GoTo /D (subsection.3.4) >>
+>>
+endobj
+571 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 303.115 135.912 314.727]
+/A << /S /GoTo /D (subsection.3.5) >>
+>>
+endobj
+572 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 291.16 265.416 302.772]
+/A << /S /GoTo /D (subsection.3.6) >>
+>>
+endobj
+573 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 279.205 202.175 290.816]
+/A << /S /GoTo /D (subsubsection.3.6.1) >>
+>>
+endobj
+574 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 267.25 197.144 278.861]
+/A << /S /GoTo /D (subsubsection.3.6.2) >>
+>>
+endobj
+575 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [86.459 255.295 200.92 266.906]
+/A << /S /GoTo /D (subsubsection.3.6.3) >>
+>>
+endobj
+576 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [48.61 233.324 119.072 244.936]
+/A << /S /GoTo /D (section.4) >>
+>>
+endobj
+577 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 223.282 152.908 232.607]
+/A << /S /GoTo /D (subsection.4.1) >>
+>>
+endobj
+578 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [63.55 210.077 220.396 222.562]
+/A << /S /GoTo /D (subsection.4.2) >>
+>>
+endobj
+579 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [48.61 189.476 164.153 199.11]
+/A << /S /GoTo /D (section.5) >>
+>>
+endobj
+583 0 obj
+<<
+/D [581 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+580 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F84 441 0 R /F115 467 0 R /F93 449 0 R /F90 447 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+589 0 obj
+<<
+/Length 3391
+/Filter /FlateDecode
+>>
+stream
+xÚíZYsÛF~ׯà#Ue ˜{7;‡Ë©N¬ÝJmœŠ„$Ä$Àð¬lí߯çÀEPâZñÓªJ60===}MCd“ëI6y}– ž¯.ξø6Ï&L¦Bj>¹¸šÈ<Õ™ž“§F°ÉÅbòÛ”ÿ~ñ]³hò[²,›¾©v›z±Ÿïʺê!x’,Í•r$³IÂuše"PKÇé½=çf:›˜]ç‰vún¿ZÍ6÷„üÅ·VNò4×\ŠÌ¦ÂZOñâ¦Üb‰æÓ5ÖŸ3;õ4
+Óu}}5b'ÎÓ̲ˆóá\èiq¿…¤Þ÷¼pØÇËÍ÷Ûb@µ^U±ñ
+Â|@̦0TÙÈï¸&_xãs
+–jGSà¨Ñù¡†CÃdc²~À€ °Î6hë&€®êÆ4ì, ˜³ð\täør¨©.‰b©ÕÊÉ%%÷¬¼ç,.ê:¤{‹|ïÊ=¸ƒÇ¦0™ õ \ÕÕ’œ¼‡ü”=ÊÉ|õYŘmŠÛÕlwóY7A–º­q:?«²fóM]Ýfm­¶Ûpj>ÛË+œ¬êóm¶Åƒ±*á2Í33ŒXb4bý£Ít:dŒJ9çG$ ö#Ù93Ù´öAp¿ kB¥·'…5©dÄsÁDïë=Õ<2oR?E{äÒ?öÛŸð9£Ë€(B$²k ùž &×>rÿ{U.ÉWþ3V½p‘ÊV+‡Ì¬}Z›­.—E:&u.Rs’Z!³ËÀ½4xã²Ô¤Z6­–÷~tY•ÛÛ•*BR¾ó°ïò&U†AtªM>aàÆxÚ/G¸©¶Ì[¬ —¤e*A'ဇÿƒÃ¤È@ð¯Î*rZãdl<;‚ImnN"á—!©‹Ù-½õÒÝ•Ë¥Ÿñ:¯/g—^¨¯êŸº«7¨¬³|úè#ö`Ö¢5§¹¡hÜ°-¥±ËŠ\ήP«ìo—®PÓõr6÷–Qð›m¹ð™\œ ÔtþåGEuë ¤ºj\nUF-*Ÿ™‰ìl³óo®Ê§™*n²,«1ï<ƒg©a€ˆ¼ÑKSdº6ÍN‡Ô-‡“å]âërŽr·urVrÖ×X+<ÉóY.¦/©ÚÕ fGÊÃ[]Š^û… ¡ínf;?GÑǽ´&„zsH¥Þî¶óM¹Þy”ËÙÖUý˜jÚ)‡ç™»Þ ©¼«×¿&^þù†zëz3 WÄ]Cg¢°¥ð|çÜí~½®78Çd÷\@˜z}æ O ·ËmYÜîh`0‹µµ ùT”û ·pÆ°WÇU¨ý€~y?&[±º,m!Þêl¤€îºçGë&Ú*ÿ´¦:ûx«üÕÞéÙ‹^A—/šb·QU´ÝAU¾¡U»ºÁv]ÌK×S,bÙ¼­Óu¯µ} ”@Ÿ¶Á{Pq‰ÈlÊ°ú@ãˆo½½ê¾‚»M{1lî
+ì6÷²mîe¯¹—7÷­d¡ãÀ¢™ôc‚tc®oÊe½­×7a³»—Øð6o„‰KW=¶ƒ#ý(Œ`MÁÑl’Ñ9šÐÙü&@¢Ò
+‚Jªò dp …°+¤
+ÎR«¸2-”îƒsnsâ\sk!´ÇœVE@ÒâDBIK©Ù²…aõ쎬?ÜeÈÈ«‡âŠ=w6|wÜ^Dœ¡
+–™1Q³èH¡YéX5¨=é: E¨æœ§€ðÔ"kÉI°˜Œ‹bdΤåfœAÑ’r£p†AJÑ%š9Ó)“8¨J”:ˆ¼BaêÉÄYï'’Iö¢…È2#$4¤¨c—J„íšV¢ÛìfD—Žq2AÛ>AN¿’ FòÙ:ï>juâg³žá¯üx“*"â~}±ÄknLè&<RÀ \c¹¾QDïFòþZÐÿ¹Ýž¸OZöÇ$”ðsÄ!ÜOŸ$£ÀB“Ö3ðâ‚øˆ+"9)_¿úe(Я/QøMZ†Š¡ÇÙxšT(0áDêa©"’ïÕ}ùÃÛï¿9&Y‡à˜d-ÓHFžçê©¢Iƒl)- yÑ~|í}‘³£âµDGÄkù~H:¤AÎôS¥C—žþˆtÉßòª¥5"TËîhAëc¥$o¤2éÓâÂ'Ò÷F#ò#$`E$ß©ì h ðúRv“–ßq©òTæÖ{¢üd±ú£à‰\šcby¬ˆ;«7ËóÛ²ÛMŠ‡55*êÔpºàCvAQ‹öÂx(Ìr–A=hTE&}–E©º©íÁcl2èĤ'ÃîÁ´“u9;ë9+ƒ1Çx(ƒãˆ¡<QŠ²3¥2½óœIzÊ<£J"Œç„É“ ¤-¤=…n=ï–Ñ~:.O†;$푉¹l¨t…˜£0D¼PM™>p5&ɸ¡ß¾Qâ8㱎±C_‹fìX¶CN"µ¸*‘«T¨Ž×õúõ€‘œ×¹vl3[Cßb÷}/
+Ðòï=/¶fG}-&›¯Daeq,|³l¨ è“<ûR0¾±)3T^*nžêH§žç$b¦ÖlÜ‘"VDrŽôf>ŸéƯb߇<ã ߧ;–àE®´΋˜…7j‹²Ï¤šå®ÏHr•2 çìÀúá«·Úðg˔ﲜ~™xö¸Aô²è%©–H­1O^HË”žy&Ó¬[—öƒ—ÇŠHþÒµ^ø«ÚÍaô꣣— i%ø½/é¹ÈiŸA/_TEZ’MºàÓRhôÁäÙ §PFt5Ck,ÿ/t±Ç2 ~äq/$¬ˆt‚vÑs(IÐ
+p¢Ò£ U´&Í2XÎ -ý˜š9"ØWr"Í Ý~B'‚1µÒ ³³™vÀ†px$!UÕÙêÙ=*)jóYE§¸·ÍS ¦ô„¾ 䊻ËÐ Ka°.ébË5:$4µ(#¬Á$ßDͨ]æ7
+=OÎTú.Ü÷v ç9Þ莴ÙìÙt#Z‚N-]϶*}VÓ)Þ„YÔ <ü&’ ªWT ®¬¬5Î9Z?ä³!ØÄõÿï¦8Ù úÉŒ’=3´Ðž!ÈÕ…âC´žMñXU}P¢¸¦®‰îÂåÝa!he¸r7O¾JÉ­¿d/Ù‘›”€qüUëj½ eàvXðe`à¿aÿ´*ð ÷Q–TyjŒÝ|x 0ôÄdO2+u2OÔ—”šÜ„fR£ù¸Â"VDzTcÃkê(C#Âi:#¡ }~oÔ=·¶Û™…sÜU5Œ¹y¾È>ú]4¬d]ÎyÚí"gæn îL9|+" }éàj€ßw¥ @ÒJpº+%
+}¿ÌlûM…z3¥Tß›Xô¨&M`¡•{®+ÇÝ)ARÿmþdè þ°;œS½©%yèL-÷¾„¿ªk™ _0%O˜F. ¬Ns¨W‰ö'ÌÁUþË©/ýǤ/«ªÞu¾ sŸ Ó‡Yñ#¸Þ\ýÏ«†Ï ËLªÜ]³ ÚÉﮇŸdý=°_E
+endstream
+endobj
+588 0 obj
+<<
+/Type /Page
+/Contents 589 0 R
+/Resources 587 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 442 0 R
+/Annots [ 584 0 R 585 0 R 586 0 R ]
+>>
+endobj
+584 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [182.855 720.391 228.324 732.002]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+585 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [247.444 259.974 292.914 271.585]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+586 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [495.065 259.974 503.394 271.585]
+/A << /S /GoTo /D (figure.caption.1) >>
+>>
+endobj
+590 0 obj
+<<
+/D [588 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+5 0 obj
+<<
+/D [588 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+9 0 obj
+<<
+/D [588 0 R /XYZ 49.606 764.487 null]
+>>
+endobj
+13 0 obj
+<<
+/D [588 0 R /XYZ 49.606 683.966 null]
+>>
+endobj
+17 0 obj
+<<
+/D [588 0 R /XYZ 49.606 465.84 null]
+>>
+endobj
+21 0 obj
+<<
+/D [588 0 R /XYZ 49.606 359.077 null]
+>>
+endobj
+25 0 obj
+<<
+/D [588 0 R /XYZ 49.606 315.208 null]
+>>
+endobj
+592 0 obj
+<<
+/D [588 0 R /XYZ 49.606 254.987 null]
+>>
+endobj
+587 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F84 441 0 R /F122 591 0 R /F93 449 0 R /F115 467 0 R /F94 466 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+598 0 obj
+<<
+/Length 2718
+/Filter /FlateDecode
+>>
+stream
+xÚÍËrã¸ñ>_¡£\es
+zù²µLeÛ7[³¶<mʆ!Û­#8#.®R©½]hDœÛ¦´nS=ò±]Ývee™Rgû®1¯õîÎÕŽ°Ž6<¡}ܯê*Â;³åç_ó;4½£­÷¸Yd˶ìzƒÄ´ôÝíJ†ÂXpÙ
+A—À(ÕëUJœQ)å ÞóåúT›dåzØäåjö4QÄ“4Ñ -]Ù=N&3ŠàæB‚Nhha;c@é”nk\× tR ç»cp_:Ë`5ð=Kï]\2S=˜Ç–4KÅQ&Ò©f*П sÞY°Ö@QÆ"Ùžl"ÿŸH(M£ÿx4³A)É8 {Íð¢"ˆ5®Ðð,ÓÑômM£YÕ÷–Ɉ`ne«ú@â,²å$·ºa|õd›ZVv{!òew‚±)ow|±'…½A–GZÉ©ÌÖ¦E„™"d¨à*?™†7¡Ýæß{þÑ·AáY €­w™þ¼§a¼vz_º´ÿìËôƒ¦ùFVC¥5
+­µsà³” :EψGøJQOó`ùÈbòåCÙí2›MI·Öt= Í Óq£ï ù:œD©xš¨ëSÔK½¾»@síh®2½[ï¼Ó¿ùoýðd;kî½øèx“"a.ø3¶£¾íMU=þø¹$É`Eo÷‡ê3Ò"ÒB=1#%ø•’Êáô`]8KÖ…Óh]8Ö}×––—×D`§ŠÅyW‚'º€×uWd+yeêÄ¿uM¹êÉ/Ç…×ßTÄ|L ®`T’uÝ£Çî®Á@K‡þ6ˆ^Veg ZRÕ´iÂÁzýŠÙìØ”Ä(yyßÈgk]Ì‹:uU¨AäÉ_Ö™x!Ò(I!eB¥‘iTÄJ$2*Ò„pÊɑŧ+Çñòšù€‘þûz¿òÛÜž6(•:]a¬‘˜Åûƒu¶1SÄôqÝ5ýlx.O‹½¢kÐÌAwý³ol{ÁL|2„S€¶‘
+äB1ä’Ë
+=s{ª"ˆ’C’h¥&†Çm]'m#²öëG×™/C(%¤“  ¯¡Œô¨*×s¦¤Æù`—§ÑïØ’“±ƒH´Šâ\Øt’k‘¤ü€Ow}”Žå ßß›ª·?'lJáü@¢O<ëµw¥¨±øíÀ>þ¥2I¾¾è¶<¶$ª0IÏŸu\“·LWÀ¬œ”˜ðH±AÀQ<ÈkÅqI”ªâtù¶ªhýhmðÁzÃ/‰Xú æ}ÜxÊ~©òHµ”k†`‘ð
+C†N8@YÖ½|GVDJ5ø•sW\Î`ÑQ–ó&Îf˜ òÊ_D„i>\–O]ÖŸçe…JY¼LV"tØðnH/f’9À”å¯FõÁµ`eåO±e@zöjd×Ö\SÅ5G€™:‡+›àZµÏ¢Ë€¹úõ¤}„Šà[ù~¤é0O‹0Ï^ævÕ”³n­
+Ýä÷>œÅå%á£t ÖöÐbL[Ÿ²# Nôog°Ï)\›é—E…Ur¬ÏK]e#Ãð)Ðî\c.Ärg°ÆÂDke­cˆ²rJÊy®Þr>¶¥Åý I"#­ÓÿÔIfQš½ÚRsÖ*ù5¬zÎÎ’˜>`Úú’Þ Å%g¸i’Kä´¤º·®´nmA÷s`ç1Ó? i<˜É_Üõ®<Ì©‘™!ûI·d?Ž¾§JLµ,£1á2utjzßSJ nŒáܦ¶¼
+‰=d=PCõ{j
+àÌôkBìÀÁÀ5Ð{uÒQÇ÷ÿFåõ|éÖœ} ¨¼Ä¥Q®òJÛæbO‰c,• ¡Š€²Ç–>ú–š>Š|Œ«¾¬6'G¨:ºä B§¿*´y{ -Ó¶§—T‘ˆO¼º×Y@7ª<1›ÎÕòÇ ðã Ü@åº r5Í+<¸ñbt–6¬êº²¨£¸ÔÂA(Ñ.Yh~î2휆A€ÒùÀñÞ­SsÖÙzŠÓ År ˜)å\’C¶s°ágÉ
+#äÛ¾¢½lœŒŒ>È£ÜW¶Ü…ÇÙõÎ4#¡®
+M³D1
+endstream
+endobj
+597 0 obj
+<<
+/Type /Page
+/Contents 598 0 R
+/Resources 596 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 601 0 R
+/Annots [ 593 0 R 594 0 R 595 0 R ]
+>>
+endobj
+593 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [394.692 475.479 440.161 487.2]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+594 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [119.853 296.261 134.518 307.872]
+/A << /S /GoTo /D (figure.caption.39) >>
+>>
+endobj
+595 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [209.805 220.1 218.134 231.711]
+/A << /S /GoTo /D (table.caption.2) >>
+>>
+endobj
+599 0 obj
+<<
+/D [597 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+29 0 obj
+<<
+/D [597 0 R /XYZ 49.606 609.897 null]
+>>
+endobj
+33 0 obj
+<<
+/D [597 0 R /XYZ 49.606 578.718 null]
+>>
+endobj
+37 0 obj
+<<
+/D [597 0 R /XYZ 49.606 263.394 null]
+>>
+endobj
+596 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F94 466 0 R /F84 441 0 R /F90 447 0 R /F115 467 0 R /F122 591 0 R /F93 449 0 R /F125 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+606 0 obj
+<<
+/Length 4178
+/Filter /FlateDecode
+>>
+stream
+xÚí]K“Û6¾Ï¯àQSea € È­Ê!É&©d7›xgªö`çÀ‘8+5£‡ù÷Ûx4ø%™
+&ˆ„¯ŒI@…9$O®hB!½÷ëù| æ¼U9 0pÊàu¦ú~®Ö_W»óƒœTd$¥SƒÁ€¹Š® ¡T¹0tÎEF 1‚ÁÁI"ÎÂ0ÕÆ ŒLº©Æé@^a±ŽIªœAªÏ2|vWFƒ'Ðy*ƒŒIFR‘LbŒÂÊ÷µx>‘"0 §‰§"æªrEVÂR_MìEˆíL‘‚H!îCfŠÒ$%bŒ§ šAsÅÐ׃*F
+ý¹Ú﫦Ë;@£c_=À¢c!Ný¡ D§"F8Ó1ñz
+ Œæ²ô4UøÒQuRu
+q}L¯
+qÜ` r/@¤<lSJç$‘y÷*Ú€†C9‰ÓÔqïõþP¬×E{Â
+¤¡0&’2G›weqwÜ=‹ ³´ã_JšA–4ƒ0,iaXº Á@º °t„aén<ÆYºkAyÐ]ˆ1HTSƒ3œžÖº›D3Çé§ræŠ`ÔSˤ!þµL*rà0–†Qi–)Y•¦jÛ0ÐQ–.².•>\gÓÑ °i²i²i²i
+Bò06„fS¬ è Æ±hí¨/‘èèèhŒó[ZX{&ÑÄNÆzj‚„>…&vNÁSL ~¡58Û‰­ “±!QåÒH¦‘
+El¶ôÒÃeË qÙÒOÌ–!Ù’kâQ{éû‡Fâj'ŒS%5Û’o4чË4ký-°„S}ºKÊ­Ô¿·‡Û9§röx¬õ~ÅÚ|ÿ´*ksuX•ª“l)˜!s¥ãð9P'›o„ôöIoÕ×ð0–ÕŸÇ}¹$:Q÷ÍíÙ:§2'L°hž9ykïUk©×/Ì°2ΠM2ÔÛžsøÕã®*ëåúeॹ€K”ïÚš3µ^Æ£9‹I­ê÷·4MgÅú4ª°¿ÃgÎOÊ·¨jµX™Ëßoy:+_l »[ÆfeS¶‚ë“çæ Ïýp}7õÞ9˜s®NüI¡«8gfc´©xBÕ¦&zç0eú쎓;nmŸ ­…ïW*,™¡‰êK>[–ïã˜Õ¥½§"S—W MºhkJÀ|SPÕ¦ÀÊf³EY°¢ÔwU­ÂävžÁõ]Yö_U/«ÕòÆ@ ªIsuN‘iôZ{[½¶úé®h³]VÊrg[˜r²uâãv×4;}±®ö‡n‹jÝÆÇb},{¾ìù.§ ’å¼í4vÝiÍ9‘ç¼—‰ì¹--·Á—¶Ûà«©K¸h׃¾±5ŸÆypQ<l?–½‡¬¯[°Kóõáe s¶Æ¬„=+€Õ*S®çÒºÞ¾Y»:I‰áŽ¯[ñÐnZBß³¶ïùuß7giŽñ½dí&˺M–b;b]ßÃwÓp6\6{(AÞCØÎYÇ÷JxØ÷ê¾u½@×+¥×'DBßì/êúN³O®»~ø¸Ñ3aA•ðnð¼Å
+éÔÔtq0®Íg…)X‹ßm‰®(ƒÈ¡4eËíáPÚâµÚî©K‡¡J«=ÔÓ‹-\ÙWëC©k¼.¦©t#bÂ'}tW$ðhj]¬*«ØÏu$Ä]“öÇ9`<™™Þ½Öæ
+×/oŒ·öÇýS¹8t„ÄlµÝ*Ý>¡´@Œ'x°ª?ô
+¬};ÞU’½"#÷<ƒ Œ¸¡œëFÄZAÇN° ì&Š“XÏ’èCûÓ,s§¶ª¹B’Ki†åV
+…̯Sœüü@OJuÛŠz­«Sõm4ügÈNø?×3þcL|Û~~Þ
+÷«â©4e:Úh?«I»˜ë_ýq7Õ¢)Á“'íò ¾H]4Ë7{+ó84³Î¥Þ ù¹û"Ô¯ ¹eo;±;O² ‚÷f¨ŸÊ…Q`IìUg)hp•7 ´ ™ª­9®IœÝÒHˆB”{34§¬ÇV
+endstream
+endobj
+605 0 obj
+<<
+/Type /Page
+/Contents 606 0 R
+/Resources 604 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 601 0 R
+/Annots [ 603 0 R ]
+>>
+endobj
+603 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [430.539 320.285 476.008 331.897]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+607 0 obj
+<<
+/D [605 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+602 0 obj
+<<
+/D [605 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+41 0 obj
+<<
+/D [605 0 R /XYZ 49.606 460.732 null]
+>>
+endobj
+45 0 obj
+<<
+/D [605 0 R /XYZ 49.606 422.745 null]
+>>
+endobj
+49 0 obj
+<<
+/D [605 0 R /XYZ 49.606 384.897 null]
+>>
+endobj
+53 0 obj
+<<
+/D [605 0 R /XYZ 49.606 347.05 null]
+>>
+endobj
+608 0 obj
+<<
+/D [605 0 R /XYZ 49.606 266.487 null]
+>>
+endobj
+57 0 obj
+<<
+/D [605 0 R /XYZ 49.606 130.558 null]
+>>
+endobj
+604 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F84 441 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+612 0 obj
+<<
+/Length 3211
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ys¹~ׯ˜G*)`qcª<Ø.{“­lj+•¯(Š2YËé8þ÷isc†q¨“¶ì™i6  ÑølŒHò5!ÉÏg¤v½9£p% M´ÀĨD†I*’Éòìó’\Ág¿$s“&ßç2B ‡ûEòéìcU³24ÇF².À­±á<ˆx{qöÓCƒb*¹¸N(טK²(&š'WÉçÑ»õr9^]¹øåìýE©b&fŒR3)6B&:%X²Ô×üá\šÑx²¯Wç8€ Äèv¼œ6•‘Œ`¨°¿.ÕöÆœ -y— ¦°èŽÑ
+«‘cû³ç¨Ê£Xq€ _ç›MÔ|òyÓ»¤ÅQç’ ’P®MJ;?}“
+¤:…¦ÒäJ|N¾
+ ¡}D1·xÁæ¦37} ¹ æà<ç€æFÝ¢Á°Ñº§çSðGÛ†»~æV6´ƒú:,ìqÓ C…)¬ ÒÂ
+µR´Œ¼ ©
+,EQHH(î^ÚÓ‚Z,.`fWÊ@ˆ sýÎx^ íbƽµÚ>t†Bj`ø øŠ)Bkè¹›Z^-ºh•eeá]žV›cÃgkŒÃÙb
+ó þª˜–ö½ÿižï¾\¯Ö“Ùí:¼á¿¨£¢°‚[.³2³ùæ1aF—ëõbj Á>l`Ü'3ÿÇ9W£éxÄöÛú{(a»ÎsC׬¸âÂg_§«éíxkíÉ>ÎCc/.¨|ÎØ(¨ ã ]oìÆ¥ØHåõ¼^ßžÓt´o±Ø7Ù
+ïÝ»‰UŒRØã«8Ç,ï_[Q¾Ù¾ŒË
+{BÕ·ºÜJH²%‚.õÇ­¨\›#JµÂ‚Â)lXö»¶4Í¿Þ•|Ù½ÿßxù­ÖŃPÊ "fi<Nª‡Gàx~48}®Ï¢ã~Qø¬\ºJ#¬Ó»ÃºÍd¼èŒè¸qÇ@k-nðPntôc}ço|°FCž4 7¾Ï7w‹­ ñ[çÑÑe&×_––†ÃFg*½ Ÿ^M¯Çð‰°!Odt¸ÒØmP­ý+Ýyh; ¬?J1±åxÑ5Ãmi¬ïVWãÛ0„ëÉvü5 ç!€ûæ›:™o¦‹ÀG'Ëê˜_Í!˜ßB¼hX-B,)pªlú
+endstream
+endobj
+611 0 obj
+<<
+/Type /Page
+/Contents 612 0 R
+/Resources 610 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 601 0 R
+/Annots [ 609 0 R ]
+>>
+endobj
+609 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [473.038 288.286 518.508 299.897]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+613 0 obj
+<<
+/D [611 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+614 0 obj
+<<
+/D [611 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+61 0 obj
+<<
+/D [611 0 R /XYZ 49.606 315.19 null]
+>>
+endobj
+615 0 obj
+<<
+/D [611 0 R /XYZ 49.606 282.308 null]
+>>
+endobj
+65 0 obj
+<<
+/D [611 0 R /XYZ 49.606 148.168 null]
+>>
+endobj
+610 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R /F115 467 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+619 0 obj
+<<
+/Length 3328
+/Filter /FlateDecode
+>>
+stream
+xÚí[_Û6ßO¡G/éøW¤
+ô¡)Òà(ÐÜ-pÀµ}ðzµY_mk»övùî7Ã!)R¦×ö&‡pA“X ‡3Ù!ç'•Uï+V½½`“_ÿ²ŠW¢3M+meTÛ!ªÅúâ×
+¸ÞVŽõ‚5²³ºzªLÂКsÞh.«ZjáÆòžù¿éõb • –u•ê+ŒŸsò‡5šñNÃhk¬’0èÔù±úÙÉ»©.jÎ`VÆTU›†Ù¶íªõqj ®@™çhuB¼+ð‚Ð×ÕÅ»äOªüŸ®Û?«‹MIôË`éÅB´Rá®8Ç?r
+ÏõË¥lgý’»ÜÐïã¶oœ§Ù,ff‰ÈЦu¤œñfA…ÿ,©À¹N( Ég‚›á²n™˜Ý>Ì×}6ïDuìÓTuu·Ü‚ºRÍ®‡aÕÏ7t³}Zîwt=7óÕjxò#n‡Ï}ß/–?1&t¿ÖëùæƳýÄ4Û€N«%#ÀS oÛ Ï÷ËÕ›_—÷ë~³+¸6zÕ0X0Ü—q{qƒ`®’h!ÓªDò÷ËMi-ˆ‚S·çuùe­X;Û ô{ÝÓ/,è ]wî†ÇÝÌéçv¾Ø-‡¿ÁEh`AZ6ûëf»ëç7¯à‰°.êËr˜Q}w±nœû‡­‚Y1=£ëÅ°|Œ;£«Ê•Q&÷*HQ8§+·] sù7˜Ê)=M wMšø•—º¥ßûþÁ‡£ƒ+]üýíEõ£cøæ‡Ú#à[ç×4,AÍ<?Òìë€n9œÌYðœÑPtÀ°¬’…ÎA݇
+<QÓéîèHìí<Ô&ˆêßñ8==Mã_„ßà\¤$çÉq{…N(’“qñÀžpRïZðHDS—ÙëCü#==åïS÷[]ï‘9H„¬h¸ÅŠ·ÎÈPó[<œsÑtLñ¸V$Ö4ð~”õ0R`5 šñVY?‡†~c$y!Ò ©mcaãv(dBµ°ë¶pŽsHhQíQ—HrQ÷äŽÖ5ÚÉ©ƒp“QHícîup0¹v Ô¨ªUl¦†¤Bþ‚PôžÆ´Ç
+Zȵ,KÐ[ÊX^•æL$&´påFdØóHP”8z"‘h.µ£š k´&
+Ü7›œvÀM¯«ç€ u
+þóB(>ÿïT†ýy¢ÅGEÕÎ+,§Ë=·½@ã“ŠÕ³N¢m9Ö³³Ö|Zöà˜Ç˜jRö8v!ͱ(ÐS•Ö½@ÊÊ^ê¢X’"qÌ6?‡NI¤ ÏËåN—W=8p
+%u;V= aTRõ")¯zžl&U/’ÓúOÓd•Ðë#ǺwFLj#
+ßc3kRqŽVB:ÀÍñ`ÿŽ¿sz–H¿¶Kוû^O¤ jÓ¢´vùG3κ±oLLÄùIY™›\°}b t÷Ztàøb
+`5èäQ…jiÏŒÍý—Pq]÷ã
+¿ÏàþCP¼rŸˆðõÀë{a,·= [ ‹9º¿
+²QåøÍÑ7üÓìem®µöZ·­—››%¨ÖS A|5¶ã¹/¦ˆŒe„LÁoÔÌÝaú`­¦ó¸ómŸ:`33Íø5Õs&3جìÄäW(ÚŒ³z¬ ®L…³.ïï
+‹“ÈqA©{íR¶óË€”írý¸ÚÍ7ýð¸]}¸4vÖLæJÃŽ&§•Æ¦•¦Ëá,à,[€³Ô¬ŸÓ§]vÖo«!êãJ=ÈZ<>¬|»~˜/z2 Fˆ£×/³uDð¾vÒ<bcHÄX@šȲ¢è˜cQħ=Zðû®ßl‰ „¥3°±È)Š\6IÀßÔ›Óíý|ùªÆfW—¸~ùW†Çy4u1ÐËPrÇE}äF] «nŽTt­ËnëáNÓŽ@XR–.rô8Ÿ+ºø΂Pã°ÅÒí~ÑMfÖ9ú (]u¢š÷.U
+Xrèß>;LI6”±Ie`ßáD
+:Ô€!c»±Vœ‚Rf‡Ž#(%ö¿Òýo™Bí*á{’ÿ+nsÖâkY➎m):û,å‘T
+endstream
+endobj
+618 0 obj
+<<
+/Type /Page
+/Contents 619 0 R
+/Resources 617 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 601 0 R
+/Annots [ 616 0 R ]
+>>
+endobj
+616 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [321.337 625.446 366.807 637.057]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+620 0 obj
+<<
+/D [618 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+621 0 obj
+<<
+/D [618 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+69 0 obj
+<<
+/D [618 0 R /XYZ 49.606 664.305 null]
+>>
+endobj
+622 0 obj
+<<
+/D [618 0 R /XYZ 49.606 619.468 null]
+>>
+endobj
+73 0 obj
+<<
+/D [618 0 R /XYZ 49.606 473.989 null]
+>>
+endobj
+623 0 obj
+<<
+/D [618 0 R /XYZ 49.606 393.177 null]
+>>
+endobj
+77 0 obj
+<<
+/D [618 0 R /XYZ 49.606 185.481 null]
+>>
+endobj
+617 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F93 449 0 R /F84 441 0 R /F90 447 0 R /F115 467 0 R /F125 600 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+628 0 obj
+<<
+/Length 2427
+/Filter /FlateDecode
+>>
+stream
+xÚíZKsÛF¾óWàHU³óÂ<¶j²×öf+ÎF–jsp|€HÐÂd²¢rù¿oÏ‹x
+IUraY6€AO?æëiô72Ž>G8z7ý+qD"ª%LES¤-Ö³/H½‹¬è #¦UÝGfØý„©1QA£X*DbæïüßöýbÝ™šÄ"Â$ñ&U/¼v·±Jæ˜Ó¨ˆf‰@B3cŒ†˜’”›áËhvÑr-èI0Ñ èRRq0m ’Ñ'«}ÍbNQB1(£
+1.¤66ŸÝ ‚Ù©±¸=x3" J_Y·w?mçÿrß~få˜ê€
+€&´4
+Ìcó4jã²¢U@
+ž6愓í5ó‡ñí‹AÀ"áÇ‹G§L$æž&<Ša•16ë»K Œ$–tÙkûk6S ÅÚMt„÷¿©'8ú
+·ŽA\åâíÄNÒ˜G‰Ns!¾=“lž¾ÛœQ:ÏÎÀ%9—‡«fó7¤ëÛÂV+w­o2³
+ý-CØ¿œi-œ“ëx`R…³ ––Ë]f-¥
+2!ÿF”A4„í?cbž=8/óÒ]ﶲ áGŽ‘À6n©Œj£Ì^ÓˆxV5EÄü!ÎâÚ¾à| N¬²\¦EçÕÆ]—wëõƒ³mJI„… à >‡ÕÎØfx$¿{¡KðÒ&Ž|u“oÏà;Íç×UUdié¶÷y½¸q÷»Õ1ËMzï'ìà$Æ-<%Eœª^Xf‚ ËêhÂêz¦ûD0 ”ÇF ª·àDM¿`>{>l­Ï°²É0{³}X_WrÉx™e~A°k
+À_xðÆ8ð]è¦ @š.
+Xã³Ó“ÌÓÚ_T'eí ËÇͼjíµVž—ƒøïyéõTÞö:/ò:Ý<¸§ëÔï¸wºr礽Oñ|‘–nô:s·.5¿æKë/¼¹ÏmR»²r#_ÓâÎ@Åßßä‹› X%Ë»…·™ºñë"-w#>l5¼³g"«l3Ô›‰±°üöâÂn= —v§Ý§vß,·îmkËÁ“à $í–‹ï3»Ûà…]ÔF@4€‚pHQ–0ŒùÕÉÔOÈj÷&¨²«µ jSo(/·Ù¦‹(]8Wˇµ?b)wYn«xÕ;2Kàƒ®Îˆ
+¨£û[.>¨àX¹ú‚!êHÅ„.Û+Ðé1”BŠ Ð%àJ|¢o·é]á{Eµ^Û²on«m=ÉauOÜákŽ5é:t~ùÓaði˜
+ÎèŽ/ïÏüy‰½‘
+ªäq ¥¡´²…h÷ËÎPöØ#zÔÚs÷®GWg@´Ï y™Àeë\Ìrèi}\g9M%)Á µÆ€Cf5ÄÊ(Îö¯.{7ܨEߦ¾")gØà ”§„ô9Õÿ:ïÞŠ
+endstream
+endobj
+627 0 obj
+<<
+/Type /Page
+/Contents 628 0 R
+/Resources 626 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 601 0 R
+/Annots [ 624 0 R 625 0 R ]
+>>
+endobj
+624 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [168.042 550.872 213.511 562.484]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+625 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [212.137 305.895 220.465 317.506]
+/A << /S /GoTo /D (table.caption.11) >>
+>>
+endobj
+629 0 obj
+<<
+/D [627 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+630 0 obj
+<<
+/D [627 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+81 0 obj
+<<
+/D [627 0 R /XYZ 49.606 577.776 null]
+>>
+endobj
+631 0 obj
+<<
+/D [627 0 R /XYZ 49.606 544.895 null]
+>>
+endobj
+85 0 obj
+<<
+/D [627 0 R /XYZ 49.606 380.62 null]
+>>
+endobj
+632 0 obj
+<<
+/D [627 0 R /XYZ 49.606 299.917 null]
+>>
+endobj
+626 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F93 449 0 R /F84 441 0 R /F90 447 0 R /F115 467 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+635 0 obj
+<<
+/Length 2628
+/Filter /FlateDecode
+>>
+stream
+xÚíXÝoÜ8Ï_áGPë¬[Öyؽm‹¶X °´}ðÌ(3¾zìéØ“4Xô_J”ü¥I‹=ìKI,ÉERä¤Óh¥ÑË‹tñ¤ð?hÄ”$9/"És’³<Ú.>E@õ2²¤)áªÈ¢ÛÈ,ãÏoM¨âD(%Bš1³—xçþ¦ãÍa¶5Ï å"Ê%Q‚»3¿”d)Uì.dD4:8ß6ºH#KY”°‚p‘K]ëèâkkÉtq ¦¿Do&¿©ðÿ¸lDMˆõÁ6’Œä¹’†™Ž³àoç*Z”΋,ó‡9Òp{</¢)YroiÝéþ­¡\,!ݧ
+Âi%Š(àŽÄ&NÇî;àèØ£çQ¹ˆ™¥DäÖ¹ºø׋‚‚a””ytuy*OtµÞÅÿ^}¸úÏÅó«Ù’
+X½BYQßDá_HOøS„Éü›T|3ÝŸŒ ? ‰³ï?mÜ?=ì±°À•³ ŸHÅ‘L}¿Tãþ©T¦€9E”þÀ£xôâ‡ä˜‰ÇðÈS}–T?ðèïã„2ÂaG"(ýÎËÎ
+"
+¸kZ@âȸk$ò4öª¯V"¿ásÒù};GyC(˜8LÅÙ@“3RPpQÀÓL>¡î ¥ÝT‚KB¨ä…"’ÊAu((Á%M-jÒ®£òDV÷½.·ŸÎå©×§Î
+I0`ºÜêú‡±}ö6öÿ²YI|·’LÚŒ—©P hÇ É`–ØZáÅJò¸ÚO+Æbî ~‚§âñóÏåáX»ÅöŸý^£oÍý‘ePB ÎõOTžøãŠç±¾CöUƒÏs§‰5xú@£¤–PQ’Kk " š-kF(a36Ñ;ˆ°4œ œÇúslj"~QézÕ`,``áÌõºíz¤¢˜"¼‡I[ß:^WõÛ»Ã:ÀN@ƒW t›öp(8•Ùˆ,`4œ^Û+i¡ã((›
+:9ïW½>U!
+t7™J'˜cÖ æ&å‚pÄ—ßè¸ݳ«œ¤¦=8½jº,h ÀQAQ!²Ç
+‰“Á‚`!‚`ñòÔž&<
+ /Œ_µ§`X¥„æì QݳâÅ('œÓo|A²rÆ´”sˆ•~£põ ˜Á•ô[¯M-<b.÷PwÆX±˜ÚÀYmРËõ©ÒͶ€:°á0J™}šªn¦Šé¦ €È¹ó¶G«ôЙNóܹâçh¦$¾.¥Æw“JÒîØi{êd¿°% ä^«³íNúJ»í6£Ã†¶q´>g“Ð=‹L´ ×¾‰§œiê'ÔZ˜“Á^·-~˜Hp Šhnz-Ý¡d.#ÿB ’Ã<™P]Y[ " ‹5í9sÇ?·ë™­¦'ËÿE tsƒ0Û6°‘°Å‚j­Jßh·¸¯º`þ£9tscªášv&XCµ:è™ÉÇ‹u6ú˜a÷H·¥Ì·wO¼B@ž=YÀöp¯ôl¿pÕ®±¨)(šL¸ræOa„±mÞ5­ÍL‡²›ÉŸ€MáR.`ÄT€B>dQãSâ[ ªÏÄÄ
+V‘©Â©S˜ÎƧ
+$RA}1xF·)k:ü¢ç£ýô¥ ­îŠ¢fŸšw2RäÁD;?@˜¼¸æ,_a´ó£×è
+…¸¹6ÉǨ_ë]Õü9¤Ë/ﬞ—ìà %³¤™Ë^ï\¥zé Êg¡¦­¼4©Å>•ÛªÅaDwÔÓÏÔÏB ­7{]ÃI¶'~øòÑ|0kvÁ÷¶»»45ž¼:”;}
+3ó²®OÕ®Üê tý¹»<éíy£· uò¿ÇäºéÚÓWÔ©ËÓÎY^îÚVìfÚ´ˆm{R¸ÌfWû;ktýð…€”[tŒóÆVP’+ƒx
+ç¨tþùûùÕÅ_Ö¿y
+endstream
+endobj
+634 0 obj
+<<
+/Type /Page
+/Contents 635 0 R
+/Resources 633 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 601 0 R
+>>
+endobj
+636 0 obj
+<<
+/D [634 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+637 0 obj
+<<
+/D [634 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+89 0 obj
+<<
+/D [634 0 R /XYZ 49.606 645.114 null]
+>>
+endobj
+93 0 obj
+<<
+/D [634 0 R /XYZ 49.606 551.015 null]
+>>
+endobj
+97 0 obj
+<<
+/D [634 0 R /XYZ 49.606 483.433 null]
+>>
+endobj
+633 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F93 449 0 R /F84 441 0 R /F90 447 0 R /F115 467 0 R /F122 591 0 R /F125 600 0 R /F129 638 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+641 0 obj
+<<
+/Length 2079
+/Filter /FlateDecode
+>>
+stream
+xÚíZKo$5¾Ï¯ècr°ñûÁqaAB€%H ‡Uv7AÊ,$°‚ŸÏçvûÙî™dÚK¤™¤»ús¹l—«Êß4›n&6}»cÝŽ¿lâ“ð–é&|©ò~ºÞïî' ¾fèŽQéžþž‚8~RSÂ… ÂH\(\xsŠ‡Ë·¾¾Þ7mµ£FûÉXê…[:~ÕŒC5£Î:%ÑôV½™~µ¾›v}kÁÄD„£Rë§ýQiÞM»C2R oX(}5í.ªOmüg·í§i÷q¤z&–MDSc¼
+Âm¹öqÙqVÀ9•Òi4æûˆwX=iÜTÃÈJ±Kïéi@v¢ˆ»¹¢¢’›‰xêµ î$*×k7,þ5á©ås¢åvÖòêj÷Å7ÞJ½…äêÔP tõnzsöÕù¯Wßí^_•MÕ¡ ê¢tmͦ^LãÏhœøz*¬~Ò/êö¤(8ÞY›Ó{+í×å™×Ô)3IF•§®£Ü…µóŠâ»µv•@óÚý"„>'ºxµZȶI»ÑpR,ߚѧ†2ͨý1!g–*npUíÚ¡07o£EÁn…²`œ…·Zcæý«¨ÐÜÉ¡Ì *…òX6©œP“Ãáô<Àt} óûç¤W@V½„fYˆœ%œš²«18\Íå4Yz£~n׃¾\‹8–Ý9nÇB‡Ç´Së…–“N¢ÐaP“o®ç ×!ÈJ Y÷Z)ÂŒS\NY™ñá‘rswùæ:DÙ°V2ìl<'÷/Ó²Þ±ß+5o-õh¥!¥jµlNrL\tÜ 5ßåÏCª‘ÒW7&„¼ýq© <…ÃÂÜ>†5¸Ù$ ËUNò(õ¬df./†ÂÛªÂèë¨Ü€3Tš–™N9œÄKÁæ#žYÕˆæ:Bتuî/$"Š¨Œµÿ»2,·ÞWBκµ¥” Oô!Îx-xF82ˆÔÚM.&M]dwíl&fúÂËgTEÁÄ,©waÒ<,?11#72e'b¬ÄˆÄ¼ hNÌ?¯rq‡jsq´•cG#R†z† ïÕΟ8$\c’CNáõpš±ŒÏCZP k ÆÕjT°Y,&•ÉÿU‘Á¥Dd•¨¯÷Ç¥Ø\[mš2c(Ìí»:#ƒÕUŠB™ÂóyBD%=Ü…Y#± §ДóCÍ‘¼ÇÍzŒ¡ÎY„ñù.ÄUðÿ¥—ü”¬›“q?d££lp;ž˜+>ÚÖ¡#º±°FŸ\
+‡ó±
+Žå6KáˆJ Ù=¿ýãºþmq­w.ö’Êàc¡ ‡?v tT`/Ÿ8Ddk‰ ‹p.­ßbD%Ð<ÄËÁQ­…µ#ŒÖ’ÊÜõ9H¸¸¶a¯yC¹ÔBĽëL%¾«ÅDªPëª9‰%­8£C˜`Z.çbHMHcYZ'Ž¼<R+{¡W^è•ÏN¯ ô¡Ò£Wê0½Ò£^è•ÿ—^‘Z"¾£Wê ôJßäQôʱ]/¸mü¹äX<x4Ž šŸ8¨Ê˜ÅÒ£q|c>TE_þáëÕ$t¸.ÇF{‹¹ÝJ?³ ¼áŒ7S8r¡¨Á µ)ö²Ü¸«ÿôPùç-8ÖªšRÊPäYñLèNbÙRu廚k*R²ÒCV½Õt¼Ó!RúÂ7áhçÑGÚ"ÝT|S–­tŒzº]ÿr-ÊÄPÈ™¤ŒYë2·XËP‹.“’îjv¥HÉ@YwÙ,3*„å…`q¨~q¶‘ñK7Á’ek%ÃÎÆSsÿ2;[³SH"ì8‡Ú°•¥qÔÒvôÓX\tÜ 5è§àù(MUK4¥ó–ä,’^G¤YCG@tµk êvëDK9…=h šª…c t5ó¢SΙƒA‰ßŠT#ËTnŒƒ*ÍŠ;¤ nÝš…šÉøHGZ-–…âÜàp bò¬”'éc™(k)“üSQpœ‰&¿§ –Þ&p{Œo •@c*ªG©¨bí!.JrêâOàO“bX.6 C0c**Ì&Õᶈ¨boWŽ «xÖÙH¸nc:„óÌZÌ`_xç×b t¬«”­k1Rìmx€Õ˜·Ž—ÿEåÆÃ|+Îu[¥ ¥"_RYÕzGÂÒ¾;õfðAú.DSåe>s¤/m®ÐwˆÍÂî¹,ªé»,œ}A^•nÂow&þpÓ<%ëÖdÜ ÷Sìm‡óöN„Å©AJ¡àõ¨µÅêæÉ"¢h‹½ëqcö®2ø±ìá×ÔSã0²# ì4iâpD%Ð{×ÃÆì]1w¸_7vRØÆé¯ÍÐÅC,ú™±Ë†pcìáØ•@ÇbW¥l»*ƒÇ“‘‡½uøËÑ«eÉB7’Á;]…ºEqó9ÊIûˆ×ÅFì/v?Sá•/±ëˤ…ô¹ˆôïK¨yÖîÞ~|wóðû§?V,p‡nçn±:}ñ(¦µ¤NLˆ{Ö˜%¶hðà#cN°Õ˜oß¿}wÿéíÃ_ïþ\¹Mר#ÓfÛ·GNBŒ уõþ¶¼X½˜œÿöo"’ô*"©ÞEŒÛAUƒäá‡rØ© Š|·üXø͹•g¿Ý|z8âìý9&Ìžqö%.¼<{ýÏÛýw‹ô÷aú™ãŽnõ~Òõ¯m óÀ‘>ÁCþ®ÕõKÐiõž¢°O næq ÿß>ÞÐyÁØÆkœaÛ…º+ììcÞ˦Öû_÷¯
+endstream
+endobj
+640 0 obj
+<<
+/Type /Page
+/Contents 641 0 R
+/Resources 639 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 644 0 R
+>>
+endobj
+642 0 obj
+<<
+/D [640 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+643 0 obj
+<<
+/D [640 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+639 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F115 467 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+648 0 obj
+<<
+/Length 3432
+/Filter /FlateDecode
+>>
+stream
+xÚí][oÛ8~÷¯Ðc¬8¼_Û¢Sì
+Ïy+·ÂP(ž‹ezq9þr¯àÿ‚OÅNÞNÀôror
+fNž½~­KÿÀ^ÄZn?d¨+È|[A-„“é§3{2û,“µ+«ÇÙzPuŽJ®ˆu¢ñ(Â:}êßçËÅUíHGý¹ü4ý›RîáÚ54<|Ó²JØóÝdBZâ
+¸ý-ÊÎ{”Ù›´ÿÚž/`ОIÉ«ÚgD ͱ"Fj®ª:Ši%pQ
+CmoEV0ÐеþLÈzÓòµ¹Újs”ÇfŸS¸–ë}…¦ì07CB>aBÚýij>aÉÍ„ÔàôÖw/¾eë©áŸñ G·#äz¾?9ˆ<Ž.¬½ƒ¬f§Kïãæ–"Ë6‡éPÖ;² ‚:x²Mb“’Ž¡ãçù¥ž«ËŽËÊ Ûå&~ó
+/4‚(ÃoêÜÏh`¤²0”¦¶a¤eíi©€Š Š“ÏN%=yñ:r¯aH‚­Chü6d¹Éñö@¾g/;ùñÌP×D×’+‚òÊ—€+œ-»¹QÔÇ•‹\96UÑ<.Uqº¦Û‘ÚÛàžÀWÁ3t¨ê¥C‚í ƒ.šÿžà”˜×ôôÝhzæÁkz رAÌ·K[úNô+]§šul PN;F9mPnKœ«ÈOK° ¹*‚zÙ•`‘^÷+féAÄ,=ˆ˜ÅöR³|À¦uÐÉ«Y‚çS6å¬Éx5ûYþ¯ÓÅ笞^ªkÿXφ£PÐBAë^-F4çU»ÁÍ®‚– z«¥‚ˆeeVЪQT·/ßmŠY븤ͨ³ÛäöøF$(f=N1kžêçïüèž’¦Y1«FEPŽ')y‚Ëã$d @å û¦}“áÃBNÈ
+¨ÊR!Á A…'8ÿ Ó~ÙûÙ^Þ/¡rZmé0EÔ¶SŠëð~† jX@ÀZÚ_Wõ±ê} «FEP–Z ©…‹±Ò¯ r˜³½ú•WOY|ÅÁxq=­««oçãÕ4JY?Æ«‹ñ*»EZB+lõ¬Ç’Ö ·(_¡|u$òÕ®“ê|½`âœë—¯"¨n2Þfå«–±Î±N¨£|u?òÕ΋O¢|%Æ«~ù*‚r<IqÈ”¯._í¼,1ÊW~€@ùù*‚²THpY*pe |5œ|µkCÐÈW½¦ˆÚÖaJq¹166(_=ùjgjEùJEl®a‰¨ÊR+Á!µP¾d/¡ÕÂõ¯¾’0ŒñËû6Ô«ÕÅøüµ+*Õâ´+è?­Q¼Bñêž7j%Z#ÈÌ› uÕPc˜“ùÍ„A¡ÁøÏ»®„màÆ‚]Ÿ_\°‹êÕÁwîK¿ïOP߈qÿžâüFB
+˜,M²äÖÚ•Ä=„;î jˆÀv$‚7~ôCÎl^»ò¨ÊS!f¹€c Ü@è†p¾W;àGANÈ-¦ˆÚÚaJîϱ)@õêAl Ü›[áåýÀ-N(3ù „Ayn%@äîfõ•äŠ(ëzõ+ÿ{&ŠÅÕW××ãóÿåt*!áʯS ãçFêT¨SݧN1Ö™ý¶*F´o¦„áDŠœLP¶–§U‚Zoê¼âš\”¨+QíÏèÈ¡¼ ms9…ªL7CWVD€à±TTê?'NTeX  n
+ÄUUYÏ×ûm\‚šö£›ÞR
+  J²¨E@‹Ò{jQ=¤¨2õõÖ1¹3†~¢žŒd–Šo¢(Cª…B
+QÃQÌ@CØ¿(Škh,ipÍóñêó2«CIK7¼]VQpÔ¡P‡:jçߌ:Œ€ˆ±ý:TÀT¼{‘Ó¡n u .p™,êP÷¢CíþãA‡âÊ%¶èPÔM‘…Á_ý;°µûþŠÃàÍf6  "(Cƒ•£nÖÃÍzÃéP;ÿ YСú:HÓÛ?ZÇdÌúQ‡z(:Ô΄Š:×0¨èס"(Cª…´ÂÍyƒèP>L3£úu(èÎSDO¿OgÓñ¢~§Ôxºººœ~ÉéRÌbëÙÀº´Jâ ÑQ—:¬.c–¯oî_¥\ ŠÖÏ9Òr £z
+ü•„+¹ñ¨xì¯õoË«Ë5ûþŠ&¡l0µ‘²}²u“äëMé=.×JøöéœB@`EsÐN,›£@œÞävjgbM–è}!z[’q¨&§©©œ’ù—w[¥ÖÒ  ( *kLÙE[í´:”à<ª’w Jbx|äáQ'˜âÞ[¬¦àíÄ$nInL̺ìbxÄMºQÆøD:ˆà4‚+möè 6&f]v>âþl\‹AGÅ8*ÆÝù85ìdFÔGQqV*€Åƒvbåš»ÐoInf]v1¢âzø°žƒ£ Ó; ÉüÔŸ]ÓdzÙr¹ÈNC
+I¨¸ƒåñLSb$.ÇiÈû˜†4ÔB8#1ìv$SCsd 7F8cCIêV)WÝ—äû25P¦7ñWÅ4¸œÖ4fª†‘‡Ö¦9K6
+!jSÌ/x¢¸µ®Z]#õÒšqRë°ÜFJ_ËÖWÜ@c\¯•J¨
+¥!ë^‡õ=IQ¯Üa‚׫j¥þ÷ê;B–¥ß›Ï¬ª.`~²uá=¬²îÿHgLõ2)¬«Úâ{¯úZ=ÌBm”)-RG‰6
+´YžÎâl”f³0¿V\±jw0¡†¬GÖãNµGøê4$öC'öÁ—Á!—±‘Æ—ÜõˆüE~ Øè?ìÙÀ5[\ÀNãKK>¦`¬õ‚lÙ~…¼¿ƒÎ8sÄ° 3YIÄÑà˳ÑÿQMO
+endstream
+endobj
+647 0 obj
+<<
+/Type /Page
+/Contents 648 0 R
+/Resources 646 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 644 0 R
+/Annots [ 645 0 R ]
+>>
+endobj
+645 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [70.329 749.592 115.798 760.596]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+649 0 obj
+<<
+/D [647 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+101 0 obj
+<<
+/D [647 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+105 0 obj
+<<
+/D [647 0 R /XYZ 49.606 736.651 null]
+>>
+endobj
+109 0 obj
+<<
+/D [647 0 R /XYZ 49.606 716.066 null]
+>>
+endobj
+650 0 obj
+<<
+/D [647 0 R /XYZ 49.606 692.156 null]
+>>
+endobj
+646 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F93 449 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+653 0 obj
+<<
+/Length 3155
+/Filter /FlateDecode
+>>
+stream
+xÚí]K“Û6¾ëWðhˆÅûqÜl%®uÕVÊkWöàòA‘5mI3Ž<Ž7ÿ~A‘ Á±$êá™N9E ô± Rý¡$->´x5£õöƒ--Xa8QLÆ–‹ÍìýZ|„¯^”g‹opSHE —
+>¯‹·³7]†IØXâÀÔˆ Z(A$Õµ‰ŸÞÍþö‹…#Ns]¼»nëÀ"‹i[¼ûX¼±Xý¹Z¯æw/KMù‹íýÃ|ûWøümu÷éå‡w¯g?¿ku‡sM콡É5ŠÛÆ®R„ƒaØhf½á?
+
+Ý¢šÕžD©Ñ?°R3àûâ(ß—ÌAÞ/É“"ê±<)Åõ}_`@…è
+¢é‰eÇ<¯$¡Zfx@“¥U†¬º¨,¥&‘¥ÔÈRÚAz(ô¸,%-Q€ ²Ôýæ÷ùC(rù²œo·áóüî£÷Yÿ‹3¶ÎŽ¶Ë/‹¯Ë¬†Ù® '¨„ñ]¦+aPĺ¨ˆåˆõ©¬™+šB_ö±x¿"R)LNÄ
+¨
+QäíßÿÝW±ºÀn Ýmz{}qäJî!£Š5­Šu<M ÿ!ÔxKxEäd¬€Š ,MR Ò•¬³(Y-&ð™ aé|À€ë¯sBV
+ì;¿Å€BÖõ Y0Ë8 €Ï®$%<S"¨ÆäyÕÅ!­Pɪ•¬ã„,)ˆãõUÊZb”l„¬Í×»Õbþ°º¿û’S¨”6~И^¡RNN%*T¨P]R¡bŒhά³DCBZ*y¥à9‰* "(ć_ÿÕW¨º¸n|¨»‹7ÏQ¢:¯D5OeäÀ†²ŠksU@EPŽ')y²·F%q}Ú!3õ6ØTPŽP¸¦@¸^*§RÕ¨ÊR!Áe©€s
+\ç¦ð~vdÁÑ×ÜŽ&LõX”⼟a @¡êú…ª)¨e ¸*ÇÒÙUNª
+¨ÊR+Á!µp5à4eW~°¦ÜŒ«U’?©¯¼s¹^.¶÷w«E]zõõóçûíÃPÉÕf9ÿòu»ÌKZ fØNŸ@Ò’ÞŠCI %­‹JZpp_p”¤%!-ðš
+ŸÚAÞkËKZAY*$¸)¨€K±ô*ïýòHIËÏ°ø# SD=–0¥¸ïÇ•ä(iý’ÖÔ2–(VåXœè¬¢@5&K¬. y…ÅWéY0RsÎGõ,¿„•ÉÚ9oVŸn–ÛœF%}þãNPv%­?i,»Bꢕ T†°F’$*2áŸGhÁ˜ÎT“DTUÜû¥'P%¨n\}mºŠ÷ÏQŸ:‹>u<G ‹#®¾+h¹Ì©S(b†’€ ¸ð,ÂT‹æÐ'[¢<“¥ ËéR5*‚2,HP9œ> (5ç‹£F AIy£RDgH)ªïù
+R×/Hµhe}ªLõMÐ¥¬Ë=ÔªÂÔ ¥:˜¡0” µ—%-'’WVInˆ¨SýO÷.·w›åÝCV‹¢šP{‚z))à¢a¹JQ—.—²|‚r)¥|Êågv¤\
+PTÑïÕ¯/}ñÛ`ÉT Û»SỌ÷¿Q’:{É”—Ž.™òq
+’:gäHÅÌ6jÌSè
+è&dÀ1uSš?’9EÔ÷dN)JU?líÔÑô2þ÷tž^ŠÐì« jTÒ+Á"½pIàDÂŒ=š‰QáJp-Q—Pýw¾Ùä+¨„¯é°|zÕJ@_üh…²ÊV”­€¶ÆÇêX+ R~b Fùò)åiWA*Ö½*žÚaºñ êdÓG¼2ÕYdª£¹!`haþ$„ØgrÏç©Q4Ì… ÁÒ©sèSÇ“@býs …^Ê|å”GEP† êxàj>,œÊù½vG9¾/v²ÌŒ§F4š% ž×k‡c?JQ×/EMÀ)¿î¨*å5Œ)òuSAV%(¤ÖNM"A Ã5µãs0-añQSW‹œÅÜæ
+W„á»ýP€:¯
+A&FL/q/€îˆQ B%è8%(Yþzƒ•ªæ/Ý¿9ÒׂB¾’pÅ 7?ûèÔý¶ìí]vìû=š†²Á#eûeë É×}é1n;gx³ Du‹…X/‡n;MMuŘ™õ öZmþ}4”ÊèR ¦l¢­v[;vá p¯¦¯¸H\\^xzró
+¸ùL%B\ëˆtÄPùÔ«Ý,ªšÈu ½¿ƒÑb
+±-!òy˜2ŒWàqæu~6$Äþ>_¯ïïïrB,s0_wè'b™‰ÏÔ@!…Ø3 ±†ZNÀHsšÀ©¥­î›á  !"~®kò}™(Óƒø½bìNk3U”âu¨iþXøûƒ 51p˜ÛÞ ßø çw(£ÛÅ?ÛW1ßTûÎ Qp=¥àŠE‚¢°zYa9øä8ˆ‹»~i‡¡—?-¡9œÆÊÔ3­Iæ øêä¨"Ê”°RDoVÿ[~ ¿­î>e•QaÕ'(QeÒ#%ª¨Œžy±2œ.§ÒVoIBˆ`Ê?0‹;-¤«îÇIGýŒ×8 ~îÇI鯲µÆÅ{t›€ŒàµÒ?Ò·hè:‡O~&!½>&x¸§(U:ì
+ß»ðWfUµ ­‰\ýn/±„d?<®IXW…Æ8ú¶WI TïœÒS8£Þ õÏgðtzgÓ?™ï;\Ñ„rë)g#ë‘õ¸ý .FGbÿàÄÆç5ââ{ä2i|Ø
+é¡m½L¶_éñQÛ¿.#¾²›©jî-Âþÿø¯ç&
+endstream
+endobj
+652 0 obj
+<<
+/Type /Page
+/Contents 653 0 R
+/Resources 651 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 644 0 R
+>>
+endobj
+654 0 obj
+<<
+/D [652 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+651 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+657 0 obj
+<<
+/Length 3322
+/Filter /FlateDecode
+>>
+stream
+xÚíMsãƆïü8ÚNæûãh'¶+Ž]ÉÚr%U[>°¸\¯*µ&µNùߧÀpÁ!4 ˆ×íZ%êåçîyÐ3Õ/•¬¾™Éöñ×™‚GY©*hᔫB„G]-ïg¯–ÕøÓ·•&Åêµð¾²N
+mü|Wý8{µßDP¢HÐÔ@²rFXéÛ&¾¼™ýåëdª$’×¾ºy ‡!b‚á½”ÕÍ›êõg÷·w·‹ÍïŸÿ|óíì«›ÎkíE<ã}eq6òã®]焆†áÁ«ˆ ÿZ蛪VÎê¶4ŽOÿ¤[Çof¯+-RŒÑì†?á1Δ*“êßïáwxÔ*UùñÛ‚ƒÉ2ø}Þ£™ïµÓÍ‹–æݦúDïªÙÕî\¼ª?΋<ÊW³õ™'¾PŸtÀ2?xò®çœþóÞ÷˜“oÒý×íI¹3Σp!Vsþ ؼ¡lÿïþ¼¼¯öûé®m½RWóà´à/h¥ö^TïeUÕæûþïßeßíÜQè ±W߬9ÚÝÁûtÀ›Ó>׫îËç»×«ZϯÝË‹¯íUÝ!_UäÀÒ²¢°ºƒÆsh&³\>XìgÚÚ‡,'U‚]Ä­¶6ðŠ×»ö\9ŒÖ®ãÎûîÓAè`£Å®êÁÐC ³+׸}÷˲š•?h¡çàe_^Ä%FZa‚—@6ô»$«²ˆrI©c—œâ’$°Gε{ÎÔ.ÑBûp’I MšÇÂ$Gú®G:1&9ƒfæ4ä7ÚÛýØØÑÌ{š»;ÙþL#xØú
+¼½ûÖ©@‘c9O³¦52Á a÷äî™r‚”—[xõ¼çeóƒ¶ç‡úÖ3V„ ”©S«
++¸ˆFD+À€â)`Õª²ˆ´B¡›Â
+Â릞g? ³òŸ³ª»“Õû-„!“á„)«Ž%L¥®§÷;L­^>µšÂZ!«êË
+é)lÕª²ˆ´V¡ck=/·r“p+÷¸•O'?Ì­,œ8HNëÞù~±Ý®Ö¿¬6$§‚TÖÈ'¨©ò6
+)¹¦ŠAÕ³‚*/¼u£.’Ã`žƒ6¼µô5Å©UÕîû×1Õ¾l?44Ë—É™R]–R7‰‘ó9hÊ$¡›>Õ©U&)elFTATœ[Zè¨g5Þ*ø°dIU£Ê"Ê…ŒòAàió©éºþ™!À‚1“UGò¤¬:’'•2 §®N)Ðýa¸@6eáK²¤ªQeå«BÆ!…ÉTK¦Æ)kD4ÃU.FœÍ`êqópGQ)çŽÓS)—¬ÐÒ2•b*õœT
+â‹6ãVú9i(c— › DUHVeQ T¡Ú
+ͱr™-C©ËB©ñ¾_øÁE'láú T£Ê¢~”*ö¯ò»“êØàìU~¡¾Ä60F)ŠI5ª,"lP¨(𼜗ù¥ z¾7u†¸„¶N’²j8I*U‡=_s
+Gh©Ã0‹2Bf‹¢V›íÃz½ºkømVˇßVô.TNá“6…L6%fȘž·b*á9µ UÆc|0`˜0P1…ª,jbÄ}S]YyÅ–¯X0œºtÅÔX“`‘“IJBg”ðz b
+UYD˜¤”±I¸bêBS£}à ŒM± §ÉÓS¨Ê"Ê…lðŠ>®˜z¢®ENø¡†ó¤¬:’'•2̧®´bj´¯¢†3‹Ù©Ñ0UwtŪ²ˆòU!c_qÅÔ4˜
+j­õ ¦²Q eÛ¾‰`j½^Ün·‹õrEá)Haë—NŽ§,RÚÄ¥SŒ§ž¹tÊ¥0nAŸƒI2†*>Ò¥S¨Ê¢Ú‚?ô•NuUåE <V¾ÎtêÒ¥Sc=‚åNË q/ƒ¨-]:…ª,ê÷H©b0œºPéÔÎáüÒ)iÚ}mÉ}¢³*‹*Ê<‘`6•&èù~äj>#p¢3˜#µ¢á©v{Ï£?s©k¨›ÚyjDÝTPuR…Ó{ºp
+E­†ðÔ¾ˆò‡fR'1)„V —NY„isýíj±Y¾kê¦ë7¹€j»ü@ó)¼TŸ |Ê8‹\=Åxêy7F‡à¨ÆnŒnEÀªu “?­(>Õª²¨öã_ôÔOíëŠÍ›Ãå]nQ]xcôñ>1‚|ÁÍ\%ŒªQeå“RÇ>á~Ú½cu.§‚ÃS­àa@ѧjTYDZ¡Ð‘VP<gçU~Sôþ±£!ƒ:’0eÕ±„©Ôõô~Ç€‰ÕlŒ>µ`Ò_#
+«ä=ZU‘Ö*tl-^ó7¸‚qÇ+3®LHÐÁÚ >¶ïWËÛE»äïáýj³x¼}X×·óÃo[áŽ8mÝÕۇ͒¾ÑŸq›6;N˳ 6j ´h=/ÐÂ9À8 Ã=NÔMpÂ*C­F•EMùçׇ@k_wDðpùî ´.´ÆúTÀY¼ 0÷‰Z¨Ê"Ê'¥Ž}ÂuWZ£­àáTD„b±l ª²ˆ´B¡›Â
+¼.k¯èÞ¯F-So=”0eÕ±„©Ôõô~Å€ÖU
+IÈPçXJhã) Õ¨²ˆ´V¡ckq%Ö4@Ë+¢ŒÃ@KÃlE¶W2¶޿߬¶ÛÛ‡u µÞ6«õêþ÷>®µ¸Ý4Š7«·«…:až€pÁñ+¾C ®g\0ÅйúÇrßr M ³E/Í·P•EMLùê‹¿õ®®p?¨4‡ËWß™o]–o·‰‘¦®â™ˆ“ÆS÷FkUYDÚ¤²Mo]ouœ Ït‚oo•fÞv \ UYD;¡RNàIÓ­4Aç÷£Â
+ŽÞ:«²ˆ°A¡â½®xáöº
+ãöºÌ‘ZÑpŠTˆ&Ø—‡WNI¤"©Kí—÷ºÒÞä9:½ÙU®*T¼…ܹ8Ê}j8jÂaZ¥á+­4älí’ÖÇÍâvMã(•`*Õ\öœG©i+ã(ÆQχ£¤µ#q”®ëdaŠgëÆÕ¨²¨öÞÍ!ŽÚW•QŸã9ã¨K㨱A„„7WÖ"Í¢06ÕŠ~wìIØL¡.D¡v½ßŸO¡zX+Eo<UYDx PQ6àyS¨4AÏ7#)”Û̲j87*U‡=ßp
+Ç{SßarC)AÜöÌw›E³tïîö—w$2ò3=Rx›eÏåQÌ£ž•GyáëɆõöÜ©bÝ„ÂýA¤¦ÖíÕ¢¬©øÓw‡‹ööTå]b=Î4Úã䙳¨‹°¨Ñþ0¢›BƒÀ¸/I£U)e×eÞêZ™ÔG¸s‘”Á˜†.Âhª>°Ueå‚BF¸Àñ$‚—êMÖñí¹D
+וú#ùQVIJÿL¤®‘H'x5ðP`ØQÔ­•³*‹(W²ñá„ê1“¾™„ëÜ¢²—II+œjüëûÅz½jo¸Xmv›«ÿ¶zw»¼#w—Šð-¸'¨™RxÜsÍ3ªË2ªú<h ÎÝñ¤ƒ¥ƒ0©ðΚõ g÷T–µ§Oânn0"Õ§¸G3ïi Îè[†I “¦‡IÜ‘y‡¦kA>ú¾Ê`æ%ƒJy¯£?+>á¾ÿr–]r”–é ©hìÐ/Û½æžT ‰U!ߪSù!俺™ýÙSÔ¤
+endstream
+endobj
+656 0 obj
+<<
+/Type /Page
+/Contents 657 0 R
+/Resources 655 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 644 0 R
+>>
+endobj
+658 0 obj
+<<
+/D [656 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+655 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+661 0 obj
+<<
+/Length 1427
+/Filter /FlateDecode
+>>
+stream
+xÚíZKoã6¾ëWð˜Äòýè­ ´A(PcÝí!ÈÁuœQ?6Žw‹ý÷R¢LÓ¢½²GS(ɇ5gæ“ ú„º*HÝ>Z‚(Ò K*‘6Ð24ž×7ÝÂWïÁÜôΑ3!áx†>ƒmš
+h ¶`j ‚$Ç‚¨ÚÄ»añÃ/–#‹­b
+ ï`ØX°cQeÐð]_|YOgÓõ·Ë›áûâça4.c
+›#†%Éb„¶±+%f`E3ü€
+ÚÝ`}ÔÛIâþ«Gy¾:)
+4‚­Q„¨ÃîO³û~ZŸÀêÀ³‡ðï’íp±¹’F¡o,íé]¶t+wl—»ø݃ñ³qÊ@FG}R¥a¿QRÕ¨
+¤´•‘!)/ÑŠô»µÂRŒï¿¡È7!I§¾(†LSÐÆ7[õ(Â0Œwͯ“Õz:Í.KEØÅãýrµ®×£¿'Ë»;ç¹î±S
+‘VV}F‹Û
+3ƒ£éâSNÌRZbJŸ@Ë"Ê{-«×²^VËâŒûÈÂôñZ–uuº²[åµ,‡
+ ÏÁmZVŒJCŠ›k3Õ×W ôZÖÕ²NåˆÓŸ”+â•å˜–ײ*€Ú9’¢zŽ¼2-˼Y-ëd( µt4˜Ó¼”å@5&C‚mÐ8ð?|çÁ}þ$B–zKBD“Ü^@PrœÜŸ!Ôþ )Eíz>ëwÿ^Ëú/hY'ÓÊ@\³>©‚…Ͻ ¨
+2Z—]§RÂ`Búß\õ:Õ‹êTà„uí¡Ž”©„Æ®øWB@©ÀkPÀT±â×ßwdªmØv°ð3m&Ú¿EïEªg©N&'[æªn1«\ªM£ªP”£HŠë9Ò‹TÏ!Rmhp´FɘK!• p¯2'RU¨
+k^ƒ¾Žf_&•Q€ûv}?©úQ*£ŽJûÚ¡îøÛtöÓtÕbJ
+u[ /çóÑâ{Ú¤Ž
+endstream
+endobj
+660 0 obj
+<<
+/Type /Page
+/Contents 661 0 R
+/Resources 659 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 644 0 R
+>>
+endobj
+662 0 obj
+<<
+/D [660 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+659 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+665 0 obj
+<<
+/Length 3440
+/Filter /FlateDecode
+>>
+stream
+xÚí]M“Û6½Ï¯àÑ>Á÷Ç1I9®MU*ëØI®E¶gk¤™hÆÉæßo7IHD@3¢´#Ñí²-æ $Á×Æc7À«¯^_ñäõ›wW_}xX°ÒVï>T:0Ëmå¼dJŠêÝÕû’I&˜|ùÛ»ï¿úNÓ…{¼ƒ¶jàç»»ù
+aë¼zwõç•€·¼•3ŒkS9k™ñÕlqõþ7^ý¿ú¾âL_ý]•Ö† oàýMõöêÍћ؄¶ÌñPjÐÐN´Mìv–PІÂ&“p°º~yiÌ‹éÍçyÝ[ e`
+ñG8¶Ôœy%áØÐ%R5Ç~}óÏݧžãz wUå¸
+úϘ丯þ;]ÜÝÌïwm$gü KÞ½éЄÃx3¬ ä ’nÊ|Ð`EÝ>T>ô‚i0.'4@㺠§×«ßoWËùË Ü©³ÛÅbºü£ùáîöþ!O¦§ŸÏxƒuËÆ©:8?tµ™ýYêuUC¯êÆ ´Ž'9s›Ã—×Wï+87ï½Z¿þ¿Â“¼ÂkwJ…úçü ¯R„*¾Þ`[p6?Oz0“­vº IÒÒ¤ÛTèSuõ¶ZwÆ›úrÎò,­®–v¶aøâðR&;ÞôtÀÓ1é=Æ${îß.“´ËÛÝ÷³EµMÇR-£'–Aï9¦ƒF6?ºéõ÷¥p®š8é˜
+­ÔvíÁűà\ã“[TÕ†ýõKÍ_|ûïhÀ#ÛÆBƒo6¬Ïw²>á}×¼SUþI÷¦ûýõ×ßìtè²þ?ç4:ÉAú
+=½:¢?wL› ÿÕOtF†‹
+‚CÏ–„~³_ a¿âp$²ßzƽÈ)? *‚rìOqc`ÿÿAöñ$û<‚áâPÝG1k úwèUÓ6[Težà² —7AFÑÇFô±$úÕmkáÆ\å %¢ö-)n,A ©>cR}†šŒ ÌcCFôÜ0Ђ"&k0Û°ØËñsÁÇœà‘?³F½‚D¾F‡VðY>\7
+ÏýçßÓÕuÔ~þž®>LW…Ô1ãaÌ æ’tH”íC’Ïh$Ÿƒo$ µGòiAÍ`ð6/ùlë .î90I>g-ùž±–|àô¼{$Ÿ”cŠûIò9‹Ùñ€TŸ(ùLw{$Ÿ”ex‚;
+ÃIòùB%ŸƒI½‘|JAËZÊÙ´¤¸±-$ùŒOò9Üd¢ä›¶,ù´˜¬ÁlÃF0Œ[ò¦øpAm9ÅÇ8Y­wŸÕ‡éìÑz‚ÆÂ)R|ŒñÅjÒ{Hï¹|½G‰¬(ár(ï2Ðc Nîóå]ˆŠ v$øù×¾Ú®.0 ðl)IzkÊKŠÏsò‹±ð–ÿ9ÓÍ}è/ïBTeùŸÇÀ*îzæÙ±
+Iÿ
+ÏxÔœáƒkclf¸N¸œšÓ "(c0 jCe[)‡s&;O‚z¥#˜ˆ‚f·‹ß§mÏ|ºš}jÞãJÍ@%¼ãXDeÚBÚÕü~VZý³÷âÒÆO¹=$ý\¼ôcê,ä~%X0×`öÆ3îBNù©AÓ o¿þiWûÙÂmÍ©R%I?çÂ}LÄñ¹/áf˜|ZÇ1£Ád¹ŸàÆÀ}Ržu¶<œßVƒ×˜Î@ÄÈU>©Q”gx<
+ÅIúÂ4 Á¬Æ,œº\¤²DÔÞ˜%Ž%h!h<2Ðp›ñpçŒE›Q,d—9oQ”·™8‚‘€ª¹²BÖ~_ÎéQAàa¢´ø¼¼žM®o—÷yG9¸³Î@àQOôÒwÆ°V´5W\«Gs³öòZ=ÔxþÈ­ÕÓi¬¿Œ—2 Iá9ö¯×êQ!°ì¸µ˜÷بOU[#Y¨GsÁdس6se žàƶPm]„Ï^/ÔSŒX"j_Ä’âƱœZÞñ$ï\ÞB=š.¸âB=“5˜mضڒv I;iGÉ,/çø(­À²Û¸x~3Ÿ=¬n—׳¸\ÏÝÝíê¡/¿g1ŸÞ^ÍK°õ(züÕ{”Æ‘ÙD
+Ðå+@ü÷ â._[ÇW—_»0-¤6ßWoè[¸gƒJGív‘ös6¼Ç„%ñ ¥2»au‹Š ÷SÜ.û-Uw‘üóT†»¡[² S3Üå—´¨Ê2<ÁÅ¿Óš=_œü3Ô˜£¥*Ç+´'`I`c‰X(µgLÚÏÀ0§^`‡;`6]×¼EEPÖbܪñ*è?Ê3×yn´«ÿÀ çqôl—xšßÏZ¹§_Ò‘V2mO‘Ó#=„«ŽRt.]Ñu
+Í-×ntx,ƒ É/׃¨j\~ßr=]Ô¶ÃoNõÉ{1RÍ©:yîÛpWkÀ‚E`xÊnGÝ¢"¨Ÿû)j—ûêâ¸O5[Ï:ýÝøvqøŠ=VÕü†°K˜ü’=ˆŠ  ¿TÖ·ÓfëT°uºpr¸|~1\‰¨r¸’¢Æ®¤3IgpŒƒ í8¼® ™É -(b2æ² :J€Cjιª9îvè(€}Ù<(Ô„¸OÛÇÛ¿æ«åb¾lWíùpsýñSIÝáPXy
+uG¦¬%y‡ä$ì3¨d«~Z%±vK2o ;°6˜Úœ_ÿøÒð¿ô¦íl ;’>Î/¸fK“Âsfy;õta@Í–ƒp‡3·Y”òv
+Oñ Hᑾ¾0 î
+)<ˆŠ ¢Õ$ØlÄs¡U\´@Ï–î£Åu‡q£¶ëåÃ|yýW»Íú¬¸ÇºÀ }Œ?è#àÜŒ$úèsù[pp·ƒª´xzpÂÆMVõiPT[ó¿zöàÚ†¥+õã¹R©I>çB~þÇóšüŠùìîÓ-*‚2äOac ?Uj=ó¾EC n]³Éœ€˜-»fmDEPŽà ì(§B­/n/®œÖ0ý Bì‰X"jOÄ’ÂƱP^Ϙ6ãŠs¨6Š•4¨¼¯1hÌé< *‚r“À²£)·g¹=`êLužõj<p¶*nßöŸéb1_d÷Ö¨SÈ:àùœ¡\’uF³³ú R­zgu¡0õåÕ#¨6àŸr;«wšêÛñ’²9IÕ9ÿÕ•j5“^@µgkõêç~Š÷©Të,6£Tª…›« …a—(n®1voƒ²ä¦:-ªÓ:¿^o®^ŒU"ª«¤¨±Ä*¤çŒosõAuZõæê0r#@DEPÆ`Ô †äœ‚œ¶`:Ïúä
+LÜ…mŸš£]Ý×Çsœ‚€RtHË!-g­å }:U–rZLYÉÙ44Ü×Óš;$äœZÈœ²ŽÓbÊ2Φ¡‹'>©8—=ë*Žƒ—ÜÖ)-¦…5œM3£™ï’„syN)D‰ bˆ’€Æ¢~CúÍ®~ã P ¶,ß´˜²z³ièÒ­å™Å›ÔÆ6ʉ Ìu7ÔárÄ°D
+endstream
+endobj
+664 0 obj
+<<
+/Type /Page
+/Contents 665 0 R
+/Resources 663 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 644 0 R
+>>
+endobj
+666 0 obj
+<<
+/D [664 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+113 0 obj
+<<
+/D [664 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+667 0 obj
+<<
+/D [664 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+663 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+670 0 obj
+<<
+/Length 3347
+/Filter /FlateDecode
+>>
+stream
+xÚí]MsǽóWìÑ>`2ßG;±•RâJd1•T©t@AÄ
+ Ò
+Ƥú÷;øµJU~¼Å¶ 7¿Ov`&ítA“¢¥I·©] ÏÕÕÛj}1ÞÔç,{ùïêj±çņê“øQ&[OÞî¸
+Ì®´~(×Dìú—YuUþûV ;Þ ^ö=3ý™žÒj¢ááí?,Ó¡}¡á²¼„éÐÀšëÍcÁô§”Û%z'Ù'g¤Îã顽ݤ:˜ÉŽæn™Íû²9 cs8@ÞöÀf#\˜²2vÐ(
+BxaÞöð_ÀØþô26o
+¯þg™ÀãþÂÃp@å yi>Vd&.å;\=#¾U~rýL9oȳ§–z^=Ùñ²ÉVÛ“müö¬V.4<Œáá&£»ñ’üþÔÄÄÂ% ¦iä™A‚öHØŠÃV‚¯­Žßÿžšˆ*îÁqlÝiÄøïb¨1bnóÆ…™ÝY<ΗwóéêËr¾¢­ࣨc81R ä<;1ìÄ\¦³È Dt6¹åÊuÚ&5|Ž !êd\GtT8q ¡ŽèŒÊ :¤úóO9x×Vàšü»öz¡³ûÜööëI휕í™ôCèo¤‡O†ì·Bz»›ý-(c(ò°1pÿðk"û5¿ƒÞvOz{¸+ [’kÍ·ƒß-*ƒH‚8’áöò²;z8á8Žg砒Ū(‚×ÏH–ŒzN²”¸mRG–,ìëœÂ×9œÌ±heksjjȨ "C¦À@éÞëqñzÜx=>5ù¤×ë±pá@"Ö”y˜®Vóŧù²1|n§‹yÍêÒÈÃWÜxèTRrÅ û<ïóè.Ž
+‘”é+Ô/V
+‹vwÎÍÝ.Q‹<† L¥ÉxiQDLAÄŒÛÜæíXSË´>oÇųg›½Çåý-íæ80¡jÇ%+´´ìæ°›sénŽ‚wטñ›×>nŽ«=Ó‰—P<iç4¨ ªøõ¶³‰ÚLøMW'ë¾òŠ*^QuZ»ë’N%bÂÛ¢2h7÷KÔ¸Ïk¬N:ùÎoëo¯€ß »H¿²EeÁïu~󪫯ÌÏLi ƒ‘Æ K¯\ɨ~¹R¢Æ"WØÑ£3<`"Lþ5~q˜ j Ȩ "¦@ `xeí踄|ýŽŽ±"Ù\­3_®î‹y»IÎr>»ÿu¾ü­ÇâÁµ‚É¡`ÇYl&±ÅÃÏ¥[<Ð §†ìD…Ó\DÒŠ®ØAT5¦þÏ»Jvº°Í1 éë¥~¯Ë5;çgò f?ÚÔËÎjáC ‹v•AûKØØÏe;'#ij…ß$ÓýÊvl¨ ŽZ¬§lQD¼€m¼‘øëÌÏe;\¶ÓÃée;çe½’%£ž‘,%Œä´æ¯¥Øç9Ï3Xæ`±7#ò5
+dTQSÀF sxYVÑc¼Ðͽ$ ʺÖèù|ÿxÿi9}ø|3£Ý“"¦cð`Ï]âvwFáî胸;6A[Ê÷»;Ô$þ¿RîN§­áRé ¾åå
+ž‘›;6F¸šºßÜÉ ‚ü%ì ª‡×d±¹ssÇ&Ð_&õ›;D¼€±¹ÃæÎ)Í^Å’QÏ(–6ÅÂE<lîl›;6ÂÄœ2*ƒ¨ˆ)`lîŒyYÞm«ú‹x,dÓšX´³XLoV«ébÖ³×¼§1ÃÜ1¸l½öv.qVJvˆú×ÎBvÇ(Ær6EVî4¨ jòþ¶µ³‰*‹7±«—(þÙÚ9ÓÅY †š!3_£„ aÒSu;-*ƒvs¿Dmsß\÷yqÖ‰W²äÜ®÷_œåMÍoP_ÆÑ‹³•A¿ ™Û/t³^œurÅÂÍJÒ?#W2ª_®”¨±È•cû:‘}hœ½}‹S]¼P†¬Ù©AC„Ë&ˆ8ºÕŽcO§ëéhîU½Ž Þ® «ùt9ûܬʚ.>äåY«Ù—‡Ç8ЀQÁá1!
+LIlñ°ÅsáIJth–1éL ¸-ufV j1uH¿ýnÇÒ¬ Øæàqääã'xeÖ!©ŒtbVÀ#C‘ûJhCn§Ü 2ˆb‰ýÙã9é„x8ý…ñ!!ÃAICy< *ƒH†¸ƒ0œ·àùÊ\ž¡ŠÅª$\ê,-æ½²‰Úb³bµÂu;'õw祰Áb°hh‹ÜN¹Ae/n
+‡WeÑ. VÄΙ„;] S€|$áêa>»™¶›ïÜ?Ì—ÓÇ›ûE},:ÞmèZr­!ôñ~9ë;0]§T;FuöXñAZlýŒÀúÁõ½Ÿ¨5DºÁÝDmþ *ƒšÑá?îrº¸rtÀÎ^âì€ë{ÎÔýÈ~ôk<ç¸Í–<PºEeÅþ7öóÚ­O”3Ãíþî­•ÜJŸ"íþ *ƒH†8’á|d:/Þ:^ÚFÓ&À4¢_´dÔs¢¥ÄE´° 4&hhÈDYçJ`VM•Adȸƒ„ »@gëü“çp— ¤ƒI¶¥a«/Ëùjus¿h Íã|1¿ûmà j¿LÞ´Ç«˜œ/V½¾…éH8FM~óâÑš!6†ÎÎr"*ý4q€óbcH …K܉„ò…P‹i†‹¾û˶/´Û.š®^â´!ÛB–m¡s²…s¼ÎÀ}#¼î)
+BT‘ì/c Çò\ôGÏ Ÿîöd¸·Ðδ•,m !*ƒh†@’áŽ}!®
+:ZÞ¶¶‹9û4K=§Y
+ÜX4‹?‚fáµ_§q…è㤀j?€–K=µAˆÊ :d
+àA†>lýLW€DØ_¤ñDÚ¼+þãtñßù’6vT‚<Ò|xhcGá‚bc‡K7v ž\¶W3–ôá`¦ÉÐûù *ƒê
+0Š‹|FPä£ÄBç› ]vÜraTkš?.§7‹^?Ç!½9‚Ÿ£<ärÏ…:ìçŒ`æï=ÈÏô
+:'Þy ÆA&áÞœ
+«-ÈíÌ[TS F qØС üÂÅÔoèH+œjO£ýrû¸œ6«°no>}~¤—Ý£PGIì"ê°±sñÆŽ©×|@:mæ^ûªž"ʬ^Óô™êj1uÿëﻎTï 6?v´9ÇÂ%^áÎÎÎa¨o‡POA
+Ç0¥áyúHuDeAþ6ö³µsÒyðp‚{/¼E׺ïHë²EeEðv‚³·ó•y;ƒ9§ '\SاW2¨_¯(Ö+ì윛³3<\"1Ç kèóÔ•ATÀ°D̉­2Î:¾Šq;C¶íø*:)÷S­s­R}»r‹pÛþÖíB*
+endstream
+endobj
+669 0 obj
+<<
+/Type /Page
+/Contents 670 0 R
+/Resources 668 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 672 0 R
+>>
+endobj
+671 0 obj
+<<
+/D [669 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+668 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+675 0 obj
+<<
+/Length 1151
+/Filter /FlateDecode
+>>
+stream
+xÚíZËnÛFÝó+fi/f:ïGw Ð P FÔvaxáÊJ#@’mEI‘¿ï’C )R²9­ŽG¤ÎœyðÜË;'áäoÂÉUÁëö©h9ÄƵ!ÎKf$Ï‹›[NîñÕ;™
+žüSçDkÄ7ø<#ï‹ë6…ŒÒ³ Ì6NŒbšÛšâí¨øáç H`ÁJKFˆLËÈÈ™°žŒîÉÍÅçÕt6]}½¼½+~eãJ˜RâóÎv¤¶a6Sr˜‡aVøÈüD€º"%´(É ØãíÎgÎDºØ\7D²à½WM{‹¯â$ ¡™pJ…òzŽk´R’ÚYäÂl ×´C[<9ˆv˜hNÕúHŠ÷¤ÙŒër9ÿËYþIŠÅ 7ÔéâRèÆÍYÏì?탒ÿäJàåõßüóxNÚrÜÆQ+šJ&Œ'Ž¢œŸÍ½&0šyŽu8«°$YÊ
+•@ƒ!ÓÁ@ÈÞð11|öbé†ëÚ³±¡J Íc×™g#ð®B8[Tdª~è£KaíÅÝ_³É%UÂ]ØѵqÿÃÃ2Š£ky&9ÎõÞy|œÔ¨Ö°Ør¡mB}¹›}ž|ªX§‹ª]}œTý„0YG‹³&Zwüu:{3íåGåŠÃQ ?Ìçw‹{Vj¹«(u(Çy›„·nýÏ[’·Ðˆ€‚~'—
+endstream
+endobj
+674 0 obj
+<<
+/Type /Page
+/Contents 675 0 R
+/Resources 673 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 672 0 R
+>>
+endobj
+676 0 obj
+<<
+/D [674 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+673 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+682 0 obj
+<<
+/Length 3247
+/Filter /FlateDecode
+>>
+stream
+xÚí]ÛrÛ8}×WðQªZ!¸_ö-™™dkj§j2qí>dò ±[µ’•ØN2ùûí&™„Ú2IǤ’¢› xÐh5@Zœ´x3¡ÑöÕÑäÅkG Gœæº8úXHG4Õ…±œΊ£“âý”N³G¿¾x͘ªÃ-qÖ€­¸Þ~[^ lw_Ž&Ÿ' viÁ
+£•ª0Ze‹ãÍäýZœÀW¿”g‹o%pSH©³
+ö×Å»ÉÛÁMp4!51ÔuÙ
+úmÎU­Ñmê‡ áFZYÌ-Ñ@vèlÃLùF¼ûp\Lâï÷,´\ N{õ4ɯû‘_P¨NèžýÂ;ÑÎþ€
+ ýcÜ>ÿõ0üwÉ6çЩ+74ÿÁ>áÚÄ0°k~ñÿÚ7×é_ëœ.VDpŒkÙìÍj˜y‹¹õ=sÜöä¸=ØÁß‘âZiKŠKb}(ÚBñ
+@IŠG¸¤‹ÀÃCÛæ‚`d8øvÃ1¢0æ@¯áÁçWíÆðfÔÖ}ôÇ‘úÑD-’c”(n[ꦸ%Ƹè F.‚PíôÜ,é³ã< h‚:¼T8¸;EÂöøÚRÇÙó–Óæ{¶çûøýã'Ûè^=øí²‰–=ñCK›©P”l3.ìôk2B@0n˯…< É|®Ý8–Cx#¶ÛHZŒЊB+Æ) ÞjÏÜ6Ã4غ~ŽûŠ/4¸¡D¬ølÏ×ß;dæ"†èÁzÇ—Ež,ò<z‘ç~<?/%ÛÒó+yW‘Âu
+•¦a‡J—Ry<*€¼ëßyš¨¦ã÷…½.kVyž¬ÊóhØ/†*È~iº*1®PÔÎþ5ûïAã±YãyÃá!®-Á!µV€7)Óƒ&Áï&hTç3ŽÀ£³Àóx}¶DfH~CÄPÝKŒÔãÉ;Œey'7™”¾Ñ"F„ZQâDJÞñ 
+“h0MÐXí¥¦í(;€¶c¬@Ûég%h;ÂöÓv´æ0ÚºMTðzÇëíåÒ‹;‹óÓŽ$e¡tc$ñh¨
+FcFVñj5=ë<JÀénø ²»Ê¬ñd'OÔ:è7^3P’šHÙÂSaJ¯ñs*ƒçÚPNàÉÓ´rzCHàQ’A磻x¨ü1ê1'ðäIZî·[Ñ/GI ‚– <“àw”¤·È3´ò ­ûHàé
+W¨3\‰@9{'‹;O±½„ìôܸRgúN
+?—!l9¨K¨:%(`JWñï}Q§jº{,©ö§ÜQ4–EGÄ}Ý3'
+˜ù#Ô>÷Mž£•çhÞàÞñ}æ@ à·Ÿ¦Ò/GPÀ¤øÝDêÛs2Ï“]W¹7¥Q˜@ㆈ% nˆXbØè¬Î*OÎæ¹ÿ0…†üCïÍ(O«<ˆ
+ T›‰`cE:9§CåŽX¥;Un± e •')ípí—Ë^Úá"V“•¬ìde瀙¹Òõ¦%‰„qèœãBî̤WßAT
+—“|3KDòuÑ*€ôaûôgÃÐ?ÏÏz>9½=<N©’)Õª©MÏÏBT
+:)fáPXJçhÆ´ž.þZ/gsÁÌÔüs†³´öŽÜ^à‹ÕK8…EX–çÛ²B5® uÎ Š­P_ë/ËKouuî·WgKƒÁÞõ‰F PCÕ‰¿­Ö/W­ö!|…!R;Þn6‹óR,&”ŸÖÎœ (zE¬«j*ðÆÉÅ{p”N_n>­WRÊ——M
+endstream
+endobj
+681 0 obj
+<<
+/Type /Page
+/Contents 682 0 R
+/Resources 680 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 672 0 R
+/Annots [ 677 0 R 678 0 R 679 0 R ]
+>>
+endobj
+677 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [452.755 141.07 467.42 155.017]
+/A << /S /GoTo /D (figure.caption.14) >>
+>>
+endobj
+678 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [507.402 141.07 515.731 155.017]
+/A << /S /GoTo /D (table.caption.15) >>
+>>
+endobj
+679 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [192.5 119.356 237.97 130.36]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+683 0 obj
+<<
+/D [681 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+117 0 obj
+<<
+/D [681 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+684 0 obj
+<<
+/D [681 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+121 0 obj
+<<
+/D [681 0 R /XYZ 49.606 172.409 null]
+>>
+endobj
+125 0 obj
+<<
+/D [681 0 R /XYZ 49.606 154.021 null]
+>>
+endobj
+680 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+689 0 obj
+<<
+/Length 1562
+/Filter /FlateDecode
+>>
+stream
+xÚÅXÉrã6½ë+p 5ÂØAäæe<É,®¸¬TŽ²ÙÌP”‡¢fÆŸHZ¤HÑ%ÑU©ÒÂ¥ù^7øÝ
+µ68â>¸³Éèä2¢Hbã^ùd8“˜€+£Éݧã»ÉÇÑûÉÖ›ª†t]'*| ·ÎöDZŠ"=0"ɱ`Ñ+•F>¢³}m‘º"Ú:Û‘ÂŒ°15$z@¥‘è|_@[¤®€^|í‰Ç雘MíˆÃT©W"*|Dû"Ú"uD´õµ/"!±Ž¾#¥Dšþˆ*#Ñû=Õ:"ÚúZŸRÿ»[dªʄµ2Sx'ÁF1ïÕ s°RNí•‚.ÇšñÃ&3Ø1Ä©JƒÃÏc«Ù4WiqkµpÑœ\R*ëÈJƒfàŒÇü'§qV6<àS .Írëàæò?„0›Ì‹“éò)‰ý•lýø‘=…ÆõÛË@@ñRD!EÖÆËáöÎUJ‚>"_i¡Ð:Ë%X*L”s%A7£ë·Çˆ
+ŸÜùUá“aî‘ôpÇ$Ìdt×±ÉÕ~)JÙV! P:LÈà ¼ŽŒTC…L9 ‰æPVÙNÙò‘ŒJ®SΦIRy?¤=2>În×€r¾È¦KÛPnÑ”ÿ_âõú¥K8÷þº£ð·OÞ;Ü–ë
+jhdvV mÅÉØ©Ø:åÓj]£Sí4ËÕw»´iÞ#áã<ê–pcV›l VŒ·sûP4¼v}wródí¼¼ñ5]åë»âÄI[1œÙi§Îg¿î/´äA›@ñ:Ÿ¦3 ‰nÓé&!uÝ©–qb²»õ»ó`9/ß.¬ÍO ÙàÞÂçPb¿Ûä®/‹Þ`Ì„q[-;oñüäæׇ³“‹ýã`úvö
+òÎÊà¯Ò%¢à¼¨qóø>Nâü¹´]tÑüáFÔ¥Z1ª=vø°¶RlD™B3Ü_»^M±Ã!v7±ÚzQÈ
+PVåȾûñhËymúô”ÀtyŸØæ梈¸@!ª]oXx*8ëâiSîîÕ÷Tz7÷$8oþÍ=úšñHÓ²-a¬ñ¨ë?‰$æ¾
+endstream
+endobj
+688 0 obj
+<<
+/Type /Page
+/Contents 689 0 R
+/Resources 687 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 672 0 R
+>>
+endobj
+690 0 obj
+<<
+/D [688 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+685 0 obj
+<<
+/D [688 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+686 0 obj
+<<
+/D [688 0 R /XYZ 49.606 630.927 null]
+>>
+endobj
+691 0 obj
+<<
+/D [688 0 R /XYZ 49.606 612.994 null]
+>>
+endobj
+687 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F84 441 0 R /F115 467 0 R /F90 447 0 R /F93 449 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+695 0 obj
+<<
+/Length 3000
+/Filter /FlateDecode
+>>
+stream
+xÚí]ÛŽÛ8}÷WèÑ ÄÞ/û–3Á.`2éÝ}Hòà¸Õia}éØß*R”eY’ãØZ¸3 ‚X–Š·:¬â1éÐìKF³7#Úx}u;úéG3ƈSŠg·÷™tDSˉà,»½Ë>ŒáòæÓí?ªÇ²F)¿-6›bžßL„´ã׫Åbº¼ o>REñ‘Ÿ~aLÕÍ3M‰P
+ÌxËo‹y4âÑûu1pi"L²
+=~\çwùGJù2ÇŠ
+3þȹ( —2ÀÊ
+ÂÇ~àÎÓ&¿#7©Øøíê®@ùz0Óu@Û‡|®¦ww±€íªú0\Ìóûmù g¸µ.¾<”÷Šªá¾ïE4÷yõ»÷8hjh–.›å-03þœÏWÜh9&-c« ¸€ŒÝôÛTãü>_‡'¡~-+98g|âõÃôqñüEx}ŸÏJ߃7²¥TžÇEE0€ÀI L¶FbâÅožhâ寿ê òðudN¿ˆN‰OkèÍòM±ÄûÌ‚`}ÈÞ“ž¡uòA4¸ì„+b¯¦ ÂÚ'ŒÚP·t†%ÂÚ&œ Cçl·‡Û½Þyz|Ì×meððp¼[lq­Šàßbê?ùŸ›PEï¡PåÈŒò®÷W¸½Øu‹Vª*JÔnêðîÝFU¥»SXñÍ q%}§{ö…¶…IQâ¤ÝŸÖØ`~\2Á·.W›bçÛ~$ëï:äÆñq¯ÃÑÒÓDÍÓk›§¥%Îêf'Vv¾}±’4zÉØLKhtül1úð‰fwðLšýá‘‹LBxt {tž½½»¼ kL¦9#TôÚ
+£‰n¿ÜŸÿ;]<BÀ=,Z9ÐþéEŽ:§Ä
+yžçœi=GiC8·ýMQ‚HÈðê½(j½h¡JfÊZ"m9£OCŠÓî2§J;ÒÑʲRt¦LL‚¡å¯ Þd:òÆXÇÛ­)1
+â˛ч 2k­¨^?ÁGXÕ¾0I˜AÇYd#ˆS„rèãø:Ç{€èy 4©¡ð³n´š–ZJ{ÈFﳪKޕ͹ÂZþ;-Oëì $ Úq³ß–xs¯Z-]ð…´•ñ Eþ…B8#cæ¦X¾÷,¼—Œ‡a ’àJi~¾»5©ßDI3Ì$>»w"¨bhCcÖ?Ú
+j3×Rìaå`Ð^ŦùÖº…uEšÁLèûÑ;\íz¶Èö)øn÷ø¤öü»óXwã4Dn˜>©”Ê—ÐhpRå±çÁˆŸ¹,Lã°F4!îPÄø™ëeœ·ª¹eê?,kZU´îKÿo×ÔUhDr˜ œaÕ¡¹b.åIsbta0ÆJÖ À¡1,j÷«è½i&Þ†ÞHX€Ëi ô"xSa†¨Þ̲Qóó -%Í¢[&ê B=uõe„S&Êj¢ kç^DEP;ùš¨ö©3Ù‡² ‡Ã G^–}X9®íIäÛ¹qÝkä«x°Ç½êúX Ê£‹B–È8$ö{¿†™´˜›'‚]qlÊBâÁ͆‹v‚•¨ê X5`xÄ@Ï_`šX‰sFŸÝ4ü1ÞÃÕi«ÓdränâÔóZÒ mÕ‘„1¢ú3Æ&j€ 5Tʨ:L$¬ÏʼnA‹u†«æ‚&A»›ÕæÚ1¾Îv–zžž´<69°=9Ä^¤,óª kŒÿ^‚ ôŽã„-QÔAØêò„Ö`̉<EøúZŸ¡4‘†{Ú¸ï“ý.h…ð7¯VР ëHX$8˜Ãl5|­Ò¢€Õ¡1ñ‹‹mq3Ñ”?Oçób³-f=R#~¦¼¤Ô¨1 gJb^m’Ô˜¤Æ$5‰Ì™‘ÈôE"ü&S†Hd¾Wj„5>z©–PÖ%5P‰ qèÕ¡Ö¸‡jÄ¡PÕóGý¡‡ÐÃb,i‰{ߎï•ùdÛ'81Zw¯DEPû°è9“Cˆ° ¤2‰‰a—f˜P†Hp*`˜"4l7h*‚:Ö„ à’ژċċóI%aœý)cõ§Œ Ô3J5d|¨À%±1‰ƒóUœ)6*HÜ òâŠ5]bc@EPc°ÊŠ¤6vªò,µr·m§Ú(-.EK­ø4FÈä‰fn€íŒÒjËѤ1&1iŒi;£Ãy ²%ª{·3FŒŸ¿^ulg¬JÛ“Ę¾h>¾Q‹©BÿvÆj'_õ<·3š¤0&‚ °QZ`?²1‚:Ö@ ¼Q#0š$0¦ u™íŒ½ cDõgŒMTÚΘÆDØ.š3·3Jã`Ed;cu¶v;£qIa¬)ŒÒrTìW¹!T—gìgë§bÓsÀ^RE,“CÈ‹‚ÓÆ$/&yñÇX‚Iq¦¼(€ûFöË‹%&ü0Q—¼¸3Ôºþ
+Mòb’”Äï{©·“¹"LQ¦z PWÖwõÒQ餃<¯À¶Ó!åµ´¼][,Aüj ŒmióbâÔÕF¬¶Ø—-VªaoºØD ´’¶˜´Å¿8a+mHÀ;¢-– Â6P—'l:*Ý)-Â\Æì•…îÓåaó8õ(‹BqB©»ðáhJ-ÔÂÃÒÆŤ,&eñyïœÇuùyÊ"'“ü­]¥]÷éhDEŸ½ÞÿÚv<º;Ø9T„s²ECì0Ú"Eå$i‹‰|'‘OžG>çü}@>æÿË‹ÎÓшŠ .ò5`-ä“ת/BÞ$MÒÃ.Í0<Ь…oø½—è>¨ê`X6
+²AïpÖ-7"*‚ºØ×€ À¾åFÁ]:*vi†¡Bˆ907Öv«
+endstream
+endobj
+694 0 obj
+<<
+/Type /Page
+/Contents 695 0 R
+/Resources 693 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 672 0 R
+/Annots [ 692 0 R ]
+>>
+endobj
+692 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [266.443 735.779 311.912 747.39]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+696 0 obj
+<<
+/D [694 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+129 0 obj
+<<
+/D [694 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+133 0 obj
+<<
+/D [694 0 R /XYZ 49.606 722.837 null]
+>>
+endobj
+137 0 obj
+<<
+/D [694 0 R /XYZ 49.606 666.602 null]
+>>
+endobj
+697 0 obj
+<<
+/D [694 0 R /XYZ 49.606 641.103 null]
+>>
+endobj
+693 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F125 600 0 R /F93 449 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+700 0 obj
+<<
+/Length 2332
+/Filter /FlateDecode
+>>
+stream
+xÚí]]sÛ6}ׯÀ£ü@ßû–Î4™élg6·ûà̓*+±f$'±“mûï{/HH$HP±)u,Ǥ©Ã ¸÷â$ùHy3cÉöÇËÙ¯=#žz# ¹ü@”§†b RpryM®æ°K9ï/þá5çº wÔ; ¶ðnýñæ+Âvüt9û2ã°Ë'VP/±ÆPíÈr;»zÏÈ5|ô3aTzGþÀ-QP ÅìoÈ»ÙÛ#›€‹‘°Q†ZæÇl
+åàŒŒjƽ&wëÖsð7’0tÐÑ*Íoö‡ªö1Iµ’R’*žÛ9È9•Òi½ë Ã
+CË«8°ìÈŸ ÀÔÛVQuewu};p=ŒÒö ki•Ñ:½í·áwnìj4*¶ ÄyÄQQƒ_H], f=dLŒ.̨³NI°…Î|Õ"&×ÔJ!t‹!Ûöaé­r
+]Î
+ªúý|ýÒjP˜üx£ƒ3n$/õÑŠ5ع†
+§pA{ÎQçì_SYÛÈê‰Æ€QÝH²›Å·ÛåÍêzDT”ÌŸ@R4FSW·ER,’b‘O|ç“%EiÀ‰ ìgó’"¢"(Œ.ÿ’Û¨^ðÁÊI±HŠ…zQSô Š7ÚQ¥d^SDT S/EõþQÑQñ%ÑËdˆlzpžWAz%¨³l(+ÚÓÈŠ¦ÈŠÏ›PJjÂdŠ h<QL@%OÐeÑ W'iŠ¿R3ÚSeT^SDTeØš ÎŽ®mMÑ=7IQO’MrÆEfÀ½}íÛõýýz3²¬U;˜äúS¬R4À8ïË*Å")Iñ¤±‡O\Î!Œ€xã“až:—]¥X£"( /¿ô%Å.ª{ø™¬ç(’b‘OO=”…âH=ü6+)"*‚†©—¢ÎzER,
+Èqée-EU˜{fr’bŠ  ½ÔÙF¶")BMY©¨´=*FÔxª˜¢JªXTÅ¢*—®ÞP¦4ÒŠ«sªaUQ”¡k‚:;ºUÑ=SUqÚBEÃ0·Ñ£²¢Ö0³Wæ|ÿy±%8¹?î:EE½4P “UDÅ"*Qñt¡‡øyê¥IÑ¡‘ŒN¦Lóœ¦X£"(Œ-ïþÓ»°$ô`eÃZ»uTáÇN =vR¦è<…ªèÂÃ(Šªø̸Ç'‘OrB5º—eV~DTeÈ—ÂI¾ç(+ê¹,·?¿´Ø&-š±MRfUNU¬Q”£W ×Óf†6qª ËýÏ/!^)) zö@²Q’ÅV’Å®‘
+—©•; ù‹O0§ñÕ+¨Rà+§NäV7¨Êñ5[
+£²Òsd…ÑiI€bT:_Æ¢0…ñ”AH9;YbÄï_5ÃDz™¼Â ˆ©cЯCc Õ AXÕ'2úúk¾Sè‹Byñ¹ÏL–5>CGyKyyQ”¡^
+àžy±ò¢“eÑâ‹‹k¨ª0Ëò47·j0 $G­è|ƒZY°XbÕi‘ùIb:$&¨s T§IQW„©}Y¯øâuÅÉlõ¨½ +y^T’A9¾&°³#l¹ :/,2ÈJW•¦\ê¨,ÜÎâÑŠJãꥲd±ŠEP<éjyƒKž& Š0शR
+ÊÆóVDTÕÑgèÑŠmToµ<Vö‰¯ë(÷AIñ¢Þ»lqˆR’roó÷A#*‚†©—¢Îzå>袂—^ÖÁÀ"L{ÌÈ [Az%¨³lEV,„z¼¬¨p¸:*FÔxª˜¢JªXîƒ.ºâqéêñ‘x¸£À™øÈ[Aº&¨³£ës¸:*öÊ R†JÓUûÝß
+",ƒ©Ó”Ç%ä—ܘùâ÷ÍꢒÜÎ9ÿìxÙûàç»úuêµ1,_Õ½·©'%C£se"êÿøªñûÚêú¶Þ~½Y ½¬ÝÀ”3ôv}WþzóËþ‰ŽI_v-#tùi»]Ü^ÓΫÝã6y?x%¡}YXt®¡Åþò¢s:¹‚ñˆ±ù«íçÍúŒ‰ÕÝ}€º„çZ&(¿¨Oƒ•r¾úó+\±ró×ëÕæº{~Ú_ÜS¡y¼$8ß²ùê‚»y°­*Vº=”´!ìJûým¨"tqw!ļéþõõêöëz¹Ø4ýõi¨(HŽ™iõj}7äàùnç4Ý>‚DáÁ:ì~Ú|Ã!TCÒ߬d ï
+endstream
+endobj
+699 0 obj
+<<
+/Type /Page
+/Contents 700 0 R
+/Resources 698 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 672 0 R
+>>
+endobj
+701 0 obj
+<<
+/D [699 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+141 0 obj
+<<
+/D [699 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+702 0 obj
+<<
+/D [699 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+145 0 obj
+<<
+/D [699 0 R /XYZ 49.606 387.628 null]
+>>
+endobj
+149 0 obj
+<<
+/D [699 0 R /XYZ 49.606 369.24 null]
+>>
+endobj
+698 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+706 0 obj
+<<
+/Length 3371
+/Filter /FlateDecode
+>>
+stream
+xÚí]ÝsÛ6÷_ÁG{¦@‰oà±í¥™ë\gšÚs}Hó ÈvÍIv%9¹Üýó· Š?d[TdEÛq#\.ö‡Å\¤É_Iš¼=K£ß¯Î¾ÿÙ¥ cÔ)Å“«ÛD:ªSË©à,¹ºNÞŸs*/>\ýR=–¼',MÓóM×DH{þÓý|^%þLUêé¿ÿ™1Uçͤ¦Ê
+à‘³ý5›årÒf)TJ…q²‚ÊÊÄQ§¹öD„9ípa©°¶ ¾ºËVDrq> …*Ÿn–åÕ—ùÇûY™¸½_³Šöq‘­WßÁµtçÙâ:û”]?NfyŽJÏ+2xÙó¿&‹ì¿“uv¿XÑ b;ÿýBªó›Û›’ïú¾çµÂKÉ©R2Tñ§»ÉÃ:<!¾óO$$ÐB2ååÍÔ¿ DÍÌ9ï‹oA^1ÎeÓ|“¥o?ñ{ÞˆžÃ¿ý¦‰o±Ÿ‚”ëÍì)råËõÝM™È·EýçyÝiãɼ9k U‰pE­U§¢¬³[ýs
+²,ºRÕ§~½¿ÎþLSîÛ°ñLZ¶¾©q¥lÓýjr±ÔY)—ù¤’LÁéÍÕÙßg¬”R4u‰v^î&™ÎÏÞH“k¸õK=ÓÙäsN8¦žRÁõ,¹<{7: n‡á4µzˆPƒˆ +Y½ÞTž1MÑÀËR­K½þ÷…Rç“ÙãM.ˆ†
+[N9n|UH+sÖ!€ç¿‚t¾ƒô¾¤ýWïOÕÕ|kn³9†s¿ë¤Ÿ‘wÞÕæ 숲e»_6ëFº+°5»Ñ93ãj Ôª»Æ$ªÙR±Ž¦+AÅÆ
+çʸ—!×0œ9hê†s0k”«Æ¸ŠhH‰[…ÚV&Ò[(ÒY*‹l)ªb¥Š‚Jiö¡ŠtÜ={èÕðŸñ•+¯"U|%Æíh~£ùæ÷V ÐÔ*ùìá˜õ ıŸ æ^à‚ŠÔÁôšôç„ß© ÂÝÊcЦo_Lë~ˆ]”0.`í©>Ëá4EQ7uNYcM¯H‡ûKÔ[Äz…¶K¼.‡!´A£ÑÈDÞ%DœÔ;ŠhªŒxÁ(²aA¤´Tð‚‰öÓ÷/=ŒÈ…ùÕB bËš’4Ÿºx•‚qÍ µÅÞå e 5¦\>œ\ϳE¶Z/'ëìÓÀ²˜RŠ:¥Ÿ^¶§.g(+(ç—3p9ãÐËA›£Bz¥¦Š?é*œ00Pie5•:‚í[_%.h
+’\øǯA+=iP¸î•­Êù´Âì8P˜g v·ÂŽ3Ýà†rÃÆîÓsöªŒ'f‡u£¤Ù¢ *Ô—xÆG×#sŒwõo¾SÿÞβÃý;Ð ÷ï&UGÿæØ¿·¹›óþ=b÷>Ugóˆ€äŠr¦$Ð +H“
+€G#*zb÷剨’ŽÓÔ°aM,i¶hbƒ
+‡ª—ø³ž©‰]~(`!ͮά]™¾,K¥fÏpεY5×P¿3 F
+!)(,uÕo,\û13¾Ob¤þ¤¢¢¬(:IIí--‚è%wE‹—uºmÖ\€%ÞÕÍæ›,òfùú“®žW'¼k½!Â}C%š2k_èJ
+&ˆ^¶`Í1n+¨”õï€U ÊAï-gJDÕÃó’’ª¨}ýçõïI9¦Í¯d‚à@L÷Jïà>E@=@iJ¥c[
+N…u[,Å@5l)ÆT8õÆ©÷ž¦ÞÅêÜK,F\¡{ê
+bø±·Ò9Ê¥6nÑ q½Ì¸=åMpÄÀo"ºÖ‘£ÊšÝÖ‘¹äƒëÈRK
+:/$¯V“ÇÙºH|ÎÖw]ËÇ÷KoZͲۨP&MÊì#*”„Y“3
+·xüªf ¤»zœZ!­lÔ.oE¾ ‚÷ŽwôI Œ¬4âjá+YíÙ¼pÕiñBÍÁEûŽQÔƒþ’rÅü%îÂuÕè"BüÇð>_m%
+¿F/¹âb|h1C|@GßS}5'X¯£O8C…`‘£ïúæöf1ˆ"Œ_¢•ûðÜ¥œ‹Ž;tÜ¡ã.28{–‚eÌ¥*Ê©®¦¯nüÀèè§ÛO×] ©‘Iª :å¾¢S.d=;MS&¡OV­Œ®Y vVô½’ï M!ŒF®¶Swµáø‰…¿n@áwªß£&Ì&täQ[/'··aWÜêfù)›vCYùטF_XH°ä™Bÿú×Ue³íÝÈho¼‘ÑÆø(£"©o‰ol柗­Z[P^4F‘Ÿ[˜ ïÊò*b@û˜ÿÜ„ñRŒªöQ‚*¾è>‰ø%ù@[æq*੤âR¶Vn§¿y3z¶ƒý]«¢·8¶í?ÌßÉÅð@õEõ=œrlõ=Ê(ͨ‚¨‚‡ó®b$éQ" £;f0zz÷û-=¢¢ÅáÂ#EäK{„Ü;q)ÜÁœòÔíâ®yS{ýÁÜJ(t8_n>\dëì~Ñïûåšîál9n]~Òú~Ñ÷{(߯õH¡’pQ|‡eì×iC^)ñ4T9ç7Ï÷f„°0-¦OÛQ§Ä¡‹ôé.RìåGuÞÛé:±£âÁm'ânîŽG°¡Sj\§ê¦vœ‡©Õ|!ýž®ÁÞçÁsóp—}Ìîvíñ”QÁöqŒÆÑuƒ®ü,¶6üqo‡J:CHJÀm¦ij¸­t9zTiâ Œ?˜SÚ”›V:ЇtÉì
+/ñfª¤-S%'N¹SNÇÉ’6$KF¤/½ˆi¾‹4 Bš¥$q%H\K‹Är"± I,iµ©7Ô#Öâ‡Èßô‡È%8qo“–š8¯¥˜—XÍZé
+ŸòÔŽº’pª3"ÑkHT
+’Ä• q-I,ˉĂ$±¤IܤÑVPø ø×ù­´b0ì%ú«qº…@…@…qEqµƒt;@
+”+-­ô®—8xªh¯q£µ0f©Iñ$<\.ù¦—K0ʆ¦>&ß;öWôãbŸÃàÃèÄ^‹MÐÄêqÜáec¥ªù
+6ð“%»  5Sî-Ãlá+à*÷Žo®ÎþÒ¡Mþ
+endstream
+endobj
+705 0 obj
+<<
+/Type /Page
+/Contents 706 0 R
+/Resources 704 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 709 0 R
+/Annots [ 703 0 R ]
+>>
+endobj
+703 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [110.458 749.592 155.927 760.596]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+707 0 obj
+<<
+/D [705 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+153 0 obj
+<<
+/D [705 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+157 0 obj
+<<
+/D [705 0 R /XYZ 49.606 736.651 null]
+>>
+endobj
+161 0 obj
+<<
+/D [705 0 R /XYZ 49.606 716.066 null]
+>>
+endobj
+708 0 obj
+<<
+/D [705 0 R /XYZ 49.606 692.156 null]
+>>
+endobj
+704 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F93 449 0 R /F81 439 0 R /F45 438 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+712 0 obj
+<<
+/Length 3035
+/Filter /FlateDecode
+>>
+stream
+xÚí][“Ú:~çWø1y°V÷Ë㙳»©:[55©Ú‡TÃ$ÔrIIvÿý¶lËز Ì`}jN€¦Ý–D-ù“Ô¢ÙçŒfïF´zý6bðJ3–)E¨ËŒåDñl²}øH³Gø毌álö«Ð[dÒzEïçÙÃè¾m[0Á˜p»lÐLSb¯LܽýíŸNdŽ8Íuöþ)ÓŒH­3#5‘Feï³oÆËÍìm®)³/ÿS¾ÛÊÆëÅêÇúíÇ÷þñ¾Q(N`âù¥¢QS…×Ú²pD+“ňãÊ[þ–Ö»¬PÆX÷âäÜMy£þåÝèCƉ³ÖŠúõ#|å‹:b’0#„+>/à3¼ræ²ð:÷¶ LA >ç ¼e§©”G–ò¦©”Ò—lôÕMr_Tç"Kùïl´|ac+¢µãÆW%ïç‰xþ-òä=òÞ›tÿ¾µ›~kd±WÚþ!vK[Mý%©¿§ïÿöiÛíŠUÕ« G!Dha<ÔX£ÕÿÍ÷“EÖ†á}óò¼¾¾Û†ñ­
+]ûò{Õ—w´eño_€Ù/A!¢²,>–èc—†NeFŸ´(Q”ùÈO¬±R€™5\ñaëÖ9ÄX®)kÿî{¤Í—,öÀŽ.½Kaã쥪P‘¼a Š¤]ÄD’ÎO K˜vÏÄ\\£¢|0QöS0²±RÉ2̇U÷V´`ù¸}ÿ¥Ç¯±"¶"ÊQËÎÙ¼¾«…Þy§ RšSx§
+ ÊÑàz‰0m-(W<XÁtMKÞkºü<[N§;˜/è÷¡¢‡—ðPÞK;A¬FÚ i¯³Ñ^åôûT0 ˆ&’2e½Õ "ßž»dyCøP6sÃZÑêmÃ` `)°ÒªTk¾æ ,h)5Xf‚Q×1Ø_ùV'Ø©›§¾]-K;²Ò7¢K»öã"t
+Ù©G\ÙI€ÅþŽèÈ~(OvD?Òå†p3\ü½%îŽ
+ÛœjøLöŸŒpRãmåXÑw)b™ŒÃð Ì %PöáÜÒˆTÎh/±FIQ]Ç5øäœkÔCçŠÏÐù-þ\8ÿ°aÕÁÓø¤ü!·Ï¬OEEºõˆ«ÑªE¢q:UHÕ S¨ü¿³³˜Àmà·„3®‹‡ùX4o¨å aJÝûi$L‡\F‹!CòÃ7¿PÃ
+€Í
+M(O­J\Ùˆ+Uöº©úß%=Oµz5{Ô꽞¸g¢Éã<ÑÞQswZ;ÕØQ[GMh鸡Ûíœnæt+c
+O¤×^†qã$ÆI¤woa Æ:Œuëpz§pdˆÑ£%>AãôÖÕ-Æ°ŒaÃ2N¯Þ`„ÆÔbïô*‡ÛUû&³Ÿ³j¦tüô4ž­¿ï˜…:R㆟åp‘ÀTŒ8z1É a~Kž€ ß綽¬ùsîTÇØžÞ•VP*0ùç-Þ‘Z{÷PYغ¬÷˜Ãï9m„àá|i÷Á£ÒÚH áñÜ©SC{¸ÐªðƒÝ´öxx¬†Ž„÷ÙsÉáÉÂçO؉‘ µ#±biÎÛÉz0
+Û÷ ÝæWñe ÓØ å20å‚~ô̵Ò3è»HåÜ.•ƒÞ#¤}NNû Ì"ú(¢-ÕÒKYI¨ ù;W‹OãêÀ‘ïÓõOO•~|ýºZoúÙ" eÕbx²È:¢„@®¹¢KÙoMÀ!,Ë7Ù wÔpÏÜúíÞÊ£±ÿð]¯Té”Ë7RÇî6ÔÚë7«²ÖE½Ç­ÉÈ(t»ÙèpÐiù`³•Ò>t´ÕÈ;»Ý¬ðv”‡ûãq•ÝãáAi‡Gj gèáÈN½îv³z0®`f7F‚ÒŒDjØ ‡uCÛÍè°ü‘¸Ìð=`¬”ö±­†ÖÕ0]1„·<Ó–¥)ÝB¶Fê \™û¡—aÕ6D® ¯Á;þN>¬
+endstream
+endobj
+711 0 obj
+<<
+/Type /Page
+/Contents 712 0 R
+/Resources 710 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 709 0 R
+>>
+endobj
+713 0 obj
+<<
+/D [711 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+710 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+716 0 obj
+<<
+/Length 3138
+/Filter /FlateDecode
+>>
+stream
+xÚí]MsÛ8½ëWð8s ß×l²©ËÔT\5‡T^Û‰U%ˉœ™ùûÛ Š„@Â)K¶z+;¢¡G úuƒ €ß
+Z|\ÐæóÇ‚Á'-X¡¡®0–Å‹›‡Åç/´¸…o~+(ÎÿT¸‡BZTp¼*>-þè×À-TÁ 1–ÕA %‰’M ï®ÿú…#Ns]\}-4#RëÂHG4eÅÕmñù—›Ç‡ÿ]ÿüµÔ”ÿòô×÷¿~¹úmñáªÓNFíßÝ—ðÙV, )ÊÆß&UUü£
+W‰°ÿ%Êä5ÊÁ‹ìþ«-I®\¡[]\¶ê”•À&fd{#;˜nã×þõê xª…ñ `Pmþß=¾y(úìø£{zÙž¿ÛµøRÖ~­öôÝ{¹®þ;Äû­K¼+Jð(ÜÌçP4ø* º—'¡DQæ}/±ÆJÕlàŒÏ[[+9#ܻ̭}=dK»Ä+ë1ð>…Jß¡ÁžÜ`%1œÏo°–0íö4X8¹5Ùú32ØÚ³Cä·ZR9ÆðGªûʼ뾿G£;£DJ3¿Ñ °e··—Ôð?ã»ÖEF·½]ו)ídÆKcO™À£¯|ËÁ]«äÞ¾’ yÉxàÜosAuÕ¯<X>o|Ð߶Cè]üîÁMw`>REêÄ‘Æ ìœ…ný,ø¡‰2bo~l+(¥´Dðº
+iæ«„qY”–NÝó{ÓÖ (D9Íè¨
+¶<é¡j_¾kÚ¶3ï±':ì2é±Qy»ÊȨaGú(7Ê”#G†ì@fo&eáz’… ͉r  Œ…G°„…k´pÔ|Ž¬ùÌ$×ðÀ”!P†# £
+LoY`š?`I'À˜ PŽŒ}¬ªYÚÍ!gMªe.=k« ëYÂA\–[=k¹¾»­Óq®7O#Ú3ÄQ1¿¶¥¥òµ-Ô¶N¬m•†§˜í·œÇ5ß– 覥ôš F]§¤òþ¤PPn1¡ž¶uíåÚ8u§¬þi¢Swë›°ÓÈ~Ľ VYߘԽH5îS¢Í‰{¹êÔQ e·Ùd7d-²åÀSÈÈ<dÊ”¯S¦Dî"wQ>Eù: ”u)ëZ¨%3…QS° >¨ëvÒA]WYF´rA×Ý|zæK¥41ŒïÑÀç
+»Ê¨Ea…Ý“ »g2¯ovò+`2gJ…ß4]ñ™
+3-P˜yF“Â;=£ãº$íôä­ª)‘ú&vsÉZ‘ Ur~F¼2]r–šËÔà˜ü2=Óä”k½u BÛÌévóÛæÅ)w8˜ÁÁÌóéâرı˼8`›‘õÖµ7ëS:Tâ‡$ծɵÔj—"B¨)IŒÕhXì“õó=±ë¯õÏ»M-w-ápµZ~»[ßÜh^”cŽË¨¸#Tb.#J^g3OWÂYøÎœ‹—Úhh
+WD>0±APúþßɈ¬Ÿú^7vÏÌ÷ ]ç„aÒà su;ô8xª.ü²6ÇŽ”#G…Ü843áLÝÙì[hC¬t¨Œ…Ç04ñCSàæÀÍ6Uw:I¤`pr.
+T†$1 Irc$ÔÓ^h®î lt–HÁsllP96F0d#®<7u¦n­ÉQ‘KxR¢¹6ˇåúzT®¿ïž~.¿]ÿ\>®½½ú›1┪á·Ë¿—OÍwi LJðgû(uÏ•À|³U(¡v.˜­‡fSžñaDF 4EçB I`5*€š€ò~Wëãú¥n-®þ€óf_H›NêGƒãôhPYzD8¤NP¨‚y£1U0¿ÎtÎÄ*gâ1n×Äq1.œ úÂ*Øô8 á'©žÝGIP9’Ä8Œ8åòrT°ØèdõˆŸacƒÊ²1Â!Q›*ƒu´¢a †|:äzÝ.7w7•èUé`_—ëÛåú[J»[pó¸^ÞÔЮ7_¯7#9aÂ1bs¹xû
+bÜÚªLkÄP;™ æ£ •ŒwÛ\ÝkF„°À¨)†4•wQá¾vNû4¼âªôÓü!&psèþ–ØJucÐ(á†vˆ¨QTÑÿÃî}ÔÎ’«¾±m[sA…èþ´¾IF´ ã}kP½¾ý¹Ó·Õï[Y76Ù7ŒÐñ²VÇPü0—1£ôuúç•žãaƒÊø˜5ÝÇÈI}Ô*U¦o5îcbTÂÇHô1¨Í>C›}ŽÂï1"9Ë‘©A;ŠuêÁ<ÿβŽ¢AeE„ÂÁÈ9)ÜB_’Àý:=䊛ó45îibÔ©=^)Ìyš€÷41
+=ÍÙ<ö@u\à[‚#¼%x¥.͉*½&Cû•qiêÔOYŠ‚‹u&Ó·€wi1
+Ÿ²pÉùÞ¶l_D ¾mÊclîmËÀ+¸õN™ùsŠ«t™úÇÄW(ø
+å ¾BÁ¥Q0¿÷•(ñhª¨ç¢¹p%EÌ{=kY sPQ]Bf Fq€FÑyÒÖ(
+)Æ|Ã%퉵ϊ€];¯ëvŸ´Ž£H•uw-êŠó¨Šl0Ø\\ÿR9¡zÁ¦-ìG•\q·4YˆÁß ¼±Í˜0``À¸¬€A ³Â€c ݲ=ª"C¦¸[š,Ä€oöð͆ 9(ˆ¡ †!ßÍ¿áwóÛ0¶]^l ZCW¡hË®,Q抓F·cf×¼íìšmÎÊ`v ‡Ë…ܚDZÄè”_Ä|öÄð Dàþ˜Ws6ûø4F9mùh¿ü˜ðŸŠVóëW2PÀT|ÿûÇÔRfX4ÿµn+nHƒ[h¾ÔþsÐÃÁà“É?T– ‚o/§î 0ƒ‘ ?ÂòjÀ¨‘TÎÈc9¾q9ý•ÝMÝDÀ/ –+TŽ&1.A‹4A•øî"0CØ’ŽªuŽ *ËLJa ÷˜¬km%£AY‹Á3Ó¬¶6ËÕjtÚ3œ0ÉæW·˜sÐf†òÊ[§[ʆ ÃÙ«p§¬ó¾¡ST&ÊàÆ}ÅÈp²ÉœKØ ‰¢ÈóK× ™¡Ìò*–¬ACE¡…d.£{j±¡ó?¬6Èm7·Ëõõúæ.µgáíòéûãÓõjD–`ðkP~YBJ"kÍ e ”%Î"ëšàêÝ&êD7Ô>ûXRâ(Ù@PT/;ÿûûä‚ÜÎÂó¾¹mkqYvEŽœwÓ!È„¼ëßíT6=œuc«˜FCbhŠ=Ô 5pwhcî÷0o91ã†?ó`̼fܼû¨„yK4o^8×fºÿ¯¶ós¿F0ãé£Ðÿ£øtIY6ÓC•Ï‹ÑU›G˜Ø`2Lì¡0T¡è5‡èµÕ‡E/+ µ2­{m®×ßFn`|åW˜]زŽ(!P×B]딺V –Ë(õs Õ¢=LiµE)eJÉBA >s?;œæ# íümˆÎ~bµöÒ‡òÓ½£‚Ôi÷Ƙk}âf­p21êVÇЭ
+endstream
+endobj
+715 0 obj
+<<
+/Type /Page
+/Contents 716 0 R
+/Resources 714 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 709 0 R
+>>
+endobj
+717 0 obj
+<<
+/D [715 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+714 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+720 0 obj
+<<
+/Length 2767
+/Filter /FlateDecode
+>>
+stream
+xÚíMÛ¶†÷þZ¶ ñŠ_"¹-Ün.‚è"èÂõx2<žÄ™¤èýõ÷Peê;Ž5cÏø-ÚʦŽ)ù¼‡Ô3•%Ÿ’,y»Èªí—§m–ðDk–¹ÄXÁ´HV÷‹fÉ íù=ɘt6ù»°»O”õ†š>o“÷‹wMÂ’ a˜±|ÌG–hÅ´ª<üöañ¯;™8ær‘'n“œ3•ç‰QŽåO>Ü$Yo׫ÇýÃn³ú5Í3ñËßËýír¿þõÏ¿/Þ|ˆš!2ǤÑÇ·#k]›°­KjŽ6‰ñ—JŽ¿$dõ6)L…oMÎ}qï¿£v‘S¿y»ø˜欵²ÞþI»|K\1n¤tÅ÷{úN[Á]¶[ï‹ÚÌè{Úc“6üÄFiËS»ê3ºKï“ú’¼+Nç"[ùG²ØýäÅÖ,Ï0þTÒNá¶ç_EÚ[G:XI÷ß8žBd¦–®€NRIÚ5>.9U›UÿÅŸW÷I3fkBr–K‘¤Fsò¢¼—B˜¤ ƒ0ƒU0*”ùæ ƒRšfäëÝ¡®²±u[§N.£úsyÜi½‹Oë㧫*líÏ×UÞýávÅÿ‡’Ì!ɌҨÿE +/Ð<Ù+§¤•©$;*meLgÜ'{fU’Üì鈇ÀNgÂçèC0ßO–Æ*+kÈý®Ç–œþö<êp9ý°ù”:*«)u´Ì ŽcÔ¡˜b~uXÆsw¤:èàZ嶥Ž²Ï¢
+QGZ|Þ?<®W›‡Ý?ᆹLÎÏO|S©??9?iåeÁ¬TVQ¾SÜ”7å§CbBó¢·©‹ÂQQQð™óøȨ¬:¢¯¨Ñ­Œ”E‡¦}Õ¦=ÍK{Î"íœjÚ½w×W™Óú*øsfø B‚ W'“+È2v»
+¤eÍe%¸ììA.iäe´™ò`5äm;9¨åÙ¨åœ2)n^l>!“`5%“¶d¦÷ú™Þ¬zt‚É©{—ÊhRM3ˆ¸kÜA£aÜåµãª·Ozø¾Þ/Ÿ.y×ÃþÓr·ùßr|B©°vÖ,X3/®ýA@^@^‚¼ µ€ŸvC/9ex?ˆó/7ÊÝÀ }eŒÊn£{?ß2kvecÑk€w=ïšAŽÆ?|J¥Ñ”6šVf žHº|Мȹ(7؉讌&¢»eÕn7×ó®Ó³¿–ÙI« …´ÍÐ
+£ŽÖxH"'zÜÉਓ½”8J3)õ)³­"º3ˆ£¸óÏãV³­6»›Í÷ÍÍ·åvFq#W|þÉUÜ9j6‹‹:‹*™/_]<Î…¦„ÑSDw|Ü(’Õå×S-«ÒÑ[{tõ*îæþ´í mWR=ª_” &騤öBšõЗI¶øX¼‚»±³ulû»Î‰¾¯Bªôp_…EóòGUT¦ñw¬$‹©\3ã0HRÄâu³’9È rÂ"r‚!H‹¹]#á„ò¡|,ªö”Óð"”8 >¥fÖ™
+®ucÊÚ£ÀÛ¦)òÁÓM4Ô³L4ÔçŸh1¬AÞf ³RÔ¸ía_.âV.ëöy½/¾Ž<«s–ñ'˜whe‘çÁßÀß.dQ7M‰øÄ5ÝE/ûc†­èVÚ”&…,ÿÓ³ž[lÔ\$¡h%ÖHÀ ÀgZÌítUø¿
+ù©¢²WEêÀd¼ÓÖq;9²en˜O÷•Éh\7lÖ˜wîÜN†’ÔÙ87ªŒ`3*¦´ùiW³rÛé"tÔ=k9.ÂÊf\„ #ˆð…LkK÷À襌Õ‰s
+aáÇW†W勇‰àBãÿë_—
+endstream
+endobj
+719 0 obj
+<<
+/Type /Page
+/Contents 720 0 R
+/Resources 718 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 709 0 R
+>>
+endobj
+721 0 obj
+<<
+/D [719 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+718 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+724 0 obj
+<<
+/Length 4357
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ioå6¾ûW¼cr(Ž¸‹Ç  0¸99xÜîng¼$Ž;Aþý%‘¢HJj?=ûy© ‰­r±DkÓ'RlvwÍîû“føùÛ ÇŸÍŽï´fÛÙV0-vç×'?ýÜìÞã_~Ø5Lºv÷gÇw½S­gÔøûÕîôäÇ©Ñ¢a™mù’Œf§ÓjðÍ»“¿}çäÎ1g„Ù½û°3œ)cv%jëvïÞï~úêòæþâîüâ×û¯Á4â«‹«‹óû»Û›Ëó¯~‡òwÀ9sZ÷ÌžÝ}8»»ð:ùö]ÒGÑ8&­~x'›Lqág,Ž¾íúÜèNðo;äú~×±žt²5
+÷äê¿ Ã~¡Pÿãû“Ÿv‚¹¶meüù3þÉ÷ô„+Æ­”®»¾Ækü)¸Û…ŸW^ö)°á5Tx`"'e‚L¤¢jLŸv'§»¨’»á<Ë^þgwr³§²53Æ ë‡ñª¢€‡ßª÷€Ù›”ÿö–-Óâb"° Eµq&e‹žÓ«èÃ@Nšvó”pN 7¸€×µÂCˆõÀ±a3ü—þ~~½›zG!DËZty°š£å¥tñ}uŒ+0u>ÿmðöè’Šúq¼ÕÐÙØ×RÓÑ †Ãß66Å™±rml×dlÿ)Æ–qMÇ}g«c›aƒ½0òaƒû1m±ýú­:Þvÿ{ÅæåØnºÿÏì1ȆœQ̽–“ŒÆ#w̓2@ƒÎÉ}REƒm•D1wØâ§1F€àL˜†'Qîz•šÄ%Ú$r~ªð¢Ðo^[ qŠ ¬tVœqàZ 4×ö@£6M6–5J¯Œ-p-šœ«hš•@£˜âð‘¦eܸFlcMÿ3‹4½«¢™´
+{ÒU"áb¨À:ýš¯µ²¿z}ÑBÁ”àk5p-G‹œëØe >1ÁW£ÅÀµ-2.*Köˆ’)e-$“æÁe‰Á¬Ùð[,Ƈ”´VX¡Nù–©yiRá…ʼnºC'–]2p-‡›œëØáFIœ»n×r¸É¹(Ü<›§ 'äƒk>W•äÈP( lkåˆõ””ðóÜ?…¿FŒ¨ä/9O‘§µ† =Ì;˜´z…e”r’5Zóýk%®e\Ç~èÒ ÆYgWƸ–ãZÎE]{Ä5ƒ©A>8°ý–X«j™½e÷{'r8!í
+ÿÜsxLÞ—
+„É“½²û2‘]²¹ÇÇ­p’Õ¾¨ÌnX«áL/g"÷x$´Â¸CÀ›¤
+¯!€y¼B:Ì]*Á+nήúe¢¿_œ¾»¼ÿ«¿úp{w¾°(ÔpË\#c¥}."ƒpŒ£ášo±¼¼-ßs•äè-fƯElÄÌ
+ª+0u>úÓïŠ5Tßòî{;ûeX÷Sf»-{X‚MŽ ›Þ=œaŽ¯yGÏ´êS6ò ‚h
+Ñܾ¥~¥þ¢®5 ÏùÈÄ zzDèàN¢ü”¦]q’Àµæ$99 P¯€:¼7:Ý­kXñÆkÕ3>òF»¶ã] T4‹wékÚV'x×ÝídzûËÛ›ylKbÔá±-í0°JEØa[ÏÛrèJýZN³/´…6í+jÝf›vÚê¹SŸ(þ]îÕÍø¦‰¢ëlì+å B¶ÙÚîX÷_‰-;ÇÀµê9A[Û -7nS0ûB[²ßí¹hákÍÂs¾Â‡}
+dâm=´µ9 (œ®ÜŠ®5Éù( °õf€­í K9Õï«[vÆkÕ3>JXlµ-JYù\žÁ''f‘­(šG¶¤`Æ ¦ùËÙõõåÍÇÅïý™/üÞ†$f­|À
+´ ï¬[îŠëI÷-†JÒráßj]„b PŒj\mP(ªú‡rž ˜K(fü¼XèXÂRòÔ&Ðy”ÿ’Úx¯‚š¥&a˜0ÓS[~´‰: ‚£"sBÒ(‚Ü0gùuÚ·0×A,ÌS’f‹†üÞP郀bœPQä
+ƒB¥PS<”óÅB>Ñ©)L "~aB°FzÔÝ÷jßï‡ZæßðbuÚ}û3)„}w°7ÝçC;¦ÀÓ_¢D&§\Ù÷%ú®ÆžÒ×ê¥Ò×Aö€e×ÛCîÞ7Êè”Ñ3ºÂ‡7mùÔ*Fb%ñYR5VÔ(‰ðH ½—ŠµBá/aÒ,£tŽno¬QÒ†Ä ì€k\…6‰AºÀX¥«”´a FñØí×s„I³HŒN…¯øÄñ"%µã@ŒÆÞͨ­&Í"qâÄ­5ʼq@Ét=¡f–fU•4±Û|
+¯„ªóBéäPF(#='ÐsBå9!K0‰-Œ&¦WPÑ‘zm½ ¤­¢›DÙѽ
+JÚ.ЂðèÏ!i5†‚ { !%mhQxˆY!mÃ]t¢& JjºÍ;Ä傶Š!}â²]*((ó&Ï4«dÖeU41Õ¼óPŒjZ€RYPjjŠ‡bz ˜A¨Í3”æ
+/„š¯BéÒPú=ááI'˜ñ¯F–¡†k kÈØlØgÔáÁ†¹ê ò'ýþc¾çéS$Ƨ‰Z‘N×(éƒE †JÒ1mŒ3ÅuÚ(Ò‚hÎßH^!$­m|Ìw\V®§ý-yÈŸ¥Lû§Â!¿;ÔºÅ@ +Ô4¹Ú P,Tõå<A9™PNz¥D<iÛÅlïWPÒº ÐBFã˯“6Q/ApTfNHÒX”÷ó–_OŠôa¾“’|Ž2-Ò§¢!¿7TúÅ  'T”¹Â P)Ôåü@9‰PÌõS$YÙ…k¹’d×J’ÍÙ(Éî³óðIö­®Å¤÷õ„îÓûzÂáÞòûz%Óbí…}àZIð9%øçñÊžV’?òJò7©¾pñAÈjV2YL¹Hœ,]$&K1?Õxóú KYkÒq×)1ÖKè=ܯŸ¯PÒ%C¢·˜k¤QÅuÚ(ÒÆ‚I;1-©¤‚êicŤeƒEu~=­ ZR/ÍR¦ÔT8äw‡Z¡c…šF WŠ…ªþ¡œ'('ÊI¯ÔP'-¢b»X3Åû”´R ´òÃøòë¤MÔËX4 ÊÌ “*ª'US?oùõ¤Šæ;©™æ(Ó*j*ò{C¥P ŠqBE+
+•BMñPΔ“Å\?IåÐø¬Y«£®µ:*c£:jŸ@®£j»wPˆvfë ÍRº=@hºµÛö
+E2c[ãÓIã?Óè?—!5ß>üÞg¶éß!kÙÆïLúÏi˜¡I/ïUömúhÛÿÞe¶éŸ³æå >Ã2[/ašÙ¤9Ȭ’Œ_3}=ö4ÒÊt&Ÿ®´iº4ê_Q ]%)Öraý5­ˆŸÛ‘2ÚM¸î>Fb0³¶‘$»OñŒ"Âu¸‹ÿ¼ù@Â;ß$ˆà¬U¾I¸K¸Æ&¡#:Däcéµ[ôéHíeyb @oAAh¢éÐõyECå¦+!¥EA®I¨hò|Ê ¢
+ÈÕ¹>¡¢sÈçò‰ƒÊä~ª«à4!Š‡ÍC®çëd5Ý?B1÷öŽ®ïŠ9N¯Eö-B¹‹rå.Ê]”»ŽòM þÖ_Rþ¡üCù‡ò埣|ð†Ókð­¯Á)ƒQ£ FŒ2}ŠVP¦¤LI™’2%eÊWø¥8{ˆ5OöøKž’¥C³Kžxk1V»~ÉÓÕÙo?ßÍ/râF³¶u‡_äÄd\;ZäD‹œŽ¶ÈI°VªV% SÇë ,Å„æØ‹qö†7T:ÉßOG‰šJrÒG?i#èÁV<!Ó™Ïæõ'#}ýÿ½ !s&d”ч#£ä7ôEýg¼9,Áæ‘)˜µ< %ŸoÞßýµ
+endstream
+endobj
+723 0 obj
+<<
+/Type /Page
+/Contents 724 0 R
+/Resources 722 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 709 0 R
+>>
+endobj
+725 0 obj
+<<
+/D [723 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+722 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+728 0 obj
+<<
+/Length 2777
+/Filter /FlateDecode
+>>
+stream
+xÚíMoÛ:†÷þZ¶ qøý±œb.0À pEFê4ìdêøâ¢ÿ~%Q¦¨¯¸’k'>E[[ô+Š¢ÎKRD‰fß3š}ZÐêóÇ‚Á'ÍX¦¡.3–ų»íâËWš}ƒ_þÈ(Îfºm&­*ø¾ÉnŸ›9p YpY¸¡<h¦)1ŽWY|¸]üã_NdŽ8Íuv{ŸiF¤Ö™‘šH£²ÛoÙ—wÛåúñ}®)÷ý¯êËóÏçýjûþëí‹·QI8uDÀzÇ…&õ>뜅#Z™Ì(FW>ç¨>e…tQd® wŸÜù¶¦|¦þãÓâKƉ³ÖŠúó+ü䋺`’0#„+–·° Ÿœ¹,|n|^P¦ ƒå¼C“7ò‰Ey’SgÕ%zÈ7Y]%Ÿ‹Ý¹ÈRþ™-±²ÑÚqãw%o%n:*àøMäÛÈ{7Òþû£Yõ‡L¶£©Í1œÚ¨ê‡Ný6Tvn‰¢’ñÆOub#§›ænT;SŒB+ …ñÆbPo´ú¿ÛfMÓ}ŽWÏëõÛ5–nªÐÚ_ßV½zû=ÿ÷5'‡¦JPh4Y– ßrè[* Í4•=ª‰¢p¼˜o܉5V
+Èfk|9q-*×”5£k$5>øCii¼µ´é‡.'œ½T•:ýÑã'tAìI ç§p%L»#]
+c=`Ë~ÄêÇ<†ƺ_íÖËÍ
+KgˆX±ž±FM›¯!ýeZ¢øq—¬ê,8Û0 N
+YÖV„áËÁŠAD…ÿóÏ÷Ž¾» V¬ý’hˆ3üZ¹.1öˆ9çÇœs›ÄIè6Ç<RŠ^d‘¦‚œñW8ãÌQ.4'Òº‘0ª—ÄyªÅ@GÖwÖ7³U$ׄûóæA«ÕK¬’jÑ*ÈÛÞ8o›Û“NjÆFiAõ"O&Zô$2¯9˜×$õB/e!‹p_áêÛún¹)'Àîw«å~»zÜû`õš1âT5aö~y·Þ¬÷?ûé˜RšÆç§cÊ
+·r¤cHÇÎFÇõºí¨›öáiÕó¿ C-Œp£RU)I‘ò¶0ïV^R¯`¦õ
+ùÖ™ùÖKÂ<d¢<^®Œ
+\2Ÿ~œC1P×óãî•qâœWs°eFøraðCÉIƶX3.f`h"z¸vô€@H0 gÞ½@ÂðF‡›>¶«ýêi÷´yú>Ì
+¤„öAÈùY4ÐØS|2:²‚Kš¥ü¤¦‰£˜¿%QÈÌØþ‰Q^Dåí„;'Eź֭„¾¸GÞJx}#-: †àbžYQ“â`›R9¤R:$Ñ¡C£Ì0)J15yR”`cATcAžê:‚\a#Òùí¢¦ö~ú’?k¶IPÙ$Õa_€xéº&CMí¶¤ãÄ:;æÇJ5êÇD‡ÝÖQ—™ƒt™óƒ®õƒ.}3´õ%èòs›–»ŸåD(ÿ¬õÍfý}5ø¸uáD®>ô‚!)ÓøÀu„^½QBN;£‡ÓHæ›É 0ÂõœÑWª *{·NèY³Ó( ‹“gñNß¼fp‡ƒ&VqG¥sG"Cw íšH»¦G¸ÐP¡0ZŽð ‰ðT†Ž¨ëì¨kºG¤
+ÎF‚<¨Æ‚<Õa#wFL·‰äp~ãÆ2h“ ³IªC› »¦wFÌàG㢑ôc¥õc¢C?â;#&#±ˆõ#1áÀ<¼Fbûån
+endstream
+endobj
+727 0 obj
+<<
+/Type /Page
+/Contents 728 0 R
+/Resources 726 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 709 0 R
+>>
+endobj
+729 0 obj
+<<
+/D [727 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+726 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+732 0 obj
+<<
+/Length 3093
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsÛ8¾ëWð89
+cxé ë$7²X\;üYçôËEÉ•wÅ¿k¾«B»Àhè|UœÍ>õ%HG"¤åÖ‰}2ÊÂhnt+á·Ï³¿ýÝ«Âs_ɪøü­¨×UUXíyUŠâóyñå—«õÝzsùßåù‡??ÿ1ûýsR±,=WÖ<¼æ2ëxì+j€±… cjÁ?
+âúXÔ¬³Z¶!á<øWrj ‡³/…äÞ9§ºãŸôShéLh.¬R¾¾¾¢k:Já‹x\YÔ¦ÈF×l€‡õä¤L,“ÄRQCLÅì¬èºäS};/²•ÿ,f×ìlëÊKn…íWðð*Ø`l´’Ý¿¨II¿^ ôÎYŸ¿ù‹š\’uUÊ T°lÿOÏWE_»?¥ÅYW~·iyU5¯{|]]ñݾ¸®ÿ³Û­KP%ù"Q0òÒNç*ò¥.Êy‚’›RÉuZ‘˜ •ø²Õ&—Áѱô ¦~­§#¼$ô7(ÜÑ
+§¹•rz…s\Tþ
+G…;•kŽ™Â5’â­ÓÔ’Ú1Å‹Ö!×ýiÁõf¿_ìSšDp¿&(M¦4Škm§WEºèì¥*úφ[kÏ2¥ÙÆ®Ô+ ößöSsO5À_õ’ƒcÅÑöUbÌKå/ŽÉû¦T\•žÞ·Ø8%!hÆ_»WÈ]þÝ“EúbºGÄPÁ=-̘”‚[D¿+n¬z°~o0­W²¡íã†ÃÓ RŒæ4νÿÝtLIQFP3’Qìè»òš¼¿l†Ü×ó¿æ«ñáve%wZ>Áp»,¹Ãm ·O6Üî»5VqIjLb”{˜í$Èð²W’³Òtf¨Mx€^ë`†‘+2Õvø¿hƒ[Cés5Þ²‹Ãu[»¦vÙGzl6è² ¼]h`zãðŽÚ2Ž–ë€qd\0À…1&WpU…wÒꀂG®ý
+žsAÁ¹<?ä2¹‰h
+̪4L$rí7‘œ &xè ÃCÓÛ¢·\È[®¶˜qÁOeU~
+,ë()SY[ŒhÌRž4N7z¹þz»ÜüµÜìÁ³„åžFÕ“ãY•6!˜Ïžu2<ËòÒQ‘¾¼bÛmÉåŽæžÓ!Ûã²ztbôª8‘*«:M¨N@F¦AF /;Ô‡x*š?‘æcÔ?<êOFÒ££~ãè½ÈµhÔzs~=¿^,ÇGý¦¢ÁW¥§õOþKiŒú1ê?éG#L’õ/ƒ,Í¥ÁÛÑJzïw¾¢f)íÈ^Éœ„Õ­÷«OëÕÿ•íg;•„bQS8.¼g¶‚Ú»2uEÝEˆM9ÃŽŒ¡š.vïú }ÑÝ!)“²²REw’YwÖÜ^rJ$6FÖ˜dÓEIÇc«Ì}&v/.Éu‹&&_•ÖŽˆæú„ Z.÷W»½CRm¼2=WÛû>õ9¥ájÚ¾¶á"à.wIMsÊú¢;I‰¬;«ýârJ$Â]bVâý}" '‡ (
+¢”x½!º¢ב‚4ã·"âu¬…ŠDݸE¢ö¡"±–xMEbC")64ŠÈï¥éÝ›>ÛRY)¬ÑŽØQhÒÓ±éãÍ*ey'¤´ØQ,ïI6ÐÛ,",dl +XÞ],ïO6Ðç,.,plàá^ wÁYBÞv<éy–÷óUrC}]«Þ“ðߘ!!!!!蘵 â½oÿƒ0‚0‚0‚0‚0rÌš EÇn²…@„@„@„@„@ôR 5,fyÚ­ìñññññŽYã#û¤[â³]3ºÄG[Í}i›%>7ËÍíúúz¹jÖõ„½#/ËÛñ¥=Ú(^:;ýÒíHŠ±XÚƒ¥=/'J¥MðÿÆÊÇgC)½xi[Õ»µDä×õ­aF®ÈT[æ?Άҡ¤lùá±][±Ã0>ýêt(G[‡w¤ÐÕ!ëh¹YGÆëÀ×ÚGçC9VÃCA7º_Ã#× ÏÙ áøÀö$D9ÖF´$Kú€D®6’³ÁFðMä{ʈr´1z²›Ê2Æ–ë1fl0Fd÷=áJ`¢q„KîãGl7Ë»ÍzµüyÕ~ÁvÙB]óëó ¯áa Á½iµxõóëær1¿¾ÛƒQ{¹Ðî 00j¸0°Óî¥?/¾ŠSuuïm¿cî>>f´¤Ä<: ¨©wŸ„rzÒýú `
+@¨ðN®Züáòf¹º¼Þ“šEiõ°FÝNP¶äÚzÀ €N'(R[•®ó¼ÚOk÷:[ÕË#GI¬ŸU+gm–bvÌÑí×k­§ó-mÕcmõ#rmÆF¤±LÛ•÷qKz`)ÏöѲ^ÉYãÚk[:í’¾Š”ì.vÙ0'öžÄ3ć‡4ï vƒÑÃè‘ìPè¡P¸ ¸ .
+ébŒ”Mv˜ÊH[…}1¤q²®Í['™!‹sšœgG£KúmšNB™:2…4ÄbIÌ"*\:ðìÉðl(4ðÖ‡·B)¾A<j ¼
+xÕãñ*Øð”×€§t0Å(œ"é(â
+ÌÛÿ,.Ö«õ÷ËEªtß|Æ<‡7ËMäð¶ù4ôëf=?_Ìoïö 0³•ÓC04¨àÔ`0À`^@†Cæ(fj!ãÚúx™AýWRaÎ1ˆ™‹â_ÛõúÉ=ti€„§ø#)p¸ÞºþAbB‹…R
+MÄ»
+²*ëêÜÒšæ'©‘½ªÇÙ’úŒ»|ƒl5÷+Æ6 È%÷t¹ä`ì0vdízEY»`°0XäGzWù‘`ò0yd¢æû™hà[à[óã9wDœ Oãq8¼¬¸èVŽâáfÀ…¥^ ª¦ÀËà
+;‡c1ïDðåï…/…6Ôk-:yóóëêrÑ&qùöm~¹…)©$YºnÖ
+O S
+C¶)ñ­4`Ê”®XË:½‘öñ銥ªB[.¼OW¸"S“ýëƒ(Ë_~ÊYœòæ)ÀB‹»#
+
+×€ÛJÔˆvøûçÙÿy7þ
+endstream
+endobj
+731 0 obj
+<<
+/Type /Page
+/Contents 732 0 R
+/Resources 730 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 734 0 R
+>>
+endobj
+733 0 obj
+<<
+/D [731 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+730 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F45 438 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+737 0 obj
+<<
+/Length 3070
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsÛ8¾ëWð8s ïÇqgÊ›­©½dí­9¤rPÉrì*YöÈNMåßoƒ (
+| 6i˶:•„"ù± ýuƒ@ß
+Z|ZÐzùׂÁ’¬PŠPWˉâÅêvñå+-.aÏ%ÂÙâï
+w[Hë
+~oŠóÅçC Ü‚ nˆ±lÌ-”$JÖ~»Xüã_NŽ8ÍuqqUhF¤Ö…‘ŽhÊŠ‹ËâË/»åår÷ë׋?g­“rêˆ0êég¥É•ˆËÆ°€“+SaTeø¯PŸŠ
+º¨l+0î7÷þ¥ÊFýâÓâKÁ‰³ÖŠfùvù’.˜$Ìáªõ[X‡%g®ˆË·eŠ0X/{0å6¨L,•mS} ëbq^4—äsU7YÊ?‹Åö™[­7¾*egã¦ç<ýeï9ÊÁ“tÿ6ÎT‚ë2J5”PQ-DeRƒ;[€ å adQzk±ŒKØGkÆm±ª.­©K¡(ìãDH-ß`¥ã²àÙpXgTrî9e€s[Áª;Ç8WUƶi¨¨ª·°PlÉxߦxd¸£)ð6Þäæ²Qâ PX¿Ç_p8™`VG¯‰{a5ÐBœ\^ïß5ñ)"-Œ'<«ì…íß«Ûâ0|n^6ÇçOUaíóÏÕÞumõÿP˜ÛGPA!l3pC¸™/~j›TôI“ÂÍg>¹k¬`fG|ÙS«äŒpŸötºÍnmÇ‘±mçº FC~"?_—Ÿ’¸Ë³óÓ¦Ýù 7 Ë„Ÿ!oCKÎÊàû•:ÝW×/nó‰=ÙCŽ½:Ç‘þöÏÍ1ÔuOÎþ_µúW±}C²˜2[›åã[Ó<؃ÇLˆ,ý0-UM¬’O΄l(¦½­ge.ˆ žËá-q¹ò-ظ·yüíâ»?Ví‡ê}Ž”0-`ë(LÚ^?€ñäp°7PJi‰àÁ„4ÏS=ç3_”–NÝÏצ± (´a£%X*«ÚIp1Þ(«7w¿–šò_vëÍòǰȪ ªñY)%ŒqYQd=šÈZ] ¾+B’â@Håxÿ6È=`â3>æC¾’ð«W4ü®²p²¿L ”³Ti?n„G8¬Ê‡µ¡P-ÎWà˜ c£ïL×ÝjŸG¿%nrUûjJƒ›Ñ¾òé¶vÎÎVvb¶²(³žŽÌŠ E†¢ÐúÒB+² Y†RëÛ—Z‘§ÈS[QlÅ€€áÊ­ÚÍ¡·N²2—àº/‡Wá }";‚ëãz³~üq¿k«õöq·Ñ_™!ŽŠùõW-•om þŠúëqõ×–­)Q›+¤õ=‚ao%S%Û6±w°n}úRÖ'gžs÷'—AK‚bp€&•³¦
+AUtø=òOÒCTˆâÍÞª¬MQG†ccÅ׉âëG¡§ î‚ÈÐ3¢Æ院ž¨¼NP^? Å %ÚðÅjT†b
+)†²ëQe×BR ‘WúVÁ(I#jœ¤)
+IŠšëih®%À͆ӨL4ˆ¨ñh¢0 à:—àÚR+Weá™Âª¶à:(«*Íáp9¿¬ªt!QVEY‡µ¾Ÿ^ÁVŽù·¬-´2rb©ì"Ê;ezº·×áh¦å?ƒ¢-Ž˜Eò#ùQÆÁ¸Hà#0
+Î8ÎC
+:ôŒ¡ê”D䣗* oOÙk)Ð#¤ÎO÷(¥NµŒñxQp~g<9Y(Ø@A‘ì"Ùi^
+$ú,úÔ“‰Þ§-ÆÔNQ¨&[
+•Ÿ»WMÎÙ’{* ­M­âpÎõææÛÍÝ÷‡ðÖüÃ÷ûû»Ýã°R%¥öŠêüã;¥w§
+…*ªŽùm¨ö[
+L=Ü}E®Wæ5- HC”Ëp$¢²I˜Pá:1^S–tÀ~&sd¬Qy2&@LX(pM¸Z2Ñ°ÀE±L7×nu¤­õf½zÜÝmoV}ƒ¼þ^î®–cŸæP|Êì¼Ú·¶*°_¢ö…Ú×qµ¯ÒBÞmÍñØ|tÉ3E \‹Ц5§cÄÕ¶;ÏõÑHR×Æ–UÝ®Ô÷vò‘±e¾»³Uì?ëYÖBuzh|a›²æ²
+'p¦ÕM2¢Ã+îcu«Quû³S·uX·2¶·n˜¢[-f­^BRpcNHR|ï!Çù)cyŽ–5*rÔô#'ÕMPC¨Ÿx´n5rRTOÈ‘rPªýi©öÇ ?jQr–ãV)êØMxX"œeãFÊÄ…M•·$ }zê÷;<Õ@P› <5xRÔ±pÙM.ðDÔxàIQxÞÌ3˜ã;^¬Sá½G8'ªq9™(P£2.Aû‘Lùr8“©[DG¸…dØQ3_G;Oc°£†ÃéÜA7Ípß Ô‹7ÿ¸c œb»^N¤ë'RÁAÁïSÁGÏE½ßG9ý‡º¢*…DÁ™¡lìƒAaƒ9›X”6Vßw7?†Å f8a’Í/n0ç Ì Õ T7ÞЂ\†Éh þ4¤^
+]°jPiX¶añ·Oéþ25P¶ôG4ÈÑ -[gé
+FŒ((ºbTÀ¨€QUê—U©1®`\Á¸‚²þ»•õ1€a
+endstream
+endobj
+736 0 obj
+<<
+/Type /Page
+/Contents 737 0 R
+/Resources 735 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 734 0 R
+>>
+endobj
+738 0 obj
+<<
+/D [736 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+735 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+741 0 obj
+<<
+/Length 2745
+/Filter /FlateDecode
+>>
+stream
+xÚí]ËŽÛ8Ýû+´ì^ˆ#¾Ém¦ô¦;¨
+N¸õ”¶éú¸­«n즭©›+¨~#í^·õ1¾<ß\Ÿ®ª’u/¯ksùîwWý?d¶ñKhË_Ä2a§‹^†‚V¡²b¯°U0]ð20g’¤æ‘®ø¼5ì\p&LÁ#×¼M–Æ^<VÖr÷›YRúÛëx‡wdÐ&åTÊ;:bðŽ}¼C1+ÄôÞá7~Oï ‹7þQ;ÞQç,2§¨%UÈ_šTWõ_(+“ZçüÍkY¸4†qºÑq R ïŠÁÂ÷±pÉ”²Ó[¸$Çñ{ÇClykͧŽ…o‡0qPN”¶„ã¥ÝÐ#ÿjY@ ò®>¤>ÒƒœÁÉ0§ÕÞY€Åÿîd'š# ÉdáiŽ—„ã¼;…³›iÏ®üî‡y<™QÑwáH » Œ®zµ„¥¼aÖ¸”36R)gìˆÁ÷qFC=#÷vÆïÑo©“¢V¡ìËð©é”pA!Þ9¦L<24ñ÷¢Q²Q¡ Jà\–†¹Á‰A0ã9ÓÒ4 Øòï»ëùz¼þº¼o>.V×?‡q.JËLû=Zú\œËSxg€sç:5Îu£ÌºËûÏU?›`N*§ÂÏ}í¯éª}³•J3JJYêŠ4¹mo™`’º’"=·ªÄí(žÐ§¬6Ÿús•ý;çó®‚|§–j¸
+iºM—él«¨þ u]SøB×ììèè«éf÷¶¯‚Ô-n:·m:Š ÍÉòb3ë–ÅœÊÖîÀlíÞÜÐY–aÜL˜6.`<yÛš€Ôw*zkA8B8:ž;}8z“ˆî$úÃ8ÅR@v4™Ùgœ®A`@`8 |úÀp©@8&QNNg>‰qdâ";E„Ü·r–iïÛG‘MÁò@¢é`-ÓT2@ÎÄ4ELÍ0ÓDX¶zŒiZ/V‹õχEßrëùâný8²ÜÚš}JjºJƒ‡êÕ¦PQÇ’ÆBÝál…wÊjÉÞu"”zµ+3±·î¥ Û-S—rCáÚq¯ѤÖ6 Ûk© T…¼î®koKµ—‰ÔmÝ4µ×šÌAB„Úwnñ^b‘,™šLÄ¢ 5‹ºRˆE` .‹z7QÁÌX‘Š
+T"*t¤@?~ÂÜé…kì)7ªr€6™‚ÔxdêJ!2{÷î óÃЧ;Ö:oƒÔx¼íJ!Þ‚xšžxÚR3ƒÄ“6žŒMOƒ„’Väs…;¡¤­b¦P ”@(Pš¼³\ ABoG‚†hPÒÑ”ïJä=zònuçºöÄ6° «@Wá™)D:D:ax 11çŒb¨6Pm˜U"îaV "D"C4G4{Ñ4á MnÃ4!—Ì+±K®¯çë圾Å¥…¯×‹Õj¹y.M¹ò]ö4"/o4"hDЈ¯2á£<éÓ¢Ó{Ôëª\xCÞ¨µ,GNê"*P¬P¾|ì"\6ßäÙvš¥+œ0FuÖm…òNQ-+êÓ·©BEwRØê‡)Š;ìfW’~#–Žî«5Œ/Œ³{_Æe›‹›_½+[7 ¯ª±²¨¦žÊêî¯[1L)-ˆJ•ˆ¥ˆ¥ˆ¥S¡Tè[ BÕÕÕžM¶Z­ [1÷FdEd=ç¹7è\йoÎE¾@¾@¾x6al§ ŒÍ$„±9ÂxK­ÆJfm{CÓa˜b–Ç`•LPç |*øBæ Ø÷!Èí½sV;9âáµ·ÂÕ`A<ô4 ÑF?@WÏ]®Šöb{fF"RêñÒŠUƒµ~È,¡!3é³…o ³»åÃâq2“edtîùmz.b&½ªvbÄìTˆY߶¡íçÛº Èí扺vey`Þ+‰0ÞÌ ËR˜ü>æ’€,ð9 MSð[Ä™`„'†¦6‹`Æïq0
+Bu2ùsw‚ß‘kg“¦¹›Öâ)둱
+endstream
+endobj
+740 0 obj
+<<
+/Type /Page
+/Contents 741 0 R
+/Resources 739 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 734 0 R
+>>
+endobj
+742 0 obj
+<<
+/D [740 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+739 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+745 0 obj
+<<
+/Length 2674
+/Filter /FlateDecode
+>>
+stream
+xÚí]Koã8¾ûWèØ}—ïÇèm`° l6ì¡Ñ¯ã´ ÄNÚq÷ ÿý%Q¢(ÉŠ{ìÄ5È´,ªX$媯ä¯(’fß2š}žÐêø}ÂàH3–)E¨ËŒåDñl¶š|ùJ³[¸ò{F‰p6û³[eÒzAŸï³ëÉU[· ‚b,Û¥ƒfJ%+ ¿ÝLþö'2Gœæ:»¹Ë4#RëÌHG4eÙÍmöåÃÓÍÏù¯_o~Ÿ|º‰ZåÔaÔþÍÒäV„c­X@ëÊdÆßU(þžÔ笺(÷Ž”@¿@©?|ž|É8qÖZQ¿Â%ßÓ “„!\q¾‚s8ræ²p¼÷º OA Îó™¼¥'ÊMy¬ªOh‘M®³ú–\Ã9Ë^þ7›¬_x³ÑÚq㇒w
+ï{nÀþMä½mäƒtÿ‚%ÁÝàÄ
+i¥×åÏ8ªVA‰!Ô‚ÆŒ!µ´Õ­ù-›„*q?Zºüíï•ÝŠÛ/ÿ‚gPpU-Œ÷Êhõüy¶ÊÚÞrWÏëúÝ¡¦M²öåmÕÕ»÷v]ü;„ Ä
+ÀÆà¦ÂÍá
+³C>3–Äp~x¶„Á—¶ŸCåÚ„ËcbÀ%òÃÀ•J–ÀNª€QÜ¿PæCCr}FxŽF(ˆ”æðF(À¶ÝÞ(ªá?ã‡V}JŒ°‰Õ1´”¶Ÿ|v—¦HÚ#XzIšX%÷ÆR6„¢éƒwô¼ÎÔ±äÃ%á8ó&®Öà]ùî‡Yü`¿CE_Å=L;ÕBØ?KÑD±·¿4
+r)-¼T!Í˸‰Ã)a¾lË §îù£©5(
+QA7"VaÿÐN‚QñÀ<m§Ëõj¾Þ“ Ú€=J~„RÂGI“‘ mph7
+Q>€Õª$<É1ÇËÆÂɬ MÚ}--ºc¿®,Œk€—*áRª•Õ º¸wdÕ#“'ÝŒLnˆqŠÙ¶µPâ¸æMaÎ
+‰7̸,ãØí´U<Q‘Êzd—J 5­P4*„JŸ†ŽÃF"Á瘩_+‚–k"dx9¨Ê“¢R®|6p¼õšÒîB #¡¦ûŽ¢øU¥EWÞA¸|ÊOU‘Bá~watçë&úÊêÊÕÏÚT¶ì@_S»Ê¢–zh»¿ésŠ¹æu1×`òëÄÉ/„„„ÌCíÈC!D D D`Jè¨)!ÌÎ¼ì ¢¢¢&JöJ”DÙ†áD wÄJ]%J¾m¦‹ålGr„Z€+u„äˆP„;…ÉLŽœ,92´ÜYô†;ë†Ôöõ&‚ ˜eªÁ»{ÁCAÁCµÙ³ÖVÇYäìŸÍÙ£Õ#•ü6©d´\d8/•áDÛÇg$ÞŽL¼¡“!ônø †`䃤‘ÄQSñA›éúéÑ/O³]>¬‡)!©„'8O I[®(‹”RB§Üvªºë¡nrÞuÇX,Ê»äéõ<UÇ5}Z²–è³;ŽŽ¤‘Ekˆ×Q«=£nB[“àQŠZ£³úˆ…ᘈöHæmQÜP ÷A’!ëõÒí¸Ð±Ñ±q©’óÜ¥ }}—ëx¯›·¡w£wã’È;rO;„„Üêïü·ú‹˜ÜaîÙÿ:ж䞬WÓõz~[-Úðëi;_= SÐФ=ÍŒÀ"ôI)èx.=ãÐ>Ûd!ë¢hÞ|‰y†ÚrC×¼O&ïѵ8» æ¸$ö;àZÑ‚‘U<=«ˆVˆüÙ{àÏÐŽ‘)B¦h¦—²<·y¹0ÈŠßU˜‘÷s9Û.W%'òpW§ëê¸ÝÎWÛù­gIüÏqªZs¶Y®v¬x)¤Øo,Ï¥O„¡D‡ô Ò'g°Ç\ôJ~XQ §~,{@‡ãÕ¨T”5PÕâÔíëyª O™Eë p"´_è h©ÂG4mܯ§Ü¾˜ÔíQ¿è ´¹‡öM Š*ÛÌãó„àßñÅyÀÑœóÖJÖuYÒäNYG†é(›®¡“£“ã+»o`2tTtT|Cù"¶åBWGWDz‘Ê=ä>Uˆ)ˆ)øþù_Ãv‹C°Ý<Ìv{p,°Ý·ó‡’Ü^®¦ßæ›_à 6·ö ^ØLùJÈ_#}²›
+[{ö•!.Jg›×ßï÷""9¥„7㮺UTXlhhE÷õ:½áJ,·ÅÁë„R6‹°A4ʤâ"&Èt'"täX/t‡4}d-‘µ|áÎ1è<ø¸…<à¹ïˆ‚^ŠÌ2k³V“TƒÄWŠ0ÅKbíÏév¾)‰µÇ›åÝr6²Â#‡§ !Øáé5ø)G ȯ!¿vâù¡¹…˜¥g: ýJðyí Ë’ žjKnmS0¶×Vº&LZÖ 5
+¸`ðìã8(M„e5ŠÀG÷^1"A*0òï?þó)`FãØmÁðÃÕ¢·ug¯ž•9ÂU‘õÛwèÅ:³Ó„;6æÌ•Ô¸3'‚èÌ{R‘âÎü&ç{^ªC
+-áñ{Ä+¡QwLäБ=ÑœÎKugè;aÖøsuèT=)Û÷>uób¡ÃÁ¯0)Æ £’‡ŽD¡ã’×h<‹q±Ã42ØáˆF$™ñ’ÓÆÔ;¬@ÒIãÓMÊ|Sa lÂÉ”¯›L‰æŽ«=¾±Ih²HÏ]ÜäE4zd°Á:Ö¤Cô.\tò¯›,˜zvDÕ4 HÉ!ʈªaŠ<S®*¸š›LëÓÿÝÏ?æ‚™Œÿ>8ѹp÷PP: ýãü-ò=+”­¦Ëu)ÔjFè÷਄~NïÌŸJ¥ ^·‹yY1“Kð‰ºâ¿–÷ÿœ®o{
+`Anö°Z)¨ÔÀÆûž
+endstream
+endobj
+744 0 obj
+<<
+/Type /Page
+/Contents 745 0 R
+/Resources 743 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 734 0 R
+>>
+endobj
+746 0 obj
+<<
+/D [744 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+743 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+749 0 obj
+<<
+/Length 2668
+/Filter /FlateDecode
+>>
+stream
+xÚí]oÛ8†ïý+tÙ^˜ÃïËé¢S`€Å¢Ó`ç¢è…›d›`í¤MZìî¿ßC‰´eY$ëHÙØÜ3˜;Ϋ#JzÏùD¤ió¥¡Í»¼¾¹Xüò›£#NsÝ\ü£‘Žhªc9œ5WÍÇWœHÂýéâ÷_~cLõå–8k V+üñõëõƒ—mwðöbñmÁà-mX£1Ô4Fk¢ls¹Y|üD›+øÕï %ÂÙæ_­pÓHmˆÕÞ¯›‹÷³‡pþ¥†P.Ôp6 !Oã
+6àQ‚p«º“ð÷×J½Z­\·'bïpfˆóúö͹#Ò Ø·"”‹nßïÖÿùz3²_íÓr–ý
+£ˆR|¿oÿ½Ú|]_?îZ F„yž¯9„Plšm¦…ð¶ÑŽcXþ@”$JîAÑ;ƒ†jáÂ1A” )ö×Ûõ륦üÕæúêör~x¸__wïXÚLG·ˆ&ŠÁ6°TDs t„Ê6ð·TïšVºhc+î?ý—£|Pÿònñ±áP$,r|ý¿ò-]0(,F×þ¼Ÿá•3×Ä×µmŠ2øy9¢YîÅé‹–ƒHË~¨1ÑM³øÐlOÉûöpN²•6‹»'žl¸¼Úqãeyðázä¿‹åè>–ÉþÛ÷ƒè4ü×¹iö­™‹ܽ”Ä»×Å[kÿtìm
+{Ôq½ïo¿Ýüð‚ܵÿOþÍbh8Mpüf¾ª¤¡C·|zT9¢DQæìØ §™5°ÅÇa—:6š²^ÊmŠŸö³3÷Ù^ߌh!è›sq½ ‚PPY×
+’¶àú«"× I ô†fw½«izØvkûîu`úî+¡!m…Ž?„;S{úâgþ4øýÍÿÖ¸z’q óç°à[ý>P|Û…JÛVŸm‘ÒÌo[8Ë.Öþ1þлowýˆ~-|ºß+Ë:,Ø#ús*ÙRpÂU©£"Œá Æ‘°›Rt>t5¬<ºb³T­Ž#zÃ.Ün¡û½L_/}÷%þv;¢8Ô¾¹ìS2!Æ6Ì´pØÀÞV7ç”bN&Jwéþg)ÉB¬šzE‚pè ›dßú5LÉTBš§¡›ù‚pÃB-,¡¬þÑô̽9Îá"îÈJie‰VüçðÏà!¡‰|~<¤5Ü)G<„x¨6<Ô7ø<Y®a´ ¹Ìã¡(êþÐ2Ž‡xÓ 5>âàˆ‡ÍÒâñPÖõå]c¥]¯ÎÍõˆ‡Nµ\G<”÷mÀCßv¡**Öˆ‡Îñ‰x(kýå#UT°!š!Å"ʧXÀC…$ ±jêÍ‹‡´›ƒMŠ2 걕4 ‚^²aòç
+ˆ˜†Qaáù¡(jÓ\$Ñ.Ô蘣k+"DS»BOuýå\¿DY×oQÒõêÜ\€èTËõe}QÞ·ÕS¬ zªów€(gý
+6"D3¤ØeS,¢|’E@TQ¯QíØJ)i‰1êç
+õ Kš
+qI Ð÷ï«Ëfh5„9÷ 4ÈŸ¹îŒ! BT âPMí´ÕU„ÇËK!$ KÁ V5]Ý?DA{¢ýªßµç,# zyË ªˆ…[BÞóQ•7ýPUë¬q t¬]ѸAU0î@Uƒq‘,ò†2ÓWQpXÁûQ•÷þPuè}ƒ]Ä@g‡&ß`¤ƒTÒ²”dAUH²ªŽ R Q
+´ƒ+I
+Äl‹në–Ï·÷ëû/íÊ»IÄ´KÏO‚¸qDá÷0!B4‚¸5„*žAQÓæò›êB„ è”APÖóQ•7ýP… AÐóƒ ¼qƒª`Ü
+A‚ ³
+AP½ hÇVÒ:^L³|¾¸º~H3 æ œ=â°‘ãHÕD4Ѳ{T>‘ùo'ð[sÁýšn©¥ƒ:Uu…ÿo®´¯Û/ý]c—ÛÖžßóÖ¸æï©° ÉÆ”!UÁøQU2þPWñq)âÓõ®†^+z7¨ŠÞèjð.®|ºDh²ý¥€*àJ}–¨*Ù¨Ã> B¡* Ðô<sŒÈ–¼fó,¨Šy6ÐÕq›Áõ¤Ç¨Ð¶$±Ó°»8§ðóÃíÕ—Û»/0$a¼dÅü`ˆAïGããA†ª
+endstream
+endobj
+748 0 obj
+<<
+/Type /Page
+/Contents 749 0 R
+/Resources 747 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 734 0 R
+>>
+endobj
+750 0 obj
+<<
+/D [748 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+165 0 obj
+<<
+/D [748 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+751 0 obj
+<<
+/D [748 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+747 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+754 0 obj
+<<
+/Length 3428
+/Filter /FlateDecode
+>>
+stream
+xÚí][sÛ¸~ׯàãîƒPÜ/¯IÓÌìtÚÍÚ3}ÈäÁ•µ±[YNd{wúï{@ ^`™òZâžLJÐÇCüpðáBZ|-hñqA«ã÷ƒ#-X¡1ÔÆr¢x±º[|þB‹kø駂álñ{ ¼+¤6ÄjŸ7ÅÅâSÛ„£º0ÜcÙ˜ Z(I”¬,¼»\üåoNŽ8Íuqùka(¡VF:¢)+.¯‹Ï?¬6÷ë—šò¾íî׫ÇÛûí_.Z|¸ld‚3Cœã‡ç‚&Eµa©ˆæ¶0JªJÃß @},J袴­À¸OîýK‰QÞ¨?|\|.8qÖÂmÆãøÉçtÁ$aFW~¿ƒïpäÌñ¸ñ¶ Oß—=˜eËN´L,-›¦ú@7Å⢨‹äSy;'™Ë‹í ¯vÜø[Yv7=pø%–½×X^¤û·É'Öiõ¯ùyuW´©9f£b7äÁ 7‘Nzj?Ûvm€ ¨¬ªX D*o¤¬ØP½mSVì
+1eÅ~ÿ÷Ÿc5®ëZ¦>í¯rº¬³š»5 Xö ÛúÔ<¿>½û<¶åÿC¾£á– ØÐPJ†Àƒ>šS‚Êô oD‰¢Ì)¸°5V
+0³ƒ3>ïùºäŒpïx÷½Ë¦6+çXZ«ßô`Áè»?ôf
+éå„R—a}DåhŸâº¼7çÆ{!‰áâø¼·@–içÖÄÇ„ö!Æ@+ÄJÈHé¢ã—*4•ÅÓ|J~¿ùc©;É_ hd±Ò‘ŽR·Be©›àfಅ RšãSnÂòƒ]¶†?ÆßZõ)áî¾1Ñô£™ÔvÓl<5uÛ=øsrÜRø°Ã2ì¨ûSÜ ÷k5X ÑaåÁž› ùì´CÑè‡pAuÐ_§ÄãÊ7dâ¯u×¢‹ï~X5;,#&úNÉašÁÆY7çTÍ'Læz•­f ní#A¸´W³ïMO&‰dª4!ÍË”›ãá |†å„C3öÙwÓ  ´ë8‡‡¸Y†Õ!
+±PVâÐýz·Z_yè~Ž·wßvë‡HùÇÍqª¢×n½Ú=Ý> HÚpb% òÍG ¤9 HàšUè¨
+HRxß³4šÔ H1!Rtä£6¨&B>—uFQ>Bùè­(/¨"–Û ç#jœô)j¬Gñèd‰k4’²Ä­Pâ&¨9¥£“•Ž<¡ÌîK}Ë2ܨq.÷ 6UP8:;áhr€¡¿/s•¬Be*Y‚šG€9¦l¤Ý1t£IVŽ%íÅ•AáH íÊZ9ºû÷Õ˜ äT_Òp„à‡2Ê@s’4a’O’ vJ Î@+÷c‡'yTÏÿî²o&Q×öý!³ØÀB-èíy/(#VÊ ï#*Çû7Þ£t²Ôõ +–¥n…ÊR7Áͺ¨¬ä ŦéA€s&ÃþˆÊ±?ÅuÙÏ°Á‚ŠÐÙ)B“ƒŒtŒø‡ñZ@ÙJÖ†Í#  Ô'5d–AAHYhZZU BwWÛj*Qýau¿}ÜÝo†u"ý'/2]'RŽ.$êD¨ÍI'ÄN“‰$tp)x<å ô ÝÐt¡€Š xwÂPÖeVŽfZ<0(ÍO$šJzA!ÓZgHQÒ§°ó'=*D§Ê[~Cdy[¡r¼M`3à-ÊC'+Ÿ ±7I‚§ëŽ£Ü¨ ÷SX‡ûþBØRAuèÌÔ¡©F: ÷Ãs•¬Bå*Y›E€Au¨Ojˆ+Ãêðë÷Ӆ·«+¿ûÐCka™Žˆíãíöëz»ú_µ[ÑÕê¿W_×#ÒµPçÔ+HGsî4JG(ÍkŠ‘`Sw*ÌKG’ã†'yP… ¡â}ïNE X:’ ØY¯ûg¨Ìô"AÝ´ŠÑ~}üé#(CúÖ!=ug½MCéètœµÐŽX©3¼­@9Þ¶açï¬[ÂCåèÄ&MtÙRP⸧~e¨ŸÀfà²_­¡‚ÂÑYM+šZÉ#–‰L%«@¹Jֆ͡]ÔŽîOTëF{eeP7’F%®î·»§Ì¦ÕR 8Õ_ ’¬(ƒJ*AsR‚ Ðk«]*ÜÔÁR· ~EZp Ç-( "(øÿþã¢g¹YÙ!»¸$êAGa>ŸÂ|áwÏó ìG™Qyæ§È.ó9î]šÐqܶ€2´BäÈ[¡žAÞ9·sŠNWšì¼%‡Êë{2£ü¨<ÿSä œ7N+BuèÍÁóÎU³óŒJÖÂÍ¡}„{W÷iC ­eXâÀg íîªefO›Ç§ÝÕ¦oÇêÖÔ£a Iø|Hû
+äY2‹jHóšM$œºaS¾'- 
+½åã‹ëÇ9Qã¤OQ3`=jB'KÜêÅõâV¨ qÔˆ‹ŠÐÉ*BáÍò¸_\?Îýˆç~Šêrß`Sõ ³Óƒ&˜øâúL%«P™J– æ`P êUƒjmeP âJÁ#çQ z\o32¶ìø:ô[ˆ¦… ‚æ$y÷|?{ù!?âÆ}G,*PÄÏÿá²o†PÖvý!§Ë:«¸K5jASXo¦°^PN¨ß&q”ö•ã}Šëßœñq£ê“õØ~ ŽyW:ÎÝ
+•ån‚›ÓÆݪOXšìºý‹ë¹fúGTŽþ)n®7¬FQèõÌqÂd®gQÙz–àæÐDÂ=«{U¡†Ò2, Q
+—«èr}»[¯êEdé{Ïúu"h²@¦Ä+èDÔwëêD¨»NÄD]%<gýa@kK8§àùÀFš²÷Ýg½qµò üçe¬Æ†<ìƒ9-þãó(55p9N´ó“«s üsAý7'­¿Ì>6¾-ëßoŠwŧ"ÞKZ o••H
+U†>_¦–Pc]«L}ØUþž}i\ˆTÜOàu"P[Híß-Õ)¾iâW~ï= >q8Qí-Õ)ui„
+/ð»µ)M¨+»Fñ‚1ÁŸVåªÆÄl×VÒ{ š¾b¸è)®X'÷Í´xbè+¬´DÓ"ïÉzz{Éí÷”PZŠrî{7½w~ûi¡ö‰ž=9zrôä¸CÜY‰ùèŒÑ£3FgŒó•ç1:…þý9úsôç8‡[1p`àÀÀßkô†óö#ðƒó˜b@–¸¬äöáÛæjµ®v¤ý¶Þ=TsÒWíÖ¿>}]¯’=l׿]­ž|òðt72,u9ît¦(1÷'Áé3[–bß/I|É ³˜
+\(páPýL†ê1¤aHö'».üHP0¬n%ÝCIbW&¹6±é³‹!m¶ïñIá~ZÊ~ºG˜Å$³R¸cÄ/¢† q9-EèrJJ4øárñ‰í
+
+endstream
+endobj
+753 0 obj
+<<
+/Type /Page
+/Contents 754 0 R
+/Resources 752 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 734 0 R
+>>
+endobj
+755 0 obj
+<<
+/D [753 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+752 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+758 0 obj
+<<
+/Length 2871
+/Filter /FlateDecode
+>>
+stream
+xÚíMsÛ¶†÷ú\¶ áâûcy{Ó¸ÓE3™z¦ÉdáÊŠ­[Nd7íÏ¿$ QID&=–ÓiKY~Aâ{ÀÇÀ!­n*Z]Ìh8~™18ÒŠUZCMe,'ŠW‹ûÙ‡´º†_ýZQ"œ­þ©…÷•Ô†XÍáñ]õûìý~ŽêÊpCŒeCmÐJI¢dhá§ËÙÞ:Q9â4×Õå§ÊPB­¨ŒtDSV]^W~¸^}]=®Ö?~¼üuöóeë}93Ä9~üÓäÛˆÇmÃRÍme”"TÕ ©@uQÕÒYݶ‚ÆýÓÿRb”oÔ.f*NœµðÉâñ#üÊ÷tÆ$aFWÿ|?Ñ3WÅão úeðó¼C3ßk§-š'-ÍÛMu‰n«ÙïÕö+y_œ“ìåÕlýÌ/N¯vÜø2?xò®ã 8þ-æï1ï}“ÃÛ~bÐ: ÿµ/î«}kµÜ=‡pµñïµµ¿¹ím\2¢%<0²†©ÓFÌ„Š8cê`Žª(ª£ùÏ?cï‚m_m½ß½WÓ×ù¶³¹ÖÜ!ìQì}ûõÛ—ž‘uýÿ¾ìÑJLÚÐð=§z²´_P¶¢Gå#JeNÁ¥€f6ðŠ;ÇÎ9#ÜgÛKï³Ï¶Ãsè¹½8¾íÐB£?‹í…&œËØ>ª2¶OeØ^Hb¸˜Þö¼r¤ëáµ[ß7ÇÄõÍ 3+¡#uŽŽ?„±©þúâs~J~{NÎ5œ0unP圛ÈJp® Ršé Âò£¶†ŒÿháQbÝÝd¢E3ÏîO͆ŸM“v‡þœÒ¶„³ËUn¶Uó§2œ­ôšfV·Y_ÆN¯'Z—!\ALÃçýÏÄãÂÏbâo·W‡úËöõÊ@]/èaÚÁÖ«Îiˆ‘rƒP¹( ª\”%²2†.íÑQö¥Ç$‘LÕMHó<T3]#œAÊ°œpê¾ýÓ´Ü“:Îá$îK/Òà­ƒY®núI†©‰•üH¥„1Ž$IPI$H á ™
+š Æ#‚É\U6Ê] “£iYvSÀ Q­LEƒv˜¥Ÿ SKhÐfuw·Z!!¤bz$¤áã"!DB ¡9#Æ0càƒ+Xݳô)è–€8·l
+¢š³[
+!Â’Á]%ƒ¥56 — Ž¢&û÷– nµ…Eø
+rÉàAÛGUÆö© K#zù’ÁÃÎ ªœs– F&t%ƒÍUó§2œ­ Â’Áí’ÁÃQT¹(KdX2¸TÔB,ý<ˆƒ¶‹„þý|÷ð¸úº È6×k¿hÈ;ÈŸhƈS*ÞlêñóÃãÐî2á»!í #è²dÉ’£²ÖIcÆ•v„©¸p›‰þE^Ea1é›®Em]úwßY,Ú‡èèõ}ï—
+“1} {>`yÄ@/èZ3ʵF¯—Œmƒ*ãÛDuh\svÆEt²htÆ–Âÿ=:7O‰ªaï§*œ§ *2§ë*2™ ªL%ªfFÈ€zЖ­ô" ®aŠoÐru}ZÝÜ>-7H¾x!ØôL.`t¡B¡²
+i%Æ"rÆ'ÕÆE!"¯Š¢fxÛUˆ¨-K7û¾bµGÄBÓøž«DÅBf|Uߧ²Cßs,Olh¢”í«);™aëUꉬ€”õ©OºÑÈÄíË)¿¦yÐýQ•q*+ qcyjäCS„™“¤N¢ƒQÖˆrA¶¯*ar„¥©;áP ²ôÓ!JáíÄ–ýsµ¸]3z ^€Qù.!*k˘¥zÜýÊ,±u,3A˜íÝ2Ö¨¢¨Éüt”Ú×¥«C}g±Ö#ò I|¯ÆÞ¯ŒY–ñ}Tå|Ÿê}¯°45ò iR¶/äˆ;·e»/+ _ãR¡SÞ/62kûj@RˆŒ÷£*gþTW@ÖÆÅBƒ&3Lj`&fA• ³DWÂäKSwò déåAL*ø΂[n®Ö7ÍR¡ûåý_ËM¬PÝëßö£"ˆ:Ù,Mš1Eaê‹ûɆŠx»â|¨çÜÚÞW¢fÊ’zTë½µ=¨¢¨Žó‹ÿþvÑyoû–08–¢FV4•ñõã{ºcr¾¢¬íÝ¡ë5¢FR4MÆ®ïEï Q;7¨òÖM„dl¤E§L‹Fæíúfô¾õ ý£*kÿTX@êF\„¸h‚8ó7£—:gA•³DX ·—u£ké%Fšá^f7_—›õýrýQÑÍÕzõx5|»{˜J*¦¦'ENc‚"E%"I´UÕ‘Kê³¾?!÷zïu߈‚¦ Þî0ÛSíMG±¢#2¢I<?®µ¨©AËGÑ°åÕ¡å±ø4ò¡iµ0þ®x*ãÚ Ê¸v_U@¢F4tºhhlºö·9RÖ?Š†Ÿ¨Î?]#B&4>ÀdOÃ3D™
+endstream
+endobj
+757 0 obj
+<<
+/Type /Page
+/Contents 758 0 R
+/Resources 756 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 760 0 R
+>>
+endobj
+759 0 obj
+<<
+/D [757 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+756 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+763 0 obj
+<<
+/Length 3107
+/Filter /FlateDecode
+>>
+stream
+xÚíËr㸆÷z
+.gBp¿l;étj’N•cWeÑÕ µ¤´5cInÙÎ$oŸ’ HðÛ”»%æLÍ -ø'‚ÿ9
+¸°Äúb4$©|-yŒC*âŒÉc<¨‚(ò×C WÑé ²«ã—W­MxrŠ°/:²«úþÕîíS²Ëÿß—>j™É@:Ê8×'ËKÐABÙŒ¾(!Q¢(s
+¾Ø+Ts€=>-;çŒpŸ…6Ý&Këñ9TÖäÛ-Túî;úÞŽñ½  Zm¾ª”ïc]Û÷öÒ|/$1\œÞ÷:ê…¶‡}+ãÛÈöÅ0S+¡!y–ÊÑ)ï¾PæÇ¡è÷·ß׺£R¶ÐŽiRÖ-UIëFº ¤l!ˆôýsjëÂAXþâ”­áã­ü)òîq>QÏ£‰Òæìl¸4NÛúKJÜRPCß°ùKQÊû‘lYû­f+0ã°òÅi›õ%ìø‚¢vÂÔÁ<|Þ_¶K?‹ ¿­.-ÚúöËúË@];´0n`m¯ÛKŠ1Lj`2d¥*e‘n
+“#A¸´/³oõ4&‰d*¯Bš×1œÓUÂä Ë ‡ÁþÙGS³ Lê8‡“x„,½œH; !/Ür»ùu±üm³ûÚO„´áÄJþDˆRÂG"„DhJDˆ¦|òWœ¿’IAò« êç²¢ Éƒù/-Ô5ó~ÑÎyÕP„Aƒ~”åUÄr›ð|P ›>VMÀõˆ‚ÎÖ¸FÀ$)iÜR•0n¤š‚q-ò†2c¼/\l€Ï‡½TÃÞUm º84z€‘BIËT•ªDEªi 0§ä@ÚªåT$èWúIp0¯,ÝòÛfµ[Üߣ ¿¥âô(HÃ@DAˆ‚u  ­8ÑN ¢  É£ù¯=(¨V¢ DA猂=TæUˆ‚½=
+6n©J7R!
+Bt(hÐûA5ìýX…(Q¢ :
+²R•²H…(hº(¨WzQ²0¯´¥[ç@ÅÛcO÷÷ûÃc?RpÅä­tr(¤%¼À”…
+M
+ ¸$ÍŸ U¯eB¬xbS9ׂ®
+ª Êûo×m,Ô”5Ǽ©óª­Ï̸aÀ škzA¡ÑZ'LT ÓDzË7=R¡sõ­¼!’¾-U)ßF² ø¡ÐÙB!Q¼HþzïKvýÄqÐûA•ð~,kyŸ9œ© º8*4v€‘NÂñðT•ªTE²I 0…º P ®ôC!:@¡Ã×u„Öÿy\ïª%…vûÕÀ‚BŠZˆ+õxH(ÂF<„xhJxÈ'íâ6{í‚B7!Ó(ÉaVdúÖÊEASŒïÿÞ^N¨!kŽEKçUS/ïVC>t&|(wæ×ô…P¿RÊ íƒ*åûX×6¾¹4ã7CFtF[À|+_
+kØ»¥*éÝH7¤ÝÀD 9ÑYq¢Ñ©[
+?ð°„ýƒ*eÿX7Ôýfs$EDŠÆÇ™ã„ÉÔ•AP%ã,ÒMaŠT‡E WªXÑ‘´ô²"i$q´´ËÝz±Z
+:´/·EÙÃí澟I% 2szV$-Ô¢ ²"dEÓZ|šI>–I IBZãD?,òª *†„?ý£‹Õuñ:s¾±—<õBZt6‹Oô½_.ÚJ™ð}P¥|ë&à{| èl­ë'\,iÝR•´n¤›‚uñ™¢3^|šI6–Qgûc]Ûý ',ˆŠ.pý鑃Œ_1Ú¿Ê<e…(dMÙ4F\|º‰j¥ù©—.Ͳ]lvëÝb·x~Høê¥}&ÄtŸE&„LhL(¯F9I¥w® Öe3KŒÖ´hf\V4ò*Þ5ƒ&Zú+ƒí±6M £Vg}ŸCÍËã.pR-gü¨©
+Â÷øÇ š—µö4›4ïhÓ<nDA­YóV3:Jú[öŒ±©R+ŒLŒLäjß…«apap!ù;_ò‡ñ‰ñ‰lÙ$&LøVf¡™d/BZ*J‚º~\ïû»ý×Írq7
+šb$øãÇ6jÈšAÑR\ñÐILoÆ-â˜t}P¥lëÚ¾7¸Œ;â¡ÓäkOthô­[ª’ÖtHÙˆÎNÜé0? º?¨RîuH܈ Ì%þ´&¬T%Ã,ÒMa~„€¨U”¥—q¥S<𡇇ÍÝ‚®‚žÁÕ Ñ”#B 4 ”ïˉ–Nkß*ÿYK„uѨYs'«Òí±ˆ1"©“yë2ÈÕÚ(H-%a¿|4ê¿k= ŠK±#æA+ãâêEnи\ú¤` @G¾‚‘ƒKšŸÅZU5 ÑOL¨&¬z¢fÿÅ“ü™šÅêß›‡°®ùb·òÅŸn0S%{xº¿ßû 3Z,Þ€°PA,° a¹t þ”ù;¶š@>–*³„s
+iêàÐ>NEEó:¾â’QÆ*aÑ€ãÀM³_½Nú·p‡îÑùEiê¹ þ““ÖDZ€Ö>Í«ßßfﲫ¬v, ÉÙ½?
+K¨±NÔÂÿaåÿêjW™ƒ •Šû§O•ù[ÀBjÿþ@¨©*ñ#•#vS5üÄaGu¬©*©z£°tQh|7ø·ŒCUE¿›ã†‚e~RòVUšÐ쪖øØŠCW7\wtW‡¬ÕúzY8ÆV7tuVÜ£q—w4=>¼èð;z(îÅV?wÛÎ#¿ÆûéaîÄ܉¹sš¹ŸþÃô‡éÓßÿkúÃ'HÏê¦fPÌ ˜Añâï’ý]2LÕ˜ª1U_Ødÿ„PÇmÙã½ËÞÛ²L10 oß–}xúò°<l¾¬]7d×ßž6÷Ûõnè–,¤rY<FÚ[²LQb8®‚€·d'¶J¦4fÜ*Ž@8à QÀ™ë_&Ó«‚¨xáéú}×2™u]¼"Žoì‹_xÂÛix;íä¾÷+[*¿>Ó ïƒ*åûX7ßã­³µ®†Ók’Ö-UIëFº)X1ö¯”)ÁŸ#B0š'ÜT)÷Ǻ¶û5NXA^àJ™#¿¶¥–*f¥*f‘nƒ .„Ðj¤¥ 9¨rÔ‘mÿRâ¡}˜@*¦Nˆœ"Æ*äCȇ¦Ä‡ 7@“Çð!ÉËÇ
+ Ïöà¡RTjÊQ ‡šªæP4לB6ôã=/À ŠŠaÏÑ°ç#Õ<\è m+GÙÖø?Öö-E Û6UmÛJ\™ÐÙ$l)8)Þp~ ;?Rá$yÐxÐøslä!VŠ!ÖTMaNô#YP˜GsDÅ©’5Ã#þù0˜ðVž*aóS*„Sö?±du÷
+endstream
+endobj
+762 0 obj
+<<
+/Type /Page
+/Contents 763 0 R
+/Resources 761 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 760 0 R
+>>
+endobj
+764 0 obj
+<<
+/D [762 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+761 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+767 0 obj
+<<
+/Length 3060
+/Filter /FlateDecode
+>>
+stream
+xÚí[“Û¶Çßõ)ø˜<ÅýòØ8­§™i×ÎôÁã‡Vµ5ÕÅVÖî4ýò= Š/°–Z›BN& w¹B ù?àO @‹·-ž/h½ý°`°¥+´ †šÂXN/V»Åë7´¸‡?ýPP"œ-þS
+w…Ô†XÍáçmñrñâ¼Gua¸!Ʋ±2h¡$Q².á»W‹?ýՉ§¹.^ý«0”P+
+#Ñ”¯î‹×ßìŸÖ»õþáÛ¥¦ü›Õaÿp<lë_`÷qýí›W?,þòªU!Î qŽ_^#]¦°m
+–Šhn £¡ª,øCªçE)]”e+(Üïîý—£|¡~ó|ñºàÄY §¶oàO¾¦ & 3B¸ò÷ü[Î\¶[_Ô)Èà÷efyVN[´ŒJZ¶‹ê½+/‹æ’¼(Og–µüg±Ø?òbÃíÕŽ*ËÎÎmϸü#–½Ÿ±üî¿m?1(Öÿµ^íŠskŽ•Q»{©‰õqL¤“ÞÚŸ]vS
+¢2ÌÿþìYä&Ú"öâôaUe—MmSgÞ¬"ìEgö¢}|sx÷–ìËÿ¥Vf2PÔ¶p¯¯–—à e zQB¢DQæ|°5V
+(æG¼>YvÉá>ŸlºKîmÇçؾ³@~×£…B¿û‚¾WS|/(# <>îû Jù>Öu}¯nÍ÷BÃÅõ}oÁ,ÚŽmŒ_m#ÛWÍ tJ¬„Š”Y:üR·Nåå û|;ýýÝ—µî¤”-´ƒÜ‘rn%J÷\–A¾‚Hi®ï[8 Ë/Î×þ1þÔêŸ"ãž:í$šØ{Þ5ßçìý-em)(‘B$¼T)óǺ ²öSõV ÇaåÅi› %ìø¢õÂÔA?|9¼'lW¾þÚ<ZtõÝVí–‘"ú©a\ÁÖQïn)Ì#šéD˜Õªd˜Eº:G‚pi/³íL&‰dª,BšÇQœëÂä Ë §îóϦeèÔ•Ï'È2LŠ(´…²E·›ýÝÃæ°¿ÛzÛø»ËqªvÓoï׫ÍÝvóûú¾âG÷›‡az¤ 'Vò' GPiÆ8Ò#¤GyÑ#-YÙP¨ÇÓ#g}CA¡ãAÍ0=òª ªŠ—¿ôÑ£¶.n(|e—Mm‘!=úZ¾÷¼GH•ð}P¥|ë2ð=Ò£ÙZW;¢XÒºµ*iÝH—ƒu Í Mt¿G>Ê¥:,A•r¬Ã ¤<
+Qæ ‡Â£Q"ÊjU*Ê"Y#DBýH¨EX‘rðØ 59!¡÷Ûu5dèxXý{ýÐ7ºh{÷q¿z·>S#OTNËëS#__.$R#¤F7M$„5¦ÌÆú•åhÙVåˆ$UõÂΪÒÍל1vv\T&“¸™–Ä ‚ ÀÚÁ :ë‹8 ÁÈ|ÀšÁ‚ Œ ŸZáÃ`;b¥`áx¿>VXáÓfõ°Ùý6¨»«'`Bî4²dYŽ8QnÚˆ%9±j|ÄIÐTxù—'­’z¿À¬jz{ßá0$sròXÓ7CNF]T ÛDz¡oUnÈ÷gäƒ!ú˜Q¾nÆœŒ[·V¥¬É2HÙgh…![™ç “Ǻ¿t2êþ J¸?–e¸‘Ýà “+DYt2eµ*e‘,‡îNdÓK†Nˆe I#‰ o­íï>½}$•€cÌõY4ÎY² ÌX<\iB¥~,
+bD*ÈkÒB «Óë„Rµ9¨‚¨ŒäÿuYй*Îú~ž´¦ª·ÕµÒ„1‡,h6,ˆi7ÅõßXoÇQ×Õ¸ëcUÇõÚÝšítmÛ—(ˆváò¹á i)Ûgµ7¯&’ŠóÖª 0o¤ºý”ý´Ãl–—›yЕ“·„[L}RMÞA5ž¼cUÉûÉú,zLöF&ô•˜ÐÔHs‚8%-MP·4±*‡nê‡BÒ‚^™q(ä{`PÙ
+
+îן·ì•ðŸ!íð!®à"ZäCȇòâC‚éIK?'=¯¾†sL ªTATFõÏúQ[7¾®8 ¢¯o{Ou´I¸¾%L©2ð<¾$5[ÛFà!-aÛJ”²í¹*ÛâX3¦B‚©ióƒO}Rµ~P%¼˺æWØOÁQB7H„&¶/žâ”KŽGY­JEY$Ë£‰A$Ô‹„Nxe ëçá í—oŸÖǽ_ ½Ñ«ÃñíÝ~ó{9¥q…vëݯÕ45]m¥¸¸Üa%ÅeWåsQ”€ë!C…(*·ØÝÔ5´¬¿!Â@9²;¨‚¨j|žÿÔ»{K×]lÑ]Þúàœ:È¢ú|o§®¡ÅŒMø>¨R¾u]ßÛ[ó=ò¨¹¦ìrÕtÏ\Æ­[«’Öt¤ldRó^„ÝN]C š¾qó×¢”÷#YY‰©+ÄX¹fºLY­JFY¤Ë¡s„HªIµ0Ë0’òQáX¤>®¶ë»‘I¹µWMe bÊ„<yPF<ˆ¦&.œåß2†@æ~7™TŠ‚¦JüÝqIg¢ó¬_Õóâ9ò!
+ººåUÄr›ð|P›>VeàzA³5®ÐEJ·V%Œ©r0.b Ùb o¨‰«f)¸ ,áý ÷~¬êzß`W9ÐÍq É Œtª\€(dµ*d‘*)P/jØÊ âJÁ-¯Írx¿>–ƒF&´æÂÏÊ®‚àÁ…hÊ‘! Êkd`¢ü@>vd«ÆdsxT£­éÈ¢‘A•*ˆÊxþéç—Ý‘AçºøK
+¢2–þ[w€Ð¹,þFÀ×uÙT'.B"4ÁörŠíý¨¦yÂöA•°},ëÚ^ÞšíqˆÐ\¶Öã¿5K8·V¥œÉ2HØ8FhÎc„&¦íêùG&ÌT óDz Ò6Bt…(s~µ*›Š²Z•Š²H–Cç9ë…A'Ä2ƒ˜7„7 w÷cï‰1ˆ+Y :º. b
+þ9¾)†,(ôÁ·‚„+E}È€…¡)*kYÊpeý×— jiMa‰0Ò@F‰£šûï „2~Ú±ò. í¤‰—AäúIP(41L€‚æ´ö­ µ~êúòt«i²«ÐàïFwA5¡P5¸\Ò¯(Beï¾pheŒŽrÌâ›<!uÙ
+endstream
+endobj
+766 0 obj
+<<
+/Type /Page
+/Contents 767 0 R
+/Resources 765 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 760 0 R
+>>
+endobj
+768 0 obj
+<<
+/D [766 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+765 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F45 438 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+771 0 obj
+<<
+/Length 2738
+/Filter /FlateDecode
+>>
+stream
+xÚíË’Û6†÷z
+.“Ü/Ë$ãqUjfawWeáò¢K­t«¢–â¾”kÞ>$!‘à­&é“rL‰ú‚â€Ï H³»ŒfïW´Ú~Y1ØÒŒeZCMf,'Šgë‡Õ§Ï4»…~Ë(Îf_ áC&µ!Vsx½Ë®VšE8ª3à 1– •A3%‰’U ¿\¯~ú·™#Ns]ÿ‘J¨™‘ŽhʲëÛìÓ7m~ü|ýÛêÝu혜â?ÿ 4ú%ÂöX°TDs›¥UEÁ_2P½Ï
+éª([Aá~wçJŒò…úÍûÕ§Œg-œUØ~†|MWLf„pÅûx[Î\¶;_Ô)Èà}Þ¡ÉåÔEyTR^/ªKtŸ­®²ãOò¡8‹¬åïÙjÿÆ.¯vÜøSÉ[;w?Àù‡È;‘÷¤ý§î'¥ÓêÿúëõCÖ´æP•»sIƒP…X/¬ýê²pÉ žåFCÆ0EÊ(‚PgLÈADE$ü9Äñ)Øš2(ëÃéXe]óceS'Ö¼!ìY'ö¡þýã×ÛWd_üÝ—=j‰É@PkØÂ¥ž,-Á$”ÍèYùˆE™Sp`k¬PÌ#|ãÓɱ9g„ûL{réCro=<‡ö5âø¾C …þ2Û *ˆ6 ×W¢„é#Õ</$1\Lïy F9ÓòðÝ£éËmdù²….‡•P‘"A‡7UÃTü|aŸo‚¢Ïïçd[È•)Û–¢”m›ª%ØV)Íô¶…“°üìT­á?ãO­zùöÔ¨çÏÄÞf§lxoœ®;ôÿpÂVcœ/ôÏ|R´~P%¼ËÚæWØO)Í} Èç&mÖ—®ã‘Dm
+4ª”©HÒ ³ô’$ ÃDÃJzÙ½ùß
+¢2ñ·hP¤j¦ý²ªg?Gï~AÔåz1îéÚª(bØõA5ìúXÕv½˜›ëq¾É¥¦ka Ü4O·R%Œ©®qÌå‚ ÑI[úvøÕͽTÃÞU HÚ879ÐAæ4Œì]*È*U"È"ÕzF8c¨øJ/b’.ŒºK´ßþ5t/ ƒÈ’å¤iIS0ôçx7 ’ å,‘ cPÊkó2¹VoÔJ
+!üngdu»¥ñÏ# {J]Þ!Ì;•HnÜ K‘´\ì³h4$#sY#½Š$I’‡7’‡Úx¾—<8(RTó•ž/ûÛju›ýÝv×! å#89ƒpŠ«A ‚XÖs›5E8(ÁúëÉÎößšäE•¦$ÏÿúØugRM?›M°óÉ3®1‚<£ÃòÐzš‰Âˆ6fØóA”ð|$kyj:3Ó#¹ÐTí°l¥Nض¥lÛ”Í?U#k¹äG5LØþáÊŽ»açQÂù‘l Ñ NB™ Æ#–‰DŒU¢TŒ5eKèý?IP™'sbåµ’5 Ãá"Ê}ïÇ°êZIZ\ªP \²¿˜R
+endstream
+endobj
+770 0 obj
+<<
+/Type /Page
+/Contents 771 0 R
+/Resources 769 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 760 0 R
+>>
+endobj
+772 0 obj
+<<
+/D [770 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+769 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+775 0 obj
+<<
+/Length 2509
+/Filter /FlateDecode
+>>
+stream
+xÚíËrÛ8†÷z
+.í…0¸_f×]Õª®™E&žÊ"•…FVÛ¬’dG–“™·Ÿ’ HH$$SNK¬“JB‰ú ‚ÔÀO H³‡Œf&´Z~›0XÒŒeZCMf,'ŠgóÕäËWšÝÃGd”g³…p•ImˆÕ^/³O“í"Õ™á†ËúÊ ™’Dɪ„_ï&û̧݉¹ÎîþÌ %ÔŠÌ(E”qÙÝ}öåæåy1ÏgËÛ©¦üæÇböü´~)ßÌÖ÷·_ï`Ù”1â”*7ØÎæÛ|þâ?šüvר'g†8ÇO¯(Î^XÖKE4·E½©*
+þ–êCVH'EÙ
+
+÷«þ¥Ä(_¨_|˜|É8qÖ™˯ð‘¯é„IÂŒ®x¿‚÷°äÌea¹ôeA‚ ÞOh¦­rš¢iTÒ´YÔ!Ñc6ù”Õ§äcq8YËÏÙdýÆ“ _¯vÜøC™î­\8§ïbzpÓÎìÿmú‰Aé´ú×|=_emkö•Q¹ê`%„7‘NzkÃAWv]
+DP}õi÷š°œûNø´¾üØ×￘7/jzŠ8´aO ã
+6¶z¼¦xsìcRñV©Ž·hƒ1ô›áÒžoßš¹MÉTQ„4o#Aç+„3H¾&êŽ?š†o ¿ÇýçŽÈtÒ&í$´Ž¼¢M¯›ï‹ÿu³#m8؃¿;¢”0Æ‘!;;òzK8§×VÕƉ¤Ìp_ñ!DÑL ƨÜ] 1HFfšX* ¬ÚE_c[Q„;èP¤/F_ÐdHH® Oa ÂÀ€ø©ŒA»s@†A¥œ‹2ì®Ý»)ƒÿ±šËæ•0¨eñßçåS¾mó§uyðK*ÎO4,¡¡Aò€äaL£VñCCˆâü¤¤¹´"¤hHwZq¢]× •JDExßý¶7T%’µ‰sQÕi]W„3þ"Ó
+•Ö:aú J˜>–]¿é‘\ªo ä ‘ôm¥Jù6’À·ˆ\.vP
+ø :{¼/ý·ë;Ž½Þª„÷cÙž÷ýŽ°§‚çʆ¢ m`¤“p<<d•*d‘l ¢¡Ch¨W:ѲЭ´õÝK›‡Å¶ºÁiþí5Éû¹‚K&§åù¹r”p!‘ !2L CŽAS§œ3¢»ÁWQÙøሿ‚CMiÜøúžÜ˜aíA:4F:4ÐúžèpÃÖª#¬KG`}dDïè^=I™2o):Æ»må¾uõÕY1Ñc¢¹Û“ÅSÝ– :Âÿ±»-ˆŠÆŠ†Fš“DR“Š´JuL¤EÒ1ô’F êÒ Œ„"v7–È£Å}‰Œòõ}þ=¿ c‹ž6­)r*›=mfëü%1âHQ ñ§Þ,Aý¹ÓH–,kžgìîv×7%™r‘’œ×=Kh*IÙh|885ÎNßßê«yÍ÷“3$J33Žó÷Q¿Ýò~
+J]¿çƒ(aúH¶ïzsÕ³á0„I”«ýÌ5ÌçÑ^ãV¢”qÛ²¤ëIbˆ’.lœIÛÏWÃ5ë÷~%¼ÉF´ß­«‚éªæ¾dÎOî—¸¢Tµecè5ùà oj|´C+øHZŸIÂx£Åfó´É_¶5/*–»ÕfX>I%`wæüøÈ×_(ƒøñÑñ‘âl>’Öx0ÑË‚¦¡ú¯€Ô(êÐ%IUU¼a ÒÀnÒ›M_¤^×UÊö±®£§tM¾ÇñH—š¯k„ÔoÝJ•´n¤AÊÆñH—‘Þìþ"õº?¨Rîu#HÜ8 1ÒÂ,`¤þ0«TÉ0‹tcèáÌɇ@R²tƒ$ßûÒ•[¶OÏO›Ùóc>ïfBÂ/í;0!®àôYdBÈ„ÆÀ„Î"çg›“Z±îiäZªÆ¼u†KYI`C¸`â*³„kÊ«,Ï! wPš3ÌøYú3JÖï᢭ÞdŽ“8"õA[#ÔÔAg"³-³As#’A$ƒQ„“]ö½_ ˆÑÉ\„V„Š¹¼nóe¾íyZ•â´:‹[üM²I†¸qËX†àpÂTñ“®roHxz;ò²è‚SŠ‚¦åïO
+ÔµA{YÏi]QD1ˆbþ*Ë êoF¶ ÏU¿écÕ\¤æbkt’’Æ­T ãFª1AΞñ†2C¼/\EX–ð~Põ{?Ví{ß`W9ÏÕ ½ÜÀH§Š™yAV©A©ÆÑÀ :„p¥ù˜p¬tË÷ü~ñTÍÿ³š=,6=Hˆ[{ÖœV!¦üF„]?ª÷ÍÑ”–5 ë  &Eyþ¿Ã±±†+¤õ†µKŠšA®„†¸¬Õn|sÖ1gwO†„£ÐÜyò¯%e²)«J-dmŒõE0¨†‰Š-×ôÀIœE‰ÆN/=^ž„¶Æ©§‘6adàœÔÈ¢.ŽEaâdÕMªjèÓ ª¸R„)^‚ªùr™¯JTµYÌ7¯ù¶UÁy‚ŸUÁ¥ñWO«Vjô’åyEPß×ð—ƒ\t _*UATDöçýñKmUüƒ…¯*>qÔY\φ=Ô Z(?oV¯ëƒªßõ±jßõ Ÿg†˜Î“®ý #!dʸ•*aÜH5‚tHé’0 LÚå¥Ix?¨ú½«F´á
+fn˜ø;¼pbïƒ?ˇ’E¼ÈùS=»êÖ¶ççE¥jíÎ9“:¨¾Ï–¯‹—²Ô|].·‹r;§d·!86løÏ|ùÙúþÀ$tà% ºùÓj:R¸9vxÐá‡Ì ò>1ÛHÖRC üíT`
+endstream
+endobj
+774 0 obj
+<<
+/Type /Page
+/Contents 775 0 R
+/Resources 773 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 760 0 R
+>>
+endobj
+776 0 obj
+<<
+/D [774 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+773 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+779 0 obj
+<<
+/Length 2858
+/Filter /FlateDecode
+>>
+stream
+xÚí]ËrÛ8Ýë+¸LBãýØf:íš®™E¦]=‹TŠ¬¶Õ%Ɏ⮞üý\IX™XÖ­r" :¼
+i¾i‹¾¿C’_"É‘ÒŒOrx˜VÝ
+hí;ÕžìÅ»ˆäu_¦š©‡=ÃáÔ¸%èÀc[€¥ñÜnŒß°¾V ø4ÆK\À¸Òù:ìO ¯þÙVßVC 6¾ýfÙX ˜èºp „qWa³u‘Í–&ʈ£ý±60—Â#YnBšç©OãQÞˆåy4xòÝÔô)}Wµ¡õ*\ZY¢/®ýòq½ìÓ·tAXÁÇ×·4„>F9ê[¨o½:}ËžØDØî&¾ã \nÔ2ÆŠQ^Hƒ
+zˈ!\ÕC»1d“¬Œ¤{4Ô„~݃
+b úsÝãóâñq³z;×”¿¹Yl·åûýêa±Þ÷ë!Ê2bÁúøzuÐõ¨‡ ‚zÈÓBûaVsM¤ŒAÅÉ£r¬Lp1šûªsØŠ”ÇËà‘9cŠEž%*€ò€òîçÿ„¨Q¹v„+n¢ê¢äÅ­KÛ~((¥ ”òdæË™ï[RkRÌ/QIæG¸6óå(ÌGã¶7! ‹'TŠ½•boŒ›*n£€s™ÎøÑ[úq˜Hõ[*Åÿ7UôFíµŸss4Lj–6åh%*éhn²nÊF=²Q-ºôÊFJZbLù3ÂÏëå·eÐV_þZ?<¬nÔ"®‰+žÞ¸j‘‚‹8—¨¡Z„jÑÓƒüáå 0­¿sN¬Vv&YB g2VZié[Ky>²£õ‡¼YŽó–‘yœSÞiÞ9Rgµ)Æ!ðsˆݧ¥¯ëÒ¶Ó‘Û]ëæqÍ
+Mè4ßÇiP£Bâ_&ñQÞºHy ]çÅv´PCe }t¤æíŠj| Q­¡MõŠjÒ x4ºÕ–›Õb¿ÞÝöëhð| ej|M:G¸Õ¨£¡Ž†»,=í‡Ê­IæÆŸ¦°ì¹«®ü¦yA,Ä ªú]å €ÉÇ?þÕ±æê
+Ñýîq¿é†Œ—˜°ã CÂ:"©Ea…!†ŽXyj‰°ÊÚêœxnÖ:ÃË».a,ÿª‘+\'­ReîuW€fØr¡KþQÂœã*ï2SὺN¡Oóp—½Ë>dYõ8ˬ²‡bGÙÔù3¸‚ãÍ5ªó8­ª¨ø 1Âç¶^ò:y]>¢ò¡}×B 2‡ÊFŒ<çyPÅèÑ£jÓ¨McüÁøƒã&œÀÉ tè^VG ßÝ=?Ó˜ô蟟áâR1=s³ò4‹íz·x\ßï¦i¨ñOq‚ir—U‡Ó48MƒÓ4GOÑsˆ×öÄ$Äh)!~pN ëûµk‰
+ <‚üÜZ¾¡gè‹ÂâÉ8Iðx ?ö<Áû€æ}ŒšŠ÷(Q#wsîèNžân‰Jp7BMÆ]Hqñî(ì—Â_¬ì¨aöǨsë± <‡òÜTnæÀ™tj`P 7‹P“52(õˆCµÔÒ+q( …‡[ªCÛûÍzXâ
+Ê¥Ç×…¸qDá‘«( ¡,ôÜ•´>yDÏ?rUkÿFûýoLÿ‘«@Eôÿï®#W›¸xw_ܺ´( ¡0ô™m&å)â $ïaSÑu!¤nØúY—àn@¥Èã&c/*C¨ ™S(»*ÅÿwnÔ†PšÊÑ#Ò¦F•t´7YCƒêP·:T .ýâtÂüŒ¥8´{\ ü°›9Cg(C.r¥!”†ð\ˆgíúªŠ¸}ÒŠ!ˆ£–û7ÌäcûV A·^Û,€zV •¶¦wVvôù7<â†ð\â'ßAh\‚ø‚* ´N¿´ÕO|>þ’!<âr£¶€ÎµIòAœK‘7Øš:j£2„gBŒÃ~É-‘‚'Ø/…"´”{3”¶¾kŸu!<â ÜÌñB\v³ü¬“r³ÒÖä n÷ש ÕRK¯(ÄòX"JQh}»V…¼ˆcÅøªtD‰ÆC¨
+á‚¡gN ("˜<ý´PçcÊkxÿq¡@EèÿçU—.ÔÄÅÁß‚ÀC/‚ùÐñã&˜_¢’ÌpS1× !{ƒ.¤ò}¾‡ØP)öƸÉØ‹Ê®…ÿ^ÍQÎ%øP)þǸsë· 6„k†¦r4lj¥©B@%-ÂMÖÐàš¡n}¨!ºôëCL ­vw‹ÝruSœº¹_VÛy*³rªüùà~õp¿\ïn è×o_WÛ~]ÉBH9¬ö “(+¡¬„²Ò›jBïœW›
+Â,8Sy×sA(Õ̇/ð '+d½G^S\Œj<gJC\JcQ ÕËÝlüRšW”"PŠxÁ!øG걯4Fåõ˜µÐVdcTÎÒ0ßlV.»‘<X‹0Àþ?HO,m
+endstream
+endobj
+778 0 obj
+<<
+/Type /Page
+/Contents 779 0 R
+/Resources 777 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 760 0 R
+>>
+endobj
+780 0 obj
+<<
+/D [778 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+169 0 obj
+<<
+/D [778 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+781 0 obj
+<<
+/D [778 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+777 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+784 0 obj
+<<
+/Length 2814
+/Filter /FlateDecode
+>>
+stream
+xÚí]s㶆ïõ+x™\Å÷Çe7“n’i¦Mã™^ìì…êUÖžZò®k'“ß’@ˆ,‘ܵä3³‰lú’ï9
+¯w¾,¨SÁïËͲSN,Z&%-ã¢úD7Õâ×jwK~©/çEÖòßÕb{âÍVàÇ¿”åÁÁ»žpü)–½çXžäð_ì'¥Óö¿øçëMÕµf®ŒÖÝ"N ã]}L±û·/wï/jɈƒ_27NuÆ]\B¸Q¸uF
+Â]}Þ:u@Ä+〈SGPQ;¾9cØ]Us á¯Me÷u=|$ÛúÿCé#ÊLÂÍtyICZR<G%$ÈΔ9'¶ÆJ¸¾êÞñnoÙ%g„û|»·é¦x4ŽÏܱN ßôh¡Ð7—é{9Î÷Ð
+¢:oüЇƒbU7ñ7•EtÑ8èËùÞŽÇAŠŠ‚ïƒ*ïûTuè{‹8èåã óñ®¡ze%ﶪ‚wÕlÞEô²qÐÙ¸ßCãÜTy÷§ª¹ÜD‰Ð¹…™ƒ`Ò²f­ªf‰j¶FfZ"¤ÝHhT)S1¡=jfBÂA÷R6ðvû¸Þþïö÷õ·KMù7׫‡õ!ÒÐâ ÿ;9!ÒRùÖ "$D'5šûº!hfô@ˆ$o¸sºðÂñ!@Äë+‚¨N"?~w@ˆš²¢¢¢ k꺯*"D_ÑöÐv
+Yò½  ­Š¾o ›ÛøHˆÐ¼5!‚>b¶d^#à¹Í
+›Ý¼ˆˆMbé;
+;×N 2"dDsÅ™cÄà ú>R‡mY³72ˆˆúQÄZ‘²Ð¿„œ±CD›û«»a2¤`ÈäÁßädH9J¸H† !z^ú‡~
+š:uüý¯oç ud釾®“OÓf‡^ßBC±ïå釔Ïzyã·ª¢óÝ\ÖïÐ!†xèÕÚ×ÏöÑÖìT%û¦ºÙìó!†€èµ.74A
+ƪ‚ñSÙ\ÆG<„æm¾}cëïPÌÛªJæMd³™ùò¡Iì/¹óK;ìTû§²së´ B@4Wœ9HE¢48ªRœ%²Ùš$Dý„(â-Äȇ…cÍ3ܬ?Ü>mž‰¸µ“fµ#bŠ(\¿"¢ÓZOiÆ®Ð=¿“¦ ‚k†Q£
+¢:ƒü܃ˆº²n+ÐÔv_YDDˆˆFߎ3¾§:šå¼ñƒª`üTvh|;‰ñaÖˆ¨^ñ0oÞVU2o"›+k#"BD4ý=ÕáZìTû§²së´ "BD4SI:HÙF–â¬U•â,‘ÍÖGºÐõ{-”RXmFÃÚñaF´ã-ƒˆˆ+aѮ߻¹Ú>®n·2×F;¢VÏeC\™ú»(‡]šuq®¥_üJÑí¢ O»»fúoÕ=áƒÔL˜Ì éJHdzÓ!ù¢ÆÑ~j9µ]㄃Á80TsBËIŒÓâˆéƒ@sÖWj([
+Q¾‹&8ÑŽeö—®3G#ª3Ç?þyÕ»Át¤;Ü?N! Âo/½ ç×[Bë’ó[UÑù‰n.ç#B÷î÷—V÷Uɽ©n6÷"Âï/MâÿzChm þª’ÿSݹõ[ á|¥¹ÍïmJ„ *Z¢›­¡ÁEnøк ò!+¡9m²þ´ºþo3ehµ½Ýä8 žxÃû¦ÅDÖ%R"¤DH‰ÆìF¸ŸÄmGØ<çh+Â>nFäæ2݈4…[#áÀ6©R‡ËLÈ_“¤!³‡ïGµ L‘Ñ0œ;Öa¾)7Ì6ãp)ê‘w(Fàÿÿ…xI
+endstream
+endobj
+783 0 obj
+<<
+/Type /Page
+/Contents 784 0 R
+/Resources 782 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 786 0 R
+>>
+endobj
+785 0 obj
+<<
+/D [783 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+782 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+789 0 obj
+<<
+/Length 3114
+/Filter /FlateDecode
+>>
+stream
+xÚí]Koã8¾çWè8s W|“×iÌ6°À;“
+9ÀOÞ™Q‡*T
+(;‹âŠC³ð^ž+ñ¢Zvš÷5ÍûÕç½Dmµ¡Ùb¶0mD’»*ÁݵTÌFi¥¡yØ/á òW iîG K›® 2„ÊÐR>æ4e<uUP /‹P‹e††…¡–Î2* )ßš—§ð¸ºßÊÒŽ›ÝêòÏÝv¿)ÿ:|*5zÞ><žÆKSpyå´œ_Fò]çB¢Œ„2ÊH/K¼LQU©ZôuLVl~ã=[û«lMsç§îÅ_Š\#Hω÷ä·«Û z('!—4¦˜ Ì2V^6ßÖ~pcHßÎÀÞ+ª6Gz{åÇ_z$ôBZnœï+sŽérª6Æin oxèwí­ÛHØ×TôPÑÄ!èâBŠ«F0Œ`97Œ Î}•:7" DWqI…wð®F<Œx?àÔ o
+V¹…x¦¸›#åNáݼ›ƒws^–ˆáñ\úD¡ÁÍ5„î§ò4G­åñ[˜‡I柠N˜ÜTܪ°ƒš:gŒcRHÞX¬m…ȵ4„õ¦MS› a3uCØlU·YjsJm¦Ê9õ®š¬Tw§jj:Œô«LfCc
+DÜÚY£Y­1E.Ó‹òÊC£ü?b… J:WÀV”aq2ãP:Á:Ìé(w ÜñN:J#E}Ý?ªPÀé Lñê œÇÃñTÖºWû‡)¥’¨l~©æçÔOÑQ«@­µŠ·(ÕpÜŠUJõ[+YliƒKK-gc•,%*€Šrû{¿¥ ëêÔegë¾b ŠgОŸE{‘Ï'hP ÚÇ°>íù´Gõ#vQÃb©6IêV¨u#ØBe¬`™…ü’;¸Îä òT‚ü1ì¦+¨ç ž³—9¾”º(¨”—E°¥RÌ;~ý¶=Gj©,ãÊÌ`9ô¤T†¶û‡]x êÑ¿Âe7.1c¡7bq(÷×òÅ!‡ðÅÛ¯yÙ``gªC ‚¸µ|Z
+ 2|S‡Z¶†>愯°>—øüÌE‚>4Iü€J?†êCø”ÓÕ¾ zΨ]+DÓä­P)òF°¥¢6JD×üZå9é_kD“ô¨ýcØ¥MZP$Â/ågA%šö³
+•ò³¶Xš™W&ú^õ;Ëm-µeT$bRÁ˜ÉJ$úÏvB¿’e1Ò¼¢S9Lqñé&…°bè¥+íRÉüÓ¬íRON¯¯«6yuôœZ!mùèk®O-Ê„Ðå«Þ¥áàÞ%˜ X3L-“1Ó¨ú`Q2edç°u›«,íÁy
+3X½ƒŽ„:çj/-QcT{q`RT«,=ŸŽ«Óæa»``n§˜š_qŠ«P~Aùå—7Õfºø™li*¸‚À#iž«±ŠœTaJÍýnày­¬«¹—]ÅǵP™™ƒôö<ÒC®Ô~~8Iú
+”"}Ö'½Å‡µða­™¢µE°U âP‚¸l¡hz>ª5 õýÛÏûSÔ õ#Ø…MTPêA©g™y‘tœ2)>VR>Ö…-5/ú+U Ø3 ¦6Êñ“- †;VŸ8jXõ’f)‹á aÿÂ)þ^
+endstream
+endobj
+788 0 obj
+<<
+/Type /Page
+/Contents 789 0 R
+/Resources 787 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 786 0 R
+>>
+endobj
+790 0 obj
+<<
+/D [788 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+787 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+794 0 obj
+<<
+/Length 3313
+/Filter /FlateDecode
+>>
+stream
+xÚí]ëÛ¸ÿ¾…ÐO^bù~ôÛ]q p¸¢½î¢] ÉÇëdzííMâþø)R–¨—r“½Èdj4Cg†Ã).Î>d8{u…ýõã+ÎH&1bšdJS$h6{¼zýg÷ðèç ž}v„W Âà~™Ý\ýZg!, ª‚kœ `Â=‡o¯þôWÃ2ƒŒ¤2»}ŸI‰”P™âIL²Ûûìõdûüô´Þì®ßÞþ|õÓmE,%I©Ž—‹#e„kɘSÄ0Í” ÇøcT¯2Gzåx `n‹[ÿah†ej/¯®^g­5+¯oá‘­é4(ÆŒûý¿áJ‰ÉÂuiyAüÎ[hòŸ*QqÊ«¬Úˆ²«›¬Tɯ®9ßd-ÿ]­NT¶
+evŠž?$Óm7]&ÂDõ›n 0݈ìb¦Ëçj|Ó…ivtÄ–Ò¦µÖ„‹»Èt÷ÙD5Œ”Ös³þÒ8j·Ð§¸ÝaüœB¸ê7ý‚dÀðkD/-Qáˆâã#6éŠÕñT¢2¡ fjF³ýä Y®3›À„§å¤¢Iß¼™U§*=,Ú^ì©a\ÁÊ[ipéò/cçæÓ@4äcu²‹ . ÅŽö²•F3…'ŽW§4ã1–‰¦ÎÇnM¥!°Ù4±‚®tAÒXˆ‡=¸›Îv‹ÙtÙ…ÉL*
+‰.½
+$Ò˜™•œBÁÌ
+U”P½/sµP{.áw4óU¶3U%·^¢÷rüï™­œ¯‹/*+x4ZTŒømämåy\ÕjYhNÞhpÞ¦–¼¡¼¼¡ß¼­Îy£eyÜö¼E?y¬Ã<VrÞÒš¸I@^òRJqèeÆ¡§¦X’bIŠ%£Ä’j— vŠF)}?3¬´ºVRØKaï[MÂÒOûOeé¤sGh˜C/Öx6ëõS÷6a!)¼ÎÇ_ã#ÊxZãIk<i礅~‚4¸µ[èìÄM’#®€‰PqݵIÒS"¿ÐoŒ¨êËûEe÷uM›ƒÓšÂ׳{€fbÀîU¿ÝÇT—²û„a'Ûu¶«€ó!ÛõT¶Q]Ìvfš6býœQès5`ýªßúcª—–±$Œ.at—r3#‘ƒ’úÝÌS ¸YDu±A&aBí˜PjéÆ„˜€Žðû~?Í7Å×ã¹Ät²~_\·þhAkÐaFÈð±ùæë÷žjºº/n–p·X}è–°G€– -MÐR‚–ÒY„'>"‘6¤ú hðè/ÐâÄ~± ¢ë ô‚*¹xò¯›[ûÉßi~^§®$E¥Gÿd‹$Œéû;•ÐÚ=Ó ¤v´ß<ÕQ7€Žÿù9I`ÓwÅ™SeCF¨3â˜úRQ¼:‘„:}¯'Žàl»©TŸªÃÜ ¦~qÉL‚ŸÒÉ…—ò7i&š<ªý-¢¾Ø°S…¡H:ðD¡ö¨L'
+ekbWò(Ôn¾Y¬¦›/ÝŸ sÁ„?:†Ä5p*aH CJÛ“N<‡„كͲÏO?ÅÐz[Îaâ(1ëڞĠRಞ¨ÚÎ.´¼*¬j§ØÊî뚶'¥íI_ÑîAŒó»gî!i°{ÏëÒvŸ¶'%Û 'ÚdrÀv!Ñ#rÀt«‹›nÚ”v'büöHAa·Mô?·3!ά?ðz© K‚‡Òî¤K¹™¡Hã¡y‡Ì‡‹¡yAàuñA&ýe‹6T¨‚³t£B6ù’ºèÀÏóù²ûTB™1Ëšë @BÔî>Ð JP‚„ ýö‹dÆtôñ7V„¨ö2 Ž®`N«BÛý§È%#ÿFG„À¦,‡föKçÀ!ü®|ƒŠ`XP<6p
+ D®‹×~š=Ì—ëUí¸wìÙxЇ¾· P§f2Ý‹´zr?_­wsÿÔ*Îݼ¡”-çŸæË‚ÈžDb‹½2à)/
+ŠzÿâöËã»õÒ3ÁÛ.©̦Ûyù®=Ó$u-Ž6ñ_-V匿ÝæKèÐ…ïâçíót¹ôÅeÝC§»›íâ¿þÎÖ®öèyµØA­jX¥Õeá7ÿtåÌXÄÝgK—‹íΈ*E’ÖO»Åzš.–VLÝŠê»(7³‡³°Þs •òdK°L„áÕ`
+˜ö$ûG$ó<Š= Uc¦Â¾@3j@šÒaëqÍm C¨§lÙŒ€×%߆Õ+1’šœ ¶©{ËCõÿ]Ít¯ì½9ÞÔ«í¯B{¤«R¶QŒžO{Ô~šX^ ŒÚ,“ÕÅþ¡GçGËlÑ9ð`âL•KˆØFŒ£r©‘Ò>to?>Oï{t~¢ÜúhF#´.÷ %¸GíG‹mQ;LMñQàz¹9Gï¤QïìÛù̆ÏÍŸ(¹¦y›´qV—ì4ï‚ö@]–>
+aâ·ŒoæóÕ®Gù§‰Ž´/t¼*¢KívÂÑ5héà®t^/C ‚²Qz»£Û»Àfñazß“ïŸ(8
+<ö…šÜ»n/±©sb잸3§YDAÎFÆIõ‰¶›Ý}ãïŸÛÞ°s¢èÈòDšè»>Å-´EñÀCœ™óÀ¬¥GïÒXÈ2Œ²›§mÒO“«ãŒGHQ—{׫õ£¥¶hx©ÎT»€$ÐqÔ.`êhLÑüéæ±'³9Ql¤uŒˆ`u±wýj?Zl‹ÚCšœ (Nãd7„Û/ EEíîÈà›õóSOœVƒzéêZ îºàh¹-]
+endstream
+endobj
+793 0 obj
+<<
+/Type /Page
+/Contents 794 0 R
+/Resources 792 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 786 0 R
+/Annots [ 791 0 R ]
+>>
+endobj
+791 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [326.916 320.189 341.581 331.8]
+/A << /S /GoTo /D (table.caption.16) >>
+>>
+endobj
+795 0 obj
+<<
+/D [793 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+173 0 obj
+<<
+/D [793 0 R /XYZ 49.606 361.894 null]
+>>
+endobj
+177 0 obj
+<<
+/D [793 0 R /XYZ 49.606 343.506 null]
+>>
+endobj
+796 0 obj
+<<
+/D [793 0 R /XYZ 49.606 314.211 null]
+>>
+endobj
+792 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R /F90 447 0 R /F45 438 0 R /F94 466 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+802 0 obj
+<<
+/Length 3112
+/Filter /FlateDecode
+>>
+stream
+xÚí[m“Û¶þ~¿‚yÓÅ;ÀÎäC’‰Ý¦éLÜÜ4iã|àIô‰‰$^$]wúã»À|I¥4nfä9Ið¸‹],wâhòÐäå ü¦ Kxnˆ61«’Åææ§@/¼¡DäÐü6qÍø{fLi"s•dRÊr×—¸þwÏ›^Wi‰ <Q”X&Ã3?”(SAok¬Ðiâ|—|ïÇ[&7™äDq%ã0šÔ&O6'[›Æur3×–uW#XôÓäæUç§+ü—í›äf;6ôÆM,M2E´ÎÀ]¶W£Ïøº¯¢€1"„U*ŽØ\#Þ‚õ„¶I–5"6<=ÞuÈAâ~óAIÓI–“\yçå§ãÇØ:vëÅVÆó$3ë½øÓ»›?¾° æ%7F'wo’
+˜»eò]úÙí÷w_Ü|~× 5
+žµ’w•l†`‚8è5¸]ƒÛ n<·$§j>¸EÐlp€®Ám.¸9ÿR.¸iÆÏ5œ„Ø 1¸qe¦,‡¨ò¦ûF¶æpdÈ~Ÿ¾%Qò¬}4ºQKXίÑíÝ>ht“Ô
+›n4Ý kt›‹n &WÚ‹r7‘+è¬NänÕËݾ…Có }ûyO¤lçŒäà²ÙHYÚºœ$¹u
+­Ä3*Þ±¼ÆZ&™Îa¦Õ=ÎÉ4Ǽ5 "Èë^.VåºÞ~¼/‡ªÞ%®ƒ>7FÑÉŸ™´¶ªèÓ Üœ§9WŠpÉœæœ0-Ç5¨êi¾+ªM¹=½Õª{ÑÉŸùBk½Ȫ‹T<”ÛªGÔ¨êÅnóîÈñúj¹§õ† ‚G½{+™–Øiºnýï!‹”E)ky$\ϲëÓ–ƒ‘t¢µ"@^½·F¤ÕÃÓî–ó´¼Í3)ã‚“\¤ŸÿRlסµ~ƒÇêtó0\0BLíÍ{RH¨Ò%‹¸o…NËw8rµÅãÓ¾$~ªé{Ϧ!!´äP:É ‹•I@ßÛŒQJÓ»[Æó´Øÿx 1Ä‚Ö’¥õnQö3œ/9·wK?àݪÚCojS7)ÕkJy¹Ã†e¹­e¼‹‡C¹y¬wÅî^>m«ž½©w=àþ±\øÑ¡#J gXßÿà"ÎÏ0+™Ö:ýË'¶K%P@—S¸·£sÂ<9x”¹Ì:{<îËÃG¡å€Ç·ÕzgÅÓ¡Þ‡jQ¬×¡Û¾úwp CÇr»X×û²õ&l 2á8ÎyÚ÷†^6~¯”ÌH¿š»ŒÍѧŒXñ^ô)'–¥„Yã×üš‚ÿ)¸>³N…W„rc(åR06Q§TMP ÔT®ÏÌÂÕ¥Y¸úÊÂsèÓsa à¬
+’gk¦¸¡€Š 1út’HvîÔ)µŒåä9`»ò × ÷Aƒœ€ÀÄ Mžr5䆨kû_9᪠óA.¢Î
+rÃÎÏrÚÊ:.ÖêÁ¥›VI‰Q¹ÖΫç›þÝ5ØΆÏì8QlÉC¤ŽÏ0’YÕ ŸäÂê5è¸Çµ_DEŸã-̦›b}üêèÃõ)JÝý¼G§X…ºØ ‰#ϬçJ£ÒÎüãõ|@EÖG¾¼Ò”»B,€]ôékDo$?.éh!ŽJúPl´µÆ³+úNi3RÒ%=Ô"V-åLI/Î-éU,G&n †Øêuÿ5K{¨q­D¯a18`m/Bmÿõ¡8<íç*yˆ Âôëxau¿Žw M/l¬L¡uQo—•'üü¥Ÿ486÷ Pò¾ÛÜ×kW¬;æaU6†pÏì^Ä×nôýG#6ÈPt¬ðòݕÕÖ›`9a•G]+|Q Jœ¦ÅΗì9Ê -(¼òêÃrîv:OŽî«¶ØŽ*ÂEñXÜWëêð¯Ñ“ vuƒi$¼eyã%»rù4®‰£"tcµMYl÷H{@0gÏû´GTÍöœ}.¨eÓU8Œû²ÜbÓ²<‹С(lÔ;Í1Ô
+íË1ý¸!ª¥P:ÆòkÇuò'ÓŠ3¡<þLÍïA:x?Ú<ÝW‡§Â»^¯ŠŸKws²X<ùXÞ·$Îñ¤#’<­æ€Í¢uÍU§a¨Ê%¨Îs‰së{–nÔ_xå1ë%^ËŠ…ŸD¬ñU¸FÎÈ݇¡ö«êìP.º«VžiNh_ãLðõµDÓ´üR±XÔ›M½¿xÂûÒJBäð¦·ïE+q¡Ø¸×¾[¹ü=x%X<÷¼’åöZs]k®‹j.uQÍÅ Ì•Oá%¡vjwW@EÐÄƼê¸æR¿£šK_XséùšKj’SsErüôsÎÎ<÷5*w_½ ¼TD×vÐ`(‹_ƒ*‚¼íþp¼¯êÛ. Òf­¸£V¸„š¼I× öaÙr¥UòDP‹¨ù 6Dý¾‰¤ß(¨)p9v&•D5<Ç…9™VãA-¢"©$ÊäQ™?
+±È‹ç<u³ iºx@•n뢇›á^µÝ—»C|Ü}yx‹Ä¼{ڪܳÑþÇp C߯çfÖ¨”éÁÌB«NªŸ½¼F’ÚZ׆VI\ë²Ü/vÕcø wüTÃ0Ð|ÄÍENÓb]û¯&
+÷?ùê+½¦Š~¿Ø¨ïŽñë‚ZÖdS î†?E¯_‹ªkQõï:¢VÃK7cðr2ùÄŸ
+}ñš ùW÷ë«)ÕÚ!ÇŒeÿSo>Ï]°0êÜØ\ƒ ƒ…¢k*¢"ÈëöÍQ¥=@ *K6k¥ßu òBÊ{IœàÌíLÔ'âDDõâÄ·ÎTÿ<¦úÐÁî6”øD¬€7©ËVöÜÓPž ¢…Ô¯e–C‚©0Z8×ìN³O^âÄ;öh”¹yT3c½ß_4ÜžK&ù‰ Q½ q7¶³‹êë¤Nn2}¡N°Ä•0ó*Œ×è_Sµ+ÔJÚÍ.&¨—Pƒd"d„yÑ9Ðb¡ÌÌ/*/_ºŠ®^¡NDö+øKÁˆ4üY,kþª²ÃIÀÈ-'ÑßÚ´Ÿ'aiŠt[Ký†#?´ÔÃbí¿«-”§
+endstream
+endobj
+801 0 obj
+<<
+/Type /Page
+/Contents 802 0 R
+/Resources 800 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 786 0 R
+/Annots [ 797 0 R 798 0 R 799 0 R ]
+>>
+endobj
+797 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [451.569 231.693 466.233 245.641]
+/A << /S /GoTo /D (figure.caption.23) >>
+>>
+endobj
+798 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.074 209.372 92.739 220.983]
+/A << /S /GoTo /D (Item.16) >>
+>>
+endobj
+799 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [268.645 197.417 314.114 209.028]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+803 0 obj
+<<
+/D [801 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+804 0 obj
+<<
+/D [801 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+181 0 obj
+<<
+/D [801 0 R /XYZ 49.606 647.86 null]
+>>
+endobj
+805 0 obj
+<<
+/D [801 0 R /XYZ 49.606 615.674 null]
+>>
+endobj
+185 0 obj
+<<
+/D [801 0 R /XYZ 49.606 469.42 null]
+>>
+endobj
+806 0 obj
+<<
+/D [801 0 R /XYZ 49.606 401.368 null]
+>>
+endobj
+189 0 obj
+<<
+/D [801 0 R /XYZ 49.606 248.231 null]
+>>
+endobj
+807 0 obj
+<<
+/D [801 0 R /XYZ 49.606 192.134 null]
+>>
+endobj
+800 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F93 449 0 R /F84 441 0 R /F90 447 0 R /F115 467 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+812 0 obj
+<<
+/Length 2282
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZQ—›¶~ß_Á#>§¦H€€›§ín6ÙÜn’v÷ž6Mû€A¶u×@6î¯ïŒ$¼x-Øò$y$fFÒ7£™‘]ke¹Ö› W·_h]‹X~ì0—YaD€Zéæâó_®•ÁÐ;Ëu¼8²åÄ LdŽË<èçÖýÅ/ßE„,˜ïxQ4Äf‡NìyšÅO?ÞÄ®;1£ÌzXZAàĵÂÐ’g=dÖgûç2MjQ³¿Þ]¼~è&Äu¾“`xýcÉÿ‘ÈæûSÁ4
+Sy` A=ðšÑ K!2LjAHÛBC‡Ò¨-Ìö…£Ešb#™Z.ðêÆ8ƒ/—«Q¼àÕ@qa¬2ÆxãH™×G
+9]në²°2°Å:ˆúù,Ö5û6äcnfDÕG]nù.Qyé°Ù™]É}³¨ê¤¨Er>G³;¹K¤û[‰â–lȯ®¨>&qð'ˆ<ÂhšOå!6‡ydZýì Be
+é%Âûmx¤D“ ‰‡×b)Ò²Û‘
+ÍöH[©
+OKéc%ë‡N%ikÈf^!t£'Z½j7û?Ûˆ¢©ÑÏÎa}8Ë\¥rd§]ö%hpP2…Ξ';ÕKÔŠõ%*£­;]ž
+"=!°òTÝS~ÐK=u ¢*é
+þOé‡äÃæC_•™ #ËLÐ&YÖ~¾àˆ¥#þîÙ}md.ÑpÆÞœñ—º·°ÓY%üT«„ŽÞiMÅm„ ªuG-KžÎMâáä®ÂóÝèÉ5,:í¥j" ù–à9> '=%€„8ÄÚlÄjï~ïI%ÎøúÚ‘—䵨›L߀Xžå¯cT0¿½vT¸<¨à££E3ðƒ§¬G‘e±´u¿8¾Ê!íÏ. ùΦ®C¿53“5â­÷æãý¡Vh~:8s§UCNz8˜Æ
+KÄñ‰‰€=8¦ûS/@GŠ3!´#//_ŠþÇÉ5²#÷ç¤EåQœŸ—ÅJÒ_µ:‡ @ÇB=ä€<[ßl*x<mvlXzLÏ¥XMÛ´ÇRjXÄ¿u¹t~
+endstream
+endobj
+811 0 obj
+<<
+/Type /Page
+/Contents 812 0 R
+/Resources 810 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 786 0 R
+>>
+endobj
+813 0 obj
+<<
+/D [811 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+814 0 obj
+<<
+/D [811 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+815 0 obj
+<<
+/D [811 0 R /XYZ 260.535 604.582 null]
+>>
+endobj
+816 0 obj
+<<
+/D [811 0 R /XYZ 260.535 584.657 null]
+>>
+endobj
+817 0 obj
+<<
+/D [811 0 R /XYZ 260.535 564.732 null]
+>>
+endobj
+818 0 obj
+<<
+/D [811 0 R /XYZ 260.535 544.807 null]
+>>
+endobj
+819 0 obj
+<<
+/D [811 0 R /XYZ 260.535 524.881 null]
+>>
+endobj
+820 0 obj
+<<
+/D [811 0 R /XYZ 260.535 506.814 null]
+>>
+endobj
+821 0 obj
+<<
+/D [811 0 R /XYZ 260.535 465.105 null]
+>>
+endobj
+822 0 obj
+<<
+/D [811 0 R /XYZ 260.535 445.18 null]
+>>
+endobj
+823 0 obj
+<<
+/D [811 0 R /XYZ 260.535 425.255 null]
+>>
+endobj
+824 0 obj
+<<
+/D [811 0 R /XYZ 260.535 405.33 null]
+>>
+endobj
+825 0 obj
+<<
+/D [811 0 R /XYZ 260.535 387.262 null]
+>>
+endobj
+826 0 obj
+<<
+/D [811 0 R /XYZ 260.535 365.479 null]
+>>
+endobj
+827 0 obj
+<<
+/D [811 0 R /XYZ 260.535 321.245 null]
+>>
+endobj
+828 0 obj
+<<
+/D [811 0 R /XYZ 260.535 301.32 null]
+>>
+endobj
+829 0 obj
+<<
+/D [811 0 R /XYZ 260.535 281.394 null]
+>>
+endobj
+809 0 obj
+<<
+/D [811 0 R /XYZ 260.535 261.469 null]
+>>
+endobj
+810 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+833 0 obj
+<<
+/Length 3252
+/Filter /FlateDecode
+>>
+stream
+xÚí]YsãÆ~ׯÀSŠJ…ã913y[Çë­uÖÛ+ÛUYû"¡%kyÈ<,¯Sùïéž@IY–”ImŒ!Ðèî9¾îž#‰f2š½:£áú˃+ÍX&-ÉižiÉâÙpvöþgšàÑW%šìÆ Î@0'4Оfïξ­«0¨BæD*µOÍ„"&σŠÏ/Î>ûÒÒÌ›ó<»¸Ê4'¹É´Ä‚7£ì}ïÅ—ç?_|uöò¢b‘1JN°(*Ë yÝæp1›-æçýœòÞdTÌד«I±Üöƒ+I„2Ç:bdÅžS¢„ª;òò·ÁìzZü\ª÷͹T½Át0š€oR˜ÞÕbéëqá_3j_ä¾=^ÜLÖ¿A$Š¾9g¦W,®KlŒ°Sà\Ÿ1°ª¼U¯–³ ÿüæ÷¾¦Ø¦½õ`þ‘œÃGÕû‰*úýªð÷ß¾8צwñ/ÿÆp1
+ïγÐ
+z)x¶ZO¦E›í8ô‚é0ô?Qʋ劀1¶=J*"õ3° PÁU~4îC‡Ãç„É|W8,¶F9œeZh€“ñûïÝ0:Î`+ŠªW×E1Úš£Ì¶c¦jö‹Éêz:ø´‚5¤EpÂ55x6ëÉp0õŸf°ƒì5bãÅ&´áúq2]ÌŠõòœóˆ·,\ÿ2¬Z÷²å=²{±ÚóíuÆÁ2h:i­®#¦í™`9'F˜,·ŒÈ<D¯‹s–ç½Á% Ý Ë! +z_«árr½žD¤/®p°>û’1UU
+JªÀ¤S÷õdúf0yÉšuV&Y”[Ù~[{Õ.|LGþFÓ2 ¸ù¡ÌØ@RŸkK´6аD†Æ ¬àÚÛÙû>£”öÞm®¯§ŸÀ–4½×ÃÅ|Õâ,®C„Ñ!¿áÞŒF·.ë­Šµ
+Ê@ƒ®ýœÍßÎ!´à á}¨\Ç-P–\-Dœ=ˆ– ÆäZ& \KÀÑŠæ!‚@‘fšƒàLáê"®=7ê¦÷£_íðÄÃÐtð .Z»% *ŠÜøÇW®›‹™RŠ¬Cn„æÍdd/È8ЉÓçžÝ”΄ÐA+¡ƒ–CÛRžMØ+-{Á§ÁÜ„I*–¾*’~`£”ŽS‹í0µØœ„kô ¸¹s7£jH»0ý¾ðçä/Þ¨b¾*–ë"<¼,Ö7EJ5´^íLˆqÁÕö(§É¥ó1vÂ’úè¢9.R¨ÐbApJ“ðpÓJ¨!‡EY¸kð Ör¯…ê“—gƒÉ¼Í/„ž,zÛ¥–"
+ ¢@
+[¢­ÜWŸ + 3-%Þ}éÐPJˆ®Ø…½Õª5ÐO»sCÂhN,—™”‚pÊüüp®p;ë£tc ¤$œÉ#l—  ʼn”
+#~9Ã}/AñNîGé~E¼¥¥ÎJ/¾ ‚Šïm@PèÎWjã OsH^Pj}DOïê¼”×5ýt=nÙ¢q,zù½L½€%Ù«n7ð«mÓ–£0nz{õ£ÉõI:U"HhØö‰r¶²ÚòÝ;ìˆ Ð)LØ` ¦Ó–È4± )š¿îFב~Õ)'Uwëíg/ZŒj˜Ø#L67hñZ®U
+ùÑEì@™zR¯2'zæ”+ÐŽ·[ÿ5…Jñòêì}Ɖ5ƈòú3<BWÏÌ3TÖ}žÁg¸rf³x¢.ð)ŠÁç~‹L¿¦§*ÔohêWUµ ³³wY9$ߺî<J/ÌÎæG¶"yn³ªOñæ´e
+¥"¦ja)¿Ç05€PÖ—5wŽº)³°WÂý ö£€˜!}Π8¡¬‚ñYçÝj8Øw¯7Æ-² ôóÝK¨TSEÙÖÍ
+ÑdôñŒ~ÙÕ¯šÛÌ:`@ÀêÊɵ Üky
+¿‘¨žGùG8µ±“rGÇ•8¼M— •KOûÒêTH¹s«ˆõ_…œL¹ N‰Qa|Ùn:ýH› :]^Ôl¾ÞŦnñ®lºà9†öĦ'6ý¹°éŒX¹'}\Tà´á;ˆ¾ …ê¾Z]ª^6x_SÙ¸ô'Å¥ßÄ –aóB
+2 ßž¦¬IÕ¿=òž¦ŸH‡)ŸÔaJ\¶æÄ_?k‰†´·`Qh?ÀRÛ
+ܪÙÛIêjí®”®Aõ©;1º‰Ñ}’Œnüʯúmaë¦2‡ø¥+²ñ^˜±øQCȲá7±·ßpÁlm)=äÇTb'nöÁ¸Ù•Ä²&–5¥™Ä—&¾ôøÒ™D~&ò3‘Ÿ‹üLQ)Ñ˜Ý d3”Ý’ˆ·”Ù6¥Ç-ƒ̱Õ,üH´4ŽÔ‹
+_^œýfç ‹
+endstream
+endobj
+832 0 obj
+<<
+/Type /Page
+/Contents 833 0 R
+/Resources 831 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 786 0 R
+/Annots [ 830 0 R ]
+>>
+endobj
+830 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [353.13 604.735 367.795 616.347]
+/A << /S /GoTo /D (table.17) >>
+>>
+endobj
+834 0 obj
+<<
+/D [832 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+193 0 obj
+<<
+/D [832 0 R /XYZ 49.606 673.938 null]
+>>
+endobj
+835 0 obj
+<<
+/D [832 0 R /XYZ 49.606 535.993 null]
+>>
+endobj
+831 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R /F115 467 0 R /F122 591 0 R /F125 600 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+838 0 obj
+<<
+/Length 2643
+/Filter /FlateDecode
+>>
+stream
+xÚí]ÛŽÜ6}ï¯Ðã8
+¾ú_«y_© ¹ð´»®®Vo
+N»ÊYÍ•÷›lºãA©ÞÆ÷׫¿ýê*ð`¥­®?UR[®lå\M"U]¨Þ]üóêSÚ_\}ùüyýg·ÿÃúæññãã«÷×?¯~¼N£©•F†'4ffLlÓãðäA9„v`kÅEp›ûbI7Èl`U2°¢¶<H]9é¹ÐzY[Ë 1GÒáRè§úö:õm÷ÔšÌ÷åŒOGŸÝ<ÖÅìŽÛhWÖ’‹fV)Å µƒ,ÿ^‘ÖëªU]µÆ YoijÉ›iŒ6›×«w•äÁ{¯†í{:Õ4u%è£$7¡=¾§cÚJª¸]7¶¨MQŽÙŒËì¤J¬°ÄRSsJwÕꪆäMÛ£l忪ÕÃÛpkƒtMWØD¸ž€ý]°YlÑÉôo:ŸFŽ×žLf£´3Û]OsXšóYC8E‹•âÚxmªAÀ¢$^5´ô–.£0«­eQKW·qÍô¤±&‰[Õæ[ACW÷ÿÒýÛû*»7éål¸~qÐr]÷t_ÃåÓOé¡ý)£Œ¹J:²aiœ›äa˜¬¬äÊPDí•¥¨ÖÔ"òì׊ÌüAW¼ç1“‚K[‹$ï·JÓ Ý$Ë¢ûnF—Œ~¿ ƒ™4&B„±†‚ÒÜIùW„Ý.Ø}C.‚¡Û¡ÐÕ#º;¡9¡»©ú2ÖŽ`”5«8·q:Ä~W Q&N>6h€éþ/ˆ êݨì[&,ýqMçú½"6Æ©•æî-Òü6q³´,3ú›‹BwNK!AO¬õþåB,Šò‰'yP’Š«:Pü±eIÜ6Óf8;<ûLõ§;·éÕsnhaÙÀäªÍ•í<¤+ŸI=ñBl¹qê Yg4Á”q\×¾5b(_<Ó;œ‘&×± ¸ñû`eƒ M&‚¡<œ bË°!Ý,¶ÊaC¹ Z-y]Ûg†–késß—‹¸áþ.wÅ ­“ô‘7nxŠ¸awe °¤°\S´´Ÿ¤N˜ çDT¦‰/Dó
+Y±‰²n©p)ŒI5£ˆŠ°4«¨:c4©×™ê`"v&SŽÂôCÜVÈÝ3 ¹Û£ûçràõdWää’”K€\rä‚äò’’  ÿoý#§ §àáÜ ¸““âN¶‘¶_Ò­àÁÉ'{òÉ~{ò)¡V6OµáÎÊœ|RËä“ñ5÷â¹äS“
+ß—ËìÓþ>wfŸ(P:
+jï¹Ç:@O9ŒSÊN±‰°»Nq£•R™n”õŸX<t”ÀèÙµYçhAЦvò51Š"`ñ(E„
+pGàŽ(3€%K~X!Ô¨%PËãB-‘•
+G´:².².–m=Öe[GR`™3Qd#„‚4qHîÚ<—4Qí ê™ï·Ë«¶îïsWÚDYKwñ¼ x““åMºÆG՚櫧;¾¤ÀµÜ½•ºnŠ(Õ­Û"ä´·£ÀQ§u°I™ì\ÄÅÄãœh2·º<¤<eÛ-]î]SD»¯ŽÇ·Mã”1a´}rƒþ°e ?bñl-+ͳÄ~l ‹m¬¤}ˆ«¸gü”,¢kpÒ°ä0šdE¯ØLÇY98¬=V´ŒMšÎ&½cscÀÊbåH²| ï¦=þ„µªÀ
++„D‡D‡DÎëü8/d>d>d>0zgÃè!á!á!á¯_ ¾òP|%j
+j
+j
+ÖôÿVllÂ5.Ó±2îë‚ŽõËt¬t”¬|&K£f¾ßnøÍýîÌÇÖ†KãÁÇ‚=A>¶ÇD½ü„®&ÆãOÆd¶óŸtÆW¤AÄ ·ó VÒ ^Ê0¿Á¿;ÿ2;ágÓ”¾C¥Ã”ð~tÀ;n^°êW ®A\w/›žki¤ÊËf)D2Ô¶Ô6ÂH 6å¹¥¶dP[Ø
+» Ûþ;<”8kïV¸Ûv+ivûÃN®ÊætsÕè#r§éñôî7@€‚g¥.$á—ÜgšÚe²$<ól»MœJg…HÂà+ÀWd4då•k.¼r¡vR!öÚô»EœJg…ÈÊ Ô@©!#§@2ë Ö¬/êÝ?|Äi4ì¤ÂqR®Ói¿ N¥³BÔ;¼˜ðb^LHx÷å„£VÓË^Lõò› ÂÈ歂罘`xh–hM}/¾˜°·Ã]ßK¾ùÒ%ÞKÀ{ '½c’IQÕþ ¢“{eåÁ‚ ÔtsçÕE3d/Òîµ¢RÁ?ü#†ðÀ…Z—èãÙ®±C[ßìQÞ°Ì;h篹àacLR…VµÜcQkKŒ•jˆ1°Š/cºÃ’†k'¶]ÔÚt¥‚¤ÑI/€vàXóôPnô¶X뵶ÅZ¡†X'
+®ÿVý,ñ
+endstream
+endobj
+837 0 obj
+<<
+/Type /Page
+/Contents 838 0 R
+/Resources 836 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 840 0 R
+>>
+endobj
+839 0 obj
+<<
+/D [837 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+836 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+843 0 obj
+<<
+/Length 1671
+/Filter /FlateDecode
+>>
+stream
+xÚíXÉnÛH½ë+xP@Øî} È2ƒä`Ø3—$Z¢,!”¨ÑÇ0üïS½qm+ö-1 ‰­fUõ«êêZ'W NÞpïIà'$¡F!Ét¢¸@”Éd²ý—
+¿1`%J[Ê+pWwÞ|‰=ó¼Õ*²V«ÂO98~¸Øúw{Àaõ:ÝÍ‹°,Œ6…¿Üow~ò2pæþŶóUX¯X®waÁÛr9Ø~ü |{¿Ä“å³ßvðs¯BÇ€ÂÚ‹¤vs6†Š:z€²åŠŒF@ãLð÷`sR«C§:HÊWþÞ8$ÌN‹íâj•ïÕê•_¦T1E„‘¸Î|q5
+8´<p×m±Ù9³š¸m°½ƒªÕÍÒn‡Æé‡üûbuÈü1Í‚ëEYúY/2òm™oç~hažDíál»ëÂ9¯vλ |`7ð±pY}/ú¿PÊNáÇ…*nZjm÷3ëz?|hœym–þŸ—
+A ;œq ˆ½çf)PE"§}ì'^ßÚî`àž¡ÏÕ5F
+endstream
+endobj
+842 0 obj
+<<
+/Type /Page
+/Contents 843 0 R
+/Resources 841 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 840 0 R
+>>
+endobj
+844 0 obj
+<<
+/D [842 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+845 0 obj
+<<
+/D [842 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+197 0 obj
+<<
+/D [842 0 R /XYZ 49.606 662.332 null]
+>>
+endobj
+846 0 obj
+<<
+/D [842 0 R /XYZ 49.606 575.197 null]
+>>
+endobj
+841 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F93 449 0 R /F84 441 0 R /F90 447 0 R /F115 467 0 R /F122 591 0 R /F125 600 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+850 0 obj
+<<
+/Length 2437
+/Filter /FlateDecode
+>>
+stream
+xÚí][oÛ8~÷¯Ð£Œ8¼‹|Ü):ÅP`² æ¥ÓWQjoe;µéæß %KNÒØilÀu9<¼}üÈ¢"}‰hônD;áoW£_·4bŒX¥xtuIK4ÕQb8œEW×ÑÇ1'êâÓÕu´ècÌ(¥ã·ßîf·ól±¹ˆ…4ã7Ëù|²¸ö'SE]¤_gL… 0£‰LpTø~?Ë7…};?`-´¬¬Á+óVFF–X͵3Šy‰‘,Š™!Âo|5­/bÉô8­r&™‚“²Uyc}?ÿ¼Ì×þÆÍrå¯æµmVe”eá<H–ë„]åjšùø“Uæ£/–U4DSPŲ.ÒÝím¶êó.$a¼vî²Ôã‹C¹ue“/¿ïpe*³¯ÙýúÈ ¤ãÙb½É&×e¶û€;†¸ãØ7Šw1_~žå³Í}_b
+ìd$€°f¼Î6k4q׳¿)ååâòféÃÏ™¯gëÛ|rŸ]W—¡x>æfZšÜ¬&óòÐámYzú>Í¥O°ì)””°º •bMyéíñ%š­ë’ýâ¢A]II¨íºš\ÿw’–„ûRº°(|^n6˹?^ÞtnÎÒåb
+r
+û†O)抨Š, ë¥ËCc®=;Ö4ù¾îëvÚæ²Â+a £Å5Ä6­õ~RØ{z{5ú6be±
+u."­ ¡RGé|ôñ®áÞ%
+ AÉV†—$X.Ò ° ’’§g+Ot×ÙM¶H3òån1Œ¡'ç„LÄjÇŠ“F&Í)Q´pü-«wQa:*|+pî.oÿ Ž•óè‚w£f0ÐøUø n¹lŽL!lq>‡s9³QæÎd¨2ƒó¸Ç&nù ⎧8tÕg4F¢º>.£æP­-LŠÜ€ „!a\Äpf`¸ãJ1­ÓtÙ«îÏý9 …30Ê ‹0µ£ FuX…>VÜg÷Û^öýÅß!ÈhLˆÚM‚ ß#•wŸ BE™؉IŒ~Ô0ƒ¯:‡Ù4‡(uØ2¬O áâ-‹xËI›iÖ:zÜo‡im›lûé&5õ(*Ë÷[„x~xÖŒPàÀ'ãÙÿÀKkvPím$dÉUM}R’câꚣÁÎýéT0ŒD‚>{]€¡P>­“ÈÇ Ñ`Ã,ó¯¶GäÝW[cî´×~Ž{]ƒæs8Š ±SwòÌù8hlj!ÕxøJºa´¾[Oã¶í·Òpr¸ÃE_Ä9ìf0ˆ…túãtÊ¥y2¶±ùÂ%/\HÐY?¤ööè…Â446œpj_žÆƒ…
+ÖŽº¨ÏMž ŒŽ\p½¾vBEsEs>=%à I†WI';'7Ïš“7ÝÁ9¹T.Ó¬ž”Ïüƒ¦Ídñõ»%7Dr¶ÿ9º„™š¶ çè‘ê-­ï½¸weÁ«zL„ÈÅG?g ?/þ8yõÖñ?¢9+ŠÜ§ÄKö¡ð’ŸÿÐ%PIÃ2ÂÍ°¾{Ö–B‘ÀØeøôuŽ£þû)<°‹öùLv'C &DMˆhFˆpAíxÒÚù õäiêÉc£RÜÚ׫2-6¨2…ÔDìzŒ¸Z¦_³ÍªLfÜóâý«L!1L Ê¼Ü*cÓõ91‚[]„kp¡M‡ *«€ *Ãz“€ä®ÒûèERÉ{Lã®I½»ÌTÆ…œ$JYÕŠŒBó¼…&µæÓ´&"åæKËMÄ*ΓUœnO4Ü(hTÕˆÎÛlµ^.Yî5§ÿgÜþ!çbÇ›f\C‰¨Ü¿¾äÖMÎ%êËÖîñ2³ ŒùЃº§‚X&,«ÃЬ:N‹Mæíûq×AÆôb¦´¬-zMã •-ƒ-DÚŠäƧʔàQ΋¼(uë.
+Ôs|i{Äqõˆxÿ!w È¡D>Ü«ŒÚ#ãIÔØ/øV&öŽÃQ:Šô>‘èÛa‘.(‘F7"½y&üh}N ŒZê
+ÿåZïÂR°¤2¼°4ªê-O^X\'²†$æ
+¿ßÚ^~>nJÃÕ“sÙЀ8Åe…sêíÃm2@NA!zlÛÎþ~Þ¦ô.Ò}Ôh /ue 8X ÊÝ8—TU¬<•G>ÿ@:ü°
+endstream
+endobj
+849 0 obj
+<<
+/Type /Page
+/Contents 850 0 R
+/Resources 848 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 840 0 R
+/Annots [ 847 0 R ]
+>>
+endobj
+847 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [110.458 725.681 155.927 736.685]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+851 0 obj
+<<
+/D [849 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+201 0 obj
+<<
+/D [849 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+205 0 obj
+<<
+/D [849 0 R /XYZ 49.606 712.74 null]
+>>
+endobj
+209 0 obj
+<<
+/D [849 0 R /XYZ 49.606 692.156 null]
+>>
+endobj
+852 0 obj
+<<
+/D [849 0 R /XYZ 49.606 668.245 null]
+>>
+endobj
+848 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F125 600 0 R /F93 449 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+855 0 obj
+<<
+/Length 2692
+/Filter /FlateDecode
+>>
+stream
+xÚí]KoÜ8¾ûWè8s—OQ¼˜ 0ÀbaÄÀ‚l¹7ÐíN:íY̿ߢ$RE©íDm÷£ ’ª‹%ŠúXäW|ˆf_3š}¸¢íñûƒ#ÍX¦)ÑFdºäDñ¬Z_}úL³ø鯌aÊìµâ:“J¢4p¾Ê>^ÝôMÃ3Í5Ñ%›²A3%‰’­…ëÛ«ý ÷6ļÈn¿dZV˜L+E”6ÙíCöé·»ízó¼]<üž”ÿ¶^<,«»ÕïŸoÁv–3FŒRâ·ÅöÇæéi±j4«»ív¹ØZÍ«?nƒìr®ÕåëóK£BtGoXq¢™¬³OUmø{Z²Zõª¶­À¸ÿáE(kÑ>\}Ê81eY
+ü ?Ùl^1I˜ÂÔ×k¸†#g&sÇ•µrjp'tòžP),å¡©”Òcvõ1óåq“uÿáBqÅ àÛãºåîÄfcRÈ>vé%ápÖ¤Íp*¡Si6¹ uÛ¤yú9#’iiµòXZôÿOÍ F  Q“BYG®çÃ"@k§¯¡¢Ì(¸w©K)ÀÒ}š
+øÓ™Ns6æ;ϲÞ+í·ÈÓÒ^›û˜Ô_#äŽËGA£ù+>Šy§¸óôù¸ ‚¸k>.qGÛŒú_}7n¨?<©ÂÎᄉT‰Æ R¡;ýywÊeùjlwrÉ)˜àµ ©ŽÎg„B'4rÊ©yùÓt 4BÁ[è8Ù8í¤àìeŠuvÔ2Á;÷ÍBsRJ~
+^Ш }wÿì®Û{¸[TANú™É¹ÉwŸ¸÷ç`(ËÓØ?Õ³¹D÷‚îåBÝËY $cýÅú{ìõÃN‡×G€àR[pŒ.¾é4 t5èjN ³AäT9°Ž‘•¡DüÕAä½acUp¸—œ?llsÌ…Ä°ñ :é„“ÆPæ%„2ò8Ýgîðb
+g_ÈQ‰“œ.8 ðÇùU Æ‰§ÆÜØFKŸw›õÝnY5Üx»ü2I~i øV ¿h…)üÞ¤“Ú×È™R~ –»ç)ºêÅI)d)n šÇ*«½qÀF¿‹v×#q@ïs‚läá¾Ä¡_W“1¶ŸjDRäSšíƒã+ÆYÌSAäy=¶ÍnÏ<ñ{Š^Iù›Î ÀJrXß1w†{9xâÞàQâ.µ$†ê†¸ßoÖ÷ãDÝfš–z~¢.K°¢4õ›Aç´y£²PÜË”®×¹Á3gŽÓ°öX³uÖ/BopIh6¤.ˆ.•EÉP8-§T£âú?ÿ¾v¨ð¯.Rk7ÝÝÚüúìâò™Ë$Ô³Øh"„ÜàVk?€#ÅÓðYß9"Ti÷…Úƒ§µ!±â‚ãÁ‡$¨}Œ‰_˜Kcö`ÌiíÅX¬˜À˜8r/„DòM‰äœ³îwÛLNƒ¹ÕÚæHñ°7ï¾€H>ÛL¥#|›ûvo‹ÝöîÛ8÷ƒ\%>?÷ƒHV"÷» ƒDaÔ$Iñ2 •Š¬›Ê! ÏuÓÑwÖ• 4ò‘a|¦
+ƒ6 ΂9!š(ÆÊÆíø H3PØHÝéqøì±D¢gt Í ‘ù“P˜û³³“âPšþ·öÈyª¼m¾‚(Þ‹#{ÈúϘõcEE×…® ã=èÐ7¼®D€±RhàÉî$æþÌ:}âPš¾£oÀHßa"}X—л`Ïc¼'ãÅJ‹nl¹wØM÷çyØ7Ï÷‰“ùPø¾$\‰•ŒïwÁòÑø¾Ð ì'tm—_ía7ÏO;·_Éæ)µQÉón¹Zî^ºÙµâuôÒ1¡)‘Úà˜@¼Á”›
+~:;OÉi}½u¿$Œ&l&LN~Ùøy³qÄäÒÝ3éÈ'Ã'ÑW a;fÂvþn Q’y¢1Jˆ8ô"™j¿qÿüc‚ A1 Áæ§CAA9ò¡Ó°D«:Q¦°CDQ¿Âp!çK7ú0„Ù x9 ‡Ë±}>¥V§YÒ9Ü㣧Ô_ÎÙdÔçówÎÄaÖó¯\‚JRÙi¢nµ:“U«¯sª5 Gcߺú× [("5߃ÝVi¼}¥!zõ¬èÅí;/qÜvvüK^e³?…§4‰ÿHéÐøÇ-@q„÷”úH²¾¾¯“䔦+Z_éÐÝ$ÜF4÷"
+ãÆáØî*S=.ÖËênÕÌ#¿_nV›¯õubÊùöî¡û½Öz®V‹»mJyñýyùm½xÚÇU˜.ááÄâ*Ô.oWÙ`Ø…Ã…"Nx¦¬¨¡Ê@½ôP­;çþ3·ð çTôv@¶3IŒáeRtJhÀ8.Í´™²M´‘™·äUíu5¼Ó±ß’ êš7ã%îfm›Ò¨ñÌ™¡„1¡Uw+'°i\~¼’Ëqk#~¨ÆG§žÿ:õEâT©çQ±G¥>Zè‰{&Š<.ñ¸Àå÷ ´S…•uTÔ‰’Ž º_ÎébN—2NM¸´º1tcèÆp6Ë>‡~ýú œ
+·’Ê'…Á€ècJwþ<a¼µV}ØJ¥á
+]w»YQ%Ã-@IPn›ÍÚ…8Š×”ÀjðõUŽŸ
+endstream
+endobj
+854 0 obj
+<<
+/Type /Page
+/Contents 855 0 R
+/Resources 853 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 840 0 R
+>>
+endobj
+856 0 obj
+<<
+/D [854 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+853 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+859 0 obj
+<<
+/Length 2298
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsÛ6¾ëWðØ€âý¸v¦ÍLožø–ÉÁ•ËIž¨NÒö×wÁ'H‚”±›ñ„äj±Áoø– ȲûŒeo¬Ü~^pزŒg–Qëef ZdËÝâý–­à§?3F¥wÙ·\q—)-©qö·Ù»ÅMÛ„÷"³ÂRëø˜ –iEµ*-üv»øõ8·§Þ“Ý~̬¥ÜøÌjMµõÙí*{ÿËêð°Ý¾!†‰_v_öOëUqð¸óáNΩ׺ÐþºÞ<,·ëðÓâ÷Û¨’Bhʬ{y-Y§éªmmX j¹Ê+ÍtnøsZo³\u‘ÛÖ`<ˆûÐü:X ›·‹÷™ Þ9'ëíø)TsÁåVJŸïංû¬Únƒ-¨P¥Ç$¡CZvb%Ò±DbS)¥M¶x—Õíq“5ñA¹0\fÄR¡˜µ¡ò=˜SThîUÆ©0’çUë‹àœÛg!
+O>’Aoû#‘ŒÅ°î@0?
+I%ópV2,©¶¡ÿ­­‡„}ýþÎ2hŽ˜H©a·‚Q) º“]¡Ü‹áÞ J00!rÊ~Ϝ΃-Æ+˜þÕ4<t;¢|ƒ\Öx]‚ˆ¹ì 75VP§Ä Ü”1ʹ@nzy¾“* ·Ç‹Òó;20TíF"’žÔï¨ß5 èÌ™ÕIÝ"$.ó—«ðCä?‰œZȘrØmüãî²2ÕÀ»Ï¼¥§V¨bཾ;<mv_ׇ‘Ñ7·Ô39ýèÛ("Ž¾/³Ði™ð¤¯Üî"Y½³Í­$ThFžKº²¶&I©’¶n¸àH-V$»P¨¨vÄñ€1d"E’’u‹nSTYÄ%³ô„³ñ„sgCµé¡†¬n&V‡`=Ÿ¸ˆìôg±SôŠYB8²ìËŽxë ËÖNQëÊÉ—þ©fgþuxXÝLÃÔh¬QÓ“mí¡¥B²ÝyÔ]?aΟ[ÃÅñ€SÅm>¤$)Y¯láo‘Մф̈́ɶźæáÂ#›y; ¨"I¾’Y–ˆ`$·Gæó D”Î>GA†dòr¦@"š‘Ž‘ÀˆO “@á©S¦$ۻݺ O›Ãã·±G®š9
+HdzC…ëaÎNO@”+Ú"9ëtCåð‘]ҕű$®YJ†Ï­ð¹Bt]Ùƒ®ÓÁ>Ã'c×é„⣴óʸºHŸGr˜‡Áƒq ¾_ïׇ»§Ç’ûþ½~&¾Pʡѧ'¾pÅß›ÞÀ±¸¿(“móXyI"òZGûË]ÖnÁÚ8 øŸ`ãùs×
+!ŽG©´*¥"o+DÔ·­£¦nšSu­«Šë[^'ƒ»’A%8?‚ÝJk»]­³ÃîEPÑ)Áa4 KªG©u­ùÀœrNNÙ‚—ù!x)aà™#ðª´ÆáÕÕêÃËœxìArøSÉá„aR¹0ø?ãBéŠÛJ³ÆHœ^™$y ]$y¡+c²äx‡õþnUίÜÞ}Ù/7c,¥’/«ásiž´ H²Gšw“¾Ìæe×jšrûå×¢dõ~l•Oé¿'Kº*qñhô^ýÜ9äTmšm¬Víçñ²ó;é qÉek¢E¥‘T%ÑYz
+=“´
+><½Bê‰þt=þtt{‚€EŠ>'EGÈ_QŒÆ´ÁOM ofw‚ÙŒT6#Ê
+ g3‚x^¤36뻯ÿ–Ó¶_–ÙÎMØêÄסæ5Æ.æ‹F©×Zªf
+‹¡9.]Î^zºñ
+çFˆváJx¬0 Æhft»t-Ýd5ד¨Á
+­)×¢—ëÜÝ-7û2×yÿe?’æ„æ—’OŸç­áì˜è|ý Z{nt.ÒnŸÊö&ññ±@Uœô„Ç
+Çß‚è g°à€˜D‡:M‡ÂD"vÄâò—–xBÌãꔘ¨Açz½ßL¤5¢ÄÀp^ƒA¹ìå5žîöŸ†sÜ:¨É X,@?°Þ;µŸGŸXlVj<1¡zD3öÑ®¬­IRªIwN!¨ŠOWJ†Bra`F¹H‹«RÉ^dHS.5ôÊíUÈæìÿ1ëqNYt=t½KÍ ¶ÏÛ8…gÎL
+zF~̹¼zÎÝðì;)\6‘iRƒÙ®ÁSevæq»}üV¤gVëå§ç}…ƒªbrË´©®µ߯õ£cÙW÷ÁO£ ê1A_GyeXan
+endstream
+endobj
+858 0 obj
+<<
+/Type /Page
+/Contents 859 0 R
+/Resources 857 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 840 0 R
+>>
+endobj
+860 0 obj
+<<
+/D [858 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+857 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+863 0 obj
+<<
+/Length 2282
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsÛ6¾ëWàØ€âý¸fšfš›'¾erÐÈJ¬V´Çvûó»|
+f¥vN•¿ö¨ª8µ­'Z[=¹§w¸÷@H•² À=ù{ÃLÈÊ„v?Öög„ÃË#…Ö“<<ýnZ ž¶ª:¼„œ&¡ ¹¬âz~Ó@Ábu³ëY'!GÉ`=Ι±ÞE{kémÚAÇmmèŸ*„
+"sµø¹Ì\ýïiß
+ÆX·zÿ”‚ ШJ#¥p±é%„—V
+cb¼ÑxžW ¸€E·hYë¾J^<ƒmyzÉN3ÖØö˜«ÅÏUöî}Oû:ùk‘'Ƥ1ªJ³« 6z™à1Û$ÏLÐ\—>› :¤óP5;§Rg2Kƒƒ'£cœK EsÈ9÷GØ› %tD?-À€=£Ž)¨1
+*£o¦)(˜×v@AóÅuù;Ššz¸ÙÀ>qiÀ>)@ÉÁ"ûôò™-Env-:®Ÿš²ZÐð
+Õ`š|ÿÀ. …G`{qTÔÂÎsEW<ŸÌÓyÖÙ?䈙Õ+<©$†NGO &r–…ø›çbyµZÌ×ÍNóÅÃü~u{3¶‡Óü®¸}¸‹Û=}»»½_.îá4Wm¦±>.¯W‹õ†5À•V»ÝêSÑ“rg@ôÔ§TsÁˆ.V‚´²RoVkKJðIÒûxÐV'ÚiÃ<^.Iªwòž¬¾£^Ñ¡ý~•ÜGÿf±™ò†¡q¡‡œæÈÖ­¬»TÅ@WøRÎ&/ÔJEžSÓât“ŒfÂÚ0sžï0'//"tŒŒä4žã {dN`X;JäÍÆx³Œ6šæÍÊp b+o6ÎxIï÷š<á%LYù®^®«&â”.®®ËµD‹frN.[·2Á¤U¢®Ú@”ºZ„4T«‘¯dÅm'™€6׌¡e±ì0¬wœþ´I6"ªö†Þ’N
+b¡^®DÆéì' ŸS ŸÓà|Ð?_Ü?‘u9(ë‚~²yçå=0”^CgÌÃ(óðû$ñ ñ#Gˆ‡­ól$´»Rbÿ´ƒ„$5@Þ!Ej
+À|‹°žö–¯6gâu¬tÂ)®w$T
+endstream
+endobj
+862 0 obj
+<<
+/Type /Page
+/Contents 863 0 R
+/Resources 861 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 840 0 R
+>>
+endobj
+864 0 obj
+<<
+/D [862 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+861 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+867 0 obj
+<<
+/Length 2620
+/Filter /FlateDecode
+>>
+stream
+xÚí]Io㸾çWè8s‡ûràM¼ƒÑ¹5úàq«cÏxIœ¤ýï§(‰2%Qr§c'^
+"‰.)±ªÄïã"šÝe4ûpCëãà ƒ#ÍXf(1NdÆr¢x6[Ý|úL³/ðÓŸ%ÂÙìßRp•I%ˆ¶ΗÙÇ›I[…s<3ÜcÙ˜š)I”¬5ü~{óÛP¶#NsÝ~ÍŒ!L»ÌHG4eÙí—ìÓ/«Åºø5×”ÿ2[Óíb}W]Ï‹ûU±~úõóíŸ7ÿ»*Ĺ"Ôؗ׈vS86Š'†ÉÌ((@•Š2ú•¢7¥nÊ}rÿµòýáÃͧŒg­Íñ3üä«yÃ$aFW^¯àŽœ¹,—^T(ˆÁužÉ[zb¡¼£)U¥„æÙÍǬy“l÷n ž$ÑÚqã+ì/ë2¡u9S*ËÃϾ©Ä(ÏǬUü­ËÿCí5½!Zè,‡#h=XÃC{sÃáôÅ-®(s
+ʶÆJš¶éÓHK‡kC,‡,ͱ%Ø\ÌàYö$òž’¶!ÌbËh²çiá<.«/Ò×Ó-j¾kY¸¿ß³ë3Íï~±ñT ¥1¢êØ1¡ª•à¡X UZùÆ õ)M&¤yïü>ïµË)¶ŽDJsb­Cá&µ6™o¥êlÈÁw>³Ú›Úìã©­Ð=Oʯ΢}å}{_ã}lÈïº/Üè=ÍÔA©ùpJ8úhÜüÚ¼zûòý“YüBQ‘Ê8RÃn£\g(¸´/6¤‚\r
+*x©BšŸëN …ŽCýsNÝßÍNƒƒ
+}<¸a¾J¤…×a´Êó*2¶Ï{òn1å&¤™qa|ÜŠ¼Ïê¸Už—Á±ýsOA¢”:>F·7# QV‡™Ã¯–Û‘Ɉ¦GàÚð*D6‰P]Êôž™R1¦!%1”:ß)p̆J´’:ªj4ãqtm†F¢ð:––H‚ÛÓeØL™fÁb'H^1aˆ‘#F¢« 8ÑÕÑÕ/ÂÕ‘”=>)‹Áƒö F>-£F¥Ké ñ"¾#Þx˜øæŽX©ñýø¸X6Ü÷óz6/¶#„7µwÔo¡w ïI÷i|(©p»xË#BØJ:$Jƒ§±Ü%˜³NGsÓû)!›Ü}ý‡[Áù<'æMòú(° mó 90‚‘Añ ƒâË j;pÄp“—í Æ 6’Öû`˜´ù«FŪØÞëÙw2Z¶•Sµàýüûãb¶˜®‡“¿EjÍᓯ±PÓdÇoU³ìê
+çñuåX•\Ãq«ÍŒÊJ¬¬g{ßy,8=åâAšÿ‰›ÿ™B´¯CÙÄ|¢…žzD ûF@]á€ÁwNíƒê~ƒjßÁÐ6€êíÓtd„
+' ôá2 ™E œ`ÁòÈEƒk'Ó4q—Kú´ÜñY­uzÕ ‘ŽDÞS’÷ŠšE!ª¼íŒÎvº*‚ÌÕóQš«r¢HW¤¯'Uܼÿ
+îßÎ[{Ð@Ü0‚LùLHŽõ)Ä Éýã
+³(¡ñ$SÎ$y{F„¤’á7æíƒH*{'2h(å'MÆùS_¬j»[¢=WEuk $$Ycî9yR6O #O†»ç¢'àî­o´{+šîz6»‡¢±âî•È7 W#„#O"ñ¶q/*VS*ëͺÞ7±xšO—ÕùݶXO¿-<®CÓÁÈ9„,¨"òÉPLyÉF@‘lÞM‹å#,ÔYˆ.ÃTÀpŒÅÂy<C±™ØUÐZÙÙžšØÌ6L‰æQ)=žŽN!m¸‡»A^/’GºLº 
+Gk$Ì=¥Ïœ/"(9éï3là^ˆ‰nù®_;Ø-gŠè×ß (ž¶›eñ¼ª:ä›EÝ3Ÿ®¿$çó>ÿµ]̦ë§ÇJì[1_Ì–ÅH,OVš‡íÁ3½pŽ|{ #NmËÓhÛMŒÿPfá™C)‚08õS Œ`¦š‘HëfÃé»×»Ìí‘ÐA–w£!!Z;‘5ÍhŠˆ(¯m!/Ú<N›}5îÐà îušˆ0uÿø}6ß,7w
+&ÿãÄñŠ
+endstream
+endobj
+866 0 obj
+<<
+/Type /Page
+/Contents 867 0 R
+/Resources 865 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 869 0 R
+>>
+endobj
+868 0 obj
+<<
+/D [866 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+865 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+872 0 obj
+<<
+/Length 2302
+/Filter /FlateDecode
+>>
+stream
+xÚí]Koã6¾ûWðØÈòý¸hè-Ø
+u¬´äú3qŽ ˆÓY.Èõ'òá‡ûå§åý¯[ürU*¥aÜù—×Ê{]‘¶­b#™š8˜Jñ_¤Þ‘JtQé6 <fÐ&jŒ›w‹D²à½Wíö#ŠÍ\Í„S*Té¤a+E i»º AI Ò´ C;zr!ÚÓDsU%¡²xOÚþ¸"û_{v:Rpn‰a†[¥bé…Îì8C¡ ¡†)å4¡QV@†`^H 9PÚ
+éɪj‘ƒ¦€°5ŽI¦´Õ.fx¤&ú*€´àZÊXæ}ݨÛ+Q°
+ËÒ=—‚ì|–ìñŠìxÖ€@vztvŠ>ÙṲúC|¸ÈÏö¬g”Ÿ) ÔK5ôlsûe»n¦¾Þ­¾®ëýíòévu³ž"nZ½¬±ßJÜ”ã@u·ÑYži{*Y»ˆ\qš`Jsݺ†TvÛYoª)Ï&T½×ȘЦ09G
+$Y'ý¹‹3rk¸àKNe<cœOqhs"TËÛ¯ÍÓ¬õêîïõý¿uêïõÍf5õtK8-;ÂWñ$hÁ¯âõM¹µlÎe›G»3# ¢ÏHæ+÷óº’´$Z\L¸tñÚî;Ÿæé‘UŒ›¨T2!MµkªKA7zq4£ü§dÿpJ7u¤*VYKº¡…ÖÐAí9‰øô[0Ìk>;œ-5E€>à”}ÀE„ÐÈÐÈbdøÌû˜¡4S4Ó“¾b¨ëUC]èÐê¶ëCB‹û¸ÜhhQèÐYhq<~v¯Í>·+ gNâûñ{ó<?ψ1­9Ä´—3³ÌàÂ#÷?÷GŸ|ôÔùè<ܾÏ^bIûeIT*›HÒÃÔ é0 ŽðQ×`˜ó9ÒAæ¤d²´ŸWŒ÷Ôc°9ªFžbFVßiÍ ¹êŸlµ#ÝkÕj:0ë`'
+{Ìþ¦Ä¿oj{Ú½ç³u7êœú€Pü|2Œ.œh¾]clÕI!ôçÏD~‚
+endstream
+endobj
+871 0 obj
+<<
+/Type /Page
+/Contents 872 0 R
+/Resources 870 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 869 0 R
+>>
+endobj
+873 0 obj
+<<
+/D [871 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+870 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+876 0 obj
+<<
+/Length 1228
+/Filter /FlateDecode
+>>
+stream
+xÚí[KoÛ8¾ëWð˜ÄåûÑcl€{0j`A®âÖ${“uRì¿ß¡^¦(KÞlí¤r¡8ú8¤ÈoF3„ oˆ Û„ÔícB¡%ˆ"M°¶iðd(+’»{‚àÑ'D0·}/’ce,Üçès2몰–!Í4Ö†Žé H
+,E­áã<ùíw˜Ûb«˜Bó¯HkL•EZX¬Eótwµ{Z¬7ש"ì*ßfÛb»[¿,¯ï矒›¹·Æ$&Ú¼~$Øš¦mK†5HK˜@–Š nQ MJÝ”;qÿ‚í•N£kn“;Ä°5Æ𶽇Gn™ ˜jÎmÙ/ -£5mîtÁ‚ôÓ˜´£Ç¥¦ÔWu´BÉgÔîÇ í¯êÕàÜ•¥K"(s«N{ÂÜz2·‚ [/¸×Ýj³îµ)Ç
+W(…–éÓq¨À4ƒÛW“AjÝ«mMO0èn„M_cÃ`HÛv€m'ƒ½î!Òž’.G2Ÿ4íðô08õçêCúz©Vû³†÷ûˆ"¯<^)Š ø„Wóªº@K˯ª ØU 샰$·«m§Þ”’M̹…àùªwd;8αú';8‚ühä°ºr {K+ŽJ»_Šqiç[°:ˆ/¦~ôç²Ypæ?b³tÈZû0Ž9±0k:,iZçÞÛ§íg¾ïßd~ð0¢âÐÀ‘† ôF]‚{a¼šc{©`T°R…Ðÿ/ ?AJ
+©#ö¿¿Í^ƒ·Èál¼Øy0èWV€ócUÐÿ¼[çëÝ?UØÿ²\­³|$æWša#Øb~B0¥,Æü­ öLkÈÇdD°WJ‚LÍ ,¦¿^Jiw™ÃôÏ5&çI(¢ÅÇ|ãó‹pN§LG”=E>òCZN•ìûá„„[¬™¨’ï‹Ýò©JG²Åf³ÝŒd#TcKøé³%¤s1™~M‚û)jýM?÷ŒHÂÑ‚5xØ4”ùø ^ª‰„5:s,+»¢uüZîwŸ¨{V­°KL€©+¡Z*êQ±A5 ’‹6Ük  @Õl?UµÖv©34xÅê‚S¨ Û
+'ðs;2j+ jÜVBÔDmeâyߔɨæQ!c:BÆ
+H ÛÈE,
+ÖþÓïêe±kC £
+0ºZXö]Q~¨ÞË¿Hy ZÍ¥YÍE
+"-ß–±dpÎ’A$öÅùÛX?xÓúA´ ÷ü4L½’Zï¾àåÕUeGxÕ
+endstream
+endobj
+875 0 obj
+<<
+/Type /Page
+/Contents 876 0 R
+/Resources 874 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 869 0 R
+>>
+endobj
+877 0 obj
+<<
+/D [875 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+874 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+880 0 obj
+<<
+/Length 3374
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ko7¾ëWôÑ>4Ã÷ãj 1`†½>Ȳ7#dd%²³Þüû-vOóѬi<­@3ª…73SbÉâÇb=H6ï~ëx÷ú‚Ï>_½»øé—À»À‚•¶{÷ŸNf¹íœ—LIѽûÔ½!™a‚É—ÞýúÓ/B˜²¸gÁ;à5ü×íÇëíõ·¿cÉTÇÏï.þ¼ð•w"±·–ß]Ý\¼ÿÀ»Oð§_;ÎTðÝ÷¡àMg„aÞkø¾íÞ^¼Y…,´eŽ‡}< 4TçÄŽE+/!@2AvÎ(&½åðï—Ƽ¸ÜþõyD%
+uKy9¨Û0.ÕX÷ëíßlzex­Q¯
+
+¾ÛºÞŸÿwyóÇöó׶jc ˆèGªnXqnŽcqc½aÆùý±œ9¥*ªB† ºà‚3v°n®?^ßþõu7‡×Íæ~â¬9ã
+†DÏõ ™?;(õºŠ^ Ì päöTe"Çøñúâ}'¡_Þ«ôùþÛy!4
+mº‹·]’Ç›.ÿ+;(€ßý¿ü~uÓÕ‚zÓ-ópLJnTïç^êA™ª˜5ܪ¾Àì@ ¤éÙ+x6Q% LÆÀŒµÁ¶¿Ë§2qân˜Óqô1Jñ`"î¸ „Â~WmLĉw¿—T<ÚÏ+èç-èÑvömú¶Ó=*œ~.¾rF [Œnààj
+Ò-RS·- Êk[v!s¬äÀ°ÁU%Ǧ;ʳ3­’c&§ŽgŽ“xrÕ…s§b¹¯¶¿;¢â©Eˆ‹ÁCMzŒ
+&¦l9y÷&ëëÕf*š7Kg–™VwÍTÍ \—ë—„ÙatµTgZ½‚Es2˦çÍVˆdi+¥–æ-NLÝ.§óN:å„.äXNéIŽi
+rÌ´RŽ™š;8fáä¾”bLÌsW¿¦Ëó%lQ„¨”[@ÔÄ©ÇÀö´ E°BÁ -„\T£ðß,ˆfa+åÔ  &¦Þ¶¨Bá×´Å26þ-LZ,¡˜CÀ‰`ûɹ­`”¢#/Ž¼8òâÈ‹#/îô½8ºnêt6u“ÓIN'9ät’ÓùÏ8Šq¾â.Ü“&•_ᶵ㸌'ý ÎsÒ?n8òjÿmk:η;—òuûyÏÆ(/0vÍóý»Q`¥ iicÔ œ€DƒÈóH5m{®žàá[ÚŽð/ XÓ?tȶ¥ÖÀIÖl[ Ò sCßIg‹<:Pó¬o1x’
+ö˜ ¢owü«pýL½ºç†»l–MpàäèÀ-:šÊØüVÕo·ß÷zšÑ—÷‡´é¡®¦²Š OWÉ=•är9Cg× :/–É9\ÈsŽ×ÙÚrÁiƒªLªÄ,¤l3²dYÐJ÷« ç¨afYÆõ³"*rª¹¡uoìP”¶}Ÿâݨ°fÑZ´ Ò£š:õ.LDìÈèà}Az#"pd\ðÜ,‰g•è#Ø)ܬ¨±(q¶ç"Hé‘Ò#¥Gaªu· äQn®æq·@ö Ìwï»z²
+l˜Íë‘6Ó*©h¿Ä² •ùòLFÆpY*•)-XÔ]eËS+sÁÔ™Äév«P
+,*”¢ Ò™š:u‘.GDâÈÀà}i;ÝJ•`+év8ðqÛ,Iæüt .ÉÆ!‡lœÇÓK´“óüwr’IF&Ùi›dò¾Û¹*Õ‡n†ãÐ7}ô–ºc¹Œ×q®:溱˜?ÞíÍtÈ
+|×4fvÿ;¨-i†KëUKr¯áé\Çp~†Ǥ¦ÆL¤ÝyŠ,Æ›=?7š¡ÓõMsÜš¯ù¢;‰žåëYiÒ4|/Ÿ­Oei莟á\rfE¶«qÛk»1#­ÆzÙËùóºkª©Hcƒl v©™TÖËìÒ°XT`ß!‘Ø©{:lR£½8=6¯§Âû®EêLñNKZžÛÊ@[COëõÁ´Œ=ÍeL±C.a_<òV98yô†Ö ˜Õþ¨(‡ÑûN 03ígý¾ùü9žÜ½Ók÷åþàÌ[»~ðGê¸òЉÊGRcé•i‘©;ËÂ2m$…a‘/89-»"·»0+r÷&«"K`2*2³)è’©/™¢EÐH—‘.#]FaÈGW•û–©É{+çÓÎy+çÝiùnù¢œÒuK]Ìž[DrÜ2 óÛèÒ¯/ý¢Xî¹ÆrÉF!…lÚTzŽ!q2©È¤:W“êÌnd<>±ãòa<M°˜X>§ý£Ubáêîöë×Ý×Û¿¾|»û{9µ
+JÔÔÏÄm'Œ)*”hx Um!ÐûŽŸÂ¡ç")7C¹Z h1 Å€Jn=Õ=ö0XíÅ+ÃÀM
+ ¥¥7^Š-£`&º¦Lß2ê›ú*U[ôqâ–D1¶¼|ÛES¤åƒU·i¥@oV9þÍ*‡žÆ§¬àÙžð 똬c²ŽÉ:¦sF”T%SžLy2åÉ”§SnNFÇL® ûï2VðÙ&£·×7×ßÆÃm4L
+endstream
+endobj
+879 0 obj
+<<
+/Type /Page
+/Contents 880 0 R
+/Resources 878 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 869 0 R
+>>
+endobj
+881 0 obj
+<<
+/D [879 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+213 0 obj
+<<
+/D [879 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+882 0 obj
+<<
+/D [879 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+878 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+888 0 obj
+<<
+/Length 3152
+/Filter /FlateDecode
+>>
+stream
+xÚí\Y“Û6~Ÿ_ÁGª*Äâ¹ocÇv®MÅ멽œ<h$zĬŽ±Ä‰3ÿ~ €5É[ÙÚRÕX›FwãC£ÆÙ]†³7WØ]?^¸âŒd¼BËL• š-6WïÁÙ}—aĪ2ûd7™ •%‡ò:{wõ6Qj”"BÈ18“Qâ$¼¸¹úÓëŠeª$•Ù͇LT•4S\"%²ÌÞçŸVu½®—³BbšêMcKí~Þ¬ëýì—›ï®^ÝÚPÌPYÑ竃>ꮽ`Žf$S %FðÇ ¸Þd†õÊÈ \“Ç)¡%êË›«÷SË’õ×_à‘VóŠpDc•¹ßÀ=\)©²îºÖ²@¡Ž î‹OÉ ™Š¤"•bZeWï²Þo3ÿH@vÿÂòb“ÅŽz›¥eýÐ+S…0.)×N(AŒ•BL“✊J ­ÏBYãÒBWH±
+ǬüP¤§u%SÝ“K$”©í%Â°à€—P´#™º^ËžÑÓ‹›½02á§K­3A æ„œ&”U“ÔÞl‰*Vršà%F~„Ž–•Š8­ê•Œüèi‘=¹7ÜKìÜã›ÜèUìؼ¬±½Î‡I÷Ä.L»9‡˜ÚYœ
+=ø°3Gæƒs÷Šƒ ”0Â6»ÛfÝ´–1j\DXÙ1þ6_?Ô+¸ÙÚk»ªm=øŠR︊iÖ¯>>4÷›zÛ&ZQ`=í™»Íf¾]"sÔ?‚ƒšS n”¸~ ÀH H UÏÞCÈÁ8¿Þܯ›Ÿ1¦õþ3`“X±² D 2³ÕÀ«Œåõï­v2É_7õz×ÚO
+ã„Úe%‚«Àe©’¶Ìä
+2´T›Ä€Ö•LmOVêA½Dï‰@vG3C»W3`í­éŽÍv ¥´›’ƒÖ§Â0ð5Xx)u˜¤Áž
+OÛDõ)9×(EÂ(ÇdW&“æxQ#s¼®Gúˆ"ªÎ5–d%O˜ã˜Œ9ßé>ú^ÿ¼{¥š4Ï‹÷V§z2ìÁŠ‚ŒŽʾABàÓ{²zÕªGvÉÕDàs\“1ðï£À7àŠ rÊ^Û¤M%AúãŒ8³¬žŸŠW'þ¡;êŸ#»¬±]Vá'‚dZ0H Ú±'FÇŒ¿™€ñµù}=´oX#¶¯Óühà(¤NÙÎŒ”Â0ÒiÇÑØÑqE±ãfŒÅ˜+¶Éi{<xô6éAHä¹6éQ®ª'lrLƦMÚäEmòÊNïmi]bÁ3±ï'8,53ÌÌ­§Û7vç¯t;?èUûn1w{zÕü!µ3GˆN*éI[sÁFÈ÷Q$ÞÇIoÝE_í¸Ï`µ‚¤<z.¨€a ’üéKÈÐß2q wFï+…*°áÇLxü1mc­è:dôÙ1G _¤a-SH£–¿×=U?&¾—’ ^|™–™ÂHÁR#jùë`OjÔºàÐwBããnŒ±ó s¦ ëTù„)vqÊ0ÊtÏ9AJŠÁ
+gŒ™[dQˆB\‰šüø0߶î `4§5…*¥éû¨éoÍ ‰‡Áæßöas[ïûf7ÿÚzãøÜåê£i¼=[ï1V`]©ê<¼)Ãà ƒšä‰W) É-¥œÆEúN+ĉ[Q_¿œ܉M&¶¹Ø=lÛý£ý³Ù.ˆ–»ýø¦H~‘ñî\aeÁTëºm 耺Ø-ëîù¼íŽ Œ²Ýƒ«áu™C V.óݾ¹k’‡ šƒiës"ò‡mÓZ’Þº~w3Se~ýãµæo,Á¢Ò;Ú¼V–ù·[Ë~hçîÏpÍmó[Ó6µ>â\$4‡”Ñ$¾˜»ÔáÖ½‡C½ô‰¶ Eï¶nôuÔ;ã¸ÝÃýáÈ |vïˆPö¤ôôAx¦ =™R K7f9óKH+!uÓ›sƒ“Ñ<±ÁÔŒZØ|ø`ÇŸ>w… z˜~§)‘}‘&¯u#oVP¥úD@ÎJœ¿Ô¸Ôô[÷ÜâÒPíÕ¢‹ªºÐlum\V¬‰¶Hyma™·î\ÊEÛ“Åi`?Û/#Lj ˳p}® ƒk ©¤ ç&3J°!-/™[â3 ì[L";lr¾\6º×õ¡¢^
+endstream
+endobj
+887 0 obj
+<<
+/Type /Page
+/Contents 888 0 R
+/Resources 886 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 869 0 R
+/Annots [ 883 0 R 884 0 R 885 0 R ]
+>>
+endobj
+883 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.392 654.518 497.057 668.466]
+/A << /S /GoTo /D (figure.caption.23) >>
+>>
+endobj
+884 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.093 632.197 125.758 643.808]
+/A << /S /GoTo /D (Item.32) >>
+>>
+endobj
+885 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [292.127 620.242 337.596 631.853]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+889 0 obj
+<<
+/D [887 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+217 0 obj
+<<
+/D [887 0 R /XYZ 49.606 685.857 null]
+>>
+endobj
+221 0 obj
+<<
+/D [887 0 R /XYZ 49.606 667.469 null]
+>>
+endobj
+808 0 obj
+<<
+/D [887 0 R /XYZ 49.606 614.264 null]
+>>
+endobj
+890 0 obj
+<<
+/D [887 0 R /XYZ 49.606 468.863 null]
+>>
+endobj
+886 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F84 441 0 R /F115 467 0 R /F90 447 0 R /F122 591 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+894 0 obj
+<<
+/Length 2229
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZM››8¾÷¯`oøyÆŒ@ÀäÔ“Nçc¦“ÞmÏîf“9ÈÛì`pøH§óë·J¶‰nã½!‰·J¥W¥RÉÄZYÄz}EôóË• Ob¹–9œp+©ãSk±¹úô'±bhzg‡E¡õ(;n #wgPά‡«¿w!B€ð|×ñ¹;„A,ƈp ñëìêçÛˆX‘qÊ­ÙÔpHhs"Ðf[Ÿìw“?gï®^ͺ.q.Ⱥ.w(ã]‘ÉW‘5¢N‹|2å„Ú%”óÕ±”ƒ4´"¡w åÜñë*r“¬Ê ¥v’L¦Ìsíb©ž‹"ÿL“|¡[굨Ui#žTa®›¶™X$±ÈÛîº1Í—E9áž=ÅášS×ù¾’¿ÑF`¾o+E¶êQ%y-1}nÏŸT… ÕÓf^dÎdê“Ð~[«Ö´ÒëâQ#ŠJ=‹<1 Ï’ºNJèBˆ-òX°¯,äÍf®Zqȱ®m¶ºÛR=ÿ1ñ|;ÉR1O³´~ê6>ÍÂ(^‰tû¥rœî0 RbÀó­´ŸjSÁ YÄìÏÄ'³IÚ×ﯱõµêM}×…6×1 <Öõ@Î^×_$Û…l¹@!ê>¹B’"n¿O0Ä~Yl¶`×$Óðjh(3K~ø€hL­Ý¯F¼?ªFd烽4‚ÝN"j‹´<Oøƈ÷¾¨P3NËWæ!çÏG¸¸Ü5Ï„q¶"Ï[¥åò…ç›x•ÄŠ1ÓÎl·Æ<ƒŸÏ ÛCéqT¢WƼK¿TÅjÇÓjØ4Ô(æñ%@1ójüºlNšõ 1nU•>Iß3"Ýͼ^6Ù°¾ñÛ·›í~D'ÆÁ³‰ëq›zý,št7)ßó/±GÅÁøø áÿóÇ÷O Å%Ìá®Ûi€
+tI“§šq…^êÉ—&Ýn P¯qZA¤ñÔrÐìcü!s;` Ù9êb›”Òi‰lŒ+yhæU-ò:g ò!wr'¤û[¥¹8_Iox‹:Â1­á´
+˜)|¨ÀžÂ‹öì tÚq¢÷£Ý±luô:[Ãcn
+d]Õ,ÖêMèO®ßL¹§Šrã—mu-™¶þu’¥‹b[Ÿdî¹C>¦ à²
++¾Ë\;ÖUÍÉ7Ý#0Ùu­{â9;V‡ã8ý
+›Îk}“1móúàl1Ÿ«ê¯iëÚšV_S`aS䨧j̲â­‚ ˜‚”= £¡åPa2âÊɘz@™É¬jõ²i©JhCO2JÙÇÝzTªOÝbÅâé”´²ªdQäúúeý„Åp³.šò^„xm…Bª¬ÙÿÙ&Í›à©ÇyÏ2£ô‰²Ì8ì&Ÿ¨ë$Ù('ŸŒU°J´ç@ù²Deä¤uºËY ànßÊ\ki¼Iiêb#ä}‘ç1»zªêdSý„VcJ1¬ÞYÊòËC`v+D«Ï±
+é!•3p[3¦å1–±´ç1¾IËÂ~xòK¶&Öµ…z¶~h`®N%#<çÑæ…î0ÆÉ ðR ¹èà—ÆnX…€£HÙðßýÛß8¦Í¯#QduZ7±Þûðî7ØûF)aÜù:J\ï”`~¨¯F£}RUU«»ØÖ @û*+æ"S•°W¤èCÕNj¡™V nx¯ï†Cµ³GzÌ2â;áð9å4S/Ä@¦FÌ »4?àÕö±—§#Å™xz /+N%eÆÉ5Ró@îïbGÌÃôKVä+YÿB½¯Êt—˜Ñ‘PŠnrÀž­ï9":^¯ !^~
+endstream
+endobj
+893 0 obj
+<<
+/Type /Page
+/Contents 894 0 R
+/Resources 892 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 869 0 R
+>>
+endobj
+895 0 obj
+<<
+/D [893 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+896 0 obj
+<<
+/D [893 0 R /XYZ 266.533 720.149 null]
+>>
+endobj
+897 0 obj
+<<
+/D [893 0 R /XYZ 266.533 700.224 null]
+>>
+endobj
+898 0 obj
+<<
+/D [893 0 R /XYZ 266.533 680.298 null]
+>>
+endobj
+899 0 obj
+<<
+/D [893 0 R /XYZ 266.533 660.373 null]
+>>
+endobj
+900 0 obj
+<<
+/D [893 0 R /XYZ 266.533 640.448 null]
+>>
+endobj
+901 0 obj
+<<
+/D [893 0 R /XYZ 266.533 622.381 null]
+>>
+endobj
+902 0 obj
+<<
+/D [893 0 R /XYZ 266.533 580.672 null]
+>>
+endobj
+903 0 obj
+<<
+/D [893 0 R /XYZ 266.533 560.747 null]
+>>
+endobj
+904 0 obj
+<<
+/D [893 0 R /XYZ 266.533 540.821 null]
+>>
+endobj
+905 0 obj
+<<
+/D [893 0 R /XYZ 266.533 520.896 null]
+>>
+endobj
+906 0 obj
+<<
+/D [893 0 R /XYZ 266.533 502.829 null]
+>>
+endobj
+907 0 obj
+<<
+/D [893 0 R /XYZ 266.533 481.046 null]
+>>
+endobj
+908 0 obj
+<<
+/D [893 0 R /XYZ 266.533 436.812 null]
+>>
+endobj
+909 0 obj
+<<
+/D [893 0 R /XYZ 266.533 416.886 null]
+>>
+endobj
+910 0 obj
+<<
+/D [893 0 R /XYZ 266.533 396.961 null]
+>>
+endobj
+891 0 obj
+<<
+/D [893 0 R /XYZ 266.533 377.036 null]
+>>
+endobj
+892 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+913 0 obj
+<<
+/Length 638
+/Filter /FlateDecode
+>>
+stream
+xÚ­–MsÛ †ïþ¥ƒ ¡ÞÒÚéL&m§Sšæ Ê8eª¯Èò¤ù÷Çrý1c¹˲ïËê±F=#‚>Έ_f`F‚
+GXSë"Œx†Ù^•¥~Vu¡\¤nú¼×MíV?HLŸ¿df6DdíVÑTÕ¦ÖÑ1X‹¡ÄÚ»¯a#; »²^ã Õ—¶åIfv ½ë+k XSÀ —çoâÛy’kŠ…4¿1fÌ7ývq뉊G¹kª—n+U÷l•wËæµö+]Ã|š§ãœ=-vž,^ÖS2p¾†ˆõåÑtc¥ëM¯Ögà»Øì!9¦DÌÓë軼Æö;â°y (–L"‘Âpbh^‚Aþ³ô¢ä™¤,˜«uÑév÷·mV¶[7w
+¶y½²èO¿}#ªÊ¥[äU[ê!ÒùDþùDB“˜HŠ"a^÷Œ{ìe›ÇúO¾à
+endstream
+endobj
+912 0 obj
+<<
+/Type /Page
+/Contents 913 0 R
+/Resources 911 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 915 0 R
+>>
+endobj
+914 0 obj
+<<
+/D [912 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+911 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+919 0 obj
+<<
+/Length 3601
+/Filter /FlateDecode
+>>
+stream
+xÚí][sÛ¶~÷¯à£<sˆâ~yl:iæ\:Ó4žsæLÚEfbê’HrÛüû³
+êšÎšB•f¯5þ8Õ
+â„Õrÿ`˜VÛ†õDÝ/
+«Úm(%á”`˜âo J1ÂRÉJ%£×O'å4
+·2•ùXÙº~si"†bŒSçÁ–€‡°eab ¦­c=\O!NÁ#¨6ÞÌåQ \Û‰YWqGis‰»¿´«:äïŒVˆ©³®ý†W’HÀ?7<ÃxÅú"Uûi¯öè[¡ÎŠíóÛnIúõó¦ºZ=÷íÊïLêO“{TtUÜÓÃvkµî ­ß¦MâZ
+§äQ4ò(/•G9#pÌ‘À1Òl
+&ÉïÂÎ)8N¬6>>(Ϲí,“F¶Y®‰aûŠ(ÁIS*ðÑËùy|+·ÎI«êJMU’+ƒ^,ôA›gI %Œ ¿})5•
+|ÔŸJ(õ¸ÔÑTŒv]ãÕaô¼ËêyËì-«÷½£Í“·-Þ6x‡½[æÞ±v—±[¶n™ºÃÒmC7íÜmæn+ã~0$×?ºRt¥èJ‘ÜEr½!zCô†˜\ÀäÂp»CÑŸ¢?EŠÉ-Ln=³MÂè¸Ñq‹Ž“«O4¹*#:êèM®
+]qå \'Ó?¦³éxÑ•Mݳ¿Aüv1¯SX÷§Q(?ÅÛ|gË{ŒITL¢>~•gÿƒÿÆ•ã ¥¾Áä8½)wdª}* –—p)ÄfJB®UVî†q„3
+§e>D1jÛ  ”[ÿ½ð7yT;åõÊux矖þÍ`pÁX?¹ òx~ÌpWÖîÅ÷WoJ¬£Ê·ÉŒ2Û¦ª…ÑJÀê $·<ÅžŠTYOr#”ÿ7§ÞƳf¡sB†ñk¹ sIpiƒ«“pÛA@°mYÔa·:j±¥`ײ,tI„õZ­LéüD€¡QW Ìç ÀÀeGpU®YsEÎõ‘9Wô•è+ÑW"uþPçèîÐÝ¡»Ã f@î™A‡‰&&²0‘õÔYè™Ñ3¿TÏŒùÈ“ä#­Ÿ²|e²#)bo:’@‰)?Yðq¹¼Ž©Èëéz³š~¸Ýÿ5F€7 ˆøýÞ”‘äÆ1%‰)É|ñßO{P½ð`>>Iå—ŽUAžJvv®LÂEµÚ–¥‚j©Öjê¹-¤D{!‡üö7&¥ÎøÝÅÿHX¹R&µCb“Ç}_q&b(Å8sZ†Û+ÄØAŠûü_eDÌœxÃÐÀñ&’œþcgIÎþýÅoÒ&1–ã*ø„ߘÞQè¼R7J”SÇ2|GkIŸæ¨?9ðD>µŸãcÜÇÅÈñ}Z_#Ç7›¦/MΖñE!ýLƒ®zº{ø¿=àÌÍñs Èô‘éK°góG1
+|Ùþ—é2%ý~Ï8gæãõ:aŸVã?Šx¸žnŠ=|˜€Øz
+:Œ)G¤Åç"v:,eÒK‹æ{‹êÊó½…µ— ÝtÉÎcï`HµfÒfèZÿSÅ´?}^S–Ê¢$ £? Ê2íe{KòÀ X ©:ËRÍ’"iKÆaÀ™eÂÖ›IEuïªÖ¹Çvü†vR™ŠªLÑ—0Òf/æw”Õ[Ë;Fš·ìQÞ¶dUÞ1¬¼g\y{ó­Ú‘!Y‰dåc’•èãÐÇ¡C*ù‰SÉè¦ÐM¡›BºÿÅÓýèèÐÑ¡£Ãd &c†JÆ GEúÔ<*fËžh¶Œùëvÿ;ëeaW}Ì–×ÓÉx³d›U1Þ̋ŦëC”Ç“élºùÚŸF3œH}Š7ÚûÇ?.Ç,fÑ9‹Ö0ê¼Ã4ïvïÍŽ‘C`Œ˜ú°Ë’Vò]Á¼[s-˜kyÌ\Ë}ô% ÔÏK¬P˜Z”Êú¯ÊÚXèÎû¤‘—G^þ@^¾QuÞn¬œ°uu]í¿ó_~rŽ7¿4•ŠÚSºC4ï‘EÜGgpq½ódy¾çéß‘ç»χ¡hFè PÔÃåÜAc´Éœ6`·|ŒsÄ·Ýð.ñÈüKoýM7¬¤c4ôJRøúêâÿîWE•
+endstream
+endobj
+918 0 obj
+<<
+/Type /Page
+/Contents 919 0 R
+/Resources 917 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 915 0 R
+/Annots [ 916 0 R ]
+>>
+endobj
+916 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [123.111 737.637 168.58 748.64]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+920 0 obj
+<<
+/D [918 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+225 0 obj
+<<
+/D [918 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+229 0 obj
+<<
+/D [918 0 R /XYZ 49.606 724.696 null]
+>>
+endobj
+233 0 obj
+<<
+/D [918 0 R /XYZ 49.606 704.111 null]
+>>
+endobj
+921 0 obj
+<<
+/D [918 0 R /XYZ 49.606 680.201 null]
+>>
+endobj
+917 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F125 600 0 R /F93 449 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+924 0 obj
+<<
+/Length 2882
+/Filter /FlateDecode
+>>
+stream
+xÚí]M“㶽ëWð¸{ ‚ïÜì*{“­JU63)¶ö k´™II{FkòçÓ Š j$J«¡¦]ã%E=6A°_7ð4ûOF³3ZmŸ1ØÒŒeÊ›ˉâÙb=ûü…fwðÅÇŒálög[gÒ(¢‚ýUv3ûÔ0 if¸$ÊØ¡ói¦ 1’W§ÿx;ûËÏNdŽ8Íuvû5Óš0£3#mv{—}~·^Þ=,æ«÷_n?Î~ºm\3I¨ÕG\”F•¶µeÉ e<3J©¼áß3
+䬰­À¸?Üý£ª ú͇ÙçŒg­õö |å‹9ƒò3#„+>¯á3l9sYØ®¼-(O€Á缓·ì4Ayd)ošêÝg³›¬®ŽOÅí¼ÊRþ’Í6GV6¸¯vÜø[É;W=pø%òÞkäÉ‹DÁ•ºî©š›î³éTòMÛfùÜœë´0Þ¿Àiõs±ÎÚ¾ÿ©yz^Ÿß½‰MñoŠi â€ø9·Ä~BkN´„Z*sóB‡'Ä,‘\qáëtðXÓ釆³Kÿí‚Áê×VQ”9³P+V
+¸Ÿ'(õç³åœ®)køÄzïÑfцŽµüì¾ Fá·Á^pÛæç—y­éµvœ×
+I çà\šØ2CœÊk-aÚÓ¼å@§å‚«)o:hß1ƈV©¶ö¬ÏŽ6€#§õ0¸m¹œ¶ôÈõPi² XáCõè‹GŽùø}¿Çñ¶Û«fÓ\ßõ'àzÐ&‘\Ï2®Êóà¡™åǸÞkˆ—þ3¾–«½Èõvi¸ibÏÑv£føh3{ð#£æ)²ý…·Îö'›’H7ݸÉR3nI7àþ*ÔA4O Û…O²áÛºMÝÅwwÍ–ú€‰¾J°q†x¡¡C+ñ; ¹–8ZÚР8ªGB+Æ[±ŠHƸ¡ W™0ŠAä(ê7)hëˆU®’6Ë´v
+]Ëa_À¹VRøJÎd2A¬vò/1ÆGètk¦˜ã7¡<}eÉ_\˜¼§4y\œ<.Ož,Ð'”DPù¾’²q QêA© uE„Bë
+,¤ä„)y~YN€y”å®T–CîO9ïÄFfØxµqXM{¡Ø8ÊHÐ㣴Fx´DÓ=Z£`Ä°j¨ÒfþÇÐ@%°E¸Óç<<mQlD±ñbc;¨ùà8°!ìa¡­¶À…‚[°`ʳkG@hš@”ž€Ta
+þ/¯&HTʺqR´.'jƒ¨ ~m0Ms$y }I
+íÍø¾L°§BP‚>*Åórþ š‡jÞ¹) ´oÓjŸ?(0ÐõS  ¨Ÿ1ê
+(€úÛêo''‘ôM µ'T á,¦Ï ”ËP.!—žªŽCHwe¾£‰þR
+W‡l_Öº¨(q¡Äõ
+$®š?Ç+\ÜwM”a$Éž
+TaäiƒRÜAu«¡niT·Æ©[c³‡W¤¤ö=à ·ªßÿ*€ú £¦Ÿ=Zê;“¼¥QÞº´¼52‡xMÊB¸Ì!4˜C"ÐäsŠ[(nRÜ›î¼$%„)ÓK¥»€
+ W#Ô Òê[gÓ·ÆýRT"MBß?`ŠHQEößž6ÛåÝûÂB1ëÔ<-uyG¢ì,R§¡RJ]ßYê
+èðÛùæçݘY¢œ¤Òû¢?Ρù#mÑoâDR§Uß!(V^}~¥Ö¯åRªÂpµ[¤±ö·y|v_¡ÈšÕ1(•…VQY)ÞD3S…ãráËßþ:>¿ç÷[­ÇGµ‘÷Ü{ï±pµPš¼YÚ¼QܼƒÈ;FòÎ¥š“×ÕW›jT¾«ÿø뎾ËÜwoüfr:#Cqò:#/ ^ß-x¡Ò‹J/ÆŒ?o´ñ„2ûUÊìÂ0„½•&¾èÀ#^t`¨ÄPùfz›ø–)õ– ú‡Í—’}o™$Øð£ÌŠ·LÏó¯ËòÓýã·ç©I%4±­‘gxÅ$5‡³p]|Åô
+FS;,ò¿2(FúBaK Î NKå|j&ZÖ`b@PAÅ›~þ©;œº lð…­Ëú _ràKŽK¦®éÃŽ¤Ÿ¦ZûŒOŸI“ O…
+ 4}"àÔéƒÓ¼úÕÚVnT
+N*+]T
+ 4]#à ’ÞkÒ¼PòÚI^Ò6•rpâ
+<:‹ˆ,(a–¡ˆŒ"òDäieÔYQg=·Î:}F ‰R$†ù·³Q¶»BÙc=*[¨l]NÙ´„òÏ™äèI;8¤ÁV¹Jü¹ØV+­ž·ÕÞãbÏÏÞ™E“ôôª3°Å¹XQz«±"Úissìh=h Bó™AN±äúC(`
+bþò·ÛîP½¬­àWe­‹ŠcõPCºøúC…SŠqrÐÒbÖ3HCbK.AT¢(I¡×Ã!q(‡PuBÕéìyDhhÖÛŠŽ%W!*Q”¢AŒ»‚T‚:ÕX…èùDrN¬_Òn0ŸÔ¾|ã® Ÿ ²…ÊÖé–"j¦>}$c­)¡ô$³©>T@P’±.™úô›
+5¬ë¼T ;ÌJ,v‚3~àšÛ=uÙxê zŽÚ«F‚‹¨4­Û÷ðpßÍ]-ßç‚™wœývœè|ñõ±÷©dNåWt/­ç›Ôº°¯kièùêÛò¹4
+ðb»½_–ç1¦š´OD}â?Vß<oç«U-¸E‚ ã,àëõ|sG
+¯Ž=³ÍAÅ{™˜ú^A5ÀK‹ÈðW<
+endstream
+endobj
+923 0 obj
+<<
+/Type /Page
+/Contents 924 0 R
+/Resources 922 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 915 0 R
+>>
+endobj
+925 0 obj
+<<
+/D [923 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+922 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F45 438 0 R /F50 440 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+928 0 obj
+<<
+/Length 3235
+/Filter /FlateDecode
+>>
+stream
+xÚíM“Û¸†ïú<Úb‰oàêÔ®S{HÊñ$©”ˇ‰Fk9¥ñŒµv%þ÷il GeIÛ[»«ô
+ÁîðMõ¡jª×³&z}u3ûéßTžy#Luó[¥<3©¬L
+^ÝÜUï^fgâåû›_ú…s=”;æ…¼Záßë Û\àç›Ùç‡?›ŠWF2ÛØÊô«æ÷³wï›ê>úµj˜ô®úo+¼¯”±Ì¯ª·³7Gχ;T²ò¥<@ µayŸÅneq¡á ¢²Z2átW ÿx©õ‹ÛÕ×E[[ ¸e>èpm!<S^µ5k„ì®ýzõíq™¸®…òu”ëJ«™Öbûº?ÿïöþqµø}÷ÒZr&íWÞ}æ…æãÌf\ÁlŒsLW¾m™Ub«
+å 
+mÃOŽs°†®ÿýñaõðáãüv•·šç_ºÉ¸ý&g¥™Jb™R!ãψ^W­rÖæ­!ó¼ûo솗׳w•€Pàà¾ðõ=|Š9ãŠq+¥oßßÃ{xÜWøº
+yAyPï넦ÞÊg(ª£œêaV)Ѳš½­6Õñ¦½³,å?«Ù§+­ñ†[©wW‰
+xþ%êä5êìE¢‡ÆÄ!ë¦ÿoø÷ü¾Ú6ÊR½Yׂqh,Ó¢uöïÎû)%™²Um…¯m3iÝØA@cÞÚ.w"Ô´~ü
+Ý÷ÉŶDÑ›§ëtå¬7Ý­¢Oíÿs~<ŒðÌHwÌYqÄa Ê(À*íwF|þÜ1%4´÷{Ò†.UNÄowÞ±+†\Û
+Qºá^C8딄ûYC©ß=™r- cc>pÆû½©Ã¢•Ò¶|™ÐB¦¯~„WˆÃ¼B6š9 V@L:í¨BQÚ/bUÖ1Ä8ÇŠY°—Zæ”>¦c8xˆ…‚6ýyn!$“Î4bè©4èHé´Þö€TâæÛ±[ 8r ¸‡ct¯‘[tÍôX ÎTÝñMߪµVƒi¡ýŠ>_þ Ó>0àKè!{ßš6Ô¥ÉXv/ê5ÃÞMð%4+¡…‚À/,?¦]C…9QÕ‡Xö9|ÿÀçþYöS/e˜ÅžÔí>_95ú ýéþö•„‘8B9죪öcÕ®{Ø£„ýMèèaº.D9y‘qŸç"~<’ €ÂU€:Ÿ‚¯óÐMÂO7cš]ýîóáH©Eê‹…Æ|kyY½/åÁÙŒêš(‘” 
+E7ŒT“õ¾ {åÚVŠ?«•ú< ?Š)®ÛL¤= Þ/Á!ª8Í$Î(kð¡ÛµZ[®™•~óS€Èh Ñ«'Dóåâ~’¡Í¶ð!£=Þ "@t]€Hy5A“YðÝ BMëÆÊ
+&œ™‚5¼5âC殂A ôÆð!ðèTÔ¦qÌh‘D
+E] þë."Ú–mG⮬ĈˆÖ3fDêSÏ0̈ÜT‹^…¢ŒgIJ¬g$"Hô]¶­ÆA"ÎŒ =·Æ²Fó$êT(ÊÙv$ÛµmE”ˆ(Ñ%Å~%ô õžØª=±?–Mû &:/L4Þ½›öúÜèU(Êùa$›¬Fœ(É´÷Li[æDÒ2ÈýÃâáËr±¾/Ò¢ÐÈ5Þ!-ÒJ²†[¢ED‹®…ñ° v-Rtk­¡Må<O‹‚
+EÝŠß›-ÊâxÊJ´ˆhÑ©<ƒ¥ENB[«<§ó´(¨P”ñŒX¶ëœhÑ¢SE}i!Â5ª³mŸ…E¨×ä,{[5UÈ'TD¨èD_­5Îî ü¨ÚøcÙTŸP¡¢sCEcýÐKð6Þù¡ã<Š‚
+E9?Œd“uÀ®ñq¨‡’›"*RÖ·Ípû—ßîÖ‹Õbþeýqž§EJè€LA‹”S0’2D‹ˆ]-±9QO‹”à¶L‹PÔzóŸÿ•£Eƒ¼RC‡ãnPĉ-ÊwVFlPÔÓ"åáÁ[^¦E(ÊxF,ËtVh‡"¢E§ˆúZìÑzSÆE(ÊÙv$›*ê0"`t¢Ø¿FÅت=±?–Mû 0:O`4b›¢ß1¹Ñ ªP”óÃH6YŒ€Q)'¡Jt…qÒ÷O·_¾®oW/kpønÏ3#n¨)˜ÄSÛí.G̈˜­G{ZÖÆáËëÑPÔ:ô_^çÖ£ òš~=1#bF“®G ë D#ËëÑP”ñŒXv’õhŠ˜­G+¯G ö:FÅõh(ÊÙv$;Éz4BF„Œ¦_ŽV ý¨Úúc-G#dDËÑž·-øŽÎ NP…¢œF²“,G#b4 FB³Fª"1’FÂRõÄèë|µ¸]wÄhñi±þð­
+EËŽTSüSà"M¸èö¸õà *}OØGU9îǪ©ÿ)h‘&ZD´è
+Ö“° ˜E|/]K˜¸i¨
+ýã¶î»-Q{ÌNÒÓ}p©åæ61“AMH¦¥SOIÊÆ¡C…9àûA1 o³ÀÛÄ« j¢/¦`11‡øNºŠHÜ2TD¨Ÿ:~^Ã4¼“:~èuÂ0êØxêغêÄS«ã'[ǾN˜G›PÛX°Ãeº
+BÍ$*¬ŽŸß0msK±Ô C©#[ªc[«O±ŽŸtYB0–:6¨:¶¸:a•ËtÐt1¢¹ÔˆQ#F5bÌFŒ~y¹â_^¨¢fˆš!j†. ¢_IéWRjɨ%£–ŒZ²ë ‚4£f4üÈ ÔdR“IM&5™1ø£ÙGÉÙG—T–š~d˜w¿ÿû—Åjñ¸|ø´ÈÏ?Rž5ÜM0ýÈB8OÓhúÑu¬NãÌ 3vušƒrŠóüê´ ê5­ߤV§ DÛ“@»rÒê4šÏpZ¯8xušamë*·6­Õô’´Olk².AëÒè×Ñï2j;&Ô‡s=B?-XµË®Jë4$cÔ[š]£¶ÇšìO¿µÐo-'öa™â¢íQT ÷‘hªxOð–àíy-G= QÞ0á»—å¹Åh¦“d<pK3ÕäØ(Èøç`œØkŸHL8NØ vZW#<ø xtb,ï‚ÕÖfõøØ<_¿
+endstream
+endobj
+927 0 obj
+<<
+/Type /Page
+/Contents 928 0 R
+/Resources 926 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 915 0 R
+>>
+endobj
+929 0 obj
+<<
+/D [927 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+237 0 obj
+<<
+/D [927 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+930 0 obj
+<<
+/D [927 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+926 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F50 440 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+936 0 obj
+<<
+/Length 2972
+/Filter /FlateDecode
+>>
+stream
+xÚí\YsÛF~ׯÀ#Xµ˜Ì}äMqÖ^;GŶj“¬íŠ„DdyÈ$hGÿ~{Ü%Rrâ-¹lh4zº{¾îéi@ÆÑu„£g8?ž8âˆD’!…U¤4E‚F³ÕÙ»8šÃ­WFÌèè³c\E\*¤%…óeôöìuS„Á2R”#¡ô˜  …§AÄwgß<7,2ÈH*£‹«Ha„5‹×ÑÅ<zçé2ý”í²ÍzòáâÕÙ?/jÃR¢1ôˆqqËű”Ì’TGJ0Ä…ü1¦‘ã<s²·äî_Œ”°íáÅÙ»ˆ"£5U?À-«æáˆ(ÆŒ»^Á5)1Qq\ZY OÁ×IOÒSgJZ’’º¨>¦Etö6*ÝñÚ™ó·Ôò×èl}¤³aj¥¡Êš’tˆË܈¤wŒdpÖß:˜ˆÆá_ý|¶Šš “`0¤!\ ΉÅôE—ÏSNÆ:J”ÄÈ('ÅÅ°&àA£”‹á‚«`r|ñï"€« k²¬×ÕXNդԵ뤵û9ɵ,¡dt×H+ú€IBRÄø‚.ÕsD
+¦¸h³ Å=-.G
+à’P‰´å¡âBÂ+úý¢‚2Ä´Ä´}4BcZˆf
+<C¸nr=¬¡bã
+`­ÏÊ…jð—UÑâZ|…Ù^¸g-\WEJ]Äj³ä§¶3~ÿÏùPMžô¹…š­LG“~Áu é·Ù:Ñá:=<ÊjèÁ³>Ú&9öU¦}2”ðÛ;™ÚÈŽ‚ l
+ÖžZ|Uµ7L¢~…¢C{’‚«`
+ÃÛã-R”k·H?Ê£ðc=ýpÈ aê¸ÆÍà ¡’Šˆ‘ûl±j“E#u“Hà¾)'±¯9$µAZ?‡·Óí|¸5KâL=BkHa#é©7ôÔúÿè IˆÝ“zC Êzb{C˜"°¼¿5˜‹àßß|ßi 5ÙšYØ)úÔzê }¡¨Àæ´ÖAR)àṖZCž«`
+Œ6_'2°yj=5‡¾PÊg
+1n›C
+<ƒaØd{´
+ìëoµã¿êòHÃĺš^ëò
+±ž•ÌÂá; ‹ ‘2ž^.ÓIˆŠ)ýN ëܸÚl팵:G†#¹ {aû››4p5FŸ(@קérŸî¼Ôlíù"õÏðHõ N™.ü)[¾\ïòér9ÍÇK­À|BIÁ?Û¬VÓõ9¤µ†àÚ“Psq„…­_Ò&À”"‰hãñèÄ3Æñùêf™½Ç˜¦Û]“Á–ªr ®‰@dâ¯2§æ`¶`ñó,]ΛϷ]@ ”e°*Ý˪`_L­£) õÇ<»ñáÊ°œû‹iͤX‹‹§w‹Íçµ?ÍÂñùD±8»Þo'pá&/à’¸?yã¼å7-Æ(Ì6€¶Òœ
+ûûMo7+'ðmÀ®÷°ˆÞõl®&0WÌBg—úÓº² ·n–ÓY:·ç<žÎÿ€‹užßøc:-üÙDn'†Æà
+A°»ö¶Àõ&<?Ýç›LÆ æäÖ“²õ.Ýæ~8_¦ùç4uSåÀQ³Z¡þ€á%ìk‘8âeSÖFª¥^gŸ\°1ì‚ÌÑþ;a2NoýDˆ?™§»Ù6»q°rëa{ôž±^,:
+E!q®)$’PøSKÅn Ã~ï¾·Ÿ¸ÚWEu¨uåÆhI¸èáß»ÐèxQA\)V+B­ò®8u½á¤Ëã;Æ ÖT-¬&H3®]]œ´iž9 »CÚ(w dRC¥…µÝ.k4zJ|Ó¢©QCœî€¥ÚCU‡¿Œˆ@˜»2‹ÖJ=z·–´}Gc[ÒÂvý×Í==éÀU0¹0~ÓiI·¸šuŸ×5©”íNrÉ*‘Á̦Niôqv €Z, ¼Ž‡¾ÊàsC£‚ÉÙu>á8~Öi½5y¯ë3áUN*G ƒÍ:§ìTÃ(†ŒD˜œa/mªDõÙT©;b“:/â›`Ã
+LΤWï ã? ÚUÉ뛪Bã>³ìût)ÂN‰#ÑG‰}7OCªC_l®‚ÉÙõk'¶¸š&e“JÛ^› ìç°©;%KP[¦@:ž%
+®F–øÍÎÕïÃZ¬MÂÆ2E¢%†œ”*(a°MeREÁÕHç/»³ÕdkÍ–×v4U$š ÎÉi¹‚ÂÊO ;+
+®F®¸èšÔäj™äµO¥M6òˆ<Õ&܆°)09›þ3hS%ªkS¥ìp+©Võøj>©•ó=]õŒáˆG\…®sk³ìöÄ„NËv‹´™MÃÆËnQ®úš!„X‰ôžÝ‚½¶ñ‡ª?\Ô·ÍýÍ’Æ7@Ü€eÄ!Ôøo‡qÑ YO÷ëdh û( %—ã<ûÙcߎ«w  ŠxŽ4¤é‹)é|ElÃV˜™…¨i ýƒ*ØŸw?¿’1Ádd¦À÷D5Gþ¾ÖèŒ.
+endstream
+endobj
+935 0 obj
+<<
+/Type /Page
+/Contents 936 0 R
+/Resources 934 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 915 0 R
+/Annots [ 931 0 R 932 0 R 933 0 R ]
+>>
+endobj
+931 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [496.546 598.844 511.211 612.792]
+/A << /S /GoTo /D (figure.caption.24) >>
+>>
+endobj
+932 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.093 576.523 125.758 588.135]
+/A << /S /GoTo /D (Item.44) >>
+>>
+endobj
+933 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [292.127 564.568 337.596 576.18]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+937 0 obj
+<<
+/D [935 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+241 0 obj
+<<
+/D [935 0 R /XYZ 49.606 630.184 null]
+>>
+endobj
+245 0 obj
+<<
+/D [935 0 R /XYZ 49.606 611.796 null]
+>>
+endobj
+938 0 obj
+<<
+/D [935 0 R /XYZ 49.606 558.59 null]
+>>
+endobj
+939 0 obj
+<<
+/D [935 0 R /XYZ 49.606 413.977 null]
+>>
+endobj
+934 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R /F90 447 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+943 0 obj
+<<
+/Length 1978
+/Filter /FlateDecode
+>>
+stream
+xÚµZ[wÛ6~÷¯à#uNÅâÂëö)›ÆÙ&i×êÙM“>P"$¡Ë‹"’qÕ_ß
+pð¦„
+œæw?‘€Ü.fQì¾x÷GÔ³Y@)ŒQÏfÀ‘­œFJ¶ÖýKÑ°ÛDZ
+ƒÜžâ\À°†x¾‰õbœrÓôY×SØ–òs+4Í2QËMùË&Ùa%YÏŒÀ!'nšï¶)¤rb/Wº§3
+n-õ¬[”´éx’ã“„ä·‘x'‰Ú`Ù’ª]ºoäªÍÓý1W+ÓBÜçev&Ÿ†cBxái"_ˆDfPè%À“Ó{’ÃmA¢q*ûžÏcÇ'¡G¹)Vþ;ÊåÉ*­lîëÌÒFÌYFoöT
+ã‡2êúÇÉÃøj€Çï4[©Ãh}ÍÂ÷B–mƒEÄ< ‰qêî<U^‚¤#½s¦,WƒÝüƒP'?H©öØ<¬ÑµvÝtKÔRq@)‡µ.fkÝ6TŠ‘ïÖ‡ºEý ÚêkÃpVgNÑ¿Ê€°´jJ³L­xÂäŒ15ŒŒ+0`N
+Ü“¬«,ÿ7~?NSh»Ó¼‘M›™ËÓ'.ÇIFØ®Æ ¯…ÜlaËF .…[æ®…0=¸_±G|n宀ÃÈtïuw õúªi»í † ÆÈ–í®”òDUr¶§Ç,?.cê…Š©>¬§—VÂœ!tÑHGñÃ8U'j´rµ¯2¯VOT"U[Ú×üSÚí<éô
+B^•Õÿ~Þì¥YU•I ð€<u(žmñ1K|f^Ä´ 1Óócž‰œÁròÈ BSþ6N´i
+­<ëk¬wnÚq’MRkåX_ëµÎö1ÀÛTÙ D<±-!¥«4×O…Ì…™»Sù%˜Ui©2íÿe^Âz¡7&½Ó„Ýu¿Î* •ËRö\ÿÙƨ3~c/ĈÕM>õ{'õ¹ç‡ìT™ËXâ0Ê=Ö…öÅÍ(g§ª´’¶¯sø«^溮’§ỎöXÙÜ7ç¦Ì€«9ãVt#Uª[\õvbø#âý̾CÃoŽ¾zê{‰ÿèƒÇ'FÉ£w&+ Ì'Ô/"¯TnáR4×o ¾œ¥HЩ…®3VÛçk›âVïCI)’úôø5õÝŠý¹_YISíÓøºëôk£?“ñOœƒçoãTDJí%çàù],9¡' ¿ùE46Ÿ›ÂAØ ïö®
+endstream
+endobj
+942 0 obj
+<<
+/Type /Page
+/Contents 943 0 R
+/Resources 941 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 915 0 R
+>>
+endobj
+944 0 obj
+<<
+/D [942 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+945 0 obj
+<<
+/D [942 0 R /XYZ 272.53 720.149 null]
+>>
+endobj
+946 0 obj
+<<
+/D [942 0 R /XYZ 272.53 700.224 null]
+>>
+endobj
+947 0 obj
+<<
+/D [942 0 R /XYZ 272.53 680.298 null]
+>>
+endobj
+948 0 obj
+<<
+/D [942 0 R /XYZ 272.53 660.373 null]
+>>
+endobj
+949 0 obj
+<<
+/D [942 0 R /XYZ 272.53 640.448 null]
+>>
+endobj
+950 0 obj
+<<
+/D [942 0 R /XYZ 272.53 622.381 null]
+>>
+endobj
+951 0 obj
+<<
+/D [942 0 R /XYZ 272.53 580.672 null]
+>>
+endobj
+952 0 obj
+<<
+/D [942 0 R /XYZ 272.53 560.747 null]
+>>
+endobj
+953 0 obj
+<<
+/D [942 0 R /XYZ 272.53 540.821 null]
+>>
+endobj
+954 0 obj
+<<
+/D [942 0 R /XYZ 272.53 520.896 null]
+>>
+endobj
+955 0 obj
+<<
+/D [942 0 R /XYZ 272.53 502.829 null]
+>>
+endobj
+940 0 obj
+<<
+/D [942 0 R /XYZ 272.53 481.046 null]
+>>
+endobj
+941 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R /F94 466 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+958 0 obj
+<<
+/Length 187
+/Filter /FlateDecode
+>>
+stream
+xÚe=‚0†w~Åe ´W臣QŒ&nÝÔ¥’
+üù"ÄDtºÏ÷yïÜÁ.`?qmƒ8Ó j$J°%p¡©N4(…T¤l'bC.%ɯޅ‘àŠ X‰dãú[WµCÕÔó¤)Ë=Äçé79MX:ZN¸cå÷u?äÞç“rR,®0‚ŽšÏþàB®És˜-ÎŒ¡óÅ\äÖWS§ëéô÷"D)S‘J‘ÊdFJµXÞÚàe§E‰
+endstream
+endobj
+957 0 obj
+<<
+/Type /Page
+/Contents 958 0 R
+/Resources 956 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 960 0 R
+>>
+endobj
+959 0 obj
+<<
+/D [957 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+956 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+964 0 obj
+<<
+/Length 2962
+/Filter /FlateDecode
+>>
+stream
+xÚí]]oÛ8}ϯУ Œ9üþxl»mg;@» Xtúà¦Ní…§N²3ý÷{)‰²DKbb)i_ ¨,ùðŠ"﹤N.iš}Íhöî„FÇWg'¿¾u4cŒ8¥xvv‘IG4Õ™±œβ³/ÙÇ 'æŧ³TŲSF)œÎg/¦BÚÉéíöbv>/N^oÖëÙå—â䪨/ûë[ÆTý>ÌIÂ…{ù-~_®ÀZ°“hÖË ¢4 p0Ë
+”•™#NsíASn 1ÎdSf‰°¶
+F–—e§B;g[ß³þÿòîõ&^¾¯§¾ÿ^‡Ö®9À„4.ä½UëÆ5œHèE¬•ÖêH?‡æ(¦òœß7_–PÊ}5ÊвwMÍ*a;'ÛUCZâ
+£¡€ªßõÍ_³õÕj~½cj™8àÆûn±v˜Ï 3‘û HÓÿ JB7PÔÐH¢xŒ
+Z]ùùÃý¤(ƒ€
+½h¬Å4ˆÔMœpnˆåP¤:6€ÕÉ9Pd1Ý3ÒäÕyhUñi;xZ¿×>dßN|«EAØòù^eÁEA§M‚‹•àb C.Þ“‹ÆNF D®ïIƪy*RLj’…׃›XxKñ>»;)G¥¼Ã5?þDß/öüüa½]Ãx Ó„·—¨”·G0ôö{x»DÂÜíA¼ÝäíÞ\4/ïõŧ®hÓ×É«Íy\ÿÕÆLmÑŠ_?._$—О º” ["’åI æ@²°Œu
+ñËJí‡ "¨ƒ·¡i÷•pôS¯êÛêµe¿ÿá¼þ2Ôc¢­`O ã
+ÖJ=ò(&­&Z¦æl•âeCbÞoãŒbßêV‰Ü„Ôî Qf<#ŒÂ‹å„Sw÷§ÙYÈusíý²P:…e%ðÇáçj±ü¼ÜÜ^ÂÏìúzv»º¹‹
+¤´¯®_RÖåQU ¶(%ý_Tò0f•  âL•UÄ)Þ%¨
+qGhBêV‚踡°‚D^u v5Ûg^Rdž_9U
+0Ñ äQTÄ­—mÉ@uX,fC]ï´SËþñ
+Ìú™s2Ñgï©L ¨c2åŸ13†úº†)šá)_/Q)_`èë¨ü<­< -Ù@á^ 3úéP ºÄ°}º0ä Ê>G‘
+4póÉ;~LOð²D¥xÁpÃD ¡šO%tJ>ÒRÂzò€ngqP¼Šu1_-Ï7ùÕNmH*N„`ã‹CŒ‰¦ Õ¡Ö
+êwýD  ~"F($"*A#*A#¸ºæÄä³ÿ>W/A Wo¢ÐÕQÿyRúÏp²äûUäªiY¨Ÿ,
+É‚ªÏqª>#°Òj"Lb¶@ V6QÈJÔzk=;Ѥ[ë‘`‚•¿‘öy¶ý:ïQwà¨_ÝaÒ×Ë¢ºSÀ*'°žT¸w ÌAÛq¦ÔCå?î›/ê_¯ñÎ÷ˆ×
+à`ÄÁ{/iŠuE¸àõ˜ª‰3>‚z)ª@Pî¾ÿyµ¯E5aͨZT¶ª+®F1êˆQG7`à%ÌÛ蕈1 ãjgõ³ce¦V„j—bf‰J13‚!3Qê{
+RßOËm9ˆÛ’ƒýnu½Ü¨·cØ>·%r•Éç«Lk±œŒ§‚H‰J‘†A…Ô¡BjMŸìR­#!eîóìæf5ïÏ”Óþ'©ÜøRªƒé1n ÿàirŽÁÀ&úÓäJLî¯^u¥Éí, ý{ÏqîðÅPš<ê<¹>&P?#2ñз†bßÃ&Êõúz Jøz…¾~¨zÆP>{ê™r}l  ~¶D(d êQ˜)70S®—•%(ÁÊ&
+Yùslœ3y'¯TšEá²±ó ƒ»q?3!KMÛÜ#‚=ðŒÿZ”Êt
+endstream
+endobj
+963 0 obj
+<<
+/Type /Page
+/Contents 964 0 R
+/Resources 962 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 960 0 R
+/Annots [ 961 0 R ]
+>>
+endobj
+961 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [187.798 748.984 233.267 760.596]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+965 0 obj
+<<
+/D [963 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+249 0 obj
+<<
+/D [963 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+253 0 obj
+<<
+/D [963 0 R /XYZ 49.606 736.043 null]
+>>
+endobj
+257 0 obj
+<<
+/D [963 0 R /XYZ 49.606 716.066 null]
+>>
+endobj
+966 0 obj
+<<
+/D [963 0 R /XYZ 49.606 692.156 null]
+>>
+endobj
+962 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F93 449 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+969 0 obj
+<<
+/Length 3370
+/Filter /FlateDecode
+>>
+stream
+xÚí]ËrÛ8Ýë+¸LÂàýXvººSÓ›™LR½Ie¡8J¬ËI']ó÷s/@P|Ó–èØ’nU*”àCι
+^¼\ðòøu!àÈ QXϤU…ó’Y\loßñâüé‚3|ñwn m<s>^¯¯š9h+ 's^ŒeÁ £™Ñe/Þ,þñ{PE`ÁJ[¼ùX8ͬ
+pÌrQ¼ùP¼}v±ºùôùù»7,~{S»¨”P^íïUÞª‰|¬26‚qé
+g ã&füµ
+‚ìððrñ¶,xïUu|Â2.„fÂ)¸Uü¾…ïp”"ùx…yAi2 ¾/{0ËF>uв•Ó²žUè²X¼.ªÊxUìþÕopi˜µj§ú
+"JïêbócsµY]?_Z.Ÿ½ÿ¼º± „cnvvËÀjƒ]Y;°}AG2!M-¿5Xî\#Í1îáÛ}=ØÇŽCî°8äÈ^8+{Äu\â"+‚è{¤ô%Ûâl 
+[••ÞC¶©ùTç°èÐc‡{Pè€Þ›Y79JÐDàh¡ºqÃRܸӳ• ƒ:õ¥²&­O0.Í5¥ÍŒ:õ}½AAæàY|è¸;^ l2RMÈ;£&ä݆QßK¾&­?taÄ(þTI © ÒDQ ¡õ‡tcw&å «á¸ësc¿}Y¯?Œû«Ú(P ›Û_…Œ=äbù«'dÔ¿‹A6ýB±ß’î\#µ…Âø!5¡2(Rúõ¿ûÖt¯ÃÚë¼aa«²Þ-ÎÒúsø«žüUòWçhŠ†&BGFM„Ž6ŒBMa<[‡umZP ><k³DMi³#mÒìK2XQÝè‰z#'ÔQênÃHÝd°’ÁzaÄfÜÔ
+ûô,Ñ“\’ƒ ˆž5§ðÈË)5–¨I5¶p¤Fr7ŸaÔ »:ˆî
+jèaœî5E÷6®KwEt'ëä§OÚ™±ÐðDj”™LFM ¦£þ|™³š3§2½aÒNÜ2jR™-)“LŸCMŸš“2lú €‚(]ŸÏÛ÷«Ûòõ½ï_¾|¾É_.7_†­ éý¬±r‚„a†Äï`p¦ ö@'ø¡0‚á¬!†œ „Ê È”_žkþì_¿uÝ &¶ÅÊ"S#;è4í Hps ä UÄ”&KÔ4ÙÂöhÒ&ÉÚךôʦ„› }FÝ…ôm,‘ž¬¡§e Í0~ÓRÀsšMFÝE6m,ßÈ :Sƒh}Â#|˜êÕJÐÔÙ„’8É#:Ü#ª<–A‹H¸š‘u‹hu=²ª“„ªVJÌ¿j¾´ÐùsI†PuwÐ@‘Ô0^³pƒ[L&ß™Úà+WLJÃcBŠž{­óP§ã"4—÷¸ã<‰uÃrTC¸ñ
+ç êøž(nš‰13œª(s¶ÐEi§ÓŠ¹Šs¨1 }aŒŸÎ(¯ƒ?ÖJ`ÆTé°Þ˜¸î=HÓ9+ñ{ˆc-ŸÐeMç­s¸Åˆó"™öÞ…›sÆã5µ¶:À­
+axñ Uç•C5XŸ•N€ƒ?¨`qA¼FÍ¥ÞnJ»hé3áT‘¸dKJSÖh,d•îÎRÜÅ[µ×mÃŒ±Âà
+SИ‚ÞA?’ä¨Ó¦N›:mê´©Ó¦N›–é8› ÔíS·OÝ>uûÔíS·O+Ñ„¨¹'DÑø‚Æ4¾ ñ/h|AÛvǶµY’ÃS:9g
+?pßNx19¡2(-­Ð·_gÕÞ³#Oš—´gÇø.š¿uÛusØPFua"j” ñ ÑQÌ  ºQçQ«ÒZxdµS²,Qºl¡H˜ô#ì‘ïÒù¸ÒvI[C¬O®Ï˜´3j\ÚmTWÚŽ¤M?´Ð§C|ˆo³OÄ5CZ(Š!ô‚üÁvêΗ´S…6ø{Ie§þøü¿Uâ/z~U·b 5þËq,ïK¼­Å¶œVwËzbwûkûôŒ$ÕOí»”ÿ#ÅòÖk$ÑC‘sDa²°ÎÞÂ"P'³çg™=¤6²ENÀ©™ ƒ¶H€,•Í®ÈÍõíízر§šÎo‹ƒ3eÉé]åÔâ<å7‘€ÆÆé²8%ôÐT­*1‘¿¿îNÕj šîm*)-oJîÉInq¸ ß©Óa‰—aD*$‹eÆÝ"fๅ“µ z š`zET'+æIítna "Mô
+4.–ª+Gb!Ëæ v†8¼ Óx0¡É™PdCב˜:mï<•S‘ø ;¾ ¸žÄ˜å6²6DFä ÿ0…z$
+endstream
+endobj
+968 0 obj
+<<
+/Type /Page
+/Contents 969 0 R
+/Resources 967 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 960 0 R
+>>
+endobj
+970 0 obj
+<<
+/D [968 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+967 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+973 0 obj
+<<
+/Length 3031
+/Filter /FlateDecode
+>>
+stream
+xÚíMsÛº†÷þ\& ¡øþXöööºÍ.s½i3Y¸¶bkFŽIN'ýõ= Š?` tlKçNæR¢_‚ tÞð!HÒ⦠Åù­—ßÏ,iÁ
+m ×¢0–Å‹«»³OŸiq úPP"œ-þ[
+©,1
+>®‹?Ï>vKš†b,›*‚J%ë~»8ûËNŽ8Íuqñ¥0’há`ሦ¬¸¸.>½»Ú<¬¶ËÍû…¦üÝÍÃêzy]}¾[m·«õòýç‹g¿hÕ‡s8iŸ^!5RX6+F(7…QŠPUü½
+(f[|š0Nønˆå°I³ì›/W`‘žbÑ+¤ë««¶ÑšÍÃâE{_}I¿œxW·•aëãû­xœy–…†g2áÅ Jx1–õ½ÈÑ‹S^„6›ÛŒš?âÓÌØ4OcÊjY²Šz+¡>wÞ,áKÝ+•­Öùþ'úûm/Ο7Ú5'2ì•(ë]†úB]h:ó<¡n
+uJ4ügüÖŸÆzŸ}B¿K®íâ¦×v†i·ƒú»_kÉ%ÐÓn ª„]búåUt æ@¿°‚u
+ñÉJë‡ "¨ƒ³¡Åøš°ôC¯æ¯ÍiK_ßÿpÕ>š(bhÉÆlmõ‹{1i5¡.ÕUʘ‘ ù´ŽŒБ}o'Yñ%Ê"¤9ˆÏÌV£S–NÝãe_‚ƒ0ÑåY}ƒOFv°Ô¼
+Êëåv·¹ÿ¹ÜŒ³m8±’ÏÍzlaà”…1Ž¬g$W1øõ|®âæpÖc…*Úi¢ EGYWQ¿ÿ>ÄzÚ²8WùÊ6u}\®²™¹Êžú ¢„=aϯ€=¹fô|Æø2&ÍT 3Æ24#žYaOv´kNŒïÿ¦£½V¥¢=’a´#ïye¼'×/Ñh©~ ª„_búyÏ©òžlcZM„I Û‚*eÌH†Æ|9Þ£Ý À'§¹ˆÏ¢Œá ûÈšøl–×7S{43ÄÁÎŽ{´T¾sEÜÓ>À…‚1I5 ò½uPü¨œ)ž“Ì”C|I e}²ì­im¶˜Z·ßrÑ/¾ª»ÆûÑ=QÎd¢)p€Z²r¬2‚¦*UUiµO¦ºªnVõuÕ˜UqÒQ©7›6t&D“Ä·ßdÖ¨EÓI#aÎ@€–ÐNÕ•Nk˜NÙ²V%|©Ð˜Èú^ë;Ñqº„\Ï%OX;¨¦­«úÖ6hmÄ’Ç‹%O5‡XŸ)R£ö JäH…9 j.AmqÉQ‚ª¬$&€ýëÍêËnjÆœÒ
+óß©%\HD¨´R\;­öÖ­=‘¡¾ø¦ ~¦²nUXÑ!…åªPÈкö¦{¨¡^–wûU­
+ !ò˜§÷a¹žJÖÎ'?¿3ÌRéÛÍ*°‡i'kEœ1 ˜õª ª’õCd¶-‹³µ¯lS××—­M^¶6HfO‘Ìb6š/yJK)Od£ Jd£XöƲ2ß×É|Ñï3ú]ƒ«¹Mù½V¥üÉÐ_JÆŒ1_Æ V©DƪDƈe˜1PŸ¡ÆÔ4cj²Ž(›:y ªTjŠd˜š|ç‚ïMßÜ.Ç|Yn6?'°7µmÔ3`o¡w
+±÷\M,ᲿD§ÔefVFÚÏöª *ÃwO·UqR¥²ì»¸F>÷´ãÔá77<ýuå…­©¼TÓy#Võó†À¼$ù4fgSkbýô icÖª„1#‘/Îΰ¶Ì²¶ŸñkœJX;¨¦­«p¬ŽlgŸ@q&œ§rH­JäH…9!j6DݳÉQˆ*aéhÍö¿¬¶·«¯7Õ‹V~,·Ûåz©J%üuù‘ª´PŠ2ˆTñÂ>L¸;Ù–álÛ7
+ö® Ü./ü¬xêzõe7ÁS…?ÏdsU(XÃxŠr$ªø²öòõ
+RøÊjÔøë¼*ˆªô:ôz…¶ªÿ²ö'_ÝÂ'’!QE¢ú,y#w£$¾ý&ÓF-šÎ‘“>ít_®mK­‰`:åËZ•0f¤Bg"MEšúb#uÿB.yÂÚA5míXÕ·¶Ak#LE˜zl9ÄúL‘¶U"‡D*Ì!/ÇRãu-.9ŽR)%œ…—ï·ßV»Ëõcf§2c¡2bþé©œz ¤©ƒSïýE[‘I(±ŒSNXuifˆPVª *ã㯈²+ë&­ª²8ç|å­Ëù^}/cÒ‹A•ðb,C/â<Êï^ž!Ú5'¦<I™ŒöZ•ŠöH†ÑŽ4íUݽœïÉý ðKP%üËÐ/ˆ¨NóîåŒiýn©a[P¥ŒÉИ8‡.›üìÊ(ùaRA›©@~~,7W›Ë©ùs œ(«™yó¦àÄ…ãÉoŸ¨óòµÀZ¥–‡Ò) u°¾ÁÒ£pªÕš2‚?ôÑTGÔM«UE›zbZE2…sç^,g˜¬”! ³ã~ŽÎTʢɔ‰z)Ã`Æ@~v
+çòûq¡áÌEŠ„)kÑ´)»"ìÇ‘óᬹ—êk%w„j7më š´u$¾i$N˜;úôáü%êÄP=ˆ¦ÓGW„é™i&3mQÈQf
+A'É_}Ý-×ëÕÍòëÕ²š0wu¿^/¯v÷›q†ª-QLÍP"Æ*$¨ƒ|,Ñ´šç[ÝÓu•äÄß*à ʘƒ’¥¦–T{Þ+úîüŸ}2ÙVvSWUצªøÌ“Ç4e··Í³¢sDø·…Mz±=ÆŒ]iß݈ÐïÐIsù]€ÖTMÇ{="Þ#)ö>ˆÓ^Õ´¹üBÂ9:÷`™rL=Â1‘{DU§9qnkZ #íÄà-ˆcÍ®­ùF0Pìç=…ÙƒŒ*0dgTï‡.ÜÎ «_¾ah¡@ˆÿeG±j
+endstream
+endobj
+972 0 obj
+<<
+/Type /Page
+/Contents 973 0 R
+/Resources 971 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 960 0 R
+>>
+endobj
+974 0 obj
+<<
+/D [972 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+971 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+977 0 obj
+<<
+/Length 2919
+/Filter /FlateDecode
+>>
+stream
+xÚíËrÛ8†÷z
+.»Âà~Ù¦«;Õ©ž…co¦RY(¶«[RYžÔ¼ýE‚Ø"Hö©R…ýÉó€_@fŸ3š½ÑrùmÆ`I3–iK¸™±œ(ž]of>Òìþô.£D8›}Ï…›L*KŒ‚¯ëìrvÑ,Ajžnˆ±l¨š)I”,Kxs5û×NdŽ8Íuvu›I´p°pDS–]Ýd~ùûaûϯ¯ÞÍ~¿ªí“s¨®´Oß)NDXV+F(7™QŠP•ü-ÕÛ,—Îò²îWGêÏçog2NœµVTËð'_Ç“„Gêoà7,9sYX®}YP› ƒßóͼQN]4Jš×‹êÝe³Ë¬:ÙáS?À¹"Z;8;Õ¨|k—”3¥2F$3þÔÏ$3 ç ½¦¶Ù|hÝaËy»ø¢þõ‡
+ÛkU,„¿špyóÓ•ŸàÚ÷ëMÖ¼ÒU\j"ŒÎæFQ"yyìBÜi⌰>vƒ*ˆòà½xB·Š¯He]öUÔ5Tµï25ëhažtTõÍçÕöé]åZ{ü¾ªÍë»*>Ûüß>gÖL‰ÆÂõ0„›é¯à*°Ð­®(s ‰5VBpf;ØâÀÅÃoC,‡MªeCXý¸†(o)æ­BšພªÍçÝây}_mI»œxWwEj)ïM†Y£‘5D•ÈA•È± ³ÆÓ²†q“§ Í œôÓFuzªôQ,£äQøâÕJ¨ÏÆÛ:ü([úü,†u¾Mþ~×r$ú²ô¥VÐáe)_–ª”/#úòñ¾‚HižÇ—æ(_RˆS­?Àò[_£~h'7ɵÍ^üðÚF?ý®S¿yÉÎæcœ-!’˜5 gUÂÙ±¬ílŽÎþá-®9ÒÙ,c}mm|_]»çÐé¢BzÞ¿&,}ß»úku‡ÝÖ·¿\×ïÛŠèÚp †qk[Ýa
+éK!ÖÇd*…”ªT
+‰d˜BžÔ9àGt¾Õ[NyÒ6'+ƒQ)Ë §îñÇr(Á ¢tΟ*&ÙËNµƒ¥æEL®Û›Õöó¯sMù/×»Åí¾Ÿ¤jÉ•üH*¥„1Ž$µËlsM4Ä\`Ã¥“’ßëÑNû‹SËX‡à¢R“Ç_¿µÙdCÕÌWyE«z>._Ù‘ùÊ"šD4ùœhr:
+ʈz؆A4lÃH…6DÖ7šõMèºf°ñp —¢D 7UèÏN
+öH†ÑŽ´çÄh€£ã Mªmª„_bYÛ/ý‚ÀçU
+sÕ±@µÆ&û*wÄJ€êÃöún€¢R yA=EŠp§‘¢vþ¯#!ÏTæX2ɈfBB@»X„f™,TA”ÇÄþ¸j³É¦®™«ŠÚV•Å§¹û‡Í17w~ãæ ¾Ù83:K”ŸCqØŒ¥*iÆH×2#C/>êÞƒ!ð{–¶Gh$"îA•
+÷X‡mϱ!G{–Ás£Û ½mÉ]Â0A•2L¬ÃöÙÔ«;7Þ—òJõÛ‚*éËH‡¾Ä±ÆÑžCé¥=–Žš@{¾£ç–ÛÛ/»ëåf¹Ý+þ»¼¿_®û9T‚Pk¦æ@P°…R”At~t=Ú`Sž‚Z™—‡ZDå·H‡c…q(eCÓ¢iqºŸÜDø„¾B_!¥ÂTh`|ô• _ªÁ ~ å{¡²®Wûý—Ýb]>úeói±_¦5<Ô‹0iŸhù¹ ˜E¢ÕÃä#çV>ð±Òôlòª *ç0¼ìÙT×ÅPÞ×ö„gšÀ§.UÙäüt^cÜèü
+¢ýÿ°3KUÒ™‘‰,h4 :`”^ä_@ UÎÃr³Z¯ö‹Ýÿ
+öó÷rÿÏj€þHñ´
+>–þCóD‹ô'ÿXHð’ñäž·VÖ9ôœ+¤-àtø^újE?ë[”乫ùqW5èXU+ŽîSòžóå=è?ôß‹&<àˆuë E° @s ½ˆèæÅ£›éG7L†ñ4ÙÍnõyuS|½{Xç¥ùËÍ Wå´E«ííz±_|Z/ ݧ/‹}?ìáÖNš++ÖÃlÄõL4®±kx"'Œ+Ç£QŒNScë ¡~%G6ÞöÌ ' D¤_pù˜÷l0±Y4.I㦀Hå®ñ°°"Θr\R¡
+¢<œß¿iKjÊšD½¨lUW|XøÇLò‚œêt¡;£ÜÑŽˆ÷oûâ¤6c¼ ùº†’K)Jä–H…©çú¹úýl盛´ûñÉ~ÿ¶ïÔæÂ~¢Kš·T¥ÜÉÚöUh_œ묞H<«Æ;¾\EãÝuk÷Ö†(. ¨ –aûôŸœ|„E} ÖÝ»ÖÁA¥rK!J¥–¦
+3 ÎP6’i/ æ
+v§x ¾ÿº\Þ$Ø.œw!øôp—k^=p÷Ü’.NÃôÎ ¢»pò•3&€¾8'׫&`h
+„Øø?^T)E
+endstream
+endobj
+976 0 obj
+<<
+/Type /Page
+/Contents 977 0 R
+/Resources 975 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 960 0 R
+>>
+endobj
+978 0 obj
+<<
+/D [976 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+975 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+981 0 obj
+<<
+/Length 2963
+/Filter /FlateDecode
+>>
+stream
+xÚíËrÛ8†÷z
+.»Âà~YNßÒÕÓ½pŽJe¡qäØ5’ìHvRýös@‘„%H)Z>]©¦.?!<ÿ!øù¤Åç‚ï&´^~™0XÒ‚Ú®Ea,'Š7Ëɇ´ø_ýQP"œ-¾•Âe!•%FÁËEñ~rµÛ‚Ô¼0ÜcÙP´P’(Y·ðÓõä_¿9Q8â4×Åõma$ÑÂÁÂMYqý©øðÃò~5ÿqª)ÿáæáyõ4_/ç³Íóz¾ùñãõ“_¯[á¶AÚÃ{B£½–MÊÊMa”"T• )@õ®(¥“²mû£Ôï4hÎ/ÞM>œ8k­h–á+ßÇ “„›ïß/á=,9sEX.|[Л ƒ÷ÓÍt§¶hµ4m7Õ%º+&ï‹fg\Ûí ;iʱNSA”)# vZÙ‰²Û­×7Ëbwÿ5MpἘØãÒ8ßJ&p4·aTATÆÉ_?ÿ"¢9l‘»ÚþXÝݦ·©í£Ð-ÌAvÕ^}Ú¬Ÿþ©Rkÿ­fõöOUÿVåÿûB¾å&°µ…Cb7§³’ÒÄ)ˆÍ=¤(ƒcE‰5V
+hf k|ðNxoˆå°J³Ü6onÀ%{Šé^#»Öºi{­Y}Ú-ž¶k_²ßNüSw•gëíû©ø>vtšPÇRv¬UI;F:´ã¡v„vj?jFÆÃüØìžÆ—Õ2reø(VB–Þ/áM}n*÷bøÌŸ…¢ïïöBý¼/`ŒC™I|P¥>ÖaÀðB)ÍyÞð”høÏø ¬_õ†¶™}™ütw@7üéÎí®S¿<Ø2:Ë2Ò{ÎÉÖ ª”eb]‡e4ZæûŸ#Ì‘–aë;;Ä×.­K.ˆ .Ž¦ýŸ„¥†5ß6W1ûúý7ík£&ºVèaÜÁÖZwßÛ›–:›Õ¢¤3wehÌÏeüˆsÙ—Ö¡ä
+âK”MHs§9YŒÂµ‹å„S÷òmÙ¶à L´öQÙД^¤,5QзÙúv¶®ß|o6óE?Ò†+ùp¥„1Ž8(l4¢àpùñô8¼ ?½‡ænÃE­¡¬GJH+»>‚x3’Á•1DÒÒ')„(› ¯Ë”}?˜Æ?RžBêϦ”Xe„gh¾b\ ]]LJ7°Îž`¯ŽºÛÛäÛ*]å$øêÛÞ÷þmØu‹ò\%Ö˜JB©5ºË—­Ö»V*ÛÌ<n‘‰!;Ãœ„9é ä$ƒèztý[r=ÒÑ3ÐQ̘7p´€ˆx´ˆ&¨ËØœ•kwVžÓÈ©`ù–5÷Ãrá Ë-,¿+ &È83ÄÁFžœŒk©ü€ Éxç_ö 1²ªSáæÈÂ, .±¼˜jɈ–º§0«VQõ§½ß÷ê²"ÙîŸöªÎ6}½Ât…Dø‚ª$}xë,/
+ÈÌt‡­X‹NŒTûFÔhDÄ ÇÖGž Ô5ŒÃýhd8ÖkU*Ø#F;â¿QGæûEr¸Ðƒ‘ú°_‚*á—X†~Aìõ6+#O`L«Hòò©¥l¹«BW"ëÉe=-zÒËz”•Ä@†iXÏböÏêQ0ÚrZžõ@îY„DÔÓ“ª˜?ÿg¢+T1UVCM?êñª ª’ÕŸ]¨§-‹³•ï숳•ÉËVf”cˆ’õXd=߃õäšÑãÛ4cP%ÌË^™÷Œ÷dG;ŒŒ?ÿ G{­JE{$ÃhGÜ32Ü“ëOhü5à°_‚*á—X†~AÜóVqO¶1ÁC¤†mA•2f$Cc"ñÉ%>-ˆÒO|¸#6pHO|6ßæóÇùºº öÓúa5À?Ô‚ùÔðP„;…ø§ï~
+áUÞÃÏŽŸÍׂL•`euWï”h^DUîzÿK×”hmÝÞmü¾»Mo‘
+øX‡hts¢åŽÙ$‡±­I8¦¥ ÉpÀ†èíNˆ–mL¸T—.éÌZ•´f¤Co"
+ÊGA[ Ò‹‚$,] ”mÔˤ„Z}ú;½¤…V”AþÓƒ®¥aySpKXYA\H£Ë‚¯Þò¯
+¢:cu•ÿ´e1ºöÅ9_p§Ã[½^cù„ÈΚœÂŽ÷··š1¨fŒeûfähÆ ì¢Ÿó„»†ñm2Ú+Q*ØwUë}FVü“k_¯#üdÛƒn ª„]bú¡Ï[-þÉ6¦õJÆ‚*eÌH†ÆÄYðóxO  ôóø9×”þ</žî«¢ŸÇçõãæ,ûñG˜Á]Õ¡;[>ÞÝÿ÷þáySIg›ÍólñT½ÙÜÝ?ö³"è=aÒž¾VÈo†dYQ7Þö%`&ó^1GIŸþ¬Uª *ãåÏß÷k"]„·«îb¥#Ö
+]h­ð¼Û̹3>o%ìX‰’nÜ•u˜o4ÇB¡ã …ò£](8RF'Â=¨Rñë0à‘¬P(Àæƒä ËUÊ2±lˆÞj­Ð ¼i¡SÜ¥¼Y«’ÞŒtèM¬ÊgG[ ÒËŽ„Vº\Æåjöu¶¨ÐÍlýùáE4ÈÏ|H7_Z9$ OEt¶‰ƒ¤ÿ3®g|hâ YQ'ÿþO÷ÄA[ÞôŠsDã¼A‡Ï4èÅ Jx1–¡‘sÞ áh¯U©hdíˆ.uÞ A¿UÂ/± ý‚ ç Êœ7hؘµ*eÌH†ÆD
+¡¨èg•^DU}×+Û²8úÎ6}Å4Š´iå(“‚ŒÔW™ &… J$…X†IiåeÒÊlÛi*ù»Ì†mW«R¶‹dh;¤•H+Ïc\›4\… û¶%l©Ðµˆ*U¾öô`5Ñ25œªT‚ˆd˜!Uf£Ê’ö‰ATÉÏ  Ê‡õçÙê~3{ºXí<D¢®~^ÝÜΠȪ°ó´$“)
+é[!ÉY~ÅÇJáó?_íCãà³:GJÄ04Ç7?Cjtj„Á}éyáÊùá
+ºh|7u2|je…ªKôá›:4)T?}¦ ÚÅÔéá‚SáÁ­ÈÆLpµb/±–_$%ü­(…ŽÔHyQ­©ðíß]%R-ULo¡£M?ñŽx,©1æ_Ò$üÔWCù ˆ†óA¤Â|€µQY•ë8 #g?gÕ ãjQÂq»*t–EaYTgY–iËKDˆŠAÓÑ°i#Õ¾iºË¢°,êÒ}!“h g‡Z”È»*<¥¿ŽŠ¨8£l‰à–«U!!ÛœÅÁå~”l˜­BÂð2$Bƒÿ#\G(
+endstream
+endobj
+980 0 obj
+<<
+/Type /Page
+/Contents 981 0 R
+/Resources 979 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 960 0 R
+>>
+endobj
+982 0 obj
+<<
+/D [980 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+979 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+985 0 obj
+<<
+/Length 2788
+/Filter /FlateDecode
+>>
+stream
+xÚíËrÛ8†÷z
+.…0¸_–®´«zÓ“Ž7S©,G¾TÉ–[N×Ô¼ý
+^
+o–ÖÆ¿Àp«ïò°Í¸wƒ{wMå½;⛽ú; ÌÝÅð7G†?«X_ÖÎÇúÉ "¨ƒ€˜÷ï‰[?ÔimGý]}÷Æe:—(4±ïÀBó&GáeæÝ\fø—™msÉ„‹¨›æ(>1YŒÂpßr©;üµl[p‚(­av°… ý„ÂUPfäq¹ºjn=lÖËÕjùóÿV3¸ð*Õè¿/6×Ë~H¢ 'Vòg€$ÐgÆ8B’}vœÃ”Ù7
+ mJ/‚}Z_. ]¯oﯛ›?ÿ¾.Ðfˆƒ×<9ýÑRù‹-ÒŸžìÅM¬€(Ñ’AæÑýôÇ«¢¨“_>8zv±
+m–ËÅæò&¬º¹}è'CÊ.§åÔdv”p!‘ íÍb N’kÀ¶aG¢!ÁýJD¥µèACAE!)zvþG‡ eÚÝ<ºÜöøõ%23.‘„C' ‡ê
+ËìâR ¬|=²òuÙ—hÀ–»"t%2@,~ýòů‹ÆŽª²³sÔWbýëª]Î!A5C2æ\R7š­nÁd/[eRÁ9 Àÿqq»º½¿n`ê÷õ¢P›AîÍz½ii*S4þ„&ÒÔ$Í¥©µ³oå© µÚÿä0œjáZÕT¨»3<£ï\Ü{×YÔ[+šéŠw!Ä­rurõŸYæ’YäÌJø»7K Ñk8‹x?Ø£qâ.ôfwdD/ʈÐxVÞXIE/XqÐd¤}ËEø¢âß›«Åå²¹ócy¹þ_?aÑþC5=`qŠ«¯¤/Pø¯,ûE²Ô/oÕ¾ë^, s8±LÁ»j÷xb¬½+Úï6ÏA}éáÌ'ÇÓãã®= 8Ÿ K€¬éœƒ
+endstream
+endobj
+984 0 obj
+<<
+/Type /Page
+/Contents 985 0 R
+/Resources 983 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 987 0 R
+>>
+endobj
+986 0 obj
+<<
+/D [984 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+983 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+990 0 obj
+<<
+/Length 2710
+/Filter /FlateDecode
+>>
+stream
+xÚíÛnÛƆïõ¼t.8{·޵@ @±‘ÚÀFäB±åبd'Š“`¿}׊Æ)׶V`„õs8¤Ö¿8ú´8¢Ù§Œfo´Z~Y0XÒŒeÚ®Ef,'Šg—›Åû4»‚—~Ï(Îf?
+á&“Ê£àá:;_¼k· 5Ï 7ÄX6ÖÍ”$JV-ür±øÏoNdŽ8ÍuvqI´p°pDS–]\eïϾ®Ö×orMùÙçíýçÕz½º*Ÿ~\n?­Þ|¸ø}ñëE£7œÃH»whtŠÂ²nX1B¹ÉŒR„ª¢á/¨Þf…tQ´­ q¿:ú£þÌAs~ñvñ>ãÄYkE½ü
+­=|_õæÍ]•wÅÿCñÞ°ÛÂb7óùHiâæžR”9È>Ä+4³…-Þ'<7Ärؤ^¶„õ“K°HG‘wiûê²i´zó¼_œ7÷Õ•tÛ‰wuS¶:¾_²§ð¢ ŒÉ^ ª„czqO/Â9›ÛŒšoâ~f¬OOmÊrY²Œz+¡?o–ð¤º*g1¬óןèõ›Nœ7Úµ€±IE{¥JE{$Ãhß#Ú… RšãD»9(Ú)ÑðÏø¬ ]€v9}“\ÛǯmÔnzõ›§õ‹äŠ0'~ ª„_búåY\Ì~aº.ÄŸWs¸ ‚:ø@”¯ K?úª_­?¹tõÝ—ÍÏC#Môm8Òøƒ­žøB&-Œ±yjØT)cF24æ~2~À…ìK;É
+*Š&¤9ÐÌÖ£ì-'œºÇË®a¢µÊš  2 í`©y`@Ûï·—«’û\n—×ÃÜGN¬äGà>”Æ8rŸDÒâf"÷ÑNgt”ûQ™´þâ>¶ú’7OZvbÒ²È}û<1÷9Ô‹5÷õbP%¼ËЋÈ}ŽÂ}ŽöÀ}Æ£½R¥¢=’a´#÷y¦ÜçP¿ÔÜgÔ/A•ðK,C¿ ÷9uîs°1÷7f¥J3’¡1ÿ=î£Ý àgJ#s‘ŸC&?ÂAö‘ù¹¹ý<Âz˜!ovÖ±í/­ÈzÊCËŒ}üª~
+Ý‚èçTÑÏdWZdR£¶ Jù2’¡1qn›‰ègGPÑ„¥£& Ÿíõ²žÛæ~óqù°¼™ßF*A¨5ó³i¡eý„C£­zCgž@uõ'VÈâƒngõ(Þ-¿óòÅîNW0*XïŠ{V øĬµll×]Ó¬[^ÕØ.ïi=ïéDÞíjÞ=ž¼ç¨óž““÷œCx®±‚Ë‘^,–Â<yïF{Ä ˆNÄ[ë^ÌC/£—‘5"kÜ‹5bÒÀ¤7=>—"¸O&¡~„¯]MB¿¯þÿ˜›¡„I{
+‡/™EÚûå l©Â/°C à(‘~’oÉ±Ò À•ª *¿½y£èÙÛž*¸¶¶ýNÕåºÇ8OâÆ×T7‡%\/$KY²R=Ê’‘-‰doÎZ¸fÐZ §¾ö³ŒQ=P W©‚h,ècí`Ðs z„hÿFE\ƒzbI#Ü׎Ú&¨c›XÛc¶A^uµqsøÓ
+ØwÊž¥èQîlKќȅ¦s¡cäBB+].Bóay÷÷ØÍBŠýºôX$ ?xˆ0è%ÎÅ·ík¦r+C˜âþ.MÜðt]¥*ˆŠøýo—XµUí¬Zöõ:ÆéºXí ¬N4m
+'Œ±DÚªñ´«0m T›ÕNÕ˜`"
+A•0f¥J3R¡1ü=ð÷b­­'Y[B(9-ÖªqkǪ®µ5Záäë…“§šC,Ä¿K¥R”È m&¨SjƒKTïsÇ*‚zÿcŸrkgMÏ5=eÊo„ðô¥gSE$÷_)#þ­èõØàŒYÚš²Ò¢”TÀÓRDEè^ü¯KOÛ²vF-;[÷3*ÒS¤§/5o
+—¨bªà±¼T‰¼Ë0o >=Q|:ƒ3µ$Ò¥ŒYŠR¾l«Ð–OžN0¶˜dlÉ5ìH'œT kDz®·zé)ÒÓ×–D¬¿=S¤’H¥J%‘H†I êd‚Z³ÉA€Ê•*ŠôJ€º]þXÕ r8ÑB°ù)*×0Ž¢1j+­†×L«uëÝÍIzæB¨'[PRM¶Ð]×Ü´gÕ1T+Âr³[Õè`¿Òó³Ñ†åzì«.ç¡Ĭ¶‡W¶RŸ¬}Ä;ÑJְ˜º²Õ«‚¨LÖö•¶6eñ×]¾³u_q>]üI’WAg1õ¤#sxÅ,õ·0•)Dõ§£ 
+¢tˆґÁt„Ì÷ñÌý>£ß5X“Û”ß+UÊï‘ ýŽ0ùYÀdÌóe _“k•JdŒ JdŒX†õi!jLM3¦&눲©/A•JM‘ Sþ6Ñ4ìÝ€ÉÃÜ›RÂY˜záÛ§aæÍŒ…½‹#0oê]-y¿‚1
+² áÇÍátºÈÊœr„žwÁ«‚¨Ì¨}pº©Š*•Åu‹œÌæÉÆzœ¶§±txÞ¼áɯ+¾ÕËA5ž7bU7oÌH‘Ocâ…ÉÆÔšXkå¸1+U˜‘
+‰¸k‡'X[N²¶„\oœJX;¨Æ­«p¬Ž\K‡O ‡8sÒx©T‰©0‡œRåpœ½tÇËÐ’ÐbBMÁ®Ê¢*´˜ÖgËëÕ›\0sÆåOðÀ‰Î ×÷E‘p„V,&J¦ec›åí])jíÐÿ¤Q%ú¾\[}-y±|¸Y•Û1¦jx‡D½á·ëóÕò¼úQùîn,ó¿ Ô—÷›ÍòîŠÖ‰ƒ’ƒlæoÀeZÕWF¶äà¸
+endstream
+endobj
+989 0 obj
+<<
+/Type /Page
+/Contents 990 0 R
+/Resources 988 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 987 0 R
+>>
+endobj
+991 0 obj
+<<
+/D [989 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+988 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+994 0 obj
+<<
+/Length 2807
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ë’Û6Ýë+¸´Bð~,ãTâLª²è±3³py¡¨e·ª¤î¶Ô=™ùû¹ ‰EBÝ”ÚMæ¦S£K<ç8&/iñµ Åû M¶ï>N~øÅѧ¹.>~)¤#šêÂXNgÅÇëâÓN a„¿ýüñ·~aLÕá–8k V üãþ~±ñ°Ý~þ8ù6að’¬0”'
+£5Q¶˜¯'Ÿ>Óâ¾ú­ D8[üU×…T‚hëàõªø0¹:{çxa¤&†º®€†Þ0,„hvœHã
+;ãVUð¯·J½™­eGt
+BrQíúýê÷7Gvk!¶:Ë^…QD)~¸ÛŸÿ;[߯Ûæž—Ð1â»nžr¡X?Öô áY£#Æ°îQ’(yÐ…¢Ö…Ĥ3Lå‚Âf·Ë·SMù›ÙrS½øk¶ù2ÛtèÉM¡-I`XЙ„–9Beø[¨÷E ”±÷' ƒ•ç7ï'Ÿ
+iÁ‰ÛÏð•oã„IÂŒ®|¿†÷°åÌq»ò± 5ï§G0Óƒ8uÐ4‰4­‡:º)&Š]g\û?õdŠ†ÿë¯çëâ°—®Šö¡£§š8/]¢xÙË'ÇÞàRAOëbj8PZs¥dšÍgL•"*‚Jªýøã[Mßü;òjwò,¼Úï°jðt×âÜB·ƒ˜…}ÒÑ]Õ¿ûùU£KoË¿ÛØ\ŠÐG°åæ|2ÌÇ /èõ¡(s
+vl•ÂlàŸ:tßb9üd·=
+!xBšç™ç BaÍ3µœðœ T?š}/œÄ½5Ñj¬he‰V<5V¶®g›åíâT{Ehb?¿½¢5 ™”£½rÉe¤( #Äóíé#F”3ö
+ "¨JQŽ[+5\#=Ac§»Ö¢µ‚ÖÊ`¬•~2+&22‹¨œÌRÊ m•â±æ„:ãq@eyœàFÀc´Tc©ôSBi€—QBDå”â0££2B;f¼}$çÍ›DETVr ®)9>ÀÁçœVŠvçðRzE9“™R3"ÚÍ*JÓ¢äËŸ³Õj¹}XÎ+ e½Ün—« EYF,D=¿…B´N …r±´Ä ÿ¸ÂŸi¡(Tü*šià²j±P*‚Jš½k( ê0)UMîÚŠ
+(Ã0Pz‹LPd3"‹¨n‘¥(Ú'/Äb óJUJ7‹*Ãâ5£y2 ó¤·$œaç¯GéÔADuë Ea6GëdlÖ‰g±é%8ký”7'¸€Ê.A5g8ð qrÔ8ÙۭƉ’–Ør½¹‹×,¾=.ïï×® ÷W,Éó»&
+~ĹD×äÜÉãËK<”?r¦”Ð(¡|"Xí?ÆY)™‡`‰¦v«rÜÄL›¡à ¾§¦Ó/}´8Ðâ@E¼zE ”Có`æ’Wú¸ÒGuà²ü ËòÚú¶uY. rK¹,_¬óXšÇ ²÷„Hà eêüKséáVãÒübf¡$N\¯’°²rpŠjbië=!*‚ªú8Gn 9„º…U[‡|£(Ãõþßó’†Þ2Ô_óË22‹¨ŒÌRÊ M„—ⱆÉ@†Ç•ãqŒ †ÎÄ«½¬¡·$Lž,zº•Q%¤0ÌèhwŒîÂOcٯƆ•pnQ9É%°¦ää «k0,¯”š Ñî  K×À–Åv~·yè0L˜­¹€a"%U—¡ar‘$Ĉó%s{&
+zÚ'!©±Ú¶ßâQT%¡cw€ÔQ‡9¨j*ÖB»dhvIo‘ù»6JòwŠ,¢ºE–¢Pdh–œÌbÙÏ,ñÓ•cq@eXœ š,–X‘­’W©ÉmugF§"ª[)j:ÀëBÐ(9ïôIZ_O’çPÁ%¨LŸ°
+éq›do>´Ú$Š²ÜsÉ•¯ËëÅõ‰U3Ê’êžß3@PI-z&¼#Mpի𨂓ü
+§‰£¢Ý3ñ¨ªžýtÌ3©£Ò;Ò|S±zz&ëšÑSdÞçКeDQÝ"KQ(2ôL^ˆÅZ#eŽÅ•aq‚‹Ñ3JÕŒž:ð•.`xÊè ¢ºu¢0›£g2¾ª}g-1¹ÙS
+Ý~ÛŽGEP•Ž>Á¸;ÌGU[Ÿ| "z'è|g路ÊåDûg™tª,¢2*Ka¨2´N^ˆÆZÀ°ls4¨ØhŒÎÉ0œ“ÞB\+YF•B
+Ã|ŽÆÉØŒ“þŠ³Š.sŠ ¨œâØ8†žï盤:­¹{ :[²æZp@ÁdÖO’ .—QåÉŠá¤ýjç¾ñ
+endstream
+endobj
+993 0 obj
+<<
+/Type /Page
+/Contents 994 0 R
+/Resources 992 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 987 0 R
+>>
+endobj
+995 0 obj
+<<
+/D [993 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+261 0 obj
+<<
+/D [993 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+996 0 obj
+<<
+/D [993 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+992 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+999 0 obj
+<<
+/Length 1836
+/Filter /FlateDecode
+>>
+stream
+xÚí]ËrÛ6Ýë+°tDñ~t™i“™Ìd:®ÝváÉB•èX3–åÈvòû½ ŠE"6%'T‘q̇.Aàœ à„búŒz?#Õöˌ– Š4ÁÚr¤ Ã’¡Åzvõ‰ %|ôÌ­Aß
+à ɱ2öoÑÅì¼ÂZ†4ÓX:ƒ )°U„·—³_ÞÁµ-¶Š)ty´ÆTY¤…ÅŠPt¹DWgëÕÃÃê6“)ÂΖùu~·Èß|ºü0ûý²QÆ$&Ú<¿$h¿­K†5HK¸€,A€z
+謈-!¸;ü@ÓJÎmÞÏ®ÃÖÃëí'øÈÕqF¦šs[¯á¶ŒZä··.ÔÆÃà8ÛƒÉZqš ,ˆ”5CíÝ Ùªãí~š7H!©þ6÷kÔn¥sÔ£jèL`%4Ò@â•¿;v€ ƒ‰Ò(Ó
+Ȭ 6>Hlµ.8æQTìãožRu¿0ˆu¾»VY׬®lìæ ÅÒÜ<ëÆΛåëâçÖ¼+~÷¹¡ 1´“ÆLN!  Dž) I¨•pa£àf %®$á56 ŠÔÛ°>X
+Gh\¡b4`]›©Ñ˜s,œø~¬àv7Xíõ »,¼ŽžmÏ©†Ï¶fM7{ñëÉ AÀÌY‚GE„ÂN@ÇÊç0óyq>§}™<\4Ö FZbá’Yÿ¿u¡úÓzyÐÅwwÍEÇ@ˆ}jV°Qê‡ =£fPÂ(̉)®BÅÀN`Csy♊ûÒÌiB°"„Ð/s5„Àú&3 3b¿ÿnv,4>—Љ;¢×9Qz\UdÙ<ÞäÛÒ7ùü´ZæËrß*½ŠÒ ÁŽà¡‚)eÉC9ZnbX[ä&öBEé™cqãžèñP*”•¹©c¡¨vj*«šÕuMJ²P¦a¡
+BTÊäÉ991çdôêD<‰Íœ<*¢·
+—ÙáeæŠjeÒj¬™í7WdAÀT°êâwûÌ•&.LX®²Y]ÛïLXz\ÂÒÉ\IæÊ–™³CŒ­eæQ1™…¸$³d®¼ÝT‰+T”ÇîxœÌ•©˜+#• ˜À„èˆ<*¦„—2z2WNÏ\¡BŒ’œØØØ$Ê£¢’ p]ɉ >É\Ùg®4Œˆ~s…Y˜T«Ê\yÚ^ÏÕ3,ßæp°2PˆYÉ#(–‰V%åˆIÉj^$%ñREb]¬ìôY¯R‚*L™’þú§kŸ´`aFr5ÍêªNï_Xh²Oþ¯öÉH‘9ÃP>,2Šˆ,€%‘%óäµX¬&î«kƒ,®@1·a'Àâ–sB“uò['#uàž$¡îëoC:ð ˆXÊæÉ89AãÄÂ\wŒàŒÀDE¦O\Ö›àÀ³sMhzeJmšì̇^ÓDh-Ñ%[7Ûû|¹é÷I\½‰Ñ‡÷I„(R'Ÿäh9ˆÂ‚Rz¿¬tãqÉH»õwÿ»Qʃ
+^]î{7JÕNBeUÓ‹Ò’O25Ÿd´È8Q–#«@Ã @IaÉ$y%
++è7æp…Š8@
+\€:gÚï• ¥¾3:îAÙá¢atPN±¢Ð¥\ ªÃ©RgóÝÿ¬Ã©>còWر¼óÁõf븘'Ö5ÌúÊ`O÷÷y…j]Zœ
+åQ_ç·OùCuuWnoò²¥²QÐÍz¸ö?®n/òùEõ@K÷2†bÊêË,6ëõün‰ F‡lpß*R˜;'QÀЪxejÕ‚ƒþ˜%
+endstream
+endobj
+998 0 obj
+<<
+/Type /Page
+/Contents 999 0 R
+/Resources 997 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 987 0 R
+>>
+endobj
+1000 0 obj
+<<
+/D [998 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+997 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1003 0 obj
+<<
+/Length 2746
+/Filter /FlateDecode
+>>
+stream
+xÚí[sÛ¸Çßý)øè<‹ûåq·Ý¤“n/™u;;“Ƀk+±§’•øÒl¾}H@"A°-Òk:g'ZÒŸ‡xþ
+E«
+ ˜ICÎ0A” ;½¼~µÐ”ŸÝÝ\\n®–çÍËÓÕíòúêô6“K.h ¶øI( #TÖ¿T zSÕÒ£:¶‚àþíäÔ³òáüáÍÑûŠCë`áþÇãøÈ—ñˆIÂŒ®~½†×päÌUñ¸ò± 4Q¯{4‹Nœ¶h‘DZ´Cí]TG¿VÛÊxWíþ´¿ ƒP4üßþùl]uké]5#T´÷•ÆWðCÂîN_lÏ/]j_Þiø¾+–=èŠÛÚzÅlµ0ÔHeR'7ÄSÄÓ´JA4urÿøJÒã?Å Þ¦YWÙ|‰øaSÜ]ißõ*ôªþ{(—[61PGðÍáÈÍx&æ^ѺCQæ\Ø+„¹†3Þg\_b9œ²=v„Ûgÿ=Å¢¤kš³¶‹¶§/ö‹íkõ%ý8é¥.7†ï÷S…FëMPÝUÞgAS¶YW83—i¨0è5æ²í Ùº­9&^kÒºe+¡<kï‚ø"ô%õ‹ïù^#ùü¢—À˜Æí4ÖÚ9QÈã ºG"w•Se²DJóœ2™ ÿÃOC½Æ®!^ß펬òïvÆN{õkôBÎ ëNé¼¢¨ì…D9·VÆ?nÕÙP{ž>´*¸ ‚:¸äbøxôáí§Û焾¾ÿÃYûé#b߉™¦l…PÞtV+
+©(º‡éºÊ ; x4z°é¾´
+!xBšÇáŽñ‚PxÐYXNx ÿ´¿Í.‚ƒ{-ÜÃD*ZY¢D*à Eø[ËÇg(-Œrd(Ó6IöÀ&ÉÞ«Ib0übM“Äô#ŠC@ša‡ JPEQÏo{
+ŽKTS=¨ŒLN´e$vÒ¢ÃìÄÿ;!“ÜÝn®6ëÍÝM@(›«ÛëÍj (ˈ…°ãê xÊKh—T=…ê0€â'’q¢œ©Ç™³PUª«èñ¿NúóPºÚnëÔ1
+b”ïÐl‚2" f‹ªû˜-ÕÎÌlSþÈl‡Âc]Êæ ºW6'Ú~6 D*ˆTž©$‡ŠR®à‡¨ºRíT~@¶‚leÆÃ*iUódŸ7^PÝËx‰vªa–!²Ãƒ„EIKŒ ‹ÄÎ7gÿÍஉƒËŽSœÄ¹Dœòš"­mš"%;z-?/UI¿’‘ ÍGiTQTgðŸûóQºªn#ÔvWV)R¾› ª ölÁfQ•·Yªš™Í¡Ì95ŒK+åqPò8QM•ÇOžŒï éÔ ñœ¢*ï„T5·± b“ûXÎh9ký(»d¹ *X.Qõ-gÆê|˜ì&-1L¤ÄŠ0«hùûçåÕùéV™­P¤á„25>6‘ÎÞÌ\Bl2÷•…ÐVÄÎ_0 EHß$¢ÏLBU5[%ýöϽPZº¼ ½¿±÷gÈMp'”gï3A¡=§ºà³¨*ù,ÕÍÌgNþÈDff²Ÿ)bm)“ƒª˜É‰®ŸÉl”Tî †ì7CÅ õ4Ã
+fˆª’RÝTf˜¬]G|‚»¡L?–ª§ˆ(U2]PM—è&Kuð ÃÍP"=iñˆaz",±.Ìúxzs›á&ÌÀÑLÀM¤$¢©0ä&ó_Uh¹>œ(ßÙùa°àD91<ÝÄ«¢¨Îà×û¦›´UéªB_ØÑû}Ä&8ÝäùÛÌoYÂtÁeA”7Y"š™Ç™Ì9‰5$ƒ.å³8¨
+iœ¨¦Êcœk‚sMÆw‚ß±DðR{Uy'¤ª¹µèKp®ÉSXκú½`¹ *X.QMØùàƱ{XÉŽA ²aqÊ57ðbyú¿oðDhN˜°ãÃy"©EXòÒ¦˜Ê×æÈR­d~mNÕ)ü—¡µ9­Pû§˜",AXò}Ùl»6'k³¨ÊÛ,UÍÌfÈKæœÇqmN>ƒªÇ‰jª<F^‚¼d|'l×ædUy'¤ª¹µèÈK—<dmŽ<pmNÞrAU°\¢\›#qmÎ$Ĥ"†‰ wà
+
+§9742VBìû[ЄûQhDuÿušìB!4Ah‚6kC“œÍ¶8$k³T…СÉÓC“lG’ÏãD…СɡIÎ [’uBªBh‚СIšd-qHÞr‰
+¡ÉSC“ˆ„&ÜHècÞ4«ËO™59p4¿ez\`Â#
+ŸÎ‹›è&\‘õ!ƘüŠœ(ªø—¡9­Pû'ºá°ÈK¾/›Å9Y—QÞd‰hfCX2ç$Ž+ròYT…4NTSå1„%ã;a»"'넨Ê;!UÍ­EGX‚°ä),Wää-TË%ª ;„%û`ÉB ³œ1f˜¬6Ÿ.on/Ïn†y sšQ60áp’ãHL^Â>JšH"Ë¿ù+ÞÕŒËØðæ¯^EMCô7û6mëºMQSÜ]iq÷W„&3rš9Ìiþ—«ºËÏ9-ªJNKu}§™gí4D'sNeÍëAD!•ƒª˜Ê‰nªTÆý_qÿ× Ì áqXU0CT•ÌꞤ]G~‚üd^-ÒBRªÒ`*ªŠ¦KtS=¶àž&ûùÉŽI ¦%\&lJ³^ž_Þ­3ôDr"¬Ÿž@IˆÆù&/eΛ´îðõ9tDÁ£±sÃóM¼*ŠêþÛ¾ù&mU:çÍ×ç :™¡ÍÜáËs¤Ó—EUÞe©ªç2‡«spÂÉ$Y¬5QÆ•²8¨
+Yœ¨&Êbœn‚ÓMF÷_N£5/ø ªò>HU3kÍ–àd“'xJñ«i”,Ÿ¢ªà¸D5ÕS
+N6€%-1 K¨#\‡ÅUWwg«åéõ«…¦üøóæëòzy>ŒN,|M)' 'Ð;ú#’\ ÛÙÙ„Q¸:¿±IÐÔéü÷¡}Mvp[Ä&è±Ö¶&9EQÖc‰÷4Ajòä{šd“8ˆòIÜá†&Mf¸¡IÎQ”µA"ÂÝL™àn&û™dýDy¿uE/r+“Ô¥-\±{îoêO¶p• Ü ³MýSW`Œùzgì4
+endstream
+endobj
+1002 0 obj
+<<
+/Type /Page
+/Contents 1003 0 R
+/Resources 1001 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 987 0 R
+>>
+endobj
+1004 0 obj
+<<
+/D [1002 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+265 0 obj
+<<
+/D [1002 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1005 0 obj
+<<
+/D [1002 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+1001 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1011 0 obj
+<<
+/Length 2060
+/Filter /FlateDecode
+>>
+stream
+xÚí[KsÛ8¾ëWðHU-±x?ö–ÌNR5µ[]{qrÐHt¤It$9žù÷Ûx„ø´#»6Ê(å ø¡ÑÝèn4Z2N>'8y?Á¡ý2!Ðâ„$
+#eX¢4E‚&óÍäöNðê—#ftò耛„ †¤6Ð_'ד«cÆÐDQ…”&C4p"8<Px{3ùû;XÛ #©Ln&QÜ ‰Ir³HnÓ]¾)ùúÏi&1MïWkxZL?Ýü2ùù&b‚R°ÒÏç7TS¶aA‘"<QŽð—Pï8ÚˆÛáÆèVXr¶y?¹M(2ZkVµŸà•åqB8"Š1ãž7ð -%&)Ûµ¥Ü”0xÎ:0Ù”5(e1©.Ð2™\'•2®’ú'
+Qõr>®AMð3C`b,¬•æ Èì`Æí€S”Ï
+i
+SªöX=ÌÁü[ˆ¬EäØgæ±UÓ³np¯Õ†´é4—Zzg ò½M.~Öö3†ÒLŒøY‰ñ³&ìÌüL‚ÊàØxžŸU[Rù›oÞæ ÎbÍŸõƒò!&nÏÊ1{l4Þ/[&|1äØ%G†è1C¨1CnÀ^ËCœ«ïÉ1’ðOÙ ½¾c£ŽÄ›ÑÑãÌjxô(wZvâ7?¸+ÐÓ\Cº?ì1â1¤mþô»Žãó|s'}¼y!ˆî”!† ,™õ”­Mª·ÕÕ owæñ…c€D×Ä› F³.GΰŸi †ÆÇ|- Æü­{Å#®CÏö¹/qxÁ@‚:\}[Qãåˆ`¸Ûdš"ŠÍÓ¥©)Øj—þÖõ‡Þ‰4ÎDêwð0ÛþÞ_'‘Š"Íé+ÔI0F„ÐKäuc>1é'Å WybDØÃüYj˜Ð=u’€*A΂oZe’ê8yf/e’K™ä/èf K8F¼,€†¬:3»”HÎÙˆ%ƒM—†­8 F̸z-;¾THΨBr6žÀ)X-‹ç%jØš¨s‹è—bÉ9KÎÇå´qwô— ¨—k ^ñðyÉZ‰4/Q,9‰ÊKUKê*Dµ„¤(÷[ø5_®æë| `B2˜½|ÁDraÏÄKÁäLjCÆ°Ó &ŠBGÚÔ’˜þ‚‰E• gÄÿé*˜Ä¨f²Ì^
+&—‚É_Ð͞Ƞ›•¨a7k¢ÎÌÍ.5“ÿ§óÓk&Ò€;¨;n ÚvÌ/5“KÍä;õ[ç BxB‰ö„&êµ<áR3¹ÔLÎ8‰²ulïýÃ.P#.×@½VõÔLšî^×=¢b‚ßÕ=#HØc(Ô®ˆ”éì·u>ÍQ)•ÿ€Ža­wÅÎnY£–b¬Š ûóÄÖÅcPG+ƒÎ —%êëlýï=ÕÕÖ·‡eîç"¢‰öC¦Ê‰ÿ^­¯óÙõÃîn6Ï;–ÑZ-3/6›Ùvœ¡5íÄÀÑÌŒ °°AD mÂWh(‚å¦'·>0Nßlî׫Ó|·?ØtW#¦uD‘©Ÿ:e,Íÿ8x¿[åëÅñü¦¤Ã
+“gh@°j;–3«e¡Sé›C>%:u«Ã“c½ð³H ¿Á4i9y¿,·¾»
+í»©béêóÃnJiê‹fÞáÄð_®,–â†SvšÒˆs
+6Î-Y¿.6¹_«¸³p°qa¿Ü¤]À2B„/9-ó½Åqu$AÙ…W÷kÐÖ" .þ Ûƒ:¾Ígó¥ï@r754µZ"Ýß¼Ip[„ù³‡C±™VóÙÚþ‰šZm÷ùîP.÷[~xÌó­·xß ngø„[îÙ¯ejRª›vjG?¯¾:ÞvæÆ~Ÿ2™æúðßYäûùnuX[?
+ß>ìsä7ÚËïU%ƒ–«/u@*‡6Åþà”oÇ°µv7º¨£‹ëÛ*š=8Ñ}òªÃ¾Vä;Aµðþ͇2ûˆþ ~‘Nc®âÚ› ®s¡l%êekXö#=.UU꞉@RuŽ ÕƒK¥Z¬M';šïr·
+]ƒzàY¼^¦ƒTs¹'ײ¬Á0¦Á»êžÍPÛ£¾È
+ 'ÓO ãïz«éuVq<$¥Èprª\Œ#ÃÔˆ\ääúg¯H5©‘jn·Š"JNÞ+ÒåØ^“éç^™jR]ÛTqÛ¬?] §rË7%aÕ
+®•4\T”n&2ÿ²ºöÝ
+endstream
+endobj
+1010 0 obj
+<<
+/Type /Page
+/Contents 1011 0 R
+/Resources 1009 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 987 0 R
+/Annots [ 1006 0 R 1007 0 R 1008 0 R ]
+>>
+endobj
+1006 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [482.304 550.31 496.969 564.258]
+/A << /S /GoTo /D (figure.caption.25) >>
+>>
+endobj
+1007 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.093 527.989 125.758 539.6]
+/A << /S /GoTo /D (table.caption.26) >>
+>>
+endobj
+1008 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [292.127 516.034 337.596 527.645]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1012 0 obj
+<<
+/D [1010 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+269 0 obj
+<<
+/D [1010 0 R /XYZ 49.606 581.649 null]
+>>
+endobj
+273 0 obj
+<<
+/D [1010 0 R /XYZ 49.606 563.261 null]
+>>
+endobj
+1013 0 obj
+<<
+/D [1010 0 R /XYZ 49.606 510.056 null]
+>>
+endobj
+1009 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R /F90 447 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1018 0 obj
+<<
+/Length 2305
+/Filter /FlateDecode
+>>
+stream
+xÚ­YYsÛ8~÷¯à#5Ò
+ãUݨbä4tïF”‡®Ñ ×7F§˜¹þ—~Åe>ÝRìîf¿+ÿ²È]7„‘s~š+ŸÈC»2 ü Œ›?’ò+Ó
+¦uß/óÜn'ÖóJÚÑ¥t“ú›Ù¾]`ÒxLÊìgâ¡  ŠgýÇàƒºÇã|öX&æë/D"˳&Y¬ÌNUæ+Ø¥ ˆ`Äý˜Õõúís3|(‡¥(­G©3g’ N’ÜÎPð!þòïâê-&€=1CœÆQ%£Ø'!=l ‹¨îKj“ìå^P)pS]‰óªÎŒóaŽHÊÔLŠê»*TÙì‡Ûq
+ £­wÕrQ+ЂQ÷>U‹c®Rõ×óñ\©Ô>øVVMýÕ,)€ðF%‹¬|rü>£«¬n’r¢Œ×ߗɲÉ&-
+wºÈT™æ+\qwYfMýÜU†îX•uKÕŽDìªdŽôy•¤€
+W ×yérùMƒLºª™
+E3(ã)kfÁ8ò hqãgUÚY½œêOˆ†B÷¸ÝÌÚçP•§‰1?û
+µ°3[Ç·uŠ'$u“‡³ý=³•Ì->ÖpRT%ê‰Ói•÷c§íöóê Š‡Ô}Ð 7s›§ÊlûñN„´w¢¶¨C;O²…Ùƣܼ4d‹Qyn†JÈ¢º°ê2Áà¶W¿c Ú-êÖjRáÁác”õÊä„õó´O¿ž2d’f–™#6KË$ñ†¤ÈÊe£ÐPAcc(nç Z©yà‰
+0Bï,ê¾Û£.2Œ×3á±8†z'v€x5¢ ÛéƽG !îíšE$~25³Ëª(L¤‡¦ËÝ14 }®oMó>šƒ&í+$ˆþ€h u¶Ý=±Ð80Á­F‘½Y†Òé¤U
+PL”}à (,¾a¬18åÐ:¤º·‡JA¯-nyçë®0Öu ÷»ªk•o½³¬×l­ÔªÄ(S7Û0XY…6k•øCêÆÆ£ûÊFŽ5 ½øždùÆA;½ue“=ð^Ñ'}´=ðz’äC®È`…-•íÅÇÊ’Rƺ´TÁ¬¥½œ%ó¦U‚Û/`c5Ù`…¾ZÿxDD]Ü 4¡"ô׎”•ÖO1ˆ,m4ùŸöXýuàÓ'é¡W^¶žÔñi·ˆ®ër6}DNÀ˜þaâÑ¿¾s4õ™Ibn›?ꋘŽ{÷@"h%Œf;› %Ôîþ+œ38´€Kôü­5¾Bv&=Òõbâœy»$Þ.¯÷>¾¶¡Þí!÷ºòhXm‹›9]»ÇÎúþ<þ ·O¯¯tþRbz^;6¢vĘ¿Rÿßn·.æµ>æuœl "å¥ÃBîK´m ŒÙ㲋{F_%ø<ŒºýïÕ§¼%[O]¬Š‡*?œS²w–`s¬Âx]ÿh÷S
+endstream
+endobj
+1017 0 obj
+<<
+/Type /Page
+/Contents 1018 0 R
+/Resources 1016 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1022 0 R
+/Annots [ 1015 0 R ]
+>>
+endobj
+1015 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [442.154 363.236 487.623 374.848]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1019 0 obj
+<<
+/D [1017 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1014 0 obj
+<<
+/D [1017 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+1020 0 obj
+<<
+/D [1017 0 R /XYZ 49.606 780.328 null]
+>>
+endobj
+277 0 obj
+<<
+/D [1017 0 R /XYZ 49.606 410.52 null]
+>>
+endobj
+1021 0 obj
+<<
+/D [1017 0 R /XYZ 49.606 357.258 null]
+>>
+endobj
+1016 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R /F115 467 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1026 0 obj
+<<
+/Length 3362
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ks7¾ëWÌQ®Ê x?Ž¯ãòV¥*^©²ÇŠ¢VÜ"EY””øßo703ÎKEJÙ)ÅœÁ4Ïî>
+-ON¹>™!¤¬Q
+æd(ëáýåèúvÙUÂëŸÒï äئÙQM‚&•)™L¯ŠF†Ïn°¥ñáß±¹‘Å?~ÿÝæؘïËj¯uˆc¶Û­Ö BZxÑ”˜ù ªnÅDgÇú4†êH½§êF¿-Χr.±±Öâð¢™]+«·Ê†ö,øUU%Nœ>œ};E¹bJ¹Ìl —çG_¾òì¾AA·õÙ_‘rži`k9Æ›e'GŸ·ÏÃ(›Y'÷vˆPƒì:Q°(e»ÖÞÊ0.ð‚Äl!Û¼3æx4»‹½l½
+¤tÌB¯ÛFÚRÁwhxë9Ó)å³ï×—©z͸R[IU9Ëh±Zªþͯg“e;aƒ2¥Â ·[Ü æý3{Í3yÄ^‚!½.ŠQLƒÆ¯×¡ªÕ¡ Ì hm˜2Uâèîvqµ˜/î@H-— !Ï'7Pu¨°ûÉåt<ê`OÎ&ï1hgzFzȵ‘×Èù[T³Hz™àŽÁœ9ƒLñçãÑ— ÔŠ÷^U¿_áfõHh&œ‚~ƒïsx‡_)BVþÎä©$ƒ÷¼ƒ&_ãS'Êœò:«.¢Ëìè$«ªäs,ΙËÿdGWV¶ ¤Ã¢ä­ÀYG<=‰¼3¼7‘ö_Ù“ 6$ó`Ät¬z y0†BL §cý”A%YQ‰[îµOÝA“wð‚z½XÏ@ú+Eõ£UEBÄ$Òÿõçñ<[—Ïõèy¿]ÖfR‘ÖmžV½]¹Wñß>EP·'Lr-`¡2ÕuŒq`S`¥7S/† h7μóZ¥tËU74`Œ¤4+‘œ×sǤÃN
+çAãéýt6]% °æÿ¢ÃßÅÊƃž/4Œ¼Ýʼní3Ž€B
+ÈñÅ í]"Lnß_P§&øë-:¾8!¤‰¦}é©äø‚@p|A’@øÉcðíszx•†q·¶ ?9ŸÞ'W¡=¨WŒ[µ T쯳–`‚E^áh
+#'‰{²ƒì 0E†_ÐÏBBÎŒCÚ¿|Žæªñ=o2ÈiŒãFÞ”CHŽóà‚ <X'ešNÏcÜ<¼þ¹¿Äe³¤'Í€!pßfS‡€Õ}T*PÇÁù˜§â1•aíkÞŒ7ÇmÃ)·:kibå$.¹f.”{Í«—qÜ ½NÐâÑN§«ðß¹ü /ÊIÐéÕC=0¯ž
+2\í Lzdµ|%`0Ä]Lr8DÈQ_æj‡T“ÎjÖûyT¬Ø{6µŸ<8*"‡ „`nÁ$ûCöç°ìaAáÍ1kö§ Dó–—Sã‚×ìOW ÙŸ=rœ¢ÉqÊF.™214ÅYÍe@Æ”4Å䇂|Šs˜ñÉÁ Y²*dU8£‰ ­áïÑ>-2Z‡e´Þº ´(#V†°˜WOÑ:=\±˜uñ%£µŸ÷ÌâÚf¨™ Õàf¼éXûеÙf9Mλ*M¯–·£Ù,Þ>Þ¿Ô “Æï`7ŽrÊ!h7íÆyµÝ8+QcØ
+[?øš?5—zí úþKÅ ˆ°ê «;;\Ëí4—ÑŽ€Ýì  @°*IÝœ\ïïçÊõlr›Cèìè, 9´Ù‹YÊÃ`)Õo?F$Pá¸NŒèîl>¹YNφœÕÈ`¢~Ù$A† Ë" è <«‚ÃÛ1Œµ&òó u6FHÞxáSî¤I×"x)P-\€èVI%¢}s03‹&^ƒ¢’q'1«!Äâá>¤³¸Ê¥Û3¤ˆñ05$†XR(˜¾ÇÄBŠnPÇÄÐ qBàáÊËR(º™e Ö˜Ô¶<ô«VÅJk<±¤µ:*›*kÔAÒª š´>õ2ø‰&‰&yz-ØŒ¤oWÒGþÈÿÉY;òâ´Ï#É3É3ù¢Úô :Áô!èSZ!ÀðwúìG:µ`VïbË›´ž©äxœNB:_ó¿R Câ‘
+
+fdSȦЬ…ö¼å½k³^þ–9²Yd³Èf‘¥ýÚh#,ðÃgÍwL[۵Ѧã‚Aû” =gRí⬙àÄÈÓFÚˆC÷ öÝ0B`Yßn
+endstream
+endobj
+1025 0 obj
+<<
+/Type /Page
+/Contents 1026 0 R
+/Resources 1024 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1022 0 R
+/Annots [ 1023 0 R ]
+>>
+endobj
+1023 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [187.798 748.984 233.267 760.596]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1027 0 obj
+<<
+/D [1025 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+281 0 obj
+<<
+/D [1025 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+285 0 obj
+<<
+/D [1025 0 R /XYZ 49.606 736.043 null]
+>>
+endobj
+289 0 obj
+<<
+/D [1025 0 R /XYZ 49.606 716.066 null]
+>>
+endobj
+1028 0 obj
+<<
+/D [1025 0 R /XYZ 49.606 692.156 null]
+>>
+endobj
+1024 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F93 449 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1031 0 obj
+<<
+/Length 3390
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ys¹~ׯ˜GûaÜG]•¸²•õÆ+míV¹ü@SÔJ6mÇÉ¿Oc0
+zQ W Ý'÷þ¥Ä(/Ô_Þ^|(8qÖZ‘®á'_Õ & 3B¸êû¾Ã•3WÄëÜË‚:E|/{0eCN*[’Ê\T趸¸,Ò-y_5ç,kù{q±ÜñfÃcÕŽß”²“8ï¹ÛQö–QÒý›÷§Ø3KK”±E œ!Ð/Këùçé¢höÙ$KC¸*J£8¡Žy!-˘Xƒ"¦bâÏÿøg$a"J¢ÞoJ
+UM5½¯iŠ×b»F½Ï³—)ÿýEUX»{Y){÷±-«ÿ‡TL¦¾,áž×ÄPq@í¥ ‘Й¹”;).E™SPk¬ n ù>d\#8<ôÔ§Yb ýÁH+áák †ïmÐá™
+Œß|›):²+¦ìYß<"]…êUt1`*U?]jPÄ Ñ¥CºlCG|¿,#NšCÓ¥ä„ë] =HIŒ ×_6º?'LÃ"8%(O–Ãà‡kY¾>PWÞü‘¡AÛWŒP„j3Àˆ
+ßÃÌN¦ …ÖäÈ÷sqê`2‘æ;)¥;OJ¦ù,jDD_Æ®ü¼}>2Í ‰IO3-tÍjT Ò¬…;
+‹øšµ«K«ümlQ÷Åß.øÅ» b̆;æ‰qç½8Úøô¼JEâŸ3*¤h‰ˆfšñº¤›x;Û?ƒàŽŒž‚ZÕÉ…æOŠ+$h4˜&HGµ *´ +´4^mÒ@Ñ2xÐpÉŒlHˆI™€˜ÔÍŸDgÊT¯LÄ&±#$5 :;ôæÕœ$\1?*Ê;u'1ôéNæŠÏYÆhŸGè=¾U(ªPT¡Ï_…¢W|¯8jIÔ’¨%AKšý´¤Á•’Ç])AňŠã˘ãÒÙù,¡ÞE½‹z×R·\KÔ>t1u)\M¥0«wã‹©’àwXL]®–õJê÷O‹ÉÚ¯¢/r:ú'4ÜJñ¤
+ C pV Væ%ãØŸäèHÎ`
+<`ß#*‚IÞÂíFrêöc¹–À=çY®a4>ؤ€Š A–·p–Cm·¤ù <ܲìq\Ìó<š²7±%÷÷a|Ø1ãÃö&ê$”öU0ÜÛ#èžq{ v
+¢€8œy^v“(q‚B]‘Æ)STË¡•½¤éó´ZPmþ^¶”íB|®”&ˆÑJë"É©Û¤ŠlQTù<@GFOA·&ßÔËÐVÆî7ð5_›KËÖëÛ°Es¹ç¶èÄ>‚9œ>ñ9
+‰ç(¶ö^!m϶ 7ö#SÑÀâNst £"@E€a¤žB)å,–{„”'ëÏÛ‡ŽRLíô1¼ÂÒ‹qèF¯0ÆŽÂT=AªÆjg'¨šQÙ8Aå_ÃÀÁ\tOPebR& &uó'Ñ™€Ía©LÄ&±##D¢cã9¡ZCµöüc,áÚ
+ R°xÝ´NÞR>$Ü|#/KºíÛ‘E‘3DJV +Œs´®'ªñ†6ÜUÍ0ô°`#¦²OTûÐ^ªŒi¬ŒYs\Ÿ£b%2TªK-´:Gz¿6‡"ÃiáIv~û=1~г„ú
+…‚™åGp‘c‰ íG úHN¹«0êél¡ ªå_¿ìIêälhùlA¡/í¾… w¢šêßB¶h¬7pMÃûrÐÉ¿%7áªÕn”V \™3`™rçÈTLŽLõÉ—zá•@ÏÏÁ¶ü!Y‘¬èÏ:ŸýxÈÇçÆG
+WŽç¶%KJ1ï{Òzræ°TBžx‹‰Ñyt$vv<Rûœ\xOª?ãyQ</ŠC¢i+2Oú=1 Ø=¡Æwµq ßâ=0ߗ׳õÉ·ÙúA¯”‚¹‹?öz 7ŒˆW—Ð!ƒ™Ã¿RʇJuRV1\ÓZ
+2RÃTx%5¾0—Ó2 Ö•°‘ž‰HMÊd”Y°×–ж$)»K£i½±{³;|ÛÆh6#®%‰®¥c¼2 i‹´Å}nçøJ dæ#1óežKµ¸á ¹ˆV·¾¡ã¹Ž\ÇcŧpÀr£ˆRbÜ˼sŸõ;`Ì&ŸWËa,spË:ÖIXfˆ
+QâЋØSž*Ž´=ìû|)ˆâÛ)×$¯X„a T‹ÿXÅLË2fFTUÔüý_ï"WZ¸ Dã¯uuSmqë4î¬{´Ã½䌠 #pÆ |—3ACœiã3è{|¼3¶}´Ð;ÒB9B-Œ7Í´¨Q4H‹nú<iG]ŸØQ×Ø^ÂO»$3÷ ª"ê¾AU×ÆÝnOåÄé!‰f4ŒJ=Ïà)Yœ1ƒ4kÂe¸çð0./îHÛQ—S–PñµËkößÏóÕuŒ¥·Z_/'ËéH(=&Œ_Çœ^L b4n;D§×éœ^Q‰e‘ Z_qL8–®9,~žVçý›¿—mežsšÇ3Hˆ^h™•Òtd´
+¹m4ñ¦c'uuÄÛïx—âJžy’²–“Ïo{ö&W{;&r;©ü‘ÚÉPT)£ßþø¥ëäkâš–2Ô6U %úøŽïãC±•Šè>î_ßu‚Ìë ]6((g¡J$¢"hH‰´q¨DðTòñž¨'¶J´è¯o‡óFOhxAO€ŠÐ5&@uDu
+Á¾RÚ*nãÔgÚÀÔ+³c2sê3®ˆö^}f‰µ»z SÝW“OóÙk¨‰yÅÝ_áƒnVkß [ N%aÄ„-&wË
+endstream
+endobj
+1030 0 obj
+<<
+/Type /Page
+/Contents 1031 0 R
+/Resources 1029 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1022 0 R
+>>
+endobj
+1032 0 obj
+<<
+/D [1030 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1029 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1035 0 obj
+<<
+/Length 3635
+/Filter /FlateDecode
+>>
+stream
+xÚí]ÛrÛF}×WàÑ~àdî—Çu*qmªRµ^+ñV¹ü@Ó´ÍZ’²Iiüýv
+`@‰Z$<)ǤäÃÁ­OwÏaO->´xyEƒ××W?ýêháˆÓ\× 鈦º0–ÁYqý¡xûŒGáÏß]ÿöÓ¯Œ©&Üg ŒUÿøòe¾AØî
+£5Q¶˜­®Þ¾£Åø§ß
+J„³Å·¸*¤T„Yï—Åë«WƒÁq©‰¡®o @ÃÝ0¬¢}³˜€1)‡ƒ•7áÏçJ=›.ïæåØ»œ;"?À±¹¤Ä
+dž[ÂEuì—Ë¿¿|î8®•ðTù Çpÿ”
+ŽûË_ÓÕ—å|Û>´â”У.¹ýÐaÅÒì&m´í€Tõ_؃5ï¡hÜCˈr& 3.oát}»x>§ôl{÷~5Ý,ÖóêÇoÓÍÇé¦ÇšF4âv#+ çjàÑ”<ûZ
+£”,·àð`pS{è
+åA%ÍÿñúgòŽm{u°êd'»³=tu`;@Zaue¯šŸß}¼ýHÖåß1÷ÑpMÆPp£Ðé‹=8&°6ôÄò(¯¤(sà܉5V
+oŸ{Û°^ñœsuÏäUã—ð¸‘V–h°z´°f¦*:ßÿ4‹oA&ía&íÃÁG_\…G‘ RF©»¹àQãBˆ y››Fœ4Cs½áú˜ ãìøP½l¸wÛM:ì9s§x,´ ×c\Ë2fuÚã-ŸÎÞÕ‘ö®Ñ
+Y,
+™,
+=ÖÚÙ±¢%ðÁØ5LgXL*A±õ}PÔÔÙåÍ–a,{"9Èd9èdž\ÂÝH~ §ñ¨þœ&D%§9©ĘËbЉAéìÁÒÌîУË*=í`Oò {ÔØÓPƒluÚ j(­$U JÅ«Aš›$5HkTÎy¿D5Q²Nœ§w-–‹éæï¸ ¤,DMwŠZ! Wî\®Ê’ÐÈj…˜Fÿ¯Ü±Š„qŠSæ`S„*”Õþ_Ñgü§­ ícÃïà|'»¾œoŒ³,tÕBilÔ”æ2ÑÅÍØD¹FyPBìØ¥¡³ªJ´x-‰Ô-žCf(cÒP…ò ^‹°CX|Vˆ~è‚¡4—ˆy éAIpèHò›ÓJDUäËÑæDÒ‚wᢊºZÕÖ¥U(ê%P€½üÑ”‰¨@&ê§áCe¢¤Qv2µi2Ì ¨s½2‘R\jW¼Ÿ.—‹ííbV­/[-¶ÛŲg}™‚LT:vÍH) ¹®ÌšQÖŒÆVF”ôuò®ŒHi˜ó³eDT’ûE¬Œ¨1Ô(¾QÎzÑE•±Ä2"e(qê@‘u3!D ymÙY–ñ´2"¯Åzˈ<&bëû 1ÕYäee—Y#·«#êMj<ª?© Qc*“ËuD£®#b‰uDèÒ­8PGäAö¨°gø:">H?ƒ:"¥Lô
+DÒYâD9Ïæ›Ûébv#Š
+DÒ€ï²ú•DX—¢,I ­7a‰1WxݘKŸ°VÆ¢
+åA%¹¾n+Dû°ýp€ç*/m‘ñÉ’©z^œ%¢A¹ “²P\"qŽ¸ÕU(Šp!„ Y#:#(Ýܵ&œ˜»$6Ön«Õ˜˜±ï£±õÜ{èG‰’­æ"Äa}BobãQ›–›Üzè¬U¢túXNŒsUpp*Öº«FyPŒ>lñaøæCƒô:ƒÖCŠÂ“lovŠDx*¢Öäg7«Õtý¡‰vof7ëÛÍͲG+ÖY{Šb"©ÀÙ\L”µ¢‘iE–§IE‚0üRY*ïWêQT…Þ–ŠöaaH@Iêg ¹–è"„" Þ$Q(r®Tjì>!âB¢<(„ÖbºÀ £B^xvVBQí÷åñ:‘¥¥µÃ”Š Eˆò ˜µ°˜ß—yÍY^sö=²É9)»/©©Arš
+E‰Œ¶½®@5¦¤ô?_ÿ»­-íÁöƒˆ¬Âå2î¼>ídLàieG–X†ê‰Âf±À5ʃb\qc CV—ÎH]J·w Lj´wxX2ºB­ByPÔÞÜ öž©ýÈúRrn#ÆŽ™þÜƃä6¬mÞ"ç6Y^:y)9<Àܿܨ£ JDÛ]W(ŠÒ'À <ä5jQyIjBe##Ç1¼–—Vض¨^—v·¾oVóéön3ßÆ•"®9‘úEHÜBžk²P”…¢1 E†0a“„"‰-Û04: ×ëu]£<¨¤÷ï?ÿÞ’ŠÜ~<À“5¹œ;kE'$ƒIÓŠÐlñ•GcÝ®+ÇĨÀÆÀ„¼@팄¢{c?z…š(÷ÏïÊÚшPT¡<(jî.jïyZ^£ö}RÉ,1šHm<êPjâÚnsj“WªT” ¤qÕ7 èÓÁDøS£<(ÊŸ
+oºê‰š°ýHPë%ï"³HtÆ"Q2°Â^©…¬…Å ŠåA.„°1p¡)Ù\Oô´³è{sçÇ× ¬¶à8Z-ãõDˆò ˜¹°¨¹ó¬åj¢ïâαHYw µñ¨©MË©MÞí¬E¢túØzé>ÇêªãõDˆò }Øè³·3šÈ;£íiD“_Õ«1£ÁAÔùóÍíçù¦‰ÕÚˆá&ÜÊž ªˆÁi*Ͳ`”£qõ6’.eҀ툤I³ŽP+â­åAUTèjmÔD…‹˜¥»È)Cîlt¤M"v#Ø)•9I7ñÎFˆò n"„¨ìå1!¯=;«ÎFi^›•eÌqB•‹76B”EŒ=@ áõ󺳻¯Qšuc+"ìÖØ›ÒÔ þŒ&
+‹>/>}îjc$z”#Š;nˆS(Gà4Ê¥FY9Ù~iZa÷HUåìÇm˜Vêü kñ˜Šo˜†(*yü/ѵaZî€ç:Ùl²x40T
+ø$&9:,êGé*”E¨ÂÚTPG…¼ í¬vLK5w ™‘Á¤O@Fçx|Ë4DyPÌÜØÌ=¯G{jûNÊlp§3 ®ý™GÈlBØX2›ÓªH”eéÉ6NK ÒÂä¶
+’E+*”ÅèÀFš2Ò£
+õbP?*#%²“‘¨K“‘àL¬2½•FFiQ‘j#“qIšòÑ /"ÇÏÕGYC§†t|ùQ­!•õ¤¢_Bª1U 1é~¤Î8q‰ßCŸ°¡‘Ê
+Ò 9ÓÑkÕ¼‚„™~©ÆDˆ ¢DÈ ÕrñQš­óDù¨Üô¦_<ª 1Kß âñóµ,¥,Q«…£¾tƃúÓ™
+endstream
+endobj
+1034 0 obj
+<<
+/Type /Page
+/Contents 1035 0 R
+/Resources 1033 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1022 0 R
+>>
+endobj
+1036 0 obj
+<<
+/D [1034 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+293 0 obj
+<<
+/D [1034 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1037 0 obj
+<<
+/D [1034 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+1033 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1040 0 obj
+<<
+/Length 1811
+/Filter /FlateDecode
+>>
+stream
+xÚíœKoÛ8Çïþ<¦qù~ì±À6À‹Ý Yôôà¸Î6€'v³ýú;”DY¢L¹–ì$Ö²H£‡ÿQÔÌpø³‚þA]NH¹|žPXD‘–˜‰´aX24[Nn¿ô>úÌ­A?rá !15ÖèzrÕ4Áœ f°¥²ËA’cATiâãÍä—O–#‹­b
+ÝÜ#C±`΢ÂTÀž¯èöâiµÙ<Ü-æ2EØÅæån9]?<–›‹Õ_nà<(£[)‹c¨Û9ùí¦ÖJÆ,æœöh& :Ï/+ËÐZ«4´ZbE³üŒ@u‰ré$7.ÁºÛ½ó‡`-Q·¸œÜ"†­1†WË/ð‘kê„
+L5ç6ß^Â6,µÈ/δÉË`;Û¡Évê¢,°”ÕMí}C“kTuÉU~9ﲕŸÑä±ggÃmU–iw)YkçbG~Šlç9²èIÚ?u¢`”ÿëë³%jºf—Ò»3Ž•THCz ÎµÚve€A4q
++ZqLá²ÀJú†B/Z­óÐ÷*/Êãø¯*·ÁÖ”­«í¹\[%œÈ7vßÅëX¬¸9è®êÇW‡·ïÈcþ;–=j™Iƒ ý¤°&üˆ‰ ò’á®™½²’$ÔBÆÇFÁÁàŽ»­y¯Äš3&·‘¼¬í„»À´0¬Àëáúx3•E8o·fàñ-IÖ6“µO‡~|õXCbCR¢‚¹X0˜¾;¼Ê‹"±ÊÆ ;—ƒ~ÂVèãÇBÆ0S}†h°S…C± ‚a›µëÑÐÈåVrª1‹ÁÍcJäCÖ.QÛÞâíÜõtw¥‘æÎÝ¡¢£*âî¥Ê‹bîÈ¢îÎpw=ÌÝõ‘R?ØÒö˜îI_3çîV«^¹_Á?í®³\;ÔÝ%Y÷Þ·uðAµ`,]»k¯ÚSÛ„²¶ƒ«TÛ”†T%0äAGQÛ+Óx"¦"ίTÄ «ÙEµ§=+©Vfõ9K‡‰]¶í·äárvvãƒ0p™)Æ&cáSª¼(>ì(ãÃÛ†çL>>ÆŸçZS
+u3áÎMz2ž#Z‘Î
+Ü*Å©ïj.©Ä……–Z¤+—Ù ’Ã\Ðþ ‰ÅA’Òp™ô‰Pl(O)q¤qr$6”#rG*EÅ`Á¢ikëÜ‹Ä‘Î#±¡ .Bj»‡#•¢H,„²1ÄÂkp$8ÒkaÓŠ#Q–§ínŽTŠbîÈÆôØ2'ÂH:a¤“•6[ŒÔUÚT|¨»´ eQŒ”J›„‘F†‘ ¥ )ö`¤R Ÿ@–0Ò
+‰½#J´Mû(‘ÐÎÝ¥nëxÚÈ©¼(æî,šù%J”èuʘŠ`íæq]eu—5j,eMBD#EDƒK!aø+Æ%¢O*/ŠEO A)4nD¤!"%)OÝOI+Ü|¡ð˜ÍÓ|ö0]„hõ4_O¿?¬7»0º_­gìH*írÇ Ø‘k0#"±£ÄŽÆÄŽÜ‹£î»aE_vDò ±K±²&
+•å±|ýç§6>jêš#EÑجjíùÌ"?:~488{-óX€AC°?*T^‹…P7†XH¯«½#€´õwÙ ,òŠ@hkH…Ê‹¢þè¢þ.Ï’ ¥÷ÕÞÒÃ{ftA-”yrOuãUûª›P7–ê椉ôLè #½ƒB’ûX>Bh¥c©PyQ4~ÝFˆGÒšäH`ÄêÁi°Ï‘¤Æ‘¤Õù(×É‘¸€R²$›—õýtV>iôc
+ë.VD9dau
+V$œ›XQbEãbEùk
+táhP¼
+cE…Ê‹b±êÆ ‰½+V4ÔßUù*€tˆ_ÇPQ!*5QooÊŽâìéý¿AÑ@÷Ô`WŸu—6^µ¯´ uc)m(-(?Úb•|t€)~$|
+‘×D£§)Áðp|JtHtˆ‘0lk˜G@‹ëhPÔ0e +*°ö•Oß| J]/•qª/8ùV,o}p¿Z;çИ’BA+rc/OOóRÕ83ô¹ã‰¥êßéâe¾)¬><ËïßæÅq”ÊÚ
+æ)ÐEå<,®çÓë—;§Úg²PéÒê€Ùj¹œ>~ŹW‡.9€IÌݼHäG¼œÞC0üw½´
+endstream
+endobj
+1039 0 obj
+<<
+/Type /Page
+/Contents 1040 0 R
+/Resources 1038 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1022 0 R
+>>
+endobj
+1041 0 obj
+<<
+/D [1039 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1038 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1044 0 obj
+<<
+/Length 3179
+/Filter /FlateDecode
+>>
+stream
+xÚíYoÛHÇßõ)ø˜<¨§ïãq;ì`±ØÁx ȃ×Ñî8 fæÛo5É–È–ªi‹jÉGI$Û7©VUuñ§®"oþ×ðæÝ‚gß_,¾û1ð&°`¥m.þÛèÀ,·ó’))š‹Íû7’&˜zûáâ§ï~ åžï`¬Vø×ÛßV÷Q¶9À‹Ï Oy#gצqÖ2㛫ëÅû¼ù?ú©áLßüÖ
+¯­ ÞÀóuóËâç£!ãÚ2ÇCi PÃl8ѱ;YBÁ*©˜„ƒµ“ðϷƼ¹\[µ1š
+rÍ´lÅGZÝ®ZûD»ã­Ïbð~¦Áû“¼‘4DƒW
+/ûàoá‹obÿì±Ö>JÊÊß=³}?›€®% "ÄDv“TÙM.«nâÇÎn,x&¸f´wP<x$Ï.G¢eKÅ,|jóÍíwv¯L6O®†×-…!öýâîø;òüñŠˆ¢yÅ\Ðq-{Ùï@½*‰0ÊdµH)Hà!‹SÑÞá?Ÿ¯;ž‡òmVÅ„ƒÇÄÄA"wóá0ƒ7"Iô
+îàº1Pd!J¨/¿}½½¹½¾ýö¥ãIW·7_ïo×Z¤ ­ÀŠ¬5L+bEÄŠ^+:Íb
+lä=¹ËêáBàÅFºðÖ8Æ-Ê:U­>ÓîZ½j¶g||ä+Ñ#Gôèeä;ZÀÕwùNR=$ßɵ¨™[BH„^FŠ¤=\«½È³¸ #©S%QÑ‹2m­éØ©üyÅCAÒ¬QŽE’àÒ™ >Ý ’¸eF‡îüøiõeµî ÒCv j¨±ëÈÆ PvI"’tèÇ
+Âøþcu(IÒp‘ Sg9owB"$©S%QIþ¼ËƪüS…x²Ûs¥MG„ž–/(øåv†å†i°MG*‰öûB®ªæ ^랣­½¼çÈ3/ª9¤×#¦(ik‹Pc×ÄŒˆ(šëø»–™MR•3›\U5³!ZD´è)øO„1¡´\3-%F‹:U!þ“©j-#N$hÃÑ
+‚©¾%áê÷x‹´Ëÿ¬ wÙSlÈÕØD¤B<m"CD†¨ÊìÐ~¦¨gn"â0¤#ÊÇQÚBckP%Qw·Êÿ}oSën§=ŒJÛˆ¨Ö¬š7ÌÝEä Kqð$p˜ÃBGkW¯Vƒ¹B&ÛõÚBD[ˆfu'úÛÆÓñSå=ã\ZYƒ*‰P{ÏtUC?í"z%íÚçÚxÛu:&·Åô&©¦Ò›\WÝÆ ½TDô\R¢Øp:Þ}
+(0ÉÞÂ:ª’u LW)+¢’3Œq¸>3®Ø”H)ÇŒì)ßÍ·«õêòþáÝ«•°í2Zé¸2ÂE„‹h#ѹ:˜nºWƒ¯ã-L“*‰ÚPò7¬{õ`¨zML ÑN¢cwóMÝ«•²L[Sî^Dû}!WUóâEÔ½ZÍë^­LXðÅîÕIƒXûXT½¹/¡"jÎþðöÕÅÔ&©Ê©M®ªÞŸ@í%:·ÿ¤öÕJ™ÖôŠí«“ñŸLu’öÕ´•hˆŠ”v0ͲˆŠ¤‡0—‚à=¨µ´’]WIy®#TD¨ˆPѹ»Içð6¦I•DÝr€v°ŒE݉ˆ¼_ͬ9“^Æy-ל%â ¹ ­Ç§QÍÙy:ünjΤo§*ל%fï™ì-¬©æŒºo=¤æ¬KG\±æ,iëÎTµ[o'"NtædhSs&½`&èrÍYaî“Éj%CŠPP$8„vÅš³H|Bº¼C@Q¡µäp]bkl*’0ZK¤ˆHÕ ûNg–V´—éõ¢nA@ûXƪNŠ4‘"*@;rk)=óÆN¢^„øB.£>Ö´©è©ÞìLB$5ÞO¢^„Ù{&{Ƥˆv½¬{S›Ä€Ê™M¦¢6ÖDŠ^x2´%E`•Î‡ RÔ‹0÷Édt»³Ss"˜ÑªÈ‰„³Lˆò†¢Bk+JŒ¯À‰Dä‹Ý‡­Ä‰ˆÑŽ¢sv±60¯'îw–DÝr€v±ŒE]¬iGѳëb-œå}â~gI„øB.{Ö]¬‰½ÄØ¿áDÂIL”9QaöžÉj7ú¥ò32ð‡‚¢bnÓ‹&R›LEm¬ ½–6ÖÂi˜°‰û%æ>™ŒÚXŸÁ!Ú3*¢"ˆrŠ»"*ÒTÄáÅUEÀhhK¡"BEçÚ ½EEÂ2Žu­Û0 ^Ô-EEÛ±ªíÑ&TD¨¨Vñ™lÀM ¢^„øB.£â3*>{ªÅgBx°Õ0ŠzfŠÏˆ=‘â³bj“P9³ÉTT|F¤èµŸ‰¸ìú PÔi0竨òìô˜(f‡ª¼£ÈzðpY¤D§DÚµ“|Hä$x’1"*;;Ó‘7ŒÈµ šØMÔkº¥À`„h;Rµ»"SÍÕœaŸž¹™€È:¦ÝÄV¢^ƒ8B¦B?:sG¤Cž6Ñ>‹ÇÓ! ñNÈ2ê5˜±U'ØEDÕf¯}É*e4½¦œÐŒE5ó[!Ÿ!.ôjKÍöœÄ… ¦k1±¨×`¾3VÕÊF\HœºÐ,w¹-”q–A©LFÆ[ÏCÞ"¼þ¬ù¬¥a"ÿ®l,
+endstream
+endobj
+1043 0 obj
+<<
+/Type /Page
+/Contents 1044 0 R
+/Resources 1042 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1022 0 R
+>>
+endobj
+1045 0 obj
+<<
+/D [1043 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+297 0 obj
+<<
+/D [1043 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1046 0 obj
+<<
+/D [1043 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+1042 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1052 0 obj
+<<
+/Length 2210
+/Filter /FlateDecode
+>>
+stream
+xÚí[[sÓ8~ϯð£3³Öê~Ù7`fwhgö¡ð—f׉K’Òåßï‘ä[lË¥¹@)a ¶•OG:ò9GŸ¾}Œpôr„‹ë§+ŽH¤Â\DJS$h4]Œ.Þãh½Š0bFG·¸ˆ8ˆh÷Yt6z³m‚ZT#CÄ  †8–…‰§ç£__d$•Ñùe¤ âÔZĈHÏ¢‹xy3ÍÒÉjœHLãÍ—ëÔßÉñûóW£çç‰Pjcd‡™àÖú”×ʲ0GHm-Š
+³&¨Kl¶
+ú]4‚W Å(u"/‰BTqÍ#$=¸Ç!˜‰ðÙ\?M!à;¤k&é]Ÿ>âTp5l\`öN¥m.ˆcÑŸ %ªr¡ ë䂭݇H0A—0‚ W‡N[!•»ìÑ`§Jm¥C]¶›ù°UÌ`˜V›C%w{V¨k/û.¯÷ x}ßÚ/wŒw ¯»x—¶fâ½@• P¼·`¡Ú/Pû%Ä,”2‡ w(ûŠÚp7JîTý%üQö-w÷ ÷-N6ÜúüG!7œRäã{€Û ;¨M uLf#Àl$ 66lÔNµœ„«xë bƒš2û X-ª–º™6O,&ú:víwàíëôqoû²!®¡Ân Ù£í%ª…Ò§;b È»¶Tâýùó©á·ÓŽQa½›ˆs8#ÂÑ@óõ}˜ÆK„Jb³B ƒ”©)mW(¢‘41É…"Š¤OÈ1t"L @ØI':éDN'úÖgÁ÷Ô‰¤ 0Ã:Q ò»
+éD [}lÊÏõ¤ý$:Ñ7gF»æB¥I#€c²a¨r¡ 1£½“á¤ýì:‘`{êDÒ0„™Ö‰JP(Þ[°Píg'è‡×‰~rSêDƒÜ¦
+Æñ“Åu6‡1MWëm€UQ4bZ7L 2öÝ`Y‹Óÿ6c`)2~1O³Ùvÿö€?(¢³á5€× LªÀ_M`©©Â±ô—M:&:vãÓs ›ÙO.ýb›L\v^_å·K;_zô‹±bñüãÍjLiìæQ$ÔóÖ­–íCÛk£âuSÚ˜9®!Ñ+WÏòEêÇÌ/-˜˜àÜÕ-SîÆ;k¤\myP´¬Š®3X­YÑ8û–ÿ´Éý5L¯ü]&WcCcX&D¼¾xÛà2/úOn6ùb²™O'™ÕNmÓ|¹NW›r¸éæ6M—ÎÜ™ûõg ¯Â¸‘ŠÁUfÔÄŒµ#Õ¶~œvsgØe™kûwÌdœ~ñ!þf–®§«ùõfž/},»»+êx±ëÂh<ÉòåG¹o®ü]5Èz–'+n3ßûÚÇŠ5òߘ‘ØÍËvÉýõf"ÿ¢½ÿ[Ku~5/ŠÆ¦®JeÓ"_oÜâÛ¶¼Zû6
+t^—w“/«’vã\÷uÈ/öÚŒ¿)–>òúµLÞaŸÁÒÌUCSöRà€4
+)rå¶.9ÐK
+5‡Ûß/öˆ ¸ÓQˆÙ-9á18„i¯UOŽ[u0I¥¤;ä0SJˆA0wBJÛ„±¦6v*ì\õFmµ•“¾Æ¾ÎM`=L³õ*]³0€*·‰Ò¢_OÃjwS¾dßц«Xli\E Þ¯ÿ_Ú_=TCSHáÛc0¥àÕ —¹Oº˜·Õ0õ¦9”ŸmROwÀ' ëÆWyŸ¤F’Š;|*@Χ§AŸjS}>ÕÓðÉæšR|_§8P~‡Oã\zöŽ0þ"èWe­Ç­z¾C^µgbïWe‹”dw¸U€œ_¿]ªMõøTÏvÈ' Ì[ì›RÌ@T9ìS r>=ùÔ0ÕãS=ÛðÙ©þP±y%Ý«çTqÁ`ƒb6î‹HjQC·ƒRZ,þ°„ ŸN
+ša7äË>îO`óçŠîLþk¢kǨˆ®}hÒÄþÃAµ¹'’ iVŒkdhQÑ´hïøÿŠ`
+endstream
+endobj
+1051 0 obj
+<<
+/Type /Page
+/Contents 1052 0 R
+/Resources 1050 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1055 0 R
+/Annots [ 1047 0 R 1048 0 R 1049 0 R ]
+>>
+endobj
+1047 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [484.563 553.712 499.228 567.66]
+/A << /S /GoTo /D (figure.caption.28) >>
+>>
+endobj
+1048 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.093 531.391 125.758 543.003]
+/A << /S /GoTo /D (table.caption.29) >>
+>>
+endobj
+1049 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [292.127 519.436 337.596 531.047]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1053 0 obj
+<<
+/D [1051 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+301 0 obj
+<<
+/D [1051 0 R /XYZ 49.606 585.052 null]
+>>
+endobj
+305 0 obj
+<<
+/D [1051 0 R /XYZ 49.606 566.664 null]
+>>
+endobj
+1054 0 obj
+<<
+/D [1051 0 R /XYZ 49.606 513.458 null]
+>>
+endobj
+1050 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R /F90 447 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1061 0 obj
+<<
+/Length 2456
+/Filter /FlateDecode
+>>
+stream
+xÚ½YYsÛ8~÷¯Ð#5Ñ
+¨«ÔÁS €Z-ÚGgxuØZOdè5­•ûÀÉoq¬Šxò­?ð™p²U:Öų=M„P6D>s•§Z" ×e¥ÓþÀã3ês8$ŽïH¦H8î“~Á.ßltwØ”™å¾B+¥<ϔϤaL™{®DÇUñ”úþ1Sæž
+sÃÀ§Ó»>lË'rì´å&Ë,Nõû=m·ý6Ùçɲì¤ ;àtCî¼[-v’ŒØôsÓC÷}'.¿Ñô}Aã!Î’Ÿñ
+™ ÎN g-
+²Y&ŽÅCåõ|O@Ý$é:_DåÉ;aÙäO§Ia 4æ“>ÑSÅéiSœ7}Ï7¨¾rfE¢³éb#鬲¤*_‚Åú3ÔYYïªÛ¿ú*rt¼D›Çý‹<ž„D Ý NWFEƒ3ßÑÕð@o#T#5´¤TÎ'+9î ÅÁi2Ælum÷κؼo#˜(oÃÄŒ—«qŠ±\Óp’gU<1¼ œ›E Io§
+øHAõ¥¹®ú… ®¾yÖ\º‘Tð)L ›èœí|ÓºÓƒ³ùîþnøéú‹í'êî‡ÈÂx¤?ñpîÿ¢·>Î:8ñ“âÝû·ï¨çµEÿ[>Þ_£¹üÊŸr§7¯?öÏÕ|:=ÿ PßsýgÑ°~[†O†'}ÿ¹4Ð÷{BUOézóà ß/%ÑÆñòý'sìòý-žÓ¸Òƒ*I5¹þ‡"_-;ýSåètú-9®0¯/–ó8[¥ºH&43m<àxFß™&år¯w« ƒü¦Ç›úá
+"ÔÑ 1'zõêÝ»ÛÛáð?·÷wÿMy®å¹Ý!¼ûË{h$¾Š0ŸGLFäç§õ#ß ¥3škZlˆƒß4ÄÁÕ¤ìN'S¨X±
+T22Y«RÌèæBÕ2ùA›£ÄÁݪ“ÇcRÍ1¬J¤ëA$%qâgžÙ^¹š™qÚaêfœ®æõ:˜Ó˜ÔO~‚À]2s[’Öù3BîÄã1MOlƪ|AG‹Ë†vRŠsêÎòEg4\äxT2àÎØ< §zÌi‚ôÇ;Q¾½“€›øY”í]ÆIAÓx”ÛºLŒD^ÚjJ›R eÅJÀm¯Çì맸SjìSZF^/(QÙ¬ÏóUñ{÷Áá)CzSÍ:bZ"žm·¤I¶ª4*ªxDŠâ4¤•¥'€Få:O5†t†Š$l méEÎZÇMŤ¸ÌP¦J;ÛÍaN÷¹Í©`!^u?Øå!Ñ‚›‡ôŸýXX_#«oÄôÓxM±¦’ÙnËk´'’X„=rìSahM綦Ž#c꦳ղE|Ðe!x ”.T9µµ7ÓöÒ˜Cy¤ì:Áåîß³hØÀ‰4˜wÞsÈ 4vûî‡_ºpÅcÛè·Ç¹¶Uo¼\.’I<^h·•õ ø„AÔfŽ™þÐ6l¶)Ÿ÷’ªåæHÊM–ùߘVpÈ_d\Ý&‹¡Ž‡«q¹*fñDÓ'íd,r9êÀ*À¼~TuÁ΄^L­)èafŠ²­Énkò 2|arDá ˆ.àÄJ¸;Ybïó€3Æ ¬Â
+ «¬ŠÕ¤¢éÒ(””cècÒq¾@_ \ N[²èûˆ,æDw^kÔ̬ ^s}/¨5Jã$ëÐHønªzÓ7t†z®›¡ÿßU ½É@2îúB´h‰ÎOY‡K¬C´€¹"7’mn¤-YèB9º±ÂœˆNÍïïLïð¢£3Së¥)œ#› ´¶ó|¡ãŒ%ä“y‡xœN¸/Ó«ªˆII|GJPEïJIYà–;z<?l\“<ÔØžóêí8«ðBüwE³å<̨›˜V4b†ÜZñУÎGƒÜïÉL9¦ÒgÎ]NÓ|Z£˜(o‚(®¢ýÚ¬¥ÃŽ­¥ÃŽxQZJñd¢—•ÝÓm–;Á(Ë)ÇŸö¯âÞc—{áŽ}ö¹ôûf8Ôö3&Ùx¦—Pm+Êy¼¬ê‡HiŸê‡z²õâÅæ×8S o+<è‹û^\­ Š+Ń 0ö
+ð!óÀNê¦v,íëhM
+endstream
+endobj
+1060 0 obj
+<<
+/Type /Page
+/Contents 1061 0 R
+/Resources 1059 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1055 0 R
+/Annots [ 1057 0 R 1058 0 R ]
+>>
+endobj
+1057 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [243.398 203.834 258.063 215.445]
+/A << /S /GoTo /D (table.caption.30) >>
+>>
+endobj
+1058 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [320.41 191.879 365.88 203.49]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1062 0 obj
+<<
+/D [1060 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1056 0 obj
+<<
+/D [1060 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+1063 0 obj
+<<
+/D [1060 0 R /XYZ 49.606 780.328 null]
+>>
+endobj
+309 0 obj
+<<
+/D [1060 0 R /XYZ 49.606 263.073 null]
+>>
+endobj
+1059 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R /F94 466 0 R /F115 467 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1067 0 obj
+<<
+/Length 3001
+/Filter /FlateDecode
+>>
+stream
+xÚí][oÛ¸~÷¯Ð£c@,ï—óvh ,°(œ}ÈöÁMœ;î:)vÏ¿?CI”I‰Vb'vœd€´’&£áEœùHÍ‘´ø<¢ã_#GZ°B)bLa'ÔÊâr9ºøF‹+øÕ¯%ÂÙâïJqYH+ˆÎÅ×Ñ—Ô„Ó®0F§ø Ð6Ä Ñ˜øå|ôá“£…ƒû¹.ί Í “º0ÚVÕ9¿*.Æÿ=Sj<]üœ};ÿuôñ<*™J¸}–’9§ÄIUK‰›UÑŸÿûqÓ/VPA¬yžr…“Äú6ÄMþøÏtùc1»ë­„#‚š=ŠN{Mšú%†l0!ˆ‚ëí]iB™Û»¾å;›è÷"3†hÝH9U÷âVëåtÑïCÎQÐw{̘ŠÇ`Äp—–|;ûy¿ž.æw³«Ñó„®k‡ÁSlԞ˟æø”2X %ˆ¤:y€"ãøÔtã}×ëÙ€Ïï\(Ý [Ãú‰ù:X8Zoù¯´>•ê¨2®Àºg(¸“7êŸG'ÎZ+Úã7ø•¯êˆIÂŒ®º^Â59<Æp\x[P§ ×eF§LìÄJeÇR›Ê)Ý£¯EÛ%_ªæœd-/F·{v¶"Z;˸NA¸ÈtÀîE”Ù2Ê­…t~6#©p¾KˆdFz{ðÌäDœH§¥+
+ºé59‹’žäGkžÛV‰#ÊacP̈Â})NÅA „°È˜Hyt
+uCˆ@>Ä| Y²0d½"†„}C0×ÃuPp¤ªù¨Ãõb5½Ÿßþ¹#!!ÓC|ÕAiãÉ.˜ür$-ßZ¶4¿˜ï“©“r“}¬¾LÓ%áP1‘j³ÕÛùX³éåX1ú6Uý¦­¯’3•+3W¹\+zÍ=Ⱥ??脬 dm kYÈÚØ—µs“WD&Áïdàš ×l¸f{Uk6ܶ9.ù0ò½ß·U¸ó; vìðÕ<~#9AJ1”b(}osQ†¢VÃT%jáyÔL¥ùíY©)¯îofëúôÇên~?_Ýn%/Á@'®fŽ>7y‰ ¢~àÓÃ'C^ÂÑpg´'Çñ×6ÞŽŠFôH†o™1U>h ¹Aü1ø?žspz‘pƒ"YKwñSWÇT ò¾B¥L¸A–É.7(¨>zk•ßšFåè2µ4ÝšFçö¦ •[fEe¶a¹èvT—TcP{’Û›Få÷¦±ÙÖÚ¨µ&×\„ûî'/÷“#
+#Fª·N{`Z3ÈzJO)©hëùÝÐçY$t’ßíèùR9b~ž“\'Ãpà]ý]¨ ˜õD
+ª%À29”梪d82ÈÊ®²[HO¤ô©¡Ì°uÚ‹"ƒ¬g#SÐM¯ÉYŒ϶ڙû9
+›J6vËÈÂ)b¶šƒ©!ÂÍÈ„;Ó =2@œ#ŠIiÔôት Æ!Ð šfFsw+¸ë7Í!ðQß4«Œ•¼zÝÏNÙ8AOœ=Ú îD÷¤Dº"Á Ó ;$Ó2¡;D²6ƒÏ‰fœÙ„î
+ Ó §¢<œŸ1­ÇÓï‹ÙÔÃŒ…üœ8ÑûÅêÚó">|bLE6%RùZTÆ~›/~›ßÎjŤl©“­Þüru{G*žÅ¶®þðÉÑèþRPFü;v?•ÆÕv8ÁÇ;Å„CJÇÿ^þXÌÿ ”ÏÖw©‚ÏôX"¬m€•ú>h¶ãÙ?÷ÐjiÇŸæ³ÅUj Ó2X‘¤P…¦Áý†ŽggÌŽ+ÐsU-¼•êêzµÎu¤†SavíÈéúŒóqó„æW³ÛûùåtQ_Þ¯rå n—óu6ýúóûÝÏõõô2W S~;¸F?}fБFå_ðA'&ð•–5‰ÚÇóÑÿí†5
+endstream
+endobj
+1066 0 obj
+<<
+/Type /Page
+/Contents 1067 0 R
+/Resources 1065 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1055 0 R
+>>
+endobj
+1068 0 obj
+<<
+/D [1066 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1064 0 obj
+<<
+/D [1066 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+313 0 obj
+<<
+/D [1066 0 R /XYZ 49.606 396.938 null]
+>>
+endobj
+317 0 obj
+<<
+/D [1066 0 R /XYZ 49.606 374.963 null]
+>>
+endobj
+1065 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1072 0 obj
+<<
+/Length 3991
+/Filter /FlateDecode
+>>
+stream
+xÚí]ÝÛ6÷_¡Ç P²üþx¼mphnƒ»‡4ŽãÖ.ìuºvÒëCQ”)‰Ö&{íÝ¢­¥Ñh†¤¨ßÌr†#Vý^±êÕ„õ~_¾™|ÿ“gçÔk-ª7¿UÊSÃLe Rðê͇êí• œ¿x÷æ_í}Õ[ÂcWק³ù "•»úa³^Oo>Ä“_™fá†ïâ\çÒ¹T BjÁ?/WQDÍÛmˆ¶T[“8A"\NUžz#L`"B0Ê•¬wT:™ß,–ÛDhw5K­ÚÃÉçùmsaû÷úýfµ~ÛÜ6ÔØŸ@›n·óÝö;8±ìêö…WóÕt7ÿ§³Ýòór·œ7îj³[Ìo#­¹iþyz³k.¾ÿc>Û5-côaþþv¹M}ƒ¾’8
+Ç^^]Ï›±ãBdù¢Þù4x?,¦w¡Yávý]ü½†¦,7xâ„Qk. L —„BË─§V݆yþ]OŽ â¿übHèä©Ùô¹¢Býìó§ª9ÕÞ†ê¼ÜÏBZž‡ÿœmn¶qêµsðç͇富‰ðÈ;÷°f²Ø\,åûùºoˆÖÔsÞÎÖiÛç(êÇ7“?'¼é¹åÔŠÊøð
+M
+W…øz¤¨ƒT2ü7ŸO\€fí5(äà4ˆú!ŒÑH"‚"EÁPB#K´Œ´(p‚ÈߪI:˨#¤\ %v•y£vRêèÄŽºRÿIy
+<oÛ9Ǫ?@ãž7Ê€—T¡)ÎÛ •S%¼PM[ÒeÒ^_T/«×Õ¡©×€b°€Fº
+ì à«*xn:Âr{2«&ýë MpÛËîó={{¢¥h)Íí®Ìq"8xÌ[Ù5^¨I@ƒ$Cö%ñññ—ñžòz&Áè€96Ä *Œ»‡§œ0>þö~ïO怚y²^K&’3Ö¾„Q]¸ÊxHAÜj€â¢³Ô”õ4€}gï!r™šµlQäF˜F˜F˜òÞ¦Ý<ñ0“$µÂ¦Á·áYßÇ7ð ½lŽ¾¥»«%ãÔƒÀ¼¿ÏÁÔÒBvU‰_¡·0@ˬG/***/jÑBQm •¦
+æò^.-?èÌö—wÃ\•T2¦t"¶”þºrúí%ÜM
+·‘l2ä :qO†Ž·ñ’ <ï!‘ª
+='宓rß[*£ÀËuzšh=#Ÿó’Ìñ·Wmœ¼¾#”(
+EŠJ4Њ÷„t8á›k÷ö¹9þ®¤B„L¸Äƒ‡ÙJhΓ–YÝš$¨vñID !{‰ÙÌëI„YívÔ iyRK“~ofÝÇuòºub4Z±à̬ë'
+DO#ùÉ¿€H>Ú+´Wh¯Ð^á¦|ÌGx¨|´9hsÐæÉæ<³lg¬0ðx“*÷÷÷ño L ÁÔL AÓˆ¦Mãc7çM4?~‚‹8J‚‹¸„ÉëïŒe¸(øåéË8Ý —ÙôãöÓj$­E…¥JsŠÊÊIª-fµ`VËÙ²Z •Ö Bò*W[=˜”JÊ`®„Ñå‘ð&¸j€— Ï»·Û2žˆ Ÿ]a`ÐરÚTÂà¶Yš4h0‹
+¯Š«À›õúÓÍr6 Ÿ×Þvj
+z
+‹˜%€YPMÍš4øa Lx*ÕÑÑ ¢?ÓØ?~yâ–K@\E\EOË`œãü[ž
+ÄþÍÆ Éaö*êÁD™ªÞ¿gÖN‰}Í™}Z¦ m†w1¼ûàá]ˆÇ[®]á` ø}AÀïI½ãX0·^j)–,Ƙ
+wvábðƒèÔu5ïö³÷£4’ˆ "v‰–‘δ:žeÔR®†Œ»Ê‡¼)@\èèÄŽºRÿIy
+Œ‡qŽQ!õ)âpÌP/Æá0wÎ
+‹ •9åÒà8Í·öÑš¡_Ø¢3 ­
+»QMŒ¥ÄÃY—Ó¹Júw“ŠY]ɺ!†¤0«Vpç™­šo6Ç“YÈ
+ê1 d”4-†}¾n¾­]œÊ`9 ³6‚Aš¢R ¦k\ç"MÙøuêìãÔ¤ô¾’Ùðݸn^»ç4/qRž üŠo
+endstream
+endobj
+1071 0 obj
+<<
+/Type /Page
+/Contents 1072 0 R
+/Resources 1070 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1055 0 R
+/Annots [ 1069 0 R ]
+>>
+endobj
+1069 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [312.431 748.984 357.9 760.596]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1073 0 obj
+<<
+/D [1071 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+321 0 obj
+<<
+/D [1071 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+325 0 obj
+<<
+/D [1071 0 R /XYZ 49.606 736.043 null]
+>>
+endobj
+329 0 obj
+<<
+/D [1071 0 R /XYZ 49.606 716.066 null]
+>>
+endobj
+1074 0 obj
+<<
+/D [1071 0 R /XYZ 49.606 692.156 null]
+>>
+endobj
+1070 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F93 449 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1077 0 obj
+<<
+/Length 3968
+/Filter /FlateDecode
+>>
+stream
+xÚí]Moä6½ûWè¸Y€\~\dì-˜²À §ã‰p{OO‚ý÷[”D™’(yÜã¶ÛíLàV©X%JT=ŠõTÍïh~¼ýß?/$ýl¼ä^5>(nU³Ù]|øE4¿Ñžÿ4‚ëš¿[½]c¬äA[ú}Ó¼»øil!ÊØxè¯]³!«¹®7ñýû‹ý;ê&òè”kÞ¤Ãà"ºÆ[Ç¥!Éo͇l¶mo¶—·ß1'Ô?öWûë«»ï~yO¶&ɵµÞçËýÕÍÍv•v^üð¾8B¥ÂpˆbrÞòßÁ2i;CçÀZîdH–ÿlHëǦU½h[²žÄÕ‚{›Œ¦??^|h!=üý…v¥C½†K¯ul·w´M÷ü÷&Ù¢cÊj´Í*:ld§TbK¬4USºn.Þ5Ã)ù©íÎIåÏÍÅí'›.«‹Ê§®°™ð¦rï‚U}°E'óåx¢[ÂAíݯJѽ½{PH®LÔ&¹Ò´ß9Y—åÆÝY©îÚ#MÑ@뱧eQᆭÉÆ®gªkVíçƒÒÒ_­ÿlá°…30ˆ5÷Ú Sö7‹º«Êjª¬®Û]ênÈó`”IÙsíŒ4¼ŒˆJçÑ2ÑŠ\ ëbC¡Í+
+WÝÕ×ZºšÈPo…Uº‰´§Øh¹A§8ÝYÉÛ›æ‚âµ–Ö "Ï…Þ&òvö²IG܉WÔ¤ÉÈ7µ|ô››öžn¢—äƒì›O»±i¯L¥¿ïª7KÆùuÚ§ð-éÔ‰þÿò÷f׌CûOes6´_¼/Ǻáp_Cóy ¸íÆÈh€èɆká¢ú ñ€;èö†PÆ„†VÈH³ |0ty›;j÷á>j2ié®PÊWŠ=WÞÓ°ÀÜFÑPtÒv@2l´Cw¼f¡â‰š}?¾¾/~<¶ ’¾yhïçu¡H!Ãë1Ü.H³~gêdù#@  P(
+J‘§ÐÏÝ)$>5(ÑÅqþ
+)x…QO³l2w(uÙ‚rw‡½m‚Umí!R”‡uUf(¶ÒÑ%¤P±±þ¸ûíMK¸Tt§ÈA… ¤H6Xè·³—MÛV¤¸ Ý•è,Hî…ðÅd* 6í¥=A'i62íÍf|¹‹N~f<©Š”iæ³k¯
+@)xJâjûã½úóÎßžÓ=ŽŠîxoúTseÀR$&˜@bâE(à|^œÓ
+¯µëï=šàS‚¨º üi·ûr»Ý\î·Ÿn?X™žµxˆÇx!2uÓF¼‰¥b”pF-…§©¥Ð®f”u D“ñ¼…¤u}ðn¥oRP #w!=Ç­Ø´'øž›`Slb„U­`€…,ü£à2¢=¢=Ê#?U´GÕ‘°°Ï*`ŸH®à(99…œj#j"j¢ò0*#ÊÊÃ
+銨tÃV…cçsÝ~âRéæªlä«ÖyVï=[è~ç‘ßï,Xª 6WéW†¸‘Þ”c¯ã­ÔÝ©it{!›´c•†“Ñ•©ÖÁ¦Šþíþtt¦>Fªû;0ëd#½×yÓIË…†˜4€'žÈKðD€À`Š£ŠÄY“5ææÏ#Ì¿ÁLjO¼*Âb-b-¦Ôø&
+™â.¸öÎáÖÙvše¤‹¡GÐîwK8Ÿú@E°À8j€Àà
+ ñ.#×F®fô•§»ƒî‰JFÿÓݯÛýÕ]íÛŸ¯¿ì÷7k©|C‡ïõRù逵wÈå#—ÿb¹|É•ÒSP:šd†/å@Ýá\E8mœd‚9^Ã#A”k¦ÛÓ6]•˜ýu™ÒÐ
+oÀ
+dw‘Ý}öì.Äë­ÖnP­ù¾¯È÷Õ=ŽzÙ¨—}²)  )*ãÝ?$N!)
+j⥚“ͨ þ`ê…"“H4!Ñt²‰&„h„h^|…•”Üëõ×4¤ \K_Í¿ýq¹¹êîÛŒ+‰8íJ:˜ˆ“Ž@Òáµ $â^´Äbh»Y
+Ï÷¢ig|ñÓÑ…‰™§„i’™Hf>{=G`°ØìAB áŠG>
+›×CP¸SjàzSp=T¤‹-hdF‚מìbËÞÈxñ…UÄ
+endstream
+endobj
+1076 0 obj
+<<
+/Type /Page
+/Contents 1077 0 R
+/Resources 1075 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1055 0 R
+>>
+endobj
+1078 0 obj
+<<
+/D [1076 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1075 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1081 0 obj
+<<
+/Length 2420
+/Filter /FlateDecode
+>>
+stream
+xÚí]Yo7~ׯØGûaYÞGß  P´@ÝM ª¢Ô$å°›¢ÿ¾Cr¹Úå.7ÑeËÉIV¦>%¿!g†4­þ®hõ|F›ç‡ƒ'­Xe1¼2–Å«Åzöê5­ÞÀ7?W”g«n]Iň
+>¯ª³«¾Ç\e¸…§š’A+%ˆ¤ºñìzöÝONTŽ8ÍuuýªA¨Ó•Qš0 )oªWëÛÕíýüã—µ¦üâßåüþfùñòõ5¯je+wóûå
+°KÿåìÇëN9ׄRµGiÖqéÙJ´–Ð Jͬ—ü¡Ôó*@gA¸é>yô/%Fy¡þñ|öªâÄYkEû| _ùªÎ˜$ÌáÂÏkøž:>=W^Ô)ÁàçzS÷ätAu&©îŠÝT³UÛ%W¡9gYË—Õl³ggÃkÕŽß”z¸é€Ý‹¨G˨‹… ÿvÇL i)ä«aÂr“{ýÙD(J:!}Q¾×š§¥Ì±WPùÄ¢_R9©SL=•Ö/z
+X»YmöáìÜ„ÿKš¤£¥ È€ÊÊPqD%êÔŠ0J¹”{©(E™ÝO¬±ðîXõò½ÚRYÍ UFbâ¯u7Ùn¤•~¼j`A'@nLEvoXT³üû„‘’ Û³þû}ôúD…Ó¦4Ùm ‚éD
+ïÕÑ×…Ô$ qâ
+A9‘z~ ”QM‘P TÐ9 5Å.šÂÏÇ5‡éyêØš‚®ÍŠÄ´ª">3E±]Ývy¹³®v
+FZÚ1®eŸõ:˜zDÜj  ¤Ìœð)ëϤö°F²ŒØÇS;5»E#Û#Û°=ߓ핃%ŽõûÈà\íT•Ø>ƒ•Øž9ÛÛÙÞîÀöæ0¶7GØx¶‡÷½~D¶‡ ñœmÛk[ áñÍl>íÆö}Ðtj‘à·ù,‘\qÑ/b4q‡r[Öí´èR.Rn \yåJTJEÆuCLƒi ºíƒ†d+Ï™lÏÄ=hÌÉVK© #‰É½ÖÖ¬¸ªÎ­ÞÐI ,uVlÛ”ÜÜžž‹­¤‰ÜõH¶z »â‡††›'Ü’á@;A[€a"Ó°fÙæb4±Í>PF w
+©A%PI%e°'¶x\¥$4(#xí@
+«\ÊÒ€"Ç#ÅJGÕþô?<ŠÿIIIÿ‘IýEè/ÚÕ_„ÄÄÄ.>tñíáâCòDòDò<SÇ)½²½²è•}x¯,êÔ/ç©_¾ø»ž]âÙ¯ž]ˆÒnÒ‹®¬?x(“}¹¹OwÉ~ZÞÜ.Vîr¥×Ÿ'p—+ç'†Dw9ºËÏçø×ñÚ\jâŒ÷Í9XvS:ýQ ¦åï—Š^ü1<Ö‡æÁWµXtÀžÝ°C}PA,…5¢²ŠH!Jç¿"*&h$‡"àE“èÒ{#`‰
+ôþ'Àt¸ËÅPcGÀ<*¦¨ ƒ¨
+£¶@ 6Z°ÏÀ‚}8“J‰óç*Áˆ²EvD%ГäXd<—‚Fì‡0bû¹¥ce`Ø@$çØ/Ò‰¨šdƒ ;dµ+à}fxØቘ±;ú™íkÇÄß0ê7Ô†ò’;€fj>fÐ’rf¨œÑŒfìoÏŒ}Æ2°ÃÒÞL"¨·¬”~GD%Ð$geØ'FZx³Ù¹Þlæµ RÓ1ÙÒ2Âdº·ìý|±üˆlØ¿ëN‘íë¯Fd£Iûœ"²¥:Hm„j˜o0;a…ÊÅDHv˜•ÕÆx8v6p}J…­ÙhÍ>·xìI$ÄO{¿˜_2ã&²•@ÉaH"hÈFCöEcË Ù>zÚ»µ|•z"P T"‚ V"ôh¡ û« Å>P+‡Ðiîâd´ÎLÄb*
+“1‡¡VÆ `Ђì#.Bà´°qÁJ11 •@%¾Ê`GX<à…"O* ;çÊ­ýÙ £Ôv|ÉÎøb:Š
+Æ>aºñê^_2­/æ­–—µ`æB¨ïჃ/Þ¾ ¿*:³i;à}ék„­ç·›ê JÊN OóÕ?Ë»(àáy³ŒùSŒÚƒ«ÉøëíêE0—K€b¢-añn½žoÞ0sò±
+endstream
+endobj
+1080 0 obj
+<<
+/Type /Page
+/Contents 1081 0 R
+/Resources 1079 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1055 0 R
+>>
+endobj
+1082 0 obj
+<<
+/D [1080 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1079 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1085 0 obj
+<<
+/Length 2365
+/Filter /FlateDecode
+>>
+stream
+xÚí]ËnÛ8Ýû+´Lbù~̲@šA1Å hffQtá¦nÀŽÓ<¦Ó¿Ÿ{EÑ–)Ñ-;‰\meËG—ñ’Ç4E‹¯-NG4:¾>½zãháˆÓ\ç_
+鈦º0–ÁYqþ¹øpÄ c„~üñüí«7Œ©^)âƒ`ò¯››É-Â)œœ¾ðsZ°Â0bxa´&ʳч´ø Ÿ¼-(Îß+ܬŠ+¼žïGg»Žà˜+ŒÔÄP·. ¡2 «C´ëŠ A$V–„[å«àïc¥ŽÆÓ‡IU +Åç\JÕNÒæÂE ¤­å§}:ýqsÙ‘®…›gÌNÒF¥øjº'ÿg7ÓÉ];iÅJo‘tëžCÅzµš~°Õhljƒ;¸¶Ê·Šf ŠF K¨ƒa’0hÄU~ÌïîÇ÷WóëñíãRS~4¿ýtuŸnC›ç„&4`ÐZbQQ*v}+
+È¡µV,Žá#Ìê‹n„pÕû¼‡#‡ê Ç)Æ‚<¼/;0åJœ&¨Œ"•ÍP] Ëbô¾XTÉYUœ™ËŠÑõ–•­ˆ†Vc°(eëä´£6O¢ìL£L&ÒþÛlO ¢Óú_óõŬXmšëbÔ­»”Dƒòé$¶ìG‡^\Ï¥%ÎÁ à a”c”ŠÜTŽ8c¼,ר
+»Q¹Îš×/.oßëêÿ”v4tÉ@ Õ„:/v(KJƒ$3lC\Ê­DIQæ@Ó‰5V
+ˆx ×}X6Þ’)bçªÁ¿Yó´ÎSZY”–hh÷pó 93åù¼xsQŒâÏ[:R‚Ë^¯ÞßgÏ—˜Å™úr[Iàú“î«3bUõgC
+Q3ÈÅÉÅ™xŽËHk®.;.+[±Ë6¾ý¢=0pIÚ½½v‚¶ºûöI¦‰”,Htž\\Þ¡ýĽ}/²œ0!üpžk‘¡@)Š`×!¡A~ và–[½É\ÿ[Sé¡ZTSº>HÚ•ÝY Á^'¥vƒ5ZŒ&ihh¨^N
+b¹…Húw%Sæ¯GPJbÜ!Èø¿6»¿Ùýý9Å·ý~Fìš.Œ
+ ÍbÜ! ´÷i‹lgxè6pP"¹½ ,(.ûb‚h%Ò60¢(©D.©Dr˜ë€e^¼bSM˜rkm`¥81²^
+4ßØ0™rûX ¬”…éšÌ.pvËf²ç&x1µÒ
+½µ´ Œ¨
+ÜæUÀÙû=°'ÁY¦úy¿ÖÿT*à®qéGÁ!*€|_Ðù(¸&,Þóš·‚ÈÖo¶~¢øø6­ ª¯ÉgÁ!*€êÃA²ù›Íßç}\_†kN$ˆ)0ÆìT¤Ÿ‡¨
+®'Ëðñm÷ÜFf¸äϯkT
+QÞâI×ÿÆ"Ø0o¥$F6¦q²aÞ2©‰†v.ažÆTýȇóc¦õÑøÓtr\
+fŽ„þ ^8ÑúàËüÛGd;t©!U°‡››IZIYˆj­xúw<}˜Üù¨W×þx9ñ×1hSË 5Ìøá–×¾»š¾¿_L:R€bKàÅ|6_&UƒŽê #Bc¯a‘¢îˆ[þɬ¨
+endstream
+endobj
+1084 0 obj
+<<
+/Type /Page
+/Contents 1085 0 R
+/Resources 1083 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1088 0 R
+>>
+endobj
+1086 0 obj
+<<
+/D [1084 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+333 0 obj
+<<
+/D [1084 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1087 0 obj
+<<
+/D [1084 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+1083 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1096 0 obj
+<<
+/Length 3907
+/Filter /FlateDecode
+>>
+stream
+xÚí][›ÛD}Ÿ_¡7d>Ôéûeß YXÈfvyyplÍŒÀ—Ávù÷[Õ-Yw;¾eI">ÀR«TÕݪ:]}ÔÓ¢Ñ]D£gW´ñûäæêÑSG#Gœæ:º¹¤#šêÈXNgÑÍ4zsÂaDŒ^Ý|ÿè)cª"¯qŒ2/ùÃòmºB±­…oo®þ¸Âë4b‘aÄðÈhM”&ó«—¯h4…+ßG”g£·^nIň
+ŽgÑõÕOçÖà˜‹ŒÔÄP·KHCg–«h÷‚Hì,%·*tÁGJÅãÙ›ÔwC­ùœkB©:‹m. QÔ€mE(Áö³Ù»‡û»–nÌYì
+£ˆR¼n÷Û¿Æó‡Yºn›V\¡ô¦[Ï4(v’ל¦½F;N<ÁÍPÁ+ª=(*=h,¡z„IÂÀ‰}f‹ÛÕx”hÊãU:í÷œÃíÓžÈßji-±ø>¦þˆ@êYäE¯¼rÚ±¸ó_JŒB¥øóìêe5´ÖŠíï+¸„U½Â!œ?ŸÃ9ürèÔâw†º N…œ'2IMOU(ihJªªº„ëhÛ%?ùæü-kùKtµ8²³Ñà5›’´
+gp¸‰¤ÓFÒk¤ýoÕŸh§ùÕãÉ<ª»æ.¹w#riaЫQ[Þžlïßg*ñý°FɃ,–*%Z‰(1Ô´x
+и‚û^–œ0EŒà\Ubp^-60lJ+£Ä ¾q .ÍTˆéíÉ$ºj^oiè°·=©ûÔÿ½>f¶%ùíÖÃàîB
+ÏÕQG¾žÒBA€¶qÐ|ûiâƒ; „²´8Ѭ
+¡\¦RmppçG0ΈTîüàÀ ×æl
+Nv¬Vú¨Ñ”õŽ£Í -<䄨Ã<¦(Ü–4gÒÅï¤Ô´ãî¤ã¶¤¥;iË·ÚÙùGÜ’ö˜¯ ­A¿]È4‘’5Ò‰ÎÂíí- Ê¥?ý1ÿX(²0n:?æ B ï¢\ªꃢ†Ø¥òz¡‚„Ïëg@ÑU V„jTÂ!_<’˜=›È‘4>u`SyŽš?9C]AG/û«5(U9}¾|Ød“ñlí+`uÒWkÈÈg3¾éûI‘¾
+ÿ…'Ñ
+¡žoHõ†¸ßñý¬FRdi%.­PÎÆ\?ã‹R…Pw˜5¥.žh_r‘ïÀøŒï§Àø~¨W¼'øÈÒj®BN/µèg|QªêA¢†Ô¥üÚ_>¬ñ­1¾’-fv2¾Jqbdþ÷Ùëìn1ž­ÃÙb“ÎfÙ]º˜ìØ&D ˜L¹K¬ûU
+Æ0'x`‡ÍŽ,—§®û…@H¢$ŒžLôoö€R…“ëïº6{¨Š5Ǭí°ðw ø£ÁÜ¡AK‹øÀÓ®·”*„zð¡)v1|ö{xàφ¶Û…@Ç/ü•Æ‡8Ä‚0ý Qªê ñ†X;Äó…@g¤‡Ý>gø£Jqƒƒä‹”„[Ó¿Ù2=QÖºxž=¬ûXàþTpÈ
+È×\HéµÝ±ÕJB}HÔ»á/?ËÂ߃´4a°drÖ¹JÈËêÏRNÊH1NL±™Þ͈i_ÏÒQ"˜‰…ù8Ѻp»\…-³kì°H—ºØ1{Vì˜Ý°,„©ŸKý‰J¯ƒÖl~7÷i׆ÜfýÀæ7þ˜Í®Æ“´Ãô+'Ëù|¼˜’ÚæÝÅocèD@ŠI5&á;QÙ%œ×î^4Q?ž?̲_)åéj]@FÔQŒ·Aa£pt¨qú×Z,tü4KgÓº‚fërçJ¼_ó)ß6ÿ~Œ½Ku¬ÂÏ&1{Ãpæ«>›†“q¥1_a‘‹›×÷Ë·‹p˜å¿OGFÄÙݛՈó8ýÁað ?û~BY.½“ü s^Ýú[‚0›Wýz9Oƒ­åm^ùûtíMáp˜8áaË©ü¯™ª-ÀžUñx•†.~˜AoMóÂéop²Ø„³Í2ü¦ãÉ}]‚ÕÈñ{AÒx=]W¨âÅ2xã7›å|ì7:™½ ײÅ:]m
+s¯ÓÍÛ4]äÖîÓ9éxj4o‰j…bÏ ×ôKat|—ýéëk¼½‘/û}uMß…RˆP:MדUö°É–‹pÅw5\È{JrÁ¾p4Ï–‹» ò6ÛÜ7Œ¬7 y¼B›†KÁ?PÉ_#ÁâP/z®¿Y§d”(mã›û̇@³+6%îd9RÌ—ëïk,›Â“ô»ÌðX– â–‹-h½ñ­Hz:5ä½
+׿x¡“_©¢_ÃÿX§ïV¿Pæ¶
+´•tXë |ÿu
+éá¶$¿_ùww!¾_pRûTp_i¡ OÛâ;2Ä"‹š#±­¨Ð¶yÊð©Câ#! …AS†*HǘB7.'ÍÛ“ªz¼¡8O¶¹Š¤j"©Øh^oih˜¸¯5Ïk£ÄP+M%7Ý…¦þ°Ð@bg Ý“€‰ø.Ü»F~Œ­h^OZ’¶¡I™ÆlŽi©BW¢ÁÝ,Ë; 8›Zm%ÆîÛ­¿ý2¤æ¸ÈÊéí ÙüÔá6cÊO9Š"†7ûq9Ö<a yq‚MkI$-%IÓ’ï’¼,©˜/ Ë{ ýI­
+Iµm‘¶ž–¹ÐS·»g@Ìn<Ç+“þþS RÁþéVVÇ[+ïoÛÎ8 «§P–ð°Há½M•Ì*ƒüÒIUmFX…ô•ÂHSùqôq‹W ª*š~ª
+uMÊÊîh`² ¤Ññ-‚8#–ínP.ãÛó¤§=¥ž®æ”5ÝÑM8å'¶f_Œ«=ÍÉ…|{¾îkO©©«AÛºîh:·8йÛ-âF`»§E¹oÑ7}-*5u´¨¬ë®I…¸sb‹(Ìå>—Ë…Â÷€úZTjêhQY×~š¢dcò$2©d‘ów ÔŽ£³Ô˜’ùT–‹|ÿ&åËÉ8Oõ13¾íšf3ÀqiøÁóìÊÄt—K8©N˺çáÕÊ¿Ø“~hwËiÏŸ´©•3é°¨ƒÓbã™_z2Ä Ñû‘)ü¨x.„ÓÅGÈ~(Jk½Cúó<†~É `¼fù_øÄ`JØ^¨§$0¦ŸÃ²œ(Èk–¿©L;[֥ÿûpçépLܨfýÅ*ÌG¿ìø¬Ä*Dìá¦Û.8fw«Øï¶'êðn‹ $Üz3Ÿo÷õ¢è¶Èa×H'Úþz¤EQC!ׄ®›Ü¬Æ“ßÃBÓÅ›ùëtµÃs«C ߸†é¸Põ:0ô°výn½IçáøfĤ‰Cýðüy¨Ÿã9[Ðíàg¨¤ÂõºÜ5*y}ó¼ß·¶ÚöKüÆŠ§ùö‰:зt¤öTßf³ £­j¤–-ß>Öb—o×L.Æó´ß4ÛéÎ5³=îü|</è³Uøý1[¯·™RáWïððÃëÝr×ST䮆*˜p'¹ë©:¼»Fö­-å‚8¶ËY9d©Ìâ«+Ö˜7´õ({®Z5ø°\g!‹D$öT2Ì—¦sdÕû½ø˜útûpµ>ÏÒeÈxoG‰â*~L÷¶ŽŠëøå4½ "éúÕ£ï“Y¶ð9׫p:9þ(žtñп¥“Írõî«àøÿL³»û<Ù}y›¦›GËÕëlójW0Øüv(­ pbC‰= ¶OTáÃ
+endstream
+endobj
+1095 0 obj
+<<
+/Type /Page
+/Contents 1096 0 R
+/Resources 1094 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1088 0 R
+/Annots [ 1089 0 R 1090 0 R 1091 0 R ]
+>>
+endobj
+1089 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [453.393 463.898 468.058 477.845]
+/A << /S /GoTo /D (figure.caption.31) >>
+>>
+endobj
+1090 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [78.074 441.576 92.739 453.188]
+/A << /S /GoTo /D (table.caption.32) >>
+>>
+endobj
+1091 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [268.645 429.621 314.114 441.233]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1097 0 obj
+<<
+/D [1095 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+337 0 obj
+<<
+/D [1095 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1098 0 obj
+<<
+/D [1095 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+341 0 obj
+<<
+/D [1095 0 R /XYZ 49.606 495.237 null]
+>>
+endobj
+345 0 obj
+<<
+/D [1095 0 R /XYZ 49.606 476.849 null]
+>>
+endobj
+1099 0 obj
+<<
+/D [1095 0 R /XYZ 49.606 423.644 null]
+>>
+endobj
+1100 0 obj
+<<
+/D [1095 0 R /XYZ 49.606 256.31 null]
+>>
+endobj
+1101 0 obj
+<<
+/D [1095 0 R /XYZ 49.606 238.377 null]
+>>
+endobj
+1094 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1104 0 obj
+<<
+/Length 1337
+/Filter /FlateDecode
+>>
+stream
+xÚíZ[oÛ6~÷¯à£ „,ï—½mÙ`ÀŠv1¶‡´Š­ÄÂd;±œÙ¯ï¡HÉ’,Kšm"À°Hé;ß¹<<ºPt‹(º˜ÐÞñ‡ÙäÍ[GcÄ)ÅÑìIG4ÕÈXNgh¶@W 'ŒO?Í~näÐf”Òäò.gS,¤M~Ì®·yÚç›Õ*]/Bç#UÔ ¿y˘jkâŒáVJ~É‹ÈQ»ViIŒ5(Y@Y‰qškÂÜ( G˜Y"¬ àÙ²2KÙdÞ˜úäC™Å3»M [—»íÃ|ºåãêzSDôn™ÆÓÛ)çIve¶®Ñ1"Ð\TÞ)VL'ï"y¹LƒHTúÇTè${ŒôñZË2ð¼Æ!Á¡Ín™m§˜kéÍYÇp‰V ”„ÀÊ:Zå<-²pqhB"
+ìFÅhyî&Z¾¶”µÊ,4¢åê™Ô0‡æ2ÿkP=€X3ú>øžu‘}¤”¯³ž²Eœ]¾íùΠidÒØ×
+VˆEŸ+è
+1È/BúüR Ëɇ‰íH¨S$
+½10ŽüÙ†T!|2ÇÀðF„‚ÀXàqwy·Ù®`-‘9Â~®b¿U¶ÃLV¢«ù [ â×/. ÏÁµøÊ$$á´!’ÇlgÄÐR”°:ç”ÿâÄây²^z¤Xj˜#ˆU˜¸@|
+ óŠAw/˜ˆ †µÔçÜ1½Æt3¦ 1ý½$ ^Òæ)hO™pçHôi’ãÕ`Åb<KõDç)eYC!¤#Øq«;Q+RM,2ÔÌÙ"X/ÜÔZîþb‘q­3õ«/ý Ç+ÕеÚóêÎŽC¿±ì'ó·Rvük“ùå70û-l`û]áø¦´|ÉÃV¤ÛÛO
+•4D1þòû—ÒbÇÆ%?>ìxÕwuoÚ·¸éÝhôDñ ,î
+7Ýö½BÇÞ¢êÝ+ ÈöEHŽǘ~Æcúù¥Ÿÿ¸Fì'­}™×*žª2¯ûeÄP‹·Ä@ê÷èõÛþ긤ßAɃ ››ý§5{NG!G¾«é~Ñ`Í ñK—î+õþÜ1Ä9GêÕñ-œýñ_
+endstream
+endobj
+1103 0 obj
+<<
+/Type /Page
+/Contents 1104 0 R
+/Resources 1102 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1088 0 R
+/Annots [ 1092 0 R 1093 0 R ]
+>>
+endobj
+1092 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [397.688 737.029 412.353 748.64]
+/A << /S /GoTo /D (table.caption.33) >>
+>>
+endobj
+1093 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [109.741 725.681 155.21 736.685]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1105 0 obj
+<<
+/D [1103 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+349 0 obj
+<<
+/D [1103 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1106 0 obj
+<<
+/D [1103 0 R /XYZ 49.606 719.704 null]
+>>
+endobj
+1102 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F93 449 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1110 0 obj
+<<
+/Length 4021
+/Filter /FlateDecode
+>>
+stream
+xÚí]Ksã6¾ûWð°ÏÞ
+^¼»*ÞŸ Êå«_ßý»9¯xO8cìüÛËíòÓrûù‘ʿެ׳ë«ð㦙?ç›8×iÜJj ;•í—«ÆJ¥Þ®Ž-)76*ƒQ´œ*JZa¼ZP'\A¸£Ò¹ ün±¼ƒº~~ÙT¬úñi~[`çwŸ×6«Zk»˜mÃÞÍí+!Î7Ÿ–Wóx¨Þ¹œÝÌ>,W¡ÉþÀ&ºšß,/ë³ï¶-•YhÝr^³«ˆWu=>Þß.h' M¸ÙÜVFeÇŠ€ß¡Žwwáx]CÍ»Þ.¯?~\ùæ·z{3¿m—›ë;Z_!’ZS ׉Ů›G-jqjE£´Úü9¿Í“’
+Ö\àÿÏ?‡*,ëª_oê6}¼›_Õ­Ùµâv^7øvÕƒ )® ’3jo÷Õzsµü…1—fƈ–Ôš2Vêb>Ïvƒo ‹J¯³›-” åÙs“³)¨Ò2ª/¯ë9¸¸õÅïü\ÍoáÛŸ~2ÄO‹×q'ó霶Õ4H8Zê:u¥ÜÍJʳóò_0
+îÂ<l&ä»þiŸÃÚÓ&˜¥|7y“kZòÝÔ5M¦¾wöǯnØ„c”Áh¸\Ÿ½ÿ•Wp †9•¥+þ¬4×…²ŠjîûqU\œ½=¾ ímÀ–ËQ  àgym"‚ã®ù0X(42ÆP YõÂ_i}>[}¬T» W
+E…æ0îýùqÿ*Ô=NºH§ Rë÷Bc„ÔK
+=Bê.«Ût‘:Ô¼«2àê
+³Ô)­Â‹?êAVud”yøé_´!¿¥¾ö—1ÃafZ‚ÇâI ¿…¡vNiQ!F¯~Q•t ’¬EÒ7Ùj€Ç—¨ÏñŒ¶êF6:$Q
+æH×É$]‹dÄ$Â$ÂäË…II•²“Ð'÷Œªñg<\†½Lîî‰Ó`iBÚ~Â0.í‡P=ýNlU&Á[Ü͈:5éjÖ1e¶¤)i=fj@ª@òuØë¢L‹³²n Cý@òMçšuÆÖè4ðQÌ¡NÛ7¶æCQu÷qròZH*Y ~Š KâÖ†æhó`¹¯ßß¹LW˜È8RÃn“³:·|­ô Ê…†A˜Þ¹ŒÊ4µRˆ€üãÂäVl‘S®Ÿ;Õb’+m@˜+nH:P Ò©F£Ö²Æ’¿éŠ¶²ÂD¶Èé®;wg‰|B˜G²• µ CÕ@ªý󋾩3T[¹‡Þ™ JZj«ç!àUÁ§îEîÑŠöVJvÎ~Aƒv&JG}IˆùÁm5¶Î
+‚ùa‚ó V8U°SÃrµ{éý[ë`çÜŒùE¯¡­,D7ÚîÄh(ºÑô÷ªíZF.œ#„péàhd"ß"³Ì>2ûÈì#.#.#…Žú)QèˆGˆGÈU#W\õ)rՈΈÎH
+#)Œ¤0’Â_5)ŒŽ!²¯G`_–r˜}eP‹”êÇíf½ù°\͇IUe¡Çµ{R•™ŠÝERIÕ'$U›ü”*'ÇUðl)sÆçåd’*S2©Ò>v`vRÁn,E@¿¢Î¥v²`QïÌ4‚XVuV-Ó”Ietј‰n­“ÃSù¾¦BQÖT9šéµ+8§\¬°WÙ–06‰ôZMr}Cz=HzLrU&½†‘^ÛI®‡H¯I¯«Iî‚,:†ž´ÂÈ¢ÙI…¤Ù«§ç¨8•f…aJ:Ào}´.AO¸J„0¯˜S®Ž`¡§ÊÊ’Ù3"JÎÌ°è„.áÀzT¤ÀI1k[vNÖ.¦§ÚdáŒÎvÁNêûMê{ä Ú£`{ÄÇA“:0©“:ŽÔ^ã½]ŒU¥K©[qa#l€SâTšb\ˆq!Æ…v’Ê,&•aRÙñ’Ê=1Ú?bölY4;©4{•[Ÿ§Ò¬ã!Œ‡0Âx¨“Ôj1©“Z1©õa’ZÑ—`tˆ,*F‡â¤F“ê1©“ê1©þ ’êÑmc ¾ÿcÚGÍN*ÜÛ*…Ïq*Í
+1Ç@q Ä;‹zì1õ˜£,ê1-êÇYÔ³[%3¸¨G)0ÊUXÔs5_o®ï¶á[¹#ëz ªæ!Öõ(ñŠQ¸®×õ<ñË›Ùä» À™êSªP¥ûa]cBHA}îQ0Ì«w×Òñô·µVT
+_þöâ"NÄf²t~Æ£u}›ê¾Å7 bR:&¥cRzÔÔa Vª*@™
+vŒX?ßuý SåŸÂ~ÜÖýmJ Š*¤ƒ¬6S ·0Ü'gj ’¨8j´pþ´,u-Œ%‘´H˜¤Ž1å“83<Ô·¶DvMWS§ËúsZ=°j-“U‚‚áA+Wdx«wþ\ÇëÊõÛPRp>RÇVöºJ)ý«æà“KËJŠÒ~@rQ@w”Æé¤Þ»j‡ ågѸ¤ûyºSú¤’WH^!yutò
+ÁÁÿ4?£|Dð!è!èþ'Þ‘EIÐ"AÑ  øÊz QŒD1ÅH?QŒÞ½íé¬ÕàÇZS2=¡§Étˆ¨Ö<’éÛÍmõ¡ÖjÕ#æÔ¹…YÌôCpê ãÈ©#§~*‹µáÛÂè/B»d­cIµôZ !ÍÐZÇ •ª9ùþ"ǶV;#*Ôµ©*®qDšib¤‰»xf‚3 >Ú•|΢Ö8œuµzpfŸš!çc,l<<*‘Ä339k­‰iÜÑzþQ RyHå!•÷ØëG5%9åJM ZÔGµ®Þk!;…ì²SÈNì2ƃonU©©ÔbÊÔZþ££õüonñ«¬ÃtËŽ¹¦[¤¢Òäé1B·°’*®€náÒ¯«E¶Ù–“c[TøÂñ!l À•TSlK­TMÉ_„’ƒ„ËÎZæ& ®-.H¸ á‚„K6&ÝÑv„Ë¢5TÊ¢u³aés4ä\syTÎeÿ™Üp.£39²)“3¹£øüc¤]vAÚåÉh—½mG»Œ[C¨L[WoºyAæ™d^NžyÙß…4Ì˨ ‰œÊ¤ é(>ÿ»\$_É—1ȽX R–y‘ÃÌ‹rTù
+Ü “>‚©¢Ö©ÀàuŸð –v†(½Ôtò=È÷ ߃|OIõóERÉ`rBì3Š¤žCÒFŒ#i´4ˆ¤ú™!)MH4=ÑôÌc1 ÃÙç;Ž#ˆ)ý“† ©-½˜X ù-ä·ßzl~ë™ã©þéV9Ž§
+ Åq=Ž§ÑÞÛ"­†´ÒjH«:­v¤‡ åA®«Üßu•Ð
+endstream
+endobj
+1109 0 obj
+<<
+/Type /Page
+/Contents 1110 0 R
+/Resources 1108 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1088 0 R
+/Annots [ 1107 0 R ]
+>>
+endobj
+1107 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [188.784 737.029 234.254 748.64]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1111 0 obj
+<<
+/D [1109 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+353 0 obj
+<<
+/D [1109 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+357 0 obj
+<<
+/D [1109 0 R /XYZ 49.606 724.088 null]
+>>
+endobj
+361 0 obj
+<<
+/D [1109 0 R /XYZ 49.606 704.111 null]
+>>
+endobj
+1112 0 obj
+<<
+/D [1109 0 R /XYZ 49.606 680.201 null]
+>>
+endobj
+1108 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F84 441 0 R /F122 591 0 R /F125 600 0 R /F93 449 0 R /F81 439 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1115 0 obj
+<<
+/Length 3439
+/Filter /FlateDecode
+>>
+stream
+xÚí]KsÛ8¾ûWð8s
+2Qm³Q]WÉÖÄ/Ïþök¥ŠŠWVÚâã—ÂZîŒ+œ¶\;S|¼,>ýtõ×Ãêîa¾ºù™ÙRþ¤þüñ÷³w“ H¡¹µî 9({õe-¹*eáŒà•4ÁòmAZï‹Zõ¬6nÈzgÿ(5Œ†Ãû³O…ä•÷^uÇÏt)dõŒÊ œRU}¾¤s:JQñ¸¶(OQÎYF‡mØI•XÏKMå”®‹³ó¢«’uqÞd.ÿUœÝ<±² =8•t¡(l \d*àñI°ll4‘á_ú<Å'“Iî,™Q\ûºß
+J¶lÿ¥¿gËbó™][P7JÌiϵVÁJÝ%©3¯»dÔŠJuŸüCjûa×WzŠdíÃ:µ&»]n§ŠWR¬r*؇ôvÖÝ?¬Ï›úÿ±¾ŸàŠ#–ê8ts»CX±„*†žý'á‰)Ee(}ï<Õ²(îè¾OëçŽJ[Š¤ç,'¥i'Û&Ûè×]2úKRÓ¹ëÛdôØIaLÝ×/K/uVÖËÆ@—L~Éo9%Lc¹°±,°‘<dë}»0Wà¼p¬ØH=<æ‘`ÙRHG+£—“IHsÏB4U
+î+1hQkÑúŠDshJs'å>
+YË+ÂTÑ™Tt.e3`É)]×Ïô Q•õ ²¬E64¹Q€0ÊŠñžPÈh«-d§Ã¥ÆëÛc9ƒ¬o‘m1¹ï±‰rtÝNöäVkº'÷l¢(»Úí£+S9¼zâØÄÚ0 ]ºùÕëÊëÑoêr&¤›s‰íÒ¡#è÷F(Y…íÂÄÆŸQ/'}ÍÖ3gSš’¦>8“6’–ÏÓ…eJœ•T«–/ò˜8Wì¼p¬2;By&°i%¸ÐzØ¢Ö$°õ1é6ÍeùÔ1Šô_n$ïD¤âª¬KÙ¸$gaä¯v¯9†úóôåɹ·ä°ŸÁä®ÞpêöT+¡yí$¹†Ât¸Uf¸SR6è´]˜ i¯sÊí ³³\j#Â\rcÒ‘\°^6:½¨°œu–Âà5ÚÊ
+ÙuNwÙå&ò ašËf‚ä‚eãÃÞg¹º2\9åBZ­iÒS<üY®åÆ©'xÛÔM;îê™áþv#ãÄÈ­˜`¥Üx÷ˆ% MÐÃÌ?!2FÙë —^7OÌ—ùÝÕãbéJ_ù=0.¶¢»”ãÆå­0.ŽW:À
+7²î„”£G3.º~ñϬw4ucŒK£•ê~øëoÿ|7d\67‘»Én—ÛƒnÿLèö`\À¸€q9ÆeVÑ Aø)Hkµ¦!­§xøÎœËKp.ÏïÊÊjîi~±½+G­É®ÜW<‚® Îœ 8—æ\žlZÕ \k•&a­§‡9. \@¸¼YÂe¤*É‘M½·‹ZÓ.¤§x#ãS.f'”‹y”KÂdŒS.Ró²j)—¯w_¾Ìæã´‹©*.´Ûí"+*¸íÚåÕhÁµp:Í1Mm•6¾…” /•¶ÍohA笩Jš¦S§“E¼Mr¯³ÝŽ§a(Bø[ʵ¨>z\OE«;¯ïlnhµé0ri 0J·, FÛ4ºóÙ:÷¬nîZZµ'õ]>æŸÕV­î
+ÀB²FÊÎz<OŠÐÉbY] >„j’d6) Õh´]„êØQâ]Rñ|V76‹·F‹Æcu‚¤:Yl,Öo 6l.ÖoÑP[±­¯×¶Sãúš6bƒ`™Vbƒ¦ì²ØµÕZ²n°µ,¶4 Ë´4nÝô±ÑꓤÁêóØXë{cë°|sîݺïté>¸R¸R¸ÒSp¥ ™A3ï…f† 9 ‚ð„7 ¼aßá p¨p¨p¨x½‰ÈDÖ ²‘5‡Yƒ± Æ.»œÄË
+ÙFæÜ\οÏ/ÿ¼XŒGØPáΚ}DØ”Ž ‹Dؼ^„M”k´R*?eD:ø[mîè d[ÓFü6¿ëAjï:ë`ýDfɘ‹z†­‡^­•6x²‹ ­#.{{÷fÌ_
+zÞ>R…eÅ™V_4©„ô|ñCAœoi/=‡˜Ät ¦c§1@Ï#Fχ„ì(„
+‚é¤pWÇ<äO)9‡ ç7(¹5Ç5JÉiM¹•¢¡äþ3_,æ7_·ðqÔëŒÛ§u —ø8ðq¯¼ç<ÜÅóÝEˆÓ±RJŸ6'ë=¤ >Α"oçgv»øˆ à }D ¸ÜàcWP‡ _ácW€/Àe‚sçÎñ˜?Ê„ŸƒŸÛû÷ƒo¬”;!+p”¬T®âJµdå·‹‡»Õ_©ŒæÊë=ð•d•;ºtå«Ñ•žF§ P/×ÛP´‡E·i[Kž*åë)\'<¯?ØoÌuïÝ2zR»½C¼ykCc¨ÚP鞸¦¡^¦(ßM7ségèŠ*Öˆz…ÍV+*Õ°ðÁúš=­ÍÏÐY›YÖå+Fƒ”)yê¤äÛWñpUap¦[Á5jm×¾V\Å¡+¨GP{¡xĦ<Ù·“ ÒjM€JOë(Fl A0‚`Ü;ÁxÄ«5ixÅ»b£ÖvˆíkaR 4"hDЈoŠF<â·¦¤É°QÞ,jm÷f}­ãx ÅFGÉÂ5û6Î
+Ÿm¨ÂÅÕÅýŸwíξ³»‹/㜡 «ÖVjœ!yã+† _4dÍfójÃà@Ö,níé$ ¦+ÃÆF¡~sÂë.Þ£“¶½ÌµÛ6§†“ªj/c¹r^TÉûÈsq â@Ä2À¹rë
+5ú…mÿ:ëÝÏz)ÌjQ‹˜ A}µ3B?ŒíK—î$ Zú
+}ÃT®e=_Ä—:y¿Y}æD [ªk×rÚ[ªKOK±Áh ½m° 9 Ávk`¨ÀP½Ävk@TÌpAž<yòìà6_ƒó:éÀQnŶ^/aÊÆy½RP¯²-¯wÿ¿Ùõj±ú:Ÿ],·I^Ñ(±VX}»º»x˜¯nîÇ™?áJîÅ^˜?Ê«,±þ!˜¿WÝ®Mÿ^‡bLDgÄ艀þÖ¹&:£SÌ Y¼9u±‰æƒÙå:.£÷m§Z† ŸÚÐlE›ŠC½¬Z&åÍ„±Ç˜=0{'½Ç°ò8°p¹Û×ÆhÀˆ#Á|;fÌÜ ìfÄÄ Ì˜70o`ÞÞÜdpNG2œÇ¾aãÌÚš‰eÖ„¦
+”ª!Îî..ç«f%À‹›ËæÇÃÕâêûü~¾ºÉQmã\œ}WÒƒ Ÿ8¡é)\¸¸×äânßÌ ¾©òüµ6Ò£ÿpžœæS:‡g}žgÅ"Ž A?ž4ýxûžØÖ1ä.Mø…l*p ÇíÀ´‚iÝÓz»£–ŠcÝ·ú±nÕjGj †A ƒ~j/Dà$ðBl8Øp°á`Ã_Ÿ ?ñ>‚×^pþ‡°>oÈ°¦ú¢»Ù)R'T¿¬u
+endstream
+endobj
+1114 0 obj
+<<
+/Type /Page
+/Contents 1115 0 R
+/Resources 1113 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1088 0 R
+>>
+endobj
+1116 0 obj
+<<
+/D [1114 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1113 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1119 0 obj
+<<
+/Length 1456
+/Filter /FlateDecode
+>>
+stream
+xÚíZÝOä6Ï_áGx°ëï¾õ¤+êIUEo¥> ¶ Ü®´ ‚£Wõ¿ï8‰³Žc'°°ôî p2ùùçñÄ3žx è¢è¬¢m{_1h)bHS",CÆr¢8Zíª‹KŠ®àÑOœE×À’FÅ\oÑÇê¼O¡<g@áÆ8¨ÇÇ[Šw‹ê‡Ÿ@Ž8Í5ZÜ ­‰Q©‰4
+-®ÐÅÉÃæîñôrñ¡z¿ˆåL­Í£ÒÄ¡í˜%'‚rd#Ž+Ï|
+æÀŒ®¾ßÁ=´œ9Ú­ç îqƒ{<1'L8¦ÊÖ¨úˆ:“œ×Óù*µüU·[ÁÂqÜø©àp›1Àó‡ÀÙ1pqáO¼žÂÊÄ–xC¢Líª P=rmý¶õ¿«ê/ÙŽ€ Ð…q„´D(áYj/ÿÝ{a@P톿ÿòÛ©¤'‹àŠ»$``<ßXkÜ)<5A
+Jha<4žÏèÜÎãî¸ë?´èmý·äýQd1À¡ÁÌÞÑõ+ qEÁê?(¢(Êœ‚ñ­±R
+fÀ%;àü”KâÜ´óÂ’1ž£¼(®I®`- žÙRðüáU m’pzh’ÂJéIzÄŒpAuMqYڕϾÃÓî°cˆ^¬â#”Š\Ç S£^I>uÿ5BsøÄ ã
+aœŽÊÀ_çM|F9í:n¿2[1ÎVæ†+I ZàD
+endstream
+endobj
+1118 0 obj
+<<
+/Type /Page
+/Contents 1119 0 R
+/Resources 1117 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1088 0 R
+>>
+endobj
+1120 0 obj
+<<
+/D [1118 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1117 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F81 439 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1126 0 obj
+<<
+/Length 3332
+/Filter /FlateDecode
+>>
+stream
+xÚí]“Û¶†ï÷WðRš)â›ìӉݦ“'Þ4q|¡hiK±¾,icûßç€ ´$DñRlMí™±M
+zy
+¢Œþy3¦U)ä-I¸ÍûÅêónѯ‚ëxz‘|¹–DJVÏ÷»O³õn•γ–n9“Èúü¡ƒ Iûµ›~&L»Q)Ü? ÜhuÆjuÈ+u­WKh4!B•Ífv8ÀŸåfv\n7íMç˳OZœÿdY€¯'ð@©ñei,ˆ@õ"*¤7…q ÖMrãÈM£æðâæuÄH–¦)?ßÀW¦¨7pTsžŸ×ðŽ nÆWÆ”ÉÉàsÜ ‰kvª¢Ø³WM5‰ÑÍ«èT%?·óU–ò—èfóÈÊ–Ðp2¦Í­Äg‰«†
+øò,âÆ<âÖLÎÿTÛëIù·z>_Gõ¦Ùe£lÝ1<^‘ Ó´ÿ²í“ÆÓÂD¬'†°Â¥!€ÇhmÃq©r¢Â§Ÿ½rŽ|r6O¶~|ÈK”¹ÂžWÓ¦ø·Í¥+áBÅUsã½ê‚ÑBA°Ð¤&dB¡+HHªSÁÁØ®{ýÐœb£ •ÐŠC¬ƒ©UßéJ«9Ù¢A F¿­ÔtÓ÷]iÝ•²paM’$e¢1Í+Æ™L¾mº½u(±’YÜT‚¸­qKë½;±é†›Ûª!n©‡/iqã]·¤¶V†W’ÿM¤b}"OŒ‹eHåTHåËÎ#»H¤‚ñ¡flˆH‘V=.R‰S¬²G/RÙ^H*¤°žûPvöÅSsi¦å{ß/êѦ&{¡¢,¢
+ž[*èÉ$‡ÏŒÙF“hQ4Ö³ò9iìŒ-Æç&k7`FENá®17él•7yÒÄ‘5ûöâ&ƒ±o1î09‚±‡F©tÐCKUÈC=ÙPc æ…ÂC¡ÒRþȱ„RæuÈxª=ó<ôaZí"©õ!}wêyÇq¦÷F‚îÄJ—åN’¼’øʲ'mÌ)”Zí3J·!n.ãJÜpÇi-Õ·ÕCÜ|ËmÉM·ÝœØVÿ—E¯x%XF´bxåTxåËÆ÷î#K;¢ mc ê 2ã
+¤O…VôŽT0(KtG*§
+D*_6T¤BZ´b,´¢¿‡B£4]_ÀCKUÈC=Ù`Š´iÒŠÒŠÞñÊ
+ùЊÊü+­i
+Cö’V,–¿ÏæïÛP…Š¤âðPõ
+‘*Ì`HÙ‚*J•ÎüÏ3Rá©ê!ÙI’
+$OTôTЉƒ‹ñ@ rªî@嫆
+T*TŒTôwPmè 9h©
+8¨§ÌA‘S §@N1BNÑ;\ Ná P•Su‡+_5¾Äˆ)S ¦¸LÑ¿gÈ þ«Ð”˜SzO5Ø@ö*)»¥¨Lý·S
+¦Hš•?¤µØÞò)<~69níÑ&µs x¼™PCp GÁ[ ·5·8õàg ˤÓìH£EÀdEŸÒ•æ®-'¾}庸ɸ)S.RQ3[NDÑ”Ra³9×4ç¢ Dˆ2®e`ìBºtc\t}ãÁ A‚ vˆEαˆê‡EÈB+
+ZqÂ,y¿¼ÛÌv»åæ];ÂÌOB„¦ÅÏ]#Ar• 8hÏB›_¢æÝ 8œ¨pè·-ਘj¦Õp õ@êñ4pО 8:•Su*_5T BĈc| 8hÏÝZªê©sPäÈ3gŒzí¹€£3\9Uw¸òUã{ñAxðá‹«ZÀA{.àèîJU gðTƒ d¯rSŒË,à¨Lý·“ŠÄ…Ú§¸¾ßßåûvJÁuF¤’CPŠÄ”Œ"¥@Jq]ûw+QüôŸÌ»#Œ|‹Á:5Á²mC +*5…+ÿðóù~5•¿K‘)h|*)2
+dÈ(žÎæÝJ¤}”ÙÁ"¡¼;L9Qw˜òTça*½H˜BB„b<;w÷E˜í+hrÏRpϺj¨Qò äÈ'ƹmwÏ`eö®`Ju+'êVžj|¯<H'N @:q{v÷|Ç4Ûl ³åbg¿PŠýB]5Ø;&þ¸T;›x˜ðoe\@Tc%›Ø-÷³ùç6ASµ€Mp‘­M š¸®fª±×fÝQˆ”\*²V6aUNTøòËɺÌÇÅÅ´(ntéÄ\A‘˜µ×”¤…×wE*§
+D*_v©$î€â‰-¡è9–0Ë Ô!-U!õdC%Q £@F1Î5=ã•Y÷¤Y ^9U ^ù²ñ½û ¦@L˜1ÅU,¢èÛ5d¢xhZÌ©B]ƒ'l(‹›u·’Š‡éÿVPÁRh©åJ˜ýlױᓺøïS—§,…[Öb
+Ä×µ‚‚SÙSh¸oxMgKiBÛ—P•®üÓ³¦5U™OŽMYS ¦@LñQpªúa
+pB!‘Ê©‘Ê—G*…˜1Å[GÑ×C¡QJ*BZªBêÉóPĈ)SŒr)EÏxeÖ?È,ôîãTx刊Wˆ)S ¦@L˜bЮ!ã$5ÿ㦻k(U¡®Á“ 6”Å­˜¢2ÿßÎ)XB2Øñã~y<æ›vVAÍOxYètiVÁá)²
+dW·¤‚öړ¬‚H‹N2Ú±¢"5,¢Ð¾üKãzŠÑ97¦—ÿ]Vœ9rŠ1,§`ý6¤0+ ²î(åDQÊG)vùÝ(42
+d_÷R
+Úw7Š$ yg)êöκh¨1DOhäÈ'OŒgí»Eb¦»b•uÆ*O4¾÷dÈ&M ›¸’%´ï>< Lƒ9Qw·P 6„­r =ÒM(ü.©‚¦ëís´@ÍÏÊ'iDµ&L•‹ n§T©Éì·U>9ÕÁþ'?ûâí¶ØnÂÔLÀ›±5v¿Û奪–3<S*”Sý1[Ýçku¹±Çã"·×Q*«4JÊSwáËÕ³ùqùÇòø¹!•Ê©ÓηëõlsGŠvæ·¸‰¤reÌ%#‰2õ'Iš•5cŠV»>z Á=I&ÏÖ»Õò×$aùþP˜wèAZµAèÔ^uÊù$ÿtœÂãO&Ï—ùê®nÀ¯
+4Kÿz ¤ÚI3SÅ(s`“c>¥éÄdm‹Â¯îì‡YåvþE£ÉÄ]|Xl?nìiñ¨ÀÐó©æ“å»ûý”±‰]@c" iìÉOEM™k˜ðêoBÊÇ ­õ¡àf­Ð™+ú«í:·ynß94p)çðêI)É`Ü\È ÍŒNèÚ”)ûò«Ýj6ÏïÊÄ»ßáÃæh?·ö˜Ïæ {¶“û)Ü#Ô—rrØÜ7¸Ù–×ÏîÛõ츜ÏV«Ï6i¹9äû£Ëî·üø1·Ü®hõ²¯I³§ˆÓÓ®¸`{-³l"¸ßJMê»åEÙ¡¡ï*ÒÞO¹šäŸíp{r—æûåî¸ÜnlT{q,k,”íÅÔ g“Ùj»yg%—Ç…=;er8‚åÙÞ4·;{õζcäÓ”ÓIQ.sÉÖï9±ÚÞ­ªnË2X¢‘KZoÇ¢òMÚ<Zó4Jõö!´'ÛÍ)”Ý·nã­ºÄÒ{RV-|ÿìåKÿšÈäðmlÌ LP¢2³®DCü.ám¦k"èòþ8Nop
+endstream
+endobj
+1125 0 obj
+<<
+/Type /Page
+/Contents 1126 0 R
+/Resources 1124 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1129 0 R
+/Annots [ 1121 0 R 1122 0 R 1123 0 R ]
+>>
+endobj
+1121 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [480.982 128.4 495.647 142.347]
+/A << /S /GoTo /D (figure.caption.34) >>
+>>
+endobj
+1122 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [111.093 106.078 125.758 117.69]
+/A << /S /GoTo /D (Item.56) >>
+>>
+endobj
+1123 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [292.127 94.123 337.596 105.735]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1127 0 obj
+<<
+/D [1125 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+365 0 obj
+<<
+/D [1125 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1128 0 obj
+<<
+/D [1125 0 R /XYZ 49.606 766.779 null]
+>>
+endobj
+369 0 obj
+<<
+/D [1125 0 R /XYZ 49.606 159.739 null]
+>>
+endobj
+373 0 obj
+<<
+/D [1125 0 R /XYZ 49.606 141.351 null]
+>>
+endobj
+1124 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F81 439 0 R /F84 441 0 R /F122 591 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1134 0 obj
+<<
+/Length 2598
+/Filter /FlateDecode
+>>
+stream
+xÚ­ZYsÛ8~÷¯à#U5Dp“˜<%ÎäÚ›µ·¶²™<ÐesK="•Äóë·
+ò ÃÔçxòƼÁEݾ°fçR!ºçº¼-W[¸h{X}¶¯v>xoVeãFRE¯®'i?ûð ·×+GgTxÇÈ$QLÅoVŽ\7ùM¹Àœjæ.ÖEý¬…eÝ
+vi´k†òk’ûD~ãsý¦.|¾ÃÚ¸Š®VµÏøžzkƒWmî}2mÄãWð`)çŸqnÄseؘJ¨¤|Ü8 6¼ÁQ‰°¦D2¹×[nÃÓ†vaO#Àf>w{pZ-—Ū©G¶àIFw`ÏÛeøÝp’l[øäR§ñ¥Å%Ð-.%oq‰”GñŽ ÉAUbVÁ!Z¶=
+¼uzþÚ”n0 mG+P!ÉW3H†Ç#À>6.‡˜ :çáúLך¼v¯•.cŒ
+bHÑn€¼v°Ú,oÚ·Ë|æ©›{Ï6wÏM¤Š‹E¹ëœ:/¯*wê¡
+áTÂ6¾ôe¤ÜÊ`^<ßô qçæ`g‡kŘëìþÚÚѳ³õ÷ÞQ/Z Wö¾Ÿ¾ß•ý#sô%Q”Æ—ª‹¦XxñÎ5Ô¹(ö&оÌçAyÿ®7ùâa>¶—Aa/±çåúxã^å}¨š¶Ç=ÎJ/õ°Ë«Ÿ—ðrÂ4 ¯Dpµ¡;_µF· úÿ6³Ûbæ“ôV» æøü ð°àØŒãDµ'†¶‰ª`ëûSB½Åi=ÔòOïÎ7]/¾YoŠQ8‰aBÇU]—?!È[%ƒ‚^T››f¾YŒNUÁ©o–÷;wÆuë 
+D‰³Dßo2Ê<œq´ƒ3þr5:^ÂOç% |¤=Ã…°MG­Èb<±ÀÊÜOŸFʈàê¼ïgŠÀB˜¥„QvÞ%Ž&F†e{_*Êà‰úBU°«p1ø5«-|§)Ö½®âw ¶ÙÌ|µ=ê-ªÕ­¥?mï¼ËY{Oè«M‰ØÑÀ#Ãïôü,„/¢m;C_)þ±Hi"™Ï+ЕjÛ–ÖFG
+ÿÁ¸ûµnì{1þ2ªŽø^Ì~ÉãzBñÿŠ M´ñ`0YVõÿŒVim
+endstream
+endobj
+1133 0 obj
+<<
+/Type /Page
+/Contents 1134 0 R
+/Resources 1132 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1129 0 R
+>>
+endobj
+1135 0 obj
+<<
+/D [1133 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1130 0 obj
+<<
+/D [1133 0 R /XYZ 49.606 798.261 null]
+>>
+endobj
+1136 0 obj
+<<
+/D [1133 0 R /XYZ 49.606 653.776 null]
+>>
+endobj
+1137 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 499.948 null]
+>>
+endobj
+1138 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 480.023 null]
+>>
+endobj
+1139 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 460.097 null]
+>>
+endobj
+1140 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 440.172 null]
+>>
+endobj
+1141 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 420.247 null]
+>>
+endobj
+1142 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 402.179 null]
+>>
+endobj
+1143 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 360.471 null]
+>>
+endobj
+1144 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 340.546 null]
+>>
+endobj
+1145 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 320.62 null]
+>>
+endobj
+1146 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 300.695 null]
+>>
+endobj
+1147 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 282.628 null]
+>>
+endobj
+1131 0 obj
+<<
+/D [1133 0 R /XYZ 260.535 260.844 null]
+>>
+endobj
+1132 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F81 439 0 R /F84 441 0 R /F115 467 0 R /F90 447 0 R /F93 449 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1150 0 obj
+<<
+/Length 3054
+/Filter /FlateDecode
+>>
+stream
+xÚÅ\[¯Û¸~ϯÐK ‡áâŠv»‹X`ƒœ§îöÁ±DȱøÒ4íŸï”LRiÒ¢à–Ç£çã̈¤>7ïÜüü>ÿòôâÕO7„#Æ%mžÞ5\#‰e£”FŠ‘æiÓüöÀ^þëéדšß ÆøᯗÓù°{ùÈxûð÷õar‡«ýÆürØt¿cL·ÇSt¾»"AZ{EÜ<R‰0fýÅ©"B}˜ÃoVý—îùÍ×Ý[sÊØ°àH\õžºÿtíúµ[Ÿ/Ç­ûòcwܮχãW÷õÍùxq¿†MøÛÓ `ÜÀÓx ÅŒ7ëÝ‹Ï ¨ýÜXÝ1ÝŠæKcÄðGœÕÿ×»«Fo#¢5
+Õ¶àªBX±;QҔ݇dy ˆ<Jmâ™O£Ô+ :¥ýá¸[=qi&pê[;©Âã0ÇHË{qº;¹®8µ QÎò8õ:§ÓçËêôa»I!åíÝÌ®1R‰i¤ üµP—Š(Ù"!E©^Ç!ñ” (o¬: < Ó0iÅéb%âòFâõ:¦[QåVG•‡cºš·îïUC5—ô\ç«ù cáZuÇD1L•ÇT‚a:¦Lý#Ës¨¡f„”©^Ç‚´[u{„P*š¼¹êäó@LEàŽÊ¿ )‚X+f"E˜ä‘êu,R—OŸ¶Ç TÞÞ·P]Û; U
+`HÄÌg˜’KÅ”PažÏ¿A§ RæêCÊ#‘€JB̵T©pyÎÚ<T½NI©
+ìÕ—*E+%íbaÅRBç±êuJJU`¯>®<‰RÕj$xû½ ×RÅøоt©êu,VÛÏ—îÓn»OM’ƒåƒÏ¡^y,³d p3½X`Q3ªIØë”Ô+o®~žì‘H@E$Ü_õRÔS•‡ª×qPÞvÏÝùk.o²zZ 1†”X/5bàÊ1Χá cáêö§3ÌWçî°Odb`³zäÀ‘/Î_*9`’®A§ sõy8à€I(´Üü†K;’ü"Ì S2hìU<‰TšFK@ÉÂe>{·³].Çw«õ6•~Þb}úy0qÕrÄäb«{œAƈÕë”$ 7WŸ€‰T³ÅrBΈü¼yÐ)ÊAo¯>=ÓX1‚‘ä‹­\qB‘Rù•«A§dàØ«Ž«
+ŒV׬
+ÌÕÇ–G"•ÀHH¹TÍb
+jj›Ÿ@:%5+°W]³(XI†V‹…•ÐHå—°z•’Šå­Õ•Ç!”‚9Ð  fΗHâAÕë¸üëöÛ RÞÜ4T™Ù`€D¢¶kc§ýÞùw­íŒ#%T¾¶÷:®¶ÊÔto¬<ù†šîqH=ŽgH´‹-È04¿ 3è”Ôto®:ý$P‰ÔbÃP†[Di~Ä>è•to¯º¤{$H™ƒï? ¢z25ì•’šØ«*Åt¥âª¾$K-ÓÃ$7ÿ@~Ðqä×çîßÝùk¢XöªW(q%"ËQb¨”ˆÞ Ä :Å*0WV‰T
+#ªéRÕŠ
+Ž¤Ìó¬’jØ«¯VŠD
+¶w”-5¤L#©y>{V—çs—Ê?o¬zà* QG[5¦†´‹oU¯S’Þ\}þy$ä=A'Äbù]š_^wE¹7تμ
+Þ^=ÍÑC‘ÀŠ)Dï¦ÄÌ~HZ ä±t|TÝ
+°H€%Ü`ÅR,ã" þ÷:¬µ}y%–7XMõ°xmÞ ÁpçC˜´Z5àˆB\QÜNËÜ[¬y«Ö‘ðÍB{fÅ;ðáÎJôŠÂë¨0_£Æ@`„Ró7ÊRRKà§0eæºT ¿ñÁ[ñ
+Ä´½™è‚»½°äzªxäE(LzQü‚BÖ‹ˆÜ·Žû®TäE(LzQüò@Ö‹ˆ{·Ž’ÞÆ
+“^sû³^D”øÚŒvTq3ÞýPšÊéb¦}.§#¦zÔpë„ ”1ÖÓRKã6g…=
+“=PÌ„Ïö@D#¿Û‹ža­ãtˆ¤I?ʉêYGb’÷ýž8þ³jcOBiÚ«5ßo掬pÄd ~ît8}¯+åvçov!5:®M0¦ÄpcÐbK6O¢¾¥é¾(¦_çû"â.ÏñÅ{ÛVǾ„Ò´/Åüè¼/·xŽ/–x;Nö@˜ö¤˜½œ÷$bþVgˆ¥Âêñ#'3¤˜RœÍˆŒ÷„YÑ–f]:†|Zl©ªœŒn‘4=&,&üæ…[vŽ/†Gʉ+o$MûRÌÈÍûQYkãÊ; ü‹ã*§âÊ‘BçÆU`eÜ”q˜¢ÌF 'Ćz‰©M5Biº/
+é«ùž¸Ÿsü°ÌHÆXìG(MûQÊ/Í;r3«#Êr9ÝË#q2¢ŠIŸÙˆŠØ’qO(³}Óíx’:-¶\Bó¬.ê‰Pšî‰bFf¾+":ã_,×OÒø^IÓ¾S&ó¾Dtþ8.ÞhM!&=)'4f=‰É€µâ˜qJ·q†DâT†”³ ssó^Ç­PˆJ¥GˆOK-oM³øîIÓ=QÌþË÷DD»ßÃ*S˜ÆŽ´ÅÔ¼¼­í~? é‹<JPšöÄÆæ{âÍÌòÄp²È¨C¼,íE1«-ïED «Îp¡nÑV2<'3¼˜k–Íðˆ©÷ eAEŽ† ±å1iNÕhé3fÖ>KÙ`7?C*Õ_,ÑHàøIÓ¾”Òµò®„T§9žXÐq~DÒ´'Vk¶'W+w䇣æ˜Wö£üˆÄ©üpJ3ÓÃ÷7/÷¶\Oˆ-q¢'î‡Pšî‡búQ¾#"îÎ_,±¥%£L¥i_ŠùAy_"nMuTY‰[—
+@¤É˜*¦ìdƒ*"¼Ä=ažL‹¶?VJˆ ƽqGÂt?SjòýñQfxb)’Œîã‘4ýÌ©˜ó’è±FæøB¡c¢ãn‰¤i_,c¾/ÞÌL_ ÛAÏl#iÚ—bæHÞ—ˆpQ›ë– ÝA"q*ÛË™¹l9Õí7¤
+?œ™ÕfÓ¸õ°ÿ)wëÃÞŽîswÝýô½º»þ꼬\]r˜²Àw
+ #e;8>uë „Ìî\üªÔõÍ8ØNXdÄ<_t{¾5 }JøuçÔÍ·ˆ^NÝþý„}ã |m˹ûøßÓö|³W˜ì’‘i= Äìš!œLú×9~'ŒïVÕçíù¼ì%¦8šMJŽÛûÚ½sŸ®Õö°¸?Ÿ¶Ïà×vóÎÐÒÝF
+f?Z·‰¬¿DïÉÿ¦~b×Úu¾ºœ†¦˜ÀxezîOîds¦½õƒÕwÛÔš£ÍqõåÚÞõa·[í7'÷íýÁ}~د/HyØâè€Z¯Ì»W>KµonûÈ£<ö
+endstream
+endobj
+1149 0 obj
+<<
+/Type /Page
+/Contents 1150 0 R
+/Resources 1148 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1129 0 R
+>>
+endobj
+1151 0 obj
+<<
+/D [1149 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+377 0 obj
+<<
+/D [1149 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+381 0 obj
+<<
+/D [1149 0 R /XYZ 49.606 764.487 null]
+>>
+endobj
+1152 0 obj
+<<
+/D [1149 0 R /XYZ 49.606 736.137 null]
+>>
+endobj
+1148 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F115 467 0 R /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1157 0 obj
+<<
+/Length 3749
+/Filter /FlateDecode
+>>
+stream
+xÚÍk“Û¶ñûý
+~ÉŒnÆÄáAð‘i:“:ÓN<‰ëK;­<‰:±¦HY¤¬\:ýïÝÅ| º³ÏŽÓû€‹ÝÅb_–<¸ xðݷϧ×WÏ2d,‹e\¯ƒ(c1ƒ$•LI\¯‚W‹ÿ^†1—‹/–Ív›S;_wÅžš7û|ù¦è¨S¶ô¬‹bU¬ìØšž«b]Öe}K½í¡êÊ]UPíÊ%»üùú¯ÀV(Ë´v´Çƒ1 ¾*ÚæoŠ¼kºãã‹}ñöPîçTmOòyY½¼ÛÞü©-ªbÙ«u¾ìʦö‘E
+7ÅmYÿ§+ßü
+Ìu‡}A¼ X¦OÁû÷y½ze±~µiÚ®¬Š'v¹yYuh³å²©6èÂsøŠzuBüêY6KD,‹¢ ”0U¤4õŸ—B©Es¸ #•-–yt‘Wmc‡ö—R.@v½¹k{zÓ-p{¸¡‘UIÀˮٗE k‰b|½ÜÐû¼%®&*$SÁÒ(‘†–‡¶k¶WÈæ
+¥p5•‚oYZ³Li‡€]†‰N×T.¤Z¶$¹HK–À”‰è,ઠ@T†(ÍŒ2D©Y+ 󺣡®¡‘f)ÒÅm^—mA#V0
+«ãŠÉɬàU(8ç‹o÷ùÑD%vú´9Ô«ÖÃ&LÊTš²¯ÓIí®X’É­È‘îà(Ø#%lüÍà _ÿøc¾æšÄŒ¡ÅB²…hEøѼډKFVî˜Ø4‡ÊÒÇvî±ì6Æ)ádê
+pClГ6Ûݾ¤Œo›5=s_˜§¸=T9X¾‚ÙͲËoÑP`‡À_ÿž£rÞ†•ôN8í& _˜á,I{:ÔeGTJKàX®ÐG*+ˆSi6S!±)Œ¾›1Ü!”½1Þ‡i™øM¸t«ÁrBÊ™IÆQ¯ÚëCU­÷ù¶ð°¥;•ƒ¤M'’p6ªFT„ûdëâHÊkò¯õŠáFªÅ_j‚°±¨¥^·É;jí]ãrî¹MBî¨4Í‘æ¡›ÒzäŒÆ{¢bR©<ºŒ;FÑÌpeÕÛuÓYAˆ ‘N%1Þ4@Å•
+Ä¥~3aÈmÏ„ÇL3‘ôþ’“s˜»KÎb•5¦µDnšw"9ÁØM’¢¦…ÃÀ\Þõ‚AT)R$ètdž
+#xQÖ±(a–Í{}ÊÃAyøC;#˜ŠãùÎ
+ókcõœ‰,“ð$±‚eÕ%»^8
+Gc›SH@¸h“:§‚E‘•A *}"™³6á0@þ(! OÅ1œï‹ùy{šY 3Ü&Qo
+DÖÓ±¬†=¯ŸØöàø•BfHþP›àL3Øp‹>‘åYB¡Rx/©Aúž” 918Ú~ì¼Í ³'_öùMnÄîgcbbqIÂR¿ò`^)ÁÕÅFŠn´1Æ
+P."ÿ`8Ýø }–'gAÂ2¡ky`á1^aàOi’œ1= å€ìQ+:±¾ÜÌü,¿aÏðoc~ã`¤%v0ù¤ögÍON(9›|/ëÇ<‡<W”¥ñÃÆ÷{†»Yeú÷³<™‚KÏt:1<ÍY&…óöÓgv×ßcwQÂâ5;-8Ót:;ovÈš:gv#d>³süþ6Vz!¼ÏMÊkáá½&~byaog£À÷ÉæhúçÒü³ï÷Ê4‡¸7¶“atlUCŒóŽÍrã¿ÇCü&û
+Ç\…§0á)¢ð”àdëÇÒ²è&BÇR?9Åã¥ge΄ñbî¹EŒŒäÜðÔG„i
+®ÝK…1ȱo§>‡²G&!’EÒœQÁYj¿³p@†~fÎKûcðî~ÚøC8ÂûkÝ‘'™!™:»¦~I3ò1 8d<Ák–€‹úX9qÎŒî@le ge¡‘ÔOö>Ñ/*¦"¯´f˜¦ârk ‡Å}‰E,BÛŠðbI}¬ÈD³,Â@$ÓY晃r@Fdßã噽rõŠ-<'·9º¹Üh…ÃûhUOltˆ¦ö¾!]8xÁ3@q0M`?lÝÛìžÒp/ã/ñ^Q-¾-·EÝ–¦°a| Bws8ÐWw£FçæØëãñ„ѵåôN¥¿ £¬ŽêD¢,q¼«ØTTÉ4nÿf÷f Ói<º7{^¶mYùîã@v©œ_=ì™­ò2dú+"ìáÅ>é*­ËÍ…°Lõ"ãö*l²©fj(3x-cdJ;]¹¬šå›cÙ–#µÉŠgww
+<ÿƒåE1K‡Zž³…Ax×ú@‰‘ùÝ'³Ê‡Qu× KS%H:ÖצˆPñèìJbHˆõƒ…bŠq=¸”D'ŠM0M—àx/–]ù®¨î.Á³a­œJ³3µr¸r¸D½¿°Šµ\C%‚6ú…OP£[žb8‚©x¸‚gŠ#b1½‚·5+‚Å|VDëîàÏ°Á©Õ9msè6çJÏâa[–›fÆ#x.SO
+ÅÀt$–çMëÄ”·Nìi³_Q!LºøÚn}®›_/cç ï¹SY÷Õ«]UmŠY5_˜Ja-Ü
+QKVôæ+Ô¨dËô.•XüBÀ5,xåã † ⹿6*JûªªÎ@B–¼àF
+F¦-sš*†Òr»É{¶iCv×”µS G©HÉ©J”«‘©|É2ÛìœJAÛÒ^Z{0˜¼¾õ:\°¡þ¡nV¡7Êè¯Q`å›1+k-„)ÏÆÆMA ‡ÖTâd¶öAò9°`9-™º\|»ê+ ³¾rÏÌ&難Ì86éúH ÓêP\Ún¥+@èš™n«ÛâñjÏ­ÂÇNá#¯Â?»ÔÙ¢/}
+endstream
+endobj
+1156 0 obj
+<<
+/Type /Page
+/Contents 1157 0 R
+/Resources 1155 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1129 0 R
+/Annots [ 1153 0 R 1154 0 R ]
+>>
+endobj
+1153 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [128.802 603.54 174.271 615.151]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1154 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [524.957 567.674 539.622 579.286]
+/A << /S /GoTo /D (figure.caption.36) >>
+>>
+endobj
+1158 0 obj
+<<
+/D [1156 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+385 0 obj
+<<
+/D [1156 0 R /XYZ 49.606 636.762 null]
+>>
+endobj
+1159 0 obj
+<<
+/D [1156 0 R /XYZ 49.606 525.831 null]
+>>
+endobj
+389 0 obj
+<<
+/D [1156 0 R /XYZ 49.606 322.254 null]
+>>
+endobj
+393 0 obj
+<<
+/D [1156 0 R /XYZ 49.606 248.963 null]
+>>
+endobj
+397 0 obj
+<<
+/D [1156 0 R /XYZ 49.606 121.001 null]
+>>
+endobj
+1155 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F84 441 0 R /F90 447 0 R /F122 591 0 R /F115 467 0 R /F94 466 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1167 0 obj
+<<
+/Length 4177
+/Filter /FlateDecode
+>>
+stream
+xÚí\éܶÿ¾…>Žˆ+Þb€M- i\mœÚíŽPÍh<‡×‹ ÿ{ßã¡“3«ñº@,`["E>¾óÇÇcœ%I–¼½Éüóïnn¿ÍEbˆQL%ïî%ˆ”‰ÎáŒ&ïVÉÏ‹wërûÕ›TJº¨¶‡r|óË»¿Þ~kx¿›"¹¢@Óö¸}O¹ø®ªzÚÜýþPÖåòX®î‹å±j¶®ó`L*¼‡Î«jÿ†±ô©Ÿ`ÔL,Šû74_˽+×e„ÃHÖÒØÇõí±¹=°“ÊØ¢ZƇÎ1yËøûLf‡Æ SÝó¾Ùãð›CdÐTpIr7¥”P܅ѯT
+“”äFö8£$Â$ïñÞEND§´Çª®ß¤Bä‹»Ò=!vu±,WØ䥒Мyy•ëxvâT[ÃØ—m±ñoÍýè“çæ+W*¶+÷²l6»º<–£Ö¨I_ÕŒ>¡J­BZgÍd‰³Cñ²$e´ã­Â‰4O~Ni–e‹¿ªíÐyÿü©:ÛÒ_`„ƒ{u|ÂËwͪzŸe¬Ü"
+…iNx®}༡:[ ã F:ö½Øºg‰ŽÕɼ›Ú7ð:ûÜ´#b™£§øÔœ|›åépl6c
+à~~8÷Ø–‡£³ãȇ¸âDkü€ìªeÌ!5¡&Šƒ#zh¾ŽQä„Ò¼ï•@óWï™Þ“˜ txÒ²8–Íþév×*ô“[t¥ÿÄ|—kbC€? ÃëÒùl„'ÁûüƒÃmЪSÊB)Úˆz(·å¾¨Š„Ô>"îÑüPέ[b}‹I”Ê>—Þ… Äz
+ˆ :æÍRF‘ªƒ+ƒU},r#Õtˆ=4aíÏUu€ø}*Ñ k?ûFƒ+=œ:mÝ ÈY²HÜËßl„`[&GqcµMÙ¢Õß‘”!ª92"³¸Ö‚}Íâ¨ÖËáI
+ÂÀ ;«®æcµ*=“èu:€Å£ÓòÑ}9–
+èI(©xsªUÌzŒ¨.ñ’2å‡)Óc×Ö^`¿#»lÌntfR¥<7Õ¶ŒÙAw­¯;–`Z©1Ù@æ¼oõ¸s Ü×Ãé.íÒ"ÀG÷&×?9¤b¬Å’CY@ïÃioŒ1 0ªtÏé™Æáa¦(”/98ZÁÎë™tBgÈ€—Ç­«òIZ!cF ïðñOåݾŠÍªR“L¶-WõCiÛÝØn¢ƒšbûäÙò±¯v…FÝ<z°Éí×îÓj_<ºÚžÀŸ</\g«*a’‡þcu\[tí')É#yÊ i`Ò"aHS&qâH'8àŸJHE|1„fDÇ!ÉŸ} ‰ÔmêDÿ4ÙBàƒ.G¡°YðÊ}èðÁ•Z|Àæ˜0Ûz‡(ˆ‡Xm'®HoëëðÝÛ «ìä‡/=£„
+ ÙZé>9/{8ÕÀ˜óS'ÄÀ(ïÞp üï–+ÑW(Ù¿X–±ÒzÖ|,öUa§8çjñO«îæä>/1…ÃÖ÷,ñu¹qUwžæ[Ö­,áX–S¦ÍsyWNä]Hü®¼è ¨p\žÁ2ãîtt_‹Õ
+GŽ`*ÏÌÎz¨¦ßýj§»TÁyŸ>qˆæ^Зq6LK3¬îÑdŸ0Ê8k¿VÛ;ÀŒçÒDÇ0v{|Ú•—xŒ1ÉU«7°¢
+ôž1~øp*ërïÃkôqk+í²CôrëvÉÁ}*ÆÁ«v»²ðu‡jSÕE×À¬¿p2u/~î‡ïßüðƒJqmýG\ÆŽgÕ‡$!5À+†cñ…qè·i‚.±ÔW´eaÝœêÕ@XÕ"˜__ºÇ´Y[ip
+`>ä?¿óy
+˜ ¹ ÿé¶lhäÛô¶—BNƒ€Ö²Q'N‹rŽë–é©7„–†ã ý
+J¯ ô
+J¿ P¢‚d¹î%âJPbŒªäeP
+fƒÒ¨Ã”<×3@)7
+­æӸǘ߳p üIƒCäp²ÇÔá+z§‚'a’ÍؾŠ-fiFÞví±XÐÄðŒÊ·
+ÚÌÛm³ÇÏñbvÔ~¨ÏvËõ¼El'uÝßñüP¦ÔF¦r'µqÛ†©}«Ð¨“:lÌNäõÉíoùž—'w.œá*áÖfFA¶þŒ±}£©­í®ìd‰0l=Ú·p,Ÿ·ttþmÙ•0ÍÃ×—XškErnž±th±4Ê|ÎÜãnCá=÷çÍ׃ˆ’ʉß׊ߘîö¥Û¾[ûo˜Tz†uÛàio<²þƒ°dyž9÷bŽn–Ø-w¦¿ŽOâÁ²žs9FÚÝÈéÝMÀ£Öpö8ÜÒ?Gg®)“†pÈA{ðÊ¢¯ßᕃ]]ºs×?ÖÅaÆ察šMôJ ïîZ]¼„{táÆ€;T¹ |éŽbEïä ¿º³%|ÃS×¾ÿý¸¶G˜Ð­Ùúªö´:U&[ü%|îƒl¿Æ³ñ±©V¡ßªtGi:'2Ý\vuµ,ü­?XúãQ©=5•YeI;{|)Ý‘0>¡aµwßìý¬݃À*¼#»@ uw±ôìÍN º[xgys#ãõÀºìFòB”Ë–Ëæô°öw²˜œœ%®ªû{-m‹r½(ꪰ§ì‚ƒ]Š'Wk¯]òÖtþ@kÊo³`Mg# ¼½‹^…e9䌦=Ÿ=ívå¾nË}Dx%
+×Ü< ¨èMJ  ˆ
++I„wÀÒŸÁä?KþšØÅäÑ6Ý$<VhìX'?Ýüøå‰0!0`šÌô%"Ð&!˜- 7Çe£óuÊ|±Ücÿ÷…ü¡üVbœå_dT!2¢ÀÁþE‡ŠŒkÀDØ×;U;Ò—i<o»ñ¶Ó¡dæ²4LfÌ@‹ÃL4' fT¦µÈo7Eµ½-6»uuW5§Ãk^Íǹ¹¹¥,,—«œ)䜳wX•Áz:ì8„2B:$Î`Õ\âÆe›åA†Ê©°—–ÒÈI9´eO1‡ëIÑ·EO ¤’”ŽJ¾©/y:i¼èÛ¦CBéh˜tÄE:b2 ‘Ž¥LÇjHÇzJÇŠLÇšNǦH¶ZÚÍŒ3ièøù¡QB0n9–\]á{zY²$Ç¥0JÉåçE㤢Š
+Ö=ÊÀjZ[Ô/tDÈwÌ|­D¯›»áK©87äög_—ãJüÏÎûagÐ ÅK:2ñlNÛö÷g\V›ò
+g{"
+“ ‡|XÁÛ´?ÞošÓ¾Ûá™z1Í¡†Íçp®ãž!çÆh#iÞâ#º1D—aŠu•)åD(´ ¤Óœf¦WÓÎþ¡"íÚ:iK( ×ÖØiTž<í:¥?faÂäDŽ±°Ëpˆõ’¨1×8YÔÝ_ùò$ä¥T\Ѐ=7Çãµ2}> éy_ý5µ;·Ti»M4‰šîʽ»Ü}_}ÂM
+¾gÇ’ `|V,á^h& 6`³ &ü‘KžçPiràÍd¸k¯PÊ'ß#Hòs —˜G“²K¬Q9
+3O–_æü¹íƒ{™Ö>{éÿ©„8—ùóqžky>λȈĹ‚,¬M!dÌ<çûæXàFãŒ@Æ©`W0>;Ða]¤\"ÿìuðvÍÀÍ!€éÄ…D¨KCeí¢xØrPÙo:òÑÿÉj¸¯–³ëXõEVÃ/ÏÞô¬­%¼–sÖA;‹FÒ7Ä5`“Â2DËiúv·¯Vv2ñPJ_Áßl?ÄM‹LÍñC†áœŸöüÔ–Crƒ *¨s¼iݤ¯[>ô¨FˆFhFH)þø¿ßãé”üÿ¾Çà áϦW
+*ôy¯îü#»À.LBæV&&N½\—›j‰?+C¤½«šºyèÊûb5ªÙž–ué~\‚\XH™/ÏÜ(09xÀ¬ â1¬‘d¸,w¾—öÖ3¡{0E„4¸Kéëa(T´“ð…± ÷Ìd9°Ç|NB®ap"R'Àºv£„ ¦?‰KP#’–R¨XÚxÑøʶ .WfÎ-™¶& ¶ô«3[‰·Â {òd2B©ÝC…
+ìøiŽ=±Pna“ÿ¥§1­§#µ´~Vé‘1#*k|¬ðˆ¾Gêžh;¦ì‘®GªŽhz¬è¡žãjŽkùE¸ ™±dW„噥¾Ldæ²ôeTn
+ÅŸ]fKz~S²C”X2
+endstream
+endobj
+1166 0 obj
+<<
+/Type /Page
+/Contents 1167 0 R
+/Resources 1165 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1129 0 R
+/Annots [ 1160 0 R 1161 0 R 1162 0 R 1163 0 R 1164 0 R ]
+>>
+endobj
+1160 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [175.733 685.124 190.398 696.845]
+/A << /S /GoTo /D (figure.caption.35) >>
+>>
+endobj
+1161 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [171.407 673.278 186.072 684.89]
+/A << /S /GoTo /D (table.17) >>
+>>
+endobj
+1162 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [493.65 673.278 520.967 684.89]
+/A << /S /GoTo /D (subsubsection.3.6.1) >>
+>>
+endobj
+1163 0 obj
+<<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [178.361 661.323 205.678 672.935]
+/A << /S /GoTo /D (subsubsection.3.6.2) >>
+>>
+endobj
+1164 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [302.127 545.312 347.596 556.923]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://www.awl.edu.pl/images/en/APP_6_C.pdf)>>
+>>
+endobj
+1168 0 obj
+<<
+/D [1166 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+401 0 obj
+<<
+/D [1166 0 R /XYZ 49.606 742.476 null]
+>>
+endobj
+405 0 obj
+<<
+/D [1166 0 R /XYZ 49.606 626.33 null]
+>>
+endobj
+1169 0 obj
+<<
+/D [1166 0 R /XYZ 49.606 529.237 null]
+>>
+endobj
+409 0 obj
+<<
+/D [1166 0 R /XYZ 49.606 393.309 null]
+>>
+endobj
+1170 0 obj
+<<
+/D [1166 0 R /XYZ 49.606 313.038 null]
+>>
+endobj
+1165 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F84 441 0 R /F93 449 0 R /F90 447 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1173 0 obj
+<<
+/Length 3036
+/Filter /FlateDecode
+>>
+stream
+xÚí\IÜ6¾÷¯Ð19á¾\ÌÈÍ°9>Tª«ÝÊÔbW—=æÏÏ#)JE©T–:ã¥Ã*=‘O$õ½•Mª÷©~»#Íõã…+©hE Å–°J†%«¶‡»·ïHuÏ~¯æÖTÿñ-· íúí«×w¯z<¦Ž‡4X5Å„TŒc£eÃã×7w¿üÓòÊb«˜ªÞ<TŒr̸¬´’Xr^½¹¯Þþtø´¿Ô¿6õñ—ûÝöô×ÏïÞü~÷7Ƀ÷0óC ÙÒÄkËY*¬%­´&Ø¿B+hõ[å›Þyæ¸;rø'±R–ix¯{ߥ˜s#e%0“ÔpxqGC ñ±º{¨îÆ #b÷x›4Œ¤Bç–qÓÅÁ$M[Ú°ÿ«øïèÿ[œná¹Â‚ñ
+Q€¿eÝ;ˆK°ž‰†oÿE \‘‹r\¸ÁJ‹+’ð&Û0iYDÄ 2@çkf‡@¯?ïÎ@ç sbnßl  ‰‰s€î0F°\ R&-+P(VL^)¦ZPVV´Uáñ÷Ö7{Žr({ÇÖ‹K !ëH Mä?”fÌ¿%þ†ùã¼ÿðùL_牙ð5†Ž¹°ðQ@dý—ѳÚø15?ÃzOQÞe/Øz!$è,“~qkm H£Ÿy¼Ùz½Ño0à1|Oiòäù,‰ÃfšÈ”Ô*V§d'‰±ó~ÈHÿòúiL tuHÕ„hîõù$GRêXŒSÚŽAég St÷ H:íÑ÷|µÌ†h©nPi#ÚßÊ5lÈ2.Á†Ø¨I''dé¸ é”qÁ„°ßl˜ ÈÉMÈîø¾>î&­QóG7Û€PïšéÜ ¤Ô_Jgš˜â°oÂЫ~‹%½Œþ¢ÁÅ1•b1D—r‰nŽQ×ç#AAb´ûÞCŒ‚w *UWÊhàª}¨wûûŸ‘"ì§ÍùRï÷»ó„{¯ |K{Ãhçb «ª¾À»·ð58…±ÅkÚ,þvf+Žr(í¹MpÛ¢Ø%o4ðÈ^òØÓùϯĻO4ª~Õ*J\­¢Äå%ž€« Ö€€
+ÿ<ƒÑÜïÇQJ'Åbþ0çÊ¡„ÀP 1S¡­Õ„:r̾u&„ƒÆwÊB¸MÒŠZÕ
+e°ø;!Ù8‰âŽ¾B?;€† Q¹åW
+ÈÍb;oí
+ȹß|¼Þ¦ÅøjÎÝ*äýõÓS½ŸH!ÐÉ–ŠÆ7ÅÎr3Ç ¡E·±ÙÈQ1Lî臎7û÷ *M-¡]?¤ÄnÎ]ò_š3.àºaa‹öÝ`Ö§°—r ^‚ÀüÚ¾:‡8Ú×Ý ¹ÃĸÌ ‡,7Ÿ§œ®A8»a|s‘Ìq¡òü´u;qðw\ÄÀÂu§Í^dHîv¿·‡ªÏ:Y:‚…uœnUL—þw¹nH¸¥‹­b#¿tÿkÕͧß
+X½ê^ÆÚui"JhnùEÜj¸ÒÅè_Ê%€|ˆ%û7 ŠJØW…+Xë7LØŸNÇ ð ÀëoÙp «§íËNé­›51íÒxaá!Ê«w’V(oóíì±~={6tFò[O¨î…x„Ìmâr¦Àž–„ôr>íwŸ!„8ÕMh±96•@ûOœ!â8^ž&$™Z¬»a³E™3ï#Îeðˆ¬"ºÅj¸è'ŧûÄwJhI×Ï]~Ÿ.Æ7P~oÄ¢ÒÉä3–B^å3%œ¿é1€èÓ_ÛÇÓþô¾ |O`[6—útœ
+oî¿øvyÓÞ#\f\±–Z\0³é¸ø²›/·
+$]J‘ñ)bÏ ¿yÃC{¨«×¶ðmMt6]šˆŒZO2<MŽè$-”ÍhÌ çò<dˆ·*1|ƒ¸í¸€ÿLíµÂi`)ŠŸC2J \*_-@ú³¯CÃwÞ}ØÔMå̇Íy*àa۫˜ŽunÀØŜÍ?ðÙ;–œÝ¶…#Í5mÖ+ðÈž£œAïô69x”šöê[òÙKúÇ ^ÿ€sæ˜p᱄kBBñÇÞc™ &´)h´ëg´&ÄhWw®oÂïöG¿)*µí7ÍŽïôŽÐì×8Âx=OeôûÃ;í2®©ÕÎŒÔãÓ¦îÊñÿ8m.ãê‘Z“y†ãŒŒ¸˜žÎªí¸ù#®{7ºñûôdoB|lÓ¦-õЗxâ1<lPoÝ.…´ÞáèÜuR8­û’]| 2ÁÉø¾Õà•j6úîøtšpÄ©rN¬z†Ê5ªÁ·ctv¶s˜™—ÜPˆ†kŠÍƤš?ù0h|óöJÛ NDæ Ë­·küQ-å÷TÀ&¯ÿQ“é*ñ.(wÁºVY<ÕïS[ÓÔ•’½~y8u¥0dVùZ[öƒÒŠ¡+Ô´–]¡ö
+‹í»°¯ø,ßKýÌ}q¬Ë‹¾³e©ÌŸ&ÁÓøC÷g±œï”KÁå¼9>}8/>½9. Öe4ìú %3+nŒ÷~€cﯳp ›u÷·%r#˜Uÿ•¢‘r0‚
+1ÎHˆórB8=!¼("I`|óZ+ÉåÂÛœ [qߺ¹^.»Ã‡Ë®ÙÅÞžëÃÔ¡D !ñúÒm\BT¾þ;Ã2¾…·ZcüÖG¸¾óÍî¿ô`ñ7#é9;9ë èÅ,B‹®¢qE(.òP4ž"L/.‘#ˆÍÿ
+endstream
+endobj
+1172 0 obj
+<<
+/Type /Page
+/Contents 1173 0 R
+/Resources 1171 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1129 0 R
+>>
+endobj
+1174 0 obj
+<<
+/D [1172 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1171 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F45 438 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1177 0 obj
+<<
+/Length 2957
+/Filter /FlateDecode
+>>
+stream
+xÚå[[oãº~ϯÐc(¹¼_úØâtÛ´hºéÓö<(¶sâ_²¶ÓEÐ?ß!)J”DÉR”-NQ »–ÆÔp8ó gF“âç‚ŸnHõùõ†Â')hA Å–°B†%+Vû›/?‘b ßýXÌ­)¾ù‘û‚[Š…vÏíŠÏ7w- SÇC*,(cB
+&±¥‹ßÝß|üƒå…ÅV1UÜ?Œr̸,´â0 HëâËíþewÙ~Ü—ÛÃÇoåesúðÓý7?Ü'Ó03_ÒQLü¬C-)Èc1WÊ1þZÀ¨O…zãyK`îÈá,‰ ¬
+kfJË þðBÁÖ.DkËÝ¿
+ŸËÕ/¡T(ÛýXê¡8$ÙWSTÖÉxI“à¨AéÊ¥M6_#3~îB†šª!3¢Ëh).©ù Ýd!™§^ž
+,å€)œ^®.HæòàÌÚ¬¹vGY(—-ô¶Æ€LWÊ^6‡ò°ÚŒ€’
+™Å~v›%¬Etb0ÀG†ÔœeV<’Õ»JœÙš?ãóñ>0’â"*áežg_-½šÛÝE±â3]Éúû+üÜzY“Q×&)-ŠŽº†Eã£.@PB(g%Ô³%J-:(@)BP>(±§üÊ?û
+ܧ
+6ƒ3T–›EˆÅ`ƒ=NŠe`kì”›°Af¬Ý¹Â
+ðnίçËf?EпöºímPäÖgÃa]Øî]ÇOu®•£)àW¥‚ú¹Aa ’¾ïŽ@=&¨7Õ*=Wƒº(«ý©mÅ+øUaºúnåßÇv†ôùä¦{ê+à¿à`òWá`BDŒÌmÆ«ý«YnÓ–°ió‚ÊÍ;Øy»®ç
+Õó°«0+ß± /z ¤´U‡Öä ;AE¼l÷Á¡ÜP”ûv-h-«AäšÂäRùÝóZG'Ábd“n¬0œf2C1Sf
+›Ó¾} ”öÜ-Œ„jtƳ€‘X.®K|g®ºú¶Ïp=˜DÙ#€‘Ö§Œ9À¬/#é„f˜TÜɈQk.¾;bÎíMh`sz ÜÖÆÌP[o(˜Å€€jA¯vÆ0)†×Øjpî¨1¿A]Ná=Û¼¹®HËgH;o‚ƒuàÍå@)ZÜýõSú_1D§ìˆ©¦¿ß–6ç×[„NÄëæA`"Fý/Ž<BÏ›òüòp~9=–«MU씻ǪnÙ”áb¿=Œ¼´aDbÁù Á'ƒôJ9“˜Uð”®›Nú3Gk¨;3¤F§ÀÂúZ‚`coò'LØrÁ„$ºp:¤Ö:”>‰äB:‚°šØxjzG•$\Å©nÓ‚~ŒVùÓSfØ>öÀB%d$çnY„]²‚]­pƒµR'ì¾”[wú«¥®:`‰ƒY U”µ`}smûkpÝá‘™¨#N¶«v®_Zg¹˜Ê¹¥u-3‹Ý6¥ ç’”4è– Žs­#`r÷‹K°2|Ð/ko¬¨ÃIë3V3DžêÔ*XÈÔüžo¡Ž«æ¦+1Ó_{aJu•Œ‰— ¥n¡Mh‘{BŠ" 44¾­úºÞòª9:\³öòò‹ùØñÓ%p6\%¶Íý2Òh¦ÑF©<^žŸw¯áG åî¡<@Rq³sœ IMñ´ß‡º_£hƈ€ñmM]âŠb¸3–™ƒ„ÁÂÌ:èëwÔF­µÓo>`XsT¸&95Ð| ¯4ÔþpÝøj¬Ð!MÜ pÈ*Q¦„wœÿ+é‡_
+endstream
+endobj
+1176 0 obj
+<<
+/Type /Page
+/Contents 1177 0 R
+/Resources 1175 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1180 0 R
+>>
+endobj
+1178 0 obj
+<<
+/D [1176 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+413 0 obj
+<<
+/D [1176 0 R /XYZ 49.606 538.283 null]
+>>
+endobj
+1179 0 obj
+<<
+/D [1176 0 R /XYZ 49.606 489.121 null]
+>>
+endobj
+1175 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F84 441 0 R /F45 438 0 R /F90 447 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1183 0 obj
+<<
+/Length 1153
+/Filter /FlateDecode
+>>
+stream
+xÚµ—Koã6€ïù
+C¬U½m£ð¡-²E‹nÂrÈæ@Ëc‰DiIʱ×ÈïТ$Ó‘lw»½Hâˆ~óàt¬Är¬_¯ývñéX®¡ES+˜Ú‘Yq~õåJÉGuGIŽÇŒšA£nÔÏW?|œâßÀöƒÈ³V­êÐ÷m׬‡¥õtÜ=?üÞj´žF®ã8·÷’—ãg­Ïµ§a¸×çX#/²ÇÓšl·W×Ç»(¸å“w#?˜ÜþR¬ôûVhOÇãH«wQýxZ«ÿìúL©(IBn3ØA^Êí›R¥úFöØ‹º® H(ÛÅÀ$p£OxÜGÒ—¯%eÅáí‰CùG‘ãÝjñs3~Œãýn|\|I‘Pwÿì„Ο÷øtë6‘üF=âŠs`Zª ©¿$l´Œp 6+¸Lë6!•¾‘íÚá‡ZŒ_Jªtº?× ÷ø=á^á
+s¨‡l~Î]H³¦rÛrUì…¯ìK
+¿1ù‘íùN®È –œÆºþ)Ã
+endstream
+endobj
+1182 0 obj
+<<
+/Type /Page
+/Contents 1183 0 R
+/Resources 1181 0 R
+/MediaBox [0 0 595.276 841.89]
+/Rotate 90
+/Parent 1180 0 R
+>>
+endobj
+1184 0 obj
+<<
+/D [1182 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+417 0 obj
+<<
+/D [1182 0 R /XYZ 50.464 49.606 null]
+>>
+endobj
+421 0 obj
+<<
+/D [1182 0 R /XYZ 65.245 4130.304 null]
+>>
+endobj
+1181 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1191 0 obj
+<<
+/Length 8986
+/Filter /FlateDecode
+>>
+stream
+xÚÍ]K³Þ¸qÝëW|KiAšxÙÍø•¤œ‡}'•…“…¢ÑŒTöÕØ’œTªòãÓ tl¸w¤[™XÒù€n Iv€‡ärûñ¶Ü~ûb©þüö»¿øMXnBÌÁyû³]ìÍy1›ÛwßßþøRÏòÕ~÷¹Óí“X–奈èÚÝÏÁZ½ö³ê¦gÿ{úœ›/Œºp›HÃzýñý‡·¯&¥ýË_½ÿï÷ŸÞÿôaû×,fù·»oàQ ä×ß½ð0|sröÊÁv6ÖßÞÜ¿øë Úýö¶6~±Ì*xsûŸ[„·ÿROáÜ,¬¹MRÏ0éØUÌðÓþÿôïoîo¥Ù¿¾˜c·š"î_8'ׄeIà/þá^Ü~õÓ‹ßÇÿÃ!Li 8øõ÷õH¥”³Q0R3m4ÐìI3+Øä$t*ZYO¯ofÎÙxtR«N-Âv|öà õ<dh¨f¿ÀÀfáey´ svÊ‚ol–µpx¬¡#„b™H˜£
+vküËoþé_·¦ÿúëþÕï~ýÝ¿üózÃγ¢ñM‘ËËáÝ,·?Õÿ’K<“­7‡ïo÷Só1Q[¬S·?GPÎÎX°.Ý„ÐnCõ¼+ad³Τ–Rkc"¨½5zC“#%à$Ð;¸ÌÆ{-‹¦"xŽ…린
+GÜÙ8(â_„0;»@ØÉPßÝ^|›&ž#·º×7ég]!6=“¦ÓÓªˆñnhBK×QpÜ´ò^‘(‹à t:8:tì윷¡š¥Ÿ…ð[DS@bSi­Uì’'fôlD¯jh²´¨£* àŠ•î*Ê›w;ådˆ‹2ýNŸÚ‚Aï¼VÐõ#Xúãí?Wßß^xAò0·ÉºYIÙçþÕqšÊlsfp’†&œmlQá:ܧ`åÿè,žÏ ÿýöâëã¾iì®5ÒƘîRžÛ¬ëcá × —úý5jÖ4¸˜Ê}Î6£ÊªQ Ji8Ã' ÅSÚ%l!FX
+gùzŽC‰äÐ",Àd¡éRÒàЩ•uË,al§Zrè?üøy&üÙÃØf¸{és+N¨ {Ô0hã0t`YÒ„ª^´ˆIX:Õwª WµëpN;žÕ8·jÇ9¹oZ»k¶1ªœŸáÔÇ„2k˜R â§W „ëP LI±àË— „Â{1’BÌ^
++yˆT(
+§(XwmU£Ý œ¯°rt<TtFý,
+ˆØ} ÃÊYCöQq r‰wù'‹r kKÀì쉔<c1ѯ§¦ƒ°Ñ¦q3^©Â"BÉ÷Úá0/Vƒ7bÑB„´1–:ÏØÚ=3Ãt:É$7ó7[Y&³"1ùá,‡m}ž }î†ú³gò<œ<wC=¹SÅÛ¥‘~ŒåNmáŠ5þ"w¦VÉuŸúâÞÇ™;µˆ9ËåNíÝ쥾ȩU‘;·ÑìâåñtÉÓÀe ˜<ó`ùä™Â6š<ãàà
+Ž;-@à 2zÍd×°Ó³‹
+ë}É 4›ØoV›·’çóÞ¶d  Ž8ï7Ç Je\RYÀ<a1O–Z¸Êaà’¾´nÄZh'®IÄS & /›·à
+ ëºQó²>míR›2kU—SÕ¶¼š¶!ãˆ[{lq xCXàŠtËTÐ7¬ÛúÊÄõŸ¨öFVC™¶~›Øß¿}ýý_ÿöúãç·?­ie‰ ÅÁ8ÖŸ¿}ýùóë?ïÚ0:ñd ýÛnÛ”pFË"Ðj€®.Ç+´¸eT|™õî×W)Ó¡•EžÏð¶,‚>Š$‚]º³ˆXì,cÍ%S²ÔŸR²ïÑÄ’}÷ä±Ä@ËÑ#œßÖ¦§&µªRL}O¸jU_cûˆ¯ó‹Ô›bÍGYŸ}ì-w7o7\'[·Ü·V©Ñ–b~¿q’_þô¿¯„V/çãÍï²W=Ñ}ü8üÇÞü³±A†òʼ†é¥)¥˜µ Z4áêŠå:´ʳaºíФBút' '¬ò ’J²ÔŸT²ïᤒ,õ$•x'B3šT$Ìs]´&•Ôê<©Ô­ê½©}Ä—IEJï®% W½-O’Jjõ°¤R÷:Ò·ñ&•¸G켊R1zm^ÃôÚTˆ’Sqó¨W—,ס•TžÕÓ]«ì„&Ò§;©¨%nšë'H*ÉRRɾ‡“J²Ô“TÔú`ƒM*ÊEA›¾H*©ÕyR©[Õ›6ûˆ/“Šªê­K**ž‰Á_$•ÔêaI¥îUOtÿhRQ>ʇl¨Ö×0½6µÊÝâ›puÉrZIåYpK*Ä M*¤OwRÑ‹‚óÙ=ARI–ú“Jö=œT’¥ž¤Ûª¸nK*Xï©%•Ôê<©Ô­êÊ}Ä—IEÃE¹Ä•ËHRÑAÏA\䔽›RâFÊÛÿ{˜dÙ¥žã>ôÑ|B¶ãbjNÖ›M|}¸Î‰jo³g+õž'v8ÑØ,s°1 0!'*øË:Ü@­·Æ„ˆj„X.ïKXÌVF%†™ãõî#´Ì"xe÷g¼ò?ßÀ™Vgmâ<G7pªF¢OŒZ˜D¼M¹»Nÿ„žL#ÆVÃí»¦¥ŠÂ·×Û´q3D˜¡}Zb¢c_XD6'ôC4q½3Ÿ¼ ‹Þ†SØZy¾5¼·éÚF{‡­a2䋽aUlÙÒÜÀæðâÖ ¥ÓÍa8­„Oÿ°Äw¯„µ/_øSù”x#;÷šqøÌ^3‰Ðèfs‘ ¯á"âfk¯s$×å\ˆø܆Zo??¶ìÝ5ÜYælÏsþ‡c£ zë
+>Š
+eEÍ8J¦@…Ðû0ÊÞ{¨Ðzšh;L…”3³; §\(µê"Cuヲgù5ÊÒž!6„Úž36”U:=lè©6‡2r§Žž„ å òl(Åz˜ IMY“;pZB‰§‰W¥•íÒ~ŠMPÛâÜ/ðøòÔM¯Û¶Ë¶ô³PFúMu£å")øf{œÖ¬r„ãsª6,ëвÕ$·ë ÜÀÉbŒº«">÷D9‚ ®#Àá’Ædbh•‰Â¦(Œ“
+Ž¸‰4­j8´èïî;ÿ³Ðpe”3ÖpœE\4ßž=¦ü•ú~›ƒûij˜º»u©ÄT|?ĘJ M®ÏÈÇ7øí yF•:ƒk*ªn£6j·â›Ïâ;'âk"_u,oÄb‚b™†E–ž¢p,"¾ÍÍ(ùQ?{å-x4¿̈úMЛ8æ<À„’i$sÌ|·³Ï]>= g*ÐÙFÓ$!¨°ò•ŠÝ‰×Ä´šcãv½rN“¤&S,vÇ$`L#Æïõ—»5qaœ˜Ã]ÁyšÌù3ñgÚÄœ“sêNüAŸ˜Ócb΢‰?ß&æÌœ˜xâOõwÍ`Ý]¨;Õ2ÇNƒêN쬄=Uw¦6=êNbï¨îÄ!_©;!Áª1u§q~Žzå3u§ñÛWZžœ†ýîýï>oJ÷o>¾þåýOûøJÊ—o¿¯ÙY~·À^ióò훟>|xýþÓ§×Þìo8I”Ž‘€’9rP ã°”–Õk˜ÔUªÐcѺÜ;t‹?¿ò ²Oü©eë®9P~LœäóYÌúp,lü•5µª³«¸™`õQÔÙÀ³fd©Ë‰ØSÇoY£j±' ½øPê:y0Y¨ÄžFÍBjé©°“ÃÊþ£/Ôoò`a
+N+úg˜øBý& –žœ'‹‘þξˆ‚“ÊîNžˆ°“ÅH÷Gˆ=Gy>Ê-Ïè~Ë»ŽÈ{
+çÙPÔsŒ³d©ç)iI­ºXKݸ%õ¼f.Yê©×w¤j=c]×AŸk=#y‘vßC’=Ûù¾gÈ‹Ÿ×Àó{HN-»i=Í×z’(°ZO õ¸Ø³(½8ÌB€Ç¢Ue:ôË<¿ú8Oü­eì®=V~T¬¸ó™LýxL(§éÁ)©)<5ðŠì°]Nd”ìx*jT©Éƒ¤ÔQ<WUªÔdÁÒÁÑ*5y°°€8º#JM,,P<»#JM,, Žì†(5Y° <ÏüŠ(5y°°€8q‡JM,-<»#
+N| õAaå0õÉÂÊ~êƒÞG©OvÞA}PÔ9F}’¨ó”ù캈OÕ¶%ê¼ä=(ê„hˆ~¬ø(ꌖç¢ÎmÓÆžóÙÅ{ô%ï >ôˆ:óþÚ¦¨“Dub¨ÇEE-îÀ±|B;­Š*Ó¡_ÎùÕÇyrâo-cwí±ò£bEœÏdêÇcBùMNùMá©W¼‡íÒ–oRÚCáTШ"“I•£x.ªT‘É‚¥‚£»¬Éd±¢†ÑQd²`a€âÙQdò`aqdXD‘É‚i¢xfXD‘Ƀ…ĉ;Td²`iàÙQjòàc(
+(‡)OPöSô>Jy²óʃâÍ1Ê“Å›§œ'µê"=uã–xó’õ xs„õdñæ)ëI­ºXÏSíödÖãžü3lMñfƒõdñæ(ë¡bÌ¢wàX<©“G«’Êtè‘mR! Å¡ð)o\)ÛT.~[TšÉ„•¢Í„Rf6IAªÎ)p kw© Õlj8êÞÞw¨Òkæ†džh™üQ­IãÒ©ÖνY/ÙŸ{ÑûhîÍÎ;r/j5ÇroÖjžæÞÔª+÷Ö[ZÍËÜ‹ZÍ‘Ü›´š§©woôuÖ›ZÍ'I½i‚|æÍZÍÑÌKqñ“ØU­”ká&Ìð7_KôX4Û8÷Rû§’k:˜™_¼­äšâ(âCe¨†´N{åmJå–rÍ Oœµ‰ó\É5
+¨Åb“kúÇË5qžœ\C9,פeõ¦e•Êÿx¸.·LnÅæ×çA´I~kY»k¶1,N¶ù\¦~<&°RÑñ«¥÷=°;
+J^Ú³™ãÐr—å&,U„Pê Ü„jâŒqºiò`²P)7½˜u UirXÙaô…bL, ŽÎˆ“ ÏîPŽÉbEÿ _(ÆdÁÒ
+2a¥¸3¡T¯™MRjy
+\Âb:@-#F!m*U½4a•¼›’©¢IfþG}' M§¾s4 g…ewFßÃI8;ïI¨ïK¨ï<KÂY²Ù“„ëÆ-}çeF}çHÎúγœä_mú%5ž|ÎÏÑL$tr‰_uÛ‹ó;péØge-ëca´rPûå­üÜyÐ$Ò§†¹»+9"aÆ>lŒ&:ôq'm}2êñ‰‰Žûø 83¬§RñSqê\Oµ·éÒS¡½£ž
+‡|¡§’@Ê—0øacWµ¶ç66r]ú>ý«ï]Ôá Ǫï ÇdŒ^Š„jT/U\õ—pyÑSm ²×¥W2õ<†zPMÑ[öîšnŒÑM=§ùŽ€âY Eã=¯QŒ‡³ã°R‡¶hJ.ñ^û"t%šŠ·¢žµÐG5Àd¡MÅpyáÑG±PÑaô”UP °0@ðä EP<FûS<;Ë*(+ú#œ]e Ý ž\¡ŠÇH
+ï®PÅB´3“Fñéþ±Ô(AÁR?'ÉÞ‡™IöÞEPP.5ÆPP.uFQ²ª‡£Ô[r©kž’äR±úÆûîƒr))Ö=§s¹P÷Å>[³;Ò?ÿþÎ/“J‘HK¥Êª{u²Ð²ðx]?Ù.Ýj©ç2Ú£`ŠþÚ2x×sklœdêyáxŒ»¹†)½¡Žx¸b=\‡¶^ª`=žª‘@5@Rû
+|¯²DÅcE‚£³,€j€…‚'o¨â1ÚŸâÙÊŸ`aà‰ç ú‰Ç(÷¡x¦Y(~j€…‚goYûÄcE‚gg(‰j€á@¨Uæ@Y«Ôϲ÷q”Luq TJq ¬”:£@IýÔÀª¶-¥Ô%ÊJ©X–ýcßô‹J)Èi¶õ¦ß,"ïp~Ù7è/¨’Â(p*)êa•TY‡¯ñ¢l2¯Ë)Û¥[(õ\F{ÔJÑ_[ïÚcnSK=¯ ¡:×0¥:ÔW ˆëДJˆÂ©ÄõS$u¯À÷*KÄO<Vô'8:Kê'+ú#œ\¡ô‰ÇhwŠgW¨|j€…‚'ª…Â'£ä‰â™i¡î©ž½eÙý ž¡ª>†ü Li˜üd™R?ùÉÞÇÉO2ÕE~P$5F~P$uÆ~²î©‡þÔ["©Kþ“ER±(‡íMN#"©Xù¼IÅ i¾ HJ}±M œc'’"ÑI•…ø/êf!‡âñºž²]ztR1ã‚õ “Ö¸¸°¾4ÕGAÏ2–,”J,•R¦ê§lµ
+à |³Ÿ@‹Ùn¼`c7+­ÒŸd•€io¶@dÖÄJî™NVãÑU¾ÁŽ½Ùfœ›ZÒI%‹\
+á8E|Ž:Il÷ow›Ùížòö÷_½ÿï÷Ÿ`LûÍë»ýÃ>oÞ~¿ýþÃúÏŸî×õͧ?îûÃo_Üþ¸¶ú÷ØèýŸÞÿåí÷ï_ïM·à¦?·¬ôº?¨äþšÿ¹Ý ç4Aì£îSÅ]ëöûf‹)úÂ"ìÿ€é
+endstream
+endobj
+1190 0 obj
+<<
+/Type /Page
+/Contents 1191 0 R
+/Resources 1189 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1180 0 R
+/Group 1186 0 R
+/Annots [ 1188 0 R ]
+>>
+endobj
+1185 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Width 772
+/Height 900
+/BitsPerComponent 8
+/ColorSpace /DeviceRGB
+/SMask 1193 0 R
+/Length 504259
+/Filter /FlateDecode
+>>
+stream
+xÚì‡[SiÚÿOrB ^ÒC¨`Ç2ŽÎÎØÅ‚Ò‘:$„.vIBï bAé*DÁ
+‚ݱ:ã(
+–wv¯ë÷ø;qöÝ™}³³SîÏõ,ƒ“œsrå³Ïó|ïA
+ ÷«”j¹<cÔ…âãS#n_¹g
+ož×XIêááá—/_žïkjj.*:¤Ræg$¨?¦ì££ÓÃe V
+EòèÆ¡˜˜ä°ð+ç.Á=
+´Q×IÑxÒ…¦Rç"ˆåëc‡»{[«ŸÝ.?àÎ Zul_âþóÃuO
+âeŠÎ£Óé¡3ÆtÈN‹ÆÓ¦ñôQ'#T$О­Á'ŒGõtô>\›—S¦VªÆSö¸…I UáF
+î%
+
+ß5ió¬6£ˆ+óÖG6Îv ΋;¾]VÂG¿A#Ê7º´/èLƒ sMº¨+iGS©ü#êãšzþdÊþzÿÕ±^ö{ð”}ÒxÊ>Uuí|ÜW
+UÕã úÓ×®¾|ùR³Á1Ïáf(o’1©N,t:±ezYçl¸æJW_só­ü݇<÷-äë ž¤‘ƒ…¬]» 6"¼4Qv,-&מú5^‘ò¥m±muôŠEuÑ¥-&Û–ÑÐYV(÷Æ%Uzóæ vfÎ_njj.,:¤ÊÌÛ–˜5ÞË>=**=Rqï*ô²
+¾·ù ÚRcÊW:ˆ§ïʤÖæ[ }ª¤2éj…#}Õ¿!rh![æÙxû®K­S%•Ï±ö·1Šâ âfZZRçSCíOK[3¨N›—DjêÕ½{÷îõë×·¯ßlkë$Rö%û¶)Š”Q’ËS¥‘­§Zà®
+Õyž¹ÆRö˜vßûö.ž²?€§ì'ö²Ç“e¡ÒúŠ¸-
+©_oþ"V*=œ"¯Ú[ ¦.£ÓMS©øž%:mѤ•2¼—=•çòUM‘‘‘/^ œ»|âÄÉÂÂJµ2/E®ú˜²ŽNP<yòîR
+òÉô‡këê:::¯^ìþü¹f‹KÈ9bE3©’)è4tƒ*1¡JŒÐ9tÚ’©Ôtd›²lš±ç@g__[ß¡C§3äû¿væS¾ÒÃ'…ˆ½‚l¥"–ÈJ]ÜpH)ú%áú +d•PÏ[ Œäpv
+©\îvg‡?tº¡×B®oÄJy\܉=Šý¾«Ó(˰Ǥ#kôhKè´E“zsYn¦ì1áüî»ïÎuôV«/ȯP*Õ
+ùÇ^ö©aaªDHÙ
+b1â‹d<aO àp2¸¼¡c¸¯{TˆßžDyMöžê•³¤lÊWÄψòµ.íKuòÔ>—E;Òçhêä|ìeßqöСڼÜò}{•rÙα²0iñž"¸i
+t6òp/ZmIñÐFBÉD˜™#k0)2À§È|YÀgóElÊ
+g/fA…­Ýv.7lNWÃ&‰[¾Š“nÍÊÙ~8gwÝbQ ºLÙbLùJöÅÏê!Õi¡Í*M¢Ÿ~ú Ó¡ooß!RöÕ¹Y¥Ê]Ÿô²O ?yäܺ
+Y+Á\H(çóÓ9‚x{{9éBîL?W“0ÑÔXì{‘P¼e{†¬4KÙœµýð,ÇW–¿¶‚AùZŸr!‹Cê ® ”CêÊÝŸ}PSçjxxxhhèêåææÖâ’ÃjeᎤ±²Ô˜˜4iìÍ~HÙ
+‡ÃFêоëÐ1sÂ>juÑàÙîÅwß}×ÛÙ[UUŸŸW±w2A¾›t¡¤Ñ”}&ÜÒ
+›Çô³2Œ2FV/vRF#*ß’j{©ó’¦ÎêÈÈÈ?þx¥÷rcãÉââJUfnÚ„^öéQQÛÂå÷®Ýƒ»
+“'¹9V²#¿§¸¹*=8¡®ì@Ö:LˆzÔ˜š!«-¡¾—/å ’gØÚ°äLãD†‘‚ÅL¶b%Ì6 âYŹ‰B¼7¤íVP);¶EfÏ·òÆ|É‘¾Þˆò.íKmÚR}túÄ”½kGÕ|/û‹§Ïö²W}ÚË>*j{T2¤ì
+E‘|‘l™¯)3ÙØ(,&~7“¾•Ì]àï¹]™ˆ§ì#·d,dz™Él©+M)‹ˆ2ÚóõÚ¨«1joˆÚsi žá·oß>~ü¸·£÷ÈѺ‚üò½{”rÙÇ”½"4zÙ
+OÐgÇ*Ž­iþ%è9ÔyZ´e“‚cÔ¹L£$63V`ëè(=V\700ÐÓ|1'«%2`÷\g)_ ‹E‰<Þ¶¦>ÚÞø¢Uи ±/ÝxÌ…$tÏ)úñÚ:ñÚZ1SQ;Š‡-uƒ®V”Ž®L@÷f'Ng³­ln—ŸDÚÁ科Շ°ÁædpI\A"—‡GïÄÛœ…»<Øa‹„‘îžÚj3|û‚ø²µlªÇLS.7Í…lÍŒwÔóÂwnÆ›˜¤¸:4ÇÒ˪”¸ˆýÙ)e¹;ºÚlµÐ 1AÖèSVéÒ¾œ”¯Õ!ªSŒWª¦ÎöÛ·oñ”ý൶–öÒÒ£YʢݩêÄÄÑ^ö)±±)‘ —{.À
+ÙQç0ŒMM’g› Ù郃ƒ}m—óóZv%V|áÁEs8rGÇD(ÎÑ8ÄžºÞYIŠ⫃lÅœ‡NÇmÇH?–®'£iÅÙQ?v¢7Bü˜h
+mÑ$²Egc"4Õ$q¦i‡+÷Ë<s¹¸°U^ºñK9®+ÄŽ““\,Nà Ãyú[m(Lăt!"çiŽzëëËôõåØÐÒŽ3Ð
+›1#uHO+\GWæD÷d2’ø̨™&Áöör6;ŽÍŽw`Ë°ï­­ÓÄS㦛†aOF85ÎÚ*ÝÎ./ˆä
+e3œ›8¡³gì]à ›ÎòæR–³ˆVæÈZŽÖ&7Ë
+âÅDç ót>[)Æ5Õñùóçš:ó˜Ðþøãý½—O½ìeª±²èèôù+wà
+3+g³ÈYŒ€¹v^[—ÅÆÅ7f%•ÇúïP–"ˆ1åk-Ú2êFCgMr!mÔÕž*ÔàùÇ´öÙ³gOŸ«©m,ȯP)³²}£‡Š4©t§l'¤ì
+xƒ
+Ãu"¡oBY¢7aKùÄJŒ¦¨ýRñfM]ŽÑ”ý­Ûm]åådzե™;Ôã½ì‰æ­‘ GOÂÛ
+ÑàƒŽ¬e îcE>6é £.fTû¿šº(˜ë¾~ýúÆàõ¶V<e¯VíIS))ãí9R¥Q½—àÍ
+3Â÷ ^éº\×$ݲãoNÓA3î,¿y,;ËT6'–/Œ‹åÄvå<^:—i’½½û§¹S]!&Ìd3™iœ„y‹ÝSW7þŸÍöèéɵu>þЎꡃ³)k¬)ì(ëèZäÚ¹XfE11ˆÃDˆÉÀ÷ aVcmÆãÇðùé“:wHœä®6\­–ÈJÌjL‘M|º·Ä>Œ+ˆa‚=7SP#ÄÏ
+Ç~NæÑìõð}ÔÆ„™°’%ŒP³./–ËKÝÅ=a`’&ÆÍfú:à a«ÌuöÔuÎF|a<iψaèJµ‘
+²Á‡79l¨Ë ""mO¨Œ Qòõ%Æ¡sl|ít½ŒˆSgBu&]h
+U Kã¢öv(Oƒ×ˆLÙ_8}¾¶¶1?¿\¥ÌJëeŸ¤P¤†…íŠË€”=
+ƒ##îUìôHwµ ÀNÎ\kL“–èÒ¾ÔGç“.¤:1PWÆáÒœ5u™Èæ­=êiï9r´.?ïeŸ ß=®CÉ¡aYÉJxû
+™kêÍŸ²Õžîo¨9%þbC['ÞT'¬ëdéBË]‚õ½˜Æ
+Ì‚f1ˆ)©hž(†/HrÆ'vnAdˆL$Jbs¶‘ ^9¼T¾@6“áknÀ\ˆL!ˆ?öl‰¯“EhL‡<—qý·nÜ›•\žµç¤Ÿ[˜3?D¢³Ó¤)´E&¨Óx­!Êž‚ŠŒ©öSQÛÔ€=šºpØÀŒèÆ•«m­í%ÅxÊ~W²J¡HmÞ—•ôàú=xC
+²Þ•$‹Ú¯RÎÞyl¡cˆ³¾—)²šAYF§-6@§MìS†¹ê`‰²;ëZ5u톇‡É”}SsKaa¥J™Ÿ‘ð±—}ZLLš4úþ hÞ
+
+R%NIN™È1Ò™4ÇÆÇÝ|Ël¦wè¦ì™cNHêÐ<¶¿H!p”99ÉœÒÿ‰íqï’Høüt.?…'Œårcœ¦FÍb,`úÚX§q¸q®ÜÁ8ÒŽ²Ž((äÿK\f”U›æFål¯T*OïK,v³ôåR¿ÁÜÏœ:×
+óN¦FªÖ~)wµ
+žÃ
+`‡;êyYéiKm¨›l)Æx)ÌmV0B‚Ɔ?2:ÓâKLa#
+3¥ŠYT¼¯èDÂ>ÁćCYf¯°T6ˆ‰Ð™¾¢ìú¸Èâs¤º®¿­Öf;êzk|þ›H}Ä*²S-ü?GûÞYoŠ¬5Ç·"¯$·"›#kXÈFì÷éH6bˆø£ˆtb'Vìç¶Ô ú:ÑSuƒÅz[xÁÓŒƒÜͽÝüE"©P³fN$ùüÇ]èå‹—Ù!ëÙ¡á®ñ\$Jær3xü$ž(žÍK°µÛfk‹·N›Å —öX†2–a<ö ÞÚÞ8‘¯ëeG]GèYÐgëzÿtLEVÎ2Ýœ¥V*;0
+\™Ê¥¬¤#›µF¨;¦CŸ÷²×G%|Ú,M]Êñ^ög;GSöj¥:A¾kB Æȼ]eð
+²•‰àëJˆŸ6bIÙ`Oõ°¦m1Ö•Òuñ*ˆúZá ÄG ¶@V1‘uÄ#l0>y4]Ä*sdöË d3 g"޶̋ÌPŽö–ñµžW¯^»P‚ßöY&¾ ̼æMõw± ··UØؤ`æ3qØY¦Šˆ!²=ƒ‘Ä2ŒÒ·-ÌôôeÚ:xukc\x"Ç–É‚ˆg@$à‚þ?{çáÞÄ•¶ý‘F]–¥ÉÝê3£nŠ1` ¤’J³q·$ËÝ–mÉ*–åŠȦjH ¡‡ÐK$B i›M²ì&’@’w“/»B¾33–¦lŠö}·Ì}‹KØF–ÎH:?Îyîç–@eàQeBE8<×,ªÊ“WÑÕMífªT)ÇÜQ?¯{¾@ÈÎ¥‹÷M#êŒÂr%ë1TD÷£–Ããålk<IÙ¶Â<W_E@¾ÿÁáCGׯߺdhmdþp0Øs³Žº¥}ÿÎýÌÛ#FŒý ‚К•[†"äáØÊåtOÅ綾²ãàÁCïœ8óùçŸ'vG°„šm£»ßÈضä¸þŠiìÉ
+„Ö¿ðÂö×^{íä‘SŸ~ú)½Ê'ð×8Eðxz–ÃÖ$*Z2ÑßÇ#{ :2¡'»îÿðµÝg#¡õOæ5ŒÏM#+ˆZ9PS*I…J¸TΫÏÖšE•JiûD¤&G]O˜Üz"L˜üz} _áÂ’jE|à
+.Ô˜•G›ì¿†…néGA5鬙ñÏe õ6.ò=B¡_+¬Î’´Êd$å"uSQG^J`¡q)-ˆcŠ¢6UÁ!”l‹”ÔLí"Q€îèÈãz²à25»PÍ*T³‹”pI&×i
+ËQ¤+]ÑeJóþÑé|:½ÃIhÑhʬ¾¹Ë€¶RµCd—!ªŽº’Â!½&‘ÜÃ4Än0¶™LA‹9Vô 8
+X °ÚE ­Æ @ =áà AÌÀM>̾âÅ°v
+||¾O!rÄ®ÇÆ7ºk†Vô¿¸xñ±ÊÇüz¼Û¤m1 n={*íÝÃÂhë¡$Ø,…Õc¥ ˲¿víé²ÿä“c‡OlÚ´mùÒõC ‡ofÙûýÝÍ/,Ýȼ1bĈÑÿ¾¾üòË¥ÃHŠ G3è_ܶ}ÇáÃG.ž9wõêÕÄîmß°;ƒmŠ·r+`[„ò)}e÷É7^8°ÿ£õkvù·”Îé5‹Êq±K.gÈC€²³úˆt}Ƥ×ôz¯R5Ã<YY}ºÌp>┣aB\,hÏf—Å|X£üò¿²vú–1%«bÔóŠepÄKÏ-&ÉD~@&àÁOCíÖAýN¦Ò›Í!z]„±paöÆ6‚h—Ý
+ÛÙM€*fÝÖ;è7³
+‰?]Ø(âµf²J¢¥Kn¡ß^;­!ÓNG+¾×bLvòÚœdIÛ ÜèµY»âàçÒoí¢FØfë±Zú­–Á¸Z ÑÃjõSÔ‹þuŒMu«QŠ,`•KÄ>‘(@whOœGðiâBRn£YX®@ä”ÕVÎïó½¸xÑÁ¥ý/N´¶ŒžIŠº¤3-ÚÜIÀy€dTªéYlâô¡Ó‰z|ÿý÷ׯ_¿øÖ;¯í;°æY2˾?Îeß×ÖÖÛÜñÇ‹ŒËž#FŒýoè¥öÐú%Ck(Úðâæíûöí{ó(é ÿöÛo›'NÀÓE·å®r93¨!2,Œ`ÍXØ·úâÙóÇöžYÚ½¾¥lþ8y¥DàI4’F9Ú•‹Ôè2»4šNª((œÝ![ZÛTÄ‘¢ fÀ¢Ïåu()ã)¤=¿îNã×úè«!ÈÅ…ªæLl»ýÙÑåå·KË­T ]™ÇhpçŒ ÄYà» äјÇ`j5Z £ÛŠ5 Í£Û`rÍ`´šÍíV›ßfó[­>³ /nòÆvBß:!¥‘L1CÃYÒ6½Ð)ô©#™ÛÀ‚ÜÉP)rr£1"`6„Ÿ6©—·OÏ.w”ô/ìÜ84tìéàª1?ap ö q ×tH‹E¸ªØ¦R1˜–«W¯ž;qfç®WW¯Ú4YDnâP‹{ÀÝùÝwß1ïPFŒ1bôOÕþ]dž"K)ãØHðê¦MÛ_}õÕ“GO}òÉ'
+„„œSX¦B3 ìÇtܲº9dýۇϬxj³»´¿ ³BÌkTÃçû”ÂZE²O#÷MQ¸ôzVÀ°v­vÄœ®Ì虢¨‹6 h—ET)ø•ìš
+‹¨jZJ•Éì'7‚Œäé˜ÍÖCýMóÄ©F½©Hg†Ô›!ó*¤~JE‚jÄ3©›"sNC)Ž©©vr(Ó{âР^9Y\Ýi•§‰šE¢
+Bd{Fv)l‹M>Z9tsÒa@e5
+YhR{¿º¢ÕõôÒðúHäxoKÄh
+ônâÖ±Ž¿L±Œ\8OMàëÌá_|qúØ[¯¼²kå²ƹì{Ýî…¾ùÌ›”#FŒýóôÖñ³C‹WPƱ•t+¡ý‘7>úàC@A‰-š®*¡3°â
+háÒ¥fYóäTGùÃ^
+ÚÅâ
+fð?>¾ñÂÛç.ž9÷ÒæãÃO½\[6<ê” Z9P3XÓ3 ™22GµUÍ.Â…ö 4HdtúV°Žìì>]F¨@îLQt#².“°‚Çóò)ïàUw{}t¸n‹a­ã@ÕéÐ,À?ÈΚâ)‚Õ§As Ö£w+›ù駟îÆBõ3;­&22l2ÑCŽujÔ´Ì
+«È3ðÀÓO°uÔP±ç¥ Ò’;,H‹IÝV6»ÛÛ²fÙâ=‘E™äž.¯DÑ. ž™ÎÎuLFÛVñ@K¢^?üð÷ß~ûáûï>x„β_Ø;ÔÙÙ³•u7¶Þq˜yÛ2bĈ£D髯¾Z¹ŒvÐ/[²ŽrÐ?¿õ•‡¾pêí+W®$„θ¤Š&kÄ48_ΚƒH;'"®\Kã™7Þ¼xîÂÎm'-Ø]]Ú—oi±  YÜ*@2|꬇9
+œ¤¨×ë=æÕh:³²úéÀBéÉ©°]Ê©­ûiPa<ÿp!'²Ç1T‘ •( ¹™ÐLé­ä
+jHL†yª‡‚†"û—,Ø•omÄÑVMr#
+ÍQPñp|΃ÂhÇ!z¤°Í›"/'êEæçúõë—Þ¹p€Ì²ß2YýTh8êŠáPoSû¹·Î0o^FŒ1bôûõóÏ?¯{v+ÝJhŲõm¤ôϾ~úóÏ?OìÑøuvÿ¶zédx:*ÓÀ3U⦼4ÇÑÝG.œ;¿×[Ëíl¬êŸlm&Œ>£¬Y —) âÆP·[eÜ]Rýij夶NA©TtEz²—ìÒ̽¹î‹I{Z1
+¥@óbŽª;Ô$ƒÊR ¹ÐÌLè‰h
+ð^bŒÒÝz-þλð(°à„?ýéOãe¥`¸¼Žxâ nÚДì!YNNšr¥óëÁ´dH½RA[´ wK2Tª€æ‚jv˜.Ò®RuëôMlj­[¼ì™í‘Èñúy=ÓЊ,i[kf
+ë~Ê_?™çÅãPl5ò'$jé,{ðG\öË7,‰ Ç»ì{ÝmÏ.bÂ[1bĈѯÖ>Š¬¢@h9A¿né ?zøõ÷.^úæ›o BÅ“jåÑÐùØàqfd°¦¸s•IMÊd÷£&çÅ .ž|gÝŠÝÚ¥slϸÀšŽˆ=¸ÐAˆªD¼61T+ ÎH%« I”BØ‚H;h8†@
+°BÑmV$ñÜI$&µ¢PªÉ€f‚¿¦
+šäh—*³K§â†vp-:ê-‰ì[¼èhÉÞ©h¥JҜʚMÛÊPx<çÖÂ!Æ'¦<‘¨9¤çíÓ?~rôÐñç6m[¶t]dÁp0Ͳ'meÍÛÖí`ÞÔŒ1bÄèW-ÐK"k£­„6ÜtÐ9öî;¤ƒ>±õÒáúg²ØÖQ Äç<¤a
+Ø™Aö„œM5Pª¨‚K²¤­ä"Ê6fÂåt¯¤thNJ´+[âÎIucX‡F×c0·•?ò6­^´gÉâƒå5å!.¤Y
+ÑieŠ¸vCQ[™®öAO¢^B?þø#™eéýC‡Ž®_¿uéÐÚEý‘`pÄeßÕÙÙÓä>´É²gĈ#F¿H`I]6¼‘ò-YµŠ¡ç·mÛ~øðá ožßM,Þµ?“ms¦:Ó“P´kšÜaÀ›r-çÞ<ûî;ç·¿|b°sCË#^½ÐÎåzãw6²Ù¥ôzFÃéA…J´ª‘ ݲäN9ÅBãz]fX«õa˜G£í«9¸¡Ó‘Á€ˆòn“°2.’[L…Èn>÷Öù?Ý*
+µÅgi!p]¬Sb,G,™Z¾©°õfƒ¨‘…¨¡µ²‡¤ ]FøÀ"Ž;0ƒO£ +³úLH3`
+y8KÚØi ñ¡z™ % ñ³:Ôš>ÜØ;­–Öúª§»Ö EŽ,éÙ8ÖÒX€Øµ’Ú$hN2< ð-¾‡Ä°9ƒ­þèÌÅâé²?uvßkûW¯~a˜tÙÇeÙ»Ý}-Áï̈#FŒþÃÖåç7îŠ Sz:y•tÐï?pà̱·À"›p½Ã¥
+k“à‚¥Àù)Rß$YµÁè6½ÛÖì¾pá±WßZ2¼ß]ýÔýª2ÂÄ5é¢æÅ2U)÷÷\ªèež„\Ù©b!Asfr«횊8tÊ
+U‰¡
+0dP¥–=O+i˜‚Ö`:o®µñ³O>ýÓÝõ6‹hú%„ îöêÕ«€»î†@´†Bk´¼²t¸*ž^TìâXNß¾{{¯$êð‹N[£Ûh—Êͺ¤z«¨\È÷
+©¶Tr£l$žC×Y…å“‘j ó’,dèÂðž w{ÍÓË{7 _\a25ƒ9W'7ÈXOˆ9ð9&ßzX&ƒõJX÷OpÙŸÞ¹kψËÞ‰O+lïe\öŒ1bÄènÚ¹u€ òllhíMýk¯¢ôßQJà¯Ã8¹8—öY ¨v4`H8ÓµÜY&¤Ålh4š< ;—zóÀéeKö´ MÏm—]? ±gÈ;Ó¥ X¦…~.—.Ùè 7‚ 
+ú¼LÅ* º*©)MšŠÚõz ‚U›¦ z`xÃ=“Q!´ƒ;Q@óxC
+•H ª,N€.Ú:QQ¯ÕÀ°bõknøÓ/½Y
+
+eÜ•@à'Döli[ÂNí˜Ñ«×`xßÌ)­MK–?½%²øxSQØ`l™ªp¨D5©¬¸œÎÒ¸Ý!<e«¼»ìÁzýЛ7ï\±lý¢…‘`p0®Žºyõ‚ÕÌ[ž#FŒÅëôéw†¯¤@h5 Bë×oݵ{÷ñ£o|øþ Ï ØT.–Žpà‰bxj,q ,Äk.rÍÎm [ :óìš#ó;–ÕÎë2™|À ⦀VÒé:&+jU¨EÃú¤Z«°L-¨Iâ·'s›nCº Þ v`hk^jEA^ï§ ú®0ƒ'u•Y¬yô¾õ'y²†
+[Ò
+ª^:ºŽTM£p‡,qq¤C³&¤V]<}îÝÓç6n<òth­£¤×fÄ3 NtáÆ=æËQ7 ÕÓû¤GZ3e~¥Ì›…tؤõyiuÞŽ=„¡S¯
+Ü6Q™!É¥V«Y…#íj©1š‚RÉYªAµ4¥ÀŽ¨aV4 ü‰BjN©)©fœ®#zÆX<5C‘І¡È¡¡­æ4ë±þIJ‡ZÖœÁž<RçÇWS§±Í¯¬Û™¨˜[Úe¿ÿÀÁµë^Ž¬ ɲïõxzšÚßç]æC€#FŒþ›uåÊ•Õ+6ÇgЯ]ûü+Ûv<xèÜÉÄ;è/¹¤¤@ˆOJf‘Ñ!
+„,¨ÆÌ~øðÎ3‡ö°yËëMONj+)Ð2^ç Ýú;Ѩa#7¢ “1 (Èh ›LaÌÐi14¤ÚmIÕ8¿BË.HÍ£·ƒâÒç›E\7ç®:-ŠL‰Iʤ! )ädÏê)ŠjÞl²´™­ÞSÃú%/þ¢«|>þ¶™7<~jæCõ¨ 왬’X™ôH*=Ï'øéΊ´Ûü¤’U„pÌ‚ŠtÄ?±ç+jr¤ FQe«…Ê2 ™Ô˜EßH‡fË¡À9Y¬y*¸X*pg kÓ2Nj‰OBU©P‘’5ã•‘¹ÆêkM¦&Oí3K{ŸŠî^?ÅÜ¢Õ ŒÕÖê¤îtxr,oNÁãhÊb›>xë|¢^r€ä¿ùæ›s'ßÞ»wßÚ5¤Ë¾70
+àP_[[o{ïŸ?þ˜ù(`Ĉ£ÿNýüóÏÏ­ÛF¶¢ŒckÖ¬]»–l%tààÁ3ÇÞº|ù2
+rîKËá)B¨8š— Í4±zqí¾ƒû?ܹýÔüàós
+¼9œ
+¨8›UŒqç™’ª'f:&7†wêt#Žx@86[Àb P˜4h±slà+ÿt[mœè4š'e;ÇÉ\f±ç—éØ…`ÑçBMÔr?‹ÕÓ¦³ø‘É*Næ6pydO¡Ð/úEB?*hÕ ì€Ž´B—FT &r¸ót¬™YÐc“fÿZºvíÚo¡@Å
+Öw“Øž“T16©|œ¸Ì&,7 Ê Þ<
+B² Y*è ðÃZèQp#š ~ÊePE
+TD±
+¹¤€Š“Èz$7ª¥uüòþ!¸9T¨,…ÜY¿ºPÍ*ÔÁE™\²C#ŸêtM•» ìêë; €ÐË„ÀÌÿÏ?ÒTu.k¶+¤|·š]$ ÚAß…ØÅ~»FÒ0 qåg8­ÚÂØb0¹Ió~>iÄ3†À´ãí„ÑÂ$á`8Ñ–¸È‡á6›ßj à€š°~ÜÄ ¸ÑG¶˜6uà
+q^‰Mâš”ZS€8¨&ó¨`ÓÚþ¸¹æÞsòÕW_}öÙgw¬µþ‡Jþš§fŽ¾>­3Š«2ù5*¸TÅ*’C•0Ô ˜- *SÂ¥éü\R—ŸYe4·š-›-c ?©-~Âä±iš¦)ì¹HYÖ4QæÊQ6ÈN‰ƒ”ùΣÖôÓM)Á_µXH©Ôh{TêÊ©†W«ëÂŒ>€U„¡kêÔ°‹nµêDÔsæaðÜè%{cÍxÈXÛæZðïo— HõIðAY Éòéq2¶d‰ ”mn~"”¨—"˜Ûo¿ýöýwI—ýºu//ZC¹ìGÂ[{ÛÚzšÛΛùˆ`Ĉ£ÿl}ùå—K†ÖQú%«WÑÑ«›w’­„H=X£ B›—½œµ ݽ:U!mËBcÒ[òrš.ž=ñì¹Í/[ºhwSÕÀØdG&ëf¾˜’UdVLCí6]ýX¬6?«*/Å9.¹Ê,v"!¨Äù•¯ãW€z¡|Ñ ®¶&U•ÕLTTçg8&g8òS\ùhõ¤F‰úäH—FÒh–«5di4¯MÅ.–Fã*âµ5—ÕR‡b¥Zv¡QX1)Ýa4µáxØŠ5idí)üúd¨Š:Å« ăʮüñò=æä›o¾¹G™Ð?,4úîÛïféÛ¬–§­–€ÉÜ>^ãÊ•»¬b‡^P­ÔèU˜ÐNHj&¤¹L–‹¥ËlZh1?•c š-¸!@˜Ü¹Ù5c‘z,©ž4Ž j3øõ`ÒÔ2÷øŒzÜèÑ~=æÓhêÈã3<¨R÷(Uƒ$á^6¬ÕuÒjVq“—*_o3‰«PèfÆ€L³¸rªÜ>AS3Qí,Ȫš wŒ—æJËkhowo^^?Ô»vZiäÌT³CXO T5ó°œ=F öáÌË€±-+¶$‡nºì×nZ¼j°ë¦­¬·½½·ÙûÁ¹KÌ#FŒý§êûï¿_±ìº§âÊ4=ÿʶ‡:wêí/¾ø"±=ß<~VÉνåg ëSÑÐDEÍÜôöÉÓÞ9·ã•ËžÚÚ^kn”éÐqËâ#ÑÕG^FÉ´Ùºm¶òOk—Úè°Zýk‡ÉâÅ Aƒ± ‚ðFŸÁä'ŒÂèÇ ~ÜØ¡Ööèõ ój4ÁœÔÖé¨Ã†4*äa•Ä  (YÐÎãy•ì’ø"ä¦#ïS¡"°ÐãüÒI¨ÝhöD?fš0÷¤Þ$¬P³ç¥P?‘ÿ¶*•5óÞkñ?ŒÕ /ĽŽÉ¬f³'ÇÖ 8Çj´YCÔ ´šLÍF³‰•<Ûêd±æV#YF^=-­2OæÒKq=›k§÷ÄxTÑ”ªÌäTé“&§ÖÎ1gx&¦ÔDað‘t¤ÀãS©çƒoéô!¥²'+« µ:¾‚ý
+„6¾¼uÇÞ~ý4í Oì¯ÓÂc„œûn¯—VñËQ$<U^m46ïÛvàü¹ówZ¶p»»úéñÖF=ÖCƒ&±,Ð`UM‡fK!ÀÅIÁØj³
+ÙÂòIj»Å0; &r …@ÝI“ˆï•Q­£¥Âöɼ»ÍÉ?üð ;K_»ví,Tv¿§@n·b&s{Ž-d1ž ›uÀlñç Ñj¬M—\OˆìZ^¥ž§dr+¡Ít2¨˜U³ Ú h–ªËâU¥¡Á|Ä™ŽU’&›¬×{4ú°V ˜§Ì€" ÷Ò DΧÕ1¼7úÌ¢*ÕÔÌF*T¨„KͲ:ÂÔž“u¥œ–ZOÍSKíŠDŽ´/kîÐé{¦§•§ iq»ˆò¸”–„»ì¿üòKð²ß¾cÏ*2Ë~iзèfáPsó oã²gĈ£ÿ<mÙ´‡4 -¦k„ÖoÞ²ýµ}ûÞ:ú&X|¿ÿþûÄ~øëáñ
+¶m%ÃÓÓ%
+”L² ˆÖµÏlºpá¯YöÌ+ÞÚÓM.LGvÖëçOT8éÞ5`ÕF¡2T 
+gßqNÀ ÿ†Ä1ðO¾ÿþû;²ÐýªR6T#¥æ‡j,03š©¤Œuà§@sD$›ÕR%LÕ·¦ÏßqØ)ê› žŸçI…Ê“ 'ªU³
+âj½Ö¯ÑöRæ²>„À5Ó¨Ç:]½5&Üdrc¼2º¿ÐÈ%ãÔ6K•wå¥4iqdõ@ÐnÌЉ‘ý0ýe=­/,]ðÊÐâc¥÷·á†vs†' *£…CT[ò±1Jfç<¨›—¨*à0½d–ýÁcà±lɺŃ7]öá@ §É½óÅÌ#FŒý»ëÂÙ C‘Ud™Ðâtýºu[Iý‘×ß¿xéúõ뉡¹¹õ(ÛH¯\I챱˙!fÍV±Ǥî‡'4]8wþÒ[ç6n<<èYRõx'Z1¼]¯ïÐgvMTÔƒu'z-bG
+ƒUDB¹ø|ŸAäTÈÃS{vv¯ZÓÀæ· ÜDgvÜd6ß`
+Ù1½@î"áóø¡YˆÎÀ_ÔêüÙ½–tahÉ.£Ø©€J2)JƒÊx|Ÿ.©\²Ä@W£í¦¹”˜±Ã`ju”ô„[–Gö /Ü÷h^  ¬i¨#EŒ…·Æ²9è!g[›Ký‰z¹ÒÝ¿?¼ôþ¡‡i—ý¾%·dÙ7ºß:v’ùaĈ£_]½|uIdí­ô[vìÜyøð±KgÏ_»v-±õÒÁêÁT6·l‰ÏÚ€ Î~¢
+O@jÒ“Rà›»C(û&¥³Í¯¾øZ¢^´´Ëþݳç÷í?0â²Ë²ï£²ìß;ÏdÙ3bĈѿ¥®\¹²lx#ÕS1ÖJè…í;v:tø›gÁwë ?ºóP&ÛȉöÊÀ¹\ÎŒ¨w,ŸEn2Ú„E§O¾uñì¹í[ßXÞÿ|å¼>ƒ±9;kääe‚¢![PÈÃ&”̽£nгç¢P)
+•2 +P$<©×dv«Ta•zàî,4 ×ûéÛjM¯NhnkÈó² Ä6… †^«µg”Ëjõ—Ù•¬B!TÉ…œT®âV˜„•b^K|k6kž’ëÔJšäòpR}û´|ýõ×ú}º|ùò7ng¡<´èÖ²Ÿß3\òÔùP5Zu"¨<Ó ~½ñPðéU*{GNƒK–!ïÏÝŠ4ª±©uì¹Ð,1ä,d•Éå]¹HU_ÔAW:,l6»›ìO 7D\Ú»ÁjnÒe†,H³JX&ƒ§Ò/!>çA$‡”ló»'Æ'ßÿ=
+#FŒý{éÚµkÏ®ÜBfГz„žÛú
+é çÄ™Ï?ÿ<áz%Ûß1XÁΡW±4x2‹¬]qYØ3Žî>vñÜ…½;Þ\>ø|CÕÀ8C=Y|›Õ7.µy*âP¡~–É:¤ËªmÖêº œ"ê´en:Tª:Så]ÓÈM¡^½¾ƒ.þ¹}PçÓ½‘uúÙóèõðó#õBš>ÜŠÅÜ]VkàN>ýÂñJh7™*•A•¾›ÃíH…ÊÁ£J‚\Ùp9.t¤È»³‰_l¬kÔ´\¿~ýÖK{ŠÂ+C+ÿaáÐí ?øà\ò‘$„…ê¨çh²m ›Í‡ê3õr4œ/wÅ#6³ PÐdYuª" h‘v¦ 8æ´‰qŠ¨L•d³Šq‘=EA6OÈÎ&k­uºÀ7ñ´á‰¸«ºl Òµa(rä©à
+£±YŸÞI n oVÌVF–ÝtÙkÙ9‰uÙƒÿ¼}ü­;ö¬¦\ö!$>Ëþ©ö^Æeψ#FÿFÚ›Öï McCCËFô·¼´cßþýgŽ½õÏpÐkØ&a\+Îq¦S ”Oƒš±1²åâ…‹‡÷œ^¶p{«kÁ}ú*CFG®¢©
+»Ôì"1¯%KÔ.õš…•j¸„`=òçÿ?'?þøã½Ë„–„WÌ#êæèZÆØÚ&gVyõ{ü0¸«Û·†RX³ÈB‚h5x*Õ.)*’BNÀB(BfÆÅ@hŠÂÀ5UÑ 8‘†dÉ` H'µé°Î+–Qqs„P*hIEBàß’¾{*¶ãn[yV]KþØ&gÙü¥á ‘Èñ`ãÂТËè4#Í÷±X–=—3C[%Ô+OÀ9ãøÿ;
+¥ÂShRB‡kæŸØéÔþ³+žÙê©}æ>CídÄ9±§+ºÀ’Š¢$¥J¼VQ™<É—‚„Lº ï2óŠ£Ý{¨XQeJN“ç5ª>Ú†;îy^c¤.ŒðŸïŽuÃlîÌÉé¤úÍæÉŠ/¨ÎCíZÖtCiT-…*T¬"· ¾À'v¤s™¬’T¨ÈÄ~hŽ^¹rån`óþ»L³5åš½VkOQoMv&ó[uìÂܤY÷À¡«W¯Žb¡1É…·QM 5ªåñÉBÜhM8 r'“©©-Y¬yJA­\ÖeA[ò2|mRŸ¡¥PàŠÈ:³“ZlÂ24Ù—øq¢]õx¥0ÔœJU¼+á£Ø‘‹Ô|¥)GöåLªÛJßõ„ïÑ)žFçÂýÏj(é!L턶=©Çà‡Dœb»CRx2]M-‚ÇÛÄÓø?0¥Ÿ}öÙë‡O<ÿÂŽË6PYöóc=ÃM"˜FŒ1ú××Ñý§†"Ëi¢ë¥7>·m7é ?ùá~÷Ýw?þøcMx¿ŒcŽ!.œ'à< áÜǃŠyP•zlN^ë.íÛ÷þªÅÛk–å»s Òœ¢è–£aDR&5ƒ%U)¬³
+ËihŠÌ‰Ûpc§ITA¯Î`yE »BД†„&(´º‘r Ò8¯#}a¸¡COÜéF Ù
+c=>%«üÜáwμ°zù.ÓFǬ>+ÒBž°t£h* é’ê4¢šQ«YXJJy Gݨ'º,†fLè
+ŸS{u ‡ö¾¼ŸK“¹¢,ä¼Ç)XtŒú
+ Aw˜²1 /JÙø*mž|f–ãn2l4–">>w (†PÖ jji†Sa·>ËÉ=kc¢á.×xQÊvø|cµ+2½wï¼ýE‡RÑ›—xûV—¶Cü\.¸¾Ó(–º(Âjä˜O"rŠD.\äpŠü ø>‡çö—¿ü囧X–ýžûo»uz4sKV¶¹¿צ;ùë|ðÁÇÿ…xúñ—ffƒ~× ç7vàÑG½täÈÛ§ÞþüóÏ¿acÇ`Usô}¶Öb ¸nëðôéã§=ÿÁž[žHDn¹|iŸÍœæjëb] Úm7(ôìn‹\–1Èû‘nsɀźÅf«Ru[ÄÈå³h 8®d§t`½ÆñL‹`m]K‡ác"#3&m¶lµÚ6çÇP“ÁnÏVoÜãXìì¬) -’=Ò6§¨Ñ&ܨÍ+*(Ì ÒÄ
+ 9h+µ4h•ƒ°ø|2ƒ  ‰Åé2¼ÛE„ª€¥ }ùå—J9p×ÁÅLWµ!ºº,PŬâVÚk‹}! 5¨¿aqÏ#ûûv<ˆç°Ö?
+[%mjÐÐ|Ùà[Çξsôý»vKDo[¿f¸ÊÚ Ÿµ¡_K!^­÷$™!É,ü…V#Ó+˘ٲÝcqÊ"% EŠÆifë5«ÿŒ
+«Ï؉(Ò:ÖNÁ2Ín»$ó;e9qid:¬ê3^ïÐ
+C8 Œ:%mvaƒAШQÄ„y „}´”‚ZáìNSW~K+·D ª-% ŽEhèixº\]^ÛÑ?‹æW_}ÅÍHW[b.YÄM]Òf‡p£QPÏIþC~©Ü2ë0
+nxúþgàá úâô¨u¬Rtþ9_:ÊM\C€a4xˆöÍD®“õf•*SãÔ2*S¦V;ˆÌÄB‹BhTMÅá þ¬*p‘¡2Ð$š=t¤`êa6Bøê'Û¹1ì*º›ÃBœâ#ï+ÇRì‘6‚Ç;PcŒT’AFÜbl¸Ü‹6mM§íœ8°ÚÔfë0‚õ¸èê‚g«[Fa6)1ëÜ­ õ†‡§~ˆ~ú㟜@,û§îœÙ7}Óte?1>¾)1tèáçø |ðÁÇÿ¯xëµfô{÷¡–Чž;|øÕ“¯ÿäÇ?æÈ× x¸å¥×«…Þ9@ˆÄ¢k¢Ë¥ÈÕ½m©í•£Ÿ¼ûò™{î9>5´3²qÊíM:ÝcŒ'ëpea…]£A^ó #ˆŒX’‚U2@´j(äé`wŒÚìcË!¼ÁXäS(¬jÐÄq¯ ˆ…JÉ,Í°°:5C°°›íö1»#c³OØlã9½kf¥.â’ÅQ#$å NÂ¥ Õ*l°‹š’f³¸ÃŒµÈALB:–÷Ä®èŇyr>¬÷h/-î²)ûŽ^xž÷»ßAdÒy]Æ‹­³
+nÔV1è•€îr4t*zä…²R JA«_ºþ‹Ï>‡ fÙ+¹±ˆSéBØO
+ÂJÖKãFjdyYÔéI¢טӛARKLrQI?ÄB.2Š³)ƒ‰ó‘Zzb™®"O‡ct©ºÓ*j.Å"ØZ°1—2¬ÇÓ¢ Â'¾rM'Ö!eÌb-lnnƒ
+qH9 kqB¼$ÄB¨/´BávKÙn^>üé² ¯ÐD!ܲc%
+®€Ð#Zêè'Gþ䡇NíÜroh{ÐÓÙÄô×zÒë}£õîá[¬³NïÐ2u¼‚l……µ C,ÄÈâËÕQ“2[·T˜ûœDX?;dËz—4o•¥õàDÆC†¹á“j*^­ë)Xe1eckÔa‡²Ç&nÓ#ÔŽƒ.F¸Á%•+‡]â§à:3¸â–ÏÞYb—€XÂ…»éÁbÐKŠš/ª)ks ~Àö¢EÜö.Öí}ÕŠ¬_À=²9K‚Áuûo9¨BG‰±Õây­¡‚+G1ƒ,š’HÈE„j ‘@EªÎ1ÐàZç…)kt4Ø•cN÷p5CXH<¢uK¤i»¼{ BŒ0ÇdÀÜÇàAv ªðøQZ}ðµ«AÂ'nŒfûB‹¨î*Ý
+[õR<cP%Wi¢vGÖéN¯ÐvšxþnK¬W”b!ˆ…œ²Gý.׎×P±ê(¬°6zĦè5áQ‹  d!!¨÷H[ÌŠ„S´B uN¢Aþ| 4gÅ/Ô*ˆ¢^Š’µH³
+êÝâzˆ•å&‚B…®HaÀ© <ø}Hd³Éƒ#kø EÄù ¾¨ÈœÝ1 ¹~õâh.挴Ø{çä ®¶„Ç?r™®£‚hÕcm&a3Ž§4ªLuI—Õ1jc²+´1«¸Ýd<h©AÎŒCƒ¡ýÐ
+n|òÀ‘“GôôÓoíÞöHªûöØò¾+*¶Ì/¬×ø§*+ÆWêÃnY„” ÁªÆuê1—1mcÆÝž¡tÌŠ5)ѾU±0N:¸ig³ 'Kñ^Xšayõ’AŸ, ÚÜD‡FšÐcíÔðD›b¢F³2á”´Ø×㨤†ÎWÚéúÎ;º„Šøe­œî´QЈ‹‡”b¤5”ÇBáb0 ÍBП6–ë&ÿù+œjê¼Ð+º€¦UØà–Çܾ&Ç€\<É€?»¢<ì%CqR!N”à½F*mµdÑ4‘{¸Šê)cAËyXHÚeè™ êŸX’ÒHû}DÌ—[…Ë'ëpAøPf!üÛN)èÖ€v‡¨Ñ¨è÷Hê-`xvržk¸!ä¶HzýšêÄÐГ7>Ô|ùf³ƒ¥Âµbѵ*Ö’ƒD.ö³pˆ9qÕ~r,ûˆeמ;§gF³7àЦDÿž{ùk|ðÁÇ?;>ü<Ç ¿sç>vkìÀc?óÒ‘#ïäô Û¨·bñù[cðŸ
+VìNËÇ” ñ¶Mw½zôãç°g˃];»W'ê<#,¬k+·A,äwôiU%ÒK¶W«ãT¹\C>uEØXTgÛ,ey#°RÐJŠàߊ%iî'²Ð6Pl¯F°ø–Ý~i³C°ŽB;GᢇŠý-tQä@€ "ÐÇú°·QX'ÄðXMœÛ:¯ñR6ä›Bÿ,<?Äó<¸ùãC«¨@Økô‘¥¾ìòE·^0eužTE`Ôkï׫’R):á~¢ Ƀ3ÃN7J™[ÕÃ6âÂóSVðn3š(Q—HŒÆØ”¥t¢(L™,Ïæ3 ÊðnŸ´ ¦Œ•x
+ÍG¡ìsn[ªÜÐpE*™|æö±®0µ*šw¨[‰‹®ÈÏQWÃ!%f­T^¹Pμõ³O?{±ìÁ/#Ó·Lg³[s`(›ÝÔ×ÿðÝOð—)>øàƒ^¼øÜ)‚ÐÞØôÞý
+ÝÿÐÃO?ÿ oœ|ó³Ï>ûúë¯ÿûß/àáÜâ•2¬j.q [Ê…_& Rм6ûòÑ¿ðÂGwmy°¯ûÞøUÃ-öž VUÔdpÃÂêr Øéa?Ñî'[ËU©E%ý ¹&œÌ°MÙg6J.$XlŠŠƒn„4 C "ÒóU MÂfZÚç"Äów…"„=:°>rÑ„ó|ZzTâ,
+B*C膥ß,hP‚h±
+cHÒ‹ Åà“Q! äÛŽÔ@·
+ÝžI?sëè•ÒuT ~ ]­V̱†K&ª(Åœ›ãÓ õÑ€X~ïøá‡ç^>v|ß¾ƒ»föÞ<93kÞšJmJ$?ýè§ü%‹>øàcaã“3Ÿìœ¾—Bw3èOžxõ“Îqv x¸ÚÅ1Zè™SSÔˆA­Dt %¸V‚‹Uõ¯=wôèOî½ãÉÔ஫’ßðÎñ‹UÕk“5î->߸ËD–k»†-HsÏÅ:ˆ¹S^ë@¹:k!º(u8ÂUj•¬…z¡½
+\x˜2»c›Ã™õ›Jé1³$(Ñ2P§Íœe…Ƈf„ËØþ·ŠW AËé‹Î{æs74!â‡àr ××WÆûögžÚ–¾Ï*ÌÑÊ´Ø*‰èj[&ÇÞ·„È!9Ë…–SÏY¨È·ß~˱ì=¶wï#ðS¹m|We¿yhhSßà§ÿ˜¿pñÁ|,Tüþ7¿ß5½B»9 ´oÿAÄ ?ñÊÙ÷?üÝï~·°Ä±©¾›KæyÐSÂ
+)³9&í̘2—'Í©#šTC.i»¦ŒÝ=Ô š (¨Գoùd jCS rŽFéMmô
+®Y[Ñ38ðàæÑÇ'úw[ëE C
+mgΈÁ•µÛw°Þa;œ®13ZaJ,SÇŒÊA†I¤i“°™¥¥×ç]S£ß£Ç’«ªjБ•ô–ƒ:)ªÈÅ`#ŒƒŽ2Po6 _ EÒJD‚Fé\UçÐwòÑ Á+Ðÿ‹G¯Cs4„ Nçe¨9Êg½ÉºÎ—šuÜ(- ¹¨•†°×“ð’UþìîáuΡë™Á+aÊ|éŠ@Öíu¹‡¬¦LeÉ §ãSƸÓU§'m±nbÊǪ)”2KÒfa#—24\ˆ”÷÷y¥aCT\Žúr(eöØ…ëÖ/é|ì¶ñúÃÛ|D“oÕZ×áÛUÃ2Ëplžw+“ˆ̹€–?ýéOðøÞ«ï:tøIJ¿s,s[aphóÀÀmãwò,{>øàƒïðBzïžÇf¦ƒ>'%´ï¡§žF zø…ôË/¿\Ø­1ÖƒÞÇA ZÐbRÑU°¬°¶àkd‚:XÔ¬‚ëŸyô$%ôØk[G‰_—Hê,‚£8bÁ#6<â"B^2䓇+U±Õºà*cÈïìu»&é-YC…Ê´œø0¼ÅlA»c.äE5Œê,“t•g‘g=é'Û’ˆ•€A®õñ}všf; $h/Ä90S¼¡“v´™%ífÕÐJ*b¡Ó)Ž¥
+Y¡B+øÁ¾Û…@èÙgß¹yì¡õ+‹¤µwø‹ DiЮCs5­ I‚^¼Ý¨F,¤*Æh’:í· ‚¸h-„·ûÔ}nUŸOÙiU•Pc°ªRªq#ÙÅÎ*w‰scÉ SU‹”™#óŠJ@=<¨‡–(3&uJCMXå½:r@"IY„õHˆ@o‘yÙ%ê4^ú¦Xüoòý1$íx#'ö(
+¸HÈÄýZ¼Vü
+²ÕMv¥ÑТG›eÜKžA_¸ÈÜ%ÏíyõÍç¤Ã‚F=ÖÎÙ~iÈ!#Ñ-c‘›X<bf¥ /¶¤óf¿Y÷“A“ ‘ÄS¥ÊšM®jÕ8­ƒ'A&ËÀ”Á;(ATáÑ_®Ô(Ó0eJé°Eˆ§Ë KÏIY䟲\'Í
+]!ÎÒÊd˜_*b4˜y¬oÇB}|¾aãã3çŽ;¾ßÁ3÷ݺige?•NoN$Ͻ÷ Yãƒ>ø¸ôxûÍ÷fíݽwï>ŽAÿÜáçN¼ö£?@è/ùËîJ¦M-¬P
+«´X…L´–]ΡRáJv@hZ:¸Ê=ûúé7Ž~x÷- Ʀ/óõ”
+Z‹ ëü#蔀ˆs$Ò´‡ kX7U­í镃V2NXÁK± !”#vY§F™An¢¸^Ð,‰R°Q5ËU]\8±3?i|‰¼òïÒÞ)ÐäÈç«›wC °ŒŠ{­ýgß
+sÐ&nC7 í(©A¤$g½ûûuáék!ˆ“hl©‚IàI²Lº<€é'bÅr¬C.îSŠ{ ÂNÕ'2ÁEYøO¹žÃÖ9¨°§©ž-³­'Ý…¥xÆ%‹Ád¡>‹…¬ò¹,ƒãiø°åX»ëRâC%Š½bÀDvÒ¢ÎÐ&
+´K/$)ɹ~X…õå¢-M˜ð¸‹@ƒXp1DXŽ'Å’tÁá‚ÃB$™án)ÁBêü¾<±a=Ì÷O}N%à¼ÅhõÂŒÀרeó¥ÕLÑÔ¸Z5 Z  ïà&‚”rÔJÆ v… Wšñ"²ÞE6¶¾ƒ|Wœ²BšbùŸsWHßì#xW¯ru >¶}ôÑ­©{Vé‚«¨ˆ»<å•Ö«°µRÑÕa…«aU©—";„C¥BóNÜ}ûí·¿ýíoO¿þÞsÏ=he?‘™.2oØ:0Æ{ÙóÁ|üÍøå/yçÌÎzõž»pôO?}èĉSgß= ¯´ „ž~üEƒpi1âç5&AZ(C½ùÁÙ×O?rÿ‘‰ÌÁ`ãV—¨^µIÄÉ\µe…õHÔRˆ7…tyA™¸ßE†(*‡…`m¥Ôã°Œú‰6®Ï
+’R¹7”Á &°.#XS¦Ï 6”•€ Š¢”Á·Ÿ_ôƒ «CCOÝ<úðHü–µšŽÅ¥ýKÌq³àj õ5ùîçY&9Mÿ/ûwN½ó²ŸÞ5š¹µ
+Ý<˜2)Œo/GÜ´Y}o´¹FöÑêñ*º·šŠ—kÇÙ”—)Gld â’̪É$#Cœ P
+]ò.a¬X>Ý [%A;†Ùg
+3ŠÃ5T"$3èͬÕuXð(£’]x»ÔÛ°&¿,¼ª<äv&œž!Æ“b<iÆq¸RNwÒå¬rt×"«Kƒ«JÃËK£+õ‘E–.·»ßípyS>_¶" ø·üÛ|ÞÛ|Þ[+*²œÚ¡Ý±ÕéÊ8lÕ¯W ªÈáïÀ?bÉßNY h3
+ÂfŽ˜fQô!e!*´šŽè5cܸW©rDOæR¦‘§mh,Æn’ÖýXh6eò}k–ƒ)MúÉv]¦íu8RNç°Ó5„R†~\lêY« .Vw•PY,lÆãZq§™eñs)ƒxL šktÍñömÉ䡙ɵ+—k;KªRÕcÆV°JYKÙ‘!WÁË^†Ù«ØËþóÏ??uâõ‡>´çÎû§oÙ9:šcÙOŒŽnJ <±ÿÅãƒ>ø˜O|iffò ŸÙÇ¡ûyäÐK/½ôö©·¾øâ xu…×Ø<œMPÌí•b+ÌD;¥³Êû*ˆÖm3çÞ9óò‹g`MéÙ0±„j–ägEH2 W^ËAsq=…HÆ$hT‹ºÅ’t¡þÂ?ñmzb Z¡í„å‚X^µÚI›¢G-KÂÂ
+ Û¤Ò´^Ð,eëã?D¥pãÇZÐDƒ %ésË£tßÒ²n“²1cNoÊnßfwlcÜi‹u3äLúɵt¤„ƒåµïSHrú<,$«Åf{µ*@´¶Ì‡8ÄåÉ.5ÄD¸ mç]DÆA>”Ov9àŸ8Ýã.TÖ‡ü–D•¹ÛgO¸=._Šqn†ÿË07y<“>ßh h§¢bÂﻉ?hù}7ß••HÁ»"0äàƒÙlwdV”ÄijÂKtH¤îIñ ê¿‘®eÏoæ«ÐS’²#C4= “µJ[®íZBu•kǵô¤[QÊÒ0en2ì#Ú¤xžjÅìäyôï×–ì’€+Ù¬ÂûòÎjuÌot0i3ÊxF‘E ’¹N™-Û`½Æ¡Uꈖ÷! ÞOaÜ›PºËÀ°q%mºn,•zvçäWb•L·ÇÕï Ë„+áû\-a5RS€C*ÌÒ\[¨×·ß~ûõ×_ÿôG?>qüÔý÷?‰¼ì·NŽNqph2“ÙÔ?|êYžeÏ|ðq^{ñ•™éÝœõ*çAÿàC‡^xá…7N¾ù駟~óÍ7 «/]A\Kæ¥g±:U¦~%§âª§»iòÜ{gÞ>rz÷¶Ãu›VÚ X×^ sL¥ ¬¼Fáy@ˆz ÇŒ‚L)ehŽ·P[ibP«5j²«5±êèJ*R­ívj†i¤WÜ
+ïYBøÈ M •ŠBìöMÝùö—ÎÏêdg€Cl£ D‰{`Å,£Ga5·X&"rL2î1ˆˆŽmvfÜf›dœÉ•Ú¸A“ÕQcd«OB`ÀÍA©täF®w·
+ë+”§{ÈbÛâd’."TŽ°Pì‚£ÝjÐ1†Ov¹†Ìv§gØU–¶ÓI*ËÈ;Š.35¼”ê\SÚQiïñx<¾¤—í±€gý¬È£^ï„˵ÕéÜ–7¿8o9=iøLìšdÙ&a϶RÜg¶˜…y,±k†¨Fð•ó™-jßE X+Ä3bHG°)Ë!¨r¼W£c4Ém7„CÄ®PGªèˆ»¸”yÈ „¯%DˆµMyuþýt°Nî —€z-èP‹{|²£:½TÛçp¤ŽŒÝ1îtOÚì[î ›c‚X‡#¹Z·Ó#ðMë'Û¾®65»3Kƒ¸þ2_¢»õÖÑÌ!‡VT&
+]¬ëc°il575¤Z X.д©k½ì?9söرãûö"–ý-ˆe?Y`Ùoê|ÿõÓü¥>øàƒ‹wÞzçôÝÅôð»äáçŸõÔ?ùÑÿøÇ?B,´€‡[clTbkç
+[S¦òщ€5áv 6\‘üð̇½rúÞÛŸHõÝu¯³\Тõpín‚XU±"º·IÐ —ôsÃ$$‘‚å —ŽÐXÌ$l–ˆ“ AL¢ÕN–h§`=]­‰¬¥Ã«©PÝSªLÊe¨XC,뎧 ‚&úÂÔìK-¬,‹ 5+x‘(î%ÚKéñj]Õ:êpŒš-™¤l1ÛάɼÃáq—g×Pa­fÒ,ë³àq\Šö’8ºÜ(qh‚~‹¤}…:æt »¼ÃŠph\¸cÙñ1^©‹¹ÜIxD¿q ”Î Ã3Iâ©r¢ÛO´»å1•¬Pw­ÕWê#>'¬Ý.\ýNoÆéÎB À0;.ˆ…쎰Я¡BŒ,ŽÔE]Jˆ@)`›BiŽYÿW‡…•èÙæ:xȧ”ø0LB
+q¯‹q;›^2¤ÓLAȺ†³¢Ó‘E%¥š ‹¢W.˪d)?Ù Ú`Òõ‚&Õ,,üÀW.eÐ SF‹»}d‡‰Ê,×vÔYm›ÌÖmðÚÛç&‹mLD°ÃøªK£™´É»-DŒ$á+‚/¢V·àš+ªn}ⶉ}¾>‹e|1Õ©×ÉEWØ)¶”È[•q« 3¿}òƒìýáøèŽ9¶õ²ß2º³˜V¶9‘ùùÆ_
++×*ÇÚ J5°x°¶œ¸ >b6*†Õ–3zPc°ÈZÉ­Õj¦¸UCÅVjâ«´qZ=QBpÙ ‚EP)ê•‚ž¼5|çÅm܃óLKÏ#(É@»„ ÐU*Š@ÈQ¢™¨Ô @Øc±np(·óâMÊj+3b2MÁŠ¯ÓNjÔc~YG Þ«usÆ눗£ÝþRA«‡ìX]rº¦–™â V_‚¦µÃœ„ Ê$jõ©ºÜžv—gh ²É{ ,QŠ{´XD.Nä¶ñ+« Z­Š>-5î¡úá=—$,–QdbËdÌÖÍvfœñ¤ž´Ë“e\ãvûvÖÙvãI-)é5ªáÃë+æ&H´A†4…Íì
+Q™(D°ç\‰X„B“ÅÝ¡?!º4ª±‚ÂJ*²¤$±ˆê†)3“]ôêÈA˜Ó
+ýâycBFÁjJ5¾š
+»<«õ}òá¹sïyô‘W§†W 8œs,ŽŽ6gÎU5‘IÑÆ™±›t bhÒ€zU:V Ã?„¥ÓI„)å8<¥×Ò°ªÂB¿×[È8Ú}#3.Y„¦' Ø0cM"Лî‹]Bo!<ÇÃ=/"ÝJ ÓÕ¸´*zz˜ó[·£Âº¹ÙawŽÁÂjµM9)³yb5Y¡Ž”Ó£‘Z<aÂZd¬Ð4·Ì‚zÙ¾Ì÷x‡–©bQƒ¬ £‡çŒÁ@l`Ôûe!·§¿¢"ë÷eüŽ>z\‰ê±vˆ[F“ ^,)L8C´Y‚÷ùÉ6»¼[CO,£âkèpµ®Çcd'À“&—ÉŒFžœž Ä×&‡=eR ¢]KAS^’:Á‘èÑcŠ‡ÏÃH‚&¹t¨ŒL”âݬbd;Älj4aÕÀ¹•©A˜{>0e^¢¢$=MMhi„`!\ÔÐã."ÈÞ!ãwѪ 7Þa¶ –†Š\ÂÔ4‡‹¢s´†´h¯ rËða£¢ßG÷Û-ð%§Q_ÈžkŽq)³;Ʀlj•6æ§ûµ¬-Z€l¥ºƒ¯¥§JZ×úƒÌÐГ·?0ßáõWY»\Øeµj¬Ç–(….96»Y&16̳€:øþÕ¯~õΩ·ŸzŠó²ŸÃ²ï»-{3%äƒ>þcã›o¾¹{÷#,š¹{Ç øɧžyùø‰3o¾ÿë_ÿza;B?ýàœQèÓb¹óÒÂnñetÖUž­ ô½{êݳg>zîÐ[·OìímÝ¿Yç«nøD%B–ègOXq"c":¢¶rÐT
+j9 è(×wƒµž#zÃÂ*“eíDÄDvkˆ
+†ç$‹°Q+ŽÓÒ<GÇ3›ÑÈ7‹…vx½“ðBØPŠ ìx®áž×²–€=†f{J$1+£ÄâŸâ”uê@c)h…À¼ƒÈ…M†Y“y> ¬C‹ÜZ'Œx'|nˆ†wú¨¾µT¨\5Ÿ!Ä]åßµSv±†^g± ËJ4 ›!fÓP“ké0‚¯^6eÎ-Œ{Âê˜âRóÅþ¾ÝÉî2î—wÈéZjŒ¯ £n2l‘¯pÇCë³##ÏÎŒøAE·Kp=‚СíL‰­Ðb9Ijn©…¾ê’º…úôý÷ÿ7üâóÅ矟<ñÚCÚ½k?˲ߒ£•e³“½}Oï}Š¿*òÁÿiqð‘Ã3Ó;‹¤„îì±g^:räÝSoï}õÕW x8»p‘”•Uá–&ßÒ .S‚F«²÷2}ÇÝÛ|ôÑGo}ï®ÝǺ›6UÒ!ëÝ
+}Äé^EG j*…D Qv!¿³ù b -rp@àg[X*@.òBÜE-¥º,¦I3žG;;ìÎÑ\aµÀê9&R˜MhDÙöÑX]Ä´ÃF·xSŒkœq¸<ƒËÌ‘¥TÈ#mu7À†rä"qc)‹» ‚f;Ö
+Ï0|ªÒy›DóqÉÎëMV<ê§úØ©§¤Û› ø·V1ºµXŒÓa.Ç:ئÓ SV_6’\8e$ nÖ‰2U¢Öeå].×J™»¹!²ŒŠT5tlYi7bÆ‘‘2A+ÚÐm“—c 3¼‚Š:ea$¿
+rŠC¬=G…[$ƪ “r¡÷Á;ŸX¨!'öÉ™sGß·ïàÎé{oß9kÞšJmêþÑésüå‘>øøOˆ7Ž¿3sÇžœ”Ð~´;và§?ÿük'ßøÙO
+¯– ëA_Mý€Â¼Å@.9¶J,ºV%¸^:Ì’ŽÖË :ûÆéûœÚ6<³niB!AC>2Й«ªÂÙ±ÛrÐb6k@»Ùq%5,ahÒ Jôž#˜‡ <0a-.Yl%¬ö!Æ3¿¿;Ý£NÏ(ÛfgÜ)·7íòe¼¾ä"['Òˆf5
+P=j¼¦ ‚O åvß
+)ƒð Í!#oµÚüآݱ`uƒ
+©æRáœkcdq4Hïr¸Gçfi;³…q¹<·f-åòŽ,±Æ=D»Õ†)ó‘a·;Q"|nn"ÛFè½"@G òŒ«¥Ð†cž ˆÁ,ù”‘øˆØ½¥š±5TÈj˜bœ)SszJî±Â†&û^º‰Õ`Üb6oq8Ò0SlÊRVkÖfK›LSèç°Û3¸(Ð߶qê¦ôÞ=;Ý–ºÇ]ˉ!PØÖz&0çc"Âj ˜ãÌë/Ô‡ñÛo¿ýýïÿáÛ¼täè}÷=:sÇ][Š½ì‰-‰‘¯xóV>øàãß=νóÑÌô½ݱ‡“Ú¿ÿ‰ç~åäk?:÷ñ‚3è7,餅¾9Wx ;/¿ÃÚg7¬5´ýèì¹wN?òÈ«·L=Ô¾nÜA„KEaXÁÕX;pÒÊ•T è(ÅB¬•-$Û€ˆl´€õ6Á»¨Ñ*i³
+ê)d%†ævÊàá•p2I›}²Ú[¬ŒTÉ:*UáÕ¥!Ÿ«×Ãöˆ*Ð/ƒŒ{ÜëôÈBe‚XµaY¯PD\® op Õå&‚VéØZdN)4\= 4~,j×KcVÖâ Ot(ºJT½:³ˆêZC‡*M}ˆœîÊÂb:+T˜Áu¡BÚjßdµm¶Ú&!þ±;F Þ(^Õº?ÝoÐdÝT¿OÝP ›3›°AZðœêr¤@í—‚°!4Ô¡¢—-ŽÁîÒˆjW«Mç#„8¸ÀVc(¿"Ò€z®àYZMGfØçÏT6¯)ï€)+ÁBþ)E½ÅÂÛÂ-r¸háP+L™¬· j¬Þ"nƒç}&(ezPëÀÑì1ËâO­ÐG–ªC‹åmÕÊŽú°ÛÕóåñ xÝ ·ßåõ{Üd¤”MD2UÊ„»^Ï ŸJ¸ˆ „|¨¯ˆ&ÉkèÙRËÍÁ·<´ k+•všñ˜A
+1hVƒ†%Š†ßûàìgžzâ™›ŸŒl ìܬxˆcyÃ_¸/ìÜN™IØ\
+6` &@N[ì‚Ik¥<T£éª.éY®írËBp=[s…‡‘w¹­ƒkr±<è!’T h…¨B³&³š
+;©!ÑÿË+i^bŠø\ §¤E¶Kêl‚:Ÿ<¼Ü^U¡© äv!‚å¾QÚ!òQ²šÒ°
+[„ Zq\NŒøÈv-+^TCÅVÓÑeÚ{ù¸Ñ¸ÙfË0NÖ}Ób\“³% A§-V¤Ú‡Ô§íÛìÎQ›} B „æTU¸VªÃz͘†š€*Ç{ÊÄa‹>™6XÜ‹†|ÂóèQ‘ Ɯߊ]‚8aœóY3a-zuº¦¤Óíø·,vvºÉ¨X<k½¡us0£Tâzz@Âg³Vn°jÝâÆŲ¶•ÚHMiç*mÄK¶ÀzÖF6jÔÁ”,ý.û`¥"Œ´ZÐnš½x»M3Sf£Fœ’FÔè‘´­0«˜nø;çoÔû‘Sx­&¤Sf D·ë`É€!tÊAŒ›G0[Ü#'’GQªqÉU” {KSÆòÍ0eˆÇÇŒÂt qè"ätn…·˜-[‘Ö+c·o·Ú§ìŽq›-k¿PÊà;±Õc~¢MGô–Š£°IëB×!–ýcĶRˆ7Ô±R[Â}L$Ø
+sp&¸Èa-$Ë~ßùꫯÞ>ùÖ“O¾{Ï·Ý6“ÍÜR`ÙoJ$n›æ¯–|ðÁÇ¿e|ýõ×»w=ÀI Ý{/G{ø©§?~â£w>øÍo~³°¡÷NžÑc¶bj \b¬Z*º^óiÁ5bÐQ)Yÿþ›ï|tæÃçŸykfúX2~³KÕIJFæXYáÒ$A")i³°‰DšõzPkÔº$-+JÃï ‹µ‹b
+4Ø… 5TÔéLVA»
+b„¦'`²Ê{¹¹#ø¿ ¶±Z©¦à#¬‚¸´šÁ Vç‘4¸%ÍŒ´E'í¦Djlvi±h‰(L‹»J%1«¸Ã!iuIš\D»“Œxd‘
+U| ݵ¦$´F¬1Eª].êD±?ûç°Ó2b2m²Ú&Yášm¬X ,©sJ*\²‘
+²UOt›„ÍÜì4¬)nIcuIˆÉí4í@Æ^®I'+Ô³Rq }dìÎH[ýæj*
++¦œ5s‡åR Ú Âу´5“Õ˜FÒ[
+ZKA­Ühµ.VÇ\Ò6 XÇ2ô‘½)¬¹zTyë!öP¡¦P» ¡ú^ja¡WƒF9hƒ…˜°|—¡‡ºÁêŒHÆ°Á&¬wˆœÒV'r“ˆçîRtYÕý:jœ#§£]7b¦Û™1›-3¿ªÂµ–i¨q†i°¸™kôib‡‹Åÿ~ÇK5œ…¯Ë"lôÈ£+ËãþÀèb*®Ãûæ¤L…ȶr¢×Œ5„†œ’Öeåa§‹›’BRÕf;K¼Ú¶JÕjü€K<óNÛp2l¬c·A;…hG¯Å€¡³GçR–ÑŠ{Ô Dƒ˜Ö¸HuI! âÔ&#0eÜö%Ì‘µÛ¸¬ÁLJЂz˜/ ‚Äõ\²ØžR­emƒ y%˜2FÔè´1xØC}ò°SÑmP'K©Q†‚¹€•qNÁçouLZm›æçËdØâ§ú´Ô˜ˆ²¦$Q è) /‰@{¦¡vÅàððÓwL¨.mÃà›JpeñÔ;Ï­ þs©æš…ú„ÂÏû7ß|óù§Ÿ:ñÚƒºsçþé›f
+,û‰ÑÑÉäè“{Ÿà¯œ|ðÁÇ¿S<úà³1è<þø¡#GŽ¼÷Ê;_|ñ¼*.ì„€óXÕ¼1¡*Ö‰¡ ^°~ßÌãçÞ;óÚKïÝyç©›2û–ã.¢£`Êi¶HÅìüª¼»ï-…0 @È.j Ècï°ß?ÊorzÓ6ÇdŽ±>Ìa!¸!@{Ò)AºÜ 0¬zA3Ž§õdo€l÷ÈÂnYÄFÆHiNY
+º â [Õã—u8…ëËÀ 2Њ䒗pž7´SpЉŒ'رj«°A/
+"m@Å@µ®ÓåM"àN;æÍ¡Ý1*¢¥'üD›ZÜ qÛò@(4¯óû'`¡¸DT ¤Ã{QÝ^ß ß¿uyy؆G
+(È(lé3’]NYLOôhD1˜2 è°‹š*Õa`(È°@h3ãIåü¼XçU:ˆ|®…/Ç nð“a¯cÐ%n`wŽ"ù”5I¥iõí0/~²ƒ!"JI?¼]ú Æ0ŠCe·ï°
+:U‚F´ª@#Ä<*4§Ô6g Xœ²92d>eGÉ@\ Ðx6Rç6DFi§]Ù»ZFº‹ðè¹pÊÖR!¤^N´«Ø”I@·:7çR&­Wúº†ºg’ÉCwŒðË6
+XNâ+YõEo1‚‹Æ,mW.Ëþ¯ý+üàÿøãžxùÔþýOîœÞ{Û時—ýT:=Õ×ìèqþâÉ|ü{Ä ‡ŽA„ZBÓ÷²ÃÒ÷?üðÓ/¾øâ›'ßäôÿû¿ÿ»€‡sbKeXå ÄÉMSØ ´*AC*¸íÓ§ß:òÞž=§¶ì¾Æñ³@ˆ•ÔKyðvJ5æ#ÚáíåX»kö’KXRýþ,¶qg9”_ÛÌŽ†² Ö/Q…kÊ¢ Ú2ƒð
+‹ºU¢Ï <³ÖfÜœDš.Â%hƸ Ë!‹ùÕHƒÚ‡ÕzEàòˆáÚ˜[’zn¹¤Mnv1ÒVFÚn—¢z« Î€îµ2¤]<G͸™ÅEˆ»Íñ¼ôÿ½ïðnãºÒ`ÐA€˜XÀ‚6E%QÅŽ»-«±7
+™ôW8e' 5‡lo9±¯I4ÖÈ AÈÊQ uŸR¤˜ZU!Ö8âå¿˧W°[žª¶Îm´Œl6!¯¶S¯ž4¨ FrØõ4íG=Ñv¡;41r]2þÐÁø­ ¹ ~YFnÑ)ÎÕbâEºÖÀ¡¹ížk×MQš²ïwž9qRš²¿"{$•Ê•MOÏN¾ùêk…KhaVaý«¯N½|äpn‚þVÔ»ã·{üñ—Ÿåç?ûÙïÿ{ÀBëør5úoéOo¡j¿¼îvÕŠ ô²=j¢sWÝЉ½üÌ;7Üpò`üº=MゾO¥Z%ßjÕQA
+¢ÃDn/Æä:<kÀ®CVÒöó·?XG8ô»ßýîWßxò©·ÜüÝ£ÈËþȪyk$²0žüí¯~U¸VaÖ¿îúñï=|cþàØm·=€&èŸùƒwßÿì³ÏÖWJèB¦½Xî;spL¯Ø@¨Dv®‚èÞRÚöƒg~üâ‰÷o¼áÙ+×´Í6ÒáÍÈ
+Û¤T3
+ùÔLe)SšÓ‡ÝÚÎ8ÜTðù÷•55U÷sîX^9hµ.äríGN÷²K D#o®±ðÊV,ð;ˆ•d’Uh±bÈŠ(ÇËê7Ú$çVȪz}y–©'«d­
+bQµ2 jœq´©<„´î„ÛñxÒ>ïŒÏ ù4YãOùÑN
+B–a÷ãZÁ,ïŽÔ¸†7Yúj A`0.B`¢µ”Ø›ßG+EšHA§ª u÷4¦¹¸‹Í«ÌI‹9ËêûõÚe…¥œµÄàWpÚ’&ÈëTÚm“µ¸u½u܀ϻ¿©$T–²*í`•!b1ÏR
+yx‰‰jû~)L’¥)ÆB¨.´Õî.1,¹ÏãÍ
+ôºƒX»G'Ô*'%\!m– ˤiµ ƒz9ÖcHÙ@u=5ºÍFZ³p°•ù|2\
+~p»Ó ²Ç=ÀpsðȶþFs!„qQà¢r¤€„hEùˆ¨”ØSBt:5ÆÊ0*v!‰¡hUåâv:d5§-4„,¬×,kn[—%:¿»VÊ.ß½-:>~÷Ò̽Óý‡é0ÚLÖIC&ùiÄ!¥‚«–;×wÊþ7¿ùÍ/½öècOÞxã]xÊ~ÕË~~zzÿdaʾ°
+«°þUׯÿý—GHô×æ&èïäÑGŸ{î…wß|n×—/=Ù·ÈÅ5@HEnÔc¹RÙ92¢×£ÙóýgÞ;qâ£ÛŽº:yÓDßÁqëCR«E©Š»´¡rS ›¥fi* {+ôòc^Ï’Çs…Ç“‚´Å‹É\EhÞ¶œ^—…ï_¨2
+Âv?É°°…„uSe¨–àuA
+~õ«_ý çeøðÑ™äUyceㇳ×®¨…UX…õ/·>ùä“kÞŽ'诹éipìîã<zêÔso¿ö&ÜþùÏ^Ç—{ü¾§*Hn ‚M“rƒc½.ùÎçŸ~€Ð=w¿xEâÎÑÀnnp£=ìÕvK@È®é+1%tÜaŽCbõS£›«nOÌë¹Òï›cÙýø<f³/-›ƒ3I‡ùcÚí‹vÇ‚‹MqÜbSe“]7òœªa¦Ü•#S0šè]±¹_ñòX‡àŸ
+ªv¿}˜Ct/²Rb»ZÈЙñ’{õÊq•:îÒ…)²*ã$¯ wZ}°Ò8eƲ >j”)OWYç·X¶˜újé–ž¬0'J¨_„>~n}Ðfšn,°„¹Ð˶b¼;!ò›è>¶h¨J («ECôKîoXjiÄÅc ³B’ãS€·Ó!x9øðX4£U¼é¾ZÈà6Á§ÝÝ{ibrò{ßNÝq¾;¬"ºÊäÛ”Š )¹Í×+üù#öhÊ^ÁðÊõœ²‡ Â/ùË—O}ÿî{ŽçúÛ¿}èðLòÀª—ýØøÍ/ûÂ*¬Âú—ZùË_núν¸"tä†ë% t׃?yòäßÿѯýëõ•úë_ÿZ)wªÏ  ™åˆ/]J6Ɉ«l÷¾@èþû^ÙŸúîðEÓmþ!ûÊ­åžE2h£UE
+¼j'Tª¸J9­SMRê ¦h°‰
+±Î)#a9d.×~Þu»Æ7ÑýŒnÀ¦ì*Fn/<™ˆÒI¶4”„Yn¹„¸bp
+DØ'b·Tq);6U„ðc¢žÊˆ•ž4=ñÍËšŠáoi‚ß õáÙ·î2EÀ£ïõú¢>ïBe°D;Àϯ몡FlÕYÀ
+™V‘¬Óκˉ)d•ÚáSÒK×ÒÚ:jˆ-O1 Ò‘ÊÈMƒŽH!3™RðEÑjRÑ©„è.!ƒZM”×÷o ]•)ä>†©ìË"Q¼–ò™†moeŽÄ.Gâç-¬ª£±:Ì0K¼Ýh4ÓYV„°š¾fOIt5º‚½Ís±ØCS·‰Ú]
+¢“&·éçèðÜn¬©Émá‹&Öý佞=ùÜm·-OÙ¯x٣鲑Ñžz¥p-¬Â*¬þõð÷žBþó9)¡cÇn»çž‡Ÿ|ê©WsôëKbJn_ë£DÖ«¨R²K´DGjhéä‰{üí#ÙÛ‡öAžê*U×°C>_°§ ÀfM“uU£ˆ„#&ý¾YÜdIñb–á“Rýg•d‚F–VJ vÇö°@T"¿/¹¥°²cphûg¤JÖŠg¸:VÇÇPÞ9{b…·<ȦM
+ ˆøÍJ èÌm³-,Ô³i„ÌŸ”(^ … Y‘"ânk.d&rð‹â…Tå«!ói;éâ´Ùœ…MÓY5*ئ0ShJÒ…ÞA#tŠl¦Â0áÖvÃÿRåMÃY´ã%†8üG±<ΰÈt1áÙ%Ÿw¶Æ?#ŠN˜n*
+š^I
+B¦%z¬D3¯!®—àž€Wô!›¼5WúÒ—z¢í¼ºñÑëñ‡æ§¹ä;ÕD‹<Ç@6©ÉðÍÒuZsšèÜvìð]ëõu,´<eÿÌê”ýŠyë|,67{ÿ.³…UX…õϼN=ùâ‘Ã×å<èѺ뮇žxòÉ—Ÿ{å§ýô÷¿ÿýúÒ„Dõ&32Úh</Ýh"7)•È¾¥$ºw×¼úÌŸyòënmÎn.i)"ú«‰f¶[ä"h†ºxd3ÝçáÆ1ɱƒü·;…m)R+.íÑ
+¿FÒ¼;†,J™$œ86.MгÈÁH†MàÍa?¯$„¬ÆŸnªìåd;ÿ°úÚêa‰Ùn—/‡Ì¨9k¼H<2¶ªw­D'ܪ…¹ôƒ("¦4CO5XF8˜e£[ˆ ªÑYˆ)U<S¦Óƒ²„J×H!£2¬yz»™Ï²Ü,Ù!¼ìÍðb௠`úò»×Ý6Ù^.(zb¢˜åøGW(¹ äÁ¡Àߌ—Y¶·åÒÌØÈéă©ÈM²]&ÙÅEŠoQd£4eo k¦ìËIÛû¯¼¿^_ê?ýéOŸ~úé[¯¼þÔS'n¾ùnäe?stMNÎ%~þÁ…‹maVaýs®×ž} „n¾Ñ„n¿ýÇü…S/}ô“ŸÀíÞúV„¶Wí¡H»*ÏAI¦È˜/½UNô4ZÚ_öíçžz÷;ûïîoY:ßÕk%vÑD‡œ»d—4RA' 4êõ%jü³nü¾$Ï'qÂg«)ŸpVdkK&l•óXËnÁá˜q¡”Ã&æÓv{’¬4JÆ ‹ƒHÐÞÇÉwY‰=mÂKx®¹Šì\¹ý/&Öqi"°’yó7üÈ’+9m¥WSºÄ’ÝfûË&·ZjJ#喌ٜ¡ŠÓ6ý˜OÛlÔÇàñ^m$eQ‡l# ù6™û«ª81
+ø'—XÑF¹ÕÝbAp¨ZÖj&ÚåD ±×!ÛWWÝqŸ?¾½¬·ZÖCäóžo¨š¯âþ
+X蛑¨ûˉ½ÅDI s“:K?ÃÁ1ÇÝž.ßpMò"üB6Z_6æ+›âËã’ö`UÕ"€")^,‡àkuu†a¦¥ºÃ%1|Íl­ìee—CÈ8]
+«°þ ×HJèæe)¡[Ž­LпðÜ‹¼óîgŸ}¶¾|éþ‹¢¥pA>“/õ¥-d“œèõj÷¾uêÍOüø¦C÷ ö\s±˜&öIRp§\Nìõ½O"‡
+ÒnoŒÆ›Jû…Õ<]j™åèÉ-¦d%¸I¬ ¶<µÆé
+ä?X~¶šS4¥‹Ó~mg…nTz¤Õ0e*NÆœk¦3>jÌ[ã¸)–›÷ùæò«×sÈãIñâäfªÏ¡ ÑÈHk·Ä£vÈ[-AÈÖ2ƒ¢®§;¦a1Ì­ü-Žnè›ú”…ÕDëˈ=ž¢^¿?áõ\‰š˜5iÑÅÈæ²~ÀÕæ€Cˆš@GÉZyÊQ1{¦9*Ñ`¡EN
+ˆ‹WuÕ8‡E”uLâó þqZ› ÐìʬýY·Z7é§y}Bf1g7QájÜ#,Ôd
+J¥<K1î©é&!dÚaÀE(^Æ”4BÈÓ
+Ó6š"/&ºe¸`%ªZEaLôL£±[ËB>jñs¨ B†¸URȬ–4„ àbméÄFËðÊI³ÛS,‹Bæbæ‘¢ûJ€¯¹‹&:9u‡›‰ˆú J“B&ÁWüÞ;$·8»¬Ù¤ú›!ÓêÚ‘rÃ4`!Î<å¬ÈH¯î-›ÞAÃ1Y,H’Õ÷ˆ•€®y9dèÏ-–§+Á QžŸ÷ûÖ„Ìï›à-òcžâ¡
+e@C J>t%D;§lo(o.sú0æªíÊCAùq ²Žf ·Ñ”}~ÏέS““÷_ºã1«ËåM+æ­*rƒît‡­ÂÅ©6¬×w\ò²ÿÅ/~ñÒ©—±—ýmGMæ¦ìÓ33s“Ó·\}¬pí-¬Â*¬’õùçŸßpÝÝ’”Ð ×ߎ'è¿ @虓'ß|MЯ/zãÔ+Uò³H iȹ]­¸Ð$»´J¶ëÅ'_;qâ£;ïx&½wSe6ß š‰½vlKZNìUJ¢…G²ÒCNÓd%ƒ|J™P9Å·çø2Ò¡2’P ìͦ0ÜÚo§ƒùuNŒ»\ˆ8 yJ'8(v)Ú꫆jMC¬6hÐ#ubM®Î
+þ˜™Ò¥–ì:€õˆÆ¸ŠËGö@^Èò«yWJ!«q ñ†~»¼U
+‘è(F‰m¬aØ­é±Ë›KˆÖ/>óRMo𠢆gÛXÚÕ}Izjê+gîª5µÈ‰žr²I©¸Æêî:Eætµtl«Øµ^ßôÿùŸÿùãÿø³~úܳ/ÞyçC×=võÁÃÉäüŠ—ýÜXäÁ;
+Sö…UX…õ¿àöí¶[Dô«ôwÞÿñ'žyã¥×~ùË_®û½CîS›Ö
+æíÕRƒœè/&ÚŒ¸þ–—d¿î ZPCô:e»½†>Ÿ®ÛJ´axÖ%Ñ«*½”f¬D3V©ä´½ˆ ¯íu=
+¡
+rÖVsØáHa²¤­+ I.‹‡ êñ
+E@03Ll+¢M¨ÖÄhCjMü+&Ó3xÔ18“nÚ­íñj»ý Õ‘HAðä4.[Áñ
+¯ç 'F=†p‰"\ªêó™†m¶Ì&Ò‘†g¨Ôç›ö~Í¡jžA„æ×v
+úP™a¥L¦”„Ó¶›C%Ãz|MÈ0S(dógÅB¸šMÂç­©4$j{+d­%9v„óK‰ ²Ÿk¶—“y°çÌ ñU#9Zx@¹
+kƒ¢¥÷âddôÆxôÁ¥Ø-NùNÑA‘ÛõŠ:ìeo”# ê,D‘Žr¹ãÛ]G8ôù矿ûúÛ'Nœ¼å–ûŽ¾é`ö芗}6Ÿ‹¤~öKqaVaý_­§{öÈ4A(IJè®»zü‰'^ÁRBpûôÓO×ñåDÕvéò»f‚ž"0Ú¦&:{.ˆ½óü›'žxýpæöpsÆoØ'í–"¢Ë!k®£ýþ´ß?ÓPÑϫڭȇk¦£´i‰HúbnŸ Z±A9@4¤CéͶã^M¥¥Üj3'Ï¡ƒ.{LòMO¼˜ÜZâµ=hÂÚõTG¸òžž’œ^᩾Yb•¦¶Õè`ȼUvµnéB¸-æÙ-¦¤QWE—­
+v¹²Ï
+Mú ³j² mÅôž‰œáîoÔ ë3ÍNپƒ>¿/[SßdíãÔm(³£QD+à.52VÛc!ÚÔÄP9Ñ!Ó« dèŒaôý{¤Wúenz|;tØSpBjj’ø]/±ÂL“9Èi²RjÆY‘­²Î»©1ª8#êº\i蛄L%yÙ'$\]¤O²Ú G×]fœ8 ­ŽFD&¦<í£Æ¶™CX
+ º24™¸ïέMv
+WϤ‘?à="®»ç*Ÿw‘åæë*‘j´¨G[-a»=U_2ZjΔ¢UÚ!í߇òB†äƒ
+`C)=-qÜ$²ítÐBg%s}éÒE4®T•éÆ¿z©A­œ2*FJÉ€•h§ˆ
+ËJv¥ûywdSYУïeív€"83»©åÜ6¼J2œ´ÉZh²£^÷ë:ÍÆ…E¡q31À0S,?‹  †a¤,˜mUeNúË&%™hø«½h´XÌè•_­Y¦UNZIĹ*!º,ê6+†óÀ!‹.( >:Æ[“vÇ<‹äªR,‡tªŽ$„sDZd2Ÿ2T³ \6|Ø°k0Rw!óµ¨×1ZK ˆÚn—¼ÙFì©$vW—W—9ˆK!dŒì2N~9+ßÃ’{XÅŽ„½›•]æÄþ#z¤+Þ—›¸ÔÝp±µ+
+™Œè;»wL )ûÔw[ÏÖíZ€CŠsŠj8©ÈFŽÜ°Ž?ýéO¿úÕ¯^}þ•zì†ëï8tÕádâŠU8™<š.LÙVaÖÿÞ‚´£‡o]ö _ž ¿ïø#œ:õ»o¾óÛßþv}5o¿ún«Üûi–×
+R+.,—o%‰.’èõ«w¾ñì'O|xóµG'nè¼,aD~£Ë‰UAK‰.¯®‡sO3 2QåÜ1”k؆[äݱGÿ&: jŒ¢¥JÖjBt‹Ý+¬ È¥HҜZ/ÑŽózä[
+€‡3Oúʧ81ævgàþ]æY÷”ތ꧰h^cÉ°£ý
+b´BÖ^B†
+oQR*Ãaÿ&Ž¢â,çÅ ä€)Æáúâ  év¢¹{Ô8[á Cžµâ‚C9ÑQ¦è´qŸ¶ÓlJZÐ{ øðÈ\žXn ÙsØSKF!±–›bŽâ±Js²™Î£¡!«qÚ£íÖ}AnÕ)Ç%çŽ/ßÅDPÒ=†Ä
+
+Y[‰"dÐLyuÝn–5™‚hš …lFf9~Þî\´Ù°Ĩ´8á4ŽØè¸Ä2‚U'%û°³†¬X1$ù¥~ù¶Ë›5x ž°mJF‡!Ä9!áp΢¨±1äèZ5€Ä– XRíŽçVB‡ €nkžvþá½ðn2æ4Caˆ Ã,åBvZàX~pïF[¸®8ÀkzXe „¬ZÖ²"2© F(¢«ŠØ¹±²··e!}øpæöºb4e¯—í1(Îo¥™ôÑrT­…[CN¡ºXî=ÏÙ¶^WiÊþ§}ôܳ/ /ûkn;|ðH*5¿bÞ:7yòî'
+WéÂ*¬Âú‡.¸5»åÆû%ú®¿ K Ýý –zãåýêW¿Zߊš 'åo•âB«| Mì*!ö0²‹jU;}àû'O|ø½û^Ú?sO×ÅIy¡Q\ò9*ájb°¹ú¢Ó™x6[WE9!ÊâÊËîÜ“MåA¯¾Ç…zg­åÄ^S® £ZÖ@FFczõ´KÛWaŒ@nÝn†'Ÿâ¸ž_dØy'“fÙ©ºÒqGñh¹
+¥uÈÔ¼¦»”N¡²=JÓŸ¶Ksº›ªJ9]IvþÍ”šKO£edo®È¤L€dð^x!Ãðs6;d½‹ûeˆPÍ$1÷ ¤NŸwÑ™æK6jÁð)»s>Ïä}?Ã%1&I£·ïe¤?a»˜ýèd
+qA˜l´÷5•t{Šz]ª.‡¼Õ”›2“Íàô–-Wáò8*}NÙ倅x7`K€= @9gy2 ŠØ(¦€¾šJzÝú £h«’µ–-+½N’[³Ù‡é4Qlz;]A'7”ŒñB„E=Í€\ B›-ÃvãXµ*€t¨È6VÛƒXC–,cŽˆô«9é¸Êáå¾jÔªåíxÜ>É ÐT¦‘êGo„¤:ëÂÀ•Eܳ(|,íŽ9–›…“/ŠÙÿ àŸ¯2Ž›‡èœîK»Ä 4ªoÖµŸwÍ-0|–àÕSœ8ù០wöo1÷ºu½œ¢ÍŽ ZËLxYÇ%›Æ‡{¯J$94s»O½SNôj‰½Fòœü/©9Úg–{w'×±Söûßÿþ'ï¼÷ì3§ŽÝöÀ5‡o¾ràPv¥:47yýÅW ×êÂ*¬ÂúÇ­»n{äÈ4Aý5Çrô?ýôÓ?zaý¥„`±ò­:Źù×Xâ‡|뎒ž-ÕáMŽp½sðö#÷¿ûÊ›=öÖ¡ôý—$üš½’ªs !M…‡q¨¿ŠØíÑö@Ì>)a¡*ëüfËW>#%Y̱‰1Ü $†[„ü^ÃÖƒ¬ªÓ!k.'šMË4àÁR^erz©"dÖFx}Ÿ…J#8ÄMòâËMÕUŒn£û8j¢Z²z¢»„Ø[Iìq’mUƉT
+¨s1ÚbØA‡ìs öCA–pÜ4ü+'&úâ³ÄëVÝ È§¤Ò Y5š™êµ(Âfíšp§SM%,@D"Ùl@ZLô”M0F¢ÃBì«$ö¡:Œã[-áMr
+ój»Ô¹™CÕ_Ðû’ÒR7êã¥Æ¨™Îì QÈ
+«°þëÑã'¾fESÖw=üDn‚þøÃÿ÷¯ãËyÔßÒ*Î_S²‘›m¤ày^Èv1C“×ÿìg?{ýä›7\õ½ÁÀ•[¬ˆª
+ !Ïü½Y"ÖZˆvNÜhî®öš\ÞF‡
+M–©Ô(±VÉÛ¿VV…­UN¨TqF’h0KF&‰nö™ƒ¬G}Ç ÃDáÙ | }ƒ 0ƒá\\
+Ò¥Ý1‡§õc’Úˆñ;\à™˜Ó™”@ ò¥eP‘Íòc’Ò^×ø%žL;;Zïj´…|ú@µ:d“·Y±½ÅJûÌJìÁ”]Y§ íåÅÉ?* ΄§m2÷o5!©m$
+Ur÷oûÛu¬ýîw¿{ëÕןxòé›oºûÈáëg“GòxÔ‘ÅèÁ{ïß
+íÂ*¬ÂZßõÜÓ߇ Nž”бÛoð±Çé¹W~þ³Ÿ}þùçüã×ñåéÝÅ9k€P1¹£Ì8~nY—ÓµxŽ‰üøãòÃwo½õ¹ùÈá¾Ëg6Z=˔ȉ)¿ÀRD„à¯NeçƲ°×8Ä §3Δ§áfŸ£'kéaøÁ•3ÊW¥§ˆsîÇÍ blSyHÔ…e» ß ¯ÞìËàf?Fk'%7y¯®»T7¡Ñ$*ÉNHîäiãäAšhfÈ}r±ßFœ†£ñiËÈÞ³fÏ
+¬¥S„ô–‘uH>lÐ*'áUüºNÊ„Ö6[]®`–ÝÏ qÌÅÙlY§3¿gøo^dÈíp*ªíû1òAµ )¿’|@à‡mXÂn¢‚¶Êy”vq6Å 2u:Mî¢ ‡ÛÙ±Fo¬†ª/îshúÊ•5!S#‚Ö„U=PWÙï¯I¸ÝY=Ut£eÄG–Z²z|Ý×`Í™TWa„"XnQ§šJƒ^]€Qv@Èòq üvôÓ^]¯©8…t th ¿šl×,«ñ¬ú€
+Yp‹©6ü\…u$w¯7%M®µ:G/õ¤ê¯nåÆk=© ®p1Ì©»6Rmó¦¢ÑG–fîí9ÈË.!1zÔËöhspÈ”'‹ª 79äþõõ²ÿä“O~ôâ>þøM7¢)ûÔé^öWLf
+Sö…UX…µŽëýw~räð}Gò ?vì{<úèó§^úɻﯻ}˦‘,Ÿ˜¿ÕŠ \òo9é)žO»ÅÌÐî™ÿù¿}ôÖûßýîóS7Ot/vsCç‹ã÷ئ²W×S¡
+– òÂ2)óu»ÜºîMU}‚˜†´Î‹S
+k]Öoÿ󳣇oYö Ç5¡[n½÷ø#<‡'è?ýôÓõB ã×VÈ=Ù WìÈÇBòí•ÚVr1 Û'~úÁO>|çýøþ¡Å»"}KíÌH3ÚÐpd—;y)ñø¦7Yn]]ÖŒoÌ•DÈJ\n%ÚDM×–²€ ¦àj/¸§Õ3¤q¡z
+Yg®xÐãÒÐ $VHL³ª«3ªÒÊ~›}ÎëÛbî¯6M‰zIJTn˜B¶eÅ)º8iÔLÙdÍ€Á°nóÀ㽬|OSE€ãS UýÖâ˜E‹LZõ§,D[R}Y5ù’hÛ9æI dsÔ ÃƒQ;è6n˜…¬*Š³.nçÓi
+ÿTm[`…Ô×E><?Ïó ·?ø¼I·;ƒÈá""VI!+7Nùt]pe:Y\¥‚ј{Ÿá^ÆÌn<ª& •oö·¹F/ðÏCÈZøH“'î÷ÄÚ6†®ŠÅž¸:uǹl_ÂhPr´_æQçfÊ+¹Á§;o½®+^ö/žzùî{Ž_Ím×|ûšdnÊ>“JÍMÜyÍí…kxaVaýë“O>¹æÈí’”PŽ/}÷C?uêÔ;?|ë7¿ùÍú¡ã7=X)wËkLòšbrËÊå´L¾…QíuÑSv[æ[µ£ï¼öæß|ë‰ã¯¹âááÞ¥n~@º{ít4n¸ÑNOªÅ5ì&è
+š8“B°Êï[.ëÕ à[¶µö l@D»ùá¡}©èø-ñøã‡3·×šZåXé$:irÛÊ÷×Bú«B©µqëuÅXž²ÿðÃSϾpÇ^wôØ‘ƒGff–§ì³ÉdvdôÑ{+\É «°
+믿þõ¯7^–Z™ ¿óŸ<yò­ïÿè׿þõºOÐÛä^éš©'ëu9¾\Tib¤­­¦`{ø¥/½óÖÛ'ÿÑu×<;Üa͈Ǔ’ÜEa_À&Ú¸ÈæºC€ˆÎóÏŸ'D6Wô²ä>L`FôN2ksÈ[Üú OlÀ»'k*'$‘=ɲj¬Z·Ÿ‚ût4}ƒäzblŽËQ_2ºÝÜÇ™'+ÌÈU
+Ç€gm¨H-R¯héh0mÛJì1"áÄUiA€I¼ª“wO°ÜR­k¨ŒN1šA5¦Î«3”è°åD¿šm&T#Ê'NGŒºi¸ÇGj9–~¤T,FqQ(˹㘑;#Íž/;³³Q—úr,„tü¼ ~_×p²~êl® [Ñ4ýº×£ïWF"¶täÈLƒÆÏ·˜úpÇ*ƒI¹1$žÃ ñmé…
+!»Ä›>GœØ\d-4š)C§KI
+«°¾úzö©Ž¾ny‚þÖU)¡—Ÿõ£?úÃþð—¿üe_®Îpq Y¯ÂE!¶„Ýç·Á͸~ÀIMMtÎzç…7o<r|¼ÿð%†·•"ª'—›ÚÎÙ6¶w»&¤æK+©q»ÕíUÄNÙ2$l :¬D« î©a†vÁíãéIšJ#[s:ƒÙ­Ru(X¢²rÁáœw8RU• ‚5á¡'h*ë0ŒØuÒH
+Ú8
+¿¸R;ZQeÄÜ¡Yœv¯Bi‘qëzáHNkÛC*uÎ š,3g<†p·ÜþO‹‚¤ÝNXÄÀÞJ0tµ²­†bùiNœj¨ìG²BŠŽ2¢·8IbÌ¡hÛRô¸¯ôy¥õ9‹' dfå@µ¬EIŒžU¡ZÞgFÔö˜Mi/5æ¬ÌrÂ4žÕšÁs^h¤Q® Ÿ±ui}KŒé1RMLEE<Ïe¤
+ÐT˜Ë… 5Îpïlã¢yé‹Àqû=ܸ¨éYÃI3a&n-ž²˜Ñpš/ƒ?ͳð§4©'X“H´—†Ðsz×|Å$Ò×nw4´eü`ìúÃ?zèÑèà4"À÷jˆ½ù*azrûŠa™‚Üä’ûÖñ2ò§?ý OÙ¿vüøã7ßxç‘#§MÙ/ŒO\/LÙVaÖW\¯¿úÆ‘Ã7䤄Mè¶Û|ô±Ç^|þû~ð“Ï?ÿ|}ùÒ{&r»Y^“30ª1’M˜`°UNôºUÍ–âÔÎƉ·ßzûÝWÞ¼åÚÇ&ƒßÞ»c‚¡ÆwÐêê9§k–ã‘UÓ
+½sÍÞÈ/v0c›ë®jcÇ}ÞˆWÓa'v’9£²5ovk~aŒ²•á2:e2¢m¦Pˬ±dxÕªƒ‰WU¡$µ¡d þ‰2¥<úž"ä`C ˜}ËA»ÍD» Žºo«5·ÿXº9%²“nÓ°KÕmAf¯H²„há”mŽF&WyQg¬ÉdCœ&`ÐL–’AÀ¿ ¹!Ý$ R©ã•Úa‡a´’Nl§CHFÏ@V…œÈ ³NšŸ’Ô¡]®øÊ€j¸8æ‘P’0YµIœF³
+ðd¾”ët×*œŽg0dÊ@j²«4á|áhØpxfí ÉòâéËõ“²¢3±ÇˆŒ•â]%4ÿçX¨‡0
+Y·tTÊÚì²)d.mñêé ±<ÎñS ;«:IdbÂ&q+ö
+c¤ŒN×—Ž¡ö[ºi?+Sb…S}‘/Ûéñù£þ¢F¶SƒÔ‡}HOtU*
+
+Â'F·•©âŒK?H¢³=¹Ù2xÚÔ¶un+„{gHú>m—ä×Y‘³æ”Œ$TÄ°]Ö,õÕÚ‡TŠ‘œ,R<7QK 1jH¬ðH Ñ[JtñÚÞGØçO Z2¼oRF·—\¦ Vß/èzK4xöY ;aÐL{µ]fc¢Ä’Ýj#Ê´;æETä«kš-ë ;áE—™ÞyX(Ë°Kð`Dö®Þàrç²*š­C¦TqNL8œ‹È¸j™S$•†P!‚wO»‹‡íòV†7«&‚¯©JÞéÑvÕk›ê¬aYy3)ö·eêke2i•‘órc”,›$+äΠœ…üãvé‘v3鎪,šõ2ê"ŠöÚV‚l’ÑH!Á9.É!mI!ó“µT¿C€HaBuWÙÿgï;ü›:ÒµG:ê²-#Y’‹ºÎQwwÈ&B àÞT-÷ªb[îÔ€ „ Ò!i²é…„dw“lÉÞÍÝì&»)»Ù{ïþ¾?!ßÌ[Còí½ñ·›Ý«ÉûóO8²t¤93ï3oyÐÈH¼ù¦6w^ÔéØFœC.[WUf+#ëpIši‰W!ê¢ùŠÀ‰“ˆ#NI“RËTÄK”íl0Ó¦û6›mÜL³…ÊQ¶>_¯Mš²A½q^
+¡ŽQœƒhmLo˜2˜&Ø)3˜ÇÃ$j$œa{íÑÁLºV¼Ïl~Z6"Çî–
+ûáqCž1b•xsÅí ©5¾ ,!h¤€79ÕkÎ…7Õ(ÍŒZ,ÛÙ†5—s<Ï=†—`d»Ø¶¯±„#s3÷ÌξpûΓUÙõé –âÜĶB$µ•]Q+£¸Öµî–¥ÚUæ»ìßÿà¹g/Þ{ï‰Û÷Ù=3722‘ÄÁØÿü™R»}j¤Fj\w@¨sðÀq „ö.tÐßâÄãÏ>wþí—ßüä“O–½ýüÛºré ¢ ¢ 4¢@F”²eB
+&жAÆ:…<#Æ3T‚2dA¾u`Z5Ï¢ðÅYñM·kŒBð"µúm‹TVYcc¸¹,JÓS•™^=¿YŽ?,4¦p< 3…°špíL
+Írx»¸âo³\É$!ÿ›æiþvëçëûùhƒ|-¼’Â
+¯°(+€¹ €r¹€ŽÌLöb¹ŠiÚ…PЂäe§1Ûö@4ð›p=XÒ¡#ê¬O•º•±%¾O
+Ø!¢¶ 8-Ýåê Ö¹ðU*Ví DYV;f™^˜2šauÁ0CøbÎsT;dŽ›Ì[m¶qÜ°#]!Â…FÃzÃäµó¥Óo¥1I#ÛhaâåJ¿‰W—¹€] D)Ù£ ˆ¢JÒhû¤Ò[ö¦ãÖé9Õˆ¤”ÀßØ%Í9ZAz¹¶± _6├?µÐ“HÀ×
+¯s¤ÊÙmÛ¾wú„Cûw<Z’YG‚jxº&Á!>ïædñÖL®mØ·m©ö¶Ëþg—ß{æÙóG?²wö®]{Zö“ƒƒ“Ýï_z?µç§Fj¤Æµ±å#‡e;è÷ï;ÊvÐ?üðɧŸyæÍ–^ƒ¾”‘[.äÝ´€…Ê•„+M–¡2¡f5ؤùÏ{êòÛïœ;õÊìè=]Þ­.Á&¶g™:s¹a˜{”ò;ÙmÏB-ÉFóRÝb¢H!‰˜Í##™-Ö ßalC.×°Û¹µÞÔYm,·u/Ko´pÖQ|@6š¸5%”ÇL9˜.#9`—xÌÒ6DO§g²b¬B‡õÔ{”Ô˜Mâgg¶¥ZŒ+±YGƒ£%}:¢^-‡:STb2a…’më8¼Ú<™7 â:ДU &—S˲ö|sÐîv9g’¢¥u”±Ym}V{A~‡õªÒжbç3 ct•WÍÍFïn ›u3ÆB¸ùˆež~Ü2ãzã"¯º5ñ“¶Ã/sÄØ åA=·&{W0¬»Ø%Ź¦!B@Ac„²ATv/Ÿ:ÇåþíIPÔÁÕwi n¢9BÐ
+9”
+#ñ+*Zž0µ²D…qÚÔoIkWƒ>ðÁYS€z-§Æ,jY. ¸˜»#šÀ*xF¦ñ”Å;J¼ÒÖAø²L˜ì”9ÓkŒ} –Àóê)›Ä¤‹ƒfëÅ0‰>¾]n׌Ã1bA©Ì1Ĩ9O¦teÖXtÄØ¢óE糖lÀ.k‡ðFµ@‹-Çb.p%’¨^„@‚"„’*«åÀ§"<LÝ  ãd»5%ËÌ4bT@Ñ'k>¶Ðáăfµõ2Ž¡"g´sϾÝO"84ó@!U¯IÎjÑÕjËÉp(› Ÿ{äé¥Úaþò—¿|ñÅï¾~é駟¾ûîæfªË~|pæýwRZö©‘©qÕxøøٹٽXƒ 9úÀ¨ƒþÕ ¨ƒþ«¯¾úä“O–ðíbÅÕ‡D¸IÞ
+ÊgÐa²å(VKck{lêp¡ªÛ­°ií<ƒ[my®‘zc犼mµ–ž¢lÃ݈‰ŽQâÀÌ«-RûÛ°ÛЩ#‡¨ŒaRŽ$Å—“!·ºŸuU´b
+4™¸ÕŒÄ[®ôÚí½8Ú°= ¡0ÒD@Ý^Ñäê‡3JÓ‹À„FHvÜ2d2!öi£i ãCD¨˜Ôj=e³¡ŠVÁs>5fŠCÃNv+ëj! Ã9²ahŒ­×&õesê $P[—ƒÒEI1/7ÇÏ5ïå,
+âk=¢Ò3\îc<É.©)Bôf–†4Uþ¬•¬y³ohνùZkÒ®nЭ½®5ç®ñhÿ{Ö¨]ƒÿpuP³""tÖŽS k9Ò›¡<Nº‹Ci©Š~Xá÷9Xª U’>§¾—±²Ý^ËÈ‘[£>V.S‚#·Ö.õ”©½r¸œÃÉEkhÊòâyhÊb.g̵ÐÕ…#HðÞHÆ?clž*œž‘GLÔ¾¢Z¸žÃ](΃¢‹¾¢
+yv‚‹‚9Ž™&! Aä Ì(&EbÖˆê3A“Ô±÷'¾ÛûT</DA¬ña ¿gQœ´“D~‡ä£²w™ª«ýF0%;¼àSNܬqª¡Yáy!k~
+øòœáÐŽý³g Ú?T¬lÎᬗqn‘$0Šx?Jã$wÙÿçþçF‡>ýôÓ·_zóÌ™³w:67{`,6{E¼u`pkÿø—_~™ÚüS#5RƒO9?7·?A%Çý÷Ÿ8söìKÏ¿ò‹_ü¡¥Õ Ï“¬–&í‡I2ô!``âÜÚ2ЫO¿~ÇÔ}ÍF‹Õ-²$-ƒ{<ÉŠÅ(ÈáR9f£z Éöådü™GvBÄ¢RŽ%³¦˜¨¡*Ê£Íg¬½gd¹uºÑÔq“%¶<×Ë[ ‚þ]ZQo—&`²Ä
+µ!-&åqTD­(V"bÞ*ʧTŒ;ÅÍ$/$¡tD2Üœ „ ‰A0‡×”MFp“×0ôzð’|¢"ºvd`ÆJ4A ¿>k^ÂÉ“p¯jPgáÕZÓCeÙ>«mÐj£jWì*ð³ !Þ`îr¹Fk‹ýØ"–Jèš¼É ªNA ²+äóõ·–mFK?gš%–Äæÿ)„šgØ*#T¤mši°ºF/Å
+8eH‡×…H"ŠŒäCùºv §m±J¥×̯Ã@‚¥eðsHÒu^£]ê/Î XlÇq>1†RœŽ]ÉSVoêl0uº\qx–*;rÒ—fKLŸü¦à@xÃVq³lB‰BÖ¸Þ0Ÿ9¦ÓoMš²ø@oœ0c8—kb°CÈ(D}Ž
+Pájø S
+‚Bá „Øúÿ\nõ„
+2 b¹iN±¦À;9Ü«d·U¥™»#ÆöÃó{‘6@ój²À­é 1øh~ã2]ÐDät:É.öWž”'K1ª‘ É…½’Æh¡ Bi¬Ä!,Ô’K"m)Ú:ŒÎûT^¤CÒd”÷;˜^“y›ÛЉ+¨«“”@á+¸
+ÚÎMk•âòU ºµ§ôÖ _œ9÷Ξ…öÚá‡Þêúƒ×»{]Û“¤é—ñ÷´{´ÅAqéfÂV,k9„VN'b!;G™-‡ðu€¶GÍæpsI‘´
+Ùï°¢)+Ñ"õX\>Hè”$’âÍ›uœZ£¨5OÖæÖÃ)‹à^¼a‡}Ü힟²õæþ[œ#U¶˜“î(“û!h7dãÜn=™™¤é)š6aaFÛ0[ùæt^ÍpèaãŠZÝV“yt>‚dKN–YéÖ6ÜÄȪ4žQàì¡(Âb!¶R(ßuí‰C ZØjj©$Š:ËpÇâàBë +n‹õøÐOJÇ‹5`V*}+
+:ã}wîß}¡žÖ™Re‹–s „C^²–}I¢Ë^H,gxÅK ‡>þøã—q—ýŽî½Òe¥ºìS#5R€w^gnÏA „öß}ˆ-zøôéÓŸ᧗ßûüóÏ—–\ºeÍš(º‘ !%ØR¤¨yïå·ß{ùÒ¡;Oõûo¿ÉÑ.èEMëD3ô²¢Wð´ë¹5ì.-¢-=SÒë7ÒÒ€>­“‘ø¡ sHZh©_>HeÄXÊ ¹lÿ(ÆÝd§!g7aÅÙìƒÓ1S”å³ðjH>lƒ´ZEÍÆ m0†!x†X([1‚ԬȸMÜß]
+übThb«¯,À’òeñ¼ùàBÛ`6M ŠýzQ ˆj£mŒ­ŸÎh×€ÖM–…€
+B²LPkàÕÓiAx ·iûõz¤Ú`uD1ÏÞm«,#70ƒù–PÙá_©²‚ ŸÝ+ôƒc(ŸÅL^­àONÓ¸ÝqègÙl
+†Ð¹™Ì¬~G„KNçå åúÖùÃWÇ‚ 5q Ý„–EAs^«hÙa¾â$ORWž¦ŒÓUÍ?è‹‚~ûèã/DÇ?õzÜÜ~ÐXù!OðwBÐîÖ—¶ŠË7qér`¹™“ÎV
+åq¤,2Éà÷
+%¹®Š0 RšÞj2Oé S¸¡{8YíÅ+Œ£8.)Ìiß@D1'O²ù8Ù]\ÝB?$° ¬Or‰q™sBS:g¿ùÜž#,
+‚vnëÞ ¶ýÑãÙZRûº˜úû£ y,d(kVlá˜ÊùGÙD´H@ ÍÆÉ,%ýFÓ0ÍÄó´ÝzY’ߧÌÀ­±‰[‹²ƒ.#ƒpÊÒ¯–m]˜²`:h<e-j8Ÿì¨"=å™ÚÖgµ8\C•Y­Ö´€KÜ”ME-ú°Ù¶X¶Úmc Ð5¡¬(îˆÜ†qïΤ’ì);šÐë§!f3ç{ðQ•Ê¢†¯(.Äjp0ÖÑ•T‹UÒ"DH^É¢$IÆD$8(—IòRR¸Ê®]bÁ%&F‹+aHÖ¿ˆL:D‹½©0"B« kÒÙÔšî÷oÙ>07{avÏù[JûŠ2•`ÉY-Àôòó¤CIòr®sSah©vž/¾ø⫯¾úùûžîâ=÷>vûÞ#{¶îžHhÙwv_<›ê²OÔøß8 Ô9pû}¸ƒ~ßÁ;X tìÄÉSÏ?ùÕ·~÷»ß--§â;/¼“Ë-ZÄ1ÿ©á– YÇYo7çSž7žóÝßzì‘o9^sË0#ò°:_ÿcãóÃ,"2‰ýС0¾l”ÕXAzƒ=íN
+•¸Ü‘e¤GuT!DÙ…ƬÉQ +È87'ê¤XS,)½u Á¿…h7W¨üHœžt{,i! Ï;ŸžàÖÒémnK»Ý<ÀðYÖ»¶k^½ø AKÔgŠ»ì5ÍoM÷Ûd=ÅÊ€]â3ò›µDƒEì­ ¼ŒmÀdŠQŽQÜð5ÁúPøÓ탰«'ìLîMcƒB¸-n6-jèF²ôCÕ} ¯(| A´‡›ë#èD›X7ß<*°žãrŠ³[t«ïËY6O  —ï~ðÝž~ˆ‚nßØ~ZAÿ£PP 5ŠÊ¶pŒÀ¸
+c¡U€_
+8 Y9ªBmjš£Ç—g…à·K4°qÈ^³-=d£{ò ¿÷Ð]wÊÚ°B½Nq¦°…PÒÚrd}²³HpK[Müz-Ñ‘R¥Âga†XÝ7~l¶q– õ ¢´‘¼<$@ÁOBž·ì”éô¨0lÑ”M¸VÞÕö0MÏàéÞE3#+¨VJ>ªOï‚ד)ê°ëBË–t¦a$ó}–>‰„YDä–4Bd.—!,ÄjÒ•+‚43àt ¶ï›~pvÏ ûn;[žßë–ÔKA½†[yõ±èŠx«Š°Œv,Õþw3‡~úÎOºì]Õe?00ÞÕ›R+KÔøß6¾ùæ›ÃFôs{ïØϦÆî{äÑÇŸyö¹K/¾ññÇ/m±4ê ¿&5–A¬4rËÄ­i‹FY–í?ú…Ëo¿óÔéW÷ŽÝÓZ?•ŸÖ(•F¸’a1 @е0 {¹52^{ò/áéîÒ9â³4ˆùuG”Š1•r¬PÕm±`¯$ñDLgpH[s8ÕbÐ’nÕñê‹HŸGNÊIEűGËae^CWç¶æŒl†èÅ–´ZûS 3±\‚Hþ’ÅBð`®æó2Ú¦xž¬ 'Üï»æ¥<з*A5ô踵ð#Süö^‹[càT«A3të85¶´€ƒî¶`¾—dÖœþ»íÛŒ¥àÃŽ5l¶@:/ý›3íV¡v9wf÷AY'}Q]P+WÛBX(hœPø„%=“ú²V•›gÖ¿~â ‹‚>}üÌÅØä§^ïë¾à~˪÷ùÂ,‚¶Ý´²AXZÃÑUÛM_E€ãB ƒ8  |-U\’fý‚½´åðËämfKØ™0p6 ÐÔ_wÊB2PG€n-·B¿3—×dàÖêÑ”ÕópLFŸÞ§ Exèéä<&]݆ӗ£×Óš‡¿²Sf2£´fÁ›YŸ=Ž%Ìß&|œ}Lç8M[‡—e·WȽ%d ŸìÌ” ;ÅMV‰âMú üÉ6‘]ïà*[¼
+‚HèÀ<•Ð=>tò©§Ÿ~ýâ«ÿöoÿ¶´TBpX¸RÞÊd ”Î[iÖR$ªs^.o+0…ŽÞvüòåË/<ùú[š·U|úôN»¸Y$Ž^ %×|.”:4°Š`ˆºS#å÷,ìÒè™ÀP1„à›*ãÅdP›;I[¬Ö‰äh vCÃùæ#hЀj>ðiÀ“¨u™.D[cNm¯ŠÑ ýJв@¹ì¹Æú‚"\²¹¤1šCŽUÜ`R\½Iä«R´º4CŒ I jp Šïp…
+QT †º²‰&øÑà‹g‚-bÐÄÁLPkâ7T(¼Œ#l6ÏX¬#4b} Ã÷…
+ÒS•Q·Ž_ÔÉ¡®ÉˆeÕŽ
+ÚÉ•4KNpE§ ÁbÙœºpDzÍï}h>ôÄ™s[÷þº-ôGg¦¢þU‰òŽ‚ }Èô×6
+‹k8Ú•@[…)ˈÅBVNÍÄÛ’u¤Råsˆ›õI|;HzCÜR¡ò);-ÂÆ…ÐÿDR#i’v‡@|¦l‘8}m$h2 +¬ÍºÝÂÄ¥‡[ÄdB¤…˜Æyäºâzn×[Måw‡XøªÍš¨"=HG˜ôÀ¹3e£ü&m‹²šòyîq‹~"¤Æ§>(Q·Ù©n%ZzqR—ËF¬bÏuW[†‡£Fó«LÈHe
+…ÏB(dQ›¤…e»."Jþ§nA%)¹sªç÷sÚÏ-bŸWQènÑYŠ‘å™Ý¨ª™Í˾æô½f&KTˆ§z1èÔ²Xz›ÕÞoµ÷ºÈ.°]ÚqÁóu³$^Ôê¹µyÊ.›•î˜™ñÊLŸMԜ˩€vð°ÄÔ:n­]â©PL²>#Q— .Äy·dˆ…4¿°÷ñk’:˜Ò@C.¼0iÖE‘û£w1[ùŒ¨„ Â1mcÄøçvâÙ.—3™ pÆBÛhkÄd…¾R—3Y!ݼ‘pñµ±zžh–ßÃ4 ‹ñ•Or‰© [_ΪYÇêS;îN$Åž™;üAGDAwlj?™iû!  Ö. Ó‚†õ-¢å5 ÷]Éb!Ž¸p1ʶcúˆ{+)/#n…SÆÝrPǪ¥ä v)ÂBFâÎúÖ) ªP X5?×ó•E$¨aãxŒ~Ðb #…Vs±ñ *¡a\𼦧1Ñu”õÜî1Œ…P’çШB±
+ûZ¥sRÝÅ™¨Ð
+?Å(ÆBðÅ·éSzÃú+ÔßeЮï+V…*Io5œ™1‹}Âo À.Ze*ÐÄb!hÑ/œ8ØlZìÉJïÃí è¸QBŠU&KÌÂL²ÜžnÛIG{Ë4Ûe?Ù3[¨@"°9%ÔÊ2¸V6ônGþóŸ?ùäÔeò‰ƒwÞ wÁ‘èm 84ÚÙy[tGªË>5Rã_~@ÀOCóô˜UñÞ{Oœ={öÇ^þÅÏþå—_~õÕWKøvEÔFŠ(Y”Ó¥jxEn«Ñ<MÛ†<ëc]¾xéàOGB·Õ­²9ÂV{ŸÝÒ¼ò§¸éÛàP²)¨—¡îæv‹FÕ¡’˜AÌNïÅeB¨·¥€lw«ú-t?m‹±òß×s:ÃV[Ä%¸5,͵žßRDAØ6P ïÈâûåÈ#„®W,„Œ‚FΦ<ªÝ…Éif¬Bá§E .¬MðêVó}tz›Z9¦Ok‡ï¥Æâõ‚+Mú,ïW ‡ñÖçr€?Ôhž,Å0Šäè×1 :lD¾5¢7[è­˜M(–— :£ˆ²xbÑ•ÅÌlG=P•¶iáZÔ)Ϫ‰U®m\ÉB›áæïákÏq¹»ÒÌíê–•÷Ï&PÐ+‡¸Ô7ôG¯÷tcÇAcåû|ÑA{M¢hÖ¯‡¡äÜÔ•
+b¡RŽ„­f8Ú<÷ürà½QFŒ"œ²ôùé@S&í*~›1£+K1j‘øq]Ù¦tÐÀEw{?°a= _ ƒ¿èƒS¦upÊtd¤BîÃóå­"½œÛ‚ÐN„¯˜Mh«ms#P”(fÛÅ2m",„J£ÃHô˜C b2^® b?± órjFs\o˜D|Úô
+bí…4M½aC«Ð] rVeÅbãB GïvÃÙßÅØ¢d(GÔF
+¡šy ¯ àH@%šÒÚŠ1«Ø£#r8µpÊ2ACØœ ÖÃùR€ÍJÄð܇¯dN95¹â8ÝhÊÈQn<§pÊL¦¨Ñ4Á
+g@Œš‡e…Yò«DG4§Ö°Ñµ«‡àßÂW€W¢¤æÙ+!b·ö›Í[!
+r9cfÜF÷”©|îtO¾´1?­u9È3t0Öa·+ŽJµÝQ¸ÊŠsüFrÀ W™h¡þ'¿®kb~?µÐhÆÆ]¨+a˜eb„«¬’òÁËclƒðÝÎa—k&ùÞ[AÇÛ7ÆfïÜ7{nÏž‹ªzí’&
+lá€Q·!ïGŒ…¤„b!h˜—qÃRíKl‡ìG}taAË~ÃÃÓ‰.û‰®îî<žò©‘ÿ’ã“?Ù;{w2•Ð݇<uúôóç/¾wéòþð‡¥¥š ìÎ!Ü‹€<ñé¸7@Ou.#ƒ+¬þKϽ}á韾óÉ‘Á{·DQër…ßf‚^`=Zkê*rE­ÎþR•Ïš¤%¡nÅ}üήÔYOIú‘p€lâ„,jdå1gÓ˜FõŽ]ݪœ¬IQ"*¨£¹H E-™H½A JÙA4\êÜv½b¡ùZè]R¯;oc¡áByt¬Ðò@N®ÍKš¦/†C>«¸õ g ÙQ]k«]Ú¤i^« ÁÀoÌ%нDCJ🹜:>?!b–¤ :#uz¾B–b¤TÙ¡ÕŽ[è!$YN³äÃ1•%a¡Ñ
+jó^þ
+úå#'/Ä&~ç÷Øâß™·î5±âˆ‚X{F¦«×­k¸·€œu@¾ É*)<„…¸F¶¼Š¶‡d§JØ)íê,„e¼PQ4œ2 ßg·d<'­×!n¶ˆ½ðŸLFÈ.õÒÂf=¿I#Š I´6V¢§nùC¶¨Ã%n¢2b5¦ÂÍV¹¹“¨ÈaãŽÄþäØÁªôb,´‰Á±…Ö R먢|,þQ*Æ1¬Bp¨0³Çb ­a«}ÐméXFa³‰»EËÙ¤ëõœÍz¢Þ’(QûíÎA¸*˜ñͦîwÌæè-Wy錓Ø'DT„÷ÿÑ¡)ÃU–! ÃU¦É+äqµbtéA´L?cØm£×­zB™;g¤mK|¢ÿÜîsûgŸª²A4epÖÃ-BÉÍcsd^‹… ¥q ›–-™–ýŸþô§¯¾úꃟ½ÿÜsî½÷±Ûçï™Ù›Ð²‡p(ÞÙýâ“/¦¼Fj¤Æ¿Øøío»ï½ÉTB‡?ùøéó矿üÚ¥ßÿþ÷KK%tîá3¹ÜBÁ‚ôjÂÔܲlÎF»ÄÈ=ÎÌàùsï=ýô‡Çï}f4|lsÕ ³6l1ñêÝi­nº³Ð­³ô–,Û]oé*qDìŽþò,¯-½Í.j¡D½![Ìx
+#BQ¹x
+âH
+ 4‰êèí\i“°h??ëI.÷6©©I»æþœeÛjÿÏB›ØoOœ:?2ó[¿ÿ#Ÿo{á­¯H2°(ˆµ'(Kƒî–&ÂBAZî#[ÎI+Á=õ —v9Ç ­[펰ì&EݸdzK²ºJ&Ø̈?Šh4ˆýÙ}
+jLIÅ-Š!ÝåpFmö°›lËæÁYîÃÌQ( „cz}BСåÖ'šÐY)=¥b Nw.j6šÇØ"jL7=‚¤[“Õ7f
+W\#e½”‚ˆÇH9âWWâä«‹‘/o‡¨Æ*l„((laéahÈ[ô`£®² ¯ËÖµÊÞ·Î1¼"k#<w8†ìŽ¾
+Ç™î‡à\&ìCÝšh}ÁŸh­á%‘H¢™’>ˆýœâæÜ´^’D™•¤/_Ó…QÐÃ\EéyÍ*›7¤ÍÑßã™™½}öÜþçxÎZ
+¨Á­BBœŸ/ hc§L"AÎÚ´\Ï?fQ )X£1f6Ç 7Y0æ±lu¹†óPíÐÄÅ&ÈÌÛM–QZ.!
+ÅDSrÙˆ&cÀ" 8¤­¢èD\*lVƒj,ì».–ŽSmÔ祵–æø
+ýÕLg53PcêB9bç@±1P¦ôÚ2Úp•Áõ%n†?—EŠ;Ҹ͢†T×
+ÒSªö3Ö>®2Téôí«Ì±Ëí±ÙÆ1ýÑPens§wÛdô¹=ÏÌN^&oÖ "ºÆ b%Å'óLIpˆVqµo^xu 7Æ?þñï½þö¹§ž¾û¼Œ;f†çZöáðTÿøo¿—ò ©‘ÿã›o¾¹ÿèI¶ƒ~ïìÝ8"tïC?þô3ϼ;èáùh û&•·œŸD'›ªd»¢hÎÍ÷8ýôÓž<ùêöؽ]›GMĺä¶)hƒ{µ
+4‰‹¨¥@æ-Ëò8ìÝNWÄåœa8î¼Q»³ßfï-°´•åz*³ñ–®osXºá¶lµöXm½Œ½ßjƒ(꾺b!Év¹œÛ ¯a˜ š£™°É)ÌìªûVP¨=ÙŒˆ|#ŽŒv=·Vj„#‚¨ÉÂÙïê¹É5átE]d;%ì\( -2œüêãn±pÈ*õ“m§é©’,߇=ÀF b¢î¹FUªš%f™îp4 k³1è^«È-«ùå>Nöµ(
+\cÏ‚|FBPµYTöWt–àMÈAí͇ å³x"#öûÇN=;¶ý7ÁàG>ߎe›^LÓüS  ÖV»Z³ol๫AVàU`®Å‚,d!\%Žî-Ö!§;ì »²ø¨HX~ |ÅuÔY`#FÌim¥¤Ÿafœ±”+[uüˆo¡gǵF‹ÕNçá«$š&:$-ŠŒ˜\Žø?ᔕ“¾|U¯Á³Ð‹5L[‡-HÆwÂဘ|‚Q¸r1VQ%g¤~ZÔ’!Š"
+~PÇ­…ŒÍYàÖIúo‹^ú±†Ú­Yœ#Qgy\ò`iN«ÝÖ Ñ—Ë9ÍfåòÜQ›½®²BK[EnkevKEvkI®o™¾Íeéd¬½6{Õ1`³CtýÞ7–íÓåšDåÖIÆ:ÆX]v…2à¤zVf7yêg&‡Þ»ûÜÌàí.Þ:.ðÉ9k„¼›2p¦LÎ5$‡† ©¹º¥í²ÿôÓO/½ôÆ™3gÝulnv²–ýT_ßÖþ±¥%[KÔHÈxüѧÙúÛçÿ>züøÉsO=õÊ…W>ú裯¾újiƒB4¯LIägå
+n~z‹š”÷#Úœ½Z°n²wBgξ³oìèú›"nñbž•i\fâšáô%V”?âÔj-Vq«-=Xªôë½6GÓ5„Ê\í;+é±5æþtÏMÌ âée͹ÕáØñí! ð|j·šÍ[ß-†[èAKv¬’ô*c¬è¤†­"=U”הѩ#êq½tÛߌ…Zõ`m¹¾uEþÖBwlYfP%@AÓÇ…Ø òZaÐ@¸fË„Ù¼m¹Ñ?u6§îZÊteÍÉ”’˜ã¥Ù&i-Ür·ÀËÉŠ
+Ú¤¸<›Õ˜¨*qµ,ýQÂPš, 4ªqåÑ*-§VÇobć,X©jÍ7mÎ^Œ‹¶-³n½ÉÝhê¯1u­5}[ŠùšUñOÔf³X¶™ÍÓŒ-fa¨Œ-g´LîW*Ñ*Ë”/×»|;â±Çöï|tÀ7cáÜ ñ›†[!æ­’¸³žáóèâó,:îRvÙÿå/AZö^=ºìe²–ýxW×®¡éT—}j¤Æ?õxîÉàIG„â®±#÷Ýwâì“O¾øüË~ðá—_~ù_ÿõ_KøvnÉÍXTˆ‡…§•„› ÁSÅY
+lª©ì¹øôÏÎûÉS÷n,í[®l‚è( uKÕ‰QÎõÝôè9Õr~G¦¨Ë&j¶¤‡ò®JEk™Öã²wؽðàìv³'Ó|Ûö›,±zc'ܺo1&8{ái7/A ¸9#ZB{ØÌDÌ–a³%¬×Çݪ2¹!¹lT›ÖmHë$‘xÜ®cf‘OÏ­ÆŽã;zÇ›l®P6ÖYºWØúŠµ£ ™º н@Ò¡¥Ò¸59¢6“¬?ÏØA3q³ek)ÄH|:NõwxÕtñûå¬Rဒº‘(î½^" Z‡ÜL8v'åÂØÒh¿Ð=(ʃ(èA~FŸ²x"«â6×-ÇÇ÷%PÐÏxì…èøïüþ7<Á=Î5ÿ@5±ïidz BêŠzž{Ðb,”†±P‹…tœ²bµw³mp™cx…¦Ù ög‚f®Ñb§ Î]&.Ö€=·V/Ø2:]¦N ·ÐÓ˵«Ø“LÏx­AÔ!Y`å "!2¡™H‹Â”¨W-ìȶkÅØMÌk¶šÍ~“Ž×
+bíAM^wfY Ͻè ZÁ‘b‘z„…J‡æVèƒùn<eÖÞer?#jÕñ!BH>è„÷!DGp^d¢n‡¸eÙf·ôÑÌ(ÍŒç›:ì’VˆiáÓØ Ú·¡z5Ñz¥ç‘?˜M4£ø§Þ9œZ hT&L¿€z á}ÿxRHCLSpi°‡§ýþJ´|n•¹á“CðE²@=âÚJªVJëLƒB¯óè®24IQ‡ãŒ„?c‚Èöë…T&-iv¤ù²¶|ª­<Ë[dô;½p•Yýv×Ý9hwÙœaÆePjoâ“2Læ!“)œ“3WY%å·Rýh•ÉFQ—¤ ·94ÂU¼ÒèôíŽDžØ;zO¥¾I‚έjn¹„¨JÃÑ! /""9× #ôé„ANè‹©›—jïb7Ã_ôÑÅç^8vìä}GænÛ‹ÍwÙÇGG'û>r"åSR#5þéÆÏ.¿·wöÛAè.Ü8väaÔAÿüÅŸ¼óÞÿøÇ¥•^í­žTq Ä#JD®—þ‘œ³–ZÌœµešæ÷^¹ôîÅKGœè9\[Þ«Å<ÌpϘ¹±µ-ØU‰ !¦ÌBDÐ[D ÈÝРãÖRD€=_ Ea¥¨Ç(ö;ÄÍÖ´€‰ì-”‡ª(Ï
+¥§DtäôiµˆÔ.7wŠÝ™Vªì(%ý¨7Y9NÉâÊ4Ô&Ìæ/Äây5r:}ÜÄvI'®ú#èY´œ-&^S‚êH]L§Õ1ètÆÜnÔÌn·1H4!œ§êÓ“a›Ä£ufû¤Â°Ã.jΑ”‘>›¹FŒ@Ûœt*”j„(³EŒàÖb—*vps-ÇX ô}@r]¡Q-—i$l‹ Ðv®´UX:Îq¹'x’(UЖ{Ó=Úâm5½_œ9—@AOí>øNïÀ¼ÞC›;š*˜|Aÿ]{DåêSÕb¡•@œˆ Â&¸OY N™4J•í
+Ï«…
+^H&ìÎ…
+Ê’Uɽ4Ýêyè1ˆˆìRB]“HPßÖ·b!xà} ç)Å$•:ÍŒUl\pöˆ¯cBàa«’ POˆØuDƒšR‰ºÒÄCaXIø…ˆê¼=lÄ7RòúZ¼ÄxÏ7+1ÖR#Ñ|ÍlNžS£"¼|>|ÁˆX8¤uÒ"SÒdM2²®2¸‚òV)ü%™mnÕ€6kb‘b,4ZƒA‹È &£ä %V™$*ô¬[ÞÛÚ‰œÞ¿gyÆfÊ3¢è˜·J¾ R–lð— å]Kµƒ}ýõ×úÓŸ~þþÏ={áž{Û7wx÷Ìl¢Ë>>22ÙÝáɧ<Kj¤Æ?Ñøì³Ïnß{B·ß…“c‡?xâäã矿xùõKŸ~úéÒÖÝ÷@V‚ç8j†]“Æ»!³!ÜÊðë+²/¿þö»¯¿}ìþçÆ#Ç«7N™9[ú\B×kuI(]²Ý[Þ…föù,
+º%†ô.RŽÔ—hªå)Põ”(Û»tqfGéQan%5FA“¸$‹ôÎ Þ ú,OÏ6J£#¶ŽSgä7åI=…†6§kó7.8£mQ‹%b4FMYˆƒ%‡Š’r¬_IŽš¨¡y®`¢fl}.Y»Ž×À8"bŒ¡•Æ°¡”Õ
+« ×€ úÚ€0…Š
+ï|„U¸µ~“Uì±¥¬òîÒÝ3‰ü$/$A9hÂ/ûmtXÉK,±ÊÚÅlð†Í'ãÚ3AS§U(qà*3ˆnqcNFVúËR .¯
+E \d—˜.g²œô%Ø:hðPÀ®2ˆÙàËåµl®Šv·Ý>=µ}øHh½_ž‚s:RÁã7_ÉÍS.h$×-$Š2¹Žc{^ª} b!Ôeéò3O?{äðÃ{çí›KtÙ wö~ðîÏRþ%5RãŸb|øá‡w8ŽÐ^¶ƒþðác8õÜsçßyå­O>ùdiÉ¥/_|M»
+H›:®2ø½å©úòp\‰¤l”‘øµâ:qàU&â÷›ùõ¥ù]ýLÄÙ¹+Ÿw g5I9›)¢òjúúel)Q6×þÓ7–L\žÕ²÷ÕK¸Ëþ8Ò²O겟ìíèøà­T—}j¤Æ}|óÍ7÷>ÁR ݱŸ¥º÷‘GQý›/¼ö›ßüfÉ;è \7Ÿ((ˆâº¤¼‰®±LÎZSF¨$Çg³ž¾ÿÌ»—/?uêå½cGÛ7»ù¨=|!/úonÑ‹@Q AZHáÑáHܹ</Û!ŠfK:õ鉴Y]d—M1gÇY™ïXÌËIuÏoÔèÜ:ªÈ6‹}I,¡M)硼JmpksxÍz‘—I –)}vGŸË¹u¥et9Œ%<Æíö8m¡m1š=JÛ¡W-U†*~­vÜh6šFhýÒdŽŒ)mµ™‡Kd›ËDk
+ënåÛ¼ÿÔdëç¤ÕrèÖý\Ë¢rh6
+åe7 ‹Ù¢èÇx’¸ÜÕ¨]s<Ó9SZ{fö`’vƉgǶˆ¥Tç6„š*ßfüÿ?¯J”Gµ%3%5“;oë™9¼ûȽ÷<òЃC{ð“}ðø޻Ûá‰NÞèÙã\s†4ÿb)ÂSg)óˆÌUÍs­ˆ…nD¢¬Úceì131™¢p¾Š•ízýœ/hfKÌdŽÁ:Ã4Ä2¶™|¨"½ZQ4&
+˜³Šîß„¤ÀŸ¢@ ›¾ú9AÿA•r¤¨Ë(òY¥~#ÙW¡ôÚˆØÇÌŒATƘûKÉ
+›u‘bU{!Ù®V ø¾ððn4ÅJT •’õ7ªná-¯áZM¾ù°6 x\C áì'r®ÿ`Õ0~/ßÔ(*Ý%3 šÙ›´«ªŠ·/»õîÁí_Ÿ}’…@_?qæ©ÞêúÔë}¸®âç2rÿ! ÇÌÔÊ–c‡zî™ç_½ðê;/¿õÁ;?ýõ/õñÇÿvaüû¿ÿûGüâýKï½óÊ¥—ž >óÔ©3ÛýÃGt¥ß3a÷”LN+ØBÌc¡Õ€“à*àˆ­ú>£1jÑÆÜêþrÒ§TŒkѼÌ^4ef6µŸ֘Ù2c2oƒðN4tñŒd¾},¡\Ï>å‚¢îwt&Ꟙð‡zÙØ#*`æTç2~'¼ë4ÂCÜLKJj´Œô¹ÔƒX³#lf&Qñ¶u0_×é";­RŸT8˜0±gmRy[ë÷^e!œþc5õ’<“$A2cDI9©ž
+E€ÉŠÍ¯²¬IøM–+ƒªwA:d> áTãóçW™=ÍÓ±!žÞ¿ûT¬}·ÝÞc¦á b¦"§5—[:Ú"*y Iy>Ql&
+–p[ûúë¯áMøÚ…W;1¯e?Ýu…t¨·wv,%Þš©ñÃçÎ\œ›½5ŽÍÂôG›ï ÿå/Éf×ðíœÂ™\÷"~i1ïFw•R/TõØì}#þm½qþÍ;·?ÐÝvWIfqÞÞzu:À÷½á'ñjX1ኯQ,(—±t.nI#%G'ÓåÊ®¤z0b6£ªfèV 4gÇË”m•¤7WCù2jL1ä7¡Z€dÎä’A‹4
+U—Ó;ÒfEFÔJõA@«ÓϘéQš1™fXògœ ƒwÎ ¼—2Éa¥°SZ ×$ÝÞJP½(µ”l$hJÀ5Ø”H«ez’‰EC±Ï)m1§·e’19–£@dNõ Á0l4Žju[‘ÆŠ%n6VQÞ\jØ&ñˆ„á\N-~‘MW¯2ÿ÷^b¾fK†C|Е v€§©$/ƒ¢âpqèÂEÄ>:ˆš²Ç ƒPS£Œ£nj,'Â!/†Ca¡(’!¨Ð4 ´íÜ5zÿìì ½ 7ZÂVÛ˜Ñ4m$»åÄ|ð™L*¨Ëì²% w³]ö/ù¡‡OØtßž¹Xl[¢­l¼«û®‡R'5Rã8^ÿñ¥¹Ù;p™Ð¼ý=÷>öÄ™3Ï£zˆ‚–¶L¨\½%“X¾ˆYZÈ»YÏ]IÉGáF÷=ïê(Bï¾x鮹íu372x¸¨á¥á,äùÞçÖ`¢¹X’¤R¡ãÔøƒ‰L™^ÒF’£
+•1@ücfP¯=cCµÍèŒo…®m
+¤·Š “™¶Û‡güÜ?úù¯¾øâ‹ÿÁ-oà.ÿôøñÓ;;'.¤gÿÏ.ãu1Õ%-®&•À\ x,bãBy@JeŒÒ:œâFRÔ‹8„$¨–G ô5›‡Œ–Q³eš¶ÆQöӳഔÁ8ÿW%åË•÷爂ð~ã€^ˆˆ…¼KQ£šŸ[• N„J‰Ú!
+R£P®OnH
+ÿgh' ö}œô GÝÄ5VciøQ.y]ä³€8£¼L¯° ETºŸŸñÏ“\î‘*Fæ7iWïÌ.ÞoY9½¾ýÒáµ@—ï{ô©ÉÝoö…?ñû®ïÚ™¿á„Òö>_ôwîÞº/gù±»Ž¿õâ¿ûÝï¾ã¾úôÓO?þøãïnrüíG¿¾ïž“[ÛÇÞÉÿWòs¿]RRMØ*e3°Xˆ­vsÒŒ’€XMçwÏ÷¼së‚0ôÑjr´0³ËlŽ !0fØh‚ˆ(b±Ì˜ÍÛ,Ì°‰ŽB\]’2QƒV‰7—ïÑrj ªQà&¬L°Y·\dX«3Q¬"<ð.eÄMÆB1f¥úK•í…ªîDÛ#Bð½ôÿ—½ïðn«ÊÖ¿WW]V¹’l˲¬z‹ª÷š@ @zÜ‹º»-7Ë5vœ±!  -@z'3á=`Þ L}k½µ~Áïœ{mE±&€gæ­÷tÖ^^Š£rm߽ϷÏÞûûŒ6™"+3zÕ€R9â7‹„Q§11í¸è³~yºáMö²dfT-ZÇhÏa!‡¨Y­…
+:NÇ´Ë5ærÅAè†ÊãP¿»ßêì·ÚCV{/m‹Z,“°•W‰y†Î
+¶ç®—cãŸut}ëóíÝØ>k]û¼ÂøÆýW±ßçï¿}nÉã ps¾þÊ›3“wŒõŒõ·DBH¤=¾3vËñc§~÷»ß-Ùûo}ºoïýÛKjÞõÅ¥Uº!6!Âd,äD¥`Wc#•;®X&ÔÊC.¼“6
+¼Í’Ö¡ X= HÓºÓ¨…š5è|oÀH `™H#À`<~D'jÇå°ß†í.[@Ôc4Æa/·)–½Í‘^¡ìT)GMiíQ8‡ÓÀžÕ¨‘º¥(‰¼Ë˜nðò¹ø5ó’ÀËI‹ï&Í}”õÊ‚ÈöÝNç6—k$7wÈáŒÚŒ—9€‹õ/‰²ö9}]îí;"wî9yÛΣ7®è\¥öšÓÚdH;V–LîÊ̱dbú{g\®XnÎ~øáóOž8u÷Ýì9°säÖÄ”ýp,§ìÏ^HíA©•Zÿò Îí·ÞÐìÞy ú?zì…S/œ{ã]†//zóÌ{9œ¼ÅÒ«éXÁ¯ù© ïZ­ozçõ7/ž=wì±W§â÷6®¢±ÍL›e7C•Ó¶ ý’†Öʼnö"Ñ®îLÌ §TÄÑlYo¥ÚKYûs]£É
+œs„°þ…ñö‹²£øJwöu}9kK§Jjïê¿Ôô‡gž;±÷àéá©ó=ýß·n„zakrß)þµ|>ïˆðÝ¡ío¿üæb ¾ó«>ÝÖ¿£±Ì[RàÍ+ô®,ôæ—x
+ š®ÍkòmhßÛýÑùwû€ôòÉWÆ¢{žR‘?ù\ãúDeUª !6 ¢y,”° Uðøá ¤IŠxmϤ]Æ붉šUÊ‘J¥Ïb ³Å)† jAL3bvq¦}hÚlÞ‹­t¿•«”¢›{u‚`Ã\-CæÔÍTH}²¹Ça%
+wx”9š½}K%tßc?qòäÉw_yûï–~ÆÇ™°•bîê@ähw³R1bQ\“ÕøÂSg.œ;ÿÜ“¯ï¾7°jÀÁßÂ*h,jæüXˆÌÁÅÁ™‹2Q³%›T3F¯ß"ôx/MCÅɤɯqÚ6LÛ ´}ž±¥8'Pªó‚+Ì-º‹¶…h¥:úlö°ÍµÛcvGØê ìƒ×£Ž ÂïDd,êAea,ã'ÁžÝáWÓÁ§òi”¶ óðÒÙ“Ÿ§1Þ]BÍ6™µ=³¢AÓîìÒ[œ7M®k{næP¢þõÅ‘'NìÞÿRlâÃîЯ=Þ½›Zw­ØøPÖŠwEøÿnÃɲºgžz öÅ÷Ògßð ø‹WÔV›OK3Ø—œçK:-×W­ÜZ]î m{ë¥wþë¿þë¯ýë7_}sñ­sOyfÏèmÃñž@ÿpqÕO½žyB7ÄB$ÀB71°_,dE•8·©UÁÁ®D×™­
+Ãæ´V#ÉÕ„Hr@oØNX#lû´Ù<m¶LTœ´F
+ ÒUÅ"6¹«c>IàŸ…Lt2¤^ƒlÎDªåˆ‡{eÅI`9 ïDwyf »m÷K“«NPô0eî­À} —é¥ÝDZ«^Ú¥V t—…Gi¼·@ÑZ¡ô­Rzƒ4)eŠÀ ¨|d-’Îb!'çJ˜g'G<Š©{y¦ ÀÙ$(l–v ò؆Ÿdä3%¥»ÓKšsÖz 7Ýn(ÛíZ¿í†à}ñ™?Ï÷?ÿê‘'Ÿ¿ùŽÓÃSïõE>lï¹ucûtaÕSÙ³¸ù}¾ø Éó)¹~ÿm÷¿ÿÎIú¿ñïã=ãùÞÊÍ_aL¾C}]eSËàpW¼Ç?ØZ×ã­ôÞï.Êó‚ø6š7¿,Vÿ¤Kº Hk,d)EˆaÖ!Ë"`!;Šë82x˱\:—
+XZ¬Y+jWãÃ
+„‘D›€QåXÊË‚WÇ_ºþIcÚ¼NlßóèÑZ‘0¬“†
+u-v;L7òè팗Óö°ÕÐWŒÕx<K1`’uêe]ZyŸZW)†uxئèÉÃÛÊp?t1zY%î-Ç}yŠ6­2V¬ózë'‡¢Oܾó‘pp§VЖÉusO:z A2Nî8¤àÌ\Û2†¾¿ýío_ýõ[/¾ùØãOß¹NÙÇ’¦ìÇ»»÷Äw¥ö£ÔJ­ÉzæØIv‚þÖÙƒ ºçöÙ×μñë_ÿ
+;Ï;…èÑý”ÙÀO඙‡ û-d”²†Ij‚ vPÔ$C*> {`Ìo¥Ò[Œ\x§‡u[‰8–Æë2 5rÄèù!fbq¤Réo > Ò\¬Ž°53  BºzÜ“qTÂëIˆš-b«ø»ÍB^µ%7áH-@>Z(ˆV'X$—ƶ6 vÒÁEº’¿¯å6;DMð8ËÖïtL¯"G
+W¿ª #£Ü›}]½þ&ŸqÝ-9ûˆÕ»Vnš\Õ<]×÷Üž{¾{âi
+s.˜)“b6%‡,N¿q¹bà™õ«Ï>ñô+÷ÝwtßÞ{nÙ9›˜²ph¬³ûØÝ¥ö¦ÔJ­ÚzÿÜû
+¤6 i!îäáeá¦Ã2­¥DÓbµGvfL̶Û需û‘~Àw+åÃZq§˜¡z»,P3 c|| B7c)9‘ÂF½1vÂK"‚ÌçjŽp%·Ëwæo\ã›®ë|êŽÏ9úÝѧÎ~žóÜrlj©™S#Ó
+å¯Å§‹iÂ~
+ħt¥]+ íV{ÔnÛ ;Ÿm»s]ä-BÂfå B׋[`¡„—ñç¼lοX˜´à™é¼Ö ==î™±Øcû'ï+Ó¸Åü~ RŸÉYÅãÞ Æ.§â<(Þjj^¾)û¿þõ¯úÓŸ>ùà£Ó§Î€»wæà-“³‰)ûÑXl¤³ûõ3)-ûÔJ­ÆúíW¿>È
+ðy‰Ý„iiN ¼×§3¡`ðXµ#½Èd[°
+Äx ª¸JÕsY,dEÓµP·Ž¡¨ÚÌC:•—“3€Û2‡S¯vgËú+q/$*§ÃËINdÜlÌKïbô¶Fq|D©ˆSášP ¬Rú]ŠÐÑ
+
+ƒþ ±HÿÃÛbì=˜+÷˜Ð›
+bŸI°ýfÆ,ÂfZÔLK¼”¼g…¾$§.çèJëô{¬„ž
+Ñz9ºnú´”<’áLa¡ŽÜºC÷],÷Ã?Ü2q v]û’¯Úc»á駟{ñÔK§O¾xêäé“'^8ìùSÏ?ØsÏxž±gŸ{þÙgŸ»çÎw9oúIWÕ§¿¾YPXƒä¬Ft•(°Ð*„WÈ Q¨F†Ø–›4Ä—ÉókÄÝR^˜é–!ö,üSÎmàY§ŒQÙ³ÓŒ6Ù
+!-öÍyÙåX\­ ‰ßòRQ­^¢­H%E¾¾š±pøøÍñ{c3º–-fq*xÜ”X>waï=3/û”ý»/¿uì‰gÜy3e¿'yÊ~ûÀdjÊ>µRë±€gÝø (»
+ÇîžÓ ø؉'Þ~é­/¿ü¸çòzŸ ËS`Åò¤N!+dªcå(âÓóóÒÜ}ìâ… /<óöþ©û¯é¿ÖДŽÃéJä£<Þ @;9œ`Ùœ†Šmn~ü—žS'ƒ©h©a‚3ÛÌà ÍÈV²Žäl¢ùµ.©¿4Ãë2öê“fr˜ aà€˜ Àž0e‹º\†&1n·í€”ÑÎa–êßnØÃ2ß:­»6™ûL'm‹Ä€i@W«€çBl¤#É!»B‡6€y4R 6•z„›ÀB>Nö(¦ž”YO·§°ÐhQÕ=w?2è%°Ðø-UWÂB<úô̯¯¿þ:!^ÿÍ7ß|•´>>ûþŽáÛv:nü äB\A‹þ&·0¿Ñ]ƒd³X¨á³3õš%œï%– ¥ [%‹™…>gÒƒ›!)Îf""aX+ëƒì‹¯g¹Y©ÖJU@§Š)#ȆM’v¹d½µ2Ä!€ Ôiaœ9&"ñ¾
+ÜïÀ{
+IDðþŒÍ¡td´ÈB¶ˆç~¨>¬=U™Ð›`–Á«µ§y‹\C'A‡IÈ)úhª«Tç¯TCú,ޥãÀˬx¨÷U¦{óô­VºòÚXúèñÅLÑõæ®ëç¿oµÆò²;à¥2^¦•†X/W˜
+àœ²áÕ‡zbÿ¾Ã3P¼u{Ru×]7Lí\©•Z˸NŸ|uvæv–S‘Õ ¿÷¾£ÇŸ}öÕ3¯úɧ Ñ^^ z—dMÇ!‡ÝA+@HÁ9.ð€¢— ›9ˆŸälôÜÀLП~Oöwî__ØáRvZ•½+”¤ªJÀöQ†$DWʆâæ4IT$УÕRħ†ÂÜÆ ¤Àft…UåŠêË2ÜÅæ ÕÖKÒpÜØIv”i<ùÊJÞi—xí¢f“0 ´i„íÙÂ6£0à5“’€Jƒí©ÊrÜçÌé!I€ˆ¬Ö1æ˜h.D—ScÌì¡Ã¾‹¤GL¦˜AQ*Gò8% ˜ÅA¥“†\´Xó’çösz¯ˆÇ†ä,ÔÄ
+£Ì¡hTó‚¨L&E>¨KÊë¨;¹ó9>p«N&PËcÀ›ph%Þ^ˆ·ãA'Þ•©Ýnó^¦•ö/ƒœ8áŽ#,»© ©ÏF6ZÐ ·Ê!i.¨ÆÒFY{Y®õæÖJg%ÞJÊ:m-rÏʶg;ÁWBäu‰Íim¸<
+qfEƒ—ج£ÉäÒ+¬;ªLÝ$ÔÝÈÍ!©‘•º.¦» xÙ°:-¬·±˜0áe™˜Ws…î&–Ö‰%ŸL
+l¼.àÐÞ‘{+þa@-hÐÍ™œRXÊŸ?@HÆ¡˜ö!g¹vËrÅIuAÊLÙ¿|ßýÇöÝzhfÇÞXl"=yÿ“©ý+µRkYÖÙ·ÎÍî¹öK﹓Ÿ?t豧Ÿyæ•_ûä£ÿð‡?,ï‰ÐõT ~XŠiV$Æ*çDÇÐÕâ7!7]K.Bvé÷îºã¹xÿ=îucyx+œ”ÑÄÙ&OGf¸÷Ù•=”²W Ïóã6a³’¶·Ùƒ…0/@AF´Êί+ÉòÚ}.׫¡Æ r°Ré'ä=v±Û$ôkù=Ö
+6‹J¥¤ê VÔ˜ËÈg‘îêN’†û—rÁBðè>iœNŽ´°º7ß7»ØÀâ@òX,ÔÎ ,D5>%¥+-),´Ç¾vßì}ß,ÕDz÷Gû—ÆB·’׎„wíÛ?³í®Ûw:´ï‘cGNüêÃO£ýOÏ0Þ?y‹õú«¿¤·ÄêzÃz· ·ɾQ•¡J€…®GÐB¦FF¢¦r/ƒ›SÕdìV>jù•² f8 b¬A/íÉ…s^aF¡lÈ•ëw@~E*JývÍ€a‡¶HZ3ÅÝÂE ÃìÐ"ÛžL“È6?ƒOLGU²ˆZ ±N8$?լߦÓm[‘ªTzËð<–&‹ƒd!“ëÅO² EZåH]²ÕÄ©¶ êK5>‡³Ïå„…- 9îÿUJ¯QÞo{s„A-Ï«?§8šSm@çLƒ¹ÁEŠÄQ¨Ý)nd¼lxÙ*ÜKä@å5‚‚õè%ÔàGœ†x.+ÑC.qãâÆiàe´F¼£#[‰†m{ÂK4_àbø¼§¨1?x
+ê\µÚ†-–Á |(SСÃe°º÷J½`³
+¬•Ç ïpŠÁÅ
+ Û,}àÉÀ1iàw•\京wš³›ôEC¦™H#Ó,M~!@h ¤~Qºv éïj;½9z¸@T+‡i‰[€ÔÊ°Õ°Åñò>j`ýÐí,cãHH?xïÂü”ý;G÷&´ì'Ç»û?>÷Aj/K­ÔúÙë?ÿó?o›=ÌNÐßqûaf‚þ¡£Çž8}楋ïœûÝï~·¼'BÇ|6‹cƒ@
+¹$XEe™c
+÷«¾Ä”ÖN‰|‰ŽŽ%‰M”XKÖåz” }v!¹,ò""ö\¨͘Âd
+(Þºƒ‘,Ëæ¼²løäOúÓ·ß~{îõw?ûÜ]w=8»çö‰ØÞéÐD_ßdhø›”–}j¥ÖÏZÀ¹î¼ý!„f÷Þqû•Ðc?qê…Óg_{ç믿^^ ôù[u»œ“«â¬HÃ*äXé% „•q þWÀιáäÓçÞ9uþ©£oÞ2|Ÿ·nºÈ ³Ã D䘙,žß"Ë`©2C4Z£`H¡E°u³Þ€Õ[ÒZKQ'³e„¤G¬Öq—st>Šî¦meJ– Èòü£I’dÉQš·9£Yäקuár>ϵUTâÞ¢ô(ðMEÁU%½9{.´¢ã9èÄ»”Š¸Mì‘J"ìÑ}rWçóz’©´XS.âd±3XHÓ†¦OsÒvHÉŸJzó¿Ò>åò'=Ýn{dÍ n¶ï¾ûîÀíŒU·ƒç\Í[M\ÓôÀO¸ ]üp¼ol–XýH§å†¦œ¹¹
+÷ ®ƒ½C,€%NMÒÈfp«Ëz¦‰RZ©E!,¬QÆaAÊ2h!£ÌÀÚä¥7§#$Ñ¿RÑN
+=z´FÔñ?
+=²h™ÂïÈî³ð8Èl¹ÌË`?ÑŸ‡·ZÀ3™aLö<‡‡tjx^»Ä­VŽ
+¨q#ºjé
+6¢Á>"›T8 ’GUó©e>Þ^û Õ‘ uÝ–(f9\áUéSZ;ï´j¸L´la«Uè¶HÛMŠþRÜ¿Jí+жMi"_Ir)½ 2'NQV=“á¦Þæp°¤(
+AHÉëPò;M€QÚPG¾¦ƒ û)+¸™z™…˜¤ÉP.Þbâ{Ôˆ\#RSÃŽžéÄíJÙÜN–zت ¦w¦wéõ£‚‘?›çÿ¡l‘r¥Ï.ñè…ÁLA{/˜Åókx­ Õ*ri­”"T®ô—gúË´^«¥—mÕ†FBÿ‚_‰ˆÙÕ¶%.Òá€Ó 
+ܧTŒhE|ÁOÐ ñzżÞK4D‹&:ÕðÀ§
+üá*Pƒ…ø,"82¸¥¶1ph®kh±æ;Š´²}kìÁ@D‰ÁF(–'l.Àƒ4Õm!v,Ä0–ip㑶°…ÛM=%ém
+àøˆVØ~•G¯KM.yÁëÒ£ÕbÁ€PÑbîtX#keT{<Ì
+a&è_ùð"œ _Þ¡ÖuƒéXù ”ƽÖÀ¹&æâåÿÅ=/\¼øÖÙxi÷ðÝÝîÉ\G?ˆu6Û¨Ë5Ä@‹i‚a3/§Í&o7ðÜ
+ÄÇ„èzÙüÙ»­eª 1—¸j(†•ò‘tÕ(;bPEÊ™Vj‚cÏØv€¬Æ 2BÒ}$Ô
+êN/©æºª5ƒ…¤É:õfn¥‘S£eŽY¤Žý„‰Ù¬@š•ˆW‹5ƒÛ& kžï|ÞÂüï&â1a56±¿À$é!¦Yh("¦H[N\‚<i!ÁW€è>Ú>À¼j;A
+j„i®‹]Ð }¹íÎu‚
+&ÖXƒ-»†£GAÈʬgø rt˜»FÌ]|:ÄÇ
+¥Z‹™Ÿzàø2ž¤õÃ÷.<âäÁ»Þ;s`Çð¥±2Ø;Ô7þÎ+ï¤ö»ÔJ­%×—_~yëì!Ý~ð.¶_úa
+~
+¾ ’ÀBuˆ¢VÊð*» E·‹Íïó%)”lhžêŽñžÑSϾôKæA.ðÉ…wÅf¼×Šò½ùùîY? õª
+«±Ü-H&øÃU¢iÉXˆæ_c{+Z-ƒ¨fkÃá
+œô›Í“)f4 q½n¥‰ä䌃ïëõ£´2ä7²kSh¸’úX‚(8A[„,ªFðNø@>ˆˆ
+
+k¯·VŸIKÿI×
+•
+Šê
+óÝGƒÓ‘ G _Q…9×3Xh5"bµYKŠ!R¤­}«UžlÅ IÚI⽫4î"CÀAtÒtˆ¶†(+À3àk/eë>b·vVd¸­"mÌ@ª™ÊÚe55,ר3¢Õ¿Þ!n.ÀE:¿Í"éØüaÑ4IQômX鞃¿(Ý»Bê±
+aR`âTe£ÕH-sN™%À|ç¶+ݨà6@.óåptœzÆËj P¿¦x™6C/hmž¹kÎË€Ó%ˤ¦Á~ì&à°
+÷štq“yÔBD*•>›Ø#@/ûƒú&˜õ2¸Û)j´‹›â&§¸Ñ!ñ•j? %˜ÃìØÚÜoÏ6¸JåÉ‘õ’’ ï,Ê ¬ Úr‰¶•D[ÅÊžnÿÎ=Ã÷ÎξÜçž°Ùʳ<$w“†Sɨ•Í5 ±•
+Ž‘Ë¥\‹…ëXÆÀþç?ÿ™Ñ²ãÑ#Oݹÿð-ûñîž}Ó÷¤¶¿ÔJ­ÄzèÞ§f™ úýûØÒØáG}âùçŸëÅ7¿øâ vNs?΂]6^ªâ¸X,¤F¯é¡•_“«l¹wö± .¼üìÛû&ïoÙ/P»-œ­ ÎA6³µ%üÓF½ÔŠ©T\¥)‘äAZ-dš1
+¥¿\á/Äa'v^FA ä6Ò
+Z@Ò
+rÏ´æG®@58Ï"jË” ª”£ZÕPñ<ªAø別áÔ ÙUÚÃu4
+òÝÂ`‚ↅVZ/\huÂòŸdõ¢Š†+[¨rI«U6‰+’¬Ò/.Ö%*ˆHVŒ¦9Æå¶(¾²'£Ä§½Ö£¿ñmf°ëCžè¨Ú:U^ÿ­× l{qí/AVñQªruI}a¡wcQsÓµþÖ-ÞÁn¤; ‡úÛâ¡@¬×Óß±¹#p]°¹¤éš|O^~sAQu~a]q^ã[BÅÏþô'TÔ°ÂU9oBt ,TÉôN"\sVl¯´½µÒãPö8Œ=”uØåeX”a¹j©ÎŸ‰C )h–#~·.¸'Ó!u3<ºÂì6âOGª´È& Ò‡Z3VCòêÀK¬¯-Ío•mb˜_Xy5VeæT1L°BÇtÕD@ÈôH«zþ•Å2~ÜäÌ,«Í‘ßœõâ-É^Æ¢-‘¿
+UÀ®ì±Y
+ä}"î5‰Æ!V(ãXå˜Q„™­ÂÒeÌ:‚Zö§Y-ûC·î¹5¡eÏ’Þ“‚C©•Zp?vzvö² ú„ô¯Ÿy _@·û —_Æêr±bœãTsrX
+çm}ÅJ¿5ÍŸ!ìÌÁ”pÿZâ‚uœ• '[Ö_‚J³ü$J`¡ùÓ!ubVŽ˜J‚µ"„.B(ÆÀk!b[ÒŠ{!4Çb+f¬q.eà¿J†:Ë–²rÔ±
+µW2¶µ]Çبu=Jo€_­ë9öõÛ̱sTc¹í|²IPx+?ëq®¤7½ø”LÉéª_Ž…X{S$¯%7ç¹ó ›+É­yyMy…
+aÌ–ÄQ§qg@²‘…"Zæ+SM«šoOÚ nû ø_›˜Š3œ@KÝ¡•‹tý$/ã!,
+%AÄŠQu)ª,û{O+EUà™?b…hFQ’£é¥ð¡•¡ª
+øàºUW ª24}š¹
+1” ô&$gfÃðFAésÎ~QöA¥
+ë§sÊnçíEª -Íg´<Ÿ)ÛìdRzð˜ë'E^B*Ì ÐŽ€ \NØ@57JPÖÞ"]K9î#!-³â¡Bm e€MŒPdÐ`˜`© :
+ÿdÌß‹¢{<ÕÛûïÛutïÍϯ[Ùe¶L”üZt[¥Z$ÏLÍqô¸#ËX)ûþûï?¾ðÁ §Î0Söwï¿4e?wõ¾~:5eŸZÿw×…w.ì¹3ypìСǞb4è?ùàÃ?üáËÛ/][Ò‚s\ÌèÄ¥!%V®Eט9ë‚—¸áz³ûâ»ç/¾|öС3Ã}›nŠÚÄnBè±K¼+äÁBUkif $;P¬ hÚ‹Õí¥
+6>¤ÂG²äV±—fò>
+½o}žo­ÒW’ãµgy¬èty,¢fF ú…ªÒVwV[‰"P®ôWi–­Ï®Ëk¯T‡*þBÒ²¢ì>§´…’ø%â°T€jØK]9ñ‰.
+ñ¨l$=l%' „¥†‹‹c¥ö)€@V0¶{
+ù—§ÛÊ2·Žëøù;+V¨ ö<ÙeÿècGÞ9»÷ðxlM
+ °3'Á±êõ£™ùFˆà‡4ƒîËl’ä@a|ù[ (Ý•²¦®Š–Ú{O×H‡(ježb¬#4¢Éš1Ó(õ¡/œtå nVz5ª1µbÄ)i‘‹si-Sc-ÃsCl2ϦŽ´Õ·Úû6ªýEʈSÖ*…q›XÍ´,Ñ
+Ná"-ã¡šðzƒØÏ(ûØ´SÙDz]dSÙ»ž Z–A¸1`³E×8Æ›¨ÎFs·Û9isƒ–i¼›É6v–ëæÜ6ø<!¾p»b‹?b÷¸Í>\¡÷¬Q„˜ì EÚfù(A&h€—T€;ér
+¢>›ð­2¶be”ÊîdÈ^ÕCÑ £iã‰aD3ŒUÒþ>ÿõ»ãwÎî{vªwo‰=ºÎè×r¶i¹„ü+óQóyå¦o`–ý[?|ýA¶Ë~ßÁxô{s³ì{{¯ï^í²_]ÿwœö[n>5»o6£qìŽû@ôo¿ôƯýë•­‚?gäUŠù—©¸ÉT°š‡Ç¼MJb‡…ìa¬Ã[œ/=ñÒÏ~úñ“½2»ï™ë¢·\æî6›w_%¿Ò&jgŠ‰ëô»Ó È™7¼Ié1+UÊØj©hHŸ1ãÜÅ«Ýïq8ãff¼Ôr’=àw\’¦,ñP·‘­ùLYéÌÔ¢pÄDŽ;0å~ ŸØjä5@`¸¶ Ûhš„º\Ý¡V³Ã˜
+ëX£¹§‘êr;£•E^ZÞ«Tĵòacv7# ÐR¿Y4Kƒfyw•¦Íeíqº‡Îħ×€ËÞ½¡ÀãÌ 1bO¡ÐgàÖqjåD›‹c\ËÉþAApˆ)!¨â—Ú"¿Žk‰óµp¹Íº+%©ea¡Cô¥Óu}»jºÙ=µ£kêê
+TÝl•¶. k2tg4žöûNÇîbwŒa¦.ÊÁˆÊ†-S[Ähƒ¿çü;`~—v
+<Gœ±ÆKõ.²»(»)‘DôÜút÷Á¢ÔÒ²lÂ#A ÎÃAó·Öœöbc—Þ0m4S§Hã7)½
+{ Ó{ý¾ÄÉ}{_n™r8"IhÍåUÉx›D¼u àüÄÂ_·‚ÖàÐ'Ÿ|òÒs/ß{ï™#7Ü¿o,ºgõõœ¾eÕE®®ÿ#@èöã§gg3gÐßvï½hý/¼öË_þ€Ðʆwƒ€%j™çƒv+¸n±©8—çs¶iÈ‘5¦àéc?þÅ'Þ8°ÿ™É¡£ß)é£é™þ/.&Û»e0Å„«Fj ¹ ó ü¾1šG‘¹¦PVŸ¢"•¹í¤_—ÓOŠz¨³8‰…hAÃsùS{¶KZÄâˆD0
+‚󟇅0À„ÌWsd›³Pwp­¢Ê½Rã›bŲ°Ð¬õ»œ~äì‹ož{åìù×’ûÜ«gß|ñõ{ï}x¬ià¢ÏpÀò‡yü—ß|çå·à?²ûü«gßøÁ«wÝõàTëÀ?…
+‰N)Ò ½T>ƒiWMãÝ8 Ìæ0üÄhŒ±×C •…3±,â” ª=Î÷ç+†7©¼€ÉÛˆÕŠŠmRD‹»ðN§7cCC:¬6)d¤ÆÑ=3ÍØ#4=
+wXG–äòüyDSæð œê˹â>܃¼U52ò`=R¢ÑÄÙâ7Tj}fsŒ- 0FŠ
+§ôªšÁ¤]ŸÛÎØúÝîh#Õu3^a*3øy7#nO‡qWÁ³:xþ4Kž‹‚/Û/°V!ê}Þ"e!n¨IYfd­\])!úwÜe„`Á[°Ë nFjˆ{)!ØÈ!·òBÛÀ¥úG¸üé¼u×­Ù¶,,tûí§ùÓ…Eÿó?ÿsò–û¢Í]ÇBÖËNÝóðoûÛÏðÉÙ³GšjëZ:/Ê
+J+ê¹ `¡¸‰ 6›Üsq²Ùé$Ú¤‚>%áá=bÜßd“ù-¦!£iaj4U)„ª©ÍtÄhŠá›²„ÕµÙ,¢–Ì­·‘
+Ü’&jlº]Ù0Qrlq¶7?¥eÉQ§h¦°5™ÿY° †]fÜTÎXFë¢Æº Él±XûËó‚tv»[‡[ÀÚA}h~]ª—½z±¿×¬!šŠjˆZ8ð˜qhÞÛÓ£i³ˆš³Å&k]úkB$B˜¡b—UU«ÆAËàM•æw[ìý%®‘¦·Æ:TꮽÎîÐICbqT.
+G]yƒ›”>ˆRsÕc±n$½àJ\±:¦o§5ìr ¬Wûmâ6™xPØg1Ñ Ol ¥° oz±#ðglßRé…,³'õ`dÒóˆêl¢MI4K‘;`Sýù¢`é5›Á«ÆÍæ±Ò4j1Q#lcN±¦Ÿ± PÔ4-õ«Ð,ö†±%Oà/íÌÏXGúma§©1$
+‡¶I$Ž¸$ÍjåxÙn4Æ)sBŸœ‹÷ešµäÏ͸$‰Y¢¾h·Ãž°Ùc%ÆMê)@¤ˆÅ¨SOçt—h{óQ¥ “7?ÖHoxƒùD#‰±ž$mFÎ5aý:•ßlÁ;ìÌ [òG6*ý›’dc›•‹}`sd§uÍíè]£ :Ä-bÑ°LÐ €D§¨ÆeØ¡ŒÎ}OJA|)ýJkÙEUla7‹…0e«D–ˆ[Q9¢EÜV©¡*/fˆ¦Sy¼!\ÓÑáÛÏœ:¸çÁrC‡iÞε¬Áð¯Ì™_>¤â:£þ©•²ÌÉ.ûwß{ú©gŽûþþ}Go˜œë²ïê{í¹W=æêú\o¼üÖìÞ›1JR 8qßÃ<òÂs/~ðã÷V¼ƒþ*§WÁÛ´¡*AÎV!ÑZ ò_áj?îÜ»/Ÿ=~ü¹ñÞÙ¶íÛ–²ÕàµÁ ŽZó0šäeØ…«ƒ’,êc¥¦3sþ"ìu¹0ù¡ã—+V®÷š…-…©ÔWOew¨³#
+ÁBš€Fnmž ¨wBX­A,‹ÕB ÿ—án+ÉnsZúqåö:ª
+§6¨Œr@¥µ)û-Ö¾bS—™· ”’h4pk,’6ø¸$œ—2Qñ a!$2:f0NŒSø+@#TëÿLÐÙb
+èb`‰*ã$Ʋfœ%WIq­LgD¬#5“Î ¹–j˜u8®C *â–b+;Œ@I´d {Pº·N(ä5Óo¾*®'‡(a³†hR£Ù¯ÛánY‹ÃÖÇ2E³@ë(MÇ6+}`¢óU wÞÀfµ×fí)qÄ]fë-/ðY%mbá žjž‡“¬öiûæ7²Ò²·Nµ“DÂBâ.9ºQå[`Ÿáõo$=Eª˜’%s€yÜÆnƒq¯cÓZ€C"®rl}n'˜w G/x;¦×Oá8Šï†Y©¥o0îB¥ïÌ®Ì éÇ sXˆk»Œ4ÀBõ„b'QPǵzEkº4U‡èK—……n¹ùÔ'ÿb),tt¨¹ë•ýËŸá{ΫO["/ôÇ?þqwâp¸¥g¹µÓ^IE ×€±tâd ¹`+g
+qMWSýn{Ÿì*‹¸MÙ¨´on@ó=x³<,Ä̓ˆ;àZ1çF+ÀW•rl3&\e÷u`D§R¤9 CVW®<²É
+¶ì ‡½.~GÓ•1g§L4¨µçr.¦ÂI’·>=ÌuÙóÖ¯,úä“O^yî•{î=sÓá“û¿7‹îžã`ìë?8y`Õ®®÷þä­÷£ú}³‡žHvÐÿÁ§žzê^øë_ÿº‚°Q qËdü…eBJÞÆ"Î5•¤ß)jpð®>}ÛcO=ùáýypüD—gwíÅIœ10MZP¿ØÔE¬Þ8EÛ"ÛMOfšh€(¸†aÓ1írÆì¶1ŠšÁŸèm°Ðö¨ðCô á$­°EâˆX%ùœ’hÊ"šeD‹Œè>³r³d¡ââ¸ÅŽjlÌæÅDif~âtì*5ùíYè^Œ­[ÀÜŒÁåÀ˜¶Eã™ü¸}lY†:(È ÜNùÖ¾BN½VÜŽµDÙY¥ðo"=d O=¦†@¹Ô„^Öë–6ÑÒ@®j´ÄÔÉXÇìbÄÝÇ(çe—¶m }:ÝxúŽ Ü+8JœÁ»ˆÈ(3¢8FsE™ÉŒâ®ÝNgœ¥Úv»2MO¯á¬­'¸
+;á{ÊI?Í 3 [ƒ”ºÚvÅ@Ëðx ÔéfA°yÌéL”}Œ,¨öè9u©tPðkÄÁeвž¡]”ABfLüA=ûŸšðAÇ&•§aµL1JæÄ™ß)mo´äÈZ]ûw+úBûÂáGöÅO^fïTˆzÒfZæÏçnÊ0¡¥éÚ!oíšœËWÐhÿùÏþø§¿ðÌï¼óô¡ƒÇ÷]·$Õe?‹vußuÓ=«Îtuý[¯ûN=žì Ç¡ãÇOÞ}êÁÇ¢€Ÿÿüç ‹d¾Î²ò/¥R»éÅÿIl1(†¶Î
+eë÷v~úÉ~øƒã'-»« þ*Òo4ÅŒ¦ñTåÏ´™žB$BÈ\ïZÔA?C1#Œ5Šˆv™©LDÓìíØ
+^U!C”
+{¤Ë, ’òÑ ¨nÀb±JZÓS¼!úÎui”ñ5šÞÂÂ)Ša ×MÔ.3=ÃXc˜ xzjÝeyá‡- ÷¡”Nâ´ÙÆAôðHÀBlR¨š²X¨•« íêõGL—‡…ßýñ’y¡]G{j{¿ÚzìØ}‹ïȾøâ‹™øáÏ?“òrò+ úšùXÈÂQ¥Sy™ly¼6
+ßs!&s¥×EvçbàJÊãÙý.I³^Šº·H2QIú¬Ž>‹}˜Îùe9á-‡4d¼XÓOQ–¡(%²] šê^’§PÒ2˘9Y‰·;¥e3nwÔá@³½ŠÝqÉ} ´ÌŒo±±–í*!ýfΕ©‹*/¦Ãê„ çÖ85J|2A;
+ erpHLî‡D&ô<€o
+yMRq˜–YaoÅ^aWFæWIä²°CÚJÊ”jØm좙)ÓI‰Z0AV]6Ñ(#üEü&*«½Já×é&Ð ÃàUD„p ‡T ôËIŠÌÆ&;IÇË.»}ÌåšÌÔ2—+Š€ŠyÄhÑëQªÐbAc—y ĵE;ɹóé-$:ðùLÖŠ£R"¯Ö’#›•Æܯ´ÌéÜSÂt–æ43‚:3·ÆÌ«E3ðŒÜZ’ðàš¨í\Ü~õ5+ë.Æ&ä¹€¢%9hnõ­3'uœº"N}>¯5K<X˜Õ›«c¥êH•ÌI
+Ê–E•Ò§´”΢짩Ê<µÎ€8çk+zz={£Ñ3³ñ“å¹-vÀ·Š„NâÏãUeôž¸2fÙ;m{VÊzÿõ¯ðÞ;ï>õÔ3Çn½wÿìÑ2fÙÅb=C¾µÚV¶ºþýÖk/Ý{SáœÛAÿƒç_úðƒþð‡?üýï_Á?w‰¾NÃ+[¢qŒóZP½Aé53 ÿ5‘óo¼ýÄž¾}¨ëðwm>g‡JÜM*F!àÅ=Ñ4eÛ½K±D¸ôDFiô¼Áv{d”ݦºÆF(z"£3 á’ÖˆÍÞWFz)>KCç™ßoUI±È"t„±nJÔ °’÷­WÊ
+üÅY­Þ#q†¨ÖÛeÈ–²ax+ü“—d,ù:ýò¾ Ökß*ˆ.ÏzpI'rˆ<L©-‰Ê$Ãq·[Ò¤&i ¤VŽ)åq§´9K“Ébð[p²ÕX•:À؆hzj½Ú_(lÃB-n™AGy¢%‰Z“0ÈÂ…%3¸‚=Ž¹ÁwcH3žÙî¤3èh
+¥Ø/ô
+È¡€×ꔵåªF×æöM¦ ‡P!Šy ,-
+†¸DOtåñ½æ¬vµz¬BÝéƒ"sALœfÆÀ¼£+Nëx
+ÍîÉ ;Xbòl¾bÖ¦ˆÑ8QÂYÇb¡„ç…ò}ÜÂ^yXUz\_þÕ±ÇËwn:tçGï~¸àÄ‚
+Øs¢«¾ç¢Xh¦¼°Ðâ¼ÐŸþô§©‘MË»#{>[Ó‚òBš uM
+ ¹ñ™ƒ£„%":ÅÂa§¤Ù˜Ý©Ê‰‚KeE¦WÅÌÊ!6)Deµ[$†¯¦,4b£2À0ƒfzÊnéµKZthV-{6¸è¶4¨´ë³{tªØu€¢"
+ÿÑŒ'Ú0–‰*FÓ3G‚eZ¼]®ØaÑT¢¢À[’ãµókLœ¸zÇ¿
+lM†ÏdÊÍ#jR|¶_?ô%I¡/)æô_øOY:\xJI/˜S­:Q¢ìp(ûJÉÐfÒs‰ÒëPöæªÆI9ÊÛ³^Õ!iA ²‹2E-¶aÆ:T¦  }Ù„W’|I,Äòè¹u”Ø6ŸQ”äö¡Â!T…2v¯Œ=j¶LdrÑàf±Éxš“Wx­9´^íuJZ~u1‘Ì fHb!NA¯€V–žXb.,ô“ó sû?ÿùÏ]|ÐsñÚé]•uKb!ð}“±ýíËÃBwÉ)Œ…r«êê…XH…¯ âöN¡Öq
+”©¼Y‹¿ƒælÑa-ãÏ¥k–a–¡-±ƒKôf*‘œhÉG9Õê|4ü½nŠÁ[^-f_Li™w¥µÌ›¡e_òzêÍâ`
+Úsx#Ÿ~úékÏ¿úÀÝróm³ûÄ£7fÀ¡¾VgÙ¯® tÓÁ;1ÚÏr*Þzë÷?ðà3Ï<ûÎËoÂoW6#ôæ çõ¼uBþ €P.¯ŠO´02o¥*Pêè}ý•WÏ¿õνw<ܽqMO>gkˆ”D#âÞG(oUc•
+¿%÷Œ Ï'¼ÐÅl ĤÅî¸W—;êt;½ë þR•Ï%k±òkÎ6qm±UAÔs’)n0ª)Ñ„o ¶+‰¦Ì¡
+;S?CT±X¨’0§°P~¯ÀQ®=¡+_ÖœúÇîüàì» Î-ó›öÞ9èé½(¿Ð®ÇÝ÷ÙgŸ-¾P˜ˆí5._è8ɤóBWÏï©,„Ô[Ÿˆ¦ŠôRì4Åšþ5š^Z5¤V£:“TRÈy7*¸ª?RV´IÚòQþŽTÚÄǦò âKTrÔ}¢·h#¸ p4cBÊ [·€Vº¸ÝA£J§{Èmí¬,l-•·Â‹´òkiîVq  n)N¥²ZÆ!üÙD£EÕr4_uɈ ¢ÀiŸô†ãZ*fæîdx;-üZXo{r$ƒj¢E¸2ùŸ/I
+]T˼j¨Ã"ÛXÔÂBX—æ7™µhú˜S;IJu©qq—EâeEf“zTähUn
+½k•^‡ÔÈ
+þ9†·AÆß¼xܘœsu.±½P>´¹ õäþ»Ï;÷Âc¯Ý˜¸½»e—U°ë»× ?§N(Š¸¥Mø ,¤ôà¡Û#hlh­1šrhG»[ÿš¢ +ËoÔ™¸5¹(rìÄm)Ü,)÷ÚžQ„J‰Y0–ƒ®ÃPvb°¬0`±Úì£V{t-Z¯ô¯Íj³H}´¨…æ×Ã_Ì'jSXËÿMÑø§êC,ù­ŽSk“¶(cÕ>œjD£<ñ4«*Ò§V©åQ“4(•Æ¤Ò¨SÚL’£›HQ7b2M”åw0pjõ¢ùA4[d®çÔ቟M
+9À×±µdDÁ”9É,&T4[¢ì°ÕÖW^àsʼŒ°ÁÄÙ©AÍÔ
+þ9·ä
+ijhÎü2¡M|¢Õ-©_G&{n ôê“ož¼-pU¸8{''å¯Õ(áйàjD¢jå–'ÀAoL1µâÙ Céiž¨¤*×mÒ3·l>®Ø äsŒÜ:†_k6èE~=¯ALt(‰¦”!m¿X1ŸmŒEUÜü6&«Ýf°Zz*4^‡¤ÙÌÝYÄ©W­â”×-˜+æùFyþ3K†ËBP9D£œðŠ‚EŠpY~»Õ>`±EPÍ•5f¶¢ºÙªÜXi«Ô+‘D!NgZ9V¦î¦¨8eŽ–)Ú‚œað¤?¾mDäz.ÂBÒ.a¡q£2Œù§Ø!™#Éó@…Òk—´R¼Z Ñ”KÔÈà#…X˜ÔÛ„õ:‘WÏ«—AývGúƒÕ-ÂBANÞ€À8B–œ,Z÷Õ±Ç1CÅ¡ý·ÿøs‹ð‰#÷…¯ö™¼ÂwÇígþøÇ?.qGÝØÞ±,,ô½ÜµÍâªàÒXH](ô‘áõÚÅ6€)q«;mE s“ʧRŽ9¥­)Î.mt´6·ÛD¡1»¥d»‰W¯™Ï‘.K.Ât
+NL˜
+Yª9ˆ¥M‰LÏ©­¾"Úßur_âÄ¡=÷¬·„6)½EʘNì×ò*ÓmeY¤Cy<ýhÏðûÛßàØÿwÙ?vïþ}·\?6×e?1<<Ñ}ÿ­W=ïêú—Z?|þõÙ½‡Ùú[¢2¡“'ïäÑGðÜK}ð!é•¥ÚPX›ÃÛ¼TãXh´™su¡bÈwå
+ˆj’¨ÃÝaL½ØœGìä½ìÆeB”º•,qsôUªÛ1j€aÈî]§óÛ·{”m`w»¦Ýî˜Å³ÐF%ÊÅ EÈJ …èÂË Œ˜©0;úÍ’ÝaàTsçÜß$EFòÛÅâ¨SÒ¬T°×šK>šÄMQQxÙiq.Uwؤ¨½º
+‰m!y íJc!6/¡T â“
+ÒoÖ&Šð¨,WÞÐÚÜÞrøIN‡™_¯Å 79ácx;m2Y‡•¿Aeb+àLz#Á g4'²ÂEX(ÄÑ R¸o_ú~žëð¾[ϽòÖâc|ßÝÇ»†/Ž…¶vÝ{ï#‹ïÈ~ñþO&†f¼›—……fÕÅM" ™®æd-ÀB¥Æ »8ZKõì´]á¿´xºÆ:Toêr»âÛ`1Ù鶀WÍ絈…s3é¡é°Á4YVbÄ-ùóDHaÏŸÍK8@dl½Òc*eµÌš[§îB5ðY>
+jY-‘9sFYÃÛAq¶`-«å&åµXd‹ãvöZ<›@…y"q‚ -žßš:ÛÉÇ(0“sšéÎ erSd^ ³;°Hǽ©Û±mn]©¼9óΔ]üìÍæŽwÜbïs’]´Ä›-èÒq âÐæ oTÌô°‰ŽUæûhQó‘åà M–-D¦ Òdw{ÛL$òðá=÷ì¶XÁ‚©Íç\ÉoU¥è†D¼2ö=׺‚}^ðŽP—ý‹o<”œeh4c–ýTÿt_ì“O>Yõ«ë}Á9<°ïB‡nIvÐßs桇žî…]ùú‡ïÈçU.„*¹¨^·ÕÄݾ.ßwî­·!š¸ëÎöÅoÝqi4Ÿ³uÁ}:/„†v‰£¨ˆW‘¤R1*Ã¥d{‰¢S£¥³BF¡GÏ©e“çTÚ$-TV;Í«Æec*9œ_´`/9¨h.$ÄUÜhüTÐ&ˆ$<¸É·}Qîh{ꦬæ[±Òl¨èŸßð’yqæ_p !%Z…D§Qж>7àp 7š»ÊÊflø¡Ã½$·Õ)iÎöáÛ“h|pƒÚo2™-ÑõêJÐ8Ÿ+/”)²" _ ±©<ØfåA)!;s•c–,¿AЦÃ"x ±¿Eê1JC&~ŽØ"FžÎ—éû–Ü:â» îÈBœÜA~t™XèQ¥ùƱƒ¯½ðÊâ“üô#ÏOôE?â_¤^hWÓðÃ>õÅ_,øïï½y~|`¬©´aYXh¯¦¤QTÄXèªùXÈÁÉu»b tÏ"£:Ad›UmnIS.߇U&¬VŒ
+“ɟЂܑ2…¾]- ,õîB©_yægÛ•D›Qâ÷,ÆB°vl¬¥º­ÎðF•×%m dàÖd‰‡”òDy^»‘š°Xû!è3ñë¥ÉTyRËØÆ4œê†OI*³:‹UþÞ惱è™Ã{îòí®Ìõjr†Mœkò¸(3¯äÎ1Qã"j‡Œg2ð,+hóS]ö¯ÜÿÀCGp—ýHj–=®£î¾!:³Úe¿ºþw×oûÛÃïÀ@hÿ‘Tý§|öÙçνöüve;è_~ü‡:^żK1^e>öFÑÆ#<…Dµ[ÚðÖKo¼ûÖ;Ü÷âÁé;ƒÍ»,¼Y(‘2ïŽ^L´±,² ˆWˆû-Ò6°ÕNi+8Y›¤Í(òËE¨4…­ÕpÒ̯1ew2‚:#qhž ¹ˆcM™5ï’ñ 5´6b.Ü
+•ÊA>ÖbE§‰[#K½¦³¯ì€W-|#ÊYÄm.I³SÖŠMÜbT¢N#·†€.`°!§ËŒ€ëµ¼y‰ÇÀÅTl1QÏ\¸¯„ÄäŸzN ¼þlAšÛµ°:ÚŸ.K“'oºCß–ŠµÍÏ*§†q=žš¨Ó󚋳<ûÛß–ÄB»c‡k­ƒ.WlC¾Ç!k
+†ûéÅA³rÐB
+^»†ç¤À6A@tC ¬‘tÚDfÎÖtQõO˜èÀb䀛ȶcª[ÄûªàwˆƒðwÙ¾ -0ƒr¢^• WÛ¿E+6•Œ½p@6ªo£%žŠ|o‰sär÷ä’Žõ’âDòCuæ*bY¢!0ì”4W~T4b‹3Ö«¢k‘È’N-]ñžO4æ:7¢ËA?|ty<âž÷åÕæI:-Â3ç «<K5ï\p-ÂBõ0`!ùò°ìqOß‘›ïYœØùüóÏï=õÈxpâU©úKF»ž9óħ¿þt±:<óè ÖÇÆe½˜ës×6-‘bçÔkªÖ^¿¤Èj¬CÅîx‰©½P>$ „
+ÝiK DVž`²‚
+ÿ¢*£à7_,äIñÿ{¾
+§x=¯Á&ï´9.7G.äU¯r$Ö[¦ŽQ‹m(MkLÓƒfËPpˆ²È{Tân-,È >8åþØdÀE-rgó„•KìÈEíóµ‚äð²/§s™'2\=RNÄÌõ‘1,êDX¨p*ÇvgÁÚeÁŸðÑk<Sýï¾õÎ’™R@;ýèý·~ðÚËϾôÒ³/½þü«o¿ôæÇüd1×4»þëw¿íÛuÕú†µyY¯u¥i×5¡žzõFÂxe
+ ¹“µÓùKŠl‹cÄeßÃ0ãFjL§›¤òLAŒ¦#ƒæ¢ÒÖe *£zA›ŠhÆzTÃN™ãûʌɈ#*‹hÎ&H×vjGt ü„“¤¾ˆÈ@SòR÷¤8TYL:ê­Zb๠§×„¶· †Á*œ™¥b–з•ò<« µ Nµˆh× [ÜŠ®ª5] NÅŸÿüçL,ÿ,u X¬Ij½nœ¢ÐÌ8Šš13#¶Â°N>¤´j°~±ÂZVIe ÁhðщQ5f@B´™9Wl»46Ø{2½rèVŠ‹zRr9—bÞŹ"jEÊãé^æåÌ}öÙgç_;ûÄO»õîÙ}ÿŸ½÷p£¼ÚÆgw¶ÌlŸÙ]mï3Û%˲dY¶LB 4Wuiû®z[íªËÝ¡¹
+,¡ž­0”*e§ êZ D‹ÛlDZ-ê‘süBÈŸ¤D¿P®(vvƒ-‰Âyò$à'y’ÞŒôI"vœ/ˆI°‘\£K†B#ëØÉ;‘ÚªËç·x‡×ù¦ËËG9Ì3K\àtŽ;œ3H\Þ³—ñM¹ÝS•æ^fÐKD-¢ŸÔ[ íÐœòÂ&éìQ×¢&‹}ŸÉ’ MF ®Å¦R“™œ‘õ¨<‡…îøXÖQ¥%ÓÑ¿{d÷§ÿþdÇ|ƒ(_P=EMõë?~}ùÔÁ­Õ-ëVuüзk›auQ›^ …¦êUûJíUSue;Pë› '}AÄìÍ›ÌnŸr1ãn÷NÙdŒõfW•u;ÕC2ΛÌ&hÔ¡rÍ,
+2c &K.ð¯Óñ²¹þ®"‚t†k;a$A€*Q›Ì‚&«8b${ËD ÉSP²äñˆŸdºaÞs;»YƒÌI\&Vø×ÌIÇ/½‘‚OÄ'‹¬×Fßùø¼¢î¼ÒйUý^WÑË&\î)Ö;Ãéå=L¾ÊÐëÐ ¹‰¨Iu›Àd|{$Ç™Ÿ1!“ÅJDiç–E°áüånÝ=qG®ÿç´
+t^æ–Š<*Üiº—vÊþOúÓ±J¦ìÇö•Š·î[Z:»åkùZx{õÕûnà'èo˜­ ÝóðáÃGŸ~öÝ7ŽóÍ7K{4vEî:^3o|žÇPCU®  “­]ÑûÖÇ!S¸ýög/ÿEOlw õxv¡½Õ?Ž²!O¶^׫‘º”ÈÛ„­|ªH΢ ³9l*Š
+qJ3i&À[ä\×Pá¹ÒË2KZêÉ^´ˆ"EP'À2J¤s±>"ªÉl,<Û [¢ÐÒ¼Ù,h†Œ£F_!Ì»î¿áð:}l•®—+½æX_®(ôÆør,› Ú†j5I“ /ˆ%9‹ ™cUj*¤‡'9ᆟ3wm¿»«u§kV6)E?8D8b_,¹Eþ%Ü
++¨á^p®Už6j'×ÓñU¾Ì›¯¼ñÖëoÜÏ Wí¸£3²+ìgü9o`„õe!0̈Ï4ºV×j§ÁåIé…2ʦ‚ªcl)HÒêD7}bf
+KÖl’¤lt¶žŠ¹µY¯"­÷ØM*,jšÝˆ;¿žè,ÙK2‹ýÎù/{k–`Ýl@…ŽóZ-‚&¿4ƒÓÁññ&}‡|ój¥,’¤“ˆ9‰$+‹ûåÉ :]C'×£«mIÖ=èöŒT” "5UíøJªËoÈ3̰ݱ›3Ù°›E
+ŒkhMY¦–Jjéér²M-îƒíÏ4{€µd&ƒ¨ n>\%uØV_A§~] õ 4£g…ÞÃEÎK:6ćRÙ«v]ÿÛw>8}I@A_ýõƒw<6Ü>RS]YÝÚm;÷ Þ¬qcm«´6…!,ôSòD~!‹“LÈH…*Q«M¬3Ejm‰®n·kP«²iG먿±Ú{Àdàb^ßB³L6l^M¥´š©0Ù®÷p&ÛxÖOï ½îà)*tf>q§F€Ü)O+#épQCàeFÝ”OÕ‹Õ·Ë°”•cßG|‘<k/KŸŽ—°M*ôà¨ë¦±¨k7b­¬Àºx/œä}r¾‰XÏõ$N ÁµV›U.fFœîÔ’çã3âñŒ¬,믤»‘—ÉÚ4xÇúŒH1s:„ö~éÆÍkû
+„TB¿DÄÈp—O²j©¶¾ˆú駟¾xôÅ»îzèçWß|pß±±Y-û)¤VÖsÝ7-oÙË׿âúãÿxÝ5wÍjÐ_ÍŽÝ~ßý=ùäSo¼ø ô¥íú൬Â`Ñ¡´Â0„¢ ±#ÚhR¬³D~}ä…ão¼ùèC/]½íP&ºw­)Z£I©VÙP¥YU—Y“ÓS4=E©' D_a(l‚‰³#Y85_xÌ!h´)³zDGMPš)½2Gˆ w†7#Âz¥³e¥ÄÓx6(h‘–ïb@» I)îKòR"O£ð§L2ä6ˆ±^ Úà6D J{YSÅ6Ö¿JƒuPXGê<o´ŠÚ½dÔª0j'‚t¿I;Á$ª¤wq_¡é
+ªÒ劸_‘ÒScZzŠ¦¦5ê Ù w¯$»?›úXzA`q“i±–
+b_6_
+=/¾Øž.T³O*¼؈Fì5ØñV8#墟L6oO+Jë°7Ê„§ ½%NhJýKQÀ®—c®Ç•Æb!J‹Ä9‚ÕÉ!Íw‘IxÃŽøns×ØLaMl³¼ÐÅñ
+°ÒLZ”è%(é
+R</Š²Tõ$
+å
+P+˜LK¡„LvQÈÀd9
+³ê Øü'6Ã,¥¼) #×Æ©Áv—‘½€ÍÂòŽ ,â$bÆÙg¾‡« §
+œ¥©¥«Y-‚‚Ê°YùžÒE¢AÑ>€Va¯Ô¦‘gÁÅ`r“Š‡Í‚–Eý
+eäY´FÏ{Îãj¬…«o2£™¯–Ò\^Ñ.@¬ª<hGƒgÀÝ4¢.žˆ»èeðüU&îW”œ;ü†ï¾ünÑ°ùÿ䪳&”rTˆ†×¢ð ür1lUô™”âFÞdæ¹nÀy²nó>lé0 ú1£`ãƺl_÷u“£÷í¹ÎŽ”cFá:©è|^ªLŒ×̃CÜþÛ7?YÂ>êo¿ýöø˯ÿêWGn˜Ó²/ íèùý;.ïãË×Y^¿yöUxº8 t=„n¾ù¾G~ùË_?óâûï¾÷Ýwß-8›ëÇL«JXQDAˆ×]¸BƵäé?ÆPÞ·ñ\6ñÖsÇÞ|æõë><Øuõæu^ešVO–ËÚd²QÈXùðbƒÜG5
+)¡ZÔM`]êî‹}ßdÖ©‹Þ …¤®LÉšÿ`O×`íR¬`W‘¬Ó%YÿP08YA¥ü²#D×p¨pŠ—8½] Îm(°%UX«ÕÕQ(6qƒ`ÜËu. ª€O,‚fˆÌe¢Œ^Úë"’~2+ ÁŸ´´_,Éó·¥añ÷V.î`I¢}'£Ç:,ÂV¾ ‹K-7/üÔ|§(웤k¹EMiÔð©•2x!ôZiÎKÆ
+&CdªÉ€,&/x™);´ë9½lP+J‰±
+/ËøéÐÈÀÀ]»Æïšê?`l`1Jp¡?‡Æ«HN¿^Ž‡Õs
+¬YèXú)ûç_=|ø±ëqëþ}WOí/™²ïß3<³,Þº|Íõñ{âÇ®¹áz¾_úîÃHƒþ¹wŽ¿ý—¿üei¥WûÚ&Ê„A9^ ¾Cà«(aX‹¯$Dç"za=8)‰uÔ¨7ÿú‰w^}òÍ›®|´ÿ¦– Çk©8¯J¦U¡Cp>˜ ©^Y:,k3½FJÈöOgxv¾ÊÇU»‚†k‚h¯ÅZõX³­&3š‡m0¡ØØßÔ!Þv3Ï;7oLLˆ87²ám¬¢³ÚÜÉú&ÊݽõTl=pj†]âŽB¯Eü”(ÈÊ€m¶`ìا`äŒA¿PºØâº)šâ7âSv•kº×Љz}l!Q_;‡Žû5ZÍdˆl#‰Ù°Ìw7…(½èÒr€§D7¶³(úÆŸÐx
+b²–š²kÇœt™L3¥á,o2)‘×ËìŠ^,ËOd—T™RßWçYÄd`Þd4ÖÊ›¬ 1m6Ì[ô3-\Ôf^ÖAƒ5°ÚÅ°P`¡»åÿ÷b¡!Ë9m³gdŽygd,‡…
+/²vR6
+ž®• Yý9ÄsÏ–œ†'~gÚœ$(
+­x›™LÃÁÊ“>EÒ«HûäI?!u{YÔCF]’›y±6H»„³Œ»›…%a¢·붊ڼª® «ßfßåaGvµ›Œ+fáSì$IÎNÁFÞÀHZ}²Ø
+U*@u—SÝA b)tj ù ,s);ZI†ˆANêWfÂTÏ:}¤Ú‘ô¼¬/˜óúÇï4ë›D#·ìˆÇ9±šÖL’”àPi™hÑÅé<òO[à“ª¹}ªØV ÷A.îW“Y£:阮/=ˆJ 4jŸö‘Qn¡½
+
+Žæ•Å=Dɉa³YÐÌ‹éPcO©—9îk‹8êW÷x=CN×vÆ Oøp •Ò]ªÙ’ã¢G ÇRl£]°™á½Lžª2^ª/@õy5ý.Í [ÙƒÞs ;™‚å$’^Å€2)F]Y¼Ò•F^æϱÞŸoÚíÞŲS,úkÎíC^FAÒÑ.ƒC'õ2@D^|+l÷§8*:º¨¼+,ëÐȳiŽ$ÇLdKD!Bœ#8u›SñNÖ™)šL‡E
+?AŒ\ B“k)_ü›G_8öÔ±»îúõî‰Ûc­PFõôT˜ê«£fnR[±Z=Q”/8»]É$Hk¾ ÅÏ 3“”W‰{Bd‡U3ê3"]u&ÇøFï¨×?äõ²žÁZs²^wQÃUKÄhqpºx¦Ü²’#¤2>oÇWªR¢g] _gL
+öˆ)E=öXU¡.tÚ¹¤Xè%™~oÛÈ•]SWÀꞺ¼sêÒÌÔ¥S{»¦övNíIOîŽî÷Ÿ·”XÈú#ÀBIŒ®/ÁBå,ÄC ‹
+ å5è!tO‘ «Ò`q'[mM¢(íºú Q0_ôˆ!¡ÀÚa«
+*b>ß
+ïäa9 2Þ˸Ûˆ]ÐV%Yßù=àô ®„µèqyÒ€ZƒýÊëôx'\̘×4QÅ¢
+:‡ŽW–õ{é!³jì¥à¼ 5T“ˆË´Äd‰3Ó“`q ÖÁ™,$ÚËèIxHl¶»}_Óëav8ÝÓ`2€I6Ó¶:NdǪ
+àìÑÿ‡±ÐYþÎo¾ù З_~ùÙgŸ}úé§aòbj²Z$0X ìy¢V”fÈX¦c׶ñ»ö_yäŠ]w¬ ï_«M™äºPù׈©ùÞ! îþøø’‰Ë§ì}ìW¿¸îŽýW^³}|nÊ~ÛÈÈŽ¾üGo¼»¼×/_§¸ž?úòþ}×ÌNÐó%¡C÷£ ú£/üöÃ!]Ú~é:ÓV0Äó(–.¾ÇÚ
+õ?›¹2ZÉÿMÀ>v¡5ã¨ÑžÖk§«¸:¼+™,&ó j"(‹(¥ƒJNyü‡Lÿ%²MJ—r»ëÒŠRA¢£Œž
+GÐa™s‡Ý¹Óíæd|½°±î²;r“ך/ž‘-ÄB÷–- ÚqNǯ}òE!þzåÙßl;°Tƒü]ÖŸ´K«Ó¨_È~î‰gd^¡K=¢žèšcÝ÷K¤9»,C«'fy2µ3,=´•a´fÊJv¡.\Y† Ô‰Óð`4e2§Ì/b:ˆäB`7J€D-îÈ¢zÝTµ®LæñŒ¹˜).ãØÃøÆ ¦õxF{~•0h§(Í”ð Ñ«”ôñ=l¬[DZGm^"¶Ö`¼Ûª­)·¨Å„mX °%øq§°‘Qƒ— ÀkyýÃð‘ÁQ®glÂæÙ–fi^.'6D¶[¨Ïܤ€\¬^›p:&Ýž,˃}7ï¿° Š/¾øpÑ’kXc z§Ï&PÿùÏôùçŸó®wßþÀ%¼XP˜`-˜,5X’ÄÒr,C‰:=²DæÂÜîñ;÷ï{zWþš@
+š"²Ê”býÙ5tÔ‹oµa—Hf#s¬°RœZšš÷+’~ÿ@yùhEùë°QY’Ès'Y è0KÐÈóªñÎ|±È+‹†äQ£f$ î«×Äë´éÆ~Ö“åšÀGÜØYv{ØqÆ;‰ –oÊË Ã«Àÿå¬ù. ©xxvÐ^<©È©k4’Ò¬†°oÀŠØ¶p c”W:a}2ñ g²1§,íVtúdI‹r€¦§Yí`!°O…wKp$™4= :Ìx„“ühø!„K‰…Ì3ð6`OÔ@¾/t)ºýô€Ý²ÝÃäKõÖß(g/0bî_…^”—]ý³ëßüÍkßë&_ýá‹«¯<´íüèa¡±ÐOæc!§‘“P"æZßÕÀSÄSß°dÌ “9•=
+“Ú‰Óp±x!õ˜OÚ̱ßtȤY‡²×K9ã "NÌÏz™g7x˜ÌáØéarËÎʲþ•TW
+²H5^V£N¸Ä­vì)ªuÄKVŠï2‚ÇÞ¯HùƒáðD(4ZîìHHGtxBƒw¯‚tL)î›ó2"¯—ö¸b‘^3¤z>¡2µ¥)±¡ªóÓ’ Š–Š±ÿ,+BüVi¨xmï¹L‡|yžÉÅi²ÒñX^LJUÓíÇ.›¸uß•Ïæ».õr>ß@µ&ã_ ý¤ó†KàP5ƒ¯\ÚBÜä—ŸASö×^{Ëå—ï+LÙsce}û¦,oúË×Âë_üñà¾K'èo¸ñ®‡~øèÑgß~ý8øìÒöK_³÷z#Ò _¡Ä×ÊD?*!5¾^‚5©ñ•eé#O|øÄÞxÕC#7þ4”6!
+ÁM¼@
+ìõ|Ç»œ;³Ë:‘—ÉrHòž
+1 Ü° ¼l¦ŒžpðÔ G
+MÔñ3Vµ ¸dÁ‚·ùHtPLÆrÏN™lãçec
+ŠЀ0"ÔqW%o+Œ,O¦ ,l³ñ”n
+J×.ÕSÔ²ÿõÓ/pZö‡\qpll÷¹ùª;—·þå«ôúë_ÿzÍÁ[g'è¯=Ä ŽÝñÀƒóôà§K;AÿÊ‘ca
+=ç¥^†æ à)…U†ÒãR¬Ë„qªâ„Žè È:hÍäZmt¨qr^áeIŠE?èh ðO±úÓ“\ü±Ot þ=&ËÌÓúáEµx’!Íhó9C£ý×]ý³û®¼òè–s‡v²ÂÒoÀ,\#ý´8Y&.´R+…+ꌛ—j£áïÉï~ûÑѧž»õVNË~ï¾ññÅ)ûmýC‡o=¼
+’­ ¾Õ*h’¢ö†f–”`ñ2l³»Ø7{éÕÚŒßß —‡·×ù&«‚3áÐT 4°Î·© 2T«'ÅCÊ‚Œ‰¥¹™ýæŤ@"FTeÚL óý4 O¸Wv
+2ðgáðh¨<¿Z“4I˜µó¤…<áŒ]8KmÇÑâÅ‘¬6ž´"mÙÂÅD2r,iu˜Èntv@Oø¨þ:*¹‚êv*»­dF.Í¢Áׇ4 ù;ìSÈû‡cr½6nUi¥Ý*,aÅ..QDZh¬“Š2PˆÊ¸×„’I†ÑËÑ\‘ÉyØþL“ñŽÛ»‹&; Ò/ ºÓ´âС~÷áG'ô©þé›C?¿ýŠÞɃ?»ù³~_úOß~ûí-‡ÜÖ•GLžåK§­çuHy,d›‡…<%Xв^”4‘=9!~îÜ9Lõú ½´[&Í–ËÚ1”vÚ,ÍðÄ>aS…2î0o«Ó$œª¤[ŽžÀM‹E],½¨²Ž4Ó·èfU}[HÉ:VÖNøÌ€Ò'<Lá:0Wbý£|«›»0 À}"×óN±þl•3]©Iz%íáV‹ > €Ç
+so}yקŸ|zŠ ÀŠÀôÿýßÿ}úûþ©æÿøüNÈmt}zÊë®_<¨@^?¹¯ða!^Á‡åOÃm‚FŒ>yÜJ®3G;›·å®=¸ÿWû¯xâ‚êAÖ7\«ëÔS“¶95wFVá§/\²){øÈ
+NP ²l·°Á-nåé£WÈÛ+‘ >K[Ñi–uK¥yµ†Ãáé âkEŽýùš­z«±„™èvÑYÀBܱÑhyxW“fd“(ƱD¦
+,å"«Í)€ÓëhÄmÇr˜æØOº
+É@b%‘ Ê#?;]cà@¤içÞüÍû®|êêˬ ÷y<Ùzm‚¦'MÂÚ"*êÚsSöÁ{®y` »ÊÑ”ýëÇyòÆî>°ïº=SsSö3##Ûz‡>8öæ2ø7¿ßdÿ¾ƒÍR Ý|Ç>öøã/}éã? ôÏþs _Î/ZCâ«4¨(Z£® ñ*¾RÊé®F9ZÅÆÑØΧŸxÿÑGß¾jææ«:«›D…’,ð5@ œüô0Ä:Ö;áõ²¾q»Ny'ü¼?˜ós+™LHwrZƒÅa z{!0Ö—!É “(*áµp1—Wa-&¤KÕ>Îk#ZM°™ÚðV8;»OÖáTöè Ô–`s{ÆY®tÏ ÔOCpæ&\PµË¦€mŽ=.פÛ3Éu)ºÝ9ô…;oµît¹G6 ˆÎDôõ1š>@qJ¤ãw
+8ƒÀÛÉiª6&±â­FQ”uRxÆŒ£†U–áYæ”sCÅàœ,”¿…ºJº@½…›bK¬¤:íöi.)ž …óš4-í· šôXß Ê·ZñX‹#Bì˜Á5Uòå 8ŽŽ·Pˆ¥â[ÓcHËIÔaSôÁb½C°1ì¯o’£cÚ@u„r°Àj+<y‚—ó
+QU#Mùfp1TÂã<f¶ØcjÄø_ jAé’b_<™«Ÿpâõ­n"^§IØl
+#N;˜l˜ÚàÐ`וWÍÚ¿ïèþ·U³€«×Q1ƒ²G[˜²‡@Y2Yfzß}ñõ%ì£þæ›oÞxñµÇÿÕõ¿à¦ìKÄ[w -ûì×_½Œþm¯§žøõþ}Wsô¿à5èo¹õG}ôù£/~øÁ‡àtgœ‰,z­R^¤äh%àO^^lâT6Ôc›Vv=ÿÄÛGžxïÚKïJ]y^°Ë‰âÕ&>J›±ÍN"ZIu1nÔå[kJ!‘ y2¬ˆ×ê’!¶¶rH`Wº3L§/óûFBŠ„MЈ”°Ö "îóå ª¯ÕÆø%‚ÛÐù³$¾þÃ識È?¢v‘` D°æW$]ª^'• S½ušä9Úh•­“A¤@|Ca©Ð5 ™)D]Ø^íhÎ [
+¼Ì®É†¨ž5TrMYÆãD“éŒo¸ˆ]9„1ÎËvyØ)Ö7êtoCLŒlÖåÎؘïet¼‚ê±ÒcV*çWwAŠä%"X8}ùdÁËŠL蹌 €Ó`ßç¡š
+‹¤Ù<O}˜ó²øI\lVÍ~
+Yyªñf
+IßzíÓ*¼v‘Pú?ÿó?íy
+¸?þñøÃ>ý!× O½p®¾Å.׃7Oq
+&ðñãZ¤bŒŽÀàû¬ )÷‰c6Éü!“)’Ne¯Êú4}`²:CŠu 2LŽ…,•3Ãì=·¼§»óû&í»òÙݹŸŠ˜í£\âK”¢Â”=¾R‚×T\«ÂàÒNÙõÕW¯=÷rqÊ~jlß\õÐðžü¥ËSöÿž×ËÏ¿ºÿÊk¹ úkoºµ Ý|ó}‡yäÙ§ýþ»K?A¿±2­åÄh|•V¸¢”JHÀ°H±ö:KÛ[Ï{ëÙ×o¼áÉÉ«’[§«-iV‘v`ñxÀ)ØâVvUÙ;×P¥"âƈ‡$Žâ ³Ðãk4I5è“´1­>qC.⇸M¶›xØjÇ6ù‰ŽZ3d×QS^2ªwCjBÒó-
+€í6®ê¢÷$Òƒ Õ“:ít9Õ6dù¸jåÈy E…hÌúòvÛ\|fwøqºfÐT 3éag¸)û øy
+;zýž¡,æƬØV–†Ûî##fj|­&îRz¥í¬pK@ÜXW ³Ý¬´Õ‚v¢MvÁ–Ù^k­×EušIØ£•Ò;'¢Z†tÌjBÓÍx«’”Ëç$¥ž,ÓÍ”SHeÌfÙ÷qƒ{FÀ"ý]ŽavMæv£‰?‡s"ZôŽºÝ»Üˆ3|ôXè¾²ÐC‘÷ÄÄÏzw¾øÌ óD6ï¼ù‘xcï$»~æ19“éÿŵ÷Ìk ýä£÷L]}éŠKÎ Åmç°õÇ‹Ô…âB,îleT=gÿ
+g/Àð2«`«KÂè'#6j ·j€•¶yñÍAñ–c¼ÒÝÉJZQA Ûèl
+Ê:ÖÛ×!íÑ)ª9½°¢—™°VHOlx‹B:¨$s^y‚¢¦tÚ™Jº»Z×2d­ÈdSà5
+î­q$é‡$§÷¹D-µC?Í»xü©ë7ß|sŠvèS\½­;ëuÑZ*iÒäìD¦Lœ´!7o{é°—1Ùñfð>¹l@˜L¯›qÒ¹utÊk‡ûl·Ï vïâ+;ÑËXv§/0XSÑÝßsÍv4V–Oïå“:jÂ%ü!:¯8e_¤¤&ñ•n¼| ÷ ¸Qps~sô¥ûî;|íÏoÝ¿ïÀxé”ýÐðþéýËÀàßízíå×컞BWÝp=¯8vÏÇ}úÙ÷Ž¿³ä@h,¾×, ñS“²B
+Q
+.¸E`Qv1+ÜÀLfE`;3ãó—‰eƒA=¢fFÒŠÛ
+EÇJu´V—XoD&«r¦ýl¿×7
+ÈHQu´ÿJªQ^w–ûýò¸¤$ÝPIú*MŸ|òÉ
+0C+4—`3w„—í’ëà™¤4“Hô\3N}e\Mî³o®T§¼²¸»XÄ» ¸a¾±¶ Y¡© òvAV6pÔŽ`8Xeˆ%f³ ÅÀÏo1c 6A`-ØQ l¸^ÉÉq'ž=zÕjúÒ&=ž,ëEŠrÞq–Í–Ô…\Kˆ…v\˜~ü—Oþõ¯-uÞÿ ›ŽUn.þئ“ùËž}êùy®tüåc3£n²¯>ã7µ",”Â(ÀB‹õ !æ/°±Rp
+6ÜnN óëØdy=¥WŽê¥ÝjáC&p Wªã~²Ã]$äJ¸`eÎËÀ`š-†ˆ, óM¶™³×žØ‡§}0b[9X°fÞË
+…³auZ!žçeJb¨\ÚxÅäÕ Û„¾ûî»S!Úg†‚Þ9þnHt!78©bZ?{2^jÑ ÂV×Ó~¢É‹gM_ÃwZ,‚§ Fq #é`Ád²¨O™rªúÊTcë©X-¹hd²ÿàÕ?»÷ÀO_R׶ 0ô°Q5 jexU ãJ
+·¯µ,Ù”ýßÿþ÷¿ýío}ø[4eÛƒW¸qÿåÆÇgµì§'&fs‡ïXž²ÿ·¸¾üòË뮹“B×ΡÛîàá#Gž|ã…Wà_—–þ³·?³ ƒÜùoª ÍK†&è7
+±+¸ Êxî‰çß÷½'yùª+Jí®õ»™IÁ‰=U¶N7šµï´`B²HÈÝï•4kQ®/…Z¥Ä¨‚S¥É£aY»V6$#r¼Î…ë·ŠÚ|Š´_‘f…à¼dX;‰x‡Úañ€§tQÿ4ð rd5×G„—Õp諹ŒÛmÕXö-ÒKE¡Û†·è¤=
+ùil1‚£øRGé´‹+±¨Iœ.×ô‚C¡ðt­1î!ÅøÌqç½dÔ®è5}FQî§QÐ
+ù~•&ê÷gC¡ NÈu†AjïÜ1'ïµÖg9,dÁ6å±€gЇLÖÈC;¶
+Z2w&%|ÅÈboâ¹5
+W`‘YDm€*«5áE+]Ði“öàÓM˺Y×¢àd.Y›[§µ8Y'n±
+› 8žU¡™—ðú=êÝÀ“)‰°AÜí( z­XdlŠ¦§þ'°ÐÎÊË<ôÕW_-iéÜ•Ùßy±ÿ5…:ÿ—g×´íÝyÄûKêÙ'žOÄ®zJk9˼q OTœ Yk¨¾ZT£ü>ß0··šÈ%c¼°r"ÃZ–àEfÂã FQ‡CÑÛ ñWÊ;œ²vZÂêæ°°ròÂ*†üV±v¬e¬¸Ù&Ø„ùŸ—
+eB!âä=«¨Ã5áñÌz<q»}›-ðÚ–eRšÅä<óð'× ]*!VÁ–úr¿K(G­Ôaø Äæ¹½–üxšIÐl6+$cHd1b¥1½( G3bÝIˆÌ«X« ±Ö)4'è‘Á™p¹§\ 2OÂã9&2¯7Æ:ãv¤±$àTXÔEßll)G"Û„“ Kh1¡Í€QÒ]­²ŽITÙd’5+…Þ-P\3qÕ«/¼¼$Öøâ‹/æ&æ¼/ï,Ú>½ÿÈëKÇŠýñ¯¯ž½~Ǫ gÛ/t)`¡0AòBÚ%X@ˆUÐ\[ÑçPôàáÍNŠŽ„‹¥I8[ŒÂ0añ"+ùAËÐ複Q†´ e}Û Z‰lDætG=޸כ̈,êæ†ëŠC k[A¯UÔjA"ۜղž%Z†Ûž‡-âöj-hN ±q³iYeñxæ¨ 5í–wÉ & ÜÈÛBxj-ã—‘­˜–iÐÜ\¨T6ÐH…\î´Ë=æPá&ÏÝÿ”lÌ®ê#5hG!|ŒJÙn+
+º£«<Ÿãà4ÿâgÇr¿t ÈùÝï~÷Õ²ëy×—_~ùêOÞ*û BTAˆ­’nF=XC :J¢Næ’Â"s¹AË&±–Ž•Éœ–¹Ü Ϋ¢ûõ~N²tÛaD¸¨ÀÍKFíHÄD´´¬¢ ·š 3ÜÔZÏè ÿªéÄC×ízdgú¦Z[HO¥˜‚V•àJˆ”µÙ¼Rä汜¡ù½×Þ[Á>jø(Ž¼üÆO<‰vÙï90vÙgû¨#‘ù±Ô|ôÑ9Ìðoy~ü…½{ö£ ú½7ß‚·Ðß}ÏC‡ü¥ç_þÕ¯~µâô.Ùy…¢j­Ð«¯?WDlªÒôºØ©­Ã;?øàƒ#?yý¦›ž†¯ºbÝ8MOš-[-ÖÌâbSzÁm¶ ®T#Âü-õ†WЊS÷áb£–ðHP—¯B2ž¿xBB "ZÜ"­Œ+ ¾ÐOˆá
+A[‰$ÀÈ}NUhM±5Ð:7ípL»\)·;µèX=iø†ã2h‚^°Ù¶qŽ)m°±ØïÔ;»´Û"j5
+Z ê0“_‘o«&ü‰¯®$„hOPÍŸ€‰F›&”Ã…2” 盥O{Oïô¦ÃNg·J
+Y \UtWÚÝî¹úâ€V:–õwÑ
+ù€A=®×gHr¬´GÑÅ©«­a7êrît»¸–ɱþb,4ÇóóÀCõÆ +¸TK´Ú…Í5¦® ¥­4êÇd2¹Ù´RÌ]°¸ÑW¶ðp-½©É&ÑOˆYyDfÕŒ­+ö!‘9£¬#åpN;i¼BDq;?´Ùà0\†sNzlÃM%A¯¦ß©ðÛ ºÀɳñóÝùæZƒÚÆPÒ©®8h³ÏÓŽ•ÇBwëî¼ë¡Ï>þd)¶ùô×;’{(Y:§DªÚ1u„®ËCÚÜýèôX~á¬òBg±PÅr,„§…[¶1VÒ"ÃÉ™rÔ(²(2½(¨C°d<KlÞÏc$^dhÍœtÒŒx†M‚R:DËüœfp]™,âã2GDær%‘–y¸E-Î9S4—Âóò[9DX4ØPp£y|¿µ ›î5Ú˜ŸßÓ£iÄÈ´¡4@Ó  Å`:øºX‘~€«Dk…˜«*àèt¶øWªSÞ6Üô2äu z<é*]8OËbFYqªë2:rºL5É)‚Œj¥àfvo­vÅÀYŸÚƪvyÎç[³IðÌvE PUIÇ Xd`Ž0¡S¯SÝ_Wâ\ãð‘b‘aDZÊ…°+Fw‚fæ›7X6f"¾Zsÿš"в>N "ë2‹Ú
+¸©‰ÍÉ÷Þ}ïݗߺãöçç'öv\c¸q‹e&ϽnµÓÛkÍh
+¬ˆØbnYe`D[ä˜åLCô…í‹¡<¯zl'5†CrEܪY û!àÒKÐ.T8$—Ç8¹ÔL7‘A§9XmI»=N3†
+8”~sA¯•„ ðÉå ¾® 6ÛeÝ«l!~jÛhœFÌóúR“²Êƒ”( á¶þXbù4“󾕈[Cxا_'ri]ž˜Ãq)ý|Þ¾Ò
+¿^ëQgÀJkMÅ”rou»¶ƒaÄ}P “™ç“Üj4-äDfACX;êMVð}~"‰µÓÂÍ"Â'B5Í ¿ÈÏηä€'p "ó*:e•ûŠÅ‹"“ÉãE˜Ò¦µA§ dµÚRˆU‘1 šã«44•ùÎ+îYWês2
+þ\µjóÖ¦¶›g÷ýõ×Ë•ë½×Ì&®½ÉÚtvX¨KVw2,TLlâÄÍ•–!»p³€
+´c—Uá«NÒÏÓ/€Èò€ÓMdÀc£éˆÕšFœEÌ$‡àìã5¦þu%¾ót½kJý,¨HŠË0Ì íˆ )$ûX]bb7 ½$šÇßP;ô¨Å·Û!ï®fús84æšt!¸oIMÚ$ •‹Ð¦Œ¼µhþÓÖ²ðwO
+Aø†2!Òp­àÍ´Ó=
+€<Û)c½Ed
+kY†ÒN—jkJ|¬cÊíÚáõÌh¬wËŠ/¾øâdõ¯Ï?ÿüÏþó©áSÑZfWö–I eñ ˆÌ%G{ÓÖ’~· ‹Ìž¤™(ÃN²ì8ËM0ì8hÙÚ’ÞótÝkKý3A³;È‹Í0ŽI
+¶`î/1À>óë–›èÅÔ"ÔèB*&µxø¥Xw)zŠNÐiS…v`Y¨è}hUñ`•UdŸ]7UªKë©i½&áTàQyo™&²V`ÄX›c¾'ëpL¬-ö;ÔVi ")1XFläÜH¢Õ(hvÂÅle¸I4ØBM•V˧øpUµèˆÏ¨iÓ÷Ýz‡|9\Fîk0øÜ®«šŒ>p(|iÌ.Gí¦åº”Y«Ð%×Q>À¨ˆæºªÒ›D8„„ˆ™p±4f³¥ò¾A«Þá“i0Áeð*œ¤•f&ìh©nQ,VÇŠD“‰¬DÔ[ –*ÐÆ[ðEšg§¬ D¦×Æ)
+ý°L—^§ €¼ÖêB5ä
+ƒh™ÆD4±Õú¡ª¢±µT¨Ž ³ÔD¹.Ž9’C3hšñ&}
+õ„CÖí–waؤ(DNâ!GjŠFëõë)55hÖ% T¢„Lê‘íae½`KíšÑÆâ^KÛRÌ]cq€Sõ™e“ Y†Øœ®”,6Pm
+ÀÏ:*PE ‚)ÑgE¦‘MkÕ)¼K«˜§¬– kÄjé$½†ìwZÆGÄNÏgãnÇt¸µÅýNUÐTÐ ²À9º-¼oµ ·Ô‘¾ê“å…TÜÁ3ÇB;j6üðà¡%ÐßÅ€?ÿäÓ±]Sö3}'=¦KrXèü¥Xˆ÷ÍtWlˆ
+q
+Uˆ deÄI±8;ø"b+ÐáÅajDS¬G;‹×S>Z7Å^d VÀ*%ª)¼S§—De’ P4ˆ¬Ð_IT‡Á™êÎ!"Öcìãk‹|UÐ(ñ— Ú•DDµrTų
+[êt~†a¹COU“€ÁŠeCðž©Åp£ï¬ðÌwêšÖí¥â^¶y= UT¼%”Ä–é415VY4Æ–¡ÒžÃñz2n×ÕnT~BS™ðç¿ûêÑ“Ý
+:  ZzˆwÔ¶,èEm zü>猵_œî»a.ñÀ…ûš*ºqo¡¯Dب5I0 5)<–‚£YÖšVlÊþoûÛŸÿüç?øàùç^¼óÎ÷_{kþ.{”úާΉõ TæÀþ»ÊR Ýzë=>ô資Ÿ}ûå7àÑ•¥úÕ[?7!Zi¯NX_3
+›lš=e·o»¬jàÕ—_=úö‘'yõºmwù¶U³ý¬-i9ÞÉšÌÛh.]éEXÈ.@D¬¤µÖÜg´
+ˆ>-Ñ]ˆ—dÚ±ªˆØXÜ
+ÀóëEAÀE.E·œ¬+°cb¼z~N•,0\ÚÁŽ¬ÑûŠn¾¨4Ë Z¿º¢]´ßÁis’£a~éŽ3O
+­Ìl ßsî,ô»Ücn׎]%áQt±ÔxUÙ(zœcÌ…š¶{pÆðôXÃCdy[Mç]®dƒÁG ®ÀäBí´uÂ,؈W¼ùøu¨ó$¯ídÉ#|£W‰b¤D)×%yƒ ðÕS÷OÄl˜iÔ÷ÁñÃ9,T¢Š‚a—ÉâàXKE=¥D‡N’J£ny7GŽºÊ'íhïF”_qŽ‰p±Èc«u!‡µÜã&ö¼oµ‰[W •îNí|mY×ôw¹~óé¯wÍÝ°­nËc!ã¥]²š®‘-ÃB,Ü®v…¿²¢ß*ø¾ˆI‰@)¸oT†—ÑŸ8ûJt¡0YÌ¡èÕk,5x•O,¸KAdSVsœ>D w¼4Aˬ…fED†TXˆnHÐ5™,æTôZ¨ˆ·l‚f's«mXvÎNï` ;RK…¹Ï,lÎ5•[ìâŽ:Cä ¸·Ú0dÐÅmò IТÃjg«e¾ïÒ,THøµ’!‡2èñ$=ž´“RÊPxÅ*^rÐnL`32áöÄÜ®«¼žY4˜éˆóg‡sôìªcK®?üᧀCnE7|’ˆÜƒlr©%û¹²„ÍçIòW뇜Ô(D‹Ø0¦AdåŠ!™<Ϊ”‰zHq¿\±+Ã.0kåãˆtšÎ©=Αp2£«¨>NÞU!hC¤xd1Ñ
+jW
+ Ýliºë®‡Og™æé_ÉÞwÏcÓ£ÓoÊ´gôfº—
+¢¼Pù,dÇXȦWV •%(]GŽiêdòâµlñÓV$@ËÊ5ã:Ý4H ´ <¬Û4ŽÖàÒS&Ó4hY“.\G†‘–‘½
+Àj—B‰ÆÐr"S)"¦Âa†šàÊâ ˜bÚβó^ï´×›pã ¦†’
+:«è>äSM%!‡Ò–é,Πý/kYÏ» ä±Éz½h +êÑÙä»"ßp– Ö9érÅÝ®­.ç'ag3´#b³%A•,Ö™ºª¡SôKŸ>¿4ü&xù“a¡ó,>ˆøœòî
+•ÑƒaÔe*ÉÁJã0ÍDx&gId.qꤦ‹Õ™R™È™F>Q¡ž¬!qš+º" b7 †´ 0çšl,
+ºäݹVvÑ[L´Ûe=• "²ð8£cýûbÑG3‰·GoqI¾–.“‰/Êí¯×
+éüìNh¼÷Öƒ+Ø8„vÙ¿q䙧Ÿ¹åf´Ë~GúØ”}:™œ™zïõ·ÎŠÑë{íÅôû¯½Ÿ ¿ïþ‡Ÿ|ê©Ÿ½ð*XfБ•m’§EõÒìZ™²
+¨
+ FÚæµ [q<h´d;ONÜ,„¹‘›s‰>Õ@*&y¦¸U„Ô¦K©ÔzÒç4Dr¤µ•Åãº$ØR“ÒªSnE—V9^.GlE ´Ó]b- jQp:3.ç.þx½iŽK¯6"¢0Ô‘D«õè¢Ý[nÔíN:\5d¹´Í’•åÚ¡ýyÛä{OcÏÑYv2˜Wl`Ω5ôÕiÃët>';ŠÒõÞi·   $  šŽ‚_f§‘¡³àÝO
+¬£ÔhÝøM­6mSö¡"&¶Ò`Û9¹rÊXdëHXuÖE)y"CÖ¯+³ò^ƒ •ÄÜŒN¢~ hÏ "m7Ýxß/ÞzwybçÙ§~2Ô2ÚVßÑR×zE}Ç÷Ww|¿ÅgC}û–Õ­íõ©Þ}h9ßÅ_þò—öÝ•iéûðL:¨»—ž Ù…l)±™–û+Í6ŽßŽL†£—£ E–á"SÄy-ãÔ¤GÀiå[KúÁ à]9é2Õ¤±žà—MŠ~§µï‚È@ûHÜq½žòÃMȺÑqZV™ßÚ¨Ð2_™ $º„ˆK| hœWpº£.Wª±$`’ò(O¶Âø[±ÐÙ5õ•¡-›DÈ.¸´IßÃ:"øC*ã^Ϝ۵ÓåJ²ÎÃŒ{Œc¸ÎÏ”¢J"`E†™8a”ú·¿ýíìö®þîw¿;YjÈ&#’(@D…Ê-
+º½‡#Óà™„
+ìïxÕé¯$ùÕ«y{WÍ¢FÐ
+8ÜäpÏÅ
+#nuØǬ2 Dî#€jøjÈ’$ƒ”ȵUŸÈP£l(2Úû Méq¿²x€MeÑX£'ÈižýL¥D¿É)zÍ…Cð°ê¤6¥£•€ÿ‚ð;½ÄJóq+ëŒ5éB´¬Þ*ß…_­Âf¯:Ä9c7æ•wP±oã‰Ö^ó„o}߶;p¶VMá•¡v&joVöz<üŸ°Ù+g”eÇ×…šÈ
+üüãÏ®ÎXhl9},ÔyJ,¤&|´´“¡'Ê€Z2Ägä$ÙiM¾ÖÉW¨ÉÓ™L×+Æuê8Eeª¨¡œÈ
+‡
+v½~óÍ7Ÿ~ú)¿Ëþºý·ï¾zO"±mq[Y,672zÏÏÁŒþëóÏ?ß·ç6„ö^wóM<•Ðý<úèóÏÿøÝ·ÞùòË/Wvp,=xu©Ð™«çjE <*5iˆR1 ÷v­¡ÿ7¼ûÊ›wÝùÜlä®þ®mn•C‹ _lZOú@ï
+õàÁ3ƒÎòA+Š[Eý:Q¸\Ðν|ëÁ‹n>h¥Ð2ë\Þ¤ŒM˜BȆ :EA ¤›YOÃ笘Bôö¼šø®ã+eI†ÙÊ:&\šƒ¤»ÏkKQ‰±üÙ•!©Œ"4Œ©tOØ“à#Žß¢u’sÆI¡"b³U°Å$jl&Eë»hi7ø>»f¸ˆLR$àÔ:®U§ÊUc”:É·
+4ËP8RQ8†û¦Ò8!–6‘S¿ÿÿX"è?ýéOgÚ&túŒFi8_Ëø´*H¤œJ6‘Ð2øºŠì%j ƒ¥úéìðf #˜…2}š9±QÐ2†CصÒ;ÃkYþos^pÛ‡ª>ø|xÑ(‰n0Œ`+ì…ý
+¡K&¾
+bsÑS.î®Ñt½ýÊ[ï¾þöî~~!y×eÄ…~½*Ê{X>9\¡Kü
+´½®³‚ˈ^´{NÐn¶‚©Ó´aíÔ@×®hô‘íÉÛÝÒ+…Do¡`£Zt)ªSd)©%¢:Rd#EvÈL‰Lc=©•rmß|óÍÿøÇ÷ßyïÙÃÏÝvëA´Ë~àÐl.;43<úÊs/žƒÿœ×?þñ[nx
+äM}åÄFNÚíæƽì 'í*'¶€*C†:(Ä/!&FŠ \¿û ¤‹ˆ±™ärDzœÐ+ÖÏpÔ8|DktA
+Ö@,¹]¢eú@ªkôa=øÔ+–×<YŒfæÀ0.I
+aåÚ‰ ñ•b‰¦’ DL
+%¨ÕÌc©bÄ­èÑ©ã9“È'ˆ
+*©Ó&,ŠpÁÙæ–‰ Å°*%¢7ѪQ6°´Á0"3™2¶ò ¦øCmÞkКˉ˜Ì½Þi;7ÃÌ{½³^ú‰wq˜nüPîwÇBÿœçXˆqådœÁkt!¸ç7;•
+7-È®²2åõÌcKñYYþ!Dtìœl( ÛUVq»ØL¡Á„\/tî„N2Y¿è…Ÿ¡!»ÑõŒµ Ô“–vsܘLJÛÌn_Xm9•]6á-*Ÿõ”e‹Äb¨*ÿ¤ÐlÅh1ÑÅŠ[òÍìÿøÇ“Ñ*ú/;]ãëŠ}Åš§ €ÈÖ!ƳH­~¸ŒJ²Ê |¼—yN‡–ôQ×P½'ëã'îAd¤-µÁŠ?]O†@^fsÊlÊTñ,¦t.HLó$c€T=È6Îòªð‡7Œ<”…Of;ço, 3Ê>0A'â¥*ù½ë>«ð
+ÿÅ‘‰‰w¤~Üí\$!zIÁ÷â uÙ&U±¨^)ò(En­Ð"3&½²Sö_|ñÅ/¾öÈ#‡n¾ñ®½{÷§»òwÙïLì>7eÿÏsýäð+
+3¡®.’@Lþð6à'|Å¥ôq(T¢ŠhqoLUŘ͆8;„é˜Å’
+#q……¸Ì&¸Œ\nn´ ›í¢ZÜFKÚI+#n¡E›hÁ¥Fâ2-Ñ*X4×pú¤hûó&\jïËf™¾Õb÷é‰vVác¹5OˆÑ׫7½…=tA§Eˆ6Þ­ù”,R<ýª$‚ÅD§AØ!-ˆ*å1@DV×óãukI&‰š­D)ÄÌpcku=Y™.eÇ“z¨R¦ËX
+‡ÔJ”(8uÊ.wÔ’a@b¢N“ ¥”è0 [ ÂN*»ïž1ã[¿xê'³iÆb±Ó1«-†à«qišÍiš‹b+‚Ö,ìÉ`X˜äéà<îœ5˜”®Éb¡ó—õNÿûb!Äû¨uG—ÁO&ù\ EM› ‡ÊÃ9‹o=
+ɨIØŠÆÍP¦1T.hE+ò›R@d|žÁJEŒe³V[
+Ñ Z˜Õ3
+"ƒ‡Á«~++ÓùCš^„fS<——¥’8çD q¸¨Ç6²Šìg•»¸Õ&¸ÒB\n"®0-‚+l‚+hÁŒp'Úĉ›ñÙ‰6Àí‚Ë ÄŠ2r9Û>0Y8YÔš§eß¾ìÏL\éRúXn,·²;ýɺ² [ág$mfA³s›çkNLmX­nΙÙ/¿üò„mBïxô|Ï°ËGÛ؉õ”³²gJô®,γÂ?!ÆÔËG9yÏmûî;áXY~õý7>h¶˜P{U H­ˆè†ðþ™ßÑA©œBSÚtF¼¸¶ƒè©ã¼È
+.UuàqDµJÜMÛe¯Ùäb-ö¬ ¿ûæ›o>ÿüó—Ÿù½áÀ×ìÚ“ˆïXì£N§g‡G®Íì>Bþ®·^;²wž ßsãÍ7¡êØí·ÿMпðÓ÷ßûù×_½²;è/s÷êDÜ~…yI!…ø{6ñe`BëÊúÇäeëÆß9zôŸ¾yÓO]·eý”Mpy~Î77nÐ݈®MЬ‘ iåtðšV*ZS<Ê9&f¢åæÚÝ!¯é\M†kŠG óž€Ö—ª'ò~PUÉ)í3ïL%ÄÐÉöð3h’4Ia]LàÏ€·X2[Ɔ+`¡(61BQ‡#Ã7vz=³OgŠRÈD{È¥Ñö¤Ád-šDzuF9vtm™•>äÕ]êWå÷’¡š¢ðšR_S¹oµ)襇
+8”~
+ q–Ïàa—
+"›»ýoŒ…º¤«Oˆ…8‘ƒ6G×Q>¯élÔÅwÅœYÄ[®/W !-;¹Èp?¼¯\Ðv2’jxH/
+æ´Ì©ði±È즘Å6c³§ñB_Á±â¾AäX(›—ÎVÇæ³"›Ç¥ÞïUqžoeàfžtÐãkJƒµºPµÆ_­ê©ÒøjÈ@mi_CY%\I°Ž1Î1Vm7}õůªÇ!i¤áI9±pŽ86ÀÛÖàž:-ÑF,æcOF:„æì‚˽JZ¨µ TŒEZ6‹×•Æªè¾:Ê`É&nÇZÖÆ/¤À›q:ï¼é¾\›Ðr6¡O>úøª‡sÄᘩôfÊj£›Ä"C=çž4PI’ÓŒ2X*)‘ Õ¨OP2 •ÏGÍ
+7ŸÌ0jEý9-C³¥Ú­›éXl³6:‰iW‘È**æM¦ Ã!Aà–!¾î|5@YÞÂ7‰€°Põ%ˆÒY‘Í $¶‘¦ªTªÕ=•ª@¥6\M†KB—5ŒMöï¾~ë=ûv?¼<Vo ­*
+2¢+KEMRñ÷tB¯T´Z*ªÑ
+-‘¥PdU‰,^ùº•²ÿø£_|î§÷ÜóÈ}·ï¹jO2¹5·­lvdôÎkï8Eþo¯ÿøä?®ÝsKþý-·Þÿèc½ð‹ï½uô«¯¾ZY ”ñ_U"²ñ™IJèáLü=³ð<°iþ[MñókÇÞ=úÎ;?{ûž{žß¾9Ô¾Pm`å½6q«³ ªw’"DTJlT¢6Åa£°C.‹¡%ÈÄÙµšìchÔìŠÊ\i”Á`c&Ó4Ī¨M…L4“eT2;ó…<=ŠN•òÄÝAJɨYÐrŠ…J¹MX
+ÉŸg@•;ít±>cCÁ);hÍÄA6{+D¯¨K/úôòXÈ›8¶¹žÙ
+øÍã‰;ÓàyóÂÃìÒm°Ž¨Iš, Çö¯Ù3v´åy{6c“KÝì@{]1=Ô ëõÈ»Xi;#Ü †TMòº1C¥8S”mÃ>aQÑʨúQ¬MÏM v@]”_®J~Ž¤̵3îeW‘A€¦¦•#[½I½¸àÑð"+$B¢¹‹L»–ôÁ³1Ž¤Ã1Í;[í
+Ÿb‘}rÓi웋›
+‡AdÕä
+¼°ŸVû,²±\Äín(Tªü¶‚‹°µ˜èc¹A³"¢µôØô}®Å:d"6ºTAšMÛéþC²3;óÙ‡±€dXg´Þä÷úi
+`‹ x•Å98!n=* *­ê‚Zî/QGŠ¨iŸ²
+º,"¤e¹¿BL S8qŠµ¬/¼(llª*ì…ûþ“eÎlN.Οâ¥~¸!|‚sNá[qçœXm W«zqkb#oi!†Íozçw+ífy¸B=8§IfXx’9ü¦á®†Ïj.dSõEˆÈ´Œ‘õëP½˜¥ÆôdÒ)GÝ廒NÚqÛµ÷æÃ!x- íÝzËòÍ8Ù?vD#Èæ…ÀÒN¯£|h3Gs€b ±èWD† à=ûv—3ír^ qÇ’HGNxlöí`.–oM–ytõlH¦&o<°ûÐ^Q=j£ç¼¦!ø3+„õÙ¨üB½°’§§.Õ–-éðU+Ø8„¦ì¾wø™çn»í}{n¾zf/à E8”HÌ }ùÜ.ûÿƒë?ÿó?o¾þ> „öñ@èÖ[ïþáƒ>|ø퟾þÛßþve›¥?=ò©QèÊïÛ׉jàö3tdº^\OúÎ3v¿|ø¥£oyú±W¯Ûöƒþ‹#uLa ‘Ï EŸôv';ºš
+pònb!ÛRštUÝ…„_IôUˆºHÙ¸HÖ8ÎAФÃ6±¦$´žòAÔo’vBÄ8Z¢¥œØd¶Ð…áµhA•Ï@¡Eœ9Æb‘Ï(l?M´´Š:ùì½­°_Geø6–ÃÁ)çk.ü’t°Ò î?Áñét¾= ‡uijú¾€ ZÂlÉÀ÷
+ß q¸ð½…¼‡ð(ò¼æ­vÞÌ,sÐTµ{Îë[Uä>›‘7æk™ˆ)%6¢;…OõA€P]ØcgQg>ÍFø1ÆF}_£6è(‰åèð="Ñ™*Ëàöñ=`iÿûßç· ­)n¦—À}®‡õ²1N
+6Ù ¬åÓµúað­^E'Ï`Žæ>TŠ8'9nï/†ÿËo³BIˆŸ
+½aðDv.‚·ýFÁ±ò–uFOS@§èz°è ±Pbßìþ7~üê™êÝ—_~ ~
+œã§¿úøµ_}ààv dî+­üŽX¨KZë'ôùX¨r‘wÚY¡™-³Éå‚6ÜÝçËŠl£M¸Ù¦¶”Ï 
+•¶Éƒüƒ°ã”Y ÐÁ€0ËŽÅŸQ¯Ts ír)•°—OÛl)†ÙF£âQÔbEî€É‘"Ø’ü^³S1;½•f¦m4ràù§ð3#N¬Ë‹½I n b8À$Þ<Î÷)ñcWB V}U3\íŽÔ[üî€Y0Š: ¨†;œ»A#
+ˆž'Ê¢#$Y õãñ„Õú!†ä8dQ¾“€‚§øgk!äL£ŸEq¢Ù²•ßÙ A(˜\x—sdÈ·}&qÿþ]íJÜàvUë26É–RÑqpH*¾ˆÂô¿f¡{eÇÊ@ß~éC‡¿åf~—}š˜Ø:–‚ÏóDù_»¼ï 4=Ÿ ¿õÖÛï½ï‘'Ÿz
+¢HÐ&¸±¿þúë ¯WfÉÏ)¡G)^/_÷[‘à|·¬ÕÍNpl꺙›ýìðÏ®ßýèÇ…l°Ž ­.Ì_âi0Ì!/Ïð-»óœ3Uk {U!{A§EЬ"ŽíÂ.&
+•1TøP§!Ò(#2Y¬\Ô 6Ar\ÞG-VÁæjuÔpmQ
+8›-ƒõ"Yû?ÆBo!:ûãïÿèSæ#¿ûõož|ü™/Ýx×i×%¿ü$Úô›ëBÀBž2¢¸Q/éÔEªb“é˜NztiAîcµÓ•*ô2óJ¯¤‹Š]ZÈqØ¢ZxY©<¦R¥«Š·R€xD­_z°’µM‹eÉf_ ›ÿ|ÆA®K ÇH·k¡D6¸_ºH•®6]¨™jÖ ïÑ…ó»ü¹-Qêeó™ƒîä®æëÛ…éÝîtÔ…\êjùà†u ʉj.4™G¼¾B*ß*^?¢I?ʦ÷®šäcŸgŒ…pFú׿¾dǨ«bÈ*FYþÁ©ážW©£œfPW‘õ«zˆHJ’æ;ƒëÕvAæ²›F“éƒÎ²! ¡öª’ ŸdÄ+;xjù΂ýÂØj9Ó] U3GŠ“)53&S«ÓàÚ€¾j Ùzó2/ÆÜn Ë,DàJŠÎ}ª¨ˆCKðM°Fç$« 5YðkˆŠmlho}íùôC7~ñ±¥Éë/®é5ÒUúY³j¨Jº·Á9§U…¤Á!iÙÆÓ0¯eÿâC“jÙgS_,À¡åèÔÉägZöÿG¯§þô©Éý­tƒþÞ{þö·¿ý<Ù ‡D°Ð6þ8¿æ²rÙ~
+M ”1㵈^6È…ÀBiŸG˜€³…¨Ž4&ò¨‚-¶éA¬3™‘9¿¦TÍà|W…&Ž·È0ïgǹº4G°=s_q^(I7\8ܲŸD÷Ø¥)Ï;½ ­•óŸ iÎ.œù”Xˆ¾ ?ÿäó7ßð•3â%ÿXH§œÖI‡
+Ç ó%œ݇SI¿ rà¸T
+kU18kª“5ÚηYgqdˆ_ÉÅ
+~•¬/㌢ûäÕŽØ5îdKË郮äAnÜë‹í«ð¨ûí¸¨ÒY8˜ª™nwi×ÎÊ°@æ P‹õÓmª‰²† ŸrU'íE2ôfó"îÏ¢É(Í>.d‘
+ö²Ë9½Ç©cgÀd¢:,hµå1´—nÖPž¬PNÃ--c‚défhƒÉJ˜ Sr°­z
+Í™…Ó/_ Göþûïç±sg–n¹6uÝZúúVoäkßúÅkoýýïß2»ü裞|ü鳫§ø‡%b7÷ÈBÀBÚRÜóÒ2ýy2Ï ´ `²Ã­µ§°Ô\;R¥Ñ©§ò¸m4UP¯È³çµ0úI’¯lHÚXzEÀóbô
+Fê™YKý2FÇÔÃ`­.e+5aøäm†xYÖ\ŽEÑZ”<–渵יLÆxÉ¡]–0/dwÖEê´±
+eL-Ÿ,Ìw•zó…ÏÕu}øá‡~b¡*dªì.6 (¢±‹ÄsŽŸA>Uoo¬$„)2âySÚR®—ú‡ã*¨Fö!b¯,ª'ãwž'es,4Q^2b²ÞZÕ˜I5ºÏ_=»˜þÆÙëŸèý—dj¶Ú…FvÌ)9 ýKáÒJ[R¿\º«BÒØTñ…m›žýÍoÀ õË_á–ý}Ütöγ_<›N¯æÔÊR©ÅñɯÞxßgpåïõÎÏ~væÔmtƒþÖ[¾LjBßÀ ú§Ÿûéëo~ðÁÛ[¹&e”¶ã…ì :éþjÉÞjÉ%s´„h,;øÂ÷Þ|õÜ«w}ùÜÉäÍ‘îkÒéŒãŒe^äàeGÄ}%Ž®^&!ð\q/ |Ñb§µÈ×P
+Y›5T$yeÀ 0SŠ~zH‘ÛÝmÈ€¼ê
+1ÔX´¡¶×0Xo4ÌS¡m¸ Ѷª ²ˆ,7YÚ“_ó_Ç}dc®ð•Â¼àŽµ²!‘*³”t•}Žhó ½yE’þŠ¢m—Zio®A¦Ÿ‡SÌ_#ó±+
+á‚Kæák ;›bòÿ ½QZvvñôKϾ°ÙÅ
+œLÁÜbÆ™pìŽARÆÏã #7Ci+(|µÔ¯
+®ä?€‚Ö *» œÏ»ÜàŸ/Ò
+<  ààŠíG“Í€Éh`,g+9r™wx<pýÉì=g¯ûö¥ÍwVŽÃý±JÖuÊ ÔŠBW‰ïÐŽÈvŽï½÷jÙÿìçO¡–ýC7œ¹óúµ3™Lñ–ýô“ßøÎg åãõî»ïž=ýeªAÛ—èâØ×yôѧž~ö'¯¼þç?ÿy{©„»ûqÓúi´é^NÙíeÇDuW}É•¥LŸ ½â…ï½öìoß}Ûs3_=tYj§5ÄñØWâl3”.À6a èÑrŠÃ‘&‹”¤ ÷Óá&ÛØ GƒpFÃ<*Rග*T¦ŠWÈ'ŠsÏr&\™K{1éä2Bi—Ÿ‡¸”õrcv]Ü£êU˧Ëò3-t¯JM”&ªÍ~ñò‹š W¯®ˆÓ\øx‚9‚à’Å^ðÙTa*عÙ[cá‘2û
+]HAbjßòVrÛ×ÁÙ ÿ"À[É“ÕÒkÉQ:‡€<B¥˜±îÑ…QÆ‚ÔÓHÚÙkº0YJ8srzˆ-â±ÇX[㵫/ñ/^ÁOî´†y;i6áí’2A€6ÉQ¯&°Ã1D:1w]\$${pyõ“ðã̹Ÿ5ãpÎÖ[ö£e=
+„öGš!Ø•eg«+€$mêAˆœFiDÍ ‘¸ŽD¸Ç ÛÇ`²ƒ;»Ý“‚¸âwŽ˜Ø¯ìWɧUÒÏ3º(HC LŸ¿xÖ]ÁŒ©äÑrM¢º—ôÑddV,òÜ"?g’Fi.§é'ü™ÏÇp]k:?/ôi±Ðë¥ågN¿¸z短L͹®ê´^Ý]Å0é!ßÑý¾N
+g‚ˆàêvŽ5
+£‚¢“äì¨Kp†ü­ä°K5°ËA&jqjWUÎ
+¹J~ÕÝ„_°A°³$î¡É
+¥?>'±8£š†ø,W –+àø]̲^°+úÌH-uMIÁ¢¬]Ú¾§:„GŒgfoM°Z;cRŽÖI{
+&ƒ·ë™n0Y¦«Ýx§¤toÐS¤HW)ÉöÈxœq‚Ok©_¶Z³,dµ/ØöÀX{ò<­Ò£íK?*žØ±}u!ÄB‹§´úÅë?]žL­Æ·ù]_7ظÛgÇf~øÌ‹¿ùÍo6¼rŸ›ÎÞ·Ð5òÎ'¢¦X(¸²K½…¬Á"ëqª‚õÊ°Mv5A°èe€8d­`2_ÚåžÙSªÕ%*Uc`²ÂC«aB:¦.8R¥ëö†¨4åWõêÙ98ßuYAŒqÜ
+ˆž9ŽO¡–œ#·MPh©[mK,–u¹æpL÷ÎVI lÕ¯| >ß*‘
+µrŒXç Yø£ÙœƒCvŒx+Q?Õ4)/Ì+R”LN6v!FWk«˜^—ª¿µ2´«rP(²I;L
+“a˜·ª¿A÷zN¸¼‰u³6fW…Àk
+Û¯[^ðu²€^NÍP~ì$λ’´…Í Vë2©ý®AX¦„!d7†A›Ï«’ÊÌ
+&݉¦ˆE3—ÖIûŠËJ[2 UÈÆ4ªD]y¬Ò@9j’œ‹…^8a³8ÀILF¹I[3 ¿²íq´˜0Ÿ£Æõ. è'QyðzPBÎç[.`¡‹?5z­´âBu¡·_ysi2ý•ÚÆ-ßøŒ¦râ²ðõ ·¼÷î{›ô[?¹Xü®Öº]XÈ‘ÇB
+5î&Tbrr‚û‹è p\†Ï$dFrÓY\ÂèN·ÿH—9íõ\—?Fèq‰‚­D¤ŒÀ¤yxˆœë*ü·¸@„ãy®¨U;e’ läÏ‘zÔýÃ\±‹U±‹g­]€Ÿ'D”»øÚÇÏw9ÆZv\Ž_4;#tTçk°€I ÌQ€C¼ª¿‘ÆÀ(ÄöèÂÑË fCú
+ Ë¥"©Çë×c9
+°ÀÆì ‡«L‰F눯—»+‘*ç¾tL/ä » A{Íç=.º»-A7Î+*Ôd[¦tjåéÙ¹&vÄYŸäÝqð/H
+è$YWLS~QZÊ# <~—›ò¬Pöi„»Â2¯'©ðßz&FTƒ¿!j8‹¹Œç8ü±¹~XT Ô­¯0À‰¯RÎÔhtY ²
+㢢ÓÌ\™ïU…ái¯cŽŠê~¿0ææ}ŽqA?M&fÁ—M†Ù6cÄb^¦ ¶$6΀ÓÕ×-L¢‡;§¬TOQ/«/9ºÁ,ò@«>‹qÞl¶rÚñzY/$eL¡<°ÊºZLp1@#nw|gÝ ½"*¨´`² FHÊje¾mf‡í–”ƒOóüšß·Äñkš,ÑR)anþ‚F$ç,-âÑ©HêVn÷<‰‡ËX-÷gh¥¨xˆZé-qû¼
+€ÐöbN·òµìóÅ@H)»„“]
+±Ëá
+B®Š„Îk!Mã„ÄNˆ
+ØÃNy×~SÀG½ <Î=ÕVâ´¸OÊ*' òA‹¤ËŠl]pÁÕÒEéŒY5RW>UmœÝ¯bî#Ò…¯,ÇÏq<’©_äbñNV†ù%\‚@ ÂL¶¹“VOviƦÑA
+ ¢¨ß7»uÎu¢Ë1ÞÚt²“›ôùc>U¯•¹JšË[ƒJfÀÂÄØÀpêí6}ìpˆeçj 0Y~N)Fv$i1Ž¢Ét³Q*ÊþDIMÌÁ2œJêq(C­5J¿Æ ó<o„ Z01Ýä×Ûä-Ö°•ÝNz½i—;ÚV´i£.e«œbå8CNå³áB讑ö—–&ª°Q—®7¤|Õ1x
+>_¶h8a…ÖîòüBÛ†…^UjÏ
+îNPD¶’çwTŽc…M ó ËÈ;´U ¦DWxg»c^o²¡¼ßYr•‹3¸pµ[Ýï']ž4 ƒ.+¨Ãz@°¤ w@ZLjR·ÌâF2ßwOILV`0¨Í‰zãH*¯‰¸SŽ<ß&b» ƒœ*hÆÁ†Cð£áÄ î2GඓÔõ8ÕûkÜì_6äQöÕ)‡Ë•1ÈR•Ê«œÆŠ.]­Ï¶GíÈv§ /¬¸$JÏØìsd8¹8JÛìKt@wúŠFÙI9h®À¹£dçf,´øOa¡+ugN¿°Uì­¿Xè¶ú]óöÅËCwù¡Í eï¾ûîµs7ö¶ô~¢Óm½¼¯´éXÈ'gÆ
+º —&8֤є"/XUF}êžjmÒ]•£ÈUåJæF‘=Yp Ô;Æ)ý4ØŽ²7œ§²­æ²…q2´èÎi¯QÉc'ŸF‰~Ι [#¬› ¤B›ÝQ±|žI#ÓI¹5(ñ`x²ã°¤¶bÚ®Ž
+p¨¬ßåJˆ®Ä~C ¶b
+ÜžOˆ-;ë8ÛtAÄBºYÔÍQ¦ª¥šT2íR&BV3Ø+ÆyÇ4ÑþË'HÎ3ÝfDX€Cà2ðFKIêÖª€ñ–”J<'!£„OÒ躨²¿Q‹“ÕuÚ¸½|Ô¨›5èç9ý4 4êe#ŸªÇ ±â¸àIS™ir%h « áiëÊrÜ*i²œ/2íìe‡s36ç|±Î €+Þ¢>àìpÃ?vñ“‚&çKy~ëŸFé
+Å„Wl““ê)Ú:¤Ü%HÚŒKõWMó|B å2ÒtÈ…bL™É~1Žm74dü ®k!Jw:Æ<^8’éa"h$ºÏZrÈ£ ºÝS¨÷²A[Ù .‡fØÀΚ éVãpÑ’ïB›.D¨Ðd9 3ê„Yq˜ì¬áॵbG H”v8râŒ(ÂbˆpJ,ÐàV_Ò¿Î^SX³´\ƒ°p~¹âMŽ¡ýÆ@ƒn¬’ÍšµÓ¶ŠqÈø †y~²Å8n³§EOiI°X ÌA­–$¼ óë£tÜjƒ‡g•”ë “ '
+fTÅDÀYàlu*ƒ­ú ËõzSyŠæ~<|_tEÝÖ)@ÍUMU¢‚?æ}8º“ëq§áÛ’ád„Cõõ H?Žø2E $*'±{óJ=i"±º¶ù¢”)´† 襭:\/ÐåB†éT ¿>Ñ
+fŒ4Ë&m’v’CDtM¯Ÿ’w{“àz.nr·)ÒfÄkWå(x1ƒãD–w’œ@s8ÝJØpa)ϱ@·5 sËp‚#è‘‘çìEéÆ:/#¾‰ea×<'.Àç´Ë: ¼£p°Vón
+–«“t Ç,é©-é‚Ü
+ÙÔIQ5`ÐÍ5èGu8~ÉÆNG
+ž"ñ2qž¬¶!8ìvŒ]&N79‡ÜŠ öËp}ÒÀqHŽ6³AN˜w nvÜ©„”‡”¦ö±ÁõXˆì2hS:Õ´J¥E!H”(­w5ÎIBÆ4éÔNs|2GêÈÍ⼜°ìäÖDaº¥"b–‡ $ðÃ꺤L¶Ç<1ä6ôäÒL@¼)Ô—í6…‰É+£`Ð)ä*¡&C/›Æ ²˜¹Ùd—°Aân×<]IÈ/’ ê ŒH76Û«Þº
+1ª°np±E?T/ë)°wÂq
+îT!„,ÉÒS´Çä÷-“®}>g6ÈR¥Ôy,>ÔYV‹8(Ö<Høx®lö…õ§*¸Ø2É8RÔÖˆ½Ý1·vòˆ$Ñ Æmzµ:åT…*0ݘ‘ËÖ¢-È­Ì’nB”Ý[©Ë6³ÃŽ:ðÈ‘up³ð8YH›O6¿RôÛ^æõeüÞÕnâe\ã~m¿37H†Ï`—vì2
+²9°œ#$F-›ñZµ_ J”Þ€v‹õ .¬é]Ì3{µ;½Óᤇ¨òròKŽ¶€ì#6]ŒNx› ¾É8kÒ&Lª1Z·g™¦½9{AÞ
+©¨EÖS«ƒ;9C6¦Óm†p£~lGÍ8ïBë“{a§´Ý€À ¢Ù ËtT£ÉÚEeßNcØåš"d ż”ðG:dEþ»D©ȤPrè‰Å0¬°Lx2‘Àf[ ÁiˆòظÁŸÉiš¸ñ@$5æg§·«.ô–=²W^_šÊœýXÊÄãÍï¼ã›±Ð|pÝò-‘îÉíÂBV©_ÁŒTÉÃV]‚hráºô>}h7ñZ¢šl•wÅvë#VIGžÐolÇ+ y—ª§µ2àvOù|Ip«<@ÅãÕ磫^ÒWZð¹O6‹Ä_¼ÉâQÂSXÂöÊÊCEĈɊŠB'
+&#­±5º0H‰
+Iº±ˆc$°@Vòß AÔúǼ— !¢.¦Rádr¥4´™½A-Ÿ,U¦\ê½nÖªOî3D(s,q4üÂŽZðC­Æѽ†Á}lÐU=ˆÂÇ!Óؿ|Dœn19ÉA‚Á
+5 ƒ¼¢ÛŒ¬³áæ°]Ö¹Ëtò)«Cðp óp,Òâ9­{á@— –2#pª–nR¡‚ {dºD^9?ÙL‹iXô¤pÈ2áTôšò3K$Vc*QÅtØ%¢&ÔZA™B6ã?[œÆBˆîtŒwð“^ß¼ FèCTNÚjƒ ‰ŒÍ1os€Ã®žKà—Àg‹+N„‚ ·¶m΋,-­+£ë1¢&FÎ~TP µ¡Ú@p¸h™~
+ þìùC–\=Ž±N‚ù¬(NµÇ̦%Â×—"´Š`²ló“$V0Ù<äË~ß\áûøéÁÊÏÓ†&¾€W ¼Ó3Öb,´öOÍNŸ^8ýƒ§Ÿß¢.ôê[‹ÑÌ Üyû±ÖŽ{î~dóºèßÿþ÷k³gdžÿ),TYŒ…ü ÕKµÌ@µ,daQU'k;R©Ÿµè“–@Ù½†ˆMÞ[ í/+a«™ƒ,!;u©Ã­¦ $G<¿DÇEÖyba@AÝN >o†¦væµ› ÏFLfw¢—&I\–#L5…¥?l“÷å!Ð"=IóïB%#+tâz^všÃVeHÊLÀãZI8ÌjŠÒ™ ¬Eì=Gò8üYX
+cêÑKýKû]iQ‡ƒƒ7Ä
+vgÄy²ÎFÈgò1´dQ¨ã99Ü‹q:3,ôùuXHXè¡O:;}a,ôöko-MeÏ:? -~>pÿýßúÛßþ¶á½ï¿ÿþjüÚ£»?ÙYõòžMXˆÖ…lÒ-ÓW+ Ôcõ5I%ã«Ù´GÕË+lº˜—Ÿtr׶X†ì¥2©²…É,%G¥}^íhKÝ ¢«æLÖ3@‚K½ »<³at •F²y„kÚN.¯,Ï-#s¥dã®-fõñù2´LȈâD'‰¤.D °„)I uº­&h*Ür$íJeÎËèJ‚F>Y,÷sž.[G•dMÊ£î×W$‰ô¸zò®ëætȾ>K%ùèl?xx·WÑq–F ¯çäNsÈ)G’X¸]åL„—w·XÎlcÝ„ƒwÕçö³Á}l¨Öá4ƒZŸïíÁ<
+*xY Ùä=µlŠ®¹Ùíi“>#ªÀd;á£Nn­µ6Ä«úkñ;l4Y sM}ÉAÑÓ n°ñØzL•&*Ò¹zl‡}ü*$MY¿s¤‘…T y<§áÄlaß +Ö…Y™v»‹©_q¾‹xY’0TÇ©GJµfæ'f
+
+rŸ†~»¬ûcLFc¹|l?­’ÙQÑÞwE*™üæM+_ ^•¶VLøU=ÉAcÉÅyaŽó¥!¸TÒ—|Ï6v[þú׿þîw¿Ã-û¯?z ٲϤsZö³™ÌâøÄ-'îø ð\èõÔwž9}ê&²A+- Ý}÷ƒßúö·Ÿ{ú‡¿|ç
+Ê6_(½¼¬Àf£`Æj˜n“´þ¯Rr
+שF ÍW¯‰øÕøx8š¹lÒT>Åæ¼ 1<“ ìX}ý<ïJz|>ïênSÐ)ëP2CU¨Ô'¨úíÃ.Ã[€çÏF6ƒc%yo¤" qSµŠ°ÀNc'Ú´YR•l¦B‰Ody$»c÷¤K´ä¾I±—a—³‚éÒ1ýVY7_6„ >Ó Îð1!ÏSq€Ÿkñ¦›lƒ6ÏÃ}ˆLŠBô‚P¼ÎÒ!Éâ•¢Yz:E‰dX2"ú³y“%È _²xXˆˆàœÅ…6}ÐP:^l2 3Éʆ &˯ûai¨ ,
+b)‰é­!â­*ÙÅ´!R¸´R_³nÛ´ìÿøÇ?~ôÑGÿú¯ÿú̹çî½÷áÏÞyêø©t:·e?›N/ŽOÞëg[ö[¼^xöÅÓ§rô·Ýz–„¾üÀcßüæ³Ï<ÿ³Ÿ¼ýÁlN ?ÍëšÆ Ž(Ö
+RÉ>w¾"$… ¨e®R)b ‘·~üګϼ|ë™Gc‘S‡÷N×(Gáq‚äˆÕÄQ…³l„­ÀTHOk+£äć3h®µZ­ANÞA8ÜŽ˜>±´·Ù:‚¤=– „ÖœxkÅŒº4VNÈê7ªx°ê¤÷¯U5jG0J‹¿m¼RŸÕ”Ƥ̄¹¤SÚŒ8ß²»*h§XŽ§èBÑ¢IÚÎ)ƒFvÎa@2ü}ÆÈE]®¬Û3³Ó5,°è²5‚+‰*–úó¬&dg‡UPÛH\$ ñ¢.›w ‚|<\uÎÐY‚<kœ°ë§òQúXž¹ýUQ‰ü®rE’.°XJ:ÀÍÕêòé‚ËÓê8~µ4P*þ’^ðÏ(ýÄ
+eѥѤÊ5I³jâvuy‚²åºi•£aíüˆ£ß·Ôb‰‰Iœ #ϥꇻíä“^ÓtAe»ºb†UŒ)qß­c}/g25®ñ†ë”C;uƒ¨j-Ì:í±ZZAÆÂe`_UîÕ^CØ!i'L)ƒ›L«Ç…D¡«b3€yöèBû aQè›öxóRòªúªõYešÇŸµâóeÈ&ïI¯ç•'CÍ#<‹gÉ:Ìù
+ƒŸ4P8~ÉŽ¼C纛Îs-~Z,ôš²âÔÜéçŸz~k,45w–»èBï}¶ÌtËÙ{Þ|éµ-87^xe:<}ZØ÷I±Ð…zdvi.ã(‡ÈºÄ $ø®úéZmB'“ÕIºªp[uPÓ­Æ°]r”PHma2HgLÌa‹¤¼²†M9 3àe{*‡hOÖçK쩺˂
+u!zUKÊäãF)]7xYiiÎŨ—©ßëÓjf
+qhräÆÙôÃ7­Ü»Ï`•Q®är 3 'ò•Òu¥!¸*¥BÇ®ðv²~øá_þò—_¼ýó§Î=ó廼áÌׯžÉfs[öéôÂxô©GŸý ü¿þýßþýÌ©Û ºñ6RºãŽ¯Ó ú·^}ã½÷ÞÛÞű™Ál•Ä ¦WJ[”²‹ @¨JºWÂôj™v­b¬¹2øæ^}ã™Wï¸íñÌÄm·ŒYä¬?”£ˆg´ Â0:­'2ÊØ̉óÅIœß—Ù[Õç51‡*™#ã¸Õnû4
+@›ÒVC
+Þ ØÃ$í7à4æðV[Ûæ’NQÕßZ ™)D¿c-–!«v²J*H+
+êÐNK¾3§¨Þ"Êj€CF¦qK'|êL—Ê'ëØ™ÝG=`—u[%£ŠÓÊd`ÝÀ…EþLN:©Š–}>J?»Na€YòÍ8Q¦gã¶) "LˆPM5)9ìárϨ€›`+óhúmªbƒ›lQ
+qK>ó¤P6HÕ»dÌ„I:à¨otŒxíQAÑ]›BØt¶R‚,«¤½Z9æW÷:ˆM3V6±ƒ¸Ôœô¨YÒ `x¿!(¸c„‘/C<ç Í
+UC‚Dßl1
+ÊkT¡ÉWÚî˜ÛÀòWPõrbÇ-Id;Ž{<ÇWæ¢Ê~”^­‡øS£ÅÄ„2VÛŒ…þ‰K.ÏÍAÆ!ªCº\³ ½lR*a‘ªøÁóúfviûm%G
+TJ¶€ëþÞ"鄨U% ªåÑbbF0™[ÕÍM€¯$Js†8¤~¼0Mr±âæþ —'áÓ,Ì!’Ö^¸¨Q;h³ãšÏ^]ß«
+Ö–tåWrB›±šLÖ#–!ò5^œÛY7(–…
+àØ}‡]Ú›iÐ9J“‚ÿæ€1òYÈŽë%íðËÂÑ ¡‚6‘P?¬c°Uç¨óðã8ʅݱùB¡žðì-_Èdð›ÒñZ,MEiGíü6b¡×KËOÍŸ~þÜs[úþRòº a¡;¬{¾z×ý¿üé/67È ?Z™šÙqø™2ã'ÅBýÊ a!¿UÚɱӂHH§ùÅÝÕƒp Yó‚æj€¸ò°O;ÊqIvÄš3ÙÖ^¦eºJ˜¨•˜¬F:
+E’¦'E°'ŸB@t…öY!ãðªz-šqTÒÍõ¨Ií­Np"¤Ëë‘5—+nnf“JÚ¡zYo³!‚Û©.¤èu³f垨¹`š€üBð®FvXpOQB³}5!cÈÓh˜ÁZÒæøO9ƃd´/´¥É ”k/35²ó&££Œº*FD1J¹žaݨ€×så²özNn
+Œ«Ò #^–Û´Ö.¶";ò´*fó2á¹E²µ|R¹ä² ãk›.ØƆ*Ù,F¸·¢&¤×âld¹f£]òÖA’(jM´”¢?xq"`5óµë“·aÕŽéS3½e%רe—”Ê.©4n€Cu÷Kç~¸].ßï¿ÿ>åß~ü»·‘-ûå¢-û¥ééåÉô;¯ÿô3 ô·¿ýíK7•
+fDÊLT3=‚j`¯!¸Û8"ž¯æmö²œÉWAÒ%雃¦·$o2®´wU
+X,Å9ºUÊÇN
+DK[˜Ì¿#@pÍt»«¢ ìØ>rnî×Á‚¨OçJžd$aàÄ92¬›¤{úM¦‰=l؈ÇóvNG.¶¬3í/伬T+<ÃÈ9)í+“OкõGÜ5#“ô²y
+Ú!G¼Þ OrÍ!waŠÆYAä#
+.en,»ü,‘¤§kÚé,ù-HBýì
+žKw4²¾ a(ÀMlb†ÌŠê¹k¸<ÆUÀiÌP€ÈN&ÙfŽqÏ^òj)Xí²C¼:îd³"ujB)IœN$¼UÇT±atÄ·¨CÊå^»" ßÌö­v0ÈÁ KØ„ŽVvÇJ¤†Ÿ¯U¬FM*L/–ëÀ“›M³µ”#¨Á‘6"Ò¡R%]B¢{ŽŸPäòÎ XÜ€œkŠç'w˜"MÌL›úp­ÙZW« G¯Xt¡cŸÔdUSc†˜l® ¿`´Ã’‘f_>3m÷/¹~¶à :™˜[v€†}—¼¯à70$[ä}™ 3¾ªÉê$1WÝžÆ$¿
+à+9ÔŒd5ûÐXÕQTGÂ;ü¾Xù- µ7 7àL°\
+(×zY”;JŸò’ ›A{ÝÊA+;·z¡kõî–Ù²6+WªtÊ
+žªõ²Ž¦qÜ6ådZ ÿ¸Ë3‹KÜü$À \ä‹Ý¾`{¿g|;12Eð2åð2³,ª&+ŸØ´%^F¦(I`Ôæ (žŽdðù–</Lsü"Y¶ºiiû¶/fÛã.Rk‚{…^¦òž)Þ‚ûl†Gom/ñH÷n³D1tRËnC¼I9f”PqÀaÚGƒ€`–'<º±V¶ h¢®:€C{-Äd¤x~Ñd:44VÚ¥• QŠå_Ô3²‹;°†îa¢ÝÌP§9EŠ6YJ
+DµNÈ4õËF(ɪf=QÈÓ¢¼Ž‹ÍVí%°“›RDµð8=>¾b—¶„›2¤Ø“`>7W{ þ¬èŸ yÆz˜˜IÉUGVô4÷w醯-ds_½eîþW˜†”Q1l’ì¶HwÐs°QÖÓXÓ/Sɺü ÛÖwËþý÷ßù¹xè¡/»í¾›o:53sâ"%u2uû±Ûÿ¯nÐýÌé[ ºjÐö³=ñÄ/_øƻᄏîômš«5õ[ „š¥Ûh~íªÛ½&ÿæ›o¾úÜ«çŽvxwi›}<Ô" «åãU÷© ñÁ¬Ç8ï2涳QΛá„ÇÏã^UpålÆMHBDœ
+É(DQ^¶ÏÓpȳ:k •+9.ɵt‘6‚=q oVjp+°Ì(G'‹lÕcÍõQ^;'ˆ]›tÈûáíZëö[$‡›%û[%×Ãùk!åDÊ»KL¦&ƒ'§Y9&hbFà Ô“q;éh]t¹ŠLZóåëbhiù‹@£#¾zøUëhc’È`œ[O,Ô 9]:õÒ3/~øpúÞ÷ߟ<¶mã`WÇ¡×ê+c¡å=2»°Ð':Ùê7ê`†›•£lßÐ!ùa8:Á|JÉH«|Э1±sMÂ-ëì îÓ*9Ô"é%&Ûe­xYS™ï+L:§»á7[U#¢:
+y=¥âi5ÎxZfQtÃy”R²ó¸¶PÄc4p¬vX±áƒ0ãrÍ´5M·6Q0]0Wˆ³¨H:]g;\ÃÝl̯‰úÀË4‘~¤Ó>ÌûfÈNè‘P0/§ºìC^f~A¯œªr ­Ü#+»˜|Ô KÔV„
+RB d‘ºRç¹×ßþ‡×ïøä2c·\·a”m-O*rJ.\´©Ȥ´ÍX€lN°hÇEQœ%J—7®V‚ÜáxuÊ®Í;Êkb-ut’AÈA ¤a³¢^Ãå‘9¡i-‰â|1jR&‘6ÇcÊ^/—D ’>8²á±Ôƒf]¾Y—ÁµÕ O±5N£~õ ·áíø/ÓÿdÕ Ï(”¸ºåR™ty#S‚(½“ÂÙŠtp|™XŒP³–(sZu
+ )Ÿésm3ÆÊ$!¥™Ù‹."ÝHÒÒîéd㜲ß+…Xt€=§d—«nŸ_Ñ·ÉO‡øÖ#,ôzR=Œ/ˆŽ/êÇDõ€R‘¡€GUÙ]¥i^1™^(k2Íí`Ã.û '¤?D¨Õ!Z:ÕIäS …w¢Ã“ð«úš$}JÉFÒo–ì±|B˜ k›,Ü*¹.  XÈç/t° F9I0Õp…›î|Ø€¯<b•‡}ÊS´è²ð˜Õà9qëR~m”SEŠhs}˜DérG¦QrLLJ¼!‡«š‚ ²rz îd#¤šWÖË.›l)"r'(|õpp°v°Qb¯y¸]—ÀBšþ2,ôvƒæ¦ÂÍ/<ý¡°ÐOßûÉCŸ~$u`¢kãÀÆ®þb˶¿Q,Ô_ÁB—­ÀB6ɵ!Í íÿ
+b!È$YEJ!i*¯2•ÅÁéÀdÍò°¨DmASc>¤êó«DuØ¥Ÿô7ÆuÔѶËÖšŒ4Á'âò‡¼A¨úÁ˨w€—Ùí³¨{.(ã"éDBKšÑ7µW°ä`²ílŒ®Ÿ#açÀv •™IH¾:<#õqŸâ »n[r¯k‰bÈàsÜÌ„ØÎÏíöLl f}þ‰mÖ°WŸò©T µ|’¦k´§Ñˈbà¸OfÁËŒ³#êà8m%‹ä©;²lÛ´:«Ve¾‚¨ÒmƒP€äó€[Q<ˆzÙ®J©mp-/sJ>±Q7H†o‚ï+RÅ4dšÚê~%Û°ù¾ÂÕ
+3¥aälmS~f8UËT´àõƹ;Öm
+1c¢.Á)ÁéSO„ È×Jcµ "]Îx[°pÐ;¶³ýØqúcbڜ걅ÛõCpèXcjEšlLàÞDB$<Ñ«3^U°„ ‰™ô3¬¡ØdœÝbˆon‚dYð!ý`Ûj:•}€Ç/âÔ“˜ó
+³`µ­f0Y¿¶LƒIM];W-_ŒdŸO¾?(1JB†QF‘ª ^ Ô
+I„‘ôÕ“Y”c®Æ1:ÙmHüd 0ã÷Ïl6Ælõý–I§ A/ƒŒ+عCÛ²ÉP"ê¦5™æÛ›&‰¾ç<W®æá¬W[¨´ì<‚GEØE$ì ²)B,ªÕè‘}x,¤¾!wóù¯>ûA*?ÿJþûÏÿüOˆðÃÞùÁ‹O¿ôÉ…[Çû¦/ï
+wvíßèýö_Uú XÈ é¥­Â‚èω†qƒr¼RÛ¹èepXC.Cæ¢A ðj‡d¨µ z“¡ÐŒèŸífâ`2"T·Ÿp¥ö5âs^¦“Ñ16Ü—Ô—àdt±YÑš·Û±Î@¸ ‡ë/?¼©½}¦Lë'dŽ¹í zÃThÕYª3±‰‰ IA;ämèw×í&ò áÊsg±xµÇ#ëãÞáŽPî7¹}ÃÉ|j›/ç L@ÞჼC5ؤS)2d[ ¹nTpåÕY*^Æ©ã,x;Ûj,ô"¼#'@`³¡å(n٤Ќ<J­á—8¾ÔÉ 9e‡*·š~ÔùáRÑ,ÙP÷wø‰É¦8ý„F17Ù€ïE“A£BzŠ$
+ÁŸ!4hG×ÞV† ®(ú(s ê{²D1'Ë‹Ó¢6¨£"ï8øA.©$ÌI÷tÆrI8Í7³1­2M~âËd°ª%d Êi‡6 dsÓˆèKzA¹jmÔV·"9„DÙ£_ªðu€.¡³ê)FWn»
+óAfÔ¨#u¡„d‚%ýÊIÈ@uÊéæÆ4Ê9™â‚˜ …ò­ûÕá–º´Žg’ì¥!ºz‘¼EÙ
+å;ùÄ–æH€ 6ÆÀd~Mħyµ‰VݤрšD;[†¢‡ŽóÞrê©3‹÷^óx
+îùmMƒnÙ:J]C]Õ-ûo_xc½åÿøÿ€ƒþÍo¾öÔSçï¾ë3§o_,œ©Ý²_LeþñÕ·þ¾Ð{o½wî–(•ÐçhEè³<úø³Ï<ûo¼ú‹_üb}g„Þ~éÛ6¯¨Ô$k«K÷8È(rÈ7ñ'Þxåõ÷ÞýÑSãS7m¨ïX[`\àÆC
+¯7H"né>§2 ÙÐÖ¦H»8fÛÛæ>Î¥;|Gá‡P(LB& ÖAÙY0–€öˆÉ´Ú4I®/EÐŽ±yø‚¯àåó<—†¯IFÇä݀{m~}Ò !oìÐ6Y„¯»f³0td¡b;3b"Còö,7yeœ"ƒlέÙdˆñü4Ç÷
+ݦX‹< &³HvÓÍúeÅBUª—vŒ’IÒÁþͦÁ‰ègÅýy^,þÔãyaV€_˜noMm1À©:ëÓ„=ʘJ™o¯Û´*ºá/ÇBß“«â‡'ölë¿fsÿG7 Àµ£;¼³k°§+¼µ;¼µ+²™\]‘ƒ»;àÏÎú6o<°©óÐÆMý;‚Ï6µHTƒ…:VÅB¶ºxðDéÕÔµ™`0ï3Œ[äqr°ö­f²=”trpŸ:Jت§Üžã¼8·‰´È#`2x† ŽZ©)ŒXH¥†l«yt°ŸŒ£4Ì&ó¨ÇÛðôò>H=fy\ìˆà+ ¾Yäâ'7´¦ˆnì €»2&Ó5ŒÛe‡ìuàD äT]ªóŽg«L·Hö²’0®¶)¡Æh%Ò.Œ†Ú²]¡ÒUvÐàX† îM‰ñ€8ÒÎ ·yGBÞ1@>¢½ÌçŸôòDÀk&´FßyEB“¾À¼4çÉöãpÓ 0¶5M‘aïl qâ™9ÿ G$*HwmŒïõ¥ÁŒ`HšåCd}ïÐJ“ÚF1lPämÚqppøü¸¸'61qW=mbî!æ^ÝËÀdz ˜; HÆ@½Ì4dÇ·³1Ñ5Tb÷îÅ9ô/RaÆ ‰Ó¶$dg&¶Y¡S‡|Ó sÈf_O²!Èê5WSË4žD;` Œ|á>¾Õ ùÆ‚¡\w°H8Žç-ÊùS~Œ¾ñv~´X-È£ 5„ÊËÛ“©è ·{èôéo,Üq fÝž£[[£vÙ–Úꎨ3Ô˶8ÖUËþ÷¿ÿý¯~õ«×¾þ­Ç¿üäÊ-û…lîøÔÜßñ–=ÜÉ{îú"nП.S }úÓ÷=üðcçŸ~úµ—¾ý³Ÿý àâúnÐ;¥A:†ÌŠÒ ,aVl¨¿Š©ûx$ÜZ¸ å3O¾õ曞üæ-gÏOFO´„7l>îÍ\Í¥{ˆ¤`(t)—WÛƒ¸xž¶)Ç@Â3œÁ[©“6’n>mm3 (rë'È’×5ÈW¿l’k»­áf»‚3;Mfe’lg/—Go”¢up1»"Á&|ܸ¤×{¼ËÔ¶ç&W½0zËè0
+ÉÊlq3(ÍeÜžœß’…\ÛÈ`9ÔÚ8Íêg(‘E—ñ*céþÊØó¬3„u’ÞýÀ>!µÅ_êvÆ
+bþ:,ô?çª`¡¦µ°I²û2ëáüxW°¸ÓÒïUEÀ)qò¶l2òTì¥ç#x§  IH7xÀÕܑͶ¯ Û.i2…d¤
+_©ÉÐË.z™V1mPNÉ&ŨŽN%XmÈ O`CØ-ïsÕ¤^f$^¦$"ƒÖr­µÖËOþ¾¥ìe{š$ðOjÖ>ñéñŠ¯\7)Æàqµq8·£;¬Ýî˜/8j϶µÍ¡>¬ÿ&Œ×{&öºÇ÷z&º…cpòV4ÙçʵqL sœ˜÷ò9·{΋²ì3>Kn37g]ÑÕ8ÖJøˆpØI_‚DÀŠäü{ÿ’Àˆ{%\#½ÂTW¨°Õµ)â,YI¨†R<!‚J8¤Ï§îï`Fü|
+óVáÈæ–(@KÝ¥°+xGÍrŽzYÕ^D1רœ2*RàhÍÊp1¸ìàbŠˆ]>à”rÊöW!+mêeµ±…}ûÈjFÙ^f à¥Ãðì-k°® Œ`²fy¤I9êWöû5¿al+íi ·{Gü 0 .€ÉºÅcû=c‡=cûù‰ýžäè•éS…;Ïœyáô©§#ÇÛ9ÀBÛŒaù¨¯¬´É:«[öjY§¨XO-{8ôßÿý¯_xùóŸüÜ­÷}êÔ™Bád­–ý]7ß÷÷„Î?ù<€ ì¾ûî»?}Ï=÷>ðÀcO<ùäËþá½÷Þûýïÿ¯ÿú¯ëøvþ†mªJkŒ…”õ—ƒe5õ«ÃÇ/ê­»jlïü×Ï¿ýô“oŸ;þ@2vÃ{ØÓÐîDˆ€&ÒÇ7™¢Û­ž¸è÷&}X(F•pT„÷ãÔ'f@ÁO‘RŸµ¶im=
+§j3†3rúx:ê™}"yq«:Ù ÈÓ®"ÆZ%¸¸8ßXî 'ÔõŽºOðuWû¤÷7ìí¶Gér´èŸêb~xÙ i·ÄZ½d´Y‚‚bŒ2éWˆÌD›gŒPy³Ã3Œã4uû‘ ðRj-—7ô§¼%OCÖé
+¯Á‹›$ýzIT…áeÞNÓÎX‡‹Åí^ºýÑ„UþÚÈLׯàw°Ž!AšxA"Ip¨„!P7cô¾žDoøa7 ûY2ªª¨ˆ57Jâ¸Ò.
+›à›À=é|y½œ‰ÕŽ:[æ©Z. aY—Ò¬N½BªÃÍJl]Qiºh²ð2“Éq^º°Ÿ³îã\Ý•¾º«Bõ׶{G‰Îf Þ½Ó˜€—uâÖü>‹ä
+·Ú£#“ +/$º„(X>Ý*; °ÍFó›Ñ(‡áÐÔK"Zòv€“UxPöñ¬ÜGìu|f“d¯ºÆd>ÉÖ¿W,Ô‡=²U°«®M¬»: ¿.(L‘MÉ‚ÀOw3ÃGëû.²(¹wsH°Ê$øõFCBàƽü‚Ç{à.§ŽÙëö+s÷Z‡<ü­d·j2»ô <vb²–:ð‚Cf$5
+IÄ‚ô {õˆ‘R`qÀÉð±ÉÃvñ Óì„9MCà5MÄËÀ‹u’0ª8Ï^³lP­H[”#
+cøÒ ´± nd“9¶Å6âG}þq`Ú#¯ÓáOKçn½á gN=?¼«
+p5üX}â› !fÌÓ8êQFá£BnÒ¬ ¨û›tùílD ­1÷HÈ›òiQIÁª5NÕŠÌë+Æ^ÀËŠÆ$Y$½ÁÌ… óXùá—+â¸/\*L]Q$È.ëƒT
+`!(HDšàR©órJ1G¦špÍvùð³^r
+2J—(t˜dÂÁËÇ×±S†ZößûÇgŸyþÞ{¿xË™Oß|ôluË×ÊR“¾öìßúîïœ9u™—¾õŽs´;ö…/ãýKß{ëíuß ?¸m˜•ú—!i;BÜúË$d’þnöàóçß¹pþ{wžzx4|óG<ýT¤²c#QT$ÙSÄFžRˆW•ÖCÞ¤Çòò¤ÍÀ¡i7æ{˜ÄCìt7ËßM^c¦B­3Ï’¥ò*¢´®ôø„OÒéJÂ8û_ͤrÎÎ)µé‡:]ñ@0³rN»­­È¡¢qÚíɹZ™ “71%«!k4ΙñMæ§øŠD·(Ó¡jiˆÈ$)*y¦«”bÖ*àkÐÝ–ýå°·þLXVV|ÚÔVc>; ©®rqeLT‡½c3[ÙÜ¿rÀP?ªÅ¨{¸2G}鹩pm÷œ†šUÑ¥9¸“øj˜XYdaÚàS(sMŠ± ºß£¡,pVS©‹Ilg"”œ™^›L#`G—1GÙpÝU_j»h2&PʧªùUt*•¡ì†@
+¸Q &Ûè‰C¹¶Ð*g‚Xp¹çÜî‚ÐœÛÁ„-™YüTÌ\;3ºÙ2‚£Âœ—;‰2†a[=ÎYQÀ ÑU¶F)¯2Ͳ2zGá@©_m´~Ù®qÕd*KƒP&ÛP™^‰…3‰ëN¾¡6_hlyNg«^O2ž¯°\õzIÛ¼¾X¨M,Ô¶Ìd¼Xðx‹È§×‚ÊË&»ód¹Mâ
+x™0ëåNˆ¾
+„ÎKþñ/ù¹ç.¼ýÚ›¿þõ¯×§š¤Â2 ¤ua¡¯¬µ1èo¸þÂ×Þ>þ÷œ{<›º··;É`R@'ú †„¨6Ž5K٥˚dÜ‘W…=šaÖP„¨ØlšÝÁFƒ–²Æ7$þ¸ Bº-¦Á¢Q—§bÐU! ›ôPm0„·`
+¬Š`Y'½ª¨2VUY³’ª¿Uc ¤ÿ´èiè÷7&ÀdÁP¶Ê· ÜÐÞ^Ľuœ½_Åy2Nb‹^o.øÁgɵ›'<Ö’Ûw¹g vE“m³FáÓZ%k§¬ k'­+/ø‡ê¥´
+”Uº8¦O8C„¨Éà wI{m`2Hö5á}bc]7ÅBWü-±ÐÓzÇÇn½ûÆÛ?{ûýpÝë}xÝöÙ‡~üáÏéó=~ϧ¿¸¸;õ®¬þ¿ qÒaužA^_$ÀYô
+
+Hë}Bs]æQ¯
+OœZîSæ’ãÓË®F²5° ó°¨îQ5ÙH”( ‡,£Ëû-rœ#/ë`=ÍaŸ7ívÏyœ9@×e¿¾~´‘ˆAW¸=ÿò+R ŒÄß{«‘NѼ£ªÍêW XÈì7u¥.fâa ±Ñcþ¦ ‡XL: ºbP±¡",X;GFk$žìw+ÂíúxŸ!áRu9âd[h¶½•×yãN(~Ü¼Û ûÞÖÙΦT¨9¨ ½Ì3Ç Hý!úÓÛÌ1N1"ÐÚ]­ØTóh2íÒ=H‘h`¬ CO(àý’>]¯¥!J@îfb[Z10z<·«àcR¢rÀRUHFkÊbá¿Ð^áÚÀ¸ÌdäÂcƒbÁW0£žÞ¨98üñ\1ÿÈ­7>zöøƒbÂÎæátsI?a G§¢þŠê5½Z¤ük^[¯ƒûø€7^yík_;ÿé»$[öI‡ˆ–}þGo¼ó¿ýçþç­ŸºŸnÐß~®L%ôÈ£=ûìso¾òÚ?ÿó?¯/•Ð›¯¼Ù²¢"Ô ÛÄV€¸ð¨8¥×¾òì+o<ÿú}÷<]È|~`Ó˜¹n÷²=Óê6Ví2,œ8PRU*óÍê…Cà×<;n.Xg¨×‹Ö<$AÝ8DÉëÀëC꾪|0å±·I‚wØ¥‡Ìò!‡2Î7÷4ÅÄÀt¨¦°ÐZðù9/êÊ
+¾i€@Þ–Ùö¦ILZÝ%‡ó¨Ë=ït-Âåp'\m'°($¦{Lq^i­;
+žö¸ópŒÂa
+«Ãq¼ | Á†7ït¡¢œ\¢ŸÞbˆ»”1–l5”쇭kÏŸ,» ÔÔ6VLd•`YQÂD
+2Ý[êc&EÒ1^;˜g›%Êsø½HÚ“ñqS†a¿z Q1ÎàØmBQþ<C­‹- ŒZšºøÙˆT}_Eªi=ªhKãKhZ»™Ä6cŒFEgËB·yt«!JïÌ&T 0èI`T†ÀØpш!‘Á¢ì°¾aÌ­Œú‡¶´‚—Õ¦‡7j¥<[D2½ÉƒåC–iˆÀ7–aÎc.÷¢Ç3xÃé^¤jÅd©mr ³)z¬™ì[ÉFòA€PE,
+?;¥þuß²·ìŸ¸ëNܲ/åO]\+›œ<>5»Žo÷ß¼A÷íS úÊýg¾ðÅÇŸyæ™×¿þíŸÿüçë[‚·sÈ„Ú)/Š°™Ž 5Ö_Ö Ùo©»þ©Ï}íéó?xès/Ìå>·gÓ„­îº5R¡}— @Ò~Yål͙Փ-¸M9k5–¶™â^r°ÒF¹h-ðÍ3
+¼lš¯ S2fx}õl\¤Våüª~gcrùq¤™­Y Ǫ¯PôòZÿq:g„ÖÜ&ÓÈf&Þl,™™¹U-ìƒråITDU<ˆùìÓ¨¨‰:ˆÀhUtƒž­k Ô̢ІZ9K…NˆtÊNÒY?#5('½ÊhHÕçj³
+€ƒÖiŽ›öŠ9/‡ô€‚­S3)jbÅT3É—Í5毪 -süĪ“°‚T÷—µš|kãUQAa²Jg³Ü,3îd­Æ¬™æ
+2T³ÚógC´ ‡fVû_æ
+8Ãá$-ž¤a­bLæQÆ‚ª~»nÂŒC¾%K8ˆò^/Äç™®ÅZ,´¸®Xè-…öTá¦o½øÊ%BÜ;¯¿ý©OÞ{¼{Ïúb¡5°Ë5ãtáâ[r=Æ¡ “jbKVcq“yÐî8.øsDê=lj3^î$Ž`S&ÝcˆU}´rX;øA¬ˆW5Yª$ðä¥0W²È¢*ESN ¨Zu“¦€ºÉ¶4Ç¡X§I{ò—Ý`MúØq¿L<e&Ô–‹†Ä‡s±2ë}-5bòo¼Uy«:iÔŒÆ9ΘŸªu17dpæ‰C¤¬LjœgôE“YîIžXÕÐÉjU逺¿EŸÙjŠùü¸€°¼ƒ XhÚC¼ÌëÈ›§!éd†Í¤V™Ë¹<ó‚˜#ÔÖœo÷œð@†Fä3;Ø°OÙðR†Ó5×W·<,ÀË”V 1ª(òͲÉêÃjEšQNº‰—9u)3ƒ£JžV”YÁÅ:d‹ÊSj/; ß” NDájæ0?¼ÉÊg™;æ»kS{øµ&cÕSÝæðÈàÉ#3Ÿ?{æÙ…ÔÍmÜèfCÔh˜uJ?ª"›G:YF¶±z¼*eYÛ:â
+ìdÐ’%JÓi§k‘®•y<Y›íˆÇZ‚XíbÉø; &kSKÑ©Q½ ~áïÁdœ˜ – ž0ÝãÒÛŒñvfÌiÌUU-\#AuŸM;îaÓbKÞí.yù’dzÄdäDËù,Ùf¦ÐªL
+y\bõ¦á³U?
+…‚Á—æ\é&ê{‹eÑCà ¯‰CRfÕ§q©’G×B {dI`DEÉéV&kUŽ˜$ýtn³¶.g‘ì«—$×XÜGg$¸ Õ"ykÝF6¬UNûÈâF«~š¹Î ìx™×>C’Ö#©Î·;¿ƒZ˜"Ü+È)å5©ØWí5´&‹Ö˜ì"½cyº&0 :í°GÓ#§O•îÃ-ûÁ£¢o|§iÐÌ”œÒËà…ÃT­–‹ç,@£ rû:4
+e-ûY¢e÷©{ÿw¡¯<ú̙ӟÂÞØ™»IEèž|ìÉ'ŸüÆóßxï½÷ ¾ýéOZÇ·ê·*k6èËÛÒ6yý• õWë®PJÅv—¾ýÌO~å50ô®Îáêúº?óÅ«™BmÑ^·_'-/Ã*rõ0x1¤!~ ¦$g"– g!ÄàûÓnwÖᘇlh;i1ΰ†YAó¨c-ê$¸¿A_¤ärÎò¾<<%M–Å@ $2œ{z«!F×.à >øUýÕ@)xwH¦þð‡?ls ÜãàbÈñÈ-ÒêI:æ!€v4Û˜´G\€¬TÇÁ…«ˆHNPøVrH‹;¡a3¡ §E{5j¨Öp­!mQ%±ºÂÌZŒ³¼<=²±)e³.¢4«`w 8„
+PÀ?~ÿ,ÝÉ¥;ž„X¦(úæqÁ7-Šã¼wr{s´›‰{™éV&ï`2›™Ø†Ö”—‡ùù'(¡ÎqÇ yñ¸2›õC 3 (ˆQb%ö’„=wK{<QÀB3G{ŒQÒv!“BÜ<‚1Y" ~ÈmÝ̯‰Ù1§tŸž@FÒ×,Ù¥¬©¨¬†¨$ƒ¿[dƒàï¼*bÑeÁÙyã4gµD«ß€÷ ¸—ŸÃz”³ÔÖ„ñ
+W4Q­*c“ªÌ¢¯\˜¯G”Ž×|òݵ¥!C¥4&ƒ;ɲsÛŒqB˜z²mmyJVP½ÿšlF¤EßD›kt‡yuL˜q;“å˜)Ýíö¤ÇSäù#(xŠÒ€<BëqäÚÙ1øÊníÄs»jIûå£lÉ°Çþ†† dîFãüv6†„T®£`27‹à™ÈvsbÁËÃ鲌´3#¼fÈÙ&&CM¡Ю`®®ÍÖ«…>8U­²~0™O9`Òå
+©úZT£Äd#„ ¤œE©È„Ô‡-Li£eÜë…8ƒºT1*!5ó¼—HHw[F†”_¶É#40‚û€—­Fß=¼jMÌ$€ð‚^¦0â6Í|“ÜÎÆ«Û4ØtÀd´&f³-’ýš1†˜L©ÈÂûV*N+)V×ÃdÃ5%¯Ú!رʠb!Ÿ&qi‡u0¾wavâ–³gž9ûɧ#;Æý¾Ù€ÛÄÆ\Òí D­¬¡þ
+<a+)Fip誩õ:Ðÿô§?¡–ýÛß}æÙ牖ýݵZö ùü|rü^øŸ„Þøö[gOßA€ÐíwßM»c_üòW¾òü…—¾÷6jЯ/•ÐµmQÃÒu¿z”a 
+‚Ë\wYd°Ã°÷Íç_¿ðµ·Ïx 5rëeÎCrŒñ¾ÇZ½–ž:*#(èòê¾
+‰½nßW¾ðôÀ¿ûýe¦~{Ë"*l:N8\G ÷q{Nâ¬ÛsÜã9ÎùóD;>ÛnÙÂÆݺä/vBG„4¸ÎuHvd’8Äg“doí·F–9Ù¼!Û¬NÚ´ãFÂ'°Å4º’«¼ÞãÍ€¿-Y¯1¿ Y¶N•6ʆÈm®$Vë¥ÿŒÉìÒjR0Ð ðìï™â}3$ß¼qUVÔ• •ÚÉb˜Ì‡RtÓÈ· —?ãÇ2ûbÅdˆ9!Ö¬“™„Ù0¹^£&O÷ñ!NÖrÀQ¥Vfl~v\°Îxpvúv:øp„Çà(®&Ái+ä wî´ oebnݘWi•8-3NfÚá ½ŽˆH–‰ƒˆôÕþZ
+q|BÞ³ªÇX}Ñhœ 1É-¦á%ÄJ¶E2S"&;²¤;™–™ ¨6Tf§ÿFXèD÷ÞGyò_þå_Vr¯-£]ýÿïÿ]8ÿB)ÿÉ/ùuÂBV`!-`!·´lzæ›dÈÐRëïjeÖÙˆ’mNûœÛSÄ‚Œgžãp=ãPÜ ‡ÄΗÄÉv”;µ1dQ–‡Ádô ^f–ìQ ¬Å‘æ&²VèÂê„<&‰º‰Lµ-›·!œæY0ü
+UNRUÜpL€"t‚,UÇ°P/``ôÐÿõ;)‘ßfŠú™¤O/³m>C¥wIØ°/ò À—ÄUõ² ºzXÄÙ²°V`l³LñÆi£qΣM4ªÒŒlXI
+ïKG¦‡?ôì4 ŒË)4ÙÌrFxԉɜ*DÔÝÖaÑ—k Íõq#Éð‰³'9sæù[?s}pÄã9*ˆY?“²I7׊·}1Ô ën•úß}ëÝu\+£[öO>ùÔ]w>xæô¹Ú-û…túÈxá_~þóÿ™@èý÷ß¿õlyƒþŽ;(zð±Çî¹ o~óµ_þò—ë „^|ìkË6èëe›M²6ŠZ› rI¯ýúßyöü÷ï½ã‰ìÔ篟ePéfUššÄJvP–P¯:>ϯt3Ó~q¢­f“$Ÿ¿È‹ã‚w¢Ë1´ÅÙdu»†:< Ÿ}ã>*çu†4)
+¥ÿ´èŸ„)Á=½Õ4´Ù73³–Æ $)d˜°Ü…×Õ‘ÆÖ~:|¹7LŸÀBŸœ»ÍÆäºÍ£¨«…ã”…êx'9O ƒ®8S®æ…y^œ
+©Í!ȇye¡å¸¾
+m’M«ÎNߨõ~éCc¡;<Û?ûÀãÿô³_Ôzô?ýô§ÎÍ\? ~ïÕ7—Õ‹¾ðÐʼn¹×T†…ú/‰…à4,AÙžµ•©3xxÀd8—Ë&»LI¸N'inæ
+÷˜‡#¬xå9þˆ‡€"Ì>|i?±£ypƒL‡Ç¯¥a¨¥¾ŸvsHÛ´·:XB´¨SœfÐò&é
+Ýe“¥kMf·.Øèౡآ•ËË3't¸wæÎw1ŠV Œ2$Bß³¬îZ;N ?`¹.&ŽýeT­ê´â@£ N<©v÷h§sÂc— /ˆ~ÿ8ÆÆÀ¤?8åG e|àeþ)Á?ÉóSmöÔc¬Ã0ʲ€"†­ê$Àê3É¢ÕÀXíéÛê@>âÑŽøØI3¡öB,”źB ãï"B,? ,À´Ç©÷y¼Gp˜OmkŽ…ô£”Òß*ÛˆfŸ­©ÝéëGkEÁËìªa4Rݦˆ—;§áª& Kf㼩1߬J*äéªLöª<Ûa`\ÂC»Œõ£~5&ITªÅ6öd·01M¶Hí5H¤"'o™¿ïÌégoÈœÛÂź q†)y¤×èe;«XÈ(íPÍ28]Ò¶õݲØðí¿YÙ²¿eÉ–ýtúdæøÿÀ-û?þñw{ˆ
+„¶¡`_Ý®§yéÂùw>÷À…ÙÜCû÷Ì·”7è#bÕ¡•ÌóD!}7[æL[s§°gšÈŽ¦AŸ?Ü´Û3ANÕyÁWôyÆ{˜¨ÉP‚ÃÑ«æ´ ·vÔ¦›4fš E“mcÆ62‰-l¬‡lc"ðË]ÌP€M6³E–ìùÕƒ­ªQBÇš«:]³lP*IÑá:wÝÕ¯<÷ÊREKC~6¹‘q:QiÔá:ÆqÇ8wHÿ?sïáÞHyíË–diÔg$[–-«ÎŒº·÷]’@( ì.Þæ¦æ&Û²e5KrÙJËîÒB‡@BB'X $„BM¹´›BÚïÞ$Ïý~缯4–e/!Á¹ßëgž}`×–ä9sÎùœóžóùðþ§kIQÜG&‘™¢…ê: ¿ˆ*B¾©­ÉmlÒeœ‚€/jõ €˜æ× @r¯×‘Ô0aFÚÍedÛæg<Þ,¼2äÖj7¸s÷\¸I2ÀÐðI: WÉFU«Ï&%>@dN¬,NÕ²¨™h¿’™Æ¾æó33ÓÖP‹*ÐD·Ùþ@9¼z—0Gë_¡Û™XØ’Ã0éÓÆEmL†› ¦r»©ˆ7̦6³C»XT ÞÍî4Å 
+s^ÎÜ„…n@Ħ1/a`R@Lï²EáÇíÆ,<‡h)¢ë$ªL²Áè5yøuæBØŠñu½Éà‚üîåfà kú Ö†ç“í\ ™><ú±\qìÀÔsO?W\1í‘/œ›ˆgžÓwÌ™øÌ=4DŒ7¾ûÃÅâõ7ñ|X,äXµ/¤—°½ùWǪ®€{beRfÉBÉ‘Gç¨1.¢7¡É°ó@©yEÈ°9rˆFZ²âQ1˜ Š“;¬‰­lÂeœöé>ûEu
+¯‚û
+(‚*ʵ Ÿ0ÀMy;*P“«‚ÍÔô&·ZF;ͳÞéˆ;àáÚYUrÅ”»d²è`Wk4™u¦À¸¿~‹duÑ¥¦£zªÝ¸SápqÿÔeÞ‚] ;º'¦'ï;>{ÿõ×>‘Kžr§ 8›.c›.¦©Ö¸‚Íomµìé–ý7žéÁÿô§ï9súì²-ûLötéšÿkTB÷ÞUÝ ¿áÌU7è¿ýÕ—ß}÷ݵݠ‡—r7w+—S Õu„¨âØþ[¯»ïÙso>òÀ‹§fï;pɬGþɦåý„–šÃc\>`_µÈRjÙhÿÂcìR'¦ (["á£ÛÅ…‹½È9,Šs¼ÙÀŽàñÕjqÛ‹ŠC¬lÓ¡2ýa¦OÐ%m†T®7”LÆ2üÙ©ÏQÀ^7“ DõþN]^bµÈ/•;)ÚÖ‰[œ;Í dÊÅ¢µ@õ"!2ó|žè°ÏRr¹ŠÈÓèÍñ¾œpà¥^ü‚¢]#»ÍqˆÙa›Æý}f˜QNÕ2b¤ïR³aL1òRE²T­€ºÛ¦¨°—Ù4 Á¢„±æŒ+6|ÿ!¹P¬~ºžÊÞŠ‡±óìXpͪY.îÜ)?A,dJùPû,ì*ŸôÌ„‚§|~Üúq〼LÌTÓyÇu“6ëÔ CÑÇ¡GcÊpÁ€‰º”O‹0½.ÍíØ×Û ®®æÃ{@}b…‡ŠUŒøÕ(´Í2ÖÕUqºp›L
+Ñøè¡^¦?ªš†ÐAÃÓU¿xŽ'GŠ¸_Ý¿Ê„`&¼*¸æ£Âl8t`†Ï c^Ý°U“J€|(•Å`·<(ÄôHÀÉsCV
+Œœqüί‰BØ„‡@¾J]hð20™ÔpÖÖI(êdImK:DNʶ[†Á¡œ.\³å}eÞ?Kvü3¤uƒÃ<
+dK{âah,~-r0^ýÐዲ&Õ$§Œ+dƒíÍ»ªSCË¥?õòPYK-û¿üå/tËþ³Ÿ{ô¦å[ö¸Y6>qÇ5·þßÁB>tŽnÐßpèáº÷¾Gžzê©o<÷ÿøÿ ™z ßNoQ-ß 7“õy éd§û=óô[?öʵ¥»¯Ü5½^ý izËeI¢>y”~ ÷
+‰uEVˆ¹•ªNTÅÜUéNcv‹3Iá¯=è'µOÁçŸÞÃÅÌ\%DøŠë[tÞ†ŠïH—^›7k¦áÒiàŸ
+ ƒÓ¶x¾t,•W×|_ry½ìÈ‘=™,ôð]B¸p˜ó[ZÇxaÆÍ—±uï%çe|
+\8\d/_@&%œ6õ\RÇDß,Ž¦aÆkš21isÝ)†Iש¦Ýú±
+âÔÉ(üÌ
+€Z¥l7Å”B¥°¹5%ÚQ"‡£&C5»à }iô2
+´æ*dV
+APõ×½pYëL¦“õÑõœ³ €ˆb­ª1—~|£c8ªš,ì¿š 0ä¡Àq¥9ÍtC”®iòÒ65þÙ`Véj!&C@Ë €Ã·A™/E镇 v<PÈòÚa‘›ò¶—½ÞfLÙá\î
+E)]æB•¡×2o³”#l
+i9Y°ÂÒÈ.–±Áxqq£i¨£%IèãöYe{é
+402èeè°àG´µÂ®6+éÞ žq&º¹qgǜӵ@¦¦¡âÃ[
+÷ªWGÍËh`\ÏŽŽ»fD_†÷eq^2á߀À˜ÙÉVå0mÄA¥Æ¹@Gó!Q=Øi/CH$Ý]„¯P!»P“ujýµ®&:ðÁLV=Ô ÷¶j@­,ÞFÒ\{50^)FõrQŽÀd€ÇZÕ)Ñ4¾Á=DÉó/òæ×ùOá¦?'velæ2Ú©z윊Ý8?ûÀ ‹ŸÝØU·ÌØeŸËú¨ZYƒ=IÊüØ'f×*éÿñ ñÖko|ù™¯ÜyçƒgOß~íѳ
+—IÖGXìÀÅÉp¨¸%é6Lnµ'
+Ú«Ö NnªUÙV¶´¹uœò¢wuÍwÙ6±Ãdjz¾S?¥×æMòêÁâ¿ }Ú»û¾Ï>ö«å ï½÷Þ±ôüám‡¿§ÖÑo»jÝ'‹güú›õßö÷¿ÿýÁ/|i.{ôeùÃ`¡þ–j_h%“AuOé›à‘mZÑjp6à˜ÉNcf ;Ä{‘ʯºñs¹¹=\|ÉdƲÉTæŒe³y®ÓŒ¤£þä$GDD×ÀX¨%!,„LcvE
+æUøTã[k™\«±°Ãœ$“'„&½½´›dU‹eÎb,t0£åRN¬'¬
+·Ë-9÷·£Ú];Bª¸Û8½Ñ1"úË‘à‰ýžÉOz3àn"9ƒ¦„±¬±äÖ$I`,œêÐK§œØŠ¼L£Yj"ÑÛvÙ‘ÚFÉåàb†åÝ<
+Q,ê‰NãÌ6SÒãÎÓÕìù𧳠  0¥´ÛÁ§u“­ëHãq§b#üÔqBGVÄ1KcÚ!‡÷í¥%3à ¨ÚÀd:çî¶5:’'Úf×·M†Ø ”õ1æuA«œ¬k6î“ü”ˆº‚iÂS{Á%‚©cçP‘U>RŸöÐq#"“@h?Ù‚ìk•1ËÈÕߊí»C¼ÂCbÅqnŸIøMcÝî1(êë®ðLí*áÐI.HÎìæ¢ðÜšEÈe~õ@Ïötvòþã³÷ß°p×Fc¯±eL#ëÕ6ícS)>Fǧë/[³øàݬUê ñ‡?üá‡ßùþ¹§Ÿ¹ýöûÏž¾åTyi­l>Ÿ_˜Èüø‡oý¿Bo¾ùæ™OÝFЭ¤'D7è¿úÜ ¯}ÿ‡¿ÿýï׶#4¶ÖR7/ÍÈ7™å(25]Ò$‹uÊ.ß ëùÚ¹×¾|îõ[?õàÌäí—lK{›>[NÑRÕ*¦WÀ?û!Qzš¯ü-G‚L_X;ЭX§ë_§í[¯9Ò­é jýÌ Tg<s3Iv8ÈNlê}¥îÎñ¤Â«#á8˺¶ÉNó¬… ?G˜^“f†äÖÆ"¡CÞïÀSæ1òHi‘+æð2×.kÓJʆdW@)WŠ_½*zùÙ—]¨Õi»aŠ 6gÚNðülgçQx¼)2KfCѪŸ1J 8$J…vð’¿k~J9ÑWüY;QZW7Úg%4††– ¿6/äÓê0'ÛId†(,ËL“Ï|x‰¥=wßùŽ³¥Cm€74,Ci#M¶Èbð¾vÙ宦+¨É‚-=!ÕሶL¶AWµÒ=iüZœoD“©^íPÀ˜ÚÜ5$úgézïo
+›BÝE0ÙÆÖ HR»à4Ñú
+a­Þµð­ïOÄ2#¡Ë¤ï„·¨äN¬<&{ó{¯+Ýp½øу…Zp^èÂóô…À¸ €ÉÀ4ª–i? K¨ªpõ¦ù°M=ÚjXˆÂ ØPåÅE0™¯£¸P@¡Á‚ÉtyÎ'^V渲Ռ«aZ'WNg0ùgý¤³ùPý2TgðF:Õ”W7¸×n¯’!Àó@ÆNÐËàahWqò¤Ôî–¼L»¬”äÐFˆ”¥ÀHȱ÷ÚeWxš®à›÷ù=þ–Ca Fô¯ Ú#’—´Qx™&áÑ ¹µC‚6 bØ3!úÊáб‹øÂaO*¸`ƒè›ÞÒ–²ZP#ÂNDÓ[‹i=X( ´´cA:TK÷c]ÍGêOÓ€®€@èù;A]͇ô-¦ÚŒ"}ò¡¼µ)º˜ÑVBF΂D^§ð|SÈÚ³`ÀBTA»MŸ…ÀÈ
+Á3aVÁBú¬¸º›ZmýóðªÃ{40â¶rF^Û®edÉVåP;3n‘Ñ0+mQA€fúÚ¸ò:ë/æªdP¨n©Ð­‰|š8ÝŸEM
+Ý8gªXع0 Vˆóö<n1táò&-k4|
+¦ì:n c‡NÍ0Üp¦ÖõÇ./årO~ªtÏlꌠ<H¸ÍãíÍô¤l]CkH-_ï k»eÿë_ÿú;_{ùÑGŸ Zö•âé:ƉS¹“ÿË[öüã?}Ógéý7ÐŽÐ}?üè—¿òì÷^ú|ÚµB?xùeGsH×¼žmŽ
+b¡ìÅÇŒM—)eƒ$û?û(nÐßû™¯.îØ=mà ú(
+øž
+Ú'—èK“g)ÎRÆx’@¯ ‡»Qg¡XýËÐ1ÊÀ
+Åöiq4ú8¡³Îyù\Øš§6›à×ÄiË.V;øß©KaËb›h‡)áçÒa<”*ï,sy
+I7(ÇHMš$}Ê MH íŠ¨„!˜þÉQ£2Åk‡(•‘>'œÆ> ÔáöŒ‡›a!Pð Ï¢™’ÞË¡Ž^>³ åÔ·›ëÙQ”k!ôҢ.U$èbz-€…8µ„ï¤c'´/„yJÓK)" ŠTwÓ–ób!³ø¯áã[>öè9ˆ t' ×Æ.è{C©ZFL½a硫Ýò‹wÞmˆ/>ûR¥pÝÖð¿¡/„OæÓèSo›j åɘh‡|‰† °¨¦; S»Ø˜L¨Â!2>”£uÇ\A/“ì¥Ó&
+±QôOƒÉH`œýiäðA$û%ñ(Æ ŒTi(,…C'è¼ë!aŠ²ˆþ¢Û“'„e$?×çÈB4¹-ÓÝúþäþJ.ÿäÙÊ]‰+æÅæOÐvQkóvÈÈy¸iaïZkÙÿüç?ÿÆs/}áÇo¹ùnÔ²/\#‰·ÎŸ;ý¿¹A×í9}®›o¤TB÷|áGÏ=óÌ·¿úÍwß}²óZoÐo6Ê·Õs]ÒŽ
+WR|æÇTM%ó¬àÈVá«»å4àÐdÄ*F·´õ÷ŸÌå¿~îžË6¦\M{Õ²&Ù`›|'–ÕɶÒË ‡˜µÔ²ÿË_þòÎ;ï|íÙ¯ß÷ÙG
+‡æJ¥…Éô=7~þ =ð¹'P7èiGèîÏ}ž~úåç¿ù³ŸýìÏþ3ü¹†o'Ê/PyÜú þ†Ãaéßt±WÞslúÚçϽñÅǾ}vîî½›‡·9bþ–Ãa}l›-±ž‡dšñ§ÀÍ·¸“{ZÖ™ÆDÃ0p«“ê³zbQ›zœWã¹ÍÁ'Ù\ p“»,q‘Ïøpïuw±k
+
+húÁd†)ÚËÚÀïlMâ9¦?#úæëU6àºÜ3MP(x—_t¹Š.sžô…ð,Cj‘I&cåÃçcª.>+FUªüªå*ÝΖÊF«¬Ç®èƒw ÙTyŠ0µXži—íWÊR¬*HÉÛYæ…ŒË[ñ½3TBG8”´ÉFñ¬ÁP¢ r­ä)ëÝ©¡ŸÁ LÁ«ÕGi*—€xf”ÂW Án`Gwš°z r“­–9°&ÜÎTÚPÓf]+,ôiïîÏ}î±ßýú7 ð/~ñ‹kçoúLçƆïS©ºz¤ò£7ÞZ9Eùð_ªäŽ¿¤mûXè‚%,TåZ„[$ñA¡¬¼r°Ÿ+0Y\«ªnšÉ.U›l?W5°ßoË{¼Y·wŽ4`O
+ÂQ—µÈ7¶¦
+Ã+×ëŽ`c\œ3xšìKoq$ö´ †Ù±€.d 8ÔCVuŠc&-êI;3dúšA `6S¹“›ÝÅÆ7YS‚0̾¹H¸²$™¸f¿g2DÊ@J¼X]3ð!ñ$š´ÈÚ4iL¬uÁ ËÏÃbDŽ’ óx ±«é`mEÜ©ìGˆh™µ M êÑÐóh9mdhUZ¸ŠÛ^AÂ|1OyÝ‘–Ö ~— [gHÑ1ErÈ“6/Ô³--K&ÓáQžšÌ\§uBE[ºštjHßϼ!‚½àrsY "¢
+" Òœ‡gð!<¬b¤ 'œÔ& ¯´Ë®ð6íó·Ú`ÜâL|
+è…Œ gwqI; ¯À2
+ØÛIðíM‡:›ÂÕE4Äé&»VSìdÆ,<=Gb›ìêZä…iÁ_"g.݆HxIžùìN2 ÁãíÕ ž»l2°©Ç¼:åñ@—¯ÛE¢ÛL8eÝ|P¯œ°YÀ͆½+P°ÐnWÌ€í²ƒ¢6¾Ãœt» X´ú ‚X!,'¼¾‚ äÖÛÇ‘i™›ƒº•'u«ÔÂZÆcFN[ê§:I²ÀÆ;DwàªÐzvÔoÍÕÎï6'
+&ãäÉ6¤ØKÎ÷“í²+
+!e“XðòÇÈPëó¾Ž<ø˜¬S?Õ®™8ŸÉìU/Û× . O8üˆ‹l–2<ÛKÒºÇBÖn`2‡…A͆‚ƒ¶Éô²$™¾Ö£§ì‡‚1¬Ø⌂ùp‡ë ûc'„‹;i¨
+­Dljq™—Aùf‘'pç]·h¦ kÓy'›¹¼‡‹wuÍ#„X
+ŠéÆÀ)
+b;0¤â€¼ 9ºÖñ^ò2£b \¦aC\ºà3,? +P2êeè¤Õ¹;äwƒ_¡Ó4CMæabtê†ð.Æ«‡ûŠ¾.}IØP•ã8J4âÚzÊÙ Yg>¦
+…ʼn™W^øÆ¿qƒþÅïžùÔÍ„Jè–;ï TB÷<ôÅ'žøÚó/¾ýæ[øÃÖvLhgÇ~³|K‚«µé£2Bþc—}r·³ÿËçÞ:÷Ôë7_ý…ôÈõ‡>Vˆ!÷¯ËzðxgZ¹8{RµÓmD:
+‚[Ù„C%Ø:ÊÈM2Ük3sBÚ YFµ-“€èêVÇ·˜’ÈŽ¹³^~ž§¸â"Ž7ð³‚+(î'àíU&éÈ ¶ô´d2ºUyÒ™‰Fø ð:öΣdY;ëõÎz<EÂ÷XèêZØf[[,ô¸Y¸ûî‡ÞþÁëç£Sûõ¯ý³ýø­ï¿öÆ+¯¾ùƒ×ßýÙ;ð7õ" ßçm.ħÞT¨Ö 9›Ö©e£dêžð¨ž¬$ LÔBFàxÝ0àŽå­]À0&éÉåBcH¦nÏqÑWªÍåæ]î9Þ‘Ç}óœOƒûß²‚dC2Y=ÿ0]·„¤¦×dYã,$Ö6Ëün.n·-{!3'òD²ë®®
+¤W [r«“
+‹ÏóaÍ&keKõk Ep5¼x@Ý·ËÃB((ÆS‚¯²Õ–pê'êiø Ád&YÃÚ –TÖ”åî9K€mC}êrƒ]
+<*žo0Yw¤(â Bn;
+±žXz¼«Ñ.#Õxwu§&Swϸªp{Du%à·&YBßt9Ù²¿È¸ü°L)ßlkv=úÀãk8GýÞ{f[öçn¿ýþ3 [öÙìÂøÔ_}ýß²Aÿú›g>u+Õ §ôwÞõàc?þüs_{ãÕ×áS­íýàEÙÖ3B’Ö”
+•z"6 ¥°ËœÄ6¾~Ê¡f˜|Ý–â¡åoMG•Э7HgaMŸÉD4빨Ӿ€™T, b¦ŸTÇbÑå^t;ò";%a¡‹±ç_ÀB'¶zü±§¸¦?Ì×7ž©R<ý9Ûº…êÏÈt ­'€d¿d2³ì°]ÑïÒÉìú4dð†g E6ƨs¦l¨}Æå® ã¢gAëL6ëò¼ ²F;ÑÉŒ¶¨
+ReDö§Æj)¬¿ÖzÝO‡T-3`2ÈJmf|¤qaE&‘Ì_|E_v¹BÖ¬+
+¾rxy‰Ìú|i§ò
+¨ÓAfá±Ã0E[ÁôùÙÃÅ/àp[„0àìî./O¬Ç †Ï¸¹`!MÍù\ž®‘ÖÃ!šÓ)“˜OgFª3,þQWôb¡Ë"£`Ám}Ì
+CÔÔÍ<„ïZàg6š†q¾´é ¤îA2Êò^—ù“y>çöÎñP—‰Ç"8 ^3Y°°ƒ‹ÙÔà Jþ.ʼnn#|`“èÐO“Vpu¦Ù#-c(0„<“'ëGªQÚ‡àÖiF.\Ú¢8+[yu&›ª?/£È™*ÍÌ`åCÌ
+=_²P_ÕV#Ë,Cœr,LÔÍUÂ2”upg$
+5xÁ¦¯›Ma!YÝsYf2^8Æ£ŠÜÌ..nµTÀdð¸J&ãäCRbm'OP·BÍHMÖ¦NY ÙVb2#çñ–±=ÈK/~#6ŸYoõªcë–f§?,úŽÚôékoûî‹ß^Ãñ+ˆHWݱpaÿb!ÁBäð‹b!¤°`eQ³;½A¦_Ý’aêjÌ‚t¾ÕemmËü«—›¦;›”¸¦ÁËÜ<î)CUÒn.ÛŒPDÄë„u–ÖáÛ f ×BX&:å}€u[õy«¹æ äõ–èàŸd2Á—ó»Ó;áQÚšŽ@B£›d‡8Y¿SÙÛiÌ"Ž0ƒ³Áâ<áмtLìά3u*£$¼,ãl—¼ ¢òb‘n9 Œ­µa3Þ<ãî˜C*BÜ|<!-ØV‹šî
+Γ“¥ø)‰~b,=piYÔÔ H)ëB_Wsµ/¤&ŠöæÞ•çhFœÊ£^–
+ÈA„Þ£8»Â s¦ÊKR
+›ÆܪÁ6ô‘}J™dƒ-ñNÃÔ:nt3*ÿÎãÐŽû(
+lb K^VÜÑóª”[›Pù¡´IÖ'1hAŒÂ-oMÀGHY[k
+#ë9d [3€µœîÀ‚p4ZjÀ†B%ˆ–GE0g â ë$xÈÕò#ÜmIX¹U“þÞŒP"¶D$“áØyGÓaxCËD;6¢G ¾EZfb>|A'3d1•vZHwɯaÑé“e 0Ú¹B+ &ëӠɨ—¨9WŠÜö4›|À¡j7æ:ÌÅõÖIÒÁ“-{
+|¿Ï·Ð½ó»Úcnuœ&¢ØrEF•>iÖ‚•C(èÒŒø4qB¹d2(²vH”Òv“ù|‹ÒIY(xß_AvGÊI“±Læ»
+-çWÒ(§"ºÞ‘“
+ )Ò(øþ. TÓÏP÷tA Ó·r±4¤ºò|ÀxU8jÙÏ*FZTV3Ò uÀ:²òb¹Ú¨õ T!5BÎå(!G7Çë†á·02(ߌŠ1À´¶‚iQ&Q#ÉXØeŠ;2‚X- ˆ€@hXP÷Y›ziˆ&øq›"êÇC"¬Pp†E9²øp(ˆ¥æ•`²Ñ2+G!¬I¬ÇÆ PÕ©¦ê!¿6faq”¢Ý‚t¾`2È5vÛb¨}¦f²œ×[$äù'ýþÊ*Ë<6Æq*€5¡&)óDêa.xêOÏW²%ÀçTUƒ°¤‰'÷a/-·!ýQ $QCÓIMV&%j“ðv»R¼§CïõVƒNh£Šž®â.6n;`È¢ã˜)À‡­ò8Ü4¸Wð.ö¦C­Ê¤È ¶±ƒ‚#ç±]ß
+ø´Ëák* º…G|¤Ãbêe5“å]L¼l;›x'±qÇ7€Ø“H'ŽubÎß™G ¶Ü¥›¨FU¾]>ÐF5¸9DN1`úÛÙâ6°O{ù"Q=[Ž¯|¿w*hsµ r( Æ$ªßQƒjÒ«¶XæíæâNS,ÜžåÛK(¹‚|ò¹`°Tëæõù'<GðŒ¾f2°üo—ü0£ÂF1¯‚rÞj.‡¸ÉuÜØn6º®-Ú‘µE xY\.Æ°J:‰ š%Sy@ÑØ
+þ¢Ë0ifckj#;‚烦¢_1ýêV5Á©Ç½LÌi˜ˆ˜Rëli¼3¾¥C±ºë¸Ï7µÞ4·ôA‘bC1¸!š „™f %®n RùóP Ô¾Yiê )ìn‹¹uc"µ©GÚ•C––1³j¼S= iÂkHù‘6¶³=¾±k" ÍÖ —u»±Sçö”pxÕ7KYD¡YÂG,èÃénx–À×UþC˜ìÀJul¨˜M”¢?^§1=Lœ­UzÉ%jhª%ÒƒøNy/nô(ûEm|;‹õêµîÔ˜%·]fCûø6S¢Õ\†Rׯ‰ÁhÊ JsªI^sR›MÉî|°Efe{Ž ¾énã¨C‰Y•“ÐÈúçÇBÿ3X€ÓÝw=ôã×Þ\¹ r×-_ˆ^ÿÄŽž‹wï»pוÙÑó‘ÝäÚqàcÛ^º­çòíWÙÔ3º?õéëîZ ¥þú׿ÞzËæ™j‚wê•ëúVß©ï¶7 Tºõ­!:se­±ôÈ–8£z¡L &ë÷A&r*ÚØV3˜ îó*==
+jìÆ™ ;Ž,¶øFÇÀ¼Zl¬^Ng‰:Z—ã„yE¥ƒ #×qûç€àV B½© pñ¶Ê—ë×gëUÿVÕ‚é”
+*¡›š.¡²Ë——¿rî­§žüÞ‹wOì›Û팵š
+õm@x\}í¨™îò~ÿ¼´ö¶ï6Ç (ÛÎÅ·[â;Ú·wÆ6:‡Eÿ¤/˜ög¡|(œWi9K@âï/2Çy¾D÷D¤r¬ÒŸ$­•ðĆ¬È†'j?`ShÕS³Bðwµ*ëP½ûÃwÏ·]¸*Œä•_)$A}Ô.;âQö†õÉg¢á|DòV ¼8A”Ùaïæ¢;Ùx7—êbó6nÖÍÎl7&7ÙFqZôgé´!øܨ¥ú—?âǃ옷¥ßD–X•èõÉ™>n]±š KÐ$¯§SÛ,#NgÀÜsi;Oô§·µ'.hØiŽnãâ[ÌC[-‰íÑ-ÎÔ³þà´?˜ ‘ó-ž Ëô
+K"1ï+x¼e/þyÂSû„>ßb
+òx0h`ãHD,ìœÞmN 
+Ï&VU^^*:\ÚÞyÔá¨ðþ©•üþôööøËàNˆæøÚžÖ=í[qTÙ@/ËB…`¨–ý
+\>ÿ.6Šex¨àwÁ)J±1z™ ÔÃ
+ÎGˆ>vÿÄ9^,ˆ¾ ™à´à›»ww©€Îù¯k
+·ì“ö°h;‚•õ¹šúµÑ­¶¨/]­«CqÂQÂu
+‡C´'Í““`5ÁWü¸Þëd+àTO–g?ø­9z¬)µòÀL(¹ØtP¨U>Éñƒ›Ì,hSÄ;Ô#¼nØŒ[}NԚܧ¨S0©¿Ô²A+Š i“õY¸çe‘Ç¥ý½!fF]Í=‚fp›-*V ¢(tLQL†²2¾ŒèŸò¦‘µOEOP¦ÍP
+ö¢ß?7GôÁ¤wÚb¸™¢è×Ȇ;Pù±z¸P‡…ºþe,ô
+cºùºÛ_ùú*!èΛ¸t$/îù‡/ò¦R5;0qû­_Xp~ùóŸŸ=uûâGzÿ),Ô¯ì^ y›#PY»šH{‹+/F6Hô‘£`²62ÊB—ÁÓ
+ g’õË´±MŽ$*”ñ«˜ A‘ˆqƒØ+i”'9tÎJØ´flYœ€'ÙçŸÚÞ è’Ôd659 ÍÍ’ÄŠûa¦·Cü U/«­}EÚp¼Çç/Õëœà+CÉƃ¾”/ñò ¢x2/=P~ŸÀ‰,@º'Ã6'±Äߥ€sÂàeXøc$‰—aÃÜTñh’ÔË
+‡« –
+MæC­¢èF.¶­+¶A „¦ƒ¡™P¨&#‚Œ«ç2ˆd("GLVÀèñ–$«y½E»ýè–Ö1€dp¯ªd˜M=m¨;3J
+¢h¯–¯3ÉÍ®5³¬‡[ößøΓO>}ûm÷9}ãâìéÐâôô±©ÊÊõû|ýò§¿<{úvJ%tûmKôÏ=÷Âkß}âÏÚÎK;ݾڼ4b¡¦ O]ÿ:æ“ß|æÕsçÞ¾ãæÇòÓ÷º|ÁÝ´
+
+š˜T(iW éy–ùÿ©{ïFï*oüQo¶¥G’eY–UŸ¦j{Üí™ $C2™î^Ôe[®²%˶ÜgÒ !,-¡†Z€„°YØei ,°/¿}ûB!d$p~9{Îîû'üîý>–F.3 ‰aßWç9>­òÜï½÷sÛçÎÙÕ)¢Gç”#‚¢•^rI.5Pç4ÔˆÉØÇÁ†XAA$ý
+ÉnÈÎø¤· ’Û8ɻܒÛ]’;xɻٹ€v´Åkñ¦ýþù°?ò‚~\fêCNžœà[f¹m’ºÊ²»!>Œ¬ûË>Ž›™t‡5é«IsšqF>à"üÌ5$j¦q|5~ä§@‘ÆV"ï&Õlƒ:ݨNÛU)·2Ê)úYé·ä¢:¯¤F¥TDGØ€mT¿KÒï’‚ȼêX˜°>ÞlNõÖECÌ‹ÓD¶C’Ûy±}÷|5n‚¤Z,³œwHy½y·g¹Å€›ÄU
+»Ò
+?ñû×À½2lQ Ý:-ñ@uœQÃ1
+ŸWOÕãXå…tm<Õ{ íÈôo ý›\±=š»»øèµü}ÛÙÝÂÌöâÄÆ\r%Ë_šì>×}áM˜Ï›ùå‰ÙÂÔR!SXÝX›Ý¯âÌzqº°9=û({úÏÁBØ;}Û>,T-b!ˆ÷»-
+ò˜Êk¢ @UL¨™`èù°a²‹N ¿fÌ)
+œ>³¨3`¨=†¥.K#Py–à–vÕ%9mÔ š1É'¬Š˜S‡:Ÿ”ît1?˜)z¶É0‰†9Ÿf\L4êÙC¢ø:jÈ+ë3ÞjŒ…™ ²ö}‹Àž«dŸ)Ôr•DFT¯À¡©,òþ…&oº­6ÕVŽzÐ0ö×Rc
+Ì’×¾â¤óœ&B‚úØMöÁ›W‘¡aÔä[ô#ÑÁ­\þ+ï^ÿÈÆ̃>ÕèŽOoòVüVÑ­ëeYk‰t(è’ŽN¼þúë/¿üò?íMÙôÁ^+\Ÿ²_Ïdî^Üy“èë׿þõ#}XÜAÿ¾÷ŠƒcO<ùäç¿ñç~òÝûýßñY›Ôg†LÒY„Ë(k© UŒ*©XH~ûÓ_E ô±}-ÿÄÀ™eAzNJ&› LÃA0Ål=Iº‚*pµ"iU\G%!¦#i+d—VšÚûŠQ@%ƒ1ÅÕøËc  Šq¡*ÑS›à|ÙýTT÷ þçón÷²ØŠ¬Ëvš§NГ'qø
+ˆ "2’CKÔ’!&3u…ä²Ò¥ 95¬˜rÌ°EAú.é@£"ÆTOöXb`°‡aV„]q¹ö¦'œ¶ÍCü…X2h]r{Ö\Þµöú4£KiÔùJÚ,Ý©N–mÚŒ_;f¯ž hÇBšQøózC¾×˜YNÈW–±¾ÐUŸ¨7.;ªfCt¦Ó¸i·~ÏðÂ<6càN¨%×b.³B¶Ý‡ÀŸ0æJµ=ÀOà>[)ð‰}^ù ¸ªPM²Ãšhq§8ß<‡ä6«,_d¹u^X„ÅVoºÇ6ÞnŒuã¼rˆ8Ó>Ž(æêÁD«öGèÇ……¾bôö$z[cmm±¼Æ[OŒv5ô†únñ_¾»p'ß÷f‡Ñ䊳Mcïô ½Ã7p‹àß@wh¸§i´½y¤£5ÖÙí ¿=,„y!F!ø³'뢵ôJ½~©‰žlv§Å-í¼
+üa.e¸,FâPÞ
+6~5c 0S
+ÏàRD<ú™¶†4‡[<Ö÷kÙ¦Ë á¶¨e!K¶Ù2ÛKGAÑœ¶ ‡óª—)ôšq­Rµ\ÞJ|£«Äó¶ìÐNd}mP3ÒŒ0Ui'½Ôk‰  '˳«·p¥Ç·–¼Õ“Íú‰VgÒ‡m3³‚ð$Q,ÜíÞŸ…ûïÓŽê³TLVŠ¬ïÏeQd Ü&:ÕÑhòN… /äYÀ`
+Y‘6(¼›(ˆ8úDΨ›‹ óW’¾:YÄ.&›5úDÃhÀÝÍQ2´x±4—.÷DÕPC•-¦*j
+ ©U2‘Ž[ek2Aû,+¬†*XÁC¡¢ÇsÕåȺ]Þ Òd™; "3Æ!Ht:w¼ls±ÉFo´!¥’iM­!+?4£]±ÄèÕåå/½çþ/Ínw9¢·XÆÂú)üUi0ªFÖU¦RÉÚ8yû1Ž•‰Söß}î;ŸùÌ—ÞûžÜwß+Ë÷ˆXh3—+d2|3)¦¼÷“"•Pipì#ŸýÜž}öÙýÃ~ó›ß/çë”ú÷·T…uòSõRTLAEýÒw}é“ÏýÝ3?ÿÌg¾½±üDoól@vÖP¿ï/ÄL™©A8”iI™¸”/Kr©< ‡ó°põ$_¤¦&mŠ¨^d¸y–Ý)ó!wsÜ®‡Yil,’M@ÛàOÛéT·!f7À±z9Ü…îØ35}¡
+oþÜÍ,G¡ã*b:úÝï~÷«_>ßnðJ.7R}Ô¹zl,¹$FU:œç½dÄ}ëé›[¹]„ØäB5JŠ à8.‹µ$B»Ñ_Þ¨u€…›T¯w@¯]1îÕ/pü<Ænþrø#6HçIÔ³ÃÕ¯ôÒ±3Ϊ»Œ¹“µ1–ÏbÛŒ°ÐaLú4cJÕ³*ÒørEÞ¡I™õ³q•¡ Ì›ßcIø
+pO„9Ÿo­2/ä…£Îìö-L™'Á0v¼q!DOƒ‡%-C;œ04d|êQ­3W7y«
+¤Ç=àX&à«{Z.‘Ç{Ï ®‡ó†‰‹
+1£•ò²Qç°ÌA¾åeBIõÕu3#b¶âxø0K›d¨æ¨êóM.5Y2 HL»W ½ŽÛ#ëg”Ã6UÒ)é7„äD-‹ÕÃXVB²Š+p€Îñ/Ïçâ‚3ÿ*¶£–a’”«Ç”¬yP70’œs•áÐJ(\ø…S‚¯JÔª2vÙ|–3³Ä&LeÉ:Í´MŸ;mŒ=3à€zâä[,åZ‹œ€ÓâHôÍ.‘ýYØÇrKn;„¢eX†`– »¡r!S¿L6ÎäQ%™íNkÜ©WJ×@8¬§"•"ƒ»g&Áˆ•T“_pÇHHˆ|°€ŒøûãÖÒ~[=!Aú³P —kDIÍœ®Va¤WXå U…Ã8 éž#ƒ+¥#œ•"«#ù.5ä– ¸èEŽ›V*š
+dX £ÛVÔkŒ·š§»Í)²:![˜#øøÙ.cœÕÆ-ªIdD9êì;6Ë“vÍD£>{²6êggaÖ'ÌÆ/®¯/òÝ~õ‘û¾r¥cžãg; 1ƒ~­p0Š½CºŠá2ƒ4t¹5~¼Ë[qÊþÙ¿{üñÏ>üàû¯*“QÏÌÌ2™O}èS7úóÏ>ñÕ‡|weRè±Ç>ó姞úösÿø‹_üžü?ÿó?щsŠöiØ( šK¹ ™%ïTQ£Œäv›2>?¶óã¿ýÑÓ_ýÉ£[ŽÞ¹ÖVݯ>*ÓÇ@C§
+nü×pK DúìžWí6¥Ê©E— 4xßB PªÎøï ‹­l:˜þÔ㟠ùë_ÿú¥—^ú÷ÿ÷?þñÇKÇtäÙ[ÎÝÁ{{å•Wà}¾øâ‹/”w6Ï2’;ìÔuÞ)¹!­ôK1æÄ*vŒÑDuÔ£Ž×«'tªE½r¦A†™^ÝE¯u¤
+&F»jÄ+½â׌¶™âáÆÉö¯’üðebŸˆlÂZ¢+$12XéK`¼ÕH§Ìq ¯»D‘ûy}=tùr» ,¶ôÌ‹“Å=ÜF;·üþÙžúh¸&Îj¢6E܉óDÃ46dŽáL™<æRÇ}5편?¸H:í·Ã¡uŽäX~ž°Íš>IÇ8Ã\a™¡ç;­ið˜H_Æ÷ÛS`M@ §{«ÑqM¼H;Ó2Ö¹6<Ì*®8gvÚjnùÐâqZ5 ·¢QF- éEGr»“º³C¸Àg‰ÔF]qJ.ºˆÈHûLjGeÕ1^4اmÑd°=Uµh•EˆOŒ½i,Äþ_…ÈL=b¡Sû…š:ë’8ŽAΒ˽Ax¤‘¸ÀéÚ.‹Ìë]pë"Ô:HºÎldÛj“΃"ë7«¦AAõKDÆHσeóHîpRgE‘Y¨>3‰,ôÔ¸™±Q¸vÜ-í÷ÊúÅ°[ã´Nu©ušŒV½¤SáÎV§ Sä&*Fúá/JóÅ$CŒ¬ß¯ž0%CÓ½tÔ«Žµ$îþÃ(6·€{Õ“-iðO¬”éçX.»—òßì…b®Ž%*f·o{½9Ô26LÊÖ-üÕn=*…鞺¨¯;—,Š´KŠÅ;Ð2ø,p»ôÊ Q¿~ªÉ“öùAËp8"X,JР ùûd·1.ÞDùkœ½Ì]˜2B
+A$ ô2¸ÈåÙååpîŠØ ƒ²…A»ÙJÇ-ì¯ÐõU3^ ·Ѳ>¯ôˆÌ-9ë ÎÙJ("ƒÈˆXäðòŠGÚï‘ãl¾[õjb¬:Êi@dÉZÍ´Z‘Ù¥8(qó€‘TÊPdz
+ëw€~½ò~Ÿ6ÒQ›Ù§OÐ.UPÙ[Û/²¤˜Ö+gÚÉf—t àIQdÁÀÝ¡ð2#,hÄ<^Ȳ ZEÜdí]⸰NÁàjÐwÏI¶x· - ÂL»%¨ŠÁqÈGœØG=jÀdÂ(ýˆ Úñ =òNøýK¡Ð
+˜`›ù©Ñk;ùÇÞsק¾ú™îà”C?ÐŒ6HÏ[#a¥Þ7h_'cÞSxÏ1öQƒ;ûùO~öÌ3Ͼÿ}ŸxèÁG
+…k„zqz†<Š™™¯|êkG
+;X
+÷ìiYp) Lw5Ć4À3^´‘ .Ö¬O´»“þÀr(¸K~É1„@‚Í 7ÓkŽp5 ”ÔI«"^§HÖ©'9]²Ã’rº‹nfÐ æ<I]UL 7Ê‹­ƒ"O,Y”ªâ•¤ñàÜA#NZ¢¼oÎï›oó$»¢–D«>ÒR5ÖT5ÖŽ„U haíP@7ªŽ4éã­¦dw}ì„#íóÌ"¢p-5×Íu’Ó’Ù´nÕç
+уU,ˆ,4'ø«`»¹ÍÒj¹U0Œ.ÓYŸ
+øDz*¦¤&§ÁŠ†º×œ„ûÓQ;ÙkL
+žyäâ
+^/‚¯·À°K¤×âz£Ç‹v`¨;QV9R®Ž)¨i»*Ù[ƒ0™pÜðcOT0p ì¼±Phþ‹a·±U‰[÷"¡Ö†H…‘2»Å
++N÷–Û½Ž¬³Žu‡}+l™ï¥£6ãŠI¿ÔŽ5h&”Ê| ¬ñH ÝA5”±ÐîÛÃBß®ªû²‘¹ÑõŒÞùWÄBu‡±[Ò Bä«’M–9€Í-ÖٓƘܰC ‘èjá¿5n5\Ï°Öé½ÖÙgÃå´ŒŠšr¨ÝÖ(ÒbºòúŽqB`Ýï[Å%8̶x±%#!X‘l¢_Å5ˆÌRcã†Xêí¥cµ„˜Ë§6ªqù¸×Ê †p«±/¦¥’lØnu&yÏ·Æûr­ö´Ëˆ›0Cr>GiYŒô)áSHÌJ]ªSÄƢ׶êö®¹=«aW&dY
+øw!
+·þu¿e¦ DÆnÈMS¨k<Day‡kÛéÜE^ã¤)ÑiH4 âR³zÍ”Šˆ¬²Ü
+^ƒ«Ób*º¥ýlU¢Åæø `§/ÛÔ8åÒ#ã®yÑ/ßHdDRóʽÀ±Pƒ"j3,ûœY··Aߘí0OŠ»¥¼Öµq3 ²$Úh᯶ñ»p8Q
+€ ËB Çûò>ž”ØD›yüØC_ G8Á0ÑZÂaæ|þ90Œ½ÖX—1ÁÕL Ú¨ ¼r:›Í>¹½òéÙØ=¬äizŒY¥=àñuòS"
+’ËÚu²@Ì%—s6©ó«'àæ ØîßüÀûŸ¸ºöpqeežä…¢ÑìÈHrdd,Ë•_û~¡pWyè¬P¸zÿÎÃ=øè?ð‰¯}ík?ùÞ—Vñþ…Gj¥~“4l’6©åï¨ÄB ÒN|àäpÂü§ÿæs
+Ž¾©v‰[Ù,ÜÛžL?·ÐXõ³­®ÔÉZè1Ä:iVê¶Åxÿ¼Ï¿çdÀ›¹{îþnð('‹ÞBgQyŽìM¡ÿý¿ÿ7¼
+À°Y ÊÇ}¹GNûgB¡µ‹Æö“Å]w
+x¹á©Xgˆ‡m¬ß<iŠ3Æ,ˆ’Ñ%ÁVkUÙÆR°,î»Ç"»d˜×Äš™4ö@ÌÂÏ6EÀ)ƒyW«rÕT²„…&*€÷²Á` @dµ(ý””JÑÔhƒ*å2d×¢Ç[t9WÑY˜7¬fÜîMxìÁÅ€i-´ø7.x昹.^,„=S§Ì‘“t´Ëè"óeí¶$öø—°–²ÃÝð²íŽD˜žàu $åÓ$ÀŠ‚C±4Nö®–×4Ôz#ø^ý<y­q¯Jxj¦›íS„à¨Hk¢ìrGS)Y ÿ•%ëÒÖü:¬Ð‰KçòÁÉ÷W§a6à_)·EígÙ&<'7¤CñxvX~‹t®—{–<9—mã”1
+1¬‘Fk'îµYÒ~ìXèþà_~ê©g¾þ,\O?óõ§Ÿþ:ùúÌ×¾öô'>ñ… ™¿Vìh,ä’œ¨¡"à>ú¹N:a¦×Ad.ý\[CÊé^wcr/çv¯2±•J‘a3nYãýË>mL,]‘Y¤‹NÙ «ÏðÂ|(\½ÉAâ²à¶Ølv#‘a…ŽC‘9œ»/î¼€—óÔ¯È즂‰.z«Ò ê4YÛWâ5ÝÓ2Ì%VÅC|¢60Y‹è®–^õkÇÕª¥*äÅ.Í%Uj|Ÿ²PýjT.ÐÜY¤>̨£ ô²Û…<]6'ÅÕç`ñ|u9Ð}Ž›Úäßbf†¼™æàš
+DÉFê¢WkÖO’©ù5Þ–?A§-Dd½¦x¸v Ëg$·ù¶†½™aïô‰`DÖjO6E{±.:ÙEÇn1·Ù¼NÑ!³s/Ü%Þ—í¶E|†)|çš1¯:Âȱ¼b¢ÆÁ8åw¤Ïdçæ>¹´ð©&Åí¢I¯“ž$5²Y^ïUÊY@A⥳2æÙÿþ÷¿ÿÎsßyÿûžØ(<´93“ÉÌŽŽÎŒ\ŒÎ§VÄ_¾oõþb&³1= ×ÖììF>¿ºº±»úðÃ~ð‰'¾øíç¾s¼y¡ÊÁ1¹¬S/ e­"2ÈNÕå©Í
+Ö
+¬&j’'iÅ”Pæ¼ ¸ ×Sp¹±Å]Qe(§<,ÜØ»ZŒIq½¹ 's\Œ‚=ÀÂz(¸RFD$ÍX¸©¼Ê×Uq?ŽË».ŠLEþúEY€ž6ÑkA͘N½(_ÄÉk°lÊñN;&AO{¬q„x:¤â!ZÖO6Vݲay
+ÚìÌÌ€¢\®¸üÀƒ÷}ðsŸ{êÇßþ§×^{í¸àÐì@¾VÆX\k†«I?•UÚe£ó!g†áVN³ÙÌ# ™÷YfÙÀ!Mu3ò»«3uªÉ*Â!:V|¨×‹ÑäžtÑs^ ždË”ö—ÙMËs£Q#w 齿(ž( sPçÅ`SMš÷fáèŠív⤡ɸî2æü¶,ávôyfÞ,žeç¾LžòTM@übPg5ê¥FÙ!8‰jí’>lƒT >÷jÑ
+ š±÷Ýûø oôøÕ¯~õÒK/(—qóN­›‹æ?ÿó?Á×
+ͱI†@dð´ 2N‘qÊax·niŸmoù¼‘ê+1V%+vE·yƒá‚#aÐ.åi 5©¤¦ÊH+¯*>उµ±ðÊ0Y€%vûÖÎØ6w^ÚL¨Å!Z>å¬B- sjy–½&ï1.’#W‘`ß"»*ŠÌã¹ÆðEÒ*°ìåp-Øg
+­ º§ï¬5 EPmÞ0ÔŽ8´)вjÕ8väv¸Òˆ£sWHx£òcVó(Ǽr$ˆ°!38Óóð)J$c¢–Åo¤e45Z+‹™ÕÓ&Ò6ß¡ˆvnϺ˵QYñz­œÍ‘ly·«!æ‘"=É’¿Óªs®šénKŠaq±KlÞóá•Z†*†®GáPdyÑ ¢–y6è[ÃÈ®:\Û$¯¸èõ,cG!8‡VdÊ"³P^
+­»3g­þU@5~
+d'žI><t+œÉ,ƒë±÷\°:éØx¤}]–8üzMŒ4< E¹pÙ@ ÔíM>JJëütÔ0#9ëWvÔ'¼ÞtRì"ŽZW|ÆYkκk“ ïáðò3s6°Úî[ìt i°SDŽPÅŒSÚ§£Ò„µãJÙwá5 j#ÓÄV„/ë’:ßfê{áM?Ä14
+à%É–c}deN£Fß]š¦)_¨nd !ëƒ?Yƒïn‹ìZh´ n=ì˜bõ“ ŠH 1¼õ$ÿÖQ‘
+‘¯WrÞ§kmH!ƒgbU§³hoر›
+Fˆ¬ØV7 ï¡)PöNŸ ¬¶ù—Zâ¸{K3"ÓƒÈpxJ¤m(3Ω¨˜'š/‰„VB#
+ÙîQ"Û·Bà)n]$]ŸÄÃæY.{BrBÄB·º7tö“Ÿüòo~ó›Çõ·¿ýí£~lãü3j´‹‡“¦¢YTƒÃÔñ:ªOì§å\‹$¾Æ{^®³8][X ô³N'ö¦
+B–S ‘lÆÞf–´‘ZÓz§y‚̦mâê.Ô”=‘1ø½È®°,âÒ£µÌp‹döP^„ÃéþòdstLÖ Û$_&–Qà3Šá&ç$Ç/rô¬E3; eðVáü×PÃâi±¢Àü¬ôN®*ÙfO’­C8=ÛðŒ¸»ÁTØfÁw7‹ƒÌì>
+f{ëÇ™ê »zB¥Îe˜%Ó`s±‚ä+85ÔP-2‰‰Š†™ø'D¬Ò½Ìê›Ô²={‚lÛŠ©*X> SÒ‡õMä–/`—ûu-Ë•º©Åâ&', ü€=±ÌM°f§ƒšQøŒ^ë
+Ã`|'‚$DõUhQ4À¨ e‡å…^‘`—VÈZÀkdyå2¢\D¶ÐUŸ`«&È
+¼ "wA¬äJqÂ<c˜3©f
+d;ëâœ.iQOC@jM •4¡b¨H %+N.‰"³’”8FÍÞö™²Èö ¨šèq§/ž} Ar^ü‰UÚ­—u©e­±
+(rˆMà+øø@ uIî”ýõ°Ì"X6ð/áºù6óT§yÊoœ§*ßKG9a®%¼ÜÇg/ó¹?ÛfNù´ãZõ’^> ÊNØ.“““>4 +5‰rABE%ç~öÏÿãMp• Ò7j ³@
+7±$Uñ›Îkȉ›ßwiÙ†ß,ñÍž ^7n%Ñ:B¨Jµ[&ôY›üh&|5mÁ¨
+¹4T’‡œ[ä¬O5Ô^—ô0ØÓ%VrÛÍ“ëb77‹µæbO]\ð/ò-¾#´=ÀÌùŸ>Ã’JŠY–€ç$ÀõB‰r*~”¼ûEvC©©¨‘ÓÎÄÙ3;iõê Ñ´á( —FÚø±{>q,d
+Z~ð×,›s£•ð³gØ!ª,Tn~—+…*vº!!3É©Föº¼.€È¼UÖš¥jÕA"2ˆ^e# ªd£*U¥B @VEÄì(²‹' Ÿ°(æ4 è¬ùz›Ÿ1±ËDæãgÛü+çü+ ²f8*ÕÒ¬è”öCäÀµDÜšxKøÍ\‰2Ó’bxUMÅ,ªÉa
+¬1¦èK HN§˜^ض7ìœ2FÓ"`{VXê´$œ’ˤ^0ƒ4GêŒÁ°
+Ÿ±Ç”p¹°ÿóÈJ„Íy-z<+€¸¼àÑÛ¸T:бbBi_¿J °¯ˆü¢­’–#±Ðý:÷[ÇBá;?þ±`¡{߸ÿïÅB6‚…l%‘‰£Ìîâ¾¼0=Î…t¶/–¹ÅÊÍ'àk\Æ<ˆ "îKÒ!x‚bÜê[¯ÉІ5‹y½½vJôËGÊ DãñÂ"‚ŠtÁ÷"Ð%ãüDd>[!Ðv0¸ šUnd WÛœ V1D6#§ ÃÌ€£zÎ]5U/?HFN¿QZ–²©' ¦«Ånÿ~0eÔ9A~®Ã7¶cªÐ“‡ðÎd+ê¦÷´ì$áý³§„¥w†¶.s™&%T% ª9­rŽä‚&*PPâ/£b{ZV™H¾
+Ê¢¢¦œêo&Ò
+å+±Î^¿…+BLË'ê§
+AdÈç6i’ã’©*jNšEv¥­.ŠÝ€p0-pKí4`9¸ `OD‘2Fx_ö´°xÞ·|'7 G…Ñ¥@dµ²8ØX× ¥¾ôøÛ‚ë´G‡ïÜõ)/HöJc§tØ#Ô
+@H&c!…Ô>Ü‘<.þáçñ˯>õ‡vß·–™¹8Ý3ÐÑy¡µ¶ ÿø›?¾Ñ“dîÈÜvëÙ3gÎÜöÎ;‡:D8´29µ’¿ç}ï}â[ßøÖ‹/¾¯r,#oð$õ¤\XyédnöSµiä·²Š3½ g'X?Ë-}6›¼Ö˜§À´ÛbiŸ¸UÉÄd‘F4Ë—ÇK!dS§5³µÆ Ë #V²#ÆA]
+¨‡ZØ)Â3s黆 o±Ó<!›Vó´õ=*pÓ-ÁÕ>~ñ<Ÿiu'…ªx•jÁ.ÖQi÷û ¼e—RF~þ—¿øÅMFÌn¾}õ÷¿ÿý‘CñoæñÕÏ>Ýfˆ6ÑSåY˜a!±3aŸ«eòb4TÂBy±5eoË6xÕÐÁ)Œ`h¹µ>é‘^q
+1›®¶<»Ñ>ø58ðVyÜ­Mês儹Hø€© etÑ£5âÈÏ
+ïæ;ê#â‡ÞÉÎŽñ£rAÇ~¥E‚åJ‘‰i"€¯=®"klØ>iŒYM« Jz–ó͵4N¸%X#SQÉ€O=
+ÿÕeHxê׈U<2õ
+?ÜÆáÙŠ`+ drÍíY-Á×ËE,Ä0×ÀÑÞ åšõ »—w(°’>V§LÒÚl"SNå©©I«‰4è—j+Å0MWa\É-¹Ô\5, GAàÏc‡À¿Þj³å]tBðÍÝÊgAdÝþlg}LÐŒ+y‘;š<F‘_ U]º|éáæê>)ù‰Ir›F~K•¬™–ºI$ö@H&µ‡ô§køÍçžýÖ#<¾9›éÏÜÒ3عµuô}æÃ_¸ùSEz£gÎÜ~ïºÒÞOàÐìzfz}ùþ~ð3ÿøÜ?ŠõšcI }÷ëß­•5€C
+úçCtÚªš´ÈâfjÂÝÞj³·¯ËeÊÇÑ`õåÊ"WeÐo¡(&>NhÏ™©1Z™±N!Ú«+Ž‘rlƒ‚»Ü먊ýx•±-˜hÜÔ†ó/×ÊV:X9`ŸACC¡e° aCÂ)¹ Vœëz:ªUÌ+‹YT©XjÐLZk–<ꨓˆÌ@6íÖK†x]œççBû- ¼
+v_×΀¾{­â—Âáµ³Þl 0ª‰[T™F鉯¥ú[doÜÆ ¬Øj!.1 Ÿ¬48ÖSψW—90Î6WÀiÒ†5Cͪ³*X¨Ûc…œ è'®7XéÚš²7Åú×òB€]Yv <,N?±¸à£í:Çëø,»]yoþ{þ"X¨éÜG?òù#±ÐÃw}h£?ù×ÅB‡û…:Hîn¢„….Š“ép~lê £»GÊ"óÕåNÐÓ2„Z´a¼*HÍd
+‡0çSìõ6ªf,ôj{í”Û4/N×úMÚN°+eKp˜]î P=Ò•wÍZ†"»ZYm ‡WB¥‰oBU„]CÄ0n«ãNê¬ØàQ‹;éÆÔŠð}&YJ©Êqš¨§jÒ«‰€a¤©Q r㺦zç.÷F\ìÅ-6Yæ
+º\ŽËòB.Ú¸ì™kæ§ÕIZ5ëâv ë^™)ù—ׯò…uçòä)ˆ J-Ú¨J™Œ×µÌm[-‘Õa èºAÔ²jÔ2–Yä…,«\ŸŠš¤Õ3fº¨‰”Ø  X)÷ÿŠ;Ö!„ë›`á'b——ËCò3dÊL”—ß¿º_Ëî‘}ˆÁ
+œ®Suã.Éå9FœÐŒiˆ¨Uª¼Z·Ê£µHÌ2&6â¶eeÊA/3ž%²xe¹Ì÷9\‚L’H3‹„-ÁÐj‡3ÎjSzå nãEûv‘zëé Xi¡ÞÑšFɹŸÿªEN§›?
+õôŠ™cø¢O5,nUEæÓŒ5Ó“8w_ªiâ4.ÌÚyC‘1\ÞËçÉZ´}´6 ÿ½ÁÀn8\Àñv§Œ…î X¨ÿ8°Ð½ˆ…¾ðÒK/ÆB]û@±/ùß—ªóB*]Ù`,_ *oT%LØI‹¹GÌ'-æu
+RnÐ6r%ÔSQ›d,Ùr•zÞ•– 5ˆªêI8¶ôÓQÜûƯVŠ çËŠú8ÑÏ^C²èp¾Ý ¾ÌBJ'¤4É·gÓž¡NrétÛܹ“ëF<)5j–õ˜e!½”9²Y.Zê8–®
+‘× ø¡G“€ð­×Ç cÒBIå‹ ³òNŸpLu4${"]u1¡:eW§àÙjði‡«ŽX=ùçêûÄQÛ[ÞXÖb«‰‚¬ )wCÙdà7GM8Ó±ÑJ§êÍkµ¥t½G—jFx ºø N/òYο̩ÇÅæ7 n³4ª§-ƵsÚáØ‹@ àU/³ÃàVîÜaëto¡Kå WdØíJ 69\7Ä<4ÑØêYl—4;º§éüÇ?z,´ûþõÔ{L¹A­(2‹,êÓŒ›ŒëVsñ$ÒQÎÕš×F™·* Ñ«‰Ö×diºxÊå„VXò©FÊ{‚ÀtXˆÈZÍÓÈü@zkAL„³kDÆùÊ]½{ ÂNƒ¼Üj©ú,Jíšß.uf3Z#.€Pa»W|úJ,Ãïp8F‡ E¤''|³ðÒ¾Íd­q ÿñIVÊ 88iÅÌ‚–u‚–ÙÇ:jãaÝx£÷ë¨<ýñ·‘XHÝ`¯Ä÷ U—èSthWÅ}Z>+ÛˆÈ,æFÓ2™(_£kV뫳€‚xMDL½B<Âû8_Ϋ×p
+õDqU°
+¢*R}UI·äΊ;™&ŒLû†|å{CX—H"eX«\€pƬ_î¡ãœ‚ ¸€px#ä›nªŠ0ŠA´Oddƒ1SãÂKºbÇ!²äMm‘Ø[5HŒÙ¯UÌ7J10¯•Å Äãt‰ZB
+IÙ!ÃXAwp­œ±ãbˆŠm#~@A»Nl7*ü…°Ð‡òh,tõýÅÁ¿v^èÔ¡¼È]
+±m2úö¦ Þ°¿èFZ6!ÂCˆ!Wäà+†À²¸N½èªÎ
+ݱÀ¡z™G.côQ+dí´¬]#¿•‘Ý*Ðsœ5ϲ ï Ì/L½w6zµ¥ª$úb•2*2—cŹûÒtsôg+ÔqOõT‹!Ùc k†yé9u¾Š&Ìc1$4aKá¥ãè‘ŽW0…Fo ìHÝ ¥†~ð÷ß»9"x“±Uÿñ¼9ꬾ\Þ…aD
+Á¤Q=g6¬uÐI‘2ÅéÚqÄf˜½1y’{¿Vq]'Ê€°4Œ{jî>¸h)„/N÷6îõvn³¾B@˜k¥cnù ‘Å>µ*ïˆy<ñ^•åo¼’E‘æ5Ñ@U¬½&ÒeŠøµVzÁ†[ÀH)-%òèjè ²=Þ’ÈÛ|Ä<^ì¿+‘Œ£=ã¼U©Q/Ô«‘–“WŒ#\6ÑH‘]“]£ËétˆX †U«qµÝ2Áù²,»ÙaJ5(£¤±¼Y_1R³zÆDDfoØ&ÌÃk¥¡€C{ëQœ®½Z!¬½oàÀC)ÎÎW^>_‘á‹„¨¶C> ½~¡»›/<þØ“‡çÈÀ”=xõÅáÔ/jt¡Ôy£,U¥ÍÛ5NuŠÓD\U1'^&¬³
+t} òD–K-çYhÈÎz¹XHÅf»êtž¯ÛÕÆ“ÁB
+'èGžþàÓy¡ÄÑä±c'X4tª³l4066¾49³¹rï;ÞöÁ¯~ék¯¾ú*»;—eNƒ‡
+H‡hÒ" [Td3À!#yÌ¡œéP\¶$“{cGª8½ù®ÁŸü·&Ë’{0r’ž3 Ž‘Ó_IŒä)> ÆUåhùøgb{(4ÂËU£³ßõúë¯ïÓô«_ýª$QîzöS_7 =ôr\änsU¼(à
+ æÅ5[PMx‡Vȶ‰B/ÛìkY’·| t—ëï-©`ˆå±î±¡Óð6mÂ-‹Ûùp·ûðË t)vZ'_e›år‡·W•WåCrD²¡ZΉӫ%0-Þx¶2&E39NËò Åï[ L好ÓX‘gF"\p‰#°{ª”[€‚4ÙŠ—žf£´Sa¨(„h‹8^#›S«¶»UQ1–\v3³1j#φÁäò¨ivJ¢õyÔÞiYÅŒ‹W³T·Û˜6|›lfåTvB4„b¯çêÞ&»fCEþÍVŽwš>0×â= =ï}âã¿þõ¯‹ud
+ƒjË*I¡)uÉšR²¤“¥+Ôˆ;ˆa­Ö+>fÊA…uœÑ,³}Š­5Uðâ6i2ãeˆåf)Ÿ («“Âr€ç{˜ ¼Ìã¾g·’iž—1N$ßX3î‘Åì|ðŽsjôb»£*oc…¬A†“1‚L„›wŒ«Fì CMœ>Â?‘+»ˆƒ—‘åô²Üƹž—%KU@hr"N‰–I‚µBAØd9YmH<â°N<&«Ïiäk:õZ§&a·#ìZg,šs´™9Sı ž«àOê¥sZÕF—:a4nZ¬k¹Óg«}ÝŠ,…‰2ÅóÂÀˆOïÙCÚFæ’ŸÙZóJBÞ Ó‡÷©è.“å—†ÀñYînÁ&›ÍÃrÓqÊI-g°f‡Ö)• ŒY“EÊÅco2
+ÒÄåZŠ—£g¨æ²`Øï ½zîËÏ=úðÒK£ƒ“wu瘥3œŠ-ýo½üŽƒ¿Ö`ËHn¬¬§uOÙOo¢)ûßùøGžÿÊ¿–qÊþkŸþŠ’£ß‡ØêPéóÞTÅ9B~%1PÅééЇýÃo=Ö1§AF b<N˜n«˜qzëî â=¥à_H¤>
+Ã:$Ùú$,#™f”¹+³½¼C´Éj<+ÍËü¶X™ðêî,/»2ßdÈÓ'ÜÉƨA5xøûe¼»h®FœŠÖb «–dÊØ¢oí›o{ôÉ [ÁÀܹ¶Á–Öþ| ÔÞ~f.¸U–—ûÜGžíiºëè1 â)û`pîÂÌÌ•õ·¾÷‰§¾óoýö·¿-Z^“pkspˆD§fŒ+—IÉ:9Ù^Åmç ðÑgzÓC=WO6Ï8ý…OÅD†ÊàpŽc„?QW :õ¶’ƒ 9èà Ù…#QØJŨ9mä¶ñ`D‹ŸŸ’‹G?õÄç÷º3øÃnDb.Ö{]vþ¹\V¥ ‚èY´b‘ŽCÒ
+^o×®!âërîä½ ‘±Žb»ýRˆBfêñ¬9]ó>Çd‹.Ñ ˆ@
+Àd!#•¬À-O·•ÏözXè:ÐQíq‡ÃÜXÕ¤Iw>7‘Ý©IŒÑ¨Ï+›v\BQZŒ/pždlÐM;Å!¸!¸‹2–3™€˜€§ZL-Y$ãÕv‡2ÚT1c6#šâ|V«} ÃׂÎv<Õ»†Læ]Ex•I¶jãuò˜CdxƒVÎi#q¦’胴ÂAt°Xè ¡-#zÏ»Ÿ*ÆBÿûß ] Œÿã°P¦.D£Ô`Ø#Â
+x5g/_%¢ž°©áûJņ+·±Šjõö¡Ši<|ºÜZ°S‘J¤®žè@Xˆ"’Fî E­°ú)€Õ«xÌg‰Qbûôlöl²ÁyÌQ¼æón£9 oÑF|²ˆ6S”eœ,£‚èËJ¬"/#Ñæ Véãa„¼6!H¢àhÕÄX v4Žfm‚17o€á 1B¿M¡©4|^ù÷Ó’^¹… ÊAe·¸;â‡À4Ýy<ǺÔ1–¶¼Ì$N²&³JSHVI³ÚVmÎÕ¶ê8k2Ìš›1;
+Ϋ-¨å+`²nL§`±¬X,yÌÒWÙ¯<nŠ«¨AÈ»êón¡ayߊ¼Ìš<TõIÂŒ0`#lœSµ(1âe>>‚@<¬þ¸Щ0Ûžƒ:RýÆqÈ„eR-Ü!a/ã 9øC! ·`%5¥F&‹Ý1“8gNž?Õ8¯@UÇ0ŸU’ÝÒ«àÚö
+n—õú Y·ñJ šÈª/âÓ–Åjùb­jŬÛ6š.0̲W>YKŽi ŽS¸£
+Œ­êHGU§M×U¦ï¶…Ü®é.m¤¹¼,
+¨¼Ì!Ž©TÛUH y—É.fìª5Û2mwœ·;}¶ñ檄G–pÁËPöÍj‡ávúþl™+w88.Aä!½%#ó ­0Ødu’0˜¬I•è¨ˆ7WO¹´ FýV]ít‡6Ú¬Š{„~#g r'uº+–Ÿ$ê‰Óƒw­ܵÍŽqˆPÙ¡æÖKI´–ì—–sk¿ñ¹o”ýéOúñ÷~øÁ|êÒʱyÛHÓ¡`Á})éÕƒ_Ý÷øÝ#¹)û±®‘±±`<–¾8¿ô–Ëoê©Ïüø{/ýñ,rˆÛ¹…¤L
+‚jRaÞ¡ëw•ëŒ,¹ÿ¡­•wn¯“JØAnŠGèÕW_eeYJ^5h`a<K¦1Ä ./ ]5Ó©¬$Ç
++8ÈVò3lB®%§c®µ*á–Fì¼A,õŽvRðbœÑLä7$d5¯ó+õžÌgãÐÝ ¿‰h©R¹á1OÙì›vLJk©ÅëGí¢#µ‘Ã`²
+D7xû¤“ysÑ›Bl7¸3ì‡ìtÚ¡[f!mÌ"V³º„…6¶5²e­xZ,Îœ¶¨”›póÌÔR“„tµ†èçì<–qü‡1}Ê°P´ê¤B´b£B}¾^5Y0NZ×ó°ÉÐP’×6ÕUrCfʃÔrPIÄà†ãöב\ÔeO“u¨ía×ZâXÙ±Ð}õçÞ]ª.$`¡KäÅBUEX¨žg§(ð¦^;›‘šB2|KzíEÀB˜fÃJÅX“!(z³›ŽX,ËFãåCS ®F¾9ˆgY>rX(×9oU/aøºh±®b“]É`­ˆÇfÙaŸm¯Š9Å9T‹ªÖ1 ~úªÐ¼C<ÿœ«z·—¥Š½ “õÂo€_¥Íêè5ŸuŠqlÚ휮…CnÈ£Niò¼/:rÑÂ3¡\c@•ñ²èíô²DÞÛŽÜ,ˆbK¯à>zÚ\“ÓL\du7
+™Ñ”Êì¤J"‚ʶ䨉6ˆUBTÊPqø§lcsêzÍ<Qv06å2èÆÚµ±:f²Yw
+Vn¿‘Ó£Eê·™
+"h'ÝÒ0#›pŠfrÈÌéÕ£óîþ,VIfK+7 q{g R4]­XrS!|
+†¸>rö’!æùE$òÊM·Ûd‰¬Én¤£>SâI„hÒo‘OAør»W}¾íÇ…nfËëB¬ûךÓ:gR/yľ`…%܆դ^¶X ]½‚Xbdµœü¢P”Õƒ`M¦äM@xGÇšì1ë¶Ø:l¬˜th•±Ì b(d2š€Éj8£ oÈ-‰Ú¥6*l"GL(œ"“‘;”’†m-qbšâЗ3XÈ~˼Óï~×SÅXè•W^,t5:q‡±Ð.®E+·Î*Ÿn°Ž»<Hc¢Ñy­ÞyÇ}fñ]ƒ{[«ZuQA¾
+ŒÜ!ŒðÐvÖŒþõ¯E‰’ð Ö¿ëáfü÷Ža!öSìïh‘ÜD›ˆ¯á‡ÅŒÇ:åö¬ú¼ÛìØ6¼î{ ’sÕcš©ToÅIyd|vI¼CÇs—Wk,XCô…¥WV
+ù "Პ“£ª {JËÃB=ù"Œ·cÍŒu¶Ÿ¥²P¼ «í¾ S»©6¡âëw¿û]1\mCÓd,¦¨5‹d\ÒÆl—o]eúPÅd+·‰“&ž_…:šb"e'ûŠ «8fçž3gàæMáågy×­ÞÄrEr<kŸVð'Ñá&g‚d,ؤ2[ËÊ Ün•ÕHvÝUÐN°£py-–{®tœQi«y½«Ã–©c¾óÍÍÁ꪿Çojp_t¸:è€ØXÅüYÀB6I¢“ŽXmËÛ†³f°
+Æêü0YªY> °KQgÇð
+qõ7*SvqÔHúiÔùì‡TÎÁr*¦ìˆá§ÏHœ®&úpOf"ïÀ}<ïëÄLØU£ñ“ ‘`Q$\X­Ý˜Þñ\6KüFî° Þ®È%"Œ gtàÍU~
+½nDÂé“òŽÊ¹uJî^ô5A]¹Ç^ýõçŸ}þ‘‡ß>½ê™:Ñ6ØÚv®PzµçÞµ7·ÿlÏ’åOÙŸ_{èä…²jÙêÉÏI¸ú"8dÅÔCV·^È»[ù7¶éãcÃ8<ÏpN!ö0þ$<ÏJ$¸ÓŸ÷„dÎ>tY,¤Éð1Þn—ÏÅ¥x±×sˆè {üàmB% ÿøÇ?Ã!/ï;Éþ%ÂIn>û^½ªU­W(ÖÝTHÏé9Ã
+\Œ…øÛY:Îp{ªˆ^D Ï»KÆ´è^)Kè!Eyô …õw`ïPg*É‘|“åà«úNt2S½íZ»XËø”°bÂ$µibÏ
+ 6>ç/Ø[½¾•îŠ°G¬àÅáþ E«µ²t»&eeVíî¥6͸•7„i²
+š—rd#d”­8$1:c2¤5`P¯‚Õ*èu·8dà«9~Üœ0cæ:$Q›$nãžÅÉ~,›$÷1™î6`¡|gÞõÎí……î‹OÜa,”;#óáº[çó­3sÅ&³L¹Ük‡Õa/5Ï'JD+ÕÊåƪi“å¢Í¾Ü¡JXx#JtÈXð<ä!ªÈ°ˆBð›ì|¥æ¼Q½
+yGµjLÉÈVqÆØ]ØHŽ
+·kcõ¾Õ³îõR^6éò,w«#^q@Á›€ÀI–F±ZW•6[·ìι6€£ä–ð(ð²ª, ¾ŠLˆÅ«&ÙFµú|•&C[„ø¦è5'®æÇk8#¬ÉàW9Ĩ@dã /ãe>T$[[Þ+0–$Æß9‡xØUDL€É”dŠX¡üyÙeƸìcYRö˜ì6ž‘8çzZçîrL+ÑãÁŽÎJ¯–ž ×r­åš ‡Ôþ»Ï}ëñÇ>²½p!L÷µj(œ ?:9KÜ©ëk_~q8thðÐàΔýÆÃï}â©ï~ý›¿ýíoËÕG=Zî†CˆƒˆÏ³Ë¹ éPÊÃJafâäQ÷Ôà‰‹Gê&!7W’ãþ"€jE¦¢˜Oñ‡"ƒˆçÓÙqÔ;ƒ…ÂÙzBSH‰‘Ÿüð'»>8ÜÃýqη¿öíÉÓ+ïyàƒûÿXIÆÔéMö˜LEDd‚±hÙŒf¸Æ Ú»©
+ÑB%½á´,`‚ÄùfeÒŒôÔ†wÌ!Ð)2 û¨P°(-¡±;*àyÄ`²°V„[ 8Ãl $ªVÁ˜Q>e'ûµÄ9NÁýOîo¬RXHÅb¡OÞ2ª;óÎÇ?Z¬S×ûŸøôµÔê? ÕY&Kš¬Çµæó®·ëbIœ/Xñ‘¸Iµdµ Á>Æ1ß@§ÀdBd‚éc2ì@A ó`2Fña/sŠ‚6QD'×ðÇõY“²fÉCöV"Æûè®’X‘’@¨‚è#R Hg†P†ÈCïJ™!5œu'Øãx684J$¨Á>µ¯xâíë£Þ+Ý@Ï-‰¥fkÉ12åö,ŒYK›lÈ>ïö¬wVG=â˜LÌŸÕ‹Æ:šŸyWÚ¥œ2!íæH)“³î#槥Ô"C «¹‘—!“Uñc¸˜¯ c
+c)Ë96 ™z§EóvÙ¨’Ó{¸eþ\ûJÎÔHbLMvU>؈y¤­¤=Í)ô*<–Ôÿð…ï½ï}?¿|o<2?Ò2ÜxÈ_0AßuìTÇqg¯¿ýcÝMySö­™)ûKséûÎ?úá=ýÒ7¿žU.8ÔmìåÂ!.à]ȳ‰yu4ÙRÍíĦ£ 9p²u-Ñùˆ>lBSÞêŬ XßIˆ r§_4r½~GtƒíE©æô¡}Ú„^yùåtâžîî«'<Û žÅzÏÜ7¿þÂ>p’ñ]XLcÍ“)ˆ8@GH=h2YIF‘–bK¯ðu­8eFmœSŠŸ%j;×[‰b $ÄÙðûÕX rgšDûB–X,Xh²L¤’fE:rÁ­¤l}„ýP°Á…šõ‰fïÆáº+%£ôݾ >߆“™­ 7Ô¢YpÅKÚé˜Í¶‚ô²í Œb6,
+—íÅ©w ̤!c
+þ¤L0 †ƒ»ÿK@L²d•
+tûÑ”}|þâüÒƒWûÄ'?ûoß©ŒZöŒàw72
+ÙƒUj9ƒT!·~9á—vªdVto}Ò¯'‰Dnè›KÌd3ÖüX¢YÝ~gP&˜© c¤¾: Ø9æNåÿ¶ÊÒ&KÜAìÙËdÅE! 1R˸”ÓN÷ÂQfc¯ÝëZñ9¯9fË–ÁÀÎë!8›}Íj»Çæ\qŒô’QÕ#XF¡³ å¤Yº6-"Wa“ÁžË‹·ó<ï¥F]0Ò7Y“ÕïƒÇ@‘Q€E&«ÚéªÊa¡K¤ò Xè-ž“ïxû‡à!<xøÀ{?¹2>ûC¡´ŒXȶ²§=.0ÙE£ùKhl0l#Z?ûªÍvÕæX±Z–Íô¢Y¤‰1«£rM5"ë˜ÉWfk¬±`sÃ);ô°Ñ'Žím²Ý^¦ÈJ†IéV¨hûƒoB¸
+^L„Ô¬ŠèÓwŠºu‚“»È[r+¬p«Ñ=#û‰½NKNñ’ô
+#ÕÔ”Ž à¬d4 l"{7u#ŸƒÆØ^²vÞÙ‘S뇭ñÜd«†ì„­+ŽÙJ*Žy®rMÐÿæ7¿ùæ³Ï?ööŸ_Ž¥wöµ´ôNÐ÷^œ½øç¸Ð”}Gðر¬–}Û
+zÃC„`2Üé
+ÐE™/ˆà¹Ýaâ³jbT[ÂËb°VÃ&Þ#IÐòMxµÄ¨
+•/’y^V0Ü$#üÝÿÄ®iÜÕ¤:ÀHH,ûE®¸Ze°…xõáÕ£B Þù¼I9˶ñôé8# 1(—;5‘fsÜeŸvzæ½ÞåF÷Z³{£Ñ³QçÛðú6çxS³Ò­ŠujXÅuÆ•'¢ê\3[Ö 5;é˜F¹&ã –Y,¤Í¨¼Ðd¹yLd2RïÉö<ïx™‚©%
+ *ÕêDì<þüñBó>ˆxFîp /hàMü Yˆdï<T¨NªW&»+#­ºx½aÂl^kÖLwÐ1­fÓ¥š;¤™ø
+;)ãX´»Ò6fÑiM7Õ¤Ú4ã‡è¤Zu°T0Kef[x+
+†þØ“š¢3bT—SƒvâðžXHã¸ÅºûøÅÅÍôúÊÌúâäzz|}6¹6“XÍ®5¼Ð×S±ÕÉØÊTty*‚úb V*¼˜
+/$‚ó‘@:x6ôs’WÖºP™ŠØÁË$áFeâHe°K©3Lp=¤™l¢'*5ÛHEXhÑbÛ/s¸ælÌ@#a®]“jF&ÛöRš7Ž•ÂúÜËÙupœ'nËo5“ÑDØ&šUéê˜Iµl“¤*©jÄÖŽpï.Ö}vYˆÅPîzå¯
+v7ðßIû®Íºà;%05k˜¥ã®ÁQ‘ ŒðWŠH¿ŠvOIì0
+‚¹C:^HÏù!³ h…â¨OkVÅh‚ÝUáý¤­vµM3áPÍC`ìÎ(¯@`´Ù—Îyƾà1Ï5׌ƒ—µÑqµjËCixI|˜Ø³7SÓ­˜Œ†âE¹
+ž(ôùmðÈ©æ!“Õ«W½â1©pN‹Îã¢ZÔ;4r½¨?p`ÜoØÍÂ99p|óÜ]çd?.U%E°mñÞ¤àúö:Spõeœ ÿÑw~ð~òâÒý©(ž ojÐ;Ó'þù®÷¿ëÃG›Æ²ce'ÆÚGÆÆÑÈÂ¥¹ù.>ú‘?ýƒ¾ Ÿ®\p¨CwJÀ5pø±±Ô‹ì’qò”ìÒpŽ²Y°…8yªc}tðZ—Ö/Æúe@Aד”~VìŒuvpsšgYga‰D«Პ;ªÀÔ‚UÄ€——©Q³s4ìõܳÏûx§å(× j°†¦’À_uœÑ^ V”¬Q,T©6­ê%–‘]ÕL==ᣧ¬ÊyF6å&iR«\VÑ[ZåJ·9ñË_ü2×8”룮¹ÅJx¢Tq;Z|nΪ”šD «l\Co@úS%[ªÏÀ}0p‡¸×Z[BÅ5En“³ç8èà °-Ä(ØøáM°šSb
+Mã
+ÈdLH«FÙw7\I‰@¾(-ä€432Dc4BSr¼±Za Ÿ­Òl9UiØRs&³¨–Ú”‰Få¸M9W«X0ɦLòÉjÅMoª”›´b£Z4mä
+±´Ç7Öd©ƒÚ¤O°é8ˆ®²c¡G-‡ûšýoj
+v4G5Gš…Ûœþ6G µ;ÆÚ~XmŽ]ÿ4Öâ 4¶†šZÃÍm¡–ö@W÷àçÚ[ÆBwñN›8 `\4(ÍÖ“A†ŠTÈWªÔ›>z:ßËœª¹z¢A9aS¦mòið2§,V ^¦ÚGS)Öhâ €ÍÂå6Ù.wH
+P'Þ¸;dÅtŠ´šÞÐ*–IB#N£
+w„"&`£ÏŠPï¬&é¹}°\ÕœÞry«ÆÎR÷ÀûH£àMòù+àe
+ùšT˜Æ:z«•x†"ÿ¿kÔÙ˜7Ó©$+Q3:ž“AbÅÀËtª »*o2/=ݪL@l´B"¦H3²”S×)–Tô6x™N––RK8K–ãà y§~h‚‡qŠ3*z“VnØÅq¹d… Œ"|òG;Ë„"7’ꈳ'.õž~Ð#£H‰1V£Ó1D«[mñ옘[ûÙ'¿Z z¸~öãŸ|ü©ÏÞ³ñðl|n¬k´iÐß•×/}W[cô2A#×µÅïêÎiÙŽŒúýÁDbþÂüòÃ÷¼ý“ŸüÜ¿}ÿ%–Ú´,/g4°Sö\ŠÌ,BŒC¤WÆ­—ñu´;¹ÇzŽ_õ¿iÅ'îå¬L½¿³Wãú@ÎaY'U‘ V G"YsR¡Zj_È_À‡HìøÛ&”BÕc&„OÒÚ‚Y”b°GÏz®¿Z4I+vh¢ÕôüU©Ø4É&¢ B8WÅ‹)y˜»fL©ØP*7=TÐ! _Þ%dß­ìÈiŸÖâ8K|‘MMõœ!#w¸š‰2„»!Á}X„X» 2ç‰Ê‚l(v[+FA™¡cvQÄ8`!€¯|  Õ*ñ,Ü@¦Ä«
+²B¶Óµ–ë×R“J¤~›o2Ø:7’˜CR
+çÔ¼„H°
+
+fÁd*ùzµ|Á.ÓÂi¶k:o¿Þ5+œS(3c3Ë®$çOEqð24â–D¬Hážù!ùÓïæž(y6‘ýþ·¿–>&»¡]Ô í
+ŒðÒ¹:*ëeàJÉ-^€ü<ŽU9Ùwž}h× iØ$‘3LSi†l’¨V#/ÓÉæ—À,©Qv¸‚L˜DñJù’V¶à…äÂ-ְЖð²Xvì.Nì95v bìc+ÒBÁ¢YsKÂnI–Q„¤c!ÿåâÀfke±ƒÞís®QKœi­
+ôÝnª
+bTƒ¸Îz1%ÈNåW5ýFî Ñ‘A5‰rQÌOƒƒ³Šäàï°
+²«žš`+NUdDÄŸ‡H^%[—׋R ©PÈ8$IšðIû^þå˯¿þzv`¤¸ö•,GÐŽå¥oQö
+’ 7hQ&¬VDªãaæì¢P5/¬âC2 [‰HÝ·É~&SÕ¸Eî
+2›ÅOkÉ`Æd¢œÉÖPÜæÏWg'dóÃ{! ZT¢šaLæDÙ( ²&3SqJŒ M&)þ¼L´`’Mêdi-5QÅ‹Ñ“õäunG÷eNæ½$«·GþÿÆBwï…à§ÒaØ—â([Raøj‘¤TX„ð2ð5µÀU/ÕˆfkItJIÝŽÉ’E¬\É¢”]#œô2xfRð@Vñcvq´™NYm+ŒsµÑš´BzÒ¯á§hÞ8<óÝÆøu±\ÚÝÑ2ºWÑ•"Â41ÌÎ@n(ÍR±Ø¬‚9CzrLÌŸåñWàÖ)xÕdÂc¡—­²~—›,ö²âÃ>Ü–ƒ^~^:ÚŒÍ8
+ˆIxä*xq—$ÜEGlÌã8ïe¦ |4–¨âË3:Îhö¤ vóqw7<ä$æ®”A51XM¦"üÂß$:ܵÑe›Ðò¢ë("¨âSí"²YBš‹—£· šÊÞxã_ÿú×Ï}å_yø}æVÃÓÇ:Ú
+¥WÛÚÏ\Yyˆø_rEDó§ìý#
+b˜Â‚>Å
+{äõàVUü”Q˜pŠ‚Ž9$qX¨ö+šVXGºäâUÖë…Âån[L®yÚÊAbÄ,7,€(V馺b;‘”¼ HvÔÙ32ÔJņUšRH–øø…`iÅÓ&)’i–ó¦à—W#:ÓœB´ŒVsÎÝíM(mõßÀ¸k¾J{*v­DÞ*1™
+†ëB¹lÞ†^6+•,×rGY“ÞùÈMò
+‰¨u²Mèx!›l¢©vœa¶› ©Ãêh—&®¥W›c{íG»®ÿó§?Ù8ÇõD‰Ó“úòC⮨ˆ¾iâš„§8ì’Ä\òÉ6M¼³*ÖR“jÖ·T¥Ž¨¢UZ£X…xÅ=³7îª0/)^R,Ó#A`5™O‚‘SÍó§Q.£BѪZÌF0Yö… DZP1«$ ¯ï³ÐdñëÕy"»x«Ñä)Ò¯¡‰1 2Ö ÄÆZ¢·(0€—iÐÎFÑ Âo“5¼ #Ÿô§ìŽ­V}"Ò!Í”–^Ó ¢ÒëȈ£·Ç#büTÔgMŒƒyf*0Va`äì”F'Ç®ŒÜ×lH´ªvUÚ,ŽiÈ5·Ž&-¸_zw›šc,×àdå/>ÿÝ'ÞóÔù¥{âáùÁ–¡æC£ù@¨«ëØñÎqâÛõ‰'ŸySS讣,ëÐ ,Þ: ¦/ÌÌ^Ý|ä}ïÿøw¿þ­ßýîwå‚C#Ý“®ž$'e¤QH6Sd³‚l—ñŽˆ‘¿„¥ÄÈ ßìà©ËGM !æ+ƒ'62†r
+ý^i¼^™¬W'Õ©Õ¸[9cR¤’¸›
+:a‰Cv*l‡m•Âny¢Y•êªŽÔ[“÷‚õæt¯Ãl·_°Ù·çªÕ¶fcºT1 ½ ¹IÎë!„UÅOj…ã%]žÝ
+Ù©%ÎXßa ‡äÑÄ7‘SKÙ,8;8‹[5‹kÂÛ¨Ô@Ù™µ
+ñj‚ͧªw’©Ý®Ä'üÝRJ½‘*|è}5/bÅ!’˜¤“ŒlÒ)÷*Æ]Ò”K–pJPM
+[}rŠ#Éj-×_¥oztŽíS‚L“æ›Eq¶$IÌ+OÔÉ¢^iÌ#KØ¥)
+ãvÅ$d…5¯}Òáš·»VlöóÇ6Ã\´1Ûv窅Yg,ó‡UÀ–ðð³ø\ŒÏ¿Ž—³º¨¸9!®C¬Dþ|/“ðg«¨5½©W¯—Ôk¹Ã260‚¥
+HØáJ3®U»s…q.3Ž\رl_vÎºí³­µñ.]¸[ꬉÔ[RðM§kÁåFll>ï¦ÛuÛõ
+ò[s‡˜sØæÐÙ‰oѪ[ŒªÁàòšD=*ùšmµöÓ[p†ŒÕ,NP‚y
+‘õßÒÄh$+1‰Š9
+þàÀJõVCå¬Ù °aqÌÛiÆ™f 6ÛR½~ºK÷ÒS&ùŒC kÈ1öè³¹öäR!Ô
+õv‡&‰˜jT+¬É4Ê5£8ÉšÌ(²SQ)î¶noøz#cZt·ÑxD?xNlÕˆŠÓ¼i³¯ÙœKvÇ6ÙbaªC÷(§Ò8lÁ”hYGˆÆ]Xh‚£,t߱п󄀂þeë-Ï~éë/}ëÅ_ýêW,½Cqv ßøð›ßüæÕÿ|Òg?ûÅÇyÿ}õç~$— Uc!¶²§ãŒ€5s&«‘ÎU¨Ïƒ—AÒaQ-±í^*؉5™V–6‰“€9ánk3$f7k²X®Î $&ÀdàÚVÕ‚Y·²Ú (Í;ÜiL–flKÍ5)
+ï ‡1‡{‰5Y—:jűx}I~ŇHV#6¿U ±nl {
+‰.´‘!Û¹!õ›w:¦›,‰vC¤]i¯À“àa¦œ°—¹çfÂW&ÞôLB04[®´˜Rn7Å»KFzÅ<4šD’]ÓWÿžßðûoûÛo¼ñóŸüôSŸøÜ=›,¦æGÆš‘ý]…ƒc‘Ú ú¹.ͽ¹£%˜o=8ê %óV¾ööO|â™{MÙ—K­ÌÂóqQµu#Í5ñÉVÙD“Ý<T›8g{OÞº|H9™¸ÝžF
+®u†I7ÖN®ߥ uj£uæ ;ìòö-x íö‹ðø|«uuðçzoÓë¹Æâ ®÷w»72@(³®ÚKMÕ“ª-…æ¿Jú;ÛS-¯±)R-§@P8Ž„ŸŠVØ4v#†äTEo2ªùNu¼M3qˆæ4êó:ùB­x~!ä\^q
+‰DˆŸ‡Ȧ±ØYöž)‹ Ô¡Z­WlŽ-¯yRKMF²§Dá„V¥Fa_`E+û|½aòHEV».
+ù/j›}‘ígL¶†Ã2â놰œ3™Û}/ØÑß÷­Á±Qê+뺽fµJ…Jë¹8\¢Ñ
+ᛯ¶ÌöXÓml|+vxêp~Ÿ´O§LÊ)5y½ÐÅ)õªOMMÖÒc"“°³«]¶œÛ½ qÛs– ¢ópCäèóoó|!d/6X&­ìgw1y\;(ëƒhŽÁ•¬½Ò,X~»l$¬MAôäã7@£ºD-¦ïöµKH¨ÜDÄ?Í gêÚ×í–uN?ÔÆCL‚ÓOøL…K¦§Bži’Ö[
+„PR
+\dç!¬ÆfA­ôêE·&ÖŽù “N¶Øhδ¥:éoV!2š‚>€©HŽ;ç/í»©¼ýþ  ´¦ |C6-嬔!ÁæL:%åá%u†§˜¤, éKQZÊ?h1½ WϳŠ<x^¬_¥„hh9¬MXÉh’ײ (luCõ\'–ävvšVìÌ4<”žJ•RCéë#¦c&Û`œôǤ«Ùƒ–øVÐz—ûzh¨á]VàŸ~ÿªËµ *YmÝ´˜qO˜"m£$ûÁT?ÉçÏ{é¡zÓx@(‹õ¦¼OÖ+»BøVâ8·*ÙeK "/nñ\Q`»ªwE¶¬×¼štD;Êëǽæùf6w°*ÑR—ü󢈅ì
+v˜Ú
+"|]–(›vGc|Õ`-9€]¥Žé¥a"²zÁ¡HÀ‡ë§•È+…•MËV­u]°.4±ãû
+|Dv¶Æ¸hÖ¥<ƒW?iÑÌ‘ît)Ͼ¾!kšÊ‚oE$L'À·Z-pHœÎÓ~nÃí9Oöj] ;F%ßZp»Nƒ»¿áXèkºê7Ï^xò‹_¹’šCxø«_þòë_þÆg}â Ÿþò÷¿ýo/¼ð¾é§OÿäÝïüèÆÑ©ëh¨¾*: ihœI9)uœ–ŠÑ ‹eËnÛ XX¦àói·ó–yð/RËÈ”×åŒÌø#n"Î_W1º’²l‚Žj: "«²l”àЈŒ Øspt½¾Ó¨tÜ¢¯v ^’Õ²]kZ hqäΤT2sP'à
+)ì‹…Þ}ïûkØ5i;žTÖ©ýLôÎc˜åL 8ôT%[]Ù
+ºŒW“Õ¨—¤d¾Ž¬Õ6bT•ñh2Ö¤X=ÀMª¡:La¥¯°®ºäÂ&Áyx®@¸ØSª5
+'’´9‹ ™m šÊMdã¯~2%zô†”‰ÓZC£¡‘µØ&1cïÝv{Ïp¤¤+¾¢oåq{K©FÖ» ]G¿ÐOÊÃ_üÜã/¿üò^…ýãÿø£ïýèÜқƌÇÛ†‡Z†ÇÚF’‡&Ög6>ü¾ÿö…öÚ“ïçûo»ÿá7‡î¼,4´»ƒc,nÑFÀu±
+£\@ÅdÆm¦U”¸× IÀ’&@7øV›~) KƒÜA…KÌ`ù×b˜ÉTìùÍ^F˜CàÐD•"îÌaYÌ 'à_XóùΑ:ÈšË}”WÚyÐùº­Ëð’¢ÚQƒvI§ž—fõ„7˜pþŒ85¹žºøÕkWºzlñ€.£R/hlo£Ó#€‡Äb×L…™±ˆ.î1Ì hdÇ»-Y{ ÷óE¯‹G{¸$ÀG¯ò„‡Ä0bfBË€v¹²Ê\Kؽà‘ÉÒ¢eP¥²–ÕÉ êY‰Ÿ¹V‘pÊú/\¤s´ÐYø“í¬ÃX
+@»ûgíì<f¢{$ÂÉÝÚ:?—»obìBK¤‹­ƒsNó’NS‚ð
+ŽfT”ÓåƒG‹Ñ,¹4¹(
+ŠÑ<Š«$›z·ìuoÁKjfó5ÖM°!]Ê¡™p(’R~l—š[ÖÏk’ݵI!Xl1§E¿›:ªÙ}ÉÒ–ùœ„…À
+ $†æë±Gkõ€wÂaÆŒƒŽƒ%q‘*? Xô8ª9A=š¾u©ïعˆ~,†‚®“ÝÅÒ=UtLÚ8Fš¥wyŒIJ³ÊÝ7$_ñïÿþï øßûÆ¿|ðŸ8½tO69?ÐÒßÔ<réým·uŽS‰×>úé“mwÙµâ”}"±°33{÷ÆCøÀ#ßyê[
+À³JYÔhVü ˆ,ÉšÖ<ú)%‘Eµ8óø@,°TÕêÉ;uÐ’¬±®×jÆ!®BŠ§Üµõ½_Î'U6¥­FpÞ|Làk—-K¬4ö !‚N—Eæñž­ÀBU•Xè=ÿz±ÐGjbï}ÏÇžýÁ3{5ôÙþx9·ÞДÜpw^éÏ?QØŸºwýÁ·ß¾5sz6³œ=<~²3q[Sü¦ÆäñCÏ(U¯ Ý%a¡[÷`!'r-îŠ Î ¨ : .†Ã4iDf,‰,‚48©]§É먄H5š©&s®“MW›VÌ„S'¯Je|™–¥öîŽSæ»Ï€ïøïñ 7U^
+¥Ph3Ùh· ƒ“–
+Út«-ÎDcÅXtûq.ÙŽD—¢âT3› êÒz²ÓÄBçʆ±šêtÆÞvO£îÉ`§ÕT?
+j
+ÌP
+3cÐ7'¥Ù%‘µ®âؑχ,C%ó{ÁÏoìŠÌ·ã÷Wæ…lo )~êÑÏœY8=ÚÜÿcÅk$v>nõöÄF;êG‹'¾®3¿¦ÇkÀBI–pÉú½šŒÅ¼Ñɦ#^d8 çAËbÂd·=ÙaI´&Dçr}Í<Då^yÕSne
+äÈq+­IpÁU*Ì?Ô\ƒ–Ép=è0 ©µÂ—´ +½fùCòp}îyrýú׿þíoûÒK/ýß
+–Í œR+ •m„u²£rÚNV¾Êv+be-»ˆ…
+Þ î
+4A\¼ ^Õ[·Íq ¿›»-¸â¶ÛsžxÕ3¼°Éñ
+Q\d)-F”ÖÂ[P_n¾®^÷ÏöÈ^
+
+àvPCðÔ>å¨OƒÌŠ¸Ž\Ÿ÷›fyÓüÓd7›ê°g‰È…`QO—sò¼”ºGîšULã{.”ù…z÷`¡GªB׎=žÔÛºïÝßzê›{µò+ŸÿÊBfá¡ÚŽÿ1X¨Ušª¥ú@dml°«à_lµebÚD€I„uÉVk¦Þ=…ZÆÏv9“]®D0T—b:8Ø6ï• 3ÁÐ
+À¡vKBõ:z  ©†, #ÀðÏñj
+SI²<`?/Š,Ò%ECÞkœØÙFóx—%ÕmOóàIQI ®ÆÂK Ã[Ïï¹
+Ò'›Ùt08dÆê°iÄIõ•C5©î*CmTϹIR¼N6 Q+×Ñ#:õË̃Ë6›7l¶­jÜ
+‚ä,KVóz”5©ç
+œö2’.‹Š>Ÿô¦YsWÎ`KÌב°PŸ“­b×Dg1Y
+‡înñgÁ®^¶
+l»=}“%ie7ÁPKdS."/"2Lþ8 FS¬ÓNúuã¬iDÖÊæÚm“¼}>g°´ 2NÀî5!TiŸ‰ÈJÍœð Ò+ñ¨–±P9/”¿.,ô£ë¡Þû¯_ÿö^•|ô㟙I/l;þÁBn2G¦ nYNëøgA˺1€7µ$áŸ3rw[·êÙ)¯iÞ¯óËO'›m„ᜈ 
+¯¬7 MwU%À-ZÙ ^ƒ¬ïx~Õ<ÜeüV³hÒ.zôS¬yÖk)Fk
+’jx<
+ÐÇ ò€B±?2ÉÏ=÷Üw¾
+j;å{K¢r?œ±ÑÑÒ¶²¤[vøèmç‡o[=`ì“]˄ćЧÛí™XýZ8²˜UÏ]²Ù\¹dbpöʦ™qɱ0-§fAaƒêáVWÆÏKe‹ b`#  ZÁyñ²#’TCaßl³9 VWM¸kh\K¯£GmÌ<kÚ°Z¶àk-“w8TC‚ˆ)¨Ï@ì)ÈîRìÆy‹JH
+U,C“ÉÍ”OÞÑÅ[¼i@•hÙ&ŒXç8î|»9éF,4^Z¦KóþåDˆ²ÝH=î€gù˜vDÒ2«aŪž²£¡ÃO¢†fSFÔ$¼²ÃŠ’ÈL¤O²—–U å!Ê¿ÃâÿTÛœ™:Žd¸ ”´Ì§DÃ`¸ø[ŸõšfjØ•n6…½L5xýn/Žiì!VM,óvÓ’]3‰ü*Ô¤žJ•zV+ cæÚi!•Ôh«/yìÎóAÅQé'vy§‰î`èZ…¿rõ|ùVÉ]©ÛÞ¸ÃýÓŸþ@ègÏ>ûéǾøæw®MÌÜžhkéî¾l‚~ä[O}ú«¿.,ÜsçÁ»pèÖ#c·á”}na»°üà=ïzôÑÏýø?‚ÏóFÁ!7Ü ‡hšÓ(8-µÊcջŲ$O>zø¾;Vªc¯•mÈÉPÕê|…ç#‘sm$b½˜ R΂¾ltðªŸ0h=§nµ¤ÂÁB0¸E6—m~ÊL~aÝÏ]€(ž““LJX;òÍA0BJÀ©];#”–‚ÖCDeF«µsÍ
+D4 êË<°¢>2æxúXuÒLõÛ¿h÷®&5ñËn”Ô±ù^Ö‡Ãà8Û)É ©„GÒ†]$íoUMøµãÝlZ ,’õ‹„ÒùÒj¸§ö4˜«y3ÀÄÊI#•Q# ÏÈ•;|2¯sOÐ5ñÚ‘¤P©ÉGLS¡èB$²ÝnO{4Ù²ÈltF©Z
+hâ^ý”™Y¨¦“ 2—l€‘U'Cd %i<ÞÀe^dÓ4L×îHKXÈE áÙYˆ[͘’D†¼ÙͲ^· äˆv¬–™Ôk¥®$d±¦‡‚Æ\Ð0!ÐÇ=Ô! Õg"´*åÛJ览)[,”uøo0õ&ä¿ÍíYÉGa/–‰ˆ +5ô Y5-h3]Öt ´Hz‡8½Œ…NR–ª>ýú±ÐÛl ï:ÿà¾5²Ç>ñ¹íéù¨þ¿ÂB7_Z#óÊšˆÈŽÐÅx&9Å 'Ž1â¨Á1%ä1È@Ëp©“v`sii´Sè3Ac^D‘®Æ¼~Éi^é®Ô;®Ð_F.ZÒ©’#¤
+CDdC6Õ¤ ËvÙÒ¼Pl‰Î}ý‰o?Íׯ~õ+©‚v”ŒRË+@ kŠoõ_\²£2òÑÁ›ª¢†=L¶Õ’ EŠÑèDˆVÍÌņzT­^†ÏðŒT@†´BH¶¬k·%¢‘%QÜ!ZvZê·A-CR¬»[­ÁBêXƒ1ÕìÌ Š~š‘Œ´ô"LäjljÈÆÅ];¥U/J"ƒlÄÛ(ÈÌ`t HŠ10G%-ë#ê•`ªaÏ1b[°i9Yž$Z±iGšº…#a¦Rµ²AxG.zĦAB†žê¤ZÂ=­e^(\„ûI•¯¹5ùEJEMu%}¤Wâœm,|ƒ©ïöpþ€î„œü¤Jv³–îÑÑz$"öîB´ÜÙV}ç é
+†c8üñ/|ù¡{ß³=5?Ú›ëéìì¼ë’ úæø‡Þú±¿!é* o¿åhyÊ~ìøÈÈHjvbnsqû¡·¼ïóŸ}ü§ÏþTò¿þë¿nÈÓU_:e_†CZ§¦­t£´¼t9¬<Ú{ü­w,zäG¯ ‡v3 ˜ÞÑ&Û\©Høî7fâÊÊô¯zIZ“*0Iø9Š*³aü~"Å­÷ÒvÙ·XšnÆ ˆfOžÇ
+/Xé“-Æx»-ÃËK-16B( ¦ڽɆ pµ¸»P5 šˆkåý§´™RÍÆDHÕïW ê‘ j0  iFÂÌ`ˆ ÅÐ CìÓÆt#12±¯9¨âä§ÜˆŽp¬„ìÒ’4ü„ ) £52,ÑC^ýD³+›OùŽ_q:O—Jág²InMÚ„GÖªp2Œ†T9ºj«óM eJI¡>´½Ùhäža<¤¹¤ÌfH›4›Ö Èìt¼N•ŒèRMÞ|4"[ãy™×¿}‘a›ÛB‘¹ó‚ |ì¸Ov´Þ’k·¤ý˜ÙC‘û€ª#À\@ùì
+v¾V+p¦†Aò“ŽI7™óõl. K‹š1¸ªaQ3
+3#!f4¤ è’pŠb:Z¼^?V¯G0Ržâä'<h´±ùSw)É’ìbü ¸(§B‘ s†‰¾)¿ÿ¼\ã¸åfYã ÁB_Ò;îÝ|èku¯~õ‰¯íÌ?l¯ÿ’òÊѱÊN6±¹FKÖZ† v,“eµÊyi™‹t‘-k˜²Ty;q¦^> 0©F6€Í 9Ð Ï$E&`!&ÜKnIX1ý(~Õ%üLZPúå}müœ(yÀ‹"“²LàdAjÂIñƉ&÷8Ç_… ¹“›×TÀ7½úê«å‘yˆ1÷Eð_/¿üò‹/¾xY ò•>ºnÚmiÎ’ÔèI0!]ª^œˆFη×%ýLª2UnÐ}Ô¸îÑæணGýÊ¡¨!Ó(LD£g0Üà/ˆ8ŽAºý›n÷¿é‡ˆ£&í¥°Âå•jªšj4&}Ô!)‰J†A†%š÷’È–Ê"ƒš e˜“§‡@d­ 2s*¤‡@ä•–ä‘iqol¨˜tGtq¸áD¦òËOºI^Pëe#
+,WŠ¬ _[\Y^v—œÊùd§ê«&Cúx Š ×É\t•–$ª•§|Ø#ï'›.3Je>x.
+ e„›¨ -‚–='Vq}×*ÆVëc«Áà&/¬ÇÄÉŽšt D¦IøPËú=dÜŒÐzŒ]†‹j±‹iÊ©ˆ7™ÒB°
+!~¶Ë‘nd³a}ZØY¿™PzVji4ŠûTñ{ ˆ¸à
+ÝÎÄ›ÖÞq@Hºà÷Š¿–ë§?~Ö/?"»d·Úx…ÍÆa]*šÂ5çôêBqLºÊ´JZ7!H êRv
+‡¥:ËªÔ $}½¸¹Ï‹-‚­ž4`!ˆ 9º¯Ù•çQåÓJdö›vG’!ýÁJ¯Z^vZ¯aVbÚ‘ZÃ<øýjõ¤“¸"Y·6Ïš×[ z­žâqæ}™ã‘éKð/Ô{&[\ù¶ÚL{M®Ù±O6ì›ÁqìÀŽ2´À¥9`±1óàC:A+¯!͵•–\
+ªáwÞ‚\ôxÖ}µ›5]x™L"®„,Ù¹F}¯D2o e­Æ°¨&[Ì™Xýz$<Ò§¥pU­Y 2ñ*ˆ$2‹e³Î¼ÔY“‘E˜ÁÛmë*k»Üg*¥æõ#ÏRb¡Cª_PöG|³¢ü¸ŒJËÉþ”:!‰¬»VÂ!€µ ²(3j7,†4£6åD¯FÅ”†ÙY½e2âÀ®ºæ0ÓâæàæùŨo¦£:×fÉvVeÂþp¬B`›O‹¡e1T
+êávgšÃFP1ds’Rvp»JÌ{ƒ­v5ÄÄ]ºìZTÏ _´jZ’£Å¼ÙiN…œ‹Èg‹“ïK<‡ÊõÍ6ºÇ;jSݶt»Pn:ÌÏ‚ÈÀ*òâD”Bp!ÂOcÀbÈúÔ ²~î†-ƒX²ZeLdâ1qŠìm,8;ÝlªÊ¶e7.5‰a©buKꚧb/é2Pýõæ¾Þ[ÏÙɽšê7ÒmtÌ(´°ï½Aæ|£&èøï}ôc_»&3?Ü«W/› ïjÍü•Ž]ýúÇ=ÖÛÖWBCwµa©,_Ø™½wë­ÿáúî×ÿå÷¿ÿý‚C}}Š}ààI.˜äõZÅÍFöÞ›¨þÃmËñCÛíŽ1z7 ¼[ “‚}‘It: È|>ÄŒI!N“±²ëË<o]„û %ÙÀå1å¾»¾~ {ÁèŠ÷@ñE|ˆîŸöúNs⪠œis¥Á2C˜àW5xÆ9ÙIBzÒLí–ÝÁ½îÕwévÊq1ŸW›·˜Ö¬¸÷|# Ëµ QŸµšV¬%[tÐ’n·÷X’-lWöX¶À:ÙL+a]ÂQ“ôfºØT›ËiT…18×äœ ›&&á‘ê©l™öÙ@ÔPC]P©!¤Ñà؂ٴn`Š…*5Ed^bç ÈjpdįIuÕÈîír&
+†Coª¯_å±uaµ2‰çõm¹=çÈ7Û ;$„á/HX+¯Žù¦È`DVN
+Ù¯,2&œV[°š×l¶­*ËZD1#A]Æa*ZÉ ¾ÃºÑcAÚºnK¦
+°«Òkô«Ã–»´ÌïY­
+Ôj×t«©‘#ÍsÇßãÅ6ׄŠ0‘ucz:¢ºÂ=#w½óüÃ7wþÉžyô“Ÿ¹wû­ÅüÜèÍ£-­£H´ „né꺽¹1ñ½¯}ïo€çê×»î{øŽöºýÐÈAÜeŸI/ì,,ÞæíŸøħ~ðí9e/hZöž šöª¼NµÒQ½â-¦+
+¿.,ô´R³1<~ÿÙw½øë/Ó>ˆ?ûè÷o=øÁº¦}ÿö1 ÷ÀêýÿüåoÀo^ö·?}ú'›3›Ù†“o|Ž¬Œ…ìT¯¨mpû‹ŽÀÓñÒšï¾+‰ þ ~Á¨]¬5¢Çyù-EI:àæ@Ëà'v¦¬bUÖ-Ö¼á0bÚ½vY©Â‚©V‰õš.1OÇœ38†)l]är¬Šb¡»*Òg*¤%—xÉ$*Ÿ¼¯É’Åm1P|±Ýœqég}ªøÍþŒÄ2îéê@è•W^¹ô³Ÿþ< 8$¿BÚDÅŠ`x¤Y‹œo°æ«I瀙¶™×ëÙ©.kÆéÜá…B0¸œ…„@Ë.mÃóú6Ë©W©R&ˆ˜ží²§xÙ¡Zê8ϤºjF=ÔQ©*g/¥^+÷š]v»HÝS§[ætã’È¢D@ðDQ!„aËlÀ²°«e¶-³y½ÆPŒ2#&mDÆÒ9+5ª ]ª‘‘­ ß¿›¬n)tW§øW îcX…ËŒv­·DfË Â&â^~‚P‡iQË,Y¨„íb›ÐõØ7šŠ·XÝù¦€ê¸´e÷®â.ò˜Ð>ôJ¹óÄá7îL¥&–_<÷üç>ýÅ·œ{çæÔÜØád{ÇHw÷í¡›š[†>÷‘Oý ê\Ë•:µzÇMå]öGFï&»ì×xÓ»{ô³Ï|ÿ‡R˜sCžÎIö+ch?Ž•ÉcFú&5éòÊô½ïx{ATHceivûçÜòÁ3ŠÌGÂ÷µ£cÍ‚²
+jfÿN‚©¯¦S*2÷Ø{î¶Î+mô ‘(ˆ€$ˆv
+:%V±H–bY.²
+{Ec¯¨$
+©ò&ÃqP“, ™¯W=VmÈt™¢ÑÕr–(bóâšË½ÐnˆÀ_„»É2…Cu
+/N/f“›ï}ð£_ùò×_$[ö7Χºÿ«JbÛk­L¨Ù²6
+ÀçÌ
+„ŽtÜž¹ø6¼y£¯èɉÛNæµìïè>?<8244™šžÍ¦®<òÞÇŸyêÙßüæ7pÿjË^·÷µP)³—á–}[•¬SÂŒI™±€¶§§çáSÇVÉnû$©o,A>â*ëk±Nìslôh՘dzàÃÕ<RWD÷ª ¢ ŸÝ¾.F´JWáE…wÀD±‹ã’ddˆ2Õä ¿€èwÄ,QÚ¡=dC2b'OUù48מ=qÈÕ…BB’®Ð¬8T81íÚY¶2SmÈ3„ >74l‚ÃV f™Ì åØÊ,ü€S3¥×Ä5š%YAU©‘RÚzãJ§i²]ц8æõÜG/×nïJ»%
+Ñ"gœc™þ2Ü ïËGâ ñÃD­r
+þo0\`Œ¿)ÈM÷ÈX„µKx|(†|΅ƺ¥NCøxõˆÛ=ïö­üë~ß&Æg7„h¬Ù+ða9/_àìÄÅÞ¢ÉG–šŒŽtB
+|Ä
++Ò²9Õ¯sÑJÚ+6ioa·evO,¤`æ,’¾"Ù5åŒÒi^Õ¨[‚ ©2`sÓ‚¥¡-›-KáŸQòVV·
+{Aêš7™
+8!ÎÛ )Ès Ô«n÷š×soÞd¾uAÌuÖ…DŒÃX20}*fÜÏ´•b¡žmXÈ{Ëì_×Ö‡.Æ/ýó ¿ØÓgÿò—¿üþ÷¿ÿ
+¯×^{íÏþóžÞúâÏ‘Œ¤µ¹O ¿SÒhÆ"C(Ð0 ‡x%3^lCWËB{©†ÓXªR÷€ÉÔA³6~d1¬vÖJ½c´Ô@øÆõºLÞdàeÊ1z€[«ql™ WÏò^æ½ð¯òâzk}TTáø‚™­$ÊÎõL¯W=â÷̃}]Þeål•bâ6Ïôþqïw¿ûÝõZ`€B÷ÇBOþiŶáÉmóB¤ ¾Å[>,ºbÕ­l´»&äö,BΈ.æ»ä÷§OZÁ•bv{ÆjEý2çÒ
+¬›EtÌ EÒëÑ]ž8ÜVkùĘ`%Þ·ëé«NÜÀõÍÑ MPúe0™]r‡OâÝI·7‰¬/þ‹`5Ÿ P\—m¶ aB[kªZpÖ]S²ZsGšDizÅè°OH§ý¶9¢œiÖÄò‘_vÊ Ap.æ’ê’=ß‚É"U²Ðn“)0uMƒ êe—:Œ&3­y ‹ô):j¢&k¨˜ƒ ·R“€¶©'íê ¯j$ ®×.R¡ºN6$Ô§\žD)|E“²¢;×QÕaÀ
+wœ?XÞi'Î ‡{ØhŸµ’“´V¢&3Ê"{¶Æ
+U«à‡õê¸K5 ÉàeFb²v6êr
+ÐÈX‘2èst…G¢Ud-Û×Wª£&Â+ƒI%3
+™ ä`²CÚ ×—t{2ݦñºò 93_ÜîÜëÚ{ŽÈ(9úHìô±õz²ìÃJN•ËOVH*!çž@ˆ•èý?üàñÇÿn#ußdhy ­¯©udÛ}÷ÉÛ:¦ÞF57ýúþw|ªy´¸eßOÄ[GF7æç/füÈcO~ïYܲ?(84Ó?_¶‡x« ·ìeN5ŽŸ¯•vÓ¦anqÏ÷Ÿ¿÷÷4!Ò? ½š9ï.ò"kÐ}àªtö¤È/5†Ûب•MV×kLkàVløˆ>
+IŸÓœmØ.RÜаIKC„˜ôœÎqF”õ¢¨b Ù:íPFê%ýšò%@5ùÎ8³-Pãkaàs¯³ò ¼`¸68¸§¿Ú_ëÒ‡°È`\‡ÿåUV©—à'!ÉÅä°z¸2FÔNqu9ÄoâšÏ·Zêò$P¯@¼ê¬
+
+JLÖ
+²³vio£.,Š+.×"¤QjÈÿÚîæ¥RË“ûˆB7»gÑ3ô]…j ©T$jù}÷
+I˱×5™J•†l¢N·†€tõš×oÎüõHÑË® @ze&!¾F§ò CDÒÚ]&óû7#‰î¥FvÒ¢jQð—nÙ÷ÚåCml°»&äUÂÛ®½#Ûc¨D¤žŠV‡UÌàmî‰;oYw)ΤW¥Z©K~NÅr©e¡?öæË¿üå/à¹/þòWŸÿüWïÛz¥Wß1Ò¶[zµiìûßüñÛ`æÍ¿.Ï]>u¬‡î=1TزO¼ëÒ£OþÝ_øáO^{íµ›«ºï~qŠæ=Å[rA+u³Ò€Zþ’½]ÒSçî~pì¶D³¾¿ž¹[‚Žö²1AáuÓVÝB­.Q£K€¿èuÅ+‹-i=ŽVÒCªÞ¸Ú¡´°à®^ PœÃÙ•@
+ã¸ýp¤ÂŸ7rªÒRƒ†Èï’Î&®•QJ„C†YÁ°ÜP$²À%|Æ ú,<Zð\AL8l˜©¯ßâ‰Àq±AæóÞ[j2ø>Ï_v ÞÊI‹|ÔÄ µÖ±JfÌ.à”á/|öË71&´û?¼ªÜƒ?ZÇœ±ÉìÒ3s7xY3ä(y*Bœnƪ]„ÀX«Mt+%±àe†|`„PÓÆNÐÔC¬MY,›N.Mµi‰Éíšdس)#>ûâ!ý´[9Z¡A,DM¦S̙Ȃ ¢4ÁÉ—†st²!»!èëäx…DzŒ¬¤ÎOs[›e]p'xÞáên,D«y‚¸åç\º°]¶%¬ïÃp»\ê ΀Izkóu¡èu&¯É.C4k«<ûŽ‹MÚú+
+mèeGÔ²€5è÷ ’K-Ý §jqì_^ú—§¾ò¯¼om.6zw¤«k·ôêÐg>üÙ·aÌA½r‘µÛNœ)hÙŸ958<<>3±´Ë<tÿ?ÿ¹/S-ûƒ‚CõRQr=-{y#@î*Y<u*f´¥¢w6x9ܳ٨<£aFk™3Jfºó‘>‹|XW¶@57qêF¯SÏ0èVñ¨"
+
+‚aj˜sÛ…~Þ(G¨bŽ[u]¤UÕÎiƒ™:É ]ÚW'×*—ÁdjT$¯V/ÚÕp‹
+…ú¾~³FÌ€²Ô¹ŒÆuêbXL`#Ø!ÀÏÎqu9OM¢ËÅBÔɽâó­'»v˜ ‡„-ŸsÖ£ Û¤ý´ÐZ†Šög]’;¯×•øýïÿF©„^~ùåëa!^q÷ŽtÃÈôBÊÓ¨Ÿt«#Áñ˜rf†jj!2w†Öp´š4ÜdŸz î6 ŒYô2Rl0ï4$|†yð2Œ\&Ëï»H
+æK®òáJˆ Êévӌ߲&ƒÌÅ£/šL©XÞ¿•¹girŸz”EÇ•[¼ÀÅLkŤÀݘ"ùì|ÍÕf!€Ój9ïÊ’jùÅ=±Ž¾‚63¼vÒ†¦g)23çj!•–Âw‡¶Žltâa±A%N¹â›+Î÷ž»§µ>Dš¤a3ÌÊ:µ²C8/½Ç= #¾¬ù Ç
+²;on^úÎQ¿{ýѲ '…ú<šq—{¥I˜p—˜˜¡
+ £VpôOš˜QH‘‹Ì-ãô¸&·ÈV1 xÆ Gœ_UH‘ûԼϰ+årmgø^A.ÝTEù"«\ °3p»:Ø.Tê2.õxYyêfc~Á„äAÃ.uȬå³×B`“®^ôˆÇ…J¼,É¡„ÙÆu±‰Brb¶­.*ªñt(j2Ê™H JÛŸ5çÿ<³Cãµô’2ù©Á³Žûçê%T™%X#í4éÕë,ŽY,2ñ ÇPzõ™ï>üžÇ×–×GG–Nwì”^=ÒqW6ºñ6ty+^wwNž(¬•ÝÞ}~¨àÐT·ìï}ä½?ûÔ7ó›ß\oðà¾~òÜOöÚ²·Èå"<iiÀ ëÖ2ý~mÄï]:±’L<9zÀ#¹ `–)6|˘P-Ò¡4UÒk’E°Ù¡Në4I¿z¤F—@ÿÂÑZÙ¬k‚+Yh?ÝËqºkÃnMH¯ŠÁAÜQѲC…@
+
+§*Rôx3‚+ÓÔ0ÃWL;dý¨åù­ù`aø™Ö‚&¯çòdóôLÓ_^à',ß(ŠT1çÒ¾æªh ˆtØ1é.ªcú« 0c âh*¢­V‰E3© ² ºélT/Cl¬Ñ&èxƒ‘€XH]ý51›-ljI¯‡N‡"ãâ1Ó8Uªyƒ> ?Ðа áG°*piH¡Hío”ýû›*Uªh2›zRP…È~áÎKý–¥þB§q¢› !a¶!´')ž¿ä÷o“] öZ#«s%ãÞ{È„çên,4ñ–a¡¿æE°PÓõ°G9Z¥œ7é3®†$ÜÆCz0YÖ§-î)\%a“aÞAMP¶xÈ’!tyz’BÔaš´XpN˜šŒw§Eq2ÔÂCcmehÍç½X28´.Š[àGÌQ«C¨“®e†î‰¿kÏŠÐM‹ŽýÛ¿ýÛõø«KD«#µ„T¹«6è÷­ÓÍÖ OÙ JB3g«P¶>¿!¥##úZ&¨c"6io¥|r•j¥Z½èU±ù2ìµÀÙi&à†õ‚àN1DÀd&b2§9k1o>#1}ÓQ‘6ËÀd4{e5q€²<zÙ$z™!G!+d…D²×JpÁñi^Øâ¸K4…P@S ”žÌû׿ïlR{³.O²½fàLNÊóÅŸPIU|bŸ Qr²¿kéöîuI–
+°P²ÛW¹Ú,g
+²ë‡Ó ú\ ;…ºo\‚3aÐMf
+b'}Á\¼¬Ö˜“YÕSeåé7ïbÅ!":Q`Ð!Bs– d…`¸N×ÿ ]í²žq¹6—é
+¤~?ÄFÁ^:¤G¶³Äd±¶Ú ^7ãCdë'ëc;–DÂœŽ…Ñ„gJ¯Ž¨eî>×¹|ú·¬¸8†Ò(¹µJvX#”_Gq¬RÚð“çŸ?ÖØk¯½öÂ~ü‰O|îÒÊ»fB‹ƒíM-#;¤W»[¢o#–·ôõÃo|çxóxq˾‡lÙŽ.mÌÏ_É>øØcŸùÞ3ÏCîsPje¡ãsŠ=௕9tÒCZùqN~û!ç´“»ØêO _L.~xètê°jWŽ:pHfHÇŒW‘Q™bÔŒnXÍL"bÙ¢R‰Ôý~5XÒåfv
+ ^L“òź \B¥?ÓÎíîL+Ù9=jŒÔ²6í,¤-¸¬}caÙ$ ñn“ô™Ð¿BfÝé³@*Ì*É.°2 }®Ö”mq'—ḦH‚”„÷€È#^öùV%S‚yÇó4`£±1 ÁЃ^Eô
+FÙá*Y§‹ñYq±Ù;¿¾¼0õîóÇ“ÂtWÝø¡Š1¾||ßÄ ×aAx¨Øê…ÓVÏŒ¨˜i‚ˆ–ád$„?ªŽǨ€Õà-8­PÉË“r8R]ÆÝb
+`TËõÅæÀd¬l¢°¯„I+˜¬Ú´ÎÙ>çäàpD&se1u6Ýü¤/ðÃÓµ Ï||Ÿ@lP+Ø µ lµHíÀBQIí†ÌXè‰jßA!“ÊXZ‹×Ç͇>Uã/^Ÿ©ò|ÎÀ][€Xh¨áŽëa!·4
+onýÒçŸz¨üu^¬?xG÷ù‚xëÃ'‡‡G'¢ËËÉ.¿ïÉ'?ÿÂ~úꫯâÊwlÙK¥vÌ¡’5—ËOZ¤Gê‰Þ“Í–iöÍ,OÞ·0ùÎÓ]‹¨Í'l¢üemȯãå½fÉP5ÓWœKËÄôÇŸ€¬¤¬<åV™ti£!w„¢‡+E„›/süe»3Ù½X›‚c—¯˜+¢uúd‘rþ¬CvI…ö Ô
+Â%:ØIªô׊-«±BŽr¥ß'×%€E\)k‰Ú©SÈ8Q*ërÉ•ÿ+NÈž°ò<ß^öi‚BÙˆ(ëuHzk$Ãe–žr\/=_Ëœ­ÈïéO¨¯Õ…ª˜an㳸PÅ5H± ¿†°æ^Á÷&®{< -æˆG„4­ !{LH¡7™‘é‹%5ÙX¹2íVWW&L\+ÈïS/x½ðYà¡ØJ[Õ ¨¦2eÕÎW±«×Ö¨Ù
+©WöòÔ(nÄdõ’Jt£¡›/úœÍ¦ÁS8€Àd·âäV Úp tÈ%—k“xûý¨9›/ŽA4&oòYø¾Ó²«.ôV`¡Ö7öï?÷ÔW¿ñ­§¾ùÜ׿ý§ŸûîÓÏÁŸðŸp=ý•o<ùäç.Ìlý“BõWÀB.©ßéÌ€—¬5Vk+îŠp½>Qœ“7éq‰O§ÞûTÕ)fnÄd
+FvͧÙ¨Õ
+’3"ÝëÛ Diš±ºÔaƒ>‡{ô¸zœ…dî'ik¦È`ÃǦÍÅÿc¬îc£"êg*ß:,´y2üµ¯> ùæï /pX*žÎûÊ+¯<÷ôs÷o>ú˜¥õ¯ƒ…NÔ(‡ƒÕ®µÈG¬’óvéy®lòŽzãj£aÜÜ¥ U¨ÛM¶O öúÉ¥—‰­”ÏЃÕV1kÔg»Ù0ê›»²¼°Éä@« `éžÖ-Å-
+ĤŒãòÄ:¼s~àñŸ£Ž n’6ÙÜ´&í8¤pAÐ
+ø?ÖÜ0uÌìfCýR]ùD Ó¯dÆË‘ÁìŒCÚ#ªCNC¢Ó4QgHû4cªÂʶQ±Uпp
+¥,iS–’ Aøí!9á\i›-‹K£DÅ\lÑ*žþoÌåÉæ õt’<b„„ÈI1•c»kD«šþäO\]'ƒ‡Ü—›}ñnËx@´*C ²Á‚.ôIòSÖSõÌ9—:„ ïé‘‘¸.S´Û
+-l¢A21
+&¨fFë™3«5ðK‘­±Æ˜…œ·8ÕP#·Júwë(]ïBN]‚…tšd6A÷È8?ˆÀ91¹ª@EÒ!>£öÁ ¨¤.´ }ú€°Ð3æGßóøŸûþ>~÷Ò¯^|ÿ£Ÿ\»3üWÀB¢4Ðm w±¡†Ê˜Y©azå„Ø^&ëç5“T„Å¢OÃÙªºf²àE•ý/ 3I—kÕó&]ÚÃÁâ$…^L‘ùlnâÄ»uÇHè®dî*&ì¾ ÈLÜßÑÚØϼøÏ/94+¸–­öK> nhµmàŸöMH=àŸêò.OvÎýì'?Ûó¯Ó-•â °+Ù&ƒè4بãE@9WŠJ½sµÙnCøCH4¯vý ðL:¹ vÐôºæÛ a—j̉äýÅTQÇ W0ÑZyP«Œ#Ù—! ^°ÍŠÂR‹e‚Fkår½"!TÊDÔÌx™SÖg¯˜9ÌN·™¦« «Õpqú2¾DAÅ«A:DMf¬LÉŽb`ŒÓR'¤H/EF¼2_Åuj
+ÝŸ‘é±IzMÔe^iªžG¯WS›
+Å<€«=][ÇŒÕ0=Úíõa3m’…ËI«./ÀjŒ€'Š.ª©‘"R‰àõI*B¹ûnêº '5/b²cwBøÝBZ92#Ah2¯ƒïXê·Õ1[Xbyzg”¾½ï„¹5°q—wõ”¸Ø,Nµ‚ "Ř5a£%vœTÞ†Yf ~Àã^h ¬rüE'Ÿ³Ù2pÓ.À¸Ú]Xm.JCâ䆘B"YaÃ剩‹x5aAÞoA—³U(=Ù[¨¢éå3uª)¾bLfѧŒl¶¾2æR‡”“ÕÌOt„)Ä2}`tN3é©|v¦Êñ©G¨œ
+Déë™LÍDMÈY·³^¤Q,Àß…¬9o2$|K;¹‹¥‰Ð^dG)ëpæ(!äÂBƒÛ±ÐåƒÃB÷ùïüÔ§>ÿûßÿ~ÿäé¯<“MÝÿ”ÎòW¨ Õë–<ê`r¦š&uEj²0˜Ì)9#TL9ÍÙ¦ª9›-òD]Ožôm'Á©Ë
+\E!3ªVæRS©2øIó2Ï_98…b§óBÜŠ€°äò;—Ç“þú—¾^ÚÛsLh~hã°}Òn‡_‘°Ùr¶º¼¤ –nR<Î)áX‹Ïsu›Y]ßíJá[~§¡È¤¨
+º=˸DæÚ€¤‰n ðo¢Ú¬y¥èeð«øA`$jѳÔV ^6Η1½kP.g„êË7 ã2§
+ÕèâFÃZõ/ÀËàç«”s5̈2?($|=ÉY«n¯Í´UÍT±9Q•WÚµJ¯›nP/Ó0‘Ýs07YXCòyø,X›¢èÅ…Ïb±´ŽèÞll¼ÈA"Ãg¬±NÎ%0Ö­5;£³“Í_òxçZÌÓ^v–—Ÿ©’u¥‡*¥Ân W½ì`6è½úê«?~þûè“ë©«Áåþ¶¾æ–ámÒ«]'oïœ|üÏnÙßÞ2~Ûm§(:K´ìGFÖfçÖWÞõ¡~ú»Oçw¿ûÝA­•=|ùƒÊ8$“Ù‰l+§‘5©ä'´²ãNéíÁ‘4Þ2»¼øøäÈ¥Ö†kº6dµ'E&pCšc²Q?éTŽ;È“¬ÐèÑ2QÚ«¢Œµ8c©‰Cbb‘J™ù¶µ©`%Óo—ž?\…ÈÙY=ad36õ¤¢,U/.Š^moŸ¥KR¦wÇ,n™"®T¦Pv¢½§9>S4ÂÁµâ$3 àïTuöfýýJ!VÀy½bE,§œ*­¦ÙÃÕ &¤JîÒ‡šÙi;‘*p’œ9ƒù‘°J»<”€·ÕuqÈ9ÛÖüÎ;¼¹®˜Ï‹3EMØ\ŽìŽªíÇØ(ÆÚ —{•°¿® BÌW“ìÔ‡(›Ÿ‡ßÞ`ÞØ&
+)ÄÎ,˜ Ëþ®l‹#Ú¨ò
+\‡SÔ¤3–êàR½.ƒã[š•²ò4éQNH·ÑéuÌ 'íiÒa¥òåZ}²A5¥(Þæž!º¶°×¦Ù>‘ö-WÄ áõ«†áÁƒ»ÐŽRؤÃñÜH„$à:ø ‚ ïo íÂBÒ#û™BuuñÒóßxîu˶/þìç÷o¾÷ê¡Óo5¤T×ÎJ áp(e,×2üô| ¶ ãp¦[*—YÕ2Ý?*cfvØ ìbdzéö(Y”¾ö¿ª˜Qºú‡^fÀù.G]Ž¢xËîYGJ@º­[n…‚ÿ¿:‹¥óһDŽžî[‡fáS€—uè#NCÂd\¯7®eƒŽº,ªÁºS¥|×mâ…wò‰~f7¢Zô5ß³V‡²õKvÅp¸¡§ñE¤ÐO6V-Â?^N ¿\¬TØ9œåÖ௴Y":lœA`,é±Iz2¨g!Ë`+ó^(Å&é«Ât£T”'h–—žke'8.^fÕ.èÔ8ößn“UQÍZÈB`‡À&ƒ8l"»-¢9-ºcn7êŽá”—=Cwê‘í„OÝxƱÏïZ%Û˜ÀÅ»êƒSÁ+‹Ñ{oiia'Í• NzºFÚa”5UJ]
+9`!A&s–!£Ôò_ù‡7äQq«~ôÓO=ñ¹K«,D–†»›Qzµ”JèÖîæÐÛ‹cÿã¯g>ÿõž¶â–ý`{É–ýC}ô3ßöù—_~ù àPÿ-3ŠmpˆÊ¶ÂÕX&?i”u;ågY²õpÜ42ÞsqyîC#wå\ŽØveslÄð–C±AïˆwÂ.MĦ ×)Æëe£º²yHaŒªeQ!êY8d+ó*ôÓ3»¼‚=‰eC>~Np-w°ðY€4U²ðŽôGÎÌUc°ºFØU^2J!]¡H°êe£6m"Ó/6K†wÅ‘ùÖoùOà<- „DA™ýÍ`!RÕweNLW/ÂÑ`"Œ÷F}Î\w«C§sšIÒ1 64l:øü¾ Õg¤±ú$ŸîÛZÞu««ŸŸ øã휲¶”£ tzf”eò<RÝ2o!q2ê5,VÂÿncøˆij·L6Ú à—°w–ò9–ÛxoveÐ"±È‡!c“™•³_u™:-nÍW(æÊ™™º½LVËœq— ¢¦’+ÖÎNx5cÒurÈ#»°ë™R“±%;/€i5Éz-ªIØY«u÷$Eqà"à7R[HbK™慘Õ~‘ç/ÞŠHÌ뇅«oùÈG>óë_¾øº÷ßÿýß{ìïr³«?-Ó
+U‹•òé2fvO“Á7yå¸O
+B‘t(kÔ¦4ª$ëådp—8ìŽñ'9Ýf
+ñ¦Ï1_Ãf,¤ÎP[rnJ™ùª’¶‚´ßù’œ«¯¬,åUÒnK«iFb¸ñá_@MÊæIÊZC«%ˆ…n8‚#X0ª»\„Êf…pÚ¬ HÓz…×ÎÌQCt›vÖ§©UÎB"ï>€
+›vî°aÆfËÚì|R8 ƒÿæ%Âf¶Acõ !Ó'.µ´<p"p¡Ï9¤:B>͸SÖOvá£”í¶žéu–´B.O‚–¸yÇ
+—øJ©*Ê™É^VÉ –¬ÄdI1Yi­Í4 ^&ˆ›àà¼;IŠ$ «5G±˜ 'áoÌËDwöc?±ç˜ÐÇÞóñfßBÀ>9ŽÑ¸Æi&à=Ô¨ç”àeå)¸*Õq“.uÈ01Ên_§cöô
+ÒTÕï¹:ÄϬ…/–þËt¾¼²S Ù,¨cœe£mUQ›_H1™T'Q
+&»“]ƨx­Y¶(¨¡‚@
+þ$&ðÍ”ÕvÁîØtsËíUS6CÒ¨_©×.›´)êbpíÚYHú #0¡Å*ÏRð2é¹fÛ„àʵ›#U
+{â6ï!P !:¹!Ö…-«}\Þfƒ@£5mŽ§\p¯Ÿ¡|¤/Ϭú¶I˜ÝÛ؈„6 v™&Œì*œ/tÍÜ ‹6HYÙd¹2]­KÀÁÑ`(²êp®Ù¹5©rN'“+~ÿjQ³é¼sñ.ï* ¢c‡/róM¾X‡q”—#ƒ´1IPŽÊ•=vY?*´
+Ó¸ âMŠ¶x;Mµ×°
+ûõg CwiÆ[lž¿$zb¢%%–i 6›²GLÓ„,z‹Ì e ×s`é)ìZë7#GÀ–jŒ¨M¨¡b. 6«fà°«’GŠÓJpçk˜á¦—˜,Z¬6€DÅÇ5&óºfll«Q—-·³ÕL´˜®Â×"œ[Ü1… ‡Z.QmZk1Í‘ö4*Áùq•¾sŽOÁ*˜ WT8~_“!IÂå"×⣥zdˆ…®6ž~â‰SÓ?ÿÑ?­/ml5ŸÝLÞ󭧾SZ ê/=›I_ýò›ÖiÝ ù‹Î"gæÈ6Ó¹—*朻|Øí]„´ÝÏÏÖ³8­RÄŠm²2f M7 #èYQä) %䬨UÍÈóLÄèã¼7y¿%ZLPGËO2s)§y½SõRccüôMst^º(:¶1{õ6ÏL£Ó罞
+
+/š&[Ø @ k€—A®a«˜õ«†ª¥r‡µà‹Zf
+7V/¹ €FÖ¨Þ&Co!«ôN™ÔÚ sÔâØþç>ÿçÞƒÒ«ÙÑáåSçÚÚÏ•V„ÚÜšÞ|xüï|Þ6×ÕÕ¿cË>6³I^zðÇžúÊÓ¿þõ¯ÁÊ/½ôÒ gî-{¥œÓÈý¬¬U!?U'¹…ÓLØ,gX>áŠÏ<¸ºrØ5#:—®ñhqy¢ƒ…„51W_(H«A9 pCd+¸-…µòq¿¼*HýÎË
+^¯dÆÒÞ#¦0Iü‰æ†é:=z=¤º¥#Ä
+f¶‚ Á%ß>Vm‘ ÒýËf;ôa[Ý!–ßWõ`”Î÷òpµÁ™¤± +ùö ÎB‘¹Å¼1ýO‡@)Nõ 4!ÑTòg©ÏîËç½°Ð6âPFl%)ö¤½ven£Í˜¢Óž€»L”±wÞ•_´i,Që.q»7 p®~ñ°{Ö­è'p(XXÁÃywÙPK]T¶ ml¬]´R4JCø¥Í2*oZÜô‹GUm¶Ó4AMfÐgëµË¬4ê4Ägb²‘¢’¬Œ™o ûÕ#‚rÌŽãÖ}
+Rǃ÷PÁŒ8e½GªBX1ó­tÕkØŒC©•‹Ûd*f¢‚ 똠†‰ÈJ8”èäIyy
+þeTé5Æ‘’WŒ¹Ü¨ «“G,d·¯ÛëÂñB”pÊ‹Ž ÁŠ§ƒ¿ ßÀ_‚ó¬†Uzïå’ºÐN,ôDµÿÍ ‘Ÿ–©ïÝóÝolC;ùË_}×G¢ƒ ?*×æî =úÀßìÈYþõ×/]Ýxøró™· 9%ÅtÃ"ñ©†ª •Ð
+ŒA^,TkÊÂï6 s»išxYʉël)Z0¤Í²|
+ã¹:ÄM¯†6K…ì}egô ©—Ek™³õ’z¼Õ%ï±öª©"‚ç–ª?ã<Ÿ ƒpÈœ[‚P^LBºa2®A`tj&]ª ñ²´\‘‚Œ©x{Ë)"¾låh²:æŒ$Ÿt!áäÝæ D!¯7Õi›+ÕÊ9‹t°tRÅD5Lx÷² 6È”)—:H¬‘µÕ­‹îe‚dÒýËŽL „$A½Ìá\urÙ"“ALöxÖˆÉP
+¢"Ùþ@]]B ½
+±Øë'ñðJãT*öñ‰áMgÞ©[â¥wUHÎêejÙ¡
+™C&³ïæ—®–Ød€ù¿þë¿PzõÛßûð‡>½ž¸_îiëÛµAªÿŽÅ·!Çÿæµ²à±ÐÉ“·S4tWçùa|ͬLÏäÒ÷½ïÑO<ûÔ7!P”–ýw¿üÝŠí|Ô€ÏU2'<®ZY—J~«EzR0£~ÕY;Õº_øÀÔØ¥6{œ…`‰̓èÎ)DR^ȺÕcEA ëv`€QE5ÖZ3ÕUqV.:äÃ5¸
+GV”ˆD y4c÷<À?ÞfŽÚ*—U•OWíšÈݱ竗OëTq³n¹Ù3BDÖ< ™&”‚kDéeû¡.oµæ8Zd œ¨$)5n^•Ì¿åõÞÓØHVß*å7¦?ˆ¥E”Ö¼%©|_pÅÝ<«˜–o_*,‡i a­?éu„6WÏãð•sV¤qúÔ» buˆƒÎÙ“þ €C½âò!ï‚_9heNzUö‡ø²¡Öº/\py;á¬Á¡
+Ø0˜¬·6bÑ'ÀdVÙ¨¶lHàº27zÅ¢Q½jÒca
+U³áòyA3v<áö=źMÐœîÂøtÉdààXc÷íSC@Tl
+ìU², û f戶u6àß™äã™Å×/†î»Í7ße‹ø4cjÚè­Â“åúBz©å¿ÿû¿ýáøö—¿þØãÙI=0^í>$½:0pëM‘xãÿóÇ·>ÿ­±îñÒ–ý½½è–ýÖÂÂNæÁ·½íÏ?ýùcܲë}oWK)·º+e-JŸ¬’jÜ ¥GsVOßœK,½ujð"Ç-“eç¤Ó™w8PO°ÇŒÃ*p‹š`•6M©K¬Ò±C‹`Vù¸È. â
+'d}Ür“!ÎUŒÎFœý#}ŸÁv}¨¹iËï»âó§›Ü³í†Y/€+UÒ*ƒ“÷(±DÅF®Wø5Fª/¹-£¥H¸Áq{ºb´MJ=MY€0•sÊn‡híÓ4§¥vvˆd$Ê‚×Ó„¨|°A õ‡€Ïïƒë>ȳ|Ü¢W=}(Ä.ªT&t+pܬX@)Tººƒ¡@¼›®Š£i:tÝÌeï%Dç )$ +w2wIŠMZfàW11Çå†@½ÜÅb
+@©Ñ˜‡ã
+¸£Œ†ü‰´fæ|ê‘Oƒn÷“*ÇöQ/»Û½6{óÊ ?øÑ¿õ}¯oÑW1daNKŠ-é
+&da.xTÓRƒõ,7XçëÌÄ—O²ì¢4-¶¡QÞËbÁ)Ê~s£a“×FJ^V¢Õ3Sà`²ÆŠð€1Äû’€Oš >ý¬]1&£ò¯,3á” õ˜ƒX~ñµVûŒhXUSUÊ«t´ž“ñ2Á%Au: ™
+r4,€›ÍÍûlrü–뽸Ax¡3e” )§ §‰ÎNžª#AæEê½;tÂ]TÒ)îÑè¡ã4£*º‡Û¨ ZU3¯e"f’.û×3£FÕÂÃ&kÈšôiø}š)kå«ÏBÜn1Α{ƃ´Þ4i½Þ<’xeÔ5ßÓzõ¡µæª)·ä®ŠB¯*TëÒøŠ‰6GÔÍí¶Øg-ÆÂ<o¹ÚH’¾í,–Å(Fiá+˜ŒŽ¡Ò¢˜¬ž9­GBËq^=ÝSñ-·g›ã=Æ0§š¬“Œ‘NÊX#sÆ©ë©üT3'úVúêCêW5eV-i”‰zù4ý±H†n±²xáW¬ÖoÔ˜óXaà
+@È}=éUËü…ä«?Èþë¿þ €Ð^øÑ“ÿÔk.¾qcvyâŽé®îñ'n-× ïlŸúüŸ¹3þVïzýûú;' `趻ÆÆÆÇ'ÂáÕåÕûwùÀûŸøæ¿úûßÿþ¸ªCª“µìqpë¤M
+ùµ²ÞzɃ6éÓLûªç"ã—F÷îêY„Ä°´”Ç ±È¦V£Ë—ä$ê˜sZÝß‚m÷`‹mŽr¼£h©k÷®öT‡!pAÈe™q8&fÂ¥œî®øÉ
+ßý× ÔpÝäÉñ«#ž%xy­ºiä´{UÓt¹ÌÂœóª'šù9ŽÏôÖ‡ÍlRQGå,œncò¤1d%º°h߀<ü4JûÕT‘¡d2xñfÂc PS¬ û]‹žâ†² ¥i}Æ1–ìÃûe™i^5 Oêõ%ý¾=ŒÕMÑ·Ü×jgã&Í„[‚Cß»z½A=&3ëÒµæMäw'yq«ñ¾«ð `ˆhgÓyN«õÚ⛱Ж›p~eŽj“jtï«K ½šºÐ}­g>øÁúÝï~w¨A–›K·_øaä¼ÞsS>ýÚ¯?ÿÕCŽö™O<›Kßÿ„Ñ󿃅
+_!­äwCºÁg(}ºÏ·éòd =xÆ…@(e±ì–a¡„LJ°ÈÐܼYtLºq)²EíšòúVÜ\
+i=[.÷Þ¡¤ƒ
+6Ê&ávÂH]ÎY9Û Y
+0 `PŸ>Ä8Ä“Akˆ
+™Oö°Q*X/­a+™ 33 &ÃÄ° #–£›š7ÄZ"Mú9§n>@M¦\V«ÖuªU›:Š!C2ÄóÇц&Á¾œÝ…gÒ4OS¢ÅÒkæ
+dìÚã€P`·4 ªDðÕÀ•ËÚÛn.‡8Ó›½-•\|dòÄZs ítî4±3µ’›Œ²vVæ‚û &fAzµ«îöãZûùÏþé~úáûÝ^\?íïë뻣¼"ÔÑ6ýÎ7?~`üm=.¯]½i`¸¸eÏÄ­£ããÓ3±•­Dúu—ßüÑ<ù½oâ–ýqÁ!—" =X’Ë9¸)éP´Ï.¹§R›ñi&[êã ÁKáñK'ýñ¦úê>t^\>@tsjdÁ¢¿_ ÚèÔåùªÙ1Ù£®DÀKœ¸Ö[åÔaB@—0ËpÈ
+ªéÎêˆàMÖ¾«àÅ¢7)rKuÁ^6ì`×ê Éj}Ædܤ–@-n³r^Dá‚pƒd
+ Hnð÷íCXÇ‡Ä ¤9i„\¥³MM…z¿éæ7lŽk¬NÏ&.¡úêeÒ‘ÉÃû¸%¯zÊÌLè
+‚ª3Õ̼ȯýš ƒ.ëWOViÖË%Ý•ªdÙ5º$‘
+c¤"å2QÄŠVÀ¿‡í<â7£Ñ&é)äýÞ+ƒ®ÅQn©×—ìª yåçjñ8ÀJ~3eaÎ{µÓ"jïú€iººjgžµ€CcjÀtM¤Ã]—åL«¤zÁ| k²Év-±
+K^%úf…ö5ë÷ñ³Ï*°þÓŸM­.øî(}çg+ë¶×òï{ÏÇ}ç/~úÓvÙë|õXèåæ…¬²±v9º¯Á 0Ù%,Ô“€xUDÍ
+ÜMPOw×Å_Ñ˼WMYA\kvÏÜT=ÕÅF­Æ¤™ÅºéínµgÛŠéFQz~—C“¥¨ð±‹x»‡¼ 2Äd¤v·smÊ« |óQmØÆ\£¨tl³ïÓá:<©F"e"ivwXc‚jJMX¶Š¤‚ƒrfQ«\Åf«‰ª*5éƒ^–öi&Lú,Ï®zkñè§^>ÕؤE-ðbHgJë¤rueÔ9W“£«:(ÈÎòí‚—:òkƒ<Ÿ†èÔwun_"Ó#›/k­Y.û'Ù $‰}š¢âšâ Ý‚'SI+ òi^·Èñ‰¢±0ÛÂ9mq¥k°Ó5¨¿3AC¨¨žênˆâzs3­nAÞ±!ø’>~~ 6ÜÅÆÙu¬±9lšò€Ð 0ºq~2MMìðȯ˜#éFšr™2™Ë½YÔ­ÎJ™Š `å–˜ °+²'•¢"€a^\»£{yiæá‰ÛsÍþ4¼…kÈ.½¹JÞoòrB¨xI%·¢õXÎ/8ýë_îÓÏ=üà»vV6ÆQzõBOÙ=jÐw>˜{ø´ø[|„Ï$Špèö›OOž /Î,m&·ÞðÚ·>ùäS?úÁÿô§?Kx[ö.JøP¸Q¥¨e¯“òfB:T#¹É)½à_3ÕiŸMÄîŸÝpN»qqûbŸ9~gÖ§ë‰Ëצ¯fˆIªÈ‚9¬œn)¿íA-õœÃ§áŽ÷®ô™¢nUºi-†³ÒØ&vV–}´ßw¹8¥¼í÷§1 I¢è^io˜mªYåPÉr«d'…$}¸çΖ|éPÓ¡ 3VÇQ±§ƒÓW]2y²+[¨8&fÊQPùE#*<Ž$ñ[8
+^1Y$L›!¤ˆ
+ÅZ-™›­A/a!›tĢǩ0ŽÏrÞ”ÓuPÁ²Þ'&ûÌawÅ„Š™5âh.RdÛU‘v&ÀÍù}E“A¬ÞôùÒŠEï²ß¹ÜUï«ŽwÕ̹œ)ømðkq±Èwµ0‚Î'©²§çÈ©JÛš×6„Y<ËÊÖîà\ƒuâ<Û*áþ,ôW÷ÈÞfë~×»>òóŸüìPBúÈýÿ0zkø±êÕžüéðzçK/½t¨ŒÿÞÇþ1¿ºýe•á£.Dfõ' dd…Ã]rø4eåŽÛ³/ˆ«}lØ­—2KfRÃDánÛiŠ‚7š
+Dè~È;yŸ? i>|Ýo_쨟í¨mk˜]Ë.r—^©õoðü*%Õ)µ_ž§î< hpLz|û}€mòíQ²ÐC²æ¥‹Hñî™û—ï5òÑÚâò8ܨd|T¥FµY«z'“ëÅÜŠF5gHWOÃ}î1&ÜmR±æ²Ë ؃Ûu{vðƒâà6Ûmnδx÷‡¹¥!×\+7ãSŽX™{eEö—ô|kUÐÃAv¶$²KmŒÔ93û árþ®n6
+°¿¾*¡Ñd* ”n¢®(–A‰AÌò¯ÉÀÁF€
+ìÉ%÷qÉ€aÎÀº2dÂ<“M1éÑÍu["¢/[n2rÂæÈ‘/Ñã«mx¸½ææl±c²WTpH–ƺ,–dC²mZ­[V뎋|8¢˜b›#ÈÓE?7—“9œùÿ%,´}vá©O|æßéüÇì&.Îu\8ôÍ{NÝ¿õúýÞyÙ÷¾öÍÝÌCoôœ|Xèåf§›°a$ŸjdS€…ˆè̞ͶÅ;×<|Ž'NØ„û§Em”ŒèQt5D8£Æ-ŠiU´ÍÄLùô>˜  >â>Çy‰—‰i@¡ÍÅ©¶¦ÀœÈħ6JíW0“ݾIÅSÀv.w– -ïÃIð_*[
+Û uW
+<„¸‡®¬Ã¹ .Pò2ø"Î~’vŽ_¼«^_¦Õ›sÏßíÏÝ).¶²SɽU˜ïDk™³.éPöp›~Ï<À¡úª£.c4 Á‘­q‡zY .ÙÄΛØM¢‘¬#)!àŸR`¤G"ìe‘ß´;ó¶ÆmGcžWò›œkUÔÅ­”‡S1Ó€£à÷Ø“Êh³{ÎëM\f¿åõBŽ™¡I¨µ&»æeð›W <…aé‚—¿qnÍMØÝ Öº\,½^¤TÒ16²Ù·‰É.:œÛN×VÀ¿¸0ûö…à¥op¯Óu±Ç¬‘õ›e=.ŽÙŽ ™$Ç#½
+þˆÒ«ÏåïøÐÖú}ÑàênЖ¡®îs·÷DoÀ‰¿õ-ûÓ}ÑÛo¿³|­l||>;¿°™zàMozﳟ~î—¿üåquʾøÔ窉4LiíþBH‡šXY—F~‹^r¦Z÷«'yvùÖÖ¥ÄÂ#¡‘½›ê&H…a£V5‘Ny8UË9áiÄ"³é— ¡ª—è5Ç[Œó]5³ÄëÁÅRÝ5q§l˜”£ƒ Ó0Sàø<ʉVC¬‰ŸÅ<‰Ã—Ë›#„7©}Þ«~ïÕÓ®D›pÉH—O’ì,qóü‰¨NUgŽ2â’]ÑRÝ Ë¤¼NvðÑå!8bɔӅƒ‘¸‚ÊÓýÜ œ8ÆPkŒ–Ø_iˆ3Ë"Ÿé¥¨X7É¢×[§®¨€¼5h2dêL¹Æ°X»ŽRöÍ×\ ùÎê9ø¬úÍÑóü¯·v]p&xqÕÈÜÌeÏzS÷ú²í®‡ìCºFátI/´³NHñž•
+,ß}-âåÛ<È»åó¥Ï[p‰
+Ôôp,戠Ã:YOÈ—Ù¯4v
+$Q|Ú…˜„f8wÛ†
+~L&¨&ÛQ‘_
+4e›ÉPz™Év›ñ‹¢Èv¥UÜ¿É“%kƒëe¹!DÅM7¥vÇÙ¡Ò0âà.jljºVÅ#ƒ÷>õ2šq rìt»"Ks,G¯ö‰ @AN×Þ@ý”EÚc”u°2QÙ8 „ª¤ÖÏ~üùãÚ ÿÎW¿ùž÷<±—yí|de¼o´­c²8qË­76èÿß~öÛ#Ýc¥µ² ]ÃÅ-ûÅ̃oÛ¾øÙç_zé¥ãZ+ËÏ= ?‡dÈ8äR#5DŸNvÒÄœu«Ã¬!Ûg 9±¾¶ðÆà™m?;ïSMšåÑ
+fî(¢}‹lÂbH y…‰—»ØËnÖ²õ3‚7í6ZæÊ`}±5OXtâfˆCŠ³ ½Õ!Q\öðÛ¢¸Mfu6Êg Þ+㮹!@†àYj©^v×eQF–TT®¼‹Ûpy²$ëĺ.…2)vÞéÁ
+‰ð¶‡+´Æ
+/&ˆ¤WŽ$/÷%¯¥[»Ý¾<€ˆrvSÊÝ€4}..áž{i;~ß™&¿M¥ÈRIét¾ê ÊÔÄß3NסgL¥ÅKÅñénz7ÉDw¶Ó…p§8H±i R•¦Qšsª«–ƒ¼(X;"Q.Èj›4ã–ªeˆÕ¬îàçèe(^¬>k$‘ÜlÊ×›85|nÅuµ‰Ÿã£µDA ŒG1ÜYãÄ5¯{¥“SXÕo¡¢“iËY5§U&XÜ°.U„"ÅÏ<FT¦ëåÁ–K„tr£Ñ˜ÌæQ‡ìúU¯k £ÃlÀ×’œJˆ>ÄI¬µ)¦|ºhWcœã¼éSx!OÙ¼á5_p-cQËŸ ðs=låjQ:͉ºc™2€=NÈsÈ~p©Èÿv¥4ωÞS0ü,Ø àn©G6yXè›ÊÊ×n¾îKG¦¦içç?ùÙçžzî3ŸzæÓx=ýéO>óìSÏ}åÙyñů;Ë÷ÓýÉk/¾i·丱P{%®‘G­liH8YÏn8ÔQð2ΰÈ{–à¾m·ÇxõT-zÙ!“áLr3èPLxuñVë'$<"˜>Åq[¥é¬Q×<˜¬°kŽhr…¬–l|ó)\6ô3ÆFªç
+q˜Ïà á¶q.‘,È_›/*x©¾
+“žjÜn¼#•ˆß{Û*¼xA\é« zä·iä·¤ òKîŽ)¤–sáWHgÁy÷³ŸþôÉ?õš½7fg—&î öôLôÜv@q¬-øá·}ø„ø{z¼ãáÇïé»PÚ²Ÿ8¤CÁ`bg%ñ
+êé
+§áYðkÔ7¬‹yDHü·xϪ]·T­ˆkÝ#šu4ÆDÇ:ê±ëÁ#^#ý²Q8‹õ*’ÜiÆ}Úi›~Å«Ÿó©§òQˆ¬Œa
+#ñ¤ƒ‰¼O~dݼïÕÈÒßeÔ/sáŒwÉXEmÖ)F[Ø##Xh¯JøŸb¡O>úÞïýÛÇèÈ°¼õMïÉO-þ@^ñ*êB‡±C:ì­ °Ê]쪋»ªfä“E~æaNkqÍz]Ë\ÅD#
+²Ç¯g2
+ÂV‘>ú2áT,PÙø|÷ÅB²ç‹mô‚¸ä.]é0/øëÖ,äŸtáÈHÜÅl]¨Ï9ÁO°¡F6íÑÆ!‰Ú Q¿Aµ$BtôRªRGÿ«Z¶y‘jY¨ôE¥ë5 ¢&D
+øYˆÒX"$(ãUÖƒ@öfßz³.äœSk§äB³.îpnáä$„l×£
+6JFj 3 ¡ëEé3ò ·a‰ã×\ø™l6Ùç…ʈµ¨Ž2pŠ ý†6}Ô!dYE®¨!Ÿ%$È!
+ÒáÒF•E>x†ã`2§äÙcŠ±>v^ˆ5ñ¢°  S ¼$çk™!ð2‡tЭ_„•¢™.–L
+l̽½–é¡Á‡øp%Ò’Ÿ† ÉF|†à%g§µã©ËëHÓ\Ç„”Ñ.S4P—à5ÓVæ é°ÇœÔ¡GÄ¢œu¦
+‡^"dBû¬S1Öo{x$÷£ ¸…-¤=ü6¸¿¹
+7^Æë¯ÉßÖÉÁš ¢]s'Ù`£i‚[¿!ÔZ³äpd=E¿ï~‡3„dï) ɣߺ|5O× ŠšLy%ÑŒj“•òPšÏ*‹p¨B±KÉÌÁ™¥dfQÀK6Y¥)…5IW7©þ‘պ͋k¢¸yäÄÉø:d!sѵÌyb¬«>‚tÁ¶ùjc΢Š±Lp`M3±˜ƒ¥<ÙXÀ8ç±£Áñ›u3$J’O~ ^¡ 9T¡.cÔ[—Upбùø‘X"»çÁXp.ƒ­Ád:fDJ–ÎÌÌ°«bb :Œuû‚Ép/UÔBuNÔê½X¾€Vªã,´O°¬®†Í~S´ß+ÃBšWƒ…¾¡¬|Ýæƒ_þìóGÝð‡ßýÁ~zez%|×Ìô-‘©SazM“+xk4rçÌÜdb7qéÛÿòõ£ë_ýâ¯Ý{ÓãÂB.I³M6ÚcŠr<íx„ì‰ê ¨ž¤zÁtêØÌLYUÑ6ÒV³$VŒ7X b×õ20™ŒÐ‚UàèïÙŠB•/^à ¹+&zjC`)âeD8CHÓý#¢ÖJw<¯\ ÑÜ„Ã5·uº’é9>ãÒ cˆRÃo¦4à|·‡(æ „:åë-Öù~6ÒhJS±xÀ-àetìÐE„J“Õ˜V(VJà´$Cð•Òþ­ ±ºkE¡CÔíXã¼ÉCÍY2«–étF…Š‰ZBÌe`¦øŠñvÛ,ć6Ëœ™Í±Ê%³ GâÙë×ßê™s.ˆWÕ!xƒ~?Ö…ªC¼zÚJLVI6îë™Q—:ÜkŒvšçŠ©bÍühž¡ëº˜¤ <C-3NDœ!`{TS½u!\^ð¢ÉÐËÈŸ.×EJ‹´öׇ¯Xñ#ƒÓiΓlqÍDÇ÷#û§ì“6S 䵡zi¯V6P)kÖÈ\pXÐK*µ’ËY%±~ê}Ç N„Ò«ßüÎ>ð—7ZŽ.Ožïè tmq¬¯ÿŽ[:£7¤Wÿ<¾óüW‡»FK[öC]C-m/,ìn<øö·èKOã–ýq %&óU¤;V¬y¢<‡NæPÉÚµ²j$º‡I‡ä®›ÅÙ±»vît…*ð *ä,FfI?»èó¥mT2­‰¤€ Îé $¡¹`IÛ[?»à”B (RÿŠÕRÐ((g•[8^­’A±*b·d‘ÛĵŽ*Ìö,!ÅÍQ^¢¼œ v®S½/hÐŒuÍfË·W/˜¢VSº4 )Ö¦ˆxVŠ*aü»dùbÛèB
+EEÀQ±“móÆH;k6d}êI•ê/wÊ ›k,£‰Ã1Q2ðP¡D äUOÕV%QÒ°i6ᆋ˺átå0Õšôûö8~Ri·b¼køçeyµaQ\Ä7.×(çÌ<.±ëEé˜ ÀX«iÆï‡ ¹Å ù>s ^]…Ó0S„¬oÖ.â5¡~6̳‹€BŠ KGMf&ðUƒ§Ó%°¤'4)|eÜiÉSR€šðÉãȺ;Mz‘XE$bå;Å·Vž±æPrÛš8ßëp uÌIcˆ3%a¡  mÊ« ½·¶é05íè}ü=ûÅOMÿîw¿{ÍækÆ;†F;îí¸çBÛé³íçK×PË™±æ{ƒ-w.ønY½iìRú_üô§GaÞûžo­ï}A[ý?Щy,ä”4;¤Cí5`²uô2aã¤)èV‡Yq’f
+9Í4`aÅ!)[ô>b£”ÌPÏ„ëʼ ì&kªŠüŸ Ęip4*›ËÃÙêÞDZ®
+u›gá¿
+a‡`×2ãJE¢P¤%~‚z·Ì DnÕ´ÕÁÆ<Ö´›ƒûðâQu{x;¢˜í®‰¸1XgT³ T…yq.Á°lª˜U^s‡ë{™S6Ô]&íàNÌô#6e”²2fų´ Ê«ƒ=æ™FúM}¦8‰=èe±ìÇ­ÞÔóEk«™óÈV­[(zVÒm_·Ù6NÔÑ „–dïÀ"I¹T
+à4J¹&rKás[«ñ«§¸Ý”2rœfªAÚ¯•Ÿ TIÖmJdÍ2™G-µ®î¾úc<îOúÓ¿þð…'žøÄýÛoHÏ,OÞ6ÕÝ3>0P.½zsO[ðùg¿r$üßy|ðhŸ*ÌQßvûÙ²ŸšZÝ^Z¾oóõ?öѯáËtëðXžîV~¤Jæ 2KqŽš×K핲VHÔò[ ’;©fºYrööÞÔàÝ{Ý “R" —„Áên“!î÷eü¾«%q*D]ž.tS¢c›lć¾i³Ñ°ÉÆ Ì$Äjðe2|+îé‡ SÖüUeOabÆ*ñžòóôbß*ÔkŽÓÆ–ÕvÉÃQñå™jØ;âò9Ÿo“b!d?nØ<ÉëÍ9:Iu–üª„dzCÉ MÊÊRxRœ÷­œî¬Ó“C:>/x¿ÒW­c3M(Ó¶þJ5„S‚?ËÆ2¢fª±r™sÖ˜·à­q6äîæR-ã(]xèÀ©ÑaŒ¸dC*B~Z#¶é‚m¶Y]ªW„ÙÂÔôu£4|žQ‡ä|;%Œ@÷¹ù\u©àX“2‹4ײ»zù´G«3眺yReC¬†nÀÊO´Ä;D4¤
+¾nf±°u•§w86Ž_ur!¯˜çÅT§-Ö¦/ òê Gát –/&Iþr_ ó’mΙ
+€fÏp-êQ€CR É`£f—Út ä.c©˜õ,ø d„\±@[°§é`ù‹0WorÜE^ÈÝÓ»@ètßZ‡1ndsMš‰ZÉmù)½´I'³DAœTj—I-eÇq-ŽýêW¿zö©g_ÿºwl¯¤Æ†æoëêé9 ½ÚÞ9þú½7Ü
+JspÎ*˜‹lÌ£™ªRfÃr"©'!b ºÙV]HÔê—$Ûhÿ¥–§O«ÉpêU»hb W€1ØHL†´–„¬ðg57›PHO^‡{ËåJu›g‘Ô±kîj¼†…ê^)ºÜ~öÝïþÈ7Ÿÿê·¿øµï|ék_yî+Ï>õ…O=ùÌ;ßüÁ…pò|÷…ï*”¯ä÷¼ž»ys}ÿ}ïþاþñ³Ï|òsŸ%üå3Ÿxîñw},›ÚMà•c¡qEëu±UÒj…ŒC¤Zð¼/å3,˜U à%O‹L¶LT0ó²qN¬®Z hÃp´¯¹ô+~]Ô«²ªÂtN¾ÔD£Ê2pÐÒ¨Pâz£zÎT™68^f±lJw¸¶Ý- e°
+ä¿xÐdY*çÒðý'Ø­±V‘ÒP¯9g4‡ûàË>ûBsU”SŽ{$÷Ø™»W72ç’ ¨bŒ@¢ð_ºÅ“9çZnóç}•“ Ó‚~Á«žÔ¨’É?„¤/^¡ÆZ¹hÀIé-Á¸ÚWw»×y!ááq9®ézýtÚŸ-ðâ͹ßâ˜ÔA¸Ÿk‘ætÄŒªagÉM~Ý ²k¥!sw[Õ­y
+Þ5Á°hP"kk±l‹—†™„TB‰+S¢òĬ١ÈÐY5Ï–› Q6eˆŽBÕ4€%…CŠV›Æ©KÒQ¨èe˽¬¹9SN±H«åH0îÍœn_ŒŒ_¿wç¤qÊhÌ‹š™¹«J~Š• ÑŽ˜Tê‚4™ž\@襗^úÒ3Ï¿ñ o%6''—O£ôêùr ÔÝs&Ù½ þ/?–/$n¾© ÞznÙ£–ýòÌRn}û‘‡Þù‰úÔ¿¾ðÂÿøÇãj–5H]r¼ámerö…œcQ§£]+0ÈN¨1+™æ§Ïž}øîÎD£ä4ü³’íþµ[=8X;1ƒjUÁÌ«JuÈ™Iˆ[äZâµaÀ!l½Æ%ž[õ£`}ºËµ*¦I”Æœ‹°Ã†!ë„Ct ’Î@ÂÉÈW›kVì [H$¤]®K$åLÓŠGy_I·©à¤„'‰Œ;<;e¦¥lÏ»Úf˜Añ ªYWÅ„Cr¾ž9Mf€Ã$ ‹hœÏqJ/xU] á€}Ä3wªåâ!yŽ[ôù’½ö`“!îÕ†\ªA¹‚lBÊ­J•Ò¨Suªy@£zÜ«AªH½­Æô
+`W:•çñ`Os€`!£!Wæe[ãb³~Ž3,‚ p˜kœ&ó‘¢—E+±©G¼L3Ùëµû×F<ó'Z÷‡ø•{= >ÿj5Ôð@=iQÅ*•kta“º˜špvA® ¼ nWò¼y‹)l]î5@Ak ±ÃAwhµ
+‰È„œ›Ç9U†·{jÂE°¦€J#è¡?ïe€š¼š©~1skMð%܆åjEœ`¡ñr“i ¢£ìµê9Oe^3D¤~C˜Vþ Á›è"6"öAfófÌD ¨Ä€¡V¬Ò}&äåÀÕ@mõSœ;daä©™CxÙ*_0ijNOúfâ“{ÑñÝfçœÍ˜rTÍ›™3äT ¤„óKWÓâäò¿ÿýï¿þù/¿ã>œOV†º†Ú;GiÐܶt ÜxÜÛ?uêLaËþÄù±¡±ññ™õÙ…Ô}¼á±Ï|ꙟýìg†÷Ú·…›üÐ/%‚àY›NÖ[)¿Y/¹GÂL{µƒçϽþf.b’œ“0!ôl»é¬wÝÈtc•ª5pUuQýPuˆ Tª’õºUpùÞšï]ƒ@êõ&M¸^2¹­‚ CT¤Ü·]{ˆxMÌQ5˲x¶¢öˆÐ'¿Î yšÍáÂK IH¢wÉÍ¥<ÖL7…4rõºH‚š ¯jÒ®Š6(£V8‘$CÉ´ÒÑ%¬0 ˆFæ¬[zSM·›C-Â\¸4ìž½à\ÄÆYó¦×·ÔÝì0E9ý¼X*áŠqUñºªd!maSvµ…tÒlµÌóÂ2/fgÝËÆgL lâJarkDàgÈQ^Xµ‘²üû!PÙÈP˜—ëò/sKˆB óFåF8d²
+&¤#|Ú€`µêuWåly³¯É3‘vÆ `ž½Š Êqîýì!“Á‰Œ³RêtƒzÞR¹„¬ÚƼ˸Vipy68.OØöèñÚÜ”%›/i$Ëõì:]9e5Á`²¬£rþÕc¡'Œž´x÷MmS½Üx¹ºù±¼†»:F:».Ì:o{ås>Y×-½SÝþñ^a‚\c=ä/ýâDgëô¨÷Â+”jý³X¨UÎyù…S¾¹QnIô%xâ^µ|ô`¥I‡­Œ§$˜ÌRµb3¥½–5NHÃ+ð˼&TËŒƒÉÀkÈRöA/¦GƒfÞT™*”.Í8ùlµîà]ǧ8~‹¨ÌoÐËrÈwئó]Ž \k¦•ühª±jYÔ‚—{ÕSUÄ¡wHÍÌDsFz¢ì.p2í¼[:(¨§ª§Z…ùSÞÅ1÷Üײg>ßr%ØfŠ{uñ’—ñ•1«~¥Á²°ë»Òdœïa#ýà‰Ž¤ ‚—AHÿY´G(­
+ßkAEf³¿/¦y!)î™Â_ ¾ +€=º Ñj6ë×N9Õaµ*¥W,Z¥(¿nÆ¥ œ´Qºù×o”³eÆÈ ªqÓjЩ˜„8ßjŠu8¢^ßj #£’÷;~_Öç_‡(ø–q‰ãWà"ÈgYðÂWVE_²¨yùeÈë.aeÛÑlðœAÇFŸ)ÖÅÆú ¡¶ê—+…“¨†E‡tˆL/Ä^a”†7ÂIîìæb77]øÚdœ3,T>ÉpÈdrfQ©\÷jƒïû@]o¾·:ì’d4˜_×d*¬ágP¢®rŽŠ @¬ö³K€ˆ8®‰ánÊce<†ˆºf9Ô]òB _mn\lgã&CΫ ֫攪T[ ‹³ÓÿS,ôÿç…=²Š—ÅB`2^zO‡wî^ßF ))² :š¬ª¬ŽWf²3dq;ªT¦Ü•qLÄeŽ»(ø2­¦8®fÎ×w6šlˆdÉêñ†ªe4±-ƹÆpKý‚‡[ÇJ¦—P%d¡@Èòâ¢~-и€rCGÔ3à°&Å  âFÉ°Ž Õáóž!ñ—÷2ºsqÞŽè(Æ|šéöêH›;æ $ˆzïU2³·ã/ $ÀÅDoÁËx
+kþÀºG¿H±®(XvÔdÈ@¢Z²U.œ4Ád¤é¿Ñ¬9d#d¾ë\UQèç
+,E´ÉòM¾ä|po)rŸß»ØgŠZ«–ë$gje½&i‹rc×B©õÝoxüX*B
+ù;áKž»çâ­Ms¼äŽ.óÄÝþl›/ÕWƒg–†‰“Ãñ¢ýy2D´b'tÄ‚aÙÇ-B"éñ\ìkÄÖR&¹+×½*˜9ªð¥¨X/‰6º4‘&Í8¸¿GmÔ­˜ÙM'›h5Ä!÷#}¦Ð Ót¯ yrš ³¼~p‹GªVÌZdˆX&(e–ÌÌ
+Üø› ÔNêîvëð‰ÈjSýBkM¨˜Ên±]½!¬+VøèxC6ä›òù7ýÜf‡5Î) ž¹–ÉñÊÒ•&cT9¿2–˜lĦ˚ EŽ™9dH7«µ“­¦d‹1ÕÌŒ€É†É &É)ã,=á :«z๪£šJXHù¿ 8ïè'Xèæ]¼Ó żUw´ùâ]‡/ÕG³c >Q–æ»*Æq»eZÓ%éTÑzf"ÈgüüE>°ÖbNpòA ){› f( vx™x° h„ÓŒZty³f¦À@íl¢“3F±ÃÆXÔÖ…Õ1œVªüƒ4òB›2SgkÔ(µ——‰7ü¯ 5h¦Î
+ÌM?¡É‘âé˜ÈBv­"ê"yõ¼\üˆpL—VÌiYbڠȘ£vyÜ^pÉݲ>¤×#é&Le)±š¶ Øú6¤BAF,Z!CÉl¦ÎL2öuùtþZ7¤i«t~º›ÆYGN7ÑÀŒ·×D;ìц@:Fù˺È:Ô³'ýÙ>ïx¿o¢—Ët{§ÊMâ(#/\À‰  fø¸EBó2çr®A=~„:0º%^ aÒÍ3ú%›nÆ¥…¢›Þʉo²5¯¥N73Ã=¾‰¶Ð\£{ò­ªWAÀ’&Ã]½¢É4h²þ€2ÖOEüS~nƒã6ZíqŽš«®o²Ý\Ád:ǨªÉ-#zVGgEÆ‚&K:åQ—|È#{áš!$S#¾ŸI ‹@ÖØ……ìÿk°ÐàXH]ÆB6êž[´›j‰,tYb^¤AQ:ªOJ°º'ç{Dâ ›lâaÀ“\†ç/øü«-öd€6aCffϾ+úê¯Ü‚,ÛKÔùçßD/Ó+¦ŠL­bÌ^wV»eàeý€É=Äd:R,hð¤ûIô[Í«*¢7Zr±ÓÄ»M(®7^&#¨ûZ7àxÎ騺:禓auÔo˜:ÌŒvÕDÛ±:a[F¸-µÞ¸xÞ75à›èóƒ—M•ËºÈ¥†-q®M^Xå±cŒLž>ÿÇÏz\Kl"ÈNŽÇb@'ç%F_th3D‰µ·T,¼I/‹9¨“ α³\cÝBgM”SFáó‡_“¥Î“s±! ²&&ÈìÖp­,T7Æ.ãÇVðR[m’§‡Ø½zAdçw¹Øü–ÕJ&ӀљŸ˜S‘€ðÛéOŽž]ou'}ò~Õ2jBºIÒ “²½€TâldoÛ—“Ž7Þxã¿øÅŸùò•Ëï\Ÿž8ìjïioß!½:ð·¾÷ õ\»¯V½µ­ïª–}'Ù²Od×ffß¾ùøßýŸO½òÂ˯¿þ:àí}ùq‚¢Iº‰ú­‰G*mSËŽÕTÝDSƒ¾ª;#ÖTO÷Ã3‰{ïj™
+×Í…ÃE!8ÓjN…•Ã.yÜ-éq jO?mÜ•˜è)A•¨gÒaa)gùÕCî4ü»ª»šJ‹Ç1{Þfj@l2lmËÊsá5­(¡8hD†À
+ eÊTIþcBƒ„EýµÔy±3OX;ÎWWà-¾·Sd<UMMÀKªiüŬAZRé|…3¸*NÂx9’Cõ
+€AKúKðrj&üÖ¬|Ü ÈÚ£vª¡:ÐŽfG»ÌÃŽh½„§ƒ‘Ù`¸@¶Ø9<nåy!çö\p{Ö Ÿä¼Ëµìr­Øí:L#"cX†(V ÛT8†PÆUBŸ½jëÔ£‚XOœíÜêkÑ8©uÎNäªnTÝ–ÞUO÷Ô Su‘ÅPhIæšcœ:å­FñY'ž3jy8$ý€Ru²‘ ñŽ_÷ù7ZÉ
+¾ô*Rɧ‰HG·£ª ñGè¨$˜LFL_@ŽfP›»‡Øët™hE^*¥!éÿ/ÆB%,tËv,ÄUÕ‡¥w†éÞ?Û@á"œm1€ÉÜ
+µ<#>vb²<$Ú2™èeðÀ+©”9WÁ˺‰ÉN×Rgv{ùûnpIð2ò>‘ðÓ…/¾µ!Gïë&v?Sö2±* =®”N‰o’“~­bšUL9èA ©†#šXD›:ÌŽu˜‡›½©Ph*Ê#ù`° „ |h.žBYYIg8~Îë[ÁÅsçªÛ½„Ù–<oÌ™Œ«C‘Ñ/Ö+P¿L|¢Wååòy3R=O—Å‘’s•[ÇI-Õg¤Î:ˆ—%·‡e÷ dOpì ®Âl33Ê«y? F€ðüCq’ÀhQ¤}ºñ£lÕO
+ ÈisÍdɸµSå°™N×Ò“œ2Q×2 FTÚ‚¬Êóu¾LP‡È F$3@†uÓ{º¼–J9 M
+€ ôöoS |@7Á'¸î
+±W¾½½£)m$ßL“$’›<n§G|tܮ ‡ZiŒ¬Âaâ ýÒÃoQbdÇkÂ5cÜ>e¢zeÔ¤ŠcÄ–ô1²1±¾V*òfz¯ŒÕ:Ò$܆la¼Ic£ÆTÀº°CËnÁ2OxZf€]a˜%(Të”âá…²¤
+h¾zà°!uØ“
+†gÂá9\Ýj@=…Pp•Ý‹Aó\³!åÑM
+ʨQ™©QNzéxH«a‹Çؘ€&[õû7ûÒ<2®œ‡ô§¥×è0¦Í
+
+8{3ÚR;ÎóyN@!˜ ëÓê±²%š”=Gp+GPª·7ÒeXfž¾~LwkI½YCõ
+üÅy øÀ—>ÿÕo‘ø¹¿õ•oÀ+¼ÿý[½=yCXhÐuÇ€BäZ¬ÄB‚…êvhÒ¦,”öÙ–»ØÏÎÔ2EƒC釙ñFëî¿ «("˜ èÆÜ’žòÆÙ¸1“°ÃÐ}}+™ ;9€“i<oB­^Y?GGÚxØn/c³F}Áªœ°È¢à%Õ‰¿xêTée[OŽå‰O<«¢¦E²z%ì!»8ðœ¨z^OçªAAd [2dàæèV„µ^¼obã]lLt1TdÐËêK^&ê©ä™rÞI(|¤DÊ„xÀ¼ó¼2ÞlHÔ&ëê–w “%µ<øægÎeÁº?.ÈLײEä1®e’õ¶iÔÝC“]8ä[sIû Š5†¸Q“)‘ìÜ U'z:fï¾e¾ŸôUw©eÇ”ÒF-ÎK{v¡ýÚ ‡"ýøÃw¿ùí÷½÷ckso‰Íô´œ?ÒÜ¿mƒ¾óøííc‰þàz3×àÍ£[”ÔwvœêïOÏOLç.?ñؾüÌWþóŸüÞ—§÷åg_ÖWÌQK¥b!©G.mÕI¥ÚηâçÖEæ{oY˜ù`vìPxZ”¨æx<èAŽ Û*g):ím=ž‘#š.6[GCÊa¨h*×—j¨ž7ïïPrj¶ï+©(‹vìÏ@L®¥º!,W“ò ͨ>H
+Ny”£c‚v´‰iu&iwÕåZncRaÕA–ÖP)'1’74\´ãTiFT<€º¸RŒ ÊX‘)¬R…>õCd’ ;…cRŒÒæÚM#bÅJîÜqÖÍûT©RÅŠXÈ!éWaB)ãÃIHCI  z]â07R_¿²]:ªX”>« õKÁàDqL‘œã z]
+X
+u–¼Ó¶êõ±
+<Á®|p¡…˜Œ%+Ûå9ØëÃ×·šdÌíkû1™*)›Œœ†dÈ7:ðȲ×)ãi…f¤…)c¡ø[ÆBïþÛ¾öýWÿüç?¿±ýzí»?üð‡?¹™\ùm¸þ‹<T¼ò쿾ãŸÿ×ý×;žüÈÌ­‰ÃBÎ;†J}¡[wõ…áÀb}ÝJCÃr(´ìã<žb…Éàë ¿eÉoÃsUw,¢ÉBó­–$OãÁ–·Æ¶º+7d2pÉÀUœ¬#°çb²óà/âÖV;}°³ÁëÒ-lòˆkTÀ­¨§c½Ž™ÐÃfiŠëÕ*æF½,J QªŒî
+ËNIŸ¢¢ Ð%Œ¡ÖP×ëG¸1$+é\Q’ņ†"RúÔ- ªŸ/úýsdžŸ+P´ê°oÍs‡j§=žEb²")7æ:L ¿2..Ñ—}D²}þ/šLV±ºBSÑÜö=Ñ{ríÔÉòÓ4!—Ré1ƒ¤ ?peü#‘¸Èíe%Îo~þëo=•ˆó?|é•ä“› e’3ýí}MC•Ò«·t4&¤W®7ß®9×2|üø––ý¹-ñÖ©åÉ©µÂï|ê£Ï~ñÙ_ýêWûuRöá¿ý˜
+‡†ºLî—ðÉ!…ì¶i§ê² ¡L88Û{ÇJ.ó¾±áÍ£öø¡ši@~nÁéÚôúŠnϺË}( EÎd^˜ëdã³Uõ’nÏÖt%¤E±Êû‹7dLº´*%R•ë]âê@ìÿHzjå#f:¢‡=º©C†±vsB²
+j_
+„悾l3“
+©£újŒoð:ôÕ½×è[¸b§HC –{D$P'
+ Écl
+êR ^8dÔ-FTƒzõ\¹5T-Ÿ…à粘^‘Ái"Ýx«#çÃU*v„MH”B(Âñ„¡Hpç;©N6áu,±œ®KÏ*ÇÍy¼+ð5g‘‘“1qHpâx’®¤„e½öÈЮq”hù8L4™È„SÑÒE¼J’)+·Òc嘬Á0qÔ’"Äà M{õ…–þ*,ôÔß|øÕïýhÏ'ÿ{/~÷ÉÇ?´~ÓЫRÙuûBÚñoÿó?ÿóñûß3uSü†g§é#×:#¨<u„ÌsüœÛµÜɦ:L)Ÿ¥Ƚéõ®øü n°]@$ÔCgÛÙ¤Nè©D%­ÍuæOvÜ !ûºŽ—ÑTÚL¤KÒ~£<m£GƒÊa·nº‘ë0'  âCŸÿB <ôfpÑŒbd€^ÆôW_RoÁÅbuÇ
+Ÿv&á³á<Á$óm¦±-õ4‘ˆU¿ÄêÊX¹5$P—Ù¥VYÔ¨‡ÿËé¦Ú\‰H}>z[ØÎü„àÖœ/ä<<k>\‹¥¢Ë½&ƒ¨.Vóø—ý„ÐËx!ÛbHz”I5îž –!Í›7™‰ê)×)ÕDÈLE¥üUwÞrdâÜé·Rž“ã ~9ç¥y‘\š  §êi%ÎÅä}o=‰üá
+œIµÕ“4=g¡ÓAz˜S§L†E;³pÓÅz=',#Ç—m¶Œû˜lD9¨ULC-@ÖßÊ£oÍÅ®z™üÎìð²«úÈtUá |n~vâ`!§s ª6±Aä·-w¼1+ᱚ~Š„Cò«^¦Q΂ëYÙùöšD(8]WW)€x™ìúgÃΙzköHÍä1ÜP›1±ËµÆåf¨÷qE$Ñ‚ï”+,ûü}(´ØÁ$‚tTA«ÅÀ­_ÍFªÞ>ÁµW…8T]2x¥ØÈb©X³#v÷Í‹-ÖX­l„•è¨^‹¤S'=ª–5(dØð—H¼"³.¹y…ÄuwÝоï
+„q6 “Møyp14³lÖÏ|{СÉÙi¯{L†ÓAÜFY^ÐÇ“ù Gj3Öqb²Zª»¼”ДØeê;eÝJÒÐ&œEg˽ÖFC_ßM³GýcœzI‡T1cÕ Zv«NrHC¦@Ëm"=æ“IœAÕÑ}ÉeéÕG|ÏÚôìÀù‰ãíÝmmwWŽ i|lã@zõàú+¯–éh*¯• ïJ%²ë¹ù/þÍß}ìÓßñ¥}\+óÊ+¤žJ8D¤Ê¼jéµ´ à†êuÊúÔôl@ì¾”ê¿p›:Ê$¼¾y¯ÅϯùüPº.𸗡r{×!P·×Œ8˜y^sH´È‘‚Ò•+`jjÈJž¡&…G$*§Ë§iåÞ‚‚wHú«ó.åDˆu^v®•ÁsÀß<ô ÎÌãh{“ãs#º˜¸‘Y¢PÌ;»!9ÙAË­¡håb—®brÕB ¨ä3åÖ§L0Ì2À
+~ÞíYñú
+¿5|°~~µ¾~4]ïP ‚«æÎÙCJ<e³êȧãjÔ“E“™•S=¶ÄñŸ 8P|×"¸¹×w‡Àè¹
+’1!§[Ü/ D¤WŸ{â±®¡ôêÌííg[Z·I¯¶´žYY?Hè×[¹.Œoœ¸éTI¼õž¡{
+ð¤T0üçáÚL€°WÆB)‚…º)ÁBµzòñüó÷~týÇþ‡/½òè•÷líym×àÐk2ùCË~噯îÆB÷¯?9Ü:|ƒ}¡Û‡÷ÀBØâ%‘:å€E5 &³I‡ÜUÝÈÏSÕ­ªžg¦†]‚ç™ãrNšÌÇ9Nÿ2•
+g(DZ-5ã;(D¶”@ýy»}£±vŠ3ÎBmPÇ•JÀQ99&0mßoÚy¡µ‹o_µ]AT/+V
+¾£',j*IÕî!ÜÝ$0ÞS*€Ÿh¯êáeçzÏ®Ÿ;u€ur=Õý5Òvƒ´‚vµŒ'È-+}!•ztÇO¾ó“·ž, é¼þú민ðÒ>ðñµùûQzµ­·±i›ôjgçñÛZSIüàÚ¯+yKêÄñ­îÐÉösâ–}abjiþò“O|è«ŸÿÚ/~ñ‹ýÒ²ÿö¿­—8
+ZUÞ¢Ÿë¨MÂ…úºŠQŸM¢¯ å*Ê ÷…†úÅúú@D{‡ñð©4±áïsÏcbvvÁ£ ª†!ñã+ÑÏÏ•?R“4aUNš˜b‡!áñ,ú ÂÃ2´ÑE!€çeWM&¬âZ`ºÝÐw„ÓótÌ*OÎ=L&’r³ä—%Jèx? é0@ÑM(–ö4™Ã~¡‘Iã†vB§šmÚÞÏÈŠ2ób¡‹¶ÀBÿòýýÅÇþüãG?ú™ûîý‚Ö^ù
+?+®¬>ôÕg¾¶'êkº±¾Ð°ëö-,ä¼m'Šˆ«LPépŸý|…ÉReŠe–ºŒxR&î”ñy,4pþ¤ .׋·(òÈ°3ÍöÑFf”׎¡ö dXBƒ,ß58¯(H$‡7@Óó€E!¥‚ût0qŸu *‹Ýö‚`Nµ±+Í„Žže¤£âTR55~žÆ_ vz”µÔù]”ƒ£n Ê×(3&ÃR›%)„çëë6+(›ÖˆsmÝ[m¢ºE¨8Ê bÛaÒý¡ÐŠŸÃ16žŸó{òÇØ8ü¾]žWÆàÙà*Ž[ƒÉŒHÛ[Þ`e£ð±›Øe(Ù :óx—10
+8ñÎñxLV
+Œ—ÐéP°xŽÌ´:SÌHX€ÒÃ&ÇNQ`™Úíe`2§¤ß!%ŽÏöÞwØcô‹àhîêA‹¤]#íÐKCPÊa\Œáâì´JâøàO¿õ4ñGrýè•ïìcŸ¾¸ôH6•ìêojî꺹rq¬½1~°ApíãÓñ¦ø‰[[ögZº·¶ì'&Öx×;ŸþÆŸÛÇ-û'®¼Oܲ™(ÊCwŒÔ«”6©¥]fÉM  éCÑz[`t:yiìÄl»9Îs9·g lÃ?¸sÄóúò¤.Ra
+…qST“¬¯ƒXhrŒ1ŒÕ0 ~ÍX@ðRÇ|Ú´]Ÿc ËffÑoÈÕ1†Ñ&r70ã;ã`‰nýBrRX%BÙ鶴Vn ‰§ =mÑçl6àÀ4çöBÊ»Èñ€…|þå²É|þ¢Ÿ+ »~uILÌ49GÛÁd†L@ +‡ Ï•C`²!¯«T×ÕÑ9§fÊbZj6“é 9Ž•·k+“⌳,‹“]8/éi wc¡ÅÇBë6ÀBïõ•¾ÉŠãûßþî#½ûRÓ™ò+¼"W>¼qeO,tïÊ#çÜØìtÔyBäZ<F9w‘…E®?Ci‚®’®
+Jƒ:cbZ˜”Ë…£æÿŠM¶êçÖ=þÕ¤ÚEðH»·y5ÃBfÌ´8RlÜgÈ´É=Ä+£az˜O«cÍ—M¦QÍsê[ð[ŠèbþYø‰ðÊ¢½|¶ÀÃ6cÑÈ/C“õ–¦åã× O½¹*c'þ¡ K§Oc»åÛéèwÓ
+>ß‚Ç»Š
+Ô„¡·Í¡,A”,Š5ªŒR>Sæj¾F¹z²øü#j|ì˜eÚ³>UPéjPV)JŠ·’p¥´ƒ÷
+Þ ßË Å:÷”“4ʨr
+°|y·Âyp®[¹ÅÛýsuuj;Æ¡v
+ö²zB† ,—ëÑËx¡1LÚäI‘³ºÌè@Ú¯Œ×²Ë~Û6rýó
+,ôØ£ïÙ=/ô¯¯ýøÁ O^îê]¸ux3ß+/¾¼spè;88ô¶†»¿£Ð>þÀ{¾óÜ »±ÐæÂCgn Åœ€…šJXH» UñZ©>‘OžL0Ù»ªÛ@gíÚ™fR¼ŸßR%óñèe"J¥%B¶ 0ÛÈ®XŒKG ÉÖšQ<; dùÐ,.!òuu ¿6L:e**%öNØ“öfLCçÌø&Ê£ð³¢ÉÚÉ4Ô2^Í„Z9g”^=Æ*Ë€›o:-BšꜸNš?§mdÄ®Ì^ô%ò3°Ï—bßõ¼H]®¤Òd±.®£’,q.(»´Tnx“:Ü:ô l‹rúÌaO:Z¬ß×瀊£.‚J@ð±À{6±+=xÙ€Øù¹Úa¥)›tÐ$M2%¢kyiÀÎÁûY¾á +öjd!×=cÓåZ™*ãpEÒçÙôr‹Ïx„Yd˜ß²ÆeBš]èdbfÑË‘•¬‰d3É‹£ƒ›Í¶$'9UE%õUw—€d_)Dû§¾ÖHœ/}ýŸöåhìõ×_ÿÞ‹/?ý‘O\(<8‘œé?Úwdû}Glj“-ñƒ}pý]«ÏM?~‡‡îj?ÛßÛßß?¾_.ÜO¶ìQË~¿¶ì¿ùÅok®‰­!BFSi++m$¤CjÏBÝz³/ž(Ö©Ù7 äÄ)¯èq.ŠRìFtù%§zʯ1kQQu¥Ù•zf¢Ó˜àœ’^g9ªÝ<äh§l°Báqkc]/KÔx
+ δÍsó\#3*ÖVŒ®È(³¢}¹¥Ã’ú±<äŒ{¯¨wÝÑù9X T/Bê#e54ø¹nꤷê /;/(úê¡*Ò&úTD—lÐÅk†ÔÑ:TÅeŒSÅ9U2¨I50!>ȧ.rápðRw Wz)WóGÌS‘DW ©bå
+œ ÷ÝŠ;“y!˱
+,$ž‘ª¸”D ‰T–5T[ÒSi2†›{.I¯…ôØE˜·82˜çX脼XMþÞ¤ô
+8 ½æ¹@ž°1gymÆ-魔ǴE£Èy´]%/ÃrÔÞòbvž­rV\|«(:ΓU‚tùËD ë¨mß¿E o&­ž˜¤42­ÂºãŒêöTuû¥Ý\õ
+x(VY®J$n‰Ä©”8žºÿ}o=¼ñÆ(½úƒ}âïÿñÞå‡ó£™›šš+7軹õHüÛ_ýöA‚>¸þ'¯ï>ûÝãñ[o=)¡ӭ¸e?8˜Y™˜\_¼òÔSOóËÏýæ7¿Ù¯9êw¾í½JÉÕÖPyË^/᪥-zi›EÒIoÕ¹»š23ã^
+¦üd]÷F}Å -ÇgM¤ bÕæ"*Üa©W
+Â++hF<’îJédñÕÈ’à›<›uX×ÁdGj2ð¯¶NsØxhí*ÑËÎÑ{”äD»ß%é1Î"2ÃßC¦ìbdî®·jë°Lô²C¼Ì[u’“/Ó&Zcõü8z;àÇÝ+2ÕÕ‘Eð2@ÝàŒ@G„!8Ë kõõkà\wûf{}ð… ¬|9;‘xc EÒÚÂB•³yJyÖ]uþrðCð·Ä+Ë $‚W˜×ȧÑú6£˜ôÓ |BôYÒ> ß
+z^IFŽµò)WU·…žE…Q†#.¡zªj.ÕÝ‚ì¥&C¢Å•‚Èìòløù"TšB`&Àg|é —B‡ó¡0aoÃ{3º\W·^_W"ü¯+FÂ÷‰$'¾ñcü2|Á >ß<
+‘3KðQHÎ?‡òhN>)â–=o•¥=
+(g¨Fª¡Ô’ŠóBZ²{ì‘÷üè¥Xè•ç¿³1{a³´;oÝñ¥‰ÙÏ|üóož¼°Ð…¹·Ÿ ÞX_(å,tˆ`!÷‰íX(X¬‘ÆIGEÜ%«U`„œh•EË5D—|ŒŒ£g=ÚqøQÌ…ÐCqRX€Öâ:<K0vD5lVeD{iÔ
+‰Ø ‡Ì™C츑Y6Ah*y=C¿ø¤Zȉ—Mú³.ÏÒÓ¢ ª÷’®b!À6n:™¢<vXy›Œ+F=d¡ˆrЯŒCõʨ²åØBöËP¿
+aé8©©¡Zꌃº‡«ºSž TDtɶšxX˜às\pVfš<#Çjb€Ð|LÖB!ÀÖ°Å03ÙÅÆ;ÌÉ:ïd ; ¸¨¡a±Œ¶¨Þ‚÷ôÍö{'ï°äç/ ÁŽq‘ÅÆxѨ›ZÂÌ3_YM_ç°$ªrWŒ ]­v’>UIMµ–êvÊ:ÂÇî¤GE6ÜA¦Î)p#æª:Ï+cqžÙ_à2Ç~É/8n®±v2„tŽ+6Ý Äùòºø…K5Ÿ³C›s˜4#=e'Ç:e,$ž‘9%ýNÕ~qo“%Ù(¼”N”y§ß"Z³v>zåÝ?üöN,ô¯¿°‘[¿päT‰\šž:1|!»þòóß~óXhcþòÙàõ…RŽã„_ÈÒ¹ ªnÉy]i •:£øŒ1 5ôd¹qaÆ‘þA€CnI· ŒØi§sÕå¾ÈNcŸÿ"C¨®+2p§*>ZâP½h2ø‡¸?®AfBMÏÖPCtE+϶Uqôù•1øž=½ÌȬ èeðú^:i¡'ôªY•º ¢¢
+ƒ~‰×¤ÊÂe/3K£×÷2¬¶{™B1_¹PO¨ÆÈ@ãŒKƒIVýCÏ”¥ÙÀ^ÕXq¤ÁˆPŒ40ãNç:êÊŠ"ï4šŒŸ­3ç èÀ)JÝ|@MÑ šm2 %û/ÜÕš hGá÷IϪîd¤ÍZiX. äÜÙªrxdá}‰ùÿñÿñ›ßüæ_zö‰G?¸š-ôMÝÕ~¶µíT%jk;µ˜Þ<HÇ×ÿÛëí ÞÑuvç–}bfm¶påÞwüýÇ?óý—¾÷úë¯ïòÈê$Uj–©¥Þji£AÒ ‘ÝBSg5TŸS>ÐlMŽ_œL^>Ñ<-|¨/¡T«w©Î6ÓN42X(‚¶õ‚؈®V”J,*µê9
+.l±ñFf¬VDDì„kJÄy~Š¦:ƒ"T¿ê•#ûÍi;uÆ/üÓÓ¨lqÅB¡/· güT›=ÙfLt“AM2HstÜF3ØŠ¡ózÚ«LÔ+lºiq~¦ž™ì0¥|¾y!4Ãñ+ØÏ/qûwñË‹‡—·ÿ½>?J§yŒó
+&³é²õ[¨ ¢º‚.ˆPV§Î”9ø„«©q¶„]Ë4
+°]˜L(°bòFQëjÅéÚ‚EQ«4½l·!¼Bðå4a‡tS´AŽ rp^ìnJ¾¼·$˜ÙÜ,·ØHŒê à‡£Z–ø^¤ãbë²E›!õkFÔé´¹ó€1j³m"'nÛçÛ:´Kû¼{âI ™& EÈÅ’ø¡]º¬)f–ÅŽêBŽ)"±r›lÑv|’|S…ã©Ø¡ªD|ÂqZ5ãËR³¬S-•)òÄ0Ï¡Nœ"§EõO´K»W`‰Š
+Fc‘ÓÆiMìèQr©}z¡I ÑPÛºx 1Q‰…0ѵÉ>qLÕ„h+À=£˜p, [õÕ³ðûÕ×FYçD“ö‹ Æi¬P†HJÅ<‘›*‹~Û䉀`éªDâ¶\l|‡¯ŠÂË`ìQ¬NÖc”ú Òƒc奓X?ûϾñMþ¿þë¿Àþñ[ßùØG?½»zß|b!Øhk TjÐß4Ð?‘^=¹þ¨.¸!£‘[nÙŸ²?ß#jÙã)ûü›zðC÷ä¾–ý±<Ýß}ò)â vTž”aÒ!‡RÖQ#ë¶HôĨ[0†oé\XÌ|(1±ãñ-2ÌŽ˜±ì†_†°ÛgJØLù&=âÀ/ïQFYÒ*+ïKšS¢W0
+‘H§Ztêç:ÌiQßf6îY1ËC\u¹
+}¦x£iÕT] 4±
+“% ð•MF–´?Ä.\ˆð ¯GÓf?µ6™
+ W`a5Z4Wp87Û*c8\ÚÇB֭׉…ö{Þù–÷|÷kß<tùɯl/ßä¾ùÐ│ÔÎœOîd·¿s>]§.”»kú†Rÿz°Ðau UUb!N•«HËœ¬%Fí²
+vìSjUή_hµÌÙìWQ-ˆÞa¹ÍkdÅ܆[†¤ã´1Rg,Ö×ähd²ýÂc,b•ÊlZ†k&K"å’K!ðè2§!|;œ[¢zÍl±" u8w({ž&çêX“d´†ëˆI¸ñLDÐ!¸õSW†å‹‡N²üþuÞqUÏÖÉ£â½×@\èäXôù
+H"†±9a‰á|A9þBéVG&“ 1n•MRÕi
+ \]±È|‚åð'Ö( •ªTí-£Éر«‰¸Q5#h‘¶c•*£"Òh:›¸\]*:é•sí$@ÌZ³\!Œ²¿ Ô2ü
+šT2c*§ê«‰”ñ¼†Jõ7>Ž¹Œe!›:eÖ
+‹|à,¸<2éPNÚ Yˆø4ƒÔ“~•ç·Ê5RÈx÷r™lTF1?èe—J`/Ý(›Äóìp§EÉšU³$á;D¯ä³dKct»‡JCˆÂ‹_…±š×¬—û±—D Úë&eô‚¶é„xB'zYƒ,t=e´±’Ébfb ô(ÓàÀ§GÊáíÌÉ0e‡xR,'æàq-šÂ@3›
+¹Ë7-ÏÅï¼Q˜ât xûuÄ%³ä&ƒ¬»Z&(äŒTzxpL.µÝÌŽKZØ$~üã'?ÿô[ï|hsf~âB| ¼·ï\EEèæζèGÞÿ‘“°{rýq^ŸxÏã7·ËSöcHË>Îng2wmÜÿ裟øÆ—_8Æ)û;ü!ùAF™ŒÂâ­tµ¬¥Z> #†ÜŠ n2#0™ðàÖrîã¡¡+‚°´ûè;]®«¨:Ä,wÖM"g!ãƒ=D¯Ë‰¯°Q—É1‰Ç‚‚˜µÉMꩆšeʵÖ!RVD¢ËìVn&œ{™c²§ S´zÒ‚‰t$¨á"D»bÂ^aLKíæÙ¦¦»}“¢W;³ë÷­–vÑÕVWŠ×†Ä]QC$͈˜z¼œA7R–‚l±F›õ£†uÌ°ß\ÚNNÐâë!Ð/;œ›¨HÅî6WlÔ¨“_¥¨eÞ¸`0 þ7<wSø½üÿ¨‰¨D[W/ —E:HYR}äp¡t¶XÖJa……Pƒ, a®Q2Ÿ®³¡è#Â!•"«ÓæúYÌ»¸ˆEÇöb!4©„Š9Ì’»!ßJNIÔ”nÖ΋tÙðªDq¨²Œ8˜ 
+¥‰›k
+ ¦µÎºittAŠÛª|dVȃÉüdÚ¥ ™‰ÉSDËQ,”S¼n,ôZáá·<üí¯ÁBO|i+³öªïºõ³+›˜×9$UväŒìÎËÌågu¦×þz¦­7…P]¨áh]È} !“5Áâ€̲x¢ïž nR"©#â`t­b¡J—§«SýÆd4³u Ñ–G¾†ì)rÚL¢gR³(Ò/ؤc*l2p1ñ4nŒ&Ù$§‰˜j
+ãò©úy|Ú[`ØíJÝ@À®^gÆ[3íRN÷ÛfÐ
+ßX%£5ò4ª†i§ÝÚˆ¡f½\‚ nQ‘[ )YP눚•Ýñû7K^vÇSDj¶,– Ywj“x†ô÷{Y­,fÂâ}¨2†É…J”§!ÝõÚŠ ¥ºPÉËkˆ(˜Ì"G´áàY"+5x¤r°¡¡Ï\“4Õ¬
+€¼†&ÔÌÒªs¼:ÌëbµäZ­i M7?mŒù-‹ÖR'0N§òN×–Ør#¸7üþu6ÄöšÎu‘ £2Ö`Y\õ÷Ë!)²è5HÆ+ŠŽÒ‘ˆ;(EÃËX(Z™qk‰DM54|žÉu-š9Ÿ&è¯IŸ²MÓì
+‡tåö(ª"¶RW±
+¤<ŸG(Ÿa¹=¦z¦VžB°‡ˆÉ‰9DvM$àÄ^­Z/c«’&܆¹Oí3'ÀmíMÛ¢‹¡~!6‡¥ôP²ÏW»’ü¾+àά€¿¼xBAÔû{-.&úfd ^ËAӇس1É6b¯8ÖD&“`+v‘Ä„
+YóÚ@%$#bR
+úJÈD è1 f46i
+$çÈu™Ó°‰õ‘1@^r¦•LB–Úޔ´Ïy†½z´5PK/ykR6EÒLQV ³é"MvTåÖÎ5V/b±½ÄøGs½¦¤£q‹åaCìðôûŠ¼{¡Å6ÝW¨ ˜Ã=€|ÌᆰŸšæ…yÁ›õxV½ˆðíš
+]&Y²²MHE¤mÒq•:ߤICz™,·ŠWÖCK,)‰‹,Ê\Òo…„×@DíŠI¯>á¥gYöÊQ8„;F
+øì#ë·Ïõ›€-Ád-`2ÃlKMut8g‘(ü+²ß\„užß*¡MŽž÷UÇ›”Q= &Óñëa!ê…ž­ªøž¿ýüa,ô…Ï>³>³üÁÿ«üíã$•˜\¸·øÖýèGGïùßþö·W²W©ÁO¿,´ØtäêúXÈ#eÌŠ©j"&Û—¨‹GMqÖ‚â,B­FY²Ü£?1!—"(è“>z–fö®g24!HshèÒkËô›bdà“Ÿœ s͆é~c¤Õ>ÅòYŒá÷oW|o¯àCH7ò^WÆ«O;¨=¬õ›ªpe°™R•·kSMÕó¬¥%vÐÁ²™
+Ýæ)Dv!dËDÍþÞé´&ê"7Ô†úÁ¿Láê&#í®¸ dxOÖã+øJþUò²§ÈpENÈ#¨Æà+…^êþûEuW|³Á-™‘˜qX5)Åÿ6ãhM¢³@ôÚê\ƒzºVP0€1OÛëú&Ó⌠1OÊ&ÁËj+ÿj‰I§"è×'½ÌL‹Ow¦Ã{ÞE”50[§Ètƒ´Û 묖¹Hƒž[4ËDÓ¤ÔöíŽAzRcH¿ûo}èCŸÜοy::è>,½ÚÕ}ñBoò$¼ž\Z×Ô¹ôÍ7߶?e?p)8:¤–§çÖ–ï|àí~ñ‰§ÿíßþí׿þõ±$ð dE¶RVèÀSö&é) Ö²¯&ÆYé}‘ÅÔ½¹ù÷´û34sÒÀ†¶ƒxø,‚=îE–¿Íy™)e·¸@Æ
+Ÿí­°USVù¤Ú#ul±ÿ÷…ı\§6鬚Ezë°W×E®Ö´8`Œ onÝçÝÁu¡-–+ú˜™{ÄËÍð¼Œ"ËîúQóçÝ×£ º¶¼ž½fÿÃ\EBÜ6„$«äÎCÞÇpWX¾ˆ`ª¨äÚjç
+¯ #8„T×=»È¢Àš²Xò~‰ã×D: t^̯z¹Ù.GÌÍÍòÂxd‰x=w¾º—ù}W|>±÷þ
+E_7‚ºrs[ðRni ¢ÑŒ<x¢ÓÄD,¤T,‰½vM² Qš°Üz÷JË!®œ²7(fxm¨^Ÿ/skB騅R–”8*—‚ˆ]Ð *b1ªV¢ÆiÑgÅÃ5q$Ä„'[ýÕáèð
+± IiROù´‚&¤Se5(æÎëJb¸¸jt±Ž§d#n]¤¯6âuÏ1GŽÌŽ.ˆhb ðÏo   UÁ³Æ»WÝîùnkü”!éÖEù¨xú€»_®ñ´\ Ù‹ÿëÂB/*µÙÄBü–Dèt$Ðéžíïéiº£ièÕÿü{rÅ\ÿÐäÙH¸o2Õ9íšH´†:Æ`M´Ú†©‹]ãzí¯g©á4ÆBõ}„ë¢zÉ(«‹ÛeãR"€·ÚÆjˆ°‘9Œ7cvd²Q‹"aS%Bóš°›
+yŸ"[žG
+u5ÀÃö«ägI©¯Jv€ØvŸÞVêHÞøÖýÛßþö7¿ùÍÿõŸyü‰7ï<°:=<îêö÷^mo =þ‘'OëÉõ§x=óéçF;®• cñÖ`p~svvGœ²
+MÙéP.´©’
+åÆ?@•,_è©ÕV ¹n2æ£ÒnO OäežeŽ_ƧähqžlWc’¬=w¹ŠV­êÛÇn\ïuĉ øÓˆBÚHÊ:õ2oB¬TêÉ(¢X„L“UH´ªåXvì—_~ùg?ûÙWžúÊÛïdkq%˜¿¹øÐ}GçåÅ{O‚éÉõ§~=t×Ãå)û[ÎÞ6qº4e¿}ÓÎûØãßþÚ?¼ôÒK¿Wtà5^œ¦Su¤¢«sz)_%m©–ß Aê“h"Fœ»xîîK]³íµ6”ÎæGɆ)Å8¥šd4V¡Ô1Z9ÁÈ!’ãÁ¨1ˆÅ8á½$Έ ¤-/õ½Þ¥ fêQÏà†ã–TØç'kQ¼†g¹d,©.ÂÏ«¯£‚³ f‰i‹"F² —ÅSù÷” iv‹aò.W¶hŸ%ÛF¦OgÚÉT9ÕV?Msð_{œí7†a³Õ¨–ì’‘Wy©Õ˜™¤I3]_³l6½döüc¤»>Áó°ëŠÔˆ{¸w"_¦`…%oýâ
+ݵˆù0
+~QðÌ÷6E}5I^¶*PÏ3¤QXMrÕ*RnM¨•L´0Sï²Ï·Ž)z™xÆó ¦H³a¦Ö¸n2¬»ÈlW]ÀBø•,cŸÚMfwì “9®"Ïb
+m–Ùc´œª3­›È"U=…8ÆÕÓJeÞ,‹•í:Ž`¡1)³ pÈ–÷Ú»Ž ™|]cØíÞíÙíoîi¾C\w£uáÍ­÷¹Ï¾çøžÖ–¥+ êH¬¸.¤­ÄB‚ÔÉèâ}¦|V€p°É²pGQÔÅ6+ÆV€¯âW\‡D鸡H¤QÙcE’èQ@Èœ{÷,ò¨ƒ+Ñc wÕÅ[È„·fJ¨N½èª)¾:ÉÔ̆©fcº§6ÞÛkvÎÀ³‹|c¡×œl&gê
+ÇgË¡ õÄÂ*,ñê÷y÷= °8Z‰ïõ(ê±FýdZ¨N
+ºˆOnÑ…:̱Sô”×—ózîô‚—ù×=Þ'ä9aÁOÍôÔÆÃ,§4©ŠX½"Ö¨Jñºx¿L–s1hÀÇ•ÉŽìvD &"X#ÁQtÎn/RÔ2+ä<ž¥T`w*´{J´w
+Þä¹%ñÊ»ý~HHWðPóŠÏWðûŠø‡nOV2]¶øis¸L²5Ó‚:ìP„á5[P–Öq Ž#ðZàaµî´ÖfN“‘6ë'ä.Dc™%— éÃBT­ˆ&hî†áÄg3¦”"˜„ĹšˆZ•±~sTð’)ÝÃçÝ…·&cX€”Û ·‰ÖÎ5nI,dFÑëç.B\T¶®vÔÎôbŒ1k$7xmœÖDUê<±£„p ±
+WÁØrŒàäæôãŸþô—¿ø¥¯=ûüןýª¸¾öìW¿úôóÏ?ýÜ—ŸúÊc}v7ÏóÓq=ãv}Ç„º{| í×…Z ÖàpØ¥£Œ6Þ‰ááÃ0Æ|ĺà ÚÃæXƆ£6Ê­ÂMH¨}ƒÁª¬ÍTÊ¡‰bpR?]öûóGÑïÆ&»ê÷!Ò't`Êm±ÜÒJf®Ð&C= ˜ Õ®gãF»y¶—ŒÙyÒPäu¨j¤Æ&«<QU) :°Ž"rJGà×ÚœI¯¯àvY÷R{ãcX¤Ô1Üïz/‹Š}Ôå~@DMŠ°ÑXl±Î8\[ðzX{¡³vºÏœj®[(—ƒ
+<¹¿‚åÌîñù6¼¾Ež›ë¶Æúk#§È)OuÈ2Òá:"¨%’UhH"}CÙ8@©óŒÓ¹
+¯gÀ;e›fùÃ|Í¡¾–'IQZÄf'oÉ/Í>tSk†WŽ×¢sÀH½¬×$õ«e§®;A¯–Ú/µÆßø¶üÃþ€ÐðƒÏ}æÉ·\}gq&<ëíïë»å€âX[ð3~á$hž\®×sÏ}s¬süДýääüÖÜÜÕµûß÷þ½ðìóÿñÿq\p¨0¾¥CÕ¡}w–J]"42H¤V6@Ioëv$<žµóÌRrlgmùƒ¹èÝgùq&]po¼J‰Aea€ˆpò%žõ¬w™Ó2c&‹Ný ¯ «U¹2U>‘Gã*’q6ìæf½^@A+vI¡Ö|Ú Rµ¬Ç}4A–ª‡Ú—±¨GýÒ)ÜV’É&â’MÈ ç̱ì2 ²n2^kÞ¬3oö¢‚eÙj݆ÄÜíYmó\qÍNPÓmˆ°%ÓÝ¿Áî5ĻȄØÝÓs s‚
+ª!—~¶£1épî8\â9Ë’X[¨Ì¬aAzËrë¿æ«ŠˆHRì'¸&TÅÝü|3ÄVÏ=Géï|¾+îW6Ù5Å aÙæØE™2dÓ.4g2æLÆ¢«*ÍhÂ*U¾‡à_ ½ËÑ},°ä{2ù•ÀâSO<ó*S/>÷{·|{渰ÐUË>ê%¨ó±[â¬%F¬ò µ™¬¶d²¶¦”¢?»Š1äŠÈOUi/ê,ZÆ&+Z¤/š¬žtHG½ÕqŸ8]îê?8“¾Æ0»¯j²=¤¸ÏUÎ
+Í®iðx_~Í„
+yY¼æÚ¬âa/3È\°RmRJ$-Ä£Ž€_Ó®‚‹*¶7¤YSVd´Œ¯eÉfC@Ëã]9Ãô x™Ï³êægû""u’ÉVr
+>Õ>2ÒÛå…y·àõÜuªè.Ÿ¯èvgz¢|õŒ»*ʪÃàe.é(€s:O„­£’S¼LO„­ò]?ßN¦Ì†"­‰;«g[›¦®m@þ¸ã û{ÍË<‹gÛç–Òo¾Ø¿DCÊ ‰¨ˆÉzi¯YÚ\#E}•GJêòëŽ% ô“ŸüäÙ'Ÿ}ۛ߷=¿¸œ¾©w¤§÷öƒƒcCßûðI¸<¹þ¼¯?ü‘KÝצìÝcXË~ñJfážÍ·ðCŸøæW¾þË_þò¸àÐÇ Fê(a!;fbDή—òf’çp©':qžß¸ÌMgâwå—›Þjó-•ùÿ°Rï‰Dǘcm%³\‘áòb9ÚE­áŠ¤Õ³PŒëÎêR5o•ŒáúËb%‡–u7D¡.¿ÒW³ó|UœS‡Uê¼M:^ššLZ#bû4lò*üO ·(E€¯™ñ83¸1`¹Ã<m6mˆbL° ;kD"á½<NÏ2';PjªÉ[j–©ª4Ä;:H©£.ÜŠÃè§ É.{TðÎ žEoAðdÚ¨D«1ÁëâNu¤ÔG4nÁ¬ÑbLrø €ÈPE$T)À„.MñëÊ#Œ.éwΡfNjÕå‚”B[e]h¿:„NÓîì­E ÆR"#&#nR§ÚÈ$:1 ›^ðƒOöü¾m\ax•¨ºW±»hÒ[c¸‚h2Àf¨‡Êž?mŒ4gÌÆ"„×^ { b,”7¶¾ËÙs,°ä“&îáw~ø;Gd[+¯—^zé½ïþXqbþ{rű<éݵ­UϘÄÖKÐçö ñW51a"B ê´µzžÒÆÌòd£<ÊW%*.
+åà;h2´
+|’¼.æÑNäpªbM>·.ÑfJ´S1Á³ xsp4ï|§3Únˆ˜t(Ãö}/§V/™qÿvÅK%m¸b LÖ¤™òèÂ6uÒ.³(îê”Àd4Œ°ätnâ}©P“à⋉{ç7x!ï¢
+Ñ«'òäúK¸Þ±óàí}C%8tkð†ÀÄD0[Ü^̽yçüÓßþú7Q¼•W·«÷U¢˜Ž(Þª’u`>ê›a¶Õ‘dÙ­Û½3KÓoͤ?=ϲëøTe×E]ÝböX®Èþ–Q°†èÀ­"¾YºH£—5~Î\x0J<Mp7åú1‡>cQ§!-e¬ƒåd+“¤é«Mq{õ<DHlëdÄ.Rê>G¥J#Õ0‡ñ# öqçyåX—1É29»c’w›m«×±P‹qšsäxO®Ù¿:NÍÜêYïsçÛèS3ïÓLX5SMA¯œ³#ÿ‰j"ZC„j‰q+øXДºrŒUXU€UŒÒ2D…ÔH ×£ñD¦„I†SľpUôHZ½/Š„+cðDuò˜Œ˜ƒe“O¶ê4½
+(ˆ¦ó¸·x­‰A…«u ÒXšÝîp%
+DTÇðÃç±@-yÆSQ«¼€eˆ°ÞƤC'aŽb¡ŒÂµll}ØÙ{<%šîÑü³ÿùŸÿùêwïW¾ø¥Â}«õË“¾©öÔ„ªgDbï#¨ÛKýB-}!$Î}ÅUY
+–d€CZÙ@“´×fÈ5ÛfYwîæS™ÜÜC™©·i¡ùœ@QèäWœôFi
+,»M·¡×o¿êÄõ|4øæXç„eŽ_aÔaÂMW)罚IHÉO£è]³kˆz ÑB¬dÜ9T©sc{!¤
+&+^×^Ý#Ñ(vµs‹€Š¹Š¡QEÄtKý°P€V`!n^AåŒm¹Ž }MC¾}÷Ážyî÷N
+üôÇ?¹ÿ®w]?,ôæºSAuÏÄU‰…z%êBí–Ø ¤£w ¢¶A†@nýJÂ}âÑE<Ö<£pq¿[Øé\ŸØí¨N‚KCEΓç„%V÷ϸ8íˆäTT‹~ÍD­©ØgNàQ¦"+<Ø^ÈdLÙdðs0@úë™Ì&£¾‹‹2»¨¾‡Ö[lµ¥©êY»l¼|FFÉÇ:­IŽ[b ófõ
+û³¡ 11 Û¾åžÉ#Ø&JìÇJßG^ø IZ÷ÇÿÅfZ‘©†ˆ8ÕñSÌîØrQ«"Bý·.4ö‹ÑWO‹)†Ûª¯4ë£õ¨Sâ%W©ó´.ﱓLB’+Ž¡½@E&snVàŸmŠZ)ÿ>bCâ7rÐ퉒+>_áºX(XÈX¨ïc’w07<òÈc?þáÿ÷ZŽþæ#»‘»úœÖüÆŸ÷­fÿ$`!)ÝC0—•ˆ…n"äí„B:ÊÜËZÔŠ6_Qq5§Õ±c”f
+ “½VÇc³bñÓá(ŠÚ. »H³E?"ñ Tá®!»dLÆëâf$·ÅB9±¿îÖUU,ÛÈîجUþ_ÔÏî/bÙ]žßÆAë~zŠÓ%šTGs…ÝUÑÓ¦¨½zÞ¢ˆ_wô^ƒh¾h— q\DE@RCŒÒ’Ûu Ý–@MJtÁåÊÓEøŒ‘^2f6mÖš6j£¼°Ø'äÏy7Fé¿gΫOК˜ç ø`ׂ\`ꕽ¬ì_ÿ ÛÇB¢ÉD/ƒw ¸®Š
+9«“ùÌÒfµüfJzc+9E»PŽ9t¦°´ø‘ÙJ p ¡€Có2ž¦A òD‡s‡¢Wö«;ï¢P¼z<ëÍþÕ²Ú5RPe§Ýª‰:L%I†YmÜP³fPfh¬'Mr4ŸZbºŽ@ƒj"l#.pò¡NS˜ç—1¥3êbm­›cM¨ÙÑ›˜VkM›§É0ïYèö¬ÞáY¢gZ褷*R¥Îj
+ÕkNj‹¼R`Åaz>åá{Š.8;vǨŕûVË}D¢]³CìhP‡°ÐÆBK¦öwRýoü‹\q5”êóOÿÏÿüO%\饗~ðÏßÿÅ/~qÿÿÓ‹ÿxuíí÷s7½q,ôI!,ÄôèðBz+þÚBhhTºf2¬&ƒT;‡;ÔÑSdZ<Ä,7N£!„ÖèúuÀ96S¡·6Éq¹^cØ&AµD@v阌4¬;LÁ’CLè¤i÷z•ºqNY -ÄÃ
+ºXµ:[¥˜³#0‰ÌEÉ~‘'úó²ÞL†JûÆeñ$p¬C÷’sàPâL‡Ûµ8q¡˜‰ÝÝÙ<Ç6å› 3}®^rF#?c»Uræ(¿´FjˆŠo|ãýÝï~)í÷¿÷½Oú‰7]yp% Þìêô÷Ÿ­,
+µ¶…¾þä3'1ñäú˼Д}Ïä-g÷§ì/u‰Sösř٭•7¿ë]ýÒ“_úÙÏ~v\Zö~ïǪ+ØÃDWÌ¥–µÕÈzªåghÅù>#šòàÜó“·—³Ùáø E­âc÷kÕû2
+*c¡ÊÀʲ;>ßÕÃ#3¾Íî†%ÆtÊo“»Ô ¥rYEL—ÆgÒQJ·ru¦5ØÕMH’ã2ìoNÉ _ôz}Þ=/lþžu–G¯
+ödØ™¦<×°X©]p™NÏêE¡p#7ßÕukB
+%Ò ×1@Aê}ûƒíÏ×vé²€¦xlI¶êîfÐ.]9š&È‹ýdŒ5eMÆ¢Ó”s»ç=®F:„/mˆ¯&ÿå'gùz4)̲˯TapQRÇ^«*`º•
+øZàШø~Tu»7ÊœKG±ÐÂB|FAgMíÒo|¼Vxï{?òÝ¿?ÀòËÿüÏ¿z÷ßÜ“Ý}÷ÃýÑÿíP4yø¡lEæÿI®|ƒOýUeÕ¤ºû²”;KØá ž.“5KªE,TK”§±PAC,ïXÕÉzãÓ°JѹC&É–Lë&SÑm\äøÅÞƘKŠZËÀjé°_;aFø<R’ν’Éhàñ•2¸µ;vË\Fû,Ä_ÃBÍþµJ“•ÓºM!§dÐ>@¤½«ˆÔiçTÊœ²D ¯!¦ì²1^ª5®7ó.Å„ 5óꉋ´t°µ&^&f1¸ï Ð #e$~õ¸çoä–oó®÷xæ»-ÈËÔÊœC:¢E(èRéLùíe)\Å
+•°Ð%\ŒE¤ÙHëÙ´"Ò«¶4Î\î_XLÞ}ºmÞi[ñgô‹u’[´ò35RŸõR²‡€\jíw^:–€=¤´O~îéûï|xcfaâb¢¿o´·÷ÖƒÒ«£~×GOâÉõ—|=ÿ™gF»®MÙvˆSö ÛxÊþýïÿØמyþç?ÿùqõQÏ/«PuH, íÓh¤­¬ v£¬ßª‰ô™¼{A²‰ÀîâÌ»Æ.¬sü‚ñCQ+â‚ÍYl¤¤p;
+Db7if§¢(´zt|Øë¹[A3Ù„¹îåDÔ@„,²°\±l•ŒÂöÕ(ƒì•×F v°ÕÓ”|ŒD£XA”ÞJ.·é#¾
+ž¯gåv&ßcˆÕ™7Nc^ËÛ¸@®Ã» fZ½ÙcÜ©Žëå3’ñb§þYê2Ic•»´…Té:ÕŒ™Üè4§+ã©`Y>U;/3hŒäºA¿n$‹íö”“Zw+†Ib¢ž4Q«*i6®w›§¬Ömxï"ûß+íº\]À ÂY¨í‰èÈáÚ¢˜­²É¡èõ0Ùi‰ @À8!/×…†eî9½`êx€>ýF»¦û'>ùÉÏê…{î‹_ɧWÞÌݸ±p峟ü¡ÒÐóO?·¾ò–¿¶øÞ(»£ÚÒôŽHÝÄ)ˆ:… " ”,j‘’–Z÷E,†CMeê´É´ÑkN
+¶ YYUDZì·pÿô§?…”öí÷=²µPŒÌÜ40tHzµ«ûÒîÂ='¡ðä:¹>ôî_ì.5Ýrn¢‰·F#Ù+ó‹÷n¾ýÃúÔ?<wœSö}MäI+¨‡H­—žRÊo±Èz¬d®Å2ǹ|žÅÙØÞ\â¾Kgr,·$FR\çß(µÀOD¢×ŠÓ–íææ•JÐâ÷m 32LÞØlH9%E@R:
+¢yZ¡ÈióJU¾I3MU¥uÈ!Ñr‚=œ­JºùùC2ô>ï
+Ã"es
+‰q‹¼{Ùïß<ÇäNygyýŒI5k—Žjðö(ߟF‰ü?Ù¢Ã"*Óq‘¨AÝà¡õ„Î~cb¿Ÿ³a¥Ç§M9ˆ5fãi(ôk°Œ†b—-Áò+‚rTF̉£dµŠdƒayÀÃgj‡sû‹ è\LDªWÐ̳âtnŠ5À®¬
+v)4³ßܼưW<ÕI'q»ØcB£[AµbQ¥ÈB^
+N°0
+ƒgÝ°¯9£e¿kç¾Àö>Ÿ/‹Ž­ŒO]wìö¯}í©Ÿ¾…ºì7 ‘ÌJœJ–Y W&Ã,Äm2ÜÅ`ì-ÃëõR¤^jµMV;G'úOGOï¨6¡Æ¥9ÝM¦C'ÐS“¨ƒìx~¥Ó9_ŽøcÑVë
+I%-‡LYÁèEÄ€µgÅ5¢”feÇ÷V6g†Ç™Ôá½B‚0I‘¢+žŽsHGŒ¦)‹-M¹ìS¹$³mž$©VªIþÖéži( Û¹Ak\õÀ빘⋻\”/{I˜ÀÖvÆQJ²èV®áÄ¡ÓÔÈÓMŠ¼n£'ˆ‚ä(¶ Í:x×'Í!6Ó8i›³³½¹'ÑaÝð£¹eƒZÔw?AÕÙG²ÖyÃù»üraªï,m¶ÎådÖé~ürDù;çv-/ŸCj\æÃW„û”ÆB>PÒMØ!T6Üxėg-Û¿ò•ÇþðáåoÈÿó«ßÎÎŒ8öÂܧڲ˜>ýÊ ¯æ?à£>úú#Ï,L}YP|%¯þ¸Œ<Ê'» W(n¢œ œõ˜˜ÌckáúÎiÇj–ÃõjT$¶È2K&Y ft‚A'×/Ï–ÊgÆa³ùˆå¥²†à!Æppƒ.É°^·@ÕÚÍÒK!“î<-cù
+ÂMK¯R#ˆ{N qõûoýäÊ­+ܺÐVÿôo?øàc‡Ó× ÅÆúê×wÐ77oo)H¯FaœkôíilÌíÙÖîëòú|ñ‰þáù™£g®»ç¹ç^øͯ~ýÙgŸ}ŽfÁÅx˜n]¦ŒOXDµŒ¨d1vñ–IÜj1™uTMŽ~y,~u¹s˜´@û|4ߟBûLw­­áœ¥"BSj5¢@4‘ðz;c±MÛx=RBÌYN„zóÕ½¡¡
+Vû)QHÔSÆek9 •h¬RšÜ¢´ÚÆÝîE—{¾Æ/ç̈±G›¤²ƒPö¢z%I±D Ýùløù. ú-Ò—g0§‹ ÔR$%’|ÎÄ<t*=e’©É"¨xCbþ”‹ë—J²~–Ã.Ë ‘¡<W7ô\rЧÃ{ì¼€I>iT-QÚXóZÝÑ ­y8£g>DRÔ—ïЂɲ˜Ÿ^¡–l…Z²åµÂ ”ÒªïÝJá4#…€¨‹p³ÈDÉÖ³æí— E¾Zìºû®‡ùîÏ×9Ž“3'ûýÏŠK臫é8±xãÿYÛq/Ú·Ýúðrdì]&û
+ж (›¢l§”4P­dM˜ÆB»
+9“n®7б2:¶U,‘Íé…ƒexG Þ$'¶ˆp+Å/mÈ1­Ñ?sqõ­×<på¦õÿø´Òï¿ûóǾñÌñ…³“ÉQßV_M] ¥eûjD¨yw}Uä·oÿ¶àõ
+£0Î9¢WÅvíÚKá}M¾>¿Ï—J/¦¯¾õ–¾ý­—>øàƒÍÒ²ÿé«?P…C´A §˜Ð³ˆ QÇcì03ö4É"Û¸ÑtÄÓ259þÈXüd…m*¿€Óá˜w»–6VJÃ'-+zœ‹FZøéJcÒ%ë‰>ŠP:œ¯;Ÿkd†3«¹ú‚ GÅ™8a3?æ¥*¤ 3'd #D¡=äR±ˆ£ ¢IâW\·Îc½ŽœßDÇÎ5JRäEcJ",äNê9q'½§^0(“.漪œŠAg*ä§ùЫr}rñ\‰|¾¦hÐlŸ€î¯^U3C8¡l>êF´ìQ…t¡QÓë‘âÉj7Ÿ}šJ‘§D¬9Âð< Ž,ÝÁ Z»dsfÛœÁ¸¨Ó/m*èÎÛ²q¡iÀî$œ,k´ôª³Ö—/º-øÄcÏ~òÉ'ùûð7¿øålr2VÑž{ØCÅ®…ô5¯®M“ÁñÚw^_J_w_é–Ë×à(oõi÷9ÕA¬t•lÉ+2a¨›žÑ/àN+y#nÒ kùC
+ÙRnÉ (’‹fíÜ
+ÓLsÒf"‚ ³ á” –Kvv/‰#@TÝǧBlêžBE\ãW܉Ëž²èù„’çIR‡sõBbÆ
+£0>'\ã¯÷ïÚ•)¤nÏhÙ, ®Ì^{ç_…âøÃfµ•ÝöÊ”iò…%¸ŽCT ˆ&±ÍÀöÔ%Ͷ)³y%Òº8=ñP¿ÿhµk”Š-‚U:#vÑIT)}EïMu%17¼Z2<dW»óì^”¾æc! S5
+2"àÅÀ¨‚wðBJùb³,Š¬y2×;o$ï%ŠM›­‹¡t>æQJ×õšsŸ2÷% 8çÐN6ÈCð%ÌŒn-8H H0D³—‹ö¼GˆMa UµË™RN•#‰¾0
+ôÐwüSFíöøæµ!IJç(|¡ØìÆ“H_£ÚÅ ‚-yQ…xN*]PJÒÛ,Éñä©ÝõÕÒ\/«GŠí|ÂÅe˜hðN 5¢’!\].Ùº)Öû³Ï>ûÝï~÷o}ç†Ów/{;û·5÷44¬‘^­ªé»ãš{
+ή0
+ãóÇÛ¯|¿­Ö³{w†t¨'£e?¶24||á†{îùÚ[/½¾‘î²Gäª1>®Íõ×çÚÊøD%—q•œhR‹¶¨†IrÁmO§¼‡Ç†ïµ/;íóNç9èM ŸEÝÙŽñM´B¶±úH¢Ã„í+­„jr2Ðœ&E¥I¾¦'Õ6ÕV Úášò)ëù¨K0_è¢?LdÙ¡7· ,’gÿ?ÇJ'Ï#ɧDn¥œt©¥òy§ld‹4Õ,@¿¹UEJèT¶ÅÉõÓ”j/–Ë(­1Ī7Q!I3£BefH°£´Î”ï.æ )$ zÙLEÑ(%m?§ÉëŽÑmbfÄ s"-»Ý¨hÃ’p9¶±†²P¥0`cö±Î­@¹”ÒA¡ B,ÔM¸|ìú@ÙÎËÆB×Ûv=øàãùË_ò·ßÇ|Ýá›ýûâ¯ð¥k"HMž3×Ü÷ù:_óØ£Ï.ÌÿŽ ä2±P}ï·eË,sáì%t*°9+ÒZ)UXŸŠ3 “.+–¥Q›l´I©WôÃ%«!b(©d>·dtB³A3©%³L9„%̘Ø«aÃ~6è×â’–Já’¹‹Ç‘ü.
+èe©„ôGP–Ó|˜ÆBy©ÌCn×áKæt\írÍ9ì£5ª¨KOY?hÂö–dd‹ãY ¯8’T3f›Ê…åOE‡¨@*{íül±M^rDƒõ(‡Ú{ñËe_¿à)Ë](BŸ{Ê6 Â4L*ð² æôÃkE‰µ$l7†RÁ{æ¯R û‚“”b­BF‹(‚ q\M•Jê¨J!=Ž© ç¦ØÒO?ý^T_}á•o¸oy|Î×7¼§®»®¾=ÕÖµ.tÐFa\\¸æö·V2±¡]{(-{$2qhtüš•›zè±}ï­O>ùd³¢C5E{84Æb"!{8+ØŒ]%DƒN:áÖ‘ä±:ÇøXôÄxÿMÁ½Óåî ª¢ íp¦mÎÑ*C¼Rs¢$Ëo&ÚIlŸ
+NúFÉ£ˆU”òk­4IAõÁÛ(´l:jðn8MD·™è¶0º­Ì.hóíÜ€ƒã'¹%"Eñ¡L‰ŠÞ_€®xPmdÄTv8šfÁ$›DHâ9#7J;V'/ —!Õ*£iÖh™­+î·ðÂ*ÐG%;¢¹„‚¯/wƆˆ˜– ¸¢$<Ò4eqν¢wZmœ//G•ínל»<mwNY#•Ædµ"êäG,,/Y‘3ƒ>$1U#0ÑX¨( Šd˜SïÓì»<,ô.“}<¹òÊ /ôÑGë°Ð¡±C+ûÖ=þ^uõÉÅßþÁ×íÕ_ýì½ã‹7]ãÜwyXèxuçW•Î›xêABçð3’ùi²L¨%z!Â0µYu+'ÔÔzYJgQäG>)—/IÄ ¹\2™l©J9„úßÍHÕ «A…Òé%‹3@Œnr'eâYÄ5$¨P"k4­i±GÚ¶ôjbZp»ç]®Y—{Öî˜t8†«õÑIÄÉZØ}$ÞnÄöÁ+ÕeÈ?eTãX;„Í 0˜V-B¿B1 *®ë¦êºx‘ðð 1<Vf·•ÕkãúágÔr“%èüƾ0&ŠØùc>œQ:¨Åq î…€.Y‹4¼]íxÅúŽ¹VÙx±xJ öK¨z1Á9Û/¦&>£‘Àu%¸q³€ÜÌo¾üÆ]w>¼<y8ë¨ë®®íY×A98Qpp…Q?N/\×RçÍjÙïóoóz½D||ebæ̉[¾ñ§ÞýáÛ´Ìͦ¼œ™é&.³)‡Ø ’G¸¤¸›ÉØ£ÂëÌÒq™2ns%NN\¿«n¬Bq°ýV–ÇÈð@Ü¢Á<ð:‰ƒ‘btÓ `™,&ÊͣuÄ 2¤Î)‘iñ^{ÆÈXQ§(Q!KÔEkËâf-¯V'ZJC[•¡
+Ib!#ÖNmƾH²ÄÄåb¡ýa¹ _Ä1
+S5Ò¤³xú>µú°V» h¦˜ëdÒ+?"áMB¯ªã%墵,­S-¡NjrÚ*Ö½Tö0÷1“bªÎœV¹rrýRñbÀ“…³Žuþm– ï¸Å6cÌåÈÌG,¶ñZ}¬VvðCVVIt¨"XUBÉÈz)Ç#@d&ï
+ u²E€Ã“÷biÓåa¡¯”–éîG ’Y·ñ~óëß›¾æ+¥ëÿG|ròê·^[ŸPƒøÿî;^HLþ„ɽœz¡Šƒg-Û'äÕC,2€•uQŒ‹@ì ZŒƒÄwè„Cõ’¨¦4£lNMC,Dç4­¼ˆˆ?—¬„7¬iei½n&t²
+ûõ¸‡*Šå
+Z(A.$LÆá¤I^œ®k‘åh¨!:¦Ó¯dÉÀgÆ8d>bµ×è¢õò°“²°zM‚.eX¯
+ÉœR±¼£Øê=<AÊA-²ˆ\¾hÀ(ˆ&á–àz*5¶ª@Žd¸f³:è‘ôê?¸ïË__N_“ õÖyªª}ë€ÐÁæþ‚k+ŒÂ¸ÔÑß=»£¥3§eïÛ áPhuÙ/=ý¥§Ÿzýœ.ÕÛ”—Sá&‚"ËM.ad•r‘iðzR2ѨŠÔhbÖDÔw¢ß{ØÅëÈZZ9‚ì…^•öp)Þ’ •‰l
+UÑô)Z܃DZ¹Q©x^¡X.“ÏYKÒz¤î:M‰Ý¯ÐÑ!½qe^¬“ðŽ\+عAèL!ø¡ÅÊE ¤]Bcd›øàÚ©(­>è©$ „è†úaLrÃï`?.#/ ­ìŒ<ýÄs÷êŸþô§‡xâä–ö3Ö]™iÛuª¼õxuÇMs×þþÃßoܨ¯¿üÚÒìu÷–U]»ÑÑf¿O»×Ç©ï&ì~ Þdu&4T™ì’KÙ IN³ã¢Ù<¥Õ.5I"
+ÅR±hªŒ;ÀãeršpÉZ¤’œÒéÕ—Ä ~(AA¼xnÉÄüÜŸiM»¹>¾6S´&Ó$¥(wŒî,£–lÅdI›-“.r°Fu°½$Þ¥Âziù j`ï“PÔ
+Ù%ëÏŠŸöçU¯Åó2Ñ( OY)8È) ÖSÄVK§íæ!³ùˆÙrØî«UÆ*…AÜì ‰ºÔ@¸¥
+ô…Q—9Z‡¶mëÊ$˶µù;2]ö 3ÇÏ^ïsß|á·¿ùÍgŸ}¶.ïpyžS¦Í±/ÒSHè™DMá¦8›H¢ÕN´°îJIoWçÍÁ]Sf§†á+ã&­Ü Ð}Ð\—€NÞjasô‚•9\äƒh0
+SuêX•!¾E%Ù>Þ¥­e ª Ò¤(y%Ó‰‰•¾øÊ4+A§„K9)«tÌi±Ú'-ö9›mÅl>Á DD5Eƒ
+ù¢‹ëçpÒLÖ4—‹¼¤B¾ä*ž0 Æy–Œ„G¾¦¨_‘í*&Âð!’‰3ÅØ®âIºjˆ
+éõËzÃ!8Ýú¡
+qÂÂî…¾X
+OÖ÷A,Ôç%c>ܸBÈoæ–Ý©k¸ ,ôAÉÍg¿ü£×pÎ]÷ñÇ¿ûÖÛo~÷õï}ûµ×^|í{/¾öÖËßïçïýñ<§ï€¿ñš»Vö…/ Ý­­{¸oð±é4SÅÉn ¢;ë;
+‰F1ac¢Æ1Mž£‘ L\\=>qåfîFhùÞû?þÌÕË7¥ûG};|µu¾––ùA¡šÊð«O½Zðh…Q—=Úêã¹.ûÖÆ.¿/àõ¦æ‡Ó×ÜzËW¾CuÙo––ý+Ï~_ˆi‚̇C"BÏ&ª!b3v)°í
+ûuX{^z"š“ ÅÁ‡9ÎåÎÀ?—I292 UŒ„¨üÌSÍŠ^?kWW‰6Ž_‡*`»E á‰åw
+"&á€Ý ¯ÿZjÉdç^ÞÇŒÙAc.(äJº‰l€e]ÛOU¼ ,tsßW¿úĺBèƒÖ,øðÃ/ÚŸüÆs éSÏ Ë.õ<¬t|¿ TÝÄS3õ!¬ÄÄ^€SDC²½ˆ^’Q!ïv¹Á%«±¥Äßá9a’N8¹ˆÇa!6j\jF †­þ¨…œ€ûVè‰Ö,™”Šã!©,æb!žŸÎ‘åä< Æ4%Ñ{D¯Ÿ«,t‹“fx¡Àz
+ÛE¸“Ç0­Ó ‡¸ˆkw[z6åþ7ío~ý›o=óÂõ'n[ Œ65ö56îYÓ8Ví}øžG
+¾¬0
+ãJÆ?ýÀWç˵•uQme~ÿÈòÐС¹3wÞùðk/¾òûßÿ~³ÚÊî¼ú^~5=„Aˆ[ùD%ºgaû4Øp˜¤v9“ïñ®¦a"¹¥Ír2ϲ]ðº·z+¤~åŒô2ZÜà <cä3ÖCŒ=‰¬žE÷½ßXDÝ¿¶ :ºÖ\dz ®¢;7T¥W”/ûL»ÜËÕÕ×ÃY_uº×<\åX±9&ZdQ×ÏeKˆ$DDf~¼Q%Í(DPU:@r‚eH[sÍ“Ób!èX¹Ü´•¡kµ4Ù¤ˆ«ËëUË[”#Mò˜K’²rÃÕI¯ø¬¬^·8Erƒ&¼C Öª¼HÿÚ%KVgRA,Ç ~vM²¤åØÎè¥b¡Ÿ0¹'‡½úÂ+›˜ øÕ{ïŸZºñ÷¾ËÐ#ƒXè6CSq3&óé6 †¥0¶6ÕYoÝZ~œ^2øƒÏ8Pé\±:&k¥ ;7ÀeŽ)ˆ\2½pp«,j"§õ¦ùº’8É Q•B«KFI…f¨{ |âòÒp•å² rOªKéT+E£ò¸]:hæDôx7$!bQa½pÉâ~ ËoÂÛ©%ë$2ɯË8e™‡Q2¬I.Òþ›ÖaÝ¥™ü½™3¥;¹ÎÍ’LŽ;òÅß86ž¯äÚ|úzà$‡@÷¸!«e¨wÛØôè—BžÃµµ§;lÓ6ÛR6B• ¹Ä„ž Œë€“ÐYx›&½
+¡ûKßzé¦îYò{†v6vÕ7´®Õ ï=»rCÁ‘Fa\ùxäÞ¯w¡.û #u_¡`püÐðÈñ…³_¾ïÑ·^z^º7«p¨«6ÎAä:˜Lk2¨Î2^.$¶‰±Vèåƒ>%ho­Ÿì»jªZ‘"Ò³þóÌsêV¯Z6.²AŠ †DÌ!tƒ))Ê×$³ž%¼Ž†H–y­Ðj8[æ´ñC%Ö6'h2èktìH­2æv¦Ûì³´KÍŸ}¦!‡c®Isò‚\Ö]IR*ž‚ÆDΘ­“-ò¨‘ÑKá½5L•ýøe„ÃAXH*YË–rD
+DSFNÔÌôhA+sŽœ/”-)éÈ…z@ÄB=„s‚©½‰§¾·¬ú§ƒÃ—„…ž©o:{ß_{kÝîúðÃ_ÿîëãá™@c°·ÖÛQão­öæÏŽZoo]_°94•H?õõomÜÕúӟΞþÒ‘=¡KÅBWWü8~ ¤<Q²5Æ®ë"\Ý
+7¹÷ªˆ
+ר×<Dš¹Ù{DŒmRÜÁc ‚Ðåc! ®~ç{ï\¹müÛßþñùOßúÑý_ùÆ¡ôu©’^­ª ä!¤>V/¸­Â(Œ/b¤zf›ú2¹²íý­>¯7<”]š\:súzîýŸ½·‰¤C%¸1‡…p\G1µ ³˜Ð±ˆ1ÑP‚7AÅ
+: *~>”ƒJEg ð
+A¸d mÅ: ”€«I'éØ”¢ŸëV? ë”E7†’.W;þ‹=ebÒ3}6éÐDâäôĽ{÷ Ôi²Z—¶(¼R¢E»DYÅüªi®~à¦û¯Ü*þãÿ€öç?y÷k<ubáÆñĘ¯ÅWSÈï §Ç
+ô…Q_ÜØ?¸kçþLåÐÖ_WŸ×ŸH /L»ùÆ/¿ðÜ·ý«_}ú駿þõ¯¯üµP—}^/j.áNi–éyD±UŒ€öSúª]7¨Ÿpàû˜`ÃÙ«et‰¦˜ãÐ2ˆç>XL1å*AÄH´d
+|tš ô” žŠðQ`i]ï|>úŠüÇœ2´{áÛ†÷&3?éÝ¿05rÇÁG««¯Ûî>ì°-8´cED“w‹ñU’4‚ÐÓV‹k"F¯Ü$Ò|n¿|ÿðâyúÐÍs©1ÿî`}ƒ¯¹yך2¡jï›/¾YðV…Q_Ü€n%ÜÙµ+ÓVv€ê²÷ùÒ©¥™ko»õÁ—žéw¿ûÝfiÙÿÅ×ØF8d¤J©­RÜ-!¶(›×€ %¯çê½ö(‰µR~a]Ét”ü% S‡wóXãÅDˆÊŽudÓjÉ|ú\°
+„Ö]NWº_D¡Q8[­¹%¦8%,c†œ’A«}²Õ4q^ d›tÚOZ,‹fËxYÙj…âš"-H£Üb›6›&Qs='¤ÆMÅÔÝ®
+P(á(ÍŠÁAD]¤
+ Ð
+¢ˆoŠuK棩½çžGùîûë6ÕÿüÏÿœœ9ÙW×÷å"òbžgqgà꥛>øík6n¿ùÁÃýãï2Ù—‡Î´%á¹SWÒ칇)›"JG0XÍ@ŸÃB€W]‚KÖe›t9ŽÛlËü â‚Òš2š´Ì˜LÇIÛŒK;¬‘ÍèØ‘2$fÚA/™<›¯ÌñXRÌÞ}ùëQôÁÉÌ´qE.Äs…
+èš1V‰3H&ÿ£BÔ9Ø£Ã=Ö¤ï…wR¤SÉãM^(‹?O¹ÎQ5;bŸÿZ øÙáרaw¸&Rg;ÛŽÔÔ TmÖéVŠ‰i¶^:;Í8Žrd,\[[´gSl/-½úüs/ÞpêŽåá _{bk³§¡qôjMm÷}7<PpU…Q_ôxç»ïôÕzs]öu«]ö‡gÏÜuçW¿÷â«ð½Yjeó©\½Éf˜xŒ
+á.Æ ƒŽU‡µ7“ÉžöÓ»êG©Ê–HÞE5}ëÒ²¢FN¬„ˆ°À@–27¾¶F:y¡ŠÐÈ•ÅpÙ oøUôœY¤¼V¸s÷ép@HâzNt«<du¤·ZgúÈaèC÷9·•Ûºå8œ{\‹¨;Û±b³Ï[l“:ÝB†aÆ0c4ChtÈh<ŽU-“.ͨ]<bå…K™±FHƒ÷é°‚b‡æ‚¼ã«·éGΡz
+Ð!w!ðª@§–é·â2É‚–ƒd 0(BÊõ¹ëgäs;eÂW| g_%šµÆ9,±¦{E„x³Û(¾ß.8KQ6¡M˜y«ýym•ûº ˆ–pRFá`ƒ<ZW®2%ÎQ‡kÜåJ»Ý‹nׂË5ïtÎZì3f˘N»Ø HÖ*R”ŽØœÑ<o"i9ÎcfÛ¬VwÈlšÚ*‹ÉÝ<?›3±F³·ûä+å:uà`D ‚ðÓaY)ðv D?±&
+–,™]2¸R£ c÷ZØ€¨¢äHqÞc`ùÕ¢1©dAðÙ+ÏrŽž¿…0¹I¡žp_b</ò³zÊà~£OY è,Bê¸u°V÷g¬2 dþQ:¹}ñ]=ûŽ4è#u%Ñ*EÂÌh-"åø–üˆ¥5¦¥JÕe„iSlয়~ú§?ýéûßù„÷K‡C±¶ú®êšuÒ«û¢mS÷T…ñ¯_>ó•5}¹.{S¶Ë~lâôá6½ËÞÅoÆ70u Â!BÏ"jeDM1¾6¶:l_ÛÖÃÞž«+Ä=à/B‚A+R*›m–F‹äËzá 3­ÃQoKè¡"Hý"N¹ã¿˜6—‚ƒŠCךâhÂä”ü|«²óp(ÑD‘±¨Á2fPÇôë™ËOrB.^°Bi”Ç‹£6í„^?_£¬’ö)– 2”s!Í&Óœ ºW˸™œt뇪Êš ƒlJ!]ts}FŠ†³ânWøU$óÙf™ÊŒ§Vfd=TPh
+ãÃø1¶û!¦ðrÝ'o}/5xÚu±ô†/ËΨjö¸= Ö`ƒÙ×hö6’¾« žƒg§¥«ÕÔq¶Ø}ñèåÎRûörO‹É»UÝs•²s{QÇEÇ.É=’;¥÷«:ßb /þÙÞg0ð ¢
+ê­”2ãi}¬ºn¡äh)ÚTõT³<^.T*–j¥ ué!Ò<e"gLæ)Ò<m"§mä¸[=\¯HYdc2Ù’ƒë— ˆ3³ì=±M¢eFq¡ì’å“|¢e•€^è!¹A‡t¨E¦NÙ€”=T†¡™µ]JÚe¼ÏØÅ4» €¿• ƨ´lÜ)“0†!:Ê»w¬Nˆèìøž=îD÷þ£FVÀ„w±ý"ÐIs*Jp=uÐèþ*5¦ÆqÓnJ©À_ÿú×O>ùäÇß{ëÞ{¿¶2}*ïAôk¤W›šwík,H¯FaüÆTâÄΦ ã®ûý;û¼Þ@21¾29{ý©Ûüéwßþ <Å›•,Óöupˆ/“:6Q-!êJðªË>dÄ÷·ï;ÜÞÂi•¡NÞ'aDIA’ä'l¼°„7Éæ¤D”†%ëõ%û?—cä’Ĭ/lŸ©+j'ƒ’¿€8*±`N!2:nšÇŸp§Yì™2Â' HdÀ[‚ ãyM==ù•!Ô:©º‘x…W¿–è+áè„Ã
+ùR©©fäf©|Þ*³IFõâ ³
+”Akc¼åŽuyº8Y‹{”œ!™x^![¢½*tRɼB<ëàõœ¸„5\J…ÌA'í¢ÔÌ%âyø‡=%åêwrå—÷è9¿ÕR°;ð.PF¡1Lx㠱ȧpbBÕrªoò›'Î~Iü€#úÿ ½,(†b¡»£ïŒE‰+ήMáúT/$
+{{UX/ÏjÂ'br©SÆáÌ™#ðôÑ¡Eê‘myH#ye§ìÂw 1u×X×Oß”HÂÜð ¡/7ÍHÐ äÚ$ᇡwÞv`ËPWëi§‡Ò¦‰sA—”hâ"×%89¸æö“÷\¹Åûä“O ý|ïÝŸ?öØ3W/ß8• l÷×Öû!øÉ‹ín¬Œüô­·
+þ¨0
+ãß8úvìܹFC{[:½=^¯71•Z˜9yóM÷½ˆºì ó¦ÜYà“HÎ×eàP5Ÿh)ÆQ+6ntuwžm¬6c» F]K‘‰+bD[2?®8D ;/dÀ:” C:Á†rU&é‹JŠA“+CÍŸ¢‰ï´8¢ç…pzz²9HGÞ²ó£@ëæÆð¾I~ÃO„ôÍõ‚AZŽJ!_’Šç•Â)/ÁãÍ¢§Å<¨ºƒˆë8 ¹xþÊ ñÙcjŠDºt5Á‘X[RÏ+|ºüøø@B‹
+£0þ½ØPSâ µÕwûÐ\\JŸ¾íÖ_~þå?üp³
+‡^{æÛ|lc[J–‰q8ËŒ½rl4˜|Ð×XêótßØÚ0¬û)ž4”ƒ†ÎÌ —KÌÆ ³mÚEŽÚ8¡"fŒÏ—2´”®úea¡st1AT z‹@'E¨r°±õˆ²Œ:p2
+Ζè…Eóée{ç“Jpcò‰±¼0ÂE¢£°l‡@h pi Ds
+ÅÙ®Ç æ„ªåXkê³ÇŸø]<~ñÅBÿOÌÇäf ÝÞ=ð‹+Ýv=Ss„qu(DmõŠªnzÉÔ܇BÅ2"ÎdN)9ÃRѼ–?,çŽèp ˆPáY[^5²T¹ÿ\™¯ÈÔWÇò7<‡ÒðÕ>/Ð$‹“ä¤Å6ç´ŽšØ!#$dÒ[™Ù«±K-&6ÂJ¨ƒVJUD‹A ?^Ê):ežFHÆìç²'Y¬)+#|læ¢<ô)S¢o‡ÖÈ|­;–jËÂ¥˜—ºDŠ‰î’ ©D¶Ñáj'¿iSl-½úç¾{ÃõHzÕוÜÑØSßp`m}××ÞUpC…Qÿ ãÇ/½Ñ[›å£Þ½»»Á¡@`tyhèèü™/Ýýðë/¾ö‡?üa³ÚÊ&#Kl\½1SÆ' Q/'*eD3}y4`û®²ôwï=ÔhIÁK"4Ôt´\‡÷Zy¡fYÄltØjd1“ ©Ìù) kPž¡a‰\? 2ÎlDÓ]Lõ|Q_ót‹Ñ-ò1ø2
+„”›XÓ´•¦£è ¡ Ö#F,…ˆmX‹÷–Aºçýœ…O|NÆ„¬7×W$ÏTžÈåKñ¼‰Ÿðf˜LôZlöŒ›ç“‹f”Üa9§Çò¸»ÏW7uÁ8X2o¢ž&D™ ÌD-دú‹ÁþqÀ› Í
+÷ñÆdÔ’­¥[?ß’E>GwÃ’%³êÀëæy™‚¸ ß —1V^¤I³Ø'œŽùJIÜ"ˆIçlüp)gZòcÑ¥8Ÿã৺ÕèS†®bÄó™<™væ ¾ §ßÊ ÁïÊÊš„I;/ ·ºŒ;ÆbeNY.4”ÃB
+"*7§{wÃÔ6K¿œ5`ÀbЀà-r¼BHØçJá˜ZG86ÅÊÁË#´™¯½ðÊm·<°<1ðï©ë®«kÏBõõ§¢G ¨0
+ã?g<uÿSíu=0´k·ÁCwÙ=µxã}÷}퇯¾ùñÇoVth§µ7¯Ë^ /ht7«€pðˆ*c·Û M( „-Øþ³Ý{–Õa)U¥@Ñ­ ¸‡•k*‘–t•®¿Em’ÇÒ!;'9¿}FϬe ] ÚtX§ë6àpöè †ðf&¾v^5çf œ°…¶ cni²±(R]–têGì†ÑríPCQ³4\*›uq}|.4Ô3™’~šÍÉXésNÖG'×òk>imÚ5@ÛÝLºH—LgJ†Ä¨›BY3Hzž6ócð!¾Z›q»˜ò5íÒe U
+|DˆÙ[‚ù {Ò`-tR¨Q®Û€íM
+÷¼
+´+,é¤9 ›µ¶é¬10¤ÊA3?Y]Úo6/V«ÍŠh“"Z*›×2ƒÂÌãß“kæ#BøvøZxа.ꔡ#¦%¼ð:COøÁá¤ÛÁ²Ó£euܘ ž2Q²Fߪ Õ–Å+4Ýh¥j¨I+— @To¼ì±‚ûÅHÙ™%b9˜]Þc{k¦”ì&sJ:%Ø^ ÑÀ%ʹ ¾!Y§7lŠ}ûÛßþ­å[/½q×/O„Æ;j»«×J¯ÖÔvEZG ®§0
+ã?mÜqòÎ}ÍÙ¶2Z¼Õ‹ŽŸ¼öÈÍ<òÄ;ßÿá'Ÿ|²YÑ! ·Žk ‚Ìç7“:‚¨WàåŠL5ŠŠØ‰ŽÖ]'‚»gjÅ]<D:„ÊuX`@Kô™É
+ý VwÌl´XÇ›d=7*Ë`¡sß©¡ÍWSøÇÂè±ò¢Øi¼VES/— XÅCVAÂÁ A˜ᇅ¶qƒv^Ðκ$ýõòXcYØi²ØflŽY‹uÁî˜5‘‡IË’Ù>CÚ¦ŒÆi·r¼X: uî–JÇ>gªqo¶â¨_EŦr”Î4F2eœ1™x¾D±¸U®—ÆèèUp¤Ê\Qš
+ž/‡cÎbYÓ §-MZ¦IÓ$<ré‚“‡Jéè#–;e渙ÑðéÜ}TljÃ1a{XÀ#b´ˆ·€Ð¯]ÍJ¯j6¥*òïÿûŸÿügh-ï¿ÿë‡fN§¢ã½µžªÿºúž­©‚Ó)ŒÂøÏcÁÃMYÒ¡í­ý…R‰ñåɹ³§ï|âñgööOþò—¿l^—½•¹†ôž 9ÙD ±­QGu UBN¶§½í†èŽ «•fT“ƒn&Ô2|NQÜj3™N¶…ú⸙.Bñäù¼†xŒ,•4æ´ZíãÀ %/Û´Nf¬ÓVû„á§u¸Ú¯1Äà´[‡mŽq«mÊáH»]³åå .׊ÓqÊa?års¹æŽyŠíð|ƒaj™d¡Œ;ð9(ˆÉša³3A~͹Šˆ A}=xœHÐ7_+/ª/5KÃ-²0Í2„¦dz:G`â' [—bŒäu¥E.÷–PlŠ
+"nå ’qMéŠÉ4m$Ñe›qêº0C>òàV„Ž¢›˜Å§ù†WøE÷-žþß'Ÿ|yzB…ç…eWŽ…|ðñXºž›ÎÞ{*œø·`¡…ª_E£4:º5ð>ƒ9ZT3S¹D(úÇày”†CôŒ
+ÖÕûš›w®•^õ¿úü«_S…ñ>"Û¢»veÚÊö7uz{½>_j:587sò–›îÿö·¾óÛßþöoûÛfuÙ+p ƒa·CbBÏ êäx‹±G‚íU1QBAÈžhÔDû<7ìÙ:iÅvÓ†Þ£!¶±ñÂfó„^þ×)•¡DÃ9­4’óP€€…qê‡Læ‹m¼F1¨/é…CÐ%¹¸>'?dm‘öo•4Q›u˜ºSÏXísV+„=ðr
+Íò’ÅrˆF>çž–è€j¤ ?HQ—5æAÂ
+k ª¹ÜY&ÕÌ
+áüY._rqýôãÑ·ÁEíl¢›>x¹ú9á†T'Z$N×sÈSA¬lMNB t=FD9õO ¯vß5®ý=ö$ÂBcÓˆPfÚ,tß}_ßúóŸÿ|öÔ]Çÿ}Xè'Lîíý4ú ’x°Øýœ¨ä:¾~œí>…s» ×"ÀºAY>¢Šˆœ.n/\/oP-.âŽ1*š×v¹K–éÉ*=\ЯdD!HPÊ lÖiMäŒFwŒ´¥ Æ#‘Ö´Nõˆ•ÌTÈä²E3?VÌ°F4”b Ý5:èF{ðª±^› j1OjuG,æ1/¦B] çlÕL(‘òW¯]3›Æäi™l‘£-j¤\<~$?¡–LUJS-ÊÐCÂêµØ¦­öY›m»/x±XŽ|Î)3[§Ñû—ÁcK— )‰°ë®)ñ·íœ­*
+ñÙðÆ¡mEØUr¢Rˆ[©zéõc \ݬٿ)¦ì³Ï>ûàƒ¾õì·Ïœ¼sipÌw0ÞÒØÛØ´w ªñ|õK_-x™Â(Œÿüµ·nU¼µ½Žî²^ZL_wûm¾BuÙoV¦ìÑ[¿!ÂÖÃ! ®cu¢–ÇØ©ÀöA—!ä§Ind×–‘çèU•CF°C¯'<⤅ ¥R–Ôcø¹±P”bìñë˜ÁZYêm³vÓ˜U:ââùéø Ê[qÒEœ!;'`Ä”â‹t€–âp…&±–Å:NZÒ¤mÆlO›,óFòø¹m59í¿U…Ï&bÐmbˆ%C—
+1Q
+ÇÃe;ïWmùþ]A ôÌõ·‰ßÙœÊ
+ mŒ ýõ¯={õ¿ ÁùœHóó`Œ†C¯xωµ‰ 7ñÔSl× \ÐC8
+°b9ºž%¡8áš­³Í»¦Ê²»5HU¨7<«i>»(Œë'̆n=Õ)Õȶ’
+ŒáötB1~ràa¬ŒÜ ȶ²õ³†àQšKï1 # ¨]ð„+
+ª¯ÄبjmÆù½zy=T,ñK¹xâàP{àwDdÉ›9¬f†à*“sú çkÅÃ%¢ B6/—Oã8Qïüµ£KlTg˜†¿¿F»¬Ñîцó“ÛMl6š
+œ6z}Cá`©µ[@ë…ß\Tr‘Z–ÏÆ2X„ʘâ²Û1Y:ŠÇ „`<|é©o¸áŽÙÁY¯§w~“=·a£ôjU¯{*±¹$,aß/»û–ûªó×uÙ·¸\n¿p¾/²öèo¿ïõ^ýàƒâ…CÛ”u T¹ ‡ø(ÎÁ²è”ÉX‰Z/àOŠÓYIᆚƒ]þ•­BŒ7} Ý“+
+L…)~Ý¥DjÄDIClxàjÏ8d!9Òdä„ edLÛ¬“FS$Y8) ÷Ó©D; uÉ£ƒM’°
+BU¤V
+‰O
+5ˆ‚•µ_:5Ûa7Oó’a@QÐ@0ëQ9ˆPý ¡AIÎ\éé‘}„ ¿84AÞ‰[ÇVAË-7ßs9 Á'ððž¿uúFÙcoŒáÐSžö{%†³|õµlÕM3EIîÃä=ˆ`†H%» †C
+ŸÀ?üðµ^>sÓ]³Ã{‚¾Æܦ{ë†Æ±Â²ºí݉m%a û>ÚÑé#ÅukZö•žmN—Ë Ìõ]»tâ®»üùOƒ@¼ºìqz6}c[¢ã`fj£RÊÓÑ|‰`Â$ê+2M]ÞåvÏr®¤5VuÌ
+i4Ò]y©‹uÄl:`µÌÚt]ɼ1cb¤ tÌ idý”E:èäƒ`:Ò•jr§PCRF»‘é…@•&Ñ #…¢°\JT_¨5*Í\´¶sY‡šX~&m²vA¦@šV§ apŸêŠýÚi‹5–Æ耿*hd»Ohmd;9bBYhÄb«Yaè„VsLÉlKãÂ:¦_ˆµK(a3Ó,ž‘ˆ§á/IÔ`ƒNÎÌ\ú<E6¨¬úõé ^Dàň®±kQZ˜ž AhHœóW~¬kŽ¡G–®…<pdwç[TFYèÖ[®pGö駟Zºq9ðí |ÀÿÙ}åm$ ½20úR[ÏiEÞ3lñ"Ïx •ßE3¬ ¬V'_C7HYßbæœÝˆ&“Ùˆ3ý*”Ó¶··•·lóTêhy3!f‡3"áŒ=©âD´kNo˜"Ê £$ AWª´8Ñw¦ÑŒX¥½[žLa‡’ÿVµ’ò¬(è…p¥Ft4ÎéÙ!#ÓŽyÕÈn%¨”ƒ*)1¼h—©Ð"õF¦'/-HT>›dØ&3”éü!:}„E%FÇ'c¸¸ Ì‹ŠÎ“«L<ä1D†¹’¨ä*3pBéÂQ³°´3nH¥žÁ#äM™]AŒ¿ÐÐ<õ¥S5åûLX iÆ‘J
+p‰°:xŸÑ8ÆEeo¿ü³¸d„>þø㟿öÆí·Ÿ_;Øp:Z·Ò«[×K¯–ØC‰ %a ûþÚLûÜÖ’ÕŒ¥;ª]N§ÓßÕ™š<²ïÔƒ÷?öö›o}ôÑGÿ÷ÿ—§ÀôÔ¨GÌ™-ËcV
+¥B†Ú…a®õƱ–Þöý}]'²yðpÚÈ i øá™Z\
+P¥Av+0—ŽéSqûÒ#Z~¿UØeO
+;ä~³µ?üàÔtÕjúÍ–¡BqÀÆroR2Šel’@3©£Ê­Q5Õ:è`­ÇN¸g%QÃ8#ÆvBRé"Ñu®›€!ÚhœqHƒ&&!¨½¦&鄬íðmŽ•AÄamÆüV©DmFóeU"ð€»•6ÊbŽÂo¨e· ø“iÜÁTF7IGV¦K"™‹fÔŒ
+NO²p²@*òa©`žÙô> Ë›&žL–ÌhvTL
+þ;¨QÁ¯Læ§0º’;uõÚ¥míJ%õõŠ ëêo ¨wcuPá¹1#¤ è”Ô=4ÕyŒæ–•ŸëÏL\C‚ÐÓ'o}7þ½×w6Å穆-gnºûŠµÓ‡–®_
+|W„__a
+ÕvBzâОcOž¸e_uÇóìd—¢â…ÝÁ骂 (· 3Ll5ÏØ- ½ ¤´
+$¢fTt»€âA4¡·é- ¯½emW,îb
+A.Z½8ÓÄJ”WbŸèŒ“&}oArÐÌ
+¬­2?DtFtö¸R@³mÀþl~8W¶X‡Ì–É-¦)‹yÊlÛ¢iËvèÙ!Vtô¨kÄ U|©žmóµ,´ÀW€-|JǼF†×(ŒH¥ ¸²ÐX†mÂdÊ•„+쑆ڽ[x-bàU£pÍz‰zÌ&$®Æ®Ð8FEe-Å]W¬ÈÁ³¿ûÍozോ×MvF\å¾|‡«°pC}vŽó±óûHÂö°õ]ö•…õ®V·ËÕ9ÚÝ;1²ïäÉÛž~üé?üá0,ÄåòýW¯ýJt….{%Ä!–ál×`¥¹Â6ƒ¦ßhŠÔ8ûN÷öœÎ³t™½¹?[ÐÓœ02Kˆ@Z €Uþ‚›‚kRÓ¼jFPÏôs¤™^Ó‹³|æ •6"À:Èt=<ù®Ó3íX§‰p…­rÜÒéí"J/âø¨Á8fµÎçÉFV •â'"y”nB단!œH1—ˆØ¶jÐKäß$² qNŠ4«˜!‰pªDè7+#úÕùƒFCŸC,Lö%ûLª¾li—™†àG&©©®‚¤
+î^Å¡Ç®yÿÞûÏtLÝ•dO/<Î’ÝLÁð‚a©­(> Øë<¨.løq`U@
+¢Däüœ7ŽÔjù„D ˆÄðO¥ø„Œ~;$™õØÕ’V»¬T/ ¤Á'5š•è衉èDÄQ\?J´qéG´Ä'ÃïõÆQ­n^gœ0Z"¹ª`7ˆÓZåH3„™dPŸ+ZTûB¸kQÒƒ*fXÇô™˜ÄXi Ë —5D¥¦a^òº• ½ìÿ¥íòZ5øXJ@³i«À&ì&V™nž5lÖ»2´ÓÒî-ÉKòÀ/€ Ä®dd«Íä£0nè.ÚÀPY† $.§6x
+!‘ZHéH+<«2¢5ŸØæh^ã“Ð:¯é4ÀÓ¨ŠÌ†ŠY½q(Ã6c¶â‚ 2O2æ_ß2F½ð'J€G
+FØÌò& &L¾<I§B1£ÅÇp|~m8ÏøºÛ±YÜ@4B*Uó8>ŒãCZí°Z=½V©& ~(•SÄÝ´!b0õL‘,e§ž‚¸•ê¢ë¥>B"ÐM–º( G¼ð‡‹kµuÂg>%Ú,
+2;•ã%xX6¦`¸‚„H…ÛÂÁ¬4„”—wЫ)ָĨO>ùä/ùË O<ìÈfû'\­½»
+ò5ëAþq¾oobûHXÂ~Höú3¯—çxJK+×wÙ{½ýs½½K“GÎœ¹ó•g~òÞ{ïÅ ‡‚•ƒŸÕeÏÅ
+DX‘Û"˜0Š"ùIúsí×øë¦l,¯ŠF6H@+…ˆ¥±ja’dÂ0 As¨Ož£a$O É
+“|f–/…d•$]rP ·­P¥;òÝ’/ß‹#·³@¨$Ao£›¯§&ÇhÝÉù÷ˆÔ‹u½ÿßý¬Kï;ö—`è÷^ß)eþ7¥üE°Ð]WÎ -ßð]c!²”zÅÞ@–R¿40ú—»ÏpïùƒžÑ;“Í©Ž½üõ23˜¾¶£XRfFXŸCDd½V5À!µjA• TÁg/‰Ú¦d„ LŸ™í3s‚&n»YÐET‹ B%Éþ\iHñF7¨7_Ž/kt“d½4®Ÿ&?'ºÉ´®‡åòY?1·¤ Áo¥ ‹EÓrþ ‘6³ý:º‹øÑÑVÇuãÈUÖa›Ô£‡Ï\\"àä$ÿИ|Id$FA¡Ï-ˆ"å`j æ©yݹ’N~Ðb™²XG²-Ýžæ…ªœ~1½‡Cí‡6R/ ä³°¬hýê¥SQM\¢Œrï¿ÿþ«Ï¾têÔ¹Ù¡Ÿw >¯ÑžÛ¸¡ƒ¾ ÒS9Ø8–°žÝ~úöŠÜÖµ™Cå®B¼5œôïŸ=~ûï{í…Wâ(ÞêH«d ŠÍÙ!LË$†I°B%R­àöØDC]åÞ¶¦¹
+SXÍØ£—î³Ú®4ÿ$´VtqÅKò”êÿ2“™áÁ\Aq% §¶È:!rXÌËEÀÈò¬`Qûà9ó°éýÒ‘Vòv€Z¤ V‹6X˜®‰?[ÚaPéeÃ8·Cªà€iÄy6UUÕcbûÕhChâ¯iѳ|ÄÄlÑhDKsiÑZ=¥>“ç3êú >ÉA¸d NOmɇ!KÑd&£& Û‘
+€.Äëogb>.TãÁ ×"XŒ‚F)ÒnFÎÃ(z-KÕ'Ûv½ºàákN‘DKO-ý-x)Øv.Ùò ª ´ÞtúÊy¡Ã+7~Gj§/o´¿^]HŽa|§³ûñcgàËõæî^Úê½È“¹äÇY²Pª›‘?EI‚¯3$OflXW\ýù"?’^MȨ́ì0²}ð].µéÓÑ4În&fµ@—Fj´óÝøZ™Ð¨F»@=¢ÕÉåsë)ˆtø=“$³RÞ Îôsèƒ
+¬%¸!Û¬uýw|ÆXÈ/³Ê¾ÌÄ€¶¨,Z«ŒæOŽ4CfëˆÍ:—mîmó,Õ•ÎJéÄœ"ØE.VÄE3¨òŠBb4>ôðyûðÃßøÉOo½õžù‘ýí–¼æl»kS}y~[bËHXÂ~¨v`úXa®w}—½Óí²>¸ròž{z뵟ÅQ¼UKËÚÔeO%†éXX6 +NÆ
+„ AƒÕ*Ð µ¡¦úhëŽÑln5mµ¹8üÙúò‰:ÁµIDþ/¯Ø…p2piÁLa—Ñ<`µ,gzt¬võ1kœÉ$æ.
+‰‹³:)¨Á±º,Ž7[ÛFŒÓ.iµKzã¨Î8’-
+k
+¸YˆAƒ–ÒT
+™”&†‚ /Z7aO†´™ýbá4ܧ´œv%цVG5Rµ…åÌ Xµ TˆA”mG3=¨rP?ç"rüfšE1‚>B‘úŽPô4ƒ¨þ½ÀW,×vÇ(è§7Ÿ{½onô'ê»®^}õ‹X¨ù¦Ów^®ÁAÌÞ{jù;ÉB1ýÖ½a²|è™ÑòVññÃgVìÏpR]Šòë™iðÑó"TÍ%¡¨³Àwdb­¾ú ¾ƒ]ˆ°ÅË([ŠiÛs8Íq¨0)P æÉBÙŠ6Âåíyé¡-éÝj5q#¦3h4ĸ’É/¡bQ0E2-ãF’=2ÌÅmdÏÚY£mêø¿Ä*#é(ø•†is3i10½ÅB¿ÑÜoµ.äYû;ýZë÷à¬
+ô @iG’0sª&ë¢c~A{ixG4t•Lßv«Ü³¥öçwÜ¡G¯ùS˜Øâ—óš~FcÓD±ìh:}ê®Ï`¡ïÄ|¡Ïñw(ÔUù÷¸‰‚êß··?:·ÿÃ{"zñô‹…­÷µNeå
+W÷
+eCã†))D¸PLøãP·CJ¯þï;¿~àþ û玶÷¹v¸ssÝEÅ;ÖwÐlñ¿öÌÏ;EÂöƒ·BË~­Ë¾¤Æ]ï"ºì»z§†ºùñÇžüͯÿ7Ž]öI—uÙÓ)8Ëb`9Ì‘‚å£Dßqˆ ¼[صõuǶãA)R³ñtˆkˆö“ó[DÀ“Æh· »ÌÖ!«eÚ.¤2ºb¹ !ÖF£˜n§SÈèOżtbdÎðæ§ú­–q‹eîD:ý¤::³zt&ðÈHz´24X9½~ЀÕI@=šP’ƒ2È*FìhVIoFd_i‹t/ª¨Ç,Lºþ,æ{P¶—‘³DÓ@
+º•&ìNοAd¾ÆZùÜñ›côı›ÖÛ·õÛ›»Ï%[ÿ38±œ×xêÆ;¯xGvô»Š9$ÆÆÏx"úm{û#óD‹|=}îžÅꎛä¹#iÅýbûíTþ(µnÒ3ö œØ[yÕé0 |GÖÍ
+)ÅÌŠœô`´e~× K¥ 1
+’¥ÍkÒ§3…]Á¸‚Ñ&Å<ÑtàY«º¿â r(Þ D¿4'ü
+D‹u4Ï:ä+Ž¸+ÇsÄuPê1àOA‹YX1ŸPÓ®oCQŒ,TYªkŠK úôÓO÷Ûß>þ臖o˜êŠ¸«ƒ…-……å¤W³½wÞ|wbHXÂþK,¸=¸m[ùú.{§³s¼»gräÀõ'oæñgþøÇ?Æ«Ëþ­çÞ òËqHˆi©X.<Š±B!Tá£O¶¨¹¹ñhmɘ˜Ø³þ€éwR¨N‰6ÁSvÞaµ¬ä)‚¦w}™›1d`„ü %« þ1‰”3ÂÜ`¦®Ãf›6æpnCcfÿ*ç²Ô!¯ÁŽhÀÎl$¯5ºPµÈü © ð¿êö7 A„D¥ ˜µKß0/‡Ò÷¡Ìš®—¾å}Åös´.EŃížœúg¯¿-FAÏßøãWFÿæ÷¿éï<d*û¤ƒb¾'·áÔ©s—ç…>ùä“#ûN/Xh•ˆèœëÕ…74vºöáðÓc³¤”-ô³óÇ÷d×K²ÂR`;Gá܇RÛv/#›,(Z—¸ÃºPE#fmEñ$iòK_¥Åœü'ˆ¨Õ–#¦íhVµ$“ç†,T$ëE"Á”žáO‚4ÐÅ!Vtf×ggYýñÆ!")” ˜ÓÀ[õ]9æÉæâH¨vº@IH¯jÝ à!åLÊ6>fc­Ú@‰:Cb(S›Xyq‰x0šýéOzæâ³ÇÜ<v5u—4:ò7I¯69žØ–°ÿƒSš(ÙZ³IË~º»{~üÚӧνøä þóŸãU8tç‰ó,D¶ ‡¢‚eJ–KŒÁJ˜Qø¡ •Í5ª û˜DuÍúYÊñʵó
+eÕêÉ–¥ÂVøzÂWõõÈà£Kß½›¸8ûçƒ]׿¼7«öæt«SQ1!̼™&†ïΚÊÅÈo£[æ0ᦷò
+¤rQ{’dV$$ÄÑ„ÔNÓ‰:çgt"l¡pœV™?ªÜÄ!%#\˜(46Ù»ÎÅ™}Bz¯
+m€ÿ•Ô±)Û…¨™‹]š/M¦ƒÇ4
+L/zï½÷~òÔ‹Çþxf`Êã‰Tç7Úsë7vÐïîn™Ll KØ›½þÔ+ ö昖}Ëj—ýÀ|oïÊÔ‘[o¹çÕg^‚$^8ä© £rèPT¢2ø16•šŽmc6.e!*…8 e‡­×W³Ri P Q§+1üº$u1”H“°šz,–9»8È¥÷¯Ðˆžå 'Åâix²†_£g‡mÂ.‹±Çf›´Z–M¦ifQg)¥} æ™
+}à‰ùA„2AI Ó­Nº£a¿žšDÂÏ9
+ç¶:"Éu**†ä;Žèw,îêüÙwÇèÍÝýèÂ5¯Eÿ oíÚco<›bý%…ö-2ÃÞìÈBï¾ûòö™Ówï E¾§,tIËŒÁ»-}ËŠ½¾àï?ï<1¹D´áG³s¹ë¾ýž±½YµÇv·²²=µx‰gø1M
+×ÍáúQ¹r%V)½͈nCÉ«MÐki]ÓÐg§z¨³˜8BÕé.zžáè§gž &“ èwQX×1Óy†ˆ$×+-õ*wHË…$°Tì:à}åÌÙü¼rúì#ûO\œ\z-2ø‡pÛùÖ®åBçImñƒBÍÏ©Ìï!,ty^Ú¿ÿýïwÞzû§Ï½üâ“/¼øÄóÏ=þì³?óÔ…§¡?ùØS{’ôǽx!ê>øОñ?a‰¿ûÉ¢_Pèð•×« –-·7wÿ9z£oàɉ…G÷붻È÷ñáÃg«»öÛªn‘ÙǤ[ŠŠÞä‚e®þfšø!{
+*ËM*‹Kùç?ÿù‡?üáâ…§ï;5Û7àªm+Îo)(¨Ø(½Ú|úЙDüOX³]ŽpL˾*¿Áíò¸\]c]S#®;yû³Ÿc—ý“÷?ÏEä—á:ªY¦ecYtÊŽT´•ŸÞQScíÑúc¢ô*Ç¡„èGõK€7•Ú–£ ™-“…b¿‰áѱBvAXLCVÛ¨Õ²bµÌZ­c:ã„ŸÖh'È{±Kíóª…íˆ,Õh
+J <tÒóÖÏ=ã4=ù¶zZ`íKʃÌÓªÚRíºF^t ߶'»vaGà€gìâ¡›Þ¿û<yòı›^>|qzå…áÉŸõößìŽ,íôíˬ9©-†;éÜôï`Úç‹Yȶ ²Üž®þù9ûãû':"ßÙ;²/ï?eð!Ç^§)ZÉ©¿¦ªý‚oôö?7:ýèÂ5Žœ~ï<F¿¾ã¾;—N,íîÞ“S¿O»Ý©ªnO->Á”ºé¹A$­H¶©€"„Aº U䦵«x½2Ì-Zm ÿgóB!*rA OÜäoYt šLYl¯­aFe§³
+7Ž£_Š)4´Ì¸D3Rzõ¹‹Ï=|ëÜÀ˜Û)ËoqäïÞØ8V»IH¯&,a Û|O±^˾>—ì²ï›éî^?xêƳ?yò^â%ÞzúÀ˜¨laNL¥ÆŒBÔF£”Š‘R²Ë¾XôÔímÎêa‚ÖugϯSÉ€8Ô‚Þ$Ъ§·ØTÝfu_‰ØWœâ5˜"&Ó¸Õ²lµ,Z,ãzã8nÁuƒjõ¸\>¯TNhµ#„8>Šë†µÚ¡$«
+Üþžï?ÙÒ™gOvüzø¯à.ù,'õTÆ÷}Ç'ýZkåÉ·Ç……n¸î\¸ÿ ë‡ñÊÄüm
+íivêÙë1ݶåÜÆUí/´÷¾Þ7ø,¤£¹ý¼‘¼V{åÌY§¦ÆIwYº
+ú’¨íÌK5©²(üåÒ>_ïÄ ¥¼¦r±¶`2‡í´É»qဩbÅb4“‹¨k¥A¦‹6–Ê¡K1m\b <²½ÿþû/?ýâ7œ‰J¯Öä5ÙsÖƒPAÁ®pÝH"ì',a »Üî»ùΆܖu]öD[™Ï70×Û·2uä–h—= 2ñê²oÍS7ã †GEËÀ²Ä¨I´•UÃèÊM;·ô*fwj‚k]ö¡¯{S&îá^ •~Ho1[Fl¶ «uÁj]2›§tú!®ß–ÞgOê2¥ +¤óÄ,ßØP_Ù¼J5¡Rg#Ä6´Ýį´̲‚rn§ò‹Ý¿¿ãÞï¹ï§·œ%€gùð…™=ό;¹¾¥o¥"¼ìh¹ÖRy¦è¶´Ì‡„šY’·¿Õ&¯ÿ ™+N¿íw¿ûÝÕ?9ÇÞÚéø•þÃ~ÅHíç8)w&›OjŠ÷fÕì) Þãêy§³{Z¶ ²P ¢,Š@-(¡<„• PÈBVëøÖ$ŸŒÑÆ$& µ~†¸*YGø&ÊäHUYþÀî­ é : Ô+¹=ñl*š/Är9˜.pòF,Ú>)H?&¡Ê¸äœáaíÃ?üÙO^»õ–{çF÷µ›s›²íÎceUʼn€Ÿ°„%ì³ìÌ‘[ªó7uÙ»ƒ„–ýÀµ‹ÇÏ=ÿÆ˯‘åqùq™‚ ½¼Žš:DÃraä`%h~’‘Ú][§›JF3yMØj1Ã׫g¥‚ºTB¤;  8Óg%났ó¶Œq½iȤé+,Â^²­zŠdÆ$Šä ‚Æ”‘̤HLé ±¹¨<25Ô
+ÒZPÝ&:Á”.o÷îÉ®;d,»AU𣴬óbýÜôW˜Âw¾-]ß •ÍŽš?<;~dnâÈÂä±ÅÉã1ß3sbÏÔñM¾oòȾ Â÷O^=°<²oipy¶gv¤sÂåêz£üw¾’oÒXgùjÈBˆºhJ™ÊCØù
+oϸ,G^äÀº¼ÐW[e àªÈhk¨Úge¶*Àjû'\Â\¬O1³(¤ ý†ã•Ý°ï†¸€Ð?þñw~ñöùóìŸ=>ÒÞçÚæ±çº!ülTóýï›o&â|–°/´¾Ö‰ü|ç*m¯vWµ:ÞŽ¾™¡™Cל~øáÇ~õË·ÿµ¸ü¸4¢Ë~Sá‰C8µÑ)¥<â¦ÌÏÞLÚîºÚ#Å– VŽ~
+¦ƒÖ’D 'fˆGIõX>;€sÚTüž4Þ ˆ7!àM¦p‡$œø $"`R(˜"‰È$ê+ú …l$c= 5
+§2x>)ͯC*£ T Ʋø˜1:JH³i¥SPY]–÷êcÈoûÛþóŸ¿ùÍo}èâÁ¥ë¦ºûÝ»üβ ô9Î;ÏžODø„%,a_Ò|¥¥;w‘8T^Rëjp¹\íÃݽ“£+ÇÝzñÂS0ìÀƒX¼ºìE—µ•Áó#‚³(6 f`ÅQ-û6hÎâ55Ô¯²tÉ£¥D_©¤“ \´!GÊæùThc¨OuèMGZUh“2µÁe2ÇÌA.{LÂê·±\jN‡Ò?ŠCb‡R%ÓVao6 òB-€c¡
+J':jàçèFòYïð‹£“ˆúI§€nqôøjÊZJuö±|eH6YV|R‰Vp)% l “¢EÑÍ#ÅD¦ÄLq VŸ|òÉ_ÿúן|þú“·ÏNzÝå…õ¹y›¥W§»ô KX¾²=ÿØó­¹ÎX[Y]´ËÞíŽÌöô,L¾é¦»~òÔ 0ÅKžãäžSŒÍuÔ„DS1± !–—„l<´ÃÓë6]°µéඬnú-ûÏ+™æƒV5ÚèH
+dØ&m¶)Þeb{ÕHm:€^#YÕ¯ìà'¤£TPÏÒ˜Œùit"SÄaYYn1gâH4-Í,Ô
+°µz¡ô0’º€ ®e«îá‰Í:áß4 mº##YÈ€¤±‰ÄYD*‡¢wdík×^›ídRˆGÌ{滛Õ~%å)²»4wl§¥G‡ì‚«,SØQäMÂ
+$Ñ™Š›*¥IOFTq‰ð8öþûï¿úÌK§NÝ93´è÷ ÀH•Ó²±ƒ¾ÂS3œé KX¾ž=|×Ã%ÙþMZö>ßÀB_dïÌ‘[o½çµç_þûßÿ/ªÍôRQùåÙ!&¦ab™b,+-@ˆðÞŽ#eÕ9Cõe³v™»¤eÿyÝÁ0¼ki.«¦Ë`˜³âb+F}$—ç×ÑZH´AþƒFdm¿€
+<P3A[ðÈÐV:m˜Á“±:m,—GÜ—mVÈBN€Æ&.¶!ÉKÿ¶úa:±Y'ü›Ï ©
+€6ÆB«,”ªBj Ï£«3…¤# H%úZ% ! ÔCø‡Ÿð@ eµ_,ýØÎ
+y˜™JÑ_~;&@åqÉ'òÉ'~ø᯼þãÛ¦#0Ð’×¼%g“ôjii^Bz5a KØUÙíÇî¨*lX­£.­p·º\îPpp®ðàÂÑ;Ï=ðæ˯Ãp¯¡C&NFŒÑ`˜&:'gÒò1%s1{*
+ã}Ü´¦nçb]ùT&¿ Û eeJMv@gÒj÷@Š~Ü£7LÛ4]y‚€‰éÕ`MéH+`<gÿ„ "´Á}A à߇•h›ÚÇ`ŒJ™–‡d!@ÖòB©HÒ
+Ê9ÈR^äÉ›u¿Ñz!=¯>ÊB±;² @Þ‘¥8!­Uƒ6j‘Ý8R]‹ÖjÐ&k4PšŒ´& ½ÉJo2Óš ´f¥Q‡ÖhAe:Ø͆ó*>µ @ |ì!SQVðƒWl½g‚ÖíyCu»h‘](CÖÒQj¤h>ƒ²‡YYMt”¨¸zMÆBe÷ßváêc<‚}üñÇ¿|ã­{îyhyêH8â.jÍÎño]ÇBÛ[ü‰ú„%,aWoûF”•Ô®âÐŽ]î2§Ëåël럚8¸÷ÆûÏ?úöoÅQË^‰™¨—è¢j ²j£RÊÙ<´† ±X©õu»– f2ªD n[‹äþ+å…š œ°Î8ªÑ®èŒ#ZÝ8nÓǵÚ%\?c4õHý™¼€žî†›H
+p¥‚z!hŽÝ#ˆ@x© [‰4r©½LæXÖƼPH,´ea)žf§&öë„s~—ê¢å5 ÊB )Ù˜‚,¤7F²íE©þIÀ! 9’C)þ|i0SÑiÀû &葘M}¹ª =9dâø Xƒ©Q]i F £³‰ˆò!xŽHµQÉûöµÞ|"_Dž­ÚPùöye÷ZcZ - SJù¨•]űãLtÊ4Î@åcžÅ«ÿþ÷¿ éÕw~õÀ]3b¢3â*õå溋Šwl”^õ¾ôÔK‰ž°„%,.6ä-)\›Á¸­Æ]ãr:ƒ‘ÎÈÔÈ܉C7?üðã¿zûmˆC0@ÅåÇ¥¡jÊ¥J8 SS±\–Y(-`
+Ah§µñ¢ô(º:Y:šãÕÐPy‘¢úêã)½úûßýþñGŸ<²÷Æ™žAwM¨¨ µ°°|Ã(!{ëÇÎ&¢w–°8ZMQ{éΚÕÔEu§ÛéléìžÝ{âØ­O^xúw¿û]¼ÚÊ-{"~nÀ!>¦Ä0‡ËfPJµ´37ddº t§Cji:^’ÝcÄêPÐË!šbà‘¶[­% B2ÈBpŒí²R5§ÑŒÄ”5TÊI­v× Lý:ã¸F³ ¿,[Ý–-ê5Ú˜ ZÓ@mìâ ™Ù ˜ 2Ö³P3H‚,t¥]ÏL{™)Lì× ÿæü„Äì¦ç6!ò" Úº&F–q‰…¼Á “¸~R¡Ü ) ÿ¨Õãú1ø„ët‹ð\ 3x0ŽB|ÂõÓZ|‡\d°«ÃvQ@ÇôK©>Òƒ"èR°;‹UÝRµ“æå¸ÄH—²•9¸X&?:ŒBÑE—uѱB2•ii[â‹ ýå/yöâsÇß2×?êií,Íorlì ÏÍ«?4s8·–°„Å× Ÿ4å…¶ïØMâÐnGCT¼•è²Ÿ;xýuw<wñ¹?ýéOñº){é±gx„<Ù *–Å ìHC9ªN >Ãunzp·c¨Ë·hœ××g«ášIÜ‹A""ëBÛ¥ NÏ èCZí²ÎD¨¬B
+²Kº’øј:J*k꫺!Ü
+H× °Fw Ü8½8ÉR¶Ù¸!œÞª .Î(‚ÛÐzrd¡#r†.ùáI¨'ü;å©ÝÞ¤Å@y٬ŵ¼nQ§[ÐGTê9¹b‰xžµÃäã-—Ïj4£*õ8ü¨–MZS3¢B{Jå”Z=ƒGá?Ï°MAªÖ •d­T›ÇËôý†‡Øgby39Noq¤nç‚«ç‚IÈ6–ÃÄ2Y˜fýjÅ0œ`#q“^ýàƒ^{þå3gîž^ ùíMÙö ôùù»œ;»á:a KØ7g÷ÿøÁÚ¼¦µ¶²²Ö¼µ.ûHÿÞ飷ÝvïëÏ¿ò÷¿ÿ=^8Tªo¥£r ÓÆ¢+•¢ã`f f…8¤F ª1‹yºIÓÛbìí¬DÚŽÖ8"rFX‰6 ‰b¡þõ.¥úsDa½qÌhœÑé§áî`L-ó„á|AÈ! ‰ƒxêdŒˆÈ4‘F3-(šÄu³&¼?[2Ñœ´±(£,´:kÑ …Ž"Èa¦â—?tÑù„»>˜^ìfØ ­ÈKÖîÈH2¬±ÐZ]ЊV·¨ÑMkñqµz>ð…Bw¯Xè/í¶4ñd’xz¦¨SŸ6¦Ñ7hðZ,fÓ~ˆCÃB ÞçÈ>Ð`r'wš{Ûgƒ®•\S‰6‰A#\JËbaj¸T£BòuõÒ**ë…·®>|üñÇ}ôÑÏ_ýŸ³gÏÏì ¸
+6K¯:UÕùáD NXÂöMÛ Ë§w­uÙ—•Vº‹£ZöÁ¹¡ƒ‹'îºkµË>^jeFV…­º11 Û"Fm J)Žm3j&Íæ—¦{—cj¸÷doÛ¡úüž ~HÍ*&DPÐ+N6¦#-J†/OÐEO¾¸ÆüÁŒ”£¨?I2köÀ nëYˆt•j‚¨²ÆLjš
+øÍ·µ›@ ð6€ù», Ü
+°Œy¡õ1^£›TkÆ
+Ämñ¬H8#L‰jn—™åµ±\*n—X0U$ hµÃZø„k÷ ³Vë„ÍJÜ”A/ÒM;µÝ^}Ç`xy¸÷ú†ì~»*lbSAM*š/B­"ÿ£Y7LA®V"»íÄýWþõ¯ýóŸÿ|ç­_Þ{ÏC{gŽ µ÷»·¹ìvOqñ¶uô;wäøßxþD”NXÂö°ÅÞå­ùÍk]öUžÒV§ÓÛ<rÍ©ûïìí7Þú(jqùqJÌHA7tÙ³15Ëc[8”í:JE¦º×dš®ÓDšÃcC·O÷^Û\Ôg5õfrýjJ‹¸¢íÐ ZTT×^Àhê'ÚmŒ£8>T"ô'KeLQ7ÜbµCd^(
+BÃ
+Å4ü£F¿~X¥žW©gó–d!è»·h›@R=Õ êjD» ÑW!Ò+ÓF·T –rÄöõ¼±V ¶«óŒr4ós¼ì¿ØË¿Ø3®úõÿ|·’¾ 5W]rS ªy#¢.º­ ¥á•d ÂÍ´|Ë Âñ%‹eÂj·ÙÆ3lãÑÉ¢{pý,|˜‹DA‰hFϪXm\Öƒ1J£Pi#<Ö˜?–)ê’J4Úq<&àQˆÂ—Æ9›uÆlÚ_¦Œx†ûn¬ÞµPg1[¦2µ
+t+æ`–¨
+R¾G¾ H·ÙÕx ù×óm m;H£oiÅÈ·àEHZ!’þùžÿEî@Òó´uÿFT
+0HA[
+><ž!¼b„ Ýpí?åg£;Â#=áo‰z<ÂG=ámùZžù%< á~ ‡ÿ0ã‡éÜï’slqòX.h m!Ò­Öqq´Xè7³¼têmâ"
+¼ee固ì§{zg¢ZöÏ?Ï.û³'ïå ²M8ã0›ÂÞžŠåˆýÍ¢Í:Õ¬é ·.LÝ9ÙuÍömËMúþLs¯Þ,UÈêôÅ 4Š€OGså¥q|Ioê·§t¥‰§H’Š'ȶ2¢ÑF3Ai!úŽµcZ-ٌߕ…èÉšUèe
+½[Ž4­ï)¡NÓ+N«EÃEÂ`‘0P"òçI:Òy•j× çÚ"ÝÁ}açB¥¡ÛbžÐh–²•=J,ŸåóPu­–/ªµA
+mÈRQM¼@èïÿ;!½zã³C >ï@]^£=·qCãXA¥¿j –°„}[öÜ“/oËöïØQ±¾ËÞã‰Ìõô,M¹é¦»^~êÅ÷Þ{/^uÔ}MƒL¢­lýÿ콉{#w}ø?ÒHÖe3’l˺çÖeïú>7Ùìn6ÙìåS¶nÉ’,ë°.ëð±ÞÝœ%! G’’p5…R(-á,P(¥@)¥¥…åH¾ü¿ÏgÆÖj@Úøy~ô~>Y–¥™ykæýš÷Ijă]’ÓfñøLo€ ¯x={Kd*ºÖ¬¼§–|xzúÚyWÅë. *–ìÈýâïPDƒ,áÈ*!]6Å(ê
+Ãåfôa˜YŠ7ôúfŸ¡1ƒñ8Äß ;‰IVùðA‰ì«M飃"R  !Q÷1DÞ±ÂõzX4Œ‘U=ž-Ÿ¯z¹ë,›#5é>Iø–úJL²Æ*Á7¿)Ü´ â© ãÚq.Z¾šìŸr§)ꪓض¯9Ä“*ÉŒõÉ%äÍEô4
+€ä4…ÎŒÙ×rÐWY<¶^Üxkeãéø=…e2–ÏÛî‰0âó82'dS£H¨¹ÄÉüÇ©Í5ÇÌ Vã”á^MØ£a{Ę²švZdDsJöˆÌËÛY¯¿|¡~‚¸*Å0Wøúú
+øî˜U4ß ¿öp¬^|3£~—bU§­åR† ÊœRYU(ªÖ®È™lteÿ„;9kMâãXœFïVJNêÅ^íá ö¥ÛO³ó¯ýì
+Ǿóío죟|õ·6׳þ¢'¦&'oŒ^ž99:|þ™?ë\{;Ò‘Ž¼®dåÞÙéƒ`Ùé»Ï¯ÂYöÑüZ¦QÚ{ê‰gþò/?þoßú¸×Dt$g9D7§Rƒë³ÅÑ!p¹¦%§'-a'q…fvæÆsÅÜ3•Ô#þ‘ôe2}‰ÛœäªCŽ˜»kΊœâ¹ÀÉ^zaKÓ=Q‡:M*"„*î—aîPÛ„°fð'æ8QOk1¢Þö__Í¢ÿ÷ÿòúX½¿f[|¸LÂ"Ûó«ÿÿ¼¨;?ozmëÆûGðnG³X‘‰™ÿ‹AÝNªnwî’t°Çí l±ì•a[‚”•H\Ý¡…ÔHHŠ¤•²‚W¹‚kÊ^¥_­*uÉJi “¬ õÇR—w»ÓýÚ’«ëu B|R@õêÄöÛA¨ u0ŠÑ#9µ}÷»ßýÌ Ÿyò±wîd‹Ks©{§/ /ÝÔJhxù{Ou®ºéHG^‡¹;~âÄ¥Ö,ûåùåååd9Ù*=ô¦§ŸýäÇ>ýÿñàBwTUöZ±E|óÀ2j8„¡£jÉ]¤äì”1èreYWya¦TÌ?·¹öÈY_jÔ]_"Ó~"åsçTˤè~ ÀÖCvä<Ûv¹
+Œ+;…G-ê0fuN¯oaI‹i·ÅBSú¨Q¿mДqEØ!G–5Ȳ ˜8"¶Oîו r‹¢÷iŽ|éÜ¡¹-87“ËOc”"¬@Ö´H
+4sL šNgÅfÛ BPW(z—¢J^í°§zdNŒÄMÈy-0¯’e·*4jŠº<›>oÍÃCÎa˜—»B»ªÀFCN`ê°!°¯qø×]†+X­ÛNgÕᨶŒ©Õºc·×à“Î*À$Š)CJÃÜrá=î‡<ž8„mðã˯ÚíW
+”20PwßPÙÃ>_ÓãÞLÂ@­•5XvßÇÏ<åy¦Þ¨† ‹vûVÛ\` ²ÐøhX·HׄV‡^ÏÞá?n󭤯QœÐía_ÐX°ÚªlªÚ¯ñ
+2WÁ¥Û`€ì¢°¿ûÙÄ *Uµ[U?»d 2Àä.éÅ™¡ü¹{ z¹™³#geÈ’1 >Œ¯Yà‡Žà'Š:øǶ>±ã¨@èÅ_üòç¾ôŽ·ÿÉvñZ8˜ŸY¸¥pìòÝë‹mG:ґ׳|åã_™]hͲù*ûÜN&sµöÄ;ŸyþKŸþÂ~ô££*+ ß·)ƒ³ íw©
+>oSð9ðèr}ÀW¨ ø cÇëzè<‘ö—ã¶HªØ6@­]
+À6×Î`ÖI²ì€^©ïª¶üB¾&E]#)@>u'Ñ80©°ÛvÕfß çpnC¿ë`^'Ãì±Ü§  û뀅xïJCãÀ¤‚¥TVU5 Ñ[j·^˜D)"zmÅ„o¼ôõZ›Í˜ªã†5pœgñÈ,ÁÃ#†ãÜd\y·§|S½ÈÊ`f—öÏ! “ 2,ʺŠ.zÃ…ex•Õ †m€¬Â;»zK¤¾Ø§)jä]Ê
+w¶g!­$%¨L¡€ Ôƒ†ñ¥SDzÎ>êB/âˆ_PdUNëŃ1#åAH$²
+M„ø1¬vØú…¾ðÚÏå—_~ù¥—^úúß}õÙg?¸W~4É/O,^i¡é™“³#ÑÎe¶#éÈë_Þÿ¶?9?>wXVv\Є*û½lîáí'ßýž?ûÊßü¸û;*ïЄé> –ÙÛ í1Ô)G‡Õèd:Ù/z€éŽéuõ©Þ`ti?}ã¥{ÊÇœ p#n±OQ•fЕqu,YÖ Kd Ê(¦¸’‹ÚÄRz¼aÐo÷¶Y²¯~ O鱦K±Ú+ ڈġó*Gâ&IФã + P¤4ª‹÷ë6mºüp_’áÊ4W3ÇÈ®ž("BË#I¨‘erÑ!žc«cxå² cXnwÍçÛò¸÷[Fvˆ½ºD­û‰”Ç[eȬÐ+Ûá¨òcd!ùPЃTrR Á·CÒ[ H](Õ ƒÃª®&¼†
+*“Ë¡DçæfrîÔ×uYݤ+"$Î =zŒ!ÜtÜ2hC)¶¾ã ï|ígñ/ùKpôÏ_ÿÆŸþÉG®ÕŸÌŲ+wù‡aýÝm…c'F‡:ôéHG~[ä©ý·ÌŒù›õÏ.ŠEó»ùâ\}ëóÏø¿ü5pø‹_üâH>Ž”G!Ùж™e
+Æ1ÈÑš²PÈ cd›À°:U+^vÉWMŠ”C›t¤Hz×Mghe¤:‡ÿäç¦ÁF/²`—.sêØ°)I3`åÁûÐl˜B!v¶äL_p•ÇÝEÅ ƒ0×ÄÅT`VuýFŸn‹¢äÁ`©j[ܭƲ;0«„ìÔŽðíµ‹à±`j!Dñ2@A;MšBVy¼ Ißÿ/ÈåÁ°J» aUJ³/µ¯dü ,ÀKnåªISÀ`ï‚Ǧ×qmC§­a¼WG§«ón€—Œú¦/Méc€
+Š¶«L ì¾4TFRà
+¯ýü×
+æ)ªD!×Wï
+úÿüÏÿüÄÇ>õ†‡ß¶½ž_ß5qûèÕùw=Õ½Ú‘Žtä·OÖÈ
+pèÌì…åÅåååhnm½^¼òô“ÏüÕ_~âß¾õ¯à~ðHfÙƒ+ª^d?Ä!!ƒH¨,#Õâ¹äd¯ø„MtέXÑkkÓt¼zcaíÑÏ: óë‡Ù8ûLj$Óµ¤E²`@ü”luÔ'¨-ÖY˜æ=BÀ(“݉iX“nXÍt‹U…6ü¯ ;åÑ1,
+s?ØÚ€3eÔVôÒµƒîv²Ø¤¦ûNö„ñs‰ßü&A!vcB.˜E‹fyÜ¡Íôšƒxz»ˆ š+x]ëƨ[;eÃK.[ž‚Á¸ëÀöyÜWC*W|ÞÚ
+Öí¶
+&`L¡çV¶Ägáòïé)Ÿè 0Ê°BQî’•{%a°yvñ\—¬Òž,ÔZZI°&Y“I íÏ·ˆ¼‰Œ_àÀc¹¼Þ¼O¯2ãV¬Zº3ÐS¤«ëq5›ÒÇ
+$p»BÒ!‹€œòÈ&é2Iíym;8æÒ8œØKÆÂÓ†8ã†ÂŒ÷ÛTÞ3
+˜ª¹h-Xå1‹&×chx±õY<ä!×®ìqmŒâarÕ§ôÛ°2¯GÀœ×ÛGf
+\ÞmÒ*`×mžÉn枉‡ŸönønªV®Žô‡)XAsGæÍ¢yVö83N¢a6ïÙõ=Öp)Ví`„’œèm ‹ÂÀ=8ÓµÄ` Û¶ÄIuJHV"J¬24hOsDQ¬;οUèŽ8ԃ̛%•¼À)À†rªÓ8Ö A
+9Ä®ˆMÃŒk“e¡;æÊÂä"`[[×z½»0Ó¶¶Hò*ÍVù
+†U—,Qš4M憴1‡hNÐ 8x›«!¡@]HÊ*ZJ‹6?ó6Ñ‚¹`†¼pïRÇ9|LoÐÒ>ŽÊëÝŠÅn\Î÷·i
+m…h’ öÔÛ» cÜ°ÆöU„Ñ´´«$dyÜ@®³®ÒÓúØ,râ›d÷šOáw¨S:mVÅLÊõ.ÙXHðùÜþ¼E쇅Ÿ-·žTñUÞà­œÝIa<–‡/ÁçÒô&Eï·‚Ûõ0çª t‡í¢‹
+$ôâÏùt ›}‡¤*`#q¬n’¯‘•Ã*ªÐ+¨lу¥¨²ë4³;lJz+BÑ™ 2“4Ìia
+÷ 6NŠÎ+`õ*Ó! "$ 0UÑ•{ý0`‘K&ä‚Yß(Z·Î²y’‚-•øìèƒpøu
+p€±:”XÈcËÎâ¡X¶âeV*ë×äÌêì€Ê¹+·tß¾C_0Àx]ȲшubŠR·ÙŽäæåg?û™0zõ™gþt»ø`,”_^¾¥‚þìÔZçBÚ‘Žtä·]¾ø‰ÏÌܹÊþzýïü£çÿöS_8ÂYö¡é®›¼C°¸L‰2tH/Т³}¢û,ê,‹ç.]º²™{®yø,Yls Õ=\Æ£ZéGæºÌ
+0²à•n,cÇË}Ó5¼J{ÊP›·§¤TÂZ;)µH£YéC–5Ò|¥´¬TV4*ض‘Ï£®‚N!}Ôᬂ­õXù6—¯é¥×YeÀŠ<
+€µË2d­Y1 s
+$fÁðÖµë6’ErIß0ÁQ»‡0Æw5ÌÉaRwKeAÀÏ0Ö¦I:l  2Ø7É\¶XöœÎ
+Al6´Üzñzow
+=žg˜=¾ˆ¬Ê«lwĘžÄ"^T gʃùØPeM>
+ULu›vÒ_Eð)|›ëÂŒ)˜\¼–?<kº«=’`ì^ñ¼eöÒbñ­ $[Þ°óÄk?C_z饗_~ù_þé›üÀGÚ~c)‘]¹Û?4º:3sw›S讑ãÁ¯}®3zµ#éÈ¡þԙ郦C§î9»z÷Òòòj,’ß)”¿þ¦çÿô#ßøû¯[Å£šeOJÅ·´ÖVß! ut£Çº$§ûÅ“z¬îaÓ4}%àNn¦ßXË>=Yvít öÖ)º9a9$K
+…Õ|×â*¬Tj«¦÷z®‚_XˆÞ²Û듆8¥ß
+儘øÕb¾Â××_¯ä\ †-›£Çº#¬2DÉVyÈ¥NLôEX®80°Å3äì"ÈfÀþ:Õi›<.í:Àµ4óÝD2yWæGaÚ-«õÛ^,3Ø·AQ>Íø »øv§Ø<¾ý:ëÚtkbV>á[³hÏÛ$+8ßÓû7©ì¾amÐËW¨®óéRFYZ…Ä!J Ø‹RdÝg»ÁQ"»×¬²ˆf•ÍŸ„蜹ό< €Ôšëƒß“8¯q^esEŽlSÆ0¬LåÆ7† ë|Ÿð]¾}Á5°øHYuÀW¿9¬¹ëvÑUu8j¾ž¼Y¿Å7yhê»Sê¦Ù8V°+‘»¾Ã¦¨W‡ùÛŠ P«ŠLaÁ“ÙÂú›ý§ê®-š­°X¦OtF)¹»TÂ|é;Ž¹º§ŽäÄ ô½ï}ïÓ/|æ©ÇÞÖÌ–/­Ý5¹01qßÍô oºþ–Î5³#éÈï¤$ïKºç¾ƒXÙ‰ +—ýþX!µQ+í?þï|á¯>ùïßùŽ0“èHn?õ"›XlioÀ¨”Æ1tD-9ÁÈ.$ìç<Îî.OË›ïÙL<t/##!ýØǤUØ"ZÄ‘e)Q#ËzdNwPö{«
+— 9ïV=nÞ°²[ÃXB/Ït#1œõ «‰….$m/Ùå±>Mð ©J
+`g9 ¸x=×-2prèÌAÇ
+ [,áb×]Ê`²‚#~~xëy>U©}Ât5(”•nUÅÞÁ´ `[MúÚ,&Ì°€ƒ¨Ó\åÀgËʶàœP_€Ã\¡è]‚¬2}å!lMÕqMUF|
+?àR1É×ÌÒ€] Lê¢ ¹ …üs;QD4È’¹àÏ‘²À .<êŒ »sè4€
+¡ú‰óäGœ±ñž˜[—òtÇ]ê(×¥Ô) V²àe+øtiX ……&{åx
+ªó±ýW¢ Ø1É[¥é}Æ%T—ïÙíu
+γ¨tÉ¥Š‘U¾¡÷«UŠ„ôò wf‘Êp€‡u:Ù:_>¶|‹¾P˜Í*û”Š2À!›¾â±oÐl ÙuN4 ¡-yrAvB²ˆx|­jUÅ^u×ÕôxÓŽ—Áî;Ì Ø/‘)SÜŸ8F¹Ý5 5¡‘8ôãÑ»Sô˜òN¼„ë
+—§s~ne!aλ IuÉJÖî `6Ç¡²•cº8Áž»Öu³Imõ
+úŽt¤#¿?òÜ[Ÿ;u8¼VÙO.
+…ò»¹ü£|•ý?|ñï_|ñÅ£òÇî’× \ùÕ¨ û¤’3ýâÉmvL‡ýèl¨ÿêzüñ³#Y;¶éÕmxð ©IÚХîÅáWi[­È}S¦ÀOsÔSÕÇÌÒØ =|µÉZÅË
+í*Qt‘0×aI»fƒSôòL|V„(U܆GŒi؆Ù#©½kœSÍVU†„¥¯àa:Qòö°Ššø›þÚ y Èe`+ùÉk¯´P$†#óÀÚ†˜ÇŽ.Yº¢6EŒ’‡ŒÊ¬LVF\Š¬»ÌÏÛJ´â/BÈL`BþЊ¾-ØxΖÈtà“YëççÚ÷¢!™´ ï*(eE\¶a“EYe
+_«.ô R€‚
+‰þz•£×ø{Ú´à„_^evéjKeXÔ…g{µ%ƒbÃŒ®¸¤—ÏN”î+õˆ
+gŒ^zå‘^ÁWFQÁ_Ät.´—Å)5Ûa8l ¨ô*3”2&tLÌs K !ú›tßÖˆ!=‹…„†HB£l>LV¦aµª,—WZƒ_5m.5~û—mè+ë¢^&Ý>×ÌëÝí½¨2oa›$]¶Û·ø6Mpp­ÍÖ´Z·Á¯6Û6?/c›aa…;ëÚ3$XEÀ€ZÓ:$HTu››î×, ñË~„¥ã±Í€,àȲY톭´ðÅTf‘¬Xä1Vdué©ž°—\§Àw̹M›Ë$–'á>4H£—Vî.]¼ç
+!ºïó0 S
+»¹Â£{O¾ÿ}þû÷/½ôÒQËt'¤b[; ñÃ[Énô˜Lr²ì]Ä”RQ-Í]|<¾²;jË»6ÕòM·2`ÔÕ¦{¬+ëóÕÚÜAÀîlØG‡}‹1m ô䀟Áü‡|é›À¶’dÙI6)¦F1[pÑ{Âüš«
+Ù¦R^앧€¹d»#¬Îèr
+â¼—£=}%|8tg¯—õ·*͕ʪW±¢Ç´¾
+*ëBB½ü\ÁwT¯êÊöÈÓ`œê¤k‚ýê14†±ìMmÙ‚‰gö«Vû5š-ƒB;Š3XHÕ/i¥32?b\>5ÝÂæºa?«Ft®[2£BkP‡Xl»„P±Ü¼ösJ¨ ÿîw¿û‰¿úÔã¼}g£à¿?1µ0qsáØðÈÜ3O¼§sÅëHG:Ò‘;ÊæbñÔÝã9NÝu~å²ßÙHf›¥íÇ{ÇG?ò·¾ùÏ/¿üò‘ ob“É­eeRtD(+3ŠN:UI¶G{[‚ÉÀõÌ[ãÆÀq, L0ÍÔ|‡†uÀWç¸mš+¸lùcXŠÙÔûÔE`ËLŠ”L^î’A㮑
+°°=xÚÈ»²b/ßþ¨=Z×VŸ|Í+Þr¡ð³às‡Ùéþ¶Ä!°ñ+¸®ÈÍlÞ#¨-`ý)f‡¦› 3Òá1dò
+«˜%«:$"ãý]8œâo¥l™þ,bP}Z¼d€= b‡Ôñ^4¾0^åŠASÑë›
+BŠÝ~…
+Æ£Yw)YÌ.^6ZHAÑÀ¾F°M¢žo؇/¤[©&vÑœBš‡ÆQ™J±X<?eHÜÒ¨ÇlÞs8¶¢ O4ž&b9äƒVw ö*
+êcAY{ŸœÐ-£Öìây¹4/dP;»SÇ°$Mç]žªÏ[¥Q­‚·ÇëÝ÷z¶}¾†×[óx«noÉí)º=àçM_b[}¦IS…QcÒŒWê2צ2
+=¦”œèC'FŒ~'qÅã¾z†*….76³ÏÆæ·G¼9ÆsV¶Ú4éÕ7,š¬U™æ[©
+VzëKª¤R¶@¢C'ÜÉ›nõÉÎò)Ô˜NrV+í†<‘f;B
+Ô²Ù~íŸßñöýï|ïƒø×Û7(L¥'ÞÞ÷ÔK·L|í©§Å+›h¢‰&ÚÿÈÞ°ý¶þ¶@¹Ë>Ø»ìãñ…LîŽK‚ÿ@ÿý‹_;Ä.{WU¯mDáF’‡"&2 6ÖªÅzjÑ.
+=k×Îy 3}Öprbk~òÎÞYF;Õ Í
+k­ÂzkÑ^2 S¦kÕóµ¡Éàmé3y¯."¤9€GîX¥*
+јÙÅ í^M1-’¨’§Üª ˆCÆ8lb–Hò2,Aa‹ ´9Z“ê2%ÓÝ8ð}1ð­Ó Ë“6\jå`"šÝ„4gs¦Ýø\rÚX1ƒHLÂñªBMøŒÐAEçãæËN¢ Æ%àv}|PȲÛ;ÐE GÓLýy…Ó;‰0À?¼æ— Ä:½wRJ¹÷'RdN‰LVÁz¡@5Gæ»äÆù Ðpƒ2é1L³Pâ q!ç`‚Ì]bÙlÃñe*Nu%É@93UI¨‚./À<€TÁ¿R©‹JØ,_(§¥À …²vMø!œHÉKTÓ#1­"Nc­q
+ÇS”ä& ÜX/mB}¯R/mÅØCù°¼ôÒKÏ?ÿüÓŸøüƒ°ƒ~%Èžíä³Wƒ~`9zI¼Ž‰&šh¢½F‹ß8YÖ²¿¹÷B`<è÷O-ÎÌ/篼þØeÿ“ŸüêŸyæPþÕÅùat(Ì—]« Â1Jµh°ÞjÉ 2Zƒ…µòL§->ÞŽÞœçTaàjK>~åçÇZËëÚËwþT®Z$ QdjX»âª]¤¨%¡|u+Vëj?ýoGc¸&¨”và‰£µó€ˆXçë,:ÈË;8Do55-1ìF31e–'øLJj¤µpÂLÆ"­UÂ:[¦¸æEÄàqË[·@ <,nXv¨â
+ëÎQÖIäpý2«Š
+ÝiX;Í%À#Õ;[§#V×DüðHM–ý°y¸†a"†Ùt:×}Þ5Ö¹â2ÌÕÊâ€ÁY2!ÃÂ`°eÊd ¾l5¯Ñ4ö¥(˜# ÔKÄámÃr½rÆ¥ô:Š´d€›EM’ ¬E-mz¥zéj‰íP>•×¤WßöÞõÜåèDöBÛpkûø úÎsSgSâL4ÑDíPø$Ô:~|'8t¾C貟[™[-ÞõÐC}æcŸùÅ/~qX™²§>ð”¦â¿i ³ïÌB™*¬Y-=NHNª ÕÉÓÇ]Ó™øåäèÍ»fa)•EÁ±|C:À#2a•ŒÝdåe–Œk”9Z3éÂÓtc‰¤K$Ï64„¢\§iªR^Çq¨=ŠëW ú‡FMÄtŸ1FS9š…1Š¹|+ÔAc.‚_Yd!>3)$ª4HCæ5ŠŒI_<Z“”F¡üzÃf+Çô¯Mè‹uÑ€MUÊy LN6ó«
+´‡à<F¹”Ñb.zD#=¦•œ«BÕX¤V9}KG~.¾=z<cUÆx¯
+ã ° êøz!2œ²\‘/—%WúVƒ2Û Ë´à“ ™¥]E>γE3y«u½‡e!бê–UÓöªÙí¢Y›$`$V<xªxÌ
+Ì2.àdsœ~ÆŠùùþýä®Ê|ÒiŒ®â[¨ø$kÃÅnÓ$Gd¡Î»iÐ-kÔlfo»wŒàgãìfÍf $ `«({ÖÁ‰Ð‘aLÌ%„LY 2dž 8$CœtÈ-wk"œ6áÒÅ\º¸G—8ª´è‚­Ú`›ÆßWp
+3¢5œ6ÙA$8g†¦/ú¼[=ÌÚyW‘o¢_¢ÙEpÌ&^wÌ _öòºcí‹5¢ãVÉ(±7Ïe‘Œ\!Y¡2ØUP·×#1¡\¼[¶<pÀ¡ðÂÁ&šT)‹> N>ÿÈÁ-cØu
+D(¯F.X‘3¤d€‘Žpê‰6C¤ÛqróP<”[â_ÚšÞöxà°h°¼Þ¢Ë]xû=ïð:§Y.Ír|u-8Ý«^Ï%€@Çè•qÇ ¸árƒ3“ë6DÁÑ84èVÊ,$¯è«’Í—éeß’!sà·ËŠ`Z“ß2•,+‡S•àIS!‰,`V)rS™ø:pa e#6N«"ÕøJKÍ,I¯’䎴.À¡#µ)‘2×
+ºº°ˆZ÷hÂàÖ¤6÷ãu&¨%gÆ ®ÔÔÐZ“>ÄÖ
+y£‹À‚$QE`»’d12Q :$73è 'mÒDºëbz–bòVû&
+ˆèPžÎŠ±•8(
+q¨
+s@ýV¬¹íV"Aƒj^¯YlÕG‡îœ:•;¢óÒ¤ ‘"³B¢Š@üf¬r©&V,ÊdY塹 AB
+BØD£X°I†Èt=r^ÊËg(a²lІÜÂHÎr²awUø¨!ÞÓ%©’^fœ ^f¦¯.ÒEÄX<c6L†e°ðÀH¬9ðÅN<ÞkŠymóN*5r<ûûßÿþ­·¶º •“¢=®ÛýÔ¬ŸœåY8aiÑl\¢Xpž**a¦{‚ç
+‡N8:ðû㙩ù•ÅÍî~ø_?ú±~ÿà¢ý_ÿõ_‡òpÍ^ç‚ñ9f—cíz¬«íÕ##:Í¢N•=JLFﺥoSMÈD¹¡¾m”
+RÁé$à·äƒzcí¦¨‡™aE
+À-eY[fsâ)Û4½m§ÖIªÔR3ç$ÒàlƒsΨ¢šÝ‰F`×
+ü³Ÿ¨G€Ÿ¥«¦ø„ÔºKÄ"dÊäÈ´[fmè(«‰÷˜$Y´;.2\‰¢y-Q†HzÅn[ê8£"+œ*Ì×É\§yJH™+
+qùîx8±G­*àú%#Ô¬_¯1­wš¦¸ú’ ÷ –ݼÞR3‹±‰y“qͤ+XTS̯CÂ&~ü   :d„Á†ŽêÃG˜YgÉëÝlò­Ð ·\'u3”2Z/‹YÑÑFÈ~S!Sà•ª`¢0bC‡…NvƒfÑ©Žúå<Œðµ¸€…N·¥nÉí^:(ºêó-±8é&Ò¸a•Ð-Õ¨Sy¦J6߀t0yw}’Ër
+e¡²âZ&[„3t ¦!—ðP`ËÎÛчvn?Þl®PߥØÛ€{ÑšIpÒhz*”Á~ù‹B¿<ÍŽ5gC¾Á!mÆ©ž¸î
+³cûË„Œ’C“^}ñÅ¿þô—~øñ­±pf´}´¥Í¿GzµçTàÆ9ñê$šh¢‰ö×1py¿©-Ú×?(àй®.ûµ¹ùõÒo|ã;?ûñÏb—ý?¿ñ´2S¶£k¯CÙ*ì¨Fz—ܤB‚°K†{éÉÐÐí£= r–¯+Ë‘¨‰Ù”q“rˆI[P)$cû<uƒjêˆaÚb¹dw¬³NàX×vg@Ã-ÛÉ Š,‡«uyRÛÖ€YÉð®„Ö`yø³ÞÈÔaá*uÁ®œ#€àŠÎÛkÀƒå WI Ñf)iÒ—lÊ„U2¬‡¹›8þd¼4—&Üa‰ûšJeñSû6Ž»è¤Ò&òV±`‘ì¤ÿTpètèà¬éj,
+ŽPA£jÊ¡™ïÍ
+~ìÔ»þÀf†¦·}ÞÍý,ä]f˵8ЯPš$ #-׉í
+-ûÝ.û‹©Ìmë÷=öŽ]ö‡걜ÝÛeÿWa¤k&P¯Vz\‰ ñ}å£,:x¶g5<°ÙYÄ`¾#ªEj$IÈfpª0!›â›’æꑲî•N6çRi"Ë:r[Ú#Ù ,ú2lN§}5YXE¬/ºU¡r¨¡ (™Ý ÉåáÉÀe×Jaõ
+ôöžÚÓAßâìÁwŠW$ÑDM´ÿ»oãþû†wqèæÐq?ì²g/.äÁ¥û=ïý—o}õ›W¯^=¬.{FÞRî²ç3e‡´˜C-m2a^ëà‰*)6pþÔvàxÑ£¾ ¾u’ŸÆ¹V®CüJXB3*äDRÉ2zUŽÔNwâ,›ãdû|ë6 «© o2gÚñŽ¯rš˜M•Tðþ½ •UÀ„ü”IÔaJ­6,¹‰yO}jpÀ ÓåÊGf¸E=ÅèSVYÄ„LÔ!|óø‰ÔË'-†…jÓ:ðæÎÚ<¯t¿H³à.75- ¬Òä[j±'0XøÄpå€T°I<µ›³óãÒ¤RY´©“NuPY­®°Ù‘©úÝï~'°ÐÓŸü2ëÌ0Ü*Ãlú|×
+‡<ž`!Ÿu¾ÖÛÿ9uXhóÿoU6
+îÔΖ݄¥žo¬šïÁ£¬3K1«4»A3‚BýöîöA9€‘ÎÚÅ&bƈ¯xÔ!“*#6Q9ЉO/N7 £Ž˜ ¥#øl[ÝôÍ]©ôäcÇ NçI^jsLÒŠ3UÒ8ꮂõÒöc^mïk· Ò«?ÿùÏŸzâ©ûïxóú|64’ìïíê¾e¯ôêðÛïyX¼‰&šh¢ý/Zh xüø¹:q6t 첟™L¯å–ï»ã-ùð¿}çß¿%<ÊÓY`—ýµÂ¡è”RbGè‘Z¬N½ƒ,1ï“?öÞãMs4vF‚Dù0Ë€€(:$\UÑ7$´’ Õ,UªEà+9Ã|›9 N“ÛB‹ý®ôØ6í,8ÈU»m¹ŸˆZŒEÜ°êRà‰©•|ž[˜¸¡S¦Ê‰¼ØGDI[žfó »¼/vÁ¸JN2å4ÌØd8”̸
+nW!Q=ƒÒ
+vX¥—z¢™H€óy8ùjêU~`ÔbKýL/5K`˨ª)¯:ȪŠIRdÓçzˆ(G‚-[hóÎN‡¯LM\nó,
+nT‡Œ·×‡†ÞÚª•œG*HXjd„ŒÁ&,¤ªhk‚rTHÂ8«GÓ4}ñ:8s[+4 ÜkÎeÏ´×L÷±>"<ië%¢ý¦ˆÏ>Ë:34 ªl 1%@/4½%xgÖµä¦SmÒ!õ«‘$ŽŒ‚®‚ñ˜©“œ59Z“à•#ÖÊãþD¾­z®±q@‹Û½“&ózל®t«5Ù[9V7Ñ_îªvZbG“NwÊéθÝgg²´Ó¹|ßÖCåóùŸöƒïüså*ƒ*;ÌÆ-1L¾Û8IV¬êI™¼ð—PØ—ªÃÂjeŽUFŒò%¿e<µFøµ¿„"¨ZdHŽÌš± B¶@ ‘rõ;
+;bÂ|
+0ª€"“£üÐéQ½t8÷j,¶Ûß=ÊW>‘q«d„T„ÚªNnžb/ ì@l€g†Ë3Îð³0n¸?å“k
+à©…È_t 'gâH°Q2Ê)‚ÕQ¨0Ën^b·ÁŽ€WÇ‚×èØVΫtæÀ«¦hx—fw>¼œIÞyƒw–¢·P)—:V‡v±£”á¥W-û¥W%–¿ÿã‡úíoûo~ë½ïýÐöÒ=éD&Ð=ÞÒêë«¡ãí-1±ƒ^4ÑDío;ò‰/ ·žÚµQ¾Ë~b"{q~þÊÊ}oÛ{¿ü©/b—}ðDª²Ë^È”0»ëÐa]:¬_Æ×ÙÀ %çoé[Žœ];îšqHΚ‘!‹døS:Ú(±ê°[3áSôŠ” ™ã# ‰r. Š‰8ÐaNl7D<Ü,_N³ŸˆØ>—a.Ñ4ü3Ž[÷ùŠ^o‰pâ\ô0³Ýõ±&]‚U†mRįB&k‘ZØN¾§„¦›àeLaºUôªnMØ®!ôK8¾RM¬vâ‰Þúp§5ÒmŽ¶¢nÅ(ƒR’»@˃nM¤™ˆ¶YcÍlÒåN;]€gN7\‰Þù}η’…Bg
+F1 l³5 a
+^ÂÍD¢Íku$<ì<çÌËéœouLv7L´qŸ:Â)BŒtÜ¥A2^‹ŒÖÃÐ@5Ô
+î´Ø¦ìxÞH¬vQ3ërgÜž´Ó `©À¯%>g÷‹å
+ÍŽ„S·¡
+@h¿ÊŠ6ÒòÖCy3ƒøÅ/~¥Wï†Ò«Áѹã=£gö*Ž ÞséAñ:#šh¢‰ö7nK±ÕkZö'ÎÏŒûý‘Ùdz5·òÀ]oþÈGþíûßþîï~÷»ÃŠ™“¨Jªâ{ÊŒè€Cf´§±j® sÎRØ™\Ì>šMÞ~®m–Þ;á‡o »âeçYu8qAÈŒ›±ZdH(æ‘ó]ÞÀç‘a€15H
+ B¥€_•C­ŠnÈäy·*DVŒKGðY€U=5q—#ÍrYš[äÞ`1³³
+Ù·±™ô& ÚgÇ8gÆí^ µÎ-æÞ=Új÷ÎsδÍq±Ñºm³_‚óጾm5K«"Œ´\sëRdGàk`ù.ࢠZ¾Ë[…LQ@8ÀÕÂL
+äœk ü¼%Á½ª‘ñ$h–ÀblaÛúW1½îÒ"ÀTÀ­à©Ï„ é(£Š4*6É0Žù²™(ß–“Àbc€^ƒeU2€vàxžúÀSûN €Ò},tõ7¿é'&ŽÖ¤
+~²E³+PzÕY ¹¢\·Ù7ÁWÆ Øìøû£ô­Œö⥠™3"5`Åu2
+œŒdÚÙ²Áòߺ$§néÈ;¾ÁHÎVÃ<iB#TIoÔ¢G´p¦âÁ2!‹Ib;¬Æ±ßüæ7_ýìßú–w¯-nÇÃÙáö‘Ö¶Ñ}Ò«'æÅk‹h¢‰&Úß‘ïJž81°Óeß}Á?æfJ³sk…ÛßðúÇ>õä§úÓŸ‚ÿ…Å•|ûé¯éQ ŠB­p¡¿¾ŒCÖ
+Ü™=Ñ_3á ·X®4~l!—}w*vå(3ÅP $ë„IöIQPóýr«9AËýXÅ`d:bRÎ9Ua§z‚V†Áoil„B‡’A»ä¼9oEÎ7"ç-È ¸a—œsH’ $:BKa‰¥Œ²°âtU’ÓÄà@eبLËElÆŠŽ5HÆdRZ•ù&3¯A #€‚
+$u<`W}Ô!— ékMjèh½r
+ƒKáäV6BcC$:DJIÉ9°k6É9+ܸs`×êQZrþdÇüØÐí-DŒ’(Y¨Vr¾ë®Æ|8uDÑýeB:Ôò­Ï|åP"BW¯^ý/ý±Ç>x©xçt,3Þ1Úܬœ#$H¯ŠWÑDM´¿/3Ú:yr':4ÈwÙƒ©Õ¹¹ÒozÓ»žþÄçž{î¹Ãê²ó«®ÉsX…jj€C
+¬Å€µi¥ÇHÙÙŽÆ8˦Y.?³TÌ=–Šnµ;â$Y„BçÖU›mÙA­PÔlT×'C¿ÖÒ…Œß[e]Y—gÑéN7QS½ =µác¸Õ0Ѫ …k|mÖEŽè“íÆøm«e’%3 ìÉZ¤¨EGÃj›i¦Ówá)À
+í!ðf{ôwJD°Ðw¿õÇÿÈöê½ “é`Ÿ¿¥=Ôß¼¢ƒþD[Kø÷¿ÿ½xUM4ÑDû»³àã'Z&Ê]öc»]ösóWVîý§zßW>õ…^xá°ph´;.»öÏ»EÈšé1»âP'õÚTagm¾¡á’Ó5?9vq1õæñ³Ë4 {¦„E39>ó²íffIeD@)2 xíncÄã)×#PASx((ý
+xd›ýIÂÎ6ÛRSM¦ŸˆÁgŒÆÕ:mΫj”‹UòT¥z»™©B‚R$N ;:ìÖÄ›©)—kÍã)±®…6sÒaX U^BBh¤š<ÀBQ>Ý“Q"SVä–Ÿ}ý‡ÏÛÁz!ÁZ¼Ÿwõ$]jå.¤áõ뜮4çJqî”Óµàv—ʱ^Ï%pøYŽEðÕ A·‚Ÿ8Ý mdâXÝD§1êÑÏqÚ$£ŒØdA›dD‹$À¹­Bb$Ž")
+ûeµ®ÃùÛ®p†ÛlQ»""LE i°wòHwMôº[ÐÎëÙöù–ÁN9]™ñ¥ÜÌ]§ÎQÔe^z5ì@ûà”*Ì«Æà]„a6^€uçÝ%G-‘‡0ðYP.~æ‡?úÈ¿<yÇÅ—gÒ¡Óá®Î@OÏ{;èïýç‹×ÑDM´¿S{ìîGÊme§NôìvÙ§`—ý»Þõo>ýÕßüæ7‡…CG Ç°â­
+‹¢ò ·Â²Þ*°e~2%TJƒÓÈé’n.åkGxë-» 0ë, ÞK'ï>ߥ™K$u RKO¨¼sø|+ƒaPqƒÿjo°fâ†C œ
+Ò«â“÷Ýþ¦‹é\` ~¬k´«ëæ}Ò«½þÝâ•D4ÑDíïÚÖâk§N숷ÞxãÍAØe?‘Hd7²ù»¯<ôþÇ?ò_û÷ßòv(OçúÐkje‚/ƒ8¤Æš5XoÚÅRÎڼݾtÄ=ŸIÜšŠÝÖÛ<Ç™
+f¥ÃNéX _¢l“\h@Í|ÏjgüÑ$_ÎÛEµýuMüÃ`ŽV¹ È–—FJǦ(º
+ÚéRĨz”<”·¨ ½ú¥O?ý¦7¾k=w1<‘8 ½ÚÝ}:|vQ¼zˆ&šh¢ýÃØð±Ù“7ܲÓeß7 ùý“¹éù•üÖƒ÷ÿÓ'žüä~ô#!eðÚŸëå—_6'´˜±8f7 MJéI;Ú׈škR6Ûò Í™ÜÜë§'¶[˜IÆžâ °¡‰Yf”aZ¤?«ä)·:b"Vûˆ(,„¦V(¶D³|¯wyqÀ<$³ä W
+kŒ*”…ƪy“q8V‹å¢²9ˆ:åe³_ºŸvÈvÙjÝù–f—`U³Y16ð2Mo;k^oÉåZu±ónlŒhQ…Áa8Õá.Ó¤I_2J§®ÛwoD&Ñ®Z$ Aâ|6*©A”ä&—|ü‘Ûû Xè­÷¼Ã둘ÎêäÃ;‰ûB>®r…ÿç+‰¦9I´¢×€"›2ÞGDøÂi¨Œ¶SåÎ+¦Ùk€fÁ·¦i†ÉÒìºW«CFøê)ØJ¦TUÓÕ¦õ<a·ÃÈعîvgRso]˜º»Õ3Ï:³GêçÌDÉŒvVa½:Ì¥Ò{ÇU"u’Æo>õ…C¡ßþö·ßþƼ㼼|w*ž tû›Û&*ÇÀíΖ¨(½*šh¢‰ögßøì7Æ;ÆËmeƒí‚–}j}nîbéž·¾å=OvÙ–xkir[¹g& ì,Sò
+𬟔£ñœ·6ÈgðÆÍÅù·Dý['LA7‘î#bœ{¡³6ÆÏ0Å‘  6«¦qÃ*p¬}DÔÁ·5]¬¶Kr‰¢ $U$Éeø•*¯ Uf!®àplU¶›ñÕ,—**±×|Ì´S2#|ÉÐ
+Д aÕa°eõÆ•£5ip_ŠïÍo!§§—SÉ{û|ó€ œ y‹¡`Å:UÒ:Ì«’RR8bÚ*$ÈR¡–ÂÔækOþú׿§ô{ßþîßÿÑÛ7î/L¥‚'‚míÁ}Ò«--¡ïñ›âC4ÑDíÒž|ïGoéÚ¥¡›Æ;FËZöÛ«÷>úÈã_ù ì²?,µ²Á£²
+-{ÞÁÁÂ!%ÖªÁzX%¶ÅVÓÃfü./d ŸY¥ñ¬È³\ÖM¦(l¸9G ~àa™˜Œk^|Þã¹Wb¡Fë À?•?¤éEÀH$µ36AÕ‰òzK÷íeêq–n¦3ížù£5IŸ|Ð%9É 7y°›Û´£D «.Ôk‹ñÄg‡—~Ã;¾úÙ¯?󭀓ö‡^‰…ÀÏ_ËLpßgŸ}öóûò¿}àÓo½ã‘åøm§¹(žy4šâ‘ox·n@h.,T¯œ®3.56l²X6+«¦[jæû‰¨É¸N«,‘aد-E¡Cõp|â@nUÈh\µ‹vó:
+Né³Ï<ó¯þØ=Û­Í¥ƒgc]]þžžS{;èÇ>úØGÅk…h¢‰&Ú?°Ýwñ›úvÅ[OžöÁXláb:ûº‹¼û]ú÷/}ýêÕ«‡UGíÑôaÑ¡:jÔ^…UJOÔbÝœ|ØH¬µã‰v2¿’ ?x“g’ÒδX'íä+ƒºŸfX„°*ã°ò„ˆ56Â:^¹úÊ ²-’‚a6lÏ“ä’&ƒ¹3ÇÍ®óú»A!o©²Ý»Ó“Z'áOúÓ_aG^‰…e¸ßÏþóçŸþ¹çžûâÓ_²JνJ‚ŒW¿ÝÑ{FÔ ƒJdº^9e"ÖzL‰J
+òÖæ
+E]&wƒB,{Ñç[Ù!Øî½êó9×ÊÍ-3Ïüà™_üâ¿âí¯ÌB¯„^ä PÐÏ~ö³gŸ}6uaÉ
+ëÊ1l¦—ˆÙT~=Ög¼øÚÇ µ6bÜ¡œä—^z œ§?¥Wײ+áÐÂ-]£ç÷tÐwÍN¬Š×ÑDM´ÿ#–ÏŸ<qv'Wvì|pÐï÷Gç§Ò«‹ë¯¿÷íþð?øÞ÷>ñV`µ¨£¢Åº<¹”®ÂÜz´I!=Y‡ö‘è9Nö©õ‘LâJøÂj‹wŽuå]êà5‰+É°KjÇ'6m¶e›ŽL$ée†ƒ]c¯RD-ôŽ1\žf—in¥œãAh³É·ävÝÞäƒC›ÎuØ_Æg]¢èÍ&Oö¶üÏò â¹çžûõ¯}Xç¤ÒM‚GøË_þò§?ýé³»Öj¸ G‚ÿmá4ßõ¶¿&œs‡2fÄWœDàP?¡Œ‹€‚ŒÆ5ƒaÅ _vª#`×À žg¹ Å\bäA~Îö$ø
+‡u+CGñ¦¡Ð䙋û/…‡.rØ2˜5ã¹j¬ÛˆÕ£LÅ!»0‡C5¨ý°"B/¼ðÂW>ýÅ·¾å=k¹ËщÌÐéÕîîÓ£§Râ•A4ÑDíÿ” ôL;vA ¡›{/øGü°Ë~&µœ¿òàýÿü‰'>ùÌž8ôÌ3ϼöçzùå—q¾pE-åšX…”Ö`ê“KO™$7Ø$ç4š’O<îž^˜} ¿âu§Ýê àRH²}†PÎUë‹m¦ÙÆÆ ’,ñUÐyj©oÓìëÌ;¨µ=­d¶K$½BsÖ¹DA…Ž+`•)Èë-þF"ƒ ³ (ˆaøËp„Im¶‘ΆÈüã2Z
+9VQ¡<¨ÖÌÉ+ÉÞ!‚ìÛ¡(çztô^5Ö• œ…+ tgƒ.ÀLNÌJ¸ÕÖ:j’\LÐÅúŸ!
+è“€VJZxÁåÃß „¶*Yúâ‹/>ù䓳´CŸI¯ÿö =¾_íJ6H{¿ õa ÄnHw:¶¯P0 ÊŸÓhb*õœJ5«ROK¥KuB/<Õ9܉\ö0ƒ#G°Bá\­Ð—zy¨:'@йä $Mj™ »¡zªmß…FZ“4
+¬++±†­nõ}Û“?‘UÑË
+ÏZ³ShŽÖ-óÞí|ôän x˜ /Ÿæ!xáb À·šVj´suÚÙbý!‹yAg˜"ˆq¹`\Ïö@‚ ²¨–* À¿W(Éœ\ §_Z óàÀ]™ï²í=²ƒÕ!­É&ê¬Jˆs¨&UƒãF¶ŠÉÓƒ˜¬£<tþߥ/¾øžÏ÷Þy÷á¿tåê™QG“¯¢ÂY]Ó°1ƒÞýÀÍ÷¡+ é,ºïæ{ÛÊ»×leöŠž¤Ë~y4rtáø­·þø•g_„÷táP²º‘…ÖB:´\L/Â,9x¼•sA¯†Ò¶·"æ=oÔÍ,§P@²ÐáP¥¸O—;]®÷×
+Þ˜åQb]\àcƒ`>¥GÇpyC:z*)hƒNœ,ï$[k)µ”þµQ„Þ³Z±’,ÔÆ èŒI9Ö ä‚­ù½wO³Ê'Ÿ|ò×oSjXƹëí·ÞÖÐZ(Ûçûϼ‚[‰ëÙô
+J—.³¯HÓWf™î!FË‹/.)¹ ®²’K»uÑRâÁ)å‡LlW&m$wC’gŒT‰C侤jaGÎ(AwÁ3@KFgkÝB±ÀÆ'§‘»u„JØx+BkMbäÔM¸h˜Üš¹3-%Mø…üàƒžxäçW½qa8êìêÛYÙS¹ÑA_RÚ}ãÅ'Ð5Ž„„„„ô­ºæÈ5Õ¥îÕÚPÃ>×.»Ãá ú£KщK]s÷=üöE2Ë>]›eZF)=eæÊ™èdP r #^”E·Ë@hÕcí-{Wúšbò ˜ çÄ¢y¸ò…Sð±<sDÏöÈ©>yÓd€ †Ú­àFºSC9À#§ÿùË›J5Û­m‡3û×
+à€ÏŸ¬“ÀÃå’=Ãð?y³(m7^t+Ä•äŒÊ³ë£>ú tëu÷gSÚÎ@k¾µ6§­o*°•…2È¢™OËt—䇊-ñfÓT’‚R—C=d6ÇwŠÝ¶3wÉ1‹9™%˜ÒK'”ê%­~¬JRãÝ<У¥µ4WŒUK=‰é”ð5xs°*^šØôT%*B«½ëDDÐ,iù
+Á¯"$Ïçžxöøå·,Dgì=#{Ë»Ë+ÚRA¨¼¼eªï ºº‘ÎQ±àòîšÎUÚÝìh²ÛížPx~lúòKn8yò¡ß½öF]ö2\OÃ5ë–¢µP{Mfbî¯Ê¤´P@P zÌ´ŽÎÖKÜ‹…¢€œÔ³ÝZ–WÊe2ÆrhIzW}^‰è=ǧŚŠ=¥ È›2u°ÿ¬8äݸ5¶ÊNÐÆJĘæ
+‚K€ÉÒè ÿͯ^ºåæ{—&Žöy#=e›£W+*š»w¢èU$$$$¤ï£`}°¡¡ic–ý@lhd.vá5WßúóÇžúÓŸþ”t…Ÿÿ±Þzë-!&[/
+­•†4ª–ƒ[E˜Þ^ÉF\²3'P$´ÛmÇZêgtX{êD °siƒyT—´&æíx7MWÞ´À›:è`œ)¿©_(È®ÐÉ"ùÒW¤ ŒDi(uå’Õ'r+Šœ¿|ìé³¼Óo¾ùæLCÿøÇ?Â;ûÙY¨P`û.–yïvíO „8   9+DA³e¢ç E¡ÄÙ Õ:¥ÓGwðd£ºŒ Q8¬•O¨‰­a²@1dâ8wu´\¨Ä$Ÿ_‚Uq¨u¼˜GvGk¶‚“>|ççÿ©òw¯¾~÷]'M ÃŽšÞâ2W]ÝiãXmíîú’ Š^EBBBBú~JfÙ76¬ºì[.{§stnxdaêØu×ÝñÌãOüñÇé
+o½ãÆ»8[vRÖçñðŠÒbÈmù «Bê³u]^e’Sº’3‚à
+Ÿìg7ôbä~Pà 3‚|© D'½iî$1@&¹ÅÖ¿©»Xºr€MŠÙ™ÌIÖËLXé«Ï³>qs­©4ãl,ÏÕ¹vœÝ‰¿±eÈ›xkþµå;ƒ‰~Ã~Ÿ8$´`… h0N¶¨ÇÎR²˜éô‹M,?9?ÿ L¶¤!âZäFsDgß_íw¬È÷+(ðäS€›‡×‰q+#»ß·öᘴ^ÓJ‡çáÝwÞ}ì¡'Ž]pýÂPØѨ­ê©ªÞ»ÁA_Òsûµw « é<u÷‰»k‹=k¶²½öʇÃéõF—‘ Žß~ûO~óÜKitÙWæ痢àPr41ªåc /áãå9XN¢‹7´ì­œÚ¿g¾*×N%C4¾}Æò: ÉÉ<$eƒî òÙB©mE4àËmJ¬›`yÔLî¢!îjí(õ7ý›ÊM©¹ç‰3½µÏ>ûì§ Ýod¶¥LÃ>STh»<_Ò>&˳KìÒâÆx¯f¨Ík4/ì±,×n0/0M÷ª‡,æe½aF«”ÉVãÉÈ–ibV¥>Dh—mÕáÏ‘Ý¥c;„ýz–[:!©&F YéTÃä›@£HµÌâ´|I’.¼§{êÊ+N,FböʮŠŠæÑ«Gç®@×/RZtåòÕõÕ§Ã[]õ½‡+ˆ.F'/=tí=÷<ðÚK¿I§Ëž^HÉ›ir0µr­:¤¦‘!EB¼†Nzä=RJKkãŠÓvA»ò-;G룄ú³€ú!IV½ðT—™tçƒN Í¡à†…üY%ßGéá
+…w‡aÐh›ÌãfKÜb™¶XãFÓ¤V?¡!ÆUùó5_•8$•.i4S„.Fèf›K†<‡ÛöÌhõc•â>1oŠŸ–ZÍÆ‹8¤qL±ewLšéÒòõ€_32zõ‰g¯:~Û|tÎíŠ4Uv”•w¦ôí,¯h‹ºgЕ‹„„„„”F ôL7¬…·6Ô·¸÷Úï`_dn|öŠ£7œ<ùðï_{㫯¾:uêTZ'õ[ÆщödÄ9^.Ä‹ùx´nyTXsËËš«'ÕÔ泚ªN åt-%¸Ée9!Ø5LB«ú%¢¹\V`]40$vÉê8åí hVÚö,ôÏþó»N:{ãÛ›:¨`€H>¥GAé’c6f‡¯3ÒKaè…˜´íKM4ŠG¤¤ΦÀz”x¯šjÓÐzÔL·ží1qƒ¥‚àN‘»4¯Gv¸NàÍ/ÀU,è×Hfb¼@1Rnõém[±j+Eþd¥U„Wñ°®ÀñmŒcbŠ"-_ ˆ”_~æ…'îŸ8ì÷D;ÉèÕžM¡¾¦atÍ"!!!!¥]Ã-ášêµ‘Ô»Z­v2˾xvòàUWÜôØ#?{ûo¥+˃ˆ²¹¶Lqà*:^ÆÅ«²ðê$ÆíííWî- çžqaß–ý£­ó¥É:
+ù ÉßÌ¢Uû¹½íÿôÓO¿wèXÒ¦·U?¼ìvðB˜ÉŽ<Ü•H‰ep¦,,§•í`±ÈU9ÖÃ&!0BÃð5g%vÐRç
+Èú Ù2M"X>]FÈÀ´pCZ¶OAéà7„`Âb’¾È¦#9`g³¾wèØ·`$°ö\@æÏf“Sl,Z˜NAfËä@(Š3˜$Ip|…›F!­/æ–³ÄÄȈ”ÒÃbÆó3#"!ú&Îóy³ÊŒ! ËßYöÚòì
+Jd°d¿4/çâz*é ßüaÑ0©§& ÛUÉî©wÞzû§'½øà53ƒ#ÎFwE…#5zµ¶¶¾¢ÈóÀB×)Òÿ¨^xøé®ÒµyÔ{{ÊzV]ö##‡f.?ñÃ{^|êWÉ4®´Î[?Bßè²OÆs0©šDZ™E„×$º¦½^v›†›ëç+ÕA&Ù<ì;ƒ¹þL }©óqd$Š*2¼WÍ
+
+úuÚ1­~Ú`Ó³\Ùô ‡1žÁŒB'Ú˜)À×^´yÜ4<ß/tì\0=L¹;Ff¢á} ÚX2Dâ\löT2.MNéNåˆFá’… {Ë6< ‘LøÞ1#Û+-¬Õ…æà» ß@ëTy¾WšØ˜“Qš…”†L¼6“jfRÕØÖ‰"-5¤…À“ç?{ô‰+ŽÞ°w¶†êªlU£W‹K7¿]¡HHHHHÿ ºý†Û[+ºÖp¨ÉQEºì}Þèr8zÑ•?úÑý¿ùé²OWu¨T܈o®Iqœ`ã*^$Æ
+#©É† eᆰ™Î]S•‡
+J—xÙ /™"ÅìgeŸ^kQ&zÄÂrˆ{dpɹ‘Ry¿»ibyHÈ‘b½ÐÊ£4s¨u™øŽ„ql½2}Ñ«üñ3?}í•·-D¦ÜŽ¡Ýµåå-ú¥Ë:.˜8Š®M$$$$¤ÿ5]6ySMÇz–½“̲w‘űÉK]wï½¾ñò«_~ùeº†©i;°­ƒûpÞ…™¤Å¾X‚UA¢€‘ÒÐÚxÄÞ+áuˆ€[<y”^Å&§t+“9bë‹Ò%¥tK€“Kö ;rÈvšÖ,2’cƒéLÚp0¢Äºõl_UNP§Ÿ)PV‹µbŸœ?™Ï2À
+½J¦/ƒœƒ*ɲ¥¾Zxû>K›PoÄU;T)ò–
+CFþ°.³ßÌv,o…Øñò /Ÿû
+'§ m*ÐI ìò´|Ä„>øàƒ§ÿÅñ‹O,ŽŽ»ºûwÖtWVîß
+s…SòÌQÓÅe„Sƒüjº£TèÓkG ÍCÉ—ôñǯ³Ê­WߧÄ0 ”n}fHo[­ VË´NÎãÇùÌp.îJúúÉ0Ü¡ˆO`Ò¢4úd¢X4¬gyô¿X8£Fw+¡ßþæõ­AöÕ²VÌÊMÆ
+Ĥ<Ü™Z®I²
+d­\`—SºäxO6ÕŸËèײ¼ÉÍþ#›ú¨§B‡4Äb¡²O—Qƒ§+?˜m“ƒ.HDYT?‹Ï£ù”Ž<ÐJ%ß‘mþvŸ–Òè«·5Q1Éxô~:pgáUbÜ*À5„0l3ñ0é?þñóÿ@¿úê+øŽ^}þåÛnýÉRìâ´§ÌV\âؽZ³{weºÖþeÕß8°Þº·®ÝÑÙk·‡Æ†g'VŽ]vⱇŸxçw’;;ç¬þóŸBŠlÛðVx×`ÖLê.:3”e"—«÷Oã¸Y2P+ôAÔÑ㉠²yµf…Xc!•f^«Ÿ$ ZCŒì&Ò-@XÒê§õÆh™2XÄêÙ^5Þ%1èÉZJÓ©S§>ûì³d›ÐPó´™lû‰fú*ø¾ª\ïý€Ù·˜ÛÔC»tSÓX1¿ÏÊv$û“¥F×A…$ CÚD K
+&®@âqòÏÕ$ÙlÐ) bO¹  PÌê ‘–ÉrÓÀJü)Õ#![Œºé´q-,N":/Çlð ðÒVŸÙG~èέ2Ð’ZÙÀneµíÝ1\© *˜}Ù¼I±pž îcS÷ˆ0S& BZ׳º¾h¸RC+LËÇAè£>zêñ_\}ʼn¥HÜÞ=ÜPÙUQÙœ
+BåmL\†®,$$$$¤#Ýxì¦ÆòžÓYöÕd–½ß?¶Ž]ºê®;OþæW¿NÎNËá,™uI—}„’‹)ixy&^•WÊ8ýuB¿Þ.3Ž xM _ÝV7f0N:’…äÊevA©™OºÉ4šq‚—Ëçòó®/iþr€œ>9A›Ðs|j†ONuäSz ö¬ß{×ê-$Q@ˆ ì’D½(t =1§¨'AJ]kÿË:6mZm\¡DPl»ë2p|µBŸÞ8j±ÎX­±AHÊX'¤ d³t²Gˆ ‚x_æ‘ã"ÉCd
+n»çµ¶æ?+f!p‹iýYÂi«|Ähš²˜–äùu,™‘RDNV¤‘=Ej?9nš‘€ø
+) þ©
+&–'Ý+HCk•RRn¤XÙg±,mæ‹>¾^J¯Ö3=&¶‡ÃKŽ-⟊ڳƒëµhGS q‡u†¸Þtð6³lôÄQj««äãelûŠ “ÝxñíçÿI%co¾þ»û~òàó—‡ÂŽŽ’2wmí®µ}±&²_ºÈóÅ_ ‹ éßZOì•þ]õ{ײì»YöC3CÃ󱋯»æö§úƒ>H—­ì•'_ÉØfµ–‡“xiVK^98 Æ:ªµcý—x{—¦QB{œ)DŒo!}îT)¿OÄ›’3CÙT_b¢‡ž(Ôœ{ük]Ci\}d£‘KÉô— –‚ kÁT¡ ”Å^¡§K1;ƒ3³;ÈfÆdX/ ()]–»T2›ãó49[ÒWkg”ꂈ9öŇÕ˜ÊÞä²);9Ô:¦Å0ÕV¢aÒβÐùFo ýñÝ÷yðg—®\=;vîóTT8«k6:èíÜz7º‚þôÖ‹¯í*öíÞ½Õe_Ú•o ¯ºìo¸óWO<÷ç?ÿ9]ie3 ·¸ì•TªŽ‹+™d<Gye' cÜ{ô”¦ú’ÈXÿ¥ýö“9ªÑ.i4±$$±jq°Fè׈&²ø3Û+ÀûÙ¤G,Ä®3ƒÐú––7½E¡Ð)ÃíjîU7h1¬Êöª˜þÔ­1.3ªçøÜ;H£OÒh1+T&ð «eÑdš!´+„>–4Íi´ñÖêÈøà±ö’Ñ©+Ò$ÁªÔffàÛ€ŽI-™;ÓÂÆɉLO>öóãÿ`adÌÕÝ·³ÒVYµocôj×.º];HHHHHÿ1úé?m®èZϲﭰ­ºìGG/˜¿â–[~üʳ/~öÙgé¡ýf• •¥£^:T’‰W‰)õ béÓQö6ïž¼Ü×:c0Ƶú˜J5Y¨\<P,èÏ/sF¶+ƒ>Ê~
+d]H¼/=ý«ë¯¿salÙ뎴—wmŽ^­ÚïmC× Ò¤GŽ¬‡·6ì>àl„8äî FƧ/¿àšûO>üûß¾þUBi9œ’j¤od!¸ÈÊx9+`Qwg’{C>ð[iû½ö ú|í*
+«‰Y™l¡Và…t!àÍf³FåÙ„,9í÷}—í­óÜ,ëãƒI}•b¿Å2g2Œš˜®UbÆ,l—X4±-KÉmÞÀ­”ù-ÖI³épAÁ´V»BKjí*)”K¥š`ÐuxØ{ÈhŠêô1B=­Æš„x/MdÐ붅Xzô„¾üòËWž{ñ–›ï]Œ]Üïë)·mŒ^­®nÜWÕ®$$$$¤ÿ`Ûc õÍ«Õ¡]­Î6»Ýîé ÏM.^u즇|ü­7ÿð—¿üå›o¾IËár1H>Ä&à¯a\¼Ž
+ìX8ÀYÈêt¸ºØ:Jh'̹cù¢i>o&ƒI²¨`hÍ8æÿîÝ>çÃBý¹ MNé22]VÝÉxQUžGèb0ã–ò!øR+ùê¿Á¶Zç̦ Íæ)µæ°Ö[O‘ÉW Æ‘aßáhßÑæ‚W(¦Ë„ V!ÄÌÜDKŽk6‡"{öäSçÿAüõ¯… ô»W_¿ûîÍ #ŽêÞâwjôjMMC]IE¯"!!!!ýÇ+¸§¯aϾ$ í«é°wÛ“.ûéÉÃW¿å‰GþÎÛétÙ‹>²TbR5t¼„ µ>«LnEñ­„o‹õ_g5†µºhÐ+Ìæ1ûå”îìÕݱ¾ÿ¿üÙ›ŽúÀ™‡» œ€É5”ˆƒæ d¡\Ö˜?[É÷׈üÚü˜N1˜âð,–e½~^£]$t±5
+"—Þ0ên_ ]RcÑêÆòó—«…VÅÃ+äLE'7ÈR'ä30Ù¤{áü?…¿ÿýïð}ûo¼ÿᣋWÆÂÎzWY¹½¶vÏiªÝ]Qè}î©Ñ‚„„„„ô/È'®*wcê˾µ‚´•9C³CÃsñK¯¿îŽg~öô‡~˜.—ýןä‘áõpˆO¶Uˆp •Ú$¦ìNìdõ僖J™o|øª°ÿ°Þ1*G-‚aË%Çl9«,ü¾ýÏßßAÆlÜof»Í–¸Å¼d„8¬ }ÒÀñð‡Õò¡7˜&­ÖY“ñ¢ëŒN?OèârÅ¡u
+’+VŠ•!GÓÌhßñ¦’¤&iþÁjŸÀw1¨BÌ@ÉüHS‡+R1éNUGZ>nøQ¾÷î{>ôı#×’úfuUoUÕÆèÕû-×܆®$$$$¤ÿ=óÈ ÅÞÆÆIê.ëNàÐèâÈÈÊ̱o¼7é²OWZYܱÂÞÏÁÈCB¼8Ñ8ÔšÄ!‚²w§qhbô†ç!òa7,¡ú¸‰íªó˜£èÿÞ,ÄÁàÈ£
+d}Fód™0hb9U™ƒ5B¿I3¬3’³†L¦ ¬–y£qNg˜„äC“*õŒB¹Ëä+zíXCÁÀøÐñöʘNV(fk~ }?‡º;´¡X«(]Ÿ¯ˆaR-£4-'‚$Û§{êJ2zuÒiÞSÕ¹1zuWq‰óèÌåèº@BBBBú¯Ò½7ýd_¥mÝeo¯$³ì=ž±¥‘Ñ æŽß~Û}/?óÂgŸ}–®êÐnM7ƒÜ,Ûà)ËÀMt¼”‹Wfâ»è¤YÞ‡ƒ€ÛÛR3>>|M¨mZo+ôI!
+·Û¶ìëXÒ›Fy 5¿œåá5|¼Œ‹ ¦ôKK“ýBYeº¢W?ÿüó_?óü~p÷ÂøaŸ;ÒYÚÉ'„*+›½MÃèZ@BBBBú¯ÕâÀRc]ëZ–ýW£Ýnw÷'\öÇ.¾þäýþþÕ׿L(-‡“ãúZfëšÅ^IÃË2°Bu·¯Æ€RØ è->ÛÁpàŠ‚!Ë z7æѯG²ú“ òkÙdÞ3³Ð÷Ü&ãÞ $ ÝÊì)(ˆ›Œ’,dž„dQŒÔ ¼Jád–htÖ‹¢˜Z8a ×
+¼&ݯ÷`ÈqÐh©÷‡¥C²VÅ¥šTMÂ;¦Na!“½þÂëçª!Áž:uêõ—^¹ýöû–cø£½å¶¢Rç¦ ú¦Šº
+þËj‰VUõœvÙ·:ìvÿhÿèìÄÒ—xä¡tºìÿùÏæ`J*¾±šl˜©àcVuo^•D—,бƒÕ5è=jŸ-Ëõ*(]¹ 5…y|['"¦0R(e+-IG¡ïÇBò€› <4à.=ÞQ•ëµh‡
+•ý;%îj_"œ
+æ¼>VÀ‡gÅÂ9râh¡Nä80=ä=T©òÕ‰|y¢é<^8«äPë2q+›º:y)5ƒ•Io¹2 ÌðÃúë_ÿúækoüøÞÏ^ Ž:뜥¥®õèÕd›Pe‘9è‘ õÁ††¦Õ,ûš—Ýi·÷ņæb^}Õ­?ì©÷ßÿ믿NË}óÏþ³Ûj+S®ÛÊ$Ø*IAs±È1â;ìÛ7Ó» “lL¿Áÿ~ÖüC§ó@«ïVÒðAprA@Asê˜^Û­ÏÀEpBNŸšÓŸ“9ÿrc„¢Yo°£q¢ß±Rd,„ åó"ùX “º;³f¤ì®š¦cRgíàùŸaHAðÃzïw|ðÑK–¯šîu4y*+{kj7ÇŠ÷Üt}ù‘’åš½%Ýk3×\öóCÃóS—ÝpýO?þôG}”6—ýwq)ò-I[™+€8”ƒÕ&ñF öUÊý~û…®=qkÏí\Л¨ü$‹?ë«/{øÀ&=¹ m-¼ìû±YÒ`BO/ ¤tAw¢6·œÒ-ÇlÙÔ
+F}‡XƒJÊ>È'k¨·YLàÍ![¬#ë+´÷äŽÕÝ1 °™8^½qÒ`Ó³ýù’…àÊÝ|àâgð³A(B¦•ñhƒtF B‘˜©Ìq{{Wv[†Ôü(Ÿ?SÀîÉ¢4±ÉèU Wl‚@×à˜LMÛ‘–û—¿üåã?~æñ§_~Ëb$æ´î«ì.¯hÛ½z0r1úÎ#!!!!!mÒ½7Þ][ìY oÝëXuÙG—FÃ.¿ýG¤ËþóÏ?OÕJÛ˜Ø0`P naॼ–CÝÍ ç+’X"*fzöÎå8ÀµV ÚÆMÂR¢"Df¹BÊYuŸ}çä hSc]e’@uÖj2êG l·‚ÒÅøü‰òyP „²AGèf€làT`ÝÖL—»}yoÙ¸•í2±\jº“ Z¹ÔBBX2hccF¦ÊÅ4i9¥ð£Ð ¿øÕõ×ݱ0¾àqEÉèÕÒîƱýþômGBBBBBÚVÇW®Þê²¢‹‘‰Ë_uï½?}ý׿I§ËžQ¤nrÙ«xa¶ƒAÝ#Æ«)d€ ÒØÑxa{㌅ÓÊNp €-´I@«„¬Õ´‰Aôb§çõS ع •²º¡ölõA èÐÒ]zݨÁ°h2Íi4G ¦±¾OÅð(±® Llõ®M=‚‡ ÀMXCkE¸µ~ÉÀp0˜19ÞÁ=¼&BŠÄŽ9Ah‡p\+NSôê_þò—S§N½úË_ßtÓ½‹„|Ñž2[q‰}sôjE}ϑ΢žÅÆk.ûÝÍŽ&ˆCÞÁ¾ÈüøìG¯?yò‘7_{㫯¾JWx«7Ò©\ö™¸Š†—‰Wû¨«ÙÀ¡¡ìUP:ʸ½Ý]Wî¯/ÊèÔRméc8µ,Ÿã5°àc‡žÖE`Ê~)hf%¼ù‰Õ']9 3´g
+ÚMŸÞ†´¾´ÚÅõ@ ßob»5Ô^¥K\Ødµª_šv•GÚšŽX¨àÅ “
+èDx²"¤]‹Øb«S¸µ|ŠìùÇŸ=ÿÓ?ÈB¿{å·wÞyreúÒaØYe/.uÕÕíJ¡=µÅÈ8†„„„„„ôím ïÜÙ¹ºY¶³ÍÙn·Û‘þá¹ÉƒW¿ù‘‡ç­·ÿšÐù Þš%dÁd—½/¤Q÷J)u¹¼q3¨8·¿Æ2í¿Äe[®Rú,Ú!½!¢7Žë :}Lo »zv}¹¾ÂL·Þ­ÃšÕ”&)€XÒ.!‘íC<à†èÂ%‡:&»©ÏT,êWQšÍ™½qŒÐ-©‰1«ÑMÁiˆÃ„v·X,úulŸšjË¥ô”½Mã¶ÎK,Ô&œÄ­ Øx-!éÓ¦æ®bÄ!“Å¥ „Þ|ã÷÷ß÷ð…‹WL„ÈèÕÒ2gmíîTª.ö¾þôëèë„„„„„t.Ú_Ú]¿šV¶¯ºÃÑë´ÛûcC3“]{ÍmO>Jºì! ¥¥Èðæ³o
+·qÙ+èx¯dQwÔ¦*a@§‹úÉÖòñ‰ÈÍîC&óI)ê#jÍáÔÒ \„n^gŒîP”ŠýfŽ »Ô4²†#$kA«=Õ\àÍm"Ð…¯Î&
+mÕا¦´y!iBkˆË‹*UL©œÖh& bR£A("tËZí’Þ8Y¢
+Z2 EÍ;§Š¸äÎ!èåáµbÜÊÈÉRèá¢aÒöBwZ`‚лï¼óȃ_¶rÍìPعÏ[YᨮÞà /.rßuó]è‹„„„„„tîwØöJÏΫ8ÔZ¾ê²ŸYœºôúëïxögÏ|üñÇé
+oýÑ•?ʤH·¸ì•l¼˜MÝÉÅwÊî*qPCŒŒ£={§'Ç~4ê»Xgœ ôÓZCL£ÕóZý,¡ŸÕ¦u†¸Ö0¥ÑÍk4K:ý¬Ñ2n5”åxl·’æVPºi`hŠ¨`X l¹ •Eö&…Öû… ÕšáK<ù¼R5¯RMåçTä-’EÞü‘ Æ Ý¤ÎÓÇ÷VEÇŽ( dx´Ø~
+ܘ–“öõ×_òÉ'¿|òÙk¯ºm!2ãrF÷–w••opÐWT´Ì¡ï3Ò÷Ðí×ÜÞRѵf+kì-·9N'ºŽ]¼òŽ;îù¹¾øâ xGNËáʲ™˜r“Ë>7
+ÉxŽÆ\¬"[8]š5(•.Œ#þžCã‘-;ǬÒaµfB­ŽëòcEÙ#%âa].Y´hD sÄj‚,´O3Q_p°ÞºÜ¡´šÇÊs}f¶;Ÿ”a½lÒh¶JDLJLjg~- ²PØjч4Ú˜B1S-
+T ü&a¸‚,ˬ÷W+=!÷!÷²Þ8ªÑLÔæzul2ƒ^„Yô‰M W6¦LËé‚
+OþK¿xþ7Ü5?±âõD;ʺKÊ68諪öþÿöîÄ«‰sýx2–
+˜É
+Ôã]eÊ%±~ù³iÅa´’)ôf:½Å•Þࢠ›Rax‡å_Gd¡  æ ÀùDâùÏ•û¨‰8$ [˜ì£ ©æyäÍtT1l•žHŽ³aµÎü˜fUîZèPo\ƒÔîë§÷{£n–KYMæ‹]òüÊ‹ãkÊr;ƒ‚4î3æ
+iªéSPÁ$Tà„Œl+íi„œ÷/^L| ž>}j¨ ¿~kûöCm5‹K~«õªXÅ…Ö«
+j
+ m!âqÌöŸ'c”Ç„¶GÌž'÷)g×°|ŠÂœó½mó½ÈYÆZ3Å4R†3 ƒ$ó²Vr•þþµ†Ïñob2+Åô|Ozíd×V]Y¢èԨ慩½¦·°iE“ëÞ0¶^u¢Ù6
+`¢(E}ÄËTDf‡¸Ü{lâCôóÏ?Yèóï8p¬«q…®P‹‹å¬ð\óÖ«bq$—•ô
+I.‡‹‰Å±cÖK‡+>}
+2äR"•ÔzÙ/Z·v×ùS¿ýö[Kõ²ÿôê­É¨ûKee *nŠ©”X¦UÖäo_àF-x+æ%DÕø£™Î”R[Û:ºsC(MíáÑêë[íéÕáíÛÄô¯a47Kì ®7­¦&‰OmrPCxøòð°¥Ù~za°žïžh•åNJ1•Ø#¤‚é¤4o$;Ø>/Ì»Ø×·‹XÉy£(U +Ï_Rê¢v¥·¸87Ì GØP$NÈÌI¨©Ñ†ŠÈÛ‡<(ˆ›È#Ù"Aq``€êS'έX°±E]‰§ˆ„R ~L}¸l÷šÝ0i
+ã<\"~8”n¬²ÇqMs¹zný²M÷^9{Ù‚Uö—ìv‡ŒÍ[ýíÑÙTJ´=%ƉöD Íâ½Ðœè2«CVáƒd:ØTÑœ›øΦ:/w÷v£–Eî>~u¾ÌNÓ[³Ñ8¸0¡‹i!‘á­£t–Y°­Ì”4ÒÅ,ÿ C§©Ÿµ<bªÒÏ·6.¼BW¸(]\N+r¡5»OªpCbí(Ñ£­W íVQ¦ñ§¯!!î ë0‹ ‹©õê¥Ó»WZ¯*r4A&—<6ÉW6¯„
+má"ER#×=ŸNoñš¤v#'NB£\‡møŸù˜õ ÷ðDý,2 ÄÀþôÓO×Î_Ù°~w‹¾%W¡Kæeq¸c Ç”ÉU0W
+Üõ“][Í`—
+1=ßýÕóÍÏP6/$dL2ÉŒªˆ™DJ ¬ ®žI•{’’ÈÃM:TÖ¤¼@49'ªOí jðó¯˜N«õ¦¤:Ž!³hÆv«(ê‹ îÆ8äkZ24ñ´È{C"õ÷÷ß|ïúÖ-o·TÏ+Pê³8Ù,ö˜Ö«\^Jal9ÌR
+Ôå5ÆEô²NÆãer¹²¼HÛ\ÕܽüÍãGOÝýì âÏ÷àà EN7õ¥ >/U–yZ¡lW4Ô"$Ü–”ëIÎdÓ*ù<,­39/Ô ¤æ†Øav*ºS+½Å—^ŘÞÂð©7tî`Î9ó7 ™ŽloMÔÌN"…ׄ:(<ÉéSI©ÉâÊ”9]”¤é¤T?$IUNGøö¨È °6”Ï{n"„¢ â§=ÙmóÒÝÿúÄ0Aè‹O>=tðÄ‚–•UEZ,BÎ2´^6ÏBì°¼_~ù&'
+­ŸÚÜÈdvøºÏw¿ÏœÙÜ‘ìS‰ù”§7T•­„”y‘ˆ 4‰¤RbèH¨ê„šÖK{˜g!q›éa‘A&ò$1Œçzί\òf»¶ZžQ)ÊƵ^•o]½æ$
+Ó uEBUör9a:YHÉÈŒëŒU ÞP8¶ Òy 9Ö65®vºiŽUSèÍ<Z!ǵÔ͸%#qøLo¸‰èù,Z±˜–ç碋œ«óªU]3C´þ L¿6_Æ\oDHC9ΆcÞf „ÜP” g²»EÞ Ãeh½zíæŽíÛjæ餜œq…c<~JfDÌ@
+Þ ¥M!áaSr¥9«å)m” k«*" YYâÐd;Ý$ûºiv/»""ØåSq_ªŠa—X¦Qu |K\§Mªµ“N%ÇØR$.Hˆ©pl¤ÅÓ´Fˆ‚¸ÅúÉ,ò½ˆ!zpÿ~Ïñ3ËljVkå‰*¡P*&ŒíA/Û»ãm˜r
+ñw\%ΓH†ËÊ’™8¦ËËËË›k—nX·ëâé‹D²T•ý•çÈ£qÈÍ´û5Å× ñu@gÛQ"]ÈñRž'9ÝÞZ/ö*Ì“/Îk§Ú”™ µD.²¶©µ!Û:ª] U'œžW¤èŒ
+*¶S„R17œ`K‰¥#¡Î¨×¸=ŽŒdn~TŽEÆðùóçßÿý…Ó»WniÓV+rJc ­WS̃‡›¾¸~9Ì7
+ê; ñ²Èc®gÏžõõõƒóÖæ}­ÕóU¹:"I†³eæAH(ŒK‹‚Ö«
+'‚И֫œ0%TÐ
+òõmºª¥ÝûöùäƇ¦>\9Ó:Üj쾈v(ÃeÑÑ
+%Á, §ñ<òütQ:NP•.˜©žM+ñD¶”h4Ôî·v¢!î=û{&~yOŸ>½s룽{w5,¯(Ôa|‹­0o½*Gñ õ*
+ãÆVÐçìÛs&
+
+˜!
+ãxáùPA
+ú»__giÇšúR«àò0‘(vLá+÷úÙ³0%
+%’SJâgÈ¥r¹¼¤¶¼¢©váÚîíçz.|óÍ7–ª²¿sýŽòÿd!„ìæcf‘¯F\ö÷ßñô¥UË·¶ikåY层,/eìzéäú²…0
+]»F3¯qå–-ûo\¸ÚÛÛk©²2)¯Ôæ_Ä!:ÙÃ" ˆäÖ××wó½ëo½u µz~~®.ËÐzU6®õªDPw
+÷
+
+9Žaeu¥eM5KÖ­ÝyñÔÅï¾ûŽˆC¯rAÎÀÀ@ooïûç®t¯ÚÑZÙ’‹ëçp²8Ütó Äã'iñ¸ƒ
+
+ S7–«›k—lX¿ûÒ)C•ý¸pèùóç}}}7.¼¿iãÞ–ªN•²2ÃÐz5Ç<q¸ùIÐz
+ÇÆŽÅÄq ‚
+u¸HÆb+Ì[¯FDDqXJ¨ 
+ÆŽeØô6 2
+¡2.n¸—}Š±—=†©›ÊË›ë¯[»ãü©‹î?0zôèÑuCý¾–êN¥â·[¯¦D¨aT
+ ¹©Õ0h
+Ç,2"‘$Ž_#
+
+endstream
+endobj
+1193 0 obj
+<<
+/Type /XObject
+/Subtype /Image
+/Width 772
+/Height 900
+/BitsPerComponent 8
+/ColorSpace /DeviceGray
+/Length 22559
+/Filter /FlateDecode
+>>
+stream
+xÚíw|ÕÇ'•B ô"H•" ˆ€Š ìŠ{yv±>ÅŠ½÷†åaïR, ‘^B€„ôì<²»Ù{&™³¹»;3;å÷ýƒÙœìÎÜ{ÎÎÜßœ{Ž¢€x³ëqŒð4/¨êCàa©û9ã
+yz^GÍ/’ˆ8TŠq®å¾Ÿ— ¨ö«úKDlÀH—2\¨¢§Õøeq›¤¾‹±®¤­„nÐùu‘D¤žÑ.¤ŽWu N$
+é/à:ÊCþ]’¾É D!Mˆ·±;äÞ+p6ÏC!îåïwomÅ¥LAP‚1®bŠÈíÆ,s9RàNÎ÷8#ÃvÜ%‚à5Œp ‡
+ÇžP‹éb[™zF¸RDbr­Æg’íöm0vÀ$
+¯þŸÄ¶ù;E ø W°/äÓÕ•±
+)p«C½©¹Ô¤ÌAPˆñŽçÃ?ôü“Ì•"VcÙ
+§Œþ£ö¹"г8›>b}{a6(¤'aƒ!E$îèÏ&
+iKŒ#p,¤ˆÄG ‘ýéD!ERàXD‰_êDú·o¢#p>9!/^ÃvžÎý"u6Ràt~áŠHÔ9ܯ²ÄƒuF8GÄV€A¬ÑþÃÜï:æ‰ ø/Æ8ŽãÄš–ß!_Xùû¾Üoë u8F8ŒÖÂ}oe¤q¿?‹(¤M1¦ÀQ"üV˜6U
+Öân¢&`Tƒ E$f§òëáZÓCÞB
+œ‰("±ªa¸õp­þ2K`\cø3ä·;øbY´/k.gÕh­0ú# ÂS!¯-Ài›¿ÏÙu »ìÄØGp†¸Ï?•5ZS½C7-G– £¡]à
+é}PHƒH!ðM’„‘L$¼‡]öÀ9Š"õX#ÝPÕ2Î>uŽ0Ú‹1¶Fäznæ‹HT¨ »¹¿h¼Ný†Q6æã§æwgJT–7¹¿éºWÝ…q¶årñà÷hÖ(G ÃáÜ_IrHa¤Mé%Üô2Öh’6»ˆ*¤ 0ÖÀ–4^z?kÔ1|H*¤l`GH‰X?IU£ ‚„©È!öF¨=¿ñE$|µÆ
+é­s`+ ùfé¬Qž*I?îFˆýiê!u`#†Š%íù¬Ñ›ª4ÉÜ{Œ%Féw`Z Ǽ“5$aÄÏÉHŸ6$U¨=o³ªhŠ ¬'NƒB
+쇸IŸ“**¥¦/F;0öÀ"YF…@˜]ö-¶£0úÀ,_Ëí$.Ò<ýWÏa4ãâÎc2E$
+Ô(8˜{·‘äQ[OÌ
+ùà>^¡,Qc„ÍÄ>žDW7̈çÉ‘X§Æ »Ð¸Ž¥`>€åôæŬѱ‡@…ôY(¤ Ž"÷±FmU#`ý;ù(¤ n$‰xŸM—NTUH3— £M˜`)b©û«aéÒ<ÙÜ'´;ùÕ0+ÀBDúò†‹HÈq7÷ýIK§ó1/À2¦‹:(Y£RÕ@ZrŸ2š\l:`f€EÜòº’¬QŽj(ì¢ã?2[ñ0”#…ly.kô‚±!F!}
+)°RDâ?¬QÕhXÿN™.¡ `¤ˆÄ«¬Q²j<%܇5\%ŒÖb‚€éˆÁ?ñ·ß>b@]Ç}Zû\aôf˜Œè¿<ÓÚ³SmÉÌ;sLE”?ßÑVâRa0쳈3IÔµÁ,y\‘8Œ5ÚcV„éÐ}'R` g
+•æ$Öh¦j¼Bú&R`ídŠHœ¨š ¯Î€B
+L']Üt?ÁÕSÍ¥˜ûàF¢=¸º“Ì@ªˆ„Y’`÷É…d¥¾„é&P`z 9ÆqŸ}QHOÃ|ÃÛU¶˜VDBŽ†Ü§ŸC"°5f ŒÐ]
+ØZ¸J±!FºKf+>
+éÓ˜:`b©;/5òYêÙÜq &û˜ÅÜCØ$ŠH4a*T‹aŸQœç“H4 ¾
+yÔn¶þmôE$|Æ+¤“dMæ‘Šv$k”õ×ùŸ&(¤ï¢70Âç.`žþ–¦SôÊúwÊ, 
+)ˆ‘“…Ÿñ»²b+"±[QÚÄú¼˜õošCºÓ "‡|A_Ç›ÿ&)Ê1'M°þÝd½0Zˆ ‘RW¬)ŸeêÅ~c@ÆõLîðºj_“0¥ 2DÜw¦•ÖýEÑTr6‡ƒ*¤C0© ",)"Qù-È!eŸ]\LŒ21« V„<'›ísº´_Òiaî.û¡‚¨[Ó z°F…±z®¿ÙdóØ2¨kUH?†B
+¢à<á6üN¬Ø‹Høߦ™1;jXÿN›/Œöbj=dŠHÜ`Pqˆ¦m+cÒf…ѯ˜\ ƒT‰æ±{m?ÿ51joå»Ü¡vÛ[íö €ð"Ÿ°µÚ pÚÀ;56lƒ1Û*yh™0ê µ"$õßL-",¢Þȸ]öìsŒqĨ.fÔÂÖ·¬kÌQD¢~à­²¬¨C:%4ß…œ%¯³Ä¥"v‡mhEÒÄiPH$ÿ ¹J¿û*ÇÍ®ZYs¨Œ;äôšdU
+–öæ|$ÙôÙ“ jYêN7¾ˆ„Ïç+/Ùü¿‹ª¦`VmA(I^L= ë軿\µ«¸¼bÿßEö‘IÜ‘_NŒÒ0Û@‡!Y‘iLø¶=whV-ŸZ7`ºowÝ9ï—
+ƒÒÇ¡‚°ˆÝ·;Ú²F‘‘Ø=}|FøM„ÀpÝ_¦]ú{ä:,ë߉_@!a‰öEýX£=ѤƭžÒ%ÌçÖñ'tÖùMæÍK+ŒUHëý-ŒvbÊ–c…ÏžÈE]D"Æ…ÜxjåÕ¢fªOÓWG¿FÎáN U¶0ú“(¤ˆÄU¬ÑȘÄÐ ¯öat¦¼Ã«½Öâáu±‰DÏp§p°Ø#ªNÄ´²0.÷8k»’_0㢗ƒduG_Í =Þ0à94›çq"¹½êŠ‰U"ß$# ±—ƒ¯i/IÛ{‘ŸNÝiÌóö4&È+žCÔKü«®¹!¸̾Rx_B·ÐÿNùnŸ9¤OA!5XrŠÍÍY£rÕH*Ö>^íÁÁ¨9%Æ~w"IßH(HÀ[</ä›î¬Q‘j4¥ßOhVõîC¾1áý¹SÉX"Œv`ú¢œ-¾‡³FkT3(Ÿ1¡±¢ô}o¯)ïžÍÌۅѧp
+Ð4Ûô (áN«þ2a´®àUÄMqé¬Q®‰ºýW\ X…´-IKzÎàMú‹¯æóX£' wÊž¡÷žhÉíÐìù…ô|¸ƒi*SD¢·ñ>)|Т…F îäFû$M{Iðk”dâ*5cU cV!½
+©§µ˜g_D" T½÷_6PHß‚BêaD†Âª†V†@èVhŠÒ”é9vÀü"ö–È•›ø<ÒÒo¬BÚp¥0Ú
+¤ˆÄµqb­Ð+ÖgM°¹ g‘»²6po&&­Ò,Jášqc~Z<ÒçdR_"Üà XXD¢&þdý–ÅöÊ!}
+©Ç—dX~e4q­x…tRO±(4Ý[[YªŠ†ÜðÝx%Rq§Ûhµ0Z q;¢ˆD!Û­B1M¸¼R¡{ø-g…ŒBú2œÄÝœ%¾’G²FkLsÂJQª4~1 ŽãNy09ªSà&n¦›˜é ¬ÑD3—¥É›ãº¯ŒÍ 9Ï'‘h
+œO¦˜è‡Y£fæyàE™ß½•¼BzRO¨¢"þÇN³™E$”KÔ8Ã*¤ ï@!õ
+8.ã6wå| …'ÌÍUˆd©ajJQ=n
+é£PHÝDš˜ÎWY£tUE§I(HÀ!"?$C’VHç‘L?x‘³) Må’úä³
+©èԦ·9™B¹½5kT®z—Ÿ¸AéFº#L‚#9——Ä#Ï>¬Q‘êeXñ“æ†+9•ÑâÆ÷Öh…êmØÜ‘ É-bœÉ™ts8‘5šàñ£> cìL†ø{”5j¤ªNS›
+…ÔÙ$Šø4.E$\ .Fyð(ç!–º Ò¡Š†e7<Í7 £¹p)§!j;olÆUÀÿý|Å ÐÁ$‡ôv8•³øX<æìÆ•Âûƒ°ù´Ç’‡'ýàVNâÊÐÄ•Åí€ï‡H’ÑÍÒàXΡ¯=.d†çG˜CŠ ÆΡ‰XêÞËÇ—Ë!ý
+©ó@‰h(“QHsá]Î@,uçÖ** û Åaô=ÜË d‡&l}|Jë:•¸Á¢»ì¯‡ƒÙŸ™¡éÚÝ™5*ƒÇëÀæÖŽ$
+éÁp1»óªŒ*š×…Ýi7žÕ“Ù›áBèÃ} oT!} 9¤N¡˜ª[X£#áìì€Ä/$$`R…Úó"k”WB!­÷·0ʧÙ±tC‰(aŸ
+ù"…ðñZawÝ]…ÔÞˆ"£X£¥ððXÒg$$7:‰é¹‚5 I!Mú
+©}!E$ØEÒ
+£×áñ@¨=("a*잤B˜VÏ‚CZÏ®Ðð/«0•†ÜðžIÆ· \Òjæ‡G[ÖE$Œ‡X…ôVb”§´–'Bc_|k„Òº¦+¤/B!§ˆ‘?‘5š ç5]!M™!ŒŠá—BŠH\Å×5Žb…t-<Ó2H}ˆ'X£L8®‘¬bÒÂèIø¦Eú_ ˆ„U\,£Ž‚wZCqhÈQDÂBØ2Æ£ÉX·‚{ZÁšÐ€on!ñ
+£ùðXÃi!–\|‰Ãà V0“ÿbƒkíD‡T‰d¸§5°âç‘d96 ^k,bg0ŠHØ
+` ¬7Y/Œ~‡÷é%v%kt
+œÒj¦rsÑ}¯0ºþk
+éT(¤FñQh$ PD†°M˜ÒE]puü8Ä}e˜"ëáŠñ#›•f…ÑÏðä¨é#†q<kt1ž¼ÆÍK7RùþFør”"²Fíà†ñ¥/73G’¾Ð½áÍQ‘(Bàc^…Æ6w,ÒXKÝßÒÜ«ŠúŠ·oX³déÚÅN=^!}HÆðˆ"k»U;å
+Wá›??ïè§KÁÇÞ'·È•_Ì)ø݉gó7G݉Bz9ü:ZŠûkt¸£¯*aéËÅK›+ÿDG®qzp³t É!íÏ–&E, _潸9pš»¹üÖ}ïZUæÐb;t_JŒÒàÛ²?øÑ¥E$‚*¾pÏS^ü|DBAÕÍ>—gºôÁ@ «r+7=*cý;ñS(¤‘òKhÄ\[DÂØ}ò®«ž—rsU÷Oa”ÿ–àaqÃÐ5Êw¶»ìuÃã y…´Åaô)<¼VNדX£™÷– T®ºŒÉÜ|õÜ'ŒÆÁÇk¡¸Ï¿š5:ÙéÎHƒMu[ ¨]¸;ŽÜ»vƒ—‡¥®)¬Q†ã}å"ÿy´q] ð
+éÕÄ(~†ñ|è‹D—JB•J…u!¯Ìxì™Çy䑧_{ýõ×óܨ> …T±ÔýËÕE$Ωq¸žœà"7*¤Iß@!•aYh”¶´`ÜPDâÿ™Ô!¯ÜAÎðOW*¤$´·Â×ÞQ›~¢»á¶ùƒšºÏç+ý#D4ßÑçÆ>hµU} o×åüÐ…)"±ÎKÇ­Ì]] JïÎ>¹»¹¹ëMÒóáï:ôt kt;ä“àÒqK_4Ö>(w&ìÓýÈ}l'x| ²Ä—âC¬ÑnÑ{ùOçÔ¯vÁu@UÙꊉQ2|¾´ˆ;„‰®ÑÑ×1‹›ƒ*_u|+^!}
+
+©"±ÔŸîfU´ŠÀê·kµ3Êõ‡ÿŽ?;^!ýZBAò(bÛéú¦®VE«(
+tv¢ ‚Üý/.qþé•°
+éba´~Oø*4.{Ø”—eY. œTK±™²è†`AŽ No37‹­· £©ðü7ŠëãPÖ(GuKƒ‹Âf“—í)Èý㡪à?p“+Nïznû £ñðý ƒÄbŠ—ŸQÝFqOÓl÷¯[N}Ò
+¹ÿk ï<?ôÕþx…>=p[úkO²Îx75˜eå½› Vƒ‘x›¶dÕøò^=ª]VVV«£Ýà²v:¼Bú*R-bwŬT/¨¢Þõï”™
+’‡vVe!Üëß W £µž‘#™Û^âRÅ¿ÜŒ¶'ÅÅÞôx<&¾3øfÎ{àLNå
+nN!
+ééžQbÅÄ ¸’siÄÍêhrÛÚÃ!p †X£‘p$'‹C¬Ô÷b”äÙH_¯°FuáG.UH_Fžmã Bà{—–ÖáÒé¨У1 vÖ­hàµxÝr™Õ^½Çÿj}—+ëß™+„Ñ*O†À?¡óßÚÚsªè[º1H©ã¶“]*£¾èÁÏË÷õb
+Ýzƒð®n ÜëÎö\n~ˆþ»êqž ³Åýâq—
+·ñn ÜêµûN—m#q&¹×mê±è*NýJÖèr÷.?Ô@ƒ¦Æ^‡n#F‰ž
+"üfšºX,™¦‡$Í<¥¾.¡ ¹RDâ6øÜ,~¦×ø_måÆfŸ
+Ej>7çÖ†«C@ÔKü§¡—C@ݤ#2‰“Ndÿ7ûË‘ØÏäf½éÆ9ÉÅ!0+t–;dÊ<êNÝâñ'H·c ç: !?ص!pè‹evx!ªžšV»äV]$q­P„1 Öáf~¼ŒŒêp† }àTÖèCO„@U‡ÞjÃ¥§ßwÐyF¼8ô_aTáN…´­øÒ»Ž5:Æ!Påëµ/
+‘,wÐydD|$|ìr…4M„À³¬‘wŠHz7ªyíyÇ-ˆüîi ðþ¾@íq_$ˆÁß$yZ
+ð}à„¿#/åÒÈ;8è,6D¼7Û(Œ~q] ì Ûâ „ÀþoÐÀ($ˆu›‚½TY2!ºP¿æ< IB½Óe! ÚÌmmÅyª´nvpÕwTŽ?òs¯p`ªTàÎþ…(þ’-.;‚8AW…€x”¦ˆÄ>ÕSÌ©ÚA—ؽŸÐµñ
+'ÂûþC~.š?M‘QHëº(Κ_Dbžê1rkvìJ|ËQg8è§cÆtxXÆÈq„ø ¬Ñåª÷˜«MIºÜYwƒÁ=ðSTCƒ ñ.THI‰É¬QSÕ“øöÍpìðÁCF\>uã–CÁýOD÷×e¬Bú¹VºD!0Í›E$ÜJpîòÏó8gh"6œ«?»"D‰¿êBuU7*“£}ƒ·8oèNÒ\â©Ç¾˜^<ÊyP3Í'Búrþ0’Üêøø<t.{»°F¥p(.eªfïè߃͸”¥;<®K á—
+àBE³î5 ŽjðkÒÃĉ\ sºÀ9„öLŠ]^ÕIÞ—Pœ@S±Ôå“?ºÁœvT‰h­}gÕËOn-*¯ðÿR^â`ý;íwa´Í¹!ì«]¨Q_ÄsUVZRR¶ßwlíòå{ÿ¸ÿdý~A·͸"ú™½(áß}ДÜ"å؉ð³=]D",«–›H+&fÔ:Í·,¹€®o…?³)ì B0ºÊ¡!°-t«³ Š2lÑË(±ÕU`ó[‡‡Ÿç›ý!0N÷wý>ÜUë't“QH{82~—»—
+2Ü
+qÑoW…¹ܰߢüB_ ù|ol
+é•zKpqOèèKØdq%Ïë!PJÃÖõ$|›^ëÇLâuûC F×½Ä㾓΅çÅÏÇ%$ûr´8Ã3Y£O</±<ª/!ؓ¹Wè]&¨egWCΟ[bˆBšø…ƒÒ6b>oe†Ae¬Ì ªóKÙæΕãñ§xãË5vw]:Z“öyÝ_gÀ–r.RïoÇ*¤é"^ã ´/©Ê5ð·iwÈnúÂ9—5 ó8üñÿúw­ŒJåÈᜤåVaô¥£Ò¥ÅÁŒ¨¢<½Cº@ËÊÿ9f7©oó›jNh£‡ÖF=§r^Ò‹ ÊxÅ€–g"Âè-þDaÿß®üïeŽ:ø׎§O}2î[ÓŒ²ÚáñäÂÒÕ1!°TÜÂÀ•#Ô[*b®Xñ%9ì{açóƒÕ1ê^·"æCg«+N$F) WCG¦ˆD!"@õÕ!×C!îYŽ;‡Õ÷’uñB#žtò
+éÇ)¤cB\>’5Z†PÕßý÷»ÁüëÛxy8XÿNúÚa
+)I½„5š€
+ Õˆžk#]:<3üƒñCèç@ËÆ8òƒÅ\Þ3‡½y¸ž%Û8> e^GÖE$´óÆU¡Ÿ';&•Vß1 º:²~ó¢ŒQܹK¬ð±FÙðþÀ Epmtg~å­¡oOU?ÒÓ¤aö(7óÝ«‘ü£Ò“DœžÅ=ï/'Ø~µZ¸¦›rÍ*á\§ÁJa´Îž!@ªæòéÒ]àüÁ¯ vó”í;s†ŽÔ¤jù¸‘i·S½kÇH–I—N‚óù‘£&vÞªý¯YŸp=74ÈÎœ³mbgðt¤K×N@ßë·UÔTñ ÒN{ùúà\eÞd²šâò™­m9¡c[™ U´V›Ts£Àûcí}èiÁ»ó/5¬Bz»ÌÝdœ˜:´m%.žçrÿ€¼^íÕ͸ZVÝ
+-¶ä~«¯I(HñA”.â› îë‡æ8YßÙ[Ößµó¡Ûž´J­FÊ aTd§.ŽýdÖè¸~ˆ¹þ©YUëÿë í|èŠXG›}­*fÒ„Ñjû„
+žO/ŽUü“ÙÈü-P+Y…4W½l—Hóù4k„". ^ÿs¼å|Ò%2
+éI6‰ñÀü«$¨¢.ÇŸÒñ‚%Õ󥳈3µ°Eˆ¥îâ „€ÛÑ&Ř{É‘RHm¢XvK‰Kpü­P‹b‹eØš¼i+…ôÙÐÁ„)"±Îã–*JâZË>MJ!-ŽwŒJù±¬ŠH¸†DÙ§ÆÜür.Õp•0Zß8HÉ¥¬ÑX¸Ž‹n…Α³4h§ÔRΩÚ…ô©x†@†ˆö‡Y£Fp=öäíÚQIn~AAAa©3R©Š”öo<…s«Aä@ŽŽ_"Ÿ°ËóHBR·ºimFÿjû¡jjù6Àú29¤MâE¡c˜ŸUÔ€å^ÂëvWF¿Ž‹¥Ï22ªÉ}`CS¤K#yô°õWFŵҦå{Í‚·ÈÇÅ'>·¶]X£x{ø¸¿òKÂW±fT𛬭ú¾ÑŒ«Éúwêa´/! jå— e¶ÃÙûµËÍ^ÕÇÕ†Q”ö±œ{e­F‹¬>b`.`&Á×k‰²
+U4†5ñJúZ0óe/F'qèž8)¤b©»: ªh,1°JóbàAã;‚ áý¸(¤"i/·ƒÄ¥ÈÆ@@:£‰Bšö›0ÚkUÜúÈ’("[ ü«yñTÿk­1:zäs®Ötƒ0ZhM ×'¾#È—˜3©Ðæâó¿V££ËOœ³u%+¨{-."q3k43M \=-ƒÙÚ>åFÆQG¨=/ñ•&0_Q­.@ Ž°°ä8bÔÀôjÏÉPEcŽ•:_t­0:‘ŠC´­…é
+©¨­´¼>B öXªy1P(äHŒNÄAð„‚d ëB´ý
+Z׌ õ!>G £b eÕŽßgi5w€ˆÄ!åþšƒYªèŸu¡Š6‘uZ™½ö÷F#€^@xMMç+øC )zÖ„Þ|ss¤K›õe–ô3FF¶M}i™œg^‰üî("aV ܈먹léFa4ÛظR„ ¿ks+æ&ºHÈÊjÝãÌ÷ñ`Ežg9'ìFjº\od*¦î"‘
+XÿN"­ÓbPHEêÅ2k‹H\î9l¯7Ü@V!Í Ömц€Øï½£­¥E$|<3ƒ»u·kƒÈá\³Iâü"ºx2ôE‘xþÏLàXÿ3ò° /zض>Ä;/1­ˆÄBSNJS:ÏÝKºÊ]©- Õ
+ÿðáÏQÁ–º:(¤]c*"q%kt–IËœ‹½2{ŸWŽâwU÷DàÎÑ‘ £&;©ˆÄ‰Ê…^™¼¡[ öØ…ÃåTâ†>b…”Üš~fy ï”ØÙ^9ŒGûÿë×HGÀ£½uàrH¿F*¤¡?ü«žÕéÒûõ<LÝ)•Ã¸‰|•!ý6JJØRR÷pK$!ðOèÏ65³<]º¹¢ŒñзWRð«Ä_wýExs”dsnz€h ©N•Ñqo7ë‹H˜¶Ö¶þÒ™#ƒ?,ªü!Î-7pŽÚ¿H](ân¼|k´Ù¬s©THÎôÆ´5ªÈõšuÝF8s´´ä\õDrÇÒY.z‰åö¬Ñm¦JŠgž˜nÒ®ªº#76qˆUHo&VR
+ic±Ôå+X·3WæòF‡^¥¦NÚ;#40‰ÑutyYBA"$‹x› ¬DóNä×Ê÷å…)+¯V!:ô|96Aש’Pô–º³ãRDÂÿþ'{aÆžöŸê¡Ÿ»cë•£§˜sØLÒûpƒ|‰ãRD"p=;Ñ xð2¼êûÄwR`pWÁ•£g-ç²mw
+£·e‹Hìê—"%Èñš®Ã¿Ý¼»`ÏæoûÔ$@ä\Ê– %û²Æ„ ÿˆ»&¾ˆD®™çÜíÙ:„_ô¡‰…†Ü°Ž&7ðíø,nIÎ`ž5¨ãþ¹b·?)·Ã‘c¹™N¨ý ^õ±[ñ[‹Há‹Hô1õ Ž
+Övÿ\=Z5 õ³‚TM^8rì+J=^­]Aª#SD"ÙÜ~Ê0÷OUºÿDïÖ(l?Rt—Á‘cUHSfÖª ‰§3Ö‘йAêú‰Zh¡»¢;~…œó6$šÛ*=ƒ¼Ð¯—gÆ«ºtãàÇ qý<î?Ïùú³‡žV±±Œsß»Ôp÷:‹B¿Ì±¶ˆ„Þ­Ü`·ÏRó•r`õÕˆ†³9>‚|½œ\ý—¯ˆï¢~q+­zÂ1Ðí“ôvå"¸õø¯/l·ÿõ–ÝQ`"FØþ3ç¡mÄ‘8‰ ™f/fjT0]\áƒ?
+½))èezŸndTæÙH¿mùö½…Å¥å>?–ß
+Ù`Yno1‰rk©QsEê›[š­N®G¶«ž«‹9U£HQRÜ0š{dånS¤¡þýG]“ oU¾×÷ `]‰xÇ@j5Ä¡”Ë$Ê-U”è‚àÓD¦F…q·B×y1‚õ…â•ÃŸè^Iè.jTIhûD?"“ˆ5륗7›Ê¼<Tkb™-äY³BàlŸF
+øx­ìnRóÖö_+>øâÐç½ãœÑb€bì³-‡ÓC»†1Z¯ý«íÕjûÂO·FMÐ/¦ioNÓw³˜ûlD mã]q2cT—`ï݃·Dõ†Ìµhú¶lçœÆÿ0÷Üš>‡+²“®BúC!uß'(y“c™é³‘¬iêûŠb)ôÑô¶¶‡EÕsÔsÄÜR÷9j”­X õï $6`» ,:^º–•+J<ƒàÛd‰uÀ&‹5·wNE(&è¸ò¸HBDÅ£ùct#<Î~®Ú)ÙŽ9`¦ÏF¯‚8‡€¢ §‡yc´ .g;‚{ˆs¼ë»V ÍŠ>3.1 ¼G-'J¤;¸oë˜ãeZJ¦Ñ
+ ±÷Ùˆšø›ß
+©3ð‹è³`úl$|Hf)qƒ®I6 IMT\6lØ°C>æÔ±V}YøK:æ•SE¤FJ¡þýk(¤‘S§{,Ô¿uº*z‘LœÄ!¸Œáé<w‰ï
+k.˜îÿ¨«3<LᆣJã. 19ÒwË”½
+ýxªÿbaá—ºš4§rņPÿžÍä¦`‚-*GdDèÇßü#”qQmº}XB!¥§ñ&c43ºcT´™Ã00Ûvûpí´¡'rc4sätÿx¼^í:€Uñë2Û‡›Ù4”[i ŽaŒòáýu_àYbÓ-ÁŸ××P/@0Ö#]SûfŶ,¤òÚx‡åê[È®g½îâ1=ª¯gx{X˜¥n¢¦&Þ2ÅÆÐ6Þ¹hãN:S6@ªÉCÔ¨P±5hã-Évv@Øzûpd
+éOhãÍè=–<áç6oÙºkGÎöÍNÉðüÍ"Ógcˆ]å$r¤_bŒNð|¾Ë’µ­YK›×|ê)NaŠ2höâ&Ù>”.ôx™ì?e±×c ðüä‚j¯N H ^½W\ªï,YÿP£þŠx€^·FI,ž½HÃIVþáJðòª¸ˆÉ-˜.ska3hØîë‹ Æ:ì`dÐÑþׇzøö°&¯P£ÍŠC +˜ìV‡j’·båú­»jæ’WìÚºeËVO–¢ñI<xµg¢\í_ò×C€Úa¶àžYá(IˆñïϘ4@´ñ‚õdP±SC@I¦§7™1™Aî×w‘vñ8ÓQ1 B}<c´ sü0}62—R£ ‡1…|Ùƨ³T¶RVÒ7ÔèÅql$‡¿Mj@äª(ýUóB•¿Í UÑËdâÄAâмt‰ ˜À“0™•#Ê+ 1Að£ÿz´÷ÚÎ*ùºÚ7¢ÿÅ£½5ƒ™¼3ZÏ<þ}6¢%•žÅ#o¶ñ®JËÖ¹+èâ©‘`úl4ÖôÙè 8M‘„Ë£u^ŒªÝ€u´ª€÷b€é³‘2ƒÝ«8˜©T
+i+C'?ÙË1 •(W¦8º¸Ï>
+iÄÉoön p!pº=ûl"ý™…4
+·y*|2ÏI‹WB×;y½­æh NñP p!p±kUQοWeyZ!ÝQí¹I_ïÄ
+Q£x„ƒéY3Å”ùðWÁ,u5Û‡V<ÃCôðTÆhüÆýª¨òhM¥À#Ð6Þ…ý=«zn©;^&N\
+•¶µñtúœ'`€†»¢Ï†
+éŠw3D~»¹£Ï†!
+é×Ì×D}x+˜¦?½Í6P£öž mo®ãXø Ø£?¹©³$ž¸›Ãép¨ÝßÆûÀªSÍuë–Ë$Ê­R<É T%±xv#»Cg:Èc’ÐOÜÏ&2½%Ï.ä ·Ÿ)£=—(§Uƶy²Iˆ!ϸò ͯ!B ¦ÿÉl¶NpsL%'ZÏ'8žI”ÓôÙHQ>cê°º¹weîxÂyßúë
+®vßù­`Dï%ÔèhO‡€6Gú1Æè?® ÉÅköÿç‹Êÿâºó+a2‡iG
+õÅãhr¤/cŒÖ¹5†Už¿°N½Ðÿ\—
+MIîC7Ç™®’¹íÃÓ¨Ñ"¸¾àT‰G‹®kã}OåIe…~¼¡òÇ—¬{¸¥®fûp!Ÿòý
+9Z"½ÈnâoÏyaèç@Ûîù®±PEÃ@;‘íéæ…4ÐpëÇÐÏE.Zö0½%ŽòôöáÚ¡þ½¾©Òîþ3º3ôs°âx¡ Nm¤þìuÚEáóaýûW¦w²{B X‰?ù ðûJßKÒyˆêLfëO^Ö*jÔ_K|À<;é嚸IœT½¬:$ŸÌç’è®NÊOÔèEø»MèÝϽà–q27 3~fÜR÷Ej” w×GÓÆû"‰Å³ƒ™ÏŽBkwJB×K<=
+éÚ&î ‚+ü'roµW—ò |~·êϘ6Q®ü\ZroïàŠ¸zeíÀ£cå;Çž³Ô­û5:^MŽô[ÌÍ¥ãÛx/ôŸFÛ¯ßë½™SO«Tº´‰r?ÀÉk£ ¯»£œ~¨¨ð¯…kþÂËTч©Ñ¸xíÜD]â\‰Å3°·*ŠD¹ÈY(£¢Ií`žú )…$94m,·£‹RWqˆþ<uöxŸ #ÒU N€©”ÕHS<¯-|;*…ôæ[~g#˜¥nÊLjt<[žD:r\ï‘ð<ÛÀôÙP^¥FËáؑЙŽÝu‹g`GIèfjT ·ŽŒ©žv¢ÄâÙŽãóU8÷a€Lœêƒ* ´÷¾žnTHÏsöCaB¦þìôEŸ¡È67w¡8ˆÎ±úsÓj«ÄÓ ­þQ×}Ap¾ÿZ;>ÖéÏLúj4þ³Bú S† ÓéלLŸÄ/¨ÑðæèH¢£8™1ãðë@[‡‡
+é8'_fêÏvûpx®Õ
+©ÃÜèR_ö1úÅL‰§À€ ˜Æ(¤K?»Ü¹¹ÜR÷%j´ ^k,š6Þ\é=Žr¤+ýÇÜÊE’еO@ôŒ¬ù~ñl{®
+ÜA»'ŽG¢œÉ|F¿c†3F¥r¥kýGœæ¼`úBôFŸ ÓÙI†Ø 9¤××Ô¼ÁMú#¯í³Qþj
+Ô¿×9¿IMЗzíqVHõÙ8Þj8ôk}›$Ç8Ó-U‡Ü´ÿãN}ñWÝpû~l~ÔR}6¾…¯Z2!»;%îÔ?~gª¢P#ôÙ0‘t¤ïaŒžwH ÜïÀÚ>ŒD9S¹ŒÎÇŒQ®3b`²c€©”5}6,d6½5¹£· é«?ÞÝ4Ëz$Ê™ î¼NŽ‡Åú£­Ý>Ü>j­BÚA`ÌR7õgjt;<Ôbqh.£&Ãc ‡©”•@·8¡Ï†5Hµñ>>k‘$t75BŸ ‹h.¡²+ïÃk- 3Ñg#.L¤s3Fbñ b¦¾þ(Âöá81 |É@Æm¼ äbý1n¿Câé0ZÏrg{ˆCf³Œyn¿‚ „_ÆM!]Ù
+iä0KÝ”™ÔèNxš¡›;65‡BjT¢ÜËÔhüÌ1âмtF熯G( i‡£Ï†“‚Àñm¼mè³á,2é¤Þ'siUdêÖ!H”scè„9¼·µ0ƒÕN#''ÁÃÀwdÆʆA!•…鳑¹” €9Ú‰lWG(¤r0KÝä©Ñ;ð.‡@ý{UÒXå4}6¶Á·)Ía¶z$Áï%–ºè³áT49Òo0Fáùµ&
+éêF‚HUQÍöaôÙp¯BŠ6ÞÜRw¼Lœ
+éÖ6¶PH*ÊQ6‘„î‘È©ÞPH­öÇaöóÐgÃ{Að%£¶µ8_a¸µ1POÿ¬—@õõ¨7LaŒîµÎ!+÷鎰4NÑ?ç;©Q2<ÅÅO§úJÆ(ÇÒû’£­ ¦ÏFƒåÔ¨üÄÕ|A.+²Ô"ü¢òì,îR¤¾ÉšÚ/ÀK\Îvåú?kdü垥F[à#®‡¦ÄllO…Ôgq H%Êaû°×Ä¡ùLoKšÔ\îÿ¨ãâ(w弟0%Ô:Yu+¤]¦›I[ý3í¾!à=49ÒÿeŒž±êîܪëÀýúçÙb#5BŸ ¯pv®·„ém¼»)V®rôÏ2}>5º
+ðKÚx‡ÜÒŠ|!¦Ïå¼&Gú]F:?Ü<·ü½ê3,ÈÂè¿»$ž
+tÒ·#ƒü‚éçë=‡è©ª?ÕÕ¾ÔbòZƒÔ!f»h›­Ô(~ài4ÕÿoeŒ~5,eaõ”ƒª¿ùAê·š;¥Î/m5LÝ >õ—P£cág½)8•1Úg ZŸÿã9Ÿo÷&ù>lê.?Šë³ñ-5ú>àyhï}}ÌPHk^Ö>ßSxdÕÚÄ‘_X’(§Ù±
+"„îõÍïÁUDê«Y£ÑgÄF…á
+é>å)3 ô­TQ#Ô¿0
+iDm¼cÆbà
+ý#k­ic‚éQ É‘žÊhë‡Eà­MͨҵNÿ¸ê/ÕßÇ@$hr¤`ŒÞ—WoÖFr“/iÇõÙøš}ˆ¹Qr5u¤‹$Ïa‰¨Ã†¤ä$Õg#3 ¢f>MMÊ•«qƒ[ê^#óô
+éŠ1Á6ý?Öv…!vƒú÷Ï©ú61ôÙHú’}‡¶CSEâEÆè”èUÑg%ŠWzP'½‰1Z­*z å€ý™L]ùt‰Å³L!ëãÊ! ðñÓ¢C%Ï5 ÿG= Ðg8Zg7ç@‰Åsu¦êÿ‰vûpK 4°/Ô¿W0[Ýôñf–ºi¿K<=
+g™ñ7 ‘:àè-þª0YÐI_ Ïp)T!Í+¤Ø> \‹F!}ƒ³º}6€{iCÝûV}ôÙ
+‚¹) Ïð©Ôé—ÎS! Ïq”ªFÖ¨
+endstream
+endobj
+1186 0 obj
+<</Type/Group /S/Transparency /CS/DeviceRGB /I true>>
+endobj
+1188 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [458.42 408.626 508.941 423.308]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://commons.wikimedia.org/wiki/File:1st_US_Marine_Division.png)>>
+>>
+endobj
+1192 0 obj
+<<
+/D [1190 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+425 0 obj
+<<
+/D [1190 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+468 0 obj
+<<
+/D [1190 0 R /XYZ 49.606 763.909 null]
+>>
+endobj
+1189 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F84 441 0 R /F81 439 0 R >>
+/XObject << /Im1 1185 0 R >>
+/ProcSet [ /PDF /Text /ImageC ]
+>>
+endobj
+1196 0 obj
+<<
+/Length 1635
+/Filter /FlateDecode
+>>
+stream
+xÚÝZ]oÛ6}ϯph±ˆ!©o–¦é‚!éÚÎoi0(m‘)W¢›¸®÷ÛGŠ²)Å’£Ôqâì!Mò^žsyï¡d vØùcÿ‘ø„Ô±-8Žß±|à@§Žö¾îÉ~CM€²6Ø cC[¿íí¼÷ÍŽ |×u:½þrÛ´ ÝN/ꜿú‚L+"}ÊH˜ÄI:Ë‚x”°ùì¤wv:Ÿ½w|ìùó׆ñ«_ÂIÆ“‘úÂv¥ZÙtt™Äª-}LÒ×½?.Ã.Æj™Š- –-&ÙÀ¶Le\‘€Ç„s²ôã
+¦i[å1ú9ùÞ=s´Œå±™™uÌÒèÿ!cš-jÃöÙʘæ‰7á¹û2¦‰š›}n2¦i[åñNËXU¨\-TN‹ë­:Òäóß÷nÝ(>*ijÈÙà²ÚÚÅj-«’æ‰ _kgŠµI•4QÓÙ <­V¥b|2غ£IÌé8&‹ç/áá‹Ç¹&\§—"aÓ‘³œæG5‘Û5)#l $iUÄ<-bn‹J?JF—ˇº•Ô8.Üoù'ç{Pó55¯EÎoFm[»V÷âD•&‚š§ß‚ç¡8€DmÔ=T‹¬‰iåM)qšAˆ Š:’éÜù0SÍ:φIÊI±Âo"<X>ôׯ œ€,™ð¡~‡à‡¡_ÞšñûEñt0á8ï}©Ú¸2§ôDÕsñ®!ÅÏ©Ù„ÔÜ5¤Ö½bº0ùUÞÒúbpM2.çü*; ¨¸ŽKÉð®MÏñš¨HP9TÕµ0^¥u„j\7îç=]›õ®ñ¸¶¶çÚ®ºÞ;î­yöSû—^=«ãßÁùK¯Øó
+endstream
+endobj
+1195 0 obj
+<<
+/Type /Page
+/Contents 1196 0 R
+/Resources 1194 0 R
+/MediaBox [0 0 595.276 841.89]
+/Rotate 90
+/Parent 1180 0 R
+>>
+endobj
+1197 0 obj
+<<
+/D [1195 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1194 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1200 0 obj
+<<
+/Length 354
+/Filter /FlateDecode
+>>
+stream
+xÚµ–;OÃ0…÷üŠ;th6×o[l @bCÊFP B¼ÚT• üw’¦!%`Kñ+×ÇŸ|ää"ÜÂE‚»‘•OJ*ªµé¨F ³§ä-©ê¤`Ui´¤“V}’&GçN€¢Î éÝ7Q E H3¸O™Ùâv=!ùxŠ
+O£Ë—UñP—Öù²(ˬ~Û®PÓföxr“^–^ˆ¡¶Ü¢Í}Ñœï£5µ†€ñÐ2ZýŽ {b´½há‹Á1ú£Eèø£e<×*:ø6J_´ ŽÑ-â¡e<´Š‡ŽÛtê*Ù´³£Ÿ’ƒª@ruX«°ªŽzÜ`p<û N´³bx7ÁŸäΊáÝèà³Ñݘ`7&¢ìÆFtãþ½áùsöQÌß_ç³bµÈ?+Yr–þÑ^í5½M¡•à¨Ó|Ûrk)˜£†íþø ÍvÆXnü5ïN
+endstream
+endobj
+1199 0 obj
+<<
+/Type /Page
+/Contents 1200 0 R
+/Resources 1198 0 R
+/MediaBox [0 0 595.276 841.89]
+/Rotate 90
+/Parent 1180 0 R
+>>
+endobj
+1201 0 obj
+<<
+/D [1199 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+1198 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F93 449 0 R /F84 441 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1205 0 obj
+<<
+/Length 320
+/Filter /FlateDecode
+>>
+stream
+xÚmQËNÃ0¼÷+öèâúíø
+¢EH•äVqH© Ai\9 ¢D+NñîÌìÎN¼õ‚\}oêÅreP¹P êƒQ µÁšS¨÷°E²x©~E°-)!ݺ~ô®+J.*´±Í0y;DærU 0Ø(¦âD%˜)™†Í²‚14K¥ÌÒØ òШIU‚O]Ó÷vŸŠÑ%Æ.ƒmÿÚMû„ŠPeÖ{†{[Ð
+} >6Î'àÓú¡u™îÉ5¥òm®ÖBû³íMÛ=Ÿ»î›ŠÿðpQJ¢Ðc®Ê.k“è+%"㌧i)Â?ÐLCIÃ8™³Z·ãý´»NŸSRB'7´£óçbîæëâcòaU.Ú>öC Çf 'ãËiŒWXƵšq¬ O{)©.hwõâ
+endstream
+endobj
+1204 0 obj
+<<
+/Type /Page
+/Contents 1205 0 R
+/Resources 1203 0 R
+/MediaBox [0 0 595.276 841.89]
+/Parent 1180 0 R
+/Annots [ 1202 0 R ]
+>>
+endobj
+1202 0 obj
+<<
+/Type /Annot
+/Border[0 0 0]/H/I/C[0 1 1]
+/Rect [48.61 740.517 85.083 752.129]
+/Subtype/Link/A<</Type/Action/S/URI/URI(https://github.com/ralphieraccoon/MilSymb)>>
+>>
+endobj
+1206 0 obj
+<<
+/D [1204 0 R /XYZ 48.606 830.145 null]
+>>
+endobj
+429 0 obj
+<<
+/D [1204 0 R /XYZ 49.606 792.283 null]
+>>
+endobj
+1203 0 obj
+<<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/Font << /F90 447 0 R /F84 441 0 R /F115 467 0 R >>
+/ProcSet [ /PDF /Text ]
+>>
+endobj
+1 0 obj
+<<>>
+endobj
+2 0 obj
+<<>>
+endobj
+3 0 obj
+<< /pgfprgb [/Pattern /DeviceRGB] >>
+endobj
+1208 0 obj
+[602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602]
+endobj
+1209 0 obj
+[602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602]
+endobj
+1210 0 obj
+[645 645 0 500 562 287 500 500 0 500 837 0 0 0 500 277 0 0 0 0 0 1003 0 0 541 673 756 628 500 274 317 400 459 837 636 950 779 317 390 390 500 837 317 360 317 336 636 636 636 636 636 636 636 636 636 636 336 336 837 837 837 530 1000 684 686 698 770 631 575 774 751 294 294 655 557 862 748 787 603 787 694 634 610 731 684 988 685 610 685 390 336 390 837 500 317 612 634 549 634 615 352 634 633 277 277 579 277 974 633 611 634 634 411 520 392 633 591 817 591 591 524 636 336 636 837 0 0 520 317 352 518 1000 500 500 500 1350 0 399 1069 764 637 0 0 0 0 518 518]
+endobj
+1211 0 obj
+[602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602]
+endobj
+1212 0 obj
+<<
+/Length 149
+/Filter /FlateDecode
+>>
+stream
+xÚ31Ô35R0P0Bc3cs…C®B.c46K$çr9yré‡+pé{
+endstream
+endobj
+1213 0 obj
+<<
+/Length 120
+/Filter /FlateDecode
+>>
+stream
+xÚ32×3³P0P0U01T02R05WH1ä*ä24
+(
+ä
+endstream
+endobj
+466 0 obj
+<<
+/Type /Font
+/Subtype /Type3
+/Name /F94
+/FontMatrix [0.01204 0 0 0.01204 0 0]
+/FontBBox [ 5 5 36 57 ]
+/Resources << /ProcSet [ /PDF /ImageB ] >>
+/FirstChar 136
+/LastChar 176
+/Widths 1214 0 R
+/Encoding 1215 0 R
+/CharProcs 1216 0 R
+>>
+endobj
+1214 0 obj
+[41.52 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27.68 ]
+endobj
+1215 0 obj
+<<
+/Type /Encoding
+/Differences [136/a136 137/.notdef 176/a176]
+>>
+endobj
+1216 0 obj
+<<
+/a136 1212 0 R
+/a176 1213 0 R
+>>
+endobj
+1217 0 obj
+[602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602]
+endobj
+1218 0 obj
+[741 741 0 500 642 371 500 500 0 500 837 0 0 0 500 342 0 0 0 0 0 1003 0 0 543 717 787 789 500 306 348 456 520 837 695 1001 872 379 457 457 522 837 379 415 379 365 695 695 695 695 695 695 695 695 695 695 399 399 837 837 837 580 1000 773 762 733 830 683 683 820 836 372 372 774 637 995 836 850 732 850 770 720 682 812 773 1103 770 724 725 457 365 457 837 500 379 674 715 592 715 678 435 715 711 342 342 665 342 1041 711 687 715 715 493 595 478 711 651 923 645 651]
+endobj
+1219 0 obj
+[629 629 0 500 562 284 500 500 0 500 837 0 0 0 500 277 0 0 0 0 0 1003 0 0 541 673 756 628 500 274 317 400 459 837 636 950 779 317 390 390 500 837 317 360 317 336 636 636 636 636 636 636 636 636 636 636 336 336 837 837 837 530 1000 684 686 698 770 631 575 774 751 294 294 655 557 862 748 787 603 787 694 634 610 731 684 988 685 610 685 390 336 390 837 500 317 612 634 549 634 615 352 634 633 277 277 579 277 974 633 611 634 634 411 520 392 633 591 817 591 591 524 636 336 636 837 0 0 520 317 352 518 1000 500 500 500 1341 0 399 1069 764 637 0 0 0 0 518 518 589 500 1000 500 1000 0 399 1022 668 494 0 0 400 636 636 636 636 336 500 500 1000 471 611 837 0 1000 500 500 837 400 400 500 636 636 317 500 400 471 611 969 969 969 530 684 684 684 684 684 684 974 698 631 631 631 631 294 294 294 294 774 748 787 787 787 787 787 837 787 731 731 731 731 610 604 629 612 612 612 612 612 612 981 549 615 615 615 615 277 277 277 277 611 633 611 611 611 611 611 837 611]
+endobj
+1220 0 obj
+[852]
+endobj
+1221 0 obj
+[584 0 611 500 333 278 0 0 0 0 0 0 0 0 0 0 0 0 333 238 278 333 474 556 556 889 722 278 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 333 333 584 584 584 611 975 722 722 722 722 667 611 778 722 278 556 722 611 833 722 778 667 778 722 667 611 722 667 944 667 667 611 333 278 333 584 556 278 556 611 556 611 556 333 611 611 278 278 556 278 889 611 611 611 611 389 556 333 611 556 778 556 556 500 389 280 389 584 0 0 0 278 556 500 1000 556 556 333 1000 667 333 1000 0 0 0 0 0 0 500 500 350 556 1000 333 1000 556 333 944 0 0 667 0 333 556 556 556 556]
+endobj
+1223 0 obj
+[837 668 837 837 837 756 673 837 837 837 317 637 837 1003 837 837 837 837 837 520 837 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 317 494 837 837 837 837 837 837 837 837 837 468 634 958 557 664 751 685 698 634 488 837 837 837 837 837 837 573 570 679 787 611 697 527 825 642 695 611 611 764 837 837 837 837 837]
+endobj
+1224 0 obj
+<<
+/Length1 2388
+/Length2 14165
+/Length3 0
+/Length 15498
+/Filter /FlateDecode
+>>
+stream
+xÚ•·eTœÛ¶®‹w‡@ pwww ÁÝ §pw î‚[ÐàîÜÝÝ‚»Ëa®¹÷Ê\ëœû㶢õŒ.ãí½ú_+rbEeza[# „-ȉž™‰ ì
+`¹D,œÞ£lè
+¶NÆ@
+v
+`”þCl
+ã»Ò°!õ]†_êïˆã¹ì å{¸bÍ‹XîœÙ‹xØ@?bùñÖ`¥Íd¥·î•Áƒ½XÛ
+ej´Mç5Îÿxä(ç̲'ÛÑ¡eÀ
+21Ã>kTp½š¦Æ¡³¿Øýþ[’¢±â®Üü †²þ˜b,*—‹‹"¨Mø{[…H•ðôL»4™ã¥ÐØIÂ'‰ßi¿†YØ·ú–JèÀ-6Óð‘ìd¯¿
+¤ts|”5˜
+—œof:+ š<¼$ß—Ôiû-˜ñru»¢Ky0nž;VåÇœÁì~`3„L ŒìB,Ðd/«~˜êê¤TÏÏåi¯ÿ<¦â
+£Ä{¼J‹‹{ÙMÍ‹V›8ΜƵñ×啃,_”9çR9˜¿=5W0 ÒÚÑ’>¦”4nÇ+¡^”à¤5
+ÑF’ÐS™-Ò¸'õ=7?R!Í#ÌCøt(KE“UñÌ“î›Î}fœ§¥ü
+B¯ÆxŠ‡=uì—ÂÉç5ºh@ÙFüÊP¦¡&+ª©…ÀÚÁ pãksŸWT§ŸFü†X½<)28Ý,Ñ_šc¾,<}`@o&† Ý{©Ü»BÂ=süt-Ðdˆ|hº,î5p¸D‚ÿ…z™!ÃË{O(
+ `@±±ûÐÊÍ›«‡à ò›•õªdX {3Á U¡W
+Nü)Èo/äƒÜ·Á’æ¹ÐV®ê³2ƒ¬áhY ¦e R´y¨3^ȱÃÕª@k<7–uèœÈÊÓ«£À§ÐÛêÓý4K.†` B€ºI¶ÐÉŠT†>©È`+zŽô:D•&ÿÜmPou[Ž2oEÈH0縫ðÌ›ìHtñóöèâÓ¢MºN`ÐWñ¥¥Ê Æ×.!Çð9_0‡0Z£‚ìž;È"xöãÃç£È§v·tbý”ý<%ðk‹åÙ˜ˆY'Ørµh`d¸ôn€ßËœ*>Ñ᫨µQ-ÿçÖÐÓî’F¡M3}â¸_èA“B¼Ód›ßRF0!‡ÐzaGÙg¸?Àj‚<Ãj£ð=”`ʾR%RsGr‡N[ a¬(FÇGkDp™;Ç“]šÙ‰ÝanDÇËÅÀݧ¬㦀_ÌíÇ;Ȳޮóº|F ™¡Ñ²æhEÏD…Ö˜9,%9©ÎÍ«¯J©t—1ŠßÅûÄÞí¢®7á|&ƒG¸`éÿ­AŠœådƒó&Ý°{üƒÌzƅǤ‚vwb+¡BM–''!z3Ó0òÖ€€Ð9,@.¸rêÑ•ÓÒËöUM$Á?ÁºÒ‚M”-g½—Ò“´ÿÛÕ
+Üa¦²qˆ¦ÙiâPÿtÌ´#ÅGäšO|åkÕõª~þÌî&¤wÂáI…[iü õ±‚Q‰SXÔÜ>‡}saæsÛSàŠ2Õ·3BÎío3¿Ñ¶(9¼÷–}hêC
+”óŒêî\ê
+•W?@÷~Rmª+†VÏ& BphÓ±&q¹¼’YNqÑ@±ú¿\Ïx×ó CjÌÃ:ÎÁ\\–HXv_s¥ªù¡jþÞÁí‡,*ÕFȦ‰fBœòïŠò±íM9'Tw,"w4ËÛU¤Bm:è]zߣͥ~3iVgŽæ{j†M‚-š¤7¬ókÄÿTß|B?’ §wwïâ_h™“£™öjÁFB:õ•‚Ò¢˜ö£BšjÏ…¦9×=*©p±Ëõò–çø’b·×ùqY´ÿ´”(ïA÷E„?ˆÚÀ†T¶ZNçS
+Ý«ýuQ ¦s=áÚI
+ˆÁ>©‘Dð„e‘é¦i£§JÏb؃©":'Æxž`º~Ã>¥zPðËå‘·~jÆ[Ó§&Èy$ص{¦KÞA§gí?`÷VË !úŠj \o˜»Hd²å’¼‰ß¤Sø‰Á©IkÆÜÑ/÷Vö²­£&£“´B(bÔ+‡
+­~þbØ×~VH~ €ç®W[ Ã
+ˆ· Ð@]fÚ>¨Æ}ê0åȲèDƲ5ÖœÊ>¹‘—'žHèÞ2ÏŒïcíèˆ3ì*Ü­NõYbŠBqBò¶V·¿Å9®Õ4â3Œx‘8mBe¸R`ù‘<EËc!
+Èš!LÅs¾ ÉOáO§‡ÞV5Çñ‰£pÄàŠ ã»àÉÏ@ÐÁ4&g–P•É²:Ü«ßi6{·Î Šó·F Ó ç&`7êlŠÜ”Oëî~²i EwBÏ^ä3ê´Àv©e¢¶Ó:àwñIð¨ó¶p}c.4ú9´+ÝõÓ97Í` C‚ë ¸'êÊû©!©}¦ÕËï–$ò› »iúˆL>‡‚Î…ÌÕçßzûÏãÑÌðìoí¥¥î\µño‘Ô߃—ùNÉ^?…é4>·ø¢*‘¤ 7_!#¤“hSæxþªkqŠ¤©ç \SWjno‹]½wU3o&xø~'§û4ªrHÄóÀŸ¢i€l© Z
+$î£ëÄø«äW|_ÿïÇúdØ Éb±u
+óº¶hnùeñ •|ý·êy¹ÎP¯fï]˵œ;AVßèYžÆ­}ëf°y+žêÝAÁ.äÖ6UÒëGÜÑÙP3ž
+¤ŸÅˆèUÒ¸xÕ²>›ßN~i™G^˜Äk Ý6ddÕeŸXO¡B†šèH׊°¢½¬Õã0`x—ì9zòÈ H~ô%êÛ¸àâ’ÁÔ
+êY*ß±Üø#S=
+«Xyãý®{9£nw¨Îaf³­ôåž–ò—ε·CUüU‹®ÞΑ)üM8/?º²´¾Ú½Ç¼^ýߘË÷4Ý”yÈTò"3?f ²j
+rƒ¦¦Ì’—Q"·WßòØZwýHdOo]ŒÐe÷Kcdû*¢%·Îº0MØÈáNrXÕ}Š[õôvGº4Ç\ó²'ø•³E">-Ù]—!€=uòyŠ3çä<uÉÀ¤W¾ÜÞà±ø
+ ÑñÅŽÅâ‡8þEÿKÌùhº½–ü=œÕ–Óëµ š$_ª¸ßaF÷f9щXšv­%åc ³xfÒ‡fà@e<Á:›–×/Ož<ù71ßÆÈ$\‰$U9žIÖúÞ̓Ð jø®ÛŽ”á —S ×Ç8ÿ
+Œ7²óØ.jM¸¼—í)ü°ÿFä1kh•ðì+!ÒÆ-ŸõD
+ŸI˜¶îÑ–#šì:Ÿ“µ
+Æw¨FÉÌõºøù»++<…+Ù
+FÙ£å&åvˆG“©FXÑÚŽùáØb0ɯ&u†Þwß›Ü^´ïLr'4iõC6h5ó⯙"û!fwS+)•G{•ŠËE~ÚøíÌ’þº±å„D½ ž¶c›mð_­$¶ô«Ð³Ê¶ôò% 7 ­LÿëñLf&Š~|Þ-5I}Y9%S™ÀÐ^È8]%iJ8½¤´‚B%±fÅÔôîÁ*£GŽ±jÊÒñ,'@eõø®V ¤€ÕÐ÷yWø’¨‘¦p_É>V:‡#ŠB”´Â ^]U(b©Oçß}‹Ö_­„0#\’ÌS;#‚[;ÒvM q/­u`Üèð!\¼œ¥e—”Ê‚Û7ŽBøµí•OãCÿ¡âØM¬ìg†eÊŒvÀKeXr°ïôp;p#ýÉ«|Ë>į!» žêDpBÙå„Øé&Ìm(RÃ~#¯ º 2¹—B>ëM©?è#٬ȤêàÊ ¬°Õn!Ø/ àir]£`~ò‰y^=²™ú­…ú+¯|³=D;ƒ"o6xƒ…uhDïÌK/0™úuè¡ÿâ" =zU¯­‡OÎW¼¡ \bÔhØr>éØN²ýz]îÓ
+Ež‹?N<B×Cµ†Ü'6zŒ?C¥Šh®ö1#ÙÕý3^Ƚ^ãGX}WðÙdz k˙礥)Òxtâ
+­³$%çøÄÌj}19‘Љæ-v'ɦè*Zh -Ææ
+ãàÁ›º×£—´¸Ž}&«­8õµ0–^eF¯ì*+³)vì;ö±:ÉÎ¥Û觫ñ;Ÿ?hA»Šï¯nEþ¶È+u<™s‰O~Èàu­ü…D[‘숎åäKÞ! Fr.ð›h
+]AQ Þ‡'òB׉(¡•yWÂŽ˜6ØpèÑP„k¹½éw±ž„jù²
+jÆMt˜•JøFƒk®·«yÍ•’˜
+/º!&ÞÛ@€£Û…–heáRmæõä¼âò„g½ÅÚ²ùµ³{Ô`ÜNU/…ŒBˆž€¯ª1ÌÆéÍ?Å¿¬ÃªçÈ~åYú{íÞ³{R––Ê ë¸yÜÒå©«¡ÃRa¸íÔ¦ƒ©¤ªÀ*#-{Žþ÷wWç%Ùga8KŸ›T»^$|ÿß(ŠÂXisÚb§«jáÄroð±g• á6ÊÊ"[+:H²9Îaµëé.YâÝéœëZŠ .)ØSª¦¯»'› åÄTZ1•Ñ—3»¥‰Ïœ‹Ú³‹þ®Ûíñ&]¤Ýü‚?₪¢­•:^`†Nºhmª¦Mº ¿Q„oG~uäÁp?‰@FÔ\àò¸è¶qpþåP©)ßÎYðáYÀöÊnœkc^N1{ªþ”s5ö©çøÁÕ›Åé8ê–™ô•VØHÇë+Ñ–r«C­—-%ѨÍÓ5ÍG›Å<¦$à l½ùZ¨¤2YÒ}b ʆüªˆìO÷VuRõzó`QI
+/1ãDþtá|yÄÝþÖë¥`6ˆüšc`'à
+Êñ[¼D¤¼PM¦–Qc~‹W7v¾lßMç>u¡‹¾‘Î^ïÞ5É¡£ù!ßM}.²ÝðÍb¨®K ‚œ«ã{ßGØô1]i’†*ïyáWãGÉß.enº,¿ßXÇV‘ +mÆϪ}g=æ‚©McüiƒÕü³ÕyZ‘[l¾(9æL0¦D,Úlf °â„{–9š‹¤‚$µû Î ØUçM…É ~ÑÞ#ÌœŒ1ɾ·/ ÿúyŸ¹¹ÔkPL vk¤9?†Ô=PÛ£ÝgSÍ¥è ‰œ°½ã胷6•ïOfš¾& HÝsÌÄâ,Ï€€Ï!°hÁ÷±j¢Î;XÍ}0ë3&4¡è¾]íÞ;NSGlÄCë&`ì1ÑË+Ÿìk
+Fµè w$¶Ûð)Ž‹¿RÀ`^hÙ5„ I §óô×6#ÃÍû¾úv\Ä1ý¶kÒˆõ §ôfViäb²Óì¬ Œ“c‰ìQ¶‡gãJ°;ƒv³ŠWCë¸L—ÓÇez(A£®1Àl¬:Z»eÞ±‰Y-Z$õê—¾ÖÎf3éÔm-«¹½}~N\ˆwÏZNèo[÷0…RUHk4_“]Î…7š¦OoèÕÕ܇2…怆ëG;/Â(mH„'øš¯ŸæüT6¹Â­¨t`Ú~:°ûȺáÄÿȹ.„US(ÿøÆ(ñ±°~ÔØ'Ìaû^è.ÝÞ´SN2 èçEl9¸“^L>º*Þ3py™‹.@ã®k5'ÈL¾”¸ÀúÁTS#˜}qf Ú``EŠÓõòק ÿ¦¤Ã°¡’OYÙª“úUЦkð³7axõŽ#ªMô-F#Ì_œÒ¯h,ÁÒ[/ØŒ‰ÖÆY¦ÿ }[´¹G!nÙêsû‡õÇ´Æ xvk™Ç}™ßþÎý½ru48á„Õ_ž4
+nO€¡"BØ 0d8šHC8µõß8ël€bn—îìc3màjjªçða¨)tƒÜðÖ xjACä‹ñSˆd`dØ-vŸý~Ï4Ÿn{ü ²”ž§i‘|UOÙ!X‘,ÛÕôøöÈ2~¶BÑ:&õ!³)V çêü-ë$Þ*‹þÿU±wiq7ÄD#‰W¶è€4êRÙÕíØ,jÏ».(4ÿüjÔ× DÕ0Pm3¯ëÙ£n‘ ¥…DÆ\xú¿êG[lîˆbøE¿·éCÿ5•§3¡bwÍ+S'0¨ÓMid"ímÌñ÷ÞE,Ø—Ë‹)
+ ƒó7*L0ýüU%´—ÞÜ/Î8|·Àż <¦ ´ìîyp‰=vká’çdå"´úÈ7eÎfÓkfÖ‹Çéëéõáš` »Ð¤¤ø}åìŸÁÐ>PóaJ B&Ÿ|‰Ÿ¹
+?Îç›&•Ç+å9e
+&◮ÞÖ}#‘q÷ å™–@zº±zìtœ3!u÷uåæfFswt„ئ‘ßi"‹CÅÙÂ<ŠÆËñfÎ÷I†SŽÆ}§yTœaYøq§ÙBÓÙ~ŒÈ1Gš8^-ü5+Ô›ø˜xmÌF? japû©y;×E>Djvÿñ[ŒoÖ1Ào¬®{(²›«¦_ëò=Ü#—CÄÅÂ(.ð‘HÀ_¿Ð¶M–$æK%I§Wu!4¦õA¹¸$(½c.€]ínŸõ µÓÝ §ü×ç¶õ´û<ëK9ñ§5ý í Qòc·ß³-éqaRß&ð[_ úÔ×Ïí¾D”—=™ÏÉíW8Ò˜ú«Vì[¾ýd&½Ä‹-ß˲D™Ìâ­¼mÂ<¤Õf©‰Ä·Ùl0­ë%˜xš`¾ej9Zô cò dòdán QVø(sk Çf
+äcFÁuèH LÔ É _ÁEGžÓã Ù¡v·j#”ÎS )x¤:oðÁcÝø}„!ï¬ÇtËýùb“,ùReˆ¸‚›ÒKGNú4’›ž
+2˜õp­T LÀC
+éb˜Ê:ÄRÑ8Ü¡U®×CUm€Ÿ¬k¨&g‘åÙn¾e™¸örÕÔ’+;ÜbÄYö÷H_ê‘pJRgFQCÑQe±ÂõÚä\kÿ ÊhKž÷72UòüEcx\áƒÍ†ôÁÒýÉ÷“ŽB?ù¯;òz#-+–ªÌÝ™ì¤Lƒ— Fpd–b­´IÛ~NRÊÇ[—O©y1+9½ñ%Ž0©Ó†Þžlc“LáÅ‚{tÀŸiz`µ‚AV(òè¹>¨GX]D³óùÜGîX2/¢·œ¬ÌŸF¾œAŸüü` ¯ u¾»dsDÊ·
+Ú¬q1{×ÅÒçYQ ¬^eÛ`?xgÐ`šêb(ÈjÈ7]jç#þœt ׺¬÷°^ Û Hd”íà r½<…-¥Œ#iªÍ ¶ì‚r}ç}²—ÉÙæ'‚K‚Âno£»+ÚK‡;¢¿6fðoWÆ€Ì7¢‘ôk±Ï÷©ªy¨Ã “;c–;2>Û"S† ó—ˆ p¿>}zЫR…ň|œt®I›°+|!*z‚42,Õä‹R{8ÿ ©O=€kçßÛ,Äv,ìO&Ù'Õ|óüD¬¬1¦j”ë‰I9ñôü°_¼0ZÖ§€æ1lÍÅÿÒP¶é´çwNÅŒr@º4Ú7ÈÁŒQK{"3r¼ÁBOØKñÐñêë¶c#8ûqA~5g±¼­—ê—•mKø3åͳ¡˜{°-Ú½úp¦:9Š:.PÝZâ§À$W¥ªÐ›¡-”ÆÈ}ÌZwîhná¥'¬U<Ö¶èzp bÁ+ñÊ3ƒY‚|F;rÓGSøú°Ý³à¾á(×*H«nÒÇÇX%’bí4|h»[Ò`pé %—w¤¨ã¶ ‘#Ã
+)ÞÊß׋§qá½Ä•Æ^»dØÂûppê¹-P©.š©£¿g¯²Òg0u®*¾N?ÏFúU‚o‘Òܼ·Ÿñ$̹>½éܘ‘[=©mÎMí*°ù†_
+Æ”Ó9¯, ì$ù!U9|>ÑøÊr,‘w"{žp,ïAêÑcj­fWÒ%\D¬¾Ö50PU¨òás?n„çÏ@•íÕ~Hi9-f"e¼~kgfåòG‡ Ǿ>ÝÑœ79ÐÈcbJ”X…Âø֕åÝq?Dú–Õò7húºXYÊ„:e|”[+v5vM÷_ðÔ®hK´CÊßCÖa_Ý›òÂíxC;‰X4Ç U¿‘=ø¨ë4/rhäjœÜLb÷økôq··’{ÊX¶ Öà»»ñ;^õ®·©ìÔLV|ÆÄÓR³…@ÈÀY±¼²Nú!R2™8šÙR¦³çy†^ŸÂz ‘©|ž‹Ø¥p³¢£ÀqñJq;°C‘.{pA4õeª%C>@.gÉ)»{Qh~æƒÿÖ%ÛPý™Ts’©*-5ÚQ¯IŸ•rs¦ÍzZ÷+DƦ­M-’Žü¨ifù™‡Ý¥¢‰Á±<Ý
+¡§Á€°yP0Þsߟá‚Mxƒj4÷ž¢f¶Éi'0859Üáw³!!ܺ²r¼/àô›õ*WLÙ(5]”ü4ûãøljv¤§Ä…Èý/}
+ ƒa4˜lŠP7îƒC”ú¦&xŸ‚fŽŸsßb`EÅ ç MèxáàÙoBjÜ4µ÷µÁÒU¶ýŠNŽrS‘Ï]Å·Äó/ÓZAäÍcÔµÓ ƒçE,Å„£äÇFf¨aý3F´úÑ(¤Z{“ R…³B‚Þîša¡ì¶ÃºË¦Qôzë& Re$/Rx&£ #xC©X
+·›ã©5kí‡è¾±Î×sá Þeª1z"n&6¢1+í Ȭ>\Ë[«›£PɲîBnÜiáæZÐ.X/PŸ¢GM]Å:G¾zö»­y ™?Æ- G{Š…èkMËžì˜Ð=æЂ‹oj%'£®‡
+t# Sý³Ãe® ûûpþF<!Ô:†pÅ‚ÅoÆ€MøæEq ™p6¡Û«Š=ñÁ%WÄZh/vE’¿yˆ„«)ø­¯6Ô1zÂÑx{ƒTâ Ioà¨smòÉ:»æ†æ¬ìŠ^€YÅdþá°žß ÛÓRž†ð‚¥Ý-)Í-/F]/U«ƒå‹ @ÏìÙºbó òy,Ì…Päíå¦Úº¹g<~x¥…æ¢TïýåòKÔ¬6þ„ÞGõJCøÒºÊ~p¾[ÞCA%>‚S·Dñä—Kûꪢé0ykõ4•‹vY+_Ö†ô“i¼8¥‚q¿2?óÄówÔ|Ý-¡ÎO6n+ { tg+>=t5ÍßF#ÎÞŠ'\MÃá£þ ïË”Q@+ä•SòD"Í/±ìäÿˆ¶ãÅÞô–ë ñ Nf†ü={
+1®8ˆÚ[;ú™«'êÌ­Œ¿U0U1EFòü &ÍLXäwƘØØåÖ©úö‚•®(pWà€À{s|@…›ð®w.<kOäc¬0Á²p\¡R£ÂÔ®™|Ü ]«‹pÐD6j@Ùßs´§a.'Št(Ó_¢ã­òÅÒê8[É¿ E¿àhy í&Øl"yÊßj}øiçºb+²®7€ÈPhJ‚zHѼµÈÁPÍõ“
+x~—‘}_Ù7YxK
+¼‘³;ûËínÑEöot-©ÆŽÑÓWK¹âR]Âq›¼I\ÍRÞÏ á
+ËHñ£«ÈIœì³Ùfª™‚‹®÷& K 1>HTùK
+>áõªwßä#Ó¨. ÐZ³µýKÙo[êEÕ~p¶ý¶Wþ†tÿc–BÒoT §VÛD‘Ý„>`„£&žLºe¦ú!2µÉÛ`OYƲWí
+endstream
+endobj
+1225 0 obj
+<<
+/Type /FontDescriptor
+/FontName /POYJCL+ArevSans-Bold
+/Flags 4
+/FontBBox [-828 -307 1951 938]
+/Ascent 771
+/CapHeight 733
+/Descent -222
+/ItalicAngle 0
+/StemV 73
+/XHeight 0
+/FontFile 1224 0 R
+>>
+endobj
+1226 0 obj
+<<
+/Length1 2163
+/Length2 14713
+/Length3 0
+/Length 15954
+/Filter /FlateDecode
+>>
+stream
+xÚ•¶uXÜi-ŒHpwi,@°ÆÝÝ!8i\ww îîNp÷
+ðù(‡·.ŒíþƒFÎÆÈÜÄÜð_ý8ü?XÙÿ`U9[[Ø€M ³qþÅ¿øÿ¢‡§Hƒíßf3ú#÷%ÅmìMÿÅdbfP›9:Úr32š¼¹Lþp18˜0€iÞf‰ØX[ƒàÿÈ5·76|Áñž„%ØÆìñ¿vs°ÑÜ
+62¶·2+Ú8˜ÿ!Ã[
+õmXÿ˯bfnh 6vp
+ÀÖÉÑ ðvÀáÿX v¶·ýÃô'â
+!Î7å¿Ñ‹Ê_ˆëô7zc1ø 11¿%؃ ßV×Äñf¶›ÿÜ«¿’ߊþ…XßʾÝ^“3
+„e¹Ù ßçc¼¬s0FA+ä‡Íø_9Z ¥zÏ!Púœ»´Ôõü>&\È·µŸÍ ¹‚š‹ôñ­Êò-´6SïJ;ãGE¸Ù% Qf‰^ß=´d¦2ä:¥OÒá¥F¾É “ú€WqHxÇÊbÚ–rXËwc>YVŒ)M«ò9 ’~I'ÀÆFeý*夰­PÞÞ]Nꊶ–"³Í“µ”q»÷ºÊ Øžzõ<¡?1Žô =WBÃ(Åt­
+÷ŒYΩ^ÛihÉb% jô2ÌÃ8 j[ן»J g׺¨|ôÁ Ö1}úZdüË ¸â7äüˆ
+[8”î~Ú—R“2é=F7¿–4E)‘á"$ßx<$~Ž+1¾˜1Øz+Çp‹ßÁ)­™õ¨¾j¨QÙÕ†œµô;KÀP;É IÍýÏtç™-C¯þñ¡ÔÓò— ŒS°\6ã„t÷¸ñÑYçUõVût¾ù̪Ù%œL3I°æ¥<¢Pò^§àKãüùm~h“qp êë4¾pvCs~n³àLðµ8œQ6$áꯡײO—ž7€ÓŸ¸ò‰Ôgä›×îª.!{M™¨¥æ°ðèÔ“¼„Ò[@MŠ54áWY®Y;Ø'Š‡“gÅd¾5ƒHx¸â2ÚÍ<’¸ìI"ò òЃ¬ß—˜¶ÜÌíîÄÑ:He„±5«ëÙP ˜!/Fª³Q회ná4?J‘S)t¿_©Z²dú& ? Xë–‹i\šã—±yWiTÚ×2»‹Œ0¡h>€RÂ7êmç4¬Œ«ùå!=1“.¾ºð˜°GK7–ˆ:¬åÆzÉ›’4/§k-xãî‘\ºÅïT­®~âÀòïE-j˜ÂðÃð-!J30,œi¾2k¡ß4 ýÍi{¦ÔH`Zqƒ}Ž½ 5쮡½¦¡Ÿ±u§y ZÆñfÏÂKå£=ƒŽt'³½f…Ôƒ‡Å܎䦬ˆÇ0#=Ü<ÛA±§ö(.){ß¾í|yеŠ‚(ýÁ§uÙËÊtJJpP”Võ·ô§…'üÃÊU§*(?=Ý“Aœ¢Œ@¢ÙÀø°ÞôÚpl˜´rº-ßíd¾žãfQiq±iPsî ÁŽõhË¥)Š¸ÆûnÄz´>{ë3é­vV»Td%‰•ìþ¸Qj·k/ 9ªXþZ Ç^.‚*=ç^mLzÒþ] šøBà&kxÈG°œÇÕr#75zn±¯Ëš3¢¹kï`tilNqC­Ül- Ö'UmÖ\˜6vËÃ×É”ê|¾uüù{–èÝú/íi ýX{ògvˆFÄ›
+¸§a®Jk”ä­úRž /q]8áÂ!´‚‡ïa¢‘Ø›¶/þµuúè¹^†.ûÔžþDøåQ{ÂåWûc©×0–\/ÂŒ%³~n{o*?ÙPno Ý‚|~o¼âçü•IRHáœ{PîhòûŸÛåtÛÑÚŒCÀž-Gs² ›ñ­ª5YIâøÙ(-ËjåŸó³C!Y%©¿Ö¤©C™¯äÚ™t<ëÌŒÍÝÈbVÂ,î'ÎÌZÖÚ«Ÿ ÌR94¡r¡ÌHo‹xíè“Ç >f9ůaü6½2ðç/5;v¦÷Õ\4@‘~‚ÇëÂtˆXV«û™UNH–Oˆž=Z‚xÍÃåe<<¼Ú “{fè >úÕ@*KÉ–µâ´¼N‡¢tuó):Õ<§‘u´Ê§±:‹S› ˜Î/i1÷Ì~^ò¢RH¾ÿÌBâè™ ro“×' Ú8‹‚†©t*Á>Âf&‚Å¿‘s’L¨±i 5ÓÁ é¼ªhpä‰#‚õ!_ã”CS¥Ç•›!æ11¬ì?…0i×­4+Pã±rd.UuÅ š0Æ!O¨Q_” x¬ûT¿­ú»x±%ô¢ª£îXÝÂå™bAR[ÌÑðñ€j
+~y[äéþZý‰˜kl ]k†ùò¼Öé‚` £瀩¸|¬á'5û Þ&ÒgÜí•Óëf)|œNq«Ûç'r¾òÌ„>C¢
+®¤awPb¼ã^Já†]d'6†×_Ž›cS[Èfd/™n9?±†ï
+Lv,‡ó¡Ü͉”ݧP(zµQÍ!u®·*bKÛÎ"œs˜±KY¦­Ÿ¸ ùyŠë³€ËÇP­<?dc圽uòQ
+¯gäž„H2jžRV¬‚{ÇýCÓà€y7¥ªçZ~ê»áð€Ú¯ŸV® ¹Ç]FéZ„lÕ#Yã0˺i°i´#­WߤN…+Œ’+<š-_?ŠŒ}N‡§°„‹¼ùQ÷RÁ†rò[†ð¥_Àúnex§RºÍÞ—*œ&,å77{LðýÉ ƒF«6úåôýÝò\õ‚±2¾·“«ªD
+ü¡PãÈðCËEռʊf,6ÞñÊÝåÙÒÖfI¸G¼¸øä)’Ð/ÞÖ׊ý^õ pJÇ؉¤[¿¯ëH^Ò¸{ ÈU96O?ûn–Ôa§"‡͉÷6eÖJ™i© ~ÍöTÞ~ôwC<p ô÷VdÝÆ÷`Ôå¥OV§—¥¨GgŽ‹‘]§Î¸Ž§„1'›Kç L±+áîÆã¦|„üZÄ”Oq¡Än8æV“kÓ¼{9ìä7b œ¦%|\m´i±\r¹ÍÍÝJ%âû­c‹*%c­S¢æ¨¶DÞÕuäW9M8d[š°VÃÛ3äEe-›¬ ZlÈkÍ%?’†? ZÿŒ’I¤mÃ@Ç ôé–@z!g¢Â‘¾l-
+†ü$E Iõ|\ïZR i:Fž>•uÜA¬ó ¿ì©}Ð °!š‹ ‘a?KšËþEÓj©êhÿ`We¯,gL!öËä ›*ÔÆÜ!«®òHÚ)íÒ—šð;˜éâyB4ß zG˜±²/;F” lªkR“éä“ýU9&ÇmEê"vHL¹¥ƒSÆbwŠ:ñS&VÕtŒ…nç>‘PL‚̾Ñá‰K·©}ýpªÝ]nh°²UN.ð5f
+îE-Á¶¯"áJ€{M×Å£\þ -²R,ˆ&úaçK•Wz‹ý‘»¥!HÌ’2Ÿn°ý÷5–ÑM餗ë£DÕý¶nmal®/ãÐ~“ eæó¢UÒ9ª7¦x2½¡d]å×-A†«Ÿù^ÂÓü|zXtu*³6E¯»\2ÌÑ¿ ”›ŠìùÙJ£õŠ‡q/¿87-•‡ ɉç ÀQçæÒçy0›ù™!ä2¿ìŸrýJǼѻŒž‘¾*œÉ:…1ôca|Yè;a‰ ¼ú¢_D^JˆBö•_¸äjÌjó¨ò$ðù5çP§äŒNr)‘šŒäüàs‹dr¿Ó×{{tU~®½CîÍV”üòË ÷8±PAJIr\3äÃ+wÑr?ÛAµˆmÛ†|Q˜ŸÀ«z너¡T˜8[[ž ‚æL60La7#…"W-|‹}À¬ž— ÒxHAF¥ÁOʧ¶ }ÿ‘¤ý›uöM·‚*–5â+8‹C¬ƒìÆÞ˜=Ž¯“¾ÕUŽÖÙé(îSÜÞ‚mZ"™'B\´G°(f†ÌA4Ìê%hnhG¨Ç9ógxÌ¿%i?z¤Xáe}š“MS¦ßPWXÁ<A»äw |㶻àmyw'½( Ř n«nq5*.n=‚hPŒaüJhî4ö
+Élœo8ÑMÜ…XæÀ¾'Ý\©û²ÓÈk,Wd(>!Ñu$Ñ“Žq~ês^FŽÂÏ„  ˜‘|„˜Sè°x¿|Éd`áãí‰5‡ñA®åm%ä…Ø~ñÞñVÝÁ¹çðÏ1»¬ ‚Êr໬Z¬W?¶W6”oñyB+W…~4´”ÉG• ¼ÌïowþÒ³(²ç¯…>QXÄ?4w3U&âËŠ†ûîH¥@F3¸+¶µoÛᇂŽÕèJúdŽªm`bB„;¬¡xE·pSÕ†¬ë
+ão(ó#$-'~˜;Ûƒk ÐwhxbLÕwíŒ#P’}•!%cµêéF%òÇÛÅAѬ>ZÃTî¯Æ{ßhYý>åÝl|Ñþ6!8¾SöÁç§"WO¼ï^«z Y -öRæoÏ0{•üQEÜ+Y!h
+R§˜¸({ÂÊ  °/Þc­~£o§íâã¦ÃÊíªôd2»wÎgå¾Ê4Ì ¶2/˜ë¶×ŸJ¨°G&1<£^ž²ÑW,I0…Ť¸Ý‰º9&¿º•Å¡@Šˆ·9–~Ziz{šg¾ÕÚ¥êù&è—)¢nëŸ$”d&áD¾ÀTÓ‰œh‘\X¯°Á|ÈÛüLö_·Ùë7Æ£ö¹3Ø×ÊäVFŸEL$’WŒÔˆÊ&Ô¯d a0“Û„± ÑìëZVüc-iùûñ‘¯±–ûìÕ`}Ï£ö8Y!á…Ž¾ëøEàA­Ú‡ÿì…ö%`¶U»Qí‘{â0†©;™àqŸ„åß[_ò—ƒMÖ]8t›Ñ)žŽ ÉÍ™XkÄ&¸ÄGªçtÓ;%ðüòË/]±“IBEVѲÏãŽïwsQ›4Ð@×4:ø,kè^ö5HÉä26»P±;©S÷dë·R…3ÍÀûßv-î~"4 X² ’˜E¯»‚M‰ôþš
+©9º»®u9<ÊÖ½P8–›%ëPîiÏk†uÂá) Äûn‰ðº^)Òt÷LIö¦Ë–Ó/(Muë#Ù^(#>Úº(™6¥vj¡†wUöø ë²GM¼°!jLÑaL[Ó
+¬%@Ï ÚüM~GGí_L·töÄÄh°¾©¢i!u\"‹Àô4ï¨~ä#]wuÀiYûWÍegâÊJTT#èê¦>ç /<¹¯œLÆŽîd%½5‹ö^×vG1%Uà;\X…M‘gÇ@
+ÒÊ#bÜ|ò¤ßQÏ9èðw®'é¼Agõ÷žØ|:„¿²¼tx²°nã‘ôO»ÈNi7X–Öc®¾jã†êͪŸrE %"˜Q¹DB¬¤û}e’Ø~Uœù6(×"k£Zk‡Îù@í"§ê¿•úÙå•¿| ™¯QÊ
+7RÀ¥ÅZË°Ñ¢#ÃgpŸôsMxŽ&qò{ɘhü¾<„ÏòS+/2;Ú–)§×ÞClyW‘ 3Õ´9)¥nêÝІ¯P™¯F¯UßS
+ψFcÙ&°ßw%º¡±èå¹:lð¢¸f;
+úÚ4Ý.Åô6ªÃG7‡+OÕZQ!à ¨Ú²J‘‘v=ß&ì> ø±¸ _¬{˜;.«5a"(ç³_Áy°.’,ú­zgÆ ’;S©“QÀZÈvRŠ.‡òö¥ð”êâü`þ¨¼gìì¶ß
+Æ›¯w2ãž6±%žd¶ý•¶G«×üý5Nöpçµ\ã°}òˆE6(µ&6Ù‚¯*€P ‚ÖД¿ä@P€Û+8Ã?2HË™õƲÔ'fd6Ò¤aæ!(Îî„a¯{·„3þmiPnùÔ±¨ÃLèÚ$©ý{ЂD˜«ÖöS|4ÕQ0°<M4ÝzÇPT@ÙùcÆ_6:ms×ém+±CCiÈÖ!FGOòæ6ìUÞá[v ÑÇê»Èí›_™ ùJ­êYt:+)ìŸ'ö†<›1ý8Fîš·a’±à2|‡ fç;¶œ
+ÖåÐ<6Ô=ØÐðèdÉ€ãKî€×´ù"N]=íÍòî ä³µøgOœI¶ÒæµÚ +T›=W™¹mÿöcßë—êl£"}J/Åš¤8S.´Ù3ÑW¬W•ŸW^þ<WNœ€Ó“Èû=? hBOšôD-Ãüñú
+d†H<<‰M1·¬ /2æ¬.;«bšþ²Ó…ÝcÞ‰V6ðL‚!ˆoÚ(öBΓÏP†²gl…!]‹FB×ú«›PŽ[ÍsX+ÒÙv_H6¡@ƒZ­•”:ý|Nœ
+Éï×%Ù<ñäÓZ¡¡iM<¹åÂð¼¦JLËöÁޟ‡ÐéÄ¢•xeð±~Éï,í…J Äß„¿>™ý0×I̾¦t£ž*5Œ”éA·ÏTNIéÜ80×øm
+ûsá²Óè¨wU8‚ü¥€‹FÐ:ñîšbçh¬¿}•Ý5?ûH
+ÚÌ#€‰Ã»ö"J-ð–^uSÙ¤ÉAgŸgþpüäÄoÑ¢¬ "µKJ¬ºZ9;®z Òé(Þ¢)7«+l‰tGé °…U‹‹=Pùršš›¤_}D±®ñçØExFÑ£UkB ^¾°%Tíóê+Auygéëæ´›Ìè[âF„,á£! ·ü}ëåcýw½Ñ§ì“„$ôôsA:»-<«§­ÍùÉqUŸYèÀQ¦—=ú'Í cBÉ?Œ#øYR<6¯ùGSF£¯¹ë‘·×UL¾‚üL §qÛÅ`¨sW—Ý'KIÞ™œ7Ïw
+˜øÎ(ÅM™•´VÊ A¹\5h\n2G]ßß³ ` Kÿ²a1&ƒòsíÚ$b¡aêÈâ¤97?HF¿Y
+Ã-ëí.Ùwâ4 ¡éô-®¶Lütä®®±<±T‚…% ÑY Åm÷ø°MÁÜ?ÆàôÜ Êt¼²HºSIÚ&0üèÉ–ËäëÕ;cÒÚáƒÿÒäŽlŸmǵ¯¡= ü<òZ³ZîY-…ȾPØÌ%–ìîe÷€ê—.Âõ,*iE¦PÉaá{—…ŽÏ°p2™HŒf$Y„³Âð ±ú!D`ÓŠw/îí×Ä=þ$³~u¢9í¹…¸ß§}ÂP0n¸¡æC6ê1x}„Óû ˜•¹¾i
+âe¦£ÙŽô-q4Ö«>]"Òü:tÕ© ¿i£7V÷
+q%Ÿ©#Ë/Û>‰©àãÖHéó¯WÙQ@
+Î9°"9ÖK2ÿ“+LöÐZ¶Æ -تkuYK߀f ›þýÜ\©êI¿ð$]ÿ
+à´Ÿ
+~]fTqª…³Ø6 €a¥­au/‡c½†ƒü8™€PXˆ©5§ìBàÚ9IµˆH–VÓúèŒýjÀ€ÙhD4Hât“3Õè)é ¸Z"ˆ¸&çWš åök'¼sD
+nq$âB30ë^’`F®'"8~ˆ…üÊ–ªER“XíM˜.cZ3]ëÕcóÀ?ÌXlGþFïOŒðÕqÛ
+ñ}µçpFªº!ø¸ˆžÀyƒW`¦’_hœò¹ç¢¢·ò•¶œž÷¦¤’Îí”UÀJ maÇøÁö¬)þªÇºICyÈ} ˜ë¡µµº2û­[Ìò‰üÑK.ú'‡~G›”¯˜”xZ&%Kg×
+ŽRTPsÇVö‰ÒÙ”¶¾b„“žó|¯ˆý”B39‚ó= \fmÃÏ%£kS1¹6i¨¥ <]Mâðî‚ÇÃ}s+äCI­ˆ© Á—BJߥú#{“^Ä éÆ*¢Rnq7TˆŸßö¾/öÃU…¼hE‰9£iêíîRõ“ó»už€£L.3Íí–ú— &j:ø…£]~9õ
+ÌŒhà!ãrÐ%ã^¡‡ToâU]u㩺´áNÊ6¾‡ÚZLÁqËi¨Þ) ruGLPUzål9}Ím㺚^uWLÖdMË#‚¾ï4§ús!†ö â\éLýÌ;çòü™ÃÙËD“ªäJJzH}‘ÚîRïèÙ˜ü|:'X×sæX²E…šeÝ7 íªˆâÓVƒ ß™9s}DÌM•7
++Ý}={8H«üñªcÝàïBÓň+!/9§.è©6‡±Á›jÙnªi-!a„ìóÝìGWÄ#(¦pzÊá㑹¾˜×òszë:•ÀKÌÃø§:§ãËr©1ÙúŠ} Ìîס5W†²ˆˆWcÙ÷Ýõå4±Û]›ÎÉ ŸZWî`dE8MñÚžªÒf“uLf”¦cË.#ÞÃx<f®²³²ÚA´<T™Ñ/§y c ûð]f
+V£c‹­IŽ¢«¹ÞE˜ùu6h½y×·PÑ1… Ò‰„ bbzÀÅ;ñ$[;É5U‰|aÓ‰»¶Å,ÿ8mÝVŽ­Ö Ú†H{–}Ð|¸£‘iã)eõ0ÁYšéI¤uKÚˆä“Fš À:EfŸN­ZûœN“\âÓEÖTíÚÉyú1m­¯öZ#}¢†·w«º+`œ‡ˆƒ»¢¬–b†m4•0¶+ò8å)Èf:ĸž·H´Òåˆ#q@T7Sý|„!†àghbŠÞ<™ÚÒõ¯9ê|j›÷Ánß7d)~ Õn uŠ<E©M¬´w°é1JË.Zç<ãGY.žïº†" ¯>áZ‘¡ý¹O¬•ñÑÚƒ@ÇR(c˜ì kÊO(j›•¹MT?ð§FPÒI¼§ãtŠý^Ñw£µTÙ:4Ó¶wÁÙ*<cÐCÄ›gd¦aö?!"—eíÄ=2ù«éýB—=o
+fTóZ)Œl˜GU©«
+sÁ÷³wŠ,¶‡ñÁ¹‡ØÉPÙ$çÙÝŠòËPÆï´ÞÖß#y¸ ±Ç´=äªa!~\C·©m„Õ:ýTb–¿UŽ‹¸LßÑŽ©D !›Üµ,Ú®ŸïaVv‰,Úˆ´Í
+O62îVŒÍ7ŽÊlCçè= ‡[3nŠá’ä=E<×)Foö1àð,;J0Yà¢.9š0Æ
+/²¹´%>ç6ÁxÞqˆ~ï\²z{òrƳÂÛß në?¨Š¤ÃrT,ý.Å;ddËÞ—\rÁ® Ÿ7膓‰Ó]o†vuÊÞ±ÅØð=FüòMKø<ê@/«É ç¥@¦>àÄÇö.®kŒõÃ:‹¼í£c©¾ª0{|S¹¦–˜° ˆÔ'TÕmð̺ìYtvFJöF<3nÖ­´ džÚK¹ËÜPH‘^tß“€ÆqúØ¢t§Œ
+óˆÓ“”‚8~$¿FøŒŸ3²Ú˜ÎS´ö£ý¬RË kr7 ²B£ÕqB#|¥KÄÝ°yøÁ
+RRfSÌ%[]çã3Ô'"S1þáœÃWsIi3¿«øúF,Ô8¥-‚ R—øeM7IÂŒÆ̶ƧʨÞÂ2[-®†ó—GµGÒÏ} ZhYž‚Õ¦]ŸŽN—úQ2˜Âm™÷îc™áv»Ämd@M•Ì¯ŽdÊ!º%0³'xD¶ôœ<†ôa]’ƒfJW‚gPTƇKe§=pZl¦ šŒÃ0Ùð͵j©dE -äE¥ø@ý÷±Š8ܼnZ]gã+^EßfpË*PhŸÀaÎAþÉgsbxÊ_äùßoK³×rsÞ'‰Š…ú§Ã f§„e\pî}XŠ^YšyQø8;ÿ¥ä6¯¦“ÔD°'â8°%næåL‡šã„
+)á“›ì}#ø°ÖßCðs?Bƒ±g³˜ý™(bštÿÛ¼$»ì ç9v“ü¸J¦ÜNÍKIPâ|ܱÄGi%ÿX>Ø$ïÐ6é­“l¸8ä™]5v[4µ¨›jé™x\}ëÑi¿Do„L2ò}?¾š»ªñ•ü“
+~¿^1L9€jjQ,’¨=[v6S*ˆ‘k¨KZƒÁ 0¹coËgŽ[aÐmƒ9¸åR(/—CŸ®ùUþLHi
+âeÒ¬=k|0 '´:/?aÇËòÝÉ3 …Œ%åÖö&®Ù†´ò æ KZâä·_.Ò‡c²¡Qt¦Uƒ{âø¥F_az“†yv £ÎÞNE³BòEÓ‘ ÇÒX2æÔ—Rb* Ã&¡QwÝW ý;Å|`ãÔ±ùí#:b- ª(øKõx¶”ÖŠ`Ñ4Uø€4¦ÝÁïô~{X” Q#ÃøÜC´=ŽA)ß@ÓèBÙ¦ž¦™Ø#æHô°J
+AdººaÜg¯€Mj´·¯ÙžO<Ÿ4E€»¯P¼º6Êš¶xßiÐ4%=”?SeW(!Á¬ï³OƒiªFÐÎÂ(î§%s†/ë!»ê éuƒ„+j¦ÁN|³ú+"3
+®ž  Júë]Pÿ@1VXõ6ÜL,¸ÿWìEY¿»¿`zŒtõ  þ3î¼
+'h {§–/z¬læô@í¯L`mcIxïC˜_‰ _Ýþ%Ö7Ö:\)¥oZtGŽíÛS­+º.èZaÚG~ñz®¢-ƒ ¾gò‹:¶O&@¸£ô¬nºðÜ|Pd‰’o¼š$±72•²ð¼{ÅÈüì´”¼$ÚÑ"P§CÛŸ+Ã` ±$lD·Ì¾ò°è¼ØË[F6³ `†–·ÉóÏÅSÕ[IåI0PÑŠË÷ øš¿§&û%ó:T§Ü©xÔxqÌi¥ŸÀ†k uÇ}œ¸9ã1~î_ˆØóÐ?ESs(<¶ÉQ€TX´z›×cþˆÓ.èYÿbÃQCøU?üȬíÔÒ)½³L™T8;ÓíæjPÍúÙÃ/~äº-’n}²ò[0-t(û÷ GAœ!? ÏÑ\¿Hsk¸Õ˜]î,[ž7¿mÊÓ9™Ù7Æı=¾ð²'H
+.‡¹/l u éN$²m_>6Œƒ›ìï¼ *N=†|;xr´S"( p2ViÔS­Ø~ s¬Î…ê÷6 ³ !ôü©†c]úʨ/ƯÑ”%~‡ü º/1•ƒ“O"áXj%œf¨> ºDn½÷š«Šárn”Ò¯¿ˆØ…§LÆwÊCÔˆˆ¶VÇmI‘¸ƒŸÆ»¬Ú–v+Å‘-àPI}¼gà@,›àHÙa¦ÅæTÓPH Oc~|ªš³sŠŸ…"/¼t»^/rƒj†=4Oü®)uPce·I²’ÜYÓ5ãöK I=Æw*ŠnÁ]Æ+XVùƒ<ôEîT=DºZ‹ÚÈÒ>Å4ÅåèÒtxLâo.RHägBmÐñ7¶Ë¿š‚¹+3sñã`£ƒ ê^*­ŽzqúkL» …=ÍÓ×€¬ˆ>ªw…æ%j³óŠ ÄNÜÇß䨔1–¥1 yÎY…Ó>Ãû=5|Š¸ |-ƒIˆ"P¢%fêÜh3¶Á™ =#Ç nJºy‰Îiå`f1’é·ãŒMðÑC~7\£Éðx&Bk­6kÙ§Qi—ñc jù“
+OLÆ€g|¨-añvŽÆ¡á> ¦:Ôôãù/Æ—ÄÓÁwZëˤ0­|Ûy¦}~ ’S¡3ie®’AÛq5Èšã*Äk ì®i:Xtïñ•ë»´~¨ p"ç`Ú–QÑO
+nN#ò”V{Ž‚|xè ½úÓ•éaê¤ß‡¥¤ü ß;«À¯r>k²-Û¿\+B5•EËÉåÖ¼ÏãP’‹Î=Ü‚9¨ÿ ç$™‰EOÜãeñ%©*ª‘ÑëÉ’"{®÷ª'»ÞE[šn`*2uçWtoñšF£Ç÷Ò~7ý€Ú”ê„‘z
+MÒÁ)ûÅÃ<TÍeäü#”ßÁŒr&¡„@F"zÚ]8> <xeˆÈç]øS¾_­Âà¼}ë,ð&‡ѵcªYL4‚ßaªp-Ãœ)Fy
+ÎXŸzã…6¶ÁªÝz7ad*Îj>2‹oÊÞ¯(™ÆP£óÙ­14jþS‹‡¡Ù«á¹ÿ@ZP›
+endstream
+endobj
+1227 0 obj
+<<
+/Type /FontDescriptor
+/FontName /AHCECM+ArevSans-Oblique
+/Flags 4
+/FontBBox [-821 -298 1958 933]
+/Ascent 749
+/CapHeight 714
+/Descent -189
+/ItalicAngle -11
+/StemV 73
+/XHeight 0
+/FontFile 1226 0 R
+>>
+endobj
+1228 0 obj
+<<
+/Length1 2640
+/Length2 17993
+/Length3 0
+/Length 19446
+/Filter /FlateDecode
+>>
+stream
+xÚ”·PœÛ¶5Š»»Ó¸»»»»‡ÆÝÝ5¸K°àî 8Á=Á!„àîNx½Ï¾w'ûüÿ«W¯º«»Ç´5æXs­¯šŠLUƒIÌÂÉ (íäèÎÄÆÌÊszj˜:º1©;9˜:Ôö@S7 €•™ÍŠJÓÆÝøßQTÚ@W7'Gþÿ#^ÂhêòHšºƒÒ4=€
+Ê –gȼ禘,i–]”Š”ñ'ã¨ð±ø†$HˆŒ’gX¤ e2éué©Ê†éËœ­ªŽ?ôF‹Çð$M–¹wyâe‰•[¢v&r#±Ì×ø\ÔŒ¸€²õ7Óû)×·›>ácOvTo9Ì™·âw Vïnø¤'ªWO £ -¦5$ꊆJùyΛ‘x,l\Yƒ’C´IÁ!¶—~ùnùµ3|+D~‰7é.;þì SËï¥5$þŽ£Ý+eHê×ñršï¼äe$GteEÞz¨ö˜©ëƒ|ª¡é˜˜[ûj_ä˜o¬ïÅ&w~H¯*ƒÌiÊ'ïâðDèZšxXö– {Òb¦ÐÑ“å‘læ…2’ QU$dõ þ*ÄÖy’‚oÛàj·
+¡–ögiÏÃÇ9¹`LXÌ2f]9u}¹‚œ3߯’ëæs ÌZ‚Ä6}µøFÌHLíÃ|Ýs Îs~“ÝzÄ›Ÿ×Ü¢WÑŽÿ™–•¾èy4ñæÞ&§J+¢¾­†UǸ„ŽÂë…å=k†È†T±{‹—ú½ ú– ÒHÁ$ßà o™}Nÿ WÈd0ù§n7XØóðõHÿIõš…¥ó*Ä RüO<Îí—*e¢ñ
+$éaKXå}– ò“"¾òÝ÷÷ùD‡ýO57½äähÌ?À ]VœUѸnÉ2Ã6í‘~|ñàíþ6áJØ£µ‘¥ÝÆÆ}X’±åçáò¥nÆ׊‹\y½§ +c=³›Iì›ÑfÇ•F‰}>Q]‘v™%›åº@
+”<çIæäàH%16aY&[òÚ/©”kÙMùòB5q<ÒÜàE<`$hßHÌ"¤?
+n곘¼‘üšó“?(® ¨[•Ú‹½á˜{E‡´^W)Ýn}8ºÐ,öÐ0`»ý*®©N÷×™nAõkŽ¯FuzÀêÀÀáxbdkûQd(tçe»:„=ŽÛ!àÂ&¥e¯ .ïXPŠÄÛ”’—¡Ôƒ¨J…¤Ãæ£ ÜÝëgÿéoßÕ³3ã8#¯Mî[Ÿöc»±GÛ‰†kf¹ƒÃð÷üÁƒ˜½4E´•›u¯ºŽ†IoÏͽ8¼9-5´á¨˜,û%`?TI0;)Ô”ÊVˆíÚœSÀ±úÐ쉉ƒ¦ÁÛ²a´®[%̲”UŽyLÓ•IuTõ!ŠÃ´q¤o¾q8ÍýÀ2Š>Ð}§õ&o´;¶M´óÚ%ß@ûî§nNâ4ÏÙÖö¢ÇÒûBìWÊ|´Î/?Y çr¬)ëˆ0“E]®uÒ~^s&ø­0Sž<T1#X´i?¨PÞu½Þ£“¯Äiö–DéQ]ç^Õw‡Õâ’Nøsݦ_ÈÒ­ñ¼¯Ùë ’n÷¶ÖEIöZŸrmF.ä—¡æoq#,æ#ˆÖ¬®=–ŠÝêø‡GâTž°"ê2Ì (¡[¯¯=£<.«cá¢%PÆóʢ阾âò9¼1eÔ"ðÈÈ+)³p¨ -$`’Ú
+w0÷­áÀ¢9´$ò96QñBa³‘5c„¤¨•UŠ}®‡{Q_%•¤‰p‚=âsAïõL¶ÏêJÖ6¸#žäì2Fö ɋ$Ê·xõ—ÞÅ7íðà&i:e DÌfMNÑòŒùdBT7S×ãÉÖw
+®i qp\vÈ2öý!ÛŠ¼‹¥A½’~{©ŽíPºñYÚ¿LæìÕ`ër^XØ<õ=¤×9ôÄËÚ‚_{–ˆN=\¢j¼?§›‰BmnªÝ¨RhSû–îwÊ&ÀAîsÚY€ôY&äýÖº*j`Š©í¸ÄüÒ NªOè…”Ž{K-Ö¹ž´&ä¤Ý½ƒd‡Ó}‰4ß$&ÐìF›Ê`¤ÄôN®cß_úìE^Λðn§´Ž›ÐÆ)u`@#;©"ãÙ¦ö&˜>(“4ÿô®½àgðx"Ò¹W”=§Ó²vÏ$yê ¢è ’¯Gm’3[4ŽøÑ<qݾspðµ0Â,5¥Ñb3à4ví×Cmƒ¢=ÿ /¹cˆ*ä î,s€N¨šðPJÜla,‹Ãñ{¾¹‘œG5V¢‘
+$&e†|Æ~“ïz»¡VÓ$SºZà™P—Å(è¹V[†0ÊÆýÞZ?t}Bts,°¹Ç°[62.èC¡¾.#Žl—ŠIëä¶Û’fr[ëVgÐj%—ú0¤]¡MQ»à-a‘hñ4]®ßµ‘5gÓü¸gwÙg¸ýéf
+úüNóaýkÕ›“_
+livûÀÑ ÒOÎÔf¥õzýÚc=sü–Åî«—‹œÔúufSs_¸º{ ƒ›¨Ç¥P³%Ÿ¤i¨‰O♈6ëîÓò‹½6À2¨ú" Ö¿“g±ÀèS[sl³`c0ªR u¾(Òß+Ò)íÙÏt+ú/€çQ(¢Õ,gw¦Ø‹MÔhÃüÐIѨOû ÑŠã§1VÿäiÕ‚s³>·fŽ¸sïæ-¶¶ƒÿÆî¸å¿ Y¾6K’ùLy·_P§=úöN˜+8ùKtë:í;îñ™ {‰êÐ>rÒIö¨:*b–5N‘빇p³tQØšK²|ë¯Ò`Öš´|¤¡ªfr34óm~ÍOÃ~†\PWԑƒ+êܯ°É«‚õM\›K}
+J\^IQdú
+cËaÁM ˜V¬e¡øz'öŠ )Pß²omü¹›nØ® Æƒ¹C é¶[Òl0¤õ"™o@*<µ}F0Œ)(ïf'#9œ0•Q[”YÜÛO(’k¼Õ!}lf¥Æ<x;ÖC°ÜNÀlXAX\Ýçrïá ŽL¿µÆO‹°ÜU•„ªÔ ¿v9ÏU<â ;{§ÓCEñAJ@p„½ˆÔðÃ$Le^úÌe.š®Êû§\ÔC‰JÌ#»AÙ—zÔ'l&¯r¢Á¯š×G R¿èÒ ²Åh÷T€^AMé8šQJ²íUQµn;âÑ‘¸¸ñ>£½´ü˜ßí…Mf’Ì9
+1åÑÜ+EoCNÈ2Í>—cßKð§Di¿|ØnÆ„›S‚S,ßÙà¦{ F•%|êLh¾,¾Qùñ+{o¡ètD(”B‰e™ÏÞ#; X7Þ«Æh'Xg”Èw£{áÌE
+_-Äg žIdlŠ3pG]ØXŽ4Ši¥*««z6.4êâžNýº9'ÎçÜÓx`jÆ0Ž„í%r.›ñ°Ü uø¤i@½‘ÜÂ;CÉ/ΓÐ˱ßakÀCº©·ý Àžšï—TYÄp¿Ü.¿8³Ø¶§q¹¸ìn¼v^
+ؽU#Ï‘²þ.ÑʼnòÅ„FºàŠ‡Û’•Z’†Ð´“Íc'‹R7uJòAçzÕ¶t&aÇV@7J}ÀMXßÇ«_êˆäåIs$] ßåìÐÍI†Ïgqà3q]®ž¨0â®DÂ.‹ì>"†Bìðë
+7Ç•ž•ô¨ˆ¨ão¾ìg°gÚL02-*5Ééî½cžQ’TlæãÇ<?ýÃ<ÐZL'ùÔ´G+r¹ÜeÂɲÙ~C’’R'*£%:8}ŸªäƒRÖX³ywž‰8‡xÔ Ï‡mtó®÷|¯Ù nÂ\U+ⵜ®ŸL:4-Ÿ_Ѿ£ÊøÖ½&šš¹GQ|ÐFûž¹ŠÄ;¤×Ð6—ÎøðÕ˜83ßœ·(óù"H*(Ö¹ôpóþê5:†I°7ø_W.BŠÓ*o
+í7´ªhŤ,}õ?Ñû7˜>8üj®yÁ›°ÒùUÈÀÂæ.ãaÊ¡®à
+¾6£Âé¤K5»µ¸ò-‹C¨%`³
+×8¯á@Jâ¼ì÷É ûäÔ$ifè ìRN弌n¬ÄÅbó$£˜º_U„‹†ÅϤçæ¹Ï—ôõTŠ)+ ¹2ü¸ 14û°Û wÖBoyúêë.Gdjàç€\w³‚Ж€Ö
+êã$FPKDÉ÷Ñó™÷~å&sYÛ|ˆhÍ )ÔåTg‰Ùk?šXŬ˜m³-,úôåU^*ÂwC’¶k:#­ÜÑXxÅï È­P11ípèd qùkèæu{ÑŽÆ5ÙåÓÉ(Ï,\’ u‹À’ä~.Ô[Ú0ô‡´4¿öc8_ìˆ+:YÄ%ÑZûœ”ùï½Ô3"BécY¿S¿ðÇG#gh;¡È¡Í¹P èö¦ÇóEöâepC¦?‹ë×d¼œùX°öËÉÅâ!× ƒtZ/qTªÉËhÝŽ{æÀHc ´§§¤æ³²Yv‘Þ'§ÃW?ÓSìÚÇ·A:Ä&Â|IóŠ’|´ Ð €ËŒ¹Ä>õ(;¶Ñþíó1Suîg"#qÙoòë­ëvU¼-¼Ð
+æð^“Ä=N†Û³8;Ay ¹<NeàëáÜÃn°Œ‚·(}
+ù³´¹éï$Lt]‘ò­íγJØ+³ûç³ æ¯1³poŒçÏ?QIÝ —’ôñÕ–ÆiˆgÄQÉÚž×,W§9§-Å–E$ö
+î:ìÀ@Í®´¾ÁC˜–0oª€äŽì¿Î‰[ Ý}0?úk.¸ŒæΣdØÿš~¦eòY3Éí}ÁÄ/æÓ™Fºcq·-¿ø›NC“Ï™ïÅ NI€û’‡>£{
+=M)Uç3¥Æ¦¹Î;Ð@¹ cT8^2&zYR•[¾¹µAÆŽˆm÷.{ºƒ…ºÜ‡:–Œóeá¤IÀ%Ql;V?]'ß ×ýý­Ô­„×ý³;µ§£~ù»Àë€fyÃ)׃ YlE„w"ÕÕÈeŽ‹ÖíL°OªG•dŽy
+|6’%™ÿýRô+k×8Ý «oIÐæ¹NgÇNî‘MñRŸ§sy*;Žô@.…àcŒEà£Ýh
+ Ãl¤%Â9.” ó5v‰þ£I|•ÿì(¯_¦åÍ}5ý¥ U<D½}ßÔœz*BŽW›Ó)1qS)=iÜðÊ»,R¤I××Ä*ãâ4œH{ÅÍÁy.v‘WgUy[.â0áR7!–Û›ÑõöÒ¯ ÜEõÅÓi$L=ÜQ¿Ô;7È_–1÷‹àÌÂxN î»FÛ¯ôû‘¨­Æ÷©0f‰iC^™?¥^¯¶:s{Bs¹PzèQ;ð|µ|!3íuwJꕾÍo§Å×ð[ZÂ|ØèªåÅŒ‰‘Ÿ~Ú nˆ~ã„œ¼ï:šÇÑ›?%`ri
+b­ç%ð\Ì`¡gÎè_ ãfÁj›x6?>éñóèÓ&8™R$
+ 9ÁöH"‚ñjwÙAõìæY²Íld÷A7Bo&³bR)UºØÃè1Sd6ë Œiƒ­ûŽ,\‰©X©uԈô³OÑÑÜÒÙ»07*ÌÃ÷±÷(³ÿÃã L©€•lYqÔ÷®0>s~ê¶ÈÁÖ)e;­6Ù´þ#WßÖB<ÞT:5†Šös¹T¹/!ìÔx„ä4éðëéxȼ8ÆÇJ”)‹Siƒ„zÌú]„‡÷lòðä m)øÍ`×½‰P­a Šm•ƒ<Zµè]M^)»¹¬|¼êe´ì p•Ä¼NÎWR¿×Û‰‰¨xðþB6ÓflpeuaEÈV‹z<q’³êªvyî§Ñøl_ˆ\Uú’Ï+èÞ„&v]»Xœ‘Ö…€\׺½t+Æ|œÑùäKW8w]èx!Ç‚ë©c ù´t£SÇgÛñ‹|ÝVÛEn’R¯ßÇy ^­Ã¤8 í)< ²Ê±þJ¾P”-üÓç«‘3ê~:3”J¦³qMÌ›åO¤å¼’S\>Ì…Å(…w=Á©Wûš„Ù©¼O‰î|
+š\„ôIP6ÌÓÞŸ¿Y©•Zg/d’—~aÚCkKI
+,E9WVÖO1í(œ^,üԜ̞*1>Ñ­uÈ9­9Ð v¨óEÚyo3)ŠÍVxÓOB¬ƒ˜³Ž58óÎÌ›'m‡–7`z°wIÞ@ÆB
+
+W
+Éàµ2;ªÃ Æ,‘;J=oc£Õ%\%çåûs ª^vBˆ†ÏϘrL´ÈtÖÆxÖ$´ÄÝþõ+ï S¥6`å6žß/Ñ%Á1 Ÿ¿„CÑ3¥ò¼Ñîÿ
+Ø&Ï$âç6KmxL_0ü®nÞ£÷RP>©›ì
+ÚÄÓåW‘®Ë…öHî’!W’¦î•3®ŽÜ ÏÞ»Lë>ŸCH™ð‡¨»&$a,‹X¤¸×^VR…Š!<KÂóÛM!ñ ƒ]˜ÕýÂ]ÑSMZnào…jpD%xŒ ˆ±É®<…ócÛœ&•¥e Ÿ–ל‚
+Ú*=uCé Ïò0•1÷G=ÂW$lù.~ÆëÆÉ*å3ë3ª¼Šö V1ø ZëPD¢ëg'Ä@B©XzѨ“)¼ »ŒÖ«³¦i3„di³ã¸”#0Ô@x2CäÂÈäA`º½vpR¬ß#síÞF'D¹zV?C•ŠÇÔaª;ª&£ÒˆÌÒ5Ñ©)÷Þu,‹‡bâ¸W‹=æäúîÙŽ:–W}P‹Cp/lWY¬]âñ+z[iÈN‹f©oûP;Î ¥;l®WP$*m›¶iýí'ÓšÕðÐåeŸaUü",j˜í*F„ç£ü/p<ïKúÔP²ýy8”ðw1’áät„Ž©’¬ž±°TLd;Ç äöñU#·øÀ¨‹÷¡JÉC­ •­2·ÐÈ&0à˜;6¶¾}œÅ˜®êA¹]/7‚DÀð•˜GHɵOÖÆë‹kw+úP6CäÂðzE—Eè¾Yf01}&ÌFä:·“!q'œÆNo•|“Å–äõeCšµ·P^û:#цq6sÃÖ_*À1z€JyÊä½VÊV7›æ¤aû^ßQ[õó†´Ä\6ðpIÌF§=TšS*ûX¡L ¶ôñk¾bvxêÑ6¼¦ùË d¦X^•¡3±Îûù”ÚšÊq;mœ)ØAŽâϤo^Ç6#]ß‘ųm¸PÆ~ðö’ =ΛŠŒkãA©-UZk[2_=ñ‰Úz^ÕMÓ.mŸ}
+Ü•HP¾b]AfèƒE­£¯åYá[Œ³?”û@¹dÞûݽÞØaqëÑP÷Ö‹ð6Bdا°HÍx€;l£go@³ý@…\†ÖF°T±ð¯$Î]MÏ
+‘R:'ÇÀ¸2¨€Äwº2’Y*y¾U%&´.p²ÙÍXH¨±jMÎRZsç.`´r8õ$\Y‚oë1ïô¶L¤Õ#_~´­¶½^~ëƒC5‡gÆD×WÇž
+O¾!^Ø 93Ã’þé°ûü[ÃzcrcOOÁr¥Àv€äJ4õ®ÚÔ¬ê*ì‚Ÿ).ÆHë»%š#SZpǶÊÕâv§Q¸Ù$g†¡¨­K¤•“;¯á$n@ÎdM.}é¼ORõR
+Í(<@.×cþÂÒ9d_C­1-›^›ÒEÂO€9gšmð“ŒJ¦J‚7dB[I«…Ÿ¾–Ÿ<Ab¶,J¶î)7Ï&„‹» Õáëª'&CÔÚby«ÞP*Un³5ÙZÊÕ› ýqÕuUùKÌ¡U(ýT”·¾b›8¶h=”AºÂ=©Ìhç;š5
+°˜ÇÍ +Œ$`æFlÃpõÓÍ‹O^?}Ú%_ãGr”%z“g¶{2:Ê[à¨3yÀE¬Û¡;c|‚,¾ýëoþî}ëÓƒ¦ìÝèÂOV§×åKw ì XÄ\2̆ObË/ á›ÑANÍåc&ºr¯Å™Ý&h÷tU…áÁ…˜­‰g›q²´H„!Hfàü2É\?õÞÙÛfá² 7¯¹|æHô &¤î«ôê¥ëPD˜ÒíïâТ^@ÖJŠGÞ‡®ÃG$Más>jÃƵ½Ôe‹ÌL9NFR<wgÞå2bò=1r«K—SÄû†]ŒÐ~B–\‘XÚë§ÞOw\Ì]iYHžÊ\ÔxãEЖr€0ˆûe¹Âú‹>Ølu ²×ÖÈc§O\–Œjž[Û7#Æz¯ëVÃd³6nÄ»ÎNXžËxÕñFWñ
+˜ñ¢zŽµüÃÙÝUÍjo‡tXõæÏáJ,Ú“>ÔÁ´ÔYŸ«Ô2@Ò¯–5óòœq¥õVkI—v¶„ÚÜ ಈVø±SÔ"¦JÓŸÔî¾:Ç0L›m ØÝFMI#è¤ú~D¢Ø úi[>fiì²RU}`ÊÒÓèdª¢P¡Æ÷ir¥•)¨ÍÉŸ»)lÛ=¯Ï”’K7Šs,]hh ¥%zl2¦œ¢¨ä˜ÑeNÊ?Ä×4yFoÈÙà¸gA¦nU~’s{úÅ⥹ãÞ‡ÇÁNåTŠ¹M)Úñs’r:o ª$“;}`X †+ZhV˜U¹ƒ/Š¡‘Ap$.!, Ô³I8Ž´RÅóÝöû~“ˆer:2(Ó‘ñ´ƒá¥?kLˆWOÎ÷ÐõßÍÙ³Qx´ZÍ|6z.íq#(ß³…8G‚L–¯H£¹‡‰’w‘¦²P2?‘ÑŠûy¼î‚ù
+'+µÁ(êýžXC—-µº¾å,UaõøÆ|Ö¸_ŸäJSzC5`KZ‡¼à!ñ«OÏ$l+ÇEêd|T„·Þ%X04:©W~åíÁdMù°ŠG¿û$Ü“)z¹2¢c÷ápc™|¨{7üGh¦²Aoj‡ß1ïðˆ\é2°904¯æ¢“£!«‡ôrAÛÍläø4™ðuÊÝmŽäk‰ß×û³ÅvVðÍ…{ò0ëä·¸cD¸èä—9«¬©©¼8ãG5SCy«2âØÃ5m¤P£6”{¶º¯ë«}j¸Œº ï1×-¤š¢ ÛÕæ=â̬ϕ v§v’РÀ.ýÁü8chäb²Ÿ:ÂQöhÞÏÙ¥ßP]Ð>wÑž)i´ÿ’­EhÙTðù^M QëŸp]C¤P¸ÜÕÔéó‹÷ þg‡Öª$[×ÖÞÆ#»Ë¦úˆ>ŠSXt¨ùš™á—m4y9ÜÀÂãn¹Écu!ÄíA1UCæ«·Ç·Wš ¤P¡­²ÉæVÝù@8Ir9ñû1ÁjØxâ«Ýò«cY?Ô”Àüçƒ p“à-d·ôÌ;ðì ‰Ê:ÇŸÜ®Nz7Qcò)M˜ßuâ6‚•y2¿ ´)ô¨cÑiD,M½\0G €SMÙê”é< 3©Ùgª}ºŠ[ï 6ºJÄUmou®n5B¡ºc?'6 ¯Ía3³²£ï,B#`^¤Yy2í":Á˜tyŸ#Ì=±_åµ%L ®~¤ŽÄ›épˆœ,\ݶi›_)A]!§Äpɳ a”ý^à3„@ã.ÜöÌõn$›9‰O3wýe–ÍwïŠÒß\nU‡“ÃQ©…¬(ª°¹ôõGÀå’i ѹû"Ud}
+ëªý~i}X8)DZv §Ì¯ÜÙI[JéÊY^B-TÇHÒvùú†·_™7â:®
+æÙ¾3¢JTK»å‚
+Ï’î¢.Ò°¨é2ÖΑ֩v2Shô^ü{bÆ£v†ƒn@Q‡qTä»Ú|ysÎñ¦û„oø<{ûsûPf”l˜ÔœìlUê¡óGÔºÅÞC7æv°<;~zvcíÆ»ÍHÇÖ™§ïÈ%ç-BÍ7Št‚£î€‚qŽÌæå˜NÃû˜1¿~q|ZJ $ŒMä'—v÷u›]ëgŽ…!ÁʨÒ2´¦Ç&K´D $æŠ}àRe™¬í9Š[‹òå½.ý1,ý<6c^G¨·)'Šü°0«”ðöhHÔ
+=Åâ9™±ÁvOæ=auw!¼Oë]f=fûò¬þ TíæèœÇi6sÅ[Ö¥œPPþ¥ñp:J@÷#= lòbãÊæ7‡B€¶_{bÏáv•GxiÒ _)‡dê+Aç³ôã „:žO‡ÑÆ-i´Ã4´ù»i‘þ’Q‘›Ú!2«•°U.¸:,xh¢Ìwáå Ž£nÄcþ2„®¡ÞÖýt7*zkÀÑQíµÉœ*é$‚J82ÉsÒc©^X¹i8í~õPü˾Y5ÀX–/ǤX¶ËµctG³–Dèm‚ÆC³Í õGÜ=‡;~Û›3áÃÊûŽeAý²4[døɦd1¸ÆeÉ›š¥}aù–èðÿTWÖg8xmiÝ‹w!ãLŽ"Çûº«¯1Ê›Ã-úäjròeOÜîÐ[D+¤äsóu.÷¯0…®kÈ2QÀ슆:?Ñ–Ä„º´ÛÆa[B©¨¢Yäª'×÷ŽÒ<3DŸ/iiH—lM‚¬HÑ2iÓ“OÃJ‡°ä­ ‘ÈDTÌ9
+Àís`>ú¹÷Ôäß‚ÄÛ0ºÑ)P˜ìdQtÈÀ]¡{~Z;ð…‰ã°Lú)òuL&u°Ig)+ØتúÉQ¦@J–ŽI×Õ[6ºú—P P3Ÿ"¿²ã‰Cû+=óñ¨`Ô•-‰!žMd€f{¤Y•i›ÐPRmîã!vUBIX qyÙØ{Ù€b_ŠJ0²¤ŠY c+<®ŽŠlعa—éTGt¹÷æ…*nŠYyˆ7‰K;XP×fŒa¤â²EÁɤ"V>S:5o?¾î©ÉU-vðžóxí_Q
+ÉyÍáXè `´sºÌÅ
+ÅõpùuŒàž¶Ô•åc¸R z<â>×"´ø£9y¢gì‘
+Žð‚ïY<
+Tl5w²ÍYãh08Q4@ƒªn–tìÎ@ñ5¯‘°?Étä‹Í>éùü¸ÜKdÿ©È%3›\E†ž¥ýQ à•a"‚y¿°¶ûi=S•‡ý³TKâ…´§òTñîƒ`éJ,v]cËÉÑÒÍÁÐÀæ`–„n‡)Åϸü¨<ü3ýeê#C³ØâPY¶4ÞreÝ.þq&àJ
+á)+,ã/RYä
+41¹ÚAþ‰ŒoP 4.y»©èƒõGáé;ߢè¢n$o‡|<ª:ñxtIà²ÉaÛ³Åù i^} .Euá§?ªÌÚ
+N}(éË O—Aýß`>»3†+:ôâÒ´£9|'þ´)])†
+g‚ʽ“3
+MNk w]÷CH]Teî;h¾¤*»¥£û¼ràüÿy—|ËâÁó'ÍM\Õ¹¢dñ’º.‹k"εYQÆû;Åç5ðkÉžo¡<÷D\‘Þx¾œÐSÞÑîùS]ÓºŒ­šyH É4ÓÒ$0GÊ^úâ£`·íò þÒ‰’*»û,ù/‚‚9 e=ñ{/é(‡ŸCþsœÎ>ö{Mç»- œËJlÚDHäÑ”·?¨I˜‰"hpÎœv¹·Ùí¹'‰`Á5a@'}ªÈp][…]<ÿl‘s8”΢H+u
+
+×&KõF‘C#LZÿëYÌQÏñ(šr‰ÉÇ&§L• —:“+)4ûªÎÌ°Ò‰²ºà2ûŸ´D³Éã·Ýzœa{°†îöÔÝ Þcf¢5AÏÔˆ
+JÁÈ‹ñPÂsA’b]Ü@$9÷ƒÐÍÀQmY¹œz…†«ÕÄÁt|ø×`Þ¹4°DUć%gQ*µ»sa)¡ Z|%u
+ʼ—àÛm¦ú/ª¼ŸRøaiZMÜ_Ú£`¥ë7€Ãmü;Ò¡¸xU6tGœQîø’¾aÏë½è3ðÎçKb?øÍq
+E/Ã8Ö(ç—Ëãã*“û ¼Íz“ØIª©D
+!MÅQ 8`çL ¹_§Ž î‡Å݃¡/l;B‰#ÿÏ(±£ #D±ö4bê þ0!Á_R(Ya±–:SS6ôC±š9l™?ß« ¯×g¾hÜ£YF!ü1½%íΗÏü€•é6˜§ÒAþßmÄccrX·Ùe›¥5ÒÞø ±Õð6šÓÙ h]Éâaï¢ÞâKFf9{ªx^•Ò–ÿŒ4w„È#ìÐT'-þãà Õ·^"¼%<ª–¬‚ÛëZ‰Äù×Gäì¡Ç­Îp
+kEóÐ"ö@ÿí¾ìIÆ‹2~åD1çô‰5a;”¡S }”…Ѥs¤ÆU{ØÑü^NÄ)È‚z‹xìkÞŸöh¦b úA‹©JµUñW†ëÄ9žáÖtðß%bC m™r3”]xA÷­í_Õ3{ÒÎ)ášG%ïõün1™: >ã‰2Mï8™»îÌé~Ôó[æל>Lf0›̰苦¾=^…Õ/†ž=%2þÔ*¤î½»U¯ h¶CQ„RJ( Å*L¼n¼ûT’»ÝÒX´îJ>!ö§ž“’ “zpEÁ1õg‰Y½M'BÐÀâ+JßÙ±zÛµ8c@9'4[­þ¹vŠ¾‡6%K JºÕ
+lu«›uàµ@oÑ®J§ö(ÀÔ,€C(Œµcaô\> ßÔïUЖv¥§W¦w·¨CöúUßEìdÝÂ%x+÷ÇhAMœE«; ãbËäý‹Ncæªùyc‰Êù2»Xá9BŽrÒŒAªœË{e`z¿V-¾V’D0êßÕŒTzíÃc’Ó`•ô}ì6ŸU“аpÉ­4DÇÈ›
+endstream
+endobj
+1229 0 obj
+<<
+/Type /FontDescriptor
+/FontName /IDISUM+ArevSans-Roman
+/Flags 4
+/FontBBox [-737 -298 1951 933]
+/Ascent 751
+/CapHeight 717
+/Descent -189
+/ItalicAngle 0
+/StemV 99
+/XHeight 0
+/FontFile 1228 0 R
+>>
+endobj
+1230 0 obj
+<<
+/Length1 1162
+/Length2 3700
+/Length3 0
+/Length 4396
+/Filter /FlateDecode
+>>
+stream
+xÚm“w<ÕýûÇŒDÉÈHúØÛö±Ù{7ŽuŽsŽãØ›Œ¬²W‘2BY!eFFVŠ4¬$¿£û÷½ó½ïïãüñ9Ïë}]Ÿ×ëñú\os u'œ#J ‡%J@$Á0@Ep0wÀzâ°8 Æ
+ÇÀºÞÙ¯kúƶøÄ;BYô³T›Ï5ÓB˜Õ€¸4NÙWqÛ¯ž{îré+&löw¬êkNòÍ ^Ÿ¾aR¹fë%á· +º$¸éG'gfˆEn—0Q¬”u-îIÑÑUµžaúZµáqÿž5íî¾L=cR5ÓèOëz}fÚPد¤.£Ý%eTL]C8LI|øñ‡åÝÊØFgI¼´ÕmjÈý¸Csö¦Íµ%QZOìB$ïBHà×i¿rq“p†%*W¬À ñoûæ‘å.¥1B¡)õPÉ”M¡XšŸ£“a©k ƒ·> m,²ÚÄÚ9RÕ‹ï.¾èXnê'Š”œ:ŸYFÑG/Ö³¥ct$µëÖÁKÆ÷¾wØG÷¶Þ—îE|KµÐl\ȵ:\fy`ßgù¥lHmóÁRÑe%rF¹Kòϯe;–3 g»DkYtí¶;šåméÿˆž/Zò¬ˆ‰HO©ƒºr3Àyº¶‚¾ŠÈ¹¡cº ôÓY´ ãëúͯ":¾¯=&gzhWà8ä”Ú¬mû‘c%.lGßõ²Sà!>¨YK´ÁØT&/oݬÖ´Ãò"Bðé§Úª~,cîÖ
+?ÿ½-û ÷æ²£ÓAš=‰¦e2fƒ“«éÚ-ÝJÈëï^_©Ð‰}#‚|SZY-àÈ¥”;^ XëÒY¢)o…ƒ´ÌÏF%lä Ä”¥ž¸IdÜs÷s¹ªÌŽŸ-¬¦&êß×Üï†óf9SŠgS¿é¤õ}HéǪ˲êÑ}M%‹F9ÄÀɬ‘*
+·5é¥ $ü⊠!ökÕ^ mÓÉ9#(Ž¦r›\óhèÁ~´©éèÇÜÔåÝœoÚALJmÙp€ŸËˆ£_5s‘}øÙÛwÎ "¹od-Ö´£mw÷¸¥­×9e·Z½c±hÒT»7ƧiX¶à,O§<°/·—lòaªyKÿð¾˜B‹”çÜrz=½\Tt?o¶¢uÃÉ¡IG)ÿÙ
+I‹ª§•öãßj<‘ɾÁTr}ž7%7må}v¥ÿAD¦˜Bô»3 ‚Eúv·-AŽ¥rE3mï©Ú[òÝ_ù®pw;!*›!r°a¡ã¥\bxÅé»ùÃYmç7GQµåµŠ^/Zo×v ×FoJmÂX¦9š`‹´÷i û`öoÒ˜GZ¾•vHÙL:$$ò•Ÿ‡ Ûº?#RΙSPÇœ“vÍ®NÞK?x¸[8Õi(îËVWÉ ÕgO‹|^n„°¼ÅÑñµža¿«Lˆ•Ù€JåÙDŠ3\åà¶1¦büóÖõ±H¾>˾iGÕýÅÈ8Wˆ†§&Wÿ!¾i¾œÌAÔÏφÇ{å^Åmï…0u¡.±§õݧ!W(÷V/ÜÁè0<´Þ˜Ä›­6ïU-ªh¯L®Dz+Z*mOP|a/¦éñîxd ­·‰¿¨¾Î¸,ª–Ô’Ü µdLrì¦ÚÒ!÷Q­¡¡çëKX%ïŠimc{²(ªv1ÀîŃÞùÏù?ºw¸
+ˆ‰™¶¤cæ]cÔ©¤—ïvâòs_&Z‘±Ö"ç‡ÍÕX(|>zØðÜk°÷áì¯frMºzÓÝ£¤ ك˼߸Dž“‰nú°¿¹²£ë;c¦’4Õ’2§¦ÕOc/gôL@*J <ŽúãvÄ8«õ#¥ã7öFÉ´vµôË1¾¬“J ˆ—ÝßKóÌ>pp€ÙæØW«0Ûã ´Ÿ$„8QÎ|˜µTVvšxV®¿OÌ5\ÿ4z,ä髃]—4Z_Á¯ž ‘Ù¶v»sÌ䪧l\4–§4ÏÎqŒÊÙŠ‚³BfÚG¶ÙR…6•ˆ)Ô4Å^ä×¥€%ª[bÛ‰ÆÏ•Û¤·+p^ÒFȯ®˜´ü°§ŠÐ2æÔ‡‚”QÁ[ó%ÏšÀ£¹ò³¢À³Ê­Qï—ÂkÆxç;¶ô©†éů»Øé<opéH|_Lƒþ1ÀÁWÖ'åJ&ÁØCñb]÷V™ü†FýÔSK:¬8Xï`½û[-ôå‚Wzfç6ó½‰þ¤m–Xeù{òwÎÙp
+š¶?Ê ‰0HàO¶ÓáÉ*6µæîáËÇú&TOß+ã»ÛéZ)Nñïö«¦ëWk°Âo©#þÕP¤û©¼$žÊŒ7Â3¿<#Š‡„\(¶Ë-ÇmÒ|&úpU‡\®¨ŠfÌ•™ÍuZe¡À²ð¶.îhçÌ}s<qåºn:®üD–’s.‚í‚©ùj­nt¬×à~ŽìóÃCŠûÁšŸLa±M_ò0uÅ7?ë“=MœÏÞ;µ&8/¤(ÓËäùI;ÒT£. INYU… ©R{ô”ùÓ‹dÞ¸6]ÑÂI(üB7ª®ðª2¢ÎÀk92š_¹Öë^Eëü^{s†&]);HûÞ]±S¦8
+°±q –·/»×÷áªÃ¯õ eîRúá“6%8Á*jq±.ƒª{óF+£²¤ÜÇ»S¿DØk)Clå]ªݦò*¦‹?õIôîiól¿~Ж~ûŠ$K/™j|vþÂûEŠÆ&ež<ÑN×¹O5çú³â‚%šìøo÷’'8£†Ïô
+(aÙdK»´%É¥~|ãÈÞÚ,Œ%ÎÞœúHÖ$L–_´ÇX¾OÀ${f…ñÚAΊޘ*\5.¥{w…<ÚIÐ —\ÂùÊJfùq•g`z1_X·ž/ÞõÔ—g»çkSG¯©qe×á}|Hû&üLXúüìóÍOŸ¾Ë±Z)TÄá/å¿…8”’­Ÿ>
+·4þËÏh„Z¸ž[¬v°ÄŠ¬W]·°ŠÉ¬“
++@°Abƒ OR0ìê—©kÿ–|Úè›1ÒÜêV‹9?¼!:a>áñjü%òًì6/&+³ 2'¦.þØíÛÏ\0>ÿdôò}–ý‡W–h1gòïmà@CÍFž°(›Â{{/èDÃ{æ¯QU¶;ˆ{ï. eæ/ù«ãF~Z½”ç‚tÒª¯«VžmëÁpÊ^õ+ÊÁ9¢®ÿš bá×Á‹kœš¼Ž ­ÀA÷ËgÎ{Ôh×?w¼–íÌqlÖŒÄÀæ&}€ÛT–.Ã6Iª_ ]/PkÛÝéÍ)¥Ïp,ÈWy@;VP¢Ÿ3¥=;­÷®þ{Œ „’"E=9!rWv~ QMUaIÆei0ð¶~Ô<Òd[s±Ö`€Í':Î\î`ƒ«•‹ØQ1Кç´ÉêøΉ TGhôTúG<¹ÀØoRÍòçÖ£sýGç:sjŸÒ˜R–œuP½±‰ÄÜ/% ÖwËÆøă=o¢^ÏZN[h1/kv2†ŠqEÓÛÆ49Ç:¢XÍÇ??¸T~Vþ¶{â×
+MÞ‰¿Úcò3ϯUP[n½Ti5øæ²Þt¢U|7C $½Tò‘ÛÏ·’óöŒ®†½\âŸSzSïÒ!©qc½ƒºÃ+ZEßçH´V2€7g:¥CyªÍÚog¬¶±ÆÞšÉWê¡S´úexFìf’"»†Íàù"O&žK°±Qæ\ Åß[7†jªS¡o̯ô8}]
+™Š|I{ú9-;gB"YĤrÄÉÝ”þù:Å&†p‡ín¯ó»[ŠÙ¢jÑ—v«ìWÉõ*¥ÍÙ—ò˜ñG¹?„}Þé ¼ËX$Ôñ†2IŸe¯LvwQŽs´YU“źúô±øB‡ÖXVvcQ=ç@©)e-è-’#óÔ‡øN£KŸhwy’#u„Sž\Q\eœªd´¦·|U5½=1N.nâ0Ù$ÐF‚6§Ï¨~1T„‚¬°Àu‡éÿ
+endstream
+endobj
+1231 0 obj
+<<
+/Type /FontDescriptor
+/FontName /KEIOQG+BeraSansMono-Bold
+/Flags 4
+/FontBBox [-19 -236 606 928]
+/Ascent 747
+/CapHeight 747
+/Descent -197
+/ItalicAngle 0
+/StemV 201
+/XHeight 547
+/FontFile 1230 0 R
+>>
+endobj
+1232 0 obj
+<<
+/Length1 807
+/Length2 1720
+/Length3 0
+/Length 2280
+/Filter /FlateDecode
+>>
+stream
+xÚmRy<”{¯¨4R¡MáýÉNÌbR×iì¥l͘OÆ3Óx0¶H¶xE*¢Ò`" oÙr%J)²¶ Dº„Ê–;Tx‡Þ{ëööyþø=ßsÎ÷s¾ç{Ž¼ŒÍ!5Cƒ
+™2T ¯ŽÓF‹rˆ‚øY2†šƒN³¦Ž ŽÃá0òòÆ,ˆ‚ Ą‚Bz€ìíR@Ðx¢AGO8œ&¿ÐÁÒßâůÁó8Àk-=<Ð`P!/Á`—Úš#ž €×ü§ù3ÿÊ@,?~' ô¿îʀߛÆ@èA€yò¹þtºÅJK’Á’f°$,‰ÖT:|Üú?ŦýŠös¥9J¡Ã†ˆjK²—‚°Ÿ)̆h60êá P–?ô-lÐ F †¼dŸ#þ”#{Ã>äç·dÉ·œ#{y£|%|Å?õ‡ÚÏÒù^- Ç::Ú4TýÕ¦–+÷# Œx‚–6 °X” |¤Bð
+À,¨ôž¾àÙªªÇ.
+)M–£yí£gJ놌ÑÕÆè•FI7Ü{XîËàµ\ s{ý{ÖÈa²äáêÕå}Æí®‡¾îíF&êP]6·uŸDÓ‡ƒ¢S£¤&ü¦»§/+²´%àÚ§ñ¢EzIáˆOÝ¡Ýþ϶GÇg%I{&ëÞ‘Lºd{›£ÂnF’Oäºù©±'ô8ûuB&Ø;»ÄãϱUÃÜoç40˜‚jAâ ±©‚¼ŒÏ§´Ÿ¡5½6·¢{+hÆ©:æ#lï_ ©9­o¨u0æ†UöšÜXÖbrbGBȘÔÈP“Œy~\…§:SÓáâ|?ˆ)¯3yääò‡ŠÐqäÍ),Ó‹• GŠ­9²Á5‰µqst¦êUfð.|ÐÝiß´ ­É‘º5b)‹ú¶Ût³5å$î‹üñ`†ÎtÜ@¨à8L´6#Nêê[»gßÊ× U6¢Ê9Â;ÓNqW=^¯úpæ€Õ ¬Æì±:鸲ƒyà%åKäI¸¡¹ú¦fƒët
+Ù¤âM¦ÃâÐæ’£¥añö“Üç ån
+»áÕǺFq2&
+…ój± ÙCú*fÑì+²67r_Î^¼Ìyú®ûB„2zíEð‘REI—¬IÓ²ÔÎ)h+«¾R¡7JTȇÑý¬º¥à“yFJe§¼ÍoVNÈTØ4‡Ô«“ÑæŖȤ¿нášðgÝ;TÝöñž$O ò||
+bâ¢:û…ÕÃF¿ªÿ6à7Iä^À\KGeßÇUg¾D‰ä[o)ˆXk)0ØÙ°—RôÅgƲy2À¨°”²L½'¥ö[ôËÜŒ=Q¨1q¹¿ž€Äî[¬ê™~¼°¨`:ÂSÖ;qØ®ÓQƶe­ítCÍüFÃÂSsJÿzß ­(Ùl=7àr^T« =왈~\Ù÷8®:ÍûªxWVê—TÛò” y;oä>)÷6[í£D*0_h’:Ìà8Д·ñˆ[J ÝžKÕìJÎaK?Ó¾0=Rzäĕ±‡6Ê+ Wé ²rjåÃÑðEéÌ%1b­¼aù÷†â…@à =I'QÝ0qák,œNÝèÅÀ¾ä<÷jŽtsU|Õ>œpÝЭùsÍÜÀÕÉlbúãد’yqÂÖ-gv
+·Ï§׶ìï~•I?ª¡óT×ù­Á•mõܯ—×ôõ¿è\5ÜÞÆ]ç1w&ЖD#ÛÈ},7 ´å© C É¢å–Iñ.Ï›­ó_r·íyetyZÁö‰
+endstream
+endobj
+1233 0 obj
+<<
+/Type /FontDescriptor
+/FontName /AWWUJA+BeraSansMono-BoldOb
+/Flags 4
+/FontBBox [-73 -236 681 928]
+/Ascent 747
+/CapHeight 747
+/Descent -197
+/ItalicAngle -11
+/StemV 201
+/XHeight 547
+/FontFile 1232 0 R
+>>
+endobj
+1234 0 obj
+<<
+/Length1 2075
+/Length2 7648
+/Length3 0
+/Length 8786
+/Filter /FlateDecode
+>>
+stream
+xÚue\Ôk×5­ % H#]Š0t·´ÀÌ
+Á?~gS›Û,Èj»ÎÆÔöN¤æ·YæP—;iÿ¸aÎwi‘!·$H¿ÅŸK r7Ùέ¶üHÉ,ö–»;HôDou"Çl}"xÛ„ R›?gøÖÔòNG<È€[*d.;äÙ¿ãGê»­¹ö/7²#û[72™½)b÷¯±òóüÇúï¡ò!¹ì!pÄîN¨à_6(ìv˜üHímœïtÀƒ´8ÜHýîÈɃë6X
+‚ÙÀî´ù'ârGcdG¨Û-+²¸ÿÚô<ÈÚn+@6åd ‡Ü>²y'WØÈη{ÉéüçnuÁàwDÎËåDìzç!“ºÝHVĈTßý¶fd&wüï
+þ}«™B휴öÿ< îæ¿0Ï-V6E;7€€ùþ9Rýîü7ú?.xII˜ÀƒC
+Š2\ÈY,À‚æJ-í9údñdZOQd.ë–L†Ê¹À
+njî^µTá‹Ž [?jRöTæUm€U,õ¸EÁ2'×Ù“\AeŠB~‹cB=èâ… |ߣáãË(ÕSDµtôþmÿ`ôµ0“wÐQoRÇV|IT•àaJá—M|e£?´ß£H2=ÈrÝÜ¿z`¤?èr-SšhJˆdvfEX³4‘‰¦{f9‡‹1ØÄ£
+ÌJ<ñÞk Ê´ø˜ñ%ä>€­¡ju|¢eBÌ!l«}?ò FCs Y5‡ űHôɇuŲÔrÀƪiá2áðŠÁY{ÖiU·¯ ý¯‡qwuHƒÊõ<†o¸4÷I}B_~hi«}¤I(l®P‹ðö|ýAW±é]Ê——ß÷DSq?B¾õ¼|ç˜öÄûjÖ³) SvQy
+oôÛ«ÒÉM¸þ¡=R²'†:„IþDÉ}Mñ:•ýÃuAíG?Çü‹âÆõf«¸íM‡rºQÔ’]˜—Þ¨PVONu»eSêšPl­*—MóF«sÝTiñO_k3ýY”7ÐÜÓê½U\W— u“.Ç­« ì%-Ö±=ÄìAmV“©V£Ì4A/6!éÄ©Õ—Z:1³Ç^.FZÉ¿ôùżŠëŽÐíÀBØÕ3‹Ðð“úšÅÁž¥ªá
+•‹{çÊv¾%Êñ³4{¹&‡Ï|6~Ã>–ñ…Š¬ëõ)pŒVçD¦·U:†"2=~/ÖôVM"Åy«Ÿsû&‰}OCÅ´1ÄðܬD8}·WåÎ¥¼£ÝôÈÁ>çzómÒŠ ð·âÀ›Ð¥"WŽG»hu ‡î¥ü3\@.PêC!Y-4â·^6 ÄâŽè¾ ×Ñ›h„‚õ<J®%È)À*.æóÃh7éO­s_x‰w£g0eãÅ ÄÞó61,½¢xÈ¢S~n|ƒ)߶34âÇ;ðõ×ðóîôŽ¡VuîcÇuI=ªÊ†…•/½k'ѳ’áµ)”Ù\Ä
+¦¥ —·m'‚bí=9€Ü³ŒF.W½ ±QKkª¾~_e…Aë^Š²oÃøŠ+oF%GÜàz¦nÌl‘në-fmVE³~ãà¼Âú)‰OkkØÚýï/¦á>Ôe>ªgY@{jo;ÿèš Öp# lÌe=SñO£«uËv¥\ïÜûfî%2Ž`§Çƒ_~«
+Ê<[N=ØÜ«Î#þ\®*vÃKŠ*èçÆÚ+ ÌÞm­BÉe° B™Ž¶{†] 2w($j³(±Îî8 áR ñ`;9*¥À·Ê%ù”=.µŸˆ•Þ&±.‡¢UJº³¹Äù‰¦qº¹ö‡!6æ‡ìÇx4±(‚_^í|n¸ÌùLƒéÕðÁUˆUµŠL±w.¯#35ØsÖáVZÿ™µGŒÖë³°o|šqÛ¥kmÅ0•8iÚˆ!-MâÑöãÉ©B¼:™BH¡È½”õûëoÆÚå]½ÓV
+Ÿ„ù«2ÝQÛµx´¬ÿÉ^˜#@P˜µNñ:¾/àÛ£xÛ²˜›\à͸ÖFúÇ ÏDÓDMc õÍ£S¯{¥ž7,9¶™%Wk§ö²¥Ãƒa陑Î-mÉìib¾ñ”ƇõŠÝýWòÚW_®øR“įF(:Úr•:q/õJ ÊÂ
++ÈÐ3,Å—|¨¿ŠŒôÖ®"LJBµº ˜OUÏø-º´ø~º;L~KìxÞyÝAôaÑÕÒSˆÚ¯ë±~­ÎÏ"•BàéÌ¿ïs­u†,Ý»®lEhIJ'ÐÁ{ÊÍé_».DHÎ߬´Wl
+'(.æ;Á{ž€>LÓ?s`i ðèXJ]2·‘<ÃÂ_z»Ú’Ý—°È¨œWŽq´4È¿3q¼Ø„CHJó}ÌŒ†¹r˜±N¶9œI£ã²›ÞˆÕ
+Oîs«f:«×ÇÊ:W·œ÷÷ùz×þ¨z~™kzùi“ ˆÇÞ'0ÇW<9ÝZ棯R!VTTý–ÛÑ{þü‹ÎóC…¾ÜüŽž¬ËÚ]?»GÏ0äÃV“tw£^ï]üÀ•¾ö.–@+dÈ}ÜS·oïÃÜg=-iµM¤#OPãÈDü=tôƒÆq˵¯ GIœuˆR[òzΉ ½ËäÛ”Ïtm/é7ÙýËšôç\:GLüô̇´ñéiÊ5:‚Kc*«Aš¢¿My&.§ó»v¥?ª’¿ƒ'QšfsdLqá&_Ü
+
+r­Ž^ý°Z?›~’“
+¥‚KÂETR*>«™<ÂõbË£óýöKé(7ýÈ_r‡Œ«ÕK†f‚ü»ãL¢…ñ· •‡ùFËÜ£ ®oÞç9b~&é`öɬÄ >W€Ô$Æð#í’Љ̔°Ý]Òº°¬3ÀÇ-ì.Ľv,§
+b©»#”>梧žã—ËY_~€a1 b΄R¸nøé6ðŽr¨ ðÆÛn'L*þôt¡ÍJÚ:1EÕä…ì?«›ñJt— ¬µVSºÃÅ—•êã–Yö •!ŽS`>Gì÷­öÈ¥“}~Ký Ç­Lªké€ Mqqú$eTÚJwrÅê¯Ë¤Œ™—Ó††ßÑ.·Z#jnlY3ù§b§)F¸û¨­EË~§5®ò ß—;f9Ó¤Õ«^²˜ÓÓ«ˆzsZ×OQä21íŽq‹èncr虣~}Dþx9¢æ€Beq)bM qebÖ¬æ];¨< I̤í9 üa)bï$h°WŸv|ªëh§º@5ú<¢(—éqÎ(ÐHYÕŠÅOŸ¼¶ÑôNÜ¢ôéY¾÷ö”Tsc…© oÖwÕ’A2gù®dë%$¿Ü­[7V}rŠÁå¿g}ûôýFi±í+ϯ‘-hüàƒ6&{Ãä4aª[€RkjÊ Oš¬¬T5DŠ˜À-òÌãô¦{Š=¬§$x"ŠiØ S¢] SóR¿Äv‚ðI-M
+¬ÀPÄU ¹΃Sáã#¼J(O^Ý$
+úÑE®×ÑÍtd@›dÖO3Š¢#åþa @–8ÆÇ?eI ƒˆÄf¡”ÆýÖЈ«ø 2êqrCà
+hxa‚{Š¬tC¾Ëa@˜^Ñæ?ØžÎÕÒþàiDѹÅóæ¿Ì£Ô¿hð?,W3Té}(…›ÕšGfŒy–¦?dÓÇB;š›H`°êWST=å?yòušâó§pÍœjÍU´¹WjZÑÀ¢YªuÇŒ¬Ñ{gÔ˜FIiOc4’z…nˆõü 0Ï
+¼kÍË -¾‹OFÎ[£=™û~AÍߢvá×ëÔ\.ñÐ’g41CˆÎ£qÃTäÝ)RÚªpk; Œô¹¬|ˆÐò‚ê¿E-R5l¸^9¯g\¡ïHYÜ×/y3bÿÖUâª/'¢dÚ´¶\w/¼è¹X>ªñqÍwýæëø© /;§òÑçŒ#å:4êÓ‹€Ô”
+1øJÿþþÐë˜ÙêBUÒ3übë¡ôc§A•<d$ýøzQY©A¥-\ùoÖ$%aýº³Ï’/À© —Wâ\qÐìp³ÈÙyK˜çŽ¨ 
+(48v5Q«ÔT|:Q±¨›Oð¹äóœªÒF­Æ?3R¾šÿ‚¦D-|³éŸ“04¢KÆ¥¬QQY tÓ¡î°~7f]x;œ‘. –o%gÈþ\ùiäçûÕ„?dqg¥¡2h¢n_M´rʉVÌ]‰úòÛ«ý+âaŒÍÒó¨ñVó
+?ê¢OßGX>ø¨&µ²äogâZPØ|æßš’a’¥‰>(gröœC©¢þwÌž¯ç´‚á£þS“«¬Øƒ¦¹í^Änƒ×~g’›¡ÓŸíç>ì‘
+/é¤ZX,<Žbœc<4 !—ó+±)¸5mØ([Q®ãL¨Ä¦ä;2Îâ\sî➊éþƒ;Ħè~øt`…HŠOžêÕK« ß— £Á[݆°„•/‚ãÀ9sºMDSôM‹ÛdÔJ&#1L$(b&ãõN’;ið>èΞC®8æK¼°l÷ØLsº™:I[ñˆ -zÅ¡ .6§ÔÔ“ÝƸwé½@Ϩs+ÜÁ¢«&²¶Ú1¡ÇR.ç ¬_ÑBIÔâÊàp‚Ö'X–e©|ÖJn¸›W⬱­3•.&fGclZa¥Ï!kC»ŸîSYѽαj´‘¿®BK”ãø=ǯêË«?=-NxïÍ´J‘w¸¡³s‡LÖ@9P&˲99V©ÎXØÅÊhÎÀ ¨æ(ÅÑ ˆ’¬dÆ¥’V—êfLÒÕè1RÿØ­èzð=Ëó§]U^ï¨2~°»ûˆ$²Çªå ‡÷šSØI}->†«ªQ@Þ¢Ñ1ÂÆrdÔÏbTmé´ë}xä"½~£¸á¦©û7–ùšŒ × vÕ-CÈ8µw–Þ¤>å)À«G,iüNŽµM4)$²ëÆîÆKœ.âLóÍ¿yÇ…¡Šø¥/éãu>goIÒÖ ]¾‡Rùú´Í)ø]’q×D5ˆà¹ºœ„ŠS¦Ž7Pµ~VNN6é5fµf0ºÏÊ&ÓG’*"Àn—(äÌ |=ûºMÙ]†¿ƒÑIÃ%W¥ŒA—_—[âéRÙÿ$‰1Ë
+‰gÐkÍÃq- ¶îK bOÏ‹Þ ÷\#ˆûÀîûó‚gFt•‰ìÅ;ßQ/ð†„‹{cÐzdÁDÔoÏ6æg/Ë,‚Úæ¬lÔníõ8oÅ#·jD£ÄrSW¼ÁŽoe®ÎüQ…¦cnˆ¦eìHrÒÚoo#½mïZƒ'I°c}y5
+CbÓ|,"Nsˆ+ïÿ
+endstream
+endobj
+1235 0 obj
+<<
+/Type /FontDescriptor
+/FontName /VJXSDR+BeraSansMono-Roman
+/Flags 4
+/FontBBox [-5 -236 606 928]
+/Ascent 771
+/CapHeight 729
+/Descent -222
+/ItalicAngle 0
+/StemV 201
+/XHeight 547
+/FontFile 1234 0 R
+>>
+endobj
+1236 0 obj
+<<
+/Length1 1092
+/Length2 3624
+/Length3 0
+/Length 4309
+/Filter /FlateDecode
+>>
+stream
+xÚm•y<Ôû÷Çɉ,Ù²õAvƒëØw•%Ë(„Œ™Á0f#3 E¥ì;Ù¥H¶"‘%²&[Ⱦ¥Å¾“HøMÝû½×½¿ûøü1ŸçyŸóx½Îùœ÷c„Ì,ÁÚ(¼Ú
+
++ü&ünê¯b ƒü;‹²2¨CdЇ
+È8BŠ’Ë!”d\!Es).±‡¢ëñ7B(º¸CHÑÅBŠ®ç_(OÉõDи4(ù3úÏþ ”¥•!BŠ+ïC¨ÈN¦ ÖçRLú!E‚üÿùáÍNö¤ÜÁ¿7á7Cþf‘€!W
+q…hhjbû_-®5ÂÂÄ¿Öh¯ß{áýó-÷8.§¯ù
+\3±—úœ(ŠëâGèŒI/mk¾¼ÌyÌxËë(_lþÍ ^í§¼Pøhߘå='TmvÄÜn”µÉb
+t'(÷Ÿ—V Y¤žøÉ–ÇÆR؉šæÙDî‘ä ¬Æ·”»ùæÕ‘È òBͨN,yû¢ý»Y¡<üHþ/ þJºW}û3¤kC’§¹©Ãèó×IƒHB*©ûó8‡¨HÙÆi&*šÍ[Òɾp+Zg#hvÍIlœj®é‚æˆJè«œÇ! 3¬G²ªrÌ6mq©lð›Ãæª!‹lß­ØîÜqÇ„2›tïp=ßo~\¥ìÛ÷…ñ…w9W;•#{4Y\®dé?™K£áXºß³±rT©e&db§¼oŽ<Én•kOÕ·póáñ¸ëú¹òv¦æÄ; Í̸Ÿ9NšC–×ãÃT”Ø«Šghô¿q¹Y1’
+{¦½J¢ÆÞÈÝ<Ä¥Öãgšù²( ³¯Æf8ÿj¾ëFÁ8Ðb+(Þô‘ {‘Y¦Ÿ9žÕãYÛ?b8U½âX`¶½'dX
+SÞ<•£žb´Ãx‡S‡Éñ‘ç_ àzª5õñµ¢G6@Ø’ÊmTFkYÈ:4âC¯”múI µ·TÅö¬ó—F/¥³ù‹ÖÎ|1Æt1OA×hæÂ4a±IŽ›M?ûŸ[ÞP|ÙP_⛤z“Èr#1´BwCˆ¦Ööì ã›â5‹•|~<NÚñž;g¦ ½øvè3o_z±Žèéõ(4¼O~D`Y­è.µ;ò¾…¥¿á*jí›ñà&ƒÇ6~ÇžÎqÛwÇ\˜’]žN NååWçWŒyŽÀž-Ê욟Ì÷µ0S7ÝV¤©;[D¸¨:éTpR<Õc„4Û2Oÿ̇¬—“Ê÷׶¾óƒ¹Zj¥¬O³îúËnŽÚ }²5n£rOt¾¹Q—Ý>Dÿ„/NÒÚRÁ±GÜJî¹kë.b̽Áâ™z0›È·Ð\¬›Äῳ\$¡÷áÎó¢Š,ø´Õ¢×%· u•&cúMÈ`ºÀ^>ç’{§¸ 'ì`î›Û´At+yCŒåçtÄÒܔۆÛ%ÁÛ¦k‚†PSɨܧö‘Hãü#Âyv·R;û¿.:؆<Ê Æ˜G¬áÃ…jÂË$‹mh'b ïÐ;
+mãµ “»šò!Eœ}u¼eäg3Ü5ŠˆûPEøvɽp™·ÀÆÏŒaŸY•ì¸l5‰ò‚_ø.î½NØ›Ýrûñ$ÿ4
+ Wux˜‚ùôòYïÜü¹fÁh˜+ö„}h<‘Žh4–õV<裄-bSeÐWtPoæ*Åü­M‹¾¼ F›ŠÒë|¢çÌî.µKî! 18!So[›ïõ§u³7§ãW{›_Ê'îZ6
+z«pÕ1§êÖœ«W«•å0´3½û\¿Ú…§Ý´âæKîÁÓorŽ½f#¯Ø¥5›réºúæ’ûÂZ¤w¯Ñe”“­ƒÖ"÷˦EÖÝûYÏß_Ÿ©Q¨†d7
+oÐ2Ã2d&‹ª¿­ÅFÂ˦¬ÌàÝ:Ïr]VênÙk—Eøío»gÁŽ/‹'Ù<RéÂÜ”è%Diø”ï¹Ã…¨åš^+€Oö°»˜Î.Ó g?¸´,9&4¤ÀdpmXà³0¸s.7 :ƒ[9 Üz÷ñá ¯îÁõñâ`ßÁA}µÕWZÍà•H–í¼“ω1kDÖͳµ`þÊ &²z´—Ūåh'âúøyRë˜%šã° 㵞7r.PóXuH¸=÷¶vûœ>&"⑼û~Ø…Úéú'£±lëÄ<—»±E´ân3ï’Z'F´Áìë€àMÞ
+Ò®­÷ìBZ<£*`ôR5}9b¨‚ãbä`³ølJi©\šÃuvÿ–}:“¾“£¦´ ¢_uÒ `ÞŽ«&5g°ÛhµòžjïÏw U±“ÅÉ6%x8çy´^L³d‰±[H·}“2;òäïtwl*ñ<%y`õÓhGßI俽ìäu $®ÃrqU¤úê=•6}⚀S!|°ÙýÂÕM&lûköšaù7ɪ¥öEj¾çÒÛâƒÞ+þ#<+ ‡¯åá¡Glžf_íѽc*7¦9:NT«YK&²1lÂtoJå””¤Ø®¯FRþÌnùÒ ñŠŽAùÒN„Ô*·fÊç—vE&ŸZ]V%•©´ZöW5w&èÍýTßxÏi™Ð*œ ?&þ=1ô;Ç­nU •›EO³[ïn†D¼qÀÛ4zìˆÁ{O¢ò'ýÏH¡¢ù<Ú¸øÀþ5¬9Ž¥kt™_†šz‡ã8HÌŒüfÃáˆË¬N‘?`ä¦Ñ¼í̑‹³?S¬ï¶Â˜ô½¬—«öVÙ§RŽØÚ‰3)Þ®8NþyäàòRUÃLY/Ž‘亲º oÎ}±ÕÄ÷mq|2üQHÿ£ZI¤)ôέwØŸ‰Ÿ&7×ϼ8hUÑx\Ëžè»ÁîanÞÛùw!9Ù ½³ÏÅÛD~jžÄÄZ„Q?\ã¦þ!ì>rÉöþîÂͦ7µÇ¸rjöGÈÔñˆã“jY•â…€ðÇ+ÖÒ ”y䙌®ÿz"jÂ
+endstream
+endobj
+1237 0 obj
+<<
+/Type /FontDescriptor
+/FontName /DDYVKZ+BeraSansMono-Oblique
+/Flags 4
+/FontBBox [-71 -236 691 928]
+/Ascent 771
+/CapHeight 732
+/Descent -222
+/ItalicAngle -11
+/StemV 201
+/XHeight 547
+/FontFile 1236 0 R
+>>
+endobj
+1238 0 obj
+<<
+/Length1 1205
+/Length2 6235
+/Length3 0
+/Length 7086
+/Filter /FlateDecode
+>>
+stream
+xÚ•TeX”ݺFe
+ ‘rÊhÔ5ÜEqöþ
+ýOˆ?&Bÿ9ëÀq¤`õ»¡ C(ðïÝÝÿX))¡ý€@1 a@@XH^,RÂbAÿ ©Šr@ÿ™a1ñ‹IÀÀýI¡Ù„ÅÄ€@!à÷Kô~â@QhÜ… àé úý ý=óBPq
+}eç’â¬×oë9Þ:r[(6ÚÁñ©øå
+ŒV|ûÒÙöúÖåG¶$PÓ—uW>Yf`q‰¦I‰½ÊŠ²2}¯êÀO­¦œ+­À¼qøÍèÏ[ý…£!T¦´H¡Ø«¤ÀW1= M¿þÁ ©ŠÚŒi,KrÐPjù2t©5Ý"õH@勶Aƒ«‘åUŽ®£TâÉp•!x÷Q¡ÚŽbé¾Ï]ëx~…ãÉþ^Ú™·P}Ž;@tÈ0Û°9½§}w\j?„Ó7µžE¼Á±\˜^ï—mús± e˜:ŠšœãzFî4º“w­jq^tïà *þÔ×<r/S³yÃWJvž…TÆÁü¿Ó5›ÖÀ U…Ò&géÝÓèŒ|íú†ŒCÏPŸp´2H¬[!(ˆ§†Ö,òµ{õmî<ô~͵µš=YnV«›G2¥™º˜Ý´2/E±«ü
+¡´fÕ<…
+B¬¹š^mRºç
+­d
+ùô Ã<VžgxÒØúÉâ•Â\ï¶1-¿;'4{¤nQkEˆ¨dà
+ÛQÿÌU’¯¯‹’s“m±L1[½8µ¨U4ûEBø|”Õ*±¨™åѾÚK½1ᨂZ…ûÖ0SbcXTË9lEâêf'_7yB‡že&žlÒšãÉz¤_…V|»|-[=gì‘Asÿã†üK¤¶¯a"=«O¼'™u|?—ˆ5mZécÈ×À=Üô.+SG÷T€YÚŒ%ÒxNÙ¶£„h©‰—š‚Ý]ªIL¿^k®wƒ`óæ“«b8Y$ùöT•\zhoÒ¾²–Îüe„>¬®x’À‹‘T?µæl—–Y»³/Ë%=uÕõî$¼ÜÑuÄ:åµ _gOÑWYÉÏý¹^§Ž÷½q¢ÝpëÆaë(u¥$(¹a”K–®+mšn‹–r~-ãŠYda—_<«œP*Øú~mûÑ ²4…É{vËÄô$ž® YI<á7ñ#N€É#
+Í^ZRÃ9¡g"wÝ\ŒÂ-ÑȲA¶ýUÐóS9CeG§¨ÂÞ·ô¤bžÕˆ×_<•»\ÜØªÜ ØΫn³L瞬¥”DF„•N³<:ˆo1)”çD½SHèËÔyÒ»¹>´j?~Zþ¦Bùi$ä± ž6AО3ªzÏ׈ŽªïÒÂúíÜ ¤œ…BÐ>õ†ÃµÊü‰DŸ’bì§{”ºŒ¦¬çÖxækÇ.Œ6>ŸhÞœâÃÕÅSÚÇ&;Ù†&Þ(pH<¼ì%1všs¸½¹ÅÎ…s¢ ‡bÌÞp ¾iœ¦¨­º†”:2!)wõ6#
+ËfoÓ8ð3P6[ì͘œu™ÙYˆyÌGß_Ô[£ò±O—âB·jdljá`Êaã|çs™¼¨e°J–ýÄN Ç5§-¢2,kUÆÐøþËŒI9ÌGšlññ'o¼
+‹ç.¤)»
+zÿc,ÈǘÓ#;sq}ŵÃÿËûëà(©1æN¡M¡üQïKÄgu[=Vb«Ã‰“©1RÖ¦ZiOêµåû*Ïe†ús×OŽ¶ðåˆjº·C•]È£oÕ½g TgæR+E&zì…ì§IÅfŽô†)=¾É£ ;‚SÄbcó×ølÆ:¾6áøµâ UI*\RÕ¥¹ ¶ViŽnZ$¨H”>ѼR»Ñ)*׳{åéçUö©¦R9=Ü<«ã3Y}*ÒÖšÞIÙ×Ösït*³ÜÁCayÑ­ÖFO8èßd6¬É²ZsT‡Ô±Ãšl.\¯‹ùô&¬ç™·÷ï­òoô l^z?n‘¶´* sçÓ3±)“iž_¸9+ëÆÎÍI7Ÿ ’ÞXy¨PÔy0Ô½¢þdvQ:èÙ‹ú—ñaxT­«#ëꇳn¼DªcôÞlªµH¼1•\žß3‡0pŽHÊ3úmWGد¸lÛÖN:[˜z~á5ß’äE¼å÷ ZÆòìÜVaý3¶_Ôp^“É0vhka½Ï!¶#½æh«åõ.89ùYÂÎ/H÷ž™à½õ¥ïêá]ü¸fßÈÖŠ_éWܵWg~˜3vèܨâìkÛEÂLíȽC¡(-àVÖ>Ê (ß›Gª>° ]ì í‹2œ2×Ô
+²Cü"›^ï[ŸDÖÛ½zžv
+—†ºvRÿ±Ug€÷.Ó|÷×]Wke&½ 6ú%’ýëòo³ ùœÎé}î<¢«›„g\; ¶*£ÓmËZ †ÛX%‰•g?aþþA¢'ì¾Îôda°“€"EðŠÓKlðÖi5Æ9¼à9æä£*{NˆØ5ÔNK}\¼?Önû
+•vkmóµ/¤–¤„xIД{§Ùüw¦¿þåS‹Àxë*¾Èè¢\çöÂOæ7·#(êî²±HúÙk^²]2b{AY¹lfÄ#)ç/™T¼˜é.¶ÌàÆ‚×0’HÁJæ,‹O=‰æÏïŸf¡¶½Šó®Õ™…Ýfdø|8ß”Š*ü@qUg߆ФD(CdzµHôÞ¿,sGu/ñÝ®ÁàNÃ4ßÈîÛ¾ZÁ»Þ¥¸ehòóÍÌ ¦‘æ‡ÃÉ7§ÑÜ\Áᛵ)økî+åžùiª™U Ž“wvóüÉ~?mØô!¹âGkêÕË,y BUUÓI Õ¡;`–6ÒË$3ª¬näyâ¤ã™õE‘¼; 6÷˜ä¼I Û<yðl„—®¦T ÞàGo}†´…”¹ù}ty‰—ÎEf˜Êý*ÿIÏÿÑ8¼]©g4¸æîDßË›@Ó¢";è~@­j {ªÆöÍhï£í­Çô¡V«W¯¬S2Ö}ª"̉È)??X¢¬<›ïväåg¾ê¹Z gðS̃Xùc{`^{¯@¨@dzÖq‰¸øèPïW¯éÔ=ô©ý2Œ…tj¾¦épé‰ÔÝbH£;ks.XÍ-¹]Dm8s)¤ëÝ]?(.õÊ•/ѶaÆ®4òÐôi ØÕÛR:hrS9šÇX©äunm£“‘n=Q+E”Ñ58U\®¯~`Á»ñ4TôéYá˜.kwèÒ}Ô­ÌäBé0Wgò›‰~‘ÃÙ%Wü/»4sejçæUR¼^U,Éjý¶Éêk5ÓuÃ/–X³LüE—Mê Ö7Ó…]^9ÎÎÅìÖUŠ¾½”˜u*/æX·"?ÍsIÙ$Ìœå˜â®j°É\’ô†ÅM¿Õ‰”‡|…T“4‚ð4²’X%†îœ¡àFÀœ¢ÄݦPÉ ì6µUló¤§@/-ÓÇqB¹lD—ú‘Ø/›†kÛåfÜ:Jg¹¼ñü5Uc¦jÈÁGµ¾ˆQ%íY±ÛMDíŒÏŸ
+- ·Ê4æ•ÃeÔôj?dR¾½Î‘˜ðÖ„à½åΔ‹Òó›Æ{ïÃ~VŠ¹ÙǶD껡Έ¿"%)O@jçX£€uùfd·MM²Ã¦o™ÑáOõ¼âYÛ‡HÚÜiQW`%"*ñ]š y®A ÈÐüÍ+ªª‘žÇ ç/VŒcØÞ¾_‹!4«MôzÓª·PAàqò]F2„¦ïÆJÝú·;ŠýÞMä6ÁSè„o»_ÚÑ 8Î5µã0а5îa1F™Oô5Öiuœy½²SI!È9ϳ/Y H ¤þ¡dž¯¿–u•-ãÏ€Õ·½(ƒÙ#s£kùL¼.DX2ÿª–“í5§¹J¸ùåd¤ÅÜÀi_EUY‡a@ ã˜*ïOZÁì7ªò—ß¾À­M6Ô¦4 x›ñO^¬Gñ ›8u?ì‘–Áf{ÃEzÒ6¥ùŠÓêýßó‹ á«ÁvÄ+£žK9sk¦Âwöø™ˆÄ‚îÑ@}ÏžG'qHØ}2¬±˜\®
+îyÒÒÐ[*¹¾4<û%s¥e’jz½SÔà[01ÿÅWÒ]‚Ù¾"Cjñ9¢›±#5î¢NøÖ¹ÇOêRÀù–ñøÇ,«¿B‹ <Ôú¯ÁÃÆbÎ }‹Ë^×UVÁñ­6Åæ›—gæ4d-ò$)^?Ó&Г“ùNœo´¡ÿôÕ-·Ž¾ß¨}KÆì~¶Â%mšž'nômäX@U‡ìN¥a˜è÷yº÷¾¤KBˆ‚!ÈܽM_ÝEs'x·-˳ƕ4lW䳫r{)e
+«Ñg‘p&•Å’2 0wÐÚ릮ªÕÁ¸ƒsÿè9†óvIº3‰@ï"¼­Ÿ»ÿSÓÒ£©‘÷Þ–,n×Oç¤iøv
+™®ò²}Vþù µc•ÛÅèãk¯}}((m§Ù{g[(Åb“ 51ƒÝ¨ì1Í,}®õs#Hn?f†`wá»# vtá@üÔñÎ\ZfDlrS}÷ÑÇý[#äy¹¨º9Uúå¯Rö’]ø™ÎmòñxñRºbd–·”3ÚW#÷8œlïÉ150Í¿ì1)jû¨|´n"¤°çæ;5“ñ7fÚ{nRªûÑ1ÇPA†wK^ŒôÒZi6ÆýGgk†tìVÚÅgi0‰‰Ñ :2Æ°P&Óš=-O$Í»pž¦pSí/T%Hô¤¼òÆ]š¥P´BðŒÓ¤yh=$d›¤ÉÊ{臢)|+‘ê“ç*ýò~dÕ¯‡@AaJrÀô-ó
+â•z‰¾ßùNøK +]iþ׸ÒÊ [§ùëMӟ́Tb=…¦…{ÒnQyL3l}ùY¥Ãu­ Óš^b¥îIW¢Jë€÷ÔzdŽv ÂX‡-Óïõ´4ûd÷‹Í4ûïå虞1ÙùÞás°e‹«û¡ßÄÛ‡“œº Í7¾M_a®òKä4'9ЈR¶Af0Iy7'ïÊÙv‚ ülè2ï'Æ¡öú’¥76qæÔ+ž)éÏ÷™!_Ô7hjð6[Òx‡ˆ ¸¼[ØøY’k Nå1ú±NW¸Wð·Ä‡i›ép±U>Ì2šeãÌâÞÑ4 ·P</!€ÖYØ{º¹ZaU_$¥µâK4¬ûSÒùx÷úËx“)b¢´1‰¸õ<LŒÁ‡reôY0µw¦‰7qŽ8jµF¥¼Ô}m¨Bäc¹¿¯d»ïôá¾.¡·Dàa„G㙟’çH}ž1úCö'-–¬‘•åÁ&1œ•o0ä;ôm‚ã(g¯_4sÜÖ©òªÏ
+Ö|j°°åÙC*;·Ï,K®½ÍŠ²¨•[ü¬
+Y7ÂËÅâÐÖÆ“Åã3"Ë>é$H# ¥šxîRßl¸©aR™¨5Â
+ÕÐíÈ7
+LEïÅÆ6§¦§y!Ò‚YEh]ìB=cÙÇušôXS<‹Ýí•‹Bš|Ú äÉùvû#y Šô¦W/Mžkš£<já4â÷L¡LúÎ%}PP[÷9¹B'í¬üKŽIÊ‚…\mEß^kvÚhŽGux[ÛrþÅPšª÷¤Ö7ÞÉÔÙð9°.çàš¡VhÝ7Uë!ÕÕ±Û>Í| eŠì1]z¶¯Ž£#a Úª(a&Cze¥/îàE(Ó/4úS˼ö†MöÌícíqÛ/ßÒµ¯’Ä%eäl*©±]ʾœª.ã þZíW¬‡§êïoŒƒcÃÎ^„ÎÖm –¨éúé¾il;S°<®ÑS–|*o[lü 6먀zöþ—°ÚP0Y¼Ð.&9ù¥v<MG¡ ñ§x“ýZ†<I€Ëdröþc˜\,µë×t¾ïÐ…zA¶ÉB·¨öO,Êþ¿M¥P
+endstream
+endobj
+1239 0 obj
+<<
+/Type /FontDescriptor
+/FontName /SMXJUP+MarVoSym
+/Flags 4
+/FontBBox [-572 -214 3014 925]
+/Ascent 733
+/CapHeight 733
+/Descent 0
+/ItalicAngle 0
+/StemV 16
+/XHeight 400
+/FontFile 1238 0 R
+>>
+endobj
+1240 0 obj
+<<
+/Length1 1608
+/Length2 9251
+/Length3 0
+/Length 10080
+/Filter /FlateDecode
+>>
+stream
+xÚ­wePœÑ–-Ü ¤q‚»;w×hè »»»;M€ Á]ƒ†à4¸$H£äÎ̺o~ÍÜ]õm9k¯½×>§ªé©5´Ù¤,! 9ˆƒ ;§0@ loáê¬mî Â& ±³<;ùÐéée  s0ÄAÖÜ$ ÐYdA@
+lȨk*ªÉ˜äÕtò ÔÜ ájaTÀ@ƒ3è5À
+ØýÃ
+;¬†£›iGê•$…͉i†Ïz°iÉoFfl_‰{‚¢ÎÔ5‘ )¤c„µa°eÒä®-MZ5QÂ{WnÁÑ$@u"Ñ`mnÖ@ÿŠE¾_4öZ:ÒòýÚ$¢µOp,ýiš—>/Åï}?w&íÏ{ r74k]ƒOò¤÷­Þ&…§7öªyg|Sý) 6Ù\sP «G7¼E¥eL!mÝSyoû:¾åØ0¹¯Áy²ËŠñê¾~^örr~yí¡YæŒ
+¦­1¹ø? @Žùo-‘Ýå0Iå\‘/_Ñ÷©Ô&0j¿O’$Œz.ʹöšø|°&ML%Ps<ÅjIÉ’‚ #Éœ“R_ps#Ⱦ3ú­àt2—j/,¶IÆ»…0ójþä¢AØ*Œã4ò+0¬|Û»ô-$rÙs÷ñ³· m@ËuO_È,úHeÖX#1ZAn«6î°g¿VQ'D¢Í¯_
+Ñ/ýl¡ðÕ¤äûMZm…¸É}…¾Aìn#‡‰Ógðꉣ¤à}”ýaL«Jí7þ¥†U=íxŠ‹äÒrdÒy’_Fˆ¹á­óoS`U}¸T´†WƒD&á<_Q*F=Å̃ä]OR÷?ŠÐŒÂÝ—RDœIl{üïPZAqÆ<È[ —kÊhÂõóADØ¡oFÌ^M—r•“:ùÇ“Àû rEu½˜ë%庇5“kv"OWo[TEdn&åcQ®ÖÅe„úÅ ot.ñŽMIG öK§O´ïœ*^_© O!MË°ÓH~áV ³/{3í ÏùUÀÚ›áß½Ï{Uð’Ž2µñCðql¹ ŠÚK o‡r>
+-â"3‹ÆÏ˽ýNMu1³iÇupKíúmªgˆÙ7íQÚ“âîZŽŒ1™1¡*Ùom_··¶¼=³ô›áR’“2QEPXÇ—AµÖßLzý ôØ ×dâWð¹n¼ :öûC£¿K¼úÀÁ«oîYÉÜj?þŒÊÙÉÉúS2Ç$ØþJ ª™`›-YÍÿ4y¶°c3‚°˜ÿ^%@óvwÍ*=z”S¬W{B5N{c•®å¡[ì‚lPéÆž
+‹‹»q›®[ó¿Æ”Û=ç¯?\Ì Ä¥÷jæ•F{¡d µ¸Ëh‹‚´ë;ËçT*õpêQ‘‰5NøâÞ]¢B Ha®… Rk:†ðÁëiªñêaëB7þÛÀÇ"ðøð…@QÒ.Ö‹ù‘Ã\µæ«ìÙ!b3ÈCûyÌ £öþ|ÌáþáÆ;x"¢}!?žn2-‰~›b{t±÷mò·¼…-[¤ðxÏp ›,¢WûÅW^DŠ+յߨ³}žïÚÍÄ|Ç;©b‚ò¥~‹°¾Æ¸úêa³¹¬ÃE)yX‡Ÿ¤/îG:ê çQòRÔE«…€l€";¤Óþ„ö—›cÙàP¸–áE]'Z­þ\ˆ<fÕB4"¯À‰Ý ó)ŸßWï2”ú œGg–äŸ ¸ôÁ C›Pi Á•êFºÎx}é;·üµg¬›Ô ­7 s¿}pS6ŒÔßٚ؄OŒéuêÛ—£Izdú›“‚fì7ËfÊ
+`Þ­o£cÁaãø<åQÅg[gJÏp*ORNbf‡2qGæµöªft;õ58w+7LìÐR6ôU~vvRëòX’ÃÑÔ£ó{eèÌ+ ®*ŒþJ3%(±™
+ÅBÜ¿ý9[¦Žšt¨lrÛ£¿_ ˆÆ‘sÙ5Á
+*"Ó˘õç-Í*bpË7ë”á»Åzº8]“¤$eäšpË ¶Û2ö¹6Š–xÄÆ2U»Üîˆ2ŽTeUe¤icýÕìkðûšÎÍõ³•niLÉr¬áÍKR"ÍÚœ|»¡WFÊ*š#VL½¾Ø0™>^Rcb«„%/ýI”éh&¡Õ 0:„¸yÏ¡ è·# ŸÐs€¸žÖáüz“ c4†àfçòûc´QêØ;OkoÄ¡«å”‘E•|ð™ñ§’Ô‚g:
+⦠q §ë­Òº¶¡¨×~ëÌÑ3ùW1È]]Üšg~ ÷<¹_ÂSǸjÉóä¸` ¤¶ïç23IØ×DdIÆeû| ¿Ì†$R;±…tN–/»æg ÿ>š¿GþFÂyöš¡ÐX¨ŒÀ<GW.ã%¶²^=çÊ¢h~’X[å|˜ÒhHSJ&4HVпҼþr̪ö莾Þv‚gVöë㽡j‚ƒeCt»Ü§d-a1—ÈÖÑDa2žž›—!á'UðsoÖœ-‹I
+`™ŒŸøhV}}ÑH;bjñc£Ãµ ˵Eöf ßÞfYÄH$¶«a,‘„2Ø~ß34ð*ÍPQœí½VÛW¹Z}ô†õ®,m4œÁ‡ûÐ6XAnÃ÷é
+Næc=ŸÊµU³œ´Ã¥‚ ólK½ÛÔµvÖõdEGÉ8%ÚËù~ÜXœ‹þ`‚©`ðíû®ïAB!ä*ù²€ç;`=¢½Vˆ±Ú!ûõ•hˆlV&,ã“/ʆtòïûóù¸‡ ×Jí‚iŒ]×4Ž9ÍײŸ$ÊTpEpð<’“ºd.»ãØdp= º’gSð)Z˜M@½O NÅ wUÂÖsoZfsb÷{®Ää%j êé‘XžUÝ:´«—¨8Ɖ/JH®ÂVÍJŸâÄü±
+}´xzGGئDÉâoÏÐ ªV1Qß+|Dßo“z«&¨ûâÜy1õÛ艴$`ÏDlÀ€ågh•s÷¤µK& 'IK'«p-ë}àv¸8¨âšÁYä;ýëîûú©ºÇ›Ÿ[ˆVJgÑýøðëéé%Nv.Xð;àÏé"µN ¸üóÆ®†ª›ø0ël”Jçá ¤à"<°Ãjhð§âhëV‘‡#§¨gï…¡ž%œ(œèœã^uÖ7ôùˆÕF¹i,lÂAQÞ!3[Ðúæ·p=ØMBÉ c^yˆô¹+Îÿ®'†hE¡‰Ñë(ó¨SˆÇyQÐà”aWŒžÕÇÚWâWù9vû
+-ˆC€}€É3m«Z8áã‡jº³áJ;ÏLüu˜,Açw@==Œ‰²£æÄÐç(†S§áãfü–8_íólMç€b•æÝZaa&efÖoùݱ¢³6´™eÏÜùUœíY™Q"\ê nî.:3ô~WÜÍ?>1´ªtG ¤™Õq:ÿf •·ê²ºˆ¾·Þ!¨E
+ë9ì Ev? ðÙŽ HiÿÒê¾Û:
+º$ñ=@íä ‰?€#cjMæ+MƳ4O•:ýùáŸuÚ·,ØxÈ ’æ.-¬$aµ˜M:7ðÔGõ&’¿å Ç—&ÈðgYeœ™¹¦Â<ÁO/ä VpÈ~ö«o‘Ÿt/¤Ji,‹³úWÑ‚îÛýö õr¼ ÊU ëž|Áüsø—ÌÁñõ7bZíÐð”Íy›¨­ž)ÝèìLï›I·è*ÄGxƒd‰}
+݈cýæӸѽ̡¢™:^•'¤[{>“¹³’>ÇX¥ë‚¨(]2¦ù]¡Ÿ¿¼H˜Z`ÎOÒ‹è>°ÿÎÈoÐFHÓ>s•¢Î±ÛúöðÝ$œweSø
+ä¥8×që•4Õ,ZÎ{f9]¨Kïn!¥\™ÉŽÙ§’nâC˜=1ÿBÅUN]âæÍýdSX¸=Öᇀӊ¢4¾d(rf’íÙ§Þz,f ¤®øÓê.ÝgUÙcJ1 7R¦q¶˜²Â:žatÛœ*þÐb›æ
+¦W)jgÒýi„—þéªmUKjúY¼”}0ë7…ç„ëš¾ÀùP}¯sש[µ,„e-ïžHÛ‚X7S‘
+½á\…ÒAKƒÙ)#‘GY¦6O‡aT†ào “—Ü–D16:ÀãahÆ¿C æ"¾c»Î7Ì­FšäS”ŒÚúu™ÔFÐÓ…,•%ƒ$²ô•D%ô0Ù©Où‰«RàòV²ºa®ô»Z¿aÓ¯ÚCÛ— ÛÚ¿ÒöûΉýø¹»³4|NÞ å¯\«{ó#l¾#ä=yŒ8þr4ÏÈäÔ"çóñ ¸ˆìqG3
+~|wÙöj(%×Å
+óMÁÔ¦’Yû™ÉÞüJËa£Ù*åÛ4„â¢A´Ó/GEÅœŸVmÎ4ô™Wp4å¿4ÁC˜šàÛ´©¡<*ó4wh‰ ÀÀŸÝ]‰Îe _;´#½åd=ÇÃÂF#6ö0VÃ6¦Ø5§¦5ô2ËÓ2«Ñ>–sL¬ùçY#¦ªä~‰æ÷æ§Ã‘T(zßÕâ°ò.uL`…”Q›³äs¬mÿªŠ5Å‹dÝR_ãUt€bâ5–P’ûÕO?ñS~]ƱföM³Q0f/9GÖr•¶ät…35ª­ìÌmÞ”‘‘ïY;SK~Ò<P6H=¹_7g»‰W¶vŒÁ+K«
+Ëòé¢|͹›½áî|y‡yia=`gk¼TÛ[|"L§É™Àp,ãã²1æ߉R-<Žµ"÷ÖÐ&m·a¿_ð¥ÞàÄÚ+)é=¬Àh‡ì§–0Î4w8§µNƒM • UZþ¶—êvaÅÉ ú¦̌Ȟ
+ ÄŠ“”N!ã JO @¹Ù‡ª0¤¹r!×þlydœ˜&öâ^ca+ñª`xŸ¥x¯±5abµa„¸5q&îÚ˜h”û‚rÅw”äÎKŽ)ÆÙ¨=û4l´¤YPŸ¿ÃYù~AÓ(î­÷ ñc ‹Àj(D3¢V¯å¨¿U‚ÕuQþà<Í®ºÌÉ>BÎì•Óû€AO# ìÂL!éolø´üùéõWN²¨
+´ Â×8lg–£ÎP˜XSîú»È^¬"?’‰¾ÏŸ¢G˜&ŽÝ¼(BcÌÎó1!’¸ÒXØéá8…xqUi›“N»×À¥ ¨ü~3•ðQÂp x¬âË8Ú³PDZ}î¸do­nãé‡çRüÕßNcß¡°5]­É]mAÌ9"ˈ®6ê½E¢èâ£ZŒ¿ß3“'\ẫW½ì3 §ð„¥%:Dm2¾ žäSTdÏQœ Àzº!‹Ý”Œàß<¨ô†\Ó×¥vR:›¸ì7Ô¡PaS{Š8Ù,^Ø+Q:$†*«ÐOÎ]@®ƒHƒ7žÔ©¥Ž»cíMª¢ÿ»ÃkS‡´,ÿ¹Ñ,â/¢öOg8Õ>iÂk,\”QŒîaÌÆ"Oï˜^ –“…ö´uÕsZ1}wê•íÒË‹´?x¯Œ!€¢tâ%¹ýÅ
+/4)V‰ÄDVSxZÇ'Gíkfy„ἧXoö©…ÐÝOôy=½ ©-oGr´I§GÐ…”Iô •®Èúén&
+Ÿ¾l¯ÐúÍjÛ)½3­‰ŠðétÙ˜öDÿ°ùäéP›±^Ä-ßñņ0Mõâô­›Ç ƒÏ?XW‹«í0ñçvÅ$_Žß6aªÅ½é(Ñ2xc³_»"Ô¿>d”Åë¡ÝHü"/˜Çí‰0F~Ð#i™+—˺ºJa<RQ
+Û±á4”"&ærþmT@“ @”£ªL’v¾—Zøï\gpŸ`lÓYVVN°”]ºþ”î«6½@‰ñGÞzL̶0>öC:±B@Ež/yCð3
+% 1²§ëKÞu:•¢“g}·ä^ÜOïnmqÕ§—¢)bØßG¬ý@â+A8¾ô¦×†MÛŸŒÀ/…äžhQ jã&xp‡XÔgp’ÝÇ¥!z›—16¦Lâp¥ó¦ª«.ã§û_m¤0Jⶹ•T>Yvè÷-\
+Zƒ6aX°øŸ#7Ôb»ô(°J‘ÎÓHFÁ›J@ nðð°u}DýrTÂë¨FêÑaU\wߤEÞ‡éQúêì~ µRdiêàÌQ¿yŒÒ?›iÓãÑd¿Èû>™ÃeŒ4rT_ý™Ë$¶à¡#Õ8¥ú iwýÛ"o÷îȱÝ@çʯâT¶Ú‚<°óÅ„×(æ¹–ÝÇsOÕ½aCES²¯]úA_–òï~¸_G7 !X„k‡=RɘÅÔÖlÅØ„'ÿW‹=]!V,Š½Q•µ-¾!÷;r¹¼ŒWßfÖ%LôGÃiµ{)jrMp³ôULÙ žõÍ¡QeíþMŒêÓ«|¯oÌü5¸¦âÏ?¥[Ì*°y‰ÖõºšK…/ /Jò"¿@ø9iLØxÒˆÅ#Æq YËi¯ Y}on¦ã®oMb.Iú|~½ëïTˆy8è§?nòâ#¨
+2‘cÁc<éÊ'ƒÐ•Ã;õMN|íý_M¥v8õÙ=£0÷½‹¹ýÌî‘—Raú ÐZÑ#ŸÉ¤SÎ/ ©¬ðÂW»*ÜiW5Úí‹9¶VÊo'o<Œ2ÌŠ˜$rvh§DC¦Ëü\¡¤7«c‹æ:O^Em®vØ"D7kçËTk¬£‘©k¶^´n)›e›ìÓò;Ÿ=+øܾ­†1,|>|rz ¸ŸÑ>æðùŠ ¸QÐF(¼‰ã›:ÓÞ0ð}ŒãÁ¾_t¦¹b¿n؃ýjñ: fÁŸõü6oe¤,IÒœµ±­A‰>Fß¼$<¡øjç%éþ1W kéRúÑ•PãÞYÎ+×µ.¼H-¾‡Q_âµÜÝ2ÞoÊéžÇ$¿@²Q²ƒ¾R€.ùº@ª¶½žâ¯æ>¶ãžšÜêT曪AX( ~ÙE~(nO$„‘¥ |¬Ö肘£›º1“‘É]¬F
+'3Bštug¸2X#í8'Є’ºÍ0‰Y]ÛÜŠãÆHi„AûËß¿,ëæ: àuQ×ð˜1BøÕn„ª(Ýé%˜ÞI»þij²s{(°ß7¯žu@"àoÞbÚçlŸû@\(£`y–4>)@6…”ÁµoE¾Ã:^Ë=~¼*Ȳ˜¯:tžaXÓ¹pBà. ‡íXF0r&‡Äˆl~K Ecùø[ÍÑ~ƒï;ŸÒ{w¤b¡Ïa¿PñSwz‚Vˆà_ã¨Y™hÏUð|ñغô³—²E °¹Ô.T^2oÜTpÖ]“ô&D„šÄìð%‘JðŒÖîU§9<ª$|«K–ÔÃשì#˜9ÆÃéÁã[Zä(36aðájʽœÎC¼àyÍX=GÕí•+úiâ1Mí´|½'½.ì´øzXpË؇)”ˆè39Ì뇊À×4 ðuÀS¼®_w$’ßixõ§¢'A~-MF­r:Bu ¶SxÅöû„Ël²ï…±ÌA»”Ù÷þüðĶٴ‡O–Ÿ: ©úª'Âh?ð×ã·î½Óhp›æUä,X»CÑúúé%]ëxW?OžŠí$Zž-rèJ<4ØÜÝ øáiï±X\@‹Âöày;•sÁ¬ï\a9Ó+lí{ Éûø Ë”k‡¹æÍY{:]þAˆgð•YiùvÛ%UÈ{‚þŸ‰ËŽžø£Ê.Ó3öCW‚ˆ(ìk$¿~Õ-¬Š<u‘9T …Ú³mÿ_x¿¬F’zn¬ƒ¶¯äarÓbFíSgÄTÚׂŸåµàG'cR0"•›ëÈjË™y¢p‚æ_éÑÎxàTõË:;ÍJNJfÍÜ׉µ‘yjPßùzz<õÄk…’›†Ùí~ˆgýâ-|ŽQp/T¡ÚË\d%ù1¾`~ŽA9£†ªCŒýs4­<K(ƒ6VrKÇÞD ºgñ&=cô
+Ë¢ ¼ £áE4q\á·G[•Ë
+endstream
+endobj
+1241 0 obj
+<<
+/Type /FontDescriptor
+/FontName /KGVTAA+NimbusSanL-Bold
+/Flags 4
+/FontBBox [-173 -307 1003 949]
+/Ascent 722
+/CapHeight 722
+/Descent -217
+/ItalicAngle 0
+/StemV 141
+/XHeight 532
+/FontFile 1240 0 R
+>>
+endobj
+1207 0 obj
+<<
+/Type /Encoding
+/Differences [2/fi/fl 12/minus 33/exclam 36/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 64/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 95/underscore 97/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 147/quotedblleft/quotedblright/bullet 163/sterling 165/yen 248/oslash]
+>>
+endobj
+1222 0 obj
+<<
+/Type /Encoding
+/Differences [34/emptyset 123/uni2693]
+>>
+endobj
+447 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /POYJCL+ArevSans-Bold
+/FontDescriptor 1225 0 R
+/FirstChar 2
+/LastChar 121
+/Widths 1218 0 R
+/Encoding 1207 0 R
+>>
+endobj
+438 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IDISUM+ArevSans-Roman
+/FontDescriptor 1229 0 R
+/FirstChar 34
+/LastChar 123
+/Widths 1223 0 R
+/Encoding 1222 0 R
+>>
+endobj
+441 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /IDISUM+ArevSans-Roman
+/FontDescriptor 1229 0 R
+/FirstChar 2
+/LastChar 248
+/Widths 1219 0 R
+/Encoding 1207 0 R
+>>
+endobj
+591 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /AHCECM+ArevSans-Oblique
+/FontDescriptor 1227 0 R
+/FirstChar 2
+/LastChar 148
+/Widths 1210 0 R
+/Encoding 1207 0 R
+>>
+endobj
+467 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /KEIOQG+BeraSansMono-Bold
+/FontDescriptor 1231 0 R
+/FirstChar 44
+/LastChar 121
+/Widths 1211 0 R
+/Encoding 1207 0 R
+>>
+endobj
+638 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /AWWUJA+BeraSansMono-BoldOb
+/FontDescriptor 1233 0 R
+/FirstChar 77
+/LastChar 121
+/Widths 1208 0 R
+/Encoding 1207 0 R
+>>
+endobj
+449 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /VJXSDR+BeraSansMono-Roman
+/FontDescriptor 1235 0 R
+/FirstChar 33
+/LastChar 126
+/Widths 1217 0 R
+/Encoding 1207 0 R
+>>
+endobj
+600 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /DDYVKZ+BeraSansMono-Oblique
+/FontDescriptor 1237 0 R
+/FirstChar 40
+/LastChar 125
+/Widths 1209 0 R
+/Encoding 1207 0 R
+>>
+endobj
+439 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /KGVTAA+NimbusSanL-Bold
+/FontDescriptor 1241 0 R
+/FirstChar 12
+/LastChar 165
+/Widths 1221 0 R
+/Encoding 1207 0 R
+>>
+endobj
+440 0 obj
+<<
+/Type /Font
+/Subtype /Type1
+/BaseFont /SMXJUP+MarVoSym
+/FontDescriptor 1239 0 R
+/FirstChar 106
+/LastChar 106
+/Widths 1220 0 R
+>>
+endobj
+442 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1242 0 R
+/Kids [433 0 R 444 0 R 463 0 R 530 0 R 581 0 R 588 0 R]
+>>
+endobj
+601 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1242 0 R
+/Kids [597 0 R 605 0 R 611 0 R 618 0 R 627 0 R 634 0 R]
+>>
+endobj
+644 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1242 0 R
+/Kids [640 0 R 647 0 R 652 0 R 656 0 R 660 0 R 664 0 R]
+>>
+endobj
+672 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1242 0 R
+/Kids [669 0 R 674 0 R 681 0 R 688 0 R 694 0 R 699 0 R]
+>>
+endobj
+709 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1242 0 R
+/Kids [705 0 R 711 0 R 715 0 R 719 0 R 723 0 R 727 0 R]
+>>
+endobj
+734 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1242 0 R
+/Kids [731 0 R 736 0 R 740 0 R 744 0 R 748 0 R 753 0 R]
+>>
+endobj
+760 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1243 0 R
+/Kids [757 0 R 762 0 R 766 0 R 770 0 R 774 0 R 778 0 R]
+>>
+endobj
+786 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1243 0 R
+/Kids [783 0 R 788 0 R 793 0 R 801 0 R 811 0 R 832 0 R]
+>>
+endobj
+840 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1243 0 R
+/Kids [837 0 R 842 0 R 849 0 R 854 0 R 858 0 R 862 0 R]
+>>
+endobj
+869 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1243 0 R
+/Kids [866 0 R 871 0 R 875 0 R 879 0 R 887 0 R 893 0 R]
+>>
+endobj
+915 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1243 0 R
+/Kids [912 0 R 918 0 R 923 0 R 927 0 R 935 0 R 942 0 R]
+>>
+endobj
+960 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1243 0 R
+/Kids [957 0 R 963 0 R 968 0 R 972 0 R 976 0 R 980 0 R]
+>>
+endobj
+987 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1244 0 R
+/Kids [984 0 R 989 0 R 993 0 R 998 0 R 1002 0 R 1010 0 R]
+>>
+endobj
+1022 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1244 0 R
+/Kids [1017 0 R 1025 0 R 1030 0 R 1034 0 R 1039 0 R 1043 0 R]
+>>
+endobj
+1055 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1244 0 R
+/Kids [1051 0 R 1060 0 R 1066 0 R 1071 0 R 1076 0 R 1080 0 R]
+>>
+endobj
+1088 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1244 0 R
+/Kids [1084 0 R 1095 0 R 1103 0 R 1109 0 R 1114 0 R 1118 0 R]
+>>
+endobj
+1129 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1244 0 R
+/Kids [1125 0 R 1133 0 R 1149 0 R 1156 0 R 1166 0 R 1172 0 R]
+>>
+endobj
+1180 0 obj
+<<
+/Type /Pages
+/Count 6
+/Parent 1244 0 R
+/Kids [1176 0 R 1182 0 R 1190 0 R 1195 0 R 1199 0 R 1204 0 R]
+>>
+endobj
+1242 0 obj
+<<
+/Type /Pages
+/Count 36
+/Parent 1245 0 R
+/Kids [442 0 R 601 0 R 644 0 R 672 0 R 709 0 R 734 0 R]
+>>
+endobj
+1243 0 obj
+<<
+/Type /Pages
+/Count 36
+/Parent 1245 0 R
+/Kids [760 0 R 786 0 R 840 0 R 869 0 R 915 0 R 960 0 R]
+>>
+endobj
+1244 0 obj
+<<
+/Type /Pages
+/Count 36
+/Parent 1245 0 R
+/Kids [987 0 R 1022 0 R 1055 0 R 1088 0 R 1129 0 R 1180 0 R]
+>>
+endobj
+1245 0 obj
+<<
+/Type /Pages
+/Count 108
+/Kids [1242 0 R 1243 0 R 1244 0 R]
+>>
+endobj
+1246 0 obj
+<<
+/Type /Outlines
+/First 6 0 R
+/Last 430 0 R
+/Count 5
+>>
+endobj
+430 0 obj
+<<
+/Title 431 0 R
+/A 428 0 R
+/Parent 1246 0 R
+/Prev 418 0 R
+>>
+endobj
+426 0 obj
+<<
+/Title 427 0 R
+/A 424 0 R
+/Parent 418 0 R
+/Prev 422 0 R
+>>
+endobj
+422 0 obj
+<<
+/Title 423 0 R
+/A 420 0 R
+/Parent 418 0 R
+/Next 426 0 R
+>>
+endobj
+418 0 obj
+<<
+/Title 419 0 R
+/A 416 0 R
+/Parent 1246 0 R
+/Prev 378 0 R
+/Next 430 0 R
+/First 422 0 R
+/Last 426 0 R
+/Count -2
+>>
+endobj
+414 0 obj
+<<
+/Title 415 0 R
+/A 412 0 R
+/Parent 402 0 R
+/Prev 410 0 R
+>>
+endobj
+410 0 obj
+<<
+/Title 411 0 R
+/A 408 0 R
+/Parent 402 0 R
+/Prev 406 0 R
+/Next 414 0 R
+>>
+endobj
+406 0 obj
+<<
+/Title 407 0 R
+/A 404 0 R
+/Parent 402 0 R
+/Next 410 0 R
+>>
+endobj
+402 0 obj
+<<
+/Title 403 0 R
+/A 400 0 R
+/Parent 378 0 R
+/Prev 398 0 R
+/First 406 0 R
+/Last 414 0 R
+/Count -3
+>>
+endobj
+398 0 obj
+<<
+/Title 399 0 R
+/A 396 0 R
+/Parent 378 0 R
+/Prev 394 0 R
+/Next 402 0 R
+>>
+endobj
+394 0 obj
+<<
+/Title 395 0 R
+/A 392 0 R
+/Parent 378 0 R
+/Prev 390 0 R
+/Next 398 0 R
+>>
+endobj
+390 0 obj
+<<
+/Title 391 0 R
+/A 388 0 R
+/Parent 378 0 R
+/Prev 386 0 R
+/Next 394 0 R
+>>
+endobj
+386 0 obj
+<<
+/Title 387 0 R
+/A 384 0 R
+/Parent 378 0 R
+/Prev 382 0 R
+/Next 390 0 R
+>>
+endobj
+382 0 obj
+<<
+/Title 383 0 R
+/A 380 0 R
+/Parent 378 0 R
+/Next 386 0 R
+>>
+endobj
+378 0 obj
+<<
+/Title 379 0 R
+/A 376 0 R
+/Parent 1246 0 R
+/Prev 30 0 R
+/Next 418 0 R
+/First 382 0 R
+/Last 402 0 R
+/Count -6
+>>
+endobj
+374 0 obj
+<<
+/Title 375 0 R
+/A 372 0 R
+/Parent 370 0 R
+>>
+endobj
+370 0 obj
+<<
+/Title 371 0 R
+/A 368 0 R
+/Parent 354 0 R
+/Prev 358 0 R
+/First 374 0 R
+/Last 374 0 R
+/Count -1
+>>
+endobj
+366 0 obj
+<<
+/Title 367 0 R
+/A 364 0 R
+/Parent 358 0 R
+/Prev 362 0 R
+>>
+endobj
+362 0 obj
+<<
+/Title 363 0 R
+/A 360 0 R
+/Parent 358 0 R
+/Next 366 0 R
+>>
+endobj
+358 0 obj
+<<
+/Title 359 0 R
+/A 356 0 R
+/Parent 354 0 R
+/Next 370 0 R
+/First 362 0 R
+/Last 366 0 R
+/Count -2
+>>
+endobj
+354 0 obj
+<<
+/Title 355 0 R
+/A 352 0 R
+/Parent 30 0 R
+/Prev 350 0 R
+/First 358 0 R
+/Last 370 0 R
+/Count -2
+>>
+endobj
+350 0 obj
+<<
+/Title 351 0 R
+/A 348 0 R
+/Parent 30 0 R
+/Prev 322 0 R
+/Next 354 0 R
+>>
+endobj
+346 0 obj
+<<
+/Title 347 0 R
+/A 344 0 R
+/Parent 342 0 R
+>>
+endobj
+342 0 obj
+<<
+/Title 343 0 R
+/A 340 0 R
+/Parent 322 0 R
+/Prev 326 0 R
+/First 346 0 R
+/Last 346 0 R
+/Count -1
+>>
+endobj
+338 0 obj
+<<
+/Title 339 0 R
+/A 336 0 R
+/Parent 326 0 R
+/Prev 334 0 R
+>>
+endobj
+334 0 obj
+<<
+/Title 335 0 R
+/A 332 0 R
+/Parent 326 0 R
+/Prev 330 0 R
+/Next 338 0 R
+>>
+endobj
+330 0 obj
+<<
+/Title 331 0 R
+/A 328 0 R
+/Parent 326 0 R
+/Next 334 0 R
+>>
+endobj
+326 0 obj
+<<
+/Title 327 0 R
+/A 324 0 R
+/Parent 322 0 R
+/Next 342 0 R
+/First 330 0 R
+/Last 338 0 R
+/Count -3
+>>
+endobj
+322 0 obj
+<<
+/Title 323 0 R
+/A 320 0 R
+/Parent 30 0 R
+/Prev 310 0 R
+/Next 350 0 R
+/First 326 0 R
+/Last 342 0 R
+/Count -2
+>>
+endobj
+318 0 obj
+<<
+/Title 319 0 R
+/A 316 0 R
+/Parent 314 0 R
+>>
+endobj
+314 0 obj
+<<
+/Title 315 0 R
+/A 312 0 R
+/Parent 310 0 R
+/First 318 0 R
+/Last 318 0 R
+/Count -1
+>>
+endobj
+310 0 obj
+<<
+/Title 311 0 R
+/A 308 0 R
+/Parent 30 0 R
+/Prev 282 0 R
+/Next 322 0 R
+/First 314 0 R
+/Last 314 0 R
+/Count -1
+>>
+endobj
+306 0 obj
+<<
+/Title 307 0 R
+/A 304 0 R
+/Parent 302 0 R
+>>
+endobj
+302 0 obj
+<<
+/Title 303 0 R
+/A 300 0 R
+/Parent 282 0 R
+/Prev 286 0 R
+/First 306 0 R
+/Last 306 0 R
+/Count -1
+>>
+endobj
+298 0 obj
+<<
+/Title 299 0 R
+/A 296 0 R
+/Parent 286 0 R
+/Prev 294 0 R
+>>
+endobj
+294 0 obj
+<<
+/Title 295 0 R
+/A 292 0 R
+/Parent 286 0 R
+/Prev 290 0 R
+/Next 298 0 R
+>>
+endobj
+290 0 obj
+<<
+/Title 291 0 R
+/A 288 0 R
+/Parent 286 0 R
+/Next 294 0 R
+>>
+endobj
+286 0 obj
+<<
+/Title 287 0 R
+/A 284 0 R
+/Parent 282 0 R
+/Next 302 0 R
+/First 290 0 R
+/Last 298 0 R
+/Count -3
+>>
+endobj
+282 0 obj
+<<
+/Title 283 0 R
+/A 280 0 R
+/Parent 30 0 R
+/Prev 278 0 R
+/Next 310 0 R
+/First 286 0 R
+/Last 302 0 R
+/Count -2
+>>
+endobj
+278 0 obj
+<<
+/Title 279 0 R
+/A 276 0 R
+/Parent 30 0 R
+/Prev 250 0 R
+/Next 282 0 R
+>>
+endobj
+274 0 obj
+<<
+/Title 275 0 R
+/A 272 0 R
+/Parent 270 0 R
+>>
+endobj
+270 0 obj
+<<
+/Title 271 0 R
+/A 268 0 R
+/Parent 250 0 R
+/Prev 254 0 R
+/First 274 0 R
+/Last 274 0 R
+/Count -1
+>>
+endobj
+266 0 obj
+<<
+/Title 267 0 R
+/A 264 0 R
+/Parent 254 0 R
+/Prev 262 0 R
+>>
+endobj
+262 0 obj
+<<
+/Title 263 0 R
+/A 260 0 R
+/Parent 254 0 R
+/Prev 258 0 R
+/Next 266 0 R
+>>
+endobj
+258 0 obj
+<<
+/Title 259 0 R
+/A 256 0 R
+/Parent 254 0 R
+/Next 262 0 R
+>>
+endobj
+254 0 obj
+<<
+/Title 255 0 R
+/A 252 0 R
+/Parent 250 0 R
+/Next 270 0 R
+/First 258 0 R
+/Last 266 0 R
+/Count -3
+>>
+endobj
+250 0 obj
+<<
+/Title 251 0 R
+/A 248 0 R
+/Parent 30 0 R
+/Prev 226 0 R
+/Next 278 0 R
+/First 254 0 R
+/Last 270 0 R
+/Count -2
+>>
+endobj
+246 0 obj
+<<
+/Title 247 0 R
+/A 244 0 R
+/Parent 242 0 R
+>>
+endobj
+242 0 obj
+<<
+/Title 243 0 R
+/A 240 0 R
+/Parent 226 0 R
+/Prev 230 0 R
+/First 246 0 R
+/Last 246 0 R
+/Count -1
+>>
+endobj
+238 0 obj
+<<
+/Title 239 0 R
+/A 236 0 R
+/Parent 230 0 R
+/Prev 234 0 R
+>>
+endobj
+234 0 obj
+<<
+/Title 235 0 R
+/A 232 0 R
+/Parent 230 0 R
+/Next 238 0 R
+>>
+endobj
+230 0 obj
+<<
+/Title 231 0 R
+/A 228 0 R
+/Parent 226 0 R
+/Next 242 0 R
+/First 234 0 R
+/Last 238 0 R
+/Count -2
+>>
+endobj
+226 0 obj
+<<
+/Title 227 0 R
+/A 224 0 R
+/Parent 30 0 R
+/Prev 202 0 R
+/Next 250 0 R
+/First 230 0 R
+/Last 242 0 R
+/Count -2
+>>
+endobj
+222 0 obj
+<<
+/Title 223 0 R
+/A 220 0 R
+/Parent 218 0 R
+>>
+endobj
+218 0 obj
+<<
+/Title 219 0 R
+/A 216 0 R
+/Parent 202 0 R
+/Prev 206 0 R
+/First 222 0 R
+/Last 222 0 R
+/Count -1
+>>
+endobj
+214 0 obj
+<<
+/Title 215 0 R
+/A 212 0 R
+/Parent 206 0 R
+/Prev 210 0 R
+>>
+endobj
+210 0 obj
+<<
+/Title 211 0 R
+/A 208 0 R
+/Parent 206 0 R
+/Next 214 0 R
+>>
+endobj
+206 0 obj
+<<
+/Title 207 0 R
+/A 204 0 R
+/Parent 202 0 R
+/Next 218 0 R
+/First 210 0 R
+/Last 214 0 R
+/Count -2
+>>
+endobj
+202 0 obj
+<<
+/Title 203 0 R
+/A 200 0 R
+/Parent 30 0 R
+/Prev 154 0 R
+/Next 226 0 R
+/First 206 0 R
+/Last 218 0 R
+/Count -2
+>>
+endobj
+198 0 obj
+<<
+/Title 199 0 R
+/A 196 0 R
+/Parent 154 0 R
+/Prev 194 0 R
+>>
+endobj
+194 0 obj
+<<
+/Title 195 0 R
+/A 192 0 R
+/Parent 154 0 R
+/Prev 174 0 R
+/Next 198 0 R
+>>
+endobj
+190 0 obj
+<<
+/Title 191 0 R
+/A 188 0 R
+/Parent 174 0 R
+/Prev 186 0 R
+>>
+endobj
+186 0 obj
+<<
+/Title 187 0 R
+/A 184 0 R
+/Parent 174 0 R
+/Prev 182 0 R
+/Next 190 0 R
+>>
+endobj
+182 0 obj
+<<
+/Title 183 0 R
+/A 180 0 R
+/Parent 174 0 R
+/Prev 178 0 R
+/Next 186 0 R
+>>
+endobj
+178 0 obj
+<<
+/Title 179 0 R
+/A 176 0 R
+/Parent 174 0 R
+/Next 182 0 R
+>>
+endobj
+174 0 obj
+<<
+/Title 175 0 R
+/A 172 0 R
+/Parent 154 0 R
+/Prev 158 0 R
+/Next 194 0 R
+/First 178 0 R
+/Last 190 0 R
+/Count -4
+>>
+endobj
+170 0 obj
+<<
+/Title 171 0 R
+/A 168 0 R
+/Parent 158 0 R
+/Prev 166 0 R
+>>
+endobj
+166 0 obj
+<<
+/Title 167 0 R
+/A 164 0 R
+/Parent 158 0 R
+/Prev 162 0 R
+/Next 170 0 R
+>>
+endobj
+162 0 obj
+<<
+/Title 163 0 R
+/A 160 0 R
+/Parent 158 0 R
+/Next 166 0 R
+>>
+endobj
+158 0 obj
+<<
+/Title 159 0 R
+/A 156 0 R
+/Parent 154 0 R
+/Next 174 0 R
+/First 162 0 R
+/Last 170 0 R
+/Count -3
+>>
+endobj
+154 0 obj
+<<
+/Title 155 0 R
+/A 152 0 R
+/Parent 30 0 R
+/Prev 130 0 R
+/Next 202 0 R
+/First 158 0 R
+/Last 198 0 R
+/Count -4
+>>
+endobj
+150 0 obj
+<<
+/Title 151 0 R
+/A 148 0 R
+/Parent 146 0 R
+>>
+endobj
+146 0 obj
+<<
+/Title 147 0 R
+/A 144 0 R
+/Parent 130 0 R
+/Prev 134 0 R
+/First 150 0 R
+/Last 150 0 R
+/Count -1
+>>
+endobj
+142 0 obj
+<<
+/Title 143 0 R
+/A 140 0 R
+/Parent 134 0 R
+/Prev 138 0 R
+>>
+endobj
+138 0 obj
+<<
+/Title 139 0 R
+/A 136 0 R
+/Parent 134 0 R
+/Next 142 0 R
+>>
+endobj
+134 0 obj
+<<
+/Title 135 0 R
+/A 132 0 R
+/Parent 130 0 R
+/Next 146 0 R
+/First 138 0 R
+/Last 142 0 R
+/Count -2
+>>
+endobj
+130 0 obj
+<<
+/Title 131 0 R
+/A 128 0 R
+/Parent 30 0 R
+/Prev 102 0 R
+/Next 154 0 R
+/First 134 0 R
+/Last 146 0 R
+/Count -2
+>>
+endobj
+126 0 obj
+<<
+/Title 127 0 R
+/A 124 0 R
+/Parent 122 0 R
+>>
+endobj
+122 0 obj
+<<
+/Title 123 0 R
+/A 120 0 R
+/Parent 102 0 R
+/Prev 106 0 R
+/First 126 0 R
+/Last 126 0 R
+/Count -1
+>>
+endobj
+118 0 obj
+<<
+/Title 119 0 R
+/A 116 0 R
+/Parent 106 0 R
+/Prev 114 0 R
+>>
+endobj
+114 0 obj
+<<
+/Title 115 0 R
+/A 112 0 R
+/Parent 106 0 R
+/Prev 110 0 R
+/Next 118 0 R
+>>
+endobj
+110 0 obj
+<<
+/Title 111 0 R
+/A 108 0 R
+/Parent 106 0 R
+/Next 114 0 R
+>>
+endobj
+106 0 obj
+<<
+/Title 107 0 R
+/A 104 0 R
+/Parent 102 0 R
+/Next 122 0 R
+/First 110 0 R
+/Last 118 0 R
+/Count -3
+>>
+endobj
+102 0 obj
+<<
+/Title 103 0 R
+/A 100 0 R
+/Parent 30 0 R
+/Prev 34 0 R
+/Next 130 0 R
+/First 106 0 R
+/Last 122 0 R
+/Count -2
+>>
+endobj
+98 0 obj
+<<
+/Title 99 0 R
+/A 96 0 R
+/Parent 34 0 R
+/Prev 94 0 R
+>>
+endobj
+94 0 obj
+<<
+/Title 95 0 R
+/A 92 0 R
+/Parent 34 0 R
+/Prev 90 0 R
+/Next 98 0 R
+>>
+endobj
+90 0 obj
+<<
+/Title 91 0 R
+/A 88 0 R
+/Parent 34 0 R
+/Prev 38 0 R
+/Next 94 0 R
+>>
+endobj
+86 0 obj
+<<
+/Title 87 0 R
+/A 84 0 R
+/Parent 38 0 R
+/Prev 82 0 R
+>>
+endobj
+82 0 obj
+<<
+/Title 83 0 R
+/A 80 0 R
+/Parent 38 0 R
+/Prev 78 0 R
+/Next 86 0 R
+>>
+endobj
+78 0 obj
+<<
+/Title 79 0 R
+/A 76 0 R
+/Parent 38 0 R
+/Prev 74 0 R
+/Next 82 0 R
+>>
+endobj
+74 0 obj
+<<
+/Title 75 0 R
+/A 72 0 R
+/Parent 38 0 R
+/Prev 70 0 R
+/Next 78 0 R
+>>
+endobj
+70 0 obj
+<<
+/Title 71 0 R
+/A 68 0 R
+/Parent 38 0 R
+/Prev 66 0 R
+/Next 74 0 R
+>>
+endobj
+66 0 obj
+<<
+/Title 67 0 R
+/A 64 0 R
+/Parent 38 0 R
+/Prev 62 0 R
+/Next 70 0 R
+>>
+endobj
+62 0 obj
+<<
+/Title 63 0 R
+/A 60 0 R
+/Parent 38 0 R
+/Prev 58 0 R
+/Next 66 0 R
+>>
+endobj
+58 0 obj
+<<
+/Title 59 0 R
+/A 56 0 R
+/Parent 38 0 R
+/Prev 54 0 R
+/Next 62 0 R
+>>
+endobj
+54 0 obj
+<<
+/Title 55 0 R
+/A 52 0 R
+/Parent 38 0 R
+/Prev 50 0 R
+/Next 58 0 R
+>>
+endobj
+50 0 obj
+<<
+/Title 51 0 R
+/A 48 0 R
+/Parent 38 0 R
+/Prev 46 0 R
+/Next 54 0 R
+>>
+endobj
+46 0 obj
+<<
+/Title 47 0 R
+/A 44 0 R
+/Parent 38 0 R
+/Prev 42 0 R
+/Next 50 0 R
+>>
+endobj
+42 0 obj
+<<
+/Title 43 0 R
+/A 40 0 R
+/Parent 38 0 R
+/Next 46 0 R
+>>
+endobj
+38 0 obj
+<<
+/Title 39 0 R
+/A 36 0 R
+/Parent 34 0 R
+/Next 90 0 R
+/First 42 0 R
+/Last 86 0 R
+/Count -12
+>>
+endobj
+34 0 obj
+<<
+/Title 35 0 R
+/A 32 0 R
+/Parent 30 0 R
+/Next 102 0 R
+/First 38 0 R
+/Last 98 0 R
+/Count -4
+>>
+endobj
+30 0 obj
+<<
+/Title 31 0 R
+/A 28 0 R
+/Parent 1246 0 R
+/Prev 6 0 R
+/Next 378 0 R
+/First 34 0 R
+/Last 354 0 R
+/Count -13
+>>
+endobj
+26 0 obj
+<<
+/Title 27 0 R
+/A 24 0 R
+/Parent 18 0 R
+/Prev 22 0 R
+>>
+endobj
+22 0 obj
+<<
+/Title 23 0 R
+/A 20 0 R
+/Parent 18 0 R
+/Next 26 0 R
+>>
+endobj
+18 0 obj
+<<
+/Title 19 0 R
+/A 16 0 R
+/Parent 6 0 R
+/Prev 14 0 R
+/First 22 0 R
+/Last 26 0 R
+/Count -2
+>>
+endobj
+14 0 obj
+<<
+/Title 15 0 R
+/A 12 0 R
+/Parent 6 0 R
+/Prev 10 0 R
+/Next 18 0 R
+>>
+endobj
+10 0 obj
+<<
+/Title 11 0 R
+/A 8 0 R
+/Parent 6 0 R
+/Next 14 0 R
+>>
+endobj
+6 0 obj
+<<
+/Title 7 0 R
+/A 4 0 R
+/Parent 1246 0 R
+/Next 30 0 R
+/First 10 0 R
+/Last 18 0 R
+/Count -3
+>>
+endobj
+1247 0 obj
+<<
+/Names [(Doc-Start) 437 0 R (Item.1) 815 0 R (Item.10) 824 0 R (Item.11) 825 0 R (Item.12) 826 0 R (Item.13) 827 0 R]
+/Limits [(Doc-Start) (Item.13)]
+>>
+endobj
+1248 0 obj
+<<
+/Names [(Item.14) 828 0 R (Item.15) 829 0 R (Item.16) 809 0 R (Item.17) 896 0 R (Item.18) 897 0 R (Item.19) 898 0 R]
+/Limits [(Item.14) (Item.19)]
+>>
+endobj
+1249 0 obj
+<<
+/Names [(Item.2) 816 0 R (Item.20) 899 0 R (Item.21) 900 0 R (Item.22) 901 0 R (Item.23) 902 0 R (Item.24) 903 0 R]
+/Limits [(Item.2) (Item.24)]
+>>
+endobj
+1250 0 obj
+<<
+/Names [(Item.25) 904 0 R (Item.26) 905 0 R (Item.27) 906 0 R (Item.28) 907 0 R (Item.29) 908 0 R (Item.3) 817 0 R]
+/Limits [(Item.25) (Item.3)]
+>>
+endobj
+1251 0 obj
+<<
+/Names [(Item.30) 909 0 R (Item.31) 910 0 R (Item.32) 891 0 R (Item.33) 945 0 R (Item.34) 946 0 R (Item.35) 947 0 R]
+/Limits [(Item.30) (Item.35)]
+>>
+endobj
+1252 0 obj
+<<
+/Names [(Item.36) 948 0 R (Item.37) 949 0 R (Item.38) 950 0 R (Item.39) 951 0 R (Item.4) 818 0 R (Item.40) 952 0 R]
+/Limits [(Item.36) (Item.40)]
+>>
+endobj
+1253 0 obj
+<<
+/Names [(Item.41) 953 0 R (Item.42) 954 0 R (Item.43) 955 0 R (Item.44) 940 0 R (Item.45) 1137 0 R (Item.46) 1138 0 R]
+/Limits [(Item.41) (Item.46)]
+>>
+endobj
+1254 0 obj
+<<
+/Names [(Item.47) 1139 0 R (Item.48) 1140 0 R (Item.49) 1141 0 R (Item.5) 819 0 R (Item.50) 1142 0 R (Item.51) 1143 0 R]
+/Limits [(Item.47) (Item.51)]
+>>
+endobj
+1255 0 obj
+<<
+/Names [(Item.52) 1144 0 R (Item.53) 1145 0 R (Item.54) 1146 0 R (Item.55) 1147 0 R (Item.56) 1131 0 R (Item.6) 820 0 R]
+/Limits [(Item.52) (Item.6)]
+>>
+endobj
+1256 0 obj
+<<
+/Names [(Item.7) 821 0 R (Item.8) 822 0 R (Item.9) 823 0 R (figure.caption.1) 592 0 R (figure.caption.10) 631 0 R (figure.caption.12) 637 0 R]
+/Limits [(Item.7) (figure.caption.12)]
+>>
+endobj
+1257 0 obj
+<<
+/Names [(figure.caption.13) 643 0 R (figure.caption.14) 685 0 R (figure.caption.17) 804 0 R (figure.caption.18) 805 0 R (figure.caption.19) 806 0 R (figure.caption.20) 807 0 R]
+/Limits [(figure.caption.13) (figure.caption.20)]
+>>
+endobj
+1258 0 obj
+<<
+/Names [(figure.caption.21) 845 0 R (figure.caption.22) 846 0 R (figure.caption.23) 808 0 R (figure.caption.24) 938 0 R (figure.caption.25) 1013 0 R (figure.caption.27) 1021 0 R]
+/Limits [(figure.caption.21) (figure.caption.27)]
+>>
+endobj
+1259 0 obj
+<<
+/Names [(figure.caption.28) 1054 0 R (figure.caption.3) 608 0 R (figure.caption.31) 1099 0 R (figure.caption.34) 1130 0 R (figure.caption.35) 1152 0 R (figure.caption.36) 1159 0 R]
+/Limits [(figure.caption.28) (figure.caption.36)]
+>>
+endobj
+1260 0 obj
+<<
+/Names [(figure.caption.37) 1169 0 R (figure.caption.39) 468 0 R (figure.caption.5) 615 0 R (figure.caption.6) 621 0 R (figure.caption.7) 622 0 R (figure.caption.8) 623 0 R]
+/Limits [(figure.caption.37) (figure.caption.8)]
+>>
+endobj
+1261 0 obj
+<<
+/Names [(figure.caption.9) 630 0 R (page.1) 436 0 R (page.10) 620 0 R (page.100) 1158 0 R (page.101) 1168 0 R (page.102) 1174 0 R]
+/Limits [(figure.caption.9) (page.102)]
+>>
+endobj
+1262 0 obj
+<<
+/Names [(page.103) 1178 0 R (page.104) 1184 0 R (page.105) 1192 0 R (page.106) 1197 0 R (page.107) 1201 0 R (page.108) 1206 0 R]
+/Limits [(page.103) (page.108)]
+>>
+endobj
+1263 0 obj
+<<
+/Names [(page.11) 629 0 R (page.12) 636 0 R (page.13) 642 0 R (page.14) 649 0 R (page.15) 654 0 R (page.16) 658 0 R]
+/Limits [(page.11) (page.16)]
+>>
+endobj
+1264 0 obj
+<<
+/Names [(page.17) 662 0 R (page.18) 666 0 R (page.19) 671 0 R (page.2) 446 0 R (page.20) 676 0 R (page.21) 683 0 R]
+/Limits [(page.17) (page.21)]
+>>
+endobj
+1265 0 obj
+<<
+/Names [(page.22) 690 0 R (page.23) 696 0 R (page.24) 701 0 R (page.25) 707 0 R (page.26) 713 0 R (page.27) 717 0 R]
+/Limits [(page.22) (page.27)]
+>>
+endobj
+1266 0 obj
+<<
+/Names [(page.28) 721 0 R (page.29) 725 0 R (page.3) 465 0 R (page.30) 729 0 R (page.31) 733 0 R (page.32) 738 0 R]
+/Limits [(page.28) (page.32)]
+>>
+endobj
+1267 0 obj
+<<
+/Names [(page.33) 742 0 R (page.34) 746 0 R (page.35) 750 0 R (page.36) 755 0 R (page.37) 759 0 R (page.38) 764 0 R]
+/Limits [(page.33) (page.38)]
+>>
+endobj
+1268 0 obj
+<<
+/Names [(page.39) 768 0 R (page.4) 532 0 R (page.40) 772 0 R (page.41) 776 0 R (page.42) 780 0 R (page.43) 785 0 R]
+/Limits [(page.39) (page.43)]
+>>
+endobj
+1269 0 obj
+<<
+/Names [(page.44) 790 0 R (page.45) 795 0 R (page.46) 803 0 R (page.47) 813 0 R (page.48) 834 0 R (page.49) 839 0 R]
+/Limits [(page.44) (page.49)]
+>>
+endobj
+1270 0 obj
+<<
+/Names [(page.5) 583 0 R (page.50) 844 0 R (page.51) 851 0 R (page.52) 856 0 R (page.53) 860 0 R (page.54) 864 0 R]
+/Limits [(page.5) (page.54)]
+>>
+endobj
+1271 0 obj
+<<
+/Names [(page.55) 868 0 R (page.56) 873 0 R (page.57) 877 0 R (page.58) 881 0 R (page.59) 889 0 R (page.6) 590 0 R]
+/Limits [(page.55) (page.6)]
+>>
+endobj
+1272 0 obj
+<<
+/Names [(page.60) 895 0 R (page.61) 914 0 R (page.62) 920 0 R (page.63) 925 0 R (page.64) 929 0 R (page.65) 937 0 R]
+/Limits [(page.60) (page.65)]
+>>
+endobj
+1273 0 obj
+<<
+/Names [(page.66) 944 0 R (page.67) 959 0 R (page.68) 965 0 R (page.69) 970 0 R (page.7) 599 0 R (page.70) 974 0 R]
+/Limits [(page.66) (page.70)]
+>>
+endobj
+1274 0 obj
+<<
+/Names [(page.71) 978 0 R (page.72) 982 0 R (page.73) 986 0 R (page.74) 991 0 R (page.75) 995 0 R (page.76) 1000 0 R]
+/Limits [(page.71) (page.76)]
+>>
+endobj
+1275 0 obj
+<<
+/Names [(page.77) 1004 0 R (page.78) 1012 0 R (page.79) 1019 0 R (page.8) 607 0 R (page.80) 1027 0 R (page.81) 1032 0 R]
+/Limits [(page.77) (page.81)]
+>>
+endobj
+1276 0 obj
+<<
+/Names [(page.82) 1036 0 R (page.83) 1041 0 R (page.84) 1045 0 R (page.85) 1053 0 R (page.86) 1062 0 R (page.87) 1068 0 R]
+/Limits [(page.82) (page.87)]
+>>
+endobj
+1277 0 obj
+<<
+/Names [(page.88) 1073 0 R (page.89) 1078 0 R (page.9) 613 0 R (page.90) 1082 0 R (page.91) 1086 0 R (page.92) 1097 0 R]
+/Limits [(page.88) (page.92)]
+>>
+endobj
+1278 0 obj
+<<
+/Names [(page.93) 1105 0 R (page.94) 1111 0 R (page.95) 1116 0 R (page.96) 1120 0 R (page.97) 1127 0 R (page.98) 1135 0 R]
+/Limits [(page.93) (page.98)]
+>>
+endobj
+1279 0 obj
+<<
+/Names [(page.99) 1151 0 R (paragraph.2.1.1.1) 41 0 R (paragraph.2.1.1.10) 77 0 R (paragraph.2.1.1.11) 81 0 R (paragraph.2.1.1.12) 85 0 R (paragraph.2.1.1.2) 45 0 R]
+/Limits [(page.99) (paragraph.2.1.1.2)]
+>>
+endobj
+1280 0 obj
+<<
+/Names [(paragraph.2.1.1.3) 49 0 R (paragraph.2.1.1.4) 53 0 R (paragraph.2.1.1.5) 57 0 R (paragraph.2.1.1.6) 61 0 R (paragraph.2.1.1.7) 65 0 R (paragraph.2.1.1.8) 69 0 R]
+/Limits [(paragraph.2.1.1.3) (paragraph.2.1.1.8)]
+>>
+endobj
+1281 0 obj
+<<
+/Names [(paragraph.2.1.1.9) 73 0 R (paragraph.2.10.1.1) 317 0 R (paragraph.2.11.1.1) 329 0 R (paragraph.2.11.1.2) 333 0 R (paragraph.2.11.1.3) 337 0 R (paragraph.2.11.2.1) 345 0 R]
+/Limits [(paragraph.2.1.1.9) (paragraph.2.11.2.1)]
+>>
+endobj
+1282 0 obj
+<<
+/Names [(paragraph.2.13.1.1) 361 0 R (paragraph.2.13.1.2) 365 0 R (paragraph.2.13.2.1) 373 0 R (paragraph.2.2.1.1) 109 0 R (paragraph.2.2.1.2) 113 0 R (paragraph.2.2.1.3) 117 0 R]
+/Limits [(paragraph.2.13.1.1) (paragraph.2.2.1.3)]
+>>
+endobj
+1283 0 obj
+<<
+/Names [(paragraph.2.2.2.1) 125 0 R (paragraph.2.3.1.1) 137 0 R (paragraph.2.3.1.2) 141 0 R (paragraph.2.3.2.1) 149 0 R (paragraph.2.4.1.1) 161 0 R (paragraph.2.4.1.2) 165 0 R]
+/Limits [(paragraph.2.2.2.1) (paragraph.2.4.1.2)]
+>>
+endobj
+1284 0 obj
+<<
+/Names [(paragraph.2.4.1.3) 169 0 R (paragraph.2.4.2.1) 177 0 R (paragraph.2.4.2.2) 181 0 R (paragraph.2.4.2.3) 185 0 R (paragraph.2.4.2.4) 189 0 R (paragraph.2.5.1.1) 209 0 R]
+/Limits [(paragraph.2.4.1.3) (paragraph.2.5.1.1)]
+>>
+endobj
+1285 0 obj
+<<
+/Names [(paragraph.2.5.1.2) 213 0 R (paragraph.2.5.2.1) 221 0 R (paragraph.2.6.1.1) 233 0 R (paragraph.2.6.1.2) 237 0 R (paragraph.2.6.2.1) 245 0 R (paragraph.2.7.1.1) 257 0 R]
+/Limits [(paragraph.2.5.1.2) (paragraph.2.7.1.1)]
+>>
+endobj
+1286 0 obj
+<<
+/Names [(paragraph.2.7.1.2) 261 0 R (paragraph.2.7.1.3) 265 0 R (paragraph.2.7.2.1) 273 0 R (paragraph.2.9.1.1) 289 0 R (paragraph.2.9.1.2) 293 0 R (paragraph.2.9.1.3) 297 0 R]
+/Limits [(paragraph.2.7.1.2) (paragraph.2.9.1.3)]
+>>
+endobj
+1287 0 obj
+<<
+/Names [(paragraph.2.9.2.1) 305 0 R (section.1) 5 0 R (section.2) 29 0 R (section.3) 377 0 R (section.4) 417 0 R (section.5) 429 0 R]
+/Limits [(paragraph.2.9.2.1) (section.5)]
+>>
+endobj
+1288 0 obj
+<<
+/Names [(subsection.1.1) 9 0 R (subsection.1.2) 13 0 R (subsection.1.3) 17 0 R (subsection.2.1) 33 0 R (subsection.2.10) 309 0 R (subsection.2.11) 321 0 R]
+/Limits [(subsection.1.1) (subsection.2.11)]
+>>
+endobj
+1289 0 obj
+<<
+/Names [(subsection.2.12) 349 0 R (subsection.2.13) 353 0 R (subsection.2.2) 101 0 R (subsection.2.3) 129 0 R (subsection.2.4) 153 0 R (subsection.2.5) 201 0 R]
+/Limits [(subsection.2.12) (subsection.2.5)]
+>>
+endobj
+1290 0 obj
+<<
+/Names [(subsection.2.6) 225 0 R (subsection.2.7) 249 0 R (subsection.2.8) 277 0 R (subsection.2.9) 281 0 R (subsection.3.1) 381 0 R (subsection.3.2) 385 0 R]
+/Limits [(subsection.2.6) (subsection.3.2)]
+>>
+endobj
+1291 0 obj
+<<
+/Names [(subsection.3.3) 389 0 R (subsection.3.4) 393 0 R (subsection.3.5) 397 0 R (subsection.3.6) 401 0 R (subsection.4.1) 421 0 R (subsection.4.2) 425 0 R]
+/Limits [(subsection.3.3) (subsection.4.2)]
+>>
+endobj
+1292 0 obj
+<<
+/Names [(subsubsection.1.3.1) 21 0 R (subsubsection.1.3.2) 25 0 R (subsubsection.2.1.1) 37 0 R (subsubsection.2.1.2) 89 0 R (subsubsection.2.1.3) 93 0 R (subsubsection.2.1.4) 97 0 R]
+/Limits [(subsubsection.1.3.1) (subsubsection.2.1.4)]
+>>
+endobj
+1293 0 obj
+<<
+/Names [(subsubsection.2.10.1) 313 0 R (subsubsection.2.11.1) 325 0 R (subsubsection.2.11.2) 341 0 R (subsubsection.2.13.1) 357 0 R (subsubsection.2.13.2) 369 0 R (subsubsection.2.2.1) 105 0 R]
+/Limits [(subsubsection.2.10.1) (subsubsection.2.2.1)]
+>>
+endobj
+1294 0 obj
+<<
+/Names [(subsubsection.2.2.2) 121 0 R (subsubsection.2.3.1) 133 0 R (subsubsection.2.3.2) 145 0 R (subsubsection.2.4.1) 157 0 R (subsubsection.2.4.2) 173 0 R (subsubsection.2.4.3) 193 0 R]
+/Limits [(subsubsection.2.2.2) (subsubsection.2.4.3)]
+>>
+endobj
+1295 0 obj
+<<
+/Names [(subsubsection.2.4.4) 197 0 R (subsubsection.2.5.1) 205 0 R (subsubsection.2.5.2) 217 0 R (subsubsection.2.6.1) 229 0 R (subsubsection.2.6.2) 241 0 R (subsubsection.2.7.1) 253 0 R]
+/Limits [(subsubsection.2.4.4) (subsubsection.2.7.1)]
+>>
+endobj
+1296 0 obj
+<<
+/Names [(subsubsection.2.7.2) 269 0 R (subsubsection.2.9.1) 285 0 R (subsubsection.2.9.2) 301 0 R (subsubsection.3.6.1) 405 0 R (subsubsection.3.6.2) 409 0 R (subsubsection.3.6.3) 413 0 R]
+/Limits [(subsubsection.2.7.2) (subsubsection.3.6.3)]
+>>
+endobj
+1297 0 obj
+<<
+/Names [(table.1) 448 0 R (table.10) 697 0 R (table.11) 702 0 R (table.12) 708 0 R (table.13) 751 0 R (table.14) 781 0 R]
+/Limits [(table.1) (table.14)]
+>>
+endobj
+1298 0 obj
+<<
+/Names [(table.16) 814 0 R (table.17) 835 0 R (table.18) 852 0 R (table.19) 882 0 R (table.20) 890 0 R (table.21) 921 0 R]
+/Limits [(table.16) (table.21)]
+>>
+endobj
+1299 0 obj
+<<
+/Names [(table.22) 930 0 R (table.23) 939 0 R (table.24) 966 0 R (table.25) 996 0 R (table.26) 1005 0 R (table.27) 1020 0 R]
+/Limits [(table.22) (table.27)]
+>>
+endobj
+1300 0 obj
+<<
+/Names [(table.29) 1028 0 R (table.30) 1037 0 R (table.31) 1046 0 R (table.32) 1063 0 R (table.35) 1074 0 R (table.36) 1087 0 R]
+/Limits [(table.29) (table.36)]
+>>
+endobj
+1301 0 obj
+<<
+/Names [(table.37) 1098 0 R (table.38) 1101 0 R (table.41) 1112 0 R (table.42) 1128 0 R (table.43) 1136 0 R (table.44) 1170 0 R]
+/Limits [(table.37) (table.44)]
+>>
+endobj
+1302 0 obj
+<<
+/Names [(table.5) 650 0 R (table.6) 667 0 R (table.7) 684 0 R (table.8) 691 0 R (table.caption.11) 632 0 R (table.caption.15) 686 0 R]
+/Limits [(table.5) (table.caption.15)]
+>>
+endobj
+1303 0 obj
+<<
+/Names [(table.caption.16) 796 0 R (table.caption.2) 602 0 R (table.caption.26) 1014 0 R (table.caption.29) 1056 0 R (table.caption.30) 1064 0 R (table.caption.32) 1100 0 R]
+/Limits [(table.caption.16) (table.caption.32)]
+>>
+endobj
+1304 0 obj
+<<
+/Names [(table.caption.33) 1106 0 R (table.caption.38) 1179 0 R (table.caption.4) 614 0 R]
+/Limits [(table.caption.33) (table.caption.4)]
+>>
+endobj
+1305 0 obj
+<<
+/Kids [1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R]
+/Limits [(Doc-Start) (Item.40)]
+>>
+endobj
+1306 0 obj
+<<
+/Kids [1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R]
+/Limits [(Item.41) (figure.caption.27)]
+>>
+endobj
+1307 0 obj
+<<
+/Kids [1259 0 R 1260 0 R 1261 0 R 1262 0 R 1263 0 R 1264 0 R]
+/Limits [(figure.caption.28) (page.21)]
+>>
+endobj
+1308 0 obj
+<<
+/Kids [1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R]
+/Limits [(page.22) (page.54)]
+>>
+endobj
+1309 0 obj
+<<
+/Kids [1271 0 R 1272 0 R 1273 0 R 1274 0 R 1275 0 R 1276 0 R]
+/Limits [(page.55) (page.87)]
+>>
+endobj
+1310 0 obj
+<<
+/Kids [1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R]
+/Limits [(page.88) (paragraph.2.2.1.3)]
+>>
+endobj
+1311 0 obj
+<<
+/Kids [1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R]
+/Limits [(paragraph.2.2.2.1) (subsection.2.11)]
+>>
+endobj
+1312 0 obj
+<<
+/Kids [1289 0 R 1290 0 R 1291 0 R 1292 0 R 1293 0 R 1294 0 R]
+/Limits [(subsection.2.12) (subsubsection.2.4.3)]
+>>
+endobj
+1313 0 obj
+<<
+/Kids [1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R]
+/Limits [(subsubsection.2.4.4) (table.36)]
+>>
+endobj
+1314 0 obj
+<<
+/Kids [1301 0 R 1302 0 R 1303 0 R 1304 0 R]
+/Limits [(table.37) (table.caption.4)]
+>>
+endobj
+1315 0 obj
+<<
+/Kids [1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R]
+/Limits [(Doc-Start) (paragraph.2.2.1.3)]
+>>
+endobj
+1316 0 obj
+<<
+/Kids [1311 0 R 1312 0 R 1313 0 R 1314 0 R]
+/Limits [(paragraph.2.2.2.1) (table.caption.4)]
+>>
+endobj
+1317 0 obj
+<<
+/Kids [1315 0 R 1316 0 R]
+/Limits [(Doc-Start) (table.caption.4)]
+>>
+endobj
+1318 0 obj
+<<
+/Dests 1317 0 R
+>>
+endobj
+1319 0 obj
+<<
+/Type /Catalog
+/Pages 1245 0 R
+/Outlines 1246 0 R
+/Names 1318 0 R
+/PageMode/UseOutlines
+/OpenAction 432 0 R
+>>
+endobj
+1320 0 obj
+<<
+/Author()/Title()/Subject()/Creator(LaTeX with hyperref)/Producer(pdfTeX-1.40.19)/Keywords()
+/CreationDate (D:20190705222139+01'00')
+/ModDate (D:20190705222139+01'00')
+/Trapped /False
+/PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.6870 (1.40.19))
+>>
+endobj
+xref
+0 1321
+0000001187 65535 f
+0000927148 00000 n
+0000927168 00000 n
+0000927188 00000 n
+0000000015 00000 n
+0000045816 00000 n
+0001038418 00000 n
+0000000060 00000 n
+0000000090 00000 n
+0000045875 00000 n
+0001038346 00000 n
+0000000140 00000 n
+0000000174 00000 n
+0000045934 00000 n
+0001038260 00000 n
+0000000225 00000 n
+0000000264 00000 n
+0000045994 00000 n
+0001038150 00000 n
+0000000315 00000 n
+0000000347 00000 n
+0000046053 00000 n
+0001038076 00000 n
+0000000403 00000 n
+0000000437 00000 n
+0000046113 00000 n
+0001038002 00000 n
+0000000493 00000 n
+0000000531 00000 n
+0000049959 00000 n
+0001037874 00000 n
+0000000577 00000 n
+0000000611 00000 n
+0000050019 00000 n
+0001037762 00000 n
+0000000662 00000 n
+0000000706 00000 n
+0000050079 00000 n
+0001037650 00000 n
+0000000762 00000 n
+0000000792 00000 n
+0000055056 00000 n
+0001037576 00000 n
+0000000846 00000 n
+0000000869 00000 n
+0000055116 00000 n
+0001037489 00000 n
+0000000923 00000 n
+0000000947 00000 n
+0000055176 00000 n
+0001037402 00000 n
+0000001001 00000 n
+0000001025 00000 n
+0000055236 00000 n
+0001037315 00000 n
+0000001079 00000 n
+0000001110 00000 n
+0000055356 00000 n
+0001037228 00000 n
+0000001164 00000 n
+0000001190 00000 n
+0000059338 00000 n
+0001037141 00000 n
+0000001244 00000 n
+0000001273 00000 n
+0000059458 00000 n
+0001037054 00000 n
+0000001327 00000 n
+0000001351 00000 n
+0000063557 00000 n
+0001036967 00000 n
+0000001405 00000 n
+0000001432 00000 n
+0000063678 00000 n
+0001036880 00000 n
+0000001486 00000 n
+0000001531 00000 n
+0000063799 00000 n
+0001036793 00000 n
+0000001586 00000 n
+0000001635 00000 n
+0000067192 00000 n
+0001036706 00000 n
+0000001690 00000 n
+0000001737 00000 n
+0000067313 00000 n
+0001036632 00000 n
+0000001792 00000 n
+0000001837 00000 n
+0000070574 00000 n
+0001036545 00000 n
+0000001893 00000 n
+0000001923 00000 n
+0000070634 00000 n
+0001036458 00000 n
+0000001979 00000 n
+0000002014 00000 n
+0000070694 00000 n
+0001036384 00000 n
+0000002070 00000 n
+0000002097 00000 n
+0000077429 00000 n
+0001036254 00000 n
+0000002149 00000 n
+0000002191 00000 n
+0000077490 00000 n
+0001036136 00000 n
+0000002248 00000 n
+0000002287 00000 n
+0000077551 00000 n
+0001036057 00000 n
+0000002342 00000 n
+0000002366 00000 n
+0000090716 00000 n
+0001035964 00000 n
+0000002421 00000 n
+0000002446 00000 n
+0000100397 00000 n
+0001035885 00000 n
+0000002501 00000 n
+0000002526 00000 n
+0000100519 00000 n
+0001035767 00000 n
+0000002583 00000 n
+0000002613 00000 n
+0000100580 00000 n
+0001035702 00000 n
+0000002668 00000 n
+0000002699 00000 n
+0000106473 00000 n
+0001035571 00000 n
+0000002751 00000 n
+0000002801 00000 n
+0000106534 00000 n
+0001035453 00000 n
+0000002858 00000 n
+0000002887 00000 n
+0000106595 00000 n
+0001035374 00000 n
+0000002942 00000 n
+0000002966 00000 n
+0000109515 00000 n
+0001035295 00000 n
+0000003021 00000 n
+0000003046 00000 n
+0000109637 00000 n
+0001035177 00000 n
+0000003103 00000 n
+0000003133 00000 n
+0000109698 00000 n
+0001035112 00000 n
+0000003188 00000 n
+0000003219 00000 n
+0000113779 00000 n
+0001034981 00000 n
+0000003271 00000 n
+0000003315 00000 n
+0000113840 00000 n
+0001034863 00000 n
+0000003372 00000 n
+0000003411 00000 n
+0000113901 00000 n
+0001034784 00000 n
+0000003466 00000 n
+0000003490 00000 n
+0000148538 00000 n
+0001034691 00000 n
+0000003545 00000 n
+0000003570 00000 n
+0000172162 00000 n
+0001034612 00000 n
+0000003625 00000 n
+0000003650 00000 n
+0000182962 00000 n
+0001034480 00000 n
+0000003707 00000 n
+0000003737 00000 n
+0000183023 00000 n
+0001034401 00000 n
+0000003792 00000 n
+0000003819 00000 n
+0000187318 00000 n
+0001034308 00000 n
+0000003874 00000 n
+0000003904 00000 n
+0000187439 00000 n
+0001034215 00000 n
+0000003959 00000 n
+0000003985 00000 n
+0000187560 00000 n
+0001034136 00000 n
+0000004040 00000 n
+0000004071 00000 n
+0000195299 00000 n
+0001034043 00000 n
+0000004128 00000 n
+0000004160 00000 n
+0000200686 00000 n
+0001033964 00000 n
+0000004217 00000 n
+0000004254 00000 n
+0000203923 00000 n
+0001033833 00000 n
+0000004306 00000 n
+0000004360 00000 n
+0000203984 00000 n
+0001033715 00000 n
+0000004417 00000 n
+0000004456 00000 n
+0000204044 00000 n
+0001033636 00000 n
+0000004511 00000 n
+0000004535 00000 n
+0000223908 00000 n
+0001033557 00000 n
+0000004590 00000 n
+0000004618 00000 n
+0000228145 00000 n
+0001033439 00000 n
+0000004675 00000 n
+0000004705 00000 n
+0000228206 00000 n
+0001033374 00000 n
+0000004760 00000 n
+0000004791 00000 n
+0000237347 00000 n
+0001033243 00000 n
+0000004843 00000 n
+0000004903 00000 n
+0000237408 00000 n
+0001033125 00000 n
+0000004960 00000 n
+0000004999 00000 n
+0000237469 00000 n
+0001033046 00000 n
+0000005054 00000 n
+0000005078 00000 n
+0000244625 00000 n
+0001032967 00000 n
+0000005133 00000 n
+0000005158 00000 n
+0000248707 00000 n
+0001032849 00000 n
+0000005215 00000 n
+0000005245 00000 n
+0000248768 00000 n
+0001032784 00000 n
+0000005300 00000 n
+0000005331 00000 n
+0000256296 00000 n
+0001032653 00000 n
+0000005383 00000 n
+0000005440 00000 n
+0000256357 00000 n
+0001032535 00000 n
+0000005497 00000 n
+0000005536 00000 n
+0000256418 00000 n
+0001032456 00000 n
+0000005591 00000 n
+0000005615 00000 n
+0000280060 00000 n
+0001032363 00000 n
+0000005670 00000 n
+0000005695 00000 n
+0000285634 00000 n
+0001032284 00000 n
+0000005750 00000 n
+0000005775 00000 n
+0000288814 00000 n
+0001032166 00000 n
+0000005832 00000 n
+0000005862 00000 n
+0000288876 00000 n
+0001032101 00000 n
+0000005917 00000 n
+0000005948 00000 n
+0000292106 00000 n
+0001032009 00000 n
+0000006000 00000 n
+0000006048 00000 n
+0000296253 00000 n
+0001031878 00000 n
+0000006100 00000 n
+0000006163 00000 n
+0000296315 00000 n
+0001031760 00000 n
+0000006220 00000 n
+0000006259 00000 n
+0000296377 00000 n
+0001031681 00000 n
+0000006314 00000 n
+0000006338 00000 n
+0000304420 00000 n
+0001031588 00000 n
+0000006393 00000 n
+0000006418 00000 n
+0000310414 00000 n
+0001031509 00000 n
+0000006473 00000 n
+0000006498 00000 n
+0000313747 00000 n
+0001031391 00000 n
+0000006555 00000 n
+0000006585 00000 n
+0000313809 00000 n
+0001031326 00000 n
+0000006640 00000 n
+0000006671 00000 n
+0000317356 00000 n
+0001031195 00000 n
+0000006724 00000 n
+0000006772 00000 n
+0000320942 00000 n
+0001031091 00000 n
+0000006830 00000 n
+0000006860 00000 n
+0000321004 00000 n
+0001031026 00000 n
+0000006916 00000 n
+0000006947 00000 n
+0000325702 00000 n
+0001030895 00000 n
+0000007000 00000 n
+0000007046 00000 n
+0000325764 00000 n
+0001030777 00000 n
+0000007104 00000 n
+0000007143 00000 n
+0000325826 00000 n
+0001030698 00000 n
+0000007199 00000 n
+0000007223 00000 n
+0000336003 00000 n
+0001030605 00000 n
+0000007279 00000 n
+0000007304 00000 n
+0000341032 00000 n
+0001030526 00000 n
+0000007360 00000 n
+0000007385 00000 n
+0000341157 00000 n
+0001030408 00000 n
+0000007443 00000 n
+0000007473 00000 n
+0000341219 00000 n
+0001030343 00000 n
+0000007529 00000 n
+0000007560 00000 n
+0000343647 00000 n
+0001030251 00000 n
+0000007613 00000 n
+0000007667 00000 n
+0000348453 00000 n
+0001030134 00000 n
+0000007720 00000 n
+0000007772 00000 n
+0000348515 00000 n
+0001030016 00000 n
+0000007830 00000 n
+0000007869 00000 n
+0000348577 00000 n
+0001029937 00000 n
+0000007925 00000 n
+0000007949 00000 n
+0000358795 00000 n
+0001029858 00000 n
+0000008005 00000 n
+0000008030 00000 n
+0000358920 00000 n
+0001029740 00000 n
+0000008088 00000 n
+0000008118 00000 n
+0000358982 00000 n
+0001029675 00000 n
+0000008174 00000 n
+0000008205 00000 n
+0000366495 00000 n
+0001029543 00000 n
+0000008252 00000 n
+0000008298 00000 n
+0000366557 00000 n
+0001029464 00000 n
+0000008350 00000 n
+0000008410 00000 n
+0000371247 00000 n
+0001029371 00000 n
+0000008462 00000 n
+0000008496 00000 n
+0000371372 00000 n
+0001029278 00000 n
+0000008548 00000 n
+0000008582 00000 n
+0000371434 00000 n
+0001029185 00000 n
+0000008634 00000 n
+0000008670 00000 n
+0000371496 00000 n
+0001029092 00000 n
+0000008722 00000 n
+0000008750 00000 n
+0000377081 00000 n
+0001028974 00000 n
+0000008802 00000 n
+0000008856 00000 n
+0000377143 00000 n
+0001028895 00000 n
+0000008913 00000 n
+0000008947 00000 n
+0000377267 00000 n
+0001028802 00000 n
+0000009004 00000 n
+0000009038 00000 n
+0000384237 00000 n
+0001028723 00000 n
+0000009095 00000 n
+0000009128 00000 n
+0000385958 00000 n
+0001028590 00000 n
+0000009175 00000 n
+0000009203 00000 n
+0000386019 00000 n
+0001028511 00000 n
+0000009255 00000 n
+0000009286 00000 n
+0000923003 00000 n
+0001028432 00000 n
+0000009338 00000 n
+0000009385 00000 n
+0000926934 00000 n
+0001028352 00000 n
+0000009432 00000 n
+0000009468 00000 n
+0000014944 00000 n
+0000015185 00000 n
+0000009518 00000 n
+0000015063 00000 n
+0000015124 00000 n
+0001024115 00000 n
+0001025344 00000 n
+0001025518 00000 n
+0001024288 00000 n
+0001025667 00000 n
+0000016048 00000 n
+0000015807 00000 n
+0000015348 00000 n
+0000015926 00000 n
+0001023944 00000 n
+0000015987 00000 n
+0001024988 00000 n
+0000017404 00000 n
+0000017590 00000 n
+0000017777 00000 n
+0000017963 00000 n
+0000018149 00000 n
+0000018359 00000 n
+0000018554 00000 n
+0000018749 00000 n
+0000018907 00000 n
+0000019120 00000 n
+0000019315 00000 n
+0000019510 00000 n
+0000019766 00000 n
+0000017177 00000 n
+0000016198 00000 n
+0000019705 00000 n
+0000929145 00000 n
+0001024634 00000 n
+0000923065 00000 n
+0000022205 00000 n
+0000022355 00000 n
+0000022510 00000 n
+0000022664 00000 n
+0000022818 00000 n
+0000022979 00000 n
+0000023140 00000 n
+0000023290 00000 n
+0000023444 00000 n
+0000023605 00000 n
+0000023764 00000 n
+0000023923 00000 n
+0000024083 00000 n
+0000024243 00000 n
+0000024403 00000 n
+0000024561 00000 n
+0000024721 00000 n
+0000024881 00000 n
+0000025041 00000 n
+0000025202 00000 n
+0000025362 00000 n
+0000025523 00000 n
+0000025684 00000 n
+0000025845 00000 n
+0000026006 00000 n
+0000026161 00000 n
+0000026321 00000 n
+0000026481 00000 n
+0000026641 00000 n
+0000026801 00000 n
+0000026961 00000 n
+0000027121 00000 n
+0000027276 00000 n
+0000027437 00000 n
+0000027596 00000 n
+0000027756 00000 n
+0000027917 00000 n
+0000028076 00000 n
+0000028230 00000 n
+0000028390 00000 n
+0000028550 00000 n
+0000028710 00000 n
+0000028870 00000 n
+0000029031 00000 n
+0000029191 00000 n
+0000029351 00000 n
+0000029511 00000 n
+0000029671 00000 n
+0000029832 00000 n
+0000029993 00000 n
+0000030145 00000 n
+0000030306 00000 n
+0000030466 00000 n
+0000030625 00000 n
+0000030786 00000 n
+0000030946 00000 n
+0000031100 00000 n
+0000031258 00000 n
+0000031416 00000 n
+0000033774 00000 n
+0000031635 00000 n
+0000021602 00000 n
+0000019943 00000 n
+0000031574 00000 n
+0000033935 00000 n
+0000034094 00000 n
+0000034249 00000 n
+0000034409 00000 n
+0000034569 00000 n
+0000034729 00000 n
+0000034889 00000 n
+0000035050 00000 n
+0000035210 00000 n
+0000035365 00000 n
+0000035519 00000 n
+0000035680 00000 n
+0000035840 00000 n
+0000035998 00000 n
+0000036158 00000 n
+0000036315 00000 n
+0000036475 00000 n
+0000036631 00000 n
+0000036793 00000 n
+0000036953 00000 n
+0000037109 00000 n
+0000037270 00000 n
+0000037431 00000 n
+0000037591 00000 n
+0000037752 00000 n
+0000037914 00000 n
+0000038075 00000 n
+0000038230 00000 n
+0000038386 00000 n
+0000038548 00000 n
+0000038708 00000 n
+0000038869 00000 n
+0000039031 00000 n
+0000039192 00000 n
+0000039341 00000 n
+0000039496 00000 n
+0000039651 00000 n
+0000039806 00000 n
+0000039961 00000 n
+0000040116 00000 n
+0000040270 00000 n
+0000040431 00000 n
+0000040591 00000 n
+0000040751 00000 n
+0000040901 00000 n
+0000041056 00000 n
+0000041211 00000 n
+0000041421 00000 n
+0000033259 00000 n
+0000031799 00000 n
+0000041360 00000 n
+0000045212 00000 n
+0000045404 00000 n
+0000045596 00000 n
+0000046234 00000 n
+0000045057 00000 n
+0000041585 00000 n
+0000045755 00000 n
+0001024460 00000 n
+0000046173 00000 n
+0000049392 00000 n
+0000049582 00000 n
+0000049742 00000 n
+0000050139 00000 n
+0000049237 00000 n
+0000046438 00000 n
+0000049898 00000 n
+0001025165 00000 n
+0001025785 00000 n
+0000054995 00000 n
+0000054742 00000 n
+0000055416 00000 n
+0000054603 00000 n
+0000050344 00000 n
+0000054934 00000 n
+0000055295 00000 n
+0000059024 00000 n
+0000059518 00000 n
+0000058885 00000 n
+0000055593 00000 n
+0000059216 00000 n
+0000059277 00000 n
+0000059397 00000 n
+0000063243 00000 n
+0000063859 00000 n
+0000063104 00000 n
+0000059695 00000 n
+0000063435 00000 n
+0000063496 00000 n
+0000063617 00000 n
+0000063738 00000 n
+0000066719 00000 n
+0000066911 00000 n
+0000067433 00000 n
+0000066572 00000 n
+0000064064 00000 n
+0000067070 00000 n
+0000067131 00000 n
+0000067252 00000 n
+0000067372 00000 n
+0000070754 00000 n
+0000070333 00000 n
+0000067624 00000 n
+0000070452 00000 n
+0000070513 00000 n
+0001024810 00000 n
+0000073374 00000 n
+0000073133 00000 n
+0000070973 00000 n
+0000073252 00000 n
+0000073313 00000 n
+0001025903 00000 n
+0000077177 00000 n
+0000077673 00000 n
+0000077038 00000 n
+0000073525 00000 n
+0000077368 00000 n
+0000077612 00000 n
+0000081280 00000 n
+0000081100 00000 n
+0000077864 00000 n
+0000081219 00000 n
+0000085013 00000 n
+0000084833 00000 n
+0000081430 00000 n
+0000084952 00000 n
+0000086851 00000 n
+0000086671 00000 n
+0000085163 00000 n
+0000086790 00000 n
+0000090838 00000 n
+0000090536 00000 n
+0000087015 00000 n
+0000090655 00000 n
+0000090777 00000 n
+0000094623 00000 n
+0000094443 00000 n
+0000091015 00000 n
+0000094562 00000 n
+0001026021 00000 n
+0000096185 00000 n
+0000096005 00000 n
+0000094773 00000 n
+0000096124 00000 n
+0000099832 00000 n
+0000099990 00000 n
+0000100148 00000 n
+0000100641 00000 n
+0000099677 00000 n
+0000096349 00000 n
+0000100336 00000 n
+0000100458 00000 n
+0000102641 00000 n
+0000102702 00000 n
+0000102824 00000 n
+0000102461 00000 n
+0000100818 00000 n
+0000102580 00000 n
+0000102763 00000 n
+0000106221 00000 n
+0000106717 00000 n
+0000106082 00000 n
+0000103001 00000 n
+0000106412 00000 n
+0000106656 00000 n
+0000109758 00000 n
+0000109335 00000 n
+0000106922 00000 n
+0000109454 00000 n
+0000109576 00000 n
+0000113526 00000 n
+0000114023 00000 n
+0000113387 00000 n
+0000109935 00000 n
+0000113718 00000 n
+0000113962 00000 n
+0001026139 00000 n
+0000117523 00000 n
+0000117343 00000 n
+0000114227 00000 n
+0000117462 00000 n
+0000121072 00000 n
+0000120892 00000 n
+0000117673 00000 n
+0000121011 00000 n
+0000124250 00000 n
+0000124070 00000 n
+0000121222 00000 n
+0000124189 00000 n
+0000129018 00000 n
+0000128838 00000 n
+0000124400 00000 n
+0000128957 00000 n
+0000132206 00000 n
+0000132026 00000 n
+0000129168 00000 n
+0000132145 00000 n
+0000135710 00000 n
+0000135530 00000 n
+0000132356 00000 n
+0000135649 00000 n
+0001026257 00000 n
+0000139204 00000 n
+0000139024 00000 n
+0000135873 00000 n
+0000139143 00000 n
+0000142360 00000 n
+0000142180 00000 n
+0000139354 00000 n
+0000142299 00000 n
+0000145445 00000 n
+0000145265 00000 n
+0000142510 00000 n
+0000145384 00000 n
+0000148660 00000 n
+0000148358 00000 n
+0000145609 00000 n
+0000148477 00000 n
+0000148599 00000 n
+0000152526 00000 n
+0000152346 00000 n
+0000148837 00000 n
+0000152465 00000 n
+0000155808 00000 n
+0000155628 00000 n
+0000152676 00000 n
+0000155747 00000 n
+0001026375 00000 n
+0000159326 00000 n
+0000159146 00000 n
+0000155958 00000 n
+0000159265 00000 n
+0000162797 00000 n
+0000162617 00000 n
+0000159476 00000 n
+0000162736 00000 n
+0000165959 00000 n
+0000165779 00000 n
+0000162960 00000 n
+0000165898 00000 n
+0000168879 00000 n
+0000168699 00000 n
+0000166109 00000 n
+0000168818 00000 n
+0000172284 00000 n
+0000171982 00000 n
+0000169043 00000 n
+0000172101 00000 n
+0000172223 00000 n
+0000175536 00000 n
+0000175356 00000 n
+0000172461 00000 n
+0000175475 00000 n
+0001026493 00000 n
+0000179061 00000 n
+0000178881 00000 n
+0000175686 00000 n
+0000179000 00000 n
+0000182744 00000 n
+0000183145 00000 n
+0000182605 00000 n
+0000179211 00000 n
+0000182901 00000 n
+0000183084 00000 n
+0000186696 00000 n
+0000186856 00000 n
+0000187004 00000 n
+0000187682 00000 n
+0000186541 00000 n
+0000183348 00000 n
+0000187196 00000 n
+0000187257 00000 n
+0000187378 00000 n
+0000187499 00000 n
+0000187621 00000 n
+0000228267 00000 n
+0000191404 00000 n
+0000191466 00000 n
+0000190236 00000 n
+0000187873 00000 n
+0000190355 00000 n
+0000190416 00000 n
+0000190477 00000 n
+0000190539 00000 n
+0000190601 00000 n
+0000190663 00000 n
+0000190725 00000 n
+0000190787 00000 n
+0000190849 00000 n
+0000190911 00000 n
+0000190972 00000 n
+0000191034 00000 n
+0000191095 00000 n
+0000191157 00000 n
+0000191219 00000 n
+0000191281 00000 n
+0000191342 00000 n
+0000195088 00000 n
+0000195421 00000 n
+0000194949 00000 n
+0000191616 00000 n
+0000195238 00000 n
+0000195360 00000 n
+0000198530 00000 n
+0000198350 00000 n
+0000195626 00000 n
+0000198469 00000 n
+0001026611 00000 n
+0000200808 00000 n
+0000200445 00000 n
+0000198693 00000 n
+0000200564 00000 n
+0000200625 00000 n
+0000200747 00000 n
+0000203670 00000 n
+0000204166 00000 n
+0000203531 00000 n
+0000201013 00000 n
+0000203862 00000 n
+0000204105 00000 n
+0000207324 00000 n
+0000207144 00000 n
+0000204371 00000 n
+0000207263 00000 n
+0000210033 00000 n
+0000209853 00000 n
+0000207474 00000 n
+0000209972 00000 n
+0000212726 00000 n
+0000212546 00000 n
+0000210183 00000 n
+0000212665 00000 n
+0000215757 00000 n
+0000215577 00000 n
+0000212876 00000 n
+0000215696 00000 n
+0001026729 00000 n
+0000218470 00000 n
+0000218290 00000 n
+0000215907 00000 n
+0000218409 00000 n
+0000220109 00000 n
+0000219929 00000 n
+0000218620 00000 n
+0000220048 00000 n
+0000224030 00000 n
+0000223728 00000 n
+0000220273 00000 n
+0000223847 00000 n
+0000223969 00000 n
+0000227582 00000 n
+0000227742 00000 n
+0000227892 00000 n
+0000228389 00000 n
+0000227427 00000 n
+0000224194 00000 n
+0000228084 00000 n
+0000228328 00000 n
+0000232000 00000 n
+0000232062 00000 n
+0000230890 00000 n
+0000228580 00000 n
+0000231009 00000 n
+0000231070 00000 n
+0000231132 00000 n
+0000231194 00000 n
+0000231256 00000 n
+0000231318 00000 n
+0000231380 00000 n
+0000231442 00000 n
+0000231504 00000 n
+0000231566 00000 n
+0000231628 00000 n
+0000231690 00000 n
+0000231752 00000 n
+0000231814 00000 n
+0000231876 00000 n
+0000231938 00000 n
+0000233111 00000 n
+0000232931 00000 n
+0000232212 00000 n
+0000233050 00000 n
+0001026847 00000 n
+0000237096 00000 n
+0000237591 00000 n
+0000236957 00000 n
+0000233275 00000 n
+0000237286 00000 n
+0000237530 00000 n
+0000240939 00000 n
+0000240759 00000 n
+0000237796 00000 n
+0000240878 00000 n
+0000244747 00000 n
+0000244445 00000 n
+0000241129 00000 n
+0000244564 00000 n
+0000244686 00000 n
+0000248145 00000 n
+0000248305 00000 n
+0000248455 00000 n
+0000248950 00000 n
+0000247990 00000 n
+0000244937 00000 n
+0000248646 00000 n
+0000248829 00000 n
+0000248889 00000 n
+0000252051 00000 n
+0000252112 00000 n
+0000251200 00000 n
+0000249141 00000 n
+0000251319 00000 n
+0000251380 00000 n
+0000251441 00000 n
+0000251502 00000 n
+0000251563 00000 n
+0000251624 00000 n
+0000251685 00000 n
+0000251746 00000 n
+0000251807 00000 n
+0000251868 00000 n
+0000251929 00000 n
+0000251990 00000 n
+0000252723 00000 n
+0000252543 00000 n
+0000252275 00000 n
+0000252662 00000 n
+0001026965 00000 n
+0000256043 00000 n
+0000256540 00000 n
+0000255904 00000 n
+0000252861 00000 n
+0000256235 00000 n
+0000256479 00000 n
+0000260362 00000 n
+0000260182 00000 n
+0000256731 00000 n
+0000260301 00000 n
+0000263804 00000 n
+0000263624 00000 n
+0000260512 00000 n
+0000263743 00000 n
+0000267134 00000 n
+0000266954 00000 n
+0000263954 00000 n
+0000267073 00000 n
+0000270508 00000 n
+0000270328 00000 n
+0000267284 00000 n
+0000270447 00000 n
+0000273707 00000 n
+0000273527 00000 n
+0000270658 00000 n
+0000273646 00000 n
+0001027083 00000 n
+0000276828 00000 n
+0000276648 00000 n
+0000273857 00000 n
+0000276767 00000 n
+0000280182 00000 n
+0000279880 00000 n
+0000276992 00000 n
+0000279999 00000 n
+0000280121 00000 n
+0000282457 00000 n
+0000282276 00000 n
+0000280359 00000 n
+0000282395 00000 n
+0000285759 00000 n
+0000285449 00000 n
+0000282621 00000 n
+0000285571 00000 n
+0000285696 00000 n
+0000288240 00000 n
+0000288400 00000 n
+0000288558 00000 n
+0000289001 00000 n
+0000288079 00000 n
+0000285937 00000 n
+0000288751 00000 n
+0000288938 00000 n
+0000291980 00000 n
+0000291724 00000 n
+0000292230 00000 n
+0000291580 00000 n
+0000289193 00000 n
+0000291917 00000 n
+0000292043 00000 n
+0000292167 00000 n
+0001027203 00000 n
+0000295997 00000 n
+0000296502 00000 n
+0000295853 00000 n
+0000292409 00000 n
+0000296190 00000 n
+0000296439 00000 n
+0000300352 00000 n
+0000300166 00000 n
+0000296694 00000 n
+0000300289 00000 n
+0000304545 00000 n
+0000304234 00000 n
+0000300517 00000 n
+0000304357 00000 n
+0000304482 00000 n
+0000306802 00000 n
+0000306616 00000 n
+0000304723 00000 n
+0000306739 00000 n
+0000310539 00000 n
+0000310228 00000 n
+0000306967 00000 n
+0000310351 00000 n
+0000310476 00000 n
+0000313171 00000 n
+0000313331 00000 n
+0000313491 00000 n
+0000313934 00000 n
+0000313009 00000 n
+0000310717 00000 n
+0000313684 00000 n
+0000313871 00000 n
+0001027328 00000 n
+0000317230 00000 n
+0000316817 00000 n
+0000316977 00000 n
+0000317418 00000 n
+0000316664 00000 n
+0000314126 00000 n
+0000317167 00000 n
+0000317293 00000 n
+0000320879 00000 n
+0000321066 00000 n
+0000320693 00000 n
+0000317610 00000 n
+0000320816 00000 n
+0000325448 00000 n
+0000325951 00000 n
+0000325304 00000 n
+0000321231 00000 n
+0000325639 00000 n
+0000325888 00000 n
+0000330366 00000 n
+0000330180 00000 n
+0000326130 00000 n
+0000330303 00000 n
+0000333205 00000 n
+0000333019 00000 n
+0000330517 00000 n
+0000333142 00000 n
+0000336128 00000 n
+0000335817 00000 n
+0000333370 00000 n
+0000335940 00000 n
+0000336065 00000 n
+0001027453 00000 n
+0000340457 00000 n
+0000340618 00000 n
+0000340776 00000 n
+0000343233 00000 n
+0000343392 00000 n
+0000341469 00000 n
+0000340295 00000 n
+0000336306 00000 n
+0000340969 00000 n
+0000341094 00000 n
+0000341281 00000 n
+0000341344 00000 n
+0000341406 00000 n
+0000343772 00000 n
+0000343080 00000 n
+0000341661 00000 n
+0000343584 00000 n
+0000343709 00000 n
+0000348198 00000 n
+0000348702 00000 n
+0000348054 00000 n
+0000343951 00000 n
+0000348390 00000 n
+0000348639 00000 n
+0000352615 00000 n
+0000352429 00000 n
+0000348908 00000 n
+0000352552 00000 n
+0000354490 00000 n
+0000354304 00000 n
+0000352766 00000 n
+0000354427 00000 n
+0000358231 00000 n
+0000358390 00000 n
+0000358540 00000 n
+0000359044 00000 n
+0000358069 00000 n
+0000354655 00000 n
+0000358732 00000 n
+0000358857 00000 n
+0001027578 00000 n
+0000362102 00000 n
+0000362931 00000 n
+0000362995 00000 n
+0000361916 00000 n
+0000359236 00000 n
+0000362039 00000 n
+0000362165 00000 n
+0000362228 00000 n
+0000362292 00000 n
+0000362356 00000 n
+0000362420 00000 n
+0000362484 00000 n
+0000362548 00000 n
+0000362612 00000 n
+0000362676 00000 n
+0000362740 00000 n
+0000362803 00000 n
+0000362867 00000 n
+0000366682 00000 n
+0000366309 00000 n
+0000363173 00000 n
+0000366432 00000 n
+0000366619 00000 n
+0000370831 00000 n
+0000371023 00000 n
+0000371558 00000 n
+0000370678 00000 n
+0000366847 00000 n
+0000371184 00000 n
+0000371309 00000 n
+0000376189 00000 n
+0000376350 00000 n
+0000376501 00000 n
+0000376662 00000 n
+0000376825 00000 n
+0000377392 00000 n
+0000376009 00000 n
+0000371750 00000 n
+0000377018 00000 n
+0000377204 00000 n
+0000377329 00000 n
+0000380861 00000 n
+0000380675 00000 n
+0000377557 00000 n
+0000380798 00000 n
+0000384362 00000 n
+0000384051 00000 n
+0000381012 00000 n
+0000384174 00000 n
+0000384299 00000 n
+0001027703 00000 n
+0000386082 00000 n
+0000385761 00000 n
+0000384526 00000 n
+0000385895 00000 n
+0000395461 00000 n
+0000922654 00000 n
+0000000000 00000 f
+0000922726 00000 n
+0000923127 00000 n
+0000395301 00000 n
+0000386233 00000 n
+0000922940 00000 n
+0000899915 00000 n
+0000925229 00000 n
+0000925032 00000 n
+0000923315 00000 n
+0000925166 00000 n
+0000926000 00000 n
+0000925803 00000 n
+0000925367 00000 n
+0000925937 00000 n
+0000926684 00000 n
+0000926996 00000 n
+0000926540 00000 n
+0000926138 00000 n
+0000926871 00000 n
+0001023330 00000 n
+0000927241 00000 n
+0000927441 00000 n
+0000927805 00000 n
+0000928380 00000 n
+0000928712 00000 n
+0000928943 00000 n
+0000929397 00000 n
+0000929508 00000 n
+0000929593 00000 n
+0000929647 00000 n
+0000930043 00000 n
+0000930524 00000 n
+0000931496 00000 n
+0000931520 00000 n
+0001023865 00000 n
+0000932111 00000 n
+0000932444 00000 n
+0000948064 00000 n
+0000948278 00000 n
+0000964354 00000 n
+0000964573 00000 n
+0000984141 00000 n
+0000984356 00000 n
+0000988873 00000 n
+0000989092 00000 n
+0000991492 00000 n
+0000991715 00000 n
+0001000622 00000 n
+0001000841 00000 n
+0001005271 00000 n
+0001005495 00000 n
+0001012702 00000 n
+0001012910 00000 n
+0001023111 00000 n
+0001027828 00000 n
+0001027948 00000 n
+0001028068 00000 n
+0001028193 00000 n
+0001028276 00000 n
+0001038528 00000 n
+0001038702 00000 n
+0001038873 00000 n
+0001039042 00000 n
+0001039211 00000 n
+0001039382 00000 n
+0001039552 00000 n
+0001039725 00000 n
+0001039900 00000 n
+0001040074 00000 n
+0001040280 00000 n
+0001040531 00000 n
+0001040784 00000 n
+0001041039 00000 n
+0001041286 00000 n
+0001041481 00000 n
+0001041666 00000 n
+0001041837 00000 n
+0001042007 00000 n
+0001042178 00000 n
+0001042348 00000 n
+0001042519 00000 n
+0001042689 00000 n
+0001042860 00000 n
+0001043029 00000 n
+0001043198 00000 n
+0001043369 00000 n
+0001043539 00000 n
+0001043711 00000 n
+0001043886 00000 n
+0001044063 00000 n
+0001044238 00000 n
+0001044415 00000 n
+0001044645 00000 n
+0001044890 00000 n
+0001045146 00000 n
+0001045401 00000 n
+0001045652 00000 n
+0001045903 00000 n
+0001046154 00000 n
+0001046405 00000 n
+0001046605 00000 n
+0001046830 00000 n
+0001047060 00000 n
+0001047287 00000 n
+0001047514 00000 n
+0001047775 00000 n
+0001048048 00000 n
+0001048315 00000 n
+0001048582 00000 n
+0001048849 00000 n
+0001049026 00000 n
+0001049205 00000 n
+0001049386 00000 n
+0001049571 00000 n
+0001049756 00000 n
+0001049954 00000 n
+0001050200 00000 n
+0001050362 00000 n
+0001050480 00000 n
+0001050606 00000 n
+0001050732 00000 n
+0001050848 00000 n
+0001050964 00000 n
+0001051090 00000 n
+0001051224 00000 n
+0001051360 00000 n
+0001051489 00000 n
+0001051596 00000 n
+0001051724 00000 n
+0001051840 00000 n
+0001051930 00000 n
+0001051970 00000 n
+0001052102 00000 n
+trailer
+<< /Size 1321
+/Root 1319 0 R
+/Info 1320 0 R
+/ID [<ECB60BDDD25429AE2E54494948C7EF96> <ECB60BDDD25429AE2E54494948C7EF96>] >>
+startxref
+1052370
+%%EOF
diff --git a/graphics/pgf/contrib/milsymb/milsymb.sty b/graphics/pgf/contrib/milsymb/milsymb.sty
new file mode 100644
index 0000000000..5fb21de65a
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/milsymb.sty
@@ -0,0 +1,3646 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% MilSymb Style File %%
+%%-------------------- %%
+%% Version: 1.01 %%
+%% Last Updated: 05/07/2019 %%
+%% Github: https://github.com/ralphieraccoon/MilSymb %%
+%% Copyright: Damian Crosby 2018 %%
+%% Licence: Creative Commons Attribution-ShareAlike 4.0 International License %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{milsymb}[05/07/2019 v1.01]
+\RequirePackage{tikz}
+\RequirePackage{lmodern}
+\RequirePackage{fix-cm}
+\RequirePackage{arevmath}
+\RequirePackage{marvosym}
+\RequirePackage{acronym}
+\RequirePackage{amssymb}
+\RequirePackage{xifthen}
+\RequirePackage{xparse}
+\definecolor{friendlyA}{RGB}{128, 224, 255}
+\definecolor{hostileA}{RGB}{255, 128, 128}
+\definecolor{neutralA}{RGB}{170, 255, 170}
+\definecolor{unknownA}{RGB}{255, 255, 128}
+\definecolor{friendlyB}{RGB}{0, 255, 255}
+\definecolor{hostileB}{RGB}{255, 0, 0}
+\definecolor{neutralB}{RGB}{0, 255, 0}
+\definecolor{unknownB}{RGB}{255, 255, 0}
+\definecolor{offwhite}{RGB}{239, 239, 239}
+\definecolor{lightgray}{gray}{0.75}
+\usetikzlibrary{arrows.meta, shapes.geometric, shapes.Symbols, positioning, calc}
+\tikzstyle{reverseclip}=[insert path={(current bounding box.north east) --
+ (current bounding box.south east) --
+ (current bounding box.south west) --
+ (current bounding box.north west) --
+ (current bounding box.north east)}
+]
+\tikzset{
+%% FRAMES %%
+% AIR %
+MilSymb air/none/.pic={
+\path (0.5, 0.5) rectangle (-0.5, -0.5);
+\draw[lightgray, dashed] (0:0.5) -- (45:0.5) -- (90:0.5) -- (135:0.5) -- (180:0.5) -- (225:0.5) -- (270:0.5) -- (315:0.5) -- cycle; %DEBUG - Symbol template
+\begin{scope}
+\clip (0:0.5) -- (45:0.5) -- (90:0.5) -- (135:0.5) -- (180:0.5) -- (225:0.5) -- (270:0.5) -- (315:0.5) -- cycle;
+ \draw[lightgray, dashed] (0.5, 0.2) -- (-0.5, 0.2);
+ \draw[lightgray, dashed] (0.5, -0.2) -- (-0.5, -0.2);
+\end{scope}},
+MilSymb air/missile/.pic={
+\pic[rotate=90]{MilSymb air/none};},
+MilSymb air/friendly/.pic={
+\draw [fill=MilSymb@fill, \MilSymb@line] (-0.555, -0.5) arc (180:0:0.555 and 1.37);},
+MilSymb air/hostile/.pic={
+\draw [fill=MilSymb@fill, \MilSymb@line] (0.5, -0.5) -- (0.5, 0.21) -- (0, 0.71) -- (-0.5, 0.21) -- (-0.5, -0.5);},
+MilSymb air/neutral/.pic={
+\draw [fill=MilSymb@fill, \MilSymb@line] (0.5, -0.5) -- (0.5, 0.5) -- (-0.5, 0.5) -- (-0.5, -0.5);},
+MilSymb air/unknown/.pic={
+\path [use as bounding box] (-0.705,-0.355) -- (-0.705, 0.705) -- (0.705, 0.705) -- (0.705, -0.355) -- cycle;
+\draw [fill=MilSymb@fill, \MilSymb@line] (315:0.5) to[out=0, in=0, looseness=1.7] (45:0.5) to[out=90,in=90,looseness=1.7] (135:0.5) to[out=180,in=180,looseness=1.7] (225:0.5);},
+% LAND %
+MilSymb land/none/.pic={
+\pic{MilSymb air/none};},
+MilSymb land/friendly/.pic={
+\draw [fill=MilSymb@fill, \MilSymb@line] (-0.75, -0.5) rectangle (0.75, 0.5);},
+MilSymb land/hostile/.pic={
+\draw [fill=MilSymb@fill, \MilSymb@line] (0, -0.705) -- (-0.705, 0) -- (0, 0.705) -- (0.705, 0) -- cycle;},
+MilSymb land/neutral/.pic={
+\draw [fill=MilSymb@fill, \MilSymb@line] (0.5, -0.5) rectangle (-0.5, 0.5);},
+MilSymb land/unknown/.pic={
+\path [use as bounding box] (-0.705,-0.705) -- (-0.705, 0.705) -- (0.705, 0.705) -- (0.705, -0.705) -- cycle;
+\draw [fill=MilSymb@fill, \MilSymb@line] (45:0.5) to[out=90,in=90,looseness=1.7] (135:0.5) to[out=180,in=180,looseness=1.7] (225:0.5) to[out=270, in=270, looseness=1.7] (315:0.5) to[out=0, in=0, looseness=1.7] (45:0.5) -- cycle;
+},
+% EQUIPMENT/SEA SURFACE %
+MilSymb equipment/none/.pic={
+\path (0.5, 0.5) rectangle (-0.5, -0.5);
+\draw[lightgray, dashed] (0:0.5) -- (45:0.5) -- (90:0.5) -- (135:0.5) -- (180:0.5) -- (225:0.5) -- (270:0.5) -- (315:0.5) -- cycle;},
+MilSymb equipment/friendly/.pic={
+\draw [fill=MilSymb@fill, \MilSymb@line] circle (0.5);},
+MilSymb equipment/hostile/.pic={
+\pic{MilSymb land/hostile};},
+MilSymb equipment/neutral/.pic={
+\pic{MilSymb land/neutral};},
+MilSymb equipment/unknown/.pic={
+\pic{MilSymb land/unknown};},
+% INSTALLATION %
+MilSymb installation/none/.pic={
+\pic{MilSymb air/none};},
+MilSymb installation/friendly/.pic={
+\fill (0.2, 0.65) rectangle (-0.2, 0.5);
+\pic [local bounding box=M] {MilSymb land/friendly};},
+MilSymb installation/hostile/.pic={
+\fill (0.2, 0.825) rectangle(-0.2, 0.4);
+\pic [local bounding box=M] {MilSymb land/hostile};},
+MilSymb installation/neutral/.pic={
+\fill (0.2, 0.65) rectangle (-0.2, 0.5);
+\pic[local bounding box=M] {MilSymb land/neutral};},
+MilSymb installation/unknown/.pic={
+\fill (0.2, 0.825) rectangle(-0.2, 0.4);
+\pic [local bounding box=M] {MilSymb land/unknown};},
+% SEA SUBSURFACE %
+MilSymb seasubsurface/none/.pic={
+\pic {MilSymb air/none};},
+MilSymb seasubsurface/friendly/.pic={
+\pic [rotate=180] {MilSymb air/friendly};},
+MilSymb seasubsurface/hostile/.pic={
+\pic [rotate=180] {MilSymb air/hostile};},
+MilSymb seasubsurface/neutral/.pic={
+\pic [rotate=180] {MilSymb air/neutral};},
+MilSymb seasubsurface/unknown/.pic={
+\pic [rotate=180] {MilSymb air/unknown};},
+% SPACE %
+MilSymb space/none/.pic={
+\pic {MilSymb air/none};},
+MilSymb space/friendly/.pic={
+\pic {MilSymb air/friendly};
+\begin{scope}
+\clip (-0.555, -0.5) arc (180:0:0.555 and 1.37);
+\fill (0.5, 0.87) rectangle (-0.5, 0.72);
+\end{scope}},
+MilSymb space/hostile/.pic={
+\pic {MilSymb air/hostile};
+\begin{scope}
+\clip (0.5, -0.5) -- (0.5, 0.21) -- (0, 0.71) -- (-0.5, 0.21) -- (-0.5, -0.5);
+\fill (0.5, 0.71) rectangle (-0.5, 0.56);
+\end{scope}},
+MilSymb space/neutral/.pic={
+\pic [local bounding box=M]{MilSymb air/neutral};
+\filldraw (0.5, 0.65) rectangle (-0.5, 0.5);},
+MilSymb space/unknown/.pic={
+\pic {MilSymb air/unknown};
+\begin{scope}
+\clip (315:0.5) to[out=0, in=0, looseness=1.7] (45:0.5) to[out=90,in=90,looseness=1.7] (135:0.5) to[out=180,in=180,looseness=1.7] (225:0.5);
+\fill (0.5, 0.73) rectangle (-0.5, 0.58);
+\end{scope}},
+% ACTIVITY %
+MilSymb activity/none/.pic={
+\pic{MilSymb air/none};},
+MilSymb activity/friendly/.pic={
+\pic {MilSymb land/friendly};
+\fill (0.75, 0.5) rectangle (0.6, 0.35);
+\fill (-0.75, 0.5) rectangle (-0.6, 0.35);
+\fill (0.75, -0.5) rectangle (0.6, -0.35);
+\fill (-0.75, -0.5) rectangle (-0.6, -0.35);
+},
+MilSymb activity/hostile/.pic={
+\pic {MilSymb land/hostile};
+\fill (0, 0.705) -- ++(315:0.15) -- ++(225:0.15) -- ++(135:0.15) -- cycle;
+\fill (0, -0.705) -- ++(45:0.15) -- ++(135:0.15) -- ++(225:0.15) -- cycle;
+\fill (0.705, 0) -- ++(135:0.15) -- ++(225:0.15) -- ++(315:0.15) -- cycle;
+\fill (-0.705, 0) -- ++(45:0.15) -- ++(315:0.15) -- ++(225:0.15) -- cycle;
+},
+MilSymb activity/neutral/.pic={
+\pic {MilSymb land/neutral};
+\fill (0.5, 0.5) rectangle (0.35, 0.35);
+\fill (-0.5, 0.5) rectangle (-0.35, 0.35);
+\fill (0.5, -0.5) rectangle (0.35, -0.35);
+\fill (-0.5, -0.5) rectangle (-0.35, -0.35);
+},
+MilSymb activity/unknown/.pic={
+\pic {MilSymb land/unknown};
+\begin{scope}
+\clip (45:0.5) to[out=90,in=90,looseness=1.7] (135:0.5) to[out=180,in=180,looseness=1.7] (225:0.5) to[out=270, in=270, looseness=1.7] (315:0.5) to[out=0, in=0, looseness=1.7] (45:0.5) -- cycle;
+\fill (0.075, 0.705) rectangle (-0.075, 0.555);
+\fill (0.075, -0.705) rectangle (-0.075, -0.555);
+\fill (0.705, 0.075) rectangle (0.555, -0.075);
+\fill (-0.705, 0.075) rectangle (-0.555, -0.075);
+\end{scope}},
+%% AIR SYMBOLS %%
+% MAIN %
+MilSymb air/main/civilian fixed wing/.pic={
+\draw (-0.36,0.125) arc (77:275:0.075 and 0.125) -- (0,0) -- cycle;
+\begin{scope}[xscale=-1]
+\draw (-0.36,0.125) arc (77:275:0.075 and 0.125) -- (0,0) -- cycle;
+\end{scope}},
+MilSymb air/main/civilian rotary wing/.pic={
+\draw (0.44, 0.15) -- (0.44, -0.15) -- (-0.44, 0.15) -- (-0.44, -0.15) -- cycle;},
+MilSymb air/main/military balloon/.pic={
+\fill (0, 0.025) circle (0.175);
+\fill (-0.05, 0) -- (-0.05,-0.2) -- (0.05, -0.2) -- (0.05,0) -- cycle;},
+MilSymb air/main/civilian balloon/.pic={
+\path (0.175, 0.2) rectangle (-0.175, -0.2);
+\draw (0, 0.025) circle (0.175);
+\begin{scope}
+\clip (0, 0.025) circle (0.175) [reverseclip];
+ \draw (-0.05, 0) -- (-0.05,-0.2) -- (0.05, -0.2) -- (0.05,0) -- cycle;
+\end{scope}},
+MilSymb air/main/military airship/.pic={
+\fill (0, 0) ellipse (0.45 and 0.15);
+\fill (0.2, 0) -- (0.3, 0.175) -- (0.4,0.175) -- (0.375,0) -- (0.4,-0.175) -- (0.3, -0.175) -- cycle;},
+MilSymb air/main/civilian airship/.pic={
+\path (0.45, 0.175) rectangle (-0.45, -0.175);
+\draw (0, 0) ellipse (0.45 and 0.15);
+\begin{scope}
+\clip (0, 0) ellipse (0.45 and 0.15) [reverseclip];
+ \draw (0.2, 0) -- (0.3, 0.175) -- (0.4,0.175) -- (0.375,0) -- (0.4,-0.175) -- (0.3, -0.175) -- cycle;
+\end{scope}},
+MilSymb air/main/air decoy/.pic={
+\pic [yshift=1.5] {MilSymb multi/main/decoy};
+\fill (0.4, -0.2) rectangle (-0.4, -0.15);
+},
+% UPPER %
+%% LAND SYMBOLS %%
+% FULLFRAME %
+MilSymb land/main/air assault with organic lift/friendly/.pic={
+\clip \clipfriendly;
+\draw (-0.75, -0.2) -- (-0.1, -0.2) -- (0, -0.325) -- (0.1, -0.2) -- (0.75, -0.2);
+},
+MilSymb land/main/air assault with organic lift/hostile/.pic={
+\clip \cliphostile;
+\draw (-0.5, -0.2) -- (-0.15, -0.2) -- (0, -0.5) -- (0.15, -0.2) -- (0.5, -0.2);
+},
+MilSymb land/main/air assault with organic lift/neutral/.pic={
+\clip \clipneutral;
+\draw (-0.5, -0.2) -- (-0.1, -0.2) -- (0, -0.325) -- (0.1, -0.2) -- (0.5, -0.2);
+},
+MilSymb land/main/air assault with organic lift/unknown/.pic={
+\clip \clipunknown;
+\draw (-0.65, -0.2) -- (-0.1, -0.2) -- (0, -0.325) -- (0.1, -0.2) -- (0.65, -0.2);
+},
+MilSymb land/main/air defence/friendly/.pic={
+\clip \clipfriendly;
+\draw (-0.75,-0.5) to[out=90,in=90,looseness=0.675] (0.75,-0.5);
+},
+MilSymb land/main/air defence/hostile/.pic={
+\clip \cliphostile;
+\draw (225:0.5) to[out=45,in=135,looseness=0.725] (315:0.5);
+},
+MilSymb land/main/air defence/neutral/.pic={
+\clip \clipneutral;
+\draw (-0.5, -0.5) to[out=90,in=90,looseness=1] (0.5, -0.5);
+},
+MilSymb land/main/air defence/unknown/.pic={
+\clip \clipunknown;
+\draw (225:0.5) to[out=45,in=135,looseness=0.725] (315:0.5);
+},
+MilSymb land/main/air and naval gunfire liaison company/.pic={
+\pic{MilSymb multi/main/field artillery};
+\pic [xscale=0.75, yscale=1.4] {MilSymb multi/main/aviation rotary wing};
+\pic at (0, 0.345) {MilSymb multi/upper/naval};
+},
+MilSymb land/main/air and naval gunfire liaison company/friendly/.pic={
+\pic {MilSymb land/main/air and naval gunfire liaison company};
+\pic {MilSymb land/main/reconnaissance/friendly};
+},
+MilSymb land/main/air and naval gunfire liaison company/hostile/.pic={
+\pic {MilSymb land/main/air and naval gunfire liaison company};
+\pic {MilSymb land/main/reconnaissance/hostile};
+},
+MilSymb land/main/air and naval gunfire liaison company/neutral/.pic={
+\pic {MilSymb land/main/air and naval gunfire liaison company};
+\pic {MilSymb land/main/reconnaissance/neutral};
+},
+MilSymb land/main/air and naval gunfire liaison company/unknown/.pic={
+\pic {MilSymb land/main/air and naval gunfire liaison company};
+\pic {MilSymb land/main/reconnaissance/unknown};
+},
+MilSymb land/main/amphibious/friendly/.pic={
+\clip \clipfriendly;
+\pic {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/amphibious/hostile/.pic={
+\clip \cliphostile;
+\pic [xscale=0.9] {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/amphibious/neutral/.pic={
+\clip \clipneutral;
+\pic [xscale=0.9] {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/amphibious/unknown/.pic={
+\clip \clipunknown;
+\pic [xscale=0.9] {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/analysis/.pic={
+\draw (-0.3,-0.2) -- (0.3, -0.2) -- (0, -0.4) -- cycle;
+\draw (0, -0.2) -- (0, 0.4);
+},
+MilSymb land/main/analysis electronic warfare/.pic={
+\draw (-0.3,-0.2) -- (0.3, -0.2) -- (0, -0.4) -- cycle;
+\draw (0, -0.2) -- (0, 0.4);
+\pic at (-0.25, 0) {MilSymb text/normal={E}};
+\pic at (0.25, 0) {MilSymb text/normal={W}};
+},
+MilSymb land/main/intercept/.pic={
+\fill (-0.3,-0.2) -- (0.3, -0.2) -- (0, -0.4) -- cycle;
+\draw (0, -0.2) -- (0, 0.4);
+},
+MilSymb land/main/intercept electronic warfare/.pic={
+\fill (-0.3,-0.2) -- (0.3, -0.2) -- (0, -0.4) -- cycle;
+\draw (0, -0.2) -- (0, 0.4);
+\pic at (-0.25, 0) {MilSymb text/normal={E}};
+\pic at (0.25, 0) {MilSymb text/normal={W}};
+},
+MilSymb land/main/anti tank anti armour/friendly/.pic={
+\clip \clipfriendly;
+\draw (-0.75, -0.5) -- (0, 0.5) -- (0.75, -0.5);
+},
+MilSymb land/main/anti tank anti armour/hostile/.pic={
+\clip \cliphostile;
+\draw (-0.55, -0.5) -- (0, 0.705) -- (0.55, -0.5);
+},
+MilSymb land/main/anti tank anti armour/neutral/.pic={
+\clip \clipneutral;
+\draw (-0.5, -0.5) -- (0, 0.5) -- (0.5, -0.5);
+},
+MilSymb land/main/anti tank anti armour/unknown/.pic={
+\clip \clipunknown;
+\draw (225:0.5) -- (0, 0.705) -- (315:0.5);
+},
+MilSymb land/main/corps support/friendly/.pic={
+\clip \clipfriendly;
+\draw (0.75, 0.5) -- (0:0.5) -- (0.75, -0.5);
+},
+MilSymb land/main/corps support/hostile/.pic={
+\clip \cliphostile;
+\draw (0.95, 0.5) -- (0.45, 0) -- (0.95, -0.5);
+},
+MilSymb land/main/corps support/neutral/.pic={
+\clip \clipneutral;
+\draw (0.5, 0.5) -- (0.35, 0) -- (0.5, -0.5);
+},
+MilSymb land/main/corps support/unknown/.pic={
+\clip \clipunknown;
+\draw (0.75, 0.5) -- (0:0.5) -- (0.75, -0.5);
+},
+MilSymb land/main/direction finding/.pic={
+\draw (-0.3, 0.2) -- (0, 0.4) -- (0.3, 0.2);
+\draw (0, 0.4) -- (0, -0.4);
+},
+MilSymb land/main/direction finding electronic warfare/.pic={
+\draw (-0.3, 0.2) -- (0, 0.4) -- (0.3, 0.2);
+\draw (0, 0.4) -- (0, -0.4);
+\pic at (-0.25, 0) {MilSymb text/normal={E}};
+\pic at (0.25, 0) {MilSymb text/normal={W}};
+},
+MilSymb land/main/search/.pic={
+\pic [yscale=-1] {MilSymb land/main/direction finding};
+},
+MilSymb land/main/search electronic warfare/.pic={
+\pic [yscale=-1] {MilSymb land/main/direction finding};
+\pic at (-0.25, 0) {MilSymb text/normal={E}};
+\pic at (0.25, 0) {MilSymb text/normal={W}};
+},
+MilSymb land/main/headquarters/friendly/.pic={
+\clip \clipfriendly;
+\draw (-0.75, 0.2) -- (0.75, 0.2);
+},
+MilSymb land/main/headquarters/hostile/.pic={
+\clip \cliphostile;
+\draw (0.5, 0.2) -- (-0.5, 0.2);
+},
+MilSymb land/main/headquarters/neutral/.pic={
+\clip \clipneutral;
+\draw (0.5, 0.2) -- (-0.5, 0.2);
+},
+MilSymb land/main/headquarters/unknown/.pic={
+\clip \clipunknown;
+\draw (-0.75, 0.2) -- (0.75, 0.2);
+},
+MilSymb land/main/infantry/friendly/.pic={
+\clip \clipfriendly;
+\draw (-0.75, 0.5) -- (0.75, -0.5);
+\draw (-0.75, -0.5) -- (0.75, 0.5);
+},
+MilSymb land/main/infantry/hostile/.pic={
+\clip \cliphostile;
+\draw (-0.5, 0.25) -- (0.5, -0.25);
+\draw (-0.5, -0.25) -- (0.5, 0.25);
+},
+MilSymb land/main/infantry/neutral/.pic={
+\clip \clipneutral;
+\draw (-0.5, 0.25) -- (0.5, -0.25);
+\draw (-0.5, -0.25) -- (0.5, 0.25);
+},
+MilSymb land/main/infantry/unknown/.pic={
+\clip \clipunknown;
+\draw (-0.75, 0.35) -- (0.75, -0.35);
+\draw (-0.75, -0.35) -- (0.75, 0.35);
+},
+MilSymb land/main/jamming/friendly/.pic={
+\clip \clipfriendly;
+\pic at (0, 0.4) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (0.936, 0.4) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (-0.936, 0.4) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (0, 0.3) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (0.936, 0.3) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (-0.936, 0.3) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/jamming/hostile/.pic={
+\clip \cliphostile;
+\pic at (0, 0.4) [xscale=0.75, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (0, 0.3) [xscale=0.75, yscale=0.5] {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/jamming/neutral/.pic={
+\clip \clipneutral;
+\pic at (0, 0.4) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (0, 0.3) [xscale=0.65, yscale=0.5] {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/jamming/unknown/.pic={
+\clip \clipunknown;
+\clip (-0.45, 0.2) rectangle (0.45, 0.5);
+\pic at (0, 0.4) [xscale=0.6, yscale=0.5] {MilSymb multi/main/amphibious};
+\pic at (0, 0.3) [xscale=0.6, yscale=0.5] {MilSymb multi/main/amphibious};
+},
+MilSymb land/main/jamming electronic warfare/.pic={
+\pic {MilSymb land/main/jamming/\MilSymb@selectedfaction};
+\fontsize{15}{0}\selectfont
+\node{EW};
+},
+MilSymb land/main/main gun system/friendly/.pic={
+\clip \clipfriendly;
+\draw (-0.5, 0.5) -- (-0.5, -0.5);
+},
+MilSymb land/main/main gun system/hostile/.pic={
+\clip \cliphostile;
+\draw (-0.5, 0.5) -- (-0.5, -0.5);
+},
+MilSymb land/main/main gun system/neutral/.pic={
+\clip \clipneutral;
+\draw (-0.3, 0.5) -- (-0.3, -0.5);
+},
+MilSymb land/main/main gun system/unknown/.pic={
+\clip \clipunknown;
+\draw (-0.5, 0.5) -- (-0.5, -0.5);
+},
+MilSymb land/main/motorized/.pic={
+\draw (M.north) -- (M.south);
+},
+MilSymb land/main/reconnaissance/friendly/.pic={
+\clip \clipfriendly;
+\draw (0.75, 0.5) -- (-0.75, -0.5);
+},
+MilSymb land/main/reconnaissance/hostile/.pic={
+\clip \cliphostile;
+\draw (0.5, 0.5) -- (-0.5, -0.5);
+},
+MilSymb land/main/reconnaissance/neutral/.pic={
+\clip \clipneutral;
+\draw (0.5, 0.5) -- (-0.5, -0.5);
+},
+MilSymb land/main/reconnaissance/unknown/.pic={
+\clip \clipunknown;
+\draw (0.5, 0.5) -- (-0.5, -0.5);
+},
+MilSymb land/main/signal radio/.pic={
+\pic {MilSymb multi/main/signal/\MilSymb@selectedfaction};
+\pic {MilSymb land/main/radio};
+},
+MilSymb land/main/signal radio relay/.pic={
+\pic {MilSymb multi/main/signal/\MilSymb@selectedfaction};
+\pic {MilSymb land/main/radio relay};
+},
+MilSymb land/main/signal radio teletype centre/.pic={
+\pic {MilSymb multi/main/signal/\MilSymb@selectedfaction};
+\pic {MilSymb land/main/radio teletype centre};
+},
+MilSymb land/main/signal tactical satellite/.pic={
+\pic {MilSymb multi/main/signal/\MilSymb@selectedfaction};
+\pic {MilSymb land/main/tactical satellite};
+},
+MilSymb land/main/supply/friendly/.pic={
+\draw (0.75, -0.25) -- (-0.75, -0.25);
+},
+MilSymb land/main/supply/hostile/.pic={
+\clip \cliphostile;
+\draw (0.5, -0.25) -- (-0.5, -0.25);
+},
+MilSymb land/main/supply/neutral/.pic={
+\draw (0.5, -0.25) -- (-0.5, -0.25);
+},
+MilSymb land/main/supply/unknown/.pic={
+\clip \clipunknown;
+\draw (0.75, -0.25) -- (-0.75, -0.25);
+},
+MilSymb land/main/above corps support/friendly/.pic={
+\pic {MilSymb land/main/corps support/friendly};
+\pic [xscale=-1] {MilSymb land/main/corps support/friendly};
+},
+MilSymb land/main/above corps support/hostile/.pic={
+\clip \cliphostile;
+\pic {MilSymb land/main/corps support/hostile};
+\pic [xscale=-1] {MilSymb land/main/corps support/hostile};
+},
+MilSymb land/main/above corps support/neutral/.pic={
+\pic {MilSymb land/main/corps support/neutral};
+\pic [xscale=-1] {MilSymb land/main/corps support/neutral};
+},
+MilSymb land/main/above corps support/unknown/.pic={
+\clip \clipunknown;
+\pic {MilSymb land/main/corps support/unknown};
+\pic [xscale=-1] {MilSymb land/main/corps support/unknown};
+},
+% MAIN %
+MilSymb land/main/air traffic services/.pic={
+\pic [xscale=0.75, yscale= 1.35] {MilSymb multi/main/aviation rotary wing};
+\draw (0, -0.2) -- (0, 0.05);
+\fill (0, 0.125) circle (0.075);
+},
+MilSymb land/main/aviation composite fixed wing and rotary wing/.pic={
+\pic [xscale=0.45, yscale=0.75] {MilSymb multi/main/aviation fixed wing};
+\pic [yscale=0.45, xscale=0.7, rotate=90] {MilSymb multi/main/aviation rotary wing};
+},
+MilSymb land/main/civilian military cooperation/.pic={
+\draw (0.375, 0.2) -- (-0.375, 0.2) -- (-0.375, -0.025) to[in=270, out=270, looseness=0.75] (0.375, -0.025) -- cycle;
+},
+MilSymb land/main/combat support/.pic={
+\fill (0.15, 0.2) -- (-0.15, 0.2) -- (-0.15, -0.05) -- (0, -0.2) -- (0.15, -0.05) -- cycle;
+},
+MilSymb land/main/combined arms/.pic={
+\pic {MilSymb multi/main/armoured};
+\draw (0.275, 0.2) -- (-0.275, -0.2);
+\draw (0.275, -0.2) -- (-0.275, 0.2);
+},
+MilSymb multi/main/drilling/.pic={
+\fill (-0.1,-0.2) -- (0.1,-0.2) -- (0.2, 0.2) -- (-0.2, 0.2) -- cycle;
+},
+MilSymb land/main/electronic ranging/.pic={
+\begin{scope} [yshift=1]
+\draw (135:0.225) arc (135:315:0.225) -- cycle;
+\draw (0,0) -- (225:-0.225);
+\end{scope}
+},
+MilSymb multi/main/armoured engineer/.pic={
+\pic [scale=0.6] {MilSymb multi/main/engineer};
+\pic {MilSymb multi/main/armoured};
+},
+MilSymb land/main/observer/.pic={
+\draw (0.25, -0.2) -- (-0.25, -0.2) -- (0, 0.2) -- cycle;
+},
+MilSymb land/main/field artillery observer/.pic={
+\pic [scale=0.5, yshift=-3.5] {MilSymb multi/main/field artillery};
+\pic {MilSymb land/main/observer};
+\draw (-0.25, -0.2) -- (0.125,0);
+},
+MilSymb land/main/self propelled field artillery/.pic={
+\pic {MilSymb multi/main/field artillery};
+\pic {MilSymb multi/main/armoured};
+},
+MilSymb land/main/finance/.pic={
+\draw (-0.3, -0.2) -- (-0.3, 0) -- (-0.15, 0.2) -- (0.15, 0.2) -- (0.3, 0) -- (0.3, -0.2) -- cycle;
+\draw (-0.3, 0) -- (0.3, 0);
+},
+MilSymb land/main/fire protection/.pic={
+\pic [scale=0.7] {MilSymb multi/main/field artillery};
+\pic [xscale=0.4, yscale=0.6]{MilSymb multi/main/aviation rotary wing};
+\pic [xscale=0.6, yscale=0.4, rotate=90]{MilSymb multi/main/aviation rotary wing};
+},
+MilSymb land/main/labour/.pic={
+\draw (0.1, 0) -- (-0.1, 0) -- (0, -0.15) -- cycle;
+\draw (0, 0) -- (0, 0.15);
+\draw (0.1, 0.15) -- (-0.1, 0.15);
+},
+MilSymb land/main/laundry/.pic={
+\draw (0, -0.2) -- (0, 0.1) -- (-0.15, 0.2);
+\draw (0, 0.1) -- (-0.15, 0.1);
+\draw (0, 0.1) -- (-0.15, 0);
+},
+MilSymb land/main/missile/.pic={
+\draw (0, -0.2) -- (0, 0.2);
+\draw (0.1, -0.2) -- (0.1, 0.1) arc(0:180:0.1) -- (-0.1, -0.2);
+},
+MilSymb land/main/mortar/.pic={
+\draw (0, -0.15) circle (0.05);
+\draw (0, -0.1) -- (0, 0.2);
+\draw (0.05, 0.125) -- (0, 0.2) -- (-0.05, 0.125);
+},
+MilSymb land/main/tactical mortar/.pic={
+\pic [scale=0.75] {MilSymb land/main/mortar};
+\pic {MilSymb multi/main/armoured};
+},
+MilSymb land/main/mortuary affairs/.pic={
+\draw (0.1, -0.175) rectangle (-0.1, 0.175);
+\draw (0, -0.15) -- (0, 0.15);
+\draw (0.05, 0.1) -- (-0.05, 0.1);
+},
+MilSymb land/main/ordnance/.pic={
+\draw (0,-0.075) ellipse (0.15 and 0.125);
+\begin{scope}
+\path [use as bounding box] (0.3, 0.2) rectangle (-0.3, -0.2);
+\clip (0,-0.075) ellipse (0.15 and 0.125) [reverseclip];
+\draw (0, -0.05) -- (0.15, 0.15);
+\draw (0, -0.05) -- (-0.15, 0.15);
+\draw (0, -0.05) -- (0.1, 0.175);
+\draw (0, -0.05) -- (-0.1, 0.175);
+\end{scope}
+},
+MilSymb land/main/pipeline/.pic={
+\draw (0.125, -0.2) rectangle (-0.125, 0.05);
+\draw (0.125, -0.15) -- (0.275, -0.15);
+\draw (0.125, 0) -- (0.275, 0);
+\draw (-0.125, -0.15) -- (-0.275, -0.15);
+\draw (-0.125, 0) -- (-0.275, 0);
+\draw (0.1, 0.2) rectangle (-0.1, 0.15);
+\draw (0.025, 0.05) -- (0.025, 0.15);
+\draw (-0.025, 0.05) -- (-0.025, 0.15);
+},
+MilSymb land/main/postal/.pic={
+\draw (0.1, 0.2) arc(180:225:0.565) arc(270:197:0.565) -- cycle;
+},
+MilSymb land/main/psychological operations broadcast/.pic={
+\pic {MilSymb multi/main/antenna};
+\pic {MilSymb multi/main/psychological operations filled};
+},
+MilSymb land/main/radio/.pic={
+\draw (0, -0.125) circle (0.075);
+\draw (0, -0.05) -- (0, 0.2);
+\draw (0.15, 0.15) -- (0.1, 0.2) -- (0.05, 0.15) -- (0, 0.2) -- (-0.05, 0.15) -- (-0.1, 0.2) -- (-0.15, 0.15);
+},
+MilSymb land/main/radio relay/.pic={
+\draw (0, -0.125) circle (0.075);
+\draw (0, -0.05) -- (0, 0.2);
+\draw (0.15, 0.2) -- (-0.15, 0.2);
+},
+MilSymb land/main/radio teletype centre/.pic={
+\draw (0, -0.2) -- (0, 0.2);
+\draw (0.15, 0.2) -- (-0.15, 0.2);
+\draw (0.1, 0.15) -- (-0.1, 0.15);
+\pic at (0, -0.1) {MilSymb text/small={C}};
+},
+MilSymb land/main/sniper/.pic={
+\draw (0, -0.2) -- (0, 0.15);
+\draw (0.25, 0.2) -- (0.05, 0.2);
+\draw (-0.25, 0.2) -- (-0.05, 0.2);
+},
+MilSymb land/main/surveillance/.pic={
+\fill (0.25, -0.2) -- (-0.25, -0.2) -- (0, 0.2) -- cycle;
+},
+MilSymb land/main/survey/.pic={
+\draw [fill] (0, -0.1) -- (0, 0.195) -- (0.25, 0.0475) -- cycle;
+\draw (0.1, -0.2) -- (0, -0.1) -- (-0.1, -0.2);
+},
+MilSymb land/main/tactical satellite/.pic={
+\draw (-0.14, -0.2) arc(135:45:0.2);
+\draw (0, 0.05) -- (0, -0.135);
+\draw (0.1, 0.05) -- (-0.1, 0.05);
+\fill (-0.075, -0.1) rectangle (0.075, 0.175);
+\fill (-0.25, -0.125) rectangle (-0.1, 0.2);
+\fill (0.25, -0.125) rectangle (0.1, 0.2);
+},
+MilSymb land/main/topographic/.pic={
+\draw (0.1,-0.2) -- (0, 0.05) -- (-0.1, -0.2);
+\draw (0, 0.05) -- (0, 0.2);
+\draw (-0.14, -0.11) arc(225:315:0.2);
+},
+MilSymb land/main/video imagery/.pic={
+\draw (-0.4, 0.2) -- (-0.4, -0.2) -- (0.05, -0.2) -- (0.2, 0.2) -- cycle;
+\draw [very thick] (0.4, -0.2) -- (0.4, 0.15);
+\draw (0.075, -0.15) -- (0.4, -0.15);
+\draw (0.16, 0.1) -- (0.4, 0.1);
+},
+MilSymb land/main/civilian police/.pic={
+\draw (0.225, 0.2) to[in=270, out=270, looseness=3] (-0.225, 0.2) to [in=270, out=270, looseness=1.5] (0,0.2) to [in=270, out=270, looseness=1.5] (0.225, 0.2) -- cycle;
+},
+MilSymb land/main/environmental protection/.pic={
+\draw (0, 0.2) -- (0.1, 0.05) -- (0.05, 0.05) -- (0.15, -0.05) -- (0.1, -0.05) -- (0.2, -0.15) -- (0.15, -0.15) -- (0.05, -0.15) -- (0.05, -0.2) -- (-0.05, -0.2) -- (-0.05, -0.15) -- (-0.2, -0.15) -- (-0.1, -0.05) -- (-0.15, -0.05) -- (-0.05, 0.05) -- (-0.1, 0.05) -- cycle;
+},
+MilSymb land/main/organisation or group/.pic={
+\pic [scale=0.9] at (0, -0.02) {MilSymb multi/main/individual};
+\pic [scale=0.9] at (0.2, 0.02) {MilSymb multi/main/individual};
+\pic [scale=0.9] at (-0.2, 0.02) {MilSymb multi/main/individual};
+},
+MilSymb land/main/killing victims/.pic={
+\pic {MilSymb land/main/organisation or group};
+\draw (-0.41, 0.2) -- (0.41, -0.2);
+},
+% UPPER %
+MilSymb land/upper/air assault/.pic={
+\draw (0.25, 0.05) -- (0, -0.1) -- (-0.25, 0.05);
+},
+MilSymb land/upper/bridging/.pic={
+\pic[scale=0.625, yshift=-1.6] {MilSymb multi/main/bridge};
+},
+MilSymb land/upper/direct communications/.pic={
+\draw[{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}, very thick] (-0.215, -0.05) -- (0.215, -0.05);
+\draw [semithick] (-0.285, -0.05) circle (0.075);
+\draw [semithick] (0.285, -0.05) circle (0.075);
+},
+MilSymb land/upper/diving/.pic={
+\pic [scale=0.75] {MilSymb multi/main/diver};
+},
+MilSymb land/upper/drilling/.pic={
+\pic [scale=0.625, yshift=-0.5] {MilSymb multi/main/drilling};
+},
+MilSymb land/upper/missile/.pic={
+\pic [scale=0.25] {MilSymb multi/main/missile};
+},
+MilSymb land/upper/mobile advisor and support/.pic={
+\draw[-{Stealth[inset=0pt,scale=0.5]}, very thick] (-0.215, -0.05) -- (0.215, -0.05);
+\draw [semithick] (-0.285, -0.05) circle (0.075);
+\draw [semithick] (0.285, -0.05) circle (0.075);
+},
+MilSymb land/upper/multiple rocket launcher/.pic={
+\draw (0.175, 0) -- (0, 0.15) -- (-0.175, 0);
+\draw (0.175, -0.14) -- (0, 0.01) -- (-0.175, -0.14);
+},
+MilSymb land/upper/radar/.pic={
+\pic [scale=0.5] {MilSymb multi/main/radar};
+},
+MilSymb land/upper/sensor/.pic={
+\pic [scale=0.5] {MilSymb multi/main/sensor};
+},
+MilSymb land/upper/signals intelligence/.pic={
+\begin{scope}[scale=0.75, yshift=-2.5]
+\draw (0, -0.05) -- (0, 0.2);
+\draw (0.15, 0.15) -- (0.1, 0.2) -- (0.05, 0.15) -- (0, 0.2) -- (-0.05, 0.15) -- (-0.1, 0.2) -- (-0.15, 0.15);
+\end{scope}
+},
+MilSymb land/upper/single rocket launcher/.pic={
+\draw (0.175, -0.075) -- (0, 0.075) -- (-0.175, -0.075);
+},
+MilSymb land/upper/sniper/.pic={
+\pic [scale=0.5, yshift=-1] {MilSymb land/main/sniper};
+},
+MilSymb land/upper/survey/.pic={
+\pic [scale=0.5] {MilSymb land/main/survey};
+},
+MilSymb land/upper/topographic/.pic={
+\pic [scale=0.5] {MilSymb land/main/topographic};
+},
+MilSymb land/upper/video imagery/.pic={
+\pic [scale=0.5, yshift=-1.75] {MilSymb land/main/video imagery};
+},
+% LOWER %
+MilSymb land/lower/airborne/.pic={
+\draw (0,-0.025) arc(0:180:0.15);
+\draw (0,-0.025) arc(180:0:0.15);
+},
+MilSymb land/lower/arctic/.pic={
+\draw (-0.325,0.135) arc(180:270:0.075 and 0.15) -- +(0.5, 0) arc(-90:0:0.075 and 0.15);
+},
+MilSymb land/lower/bicycle equipped/.pic={
+\draw (0,0) circle (0.1);
+},
+MilSymb land/lower/control/.pic={
+\draw[{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}] (0, 0.125) -- (0, -0.125);
+\draw[{Stealth[inset=0pt,scale=0.5]}-{Stealth[inset=0pt,scale=0.5]}] (0.125, 0) -- (-0.125, 0);
+},
+MilSymb land/lower/enhanced position location reporting system/.pic={
+\draw (0, 0.125) -- (0, -0.125);
+\draw (225:0.15) -- (0, 0) -- (315:0.15);
+},
+MilSymb land/lower/intermodal/.pic={
+\draw (0.15, 0.05) -- (-0.15, 0.05) -- (-0.15, 0.1) -- (-0.25, 0.025) -- (-0.15, -0.05) -- (-0.15, 0) -- (0.15, 0) -- (0.15, -0.05) -- (0.25, 0.025) -- (0.15, 0.1) -- cycle;
+},
+MilSymb land/lower/launcher/.pic={
+\draw (-0.25, -0.05) -- (0.25, 0.125) -- (0.25, -0.05);
+},
+MilSymb land/lower/mountain/.pic={
+\fill (-0.125, -0.16) -- (0.125, -0.16) -- (0, 0.1) -- cycle;
+},
+MilSymb land/lower/mountain/friendly/.pic={
+\pic {MilSymb land/lower/mountain};
+},
+MilSymb land/lower/mountain/hostile/.pic={
+\pic [yshift=-2.5] {MilSymb land/lower/mountain};
+},
+MilSymb land/lower/mountain/neutral/.pic={
+\pic {MilSymb land/lower/mountain};
+},
+MilSymb land/lower/mountain/unknown/.pic={
+\clip [yshift=9.6] \clipunknown;
+\pic [yshift=-6.5] {MilSymb land/lower/mountain};
+},
+MilSymb land/lower/radio relay line of sight/.pic={
+\draw circle(0.125);
+\clip circle(0.125);
+\fill (145:0.15) -- (325:0.15) -- (35:0.15) -- (215:0.15) -- cycle;
+},
+MilSymb land/lower/recovery unmanned systems/.pic={
+\draw (-0.35, 0.125) arc(-180:0:0.35 and 0.2);
+},
+MilSymb land/lower/riverine/.pic={
+\draw (-0.35, 0.125) arc(-180:0:0.35 and 0.2) -- cycle;
+},
+MilSymb land/lower/ski/.pic={
+\draw (0.05, 0.125) -- (-0.075, -0.075);
+\draw (0.1, -0.05) -- (0.04, -0.1);
+\draw (-0.05, 0.125) -- (0.075, -0.075);
+\draw (-0.1, -0.05) -- (-0.04, -0.1);
+},
+MilSymb land/lower/towed/.pic={
+\draw (-0.25, 0.05) -- (0.25,0.05);
+\draw (0.3, 0.05) circle (0.05);
+\draw (-0.3, 0.05) circle (0.05);
+},
+MilSymb land/lower/wheeled/.pic={
+\draw (0.24, 0.05) circle (0.08);
+\draw (0, 0.05) circle (0.08);
+\draw (-0.24, 0.05) circle (0.08);
+},
+%% EQUIPMENT SYMBOLS %%
+% MAIN %
+MilSymb equipment/main/weapon/.pic={
+\draw (0, 0.35) -- (0, -0.35);
+},
+MilSymb equipment/main/rifle/.pic={
+\pic {MilSymb equipment/main/weapon};
+\draw (0.2, 0.1) -- (0, 0.35) -- (-0.2, 0.1);
+},
+MilSymb equipment/main/single band/.pic={
+\draw [ultra thick] (0.2, -0.1) -- (-0.2, -0.1);
+},
+MilSymb equipment/main/double band/.pic={
+\draw [ultra thick] (0.2, -0.1) -- (-0.2, -0.1);
+\draw [ultra thick] (0.2, -0.2) -- (-0.2, -0.2);
+},
+MilSymb equipment/main/triple band/.pic={
+\draw [ultra thick] (0.2, 0) -- (-0.2, 0);
+\draw [ultra thick] (0.2, -0.1) -- (-0.2, -0.1);
+\draw [ultra thick] (0.2, -0.2) -- (-0.2, -0.2);
+},
+MilSymb equipment/main/single shot rifle/.pic={
+\pic {MilSymb equipment/main/rifle};
+\pic {MilSymb equipment/main/single band};
+},
+MilSymb equipment/main/semi automatic rifle/.pic={
+\pic {MilSymb equipment/main/rifle};
+\pic {MilSymb equipment/main/double band};
+},
+MilSymb equipment/main/automatic rifle/.pic={
+\pic {MilSymb equipment/main/rifle};
+\pic {MilSymb equipment/main/triple band};
+},
+MilSymb equipment/main/machine gun/.pic={
+\pic {MilSymb equipment/main/rifle};
+\draw (0.2, -0.35) -- (-0.2, -0.35);
+},
+MilSymb equipment/main/light machine gun/.pic={
+\pic {MilSymb equipment/main/machine gun};
+\pic {MilSymb equipment/main/single band};
+},
+MilSymb equipment/main/medium machine gun/.pic={
+\pic {MilSymb equipment/main/machine gun};
+\pic {MilSymb equipment/main/double band};
+},
+MilSymb equipment/main/heavy machine gun/.pic={
+\pic {MilSymb equipment/main/machine gun};
+\pic {MilSymb equipment/main/triple band};
+},
+MilSymb equipment/main/grenade launcher/.pic={
+\pic {MilSymb equipment/main/rifle};
+\draw (0,0) circle (0.1);
+},
+MilSymb equipment/main/light grenade launcher/.pic={
+\pic {MilSymb equipment/main/grenade launcher};
+\pic [yshift=-4]{MilSymb equipment/main/single band};
+},
+MilSymb equipment/main/medium grenade launcher/.pic={
+\pic {MilSymb equipment/main/grenade launcher};
+\pic [yshift=-2]{MilSymb equipment/main/double band};
+},
+MilSymb equipment/main/heavy grenade launcher/.pic={
+\pic {MilSymb equipment/main/grenade launcher};
+\pic [yshift=-5]{MilSymb equipment/main/triple band};
+},
+MilSymb equipment/main/flame thrower/.pic={
+\draw [ultra thick] (-0.1, -0.4) -- (-0.1, 0.3) to[out=90,in=90,looseness=2] (0.1, 0.3) -- (0.1, 0.275);
+},
+MilSymb equipment/main/air defence/.pic={
+\draw (0.2, -0.4) to[out=90,in=90,looseness=1.7] (-0.2, -0.4) -- cycle;
+\draw (0, -0.2) -- (0, 0.35);
+},
+MilSymb equipment/main/anti tank/.pic={
+\draw (0.2, -0.4) -- (0, -0.2) -- (-0.2, -0.4);
+\draw (0, -0.2) -- (0, 0.35);
+},
+MilSymb equipment/main/high trajectory indirect fire weapons system/.pic={
+\draw (0, -0.3) circle (0.1);
+\draw (0, -0.2) -- (0, 0.35);
+},
+MilSymb equipment/main/side bands/.pic={
+\draw (0.2, -0.2) -- (0.2, 0.2);
+\draw (-0.2, -0.2) -- (-0.2, 0.2);
+},
+MilSymb equipment/main/air defence gun/.pic={
+\pic {MilSymb equipment/main/air defence};
+\pic {MilSymb equipment/main/side bands};
+},
+MilSymb equipment/main/anti tank gun/.pic={
+\pic {MilSymb equipment/main/anti tank};
+\pic {MilSymb equipment/main/side bands};
+},
+MilSymb equipment/main/direct fire gun/.pic={
+\pic {MilSymb equipment/main/weapon};
+\pic {MilSymb equipment/main/side bands};
+},
+MilSymb equipment/main/recoilless gun/.pic={
+\pic {MilSymb equipment/main/rifle};
+\pic [yshift=-4] {MilSymb equipment/main/side bands};
+},
+MilSymb equipment/main/howitzer/.pic={
+\pic {MilSymb equipment/main/high trajectory indirect fire weapons system};
+\pic {MilSymb equipment/main/side bands};
+},
+MilSymb equipment/main/missile launcher/.pic={
+\pic {MilSymb equipment/main/weapon};
+\draw (0.2, -0.4) -- (0.2, 0.15) to[out=90,in=90,looseness=1.75] (-0.2, 0.15) -- (-0.2, -0.4);
+},
+MilSymb equipment/main/air defence missile launcher/.pic={
+\pic {MilSymb equipment/main/air defence};
+\draw (0.2, -0.4) -- (0.2, 0.15) to[out=90,in=90,looseness=1.75] (-0.2, 0.15) -- (-0.2, -0.4);
+},
+MilSymb equipment/main/anti tank missile launcher/.pic={
+\pic {MilSymb equipment/main/anti tank};
+\draw (0.2, -0.2) -- (0.2, 0.15) to[out=90,in=90,looseness=1.75] (-0.2, 0.15) -- (-0.2, -0.2);
+},
+MilSymb equipment/main/surface to surface missile launcher/.pic={
+\pic {MilSymb equipment/main/weapon};
+\draw (0.2, -0.35) -- (0.2, 0.15) to[out=90,in=90,looseness=1.75] (-0.2, 0.15) -- (-0.2, -0.35) -- cycle;
+},
+MilSymb equipment/main/mortar/.pic={
+\pic {MilSymb equipment/main/high trajectory indirect fire weapons system};
+\draw (0.2, 0.1) -- (0, 0.35) -- (-0.2, 0.1);
+},
+MilSymb equipment/main/single rocket launcher/.pic={
+\pic [yshift=-1.5]{MilSymb equipment/main/rifle};
+\draw (0.2, 0.2) -- (0, 0.45) -- (-0.2, 0.2);
+},
+MilSymb equipment/main/multiple rocket launcher/.pic={
+\pic {MilSymb equipment/main/single rocket launcher};
+\pic [yshift=-5] {MilSymb equipment/main/side bands};
+},
+MilSymb equipment/main/anti tank rocket launcher/.pic={
+\begin{scope}[yshift=-1.5]
+\pic {MilSymb equipment/main/anti tank};
+\draw (0.2, 0.1) -- (0, 0.35) -- (-0.2, 0.1);
+\end{scope}
+\draw (0.2, 0.2) -- (0, 0.45) -- (-0.2, 0.2);
+},
+MilSymb equipment/main/non lethal weapon/.pic={
+\pic {MilSymb equipment/main/weapon};
+\draw (0.2, 0.35) -- (-0.2, 0.35);
+},
+MilSymb equipment/main/non lethal grenade launcher/.pic={
+\pic {MilSymb equipment/main/non lethal weapon};
+\draw (0,0) circle (0.1);
+},
+MilSymb equipment/main/taser/.pic={
+\pic {MilSymb equipment/main/non lethal weapon};
+\pic {MilSymb text/normal={Z}};
+},
+MilSymb equipment/main/water cannon/.pic={
+\pic {MilSymb equipment/main/non lethal weapon};
+\pic {MilSymb text/normal={W}};
+},
+MilSymb equipment/main/armoured fighting vehicle/.pic={
+\draw (0, 0.2) -- (0.25, 0) -- (0, -0.2) -- (-0.25, 0) -- cycle;
+\draw [ultra thick] (0.275, 0.2) -- (0.275, -0.2);
+\draw [ultra thick] (-0.275, 0.2) -- (-0.275, -0.2);
+},
+MilSymb equipment/main/armoured fighting vehicle command and control/.pic={
+\pic {MilSymb equipment/main/armoured fighting vehicle};
+\pic {MilSymb text/small={C2}};
+},
+MilSymb equipment/main/armoured personnel carrier/.pic={
+\draw (0.275, 0.275) -- (0.275, -0.275) -- (-0.275 , -0.275) -- (-0.275, 0.275);
+\draw (0.275, 0.15) -- (0, 0.275) -- (-0.275, 0.15);
+},
+MilSymb equipment/main/armoured medical personnel carrier/.pic={
+\pic {MilSymb equipment/main/armoured personnel carrier};
+\draw (0, 0.275) -- (0, -0.275);
+\draw (0.275, -0.05) -- (-0.275, -0.05);
+},
+MilSymb equipment/main/armoured protected recovery vehicle/.pic={
+\pic {MilSymb multi/main/armoured};
+\pic [yscale=0.5, xscale=0.75] {MilSymb multi/main/maintenance};
+},
+MilSymb equipment/main/medical evacuation armoured protected vehicle/.pic={
+\pic {MilSymb multi/main/armoured};
+\pic {MilSymb multi/main/medic};
+},
+MilSymb equipment/main/tank/.pic={
+\draw (-0.35, 0.3) -- (-0.35, -0.3);
+\draw (0.35, 0.3) -- (0.35, -0.3);
+\draw (0.35, 0.2) -- (-0.35, 0.2);
+\draw (0.35, -0.2) -- (-0.35, -0.2);
+},
+MilSymb equipment/main/light tank/.pic={
+\pic {MilSymb equipment/main/tank};
+\pic [rotate=90, yshift=3]{MilSymb equipment/main/single band};
+},
+MilSymb equipment/main/medium tank/.pic={
+\pic {MilSymb equipment/main/tank};
+\pic [rotate=90]{MilSymb equipment/main/single band};
+\pic [rotate=90, yshift=6]{MilSymb equipment/main/single band};
+},
+MilSymb equipment/main/heavy tank/.pic={
+\pic {MilSymb equipment/main/tank};
+\pic [rotate=90, yshift=-2]{MilSymb equipment/main/single band};
+\pic [rotate=90, yshift=3]{MilSymb equipment/main/single band};
+\pic [rotate=90, yshift=8]{MilSymb equipment/main/single band};
+},
+MilSymb equipment/main/tank recovery vehicle/.pic={
+\pic {MilSymb equipment/main/tank};
+\pic [yscale=0.5, xscale=0.75] {MilSymb multi/main/maintenance};
+},
+MilSymb equipment/main/utility vehicle/.pic={
+\draw (-0.35, 0.3) -- (-0.35, -0.3) -- (0.35, -0.3) -- (0.35, 0.3) to[in=-90, out=-90, looseness=1] cycle;
+},
+MilSymb equipment/main/bridge mounted on utility vehicle/.pic={
+\pic {MilSymb equipment/main/utility vehicle};
+\pic [scale=0.75, yshift=-3] {MilSymb multi/main/bridge};
+},
+MilSymb equipment/main/fixed bridge/.pic={
+\pic {MilSymb multi/main/bridge};
+\draw (0, 0.15) -- (0, -0.15);
+},
+MilSymb equipment/main/folding girder bridge/.pic={
+\pic {MilSymb multi/main/bridge};
+\draw (0.1, 0.15) -- (-0.1, 0.15) -- (-0.1, -0.15) -- (0.1, -0.15);
+},
+MilSymb equipment/main/hollow deck bridge/.pic={
+\pic {MilSymb multi/main/bridge};
+\draw (0.1, 0.15) -- (-0.1, 0.15) -- (-0.1, -0.15) -- (0.1, -0.15) -- cycle;
+},
+MilSymb equipment/main/drill mounted on vehicle/.pic={
+\pic [scale=0.75, yshift=-4] {MilSymb multi/main/drill};
+\pic {MilSymb equipment/main/utility vehicle};
+},
+MilSymb equipment/main/earthmover/.pic={
+\draw (-0.25, 0.25) -- (-0.25, -0.25);
+\draw (0.25, 0.25) -- (0.25, -0.25);
+\draw (0.25, 0.2) -- (-0.25, 0.2);
+\draw (0.25, -0.2) -- (-0.25, -0.2);
+\draw (0, 0.2) -- (0, 0.35);
+\draw (0.3, 0.3) -- (0.175, 0.35) -- (-0.175, 0.35) -- (-0.3, 0.3);
+},
+MilSymb equipment/main/multifunctional earthmover/.pic={
+\pic {MilSymb equipment/main/earthmover};
+\pic {MilSymb text/small={MF}};
+},
+MilSymb equipment/main/mine clearing equipment/.pic={
+\draw (0, 0.2) -- (0, 0) -- (0.35, -0.2) -- (-0.35, -0.2) -- (0, 0);
+},
+MilSymb equipment/main/mine clearing vehicle/.pic={
+\pic [line join=bevel] {MilSymb equipment/main/mine clearing equipment};
+\draw (0.35, -0.25) -- (0.35, 0.25);
+\draw (-0.35, -0.25) -- (-0.35, 0.25);
+\draw (0.35, 0.2) -- (-0.35, 0.2);
+},
+MilSymb equipment/main/mine laying equipment/.pic={
+\pic {MilSymb multi/main/mine};
+\draw [ultra thick] (0.1, 0.3) -- (-0.1, 0.3);
+},
+MilSymb equipment/main/mine laying vehicle/.pic={
+\pic [scale=0.6, yshift=-7, transform shape] {MilSymb equipment/main/mine laying equipment};
+\pic {MilSymb equipment/main/utility vehicle};
+},
+MilSymb equipment/main/medical vehicle/.pic={
+\draw (0.35, -0.1) -- (-0.35, -0.1);
+\draw (0, 0.1) -- (0, -0.3);
+\pic {MilSymb equipment/main/utility vehicle};
+},
+MilSymb equipment/main/medical evacuation/.pic={
+\pic [scale=0.75, yshift=-4] {MilSymb multi/main/medic};
+\pic {MilSymb equipment/main/utility vehicle};
+},
+MilSymb equipment/main/mobile emergency physician/.pic={
+\draw (0.1, 0) -- (-0.1, 0);
+\pic {MilSymb equipment/main/medical vehicle};
+},
+MilSymb equipment/main/bus/.pic={
+\pic {MilSymb equipment/main/utility vehicle};
+\pic at (0, -0.1) {MilSymb text/normal={B}};
+},
+MilSymb equipment/main/semi trailer truck/.pic={
+\draw (0.21, -0.025) -- (0.35, -0.025);
+\draw (0.35, 0.05) -- (0.35, -0.1);
+\pic [scale=0.75, xshift=-2] {MilSymb equipment/main/utility vehicle};
+},
+MilSymb equipment/main/petroleum oil and lubricants vehicle/.pic={
+\pic {MilSymb equipment/main/utility vehicle};
+\pic [scale=0.75, yshift=-4] {MilSymb multi/main/petroleum oil and lubricants};
+},
+MilSymb equipment/main/water vehicle/.pic={
+\pic {MilSymb equipment/main/utility vehicle};
+\pic [scale=0.75, yshift=-4] {MilSymb multi/main/water};
+},
+MilSymb equipment/main/train locomotive/.pic={
+\draw (0.35, -0.3) -- (-0.35, -0.3) -- (-0.35, 0.3) -- (0, 0.3) -- (0, 0) -- (0.35, 0) -- cycle;
+},
+MilSymb equipment/main/computer system/.pic={
+\draw [ultra thick] (0.3, 0.3) rectangle (-0.3, -0.2);
+\draw [ultra thick] (0, -0.2) -- (0, -0.3);
+\draw [ultra thick, line cap=rect] (0.3, -0.3) -- (-0.3, -0.3);
+},
+MilSymb equipment/main/laser/.pic={
+\draw [line join=round, line cap=round] (0.1, -0.25) -- (-0.1, -0.225) -- (0.1, -0.2) -- (-0.1, -0.175) -- (0.1, -0.15) -- (0, -0.1375) -- (0, -0.0125) -- (-0.1, 0) -- (0.1, 0.025) -- (-0.1, 0.05) -- (0.1, 0.075) -- (0, 0.0875) -- (0, 0.25);
+\draw [line join=round, line cap=round] (0.1, 0.2) -- (0, 0.25) -- (-0.1, 0.2);
+},
+MilSymb equipment/main/land mine/.pic={
+\draw (0, 0) circle(0.25);
+},
+MilSymb equipment/main/antipersonnel land mine/.pic={
+\fill (0, 0) circle(0.25);
+\draw (135:0.35) -- (0, 0) -- (45:0.35);
+},
+MilSymb equipment/main/antitank land mine/.pic={
+\fill (0, 0) circle(0.25);
+},
+MilSymb equipment/main/sensor/.pic={
+\pic [scale=1.75] {MilSymb multi/main/sensor};
+},
+MilSymb equipment/main/sensor emplaced/.pic={
+\pic [scale=1.5] {MilSymb multi/main/sensor};
+\draw (0.15, 0.3) -- (0.1, 0.35) -- (0.05, 0.3) -- (0, 0.35) -- (-0.05, 0.3) -- (-0.1, 0.35) -- (-0.15, 0.3);
+},
+MilSymb equipment/main/booby trap/.pic={
+\draw (0, -0.2) ellipse(0.2 and 0.065);
+\begin{scope}
+\clip (0, -0.2) ellipse(0.2 and 0.065) [reverseclip];
+\draw (-0.2, -0.2) -- (0, 0.2) -- (0.2, -0.2);
+\end{scope}
+},
+% MOBILITY %
+MilSymb equipment/mobility/amphibious/.pic={
+\pic [scale=0.75] {MilSymb multi/main/amphibious};
+},
+MilSymb equipment/mobility/barge/.pic={
+\draw [fill=white] (0.6, 0.1) -- (-0.6, 0.1) to [out=-90,in=-90,looseness=0.5] (0.6, 0.1) -- cycle;
+},
+MilSymb equipment/mobility/over snow/.pic={
+\draw (-0.7, 0.3) to[in=180, out=-90] (-0.5, 0.1) -- (0.6, 0.1);
+},
+MilSymb equipment/mobility/pack animal/.pic={
+\pic [yscale=1.5, yshift=-1.85] {MilSymb multi/lower/pack animal};
+},
+MilSymb equipment/mobility/railroad/.pic={
+\draw (-0.6, 0.1) -- (0.6, 0.1);
+\draw [fill=white] (-0.5, 0) circle (0.1);
+\draw [fill=white] (-0.3, 0) circle (0.1);
+\draw [fill=white] (0.5, 0) circle (0.1);
+\draw [fill=white] (0.3, 0) circle (0.1);
+},
+MilSymb equipment/mobility/sled/.pic={
+\draw (-0.7, 0.3) to[in=180, out=-90] (-0.5, 0.1) -- (0.5, 0.1) to[in=-90, out=0] (0.7, 0.3);
+},
+MilSymb equipment/mobility/towed/.pic={
+\draw (-0.6, 0.1) -- (0.6, 0.1);
+\draw [fill=white] (-0.7, 0.1) circle (0.1);
+\draw [fill=white] (0.7, 0.1) circle (0.1);
+},
+MilSymb equipment/mobility/tracked/.pic={
+\draw [fill=white] (-0.6, 0.05) arc(180:90:0.05) -- (0.55, 0.1) arc(90:0:0.05) -- (0.6, -0.05) arc(0:-90:0.05) -- (-0.55, -0.1) arc(270:180:0.05) -- cycle;
+},
+MilSymb equipment/mobility/wheeled cross country/.pic={
+\draw [fill=white] (-0.5, 0) circle (0.1);
+\draw [fill=white] (0, 0) circle (0.1);
+\draw [fill=white] (0.5, 0) circle (0.1);
+\draw (-0.6, 0.1) -- (0.6, 0.1);
+},
+MilSymb equipment/mobility/wheeled limited mobility/.pic={
+\draw [fill=white] (-0.5, 0) circle (0.1);
+\draw [fill=white] (0.5, 0) circle (0.1);
+\draw (-0.6, 0.1) -- (0.6, 0.1);
+},
+MilSymb equipment/mobility/wheeled semi trailer/.pic={
+\draw [fill=white] (-0.5, 0) circle (0.1);
+\draw [fill=white] (-0.3, 0) circle (0.1);
+\draw [fill=white] (0.5, 0) circle (0.1);
+\draw [fill=white] (-0.6, 0.1) -- (0.6, 0.1);
+},
+MilSymb equipment/mobility/wheeled and tracked/.pic={
+\draw [fill=white] (-0.25, 0.05) arc(180:90:0.05) -- (0.55, 0.1) arc(90:0:0.05) -- (0.6, -0.05) arc(0:-90:0.05) -- (-0.2, -0.1) arc(270:180:0.05) -- cycle;
+\draw [fill=white] (-0.5, 0) circle (0.1);
+},
+%% INSTALLATION SYMBOLS %%
+% MAIN %
+MilSymb installation/main/electric power/.pic={
+\draw (-0.05, 0) .. controls (-0.06, 0.14) .. (0, 0.09) .. controls (0.03, 0.06) .. (0, 0.06) .. controls(-0.03, 0.06) .. (0, 0.09) .. controls(0.06, 0.14) .. (0.05, 0);
+\draw ($(-55:0.125) + (0, 0.075)$) arc (-55:235:0.125) arc (415:360:0.05) -- +(0, -0.08) arc(180:360:0.05035) -- +(0, 0.08) arc (180:125:0.05) -- cycle;
+},
+MilSymb installation/main/mass grave site/.pic={
+\draw (0.075, 0.175) rectangle (-0.075, -0.2);
+\draw (0, 0.175) -- (0, -0.2);
+\draw (0.075, 0.06) -- (-0.075, 0.06);
+\begin{scope}[xshift=5, yshift=0.7]
+\draw (0.075, 0.175) rectangle (-0.075, -0.2);
+\draw (0, 0.175) -- (0, -0.2);
+\draw (0.075, 0.06) -- (-0.075, 0.06);
+\end{scope}
+\begin{scope}[xshift=-5, yshift=0.7]
+\draw (0.075, 0.175) rectangle (-0.075, -0.2);
+\draw (0, 0.175) -- (0, -0.2);
+\draw (0.075, 0.06) -- (-0.075, 0.06);
+\end{scope}
+},
+MilSymb installation/main/mine/.pic={
+\draw (-0.2, -0.2) -- (0.2, 0.15);
+\draw [line cap=round, thick] ($(65:0.1) + (0.1, 0.1)$) arc (65:25:0.2);
+\begin{scope} [xscale=-1]
+\draw (-0.2, -0.2) -- (0.2, 0.15);
+\draw [line cap=round, thick] ($(65:0.1) + (0.1, 0.1)$) arc (65:25:0.2);
+\end{scope}
+},
+MilSymb installation/main/nuclear/.pic={
+\fontsize{15}{0}\selectfont
+\node at (0, 0) {\Radioactivity};},
+MilSymb installation/main/printed media/.pic={
+\draw (0.2, 0) -- (-0.2, 0);
+\draw [ultra thick] (0, 0.1) circle (0.085);
+\draw [ultra thick] (0, -0.1) circle (0.085);
+},
+MilSymb installation/main/civilian telecommunications/.pic={
+\draw [line join=bevel] (0.075, -0.2) -- (0, 0.1) -- (-0.075, -0.2);
+\draw (0.065, -0.05) -- (-0.065, -0.05);
+\draw (-0.325, 0.2) -- (-0.15, 0.125) -- (-0.15, 0.175) -- (0, 0.1) -- (0.15, 0.175) -- (0.15, 0.125) -- (0.325, 0.2);
+},
+% UPPER %
+MilSymb installation/upper/nuclear/.pic={
+\node at (0, 0) {\Radioactivity};},
+MilSymb installation/upper/petroleum oil and lubricants/.pic={
+\pic [scale=0.5] {MilSymb multi/main/petroleum oil and lubricants};},
+MilSymb installation/upper/railroad/.pic={
+\pic [scale=0.85, yshift=-4] {MilSymb multi/upperlower/railroad};},
+%% SEA SURFACE %%
+MilSymb seasurface/main/combatant/.pic={
+\begin{scope}[xshift=-4.5, yshift=-5]
+\draw (0.3213,0.0534) .. controls (0.3186,0.0295) and (0.3072,0.0136) ..
+ (0.2925,0.0063) .. controls (0.2777,-0.0010) and (0.2605,0.0001) ..
+ (0.2461,0.0068) .. controls (0.2317,0.0136) and (0.2198,0.0265) ..
+ (0.2163,0.0433) .. controls (0.2147,0.0513) and (0.2150,0.0601) ..
+ (0.2179,0.0694) .. controls (0.1304,0.1129) and (0.0223,0.1961) ..
+ (0.0013,0.3209) .. controls (0.0601,0.1809) and (0.1770,0.0912) ..
+ (0.3213,0.0534) -- cycle(0.2304,0.0633) .. controls (0.2287,0.0570) and
+ (0.2287,0.0513) .. (0.2298,0.0461) .. controls (0.2323,0.0340) and
+ (0.2409,0.0245) .. (0.2520,0.0193) .. controls (0.2630,0.0141) and
+ (0.2760,0.0135) .. (0.2864,0.0186) .. controls (0.2932,0.0220) and
+ (0.2992,0.0277) .. (0.3033,0.0370) .. controls (0.2845,0.0413) and
+ (0.2597,0.0498) .. (0.2304,0.0633) -- cycle(0.1785,0.1137) .. controls
+ (0.2446,0.1612) and (0.3061,0.2300) .. (0.3214,0.3209) .. controls
+ (0.2864,0.2377) and (0.2310,0.1723) .. (0.1614,0.1249)(0.1443,0.1138) ..
+ controls (0.1011,0.0871) and (0.0530,0.0670) .. (0.0014,0.0535) .. controls
+ (0.0041,0.0295) and (0.0154,0.0136) .. (0.0302,0.0063) .. controls
+ (0.0449,-0.0010) and (0.0621,0.0001) .. (0.0765,0.0069) .. controls
+ (0.0909,0.0137) and (0.1028,0.0265) .. (0.1063,0.0433) .. controls
+ (0.1079,0.0513) and (0.1076,0.0602) .. (0.1047,0.0694) .. controls
+ (0.1230,0.0785) and (0.1422,0.0893) .. (0.1613,0.1019)(0.0928,0.0461) ..
+ controls (0.0903,0.0340) and (0.0816,0.0245) .. (0.0706,0.0193) .. controls
+ (0.0596,0.0141) and (0.0466,0.0135) .. (0.0362,0.0186) .. controls
+ (0.0294,0.0220) and (0.0234,0.0277) .. (0.0193,0.0370) .. controls
+ (0.0381,0.0413) and (0.0629,0.0498) .. (0.0921,0.0633) -- (0.0921,0.0633) ..
+ controls (0.0938,0.0570) and (0.0938,0.0512) .. (0.0928,0.0461) -- cycle;
+\end{scope}
+},
+MilSymb seasurface/main/surface combatant/.pic={
+\fill (0, -0.2) -- (0.25, -0.05) -- (0.1, -0.05) -- (0.1, 0.025) -- (0.05, 0.025) -- (0.05, 0.075) -- (0.2, 0.075) -- (0.2, 0.135) -- (0.05, 0.135) -- (0.05, 0.2) -- (-0.05, 0.2) -- (-0.05, 0.135) -- (-0.2, 0.135) -- (-0.2, 0.075) -- (-0.05, 0.075) -- (-0.05, 0.025) -- (-0.1, 0.025) -- (-0.1, -0.05) -- (-0.25, -0.05) -- cycle;
+},
+MilSymb seasurface/main/carrier/.pic={
+\fill (0, -0.2) -- (0.3, 0.05) -- (-0.15, 0.05) -- (-0.15, 0.2) -- (-0.3, 0.2) -- (-0.3, 0.05) -- cycle;
+},
+MilSymb seasurface/main/amphibious warfare ship/.pic={
+\fill (0, -0.2) -- (0.3, 0.05) -- (0.15, 0.05) -- (0.15, 0.2) -- (-0.15, 0.2) -- (-0.15, 0.05) -- (-0.3, 0.05) -- cycle;
+\fill (0, -0.2) rectangle (0.25, -0.175);
+},
+MilSymb seasurface/main/mine warfare vessel/.pic={
+\fill (0, -0.2) -- (0.2, 0) -- (-0.2, 0) -- cycle;
+\fill (0, 0.025) circle (0.1);
+\draw[ultra thick] (0, 0.025) -- (0, 0.2);
+\draw[ultra thick] (0, 0.025) -- (135:0.2);
+\draw[ultra thick] (0, 0.025) -- (45:0.2);
+},
+MilSymb seasurface/main/sea surface decoy/.pic={
+\pic [xscale=0.75, yscale=0.75, xshift=-1, yshift=-0.5]{MilSymb multi/main/decoy};
+},
+MilSymb seasurface/main/patrol/.pic={
+\fill (0, -0.2) -- (0.3, 0) -- (0.125, 0) -- (0, 0.2) -- (-0.125, 0) -- (-0.3, 0) -- cycle;
+},
+MilSymb seasurface/main/military speedboat/.pic={
+\fill (-0.2, -0.2) -- (0.2, -0.2) -- (0.35, 0.05) -- (-0.15, 0.05) -- (-0.075, 0.2) -- (-0.175, 0.2) -- (-0.25, 0.05) -- (-0.35, 0.05) -- cycle;
+},
+MilSymb seasurface/main/military rigid hull inflatable boat/.pic={
+\pic {MilSymb seasurface/main/military speedboat};
+\fontsize{6}{0}\selectfont
+\node [text=MilSymb@fill] at (0, -0.075) {RB};
+},
+MilSymb seasurface/main/military jetski/.pic={
+\fill (0.3, -0.2) -- (-0.3, -0.2) -- (-0.35, -0.1) -- (-0.1, 0.2) -- (0, 0.2) -- (0, 0.1) -- (-0.05, 0.1) -- (-0.1, -0.05) -- (0.3, -0.05) -- (0.3, -0.2) -- cycle;
+},
+MilSymb seasurface/main/navy task organization unit/.pic={
+\draw (-0.25, -0.2) -- (-0.25, 0.1) -- (-0.15, 0.2);
+\draw (0.25, -0.2) -- (0.25, 0.1) -- (0.15, 0.2);
+},
+MilSymb seasurface/main/navy task force/.pic={
+\pic {MilSymb seasurface/main/navy task organization unit};
+\node at (0, -0.05) {TF};
+},
+MilSymb seasurface/main/navy task group/.pic={
+\pic {MilSymb seasurface/main/navy task organization unit};
+\node at (0, -0.05) {TG};
+},
+MilSymb seasurface/main/navy task unit/.pic={
+\pic {MilSymb seasurface/main/navy task organization unit};
+\node at (0, -0.05) {TU};
+},
+MilSymb seasurface/main/navy task element/.pic={
+\pic {MilSymb seasurface/main/navy task organization unit};
+\node at (0, -0.05) {TE};
+},
+MilSymb seasurface/main/convoy/.pic={
+\fill (0.35, 0.175) -- (-0.35, 0.175) -- (-0.35, -0.175) -- (-0.2, -0.175) -- (-0.2, 0.025) -- (0.2, 0.025) -- (0.2, -0.175) -- (0.35, -0.175) -- cycle;
+},
+MilSymb seasurface/main/non combatant/.pic={
+\fill (-0.25, -0.2) -- (-0.25, 0.05) -- (-0.15, 0.05) -- (-0.15, 0.2) -- (0.15, 0.2) -- (0.15, 0.05) -- (0.25, 0.05) -- (0.25, -0.2) -- cycle;
+},
+MilSymb seasurface/main/ship/.pic={
+\draw (-0.2, -0.2) -- (0.2, -0.2) -- (0.35, 0.05) -- (0.15, 0.05) -- (0.15, 0.2) -- (-0.15, 0.2) -- (-0.15, 0.05) -- (-0.35, 0.05) -- cycle;
+},
+MilSymb seasurface/main/cargo/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {A};
+},
+MilSymb seasurface/main/container ship/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {C};
+},
+MilSymb seasurface/main/dredge/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {D};
+},
+MilSymb seasurface/main/roll on roll off/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {E};
+},
+MilSymb seasurface/main/ferry/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {F};
+},
+MilSymb seasurface/main/heavy lift/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {H};
+},
+MilSymb seasurface/main/hovercraft/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {J};
+},
+MilSymb seasurface/main/lash carrier/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {L};
+},
+MilSymb seasurface/main/tanker/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {O};
+},
+MilSymb seasurface/main/passenger ship/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {P};
+},
+MilSymb seasurface/main/tug/.pic={
+\pic {MilSymb seasurface/main/ship};
+\node {T};
+},
+MilSymb seasurface/main/tow/.pic={
+\pic {MilSymb seasurface/main/ship};
+\fontsize{7}{0}\selectfont
+\node at (0,-0.08) {TW};
+},
+MilSymb seasurface/main/hazardous material transport ship/.pic={
+\pic {MilSymb seasurface/main/ship};
+\fontsize{7}{0}\selectfont
+\node at (0,-0.08) {HZ};
+},
+MilSymb seasurface/main/junk/.pic={
+\pic {MilSymb seasurface/main/ship};
+\fontsize{7}{0}\selectfont
+\node at (0,-0.08) {QJ};
+},
+MilSymb seasurface/main/barge/.pic={
+\pic {MilSymb seasurface/main/ship};
+\fontsize{7}{0}\selectfont
+\node at (0,-0.08) {YB};
+},
+MilSymb seasurface/main/fishing vessel/.pic={
+\draw (-0.15, -0.2) -- (0.15, -0.2) -- (0.25, 0.025) -- (-0.05, 0.025) -- (-0.05, 0.125) -- (-0.2, 0.125) -- (-0.2, 0.025) -- (-0.25, 0.025) -- cycle;
+\draw (0.025, 0.025) -- (0.025, 0.2);
+\draw (0.025, 0.025) -- +(45:0.2);
+},
+MilSymb seasurface/main/drifter/.pic={
+\pic {MilSymb seasurface/main/fishing vessel};
+\fontsize{6}{0}\selectfont
+\node at (0,-0.09) {DF};
+},
+MilSymb seasurface/main/trawler/.pic={
+\pic {MilSymb seasurface/main/fishing vessel};
+\fontsize{6}{0}\selectfont
+\node at (0,-0.09) {TR};
+},
+MilSymb seasurface/main/law enforcement vessel/.pic={
+\pic {MilSymb seasurface/main/ship};
+\draw (0.15, 0.05) -- (0, -0.2);
+\draw (0.2, 0.05) -- (0.05, -0.2);
+},
+MilSymb seasurface/main/civilian boat/.pic={
+\draw (-0.2, -0.2) -- (0.2, -0.2) -- (0.35, 0.05) -- (-0.15, 0.05) -- (-0.075, 0.2) -- (-0.175, 0.2) -- (-0.25, 0.05) -- (-0.35, 0.05) -- cycle;
+},
+MilSymb seasurface/main/civilian rigid hull inflatable boat/.pic={
+\pic {MilSymb seasurface/main/civilian boat};
+\fontsize{6}{0}\selectfont
+\node at (0, -0.075) {RB};
+},
+MilSymb seasurface/main/civilian speedboat/.pic={
+\pic {MilSymb seasurface/main/civilian boat};
+\fontsize{6}{0}\selectfont
+\node at (0, -0.075) {SP};
+},
+MilSymb seasurface/main/civilian jetski/.pic={
+\draw (0.3, -0.2) -- (-0.3, -0.2) -- (-0.35, -0.1) -- (-0.1, 0.2) -- (0, 0.2) -- (0, 0.1) -- (-0.05, 0.1) -- (-0.1, -0.05) -- (0.3, -0.05) -- (0.3, -0.2) -- cycle;
+},
+% UPPER %
+MilSymb seasurface/upper/drone equipped/.pic={
+\pic [xscale=0.6, yscale=0.9, yshift=-1.5] {MilSymb multi/main/unmanned systems};
+},
+%% SEA SUBSURFACE %%
+% MAIN %
+MilSymb seasubsurface/main/submarine/.pic={
+\fill (0.4, 0) -- (0.25, 0.15) -- (-0.25, 0.15) -- (-0.4, 0) -- (-0.25, -0.15) -- (0.25, -0.15) -- cycle;
+},
+MilSymb seasubsurface/main/sea surface/.pic={
+\draw [thick] (0.35, 0.05) -- (0.25, -0.05) -- (0.15, 0.05) -- (0.05, -0.05) -- (-0.05, 0.05) -- (-0.15, -0.05) -- (-0.25, 0.05) -- (-0.35, -0.05);
+},
+MilSymb seasubsurface/main/surfaced submarine/.pic={
+\pic [yshift=1.75, yscale=0.9]{MilSymb seasubsurface/main/submarine};
+\pic [yshift=-4, scale=0.9]{MilSymb seasubsurface/main/sea surface};
+},
+MilSymb seasubsurface/main/bottomed submarine/.pic={
+\pic [yshift=1.75, yscale=0.9]{MilSymb seasubsurface/main/submarine};
+\fill (-0.35, -0.2) rectangle (0.35, -0.1);
+},
+MilSymb seasubsurface/main/snorkelling submarine/.pic={
+\pic [yshift=-1.75, scale=0.9]{MilSymb seasubsurface/main/submarine};
+\pic [yshift=3.75, scale=0.75]{MilSymb seasubsurface/main/sea surface};
+\fill (0.025, 0) rectangle (-0.025, 0.2);
+},
+MilSymb seasubsurface/main/other submersible/.pic={
+\fill (0, -0.05) circle (0.35 and 0.15);
+\fill (0.1, 0) rectangle (-0.1, 0.2);
+},
+MilSymb seasubsurface/main/non submarine/.pic={
+\fontsize{6}{0}\selectfont
+\node at (0, 0.1) {NON};
+\node at (0, -0.1) {SUB};
+},
+MilSymb seasubsurface/main/military diver/.pic={
+\begin{scope}
+\path [use as bounding box] (0.3, 0.2) rectangle (-0.3, -0.2);
+\clip (0, 0.016) circle (0.075) [reverseclip];
+\fill (0, 0.016) circle (0.185);
+\fill (-0.25, -0.06) rectangle (0.25, 0.09);
+\fill (0, 0) -- (-0.2, -0.2) -- (0.2, -0.2) -- cycle;
+\end{scope}
+\fill (0, 0.016) circle (0.06);
+},
+MilSymb seasubsurface/main/civilian submersible/.pic={
+\draw ($(0, -0.05) + (106.6:0.35 and 0.15)$) arc (106.6:433.4:0.35 and 0.15) |- (0, 0.2) -| cycle;
+},
+MilSymb seasubsurface/main/torpedo/.pic={
+\fill (-0.35, 0) -- (-0.3, 0.075) -- (0.25, 0.075) -- (0.35, -0.075) -- (0.35, 0.075) -- (0.25, -0.075) -- (-0.3, -0.075) -- cycle;
+},
+MilSymb seasubsurface/main/underwater decoy/.pic={
+\pic [yshift=-1.5] {MilSymb multi/main/decoy};
+\fill (0.4, 0.2) rectangle (-0.4, 0.15);
+},
+MilSymb seasubsurface/main/half sea mine/.pic={
+\fill (0.2 ,0) arc (10:170:0.2 and 0.175) -- cycle;
+\fill (0.03, 0) rectangle (-0.03, 0.2);
+\scoped [shift={(150:0.1)}, rotate=45] {\fill (0.03, 0) -- (0.0125, 0.2) -- (-0.0125, 0.2) -- (-0.03, 0) -- cycle;}
+\scoped [shift={(30:0.1)}, rotate=315] {\fill (0.03, 0) -- (0.0125, 0.2) -- (-0.0125, 0.2) -- (-0.03, 0) -- cycle;}
+},
+MilSymb seasubsurface/main/sea mine decoy/.pic={
+\pic {MilSymb seasubsurface/main/half sea mine};
+\pic [scale=0.5, yshift=-7] {MilSymb multi/main/decoy};
+},
+MilSymb seasubsurface/main/bottomed sea mine decoy/.pic={
+\pic {MilSymb seasubsurface/main/half sea mine};
+\pic [scale=0.5, yshift=-5] {MilSymb multi/main/decoy};
+\fill (0.2, -0.2) rectangle (-0.2, -0.175);
+},
+MilSymb seasubsurface/main/moored sea mine decoy/.pic={
+\pic {MilSymb seasubsurface/main/half sea mine};
+\pic [scale=0.5, yshift=-5] {MilSymb multi/main/decoy};
+\draw [thick] (0.15, -0.2) -- (-0.15, -0.2);
+\draw [thick] (0, -0.2) -- (0, 0);
+},
+MilSymb seasubsurface/main/military seabed installation/.pic={
+\fill (-0.25, -0.2) -- (0.25, -0.2) -- (0.25, -0.075) -- (0.05, -0.075) -- (0.05, 0.025) -- (-0.125, 0.025) -- (-0.125, 0.2) -- (-0.25, 0.2) -- cycle;
+},
+MilSymb seasubsurface/main/civilian seabed installation/.pic={
+\draw (-0.25, -0.2) -- (0.25, -0.2) -- (0.25, -0.075) -- (0.05, -0.075) -- (0.05, 0.025) -- (-0.125, 0.025) -- (-0.125, 0.2) -- (-0.25, 0.2) -- cycle;
+},
+% MINES %
+MilSymb seasubsurface/mine/sea mine/.pic={
+\fill[fill=MilSymb@iconcolour] (0, -0.05) circle(0.25);
+\fill[fill=MilSymb@iconcolour] (0.05, 0) rectangle (-0.05, 0.25);
+\scoped [shift={(150:0.1)}, rotate=45] {\fill[fill=MilSymb@iconcolour] (0.075, 0) -- (0.02, 0.25) -- (-0.02, 0.25) -- (-0.075, 0) -- cycle;}
+\scoped [shift={(30:0.1)}, rotate=315] {\fill[fill=MilSymb@iconcolour] (0.075, 0) -- (0.02, 0.25) -- (-0.02, 0.25) -- (-0.075, 0) -- cycle;}
+},
+MilSymb seasubsurface/mine/sea mine-neutralised/.pic={
+\path (0, -0.05) circle(0.25);
+\path (0.05, 0) rectangle (-0.05, 0.25);
+\scoped [shift={(150:0.1)}, rotate=45] {\path (0.075, 0) -- (0.02, 0.25) -- (-0.02, 0.25) -- (-0.075, 0) -- cycle;}
+\scoped [shift={(30:0.1)}, rotate=315] {\path (0.075, 0) -- (0.02, 0.25) -- (-0.02, 0.25) -- (-0.075, 0) -- cycle;}
+\begin{scope} [even odd rule]
+\clip [shift={(150:0.1)}, rotate=45] (0.015, 0.26) rectangle (-0.015, -0.39) [reverseclip];
+\clip [shift={(30:0.1)}, rotate=315] (0.015, 0.26) rectangle (-0.015, -0.39) [reverseclip];
+\pic {MilSymb seasubsurface/mine/sea mine};
+\end{scope}
+},
+MilSymb seasubsurface/mine/bottomed sea mine/.pic={
+\pic [yshift=1.5] {MilSymb seasubsurface/mine/sea mine};
+\fill[fill=MilSymb@iconcolour] (0.25, -0.225) rectangle (-0.25, -0.3);
+},
+MilSymb seasubsurface/mine/bottomed sea mine-neutralised/.pic={
+\pic [yshift=1.5] {MilSymb seasubsurface/mine/sea mine-neutralised};
+\fill[fill=MilSymb@iconcolour] (0.25, -0.225) rectangle (-0.25, -0.3);
+},
+MilSymb seasubsurface/mine/moored sea mine/.pic={
+\pic [yshift=2.5] {MilSymb seasubsurface/mine/sea mine};
+\draw [thick, MilSymb@iconcolour] (0, -0.2) -- (0, -0.35);
+\draw [thick, MilSymb@iconcolour] (0.175, -0.35) -- (-0.175, -0.35);
+},
+MilSymb seasubsurface/mine/moored sea mine-neutralised/.pic={
+\pic [yshift=2.5] {MilSymb seasubsurface/mine/sea mine-neutralised};
+\draw [thick, MilSymb@iconcolour] (0, -0.2) -- (0, -0.35);
+\draw [thick, MilSymb@iconcolour] (0.175, -0.35) -- (-0.175, -0.35);
+},
+MilSymb seasubsurface/mine/floating sea mine/.pic={
+\pic [yshift=2.5] {MilSymb seasubsurface/mine/sea mine};
+\draw [thick, MilSymb@iconcolour] (-0.3, -0.3) -- (-0.25, -0.215) -- (-0.2, -0.3) -- (-0.15, -0.215) -- (-0.1, -0.3) -- (-0.05, -0.215) -- (0, -0.3) -- (0.05, -0.215) -- (0.1, -0.3) -- (0.15, -0.215) -- (0.2, -0.3) -- (0.25, -0.215) -- (0.3, -0.3);
+},
+MilSymb seasubsurface/mine/floating sea mine-neutralised/.pic={
+\pic [yshift=2.5] {MilSymb seasubsurface/mine/sea mine-neutralised};
+\draw [thick, MilSymb@iconcolour] (-0.3, -0.3) -- (-0.25, -0.215) -- (-0.2, -0.3) -- (-0.15, -0.215) -- (-0.1, -0.3) -- (-0.05, -0.215) -- (0, -0.3) -- (0.05, -0.215) -- (0.1, -0.3) -- (0.15, -0.215) -- (0.2, -0.3) -- (0.25, -0.215) -- (0.3, -0.3);
+},
+MilSymb seasubsurface/mine/sea mine in other position/.pic={
+\pic {MilSymb seasubsurface/mine/sea mine};
+\draw [thick, MilSymb@iconcolour] (0.3, -0.05) -- (0.2, -0.05);
+\draw [thick, MilSymb@iconcolour] (-0.3, -0.05) -- (-0.2, -0.05);
+},
+MilSymb seasubsurface/mine/sea mine in other position-neutralised/.pic={
+\pic {MilSymb seasubsurface/mine/sea mine-neutralised};
+\draw [thick, MilSymb@iconcolour] (0.3, -0.05) -- (0.2, -0.05);
+\draw [thick, MilSymb@iconcolour] (-0.3, -0.05) -- (-0.2, -0.05);
+},
+MilSymb seasubsurface/mine/rising sea mine/.pic={
+\pic [yshift=3.5] {MilSymb seasubsurface/mine/sea mine};
+\draw [thick, MilSymb@iconcolour] (0, -0.15) -- (0, -0.35);
+\fill[fill=MilSymb@iconcolour] (0.065, -0.425) -- (-0.065, -0.425) -- (0, -0.225);
+},
+MilSymb seasubsurface/mine/rising sea mine-neutralised/.pic={
+\pic [yshift=3.5] {MilSymb seasubsurface/mine/sea mine-neutralised};
+\draw [thick, MilSymb@iconcolour] (0, -0.15) -- (0, -0.35);
+\fill[fill=MilSymb@iconcolour] (0.065, -0.425) -- (-0.065, -0.425) -- (0, -0.225);
+},
+MilSymb seasubsurface/mine/unexploded ordanance/.pic={
+\fill (0, 0) circle(0.25);
+\fontsize{6}{0}\selectfont
+\node [text=MilSymb@fill] {UXO};
+},
+%% SPACE %%
+% MAIN %
+MilSymb space/main/military orbiter shuttle/.pic={
+\fill ($(0, 0.3)!0.35!(0.125, -0.15)$) -- (0.125, -0.15) -- (-0.125, -0.15) -- ($(-0.125, -0.15)!0.65!(0, 0.3)$) to[in=105, out=75] cycle;
+\draw (0, -0.20) -- (0, -0.15);
+},
+MilSymb space/main/civilian orbiter shuttle/.pic={
+\draw ($(0, 0.3)!0.35!(0.125, -0.15)$) -- (0.125, -0.15) -- (-0.125, -0.15) -- ($(-0.125, -0.15)!0.65!(0, 0.3)$) to[in=105, out=75] cycle;
+\draw (0, -0.20) -- (0, -0.15);
+},
+MilSymb space/main/military capsule/.pic={
+\fill ($(0.25, -0.2)!0.1!(0, 0.5)$) -- ($(0.25, -0.2)!0.5!(0, 0.5)$) to[in=75, out=105, looseness=0.75] ($(0, 0.5)!0.5!(-0.25, -0.2)$) -- ($(0, 0.5)!0.9!(-0.25, -0.2)$) to[in=285, out=255, looseness=0.55] cycle;
+},
+MilSymb space/main/civilian capsule/.pic={
+\draw ($(0.25, -0.2)!0.1!(0, 0.5)$) -- ($(0.25, -0.2)!0.5!(0, 0.5)$) to[in=75, out=105, looseness=0.75] ($(0, 0.5)!0.5!(-0.25, -0.2)$) -- ($(0, 0.5)!0.9!(-0.25, -0.2)$) to[in=285, out=255, looseness=0.55] cycle;
+},
+MilSymb space/main/military satellite/.pic={
+\fill (0.45, 0.075) rectangle (0.15, -0.075);
+\fill (0.075, 0.075) rectangle (-0.075, -0.075);
+\fill (-0.45, 0.075) rectangle (-0.15, -0.075);
+\draw (0.15, 0) -- (0.075, 0);
+\draw (-0.15, 0) -- (-0.075, 0);
+},
+MilSymb space/main/civilian satellite/.pic={
+\draw (0.45, 0.075) rectangle (0.15, -0.075);
+\draw (0.075, 0.075) rectangle (-0.075, -0.075);
+\draw (-0.45, 0.075) rectangle (-0.15, -0.075);
+\draw (0.15, 0) -- (0.075, 0);
+\draw (-0.15, 0) -- (-0.075, 0);
+},
+MilSymb space/main/anti satellite weapon/.pic={
+\pic {MilSymb space/main/military satellite};
+\draw [-{Stealth[scale=0.75]}] (0, -0.2) -- (0, 0.2);
+},
+MilSymb space/main/military astronomical satellite/.pic={
+\pic {MilSymb space/main/military satellite};
+\fill (0.04, 0.075) rectangle (-0.04, 0.2);
+\fill (0.02, -0.075) rectangle (-0.02, -0.2);
+},
+MilSymb space/main/civilian astronomical satellite/.pic={
+\pic {MilSymb space/main/civilian satellite};
+\draw (0.04, 0.075) -- (0.04, 0.2) -- (-0.04, 0.2) -- (-0.04, 0.075);
+\draw (0.02, -0.075) -- (0.02, -0.2) -- (-0.02, -0.2) -- (-0.02, -0.075);
+},
+MilSymb space/main/military bio satellite/.pic={
+\pic [yshift=-1] {MilSymb space/main/military satellite};
+\fill (-0.075, 0.13) circle (0.07);
+\fill ($(-0.075, 0.13) + (60:0.07)$) -- ++(-30:0.22) -- ++(0, -0.025) -- (-0.005, 0.13) -- cycle;
+},
+MilSymb space/main/civilian bio satellite/.pic={
+\pic [yshift=-1] {MilSymb space/main/civilian satellite};
+\draw (-0.075, 0.13) circle (0.07);
+\draw ($(-0.075, 0.13) + (60:0.07)$) -- ++(-30:0.22) -- ++(0, -0.025) -- (-0.005, 0.13);
+},
+MilSymb space/main/military communications satellite/.pic={
+\pic {MilSymb space/main/military satellite};
+\draw (0, 0.075) -- (0, 0.125);
+\draw (0, 0.125) arc (270:340:0.25 and 0.1);
+\draw (0, 0.125) arc (270:200:0.25 and 0.1);
+},
+MilSymb space/main/civilian communications satellite/.pic={
+\pic {MilSymb space/main/civilian satellite};
+\draw (0, 0.075) -- (0, 0.125);
+\draw (0, 0.125) arc (270:340:0.25 and 0.1);
+\draw (0, 0.125) arc (270:200:0.25 and 0.1);
+},
+MilSymb space/main/military earth observation satellite/.pic={
+\pic [yshift=3.75, scale=0.9] {MilSymb space/main/military satellite};
+\draw (0, 0.065) -- +(315:0.125);
+\draw (0, 0.065) -- +(225:0.125);
+\fill (0, -0.12) circle (0.08);
+},
+MilSymb space/main/civilian earth observation satellite/.pic={
+\pic [yshift=3.75, scale=0.9] {MilSymb space/main/civilian satellite};
+\draw (0, 0.065) -- +(315:0.125);
+\draw (0, 0.065) -- +(225:0.125);
+\draw (0, -0.12) circle (0.08);
+},
+MilSymb space/main/military miniaturised satellite/.pic={
+\pic [scale=0.6] {MilSymb space/main/military satellite};
+\draw (0.05, 0.2) -- (0, 0.1) -- (-0.05, 0.2);
+\draw (0.05, -0.2) -- (0, -0.1) -- (-0.05, -0.2);
+\draw (-0.4, 0.05) -- (-0.3, 0) -- (-0.4, -0.05);
+\draw (0.4, 0.05) -- (0.3, 0) -- (0.4, -0.05);
+},
+MilSymb space/main/civilian miniaturised satellite/.pic={
+\pic [scale=0.6] {MilSymb space/main/civilian satellite};
+\draw (0.05, 0.2) -- (0, 0.1) -- (-0.05, 0.2);
+\draw (0.05, -0.2) -- (0, -0.1) -- (-0.05, -0.2);
+\draw (-0.4, 0.05) -- (-0.3, 0) -- (-0.4, -0.05);
+\draw (0.4, 0.05) -- (0.3, 0) -- (0.4, -0.05);
+},
+MilSymb space/main/military navigational satellite/.pic={
+\pic [yshift=-3.75, scale=0.9] {MilSymb space/main/military satellite};
+\draw (0.1, -0.03) -- (0, 0.2) -- (-0.1, -0.03);
+\draw (-0.1, 0.15) arc (180:360:0.1);
+},
+MilSymb space/main/civilian navigational satellite/.pic={
+\pic [yshift=-3.75, scale=0.9] {MilSymb space/main/civilian satellite};
+\draw (0.1, -0.03) -- (0, 0.2) -- (-0.1, -0.03);
+\draw (-0.1, 0.15) arc (180:360:0.1);
+},
+MilSymb space/main/reconnaissance satellite/.pic={
+\pic [yshift=1] {MilSymb space/main/military satellite};
+\draw (-0.075, -0.05) -- +(250:0.1);
+\draw (-0.025, -0.05) -- +(260:0.1);
+\draw (0.025, -0.05) -- +(280:0.1);
+\draw (0.075, -0.05) -- +(290:0.1);
+},
+MilSymb space/main/military tether satellite/.pic={
+\pic [yshift=-3.75, scale=0.9] {MilSymb space/main/military satellite};
+\draw (0, -0.066) -- +(30:0.3);
+\fill (0, -0.066) +(30:0.375) circle(0.075);
+},
+MilSymb space/main/civilian tether satellite/.pic={
+\pic [yshift=-3.75, scale=0.9] {MilSymb space/main/civilian satellite};
+\draw (0, -0.065) -- +(30:0.3);
+\draw (0, -0.065) +(30:0.375) circle(0.075);
+},
+MilSymb space/main/military weather satellite/.pic={
+\pic [yshift=-3.75, scale=0.9] {MilSymb space/main/military satellite};
+\node at (0, 0.07) {WX};
+},
+MilSymb space/main/civilian weather satellite/.pic={
+\pic [yshift=-3.75, scale=0.9] {MilSymb space/main/civilian satellite};
+\node at (0, 0.07) {WX};
+},
+MilSymb space/main/civilian space station/.pic={
+\begin{scope}
+\clip (0.025, 0) rectangle (-0.025, 0.2) [reverseclip];
+\draw (0, 0) circle (0.15 and 0.06);
+\draw (0, -0.0125) circle (0.25 and 0.1);
+\end{scope}
+\draw (0.025, 0) -- (0.025, 0.175) arc(0:180:0.025) -- (-0.025, 0);
+\begin{scope}
+\clip (0, 0) circle (0.15 and 0.06) (0, -0.0125) circle (0.25 and 0.1) [reverseclip];
+\draw (0.025, 0) -- (0.025, -0.175) arc(360:180:0.025) -- (-0.025, 0);
+\end{scope}
+},
+MilSymb space/main/military space station/.pic={
+\fill [even odd rule] (0, 0) circle (0.15 and 0.06) (0, -0.0125) circle (0.25 and 0.1);
+\fill (0.025, 0) -- (0.025, 0.175) arc(0:180:0.025) -- (-0.025, -0.175) arc(180:360:0.025) -- cycle;
+},
+% DEBRIS %
+MilSymb space/debris/small/.pic={
+\begin{scope}
+\clip circle (0.5);
+\draw (0.15, 0.5) -- (0, 0.2) -- (-0.15, 0.5);
+\draw (0.15, -0.5) -- (0, -0.2) -- (-0.15, -0.5);
+\draw (0.5, 0.15) -- (0.2, 0) -- (0.5, -0.15);
+\draw (-0.5, 0.15) -- (-0.2, 0) -- (-0.5, -0.15);
+\end{scope}
+},
+MilSymb space/debris/large/.pic={
+\begin{scope}
+\clip circle (0.5);
+\draw (0.15, 0.2) -- (0, 0.5) -- (-0.15, 0.2);
+\draw (0.15, -0.2) -- (0, -0.5) -- (-0.15, -0.2);
+\draw (-0.2, 0.15) -- (-0.5, 0) -- (-0.2, -0.15);
+\draw (0.2, 0.15) -- (0.5, 0) -- (0.2, -0.15);
+\end{scope}
+},
+%% ACTIVITY %%
+% FULLFRAME %
+MilSymb activity/main/explosion/.pic={
+\node [starburst, draw, minimum width=0.9cm, minimum height=0.9cm, starburst point height=0.25cm, starburst points=12] {};
+},
+MilSymb activity/main/improvised explosive device explosion/.pic={
+\node [starburst, draw, minimum width=0.9cm, minimum height=0.9cm, starburst point height=0.25cm, starburst points=12] {};
+\fontsize{6}{0}\selectfont
+\node {IED};
+},
+MilSymb activity/main/radio and television psychological operations/.pic={
+\pic {MilSymb multi/main/signal/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/psychological operations};
+},
+% MAIN %
+MilSymb activity/main/arrest/.pic={
+\pic [scale=0.75] {MilSymb multi/main/individual};
+\draw circle (0.2);
+},
+MilSymb activity/main/automobile/.pic={
+\begin{scope}
+\clip (0.2, -0.15) circle (0.05) (-0.2, -0.15) circle (0.05) [reverseclip];
+\draw (0.3, -0.15) -- (-0.3, -0.15) -- (-0.3, 0.025) -- (-0.1, 0.025) -- (-0.1, 0.2) -- (0.1, 0.2) -- (0.1, 0.025) -- (0.3, 0.025) -- cycle;
+\draw (0.075, 0.025) rectangle (-0.075, 0.175);
+\end{scope}
+\draw (0.2, -0.15) circle (0.05);
+\draw (-0.2, -0.15) circle (0.05);
+},
+MilSymb activity/main/drive by shooting/.pic={
+\draw (0.25, -0.15) circle (0.05);
+\draw (-0.25, -0.15) circle (0.05);
+\draw (0.3, -0.1) -- (-0.3, -0.1);
+\draw (0, -0.1) -- (0, 0.2);
+\draw (0.075, 0.1) -- (0, 0.2) -- (-0.075, 0.1);
+},
+MilSymb activity/main/graffiti/.pic={
+\draw (0.05, 0.2) arc (90:270:0.05) arc (450:270:0.05) arc (90:270:0.05) arc (450:270:0.05);
+\draw (-0.05, 0.2) arc (90:270:0.05) arc (450:270:0.05) arc (90:270:0.05) arc (450:270:0.05);
+},
+MilSymb activity/main/patrolling/.pic={
+\draw (0.3, 0.05) -- (-0.05, 0.05) -- (0.05, -0.05) -- (-0.4, -0.05);
+\draw (-0.3, 0) -- (-0.4, -0.05) -- (-0.3, -0.1);
+\fontsize{4}{0}\selectfont
+\node [anchor=west] at (0.3, 0.05) {P};
+},
+MilSymb activity/main/poisoning/.pic={
+\draw (0, 0.055) circle (0.145);
+\draw (0.3, 0) -- (-0.3, -0.2);
+\draw (-0.3, 0) -- (0.3, -0.2);
+},
+MilSymb activity/main/searching/.pic={
+\draw (-0.4, 0) arc (180:0:0.1) arc (180:360:0.1) arc (180:0:0.1) arc (180:270:0.1) -- +(0.1, 0);
+\draw (0.3, -0.05) -- (0.4, -0.1) -- (0.3, -0.15);
+},
+% UPPER %
+MilSymb activity/upper/house to house/.pic={
+\draw (-0.075, -0.1) rectangle (0.075, 0.05);
+\draw (-0.075, 0.05) -- (-0.1, 0.05) -- (0, 0.125) -- (0.1, 0.05) -- (0.075, 0.05);
+},
+%% MULTIPLE CLASS SYMBOLS %%
+% FULLFRAME %
+MilSymb multi/main/signal/friendly/.pic={
+\clip \clipfriendly;
+\draw (-0.75, 0.5) -- (0, -0.1) -- (0, 0.1) -- (0.75, -0.5);
+},
+MilSymb multi/main/signal/hostile/.pic={
+\clip \cliphostile;
+\draw (-0.6, 0.5) -- (0, -0.1) -- (0, 0.1) -- (0.6, -0.5);
+},
+MilSymb multi/main/signal/neutral/.pic={
+\clip \clipneutral;
+\draw (-0.5, 0.5) -- (0, -0.1) -- (0, 0.1) -- (0.5, -0.5);
+},
+MilSymb multi/main/signal/unknown/.pic={
+\clip \clipunknown;
+\draw (-0.75, 0.5) -- (0, -0.1) -- (0, 0.1) -- (0.75, -0.5);
+},
+% MAIN %
+MilSymb multi/main/amphibious/.pic={
+\draw (0.81, 0) to[out=90,in=90,looseness=2.25] (0.63, 0) to[out=-90,in=-90,looseness=2.25] (0.45, 0) to[out=90,in=90,looseness=2.25] (0.27, 0) to[out=-90,in=-90,looseness=2.25] (0.09, 0) to[out=90,in=90,looseness=2.25] (-0.09, 0) to[out=-90,in=-90,looseness=2.25] (-0.27, 0) to[out=90,in=90,looseness=2.25] (-0.45, 0) to[out=-90,in=-90,looseness=2.25] (-0.63, 0) to[out=90,in=90,looseness=2.25] (-0.81, 0);
+},
+MilSymb multi/main/antenna/.pic={
+\draw (0, -0.3) -- (0, 0.3);
+\draw (-0.125, 0.3) -- (0, 0.2) -- (0.125, 0.3);
+},
+MilSymb multi/main/ammunition/.pic={
+\draw (0.175, -0.175) -- (-0.175,-0.175);
+\draw (0.125, -0.175) -- (0.125, 0) to[out=90,in=90,looseness=2.75] (-0.125, 0) -- (-0.125, -0.175);
+},
+MilSymb multi/main/armoured/.pic={
+\draw (-0.275, 0.2) arc(90:270:0.2) -- (0.275, -0.2) arc(270:450:0.2) -- cycle;
+},
+MilSymb multi/main/bridge/.pic={
+\draw (0.35, -0.15) -- (0.25, -0.05) -- (-0.25, -0.05) -- (-0.35, -0.15);
+\scoped[yscale=-1]{\draw (0.35, -0.15) -- (0.25, -0.05) -- (-0.25, -0.05) -- (-0.35, -0.15);}
+},
+MilSymb multi/main/petroleum oil and lubricants/.pic={
+\draw (0, -0.175) -- (0, 0) -- (0.15, 0.175) -- (-0.15, 0.175) -- (0, 0);
+},
+MilSymb multi/main/chemical biological radiological nuclear/.pic={
+\draw [ultra thick] (0.15,-0.2) arc(0:90:0.45 and 0.375);
+\draw [fill] (-0.29,0.1) circle(0.096);
+\begin{scope}[xscale=-1]
+\draw [ultra thick] (0.15,-0.2) arc(0:90:0.45 and 0.375);
+\draw [fill] (-0.29,0.1) circle(0.096);
+\end{scope}
+},
+MilSymb multi/main/drill/.pic={
+\fill (-0.1,-0.2) -- (0.1,-0.2) -- (0.2, 0.2) -- (-0.2, 0.2) -- cycle;
+},
+MilSymb multi/main/decoy/.pic={
+\fill (0.2, 0) -- (0.4, 0.15) -- (0.4, -0.15) -- cycle;
+\fill (-0.1, 0) -- (0.1, 0.15) -- (0.1, -0.15) -- cycle;
+\fill (-0.4, 0) -- (-0.2, 0.15) -- (-0.2, -0.15) -- cycle;
+},
+MilSymb multi/main/diver/.pic={
+\draw (0, 0.016) circle (0.075);
+\draw (0, 0.016) circle (0.185);
+\begin{scope}
+\path [use as bounding box] (0.3, 0.2) rectangle (-0.3, -0.2);
+\clip (0, 0.016) circle (0.185) [reverseclip];
+\draw (-0.25, -0.06) rectangle (0.25, 0.09);
+\draw (0, 0) -- (-0.2, -0.2) -- (0.2, -0.2) -- cycle;
+\end{scope}
+},
+MilSymb multi/main/individual/.pic={
+\draw (0, 0.125) circle (0.075);
+\draw (0, 0.05) -- (0, -0.2);
+\draw (0.075,0) -- (-0.075,0);
+},
+MilSymb multi/main/aviation fixed wing/.pic={
+\fill (-0.36,0.125) arc (77:275:0.075 and 0.125) -- (0,0) -- cycle;
+\begin{scope}[xscale=-1]
+\fill (-0.36,0.125) arc (77:275:0.075 and 0.125) -- (0,0) -- cycle;
+\end{scope}},
+MilSymb multi/main/aviation rotary wing/.pic={
+\fill (0.44, 0.15) -- (0.44, -0.15) -- (-0.44, 0.15) -- (-0.44, -0.15) -- cycle;},
+MilSymb multi/main/field artillery/.pic={
+\fill circle(0.2);},
+MilSymb multi/main/killing victim/.pic={
+\pic {MilSymb multi/main/individual};
+\draw (-0.41, 0.2) -- (0.41, -0.2);
+},
+MilSymb multi/main/victim of an attempted crime/.pic={
+\pic {MilSymb multi/main/individual};
+\draw [dashed] (-0.41, 0.2) -- (0.41, -0.2);
+},
+MilSymb multi/main/maintenance/.pic={
+\draw [ultra thick] (0.275, 0) -- (-0.275, 0);
+\draw [ultra thick] (0.4, -0.15) .. controls (0.275, -0.145) .. (0.275, 0) .. controls (0.275, 0.145) .. (0.4, 0.15);
+\begin{scope} [xscale=-1]
+\draw [ultra thick] (0.4, -0.15) .. controls (0.275, -0.145) .. (0.275, 0) .. controls (0.275, 0.145) .. (0.4, 0.15);
+\end{scope}
+},
+MilSymb multi/main/medic/.pic={
+\fill (-0.075, -0.2) -- (0.075, -0.2) -- (0.075, 0.2) -- (-0.075, 0.2) -- cycle;
+\begin{scope}[rotate=90]
+\fill (-0.075, -0.2) -- (0.075, -0.2) -- (0.075, 0.2) -- (-0.075, 0.2) -- cycle;
+\end{scope}
+},
+MilSymb multi/main/medical/.pic={
+\draw (M.north) -- (M.south);
+\draw (M.east) -- (M.west);
+},
+MilSymb multi/main/medical treatment facility/.pic={
+\draw (M.north) -- (M.south);
+\draw (M.east) -- (M.west);
+\draw ($(M.east)!0.25!(M.west) + (0, 0.2)$) -- ($(M.east)!0.25!(M.west) + (0, -0.2)$);
+\draw ($(M.east)!0.75!(M.west) + (0, 0.2)$) -- ($(M.east)!0.75!(M.west) + (0, -0.2)$);
+},
+MilSymb multi/main/mine/.pic={
+\pic [yscale=0.5, xscale=0.6] {MilSymb multi/main/field artillery};
+\draw [thick] (0, -0.2) -- (0, 0.2);
+\begin{scope}[rotate=25]
+\draw [thick] (0, -0.2) -- (0, 0.2);
+\end{scope}
+\begin{scope}[rotate=-25]
+\draw [thick] (0, -0.2) -- (0, 0.2);
+\end{scope}
+},
+MilSymb multi/main/person/.pic={
+\draw (0, 0.125) circle (0.075);
+\draw (0, 0.05) -- (0, -0.1);
+\draw (0.05, -0.2) -- (0, -0.1) -- (-0.05, -0.2);
+\draw (0.075,0) -- (-0.075,0);
+},
+MilSymb multi/main/psychological operations/.pic={
+\draw [line join=round] (0.15, 0.2) -- (0.15, -0.2) -- (0.025, -0.08) -- (-0.15, -0.08) -- (-0.15, 0.08) -- (0.025, 0.08) -- cycle;
+\draw (0.15, -0.1) -- (0.225, -0.1);
+\draw (0.15, -0.0325) -- (0.225, -0.0325);
+\draw (0.15, 0.0325) -- (0.225, 0.0325);
+\draw (0.15, 0.1) -- (0.225, 0.1);
+},
+MilSymb multi/main/psychological operations filled/.pic={
+\draw [line join=round, fill] (0.15, 0.2) -- (0.15, -0.2) -- (0.025, -0.08) -- (-0.15, -0.08) -- (-0.15, 0.08) -- (0.025, 0.08) -- cycle;
+\draw (0.15, -0.1) -- (0.225, -0.1);
+\draw (0.15, -0.0325) -- (0.225, -0.0325);
+\draw (0.15, 0.0325) -- (0.225, 0.0325);
+\draw (0.15, 0.1) -- (0.225, 0.1);
+},
+MilSymb multi/main/radar/.pic={
+\begin{scope} [yshift=1]
+\draw (135:0.225) arc (150:290:0.26);
+\begin{scope}
+\clip (190:0.2) rectangle (0.3, 0.2);
+\draw (180:0.2) -- (0,0.16) -- (0,0) -- (0.2, 0.16);
+\end{scope}
+\end{scope}
+},
+MilSymb multi/main/sailing boat/.pic={
+\draw (-0.15, -0.2) -- (0.15, -0.2) -- (0.25, -0.025) -- (-0.25, -0.025) -- cycle;
+\draw (0, -0.025) -- (0, 0.2);
+\draw (0.025, 0) -- (0.025, 0.19) -- (0.225, 0) -- cycle;
+},
+MilSymb multi/main/transportation/.pic={
+\draw (0, 0) circle (0.2);
+\draw (0:-0.2) -- (0:0.2);
+\draw (90:-0.2) -- (90:0.2);
+\draw (45:-0.2) -- (45:0.2);
+\draw (-45:-0.2) -- (-45:0.2);
+},
+MilSymb multi/main/naval/.pic={
+\fontsize{15}{0}\selectfont
+\node at (0, 0) {$\anchor$};},
+MilSymb multi/main/unmanned systems/.pic={
+\fill (0, -0.1) -- (0.45, 0.05) -- (0.45,0.1) -- (0, 0.025) -- (-0.45, 0.1) -- (-0.45, 0.05) -- cycle;},
+MilSymb multi/main/civilian unmanned systems/.pic={
+\draw (0, -0.1) -- (0.45, 0.05) -- (0.45,0.1) -- (0, 0.025) -- (-0.45, 0.1) -- (-0.45, 0.05) -- cycle;},
+MilSymb multi/main/quartermaster/.pic={
+\draw (0.325, 0.05) circle (0.125);
+\draw (0.2, 0.05) -- (-0.45, 0.05);
+\draw (-0.35, 0.05) -- (-0.35, -0.15);
+\draw (-0.2, 0.05) -- (-0.2, -0.15);
+\draw (-0.35, -0.075) -- (-0.2, -0.075);
+},
+MilSymb multi/main/engineer/.pic={
+\draw (0.4, -0.2) -- (0.4, 0.2) -- (-0.4, 0.2) -- (-0.4, -0.2);
+\draw (0, 0.2) -- (0, -0.2);
+},
+MilSymb multi/main/medical/.pic={
+\draw (M.north) -- (M.south);
+\draw (M.east) -- (M.west);
+},
+MilSymb multi/main/major end/.pic={
+\draw [thick] (0.3, 0.05) arc (55:125:0.5);
+\fill (0.35, 0) circle (0.1);
+\fill (-0.35, 0) circle (0.1);
+},
+MilSymb multi/main/repair parts/.pic={
+\draw (0, 0) circle (0.1);
+\begin{scope}
+\clip (0, 0) circle (0.1) [reverseclip];
+\draw (90:0.2) -- (90:-0.2);
+\draw (45:0.2) -- (45:-0.2);
+\draw (-45:0.2) -- (-45:-0.2);
+\draw (0:0.2) -- (0:-0.2);
+\end{scope}
+},
+MilSymb multi/main/missile/.pic={
+\draw (0, 0.425) -- (0, -0.4);
+\draw (0.15, -0.4) -- (0.15, 0.25) to[out=90,in=90,looseness=2] (-0.15, 0.25) -- (-0.15, -0.4);
+},
+MilSymb multi/main/sensor/.pic={
+\fill (0, -0.2) arc (180:90:0.2) arc (270:180:0.2) arc (0:-90:0.2) arc (90:0:0.2) -- cycle;
+},
+MilSymb multi/main/water/.pic={
+\draw (-0.3, 0.05) -- (0, 0.05) to[in=90, out=0] (0.3, -0.2);
+\draw (0, 0.05) -- (0, 0.2);
+\draw (0.075, 0.2) -- (-0.075, 0.2);
+},
+MilSymb multi/main/water purification/.pic={
+\pic {MilSymb multi/main/water};
+\fontsize{4}{0}\selectfont
+\node at (-0.1,-0.1) {PURE};
+},
+% UPPER %
+MilSymb multi/upper/naval/.pic={
+\node at (0, 0) {$\anchor$};
+},
+MilSymb multi/upper/medic/.pic={
+\pic [scale=0.7] {MilSymb multi/main/medic};
+},
+MilSymb multi/upper/runway/.pic={
+\draw (-0.1, -0.125) -- (0.025, 0.1);
+\draw (-0.15, -0.075) -- (0.15, -0.075);
+},
+% LOWER %
+MilSymb multi/lower/pack animal/.pic={
+\draw (-0.25,-0.05) -- (-0.125,0.125) -- (0, -0.05) -- (0.125, 0.125) -- (0.25, -0.05);
+},
+% UPPER/LOWER %
+MilSymb multi/upperlower/maintenance/.pic={
+\pic [scale=0.5, yshift=-1.75] {MilSymb multi/main/maintenance};
+},
+MilSymb multi/upperlower/railroad/.pic={
+\draw (0.36, 0.12) -- (-0.36, 0.12);
+\draw (0.3, 0.06) circle (0.06);
+\draw (0.18, 0.06) circle (0.06);
+\draw (-0.3, 0.06) circle (0.06);
+\draw (-0.18, 0.06) circle (0.06);
+},
+%% SUPPLY %%
+MilSymb supply/class 1/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb text/normal={I}};
+},
+MilSymb supply/class 2/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb text/normal={II}};
+},
+MilSymb supply/class 3/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/petroleum oil and lubricants};
+},
+MilSymb supply/class 4/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb text/normal={IV}};
+},
+MilSymb supply/class 5/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/ammunition};
+},
+MilSymb supply/class all/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb text/normal={ALL}};
+},
+MilSymb supply/class US 1/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\draw (0.075, 0.2) to[out=210, in=150, looseness=1] (0.075, -0.2) to[out=180, in=180, looseness=1.5] (0.075, 0.2) -- cycle;
+},
+MilSymb supply/class US 2/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/quartermaster};
+},
+MilSymb supply/class US 3/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/petroleum oil and lubricants};
+},
+MilSymb supply/class US 4/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/engineer};
+},
+MilSymb supply/class US 5/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/ammunition};
+},
+MilSymb supply/class US 6/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/person};
+},
+MilSymb supply/class US 7/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/major end};
+},
+MilSymb supply/class US 8/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\draw (0, -0.25) -- (M.north);
+\pic {MilSymb supply/medicalbar/\MilSymb@selectedfaction};
+},
+MilSymb supply/class US 9/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb multi/main/repair parts};
+},
+MilSymb supply/class US 10/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\pic {MilSymb text/normal={CA}};
+},
+MilSymb supply/medicalbar/friendly/.pic={
+\draw (0.75, 0.15) -- (-0.75, 0.15);
+},
+MilSymb supply/medicalbar/hostile/.pic={
+\draw (0.5, 0.2) -- (-0.5, 0.2);
+},
+MilSymb supply/medicalbar/neutral/.pic={
+\draw (0.5, 0.15) -- (-0.5, 0.15);
+},
+MilSymb supply/medicalbar/unknown/.pic={
+\draw (0.65, 0.2) -- (-0.65, 0.2);
+},
+MilSymb supply/text/.pic={
+\pic {MilSymb land/main/supply/\MilSymb@selectedfaction};
+\fontsize{10}{0}\selectfont
+\node {#1};
+},
+%% TEMPLATES %%
+MilSymb text/normal/.pic={
+\fontsize{10}{0}\selectfont
+\node {#1};},
+MilSymb text/squashed/.pic={
+\fontsize{10}{0}\selectfont
+\node [xscale=0.7] {#1};},
+MilSymb text/small/.pic={
+\fontsize{6}{0}\selectfont
+\node {#1};},
+MilSymb text/smallsquashed/.pic={
+\fontsize{6}{0}\selectfont
+\node [xscale=0.7] {#1};},
+%% BOILERPLATE %%
+uncertainline/.style={postaction={draw=black,line cap=round, dash pattern= on 0pt off 1pt,dash phase=0pt}, draw=white,line cap=round,dash pattern= on 0pt off 1pt,dash phase=0.5pt},
+/MilSymb/.search also={/tikz},
+/MilSymb/.cd,
+fill/.code={\colorlet{MilSymb@fill}{#1}},
+line/.store in=\MilSymb@line,
+shape/.store in=\MilSymb@shape,
+scale/.store in=\MilSymb@scale,
+SymbC/.store in=\MilSymb@SymbC,
+SymbCT/.store in=\MilSymb@SymbCT,
+SymbU/.store in=\MilSymb@SymbU,
+SymbUT/.store in=\MilSymb@SymbUT,
+SymbL/.store in=\MilSymb@SymbL,
+SymbLT/.store in=\MilSymb@SymbLT,
+monochrome/.style={/MilSymb/fill=offwhite},
+frame status/.is choice,
+frame status/normal/.style={/MilSymb/line=solid},
+frame status/anticipated/.style={/MilSymb/line=dashed},
+frame status/uncertain/.style={/MilSymb/line=uncertainline},
+fill=gray,
+frame status=normal,
+scale=1,
+}
+\newcommand*{\clipfriendly}{
+ (-0.75, -0.5) rectangle (0.75, 0.5)
+}
+\newcommand*{\cliphostile}{
+ (0, -0.705) -- (-0.705, 0) -- (0, 0.705) -- (0.705, 0) -- cycle
+}
+\newcommand*{\clipneutral}{
+ (0.5, -0.5) rectangle (-0.5, 0.5)
+}
+\newcommand*{\clipunknown}{
+ (45:0.5) to[out=90,in=90,looseness=1.7] (135:0.5) to[out=180,in=180,looseness=1.7] (225:0.5) to[out=270, in=270, looseness=1.7] (315:0.5) to[out=0, in=0, looseness=1.7] (45:0.5) -- cycle
+}
+\newacro{high}[HA]{}
+\newacro{medium}[MA]{}
+\newacro{low}[LA]{}
+\newacro{highS}[H]{}
+\newacro{mediumS}[M]{}
+\newacro{lowS}[L]{}
+\NewDocumentCommand\MilAir{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=air/none, fill=white},
+ faction/friendly/.style={/MilSymb/.cd, shape=air/friendly, fill=friendlyA},
+ faction/hostile/.style={/MilSymb/.cd, shape=air/hostile, fill=hostileA},
+ faction/neutral/.style={/MilSymb/.cd, shape=air/neutral, fill=neutralA},
+ faction/unknown/.style={/MilSymb/.cd, shape=air/unknown, fill=unknownA},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/military/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MIL},
+ main/civilian/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CIV},
+ main/military fixed wing/.style={/MilSymb/.cd, SymbC=multi/main/aviation fixed wing},
+ main/civilian fixed wing/.style={/MilSymb/.cd, SymbC=air/main/civilian fixed wing},
+ main/military rotary wing/.style={/MilSymb/.cd, SymbC=multi/main/aviation rotary wing},
+ main/civilian rotary wing/.style={/MilSymb/.cd, SymbC=air/main/civilian rotary wing},
+ main/military balloon/.style={/MilSymb/.cd, SymbC=air/main/military balloon},
+ main/civilian balloon/.style={/MilSymb/.cd, SymbC=air/main/civilian balloon},
+ main/military airship/.style={/MilSymb/.cd, SymbC=air/main/military airship},
+ main/civilian airship/.style={/MilSymb/.cd, SymbC=air/main/civilian airship},
+ main/unmanned aerial vehicle/.style={/MilSymb/.cd, SymbC=multi/main/unmanned systems},
+ main/air decoy/.style={/MilSymb/.cd, SymbC=air/main/air decoy},
+ main/medic/.style={/MilSymb/.cd, SymbC=multi/main/medic},
+ main/attack/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=A},
+ main/bomber/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=B},
+ main/cargo/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=C},
+ main/fighter/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=F},
+ main/jammer/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=J},
+ main/tanker/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=K},
+ main/patrol/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=P},
+ main/reconnaissance/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=R},
+ main/trainer/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=T},
+ main/utility/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=U},
+ main/vertical short takeoff and landing/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=V},
+ main/airborne command post/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=ACP},
+ main/airborne early warning/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AEW},
+ main/anti surface warfare/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=ASUW},
+ main/anti submarine warfare/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=ASW},
+ main/communications/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=COM},
+ main/combat search and rescue/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=CSAR},
+ main/electronic support measures/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=ESM},
+ main/government/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=GOV},
+ main/mine countermeasures/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MCM},
+ main/personnel recovery/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=PR},
+ main/passenger/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=PX},
+ main/search and rescue/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SAR},
+ main/suppression of enemy air defence/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=SEAD},
+ main/special operations forces/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SOF},
+ main/ultra light/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=UL},
+ main/very important person/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=VIP},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ upper/.is choice,
+ upper/none/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ upper/medical evacuation/.style={/MilSymb/.cd, SymbU=multi/upper/medic},
+ upper/cargo/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=C},
+ upper/jammer/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=J},
+ upper/tanker/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=K},
+ upper/patrol/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=J},
+ upper/reconnaissance/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=P},
+ upper/jammer/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=R},
+ upper/trainer/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=T},
+ upper/utility/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=U},
+ upper/airborne command post/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ACP},
+ upper/airborne early warning/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=AEW},
+ upper/anti surface warfare/.style={/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=ASUW},
+ upper/anti submarine warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ASW},
+ upper/communications/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=COM},
+ upper/combat search and rescue/.style={/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=CSAR},
+ upper/electronic support measures/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ESM},
+ upper/government flight/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=GOV},
+ upper/mine countermeasures/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MCM},
+ upper/personnel recovery/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=PR},
+ upper/passenger plane/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=PX},
+ upper/search and rescue/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=SAR},
+ upper/suppression of enemy air defenses/.style={/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=SEAD},
+ upper/special operations forces/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=SOF},
+ upper/ultra light/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=UL},
+ upper/photographic/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=PH},
+ upper/very important person/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=VIP},
+ upper/escort/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=E},
+ upper/intensive care/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=IC},
+ upper/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ lower/.is choice,
+ lower/none/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=},
+ lower/light/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=L},
+ lower/medium/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=M},
+ lower/heavy/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=H},
+ lower/boom only/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=B},
+ lower/drogue only/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=D},
+ lower/boom and drogue/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=B/D},
+ lower/close range/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=CR},
+ lower/short range/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=SR},
+ lower/medium range/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=MR},
+ lower/long range/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=LR},
+ lower/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ track number/.store in=\MilSymb@SymbA,
+ call sign/.store in=\MilSymb@SymbB,
+ position and movement/.store in=\MilSymb@SymbD,
+ nation/.store in= \MilSymb@SymbE,
+ additional information/.store in=\MilSymb@SymbF,
+ speed leader/.code 2 args={\draw (0,0) -- (##1:##2);},
+ speed leader/.value required,
+ track number=,
+ call sign=,
+ position and movement=,
+ nation=,
+ additional information=,
+ main=none,
+ upper=none,
+ lower=none,
+ #1,
+ }%
+\begin{scope}[shift={(#2)}, local bounding box=#3, scale=\MilSymb@scale, transform shape]
+ \fontfamily{phv}\fontseries{bx}\selectfont
+\begin{scope}[local bounding box=#3]
+ \pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+ \end{scope}
+ \pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+ \pic at (0,0.34) {MilSymb \MilSymb@SymbU={\MilSymb@SymbUT}}; %Draw upper Symbol
+ \pic at (0,-0.34) {MilSymb \MilSymb@SymbL={\MilSymb@SymbLT}}; %Draw lower Symbol
+ \fontsize{6}{0}\selectfont
+ \ifthenelse{\isequivalentto{\MilSymb@SymbA}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbA};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbB}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbB};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbD}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbD};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbE}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbE};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbF}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbF};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\NewDocumentCommand\MilMissile{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=air/missile, fill=white},
+ faction/friendly/.style={/MilSymb/.cd, shape=air/friendly, fill=friendlyA},
+ faction/hostile/.style={/MilSymb/.cd, shape=air/hostile, fill=hostileA},
+ faction/neutral/.style={/MilSymb/.cd, shape=air/neutral, fill=neutralA},
+ faction/unknown/.style={/MilSymb/.cd, shape=air/unknown, fill=unknownA},
+ left/.is choice,
+ left/none/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ left/air/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=A},
+ left/surface/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=S},
+ left/sub surface/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=SU},
+ left/space/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=SP},
+ left/anti ballistic/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=AB},
+ left/ballistic/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=B},
+ left/cruise/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=C},
+ left/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ right/.is choice,
+ right/none/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=},
+ right/air/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=A},
+ right/surface/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=S},
+ right/sub surface/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=SU},
+ right/space/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=SP},
+ right/launched/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=L},
+ right/missile/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=M},
+ right/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ track number/.store in= \MilSymb@SymbA,
+ call sign/.store in=\MilSymb@SymbB,
+ position and movement/.store in=\MilSymb@SymbD,
+ nation/.store in= \MilSymb@SymbE,
+ additional information/.store in=\MilSymb@SymbF,
+ track number=,
+ call sign=,
+ position and movement=,
+ nation=,
+ additional information=,
+ faction=none,
+ left=none,
+ right=none,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+\fontfamily{phv}\fontseries{bx}\selectfont
+\begin{scope}[local bounding box=#3]
+\pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+\end{scope}
+\draw[fill=unknownA] (0, 0.3) -- (-0.05, 0.2) -- (-0.05, -0.2) -- (-0.125,-0.3) -- (-0.125,-0.4) -- (0, -0.265) -- (0.125,-0.4) -- (0.125,-0.3) -- (0.05,-0.2) -- (0.05,0.2) -- cycle;
+\fontsize{6}{0}\selectfont
+\node at (0.34, 0) {\MilSymb@SymbLT};
+\node at (-0.34, 0) {\MilSymb@SymbUT};
+ \ifthenelse{\isequivalentto{\MilSymb@SymbA}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbA};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbB}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbB};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbD}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbD};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbE}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbE};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbF}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbF};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\newif\iftaskforce
+\newif\iffeintdummy
+\NewDocumentCommand\MilLand{ o D(){0,0} d() g}{
+\tikzset{
+ /MilSymb/.cd,
+ selectedfaction/.store in=\MilSymb@selectedfaction,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=land/none, fill=white, selectedfaction=neutral},
+ faction/friendly/.style={/MilSymb/.cd, shape=land/friendly, fill=friendlyA, selectedfaction=friendly},
+ faction/hostile/.style={/MilSymb/.cd, shape=land/hostile, fill=hostileA, selectedfaction=hostile},
+ faction/neutral/.style={/MilSymb/.cd, shape=land/neutral, fill=neutralA, selectedfaction=neutral},
+ faction/unknown/.style={/MilSymb/.cd, shape=land/unknown, fill=unknownA, selectedfaction=unknown},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/air assault with organic lift/.style={/MilSymb/.cd, SymbC=land/main/air assault with organic lift/\MilSymb@selectedfaction},
+ main/air defence/.style={/MilSymb/.cd, SymbC=land/main/air defence/\MilSymb@selectedfaction},
+ main/air and naval gunfire liaison company/.style={/MilSymb/.cd, SymbC=land/main/air and naval gunfire liaison company/\MilSymb@selectedfaction},
+ main/broadcast transmitter antenna/.style={/MilSymb/.cd, SymbC=multi/main/antenna},
+ main/psychological operations broadcast/.style={/MilSymb/.cd, SymbC=land/main/psychological operations broadcast},
+ main/amphibious/.style={/MilSymb/.cd, SymbC=land/main/amphibious/\MilSymb@selectedfaction},
+ main/analysis/.style={/MilSymb/.cd, SymbC=land/main/analysis},
+ main/analysis electronic warfare/.style={/MilSymb/.cd, SymbC=land/main/analysis electronic warfare},
+ main/intercept/.style={/MilSymb/.cd, SymbC=land/main/intercept},
+ main/intercept electronic warfare/.style={/MilSymb/.cd, SymbC=land/main/intercept electronic warfare},
+ main/anti tank anti armour/.style={/MilSymb/.cd, SymbC=land/main/anti tank anti armour/\MilSymb@selectedfaction},
+ main/corps support/.style={/MilSymb/.cd, SymbC=land/main/corps support/\MilSymb@selectedfaction},
+ main/signal/.style={/MilSymb/.cd, SymbC=multi/main/signal/\MilSymb@selectedfaction},
+ main/signal radio/.style={/MilSymb/.cd, SymbC=land/main/signal radio},
+ main/signal radio relay/.style={/MilSymb/.cd, SymbC=land/main/signal radio relay},
+ main/signal radio teletype centre/.style={/MilSymb/.cd, SymbC=land/main/signal radio teletype centre},
+ main/signal tactical satellite/.style={/MilSymb/.cd, SymbC=land/main/signal tactical satellite},
+ main/direction finding/.style={/MilSymb/.cd, SymbC=land/main/direction finding},
+ main/direction finding electronic warfare/.style={/MilSymb/.cd, SymbC=land/main/direction finding electronic warfare},
+ main/headquarters/.style={/MilSymb/.cd, SymbC=land/main/headquarters/\MilSymb@selectedfaction},
+ main/infantry/.style={/MilSymb/.cd, SymbC=land/main/infantry/\MilSymb@selectedfaction},
+ main/jamming/.style={/MilSymb/.cd, SymbC=land/main/jamming/\MilSymb@selectedfaction},
+ main/jamming electronic warfare/.style={/MilSymb/.cd, SymbC=land/main/jamming electronic warfare},
+ main/main gun system/.style={/MilSymb/.cd, SymbC=land/main/main gun system/\MilSymb@selectedfaction},
+ main/medical/.style={/MilSymb/.cd, SymbC=multi/main/medical},
+ main/medical treatment facility/.style={/MilSymb/.cd, SymbC=multi/main/medical treatment facility},
+ main/motorized/.style={/MilSymb/.cd, SymbC=land/main/motorized},
+ main/reconnaissance/.style={/MilSymb/.cd, SymbC=land/main/reconnaissance/\MilSymb@selectedfaction},
+ main/search/.style={/MilSymb/.cd, SymbC=land/main/search},
+ main/search electronic warfare/.style={/MilSymb/.cd, SymbC=land/main/search electronic warfare},
+ main/supply/.style={/MilSymb/.cd, SymbC=land/main/supply/\MilSymb@selectedfaction},
+ main/above corps support/.style={/MilSymb/.cd, SymbC=land/main/above corps support/\MilSymb@selectedfaction},
+ main/administrative/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=ADM},
+ main/air traffic services/.style={/MilSymb/.cd, SymbC=land/main/air traffic services},
+ main/ammunition/.style={/MilSymb/.cd, SymbC=multi/main/ammunition},
+ main/armoured/.style={/MilSymb/.cd, SymbC=multi/main/armoured},
+ main/aviation fixed wing/.style={/MilSymb/.cd, SymbC=multi/main/aviation fixed wing},
+ main/aviation rotary wing/.style={/MilSymb/.cd, SymbC=multi/main/aviation rotary wing},
+ main/aviation composite fixed wing and rotary wing/.style={/MilSymb/.cd, SymbC=land/main/aviation composite fixed wing and rotary wing},
+ main/band/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=BAND},
+ main/chemical biological radiological nuclear defence/.style={/MilSymb/.cd, SymbC=multi/main/chemical biological radiological nuclear},
+ main/civil affairs/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CA},
+ main/civilian military cooperation/.style={/MilSymb/.cd, SymbC=land/main/civilian military cooperation},
+ main/combat/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CBT},
+ main/combat service support/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CSS},
+ main/combat support/.style={/MilSymb/.cd, SymbC=land/main/combat support},
+ main/combined arms/.style={/MilSymb/.cd, SymbC=land/main/combined arms},
+ main/counter intelligence/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CI},
+ main/criminal investigation division/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CID},
+ main/diving/.style={/MilSymb/.cd, SymbC=multi/main/diver},
+ main/dog/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=DOG},
+ main/drilling/.style={/MilSymb/.cd, SymbC=multi/main/drilling},
+ main/electronic ranging/.style={/MilSymb/.cd, SymbC=land/main/electronic ranging},
+ main/electronic warfare/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=EW},
+ main/engineer/.style={/MilSymb/.cd, SymbC=multi/main/engineer},
+ main/armoured engineer/.style={/MilSymb/.cd, SymbC=multi/main/armoured engineer},
+ main/electronic ordinance disposal/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=EOD},
+ main/field artillery/.style={/MilSymb/.cd, SymbC=multi/main/field artillery},
+ main/field artillery observer/.style={/MilSymb/.cd, SymbC=land/main/field artillery observer},
+ main/self propelled field artillery/.style={/MilSymb/.cd, SymbC=land/main/self propelled field artillery},
+ main/finance/.style={/MilSymb/.cd, SymbC=land/main/finance},
+ main/fire protection/.style={/MilSymb/.cd, SymbC=land/main/fire protection},
+ main/geospatial support/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=GEO},
+ main/information operations/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=IO},
+ main/interrogation/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=IPW},
+ main/joint fire support/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=JFS},
+ main/judge advocate general/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=JAG},
+ main/labour/.style={/MilSymb/.cd, SymbC=land/main/labour},
+ main/laundry/.style={/MilSymb/.cd, SymbC=land/main/laundry},
+ main/liaison/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LO},
+ main/maintenance/.style={/MilSymb/.cd, SymbC=multi/main/maintenance},
+ main/material/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MAT},
+ main/meteorological/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MET},
+ main/military intelligence/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MI},
+ main/military police/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MP},
+ main/mine/.style={/MilSymb/.cd, SymbC=multi/main/mine},
+ main/missile/.style={/MilSymb/.cd, SymbC=land/main/missile},
+ main/morale welfare and recreation/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MWE},
+ main/mortar/.style={/MilSymb/.cd, SymbC=land/main/mortar},
+ main/tactical mortar/.style={/MilSymb/.cd, SymbC=land/main/tactical mortar},
+ main/mortuary affairs/.style={/MilSymb/.cd, SymbC=land/main/mortuary affairs},
+ main/naval/.style={/MilSymb/.cd, SymbC=multi/main/naval},
+ main/observer/.style={/MilSymb/.cd, SymbC=land/main/observer},
+ main/ordnance/.style={/MilSymb/.cd, SymbC=land/main/ordnance},
+ main/personnel services/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=PS},
+ main/petroleum oil and lubricants/.style={/MilSymb/.cd, SymbC=multi/main/petroleum oil and lubricants},
+ main/pipeline/.style={/MilSymb/.cd, SymbC=land/main/pipeline},
+ main/postal/.style={/MilSymb/.cd, SymbC=land/main/postal},
+ main/public affairs/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=PA},
+ main/psychological operations/.style={/MilSymb/.cd, SymbC=multi/main/psychological operations},
+ main/quartermaster/.style={/MilSymb/.cd, SymbC=multi/main/quartermaster},
+ main/radar/.style={/MilSymb/.cd, SymbC=multi/main/radar},
+ main/radio/.style={/MilSymb/.cd, SymbC=land/main/radio},
+ main/radio relay/.style={/MilSymb/.cd, SymbC=land/main/radio relay},
+ main/radio teletype centre/.style={/MilSymb/.cd, SymbC=land/main/radio teletype centre},
+ main/religious support/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=REL},
+ main/replacement holding unit/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=RHU},
+ main/sea air land/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=SEAL},
+ main/security/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SEC},
+ main/sensor/.style={/MilSymb/.cd, SymbC=multi/main/sensor},
+ main/shore patrol security police/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SP},
+ main/sniper/.style={/MilSymb/.cd, SymbC=land/main/sniper},
+ main/special forces/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SF},
+ main/special operations forces/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SOF},
+ main/surveillance/.style={/MilSymb/.cd, SymbC=land/main/surveillance},
+ main/survey/.style={/MilSymb/.cd, SymbC=land/main/survey},
+ main/sustainment/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=SUST},
+ main/tactical satellite/.style={/MilSymb/.cd, SymbC=land/main/tactical satellite},
+ main/topographic/.style={/MilSymb/.cd, SymbC=land/main/topographic},
+ main/transportation/.style={/MilSymb/.cd, SymbC=multi/main/transportation},
+ main/unmanned systems/.style={/MilSymb/.cd, SymbC=multi/main/unmanned systems},
+ main/video imagery/.style={/MilSymb/.cd, SymbC=land/main/video imagery},
+ main/water/.style={/MilSymb/.cd, SymbC=multi/main/water},
+ main/water purification/.style={/MilSymb/.cd, SymbC=multi/main/water purification},
+ main/civilian police/.style={/MilSymb/.cd, SymbC=land/main/civilian police},
+ main/environmental protection/.style={/MilSymb/.cd, SymbC=land/main/environmental protection},
+ main/government organization/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=GO},
+ main/internal security force/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=ISF},
+ main/individual/.style={/MilSymb/.cd, SymbC=multi/main/individual},
+ main/organisation or group/.style={/MilSymb/.cd, SymbC=land/main/organisation or group},
+ main/killing victim/.style={/MilSymb/.cd, SymbC=multi/main/killing victim},
+ main/killing victims/.style={/MilSymb/.cd, SymbC=land/main/killing victims},
+ main/victim of an attempted crime/.style={/MilSymb/.cd, SymbC=multi/main/victim of an attempted crime},
+ main/spy/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SPY},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ upper/.is choice,
+ upper/none/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ upper/air assault/.style= {/MilSymb/.cd, SymbU=land/upper/air assault},
+ upper/area/.style= {/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=AREA},
+ upper/attack/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=A},
+ upper/biological/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=B},
+ upper/border/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=BOR},
+ upper/bridging/.style= {/MilSymb/.cd, SymbU=land/upper/bridging},
+ upper/chemical/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=C},
+ upper/close protection/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=CLP},
+ upper/combat/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=CBT},
+ upper/command and control/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=C2},
+ upper/communications contingency package/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=CCP},
+ upper/construction/.style= {/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=CONST},
+ upper/cross cultural communication/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=CCC},
+ upper/crowd and riot control/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=CRC},
+ upper/decontamination/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=D},
+ upper/detention/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=DET},
+ upper/direct communications/.style= {/MilSymb/.cd, SymbU=land/upper/direct communications},
+ upper/diving/.style= {/MilSymb/.cd, SymbU=land/upper/diving},
+ upper/division/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=XX},
+ upper/dog/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=DOG},
+ upper/drilling/.style= {/MilSymb/.cd, SymbU=land/upper/drilling},
+ upper/electro optical/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=EO},
+ upper/enhanced/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=ENH},
+ upper/explosive ordnance disposal/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=EOD},
+ upper/fire direction centre/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=FDC},
+ upper/force/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=F},
+ upper/forward/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=FWD},
+ upper/ground station module/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=GSM},
+ upper/landing support/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=LS},
+ upper/large extension node/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=LEN},
+ upper/maintenance/.style= {/MilSymb/.cd, SymbU=multi/upperlower/maintenance},
+ upper/meteorological/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MET},
+ upper/mine countermeasure/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MCM},
+ upper/missile/.style= {/MilSymb/.cd, SymbU=land/upper/missile},
+ upper/mobile advisor and support/.style= {/MilSymb/.cd, SymbU=land/upper/mobile advisor and support},
+ upper/mobile subscriber equipment/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MSE},
+ upper/mobility support/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MS},
+ upper/movement control centre/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MCC},
+ upper/multinational/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MN},
+ upper/multinational specialized unit/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MSU},
+ upper/multiple rocket launcher/.style= {/MilSymb/.cd, SymbU=land/upper/multiple rocket launcher},
+ upper/Mil medical role 1/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=\ \ \ \ 1},
+ upper/Mil medical role 2/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=\ \ \ \ 2},
+ upper/Mil medical role 3/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=\ \ \ \ 3},
+ upper/Mil medical role 4/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=\ \ \ \ 4},
+ upper/naval/.style= {/MilSymb/.cd, SymbU=multi/upper/naval},
+ upper/node centre/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=NC},
+ upper/nuclear/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=N},
+ upper/operations/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=OPS},
+ upper/radar/.style= {/MilSymb/.cd, SymbU=land/upper/radar},
+ upper/radiological/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=RAD},
+ upper/runway/.style= {/MilSymb/.cd, SymbU=multi/upper/runway},
+ upper/search and rescue/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=SAR},
+ upper/security/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=SEC},
+ upper/sensor/.style= {/MilSymb/.cd, SymbU=land/upper/sensor},
+ upper/sensor control module/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=SCM},
+ upper/signals intelligence/.style= {/MilSymb/.cd, SymbU=land/upper/signals intelligence},
+ upper/single shelter switch/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=SSS},
+ upper/single rocket launcher/.style= {/MilSymb/.cd, SymbU=land/upper/single rocket launcher},
+ upper/smoke/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=S},
+ upper/sniper/.style= {/MilSymb/.cd, SymbU=land/upper/sniper},
+ upper/sound ranging/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=SDR},
+ upper/special weapons and tactics/.style= {/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=SWAT},
+ upper/survey/.style= {/MilSymb/.cd, SymbU=land/upper/survey},
+ upper/tactical exploitation/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=TE},
+ upper/target acquisition/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=TA},
+ upper/topographic/.style= {/MilSymb/.cd, SymbU=land/upper/topographic},
+ upper/utility/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=U},
+ upper/video imagery/.style= {/MilSymb/.cd, SymbU=land/upper/video imagery},
+ upper/assassination/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=AS},
+ upper/execution/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=EX},
+ upper/murder victims/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=MU},
+ upper/hijacking/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=H},
+ upper/kidnapping/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=K},
+ upper/piracy/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=PI},
+ upper/rape/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=RA},
+ upper/displaced persons refugees and evacuees/.style= {/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=DPRE},
+ upper/foreign fighters/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=FF},
+ upper/gang member or gang/.style= {/MilSymb/.cd, SymbU=text/smallsquashed, SymbUT=GANG},
+ upper/government organisation/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=GO},
+ upper/leader or leadership/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=LDR},
+ upper/non-governmental organization member or non-governmental organization/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=NGO},
+ upper/coerced or impressed recruit/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=C},
+ upper/willing recruit/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=W},
+ upper/religious or religious organisation/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=REL},
+ upper/targeted individual or organisation/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=TGT},
+ upper/terrorist or terrorist organisation/.style= {/MilSymb/.cd, SymbU=text/small, SymbUT=TER},
+ upper/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ lower/.is choice,
+ lower/none/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=},
+ lower/airborne/.style= {/MilSymb/.cd, SymbL=land/lower/airborne},
+ lower/arctic/.style= {/MilSymb/.cd, SymbL=land/lower/arctic},
+ lower/battle damage repair/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=BDR},
+ lower/bicycle equipped/.style= {/MilSymb/.cd, SymbL=land/lower/bicycle equipped},
+ lower/clearing/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=CLR},
+ lower/close range/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=CR},
+ lower/control/.style= {/MilSymb/.cd, SymbL=land/lower/control},
+ lower/decontamination/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=D},
+ lower/demolition/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=DEM},
+ lower/dental/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=\ \ \ \ D},
+ lower/digital/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=DIG},
+ lower/enhanced location reporting system/.style= {/MilSymb/.cd, SymbL=land/lower/enhanced position location reporting system},
+ lower/equipment/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=E},
+ lower/heavy/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=H},
+ lower/intermodal/.style= {/MilSymb/.cd, SymbL=land/lower/intermodal},
+ lower/intensive care/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=\ \ \ \ IC},
+ lower/light/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=L},
+ lower/laboratory/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=LAB},
+ lower/launcher/.style= {/MilSymb/.cd, SymbL=land/lower/launcher},
+ lower/long range/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=LR},
+ lower/medium range/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=MR},
+ lower/mountain/.style={/MilSymb/.cd, SymbL=land/lower/mountain/\MilSymb@selectedfaction},
+ lower/multi channel/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=MC},
+ lower/optical/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=OPT},
+ lower/pack animal/.style= {/MilSymb/.cd, SymbL=multi/lower/pack animal},
+ lower/patient evacuation coordination/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=PEC},
+ lower/preventative maintenance/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=PM},
+ lower/psychological/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=P},
+ lower/radio relay line of sight/.style= {/MilSymb/.cd, SymbL=land/lower/radio relay line of sight},
+ lower/railroad/.style= {/MilSymb/.cd, SymbL=multi/upperlower/railroad},
+ lower/recovery unmanned systems/.style= {/MilSymb/.cd, SymbL=land/lower/recovery unmanned systems},
+ lower/recovery maintenance/.style= {/MilSymb/.cd, SymbL=multi/upperlower/maintenance},
+ lower/rescue coordination centre/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=RCC},
+ lower/riverine/.style= {/MilSymb/.cd, SymbL=land/lower/riverine},
+ lower/single channel/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=SC},
+ lower/ski/.style= {/MilSymb/.cd, SymbL=land/lower/ski},
+ lower/short range/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=SR},
+ lower/strategic/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=STR},
+ lower/support/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=SPT},
+ lower/tactical/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=TAC},
+ lower/towed/.style= {/MilSymb/.cd, SymbL=land/lower/towed},
+ lower/troop/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=T},
+ lower/vertical of short takeoff and landing/.style= {/MilSymb/.cd, SymbL=text/smallsquashed, SymbLT=VSTOL},
+ lower/veterinary/.style= {/MilSymb/.cd, SymbL=text/small, SymbLT=\ \ \ \ V},
+ lower/wheeled/.style= {/MilSymb/.cd, SymbL=land/lower/wheeled},
+ lower/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ SymbE/.store in= \MilSymb@SymbE,
+ SymbR/.store in= \MilSymb@SymbR,
+ echelon/.is choice,
+ echelon/none/.style= {/MilSymb/.cd, SymbE=},
+ echelon/team/.style= {/MilSymb/.cd, SymbE=$\varnothing$},
+ echelon/squad/.style= {/MilSymb/.cd, SymbE=\textbullet},
+ echelon/section/.style= {/MilSymb/.cd, SymbE=\textbullet \ \textbullet},
+ echelon/platoon/.style= {/MilSymb/.cd, SymbE=\textbullet \ \textbullet \ \textbullet},
+ echelon/company/.style= {/MilSymb/.cd, SymbE=\textbar},
+ echelon/battalion/.style= {/MilSymb/.cd, SymbE=\textbar \ \textbar},
+ echelon/regiment/.style= {/MilSymb/.cd, SymbE=\textbar \ \textbar \ \textbar},
+ echelon/brigade/.style= {/MilSymb/.cd, SymbE=X},
+ echelon/division/.style= {/MilSymb/.cd, SymbE=XX},
+ echelon/corps/.style= {/MilSymb/.cd, SymbE=XXX},
+ echelon/army/.style= {/MilSymb/.cd, SymbE=XXXX},
+ echelon/army group/.style= {/MilSymb/.cd, SymbE=XXXXX},
+ echelon/theatre/.style= {/MilSymb/.cd, SymbE=XXXXXX},
+ echelon/command/.style= {/MilSymb/.cd, SymbE=\raisebox{1pt}{+ \ +}},
+ task force/.is if=taskforce,
+ feint or dummy/.is if=feintdummy,
+ drawH/.store in= \MilSymb@drawH,
+ SymbHT/.store in= \MilSymb@SymbHT,
+ headquarters/.is choice,
+ headquarters/none/.style= {/MilSymb/.cd, drawH=false, SymbHT=},
+ headquarters/blank/.style= {/MilSymb/.cd, drawH=true, SymbHT=},
+ headquarters/assault command post/.style= {/MilSymb/.cd, drawH=true, SymbHT=ASLT},
+ headquarters/command group/.style= {/MilSymb/.cd, drawH=true, SymbHT=CMD},
+ headquarters/forward command post/.style= {/MilSymb/.cd, drawH=true, SymbHT=FWD},
+ headquarters/main command post/.style= {/MilSymb/.cd, drawH=true, SymbHT=MAIN},
+ headquarters/rear command post/.style= {/MilSymb/.cd, drawH=true, SymbHT=REAR},
+ headquarters/tactical operations centre/.style= {/MilSymb/.cd, drawH=true, SymbHT=TOC},
+ headquarters/tactical command post/.style= {/MilSymb/.cd, drawH=true, SymbHT=TAC},
+ headquarters/.default=blank,
+ status/.is choice,
+ status/none/.style= {/MilSymb/.cd, SymbR=},
+ status/reinforced/.style= {/MilSymb/.cd, SymbR=+ \ },
+ status/reduced/.style= {/MilSymb/.cd, SymbR=\textminus \ },
+ status/reinforced and reduced/.style= {/MilSymb/.cd, SymbR=\ooalign{\raisebox{2pt}{+}\cr\smash{\raisebox{-2pt}{\textminus}}\cr} \ },
+ altitude/.style 2 args={/MilSymb/.cd, SymbL=text/small, SymbLT={\fontsize{6}{0}\selectfont \ifthenelse{\isempty{##2}}{\acs{##1}}{\acs{##1S}/\acs{##2}}}},
+ altitude/.value required,
+ supply/.style 2 args={/MilSymb/.cd, SymbC={\ifx\\##2\\supply/class ##1\else supply/text\fi}, SymbCT={\ifthenelse{\isempty{##2}}{}{\uppercase\expandafter{\romannumeral##1\relax}\&\uppercase\expandafter{\romannumeral##2\relax}}}},
+ supply/.value required,
+ staff comments/.store in=\MilSymb@SymbG,
+ additional information/.store in=\MilSymb@SymbH,
+ higher formation/.store in=\MilSymb@SymbM,
+ evaluation rating/.store in=\MilSymb@SymbJ,
+ country indicator/.store in=\MilSymb@SymbAC,
+ combat effectiveness/.store in=\MilSymb@SymbK,
+ identification/.store in=\MilSymb@SymbP,
+ unique designation/.store in=\MilSymb@SymbT,
+ type of equipment/.store in=\MilSymb@SymbV,
+ date-time group/.store in=\MilSymb@SymbW,
+ altitude value/.store in=\MilSymb@SymbX,
+ location/.store in=\MilSymb@SymbY,
+ common identifier/.store in=\MilSymb@SymbAF,
+ speed/.store in=\MilSymb@SymbZ,
+ offset/.code 2 args={\begin{scope}[shift={(#2)}]\ifthenelse{\equal{\MilSymb@drawH}{true}\AND \equal{\MilSymb@selectedfaction}{friendly}}{\draw (-0.75, -0.75) -- +($(0, -##1) - (0, -0.75)$) -- +(##2);}{\draw (0,0) -- +(0, -##1) -- +(##2);}\end{scope}},
+ offset/.value required,
+ movement/.code 2 args={\begin{scope}[shift={(#2)}]\ifthenelse{\equal{\MilSymb@drawH}{true}\AND \equal{\MilSymb@selectedfaction}{friendly}}{ \draw [-{Stealth[inset=0pt,scale=1]}] (-0.75, -0.75) -- +($(0, -##1) - (0, -0.75)$) -- +(##2);}{\draw [-{Stealth[inset=0pt,scale=1]}] (0,0) -- +(0, -##1) -- +(##2);}\end{scope}},
+ movement/.value required,
+ faction=friendly,
+ main=none,
+ upper=none,
+ lower=none,
+ echelon=none,
+ status=none,
+ headquarters=none,
+ country indicator=,
+ staff comments=,
+ additional information=,
+ higher formation=,
+ evaluation rating=,
+ combat effectiveness=,
+ identification=,
+ unique designation=,
+ type of equipment=,
+ date-time group=,
+ altitude value=,
+ location=,
+ common identifier=,
+ speed=,
+ task force=false,
+ feint or dummy=false,
+ #1,
+} %
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+\fontfamily{phv}\fontseries{bx}\selectfont
+\begin{scope}[local bounding box=#3]
+\pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+\end{scope}
+\pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+\pic at (0,0.34) {MilSymb \MilSymb@SymbU={\MilSymb@SymbUT}}; %Draw upper Symbol
+\pic at (0,-0.34) {MilSymb \MilSymb@SymbL={\MilSymb@SymbLT}}; %Draw lower Symbol
+\fontsize{6}{0}\selectfont
+\ifthenelse{\isequivalentto{\MilSymb@SymbE}{\empty}}{}{\node [anchor=south, local bounding box=E] at ($(M.north)-(0,0.04)$) {\MilSymb@SymbE};} %Draw echelon
+\iftaskforce
+\draw ($(E.south west)+(0,0.03)$) -- (E.north west) -- (E.north east) -- ($(E.south east)+(0,0.03)$);
+\fi
+\iffeintdummy
+\draw [dashed] (M.north west) -- ($(M.north)+(0, 0.5)$) -- (M.north east);
+\fi
+\ifthenelse{\isequivalentto{\MilSymb@SymbAC}{\empty} \AND \isequivalentto{\MilSymb@SymbR}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\fontsize{8}{0}\selectfont \MilSymb@SymbR \fontsize{6}{0}\selectfont \MilSymb@SymbAC};} %Draw status
+\ifthenelse{\equal{\MilSymb@drawH}{true} \AND \equal{\MilSymb@selectedfaction}{friendly}}{
+\draw (-0.75, -0.5) -- +(0, -0.25);
+\fontsize{6}{0}\selectfont
+\node [anchor=north] at (M.south) {\MilSymb@SymbHT};}{}
+\fontsize{6}{0}\selectfont
+\ifthenelse{\isequivalentto{\MilSymb@SymbG}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbG};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbH}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbH};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbM}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbM};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbJ}{\empty} \AND \isequivalentto{\MilSymb@SymbK}{\empty} \AND \isequivalentto{\MilSymb@SymbP}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbJ\MilSymb@SymbK\MilSymb@SymbP};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbW}{\empty}}{}{\node [anchor=east] at ($(M.north west)!-0.17!(M.south west)$) {\MilSymb@SymbW};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbX}{\empty} \AND \isequivalentto{\MilSymb@SymbY}{\empty}}{}{\node [anchor=east] at ($(M.north west)!.17!(M.south west)$) {\MilSymb@SymbX\MilSymb@SymbY};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbV}{\empty} \AND \isequivalentto{\MilSymb@SymbAF}{\empty}}{}{\node [anchor=east] at (M.west) {\MilSymb@SymbV\MilSymb@SymbAF};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbT}{\empty}}{}{\node [anchor=east] at ($(M.north west)!0.83!(M.south west)$) {\MilSymb@SymbT};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbZ}{\empty}}{}{\node [anchor=east] at ($(M.north west)!1.17!(M.south west)$) {\MilSymb@SymbZ};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\newcounter{exitem}
+\newlength{\itemlength}
+\NewDocumentEnvironment{landheadquarters}{ o D(){0,0}}{
+\tikzset{#1}
+\setlength{\itemlength}{0pt}
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+\setcounter{exitem}{0}
+\RenewDocumentCommand\item{m}{
+\scoped[yshift=-\itemlength, local bounding box=T]
+##1;
+\ifnum \value{exitem}>0
+\pgfmathtruncatemacro\result{\value{exitem}-1}
+\draw ($(M.south west) + (0, -0.25)$) -- (F\result);
+\fi
+\coordinate (F\arabic{exitem}) at (M.north west);
+\pgfpointdiff{\pgfpointanchor{T}{north west}}{\pgfpointanchor{T}{south west}}
+\addtolength{\itemlength}{\pgf@y-5pt}
+\stepcounter{exitem}}
+}{\end{scope}}
+\NewDocumentEnvironment{landgroup}{ o D(){0,0}}{
+\tikzset{#1}
+\setlength{\itemlength}{0pt}
+\begin{scope}[local bounding box=G, shift={(#2)}, scale=\MilSymb@scale, transform shape]
+\RenewDocumentCommand\item{m}{
+\scoped[yshift=-\itemlength, local bounding box=T]
+##1;
+\pgfpointdiff{\pgfpointanchor{T}{north west}}{\pgfpointanchor{T}{south west}}
+\addtolength{\itemlength}{\pgf@y-5pt}}
+}{
+\draw ([shift={(5pt,3pt)}]G.north west) -| ([shift={(-3pt,-3pt)}]G.south west) -- ++(8pt,0)
+ (G.west) -- ++(-5pt,0);
+\end{scope}}
+\newif\ifnoframe
+\NewDocumentCommand\MilEquipment{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=equipment/none, fill=white, iconcolour=black},
+ faction/friendly/.style={/MilSymb/.cd, shape=equipment/friendly, fill=friendlyA, iconcolour=friendlyB},
+ faction/hostile/.style={/MilSymb/.cd, shape=equipment/hostile, fill=hostileA, iconcolour=hostileB},
+ faction/neutral/.style={/MilSymb/.cd, shape=equipment/neutral, fill=neutralA, iconcolour=neutralB},
+ faction/unknown/.style={/MilSymb/.cd, shape=equipment/unknown, fill=unknownA, iconcolour=unknownB},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/rifle/.style= {/MilSymb/.cd, SymbC=equipment/main/rifle},
+ main/single shot rifle/.style= {/MilSymb/.cd, SymbC=equipment/main/single shot rifle},
+ main/semi automatic rifle/.style= {/MilSymb/.cd, SymbC=equipment/main/semi automatic rifle},
+ main/automatic rifle/.style= {/MilSymb/.cd, SymbC=equipment/main/automatic rifle},
+ main/machine gun/.style= {/MilSymb/.cd, SymbC=equipment/main/machine gun},
+ main/light machine gun/.style= {/MilSymb/.cd, SymbC=equipment/main/light machine gun},
+ main/medium machine gun/.style= {/MilSymb/.cd, SymbC=equipment/main/medium machine gun},
+ main/heavy machine gun/.style= {/MilSymb/.cd, SymbC=equipment/main/heavy machine gun},
+ main/grenade launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/grenade launcher},
+ main/light grenade launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/light grenade launcher},
+ main/medium grenade launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/medium grenade launcher},
+ main/heavy grenade launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/heavy grenade launcher},
+ main/flame thrower/.style= {/MilSymb/.cd, SymbC=equipment/main/flame thrower},
+ main/air defence gun/.style= {/MilSymb/.cd, SymbC=equipment/main/air defence gun},
+ main/anti tank gun/.style= {/MilSymb/.cd, SymbC=equipment/main/anti tank gun},
+ main/direct fire gun/.style= {/MilSymb/.cd, SymbC=equipment/main/direct fire gun},
+ main/recoilless gun/.style= {/MilSymb/.cd, SymbC=equipment/main/recoilless gun},
+ main/howitzer/.style= {/MilSymb/.cd, SymbC=equipment/main/howitzer},
+ main/missile launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/missile launcher},
+ main/air defence missile launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/air defence missile launcher},
+ main/anti tank missile launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/anti tank missile launcher},
+ main/surface to surface missile launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/surface to surface missile launcher},
+ main/mortar/.style= {/MilSymb/.cd, SymbC=equipment/main/mortar},
+ main/single rocket launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/single rocket launcher},
+ main/multiple rocket launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/multiple rocket launcher},
+ main/anti tank rocket launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/anti tank rocket launcher},
+ main/non lethal weapon/.style= {/MilSymb/.cd, SymbC=equipment/main/non lethal weapon},
+ main/non lethal grenade launcher/.style= {/MilSymb/.cd, SymbC=equipment/main/non lethal grenade launcher},
+ main/taser/.style= {/MilSymb/.cd, SymbC=equipment/main/taser},
+ main/water cannon/.style= {/MilSymb/.cd, SymbC=equipment/main/water cannon},
+ main/armoured fighting vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/armoured fighting vehicle},
+ main/armoured fighting vehicle command and control/.style= {/MilSymb/.cd, SymbC=equipment/main/armoured fighting vehicle command and control},
+ main/armoured personnel carrier/.style= {/MilSymb/.cd, SymbC=equipment/main/armoured personnel carrier},
+ main/armoured medical personnel carrier/.style= {/MilSymb/.cd, SymbC=equipment/main/armoured medical personnel carrier},
+ main/armoured protected vehicle/.style= {/MilSymb/.cd, SymbC=multi/main/armoured},
+ main/armoured protected recovery vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/armoured protected recovery vehicle},
+ main/medical evacuation armoured protected vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/medical evacuation armoured protected vehicle},
+ main/tank/.style= {/MilSymb/.cd, SymbC=equipment/main/tank},
+ main/light tank/.style= {/MilSymb/.cd, SymbC=equipment/main/light tank},
+ main/medium tank/.style= {/MilSymb/.cd, SymbC=equipment/main/medium tank},
+ main/heavy tank/.style= {/MilSymb/.cd, SymbC=equipment/main/heavy tank},
+ main/tank recovery vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/tank recovery vehicle},
+ main/bridge/.style= {/MilSymb/.cd, SymbC=multi/main/bridge},
+ main/bridge mounted on utility vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/bridge mounted on utility vehicle},
+ main/fixed bridge/.style= {/MilSymb/.cd, SymbC=equipment/main/fixed bridge},
+ main/folding girder bridge/.style= {/MilSymb/.cd, SymbC=equipment/main/folding girder bridge},
+ main/hollow deck bridge/.style= {/MilSymb/.cd, SymbC=equipment/main/hollow deck bridge},
+ main/drill/.style= {/MilSymb/.cd, SymbC=multi/main/drill},
+ main/drill mounted on vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/drill mounted on vehicle},
+ main/earthmover/.style= {/MilSymb/.cd, SymbC=equipment/main/earthmover},
+ main/multifunctional earthmover/.style= {/MilSymb/.cd, SymbC=equipment/main/multifunctional earthmover},
+ main/mine clearing equipment/.style= {/MilSymb/.cd, SymbC=equipment/main/mine clearing equipment},
+ main/mine clearing vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/mine clearing vehicle},
+ main/mine laying equipment/.style= {/MilSymb/.cd, SymbC=equipment/main/mine laying equipment},
+ main/mine laying vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/mine laying vehicle},
+ main/utility vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/utility vehicle},
+ main/medical vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/medical vehicle},
+ main/medical evacuation/.style= {/MilSymb/.cd, SymbC=equipment/main/medical evacuation},
+ main/mobile emergency physician/.style= {/MilSymb/.cd, SymbC=equipment/main/mobile emergency physician},
+ main/bus/.style= {/MilSymb/.cd, SymbC=equipment/main/bus},
+ main/semi trailer truck/.style= {/MilSymb/.cd, SymbC=equipment/main/semi trailer truck},
+ main/petroleum oil and lubricants vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/petroleum oil and lubricants vehicle},
+ main/water vehicle/.style= {/MilSymb/.cd, SymbC=equipment/main/water vehicle},
+ main/train locomotive/.style= {/MilSymb/.cd, SymbC=equipment/main/train locomotive},
+ main/chemical biological radiological nuclear equipment/.style= {/MilSymb/.cd, SymbC=multi/main/chemical biological radiological nuclear},
+ main/computer system/.style= {/MilSymb/.cd, SymbC=equipment/main/computer system},
+ main/laser/.style= {/MilSymb/.cd, SymbC=equipment/main/laser},
+ main/land mine/.style= {/MilSymb/.cd, SymbC=equipment/main/land mine},
+ main/antipersonnel land mine/.style= {/MilSymb/.cd, SymbC=equipment/main/antipersonnel land mine},
+ main/antitank land mine/.style= {/MilSymb/.cd, SymbC=equipment/main/antitank land mine},
+ main/improvised explosive device/.style= {/MilSymb/.cd, SymbC=text/normal, SymbCT=IED},
+ main/sensor/.style= {/MilSymb/.cd, SymbC=equipment/main/sensor},
+ main/sensor emplaced/.style= {/MilSymb/.cd, SymbC=equipment/main/sensor emplaced},
+ main/radar/.style= {/MilSymb/.cd, SymbC=multi/main/radar},
+ main/antennae/.style= {/MilSymb/.cd, SymbC=multi/main/antenna},
+ main/generator set/.style= {/MilSymb/.cd, SymbC=text/normal, SymbCT=G},
+ main/psychological operations equipment/.style= {/MilSymb/.cd, SymbC=multi/main/psychological operations},
+ main/bomb/.style= {/MilSymb/.cd, SymbC=text/squashed, SymbCT=BOMB},
+ main/booby trap/.style= {/MilSymb/.cd, SymbC=equipment/main/booby trap},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ mobility/.is choice,
+ mobility/none/.style= {/MilSymb/.cd, SymbL=, SymbLT=},
+ mobility/amphibious/.style= {/MilSymb/.cd, SymbL=equipment/mobility/amphibious},
+ mobility/barge/.style= {/MilSymb/.cd, SymbL=equipment/mobility/barge},
+ mobility/over snow/.style= {/MilSymb/.cd, SymbL=equipment/mobility/over snow},
+ mobility/pack animal/.style= {/MilSymb/.cd, SymbL=equipment/mobility/pack animal},
+ mobility/railroad/.style= {/MilSymb/.cd, SymbL=equipment/mobility/railroad},
+ mobility/sled/.style= {/MilSymb/.cd, SymbL=equipment/mobility/sled},
+ mobility/towed/.style= {/MilSymb/.cd, SymbL=equipment/mobility/towed},
+ mobility/tracked/.style= {/MilSymb/.cd, SymbL=equipment/mobility/tracked},
+ mobility/wheeled cross country/.style= {/MilSymb/.cd, SymbL=equipment/mobility/wheeled cross country},
+ mobility/wheeled limited mobility/.style= {/MilSymb/.cd, SymbL=equipment/mobility/wheeled limited mobility},
+ mobility/wheeled semi trailer/.style= {/MilSymb/.cd, SymbL=equipment/mobility/wheeled semi trailer},
+ mobility/wheeled and tracked/.style= {/MilSymb/.cd, SymbL=equipment/mobility/wheeled and tracked},
+ mobility/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ offset/.code 2 args={\begin{scope}[shift={(#2)}]\draw (0,0) -- +(0, -##1) -- +(##2);\end{scope}},
+ offset/.value required,
+ movement/.code 2 args={\begin{scope}[shift={(#2)}]\draw [-{Stealth[inset=0pt,scale=1]}] (0,0) -- +(0, -##1) -- +(##2);\end{scope}},
+ movement/.value required,
+ no frame/.is if=noframe,
+ feint or dummy/.is if=feintdummy,
+ iconcolour/.code={\colorlet{MilSymb@iconcolour}{##1}},
+ quantity/.store in=\MilSymb@SymbQ,
+ staff comments/.store in=\MilSymb@SymbG,
+ additional information/.store in=\MilSymb@SymbH,
+ evaluation rating/.store in=\MilSymb@SymbJ,
+ combat effectiveness/.store in=\MilSymb@SymbK,
+ signature equipment/.store in=\MilSymb@SymbSE,
+ higher formation/.store in=\MilSymb@SymbM,
+ identification/.store in=\MilSymb@SymbP,
+ unique designation/.store in=\MilSymb@SymbT,
+ type of equipment/.store in=\MilSymb@SymbV,
+ date-time group/.store in=\MilSymb@SymbW,
+ altitude value/.store in=\MilSymb@SymbX,
+ location/.store in=\MilSymb@SymbY,
+ country indicator/.store in=\MilSymb@SymbAC,
+ platform type/.store in=\MilSymb@SymbAD,
+ equipment teardown time/.store in=\MilSymb@SymbAE,
+ common identifier/.store in=\MilSymb@SymbAF,
+ speed/.store in=\MilSymb@SymbZ,
+ faction=none,
+ main=none,
+ mobility=none,
+ quantity=,
+ staff comments=,
+ additional information=,
+ evaluation rating=,
+ higher formation=,
+ evaluation rating=,
+ combat effectiveness=,
+ signature equipment=,
+ identification=,
+ unique designation=,
+ type of equipment=,
+ date-time group=,
+ altitude value=,
+ location=,
+ country indicator=,
+ platform type=,
+ equipment teardown time=,
+ common identifier=,
+ speed=,
+ feint or dummy=false,
+ no frame=false,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+\fontfamily{phv}\fontseries{bx}\selectfont
+\begin{scope} [local bounding box=Q]
+\ifnoframe
+\tikzset{every path/.style={MilSymb@iconcolour}}
+\begin{scope}[local bounding box=#3]
+\pic [local bounding box=M] {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+\end{scope}
+\ifthenelse{\isequivalentto{\MilSymb@SymbL}{\empty}}{}{\pic at ($(M.south) + (0, -0.1)$) {MilSymb \MilSymb@SymbL};} %Draw mobility
+\tikzset{every path/.style={black}}
+\else
+
+\tikzset{/MilSymb/.cd, iconcolour=black}
+\begin{scope}[local bounding box=#3]
+\pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+\end{scope}
+\pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+\ifthenelse{\isequivalentto{\MilSymb@SymbL}{\empty}}{}{\pic at ($(M.south) + (0, -0.1)$) {MilSymb \MilSymb@SymbL};} %Draw mobility
+\fi
+\end{scope}
+\iffeintdummy
+\draw [dashed] (M.north west) -- ($(M.north)+(0, 0.5)$) -- (M.north east);
+\fi
+\fontsize{6}{0}\selectfont
+\ifthenelse{\isequivalentto{\MilSymb@SymbQ}{\empty}}{}{\node [anchor=south] at ($(M.north) + (0, 0.02)$) {\MilSymb@SymbQ};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbAC}{\empty}}{}{\node [anchor=west] at ({Q.east} |- {$(M.north east)!-0.17!(M.south east)$}) {\MilSymb@SymbAC};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbG}{\empty}}{}{\node [anchor=west] at ({Q.east} |- {$(M.north east)!.17!(M.south east)$}) {\MilSymb@SymbG};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbH}{\empty} \AND \isequivalentto{\MilSymb@SymbAE}{\empty}}{}{\node [anchor=west] at (Q.east |- M.east) {\MilSymb@SymbH\MilSymb@SymbAE};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbM}{\empty}}{}{\node [anchor=west] at ({Q.east} |- {$(M.north east)!0.83!(M.south east)$}) {\MilSymb@SymbM};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbJ}{\empty} \AND \isequivalentto{\MilSymb@SymbK}{\empty} \AND \isequivalentto{\MilSymb@SymbSE}{\empty} \AND \isequivalentto{\MilSymb@SymbP}{\empty}}{}{\node [anchor=west] at ({Q.east} |- {$(M.north east)!1.17!(M.south east)$}) {\MilSymb@SymbJ\MilSymb@SymbK\MilSymb@SymbSE\MilSymb@SymbP};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbW}{\empty}}{}{\node [anchor=east] at ({Q.west} |- {$(M.north west)!-0.17!(M.south west)$}) {\MilSymb@SymbW};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbX}{\empty} \AND \isequivalentto{\MilSymb@SymbY}{\empty}}{}{\node [anchor=east] at ({Q.west} |- {$(M.north west)!.17!(M.south west)$}) {\MilSymb@SymbX\MilSymb@SymbY};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbV}{\empty} \AND \isequivalentto{\MilSymb@SymbAD}{\empty} \AND \isequivalentto{\MilSymb@SymbAF}{\empty}}{}{\node [anchor=east] at (Q.west |- M.west) {\MilSymb@SymbV\MilSymb@SymbAD\MilSymb@SymbAF};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbT}{\empty}}{}{\node [anchor=east] at ({Q.west} |- {$(M.north west)!0.83!(M.south west)$}) {\MilSymb@SymbT};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbZ}{\empty}}{}{\node [anchor=east] at ({Q.west} |- {$(M.north west)!1.17!(M.south west)$}) {\MilSymb@SymbZ};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\newif\ifheadquarters
+\NewDocumentCommand\MilInstallation{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ selectedfaction/.store in=\MilSymb@selectedfaction,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=installation/none, fill=white, selectedfaction=neutral},
+ faction/friendly/.style={/MilSymb/.cd, shape=installation/friendly, fill=friendlyA, selectedfaction=friendly},
+ faction/hostile/.style={/MilSymb/.cd, shape=installation/hostile, fill=hostileA, selectedfaction=hostile},
+ faction/neutral/.style={/MilSymb/.cd, shape=installation/neutral, fill=neutralA, selectedfaction=neutral},
+ faction/unknown/.style={/MilSymb/.cd, shape=installation/unknown, fill=unknownA, selectedfaction=unknown},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/transportation/.style={/MilSymb/.cd, SymbC=multi/main/transportation},
+ main/ammunition cache/.style={/MilSymb/.cd, SymbC=supply/class 5},
+ main/black list location/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=BLK},
+ main/broadcast transmitter antenna/.style={/MilSymb/.cd, SymbC=multi/main/antenna},
+ main/chemical biological radiological nuclear/.style={/MilSymb/.cd, SymbC=multi/main/chemical biological radiological nuclear},
+ main/electric power/.style={/MilSymb/.cd, SymbC=installation/main/electric power},
+ main/food distribution/.style={/MilSymb/.cd, SymbC=supply/class US 1},
+ main/grey list location/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=GRAY},
+ main/mass grave site/.style={/MilSymb/.cd, SymbC=installation/main/mass grave site},
+ main/medical/.style={/MilSymb/.cd, SymbC=multi/main/medical},
+ main/medical treatment facility/.style={/MilSymb/.cd, SymbC=multi/main/medical treatment facility},
+ main/mine/.style={/MilSymb/.cd, SymbC=installation/main/mine},
+ main/nuclear/.style={/MilSymb/.cd, SymbC=installation/main/nuclear},
+ main/printed media/.style={/MilSymb/.cd, SymbC=installation/main/printed media},
+ main/transportation/.style={/MilSymb/.cd, SymbC=multi/main/transportation},
+ main/naval/.style={/MilSymb/.cd, SymbC=multi/main/naval},
+ main/safe house/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=SAFE},
+ main/civilian telecommunications/.style={/MilSymb/.cd, SymbC=installation/main/civilian telecommunications},
+ main/water/.style={/MilSymb/.cd, SymbC=multi/main/water},
+ main/water treatment/.style={/MilSymb/.cd, SymbC=multi/main/water purification},
+ main/white list location/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=WHT},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ upper/.is choice,
+ upper/none/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ upper/nuclear energy/.style={/MilSymb/.cd, SymbU=installation/upper/nuclear},
+ upper/railroad/.style={/MilSymb/.cd, SymbU=installation/upper/railroad},
+ upper/yard/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=YRD},
+ upper/biological/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=B},
+ upper/chemical/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=C},
+ upper/nuclear/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=N},
+ upper/coal/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=CO},
+ upper/geothermal/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=GT},
+ upper/hydroelectric/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=HY},
+ upper/natural gas/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=NG},
+ upper/petroleum/.style= {/MilSymb/.cd, SymbU=installation/upper/petroleum oil and lubricants},
+ upper/radio/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=R},
+ upper/telephone/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=T},
+ upper/television/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=TV},
+ upper/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ offset/.code 2 args={\begin{scope}[shift={(#2)}]\ifheadquarters\ifthenelse{\equal{\MilSymb@selectedfaction}{friendly}}{\draw (-0.75, -0.75) -- +($(0, -##1) - (0, -0.75)$) -- +(##2);}{\draw (0,0) -- +(0, -##1) -- +(##2);}\end{scope}\fi},
+ offset/.value required,
+ movement/.code 2 args={\begin{scope}[shift={(#2)}]\ifheadquarters\ifthenelse{\equal{\MilSymb@selectedfaction}{friendly}}{ \draw [-{Stealth[inset=0pt,scale=1]}] (-0.75, -0.75) -- +($(0, -##1) - (0, -0.75)$) -- +(##2);}{\draw [-{Stealth[inset=0pt,scale=1]}] (0,0) -- +(0, -##1) -- +(##2);}\end{scope}\fi},
+ movement/.value required,
+ feint or dummy/.is if=feintdummy,
+ headquarters/.is if=headquarters,
+ faction=none,
+ main=none,
+ upper=none,
+ staff comments/.store in=\MilSymb@SymbG,
+ additional information/.store in=\MilSymb@SymbH,
+ higher formation/.store in=\MilSymb@SymbM,
+ evaluation rating/.store in=\MilSymb@SymbJ,
+ country indicator/.store in=\MilSymb@SymbAC,
+ capacity of installation/.store in=\MilSymb@SymbK,
+ installation composition/.store in=\MilSymb@SymbAI,
+ unique designation/.store in=\MilSymb@SymbT,
+ date-time group/.store in=\MilSymb@SymbW,
+ altitude value/.store in=\MilSymb@SymbX,
+ location/.store in=\MilSymb@SymbY,
+ speed/.store in=\MilSymb@SymbZ,
+ headquarters=false,
+ feint or dummy=false,
+ country indicator=,
+ staff comments=,
+ additional information=,
+ installation composition=,
+ higher formation=,
+ evaluation rating=,
+ unique designation=,
+ date-time group=,
+ altitude value=,
+ location=,
+ capacity of installation=,
+ speed=,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, local bounding box=#3, scale=\MilSymb@scale, transform shape]
+\fontfamily{phv}\fontseries{bx}\selectfont
+\fontsize{6}{0}\selectfont
+\pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+\pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+\pic at (0,0.34) {MilSymb \MilSymb@SymbU={\MilSymb@SymbUT}}; %Draw upper Symbol
+\ifheadquarters\ifthenelse{\equal{\MilSymb@selectedfaction}{friendly}}{
+\draw (-0.75, -0.5) -- +(0, -0.25);}{}\fi
+\iffeintdummy
+\draw [dashed] (M.north west) -- ($(M.north)+(0, 0.5)$) -- (M.north east);
+\fi
+\ifthenelse{\isequivalentto{\MilSymb@SymbAC}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbAC};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbG}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbG};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbH}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbH};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbM}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbM};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbJ}{\empty} \AND \isequivalentto{\MilSymb@SymbK}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbJ\MilSymb@SymbK};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbW}{\empty}}{}{\node [anchor=east] at ($(M.north west)!-0.17!(M.south west)$) {\MilSymb@SymbW};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbX}{\empty} \AND \isequivalentto{\MilSymb@SymbY}{\empty}}{}{\node [anchor=east] at ($(M.north west)!.17!(M.south west)$) {\MilSymb@SymbX\MilSymb@SymbY};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbAI}{\empty}}{}{\node [anchor=east] at (M.west) {\MilSymb@SymbAI};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbT}{\empty}}{}{\node [anchor=east] at ($(M.north west)!0.83!(M.south west)$) {\MilSymb@SymbT};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbZ}{\empty}}{}{\node [anchor=east] at ($(M.north west)!1.17!(M.south west)$) {\MilSymb@SymbZ};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\NewDocumentCommand\MilSeaSurface{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=equipment/none, fill=white},
+ faction/friendly/.style={/MilSymb/.cd, shape=equipment/friendly, fill=friendlyA},
+ faction/hostile/.style={/MilSymb/.cd, shape=equipment/hostile, fill=hostileA},
+ faction/neutral/.style={/MilSymb/.cd, shape=equipment/neutral, fill=neutralA},
+ faction/unknown/.style={/MilSymb/.cd, shape=equipment/unknown, fill=unknownA},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/military/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MIL},
+ main/combatant/.style={/MilSymb/.cd, SymbC=seasurface/main/combatant},
+ main/surface combatant/.style={/MilSymb/.cd, SymbC=seasurface/main/surface combatant},
+ main/carrier/.style={/MilSymb/.cd, SymbC=seasurface/main/carrier},
+ main/battleship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=BB},
+ main/cruiser guided missile/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CG},
+ main/destroyer/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=DD},
+ main/frigate/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=FF},
+ main/corvette/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=FS},
+ main/littoral combatant ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LCS},
+ main/amphibious warfare ship/.style={/MilSymb/.cd, SymbC=seasurface/main/amphibious warfare ship},
+ main/amphibious command ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LCC},
+ main/amphibious assault/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LA},
+ main/amphibious assault ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LHA},
+ main/multi purpose amphibious assualt ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LHD},
+ main/amphibious transport/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LPD},
+ main/amphibious assualt ship helicopter/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LPH},
+ main/landing ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LS},
+ main/landing craft/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=LC},
+ main/mine warfare vessel/.style={/MilSymb/.cd, SymbC=seasurface/main/mine warfare vessel},
+ main/minelayer/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=ML},
+ main/minesweeper/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MS},
+ main/minesweeper drone/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MSD},
+ main/minehunter/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MH},
+ main/mine countermeasure support ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MCS},
+ main/mine countermeasures/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MCM},
+ main/sea surface decoy/.style={/MilSymb/.cd, SymbC=seasurface/main/sea surface decoy},
+ main/patrol/.style={/MilSymb/.cd, SymbC=seasurface/main/patrol},
+ main/patrol craft/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=PC},
+ main/patrol ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=PG},
+ main/military speedboat/.style={/MilSymb/.cd, SymbC=seasurface/main/military speedboat},
+ main/military rigid hull inflatable boat/.style={/MilSymb/.cd, SymbC=seasurface/main/military rigid hull inflatable boat},
+ main/military jetski/.style={/MilSymb/.cd, SymbC=seasurface/main/military jetski},
+ main/military unmanned surface water vehicle/.style={/MilSymb/.cd, SymbC=multi/main/unmanned systems},
+ main/navy task organisation unit/.style={/MilSymb/.cd, SymbC=seasurface/main/navy task organization unit},
+ main/navy task force/.style={/MilSymb/.cd, SymbC=seasurface/main/navy task force},
+ main/navy task group/.style={/MilSymb/.cd, SymbC=seasurface/main/navy task group},
+ main/navy task unit/.style={/MilSymb/.cd, SymbC=seasurface/main/navy task unit},
+ main/navy task element/.style={/MilSymb/.cd, SymbC=seasurface/main/navy task element},
+ main/convoy/.style={/MilSymb/.cd, SymbC=seasurface/main/convoy},
+ main/non combatant/.style={/MilSymb/.cd, SymbC=seasurface/main/non combatant},
+ main/auxiliary ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AA},
+ main/ammunition ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AE},
+ main/stores ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AF},
+ main/auxiliary flag ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AGF},
+ main/intelligence collector/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AGI},
+ main/ocean research ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AGO},
+ main/survey ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AGS},
+ main/hospital ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AH},
+ main/naval cargo ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AK},
+ main/combat support ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AOE},
+ main/oiler/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AOR},
+ main/repair ship/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AR},
+ main/submarine tender/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AS},
+ main/ocean going tug/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=AT},
+ main/service craft/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=YY},
+ main/non self propelled barge/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=YB},
+ main/self propelled barge/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=YS},
+ main/harbour tug/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=YT},
+ main/launch/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=YFT},
+ main/civilian/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CIV},
+ main/ship/.style={/MilSymb/.cd, SymbC=seasurface/main/ship},
+ main/cargo/.style={/MilSymb/.cd, SymbC=seasurface/main/cargo},
+ main/container ship/.style={/MilSymb/.cd, SymbC=seasurface/main/container ship},
+ main/dredge/.style={/MilSymb/.cd, SymbC=seasurface/main/dredge},
+ main/roll on roll off/.style={/MilSymb/.cd, SymbC=seasurface/main/roll on roll off},
+ main/ferry/.style={/MilSymb/.cd, SymbC=seasurface/main/ferry},
+ main/heavy lift/.style={/MilSymb/.cd, SymbC=seasurface/main/heavy lift},
+ main/hovercraft/.style={/MilSymb/.cd, SymbC=seasurface/main/hovercraft},
+ main/lash carrier/.style={/MilSymb/.cd, SymbC=seasurface/main/lash carrier},
+ main/tanker/.style={/MilSymb/.cd, SymbC=seasurface/main/tanker},
+ main/passenger ship/.style={/MilSymb/.cd, SymbC=seasurface/main/passenger ship},
+ main/tug/.style={/MilSymb/.cd, SymbC=seasurface/main/tug},
+ main/tow/.style={/MilSymb/.cd, SymbC=seasurface/main/tow},
+ main/hazardous material transport ship/.style={/MilSymb/.cd, SymbC=seasurface/main/hazardous material transport ship},
+ main/junk/.style={/MilSymb/.cd, SymbC=seasurface/main/junk},
+ main/barge/.style={/MilSymb/.cd, SymbC=seasurface/main/barge},
+ main/fishing vessel/.style={/MilSymb/.cd, SymbC=seasurface/main/fishing vessel},
+ main/drifter/.style={/MilSymb/.cd, SymbC=seasurface/main/drifter},
+ main/trawler/.style={/MilSymb/.cd, SymbC=seasurface/main/trawler},
+ main/law enforcement vessel/.style={/MilSymb/.cd, SymbC=seasurface/main/law enforcement vessel},
+ main/sailing boat/.style={/MilSymb/.cd, SymbC=multi/main/sailing boat},
+ main/civilian boat/.style={/MilSymb/.cd, SymbC=seasurface/main/civilian boat},
+ main/civilian rigid hull inflatable boat/.style={/MilSymb/.cd, SymbC=seasurface/main/civilian rigid hull inflatable boat},
+ main/civilian speedboat/.style={/MilSymb/.cd, SymbC=seasurface/main/civilian speedboat},
+ main/civilian jetski/.style={/MilSymb/.cd, SymbC=seasurface/main/civilian jetski},
+ main/civilian unmanned surface water vehicle/.style={/MilSymb/.cd, SymbC=multi/main/civilian unmanned systems},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ upper/.is choice,
+ upper/none/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ upper/anti air warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=AAW},
+ upper/anti submarine warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ASW},
+ upper/escort/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=E},
+ upper/electronic warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=EW},
+ upper/intelligence surveillance reconnaissance/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ISR},
+ upper/mine counter measures/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MCM},
+ upper/missile defence/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MD},
+ upper/medical/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ME},
+ upper/mine warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MW},
+ upper/remote multi mission vehicle/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=RMV},
+ upper/special operations force/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=SOF},
+ upper/surface warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=SUW},
+ upper/ballistic missile/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=B},
+ upper/guided missile/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=G},
+ upper/other guided missile/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=M},
+ upper/torpedo/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=T},
+ upper/drone equipped/.style={/MilSymb/.cd, SymbU=seasurface/upper/drone equipped},
+ upper/helicopter equipped/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=H},
+ upper/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ lower/.is choice,
+ lower/none/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=},
+ lower/nuclear powered/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N},
+ lower/heavy/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=H},
+ lower/light/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=L},
+ lower/medium/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=M},
+ lower/dock/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=D},
+ lower/logistics/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=LOG},
+ lower/tank/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=T},
+ lower/vehicle/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=V},
+ lower/fast/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=F},
+ lower/air cushioned/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=J},
+ lower/air cushioned alternate/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=AC},
+ lower/hydrofoil/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=K},
+ lower/autonomous control/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=AUT},
+ lower/remotely piloted/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=RP},
+ lower/expendable/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=EXP},
+ lower/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ track number/.store in=\MilSymb@SymbA,
+ name/.store in=\MilSymb@SymbB,
+ position and movement/.store in=\MilSymb@SymbD,
+ identification/.store in= \MilSymb@SymbE,
+ additional information/.store in=\MilSymb@SymbF,
+ date-time group/.store in= \MilSymb@SymbG,
+ speed leader/.code 2 args={\draw (0,0) -- (##1:##2);},
+ speed leader/.value required,
+ track number=,
+ name=,
+ position and movement=,
+ identification=,
+ additional information=,
+ date-time group=,
+ faction=none,
+ main=none,
+ upper=none,
+ lower=none,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+ \fontfamily{phv}\fontseries{bx}\selectfont
+ \begin{scope}[local bounding box=#3]
+ \pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+ \end{scope}
+ \pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+ \pic at (0,0.34) {MilSymb \MilSymb@SymbU={\MilSymb@SymbUT}}; %Draw upper Symbol
+ \pic at (0,-0.34) {MilSymb \MilSymb@SymbL={\MilSymb@SymbLT}}; %Draw lower Symbol
+ \fontsize{6}{0}\selectfont
+ \ifthenelse{\isequivalentto{\MilSymb@SymbA}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbA};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbB}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbB};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbD}{\empty} \AND \isequivalentto{\MilSymb@SymbG}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbD\MilSymb@SymbG};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbE}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbE};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbF}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbF};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\NewDocumentCommand\OwnShip{o D(){0,0} d() g}{
+\tikzset{#1}
+\begin{scope}[shift={(#2)}, local bounding box=#3, scale=\MilSymb@scale, transform shape]
+\draw [ultra thick, friendlyA] (0, 0) circle (0.5);
+\draw [ultra thick, friendlyA] (0.5, 0) -- (-0.5, 0);
+\draw [ultra thick, friendlyA] (0, 0.5) -- (0, -0.5);
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\NewDocumentCommand\MilSeaSubsurface{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=seasubsurface/none, fill=white},
+ faction/friendly/.style={/MilSymb/.cd, shape=seasubsurface/friendly, fill=friendlyA},
+ faction/hostile/.style={/MilSymb/.cd, shape=seasubsurface/hostile, fill=hostileA},
+ faction/neutral/.style={/MilSymb/.cd, shape=seasubsurface/neutral, fill=neutralA},
+ faction/unknown/.style={/MilSymb/.cd, shape=seasubsurface/unknown, fill=unknownA},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/military/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=MIL},
+ main/submarine/.style={/MilSymb/.cd, SymbC=seasubsurface/main/submarine},
+ main/surfaced submarine/.style={/MilSymb/.cd, SymbC=seasubsurface/main/surfaced submarine},
+ main/bottomed submarine/.style={/MilSymb/.cd, SymbC=seasubsurface/main/bottomed submarine},
+ main/snorkelling submarine/.style={/MilSymb/.cd, SymbC=seasubsurface/main/snorkelling submarine},
+ main/other submersible/.style={/MilSymb/.cd, SymbC=seasubsurface/main/other submersible},
+ main/autonomous underwater vehicle/.style={/MilSymb/.cd, SymbC=multi/main/unmanned systems},
+ main/non submarine/.style={/MilSymb/.cd, SymbC=seasubsurface/main/non submarine},
+ main/military diver/.style={/MilSymb/.cd, SymbC=seasubsurface/main/military diver},
+ main/civilian/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=CIV},
+ main/civilian submersible/.style={/MilSymb/.cd, SymbC=seasubsurface/main/civilian submersible},
+ main/civilian autonomous underwatervehicle/.style={/MilSymb/.cd, SymbC=multi/main/civilian unmanned systems},
+ main/civilian diver/.style={/MilSymb/.cd, SymbC=multi/main/diver},
+ main/underwater weapon/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=WPN},
+ main/torpedo/.style={/MilSymb/.cd, SymbC=seasubsurface/main/torpedo},
+ main/improvised explosive device/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=IED},
+ main/underwater decoy/.style={/MilSymb/.cd, SymbC=seasubsurface/main/underwater decoy},
+ main/sea mine decoy/.style={/MilSymb/.cd, SymbC=seasubsurface/main/sea mine decoy},
+ main/bottomed sea mine decoy/.style={/MilSymb/.cd, SymbC=seasubsurface/main/bottomed sea mine decoy},
+ main/moored sea mine decoy/.style={/MilSymb/.cd, SymbC=seasubsurface/main/moored sea mine decoy},
+ main/unexploded ordnance/.style={/MilSymb/.cd, SymbC=seasubsurface/mine/unexploded ordanance},
+ main/military seabed installation/.style={/MilSymb/.cd, SymbC=seasubsurface/main/military seabed installation},
+ main/civilian seabed installation/.style={/MilSymb/.cd, SymbC=seasubsurface/main/civilian seabed installation},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ upper/.is choice,
+ upper/none/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ upper/anti submarine warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ASW},
+ upper/auxiliary/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=AUX},
+ upper/command and control/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=C2},
+ upper/intelligence surveillance reconnaissance/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=ISR},
+ upper/mine countermeasures/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MCM},
+ upper/mine warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MW},
+ upper/surface warfare/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=SUW},
+ upper/attack/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=A},
+ upper/ballistic missile/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=B},
+ upper/guided missile/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=G},
+ upper/other guided missile/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=M},
+ upper/special operations force/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=SOF},
+ upper/possible submarine low 1/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=P1},
+ upper/possible submarine low 2/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=P2},
+ upper/possible submarine high 3/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=P3},
+ upper/possible submarine high 4/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=P4},
+ upper/probable submarine/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=PB},
+ upper/certain submarine/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=CT},
+ upper/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ lower/.is choice,
+ lower/none/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=},
+ lower/air independent propulsion/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=AI},
+ lower/diesel propulsion/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=D},
+ lower/diesel type 1/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=D1},
+ lower/diesel type 2/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=D2},
+ lower/diesel type 3/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=D3},
+ lower/nuclear propulsion/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N},
+ lower/nuclear type 1/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N1},
+ lower/nuclear type 2/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N2},
+ lower/nuclear type 3/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N3},
+ lower/nuclear type 4/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N4},
+ lower/nuclear type 5/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N5},
+ lower/nuclear type 6/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N6},
+ lower/nuclear type 7/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=N7},
+ lower/autonomous control/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=AUT},
+ lower/remotely piloted/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=RP},
+ lower/expendable/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=EXP},
+ lower/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ track number/.store in=\MilSymb@SymbA,
+ name/.store in=\MilSymb@SymbB,
+ position and movement/.store in=\MilSymb@SymbD,
+ identification/.store in= \MilSymb@SymbE,
+ additional information/.store in=\MilSymb@SymbF,
+ date-time group/.store in= \MilSymb@SymbG,
+ speed leader/.code 2 args={\draw (0,0) -- (##1:##2);},
+ speed leader/.value required,
+ track number=,
+ name=,
+ position and movement=,
+ identification=,
+ additional information=,
+ date-time group=,
+ faction=none,
+ main=none,
+ upper=none,
+ lower=none,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+ \fontfamily{phv}\fontseries{bx}\selectfont
+\begin{scope}[local bounding box=#3]
+ \pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+\end{scope}
+ \pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+ \pic at (0,0.34) {MilSymb \MilSymb@SymbU={\MilSymb@SymbUT}}; %Draw upper Symbol
+ \pic at (0,-0.34) {MilSymb \MilSymb@SymbL={\MilSymb@SymbLT}}; %Draw lower Symbol
+ \fontsize{6}{0}\selectfont
+ \ifthenelse{\isequivalentto{\MilSymb@SymbA}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbA};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbB}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbB};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbD}{\empty} \AND \isequivalentto{\MilSymb@SymbG}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbD\MilSymb@SymbG};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbE}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbE};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbF}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbF};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\newif\ifneutralised
+\NewDocumentCommand\MilMine{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=seasubsurface/none, fill=white, iconcolour=black},
+ faction/friendly/.style={/MilSymb/.cd, shape=seasubsurface/friendly, fill=friendlyA, iconcolour=friendlyB},
+ faction/hostile/.style={/MilSymb/.cd, shape=seasubsurface/hostile, fill=hostileA, iconcolour=hostileB},
+ faction/neutral/.style={/MilSymb/.cd, shape=seasubsurface/neutral, fill=neutralA, iconcolour=unknownB},
+ faction/unknown/.style={/MilSymb/.cd, shape=seasubsurface/unknown, fill=unknownA, iconcolour=unknownB},
+ mine/.is choice,
+ mine/free/.style={/MilSymb/.cd, SymbC=seasubsurface/mine/sea mine},
+ mine/bottomed/.style={/MilSymb/.cd, SymbC=seasubsurface/mine/bottomed sea mine},
+ mine/moored/.style={/MilSymb/.cd, SymbC=seasubsurface/mine/moored sea mine},
+ mine/floating/.style={/MilSymb/.cd, SymbC=seasubsurface/mine/floating sea mine},
+ mine/in other position/.style={/MilSymb/.cd, SymbC=seasubsurface/mine/sea mine in other position},
+ mine/rising/.style={/MilSymb/.cd, SymbC=seasubsurface/mine/rising sea mine},
+ mine/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ neutralised/.is if=neutralised,
+ no frame/.is if=noframe,
+ iconcolour/.code={\colorlet{MilSymb@iconcolour}{##1}},
+ track number/.store in=\MilSymb@SymbA,
+ name/.store in=\MilSymb@SymbB,
+ position and movement/.store in=\MilSymb@SymbD,
+ identification/.store in= \MilSymb@SymbE,
+ additional information/.store in=\MilSymb@SymbF,
+ date-time group/.store in= \MilSymb@SymbG,
+ track number=,
+ name=,
+ position and movement=,
+ identification=,
+ additional information=,
+ date-time group=,
+ faction=none,
+ mine=normal,
+ neutralised=false,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+ \fontfamily{phv}\fontseries{bx}\selectfont
+ \ifnoframe
+ \else
+ \tikzset{/MilSymb/.cd, iconcolour=black}
+ \begin{scope}[local bounding box=#3]
+ \pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+ \fi
+ \ifneutralised
+ \pic {MilSymb \MilSymb@SymbC-neutralised}; %Draw neutralised mine
+ \else
+ \pic {MilSymb \MilSymb@SymbC}; %Draw mine
+ \fi
+ \end{scope}
+ \fontsize{6}{0}\selectfont
+ \ifthenelse{\isequivalentto{\MilSymb@SymbA}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbA};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbB}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbB};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbD}{\empty} \AND \isequivalentto{\MilSymb@SymbG}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbD\MilSymb@SymbG};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbE}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbE};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbF}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbF};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\NewDocumentCommand\MilSpace{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=space/none, fill=white},
+ faction/friendly/.style={/MilSymb/.cd, shape=space/friendly, fill=friendlyA},
+ faction/hostile/.style={/MilSymb/.cd, shape=space/hostile, fill=hostileA},
+ faction/neutral/.style={/MilSymb/.cd, shape=space/neutral, fill=neutralA},
+ faction/unknown/.style={/MilSymb/.cd, shape=space/unknown, fill=unknownA},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/space vehicle/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SV},
+ main/reentry vehicle/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=RV},
+ main/planet lander/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=PL},
+ main/military orbiter shuttle/.style={/MilSymb/.cd, SymbC=space/main/military orbiter shuttle},
+ main/civilian orbiter shuttle/.style={/MilSymb/.cd, SymbC=space/main/civilian orbiter shuttle},
+ main/military capsule/.style={/MilSymb/.cd, SymbC=space/main/military capsule},
+ main/civilian capsule/.style={/MilSymb/.cd, SymbC=space/main/civilian capsule},
+ main/satellite/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=SAT},
+ main/military satellite/.style={/MilSymb/.cd, SymbC=space/main/military satellite},
+ main/civilian satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian satellite},
+ main/anti satellite weapon/.style={/MilSymb/.cd, SymbC=space/main/anti satellite weapon},
+ main/military astronomical satellite/.style={/MilSymb/.cd, SymbC=space/main/military astronomical satellite},
+ main/civilian astronomical satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian astronomical satellite},
+ main/military bio satellite/.style={/MilSymb/.cd, SymbC=space/main/military bio satellite},
+ main/civilian bio satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian bio satellite},
+ main/military communications satellite/.style={/MilSymb/.cd, SymbC=space/main/military communications satellite},
+ main/civilian communications satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian communications satellite},
+ main/military earth observation satellite/.style={/MilSymb/.cd, SymbC=space/main/military earth observation satellite},
+ main/civilian earth observation satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian earth observation satellite},
+ main/military miniaturised satellite/.style={/MilSymb/.cd, SymbC=space/main/military miniaturised satellite},
+ main/civilian miniaturised satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian miniaturised satellite},
+ main/military navigational satellite/.style={/MilSymb/.cd, SymbC=space/main/military navigational satellite},
+ main/civilian navigational satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian navigational satellite},
+ main/reconnaissance satellite/.style={/MilSymb/.cd, SymbC=space/main/reconnaissance satellite},
+ main/military space station/.style={/MilSymb/.cd, SymbC=space/main/military space station},
+ main/civilian space station/.style={/MilSymb/.cd, SymbC=space/main/civilian space station},
+ main/military tether satellite/.style={/MilSymb/.cd, SymbC=space/main/military tether satellite},
+ main/civilian tether satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian tether satellite},
+ main/military weather satellite/.style={/MilSymb/.cd, SymbC=space/main/military weather satellite},
+ main/civilian weather satellite/.style={/MilSymb/.cd, SymbC=space/main/civilian weather satellite},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ upper/.is choice,
+ upper/none/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ upper/low earth orbit/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=LEO},
+ upper/medium earth orbit/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MEO},
+ upper/high earth orbit/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=HEO},
+ upper/geosynchronous orbit/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=GSO},
+ upper/geostationary orbit/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=GO},
+ upper/molinya orbit/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MO},
+ upper/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ lower/.is choice,
+ lower/none/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=},
+ lower/optical/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=O},
+ lower/infra red/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=IR},
+ lower/radar/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=R},
+ lower/signals intelligence/.style={/MilSymb/.cd, SymbL=text/small, SymbLT=SI},
+ lower/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ track number/.store in=\MilSymb@SymbA,
+ name/.store in=\MilSymb@SymbB,
+ position and movement/.store in=\MilSymb@SymbD,
+ nation/.store in= \MilSymb@SymbE,
+ additional information/.store in=\MilSymb@SymbF,
+ speed leader/.code 2 args={\draw (0,0) -- (##1:##2);},
+ speed leader/.value required,
+ track number=,
+ name=,
+ position and movement=,
+ nation=,
+ additional information=,
+ faction=none,
+ main=none,
+ upper=none,
+ lower=none,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+ \fontfamily{phv}\fontseries{bx}\selectfont
+\begin{scope}[local bounding box=#3]
+\pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+\end{scope}
+ \pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+ \pic at (0,0.34) {MilSymb \MilSymb@SymbU={\MilSymb@SymbUT}}; %Draw upper Symbol
+ \pic at (0,-0.34) {MilSymb \MilSymb@SymbL={\MilSymb@SymbLT}}; %Draw lower Symbol
+ \fontsize{6}{0}\selectfont
+ \ifthenelse{\isequivalentto{\MilSymb@SymbA}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbA};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbB}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbB};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbD}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbD};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbE}{\empty}}{}{\node [anchor=west] at ($(M.north east)!0.83!(M.south east)$) {\MilSymb@SymbE};}
+ \ifthenelse{\isequivalentto{\MilSymb@SymbF}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbF};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\newif\ifmanmade
+\NewDocumentCommand\MilDebris{ o D(){0,0} d() g}{
+\tikzset{%
+ /MilSymb/.cd,
+ size/.is choice,
+ size/small/.style={/MilSymb/.cd, shape=space/debris/small},
+ size/medium/.style={/MilSymb/.cd, shape=text/small},
+ size/large/.style={/MilSymb/.cd, shape=space/debris/large},
+ man made/.is if=manmade,
+ size=small,
+ man made=false,
+ #1,
+}%
+\begin{scope}[shift={(#2)}, local bounding box=#3, scale=\MilSymb@scale, transform shape]
+\draw circle (0.5);
+\ifmanmade
+\fill circle (0.15);
+\else
+\draw circle (0.15);
+\fi
+\pic {MilSymb \MilSymb@shape}; %Draw debris modifier
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\NewDocumentCommand\MilActivity{ o D(){0,0} d() g}{
+\tikzset{
+ /MilSymb/.cd,
+ selectedfaction/.store in=\MilSymb@selectedfaction,
+ faction/.is choice,
+ faction/none/.style={/MilSymb/.cd, shape=activity/none, fill=white, selectedfaction=neutral},
+ faction/friendly/.style={/MilSymb/.cd, shape=activity/friendly, fill=friendlyA, selectedfaction=friendly},
+ faction/hostile/.style={/MilSymb/.cd, shape=activity/hostile, fill=hostileA, selectedfaction=hostile},
+ faction/neutral/.style={/MilSymb/.cd, shape=activity/neutral, fill=neutralA, selectedfaction=neutral},
+ faction/unknown/.style={/MilSymb/.cd, shape=activity/unknown, fill=unknownA, selectedfaction=unknown},
+ main/.is choice,
+ main/none/.style={/MilSymb/.cd, SymbC=text/small, SymbCT=},
+ main/arrest/.style={/MilSymb/.cd, SymbC=activity/main/arrest},
+ main/fire/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=FIRE},
+ main/attempted criminal activity/.style={/MilSymb/.cd, SymbC=multi/main/victim of an attempted crime},
+ main/demonstration/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=MASS},
+ main/drive by shooting/.style={/MilSymb/.cd, SymbC=activity/main/drive by shooting},
+ main/drug related activities/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=DRUG},
+ main/explosion/.style={/MilSymb/.cd, SymbC=activity/main/explosion},
+ main/improvised explosive device explosion/.style={/MilSymb/.cd, SymbC=activity/main/improvised explosive device explosion},
+ main/extortion 1/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=\$},
+ main/extortion 2/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=\pounds},
+ main/extortion 3/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=\texteuro},
+ main/extortion 4/.style={/MilSymb/.cd, SymbC=text/normal, SymbCT=\textyen},
+ main/graffiti/.style={/MilSymb/.cd, SymbC=activity/main/graffiti},
+ main/killing/.style={/MilSymb/.cd, SymbC=multi/main/killing victim},
+ main/patrolling/.style={/MilSymb/.cd, SymbC=activity/main/patrolling},
+ main/poisoning/.style={/MilSymb/.cd, SymbC=activity/main/poisoning},
+ main/psychological operations/.style={/MilSymb/.cd, SymbC=multi/main/psychological operations},
+ main/radio and television psychological operations/.style={/MilSymb/.cd, SymbC=activity/main/radio and television psychological operations},
+ main/riot/.style={/MilSymb/.cd, SymbC=text/squashed, SymbCT=RIOT},
+ main/searching/.style={/MilSymb/.cd, SymbC=activity/main/searching},
+ main/automobile/.style={/MilSymb/.cd, SymbC=activity/main/automobile},
+ main/pleasure craft/.style={/MilSymb/.cd, SymbC=multi/main/sailing boat},
+ main/individual/.style={/MilSymb/.cd, SymbC=multi/main/individual},
+ main/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ upper/.is choice,
+ upper/none/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=},
+ upper/assassination/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=AS},
+ upper/execution/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=EX},
+ upper/hijack/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=H},
+ upper/house to house/.style={/MilSymb/.cd, SymbU=activity/upper/house to house},
+ upper/kidnapping/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=K},
+ upper/murder/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=MU},
+ upper/piracy/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=PI},
+ upper/rape/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=RA},
+ upper/written/.style={/MilSymb/.cd, SymbU=text/small, SymbUT=W},
+ upper/.unknown/.code={\let\custom\pgfkeys@was@choice \pgfkeysalso{/MilSymb/.cd, SymbC=custom/\custom}},
+ staff comments/.store in=\MilSymb@SymbG,
+ additional information/.store in=\MilSymb@SymbH,
+ evaluation rating/.store in=\MilSymb@SymbJ,
+ country indicator/.store in=\MilSymb@SymbAC,
+ date-time group/.store in=\MilSymb@SymbW,
+ location/.store in=\MilSymb@SymbY,
+ offset/.code 2 args={\begin{scope}[shift={(#2)}]\ifthenelse{\equal{\MilSymb@drawH}{true}\AND \equal{\MilSymb@selectedfaction}{friendly}}{\draw (-0.75, -0.75) -- +($(0, -##1) - (0, -0.75)$) -- +(##2);}{\draw (0,0) -- +(0, -##1) -- +(##2);}\end{scope}},
+ offset/.value required,
+ movement/.code 2 args={\begin{scope}[shift={(#2)}]\ifthenelse{\equal{\MilSymb@drawH}{true}\AND \equal{\MilSymb@selectedfaction}{friendly}}{ \draw [-{Stealth[inset=0pt,scale=1]}] (-0.75, -0.75) -- +($(0, -##1) - (0, -0.75)$) -- +(##2);}{\draw [-{Stealth[inset=0pt,scale=1]}] (0,0) -- +(0, -##1) -- +(##2);}\end{scope}},
+ movement/.value required,
+ faction=friendly,
+ main=none,
+ upper=none,
+ staff comments=,
+ additional information=,
+ evaluation rating=,
+ date-time group=,
+ location=,
+ country indicator=,
+ #1,
+} %
+\begin{scope}[shift={(#2)}, scale=\MilSymb@scale, transform shape]
+\fontfamily{phv}\fontseries{bx}\selectfont
+\begin{scope}[local bounding box=#3]
+ \pic [local bounding box=M] {MilSymb \MilSymb@shape}; %Draw background shape
+\end{scope}
+\pic {MilSymb \MilSymb@SymbC={\MilSymb@SymbCT}}; %Draw main Symbol
+\pic at (0,0.34) {MilSymb \MilSymb@SymbU={\MilSymb@SymbUT}}; %Draw upper Symbol
+\fontsize{6}{0}\selectfont
+\ifthenelse{\isequivalentto{\MilSymb@SymbAC}{\empty}}{}{\node [anchor=west] at ($(M.north east)!-0.17!(M.south east)$) {\MilSymb@SymbAC};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbG}{\empty}}{}{\node [anchor=west] at ($(M.north east)!.17!(M.south east)$) {\MilSymb@SymbG};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbH}{\empty}}{}{\node [anchor=west] at (M.east) {\MilSymb@SymbH};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbJ}{\empty}}{}{\node [anchor=west] at ($(M.north east)!1.17!(M.south east)$) {\MilSymb@SymbJ};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbW}{\empty}}{}{\node [anchor=east] at ($(M.north west)!-0.17!(M.south west)$) {\MilSymb@SymbW};}
+\ifthenelse{\isequivalentto{\MilSymb@SymbY}{\empty}}{}{\node [anchor=east] at ($(M.north west)!.17!(M.south west)$) {\MilSymb@SymbY};}
+\end{scope}
+ \IfNoValueF{#4}{\node [anchor=west, align=left] at (#3.east) {#4};}
+}
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/milsymb/milsymb.tex b/graphics/pgf/contrib/milsymb/milsymb.tex
new file mode 100644
index 0000000000..434a299855
--- /dev/null
+++ b/graphics/pgf/contrib/milsymb/milsymb.tex
@@ -0,0 +1,1613 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% MilSymb Manual File %%
+%%-------------------- %%
+%% Version: 1.01 %%
+%% Last Updated: 03/07/2019 %%
+%% Github: https://github.com/ralphieraccoon/MilSymb %%
+%% Copyright: Damian Crosby 2018 %%
+%% Licence: Creative Commons Attribution-ShareAlike 4.0 International License %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% WARNING! Typesetting tables can cause memory overflow. Set --extra-mem-top=10000000 in Typesetting or texmf.cnf %
+% Table typesetting also takes a very long time. Consider commenting out \input commands when editing the rest of the document. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[a4paper, titlepage]{article}
+\usepackage{milsymb, arev, ltablex, makecell, multirow, tikzpagenodes, vhistory, titlesec, float, forest, tocloft, alltt, array, tikz-dimline, threeparttable, textcomp, pifont, colortbl, caption, enumitem, graphicx, pdflscape, adjustbox, graphicx}
+\keepXColumns
+\usepackage[a4paper, margin=1.75cm]{geometry}
+\usepackage[colorlinks=true, urlcolor=blue]{hyperref}
+\usetikzlibrary{calc, arrows.meta, matrix}
+\newcolumntype{n}{>{\raggedright\arraybackslash}m{5cm}}
+\newcolumntype{s}{>{\centering\arraybackslash}m{1.75cm}}
+\newcommand\MilSymb{\textbf{\texttt{MilSymb}}}
+\newcommand\DocLink{\href{https://www.awl.edu.pl/images/en/APP_6_C.pdf}{APP6-(C)}}
+\renewcommand\theadfont{\bfseries}
+\newenvironment{writett}{\ttfamily}{\par}
+\setcounter{secnumdepth}{4}
+\setcounter{tocdepth}{4}
+\setlength{\cftsubsecnumwidth}{3em}
+\setlength{\cftsubsubsecnumwidth}{4em}
+\setlength{\cftparanumwidth}{5em}
+\DeclareGraphicsExtensions{.png}
+\title{MilSymb}
+\author{Damian Crosby}
+\begin{document}
+\thispagestyle{empty}
+\begin{center}
+\begin{tikzpicture}[remember picture]
+
+\coordinate (NE) at ($(current page text area.north east)-(1.5, 1.5)$);
+\coordinate (NW) at ($(current page text area.north west)-(-1.5, 1.5)$);
+\coordinate (SE) at ($(current page text area.south east)-(1.5, -1.5)$);
+\coordinate (SW) at ($(current page text area.south west)-(-1.5, -1.5)$);
+
+\MilLand[faction=hostile, echelon=team, main=infantry, scale=2](NE)
+\MilAir[faction=friendly, main=military fixed wing, upper=jammer, lower=light, scale=2](NW)
+\MilSeaSurface[faction=neutral, main=hazardous material transport ship, lower=fast, scale=2](SE)
+\MilActivity[faction=unknown, main=searching, upper=house to house, scale=2](SW)
+
+\MilLand[faction=unknown, echelon=battalion, main=armoured, upper=missile, lower=long range, scale=2]($(NE)!0.33!(NW)$)
+\MilEquipment[faction=neutral, main=heavy machine gun, mobility=pack animal, scale=2]($(NE)!0.66!(NW)$)
+
+\MilSpace[faction=hostile, main=military earth observation satellite, upper=low earth orbit, lower=radar, scale=2]($(SE)!0.33!(SW)$)
+\MilInstallation[faction=friendly, main=electric power, upper=nuclear energy, scale=2]($(SE)!0.66!(SW)$)
+
+\MilSeaSubsurface[faction=friendly, main=snorkelling submarine, upper=auxiliary, lower=nuclear type 5, scale=2]($(NE)!0.2!(SE)$)
+\MilLand[faction=neutral, echelon=platoon, main=supply, supply={2}{4}, scale=2]($(NE)!0.4!(SE)$)
+\MilActivity[faction=hostile, main=attempted criminal activity, upper=rape, scale=2]($(NE)!0.6!(SE)$)
+\MilEquipment[faction=unknown, main=tank recovery vehicle, mobility=wheeled semi trailer, scale=2]($(NE)!0.8!(SE)$)
+
+\MilMissile[faction=hostile, left=sub surface, right=launched, scale=2]($(NW)!0.2!(SW)$)
+\MilInstallation[faction=unknown, main=civilian telecommunications, upper=television, scale=2]($(NW)!0.4!(SW)$)
+\MilSpace[faction=friendly, main=civilian space station, upper=geosynchronous orbit, scale=2]($(NW)!0.6!(SW)$)
+\MilLand[faction=neutral, echelon=corps, main=armoured, upper=missile, lower=long range, scale=2]($(NW)!0.8!(SW)$)
+
+\pgfresetboundingbox
+\path[use as bounding box] (0,0);
+
+\end{tikzpicture}
+
+{\let\newpage\relax\maketitle}
+\end{center}
+
+\clearpage
+
+\begin{versionhistory}
+\renewcommand \vhAuthorColWidth{6cm}
+\vhEntry{1.0}{29/04/2018}{Damian Crosby}{Creation}
+\vhEntry{1.01}{05/07/2019}{Damian Crosby}{Added clarification on DVI output, added clarification that multiple class symbols are found in \texttt{multi}}.
+\end{versionhistory}
+
+\clearpage
+
+\section*{Acknowledgments}
+
+The author would particularly like to thank the following members of the \TeX\ stack exchange community for their solutions to problems during this package\rq{}s development:
+
+\begin{itemize}
+\item \href{https://tex.stackexchange.com/users/39222}{cfr}
+\item \href{https://tex.stackexchange.com/users/9335}{Kpym}
+\item \href{https://tex.stackexchange.com/users/586}{Torbj\o rn T.}
+\item \href{https://tex.stackexchange.com/users/2388}{Ulrike Fischer}
+\end{itemize}
+
+\section*{Attributions}
+
+\begin{itemize}
+\item The \texttt{combatant} icon in the \textbf{\texttt{MilSeaSurface}} command has been adapated from a \href{https://commons.wikimedia.org/wiki/File:Small_battle_symbol.svg}{work} on Wikimedia Commons by \href{https://commons.wikimedia.org/wiki/User:Kathovo}{Kathovo} under the \href{https://creativecommons.org/licenses/by-sa/3.0/}{CC BY-SA 3.0} licence.
+\item The Structure of 1\textsuperscript{st} Marine Division (Figure \ref{org}) receration is based on an \href{https://commons.wikimedia.org/wiki/File:1st_US_Marine_Division.png}{image} created by \href{https://commons.wikimedia.org/wiki/User:Noclador}{Noclador} under the \href{https://creativecommons.org/licenses/by-sa/3.0/}{CC BY-SA 3.0} licence.
+\end{itemize}
+
+\section*{Licence}
+In order to comply with the attributions listed above, this package is licenced under \href{https://creativecommons.org/licenses/by-sa/4.0/}{CC BY-SA 4.0}.
+
+\clearpage
+
+\tableofcontents
+
+\clearpage
+
+\section{Introduction}
+
+\subsection{Package Summary}
+
+This package allows for the drawing of symbols from the \textit{NATO Joint Military Symbology} library, as detailed in the document \DocLink. It is designed to replicate the \lq\lq{}building block\rq\rq{} nature of the symbols in its command syntax using \texttt{pgf} keys, allowing the user to generate the entire symbol, including additional text fields, in one compact command.
+
+\subsection{Package Dependencies}
+
+The \MilSymb\ package uses the following packages as dependencies:
+
+\begin{itemize}
+\item \texttt{tikz}
+\item \texttt{fontenc}
+\item \texttt{fix-cm}
+\item \texttt{arevmath}
+\item \texttt{marvosym}
+\item \texttt{acronym}
+\item \texttt{amssymb}
+\item \texttt{xifthen}
+\item \texttt{xparse}
+\end{itemize}
+
+\subsection{Using \MilSymb}
+
+To use \MilSymb\ in your document, just include \texttt{\textbackslash usepackage\{milsymb\}} in your preamble. \MilSymb\ has only been tested on \LaTeX, other \TeX\ flavours will probably not work. All \MilSymb\ symbols must be placed inside a TikZ environment, either as part of an inline \texttt{tikz} command or an \texttt{tikzpicture} enviroment. As with other packages that use TikZ or other postscript based drawing programs, DVI format is not directly supported, though some DVI viewers are able to display TikZ images by embedding postscript.
+
+\subsubsection{Package Options}
+
+Currently, there are no package options specified for \MilSymb.
+
+\subsubsection{Symbol Construction}
+
+\textit{NATO Joint Military Symbology} uses a \lq\lq{}building block\rq\rq{} philosophy when constructing military symbols, so each symbol can be broken into individual components. Only a brief overview will be given here, more information can be found in \DocLink. These components are shown in Figure \ref{Annotate}.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilLand[faction=friendly, main=armoured engineer, upper=survey, lower=bicycle equipped, frame status=normal, echelon=platoon, scale=2, movement={2}{2,-3}, unique designation=EX1, country indicator=GBR, altitude value=150, evaluation rating=A1, staff comments=EXAMPLE, higher formation=ENG 21]
+\draw [red, {Circle[length=5pt]}-] (-1,-0.75) -- ++(225:1) -- ++(180:2) node[anchor=east]{Frame};
+\draw [red, {Circle[length=5pt]}-] (0.1,0) -- ++(180:2) node[anchor=east]{Icon};
+\draw [red, {Circle[length=5pt]}-] (0.05,0.62) -- ++(135:1) -- ++(180:2.7) node[anchor=east]{Modifier};
+\draw [red, {Circle[length=5pt]}-] (0.05,-0.62) -- ++(225:2) -- ++(180:2) node[anchor=east]{Modifier};
+\draw [red, {Circle[length=5pt]}-{Circle[length=5pt]}] (-2,-0.6) -- ++(180:1) -- ++(135:0.9) coordinate(A) -- ++(45:0.9) -- ++(0:1);
+\draw [red, {Circle[length=5pt]}-{Circle[length=5pt]}] (3,0.65) -- ++(0:1) -- ++(315:0.9) coordinate(B) -- ++(225:0.9) -- ++(180:1.5);
+\draw [shift={(-1,0.7)}, red, {Circle[length=5pt]}-] (3,0.65) -- ++(0:1.3) -- ++(315:1);
+\draw [shift={(-1,-0.67)}, red, {Circle[length=5pt]}-] (3,-0.65) -- ++(0:1.3) -- ++(45:1);
+\draw [red] (A) -- ++(180:1) node[anchor=east]{Amplifiers};
+\draw [red] (B) -- ++(0:1) node[anchor=west]{Amplifiers};
+\draw [red, {Circle[length=5pt]}-] (0,1.2) -- ++(90:1) node[anchor=south]{Amplifier};
+\draw [red, {Circle[length=5pt]}-] (0,-1.9) -- ++(270:1) node[anchor=north]{Amplifier};
+\end{tikzpicture}
+\caption{Annotation of symbol components.}
+\label{Annotate}
+\end{figure}
+
+\begin{itemize}
+\item The \textbf{Frame} consists of a filled shape encompassing the icon and modifiers, denoting the type (land, sea surface, air, etc.) and faction (friendly, hostile, neutral, unknown) of the symbol. In some situations this is optional.
+\item The \textbf{Icon} denotes the entity the symbol represents (infantry, tank, mine, etc.). It is always placed in the centre of the symbol.
+\item The \textbf{Modifiers} are symbols that go above and below the icon (or to the left and right in the case of missile symbols, and just below the frame in the case of equipment symbols). These \lq\lq{}modify\rq\rq{} the entity with additional features or information (equipped with rocket launchers, extra heavy, etc.) These are usually optional.
+\item The \textbf{Amplifiers} are text and symbols that go outside the frame, and denote additional attributes of the symbol (country of origin, military echelon, speed and direction, etc.). These are always optional.
+\end{itemize}
+
+\section{Symbol Commands}
+
+\subsection{General Command Structure}
+
+The general structure of a \MilSymb\ command is as follows. Syntax in \textit{italics} is optional:\\
+
+\texttt{\textbackslash command[key, key=value]\textit{(location)(name)\{label\}}}
+
+\begin{itemize}
+\item \texttt{command} is the name of the command. All are prefixed with \texttt{Mil}-, and end with \texttt{Air}, \texttt{Missile}, \texttt{Land}, \texttt{Equipment}, \texttt{Installation}, \texttt{SeaSurface}, \texttt{SeaSubsurface}, \texttt{Mine}, \texttt{Space}, \texttt{Debris} and\\ \texttt{Activity}. These mostly correspond to the categories found in \DocLink, except for \texttt{Missile}, \texttt{Mine} and \texttt{Debris}, which have been broken off from \texttt{Air}, \texttt{SeaSubsurface} and \texttt{Space} for convenience. The \texttt{OwnShip} command is an exception to this rule, and does not have the \texttt{Mil}- prefix.
+
+\item \texttt{key} and \texttt{key=value} are the options used to build the symbol, such as faction, icons, modifiers, and amplifiers. Keys with no value define boolean switches, such as \texttt{unclear}. Keys with values can have one parameter, such as \texttt{faction}, or two parameters, such as \texttt{speed leader}. In the latter case, the syntax is \texttt{key=\{value1\}\{value2\}}.
+\item \texttt{location} is an optional coordinate or coordinate reference to place the symbol. This is generally needed when placing multiple symbols in one \texttt{tikzpicture}.
+\item \texttt{name} is an optional reference label that acts just like the \texttt{name} property of a node in TikZ. It exposes standard rectangle node anchors such as \texttt{north} and \texttt{south}, allowing connectors to be drawn between symbols. This is useful when drawing organisation charts and similar (see Example \ref{org}).
+\item \texttt{label} is an optional text label that is added to the right of the symbol.
+\end{itemize}
+
+\subsubsection{Shared Keys}
+
+These are all the keys that are shared by multiple \MilSymb\ commands. Not all keys are shared by all commands, please see Table \ref{shared} for details about which keys are used by which commands.
+
+\begin{table}[H]
+\centering
+\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|}
+\hline
+\multirow{10}{*}{\thead{Command}} & \multicolumn{12}{c|}{\thead{Shared Key}} \\ \cline{2-13}
+& \rotatebox{90}{\thead{\texttt{faction}}} & \rotatebox{90}{\thead{\texttt{main}}} & \rotatebox{90}{\thead{\texttt{upper}}} & \rotatebox{90}{\thead{\texttt{lower}}} & \rotatebox{90}{\thead{\texttt{frame status}}} & \rotatebox{90}{\thead{\texttt{monochrome}}} & \rotatebox{90}{\thead{\texttt{scale}}} & \rotatebox{90}{\thead{\texttt{no frame}}} & \rotatebox{90}{\thead{\texttt{speed leader}}} & \rotatebox{90}{\thead{\texttt{offset, movement}}~} & \rotatebox{90}{\thead{\texttt{feint or dummy}}} & \rotatebox{90}{\thead{\texttt{headquarters}}}\\ \hline
+\texttt{MilAir} & & & & & & & & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} \\ \hline
+\texttt{MilMissile} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & & & & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black}\\ \hline
+\texttt{MilLand} & & & & & & & & \cellcolor{black} & \cellcolor{black} & & & 2 \\ \hline
+\texttt{MilEquipment} & & & \cellcolor{black} & \cellcolor{black} & 1 & & & & \cellcolor{black} & & & \cellcolor{black} \\ \hline
+\texttt{MilInstallation} & & & & \cellcolor{black} & & & & \cellcolor{black} & \cellcolor{black} & & & 2\\ \hline
+\texttt{MilSeaSurface} & & & & & & & & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black}& \cellcolor{black}\\ \hline
+\texttt{MilSeaSubSurface} & & & & & & & & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black}\\ \hline
+\texttt{MilMine} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & 1 & & & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} \\ \hline
+\texttt{MilSpace} & & & & & & & & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black}\\ \hline
+\texttt{MilActivity} & & & & \cellcolor{black} & & & & \cellcolor{black} & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black}\\ \hline
+\texttt{MilDebris} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black}\\ \hline
+\texttt{OwnShip} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black} & \cellcolor{black}\\ \hline
+\end{tabular}
+\begin{tablenotes}
+\item \textsuperscript{1}Not functional when the \texttt{no frame} option is used.
+\item \textsuperscript{2}Only functional when \texttt{faction=friendly}.
+\end{tablenotes}
+\caption{Table of which keys are used in which commands.}
+\label{shared}
+\end{table}
+
+\paragraph{\texttt{main}}
+
+This key defines the icon to use in the centre of the frame. See the individual command icon and modifier tables for the list of available values.
+
+\paragraph{\texttt{upper}}
+
+This key defines the modifier to use above the icon defined by \texttt{main}. See the individual command icon and modifier tables for the list of available values.
+
+\paragraph{\texttt{lower}}
+
+This key defines the modifier to use below the icon defined by \texttt{main}. See the individual command icon and modifier tables for the list of available values.
+
+\paragraph{\texttt{frame status}}
+
+This key modifies the border of the frame to allow for the expression of both the full set of \lq\lq{}standard identities\rq\rq{}, and the planned status as seen in \DocLink. The \texttt{unclear} value creates a black and white dotted line to display the alternate identities of each faction (assumed friend for friendly, suspect for hostile and pending for unknown, neutral should not use this value). The \texttt{anticipated} value create a longer dashed line to display the planned status. If the \texttt{frame status} key is not set, a standard solid border is used.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, frame status=normal, scale=2] & \MilLand[faction=friendly, main=signal radio teletype centre, frame status=uncertain, scale=2] & \MilLand[faction=friendly, main=signal radio teletype centre, frame status=anticipated, scale=2]\\
+\node{normal}; & \node{\texttt{frame status=unclear}}; & \node{\texttt{frame status=anticipated}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{frame status} key in use.}
+\end{figure}
+
+
+\paragraph{\texttt{faction}}
+
+This key selects the military faction of the symbol relative to the user, which determines the colour and shape of the frame, or the colour of the icon and modifiers if \texttt{no frame} is specified. The values available are \texttt{friendly}, \texttt{hostile}, \texttt{neutral} and \texttt{unknown}.
+
+\begin{table}[H]
+\centering
+\begin{tabular}{|c|c|c|c|c|}
+\hline
+\multirow{2.5}{*}{\thead{Command}} & \multicolumn{4}{c|}{\thead{Faction Frame}} \\ \cline{2-5}
+& \thead{Friendly} & \thead{Hostile} & \thead{Neutral} & \thead{Unknown}\\
+\hline
+\texttt{MilAir} + \texttt{MilMissile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=friendly]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=hostile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=neutral]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilAir[faction=unknown]}}\\
+\hline
+\texttt{MilLand} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown]}}\\
+ \hline
+\texttt{MilEquipment}* + \texttt{MilSeaSurface} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=friendly]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=hostile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilEquipment[faction=neutral]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown]}}\\
+ \hline
+\texttt{MilInstallation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=friendly]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=hostile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=neutral]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilInstallation[faction=unknown]}}\\
+ \hline
+\texttt{MilSeaSubsurface} + \texttt{MilMine}* & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=friendly]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=hostile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=neutral]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSeaSubsurface[faction=unknown]}}\\
+ \hline
+\texttt{MilSpace} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=friendly]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=hostile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=neutral]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilSpace[faction=unknown]}}\\
+ \hline
+\texttt{MilActivity} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=friendly]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=hostile]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=neutral]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilActivity[faction=unknown]}}\\
+ \hline
+\end{tabular}
+\begin{tablenotes}
+\item \qquad \quad *Can be used without a frame using the \texttt{no frame} option.
+\end{tablenotes}
+\caption{Table of all the \MilSymb\ command frames.}
+\end{table}
+
+\paragraph{\texttt{monochrome}}
+
+This boolean switch key allows the symbol to be generated in a monochrome format. All faction colours are instead rendered as an off-white colour as specified in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=2] & \MilLand[faction=friendly, main=signal radio teletype centre, monochrome, scale=2]\\
+\node{normal}; & \node{\texttt{monochrome}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{monochrome} key in use.}
+\end{figure}
+
+\paragraph{\texttt{scale}}
+
+This key allows you to scale the resulting symbol by a multiple. By default (\texttt{scale=1}) the boundary octagon is precisely 1cm in diameter.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=0.5] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=1] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2]\\
+\node{\texttt{scale=0.5}}; & \node{\texttt{scale=1}}; & \node{\texttt{scale=2}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{scale} key in use.}
+\end{figure}
+
+\paragraph{\texttt{no frame}}
+
+This boolean switch key allows for specific commands (namely \textbf{\texttt{MilEquipment}} and \textbf{\texttt{MilMine}}) to be used without a faction frame. Instead, the icon and modifiers are recoloured with a fluorescent version of the faction colour, as per \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilEquipment[faction=friendly, main=mine clearing vehicle, mobility=wheeled and tracked, scale=2] & \MilEquipment[faction=friendly, main=mine clearing vehicle, mobility=wheeled and tracked, scale=2, no frame]\\
+\node{normal}; & \node{\texttt{no frame}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{no frame} key in use.}
+\end{figure}
+
+\paragraph{\texttt{speed leader} (Amplifier)}
+
+This key draws a line from the centre of the symbol at a specified heading for a specified length. This is used to denote the speed (length) and direction (heading) of the symbol. This key takes two arguments, the first is the length and the second is the heading, as shown below:\\
+
+\texttt{speed leader=\{\textit{heading}\}\{\textit{length}\}}
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilAir[faction=friendly, main=military rotary wing, speed leader={35}{3}, scale=2] & \MilAir[faction=friendly, main=military rotary wing, speed leader={118}{4}, scale=2] & \MilAir[faction=friendly, main=military rotary wing, speed leader={335}{2}, scale=2] \\
+\node{\texttt{speed leader=\{35\}\{3\}}}; & \node{\texttt{speed leader=\{118\}\{4\}}}; & \node{\texttt{speed leader=\{335\}\{2\}}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{speed leader} key in use.}
+\end{figure}
+
+\paragraph{\texttt{offset}, \texttt{movement} (Amplifier)}
+
+This key draws a \lq\lq{}leader line\rq\rq{} down from the centre of the symbol, then another to a specified position \textit{offset} from the centre of the symbol. The \texttt{offset} key should be used to denote precise location, and the \texttt{movement} key should be used to indicate direction of movement (in the case of the \texttt{movement} key, the line is tipped by an arrow). \textit{They should not be used simultaneously.} This key takes two arguments, each enclosed in curly braces, the first is the length of the \lq\lq{}leader line\rq\rq{} extending below the symbol, then the second is a pair of TikZ coordinates (with no brackets) indicating the specified position \textit{offset} from the centre of the symbol, as shown below:\\
+
+\texttt{offset=\{\textit{leader length}\}\{\textit{offset}\}}\\
+\indent\texttt{movement=\{\textit{leader length}\}\{\textit{offset}\}}
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=2, offset={3}{2,-4}] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, movement={4}{2,-2}] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, offset={2}{-2,-2}] \\
+\node{\texttt{offset=\{3\}\{2,-4\}}}; & \node{\texttt{ movement=\{4\}\{2,-2\}}}; & \node{\texttt{offset=\{2\}\{-2,-2\}}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{offset} and \texttt{movement} key in use.}
+\end{figure}
+
+\paragraph{\texttt{feint or dummy} (Amplifier)}
+
+This boolean switch key draws the \textit{feint or dummy} amplifier on the symbol. See \DocLink\ for further information about its use.
+
+ \begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=2] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, feint or dummy] \\
+\node{normal}; & \node{\texttt{feint or dummy}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{feint or dummy} key in use.}
+\end{figure}
+
+\paragraph{\texttt{headquarters} (Amplifier)}
+
+This key draws a line down from the south east corner of a \texttt{friendly} \textbf{\texttt{MilLand}} or \textbf{\texttt{MilInstallation}} frame, and then an optional text field below the frame. This is used to denote if the symbol is stationed at a headquarters or some other kind of military base. The key can be provided with no value, which will produce a blank headquaters amplifer, which is a line drawn downwards from the south-west of the symbol frame, or with a set of values that insert acronyms next to the line. Table \ref{headquarters} lists all the options available.
+
+\begin{table}[H]
+\centering
+\begin{tabular}{|l|c|}
+\hline
+\thead{Value} & \thead{Acronym} \\ \hline
+\texttt{assault command post} & ASLT \\ \hline
+\texttt{command group} & CMD \\ \hline
+\texttt{forward command post} & FWD \\ \hline
+\texttt{main command post} & MAIN \\ \hline
+\texttt{rear command post} & REAR \\ \hline
+\texttt{tactical operations centre} & TOC \\ \hline
+\texttt{tactical command post} & TAC \\ \hline
+\end{tabular}
+\caption{Headquarters acronyms.}
+\label{headquarters}
+\end{table}
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=2, headquarters] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, headquarters=tactical operations centre] \\
+\node{\texttt{headquarters} (no value)}; & \node{\texttt{headquarters=tactical operations centre}};\\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{headquarters} key in use.}
+\end{figure}
+
+
+\subsubsection{Text Fields}
+
+Most \MilSymb\ commands (apart from \textbf{\texttt{MilDebris}} and \textbf{\texttt{OwnShip}}) have a set of text amplifiers that go around the edge of the symbol. These are set by individually named keys specified in the \textbf{Text Fields} subheading of each command entry. Some symbols have multiple text fields in the same location, be default no spaces are inserted between these fields, so spaces must be entered manually as appropriate.
+
+\subsubsection{Full Frame Icons}
+
+In some commands (\textbf{\texttt{MilLand}}, \textbf{\texttt{MilInstallation}} and \textbf{\texttt{MilActivity}}) some icons (as set by \texttt{main}) will take up the entire frame. These are referred to as \lq\lq{}full frame\rq\rq{} icons. Modifiers (as set by \texttt{upper} and \texttt{lower}) should not be used when a full frame icon has been selected.
+
+\subsubsection{Grouping}
+
+For \textbf{\texttt{MilLand}} and \textbf{\texttt{MilInstallation}} symbols with the \texttt{faction} key set to \texttt{friendly}, there is the option to group several commands together to indicate several entities in one location. \MilSymb\ provides two \LaTeX\ environments to achieve this, \textbf{\texttt{landgroup}} and \textbf{\texttt{landheadquarters}}. \textbf{\texttt{landgroup}} is designed to be used with normal \textbf{\texttt{MilLand}} symbols, and \textbf{\texttt{landheadquarters}} is designed to be used with symbols that have a headquarters amplifier. Within the environments, each command should be the argument inside an \texttt{\textbackslash item\{...\}} command (note that it is not the same as the \texttt{\textbackslash item} that is used in bulleted and numbered lists in \LaTeX\ , it has an argument in curly braces rather than just a command). \textit{Do not use the \texttt{scale} key within a \MilSymb\ command when grouping them. Instead, use the \texttt{scale} key at the environment level.} See this example:\\
+
+\begin{writett}
+\begin{verbatim}
+\begin{landgroup}[scale=2]
+\item{\MilLand[faction=friendly,
+main=signal radio teletype centre,
+echelon=section]}
+\item{\MilLand[faction=friendly,
+main=diving,
+upper=video imagery,
+echelon=brigade,
+status=reduced]}
+\item{\MilLand[faction=friendly,
+main=sensor,
+upper=large extension node,
+lower=single channel]}
+\end{landgroup}
+\end{verbatim}
+\end{writett}
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\begin{landgroup}[scale=2]
+\item{\MilLand[faction=friendly, main=signal radio teletype centre, echelon=section]}
+\item{\MilLand[faction=friendly, main=diving, upper=video imagery, echelon=brigade, status=reduced]}
+\item{\MilLand[faction=friendly, main=sensor, upper=large extension node, lower=single channel]}
+\end{landgroup}
+&
+\begin{landheadquarters}[scale=2]
+\item{\MilLand[faction=friendly, main=signal radio teletype centre, echelon=section, headquarters=command group]}
+\item{\MilLand[faction=friendly, main=diving, upper=video imagery, echelon=brigade, status=reduced, headquarters=command group]}
+\item{\MilLand[faction=friendly, main=sensor, upper=large extension node, lower=single channel, headquarters=command group]}
+\end{landheadquarters} \\
+\node {\textbf{\texttt{landgroup}}}; & \node{\textbf{\texttt{landheadquarters}}}; \\
+ };
+\end{tikzpicture}
+\caption{Example of \textbf{\texttt{landgroup}} and \textbf{\texttt{landheadquarters}} grouping.}
+\end{figure}
+
+\newpage\subsection{Air Command (\textbf{\texttt{MilAir}})}
+
+This command covers symbols for air assets and their activities. Refer to \textit{Chapter 2, Section 2 and 3} in \DocLink\ for further information.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{main}}\quad
+\input{manual_scripts/Air_Main_table.tex}
+
+\newpage\paragraph{\texttt{upper}}\quad
+\input{manual_scripts/Air_Upper_table.tex}
+
+\newpage\paragraph{\texttt{lower}}\quad
+\input{manual_scripts/Air_Lower_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilAir}} has 5 text field amplifiers, as shown in Figure \ref{airtext}. Table \ref{airtexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilAir[faction=friendly, main=military rotary wing, scale=2, track number=\qquad A, call sign=\qquad B, position and movement=\qquad C, nation=\qquad D, additional information=\qquad E]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilAir}} text field amplifiers.}
+\label{airtext}
+\end{figure}
+
+\begin{table}[H]
+\centering
+\begin{tabularx}{\textwidth}{|c|l|X|c|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} & \thead{Prefix*}\\ \hline
+\textbf{A} & \texttt{track number} & System Track Number. & TN \\ \hline
+\textbf{B} & \texttt{call sign} & Airframe Number or Mission Call Sign. & \\ \hline
+\textbf{C} & \texttt{position and movement} & Course [degrees]/Speed [knots] or Bearing [degrees]/Distance [nautical miles] Height [feet/flight level]. & C/S, B/D \\ \hline
+\textbf{D} & \texttt{nation} & Nation\rq{}s Name: A 3-letter code indicating the object\rq{}s country of origin (STANAG 1059). & \\ \hline
+\textbf{E} & \texttt{additional information} & For friendly units: Sensor or Weapon load, endurance, etc. For other Units: Credibility of Information. & \\ \hline
+\end{tabularx}
+\begin{tablenotes}
+\item *when applicable.
+\end{tablenotes}
+\caption{Description of \textbf{\texttt{MilAir}} text field amplifiers.}
+\label{airtexttable}
+\end{table}
+
+\newpage\subsection{Missile Command (\textbf{\texttt{MilMissile}})}
+
+This command is a special application of \textbf{\texttt{MilAir}} for missiles. \textit{Instead of setting an icon using \texttt{main}, a predefined \lq\lq{}missile\rq\rq{} icon is used. Modifiers are then added to the left and right instead of above and below.} Refer to \textit{Chapter 2, Section 4} in \DocLink\ for further information.
+
+\subsubsection{Modifiers}
+
+\textit{Instead of using \texttt{upper} and \texttt{lower} keys to define the modifiers, \texttt{left} and \texttt{right} keys are used to reflect the position of the modifier.}
+
+\paragraph{\texttt{left}}\quad
+\input{manual_scripts/Missile_Left_table.tex}
+
+\newpage\paragraph{\texttt{right}}\quad
+\input{manual_scripts/Missile_Right_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+Text fields for \textbf{\texttt{MilMissile}} are identical to \textbf{\texttt{MilAir}}.
+
+\newpage\subsection{Land Command (\textbf{\texttt{MilLand}})}
+
+This command covers symbols for land units, individuals, and organizations. Refer to \textit{Chapter 3, Section 2} in \DocLink\ for further information.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{main}}\quad
+\input{manual_scripts/Land_Main_table.tex}
+
+\newpage\paragraph{\texttt{upper}}\quad
+\input{manual_scripts/Land_Upper_table.tex}
+
+\newpage\paragraph{\texttt{lower}}\quad
+\input{manual_scripts/Land_Lower_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Echelon}
+
+This amplifier denotes the \lq\lq{}level of command\rq\rq{} of the symbol (in the case of infantry this usually denotes the size of the unit). Table \ref{echelon} lists all the options available.
+
+\begin{table}[H]
+\centering
+\begin{tabular}{|l|c|}
+\hline
+\thead{Value} & \thead{Symbol} \\ \hline
+\texttt{team} & $\varnothing$ \\ \hline
+\texttt{squad} & \textbullet \\ \hline
+\texttt{section} & \textbullet \ \textbullet \\ \hline
+\texttt{platoon} & \textbullet \ \textbullet \ \textbullet \\ \hline
+\texttt{company} & \textbar \\ \hline
+\texttt{battalion} & \textbar \ \textbar \\ \hline
+\texttt{regiment} & \textbar \ \textbar \ \textbar \\ \hline
+\texttt{brigade} & X \\ \hline
+\texttt{division} & XX \\ \hline
+\texttt{corps} & XXX \\ \hline
+\texttt{army} & XXXX\\ \hline
+\texttt{army group} & XXXXX \\ \hline
+\texttt{theatre} & XXXXXX \\ \hline
+\texttt{command} & \raisebox{1pt}{+ \ +} \\ \hline
+\end{tabular}
+\caption{Echelon levels and corresponding symbols.}
+\label{echelon}
+\end{table}
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=2, echelon=section] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, echelon=regiment] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, echelon=army] \\
+\node{\texttt{echelon=section}}; & \node{\texttt{echelon=regiment}}; & \node{\texttt{echelon=army}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{echelon} key in use.}
+\end{figure}
+
+\paragraph{Task Force}
+
+This amplifier denotes a temporary unit for a specific task or objective. If the \texttt{echelon} key is set, it will automatically size to enclose the echelon amplifier.
+
+ \begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, echelon=platoon, scale=2] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, echelon=platoon, task force] \\
+\node{normal}; & \node{\texttt{task force}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{task force} key in use.}
+\end{figure}
+
+
+\paragraph{Status}
+
+This amplifier denotes the condition of the of the symbol. There are 3 options, \texttt{reinforced} indicates part of another unit is augmenting the capability of this unit, \texttt{reduced} means part of the unit has been detached to augment another unit, and \texttt{reinforced and reduced} means both situations have occurred. If this key is specified, the text field adjacent to it will be shifted right in order to accommodate the amplifier.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=2, status=reinforced] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, status=reduced] & \MilLand[faction=friendly, main=signal radio teletype centre, scale=2, status=reinforced and reduced] \\
+\node{\texttt{status=reinforced}}; & \node{\texttt{status=reduced}}; & \node{\texttt{status=reinforced and reduced}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{status} key in use.}
+\end{figure}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilLand}} has 14 text field amplifiers, as shown in Figure \ref{equiptext}. \textit{Some of these amplifiers are placed adjacent to each other, spaces are not automatically inserted between them.} Table \ref{landtexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilLand[faction=friendly, main=signal radio teletype centre, scale=2, staff comments=\qquad G, additional information=\qquad H, higher formation=\qquad M, evaluation rating=\qquad J, country indicator=\qquad AC, combat effectiveness=\textbackslash K, identification=\textbackslash P, unique designation=T\qquad~, type of equipment=\qquad V, date-time group=W\qquad~, altitude value=X, location=\textbackslash Y\qquad~, common identifier=\textbackslash AF\qquad~, speed=Z\qquad~]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilLand}} text field amplifiers.}
+\label{landtext}
+\end{figure}
+
+\begin{center}
+\begin{tabularx}{\textwidth}{|c|l|X|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} \\ \hline
+\textbf{AC} & \texttt{country indicator} & A three-letter code that indicates the country of origin of the unit (STANAG 1059). In stability activities, this field can be used for factions or groups.\\ \hline
+\textbf{G} & \texttt{staff comments} & Free text. Can be used by staff for information required by commander.\\ \hline
+\textbf{H} & \texttt{additional information} & Free Text.\\ \hline
+\textbf{M} & \texttt{higher formation} & Number or title of higher echelon command of unit being displayed. \\ \hline
+\textbf{J} & \texttt{evaluation rating} & Degree of confidence that may be placed on the information represented by the symbol. It is shown as one letter and one number made up of Reliability of Source and Credibility of Information. (STANAG 2511). \newline
+Reliability of Source:
+\begin{enumerate}[label=\Alph*., align=left]
+\item Completely reliable.
+\item Usually reliable.
+\item Fairly reliable.
+\item Not usually reliable.
+\item Unreliable.
+\item Reliability cannot be judged.
+\end{enumerate}
+Credibility of Information:
+\begin{enumerate}[label=\arabic*., align=left]
+\item Confirmed by other sources.
+\item Probably true.
+\item Possibly true.
+\item Doubtful.
+\item Improbable.
+\item Truth cannot be judged.
+\end{enumerate}
+\\ \hline
+\textbf{K} & \texttt{combat effectiveness} & Effectiveness of unit or equipment displayed.
+\begin{enumerate}[label=\arabic*., align=left]
+\item Fully operational.
+\item Substantially operational.
+\item Marginally operational.
+\item Not operational.
+\end{enumerate} \\ \hline
+\textbf{P} & \texttt{identification} & Identification modes and codes.\\ \hline
+\textbf{W} & \texttt{date-time group} & An alphanumeric designator for displaying a date-time group (DDHHMMSSZMONYY) or \lq\lq{}O/O\rq\rq{} for on order. The date-time group is composed of a group of six numeric digits with a time zone suffix and the standardized three-letter abbreviation for the month followed by two digits. The first pair of digits represents the day; the second pair, the hour; the third pair, the minutes. The last two digits of the year are after the month. For automated systems, two digits may be added before the time zone suffix and after the minutes to designate seconds.\\ \hline
+\textbf{X} & \texttt{altitude value} & Altitude as displayed on the global positioning system (GPS). \\ \hline
+\textbf{Y} & \texttt{location} & Latitude and longitude; grid coordinates. \\ \hline
+\textbf{AF} & \texttt{common identifier} & Example: Paladin for the M109A6 howitzer or Leopard for the KPz-70 tank. (Use NATO code name for hostile common identifiers.) \\ \hline
+\textbf{Z} & \texttt{speed} & Displays speed in nautical miles per hour or kilometres per hour. \\ \hline
+\multicolumn{3}{c}{}\\
+\caption{Description of \textbf{\texttt{MilLand}} text field amplifiers.}
+\label{landtexttable}
+\end{tabularx}
+\end{center}
+
+\subsubsection{Supply Icons}
+
+An additional set of fullframe \textbf{\texttt{MilLand}} icons are used to denote classes of supply. \MilSymb\ uses an additional \texttt{supply} key to construct these icons, which takes up to two values each enclosed in curly braces.\textit{If only one value is used, then there must be a set of empty curly braces (\{\}) after the first value}. Each value is a supply class number, as listed in Table \ref{supply}. The US uses different symbols and designations for their supply classes, their supply class numbers are prefixed with \texttt{US } (including the space). When one value is set, the symbol from the table will be used, and when two values are set, the roman numeral for the supply class is used, with an ampersand (\&) inserted between the numerals. \textit{This key should be used in place of the \texttt{main} key.}
+
+\begin{center}
+\begin{longtable}{|l|c|c|c|c|c|c|}
+\hline
+\thead{Value} & \rotatebox{90}{\thead{Roman Numeral}~} & \thead{Glyph} & \multicolumn{4}{c|}{\thead{Examples}}\\ \hline
+\texttt{all}* & N/A & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={all}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={all}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={all}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={all}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={all}{}]}}\\ \hline
+\multicolumn{7}{|c|}{\thead{NATO Supply Classes}}\\ \hline
+\texttt{1} & I & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={1}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={1}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={1}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={1}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={1}{}]}}\\ \hline
+\texttt{2} & II & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={2}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={2}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={2}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={2}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={2}{}]}}\\ \hline
+\texttt{3} & III & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={3}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={3}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={3}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={3}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={3}{}]}}\\ \hline
+\texttt{4} & IV & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={4}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={4}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={4}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={4}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={4}{}]}}\\ \hline
+\texttt{5} & V & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={5}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={5}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={5}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={5}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={5}{}]}}\\ \hline
+\multicolumn{7}{|c|}{\thead{US Supply Classes}} \\ \hline
+\texttt{US 1} & I & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 1}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 1}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 1}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 1}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 1}{}]}}\\ \hline
+\texttt{US 2} & II & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 2}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 2}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 2}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 2}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 2}{}]}}\\ \hline
+\texttt{US 3} & III & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 3}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 3}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 3}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 3}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 3}{}]}}\\ \hline
+\texttt{US 4} & IV & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 4}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 4}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 4}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 4}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 4}{}]}}\\ \hline
+\texttt{US 5} & V & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 5}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 5}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 5}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 5}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 5}{}]}}\\ \hline
+\texttt{US 6} & VI & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 6}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 6}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 6}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 6}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 6}{}]}}\\ \hline
+\texttt{US 7} & VII & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 7}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 7}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 7}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 7}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 7}{}]}}\\ \hline
+\texttt{US 8} & VIII & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 8}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 8}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 8}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 8}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 8}{}]}}\\ \hline
+\texttt{US 9} & IX & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 9}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 9}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 9}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 9}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 9}{}]}}\\ \hline
+\texttt{US 10} & X & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=none, supply={US 10}{}]}}& \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=friendly, supply={US 10}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=hostile, supply={US 10}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=neutral, supply={US 10}{}]}}&\adjustbox{valign=m,margin=0.25cm}{\tikz{\MilLand[faction=unknown, supply={US 10}{}]}}\\\hline
+\multicolumn{7}{c}{}\\
+\caption{Table of Supply Icons.}
+\label{supply}
+\end{longtable}
+\begin{tablenotes}
+\item *can only be used as a single value.
+\end{tablenotes}
+\end{center}
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, supply={1}{5}, scale=2] & \MilLand[faction=friendly, supply={US 8}{}, scale=2] & \MilLand[faction=friendly, supply={3}{}, scale=2] \\
+\node{\texttt{supply=\{1\}\{5\}}}; & \node{\texttt{supply=\{US 8\}\{\}}}; & \node{\texttt{supply=\{3\}\{\}}}; \\
+};
+\end{tikzpicture}
+\caption{Example of Supply symbols.}
+\end{figure}
+
+
+\subsubsection{Altitude Modifier}
+
+\textbf{\texttt{MilLand}} defines a special lower modifier for altitude, which takes up to two values each enclosed in curly braces.\textit{If only one value is used, then there must be a set of empty curly braces (\{\}) after the first value}. Each value is an altitude designation, \texttt{high} (HA), \texttt{medium} (MA) and \texttt{low} (LA), which inserts the acronym. Having two values will insert a slash (/) between them and removes the \lq\lq{}A\rq\rq{} suffix from the first acronym. \textit{This key should be used in place of the \texttt{lower} key.}
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\MilLand[faction=friendly, main=unmanned systems, scale=2, altitude={high}{}] & \MilLand[faction=friendly, main=unmanned systems, scale=2, altitude={medium}{low}] & \MilLand[faction=friendly, main=unmanned systems, scale=2, altitude={low}{}] \\
+\node{\texttt{altitude=\{high\}\{\}}}; & \node{\texttt{altitude=\{medium\}\{low\}}}; & \node{\texttt{altitude=\{low\}\{\}}}; \\
+};
+\end{tikzpicture}
+\caption{Example of the \texttt{altitude} key in use.}
+\end{figure}
+
+\newpage\subsection{Equipment Command (\textbf{\texttt{MilEquipment}})}
+
+This command covers symbols for land equipment. \textit{The are no \texttt{upper} and \texttt{lower} keys, instead a \texttt{mobility} key sets a modifier to be displayed below the frame (or when the \texttt{no frame} key is set, adjacent to the bottom of the icon)}. This command also accepts the \texttt{no frame} key. See \textit{Chapter 3, Section 3} in \DocLink.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{Main}}\quad
+\input{manual_scripts/Equipment_Main_table.tex}
+
+\newpage\paragraph{\texttt{Mobility}}\quad
+\input{manual_scripts/Equipment_Mobility_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilEquipment}} has 16 text field amplifiers, as shown in Figure \ref{equiptext}. \textit{Some of these amplifiers are placed adjacent to each other, spaces are not automatically inserted between them.} Table \ref{equiptexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilEquipment[faction=friendly, main=mine clearing vehicle, mobility=wheeled and tracked, scale=2, quantity=Q, staff comments=\qquad G, additional information=\qquad H, evaluation rating=\qquad J, combat effectiveness=\textbackslash K, signature equipment=\textbackslash SE, higher formation=\qquad M, identification=\textbackslash P, unique designation=T\qquad~, type of equipment=V, date-time group=W\qquad~, altitude value=X, location=\textbackslash Y\qquad~, country indicator=\qquad AC, platform type=\textbackslash AD, equipment teardown time=\textbackslash AE, common identifier=\textbackslash AF\qquad~, speed=Z\qquad~]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilEquipment}} text field amplifiers.}
+\label{equiptext}
+\end{figure}
+
+\begin{center}
+\begin{tabularx}{\textwidth}{|c|l|X|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} \\ \hline
+\textbf{Q} & \texttt{quantity} & Identifies the number of items present.\\ \hline
+\textbf{AC} & \texttt{country indicator} & A three-letter code that indicates the country of origin of the unit (STANAG 1059). In stability activities, this field can be used for factions or groups.\\ \hline
+\textbf{G} & \texttt{staff comments} & Free text. Can be used by staff for information required by commander.\\ \hline
+\textbf{H} & \texttt{additional information} & Free Text.\\ \hline
+\textbf{M} & \texttt{higher formation} & Number or title of higher echelon command of unit being displayed. \\ \hline
+\textbf{J} & \texttt{evaluation rating} & Degree of confidence that may be placed on the information represented by the symbol. It is shown as one letter and one number made up of Reliability of Source and Credibility of Information. (STANAG 2511). \newline
+Reliability of Source:
+\begin{enumerate}[label=\Alph*., align=left]
+\item Completely reliable.
+\item Usually reliable.
+\item Fairly reliable.
+\item Not usually reliable.
+\item Unreliable.
+\item Reliability cannot be judged.
+\end{enumerate}
+Credibility of Information:
+\begin{enumerate}[label=\arabic*., align=left]
+\item Confirmed by other sources.
+\item Probably true.
+\item Possibly true.
+\item Doubtful.
+\item Improbable.
+\item Truth cannot be judged.
+\end{enumerate}
+\\ \hline
+\textbf{K} & \texttt{combat effectiveness} & Effectiveness of unit or equipment displayed.
+\begin{enumerate}[label=\arabic*., align=left]
+\item Fully operational.
+\item Substantially operational.
+\item Marginally operational.
+\item Not operational.
+\end{enumerate} \\ \hline
+\textbf{SE} & \texttt{signature equipment} & Identifies a detectable electronic signature \lq\lq{}!\rq\rq{} for hostile equipment. \\ \hline
+\textbf{P} & \texttt{identification} & Identification modes and codes.\\ \hline
+\textbf{T} & \texttt{unique designation} & An alphanumeric designator that uniquely identifies a particular model of equipment (number).\\ \hline
+\textbf{V} & \texttt{type of equipment} & Identifies unique designation (such as AH-64 for attack helicopter).\\ \hline
+\textbf{W} & \texttt{date-time group} & An alphanumeric designator for displaying a date-time group (DDHHMMSSZMONYY) or \lq\lq{}O/O\rq\rq{} for on order. The date-time group is composed of a group of six numeric digits with a time zone suffix and the standardized three-letter abbreviation for the month followed by two digits. The first pair of digits represents the day; the second pair, the hour; the third pair, the minutes. The last two digits of the year are after the month. For automated systems, two digits may be added before the time zone suffix and after the minutes to designate seconds.\\ \hline
+\textbf{X} & \texttt{altitude value} & Altitude as displayed on the global positioning system (GPS). \\ \hline
+\textbf{Y} & \texttt{location} & Latitude and longitude; grid coordinates. \\ \hline
+\textbf{AF} & \texttt{common identifier} & Example: Paladin for the M109A6 howitzer or Leopard for the KPz-70 tank. (Use NATO code name for hostile common identifiers.) \\ \hline
+\textbf{Z} & \texttt{speed} & Displays speed in nautical miles per hour or kilometres per hour. \\ \hline
+\textbf{AD} & \texttt{platform type} & Electronic intelligence notation (ELNOT) or communications intelligence notation (CENOT).\\ \hline
+\textbf{AE} & \texttt{equipment teardown time} & Equipment teardown time in minutes.\\ \hline
+\multicolumn{3}{c}{}\\
+\caption{Description of \textbf{\texttt{MilLand}} text field amplifiers.}
+\label{equiptexttable}
+\end{tabularx}
+\end{center}
+
+\newpage\subsection{Installation Command (\textbf{\texttt{MilInstallation}})}
+
+This command covers symbols for land installations, sites that incorporate permanent, semi-permanent, and temporary structures. \textit{The \texttt{lower} key is not used as there are no lower modifiers.} See \textit{Chapter 3, Section 4} in \DocLink.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{Main}}\quad
+\input{manual_scripts/Installation_Main_table.tex}
+
+\newpage\paragraph{\texttt{Upper}}\quad
+\input{manual_scripts/Installation_Upper_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilInstallation}} has 12 text field amplifiers, as shown in Figure \ref{installtext}. \textit{Some of these amplifiers are placed adjacent to each other, spaces are not automatically inserted between them.} Table \ref{installtexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilInstallation[faction=friendly, main=civilian telecommunications, upper=radio, staff comments=\qquad G, additional information= \qquad H, higher formation= \qquad M, evaluation rating=\qquad J, capacity of installation=\textbackslash K, unique designation=T \qquad~, country indicator=\qquad AC, installation composition=AI \qquad~, date-time group=W \qquad~, altitude value=X, location=\textbackslash Y \qquad~, speed=Z \qquad~, installation composition=AI \qquad~, scale=2]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilInstallation}} text field amplifiers.}
+\label{installtext}
+\end{figure}
+
+\begin{center}
+\begin{tabularx}{\textwidth}{|c|l|X|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} \\ \hline
+\textbf{AC} & \texttt{country indicator} & A three-letter code that indicates the country of origin of the unit (STANAG 1059). In stability activities, this field can be used for factions or groups.\\ \hline
+\textbf{G} & \texttt{staff comments} & Free text. Can be used by staff for information required by commander.\\ \hline
+\textbf{H} & \texttt{additional information} & Free Text.\\ \hline
+\textbf{M} & \texttt{higher formation} & Number or title of higher echelon command of unit being displayed. \\ \hline
+\textbf{J} & \texttt{evaluation rating} & Degree of confidence that may be placed on the information represented by the symbol. It is shown as one letter and one number made up of Reliability of Source and Credibility of Information. (STANAG 2511). \newline
+Reliability of Source:
+\begin{enumerate}[label=\Alph*., align=left]
+\item Completely reliable.
+\item Usually reliable.
+\item Fairly reliable.
+\item Not usually reliable.
+\item Unreliable.
+\item Reliability cannot be judged.
+\end{enumerate}
+Credibility of Information:
+\begin{enumerate}[label=\arabic*., align=left]
+\item Confirmed by other sources.
+\item Probably true.
+\item Possibly true.
+\item Doubtful.
+\item Improbable.
+\item Truth cannot be judged.
+\end{enumerate}
+\\ \hline
+\textbf{K} & \texttt{capacity of installation} & Capacity of installation displayed. \\ \hline
+\textbf{T} & \texttt{unique designation} & An alphanumeric designator that uniquely identifies a particular installation (name).\\ \hline
+\textbf{W} & \texttt{date-time group} & An alphanumeric designator for displaying a date-time group (DDHHMMSSZMONYY) or \lq\lq{}O/O\rq\rq{} for on order. The date-time group is composed of a group of six numeric digits with a time zone suffix and the standardized three-letter abbreviation for the month followed by two digits. The first pair of digits represents the day; the second pair, the hour; the third pair, the minutes. The last two digits of the year are after the month. For automated systems, two digits may be added before the time zone suffix and after the minutes to designate seconds.\\ \hline
+\textbf{X} & \texttt{altitude value} & Height in feet of equipment or structure on the ground. \\ \hline
+\textbf{Y} & \texttt{location} & Latitude and longitude; grid coordinates. \\ \hline
+\textbf{Z} & \texttt{speed} & Displays speed in nautical miles per hour or kilometres per hour. \\ \hline
+\textbf{AI} & \texttt{installation composition} & Indicates the component type of the installation:
+\begin{itemize}
+\item Development.
+\item Research.
+\item Production.
+\item Service.
+\item Storage.
+\item Utility.
+\end{itemize}\\ \hline
+\multicolumn{3}{c}{}\\
+\caption{Description of \textbf{\texttt{MilInstallation}} text field amplifiers.}
+\label{installtexttable}
+\end{tabularx}
+\end{center}
+
+\newpage\subsection{Sea Surface Command (\textbf{\texttt{MilSeaSurface}})}
+
+This command covers symbols for units, equipment, and objects of maritime surface operations. See \textit{Chapter 4, Section 1} in \DocLink.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{Main}}\quad
+\input{manual_scripts/SeaSurface_Main_table.tex}
+
+\newpage\paragraph{\texttt{Upper}}\quad
+\input{manual_scripts/SeaSurface_Upper_table.tex}
+
+\newpage\paragraph{\texttt{Lower}}\quad
+\input{manual_scripts/SeaSurface_Lower_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilSeaSurface}} has 6 text field amplifiers, as shown in Figure \ref{seasurfacetext}. \textit{Some of these amplifiers are placed adjacent to each other, spaces are not automatically inserted between them.} Table \ref{seasurfacetexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilSeaSurface[faction=friendly, main=law enforcement vessel, scale=2, track number=\qquad A, name=\qquad B, position and movement=\qquad C, identification=\qquad D, additional information=\qquad E, date-time group=\textbackslash F]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilSeaSurface}} text field amplifiers.}
+\label{seasurfacetext}
+\end{figure}
+
+\begin{table}[H]
+\centering
+\begin{tabularx}{\textwidth}{|c|l|X|c|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} & \thead{Prefix*}\\ \hline
+\textbf{A} & \texttt{track number} & System Track Number. & TN \\ \hline
+\textbf{B} & \texttt{name} & Ships Name, Hull Number or Task Organization Designator (military only), Mission / International call sign. & \\ \hline
+\textbf{C} & \texttt{position and movement} & Course [degrees]/Speed [knots] or Bearing [degrees]/Distance [nautical miles]. & C/S, B/D \\ \hline
+\textbf{D} & \texttt{identification} & Country of origin (STANAG 1059 - 3-letter code) or Organization (e.g. UN, NATO, EU), Any other information (e.g. IFF / AIS). & \\ \hline
+\textbf{E} & \texttt{additional information} & For friendly units: Sensor or Weapon load, endurance, etc. For other Units: Credibility of Information. & \\ \hline
+\textbf{F} & \texttt{date-time group} & An alphanumeric designator for displaying a date-time group (DDHHMMSSZMONYY) or \lq\lq{}O/O\rq\rq{} for on order. The date-time group is composed of a group of six numeric digits with a time zone suffix and the standardized three-letter abbreviation for the month followed by two digits. The first pair of digits represents the day; the second pair, the hour; the third pair, the minutes. The last two digits of the year are after the month. For automated systems, two digits may be added before the time zone suffix and after the minutes to designate seconds. & \\ \hline
+\end{tabularx}
+\begin{tablenotes}
+\item *when applicable.
+\end{tablenotes}
+\caption{Description of \textbf{\texttt{MilSeaSurface}} text field amplifiers.}
+\label{seasurfacetexttable}
+\end{table}
+
+\subsection{Own Ship Command (\textbf{\texttt{OwnShip}})}
+
+This command places a marker indicating the position of the vessel the user is on, if they are at sea. No keys are available other than \texttt{scale}. See \textit{Chapter 4, Section 1, Table 4-7} in \DocLink.
+
+\begin{figure}[H]
+\centering
+\tikz{\OwnShip[scale=2]}
+\caption{\textbf{\texttt{OwnShip}} command symbol.}
+\end{figure}
+
+\newpage\subsection{Sea Subsurface Command (\textbf{\texttt{MilSeaSubsurface}})}
+
+This command covers symbols for units, equipment, and objects of maritime sub surface operations. See \textit{Chapter 4, Section 2} in \DocLink.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{Main}}\quad
+\input{manual_scripts/SeaSubsurface_Main_table.tex}
+
+\newpage\paragraph{\texttt{Upper}}\quad
+\input{manual_scripts/SeaSubsurface_Upper_table.tex}
+
+\newpage\paragraph{\texttt{Lower}}\quad
+\input{manual_scripts/SeaSubsurface_Lower_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilSeaSuburface}} has 6 text field amplifiers, as shown in Figure \ref{seasubsurfacetext}. \textit{Some of these amplifiers are placed adjacent to each other, spaces are not automatically inserted between them.} Table \ref{seasubsurfacetexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilSeaSubsurface[faction=friendly, main=torpedo, scale=2, track number=\qquad A, name=\qquad B, position and movement=\qquad C, identification=\qquad D, additional information=\qquad E, date-time group=\textbackslash F]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilSeaSubsurface}} text field amplifiers.}
+\label{seasubsurfacetext}
+\end{figure}
+
+\begin{table}[H]
+\centering
+\begin{tabularx}{\textwidth}{|c|l|X|c|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} & \thead{Prefix*}\\ \hline
+\textbf{A} & \texttt{track number} & System Track Number. & TN \\ \hline
+\textbf{B} & \texttt{name} & Ships Name, Hull Number or Task Organization Designator (military only), Mission / International call sign. & \\ \hline
+\textbf{C} & \texttt{position and movement} & Course [degrees]/Speed [knots] or Bearing [degrees]/Distance [nautical miles] Height [feet/metres]. & C/S, B/D \\ \hline
+\textbf{D} & \texttt{identification} & Country of origin (STANAG 1059 - 3-letter code) or Organization (e.g. UN, NATO, EU), Any other information (e.g. IFF / AIS). & \\ \hline
+\textbf{E} & \texttt{additional information} & For friendly units: Sensor or Weapon load, endurance, etc. For other Units: Credibility of Information. For submarine contacts: Classification:
+\begin{itemize}
+\item NONSUB
+\item POSSUB LOW 1 or 2
+\item POSSUB HIGH 3 or 4
+\item PROBSUB
+\item CERTSUB
+\end{itemize}
+ & \\ \hline
+\textbf{F} & \texttt{date-time group} & An alphanumeric designator for displaying a date-time group (DDHHMMSSZMONYY) or \lq\lq{}O/O\rq\rq{} for on order. The date-time group is composed of a group of six numeric digits with a time zone suffix and the standardized three-letter abbreviation for the month followed by two digits. The first pair of digits represents the day; the second pair, the hour; the third pair, the minutes. The last two digits of the year are after the month. For automated systems, two digits may be added before the time zone suffix and after the minutes to designate seconds. & \\ \hline
+\end{tabularx}
+\begin{tablenotes}
+\item *when applicable.
+\end{tablenotes}
+\caption{Description of \textbf{\texttt{MilSeaSubsurface}} text field amplifiers.}
+\label{seasubsurfacetexttable}
+\end{table}
+
+\subsection{Sea Mine Command (\textbf{\texttt{MilMine}})}
+
+This command is used to construct sea mine symbols. Instead of using the \texttt{main} key, this command uses the key \texttt{mine} to define the mine type, and the boolean switch \texttt{neutralised} to display the neutralised variant, as shown in Table \ref{mine}. No modifiers are used. This command also accepts the \texttt{no frame} key. See \textit{Chapter 4, Section 2, Table 4-17} in \DocLink.
+
+\begin{table}[H]
+\centering
+\begin{tabular}{|l|c|c|c|c|c|c|}
+\hline
+\multirow{3}{*}{\thead{Value}} & \multicolumn{2}{c|}{\thead{Glyph}} & \multicolumn{4}{c|}{\multirow{3}{*}{\thead{Examples}}}\\ \cline{2-3}
+& \thead{Normal} & \thead{\texttt{neutralised}} & \multicolumn{4}{c|}{}\\
+\hline
+\texttt{free} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=free]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=free, neutralised]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=friendly, mine=free]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=hostile, mine=free]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=neutral, mine=free]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=unknown, mine=free]}}\\ \hline
+\texttt{bottomed} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=bottomed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=bottomed, neutralised]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=friendly, mine=bottomed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=hostile, mine=bottomed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=neutral, mine=bottomed]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=unknown, mine=bottomed]}}\\ \hline
+\texttt{moored} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=moored]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=moored, neutralised]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=friendly, mine=moored]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=hostile, mine=moored]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=neutral, mine=moored]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=unknown, mine=moored]}}\\ \hline
+\texttt{floating} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=floating]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=floating, neutralised]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=friendly, mine=floating]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=hostile, mine=floating]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=neutral, mine=floating]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=unknown, mine=floating]}}\\ \hline
+\texttt{in other position} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=in other position]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=in other position, neutralised]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=friendly, mine=in other position]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=hostile, mine=in other position]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=neutral, mine=in other position]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=unknown, mine=in other position]}}\\ \hline
+\texttt{rising} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=rising]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=none, mine=rising, neutralised]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=friendly, mine=rising]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=hostile, mine=rising]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=neutral, mine=rising]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilMine[faction=unknown, mine=rising]}}\\ \hline
+\end{tabular}
+\caption{Table of \textbf{\texttt{MilMine}} icons.}
+\label{mine}
+\end{table}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+Text fields for \textbf{\texttt{MilMine}} are identical to \textbf{\texttt{MilSeaSubsurface}}.
+
+\newpage\subsection{Space Command (\textbf{\texttt{MilSpace}})}
+
+This command covers symbols for space assets, related activities and other relevant objects (debris) within earth orbit. See \textit{Chapter 5, Section 1 and 2} in \DocLink.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{Main}}\quad
+\input{manual_scripts/Space_Main_table.tex}
+
+\newpage\paragraph{\texttt{Upper}}\quad
+\input{manual_scripts/Space_Upper_table.tex}
+
+\newpage\paragraph{\texttt{Lower}}\quad
+\input{manual_scripts/Space_Lower_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilSpace}} has 5 text field amplifiers, as shown in Figure \ref{spacetext}. \textit{Some of these amplifiers are placed adjacent to each other, spaces are not automatically inserted between them.} Table \ref{spacetexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilSpace[faction=friendly, main=military space station, scale=2, track number=\qquad A, name=\qquad B, position and movement=\qquad C, nation=\qquad D, additional information=\qquad E]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilSpace}} text field amplifiers.}
+\label{spacetext}
+\end{figure}
+
+\begin{table}[H]
+\centering
+\begin{tabularx}{\textwidth}{|c|l|X|c|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} & \thead{Prefix*}\\ \hline
+\textbf{A} & \texttt{track number} & Space System Track Number. & SSTN \\ \hline
+\textbf{B} & \texttt{name} & Space System Name or Mission call sign. & \\ \hline
+\textbf{C} & \texttt{position and movement} & Georef Position [degrees]/Inclination] or Trajectory, Height [feet/orbit]. &\\ \hline
+\textbf{D} & \texttt{nation} & Nation\rq{}s Name: A 3-letter code indicating the object\rq{}s country of origin (STANAG 1059). & \\ \hline
+\textbf{E} & \texttt{additional information} & For friendly units: Sensor or Weapon load, specific orbit, footprint etc. For other Units: Credibility of Information. & \\ \hline
+\end{tabularx}
+\begin{tablenotes}
+\item *when applicable.
+\end{tablenotes}
+\caption{Description of \textbf{\texttt{MilSpace}} text field amplifiers.}
+\label{spacetexttable}
+\end{table}
+
+\subsection{Space Debris Command (\textbf{\texttt{MilDebris}})}
+
+This command is used to construct symbols that represent space debris. No shared keys are used other than \texttt{scale}. This command uses the key \texttt{size} to define the debris size, and the boolean switch \texttt{man made} to display the variant for artificial debris, as shown in Table \ref{debris}. See \textit{Chapter 5, Section 3, Table 5-7} in \DocLink.
+
+\begin{table}[H]
+\centering
+\begin{tabular}{|l|c|c|}
+\hline
+\multirow{3}{*}{\thead{Value}} & \multicolumn{2}{c|}{\thead{Glyph}} \\ \cline{2-3}
+& \thead{Normal} & \thead{\texttt{man made}}\\ \hline
+\texttt{small} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilDebris[size=small]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilDebris[size=small, man made]}}\\ \hline
+\texttt{medium} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilDebris[size=medium]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilDebris[size=medium, man made]}}\\ \hline
+\texttt{large} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilDebris[size=large]}} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\MilDebris[size=large, man made]}}\\ \hline
+\end{tabular}
+\caption{Table of \textbf{\texttt{MilDebris}} symbols.}
+\label{debris}
+\end{table}
+
+
+\newpage\subsection{Activity Command (\textbf{\texttt{MilActivity}})}
+
+This command covers symbols that provide the capability to depict stability activities and civil support activities across the continuum of operations. \textit{The \texttt{lower} key is not used as there are no lower modifiers.} See \textit{Chapter 6} in \DocLink.
+
+\subsubsection{Icons and Modifiers}
+
+\paragraph{\texttt{Main}}\quad
+\input{manual_scripts/Activity_Main_table.tex}
+
+\newpage\paragraph{\texttt{Upper}}\quad
+\input{manual_scripts/Activity_Upper_table.tex}
+
+\subsubsection{Amplifiers}
+
+\paragraph{Text Fields}
+
+\textbf{\texttt{MilActivity}} has 6 text field amplifiers, as shown in Figure \ref{activitytext}. \textit{Some of these amplifiers are placed adjacent to each other, spaces are not automatically inserted between them.} Table \ref{activitytexttable} gives the key and description of each field, along with the standard prefixes to use. This table is mostly identical to the one found in \DocLink.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilActivity[faction=friendly, main=explosion, staff comments=\qquad G, additional information=\qquad H, evaluation rating=\qquad J, date-time group=W \qquad~, location=Y \qquad~, country indicator=\qquad AC, scale=2]
+\end{tikzpicture}
+\caption{Location of \textbf{\texttt{MilActivity}} text field amplifiers.}
+\label{activitytext}
+\end{figure}
+
+\begin{center}
+\begin{tabularx}{\textwidth}{|c|l|X|}
+\hline
+\thead{Location} & \thead{Key} & \thead{Description} \\ \hline
+\textbf{AC} & \texttt{country indicator} & A three-letter code that indicates the country of origin of the unit (STANAG 1059). In stability activities, this field can be used for factions or groups.\\ \hline
+\textbf{G} & \texttt{staff comments} & Free text. Can be used by staff for information required by commander.\\ \hline
+\textbf{H} & \texttt{additional information} & Free Text.\\ \hline
+\textbf{J} & \texttt{evaluation rating} & Degree of confidence that may be placed on the information represented by the symbol. It is shown as one letter and one number made up of Reliability of Source and Credibility of Information. (STANAG 2511). \newline
+Reliability of Source:
+\begin{enumerate}[label=\Alph*., align=left]
+\item Completely reliable.
+\item Usually reliable.
+\item Fairly reliable.
+\item Not usually reliable.
+\item Unreliable.
+\item Reliability cannot be judged.
+\end{enumerate}
+Credibility of Information:
+\begin{enumerate}[label=\arabic*., align=left]
+\item Confirmed by other sources
+\item Probably true
+\item Possibly true
+\item Doubtful
+\item Improbable
+\item Truth cannot be judged.
+\end{enumerate}
+\\ \hline
+\textbf{W} & \texttt{date-time group} & An alphanumeric designator for displaying a date-time group (DDHHMMSSZMONYY) or \lq\lq{}O/O\rq\rq{} for on order. The date-time group is composed of a group of six numeric digits with a time zone suffix and the standardized three-letter abbreviation for the month followed by two digits. The first pair of digits represents the day; the second pair, the hour; the third pair, the minutes. The last two digits of the year are after the month. For automated systems, two digits may be added before the time zone suffix and after the minutes to designate seconds.\\ \hline
+\textbf{Y} & \texttt{location} & Latitude and longitude; grid coordinates.\\ \hline
+\multicolumn{3}{c}{}\\
+\caption{Description of \textbf{\texttt{MilActivity}} text field amplifiers.}
+\label{activitytexttable}
+\end{tabularx}
+\end{center}
+
+\section{Custom Icons and Modifiers}
+
+\subsection{\MilSymb\ TikZ Picture Directory Structure}
+
+\begin{figure}[H]
+\begin{forest}
+ for tree={
+ font=\ttfamily\footnotesize,
+ grow'=0,
+ child anchor=west,
+ parent anchor=south,
+ inner sep=0pt,
+ anchor=west,
+ calign=first,
+ edge path={
+ \noexpand\path [draw, \forestoption{edge}]
+ (!u.south west) +(7.5pt,0) |- node[] {} (.child anchor)\forestoption{edge label};
+ },
+ before typesetting nodes={
+ if n=1
+ {insert before={[,phantom]}}
+ {}
+ },
+ fit=band,
+ before computing xy={l=15pt},
+ }
+[MilSymb
+ [text
+ [normal]
+ [squashed]
+ [small]
+ [smallsquashed]
+ ]
+ [air
+ [main\ldots]
+ [upper\ldots]
+ [lower\ldots]
+ ]
+ [land
+ [main\ldots]
+ [upper\ldots]
+ [lower\ldots]
+ ]
+ [equipment
+ [main\ldots]
+ [mobility\ldots]
+ ]
+ [installation
+ [main\ldots]
+ [upper\ldots]
+ ]
+ [seasurface
+ [main\ldots]
+ [upper\ldots]
+ [lower\ldots]
+ ]
+ [seasubsurface
+ [main\ldots]
+ [upper\ldots]
+ [lower\ldots]
+ [mine\ldots]
+ ]
+ [space
+ [main\ldots]
+ [upper\ldots]
+ [lower\ldots]
+ ]
+ [activity
+ [main\ldots]
+ [upper\ldots]
+ ]
+ [multi
+ [main\ldots]
+ [upper\ldots]
+ [lower\ldots]
+ [upperlower\ldots]
+ ]
+ [supply\ldots]
+ [custom\ldots]
+]
+\end{forest}
+\caption{\MilSymb TikZ Picture Directory Structure.}
+\label{directory}
+\end{figure}
+
+To add a custom icon or modifier, create a TikZ \texttt{.pic} in the \texttt{custom} directory using \texttt{tikzset}:
+
+\begin{writett}
+\begin{verbatim}
+\makeatletter %required if using MilSymb@selectedfaction
+\tikzset{
+MilSymb custom/user icon/.pic={
+ custom TikZ drawing commands go here...
+} %comma after bracket is needed if defining multiple .pic.
+}
+\makeatother %required if using MilSymb@selectedfaction
+\begin{tikzpicture}
+ \MilLand[faction=hostile, main=user icon]
+\end{tikzpicture}
+\end{verbatim}
+\end{writett}
+
+You can also create your own sub directories, such as \texttt{custom/land/main/user icon}. This is recommended if you want to organise your custom shapes by symbol type and position.To use your icon or modifier in a command, simply use the path as the value for a icon or modifier key \texttt{\textbackslash MilLand[faction=friendly, main=path/to/user icon]}. The \texttt{main}, \texttt{upper} and \texttt{lower} keys all accept custom values, as well as the \texttt{left}, \texttt{right} and \texttt{mobility} keys where applicable.
+
+\subsection{Drawing Bounds}
+
+As specified in \DocLink, most icons and modifiers should fit within a template comprising of a regular octagon exactly \textbf{1} unit in width and \textbf{1} unit in height (with the exception of \textit{fullframe} icons and a few others). In commands that specify upper and lower modifiers, the \textbf{main} icon should not exceed a height of \textbf{0.2} units above and below its origin (the two horizontal dotted line in Figure \ref{octagon}). Similarly, the modifiers should also not extend into the area \textbf{0.2} units above and below the origin of the \textbf{main} icon. The key value \texttt{faction=none} on any \MilSymb command (apart from \texttt{OwnShip} or \texttt{MilDebris}, which do not have faction keys) will output this template instead of a frame.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\MilLand[faction=none, scale=4](0,0)(frame)
+\dimline[line style={arrows={Triangle}-{Triangle}}, extension start length=0.75, extension end length=0.75, extension end style={thin, black}, extension start style={thin, black}]{($(frame.north) + (3, 0)$)}{($(frame.south) + (3, 0)$)}{1}
+\dimline[line style={arrows={Triangle}-{Triangle}}, extension start length=0.5, extension end length=0.5, extension end style={thin, black}, extension start style={thin, black}]{($(frame.north) + (2.5, -1.2)$)}{($(frame.south) + (2.5, 1.2)$)}{0.4}
+\dimline[line style={arrows={Triangle}-{Triangle}}, extension start length=0.55, extension end length=0.55, extension end style={thin, black}, extension start style={thin, black}]{($(frame.north) + (2.5, 0)$)}{($(frame.center) + (2.5, 0.8)$)}{0.3}
+\dimline[line style={arrows={Triangle}-{Triangle}}, extension start length=0.55, extension end length=0.55, extension end style={thin, black}, extension start style={thin, black}]{($(frame.center) + (2.5, -0.8)$)}{($(frame.south) + (2.5, 0)$)}{0.3}
+%\node {Main Anchor};
+\draw[red] plot[only marks, mark=*] coordinates{(0,0) (0, 1.36) (0,-1.36)};
+\node[anchor=east, inner sep=5pt, color=red] at (0,0) {Main Origin (0,0)};
+\node[anchor=east, inner sep=5pt, color=red] at (0,1.36) {Upper Origin (0,0.34)};
+\node[anchor=east, inner sep=5pt, color=red] at (0,-1.36) {Lower Origin (0,-0.34)};
+\end{tikzpicture}
+\caption{Dimensions of the octagon and origins of the icon and modifiers.}
+\label{octagon}
+\end{figure}
+
+For the \texttt{\textbf{MilMissile}} command, the template is rotated 90\textdegree anticlockwise, and the \texttt{left} and \texttt{right} keys correspond to the \texttt{upper} and \texttt{lower} keys respectively. The \texttt{mobility} origin is located \textbf{0.1} units below the \texttt{south} anchor of the frame.
+
+\subsection{Border Anchors}
+
+\MilSymb\ defines an anchored bounding box named \textbf{\texttt{M}} around all frames. This has anchor points identical to the \texttt{rectangle} node in TikZ. These can be used as coordinates for drawing icons and modifiers relative to the edge of the frame.
+
+\subsection{Faction Variants}
+
+Most \textit{fullframe} icons have slight variations depending on the faction frame that is being used. To facilitate this, you can create a set of four TikZ \texttt{.pic} in faction sub directories, like so:\\
+
+\noindent\texttt{custom/user icon/friendly/.pic}\\
+\texttt{custom/user icon/hostile/.pic}\\
+\texttt{custom/user icon/neutral/.pic}\\
+\texttt{custom/user icon/unknown/.pic}\\
+
+\subsection{Clipping}
+
+For \textbf{\texttt{MilLand}} symbols, clipping commands are available to trim any icon or modfier to the inside of the frame. Use \texttt{\textbackslash clip \textbackslash clip<faction>} within the drawing commands to clip anything specified after the command to the frame.
+
+Then, insert \texttt{/\textbackslash MilSymb@selectedfaction} directly after the \texttt{path/to/user icon} (so it forms \texttt{path/to/user icon/\textbackslash MilSymb@selectedfaction}). \texttt{\textbackslash MilSymb@selectedfaction} will be replaced by the name of the faction, and complete the path to the icon.
+
+\subsection{Using Existing Icons and Modifiers}
+
+To insert an existing icon or modifier into your custom icon use a nested \texttt{.pic} as so: \texttt{\textbackslash pic\{MilSymb category/position/name\}}, where \texttt{command} generally refers to the \MilSymb\ command it is used in as displayed in Figure \ref{directory}, and \texttt{position} refers to . The exceptions are \texttt{supply}, which contains supply icons detailed in \ref{supply}, \texttt{text} which provides common text templates as detailed in \ref{text}, and \texttt{multi} which is detailed in \ref{multi}. \texttt{mine} is also contained in a sub-directory of \texttt{seasubsurface}, instead of its own directory. \texttt{\textbf{MilDebris}} does not use any icons or modifiers, all drawing syntax is contained within the command.
+
+\subsubsection{Text Templates}
+\label{text}
+
+\MilSymb\ uses 4 standard text templates for commonly used text in icons and modifiers. Use regular TikZ text syntax for any variations. You can use them by nesting a \texttt{.pic} as before, but adding \texttt{=\{text to display\}} as a suffix, as in \texttt{\textbackslash pic\{MilSymb text/type=\{text to display\}\}}. Note that conventionally up to 3 characters are designed to be used with normal text, and up to 4 with \lq\lq{}squashed\rq\rq{} versions, in order to appear similar to \DocLink guidelines. Any more characters should use a smaller font.
+
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\matrix[column sep=5mm, row sep=5mm]{
+\begin{scope}[scale=2, transform shape]
+\MilLand[faction=none]
+\pic{MilSymb text/normal={Text}};
+\end{scope}
+&
+\begin{scope}[scale=2, transform shape]
+\MilLand[faction=none]
+\pic{MilSymb text/squashed={Text}};
+\end{scope}
+&
+\begin{scope}[scale=2, transform shape]
+\MilLand[faction=none]
+\pic at (0, 0.34) {MilSymb text/small={Text}};
+\end{scope}
+&
+\begin{scope}[scale=2, transform shape]
+\MilLand[faction=none]
+\pic at (0, 0.34) {MilSymb text/smallsquashed={Text}};
+\end{scope}
+\\
+\node{\texttt{text/normal}}; & \node{\texttt{text/squashed}}; & \node{\texttt{text/small}}; & \node{\texttt{text/smallsquashed}}; \\
+};
+\end{tikzpicture}
+\caption{\MilSymb\ text templates.}
+\end{figure}
+
+\subsubsection{Multiple Class}
+\label{multi}
+
+Some \MilSymb\ icons and modifiers are used in more than one command. In order to avoid code duplication, these are put in their own directory named \texttt{multi} with a single name, even though different aliases may be used in each command. The \texttt{upperlower} sub-directory is used to store modifier glyphs that are used in both the \texttt{upper} and \texttt{lower} positions.
+
+\begin{tabularx}{\linewidth}{|c|c|}
+\hline
+\thead{Name} & \thead{Glyph}\\ \hline
+\texttt{multi/main/amphibious} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/amphibious}}}\\ \hline
+\texttt{multi/main/antenna} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/antenna}}}\\ \hline
+\texttt{multi/main/ammunition} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/ammunition}}}\\ \hline
+\texttt{multi/main/armoured} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/armoured}}}\\ \hline
+\texttt{multi/main/aviation fixed wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/aviation fixed wing}}}\\ \hline
+\texttt{multi/main/aviation rotary wing} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/aviation rotary wing}}}\\ \hline
+\texttt{multi/main/bridge} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/bridge}}}\\ \hline
+\texttt{multi/main/chemical biological radiological nuclear} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/chemical biological radiological nuclear}}}\\ \hline
+\texttt{multi/main/drill} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/drill}}}\\ \hline
+\texttt{multi/main/decoy} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/decoy}}}\\ \hline
+\texttt{multi/main/diver} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/diver}}}\\ \hline
+\texttt{multi/main/engineer} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/engineer}}}\\ \hline
+\texttt{multi/main/field artillery} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/field artillery}}}\\ \hline
+\texttt{multi/main/individual} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/individual}}}\\ \hline
+\texttt{multi/main/killing victim} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/killing victim}}}\\ \hline
+\texttt{multi/main/maintenance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/maintenance}}}\\ \hline
+\texttt{multi/main/major end} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\path[local bounding box=M] (-0.5, -0.5) rectangle (0.5, 0.5); \pic{MilSymb multi/main/major end}}}\\ \hline
+\texttt{multi/main/medic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/medic}}}\\ \hline
+\texttt{multi/main/medical} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\path[local bounding box=M] (-0.5, -0.5) rectangle (0.5, 0.5); \pic{MilSymb multi/main/medical}}}\\ \hline
+\texttt{multi/main/medical treatment facility} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\path[local bounding box=M] (-0.5, -0.5) rectangle (0.5, 0.5); \pic{MilSymb multi/main/medical treatment facility}}}\\ \hline
+\texttt{multi/main/missile} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/missile}}}\\ \hline
+\texttt{multi/main/naval} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/naval}}}\\ \hline
+\texttt{multi/main/person} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/person}}}\\ \hline
+\texttt{multi/main/petroleum oil and lubricants} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/petroleum oil and lubricants}}}\\ \hline
+\texttt{multi/main/psychological operations} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/psychological operations}}}\\ \hline
+\texttt{multi/main/psychological operations filled} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/psychological operations filled}}}\\ \hline
+\texttt{multi/main/radar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/radar}}}\\ \hline
+\texttt{multi/main/repair parts} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/repair parts}}}\\ \hline
+\texttt{multi/main/sailing boat} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/sailing boat}}}\\ \hline
+\texttt{multi/main/sensor} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/sensor}}}\\ \hline
+\texttt{multi/main/signal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/signal/neutral}}}\\ \hline
+\texttt{multi/main/transportation} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/transportation}}}\\ \hline
+\texttt{multi/main/victim of an attempted crime} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/victim of an attempted crime}}}\\ \hline
+\texttt{multi/main/water} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/water}}}\\ \hline
+\texttt{multi/main/water purification} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/main/water purification}}}\\ \hline
+\texttt{multi/upper/naval} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/upper/naval}}}\\ \hline
+\texttt{multi/upper/medic} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/upper/medic}}}\\ \hline
+\texttt{multi/upper/runway} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/upper/runway}}}\\ \hline
+\texttt{multi/lower/pack animal} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/lower/pack animal}}}\\ \hline
+\texttt{multi/upperlower/maintenance} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/upperlower/maintenance}}}\\ \hline
+\texttt{multi/upperlower/railroad} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb multi/upperlower/railroad}}}\\ \hline
+\multicolumn{2}{c}{}\\
+\caption{Table of Multiple Class Icons and Modifiers}
+\end{tabularx}
+
+
+\subsubsection{Hidden Glyphs}
+
+There are some \texttt{.pic} that are not used as an icon or modifier directly, but are used to construct other icons or modifiers because they are used multiple times.
+
+\begin{table}[H]
+\centering
+\begin{tabular}{|c|c|}
+\hline
+\thead{Name} & \thead{Glyph}\\ \hline
+\texttt{equipment/main/weapon} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/weapon}}}\\ \hline
+\texttt{equipment/main/air defence} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/air defence}}}\\ \hline
+\texttt{equipment/main/anti tank} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/anti tank}}}\\ \hline
+\texttt{equipment/main/high trajectory indirect fire weapons system} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/high trajectory indirect fire weapons system}}}\\ \hline
+\texttt{equipment/main/side bands} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/side bands}}}\\ \hline
+\texttt{equipment/main/single band} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/single band}}}\\ \hline
+\texttt{equipment/main/double band} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/double band}}}\\ \hline
+\texttt{equipment/main/triple band} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb equipment/main/triple band}}}\\ \hline
+\texttt{seasubsurface/main/half sea mine} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb seasubsurface/main/half sea mine}}}\\ \hline
+\texttt{seasubsurface/main/sea surface} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb seasubsurface/main/sea surface}}}\\ \hline
+\texttt{supply/medicalbar} & \adjustbox{valign=m,margin=0.25cm}{\tikz{\pic{MilSymb supply/medicalbar/neutral}}}\\ \hline
+\end{tabular}
+\caption{Table of Hidden Glyphs}
+\end{table}
+
+\begin{landscape}
+
+\section{Examples}
+
+\subsection{Front Cover}
+
+\begin{writett}
+\fontsize{6}{0}\selectfont
+\begin{verbatim}
+\thispagestyle{empty}
+\begin{center}
+\begin{tikzpicture}[remember picture]
+
+\coordinate (NE) at ($(current page text area.north east)-(1.5, 1.5)$);
+\coordinate (NW) at ($(current page text area.north west)-(-1.5, 1.5)$);
+\coordinate (SE) at ($(current page text area.south east)-(1.5, -1.5)$);
+\coordinate (SW) at ($(current page text area.south west)-(-1.5, -1.5)$);
+
+\MilLand[faction=hostile, echelon=team, main=infantry, scale=2](NE)
+\MilAir[faction=friendly, main=military fixed wing, upper=jammer, lower=light, scale=2](NW)
+\MilSeaSurface[faction=neutral, main=hazardous material transport ship, lower=fast, scale=2](SE)
+\MilActivity[faction=unknown, main=searching, upper=house to house, scale=2](SW)
+
+\MilLand[faction=unknown, echelon=battalion, main=armoured, upper=missile, lower=long range, scale=2]($(NE)!0.33!(NW)$)
+\MilEquipment[faction=neutral, main=heavy machine gun, mobility=pack animal, scale=2]($(NE)!0.66!(NW)$)
+
+\MilSpace[faction=hostile, main=military earth observation satellite, upper=low earth orbit, lower=radar, scale=2]($(SE)!0.33!(SW)$)
+\MilInstallation[faction=friendly, main=electric power, upper=nuclear energy, scale=2]($(SE)!0.66!(SW)$)
+
+\MilSeaSubsurface[faction=friendly, main=snorkelling submarine, upper=auxiliary, lower=nuclear type 5, scale=2]($(NE)!0.2!(SE)$)
+\MilLand[faction=neutral, echelon=platoon, main=supply, supply={2}{4}, scale=2]($(NE)!0.4!(SE)$)
+\MilActivity[faction=hostile, main=attempted criminal activity, upper=rape, scale=2]($(NE)!0.6!(SE)$)
+\MilEquipment[faction=unknown, main=tank recovery vehicle, mobility=wheeled semi trailer, scale=2]($(NE)!0.8!(SE)$)
+
+\MilMissile[faction=hostile, left=sub surface, right=launched, scale=2]($(NW)!0.2!(SW)$)
+\MilInstallation[faction=unknown, main=civilian telecommunications, upper=television, scale=2]($(NW)!0.4!(SW)$)
+\MilSpace[faction=friendly, main=civilian space station, upper=geosynchronous orbit, scale=2]($(NW)!0.6!(SW)$)
+\MilLand[faction=neutral, echelon=corps, main=armoured, upper=missile, lower=long range, scale=2]($(NW)!0.8!(SW)$)
+
+\pgfresetboundingbox
+\path[use as bounding box] (0,0);
+
+\end{tikzpicture}
+
+{\let\newpage\relax\maketitle}
+\end{center}
+\end{verbatim}
+\end{writett}
+
+\end{landscape}
+
+\subsection{1\textsuperscript{st} Marine Division (USA)}
+
+\begin{figure}[H]
+\centering
+\input{manual_examples/mef.tex}
+\caption{Recreation of Structure of 1\textsuperscript{st} US Marine Division. Sourced from \href{https://commons.wikimedia.org/wiki/File:1st_US_Marine_Division.png}{Wikipedia}}.
+\label{org}
+\end{figure}
+
+\begin{landscape}
+
+\begin{writett}
+\fontsize{6}{0}\selectfont
+\begin{verbatim}
+\definecolor{salmon}{HTML}{F69289} %custom tank symbol colour
+
+%custom icons
+\makeatletter
+\tikzset{
+MilSymb custom/marine/.pic={
+ \pic{MilSymb land/main/infantry/\MilSymb@selectedfaction};
+ \clip \clipfriendly;
+ \pic[yshift=-10.75]{MilSymb land/main/amphibious/\MilSymb@selectedfaction};
+},
+MilSymb custom/tank/.pic={
+ \filldraw[fill=salmon]circle(0.5 and 0.15);
+},
+MilSymb custom/reconnaissance tank/.pic={
+ \pic{MilSymb custom/tank};
+ \pic{MilSymb land/main/reconnaissance/\MilSymb@selectedfaction};
+},
+MilSymb custom/amphibious tank/.pic={
+ \pic{MilSymb custom/tank};
+ \clip \clipfriendly;
+ \pic[yshift=-10.75]{MilSymb land/main/amphibious/\MilSymb@selectedfaction};
+}
+}
+\makeatother
+
+\fontsize{6}{0}\selectfont
+
+\begin{tikzpicture}
+
+% grid of symbols
+\node(H) at (7,0){\includegraphics[width=1.5cm]{manual_examples/772px-1st_Marine_Division_insignia}};
+\node[right of=H, node distance=1.85cm, align=left](HT){1\textsuperscript{st} Marine Division\\ CAMP PENDLETON};
+\node[above of=H, star,star points=5, star point ratio=0.5, rotate=180, xshift=-3, fill=yellow, draw] {};
+\node[above of=H, star,star points=5, star point ratio=0.5, rotate=180, xshift=3, fill=yellow, draw] {};
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=marine](3.5, -2)(C11){1\textsuperscript{st} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=marine](7, -2)(C21){5\textsuperscript{th} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=marine](10.5, -2)(C31){7\textsuperscript{th} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=regiment, main=field artillery](14, -2)(C41){11\textsuperscript{th} Marine Rgt. \\ CAMP PENDLETON}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=headquarters](0, -3)(C02){Headquarters \\ Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](3.75, -3)(C12){~\\ HQ Coy.}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](7.25, -3)(C22){~\\ HQ Coy.}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](10.75, -3)(C32){~\\ HQ Coy.}
+\MilLand[scale=0.75, faction=friendly, echelon=company, main=headquarters](14.25, -3)(C42){~\\ HQ Battery}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=tank](0, -4)(C03){1\textsuperscript{st} Tank \\ Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -4)(C13){1\textsuperscript{st} Btn. \\ 1\textsuperscript{st} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -4)(C23){1\textsuperscript{st} Btn. \\ 5\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -4)(C33){1\textsuperscript{st} Btn. \\ 7\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery](14.25, -4)(C43){1\textsuperscript{st} Btn. \\ 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=reconnaissance tank, lower=wheeled](0, -5)(C04){1\textsuperscript{st} Light Armoured \\ Reconnaissance Btn.}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -5)(C14){2\textsuperscript{nd} Btn. \\ 1\textsuperscript{st} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -5)(C24){2\textsuperscript{nd} Btn. \\ 5\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -5)(C34){2\textsuperscript{nd} Btn. \\ 7\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery](14.25, -5)(C44){2\textsuperscript{nd} Btn. \\ 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=reconnaissance tank, lower=wheeled](0, -6)(C05){3\textsuperscript{rd} Light Armoured \\ Reconnaissance Btn.}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -6)(C15){3\textsuperscript{rd} Btn. \\ 1\textsuperscript{st} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -6)(C25){3\textsuperscript{rd} Btn. \\ 5\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -6)(C35){3\textsuperscript{rd} Btn. \\ 7\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery](14.25, -6)(C45){3\textsuperscript{rd} Btn. \\ 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=reconnaissance](0, -7)(C06){1\textsuperscript{st} Reconnaissance \\ Battalion}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](3.75, -7)(C16){1\textsuperscript{st} Btn. \\ 4\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](7.25, -7)(C26){2\textsuperscript{nd} Btn. \\ 4\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=marine](10.75, -7)(C36){3\textsuperscript{rd} Btn. \\ 4\textsuperscript{th} Marines}
+ \MilLand[scale=0.75, faction=friendly, echelon=battalion, main=field artillery, upper=multiple rocket launcher, lower=wheeled](14.25, -7)(C46){5\textsuperscript{rd} Btn. 11\textsuperscript{th} Marines}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=engineer](0, -8)(C07){1\textsuperscript{st} Combat \\ Engineer Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=engineer](0, -9)(C08){3\textsuperscript{rd} Combat \\ Engineer Battalion}
+\MilLand[scale=0.75, faction=friendly, echelon=battalion, main=amphibious tank](0, -10)(C09){3\textsuperscript{rd} Assault \\ Amphibian Battalion}
+
+%connecting lines
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C11.north);
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C21.north);
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C31.north);
+\draw [shorten >=0.25cm] (H.south) |- ($(H.south)!0.5!(C11.north)$) -| (C41.north);
+\draw (H.south) |- ($(H.south)!0.5!(C11.north)$) -| ($(C02.west)+(-0.25, 0)$) -| (C02.west);
+
+\draw (C11.south west) |- (C12.west);
+\draw (C11.south west) |- (C13.west);
+\draw (C11.south west) |- (C14.west);
+\draw (C11.south west) |- (C15.west);
+\draw (C11.south west) |- (C16.west);
+
+\draw (C21.south west) |- (C22.west);
+\draw (C21.south west) |- (C23.west);
+\draw (C21.south west) |- (C24.west);
+\draw (C21.south west) |- (C25.west);
+\draw (C21.south west) |- (C26.west);
+
+\draw (C31.south west) |- (C32.west);
+\draw (C31.south west) |- (C33.west);
+\draw (C31.south west) |- (C34.west);
+\draw (C31.south west) |- (C35.west);
+\draw (C31.south west) |- (C36.west);
+
+\draw (C41.south west) |- (C42.west);
+\draw (C41.south west) |- (C43.west);
+\draw (C41.south west) |- (C44.west);
+\draw (C41.south west) |- (C45.west);
+\draw (C41.south west) |- (C46.west);
+
+\draw (C02.west) -| ($(C02.west)+(-0.25, 0)$) |- (C03.west);
+\draw (C03.west) -| ($(C02.west)+(-0.25, 0)$) |- (C04.west);
+\draw (C04.west) -| ($(C02.west)+(-0.25, 0)$) |- (C05.west);
+\draw (C05.west) -| ($(C02.west)+(-0.25, 0)$) |- (C06.west);
+\draw (C06.west) -| ($(C02.west)+(-0.25, 0)$) |- (C07.west);
+\draw (C07.west) -| ($(C02.west)+(-0.25, 0)$) |- (C08.west);
+\draw (C08.west) -| ($(C02.west)+(-0.25, 0)$) |- (C09.west);
+
+\end{tikzpicture}
+\end{verbatim}
+\end{writett}
+
+\end{landscape}
+
+\section{Control Measures}
+
+Control Measures are planned to be included in the next major version of \MilSymb. Please see the \href{https://github.com/ralphieraccoon/MilSymb}{GitHub} repository for further information.
+
+\end{document}
diff --git a/graphics/pgf/contrib/neuralnetwork/examples/neural-networks-ebook.pdf b/graphics/pgf/contrib/neuralnetwork/examples/neural-networks-ebook.pdf
new file mode 100644
index 0000000000..fc49fb4130
--- /dev/null
+++ b/graphics/pgf/contrib/neuralnetwork/examples/neural-networks-ebook.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.pdf b/graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.pdf
new file mode 100644
index 0000000000..dc047783c5
--- /dev/null
+++ b/graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.tex b/graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.tex
new file mode 100644
index 0000000000..7112ef0810
--- /dev/null
+++ b/graphics/pgf/contrib/neuralnetwork/examples/neuralnetwork.tex
@@ -0,0 +1,14 @@
+\documentclass{standalone}
+
+\usepackage{neuralnetwork}
+
+\begin{document}
+ \begin{neuralnetwork}[height=4]
+ \newcommand{\nodetextclear}[2]{}
+ \newcommand{\nodetextx}[2]{$x_#2$}
+ \newcommand{\nodetexty}[2]{$y_#2$}
+ \inputlayer[count=4, bias=false, title=Input\\layer, text=\nodetextx]
+ \hiddenlayer[count=5, bias=false, title=Hidden\\layer, text=\nodetextclear] \linklayers
+ \outputlayer[count=3, title=Output\\layer, text=\nodetexty] \linklayers
+ \end{neuralnetwork}
+\end{document}
diff --git a/graphics/pgf/contrib/neuralnetwork/examples/xor.pdf b/graphics/pgf/contrib/neuralnetwork/examples/xor.pdf
new file mode 100644
index 0000000000..62c3d9be56
--- /dev/null
+++ b/graphics/pgf/contrib/neuralnetwork/examples/xor.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/neuralnetwork/examples/xor.tex b/graphics/pgf/contrib/neuralnetwork/examples/xor.tex
new file mode 100644
index 0000000000..30bfecc7a7
--- /dev/null
+++ b/graphics/pgf/contrib/neuralnetwork/examples/xor.tex
@@ -0,0 +1,36 @@
+\documentclass{standalone}
+
+\usepackage{neuralnetwork}
+
+\begin{document}
+ \begin{neuralnetwork}[height=2.5, layertitleheight=0, nodespacing=2.8cm, layerspacing=1.7cm]
+ \newcommand{\nodetextclear}[2]{}
+ \newcommand{\nodetextxnb}[2]{\ifnum0=#2 \else $x_#2$ \fi}
+ \newcommand{\logiclabel}[1]{\,{$\scriptstyle#1$}\,}
+ \newcommand{\nodetextY}[2]{$y$}
+ \newcommand{\linklabelsU}[4]{\logiclabel{+1}}
+ \newcommand{\linklabelsA}[4]{\ifnum0=#2 \logiclabel{+3} \else \logiclabel{-2} \fi}
+ \setdefaultnodetext{\nodetextclear}
+ % Input layer
+ \inputlayer[count=2, bias=false, text=\nodetextxnb]
+ % links to first hidden layer from input layer
+ \hiddenlayer[count=3, bias=false, exclude={1, 3}]
+ \link[from layer=0, to layer=1, from node=1, to node=2, label=\linklabelsA]
+ \link[from layer=0, to layer=1, from node=2, to node=2, label=\linklabelsA]
+ \hiddenlayer[count=2, bias=true, biaspos=center]
+ % links to second hidden layer from input and first hidden layer
+ \link[from layer=0, to layer=2, from node=1, to node=1, label=\linklabelsA]
+ \link[from layer=1, to layer=2, from node=2, to node=1, label=\linklabelsA]
+ \link[from layer=1, to layer=2, from node=2, to node=2, label=\linklabelsA]
+ \link[from layer=0, to layer=2, from node=2, to node=2, label=\linklabelsA]
+ \outputlayer[count=1, text=\nodetextY]
+ % links to output layer from second hidden layer
+ \link[from layer=2, to layer=3, from node=1, to node=1, label=\linklabelsA]
+ \link[from layer=2, to layer=3, from node=2, to node=1, label=\linklabelsA]
+ % links from bias node
+ \link[from layer=2, to layer=1, from node=0, to node=2, label=\linklabelsA]
+ \link[from layer=2, to layer=2, from node=0, to node=1, label=\linklabelsA]
+ \link[from layer=2, to layer=2, from node=0, to node=2, label=\linklabelsA]
+ \link[from layer=2, to layer=3, from node=0, to node=1, label=\linklabelsA]
+ \end{neuralnetwork}
+\end{document}
diff --git a/graphics/pgf/contrib/neuralnetwork/neuralnetwork.sty b/graphics/pgf/contrib/neuralnetwork/neuralnetwork.sty
new file mode 100644
index 0000000000..60da3dec5b
--- /dev/null
+++ b/graphics/pgf/contrib/neuralnetwork/neuralnetwork.sty
@@ -0,0 +1,250 @@
+\ProvidesPackage{neuralnetwork}[2013/07/18 v1.0 Neural network diagrams, Mark Kuckian Cowan, mark@battlesnake.co.uk]
+
+%
+% Available from github:
+% git clone https://github.com/battlesnake/neuralnetwork
+%
+% Distributed under the terms of the GNU General Public License version 2 (GPL2)
+%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{environ}
+\RequirePackage{etoolbox}
+\RequirePackage{xkeyval}
+\RequirePackage{tikz}
+\RequirePackage{algorithmicx}
+\RequirePackage{mathtools}
+
+\usetikzlibrary{shapes}
+
+\newcommand{\nn@var}[1] {\@ifundefined{c@nn@#1@counter}{\newcounter{nn@#1@counter}}{\nn@set{#1}{0}}}
+\newcommand{\nn@set}[2] {\setcounter{nn@#1@counter}{{#2}}}
+\newcommand{\nn@get}[1] {\arabic{nn@#1@counter}}
+\newcommand{\nn@inc}[1] {\stepcounter{nn@#1@counter}}
+\newcommand{\nn@del}[1] {\stepcounter{nn@#1@counter}}
+
+\define@key{network}{nodespacing} {\pgfmathsetlengthmacro\nn@nodespacing{#1}}
+\define@key{network}{layerspacing} {\pgfmathsetlengthmacro\nn@layerspacing{#1}}
+\define@key{network}{height} {\def\nn@height{#1}}
+\define@key{network}{maintitleheight} {\pgfmathsetlengthmacro\nn@maintitleheight{#1}}
+\define@key{network}{layertitleheight} {\pgfmathsetlengthmacro\nn@layertitleheight{#1}}
+\define@boolkey{network}{toprow} {\ifKV@network@toprow\def\nn@toprow{1}\else\def\nn@toprow{0}\fi}
+\define@key{network}{style} {\def\nn@style{#1}}
+\define@key{network}{nodesize} {\pgfmathsetlengthmacro\nn@nodesize{#1}}
+\define@key{network}{title} {\def\nn@maintitle{#1}}
+\define@key{network}{titlestyle} {\def\nn@titlestyle{#1}}
+
+\NewEnviron{neuralnetwork}[1][] {{%
+\begingroup
+\setkeys{network} {nodespacing=1.0cm, layerspacing=2.5cm, maintitleheight=2.5em, layertitleheight=2.5em, height=5, toprow=false, nodesize=17pt, style={}, title={}, titlestyle={}, #1}
+\edef\nn@tikzpic@styled{\noexpand\begin{tikzpicture}[\nn@style]}
+\nn@tikzpic@styled
+ \tikzstyle{neuron}=[circle,fill=black!25,minimum size=\nn@nodesize,inner sep=0pt]
+ \tikzstyle{input neuron}=[neuron, fill=green!50];
+ \tikzstyle{output neuron}=[neuron, fill=red!50];
+ \tikzstyle{hidden neuron}=[neuron, fill=blue!40];
+ \tikzstyle{bias neuron}=[neuron, fill=yellow!50];
+ \tikzstyle{layertitle} = [text width=\nn@layerspacing - (1 em), text centered];
+ \tikzstyle{layertitlewide} = [layertitle, text width=\nn@layerspacing + (2 em)];
+ \tikzstyle{linkstitle} = [text centered, fill=white, text=darkgray, fill opacity=0.45, text opacity=1.0, inner sep=2pt, ellipse];
+ \tikzstyle{linklabel} = [rectangle, fill=white, text opacity=1.0, text=black, text centered, inner sep=0pt];
+ \tikzstyle{link} = [->, shorten <=0pt, shorten >=1pt, node distance=\nn@layerspacing, thin, draw=black!45];
+ \tikzstyle{networktitle} = [rectangle, text=black, text centered, inner sep=0pt];
+ \nn@var{layerindex}
+ \nn@var{lastlayerstart} \nn@var{thislayerstart}
+ \nn@var{lastlayercount} \nn@var{thislayercount}
+ \nn@var{lastlayerindex} \nn@var{thislayerindex}
+ \def\nnlinkbasestyle{}
+ \def\nnlinkextrastyle{}
+ \def\nnlinklabelbasestyle{}
+ \def\nnlinklabelextrastyle{}
+ \newcommand{\nn@layerindex}{\nn@get{layerindex}}
+ \hfuzz=\maxdimen
+ %\tolerance=10000
+ %\hbadness=10000
+ \ifx\nn@maintitle\empty \def\nn@maintitleheight{0} \fi
+ { \BODY }
+ \ifx\nn@maintitle\empty {} \else
+ \pgfmathsetlengthmacro{\nn@width} {\nn@layerspacing * (\nn@layerindex - 1)}
+ \pgfmathsetlengthmacro{\nn@halfwidth} {\nn@width / 2}
+ \edef\nn@gentitle{\noexpand\node[networktitle, \nn@titlestyle] (MAIN-TITLE) at (\nn@halfwidth, 0) {\noexpand\nn@maintitle};}
+ \nn@gentitle
+ \fi
+\end{tikzpicture}
+\endgroup
+}}
+
+% For some reason latex won't accept this, and spews out a dozen meaningless error messages.
+% The Y version needs updating anyway to account for extra titles
+%\newcommand{\nnGridX}[1] {\pgfmathsetlength{\temp}{(\nn@layerspacing * #1)}\temp}
+%\newcommand{\nnGridY}[1] {\pgfmathsetlength{\temp}{(-\nn@nodespacing * #1 + \nn@titleheight)}\temp}
+
+\newcommand{\nn@if} {\expandafter\ifstrequal\expandafter}
+
+\newcommand{\nn@defaultnodetext}[2] {}
+\newcommand{\setdefaultnodetext}[1] {\renewcommand{\nn@defaultnodetext}[2]{#1{##1}{##2}}}
+\define@key{layer}{title} {\def\nn@layertitle{#1}}
+\define@boolkey{layer}{widetitle} {\ifKV@layer@widetitle\def\nn@widetitle{1}\else\def\nn@widetitle{0}\fi}
+\define@key{layer}{count} {\def\nn@nodecount{#1}}
+\define@key{layer}{text} {\renewcommand{\nn@nodecaption}[2]{#1{##1}{##2}}}
+\define@boolkey{layer}{bias} {\ifKV@layer@bias\def\nn@bias{1}\else\def\nn@bias{0}\fi}
+\define@key{layer}{title} {\def\nn@layertitle{#1}}
+\define@key{layer}{nodeclass} {\def\nn@nodeclass{#1}}
+\define@boolkey{layer}{top} {\ifKV@layer@top\def\nn@top{1}\else\def\nn@top{0}\fi}
+\define@key{layer}{biaspos} {\def\nn@biaspos{#1}}
+\define@key{layer}{exclude} {\def\nn@exclude{#1}}
+\define@key{layer}{titlestyle} {\def\nn@layertitlestyle{#1}}
+\newcommand{\layer}[1][] {{%
+ \newcommand{\nn@nodecaption}[2]{}
+ \setkeys{layer} {title={}, titlestyle={}, count=5, text=\nn@defaultnodetext, nodeclass={hidden neuron}, biaspos=top, top=false, exclude={}, widetitle=false, #1}
+ % Linkage stuff
+ \nn@set{lastlayercount}{\nn@get{thislayercount}}
+ \nn@set{lastlayerstart}{\nn@get{thislayerstart}}
+ \nn@set{lastlayerindex}{\nn@get{thislayerindex}}
+ % Get start index
+ \pgfmathtruncatemacro{\nn@startindex} {1 - \nn@bias}
+ % Get y-offset
+ \pgfmathsetlengthmacro{\nn@titles} {\nn@maintitleheight + \nn@layertitleheight}
+ \if \nn@top 1
+ \pgfmathsetlengthmacro{\nn@offset} {\nn@titles}
+ \def\nn@biaspos{top}
+ \else
+ \pgfmathsetlengthmacro{\nn@offset} {\nn@titles + \nn@nodespacing * (\nn@height - (1 + \nn@nodecount - \nn@startindex)) / 2}
+ \fi
+ % Get x-position
+ \pgfmathsetlengthmacro{\nn@node@x} {\nn@layerspacing * \nn@layerindex}
+ % Draw bias node if needed
+ \pgfmathtruncatemacro{\nn@startindex@draw}{\nn@startindex}
+ \if \nn@bias 1
+ % Get xy-position of bias node and update position range for other nodes
+ \newcommand{\nn@node@xb} {}
+ \def\nn@bias@own@row{0}
+ \nn@if{\nn@biaspos}{top} {
+ \pgfmathsetlengthmacro{\nn@node@y} {-\nn@offset}
+ \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x}
+ \def\nn@bias@own@row{1}
+ \if \nn@toprow 1
+ \def\nn@biaspos{top row}
+ \fi
+ }
+ \nn@if{\nn@biaspos}{top row} {
+ \pgfmathsetlengthmacro{\nn@node@y} {-\nn@titles}
+ \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x}
+ \def\nn@bias@own@row{1}
+ }
+ % Does the bias node have its own row ("top" or "top row")?
+ \nn@if{\nn@bias@own@row}{0} {
+ \pgfmathsetlengthmacro{\nn@offset} {\nn@offset - (\nn@nodespacing / 2)}
+ \pgfmathsetlengthmacro{\nn@node@y} {-(\nn@nodespacing * ((\nn@nodecount+1)/2 - \nn@startindex@draw) + \nn@offset)}
+ }
+ % Centered vertical position
+ % The "dummy" line is necessary to overcome some LaTeX bug, the first line in the list below always seems to get ignored by the parser.
+ \nn@if{\nn@biaspos}{dummy} { \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x} }
+ \nn@if{\nn@biaspos}{center} { \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x} }
+ \nn@if{\nn@biaspos}{center right} { \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x + (1*\nn@layerspacing / 4)} }
+ \nn@if{\nn@biaspos}{center left} { \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x - (1*\nn@layerspacing / 4)} }
+ \nn@if{\nn@biaspos}{center right right} { \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x + (2*\nn@layerspacing / 3)} }
+ \nn@if{\nn@biaspos}{center left left} { \pgfmathsetlengthmacro{\nn@node@xb} {\nn@node@x - (2*\nn@layerspacing / 3)} }
+ % Error check
+ \nn@if{\nn@node@xb}{} {
+ \PackageError{neuralnetwork}{Unknown bias node position: "\nn@biaspos"}
+ }
+ % Draw node
+ \node[bias neuron] (L\nn@layerindex-0) at (\nn@node@xb, \nn@node@y) {\nn@nodecaption{\nn@layerindex}{0}};
+ \fi
+ % Adjust unbiased layer if bias nodes have their own top row
+ \if \nn@toprow 1
+ \if \nn@bias 0
+ \pgfmathsetlengthmacro{\nn@offset}{\nn@offset + \nn@nodespacing/2}
+ \fi
+ \fi
+ % Draw nodes
+ \foreach \nn@nodeindex in {1,...,\nn@nodecount} {
+ % Get y-position
+ \pgfmathsetlengthmacro{\nn@node@y} {-(\nn@nodespacing * (\nn@nodeindex - \nn@startindex@draw) + \nn@offset)}
+ % Check if the node is excluded
+ \def\nn@dontdraw{0}
+ \foreach \nn@excluded in \nn@exclude
+ \if \nn@excluded \nn@nodeindex \global\def\nn@dontdraw{1} \breakforeach \fi;
+ % Draw node if not excluded
+ \if \nn@dontdraw 0
+ \node[\nn@nodeclass] (L\nn@layerindex-\nn@nodeindex) at (\nn@node@x, \nn@node@y) {\nn@nodecaption{\nn@layerindex}{\nn@nodeindex}};
+ \fi
+ }
+ % Title
+ %\if\relax\detokenize{\nn@layertitle}\relax \else
+ \ifx\nn@layertitle\empty {} \else
+ \edef\nn@layer@gentitle[##1]{\noexpand\node[##1, \nn@layertitlestyle] (T\nn@layerindex) at (\nn@node@x, \nn@maintitleheight) {\noexpand\nn@layertitle};}
+ \if \nn@widetitle 1
+ \nn@layer@gentitle[layertitlewide]
+ \else
+ \nn@layer@gentitle[layertitle]
+ \fi
+ \fi
+ % Linkage stuff
+ \nn@set{thislayercount}{\nn@nodecount}
+ \nn@set{thislayerstart}{\nn@startindex}
+ \nn@set{thislayerindex}{\nn@layerindex}
+ \nn@inc{layerindex}
+}}
+\newcommand{\inputlayer}[1][] { \layer[bias=true,nodeclass={input neuron},#1] }
+\newcommand{\hiddenlayer}[1][] { \layer[bias=true,nodeclass={hidden neuron},#1] }
+\newcommand{\outputlayer}[1][] { \layer[bias=false,nodeclass={output neuron},#1] }
+
+\define@key{links}{title} {\def\nn@linkstitle{#1}}
+\define@key{links}{labels} {\def\nn@linkslabels{#1}}
+\define@key{links}{not from} {\def\nn@notfrom{#1}}
+\define@key{links}{not to} {\def\nn@notto{#1}}
+\define@key{links}{style} {\def\nn@linksstyle{#1}}
+\newcommand{\linklayers}[1][] {{%
+ \setkeys{links} {title={},labels=\nn@defaultlinklabel,style={},not from={}, not to={},#1}
+ % Layer indices
+ \edef\lastlayer{\nn@get{lastlayerindex}}
+ \edef\thislayer{\nn@get{thislayerindex}}
+ % Links
+ \foreach \lastnode in {\nn@get{lastlayerstart},...,\nn@get{lastlayercount}}
+ \foreach \thisnode in {1,...,\nn@get{thislayercount}} {
+ % Draw link if it isn't excluded
+ \def\nn@dontdraw{0}
+ \foreach \nn@excluded in \nn@notfrom
+ \if \nn@excluded \nn@lastnode \global\def\nn@dontdraw{1} \breakforeach \fi;
+ \foreach \nn@excluded in \nn@notto
+ \if \nn@excluded \nn@thisnode \global\def\nn@dontdraw{1} \breakforeach \fi;
+ \if \nn@dontdraw 0
+ \link[from layer=\lastlayer, from node=\lastnode, to layer=\thislayer, to node=\thisnode, label=\nn@linkslabels, style=\nn@linksstyle];
+ \fi
+ }
+ % Title
+ \ifdefempty{\nn@linkstitle} {} {
+ \pgfmathsetlengthmacro{\nn@links@title@x} {\nn@layerspacing * (\thislayer - 0.5)}
+ \pgfmathsetlengthmacro{\nn@links@title@y} {-(\nn@maintitleheight + \nn@layertitleheight - (\nn@nodespacing / 6))}
+ \node[linkstitle] (TL\lastlayer) at (\nn@links@title@x, \nn@links@title@y) {\nn@linkstitle};
+ }
+}}
+
+\newcommand{\nn@defaultlinklabel}[4] {\empty}
+\newcommand{\setdefaultlinklabel}[1] {\renewcommand{\nn@defaultlinklabel}[4]{#1{##1}{##2}{##3}{##4}}}
+\define@key{link}{label} {\renewcommand{\nn@linklabel}[4]{#1{##1}{##2}{##3}{##4}}}
+\define@key{link}{from layer} {\def\nn@fromlayer{#1}}
+\define@key{link}{from node} {\def\nn@fromnode{#1}}
+\define@key{link}{to layer} {\def\nn@tolayer{#1}}
+\define@key{link}{to node} {\def\nn@tonode{#1}}
+\define@key{link}{labelpos} {\def\nn@labelpos{#1}}
+\define@key{link}{style} {\def\nn@linkstyle{#1}}
+\newcommand{\link}[1][] {{%
+ \newcommand{\nn@linklabel}[4] {}
+ \setkeys{link} {style={}, label=\nn@defaultlinklabel, labelpos=midway, #1}
+ \edef\nn@label{\nn@linklabel{\nn@fromlayer}{\nn@fromnode}{\nn@tolayer}{\nn@tonode}}
+ % Handle necessary expansions
+ \def\nn@link@proto##1 { \noexpand\path[\nnlinkbasestyle, link, \nnlinkextrastyle, \nn@linkstyle] (L\nn@fromlayer-\nn@fromnode) edge ##1 (L\nn@tolayer-\nn@tonode) }
+ \edef\nn@link@path { \nn@link@proto{} }
+ \edef\nn@link@node { \nn@link@proto{[\noexpand\nn@labelpos] node[\nnlinklabelbasestyle, linklabel, \nnlinklabelextrastyle] {\noexpand\nn@label}} }
+ \ifdefempty{\nn@label} {
+ \nn@link@path;
+ } {
+ \nn@link@node;
+ }
+}}
+
+\endinput
diff --git a/graphics/pgf/contrib/penrose/README.txt b/graphics/pgf/contrib/penrose/README.txt
new file mode 100644
index 0000000000..43c2298f5f
--- /dev/null
+++ b/graphics/pgf/contrib/penrose/README.txt
@@ -0,0 +1,8 @@
+----------------------------------------------------------------
+penrose --- TikZ library for producing Penrose tilings
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package is for the creation of Penrose tilings using either kite-and-dart or rhombuses, and either by manual placement or automatic generation.
diff --git a/graphics/pgf/contrib/penrose/penrose.pdf b/graphics/pgf/contrib/penrose/penrose.pdf
new file mode 100644
index 0000000000..089af30724
--- /dev/null
+++ b/graphics/pgf/contrib/penrose/penrose.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/penrose/penrose.tex b/graphics/pgf/contrib/penrose/penrose.tex
new file mode 100644
index 0000000000..b381149ee2
--- /dev/null
+++ b/graphics/pgf/contrib/penrose/penrose.tex
@@ -0,0 +1,731 @@
+\immediate\write18{tex penrose_code.dtx}
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{trace}
+\usepackage{lmodern}
+\usepackage{morefloats}
+\usepackage[svgnames]{xcolor}
+\usepackage{tikz}
+\usetikzlibrary{penrose}
+\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \centering
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\newenvironment{justexample}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\colorlet{thinRhombus}{DarkOrchid}
+\colorlet{thickRhombus}{DarkSlateGray}
+\colorlet{circleArc}{RosyBrown}
+\colorlet{longArc}{LawnGreen}
+
+\colorlet{kite}{HotPink}
+\colorlet{dart}{Fuchsia}
+
+\colorlet{goldenTriangle}{Gold}
+\colorlet{reverseGoldenTriangle}{Magenta}
+\colorlet{goldenGnomon}{Cyan}
+\colorlet{reverseGoldenGnomon}{LimeGreen}
+
+\makeatletter
+\tikzset{
+ tint fill colour/.code={%
+ \edef\@temp{%
+ \def\noexpand\tikz@fillcolor{\tikz@fillcolor!#1}%
+ \noexpand\tikz@addoption{\noexpand\pgfsetfillcolor{\tikz@fillcolor!#1}}%
+ }%
+ \@temp
+ }
+}
+\makeatother
+
+\providecommand*{\url}{\texttt}
+
+\title{The \textsf{Penrose} Package: Documentation}
+\author{Andrew Stacey\texorpdfstring{\\ \url{loopspace@mathforge.org}}{}}
+\date{1.0~from 2018/07/10}
+
+\begin{document}
+\maketitle
+
+\section{Introduction}
+
+The \textsf{Penrose} package is a TikZ library for drawing Penrose tiles.
+It currently supports the kite/dart, rhombus, and pentagon tile sets.
+There are two main methods for their placement: one that automatically generates a tiling, and one that allows for ``by hand'' placement.
+Furthermore, the tiles themselves can be deformed and will still (hopefully!) fit together in the correct fashion.
+
+\section{Initialisation}
+
+To use this package, load the \Verb+tikz+ package and load \Verb+penrose+ as a TikZ library.
+Specifically, your preamble should contain:
+
+\begin{verbatim}
+\usepackage{tikz}
+\usetikzlibrary{penrose}
+\end{verbatim}
+
+\section{Usage}
+
+Using this package splits into several components.
+There are the two main ways of getting tiles on to the page, and then there are the ways of deforming or styling the tiles once they are there.
+
+\subsection{Placing Tiles ``By Hand''}
+
+It is possible to use the tiles as \Verb+pic+s.
+These are mini-drawings introduced in TikZ3.0 that are node-like in style, but a little more geared towards repeatable \emph{drawings} than boxes containing text.
+This package defines several \Verb+pic+ types:
+
+\tikzset{
+ every Penrose pic/.style={draw,ultra thick},
+ every circle arc/.style={draw,thin},
+ every long arc/.style={draw,thin},
+}
+
+\begin{itemize}
+\item Kite \tikz[baseline=-.5ex] \pic[draw,kite];
+\item Dart \tikz[baseline=-.5ex] \pic[draw,dart];
+\item Thin Rhombus \tikz[baseline=-.5ex] \pic[draw,thin rhombus];
+\item Thick Rhombus \tikz[baseline=-.5ex] \pic[draw,thick rhombus];
+\item Pentagon \tikz[baseline=-.5ex] \pic[draw, pentagon 5];
+(Actually, there are three pentagons: \Verb+pentagon 5+, \Verb+pentagon 3+, and \Verb+pentagon 2+.
+The number signifies how many pentagons it goes next to.)
+\item Pentagram \tikz[baseline=-.5ex] \pic[draw, pentagram];
+\item Boat \tikz[baseline=-.5ex] \pic[draw, boat];
+\item Diamond \tikz[baseline=-.5ex] \pic[draw, diamond];
+\item Golden Triangle \tikz[baseline=-.5ex] \pic[draw,golden triangle];
+\item Reverse Golden Triangle \tikz[baseline=-.5ex] \pic[draw,reverse golden triangle];
+\item Golden Gnomon \tikz[baseline=-.5ex] \pic[draw,golden gnomon];
+\item Reverse Golden Gnomon \tikz[baseline=-.5ex] \pic[draw,reverse golden gnomon];
+\end{itemize}
+
+The main tiles can have arcs drawn on them to illustrate the matching rules.
+The triangles and gnomon are not true Penrose tiles but rather can be used to build tilings so they do not have the arcs.
+The two types of each triangle and gnomon are actually different in that they have different matching rules.
+This is best illustrated by deforming the paths (see Section~\ref{sec:pathdeform}).
+
+There are two ways in TikZ to specify the \Verb+pic+ type: either as the ``contents'' of the pic or as the argument to the \Verb+pic type+ key.
+Each of the tiles comes with a shorthand key which specifies the \Verb+pic type+ and also invokes the key \Verb+every Penrose tile+.
+That is, the key \Verb+dart+ calls the \Verb+every Penrose tile+ key and specifies the \Verb+pic type+ as \Verb+dart+.
+
+The tiles can be placed using standard TikZ methods.
+One important thing to note is that by default, \Verb+pic+s are like \Verb+nodes+ in that they only respond to ambient translations, and not to rotations and scaling.
+To make them notice this, use the key \Verb+transform shape+ or specify the transformation to the \Verb+pic+ directly.
+If the shortcut keys are used to specify the tiles, this can be put in the \Verb+every Penrose pic+ style.
+
+TikZ \Verb+pic+s can be named, using the \Verb+name=<name>+ key.
+When a Penrose tile has been named then it can be used for positioning other tiles.
+Each edge is assigned a label from \Verb+a b c A B C+ and a new tile can be aligned with an old one along a matching edge (\Verb+a+ matches with \Verb+A+ and so on).
+
+The edge labels are as follows.
+For the \Verb+pentagon 5+, for example, the edges are all the same and the numbers are used to distinguish between them.
+
+\foreach \tile/\edges in {
+ kite/{a,A,c,C},
+ dart/{a,A,c,C},
+ thin rhombus/{a,A,b,B},
+ thick rhombus/{a,A,b,B},
+ pentagon 5/{a1,a2,a3,a4,a5},
+ pentagon 3/{A,b1,a1,a2,b2},
+ pentagon 2/{d,A1,c1,c2,A2},
+ pentagram/{C1,C2,C3,C4,C5,C6,C7,C8,C9,C10},
+ boat/{C1,C2,C3,C4,B1,D,B2},
+ diamond/{D1,B1,B2,D2},
+ golden triangle/{a,b,c},
+ reverse golden triangle/{A,B,C},
+ golden gnomon/{A,b,C},
+ reverse golden gnomon/{a,B,c}} {
+
+\begin{tikzpicture}
+\pic[draw,\tile,name=tile];
+\foreach \e in \edges {
+ \path (tile-edge \e\space start) -- node {\e} (tile-edge \e\space end);
+}
+\end{tikzpicture}
+
+}
+
+To align a tile with an existing one, use the following key:
+%
+\begin{verbatim}
+align with=<tile> along <edge>
+\end{verbatim}
+%
+where \Verb+<tile>+ is the name given to an existing tile, and \Verb+<edge>+ is the label on the existing tile.
+If the tile being placed has edges that are identical (for example, \Verb+pentagon 5+), this syntax extends to
+%
+\begin{verbatim}
+align with=<tile> along <edge> using <number>
+\end{verbatim}
+%
+to specify which of the edges on the new tile to use.
+
+\begin{example}
+\begin{tikzpicture}
+\pic[kite,name=tile];
+\pic[dart,align with=tile along c];
+\pic[pentagon 5,name=ptile,at={(3,0)}];
+\pic[pentagon 3,align with=ptile along a1 using 2];
+\end{tikzpicture}
+\end{example}
+
+With judicious use of loops, quite complicated pictures can be rendered using simple code.
+(Note that the \Verb+transform shape+ is \emph{not} needed to apply the transformations needed to place a tile using this syntax.)
+
+\begin{example}
+\begin{tikzpicture}[
+ every rhombus/.style={
+ draw=black,
+ ultra thick,
+ },
+ every thin rhombus/.style={
+ every rhombus/.try,
+ fill=thinRhombus,
+ },
+ every thick rhombus/.style={
+ every rhombus/.try,
+ fill=thickRhombus,
+ },
+ every circle arc/.style={
+ draw=circleArc
+ },
+ every long arc/.style={
+ draw=longArc
+ }
+]
+\pic[rotate=18,thick rhombus,name=a0];
+\foreach[evaluate=\k as \kmo using int(\k-1)] \k in {1,...,4}
+{
+ \pic[thick rhombus,name=a\k,align with={a\kmo} along A];
+}
+\foreach \k in {0,...,4}
+{
+ \pic[thin rhombus,name=b\k,align with={a\k} along B];
+ \pic[thick rhombus,name=c\k,align with={b\k} along A];
+ \pic[thick rhombus,name=d\k,align with={b\k} along a];
+ \pic[thick rhombus,name=e\k,align with={c\k} along A];
+ \foreach \l/\a in {{0/b},{1/B}}
+ \pic[thin rhombus,name=f\k\l,align with={e\k} along \a];
+}
+\pic[thin rhombus,name=g0,align with={f10} along a];
+\pic[thin rhombus,name=g1,align with={f21} along A];
+\foreach \l/\a in {{0/a},{1/A}}
+ \pic[thick rhombus,name=h\l,align with={g\l} along \a];
+\pic[thick rhombus,name=i,align with=g0 along B];
+\foreach \l/\a in {{0/a},{1/A}}
+ \pic[thick rhombus,name=j\l,align with=i along \a];
+\end{tikzpicture}
+\end{example}
+
+The tiles can be styled, either directly or using various keys.
+Each tile has the following styles applied (in this order):
+%
+\begin{enumerate}
+\item \Verb+every Penrose Tile+
+\item \Verb+every <name>+
+\item \Verb+pic actions+
+\end{enumerate}
+%
+The \Verb+pic actions+ are any actions given directly to the tile, as in \Verb+\pic[draw,thin rhombus];+.
+The kite, dart, and rhombus tiles also have arcs drawn on them and these are styled as \Verb+every circle arc+ and \Verb+every long arc+.
+The names come from the way the arcs look on the rhombus shapes.
+
+One other point is important to note about the tiles.
+They are actually clipped against themselves.
+This ensures that the tiles do not overstep their bounds and so when placed alongside each other then they do not go over each other.
+In practical terms, this means that if drawn then the line width is half that which might be expected (but when placed next to another tile, the two halves combine to the expected width).
+
+\subsection{Placing Tiles Automatically}
+
+There is a way to specify a Penrose tiling using \emph{Lindenmayer systems}.
+In brief, this takes a golden triangle or gnomon (or one of the reverse ones) and repeatedly decomposes it into smaller triangles and gnomon.
+Once a desired level has been reached, the resulting triangles and gnomon are glued together in pairs to create either darts and kites or rhombuses (of both types).
+This library contains an implementation of this both for each of the tilings.
+
+The user command is:
+%
+\begin{verbatim}
+\PenroseDecomposition{<type>}{<level>}{<seed>}
+\end{verbatim}
+%
+where \Verb+<type>+ is one of:
+%
+\begin{itemize}
+\item \Verb+kite+ for the kite and dart tiling,
+\item \Verb+rhombus+ for the rhombus tiling,
+\item \Verb+pentagon+ for the pentagon tiling.
+\item \Verb+ktriangle+ for the triangular decomposition used to form the kite and dart tiling but with the individual triangles
+\item \Verb+rtriangle+ for the triangular decomposition used to form the rhombus tiling but with the individual triangles.
+\end{itemize}
+
+The \Verb+<seed>+ is a ``word'' that will be used to initiate the Lindenmayer system.
+The key letters in the alphabet for the kite/darts and rhombuses are \Verb+T+, \Verb+t+, \Verb+G+, and \Verb+g+.
+These actually correspond to the two triangles and two gnomons.
+For the pentagons, the key letters are \Verb+P+, \Verb+Q+, \Verb+R+, \Verb+G+, \Verb+B+, \Verb+D+.
+These correspond to the three pentagons, the pentagram, the boat, and the diamond.
+Other permitted letters are \Verb+[+, \Verb+]+, \Verb+s+, \Verb+f+, \Verb!+!, \Verb+*+, \Verb+-+, \Verb+_+, \Verb+>+.
+These refer to various transformations (for details, see the implementation).
+
+The \Verb+<level>+ controls how far to take the iteration.
+The code is not particularly optimised for speed, and once \Verb+<level>+ gets to about \(5\) or \(6\) then we are at the ``make a cup of tea while compiling'' stage, depending on the processor.
+
+\begin{example}
+\begin{tikzpicture}[
+ every Penrose tile/.style={draw},
+ Penrose step=2cm,
+]
+\PenroseDecomposition{kite}{0}{T}
+\end{tikzpicture}
+\end{example}
+
+The same styling keys as for the \Verb+pic+ tiles apply, together with some additional ones.
+These allow styling the tiles by their number: a count is kept of the number of tiles and each tile knows its own number.
+Specifically, two keys are tried:
+%
+\begin{enumerate}
+\item \Verb+Penrose tile <number>+, and
+\item \Verb+Penrose tile={<number>}{<total>}+
+\end{enumerate}
+%
+A word of warning is in order on the second of these.
+The \Verb+<total>+ is not guaranteed to be correct.
+It is done by a quick count at the start of the process and counts those letters which \emph{might} result in a rendered tile.
+Not every letter in the resulting word actually does.
+Nevertheless, this can be used to style a tile based on what proportion of tiles have been rendered.
+
+Lastly, \Verb+Penrose step+ is used to control the size of the resulting picture.
+
+\begin{example}
+\begin{tikzpicture}[
+ every Penrose tile/.style={draw},
+ Penrose step=4cm,
+ Penrose tile/.code 2 args={
+ \pgfmathsetmacro\tint{100*#1/#2}
+ \pgfkeysalso{fill=black!\tint}
+ }
+]
+\PenroseDecomposition{rhombus}{3}{T}
+\end{tikzpicture}
+\end{example}
+
+\section{Deforming Paths}
+\label{sec:pathdeform}
+
+This package provides the ability to deform the various tiles.
+The various tiles can be built from four paths (labelled \Verb+a+, \Verb+b+, \Verb+c+, and \Verb+d+) together with their reverses.
+By changing these paths, one can get a wide variety of different tiles with the same fundamental matching rules.
+Indeed, by using asymmetric paths, the matching rules can be enforced without the need for additional decoration.
+
+Internally, the \Verb+penrose+ library uses the \Verb+spath3+ package for storing and manipulating the paths.
+
+To create a new edge path, use the key \Verb+save Penrose path=<edge>+ where \Verb+<edge>+ is one of \Verb+a+, \Verb+b+, \Verb+c+, or \Verb+d+.
+There are no constraints on the size of the path as all paths are scaled and transformed to fit the tiles.
+Once the edge paths have been specified, they are welded together into the tiles using the following command:
+%
+\begin{verbatim}
+\MakePenroseTile{<name>}
+\end{verbatim}
+%
+Here, \Verb+<name>+ is one of the names of the tiles.
+This has global effect, as does the definition of the edge paths.
+Internally, the tile paths are stored as \Verb+spath+ objects (from the \Verb+spath3+ package) so the commands of that package can be used to, for example, make a copy of a tile.
+The internal name for a tile path is \Verb+Penrosepathtile<name>+ (no spaces) so can be cloned via:
+%
+\begin{verbatim}
+\CloneSPath{Penrosepathtile<name>}{My Amazing Penrose Tile}
+\end{verbatim}
+%
+and restored with the same command (but names switched).
+
+\begin{example}
+\begin{tikzpicture}
+\pic[draw,dart,name=dart];
+\pic[draw,kite,align with=dart along c];
+\pic[draw,kite,align with=dart along C];
+\CloneSPath{Penrosepathtilekite}{Original kite}
+\CloneSPath{Penrosepathtiledart}{Original dart}
+\path[save Penrose path=a] (0,0) to[out=-30,in=100] (1,0);
+\path[save Penrose path=c] (0,0) to[out=-40,in=140] (1,0);
+\MakePenroseTile{kite}
+\MakePenroseTile{dart}
+\pic[xshift=2cm,draw,dart,name=dart];
+\pic[draw,kite,align with=dart along c];
+\pic[draw,kite,align with=dart along C];
+\CloneSPath{Original kite}{Penrosepathtilekite}
+\CloneSPath{Original dart}{Penrosepathtiledart}
+\pic[xshift=4cm,draw,dart,name=dart];
+\pic[draw,kite,align with=dart along c];
+\pic[draw,kite,align with=dart along C];
+\end{tikzpicture}
+\end{example}
+
+With deformed tiles, there is no guarantee that the inner arcs will match up perfectly.
+
+\section{More Examples}
+
+Let's set some aesthetically pleasing shapes.
+
+\begin{justexample}
+\begin{tikzpicture}
+\path[save Penrose path=a] (0,0) to[out=-30,in=100] (1,0);
+\path[save Penrose path=b] (0,0) to[out=0,in=140] (1,0);
+\path[save Penrose path=c] (0,0) to[out=-40,in=140] (1,0);
+\MakePenroseTile{thin rhombus}
+\MakePenroseTile{thick rhombus}
+\MakePenroseTile{golden triangle}
+\MakePenroseTile{reverse golden triangle}
+\MakePenroseTile{golden gnomon}
+\MakePenroseTile{reverse golden gnomon}
+\MakePenroseTile{kite}
+\MakePenroseTile{dart}
+\end{tikzpicture}
+\end{justexample}
+
+\begin{tikzpicture}
+\path[save Penrose path=a] (0,0) to[out=-30,in=100] (1,0);
+\path[save Penrose path=b] (0,0) to[out=0,in=140] (1,0);
+\path[save Penrose path=c] (0,0) to[out=-40,in=140] (1,0);
+\MakePenroseTile{thin rhombus}
+\MakePenroseTile{thick rhombus}
+\MakePenroseTile{golden triangle}
+\MakePenroseTile{reverse golden triangle}
+\MakePenroseTile{golden gnomon}
+\MakePenroseTile{reverse golden gnomon}
+\MakePenroseTile{kite}
+\MakePenroseTile{dart}
+\end{tikzpicture}
+
+
+Styling the first tile.
+Note that as the pattern is formed by repeating two different initial seeds \(5\) times, there are \(10\) ``first tiles'' in each overall pattern.
+
+\begin{example}
+\begin{tikzpicture}[
+ every Penrose tile/.style={draw},
+ Penrose tile 1/.style={fill=yellow},
+]
+\foreach \tp/\pos in {rhombus/0cm,rtriangle/2.5cm,kite/5cm,ktriangle/7.5cm}
+{
+\begin{scope}[xshift=\pos]
+\foreach[evaluate=\k as \mk using {\k+Mod(\k,2)},evaluate=\k as \ax using {Mod(\k,2) == 0 ? "T" : "t"}] \k in {0,...,9} {
+ \begin{scope}[rotate=\mk*36]
+ \PenroseDecomposition{\tp}{1}{\ax}
+ \end{scope}
+}
+\end{scope}
+}
+\end{tikzpicture}
+\end{example}
+
+A more detailed decomposition, with more and more tinting applied to teach tile.
+Roughly half of the counted tiles are rendered, and the ordering in which they are rendered is not at first an obvious one (though it is in general from ``outside in'').
+
+Note that the key \Verb+tint fill colour+ is not a TikZ native.
+It is defined as:
+
+\begin{verbatim}
+\makeatletter
+\tikzset{
+ tint fill colour/.code={%
+ \edef\@temp{%
+ \def\noexpand\tikz@fillcolor{\tikz@fillcolor!#1}%
+ \noexpand\tikz@addoption{%
+ \noexpand\pgfsetfillcolor{\tikz@fillcolor!#1}%
+ }%
+ }%
+ \@temp
+ }
+}
+\makeatother
+\end{verbatim}
+
+\begin{example}
+\begin{tikzpicture}[
+ every Penrose tile/.style={draw},
+ every kite/.style={fill=reverseGoldenTriangle},
+ every dart/.style={fill=goldenTriangle},
+ Penrose tile/.code 2 args={
+ \pgfmathsetmacro\tint{100*(1 - 1.5*#1/#2))}
+ \pgfkeysalso{tint fill colour=\tint}
+ }
+]
+\foreach[evaluate=\k as \mk using {\k+Mod(\k,2)},evaluate=\k as \ax using {Mod(\k,2) == 0 ? "T" : "t"}] \k in {0,...,9} {
+ \begin{scope}[rotate=\mk*36]
+ \PenroseDecomposition[Penrose step=5cm]{kite}{4}{\ax}
+ \end{scope}
+}
+\end{tikzpicture}
+\end{example}
+
+An example with ``manual placement''.
+
+\begin{example}
+\begin{tikzpicture}[
+ every Penrose pic/.style={
+ draw=black,
+ ultra thick,
+ },
+ every kite/.style={
+ fill=kite,
+ },
+ every dart/.style={
+ fill=dart,
+ },
+ every circle arc/.style={
+ draw=circleArc
+ },
+ every long arc/.style={
+ draw=longArc
+ }
+]
+\pic[dart,name=a0];
+\foreach[evaluate=\k as \kmo using int(\k-1)] \k in {1,...,4} {
+ \pic[dart,name=a\k,align with={a\kmo} along a];
+}
+\foreach \k in {0,...,4} {
+ \foreach \l/\e/\ee in {0/c/a,1/C/A} {
+ \pic[kite,name=b\l\k,align with={a\k} along \e];
+ \pic[dart,name=c\l\k,align with={b\l\k} along \ee];
+ \pic[kite,name=d\l\k,align with={c\l\k} along \e];
+ }
+ \pic[kite,name=e\k,align with={c0\k} along C];
+ \pic[dart,name=f\k,align with={c0\k} along a];
+ \foreach \e in {c,C} {
+ \pic[kite,name=g\k,align with={f\k} along \e];
+ }
+}
+\end{tikzpicture}
+\end{example}
+
+
+The decomposition rules for the Lindenmayer system can be illustrated by drawing each tile together with the result of one decomposition superimposed on top.
+
+\begin{example}
+\foreach \ax in {T,t,G,g} {
+
+\begin{tikzpicture}
+\foreach \tp/\pos in {rhombus/0cm,rtriangle/2cm,kite/4cm,ktriangle/6cm}
+{
+\begin{scope}[xshift=\pos]
+ \PenroseDecomposition[every path/.style={draw=red,ultra thick}]{\tp}{0}{\ax}
+ \PenroseDecomposition[every path/.style={fill=gray!50,fill opacity=.5,draw=black}]{\tp}{1}{\ax}
+\end{scope}
+}
+\end{tikzpicture}
+
+}
+\end{example}
+
+The tiles can make interesting forms by themselves.
+
+\begin{example}
+\begin{tikzpicture}[
+ scale=2,
+ every Penrose pic/.style={
+ transform shape,
+ },
+ every golden triangle/.style={
+ draw=black,
+ ultra thick,
+ fill=goldenTriangle,
+ },
+ every reverse golden triangle/.style={
+ draw=black,
+ ultra thick,
+ fill=reverseGoldenTriangle,
+ },
+ every golden gnomon/.style={
+ draw=black,
+ ultra thick,
+ fill=goldenGnomon,
+ },
+ every reverse golden gnomon/.style={
+ draw=black,
+ ultra thick,
+ fill=reverseGoldenGnomon,
+ },
+]
+\pic[golden triangle,name=a];
+\pic[reverse golden triangle,align with=a along a];
+\pic[reverse golden triangle,align with=a along b];
+\pic[reverse golden triangle,align with=a along c];
+\begin{scope}[xshift=2cm]
+\pic[reverse golden triangle,name=a];
+\pic[golden triangle,align with=a along A];
+\pic[golden triangle,align with=a along B];
+\pic[golden triangle,align with=a along C];
+\end{scope}
+\begin{scope}[yshift=-3cm]
+\pic[golden gnomon,name=a];
+\pic[reverse golden gnomon,align with=a along C];
+\pic[reverse golden gnomon,align with=a along b];
+\pic[reverse golden gnomon,align with=a along A];
+\begin{scope}[xshift=2cm]
+\pic[reverse golden gnomon,name=a];
+\pic[golden gnomon,align with=a along c];
+\pic[golden gnomon,align with=a along B];
+\pic[golden gnomon,align with=a along a];
+\end{scope}
+\end{scope}
+\end{tikzpicture}
+\end{example}
+
+\begin{example}
+\begin{tikzpicture}[
+ every rhombus/.style={
+ draw=black,
+ ultra thick,
+ },
+ every thin rhombus/.style={
+ every rhombus/.try,
+ fill=thinRhombus,
+ },
+ every thick rhombus/.style={
+ every rhombus/.try,
+ fill=thickRhombus,
+ },
+ every circle arc/.style={
+ draw=circleArc
+ },
+ every long arc/.style={
+ draw=longArc
+ }
+]
+\pic[rotate=18,thick rhombus,name=a0];
+\foreach[evaluate=\k as \kmo using int(\k-1)] \k in {1,...,4}
+{
+ \pic[thick rhombus,name=a\k,align with={a\kmo} along A];
+}
+\foreach \k in {0,...,4}
+{
+ \pic[thin rhombus,name=b\k,align with={a\k} along B];
+ \pic[thick rhombus,name=c\k,align with={b\k} along A];
+ \pic[thick rhombus,name=d\k,align with={b\k} along a];
+ \pic[thick rhombus,name=e\k,align with={c\k} along A];
+ \foreach \l/\a in {{0/b},{1/B}}
+ \pic[thin rhombus,name=f\k\l,align with={e\k} along \a];
+}
+\pic[thin rhombus,name=g0,align with={f10} along a];
+\pic[thin rhombus,name=g1,align with={f21} along A];
+\foreach \l/\a in {{0/a},{1/A}}
+ \pic[thick rhombus,name=h\l,align with={g\l} along \a];
+\pic[thick rhombus,name=i,align with=g0 along B];
+\foreach \l/\a in {{0/a},{1/A}}
+ \pic[thick rhombus,name=j\l,align with=i along \a];
+\end{tikzpicture}
+\end{example}
+
+Lastly, here's an example that generates full page patterns.
+
+\begin{justexample}
+\foreach \tp/\lvl in {rhombus/5,rhombus/6,kite/5,kite/6}
+{
+\begin{tikzpicture}[
+ every Penrose tile/.style={draw},
+ remember picture,
+ overlay,
+ scale=20
+]
+\coordinate (a) at (current page.center);
+\begin{scope}[shift={(a)}]
+\foreach[evaluate=\k as \mk using {\k+Mod(\k,2)},evaluate=\k as \ax using {Mod(\k,2) == 0 ? "T" : "t"}] \k in {0,...,9} {
+ \begin{scope}[rotate=\mk*36]
+ \PenroseDecomposition{\tp}{\lvl}{\ax}
+ \end{scope}
+}
+\end{scope}
+\end{tikzpicture}
+\newpage
+}
+\end{justexample}
+
+\begin{tikzpicture}
+\path[save Penrose path=a] (0,0) -- (1,0);
+\path[save Penrose path=b] (0,0) -- (1,0);
+\path[save Penrose path=c] (0,0) -- (1,0);
+\MakePenroseTile{thin rhombus}
+\MakePenroseTile{thick rhombus}
+\MakePenroseTile{golden triangle}
+\MakePenroseTile{reverse golden triangle}
+\MakePenroseTile{golden gnomon}
+\MakePenroseTile{reverse golden gnomon}
+\MakePenroseTile{kite}
+\MakePenroseTile{dart}
+\end{tikzpicture}
+
+\newpage
+
+\foreach \tp/\lvl in {rhombus/5,rhombus/6,kite/5,kite/6}
+{
+\begin{tikzpicture}[
+ every Penrose tile/.style={draw},
+ remember picture,
+ overlay,
+ scale=20
+]
+\coordinate (a) at (current page.center);
+\begin{scope}[shift={(a)}]
+\foreach[evaluate=\k as \mk using {\k+Mod(\k,2)},evaluate=\k as \ax using {Mod(\k,2) == 0 ? "T" : "t"}] \k in {0,...,9} {
+ \begin{scope}[rotate=\mk*36]
+ \PenroseDecomposition{\tp}{\lvl}{\ax}
+ \end{scope}
+}
+\end{scope}
+\end{tikzpicture}
+\newpage
+}
+
+
+%% \foreach \lvl in {5,6}
+%% {
+%% \begin{tikzpicture}[
+%% every Penrose tile/.style={draw},
+%% remember picture,
+%% overlay,
+%% scale=180
+%% ]
+%% \coordinate (a) at (current page.center);
+%% \PenroseDecomposition{pentagon}{\lvl}{D}
+%% \end{tikzpicture}
+%% \newpage
+%% }
+
+
+\end{document}
+
+% Local Variables:
+% tex-output-type: "pdf18"
+% End:
diff --git a/graphics/pgf/contrib/penrose/penrose_code.dtx b/graphics/pgf/contrib/penrose/penrose_code.dtx
new file mode 100644
index 0000000000..be7030312f
--- /dev/null
+++ b/graphics/pgf/contrib/penrose/penrose_code.dtx
@@ -0,0 +1,2724 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+penrose --- TikZ library for producing Penrose tilings
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package is for the creation of Penrose tilings using either kite-and-dart or rhombuses, and either by manual placement or automatic generation.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input l3docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+penrose --- TikZ library for producing Penrose tilings
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2014-2018 by Andrew Stacey <loopspace@mathforge.org>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Andrew Stacey.
+
+This work consists of the files penrose3.dtx
+ penrose.tex
+and the derived files penrose.ins
+ penrose3.pdf
+ penrose.pdf
+ tikzlibrarypenrose.code.tex
+ README
+
+\endpostamble
+\usedir{tex/latex/penrose}
+\generate{
+ \file{tikzlibrarypenrose.code.tex}{\from{\jobname.dtx}{library}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/penrose}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/penrose}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{tikz}
+\usepackage{trace}
+\usetikzlibrary{penrose}
+%\traceoff
+%\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}[gobble=2]{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+% \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{2944}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{1.0}{2014/05/07}{Converted to DTX file}
+%
+% \DoNotIndex
+% {
+% \begingroup,
+% \catcode,
+% \active,
+% \csname,
+% \endcsname,
+% }%
+%
+% \providecommand*{\url}{\texttt}
+% \title{The \textsf{Penrose} package}
+% \author{Andrew Stacey\texorpdfstring{\\ \url{loopspace@mathforge.org}}{}}
+% \date{1.0 from 2018/07/10}
+%
+%
+% \maketitle
+%
+%
+% \section{Introduction}
+%
+% This is a TikZ library for drawing Penrose tiles (kite/dart, rhombus, and pentagon versions).
+% It provides two methods of drawing: one in which an automatic pattern is built, and one where the tiles can be placed ``by hand''.
+% The tiles can be shaped and (hopefully!) still fit together.
+% For user documentation, see the \Verb+penrose.pdf+ file.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*library>
+% \fi
+% \subsection{Initialisation}
+%
+%
+% \begin{macrocode}
+%<@@=penrose>
+% \end{macrocode}
+% We use the \Verb+spath3+ library for manipulating the paths that will make up the tiles.
+%
+% \begin{macrocode}
+\RequirePackage{spath3}
+% \end{macrocode}
+% Now we move in to the realm of \LaTeX3.
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% Start with some basic paths (lines) for the sides of the tiles so that we know that we have well-defined tiles at the outset.
+%
+% \begin{macrocode}
+\MakeSPath{Penrose path a}
+ {
+ \pgfsyssoftpath@movetotoken{0pt}{0pt}
+ \pgfsyssoftpath@linetotoken{1pt}{0pt}
+ }
+\SPathPrepare{Penrose path a}
+\CloneSPath {Penrose path a}{Penrose path b}
+\CloneSPath {Penrose path a}{Penrose path c}
+\CloneSPath {Penrose path a}{Penrose path d}
+\CloneSPath {Penrose path a}{Penrose path A}
+\CloneSPath {Penrose path a}{Penrose path B}
+\CloneSPath {Penrose path a}{Penrose path C}
+\CloneSPath {Penrose path a}{Penrose path D}
+% \end{macrocode}
+%
+% \begin{variable}{\l__penrose_tmpa_fp, \l__penrose_tmpb_fp, \l__penrose_tmpc_fp, \l__penrose_tmpa_tl, \l__penrose_tmpb_tl, \l__penrose_tmpc_tl}
+% We need a few temporary variables to hold intermediate calculations.
+%
+% \begin{macrocode}
+\fp_new:N \l__penrose_tmpa_fp
+\fp_new:N \l__penrose_tmpb_fp
+\fp_new:N \l__penrose_tmpc_fp
+\tl_new:N \l__penrose_tmpa_tl
+\tl_new:N \l__penrose_tmpb_tl
+\tl_new:N \l__penrose_tmpc_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \subsection{Creating the Tiles}
+%
+% \begin{macro}[internal]{\penrose_normalise_path:n}
+% When defining the path for a side, we normalise so that it starts at the origin and ends at \Verb+(1pt,0pt)+.
+% \begin{macrocode}
+\cs_new_nopar:Npn \penrose_normalise_path:n #1
+{
+% \end{macrocode}
+% Get the initial point of the path and convert to floating point.
+% \begin{macrocode}
+ \spath_get:nnN {#1} {initial point} \l__penrose_tmpa_tl
+ \fp_set:Nn \l__penrose_tmpa_fp {\tl_head:N \l__penrose_tmpa_tl}
+ \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
+ \fp_set:Nn \l__penrose_tmpb_fp {\tl_head:N \l__penrose_tmpa_tl}
+% \end{macrocode}
+% Get the final point of the path, and compute the difference of the final and initial points.
+%
+% The resulting numbers, say \(a\) and \(b\), will be put into a matrix to rotate and scale the path.
+% The formula for the matrix is:
+%^^A
+% \[
+% \frac{1}{a^2 + b^2}
+% \begin{bmatrix} a & b \\ -b & a \end{bmatrix}
+% \]
+%
+% \begin{macrocode}
+ \spath_get:nnN {#1} {final point} \l__penrose_tmpa_tl
+ \fp_set:Nn \l__penrose_tmpa_fp
+ {\tl_head:N \l__penrose_tmpa_tl - \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
+ \fp_set:Nn \l__penrose_tmpb_fp
+ {\tl_head:N \l__penrose_tmpa_tl - \l__penrose_tmpb_fp}
+% \end{macrocode}
+% Now compute the square of the length of the path for scaling.
+% \begin{macrocode}
+ \fp_set:Nn \l__penrose_tmpc_fp
+ {\l__penrose_tmpa_fp^2 + \l__penrose_tmpb_fp^2}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_tmpa_fp/\l__penrose_tmpc_fp}
+ \fp_set:Nn \l__penrose_tmpb_fp {\l__penrose_tmpb_fp/\l__penrose_tmpc_fp}
+ \fp_set:Nn \l__penrose_tmpc_fp {-\l__penrose_tmpb_fp}
+% \end{macrocode}
+% Now construct the matrix.
+% \begin{macrocode}
+ \tl_set:Nx \l__penrose_tmpb_tl
+ {
+ {\fp_use:N \l__penrose_tmpa_fp}
+ {\fp_use:N \l__penrose_tmpb_fp}
+ {\fp_use:N \l__penrose_tmpc_fp}
+ {\fp_use:N \l__penrose_tmpa_fp}
+ }
+% \end{macrocode}
+% Get the initial point back again for the translation part.
+% \begin{macrocode}
+ \spath_get:nnN {#1} {initial point} \l__penrose_tmpa_tl
+% \end{macrocode}
+% But we need to premultiply by the matrix because of how the transformations are applied.
+% \begin{macrocode}
+ \fp_set:Nn \l__penrose_tmpa_fp
+ {
+ (-1) * \l__penrose_tmpa_fp * \tl_head:N \l__penrose_tmpa_tl
+ + (-1) * \l__penrose_tmpb_fp * \tl_tail:N \l__penrose_tmpa_tl
+ }
+ \fp_set:Nn \l__penrose_tmpb_fp
+ {
+ (-1) * \l__penrose_tmpa_fp * \tl_tail:N \l__penrose_tmpa_tl
+ + \l__penrose_tmpb_fp * \tl_head:N \l__penrose_tmpa_tl
+ }
+% \end{macrocode}
+% Finally, we apply the transformation to the path.
+% \begin{macrocode}
+ \tl_put_right:Nx \l__penrose_tmpb_tl {
+ {\fp_to_dim:N \l__penrose_tmpa_fp}
+ {\fp_to_dim:N \l__penrose_tmpb_fp}
+ }
+ \spath_transform:nV {#1} \l__penrose_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\SetPenrosePath}
+% This sets the path corresponding to a particular side to the current path, and normalises it.
+% \begin{macrocode}
+\NewDocumentCommand \SetPenrosePath { m }
+{
+ \pgfsyssoftpath@getcurrentpath\l__penrose_tmpa_tl
+ \spath_clear_new:n {Penrose path #1}
+ \spath_put:nnV {Penrose path #1} {path} \l__penrose_tmpa_tl
+ \penrose_normalise_path:n {Penrose path #1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\tikz_scan_point:n}
+% This is a wrapper around \Verb+\tikz@scan@one@point+ to make it easier to use with \LaTeX3 variables.
+% \begin{macrocode}
+\cs_new_nopar:Npn \tikz_scan_point:n #1
+{
+ \tikz@scan@one@point\pgfutil@firstofone#1\relax
+}
+\cs_generate_variant:Nn \tikz_scan_point:n {V}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\penrose_make_tile:nnn}
+% This builds the tile path from its pieces.
+% The arguments are the name of the tile, the descriptions of the sides, and a token list of the coordinates.
+% \begin{macrocode}
+\cs_new_nopar:Npn \penrose_make_tile:nnn #1#2#3
+{
+% \end{macrocode}
+% Get the first coordinate and initialise the path with a move to this point.
+% \begin{macrocode}
+ \tl_set:Nn \l__penrose_tmpa_tl {#3}
+ \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
+ \tl_set:Nn \l__penrose_tmpa_tl {\pgfsyssoftpath@movetotoken}
+ \tikz_scan_point:V \l__penrose_tmpb_tl
+ \tl_put_right:Nx \l__penrose_tmpa_tl
+ {
+ {\dim_use:N \pgf@x}{\dim_use:N \pgf@y}
+ }
+ \spath_clear_new:n {Penrose path tile #1}
+ \spath_put:nnV {Penrose path tile #1} {path} \l__penrose_tmpa_tl
+% \end{macrocode}
+% Now we have our path initialised, we can start appending the side paths according to the specification in the second argument.
+%
+% We append the initial coordinate to the end of the list to make a closed cycle.
+% \begin{macrocode}
+ \tl_set:Nn \l__penrose_tmpa_tl {#3}
+ \tl_put_right:Nx \l__penrose_tmpa_tl {{\tl_head:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+% Now we walk through the description of the sides, adding the specified paths to our tile path.
+% \begin{macrocode}
+ \tl_map_inline:nn {#2} {
+% \end{macrocode}
+% Clone the path for this side.
+% \begin{macrocode}
+ \spath_clone:nn {Penrose path ##1} {Penrose path tmpa}
+% \end{macrocode}
+% Strip off the next coordinate, and convert it to a point.
+% \begin{macrocode}
+ \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
+ \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
+ \tikz_scan_point:V \l__penrose_tmpb_tl
+% \end{macrocode}
+% Store the resulting coordinate.
+% \begin{macrocode}
+ \fp_set:Nn \l__penrose_tmpa_fp { \pgf@x }
+ \fp_set:Nn \l__penrose_tmpb_fp { \pgf@y }
+% \end{macrocode}
+% Now get the next coordinate.
+% \begin{macrocode}
+ \tl_set:Nx \l__penrose_tmpb_tl {\tl_head:N \l__penrose_tmpa_tl}
+ \tikz_scan_point:V \l__penrose_tmpb_tl
+% \end{macrocode}
+% We want the difference between the two coordinates.
+% \begin{macrocode}
+ \fp_set:Nn \l__penrose_tmpa_fp {\pgf@x - \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpb_fp {\pgf@y - \l__penrose_tmpb_fp}
+% \end{macrocode}
+% This is converted into a transformation matrix.
+% \begin{macrocode}
+ \fp_set:Nn \l__penrose_tmpc_fp {-\l__penrose_tmpb_fp}
+ \tl_set:Nx \l__penrose_tmpb_tl
+ {
+ {\fp_use:N \l__penrose_tmpa_fp}
+ {\fp_use:N \l__penrose_tmpc_fp}
+ {\fp_use:N \l__penrose_tmpb_fp}
+ {\fp_use:N \l__penrose_tmpa_fp}
+ {0}
+ {0}
+ }
+% \end{macrocode}
+% The transformation is applied to the cloned path.
+% \begin{macrocode}
+ \spath_transform:nV {Penrose path tmpa} \l__penrose_tmpb_tl
+% \end{macrocode}
+% And this is welded to the tile path.
+% \begin{macrocode}
+ \spath_weld:nn {Penrose path tile #1} {Penrose path tmpa}
+ }
+% \end{macrocode}
+% At the end we close the path.
+% \begin{macrocode}
+ \spath_close_path:n {Penrose path tile #1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\penrose_make_tile:nn}
+% A wrapper around the above which allows us to specify the second two arguments as two items in a token list.
+% \begin{macrocode}
+\cs_new_nopar:Npn \penrose_make_tile:nn #1#2
+{
+ \penrose_make_tile:nnn {#1} #2
+}
+\cs_generate_variant:Nn \penrose_make_tile:nn {nV}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Specifying the Tiles}
+%
+% The tile specifications are contained in a \Verb+prop+.
+% \begin{macrocode}
+\prop_new:N \g__penrose_tiles_prop
+% \end{macrocode}
+%
+% \begin{macro}[internal]{\tl_add_coordinate:Nnn}
+% Process a coordinate through \Verb+fp+ and adds it to a token list.
+% \begin{macrocode}
+\cs_new_nopar:Npn \tl_add_coordinate:Nnn #1#2#3 {
+ \fp_set:Nn \l__penrose_tmpa_fp{#2}
+ \fp_set:Nn \l__penrose_tmpb_fp{#3}
+ \tl_put_right:Nx #1
+ {
+ {(\fp_use:N \l__penrose_tmpa_fp, \fp_use:N \l__penrose_tmpb_fp)}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Now we specify the tiles.
+% The specification is a clockwise list of the vertices together with the labels of the corresponding sides.
+% There are three basic paths, \Verb+a+, \Verb+b+, \Verb+c+, and their complements (which are capitalised).
+%
+% \begin{itemize}
+% \item Thin Rhombus.
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(18)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
+
+\prop_gput:Nnx \g__penrose_tiles_prop {thin~ rhombus}
+{{a A B b} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Thick Rhombus.
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}
+
+\prop_gput:Nnx \g__penrose_tiles_prop {thick~ rhombus}
+{{B a A b} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Dart.
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+{2*sind(18)*cosd(108)}{2*sind(18)*sind(108)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*sind(18)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+{2*sind(18)*cosd(108)}{-2*sind(18)*sind(108)}
+
+\prop_gput:Nnx \g__penrose_tiles_prop {dart}
+{{c a A C} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Kite.
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}
+
+\prop_gput:Nnx \g__penrose_tiles_prop {kite}
+{{a c C A} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Golden Triangle.
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
+
+\prop_gput:Nnx \g__penrose_tiles_prop {golden~ triangle}
+{{a c b} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Reverse Golden Triangle.
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
+
+\prop_gput:Nnx \g__penrose_tiles_prop {reverse~ golden~ triangle}
+{{B C A} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Golden Gnomon
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{sind(36)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
+
+\prop_gput:Nnx \g__penrose_tiles_prop {golden~ gnomon}
+{{C b A} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Reverse Golden Gnomon
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(36)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(36)}{-sind(36)}
+\prop_gput:Nnx \g__penrose_tiles_prop {reverse~ golden~ gnomon}
+{{a B c} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Primary Pentagon (pentagon 5)
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+{1+cosd(72)+cosd(144)}{sind(72)+sind(144)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1+cosd(72)}{sind(72)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
+\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 5}
+{{a a a a a} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Secondary Pentagon (pentagon 3)
+% \begin{macrocode}
+\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 3}
+{{A b a a b} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Tertiary Pentagon (pentagon 2)
+% \begin{macrocode}
+\prop_gput:Nnx \g__penrose_tiles_prop {pentagon~ 2}
+{{d A c c A} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Pentagram
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1-cosd(36)}{-sind(36)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+{1-cosd(36)-cosd(108)}{-sind(36)-sind(108)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{-sind(108)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+{-1+3*cosd(108)+cosd(36)}{-sind(36)-sind(108)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+{-1+2*cosd(108)+cosd(36)}{-sind(36)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {-1+2*cosd(108)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(108)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\prop_gput:Nnx \g__penrose_tiles_prop {pentagram}
+{{C C C C C C C C C C} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Boat
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {-1+2*cosd(108)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(108)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(108)}{sind(108)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {1-cosd(36)}{-sind(36)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl
+{-1+2*cosd(108)+cosd(36)}{-sind(36)}
+\prop_gput:Nnx \g__penrose_tiles_prop {boat}
+{{C C C C B D B} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \item Diamond.
+% \begin{macrocode}
+\tl_clear:N \l__penrose_tmpa_tl
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {0}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{sind(18)}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {2*cosd(18)}{0}
+\tl_add_coordinate:Nnn \l__penrose_tmpa_tl {cosd(18)}{-sind(18)}
+\prop_gput:Nnx \g__penrose_tiles_prop {diamond}
+{{D B B D} {\tl_use:N \l__penrose_tmpa_tl}}
+% \end{macrocode}
+%
+% \end{itemize}
+%
+% \begin{macro}[internal]{\MakePenroseTile}
+% This is the user wrapper around the tile creation macros.
+% \begin{macrocode}
+\NewDocumentCommand \MakePenroseTile {m}
+{
+ \prop_get:NnN \g__penrose_tiles_prop {#1} \l__penrose_tmpa_tl
+ \penrose_make_tile:nV {#1} \l__penrose_tmpa_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\UsePenroseTile}
+% This is the command that actually places a tile on the page.
+% The first argument is optional and is for styling.
+% \begin{macrocode}
+\NewDocumentCommand \UsePenroseTile {O{} m}
+{
+% \end{macrocode}
+% We need to transform the tile to correspond to the current transformation matrix.
+% To ensure that we only transform the current tile, we clone it first.
+% \begin{macrocode}
+ \spath_clone:nn {Penrose path tile #2} {Penrose path tmpa}
+% \end{macrocode}
+% The transformation matrix returned by PGF appears to be transposed from what it should be.
+% (This needs a little more investigation, it might be that I've implemented the multiplication incorrectly here.)
+% \begin{macrocode}
+ \pgfgettransform \l__penrose_tmpa_tl
+ \tl_clear:N \l__penrose_tmpb_tl
+ \tl_set:Nx \l__penrose_tmpb_tl {{\tl_head:N \l__penrose_tmpa_tl}}
+ \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
+ \tl_put_right:Nx \l__penrose_tmpb_tl
+ {
+ {\tl_item:Nn \l__penrose_tmpa_tl {2}}
+ }
+ \tl_put_right:Nx \l__penrose_tmpb_tl
+ {
+ {\tl_item:Nn \l__penrose_tmpa_tl {1}}
+ }
+ \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
+ \tl_set:Nx \l__penrose_tmpa_tl {\tl_tail:N \l__penrose_tmpa_tl}
+ \tl_put_right:NV \l__penrose_tmpb_tl \l__penrose_tmpa_tl
+% \end{macrocode}
+% Apply the transformation, protocol the path, and render it.
+% \begin{macrocode}
+ \spath_transform:nV {Penrose path tmpa} \l__penrose_tmpb_tl
+ \spath_protocol_path:n {Penrose path tmpa}
+ \spath_tikz_path:nn {#1}{Penrose path tmpa}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% This is a style for a user to take a path and make it into the path for one of the sides.
+% It needs to store both that side and the reverse.
+% \begin{macrocode}
+\tikzset{
+ save~ Penrose~ path/.code={
+ \tikz@addmode{
+% \end{macrocode}
+% Get the current path.
+% \begin{macrocode}
+ \pgfsyssoftpath@getcurrentpath\l__penrose_tmpa_tl
+% \end{macrocode}
+% Clear the receiving path, and store the current path in it.
+% \begin{macrocode}
+ \spath_clear_new:n {Penrose path #1}
+ \spath_put:nnV {Penrose path #1} {path} \l__penrose_tmpa_tl
+% \end{macrocode}
+% Normalise the path.
+% \begin{macrocode}
+ \penrose_normalise_path:n {Penrose path #1}
+% \end{macrocode}
+% Now create the reverse path.
+% The name is the upper case version.
+% \begin{macrocode}
+ \tex_uppercase:D {\tl_set:Nx \l__penrose_tmpa_tl {#1}}
+% \end{macrocode}
+% Clone the path.
+% \begin{macrocode}
+ \spath_clone:nn {Penrose path #1}
+ {Penrose path \tl_use:N \l__penrose_tmpa_tl }
+% \end{macrocode}
+% Reverse it.
+% \begin{macrocode}
+ \spath_reverse:n {Penrose path \tl_use:N \l__penrose_tmpa_tl}
+% \end{macrocode}
+% Swap the start and end.
+% \begin{macrocode}
+ \spath_transform:nnnnnnn {Penrose path \tl_use:N \l__penrose_tmpa_tl}
+ {-1} {0} {0} {-1} {1} {0}
+ }
+ },
+ expand~ key/.code={
+ \exp_args:NV \pgfkeysalso #1
+ }
+}
+% \end{macrocode}
+%
+% Create the basic tile shapes.
+% \begin{macrocode}
+\MakePenroseTile {thin~ rhombus}
+\MakePenroseTile {thick~ rhombus}
+\MakePenroseTile {dart}
+\MakePenroseTile {kite}
+\MakePenroseTile {golden~ triangle}
+\MakePenroseTile {reverse~ golden~ triangle}
+\MakePenroseTile {golden~ gnomon}
+\MakePenroseTile {reverse~ golden~ gnomon}
+\MakePenroseTile {pentagon~ 5}
+\MakePenroseTile {pentagon~ 3}
+\MakePenroseTile {pentagon~ 2}
+\MakePenroseTile {pentagram}
+\MakePenroseTile {boat}
+\MakePenroseTile {diamond}
+% \end{macrocode}
+%
+% \subsection{Lindenmayer System}
+%
+% This is an implementation of the Lindenmayer System description of Penrose tilings as a way of generating tilings from a specific starting seed.
+%
+% The implementation uses \Verb+prop+s to store \emph{rules} and \emph{actions}.
+% The rules are used to expand the starting seed to a certain level, after which the actions are carried out.
+% The syntax is based on the PGF library, but as we're already using \LaTeX3 it is reimplemented in that.
+%
+% These are the rules for generating rhombus tilings.
+% \begin{macrocode}
+\prop_new:N \g__penrose_rhombus_lms_rule_prop
+\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {T} {[f*sT][f>g]}
+\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {t} {[f_st][f>G]}
+\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {G} {[f+sG][sf>g][sf*sT]}
+\prop_put:Nnn \g__penrose_rhombus_lms_rule_prop {g} {[f-sg][sf>G][sf_st]}
+% \end{macrocode}
+%
+% These are the rules for generating kite and dart tilings.
+% \begin{macrocode}
+\prop_new:N \g__penrose_kite_lms_rule_prop
+\prop_put:Nnn \g__penrose_kite_lms_rule_prop {T} {[f*sT][f>st][+sg]}
+\prop_put:Nnn \g__penrose_kite_lms_rule_prop {t} {[f_st][f>sT][-sG]}
+\prop_put:Nnn \g__penrose_kite_lms_rule_prop {G} {[f*+sG][sT]}
+\prop_put:Nnn \g__penrose_kite_lms_rule_prop {g} {[f-_sg][st]}
+% \end{macrocode}
+%
+% These are the rules for generating pentagon tilings.
+% \begin{macrocode}
+\prop_new:N \g__penrose_pentagon_lms_rule_prop
+\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {P}
+{[s>P][1sF+Q][1+sF+Q][1*sF+Q][1-sF+Q][1_sF+Q]} % pentagon 5
+\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {Q}
+{[s>P][1+sFR][1*sF*R][1-sF+Q][1_sF+Q][1sF+Q][->fsD]} % pentagon 3
+\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {R}
+{[s>P][1-sF+Q][1+sF*R][1*sFR][1_sF*R][1sFR][_>fsD][>fsD]} % pentagon 2
+\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {G}
+{
+ [s>G]
+ [se[>d+R][e1B]]
+ [+se[>d+R][e1B]]
+ [-se[>d+R][e1B]]
+ [*se[>d+R][e1B]]
+ [_se[>d+R][e1B]]
+} % pentagram
+\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {B}
+{
+ [s>G]
+ [se[>d+R][e1B]]
+ [+se[>d+R][e1B]]
+ [-se[>d+R][e1B]]
+} % boat
+\prop_put:Nnn \g__penrose_pentagon_lms_rule_prop {D}
+{[s>d+R][s>eG][se1B]} % diamond
+% \end{macrocode}
+%
+% Each of the standard tilings can also be drawn using triangles using the same rules.
+% \begin{macrocode}
+\prop_set_eq:NN \g__penrose_rtriangle_lms_rule_prop
+\g__penrose_rhombus_lms_rule_prop
+\prop_set_eq:NN \g__penrose_ktriangle_lms_rule_prop
+\g__penrose_kite_lms_rule_prop
+% \end{macrocode}
+%
+% These hold the various actions.
+% \begin{macrocode}
+\prop_new:N \g__penrose_default_lms_action_prop
+\prop_new:N \g__penrose_rhombus_lms_action_prop
+\prop_new:N \g__penrose_kite_lms_action_prop
+\prop_new:N \g__penrose_rtriangle_lms_action_prop
+\prop_new:N \g__penrose_ktriangle_lms_action_prop
+\prop_new:N \g__penrose_pentagon_lms_action_prop
+% \end{macrocode}
+%
+% We need some parameters.
+% \begin{macrocode}
+\dim_new:N \l__penrose_step_dim
+\dim_set:Nn \l__penrose_step_dim {1cm}
+% \end{macrocode}
+%
+% These are the defaults, which will be used in all the rule sets.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_default_lms_action_prop {[} {\group_begin:}
+\prop_put:Nnn \g__penrose_default_lms_action_prop {]} {\group_end:}
+\prop_put:Nnn \g__penrose_default_lms_action_prop {f}
+{\pgftransformxshift{\l__penrose_step_dim}}
+\prop_put:Nnn \g__penrose_default_lms_action_prop {s} {
+ \fp_set:Nn \l__penrose_tmpa_fp { 2 * sind(18) * \l__penrose_step_dim }
+ \dim_set:Nn \l__penrose_step_dim {\fp_to_dim:N \l__penrose_tmpa_fp}
+}
+% \end{macrocode}
+%
+% The rhombus rules need a variety of turns.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {+}
+{\pgftransformrotate{144}}
+\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {*}
+{\pgftransformrotate{108}}
+\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {-}
+{\pgftransformrotate{216}}
+\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {_}
+{\pgftransformrotate{252}}
+\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {>}
+{\pgftransformrotate{180}}
+% \end{macrocode}
+%
+% Up to now, the actions for the rhombus and its triangle replacement are the same.
+% \begin{macrocode}
+\prop_set_eq:NN \g__penrose_rtriangle_lms_action_prop
+\g__penrose_rhombus_lms_action_prop
+% \end{macrocode}
+%
+% Now we do the actions that actually draw something.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {T} {
+ \group_begin:
+% \end{macrocode}
+% As we go through, we keep track of how many tiles we've drawn.
+% \begin{macrocode}
+ \int_gincr:N \l__penrose_tile_int
+% \end{macrocode}
+% Set up the position, size, and angle correctly.
+% \begin{macrocode}
+ \pgftransformrotate{198}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*2*cosd(18)}
+ \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+% \end{macrocode}
+% Now we draw the thin rhombus, applying every style we can possibly imagine.
+% The \Verb+Penrose tile+ style gets the current tile and total tile numbers passed to it.
+% \begin{macrocode}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ thin~ rhombus/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{thin~rhombus}
+ \group_end:
+}
+% \end{macrocode}
+%
+% Same for the thick rhombus.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_rhombus_lms_action_prop {G} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ thick~ rhombus/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{thick~rhombus}
+ \group_end:
+}
+% \end{macrocode}
+%
+% Now we do the same for the kite and dart tiling.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_kite_lms_action_prop {+} {\pgftransformrotate{36}}
+\prop_put:Nnn \g__penrose_kite_lms_action_prop {*} {\pgftransformrotate{108}}
+\prop_put:Nnn \g__penrose_kite_lms_action_prop {-} {\pgftransformrotate{-36}}
+\prop_put:Nnn \g__penrose_kite_lms_action_prop {_}
+{\pgftransformrotate{-108}}
+\prop_put:Nnn \g__penrose_kite_lms_action_prop {>} {\pgftransformrotate{180}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_set_eq:NN \g__penrose_ktriangle_lms_action_prop
+\g__penrose_kite_lms_action_prop
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_kite_lms_action_prop {T} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{36}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ kite/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{kite}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_kite_lms_action_prop {g} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{144}
+ \pgftransformxshift{-\l__penrose_step_dim * 2 * sin(18)}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ dart/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{dart}
+ \group_end:
+}
+% \end{macrocode}
+%
+% Now we set up the actions for the triangle variations.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {T} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{18}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ reverse~ golden~ triangle/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{reverse~ golden~ triangle}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {t} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{-18}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ golden~ triangle/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{golden~ triangle}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {G} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{180}
+ \pgftransformxshift{-\l__penrose_step_dim}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ reverse~ golden~ gnomon/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{reverse~ golden~ gnomon}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_rtriangle_lms_action_prop {g} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{180}
+ \pgftransformxshift{-\l__penrose_step_dim}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ golden~ gnomon/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{golden~ gnomon}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {T} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{18}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ reverse~ golden~ triangle/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{reverse~ golden~ triangle}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {t} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{-18}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ golden~ triangle/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{golden~ triangle}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {G} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{180}
+ \pgftransformxshift{-\l__penrose_step_dim}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ reverse~ golden~ gnomon/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{reverse~ golden~ gnomon}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_ktriangle_lms_action_prop {g} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{180}
+ \pgftransformxshift{-\l__penrose_step_dim}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)/(2*cosd(36))}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ golden~ gnomon/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{golden~ gnomon}
+ \group_end:
+}
+% \end{macrocode}
+%
+% Now we do the same for the pentagonal tilings.
+%
+% The rules need a variety of turns.
+% \begin{macrocode}
+\int_new:N \l__penrose_pentagon_parity_int
+\seq_new:N \l__penrose_pentagon_parity_seq
+\seq_set_from_clist:Nn \l__penrose_pentagon_parity_seq {odd,even}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {1} {
+ \int_set:Nn \l__penrose_pentagon_parity_int
+ {3 - \l__penrose_pentagon_parity_int}
+ }
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {+}
+{\pgftransformrotate{72}}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {*}
+{\pgftransformrotate{144}}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {-}
+{\pgftransformrotate{288}}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {_}
+{\pgftransformrotate{216}}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {>}
+{\pgftransformrotate{180}}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {|}
+{\pgftransformxscale{-1}}
+% \end{macrocode}
+% The scale factor is different.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {s} {
+ \fp_set:Nn \l__penrose_tmpa_fp
+ {
+ 1/(2 + 2 * cosd(72) ) * \l__penrose_step_dim
+ }
+ \dim_set:Nn \l__penrose_step_dim {\fp_to_dim:N \l__penrose_tmpa_fp}
+}
+% \end{macrocode}
+% And we tend to work better vertically.
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {f} {
+ \fp_set:Nn \l__penrose_tmpa_fp { tand(54)/2 * \l__penrose_step_dim }
+ \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {F} {
+ \fp_set:Nn \l__penrose_tmpa_fp { tand(54) * \l__penrose_step_dim }
+ \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {d} {
+ \fp_set:Nn \l__penrose_tmpa_fp
+ {
+ (tand(54)/2 - tand(72)/2 + sind(36) ) * \l__penrose_step_dim
+ }
+ \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {e} {
+ \fp_set:Nn \l__penrose_tmpa_fp
+ {
+ tand(54) * cosd(36) * \l__penrose_step_dim
+ }
+ \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {P} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
+ \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
+ \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ pentagon/.try,
+ every~
+ \seq_item:Nn \l__penrose_pentagon_parity_seq
+ {\l__penrose_pentagon_parity_int}
+ \space pentagon/.try,
+ every~ pentagon~ 5/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{pentagon~5}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {Q} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
+ \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
+ \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ pentagon/.try,
+ every~
+ \seq_item:Nn \l__penrose_pentagon_parity_seq
+ {\l__penrose_pentagon_parity_int}
+ \space pentagon/.try,
+ every~ pentagon~ 3/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{pentagon~3}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {R} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/2}
+ \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)/2}
+ \pgftransformyshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ pentagon/.try,
+ every~
+ \seq_item:Nn \l__penrose_pentagon_parity_seq
+ {\l__penrose_pentagon_parity_int}
+ \space pentagon/.try,
+ every~ pentagon~ 2/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{pentagon~2}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {G} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+% \pgftransformrotate{198}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(72)}
+ \pgftransformxshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)*cosd(72)}
+ \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ pentagram/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{pentagram}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {B} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+% \pgftransformrotate{198}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(72)}
+ \pgftransformxshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*tand(54)*cosd(72)}
+ \pgftransformyshift{\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ boat/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{boat}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prop_put:Nnn \g__penrose_pentagon_lms_action_prop {D} {
+ \group_begin:
+ \int_gincr:N \l__penrose_tile_int
+ \pgftransformrotate{90}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim*cosd(18)}
+ \pgftransformxshift{-\fp_to_dim:N \l__penrose_tmpa_fp}
+ \fp_set:Nn \l__penrose_tmpa_fp {\l__penrose_step_dim/(1cm)}
+ \pgftransformscale{\fp_use:N \l__penrose_tmpa_fp}
+ \tl_set:Nx \l__penrose_tmpc_tl
+ {
+ {\int_use:N \l__penrose_tile_int}
+ {\int_use:N \l__penrose_tiles_int}
+ }
+ \UsePenroseTile[
+ every~ Penrose~ tile/.try,
+ every~ diamond/.try,
+ Penrose~ tile~ \int_use:N \l__penrose_tile_int/.try,
+ Penrose~ tile/.try/.expand~ once=\l__penrose_tmpc_tl
+ ]{diamond}
+ \group_end:
+}
+% \end{macrocode}
+%
+% \begin{macro}[internal]{\penrose_make_lms:Nnnn}
+% This creates the token list of actions, starting with the seed.
+% The arguments are: a token list to store the result in, the name of the system, the number of iterations, and the initial state.
+% \begin{macrocode}
+\cs_new_nopar:Npn \penrose_make_lms:Nnnn #1#2#3#4
+{
+ \group_begin:
+% \end{macrocode}
+% On the first time round, we start with the given seed.
+% \begin{macrocode}
+ \tl_set:Nn \l__penrose_tmpb_tl {#4}
+% \end{macrocode}
+% We repeat the specified number of times.
+% \begin{macrocode}
+ \prg_replicate:nn {#3} {
+% \end{macrocode}
+% Duplicate the current state.
+% \begin{macrocode}
+ \tl_set_eq:NN \l__penrose_tmpa_tl \l__penrose_tmpb_tl
+% \end{macrocode}
+% Clear the receiving token list.
+% \begin{macrocode}
+ \tl_clear:N \l__penrose_tmpb_tl
+% \end{macrocode}
+% Walk through the current list, appending to the receiving list according to the rules.
+% \begin{macrocode}
+ \tl_map_inline:Nn \l__penrose_tmpa_tl
+ {
+% \end{macrocode}
+% If a rule exists, copy that.
+% \begin{macrocode}
+ \prop_if_in:cnTF {g__penrose_#2_lms_rule_prop} {##1}
+ {
+ \tl_put_right:Nx \l__penrose_tmpb_tl
+ {\prop_item:cn {g__penrose_#2_lms_rule_prop} {##1} }
+ }
+ {
+% \end{macrocode}
+% Otherwise, just copy the token.
+% \begin{macrocode}
+ \tl_put_right:Nn \l__penrose_tmpb_tl {##1}
+ }
+ }
+ }
+% \end{macrocode}
+% We've done all this inside a group, now pass the result outside.
+% \begin{macrocode}
+ \tl_set:Nn \l__penrose_tmpa_tl {
+ \group_end:
+ \tl_set:Nn #1
+ }
+ \tl_put_right:Nx \l__penrose_tmpa_tl {{\tl_use:N \l__penrose_tmpb_tl}}
+ \tl_use:N \l__penrose_tmpa_tl
+}
+\cs_generate_variant:Nn \penrose_make_lms:Nnnn {Nnnx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\penrose_invoke_lms:Nn}
+% This carries out the actions specified by the resulting rules.
+% \begin{macrocode}
+\cs_new_nopar:Npn \penrose_invoke_lms:Nn #1#2
+{
+ \group_begin:
+% \end{macrocode}
+% Walk through the given list, carrying out the corresponding action if it exists.
+% If not, look at the default.
+% Otherwise, just do nothing.
+% \begin{macrocode}
+ \tl_map_inline:Nn #1 {
+ \prop_if_in:cnTF {g__penrose_#2_lms_action_prop} {##1}
+ {
+ \prop_item:cn {g__penrose_#2_lms_action_prop} {##1}
+ }
+ {
+ \prop_if_in:cnT {g__penrose_default_lms_action_prop} {##1}
+ {
+ \prop_item:cn {g__penrose_default_lms_action_prop} {##1}
+ }
+ }
+ }
+ \group_end:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% We keep track of the number of tiles.
+% \begin{macrocode}
+\int_new:N \l__penrose_tile_int
+\int_new:N \l__penrose_tiles_int
+% \end{macrocode}
+%
+% \begin{macro}[internal]{\PenroseDecomposition}
+% This is the user macro to invoke the decomposition.
+% The arguments are: optional styles, the name, number of iterations, and starting seed.
+% \begin{macrocode}
+\NewDocumentCommand \PenroseDecomposition { O{} m m m }
+{
+ \group_begin:
+ \tikzset{#1}
+ \penrose_make_lms:Nnnx \l__penrose_tmpa_tl {#2} {#3} {#4}
+ \penrose_count_lms:N \l__penrose_tmpa_tl
+ \int_gzero:N \l__penrose_tile_int
+ \int_gset:Nn \l__penrose_pentagon_parity_int {2}
+ \penrose_invoke_lms:Nn \l__penrose_tmpa_tl {#2}
+ \group_end:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\penrose_count_lms:N}
+% This counts the number of tiles in the string.
+% \begin{macrocode}
+\cs_new_nopar:Npn \penrose_count_lms:N #1
+{
+ \int_gzero:N \l__penrose_tiles_int
+ \tl_map_inline:Nn #1
+ {
+ \tl_if_eq:nnT {##1} {T}
+ {
+ \int_incr:N \l__penrose_tiles_int
+ }
+ \tl_if_eq:nnT {##1} {t}
+ {
+ \int_incr:N \l__penrose_tiles_int
+ }
+ \tl_if_eq:nnT {##1} {G}
+ {
+ \int_incr:N \l__penrose_tiles_int
+ }
+ \tl_if_eq:nnT {##1} {g}
+ {
+ \int_incr:N \l__penrose_tiles_int
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% This is a \Verb+\tikzset+ mechanism for setting the dimensions of the tiling.
+% \begin{macrocode}
+\tikzset{
+ Penrose~ step/.code={
+ \dim_set:Nn \l__penrose_step_dim {#1}
+ }
+}
+% \end{macrocode}
+%
+% We're done with \LaTeX3, so turn off the syntax.
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \subsection{TikZ Pictures}
+%
+% New in TikZ3.0 is the ability to make pictures that can be reused.
+% Penrose tiles seems an obvious use for this.
+% These pictures can be placed alongside other tiles, matching by edge type.
+%
+% There are a variety of constants that are frequently used and reused, so we define them all here.
+% These are the PGF versions.
+%
+% \begin{macrocode}
+\pgfmathsetmacro\pr@chphi{cos(18)}
+\pgfmathsetmacro\pr@shphi{sin(18)}
+\pgfmathsetmacro\pr@cphi{cos(36)}
+\pgfmathsetmacro\pr@sphi{sin(36)}
+\pgfmathsetmacro\pr@invphi{2/(sqrt(5)+1)}
+\pgfmathsetmacro\pr@phi{(sqrt(5)+1)/2}
+\pgfmathsetmacro\pr@invphisq{\pr@invphi*\pr@invphi}
+\pgfmathsetmacro\pr@ominvphisq{\pr@invphi - \pr@invphisq}
+\pgfmathsetmacro\pr@ominvphi{1 - \pr@invphi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\if@edgealign
+\def\pr@getfirst#1#2\pr@stop{#1}%
+\def\test@edgealign#1{%
+ \pgfkeysgetvalue{/tikz/Penrose/alignment edge}{\@penrose@tmpa}%
+ \edef\@penrose@tmpb{#1}%
+ \edef\@penrose@tmpa{\expandafter\pr@getfirst\@penrose@tmpa.\pr@stop}%
+ \ifx\@penrose@tmpa\@penrose@tmpb
+ \@edgealigntrue
+ \else
+ \@edgealignfalse
+ \fi
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif\if@newedge
+\def\test@newedge#1{%
+ \pgfkeysgetvalue{/tikz/Penrose/alignment new edge}{\@penrose@tmpa}%
+ \edef\@penrose@tmpb{#1}%
+ \edef\@penrose@tmpa{\@penrose@tmpa}%
+ \ifx\@penrose@tmpa\@penrose@tmpb
+ \@newedgetrue
+ \else
+ \@newedgefalse
+ \fi
+}%
+% \end{macrocode}
+%
+% The implementation is essentially the same for each, so only the first will be commented.
+% \begin{macrocode}
+\tikzset{
+% \end{macrocode}
+% The key \Verb+align with=<tile> along <edge>+ is used to set the parameters for placing a tile next to an existing one.
+% For most tiles, that's enough to specify how the new tile should be placed.
+% Some, though, need more information.
+% For those, use \Verb+align with=<tile> along <edge> using <number>+.
+% \begin{macrocode}
+ align with/.code args={#1 along #2}{%
+ \pgfutil@in@{ using }{#2}
+ \ifpgfutil@in@%
+ \tikzset{
+ Penrose/alignment location=#1,
+ Penrose/alignment set edges=#2,
+ }%
+ \else
+ \tikzset{
+ Penrose/alignment location=#1,
+ Penrose/alignment edge=#2,
+ }%
+ \fi
+ },
+ Penrose/alignment set edges/.code args={#1 using #2}{%
+ \tikzset{
+ Penrose/alignment edge=#1,
+ Penrose/alignment new edge=#2
+ },
+ },
+ Penrose/alignment location/.initial={},
+ Penrose/alignment edge/.initial=a,
+ Penrose/alignment new edge/.initial={},
+% \end{macrocode}
+% Default clipping style.
+% \begin{macrocode}
+ every Penrose tile clip/.style={clip},
+% \end{macrocode}
+% This is the code for setting up a \Verb+pic+.
+% \begin{macrocode}
+ thin rhombus/.pic={
+ \begin{scope}
+% \end{macrocode}
+% Were we given a tile to align ourselves against?
+% \begin{macrocode}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+% \end{macrocode}
+% Yes, we were.
+% So we adjust our position accordingly.
+% The first job is to transform so that we're along the edge of the receiving tile.
+% \begin{macrocode}
+ \begingroup
+% \end{macrocode}
+% We get the locations of the start and end of the receiving tile.
+% As \Verb+pic+ sets the node prefix, we have to temporarily suspend that (hence working in a group).
+% \begin{macrocode}
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+% \end{macrocode}
+% We store the initial points in \Verb+\pgf@xa+ and \Verb+\pgf@ya+ but we want \Verb+\pgf@xb+ and \Verb+\pgf@yb+ to be a vector along the edge.
+% \begin{macrocode}
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+% \end{macrocode}
+% We shift to the start of the edge.
+% \begin{macrocode}
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+% \end{macrocode}
+% And normalise the vector along it.
+% \begin{macrocode}
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+% \end{macrocode}
+% Now rotate so that the \(x\)--axis lies along the edge.
+% \begin{macrocode}
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}
+% \end{macrocode}
+% The next job is to shift and rotate the current tile so that the correct edge ends up against the receiving tile.
+% \begin{macrocode}
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
+ \pgftransformrotate{-18}%
+ \pgftransformshift{\pgfpoint{-\pr@chphi cm}{\pr@shphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
+ \pgftransformrotate{18}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
+ \pgftransformrotate{198}%
+ \pgftransformshift{\pgfpoint{-2*\pr@chphi cm}{0 cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
+ \pgftransformrotate{162}%
+ \pgftransformshift{\pgfpoint{-\pr@chphi cm}{-\pr@shphi cm}}%
+ \fi\fi\fi\fi
+ \fi
+% \end{macrocode}
+% Now that the transformation is finalised, we can render the tile.
+% We clip against the tile path so that the tiles don't ``bleed''.
+% If we didn't do this, drawing the tile would result in overlaps which can look a bit ugly.
+% On the other hand, tight clipping can lead to ``gaps'' between the tiles so we make this optional by enclosing it in a style.
+% \begin{macrocode}
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every thin rhombus clip/.try
+ ]{thin rhombus}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every thin rhombus/.try,
+ pic actions
+ ]{thin rhombus}
+% \end{macrocode}
+% These draw the arcs that designate the joining rules.
+% We draw full circles so that it doesn't matter what shape the tiles are.
+% \begin{macrocode}
+ \UsePenroseTile[
+ every Penrose arc clip/.try,
+ every thin rhombus arc clip/.try
+ ]{thin rhombus}
+ \path[every circle arc/.try] (18:1) circle[radius=1/4];
+ \path[every long arc/.try] (-18:1) circle[radius=1/4];
+% \end{macrocode}
+% Lastly, we put coordinates at each vertex, labelled by which edge they are.
+% \begin{macrocode}
+\coordinate (-edge a start) at (0,0);
+\coordinate (-edge a end) at (18:1);
+\coordinate (-edge A start) at (18:1);
+\coordinate (-edge A end) at (2*\pr@chphi,0);
+\coordinate (-edge B start) at (2*\pr@chphi,0);
+\coordinate (-edge B end) at (-18:1);
+\coordinate (-edge b start) at (-18:1);
+\coordinate (-edge b end) at (0,0);
+ \end{scope}
+ },
+% \end{macrocode}
+% This is a shortcut for installing the \Verb+pic+ type.
+% \begin{macrocode}
+ thin rhombus/.style={
+ every Penrose pic/.try,
+ pic type=thin rhombus,
+ },
+% \end{macrocode}
+% Same again, but for the thick rhombus.
+% \begin{macrocode}
+ thick rhombus/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
+ \pgftransformrotate{144}%
+ \pgftransformshift{\pgfpoint{-\pr@cphi cm}{-\pr@sphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
+ \pgftransformrotate{36}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
+ \pgftransformrotate{-36}%
+ \pgftransformshift{\pgfpoint{-\pr@cphi cm}{\pr@sphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
+ \pgftransformrotate{216}%
+ \pgftransformshift{\pgfpoint{-2*\pr@cphi cm}{0 cm}}%
+ \fi\fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every thick rhombus clip/.try
+ ]{thick rhombus}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every thick rhombus/.try,
+ pic actions
+ ]{thick rhombus}
+ \UsePenroseTile[
+ every Penrose arc clip/.try,
+ every thick rhombus arc clip/.try
+ ]{thick rhombus}
+\path[every circle arc/.try] (2*\pr@cphi,0) circle[radius=1/4];
+\path[every long arc/.try] (0,0) circle[radius=3/4];
+\coordinate (-edge B start) at (0,0);
+\coordinate (-edge B end) at (36:1);
+\coordinate (-edge a start) at (36:1);
+\coordinate (-edge a end) at (2*\pr@cphi,0);
+\coordinate (-edge A start) at (2*\pr@cphi,0);
+\coordinate (-edge A end) at (-36:1);
+\coordinate (-edge b start) at (-36:1);
+\coordinate (-edge b end) at (0,0);
+ \end{scope}
+ },
+ thick rhombus/.style={
+ every Penrose pic/.try,
+ pic type=thick rhombus,
+ },
+% \end{macrocode}
+% Now the kite.
+% \begin{macrocode}
+ kite/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
+ \pgftransformrotate{-72}%
+ \pgftransformshift{\pgfpoint{-\pr@cphi cm}{\pr@sphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
+ \pgftransformrotate{-108}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
+ \pgftransformrotate{36}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
+ \pgftransformrotate{144}%
+ \pgftransformshift{\pgfpoint{-\pr@cphi cm}{-\pr@sphi cm}}%
+ \fi\fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every kite clip/.try
+ ]{kite}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every kite/.try,
+ pic actions
+ ]{kite}
+ \UsePenroseTile[
+ every Penrose arc clip/.try,
+ every kite arc clip/.try
+ ]{kite}
+\path[every circle arc/.try] (0,0) circle[radius=\pr@invphi];
+\path[every long arc/.try] (1,0) circle[radius=\pr@invphisq];
+\coordinate (-edge a start) at (0,0);
+\coordinate (-edge a end) at (36:1);
+\coordinate (-edge c start) at (36:1);
+\coordinate (-edge c end) at (1,0);
+\coordinate (-edge C start) at (1,0);
+\coordinate (-edge C end) at (-36:1);
+\coordinate (-edge A start) at (-36:1);
+\coordinate (-edge A end) at (0,0);
+ \end{scope}
+ },
+% \end{macrocode}
+% The dart is next.
+% \begin{macrocode}
+ dart/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
+ \pgftransformrotate{108}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
+ \pgftransformrotate{72}%
+ \pgftransformshift%
+ {\pgfpoint{\pr@invphi*\pr@shphi cm}{-\pr@invphi*\pr@chphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
+ \pgftransformrotate{-36}%
+ \pgftransformshift%
+ {\pgfpoint{\pr@invphi*\pr@shphi cm}{\pr@invphi*\pr@chphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
+ \pgftransformrotate{216}%
+ \pgftransformshift{\pgfpoint{-\pr@invphi cm}{0 cm}}%
+ \fi\fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every dart clip/.try
+ ]{dart}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every dart/.try,
+ pic actions
+ ]{dart}
+ \UsePenroseTile[
+ every Penrose arc clip/.try,
+ every dart arc clip/.try
+ ]{dart}
+\path[every circle arc/.try] (\pr@invphi,0) circle[radius=\pr@ominvphi];
+\path[every long arc/.try] (0,0) circle[radius=\pr@ominvphisq];
+\coordinate (-edge c start) at (0,0);
+\coordinate (-edge c end) at (108:\pr@invphi);
+\coordinate (-edge a start) at (108:\pr@invphi);
+\coordinate (-edge a end) at (\pr@invphi,0);
+\coordinate (-edge A start) at (\pr@invphi,0);
+\coordinate (-edge A end) at (-108:\pr@invphi);
+\coordinate (-edge C start) at (-108:\pr@invphi);
+\coordinate (-edge C end) at (0,0);
+ \end{scope}
+ },
+ kite/.style={
+ every Penrose pic/.try,
+ pic type=kite,
+ },
+ dart/.style={
+ every Penrose pic/.try,
+ pic type=dart,
+ },
+% \end{macrocode}
+% The golden triangle.
+% \begin{macrocode}
+ golden triangle/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
+ \pgftransformrotate{18}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
+ \pgftransformrotate{-90}%
+ \pgftransformshift{\pgfpoint{-\pr@chphi cm}{\pr@shphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
+ \pgftransformrotate{162}%
+ \pgftransformshift{\pgfpoint{-\pr@chphi cm}{-\pr@shphi cm}}%
+ \fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every golden triangle clip/.try
+ ]{golden triangle}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every golden triangle/.try,
+ pic actions
+ ]{golden triangle}
+\coordinate (-edge a start) at (0,0);
+\coordinate (-edge a end) at (18:1);
+\coordinate (-edge c start) at (18:1);
+\coordinate (-edge c end) at (-18:1);
+\coordinate (-edge b start) at (-18:1);
+\coordinate (-edge b end) at (0,0);
+ \end{scope}
+ },
+ golden triangle/.style={
+ every Penrose pic/.try,
+ pic type=golden triangle,
+ },
+% \end{macrocode}
+% The reverse golden triangle (is there a better name?).
+% \begin{macrocode}
+ reverse golden triangle/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
+ \pgftransformrotate{162}%
+ \pgftransformshift{\pgfpoint{-\pr@chphi cm}{-\pr@shphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
+ \pgftransformrotate{-90}%
+ \pgftransformshift{\pgfpoint{-\pr@chphi cm}{\pr@shphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
+ \pgftransformrotate{18}%
+ \fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every reverse golden triangle clip/.try
+ ]{reverse golden triangle}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every reverse golden triangle/.try,
+ pic actions
+ ]{reverse golden triangle}
+\coordinate (-edge B start) at (0,0);
+\coordinate (-edge B end) at (18:1);
+\coordinate (-edge C start) at (18:1);
+\coordinate (-edge C end) at (-18:1);
+\coordinate (-edge A start) at (-18:1);
+\coordinate (-edge A end) at (0,0);
+ \end{scope}
+ },
+ reverse golden triangle/.style={
+ every Penrose pic/.try,
+ pic type=reverse golden triangle,
+ },
+% \end{macrocode}
+% The golden gnomon.
+% \begin{macrocode}
+ golden gnomon/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}c\relax
+ \pgftransformrotate{144}%
+ \pgftransformshift{\pgfpoint{-\pr@cphi cm}{-\pr@sphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}B\relax
+ \pgftransformrotate{-144}%
+ \pgftransformshift{\pgfpoint{-2*\pr@cphi cm}{0 cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}a\relax
+ \fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every golden gnomon clip/.try
+ ]{golden gnomon}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every golden gnomon/.try,
+ pic actions
+ ]{golden gnomon}
+\coordinate (-edge C start) at (0,0);
+\coordinate (-edge C end) at (36:1);
+\coordinate (-edge b start) at (36:1);
+\coordinate (-edge b end) at (2*\pr@cphi,0);
+\coordinate (-edge A start) at (2*\pr@cphi,0);
+\coordinate (-edge A end) at (0,0);
+ \end{scope}
+ },
+ golden gnomon/.style={
+ every Penrose pic/.try,
+ pic type=golden gnomon,
+ },
+% \end{macrocode}
+% The reverse golden gnomon.
+% \begin{macrocode}
+ reverse golden gnomon/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}C\relax
+ \pgftransformrotate{36}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}b\relax
+ \pgftransformrotate{-36}%
+ \pgftransformshift{\pgfpoint{-\pr@cphi cm}{\pr@sphi cm}}%
+ \else
+ \if\pgfkeysvalueof{/tikz/Penrose/alignment edge}A\relax
+ \pgftransformrotate{180}%
+ \pgftransformshift{\pgfpoint{-2*\pr@cphi cm}{0 cm}}%
+ \fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every reverse golden gnomon clip/.try
+ ]{reverse golden gnomon}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every reverse golden gnomon/.try,
+ pic actions
+ ]{reverse golden gnomon}
+\coordinate (-edge a start) at (0,0);
+\coordinate (-edge a end) at (2*\pr@cphi,0);
+\coordinate (-edge B start) at (2*\pr@cphi,0);
+\coordinate (-edge B end) at (-36:1);
+\coordinate (-edge c start) at (-36:1);
+\coordinate (-edge c end) at (0,0);
+ \end{scope}
+ },
+ reverse golden gnomon/.style={
+ every Penrose pic/.try,
+ pic type=reverse golden gnomon,
+ },
+% \end{macrocode}
+% The primary pentagon.
+% \begin{macrocode}
+ pentagon 5/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \test@newedge{1}%
+ \if@newedge
+ \pgftransformrotate{180}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \test@newedge{2}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
+ \pgftransformrotate{108}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \test@newedge{3}%
+ \if@newedge
+ \pgftransformshift%
+ {\pgfpoint{\pr@phi * \pr@shphi cm}{- \pr@phi * \pr@chphi cm}}%
+ \pgftransformrotate{36}%
+ \else
+ \test@newedge{4}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{- \pr@shphi cm}{-\pr@chphi cm}}%
+ \pgftransformrotate{-36}%
+ \else
+ \test@newedge{5}%
+ \if@newedge
+ \pgftransformrotate{-108}%
+ \fi\fi\fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every pentagon clip/.try,
+ every pentagon 5 clip/.try
+ ]{pentagon 5}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every pentagon/.try,
+ every pentagon 5/.try,
+ pic actions
+ ]{pentagon 5}
+\coordinate (-edge a1 start) at (0,0);
+\coordinate (-edge a1 end) at (1,0);
+\coordinate (-edge a2 start) at (1,0);
+\coordinate (-edge a2 end) at (1+\pr@shphi,\pr@chphi);
+\coordinate (-edge a3 start) at (1+\pr@shphi,\pr@chphi);
+\coordinate (-edge a3 end) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
+\coordinate (-edge a4 start) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
+\coordinate (-edge a4 end) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge a5 start) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge a5 end) at (0,0);
+ \end{scope}
+ },
+ pentagon 5/.style={
+ every Penrose pic/.try,
+ pic type=pentagon 5,
+ },
+% \end{macrocode}
+% The secondary pentagon.
+% \begin{macrocode}
+ pentagon 3/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \test@edgealign{a}%
+ \if@edgealign
+ \pgftransformrotate{180}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \test@edgealign{B}%
+ \if@edgealign%
+ \test@newedge{1}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
+ \pgftransformrotate{108}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \pgftransformrotate{-108}%
+ \fi
+ \else
+ \test@newedge{1}%
+ \if@newedge
+ \pgftransformshift%
+ {\pgfpoint{\pr@phi * \pr@shphi cm}{- \pr@phi * \pr@chphi cm}}%
+ \pgftransformrotate{36}%
+ \else
+ \pgftransformshift{\pgfpoint{- \pr@shphi cm}{-\pr@chphi cm}}%
+ \pgftransformrotate{-36}%
+ \fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every pentagon clip/.try,
+ every pentagon 3 clip/.try
+ ]{pentagon 3}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every pentagon/.try,
+ every pentagon 3/.try,
+ pic actions
+ ]{pentagon 3}
+\coordinate (-edge A start) at (0,0);
+\coordinate (-edge A end) at (1,0);
+\coordinate (-edge b1 start) at (1,0);
+\coordinate (-edge b1 end) at (1+\pr@shphi,\pr@chphi);
+\coordinate (-edge a1 start) at (1+\pr@shphi,\pr@chphi);
+\coordinate (-edge a1 end) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
+\coordinate (-edge a2 start) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
+\coordinate (-edge a2 end) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge b2 start) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge b2 end) at (0,0);
+ \end{scope}
+ },
+ pentagon 3/.style={
+ every Penrose pic/.try,
+ pic type=pentagon 3,
+ },
+% \end{macrocode}
+% The tertiary pentagon.
+% \begin{macrocode}
+ pentagon 2/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \test@edgealign{D}%
+ \if@edgealign
+ \pgftransformrotate{180}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \test@edgealign{a}%
+ \if@edgealign%
+ \test@newedge{1}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
+ \pgftransformrotate{108}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \pgftransformrotate{-108}%
+ \fi
+ \else
+ \test@newedge{1}%
+ \if@newedge
+ \pgftransformshift%
+ {\pgfpoint{\pr@phi * \pr@shphi cm}{- \pr@phi * \pr@chphi cm}}%
+ \pgftransformrotate{36}%
+ \else
+ \pgftransformshift{\pgfpoint{- \pr@shphi cm}{-\pr@chphi cm}}%
+ \pgftransformrotate{-36}%
+ \fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every pentagon clip/.try,
+ every pentagon 2 clip/.try
+ ]{pentagon 2}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every pentagon/.try,
+ every pentagon 2/.try,
+ pic actions
+ ]{pentagon 2}
+\coordinate (-edge d start) at (0,0);
+\coordinate (-edge d end) at (1,0);
+\coordinate (-edge A1 start) at (1,0);
+\coordinate (-edge A1 end) at (1+\pr@shphi,\pr@chphi);
+\coordinate (-edge c1 start) at (1+\pr@shphi,\pr@chphi);
+\coordinate (-edge c1 end) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
+\coordinate (-edge c2 start) at (\pr@cphi-\pr@shphi,\pr@sphi+\pr@chphi);
+\coordinate (-edge c2 end) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge A2 start) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge A2 end) at (0,0);
+ \end{scope}
+ },
+ pentagon 2/.style={
+ every Penrose pic/.try,
+ pic type=pentagon 2,
+ },
+% \end{macrocode}
+% The pentagram.
+% \begin{macrocode}
+ pentagram/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \test@newedge{2}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
+ \pgftransformrotate{72}%
+ \else
+ \test@newedge{3}%
+ \if@newedge
+ \pgftransformrotate{-72}%
+ \pgftransformshift{\pgfpoint{2 * \pr@shphi cm}{0 cm}}%
+ \else
+ \test@newedge{4}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm + 2 * \pr@shphi cm}{0 cm}}%
+ \else
+ \test@newedge{5}%
+ \if@newedge
+ \pgftransformrotate{216}%
+ \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
+ \else
+ \test@newedge{6}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1cm}{0cm}}%
+ \pgftransformrotate{-72}%
+ \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
+ \else
+ \test@newedge{7}%
+ \if@newedge
+ \pgftransformrotate{144}%
+ \pgftransformshift{\pgfpoint{\pr@shphi cm}{\pr@chphi cm}}%
+ \else
+ \test@newedge{8}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm + 2*\pr@shphi cm}{0cm}}%
+ \pgftransformrotate{216}%
+ \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
+ \else
+ \test@newedge{9}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{-2*\pr@shphi cm}{0cm}}%
+ \pgftransformrotate{72}%
+ \else
+ \test@newedge{10}%
+ \if@newedge
+ \pgftransformrotate{144}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every pentagram clip/.try
+ ]{pentagram}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every pentagram/.try,
+ pic actions
+ ]{pentagram}
+\coordinate (-edge C1 start) at (1,0);
+\coordinate (-edge C1 end) at (0,0);
+\coordinate (-edge C2 start) at (0,0);
+\coordinate (-edge C2 end) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge C3 start) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge C3 end) at (-2*\pr@shphi,0);
+\coordinate (-edge C4 start) at (-2*\pr@shphi,0);
+\coordinate (-edge C4 end) at (-1-2*\pr@shphi,0);
+\coordinate (-edge C5 start) at (-1-2*\pr@shphi,0);
+\coordinate (-edge C5 end) at (-\pr@cphi,-\pr@sphi);
+\coordinate (-edge C6 start) at (-\pr@cphi,-\pr@sphi);
+\coordinate (-edge C6 end) at (-\pr@cphi-\pr@shphi,-\pr@sphi-\pr@chphi);
+\coordinate (-edge C7 start) at (-\pr@cphi-\pr@shphi,-\pr@sphi-\pr@chphi);
+\coordinate (-edge C7 end) at (-\pr@shphi,-\pr@chphi);
+\coordinate (-edge C8 start) at (-\pr@shphi,-\pr@chphi);
+\coordinate (-edge C8 end) at (1-\pr@cphi+\pr@shphi,-\pr@sphi-\pr@chphi);
+\coordinate (-edge C9 start) at (1-\pr@cphi+\pr@shphi,-\pr@sphi-\pr@chphi);
+\coordinate (-edge C9 end) at (1-\pr@cphi,-\pr@sphi);
+\coordinate (-edge C10 start) at (1-\pr@cphi,-\pr@sphi);
+\coordinate (-edge C10 end) at (1,0);
+ \end{scope}
+ },
+ pentagram/.style={
+ every Penrose pic/.try,
+ pic type=pentagram,
+ },
+% \end{macrocode}
+% The boat.
+% \begin{macrocode}
+ boat/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \test@edgealign{d}%
+ \if@edgealign
+ \pgftransformrotate{180}%
+ \pgftransformshift{\pgfpoint{\pr@cphi cm - 1cm}{\pr@sphi cm}}%
+ \else
+ \test@edgealign{b}%
+ \if@edgealign%
+ \test@newedge{2}%
+ \if@newedge
+ \pgftransformrotate{144}%
+ \pgftransformshift{\pgfpoint{-1 cm}{0 cm}}%
+ \else
+ \pgftransformrotate{216}%
+ \pgftransformshift{\pgfpoint{\pr@cphi cm}{\pr@sphi cm}}%
+ \fi
+ \else
+ \test@edgealign{c}%
+ \if@edgealign%
+ \test@newedge{2}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm}{0 cm}}%
+ \pgftransformrotate{72}%
+ \else
+ \test@newedge{3}%
+ \if@newedge
+ \pgftransformrotate{-72}%
+ \pgftransformshift{\pgfpoint{2 * \pr@shphi cm}{0 cm}}%
+ \else
+ \test@newedge{4}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1 cm + 2 * \pr@shphi cm}{0 cm}}%
+ \else
+ \fi\fi\fi\fi\fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every boat clip/.try
+ ]{boat}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every boat/.try,
+ pic actions
+ ]{boat}
+\coordinate (-edge C1 start) at (1,0);
+\coordinate (-edge C1 end) at (0,0);
+\coordinate (-edge C2 start) at (0,0);
+\coordinate (-edge C2 end) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge C3 start) at (-\pr@shphi,\pr@chphi);
+\coordinate (-edge C3 end) at (-2*\pr@shphi,0);
+\coordinate (-edge C4 start) at (-2*\pr@shphi,0);
+\coordinate (-edge C4 end) at (-1-2*\pr@shphi,0);
+\coordinate (-edge B1 start) at (-1-2*\pr@shphi,0);
+\coordinate (-edge B1 end) at (-\pr@cphi,-\pr@sphi);
+\coordinate (-edge D start) at (-\pr@cphi,-\pr@sphi);
+\coordinate (-edge D end) at (1-\pr@cphi,-\pr@sphi);
+\coordinate (-edge B2 start) at (1-\pr@cphi,-\pr@sphi);
+\coordinate (-edge B2 end) at (1,0);
+ \end{scope}
+ },
+ boat/.style={
+ every Penrose pic/.try,
+ pic type=boat,
+ },
+% \end{macrocode}
+% The diamond.
+% \begin{macrocode}
+ diamond/.pic={
+ \begin{scope}
+ \pgfkeysgetvalue{/tikz/Penrose/alignment location}{\prloc}
+ \ifx\prloc\pgfutil@empty
+ \else
+ \begingroup
+ \tikzset{name prefix ..}%
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} start)%
+ \global\pgf@xa=\pgf@x
+ \global\pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone%
+ (\prloc-edge \pgfkeysvalueof{/tikz/Penrose/alignment edge} end)%
+ \global\pgf@xb=\pgf@x
+ \global\pgf@yb=\pgf@y
+ \endgroup
+ \advance\pgf@xb by -\pgf@xa
+ \advance\pgf@yb by -\pgf@ya
+ \pgftransformshift{\pgfpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpointnormalised{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgftransformtriangle%
+ {\pgfpoint{0pt}{0pt}}%
+ {\pgfpoint{\pgf@xb}{\pgf@yb}}%
+ {\pgfpoint{-\pgf@yb}{\pgf@xb}}%
+ \test@edgealign{d}%
+ \if@edgealign%
+ \test@newedge{2}%
+ \if@newedge
+ \pgftransformshift{\pgfpoint{1cm}{0cm}}%
+ \pgftransformrotate{-162}%
+ \else
+ \pgftransformrotate{-18}%
+ \fi
+ \else
+ \test@newedge{2}%
+ \if@newedge
+ \pgftransformrotate{162}%
+ \pgftransformshift{\pgfpoint{- 2 * \pr@chphi cm}{0cm}}%
+ \else
+ \pgftransformshift{\pgfpoint{- \pr@cphi cm}{-\pr@sphi cm}}%
+ \pgftransformrotate{18}%
+ \fi\fi
+ \fi
+ \UsePenroseTile[
+ every Penrose tile clip/.try,
+ every diamond clip/.try
+ ]{diamond}
+ \UsePenroseTile[
+ every Penrose tile/.try,
+ every diamond/.try,
+ pic actions
+ ]{diamond}
+\coordinate (-edge D1 start) at (0,0);
+\coordinate (-edge D1 end) at (\pr@chphi,\pr@shphi);
+\coordinate (-edge B1 start) at (\pr@chphi,\pr@shphi);
+\coordinate (-edge B1 end) at (2*\pr@chphi,0);
+\coordinate (-edge B2 start) at (2*\pr@chphi,0);
+\coordinate (-edge B2 end) at (\pr@chphi,-\pr@shphi);
+\coordinate (-edge D2 start) at (\pr@chphi,-\pr@shphi);
+\coordinate (-edge D2 end) at (0,0);
+ \end{scope}
+ },
+ diamond/.style={
+ every Penrose pic/.try,
+ pic type=diamond,
+ },
+}
+% \end{macrocode}
+%
+% \iffalse
+%</library>
+% \fi
+%\Finale
+\endinput
diff --git a/graphics/pgf/contrib/penrose/penrose_code.pdf b/graphics/pgf/contrib/penrose/penrose_code.pdf
new file mode 100644
index 0000000000..b30a2d3442
--- /dev/null
+++ b/graphics/pgf/contrib/penrose/penrose_code.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-blur/README.md b/graphics/pgf/contrib/pgf-blur/README.md
new file mode 100644
index 0000000000..617440dd8f
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-blur/README.md
@@ -0,0 +1,73 @@
+Package pgf-blur
+================
+
+The package adds blurred/faded/fuzzy shadows to PGF/TikZ pictures.
+It is configured as a TikZ/PGF library module.
+
+Run (pdf)latex on pgf-blur.dtx to produce a TikZ library file
+and the documentation.
+
+Development
+-----------
+
+Martin Giese has stopped working on pgf-blur and pgf-blur is now
+developed at https://github.com/norbusan/pgf-blur
+
+Issues and Bugs
+---------------
+
+Please report issues to https://github.com/norbusan/pgf-blur/issues
+
+Currently (as of TL2018) multiple drop shadows can produce problems
+with xelatex (dvipdfmx) when including a pdf with drop shadows into
+another pdf. A typical error is
+
+ xdvipdfmx:fatal: Loop in object hierarchy detected. Broken PDF file?
+
+This will be fixed in TL2019 with an update to dvipdfmx. luatex and pdftex
+do not exhibit this problem.
+
+
+License and Copyright
+---------------------
+
+ Copyright 2012 Martin Giese, martingi@ifi.uio.no
+ Copyright 2012 Andrew Stacey
+ Copyright 2018 Norbert Preining, norbert@preining.info
+
+This file is under the LaTeX Project Public License
+See CTAN archives in directory macros/latex/base/lppl.txt.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+for the details of that license.
+
+
+Details:
+
+The original version was developed by Martin Giese:
+
+ Copyright 2012 Martin Giese, martingi@ifi.uio.no
+
+who handed over maintainership to Norbert Preining in 2018
+
+Message-Id: <BDCE3150-A170-4AC9-B1E3-2903DA9D390F@ifi.uio.no>
+
+ Ich finde es gut, wenn sich jemand um die Verbesserung der package kümmern möchte.
+ Wenn du willst kannst du gerne die Rolle des Maintainers übernehmen. Ich werde
+ selber wahrscheinlich keine Zeit mehr haben, mich darum zu kümmern. So lange
+ die Doku einen Hinweis behält, dass die ursprüngliche Version von mir kam,
+ bin ich glücklich.
+
+Additions by Andrew Stacey are public domain, CC0, or LPPL
+
+ Copyright 2012 Andrew Stacey
+
+Message-ID: <cd8cae1b-c5c9-9fcc-8822-fff529375bb5@mathforge.org>
+
+ "My additions to the pgf-blur code are hereby placed in the public domain to
+ the extent governable by law. Explicitly, they are dually placed under the
+ CC0 licence and the LPPL licence."
+
+Current maintainership, uploads, etc
+
+ Copyright 2018 Norbert Preining, norbert@preining.info
+
diff --git a/graphics/pgf/contrib/pgf-blur/pgf-blur.dtx b/graphics/pgf/contrib/pgf-blur/pgf-blur.dtx
new file mode 100644
index 0000000000..f4fa8d4adb
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-blur/pgf-blur.dtx
@@ -0,0 +1,911 @@
+% \iffalse meta-comment -*-mode:Latex;tex-command:"pdflatex"-*-
+%<*internal>
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+Copyright 2012 Martin Giese, martingi@ifi.uio.no
+Copyright 2012 Andrew Stacey
+Copyright 2018 Norbert Preining, norbert@preining.info
+
+This file is under the LaTeX Project Public License
+See CTAN archives in directory macros/latex/base/lppl.txt.
+
+DESCRIPTION:
+ `pgf-blur' adds blurred/faded/fuzzy shadows to TikZ/PGF
+
+\endpreamble
+\generate{\file{tikzlibraryshadows.blur.code.tex}{\from{pgf-blur.dtx}{texfile}}}
+\Msg{************************************************************}
+\Msg{ }
+\Msg{ To finish the installation you have to move the file}
+\Msg{ `tikzlibraryshadows.blur.code.tex' into a directory}
+\Msg{ searched by TeX.}
+\Msg{ }
+\Msg{ To type-set the documentation, including instructions,}
+\Msg{ run the file `pgf-blur.dtx' through LaTeX.}
+\Msg{ }
+\Msg{***********************************************************}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\NeedsTeXFormat{LaTeX2e}
+\documentclass{ltxdoc}
+\usepackage{tikz}
+\usepackage{textcomp}
+\usepackage{url}
+\usetikzlibrary{shadows.blur}
+\usetikzlibrary{shapes.symbols}
+\usetikzlibrary{shapes.multipart}
+\AtBeginDocument{
+% \OnlyDescription % comment out for implementation details
+ \EnableCrossrefs
+ \RecordChanges
+ \CodelineIndex}
+%\AtEndDocument{
+% \PrintChanges
+% \PrintIndex}
+\MakeShortVerb{\|}
+\newcommand\file[1]{\texttt{#1}}
+\begin{document}
+\DocInput{pgf-blur.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+% \CheckSum{475}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.00}{2012/04/20}{First public release. (mg)}
+% \changes{v1.01}{2012/04/24}{Remove antialiasing/clipping artefacts (mg)}
+% \changes{v1.02}{2018/08/21}{Fix multiple shadows, support inversion (as), changed maintainer (np)}
+%
+% \DoNotIndex{\!,\",\#,\$,\%,\&,\',\(,\+,\*,\,,\-,\.,\/,\:,\;,\<,\=,\>,\?}
+% \setcounter{IndexColumns}{2}
+%
+% \title{\textsf{pgf-blur} package \\ version \fileversion}
+% \author{Martin Giese}
+% \date{\filedate}
+% \maketitle
+%
+%\def\tikzname{Ti\emph{k}Z}
+%
+%\begin{center}
+% Currently maintained by Norbert Preining\footnote{\protect\url{https://github.com/norbusan/pgf-blur}}
+%\end{center}
+%
+%\begin{center}
+% \small \textbf{Acknowledgement}\\ This package evolved from a discussion
+% on \url{http://tex.stackexchange.com/}. In particular, the author received
+% invaluable help from Andrew Stacey.
+%\end{center}
+%
+%\section{Introduction}
+% The ability to paint shadows on arbitrary shapes is a standard
+% feature of TikZ/PGF. However, these shadows are usually `sharp':
+%
+%\newcommand\examplepath{
+% (0,0) -- (0,1) -- (1.5,1) -- (1,0.5) [rounded corners=2mm] -- (1,0) [sharp corners]-- cycle
+% (0.5,0.5) circle (0.3)
+% }
+%
+%\begin{center}
+% \begin{tikzpicture}
+% \filldraw[drop shadow,draw=black,fill=white] \examplepath ;
+% \node[starburst,very thick,rounded corners=2pt,fill=white,draw=red,
+% drop shadow] at (5,0.5)
+% {\sffamily\bfseries SPLAT!};
+% \end{tikzpicture}
+%\end{center}
+%
+% Such shadows are often optically too intrusive. A more pleasing effect
+% is achieved if the edges of the shadow are `blurred,' i.e., getting
+% gradually lighter and more transparent toward the outside.
+% This effect can be achieved in TikZ/PGF with the |circular drop shadow|
+% key, but that works only with ellipses and circles.
+%
+% The |pgf-blur| package provides blurred shadows that can be
+% added to any closed path, including node borders:
+%
+%\begin{center}
+% \begin{tikzpicture}
+% \filldraw[blur shadow={shadow blur steps=8,shadow blur extra rounding},draw=black,fill=white] \examplepath ;
+% \node[starburst,very thick,rounded corners=2pt,fill=white,draw=red,
+% blur shadow={shadow blur steps=8,shadow blur extra rounding}] at (5,0.5)
+% {\sffamily\bfseries SPLAT!};
+% \end{tikzpicture}
+%\end{center}
+%
+% \medskip
+%
+% The new TikZ options provided by the package
+% are described in section 2 of this document. Section 3, if present, documents the
+% implementation consisting of a generic \TeX\ file.
+%
+%\section{Package Usage}
+%
+% To use the package, the document needs to say |\usepackage{tikz}| and
+% \begin{verbatim}
+% \usetikzlibrary{shadows.blur}
+% \end{verbatim}
+% in the preamble.
+%
+% \DescribeMacro{blur shadow}
+% \noindent A blurred shadow is added to a path or node by the option
+% |blur shadow|, e.g.
+%\begin{verbatim}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black, blur shadow] (0,0) circle (1);
+% \node[fill=white, draw=black, blur shadow] at (4,0.5) {\Large Node};
+% \end{tikzpicture}
+%\end{verbatim}
+% which gives
+%\begin{center}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black, blur shadow] (0,0) circle (0.5);
+% \node[fill=white, draw=black, blur shadow] at (2,0) {\Large Node};
+% \end{tikzpicture}
+%\end{center}
+% Note that this usually makes sense only with closed paths that are filled
+% (otherwise the shadow is visible through the path, and one wonders
+% what is throwing the shadow) and often looks best if used with
+% a drawn outline.
+%
+% The appearance of the shadow can be fine-tuned by giving arguments
+% to the |blur shadow| options. These options do not have any effect
+% if given outside of the argument of either |blur shadow| or |every shadow|
+% (described later)
+%
+% \DescribeMacro{shadow xshift}
+% \DescribeMacro{shadow yshift}
+% \DescribeMacro{shadow scale}
+% \noindent The shadow is based on a shifted, and possibly scaled copy of the original path.
+% These options are described in the \tikzname/PGF user manual, and they work in
+% the same way for blurred shadows. See also Fig.~\ref{fig:geometry}. The default
+% values are 3ex for |shadow xshift|, \textminus3ex for |shadow yshift|, and
+% 1 for |shadow scale|.
+%
+%\begin{figure}
+%\begin{center}
+% \begin{tikzpicture}
+%\begin{scope}
+% \clip (0,1) rectangle (8,5);
+%
+% \filldraw[fill=white, draw=black, ultra thick,
+% blur shadow={
+% shadow xshift=2cm,shadow yshift=-1cm,
+% shadow blur radius=0.75cm, shadow blur steps=10}] (-4,3) rectangle (4,9);
+% \draw[xshift=2cm,yshift=-1cm,thin,dotted,red]
+% (4,3) circle (0.75)
+% (-4,3) rectangle (4,9)
+% (-4.75,3.75) rectangle (3.25,9.75)
+% [rounded corners=0.75cm] (-3.25,2.25) rectangle (4.75,8.25);
+%\end{scope}
+%
+% \draw[-stealth, thin] (4,3) -- (6,2)
+% node[pos=0.6,left=0.7em] {\footnotesize (|shadow xshift|,\,|shadow yshift|)};
+%
+% \draw[stealth-stealth, thin] (6,2) -- + (-60:0.75)
+% node[pos=0.4,right=0.4em] {\footnotesize |shadow blur radius|};
+% \end{tikzpicture}
+%\end{center}
+% \caption{Shadow geometry}
+% \label{fig:geometry}
+%\end{figure}
+%
+% Here is an example for the usage of these options:
+%\begin{verbatim}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow xshift=1ex,
+% shadow yshift=1ex,
+% shadow scale=1.2}]
+% (0,0) circle (0.5);
+% \end{tikzpicture}
+%\end{verbatim}
+% Which gives:
+%\begin{center}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow xshift=1ex,
+% shadow yshift=1ex,
+% shadow scale=1.2}]
+% (0,0) circle (0.5);
+% \end{tikzpicture}
+%\end{center}
+%
+% \DescribeMacro{shadow blur radius}
+% \noindent Fig.~\ref{fig:geometry} shows how the blur shadow spreads out
+% the boundary of the path over a circular region. The intent is
+% to mimic the effect of a circular light source over the shape.
+% the radius of the ``blurring'' can be set with the
+% |shadow blur radius| option, which has a default value of
+% \csname pgfbs@radius\endcsname.
+%
+% Here is an example of a drastically enlarged blur radius:
+%\begin{verbatim}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow blur radius=1.5ex}]
+% (0,0) circle (0.5);
+% \end{tikzpicture}
+%\end{verbatim}
+% Which gives:
+%\begin{center}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow blur radius=1.5ex}]
+% (0,0) circle (0.5);
+% \end{tikzpicture}
+%\end{center}
+%
+% \DescribeMacro{shadow opacity}
+% \noindent Shadows are transparent. They are always black since a shadow is the
+% absence of light. The opacity of the interior of the shadow, i.e.~the
+% darkest region can be controlled with the |shadow opacity| option. It
+% is given as a percentage, i.e.~a number between 0 and 100. The default
+% is \csname pgfbs@opacity\endcsname.
+%
+% Here are examples of lighter and darker shadows:
+%\begin{verbatim}
+% \begin{tikzpicture}
+% \draw[help lines,step=0.5] (-1,-1) grid (3,1);
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow opacity=20}]
+% (0,0) circle (0.5);
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow opacity=60}]
+% (2,0) circle (0.5);
+% \end{tikzpicture}
+%\end{verbatim}
+% Which gives:
+%\begin{center}
+% \begin{tikzpicture}
+% \draw[help lines,step=0.5] (-1,-1) grid (3,1);
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow opacity=20}]
+% (0,0) circle (0.5);
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow opacity=60}]
+% (2,0) circle (0.5);
+% \end{tikzpicture}
+%\end{center}
+%
+% \DescribeMacro{shadow blur extra rounding}
+% A close inspection of the shadow in Fig.~\ref{fig:geometry}
+% reveals that if the original path has a corner, then
+% the ``lines of equal opacity'' in the inner part of the shadow will
+% also have corners. This is a consequence of the way the shadows are
+% rendered by default. It gives the impression of the darkest part
+% of the shadow extruding a little too much into the faded part.
+% This effect can be reduced by adding the option |shadow extra rounding|,
+% which has the effect of rounding all corners of the path before rendering
+% the shadow. The rounding inset can be given as an argument; it
+% defaults to the current value of the blur radius.
+%
+% Several points should be remembered when using this option:
+% \begin{itemize}
+% \item It uses the mechanism that \tikzname\ also uses for the
+% |rounded corners| option. This works badly, distorting the
+% path in strange ways, if the individual segments of the path
+% are too short to be rounded with the given inset. If the
+% shadows look strange, try reducing the inset, or drop this
+% option altogether.
+% \item Rounding many complex paths can slow \TeX\ down considerably.
+% \item The ideal rounding inset depends on the angle the path has
+% at each corner. This is not taken into account, the same
+% inset is used everywhere. The default value is the one that
+% works best with 90\textdegree\ angles, but it also looks
+% fairly good with other angles.
+% \item With or without this option, the shadows will not be
+% photorealistic.
+% \end{itemize}
+% Here is an example of squares without and with extra rounding applied:
+%\begin{verbatim}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black,
+% blur shadow]
+% (0,0) rectangle (1,1);
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow blur extra rounding}]
+% (2,0) rectangle (3,1);
+% \end{tikzpicture}
+%\end{verbatim}
+% Which gives:
+%\begin{center}
+% \begin{tikzpicture}
+% \filldraw[fill=white, draw=black,
+% blur shadow]
+% (0,0) rectangle (1,1);
+% \filldraw[fill=white, draw=black,
+% blur shadow={shadow blur extra rounding}]
+% (2,0) rectangle (3,1);
+% \end{tikzpicture}
+%\end{center}
+%
+% \DescribeMacro{shadow blur steps}
+% \noindent The transition of opacity in these shadows is actually not
+% smooth, but proceeds in a finite number of discrete steps.
+% Specifically, there is a number $n$, such that the (shifted and
+% scaled) original path fades outward to complete transparency in $n$
+% steps and within the selected |shadow blur radius|, and inward to
+% the maximum opacity of the shadow, also within $n$ steps and the
+% |shadow blur radius|. This number of steps $n$ can be selected
+% using the |shadow blur steps| option. It defaults to
+% \csname pgfbs@steps\endcsname, which is
+% enough e.g.~for inconspicuous shadows in presentations that nobody
+% examines with a magnifying glass. The examples in the introduction
+% use 8, under the assumption that readers will have a close look.
+% Fig.~\ref{fig:geometry} uses 10 because the blur radius is so large.
+%
+% A large number of steps will slow down both the \TeX\ processing and the
+% PDF rendering, usually with very little visible impact.
+%
+% \DescribeMacro{every shadow}
+% To apply the same set of options to every shadow, it is possible to
+% define the \emph{style} |every shadow|, which is taken from the
+% standard shadow library. For instance, in the following, darker
+% shadows with more steps are selected for several shapes:
+%\begin{verbatim}
+% \begin{tikzpicture}
+% [every shadow/.style={shadow opacity=60,
+% shadow blur steps=7}]
+% \filldraw[fill=white, draw=black, blur shadow]
+% (0,0) rectangle (1,1);
+% \node[cloud,shape aspect=2,fill=white, draw=black,
+% blur shadow]
+% at (2.5,0.5) {Rain};
+% \end{tikzpicture}
+%\end{verbatim}
+% Which gives:
+%\begin{center}
+% \begin{tikzpicture}
+% [every shadow/.style={shadow opacity=60,
+% shadow blur steps=7}]
+% \filldraw[fill=white, draw=black, blur shadow]
+% (0,0) rectangle (1,1);
+% \node[cloud,shape aspect=2,fill=white, draw=black,
+% blur shadow]
+% at (2.5,0.5) {Rain};
+% \end{tikzpicture}
+%\end{center}
+
+%
+% \StopEventually{}
+%
+% \subsection{A Note on Nodes}
+%
+
+% While this library plays nicely with most closed paths, it doesn't
+% like paths with non-closed parts. This is particularly annoying
+% when used with standard node shapes, where you can't do much about
+% the paths. Take the |rectangle split| shape for instance:
+%
+%\begin{verbatim}
+% \begin{tikzpicture}
+% \node[rectangle split, rectangle split parts=3, draw, fill=white,
+% blur shadow={shadow xshift=1em}] {...};
+% \end{tikzpicture}
+%\end{verbatim}
+%
+%\begin{center}
+% \begin{tikzpicture}
+% \node[rectangle split, rectangle split parts=3, draw, fill=white,
+% blur shadow={shadow xshift=1em}]
+% {Cake \nodepart{two} icing: Icing \nodepart{three} getIcing()};
+% \end{tikzpicture}
+%\end{center}
+%
+% Note how the part separation lines produce white bars in the shadow.
+% This is really hard to avoid in general. There are two simple
+% workarounds: a) choosing a very small |shadow xshift| so most the
+% ``bar'' gets hidden behind the shape, or b) putting
+% the node inside a simple rectangle node and add a shadow to the latter.
+% For solution b) to work, the inner padding of the outer node has to
+% be removed. This in turn requires it to be reinstated for the inner
+% node. Here's the example showing both workarounds:
+%
+%\begin{verbatim}
+% \begin{tikzpicture}
+% \node[rectangle split, rectangle split parts=3,
+% draw, fill=white,
+% blur shadow={shadow xshift=0.25ex}] at (-2,0) {...};
+% \node[blur shadow={shadow xshift=1em},inner sep=0pt] at (2,0) {
+% \tikz\node[rectangle split, rectangle split parts=3,
+% draw, fill=white, inner sep=0.333em] {...};};
+% \end{tikzpicture}
+%\end{verbatim}
+%
+%\begin{center}
+% \begin{tikzpicture}
+% \node[rectangle split, rectangle split parts=3,
+% draw, fill=white,
+% blur shadow={shadow xshift=0.25ex}] at (-2,0)
+% {Cake \nodepart{two} icing: Icing \nodepart{three} getIcing()};
+% \node[blur shadow={shadow xshift=1em},inner sep=0pt] at (2,0) {
+% \tikz\node[rectangle split, rectangle split parts=3,
+% draw, fill=white, inner sep=0.333em]
+% {Cake \nodepart{two} icing: Icing \nodepart{three} getIcing()};};
+% \end{tikzpicture}
+%\end{center}
+%
+% Solution b) is fine for rectangular outlines, but it wont work for e.g.~the
+% |cylinder| shape.
+%
+% \section{Implementation}
+%
+%\begin{macro}{\fileversion}
+% \begin{macro}{\filedate}
+% We define the file version and date, and
+% import the original shadow code for the offset and scale parameters.
+% \begin{macrocode}
+%<*texfile>
+\def\fileversion{1.02}
+\def\filedate{2012/12/09}
+\message{ v\fileversion, \filedate}
+\usetikzlibrary{shadows}
+\usetikzlibrary{calc}
+% \end{macrocode}
+% \end{macro}
+%\end{macro}
+%\begin{macro}{\ifpgfbs@invert@fading}
+% An |\if| to control whether to invert the fading or not.
+% \begin{macrocode}
+\newif\ifpgfbs@invert@fading
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfbs@fading@count}
+% A |count| to make the names unique
+% \begin{macrocode}
+\newcount\pgfbs@fading@count
+\pgfbs@fading@count=0\relax
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{shadow blur radius}
+%\begin{macro}{shadow blur extra rounding}
+%\begin{macro}{shadow blur steps}
+%\begin{macro}{shadow opacity}
+% Next we define the various \tikzname\ options, with their default values.
+% The options |shadow xshift|, |shadow yshift|, |shadow scale| are imported
+% from the standard \tikzname\ shadow library, so we don't need to do
+% anything for them.
+% Note how the default value of |shadow blur extra rounding| is by default
+% set to the blur radius. This works because the value of this key is
+% evaluated before it is used. All other options just store values
+% in a couple of macros.
+% \begin{macrocode}
+\tikzset{
+ /tikz/shadow blur radius/.store in=\pgfbs@radius,
+ /tikz/shadow blur radius=.4ex,
+ /tikz/shadow blur extra rounding/.store in=\pgfbs@extra@rounding,
+ /tikz/shadow blur extra rounding=\pgfutil@empty,
+ /tikz/shadow blur extra rounding/.default=\pgfbs@radius,
+ /tikz/shadow blur steps/.store in=\pgfbs@steps,
+ /tikz/shadow blur steps=4,
+ /tikz/shadow blur invert/.is if=pgfbs@invert@fading,
+ /tikz/shadow opacity/.store in=\pgfbs@opacity,
+ /tikz/shadow opacity=40,
+% \end{macrocode}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\begin{macro}{blur shadow}
+% The user level option |blur shadow| sets the
+% |shadow xshift|, |shadow yshift|, |shadow scale| options to
+% more useful defaults than the ones inherited from the shadows library.
+% It includes any options set in the |every shadow| style, and the
+% argument to |blur shadow|. Rendering the shadow is declared as a
+% |.preaction| on the path. \tikzname\ will take care of saving the
+% path for us.
+% \begin{macrocode}
+ /tikz/blur shadow/.style={
+ shadow scale=1,
+ shadow xshift=.5ex,
+ shadow yshift=-.5ex,
+ preaction=render blur shadow,
+ every shadow,
+ #1,
+ },
+% \end{macrocode}
+%\end{macro}
+% \begin{macro}{render blur shadow}
+% The following does the actual shadow rendering. After some preliminary
+% computation of dimensions, shifting and scaling is done using a
+% canvas transform. The actual blurring effect is done using a special fading.
+% Since PGF insists on centering every fading when it's constructed,
+% it has to be shifted back again when it's installed.
+% The shadow is painted by filling a large black rectangle using the
+% constructed fading.
+% \begin{macrocode}
+ /tikz/render blur shadow/.code={
+ \pgfbs@savebb
+ \global\advance\pgfbs@fading@count by 1\relax
+ \pgfsyssoftpath@getcurrentpath{\pgfbs@input@path}%
+ \pgfbs@compute@shadow@bbox
+ \pgfbs@process@rounding{\pgfbs@input@path}{\pgfbs@fadepath}%
+ \pgfbs@apply@canvas@transform
+ \colorlet{pstb@shadow@color}{white!\pgfbs@opacity!black}%
+ \ifpgfbs@invert@fading
+ \pgfdeclarefading{shadowfading-\the\pgfbs@fading@count}{\pgfbs@paint@invert@fading}%
+ \else
+ \pgfdeclarefading{shadowfading-\the\pgfbs@fading@count}{\pgfbs@paint@fading}%
+ \fi
+ \pgfsetfillcolor{black}%
+ \pgfsetfading{shadowfading-\the\pgfbs@fading@count}%
+ {\pgftransformshift{\pgfpoint{\pgfbs@midx}{\pgfbs@midy}}}%
+ \pgfbs@usebbox{fill}%
+ \pgfbs@restorebb
+ },
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfbs@savebb}
+% Shadow rendering works with a fading. For a fading to contain PGF code,
+% it must contain a |pgfpicture|. And nested |pgfpicture|s mess up the
+% bounding box of the surrounding picture. Which is why we save the
+% current picture bounding box at the beginning of the shadow code
+% and restore it at the end. Thanks go to Andrew Stacey for this!
+% \begin{macrocode}
+\def\pgfbs@savebb{%
+ \edef\pgfbs@restorebb{%
+ \global\pgf@picminx=\the\pgf@picminx\relax
+ \global\pgf@picmaxx=\the\pgf@picmaxx\relax
+ \global\pgf@picminy=\the\pgf@picminy\relax
+ \global\pgf@picmaxy=\the\pgf@picmaxy\relax
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\pgfbs@restorebb}
+% Executing |\pgfbs@savebb| sets this bounding box restoring macro
+% to something useful.
+% \begin{macrocode}
+\def\restorebb{}%
+% \end{macrocode}
+% \end{macro}
+%\begin{macro}{\pgfbs@process@rounding}
+% This macro prepares the path by taking care of all things having to do
+% with rounding. First, it applies extra rounding to the path if requested
+% by the |shadow blur extra rounding| option. Second, it removes all
+% rounding tokens in the path by calling the |\pgfprocessround| macro.
+% This is because rounding tokens don't work well with the fading code
+% for some reason or other.
+% |#1| must be a PGF soft path. |#2| must be a macro into which the resulting
+% soft path will be stored.
+% \begin{macrocode}
+\def\pgfbs@process@rounding#1#2{
+ \expandafter\ifx\pgfbs@extra@rounding\pgfutil@empty%
+ \pgfprocessround{#1}{#2}%
+ \else%
+ \pgfmathsetmacro\pgfbs@exrd@val{\pgfbs@extra@rounding}%
+ \pgfbs@roundpath{#1}{\pgfbs@exrd@val pt}%
+ \pgfsyssoftpath@getcurrentpath{\pgfbs@extraroundedpath}%
+ \pgfprocessround{\pgfbs@extraroundedpath}{#2}%
+ \fi%
+}
+% \end{macrocode}
+%\end{macro}
+% \begin{macro}{\pgfbs@roundpath}
+% |\pgfbs@roundpath{#1}{#2}| rounds every potential corner in path |#1|
+% with an inset of at least |#2|.
+% Corners that are already rounded in |#1| are either left intact if
+% their insets are $\geq$|#2|, or the insets are increased to |#2|.
+% Any rectangle tokens are resolved into moveto/lineto/closepath with rounding.
+% The result is appended to PGF's ``current path.''
+%
+% The code works by giving an appropriate definition for each of the PGF
+% soft path tokens and then executing the path.
+% \begin{macrocode}
+\def\pgfbs@roundpath#1#2{%
+ {%
+ \def\pgfbs@rp@skipround{%
+ \let\pgfbs@rp@possibleround\pgfbs@rp@insertround}%
+ \def\pgfbs@rp@insertround{\pgfsyssoftpath@specialround{#2}{#2}}%
+ \let\pgfbs@rp@possibleround\pgfbs@rp@insertround%
+ %
+ \def\pgfsyssoftpath@movetotoken##1##2{%
+ \pgfsyssoftpath@moveto{##1}{##2}}%
+ \def\pgfsyssoftpath@linetotoken##1##2{%
+ \pgfbs@rp@possibleround\pgfsyssoftpath@lineto{##1}{##2}}%
+ \def\pgfsyssoftpath@rectcornertoken##1##2##3##4##5{%
+ \pgf@xa=##1\relax%
+ \advance\pgf@xa by##4%
+ \pgf@ya=##2\relax%
+ \advance\pgf@ya by##5%
+ \pgfsyssoftpath@moveto{##1}{##2}%
+ \pgfbs@rp@possibleround%
+ \pgfsyssoftpath@lineto{\the\pgf@xa}{##2}%
+ \pgfbs@rp@possibleround%
+ \pgfsyssoftpath@lineto{\the\pgf@xa}{\the\pgf@ya}%
+ \pgfbs@rp@possibleround%
+ \pgfsyssoftpath@lineto{##1}{\the\pgf@ya}%
+ \pgfbs@rp@possibleround%
+ \pgfsyssoftpath@closepath}%
+ \def\pgfsyssoftpath@curvetosupportatoken%
+ ##1##2##3##4##5##6##7##8{%
+ \pgfbs@rp@possibleround%
+ \pgfsyssoftpath@curveto{##1}{##2}{##4}{##5}{##7}{##8}}%
+ \def\pgfsyssoftpath@closepathtoken##1##2{%
+ \pgfbs@rp@possibleround\pgfsyssoftpath@closepath}%
+ \def\pgfsyssoftpath@specialroundtoken##1##2{%
+ \pgfmathsetmacro\pgfbs@rp@ra{max(##1,#2)}%
+ \pgfmathsetmacro\pgfbs@rp@rb{max(##2,#2)}%
+ \pgfsyssoftpath@specialround%
+ {\pgfbs@rp@ra pt}{\pgfbs@rp@rb pt}%
+ \let\pgfbs@rp@possibleround\pgfbs@rp@skipround%
+ }
+ #1%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%\begin{macro}{\pgfbs@compute@shadow@bbox}
+%\begin{macro}{\pgfbs@minx}
+%\begin{macro}{\pgfbs@midx}
+%\begin{macro}{\pgfbs@maxx}
+%\begin{macro}{\pgfbs@miny}
+%\begin{macro}{\pgfbs@midy}
+%\begin{macro}{\pgfbs@maxy}
+%\begin{macro}{\pgfbs@shadow@bbox}
+% This macro figures out the bounding box of the shadow: it's the
+% same as the bounding box of the current path, but enlarged by
+% twice (for the inverse shadow) the blur radius in each direction. It also computes the
+% coordinates of the center of the bounding box. These are
+% stored in macros |\pgfbs@|\{|min|$\mid$|mid|$\mid$|max|\}\{|x|$\mid$|y|\}.
+% It also creates a soft path for the bounding box which is stored in
+% |\pgfbs@shadow@bbox|.
+% \begin{macrocode}
+\def\pgfbs@compute@shadow@bbox{%
+ \edef\pgfbs@minx{\the\pgf@pathminx}%
+ \edef\pgfbs@miny{\the\pgf@pathminy}%
+ \edef\pgfbs@maxx{\the\pgf@pathmaxx}%
+ \edef\pgfbs@maxy{\the\pgf@pathmaxy}%
+ \pgfmathsetmacro\pgfbs@midx{0.5*(\pgfbs@minx + \pgfbs@maxx)}%
+ \pgfmathsetmacro\pgfbs@midy{0.5*(\pgfbs@miny + \pgfbs@maxy)}%
+ \pgfmathsetmacro\pgfbs@minx{\pgfbs@minx - 2*\pgfbs@radius}%
+ \pgfmathsetmacro\pgfbs@miny{\pgfbs@miny - 2*\pgfbs@radius}%
+ \pgfmathsetmacro\pgfbs@maxx{\pgfbs@maxx + 2*\pgfbs@radius}%
+ \pgfmathsetmacro\pgfbs@maxy{\pgfbs@maxy + 2*\pgfbs@radius}%
+ \pgfmathsetmacro\pgfbs@wd{\pgfbs@maxx - \pgfbs@minx}%
+ \pgfmathsetmacro\pgfbs@ht{\pgfbs@maxy - \pgfbs@miny}%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
+ \pgfsyssoftpath@rect{\pgfbs@minx pt}{\pgfbs@miny pt}%
+ {\pgfbs@wd pt}{\pgfbs@ht pt}%
+ \pgfsyssoftpath@getcurrentpath{\pgfbs@shadow@bbox}%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
+}
+% \end{macrocode}
+%\end{macro}
+%\end{macro}\end{macro}\end{macro}
+%\end{macro}\end{macro}\end{macro}
+%\end{macro}
+%\begin{macro}{\pgfbs@set@fading@pic@bbox}
+
+% Set the bounding box of the fading picture painted by
+% |\pgfbs@paint@fading|. Normally, the bounding box is updated
+% automatically, but this doesn't happen when PGF's soft paths are
+% used. The code that applies a fading needs the dimensions
+% of the fading to be correct. So we explicitly set the picture
+% bounding box according to the previously computed values.
+% Thanks again to Andrew Stacey for pointing out this subtlety!
+%
+% \begin{macrocode}
+\def\pgfbs@set@fading@pic@bbox{
+ \global\pgf@picminx=\pgfbs@minx pt\relax
+ \global\pgf@picminy=\pgfbs@miny pt\relax
+ \global\pgf@picmaxx=\pgfbs@maxx pt\relax
+ \global\pgf@picmaxy=\pgfbs@maxy pt\relax
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfbs@usefadepath}
+% The code of the |render blur shadow| option stores the pre-processed
+% soft path into the macro |\pgfbs@fadepath|. This macro `uses'
+% this path by executing |\pgfusepath{#1}| on it.
+%
+% \begin{macrocode}
+\def\pgfbs@usefadepath#1{%
+ \pgfsyssoftpath@setcurrentpath{\pgfbs@fadepath}%
+ \pgfsyssoftpath@flushcurrentpath%
+ \pgfusepath{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfbs@usebbox}
+% This is similar to the previous macro, but it `uses' the bounding box
+% path.
+% \begin{macrocode}
+\def\pgfbs@usebbox#1{%
+ \pgfsyssoftpath@setcurrentpath{\pgfbs@shadow@bbox}%
+ \pgfsyssoftpath@flushcurrentpath%
+ \pgfusepath{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfbs@usefadeandbbox}
+% This is similar to the previous macros, but it `uses' both the fading path and the bounding box
+% path.
+% \begin{macrocode}
+\def\pgfbs@usefadeandbbox#1{%
+ \let\pgfbs@temppath\pgfbs@fadepath
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\pgfbs@temppath\expandafter\expandafter\expandafter{\expandafter\pgfbs@temppath\pgfbs@shadow@bbox}%
+ \pgfsyssoftpath@setcurrentpath{\pgfbs@temppath}%
+ \pgfsyssoftpath@flushcurrentpath%
+ \pgfusepath{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfbs@apply@canvas@transform}
+% This achieves the scaling and shifting of the shadow. It is done by a
+% canvas transform to avoid iterating through a soft path and transforming
+% many coordinates inside \TeX. Scaling is `around' the bounding box
+% mid point computed by |\pgfbs@compute@shadow@bbox|.
+% \begin{macrocode}
+\def\pgfbs@apply@canvas@transform{
+ \pgflowlevel{
+ \pgftransformshift{\pgfpoint{\pgfbs@midx}{\pgfbs@midy}}
+ \pgftransformscale{\pgfkeysvalueof{/tikz/shadow scale}}
+ \pgftransformshift{\pgfpoint%
+ {\pgfkeysvalueof{/tikz/shadow xshift}-\pgfbs@midx}
+ {\pgfkeysvalueof{/tikz/shadow yshift}-\pgfbs@midy}
+ }
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfbs@paint@fading}
+% This paints the actual fading picture. It works by repeatedly
+% drawing the |\pgfbs@fadepath| with different line widths and
+% different shades of gray, leading to different opacity. First, the
+% outer part of the fading is drawn. Then, remaining operations
+% are clipped to the inside of the path. Next, the path is filled with
+% the shadow opacity. Finally, the inner part of the fading is drawn.
+% As mentioned previously, the bounding box needs to be set explicitly.
+% \begin{macrocode}
+\def\pgfbs@paint@fading{
+ \pgfpicture
+ \pgfsetbaseline{\pgf@picminy}%
+ % fix bounding box.
+ \pgfbs@set@fading@pic@bbox
+ % compute increments for line width and opacity
+ \pgfmathsetmacro\pgfbs@op@step{50/\pgfbs@steps}
+ \pgfmathsetmacro\pgfbs@wth@step{4*\pgfbs@radius/(2*\pgfbs@steps-1)}
+ % draw the outer part of the fading,
+ % starting with lightest, outermost line
+ \pgfsetroundjoin
+ \pgfmathsetmacro\pgfbs@max@i{\pgfbs@steps-2}
+ \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
+ \pgfmathsetmacro\pgfbs@op{100-0.5*\pgfbs@op@step}
+ \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
+ \pgfsetlinewidth{\pgfbs@wth pt}
+ \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
+ \pgfbs@usefadepath{stroke}
+ \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
+ \global\let\pgfbs@wth=\pgfbs@wth
+ \pgfmathsetmacro\pgfbs@op{\pgfbs@op-\pgfbs@op@step}
+ \global\let\pgfbs@op=\pgfbs@op
+ }
+ % clip to inside of path
+ \scope
+ \pgfbs@usefadepath{clip}
+ % fill inside with final darkest shadow color
+ \pgfsetfillcolor{pstb@shadow@color}
+ \pgfbs@usebbox{fill}
+ % draw the inner part of the fading,
+ % starting with the darkest, innermost line
+ \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
+ \pgfmathsetmacro\pgfbs@op{0.5*\pgfbs@op@step}
+ \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
+ \pgfsetlinewidth{\pgfbs@wth pt}
+ \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
+ \pgfbs@usefadepath{stroke}
+ \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
+ \global\let\pgfbs@wth=\pgfbs@wth
+ \pgfmathsetmacro\pgfbs@op{\pgfbs@op+\pgfbs@op@step}
+ \global\let\pgfbs@op=\pgfbs@op
+ }
+ \endscope
+ % a final stroke to hide clip/antialiasing artifcats
+ \pgfsetstrokecolor{black!50!pstb@shadow@color}
+ \pgfsetlinewidth{0.5*\pgfbs@wth@step}
+ \pgfbs@usefadepath{stroke}
+ \endpgfpicture
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\pgfbs@paint@invert@fading}
+% This is an inverse fading.
+% \begin{macrocode}
+\def\pgfbs@paint@invert@fading{
+ \pgfpicture
+ \pgfsetbaseline{\pgf@picminy}%
+ % fix bounding box.
+ \pgfbs@set@fading@pic@bbox
+ % compute increments for line width and opacity
+ \pgfmathsetmacro\pgfbs@op@step{50/\pgfbs@steps}
+ \pgfmathsetmacro\pgfbs@wth@step{4*\pgfbs@radius/(2*\pgfbs@steps-1)}
+ % draw the outer part of the fading,
+ % starting with lightest, outermost line
+ \pgfsetroundjoin
+ \pgfmathsetmacro\pgfbs@max@i{\pgfbs@steps-2}
+ \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
+ \pgfmathsetmacro\pgfbs@op{0.5*\pgfbs@op@step}
+ \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
+ \pgfsetlinewidth{\pgfbs@wth pt}
+ \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
+ \pgfbs@usefadepath{stroke}
+ \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
+ \global\let\pgfbs@wth=\pgfbs@wth
+ \pgfmathsetmacro\pgfbs@op{\pgfbs@op+\pgfbs@op@step}
+ \global\let\pgfbs@op=\pgfbs@op
+ }
+ % clip to inside of path
+ \scope
+ \pgfseteorule
+ \pgfbs@usefadeandbbox{clip}
+ % fill inside with final darkest shadow color
+ \pgfsetfillcolor{pstb@shadow@color}
+ \pgfbs@usebbox{fill}
+ \endscope
+ \scope
+ \pgfbs@usefadepath{clip}
+ % draw the inner part of the fading,
+ % starting with the darkest, innermost line
+ \pgfmathsetmacro\pgfbs@wth{2*\pgfbs@radius}
+ \pgfmathsetmacro\pgfbs@op{100-0.5*\pgfbs@op@step}
+ \foreach \pgfbs@i in {0,...,\pgfbs@max@i} {
+ \pgfsetlinewidth{\pgfbs@wth pt}
+ \pgfsetstrokecolor{black!\pgfbs@op!pstb@shadow@color}
+ \pgfbs@usefadepath{stroke}
+ \pgfmathsetmacro\pgfbs@wth{\pgfbs@wth-\pgfbs@wth@step}
+ \global\let\pgfbs@wth=\pgfbs@wth
+ \pgfmathsetmacro\pgfbs@op{\pgfbs@op-\pgfbs@op@step}
+ \global\let\pgfbs@op=\pgfbs@op
+ }
+ \endscope
+ % a final stroke to hide clip/antialiasing artifcats
+ \pgfsetstrokecolor{black!50!pstb@shadow@color}
+ \pgfsetlinewidth{0.5*\pgfbs@wth@step}
+ \pgfbs@usefadepath{stroke}
+ \endpgfpicture
+}
+%</texfile>
+% \end{macrocode}
+%\end{macro}
+%
+% \Finale
+%
diff --git a/graphics/pgf/contrib/pgf-blur/pgf-blur.pdf b/graphics/pgf/contrib/pgf-blur/pgf-blur.pdf
new file mode 100644
index 0000000000..d4fc98e843
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-blur/pgf-blur.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-cmykshadings/README.md b/graphics/pgf/contrib/pgf-cmykshadings/README.md
new file mode 100644
index 0000000000..ecb448ff59
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-cmykshadings/README.md
@@ -0,0 +1,94 @@
+# pgf-cmykshadings — Support for CMYK and grayscale shadings in PGF/TikZ
+
+The `pgf-cmykshadings` package provides support for CMYK and grayscale shadings
+for the `pgf` package. By default `pgf` only supports RGB shadings.
+`pgf-cmykshadings` attempts to produce shadings consistent with the currently
+selected `xcolor` colour model. The `rgb`, `cmyk`, and `gray` colour models
+from the `xcolor` package are supported.
+
+## Installation from TeXLive or MiKTeX
+
+`pgf-cmykshadings` is in TeXLive and MiKTeX and can be installed in the usual
+way through your distribution. e.g., in TeXLive by running:
+
+```
+tlmgr install pgf-cmykshadings
+```
+
+## Installation from CTAN
+
+Download and unpack `pgf-cmykshadings.zip` from CTAN at
+https://ctan.org/pkg/pgf-cmykshadings
+
+Change to the `pgf-cmykshadings` directory, then run:
+
+```
+tex pgf-cmykshadings.ins
+```
+
+to generate the style file (`pgf-cmykshadigns.sty`) and driver files
+(`pgfsys-cmykshadings-*.def`).
+
+Copy these generated files to `$TEXMFHOME/tex/latex/pgf-cmykshadings/` and
+`pgf-cmykshadings.pdf` to `$TEXMFHOME/doc/latex/pgf-cmykshadings/`.
+
+You can find `$TEXMFHOME` by running:
+
+```
+kpsewhich -var-value=TEXMFHOME
+```
+
+## Installation from Git Source
+
+`pgf-cmykshadings` uses the `l3build` system.
+
+Clone the git repository using:
+
+```
+git clone https://github.com/dcpurton/pgf-cmykshadings.git
+```
+
+Change to the `pgf-cmykshadings` directory, and then the package and
+documentation can be installed by running:
+
+```
+l3build install --full
+```
+
+## Licence
+
+```
+Copyright (c) 2018 David Purton <dcpurton@marshwiggle.net>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3c of this license
+or (at your option) any later version. The latest version of this
+license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work is "maintained" (as per the LPPL maintenance status)
+by David Purton.
+
+This work consists of the files pgf-cmykshadings.ins,
+pgf-cmykshadings.dtx, README.md, and the derived files
+ - pgf-cmykshadings.sty
+ - pgfsys-cmykshadings-pdftex.def
+ - pgfsys-cmykshadings-xetex.def
+ - pgfsys-cmykshadings-luatex.def
+ - pgfsys-cmykshadings-dvipdfmx.def
+ - pgfsys-cmykshadings-dvipdfm.def
+ - pgfsys-cmykshadings-dvips.def
+ - pgfsys-cmykshadings-textures.def
+ - pgfsys-cmykshadings-vtex.def
+ - pgfsys-cmykshadings-common-postscript.def
+ - pgf-cmykshadings.pdf
+
+
+Substantial parts of the code for this package are taken from the pgf package
+file pgfcoreshade.code.tex, along with the driver files pgfsys-*.def, copyright
+(c) 2006 Till Tantau and then slightly modified to support CMYK and grayscale
+shadings.
+```
+
diff --git a/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.dtx b/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.dtx
new file mode 100644
index 0000000000..4690901981
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.dtx
@@ -0,0 +1,2059 @@
+% \iffalse meta-comment
+%
+%Copyright (c) 2018 David Purton <dcpurton@marshwiggle.net>
+%
+%This work may be distributed and/or modified under the conditions of
+%the LaTeX Project Public License, either version 1.3c of this license
+%or (at your option) any later version. The latest version of this
+%license is in
+% http://www.latex-project.org/lppl.txt
+%and version 1.3c or later is part of all distributions of LaTeX
+%version 2005/12/01 or later.
+%
+%<*driver>
+\documentclass[a4paper]{l3doc}
+\usepackage{microtype}
+\usepackage{pgf-cmykshadings}
+\usepackage{tikz}
+\usepackage{listings}
+\lstset{frame=single,basicstyle=\footnotesize\ttfamily}
+\begin{document}
+\DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v1.0}{2018/10/17}{First public release}
+%
+% \title{The \pkg{pgf-cmykshadings} package}
+% \author{David Purton\thanks{Email: \url{dcpurton@marshwiggle.net}}}
+% \date{2018/10/24 v1.1a}
+%
+% \maketitle
+%
+% \begin{abstract}
+% The \pkg{pgf-cmykshadings} package provides support for CMYK and grayscale
+% shadings for the \pkg{pgf} package. By default \pkg{pgf} only supports RGB
+% shadings. \pkg{pgf-cmykshadings} attempts to produce shadings consistent
+% with the currently selected \pkg{xcolor} colour model. The |rgb|, |cmyk|,
+% and |gray| colour models from the \pkg{xcolor} package are supported.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \begin{documentation}
+%
+% \section{Introduction}
+%
+% The \pkg{pgf} package, and other packages built on top of it, only support RGB
+% shadings (colour gradients). This means that printing applications requiring
+% CMYK shadings can not easily be produced. It also can lead to unexpected
+% colour mismatches in documents when attempting to define a shading from
+% colours defined in CMYK. This can occur when the |natural| colour model of the
+% \pkg{xcolor} package is in use and colours like cyan and magenta are defined
+% as CMYK. An attempt to produce a shading using these colours will be
+% silently converted to RGB, but RGB cyan and RGB magenta look significantly
+% different from CMYK cyan and magenta. This is a significant cause of
+% confusion for end users.
+%
+% The following example illustrates this problem and the corresponding solution
+% provided by the \pkg{pgf-cmykshadings} package.
+%
+% \begin{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \fill[cyan] (0,0) rectangle (1,1);
+ \shade[left color=cyan, right color=magenta]
+ (1.25,0) rectangle (3.75,1);
+ \fill[magenta] (4,0) rectangle (5,1);
+\end{tikzpicture}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \begin{minipage}{0.45\linewidth}
+% \pkg{pgf} behaviour:\medskip
+%
+% \pgfcmykshadingdefaultfalse
+% \begin{tikzpicture}
+% \fill[cyan] (0,0) rectangle (1,1);
+% \shade[left color=cyan, right color=magenta]
+% (1.25,0) rectangle (3.75,1);
+% \fill[magenta] (4,0) rectangle (5,1);
+% \end{tikzpicture}
+% \end{minipage}\hfill
+% \begin{minipage}{0.45\linewidth}
+% \pkg{pgf-cmykshadings} behaviour:\medskip
+%
+% \pgfcmykshadingdefaulttrue
+% \begin{tikzpicture}
+% \fill[cyan] (0,0) rectangle (1,1);
+% \shade[left color=cyan, right color=magenta]
+% (1.25,0) rectangle (3.75,1);
+% \fill[magenta] (4,0) rectangle (5,1);
+% \end{tikzpicture}
+% \end{minipage}
+% \end{quote}
+%
+% \section{Acknowledgements}
+%
+% Substantial parts of the code for the \pkg{pgf-cmykshadings} package are
+% taken from the \pkg{pgf} package file |pgfcoreshade.code.tex| along with the
+% driver files |pgfsys-*.def| copyright © 2006 Till Tantau and then slightly
+% modified to support CMYK and grayscale shadings.
+%
+% \section{Bug Reports and Feature Requests}
+%
+% Bug reports and feature requests can be made at the \pkg{pgf-cmykshadings}
+% package GitHub respoitory. See
+% \url{https://github.com/dcpurton/pgf-cmykshadings}.
+%
+% \section{Documentation}
+%
+% \subsection{Basic Usage}
+%
+% All that is required to use CMYK shadings instead of RGB shadings is to
+% include the package in your document preamble:
+% \begin{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\usepackage{pgf-cmykshadings}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+% \end{quote}
+% However, there are some caveats in using the package, which are outlined
+% below.
+%
+% \subsubsection{Package options}
+%
+% \pkg{pgd-cmykshadings} supports the following package options:
+%
+% \begin{description}
+% \item[\mdseries |cmyk|] (default) to use CMYK shadings when the \pkg{xcolor}
+% package |natural| colour model is in use.
+% \item[\mdseries |rgb|] to use RGB shadings when the \pkg{xcolor} package
+% |natural| colour model is in use.
+% \end{description}
+%
+% \subsubsection{Load order}
+%
+% \pkg{pgf-cmykshadings} should be loaded \emph{before} any shadings are defined
+% otherwise these will be defined as RGB. This means you should load
+% \pkg{pgf-cmykshadings} before (for example) \pkg{tikz} and \pkg{beamer}.
+%
+% If you want to pass custom options to \pkg{xcolor} (e.g., a colour model or
+% set of named colours), you should load \pkg{pgf-cmykshadings} \emph{after}
+% \pkg{xcolor} or use \cs{PassOptionsToPackage} \emph{before} loading
+% \pkg{pgf-cmykshadings}.
+%
+% \subsubsection{Colour models}
+%
+% \pkg{pgf-cmykshadings} attempts to produce shadings consistent with the
+% currently selected \pkg{xcolor} package colour model. The |rgb|, |cmyk|, and
+% |gray| colour models from the \pkg{xcolor} package are supported.
+%
+% \textbf{Note:} The colour model chosen for a shading is based on the
+% \pkg{xcolor} colour model \emph{at the time the shading is created}. This is
+% either when \cs{pgfdeclare*shading} is called with no optional argument or
+% when \cs{pgfuseshading} is called if \cs{pgfdeclare*shading} was called with
+% an optional argument.
+%
+% If the \pkg{xcolor} package |natural| colour model is in use then the shading
+% colour model will be CMYK by default (equivalent to passing the |cmyk| option
+% to the \pkg{pgf-cmykshadings} package). RGB shadings can be output by default
+% instead by passing the |rgb| option to the \pkg{pgf-cmykshadings} package.
+%
+% In practice this means that if you are using the |natural| colour model of the
+% \pkg{xcolor} package you can still get mismatched colours if you, for example,
+% create a shading from green (which is defined as RGB) to magenta (which is
+% defined as CMYK). The shading has to pick one colour model and will look
+% different to one of the solid colours.
+%
+% For this reason it is recommended to always load the \pkg{xcolor} package
+% before the \pkg{pgf-cmykshadings} package with either the |rgb|, |cmyk|, or
+% |gray| options to avoid colour surprises.
+%
+% \begin{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \fill[green] (0,0) rectangle (1,1);
+ \shade[left color=green, right color=magenta]
+ (1.25,0) rectangle (3.75,1);
+ \fill[magenta] (4,0) rectangle (5,1);
+\end{tikzpicture}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \begin{minipage}{0.45\linewidth}
+% \pkg{xcolor} |natural| colour model:\medskip
+%
+% \begin{tikzpicture}
+% \fill[green] (0,0) rectangle (1,1);
+% \shade[left color=green, right color=magenta]
+% (1.25,0) rectangle (3.75,1);
+% \fill[magenta] (4,0) rectangle (5,1);
+% \end{tikzpicture}
+% \end{minipage}\hfill
+% \begin{minipage}{0.45\linewidth}
+% \pkg{xcolor} |cmyk| colour model:\medskip
+%
+% \selectcolormodel{cmyk}
+% \begin{tikzpicture}
+% \fill[green] (0,0) rectangle (1,1);
+% \shade[left color=green, right color=magenta]
+% (1.25,0) rectangle (3.75,1);
+% \fill[magenta] (4,0) rectangle (5,1);
+% \end{tikzpicture}
+% \end{minipage}\medskip
+%
+% \begin{minipage}{0.45\linewidth}
+% \pkg{xcolor} |rgb| colour model:\medskip
+%
+% \selectcolormodel{rgb}
+% \begin{tikzpicture}
+% \fill[green] (0,0) rectangle (1,1);
+% \shade[left color=green, right color=magenta]
+% (1.25,0) rectangle (3.75,1);
+% \fill[magenta] (4,0) rectangle (5,1);
+% \end{tikzpicture}
+% \end{minipage}\hfill
+% \begin{minipage}{0.45\linewidth}
+% \pkg{xcolor} |gray| colour model:\medskip
+%
+% \selectcolormodel{gray}
+% \begin{tikzpicture}
+% \fill[green] (0,0) rectangle (1,1);
+% \shade[left color=green, right color=magenta]
+% (1.25,0) rectangle (3.75,1);
+% \fill[magenta] (4,0) rectangle (5,1);
+% \end{tikzpicture}
+% \end{minipage}
+% \end{quote}
+%
+% \subsubsection{Functional shadings}
+%
+% By nature, the PostScript® code used to generate functional shadings must
+% output either RGB or CMYK data. For this reason,
+% \cs{pgfdeclarefunctionalshading} is \emph{not} portable across colour models.
+%
+% Take particular care that the same colour model is in use at declaration time
+% and use time for functional shadings declared with an optional argument as
+% otherwise the PostScript® data will not match the declared colour space and
+% you will end up with a malformed PDF.
+%
+% This also means that you should \emph{not} use the functional shadings from
+% the \pkg{tikz} shading library (|bilinear interpolation|, |color wheel|,
+% |color wheel black center|, |color wheel white center|, and |Mandelbrot set|)
+% except when the \pkg{xcolor} |rgb| colour model is in use, otherwise you will
+% end up with a malformed PDF.
+%
+% Having said this, it \emph{is} possible to create portable functional shadings
+% by providing conditional code to append colour transformations to the
+% PostScript® data. A variety of \cs{pgffuncshading*to*} (e.g.,
+% \cs{pgffuncshadingrgbtocmyk}) macros along with \cs{ifpgfshadingmodel*} (e.g.,
+% \cs{ifpgfshadingmodelcmyk}) conditionals are provided to assist with these
+% transformations.
+%
+% \begin{quote}
+% \iffalse
+%<*example>
+% \fi
+\begin{lstlisting}
+\pgfdeclarefunctionalshading[black]{twospots}
+ {\pgfpointorigin}{\pgfpoint{3.5cm}{3.5cm}}{}{
+ 2 copy
+ 45 sub dup mul exch
+ 40 sub dup mul 0.5 mul add sqrt
+ dup mul neg 1.0005 exch exp 1.0 exch sub
+ 3 1 roll
+ 70 sub dup mul .5 mul exch
+ 70 sub dup mul add sqrt
+ dup mul neg 1.002 exch exp 1.0 exch sub
+ 1.0 3 1 roll
+ \ifpgfshadingmodelcmyk
+ \pgffuncshadingrgbtocmyk
+ \fi
+ \ifpgfshadingmodelgray
+ \pgffuncshadingrgbtogray
+ \fi
+}
+\end{lstlisting}
+% \iffalse
+%</example>
+% \fi
+%
+% \pgfdeclarefunctionalshading[black]{twospots}
+% {\pgfpointorigin}{\pgfpoint{3.5cm}{3.5cm}}{}{
+% 2 copy
+% 45 sub dup mul exch
+% 40 sub dup mul 0.5 mul add sqrt
+% dup mul neg 1.0005 exch exp 1.0 exch sub
+% 3 1 roll
+% 70 sub dup mul .5 mul exch
+% 70 sub dup mul add sqrt
+% dup mul neg 1.002 exch exp 1.0 exch sub
+% 1.0 3 1 roll
+% \ifpgfshadingmodelcmyk
+% \pgffuncshadingrgbtocmyk
+% \fi
+% \ifpgfshadingmodelgray
+% \pgffuncshadingrgbtogray
+% \fi
+% }
+%
+% \begin{minipage}{0.3\linewidth}
+% \pkg{xcolor} |cmyk| model:\medskip
+%
+% \selectcolormodel{cmyk}
+% \pgfuseshading{twospots}
+% \end{minipage}\hfill
+% \begin{minipage}{0.3\linewidth}
+% \pkg{xcolor} |rgb| model:\medskip
+%
+% \selectcolormodel{rgb}
+% \pgfuseshading{twospots}
+% \end{minipage}\hfill
+% \begin{minipage}{0.3\linewidth}
+% \pkg{xcolor} |gray| model:\medskip
+%
+% \selectcolormodel{gray}
+% \pgfuseshading{twospots}
+% \end{minipage}
+% \end{quote}
+%
+%
+% \subsection{Main Interface}
+%
+% \subsubsection{Declaring shadings}
+%
+% The four standard \pkg{pgf} functions for declaring shadings are supported
+% as documented in the \pkg{pgf} manual.
+%
+% There is one extension provided by the \pkg{pgf-cmykshadings} package. It is
+% possible to specify CMYK colours directly in the colour specification
+% argument using a syntax analogous to the RGB, Gray, and named colours
+% already supported by the \pkg{pgf} package. i.e.,
+% |cmyk(|\meta{position}|)=(|\meta{C}|,|\meta{M}|,|\meta{Y}|,|\meta{K}|)|.
+%
+% Shadings declared \emph{without} an optional argument are created
+% immediately in the currently active \pkg{xcolor} colour model. Shadings
+% declared \emph{with} and optional argument are created at the time they are
+% actually used (using \cs{pgfuseshading}).
+%
+% \begin{function}{\pgfdeclarehorizontalshading}
+% \begin{syntax}
+% \cs{pgfdeclarehorizontalshading}\oarg{color list}\marg{shading name}\marg{shading height}\marg{color specification}
+% \end{syntax}
+% Declare a horizontal shading.
+% \end{function}
+%
+% \begin{function}{\pgfdeclareverticalshading}
+% \begin{syntax}
+% \cs{pgfdeclareverticalshading}\oarg{color list}\marg{shading name}\marg{shading width}\marg{color specification}
+% \end{syntax}
+% Declare a vertical shading.
+% \end{function}
+%
+% \begin{function}{\pgfdeclareradialshading}
+% \begin{syntax}
+% \cs{pgfdeclareradialshading}\oarg{color list}\marg{shading name}\marg{center point}\marg{color specification}
+% \end{syntax}
+% Declare a radial shading.
+% \end{function}
+%
+% \begin{function}{\pgfdeclarefunctionalshading}
+% \begin{syntax}
+% \cs{pgfdeclarefunctionalshading}\oarg{color list}\marg{shading name}\marg{lower left corner}\marg{upper right corner}\marg{init code}\marg{type 4 function}
+% \end{syntax}
+% Declare a functional shading.
+% \end{function}
+%
+% \subsubsection{Using shadings}
+%
+% Shadings are used as documented in the \pkg{pgf} manual.
+%
+% \begin{function}{\pgfuseshading}
+% \begin{syntax}
+% \cs{pgfuseshading}\marg{shading name}
+% \end{syntax}
+% Use a previously declared shading. If the specified shading was declared
+% with an optional argument, then the shading will be created at this point
+% in the currently active \pkg{xcolor} colour space.
+% \end{function}
+%
+% \begin{function}{\pgfshadepath}
+% \begin{syntax}
+% \cs{pgfshadepath}\marg{shading name}\marg{angle}
+% \end{syntax}
+% Shade the currently active \pkg{pgf} path using the specified shading at
+% the specified angle.
+% \end{function}
+%
+% \begin{function}{\pgfadditionalshadetransform}
+% \begin{syntax}
+% \cs{pgfadditionalshadetransform}\marg{transformation}
+% \end{syntax}
+% This command is used to specify an additional transformation that should
+% be applied to shadings when \cs{pgfshadepath} used.
+% \end{function}
+%
+% \subsubsection{Utility functions}
+%
+% The following functions are mainly useful for in declaring functional
+% shadings.
+%
+% \begin{function}{\pgfshadecolortorgb}
+% \begin{syntax}
+% \cs{pgfshadecolortorgb}\marg{color name}\marg{macro}
+% \end{syntax}
+% This command takes \meta{color name} as input and stores the colour's
+% red/green/blue components as real numbers between 0.0 and 1.0 separated by
+% spaces (which is exactly what you need if you want to push it on a stack)
+% in \meta{macro}. This macro can then be used inside the \meta{type 4
+% function} argument for \cs{pgfdeclarefunctionalshading}.
+%
+% In addition, three macros suffixed with |red|, |green| and |blue| are
+% defined, which store the individual components of \meta{color name}. These
+% can also be used in the \meta{type 4 function} argument.
+% \end{function}
+%
+% \begin{function}{\pgfshadecolortocmyk}
+% \begin{syntax}
+% \cs{pgfshadecolortocmyk}\marg{color name}\marg{macro}
+% \end{syntax}
+% This command is analogous to \cs{pgfshadecolortorgb}, but stores the
+% colour's cyan/magenta/yellow/black components. Four macros suffixed with
+% |cyan|, |magenta|, |yellow|, and |black| are also defined.
+% \end{function}
+%
+% \begin{function}{\pgfshadecolortogray}
+% \begin{syntax}
+% \cs{pgfshadecolortogray}\marg{color name}\marg{macro}
+% \end{syntax}
+% This command is analogous to \cs{pgfshadecolortorgb}, but stores the
+% colour's gray component. Although it's not needed, for consistency a
+% second macro suffixed with |gray| is also defined.
+% \end{function}
+%
+% \begin{function}{\pgffuncshadingrgbtocmyk}
+% \begin{syntax}
+% \cs{pgffuncshadingrgbtocmyk}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to convert the
+% top 3 elements on the stack from RGB to CMYK. In combination with the
+% \cs{ifpgfshadingmodelcmyk} conditional this macro can be used to make
+% functional shading declarations more portable across colour models.
+% \end{function}
+%
+% \begin{function}{\pgffuncshadingrgbtogray}
+% \begin{syntax}
+% \cs{pgffuncshadingrgbtogray}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to convert the
+% top 3 elements on the stack from RGB to grayscale. In combination with the
+% \cs{ifpgfshadingmodelgray} conditional this macro can be used to make
+% functional shading declarations more portable across colour models.
+% \end{function}
+%
+% \begin{function}{\pgffuncshadingcmyktorgb}
+% \begin{syntax}
+% \cs{pgffuncshadingcmyktorgb}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to convert the
+% top 4 elements on the stack from CMYK to RGB. In combination with the
+% \cs{ifpgfshadingmodelrgb} conditional this macro can be used to make
+% functional shading declarations more portable across colour models.
+% \end{function}
+%
+% \begin{function}{\pgffuncshadingcmyktogray}
+% \begin{syntax}
+% \cs{pgffuncshadingcmyktogray}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to convert the
+% top 4 elements on the stack from CMYK to grayscale. In combination with
+% the \cs{ifpgfshadingmodelgray} conditional this macro can be used to make
+% functional shading declarations more portable across colour models.
+% \end{function}
+%
+% \begin{function}{\pgffuncshadinggraytorgb}
+% \begin{syntax}
+% \cs{pgffuncshadinggraytorgb}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to convert the
+% top element on the stack from grayscale to RGB. In combination with the
+% \cs{ifpgfshadingmodelrgb} conditional this macro can be used to make
+% functional shading declarations more portable across colour models.
+% \end{function}
+%
+% \begin{function}{\pgffuncshadinggraytocmyk}
+% \begin{syntax}
+% \cs{pgffuncshadinggraytocmyk}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to convert the
+% top element on the stack from grayscale to CMYK. In combination with the
+% \cs{ifpgfshadingmodelcmyk} conditional this macro can be used to make
+% functional shading declarations more portable across colour models.
+% \end{function}
+%
+% \begin{function}{\ifpgfshadingmodelrgb}
+% \begin{syntax}
+% \cs{ifpgfshadingmodelrgb}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to test if the
+% \pkg{xcolor} colour model is |rgb| \emph{at the time the shading is
+% created}. This can be used to ensure that the data output in the
+% \meta{type 4 function} correctly matches the active colour model.
+% \end{function}
+%
+% \begin{function}{\ifpgfshadingmodelcmyk}
+% \begin{syntax}
+% \cs{ifpgfshadingmodelcmyk}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to test if the
+% \pkg{xcolor} colour model is |cmyk| \emph{at the time the shading is
+% created}. This can be used to ensure that the data output in the
+% \meta{type 4 function} correctly matches the active colour model.
+% \end{function}
+%
+% \begin{function}{\ifpgfshadingmodelgray}
+% \begin{syntax}
+% \cs{ifpgfshadingmodelgray}
+% \end{syntax}
+% Within the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}, this command can be used to test if the
+% \pkg{xcolor} colour model is |gray| \emph{at the time the shading is
+% created}. This can be used to ensure that the data output in the
+% \meta{type 4 function} correctly matches the active colour model.
+% \end{function}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{Implementation}
+%
+% \subsection{Main Package}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesPackage{pgf-cmykshadings}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{pgf}
+% \end{macrocode}
+%
+% \noindent Replace dependence on \cs{pgf@convertrgbstring} and
+% \cs{pgf@rgbconv} with generic macros \cs{pgf@convertstring} and
+% \cs{pgf@conv}.
+%
+% \begin{macrocode}
+\def\pgf@parsefunc#1{%
+ \edef\temp{{#1}}%
+ \expandafter\pgf@convertstring\temp%
+ \edef\temp{{\pgf@conv}}%
+ \expandafter\pgf@@parsefunc\temp}
+% \end{macrocode}
+%
+% \noindent Replace RGB parsing macros with new macros selected on the basis
+% of the current colour space (\cs{pgf@shading@mode}).
+%
+% \begin{macrocode}
+\def\pgf@@parsefunc#1{%
+ \let\pgf@bounds=\pgfutil@empty%
+ \let\pgf@funcs=\pgfutil@empty%
+ \let\pgf@psfuncs=\pgfutil@empty%
+ \let\pgf@encode=\pgfutil@empty%
+ \let\pgf@sys@shading@ranges=\pgfutil@empty%
+ \pgf@sys@shading@range@num=0\relax%
+ \csname pgf@parsefirst\pgf@shading@model\endcsname[#1; ]%
+ \csname pgf@parselastdom\pgf@shading@model\endcsname[#1; ]%
+ \csname pgf@parsemid\pgf@shading@model\endcsname[#1; ]%
+ \ifx\pgf@bounds\pgfutil@empty%
+ \edef\pgf@pdfparseddomain{0 1}%
+ \edef\pgf@pdfparsedfunction{\pgf@singlefunc\space}%
+ \else%
+ \edef\pgf@pdfparseddomain{\pgf@doma\space\pgf@domb}%
+ \edef\pgf@pdfparsedfunction{%
+ << /FunctionType 3 /Domain [\pgf@doma\space\pgf@domb] /Functions
+ [\pgf@funcs\space] /Bounds [\pgf@bounds] /Encode [0 1 \pgf@encode]
+ >> }% <<
+ \fi%
+ \xdef\pgf@psfuncs{\pgf@psfuncs}%
+ }
+% \end{macrocode}
+%
+% \noindent Define RGB parsing macros.
+%
+% \begin{macrocode}
+\let\pgf@parsefirstrgb\pgf@parsefirst
+\let\pgf@parselastdomrgb\pgf@parselastdom
+\let\pgf@parsemidrgb\pgf@parsemid
+\let\pgf@parserestrgb\pgf@parserest
+% \end{macrocode}
+%
+% \noindent Define new CMYK parsing macros.
+%
+% \begin{macrocode}
+\def\pgf@parsefirstcmyk[cmyk(#1)=(#2,#3,#4,#5)#6]{%
+ \pgfmathsetlength\pgf@x{#1}%
+ \edef\pgf@sys@shading@start@pos{\the\pgf@x}%
+ \pgf@sys@bp@correct\pgf@x%
+ \edef\pgf@doma{\pgf@sys@tonumber{\pgf@x}}%
+ \edef\pgf@prevx{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@getcmyktuplewithmixin{#2}{#3}{#4}{#5}%
+ \edef\pgf@sys@shading@start@cmyk{\pgf@sys@cmyk}%
+ \let\pgf@sys@prevcolor=\pgf@sys@shading@start@cmyk%
+ \let\pgf@sys@prevpos=\pgf@sys@shading@start@pos%
+ \edef\pgf@prevcolor{\pgf@cmyk}%
+ \edef\pgf@firstcolor{\pgf@cmyk}}
+\def\pgf@parselastdomcmyk[cmyk(#1)=(#2,#3,#4,#5); {%
+ \pgfutil@ifnextchar]{%
+ \pgfmathsetlength\pgf@x{#1}%
+ \edef\pgf@sys@shading@end@pos{\the\pgf@x}%
+ \pgf@max=\pgf@x\relax%
+ \pgf@sys@bp@correct\pgf@x%
+ \edef\pgf@domb{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@getcmyktuplewithmixin{#2}{#3}{#4}{#5}%
+ \edef\pgf@sys@shading@end@cmyk{\pgf@sys@cmyk}%
+ \pgfutil@gobble}{\pgf@parselastdomcmyk[}}
+\def\pgf@parsemidcmyk[cmyk(#1)=(#2,#3,#4,#5); {\pgf@parserestcmyk[}
+\def\pgf@parserestcmyk[cmyk(#1)=(#2,#3,#4,#5); {%
+ \advance\pgf@sys@shading@range@num by1\relax%
+ \pgfutil@ifnextchar]{%
+ \pgf@getcmyktuplewithmixin{#2}{#3}{#4}{#5}%
+ \edef\pgf@singlefunc{\space%
+ << /FunctionType 2 /Domain [0 1] /C0
+ [\pgf@prevcolor] /C1 [\pgf@cmyk] /N 1 >> }% <<
+ \edef\pgf@funcs{\pgf@funcs\space%
+ << /FunctionType 2 /Domain [\pgf@doma\space\pgf@domb] /C0
+ [\pgf@prevcolor] /C1 [\pgf@cmyk] /N 1 >> }% <<
+ \edef\pgf@psfuncs{\pgf@prevx\space
+ \pgf@cmyk\space \pgf@prevcolor\space pgfshade \pgf@psfuncs}%
+ \pgfmathsetlength\pgf@x{#1}%
+ \edef\pgf@sys@shading@ranges{\pgf@sys@shading@ranges{%
+ {\pgf@sys@prevpos}{\the\pgf@x}{\pgf@sys@prevcolor}{\pgf@sys@cmyk}}}%
+ \edef\pgf@sys@prevpos{\the\pgf@x}%
+ \let\pgf@sys@prevcolor=\pgf@sys@cmyk%
+ \pgfutil@gobble}{%
+ \pgfmathsetlength\pgf@x{#1}%
+ \pgf@getcmyktuplewithmixin{#2}{#3}{#4}{#5}%
+ \edef\pgf@sys@shading@ranges{\pgf@sys@shading@ranges{%
+ {\pgf@sys@prevpos}{\the\pgf@x}{\pgf@sys@prevcolor}{\pgf@sys@cmyk}}}%
+ \edef\pgf@sys@prevpos{\the\pgf@x}%
+ \let\pgf@sys@prevcolor=\pgf@sys@cmyk%
+ \edef\pgf@psfuncs{\pgf@prevx\space \pgf@cmyk\space
+ \pgf@prevcolor\space pgfshade \pgf@psfuncs}%
+ \pgf@sys@bp@correct\pgf@x%
+ \edef\pgf@prevx{\pgf@sys@tonumber{\pgf@x}}%
+ \edef\pgf@bounds{\pgf@bounds\space\pgf@sys@tonumber{\pgf@x}}%
+ \edef\pgf@encode{\pgf@encode\space0 1}%
+ \edef\pgf@singlefunc{\space%
+ << /FunctionType 2 /Domain [0 1] /C0
+ [\pgf@prevcolor] /C1 [\pgf@cmyk] /N 1 >> }% <<
+ \edef\pgf@funcs{\pgf@funcs\space%
+ << /FunctionType 2 /Domain [\pgf@doma\space\pgf@domb] /C0
+ [\pgf@prevcolor] /C1 [\pgf@cmyk] /N 1 >> }% <<
+ \edef\pgf@prevcolor{\pgf@cmyk}%
+ \pgf@parserestcmyk[}}
+\def\pgf@getcmyktuplewithmixin#1#2#3#4{%
+ \pgfutil@definecolor{pgfshadetemp}{cmyk}{#1,#2,#3,#4}%
+ \pgfutil@ifundefined{applycolormixins}{}{\applycolormixins{pgfshadetemp}}%
+ \pgfutil@extractcolorspec{pgfshadetemp}{\pgf@tempcolor}%
+ \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{cmyk}{\pgf@cmykcolor}%
+ \expandafter\pgf@getcmyk@@\pgf@cmykcolor!}
+\def\pgf@getcmyk@@#1,#2,#3,#4!{%
+ \def\pgf@cmyk{#1 #2 #3 #4}%
+ \def\pgf@sys@cmyk{{#1}{#2}{#3}{#4}}%
+}
+% \end{macrocode}
+%
+% \noindent Define new grayscale parsing macros.
+%
+% \begin{macrocode}
+\def\pgf@parsefirstgray[gray(#1)=(#2)#3]{%
+ \pgfmathsetlength\pgf@x{#1}%
+ \edef\pgf@sys@shading@start@pos{\the\pgf@x}%
+ \pgf@sys@bp@correct\pgf@x%
+ \edef\pgf@doma{\pgf@sys@tonumber{\pgf@x}}%
+ \edef\pgf@prevx{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@getgraytuplewithmixin{#2}%
+ \edef\pgf@sys@shading@start@gray{\pgf@sys@gray}%
+ \let\pgf@sys@prevcolor=\pgf@sys@shading@start@gray%
+ \let\pgf@sys@prevpos=\pgf@sys@shading@start@pos%
+ \edef\pgf@prevcolor{\pgf@gray}%
+ \edef\pgf@firstcolor{\pgf@gray}}
+\def\pgf@parselastdomgray[gray(#1)=(#2); {%
+ \pgfutil@ifnextchar]{%
+ \pgfmathsetlength\pgf@x{#1}%
+ \edef\pgf@sys@shading@end@pos{\the\pgf@x}%
+ \pgf@max=\pgf@x\relax%
+ \pgf@sys@bp@correct\pgf@x%
+ \edef\pgf@domb{\pgf@sys@tonumber{\pgf@x}}%
+ \pgf@getgraytuplewithmixin{#2}%
+ \edef\pgf@sys@shading@end@gray{\pgf@sys@gray}%
+ \pgfutil@gobble}{\pgf@parselastdomgray[}}
+\def\pgf@parsemidgray[gray(#1)=(#2); {\pgf@parserestgray[}
+\def\pgf@parserestgray[gray(#1)=(#2); {%
+ \advance\pgf@sys@shading@range@num by1\relax%
+ \pgfutil@ifnextchar]{%
+ \pgf@getgraytuplewithmixin{#2}%
+ \edef\pgf@singlefunc{\space%
+ << /FunctionType 2 /Domain [0 1] /C0
+ [\pgf@prevcolor] /C1 [\pgf@gray] /N 1 >> }% <<
+ \edef\pgf@funcs{\pgf@funcs\space%
+ << /FunctionType 2 /Domain [\pgf@doma\space\pgf@domb] /C0
+ [\pgf@prevcolor] /C1 [\pgf@gray] /N 1 >> }% <<
+ \edef\pgf@psfuncs{\pgf@prevx\space \pgf@gray\space
+ \pgf@prevcolor\space pgfshade \pgf@psfuncs}%
+ \pgfmathsetlength\pgf@x{#1}%
+ \edef\pgf@sys@shading@ranges{\pgf@sys@shading@ranges{%
+ {\pgf@sys@prevpos}{\the\pgf@x}{\pgf@sys@prevcolor}{\pgf@sys@gray}}}%
+ \edef\pgf@sys@prevpos{\the\pgf@x}%
+ \let\pgf@sys@prevcolor=\pgf@sys@gray%
+ \pgfutil@gobble}{%
+ \pgfmathsetlength\pgf@x{#1}%
+ \pgf@getgraytuplewithmixin{#2}%
+ \edef\pgf@sys@shading@ranges{\pgf@sys@shading@ranges{%
+ {\pgf@sys@prevpos}{\the\pgf@x}{\pgf@sys@prevcolor}{\pgf@sys@gray}}}%
+ \edef\pgf@sys@prevpos{\the\pgf@x}%
+ \let\pgf@sys@prevcolor=\pgf@sys@gray%
+ \edef\pgf@psfuncs{\pgf@prevx\space \pgf@gray\space
+ \pgf@prevcolor\space pgfshade \pgf@psfuncs}%
+ \pgf@sys@bp@correct\pgf@x%
+ \edef\pgf@prevx{\pgf@sys@tonumber{\pgf@x}}%
+ \edef\pgf@bounds{\pgf@bounds\space\pgf@sys@tonumber{\pgf@x}}%
+ \edef\pgf@encode{\pgf@encode\space0 1}%
+ \edef\pgf@singlefunc{\space%
+ << /FunctionType 2 /Domain [0 1] /C0
+ [\pgf@prevcolor] /C1 [\pgf@gray] /N 1 >> }% <<
+ \edef\pgf@funcs{\pgf@funcs\space%
+ << /FunctionType 2 /Domain [\pgf@doma\space\pgf@domb] /C0
+ [\pgf@prevcolor] /C1 [\pgf@gray] /N 1 >> }% <<
+ \edef\pgf@prevcolor{\pgf@gray}%
+ \pgf@parserestgray[}}
+\def\pgf@getgraytuplewithmixin#1{%
+ \pgfutil@definecolor{pgfshadetemp}{gray}{#1}%
+ \pgfutil@ifundefined{applycolormixins}{}{\applycolormixins{pgfshadetemp}}%
+ \pgfutil@extractcolorspec{pgfshadetemp}{\pgf@tempcolor}%
+ \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{gray}{\pgf@graycolor}%
+ \expandafter\pgf@getgray@@\pgf@graycolor!}
+\def\pgf@getgray@@#1!{%
+ \def\pgf@gray{#1}%
+ \def\pgf@sys@gray{{#1}}%
+}
+% \end{macrocode}
+%
+% \noindent Define new colour space agnostic colour specification parsing
+% macros. This includes parsing CMYK colour specifications (i.e.,
+% |color(|\meta{postition}|)=(|\meta{C}|,|\meta{M}|,|\meta{Y}|,|\meta{K}|)|.
+%
+% \begin{macrocode}
+\def\pgf@convertstring#1{%
+ \def\pgf@conv{}%
+ \pgf@convert#1]%
+ }
+\def\pgf@convert{%
+ \pgfutil@ifnextchar]{\pgfutil@gobble}%done!
+ {%
+ \pgfutil@ifnextchar;{\pgf@grabsemicolor}%
+ {%
+ \pgfutil@ifnextchar c{\pgf@gobblec}%
+ {%
+ \pgfutil@ifnextchar g{\pgf@grabgray}%
+ {%
+ \pgfutil@ifnextchar o{\pgf@grabcolor}%
+ {%
+ \pgfutil@ifnextchar m{\pgf@grabcmyk}%
+ {%
+ \pgfutil@ifnextchar r{\pgf@grabrgb}%
+ {\pgferror{Illformed shading
+ specification}\pgf@convert}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+\def\pgf@grabsemicolor;{%
+ \edef\pgf@conv{\pgf@conv; }\pgf@convert}
+\def\pgf@gobblec c{\pgf@convert}
+% \end{macrocode}
+%\changes{v1.1a}{2018/10/24}{Fix missing percent sign}
+% \begin{macrocode}
+\def\pgf@savecolor#1{%
+ \pgfutil@extractcolorspec{pgf@tempcol}{\pgf@tempcolor}%
+ \expandafter\pgfutil@convertcolorspec\pgf@tempcolor
+ {\pgf@shading@model}{\pgf@color}%
+ \expandafter\pgf@convget@\expandafter{\pgf@color}{#1}%
+}
+\def\pgf@grabrgb rgb(#1)=(#2,#3,#4){%
+ \pgfutil@definecolor{pgf@tempcol}{rgb}{#2,#3,#4}%
+ \pgf@savecolor{#1}%
+}
+\def\pgf@grabcmyk myk(#1)=(#2,#3,#4,#5){%
+ \pgfutil@definecolor{pgf@tempcol}{cmyk}{#2,#3,#4,#5}%
+ \pgf@savecolor{#1}%
+}
+\def\pgf@grabgray gray(#1)=(#2){%
+ \pgfutil@definecolor{pgf@tempcol}{gray}{#2}%
+ \pgf@savecolor{#1}%
+}
+\def\pgf@grabcolor olor(#1)=(#2){%
+ \pgfutil@colorlet{pgf@tempcol}{#2}%
+ \pgf@savecolor{#1}%
+}
+\def\pgf@convget@#1#2{%
+ \edef\pgf@conv{\pgf@conv \pgf@shading@model(#2)=(#1)}\pgf@convert}
+% \end{macrocode}
+%
+% \noindent New macros to convert CMYK colours to a format suitable for use in
+% the \meta{type 4 function} argument of \cs{pgfdeclarefunctionalshading}.
+%
+% \begin{macrocode}
+\newdimen\pgf@xd
+\def\pgfshadecolortocmyk#1#2{%
+ \pgfutil@colorlet{pgf@tempcol}{#1}%
+ \pgfutil@extractcolorspec{pgf@tempcol}{\pgf@tempcolor}%
+ \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{cmyk}{\pgf@cmykcolor}%
+ \expandafter\pgfshading@cmyk\pgf@cmykcolor\relax%
+ \edef#2{\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space
+ \pgf@sys@tonumber{\pgf@xc}\space\pgf@sys@tonumber{\pgf@xd}\space}%
+ \c@pgf@counta\escapechar%
+ \escapechar-1\relax%
+ \expandafter\edef\csname\string#2cyan\endcsname{%
+ \pgf@sys@tonumber{\pgf@xa}\space}%
+ \expandafter\edef\csname\string#2magenta\endcsname{%
+ \pgf@sys@tonumber{\pgf@xb}\space}%
+ \expandafter\edef\csname\string#2yellow\endcsname{%
+ \pgf@sys@tonumber{\pgf@xc}\space}%
+ \expandafter\edef\csname\string#2black\endcsname{%
+ \pgf@sys@tonumber{\pgf@xd}\space}%
+ \escapechar\c@pgf@counta
+}
+\def\pgfshading@cmyk#1,#2,#3,#4\relax{%
+ \pgf@xa=#1pt%
+ \pgf@xb=#2pt%
+ \pgf@xc=#3pt%
+ \pgf@xd=#4pt%
+}
+% \end{macrocode}
+%
+% \noindent New macros to convert grayscale colours to a format suitable for
+% use in the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}.
+%
+% \begin{macrocode}
+\def\pgfshadecolortogray#1#2{%
+ \pgfutil@colorlet{pgf@tempcol}{#1}%
+ \pgfutil@extractcolorspec{pgf@tempcol}{\pgf@tempcolor}%
+ \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{gray}{\pgf@graycolor}%
+ \expandafter\pgfshading@gray\pgf@graycolor\relax
+ \edef#2{\pgf@sys@tonumber{\pgf@xa}\space}%
+ \c@pgf@counta\escapechar
+ \escapechar-1\relax
+ \expandafter\edef\csname\string#2gray\endcsname{%
+ \pgf@sys@tonumber{\pgf@xa}\space}%
+ \escapechar\c@pgf@counta
+}
+\def\pgfshading@gray#1\relax{%
+ \pgf@xa=#1pt%
+}
+% \end{macrocode}
+%
+% \noindent Ensure colour model is set up based on the current \pkg{xcolor}
+% colour model when declaring shadings.
+%
+% \begin{macrocode}
+\def\pgfdeclarehorizontalshading{%
+ \pgf@setup@model
+ \pgfutil@ifnextchar[%
+ \pgf@declarehorizontalshading{\pgf@declarehorizontalshading[]}}
+\def\pgfdeclareverticalshading{%
+ \pgf@setup@model
+ \pgfutil@ifnextchar[%
+ \pgf@declareverticalshading{\pgf@declareverticalshading[]}}
+\def\pgfdeclareradialshading{%
+ \pgf@setup@model
+ \pgfutil@ifnextchar[%
+ \pgf@declareradialshading{\pgf@declareradialshading[]}}
+\def\pgfdeclarefunctionalshading{%
+ \pgf@setup@model
+ \pgfutil@ifnextchar[%
+ \pgf@declarefunctionalshading{\pgf@declarefunctionalshading[]}}
+% \end{macrocode}
+%
+% \noindent Ensure colour model is set up based on the current \pkg{xcolor}
+% colour model when using shadings.
+%
+% \begin{macrocode}
+\def\pgfuseshading#1{%
+ \edef\pgf@shadingname{@pgfshading#1}%
+ \edef\pgf@shadingsavedmodel{@pgfshading#1@model}%
+ \pgf@tryextensions{\pgf@shadingname}{\pgfalternateextension}%
+ \expandafter\pgfutil@ifundefined\expandafter{\pgf@shadingname}%
+ {\pgferror{Undefined shading "#1"}}%
+ {%
+ {%
+ \pgf@setup@model
+ \pgfutil@globalcolorsfalse
+ \def\pgf@shade@adds{}%
+ \pgfutil@ifundefined{pgf@deps\pgf@shadingname}%
+ {}%
+ {%
+ \edef\@list{\csname pgf@deps\pgf@shadingname\endcsname}%
+ \pgfutil@for\@temp:=\@list\do{%
+ {%
+ \pgfutil@ifundefined{applycolormixins}%
+ {}{\applycolormixins{\@temp}}%
+ \pgfutil@extractcolorspec{\@temp}{\pgf@tempcolor}%
+ \expandafter\pgfutil@ifundefined\expandafter{%
+ \pgf@shadingsavedmodel}%
+ {\expandafter\pgfutil@convertcolorspec\pgf@tempcolor{%
+ \pgf@shading@model}{\pgf@color}}%
+ {\expandafter\pgfutil@convertcolorspec\pgf@tempcolor{%
+ \pgf@shadingsavedmodel}{\pgf@color}}%
+ \xdef\pgf@shade@adds{\pgf@shade@adds,\pgf@color}%
+ }%
+ }%
+ }%
+ \expandafter\pgf@strip@shadename\pgf@shadingname!!%
+ \pgfutil@ifundefined{@pgfshading\pgf@basename\pgf@shade@adds!}%
+ {%
+ {%
+ \expandafter\def\expandafter\@temp\expandafter{%
+ \csname pgf@func\pgf@shadingname\endcsname}%
+ \edef\@args{{\pgf@basename\pgf@shade@adds}}%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\@@args
+ \expandafter\expandafter\expandafter{%
+ \csname pgf@args\pgf@shadingname\endcsname}%
+ \expandafter\expandafter\expandafter\@temp
+ \expandafter\@args\@@args
+ }%
+ }%
+ {}%
+ \pgf@invokeshading{%
+ \csname @pgfshading\pgf@basename\pgf@shade@adds!\endcsname}%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \noindent Conditionals for use in the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading} to test for the currently active
+% \pkg{xcolor} colour model.
+%
+% \begin{macrocode}
+\newif\ifpgfshadingmodelrgb
+\newif\ifpgfshadingmodelcmyk
+\newif\ifpgfshadingmodelgray
+% \end{macrocode}
+%
+% \noindent Shading colour space property set up based on the currently active
+% \pkg{xcolor} colour model.
+%
+% \begin{macrocode}
+\def\pgf@setup@model{%
+ \pgfshadingmodelrgbtrue
+ \pgfshadingmodelcmykfalse
+ \pgfshadingmodelgrayfalse
+ \XC@sdef\pgf@mod@test{\XC@tgt@mod{natural}}%
+ \def\pgf@shading@functional@range{0 1 0 1 0 1}%
+ \def\pgf@shading@device{/DeviceRGB}%
+ \def\pgf@shading@ps@device{setrgbcolor}%
+ \def\pgf@shading@model{rgb}%
+ \ifx\pgf@mod@test\XC@mod@natural
+ \ifpgfcmykshadingdefault
+ \def\pgf@shading@functional@range{0 1 0 1 0 1 0 1}%
+ \def\pgf@shading@device{/DeviceCMYK}%
+ \def\pgf@shading@ps@device{setcmykcolor}%
+ \def\pgf@shading@model{cmyk}%
+ \pgfshadingmodelrgbfalse
+ \pgfshadingmodelcmyktrue
+ \else
+ \def\pgf@shading@functional@range{0 1 0 1 0 1}%
+ \def\pgf@shading@device{/DeviceRGB}%
+ \def\pgf@shading@ps@device{setrgbcolor}%
+ \def\pgf@shading@model{rgb}%
+ \fi
+ \fi
+ \ifx\pgf@mod@test\XC@mod@cmyk
+ \def\pgf@shading@functional@range{0 1 0 1 0 1 0 1}%
+ \def\pgf@shading@device{/DeviceCMYK}%
+ \def\pgf@shading@ps@device{setcmykcolor}%
+ \def\pgf@shading@model{cmyk}%
+ \pgfshadingmodelrgbfalse
+ \pgfshadingmodelcmyktrue
+ \fi
+ \ifx\pgf@mod@test\XC@mod@gray
+ \def\pgf@shading@functional@range{0 1}%
+ \def\pgf@shading@device{/DeviceGray}%
+ \def\pgf@shading@ps@device{setgray}%
+ \def\pgf@shading@model{gray}%
+ \pgfshadingmodelrgbfalse
+ \pgfshadingmodelgraytrue
+ \fi
+% \end{macrocode}
+% \changes{v1.1}{2018/10/19}{Support dvisvgm driver}
+% \begin{macrocode}
+ \edef\pgf@sys@driver@dvisvgm{pgfsys-dvisvgm.def}%
+ \ifx\pgfsysdriver\pgf@sys@driver@dvisvgm
+ \def\pgf@shading@model{rgb}%
+ \fi
+% \end{macrocode}
+% \changes{v1.1}{2018/10/19}{Support tex4ht driver}
+% \begin{macrocode}
+ \edef\pgf@sys@driver@texforht{pgfsys-tex4ht.def}%
+ \ifx\pgfsysdriver\pgf@sys@driver@texforht
+ \def\pgf@shading@model{rgb}%
+ \fi
+}
+% \end{macrocode}
+%
+% \noindent Converters for use in the \meta{type 4 function} argument of
+% \cs{pgfdeclarefunctionalshading}. These macros use the same algorithms as
+% \pkg{xcolor}.
+%
+% \begin{macrocode}
+\def\pgffuncshadingrgbtocmyk{%
+ 1.0 exch sub 3 1 roll
+ 1.0 exch sub 3 1 roll
+ 1.0 exch sub 3 1 roll
+ 3 copy
+ 2 copy gt { exch } if pop
+ 2 copy gt { exch } if pop
+ dup 3 1 roll sub
+ 0.0 2 copy lt { exch } if pop
+ 1.0 2 copy gt { exch } if pop
+ 4 1 roll
+ dup 3 1 roll sub
+ 0.0 2 copy lt { exch } if pop
+ 1.0 2 copy gt { exch } if pop
+ 4 1 roll
+ dup 3 1 roll sub
+ 0.0 2 copy lt { exch } if pop
+ 1.0 2 copy gt { exch } if pop
+ 4 1 roll
+}
+\def\pgffuncshadingrgbtogray{%
+ 0.11 mul exch 0.59 mul add exch 0.3 mul add
+}
+\def\pgffuncshadingcmyktorgb{%
+ % covert to CMY
+ dup 3 1 roll add
+ 1.0 2 copy gt { exch } if pop
+ 4 1 roll
+ dup 3 1 roll add
+ 1.0 2 copy gt { exch } if pop
+ 4 1 roll
+ add
+ 1.0 2 copy gt { exch } if pop
+ 3 1 roll
+ % covert to RGB
+ 1.0 exch sub
+ 3 1 roll
+ 1.0 exch sub
+ 3 1 roll
+ 1.0 exch sub
+ 3 1 roll
+}
+\def\pgffuncshadingcmyktogray{%
+ exch 0.11 mul add exch 0.59 mul add exch 0.3 mul add
+ 1.0 2 copy gt { exch } if pop
+ 1.0 exch sub
+}
+\def\pgffuncshadinggraytorgb{%
+ dup dup
+}
+\def\pgffuncshadinggraytocmyk{%
+ 0.0 0.0 0.0
+ 4 3 roll
+}
+% \end{macrocode}
+%
+% \noindent Load the correct driver file.
+%
+% \begin{macrocode}
+\def\pgfutilgetcmykshadingsdriver{%
+ \expandafter\pgfutil@getcmykshadingsdriver\pgfsysdriver[%
+}
+\def\pgfutil@getcmykshadingsdriver pgfsys-#1[{%
+ \edef\pgfsyscmykshadingsdriver{pgfsys-cmykshadings-#1}%
+}
+\pgfutilgetcmykshadingsdriver
+\pgfutil@InputIfFileExists{\pgfsyscmykshadingsdriver}{}{}
+% \end{macrocode}
+%
+% \noindent Style options to use CMYK shadings by default or not when the
+% selected \pkg{xcolor} colour model is |natural|.
+%
+% \begin{macrocode}
+\newif\ifpgfcmykshadingdefault
+\DeclareOption{cmyk}{%
+ \pgfcmykshadingdefaulttrue
+}
+% \end{macrocode}
+% \changes{v1.1}{2018/10/18}{Fix typo for {\ttfamily rgb} option}
+% \begin{macrocode}
+\DeclareOption{rgb}{%
+ \pgfcmykshadingdefaultfalse
+}
+\ExecuteOptions{cmyk}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \subsection{Drivers}
+%
+% \subsubsection*{pdftex driver}
+%
+% \begin{macrocode}
+%<*pdftex-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-pdftex.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF pdftex driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\pgfsys@horishading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \setbox\pgfutil@tempboxa=\hbox to\pgf@max{%
+ \vbox to\pgfmathresult pt{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{\pgfpoint{\pgf@max}{#2}}%
+ \immediate\pdfxform resources {%
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@doma\space0 \pgf@domb\space0]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode\noexpand\pdfrefxform\the\pdflastxform}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@vertshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \setbox\pgfutil@tempboxa=\hbox to\pgfmathresult pt{%
+ \vbox to\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{\pgfpoint{#2}{\pgf@max}}%
+ \immediate\pdfxform resources {%
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [0 \pgf@doma\space0 \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode\noexpand\pdfrefxform\the\pdflastxform}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@radialshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \setbox\pgfutil@tempboxa=\hbox to2\pgf@max{%
+ \vbox to2\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}%
+ \advance\pgf@xa by \pgf@x
+ \advance\pgf@ya by \pgf@y
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@sys@bp@correct{\pgf@y}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \immediate\pdfxform resources {%
+ /Shading << /Sh << /ShadingType 3
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@sys@tonumber{\pgf@xa}
+ \pgf@sys@tonumber{\pgf@ya}
+ \pgf@doma\space
+ \pgf@sys@tonumber{\pgf@x}
+ \pgf@sys@tonumber{\pgf@y}
+ \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [true false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode\noexpand\pdfrefxform\the\pdflastxform}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@functionalshading#1#2#3#4{%
+ {%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{#3}%
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \advance\pgf@x by-\pgf@xa
+ \advance\pgf@y by-\pgf@ya
+ \setbox\pgfutil@tempboxa=\hbox to\pgf@x{%
+ \vbox to\pgf@y{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \pgf@sys@bp@correct{\pgf@xb}%
+ \pgf@sys@bp@correct{\pgf@yb}%
+ \pgf@xc=-\pgf@xa
+ \pgf@yc=-\pgf@ya
+ % Now build the function
+ \pdfobj
+ stream
+ attr
+ {
+ /FunctionType 4
+ /Domain [\pgf@sys@tonumber{\pgf@xa}\space
+ \pgf@sys@tonumber{\pgf@xb}\space
+ \pgf@sys@tonumber{\pgf@ya}\space
+ \pgf@sys@tonumber{\pgf@yb}]
+ /Range [\pgf@shading@functional@range]
+ }
+ {{#4}}%
+ \edef\pgf@temp@num{\the\pdflastobj}%
+ \pdfxform resources {%
+ /Shading << /Sh << /ShadingType 1
+ /ColorSpace \pgf@shading@device\space
+ /Matrix [1 0 0 1 \pgf@sys@tonumber{\pgf@xc}\space
+ \pgf@sys@tonumber{\pgf@yc}]
+ /Domain [\pgf@sys@tonumber{\pgf@xa}\space
+ \pgf@sys@tonumber{\pgf@xb}\space
+ \pgf@sys@tonumber{\pgf@ya}\space
+ \pgf@sys@tonumber{\pgf@yb}]
+ /Function \pgf@temp@num\space 0 R
+ >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode%
+ \noexpand\pdfrefxform\the\pdflastxform%
+ \noexpand\pdfrefobj\pgf@temp@num%
+ }%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</pdftex-driver>
+% \end{macrocode}
+%
+% \subsubsection*{xetex driver}
+%
+% \begin{macrocode}
+%<*xetex-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-xetex.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF xetex driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\input pgfsys-cmykshadings-dvipdfmx.def
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</xetex-driver>
+% \end{macrocode}
+%
+% \subsubsection*{luatex driver}
+%
+% \begin{macrocode}
+%<*luatex-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-luatex.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF luatex driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\pgfsys@horishading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \setbox\pgfutil@tempboxa=\hbox to\pgf@max{%
+ \vbox to\pgfmathresult pt{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{\pgfpoint{\pgf@max}{#2}}%
+ \immediate\saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@doma\space0 \pgf@domb\space0]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@vertshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \setbox\pgfutil@tempboxa=\hbox to\pgfmathresult pt{%
+ \vbox to\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{\pgfpoint{#2}{\pgf@max}}%
+ \immediate\saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [0 \pgf@doma\space0 \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@radialshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \setbox\pgfutil@tempboxa=\hbox to2\pgf@max{%
+ \vbox to2\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}%
+ \advance\pgf@xa by \pgf@x
+ \advance\pgf@ya by \pgf@y
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@sys@bp@correct{\pgf@y}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \immediate\saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 3
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@sys@tonumber{\pgf@xa}
+ \pgf@sys@tonumber{\pgf@ya}
+ \pgf@doma\space
+ \pgf@sys@tonumber{\pgf@x}
+ \pgf@sys@tonumber{\pgf@y}
+ \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [true false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@functionalshading#1#2#3#4{%
+ {%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{#3}%
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \advance\pgf@x by-\pgf@xa
+ \advance\pgf@y by-\pgf@ya
+ \setbox\pgfutil@tempboxa=\hbox to\pgf@x{%
+ \vbox to\pgf@y{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \pgf@sys@bp@correct{\pgf@xb}%
+ \pgf@sys@bp@correct{\pgf@yb}%
+ \pgf@xc=-\pgf@xa
+ \pgf@yc=-\pgf@ya
+ % Now build the function
+ \pdfextension obj
+ stream
+ attr
+ {
+ /FunctionType 4
+ /Domain [\pgf@sys@tonumber{\pgf@xa}\space
+ \pgf@sys@tonumber{\pgf@xb}\space
+ \pgf@sys@tonumber{\pgf@ya}\space
+ \pgf@sys@tonumber{\pgf@yb}]
+ /Range [\pgf@shading@functional@range]
+ }
+ {{#4}}%
+ \edef\pgf@temp@num{\the\numexpr\pdffeedback lastobj\relax}%
+ \saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 1
+ /ColorSpace \pgf@shading@device\space
+ /Matrix [1 0 0 1 \pgf@sys@tonumber{\pgf@xc}\space
+ \pgf@sys@tonumber{\pgf@yc}]
+ /Domain [\pgf@sys@tonumber{\pgf@xa}\space
+ \pgf@sys@tonumber{\pgf@xb}\space
+ \pgf@sys@tonumber{\pgf@ya}\space
+ \pgf@sys@tonumber{\pgf@yb}]
+ /Function \pgf@temp@num\space 0 R
+ >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode%
+ \noexpand\useboxresource\the\lastsavedboxresourceindex%
+ \noexpand\pdfextension refobj \pgf@temp@num%
+ }%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</luatex-driver>
+% \end{macrocode}
+%
+% \subsubsection*{dvipdfmx driver}
+%
+% \begin{macrocode}
+%<*dvipdfmx-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-dvipdfmx.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF dvipdfmx driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\pgfsys@horishading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \pgf@process{\pgfpoint{\pgf@max}{#2}}%
+ \edef\@tempa{\noexpand\pgfutil@insertatbegincurrentpagefrombox{%
+ \special{pdf:bxobj @pgfshade\the\pgfsys@objnum\space
+ width \the\pgf@max\space height \pgfmathresult pt}%
+ \special{pdf:put @resources
+ <<
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@doma\space0 \pgf@domb\space0]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>
+ >>}%
+ \pgfsys@invoke{/Sh sh}%
+ \special{pdf:exobj}}}\@tempa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \hbox to\the\pgf@max{\vbox to\pgfmathresult pt{%
+ \vfil\special{pdf:uxobj @pgfshade\the\pgfsys@objnum}}\hfil}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+ \global\advance\pgfsys@objnum\@ne%
+}
+\def\pgfsys@vertshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \pgf@process{\pgfpoint{\pgf@max}{#2}}%
+ \edef\@tempa{\noexpand\pgfutil@insertatbegincurrentpagefrombox{%
+ \special{pdf:bxobj @pgfshade\the\pgfsys@objnum\space
+ width \pgfmathresult pt\space height \the\pgf@max}%
+ \special{pdf:put @resources
+ <<
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [0 \pgf@doma\space0 \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>
+ >>}%
+ \pgfsys@invoke{/Sh sh}%
+ \special{pdf:exobj}}}\@tempa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \hbox to\pgfmathresult pt{\vbox to\the\pgf@max{%
+ \vfil\special{pdf:uxobj @pgfshade\the\pgfsys@objnum}}\hfil}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+ \global\advance\pgfsys@objnum\@ne
+}
+\def\pgfsys@radialshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}%
+ \advance\pgf@xa by \pgf@x
+ \advance\pgf@ya by \pgf@y
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@sys@bp@correct{\pgf@y}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \pgfutil@tempdima=2\pgf@max
+ \edef\@tempa{\noexpand\pgfutil@insertatbegincurrentpagefrombox{%
+ \special{pdf:bxobj @pgfshade\the\pgfsys@objnum\space
+ width \the\pgfutil@tempdima\space height \the\pgfutil@tempdima}%
+ \special{pdf:put @resources
+ <<
+ /Shading << /Sh << /ShadingType 3
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@sys@tonumber{\pgf@xa}
+ \pgf@sys@tonumber{\pgf@ya}
+ \pgf@doma\space \pgf@sys@tonumber{\pgf@x}
+ \pgf@sys@tonumber{\pgf@y}
+ \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [true false] >> >>
+ >>}%
+ \pgfsys@invoke{/Sh sh}%
+ \special{pdf:exobj}}}\@tempa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \hbox to\the\pgfutil@tempdima{\vbox to\the\pgfutil@tempdima{%
+ \vfil\special{pdf:uxobj @pgfshade\the\pgfsys@objnum}}\hfil}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+ \global\advance\pgfsys@objnum\@ne
+}
+\def\pgfsys@functionalshading#1#2#3#4{%
+ {%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{#3}%
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \pgf@sys@bp@correct{\pgf@xb}%
+ \pgf@sys@bp@correct{\pgf@yb}%
+ \pgf@xc=-\pgf@xa
+ \pgf@yc=-\pgf@ya
+ % Now build the function
+ \edef\@tempa{\noexpand\pgfutil@insertatbegincurrentpagefrombox{%
+ \special{pdf:stream @pgfstream\the\pgfsys@objnum\space({#4})
+ <</FunctionType 4 /Domain [\pgf@sys@tonumber{\pgf@xa}\space
+ \pgf@sys@tonumber{\pgf@xb}\space
+ \pgf@sys@tonumber{\pgf@ya}\space
+ \pgf@sys@tonumber{\pgf@yb}]
+ /Range [\pgf@shading@functional@range]>>}}}\@tempa%
+ \edef\@tempa{\noexpand\pgfutil@insertatbegincurrentpagefrombox{%
+ \special{pdf:bxobj @pgfshade\the\pgfsys@objnum\space
+ width \the\pgf@x\space height \the\pgf@y}%
+ \special{pdf:put @resources <</Shading <</Sh <</ShadingType 1
+ /ColorSpace \pgf@shading@device\space
+ /Matrix [1 0 0 1 \pgf@sys@tonumber{\pgf@xc}\space
+ \pgf@sys@tonumber{\pgf@yc}]
+ /Domain [\pgf@sys@tonumber{\pgf@xa}\space
+ \pgf@sys@tonumber{\pgf@xb}\space
+ \pgf@sys@tonumber{\pgf@ya}\space
+ \pgf@sys@tonumber{\pgf@yb}]
+ /Function @pgfstream\the\pgfsys@objnum>> >> >>}%
+ \pgfsys@invoke{/Sh sh}%
+ \special{pdf:exobj}}}\@tempa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode\hbox to\the\pgf@x{\vbox to\the\pgf@y{%
+ \vfil\special{pdf:uxobj @pgfshade\the\pgfsys@objnum}}\hfil}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+ \global\advance\pgfsys@objnum\@ne
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dvipdfmx-driver>
+% \end{macrocode}
+%
+% \subsubsection*{dvipdfm driver}
+%
+% \changes{v1.1}{2018/10/18}{Support dvipdfm driver}
+%
+% \begin{macrocode}
+%<*dvipdfm-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-dvipdfm.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF dvipdfm driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\pgfsys@horishading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgf@process{\pgfpoint{\pgf@max}{#2}}%
+ \edef\@temp{\noexpand\pgfutil@insertatbegincurrentpage{%
+ \special{pdf: beginxobj @pgfshade#1 width \the\pgf@max\space
+ height \the\pgf@y}}}\@temp
+ \edef\@temp{\noexpand\pgfutil@insertatbegincurrentpage{%
+ \special{pdf: put @resources <<
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@doma\space0 \pgf@domb\space0]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >> >>}}}\@temp% <<
+ \pgfutil@insertatbegincurrentpage{\special{pdf: content /Sh sh}%
+ \special{pdf: endxobj}}%
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \hbox to\the\pgf@max{\vbox to#2{%
+ \vfil\special{pdf: usexobj @pgfshade#1}}\hfil}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@vertshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgf@process{\pgfpoint{\pgf@max}{#2}}%
+ \edef\@temp{\noexpand\pgfutil@insertatbegincurrentpage{%
+ \special{pdf: beginxobj @pgfshade#1 width \the\pgf@y\space
+ height \the\pgf@max\space}}}\@temp
+ \edef\@temp{\noexpand\pgfutil@insertatbegincurrentpage{%
+ \special{pdf: put @resources <<
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [0 \pgf@doma\space0 \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >> >>}}}\@temp% <<
+ \pgfutil@insertatbegincurrentpage{\special{pdf: content /Sh sh}%
+ \special{pdf: endxobj}}%
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \hbox to#2{\vbox to\the\pgf@max{\vfil\special{%
+ pdf: usexobj @pgfshade#1}}\hfil}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@radialshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}%
+ \advance\pgf@xa by \pgf@x\relax
+ \advance\pgf@ya by \pgf@y\relax
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@sys@bp@correct{\pgf@y}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \pgfutil@tempdima=2\pgf@max\relax
+ \edef\@temp{\noexpand\pgfutil@insertatbegincurrentpage{%
+ \special{pdf: beginxobj @pgfshade#1 width
+ \the\pgfutil@tempdima\space height \the\pgfutil@tempdima}}}\@temp%
+ \edef\@temp{\noexpand\pgfutil@insertatbegincurrentpage{%
+ \special{pdf: put @resources <<
+ /Shading << /Sh << /ShadingType 3
+ /ColorSpace \pgf@shading@device\space
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@sys@tonumber{\pgf@xa} \pgf@sys@tonumber{\pgf@ya}
+ \pgf@doma\space \pgf@sys@tonumber{\pgf@x} \pgf@sys@tonumber{\pgf@y}
+ \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [true false] >> >> >>}}}\@temp% <<
+ \pgfutil@insertatbegincurrentpage{\special{pdf: content /Sh sh}%
+ \special{pdf: endxobj}}%
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \hbox to\the\pgfutil@tempdima{\vbox to\the\pgfutil@tempdima{%
+ \vfil\special{pdf: usexobj @pgfshade#1}}\hfil}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dvipdfm-driver>
+% \end{macrocode}
+%
+% \changes{v1.1}{2018/10/23}{Support PostScript® drivers}
+%
+% \subsubsection*{dvips driver}
+%
+% \begin{macrocode}
+%<*dvips-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-dvips.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF dvips driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\input pgfsys-cmykshadings-common-postscript.def
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</dvips-driver>
+% \end{macrocode}
+%
+% \subsubsection*{textures driver}
+%
+% \begin{macrocode}
+%<*textures-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-textures.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF textures driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\input pgfsys-cmykshadings-common-postscript.def
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</textures-driver>
+% \end{macrocode}
+%
+% \subsubsection*{vtex driver}
+%
+% \begin{macrocode}
+%<*vtex-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-vtex.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF vtex driver (DCP)]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\input pgfsys-cmykshadings-common-postscript.def
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</vtex-driver>
+% \end{macrocode}
+%
+% \subsubsection*{PostScript® driver common code}
+%
+% \begin{macrocode}
+%<*common-ps-driver>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesFile{pgfsys-cmykshadings-common-postscript.def}%
+ [2018/10/24
+ CMYK and grayscale shadings support for PGF PostScript driver (DCP)]
+% \end{macrocode}
+%
+% \TeX\space shading macros.
+%
+% \begin{macrocode}
+\def\pgfsys@horishading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathsetlength\pgf@x{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@y=\pgf@max
+ \pgf@sys@bp@correct{\pgf@y}%
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{\hbox to \the\pgf@max{%
+ \noexpand\vrule width0pt height\the\pgf@xa
+ \noexpand\pgfsys@beginpurepicture
+ \noexpand\pgfsys@rect{0pt}{0pt}{\the\pgf@max}{\the\pgf@xa}%
+ \noexpand\pgfsys@clipnext
+ \noexpand\pgfsys@discardpath
+ \noexpand\pgfsys@invoke{\pgf@domb\space \pgf@sys@tonumber{\pgf@x}
+ pgfH\pgf@shading@model\space \pgf@psfuncs\space pop}%
+ \hss
+ \noexpand\pgfsys@endpurepicture}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@vertshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathsetlength\pgf@x{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@y=\pgf@max
+ \pgf@sys@bp@correct{\pgf@y}%
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{\hbox to\the\pgf@xa{%
+ \noexpand\vrule width0pt height\the\pgf@max
+ \noexpand\pgfsys@beginpurepicture
+ \noexpand\pgfsys@rect{0pt}{0pt}{\the\pgf@xa}{\the\pgf@max}%
+ \noexpand\pgfsys@clipnext
+ \noexpand\pgfsys@discardpath
+ \noexpand\pgfsys@invoke{\pgf@domb\space \pgf@sys@tonumber{\pgf@x}
+ pgfV\pgf@shading@model\space \pgf@psfuncs\space pop}%
+ \hss
+ \noexpand\pgfsys@endpurepicture}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@radialshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgf@process{#2}%
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@sys@bp@correct{\pgf@y}%
+ \pgf@xa=2\pgf@max
+ \pgf@sys@bp@correct{\pgf@max}%
+ \advance\pgf@x by \pgf@max
+ \advance\pgf@y by \pgf@max
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{\hbox to \the\pgf@xa{%
+ \noexpand\vrule width0pt height\the\pgf@xa
+ \noexpand\pgfsys@beginpurepicture
+ \noexpand\pgfsys@invoke{%
+ \pgf@domb\space \pgf@sys@tonumber{\pgf@y}
+ \pgf@sys@tonumber{\pgf@x}
+ \pgf@sys@tonumber{\pgf@max} pgfR1\pgf@shading@model\space
+ \pgf@psfuncs\space \pgf@firstcolor\space \pgf@doma\space
+ pgfR2\pgf@shading@model}%
+ \hss
+ \noexpand\pgfsys@endpurepicture}}%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+\def\pgfsys@functionalshading#1#2#3#4{%
+ {%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{#3}%
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \advance\pgf@x by-\pgf@xa
+ \advance\pgf@y by-\pgf@ya
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \pgf@sys@bp@correct{\pgf@xb}%
+ \pgf@sys@bp@correct{\pgf@yb}%
+ \pgf@xc=-\pgf@xa
+ \pgf@yc=-\pgf@ya
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \hbox to\the\pgf@x{\vbox to\the\pgf@y{\vfil
+ \noexpand\pgfsys@beginpurepicture
+ \noexpand\pgfsys@invoke{%
+ \pgf@sys@tonumber{\pgf@xc} \pgf@sys@tonumber{\pgf@yc} translate
+ 1.1 setlinewidth [] 0 setdash 0 setlinecap
+ /pgfproc {#4} bind def
+ \pgf@sys@tonumber{\pgf@ya} 1 \pgf@sys@tonumber{\pgf@yb}
+ {
+ \pgf@sys@tonumber{\pgf@xa} 1 \pgf@sys@tonumber{\pgf@xb}
+ { 1 index 2 copy pgfproc \pgf@shading@ps@device\space
+ moveto 1.1 0 rlineto stroke }
+ for
+ pop
+ }
+ for
+ }%
+ \noexpand\pgfsys@endpurepicture
+ }\hfil}%
+ }%
+ \expandafter\xdef\csname @pgfshading#1@model!\endcsname{%
+ \pgf@shading@model}%
+ }%
+}
+% \end{macrocode}
+%
+% PostScript® support code.
+%
+% \begin{macrocode}
+\g@addto@macro\pgfsys@atbegindocument{%
+% \end{macrocode}
+%
+% Define RGB PostScript® shading functions.
+%
+% \begin{macrocode}
+ \pgf@sys@postscript@header{/pgfHrgb { pgfH } bind def}%
+ \pgf@sys@postscript@header{/pgfVrgb { pgfV } bind def}%
+ \pgf@sys@postscript@header{/pgfR1rgb { pgfR1 } bind def}%
+ \pgf@sys@postscript@header{/pgfR2rgb { pgfR2 } bind def}%
+% \end{macrocode}
+%
+% Define CMYK PostScript® shding functions.
+%
+% \begin{macrocode}
+ \pgf@sys@postscript@header{/pgfHcmyk{
+ /pgfheight exch def 0.75 setlinewidth [] 0 setdash
+ /pgfshade {pgfAcmyk} def /pgfdir { dup 0 moveto
+ dup 6 index lineto } bind def} bind def}%
+ \pgf@sys@postscript@header{/pgfVcmyk{
+ /pgfheight exch def 0.75 setlinewidth [] 0 setdash
+ /pgfshade {pgfAcmyk} def /pgfdir { dup 0 exch moveto dup 6 index
+ exch lineto } bind def} bind def}%
+ \pgf@sys@postscript@header{/pgfAcmyk{
+ /pgfdiff 10 index round cvi 10 index round cvi sub 2 mul 1 add def
+ 3 index 8 index sub pgfdiff div % put cyan-step on stack
+ 3 index 8 index sub pgfdiff div % put magenta-step on stack
+ 3 index 8 index sub pgfdiff div % put yellow-step on stack
+ 3 index 8 index sub pgfdiff div % put black-step on stack
+ pgfheight 12 index 12 index 12 index 12 index 18 index
+ pgfdiff {
+ 4 index 4 index 4 index 4 index setcmykcolor % Set color
+ pgfdir
+ stroke
+ 5 -1 roll 9 index add % cyan += inccyan
+ 5 -1 roll 8 index add % magenta += incmagenta
+ 5 -1 roll 7 index add % yellow += incyellow
+ 5 -1 roll 6 index add % black += incblack
+ 5 -1 roll .5 sub % x += 0.5
+ } repeat
+ mark 19 1 roll cleartomark exch pop % leave only start x on stack
+ }bind def }%
+ \pgf@sys@postscript@header{/pgfR1cmyk{
+ newpath dup dup dup 0 360 arc clip newpath
+ dup /pgfendx exch def
+ /pgfendy exch def
+ 0.875 setlinewidth
+ [] 0 setdash
+ /pgfshade {pgfRcmyk} def
+ /pgfstartx exch def
+ /pgfstarty exch def
+ /pgfdiffx pgfendx pgfstartx sub def
+ /pgfdiffy pgfendy pgfstarty sub def
+ dup /pgfdomb exch def
+ }bind def }%
+ \pgf@sys@postscript@header{/pgfR2cmyk{
+ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc
+ setcmykcolor fill pop}bind def }%
+ \pgf@sys@postscript@header{/pgfRcmyk{
+ /pgfdiff 10 index round cvi 10 index round cvi sub 4 mul 1 add def
+ /pgfcircx pgfstartx 11 index pgfdiffx pgfdomb div mul add def
+ /pgfcircy pgfstarty 11 index pgfdiffy pgfdomb div mul add def
+ /pgfcircxe pgfstartx 10 index pgfdiffx pgfdomb div mul add def
+ /pgfcircye pgfstarty 10 index pgfdiffy pgfdomb div mul add def
+ /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def
+ /pgfystep pgfcircye pgfcircy sub pgfdiff div def
+ 3 index 8 index sub pgfdiff div % put cyan-step on stack
+ 3 index 8 index sub pgfdiff div % put magenta-step on stack
+ 3 index 8 index sub pgfdiff div % put yellow-step on stack
+ 3 index 8 index sub pgfdiff div % put black-step on stack
+ 11 index 11 index 11 index 11 index 17 index
+ pgfdiff {
+ 4 index 4 index 4 index 4 index setcmykcolor % Set color
+ pgfcircx pgfcircy 2 index 0 360 arc closepath
+ stroke
+ 5 -1 roll 8 index add % cyan += inccyan
+ 5 -1 roll 7 index add % magenta += incmagenta
+ 5 -1 roll 6 index add % yellow += incyellow
+ 5 -1 roll 5 index add % black += incblack
+ 5 -1 roll .25 sub % x += 0.25
+ /pgfcircx pgfcircx pgfxstep add def
+ /pgfcircy pgfcircy pgfystep add def
+ } repeat
+ mark 18 1 roll cleartomark exch pop % leave only start x on stack
+ }bind def}%
+% \end{macrocode}
+%
+% Define grayscale PostScript® shding functions.
+%
+% \begin{macrocode}
+ \pgf@sys@postscript@header{/pgfHgray{
+ /pgfheight exch def 0.75 setlinewidth [] 0 setdash
+ /pgfshade {pgfAgray} def /pgfdir { dup 0 moveto
+ dup 3 index lineto } bind def} bind def}%
+ \pgf@sys@postscript@header{/pgfVgray{
+ /pgfheight exch def 0.75 setlinewidth [] 0 setdash
+ /pgfshade {pgfAgray} def /pgfdir { dup 0 exch moveto dup 3 index
+ exch lineto } bind def} bind def}%
+ \pgf@sys@postscript@header{/pgfAgray{
+ /pgfdiff 4 index round cvi 4 index round cvi sub 2 mul 1 add def
+ dup 2 index sub pgfdiff div % put gray-step on stack
+ pgfheight 3 index 6 index
+ pgfdiff {
+ 1 index setgray % Set color
+ pgfdir
+ stroke
+ exch 3 index add % gray += incgray
+ exch .5 sub % x += 0.5
+ } repeat
+ mark 7 1 roll cleartomark exch pop % leave only start x on stack
+ }bind def }%
+ \pgf@sys@postscript@header{/pgfR1gray{
+ newpath dup dup dup 0 360 arc clip newpath
+ dup /pgfendx exch def
+ /pgfendy exch def
+ 0.875 setlinewidth
+ [] 0 setdash
+ /pgfshade {pgfRgray} def
+ /pgfstartx exch def
+ /pgfstarty exch def
+ /pgfdiffx pgfendx pgfstartx sub def
+ /pgfdiffy pgfendy pgfstarty sub def
+ dup /pgfdomb exch def
+ }bind def }%
+ \pgf@sys@postscript@header{/pgfR2gray{
+ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc
+ setgray fill pop}bind def }%
+ \pgf@sys@postscript@header{/pgfRgray{
+ /pgfdiff 4 index round cvi 4 index round cvi sub 4 mul 1 add def
+ /pgfcircx pgfstartx 5 index pgfdiffx pgfdomb div mul add def
+ /pgfcircy pgfstarty 5 index pgfdiffy pgfdomb div mul add def
+ /pgfcircxe pgfstartx 4 index pgfdiffx pgfdomb div mul add def
+ /pgfcircye pgfstarty 4 index pgfdiffy pgfdomb div mul add def
+ /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def
+ /pgfystep pgfcircye pgfcircy sub pgfdiff div def
+ dup 2 index sub pgfdiff div % put gray-step on stack
+ 2 index 5 index
+ pgfdiff {
+ 1 index setgray % Set color
+ pgfcircx pgfcircy 2 index 0 360 arc closepath
+ stroke
+ exch 2 index add % gray += incgray
+ exch .25 sub % x += 0.25
+ /pgfcircx pgfcircx pgfxstep add def
+ /pgfcircy pgfcircy pgfystep add def
+ } repeat
+ mark 6 1 roll cleartomark exch pop % leave only start x on stack
+ }bind def}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</common-ps-driver>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintChanges
diff --git a/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.ins b/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.ins
new file mode 100644
index 0000000000..8225b0f4ca
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.ins
@@ -0,0 +1,75 @@
+\iffalse meta-comment
+
+Copyright (c) 2018 David Purton <dcpurton@marshwiggle.net>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3c of this license
+or (at your option) any later version. The latest version of this
+license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\fi
+
+\input l3docstrip.tex
+\askforoverwritefalse
+
+\preamble
+
+This is a generated file.
+
+Copyright (c) 2018 David Purton <dcpurton@marshwiggle.net>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3c of this license
+or (at your option) any later version. The latest version of this
+license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work is "maintained" (as per the LPPL maintenance status)
+by David Purton.
+
+This work consists of the files pgf-cmykshadings.ins,
+pgf-cmykshadings.dtx, README.md, and the derived files
+ - pgf-cmykshadings.sty
+ - pgfsys-cmykshadings-pdftex.def
+ - pgfsys-cmykshadings-xetex.def
+ - pgfsys-cmykshadings-luatex.def
+ - pgfsys-cmykshadings-dvipdfmx.def
+ - pgfsys-cmykshadings-dvipdfm.def
+ - pgfsys-cmykshadings-dvips.def
+ - pgfsys-cmykshadings-textures.def
+ - pgfsys-cmykshadings-vtex.def
+ - pgfsys-cmykshadings-common-postscript.def
+ - pgf-cmykshadings.pdf
+
+
+Substantial parts of the code for this package are taken from the pgf package
+file pgfcoreshade.code.tex, along with the driver files pgfsys-*.def, copyright
+(c) 2006 Till Tantau and then slightly modified to support CMYK and grayscale
+shadings.
+
+\endpreamble
+
+\postamble
+\endpostamble
+
+\keepsilent
+
+\generate{\file{pgf-cmykshadings.sty}{\from{pgf-cmykshadings.dtx}{package}}
+ \file{pgfsys-cmykshadings-pdftex.def}{\from{pgf-cmykshadings.dtx}{pdftex-driver}}
+ \file{pgfsys-cmykshadings-xetex.def}{\from{pgf-cmykshadings.dtx}{xetex-driver}}
+ \file{pgfsys-cmykshadings-luatex.def}{\from{pgf-cmykshadings.dtx}{luatex-driver}}
+ \file{pgfsys-cmykshadings-dvipdfmx.def}{\from{pgf-cmykshadings.dtx}{dvipdfmx-driver}}
+ \file{pgfsys-cmykshadings-dvipdfm.def}{\from{pgf-cmykshadings.dtx}{dvipdfm-driver}}
+ \file{pgfsys-cmykshadings-dvips.def}{\from{pgf-cmykshadings.dtx}{dvips-driver}}
+ \file{pgfsys-cmykshadings-textures.def}{\from{pgf-cmykshadings.dtx}{textures-driver}}
+ \file{pgfsys-cmykshadings-vtex.def}{\from{pgf-cmykshadings.dtx}{vtex-driver}}
+ \file{pgfsys-cmykshadings-common-postscript.def}{\from{pgf-cmykshadings.dtx}{common-ps-driver}}
+}
+
+\endbatchfile
+
diff --git a/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.pdf b/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.pdf
new file mode 100644
index 0000000000..8997be41a2
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-cmykshadings/pgf-cmykshadings.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex b/graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex
new file mode 100644
index 0000000000..0a50ebf9d9
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[before number={\$}, after number=,]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/cloud.svg b/graphics/pgf/contrib/pgf-pie/demo/cloud.svg
new file mode 100644
index 0000000000..3fb608e5fb
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/cloud.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="223.928pt" height="173.029pt" viewBox="0 0 223.928 173.029" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 4.625 -8.3125 C 4.578125 -8.46875 4.546875 -8.53125 4.390625 -8.53125 C 4.21875 -8.53125 4.203125 -8.5 4.140625 -8.3125 L 1.640625 -1.15625 C 1.46875 -0.671875 1.140625 -0.359375 0.375 -0.34375 L 0.375 0 C 1.09375 -0.03125 1.125 -0.03125 1.515625 -0.03125 C 1.859375 -0.03125 2.421875 -0.03125 2.734375 0 L 2.734375 -0.34375 C 2.234375 -0.359375 1.9375 -0.609375 1.9375 -0.9375 C 1.9375 -1.015625 1.9375 -1.046875 2 -1.1875 L 2.546875 -2.78125 L 5.5625 -2.78125 L 6.21875 -0.90625 C 6.28125 -0.765625 6.28125 -0.734375 6.28125 -0.703125 C 6.28125 -0.34375 5.671875 -0.34375 5.359375 -0.34375 L 5.359375 0 C 5.640625 -0.03125 6.59375 -0.03125 6.921875 -0.03125 C 7.25 -0.03125 8.109375 -0.03125 8.390625 0 L 8.390625 -0.34375 C 7.609375 -0.34375 7.40625 -0.34375 7.234375 -0.84375 Z M 4.046875 -7.109375 L 5.4375 -3.125 L 2.671875 -3.125 Z M 4.046875 -7.109375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 3.4375 -7.65625 C 3.4375 -7.9375 3.4375 -7.953125 3.203125 -7.953125 C 2.921875 -7.625 2.3125 -7.1875 1.09375 -7.1875 L 1.09375 -6.84375 C 1.359375 -6.84375 1.953125 -6.84375 2.625 -7.140625 L 2.625 -0.921875 C 2.625 -0.484375 2.578125 -0.34375 1.53125 -0.34375 L 1.15625 -0.34375 L 1.15625 0 C 1.484375 -0.03125 2.640625 -0.03125 3.03125 -0.03125 C 3.4375 -0.03125 4.578125 -0.03125 4.90625 0 L 4.90625 -0.34375 L 4.53125 -0.34375 C 3.484375 -0.34375 3.4375 -0.484375 3.4375 -0.921875 Z M 3.4375 -7.65625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 5.359375 -3.828125 C 5.359375 -4.8125 5.296875 -5.78125 4.859375 -6.6875 C 4.375 -7.6875 3.515625 -7.953125 2.921875 -7.953125 C 2.234375 -7.953125 1.390625 -7.609375 0.9375 -6.609375 C 0.609375 -5.859375 0.484375 -5.109375 0.484375 -3.828125 C 0.484375 -2.671875 0.578125 -1.796875 1 -0.9375 C 1.46875 -0.03125 2.296875 0.25 2.921875 0.25 C 3.953125 0.25 4.546875 -0.375 4.90625 -1.0625 C 5.328125 -1.953125 5.359375 -3.125 5.359375 -3.828125 Z M 2.921875 0.015625 C 2.53125 0.015625 1.75 -0.203125 1.53125 -1.5 C 1.40625 -2.21875 1.40625 -3.125 1.40625 -3.96875 C 1.40625 -4.953125 1.40625 -5.828125 1.59375 -6.53125 C 1.796875 -7.34375 2.40625 -7.703125 2.921875 -7.703125 C 3.375 -7.703125 4.0625 -7.4375 4.296875 -6.40625 C 4.453125 -5.71875 4.453125 -4.78125 4.453125 -3.96875 C 4.453125 -3.171875 4.453125 -2.265625 4.3125 -1.53125 C 4.09375 -0.21875 3.328125 0.015625 2.921875 0.015625 Z M 2.921875 0.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 9.09375 -1.734375 C 9.09375 -3.109375 8.421875 -4.140625 7.5625 -4.140625 C 6.6875 -4.140625 5.84375 -3.15625 5.84375 -1.75 C 5.84375 -0.28125 6.703125 0.671875 7.5625 0.671875 C 8.421875 0.671875 9.09375 -0.40625 9.09375 -1.734375 Z M 7.578125 0.4375 C 7.40625 0.4375 6.53125 0.34375 6.53125 -1.734375 C 6.53125 -3.84375 7.40625 -3.90625 7.578125 -3.90625 C 8.234375 -3.90625 8.828125 -2.96875 8.828125 -1.75 C 8.828125 -0.484375 8.21875 0.4375 7.578125 0.4375 Z M 8.015625 -8.53125 C 8.09375 -8.640625 8.109375 -8.671875 8.109375 -8.734375 C 8.109375 -8.890625 8 -8.96875 7.90625 -8.96875 C 7.78125 -8.96875 7.75 -8.90625 7.65625 -8.78125 C 6.890625 -7.75 5.875 -7.65625 5.421875 -7.65625 C 5.1875 -7.65625 4.15625 -7.65625 3.1875 -8.59375 C 2.9375 -8.84375 2.671875 -8.96875 2.359375 -8.96875 C 1.5 -8.96875 0.640625 -7.96875 0.640625 -6.5625 C 0.640625 -5.109375 1.5 -4.140625 2.359375 -4.140625 C 3.234375 -4.140625 3.890625 -5.21875 3.890625 -6.546875 C 3.890625 -6.890625 3.875 -7.34375 3.640625 -7.9375 C 4.40625 -7.484375 5.078125 -7.421875 5.421875 -7.421875 C 5.75 -7.421875 6.40625 -7.484375 7.046875 -7.875 L 7.046875 -7.859375 L 1.71875 0.234375 C 1.65625 0.34375 1.625 0.375 1.625 0.4375 C 1.625 0.578125 1.734375 0.671875 1.859375 0.671875 C 1.953125 0.671875 2.015625 0.578125 2.078125 0.5 Z M 2.375 -4.390625 C 2.21875 -4.390625 1.34375 -4.46875 1.34375 -6.546875 C 1.34375 -8.65625 2.203125 -8.71875 2.375 -8.71875 C 3.03125 -8.71875 3.640625 -7.796875 3.640625 -6.5625 C 3.640625 -5.296875 3.03125 -4.390625 2.375 -4.390625 Z M 2.375 -4.390625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 0.609375 -9.796875 L 0.609375 -9.375 L 0.90625 -9.375 C 1.9375 -9.375 1.984375 -9.234375 1.984375 -8.703125 L 1.984375 -1.09375 C 1.984375 -0.5625 1.9375 -0.421875 0.90625 -0.421875 L 0.609375 -0.421875 L 0.609375 0 L 6.015625 0 C 7.859375 0 9.15625 -1.25 9.15625 -2.625 C 9.15625 -3.78125 8.109375 -4.9375 6.390625 -5.125 C 7.765625 -5.375 8.75 -6.296875 8.75 -7.375 C 8.75 -8.609375 7.5 -9.796875 5.625 -9.796875 Z M 3.0625 -5.234375 L 3.0625 -8.8125 C 3.0625 -9.28125 3.09375 -9.375 3.734375 -9.375 L 5.53125 -9.375 C 6.96875 -9.375 7.484375 -8.140625 7.484375 -7.375 C 7.484375 -6.421875 6.734375 -5.234375 5.15625 -5.234375 Z M 3.734375 -0.421875 C 3.09375 -0.421875 3.0625 -0.515625 3.0625 -0.984375 L 3.0625 -4.953125 L 5.75 -4.953125 C 7.125 -4.953125 7.84375 -3.75 7.84375 -2.640625 C 7.84375 -1.484375 6.96875 -0.421875 5.5625 -0.421875 Z M 3.734375 -0.421875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 6.3125 -2.40625 L 6 -2.40625 C 5.953125 -2.171875 5.84375 -1.375 5.6875 -1.140625 C 5.59375 -1.015625 4.78125 -1.015625 4.34375 -1.015625 L 1.6875 -1.015625 C 2.078125 -1.34375 2.953125 -2.265625 3.328125 -2.609375 C 5.515625 -4.625 6.3125 -5.359375 6.3125 -6.78125 C 6.3125 -8.4375 5 -9.53125 3.34375 -9.53125 C 1.671875 -9.53125 0.703125 -8.125 0.703125 -6.890625 C 0.703125 -6.15625 1.328125 -6.15625 1.375 -6.15625 C 1.671875 -6.15625 2.046875 -6.375 2.046875 -6.828125 C 2.046875 -7.234375 1.78125 -7.5 1.375 -7.5 C 1.25 -7.5 1.21875 -7.5 1.171875 -7.484375 C 1.453125 -8.46875 2.21875 -9.125 3.15625 -9.125 C 4.375 -9.125 5.125 -8.109375 5.125 -6.78125 C 5.125 -5.5625 4.421875 -4.5 3.59375 -3.578125 L 0.703125 -0.34375 L 0.703125 0 L 5.9375 0 Z M 6.3125 -2.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 6.421875 -4.59375 C 6.421875 -5.78125 6.359375 -6.9375 5.84375 -8.03125 C 5.25 -9.21875 4.21875 -9.53125 3.515625 -9.53125 C 2.6875 -9.53125 1.65625 -9.125 1.140625 -7.9375 C 0.734375 -7.03125 0.59375 -6.140625 0.59375 -4.59375 C 0.59375 -3.203125 0.6875 -2.15625 1.203125 -1.140625 C 1.765625 -0.046875 2.75 0.296875 3.5 0.296875 C 4.75 0.296875 5.46875 -0.4375 5.875 -1.28125 C 6.390625 -2.359375 6.421875 -3.765625 6.421875 -4.59375 Z M 3.5 0.015625 C 3.046875 0.015625 2.109375 -0.25 1.84375 -1.8125 C 1.671875 -2.671875 1.671875 -3.765625 1.671875 -4.765625 C 1.671875 -5.9375 1.671875 -7 1.90625 -7.84375 C 2.15625 -8.8125 2.890625 -9.25 3.5 -9.25 C 4.046875 -9.25 4.875 -8.921875 5.15625 -7.6875 C 5.328125 -6.875 5.328125 -5.734375 5.328125 -4.765625 C 5.328125 -3.796875 5.328125 -2.71875 5.171875 -1.84375 C 4.90625 -0.265625 4 0.015625 3.5 0.015625 Z M 3.5 0.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 10.921875 -2.078125 C 10.921875 -3.734375 10.09375 -4.984375 9.078125 -4.984375 C 8.03125 -4.984375 7.015625 -3.78125 7.015625 -2.09375 C 7.015625 -0.34375 8.046875 0.796875 9.078125 0.796875 C 10.109375 0.796875 10.921875 -0.484375 10.921875 -2.078125 Z M 9.09375 0.515625 C 8.890625 0.515625 7.84375 0.421875 7.84375 -2.078125 C 7.84375 -4.609375 8.875 -4.6875 9.09375 -4.6875 C 9.890625 -4.6875 10.59375 -3.578125 10.59375 -2.09375 C 10.59375 -0.578125 9.875 0.515625 9.09375 0.515625 Z M 9.625 -10.234375 C 9.703125 -10.375 9.734375 -10.40625 9.734375 -10.484375 C 9.734375 -10.671875 9.59375 -10.75 9.484375 -10.75 C 9.34375 -10.75 9.296875 -10.6875 9.1875 -10.546875 C 8.265625 -9.3125 7.046875 -9.1875 6.5 -9.1875 C 6.21875 -9.1875 4.984375 -9.1875 3.828125 -10.3125 C 3.53125 -10.609375 3.21875 -10.75 2.84375 -10.75 C 1.796875 -10.75 0.78125 -9.5625 0.78125 -7.875 C 0.78125 -6.125 1.8125 -4.984375 2.84375 -4.984375 C 3.875 -4.984375 4.671875 -6.265625 4.671875 -7.859375 C 4.671875 -8.28125 4.640625 -8.8125 4.359375 -9.53125 C 5.296875 -8.984375 6.09375 -8.90625 6.515625 -8.90625 C 6.90625 -8.90625 7.6875 -8.984375 8.453125 -9.453125 L 8.46875 -9.4375 L 2.0625 0.28125 C 1.984375 0.421875 1.953125 0.453125 1.953125 0.53125 C 1.953125 0.6875 2.078125 0.796875 2.21875 0.796875 C 2.359375 0.796875 2.421875 0.703125 2.5 0.609375 Z M 2.859375 -5.265625 C 2.65625 -5.265625 1.609375 -5.359375 1.609375 -7.859375 C 1.609375 -10.390625 2.640625 -10.46875 2.859375 -10.46875 C 3.640625 -10.46875 4.359375 -9.359375 4.359375 -7.875 C 4.359375 -6.359375 3.625 -5.265625 2.859375 -5.265625 Z M 2.859375 -5.265625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 10.6875 -11.6875 C 10.6875 -12 10.671875 -12.015625 10.578125 -12.015625 C 10.5 -12.015625 10.484375 -12 10.359375 -11.796875 L 9.609375 -10.34375 C 8.765625 -11.421875 7.734375 -12.03125 6.40625 -12.03125 C 3.46875 -12.03125 0.796875 -9.4375 0.796875 -5.890625 C 0.796875 -2.3125 3.46875 0.28125 6.421875 0.28125 C 9.0625 0.28125 10.6875 -2.046875 10.6875 -4.03125 C 10.6875 -4.203125 10.6875 -4.265625 10.53125 -4.265625 C 10.40625 -4.265625 10.40625 -4.21875 10.390625 -4.0625 C 10.25 -1.65625 8.515625 -0.171875 6.65625 -0.171875 C 4.90625 -0.171875 2.09375 -1.40625 2.09375 -5.890625 C 2.09375 -10.390625 4.953125 -11.59375 6.625 -11.59375 C 8.578125 -11.59375 9.984375 -9.90625 10.3125 -7.5 C 10.34375 -7.296875 10.34375 -7.265625 10.5 -7.265625 C 10.6875 -7.265625 10.6875 -7.296875 10.6875 -7.609375 Z M 10.6875 -11.6875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 3.8125 -5.859375 C 5.34375 -5.859375 6.015625 -4.53125 6.015625 -3 C 6.015625 -0.9375 4.90625 -0.140625 3.90625 -0.140625 C 3 -0.140625 1.515625 -0.578125 1.046875 -1.90625 C 1.140625 -1.875 1.21875 -1.875 1.3125 -1.875 C 1.71875 -1.875 2.03125 -2.15625 2.03125 -2.59375 C 2.03125 -3.09375 1.65625 -3.328125 1.3125 -3.328125 C 1.015625 -3.328125 0.5625 -3.1875 0.5625 -2.546875 C 0.5625 -0.96875 2.125 0.28125 3.9375 0.28125 C 5.859375 0.28125 7.3125 -1.21875 7.3125 -2.984375 C 7.3125 -4.65625 5.9375 -5.859375 4.3125 -6.046875 C 5.609375 -6.3125 6.875 -7.484375 6.875 -9.0625 C 6.875 -10.40625 5.515625 -11.375 3.953125 -11.375 C 2.390625 -11.375 1.015625 -10.421875 1.015625 -9.046875 C 1.015625 -8.4375 1.46875 -8.328125 1.6875 -8.328125 C 2.046875 -8.328125 2.359375 -8.5625 2.359375 -9 C 2.359375 -9.453125 2.046875 -9.671875 1.6875 -9.671875 C 1.625 -9.671875 1.53125 -9.671875 1.46875 -9.640625 C 1.96875 -10.78125 3.328125 -10.984375 3.921875 -10.984375 C 4.53125 -10.984375 5.671875 -10.6875 5.671875 -9.046875 C 5.671875 -8.5625 5.59375 -7.703125 5.015625 -6.9375 C 4.5 -6.265625 3.90625 -6.234375 3.34375 -6.1875 C 3.25 -6.1875 2.859375 -6.140625 2.796875 -6.140625 C 2.671875 -6.125 2.59375 -6.109375 2.59375 -5.984375 C 2.59375 -5.875 2.625 -5.859375 2.96875 -5.859375 Z M 3.8125 -5.859375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 7.234375 -5.53125 C 7.234375 -6.578125 7.21875 -8.375 6.484375 -9.75 C 5.859375 -10.953125 4.84375 -11.375 3.9375 -11.375 C 3.109375 -11.375 2.0625 -11 1.40625 -9.765625 C 0.71875 -8.46875 0.65625 -6.875 0.65625 -5.53125 C 0.65625 -4.546875 0.671875 -3.046875 1.203125 -1.734375 C 1.953125 0.03125 3.265625 0.28125 3.9375 0.28125 C 4.734375 0.28125 5.9375 -0.046875 6.640625 -1.6875 C 7.15625 -2.875 7.234375 -4.265625 7.234375 -5.53125 Z M 3.9375 0 C 2.84375 0 2.1875 -0.953125 1.953125 -2.25 C 1.75 -3.265625 1.75 -4.75 1.75 -5.71875 C 1.75 -7.046875 1.75 -8.140625 1.984375 -9.1875 C 2.3125 -10.65625 3.265625 -11.109375 3.9375 -11.109375 C 4.65625 -11.109375 5.5625 -10.640625 5.890625 -9.234375 C 6.109375 -8.25 6.125 -7.09375 6.125 -5.71875 C 6.125 -4.59375 6.125 -3.21875 5.921875 -2.203125 C 5.5625 -0.328125 4.546875 0 3.9375 0 Z M 3.9375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 12.484375 -2.515625 C 12.484375 -4.515625 11.5 -5.96875 10.34375 -5.96875 C 9.171875 -5.96875 7.984375 -4.609375 7.984375 -2.515625 C 7.984375 -0.40625 9.15625 0.953125 10.34375 0.953125 C 11.5 0.953125 12.484375 -0.5 12.484375 -2.515625 Z M 10.359375 0.671875 C 9.921875 0.671875 8.796875 0.265625 8.796875 -2.515625 C 8.796875 -5.296875 9.921875 -5.703125 10.359375 -5.703125 C 11.3125 -5.703125 12.171875 -4.34375 12.171875 -2.515625 C 12.171875 -0.6875 11.3125 0.671875 10.359375 0.671875 Z M 10.984375 -12.296875 C 11.109375 -12.484375 11.125 -12.5 11.125 -12.59375 C 11.125 -12.796875 10.96875 -12.890625 10.828125 -12.890625 C 10.65625 -12.890625 10.59375 -12.78125 10.46875 -12.640625 C 9.46875 -11.203125 8.09375 -11.046875 7.390625 -11.046875 C 5.671875 -11.046875 4.609375 -12.046875 4.28125 -12.359375 C 4.0625 -12.5625 3.734375 -12.890625 3.15625 -12.890625 C 1.984375 -12.890625 0.796875 -11.53125 0.796875 -9.4375 C 0.796875 -7.328125 1.96875 -5.96875 3.15625 -5.96875 C 4.3125 -5.96875 5.28125 -7.421875 5.28125 -9.4375 C 5.28125 -10.625 4.921875 -11.4375 4.875 -11.53125 C 5.921875 -10.859375 6.953125 -10.78125 7.40625 -10.78125 C 8.5 -10.78125 9.296875 -11.1875 9.734375 -11.484375 L 9.75 -11.46875 L 2.3125 0.3125 C 2.15625 0.546875 2.15625 0.578125 2.15625 0.640625 C 2.15625 0.828125 2.3125 0.953125 2.46875 0.953125 C 2.625 0.953125 2.671875 0.859375 2.796875 0.671875 Z M 3.171875 -6.25 C 2.71875 -6.25 1.59375 -6.65625 1.59375 -9.4375 C 1.59375 -12.21875 2.71875 -12.625 3.171875 -12.625 C 4.109375 -12.625 4.96875 -11.265625 4.96875 -9.4375 C 4.96875 -7.609375 4.109375 -6.25 3.171875 -6.25 Z M 3.171875 -6.25 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1.078125 -14.109375 L 1.078125 -13.578125 C 2.5 -13.578125 2.734375 -13.578125 2.734375 -12.640625 L 2.734375 -1.46875 C 2.734375 -0.53125 2.5 -0.53125 1.078125 -0.53125 L 1.078125 0 L 7.640625 0 C 10.96875 0 13.640625 -3.0625 13.640625 -6.9375 C 13.640625 -10.84375 11.015625 -14.109375 7.640625 -14.109375 Z M 4.921875 -0.53125 C 4.09375 -0.53125 4.046875 -0.640625 4.046875 -1.34375 L 4.046875 -12.765625 C 4.046875 -13.46875 4.09375 -13.578125 4.921875 -13.578125 L 7.234375 -13.578125 C 8.9375 -13.578125 12.109375 -12.5625 12.109375 -6.9375 C 12.109375 -4.03125 11.25 -2.84375 10.859375 -2.296875 C 10.375 -1.65625 9.1875 -0.53125 7.234375 -0.53125 Z M 4.921875 -0.53125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 6.9375 -13.359375 C 6.9375 -13.796875 6.921875 -13.8125 6.546875 -13.8125 L 0.40625 -4.046875 L 0.40625 -3.515625 L 5.75 -3.515625 L 5.75 -1.484375 C 5.75 -0.75 5.703125 -0.53125 4.25 -0.53125 L 3.859375 -0.53125 L 3.859375 0 C 4.53125 -0.046875 5.640625 -0.046875 6.34375 -0.046875 C 7.046875 -0.046875 8.15625 -0.046875 8.8125 0 L 8.8125 -0.53125 L 8.421875 -0.53125 C 6.984375 -0.53125 6.9375 -0.75 6.9375 -1.484375 L 6.9375 -3.515625 L 9.046875 -3.515625 L 9.046875 -4.046875 L 6.9375 -4.046875 Z M 5.796875 -12 L 5.796875 -4.046875 L 0.828125 -4.046875 Z M 5.796875 -12 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 8.671875 -6.625 C 8.671875 -7.890625 8.65625 -10.03125 7.78125 -11.6875 C 7.015625 -13.140625 5.796875 -13.65625 4.734375 -13.65625 C 3.734375 -13.65625 2.484375 -13.203125 1.6875 -11.71875 C 0.875 -10.15625 0.78125 -8.234375 0.78125 -6.625 C 0.78125 -5.453125 0.8125 -3.65625 1.453125 -2.09375 C 2.328125 0.046875 3.921875 0.328125 4.734375 0.328125 C 5.6875 0.328125 7.125 -0.0625 7.96875 -2.03125 C 8.59375 -3.453125 8.671875 -5.125 8.671875 -6.625 Z M 4.734375 0 C 3.40625 0 2.625 -1.140625 2.328125 -2.703125 C 2.109375 -3.921875 2.109375 -5.703125 2.109375 -6.859375 C 2.109375 -8.453125 2.109375 -9.765625 2.375 -11.03125 C 2.765625 -12.78125 3.921875 -13.328125 4.734375 -13.328125 C 5.578125 -13.328125 6.671875 -12.765625 7.0625 -11.078125 C 7.328125 -9.890625 7.359375 -8.515625 7.359375 -6.859375 C 7.359375 -5.515625 7.359375 -3.859375 7.109375 -2.640625 C 6.671875 -0.390625 5.453125 0 4.734375 0 Z M 4.734375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 14.96875 -3.015625 C 14.96875 -5.40625 13.796875 -7.171875 12.421875 -7.171875 C 11.015625 -7.171875 9.578125 -5.53125 9.578125 -3.015625 C 9.578125 -0.5 10.984375 1.140625 12.421875 1.140625 C 13.796875 1.140625 14.96875 -0.59375 14.96875 -3.015625 Z M 12.4375 0.8125 C 11.890625 0.8125 10.5625 0.3125 10.5625 -3.015625 C 10.5625 -6.359375 11.890625 -6.84375 12.4375 -6.84375 C 13.578125 -6.84375 14.609375 -5.203125 14.609375 -3.015625 C 14.609375 -0.828125 13.578125 0.8125 12.4375 0.8125 Z M 13.171875 -14.75 C 13.328125 -14.96875 13.34375 -15 13.34375 -15.09375 C 13.34375 -15.34375 13.15625 -15.46875 13 -15.46875 C 12.78125 -15.46875 12.703125 -15.328125 12.5625 -15.15625 C 11.359375 -13.453125 9.703125 -13.265625 8.859375 -13.265625 C 6.796875 -13.265625 5.53125 -14.453125 5.140625 -14.828125 C 4.875 -15.078125 4.484375 -15.46875 3.78125 -15.46875 C 2.375 -15.46875 0.953125 -13.84375 0.953125 -11.3125 C 0.953125 -8.796875 2.359375 -7.171875 3.78125 -7.171875 C 5.171875 -7.171875 6.34375 -8.90625 6.34375 -11.3125 C 6.34375 -12.75 5.90625 -13.71875 5.84375 -13.84375 C 7.109375 -13.03125 8.34375 -12.9375 8.875 -12.9375 C 10.203125 -12.9375 11.15625 -13.421875 11.671875 -13.78125 L 11.6875 -13.75 L 2.765625 0.375 C 2.578125 0.65625 2.578125 0.703125 2.578125 0.765625 C 2.578125 0.984375 2.765625 1.140625 2.953125 1.140625 C 3.140625 1.140625 3.203125 1.03125 3.34375 0.8125 Z M 3.796875 -7.5 C 3.265625 -7.5 1.921875 -8 1.921875 -11.3125 C 1.921875 -14.671875 3.265625 -15.140625 3.796875 -15.140625 C 4.9375 -15.140625 5.96875 -13.515625 5.96875 -11.3125 C 5.96875 -9.125 4.9375 -7.5 3.796875 -7.5 Z M 3.796875 -7.5 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<path style="fill-rule:nonzero;fill:rgb(39.99939%,39.99939%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 26.890688 0.000375 C 26.890688 14.851937 14.851625 26.891 0.0000625 26.891 C -14.8515 26.891 -26.890562 14.851937 -26.890562 0.000375 C -26.890562 -14.851188 -14.8515 -26.89025 0.0000625 -26.89025 C 14.851625 -26.89025 26.890688 -14.851188 26.890688 0.000375 Z M 26.890688 0.000375 " transform="matrix(1,0,0,-1,27.789,88.016)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="25.352" y="85.791"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="19.009" y="97.746"/>
+ <use xlink:href="#glyph0-2" x="24.862266" y="97.746"/>
+ <use xlink:href="#glyph0-3" x="30.715532" y="97.746"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(40.000916%,80.703735%,96.237183%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 85.941469 47.910531 C 85.941469 68.914437 68.914125 85.941781 47.910219 85.941781 C 26.906313 85.941781 9.878969 68.914437 9.878969 47.910531 C 9.878969 26.906625 26.906313 9.879281 47.910219 9.879281 C 68.914125 9.879281 85.941469 26.906625 85.941469 47.910531 Z M 85.941469 47.910531 " transform="matrix(1,0,0,-1,27.789,88.016)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="73.066" y="37.735"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-1" x="65.163" y="51.483"/>
+ <use xlink:href="#glyph1-2" x="72.1869" y="51.483"/>
+ <use xlink:href="#glyph1-3" x="79.210799" y="51.483"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,96.939087%,40.000916%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 113.039125 -37.538688 C 113.039125 -11.812125 92.183656 9.039437 66.461 9.039437 C 40.734437 9.039437 19.882875 -11.812125 19.882875 -37.538688 C 19.882875 -63.261344 40.734437 -84.116813 66.461 -84.116813 C 92.183656 -84.116813 113.039125 -63.261344 113.039125 -37.538688 Z M 113.039125 -37.538688 " transform="matrix(1,0,0,-1,27.789,88.016)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-0" x="91.099" y="123.021"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-1" x="82.305" y="138.906"/>
+ <use xlink:href="#glyph2-2" x="90.199982" y="138.906"/>
+ <use xlink:href="#glyph2-3" x="98.094965" y="138.906"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,69.999695%,39.99939%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 195.24225 33.336312 C 195.24225 63.039437 171.164125 87.117562 141.461 87.117562 C 111.753969 87.117562 87.675844 63.039437 87.675844 33.336312 C 87.675844 3.629281 111.753969 -20.448844 141.461 -20.448844 C 171.164125 -20.448844 195.24225 3.629281 195.24225 33.336312 Z M 195.24225 33.336312 " transform="matrix(1,0,0,-1,27.789,88.016)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-0" x="165.066" y="51.941"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-1" x="154.913" y="70.408"/>
+ <use xlink:href="#glyph3-2" x="164.388823" y="70.408"/>
+ <use xlink:href="#glyph3-3" x="173.864645" y="70.408"/>
+</g>
+</g>
+</svg>
diff --git a/graphics/pgf/contrib/pgf-pie/demo/cloud.tex b/graphics/pgf/contrib/pgf-pie/demo/cloud.tex
new file mode 100644
index 0000000000..fba25f896c
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/cloud.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[cloud, text=inside, scale font]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/color.tex b/graphics/pgf/contrib/pgf-pie/demo/color.tex
new file mode 100644
index 0000000000..cb79b8c0ef
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/color.tex
@@ -0,0 +1,6 @@
+\begin{tikzpicture}
+ \pie[color={black!10, black!20, black!30, black!40}]
+ {10/A, 20/B, 30/C, 40/D}
+
+ \pie[pos={8,0}, color=blue!20] {10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex b/graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex
new file mode 100644
index 0000000000..1543fbe7c8
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie{10/, 10/, 10/, 10/, 10/, 10/, 10/, 10/, 10/, 10/}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/explode.tex b/graphics/pgf/contrib/pgf-pie/demo/explode.tex
new file mode 100644
index 0000000000..94c83fc70a
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/explode.tex
@@ -0,0 +1,7 @@
+\begin{tikzpicture}
+ % explode list
+ \pie[explode={0, 0, 0, 0.1}] {10/A, 20/B, 30/C, 40/D}
+
+ % explode all
+ \pie[pos={8,0}, explode=0.1] {10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/first-pie.svg b/graphics/pgf/contrib/pgf-pie/demo/first-pie.svg
new file mode 100644
index 0000000000..9feb8fe15c
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/first-pie.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="192.496pt" height="193.022pt" viewBox="0 0 192.496 193.022" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 3.96875 -6.9375 C 3.921875 -7.0625 3.890625 -7.140625 3.734375 -7.140625 C 3.578125 -7.140625 3.546875 -7.078125 3.5 -6.9375 L 1.4375 -0.984375 C 1.25 -0.46875 0.859375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.546875 -0.015625 0.984375 -0.03125 1.328125 -0.03125 C 1.640625 -0.03125 2.15625 -0.015625 2.484375 0 L 2.484375 -0.3125 C 1.984375 -0.3125 1.734375 -0.5625 1.734375 -0.8125 C 1.734375 -0.84375 1.75 -0.953125 1.75 -0.96875 L 2.21875 -2.265625 L 4.671875 -2.265625 L 5.203125 -0.75 C 5.21875 -0.703125 5.234375 -0.640625 5.234375 -0.609375 C 5.234375 -0.3125 4.671875 -0.3125 4.40625 -0.3125 L 4.40625 0 C 4.765625 -0.03125 5.46875 -0.03125 5.84375 -0.03125 C 6.265625 -0.03125 6.734375 -0.015625 7.140625 0 L 7.140625 -0.3125 L 6.96875 -0.3125 C 6.375 -0.3125 6.234375 -0.375 6.125 -0.703125 Z M 3.4375 -5.828125 L 4.5625 -2.578125 L 2.328125 -2.578125 Z M 3.4375 -5.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 4.578125 -3.1875 C 4.578125 -3.984375 4.53125 -4.78125 4.1875 -5.515625 C 3.734375 -6.484375 2.90625 -6.640625 2.5 -6.640625 C 1.890625 -6.640625 1.171875 -6.375 0.75 -5.453125 C 0.4375 -4.765625 0.390625 -3.984375 0.390625 -3.1875 C 0.390625 -2.4375 0.421875 -1.546875 0.84375 -0.78125 C 1.265625 0.015625 2 0.21875 2.484375 0.21875 C 3.015625 0.21875 3.78125 0.015625 4.21875 -0.9375 C 4.53125 -1.625 4.578125 -2.40625 4.578125 -3.1875 Z M 2.484375 0 C 2.09375 0 1.5 -0.25 1.328125 -1.203125 C 1.21875 -1.796875 1.21875 -2.71875 1.21875 -3.3125 C 1.21875 -3.953125 1.21875 -4.609375 1.296875 -5.140625 C 1.484375 -6.328125 2.234375 -6.421875 2.484375 -6.421875 C 2.8125 -6.421875 3.46875 -6.234375 3.65625 -5.25 C 3.765625 -4.6875 3.765625 -3.9375 3.765625 -3.3125 C 3.765625 -2.5625 3.765625 -1.890625 3.65625 -1.25 C 3.5 -0.296875 2.9375 0 2.484375 0 Z M 2.484375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 6.828125 -7.09375 C 6.890625 -7.1875 6.90625 -7.21875 6.90625 -7.28125 C 6.90625 -7.390625 6.8125 -7.484375 6.703125 -7.484375 C 6.609375 -7.484375 6.5625 -7.40625 6.5 -7.34375 C 6 -6.65625 5.328125 -6.390625 4.609375 -6.390625 C 3.90625 -6.390625 3.296875 -6.640625 2.734375 -7.15625 C 2.546875 -7.328125 2.34375 -7.484375 2.03125 -7.484375 C 1.265625 -7.484375 0.5625 -6.640625 0.5625 -5.46875 C 0.5625 -4.265625 1.28125 -3.453125 2.03125 -3.453125 C 2.75 -3.453125 3.3125 -4.34375 3.3125 -5.46875 C 3.3125 -5.609375 3.3125 -6.078125 3.109375 -6.59375 C 3.765625 -6.21875 4.25 -6.171875 4.609375 -6.171875 C 5.375 -6.171875 5.875 -6.484375 5.9375 -6.515625 L 5.953125 -6.515625 L 1.46875 0.15625 C 1.390625 0.296875 1.390625 0.34375 1.390625 0.359375 C 1.390625 0.46875 1.484375 0.5625 1.578125 0.5625 C 1.6875 0.5625 1.703125 0.515625 1.78125 0.40625 Z M 2.03125 -3.671875 C 1.828125 -3.671875 1.171875 -3.8125 1.171875 -5.46875 C 1.171875 -7.125 1.828125 -7.25 2.03125 -7.25 C 2.5625 -7.25 3.078125 -6.515625 3.078125 -5.46875 C 3.078125 -4.390625 2.546875 -3.671875 2.03125 -3.671875 Z M 6.453125 0.34375 C 6.25 0.34375 5.59375 0.203125 5.59375 -1.453125 C 5.59375 -3.109375 6.234375 -3.234375 6.453125 -3.234375 C 6.984375 -3.234375 7.484375 -2.5 7.484375 -1.453125 C 7.484375 -0.375 6.96875 0.34375 6.453125 0.34375 Z M 7.734375 -1.453125 C 7.734375 -2.59375 7.140625 -3.453125 6.4375 -3.453125 C 5.6875 -3.453125 4.96875 -2.625 4.96875 -1.453125 C 4.96875 -0.25 5.6875 0.5625 6.4375 0.5625 C 7.171875 0.5625 7.734375 -0.328125 7.734375 -1.453125 Z M 7.734375 -1.453125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.21875 -3.65625 L 2.21875 -6.09375 C 2.21875 -6.4375 2.234375 -6.5 2.703125 -6.5 L 3.9375 -6.5 C 4.90625 -6.5 5.25 -5.65625 5.25 -5.125 C 5.25 -4.484375 4.765625 -3.65625 3.65625 -3.65625 Z M 4.5625 -3.5625 C 5.53125 -3.75 6.21875 -4.390625 6.21875 -5.125 C 6.21875 -5.984375 5.296875 -6.8125 4 -6.8125 L 0.359375 -6.8125 L 0.359375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.390625 -6.390625 1.390625 -6.03125 L 1.390625 -0.78125 C 1.390625 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.359375 -0.3125 L 0.359375 0 L 4.265625 0 C 5.59375 0 6.484375 -0.890625 6.484375 -1.828125 C 6.484375 -2.6875 5.671875 -3.4375 4.5625 -3.5625 Z M 3.953125 -0.3125 L 2.703125 -0.3125 C 2.234375 -0.3125 2.21875 -0.375 2.21875 -0.703125 L 2.21875 -3.421875 L 4.09375 -3.421875 C 5.078125 -3.421875 5.5 -2.5 5.5 -1.828125 C 5.5 -1.125 4.96875 -0.3125 3.953125 -0.3125 Z M 3.953125 -0.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 1.265625 -0.765625 L 2.328125 -1.796875 C 3.875 -3.171875 4.46875 -3.703125 4.46875 -4.703125 C 4.46875 -5.84375 3.578125 -6.640625 2.359375 -6.640625 C 1.234375 -6.640625 0.5 -5.71875 0.5 -4.828125 C 0.5 -4.28125 1 -4.28125 1.03125 -4.28125 C 1.203125 -4.28125 1.546875 -4.390625 1.546875 -4.8125 C 1.546875 -5.0625 1.359375 -5.328125 1.015625 -5.328125 C 0.9375 -5.328125 0.921875 -5.328125 0.890625 -5.3125 C 1.109375 -5.96875 1.65625 -6.328125 2.234375 -6.328125 C 3.140625 -6.328125 3.5625 -5.515625 3.5625 -4.703125 C 3.5625 -3.90625 3.078125 -3.125 2.515625 -2.5 L 0.609375 -0.375 C 0.5 -0.265625 0.5 -0.234375 0.5 0 L 4.203125 0 L 4.46875 -1.734375 L 4.234375 -1.734375 C 4.171875 -1.4375 4.109375 -1 4 -0.84375 C 3.9375 -0.765625 3.28125 -0.765625 3.0625 -0.765625 Z M 1.265625 -0.765625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 0.5625 -3.40625 C 0.5625 -1.34375 2.171875 0.21875 4.03125 0.21875 C 5.65625 0.21875 6.625 -1.171875 6.625 -2.328125 C 6.625 -2.421875 6.625 -2.5 6.5 -2.5 C 6.390625 -2.5 6.390625 -2.4375 6.375 -2.328125 C 6.296875 -0.90625 5.234375 -0.09375 4.140625 -0.09375 C 3.53125 -0.09375 1.578125 -0.421875 1.578125 -3.40625 C 1.578125 -6.375 3.53125 -6.71875 4.140625 -6.71875 C 5.21875 -6.71875 6.109375 -5.8125 6.3125 -4.359375 C 6.328125 -4.21875 6.328125 -4.1875 6.46875 -4.1875 C 6.625 -4.1875 6.625 -4.21875 6.625 -4.421875 L 6.625 -6.78125 C 6.625 -6.953125 6.625 -7.03125 6.515625 -7.03125 C 6.484375 -7.03125 6.4375 -7.03125 6.359375 -6.90625 L 5.859375 -6.171875 C 5.5 -6.53125 4.984375 -7.03125 4.03125 -7.03125 C 2.15625 -7.03125 0.5625 -5.4375 0.5625 -3.40625 Z M 0.5625 -3.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 0.34375 -6.8125 L 0.34375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.375 -6.390625 1.375 -6.03125 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 L 4 0 C 5.671875 0 7.046875 -1.46875 7.046875 -3.34375 C 7.046875 -5.25 5.703125 -6.8125 4 -6.8125 Z M 2.71875 -0.3125 C 2.25 -0.3125 2.234375 -0.375 2.234375 -0.703125 L 2.234375 -6.09375 C 2.234375 -6.4375 2.25 -6.5 2.71875 -6.5 L 3.71875 -6.5 C 4.34375 -6.5 5.03125 -6.28125 5.53125 -5.578125 C 5.96875 -4.984375 6.046875 -4.125 6.046875 -3.34375 C 6.046875 -2.25 5.859375 -1.640625 5.5 -1.15625 C 5.296875 -0.890625 4.734375 -0.3125 3.734375 -0.3125 Z M 2.71875 -0.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 2.9375 -1.640625 L 2.9375 -0.78125 C 2.9375 -0.421875 2.90625 -0.3125 2.171875 -0.3125 L 1.96875 -0.3125 L 1.96875 0 C 2.375 -0.03125 2.890625 -0.03125 3.3125 -0.03125 C 3.734375 -0.03125 4.25 -0.03125 4.671875 0 L 4.671875 -0.3125 L 4.453125 -0.3125 C 3.71875 -0.3125 3.703125 -0.421875 3.703125 -0.78125 L 3.703125 -1.640625 L 4.6875 -1.640625 L 4.6875 -1.953125 L 3.703125 -1.953125 L 3.703125 -6.484375 C 3.703125 -6.6875 3.703125 -6.75 3.53125 -6.75 C 3.453125 -6.75 3.421875 -6.75 3.34375 -6.625 L 0.28125 -1.953125 L 0.28125 -1.640625 Z M 2.984375 -1.953125 L 0.5625 -1.953125 L 2.984375 -5.671875 Z M 2.984375 -1.953125 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<path style="fill-rule:nonzero;fill:rgb(39.99939%,39.99939%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.001375 -0.00165625 L 85.040438 -0.00165625 C 85.040438 17.951469 79.349031 35.455375 68.802156 49.978813 Z M 0.001375 -0.00165625 " transform="matrix(1,0,0,-1,96.108,95.721)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="181.203" y="65.713"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="145.945" y="80.023"/>
+ <use xlink:href="#glyph0-2" x="150.9263" y="80.023"/>
+ <use xlink:href="#glyph0-3" x="155.9076" y="80.023"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(40.000916%,80.703735%,96.237183%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.001375 -0.00165625 L 68.802156 49.978813 C 47.149813 79.7835 8.763094 92.260063 -26.272062 80.881156 Z M 0.001375 -0.00165625 " transform="matrix(1,0,0,-1,96.108,95.721)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-4" x="126.152" y="10.629"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="103.559" y="48.155"/>
+ <use xlink:href="#glyph0-2" x="108.5403" y="48.155"/>
+ <use xlink:href="#glyph0-3" x="113.5216" y="48.155"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,96.939087%,40.000916%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.001375 -0.00165625 L -26.272062 80.881156 C -55.162687 71.494438 -76.861906 47.400688 -83.178312 17.685844 C -88.190031 -5.884469 -82.963469 -30.486031 -68.799406 -49.982125 Z M 0.001375 -0.00165625 " transform="matrix(1,0,0,-1,96.108,95.721)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="3.82" y="65.677"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="43.891" y="85.178"/>
+ <use xlink:href="#glyph0-2" x="48.8723" y="85.178"/>
+ <use xlink:href="#glyph0-3" x="53.8536" y="85.178"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,69.999695%,39.99939%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.001375 -0.00165625 L -68.799406 -49.982125 C -41.197844 -87.978219 11.981844 -96.404 49.981844 -68.802437 C 71.997469 -52.806344 85.040438 -27.2165 85.040438 -0.00165625 Z M 0.001375 -0.00165625 " transform="matrix(1,0,0,-1,96.108,95.721)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="126.116" y="187.624"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-9" x="98.393" y="134.325"/>
+ <use xlink:href="#glyph0-2" x="103.3743" y="134.325"/>
+ <use xlink:href="#glyph0-3" x="108.3556" y="134.325"/>
+</g>
+</g>
+</svg>
diff --git a/graphics/pgf/contrib/pgf-pie/demo/first-pie.tex b/graphics/pgf/contrib/pgf-pie/demo/first-pie.tex
new file mode 100644
index 0000000000..e8c63761b4
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/first-pie.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/legend.tex b/graphics/pgf/contrib/pgf-pie/demo/legend.tex
new file mode 100644
index 0000000000..f6665f6c8e
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/legend.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[text=legend]{10/First, 20/Second, 30/Third, 40/Fourth}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/polar.svg b/graphics/pgf/contrib/pgf-pie/demo/polar.svg
new file mode 100644
index 0000000000..a4442a04df
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/polar.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="160.48pt" height="146.966pt" viewBox="0 0 160.48 146.966" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 3.96875 -6.9375 C 3.921875 -7.0625 3.890625 -7.140625 3.734375 -7.140625 C 3.578125 -7.140625 3.546875 -7.078125 3.5 -6.9375 L 1.4375 -0.984375 C 1.25 -0.46875 0.859375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.546875 -0.015625 0.984375 -0.03125 1.328125 -0.03125 C 1.640625 -0.03125 2.15625 -0.015625 2.484375 0 L 2.484375 -0.3125 C 1.984375 -0.3125 1.734375 -0.5625 1.734375 -0.8125 C 1.734375 -0.84375 1.75 -0.953125 1.75 -0.96875 L 2.21875 -2.265625 L 4.671875 -2.265625 L 5.203125 -0.75 C 5.21875 -0.703125 5.234375 -0.640625 5.234375 -0.609375 C 5.234375 -0.3125 4.671875 -0.3125 4.40625 -0.3125 L 4.40625 0 C 4.765625 -0.03125 5.46875 -0.03125 5.84375 -0.03125 C 6.265625 -0.03125 6.734375 -0.015625 7.140625 0 L 7.140625 -0.3125 L 6.96875 -0.3125 C 6.375 -0.3125 6.234375 -0.375 6.125 -0.703125 Z M 3.4375 -5.828125 L 4.5625 -2.578125 L 2.328125 -2.578125 Z M 3.4375 -5.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 4.578125 -3.1875 C 4.578125 -3.984375 4.53125 -4.78125 4.1875 -5.515625 C 3.734375 -6.484375 2.90625 -6.640625 2.5 -6.640625 C 1.890625 -6.640625 1.171875 -6.375 0.75 -5.453125 C 0.4375 -4.765625 0.390625 -3.984375 0.390625 -3.1875 C 0.390625 -2.4375 0.421875 -1.546875 0.84375 -0.78125 C 1.265625 0.015625 2 0.21875 2.484375 0.21875 C 3.015625 0.21875 3.78125 0.015625 4.21875 -0.9375 C 4.53125 -1.625 4.578125 -2.40625 4.578125 -3.1875 Z M 2.484375 0 C 2.09375 0 1.5 -0.25 1.328125 -1.203125 C 1.21875 -1.796875 1.21875 -2.71875 1.21875 -3.3125 C 1.21875 -3.953125 1.21875 -4.609375 1.296875 -5.140625 C 1.484375 -6.328125 2.234375 -6.421875 2.484375 -6.421875 C 2.8125 -6.421875 3.46875 -6.234375 3.65625 -5.25 C 3.765625 -4.6875 3.765625 -3.9375 3.765625 -3.3125 C 3.765625 -2.5625 3.765625 -1.890625 3.65625 -1.25 C 3.5 -0.296875 2.9375 0 2.484375 0 Z M 2.484375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 6.828125 -7.09375 C 6.890625 -7.1875 6.90625 -7.21875 6.90625 -7.28125 C 6.90625 -7.390625 6.8125 -7.484375 6.703125 -7.484375 C 6.609375 -7.484375 6.5625 -7.40625 6.5 -7.34375 C 6 -6.65625 5.328125 -6.390625 4.609375 -6.390625 C 3.90625 -6.390625 3.296875 -6.640625 2.734375 -7.15625 C 2.546875 -7.328125 2.34375 -7.484375 2.03125 -7.484375 C 1.265625 -7.484375 0.5625 -6.640625 0.5625 -5.46875 C 0.5625 -4.265625 1.28125 -3.453125 2.03125 -3.453125 C 2.75 -3.453125 3.3125 -4.34375 3.3125 -5.46875 C 3.3125 -5.609375 3.3125 -6.078125 3.109375 -6.59375 C 3.765625 -6.21875 4.25 -6.171875 4.609375 -6.171875 C 5.375 -6.171875 5.875 -6.484375 5.9375 -6.515625 L 5.953125 -6.515625 L 1.46875 0.15625 C 1.390625 0.296875 1.390625 0.34375 1.390625 0.359375 C 1.390625 0.46875 1.484375 0.5625 1.578125 0.5625 C 1.6875 0.5625 1.703125 0.515625 1.78125 0.40625 Z M 2.03125 -3.671875 C 1.828125 -3.671875 1.171875 -3.8125 1.171875 -5.46875 C 1.171875 -7.125 1.828125 -7.25 2.03125 -7.25 C 2.5625 -7.25 3.078125 -6.515625 3.078125 -5.46875 C 3.078125 -4.390625 2.546875 -3.671875 2.03125 -3.671875 Z M 6.453125 0.34375 C 6.25 0.34375 5.59375 0.203125 5.59375 -1.453125 C 5.59375 -3.109375 6.234375 -3.234375 6.453125 -3.234375 C 6.984375 -3.234375 7.484375 -2.5 7.484375 -1.453125 C 7.484375 -0.375 6.96875 0.34375 6.453125 0.34375 Z M 7.734375 -1.453125 C 7.734375 -2.59375 7.140625 -3.453125 6.4375 -3.453125 C 5.6875 -3.453125 4.96875 -2.625 4.96875 -1.453125 C 4.96875 -0.25 5.6875 0.5625 6.4375 0.5625 C 7.171875 0.5625 7.734375 -0.328125 7.734375 -1.453125 Z M 7.734375 -1.453125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.21875 -3.65625 L 2.21875 -6.09375 C 2.21875 -6.4375 2.234375 -6.5 2.703125 -6.5 L 3.9375 -6.5 C 4.90625 -6.5 5.25 -5.65625 5.25 -5.125 C 5.25 -4.484375 4.765625 -3.65625 3.65625 -3.65625 Z M 4.5625 -3.5625 C 5.53125 -3.75 6.21875 -4.390625 6.21875 -5.125 C 6.21875 -5.984375 5.296875 -6.8125 4 -6.8125 L 0.359375 -6.8125 L 0.359375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.390625 -6.390625 1.390625 -6.03125 L 1.390625 -0.78125 C 1.390625 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.359375 -0.3125 L 0.359375 0 L 4.265625 0 C 5.59375 0 6.484375 -0.890625 6.484375 -1.828125 C 6.484375 -2.6875 5.671875 -3.4375 4.5625 -3.5625 Z M 3.953125 -0.3125 L 2.703125 -0.3125 C 2.234375 -0.3125 2.21875 -0.375 2.21875 -0.703125 L 2.21875 -3.421875 L 4.09375 -3.421875 C 5.078125 -3.421875 5.5 -2.5 5.5 -1.828125 C 5.5 -1.125 4.96875 -0.3125 3.953125 -0.3125 Z M 3.953125 -0.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 1.265625 -0.765625 L 2.328125 -1.796875 C 3.875 -3.171875 4.46875 -3.703125 4.46875 -4.703125 C 4.46875 -5.84375 3.578125 -6.640625 2.359375 -6.640625 C 1.234375 -6.640625 0.5 -5.71875 0.5 -4.828125 C 0.5 -4.28125 1 -4.28125 1.03125 -4.28125 C 1.203125 -4.28125 1.546875 -4.390625 1.546875 -4.8125 C 1.546875 -5.0625 1.359375 -5.328125 1.015625 -5.328125 C 0.9375 -5.328125 0.921875 -5.328125 0.890625 -5.3125 C 1.109375 -5.96875 1.65625 -6.328125 2.234375 -6.328125 C 3.140625 -6.328125 3.5625 -5.515625 3.5625 -4.703125 C 3.5625 -3.90625 3.078125 -3.125 2.515625 -2.5 L 0.609375 -0.375 C 0.5 -0.265625 0.5 -0.234375 0.5 0 L 4.203125 0 L 4.46875 -1.734375 L 4.234375 -1.734375 C 4.171875 -1.4375 4.109375 -1 4 -0.84375 C 3.9375 -0.765625 3.28125 -0.765625 3.0625 -0.765625 Z M 1.265625 -0.765625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 0.5625 -3.40625 C 0.5625 -1.34375 2.171875 0.21875 4.03125 0.21875 C 5.65625 0.21875 6.625 -1.171875 6.625 -2.328125 C 6.625 -2.421875 6.625 -2.5 6.5 -2.5 C 6.390625 -2.5 6.390625 -2.4375 6.375 -2.328125 C 6.296875 -0.90625 5.234375 -0.09375 4.140625 -0.09375 C 3.53125 -0.09375 1.578125 -0.421875 1.578125 -3.40625 C 1.578125 -6.375 3.53125 -6.71875 4.140625 -6.71875 C 5.21875 -6.71875 6.109375 -5.8125 6.3125 -4.359375 C 6.328125 -4.21875 6.328125 -4.1875 6.46875 -4.1875 C 6.625 -4.1875 6.625 -4.21875 6.625 -4.421875 L 6.625 -6.78125 C 6.625 -6.953125 6.625 -7.03125 6.515625 -7.03125 C 6.484375 -7.03125 6.4375 -7.03125 6.359375 -6.90625 L 5.859375 -6.171875 C 5.5 -6.53125 4.984375 -7.03125 4.03125 -7.03125 C 2.15625 -7.03125 0.5625 -5.4375 0.5625 -3.40625 Z M 0.5625 -3.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 0.34375 -6.8125 L 0.34375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.375 -6.390625 1.375 -6.03125 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 L 4 0 C 5.671875 0 7.046875 -1.46875 7.046875 -3.34375 C 7.046875 -5.25 5.703125 -6.8125 4 -6.8125 Z M 2.71875 -0.3125 C 2.25 -0.3125 2.234375 -0.375 2.234375 -0.703125 L 2.234375 -6.09375 C 2.234375 -6.4375 2.25 -6.5 2.71875 -6.5 L 3.71875 -6.5 C 4.34375 -6.5 5.03125 -6.28125 5.53125 -5.578125 C 5.96875 -4.984375 6.046875 -4.125 6.046875 -3.34375 C 6.046875 -2.25 5.859375 -1.640625 5.5 -1.15625 C 5.296875 -0.890625 4.734375 -0.3125 3.734375 -0.3125 Z M 2.71875 -0.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 2.9375 -1.640625 L 2.9375 -0.78125 C 2.9375 -0.421875 2.90625 -0.3125 2.171875 -0.3125 L 1.96875 -0.3125 L 1.96875 0 C 2.375 -0.03125 2.890625 -0.03125 3.3125 -0.03125 C 3.734375 -0.03125 4.25 -0.03125 4.671875 0 L 4.671875 -0.3125 L 4.453125 -0.3125 C 3.71875 -0.3125 3.703125 -0.421875 3.703125 -0.78125 L 3.703125 -1.640625 L 4.6875 -1.640625 L 4.6875 -1.953125 L 3.703125 -1.953125 L 3.703125 -6.484375 C 3.703125 -6.6875 3.703125 -6.75 3.53125 -6.75 C 3.453125 -6.75 3.421875 -6.75 3.34375 -6.625 L 0.28125 -1.953125 L 0.28125 -1.640625 Z M 2.984375 -1.953125 L 0.5625 -1.953125 L 2.984375 -5.671875 Z M 2.984375 -1.953125 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<path style="fill-rule:nonzero;fill:rgb(39.99939%,39.99939%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00003125 0.00165625 L 42.5195 0.00165625 C 42.5195 23.482125 23.484344 42.521187 -0.00003125 42.521187 Z M -0.00003125 0.00165625 " transform="matrix(1,0,0,-1,74.543,61.029)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="108.826" y="26.747"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="82.904" y="46.996"/>
+ <use xlink:href="#glyph0-2" x="87.8853" y="46.996"/>
+ <use xlink:href="#glyph0-3" x="92.8666" y="46.996"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(40.000916%,80.703735%,96.237183%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00003125 0.00165625 L -0.00003125 60.130562 C -33.210969 60.130562 -60.132844 33.208687 -60.132844 0.00165625 Z M -0.00003125 0.00165625 " transform="matrix(1,0,0,-1,74.543,61.029)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-4" x="20.75" y="14.293"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="40.672" y="39.75"/>
+ <use xlink:href="#glyph0-2" x="45.6533" y="39.75"/>
+ <use xlink:href="#glyph0-3" x="50.6346" y="39.75"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,96.939087%,40.000916%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00003125 0.00165625 L -73.644563 0.00165625 C -73.644563 -40.674125 -40.675813 -73.646781 -0.00003125 -73.646781 Z M -0.00003125 0.00165625 " transform="matrix(1,0,0,-1,74.543,61.029)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="11.056" y="124.129"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="35.112" y="94.787"/>
+ <use xlink:href="#glyph0-2" x="40.0933" y="94.787"/>
+ <use xlink:href="#glyph0-3" x="45.0746" y="94.787"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,69.999695%,39.99939%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00003125 0.00165625 L -0.00003125 -85.037406 C 46.964812 -85.037406 85.039031 -46.967094 85.039031 0.00165625 Z M -0.00003125 0.00165625 " transform="matrix(1,0,0,-1,74.543,61.029)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="138.891" y="132.185"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-9" x="100.397" y="99.474"/>
+ <use xlink:href="#glyph0-2" x="105.3783" y="99.474"/>
+ <use xlink:href="#glyph0-3" x="110.3596" y="99.474"/>
+</g>
+</g>
+</svg>
diff --git a/graphics/pgf/contrib/pgf-pie/demo/polar.tex b/graphics/pgf/contrib/pgf-pie/demo/polar.tex
new file mode 100644
index 0000000000..4d86872493
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/polar.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[polar]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/population.tex b/graphics/pgf/contrib/pgf-pie/demo/population.tex
new file mode 100644
index 0000000000..9267acb3fc
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/population.tex
@@ -0,0 +1,27 @@
+% data from http://en.wikipedia.org/wiki/List_of_countries_by_population
+\begin{tikzpicture}
+ \pie[cloud, rotate=45, sum=auto, radius=35, after number=, text=pin] {1339/China,
+ 1210/India, 312/USA, 237/Indonesia, 190/Brazil, 177/Pakistan,
+ 158/Nigeria, 151/Bangladesh, 142/Russia, 127/Japan, 112/Mexico,
+ 94/Philippines, 87/Vietnam, 82/Ethiopia, 81/Germany, 80/Egypt,
+ 75/Iran, 73/Turkey, 67/Thailand, 65/Congo, 65/France, 62/UK,
+ 60/Italy, 50/South Africa, 48/South Korea, 47/Myanmar, 46/Spain,
+ 46/Colombia, 45/Ukraine, 43/Tanzania, 40/Argentina, 38/Kenya,
+ 38/Poland, 36/Algeria, 34/Canada, 32/Morocco, 31/Uganda, 31/Iraq,
+ 31/Afghanistan, 30/Sudan, 29/Peru, 29/Venezuela, 28/Nepal,
+ 28/Malaysia, 27/Uzbekistan, 27/Saudi Arabia, 24/Ghana, 24/North
+ Korea, 23/Syria, 23/Taiwan, 22/Australia, 22/Yemen, 21/Romania,
+ 20/Madagascar, 20/Sri Lanka, 20/Mozambique, 19/Cote d'Ivoire,
+ 19/Cameroon, 19/Angola, 17/Chile, 16/Netherlands, 16/Kazakhstan,
+ 15/Burkina Faso, 15/Niger, 14/Malawi, 14/Mali, 14/Guatemala,
+ 14/Ecuador, 13/Cambodia, 13/Zambia, 12/Zimbabwe, 12/Senegal,
+ 11/Cuba, 11/Chad, 10/Belgium, 10/Greece, 10/Portugal, 10/Tunisia,
+ 10/Czech Republic, 10/Bolivia, 10/Rwanda, 10/Haiti, 10/Hungary,
+ 10/Guinea, 10/Belarus, 9/Sweden, 9/Dominican Republic, 9/Somalia,
+ 9/Azerbaijan, 9/Benin, 8/Austria, 8/Burundi, 8/United Arab
+ Emirates, 8/South Sudan, 8/Honduras, 8/Switzerland, 8/Israel,
+ 7/Bulgaria, 7/Serbia, 7/Hong Kong }
+
+ % \node[circle,draw=black,thick, fill=white, font=\bf]
+ % {Population of the world};
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/pgf-pie/demo/radius.tex b/graphics/pgf/contrib/pgf-pie/demo/radius.tex
new file mode 100644
index 0000000000..944e218219
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/radius.tex
@@ -0,0 +1,7 @@
+\begin{tikzpicture}
+ \pie{10/, 20/, 30/, 40/}
+
+ \pie[pos={8,0}, rotate=180]{10/, 20/, 30/, 40/}
+
+ \pie[pos={17,0}, radius=4]{10/, 20/, 30/, 40/}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/scalefont.tex b/graphics/pgf/contrib/pgf-pie/demo/scalefont.tex
new file mode 100644
index 0000000000..df61709c40
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/scalefont.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[scale font]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/shadow.tex b/graphics/pgf/contrib/pgf-pie/demo/shadow.tex
new file mode 100644
index 0000000000..9ccfd9ffb5
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/shadow.tex
@@ -0,0 +1,4 @@
+% \usetikzlibrary{shadows}
+\begin{tikzpicture}
+ \pie[style=drop shadow]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/pgf-pie/demo/square.svg b/graphics/pgf/contrib/pgf-pie/demo/square.svg
new file mode 100644
index 0000000000..8e0a48f86a
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/square.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="186.625pt" height="185.823pt" viewBox="0 0 186.625 185.823" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 2.9375 -1.640625 L 2.9375 -0.78125 C 2.9375 -0.421875 2.90625 -0.3125 2.171875 -0.3125 L 1.96875 -0.3125 L 1.96875 0 C 2.375 -0.03125 2.890625 -0.03125 3.3125 -0.03125 C 3.734375 -0.03125 4.25 -0.03125 4.671875 0 L 4.671875 -0.3125 L 4.453125 -0.3125 C 3.71875 -0.3125 3.703125 -0.421875 3.703125 -0.78125 L 3.703125 -1.640625 L 4.6875 -1.640625 L 4.6875 -1.953125 L 3.703125 -1.953125 L 3.703125 -6.484375 C 3.703125 -6.6875 3.703125 -6.75 3.53125 -6.75 C 3.453125 -6.75 3.421875 -6.75 3.34375 -6.625 L 0.28125 -1.953125 L 0.28125 -1.640625 Z M 2.984375 -1.953125 L 0.5625 -1.953125 L 2.984375 -5.671875 Z M 2.984375 -1.953125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 4.578125 -3.1875 C 4.578125 -3.984375 4.53125 -4.78125 4.1875 -5.515625 C 3.734375 -6.484375 2.90625 -6.640625 2.5 -6.640625 C 1.890625 -6.640625 1.171875 -6.375 0.75 -5.453125 C 0.4375 -4.765625 0.390625 -3.984375 0.390625 -3.1875 C 0.390625 -2.4375 0.421875 -1.546875 0.84375 -0.78125 C 1.265625 0.015625 2 0.21875 2.484375 0.21875 C 3.015625 0.21875 3.78125 0.015625 4.21875 -0.9375 C 4.53125 -1.625 4.578125 -2.40625 4.578125 -3.1875 Z M 2.484375 0 C 2.09375 0 1.5 -0.25 1.328125 -1.203125 C 1.21875 -1.796875 1.21875 -2.71875 1.21875 -3.3125 C 1.21875 -3.953125 1.21875 -4.609375 1.296875 -5.140625 C 1.484375 -6.328125 2.234375 -6.421875 2.484375 -6.421875 C 2.8125 -6.421875 3.46875 -6.234375 3.65625 -5.25 C 3.765625 -4.6875 3.765625 -3.9375 3.765625 -3.3125 C 3.765625 -2.5625 3.765625 -1.890625 3.65625 -1.25 C 3.5 -0.296875 2.9375 0 2.484375 0 Z M 2.484375 0 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 6.828125 -7.09375 C 6.890625 -7.1875 6.90625 -7.21875 6.90625 -7.28125 C 6.90625 -7.390625 6.8125 -7.484375 6.703125 -7.484375 C 6.609375 -7.484375 6.5625 -7.40625 6.5 -7.34375 C 6 -6.65625 5.328125 -6.390625 4.609375 -6.390625 C 3.90625 -6.390625 3.296875 -6.640625 2.734375 -7.15625 C 2.546875 -7.328125 2.34375 -7.484375 2.03125 -7.484375 C 1.265625 -7.484375 0.5625 -6.640625 0.5625 -5.46875 C 0.5625 -4.265625 1.28125 -3.453125 2.03125 -3.453125 C 2.75 -3.453125 3.3125 -4.34375 3.3125 -5.46875 C 3.3125 -5.609375 3.3125 -6.078125 3.109375 -6.59375 C 3.765625 -6.21875 4.25 -6.171875 4.609375 -6.171875 C 5.375 -6.171875 5.875 -6.484375 5.9375 -6.515625 L 5.953125 -6.515625 L 1.46875 0.15625 C 1.390625 0.296875 1.390625 0.34375 1.390625 0.359375 C 1.390625 0.46875 1.484375 0.5625 1.578125 0.5625 C 1.6875 0.5625 1.703125 0.515625 1.78125 0.40625 Z M 2.03125 -3.671875 C 1.828125 -3.671875 1.171875 -3.8125 1.171875 -5.46875 C 1.171875 -7.125 1.828125 -7.25 2.03125 -7.25 C 2.5625 -7.25 3.078125 -6.515625 3.078125 -5.46875 C 3.078125 -4.390625 2.546875 -3.671875 2.03125 -3.671875 Z M 6.453125 0.34375 C 6.25 0.34375 5.59375 0.203125 5.59375 -1.453125 C 5.59375 -3.109375 6.234375 -3.234375 6.453125 -3.234375 C 6.984375 -3.234375 7.484375 -2.5 7.484375 -1.453125 C 7.484375 -0.375 6.96875 0.34375 6.453125 0.34375 Z M 7.734375 -1.453125 C 7.734375 -2.59375 7.140625 -3.453125 6.4375 -3.453125 C 5.6875 -3.453125 4.96875 -2.625 4.96875 -1.453125 C 4.96875 -0.25 5.6875 0.5625 6.4375 0.5625 C 7.171875 0.5625 7.734375 -0.328125 7.734375 -1.453125 Z M 7.734375 -1.453125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 3.96875 -6.9375 C 3.921875 -7.0625 3.890625 -7.140625 3.734375 -7.140625 C 3.578125 -7.140625 3.546875 -7.078125 3.5 -6.9375 L 1.4375 -0.984375 C 1.25 -0.46875 0.859375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.546875 -0.015625 0.984375 -0.03125 1.328125 -0.03125 C 1.640625 -0.03125 2.15625 -0.015625 2.484375 0 L 2.484375 -0.3125 C 1.984375 -0.3125 1.734375 -0.5625 1.734375 -0.8125 C 1.734375 -0.84375 1.75 -0.953125 1.75 -0.96875 L 2.21875 -2.265625 L 4.671875 -2.265625 L 5.203125 -0.75 C 5.21875 -0.703125 5.234375 -0.640625 5.234375 -0.609375 C 5.234375 -0.3125 4.671875 -0.3125 4.40625 -0.3125 L 4.40625 0 C 4.765625 -0.03125 5.46875 -0.03125 5.84375 -0.03125 C 6.265625 -0.03125 6.734375 -0.015625 7.140625 0 L 7.140625 -0.3125 L 6.96875 -0.3125 C 6.375 -0.3125 6.234375 -0.375 6.125 -0.703125 Z M 3.4375 -5.828125 L 4.5625 -2.578125 L 2.328125 -2.578125 Z M 3.4375 -5.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 2.890625 -3.515625 C 3.703125 -3.78125 4.28125 -4.46875 4.28125 -5.265625 C 4.28125 -6.078125 3.40625 -6.640625 2.453125 -6.640625 C 1.453125 -6.640625 0.6875 -6.046875 0.6875 -5.28125 C 0.6875 -4.953125 0.90625 -4.765625 1.203125 -4.765625 C 1.5 -4.765625 1.703125 -4.984375 1.703125 -5.28125 C 1.703125 -5.765625 1.234375 -5.765625 1.09375 -5.765625 C 1.390625 -6.265625 2.046875 -6.390625 2.40625 -6.390625 C 2.828125 -6.390625 3.375 -6.171875 3.375 -5.28125 C 3.375 -5.15625 3.34375 -4.578125 3.09375 -4.140625 C 2.796875 -3.65625 2.453125 -3.625 2.203125 -3.625 C 2.125 -3.609375 1.890625 -3.59375 1.8125 -3.59375 C 1.734375 -3.578125 1.671875 -3.5625 1.671875 -3.46875 C 1.671875 -3.359375 1.734375 -3.359375 1.90625 -3.359375 L 2.34375 -3.359375 C 3.15625 -3.359375 3.53125 -2.6875 3.53125 -1.703125 C 3.53125 -0.34375 2.84375 -0.0625 2.40625 -0.0625 C 1.96875 -0.0625 1.21875 -0.234375 0.875 -0.8125 C 1.21875 -0.765625 1.53125 -0.984375 1.53125 -1.359375 C 1.53125 -1.71875 1.265625 -1.921875 0.984375 -1.921875 C 0.734375 -1.921875 0.421875 -1.78125 0.421875 -1.34375 C 0.421875 -0.4375 1.34375 0.21875 2.4375 0.21875 C 3.65625 0.21875 4.5625 -0.6875 4.5625 -1.703125 C 4.5625 -2.515625 3.921875 -3.296875 2.890625 -3.515625 Z M 2.890625 -3.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 2.21875 -3.65625 L 2.21875 -6.09375 C 2.21875 -6.4375 2.234375 -6.5 2.703125 -6.5 L 3.9375 -6.5 C 4.90625 -6.5 5.25 -5.65625 5.25 -5.125 C 5.25 -4.484375 4.765625 -3.65625 3.65625 -3.65625 Z M 4.5625 -3.5625 C 5.53125 -3.75 6.21875 -4.390625 6.21875 -5.125 C 6.21875 -5.984375 5.296875 -6.8125 4 -6.8125 L 0.359375 -6.8125 L 0.359375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.390625 -6.390625 1.390625 -6.03125 L 1.390625 -0.78125 C 1.390625 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.359375 -0.3125 L 0.359375 0 L 4.265625 0 C 5.59375 0 6.484375 -0.890625 6.484375 -1.828125 C 6.484375 -2.6875 5.671875 -3.4375 4.5625 -3.5625 Z M 3.953125 -0.3125 L 2.703125 -0.3125 C 2.234375 -0.3125 2.21875 -0.375 2.21875 -0.703125 L 2.21875 -3.421875 L 4.09375 -3.421875 C 5.078125 -3.421875 5.5 -2.5 5.5 -1.828125 C 5.5 -1.125 4.96875 -0.3125 3.953125 -0.3125 Z M 3.953125 -0.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 1.265625 -0.765625 L 2.328125 -1.796875 C 3.875 -3.171875 4.46875 -3.703125 4.46875 -4.703125 C 4.46875 -5.84375 3.578125 -6.640625 2.359375 -6.640625 C 1.234375 -6.640625 0.5 -5.71875 0.5 -4.828125 C 0.5 -4.28125 1 -4.28125 1.03125 -4.28125 C 1.203125 -4.28125 1.546875 -4.390625 1.546875 -4.8125 C 1.546875 -5.0625 1.359375 -5.328125 1.015625 -5.328125 C 0.9375 -5.328125 0.921875 -5.328125 0.890625 -5.3125 C 1.109375 -5.96875 1.65625 -6.328125 2.234375 -6.328125 C 3.140625 -6.328125 3.5625 -5.515625 3.5625 -4.703125 C 3.5625 -3.90625 3.078125 -3.125 2.515625 -2.5 L 0.609375 -0.375 C 0.5 -0.265625 0.5 -0.234375 0.5 0 L 4.203125 0 L 4.46875 -1.734375 L 4.234375 -1.734375 C 4.171875 -1.4375 4.109375 -1 4 -0.84375 C 3.9375 -0.765625 3.28125 -0.765625 3.0625 -0.765625 Z M 1.265625 -0.765625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 0.5625 -3.40625 C 0.5625 -1.34375 2.171875 0.21875 4.03125 0.21875 C 5.65625 0.21875 6.625 -1.171875 6.625 -2.328125 C 6.625 -2.421875 6.625 -2.5 6.5 -2.5 C 6.390625 -2.5 6.390625 -2.4375 6.375 -2.328125 C 6.296875 -0.90625 5.234375 -0.09375 4.140625 -0.09375 C 3.53125 -0.09375 1.578125 -0.421875 1.578125 -3.40625 C 1.578125 -6.375 3.53125 -6.71875 4.140625 -6.71875 C 5.21875 -6.71875 6.109375 -5.8125 6.3125 -4.359375 C 6.328125 -4.21875 6.328125 -4.1875 6.46875 -4.1875 C 6.625 -4.1875 6.625 -4.21875 6.625 -4.421875 L 6.625 -6.78125 C 6.625 -6.953125 6.625 -7.03125 6.515625 -7.03125 C 6.484375 -7.03125 6.4375 -7.03125 6.359375 -6.90625 L 5.859375 -6.171875 C 5.5 -6.53125 4.984375 -7.03125 4.03125 -7.03125 C 2.15625 -7.03125 0.5625 -5.4375 0.5625 -3.40625 Z M 0.5625 -3.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 0.34375 -6.8125 L 0.34375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.375 -6.390625 1.375 -6.03125 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 L 4 0 C 5.671875 0 7.046875 -1.46875 7.046875 -3.34375 C 7.046875 -5.25 5.703125 -6.8125 4 -6.8125 Z M 2.71875 -0.3125 C 2.25 -0.3125 2.234375 -0.375 2.234375 -0.703125 L 2.234375 -6.09375 C 2.234375 -6.4375 2.25 -6.5 2.71875 -6.5 L 3.71875 -6.5 C 4.34375 -6.5 5.03125 -6.28125 5.53125 -5.578125 C 5.96875 -4.984375 6.046875 -4.125 6.046875 -3.34375 C 6.046875 -2.25 5.859375 -1.640625 5.5 -1.15625 C 5.296875 -0.890625 4.734375 -0.3125 3.734375 -0.3125 Z M 2.71875 -0.3125 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<path style="fill-rule:nonzero;fill:rgb(39.99939%,39.99939%,100%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -85.039563 -85.040781 L -85.039563 85.04125 L -17.012219 85.04125 L -17.012219 -85.040781 Z M -85.039563 -85.040781 " transform="matrix(1,0,0,-1,85.938,99.885)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="25.78" y="103.344"/>
+ <use xlink:href="#glyph0-1" x="30.7613" y="103.344"/>
+ <use xlink:href="#glyph0-2" x="35.7426" y="103.344"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-3" x="31.177" y="10.629"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(40.000916%,80.703735%,96.237183%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -17.012219 -85.040781 L -17.012219 -0.005625 L 85.038562 -0.005625 L 85.038562 -85.040781 Z M -17.012219 -85.040781 " transform="matrix(1,0,0,-1,85.938,99.885)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-4" x="110.82" y="145.867"/>
+ <use xlink:href="#glyph0-1" x="115.8013" y="145.867"/>
+ <use xlink:href="#glyph0-2" x="120.7826" y="145.867"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-5" x="175.194" y="145.812"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,96.939087%,40.000916%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -17.012219 -0.005625 L -17.012219 85.04125 L 51.011219 85.04125 L 51.011219 -0.005625 Z M -17.012219 -0.005625 " transform="matrix(1,0,0,-1,85.938,99.885)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-6" x="93.806" y="60.828"/>
+ <use xlink:href="#glyph0-1" x="98.7873" y="60.828"/>
+ <use xlink:href="#glyph0-2" x="103.7686" y="60.828"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-7" x="99.341" y="10.629"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,69.999695%,39.99939%);fill-opacity:1;stroke-width:0.79701;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 51.011219 -0.005625 L 51.011219 84.998281 L 85.038562 84.998281 L 85.038562 -0.005625 Z M 51.011219 -0.005625 " transform="matrix(1,0,0,-1,85.938,99.885)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-8" x="144.831" y="60.848"/>
+ <use xlink:href="#glyph0-1" x="149.8123" y="60.848"/>
+ <use xlink:href="#glyph0-2" x="154.7936" y="60.848"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-9" x="175.194" y="60.793"/>
+</g>
+</g>
+</svg>
diff --git a/graphics/pgf/contrib/pgf-pie/demo/square.tex b/graphics/pgf/contrib/pgf-pie/demo/square.tex
new file mode 100644
index 0000000000..dd37da64cf
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/square.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[square]{40/A, 30/B, 20/C, 10/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/sum.tex b/graphics/pgf/contrib/pgf-pie/demo/sum.tex
new file mode 100644
index 0000000000..13e2b7365c
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/sum.tex
@@ -0,0 +1,5 @@
+\begin{tikzpicture}
+ \pie[sum=auto, after number=, radius=2]{33/Boys, 7/Girls}
+
+ \pie[pos={6,0}, sum=40, after number=, radius=2]{33/Boys}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/text-inside.tex b/graphics/pgf/contrib/pgf-pie/demo/text-inside.tex
new file mode 100644
index 0000000000..07cf42eafd
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/text-inside.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[text=inside]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/demo/text.tex b/graphics/pgf/contrib/pgf-pie/demo/text.tex
new file mode 100644
index 0000000000..95ef108578
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/demo/text.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[text=pin]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-pie/logo.png b/graphics/pgf/contrib/pgf-pie/logo.png
new file mode 100644
index 0000000000..68959bc616
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/logo.png
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
new file mode 100644
index 0000000000..24dd816df6
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
new file mode 100644
index 0000000000..8afb987d26
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
@@ -0,0 +1,200 @@
+% Manual of pgf-pie.sty, a convenient set of macros for drawing pie
+% chart. Written by Xu Yuan <xuyuan.cn@gmail.com> This file is part of
+% pgf-pie you may get it at http://code.google.com/p/pgf-pie/
+
+\documentclass{article}
+\usepackage[margin=12mm]{geometry}
+\usepackage{hyperref}
+
+\usepackage{pgf-pie}
+\usetikzlibrary{shadows}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{listings}
+\usepackage{color}
+\definecolor{listinggray}{gray}{0.92}
+\lstset{ %
+language=[LaTeX]TeX,
+breaklines=true,
+frame=single,
+% frameround=tttt,
+basicstyle=\footnotesize\ttfamily,
+backgroundcolor=\color{listinggray},
+keywordstyle=\color{blue}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hypersetup{
+ colorlinks=true,
+ linkcolor=blue,
+ anchorcolor=black,
+ citecolor=olive,
+ filecolor=magenta,
+ menucolor=red,
+ urlcolor=blue
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\demo}[2][1]{
+ \begin{center}
+ \begin{tabular}{cc}
+ \begin{minipage}{.49\linewidth}
+ \centering
+ \resizebox{#1\linewidth}{!}{
+ \input{demo/#2}
+ }
+ \end{minipage}
+ &
+ \begin{minipage}{.45\linewidth}
+ \lstinputlisting{demo/#2}
+ \end{minipage}
+ \end{tabular}
+ \end{center}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\example}[2][1]{
+ \begin{center}
+ \resizebox{#1\linewidth}{!}{
+ \input{demo/#2}
+ }
+ \end{center}
+ \lstinputlisting{demo/#2}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{Drawing Pie Chart by using \texttt{pgf-pie}}
+\author{\href{mailto:xuyuan.cn@gmail.com}{Yuan Xu}}
+\date{\today{}~(v0.2)}
+\maketitle
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{abstract}
+ \texttt{pgf-pie} is a LaTeX package for drawing pie chart (and
+ variant charts). As stated by its name, it is based on a very
+ popular graphic package \texttt{PGF/TikZ}. This document presents
+ the usage of \texttt{pgf-pie} and collects some pie charts as
+ examples. \texttt{pgf-pie} can be downloaded from
+ \href{http://code.google.com/p/pgf-pie/}{http://code.google.com/p/pgf-pie/}.
+\end{abstract}
+
+\tableofcontents
+
+\section{Usage}
+
+\subsection{First Pie}
+\lstinline|\pie| is the only coomand that provided by
+\texttt{pgf-pie}. The argument is a list of number and text
+combination in the formate of \texttt{number/text}, i.e. \texttt{10/A,
+ 20/B, 30/C, 40/D}. The result is shown in figure \ref{fig:first-pie}.
+\begin{figure}
+ \centering
+ \demo[0.6]{first-pie}
+ \caption{The first pie.}
+ \label{fig:first-pie}
+\end{figure}
+
+\subsection{Position, Rotation, Size}
+
+The center of chart can be set by \texttt{pos}, default is
+\texttt{\{0,0\}}. The chart can be rotated by setting \texttt{rotate}
+(in degrees). The size of chart can be set by \texttt{radius}, default
+is 3.
+
+\demo{radius}
+
+\subsection{Color}
+The color can be specified by \texttt{color}, the default color wheel
+is shown in figure \ref{fig:color-wheel}.
+\begin{figure}
+ \centering
+ \input{demo/colorwheel}
+ \caption{Default color wheel}
+ \label{fig:color-wheel}
+\end{figure}
+
+\demo{color}
+
+\subsection{Explode}
+\demo{explode}
+
+\subsection{Angle of slices}
+The value of \texttt{sum} indicats the sum of all data in the chart,
+it is 100 by default. It can be calculated automatically when
+\texttt{auto} is set. Then the angle of slices are determined by
+number value and \texttt{sum}.
+
+\demo{sum}
+
+\subsection{Text}
+
+\subsubsection{Number}
+Two parameters can be used to decorate number: \texttt{before number}
+and \texttt{after number}. Both are empty by default, but if
+\texttt{sum=100}, \texttt{after number} will be set to \%
+automatically if user doesn't set it.
+
+\demo[0.6]{before-after-number}
+
+\paragraph{Scale font}
+The size of font in size pie can be scaled according to how big the
+part is automatically.
+
+\demo[0.6]{scalefont}
+
+\subsubsection{Label text}
+The value of \texttt{text} can be \texttt{label}(default),
+\texttt{pin}, \texttt{inside} or \texttt{legend}.
+
+\demo[0.6]{text}
+
+\demo[0.5]{text-inside}
+
+\demo[0.6]{legend}
+
+\subsection{More about style}
+\subsubsection{shadow}
+\demo[0.6]{shadow}
+
+\section{Variant Charts}
+\subsection{Polar area diagram}
+The polar area diagram is similar to a usual pie chart, except sectors
+are equal angles and differ rather in how far each sector extends from
+the center of the circle.
+
+\demo[0.6]{polar}
+
+\subsection{Square}
+
+\demo[0.6]{square}
+
+Note: \texttt{explode} has no affects in sqaure chart.
+
+\subsection{Clouds}
+
+\demo[0.6]{cloud}
+
+\section{Examples}
+
+% \subsection{Population of the world}
+% \example{population}
+
+\section{Acknowledgements}
+Many people contributed to \texttt{pgf-pie} by reporting problems,
+suggesting various improvements or submitting code. Here is a list of
+these people:
+\href{mailto:mohammed.alfaki@ii.uib.no}{Mohammed Alfaki},
+and
+\href{mailto:ldrude@mail.uni-paderborn.de}{Lukas Drude}
+.
+
+\end{document}
+%%% Local Variables:
+%%% mode: Tex-PDF
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/pgf-pie/pgf-pie.sty b/graphics/pgf/contrib/pgf-pie/pgf-pie.sty
new file mode 100644
index 0000000000..6a669e337f
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/pgf-pie.sty
@@ -0,0 +1,439 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Start of pgf-pie.sty
+%
+% Some LaTeX macros for pie chart by using PGF/Tikz package.
+% Home page of project: http://pgf-pie.googlecode.com/
+% Author: Xu Yuan <xuyuan.cn@gmail.com>
+%
+
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{pgf-pie}[2011/10/02 v0.2 Some LaTeX macros for pie
+chart by using PGF/Tikz package.]
+
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+\RequirePackage{scalefnt}
+
+
+% args:
+% #1: begin angle
+% #2: end angle
+% #3: number
+% #4: label
+% #5: explode
+% #6: fill color
+% #7: radius
+% #8: center
+\newcommand{\pgfpie@slice}[8]{
+ \pgfmathparse{0.5*(#1)+0.5*(#2)}
+ \let\midangle\pgfmathresult
+
+ \path (#8) -- ++(\midangle:#5) coordinate(O);
+
+ \pgfmathparse{#7+#5}
+ \let\radius\pgfmathresult
+
+ % slice
+ \draw[line join=round, fill=#6, \style] (O) -- ++(#1:#7) arc (#1:#2:#7) -- cycle;
+
+ \pgfmathparse{min(((#2)-(#1)-10)/110*(-0.3),0)}
+ \let\temp\pgfmathresult
+ \pgfmathparse{(max(\temp,-0.5) + 0.8)*#7}
+ \let\innerpos\pgfmathresult
+
+ \ifthenelse{\equal{\pgfpie@text}{inside}}
+ {
+ % label and number together
+ \path (O) -- ++(\midangle:\innerpos) node
+ {\scalefont{#3}\shortstack{#4\\\beforenumber#3\afternumber}};
+ }
+ {
+ % label
+ \iflegend
+ \else
+ \path (O) -- ++ (\midangle:\radius)
+ node[inner sep=0, \pgfpie@text=\midangle:#4]{};
+ \fi
+
+ % number
+ \path (O) -- ++(\midangle:\innerpos) node
+ {\scalefont{#3}\beforenumber#3\afternumber};
+ }
+}
+
+\newcommand{\pgfpie@findColor}[1]
+{
+ \pgfmathparse{int(mod(#1,\value{pgfpie@colorLength}))}
+ \let\ci\pgfmathresult
+ \foreach \c [count=\j from 0] in \color {
+ \ifnum \j=\ci
+ \xdef\thecolor{\c}
+ \thecolor
+ \breakforeach
+ \fi
+ }
+}
+
+\newcommand{\pgfpie@findExplode}[1]
+{
+ \pgfmathparse{int(mod(#1,\value{pgfpie@explodeLength}))}
+ \let\ei\pgfmathresult
+ \foreach \e [count=\j from 0] in \explode {
+ \ifnum \j=\ei
+ \xdef\theexplode{\e}
+ \breakforeach
+ \fi
+ }
+}
+
+% #1: bottom left point
+% #2: size
+% #3: number
+% #4: color
+% #5: text
+\newcommand{\pgfpie@square}[5]
+{
+ \ifthenelse{\equal{\pgfpie@text}{inside}}
+ {
+ \draw[fill=#4, \style] (#1) rectangle node
+ {\scalefont{#3}\shortstack{#5\\\beforenumber#3\afternumber}} ++(#2);
+ }
+ {
+ \draw[fill=#4, \style] (#1) rectangle node
+ {\scalefont{#3}\beforenumber#3\afternumber} ++(#2);
+ }
+}
+
+% #1: pos
+% #2: radius
+% #3: number
+% #4: color
+% $5: style
+% $6: label
+\newcommand{\pgfpie@cloud}[6]
+{
+ \draw[fill=#4, #5] (#1) circle[radius=#2];
+ \ifthenelse{\equal{\pgfpie@text}{inside}}
+ {
+ \node at (#1) {\scalefont{#3}\shortstack{#6\\\beforenumber#3\afternumber}};
+ }
+ {
+ \node at (#1) {\scalefont{#3}\beforenumber#3\afternumber};
+ }
+}
+
+\newlength{\pgfpie@angleEnd}
+\newcounter{pgfpie@explodeLength}
+\newcounter{pgfpie@colorLength}
+\newcounter{pgfpie@sliceLength}
+
+\def\setexplode#1\pgfeov{\def\explode{#1}}
+\pgfkeyslet{/explode/.@cmd}{\setexplode}
+
+\def\setcolor#1\pgfeov{\def\color{#1}}
+\pgfkeyslet{/color/.@cmd}{\setcolor}
+
+\def\setradius#1\pgfeov{\def\radius{#1}}
+\pgfkeyslet{/radius/.@cmd}{\setradius}
+
+\def\setpos#1\pgfeov{\def\pos{#1}}
+\pgfkeyslet{/pos/.@cmd}{\setpos}
+
+\def\setstyle#1\pgfeov{\def\style{#1}}
+\pgfkeyslet{/style/.@cmd}{\setstyle}
+
+\def\setbeforenumber#1\pgfeov{\def\beforenumber{#1}}
+\pgfkeyslet{/before number/.@cmd}{\setbeforenumber}
+
+\def\setafternumber#1\pgfeov{\def\afternumber{#1}}
+\pgfkeyslet{/after number/.@cmd}{\setafternumber}
+
+\def\settext#1\pgfeov{\xdef\pgfpie@text{#1}}
+\pgfkeyslet{/text/.@cmd}{\settext}
+
+\def\setsum#1\pgfeov{\xdef\pgfpie@sum{#1}}
+\pgfkeyslet{/sum/.@cmd}{\setsum}
+
+\def\setrotate#1\pgfeov{\xdef\rotate{#1}}
+\pgfkeyslet{/rotate/.@cmd}{\setrotate}
+
+\newif\ifpolar
+\pgfkeys{/polar/.is if=polar}
+
+\newif\iflegend
+
+\newif\ifsquare
+\pgfkeys{/square/.is if=square}
+
+\newif\ifcloud
+\pgfkeys{/cloud/.is if=cloud}
+
+\newif\ifscalefont
+\pgfkeys{/scale font/.is if=scalefont}
+\let\scalefontorg\scalefont
+\renewcommand{\scalefont}[1]
+{
+ \ifscalefont
+ \pgfmathparse{#1 / \pgfpie@sum * 3 + 0.9}
+ \scalefontorg{\pgfmathresult}
+ \fi
+}
+
+\newcommand{\pie}[2][]
+{
+ % load default parameters
+ \pgfkeys{
+ explode=0,
+ color={blue!60, cyan!60, yellow!60, orange!60, red!60,
+ blue!60!cyan!60, cyan!60!yellow!60, red!60!cyan!60,
+ red!60!blue!60, orange!60!cyan!60},
+ radius=3,
+ pos={0,0},
+ style={thick},
+ before number=,
+ after number=,
+ text=label,
+ sum=100,
+ rotate=0,
+ polar=false,
+ square=false,
+ cloud=false,
+ scale font=false,
+ }
+ % load user's parameters
+ \pgfkeys{#1}
+ % add percentage automatically
+ \ifthenelse{\equal{\pgfpie@sum}{100}}
+ {
+ \pgfkeys{after number=\%}
+ \pgfkeys{#1}
+ }{}
+
+ % legend or not
+ \ifthenelse{\equal{\pgfpie@text}{legend}}
+ {\legendtrue}
+ {\legendfalse}
+
+ % handle sum
+ \ifthenelse{\equal{\pgfpie@sum}{auto}}
+ {
+ % sum all input
+ \xdef\pgfpie@sum{0}
+ \foreach \p/\t in {#2}
+ {
+ \pgfmathparse{\pgfpie@sum + \p}
+ \xdef\pgfpie@sum{\pgfmathresult}
+ }
+ }
+ {}
+
+ % init counters
+ \setcounter{pgfpie@explodeLength}{0}
+ \foreach \e in \explode { \addtocounter{pgfpie@explodeLength}{1} }
+
+ \setcounter{pgfpie@colorLength}{0}
+ \foreach \c in \color { \addtocounter{pgfpie@colorLength}{1} }
+
+ \pgfmathsetlength{\pgfpie@angleEnd}{0}
+
+ \setcounter{pgfpie@sliceLength}{0}
+ \foreach \p/\e in {#2} { \addtocounter{pgfpie@sliceLength}{1} }
+
+ \ifsquare
+ %%%%%%%%%% SQUARE PIE BEGIN %%%%%%%%%%%
+ \pgfmathparse{\radius*2}
+ \xdef\verticalLength{\pgfmathresult}
+ \xdef\horizontalLength{\pgfmathresult}
+ \path (\pos) -- ++(-\radius, -\radius) coordinate (start);
+ \pgfmathparse{\verticalLength * \horizontalLength / \pgfpie@sum}
+ \let\squareUnit\pgfmathresult
+
+ % drawing loop
+ \foreach \p/\t [count=\i from 0] in {#2}
+ {
+ \pgfpie@findColor{\i}
+
+ \ifthenelse{\lengthtest{\verticalLength cm > \horizontalLength cm}}
+ {
+ \pgfmathparse{\p * \squareUnit / \horizontalLength}
+ \let\height\pgfmathresult
+
+ \pgfpie@square{start}{\horizontalLength,\height}
+ {\p}
+ {\thecolor}
+ {\t}
+ %label
+ \iflegend
+ \else
+ \ifthenelse{\equal{\pgfpie@text}{inside}}
+ {}
+ {
+ \path (start) -- ++(\horizontalLength,\height*0.5) node[inner
+ sep=0, \pgfpie@text=0:\t]{};
+ }
+ \fi
+
+ \pgfmathparse{\verticalLength - \height}
+ \xdef\verticalLength{\pgfmathresult}
+ \path (start) -- ++(0, \height) coordinate (start);
+ }
+ {
+ \pgfmathparse{\p * \squareUnit / \verticalLength }
+ \let\width\pgfmathresult
+
+ \pgfpie@square{start}{\width,\verticalLength}
+ {\p}
+ {\thecolor}
+ {\t}
+ %label
+ \iflegend
+ \else
+ \ifthenelse{\equal{\pgfpie@text}{inside}}
+ {}
+ {
+ \path (start) -- ++(\width*0.5,\verticalLength) node[inner
+ sep=0, \pgfpie@text=90:\t]{};
+ }
+ \fi
+
+ \pgfmathparse{\horizontalLength - \width}
+ \xdef\horizontalLength{\pgfmathresult}
+ \path (start) -- ++(\width, 0) coordinate (start);
+ }
+ }
+
+ %%%%%%%%%% SQUARE PIE END %%%%%%%%%%%
+ \else
+ \ifcloud
+ %%%%%%%%%% CLOUD PIE BGEIN %%%%%%%%%%%
+ % drawing loop
+ \foreach \p/\t [count=\i from 0] in {#2}
+ {
+ % find explode
+ \pgfpie@findExplode{\i}
+ \def\cloudGap{\theexplode + 0.1}
+ \pgfmathparse{sqrt(\p / \pgfpie@sum) * \radius}
+ \let\cloudR\pgfmathresult
+ \ifnum \i = 0
+ % first cloud
+ \coordinate (O) at (\pos);
+ \xdef\cloudRone{\cloudR}
+ \xdef\cloudExtendDir{180+\rotate}
+ \else
+ \ifnum \i = 1
+ % second cloud
+ \xdef\cloudRtwo{\cloudR}
+ \xdef\cloudExtendDir{45+\rotate}
+ \path (O) -- ++(\cloudExtendDir:\cloudRone+\cloudGap+\cloudRtwo) coordinate (O);
+ \else
+ % next cloud
+ \pgfmathparse{\cloudRone+\cloudGap+\cloudRtwo}
+ \let\la\pgfmathresult
+ \pgfmathparse{\cloudRone+\cloudGap+\cloudR}
+ \let\lb\pgfmathresult
+ \pgfmathparse{\cloudRtwo+\cloudGap+\cloudR}
+ \let\lc\pgfmathresult
+ \pgfmathparse{\la^2+\lc^2-\lb^2}
+ \let\tmp\pgfmathresult
+ \pgfmathparse{180 - acos(\tmp / 2 / \la / \lc)}
+ \let\cloudRot\pgfmathresult
+ \ifodd \i
+ \pgfmathparse{-\cloudRot}
+ \let\cloudRot\pgfmathresult
+ \fi
+ \pgfmathparse{\cloudExtendDir - \cloudRot}
+ \xdef\cloudExtendDir{\pgfmathresult}
+ \path (O) -- ++(\cloudExtendDir:\lc) coordinate (O);
+ \xdef\cloudRone{\cloudRtwo}
+ \xdef\cloudRtwo{\cloudR}
+ \fi
+ \fi
+
+ % find color
+ \pgfpie@findColor{\i}
+
+ \pgfpie@cloud{O}{\cloudR}{\p}
+ {\thecolor}{\style}{\t}
+
+ % label
+ \iflegend
+ \else
+ \ifthenelse{\equal{\pgfpie@text}{inside}}
+ {}
+ {
+ \path (O) -- ++(\cloudExtendDir:\cloudR)
+ node[inner sep=0, \pgfpie@text=\cloudExtendDir:\t] {};
+ }
+ \fi
+ }
+ %%%%%%%%%% CLOUD PIE BGEIN %%%%%%%%%%%
+ \else
+ %%%%%%%%%% CIRCLE PIE BGEIN %%%%%%%%%%%
+ \ifpolar
+ \xdef\maxValue{0}
+ \foreach \p/\e in {#2} {
+ \ifnum \maxValue < \p
+ \xdef\maxValue{\p}
+ \fi
+ }
+ \pgfmathparse{\pgfpie@sum / \value{pgfpie@sliceLength}}
+ \xdef\polarangle{\pgfmathresult}
+ \pgfmathparse{\radius / sqrt(\maxValue)}
+ \xdef\polarRadiusUnit{\pgfmathresult}
+ \else
+ \xdef\theradius{\radius}
+ \fi
+
+ \xdef\pgfpie@angleBegin{\the\pgfpie@angleEnd}
+ % drawing loop
+ \foreach \p/\t [count=\i from 0] in {#2}
+ {
+ \pgfmathsetlength{\pgfpie@angleEnd}{\pgfpie@angleBegin}
+ \ifpolar
+ % Polar area diagram
+ \pgfmathaddtolength{\pgfpie@angleEnd}{\polarangle}
+ \pgfmathparse{sqrt(\p) * \polarRadiusUnit}
+ \xdef\theradius{\pgfmathresult}
+ \else
+ % normal pie
+ \pgfmathaddtolength{\pgfpie@angleEnd}{\p}
+ \fi
+
+ % find explode
+ \pgfpie@findExplode{\i}
+
+ % find color
+ \pgfpie@findColor{\i}
+ \pgfpie@slice{\pgfpie@angleBegin/\pgfpie@sum*360+\rotate}
+ {\the\pgfpie@angleEnd/\pgfpie@sum*360+\rotate}
+ {\p}
+ {\t}
+ {\theexplode}
+ {\thecolor}
+ {\theradius}
+ {\pos}
+ \xdef\pgfpie@angleBegin{\the\pgfpie@angleEnd}
+ }
+ %%%%%%%%%% CIRCLE PIE END %%%%%%%%%%%
+ \fi
+ \fi
+
+ % legend
+ \iflegend
+ \coordinate[xshift=0.8cm,
+ yshift=(\value{pgfpie@sliceLength}*0.5+1)*0.5cm] (legendpos) at
+ (current bounding box.east);
+
+ \begin{scope}[node distance=0.5cm]
+ \foreach \p/\t [count=\i from 0] in {#2}
+ {
+ \pgfpie@findColor{\i}
+ \node[draw, fill=\thecolor, \style, below of=legendpos, label=0:\t] (legendpos) {};
+ }
+ \end{scope}
+ \fi
+}
+
+%%% End of pgf-pie.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/graphics/pgf/contrib/pgf-soroban/Changes b/graphics/pgf/contrib/pgf-soroban/Changes
new file mode 100644
index 0000000000..83813f8e53
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-soroban/Changes
@@ -0,0 +1,5 @@
+pgf-soroban.sty --------
+2007-12-10 v1.00 first CTAN Version
+2013-11-27 v1.1 corrected version
+
+pgf-soroban-doc.tex --------
diff --git a/graphics/pgf/contrib/pgf-soroban/README b/graphics/pgf/contrib/pgf-soroban/README
new file mode 100644
index 0000000000..afc34680ca
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-soroban/README
@@ -0,0 +1,10 @@
+pgf-soroban: creates images of the Japanese abacus
+
+pgf-soroban.sty - The LaTeX style file
+pgf-soroban-doc.pdf - The documentation
+pgf-soroban-doc.tex - The documentation, source
+pgf-soroban-doc.bib - The documentation, bibfile
+
+This material is subject to The LaTeX Project Public License (lppl)
+--
+Alain Delmotte 2013-11-27 (2007-12-10)
diff --git a/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.bib b/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.bib
new file mode 100644
index 0000000000..3a982a0c90
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.bib
@@ -0,0 +1,56 @@
+% This file was created with JabRef 2.9.2.
+% Encoding: UTF8
+
+@BOOK{fauskes1,
+ title = {PGF and Ti{\textit{k}}{Z} examples gallery},
+ publisher = {\texttt{http://www.texample.net/tikz/examples/}},
+ year = {2013},
+ author = {Fauskes, Kjell Magne AND Kottwitz, Stefan}
+}
+
+@BOOK{fauskes2,
+ title = {PGF and Ti{\textit{k}}{Z} resources},
+ publisher = {\texttt{http://www.texample.net/tikz/resources/}},
+ year = {2013},
+ author = {Fauskes, Kjell Magne AND Kottwitz, Stefan}
+}
+
+@BOOK{tlgc2,
+ title = {The {\LaTeX} {G}raphics {C}ompanion},
+ publisher = {{Addison-Wesley Publishing Company}},
+ year = {2007},
+ author = {Goosens, Michel and Mittelbach, Frank and Rahtz, Sebastian and Roegel,
+ Denis and Vo{\ss}, Herbert},
+ address = {Reading, Mass.},
+ edition = second
+}
+
+@BOOK{matthes,
+ title = {Ti{\textit{k}}{Z}/PGF},
+ publisher = {\texttt{http://www.altermundus.fr/pages/pdflatex/tikz.html}},
+ year = {2013},
+ author = {Alain Matthes}
+}
+
+@BOOK{mertz,
+ title = {Graphics with PGF and T{\textit{k}}{Z}},
+ publisher = {\texttt{http://www.tug.org/pracjourn/2007-1/mertz/}},
+ year = {2007},
+ author = {Mertz, Andrew and Slough, William},
+ journal = {The Prac{\TeX} {J}ournal}
+}
+
+@BOOK{tikz,
+ title = {Ti{\textit{k}}{Z} and {PGF}. {M}anual for version 2.10},
+ publisher = {\texttt{http://sourceforge.net/projects/pgf}},
+ year = {2013},
+ author = {Tantau, Till}
+}
+
+@BOOK{tikz2,
+ title = {PGF and Ti{\textit{k}}{Z} -- Graphic systems for TeX},
+ publisher = {\texttt{http://sourceforge.net/projects/pgf}},
+ year = {2013},
+ author = {Tantau, Till}
+}
+
diff --git a/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.pdf b/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.pdf
new file mode 100644
index 0000000000..072e2815de
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.tex b/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.tex
new file mode 100644
index 0000000000..d85443290f
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-soroban/pgf-soroban-doc.tex
@@ -0,0 +1,298 @@
+\documentclass[a4paper]{article}
+
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{lmodern}
+
+\newcommand{\ttsl}[1]{\texttt{\textsl{#1}}}
+\usepackage{pgf-soroban}
+
+\title{SOROBAN abacus\\\ \\package \texttt{pgf-soroban}}
+\author{Alain Delmotte \texttt{esperanto@swing.be}}
+\date{November 27, 2013}
+
+\begin{document}
+\maketitle
+\tableofcontents
+\newpage
+
+\section{Original size}
+
+\begin{center}
+\begin{tikzpicture}
+\tige{1}{1}{1}
+\tige{2}{0}{0}
+\tige{3}{6}{0}
+\tige{4}{7}{1}
+\tige{5}{4}{0}
+\tige{6}{3}{0}
+\cadre{6}
+\end{tikzpicture}
+\end{center}
+\vspace{10mm}
+
+\section{Example of use}
+
+\textbf{Step 1}
+\vspace{10mm}
+\ladj{0.25}
+\textbf{2 + 1} (in colours)\\
+1) Put 2 with thumb
+\hspace*{5mm}
+\begin{tikzpicture}
+\tige{1}{2}{1}
+\binoire{1}{5}{black}
+\binoire{1}{6}{black}
+\barres{1}
+\end{tikzpicture}
+\quad 2) Add 1
+\hspace*{5mm}
+\begin{tikzpicture}
+\tige{1}{3}{1}
+\binoire{1}{5}{gray}
+\binoire{1}{6}{gray}
+\binoire{1}{7}{black}
+\barres{1}
+\end{tikzpicture}
+\quad
+\hspace{5mm}$\Rightarrow$ \textbf{= 3}\hspace{5mm}
+\begin{tikzpicture}
+\tige{1}{3}{1}
+\barres{1}
+\end{tikzpicture}
+\vspace{15mm}
+
+\renewcommand{\colbil}{white}
+\renewcommand{\coltig}{darkgray}
+\noindent\textbf{7 - 1} (in black and white for printing)\\
+1) Set 7 at once (pinch)\hspace*{5mm}
+\begin{tikzpicture}
+\tige{1}{7}{1}
+\binoire{1}{5}{black}
+\binoire{1}{6}{black}
+\binoire{1}{10}{black}
+\barres{1}
+\end{tikzpicture}
+\quad 2) Substract 1
+\hspace*{5mm}
+\begin{tikzpicture}
+\tige{1}{7}{1}
+\binoire{1}{5}{gray}
+\binoire{1}{6}{gray}
+\binoire{1}{10}{gray}
+\barbil{1}{6}
+\barres{1}
+\end{tikzpicture}
+\quad
+\hspace{5mm}$\Rightarrow$ \textbf{= 6}\hspace{5mm}
+\begin{tikzpicture}
+\tige{1}{6}{1}
+\binoire{1}{3}{black}
+\barres{1}
+\end{tikzpicture}
+\newpage
+
+\section{Using the package}
+
+In the preamble, insert the instruction \verb+\usepackage{pgf-soroban}+~\footnote{\ There is a corresponding package \texttt{pst-soroban.sty} for use with Pstricks.}. There is
+no need to load the corresponding graphics package as the packages are required
+by the soroban package.
+
+The package also sets a base unit as 1 mm, as well as other lengths; this draws a soroban of the normal size as used in schools, shops,\dots If one wants to change the size, one sets the units by \verb+\ladj{0.25}+ (here $\frac 14$ of the normal size). That instruction can be used any time in the document to change the size for some part if required.
+
+To draw a soroban, one draws rod(s) with the required bids in the right position and add either a frame or just top and bottom parts of the frame. One can then add some bids in other colours and also cross some bids.
+
+Let's draw a soroban representing the number 321.45 in small size: 0.25.
+
+\renewcommand{\colbil}{yellow}
+\renewcommand{\coltig}{brun}
+\ladj{0.25}
+\begin{center}
+\begin{tikzpicture}
+\tige{1}{0}{1}
+\tige{2}{3}{0}
+\tige{3}{2}{0}
+\tige{4}{1}{1}
+\tige{5}{4}{0}
+\tige{6}{5}{0}
+\cadre{6}
+\end{tikzpicture}
+\end{center}
+\begin{tabular}{|l|l|l|}
+\hline
+\textbf{line}& \textbf{tikz/pgf} & \textbf{PStricks} \\
+\hline
+\verb| 1| & \verb|\ladj{0.25}| & \verb|\psset{unit=0.25mm} |\\
+\verb| 2| & \verb|\begin{tikzpicture}| & \verb|\begin{pspicture}(-2,-2)(122,76)|\\
+\verb| 3| & \verb|\tige{1}{0}{1} | & \verb|\tige{1}{0}{1} |\\
+\verb| 4| & \verb|\tige{2}{3}{0} | & \verb|\tige{2}{3}{0} |\\
+\verb| 5| & \verb|\tige{3}{2}{0} | & \verb|\tige{3}{2}{0} |\\
+\verb| 6| & \verb|\tige{4}{1}{1} | & \verb|\tige{4}{1}{1} |\\
+\verb| 7| & \verb|\tige{5}{4}{0} | & \verb|\tige{5}{4}{0} |\\
+\verb| 8| & \verb|\tige{6}{5}{0} | & \verb|\tige{6}{5}{0} |\\
+\verb| 9| & \verb|\cadre{6} | & \verb|\cadre{6} |\\
+\verb|10| & \verb|\end{tikzpicture} | & \verb|\end{pspicture} |\\
+\hline
+\end{tabular}
+\vspace{6pt}
+
+Line 1 defines the size, lines 2 and 10 create the picture environment, lines 3--8 draw the rods and line 9 creates the frame. Lines 3 and 6 specify a dotted rod (third argument = 1), the values (0, 3, 2, 1, 4 and 5) are in the second argument
+
+It is not necessary for tikz to specify the dimensions of the picture as the package reserves the area needed for the created graphic.~\footnote{\ For PStricks (\texttt{pst-soroban}), one has to give the dimensions of the picture, otherwise the drawing would have no size and would overlap the surrounding text. One gives some space before and below (\texttt{(-2,-2)}) and after above. The picture is 74.6 units hight and 20* number of rods wide (here \texttt{(122,76)}). Of course, if one adds something before, under, after or above the soroban, one has to adjust the corresponding part of the frame dimension.}
+
+To draw a rod, one uses the command \verb+\tige+. The syntax is:
+\begin{center}
+\verb|\tige[|\ttsl{<st>}\verb|]{|\ttsl{<nu>}\verb|}{|\ttsl{<val>}\verb|}{|\ttsl{<un>}\verb|}|
+\end{center}
+
+The \ttsl{<nu>} argument numbers the rods from left to right. \ttsl{<val>} is the number to be represented on the rod from 0 to 9. The \ttsl{<un>} argument tells that there is a dot on the central bar (1) or not (0); there is normally a dot for the unit, thousand, million,\dots ranks.
+
+The \ttsl{<st>} argument is optional and tells at which position the drawing is started; the default value is 1. This is interesting when one wants to put more then one drawing on a line:
+
+\begin{center}
+\begin{minipage}[][][c]{5cm}
+\begin{verbatim}
+\begin{tikzpicture}
+\tige{1}{1}{1}
+\barres{1}
+\tige[5]{1}{6}{1}
+\barres[5]{1}
+\tige[9]{1}{5}{1}
+\barres[9]{1}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\hspace{10mm}
+\begin{minipage}[][][c]{5cm}
+\begin{tikzpicture}
+\tige{1}{1}{1}
+\barres{1}
+\tige[5]{1}{6}{1}
+\barres[5]{1}
+\tige[9]{1}{5}{1}
+\barres[9]{1}
+\end{tikzpicture}
+\end{minipage}
+\end{center}
+
+In this example, there is no frame but only parts of it above and below; this is created with the \verb+\barres+ command. The syntaxes for the frame and top/bottom lines are:
+\begin{center}
+\verb|\cadre[|\ttsl{<st>}\verb|]{|\ttsl{<nb>}\verb|}| and \verb|\barres[|\ttsl{<st>}\verb|]{|\ttsl{<nb>}\verb|}|.
+\end{center}
+
+The optional \ttsl{<st>} arguments are the same as the one of \verb+\tige+, the \ttsl{<nb>} argument tell how many rods have to be covered.
+
+If one wants to colour a specific bid , one can achieve this with \verb+\binoire+:
+\begin{center}
+\verb|\binoire[|\ttsl{<st>}\verb|]{|\ttsl{<nu>}\verb|}{|\ttsl{<pos>}\verb|}{|\ttsl{<col>}\verb|}|
+\end{center}
+
+\ttsl{<st>} and \ttsl{<nu>} arguments are the same as for \verb+\tige+; the \ttsl{<col>} argument defines the colour and the \ttsl{<pos>} argument tells which bid has to be coloured as shown in the following example.
+
+\begin{center}
+\begin{minipage}[c]{5cm}
+\begin{verbatim}
+\begin{tikzpicture}
+\tige{1}{0}{1}
+\tige{2}{0}{1}
+\tige{3}{0}{1}
+\tige{4}{0}{1}
+\tige{5}{4}{1}
+\tige{6}{4}{1}
+\tige{7}{4}{1}
+\tige{8}{4}{1}
+\tige{9}{0}{1}
+\tige{10}{5}{1}
+\cadre{10}
+\binoire{1}{1}{black}
+\binoire{2}{2}{black}
+\binoire{3}{3}{black}
+\binoire{4}{4}{black}
+\binoire{5}{5}{black}
+\binoire{6}{6}{black}
+\binoire{7}{7}{black}
+\binoire{8}{8}{black}
+\binoire{9}{9}{black}
+\binoire{10}{10}{black}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\hspace{10mm}
+\begin{minipage}[][][c]{5cm}
+\begin{tikzpicture}
+\tige{1}{0}{1}
+\tige{2}{0}{1}
+\tige{3}{0}{1}
+\tige{4}{0}{1}
+\tige{5}{4}{1}
+\tige{6}{4}{1}
+\tige{7}{4}{1}
+\tige{8}{4}{1}
+\tige{9}{0}{1}
+\tige{10}{5}{1}
+\cadre{10}
+\binoire{1}{1}{black}
+\binoire{2}{2}{black}
+\binoire{3}{3}{black}
+\binoire{4}{4}{black}
+\binoire{5}{5}{black}
+\binoire{6}{6}{black}
+\binoire{7}{7}{black}
+\binoire{8}{8}{black}
+\binoire{9}{9}{black}
+\binoire{10}{10}{black}
+\end{tikzpicture}
+\end{minipage}
+\end{center}
+
+The \verb+\barbil+ command allows to cross a bid (see example below); the syntax is:
+\begin{center}
+\verb|\barbil[|\ttsl{<st>}\verb|]{|\ttsl{<nu>}\verb|}{|\ttsl{<pos>}\verb|}|
+\end{center}
+The arguments \ttsl{<st>}, \ttsl{<nu>} and \ttsl{<pos>} have the same meaning as those of \verb+\binoire+.
+
+Finally, one can change the overall colours of the rods and the bids, for example to print in black and white.
+This is done by changing the values of the \verb+\colbil+ (for the bids) and \verb+\coltig+ (for the rods) commands; by default there are ``yellow'' and ``brun'' (new brown colour defined in the package).
+
+\begin{center}
+\begin{minipage}[][][c]{5cm}
+\begin{verbatim}
+\renewcommand{\colbil}{white}
+\renewcommand{\coltig}{black}
+\begin{tikzpicture}
+\tige{1}{1}{1}
+\barres{1}
+\tige[5]{1}{6}{1}
+\barbil[5]{1}{5}
+\barres[5]{1}
+\tige[9]{1}{5}{1}
+\barres[9]{1}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\hspace{10mm}
+\renewcommand{\colbil}{white}
+\renewcommand{\coltig}{black}
+\begin{minipage}[][][c]{5cm}
+\begin{tikzpicture}
+\tige{1}{1}{1}
+\barres{1}
+\tige[5]{1}{6}{1}
+\barbil[5]{1}{5}
+\barres[5]{1}
+\tige[9]{1}{5}{1}
+\barres[9]{1}
+\end{tikzpicture}
+\end{minipage}
+\end{center}
+
+\nocite{*}
+\bgroup
+\raggedright
+\bibliographystyle{plain}
+\bibliography{\jobname}
+\egroup
+
+\end{document}
+
+
diff --git a/graphics/pgf/contrib/pgf-soroban/pgf-soroban.sty b/graphics/pgf/contrib/pgf-soroban/pgf-soroban.sty
new file mode 100644
index 0000000000..43278e4b01
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-soroban/pgf-soroban.sty
@@ -0,0 +1,106 @@
+%%
+%% This is file `pgf-soroban.sty',
+%%
+%%% ====================================================================
+%%% @LaTeX-file{
+%%% filename = "pgf-soroban.sty",
+%%% version = "1.1",
+%%% date = "2013/11/27",
+%%% author = "Alain Delmotte",
+%%% address = "Alain Delmotte,
+%%% rampe du Couvent, 11a,
+%%% B-1348 Louvain-la-Neuve
+%%% BELGIUM",
+%%% email = "esperanto@swing.be",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "soroban, abacus, japanese",
+%%% supported = "yes",
+%%% }
+%
+
+\RequirePackage{calc,ifthen}
+\RequirePackage{tikz}
+
+\definecolor{brun}{rgb}{.55 .27 .08} % nouvelle couleur brune
+\newcommand{\colbil}{yellow} % couleur par défaut des billes
+\newcommand{\coltig}{brun} % couleur par défaut des billes
+
+\newcounter{xx}
+\newcounter{yy}
+\newlength{\unba}\setlength{\unba}{1mm} % unité de base, par défaut 1mm
+\newlength{\eplia}\setlength{\eplia}{3.9mm} % support et ligne centrale
+\newlength{\eplib}\setlength{\eplib}{2pt} % deux barres autour ligne centrale
+\newlength{\eplic}\setlength{\eplic}{6pt} % cadre et barres extérieures
+\newlength{\eplid}\setlength{\eplid}{1pt} % arrondi des billes
+
+\newcommand{\ladj}[1]{% ajustement des longueurs
+\setlength{\unba}{1mm * \real{#1}}
+\setlength{\eplia}{3.9mm * \real{#1}}
+\setlength{\eplib}{2pt * \real{#1}}
+\setlength{\eplic}{6pt * \real{#1}}
+\setlength{\eplid}{1pt * \real{#1}}
+}
+
+\newcommand{\bille}[2]{\filldraw[fill=#2, draw=\coltig, line width=\eplib,x=\unba, y=\unba,rounded corners=\eplid ](#1)+(-8.7,0){-- +(-2.2,5.3)-- +(2.2,5.3)}-- +(8.7,0){-- +(2.2,-5.3)-- +(-2.2,-5.3)}--cycle; %[rounded corners, very thick]
+\draw[draw=\coltig, cap=round, line width=\eplib,x=\unba, y=\unba ] (#1)+(-8.6,0)-- +(8.6,0);
+}
+
+\newcommand{\support}[1]{%
+\draw[line width=\eplia, \coltig,x=\unba, y=\unba ](#1,0)-- +(0,74);
+\draw[line width=\eplia, white,x=\unba, y=\unba ](#1,0)+(-10,54.4)-- +(10,54.4);
+\draw[line width=\eplib, x=\unba, y=\unba ](#1,0)+(-11,52.8)-- +(11,52.8);
+\draw[line width=\eplib, x=\unba, y=\unba ](#1,0)+(-11,56.1)-- +(11,56.1);
+}
+
+\newcommand{\tige}[4][1]{\setcounter{xx}{20*(#2-1+#1) - 10}%
+\support{\value{xx}}
+\ifthenelse{#3>4}{\bille{\value{xx},62}{\colbil}}{\bille{\value{xx},68.2}{\colbil}}
+\ifthenelse{\(#3=0\)\or\(#3=5\)}{\foreach \m in {5.3,16,26.7,37.4} {\bille{\value{xx},\m}{\colbil}}}{%
+\ifthenelse{\(#3=1\)\or\(#3=6\)}{\foreach \m in {5.3,16,26.7,46.9} {\bille{\value{xx},\m}{\colbil}}}{%
+\ifthenelse{\(#3=2\)\or\(#3=7\)}{\foreach \m in {5.3,16,36.3,46.9} {\bille{\value{xx},\m}{\colbil}}}{%
+\ifthenelse{\(#3=3\)\or\(#3=8\)}{\foreach \m in {5.3,25.6,36.3,46.9} {\bille{\value{xx},\m}{\colbil}}}{%
+\ifthenelse{\(#3=4\)\or\(#3=9\)}{\foreach \m in {14.9,25.6,36.3,46.9} {\bille{\value{xx},\m}{\colbil}}}{%
+}}}}}
+\ifthenelse{#4=1}{\draw[fill=black,x= \unba, y= \unba] (\value{xx},54.4) circle(\unba);}{}
+}
+
+\newcommand{\binoire}[4][1]{%
+\setcounter{xx}{20*(#2-1+#1)-10}
+\ifthenelse{#3=1}{\bille{\value{xx},5.3}{#4}}{% 1 en bas xooo o
+\ifthenelse{#3=2}{\bille{\value{xx},16}{#4}}{% 2 oxoo o
+\ifthenelse{#3=3}{\bille{\value{xx},26.7}{#4}}{% 3 ooxo o
+\ifthenelse{#3=4}{\bille{\value{xx},37.4}{#4}}{% 4 ooox o
+\ifthenelse{#3=5}{\bille{\value{xx},46.9}{#4}}{% 6 ooo x o
+\ifthenelse{#3=6}{\bille{\value{xx},36.3}{#4}}{% 7 oo xo o
+\ifthenelse{#3=7}{\bille{\value{xx},25.6}{#4}}{% 8 o xoo o
+\ifthenelse{#3=8}{\bille{\value{xx},14.9}{#4}}{% 9 xooo o
+\ifthenelse{#3=9}{\bille{\value{xx},68.2}{#4}}{% 5 * 0 oooo x
+\ifthenelse{#3=10}{\bille{\value{xx},62}{#4}}{% 5 * 1 oooo x
+}}}}}}}}}}
+}
+
+\newcommand{\barbil}[3][1]{%
+\setcounter{xx}{20*(#2-1+#1)-10}
+\ifthenelse{#3=1}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},5.3)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 1 = 1 en bas xooo oo
+\ifthenelse{#3=2}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},16)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 2 = 2 oxoo oo
+\ifthenelse{#3=3}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},26.7)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 3 = 3 ooxo oo
+\ifthenelse{#3=4}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},37.4)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 4 = 4 ooox oo
+\ifthenelse{#3=5}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},46.9)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 5 = 6 ooo x oo
+\ifthenelse{#3=6}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},36.3)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 6 = 7 oo xo oo
+\ifthenelse{#3=7}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},25.6)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 7 = 8 o xoo oo
+\ifthenelse{#3=8}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},14.9)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 8 = 9 xooo oo
+\ifthenelse{#3=9}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},68.2)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 9 = 5 * 0 oooo ox
+\ifthenelse{#3=10}{\draw[draw=\coltig, cap=round, line width=\unba,x=\unba, y=\unba ] (\value{xx},62)+(-8.6,-5.3)-- +(8.6,5.3);}{ % 10 = 5 * 1 oooo xo
+}}}}}}}}}}
+}
+
+\newcommand{\cadre}[2][1]{\setcounter{xx}{20*(#2-1+#1) + 1}%
+\draw[black, line width=\eplic,x=\unba, y=\unba, rounded corners=\eplia](-1,-1.2)-- (\value{xx},-1.2)-- (\value{xx},74.65)-- (-1, 74.65)--cycle;
+}
+
+\newcommand{\barres}[2][1]{%
+\setcounter{xx}{20*(#1) -21}%
+\setcounter{yy}{20*(#2-1+#1) + 2}%
+\draw[black, line width=\eplic,x=\unba, y=\unba](\value{xx},-1.2) -- (\value{yy},-1.2);
+\draw[black, line width=\eplic,x=\unba, y=\unba](\value{xx}, 74.65) -- (\value{yy}, 74.65);
+}
diff --git a/graphics/pgf/contrib/pgf-spectra/README b/graphics/pgf/contrib/pgf-spectra/README
new file mode 100644
index 0000000000..bfe4139315
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-spectra/README
@@ -0,0 +1,20 @@
+This is pgf-spectra, version 1.0 (15/04/2016).
+
+This package provides the \pgfspectra[<options>] command which draws continuous and emission or absorption spectra for 99 elements and their ions.
+It was developed mainly for the writing of my own documentation and exams sheets supporting directly PDF output format.
+The drawing is made with the TikZ package and is based in the pst-spectra extension for PSTricks.
+
+** Requirements
+TikZ and ifthen packages.
+
+** Installation
+Unpack everything in a directory in the TeX search path and refresh the TeX database.
+
+** Usage
+Just place \usepackage{pgf-spectra} in the preamble.
+
+** Contact the author
+Hugo Gomes (hugo.parelho@gmail.com)
+
+** Licence
+Released under the LaTeX Project Public License v1.3 or later, see http://www.latex-project.org/lppl.txt
diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty
new file mode 100644
index 0000000000..b5fab0db7e
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty
@@ -0,0 +1,696 @@
+% Hugo Gomes @ 15/04/2016
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesPackage{pgf-spectra}[15/04/2016 pgf-spectra v1.0]%
+\RequirePackage{tikz}%
+\RequirePackage{ifthen}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifwlabsorption%
+\newif\ifcurelemexist%
+\newif\ifwldrawaxis%
+\newif\ifwlaxislabel%
+\newif\ifwlintensity%
+% defining PGF keys
+\pgfkeys{/wl/.cd,%
+element/.get=\wlelement,%
+element/.store in=\wlelement,%
+element/.default=NONE,%
+width/.get=\wlwidth,%
+width/.store in=\wlwidth,%
+width/.default={0.9\textwidth},
+height/.get=\wlheight,%
+height/.store in=\wlheight,%
+height/.default=1cm,%
+back/.get=\wlback,%
+back/.store in=\wlback,%
+back/.default=black,%
+charge/.get=\wlcharge,%
+charge/.store in=\wlcharge,%
+charge/.default=0,%
+Imin/.get=\wlintmin,%
+Imin/.store in=\wlintmin,%
+Imin/.default=0,%
+lines/.get=\wllines,%
+lines/.store in=\wllines,%
+lines/.default={},%
+line width/.get=\wllinewidth,%
+line width/.store in=\wllinewidth,%
+line width/.default=1pt,%
+begin/.get=\wlbegin,%
+begin/.store in=\wlbegin,%
+begin/.default=380,%
+end/.get=\wlend,%
+end/.store in=\wlend,%
+end/.default=780,%
+axis step/.get=\wlaxisstep,%
+axis step/.store in=\wlaxisstep,%
+axis step/.default=20,%
+axis color/.get=\wlaxiscolor,%
+axis color/.store in=\wlaxiscolor,%
+axis color/.default=black,%
+axis font/.get=\wlaxisfont,%
+axis font/.store in=\wlaxisfont,%
+axis font/.default={\tiny},%
+axis font color/.get=\wlaxisfontcolor,%
+axis font color/.store in=\wlaxisfontcolor,%
+axis font color/.default=white,%
+label position/.get=\wllabelposition,%
+label position/.store in=\wllabelposition,%
+label position/.default={west},%
+label before text/.get=\wllabelbtext,%
+label before text/.store in=\wllabelbtext,%
+label before text/.default={},%
+label after text/.get=\wllabelatext,%
+label after text/.store in=\wllabelatext,%
+label after text/.default={},%
+label font/.get=\wllabelfont,%
+label font/.store in=\wllabelfont,%
+label font/.default={\bfseries\small},%
+label font color/.get=\wllabelfontcolor,%
+label font color/.store in=\wllabelfontcolor,%
+label font color/.default=black,%
+gamma/.get=\wlgamma,%
+gamma/.store in=\wlgamma,%
+gamma/.default=0.8,%
+brightness/.get=\wlbrightness,%
+brightness/.store in=\wlbrightness,%
+brightness/.default=1,%
+line intensity/.get=\wllineint,%
+line intensity/.store in=\wllineint,%
+line intensity/.default=100,%
+relative intensity threshold/.get=\wlrelintthresh,%
+relative intensity threshold/.store in=\wlrelintthresh,%
+relative intensity threshold/.default=0.25,%
+absorption/.is if=wlabsorption,%
+axis/.is if=wldrawaxis,%
+label/.is if=wlaxislabel,%
+relative intensity/.is if=wlintensity%
+}%
+% setting keys with default values
+\pgfkeys{/wl/.cd,element,width,height,back,charge,Imin,lines,line width,begin,end,%
+axis color,axis font,axis font color,axis step,label position,label before text,label after text,label font,label font color,gamma,brightness,line intensity,%
+relative intensity threshold,absorption=false,axis=false,label=false,relative intensity=false}%
+% strings for \ifx tests
+\def\wlN@NE{NONE}%
+\def\wl@ll{all}%
+\def\wl@visible{visible}%
+\def\wl@visible@list{visible,visible5,visible10,visible15,visible20,visible25,visible30,visible35,visible40,visible45,visible50,visible55,visible60,visible65,visible70,visible75,visible80,visible85,visible90,visible95,visible100}%
+\def\wl@label@position@list{west,north west,north,north east,east,south east,south,south west}%
+%%%% COMMANDS -------------------------------------------------------------------------------->
+% \pgfspectra[options]
+\def\pgfspectra{\@ifnextchar[\wl@pgfspectra@withoptions{\wl@pgfspectra@nooptions}}%
+\def\wl@pgfspectra@nooptions{\wl@pgfspectra@continuous(0.9\textwidth,1cm)}%
+% ##########################################################
+\def\wl@pgfspectra@continuous(#1,#2){%
+\begin{tikzpicture}%
+\foreach \x in {380,...,780}%
+ {%
+ \pgfmathparse{#1/400}\edef\xscale{\pgfmathresult}\edef\wl@linewidth{\xscale pt}
+ \wlcolor{\x}%
+ \pgfmathparse{(\x-380)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \draw[wltemp,line width=\wl@linewidth] (\wl@currentx,0) -- ++(0,#2);%
+ }%
+\end{tikzpicture}%
+}%
+% ##########################################################
+\def\wl@pgfspectra@withoptions[#1]{%
+% setting default values
+\pgfkeys{/wl/.cd,element,width,height,back,charge,Imin,lines,line width,begin,end,axis color,axis font,axis font color,axis step,label position,label before text,label after text,label font,label font color,gamma,brightness,line intensity,relative intensity threshold,absorption=false,axis=false,label=false,relative intensity=false}%
+% process options (key values)
+\pgfkeys{/wl/.cd,#1}
+% axis height
+\setbox0=\hbox{\wlaxisfont\selectfont380}\edef\@wl@axis@height{\the\ht0}%
+% process visible background (visible+opacity)
+\wl@counta=0%
+\wl@countb=-1%
+\@for\@myarg:=\wl@visible@list\do{%
+ \ifx\wlback\@myarg\wl@countb=\wl@counta\fi%
+ \advance\wl@counta by1%
+ }%
+\ifnum\wl@countb=0\let\wlback\wl@visible\edef\@visible@opacity{.5}\else%
+\ifnum\wl@countb>0\let\wlback\wl@visible\pgfmathparse{.05*\wl@countb}\edef\@visible@opacity{\pgfmathresult}\fi\fi%
+% ----------------------------------------------------------------------------------------------------------
+% if no element provided draws continuous spectrum with options or user list of lines
+\ifx\wlelement\wlN@NE%no element by the user
+ \ifx\wl@elt@chemsym\undefined\else\let\wl@elt@chemsym\undefined\fi
+ \ifx\wllines\@empty%no lines by the user => continuous spectrum
+ % draws the continuous spectrum width options (default or by the user)
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \wl@utils@visiblespectrum{\wlbrightness}
+ \end{tikzpicture}%
+ \let\wl@list@@\@empty%
+ \else% lines by the user
+ \edef\wl@list@@{\wllines}
+ \fi%\wllines\@empty
+\else%\wlelement\wlN@NE
+ % else get element(s) data
+ \wl@countc=0%
+ \wl@countd=1%
+ \@for\@myarg:=\wlelement\do{\advance\wl@countc by 1}%count number of elements
+ \wl@addt@list{}{}%
+ \@for\@myarg:=\wlelement\do{%
+ \curelemexisttrue%
+ \def\wl@elt@chemsym{NOT FOUND!}
+ \def\@search@result@err{NOT FOUND!}%
+ \wl@elt@data{\@myarg}\relax%
+ % check if element provided exists
+ \ifx\@search@result@err\wl@elt@chemsym Element\ ``\@myarg'' with charge ``\wlcharge'' not found!\curelemexistfalse\else%
+ % if exists, set the wavelength's list
+ \wl@set@element@list{\wl@elt@elemdata}{\wl@elt@Imax}%
+ \fi%\@search@result@err\wl@elt@chemsym
+ \ifcurelemexist\ifnum\wl@countd<\wl@countc\wl@addt@list{\wl@list@@}{,}\fi\fi%
+ \advance\wl@countd by 1%
+ }%end do
+\fi%\wlelement\wlN@NE
+% check if there are lines to draw and make the spectrum
+ \ifx\wl@list@@\@empty\ifx\wlelement\wlN@NE\else Element\ ``\wlelement'' with charge ``\wlcharge'' have no lines to display.\fi\else%
+ \ifwlabsorption%absortion spectrum
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \wl@utils@visiblespectrum{\wlbrightness}%put visible spectrum in the background
+ % draws the lines
+ \wl@utils@drawabsorptionlines%
+ \end{tikzpicture}%
+ \else%emission spectrum
+ % draws the spectrum
+ \ifx\wlback\wl@visible%visible background
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \wl@utils@visiblespectrum{\@visible@opacity*\wlbrightness}%draws the visible background
+ \wl@utils@drawemissionlines% emission lines
+ \end{tikzpicture}%
+ \else%without visible background
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \ifnum\wlbegin>\wlend%
+ \draw[draw=none,fill=\wlback] (0,0) rectangle (-\wlwidth,\wlheight);% background
+ \else%
+ \draw[draw=none,fill=\wlback] (0,0) rectangle (\wlwidth,\wlheight);% background
+ \fi%
+ \wl@utils@drawemissionlines% emission lines
+ \end{tikzpicture}%
+ \fi%\wlback\@visible
+ \fi%\ifwlabsorption
+ \fi% \wl@list@@\@empty
+}%
+% ##########################################################
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% get individual line data from one element of the array data
+\def\wl@get@line@info[#1 #2 #3]{
+\def\@currentline@wl{#1}% return
+\def\@currentline@int{#2}% return
+\def\@currentline@charge{#3}% return
+}%
+% ######################################################################
+% ################### \wl@set@element@list ####################################
+% ######################################################################
+%
+% \wl@set@element@list{\wl@elt@elemdata}{\wl@elt@Imax}
+% RETURN: \wl@list@@ -> (wl1,wl2,...)
+% or if relative intensity true (between 0 and 1)
+% \wl@list@@ -> (wl1/int1,wl2/int2,...)
+%
+\newif\ifwl@first% for first ocurrence of Imin
+\def\wl@set@element@list#1#2{% \wl@elt@Imax
+\wl@firsttrue%
+\wl@counta=0%
+\wl@countb=1%
+\pgfmathparse{int(\wlintmin*100)}\edef\wl@intmin{\pgfmathresult}%intensity percentage
+\ifnum\wl@intmin=0% include all intensities
+\ifx\wl@ll\wlcharge%ALL lines
+\@for\@myarg:=#1\do{\advance\wl@counta by 1}%count all entries
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl}\fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \fi%
+\else% lines for one specific charge
+\@for\@myarg:=#1\do{\expandafter\wl@get@line@info\@myarg\ifx\@currentline@charge\wlcharge\advance\wl@counta by 1\fi}%count only if is the desired charge
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl}\fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \fi%
+\fi%
+\else%\wlintmin>0 & \wlintmin<1
+\ifnum\wl@intmin>100\else%
+\pgfmathparse{\wlintmin*#2}\edef\wl@actual@int{\pgfmathresult}%
+\ifx\wl@ll\wlcharge%ALL lines
+\@for\@myarg:=#1\do{\advance\wl@counta by 1}%count all entries
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\relax\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl/\wl@intensity@to@list}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\relax\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \fi%
+\else% lines for one specific charge
+\@for\@myarg:=#1\do{\expandafter\wl@get@line@info\@myarg\ifx\@currentline@charge\wlcharge\advance\wl@counta by 1\fi}%count only if is the desired charge
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl/\wl@intensity@to@list}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \fi%
+\fi%
+\fi%
+\fi%
+}%
+% add to list
+\def\wl@addt@list#1#2{\edef\wl@list@@{#1#2}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% internal utils --------------------------------------------------------------------------------------------------------------------------------------------------------------- %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\wl@utils@draw@axis{%
+ \ifnum\wlbegin>\wlend%
+ \draw[draw=none,fill=\wlaxiscolor] ([xshift={1.5*\@wl@axis@height}]0,\wlheight+2.5pt) rectangle ([xshift={-1.5*\@wl@axis@height}]-\wlwidth,-2.5*\@wl@axis@height);%
+ \pgfmathparse{\wlend+\wlaxisstep}\pgfmathparse{int(\pgfmathresult)}
+ \edef\@axis@list{\wlend,\pgfmathresult,...,\wlbegin}
+ \foreach \x in \@axis@list%
+ {%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \draw[\wlaxisfontcolor,line width=.25pt] (\wl@currentx,-.75*\@wl@axis@height) -- ++(0,.75*\@wl@axis@height);
+ \node[\wlaxisfontcolor,font=\wlaxisfont,above,inner sep=0pt] at (\wl@currentx,-2.25*\@wl@axis@height) {\x};
+ }%
+ \else%
+ \draw[draw=none,fill=\wlaxiscolor] ([xshift={-1.5*\@wl@axis@height}]0,\wlheight+2.5pt) rectangle ([xshift={1.5*\@wl@axis@height}]\wlwidth,-2.5*\@wl@axis@height);%
+ \pgfmathparse{\wlbegin+\wlaxisstep}\pgfmathparse{int(\pgfmathresult)}
+ \edef\@axis@list{\wlbegin,\pgfmathresult,...,\wlend}
+ \foreach \x in \@axis@list%
+ {%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \draw[\wlaxisfontcolor,line width=.25pt] (\wl@currentx,-.75*\@wl@axis@height) -- ++(0,.75*\@wl@axis@height);
+ \node[\wlaxisfontcolor,font=\wlaxisfont,above,inner sep=0pt] at (\wl@currentx,-2.25*\@wl@axis@height) {\x};
+ }%
+ \fi%
+}%
+\def\wl@utils@put@label{%
+ \ifx\wl@elt@chemsym\undefined\def\wl@elt@chemsym{}\fi%
+ \wl@get@label@position%
+ \ifnum\wlbegin>\wlend%
+ \ifcase\wl@label@position%
+ %west
+ \ifwldrawaxis%\ifwlaxislabel%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (-1.5*\@wl@axis@height-\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (-\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%north west
+ \node[\wllabelfontcolor,font=\wllabelfont,above right,inner xsep=0pt] at (-\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north
+ \node[\wllabelfontcolor,font=\wllabelfont,above] at (-0.5*\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north east
+ \node[\wllabelfontcolor,font=\wllabelfont,above left,inner xsep=0pt] at (0,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at (1.5*\@wl@axis@height,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at (0,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (0,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (0,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (-0.5*\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (-0.5*\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south west
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (-1.5*\@wl@axis@height-\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (-\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \fi%
+ \else%
+ \ifcase\wl@label@position%
+ %west
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (-1.5*\@wl@axis@height,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (0,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%north west
+ \node[\wllabelfontcolor,font=\wllabelfont,above right,inner xsep=0pt] at (0,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north
+ \node[\wllabelfontcolor,font=\wllabelfont,above] at (0.5*\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north east
+ \node[\wllabelfontcolor,font=\wllabelfont,above left,inner xsep=0pt] at (\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at ([xshift={1.5*\@wl@axis@height}]\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at (\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (0.5*\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (0.5*\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south west
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (-1.5*\@wl@axis@height,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (0,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \fi%
+ \fi%
+}%
+\def\wl@utils@visiblespectrum#1{%
+ \pgfmathparse{int(#1*100)}\edef\wl@bright{\pgfmathresult}
+ \ifnum\wlbegin>\wlend%
+ \foreach \x in {\wlend,...,\wlbegin}%
+ {%
+ \wlcolor{\x}%
+ \colorlet{wlcolor}{wltemp!\wl@bright!black}% ??? !black
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \edef\wl@linewidth{\xscale pt}%
+ \draw[wlcolor,line width=\wl@linewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ }%
+ \else%
+ \foreach \x in {\wlbegin,...,\wlend}%
+ {%
+ \wlcolor{\x}%
+ \colorlet{wlcolor}{wltemp!\wl@bright!black}% ??? !black
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \edef\wl@linewidth{\xscale pt}%
+ \draw[wlcolor,line width=\wl@linewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ }%
+ \fi%
+}%
+\def\wl@utils@drawabsorptionlines{%
+ \ifnum\wlbegin>\wlend%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wl@black!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wllineint!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \else%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wl@black!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wllineint!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \fi%
+}%
+\def\wl@utils@drawemissionlines{%
+ \ifnum\wlbegin>\wlend%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \colorlet{wlcolor}{wltemp!\wl@black!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \colorlet{wlcolor}{wltemp!\wllineint!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \else%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \colorlet{wlcolor}{wltemp!\wl@black!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \colorlet{wlcolor}{wltemp!\wllineint!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \fi%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% return: integer with position (e.g. '0' for west, ... )
+\def\wl@get@label@position{%
+\wl@countc=0%
+\@for\@mylabel:=\wl@label@position@list%
+ \do{%
+ \ifx\@mylabel\wllabelposition\edef\wl@label@position{\the\wl@countc}\fi%
+ \advance\wl@countc by1%
+ }%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% nm2rgb convert nanometer wavelength to rgb
+% (380 <= Lambda <= 780 ) -> r,g,b on stack
+%
+% BASED on FORTRAN Code
+% RGB VALUES FOR VISIBLE WAVELENGTHS by Dan Bruton (astro@tamu.edu)
+% This program can be found at
+% http://www.physics.sfasu.edu/astro/color.html
+% and was last updated on February 20, 1996.
+% The spectrum is generated using approximate RGB values for visible
+% wavelengths between 380 nm and 780 nm.
+% The red, green and blue values (RGB) are
+% assumed to vary linearly with wavelength (for GAMMA=1).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newdimen\wl%wavlength
+\newdimen\wl@i%intensity
+\newdimen\wl@gamma%gamma
+\newdimen\wlc@lorr%red (0. - 1)
+\newdimen\wlc@lorg%green (0. - 1)
+\newdimen\wlc@lorb%blue (0. - 1) % wavelength to rgb values
+\newcount\wl@counta% tmp counter
+\newcount\wl@countb% tmp counter
+\newcount\wl@countc% tmp counter
+\newcount\wl@countd% tmp counter
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \wlcolor{wavelength}
+\def\wlcolor#1{%
+\wl=#1pt%
+\wl@gamma=\wlgamma pt%
+% compute the rgb components
+\ifdim\wl<380pt\\ Err: wavelength must be graeter or equal to 380nm\else%
+\ifdim\wl<440pt\wlc@lorr=440pt\advance\wlc@lorr by-\wl\divide\wlc@lorr by60\wlc@lorg=0pt\wlc@lorb=1pt\else%
+\ifdim\wl<490pt\wlc@lorr=0pt\wlc@lorg=\wl\advance\wlc@lorg by-440pt\divide\wlc@lorg by50\wlc@lorb=1pt\else%
+\ifdim\wl<510pt\wlc@lorr=0pt\wlc@lorg=1pt\wlc@lorb=510pt\advance\wlc@lorb by-\wl\divide\wlc@lorb by20\else%
+\ifdim\wl<580pt\wlc@lorr=\wl\advance\wlc@lorr by-510pt\divide\wlc@lorr by70\wlc@lorg=1pt\wlc@lorb=0pt\else%
+\ifdim\wl<645pt\wlc@lorr=1pt\wlc@lorg=645pt\advance\wlc@lorg by-\wl\divide\wlc@lorg by65\wlc@lorb=0pt\else%
+\ifdim\wl<780.00001pt\wlc@lorr=1pt\wlc@lorg=0pt\wlc@lorb=0pt\else%
+\\ Err: wavelength must be lesser or equal to 780nm%
+\fi\fi\fi\fi\fi\fi\fi%
+% intensity correction at vision limits
+\ifdim\wl>700pt\wl@i=780pt\advance\wl@i by-\wl\divide\wl@i by80\multiply\wl@i by7\advance\wl@i by3pt\divide\wl@i by10\else%
+\ifdim\wl<420pt\wl@i=\wl\advance\wl@i by-380pt\divide\wl@i by40\multiply\wl@i by7\advance\wl@i by3pt\divide\wl@i by10\else%
+\wl@i=1pt%
+\fi\fi%
+%apply intensity at vision limits correction and gamma
+\pgfmathparse{\wlc@lorr*\wl@i^\wl@gamma}\edef\wl@red{\pgfmathresult}%
+\pgfmathparse{\wlc@lorg*\wl@i^\wl@gamma}\edef\wl@green{\pgfmathresult}%
+\pgfmathparse{\wlc@lorb*\wl@i^\wl@gamma}\edef\wl@blue{\pgfmathresult}%
+\definecolor{wltemp}{rgb}{\wl@red,\wl@green,\wl@blue}%
+\colorlet{wlcolor}{wltemp}
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\wl@elt@search#1#2#3#4{%
+% #1 Chemical Symbol, entered by USER
+% #2 Chemical Symbol to compare to, e.g. Na
+% #3 Emission Lines Data (or error message)
+% #4 Imax
+\ifthenelse{\equal{\expandafter\noexpand#1}{\expandafter\noexpand#2}}%
+ {% true
+ \def\wl@elt@chemsym{#2}% set chemical symbol
+ \def\wl@elt@elemdata{#3}% set element lines data
+ \def\wl@elt@Imax{#4}% set element Imax
+ }%
+ {}% false
+}%
+\input{spectra.data.tex}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdf b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdf
new file mode 100644
index 0000000000..792c7df353
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex
new file mode 100644
index 0000000000..ffc80ab94d
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectraManual.tex
@@ -0,0 +1,266 @@
+\documentclass[a4paper,10pt,oneside,openany,fleqno]{article}
+\usepackage{pgf-spectra}
+\usepackage[english]{babel}
+\addtolength{\textwidth}{3.5cm}
+\addtolength{\textheight}{2.5cm}
+\addtolength{\topmargin}{-1.25cm}
+\setlength{\parindent}{0pt}
+\setlength{\oddsidemargin}{0pt}
+\usepackage[pdfstartview={ },colorlinks=true, linkcolor=black, citecolor=gray, urlcolor=darkgray, hyperindex, plainpages=false,bookmarksopenlevel=2,bookmarksopen=true]{hyperref}%
+\usepackage[ansinew]{inputenc}
+\renewcommand{\rmdefault}{ecverdana}
+\renewcommand{\normalfont}{}
+\usepackage{amsfonts}
+\def\txtspec{\textcolor{blue!50!black}{\textbackslash pgfspectra}}
+\def\txtspecopt[#1]{\textcolor{blue!50!black}{\textbackslash pgfspectra[}\textcolor{red!50!black}{#1}\textcolor{blue!50!black}{]}}
+\def\pack{\large\texttt{pgf-spectra}\normalsize}
+%\def\com#1#2{\newline\tikz{\node[fill=black!20,draw=black!20,rounded corners=1pt,right,text width=\textwidth-.6666em] at (0,0) {\string#1};}\\ [1pt]#2\relax\\ [-6pt] \tikz{\draw[fill=black!20,draw=black!20,rounded corners=1pt] (0,0) rectangle ++(\textwidth,-3pt);}\medskip}
+\def\com#1#2{\tikz{\node[fill=black!20,draw=black!20,rounded corners=1pt,right,text width=\textwidth-.6666em] at (0,0) {#1};}\\ [1pt]#2\relax\\ [-6pt] \tikz{\draw[fill=black!20,draw=black!20,rounded corners=1pt] (0,0) rectangle ++(\textwidth,-3pt);}\smallskip}
+\pgfdeclarelayer{back}
+\pgfsetlayers{back,main}
+\def\option#1#2#3{% option,default,description
+\begin{tikzpicture}%
+\node[below right,font=\small\bfseries] (a) at (0,0) {#1};\pdfbookmark[2]{#1}{pdf#1}
+\node[below left,font=\small] (b) at (\textwidth-.3333em,0) {default: \itshape#2};
+\node[below right,text=black!80,font=\small,text width=\textwidth-.6666em] (c) at (a.south west) {#3};
+\begin{pgfonlayer}{back}
+\path[left color=orange!20,right color=black!30!orange!50,rounded corners=2pt,] (a.north west) rectangle (c.south east);
+\end{pgfonlayer}
+\end{tikzpicture}%
+}%
+\usepackage{listings}
+\lstset{% general command to set parameter(s)
+ basicstyle=\small,%
+ keywordstyle=\color{blue!50!black}\ttfamily,
+ basicstyle=\ttfamily\footnotesize,%
+ commentstyle=\itshape\color{green!50!black},%
+ stringstyle=\ttfamily,%
+ showstringspaces=false,%
+ language=[LaTeX]TeX,%
+ defaultdialect=[LaTeX]TeX,%
+ morekeywords={RequirePackage}%
+}
+\lstdefinestyle{numbers}
+ {numbers=left, stepnumber=1, numberstyle=\tiny, numbersep=10pt}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+\usefont{T1}{verdana}{m}{n}
+\title{Manual for pgf-spectra 1.0}
+\author{Hugo Gomes\\
+ \texttt{hugo.parelho@gmail.com}}
+\date{\today}
+\maketitle
+\begin{center}\pgfspectra[element={B},charge=all,back=visible40,gamma=.6]\end{center}
+\begin{abstract}
+\noindent The purpose of this package is to draw the spectrum of elements in a simple way. It's based on the package \textit{pst-spectra} with similar options, but with some extra options. It relays on the pgf/TikZ to draw the desired spectrum, continuous or discrete. As in \textit{pst-spectra} there are data available for the spectra of 99 elements and their ions (from the NASA database). It also allows the user to draw a spectrum with their own personal data.
+\end{abstract}
+\tableofcontents
+\newpage
+\section{Installation and usage}
+\noindent
+\pack{} is placed under the terms of the \LaTeX{} Project Public License, version 1.3 or later (http://www.latex-project.org/lppl.txt). \pack{} loads and requires the packages \textit{tikz} and \textit{ifthen}.
+\\ You need to put the style file (pgf-spectra.sty) in a location where pdflatex can find them. According to the TDS conventions this may be a subdirectory named tex/latex/pgfspectra/ or tex/latex/misc/ in your (site specific) installation tree (insert your appropriate directory delimiter instead of /, if needed).
+\\ If you are using pdflatex, just can simply include the style file without any option via the \verb|\usepackage| command: \verb|\usepackage{pgf-spectra}|
+\section{The commands}
+There are at this time only two commands available:
+\begin{itemize}\item\txtspec{} or \txtspecopt[options list]\item and \textcolor{blue!50!black}{\textbackslash wlcolor\{}\textcolor{red!50!black}{\textbackslash wavelength}\textcolor{blue!50!black}{\}}\end{itemize}
+\medskip
+The first command is used without options to draw the visible continuous spectrum:
+\\ \com{\txtspec}{\pgfspectra}
+\\ When using options a continuous or discrete spectra in the visible region can be drawn, for ins\-tance:
+\\ [4pt]\com{\txtspecopt[width=.5\textbackslash textwidth,height=1.5cm]}{\pgfspectra[width=.5\textwidth,height=1.5cm]}
+\\ \com{\txtspecopt[width=\textbackslash textwidth,element=Ne]}{\pgfspectra[width=\textwidth,element=Ne]}
+\\ [10pt]The other command is used to convert a wavelength (from 380 to 780 nanometers) to the respective color available as 'wlcolor':
+\\ [10pt]\tikz{\node[fill=black!20,draw=black!20,rounded corners=1pt,right,text width=\textwidth-.6666em] at (0,0) {\begin{verbatim}
+\tikz{\foreach \x in {380,430,...,780}{
+ \wlcolor{\x}
+ \draw[fill=wlcolor] (.02*\x,0) rectangle ++(1,.5)
+ node[midway,font=\tiny\bfseries,text=black!50] {\x};
+ }
+}
+\end{verbatim}
+};}
+\\ [2pt]\tikz{\foreach \x in {380,430,...,780}{
+ \wlcolor{\x}
+ \draw[fill=wlcolor] (.02*\x,0) rectangle ++(1,.5) node[midway,font=\tiny\bfseries,text=black!50] {\x};
+ }
+}
+\\ [-6pt]\tikz{\draw[fill=black!20,draw=black!20,rounded corners=1pt] (0,0) rectangle ++(\textwidth,-3pt);}
+\section{Options}
+For the command \txtspec{} there are a set of options available to draw the spectrum as described below.
+\\ [10pt]\option{width}{0.9\textbackslash textwidth}{Sets the width of the spectrum.}
+\com{\txtspecopt[width=10cm]}{\pgfspectra[width=10cm]}
+\\ \option{height}{1cm}{Sets the height of the spectrum.}
+\com{\txtspecopt[height=40pt]}{\pgfspectra[height=40pt]}
+\\ \option{element}{NONE}{A single chemical symbol of an element or a list of chemical symbols.}
+\com{\txtspecopt[element=H]}{\pgfspectra[element=H]}
+\com{\txtspecopt[element=\{H,He\}]}{\pgfspectra[element={H,He}]}
+\\ \option{charge}{0}{The charge of the \textit{particle} to draw the spectrum. Use 'all' to get all available lines for the element, i.e, for the atom and all the positive ions that exists in the database.}
+\com{\txtspecopt[element=He]}{\pgfspectra[element=He]}
+\com{\txtspecopt[element=He,charge=1]}{\pgfspectra[element=He,charge=1]}
+\com{\txtspecopt[element=He,charge=2]}{\pgfspectra[element=He,charge=2]}
+\com{\txtspecopt[element=He,charge=all]}{\pgfspectra[element=He,charge=all]}
+\newpage
+\option{Imin}{0}{The minimum intensity of the lines to put in the spectrum. Value from 0 to 1.}
+\com{\txtspecopt[element=He,Imin=.5]}{\pgfspectra[element=He,Imin=.5]}
+\com{\txtspecopt[element=He,Imin=.05]}{\pgfspectra[element=He,Imin=.05]}
+\\ \option{relative intensity}{false}{Draws the lines respecting the intensity of the observed spectrum.}
+\com{\txtspecopt[element=He,relative intensity]}{\pgfspectra[element=He,relative intensity]}
+% relative intensity threshold -> Sets the minimum intensity for the lines... Itresh+(1-Itresh)*Iline/Imax
+\\ \option{relative intensity threshold}{0.25}{Sets the minimum intensity for the lines in the spectrum when using relative intensities. When set to 0.25 a line with real intensity $0$ will have a spectral intensity of $0.25$ and a line with intensity equal to the max intensity observed in that spectrum will have an intensity in the computed spectrum of $1$, assuming of course an overall intensity in the range between 0 and 1.}
+\com{\txtspecopt[element=He,relative intensity,relative intensity threshold=0]}{\pgfspectra[element=He,relative intensity,relative intensity threshold=0]}
+\com{\txtspecopt[element=He,relative intensity,relative intensity threshold=.25]}{\pgfspectra[element=He,relative intensity,relative intensity threshold=.25]}
+\com{\txtspecopt[element=He,relative intensity,relative intensity threshold=.5]}{\pgfspectra[element=He,relative intensity,relative intensity threshold=.5]}
+\com{\txtspecopt[element=He,relative intensity,relative intensity threshold=.75]}{\pgfspectra[element=He,relative intensity,relative intensity threshold=.75]}
+\com{\txtspecopt[element=He,relative intensity,relative intensity threshold=1]}{\pgfspectra[element=He,relative intensity,relative intensity threshold=1]}
+In fact setting the relative intensity threshold to $1$ is equivalent to the spectrum without relative intensities:
+\\ \com{\txtspecopt[element=He]}{\pgfspectra[element=He]}
+\newpage\option{line intensity}{100}{Draws all the lines with the specified intensity between 0 and 100 (as a percentage of the maximum intensity).}
+\com{\txtspecopt[element=He,line intensity=0]}{\pgfspectra[element=He,line intensity=0]}
+\com{\txtspecopt[element=He,line intensity=50]}{\pgfspectra[element=He,line intensity=50]}
+\com{\txtspecopt[element=He,line intensity=100]}{\pgfspectra[element=He,line intensity=100]}
+\com{\txtspecopt[element=He]}{\pgfspectra[element=He]}
+\\ \option{gamma}{0.8}{Gamma color correction: any positive value.}
+\com{\txtspecopt[gamma=.1]}{\pgfspectra[gamma=.1]}
+\com{\txtspecopt[gamma=.8]}{\pgfspectra[gamma=.8]}
+\com{\txtspecopt[gamma=1]}{\pgfspectra[gamma=1]}
+\com{\txtspecopt[gamma=2]}{\pgfspectra[gamma=2]}
+\com{\txtspecopt[gamma=5]}{\pgfspectra[gamma=5]}
+\com{\txtspecopt[gamma=10]}{\pgfspectra[gamma=10]}
+\newpage \option{brightness}{1}{Brightness color correction as in the CMYK color model. Value between 0 and 1. Zero stands for black and one for the maximum bright. \textit{This option only works for the continuous component of the spectra, to change the ``brightness'' of spectral lines use the option 'line intensity'}.}
+\com{\txtspecopt[brightness=.1]}{\pgfspectra[brightness=.1]}
+\com{\txtspecopt[brightness=.5]}{\pgfspectra[brightness=.5]}
+\com{\txtspecopt[brightness=1]}{\pgfspectra[brightness=1]}
+\\ \option{back}{black}{Sets the background color of the spectrum. Only useful when there are spectral lines. Some shorthand are defined to put the visible region in the background: 'visible5', 'visible10', 'visible15', \ldots\ , 'visible100'. This labels combined with the 'brightness' option makes it possible to achieve other values on the background, since the visible amount (5\%,10\%,\ldots) is multiplied by the value of brightness.}
+\com{\txtspecopt[element=He,back=white]}{\pgfspectra[element=He,back=white]}
+\com{\txtspecopt[element=He,back=black!50]}{\pgfspectra[element=He,back=black!50]}
+\com{\txtspecopt[element=He,back=visible50]}{\pgfspectra[element=He,back=visible50]}
+\com{\txtspecopt[element=He,back=visible50,brightness=.26]}{\pgfspectra[element=He,back=visible50,brightness=.26]}
+\\ \option{lines}{\{\}}{A comma separated list of wavelengths in the interval $[380;780]\,nm$.}
+\\ \com{\txtspecopt[lines=\{400,500,550,700\}]}{\pgfspectra[lines={400,500,550,700}]}
+\\ \option{line width}{1pt}{The width of each individual line in the spectrum.}
+\newpage
+\com{\txtspecopt[line width=2pt]}{\pgfspectra[line width=2pt]}
+\com{\txtspecopt[line width=2pt,element=He]}{\pgfspectra[line width=2pt,element=He]}
+\\ \option{begin}{380}{The starting wavelength in nanometers of the spectrum ($380\leq\lambda\leq780$).}
+\com{\txtspecopt[begin=500]}{\pgfspectra[begin=500]}
+\\ \option{end}{780}{The finishing wavelength in nanometers of the spectrum ($380\leq\lambda\leq780$).}
+\com{\txtspecopt[end=500]}{\pgfspectra[end=500]}
+\\ [10pt]\textbf{Remark:} \textit{it's obviously possible to set 'begin' and 'end' at the same time and if desired change the order of the wavelengths.}
+\\ \com{\txtspecopt[begin=500,end=700]}{\pgfspectra[begin=500,end=700]}
+\com{\txtspecopt[begin=700,end=500]}{\pgfspectra[begin=700,end=500]}
+\com{\txtspecopt[begin=780,end=380]}{\pgfspectra[begin=780,end=380]}
+\com{\txtspecopt[begin=780,end=380,element=He]}{\pgfspectra[begin=780,end=380,element=He]}
+\newpage
+\option{absorption}{false}{Draws the absorption spectrum instead of the emission one.}
+\com{\txtspecopt[element=H,absorption]}{\pgfspectra[element=H,absorption]}
+\com{\txtspecopt[element=\{H,He\},absorption]}{\pgfspectra[element={H,He},absorption]}
+\\ \option{axis}{false}{Draws a nanometric axis below the spectrum.}
+\com{\txtspecopt[axis]}{\pgfspectra[axis]}
+\\ \option{axis step}{20}{The increment to use in the axis scale.}
+\com{\txtspecopt[axis,axis step=50]}{\pgfspectra[axis,axis step=50]}
+\\ \option{axis color}{black}{The color of the axis.}
+\com{\txtspecopt[axis,axis color=red!50!green!50!blue!50]}{\pgfspectra[axis,axis color=red!50!green!50!blue!50]}
+\\ \option{axis font}{\textbackslash tiny}{The font specs to use in the axis.}
+\com{\txtspecopt[axis,axis font=\textbackslash fontsize\{3\}\{3\}\textbackslash itshape\textbackslash selectfont]}{\pgfspectra[axis,axis font=\fontsize{3}{3}\itshape\selectfont]}
+\\ \option{axis font color}{white}{The color of the font used in the axis.}
+\com{\txtspecopt[axis,axis font color=blue!50!white]}{\pgfspectra[axis,axis font color=blue!50!white]}
+\\ \option{label}{false}{Puts a label for the spectrum.}
+\com{\txtspecopt[label]}{\pgfspectra[label]}
+\com{\txtspecopt[label,element=He]}{\pgfspectra[label,element=He]}
+\\ \option{label position}{west}{Sets the position of the label according to:}
+\tikz{\path[left color=orange!20,right color=black!30!orange!50,rounded corners=2pt,] (0,0) rectangle ++(\textwidth,2);
+\node[dotted,fill=black!20,opacity=.4] (x) at (.5\textwidth,1) {\vbox to 1cm{\hsize=8cm\vfill\hfil\small\itshape spectrum\hfil\vfill}};
+\tikzset{inner sep=0.1pt}
+\node[left] at (x.west) {west};
+\node[above left] at (x.north west) {north west};
+\node[above] at (x.north) {north};
+\node[above right] at (x.north east) {north east};
+\node[right] at (x.east) {east};
+\node[below right] at (x.south east) {south east};
+\node[below] at (x.south) {south};
+\node[below left] at (x.south west) {south west};}
+\com{\txtspecopt[label,label position=east,element=He]}{\pgfspectra[label,label position=east,element=He]}
+\\ \option{label font}{\textbackslash bfseries\textbackslash small}{The font specs for the label.}
+\com{\txtspecopt[label,label font=\textbackslash footnotesize\textbackslash itshape,element=He]}{\pgfspectra[label,label font=\footnotesize\itshape,element=He]}
+\\ \option{label font color}{black}{The color of the font used in the label.}
+\com{\txtspecopt[label,label font color=blue!50!white,element=He]}{\pgfspectra[label,label font color=blue!50!white,element=He]}
+\\ \option{label before text}{\{\}}{Inserts text before the value stored in the label: if chemical symbols were provided, the label has them stored, otherwise it is empty.}
+\com{\txtspecopt[label,label before text=text\textbackslash\ ,element=He]}{\pgfspectra[label,label before text=text\ ,element=He]}
+\\ [10pt]\textbf{Remark:} \textit{The \textbackslash}\verb*| | \textit{is to insert a space between the text entered by user and the text stored in label.}
+\\ \option{label after text}{\{\}}{Inserts text after the value stored in the label: if chemical symbols were provided, the label has them stored, otherwise it is empty.}
+\com{\txtspecopt[label,label after text=\textbackslash\ text,element=He]}{\pgfspectra[label,label after text=\ text,element=He]}
+\section{Examples}
+Here are some examples for drawing some \textit{eventually useful} spectra:
+\\ \com{\txtspecopt%
+[element=He,axis,label,label position=north west,\\ label after text=\textbackslash\ emission spectrum:]}%
+{\pgfspectra[element=He,axis,label,label position=north west,label after text=\ emission spectrum:]}
+\\ \com{\txtspecopt%
+[element=He,axis,label,label position=north west,label after text=\\ \textbackslash\ emission spectrum:,relative intensity,relative intensity threshold=.5]}%
+{\pgfspectra[element=He,axis,label,label position=north west,label after text=\ emission spectrum:,relative intensity,relative intensity threshold=.5]}
+\\ \com{\txtspecopt%
+[element=He,charge=all,line intensity=50,Imin=.05]}%
+{\pgfspectra[element=He,charge=all,line intensity=50,Imin=.05]}
+\\ \com{\txtspecopt%
+[element=He,absorption,axis,label,label position=north west,label after text=\textbackslash\ absorption spectrum:,relative intensity,relative intensity threshold=.5]}%
+{\pgfspectra[element=He,absorption,axis,label,label position=north west,label after text=\ absorption spectrum:,relative intensity,relative intensity threshold=.5]}
+\\ \com{\txtspecopt%
+[element=He,charge=all,absorption,line intensity=50]}%
+{\pgfspectra[element=He,charge=all,absorption,line intensity=50]}
+\\ \com{\txtspecopt%
+[element=He,charge=all,relative intensity,back=visible75,gamma=2]}%
+{\pgfspectra[element=He,charge=all,relative intensity,back=visible75,gamma=2]}
+\\ \textit{\small When the lines are manually inserted it's possible to use 'label before text' only with personalized text. In the next three examples 'label before text' is used to make labels for a multiple choice problem, omitting evidently the type of luminous font.}
+\\ $\checkmark$ Blue LED
+\\ \com{\txtspecopt%
+[begin=380,end=740,lines=\{450,451,452,453,454,455,456,457,458,459,%
+\\460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,%
+\\479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,%
+\\498,499,500,501,502,503,504,505,506,507,508,509,510\},line width=1.25pt,width=%
+\\ \mbox{.75\textbackslash linewidth,label,axis,label before text=(A),axis font=\textbackslash fontsize\{4pt\}\{6pt\}\textbackslash selectfont}]}%
+{\pgfspectra[begin=380,end=740,lines={450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510},line width=1.25pt,width=.75\linewidth,label,axis,label before text=(A),axis font=\fontsize{4pt}{6pt}\selectfont]}%
+\newpage$\checkmark$ Laser He-Ne
+\\ \com{\txtspecopt%
+[begin=380,end=740,lines=\{633\},line width=1.25pt,width=.75\textbackslash linewidth,label,axis,label before text=(B),axis font=\textbackslash fontsize\{4pt\}\{6pt\}\textbackslash selectfont]}%
+{\pgfspectra[begin=380,end=740,lines={633},line width=1.25pt,width=.75\linewidth,label,axis,label before text=(B),axis font=\fontsize{4pt}{6pt}\selectfont]}
+\\ $\checkmark$ Fluorescent lamp
+\\ \com{\txtspecopt%
+[begin=380,end=740,lines=\{380,425,450,525,550,600,625,640,705\},line width=1.25pt,width=.75\textbackslash linewidth,label,axis,label before text=(C),axis font=\textbackslash fontsize\{4pt\}\{6pt\}\textbackslash selectfont]}%
+{\pgfspectra[begin=380,end=740,lines={380,425,450,525,550,600,625,640,705},line width=1.25pt,width=.75\linewidth,label,axis,label before text=(C),axis font=\fontsize{4pt}{6pt}\selectfont]}
+\\ $\checkmark$ Sun like spectrum
+\\ \com{\txtspecopt%
+[element=\{H,Fe,Mg,Na\},absorption,line intensity=40,Imin=.05]}%
+{\pgfspectra[element={H,Fe,Mg,Na},absorption,line intensity=40,Imin=.05]}
+\\ $\checkmark$ Sirius like spectrum
+\\ \com{\txtspecopt%
+[element=\{H,He\},absorption,line intensity=40,Imin=.05]}%
+{\pgfspectra[element={H,He},absorption,line intensity=40,Imin=.05]}
+\\ $\checkmark$ ``Classical'' emission spectra of elements:
+\\ \com{\txtspecopt%
+[element=H,back=visible40,gamma=.6,label,axis,Imin=.05]}%
+{\pgfspectra[element=H,back=visible40,gamma=.6,label,axis,Imin=.05]}
+\\ \com{\txtspecopt%
+[element=He,back=visible40,gamma=.6,label,axis,Imin=.05]}%
+{\pgfspectra[element=He,back=visible40,gamma=.6,label,axis,Imin=.05]}
+\\ \com{\txtspecopt%
+[element=Ne,back=visible40,gamma=.6,label,axis,Imin=.05]}%
+{\pgfspectra[element=Ne,back=visible40,gamma=.6,label,axis,Imin=.05]}
+\newpage
+\section{Recommendations and known issues}
+The code could be a bit slow, so if there are many spectra to draw, the time consumption to get them could be high. In that case it's preferable to compile individual spectrum via the \textit{preview} package, for later inclusion with \verb|\includegraphics{<filename>.pdf}|:
+\begin{lstlisting}
+% <filename>.tex
+\documentclass{article}
+\usepackage{pgf-spectra}
+\usepackage[active,tightpage]{preview}
+\PreviewEnvironment{tikzpicture}
+\setlength\PreviewBorder{1pt}%
+%%%%%%%%%%%%%%%%%
+\begin{document}
+\pgfspectra[element=H,width=15cm]
+\end{document}
+\end{lstlisting}
+\section{The code}
+\lstset{style=numbers, breaklines=true,breakindent=10pt}
+\lstinputlisting{pgf-spectra.sty}
+\end{document}
diff --git a/graphics/pgf/contrib/pgf-spectra/spectra.data.tex b/graphics/pgf/contrib/pgf-spectra/spectra.data.tex
new file mode 100644
index 0000000000..1f957ea4d4
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-spectra/spectra.data.tex
@@ -0,0 +1,116 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ***************** \wl@elt@data{Chemical symbol}
+%
+%% Visible lines of some classical elements... thanks Larry W. %
+% Data structure : list of 3 elements array
+% {
+% [wavelength1 intensity1 charge1],
+% [wl2 I2 q2],
+% [wl3 I3 q3],
+% ...
+% }{Imax}
+% (intensity max at the end of each entry)
+% Sometimes, there is no charge in the source file, so I put charge = -1
+% (see Es, Bk...)
+%
+\protected\def\wl@elt@data#1{\relax\ignorespaces%
+\wl@elt@search{#1}{H}{[383.5384 5 0],[388.9049 6 0],[397.0072 8 0],[410.174 15 0],[434.047 30 0],[486.133 80 0],[656.272 120 0],[656.2852 180 0]}{180}%
+\wl@elt@search{#1}{He}{[381.9607 10 0],[381.976 1 0],[388.865 500 0],[396.4729 20 0],[400.927 1 0],[402.6191 50 0],[402.636 5 0],[412.082 12 0],[412.099 2 0],[414.376 3 0],[438.7929 10 0],[443.755 3 0],[447.1479 200 0],[447.168 25 0],[468.54 6 1],[468.57 30 1],[471.3146 30 0],[471.338 4 0],[492.1931 20 0],[501.5678 100 0],[504.774 10 0],[541.152 5 1],[587.562 500 0],[587.597 100 0],[656.01 8 1],[667.815 100 0],[686.748 3 0],[706.519 200 0],[706.571 30 0],[728.135 50 0]}{500}%
+\wl@elt@search{#1}{Li}{[391.53 20 0],[391.535 20 0],[398.548 10 0],[398.554 10 0],[413.256 40 0],[413.262 40 0],[427.307 20 0],[427.313 20 0],[432.542 5 1],[432.547 5 1],[432.554 1 1],[460.283 13 0],[460.289 13 0],[467.165 6 1],[467.17 2 1],[467.806 3 1],[467.829 1 1],[488.132 4 1],[488.139 4 1],[488.149 1 1],[497.166 8 0],[497.175 8 0],[548.355 600 1],[548.565 600 1],[610.354 320 0],[610.365 320 0],[670.776 3600 0],[670.791 3600 0]}{3600}%
+\wl@elt@search{#1}{Be}{[381.345 700 0],[386.513 40 0],[386.542 80 0],[386.551 1 0],[386.572 6 0],[386.603 100 0],[425.305 100 0],[425.376 60 0],[436.066 300 1],[436.099 500 1],[440.794 400 0],[457.266 12 0],[467.333 700 1],[467.342 1000 1],[470.937 6 0],[482.816 200 1],[484.916 40 0],[485.822 2 1],[508.775 80 0],[521.812 8 1],[521.833 20 1],[525.586 3 1],[527.028 64 1],[527.081 500 1],[540.304 20 1],[541.021 20 1],[622.911 10 0],[627.943 16 1],[627.973 30 1],[647.354 30 0],[654.789 60 1],[655.836 60 1],[656.452 30 0],[663.644 2 1],[675.672 1 1],[675.713 2 1],[678.656 30 0],[688.422 1 0],[688.444 6 0],[698.275 100 0],[715.44 6 0],[715.465 40 0],[720.913 100 0],[740.12 3 1],[740.143 2 1],[755.19 10 0],[761.868 10 0],[761.888 20 0],[424.914 90 2],[448.552 2 2],[448.73 100 2],[449.509 1 2],[449.78 140 2],[614.201 140 2]}{1000}%
+\wl@elt@search{#1}{B}{[412.193 285 1],[419.479 110 1],[447.21 110 1],[447.285 110 1],[478.421 70 1],[494.038 110 1],[608.044 110 1],[628.547 70 1],[703.02 70 1],[703.19 40 1],[424.298 40 2],[424.361 70 2],[448.705 220 2],[449.773 360 2]}{360}%
+\wl@elt@search{#1}{C}{[387.619 350 1],[387.641 350 1],[387.666 350 1],[391.898 570 1],[392.069 800 1],[407.452 250 1],[407.585 350 1],[426.7 800 1],[426.726 1000 1],[477.175 200 0],[493.205 200 0],[505.217 200 0],[513.294 350 1],[513.328 350 1],[514.349 350 1],[514.516 570 1],[515.109 400 1],[538.034 300 0],[564.807 250 1],[566.247 350 1],[588.977 570 1],[589.159 350 1],[600.113 200 0],[600.603 250 0],[600.718 110 0],[601.068 150 0],[601.322 300 0],[601.484 250 0],[657.805 800 1],[658.288 570 1],[658.761 200 0],[678.39 250 1],[711.318 250 0],[711.519 250 0],[711.563 250 1],[711.699 200 0],[711.99 350 1],[723.132 800 1],[723.642 1000 1],[405.606 150 2],[406.794 200 2],[406.891 250 2],[407.026 250 2],[416.286 150 2],[418.69 250 2],[432.556 200 2],[464.742 600 2],[465.025 520 2],[465.147 375 2],[466.586 200 2],[569.592 450 2],[582.642 150 2],[674.438 150 2],[703.725 150 2],[761.265 150 2],[465.83 200 3],[580.133 250 3],[581.198 200 3],[772.62 90 3],[494.388 5 4],[494.456 5 4]}{1000}%
+\wl@elt@search{#1}{N}{[383.837 285 1],[391.9 360 1],[395.585 450 1],[399.5 1000 1],[403.508 360 1],[404.131 550 1],[404.353 360 1],[409.994 140 0],[410.995 185 0],[417.616 285 1],[422.774 285 1],[423.691 285 1],[423.705 220 1],[424.178 450 1],[443.274 285 1],[444.703 650 1],[453.041 360 1],[460.148 550 1],[460.716 450 1],[461.387 360 1],[462.139 450 1],[463.054 870 1],[464.308 550 1],[478.813 285 1],[480.329 450 1],[484.738 180 0],[489.511 285 1],[491.494 160 0],[493.512 210 0],[495.023 160 0],[496.398 350 0],[498.737 285 1],[499.436 450 1],[500.148 650 1],[500.27 360 1],[500.515 870 1],[500.732 550 1],[501.062 450 1],[501.639 360 1],[502.566 360 1],[504.51 550 1],[528.12 185 0],[529.268 140 0],[549.567 450 1],[553.536 285 1],[566.663 650 1],[567.602 550 1],[567.956 870 1],[568.621 450 1],[571.077 450 1],[574.73 285 1],[575.25 700 0],[576.475 240 0],[582.954 265 0],[585.404 235 0],[592.781 360 1],[593.178 550 1],[594.024 285 1],[594.165 650 1],[595.239 285 1],[599.943 160 0],[600.847 210 0],[616.776 285 1],[637.962 360 1],[641.165 185 0],[642.064 210 0],[642.302 210 0],[642.832 210 0],[643.768 185 0],[644.094 235 0],[645.79 185 0],[646.844 300 0],[648.205 750 1],[648.27 360 0],[648.375 300 0],[648.171 265 0],[648.48 325 0],[649.122 160 0],[649.954 210 0],[650.631 185 0],[661.056 750 1],[662.254 185 0],[663.694 185 0],[664.496 235 0],[664.65 185 0],[665.346 235 0],[665.651 210 0],[672.262 185 0],[739.864 210 0],[740.612 160 0],[740.624 265 0],[742.364 685 0],[744.229 785 0],[746.831 900 0],[760.88 185 0],[776.224 450 1],[393.852 90 2],[399.863 150 2],[400.358 200 2],[409.733 250 2],[410.343 200 2],[419.576 120 2],[420.01 150 2],[433.291 90 2],[434.568 120 2],[437.911 300 2],[451.091 90 2],[451.486 120 2],[463.414 90 2],[464.064 120 2],[485.882 90 2],[486.715 150 2],[531.435 90 2],[532.082 200 2],[532.718 150 2],[645.411 90 2],[646.702 120 2],[405.776 150 3],[460.633 90 3],[638.077 150 3],[460.373 350 4],[461.998 250 4],[494.456 200 4],[761.846 60 4]}{1000}%
+\wl@elt@search{#1}{O}{[380.314 160 1],[382.341 120 0],[391.196 450 1],[391.929 160 1],[394.729 185 0],[394.748 160 0],[394.759 140 0],[395.437 220 1],[395.461 100 0],[397.326 450 1],[398.22 220 1],[406.99 160 1],[407.216 285 1],[407.587 450 1],[408.391 80 1],[408.714 50 1],[408.927 150 1],[409.724 110 1],[410.5 220 1],[411.922 285 1],[413.281 160 1],[414.606 50 1],[415.33 220 1],[418.546 285 1],[418.979 450 1],[423.327 80 0],[425.374 50 1],[425.398 50 1],[427.547 50 1],[430.378 50 1],[431.714 285 1],[433.686 160 1],[434.556 220 1],[434.943 285 1],[436.69 220 1],[436.825 100 0],[439.595 220 1],[441.491 450 1],[441.698 285 1],[444.821 160 1],[445.238 160 1],[446.545 50 1],[446.628 50 1],[446.783 50 1],[446.941 50 1],[459.097 360 1],[459.617 285 1],[460.939 80 1],[463.885 160 1],[464.181 360 1],[464.914 450 1],[465.084 160 1],[466.164 360 1],[467.623 285 1],[469.921 220 1],[470.536 285 1],[492.46 160 1],[494.306 220 1],[532.91 135 0],[532.968 160 0],[533.074 190 0],[543.518 90 0],[543.578 110 0],[543.686 135 0],[557.734 120 0],[595.839 160 0],[595.858 190 0],[599.528 80 0],[604.623 160 0],[604.644 190 0],[604.649 110 0],[610.627 100 0],[615.598 400 0],[615.677 450 0],[615.818 490 0],[625.683 80 0],[626.155 100 0],[636.634 100 0],[637.432 100 0],[645.36 320 0],[645.444 360 0],[645.598 400 0],[660.491 80 0],[665.383 100 0],[700.192 360 0],[700.223 450 0],[715.67 210 0],[725.415 400 0],[725.445 450 0],[725.453 320 0],[747.644 210 0],[747.724 100 0],[747.908 120 0],[748.067 120 0],[770.675 100 0],[777.194 870 0],[777.417 810 0],[777.539 750 0],[396.159 200 2],[559.237 110 2],[412.399 100 4],[493.027 230 4],[559.791 130 4],[650.024 130 4]}{870}%
+\wl@elt@search{#1}{F}{[380.583 140 1],[384.709 270 1],[384.999 260 1],[385.167 250 1],[389.848 5 0],[389.883 190 1],[390.193 180 1],[390.382 170 1],[393.069 8 0],[393.426 5 0],[394.856 5 0],[397.204 150 1],[397.267 160 1],[397.478 170 1],[402.473 240 1],[402.501 220 1],[402.549 230 1],[408.391 160 1],[410.307 190 1],[410.322 170 1],[410.351 200 1],[410.371 180 1],[410.387 170 1],[410.916 170 1],[411.654 160 1],[411.921 150 1],[420.715 140 1],[422.516 170 1],[424.412 150 1],[424.623 200 1],[424.639 190 1],[424.659 180 1],[424.677 170 1],[424.684 160 1],[427.536 170 1],[427.753 160 1],[427.893 160 1],[429.917 200 1],[444.653 160 1],[444.672 170 1],[444.719 180 1],[473.438 140 1],[485.939 170 1],[493.326 160 1],[496.065 6 0],[500.2 140 1],[517.325 150 1],[523.041 15 0],[527.901 12 0],[554.052 18 0],[555.243 12 0],[557.733 10 0],[558.927 160 1],[562.406 20 0],[562.693 12 0],[565.915 15 0],[566.753 40 0],[567.167 90 0],[568.914 18 0],[570.082 25 0],[570.731 25 0],[595.015 12 0],[595.919 25 0],[596.528 70 0],[599.443 50 0],[601.583 150 0],[603.804 80 0],[604.754 900 0],[608.011 100 0],[614.976 800 0],[621.087 400 0],[623.965 13000 0],[624.79 140 1],[634.851 10000 0],[641.365 8000 0],[656.969 450 0],[658.039 300 0],[665.041 400 0],[669.048 1800 0],[670.828 400 0],[677.398 7000 0],[679.553 1500 0],[683.426 9000 0],[685.603 50000 0],[687.022 8000 0],[690.248 15000 0],[690.982 6000 0],[696.635 4000 0],[703.747 45000 0],[712.789 30000 0],[717.99 130 1],[720.236 15000 0],[721.179 130 1],[730.903 1000 0],[731.102 15000 0],[731.43 700 0],[733.196 5000 0],[739.869 10000 0],[742.565 4000 0],[748.272 2200 0],[748.916 2500 0],[751.492 900 0],[755.224 5000 0],[757.338 5000 0],[760.717 7000 0],[775.47 18000 0],[442.03 140 2],[442.735 120 2],[443.232 120 2],[447.999 140 2],[501.254 150 2],[511.099 160 2],[575.317 140 2],[576.12 120 2],[609.182 150 2],[612.55 140 2],[623.357 130 2],[636.305 140 2],[733.677 120 2],[735.494 130 2]}{50000}%
+\wl@elt@search{#1}{Ne}{[381.843 100 1],[382.975 120 1],[421.974 150 1],[423.385 100 1],[425.065 120 1],[436.986 120 1],[437.94 70 1],[437.955 150 1],[438.506 100 1],[439.199 200 1],[439.799 150 1],[440.93 150 1],[441.322 100 1],[442.139 100 1],[442.852 100 1],[442.863 100 1],[443.09 150 1],[443.094 150 1],[445.705 120 1],[452.272 100 1],[453.7754 10 0],[454.038 10 0],[456.906 100 1],[470.4395 15 0],[470.8862 12 0],[471.0067 10 0],[471.2066 10 0],[471.5347 15 0],[475.2732 10 0],[478.8927 12 0],[479.022 10 0],[482.7344 10 0],[488.4917 10 0],[500.5159 4 0],[503.7751 10 0],[514.4938 10 0],[533.0778 25 0],[534.1094 20 0],[534.3283 8 0],[540.0562 60 0],[556.2766 5 0],[565.6659 10 0],[571.9225 5 0],[574.8298 12 0],[576.4419 80 0],[580.445 12 0],[582.0156 40 0],[585.2488 500 0],[587.2828 100 0],[588.1895 100 0],[590.2462 60 0],[590.6429 60 0],[594.4834 100 0],[596.5471 100 0],[597.4627 100 0],[597.5534 120 0],[598.7907 80 0],[602.9997 100 0],[607.4338 100 0],[609.6163 80 0],[612.845 60 0],[614.3063 100 0],[616.3594 120 0],[618.2146 250 0],[621.7281 150 0],[626.6495 150 0],[630.4789 60 0],[633.4428 100 0],[638.2992 120 0],[640.2246 200 0],[650.6528 150 0],[653.2882 60 0],[659.8953 150 0],[665.2093 70 0],[667.8276 90 0],[671.7043 20 0],[692.9467 100 0],[702.405 90 0],[703.2413 100 0],[705.1292 50 0],[705.9107 80 0],[717.3938 100 0],[721.32 150 1],[723.519 150 1],[724.5167 100 0],[734.394 150 1],[747.2439 40 0],[748.8871 90 0],[749.21 100 1],[752.282 150 1],[753.5774 80 0],[754.4044 60 0],[772.4628 100 0],[774.074 120 1]}{500}%
+\wl@elt@search{#1}{Na}{[408.137 200 1],[411.37 300 1],[412.308 250 1],[423.326 250 1],[423.899 2 0],[424.037 200 1],[424.09 250 1],[424.208 3 0],[427.364 4 0],[427.679 5 0],[428.784 2 0],[429.101 3 0],[429.248 250 1],[429.286 250 1],[430.881 250 1],[430.904 250 1],[432.091 250 1],[432.14 6 0],[432.462 7 0],[433.729 250 1],[434.149 4 0],[434.411 250 1],[434.474 5 0],[436.86 200 1],[437.522 200 1],[438.749 200 1],[439.003 8 0],[439.281 250 1],[439.334 9 0],[440.512 200 1],[441.989 6 0],[442.325 7 0],[444.67 200 1],[444.741 200 1],[445.474 200 1],[445.523 200 1],[445.721 200 1],[447.463 200 1],[447.88 200 1],[448.167 200 1],[449.015 200 1],[449.087 200 1],[449.418 10 0],[449.766 11 0],[449.962 200 1],[450.697 200 1],[451.921 200 1],[452.498 200 1],[453.332 200 1],[454.163 7 0],[454.519 8 0],[455.153 200 1],[459.092 160 1],[472.223 160 1],[473.11 160 1],[473.25 100 1],[474.167 160 1],[476.879 160 1],[478.879 100 1],[481.475 50 1],[483.526 50 1],[514.311 60 1],[519.165 100 1],[520.333 50 1],[520.855 80 1],[539.063 60 1],[540.046 70 1],[541.455 90 1],[568.2633 5 0],[568.8204 9 0],[588.995 1000 0],[589.5924 500 0],[617.525 60 1],[619.926 70 1],[623.468 70 1],[626.001 80 1],[627.474 80 1],[631.08 60 1],[635.283 60 1],[635.805 60 1],[636.115 70 1],[636.641 70 1],[637.891 60 1],[647.529 50 1],[651.421 90 1],[652.468 80 1],[653.07 130 1],[654.404 130 1],[654.575 130 1],[655.243 80 1]}{1000}%
+\wl@elt@search{#1}{Mg}{[382.93 140 0],[383.23 300 0],[383.829 500 0],[384.824 8 1],[384.891 1 0],[385.04 7 1],[385.396 2 0],[385.496 1 0],[385.886 2 0],[387.831 3 0],[389.191 2 0],[389.33 2 0],[389.557 3 0],[390.386 4 0],[393.84 6 0],[398.421 1 0],[398.675 8 0],[405.469 2 0],[405.75 10 0],[407.506 3 0],[408.183 2 0],[416.51 4 0],[416.727 15 0],[435.191 20 0],[435.453 6 0],[438.038 6 0],[438.464 9 1],[439.059 10 1],[442.8 8 1],[443.399 9 1],[443.649 5 1],[443.66 4 1],[448.116 14 1],[448.133 13 1],[453.429 6 1],[457.11 28 0],[462.13 3 0],[470.299 7 0],[473.003 10 0],[473.959 6 1],[473.971 5 1],[485.11 7 1],[516.733 75 0],[517.268 220 0],[518.361 400 0],[526.421 8 1],[526.437 7 1],[534.598 1 0],[540.154 9 1],[550.96 2 0],[552.841 6 0],[571.109 30 0],[578.531 5 0],[578.556 4 0],[591.643 7 1],[591.816 6 1],[631.872 10 0],[631.924 9 0],[631.949 7 0],[634.674 10 1],[634.696 9 1],[654.597 11 1],[662.044 5 1],[662.057 6 1],[663.083 2 0],[678.145 7 1],[678.785 8 1],[681.286 7 1],[681.927 8 1],[689.49 4 0],[696.54 6 0],[706.041 8 0],[719.317 10 0],[729.106 10 0],[738.7 5 0],[738.769 12 0],[758.076 4 1],[765.76 20 0],[765.915 19 0],[765.99 17 0],[769.016 8 0],[769.155 15 0],[772.261 1 0],[774.634 1 0],[775.93 1 0],[778.65 5 1],[779.098 4 1],[491.6 10 2],[583.982 10 2],[625.675 15 2]}{500}%
+\wl@elt@search{#1}{Al}{[390.068 450 1],[393.2 60 0],[394.4006 4500 0],[396.152 9000 0],[399.586 110 1],[422.681 290 1],[458.582 150 1],[458.819 110 1],[466.68 550 1],[489.876 110 1],[490.277 110 1],[528.021 150 1],[510.752 70 0],[528.377 290 1],[528.585 150 1],[531.232 110 1],[531.607 220 1],[537.184 150 1],[555.706 180 0],[555.795 110 0],[559.323 450 1],[585.362 110 1],[597.194 220 1],[600.176 290 1],[600.188 220 1],[600.642 450 1],[606.111 150 1],[606.843 290 1],[606.853 110 1],[607.323 450 1],[618.157 110 1],[618.168 150 1],[618.228 290 1],[618.245 220 1],[618.342 450 1],[620.152 450 1],[620.17 360 1],[622.618 290 1],[623.178 360 1],[624.336 450 1],[633.574 450 1],[669.602 360 0],[669.867 230 0],[708.397 60 0],[708.464 70 0],[736.157 110 0],[736.23 140 0],[760.616 60 0],[761.482 90 0],[398.014 110 2],[408.245 110 2],[408.861 150 2],[414.237 110 2],[414.992 650 2],[415.017 650 2],[436.464 110 2],[447.989 650 2],[447.997 650 2],[451.256 760 2],[452.894 550 2],[452.919 870 2],[470.115 110 2],[470.141 150 2],[490.41 110 2],[515.101 110 2],[516.389 110 2],[569.66 1200 2],[572.273 1000 2],[605.521 110 2],[763.537 220 2],[766.026 150 2],[768.197 220 2]}{9000}%
+\wl@elt@search{#1}{Si}{[385.366 100 1],[385.602 500 1],[386.26 200 1],[390.5523 300 0],[395.574 10 1],[397.746 10 1],[399.177 15 1],[399.801 10 1],[407.545 20 1],[407.678 15 1],[410.2936 70 0],[412.807 300 1],[413.089 500 1],[418.335 10 1],[419.072 100 1],[419.813 50 1],[462.142 100 1],[462.172 150 1],[478.2991 50 0],[479.2212 35 0],[479.2324 80 0],[488.32 15 1],[490.699 20 1],[493.28 20 1],[494.7607 30 0],[500.6061 40 0],[504.103 1000 1],[505.598 1000 1],[518.19 100 1],[518.525 100 1],[519.286 200 1],[520.241 500 1],[529.519 30 1],[540.534 100 1],[541.724 15 1],[542.892 15 1],[543.289 15 1],[543.862 100 1],[544.726 20 1],[545.449 15 1],[545.645 100 1],[546.643 500 1],[546.687 500 1],[546.921 100 1],[549.323 40 0],[549.645 200 1],[551.7535 35 0],[554.074 100 1],[557.666 150 1],[562.2221 30 0],[563.297 100 1],[563.948 200 1],[564.5611 90 0],[566.066 150 1],[566.5554 80 0],[566.956 1000 1],[568.144 30 1],[568.4484 120 0],[568.881 300 1],[569.0425 100 0],[570.1105 90 0],[570.137 200 1],[570.637 100 1],[570.8397 160 0],[574.7667 45 0],[575.3625 45 0],[575.422 45 0],[576.2977 45 0],[577.2145 70 0],[578.0384 70 0],[578.573 30 1],[579.3071 90 0],[579.49 30 1],[579.7859 100 0],[580.047 150 1],[580.674 200 1],[582.78 30 1],[584.613 50 1],[586.748 10 1],[586.84 300 1],[587.3764 40 0],[591.522 150 1],[594.8545 200 0],[595.756 500 1],[597.893 500 1],[606.745 10 1],[608.006 20 1],[608.667 10 1],[612.5021 90 0],[613.1574 85 0],[613.185 90 0],[614.2487 100 0],[614.5015 100 0],[615.5134 160 0],[623.732 160 0],[623.8287 40 0],[624.3813 125 0],[624.4468 125 0],[625.4188 180 0],[633.1954 45 0],[634.71 1000 1],[637.136 1000 1],[652.6609 45 0],[652.7199 45 0],[655.5462 45 0],[666.052 50 1],[666.5 15 1],[667.188 100 1],[669.938 20 1],[671.704 50 1],[672.1853 100 0],[674.164 30 0],[675.028 20 1],[681.845 30 1],[682.982 50 1],[684.8568 30 0],[697.6523 80 0],[700.3567 180 0],[700.5883 180 0],[701.728 30 0],[701.7646 90 0],[703.4903 250 0],[716.469 70 0],[716.5545 200 0],[718.489 70 0],[719.358 65 0],[719.39 30 0],[722.6206 100 0],[723.5326 100 0],[723.582 60 0],[725.0625 180 0],[727.5294 160 0],[728.281 40 0],[728.9173 400 0],[729.026 55 0],[737.3 35 0],[740.5774 375 0],[740.9082 200 0],[741.535 40 0],[741.5946 275 0],[742.3497 425 0],[742.46 85 0],[768.0267 100 0],[774.271 40 0],[380.654 30 2],[384.246 7 2],[392.447 20 2],[394.749 6 2],[396.384 6 2],[398.124 5 2],[410.186 5 2],[410.242 8 2],[411.55 5 2],[433.85 9 2],[434.14 8 2],[437.763 8 2],[440.59 6 2],[440.672 8 2],[449.405 6 2],[455.262 30 2],[455.4 8 2],[456.782 25 2],[457.476 20 2],[461.966 7 2],[463.828 7 2],[466.587 8 2],[468.302 9 2],[468.38 7 2],[471.665 16 2],[473.052 7 2],[480.043 8 2],[481.333 15 2],[481.972 16 2],[482.897 18 2],[509.142 10 2],[511.376 7 2],[511.412 8 2],[519.726 5 2],[545.146 6 2],[547.305 7 2],[570.46 7 2],[571.629 8 2],[573.973 20 2],[589.879 10 2],[631.446 7 2],[652.436 6 2],[683.156 6 2],[685.165 7 2],[746.189 5 2],[746.262 8 2],[746.632 9 2],[761.236 12 2],[403.139 1 3],[403.806 2 3],[408.885 10 3],[411.61 9 3],[421.241 7 3],[431.41 3 3],[432.818 5 3],[440.373 2 3],[441.165 1 3],[461.127 1 3],[462.862 3 3],[463.124 9 3],[465.432 10 3],[465.692 3 3],[466.714 1 3],[467.33 2 3],[494.745 1 3],[495.011 3 3],[530.497 2 3],[530.949 1 3],[666.756 5 3],[670.121 7 3],[699.836 3 3],[704.794 6 3],[706.841 4 3],[763.05 2 3],[765.456 4 3],[767.875 4 3],[771.879 5 3],[772.382 6 3],[772.564 2 3],[773.047 1 3],[775.291 1 3]}{1000}%
+\wl@elt@search{#1}{P}{[417.848 100 1],[428.86 200 1],[438.535 200 1],[442.071 400 1],[445.246 100 1],[446.3 150 1],[446.798 120 1],[447.526 200 1],[449.924 200 1],[453.081 120 1],[455.483 120 1],[455.807 120 1],[458.171 120 1],[458.804 500 1],[458.986 500 1],[460.208 600 1],[462.67 300 1],[465.831 300 1],[486.442 200 1],[492.72 150 1],[494.353 500 1],[495.439 300 1],[496.971 300 1],[519.141 150 1],[525.352 300 1],[529.613 400 1],[531.607 250 1],[534.475 300 1],[537.82 250 1],[538.688 300 1],[540.972 200 1],[542.591 400 1],[545.074 400 1],[545.831 100 0],[546.12 125 1],[547.775 200 0],[548.355 200 1],[549.973 200 1],[550.719 200 1],[554.114 200 1],[558.327 200 1],[558.834 250 1],[572.771 100 1],[602.418 500 1],[603.404 400 1],[604.312 500 1],[605.55 250 1],[605.786 100 1],[608.782 350 1],[609.768 150 0],[616.559 350 1],[619.901 180 0],[623.229 100 1],[636.727 200 1],[643.532 250 1],[643.631 130 1],[645.999 600 1],[650.346 600 1],[650.797 600 1],[671.328 150 1],[671.742 120 0],[716.545 100 0],[717.512 150 0],[717.666 120 0],[750.576 100 0],[390.4812 200 2],[391.4314 250 2],[395.7641 300 2],[397.8307 350 2],[405.744 200 2],[405.9312 400 2],[408.0084 300 2],[422.2195 500 2],[424.672 350 2],[442.8171 200 2],[446.3668 200 2],[447.9776 250 2],[608.3409 150 2],[640.9204 150 2],[648.444 150 2],[648.6381 150 2],[699.269 150 2],[424.9656 300 3],[454.0288 250 3],[454.1112 250 3],[454.8056 150 3],[454.8449 200 3],[523.5499 150 3],[598.9774 150 3],[614.2605 150 3],[671.3939 150 3],[671.5906 120 3],[744.3657 200 3],[408.318 150 4],[409.495 110 4],[515.672 110 4]}{600}%
+\wl@elt@search{#1}{S}{[386.76 285 0],[390.2 285 0],[393.33 360 1],[412.08 450 0],[414.23 280 1],[414.51 360 1],[415.31 450 1],[416.27 450 1],[469.41 450 0],[469.54 285 0],[469.62 160 0],[471.62 280 1],[481.55 450 1],[492.41 360 1],[492.53 450 1],[499.35 285 0],[542.86 360 1],[543.28 650 1],[545.38 1000 1],[547.36 1000 1],[550.97 1000 1],[556.49 280 1],[560.61 1000 1],[564 450 1],[564.03 450 1],[564.7 280 1],[565.99 650 1],[566.47 450 1],[570.61 160 0],[581.92 450 1],[605.27 450 0],[628.64 280 1],[628.71 450 1],[630.55 450 1],[631.27 450 1],[638.49 280 1],[639.73 280 1],[639.8 280 1],[641.37 360 1],[674.36 160 0],[674.88 285 0],[675.72 450 0],[757.9 450 0],[762.98 450 0],[768.61 285 0],[769.67 450 0],[383.83 160 2],[392.86 160 2],[425.36 360 2],[428.5 110 2],[433.27 70 2]}{1000}%
+\wl@elt@search{#1}{Cl}{[380.518 1900 1],[380.946 1300 1],[382.02 1700 1],[382.759 2800 1],[383.335 4500 1],[384.32 2500 1],[384.537 3100 1],[384.565 3900 1],[384.58 1500 1],[385.099 10000 1],[385.137 7900 1],[385.165 1200 1],[386.083 25000 1],[386.099 4400 1],[386.137 1000 1],[391.387 1500 1],[391.663 1100 1],[394.482 20 0],[410.479 20 0],[413.25 10000 1],[420.967 65 0],[422.642 50 0],[426.458 60 0],[436.327 100 0],[436.95 100 0],[437.293 5000 1],[437.99 100 0],[438.975 100 0],[439.04 90 0],[440.303 90 0],[443.849 100 0],[447.53 90 0],[448.991 1500 1],[452.619 100 0],[460.098 80 0],[462.3938 40 0],[465.404 50 0],[466.1208 80 0],[469.1523 45 0],[472.1255 40 0],[474.0729 45 0],[476.865 4300 1],[478.132 13000 1],[479.455 99000 1],[481.006 29000 1],[481.947 16000 1],[489.677 81000 1],[490.478 47000 1],[491.773 26000 1],[499.548 10000 1],[507.826 26000 1],[509.9789 30 0],[521.794 56000 1],[522.136 23000 1],[539.212 15000 1],[542.323 99000 1],[542.351 10000 1],[544.337 19000 1],[544.421 10000 1],[545.702 5600 1],[553.2162 40 0],[579.6305 50 0],[579.9914 45 0],[585.6742 30 0],[594.858 100 0],[601.9812 50 0],[608.261 35 0],[609.469 1900 1],[611.443 160 0],[614.0245 200 0],[619.4757 160 0],[639.866 160 0],[643.4833 150 0],[653.143 150 0],[666.167 1400 1],[667.843 150 0],[668.602 1300 1],[671.341 1200 1],[684.029 150 0],[693.2903 300 0],[698.1886 300 0],[708.6814 600 0],[725.662 7500 0],[741.411 5000 0],[746.237 550 0],[748.947 550 0],[749.2118 700 0],[754.7072 11000 0],[767.242 2300 0],[770.2828 450 0],[771.7581 7000 0],[774.497 10000 0],[776.916 2200 0],[777.109 650 0],[392.587 500 2],[399.15 700 2],[401.85 600 2],[405.907 600 2],[410.423 500 2],[410.683 500 2],[437.091 400 2],[460.821 500 2],[470.314 300 2],[486.375 100 2],[497.164 10 2]}{99000}%
+\wl@elt@search{#1}{Ar}{[380.3172 25 1],[380.9456 50 1],[383.4679 7 0],[385.0581 70 1],[386.8528 35 1],[392.5719 35 1],[392.8623 50 1],[393.2547 25 1],[394.6097 70 1],[394.7505 7 0],[394.8979 35 0],[397.9356 20 1],[399.4792 35 1],[401.3857 50 1],[403.3809 50 1],[403.546 20 1],[404.2894 150 1],[404.4418 50 0],[405.2921 100 1],[407.2005 200 1],[407.2385 70 1],[407.6628 25 1],[407.9574 35 1],[408.2387 25 1],[410.3912 150 1],[413.1724 300 1],[415.6086 35 1],[415.859 400 0],[416.418 50 0],[417.9297 35 1],[418.1884 50 0],[419.0713 100 0],[419.1029 50 0],[419.8317 200 0],[420.0674 400 0],[421.8665 25 1],[422.2637 25 1],[422.6988 25 1],[422.8158 100 1],[423.722 100 1],[425.1185 25 0],[425.9362 200 0],[426.6286 100 0],[426.6527 70 1],[427.2169 150 0],[427.7528 550 1],[428.2898 20 1],[430.0101 100 0],[430.065 25 1],[430.9239 70 1],[433.12 200 1],[433.203 50 1],[433.3561 100 0],[433.5338 50 0],[434.5168 25 0],[434.8064 800 1],[435.2205 50 1],[436.2066 25 1],[436.7832 50 1],[437.0753 200 1],[437.1329 70 1],[437.5954 50 1],[437.9667 150 1],[438.5057 50 1],[440.0097 70 1],[440.0986 200 1],[442.6001 400 1],[443.0189 150 1],[443.0996 50 1],[443.3838 50 1],[443.9461 20 1],[444.8879 35 1],[447.4759 100 1],[448.1811 200 1],[451.0733 100 0],[452.2323 20 0],[453.0552 20 1],[454.5052 400 1],[456.4405 20 1],[457.935 400 1],[458.9898 400 1],[459.6097 15 0],[460.9567 550 1],[462.8441 7 0],[463.7233 35 1],[465.7901 400 1],[470.2316 15 0],[472.1591 20 1],[472.6868 550 1],[473.2053 50 1],[473.5906 300 1],[476.4865 800 1],[480.602 550 1],[484.781 150 1],[486.591 50 1],[487.9864 800 1],[488.9042 70 1],[490.4752 20 1],[493.3209 35 1],[496.508 200 1],[500.9334 50 1],[501.7163 70 1],[506.2037 70 1],[509.0495 20 1],[514.1783 100 1],[514.5308 70 1],[515.1391 5 0],[516.2285 15 0],[516.5773 25 1],[518.7746 20 0],[521.6814 20 1],[522.1271 7 0],[542.1352 5 0],[545.1652 10 0],[549.5874 25 0],[550.6113 5 0],[555.8702 25 0],[557.2541 10 0],[560.6733 35 0],[565.0704 20 0],[573.952 10 0],[583.4263 5 0],[586.031 10 0],[588.2624 15 0],[588.8584 25 0],[591.2085 50 0],[592.8813 15 0],[594.2669 5 0],[598.7302 7 0],[599.8999 5 0],[602.515 5 0],[603.2127 70 0],[604.3223 35 0],[605.2723 10 0],[605.9372 20 0],[609.8803 7 0],[610.5635 10 0],[611.4923 100 1],[614.5441 10 0],[617.0174 7 0],[617.2278 150 1],[617.3096 10 0],[621.2503 10 0],[621.5938 5 0],[624.312 25 1],[629.6872 7 0],[630.7657 15 0],[636.9575 7 0],[638.4717 20 0],[641.6307 70 0],[648.3082 25 1],[653.8112 15 0],[660.4853 15 0],[663.8221 25 1],[663.974 20 1],[664.3698 50 1],[666.0676 5 0],[666.4051 5 0],[666.6359 25 1],[667.7282 100 0],[668.4293 35 1],[675.2834 150 0],[675.6163 5 0],[676.6612 15 0],[686.1269 20 1],[687.1289 150 0],[687.9582 5 0],[688.8174 10 0],[693.7664 50 0],[695.1478 7 0],[696.025 7 0],[696.5431 10000 0],[703.0251 150 0],[706.7218 10000 0],[706.8736 100 0],[710.7478 25 0],[712.582 25 0],[714.7042 1000 0],[715.8839 15 0],[720.698 70 0],[726.5172 15 0],[727.0664 7 0],[727.2936 2000 0],[731.1716 35 0],[731.6005 25 0],[735.0814 5 0],[735.3293 70 0],[737.2118 200 0],[738.0426 20 1],[738.398 10000 0],[739.298 20 0],[741.2337 15 0],[742.5294 10 0],[743.5368 25 0],[743.6297 10 0],[750.3869 20000 0],[751.4652 15000 0],[763.5106 25000 0],[772.3761 15000 0],[772.4207 10000 0],[385.832 10 2],[390.784 7 2],[396.053 8 2],[402.36 6 2],[414.67 5 2]}{25000}%
+\wl@elt@search{#1}{K}{[380.014 6 1],[381.656 6 1],[381.75 7 1],[387.374 5 1],[387.862 4 1],[389.792 8 1],[392.3 5 1],[392.636 5 1],[394.253 6 1],[395.521 6 1],[396.672 6 1],[397.258 6 1],[399.51 6 1],[400.124 7 1],[401.21 5 1],[404.259 6 1],[404.414 18 0],[404.721 17 0],[409.369 5 1],[411.499 6 1],[413.472 7 1],[414.919 7 1],[418.624 8 1],[422.297 7 1],[422.567 7 1],[426.34 7 1],[430.5 7 1],[430.91 7 1],[434.003 5 1],[438.816 7 1],[446.665 5 1],[450.533 6 1],[459.565 5 1],[460.845 8 1],[464.188 10 0],[464.237 11 0],[465.938 5 1],[474.091 4 0],[474.435 6 0],[475.393 5 0],[475.739 7 0],[478.649 5 0],[479.105 7 0],[479.975 6 0],[480.435 8 0],[482.923 9 1],[484.986 7 0],[485.609 8 0],[486.348 8 0],[486.976 9 0],[494.202 8 0],[494.329 6 1],[495.082 9 0],[495.615 9 0],[496.503 10 0],[500.56 8 1],[505.627 7 1],[508.423 10 0],[509.717 11 0],[509.92 11 0],[511.225 12 0],[531.024 5 1],[532.328 12 0],[533.969 13 0],[534.297 12 0],[535.957 14 0],[547.013 6 1],[564.273 5 1],[577.232 4 1],[578.238 16 0],[580.175 17 0],[581.215 15 0],[583.189 17 0],[596.964 2 1],[612.027 8 1],[624.659 6 1],[630.729 7 1],[642.796 5 1],[659.5 2 1],[691.108 19 0],[693.628 12 0],[693.877 20 0],[696.418 7 0],[696.467 12 0],[766.49 25 0],[769.896 24 0],[388.55 1 2]}{25}%
+\wl@elt@search{#1}{Ca}{[387.048 9 0],[387.254 11 0],[387.256 11 0],[387.578 12 0],[387.58 12 0],[388.91 6 0],[392.348 6 0],[393.366 230 1],[393.529 9 0],[394.604 6 0],[394.89 15 0],[395.705 17 0],[396.847 220 1],[397.257 8 0],[397.371 18 0],[409.71 50 1],[409.853 15 0],[409.857 15 0],[410.982 60 1],[411.028 30 1],[420.618 40 1],[422.007 50 1],[422.673 50 0],[424.046 15 0],[428.301 24 0],[428.936 22 0],[429.899 22 0],[430.253 25 0],[430.774 23 0],[431.865 22 0],[435.508 20 0],[442.544 25 0],[443.496 26 0],[443.569 25 0],[445.478 30 0],[445.589 28 0],[445.661 20 0],[447.204 20 1],[447.923 10 1],[448.918 20 1],[452.694 23 0],[457.855 22 0],[458.14 23 0],[458.147 23 0],[458.587 24 0],[458.596 24 0],[468.527 20 0],[471.674 30 1],[472.103 40 1],[479.997 40 1],[487.813 25 0],[500.148 70 1],[501.997 80 1],[502.114 40 1],[504.162 23 0],[518.885 25 0],[526.171 22 0],[526.224 23 0],[526.424 22 0],[526.556 24 0],[527.027 25 0],[528.527 60 1],[530.722 70 1],[533.919 50 1],[534.947 27 0],[551.298 23 0],[558.197 25 0],[558.876 27 0],[559.012 24 0],[559.447 26 0],[559.849 25 0],[560.129 24 0],[560.285 24 0],[585.745 30 0],[592.272 10 1],[592.369 10 1],[610.272 27 0],[612.222 29 0],[616.129 22 0],[616.217 30 0],[616.376 22 0],[616.644 24 0],[616.906 26 0],[616.956 28 0],[643.907 35 0],[644.981 30 0],[645.56 22 0],[645.687 80 1],[646.257 34 0],[647.166 29 0],[649.378 32 0],[649.965 28 0],[657.278 23 0],[671.769 30 0],[714.815 33 0],[720.219 31 0],[732.615 33 0],[757.581 30 1],[758.111 60 1],[760.13 80 1],[760.232 20 1],[408.177 15 2],[415.357 15 2],[416.431 15 2],[418.42 15 2],[420.724 18 2],[423.374 17 2],[424.074 16 2],[428.439 15 2],[430.281 20 2],[432.919 15 2],[433.357 16 2],[435.838 15 2],[439.959 19 2],[440.629 17 2],[443.13 17 2],[449.988 19 2],[451.659 18 2],[457.212 18 2],[470.883 11 2],[471.627 11 2],[485.917 10 2],[500.895 10 2],[505.007 10 2],[523.182 10 2],[524.737 11 2],[527.198 13 2],[530.132 10 2],[532.129 11 2],[532.806 10 2],[557.058 11 2],[557.906 10 2],[606.998 13 2],[617.322 10 2],[621.398 12 2],[629.489 11 2],[637.011 11 2],[638.755 10 2],[642.451 12 2],[648.535 12 2],[653.878 10 2],[654.224 10 2],[730.869 10 2]}{230}%
+\wl@elt@search{#1}{Sc}{[383.307 270 1],[384.303 610 1],[389.497 90 0],[390.749 20000 0],[391.181 23000 0],[392.351 45 1],[393.338 4400 0],[395.227 45 0],[398.906 45 1],[399.661 5500 0],[401.449 530 1],[402.04 20000 0],[402.369 20000 0],[403.067 220 0],[403.139 140 0],[403.423 100 0],[404.38 220 0],[404.648 200 0],[404.779 2700 0],[404.995 120 0],[405.455 5500 0],[405.659 220 0],[407.497 160 0],[407.857 160 0],[408.24 6100 0],[408.667 200 0],[408.716 400 0],[409.313 40 0],[409.485 65 0],[409.835 55 0],[410.033 65 0],[413.3 440 0],[414.03 530 0],[414.74 65 0],[415.236 720 0],[415.472 55 -1],[416.188 90 0],[416.519 1100 0],[417.156 65 0],[418.645 45 0],[418.762 65 0],[420.52 75 0],[421.234 65 0],[421.249 45 0],[421.61 75 0],[421.826 110 0],[421.973 110 0],[422.188 40 0],[422.559 90 0],[423.193 180 0],[423.361 200 0],[423.782 100 0],[423.805 400 0],[423.957 90 0],[424.612 100 0],[424.683 15000 1],[428.356 55 -1],[429.477 290 1],[430.571 350 1],[431.409 4200 1],[432.074 3300 1],[432.501 2400 1],[434.853 28 0],[435.461 180 1],[435.864 110 0],[435.908 55 0],[436.492 28 0],[437.446 2000 1],[438.481 130 1],[438.96 45 0],[440.037 1100 1],[441.556 880 1],[442.066 28 1],[443.136 45 1],[454.255 65 0],[454.468 90 0],[455.724 120 0],[457.399 160 0],[459.294 65 0],[459.845 65 0],[460.472 55 0],[460.953 45 0],[460.995 45 0],[467.04 350 1],[468.049 40 0],[469.829 50 1],[470.697 120 0],[470.934 120 0],[472.877 200 0],[472.923 490 0],[473.23 40 0],[473.41 590 0],[473.508 60 -1],[473.765 690 0],[474.102 790 0],[474.381 1200 0],[475.316 200 0],[477.935 220 0],[479.15 90 0],[482.728 100 0],[483.367 100 0],[483.944 170 0],[484.047 40 0],[484.768 80 0],[485.268 80 0],[485.779 140 -1],[490.667 80 0],[490.976 90 0],[492.284 90 0],[493.425 90 0],[493.574 45 0],[494.133 70 0],[495.406 170 0],[497.366 120 0],[498.037 150 0],[498.345 80 0],[499.192 140 0],[501.839 80 0],[502.014 70 0],[502.151 80 0],[503.102 530 1],[503.274 55 0],[506.432 250 0],[506.886 80 0],[507.023 530 0],[507.581 250 0],[508.156 2100 0],[508.372 1200 0],[508.555 1100 0],[508.695 750 0],[508.714 390 0],[508.989 270 0],[509.246 45 0],[509.673 390 0],[509.923 620 0],[510.112 370 0],[510.906 180 0],[511.286 150 0],[511.669 320 0],[513.368 70 -1],[517.106 45 -1],[521.052 390 0],[521.128 45 0],[521.967 280 0],[523.982 350 1],[525.833 280 0],[528.497 35 0],[528.576 210 0],[530.194 35 0],[531.835 22 1],[533.177 70 0],[533.423 14 1],[533.941 95 0],[534.105 120 0],[534.296 95 0],[534.93 350 0],[534.971 120 0],[535.03 60 0],[535.575 210 0],[535.61 530 0],[535.719 14 1],[537.535 270 0],[539.208 370 0],[541.612 45 0],[542.557 45 0],[542.941 45 0],[543.294 35 0],[543.323 55 0],[543.822 45 0],[543.903 55 0],[544.26 55 0],[544.62 270 0],[544.739 18 0],[545.134 120 0],[545.521 30 0],[546.52 18 0],[546.84 55 0],[547.219 60 0],[547.464 18 0],[548.199 750 0],[548.462 530 0],[551.422 570 0],[551.539 16 0],[552.05 660 0],[552.606 45 0],[552.682 660 1],[554.104 55 0],[554.64 30 0],[555.04 18 0],[555.225 5 1],[555.359 35 0],[556.11 16 0],[556.486 70 0],[557.124 18 0],[557.976 14 0],[559.133 110 0],[559.338 35 0],[560.419 22 0],[563.102 22 0],[564.098 80 1],[564.636 45 0],[564.76 16 0],[564.956 55 0],[565.788 250 1],[565.834 60 1],[566.716 55 1],[566.904 70 1],[567.181 1500 0],[568.42 95 1],[568.684 1200 0],[570.021 1100 0],[570.861 190 0],[571.175 880 0],[571.728 230 0],[572.408 180 0],[573.685 55 -1],[576.445 55 -1],[577.274 95 -1],[577.532 55 -1],[580.984 70 -1],[581.16 70 -1],[584.773 95 -1],[584.907 70 -1],[588.738 70 -1],[591.804 35 -1],[591.911 30 0],[592.81 60 -1],[596.149 35 0],[596.825 60 -1],[596.919 35 0],[598.842 90 0],[601.707 160 -1],[602.618 60 0],[603.617 620 -1],[606.431 490 -1],[607.265 440 -1],[607.93 620 -1],[610.187 320 -1],[610.993 370 -1],[611.597 370 -1],[614.87 180 -1],[615.393 150 -1],[618.809 150 -1],[619.29 150 -1],[621.068 620 0],[623.941 90 0],[623.978 320 0],[624.563 120 1],[624.996 110 0],[625.896 250 0],[626.225 60 0],[627.631 55 0],[627.976 45 1],[630.07 18 1],[630.567 750 0],[630.99 26 1],[632.085 16 1],[634.483 26 0],[637.882 60 0],[640.841 55 -1],[641.335 90 0],[643.708 26 -1],[644.624 55 -1],[645.778 26 -1],[648.54 35 -1],[649.59 26 -1],[652.562 55 -1],[653.53 22 -1],[655.784 45 -1],[656.688 35 -1],[657.585 18 -1],[660.46 60 1],[660.999 26 -1],[661.794 18 -1],[664.508 18 -1],[665.442 22 -1],[666.101 26 -1],[670.048 18 -1],[670.593 18 -1],[673.787 65 0],[673.94 35 0],[681.708 35 0],[681.952 50 0],[682.954 29 0],[683.503 50 0],[696.312 5 -1],[699.068 5 -1],[702.572 5 -1],[703.577 8 -1],[707.237 5 -1],[709.438 5 -1],[713.814 12 0],[716.913 14 0],[725.757 12 0],[727.557 8 0],[730.062 3 0],[752.413 12 0],[755.396 14 0],[757.444 15 0],[761.745 11 0],[766.572 14 0],[769.773 30 0],[772.972 18 0],[774.117 55 0],[775.037 5 0],[775.272 5 0],[777.106 6 0],[778.517 15 0],[779.468 8 0],[406.121 80 2],[406.866 100 2],[430.947 40 2],[474.095 10 2],[478.087 15 2],[499.289 50 2],[503.209 60 2],[625.601 80 2],[630.76 60 2],[744.916 90 2],[754.815 70 2],[459.442 8 3],[463.996 8 3],[550.174 8 3],[562.072 9 3],[570.682 10 3],[577.163 14 3],[654.803 9 3]}{23000}%
+\wl@elt@search{#1}{Ti}{[381.822 70 0],[382.203 60 0],[382.819 240 0],[383.368 95 0],[383.678 95 0],[384.645 60 0],[385.305 130 0],[385.373 130 0],[385.814 170 0],[386.644 240 0],[386.84 170 0],[387.321 120 0],[387.526 260 0],[388.215 170 0],[388.233 170 0],[388.289 500 0],[388.802 60 0],[388.995 70 0],[389.525 200 0],[389.849 85 0],[390.054 530 1],[390.096 180 0],[390.478 2600 0],[391.119 110 0],[391.346 500 1],[391.434 500 0],[391.474 24 0],[391.982 35 0],[392.142 290 0],[392.453 1100 0],[392.632 110 0],[392.988 890 0],[393.202 35 1],[393.424 70 0],[394.778 1100 0],[394.867 4500 0],[395.634 4500 0],[395.821 5200 0],[396.285 950 0],[396.427 950 0],[398.176 4800 0],[398.248 570 0],[398.433 60 0],[398.525 35 0],[398.559 60 0],[398.976 5700 0],[399.47 35 0],[399.864 7800 0],[399.936 70 0],[400.249 70 0],[400.381 70 0],[400.597 35 0],[400.806 70 0],[400.893 950 0],[400.966 190 0],[401.239 70 1],[401.358 180 0],[401.538 70 0],[401.628 35 0],[401.777 120 0],[402.183 140 0],[402.457 1200 0],[402.514 40 1],[402.654 190 0],[402.748 40 0],[402.834 40 1],[403.051 190 0],[403.391 40 0],[403.491 30 0],[403.583 110 0],[404.032 35 0],[405.502 290 0],[405.762 85 0],[405.814 85 0],[406.026 410 0],[406.422 200 0],[406.51 200 0],[407.847 840 0],[407.972 40 0],[408.246 290 0],[409.917 85 0],[411.271 220 0],[412.217 85 0],[412.331 40 0],[412.357 85 0],[412.754 130 0],[412.917 40 0],[413.125 40 0],[413.729 140 0],[414.305 85 0],[415.096 170 0],[415.964 85 0],[416.365 70 1],[416.414 35 0],[416.632 40 0],[416.935 85 0],[417.103 120 0],[417.19 40 1],[418.33 35 0],[418.612 360 0],[418.869 40 0],[420.075 70 0],[420.346 85 0],[421.173 35 0],[422.479 40 0],[422.765 40 0],[423.789 130 0],[424.912 85 0],[425.604 130 0],[425.854 70 0],[426.16 70 0],[426.313 330 0],[426.571 35 0],[426.622 40 0],[427.014 70 0],[427.243 85 0],[427.458 240 0],[427.643 120 0],[427.823 120 0],[427.881 30 0],[428.138 110 0],[428.271 220 0],[428.499 160 0],[428.601 890 0],[428.74 840 0],[428.816 30 0],[428.907 950 0],[429.023 120 1],[429.094 840 0],[429.114 120 0],[429.412 140 1],[429.576 840 0],[429.866 2000 0],[429.923 200 0],[429.964 200 0],[430.005 200 1],[430.056 2900 0],[430.109 4100 0],[430.193 85 1],[430.592 6000 0],[430.79 180 1],[430.85 35 0],[431.165 40 0],[431.287 85 1],[431.435 85 0],[431.48 1200 0],[431.864 360 0],[432.166 180 0],[432.513 190 0],[432.636 160 0],[433.484 30 0],[433.792 160 1],[434.429 24 1],[434.611 70 0],[435.406 35 0],[436.049 95 0],[436.894 24 0],[436.968 95 0],[437.238 60 0],[438.808 30 0],[439.392 170 0],[439.504 330 1],[439.977 60 1],[440.428 240 0],[440.49 60 0],[440.568 30 0],[441.654 60 0],[441.728 220 0],[441.772 60 1],[442.176 120 0],[442.282 120 0],[442.439 24 0],[442.583 30 0],[442.606 120 0],[442.71 890 0],[443.002 21 0],[443.037 85 0],[443.128 50 0],[443.26 30 0],[443.358 24 0],[443.4 170 0],[443.659 70 0],[443.823 30 0],[444.035 130 0],[444.127 50 0],[444.38 230 1],[444.427 24 0],[444.915 840 0],[445.049 30 1],[445.09 550 0],[445.332 840 0],[445.371 290 0],[445.533 950 0],[445.743 1100 0],[446.209 21 0],[446.338 70 0],[446.354 95 0],[446.581 290 0],[446.85 240 1],[447.124 240 0],[447.485 95 0],[447.97 95 0],[448.059 50 0],[448.126 530 0],[448.269 95 0],[448.832 19 1],[448.909 260 0],[449.255 24 0],[449.501 40 0],[449.615 240 0],[449.773 24 0],[450.127 200 1],[450.378 40 0],[450.636 21 0],[451.117 50 0],[451.274 780 0],[451.562 19 0],[451.803 1000 0],[451.87 95 0],[452.28 1000 0],[452.731 780 0],[453.324 6000 0],[453.397 240 1],[453.478 3600 0],[453.558 2400 0],[453.592 1200 0],[453.605 1200 0],[453.723 24 0],[453.91 24 0],[454.469 720 0],[454.877 950 0],[454.963 240 1],[455.246 950 0],[455.508 24 0],[455.549 720 0],[455.786 19 0],[455.811 19 0],[455.992 60 0],[456.263 50 0],[456.343 35 0],[456.377 110 1],[457.091 35 0],[457.198 240 1],[458.584 19 -1],[458.995 24 1],[459.923 60 0],[460.937 21 0],[461.727 950 0],[461.952 24 0],[462.309 480 0],[462.934 190 0],[463.487 50 -1],[463.788 60 0],[463.937 240 0],[463.967 220 0],[463.995 190 0],[464.519 140 0],[465.002 120 0],[465.604 24 0],[465.647 720 0],[466.759 840 0],[467.512 70 0],[468.192 950 0],[468.692 21 0],[469.08 24 0],[469.134 190 0],[469.368 40 0],[469.694 24 0],[469.876 190 0],[471.019 120 0],[471.53 24 0],[472.262 65 0],[472.317 65 0],[473.117 55 0],[473.343 45 0],[473.468 18 0],[474.211 22 0],[474.279 170 0],[474.768 22 0],[475.812 310 0],[475.928 310 0],[476.633 45 0],[476.977 28 0],[477.826 65 0],[478.172 45 0],[479.249 110 0],[479.622 45 0],[479.798 35 0],[479.98 110 0],[480.51 28 1],[480.543 110 0],[480.853 45 0],[481.108 22 0],[481.225 40 0],[482.042 200 0],[482.546 22 0],[483.613 40 0],[484.087 470 0],[484.847 65 0],[485.601 290 0],[486.418 35 0],[486.826 200 0],[487.014 250 0],[488.091 28 0],[488.235 45 0],[488.508 400 0],[489.991 380 0],[491.362 320 0],[491.524 55 0],[491.987 130 0],[492.177 180 0],[492.541 55 0],[492.616 30 0],[492.834 150 0],[493.774 30 0],[493.829 95 0],[494.158 30 0],[494.819 21 0],[495.825 21 0],[496.475 55 0],[496.604 21 0],[496.858 65 0],[497.305 75 0],[497.535 120 0],[497.774 65 0],[497.82 120 0],[498.173 5800 0],[498.915 150 0],[499.107 4600 0],[499.508 30 0],[499.71 140 0],[499.951 4000 0],[500.101 230 0],[500.721 3600 0],[500.965 120 0],[501.33 230 0],[501.419 3200 0],[501.617 580 0],[502.003 840 0],[502.287 840 0],[502.484 580 0],[502.558 300 0],[503.591 1200 0],[503.647 840 0],[503.84 740 0],[503.995 1200 0],[504.062 75 0],[504.359 85 0],[504.427 35 0],[504.541 55 0],[504.821 26 0],[505.287 110 0],[505.408 21 0],[506.211 110 0],[506.407 35 0],[506.466 1400 0],[506.599 95 0],[506.833 35 0],[506.935 65 0],[507.148 130 0],[508.534 40 0],[508.707 130 0],[510.315 21 0],[510.944 55 0],[511.344 190 0],[512.042 270 0],[512.915 30 1],[514.547 270 0],[514.748 230 0],[515.22 210 0],[516.686 21 -1],[517.375 1100 0],[518.634 40 0],[518.87 85 1],[518.958 30 0],[519.298 1300 0],[519.404 85 0],[520.11 65 0],[520.608 120 0],[520.787 75 0],[520.842 65 -1],[521.039 1400 0],[521.229 65 0],[521.971 150 0],[522.269 95 0],[522.364 85 0],[522.432 250 0],[522.456 95 0],[522.495 190 0],[522.656 65 1],[523.858 120 0],[524.615 21 0],[524.657 55 0],[524.731 75 0],[525.095 21 0],[525.211 110 0],[525.583 75 0],[525.999 55 0],[526.35 55 0],[526.598 150 0],[528.239 40 0],[528.345 140 0],[528.439 35 0],[528.881 26 -1],[529.579 65 0],[529.726 120 0],[529.844 65 0],[533.681 26 1],[534.15 17 0],[535.108 75 0],[536.665 26 0],[536.964 55 0],[538.918 40 0],[538.999 55 0],[539.66 17 0],[539.709 85 0],[540.402 35 0],[540.961 110 0],[542.626 40 0],[542.915 75 0],[543.673 26 0],[543.832 17 0],[544.664 40 0],[544.834 11 -1],[544.89 30 0],[544.916 21 0],[545.365 35 0],[546.051 55 0],[547.121 75 0],[547.27 35 0],[547.355 40 0],[547.423 85 0],[547.446 30 0],[547.771 120 0],[548.143 110 0],[548.187 75 0],[548.82 85 0],[549.015 150 0],[549.084 26 0],[550.39 110 0],[551.178 40 0],[551.253 340 0],[551.435 270 0],[551.454 320 0],[553.049 26 -1],[556.549 110 0],[557.916 13 -1],[558.298 21 -1],[558.568 30 -1],[559.785 65 -1],[562.928 55 -1],[563.584 17 -1],[564.414 250 0],[564.858 75 0],[566.155 26 -1],[566.216 190 0],[566.291 75 0],[567.342 21 0],[567.544 130 0],[567.994 30 0],[568.947 95 0],[570.268 75 0],[570.823 35 0],[571.188 65 0],[571.392 40 0],[571.513 95 0],[571.648 55 0],[572.048 35 0],[573.951 85 0],[574.002 40 0],[574.122 19 0],[575.284 21 0],[575.686 19 0],[576.227 40 0],[576.635 55 0],[577.405 75 0],[578.078 30 0],[578.598 75 0],[580.426 65 0],[581.496 21 -1],[582.371 40 0],[584.118 21 -1],[585.234 21 -1],[586.646 400 0],[588.031 65 0],[588.868 21 -1],[589.932 230 0],[590.333 55 0],[591.855 120 0],[592.212 150 0],[593.782 75 0],[594.176 120 0],[595.317 300 0],[596.584 200 0],[597.856 270 0],[599.904 340 0],[599.968 65 0],[601.273 21 -1],[606.463 110 0],[608.523 120 0],[609.117 120 0],[609.281 40 0],[609.867 40 0],[612.101 35 0],[612.622 120 0],[613.838 19 0],[614.622 30 0],[614.974 21 0],[616.223 30 -1],[618.615 35 0],[621.528 95 0],[622.049 75 0],[622.141 65 0],[625.81 380 0],[625.87 380 0],[626.11 300 0],[630.375 65 0],[631.224 55 0],[631.803 26 0],[633.61 30 0],[636.635 35 0],[641.91 11 0],[649.769 17 0],[650.814 19 0],[654.628 55 0],[655.423 65 0],[655.483 11 -1],[655.607 75 0],[656.562 19 0],[657.518 14 0],[659.911 35 0],[665.146 18 -1],[666.655 18 0],[666.774 22 -1],[666.839 9 -1],[667.718 18 0],[669.121 22 -1],[671.668 26 0],[672.395 16 -1],[674.312 80 0],[674.552 22 0],[684.464 18 -1],[686.039 18 -1],[686.147 35 0],[687.392 9 0],[691.319 12 0],[693.315 14 0],[694.37 14 0],[699.663 23 0],[700.466 15 0],[700.835 14 0],[701.094 14 0],[703.586 14 0],[703.88 40 0],[705.065 14 0],[705.451 40 -1],[706.911 23 0],[707.205 23 -1],[708.789 45 -1],[712.49 30 -1],[712.561 40 -1],[713.891 26 0],[716.713 26 -1],[717.153 23 -1],[718.989 55 0],[720.364 26 -1],[720.944 260 0],[721.62 60 0],[724.486 130 0],[725.172 130 0],[726.34 19 -1],[726.629 19 0],[726.905 19 -1],[731.556 15 0],[731.839 26 0],[734.472 120 0],[735.216 11 0],[735.774 90 0],[736.411 60 0],[744.06 26 0],[747.494 9 0],[748.961 26 0],[749.612 19 0],[758.055 12 0],[758.962 9 -1],[761.45 15 0],[765.444 23 0],[770.521 11 -1],[387.25 12 2],[388.121 12 2],[389.363 12 2],[389.633 10 2],[391.547 15 2],[392.138 12 2],[392.161 10 2],[392.295 12 2],[392.486 10 2],[406.021 10 2],[411.914 10 2],[421.552 11 2],[426.984 11 2],[429.67 11 2],[434.804 10 2],[443.391 11 2],[454.022 10 2],[454.984 15 2],[455.546 10 2],[457.22 15 2],[464.945 10 2],[465.286 12 2],[487.4 10 2],[495.01 10 2],[497.119 10 2],[508.38 10 2],[514.731 14 2],[522.628 12 2],[524.749 11 2],[527.812 17 2],[527.87 10 2],[529.843 12 2],[530.12 16 2],[530.688 15 2],[539.569 10 2],[553.301 12 2],[581.744 10 2],[661.138 12 2],[662.158 18 2],[662.937 10 2],[664.747 14 2],[666.799 18 2],[667.419 15 2],[670.776 14 2],[672.48 12 2],[673.41 16 2],[686.226 15 2],[687.435 12 2],[689.612 10 2],[701.538 12 2],[707.193 10 2],[707.264 20 2],[708.457 18 2],[712.413 15 2],[717.179 11 2],[717.592 10 2],[721.75 10 2],[722.555 9 2],[727.067 12 2],[731.63 14 2],[731.668 10 2],[737.996 12 2],[740.813 10 2],[745.785 10 2],[750.687 15 2],[750.768 17 2],[752.385 10 2],[754.429 12 2],[756.625 9 2],[413.122 13 3],[413.378 14 3],[439.733 10 3],[440.345 9 3],[461.811 15 3],[539.893 20 3],[547.098 8 3],[549.251 18 3],[551.772 10 3],[587.779 14 3],[588.596 15 3],[589.115 7 3],[623.162 6 3],[624.665 17 3],[624.774 11 3],[629.241 15 3],[691.385 12 3],[697.851 15 3],[749.137 9 3],[749.477 8 3],[765.212 5 3],[770.685 8 3]}{7800}%
+\wl@elt@search{#1}{V}{[380.347 570 0],[380.68 190 0],[380.75 300 0],[380.852 520 0],[380.96 230 0],[381.349 1000 0],[381.784 140 0],[381.824 1300 0],[381.996 230 0],[382.149 230 0],[382.201 570 0],[382.289 450 0],[382.321 300 0],[382.856 1700 0],[383.422 280 0],[383.9 160 0],[383.938 110 0],[384.044 570 0],[384.075 2600 0],[384.189 110 0],[384.444 380 0],[384.733 320 0],[384.932 110 0],[385.537 1200 0],[385.584 3000 0],[386.222 150 0],[386.387 130 0],[386.486 1300 0],[386.76 230 0],[387.108 170 0],[387.508 1500 0],[387.59 420 0],[387.609 570 0],[387.871 130 1],[389.018 700 0],[389.286 460 0],[389.802 280 0],[389.913 140 1],[390.018 140 0],[390.115 140 0],[390.225 2400 0],[390.675 100 0],[390.989 700 0],[391.079 100 0],[391.221 220 0],[391.433 140 1],[391.641 100 1],[392.049 100 0],[392.19 100 0],[392.243 230 0],[392.466 240 0],[392.524 150 0],[392.793 200 0],[393.002 260 0],[393.134 150 0],[393.401 260 0],[393.514 150 0],[393.628 100 0],[394.366 150 0],[395.023 100 0],[395.197 140 1],[397.364 100 1],[399.057 540 0],[399.28 260 0],[399.873 430 0],[400.571 170 1],[402.339 120 1],[403.183 120 0],[403.563 150 1],[404.264 120 0],[405.096 360 0],[405.135 360 0],[405.707 280 0],[405.782 130 0],[406.393 230 0],[407.154 230 0],[409.058 1100 0],[409.241 180 0],[409.269 1800 0],[409.35 120 0],[409.549 890 0],[409.98 2800 0],[410.216 590 0],[410.44 230 0],[410.478 260 0],[410.517 2800 0],[410.822 120 0],[410.979 2300 0],[411.178 8900 0],[411.233 120 0],[411.352 230 0],[411.518 4300 0],[411.647 1800 0],[411.818 180 0],[411.864 180 0],[411.946 230 0],[412.054 180 0],[412.319 180 0],[412.357 2000 0],[412.407 120 0],[412.807 3100 0],[412.886 120 0],[413.202 3100 0],[413.449 2300 0],[415.969 150 0],[417.401 100 0],[417.942 230 0],[418.259 150 0],[418.984 180 0],[419.156 180 0],[420.986 230 0],[422.662 120 0],[423.246 360 0],[423.295 180 0],[423.4 180 0],[423.576 120 0],[425.737 100 0],[425.931 120 0],[426.216 120 0],[426.864 560 0],[427.155 460 0],[427.696 460 0],[428.406 430 0],[429.182 330 0],[429.611 220 0],[429.768 170 0],[429.803 170 0],[430.621 170 0],[430.718 140 0],[430.98 170 0],[433.002 460 0],[433.282 510 0],[434.101 760 0],[435.287 1000 0],[435.498 130 0],[435.594 150 0],[436.804 150 0],[437.323 140 0],[437.53 100 0],[437.924 12000 0],[438.055 100 0],[438.472 7000 0],[438.997 4800 0],[439.523 3600 0],[440.058 1400 0],[440.664 2300 0],[440.764 2800 0],[440.82 3600 0],[440.851 4600 0],[441.214 140 0],[441.647 640 0],[441.994 120 0],[442.157 640 0],[442.6 460 0],[442.731 120 0],[442.852 310 0],[442.98 230 0],[443.614 430 0],[443.784 640 0],[444.168 830 0],[444.421 640 0],[445.201 610 0],[445.748 410 0],[445.776 120 0],[445.976 1000 0],[446.029 2000 0],[446.236 610 0],[446.801 120 0],[446.971 380 0],[447.404 120 0],[447.471 200 0],[448.889 380 0],[449.606 100 0],[450.195 120 0],[452.422 140 0],[454.539 360 0],[454.965 100 0],[456.071 280 0],[457.178 200 0],[457.717 510 0],[457.873 140 0],[458.04 640 0],[458.636 830 0],[459.122 170 0],[459.411 1300 0],[460.615 100 0],[460.965 30 0],[461.174 25 0],[461.977 230 0],[462.441 65 0],[462.648 50 0],[463.518 100 0],[464.007 65 0],[464.074 65 0],[464.64 130 0],[464.889 30 0],[466.614 30 0],[467.049 160 0],[468.445 24 0],[468.692 35 0],[470.616 55 0],[470.657 80 0],[471.056 80 0],[471.412 65 0],[471.589 35 0],[471.769 55 0],[472.151 40 0],[472.286 40 0],[472.953 40 0],[473.038 27 0],[474.263 27 0],[474.663 24 0],[474.852 40 0],[475.098 45 0],[475.156 35 0],[475.393 40 0],[475.748 65 0],[476.663 55 0],[477.636 130 0],[478.651 110 0],[479.692 130 0],[479.977 19 0],[480.753 130 0],[482.745 130 0],[483.164 150 0],[483.243 120 0],[483.302 19 0],[484.881 19 0],[485.148 320 0],[486.261 35 0],[486.474 480 0],[487.126 21 0],[487.548 620 0],[488.056 55 0],[488.156 740 0],[489.16 27 0],[489.421 21 0],[490.062 55 0],[490.429 95 0],[492.565 85 0],[493.203 35 0],[496.612 23 0],[500.233 70 0],[501.462 85 0],[505.163 28 0],[506.412 35 0],[510.514 35 0],[512.853 110 0],[513.842 110 0],[513.953 25 0],[514.872 70 0],[515.935 40 0],[516.994 23 0],[517.677 70 0],[519.201 20 0],[519.299 110 0],[519.362 23 0],[519.483 110 0],[519.536 55 0],[520.661 20 0],[521.659 40 0],[522.577 35 0],[523.375 35 0],[523.407 110 0],[524.02 20 0],[524.087 110 0],[526.098 17 0],[535.341 40 0],[538.343 35 0],[538.514 40 0],[538.83 14 0],[539.787 11 0],[540.193 100 0],[541.526 140 0],[541.809 28 0],[542.408 50 0],[543.418 40 0],[543.766 11 0],[545.812 17 0],[547.133 13 -1],[548.722 25 0],[548.792 85 0],[548.994 25 0],[550.487 28 0],[550.775 70 0],[551.118 14 0],[554.593 23 0],[554.707 70 0],[555.875 35 0],[556.166 28 0],[558.45 140 0],[558.6 23 0],[559.242 100 0],[560.138 28 0],[560.494 70 0],[562.42 13 0],[562.46 200 0],[562.489 70 0],[562.601 55 0],[562.764 400 0],[563.246 13 0],[563.39 10 0],[563.551 13 0],[564.611 85 0],[565.744 110 0],[566.836 110 0],[567.085 310 0],[568.322 20 0],[569.852 1200 0],[570.356 920 0],[570.698 570 0],[570.895 11 0],[571.621 11 0],[572.564 70 0],[572.703 850 0],[572.766 170 0],[573.125 230 0],[573.401 40 0],[573.706 230 0],[574.345 110 0],[574.77 17 0],[574.887 40 0],[575.274 17 0],[576.141 17 0],[577.242 70 0],[577.664 35 0],[578.261 11 0],[578.35 11 0],[578.438 40 0],[578.616 55 0],[578.856 23 0],[580.714 35 0],[581.706 23 0],[581.753 35 0],[583.072 55 0],[584.63 85 0],[585.032 11 0],[592.457 40 0],[597.891 28 0],[598.078 20 0],[600.231 28 0],[600.263 55 0],[601.612 28 0],[602.541 20 0],[603.973 450 0],[605.814 100 0],[606.726 20 0],[608.144 480 0],[609.022 1300 0],[610.698 28 0],[611.167 280 0],[611.952 600 0],[612.834 20 0],[613.538 280 0],[615.015 180 0],[617.036 85 0],[618.935 23 0],[619.919 450 0],[621.387 130 0],[621.637 450 0],[621.831 28 0],[622.45 130 0],[623.074 430 0],[623.32 100 0],[624.013 55 0],[624.281 170 0],[624.31 710 0],[625.182 280 0],[625.69 85 0],[625.857 85 0],[626.122 55 0],[626.632 85 0],[626.882 130 0],[627.465 170 0],[628.233 17 0],[628.516 200 0],[629.283 200 0],[629.649 170 0],[631.15 28 0],[632.466 14 0],[632.684 70 0],[633.909 55 0],[634.948 50 0],[635.558 14 0],[635.73 50 0],[635.882 25 0],[636.127 35 0],[637.936 23 0],[639.328 14 0],[643.047 35 0],[643.163 23 0],[643.318 14 0],[643.516 11 0],[645.234 70 0],[648.805 11 0],[650.417 55 0],[653.143 110 0],[654.351 28 0],[655.802 17 0],[656.588 11 0],[660.597 50 0],[660.783 15 0],[662.354 10 0],[662.485 50 0],[663.326 13 0],[664.379 13 0],[669.366 8 0],[670.807 8 0],[675.3 65 0],[676.012 10 0],[676.649 50 0],[678.498 40 0],[678.632 15 0],[681.24 26 0],[682.994 9 0],[683.244 15 0],[683.958 12 0],[684.19 12 0],[687.088 10 0],[687.156 8 0],[689.4 7 0],[697.45 12 0],[702.607 21 0],[706.369 7 0],[709.208 11 0],[710.258 6 0],[714.815 24 0],[715.136 7 0],[718.208 7 0],[726.429 14 0],[732.144 8 0],[733.892 40 0],[735.654 35 0],[735.866 11 0],[736.139 24 0],[736.249 12 0],[736.316 24 0],[738.595 9 0],[739.349 6 -1],[748.59 12 0],[748.808 12 0],[749.244 12 -1],[757.875 12 0],[759.124 9 0],[759.692 14 0],[759.828 12 0],[762.481 24 0],[770.137 5 0],[770.481 8 0],[471.489 40 2],[659.72 50 2],[498.565 50 3],[513.078 50 3],[526.216 50 3],[535.232 60 3],[594.012 40 3],[420.032 20 4],[493.053 15 4],[535.607 8 4],[662.88 7 4],[759.551 3 4]}{12000}%
+\wl@elt@search{#1}{Cr}{[380.48 530 0],[380.683 110 0],[380.793 110 0],[381.543 180 0],[381.848 70 0],[381.956 180 0],[382.352 70 0],[382.642 130 0],[383.003 130 0],[384.128 380 0],[384.898 190 0],[384.936 140 0],[385.004 290 0],[385.222 140 0],[385.422 190 0],[385.529 110 0],[385.557 140 0],[385.763 260 0],[387.453 70 0],[388.329 660 0],[388.366 50 0],[388.522 570 0],[388.679 380 0],[389.193 60 0],[389.404 260 0],[389.765 40 0],[390.211 35 0],[390.292 360 0],[390.316 60 0],[390.876 960 0],[391.182 120 0],[391.584 120 0],[391.624 190 0],[391.76 35 0],[391.916 1900 0],[392.102 600 0],[392.665 30 0],[392.864 600 0],[394.149 410 0],[395.11 30 0],[395.24 40 0],[395.316 35 0],[396.369 1900 0],[396.906 120 0],[396.975 1600 0],[397.126 85 0],[397.666 1600 0],[397.868 85 0],[397.98 40 0],[398.123 85 0],[398.391 960 0],[398.434 190 0],[398.999 160 0],[399.112 960 0],[399.167 160 0],[399.284 190 0],[399.397 40 0],[400.144 160 0],[401.247 120 1],[401.467 30 0],[402.226 85 0],[402.501 70 0],[402.617 120 0],[402.71 85 0],[403.068 85 0],[403.91 190 0],[404.878 160 0],[405.877 120 0],[406.572 40 0],[406.694 85 0],[407.486 35 0],[407.606 40 0],[407.709 40 0],[407.768 40 0],[410.487 40 0],[410.958 40 0],[412.061 40 0],[412.182 40 0],[412.216 35 0],[412.339 40 0],[412.652 140 0],[412.73 35 0],[412.764 40 0],[413.136 40 0],[415.278 30 0],[415.382 120 0],[416.142 85 0],[416.362 140 0],[416.552 70 0],[416.984 40 0],[417.02 35 0],[417.277 40 0],[417.48 170 0],[417.594 30 0],[417.926 170 0],[418.49 35 0],[418.636 30 0],[419.013 35 0],[419.127 85 0],[419.21 35 0],[419.366 85 0],[419.495 70 0],[419.723 40 0],[419.852 85 0],[420.359 60 0],[420.447 40 0],[420.836 35 0],[420.937 110 0],[420.976 40 0],[421.135 40 0],[421.636 40 0],[421.763 85 0],[422.157 40 0],[422.273 40 0],[423.896 40 0],[424.07 60 0],[425.435 20000 0],[425.55 70 0],[426.135 60 0],[426.314 110 0],[427.106 30 0],[427.291 40 0],[427.48 16000 0],[428.04 85 0],[428.972 10000 0],[429.196 40 0],[429.576 85 0],[429.774 70 0],[430.051 35 0],[430.118 50 0],[430.545 30 0],[431.964 35 0],[432.508 60 0],[433.757 780 0],[433.945 1100 0],[433.972 380 0],[434.013 60 0],[434.451 1900 0],[434.683 70 0],[435.105 380 0],[435.177 2300 0],[435.963 570 0],[436.313 70 0],[437.128 530 0],[437.325 70 0],[437.416 110 0],[437.533 70 0],[438.111 50 0],[438.498 530 0],[438.75 60 0],[439.175 70 0],[440.35 60 0],[441.03 24 0],[441.109 60 0],[441.225 35 0],[441.387 50 0],[442.428 60 0],[442.85 24 0],[443.049 50 0],[443.218 50 0],[445.854 110 0],[445.974 30 0],[446.536 30 0],[448.288 30 0],[448.805 40 0],[448.947 50 0],[449.231 60 0],[449.686 660 0],[449.873 50 0],[450.03 70 0],[450.111 50 0],[450.179 22 0],[450.685 24 0],[451.19 95 0],[451.437 12 0],[451.453 35 0],[452.114 24 0],[452.611 24 0],[452.647 380 0],[452.734 70 0],[452.985 24 0],[453.074 380 0],[453.515 50 0],[453.572 240 0],[453.979 40 0],[454.05 240 0],[454.072 240 0],[454.107 35 0],[454.151 19 0],[454.262 24 0],[454.462 140 0],[454.534 24 0],[454.596 600 0],[455.617 50 0],[455.866 22 1],[456.417 19 0],[456.551 120 0],[456.964 95 0],[457.168 120 0],[457.512 22 0],[458.006 360 0],[458.614 24 0],[459.139 360 0],[459.559 70 0],[460.01 50 0],[460.075 480 0],[460.102 50 0],[461.337 240 0],[461.614 600 0],[461.955 70 0],[462.196 85 0],[462.249 70 0],[462.276 24 0],[462.619 550 0],[463.218 24 0],[463.718 40 0],[463.777 50 0],[463.952 50 0],[464.617 1600 0],[464.681 24 0],[464.813 24 0],[464.887 24 0],[464.946 35 0],[465.128 570 0],[465.216 840 0],[465.474 35 0],[465.619 19 0],[466.333 40 0],[466.383 70 0],[466.48 95 0],[466.59 35 0],[466.622 22 0],[466.651 70 0],[466.934 50 0],[468.054 40 0],[468.087 19 0],[468.937 70 0],[469.395 60 0],[469.515 24 0],[469.706 60 0],[469.846 240 0],[470.061 35 0],[470.804 190 0],[471.843 240 0],[472.31 50 0],[472.442 50 0],[472.715 50 0],[472.972 24 0],[473.071 120 0],[473.735 140 0],[474.531 19 0],[475.208 70 0],[475.611 340 0],[476.429 50 0],[476.663 22 0],[476.786 30 0],[478.932 190 0],[479.251 95 0],[480.103 120 0],[482.938 110 0],[483.686 14 0],[486.12 17 0],[486.184 70 0],[487.08 140 0],[488.578 35 0],[488.596 19 0],[488.701 130 0],[488.853 19 0],[490.324 35 0],[492.227 260 0],[493.633 110 0],[494.25 70 0],[495.481 110 0],[496.493 35 0],[501.332 60 0],[505.19 17 0],[506.591 17 0],[506.771 40 0],[507.292 40 0],[511.075 30 0],[511.313 17 0],[512.346 17 0],[513.965 50 0],[514.467 14 0],[516.623 70 0],[517.743 35 0],[518.459 70 0],[519.2 70 0],[519.349 12 0],[519.644 85 0],[520.019 35 0],[520.452 5300 0],[520.604 8400 0],[520.844 11000 0],[521.413 19 0],[522.175 30 0],[522.494 85 0],[522.689 12 0],[523.897 19 0],[524.34 30 0],[524.756 290 0],[525.492 60 0],[525.513 60 0],[526.175 19 0],[526.415 530 0],[526.516 30 0],[526.572 180 0],[527.201 35 0],[527.344 30 0],[527.517 95 0],[527.569 35 0],[527.603 70 0],[528.029 19 0],[528.719 10 0],[529.669 340 0],[529.736 70 0],[529.827 660 0],[530.075 85 0],[530.421 17 0],[531.288 24 0],[531.878 24 0],[532.834 340 0],[532.917 70 0],[532.972 17 0],[534.044 14 0],[534.476 10 0],[534.581 780 0],[534.832 380 0],[538.698 30 0],[538.757 22 0],[539.039 10 0],[540.061 40 0],[540.5 22 0],[540.979 1400 0],[544.241 12 0],[546.397 19 0],[548.05 19 0],[562.864 24 0],[564.236 7 0],[564.937 12 0],[566.404 24 0],[568.12 7 0],[568.248 7 0],[569.473 24 0],[569.833 40 0],[570.231 24 0],[571.264 12 0],[571.278 24 0],[571.982 7 0],[574.643 7 0],[575.369 7 0],[578.12 12 0],[578.181 6 0],[578.311 24 0],[578.393 30 0],[578.5 24 0],[578.582 19 0],[578.799 60 0],[579.1 180 0],[633.01 35 0],[636.287 22 0],[666.108 19 0],[666.926 11 0],[688.162 5 0],[688.238 10 0],[688.303 21 0],[692.413 27 0],[692.52 17 0],[697.848 30 0],[697.982 11 0],[718.552 7 0],[723.62 6 0],[735.59 85 0],[740.021 130 0],[746.231 150 0]}{20000}%
+\wl@elt@search{#1}{Mn}{[380.055 110 0],[380.191 55 0],[380.672 3200 0],[380.959 700 0],[381.069 55 0],[381.675 90 0],[382.351 2100 0],[382.389 390 0],[382.968 200 0],[383.386 480 0],[383.436 1300 0],[383.978 350 0],[384.108 670 0],[384.398 350 0],[391.832 65 0],[392.647 120 0],[395.284 65 0],[397.589 55 0],[397.708 65 0],[398.258 130 0],[398.524 150 0],[398.683 190 0],[398.71 150 0],[401.81 1500 0],[402.644 150 0],[403.076 27000 0],[403.307 19000 0],[403.449 11000 0],[403.573 1500 0],[403.873 55 0],[404.136 5600 0],[404.513 210 0],[404.876 1100 0],[404.9 80 0],[405.173 55 0],[405.247 65 0],[405.521 150 0],[405.554 1900 0],[405.795 210 0],[405.893 1100 0],[405.939 150 0],[406.174 730 0],[406.353 730 0],[406.508 80 0],[406.8 80 0],[407.028 290 0],[407.924 730 0],[407.942 730 0],[408.294 1100 0],[408.363 1100 0],[408.994 65 0],[410.536 55 0],[411.09 200 0],[413.112 150 0],[413.504 120 0],[414.106 80 0],[414.753 55 0],[414.88 80 0],[417.66 150 0],[418.999 120 0],[420.176 65 0],[421.175 65 0],[423.514 370 0],[423.529 510 0],[423.972 190 0],[425.766 290 0],[426.592 290 0],[428.11 270 0],[428.408 65 0],[431.255 65 0],[432.363 50 1],[437.495 45 0],[438.17 45 0],[441.188 55 0],[441.488 350 0],[441.978 55 0],[443.635 210 0],[445.159 800 0],[445.3 160 0],[445.501 130 0],[445.532 160 0],[445.582 110 0],[445.704 55 0],[445.755 210 0],[445.826 270 0],[446.038 55 0],[446.108 150 0],[446.202 510 0],[446.468 290 0],[447.014 200 0],[447.279 130 0],[447.94 40 0],[449.008 170 0],[449.89 240 0],[450.222 240 0],[460.536 80 0],[462.654 80 0],[467.169 35 0],[470.116 50 0],[470.972 160 0],[472.748 180 0],[473.911 130 0],[475.404 1000 0],[476.153 180 0],[476.238 750 0],[476.586 300 0],[476.643 500 0],[478.342 940 0],[482.352 1000 0],[484.432 25 0],[496.588 35 0],[500.491 19 0],[507.479 30 0],[511.794 60 0],[515.089 50 0],[519.659 50 0],[525.532 85 0],[534.106 160 0],[534.988 19 0],[537.763 95 0],[539.467 95 0],[539.949 50 0],[540.742 95 0],[541.369 35 0],[542.036 85 0],[543.255 35 0],[545.747 12 0],[547.064 60 0],[548.14 40 0],[550.587 30 0],[551.677 50 0],[553.776 40 0],[555.198 21 0],[556.776 8 0],[557.301 7 0],[557.368 8 0],[573.829 7 0],[578.019 7 0],[581.684 7 0],[601.35 140 0],[601.664 200 0],[602.18 290 0],[638.467 7 0],[644.097 17 0],[649.171 24 0],[694.252 14 0],[698.996 12 0],[706.984 14 0],[718.425 12 0],[724.782 10 0],[728.382 24 0],[730.289 35 0],[732.651 50 0],[768.02 12 0],[771.242 10 0],[776.472 10 0],[424.617 100 2],[507.92 200 2],[510.003 150 2],[511.703 100 2],[525.223 100 2],[536.559 100 2],[545.407 150 2],[547.468 200 2],[567.112 100 2],[594.665 200 2],[621.311 100 2],[623.121 200 2],[623.864 100 2],[627.371 100 2]}{27000}%
+\wl@elt@search{#1}{Fe}{[380.5345 200 0],[380.6696 80 0],[381.2964 600 0],[381.3059 60 0],[381.584 1500 0],[382.0425 2500 0],[382.1179 150 0],[382.4306 80 0],[382.4444 2500 0],[382.588 1500 0],[382.7823 1200 0],[383.4222 1000 0],[383.9257 120 0],[384.0437 500 0],[384.1047 800 0],[384.3256 120 0],[384.68 80 0],[384.996 200 0],[385.0817 120 0],[385.6372 2500 0],[385.9212 150 0],[385.9911 10000 0],[386.5523 150 0],[386.7215 60 0],[387.2501 250 0],[387.3761 150 0],[387.8018 250 0],[387.8573 2000 0],[388.6282 4000 0],[388.7048 200 0],[388.8513 300 0],[389.5656 800 0],[389.9707 1200 0],[390.2945 400 0],[390.6479 250 0],[391.6731 80 0],[392.0258 600 0],[392.2911 1200 0],[392.792 1200 0],[393.0296 2000 0],[394.8774 60 0],[394.9953 60 0],[395.1164 50 0],[395.2601 50 0],[395.6454 60 0],[395.668 250 0],[396.6614 60 0],[396.9257 100 0],[397.7741 80 0],[398.1771 40 0],[398.3956 50 0],[399.4114 60 0],[399.7392 200 0],[399.8053 40 0],[400.5241 400 0],[400.9713 60 0],[401.453 80 0],[402.1867 100 0],[404.0638 50 0],[404.5813 4000 0],[406.3594 1500 0],[406.6975 50 0],[406.7977 50 0],[407.1737 1200 0],[407.6629 40 0],[410.0737 40 0],[410.7489 40 0],[411.8544 150 0],[412.7608 40 0],[413.2058 400 0],[413.4676 80 0],[413.6997 40 0],[414.3415 200 0],[414.3869 800 0],[415.3898 40 0],[415.45 50 0],[415.6799 60 0],[417.2744 50 0],[417.4912 60 0],[417.5635 50 0],[417.7593 50 0],[418.1754 120 0],[418.4891 50 0],[418.7038 120 0],[418.7795 120 0],[419.143 80 0],[419.5329 40 0],[419.8304 150 0],[419.9095 40 0],[420.2029 300 0],[420.3984 40 0],[420.6696 80 0],[421.0343 80 0],[421.6183 400 0],[421.936 100 0],[422.2212 50 0],[422.5956 50 0],[422.7423 200 0],[423.317 11 1],[423.3602 100 0],[423.5936 250 0],[423.8809 50 0],[424.7425 50 0],[425.0118 200 0],[425.0787 300 0],[425.8315 40 0],[426.0473 800 0],[427.1153 250 0],[427.1759 1200 0],[428.2402 1200 0],[429.1462 80 0],[429.9234 250 0],[430.7901 1200 0],[431.5084 150 0],[432.5761 1500 0],[435.2734 80 0],[436.9771 80 0],[437.5929 800 0],[438.3544 3000 0],[440.475 1200 0],[441.5122 300 0],[442.7299 600 0],[446.1652 400 0],[446.6551 120 0],[447.6017 80 0],[448.2169 80 0],[448.2252 200 0],[448.9739 50 0],[452.8613 50 0],[458.383 11 1],[464.7433 30 0],[473.6771 30 0],[485.9741 50 0],[487.1317 120 0],[487.2136 60 0],[487.8208 30 0],[489.0754 100 0],[489.1492 250 0],[490.3309 30 0],[491.8992 150 0],[492.0502 500 0],[492.392 12 1],[495.7597 1500 0],[499.05 11 1],[500.1862 80 0],[500.191 18 1],[500.42 11 1],[500.5711 30 0],[500.6117 100 0],[501.2067 60 0],[501.4941 30 0],[501.843 12 1],[503.064 11 1],[503.077 25 0],[503.571 12 1],[504.1755 150 0],[504.9819 30 0],[505.1634 30 0],[507.4748 25 0],[510.073 18 1],[510.095 15 1],[511.0357 150 0],[513.369 40 0],[513.9251 40 0],[513.9462 100 0],[514.436 11 1],[514.946 12 1],[515.191 25 0],[516.227 30 0],[516.6281 80 0],[516.7487 2500 0],[516.8897 80 0],[516.903 12 1],[517.1595 500 0],[519.1454 50 0],[519.2343 80 0],[519.4941 200 0],[520.4582 30 0],[521.5179 25 0],[521.6274 150 0],[521.685 18 1],[522.6862 60 0],[522.715 1000 0],[522.749 13 1],[523.2939 250 0],[524.795 13 1],[525.123 13 1],[526.026 18 1],[526.418 11 1],[526.6555 100 0],[526.9537 1200 0],[527.0357 800 0],[528.1789 30 0],[528.3621 60 0],[530.2299 25 0],[530.618 11 1],[531.623 13 1],[532.4178 150 0],[532.8038 800 0],[532.8531 300 0],[533.2899 100 0],[533.959 14 1],[533.9928 80 0],[534.1023 500 0],[536.487 25 0],[536.747 40 0],[536.996 50 0],[537.1489 400 0],[538.337 60 0],[538.706 14 1],[539.3167 40 0],[539.586 12 1],[539.7127 300 0],[540.206 15 1],[540.412 60 0],[540.5774 250 0],[541.091 30 0],[541.52 60 0],[542.407 60 0],[542.783 30 1],[542.9695 250 0],[542.999 13 1],[543.4523 100 0],[544.6871 200 0],[545.545 25 0],[545.5609 120 0],[546.593 16 1],[546.694 20 1],[548.231 16 1],[549.383 14 1],[549.7516 25 0],[550.1464 20 0],[550.62 18 1],[550.6778 30 0],[551.078 12 1],[552.906 12 1],[554.476 13 1],[556.9618 30 0],[557.2841 60 0],[558.6755 120 0],[561.5644 200 0],[562.4541 20 0],[564.54 12 1],[566.2515 50 0],[576.299 20 0],[578.363 11 1],[586.2353 30 0],[588.502 13 1],[590.282 16 1],[591.4114 30 0],[595.57 14 1],[598.6956 30 0],[596.171 18 1],[596.24 30 1],[596.563 13 1],[606.5482 40 0],[610.2159 30 0],[613.6614 40 0],[613.7694 40 0],[614.773 30 1],[614.924 20 1],[617.516 15 1],[619.1558 40 0],[621.3429 30 0],[621.9279 30 0],[623.0726 40 0],[623.837 20 1],[624.6317 20 0],[624.756 80 1],[625.2554 30 0],[630.532 15 1],[633.197 12 1],[638.375 15 1],[639.3602 20 0],[639.9999 30 0],[641.1647 20 0],[641.69 20 1],[642.1349 20 0],[643.0844 30 0],[644.643 20 1],[645.638 200 1],[649.4981 60 0],[651.605 20 1],[654.6239 20 0],[659.2913 20 0],[667.7989 40 0],[685.518 15 0],[694.521 15 0],[706.744 20 1],[713.094 15 0],[716.4443 25 0],[718.7313 80 0],[720.7381 30 0],[722.451 12 1],[730.797 50 1],[732.07 40 1],[737.646 20 1],[744.5746 30 0],[746.238 20 1],[749.5059 40 0],[751.1045 60 0],[758.604 15 0],[771.171 15 1],[778.059 30 0],[395.433 16 2],[396.872 11 2],[396.949 9 2],[397.942 10 2],[403.542 10 2],[405.311 11 2],[408.1 12 2],[412.09 10 2],[412.202 11 2],[412.278 11 2],[413.776 15 2],[413.935 13 2],[414.048 9 2],[415.496 9 2],[416.473 18 2],[416.492 9 2],[416.684 13 2],[417.426 13 2],[421.067 9 2],[422.227 11 2],[423.556 13 2],[423.862 9 2],[424.375 12 2],[427.34 12 2],[427.972 12 2],[428.616 14 2],[429.685 16 2],[430.478 18 2],[431.036 20 2],[432.368 9 2],[437.204 9 2],[437.214 9 2],[437.231 11 2],[437.253 14 2],[437.281 18 2],[439.576 9 2],[441.96 12 2],[443.102 9 2],[511.107 9 2],[512.735 9 2],[515.612 12 2],[519.908 10 2],[523.566 10 2],[524.331 18 2],[526.034 13 2],[527.237 9 2],[527.298 14 2],[527.648 15 2],[528.23 16 2],[528.483 12 2],[529.812 11 2],[529.993 12 2],[530.26 14 2],[530.676 10 2],[531.088 9 2],[532.274 10 2],[534.688 11 2],[535.377 12 2],[536.376 12 2],[536.806 10 2],[537.547 11 2],[571.988 11 2],[574.419 9 2],[575.638 10 2],[583.393 18 2],[584.876 9 2],[585.462 10 2],[587.626 9 2],[589.191 15 2],[589.868 9 2],[591.896 9 2],[592.013 10 2],[592.969 18 2],[595.231 10 2],[595.362 14 2],[596.848 9 2],[597.932 12 2],[598.101 9 2],[598.908 12 2],[599.954 18 2],[603.102 9 2],[603.259 16 2],[603.656 13 2],[604.872 11 2],[605.418 11 2],[605.636 9 2],[614.999 9 2],[616.974 9 2],[618.526 9 2],[618.656 7 2],[619.479 7 2],[619.543 6 2],[620.137 6 2],[620.304 5 2],[625.981 5 2],[629.45 6 2],[635.781 5 2],[731.763 5 2],[732.014 6 2]}{10000}%
+\wl@elt@search{#1}{Co}{[384.205 1400 0],[384.547 6900 0],[387.312 5500 0],[387.396 2800 0],[389.408 7900 0],[391.14 20 1],[393.597 1500 0],[396.31 80 1],[397.674 40 1],[398.302 10 1],[399.531 6000 0],[399.791 970 0],[402.09 350 0],[403.614 10 1],[403.737 20 1],[404.002 4 1],[404.539 370 0],[405.023 5 1],[405.24 10 1],[406.273 20 1],[406.45 2 1],[406.637 350 0],[407.434 5 1],[409.239 830 0],[409.657 1 1],[411.054 550 0],[411.877 2800 0],[412.132 4400 0],[413.088 3 1],[414.513 3 1],[416.067 3 1],[418.113 1 1],[419.071 90 0],[420.861 1 1],[424.425 30 1],[427.233 8 1],[428.825 20 1],[432.886 3 1],[438.426 2 1],[439.694 2 1],[441.391 3 1],[446.956 90 0],[448.25 10 1],[448.912 2 1],[449.744 4 1],[450.054 10 1],[453.096 690 0],[453.322 2 1],[454.966 90 0],[455.929 1 1],[456.559 140 0],[456.926 1 1],[458.16 190 0],[461.63 5 1],[462.938 120 0],[466.066 25 1],[466.341 85 0],[479.286 110 0],[483.116 10 1],[484.027 100 0],[486.788 150 0],[496.418 80 1],[497.005 10 1],[499.047 10 1],[499.598 20 1],[514.674 35 0],[521.271 50 0],[523.022 50 0],[523.521 45 0],[524.793 50 0],[526.63 26 0],[526.649 45 0],[526.852 26 0],[528.065 45 0],[530.106 26 0],[534.271 50 0],[534.339 26 0],[535.205 50 0],[535.348 26 0],[536.958 35 0],[548.334 45 0],[553.077 17 0],[564.722 17 0],[599.188 17 0],[608.244 17 0],[628.263 17 0],[645.024 45 0],[645.5 21 0],[656.342 15 0],[663.244 15 0],[681.494 14 0],[687.24 14 0],[705.289 21 0],[708.499 45 0],[741.738 8 0],[771.268 8 0]}{7900}%
+\wl@elt@search{#1}{Ni}{[380.714 700 0],[383.169 110 0],[385.83 1200 0],[388.967 30 0],[397.217 35 0],[397.356 110 0],[440.155 110 0],[445.904 85 0],[446.246 18 0],[447.048 55 0],[459.253 35 0],[460.037 18 0],[460.5 65 0],[460.623 18 0],[464.866 75 0],[468.622 23 0],[471.442 110 0],[471.578 22 0],[475.652 30 0],[476.395 15 0],[478.654 45 0],[480.7 22 0],[482.903 22 0],[483.118 19 0],[485.541 45 0],[486.627 30 0],[487.344 17 0],[490.441 40 0],[491.836 22 0],[493.583 16 0],[498.016 45 0],[498.413 45 0],[499.202 500 1],[500.034 16 0],[501.246 18 0],[501.759 50 0],[503.537 100 0],[504.885 16 0],[508.052 100 0],[508.111 65 0],[508.408 26 0],[509.932 18 0],[509.995 26 0],[511.54 21 0],[512.938 18 0],[513.708 23 0],[514.277 23 0],[514.648 40 0],[515.576 40 0],[516.866 16 0],[517.656 13 0],[543.587 8 0],[547.691 180 0],[551 6 0],[557.873 6 0],[558.786 9 0],[559.228 13 0],[561.479 9 0],[562.533 5 0],[564.97 4 0],[566.402 5 0],[568.22 12 0],[569.5 8 0],[570.956 23 0],[571.19 10 0],[571.509 10 0],[575.468 16 0],[576.085 8 0],[585.776 10 0],[589.288 10 0],[610.812 10 0],[617.681 10 0],[619.118 10 0],[625.636 13 0],[631.466 10 0],[664.364 16 0],[676.777 22 0],[677.232 9 0],[691.456 10 0],[711.09 5 0],[712.22 26 0],[718.2 6 0],[719.702 5 0],[726.193 5 0],[729.145 5 0],[738.524 4 0],[739.36 16 0],[740.935 16 0],[741.451 5 0],[742.228 23 0],[752.276 13 0],[752.512 9 0],[755.56 19 0],[757.405 8 0],[761.7 23 0],[761.921 9 0],[771.432 16 0],[771.558 5 0],[772.761 19 0],[774.889 19 0],[778.894 10 0],[779.759 13 0]}{1200}%
+\wl@elt@search{#1}{Cu}{[381.8879 100 1],[382.6921 140 1],[386.4137 160 1],[388.4131 280 1],[389.2924 150 1],[390.3177 170 1],[392.0654 140 1],[393.3268 120 1],[398.7024 120 1],[399.3302 150 1],[400.3476 140 1],[402.263 1250 0],[403.2647 100 1],[404.3484 600 1],[404.3751 500 1],[406.264 2000 0],[406.8106 120 1],[413.1363 500 1],[414.3017 200 1],[415.3623 300 1],[416.114 500 1],[416.4284 370 1],[417.1851 400 1],[417.9512 500 1],[421.1866 500 1],[423.0449 320 1],[425.5635 200 1],[427.511 950 0],[427.9962 300 1],[429.247 500 1],[436.537 400 1],[444.4831 100 1],[450.6002 400 1],[451.6049 150 1],[454.1032 150 1],[455.592 500 1],[459.6906 100 1],[464.9271 120 1],[465.112 2000 0],[466.1363 120 1],[467.1702 320 1],[467.3577 300 1],[468.1994 450 1],[475.8433 100 1],[481.2948 400 1],[485.1262 120 1],[485.4988 300 1],[487.3304 100 1],[490.1427 150 1],[490.9734 1000 1],[491.8376 500 1],[492.6424 200 1],[493.1698 900 1],[494.3026 120 1],[495.3724 700 1],[498.5506 500 1],[500.6801 400 1],[500.9851 350 1],[501.262 400 1],[502.1279 350 1],[503.9016 200 1],[504.7348 300 1],[505.1793 900 1],[505.891 400 1],[506.5459 500 1],[506.7094 450 1],[507.2302 350 1],[508.8277 450 1],[509.3816 420 1],[510.0067 350 1],[510.554 1500 0],[512.4476 250 1],[515.324 2000 0],[515.8093 100 1],[518.3367 100 1],[521.82 2500 0],[526.9991 100 1],[527.6525 100 1],[529.252 1650 0],[536.8383 100 1],[570.024 1500 0],[578.213 1500 0],[580.5989 150 1],[583.3515 100 1],[589.7971 200 1],[593.7577 120 1],[594.1196 400 1],[599.326 100 1],[600.012 650 1],[602.3264 100 1],[607.2218 250 1],[608.0343 150 1],[609.999 150 1],[610.7412 160 1],[611.4493 300 1],[615.0384 600 1],[615.4222 750 1],[617.2037 500 1],[618.6884 550 1],[618.8676 400 1],[619.8092 300 1],[620.4261 470 1],[620.8457 450 1],[621.6939 750 1],[621.9844 700 1],[626.1848 500 1],[627.3349 1000 1],[628.8696 350 1],[630.1009 900 1],[630.5972 550 1],[631.2492 400 1],[632.6466 120 1],[637.3268 400 1],[637.784 750 1],[640.3384 400 1],[642.3884 850 1],[644.2965 200 1],[644.8559 750 1],[646.6246 170 1],[647.0168 950 1],[648.1437 750 1],[648.4421 400 1],[651.7317 220 1],[653.0083 400 1],[655.1286 120 1],[657.708 200 1],[662.4292 750 1],[664.1396 800 1],[666.0962 450 1],[677.0362 100 1],[680.6216 300 1],[680.9647 400 1],[682.3202 320 1],[684.4157 250 1],[686.8791 320 1],[687.2231 270 1],[687.9404 270 1],[693.7553 220 1],[695.2871 150 1],[697.7572 150 1],[702.286 200 1],[719.4896 300 1],[732.6008 400 1],[733.1694 300 1],[738.2277 250 1],[740.4354 1000 1],[743.4156 270 1],[756.2015 500 1],[765.2333 700 1],[766.4648 1000 1],[768.1788 150 1],[774.4097 450 1],[777.8738 800 1],[380.413 600 2],[380.918 600 2],[388.168 300 2],[395.381 150 2],[409.049 100 2],[428.34 200 2],[435.197 500 2],[435.28 1000 2],[435.524 500 2],[437.084 500 2],[437.14 500 2],[437.343 500 2],[437.711 1000 2],[438.642 200 2],[492.741 150 2],[509.428 400 2],[516.897 200 2],[520.834 400 2],[521.921 600 2],[526.859 200 2],[531.778 400 2],[536.979 300 2],[541.848 350 2],[549.494 250 2],[557.394 50 2],[560.9 100 2],[570.212 75 2],[576.856 100 2],[585.072 100 2],[596.525 200 2],[610.087 30 2],[636.927 50 2],[651.254 20 2],[664.413 20 2],[679.32 50 2]}{2500}%
+\wl@elt@search{#1}{Zn}{[380.634 50 1],[384.029 100 1],[388.334 50 0],[396.543 15 0],[411.321 10 0],[429.288 25 0],[429.833 25 0],[462.981 35 0],[468.014 300 0],[472.215 400 0],[481.053 400 0],[491.162 800 1],[492.403 500 1],[506.866 7 0],[506.958 15 0],[518.198 200 0],[530.865 8 0],[531.024 7 0],[531.102 7 0],[577.21 4 0],[577.55 4 0],[577.711 10 0],[589.433 500 1],[602.118 500 1],[610.249 500 1],[611.153 100 1],[621.461 500 1],[623.79 8 0],[623.917 8 0],[636.234 1000 0],[647.918 10 0],[692.832 15 0],[693.847 8 0],[694.32 3 0],[747.88 200 1],[758.85 300 1],[761.29 100 1],[773.25 300 1],[775.79 200 1],[779.936 10 0]}{1000}%
+\wl@elt@search{#1}{Ga}{[392.439 9 1],[403.299 10 0],[417.204 10 0],[425.111 4 1],[425.116 15 1],[425.404 10 1],[425.564 4 1],[425.57 5 1],[425.577 10 1],[426.2 40 1],[521.821 3 1],[533.83 1 1],[535.349 2 0],[536.06 2 1],[536.35 1 1],[541.68 3 1],[542.16 1 1],[542.56 1 1],[633.42 10 1],[639.656 2000 0],[641.344 1000 0],[641.94 5 1],[645.63 3 1],[700 1 1],[705.124 3 0],[710.682 5 0],[711.63 1 0],[717.29 2 0],[719.36 5 0],[719.87 7 1],[725.14 10 0],[728.96 3 0],[734.93 5 0],[740.3 20 0],[746.4 30 0],[755.66 6 0],[762.05 10 0],[773.477 50 0],[779.3 2 1],[380.66 10 2],[438.069 100 2],[438.176 150 2],[486.3 100 2],[499.378 150 2],[580.828 10 2],[584.825 20 2],[599.351 15 2]}{2000}%
+\wl@elt@search{#1}{Ge}{[384.511 30 1],[422.6562 70 0],[468.5829 10 0],[468.987 75 1],[469.002 50 1],[474.1806 1000 1],[481.4608 1000 1],[482.4097 50 1],[513.1752 100 1],[517.8648 200 1],[519.4583 3 0],[526.5892 6 0],[551.3263 6 0],[556.4741 8 0],[560.701 8 0],[561.6135 6 0],[562.1426 7 0],[565.596 8 0],[566.4226 6 0],[566.4842 5 0],[569.1954 9 0],[570.1776 6 0],[571.7877 5 0],[580.1029 6 0],[580.2093 9 0],[589.3389 1000 1],[602.1041 500 1],[607.839 150 1],[626.714 50 1],[626.807 150 1],[626.834 100 1],[628.3452 75 1],[633.6377 100 1],[648.4181 100 1],[655.7488 6 0],[678.051 50 1],[704.9369 50 1],[713.012 6 0],[714.539 30 1],[733.038 7 0],[735.3334 5 0],[738.4208 7 0],[740.264 6 0],[751.157 7 0],[777.62 5 0],[388.478 15 2],[417.896 200 2],[424.541 12 2],[426.085 200 2],[429.171 150 2],[467.436 10 2],[501.688 10 2],[513.475 18 2],[522.937 5 2],[525.661 3 2]}{1000}%
+\wl@elt@search{#1}{As}{[384.26 340 1],[419.0082 715 1],[419.74 615 1],[424.2982 615 1],[431.5657 500 1],[432.3867 500 1],[433.664 500 1],[435.2145 500 1],[435.2864 425 1],[437.117 375 1],[442.7106 615 1],[443.1562 615 1],[445.8469 715 1],[446.1075 340 1],[446.6348 715 1],[447.446 500 1],[449.423 800 1],[450.7659 850 1],[453.974 615 1],[454.3483 715 1],[460.2427 615 1],[462.9787 340 1],[470.7586 340 1],[473.067 340 1],[488.8557 340 1],[506.898 100 0],[510.558 340 1],[510.755 500 1],[512.134 100 0],[514.163 100 0],[523.138 425 1],[533.123 500 1],[540.813 100 0],[545.132 135 0],[549.7727 340 1],[555.809 425 1],[565.132 425 1],[611.007 425 1],[617.027 500 1],[651.174 300 1],[709.227 300 1],[710.272 300 1],[392.26 325 2],[403.72 185 2]}{850}%
+\wl@elt@search{#1}{Se}{[407.02 285 1],[417.53 360 1],[418.09 450 1],[432.87 120 0],[433.03 100 0],[438.29 285 1],[444.6 285 1],[444.92 220 1],[446.76 285 1],[473.08 500 0],[473.9 400 0],[474.22 300 0],[484.06 285 1],[484.5 360 1],[522.75 450 1],[530.54 360 1],[536.55 100 0],[536.99 120 0],[537.41 110 0],[552.24 285 1],[556.69 285 1],[586.63 285 1],[605.6 450 1],[632.56 200 0],[644.42 360 1],[649.05 285 1],[653.5 285 1],[683.13 150 0],[699.069 120 0],[699.1792 100 0],[701.0809 200 0],[701.3875 150 0],[706.2065 300 0],[757.51 200 0],[758.34 250 0],[759.22 150 0],[760.68 120 0],[380.09 450 2],[404.67 360 2],[408.32 220 2],[416.91 450 2],[463.79 220 2],[630.38 285 2]}{500}%
+\wl@elt@search{#1}{Br}{[381.565 1200 0],[383.469 350 1],[387.121 300 1],[389.163 400 1],[390.124 300 1],[391.42 300 1],[391.438 500 1],[391.951 350 1],[392.409 400 1],[392.955 300 1],[393.969 350 1],[395.061 350 1],[398.038 500 1],[399.236 1500 0],[402.404 300 1],[413.566 300 1],[414.02 300 1],[417.963 400 1],[419.345 300 1],[422.389 1000 1],[423.689 300 1],[429.139 300 1],[436.514 2000 0],[436.56 1000 1],[442.514 1500 0],[444.174 10000 0],[447.261 10000 0],[447.772 20000 0],[449.042 1000 0],[451.344 3000 0],[452.559 15000 0],[452.96 300 1],[454.292 500 1],[457.574 3000 0],[460.136 300 1],[461.458 2500 0],[462.27 350 1],[464.202 300 1],[465.198 300 1],[467.87 500 1],[469.317 400 1],[470.485 500 1],[471.976 350 1],[472.036 400 1],[472.82 300 1],[473.541 300 1],[474.264 400 1],[475.228 2500 0],[476.6 350 1],[477.94 400 1],[478.031 4000 0],[478.519 1600 0],[478.55 500 1],[480.233 300 1],[481.67 500 1],[481.846 300 1],[484.481 350 1],[484.875 350 1],[492.112 400 1],[492.879 400 1],[493.066 450 1],[494.551 300 1],[497.976 4000 0],[503.874 300 1],[505.464 300 1],[516.438 400 1],[518.001 300 1],[518.235 500 1],[519.39 300 1],[523.823 500 1],[527.268 300 1],[530.41 350 1],[533.057 400 1],[533.205 500 1],[539.548 1200 0],[542.278 400 1],[542.499 350 1],[543.507 300 1],[546.622 1200 0],[547.847 350 1],[548.879 300 1],[549.506 300 1],[550.669 500 1],[558.994 350 1],[571.871 300 1],[583.078 300 1],[585.208 1800 0],[594.048 1600 0],[612.214 2400 0],[614.86 40000 0],[616.174 300 1],[617.739 2000 0],[633.548 1500 0],[635.073 60000 0],[635.294 400 1],[641.032 2500 0],[648.356 1800 0],[651.462 1000 0],[654.457 20000 0],[654.809 1500 0],[655.98 50000 0],[657.131 1000 0],[657.914 1800 0],[658.217 20000 0],[662.047 1500 0],[663.162 50000 0],[668.228 20000 0],[669.213 10000 0],[672.828 8000 0],[676.006 2000 0],[677.948 2000 0],[678.674 2200 0],[679.004 6500 0],[679.148 1600 0],[686.115 1800 0],[700.519 10000 0],[726.045 2000 0],[734.851 10000 0],[751.296 40000 0],[759.161 1600 0],[759.507 1800 0],[761.641 2000 0],[382.026 450 2],[390.395 200 2],[450.655 350 2],[451.974 200 2],[517.587 150 2],[544.68 100 2],[719.28 100 2],[767.31 100 2]}{60000}%
+\wl@elt@search{#1}{Kr}{[387.544 150 1],[390.6177 150 1],[392.0081 200 1],[399.484 100 1],[399.7793 100 1],[405.7037 300 1],[406.5128 300 1],[408.8337 500 1],[409.8729 250 1],[410.9248 100 1],[414.5122 250 1],[425.058 150 1],[427.3969 1000 0],[428.2967 100 0],[429.2923 600 1],[430.049 200 1],[431.781 500 1],[431.8551 400 0],[431.9579 1000 0],[432.298 150 1],[435.1359 100 0],[435.5477 3000 1],[436.2641 500 0],[436.969 200 1],[437.6121 800 0],[438.654 300 1],[439.9965 200 0],[442.5189 100 0],[443.1685 500 1],[443.6812 600 1],[445.3917 600 0],[446.3689 800 0],[447.5014 800 1],[448.988 400 1],[450.2353 600 0],[452.314 400 1],[455.661 200 1],[457.7209 800 1],[458.2978 300 1],[459.28 150 1],[461.5292 500 1],[461.9166 1000 1],[463.3885 800 1],[465.8876 2000 1],[468.0406 500 1],[469.1301 100 1],[469.436 200 1],[473.9002 3000 1],[476.2435 300 1],[476.5744 1000 1],[481.176 300 1],[482.518 300 1],[483.2077 800 1],[484.6612 700 1],[485.72 150 1],[494.559 300 1],[502.24 200 1],[508.652 250 1],[512.573 400 1],[520.832 500 1],[530.866 200 1],[533.341 500 1],[546.817 200 1],[556.2224 500 0],[557.0288 2000 0],[558.0386 80 0],[564.9561 100 0],[568.189 400 1],[569.035 200 1],[583.2855 100 0],[587.0914 3000 0],[599.222 200 1],[599.3849 60 0],[605.6125 60 0],[642.018 300 1],[642.1026 100 0],[645.6288 200 0],[657.007 150 1],[669.9228 60 0],[690.4678 100 0],[721.313 250 1],[722.4104 100 0],[728.7258 80 0],[728.978 400 1],[740.702 400 1],[742.5541 60 0],[743.578 200 1],[748.6862 100 0],[752.446 300 1],[758.7411 1000 0],[760.1544 2000 0],[764.116 150 1],[768.5244 1000 0],[769.4538 1200 0],[773.569 250 1],[774.6827 150 0],[386.87 40 2],[406.737 50 2],[413.133 40 2],[415.446 40 2],[501.645 20 2],[550.143 10 2],[603.717 10 2],[607.838 10 2],[631.022 10 2],[380.93 3 3],[386.058 5 3],[393.429 5 3]}{3000}%
+\wl@elt@search{#1}{Rb}{[380.19 2500 1],[382.666 1000 1],[386.074 450 1],[390.729 250 1],[392.22 500 1],[392.644 2500 1],[394.051 25000 1],[397.815 1000 1],[402.949 1700 1],[408.388 2500 1],[410.428 2000 1],[413.611 1700 1],[419.308 3500 1],[420.18 1000 0],[421.553 500 0],[424.44 90000 1],[426.658 500 1],[427.025 250 1],[427.314 15000 1],[428.797 2500 1],[429.397 1500 1],[430.626 500 1],[434.696 1000 1],[437.712 2500 1],[444.01 300 1],[446.947 1000 1],[449.392 400 1],[451.904 700 1],[453.034 3000 1],[453.379 500 1],[454.074 400 1],[457.177 20000 1],[462.242 3000 1],[463.189 350 1],[464.857 10000 1],[465.928 500 1],[473.045 1000 1],[475.53 1000 1],[475.782 400 1],[477.595 30000 1],[478.283 5000 1],[485.534 300 1],[488.559 1500 1],[508.7987 2 0],[513.2471 2 0],[515.0134 10 0],[515.208 10000 1],[516.458 300 1],[516.5023 1 0],[516.5142 2 0],[516.965 1 0],[519.5278 15 0],[523.3968 2 0],[526.0034 20 0],[526.0228 1 0],[527.051 200 1],[532.238 3 0],[536.2601 40 0],[539.0568 4 0],[543.1532 75 0],[543.183 3 0],[551.255 500 1],[552.278 5000 1],[557.8788 6 0],[563.599 5000 1],[564.7774 40 0],[565.375 20 0],[569.915 3000 1],[572.4121 60 0],[572.4614 3 0],[573.964 200 1],[607.0755 75 0],[613.527 200 1],[615.9626 30 0],[619.908 1000 1],[620.6309 75 0],[626.94 300 1],[629.8325 120 0],[629.9224 5 0],[645.833 10000 1],[655.562 1000 1],[656.081 5000 1],[677.507 3000 1],[727.9997 100 0],[731.652 300 1],[740.8173 150 0],[761.8933 200 0],[775.7651 300 0],[775.9436 60 0]}{90000}%
+\wl@elt@search{#1}{Sr}{[394.08 300 0],[396.926 600 0],[397.004 300 0],[403.038 1300 0],[403.238 300 0],[407.771 46000 1],[416.18 200 1],[421.552 32000 1],[430.545 340 1],[443.804 350 0],[460.733 65000 0],[472.228 3200 0],[474.192 2200 0],[478.432 1400 0],[481.188 4800 0],[483.208 3600 0],[485.504 500 0],[486.87 600 0],[487.249 3000 0],[487.606 600 0],[487.632 2000 0],[489.198 1000 0],[496.226 8000 0],[496.794 1300 0],[515.607 800 0],[522.22 1400 0],[522.511 2000 0],[522.927 2000 0],[523.855 2800 0],[525.69 4800 0],[532.982 350 0],[545.084 1500 0],[548.084 7000 0],[548.612 1100 0],[550.417 3500 0],[552.183 2600 0],[553.481 2000 0],[554.005 2000 0],[554.336 250 0],[597.01 200 0],[634.575 250 0],[636.394 250 0],[636.996 350 0],[638.075 1000 0],[638.65 900 0],[638.824 600 0],[640.847 9000 0],[644.668 250 0],[646.579 250 0],[650.4 5500 0],[654.679 1000 0],[655.026 1700 0],[661.726 3000 0],[664.354 800 0],[679.105 1800 0],[687.838 4800 0],[689.259 1200 0],[707.01 5500 0],[715.309 60 0],[716.724 250 0],[723.227 200 0],[730.941 2500 0],[762.15 500 0],[767.306 400 0],[387.426 30 2],[393.64 30 2],[393.672 30 2],[395.875 30 2],[409.403 30 2],[409.702 30 2],[410.563 30 2],[433.58 35 2],[507.109 30 2],[513.034 30 2],[515.826 35 2],[525.771 40 2],[526.221 30 2],[528.832 30 2],[539.103 30 2],[544.348 40 2],[546.39 30 2],[566.466 30 2],[568.972 30 2],[429.857 9 3],[468.508 9 3]}{65000}%
+\wl@elt@search{#1}{Y}{[381.835 1300 1],[383.288 4000 1],[384.787 70 1],[387.682 80 0],[387.828 480 1],[388.777 30 0],[390.459 60 0],[391.825 50 0],[393.011 60 0],[393.066 240 1],[395.036 4400 1],[395.16 150 1],[395.509 60 0],[398.26 3600 1],[398.75 40 0],[403.983 940 0],[404.764 2400 0],[407.738 9400 0],[408.122 90 0],[408.371 2000 0],[410.238 9900 0],[410.639 60 0],[411.081 80 0],[412.492 320 1],[412.831 8900 0],[414.285 7500 0],[415.763 100 0],[416.752 2400 0],[417.414 2000 0],[417.754 8000 1],[419.928 120 1],[420.47 380 1],[421.302 80 0],[421.354 40 0],[421.78 160 0],[422.063 280 0],[422.425 80 0],[423.573 600 1],[423.594 2200 0],[425.12 300 0],[430.23 360 0],[430.963 2800 1],[431.63 50 0],[433.078 110 0],[433.729 30 0],[434.465 60 0],[434.879 440 0],[435.233 60 0],[435.27 60 0],[435.773 120 0],[435.873 800 1],[436.603 120 0],[437.494 12000 1],[437.561 150 0],[437.933 80 0],[438.548 30 0],[438.774 100 0],[439.401 30 0],[439.467 30 0],[439.802 1800 1],[442.259 890 1],[443.734 80 0],[444.366 100 0],[444.663 130 0],[446.527 20 0],[447.389 40 0],[447.572 170 0],[447.696 180 0],[447.745 160 0],[448.728 110 0],[448.747 300 0],[449.175 30 0],[449.242 25 0],[450.595 500 0],[451.358 50 0],[451.401 80 0],[452.205 40 0],[452.725 890 0],[452.78 440 0],[454.432 100 0],[455.937 100 0],[456.439 30 0],[457.356 60 0],[458.132 35 0],[458.177 30 0],[459.655 130 0],[460.48 95 0],[461.3 40 0],[464.37 2000 0],[465.832 200 0],[465.889 70 0],[466.747 85 0],[467.082 60 0],[467.484 2000 0],[467.835 60 0],[468.232 260 1],[468.977 85 0],[469.681 180 0],[470.885 35 0],[472.585 60 0],[472.853 170 0],[473.237 60 0],[474.14 85 0],[475.279 160 0],[476.098 410 0],[478.018 17 0],[478.104 120 0],[478.658 160 1],[478.689 170 0],[479.93 180 0],[480.431 50 0],[480.481 70 0],[481.738 85 -1],[481.82 140 -1],[481.964 140 0],[482.213 120 0],[482.331 190 1],[483.915 60 0],[483.987 770 0],[484.568 550 0],[485.269 410 0],[485.425 120 0],[485.487 890 1],[485.67 50 0],[485.984 330 0],[487.965 50 0],[488.369 1900 1],[488.628 50 0],[488.665 40 0],[489.344 95 0],[490.012 1100 1],[490.611 100 0],[490.9 45 0],[492.187 150 0],[493.093 35 0],[495.066 45 0],[497.43 120 0],[498.213 120 1],[500.697 100 0],[507.021 75 0],[507.219 75 0],[508.742 1100 1],[508.818 30 0],[511.911 210 1],[512.321 450 1],[513.52 180 0],[519.643 120 1],[520.041 960 1],[520.572 1500 1],[524.081 180 0],[528.982 60 1],[532.078 45 1],[538.062 75 0],[540.278 220 1],[541.703 24 0],[542.437 90 0],[543.824 190 0],[546.646 710 0],[546.847 100 0],[547.339 90 1],[548.074 90 1],[549.317 60 0],[549.559 35 0],[549.741 240 1],[550.345 300 0],[550.99 250 1],[551.364 60 0],[552.163 120 0],[552.676 24 0],[552.754 740 0],[554.163 35 0],[554.45 120 0],[554.602 90 1],[555.643 75 0],[556.775 60 0],[557.742 180 0],[558.108 24 0],[558.187 620 0],[559.096 21 0],[559.412 21 0],[560.633 120 0],[562.391 15 0],[563.013 560 0],[563.225 24 0],[563.289 21 0],[564.469 120 0],[564.847 120 0],[566.294 740 1],[567.527 90 0],[569.363 18 0],[570.673 160 0],[572.061 24 0],[572.889 75 1],[573.012 150 -1],[573.209 21 0],[574.385 90 0],[574.693 18 -1],[576.422 24 -1],[576.564 75 0],[577.395 35 0],[578.169 100 1],[580 15 -1],[581.858 15 -1],[582.187 30 0],[583.227 21 0],[583.807 9 -1],[585.883 15 -1],[587.183 15 0],[587.614 24 -1],[587.996 24 0],[589.394 24 -1],[590.296 35 0],[591.219 24 -1],[593.11 24 -1],[593.908 90 -1],[594.572 45 0],[595.002 24 0],[595.641 75 -1],[597.204 1300 -1],[598.186 50 0],[598.764 1000 -1],[600.36 740 -1],[600.465 120 -1],[600.919 120 0],[601.987 620 -1],[602.341 120 0],[603.66 500 -1],[605.381 420 -1],[607.278 130 -1],[608.8 50 0],[608.935 210 -1],[609.678 160 -1],[610.782 130 -1],[611.473 130 -1],[612.738 75 -1],[613.206 1400 -1],[613.504 120 0],[613.843 150 0],[614.836 1100 -1],[615.172 120 -1],[616.508 820 -1],[618.223 560 -1],[619.173 1200 0],[619.982 590 -1],[621.796 450 -1],[622.259 300 0],[623.672 270 -1],[625.105 45 0],[627.501 120 -1],[629.546 60 -1],[631.62 24 -1],[633.81 24 -1],[635.948 15 -1],[636.987 15 -1],[640.201 75 0],[643.5 1000 0],[643.718 24 0],[650.123 18 -1],[651.833 18 -1],[653.584 18 -1],[653.86 90 0],[655.384 12 -1],[655.739 70 0],[657.258 12 -1],[657.685 35 0],[658.487 23 0],[661.375 95 1],[662.249 14 0],[663.649 19 0],[665.061 40 0],[666.44 21 0],[668.758 150 0],[669.183 14 0],[669.475 7 0],[669.926 16 0],[670.071 70 0],[671.32 35 0],[673.599 40 0],[679.371 190 0],[679.541 70 1],[680.315 12 0],[681.516 21 0],[683.249 14 1],[684.524 45 0],[685.824 14 1],[688.722 29 0],[689.6 21 1],[690.826 9 0],[693.352 14 0],[695.031 24 0],[695.168 10 1],[695.804 10 0],[697.988 24 0],[700.897 13 0],[700.993 10 0],[703.518 19 0],[705.294 29 0],[705.428 13 0],[707.513 9 0],[712.792 11 0],[719.166 35 0],[719.593 10 0],[726.417 35 1],[729.308 9 0],[733.062 9 0],[733.296 5 1],[734.646 50 0],[739.877 11 0],[745.03 29 1],[749.488 17 0],[753.671 7 0],[756.313 35 0],[761.772 8 0],[762.294 19 0],[765.289 7 0],[768.949 5 0],[769.8 8 0],[771.989 19 0],[772.408 19 0],[778.842 13 0],[779.632 13 0],[386.696 500 2],[390.074 3000 2],[391.458 4000 2],[403.96 3800 2],[404.011 3000 2],[412.161 120 2],[473.762 2000 2],[510.288 7500 2],[512.04 1300 2],[523.81 10000 2],[526.358 3000 2],[538.364 4000 2],[556.281 6000 2],[556.727 600 2],[557.224 4000 2],[559.548 400 2],[560.208 3000 2],[725.458 2000 2],[755.871 9000 2]}{12000}%
+\wl@elt@search{#1}{Zr}{[381.758 210 1],[382.241 560 0],[383.596 2200 0],[383.676 1300 1],[384.302 550 1],[384.701 550 0],[384.925 550 0],[386.387 2900 0],[386.434 770 0],[387.76 990 0],[387.905 200 0],[388.542 1500 0],[389.032 2900 0],[389.138 2000 0],[390.052 400 0],[391.594 310 1],[392.179 610 0],[392.953 1200 0],[393.412 200 1],[393.479 200 1],[395.822 940 1],[396.666 490 0],[396.826 990 0],[397.35 660 0],[397.529 200 0],[398.16 200 0],[399.113 770 1],[399.897 770 1],[400.76 200 0],[401.225 200 0],[402.398 400 0],[402.492 770 0],[402.72 990 0],[402.895 240 0],[402.968 400 1],[403.004 490 0],[403.589 400 0],[404.222 240 0],[404.358 610 0],[404.456 490 0],[404.561 400 1],[404.867 610 1],[405.033 200 1],[405.048 200 0],[405.503 770 0],[405.571 600 0],[406.153 330 0],[406.416 1500 0],[407.27 2000 0],[407.493 310 0],[407.653 200 0],[407.831 240 0],[408.122 2000 0],[410.84 200 0],[412.146 400 0],[414.92 1200 1],[415.264 200 0],[415.624 290 1],[416.121 400 1],[416.636 400 0],[418.332 200 0],[418.756 660 0],[419.476 400 0],[419.909 610 0],[420.146 610 0],[420.898 610 1],[421.188 200 1],[421.386 400 0],[422.776 2000 0],[423.606 200 0],[423.931 2000 0],[424.034 770 0],[424.12 770 0],[424.169 1200 0],[426.802 310 0],[428.22 550 0],[429.479 550 0],[430.289 310 0],[434.113 550 0],[434.789 1000 0],[435.974 290 1],[436.081 310 0],[436.645 350 0],[437.978 240 1],[441.304 190 0],[442.046 240 0],[442.724 120 0],[443.149 160 0],[444.3 140 1],[445.743 110 0],[446.691 110 0],[447.031 110 0],[447.056 190 0],[449.697 200 1],[450.712 550 0],[453.575 610 0],[454.222 490 0],[455.301 200 0],[455.513 200 0],[455.552 140 0],[457.552 490 0],[458.229 100 0],[459.055 140 0],[460.257 350 0],[460.442 140 0],[462.641 210 0],[463.398 700 0],[464.483 210 0],[468.342 260 0],[468.78 2300 0],[468.845 510 0],[470.779 110 0],[471.008 1900 0],[471.192 160 0],[471.762 120 0],[471.912 210 0],[473.233 300 0],[473.948 1400 0],[476.278 190 0],[477.231 870 0],[478.492 210 0],[478.867 160 0],[480.587 260 0],[480.947 140 0],[481.504 190 0],[481.563 700 0],[482.429 280 0],[482.804 190 0],[483.878 110 0],[485.136 210 0],[486.606 160 0],[488.124 110 0],[488.36 110 0],[499.476 100 0],[501.146 30 0],[504.658 250 0],[506.039 85 0],[506.491 360 0],[506.522 110 0],[507.026 100 0],[507.398 75 0],[507.825 470 0],[508.526 85 0],[511.227 50 1],[511.524 140 0],[512.042 50 0],[513.34 85 0],[515.545 300 0],[515.8 200 0],[515.867 35 0],[516.099 75 0],[516.596 85 0],[517.899 17 0],[518.37 100 0],[518.703 30 0],[519.16 100 1],[520.115 100 0],[520.93 85 0],[522.493 85 0],[524.347 30 0],[527.741 120 0],[528.005 75 0],[529.482 60 0],[529.679 120 0],[530.197 60 0],[531.14 110 0],[532.126 25 0],[533.084 22 0],[533.843 12 0],[535.009 30 1],[535.035 30 1],[535.09 25 0],[535.192 25 0],[536.256 75 0],[536.335 12 0],[536.939 17 0],[538.237 20 0],[538.514 270 0],[538.665 30 0],[539.118 17 0],[539.588 17 0],[540.513 25 0],[540.762 85 0],[541.393 17 0],[542.186 20 0],[542.636 15 0],[542.842 25 0],[543.776 25 0],[544.041 15 0],[544.857 35 0],[547.492 10 0],[547.74 10 0],[547.833 35 0],[548.083 35 0],[548.116 10 0],[548.609 30 0],[550.212 140 0],[550.787 25 0],[551.711 30 0],[551.805 10 0],[552.841 75 0],[553.23 20 0],[553.746 45 0],[554.532 50 0],[555.175 22 -1],[555.317 25 -1],[561.211 12 0],[562.014 120 0],[562.353 35 0],[562.902 25 -1],[562.958 25 -1],[566.451 160 0],[566.628 20 0],[568.09 120 0],[568.542 15 0],[570.889 30 0],[571.821 75 -1],[573.57 120 0],[574.817 35 -1],[577.857 17 -1],[579.774 160 0],[584.732 30 0],[586.827 50 0],[586.95 110 0],[587.98 340 0],[588.562 85 0],[590.109 50 0],[590.861 30 -1],[592.513 140 0],[593.52 100 0],[595.535 110 0],[597.78 30 -1],[598.423 100 0],[599.537 17 0],[600.105 50 0],[602.536 30 0],[603.261 85 0],[604.585 170 0],[604.924 100 0],[606.284 140 0],[612.083 50 0],[612.191 170 0],[612.484 85 0],[612.744 680 0],[613.455 340 0],[614.046 100 0],[614.32 440 0],[615.561 30 0],[615.771 75 0],[616.02 25 0],[618.94 35 0],[619.296 60 0],[621.305 85 0],[621.469 100 0],[622.651 170 -1],[625.726 100 0],[626.105 50 -1],[626.706 35 0],[629.284 45 -1],[629.966 120 0],[630.434 15 0],[631.302 300 0],[631.471 30 0],[632.135 50 0],[634.036 22 0],[634.51 50 -1],[634.522 75 0],[637.856 75 -1],[640.7 35 0],[641.239 50 -1],[642.617 12 0],[643.433 35 0],[644.574 60 0],[645.162 20 0],[645.763 20 0],[647.021 110 0],[647.379 60 -1],[648.435 11 0],[648.964 110 0],[649.31 22 0],[650.326 50 0],[650.636 50 0],[650.815 50 -1],[654.29 30 -1],[655.054 35 0],[656.943 30 0],[657.656 20 0],[657.806 30 -1],[659.199 50 0],[659.671 10 0],[659.884 10 0],[660.327 50 0],[662.056 15 0],[667.801 11 1],[668.818 22 0],[670.212 11 0],[670.961 17 0],[671.788 27 0],[675.273 40 0],[676.238 75 0],[676.916 85 0],[677.289 27 0],[678.715 15 1],[679.085 35 0],[682.878 45 0],[683.289 45 0],[684.533 13 0],[684.634 17 0],[684.697 100 0],[684.926 27 0],[685.256 13 0],[688.829 120 0],[690.059 29 0],[690.436 20 0],[690.737 29 0],[691.687 20 0],[693.238 16 0],[694.846 29 0],[695.384 150 0],[696.644 60 0],[697.591 10 0],[699.084 150 0],[699.432 80 0],[700.546 10 0],[702.74 100 0],[705.736 25 0],[705.796 14 0],[708.73 140 0],[708.943 25 0],[709.446 35 0],[709.559 50 0],[709.77 540 0],[710.291 280 0],[710.372 170 0],[711.168 140 0],[711.282 40 0],[711.352 18 0],[713.295 12 0],[714.074 16 0],[714.447 12 0],[716.909 590 0],[720.162 50 0],[725.817 12 0],[726.476 35 0],[730.621 20 0],[731.162 25 0],[731.372 35 0],[731.808 90 0],[732.782 10 0],[733.597 50 0],[734.396 50 0],[737.35 20 0],[738.363 25 0],[740.09 14 0],[741.139 10 0],[742.275 10 0],[743.31 10 0],[743.986 110 0],[746.757 18 0],[747.958 16 0],[751.57 14 0],[751.795 12 0],[754.062 20 0],[754.459 20 0],[755.146 29 0],[755.47 40 0],[755.845 25 0],[756.009 12 0],[756.212 12 0],[760.715 80 0],[761.208 14 0],[762.117 20 0],[765.86 29 0],[769.083 18 0],[770.427 14 0],[770.842 10 0],[776.655 10 0]}{2900}%
+\wl@elt@search{#1}{Nb}{[380.13 270 0],[380.292 2700 0],[380.388 670 0],[380.474 530 0],[381.049 670 0],[381.103 530 0],[381.551 530 0],[381.886 210 1],[381.915 210 0],[382.488 670 0],[383.518 350 0],[383.645 250 0],[384.59 210 0],[385.895 290 0],[386.338 350 0],[386.792 270 0],[387.756 530 0],[387.882 870 0],[388.314 670 0],[388.544 1100 0],[388.568 670 0],[388.607 210 0],[389.13 580 0],[390.897 210 0],[391.47 670 0],[392.02 530 0],[393.744 670 0],[394.367 520 0],[396.569 250 0],[396.609 910 0],[397.185 210 0],[403.252 1100 0],[403.953 250 0],[405.894 16000 0],[405.951 210 0],[406.079 350 0],[406.826 210 0],[407.973 12000 0],[408.486 270 0],[410.04 440 0],[410.092 6700 0],[411.69 310 0],[412.381 5300 0],[412.943 670 0],[412.993 770 0],[413.71 2300 0],[413.944 440 0],[413.971 2700 0],[414.321 350 0],[415.012 870 0],[415.258 4400 0],[416.347 870 0],[416.366 4400 0],[416.466 4000 0],[416.813 3500 0],[418.444 310 0],[419.088 1200 0],[419.207 870 0],[419.509 870 0],[419.566 1300 0],[419.851 310 0],[420.152 350 0],[420.531 870 0],[421.473 350 0],[421.794 420 0],[422.915 420 0],[425.544 250 0],[426.205 770 0],[426.602 420 0],[427.069 290 0],[428.699 400 0],[429.96 580 0],[430.099 580 0],[430.956 120 0],[431.127 390 0],[431.245 120 0],[432.633 350 0],[432.738 120 0],[433.137 390 0],[434.282 140 0],[434.865 140 0],[434.903 110 0],[435.157 290 0],[436.843 210 0],[437.796 140 0],[438.836 130 0],[439.269 160 0],[441.021 330 0],[441.944 190 0],[443.722 230 0],[444.718 290 0],[445.68 140 0],[445.742 140 0],[446.971 140 0],[447.129 140 0],[447.253 140 0],[450.304 150 0],[452.341 530 0],[454.682 480 0],[456.453 370 0],[457.308 720 0],[458.162 480 0],[460.677 1200 0],[461.617 170 0],[463.011 450 0],[464.895 450 0],[464.927 110 0],[466.383 450 0],[466.624 340 0],[466.722 240 0],[467.209 580 0],[467.537 530 0],[467.848 110 0],[468.514 320 0],[470.614 130 0],[470.829 260 0],[471.35 150 0],[473.389 110 0],[474.97 220 0],[481.638 110 0],[484.837 110 0],[496.778 130 0],[497.314 110 0],[498.897 190 0],[500.095 85 0],[500.225 65 0],[501.327 40 0],[501.775 230 0],[501.951 40 0],[502.636 150 0],[503.013 40 0],[503.904 210 0],[504.796 40 0],[505.801 170 0],[505.935 65 0],[506.525 130 0],[507.74 40 0],[507.896 750 0],[509.441 40 0],[509.53 420 0],[510.016 170 0],[512.03 170 0],[512.18 85 0],[512.766 85 0],[513.334 40 0],[513.475 210 0],[514.058 75 0],[514.754 75 0],[515.064 40 0],[515.263 75 0],[516.033 250 0],[516.438 250 0],[518.031 230 0],[518.698 110 0],[518.92 190 0],[519.308 170 0],[519.584 150 0],[520.322 65 0],[520.513 35 0],[521.91 85 0],[522.516 65 0],[523.281 150 0],[523.743 85 0],[524.039 29 0],[525.162 150 0],[525.303 75 0],[525.393 85 0],[526.992 50 0],[527.153 270 0],[527.248 25 0],[527.62 130 0],[527.943 29 0],[528.526 50 0],[529.634 35 0],[531.555 50 0],[531.701 17 0],[531.86 250 0],[531.949 50 0],[533.487 75 0],[533.681 25 0],[534.08 50 0],[534.358 25 0],[534.417 460 0],[535.074 340 0],[535.328 40 0],[535.531 25 0],[535.57 40 0],[535.919 29 0],[536.201 17 0],[537.527 40 0],[538.134 40 0],[538.83 17 0],[539.586 21 0],[539.633 29 0],[541.124 29 0],[541.63 21 0],[542.244 65 0],[543.126 21 0],[543.727 110 0],[544.831 19 0],[545.619 19 0],[545.804 40 0],[546.81 19 0],[548.1 40 0],[548.309 13 0],[548.349 19 0],[549.106 13 0],[549.953 17 0],[550.458 40 0],[550.912 17 0],[551.282 35 0],[551.739 17 0],[552.357 50 0],[554.147 25 0],[555.135 85 0],[556.3 29 0],[557.144 17 0],[557.616 35 0],[557.829 35 0],[558.697 50 0],[559.095 17 0],[559.489 13 0],[559.959 17 0],[560.352 40 0],[560.393 13 0],[562.826 25 0],[562.917 65 0],[563.542 35 0],[564.211 170 0],[564.53 35 0],[565.414 17 0],[566.471 130 0],[566.563 170 0],[566.686 17 0],[567.102 65 0],[567.191 85 0],[567.747 25 0],[569.309 25 0],[569.79 35 0],[570.616 40 0],[570.648 85 0],[570.933 29 0],[571.559 17 0],[571.635 65 0],[572.566 25 0],[572.919 130 0],[573.736 21 0],[573.82 13 0],[575.144 85 0],[576.034 110 0],[576.499 65 0],[577.108 29 0],[577.607 50 0],[578.034 17 0],[578.754 85 0],[578.979 17 0],[579.424 50 0],[580.403 50 0],[581.533 29 0],[581.943 110 0],[582.062 35 0],[583.49 75 0],[583.815 25 0],[583.864 130 0],[584.247 50 0],[584.609 17 0],[586.647 65 0],[587.47 35 0],[587.779 17 0],[589.344 40 0],[590.062 190 0],[590.38 40 0],[592.741 29 0],[593.416 40 0],[595.77 40 0],[598.322 150 0],[598.608 65 0],[599.793 85 0],[602.975 50 0],[603.184 50 0],[604.55 50 0],[604.872 25 0],[605.665 29 0],[610.771 29 0],[614.251 40 0],[614.813 50 0],[616.432 50 0],[621.306 29 0],[622.196 75 0],[625.176 40 0],[626.077 21 0],[643.046 85 0],[643.322 50 0],[649.784 17 0],[654.461 65 0],[657.473 15 0],[659.1 19 0],[660.616 19 0],[660.728 19 0],[661.415 35 0],[662.698 19 0],[666.084 210 0],[667.733 150 0],[670.12 65 0],[672.362 130 0],[673.988 75 0],[679.531 25 0],[682.811 85 0],[684.935 25 0],[687.092 19 0],[687.636 40 0],[690.289 25 0],[690.807 35 0],[691.832 40 0],[694.607 17 0],[697.249 17 0],[698.609 25 0],[699.032 85 0],[699.611 17 0],[702.348 21 0],[703.804 17 0],[704.681 190 0],[706.641 8 0],[707.523 8 0],[709.894 40 0],[710.201 17 0],[711.931 19 0],[712.295 15 0],[712.617 35 0],[713.006 17 0],[715.943 130 0],[719.137 17 0],[720.894 19 0],[725.235 50 0],[727.481 15 0],[731.703 13 0],[732.392 17 0],[732.838 29 0],[735.316 65 0],[737.25 190 0],[741.983 13 0],[743.602 15 0],[747.82 19 0],[751.593 65 0],[751.977 29 0],[757.458 170 0],[758.321 17 0],[763.981 13 0],[764.771 13 0],[770.333 25 0],[772.668 75 0],[775.731 25 0],[778.711 6 0]}{16000}%
+\wl@elt@search{#1}{Mo}{[380.184 290 0],[382.67 520 0],[382.887 940 0],[383.375 1700 0],[384.725 380 0],[386.411 29000 0],[386.908 580 0],[388.682 580 0],[390.177 380 0],[390.296 19000 0],[394.148 65 1],[394.304 230 0],[405.601 270 0],[406.208 1400 0],[406.988 2300 0],[408.144 1300 0],[408.438 940 0],[410.215 250 0],[410.747 730 0],[412.01 630 0],[414.355 2900 0],[414.894 230 0],[415.528 250 0],[415.74 200 0],[417.827 200 0],[418.582 480 0],[418.832 2500 0],[419.456 250 0],[423.259 1500 0],[426.928 270 0],[427.691 890 0],[427.724 1200 0],[428.864 1400 0],[429.213 680 0],[429.321 890 0],[429.388 360 0],[432.614 840 0],[432.674 250 0],[435.034 230 0],[436.904 230 0],[438.164 1900 0],[441.157 2500 0],[442.362 210 0],[443.495 990 0],[444.22 200 0],[444.974 340 0],[445.736 480 0],[447.456 630 0],[449.128 230 0],[450.49 120 0],[451.215 140 0],[451.713 230 0],[452.434 230 0],[452.94 120 0],[453.68 400 0],[455.811 110 0],[457.65 210 0],[459.516 170 0],[460.988 360 0],[462.138 100 0],[462.647 460 0],[462.748 100 0],[466.276 220 0],[467.19 130 0],[468.822 130 0],[470.726 640 0],[470.822 150 0],[471.792 220 0],[472.914 100 0],[473.144 700 0],[475.039 100 0],[476.019 770 0],[477.634 150 0],[479.652 100 0],[481.925 410 0],[483.051 410 0],[486.8 360 0],[495.062 110 0],[495.754 150 0],[497.912 210 0],[499.991 110 0],[501.081 20 0],[501.46 180 0],[501.678 26 0],[501.985 20 0],[502.9 80 0],[503.078 65 0],[503.891 23 0],[504.652 26 0],[504.771 100 0],[505.5 50 0],[505.807 35 0],[505.988 200 0],[506.252 35 0],[506.464 29 0],[507.987 35 0],[508.002 100 0],[508.126 35 0],[509.097 40 0],[509.134 35 0],[509.216 35 0],[509.589 40 0],[509.665 100 0],[509.752 130 0],[509.803 35 0],[510.971 130 0],[511.497 80 0],[511.697 35 0],[512.383 29 0],[514.538 150 0],[514.739 110 0],[516.319 80 0],[516.776 100 0],[517.108 160 0],[517.294 230 0],[517.418 160 0],[519.144 40 0],[520.017 110 0],[520.074 50 0],[521.044 26 0],[521.186 50 0],[521.94 80 0],[523.106 65 0],[523.236 26 0],[523.426 100 0],[523.82 460 0],[524.088 230 0],[524.281 110 0],[524.551 100 0],[525.904 150 0],[526.017 16 0],[526.114 65 0],[526.895 20 0],[527.18 35 0],[527.628 35 0],[527.965 65 0],[528.086 210 0],[528.384 20 0],[529.208 55 0],[529.346 35 0],[529.547 55 0],[530.626 20 0],[531.389 55 0],[531.504 35 0],[531.989 20 0],[532.447 20 0],[532.706 35 0],[535.235 20 0],[535.488 80 0],[535.551 35 0],[535.648 65 0],[536.056 560 0],[536.428 110 0],[536.711 35 0],[537.24 35 0],[538.869 26 0],[539.452 65 0],[539.738 35 0],[540.047 50 0],[540.579 35 0],[540.639 35 0],[541.738 40 0],[542.689 23 0],[543.568 55 0],[543.775 65 0],[545.051 40 0],[545.646 35 0],[546.053 26 0],[546.557 23 0],[547.59 35 0],[549.028 35 0],[549.217 20 0],[549.38 26 0],[549.849 26 0],[550.154 50 0],[550.187 23 0],[550.354 26 0],[550.649 7800 0],[552.004 23 0],[552.064 26 0],[552.652 40 0],[552.697 40 0],[553.305 5200 0],[553.941 40 0],[554.312 50 0],[554.449 40 0],[555.628 55 0],[555.672 26 0],[556.405 20 0],[556.862 40 0],[556.948 26 0],[557.045 2500 0],[557.519 35 0],[559.158 20 0],[560.276 40 0],[560.862 23 0],[560.923 23 0],[561.093 100 0],[561.307 23 0],[561.845 20 0],[561.938 23 0],[563.247 330 0],[563.486 50 0],[565.013 230 0],[567.363 23 0],[567.447 55 0],[567.789 40 0],[568.289 35 0],[568.914 460 0],[569.928 23 0],[570.572 80 0],[571.18 23 0],[572.274 210 0],[572.877 23 0],[572.945 26 0],[575.14 620 0],[577.455 23 0],[577.936 40 0],[578.333 23 0],[579.185 520 0],[579.577 23 0],[580.046 26 0],[580.267 35 0],[582.52 23 0],[583.559 23 0],[583.999 20 0],[584.886 20 0],[584.973 55 0],[585.152 50 0],[585.827 520 0],[586.138 20 0],[586.933 50 0],[587.659 26 0],[588.833 820 0],[589.229 23 0],[589.338 50 0],[589.878 20 0],[590.147 40 0],[592.636 40 0],[592.888 160 0],[598.817 40 0],[602.549 35 0],[602.727 16 0],[603.066 1300 0],[604.783 20 0],[605.481 20 0],[607.958 20 0],[608.127 10 0],[610.187 40 0],[613.063 10 0],[619.766 10 0],[621.789 20 0],[626.427 10 0],[626.588 16 0],[629.074 15 0],[630.175 13 0],[632.354 11 0],[635.722 40 0],[638.911 16 0],[639.112 11 0],[640.107 35 0],[640.911 26 0],[641.239 10 0],[642.437 100 0],[644.634 20 0],[647.12 20 0],[647.399 20 0],[649.313 10 0],[651.984 23 0],[661.12 15 0],[661.913 230 0],[662.457 10 0],[665.038 50 0],[665.968 13 0],[669.047 18 0],[673.398 110 0],[674.608 21 0],[674.627 50 0],[675.397 35 0],[676.35 13 0],[679.988 10 0],[680.262 10 0],[681.203 10 0],[682.563 13 0],[682.887 18 0],[683.888 40 0],[684.892 16 0],[688.628 21 0],[689.236 16 0],[689.801 10 0],[689.898 10 0],[690.82 13 0],[691.401 35 0],[693.41 13 0],[694.739 10 0],[696.064 10 0],[697.871 16 0],[698.894 26 0],[699.913 12 0],[700.16 16 0],[703.798 22 0],[706.021 22 0],[706.334 13 0],[708.122 13 0],[710.987 110 0],[713.408 27 0],[724.25 150 0],[724.585 40 0],[726.762 22 0],[730.019 17 0],[734.849 13 0],[736.165 13 0],[736.441 10 0],[739.136 40 0],[743.41 10 0],[744.734 13 0],[745.285 13 0],[748.574 140 0],[750.447 13 0],[757.264 11 0],[759.516 11 0],[760.184 11 0],[765.676 17 0],[767.949 13 0],[772.077 27 0]}{29000}%
+\wl@elt@search{#1}{Tc}{[381.467 200 0],[381.689 300 0],[382.447 300 0],[382.854 500 0],[383.035 200 0],[383.245 200 0],[383.282 600 0],[383.756 1500 0],[384.131 800 0],[384.597 800 0],[384.76 500 0],[385.122 300 0],[385.673 500 0],[386.307 200 0],[386.411 400 0],[386.824 1000 0],[387.566 200 0],[387.916 500 0],[388.072 600 0],[389.212 300 0],[389.322 200 0],[389.983 600 0],[391.938 300 0],[392.366 300 0],[392.757 200 0],[393.37 200 0],[394.657 4000 0],[394.709 2000 0],[395.573 200 0],[397.964 300 0],[398.035 500 0],[398.497 10000 0],[398.778 400 0],[399.404 300 0],[399.451 2000 0],[399.697 200 0],[400.469 300 0],[400.714 500 0],[401.2 1000 0],[401.668 400 0],[401.722 600 0],[402.076 2000 0],[403.163 20000 0],[403.925 1000 0],[404.178 200 0],[404.911 10000 0],[405.195 500 0],[405.318 200 0],[405.608 200 0],[408.354 400 0],[408.871 10000 0],[409.369 200 0],[409.567 15000 0],[411.022 1000 0],[411.508 10000 0],[411.927 600 0],[412.422 8000 0],[412.827 1000 0],[413.481 300 0],[413.912 300 0],[413.985 800 0],[414.127 400 0],[414.495 6000 0],[414.508 3000 0],[414.762 200 0],[416.561 10000 0],[416.742 500 0],[416.968 1000 0],[417.027 4000 0],[417.253 5000 0],[417.628 1000 0],[418.651 800 0],[421.861 300 0],[423.819 10000 0],[426.227 20000 0],[426.269 1000 0],[427.497 800 1],[427.89 800 0],[429.706 30000 0],[433.686 400 0],[435.849 400 0],[435.926 200 0],[442.959 1000 0],[448.153 1000 0],[448.706 3000 0],[449.503 400 0],[451.598 1000 0],[452.284 10000 0],[453.953 2000 0],[454.209 400 0],[455.22 400 0],[455.285 800 0],[455.705 1000 0],[456.454 2000 0],[457.845 1000 0],[459.335 1000 0],[460.916 300 0],[461.686 1000 0],[462.269 200 0],[462.496 300 0],[463.057 1000 0],[463.315 200 0],[463.75 3000 0],[464.328 500 0],[464.833 2000 0],[466.021 2000 0],[466.93 2000 0],[467.217 400 0],[467.89 200 0],[468.936 400 0],[469.428 300 0],[470.692 1000 0],[471.422 200 0],[471.777 2000 0],[471.902 500 0],[471.928 4000 0],[473.651 200 0],[474.061 10000 0],[474.961 500 0],[475.272 1000 0],[476.236 200 0],[477.154 4000 0],[477.389 200 0],[478.392 200 0],[478.56 500 0],[479.048 200 0],[479.162 250 0],[479.998 300 0],[480.569 100 0],[480.942 100 0],[481.679 500 0],[482.074 10000 0],[483.135 300 0],[483.437 1000 0],[483.539 1000 0],[484.136 100 0],[485.359 20000 0],[485.721 100 0],[486.219 100 0],[486.673 10000 0],[487.077 200 0],[488.87 100 0],[489.088 150 0],[489.192 8000 0],[489.249 150 0],[490.851 1000 0],[490.957 2000 0],[491.302 500 0],[491.47 150 0],[492.067 200 0],[492.36 300 0],[494.806 400 0],[497.634 5000 0],[499.5 400 0],[500.267 200 0],[500.574 100 0],[501.452 200 0],[502.624 500 0],[502.679 300 0],[502.789 150 0],[503.245 80 0],[505.527 300 0],[505.833 60 0],[506.069 500 0],[509.074 80 0],[509.628 5000 0],[510.324 200 0],[510.432 500 0],[510.981 200 0],[512.06 100 0],[513.926 500 0],[515.063 500 0],[516.181 2000 0],[517.481 2000 0],[520.656 100 0],[522.555 200 0],[526.022 200 0],[526.144 200 0],[527.551 1000 0],[528.507 800 0],[530.531 100 0],[531.496 400 0],[532.02 600 0],[533.479 200 0],[535.348 500 0],[535.663 200 0],[535.865 300 0],[536.014 200 0],[537.52 500 0],[542.305 150 0],[544.74 200 0],[545.19 500 0],[545.595 100 0],[547.196 300 0],[548.301 70 0],[548.537 60 0],[550.689 80 0],[552.411 150 0],[552.823 100 0],[554.194 200 0],[554.363 80 0],[555.053 100 0],[558.902 3000 0],[560.223 200 0],[562.045 2000 0],[562.994 300 0],[564.213 1500 0],[564.494 800 0],[565.6 100 0],[567.215 60 0],[568.73 200 0],[568.905 200 0],[572.531 700 0],[577.147 500 0],[579.465 100 0],[579.985 80 0],[581.424 100 0],[583.148 200 0],[583.633 150 0],[592.336 150 0],[592.447 1000 0],[592.629 200 0],[593.193 600 0],[603.236 60 0],[604.799 60 0],[606.509 200 0],[608.523 800 0],[609.939 300 0],[610.296 500 0],[612.068 1000 0],[613.08 1000 0],[613.223 150 0],[618.47 100 0],[619.266 800 0],[624.418 600 0],[631.218 100 0],[635.486 100 0],[635.673 100 0],[638.987 80 0],[640.883 100 0],[645.59 1000 0],[646.193 600 0],[647.027 100 0],[649.168 200 0],[652.682 200 0],[657.924 150 0],[662.557 500 0],[667.366 300 0],[668.71 100 0],[678.6 80 0],[679.863 70 0],[685.69 60 0],[700.237 150 0],[701.657 100 0],[708.618 500 0],[709.312 60 0],[714.128 200 0],[715.762 200 0],[725.608 70 0],[732.238 100 0],[732.914 80 0],[739.68 100 0],[740.261 100 0],[740.536 200 0],[742.715 60 0],[743.412 150 0],[745.249 600 0],[746.159 60 0],[753.495 80 0],[754.026 800 0],[754.339 80 0],[757.402 200 0],[757.926 500 0],[762.453 90 0],[768.445 100 0],[769.737 500 0],[769.819 80 0],[779.304 800 0],[779.828 60 0]}{30000}%
+\wl@elt@search{#1}{Ru}{[380.026 310 0],[380.868 310 0],[381.272 600 0],[381.727 760 0],[381.903 760 0],[382.209 650 0],[382.493 550 0],[383.18 760 0],[383.505 220 0],[383.807 310 0],[383.97 930 0],[384.668 480 0],[385.043 760 0],[385.646 480 0],[385.755 1300 0],[386.072 220 0],[386.269 650 0],[386.784 1300 0],[387.352 260 0],[389.221 650 0],[390.908 760 0],[392.092 260 0],[392.347 1500 0],[392.592 3300 0],[393.176 600 0],[393.355 310 0],[394.557 760 0],[395.021 460 0],[395.268 310 0],[396.49 460 0],[397.844 600 0],[397.942 600 0],[398.486 870 0],[399.598 280 0],[402.216 1500 0],[402.383 600 0],[403.921 310 0],[405.14 1400 0],[405.405 710 0],[406.446 370 0],[406.761 200 0],[406.837 760 0],[407.3 200 0],[407.673 980 0],[408.06 6000 0],[408.543 310 0],[409.779 930 0],[410.174 350 0],[411.274 1900 0],[414.416 2000 0],[414.574 650 0],[414.677 260 0],[416.751 870 0],[419.758 550 0],[419.888 550 0],[419.99 7600 0],[420.602 1500 0],[421.206 5400 0],[421.444 760 0],[421.727 930 0],[422.068 370 0],[423.031 550 0],[424.105 760 0],[424.306 760 0],[424.673 370 0],[425.899 310 0],[428.433 760 0],[429.328 220 0],[429.479 260 0],[429.593 550 0],[429.771 3700 0],[430.76 930 0],[431.843 370 0],[431.987 550 0],[434.207 550 0],[434.97 350 0],[435.413 710 0],[436.121 870 0],[437.221 2400 0],[438.539 870 0],[438.565 1300 0],[439.044 1700 0],[441.003 1600 0],[442.146 160 0],[442.846 330 0],[443.976 460 0],[444.934 440 0],[446.004 1100 0],[447.393 190 0],[448.045 150 0],[449.814 350 0],[451.01 120 0],[451.689 220 0],[451.782 220 0],[452.095 110 0],[454.733 170 0],[454.785 110 0],[455.451 5400 0],[455.998 110 0],[458.444 1700 0],[459.11 110 0],[459.252 150 0],[459.908 330 0],[463.569 170 0],[464.509 200 0],[464.761 720 0],[465.432 290 0],[468.179 290 0],[468.402 190 0],[469.011 290 0],[470.948 1400 0],[473.133 140 0],[473.352 120 0],[475.784 500 0],[481.552 260 0],[484.456 120 0],[486.915 550 0],[489.56 160 0],[490.305 470 0],[490.789 120 0],[492.107 260 0],[493.843 180 0],[496.89 160 0],[498.035 160 0],[499.274 120 0],[501.123 160 0],[501.495 90 0],[502.618 90 0],[502.816 65 0],[504.035 35 0],[504.074 35 0],[504.731 65 0],[505.733 450 0],[506.264 21 0],[507.297 90 0],[507.632 120 0],[509.383 200 0],[510.707 80 0],[512.373 24 0],[512.726 55 0],[513.389 65 0],[513.655 530 0],[514.276 170 0],[514.724 250 0],[515.107 110 0],[515.32 55 0],[515.514 500 0],[516 55 0],[517.103 920 0],[519.502 180 0],[519.987 80 0],[520.212 45 0],[521.343 45 0],[522.355 65 0],[524.238 40 0],[525.167 55 0],[525.707 40 0],[526.647 40 0],[526.683 40 0],[528.082 40 0],[528.408 130 0],[529.116 40 0],[530.486 80 0],[530.927 260 0],[531.533 13 0],[533.293 40 0],[533.47 45 0],[533.593 110 0],[536.177 130 0],[537.784 65 0],[538.588 65 0],[540.104 110 0],[540.139 40 0],[541.886 40 0],[542.759 55 0],[543.921 26 0],[545.271 13 0],[545.482 80 0],[545.613 90 0],[547.518 13 0],[547.94 55 0],[548.03 26 0],[548.432 80 0],[548.464 18 0],[549.669 26 0],[550.102 13 0],[551.071 130 0],[551.237 20 0],[551.786 8 0],[552.178 12 0],[553.099 12 0],[554.066 24 0],[555.652 12 0],[555.975 90 0],[556.903 11 0],[557.84 21 0],[560.314 21 0],[560.355 8 0],[560.673 13 0],[562.979 11 0],[563.624 290 0],[564.166 11 0],[564.956 7 0],[565.33 7 0],[566.52 11 0],[567.963 16 0],[569.905 180 0],[572.482 13 0],[572.573 13 0],[574.599 16 0],[574.747 16 0],[575.202 11 0],[575.683 11 0],[576.792 11 0],[580.439 16 0],[581.498 65 0],[582.806 8 0],[583.321 16 0],[591.934 55 0],[592.145 80 0],[592.687 21 0],[593.238 26 0],[593.665 8 0],[595.115 8 0],[597.338 21 0],[597.417 8 0],[598.867 16 0],[599.365 35 0],[611.677 18 0],[619.942 26 0],[622.52 26 0],[628.449 9 0],[629.522 18 0],[633.062 13 0],[633.612 9 0],[636.341 9 0],[637.645 9 0],[639.023 16 0],[641.757 8 0],[644.484 26 0],[649.644 8 0],[652.874 11 0],[656.045 4 0],[659.374 4 0],[661.82 9 0],[666.314 21 0],[669 55 0],[670.752 11 0],[671.83 15 0],[673.045 15 0],[675.654 7 0],[676.695 21 0],[677.502 30 0],[678.723 13 0],[681.351 8 0],[682.388 15 0],[682.417 21 0],[683.152 7 0],[691.148 26 0],[692.323 110 0],[698.201 26 0],[702.798 26 0],[708.606 9 0],[708.735 12 0],[714.172 4 0],[721.926 6 0],[723.892 35 0],[726.696 7 0],[732.356 8 0],[739.393 16 0],[746.891 18 0],[747.54 12 0],[748.579 26 0],[749.975 70 0],[753.207 7 0],[755.961 26 0],[761.294 5 0],[762.15 18 0],[772.287 18 0],[772.991 5 0],[779.186 22 0],[779.789 4 0]}{7600}%
+\wl@elt@search{#1}{Rh}{[380.592 760 0],[380.676 1300 0],[380.95 45 0],[381.245 95 0],[381.501 470 0],[381.647 760 0],[381.819 1300 0],[382.226 3800 0],[382.848 2300 0],[383.389 2000 0],[383.475 45 0],[385.652 5900 0],[387.001 490 0],[387.239 70 0],[387.734 380 0],[388.834 70 0],[390.422 29 0],[391.283 23 0],[391.351 120 0],[392.219 240 0],[393.423 2000 0],[393.498 45 0],[393.584 50 0],[394.272 590 0],[395.824 95 0],[395.886 3800 0],[396.454 45 1],[397.531 380 0],[398.44 240 0],[399.561 240 0],[399.615 380 0],[402.314 120 0],[404.841 60 0],[404.904 23 0],[405.344 40 0],[405.634 23 0],[407.757 70 0],[408.278 560 0],[408.428 19 0],[408.779 45 0],[408.85 60 0],[409.752 140 0],[410.749 45 0],[411.633 70 0],[411.968 120 0],[412.168 1100 0],[412.887 1500 0],[413.527 2100 0],[415.437 240 0],[419.65 330 0],[420.662 70 0],[421.114 3300 0],[423.02 29 0],[424.444 40 0],[427.343 60 0],[427.86 60 0],[428.871 820 0],[429.677 70 0],[434.244 23 0],[437.304 45 0],[437.48 4200 0],[437.992 95 0],[443.332 23 0],[449.247 35 0],[450.378 29 0],[452.872 23 0],[454.427 16 0],[454.873 35 0],[455.164 40 0],[456.089 19 0],[456.519 16 0],[456.9 130 0],[457.131 14 0],[460.812 29 0],[461.991 14 0],[464.318 23 0],[467.503 150 0],[472.1 19 0],[474.511 70 0],[475.558 12 0],[481.049 23 0],[484.243 21 0],[484.399 45 0],[485.163 60 0],[496.371 60 0],[497.775 60 0],[497.918 40 0],[508.552 14 0],[509.063 70 0],[512.069 23 0],[513.076 19 0],[515.554 60 0],[515.709 14 0],[515.869 40 0],[517.597 60 0],[517.727 12 0],[518.419 35 0],[519.314 95 0],[520.695 16 0],[521.152 16 0],[521.273 19 0],[521.479 16 0],[522.266 19 0],[523.062 19 0],[523.716 45 0],[523.78 9 0],[526.927 14 0],[528.012 11 0],[529.214 14 0],[531.479 14 0],[532.974 40 0],[533.108 14 0],[534.931 9 0],[535.44 130 0],[535.647 23 0],[537.91 45 0],[539.044 95 0],[540.473 23 0],[542.407 60 0],[542.472 19 0],[542.545 19 0],[543.958 12 0],[544.136 12 0],[544.432 9 0],[544.523 35 0],[546.811 23 0],[547.085 35 0],[547.612 12 0],[548.142 12 0],[548.423 16 0],[550.465 9 0],[553.504 29 0],[554.458 21 0],[559.942 160 0],[560.771 7 0],[560.835 16 0],[563.277 5 0],[565.962 9 0],[568.638 40 0],[570.247 9 0],[572.73 6 0],[579.266 29 0],[579.579 9 0],[580.334 9 0],[580.691 40 0],[582.184 6 0],[583.158 35 0],[590.731 7 0],[591.854 9 0],[594.146 7 0],[598.36 130 0],[599.119 9 0],[610.272 35 0],[611.615 6 0],[612.806 8 0],[618.689 8 0],[619.999 14 0],[625.372 16 0],[627.666 5 0],[627.746 8 0],[629.338 6 0],[631.953 29 0],[641.472 12 0],[651.041 16 0],[651.97 19 0],[662.78 9 0],[663.016 19 0],[675.235 40 0],[679.665 9 0],[682.733 13 0],[685.768 11 0],[687.994 20 0],[696.567 65 0],[697.291 8 0],[697.915 16 0],[700.158 16 0],[703.876 11 0],[710.164 18 0],[710.445 15 0],[714.255 6 0],[721.906 9 0],[726.818 18 0],[727.082 35 0],[727.194 12 0],[727.303 5 0],[737.557 9 0],[738.664 5 0],[743.08 9 0],[744.239 18 0],[744.677 7 0],[747.574 12 0],[749.524 12 0],[754.202 8 0],[755.767 11 0],[757.722 8 0],[769.005 11 0],[777.29 18 0],[779.161 29 0],[385.298 1 2]}{5900}%
+\wl@elt@search{#1}{Pd}{[383.229 1500 0],[389.42 2200 0],[395.864 1500 0],[408.734 290 0],[416.984 90 0],[421.295 2500 0],[447.359 180 0],[478.818 55 0],[481.751 45 0],[487.543 35 0],[511.081 55 0],[511.702 75 0],[516.384 160 0],[523.486 55 0],[529.563 120 0],[531.257 18 0],[534.51 15 0],[539.524 35 0],[554.28 55 0],[554.702 35 0],[561.944 27 0],[564.269 15 0],[565.542 14 0],[567.007 75 0],[569.014 11 0],[569.509 55 0],[573.661 18 0],[677.454 23 0],[678.452 65 0],[683.342 4 0],[701.644 11 0],[731.006 13 0],[736.812 75 0],[739.192 27 0],[748.69 16 0],[776.403 120 0],[778.667 27 0]}{2500}%
+\wl@elt@search{#1}{Ag}{[381.094 200 0],[381.178 50 0],[384.074 100 0],[384.785 15 0],[390.741 50 0],[390.931 50 1],[391.44 50 0],[392.01 70 1],[392.801 10 0],[394.043 10 0],[394.297 10 0],[394.943 60 1],[398.158 100 0],[398.519 70 1],[399.215 10 0],[405.548 100 0],[408.343 10 0],[408.591 80 1],[418.548 100 1],[421.096 90 0],[421.282 100 0],[431.107 50 0],[439.623 20 0],[447.604 50 0],[455.6 20 0],[461.569 30 0],[462.004 80 1],[462.046 50 1],[466.848 60 0],[467.76 30 0],[478.84 100 1],[479.62 20 0],[484.782 30 0],[487.41 100 0],[488.821 20 0],[491.75 10 0],[493.575 10 0],[499.289 20 0],[502.735 80 1],[512.35 15 0],[520.908 1000 0],[533.362 10 0],[546.55 1000 0],[547.155 100 0],[547.538 20 0],[554.567 20 0],[555.958 10 0],[566.734 100 0],[608.378 10 0],[626.85 10 0],[662.108 20 0],[735.996 20 0],[768.778 320 0]}{1000}%
+\wl@elt@search{#1}{Cd}{[398.1926 10 0],[402.912 100 1],[413.477 200 1],[414.149 50 1],[428.508 100 1],[430.6672 8 0],[441.241 100 1],[441.2989 3 0],[441.563 1000 1],[444.045 30 1],[466.2352 8 0],[467.8149 200 0],[474.469 30 1],[479.9912 300 0],[488.172 50 1],[502.55 50 1],[508.5822 1000 0],[515.466 6 0],[526.801 100 1],[527.16 100 1],[533.748 1000 1],[537.813 1000 1],[538.189 200 1],[584.33 40 1],[588.022 50 1],[609.9142 300 0],[611.149 100 0],[632.5166 100 0],[633.0013 30 0],[635.472 400 1],[635.998 500 1],[643.847 2000 0],[646.494 400 1],[656.765 25 1],[672.578 500 1],[675.919 100 1],[677.8116 30 0],[723.701 50 1],[728.438 100 1],[734.567 1000 0]}{2000}%
+\wl@elt@search{#1}{In}{[383.465 250 1],[384.218 200 1],[388.978 100 1],[390.207 100 1],[392.212 60 1],[393.44 65 1],[396.235 250 1],[400.466 120 1],[401.392 140 1],[405.694 410 1],[410.176 17000 0],[420.514 140 1],[421.304 100 1],[421.966 110 1],[437.287 150 1],[450.078 150 1],[451.131 18000 0],[454.901 110 1],[457.085 140 1],[457.802 180 1],[457.84 180 1],[461.608 140 1],[461.717 170 1],[462.014 250 1],[462.07 150 1],[462.73 170 1],[463.704 140 1],[463.816 380 1],[464.458 220 1],[465.562 360 1],[465.674 320 1],[468.111 190 1],[468.48 450 1],[487.837 3 0],[490.706 90 1],[492.493 70 1],[497.377 150 1],[510.936 80 1],[511.514 100 1],[511.74 140 1],[512.08 270 1],[512.175 200 1],[512.985 80 1],[517.542 240 1],[518.444 140 1],[525.432 30 0],[526.274 12 0],[530.945 150 1],[541.141 80 1],[541.845 140 1],[543.67 220 1],[549.75 130 1],[550.708 140 1],[551.3 320 1],[552.328 250 1],[553.65 130 1],[555.545 190 1],[557.69 240 1],[563.67 200 1],[570.85 160 1],[570.991 50 0],[572.18 100 1],[572.768 50 0],[585.315 210 1],[590.34 490 1],[591.54 260 1],[591.878 120 1],[606.29 130 1],[609.595 250 1],[610.866 210 1],[611.59 180 1],[612.87 230 1],[612.94 240 1],[613.21 320 1],[614 150 1],[614.323 90 1],[614.81 140 1],[614.95 190 1],[616.115 80 1],[616.245 180 1],[622.428 100 1],[622.83 280 1],[623.11 140 1],[630.48 270 1],[636.23 290 1],[646.9 300 1],[654.12 210 1],[675.188 190 1],[676.59 180 1],[678.372 100 1],[684.744 8 0],[689.15 320 1],[690.013 4 0],[718.29 380 1],[725.5 180 1],[727.65 210 1],[730.34 180 1],[735.06 320 1],[763.27 100 1],[768.29 100 1],[774.07 210 1],[777.696 100 1],[778.9 180 1],[385.282 100 2],[402.377 100 2],[403.232 150 2],[406.23 50 2],[407.157 100 2],[407.293 100 2],[425.268 100 2],[450.958 40 2],[524.877 200 2],[564.515 100 2],[572.317 40 2],[581.95 100 2],[619.772 200 2]}{18000}%
+\wl@elt@search{#1}{Sn}{[380.102 280 0],[384.144 4 1],[429.465 1 1],[452.474 40 0],[457.913 1 1],[458.029 1 1],[487.722 2 1],[494.431 3 1],[497.973 20 0],[507.114 2 1],[507.267 2 1],[517.454 20 0],[533.236 10 1],[556.195 20 1],[558.892 25 1],[559.62 2 1],[563.171 500 0],[575.359 15 0],[579.72 1 1],[579.918 15 1],[592.544 50 0],[597.03 100 0],[603.77 150 0],[605.486 200 -1],[606.9 250 0],[607.346 100 0],[607.748 6 1],[607.97 5 1],[614.971 400 0],[615.46 200 0],[617.15 150 0],[631.078 100 0],[635.435 40 0],[645.35 70 1],[676.145 8 1],[684.405 25 1],[719.14 20 1],[738.779 10 1],[739.86 20 0],[740.862 1 1],[768.53 30 0],[774.18 13 1],[775.497 100 0]}{500}%
+\wl@elt@search{#1}{Sb}{[385.022 20 1],[403.355 200 0],[403.356 20 1],[413.363 20 1],[414.054 15 1],[419.517 15 1],[421.907 20 1],[431.432 20 1],[434.483 12 1],[441.142 12 1],[444.648 12 1],[450.692 12 1],[451.45 15 1],[459.69 30 1],[459.909 20 1],[460.477 15 1],[464.732 30 1],[467.574 20 1],[471.126 40 1],[473.544 12 1],[475.781 20 1],[476.536 20 1],[476.691 12 1],[478.403 30 1],[480.201 20 1],[483.282 20 1],[487.724 20 1],[494.74 15 1],[504.456 15 1],[516.632 12 1],[517.655 15 1],[523.894 20 1],[535.424 20 1],[546.408 15 1],[549.032 30 0],[555.61 40 0],[556.813 15 1],[560.219 30 0],[563.202 100 0],[563.975 30 1],[583.034 60 0],[589.509 15 1],[600.521 100 1],[605.341 20 1],[607.98 30 1],[613.004 50 1],[615.494 20 1],[630.276 12 1],[661.149 20 0],[664.744 30 1],[668.801 15 1],[680.667 6 1],[764.828 30 0],[426.509 40 2],[435.216 50 2],[459.189 30 2],[469.291 30 2],[524.771 1 2],[569.08 1 2],[571.73 1 2],[584.55 3 2],[624.67 5 2],[628.76 3 2]}{200}%
+\wl@elt@search{#1}{Te}{[380.092 20 1],[390.567 20 1],[391.854 20 1],[393.149 30 1],[394.798 20 1],[396.922 40 1],[397.594 25 1],[398.177 20 1],[400.652 50 1],[401.169 20 1],[402.973 30 1],[404.717 40 1],[404.888 30 1],[407.348 15 1],[410.104 30 1],[412.732 70 1],[416.355 30 1],[416.977 100 1],[417.929 30 1],[421.131 25 1],[422.573 80 1],[424.647 30 1],[425.115 20 1],[426.111 100 1],[426.436 30 1],[427.343 60 1],[428.585 80 1],[432.09 40 1],[436.128 30 1],[436.4 150 1],[437.712 30 1],[438.51 75 1],[439.6 60 1],[447.863 170 1],[453.707 80 1],[455.778 100 1],[463.062 70 1],[464.112 100 1],[465.437 180 1],[468.691 200 1],[469.638 100 1],[470.653 100 1],[476.605 100 1],[477.156 70 1],[478.487 100 1],[482.714 100 1],[483.128 150 1],[484.29 150 1],[486.512 130 1],[486.624 200 1],[488.522 80 1],[490.444 80 1],[496.188 60 1],[500.082 60 1],[508.3 8 0],[514.87 7 0],[544.984 50 1],[548.795 50 1],[557.635 150 1],[564.926 150 1],[566.62 100 1],[570.812 200 1],[573.35 7 0],[575.585 150 1],[578.91 8 0],[593.615 50 1],[597.468 100 1],[627.35 8 0],[634.97 8 0],[636.713 50 1],[640.59 8 0],[645.67 7 0],[661.34 8 0],[664.858 10 1],[666.02 8 0],[669 8 0],[679 10 0],[683.76 20 0],[685.47 20 0],[701.606 10 1],[703.913 10 1],[719.11 15 0],[723.662 10 1],[726.35 20 0],[728.09 8 0],[728.926 10 1],[744.539 10 1],[746.098 12 1],[746.875 15 1],[748.126 10 1],[755.68 10 0],[768.861 6 1],[775.91 15 0]}{200}%
+\wl@elt@search{#1}{I}{[410.223 200 0],[412.921 200 0],[413.415 100 0],[432.184 500 0],[445.286 300 1],[459.977 200 1],[463.245 300 1],[466.648 500 1],[467.553 1000 1],[476.331 250 0],[486.232 1000 0],[491.694 200 0],[498.692 1000 1],[506.537 400 1],[511.929 10000 0],[514.973 200 1],[516.12 3000 1],[517.619 300 1],[521.627 600 1],[522.897 500 1],[523.457 1000 0],[524.571 3000 1],[526.936 500 1],[529.978 400 1],[532.28 400 1],[533.822 10000 1],[534.515 5000 1],[536.986 1000 1],[540.542 800 1],[540.736 800 1],[542.706 600 0],[543.583 3000 1],[543.8 1000 1],[546.462 2000 1],[549.15 800 1],[549.694 1000 1],[550.472 1000 1],[552.206 600 1],[559.852 600 1],[560.032 1000 1],[561.289 1500 1],[562.569 10000 1],[567.808 1000 1],[569.091 2000 1],[570.205 500 1],[571.053 4000 1],[573.827 1000 1],[576.072 1000 1],[576.433 1000 0],[577.483 500 1],[578.702 500 1],[589.403 2000 0],[595.025 5000 1],[598.486 300 0],[602.408 2000 0],[606.893 500 1],[607.498 2000 1],[608.243 1000 0],[612.749 2000 1],[619.188 800 0],[620.486 1000 1],[621.31 500 0],[624.448 800 0],[625.749 900 1],[629.398 1000 0],[631.313 500 0],[633.037 800 0],[633.35 400 0],[633.785 2000 0],[633.944 1000 0],[635.916 500 0],[656.649 1000 0],[658.375 2000 0],[658.527 1000 0],[661.966 5000 0],[666.111 500 0],[666.596 600 1],[669.729 500 0],[671.883 300 1],[673.203 400 0],[681.257 4000 1],[695.878 1000 1],[698.978 500 0],[708.521 200 1],[712.005 500 0],[712.205 1200 0],[714.206 2000 0],[716.479 1000 0],[719.166 400 0],[722.73 700 0],[723.678 1000 0],[723.784 500 0],[735.135 500 1],[740.206 5000 0],[741.05 1000 0],[741.648 500 0],[746.899 5000 0],[749.052 500 0],[755.418 2000 0],[755.665 500 0],[770.02 2000 0],[779.898 500 1],[396.316 3 2],[407.714 3 2]}{10000}%
+\wl@elt@search{#1}{Xe}{[390.791 100 1],[403.759 100 1],[405.746 200 1],[409.889 100 1],[415.804 200 1],[418.01 1000 1],[419.315 500 1],[420.848 300 1],[420.947 100 1],[421.372 300 1],[421.56 100 1],[422.3 300 1],[423.825 400 1],[424.538 500 1],[425.157 100 1],[429.64 500 1],[431.051 500 1],[433.052 1000 1],[436.92 200 1],[437.378 100 1],[439.32 500 1],[439.577 500 1],[440.688 200 1],[441.607 150 1],[444.813 500 1],[446.219 1000 1],[448.086 500 1],[452.186 100 1],[473.4152 600 0],[479.2619 150 0],[480.702 500 0],[482.971 400 0],[484.329 300 0],[491.651 500 0],[492.3152 500 0],[497.171 200 1],[497.271 400 1],[498.877 300 1],[499.117 100 1],[502.828 200 0],[504.492 200 1],[508.062 1000 1],[512.242 300 1],[512.57 100 1],[517.882 100 1],[518.804 300 1],[519.137 400 1],[519.21 100 1],[526.044 500 1],[526.195 500 1],[529.222 2000 1],[530.927 300 1],[531.387 1000 1],[533.933 2000 1],[536.32 200 1],[536.807 200 1],[537.239 500 1],[539.28 100 0],[541.915 3000 1],[543.896 800 1],[544.545 300 1],[545.045 200 1],[546.039 400 1],[547.261 1000 1],[549.486 100 1],[552.553 200 1],[553.107 600 1],[556.662 100 0],[561.667 300 1],[565.938 300 1],[566.756 600 1],[567.091 150 1],[569.575 100 0],[569.961 200 1],[571.61 200 1],[572.691 500 1],[575.103 500 1],[575.865 300 1],[577.639 300 1],[581.596 100 1],[582.389 300 0],[582.48 150 0],[587.502 100 0],[589.329 300 1],[589.499 100 0],[590.513 200 1],[593.417 100 0],[594.553 500 1],[597.113 300 1],[597.646 2000 1],[600.892 200 1],[603.62 1000 1],[605.115 2000 1],[609.35 600 1],[609.759 1500 1],[610.143 400 1],[611.508 100 1],[614.645 100 1],[617.83 150 0],[617.966 120 0],[618.242 300 0],[619.407 500 1],[619.826 100 0],[622.002 100 1],[627.082 500 1],[627.754 400 1],[628.441 100 1],[628.601 100 0],[630.086 250 1],[631.806 500 0],[634.396 400 1],[635.635 600 1],[637.528 200 1],[639.799 100 1],[646.97 300 0],[647.284 150 0],[648.776 120 0],[649.872 100 0],[650.418 200 0],[651.283 300 1],[652.865 200 1],[653.316 100 0],[659.501 1000 1],[659.556 100 0],[659.725 400 1],[659.884 100 1],[666.892 150 0],[669.432 300 1],[672.801 200 0],[678.871 150 1],[679.037 100 1],[680.574 1000 1],[682.732 200 0],[687.211 100 0],[688.216 300 0],[691.022 80 1],[692.553 100 0],[694.211 800 1],[697.618 100 0],[699.088 2000 1],[708.215 150 1],[711.96 500 0],[714.75 50 1],[714.903 200 1],[716.483 500 1],[728.434 100 1],[730.18 200 1],[733.93 200 1],[738.6 100 0],[739.379 150 0],[754.845 300 1],[758.468 200 0],[761.857 80 1],[764.202 500 0],[764.391 100 0],[767.066 200 1],[778.704 60 1],[384.15 100 2],[387.78 200 2],[388.05 60 2],[392.255 500 2],[395.059 300 2],[405.007 200 2],[406.04 60 2],[410.91 100 2],[414.57 100 2],[428.59 30 2],[443.42 50 2],[446.21 100 2],[456.91 100 2],[457.01 100 2],[464.14 100 2],[467.37 30 2],[468.357 60 2],[472.36 30 2],[475.73 100 2],[486.95 40 2],[523.9 60 2],[536.71 30 2],[540.1 50 2],[552.44 40 2],[620.597 60 2],[622.17 25 2],[623.82 60 2],[625.905 60 2]}{3000}%
+\wl@elt@search{#1}{Cs}{[380.51 500 1],[387.016 15 1],[387.6143 150 0],[388.8608 80 0],[389.698 1000 1],[390.693 350 1],[392.558 500 1],[395.95 350 1],[396.519 500 1],[397.8 150 1],[404.718 350 1],[405.396 200 1],[406.796 500 1],[406.877 500 1],[407.336 70 1],[411.929 60 1],[412.121 500 1],[413.2 100 1],[415.127 350 1],[415.861 350 1],[419.32 60 1],[421.313 500 1],[422.112 200 1],[423.219 500 1],[423.441 350 1],[424.197 100 1],[427.174 100 1],[427.71 2000 1],[428.835 1000 1],[429.2 200 1],[430.064 500 1],[430.794 50 1],[432.758 50 1],[433.024 350 1],[436.328 2000 1],[437.302 500 1],[438.443 400 1],[438.876 100 1],[439.691 200 1],[439.95 350 1],[440.385 350 1],[440.525 1000 1],[441.021 350 1],[442.405 100 1],[443.571 350 1],[444.4 100 1],[445.344 200 1],[445.768 200 1],[445.918 200 1],[449.366 100 1],[450.152 1000 1],[450.671 200 1],[450.683 100 1],[451.55 100 1],[452.285 150 1],[452.672 1000 1],[453.894 800 1],[455.5276 400 0],[456.698 150 1],[457.179 150 1],[459.3169 200 0],[460.376 2500 1],[460.999 100 1],[461.613 150 1],[462.309 350 1],[464.651 500 1],[465.654 150 1],[467.028 350 1],[469.561 100 1],[470.179 500 1],[473.298 350 1],[473.966 350 1],[474.913 100 1],[476.362 500 1],[478.636 200 1],[483.016 800 1],[487.002 800 1],[495.284 800 1],[497.259 500 1],[504.38 800 1],[505.27 500 1],[505.987 500 1],[508.177 100 1],[509.66 400 1],[522.7 1500 1],[524.937 800 1],[527.404 400 1],[530.661 350 1],[534.916 350 1],[537.097 800 1],[541.969 500 1],[546.5944 5 0],[550.2884 5 0],[556.302 1000 1],[563.5212 11 0],[566.4018 30 0],[574.5724 8 0],[581.418 350 1],[583.116 500 1],[583.8835 5 0],[584.5141 30 0],[592.565 500 1],[601.049 80 0],[603.4089 30 0],[612.862 400 1],[621.31 120 0],[621.7599 15 0],[635.4555 50 0],[641.954 100 1],[643.1969 15 0],[647.2623 15 0],[649.553 200 1],[653.644 200 1],[658.602 30 0],[658.651 200 0],[662.866 35 0],[672.3284 200 0],[682.4652 100 0],[687.0455 100 0],[695.552 400 1],[697.3297 200 0],[698.3491 35 0],[722.8536 200 0],[727.99 60 0],[727.9957 200 0],[760.8903 150 0]}{2500}%
+\wl@elt@search{#1}{Ba}{[381.669 200 1],[384.28 200 1],[385.476 100 1],[388.933 20 0],[389.178 1400 1],[389.265 20 0],[390.991 40 0],[391.473 500 1],[393.572 50 0],[393.787 20 0],[393.967 200 1],[394.951 500 1],[399.34 80 0],[399.566 30 0],[403.626 300 1],[408.377 200 1],[408.486 30 0],[413.066 1500 1],[413.243 20 0],[416.6 200 1],[421.604 500 1],[426.795 800 1],[428.31 100 0],[428.78 300 1],[429.76 200 1],[430.932 800 1],[432.3 20 0],[432.573 600 1],[432.674 200 1],[432.962 300 1],[435.033 80 0],[440.254 60 0],[440.523 400 1],[443.189 40 0],[448.898 60 0],[449.364 50 0],[450.592 40 0],[450.963 200 1],[452.317 60 0],[452.493 130 1],[455.403 65000 1],[457.385 40 0],[457.964 80 0],[459.975 30 0],[461.992 20 0],[462.833 25 0],[464.41 300 1],[467.362 30 0],[469.162 35 0],[470.043 20 0],[470.894 800 1],[472.644 40 0],[484.346 800 1],[484.714 300 1],[485.084 200 1],[487.765 30 0],[489.997 400 1],[490.29 15 0],[493.409 20000 1],[494.735 8 0],[495.715 1000 1],[499.781 300 1],[501.3 1000 1],[515.994 20 0],[526.703 20 0],[536.135 800 1],[539.16 1000 1],[542.105 200 1],[542.455 100 0],[542.879 200 1],[548.03 300 1],[551.905 200 0],[553.548 1000 0],[562.04 20 0],[568.018 10 0],[577.762 400 0],[578.418 800 1],[580.023 100 0],[580.569 20 0],[582.628 150 0],[585.368 2800 1],[590.764 15 0],[597.17 100 0],[598.125 800 1],[599.709 100 0],[599.985 300 1],[601.947 100 0],[606.312 200 0],[611.078 300 0],[613.583 400 1],[614.172 20000 1],[634.168 150 0],[637.891 500 1],[645.085 90 0],[648.291 150 0],[649.69 12000 1],[649.876 300 0],[652.731 150 0],[659.533 3000 0],[665.41 150 0],[667.527 1500 0],[669.384 1800 0],[676.962 1000 1],[686.569 600 0],[686.785 300 0],[687.409 1000 1],[705.994 6000 0],[712.033 2400 0],[719.524 600 0],[722.884 600 0],[728.03 3000 0],[739.241 1200 0],[741.753 300 0],[745.978 900 0],[748.808 600 0],[763.69 450 0],[764.291 600 0],[767.209 1800 0],[778.048 1200 0],[392.685 25 2],[399.306 25 2],[405.371 18 2],[469.744 15 2],[504.955 10 2],[509.754 10 2],[510.225 12 2],[513.454 10 2],[599.8 10 2],[610.199 13 2],[637.711 10 2],[638.376 10 2],[652.617 8 2],[709.549 8 2]}{65000}%
+\wl@elt@search{#1}{La}{[383.508 190 1],[384.072 600 1],[384.6 120 1],[384.902 1600 1],[385.491 130 1],[387.164 3400 1],[388.637 1700 1],[391.605 1300 1],[392.154 1100 1],[392.756 160 0],[392.922 2200 1],[393.622 180 1],[394.91 9000 1],[398.852 4400 1],[399.575 3600 1],[401.539 180 0],[402.588 250 1],[403.169 2800 1],[403.721 140 0],[404.291 3000 1],[405.008 320 1],[406.033 220 0],[406.479 160 0],[406.739 850 1],[407.671 110 1],[407.735 2800 1],[407.918 120 0],[408.672 5500 1],[408.961 180 0],[409.954 280 1],[410.487 110 0],[412.323 4400 1],[413.704 110 0],[414.174 550 1],[415.197 1100 1],[415.278 220 1],[416.026 100 0],[418.732 280 0],[419.236 280 1],[419.655 1500 1],[420.404 240 1],[421.756 300 1],[423.095 200 1],[423.838 1600 1],[424.999 140 1],[426.359 320 1],[426.95 480 1],[427.564 240 1],[428.027 300 0],[428.697 600 1],[429.605 600 1],[430.044 120 1],[432.251 440 1],[433.374 4600 1],[435.44 550 1],[436.467 110 1],[437.197 110 -1],[437.584 110 -1],[437.81 110 1],[438.344 280 1],[438.52 100 1],[441.824 220 -1],[442.317 160 -1],[442.39 160 0],[442.755 260 1],[442.81 100 -1],[442.99 2000 1],[443.298 160 -1],[443.801 100 -1],[445.215 100 0],[445.58 100 1],[452.237 850 1],[452.531 170 1],[452.612 420 1],[455.846 400 1],[455.929 110 1],[456.791 160 0],[457.002 200 0],[457.488 400 1],[458.006 200 1],[460.578 160 1],[461.339 410 1],[461.988 410 1],[464.528 110 1],[465.55 540 1],[466.251 360 1],[466.376 230 1],[466.891 200 1],[467.183 160 1],[469.25 230 1],[470.328 140 1],[471.644 170 1],[471.994 140 1],[472.842 230 1],[474.028 500 1],[474.309 390 1],[474.873 320 1],[476.689 160 0],[480.404 160 1],[480.901 160 1],[482.406 200 1],[486.091 320 1],[489.992 850 1],[492.098 1000 1],[492.179 1000 1],[493.483 140 1],[494.647 110 1],[494.977 370 0],[497.039 340 1],[498.683 370 1],[499.128 140 1],[499.947 720 1],[504.688 140 0],[505.057 210 0],[505.646 170 0],[510.623 200 0],[511.456 470 1],[512.299 470 1],[514.542 450 0],[515.674 180 1],[515.743 180 1],[515.869 290 0],[516.362 120 1],[517.731 580 0],[518.342 850 1],[518.822 260 1],[520.415 170 1],[521.186 720 0],[523.427 520 0],[525.346 340 0],[525.939 110 1],[527.119 370 0],[529.084 140 1],[530.198 370 1],[530.262 140 1],[530.355 180 1],[534.067 110 1],[535.786 110 0],[537.709 130 1],[538.099 140 1],[545.515 500 0],[550.134 470 0],[560.25 110 -1],[563.122 160 0],[564.825 240 0],[565.772 130 0],[574.066 180 0],[574.441 160 0],[576.184 160 0],[576.907 160 1],[576.934 370 0],[578.924 320 0],[579.134 450 0],[579.758 220 1],[580.578 160 1],[582.199 140 0],[593.062 320 0],[624.993 720 0],[626.23 260 1],[629.609 180 1],[632.039 160 1],[632.591 110 0],[639.048 170 1],[639.423 450 0],[641.099 210 0],[645.599 250 0],[652.699 110 1],[654.316 130 0],[657.851 140 0],[670.95 180 0],[677.426 120 1],[701.122 13 -1],[702.367 75 0],[703.205 26 0],[704.084 26 -1],[704.596 110 0],[705.48 13 -1],[706.623 160 1],[706.837 65 0],[707.079 21 -1],[707.638 13 0],[708.54 21 -1],[710.102 26 -1],[711.68 10 1],[713.158 19 -1],[714.977 10 0],[715.808 40 0],[716.125 50 0],[716.26 10 -1],[721.991 21 0],[725.716 10 -1],[727.009 26 0],[727.03 10 0],[728.234 110 1],[732.091 10 0],[733.418 110 0],[734.534 65 0],[737.971 50 -1],[738.008 85 -1],[738.273 35 0],[740.352 110 -1],[740.375 210 -1],[741.134 50 -1],[743.428 65 -1],[743.436 110 -1],[744.292 30 -1],[746.308 50 0],[746.525 50 -1],[746.548 95 -1],[748.35 75 1],[749.65 40 -1],[749.678 95 -1],[749.883 50 0],[750.679 30 -1],[752.821 19 -1],[752.839 50 -1],[753.359 30 0],[753.923 85 0],[756.009 35 -1],[759.226 35 -1],[761.294 19 1],[762.499 19 -1],[766.434 21 0],[412.924 3 2],[413.743 5 2],[448.297 200 2],[449.905 300 2],[514.573 5 2],[515.841 8 2],[546.781 6 2],[549.19 55 2],[551.172 2 2],[551.819 1 2],[552.954 45 2],[574.409 1 2],[577.814 200 2],[581.345 2 2],[587.563 3 2],[588.862 55 2],[593.271 3 2],[601.711 2 2],[605.584 20 2],[611.925 35 2],[614.199 120 2],[622 55 2],[634.821 60 2],[427.076 2000 3],[454.98 1500 3],[483.689 500 3]}{9000}%
+\wl@elt@search{#1}{Ce}{[380.152 2500 1],[380.309 800 1],[380.811 1000 1],[380.921 490 1],[381.22 250 1],[381.585 490 1],[381.746 470 1],[381.902 300 1],[382.39 470 1],[383.055 470 1],[383.108 490 1],[383.455 490 1],[383.61 270 1],[383.854 1100 1],[384.376 200 1],[384.652 220 1],[384.81 250 1],[384.859 860 1],[385.315 860 1],[385.418 1200 1],[385.431 1200 1],[385.529 620 1],[385.702 390 1],[385.764 370 1],[386.246 200 1],[386.813 200 1],[387.468 270 1],[387.697 620 1],[387.836 1100 1],[388.245 1500 1],[388.998 1000 1],[389.075 210 1],[389.098 210 1],[389.511 620 1],[389.68 590 1],[389.827 490 1],[389.894 270 1],[390.334 200 1],[390.434 250 1],[390.692 200 1],[390.729 770 1],[390.841 560 1],[390.854 390 1],[390.931 270 1],[391.219 230 1],[391.244 980 1],[391.552 390 1],[391.614 390 1],[391.764 230 1],[391.828 770 1],[391.981 480 1],[392.173 590 1],[392.311 560 1],[392.464 450 1],[393.109 770 1],[393.137 310 1],[393.183 230 1],[393.373 310 1],[393.809 560 1],[394.034 770 1],[394.097 310 1],[394.215 2000 1],[394.275 2700 1],[394.389 770 1],[394.797 310 1],[395.254 3100 1],[395.366 340 1],[395.536 310 1],[395.606 230 1],[395.628 980 1],[395.827 230 1],[395.887 230 1],[396.091 770 1],[396.45 390 1],[396.705 770 1],[397.168 450 1],[397.207 270 1],[397.507 270 1],[397.865 770 1],[398.088 560 1],[398.289 560 1],[398.329 310 1],[398.468 770 1],[398.944 370 1],[399.239 700 1],[399.291 370 1],[399.382 910 1],[399.924 2800 1],[400.156 230 1],[400.377 910 1],[400.564 370 1],[400.759 210 1],[401.239 2700 1],[401.49 910 1],[401.588 250 1],[401.904 200 1],[402.227 240 1],[402.449 840 1],[402.515 240 1],[402.841 840 1],[403.034 250 1],[403.134 840 1],[403.767 340 1],[404.076 2100 1],[404.258 910 1],[404.521 230 1],[404.634 620 1],[405.143 210 1],[405.199 210 1],[405.351 700 1],[405.499 450 1],[406.222 280 1],[406.294 230 1],[406.728 280 1],[406.884 420 1],[407.181 1100 1],[407.292 270 1],[407.348 1800 1],[407.374 210 1],[407.571 1500 1],[407.585 1500 1],[407.624 210 1],[407.747 420 1],[407.832 530 1],[407.852 270 1],[408.044 270 1],[408.122 670 1],[408.323 910 1],[408.523 450 1],[408.736 250 1],[408.885 230 1],[410.177 450 1],[410.5 250 1],[410.742 510 1],[411.038 200 1],[411.139 250 1],[411.537 420 1],[411.701 250 1],[411.729 200 1],[411.759 200 1],[411.814 770 1],[411.902 250 1],[411.979 310 1],[411.988 310 1],[412.083 450 1],[412.324 510 1],[412.349 510 1],[412.387 980 1],[412.479 510 1],[412.737 980 1],[412.774 250 1],[412.807 200 1],[413.071 530 1],[413.11 480 1],[413.38 2700 1],[413.544 270 1],[413.747 270 1],[413.765 2000 1],[413.81 270 1],[413.835 210 1],[414.24 770 1],[414.449 390 1],[414.5 670 1],[414.623 480 1],[414.89 280 1],[414.979 420 1],[414.994 980 1],[415.091 420 1],[415.197 1400 1],[415.313 230 1],[415.903 450 1],[416.352 310 1],[416.561 1300 1],[416.688 620 1],[416.78 250 1],[416.977 320 1],[416.988 320 1],[417.67 340 1],[418.108 340 1],[418.533 340 1],[418.66 3500 1],[418.732 530 1],[419.309 560 1],[419.328 370 1],[419.387 370 1],[419.634 630 1],[419.8 280 1],[419.867 280 1],[419.872 840 1],[420.124 240 1],[420.294 910 1],[420.941 270 1],[421.404 370 1],[421.759 310 1],[422.26 1500 1],[422.775 770 1],[423.174 390 1],[423.421 240 1],[423.602 200 1],[423.992 980 1],[424.272 390 1],[424.589 310 1],[424.598 310 1],[424.672 390 1],[424.868 1100 1],[425.337 390 1],[425.579 620 1],[426.343 200 1],[427.019 620 1],[427.072 390 1],[427.886 200 1],[428.537 280 1],[428.866 200 1],[428.944 200 1],[428.994 2000 1],[429.607 200 1],[429.667 1500 1],[429.678 420 1],[429.936 590 1],[430.033 770 1],[430.514 420 1],[430.672 770 1],[430.974 390 1],[432.072 560 1],[433.045 310 1],[433.271 310 1],[433.623 240 1],[433.777 980 1],[433.931 340 1],[434.979 700 1],[435.271 560 1],[436.466 910 1],[437.382 350 1],[437.592 530 1],[438.217 910 1],[438.684 700 1],[438.801 310 1],[439.166 1700 1],[439.879 200 1],[439.92 510 1],[441.064 350 1],[441.076 350 1],[441.69 310 1],[441.878 980 1],[442.368 200 1],[442.707 310 1],[442.792 480 1],[442.844 310 1],[442.927 650 1],[444.439 480 1],[444.47 450 1],[444.934 770 1],[445.073 620 1],[446.021 2400 1],[446.114 450 1],[446.341 420 1],[446.754 280 1],[447.124 1400 1],[447.272 450 1],[447.936 700 1],[448.39 700 1],[448.691 840 1],[449.785 250 1],[450.641 100 0],[451.586 110 1],[451.959 100 1],[452.308 770 1],[452.735 840 1],[452.847 840 1],[453.249 110 1],[453.907 110 1],[453.975 840 1],[454.496 210 1],[455.13 250 1],[456.028 650 1],[456.096 310 1],[456.236 2100 1],[456.584 420 1],[457.228 1100 1],[458.25 420 1],[459.112 130 1],[459.393 840 1],[460.64 420 1],[462.49 420 1],[462.816 1700 1],[463.232 170 0],[465.051 110 0],[465.429 130 1],[466.95 110 1],[468.013 150 1],[468.461 270 1],[471.4 200 1],[471.481 100 1],[472.509 110 1],[473.352 100 1],[473.728 310 1],[473.953 100 1],[474.717 160 1],[475.784 110 1],[476.877 100 1],[477.394 230 1],[482.255 110 0],[484.777 140 0],[488.246 180 1],[494.344 110 0],[497.15 130 1],[499.463 130 0],[500.91 210 0],[501.177 100 1],[502.287 120 1],[503.778 120 1],[504.085 120 0],[504.402 180 1],[507.178 120 0],[507.535 240 1],[507.968 470 1],[511.27 130 0],[511.717 160 1],[512.957 170 0],[514.757 110 1],[514.999 100 0],[515.969 280 0],[516.148 280 0],[517.455 190 0],[518.746 370 1],[519.166 210 1],[521.192 190 0],[522.346 260 0],[522.975 180 0],[523.292 140 1],[524.592 260 0],[526.571 130 1],[527.423 340 1],[529.656 130 0],[532.808 130 0],[533.054 190 1],[535.353 450 1],[539.34 300 1],[539.764 150 0],[540.923 280 1],[542.038 110 0],[544.924 140 0],[546.837 140 1],[547.229 140 1],[551.208 260 1],[555.625 110 0],[556.497 170 0],[556.597 130 0],[559.588 100 0],[560.128 240 0],[565.514 190 0],[566.996 240 0],[567.775 120 0],[569.294 120 0],[569.699 300 0],[569.923 370 0],[571.903 240 0],[577.312 140 0],[578.815 120 0],[581.292 120 0],[594.086 230 0],[600.018 11 0],[600.19 55 0],[600.586 55 0],[600.62 15 0],[600.682 55 0],[600.737 19 0],[601.342 75 0],[601.659 23 0],[602.42 110 0],[602.716 15 0],[603.126 11 0],[603.358 23 1],[603.42 35 1],[603.441 23 0],[603.549 35 1],[604.339 110 1],[604.542 28 0],[604.74 55 0],[605.18 19 1],[605.75 23 0],[605.8 35 0],[606.675 23 0],[606.946 19 0],[606.948 35 0],[607.2 35 0],[607.661 35 0],[607.716 17 0],[608.037 17 0],[608.128 17 0],[608.886 19 0],[608.896 19 0],[609.319 35 0],[609.834 45 1],[609.98 11 0],[610.874 28 1],[611.856 15 0],[611.89 17 0],[612.367 45 0],[613.2 19 1],[613.218 19 0],[613.545 11 0],[613.903 23 0],[614.292 15 0],[614.336 35 1],[614.643 23 0],[614.784 19 0],[615.172 23 0],[615.982 19 0],[616.214 19 0],[616.545 19 0],[617.528 19 0],[618.617 35 0],[618.797 15 0],[619.523 15 0],[619.553 19 0],[619.805 19 0],[620.898 35 0],[621.682 11 0],[622.894 35 0],[622.913 19 0],[623.245 23 1],[623.745 28 0],[623.871 13 0],[624.187 11 0],[624.291 13 0],[625.365 15 0],[625.799 13 0],[626.427 15 0],[627.205 45 1],[627.647 15 0],[629.558 35 0],[629.951 28 1],[630.021 23 0],[630.664 13 0],[631.001 35 0],[633.54 15 0],[633.721 11 0],[634.07 13 0],[634.395 35 1],[637.111 35 1],[638.684 28 0],[639.302 23 1],[639.516 11 0],[642.529 11 1],[643.007 35 0],[643.439 19 0],[643.64 23 0],[644.612 19 0],[645.803 35 0],[646.688 19 1],[646.739 28 0],[647.372 35 0],[649.097 17 0],[650.327 11 1],[650.716 11 1],[651.359 23 1],[651.731 19 0],[655.17 19 0],[655.565 45 0],[657.91 23 0],[660.635 15 0],[660.686 15 1],[661.206 22 0],[662.3 10 0],[662.893 30 0],[665.089 13 0],[665.272 22 1],[666.141 10 0],[666.559 13 0],[667.554 10 1],[668.66 15 0],[670.066 26 0],[670.427 35 0],[670.452 13 1],[670.604 10 1],[672.871 15 0],[672.957 15 0],[674.47 15 1],[674.69 10 0],[677.428 30 1],[677.559 35 0],[677.828 10 0],[680.781 18 0],[680.882 10 0],[681.823 15 0],[682.973 10 1],[684.725 13 0],[685.655 12 0],[689.366 10 0],[689.845 10 1],[692.481 30 0],[693.945 10 0],[697.35 19 1],[698.382 10 1],[698.602 30 0],[705.451 12 0],[705.868 11 1],[706 11 0],[706.175 35 1],[706.449 11 0],[708.635 35 1],[710.504 11 1],[711.508 11 1],[712.473 10 0],[714.142 16 0],[715.023 19 1],[715.167 10 0],[715.525 16 0],[715.699 16 1],[718.94 16 1],[719.172 10 0],[720.156 11 1],[720.189 16 0],[720.355 10 0],[721.067 12 0],[721.736 19 0],[723.571 16 1],[723.836 22 1],[724.173 12 0],[725.275 25 0],[726.264 12 0],[727.79 11 0],[729.617 11 0],[730.142 19 1],[731.345 19 1],[732.991 25 0],[733.468 16 1],[734.344 12 0],[739.777 25 0],[740.127 11 0],[741.794 12 1],[742.47 11 -1],[743.308 12 0],[743.856 11 0],[744.444 12 0],[747.241 10 0],[748.657 16 1],[752.746 11 0],[752.768 11 0],[753.373 10 0],[755.125 10 0],[756.244 12 0],[756.286 10 0],[756.36 10 0],[760.31 10 0],[761.611 25 1],[764.608 12 0],[764.788 10 0],[768.247 12 0],[768.917 25 1],[773.233 10 0],[774.835 16 0],[779.77 10 0],[393.68 800 2],[395.71 300 2],[416.942 500 2],[419.17 300 2],[419.483 500 2],[421.326 300 2],[421.713 300 2],[428.477 400 2],[430.471 300 2],[434.635 600 2],[438.997 400 2],[444.832 600 2],[448.527 500 2],[452.192 1000 2],[453.573 1000 2],[457.69 300 2],[462.76 500 2],[476.607 300 2],[497.645 500 2],[565.097 500 2],[566.42 1000 2],[569.108 500 2],[571.059 300 2],[574.947 500 2],[594.983 500 2],[596.222 2000 2],[596.271 500 2],[597.956 400 2],[598.34 1000 2],[600.263 3000 2],[603.254 10000 2],[606.091 10000 2],[606.179 500 2],[609.735 500 2],[609.887 500 2],[613.51 500 2],[628.779 300 2],[630.816 500 2],[634.175 300 2],[694.494 1000 2],[773.904 700 2],[775.827 300 2]}{10000}%
+\wl@elt@search{#1}{Pr}{[380.03 680 1],[380.484 290 1],[380.918 140 1],[381.184 390 1],[381.602 1300 1],[381.766 120 1],[381.828 680 1],[381.914 120 1],[382.18 310 1],[382.318 150 1],[382.667 120 1],[383.072 960 1],[383.493 140 1],[384.099 480 1],[384.234 270 1],[384.454 150 1],[384.659 580 1],[385.079 1200 1],[385.155 720 1],[385.28 960 1],[385.825 120 1],[385.914 110 1],[386.545 480 1],[386.752 210 1],[387.072 210 1],[387.619 480 1],[387.718 1700 1],[387.92 270 1],[388.047 680 1],[388.519 440 1],[388.934 440 1],[389.171 120 1],[389.725 190 1],[389.884 210 1],[390.245 250 1],[390.805 770 1],[391.29 630 1],[391.355 310 1],[391.476 210 1],[391.885 1300 1],[391.963 420 1],[392.053 250 1],[392.547 960 1],[392.746 480 1],[392.929 370 1],[393.582 370 1],[393.83 250 1],[394.763 730 1],[394.943 900 1],[395.351 900 1],[395.675 380 1],[395.944 190 0],[396.245 470 1],[396.426 560 1],[396.481 1600 1],[396.657 560 1],[397.116 500 1],[397.167 320 1],[397.214 620 1],[397.485 320 1],[398.968 1300 1],[399.191 230 1],[399.216 340 1],[399.479 1600 1],[399.583 270 1],[399.704 560 1],[399.796 230 1],[399.912 320 1],[400.017 620 1],[400.47 730 1],[400.869 1900 1],[401.06 620 1],[401.539 730 1],[402.096 620 1],[402.271 470 1],[402.554 360 1],[402.683 230 1],[402.9 230 1],[402.972 360 1],[403.175 730 1],[403.247 230 1],[403.383 960 1],[403.433 230 1],[403.822 230 1],[403.845 730 1],[403.934 470 1],[404.481 1300 1],[404.57 230 1],[404.663 230 1],[404.708 340 1],[405.113 450 1],[405.488 2200 1],[405.654 2200 1],[405.88 450 1],[406.222 230 1],[406.281 3400 1],[406.88 210 1],[407.977 500 1],[408.098 500 1],[408.185 790 1],[408.334 500 1],[408.721 200 1],[409.682 560 1],[409.84 380 1],[410.072 2900 1],[411.389 270 1],[411.846 1700 1],[412.915 250 1],[413.077 340 1],[413.361 200 1],[414.122 1500 1],[414.311 2700 1],[414.65 270 1],[414.844 270 1],[415.65 200 1],[416.416 1700 1],[416.804 270 1],[416.945 230 1],[417.182 620 1],[417.225 730 1],[417.532 250 1],[417.562 250 1],[417.863 200 1],[417.939 5200 1],[418.948 2500 1],[419.16 560 1],[420.117 290 1],[420.672 2500 1],[420.832 500 1],[421.186 320 1],[421.781 320 1],[422.293 3800 1],[422.535 3800 1],[423.311 320 1],[423.615 320 1],[424.002 270 1],[424.101 960 1],[424.351 340 1],[424.763 840 1],[425.44 500 1],[426.378 270 1],[426.909 320 1],[427.227 790 1],[428.007 470 1],[428.242 790 1],[429.898 450 1],[430.361 290 1],[430.576 1500 1],[432.355 210 1],[432.941 270 1],[433.397 1300 1],[433.574 200 1],[433.87 360 1],[434.43 620 1],[434.749 470 1],[435.04 340 1],[435.491 450 1],[435.979 410 1],[436.833 1200 1],[437.162 320 1],[439.608 270 1],[440.36 170 1],[440.512 100 1],[440.583 430 1],[440.882 1700 1],[441.377 410 1],[441.904 160 1],[441.965 190 1],[442.122 160 1],[442.458 160 1],[442.913 1200 1],[443.228 110 1],[444.983 730 1],[445.19 140 1],[445.468 140 1],[446.597 100 1],[446.866 960 1],[447.726 140 1],[449.646 1100 1],[451.015 790 1],[451.758 200 1],[453.415 340 1],[453.592 340 1],[456.312 200 1],[461.208 140 1],[462.874 270 1],[463.228 140 0],[463.568 140 0],[463.955 200 0],[464.349 110 1],[464.605 140 1],[465.15 200 1],[466.465 140 1],[467.209 270 1],[468.78 180 0],[469.577 290 0],[470.807 140 1],[470.952 140 0],[473.067 180 0],[473.669 250 0],[474.416 100 0],[474.692 150 1],[476.272 100 1],[478.335 110 1],[490.699 110 0],[491.402 140 0],[492.46 200 0],[493.6 140 0],[493.974 320 0],[494.03 160 0],[495.137 380 0],[497.575 110 0],[501.859 120 0],[501.976 200 0],[502.696 200 0],[503.338 100 0],[503.441 270 1],[504.383 110 0],[504.552 320 0],[505.34 160 0],[508.712 180 0],[511.038 360 1],[511.076 560 1],[512.952 410 1],[513.344 270 0],[513.514 270 1],[513.981 100 0],[515.23 100 1],[516.174 200 1],[517.39 620 1],[519.132 200 1],[519.443 120 0],[519.511 150 1],[519.531 200 1],[520.655 360 1],[520.79 150 1],[521.905 360 1],[522.011 560 1],[522.797 110 0],[525.973 680 1],[526.388 180 1],[529.202 340 1],[529.262 340 1],[529.809 230 1],[532.276 430 1],[535.24 200 1],[550.15 16 0],[550.879 40 1],[550.915 65 1],[551.163 16 1],[551.358 55 1],[551.512 28 1],[551.938 13 1],[552.031 20 1],[552.279 45 1],[552.415 28 0],[552.591 28 1],[552.793 16 0],[553.021 13 0],[553.116 45 0],[553.517 150 1],[553.837 28 0],[553.878 20 1],[554.501 55 1],[554.833 20 1],[555.342 11 1],[556.146 22 1],[556.206 45 0],[556.552 13 0],[556.691 13 1],[557.183 45 1],[557.461 11 1],[557.881 11 0],[558.235 13 1],[558.402 11 1],[559.492 22 0],[559.729 22 1],[560.13 13 1],[560.565 90 1],[560.668 13 0],[560.893 28 1],[561.022 55 1],[562.006 11 1],[562.026 20 0],[562.189 45 1],[562.305 110 1],[562.445 90 1],[563.303 11 0],[563.646 22 1],[563.879 55 1],[564.037 16 1],[564.316 16 0],[564.541 22 1],[565.423 35 1],[565.984 55 1],[566.157 35 0],[566.219 16 1],[566.846 65 0],[566.955 45 1],[566.999 35 1],[567.414 16 1],[567.703 16 1],[568.189 55 1],[568.56 13 1],[568.652 16 0],[568.717 22 1],[568.844 65 1],[568.921 22 1],[569.097 55 1],[569.59 22 1],[570.438 22 0],[570.761 65 0],[571.163 40 1],[571.383 22 1],[571.608 16 1],[571.908 45 1],[571.963 45 1],[572.838 11 0],[573.188 40 1],[574.713 20 1],[574.774 11 0],[574.795 11 1],[575.302 22 1],[575.617 90 1],[575.94 16 1],[576.02 22 0],[576.916 22 1],[576.979 16 1],[577.316 45 1],[577.591 11 1],[577.729 16 1],[577.928 90 0],[578.528 65 1],[578.617 65 1],[578.829 16 1],[578.892 16 1],[579.086 16 1],[579.136 45 1],[579.295 22 0],[581.058 40 1],[581.355 16 1],[581.517 160 1],[581.857 55 1],[582.062 40 1],[582.136 16 0],[582.259 55 1],[582.372 90 1],[583.094 45 1],[583.513 40 0],[584.465 35 1],[584.498 40 1],[584.713 65 1],[585.064 65 1],[585.263 45 1],[585.444 11 0],[585.607 45 1],[585.69 55 1],[585.968 90 1],[586.883 80 1],[587.383 22 1],[587.472 35 0],[587.81 35 0],[587.904 35 0],[587.925 80 1],[588.472 35 0],[589.223 55 1],[589.422 22 1],[590.311 40 1],[590.445 45 1],[590.867 40 1],[591.531 11 0],[591.597 11 0],[592.076 40 0],[593.066 40 1],[593.633 16 1],[593.99 160 1],[594.072 65 1],[594.165 22 0],[594.716 35 1],[594.976 22 0],[595.127 55 1],[595.176 20 1],[595.66 90 1],[595.925 13 0],[596.218 20 0],[596.3 28 0],[596.782 110 1],[597.695 13 0],[597.888 13 0],[598.119 65 1],[598.614 40 0],[598.714 45 0],[599.127 13 0],[599.489 13 0],[599.606 11 0],[600.244 29 1],[600.633 90 1],[600.854 13 0],[601.648 55 1],[601.78 150 1],[601.985 28 0],[602.572 150 1],[604.287 35 1],[604.666 55 1],[604.926 35 0],[605.004 28 1],[605.088 11 0],[605.513 140 0],[606.727 13 1],[608.581 13 0],[608.616 28 1],[608.752 65 1],[609.038 20 1],[609.309 28 1],[609.628 18 0],[610.672 22 1],[610.908 18 0],[611.438 65 1],[611.802 22 0],[612.215 22 0],[614.151 35 1],[614.823 65 0],[615.782 22 1],[615.91 13 1],[616.118 190 1],[616.538 18 0],[616.594 270 1],[618.234 55 1],[618.796 13 0],[619.745 35 1],[620.081 35 1],[620.563 13 1],[621.059 13 0],[621.273 22 0],[621.806 18 0],[623.68 20 0],[624.105 20 0],[624.435 45 1],[625.51 35 1],[626.255 40 1],[626.454 18 1],[627.466 22 1],[627.868 40 1],[628.128 110 1],[628.902 18 0],[629.801 11 0],[630.205 11 0],[630.235 35 1],[630.405 16 0],[630.523 35 1],[631.813 11 1],[632.236 45 0],[634.388 22 0],[634.711 28 1],[635.098 18 0],[635.72 22 0],[635.903 55 0],[636.362 11 1],[637.761 16 0],[637.859 16 0],[638.957 11 0],[639.199 18 0],[639.318 40 0],[639.796 45 1],[641.069 10 0],[641.123 55 0],[641.368 40 1],[641.543 10 0],[642.963 45 1],[643.184 45 1],[644.278 7 1],[644.391 9 1],[645.344 16 0],[645.484 9 1],[645.618 9 0],[646.019 9 0],[646.772 18 1],[647.526 9 1],[647.802 35 1],[648.655 45 0],[648.697 9 1],[649.175 40 0],[649.349 9 0],[649.489 11 0],[649.711 22 0],[649.894 18 1],[650.072 22 0],[650.409 9 0],[651.714 8 0],[651.879 16 1],[653.452 8 0],[654.047 16 0],[655.33 7 0],[656.462 22 1],[656.677 45 1],[657.103 7 0],[657.8 6 0],[658.456 6 1],[659.374 9 1],[659.548 11 0],[660.986 15 0],[661.667 55 0],[661.834 11 1],[663.1 7 0],[663.206 13 0],[664.712 14 0],[665.683 75 1],[667.341 55 1],[667.378 75 1],[668.751 5 1],[669.925 4 0],[673.679 13 0],[674.709 35 0],[674.919 19 0],[678.499 7 1],[679.86 55 0],[681.176 11 1],[681.287 17 1],[681.404 13 1],[681.761 9 0],[682.76 35 1],[683.05 19 1],[684.439 9 0],[684.547 9 1],[684.659 9 1],[685.046 17 1],[685.277 11 0],[687.044 11 0],[688.466 7 0],[689.271 8 0],[697.038 8 -1],[698.012 8 0],[702.151 40 1],[702.453 10 0],[704.24 13 0],[704.445 8 1],[705.107 7 0],[707.999 10 0],[709.518 11 0],[711.455 20 0],[711.69 10 0],[711.824 11 1],[713.733 7 1],[715.988 10 0],[716.777 7 1],[718.995 7 0],[720.885 10 1],[722.77 24 1],[723.153 13 0],[724.326 7 0],[725.921 7 0],[728.761 7 0],[728.919 7 0],[732.442 7 0],[732.847 7 0],[734.486 7 -1],[740.756 16 1],[745.174 20 1],[749.559 11 0],[749.942 6 0],[754.102 14 1],[757.486 6 0],[764.566 20 1],[770.498 7 1],[772.184 16 0],[778.616 6 1],[381.725 60 2],[386.18 60 2],[398.051 150 2],[400.02 200 2],[401.836 90 2],[402.96 180 2],[414.246 90 2],[414.448 120 2],[414.785 90 2],[417.215 90 2],[417.977 150 2],[418.418 180 2],[419.701 240 2],[421.945 120 2],[423.145 180 2],[427.507 180 2],[428.632 120 2],[429.827 90 2],[430.173 90 2],[431.634 90 2],[435.428 60 2],[437.982 90 2],[438.147 90 2],[440.471 120 2],[442.11 120 2],[443.185 120 2],[444.793 150 2],[445.014 180 2],[445.1 120 2],[446.102 120 2],[446.181 200 2],[450.031 300 2],[461.202 450 2],[462.518 600 2],[465.416 120 2],[471.37 600 2],[472.555 300 2],[472.821 270 2],[474.711 300 2],[477.183 300 2],[477.53 450 2],[485.739 600 2],[520.851 150 2],[526.168 150 2],[526.444 1000 2],[528.47 1500 2],[529.999 1500 2],[534.002 1500 2],[542.77 100 2],[558.174 100 2],[564.68 150 2],[576.527 600 2],[584.441 1500 2],[594.798 200 2],[595.605 7000 2],[599.894 900 2],[605.301 1500 2],[607.109 900 2],[609.002 9000 2],[616.024 5000 2],[616.122 1500 2],[619.505 100 2],[619.563 2000 2],[631.036 200 2],[636.165 100 2],[642.926 300 2],[644.474 300 2],[650.004 600 2],[650.149 300 2],[657.89 200 2],[661.646 100 2],[670.67 600 2],[672.763 100 2],[682.796 200 2],[685.463 100 2],[685.73 200 2],[686.68 1000 2],[689.906 1000 2],[690.352 500 2],[691.014 7000 2],[693.455 150 2],[697.096 500 2],[697.983 100 2],[703.039 5000 2],[707.521 100 2],[707.662 4500 2],[708.399 100 2],[711.253 500 2],[716.564 100 2],[723.162 250 2],[723.826 100 2],[724.021 250 2],[726.232 100 2],[734.069 150 2],[734.37 350 2],[734.975 200 2],[735.061 300 2],[735.552 100 2],[742.648 2000 2],[742.905 4000 2],[746.396 100 2],[748.74 250 2],[749.32 200 2],[751.117 100 2],[752.911 500 2],[754.92 100 2],[758.864 150 2],[759.641 300 2],[762.563 100 2],[764.834 100 2],[767.065 100 2],[767.465 200 2],[774.234 500 2],[774.559 250 2],[775.431 500 2],[775.548 100 2],[778.198 3000 2]}{9000}%
+\wl@elt@search{#1}{Nd}{[380.112 370 1],[380.138 200 1],[380.23 340 1],[380.347 1200 1],[380.41 200 1],[380.536 2500 1],[380.555 340 1],[380.723 470 1],[380.877 540 1],[380.906 440 1],[381.049 580 1],[381.106 240 1],[381.177 270 1],[381.253 200 1],[381.473 710 1],[381.97 240 1],[382.247 410 1],[382.642 1200 1],[382.8 240 1],[382.885 540 1],[382.916 440 1],[383.047 510 1],[383.654 740 1],[383.791 340 1],[383.898 1700 1],[383.951 340 1],[384.182 410 1],[384.824 1700 1],[384.852 1500 1],[385.022 470 1],[385.166 2400 1],[385.855 340 1],[386.094 270 1],[386.252 300 1],[386.333 3700 1],[386.652 240 1],[386.681 220 1],[386.907 850 1],[387.574 240 1],[387.587 470 1],[387.858 1100 1],[387.955 1000 1],[388.038 780 1],[388.078 1200 1],[388.159 200 -1],[388.787 540 1],[388.966 370 1],[388.993 1300 1],[389.058 1300 1],[389.094 1300 1],[389.151 580 1],[389.206 470 1],[389.463 810 1],[389.613 270 1],[389.763 440 1],[390.021 2000 1],[390.184 1300 1],[390.589 1700 1],[390.77 200 1],[390.784 510 1],[391.116 2000 1],[391.223 850 1],[391.369 340 1],[391.513 440 1],[391.595 610 1],[391.765 340 1],[391.992 220 1],[392.096 1100 1],[392.71 510 1],[392.926 200 1],[393.482 610 1],[393.611 410 1],[393.886 510 1],[394.151 2000 1],[395.116 2000 1],[395.22 810 1],[395.287 320 1],[395.352 320 1],[395.745 240 1],[395.8 590 1],[396.221 510 1],[396.312 1400 1],[396.39 270 1],[397.33 1100 1],[397.369 740 1],[397.685 740 1],[397.949 740 1],[398.236 320 1],[398.625 470 1],[399.01 1400 1],[399.174 1000 1],[399.468 1100 1],[400.05 410 1],[400.402 540 1],[400.743 410 1],[401.225 3700 1],[401.27 540 1],[401.881 370 1],[402.087 1000 1],[402.134 1000 1],[402.178 1000 1],[402.3 1200 1],[402.478 340 1],[403.047 410 1],[403.182 1200 1],[403.812 270 1],[404.08 3000 1],[404.106 200 1],[404.359 410 1],[404.881 410 1],[405.115 850 1],[405.996 850 1],[406.109 4700 1],[406.928 1100 1],[407.512 710 1],[407.528 470 1],[407.762 240 1],[408.023 470 1],[408.582 240 1],[409.613 270 1],[409.818 220 1],[410.659 200 1],[410.908 1400 1],[410.946 2500 1],[411.048 510 1],[411.383 300 1],[412.388 410 1],[413.336 470 1],[413.533 510 1],[415.608 3000 1],[415.626 510 1],[416.057 340 1],[416.8 410 1],[417.561 810 1],[417.732 2400 1],[417.864 200 1],[417.959 640 1],[418.498 250 1],[420.56 470 1],[421.129 470 1],[422.025 290 1],[422.773 440 1],[423.238 1300 1],[423.419 250 1],[423.524 290 1],[423.984 290 1],[424.738 2000 1],[425.244 850 1],[425.429 290 -1],[426.184 410 1],[426.671 340 1],[427.056 240 1],[427.279 340 1],[427.509 340 1],[428.244 470 1],[428.257 240 1],[428.452 710 1],[429.78 270 1],[430.358 5400 1],[430.445 340 1],[430.778 200 1],[431.452 470 1],[432.576 1100 1],[432.793 510 1],[433.87 540 1],[435.129 680 1],[435.817 850 1],[436.638 240 1],[436.864 340 1],[437.493 470 1],[438.566 710 1],[439.066 250 1],[440.083 540 1],[441.106 510 1],[444.639 580 1],[445.157 1400 1],[445.199 200 1],[445.64 300 1],[446.299 740 1],[450.182 410 1],[450.659 200 1],[451.334 170 1],[451.636 250 1],[452.725 120 0],[454.127 340 1],[454.261 340 1],[455.614 100 1],[455.967 170 0],[456.322 340 1],[457.889 200 1],[457.932 200 1],[458.662 100 0],[459.702 200 1],[460.382 100 0],[460.987 100 0],[462.194 300 0],[462.798 100 0],[463.424 510 0],[464.11 340 0],[464.577 250 1],[464.64 200 0],[464.967 300 0],[465.473 200 0],[467.056 130 1],[468.074 170 1],[468.345 310 0],[468.404 110 0],[469.035 110 0],[469.644 190 0],[470.357 130 1],[470.654 470 1],[470.696 140 0],[470.971 190 1],[471.559 190 1],[471.902 240 0],[472.435 190 1],[473.177 140 0],[477.946 120 0],[478.941 170 1],[479.715 120 1],[481.134 240 1],[482.034 140 1],[482.548 350 1],[483.228 130 1],[484.906 110 1],[485.902 280 1],[486.674 190 0],[488.381 350 0],[488.91 140 1],[489.07 220 1],[489.107 240 0],[489.693 280 0],[490.153 120 0],[490.184 210 0],[490.203 110 1],[491.341 190 0],[491.437 170 1],[492.068 330 1],[492.453 470 0],[494.483 260 0],[495.478 290 0],[495.913 290 1],[496.139 150 1],[498.994 250 1],[503.352 150 1],[506.373 110 1],[507.659 360 1],[508.984 150 1],[509.28 360 1],[510.239 180 1],[510.521 150 1],[510.759 360 1],[512.379 340 1],[513.06 680 1],[513.233 170 1],[516.514 170 1],[518.117 130 1],[518.26 120 1],[519.145 500 1],[519.262 630 1],[520.012 330 1],[521.237 310 1],[521.323 150 0],[522.505 130 1],[522.843 130 1],[523.42 450 1],[523.979 250 1],[524.959 720 1],[525.082 200 1],[525.551 360 1],[526.948 120 1],[527.343 590 1],[527.688 150 1],[529.167 110 0],[529.317 680 1],[530.228 160 1],[530.647 110 1],[531.146 220 1],[531.982 500 1],[535.698 180 1],[536.147 290 1],[537.194 150 1],[538.59 110 1],[543.153 160 1],[545.112 110 1],[548.57 170 1],[550.147 35 0],[552.572 45 0],[553.382 90 0],[553.527 55 1],[554.324 55 0],[554.847 55 1],[556.117 55 0],[557.55 27 0],[557.67 27 0],[557.77 27 0],[558.761 27 0],[559.443 240 1],[560.143 55 0],[560.192 45 0],[562.054 220 0],[563.576 65 0],[563.954 45 0],[565.357 35 0],[566.887 70 1],[566.977 65 0],[567.597 140 0],[567.633 55 0],[568.853 220 1],[568.951 23 0],[570.157 30 0],[570.224 130 1],[570.621 80 1],[570.828 160 1],[571.812 80 1],[572.683 65 1],[572.929 100 0],[573.455 23 -1],[574.086 70 1],[574.919 55 0],[574.966 27 0],[576.733 23 0],[577.612 45 0],[578.496 45 0],[578.822 45 0],[580.009 45 0],[580.402 160 1],[581.157 80 1],[581.389 45 0],[582.037 27 0],[582.587 70 1],[582.674 30 0],[584.239 80 1],[584.466 30 0],[584.595 23 0],[585.891 55 0],[586.708 35 0],[586.89 30 0],[587.104 27 0],[588.329 30 0],[588.624 23 0],[588.791 30 0],[592.122 27 0],[595.587 27 0],[599.476 30 0],[599.647 27 0],[600.767 45 0],[603.127 35 1],[603.329 27 0],[603.424 45 1],[606.603 55 0],[607.17 27 0],[607.397 30 0],[613.347 23 1],[614.928 27 0],[615.506 27 0],[615.783 35 1],[616.667 23 1],[617.049 35 1],[617.859 45 0],[618.391 27 1],[620.824 27 0],[622.339 45 0],[622.65 27 0],[623.85 23 1],[624.408 35 0],[625.749 23 0],[625.873 27 1],[627.729 23 1],[628.579 27 0],[629.284 23 1],[629.707 23 0],[631.049 55 0],[634.151 27 1],[638.207 23 1],[638.52 65 1],[648.569 35 0],[663.014 45 0],[663.796 35 1],[665.057 45 1],[665.567 30 0],[673.779 25 1],[674.011 40 1],[674.254 25 0],[679.037 30 1],[680.4 30 1],[684.672 25 1],[690.043 40 1],[694.139 24 1],[701.08 17 1],[701.885 8 1],[702.092 17 1],[702.458 17 1],[703.321 10 -1],[703.73 35 1],[705.214 7 1],[705.474 7 1],[706.147 7 1],[706.689 40 1],[708.293 8 1],[708.971 12 1],[709.209 12 -1],[709.274 12 1],[709.294 12 -1],[709.398 17 0],[709.542 20 0],[712.935 29 1],[714.204 12 1],[714.372 10 -1],[715.103 8 1],[715.309 6 0],[718.501 6 -1],[718.909 10 1],[718.942 24 1],[719.201 20 1],[719.9 10 1],[722.701 8 0],[723.654 15 1],[726.164 7 1],[728.529 9 1],[728.856 9 1],[729.138 6 1],[729.872 7 1],[731.681 12 1],[732.143 7 0],[732.312 7 1],[733.454 6 0],[735.71 6 0],[737.404 6 1],[738.179 7 1],[740.131 9 0],[740.662 10 1],[741.12 6 1],[741.818 10 1],[742.741 9 1],[744.871 9 1],[748.128 5 1],[751.116 12 1],[751.373 17 1],[751.444 7 1],[751.602 7 1],[752.645 9 1],[752.899 12 1],[753.826 10 1],[754.097 5 1],[754.7 7 1],[757.754 5 1],[758.765 7 1],[759.075 6 1],[760.373 6 1],[760.592 5 1],[761.472 5 0],[763.979 9 1],[764.6 8 1],[766.352 6 1],[769.656 12 1],[771.82 6 1],[774.39 4 1],[774.892 4 1],[775.095 10 1],[777.306 6 1],[779.222 7 1],[779.64 6 1],[779.732 8 1],[779.832 5 1]}{5400}%
+\wl@elt@search{#1}{Pm}{[380.606 250 1],[380.92 300 0],[381.093 400 0],[381.926 200 1],[382.053 300 1],[383.952 300 0],[384.288 200 1],[384.298 300 1],[384.538 250 1],[387.403 300 0],[387.762 800 1],[388.579 300 0],[389.097 250 0],[389.215 1000 1],[389.873 300 0],[389.978 400 1],[390.95 250 1],[391.026 1000 1],[391.91 1000 1],[393.648 800 1],[394.421 300 1],[395.476 300 0],[395.774 1000 1],[398.074 500 1],[399.505 300 1],[399.896 1000 1],[400.996 500 1],[401.272 200 1],[401.42 250 1],[401.934 200 1],[402.82 250 1],[404.536 200 1],[405.154 300 1],[405.52 600 1],[405.656 200 0],[407.584 600 1],[408.531 200 0],[408.61 500 1],[414.046 250 1],[418.574 200 1],[419.292 300 1],[419.47 200 1],[422.215 200 1],[426.432 300 0],[428.437 300 0],[429.778 600 1],[430.389 200 1],[430.564 200 0],[431.88 400 0],[432.592 250 1],[433.205 200 1],[433.654 300 1],[433.748 200 1],[434.212 300 1],[434.772 200 0],[436.392 350 0],[436.964 300 0],[438.188 200 1],[438.849 400 0],[438.876 200 1],[440.942 400 0],[441.247 500 0],[441.796 1000 1],[443.251 400 1],[443.586 250 0],[443.655 300 0],[443.868 300 0],[444.541 500 1],[444.69 600 1],[445.395 800 1],[445.997 200 1],[446.816 250 0],[447.148 200 1],[447.323 300 1],[447.746 200 1],[447.858 350 0],[448.16 300 0],[448.505 300 0],[449.05 300 0],[449.205 250 1],[450.015 600 1],[450.033 350 0],[450.684 250 0],[450.938 100 1],[451.356 100 1],[451.731 200 0],[452.332 200 0],[452.52 600 1],[452.612 250 0],[452.676 250 0],[452.77 400 0],[452.921 800 1],[454.006 300 0],[454.142 300 0],[454.175 450 0],[454.408 500 0],[454.517 200 0],[454.978 400 0],[455.403 300 0],[455.463 200 0],[455.534 500 0],[455.606 200 0],[455.703 300 0],[455.921 300 0],[456.483 100 1],[456.814 300 0],[457.037 200 0],[457.215 300 0],[457.527 400 0],[457.828 300 0],[457.841 200 0],[457.948 300 0],[458.114 300 0],[458.549 300 0],[459.382 200 0],[459.582 400 0],[459.755 800 0],[460.025 500 0],[460.296 400 0],[460.459 400 0],[460.566 600 0],[460.985 500 0],[461.587 100 1],[461.702 600 0],[461.84 200 0],[461.849 400 0],[461.975 500 0],[462.157 500 0],[462.331 500 0],[462.368 700 0],[462.441 900 0],[462.529 500 0],[462.76 400 0],[463.093 200 0],[463.345 600 0],[464.096 400 0],[464.336 700 0],[464.376 700 0],[464.594 400 0],[464.703 600 0],[465.042 600 0],[465.052 500 0],[465.341 400 0],[465.45 400 0],[465.505 500 0],[465.938 300 0],[466.079 500 0],[466.326 300 0],[466.346 600 0],[466.519 400 0],[467.123 500 0],[467.176 400 0],[467.442 500 0],[467.746 200 0],[467.792 500 0],[467.809 400 0],[468.292 700 0],[469.68 500 0],[469.951 200 0],[472.206 250 1],[472.706 300 0],[472.836 900 0],[472.868 400 0],[473.427 800 0],[473.799 200 0],[473.908 100 1],[473.978 200 0],[474.513 350 0],[475.773 500 0],[475.9 800 0],[476.257 700 0],[477.346 700 0],[478.129 900 0],[479.459 250 0],[479.543 200 0],[479.898 700 0],[480.136 900 0],[480.954 700 0],[481.196 900 0],[481.712 400 0],[482.772 400 0],[483.766 800 0],[483.892 400 0],[483.962 300 0],[484.401 200 0],[485.273 350 0],[486.062 400 0],[486.074 700 0],[486.53 300 0],[486.572 500 0],[486.98 400 0],[487.242 700 0],[488.702 500 0],[489.252 700 0],[490.03 400 0],[490.428 300 0],[491.828 400 0],[493.299 600 0],[495.946 700 0],[497.14 100 1],[499.71 500 0],[503.08 200 0],[505.831 300 0],[506.735 100 1],[508.052 150 1],[508.935 150 1],[509.242 200 0],[509.483 400 0],[509.618 200 0],[509.73 150 1],[510.077 400 0],[512.147 250 1],[512.734 400 0],[512.975 200 0],[514.513 400 0],[514.63 500 0],[515.386 400 1],[516.971 300 1],[517.158 500 1],[519.405 300 1],[520.809 500 1],[521.596 150 1],[522.512 250 1],[523.626 500 1],[523.666 300 1],[524.633 400 1],[526.242 150 1],[527.064 500 1],[529.392 200 1],[530.886 100 1],[531.858 150 1],[541.045 200 1],[542.454 200 1],[542.479 180 1],[542.904 150 1],[546.764 100 1],[549.545 150 1],[551.642 100 1],[553.496 180 1],[553.738 200 0],[554.608 800 1],[555.688 120 1],[555.839 150 1],[556.173 200 1],[557.602 800 1],[564.129 200 1],[573.081 200 0],[576.816 200 1],[577.699 200 0],[582.393 500 1],[586.879 300 1],[587.531 200 1],[587.876 100 1],[589.976 150 1],[590.471 250 0],[590.59 100 0],[591.496 125 0],[592.717 250 1],[593.966 150 0],[594.649 400 1],[595.642 800 0],[595.669 200 0],[596.008 100 1],[596.3 150 1],[596.789 400 0],[597.973 200 0],[598.482 200 0],[598.713 100 1],[599.712 400 0],[602.711 200 1],[603.006 300 0],[603.132 400 0],[604.339 500 0],[605.257 150 1],[606.7 100 1],[606.906 500 0],[607.64 100 1],[608.541 200 1],[610.021 900 0],[610.64 400 0],[611.49 100 1],[615.176 400 0],[615.953 100 1],[616.316 400 0],[618.452 100 1],[620.891 200 1],[622.964 500 0],[623.779 400 0],[626.325 100 1],[627.269 400 0],[628.606 400 0],[630.829 500 0],[631.42 100 1],[632.384 700 0],[639.031 500 0],[642.964 100 1],[643.193 500 0],[643.657 100 1],[648.761 400 0],[651.034 400 0],[651.725 500 0],[651.943 200 1],[652.045 1000 0],[654.22 500 0],[655.848 100 1],[658.639 100 1],[659.229 100 1],[659.815 900 0],[659.866 800 0],[660.637 700 0],[662.523 800 0],[662.554 100 1],[664.981 700 0],[665.905 400 1],[666.125 100 1],[666.168 500 0],[666.376 400 0],[666.751 800 0],[667.747 700 0],[668.089 200 1],[668.555 500 0],[668.568 500 0],[669.009 150 1],[670.033 600 0],[670.627 100 1],[671.467 700 0],[671.726 500 0],[672.071 500 0],[672.75 700 0],[674.371 600 0],[674.991 900 0],[675.048 900 0],[675.645 200 1],[677.229 300 1],[677.878 400 0],[678.309 100 1],[679.687 100 1],[681.168 200 1],[683.33 800 0],[684.837 400 0],[685.858 50 1]}{1000}%
+\wl@elt@search{#1}{Sm}{[380.089 800 1],[380.563 320 1],[380.846 420 1],[380.975 320 1],[380.988 320 1],[381.043 420 1],[381.207 500 1],[381.363 480 1],[381.463 420 1],[382.082 930 -1],[382.418 530 1],[382.62 1600 1],[383.029 530 1],[383.15 1100 1],[383.383 530 1],[383.448 560 0],[383.46 560 1],[383.572 370 1],[383.894 500 1],[384.045 400 1],[384.35 1600 1],[384.751 530 1],[384.878 640 1],[385.188 420 1],[385.33 530 0],[385.421 2700 1],[385.456 480 0],[385.59 800 1],[385.791 480 1],[385.874 400 0],[386.205 660 1],[386.223 350 1],[386.524 320 1],[387.178 800 1],[387.519 400 1],[387.554 560 1],[388.077 800 1],[388.138 450 1],[388.179 450 1],[388.25 320 1],[388.529 3700 1],[388.916 660 1],[389.008 610 1],[389.121 320 1],[389.405 400 1],[389.698 1600 1],[390.342 1300 1],[391.744 620 1],[392.24 2500 1],[392.828 1900 1],[393.576 470 1],[394.187 1300 1],[394.324 620 1],[394.651 500 1],[394.811 740 1],[395.189 470 0],[395.953 370 1],[396.3 1500 1],[396.604 620 1],[396.768 470 1],[397.053 740 1],[397.14 1500 1],[397.466 620 0],[397.627 960 1],[397.643 1000 1],[397.92 960 1],[398.314 740 1],[398.668 740 1],[398.743 370 1],[399 1500 1],[399.331 740 1],[400.346 280 1],[400.748 470 1],[401.998 280 1],[402.323 880 1],[403.511 740 1],[404.168 590 1],[404.272 740 1],[404.29 880 1],[404.411 240 1],[404.505 560 1],[404.616 440 1],[404.716 740 1],[404.862 210 1],[404.981 590 1],[405.887 440 1],[406.354 560 1],[406.432 280 1],[406.458 1400 1],[406.674 810 1],[406.833 710 1],[407.584 810 1],[407.665 280 1],[408.056 240 1],[408.26 410 1],[408.358 280 1],[408.44 220 1],[409.227 1000 1],[409.405 290 1],[410.413 240 1],[410.728 810 1],[410.94 410 1],[411.019 280 1],[411.39 410 1],[411.855 1900 1],[412.136 410 1],[412.251 280 1],[412.396 710 1],[412.923 280 1],[413.514 250 1],[414.771 320 1],[414.983 810 1],[415.221 1200 1],[415.333 530 1],[415.522 560 1],[416.948 810 1],[417.157 410 1],[417.802 440 1],[418.11 530 1],[418.333 210 0],[418.376 530 1],[418.813 1000 1],[419.193 410 1],[419.945 270 1],[420.292 650 1],[420.305 1100 1],[420.613 660 1],[420.662 270 1],[421.035 660 1],[422.066 740 1],[422.533 1000 1],[422.97 740 1],[423.457 620 1],[423.674 1200 1],[423.766 500 1],[424.47 620 1],[424.955 210 1],[425.178 250 1],[425.639 2100 1],[425.858 210 1],[426.268 1300 1],[426.508 500 1],[427.968 1200 1],[427.994 240 1],[428.079 2200 1],[428.221 710 0],[428.283 470 0],[428.35 240 0],[428.664 350 1],[429.218 350 1],[429.674 1600 0],[430.494 320 1],[430.901 880 1],[431.285 240 0],[431.894 1900 1],[431.953 470 0],[432.328 590 1],[432.446 240 0],[432.902 1800 1],[433.002 440 0],[433.415 1300 1],[433.614 880 0],[434.586 560 1],[434.78 1100 1],[435.046 560 1],[435.21 560 1],[436.072 560 1],[436.107 220 1],[436.204 810 1],[436.291 440 0],[436.345 220 1],[436.803 500 1],[436.992 210 1],[437.346 440 1],[437.498 320 1],[437.824 880 1],[438.042 530 0],[438.429 290 1],[439.086 1600 1],[439.335 210 0],[439.734 290 0],[440.117 410 0],[440.306 810 1],[440.336 410 1],[440.933 520 1],[441.158 290 0],[441.758 380 1],[441.933 470 0],[442.053 1500 1],[442.114 960 1],[442.434 2900 1],[442.966 470 0],[443.388 1600 1],[443.432 1800 1],[444.181 530 0],[444.228 440 0],[444.426 710 1],[444.515 710 0],[445.273 1300 1],[445.295 250 0],[445.463 1200 1],[445.852 1000 1],[445.929 250 0],[446.734 2200 1],[447.089 810 0],[447.243 470 1],[447.302 620 1],[447.866 740 1],[449.911 370 0],[449.948 370 1],[450.338 240 0],[450.505 180 1],[451.133 120 0],[451.183 560 1],[451.509 440 1],[451.963 880 1],[452.304 440 1],[452.391 650 1],[453.38 290 0],[453.651 270 1],[453.795 710 1],[453.853 150 1],[454.019 290 1],[454.206 380 1],[454.395 810 1],[454.483 100 1],[455.266 410 1],[455.445 270 1],[456.043 240 1],[456.621 470 1],[457.769 590 1],[458.158 290 0],[458.173 440 0],[458.483 560 1],[459.182 290 1],[459.354 380 1],[459.529 560 1],[459.674 240 0],[460.418 220 1],[460.651 290 1],[461.544 290 1],[461.569 470 1],[463.021 150 1],[464.224 880 1],[464.54 290 0],[464.668 290 1],[464.816 240 1],[464.949 380 0],[465.513 150 1],[466.356 290 0],[466.94 740 1],[466.965 620 1],[467.075 470 0],[467.46 1100 1],[467.691 680 1],[468.155 210 0],[468.718 370 1],[468.873 370 0],[469.363 130 1],[469.934 120 1],[470.44 530 1],[471.306 270 1],[471.526 130 1],[471.61 730 0],[471.707 270 0],[471.772 210 1],[471.833 190 1],[471.984 270 1],[472.602 130 1],[472.842 770 0],[474.568 470 1],[475.072 150 0],[476.027 730 0],[477.02 110 0],[477.415 110 1],[477.785 190 1],[478.31 580 0],[478.586 350 0],[478.996 160 0],[479.158 230 1],[481.581 430 1],[482.957 130 1],[484.17 970 0],[484.421 310 1],[484.776 140 1],[484.832 270 0],[485.436 120 1],[488.377 210 0],[488.397 730 0],[490.497 170 0],[491.04 630 0],[491.325 350 1],[491.899 430 0],[492.404 110 0],[493.81 120 1],[494.863 170 1],[495.237 120 1],[496.194 170 1],[497.598 170 0],[502.844 140 1],[504.428 400 0],[505.276 200 1],[506.946 170 1],[507.12 540 0],[510.022 170 1],[510.309 260 1],[510.448 140 1],[511.67 140 1],[511.716 510 0],[512.214 350 0],[515.503 360 1],[517.274 250 0],[517.542 470 0],[520.059 250 0],[525.192 260 0],[527.14 400 0],[528.291 250 0],[532.06 190 0],[534.129 110 0],[536.836 140 0],[540.523 130 0],[545.3 220 0],[546.672 140 0],[549.372 230 0],[551.21 80 0],[551.609 230 0],[554.895 50 0],[555.04 140 0],[557.342 45 0],[558.82 35 0],[560.086 50 1],[562.179 50 0],[562.601 70 0],[564.41 85 0],[565.986 140 0],[569.673 120 0],[570.62 85 0],[571.093 35 0],[573.295 50 0],[574.335 50 1],[575.952 45 1],[577.377 70 0],[577.833 60 0],[577.924 45 0],[578.193 45 1],[578.698 70 1],[578.838 60 0],[580.052 60 0],[580.284 65 0],[581.489 45 0],[583.102 45 1],[583.637 45 1],[586.078 35 0],[586.779 65 0],[586.861 45 0],[587.106 35 0],[587.421 50 0],[589.739 45 1],[589.896 50 0],[593.89 35 1],[596.571 65 1],[596.882 35 1],[598.429 35 0],[604.5 50 0],[604.539 45 0],[607.006 50 0],[608.412 45 0],[609.14 35 0],[611.066 45 1],[615.956 45 0],[624.676 45 1],[625.654 45 0],[625.666 45 1],[626.728 100 1],[629.182 50 1],[630.706 35 1],[632.747 70 1],[642.664 45 1],[647.234 45 1],[648.452 35 1],[649.867 35 1],[654.276 50 1],[656.931 140 1],[657.067 35 1],[658.521 40 1],[658.972 110 1],[660.183 40 1],[660.456 95 1],[663.228 40 1],[667.151 50 0],[667.921 70 1],[669.355 70 1],[672.307 40 0],[673.184 120 1],[673.406 70 1],[673.481 40 1],[674.147 55 1],[677.861 40 1],[679 60 1],[679.42 95 1],[684.471 55 1],[685.603 75 1],[686.093 120 0],[686.282 40 1],[695.051 30 1],[695.529 120 1],[702.044 90 1],[703.673 13 1],[703.922 90 1],[704.224 90 1],[704.915 13 1],[705.152 90 1],[705.497 16 1],[707.467 19 0],[708.237 90 1],[708.552 40 1],[708.83 26 0],[709.116 16 0],[709.55 30 0],[709.633 16 0],[710.454 30 0],[710.623 19 0],[711.596 26 0],[711.751 23 1],[711.981 26 1],[712.24 12 1],[712.511 23 1],[713.18 13 0],[713.601 10 0],[713.939 12 1],[714.398 40 1],[714.96 85 1],[717.267 10 0],[718.957 10 1],[721.095 9 0],[721.382 23 0],[721.809 26 1],[722.007 13 0],[723.702 13 1],[724.09 60 1],[725.711 9 1],[726.152 9 1],[727.925 13 0],[728.147 26 1],[728.221 8 0],[728.333 19 1],[728.892 16 1],[729.023 13 0],[730.072 26 1],[732.708 13 1],[733.265 13 0],[733.804 8 0],[734.73 26 0],[737.669 26 1],[739.398 13 1],[744.456 30 0],[744.541 26 0],[745.303 26 1],[747.076 13 0],[748.199 26 1],[750.239 23 1],[751.7 10 1],[754.142 23 1],[754.474 9 0],[754.657 10 0],[756.003 12 1],[756.294 19 1],[757.095 23 1],[757.229 23 1],[757.809 19 1],[758.585 30 1],[758.831 23 1],[759.801 10 0],[760.748 23 1],[761.394 12 1],[763.177 10 1],[763.794 23 1],[764.509 45 1],[764.582 12 0],[764.802 19 1],[765.578 10 1],[766.72 19 1],[767.249 8 1],[767.879 10 1],[769.578 10 0],[771.204 23 1],[772.856 30 1],[773.626 30 1],[774.93 30 1],[775.52 23 1],[779.45 10 0]}{3700}%
+\wl@elt@search{#1}{Eu}{[380.136 70 -1],[380.754 95 1],[381.133 120 0],[381.55 120 1],[381.967 39000 1],[382.668 120 1],[384.423 140 1],[386.557 190 0],[387.272 45 0],[387.727 70 1],[388.475 150 0],[389.678 23 0],[390.018 23 0],[390.051 70 0],[390.71 28000 1],[391.524 45 1],[391.6 45 0],[391.729 230 0],[391.77 23 1],[391.852 40 0],[391.909 100 1],[392.887 40 1],[393.048 32000 1],[394.156 55 1],[394.221 30 1],[394.294 60 1],[394.308 120 1],[394.459 30 1],[394.567 30 1],[394.913 30 1],[394.96 60 0],[395.076 45 1],[395.133 55 1],[395.575 60 0],[395.792 40 1],[396.361 30 0],[396.49 120 1],[396.659 150 1],[396.718 45 0],[397.196 30000 1],[397.842 60 0],[397.963 30 1],[398.66 55 0],[398.824 40 1],[399.393 30 1],[399.598 55 1],[400.371 60 1],[401.169 180 1],[401.758 150 1],[403.919 120 0],[407.824 45 0],[408.538 120 1],[409.68 75 1],[410.688 60 0],[411.204 90 1],[411.93 45 1],[412.728 75 0],[412.97 33000 1],[413.659 30 1],[413.707 40 0],[414.102 30 1],[414.172 60 1],[415.152 30 1],[415.164 45 1],[415.772 30 0],[417.28 110 1],[417.516 30 1],[418.222 110 0],[419.536 40 1],[419.618 40 1],[420.505 60000 1],[422.108 45 1],[422.388 40 1],[422.74 90 1],[422.933 75 1],[423.245 75 1],[423.751 90 1],[423.869 45 1],[424.474 45 0],[424.706 45 1],[425.38 45 1],[427.024 30 1],[429.873 150 0],[432.936 90 0],[432.997 75 0],[433.061 60 1],[433.118 40 0],[433.768 90 0],[435.509 240 1],[436.157 27 1],[436.947 55 1],[437.22 45 1],[438.317 75 1],[438.788 90 0],[440.527 21 1],[440.707 55 1],[441.966 18 1],[443.481 120 1],[443.556 14000 1],[446.497 75 1],[448.515 24 1],[452.257 3000 1],[453.559 45 0],[459.403 11000 0],[460.263 21 0],[462.722 9800 0],[466.188 8300 0],[471.359 30 0],[474.05 27 0],[479.259 45 0],[482.93 40 0],[483.033 60 0],[484.047 40 0],[484.964 60 0],[486.762 110 0],[488.405 40 0],[489.468 90 0],[490.086 60 0],[490.718 150 0],[491.14 180 0],[495.352 55 0],[496.021 55 0],[496.255 55 0],[497.576 45 0],[501.317 180 0],[502.291 170 0],[502.954 110 0],[503.355 90 0],[506.795 75 0],[509.269 75 0],[509.644 90 0],[511.437 170 0],[512.477 90 0],[512.91 170 0],[513.008 90 0],[513.352 210 0],[516.007 270 0],[516.67 210 0],[519.374 60 0],[519.985 200 0],[520.096 110 0],[520.644 120 0],[521.51 750 0],[522.349 300 0],[523.924 120 0],[526.64 200 0],[527.196 390 0],[527.248 110 0],[528.282 150 0],[528.725 55 0],[528.925 60 0],[529.126 120 0],[529.368 60 0],[529.464 120 0],[530.385 90 0],[535.041 30 0],[535.169 75 0],[535.284 40 0],[535.51 90 0],[535.761 540 0],[536.083 60 0],[536.161 120 0],[537.694 110 0],[539.294 120 0],[540.277 450 0],[540.533 45 0],[541.186 45 0],[542.107 55 0],[542.694 90 0],[544.356 40 0],[545.151 380 0],[545.294 260 0],[545.762 40 0],[547.232 90 0],[548.865 120 0],[549.52 45 0],[550.083 15 0],[551.052 120 0],[552.663 30 0],[553.325 30 0],[554.254 30 0],[554.744 200 0],[557.033 150 0],[557.714 200 0],[557.963 75 0],[558.003 120 0],[558.624 90 0],[558.683 75 0],[559.225 18 0],[559.98 18 0],[560.586 18 0],[561.881 40 0],[562.244 60 0],[563.254 75 0],[564.58 210 0],[565.111 15 0],[567.385 60 0],[568.11 27 0],[568.424 27 0],[573.087 60 0],[573.9 60 0],[576.52 330 0],[578.369 180 0],[579.272 15 0],[580.027 60 0],[581.874 170 1],[583.098 600 0],[584.577 27 0],[586.097 27 0],[586.477 15 0],[587.298 90 1],[589.531 15 0],[590.297 27 0],[590.994 12 0],[591.574 75 0],[592.53 12 0],[592.652 27 0],[594.272 45 0],[595.349 27 0],[595.384 27 1],[595.428 30 0],[596.376 90 0],[596.607 330 1],[596.71 480 0],[596.843 15 0],[597.169 30 0],[597.275 170 0],[598.047 15 0],[598.314 27 0],[598.378 27 0],[599.283 240 0],[600.436 60 0],[600.561 15 0],[601.22 60 0],[601.256 110 0],[601.558 60 0],[601.815 420 0],[602.315 60 0],[602.9 170 0],[604.466 60 0],[604.951 420 1],[605.736 140 0],[607.558 90 0],[607.738 30 0],[608.384 240 0],[609.935 240 0],[610.815 60 0],[611.878 120 0],[612.467 60 0],[617.305 330 1],[617.876 110 0],[618.813 260 0],[619.507 140 0],[620.76 15 0],[623.051 15 0],[623.373 90 0],[625.047 55 0],[626.225 240 0],[626.695 55 0],[628.595 15 0],[629.134 60 0],[629.977 170 0],[630.341 230 1],[631.378 24 0],[631.858 15 0],[633.582 75 0],[635.004 120 0],[635.589 60 0],[636.925 60 0],[638.273 55 0],[638.386 75 0],[640.093 120 0],[640.611 40 0],[641.004 180 0],[641.132 140 0],[642.829 55 0],[643.764 830 1],[643.993 18 0],[645.796 120 0],[647.07 12 0],[648.302 18 0],[650.155 45 0],[651.959 60 0],[652.272 15 0],[654.912 8 0],[656.787 75 0],[659.379 45 0],[660.355 18 0],[664.511 1400 1],[668.521 26 0],[669.396 95 0],[670.106 7 0],[671.045 12 0],[674.488 30 0],[678.254 30 0],[678.748 14 0],[680.272 140 0],[681.606 35 0],[683.43 11 0],[684.093 17 0],[684.483 17 0],[684.704 14 0],[686.454 360 0],[689.821 21 0],[690.367 60 0],[691.017 14 0],[691.482 30 0],[704.02 120 0],[707.454 12 0],[707.71 330 1],[710.648 100 0],[716.466 6 0],[717.555 30 0],[719.481 570 1],[721.755 570 1],[722.468 11 0],[725.872 15 0],[726.277 30 0],[728.153 11 0],[729.756 6 0],[730.117 540 1],[731.046 11 0],[731.363 12 0],[733.618 55 0],[734.625 4 0],[735.665 4 0],[736.225 11 0],[736.96 55 0],[737.022 720 1],[738.736 4 0],[738.916 12 0],[740.441 11 0],[742.657 300 1],[743.659 21 0],[747.053 8 0],[749.1 5 0],[752.87 50 0],[753.302 5 0],[754.732 6 0],[758.391 160 0],[774.257 60 0],[774.619 70 0],[483.798 10 2],[666.635 50 2],[722.184 30 2],[769.044 20 2]}{60000}%
+\wl@elt@search{#1}{Gd}{[380.129 720 1],[380.439 210 0],[380.509 210 1],[380.552 560 1],[381.397 3700 1],[381.474 430 1],[381.664 770 1],[381.875 430 1],[382.605 350 1],[382.733 230 1],[382.946 230 1],[383.18 370 1],[383.297 210 0],[383.499 330 1],[383.691 970 1],[383.964 1000 1],[384.22 1200 1],[384.328 1400 0],[384.458 1400 1],[385.069 3300 1],[385.097 5100 1],[385.245 4300 1],[385.556 470 1],[386.305 250 1],[386.699 1600 0],[387.357 250 0],[387.546 220 1],[389.47 1500 1],[389.579 450 1],[390.24 750 1],[390.271 300 0],[390.429 240 0],[390.565 450 0],[391.651 2200 1],[392.325 450 1],[393.479 1200 0],[393.538 220 0],[394.18 450 0],[394.263 590 0],[394.324 270 0],[394.362 220 0],[394.554 1400 0],[395.2 300 1],[395.337 590 0],[395.767 1200 1],[395.944 750 1],[396.366 220 1],[396.628 590 0],[396.826 590 1],[396.9 750 0],[396.929 270 1],[397.175 450 1],[397.271 390 0],[397.398 590 1],[397.481 300 0],[397.933 750 0],[398.721 450 1],[398.784 470 0],[399.269 320 0],[399.321 220 1],[399.416 650 1],[399.632 700 1],[399.776 320 1],[400.126 470 1],[400.494 260 1],[400.833 320 0],[400.891 300 1],[401.38 300 1],[401.558 200 0],[401.725 300 0],[401.771 430 0],[401.973 300 0],[402.233 300 1],[402.314 1100 0],[402.335 810 0],[402.761 220 0],[402.815 1100 0],[403.088 860 0],[403.349 700 0],[403.54 340 0],[403.684 260 0],[403.733 1400 1],[403.79 700 1],[404.371 410 0],[404.501 1600 0],[404.684 270 1],[404.709 270 0],[404.92 270 0],[404.943 1300 1],[404.986 2200 1],[405.037 270 0],[405.329 810 1],[405.364 2600 0],[405.472 810 0],[405.822 2600 0],[405.988 650 0],[406.13 270 1],[406.259 650 1],[406.339 1900 1],[406.359 540 1],[406.604 260 0],[406.835 520 0],[406.874 260 0],[407.029 750 1],[407.32 650 1],[407.376 300 1],[407.844 1300 1],[407.87 2800 0],[408.37 520 0],[408.556 1500 1],[408.769 260 1],[409.041 650 0],[409.271 1100 0],[409.372 260 0],[409.448 260 1],[409.861 2600 1],[409.89 520 1],[410.026 650 0],[411.144 390 1],[413.037 2200 1],[413.148 270 1],[413.228 1100 1],[413.416 750 0],[413.71 410 1],[414.886 280 0],[416.273 540 1],[416.309 280 1],[416.716 280 1],[417.554 2400 0],[418.425 2400 1],[419.078 2200 0],[419.107 750 1],[419.163 750 0],[419.768 450 1],[420.486 590 1],[421.2 1300 1],[421.502 970 1],[421.72 650 1],[422.503 320 0],[422.585 4800 0],[422.714 220 1],[422.98 220 1],[423.878 650 1],[424.657 200 1],[425.173 1700 1],[425.337 860 1],[425.361 650 1],[426.012 810 0],[426.209 1600 0],[426.66 650 0],[426.7 470 0],[427.417 300 0],[428.049 910 1],[428.582 430 0],[428.612 300 0],[429.608 540 1],[429.717 220 1],[429.929 430 0],[430.634 1100 0],[430.929 260 0],[431.384 1800 0],[431.44 520 0],[431.605 520 1],[432.052 370 0],[432.111 750 1],[432.557 2600 1],[432.712 1900 0],[432.958 370 0],[433.061 340 1],[433.138 240 0],[434.128 450 1],[434.218 910 1],[434.43 1000 1],[434.646 2200 0],[434.662 910 0],[434.731 220 1],[436.977 300 1],[437.383 970 0],[439.206 280 0],[440.186 1400 0],[440.314 520 0],[440.667 260 1],[440.825 260 1],[440.925 220 0],[441.116 520 0],[441.416 860 0],[441.473 700 0],[441.903 340 1],[442.241 1400 0],[443.063 1100 0],[443.61 240 0],[446.474 300 0],[446.655 300 1],[446.708 520 0],[447.413 700 0],[447.612 860 0],[447.88 220 1],[448.106 280 1],[448.333 220 1],[448.47 220 0],[448.69 280 0],[449.713 500 0],[449.732 220 0],[450.621 430 0],[450.633 140 1],[451.45 140 1],[451.966 1100 0],[452.282 300 1],[452.412 150 0],[453.781 910 0],[454.002 220 1],[454.203 300 0],[454.8 240 0],[455.808 120 1],[457.381 130 0],[457.591 260 0],[457.959 280 0],[458.129 410 0],[458.253 130 1],[458.307 410 0],[458.699 160 0],[459.698 220 1],[459.791 320 1],[459.89 410 0],[460.105 340 1],[460.293 240 0],[461.45 520 0],[462.442 140 0],[463.664 430 0],[463.9 110 1],[464.004 170 0],[464.6 170 0],[464.764 170 0],[464.859 170 0],[465.354 430 0],[467.087 140 0],[467.918 170 0],[468.004 260 0],[468.333 430 0],[468.812 140 0],[469.433 700 0],[469.549 170 0],[469.742 430 0],[470.313 170 0],[470.978 200 0],[472.146 110 0],[472.847 150 1],[473.26 220 1],[473.575 260 0],[474.365 410 0],[474.582 110 0],[475.87 320 0],[476.074 110 0],[476.382 130 0],[476.724 470 0],[478.192 180 0],[478.462 300 0],[478.675 110 0],[480.105 140 1],[480.745 220 0],[482.169 320 0],[483.526 130 0],[484.81 110 0],[486.259 110 0],[486.502 170 1],[487.15 120 0],[493.412 280 0],[493.861 220 0],[495.247 110 0],[495.879 130 0],[501.082 65 1],[501.174 55 0],[501.504 750 0],[502.313 55 1],[503.129 65 1],[503.909 75 0],[505.088 65 1],[507.374 55 0],[508.28 55 0],[509.225 95 1],[509.606 65 1],[509.838 130 1],[510.094 55 1],[510.345 910 0],[510.891 180 1],[512.556 120 1],[513.028 65 1],[513.559 65 0],[513.604 75 0],[514.084 85 1],[514.15 75 0],[514.268 75 0],[515.584 860 0],[515.676 55 1],[515.848 75 0],[516.37 75 0],[516.454 55 1],[517.628 190 1],[518.724 55 1],[518.788 55 0],[519.108 55 1],[519.777 410 0],[521.049 55 1],[521.748 85 0],[521.94 280 0],[522.03 75 1],[523.393 130 0],[524.687 65 0],[525.118 320 0],[525.214 120 1],[525.475 85 0],[525.58 140 0],[526.878 65 0],[527.291 55 0],[528.248 55 0],[528.308 280 0],[530.167 280 0],[530.276 220 0],[530.67 55 0],[530.73 280 0],[532.15 130 0],[532.178 280 0],[532.732 110 0],[532.83 65 0],[533.33 170 0],[533.753 55 0],[534.3 300 0],[534.513 85 0],[534.568 75 0],[534.867 200 0],[535.038 300 0],[535.326 240 0],[536.166 55 0],[536.538 95 0],[536.992 95 0],[537.063 150 0],[538.95 85 0],[541.32 85 0],[541.569 85 0],[545.346 65 0],[558.368 55 1],[559.185 55 0],[561.791 190 0],[562.955 65 0],[563.225 110 0],[564.324 260 0],[568.089 55 -1],[569.622 390 0],[570.135 95 0],[570.942 65 0],[573.386 120 1],[574.636 85 0],[575.417 85 0],[577.602 75 0],[579.138 240 0],[579.68 65 0],[580.292 55 0],[580.772 55 0],[580.922 55 0],[581.585 55 1],[581.951 65 -1],[584.047 55 1],[585.163 220 0],[585.524 55 1],[585.622 280 0],[586.073 55 1],[587.726 65 1],[588.646 55 0],[590.407 55 1],[590.456 110 0],[591.145 170 1],[591.355 65 1],[591.677 55 0],[593.029 85 0],[593.684 85 0],[593.771 65 0],[594.095 55 -1],[594.278 55 -1],[595.16 55 1],[595.648 55 1],[597.725 85 0],[598.802 110 0],[599.908 85 0],[600.096 65 -1],[600.187 75 -1],[600.457 55 1],[600.871 55 0],[602.113 55 0],[608.065 55 1],[611.407 430 0],[618.042 55 1],[618.268 110 -1],[620.086 110 -1],[621.171 110 -1],[622.093 110 -1],[623.162 55 -1],[624.166 75 -1],[625.212 55 -1],[626.264 55 -1],[627.3 45 -1],[628.973 85 1],[629.287 30 0],[630.515 75 1],[630.911 30 1],[631.719 27 0],[633.135 40 0],[633.375 17 0],[633.634 17 0],[634.665 27 1],[635.172 27 0],[636.323 17 0],[638.095 40 1],[638.219 17 1],[640.855 22 0],[642.242 22 1],[642.452 17 0],[647.029 19 0],[648.011 15 1],[653.815 40 0],[654.925 22 0],[656.478 55 0],[656.8 10 1],[657.38 10 0],[659.16 30 0],[659.342 15 0],[661.004 10 1],[663.436 50 1],[664.008 35 0],[664.276 10 0],[664.398 30 0],[664.685 10 0],[665.355 10 0],[667.956 10 1],[668.123 35 1],[669.286 10 0],[670.418 10 1],[671.814 14 1],[672.783 17 1],[673.073 85 0],[675.267 50 1],[675.391 14 1],[678.339 14 0],[678.633 26 1],[678.718 10 0],[681.456 12 0],[681.649 26 0],[682.09 17 0],[682.825 100 0],[684.66 35 1],[685.713 30 1],[686.425 15 0],[688.763 21 1],[690.073 14 1],[691.657 100 0],[692.062 21 1],[692.499 15 1],[692.649 21 0],[694.598 17 1],[695.774 15 1],[695.924 15 1],[696.433 14 0],[697.166 15 1],[697.635 12 1],[697.827 10 1],[698.086 26 0],[698.589 50 1],[698.875 10 1],[699.192 75 0],[699.318 21 0],[699.676 60 1],[700.075 17 1],[700.616 45 1],[701.66 10 0],[703.726 21 1],[705.1 14 1],[705.462 13 1],[705.802 10 1],[706.809 10 1],[707.1 18 0],[707.363 18 0],[709.811 14 0],[709.873 14 0],[711.677 10 1],[711.886 21 1],[712.257 35 0],[713.573 13 1],[714.731 18 1],[715.828 13 0],[716.837 170 0],[717.226 21 1],[718.957 28 1],[719.708 13 1],[720.141 13 1],[722.802 10 0],[723.345 25 0],[725.27 14 1],[726.266 28 0],[729.135 14 0],[731.328 21 0],[732.489 18 1],[737.381 14 0],[737.641 14 0],[737.727 13 1],[738.028 13 0],[739.49 13 1],[743.019 13 0],[744.185 35 0],[746.436 40 0],[756.297 55 0],[756.319 10 1],[758.82 10 0],[761.178 10 0],[762.196 21 0],[765.032 21 0],[767.256 25 0],[767.606 10 0],[769.445 13 0],[773.35 80 0],[774.93 35 0],[775.597 10 0],[776.648 10 1],[383.173 300 2],[391.024 300 2],[401.691 300 2],[417.726 600 2],[427.996 400 2],[431.428 300 2],[444.591 300 2],[468.425 600 2],[471.506 600 2],[478.279 600 2],[497.672 250 2],[509.17 5000 2],[512.406 300 2],[534.795 1800 2],[536.596 3000 2],[541.262 1100 2],[555.33 4000 2],[558.788 3000 2],[565.898 3000 2],[578.696 1800 2],[586.209 1500 2],[598.785 1500 2]}{5100}%
+\wl@elt@search{#1}{Tb}{[380.18 330 1],[380.685 760 1],[383.026 1500 0],[383.342 540 0],[384.25 920 1],[384.561 370 1],[384.873 3700 1],[386.975 450 1],[387.417 3500 1],[388.334 330 0],[388.822 480 0],[389.464 490 0],[389.599 330 0],[389.658 330 1],[389.789 330 0],[389.92 2400 1],[390.133 1600 0],[390.806 480 0],[390.914 380 0],[390.955 330 0],[391.543 650 0],[391.952 480 1],[392.21 300 1],[392.274 480 1],[392.545 760 1],[393.524 650 1],[393.952 810 1],[394.689 650 1],[395.836 350 1],[397.684 2200 1],[398.187 1800 1],[398.385 300 1],[399.94 350 1],[400.219 350 1],[400.259 970 1],[400.547 1900 1],[401.004 300 0],[401.275 760 1],[401.326 330 0],[401.914 370 1],[402.047 540 1],[402.288 220 0],[402.477 370 0],[403.166 520 1],[403.228 870 0],[403.303 2100 1],[403.622 350 0],[403.886 210 0],[405.186 300 1],[405.287 300 1],[405.412 430 0],[406.037 410 0],[406.087 220 1],[406.158 1300 0],[406.389 220 1],[406.622 390 1],[407.522 260 0],[408.124 390 0],[408.66 210 0],[409.219 210 0],[409.437 260 1],[409.449 260 0],[410.39 260 1],[410.537 650 0],[411.25 300 0],[411.992 260 0],[414.351 280 0],[414.441 1100 1],[415.853 350 0],[416.909 240 0],[416.932 240 0],[417.105 240 0],[417.26 240 0],[417.282 240 0],[417.347 260 0],[418.621 240 0],[418.716 300 0],[419.674 390 0],[420.1 450 1],[420.374 650 0],[420.649 600 0],[421.35 300 0],[421.442 300 1],[421.509 480 0],[421.756 300 0],[421.916 260 0],[422.428 260 0],[422.645 480 1],[423.189 260 0],[423.282 480 0],[423.535 300 0],[425.524 370 0],[425.823 480 1],[426.366 260 0],[426.634 650 0],[426.969 330 0],[427.521 220 0],[427.852 760 1],[428.513 300 1],[428.97 300 0],[429.836 370 0],[429.99 300 0],[430.295 240 0],[430.718 240 0],[431.042 450 0],[431.156 300 0],[431.325 370 0],[431.883 2200 0],[432.223 600 0],[432.583 600 1],[432.643 3000 0],[432.89 240 0],[433.212 600 0],[433.643 870 0],[433.764 600 0],[433.841 1700 0],[434.062 700 0],[434.253 430 0],[435.32 430 1],[435.609 280 0],[435.681 870 0],[436.016 280 0],[436.73 220 1],[437.202 220 0],[438.245 330 0],[438.823 300 0],[439.091 260 0],[441.627 200 1],[442.019 140 0],[442.31 350 0],[443.272 110 0],[443.612 240 0],[443.938 110 0],[444.804 240 0],[446.769 110 0],[449.307 430 0],[450.904 45 1],[451.152 150 0],[451.296 45 1],[451.431 75 1],[451.972 45 1],[452.501 45 1],[452.976 45 -1],[453.183 45 1],[453.413 45 0],[453.714 45 0],[453.723 45 0],[454.907 110 0],[454.972 45 1],[455.045 110 0],[455.646 110 0],[456.224 55 1],[456.369 110 1],[456.485 30 1],[457.319 55 1],[457.869 210 1],[458.484 65 1],[459.156 65 1],[459.238 45 0],[460.41 45 1],[461.196 30 0],[461.592 45 1],[461.749 27 0],[461.936 30 1],[462.632 75 1],[462.694 95 1],[463.207 65 0],[463.659 65 0],[463.699 30 1],[464.1 85 1],[464.198 210 1],[464.531 260 1],[464.723 80 0],[465.838 60 0],[465.873 20 -1],[466.279 80 0],[466.545 50 0],[466.94 40 0],[467.69 80 0],[468.187 70 0],[468.252 50 0],[468.279 25 1],[468.863 80 1],[469.311 80 1],[469.339 30 1],[470.241 200 1],[470.794 110 1],[471.607 40 1],[472.816 40 1],[473.42 60 0],[473.993 80 0],[474.78 70 0],[475.253 410 1],[475.844 40 1],[476.019 40 1],[476.237 30 1],[476.447 25 1],[477.836 35 1],[477.88 35 1],[478.678 180 0],[478.991 40 1],[480.187 30 1],[481.377 100 0],[483.759 60 1],[484.039 25 0],[484.269 30 1],[484.489 30 1],[485.481 30 0],[485.654 20 1],[485.887 30 1],[487.557 80 1],[487.612 25 1],[488.115 80 1],[489.433 29 -1],[491.59 95 0],[492.409 35 0],[492.683 35 0],[492.893 50 0],[493.179 65 0],[497.099 29 1],[497.142 29 0],[497.304 29 0],[498.016 29 1],[498.056 29 0],[499.382 85 1],[499.584 50 1],[499.795 55 0],[500.61 29 1],[502.216 50 0],[502.424 29 1],[502.465 29 0],[503.312 50 0],[504.206 50 1],[505.43 55 0],[506.579 55 0],[507.825 110 0],[508.005 24 1],[508.111 24 0],[508.912 75 1],[508.966 24 0],[510.109 24 0],[510.856 24 0],[511.839 35 0],[512.018 24 0],[513.169 50 0],[514.108 50 1],[514.758 50 0],[516.427 24 0],[517.013 29 0],[517.061 24 0],[517.651 50 0],[517.997 50 0],[518.459 50 0],[518.613 85 0],[518.848 50 0],[519.886 50 0],[520.277 35 0],[520.455 40 0],[520.797 40 0],[521.428 40 0],[522.199 40 0],[522.812 120 0],[523.511 40 0],[524.871 75 0],[526.211 75 1],[527.503 24 0],[528.105 75 0],[530.472 65 0],[530.819 29 0],[530.946 29 0],[531.923 110 0],[533.104 35 0],[533.79 65 0],[533.859 35 0],[534.783 24 1],[535.488 160 0],[536.972 75 0],[537.598 75 0],[540.206 29 1],[541.365 29 0],[541.62 29 0],[542.41 50 1],[542.643 29 0],[544.338 35 0],[545.7 29 0],[545.981 55 0],[547.034 29 1],[548.145 24 0],[550.961 55 0],[551.454 50 0],[552.412 65 0],[552.562 24 0],[556.593 35 0],[563.88 29 0],[568.574 29 1],[568.648 40 0],[574.758 85 0],[576.266 24 0],[578.518 24 1],[579.564 75 0],[580.313 75 1],[581.536 65 0],[584.297 29 0],[585.107 65 0],[587.062 65 0],[589.884 35 0],[590.24 24 0],[590.471 35 0],[592.078 65 0],[593.938 50 0],[594.017 35 0],[595.117 24 0],[596.734 75 1],[603.897 29 0],[603.938 29 0],[610.429 24 1],[629.243 24 0],[633.168 35 1],[633.491 24 1],[644.687 24 1],[651.868 35 0],[657.404 24 1],[658.182 35 0],[660.717 30 1],[667.794 90 1],[670.261 40 0],[670.679 20 1],[678.512 30 1],[679.458 130 1],[687.418 40 1],[689.637 55 1],[689.995 45 0],[690.198 40 0],[700.599 9 1],[708.285 17 1],[708.922 11 1],[711.269 11 0],[718.748 10 0],[719.589 10 1],[720.428 65 0],[723.498 19 0],[725.773 40 0],[731.157 17 0],[734.888 45 1],[739.827 10 1],[742.424 15 1],[742.962 10 1],[747.215 9 0],[748.454 22 0],[749.545 9 0],[749.612 45 0],[749.969 17 1],[751.14 27 0],[751.977 9 1],[755.759 6 1],[758.203 27 1],[758.749 27 0],[759.024 45 0],[759.644 65 0],[760.118 17 1],[761.601 17 1],[762.405 22 0],[762.781 30 0],[763.905 9 1],[767.272 8 1],[769.474 8 1],[770.616 22 1],[772.697 22 1],[773.763 30 0],[779.32 22 0]}{3700}%
+\wl@elt@search{#1}{Dy}{[380.414 510 1],[380.627 580 1],[381.227 470 0],[381.367 470 1],[381.676 1400 1],[382.568 700 1],[383.65 2300 1],[384.089 370 0],[384.131 1400 1],[384.2 330 1],[384.436 330 0],[384.634 420 1],[384.702 420 0],[384.939 330 1],[385.303 1200 1],[385.84 420 0],[386.658 370 1],[386.845 560 1],[386.881 1600 0],[386.942 300 1],[386.986 820 1],[387.211 7000 1],[387.399 1200 1],[387.911 470 1],[388.199 300 1],[389.853 5800 1],[391.487 540 1],[391.559 540 1],[391.729 540 0],[392.338 320 1],[392.786 420 0],[393.014 540 0],[393.152 2100 1],[393.222 320 1],[393.3 370 1],[393.421 320 1],[393.67 420 0],[394.253 540 1],[394.468 10000 1],[394.693 420 1],[395.039 540 1],[395.455 420 1],[395.779 800 1],[396.259 370 0],[396.751 320 0],[396.839 14000 1],[397.857 2700 1],[398.192 1400 1],[398.365 1600 1],[398.421 800 1],[399.132 540 1],[399.669 1600 1],[400.045 8000 1],[400.584 420 0],[400.607 320 0],[401.129 540 1],[401.382 540 0],[401.47 540 1],[402.371 370 0],[402.778 420 1],[402.832 520 1],[403.247 520 1],[403.365 420 1],[403.632 420 1],[404.198 320 1],[404.597 12000 0],[405.056 1600 1],[405.514 520 1],[407.312 2500 1],[407.796 7400 1],[408.534 370 0],[409.61 390 0],[410.33 3900 1],[410.387 860 0],[411.134 1500 1],[412.463 490 1],[412.824 390 1],[412.912 350 0],[412.942 990 1],[413.035 350 0],[413.385 390 0],[414.15 470 1],[414.31 1200 1],[414.606 990 0],[416.797 5700 0],[417.193 370 0],[418.372 930 0],[418.682 12000 0],[419.094 320 0],[419.164 2200 0],[419.484 6800 0],[419.519 320 1],[419.802 800 0],[420.13 680 0],[420.224 680 0],[420.506 230 0],[420.654 370 1],[421.124 440 0],[421.172 16000 0],[421.318 1800 0],[421.516 3700 0],[421.809 4400 0],[422.111 4400 0],[422.221 540 0],[422.516 2700 0],[423.202 680 0],[423.985 680 0],[424.591 440 0],[425.633 440 1],[427.669 250 0],[429.493 370 1],[430.863 1000 1],[432.586 320 0],[435.844 200 1],[437.424 320 1],[437.476 320 1],[440.938 540 1],[444.458 150 0],[444.97 740 1],[445.56 110 1],[446.814 250 1],[452.758 100 0],[454.166 100 1],[456.509 140 0],[457.778 420 0],[458.936 2100 0],[461.226 990 0],[461.383 50 0],[461.482 50 0],[461.726 60 1],[462.003 140 1],[466.272 50 0],[466.466 110 1],[467.36 85 1],[468.203 50 1],[468.975 50 1],[469.868 95 1],[472.122 85 0],[472.713 70 1],[473.184 170 1],[474.573 40 1],[475.499 60 1],[476.004 50 1],[477.194 60 0],[477.48 50 0],[477.579 120 0],[478.692 75 1],[479.129 95 0],[480.064 29 0],[480.794 50 0],[481.028 40 0],[481.28 50 0],[481.904 75 0],[482.496 85 0],[482.888 75 0],[482.968 50 1],[483.238 70 0],[483.375 35 1],[484.175 75 0],[485.624 40 1],[486.805 40 1],[487.593 40 0],[488.016 85 0],[488.455 40 0],[488.808 95 0],[488.933 40 1],[489.01 75 1],[489.368 50 0],[489.924 24 0],[491.641 55 0],[492.222 50 1],[492.316 65 1],[495.734 480 1],[495.959 24 0],[497.357 28 0],[498.552 40 0],[500.387 50 0],[500.428 55 1],[501.06 24 0],[501.798 24 1],[502.212 70 0],[502.403 30 0],[502.454 24 0],[502.787 40 0],[503.3 50 0],[504.263 160 0],[504.725 24 0],[505.021 50 0],[505.335 30 0],[505.546 24 0],[507.068 95 0],[507.767 120 0],[509.038 80 1],[511.032 80 0],[512.004 130 0],[513.502 30 0],[513.96 190 1],[516.103 40 1],[516.412 40 1],[516.534 50 0],[516.969 110 1],[517.29 20 1],[518.53 80 0],[518.845 40 1],[519.286 290 1],[519.766 95 1],[524.694 50 1],[525.988 70 0],[526.056 130 0],[526.33 55 -1],[526.711 65 0],[527.225 50 1],[527.529 50 1],[527.97 50 1],[528.207 55 0],[528.499 28 1],[529.782 40 1],[530.158 160 0],[530.902 40 1],[532.469 50 0],[533.743 24 1],[534.03 65 0],[535.211 30 0],[536.82 30 1],[538.563 20 1],[538.958 85 1],[539.557 40 0],[539.826 20 -1],[539.993 24 1],[540.419 50 0],[541.913 80 0],[542.332 70 0],[542.427 30 0],[542.67 40 1],[544.334 30 1],[545.111 95 0],[545.547 30 1],[546.91 24 1],[549.683 28 0],[550.279 24 0],[550.652 28 0],[551.541 24 1],[552.801 30 0],[554.727 65 0],[560.065 40 1],[560.553 24 0],[561.323 30 0],[562.749 20 0],[563.95 100 0],[564.599 55 0],[565.201 80 0],[568.558 24 0],[569.367 28 -1],[569.41 24 -1],[569.454 28 -1],[569.872 28 1],[570.291 24 0],[571.846 70 0],[572.584 28 -1],[572.864 55 -1],[573.873 24 -1],[574.02 50 0],[574.553 55 0],[575.048 24 0],[575.879 24 0],[583.201 80 -1],[583.385 55 -1],[583.486 40 -1],[584.441 28 -1],[584.565 24 -1],[584.805 40 -1],[585.556 40 -1],[586.811 55 1],[591.516 40 1],[592.456 20 1],[594.58 70 0],[596.446 50 0],[597.449 120 0],[598.486 24 0],[598.856 140 0],[600.575 24 -1],[600.654 24 -1],[600.697 24 -1],[600.894 30 0],[601.082 65 0],[601.726 24 0],[603.098 24 0],[604.249 24 -1],[605.818 24 0],[608.506 30 0],[608.826 140 0],[612.715 24 0],[613.364 24 0],[615.828 24 0],[616.843 100 0],[619.623 20 1],[625.909 270 0],[626.036 30 0],[634.332 14 0],[638.68 40 0],[639.66 24 1],[642.192 50 0],[643.655 13 0],[646.083 8 0],[646.858 10 1],[647.491 11 0],[648.359 20 1],[648.659 28 0],[655.802 20 0],[657.937 160 0],[659.414 14 1],[664.337 15 0],[665.836 22 0],[666.164 29 0],[666.786 75 0],[670.064 10 1],[674.793 29 0],[675.762 10 0],[676.589 45 0],[681.82 12 0],[683.542 180 0],[685.296 80 0],[685.646 22 0],[688.883 22 0],[689.797 15 1],[689.932 65 1],[690.653 22 1],[692.955 15 0],[695.028 29 1],[695.142 11 0],[695.808 40 0],[698.244 13 0],[699.13 13 0],[699.81 45 0],[701.742 20 0],[705.595 35 1],[707.514 24 1],[710.926 17 1],[712.081 11 1],[717.511 13 1],[721.327 11 0],[723.004 17 0],[725.001 13 0],[734.513 17 1],[737.023 11 1],[737.604 20 0],[740.759 11 0],[741.237 24 0],[742.686 55 1],[745.705 20 1],[751.661 17 1],[754.373 55 0],[755.3 17 0],[755.978 27 0],[756.296 40 1],[757.746 20 1],[759.13 27 0],[761.155 13 0],[761.77 11 0],[764.109 35 0],[764.586 17 0],[764.664 13 0],[766.236 80 0],[766.678 11 1],[771.533 35 0],[772.976 45 1],[775.162 20 1]}{16000}%
+\wl@elt@search{#1}{Ho}{[381.073 8900 1],[381.186 490 0],[381.325 900 1],[382.173 300 1],[382.927 390 0],[383.19 320 1],[383.535 410 1],[383.751 1300 1],[384.205 410 1],[384.386 1100 1],[384.673 490 1],[384.988 300 0],[385.24 320 1],[385.407 1800 1],[385.694 390 1],[385.772 720 1],[386.168 2700 1],[386.262 540 0],[387.205 360 1],[387.409 320 1],[387.468 630 1],[388.161 540 1],[388.896 3000 1],[389.042 490 0],[389.102 13000 1],[389.676 540 1],[390.223 290 1],[390.444 320 0],[390.568 1300 1],[391.18 320 0],[391.945 320 0],[393.644 320 1],[393.885 220 0],[394.053 320 1],[395.056 220 0],[395.573 580 0],[395.951 230 1],[395.968 490 0],[397.588 220 0],[397.693 390 0],[398.571 220 1],[399.373 220 1],[399.958 380 0],[400.259 160 1],[400.339 220 0],[401.35 110 0],[401.42 320 1],[401.809 160 1],[402.276 160 1],[402.394 160 1],[402.539 110 0],[402.721 320 0],[402.886 270 0],[403.18 180 0],[403.762 220 0],[403.887 220 1],[404.081 2700 0],[404.544 5400 1],[404.752 220 0],[405.393 8100 0],[405.448 540 1],[405.755 270 0],[406.031 220 0],[406.509 1700 1],[406.757 170 0],[406.805 720 0],[407.183 270 0],[407.313 270 0],[407.351 290 0],[408.023 120 1],[408.367 230 0],[408.509 140 0],[408.735 170 0],[408.759 200 0],[409.164 140 0],[409.478 120 0],[410.022 230 0],[410.384 8900 0],[410.504 120 0],[410.65 270 0],[410.736 100 0],[410.862 2900 0],[411.2 300 0],[411.272 100 0],[411.673 270 0],[412.02 1500 0],[412.565 1300 0],[412.716 4300 0],[413.454 300 0],[413.622 1500 0],[413.934 130 0],[414.219 230 0],[414.897 290 0],[415.261 980 1],[416.303 8100 0],[417.223 160 0],[417.323 2500 0],[419.435 540 0],[419.808 100 0],[420.321 130 0],[421.13 100 1],[422.229 290 0],[422.347 290 0],[422.704 2000 0],[422.952 390 1],[423.124 130 0],[424.378 290 0],[425.443 1300 0],[425.861 130 1],[426.405 490 0],[426.604 300 0],[427.363 100 1],[431.104 200 0],[433.064 250 1],[433.713 300 1],[434.684 100 1],[435.073 1300 0],[435.673 290 1],[436.393 140 1],[437.914 170 1],[438.483 180 1],[440.055 150 1],[440.124 120 1],[440.327 180 0],[442.056 200 1],[444.463 130 0],[447.359 100 1],[447.764 300 1],[448.457 120 1],[451.082 140 0],[452.614 100 1],[453.008 170 1],[453.128 170 0],[453.165 130 1],[453.458 170 0],[456.252 200 0],[460.932 120 1],[461.337 130 0],[461.884 100 0],[462.822 100 0],[462.91 290 1],[464.977 200 1],[466.133 130 1],[467.462 140 1],[470.117 70 1],[470.169 80 1],[470.984 130 1],[471.139 65 0],[471.752 130 0],[472.872 35 1],[473.8 35 1],[474.204 290 1],[474.909 35 1],[475.14 35 0],[475.701 100 0],[476.239 35 1],[476.357 35 1],[477.748 55 1],[477.942 30 0],[478.119 70 0],[478.292 65 0],[478.629 55 0],[479.148 35 1],[479.592 35 1],[479.887 45 0],[481.292 27 1],[483.231 55 1],[483.332 30 0],[485.554 30 1],[486.039 45 0],[488.967 27 1],[489.235 30 0],[489.644 35 1],[490.699 55 1],[492.273 45 0],[493.489 55 0],[493.901 290 0],[494.68 27 0],[494.818 45 1],[495.942 65 1],[496.103 35 1],[496.673 55 1],[496.721 250 1],[497.997 220 0],[498.896 35 0],[499.505 90 0],[501.242 35 0],[501.328 55 1],[502.653 65 0],[502.817 30 0],[503.295 55 1],[503.76 65 0],[504.237 130 0],[504.473 35 0],[505.144 30 1],[505.492 30 1],[506.075 35 0],[507.434 65 0],[509.307 80 0],[512.781 140 0],[512.927 55 1],[514.259 130 1],[514.322 110 1],[514.959 160 1],[516.788 90 0],[518.211 130 0],[518.785 55 0],[519.011 90 1],[519.523 18 0],[522.154 45 0],[524.447 35 0],[525.182 65 0],[527.548 55 0],[530.125 90 0],[531.924 35 0],[531.965 35 0],[533.011 80 0],[535.999 90 0],[538.14 55 0],[538.456 30 0],[538.497 30 0],[539.385 18 0],[540.317 70 0],[540.708 100 0],[541.362 14 1],[543.439 16 1],[543.587 18 0],[544.539 30 0],[544.98 18 1],[545.19 30 0],[545.4 14 1],[549.857 30 0],[550.451 30 0],[551.556 27 1],[551.645 18 1],[553.433 30 0],[555.314 27 0],[556.094 35 0],[556.36 35 -1],[556.652 70 0],[557.396 18 1],[558.47 35 -1],[559.11 55 -1],[559.23 55 -1],[560.71 30 -1],[561.364 27 0],[562.64 45 -1],[562.76 65 0],[562.824 30 1],[564.062 55 0],[565.59 70 -1],[565.89 65 -1],[565.958 140 0],[567.184 70 -1],[567.47 65 0],[569.147 140 0],[569.63 70 -1],[569.657 140 0],[573.402 27 0],[573.64 45 -1],[573.924 55 0],[574.958 22 0],[576.664 30 -1],[580.38 27 -1],[581.92 45 -1],[582.19 27 0],[583.947 22 0],[584.94 45 -1],[586.028 140 0],[586.442 27 0],[587.085 45 0],[587.96 27 -1],[588.299 70 0],[589.256 35 0],[590.429 22 0],[592.176 70 0],[593.371 30 0],[594.803 70 0],[595.598 45 0],[597.276 70 0],[597.352 90 0],[598.143 22 0],[598.29 230 0],[600.204 55 0],[600.533 27 0],[602.143 35 0],[603.897 16 0],[605.071 27 0],[606.031 45 0],[608.179 120 0],[613.36 70 0],[615.638 35 0],[615.658 27 0],[619.168 55 0],[620.865 70 0],[623.417 18 0],[625.575 45 0],[630.536 70 0],[630.668 22 0],[632.194 30 -1],[635.435 30 0],[637.259 30 0],[637.386 14 0],[641.341 22 0],[647.177 27 0],[647.917 13 0],[651.53 11 0],[653.899 11 0],[655.097 70 0],[656.008 15 0],[660.058 35 0],[660.494 260 0],[660.747 55 0],[662.835 13 0],[662.899 120 0],[663.224 15 0],[665.298 9 0],[666.252 15 0],[668.046 19 0],[668.162 24 0],[668.202 15 -1],[669.432 55 0],[672.234 15 0],[674.505 40 0],[676.674 13 0],[677.468 28 0],[678.543 55 0],[679.37 13 0],[681.104 13 0],[682.038 15 0],[682.164 24 0],[682.572 17 0],[682.662 8 -1],[685.297 8 -1],[686.585 17 0],[688.336 9 0],[688.85 13 0],[689.296 15 0],[689.795 17 0],[690.38 15 0],[691.347 15 0],[691.67 9 0],[693.949 40 0],[695.039 45 0],[695.53 13 0],[697.67 19 1],[698.511 10 -1],[699.438 9 -1],[700.071 14 -1],[707.907 10 -1],[709.858 12 -1],[724.208 9 0],[725.06 9 0],[730.855 14 -1],[734.143 25 -1],[738.94 18 -1],[749.62 5 0],[751.074 10 0],[755.509 140 0],[758.92 18 0],[759.187 25 0],[759.364 9 0],[759.435 7 0],[760.231 12 1],[760.535 16 0],[761.705 12 0],[762.798 14 0],[762.842 40 0],[764.114 9 0],[764.816 4 0],[765.38 14 0],[766.73 12 0],[769.043 20 0],[769.315 50 0],[771.506 40 0],[771.905 16 0],[773.898 16 0],[775.201 8 0]}{13000}%
+\wl@elt@search{#1}{Er}{[381.033 1600 0],[383.048 3600 1],[384.991 540 0],[385.16 320 1],[385.59 680 0],[385.839 540 1],[386.285 7500 0],[388.061 1500 1],[388.289 1200 1],[389.061 400 1],[389.268 4200 0],[389.623 5200 1],[390.276 810 1],[390.398 250 0],[390.456 250 1],[390.54 1200 0],[390.631 11000 1],[391.805 280 0],[391.835 210 1],[392.188 280 1],[393.225 810 1],[393.701 3200 0],[393.863 2100 1],[394.442 3200 0],[394.806 550 0],[395.148 250 0],[395.642 320 0],[396.635 280 0],[397.304 2700 0],[397.358 3200 0],[397.472 1400 1],[397.673 280 0],[397.702 810 0],[398.233 1100 0],[398.753 280 0],[398.766 810 0],[399.115 230 0],[400.405 230 0],[400.796 14000 0],[400.818 230 1],[400.916 280 1],[401.258 1100 0],[401.557 350 1],[402.051 3000 0],[402.155 450 0],[404.301 230 1],[404.696 1000 0],[404.834 280 1],[404.949 200 1],[405.547 940 1],[405.951 550 0],[405.978 690 1],[407.788 420 0],[408.124 550 1],[408.763 3500 0],[409.29 210 0],[409.81 1100 0],[410.056 350 1],[411.636 320 0],[411.855 320 0],[413.15 600 0],[414.291 550 1],[415.111 6900 0],[418.998 280 1],[419.07 1000 0],[420.532 130 0],[421.843 1400 0],[422.099 200 0],[423.02 320 1],[423.478 140 1],[425.194 200 1],[427.648 140 1],[428.656 690 0],[429.891 320 0],[430.16 320 1],[430.381 140 1],[431.994 110 1],[432.881 130 0],[433.136 110 0],[434.092 140 0],[434.834 190 0],[436.939 110 1],[438.217 160 0],[438.47 300 1],[438.64 300 0],[440.317 100 1],[440.934 810 0],[441.87 180 0],[441.961 570 1],[442.251 110 1],[442.457 320 0],[442.677 370 0],[443.766 110 0],[445.924 100 1],[447.35 100 1],[449.639 130 0],[450.075 200 1],[452.274 130 0],[456.326 160 1],[460.661 1000 0],[463.088 160 1],[464.06 110 1],[466.544 110 1],[467.316 310 0],[467.562 570 1],[467.906 150 1],[472.269 230 0],[472.905 150 0],[475.152 130 1],[475.965 170 1],[482.035 190 1],[485.744 140 0],[487.209 150 1],[490.008 210 1],[493.411 210 1],[494.436 130 0],[495.174 180 1],[497.642 130 0],[500.725 250 0],[502.833 140 0],[502.891 120 1],[503.594 200 0],[504.205 210 1],[504.386 130 0],[504.489 130 0],[507.759 130 1],[512.456 120 0],[512.741 130 1],[513.153 120 0],[513.383 130 1],[516.477 170 1],[517.278 130 0],[518.89 160 1],[520.652 150 0],[521.291 60 1],[521.513 30 1],[521.826 30 1],[522.934 45 1],[525.593 140 1],[525.647 22 1],[525.702 27 1],[526.477 35 1],[527.291 80 0],[527.771 55 0],[527.934 27 1],[530.23 45 1],[533.306 55 0],[533.333 27 1],[533.423 27 1],[534.394 22 1],[534.45 30 1],[534.806 90 0],[535.047 45 0],[536.885 35 0],[539.587 35 1],[541.463 60 1],[542.281 18 1],[545.13 18 0],[545.427 35 1],[545.662 180 0],[546.243 35 1],[546.832 90 0],[547.747 18 1],[548.597 80 1],[549.744 27 1],[551.602 27 0],[559.346 80 0],[560.114 45 0],[560.994 45 0],[561.182 60 0],[562.201 70 0],[562.653 80 1],[563.62 30 0],[564.036 90 0],[564.142 22 0],[565.863 22 1],[566.495 70 0],[566.544 45 1],[567.548 55 0],[569.553 14 1],[571.087 27 1],[571.748 55 0],[571.955 70 0],[572.697 55 0],[573.343 22 1],[573.656 22 0],[573.694 22 0],[573.919 100 0],[574.061 35 0],[574.865 60 0],[575.253 55 0],[575.763 70 1],[576.28 290 0],[576.992 70 0],[578.282 45 0],[578.466 70 0],[579.115 22 1],[580.079 70 0],[580.61 22 0],[582.679 430 0],[583.584 45 0],[585.007 100 0],[585.531 120 0],[587.235 140 0],[588.114 120 0],[588.63 27 1],[590.208 27 1],[590.606 55 0],[590.924 45 0],[593.35 35 0],[594.637 22 0],[596.868 55 0],[597.549 27 0],[600.679 35 1],[600.875 22 1],[601.483 55 0],[601.574 35 1],[602.256 70 0],[603.212 22 1],[604.563 22 1],[604.814 22 1],[605.485 45 0],[606.125 70 0],[607.645 60 1],[611.601 35 0],[612.532 35 0],[617.006 30 1],[618.321 27 1],[622.102 360 0],[623.09 35 0],[626.256 55 0],[626.793 45 0],[626.887 60 0],[627.494 35 0],[628.686 30 0],[629.942 45 0],[630.877 130 0],[632.613 55 0],[634.716 22 1],[638.819 45 0],[643.253 22 0],[648.587 27 0],[649.235 55 0],[654.157 22 0],[658.348 60 0],[660.111 70 0],[672.191 27 0],[675.987 70 0],[676.292 22 0],[677.337 27 0],[679.092 35 0],[682.544 22 0],[682.598 22 0],[684.81 70 0],[686.513 55 0],[687.998 27 0],[700.14 22 0],[705.855 12 0],[706.504 12 0],[707.099 11 1],[710.127 18 0],[710.967 8 0],[715.54 11 1],[716.191 5 0],[719.7 14 0],[726.482 7 1],[728.395 7 0],[732.973 14 1],[735.537 18 0],[735.634 11 0],[742.867 18 0],[745.955 55 0],[746.042 9 0],[746.951 120 0],[753.234 22 0],[753.918 6 0],[755.626 27 0],[757.421 6 0],[759.051 5 0],[759.733 11 0],[760.723 6 0],[761.352 11 0],[762.348 6 0],[764.567 16 0],[765.063 8 0],[765.445 22 1],[765.805 12 0],[765.925 22 0],[766.564 4 0],[768.001 35 0],[772.214 9 0],[772.619 8 1],[774.744 11 0],[775.463 22 0],[776.216 4 0],[779.669 9 0],[779.747 35 0],[381.678 4000 2],[396.287 600 2],[400.97 40 2],[408.858 2 2],[428.818 1000 2],[429.006 40000 2],[433.824 300 2],[438.686 20000 2],[461.293 30 2],[473.556 15000 2],[478.312 2000 2],[487.607 8 2],[590.33 8000 2]}{40000}%
+\wl@elt@search{#1}{Tm}{[380.772 600 0],[381.072 380 1],[381.739 550 1],[382.639 290 0],[383.82 1300 1],[384.087 290 0],[384.802 8900 1],[385.784 140 1],[388.313 6800 0],[388.344 1800 1],[388.735 5400 0],[389.053 440 1],[389.662 440 0],[390.079 680 1],[391.648 3500 0],[392.866 120 1],[392.958 570 1],[394.927 1500 0],[395.81 1500 1],[399.558 440 1],[399.652 1800 1],[402.423 220 0],[404.447 380 0],[409.419 10000 0],[410.584 9500 0],[413.269 120 1],[413.833 1100 0],[414.914 120 0],[415.86 120 0],[418.762 8800 0],[419.992 520 1],[420.373 6000 0],[420.6 220 1],[422.267 380 0],[424.215 3000 1],[427.171 270 0],[429.836 150 0],[435.993 2700 0],[438.643 1400 0],[439.442 200 0],[439.596 120 0],[439.65 140 0],[443.74 55 1],[444.274 80 0],[444.758 50 0],[445.403 120 0],[445.999 80 0],[446.798 50 0],[448.126 540 1],[448.97 80 1],[451.96 150 0],[452.257 260 1],[452.938 180 1],[453.215 80 0],[454.86 110 0],[455.668 40 1],[456.186 40 1],[456.468 80 0],[456.711 40 1],[459.663 95 0],[459.902 270 0],[460.129 35 1],[460.343 55 1],[460.485 40 0],[461.397 50 0],[461.447 40 1],[461.594 300 1],[461.906 35 1],[462.172 40 0],[462.633 80 1],[462.656 95 1],[462.697 40 0],[463.426 110 1],[464.296 40 1],[464.312 95 0],[464.458 35 0],[465.509 120 0],[466.67 35 1],[467.199 35 1],[467.51 35 0],[467.531 80 0],[467.786 40 1],[468.192 160 0],[468.511 70 0],[469.111 120 0],[472.426 110 0],[473.334 680 0],[475.075 35 1],[475.99 70 0],[478.992 27 1],[480.748 27 0],[480.868 35 0],[481.35 35 0],[482.699 27 1],[482.897 27 0],[483.12 80 1],[483.575 35 0],[485.176 27 0],[487.228 19 1],[487.919 27 0],[489.164 27 0],[490.974 24 0],[492.383 55 0],[495.718 140 0],[497.087 40 1],[497.126 27 0],[497.512 40 1],[497.89 50 0],[498.068 40 1],[498.932 55 1],[499.379 27 1],[499.472 19 1],[500.102 35 0],[500.159 27 0],[500.977 160 1],[501.456 35 1],[501.787 27 1],[503.422 160 1],[504.1 27 1],[504.35 22 0],[504.541 35 0],[506.042 27 1],[506.09 150 0],[506.225 27 0],[506.588 27 0],[506.667 80 0],[507.242 27 0],[507.636 27 0],[507.718 27 0],[508.509 35 0],[510.753 40 0],[511.397 95 0],[511.455 50 1],[512.067 22 0],[514.028 22 1],[514.94 40 1],[518.268 19 0],[518.525 40 0],[520.451 14 1],[521.338 80 0],[522.823 22 1],[526.093 14 1],[526.734 24 1],[529.114 40 0],[529.432 40 0],[530.021 35 0],[530.269 35 0],[530.587 55 1],[530.712 650 0],[532.299 16 1],[533.89 35 0],[534.649 80 1],[537.298 27 1],[539.196 14 1],[540.046 27 1],[540.223 27 0],[540.598 14 1],[546.195 14 1],[546.414 14 0],[546.554 14 1],[550.03 16 1],[552.682 14 1],[552.834 24 0],[553.903 14 1],[556.6 27 0],[558.137 22 0],[558.665 14 1],[558.994 14 1],[560.664 14 0],[563.141 270 0],[564.26 40 0],[564.54 27 0],[565.83 70 0],[567.584 520 0],[568.359 14 0],[568.476 40 1],[569.642 14 1],[570.997 35 1],[571.579 22 0],[573.381 14 1],[573.72 11 1],[573.892 14 1],[575.802 27 0],[576.02 55 0],[576.429 190 0],[577.882 5 1],[578.236 19 1],[578.446 22 1],[579.997 11 1],[581.119 14 1],[581.646 14 0],[583.876 35 1],[589.563 240 0],[589.947 35 0],[590.157 24 0],[591.258 8 0],[593.17 11 0],[593.59 27 0],[597.126 140 0],[597.502 27 0],[598.487 11 0],[602.544 19 0],[606.778 11 1],[613.153 16 0],[617.529 14 0],[618.141 14 1],[629.946 14 1],[635.266 27 0],[640.144 22 0],[643.094 8 1],[644.054 14 0],[646.026 200 0],[649.07 14 0],[651.978 14 0],[657.554 8 0],[660.496 95 0],[662.725 8 0],[665.772 35 0],[665.864 11 0],[669.293 11 0],[672.136 30 0],[672.634 9 0],[672.794 9 1],[673.922 18 0],[676.748 9 0],[677.793 9 0],[677.977 110 0],[678.2 14 0],[678.852 18 0],[682.027 13 0],[682.695 14 0],[682.912 14 1],[683.109 23 0],[684.426 120 0],[684.576 80 0],[685.412 18 0],[689.856 6 0],[691.586 6 0],[693.737 10 0],[694.954 5 0],[697.669 5 1],[701.079 5 0],[701.431 6 1],[701.79 10 0],[702.94 6 0],[703.434 12 0],[705.643 10 1],[706.097 5 0],[707.978 6 1],[710.614 10 0],[723.133 5 0],[723.374 5 1],[725.772 4 0],[727.262 17 0],[728.43 8 0],[728.616 11 0],[731.051 14 0],[733.663 11 1],[743.218 14 0],[743.451 5 1],[743.995 5 1],[748.108 75 0],[749.02 75 0],[750.728 10 0],[754.578 14 0],[755.833 140 0],[758.061 17 0],[759.374 20 0],[759.507 17 1],[762.985 5 0],[764.876 5 1],[765.5 17 0],[766.032 4 0],[766.624 7 0],[767.604 8 1],[770.146 8 0],[773.153 80 0],[777.827 4 0],[778.235 12 0],[778.551 8 0],[399.884 300 2],[402.192 200 2],[402.603 200 2],[403.213 700 2],[407.615 100 2],[433.547 200 2],[438.541 500 2]}{10000}%
+\wl@elt@search{#1}{Yb}{[383.991 170 0],[387.285 340 0],[390.085 340 0],[390.481 50 1],[391.127 140 0],[398.799 32000 0],[399.088 930 0],[400.736 50 0],[405.228 70 0],[407.728 85 1],[408.968 440 0],[411.925 120 1],[413.509 70 1],[414.907 470 0],[417.456 120 0],[418.081 340 1],[421.856 150 1],[423.197 120 0],[427.774 70 0],[430.597 120 0],[431.695 70 1],[439.369 60 0],[443.021 60 0],[443.919 440 0],[448.242 85 0],[451.516 85 1],[455.358 35 1],[456.395 85 0],[457.621 640 0],[458.236 200 0],[458.921 70 0],[459.083 140 0],[459.836 40 1],[468.381 35 1],[468.427 40 0],[472.608 190 1],[478.187 170 0],[478.661 170 1],[481.643 35 0],[482.024 40 1],[483.696 35 1],[483.746 40 0],[485.115 17 1],[489.46 40 0],[491.236 27 0],[493.55 710 0],[493.722 24 1],[496.69 140 0],[500.952 24 1],[506.73 17 1],[506.78 30 0],[506.914 70 0],[507.434 220 0],[507.674 50 0],[513.598 20 1],[514.702 14 1],[518.415 20 1],[519.608 60 0],[521.16 85 0],[524.051 35 1],[524.411 100 0],[525.749 40 1],[527.704 150 0],[527.953 35 1],[530.094 17 1],[533.515 170 1],[534.566 30 1],[534.722 60 1],[535.129 30 0],[535.295 150 1],[535.864 30 1],[536.366 30 0],[538.984 17 1],[543.271 14 1],[544.927 40 1],[547.85 14 1],[548.192 60 0],[550.549 40 0],[552.454 17 0],[553.905 85 0],[555.647 2400 0],[556.209 35 0],[556.811 20 0],[558.636 20 0],[558.845 40 1],[565.198 60 1],[568.653 7 1],[571.999 220 0],[574.991 10 1],[575.589 10 0],[577.166 27 1],[580.344 10 0],[581.941 10 1],[583.399 35 1],[583.714 35 1],[585.451 27 0],[589.721 8 1],[590.836 20 1],[598.933 17 0],[599.151 40 1],[605.288 10 1],[605.457 10 0],[615.257 60 1],[624.697 30 1],[627.478 60 1],[630.815 14 1],[640.035 35 0],[641.791 35 0],[643.273 20 1],[646.315 17 1],[648.906 340 0],[664.355 20 0],[666.782 180 0],[667.817 15 0],[672.761 25 1],[676.87 25 0],[679.96 690 0],[693.405 18 1],[699.988 20 1],[704.378 10 1],[724.441 9 0],[730.522 8 0],[731.305 10 0],[735.004 16 0],[744.828 25 0],[752.746 30 0],[769.948 750 0],[387.998 20 2],[388.258 10 2],[388.717 20 2],[389.655 150 2],[391.275 15 2],[391.323 20 2],[393.123 500 2],[398.556 100 2],[399.174 10 2],[399.767 10 2],[402.814 2000 2],[403.303 10 2],[407.453 20 2],[409.067 20 2],[409.823 20 2],[412.106 15 2],[415.004 10 2],[415.311 15 2],[416.272 100 2],[417.295 60 2],[419.434 30 2],[419.495 100 2],[419.874 10 2],[421.364 300 2],[422.083 10 2],[423.107 15 2],[428.964 20 2],[430.114 40 2],[430.401 20 2],[435.08 15 2],[438.007 10 2],[451.758 100 2],[463.914 40 2],[483.493 10 2],[505.494 15 2],[525.685 20 2],[533.154 20 2],[574.083 15 2],[594.902 10 2],[597.305 20 2],[605.585 40 2],[621.422 100 2],[632.852 200 2],[636.588 10 2],[637.833 150 2],[646.633 25 2],[698.515 20 2],[703.704 10 2],[715.772 15 2],[731.102 10 2],[739.998 10 2],[741.001 80 2],[745.686 15 2],[766.441 70 2]}{32000}%
+\wl@elt@search{#1}{Lu}{[380.067 150 0],[382.907 75 0],[384.118 2700 0],[384.361 75 0],[385.329 95 0],[387.461 40 0],[387.665 530 1],[391.177 29 0],[391.886 50 0],[392.662 35 0],[396.846 480 0],[399.138 50 0],[405.445 670 0],[409.613 75 -1],[410.744 35 0],[411.267 95 0],[412.249 310 0],[412.473 3100 0],[413.179 150 0],[415.408 460 0],[415.898 24 0],[418.425 1600 1],[427.75 150 0],[428.103 250 0],[429.597 330 0],[430.957 150 0],[433.272 75 0],[434.198 29 1],[442.096 65 0],[443.048 190 0],[443.879 35 0],[445.081 190 0],[447.155 50 0],[449.885 60 0],[451.857 3300 0],[456.095 24 -1],[457.531 24 -1],[460.539 85 0],[464.547 95 0],[464.821 100 0],[464.885 95 0],[465.403 65 -1],[465.802 1000 0],[465.903 85 0],[466.175 630 -1],[467.231 310 -1],[468.416 420 -1],[469.546 270 -1],[470.8 190 -1],[471.67 30 0],[472.086 65 -1],[472.62 65 0],[473.5 100 -1],[474.911 75 -1],[476.422 40 -1],[478.542 150 1],[481.505 85 0],[483.962 50 1],[486.536 18 1],[490.488 460 0],[494.234 180 0],[499.413 800 1],[500.114 800 0],[505.76 55 0],[513.405 140 0],[513.509 2700 0],[517.011 130 -1],[519.661 170 0],[520.647 90 0],[530.44 40 0],[534.912 80 0],[540.257 500 0],[542.19 140 0],[543.788 100 0],[545.357 35 0],[547.669 2100 1],[566.489 9 1],[571.349 14 1],[573.655 550 0],[577.54 55 0],[580.059 80 0],[586.079 40 0],[586.63 9 0],[598.39 690 1],[599.713 140 0],[600.452 1400 0],[604.166 35 0],[605.503 440 0],[614.071 11 0],[615.994 150 1],[619.966 160 1],[622.187 2100 1],[622.814 35 1],[623.536 80 1],[624.234 160 1],[624.88 16 0],[634.535 70 0],[635.485 18 0],[636.579 9 0],[636.6 16 0],[644.114 22 0],[644.489 11 1],[646.312 1100 1],[647.767 29 0],[652.318 55 0],[661.128 35 1],[661.915 11 1],[667.714 23 0],[673.576 9 0],[679.377 30 0],[682.659 11 1],[691.731 45 0],[694.396 8 1],[703.124 23 0],[709.634 14 0],[712.584 45 1],[714.279 9 0],[714.31 7 0],[716.594 8 1],[723.798 14 0],[740.97 5 1],[744.152 11 0],[745.696 8 1],[764.008 7 0],[775.83 7 0],[425.144 200 2],[427.191 300 2],[449 200 2],[495.643 400 2],[504.612 10 2],[514.586 150 2],[541.942 70 2],[551.988 60 2],[552.68 5 2],[574.871 5 2],[578.646 70 2],[586.971 80 2],[588.976 60 2],[619.796 300 2],[619.813 600 2],[730.995 100 2],[731.025 200 2],[753.427 50 2]}{3300}%
+\wl@elt@search{#1}{Hf}{[380.038 850 0],[380.607 140 1],[381.178 320 0],[381.72 100 1],[381.938 100 0],[382.073 1300 0],[382.967 140 0],[383.002 280 0],[384.918 800 0],[384.952 140 1],[385.831 600 0],[386.091 230 0],[387.255 200 1],[387.71 160 1],[388.082 380 1],[388.252 200 0],[388.377 150 1],[388.923 200 0],[388.933 200 0],[389.994 620 0],[391.809 620 1],[392.39 200 1],[392.642 120 0],[392.757 150 0],[392.954 110 1],[393.138 320 0],[393.565 120 1],[393.904 120 0],[395.183 410 0],[396.801 160 0],[397.005 150 -1],[397.348 200 0],[403.227 180 0],[404.796 100 1],[406.284 230 0],[406.621 140 0],[408.335 180 0],[409.316 540 1],[410.423 110 0],[410.658 140 0],[411.353 110 1],[411.86 110 0],[412.78 150 1],[414.576 140 0],[416.236 150 1],[416.269 110 0],[417.434 1100 0],[419.095 120 0],[420.658 160 1],[420.97 190 0],[422.808 170 0],[423.244 170 1],[425.208 120 -1],[426.098 170 0],[426.339 200 0],[427.285 170 1],[429.479 320 0],[431.814 120 0],[433.027 160 0],[433.666 180 1],[435.051 150 1],[435.633 250 0],[436.79 110 1],[437.097 180 1],[441.735 120 1],[441.791 160 0],[443.804 200 0],[445.734 140 0],[446.118 140 0],[454.093 140 0],[456.594 250 0],[459.88 500 0],[462.086 230 0],[465.519 210 0],[469.901 120 0],[478.274 160 0],[480.05 310 0],[485.924 130 0],[497.525 120 0],[501.82 95 0],[502.175 15 0],[504.082 55 1],[504.745 95 0],[507.474 55 -1],[507.965 30 1],[509.388 55 -1],[511.213 15 0],[512.853 19 1],[515.796 30 0],[516.742 55 0],[517.018 75 0],[518.186 230 0],[518.684 30 0],[518.775 30 1],[524.399 110 0],[524.71 55 1],[526.044 25 1],[526.495 30 1],[527.504 55 0],[528.609 22 0],[529.487 120 0],[529.806 45 1],[530.782 30 0],[530.968 45 0],[531.16 55 1],[532.426 12 1],[534.63 9 1],[535.473 110 0],[537.386 110 0],[538.934 40 0],[539.136 19 1],[540.447 19 0],[542.402 28 0],[543.578 12 0],[543.874 40 0],[544.407 14 1],[545.292 75 0],[546.338 30 1],[549.73 15 0],[551.012 15 0],[551.045 15 0],[552.435 19 1],[553.802 45 0],[553.826 28 0],[555.06 230 0],[555.212 230 0],[557.586 55 0],[560.077 14 0],[561.327 95 0],[561.401 25 0],[562.827 8 0],[565.083 19 0],[569.803 40 -1],[571.328 25 0],[571.918 160 0],[572.016 25 -1],[574.872 12 0],[576.718 14 1],[580.95 12 1],[581.747 19 0],[584.223 25 1],[584.587 25 0],[584.777 19 0],[588.366 22 0],[592.647 15 0],[593.369 60 0],[597.428 75 0],[597.472 25 0],[597.866 60 0],[599.296 25 0],[601.679 45 0],[602.112 28 -1],[604.319 25 -1],[605.417 25 0],[609.867 95 0],[618.513 95 0],[621.07 55 0],[621.682 28 0],[623.858 45 0],[624.895 60 1],[629.954 22 0],[631.185 25 0],[631.833 19 0],[633.81 30 0],[638.019 19 0],[638.623 60 0],[640.952 19 0],[655.65 15 0],[658.723 28 0],[664.46 45 1],[664.706 19 1],[665.94 11 0],[671.348 30 0],[675.461 17 1],[676.995 11 0],[678.927 85 0],[681.894 160 0],[682.656 15 0],[685.007 13 0],[685.87 35 0],[691.14 45 0],[692.619 10 0],[697.959 19 0],[698.091 21 1],[701.925 7 0],[703.033 7 1],[703.513 7 0],[706.19 11 0],[706.287 15 0],[706.383 160 0],[709.44 11 0],[710.054 15 0],[711.952 55 0],[713.181 570 0],[723.71 650 0],[724.087 410 0],[726.262 6 0],[732.005 75 0],[732.176 16 0],[735.61 6 0],[736.528 6 0],[739.07 20 0],[742.369 6 0],[743.756 25 0],[746.386 13 0],[748.456 7 0],[755.637 15 0],[756.293 75 0],[756.422 15 0],[757.695 11 0],[759.296 11 0],[760.859 13 0],[762.44 360 0],[764.564 20 0],[774.017 110 0],[774.357 8 0],[775.789 5 1],[779.09 40 0],[779.681 7 0],[775.129 20 3],[726.758 10 3]}{1300}%
+\wl@elt@search{#1}{Ta}{[383.374 210 1],[384.805 100 0],[388.52 100 0],[391.851 210 0],[392.278 140 0],[392.292 140 0],[397.01 210 0],[399.617 210 0],[399.928 100 0],[400.684 190 0],[402.694 190 0],[402.994 140 0],[404.087 120 0],[406.14 410 0],[406.463 210 0],[406.724 100 0],[406.791 310 0],[410.502 120 0],[412.938 210 0],[413.62 230 0],[414.789 230 0],[417.521 210 0],[417.792 100 0],[418.115 130 0],[420.588 300 0],[420.64 120 0],[424.535 130 0],[426.826 130 0],[430.298 160 0],[435.514 110 0],[437.882 100 0],[438.607 150 0],[439.845 110 0],[440.25 180 0],[441.574 130 0],[451.098 360 0],[453.085 190 0],[455.195 130 0],[456.585 170 0],[457.431 340 0],[461.951 260 0],[466.914 130 0],[468.188 450 0],[469.19 130 0],[474.016 150 0],[475.651 220 0],[476.898 120 0],[481.275 220 0],[492.011 110 0],[492.127 100 0],[492.6 110 0],[493.642 150 0],[503.737 200 0],[506.787 100 0],[511.584 110 0],[514.162 100 0],[514.369 100 0],[515.656 330 0],[521.274 110 0],[521.845 110 0],[534.105 140 0],[540.251 200 0],[541.919 130 0],[550.068 18 0],[550.566 20 0],[551.627 15 0],[551.891 90 0],[552.115 9 0],[552.398 10 0],[552.836 13 0],[554.52 10 0],[554.832 20 0],[558.402 30 0],[559.875 15 0],[559.952 30 0],[560.55 9 0],[561.771 9 0],[562.068 40 0],[562.82 13 0],[563.571 20 0],[564.018 40 0],[564.591 150 0],[566.49 130 0],[568.825 30 0],[569.924 40 0],[570.431 15 0],[570.628 25 0],[571.524 30 0],[571.653 8 0],[574.671 23 0],[575.581 30 0],[576.161 15 0],[576.656 25 0],[576.791 30 0],[577.193 10 0],[577.677 130 0],[578.002 25 0],[578.071 90 0],[581.11 130 0],[581.651 25 0],[584.394 45 0],[584.968 13 0],[586.661 15 0],[587.736 240 0],[588.23 130 0],[590.191 90 0],[591.651 30 0],[591.895 90 0],[592.59 15 0],[593.062 15 0],[593.105 23 0],[593.168 20 0],[593.554 18 0],[593.976 130 0],[594.402 240 0],[595.178 25 0],[596.013 18 0],[599.723 190 0],[600.989 25 0],[601.59 25 0],[602.072 100 0],[604.539 250 0],[604.725 100 0],[605.37 25 0],[609.082 30 0],[609.206 18 0],[610.158 100 0],[614.007 25 0],[614.456 65 0],[615.254 30 0],[615.45 130 0],[615.884 40 0],[617.046 15 0],[618.966 15 0],[619.311 15 0],[620.837 25 0],[624.979 40 0],[625.668 150 0],[626.87 150 0],[627.834 50 0],[628.133 65 0],[628.736 15 0],[628.791 40 0],[628.934 40 0],[630.906 50 0],[630.958 150 0],[631.222 25 0],[632.508 75 0],[633.291 50 0],[634.117 65 0],[634.602 30 0],[635.616 75 0],[636.084 65 0],[637.306 40 0],[637.907 15 0],[638.945 90 0],[639.221 23 0],[642.86 65 0],[643.079 250 0],[643.736 13 0],[644.461 40 0],[644.587 30 0],[645.036 200 0],[645.583 20 0],[645.992 30 0],[648.537 380 0],[650.243 18 0],[650.552 65 0],[651.439 100 0],[651.61 100 0],[656.16 25 0],[656.426 25 0],[657.484 100 0],[658.513 10 0],[658.716 15 0],[661.195 110 0],[662.13 75 0],[666.224 15 0],[667.373 100 0],[667.553 180 0],[668.4 30 0],[669.361 15 0],[670.646 15 0],[670.939 25 0],[671.444 10 0],[672.361 15 0],[674.073 75 0],[675.491 40 0],[675.585 13 0],[677.037 13 0],[677.174 75 0],[677.425 40 0],[678.899 40 0],[679.006 13 0],[679.927 13 0],[681.046 40 0],[681.325 160 0],[681.936 20 0],[682.496 18 0],[683.2 13 0],[685.083 15 0],[686.513 15 0],[686.623 210 0],[687.527 180 0],[687.749 40 0],[689.677 15 0],[690.055 40 0],[690.21 150 0],[692.738 140 0],[692.854 140 0],[693.933 8 0],[694.687 20 0],[695.126 65 0],[695.388 45 0],[696.613 180 0],[696.949 8 0],[697.131 8 0],[697.153 9 0],[698.352 23 0],[699.522 110 0],[700.021 20 0],[700.507 40 0],[700.696 75 0],[702.503 50 0],[703.151 13 0],[703.907 40 0],[708.13 15 0],[708.54 20 0],[709.302 23 0],[710.805 8 0],[711.752 15 0],[712.127 20 0],[712.572 40 0],[714.863 150 0],[717.29 110 0],[717.491 13 0],[719.135 13 0],[723.345 8 0],[725.027 30 0],[726.482 11 0],[727.229 6 0],[727.696 30 0],[727.754 5 0],[728.636 9 0],[729.632 13 0],[730.174 140 0],[731.984 20 0],[732.272 11 0],[732.595 13 0],[734.019 11 0],[734.641 160 0],[735.286 140 0],[735.696 100 0],[736.909 90 0],[740.789 160 0],[743.519 11 0],[744.017 23 0],[746.775 30 0],[748.601 23 0],[752.056 30 0],[756.923 6 0],[759.022 9 0],[764.962 6 0],[772.202 11 0],[776.311 11 0],[777.967 9 0]}{450}%
+\wl@elt@search{#1}{W}{[380.922 290 0],[381.038 190 0],[381.079 260 0],[381.748 1400 0],[382.913 110 0],[383.506 1100 0],[383.851 290 0],[384.622 730 0],[384.749 250 0],[385.157 27 1],[385.555 150 0],[385.93 150 0],[386.434 180 0],[386.799 1800 0],[387.284 250 0],[387.441 110 0],[388.141 730 0],[389.272 110 0],[389.791 140 0],[393.503 150 0],[393.697 120 0],[394.798 120 0],[395.252 120 0],[395.29 120 0],[395.315 160 0],[395.53 200 0],[396.514 160 0],[396.859 130 0],[397.08 150 0],[397.929 130 0],[398.064 130 0],[398.329 250 0],[400.875 8600 0],[401.522 540 0],[401.652 170 0],[401.923 220 0],[402.212 130 0],[402.879 180 0],[403.686 180 0],[403.985 140 0],[404.428 140 0],[404.559 910 0],[406.479 180 0],[406.979 150 0],[406.995 730 0],[407.061 340 0],[407.193 100 0],[407.436 5000 0],[408.296 150 0],[408.833 130 0],[409.569 100 0],[410.27 1000 0],[410.975 150 0],[411.182 100 0],[411.805 150 0],[411.819 100 0],[412.085 100 0],[412.516 100 0],[412.68 150 0],[413.348 100 0],[413.746 540 0],[413.802 150 0],[414.225 110 0],[414.516 140 0],[414.595 110 0],[415.466 160 0],[417.053 160 0],[417.117 450 0],[420.44 160 0],[420.705 220 0],[421.538 110 0],[421.937 250 0],[422.204 110 0],[423.434 150 0],[424.144 290 0],[424.436 540 0],[425.935 290 0],[426.029 200 0],[426.33 200 0],[426.938 1400 0],[426.977 110 0],[427.455 220 0],[427.549 160 0],[427.674 160 0],[428.234 110 0],[428.601 110 0],[429.41 110 0],[429.461 4100 0],[430.211 2200 0],[430.687 160 0],[430.764 110 0],[433.213 110 0],[434.7 100 0],[435.517 150 0],[436.181 100 0],[436.478 150 0],[436.595 100 0],[437.252 150 0],[437.848 200 0],[438.485 180 0],[440.395 100 0],[440.828 200 0],[441.219 130 0],[443.69 160 0],[446.049 140 0],[446.634 140 0],[446.674 140 0],[448.419 640 0],[450.484 160 0],[451.288 130 0],[451.325 120 0],[454.354 150 0],[454.647 150 0],[455.182 150 0],[457.064 140 0],[458.873 170 0],[459.994 140 0],[460.989 140 0],[461.33 160 0],[464.253 100 0],[465.742 130 0],[465.987 640 0],[468.051 640 0],[469.372 100 0],[475.754 140 0],[484.381 790 0],[488.69 380 0],[498.259 220 0],[500.615 330 0],[501.53 220 0],[505.328 820 0],[505.46 210 0],[506.912 210 0],[507.174 120 0],[522.466 770 0],[550.049 27 0],[550.344 27 0],[550.861 10 0],[551.468 220 0],[553.138 15 0],[553.772 15 0],[556.809 13 0],[560.431 13 0],[563.127 11 0],[563.194 27 0],[564.837 65 0],[566.072 35 0],[567.439 27 0],[567.66 13 0],[567.69 15 0],[569.779 15 0],[573.509 55 0],[574.924 13 0],[575.61 11 0],[579.306 13 0],[579.649 13 0],[580.485 45 0],[580.605 13 0],[583.361 13 0],[583.897 13 0],[584.527 17 0],[585.158 28 0],[585.661 11 0],[586.463 22 0],[587.422 11 0],[588.021 13 0],[589.161 13 0],[590.12 13 0],[590.264 40 0],[592.858 13 0],[594.757 55 0],[595.396 13 0],[595.619 13 0],[596.083 27 0],[596.586 55 0],[597.251 27 0],[597.886 20 0],[598.382 20 0],[600.901 13 0],[601.278 55 0],[602.152 40 0],[602.832 20 0],[604.331 20 0],[604.992 13 0],[606.508 13 0],[608.144 22 0],[611.166 13 0],[611.552 13 0],[612.825 22 0],[614.394 13 0],[615.372 20 0],[615.487 20 0],[620.351 20 0],[625.428 20 0],[628.588 27 0],[629.202 45 0],[630.321 20 0],[638.647 13 0],[640.421 35 0],[644.512 40 0],[650.805 11 0],[653.239 15 0],[653.811 13 0],[656.32 13 0],[657.393 20 0],[660.713 11 0],[660.905 11 0],[661.162 17 0],[662.174 11 0],[667.842 13 0],[669.308 15 0],[674.656 5 0],[676.445 5 0],[680.531 7 0],[681.492 9 0],[682.027 9 0],[682.843 8 0],[685.374 4 0],[687.601 4 0],[690.829 5 0],[693.423 9 0],[696.412 8 0],[698.427 13 0],[699.327 8 0],[699.406 4 0],[701.788 8 0],[702.868 3 0],[709.822 3 0],[711.118 4 0],[714.052 15 0],[716.264 9 0],[719.133 5 0],[719.862 5 0],[720.016 11 0],[721.635 5 0],[722.606 4 0],[723.712 8 0],[727.447 5 0],[727.824 10 0],[728.581 15 0],[729.655 15 0],[729.825 3 0],[738.508 7 0],[745.139 4 0],[745.637 3 0],[748.335 8 0],[750.413 7 0],[750.9 10 0],[752.066 3 0],[753.745 9 0],[755.048 9 0],[756.992 17 0],[758.288 5 0],[761.218 3 0],[761.415 17 0],[763.129 3 0],[765.481 3 0],[768.897 13 0],[770.101 4 0],[776.116 5 0],[777.673 3 0],[778.415 11 0]}{8600}%
+\wl@elt@search{#1}{Re}{[380.774 190 0],[381.566 120 0],[383.63 120 0],[386.994 240 0],[387.526 240 0],[387.686 240 0],[390.821 100 0],[391.392 130 0],[391.727 380 0],[392.985 550 0],[393.69 140 0],[394.472 110 0],[394.591 180 0],[396.104 280 0],[396.248 350 0],[400.493 100 0],[402.296 140 0],[402.331 100 0],[402.963 110 0],[403.331 220 0],[403.749 110 0],[404.899 200 0],[408.143 240 0],[410.442 140 0],[411.089 240 0],[412.164 190 0],[413.342 240 0],[413.645 1800 0],[414.436 700 0],[414.996 140 0],[417.04 160 0],[418.29 220 0],[418.306 220 0],[422.108 650 0],[422.746 3600 0],[424.139 150 0],[425.76 260 0],[429.117 120 0],[430.44 200 0],[433.225 200 0],[435.798 40 1],[435.869 380 0],[436.758 190 0],[439.134 140 0],[439.438 360 0],[440.64 110 0],[441.582 180 0],[447.508 150 0],[447.839 120 0],[450.704 120 0],[451.331 2600 0],[451.664 260 0],[452.273 500 0],[452.388 120 0],[452.995 120 0],[454.517 100 0],[458.068 120 0],[460.573 120 0],[462.138 100 0],[479.142 190 0],[488.914 2200 0],[492.39 220 0],[505.856 40 0],[509.65 70 0],[512.032 20 0],[516.165 25 0],[517.889 40 0],[518.174 20 0],[523.431 35 0],[524.886 50 0],[527.095 1300 0],[527.556 1600 0],[527.824 100 0],[530.556 30 0],[531.728 20 0],[532.128 35 0],[532.746 50 0],[533.19 20 0],[533.276 20 0],[533.385 20 0],[536.948 35 0],[536.98 50 0],[537.71 100 0],[543.19 25 0],[543.703 14 0],[544.792 14 0],[546.064 25 0],[552.005 14 0],[552.11 25 0],[553.268 50 0],[556.324 50 0],[557.347 25 0],[558.472 25 0],[560.721 10 0],[561.227 12 0],[566.788 100 0],[571.143 25 0],[571.695 18 0],[575.293 110 0],[577.683 110 0],[579.16 18 0],[581.592 10 0],[583.431 550 0],[591.986 10 0],[594.324 60 0],[595.021 10 0],[596.977 18 0],[598.999 10 0],[599.573 18 0],[611.422 30 0],[614.581 35 0],[614.682 50 0],[620.324 18 0],[621.797 25 0],[622.942 30 0],[624.324 35 0],[626.002 35 0],[627.137 18 0],[627.876 18 0],[628.641 10 0],[630.342 10 0],[630.77 200 0],[632.19 200 0],[635.075 80 0],[638.294 16 0],[641.147 14 0],[651.147 50 0],[651.525 14 0],[654.491 12 0],[657.711 35 0],[659.252 40 0],[660.519 100 0],[662.391 30 0],[663.725 10 0],[665.239 27 0],[668.328 15 0],[671.13 9 0],[675.122 30 0],[676.119 5 0],[681.341 180 0],[682.99 260 0],[697.153 85 0],[700.663 35 0],[702.415 65 0],[724.667 65 0],[729.272 13 0],[757.873 40 0],[761.189 13 0],[762.025 7 0],[764.094 50 0]}{3600}%
+\wl@elt@search{#1}{Os}{[383.606 250 0],[384.03 150 0],[384.129 150 0],[384.994 190 0],[385.709 230 0],[386.547 230 0],[387.677 730 0],[388.186 250 0],[390.039 140 0],[390.171 190 0],[393 100 0],[393.859 250 0],[394.978 100 0],[396.102 200 0],[396.363 1000 0],[396.496 100 0],[396.967 150 0],[397.544 110 0],[397.723 730 0],[398.818 100 0],[400.348 150 0],[400.402 100 0],[400.516 150 0],[401.826 160 0],[403.784 100 0],[404.192 280 0],[404.805 160 0],[406.669 960 0],[407.086 250 0],[407.156 190 0],[407.468 230 0],[409.182 490 0],[410.03 120 0],[411.202 1200 0],[412.46 180 0],[412.896 180 0],[413.578 2500 0],[413.784 150 0],[417.257 180 0],[417.323 1200 0],[417.563 620 0],[418.413 120 0],[418.991 320 0],[420.145 180 0],[420.206 250 0],[421.186 1200 0],[421.386 120 0],[421.516 100 0],[423.346 170 0],[426.085 4900 0],[426.475 100 0],[426.961 120 0],[428.59 100 0],[429.395 560 0],[431.14 560 0],[432.625 110 0],[432.868 340 0],[433.875 100 0],[435.153 100 0],[436.567 210 0],[437.066 110 0],[439.486 520 0],[439.726 160 0],[440.274 160 0],[442.047 4900 0],[443.241 100 0],[443.632 290 0],[443.964 100 0],[444.735 230 0],[448.476 120 0],[454.866 110 0],[455.041 540 0],[455.13 140 0],[461.678 170 0],[463.183 170 0],[466.382 140 0],[479.399 670 0],[486.56 110 0],[503.183 55 0],[503.912 45 0],[507.288 35 0],[507.477 35 0],[507.909 35 0],[510.35 90 0],[511.081 55 0],[512.223 22 0],[514.554 22 0],[514.974 140 0],[515.201 28 0],[516.898 28 0],[519.352 40 0],[520.263 270 0],[520.323 35 0],[525.046 20 -1],[525.582 45 0],[526.515 55 0],[528.389 20 0],[529.565 20 0],[529.878 40 0],[530.258 13 0],[533.623 18 0],[534.603 11 0],[535.225 13 0],[537.679 110 0],[540.343 16 0],[541.214 13 0],[541.634 120 0],[541.669 45 0],[541.751 28 0],[544.182 16 0],[544.331 55 0],[544.693 22 0],[544.776 11 0],[544.937 20 0],[545.34 20 0],[545.73 22 0],[547 28 0],[547.458 13 0],[547.513 13 0],[547.727 9 0],[548.185 16 0],[550.933 22 0],[551.601 9 0],[552.353 270 0],[554.682 22 0],[554.979 9 0],[555.288 13 0],[556.062 11 0],[558.066 16 0],[558.444 80 0],[560.05 8 0],[562.008 35 0],[563.741 9 0],[564.256 22 0],[564.525 28 0],[564.898 7 0],[566.021 9 0],[567.438 7 0],[568.088 28 0],[570.937 11 0],[572.193 170 0],[573.789 8 0],[573.972 8 0],[576.505 22 0],[578.082 170 0],[580.06 40 0],[584.249 8 0],[585.776 110 0],[586.064 28 0],[588.292 11 0],[590.398 11 0],[590.684 11 0],[590.895 7 0],[598.136 7 0],[598.322 11 0],[599.6 65 0],[601.579 20 0],[605.463 7 0],[614.453 20 0],[615.803 11 0],[622.77 35 0],[624.17 7 0],[626.941 22 0],[627.494 11 0],[628.683 11 0],[639.886 9 0],[640.315 22 0],[644.813 9 0],[652.085 6 0],[652.887 7 0],[653.314 7 0],[653.83 11 0],[657.683 11 0],[661.456 8 0],[661.543 4 0],[666.181 7 0],[672.956 27 0],[679.153 18 0],[680.661 14 0],[687.87 5 0],[690.158 4 0],[695.602 11 0],[698.495 6 0],[706.067 15 0],[714.554 22 0],[714.989 10 0],[718.41 4 0],[720.633 10 0],[720.996 5 0],[725.116 9 0],[725.349 6 0],[737.507 6 0],[740.795 9 0],[760.295 26 0],[770.146 4 0],[778.996 7 0]}{4900}%
+\wl@elt@search{#1}{Ir}{[380.012 3100 0],[381.724 230 0],[386.564 170 0],[390.251 480 0],[391.538 480 0],[393.484 400 0],[394.627 120 0],[397.631 590 0],[399.212 460 0],[402.003 180 0],[403.376 350 0],[404.008 130 0],[406.992 370 0],[407.068 150 0],[409.261 100 0],[411.578 140 0],[412.792 23 0],[415.57 27 0],[416.604 15 0],[417.256 90 0],[418.247 35 0],[418.321 15 0],[418.566 18 0],[419.754 23 0],[421.776 27 0],[422.08 13 0],[425.911 75 0],[426.53 27 0],[426.81 260 0],[428.662 23 0],[430.16 75 0],[431.059 55 0],[431.15 220 0],[435.13 18 0],[435.256 18 0],[439.259 18 0],[439.947 160 0],[440.378 65 0],[442.627 110 0],[445.018 15 0],[447.848 55 0],[449.535 16 0],[449.603 11 0],[454.568 55 0],[454.848 30 0],[455.078 13 0],[456.809 35 0],[457.002 18 0],[460.448 18 0],[461.639 75 0],[465.618 26 0],[466.899 17 0],[470.888 21 0],[472.886 50 0],[473.186 21 0],[475.646 26 0],[475.796 13 0],[477.816 65 0],[479.567 30 0],[480.714 10 0],[480.947 21 0],[484.077 10 0],[484.538 17 0],[493.809 50 0],[497.048 26 0],[499.974 25 0],[500.274 25 0],[500.917 17 0],[501.498 30 0],[504.606 17 0],[512.366 30 0],[517.795 20 0],[523.892 22 0],[534.074 12 0],[536.432 35 0],[544.95 75 0],[545.45 30 0],[546.94 7 0],[562.004 10 0],[562.555 45 0],[582.855 10 0],[588.23 10 0],[588.736 7 0],[589.406 35 0],[602.61 7 0],[606.783 12 0],[611.067 20 0],[628.828 12 0],[633.444 7 0],[662.473 5 0],[668.608 10 0],[683.001 5 0],[692.988 5 0],[718.371 4 0]}{3100}%
+\wl@elt@search{#1}{Pt}{[380.105 20 -1],[381.869 80 0],[390.073 40 0],[392.296 110 0],[394.84 35 0],[396.636 100 0],[399.657 20 0],[411.869 110 0],[416.456 80 0],[419.243 40 0],[432.706 18 0],[439.183 18 0],[444.255 80 0],[444.555 14 0],[449.876 25 0],[452.09 12 0],[455.242 35 0],[487.953 12 0],[504.404 14 0],[505.948 30 0],[522.766 35 0],[530.102 40 0],[536.899 12 0],[539.079 12 0],[547.577 14 0],[547.85 14 0],[576.357 6 0],[584.012 20 0],[584.484 8 0],[602.604 6 0],[631.837 7 0],[632.658 8 0],[652.345 9 0],[671.042 10 0],[676.002 20 0],[684.26 60 0],[711.373 20 0]}{110}%
+\wl@elt@search{#1}{Au}{[380.192 30 0],[380.401 30 1],[382.185 10 0],[382.57 10 0],[387.473 100 0],[388.025 30 0],[388.948 30 0],[389.226 100 0],[389.786 400 0],[390.109 30 0],[390.938 300 0],[392.769 100 0],[395.91 10 0],[396.623 30 0],[397.665 30 0],[397.968 30 0],[399.137 30 0],[401.257 3 0],[401.607 10 1],[404.093 400 0],[405.279 30 1],[406.507 700 0],[407.635 10 1],[408.328 3 1],[408.41 100 0],[410.17 30 0],[412.859 30 0],[420.113 30 0],[422.788 30 0],[424.18 100 0],[431.511 200 0],[436.104 30 1],[442.061 10 1],[443.727 120 0],[448.825 250 0],[460.751 900 0],[462.056 100 0],[466.392 1 0],[466.397 3 0],[469.469 10 0],[476.017 3 1],[479.258 500 0],[481.16 100 0],[482.296 10 0],[495.082 30 0],[506.459 30 0],[510.884 30 0],[514.744 100 0],[523.026 300 0],[526.176 100 0],[565.577 100 0],[572.136 100 0],[583.737 300 0],[586.293 100 0],[595.696 300 0],[596.268 30 0],[627.817 600 0],[656.268 100 0],[665.289 30 0],[751.073 600 0]}{900}%
+\wl@elt@search{#1}{Hg}{[380.166 30 0],[390.1867 20 0],[390.6372 60 0],[398.3839 200 1],[404.6572 1800 0],[407.7838 150 0],[410.8057 40 0],[433.9224 250 0],[434.7496 400 0],[435.8337 4000 0],[491.6068 80 0],[546.0753 1100 0],[567.5922 160 0],[576.9598 240 0],[579.0663 280 0],[607.2713 20 0],[623.4402 30 0],[671.6429 160 0],[690.7461 250 0],[380.166 30 0],[380.638 100 1],[390.187 20 0],[390.637 60 0],[391.892 100 1],[398.396 200 1],[404.656 1800 0],[407.783 150 0],[410.805 40 0],[433.922 250 0],[434.749 400 0],[435.833 4000 0],[439.862 100 1],[466.028 90 1],[485.572 80 1],[488.3 5 0],[488.991 5 0],[491.607 80 0],[497.037 5 0],[498.064 5 0],[510.27 20 0],[512.064 40 0],[512.845 100 1],[513.794 20 0],[529.074 20 0],[531.678 5 0],[535.405 60 0],[538.463 30 0],[546.074 1100 0],[554.963 30 0],[567.586 160 0],[576.96 240 0],[578.966 100 0],[579.066 280 0],[580.378 140 0],[585.925 60 0],[587.173 60 1],[587.198 20 0],[607.272 20 0],[614.95 1000 1],[623.44 30 0],[652.113 80 1],[671.643 160 0],[690.752 250 0],[708.19 250 0],[709.186 200 0],[734.637 40 1],[748.587 100 1],[772.882 20 0],[380.351 15 2],[412.207 70 2],[414.034 10 2],[421.674 100 2],[447.058 15 2],[455.284 12 2],[479.701 50 2],[486.985 10 2],[497.357 80 2],[521.082 30 2],[569.571 6 2],[622.035 25 2],[641.898 35 2],[650.138 40 2],[658.426 10 2],[661.012 6 2],[670.929 30 2],[751.746 12 2]}{4000}%
+\wl@elt@search{#1}{Tl}{[383.23 10 1],[386.915 6 1],[388.715 10 1],[422.305 8 1],[427.498 20 1],[430.68 40 1],[435.99 2 0],[449.077 8 1],[473.705 20 1],[498.135 15 1],[507.854 25 1],[515.214 25 1],[518.195 6 1],[518.31 6 1],[535.046 18000 0],[538.485 15 1],[540.992 7 1],[541.097 10 1],[594.948 25 1],[617.998 10 1],[623.903 8 1],[637.832 10 1],[654.984 16 0],[671.38 6 0],[696.65 10 1],[749.36 3 0],[767.893 2 0],[393.305 6 2],[394.602 2 2],[410.985 7 2],[415.575 4 2],[426.981 6 2],[438.057 2 2],[508.699 4 2],[536.24 4 2],[549.94 2 2],[592.78 5 2]}{18000}%
+\wl@elt@search{#1}{Pb}{[401.9632 15000 0],[405.7807 95000 0],[406.2136 14000 0],[411.076 5 1],[411.335 4 1],[415.282 10 1],[415.7814 10 0],[416.8033 10000 0],[424.214 9 1],[424.492 20 1],[429.382 7 1],[429.665 6 1],[434.0413 200 0],[435.274 10 1],[438.646 20 1],[457.9051 10 1],[458.227 10 1],[500.5416 1000 0],[500.6572 100 0],[504.258 50 1],[507.058 10 1],[507.453 10 1],[507.635 10 0],[508.9484 50 0],[509.001 20 0],[510.7242 10 0],[511.164 10 1],[520.1437 2000 0],[536.764 10 1],[537.2099 10 1],[554.425 10 1],[560.885 20 1],[569.2346 40 0],[589.5624 200 0],[600.1862 2000 0],[600.958 9 1],[601.1667 500 0],[604.117 8 1],[605.9356 500 0],[607.574 40 1],[608.1409 40 1],[611.052 50 0],[615.989 10 1],[623.5266 100 0],[666.02 50 1],[689.211 10 0],[712.894 5 0],[719.36 20 1],[722.8965 20000 0],[730.468 5 0],[733.015 8 0],[734.6676 10 0],[755.897 10 1],[763.256 10 1],[773.296 4 1],[385.408 12 2],[395.192 8 2],[403.116 3 2],[409.454 3 2],[412.811 2 2],[427.266 8 2],[449.934 6 2],[457.121 7 2],[459.645 1 2],[476.112 6 2],[479.859 4 2],[482.686 1 2],[485.506 2 2],[506.512 3 2],[519.156 4 2],[552.397 5 2],[577.941 3 2],[585.796 6 2],[396.248 4 3],[404.98 4 3],[449.615 10 3],[453.46 16 3],[460.54 8 3],[591.454 2 3],[480.936 4 4],[665.099 5 4],[675.32 4 4]}{95000}%
+\wl@elt@search{#1}{Bi}{[381.11 12 1],[381.58 20 1],[384.58 10 1],[386.39 30 1],[407.91 40 1],[409.72 10 1],[412.153 140 0],[412.186 140 0],[425.94 75 1],[427.2 25 1],[430.17 70 1],[433.98 12 1],[434.05 25 1],[437.94 12 1],[447.68 25 1],[470.53 60 1],[472.252 600 0],[473.03 30 1],[474.97 20 1],[490.82 12 1],[491.66 10 1],[496.97 12 1],[499.36 20 1],[509.16 10 1],[512.43 50 1],[514.43 60 1],[520.15 20 1],[520.92 75 1],[527.03 40 1],[539.78 10 1],[555.235 10 0],[559.941 3 0],[565.52 20 1],[571.92 40 1],[574.255 6 0],[581.83 12 1],[586.02 20 1],[597.3 20 1],[605.91 15 1],[612.8 15 1],[613.482 6 0],[647.573 3 0],[647.624 3 0],[649.77 15 1],[657.72 10 1],[660.02 40 1],[680.86 50 1],[699.112 4 0],[703.3 12 1],[703.615 2 0],[738.1 10 1],[750.233 2 0],[763.7 10 1],[775 10 1],[422.46 12 2],[432.78 25 2],[456.084 30 2],[456.154 30 2],[479.74 40 2],[507.93 45 2],[662.34 12 2],[738.1 10 2],[755.1 12 2],[759.8 25 2],[763.7 10 2],[386.8 100 3],[434.2 30 3],[534.7 30 3]}{600}%
+\wl@elt@search{#1}{Po}{[386.193 500 0],[405.198 200 -1],[417.052 1200 0],[423.613 250 -1],[441.558 200 -1],[449.321 800 0],[461.144 350 0],[486.712 200 -1],[487.624 400 0],[494.681 450 -1],[532.323 350 0],[574.485 300 0]}{1200}%
+\wl@elt@search{#1}{Rn}{[391.72 10 0],[394.172 10 0],[395.236 10 0],[422.606 10 0],[430.776 80 0],[433.578 7 0],[434.96 100 0],[443.505 40 0],[445.925 50 0],[450.848 50 0],[457.772 50 0],[460.938 50 0],[472.176 30 0],[572.258 6 0],[606.192 10 0],[620.075 6 0],[638.045 6 0],[655.749 10 0],[660.643 10 0],[662.723 15 0],[666.96 6 0],[670.428 8 0],[675.181 20 0],[680.679 6 0],[683.695 8 0],[683.757 8 0],[689.116 10 0],[699.89 10 0],[705.542 200 0],[726.811 100 0],[729.1 20 0],[732.098 6 0],[741.904 10 0],[745 300 0],[747.089 8 0],[748.313 8 0],[751.413 8 0],[751.692 8 0],[752.393 6 0],[759.755 6 0],[760.128 8 0],[765.748 10 0],[773.843 10 0],[774.664 20 0]}{300}%
+\wl@elt@search{#1}{Ra}{[381.442 200 1],[419.409 8 1],[424.472 8 1],[434.064 100 1],[443.627 20 1],[453.311 30 1],[464.129 8 0],[468.228 100 1],[469.928 8 0],[482.591 100 0],[485.607 10 0],[485.941 10 1],[492.753 10 1],[509.756 10 0],[520.593 10 0],[528.328 10 0],[532.029 10 0],[539.98 10 0],[540.023 20 0],[540.681 20 0],[548.213 8 0],[550.198 10 0],[555.357 10 0],[555.585 20 0],[561.666 10 0],[566.081 50 0],[581.363 20 1],[620.03 30 0],[633.69 10 0],[644.62 20 0],[648.732 20 0],[659.334 10 1],[671.932 10 1],[698.022 20 0],[711.85 20 0],[714.121 50 0],[722.516 20 0],[731.027 10 0]}{200}%
+\wl@elt@search{#1}{Ac}{[386.312 2000 1],[391.447 100 1],[406.16 400 1],[408.844 3000 1],[416.84 3000 1],[417.998 100 0],[418.312 20 0],[419.44 20 0],[420.969 300 1],[435.913 300 1],[438.453 20 0],[438.641 1000 1],[439.671 20 0],[446.273 20 0],[450.72 1000 1],[460.545 500 1],[471.658 10 0],[472.016 400 1],[481.222 300 1],[494.518 100 1],[495.823 100 1],[496.087 100 1],[544.638 150 1],[573.205 300 1],[575.897 400 1],[591.085 1000 1],[616.475 600 1],[616.783 200 1],[624.283 400 1],[635.986 20 0],[669.127 20 0],[729.04 6 0],[441.309 2000 2],[456.987 3000 2],[519.321 8 2]}{3000}%
+\wl@elt@search{#1}{Th}{[380.0197 50 0],[380.3075 590 0],[380.7273 50 0],[381.3068 340 1],[381.8685 50 0],[382.5133 75 0],[382.8384 450 0],[383.6584 70 0],[383.9746 840 1],[384.196 280 1],[384.6887 100 0],[385.2135 85 0],[385.4511 390 1],[385.984 140 1],[386.3405 450 1],[386.9663 100 0],[387.5374 210 0],[387.9644 140 0],[388.6915 100 0],[389.5419 340 0],[390.1661 50 0],[390.3102 110 0],[390.5186 170 1],[390.875 50 0],[391.1909 85 0],[391.6417 50 0],[391.9023 110 0],[392.5093 140 0],[392.9669 590 1],[393.2911 200 0],[393.704 140 1],[394.2072 50 0],[394.803 50 0],[394.8964 200 1],[395.276 50 0],[395.93 110 0],[396.7392 390 0],[397.2155 200 0],[398.0089 150 0],[399.173 110 0],[399.4549 530 1],[399.8061 50 0],[400.3309 240 1],[400.7021 250 1],[400.821 220 0],[400.9056 220 0],[401.2495 280 0],[401.9129 4200 1],[402.5656 210 1],[402.7009 140 0],[403.0842 250 0],[403.6047 250 0],[403.6565 240 1],[404.1204 240 1],[404.8287 55 0],[405.0887 110 0],[405.9253 140 0],[406.3407 250 0],[406.9201 300 1],[406.9461 100 0],[407.5503 55 0],[408.1368 110 0],[408.5434 85 0],[408.652 700 1],[408.8726 70 0],[409.4747 700 1],[410.0341 150 0],[410.533 270 1],[410.8421 840 1],[411.2754 240 0],[411.5758 280 0],[411.6713 1100 1],[412.36 30 0],[412.7411 200 0],[413.1002 110 0],[413.2753 340 1],[413.4067 200 0],[414.0235 220 1],[414.2701 250 1],[414.8182 200 1],[414.9986 450 1],[415.8535 110 0],[416.5766 140 0],[417.806 620 1],[417.9714 250 1],[418.4138 30 0],[419.3017 130 0],[420.889 620 1],[421.0923 130 0],[421.4828 28 0],[422.0065 55 0],[422.7387 55 0],[423.0824 30 0],[423.5463 85 0],[424.1094 20 0],[424.7989 30 1],[425.3538 110 0],[425.6254 70 0],[426.0333 110 0],[426.9942 28 0],[427.3357 280 1],[427.7313 480 1],[428.2042 700 1],[428.8669 28 0],[429.7306 55 0],[429.9839 85 0],[430.7176 100 0],[430.9991 200 1],[431.5254 55 0],[431.8416 110 0],[432.5274 30 0],[433.0844 28 0],[433.7277 130 0],[434.2256 85 1],[434.4326 130 1],[434.9072 55 0],[435.4484 55 0],[435.9372 85 0],[436.593 85 0],[437.4123 85 0],[438.186 1300 1],[439.111 1100 1],[439.2974 55 0],[440.158 55 0],[440.8882 85 0],[441.2741 210 1],[441.6845 28 0],[442.2048 50 0],[443.2963 250 1],[444.0866 140 1],[445.2565 25 0],[445.8002 85 0],[446.5341 220 1],[447.5221 30 0],[448.2169 75 0],[448.9664 50 0],[449.894 110 0],[450.5216 55 0],[451.0527 280 1],[452.1194 70 0],[453.0319 22 0],[453.5255 40 0],[454.5915 30 1],[455.5812 70 0],[456.366 40 0],[457.0972 65 0],[458.8426 50 0],[459.5421 75 0],[461.2554 26 1],[462.1163 30 0],[463.1761 140 1],[463.1761 140 1],[464.1254 30 0],[465.1558 140 1],[466.3202 23 0],[466.9984 50 0],[467.6056 65 0],[468.6195 50 0],[469.4091 140 1],[470.399 50 0],[471.2841 20 0],[472.3438 90 0],[472.9128 30 0],[474.0529 190 1],[475.2414 140 1],[476.66 13 0],[477.8294 50 0],[478.6531 20 0],[478.9387 40 0],[480.8134 45 0],[481.9193 20 0],[482.2855 26 0],[482.67 40 0],[483.1121 45 0],[484.0843 50 0],[484.8362 30 0],[485.2868 15 0],[485.8333 40 1],[486.3163 280 1],[487.2917 40 0],[487.8733 26 0],[489.4955 45 0],[490.7209 20 0],[491.9816 240 1],[492.778 18 0],[493.9642 40 0],[494.7575 60 1],[495.4659 50 1],[496.5731 30 0],[497.595 35 1],[498.5372 24 0],[500.2097 50 0],[500.2097 50 0],[501.5889 50 1],[501.7255 260 1],[502.9892 20 0],[503.923 24 0],[504.4719 50 0],[504.9796 240 1],[505.5347 85 1],[505.8562 70 1],[506.7974 110 0],[508.1446 30 0],[509.0051 50 0],[509.8043 50 1],[510.113 40 0],[511.0867 50 1],[511.5044 30 0],[512.595 10 0],[513.4746 20 0],[514.3267 95 1],[514.8211 120 1],[515.1612 50 0],[515.4243 50 0],[515.8604 85 0],[516.073 70 0],[516.8922 20 0],[517.6961 50 0],[518.399 35 1],[519.0871 50 1],[519.5814 50 0],[519.88 50 0],[519.9164 95 0],[521.123 50 0],[521.6596 95 1],[521.8528 50 1],[521.911 35 0],[523.116 110 0],[523.3225 85 1],[523.3229 85 1],[524.7654 95 1],[525.5573 10 0],[525.836 35 0],[526.671 12 0],[527.7501 70 1],[528.1069 15 0],[529.4397 10 0],[529.7743 30 0],[530.7466 30 1],[531.2002 35 0],[531.7494 20 0],[532.5145 60 1],[532.6976 50 0],[533.008 20 0],[534.3581 60 0],[535.1126 14 0],[535.8707 30 0],[536.9281 20 0],[537.8836 30 0],[539.0466 70 1],[539.2572 50 0],[539.9175 20 0],[541.7486 24 0],[542.5678 60 1],[543.5893 50 1],[544.9479 40 1],[546.2615 30 1],[547.0759 15 0],[548.4147 24 1],[549.6137 10 0],[550.4302 19 0],[550.9994 35 0],[552.4584 12 0],[553.9262 50 0],[553.9911 70 1],[554.8176 35 0],[555.8342 50 0],[556.4203 60 1],[557.3354 40 0],[558.7026 60 0],[559.5064 24 0],[560.4515 50 1],[561.532 35 0],[563.0297 7 0],[563.9746 70 1],[564.8991 7 0],[565.7925 12 0],[566.7128 15 0],[567.7053 20 0],[568.5192 10 0],[570.0918 65 1],[570.7103 95 1],[572.0183 50 0],[573.2975 30 1],[574.2084 24 1],[574.9388 30 1],[576.0551 70 0],[577.3946 15 0],[578.9645 20 0],[580.4141 35 0],[581.5422 19 1],[583.237 10 0],[584.5919 10 0],[585.4121 15 0],[586.8373 15 0],[587.8933 10 0],[589.1451 8 0],[589.9844 15 0],[591.4387 20 1],[592.5893 19 1],[593.7162 10 0],[594.4648 10 0],[595.7587 8 0],[597.3665 30 0],[598.9044 85 1],[599.4129 24 0],[600.7072 21 0],[601.5426 30 1],[602.1036 17 0],[603.7698 17 0],[604.4431 24 1],[605.3381 10 0],[606.1536 5 0],[607.7106 30 0],[608.7262 30 1],[609.9083 24 0],[610.458 30 0],[611.2837 40 0],[612.0557 30 1],[612.448 10 0],[615.1993 14 0],[616.1354 10 0],[616.9822 60 0],[618.2622 50 0],[619.1906 12 0],[619.3858 24 1],[620.3493 12 0],[622.4528 12 0],[623.4856 24 0],[624.0954 8 0],[625.7424 10 0],[626.1063 21 0],[626.1418 21 0],[627.4116 50 1],[627.4117 50 1],[627.9172 30 1],[629.1192 8 0],[630.3251 10 1],[631.7185 8 0],[632.7278 21 0],[634.286 35 0],[635.5911 50 1],[636.914 14 0],[637.6931 40 0],[641.1899 30 0],[641.3615 24 0],[643.7762 15 0],[645.0005 15 0],[645.7283 60 0],[646.2614 50 0],[646.6717 5 0],[649.0738 14 0],[650.1992 5 0],[651.2364 20 0],[652.2044 5 0],[653.1342 50 0],[655.416 6 0],[655.8876 5 0],[656.507 3 0],[657.7215 5 0],[658.3907 24 0],[658.854 24 0],[659.394 24 0],[660.5416 24 1],[661.9946 24 1],[661.9947 24 1],[664.465 21 1],[665.8678 6 1],[666.2269 30 0],[667.4697 6 0],[668.3367 3 0],[669.2724 8 1],[669.7712 5 0],[672.7459 16 0],[673.5126 3 0],[674.2884 5 0],[675.6453 20 0],[676.5677 6 0],[677.8313 15 0],[678.0413 15 0],[679.1236 6 0],[679.8747 3 0],[680.9511 3 0],[682.3509 5 0],[682.9036 11 0],[683.4925 14 0],[686.2873 4 0],[686.6367 5 0],[687.4754 8 0],[688.9303 20 1],[690.8988 3 0],[691.1227 24 0],[691.6129 5 0],[693.6652 5 0],[694.3611 35 0],[695.4657 5 0],[696.5947 15 0],[698.1086 3 0],[698.9656 55 0],[699.3038 24 1],[700.0806 18 0],[700.0806 18 0],[701.5319 3 0],[701.8569 10 0],[702.6462 3 0],[703.6281 7 0],[704.5795 30 1],[705.3619 15 1],[706.0654 6 0],[707.5333 24 1],[708.4171 30 0],[708.9339 24 1],[710.0512 10 1],[710.9861 3 0],[712.4562 11 0],[713.2613 3 0],[714.856 5 0],[715.4954 10 0],[716.8896 30 0],[717.3373 15 0],[719.1132 40 1],[720.0046 7 0],[720.8006 35 0],[721.269 11 0],[721.7755 10 1],[721.8054 11 0],[724.2355 3 0],[725.5354 5 0],[727.0558 3 0],[728.4904 7 0],[729.8143 5 0],[730.5405 11 1],[731.5067 5 0],[732.4808 7 0],[733.9606 5 0],[734.1152 8 0],[736.1349 5 0],[738.4175 5 0],[738.5501 18 0],[739.3431 3 1],[740.2252 5 0],[741.855 3 0],[742.894 21 0],[743.0254 10 0],[744.4749 3 0],[746.2993 2 0],[748.1355 10 0],[749.3427 2 0],[752.5508 50 1],[754.9314 7 0],[756.774 18 0],[758.569 12 0],[758.5792 12 0],[759.8204 4 0],[760.7824 2 0],[762.7176 5 0],[763.6176 3 0],[764.738 30 0],[765.8324 4 0],[767.6219 7 0],[768.5305 21 0],[771.0269 4 0],[772.8951 4 0],[773.172 10 1],[777.1948 4 0],[778.779 15 1],[778.8937 15 0],[779.836 5 0],[455.573 100 2],[458.928 50 2],[537.613 100 2],[544.718 50 2],[624.295 50 2],[659.939 50 2],[746.159 50 2],[493.709 2 3],[495.252 4 3],[542.038 3 3],[671.187 2 3],[674.037 3 3],[690.116 50 3]}{4200}%
+\wl@elt@search{#1}{Pa}{[387.335 3000 0],[393.183 3000 0],[395.262 3000 1],[395.785 10000 1],[397.007 3000 1],[398.182 3000 0],[398.223 10000 0],[401.296 3000 1],[401.821 3000 1],[403.016 3000 1],[404.693 3000 1],[405.62 10000 1],[407.04 10000 1],[411.762 3000 -1],[417.618 3000 1],[421.723 10000 1],[424.808 10000 1],[429.134 3000 1],[440.077 3000 -1],[443.613 3000 -1],[460.143 3000 1],[462.819 3000 -1],[482.034 3000 -1],[486.149 3000 -1],[603.578 3000 0],[616.256 3000 0],[621.635 3000 -1],[635.861 3000 0],[637.925 3000 0],[643.897 3000 0],[679.275 3000 0],[694.572 10000 0],[696.009 3000 0],[696.178 3000 0],[699.273 3000 0],[707.627 3000 0],[710.094 3000 0],[711.489 10000 0],[717.155 3000 0],[722.713 3000 0],[731.879 3000 0],[736.825 10000 0],[747.189 3000 0],[749.315 10000 0],[755.826 3000 0],[760.82 10000 0],[762.679 10000 0],[763.518 10000 0],[766.934 10000 0],[767.92 3000 0],[774.919 10000 0]}{10000}%
+\wl@elt@search{#1}{U}{[380.892 380 0],[380.922 380 1],[381.199 1900 0],[381.379 380 1],[381.406 380 1],[382.651 750 1],[383.146 2000 1],[383.963 1200 0],[384.86 490 1],[385.422 620 0],[385.464 2400 1],[385.957 4900 1],[386.117 490 1],[386.592 1900 1],[386.68 380 1],[387.103 1500 0],[387.404 620 1],[387.808 620 1],[388.145 1000 1],[388.236 490 1],[388.328 380 1],[389.036 2200 1],[389.268 620 1],[389.412 490 0],[389.677 490 1],[389.978 620 1],[390.255 410 1],[390.43 460 1],[390.645 380 0],[391.167 330 1],[391.588 380 1],[392.621 330 0],[392.672 330 0],[393.098 430 1],[393.202 2000 1],[393.538 490 1],[394.048 330 1],[394.382 1200 0],[394.844 300 0],[395.358 300 1],[395.467 360 1],[396.421 350 0],[396.652 600 1],[398.579 1200 1],[399.042 460 1],[399.253 380 1],[399.824 350 1],[400.406 350 1],[400.521 430 0],[401.772 570 1],[401.899 300 1],[404.275 1000 0],[404.441 520 1],[404.761 410 0],[405.004 1600 1],[405.191 540 1],[405.43 300 1],[405.819 430 1],[406.254 880 1],[406.775 520 1],[407.112 410 1],[407.448 300 1],[407.669 330 1],[408.06 330 1],[409.013 2200 1],[409.303 460 1],[410.638 380 1],[411.61 810 1],[412.473 410 1],[412.834 410 1],[414.122 460 1],[415.397 880 0],[415.665 380 0],[416.368 350 1],[417.159 1400 1],[418.927 300 1],[422.237 350 0],[424.167 1000 1],[424.437 520 1],[434.169 680 1],[435.574 430 0],[436.205 430 0],[439.359 330 0],[447.233 600 1],[451.528 240 1],[454.363 620 1],[462.021 300 0],[462.707 240 1],[463.162 210 0],[464.66 220 1],[466.685 140 1],[467.14 100 1],[468.907 170 1],[470.251 100 1],[472.272 160 1],[473.159 120 1],[475.574 100 1],[475.681 150 0],[477.27 100 1],[486.099 100 1],[500.821 110 1],[502.738 170 0],[511.724 70 1],[516.032 80 1],[516.414 55 0],[518.457 55 1],[520.431 45 1],[524.775 45 1],[525.704 45 1],[528.038 70 0],[538.619 55 1],[547.57 80 1],[548.026 70 1],[548.12 70 1],[548.253 45 1],[549.295 160 1],[552.782 70 1],[556.417 70 0],[558.159 45 1],[562.078 55 0],[578.059 70 0],[579.853 70 1],[583.602 45 0],[583.768 55 1],[591.539 230 0],[597.15 55 0],[597.632 100 0],[599.731 45 0],[601.738 28 1],[605.174 55 1],[606.722 45 1],[607.729 90 0],[608.734 28 1],[617.186 40 0],[617.539 35 0],[628.018 28 1],[635.929 28 0],[637.246 55 0],[637.852 28 1],[639.277 28 0],[639.542 90 0],[644.916 110 0],[646.498 35 0],[682.692 90 0],[687.674 35 1],[707.479 23 0],[710.161 27 0],[712.89 30 0],[714.789 16 0],[725.445 16 0],[742.55 23 0],[753.393 45 0],[761.935 16 0]}{4900}%
+\wl@elt@search{#1}{Np}{[398.689 300 0],[504.466 300 0],[560.17 300 0],[565.275 300 0],[578.439 300 0],[587.804 300 0],[601.122 300 0],[605.609 300 0],[607.39 300 0],[608.005 300 0],[612.049 300 0],[618.859 300 0],[620 300 0],[621.59 300 0],[631.784 300 0],[634.138 300 0],[656.611 300 0],[672.068 300 0],[675.132 300 0],[679.521 300 0],[680.262 300 0],[680.581 300 0],[681.644 300 0],[686.545 300 0],[690.713 300 0],[691.291 300 0],[693.031 1000 0],[696.363 300 0],[697.209 3000 0],[701.402 300 0],[701.891 300 0],[703.914 300 0],[708.001 300 0],[717.483 300 0],[718.493 300 0],[728.428 300 0],[729.229 300 0],[733.252 300 0],[737.06 300 0],[738.103 300 0],[738.165 300 0],[740.27 300 0],[751.222 300 0],[751.515 300 0],[754.605 300 0],[762.483 300 0],[762.685 300 0],[768.101 300 0],[768.525 300 0],[773.514 1000 0],[776.161 300 0],[776.575 1000 0],[777.607 300 0],[778.746 300 0],[779.138 1000 0]}{3000}%
+\wl@elt@search{#1}{Pu}{[380.593 10000 0],[381.14 10000 0],[381.23 10000 1],[382.757 10000 0],[383.552 10000 0],[383.696 10000 0],[383.892 10000 0],[384.21 10000 0],[385.101 10000 0],[385.185 10000 0],[387.854 10000 0],[389.589 10000 0],[392.853 10000 0],[397.543 10000 1],[409.712 10000 0],[410.196 10000 0],[410.595 10000 1],[411.107 10000 0],[411.491 10000 0],[412.812 10000 0],[412.993 10000 1],[413.301 10000 0],[413.597 10000 0],[414.004 10000 0],[414.12 10000 1],[415.109 10000 0],[415.145 10000 0],[415.546 10000 0],[415.939 10000 1],[416.777 10000 0],[417.095 10000 0],[417.828 10000 1],[418.99 10000 1],[419.006 10000 1],[419.62 10000 1],[420.648 10000 0],[420.823 10000 0],[422.187 10000 0],[422.42 10000 0],[422.977 10000 1],[425.476 10000 1],[426.188 10000 0],[426.977 10000 0],[427.334 10000 1],[428.117 10000 0],[428.908 10000 1],[433.718 10000 1],[435.271 10000 1],[436.741 10000 0],[437.991 10000 1],[438.535 10000 1],[439.393 10000 1],[440.49 10000 0],[444.165 10000 1],[446.854 10000 1],[447.279 10000 1],[449.378 10000 1],[450.491 10000 1],[453.615 10000 1],[473.54 10000 0],[498.934 10000 0],[526.986 10000 0],[538.102 10000 0],[549.85 10000 0],[551.072 10000 0],[553.759 10000 0],[554.962 10000 0],[559.054 10000 0],[559.233 10000 0],[571.239 10000 0],[577.026 10000 0],[583.905 10000 0],[598.335 10000 0],[601.278 10000 0],[619.28 10000 0],[630.466 10000 0],[644.975 10000 0],[648.671 10000 0],[648.886 10000 0],[648.889 10000 -1],[653.527 10000 0],[654.421 10000 0],[660.895 10000 0],[667.272 10000 0],[678.466 10000 0],[688.016 10000 0],[689.138 10000 0],[705.923 10000 0],[706.89 10000 0],[709.246 10000 0],[711.688 10000 0],[714.166 10000 0],[717.714 10000 0],[723.109 10000 0],[725.806 10000 0],[732.223 10000 0],[732.597 10000 0],[733.181 10000 0],[743.118 10000 0],[744.799 10000 0],[750.78 10000 0],[752.693 10000 0],[754.745 10000 0],[756.45 10000 0],[757.187 10000 0],[757.293 10000 0],[760.977 10000 0],[768.94 10000 0],[775.82 10000 0],[779.854 10000 0]}{10000}%
+\wl@elt@search{#1}{Am}{[392.625 5000 1],[395.258 1000 1],[402.025 100 0],[403.581 100 0],[403.637 500 1],[408.929 5000 1],[408.932 100 1],[414.096 100 0],[418.812 1000 1],[426.555 1000 0],[428.926 5000 0],[430.965 200 1],[432.457 2000 1],[444.136 2000 1],[450.945 5000 1],[457.559 5000 1],[459.331 1000 1],[464.912 100 0],[465.345 100 0],[466.279 5000 0],[468.165 2000 0],[469.97 2000 1],[470.68 1000 0],[487.222 2000 1],[499.079 200 0],[500.021 100 0],[502.096 1000 1],[521.599 200 1],[540.262 1000 0],[542.47 1000 0],[558.421 1000 1],[559.813 1000 0],[605.464 10000 0],[640.511 1000 0],[654.416 500 0],[695.558 500 0]}{10000}%
+\wl@elt@search{#1}{Cm}{[381.63 10000 0],[382.514 10000 0],[383.332 10000 0],[383.759 10000 0],[384.2 10000 0],[384.992 10000 0],[385.411 10000 0],[390.025 10000 0],[390.406 10000 1],[390.824 10000 1],[393.667 10000 0],[394.203 10000 0],[394.415 10000 0],[394.868 10000 0],[395.336 10000 0],[396.483 10000 0],[399.51 10000 0],[401.617 10000 0],[403.176 10000 0],[404.829 10000 0],[404.965 10000 0],[411.329 10000 0],[412.971 10000 0],[420.766 10000 1],[421.162 10000 0],[426.645 10000 0],[429.3 10000 0],[433.082 10000 0],[434.569 10000 0],[444.777 10000 0],[445.916 10000 0],[460.84 10000 0],[584.607 10000 0],[595.241 10000 0],[605.89 10000 0],[624.335 10000 0],[637.671 10000 0],[651.016 10000 0],[655.441 10000 0],[664.017 10000 0],[666.325 10000 0],[668.687 10000 0],[670.685 10000 0],[672.668 10000 0],[679.315 10000 0],[716.269 10000 0],[757.78 10000 0],[767.379 10000 0],[772.047 10000 0]}{10000}%
+\wl@elt@search{#1}{Bk}{[380.108 10000 1],[380.235 10000 0],[380.247 10000 0],[381.529 10000 0],[382.31 10000 1],[382.408 10000 1],[382.519 10000 0],[382.584 10000 1],[382.741 10000 0],[383.055 10000 0],[383.157 10000 1],[383.348 10000 -1],[383.597 10000 1],[384.219 10000 0],[384.662 10000 0],[384.763 10000 0],[385.503 10000 0],[385.989 10000 1],[387.794 10000 1],[388.011 10000 0],[388.26 10000 0],[389.455 10000 1],[390.609 10000 1],[391.216 10000 1],[391.637 10000 1],[392.142 10000 0],[392.805 10000 1],[414.713 10000 1],[418.969 10000 1],[419.744 10000 1],[432.958 10000 0],[435.15 10000 0],[436.364 10000 0],[442.301 10000 0],[446.646 10000 0],[468.57 10000 -1],[476.54 10000 -1],[505.673 10000 0],[511.824 10000 0],[513.553 10000 1],[517.061 10000 0],[519.755 10000 0],[521.253 10000 0],[527.195 10000 0],[539.203 10000 0],[539.424 10000 0],[540.462 10000 0],[544.963 10000 0],[546.747 10000 0],[548.458 10000 0],[551.222 10000 1],[553.793 10000 0],[555.68 10000 0],[555.709 10000 0],[558.121 10000 0],[565.654 10000 0],[565.903 10000 0],[570.224 10000 0],[591.071 10000 0],[704.085 10000 0],[710.785 10000 0],[717.622 10000 0],[724.926 10000 -1],[725.25 10000 0],[725.721 10000 0],[730.694 10000 0],[739.426 10000 -1],[751.126 10000 0],[755.112 10000 0],[757.977 10000 0],[772.993 10000 0]}{10000}%
+\wl@elt@search{#1}{Cf}{[389.323 10000 1],[399.357 10000 1],[403.545 10000 -1],[409.912 10000 0],[424.238 10000 0],[432.903 10000 0],[433.522 10000 0],[517.396 10000 0],[517.908 10000 0],[521.924 10000 0],[527.901 10000 -1],[532.009 10000 -1],[533.913 10000 -1],[540.888 10000 0],[572.605 10000 0],[662.283 10000 0],[663.126 10000 0],[667.79 10000 0],[689.459 10000 0],[692.71 10000 1],[707.452 10000 0],[730.79 10000 0]}{10000}%
+\wl@elt@search{#1}{Es}{[380.149 10000 -1],[392.91 300 -1],[393.077 3000 -1],[395.719 100 -1],[399.535 100 -1],[407.771 300 -1],[408.224 10000 -1],[410.759 3000 -1],[417.694 1000 -1],[449.625 100 -1],[463.166 100 -1],[465.086 300 -1],[478.993 1000 -1],[480.217 300 -1],[480.221 1000 -1],[495.829 3000 -1],[505.208 10000 -1],[510.293 1000 -1],[515.582 100 -1],[516.174 10000 0],[520.44 10000 0],[561.551 3000 0],[653.971 100 -1]}{10000}%
+}%
+\endinput
diff --git a/graphics/pgf/contrib/pgf-umlcd/COPYING b/graphics/pgf/contrib/pgf-umlcd/COPYING
new file mode 100644
index 0000000000..71917be32e
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/COPYING
@@ -0,0 +1,14 @@
+This file is part of pgf-umlcd.
+
+pgf-umlcd is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+pgf-umlcd is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Foobar. If not, see <http://www.gnu.org/licenses/>. \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/README b/graphics/pgf/contrib/pgf-umlcd/README
new file mode 100644
index 0000000000..5cc6fbf3a0
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/README
@@ -0,0 +1,3 @@
+Some LaTeX macros for UML Class Diagrams.
+Home page of project: http://pgf-umlcd.googlecode.com/
+Please read pgf-umlcd-manual.pdf for more information.
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/abstract-class.tex b/graphics/pgf/contrib/pgf-umlcd/demo/abstract-class.tex
new file mode 100644
index 0000000000..cdaa3e5a45
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/abstract-class.tex
@@ -0,0 +1,9 @@
+\begin{tikzpicture}
+ \begin{abstractclass}[text width=5cm]{BankAccount}{0,0}
+ \attribute{owner : String}
+ \attribute{balance : Dollars = 0}
+
+ \operation{deposit(amount : Dollars)}
+ \operation[0]{withdrawl(amount : Dollars)}
+ \end{abstractclass}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.svg b/graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.svg
new file mode 100644
index 0000000000..90b90ca48c
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.svg
@@ -0,0 +1,791 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="867.211pt" height="373.996pt" viewBox="0 0 867.211 373.996" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 6.734375 -4.96875 C 6.84375 -5.03125 6.921875 -5.078125 6.921875 -5.1875 C 6.921875 -5.296875 6.828125 -5.390625 6.71875 -5.390625 C 6.6875 -5.390625 6.671875 -5.390625 6.546875 -5.3125 L 1.015625 -2.71875 C 0.90625 -2.65625 0.828125 -2.609375 0.828125 -2.5 C 0.828125 -2.375 0.90625 -2.328125 1.015625 -2.265625 L 6.546875 0.328125 C 6.671875 0.40625 6.6875 0.40625 6.71875 0.40625 C 6.828125 0.40625 6.921875 0.3125 6.921875 0.203125 C 6.921875 0.09375 6.84375 0.046875 6.734375 -0.015625 L 1.5 -2.5 Z M 6.734375 -4.96875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 6.734375 -2.265625 C 6.84375 -2.328125 6.921875 -2.375 6.921875 -2.5 C 6.921875 -2.609375 6.84375 -2.65625 6.734375 -2.71875 L 1.203125 -5.3125 C 1.078125 -5.390625 1.0625 -5.390625 1.03125 -5.390625 C 0.921875 -5.390625 0.828125 -5.296875 0.828125 -5.1875 C 0.828125 -5.09375 0.875 -5.03125 1.015625 -4.96875 L 6.25 -2.5 L 1.015625 -0.015625 C 0.875 0.046875 0.828125 0.109375 0.828125 0.203125 C 0.828125 0.3125 0.921875 0.40625 1.03125 0.40625 C 1.0625 0.40625 1.078125 0.40625 1.203125 0.328125 Z M 6.734375 -2.265625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1.765625 -4.40625 L 0.375 -4.296875 L 0.375 -3.984375 C 1.015625 -3.984375 1.109375 -3.921875 1.109375 -3.4375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.328125 -0.3125 L 0.328125 0 C 0.640625 -0.015625 1.1875 -0.03125 1.421875 -0.03125 C 1.78125 -0.03125 2.125 -0.015625 2.46875 0 L 2.46875 -0.3125 C 1.796875 -0.3125 1.765625 -0.359375 1.765625 -0.75 Z M 1.796875 -6.140625 C 1.796875 -6.453125 1.5625 -6.671875 1.28125 -6.671875 C 0.96875 -6.671875 0.75 -6.40625 0.75 -6.140625 C 0.75 -5.875 0.96875 -5.609375 1.28125 -5.609375 C 1.5625 -5.609375 1.796875 -5.828125 1.796875 -6.140625 Z M 1.796875 -6.140625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 1.09375 -3.421875 L 1.09375 -0.75 C 1.09375 -0.3125 0.984375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.671875 -0.015625 1.171875 -0.03125 1.453125 -0.03125 C 1.703125 -0.03125 2.21875 -0.015625 2.5625 0 L 2.5625 -0.3125 C 1.890625 -0.3125 1.78125 -0.3125 1.78125 -0.75 L 1.78125 -2.59375 C 1.78125 -3.625 2.5 -4.1875 3.125 -4.1875 C 3.765625 -4.1875 3.875 -3.65625 3.875 -3.078125 L 3.875 -0.75 C 3.875 -0.3125 3.765625 -0.3125 3.09375 -0.3125 L 3.09375 0 C 3.4375 -0.015625 3.953125 -0.03125 4.21875 -0.03125 C 4.46875 -0.03125 5 -0.015625 5.328125 0 L 5.328125 -0.3125 C 4.8125 -0.3125 4.5625 -0.3125 4.5625 -0.609375 L 4.5625 -2.515625 C 4.5625 -3.375 4.5625 -3.671875 4.25 -4.03125 C 4.109375 -4.203125 3.78125 -4.40625 3.203125 -4.40625 C 2.46875 -4.40625 2 -3.984375 1.71875 -3.359375 L 1.71875 -4.40625 L 0.3125 -4.296875 L 0.3125 -3.984375 C 1.015625 -3.984375 1.09375 -3.921875 1.09375 -3.421875 Z M 1.09375 -3.421875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 1.71875 -3.984375 L 3.15625 -3.984375 L 3.15625 -4.296875 L 1.71875 -4.296875 L 1.71875 -6.125 L 1.46875 -6.125 C 1.46875 -5.3125 1.171875 -4.25 0.1875 -4.203125 L 0.1875 -3.984375 L 1.03125 -3.984375 L 1.03125 -1.234375 C 1.03125 -0.015625 1.96875 0.109375 2.328125 0.109375 C 3.03125 0.109375 3.3125 -0.59375 3.3125 -1.234375 L 3.3125 -1.796875 L 3.0625 -1.796875 L 3.0625 -1.25 C 3.0625 -0.515625 2.765625 -0.140625 2.390625 -0.140625 C 1.71875 -0.140625 1.71875 -1.046875 1.71875 -1.21875 Z M 1.71875 -3.984375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 1.109375 -2.515625 C 1.171875 -4 2.015625 -4.25 2.359375 -4.25 C 3.375 -4.25 3.484375 -2.90625 3.484375 -2.515625 Z M 1.109375 -2.296875 L 3.890625 -2.296875 C 4.109375 -2.296875 4.140625 -2.296875 4.140625 -2.515625 C 4.140625 -3.5 3.59375 -4.46875 2.359375 -4.46875 C 1.203125 -4.46875 0.28125 -3.4375 0.28125 -2.1875 C 0.28125 -0.859375 1.328125 0.109375 2.46875 0.109375 C 3.6875 0.109375 4.140625 -1 4.140625 -1.1875 C 4.140625 -1.28125 4.0625 -1.3125 4 -1.3125 C 3.921875 -1.3125 3.890625 -1.25 3.875 -1.171875 C 3.53125 -0.140625 2.625 -0.140625 2.53125 -0.140625 C 2.03125 -0.140625 1.640625 -0.4375 1.40625 -0.8125 C 1.109375 -1.28125 1.109375 -1.9375 1.109375 -2.296875 Z M 1.109375 -2.296875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 1.671875 -3.3125 L 1.671875 -4.40625 L 0.28125 -4.296875 L 0.28125 -3.984375 C 0.984375 -3.984375 1.0625 -3.921875 1.0625 -3.421875 L 1.0625 -0.75 C 1.0625 -0.3125 0.953125 -0.3125 0.28125 -0.3125 L 0.28125 0 C 0.671875 -0.015625 1.140625 -0.03125 1.421875 -0.03125 C 1.8125 -0.03125 2.28125 -0.03125 2.6875 0 L 2.6875 -0.3125 L 2.46875 -0.3125 C 1.734375 -0.3125 1.71875 -0.421875 1.71875 -0.78125 L 1.71875 -2.3125 C 1.71875 -3.296875 2.140625 -4.1875 2.890625 -4.1875 C 2.953125 -4.1875 2.984375 -4.1875 3 -4.171875 C 2.96875 -4.171875 2.765625 -4.046875 2.765625 -3.78125 C 2.765625 -3.515625 2.984375 -3.359375 3.203125 -3.359375 C 3.375 -3.359375 3.625 -3.484375 3.625 -3.796875 C 3.625 -4.109375 3.3125 -4.40625 2.890625 -4.40625 C 2.15625 -4.40625 1.796875 -3.734375 1.671875 -3.3125 Z M 1.671875 -3.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 1.75 -4.296875 L 1.75 -5.453125 C 1.75 -6.328125 2.21875 -6.8125 2.65625 -6.8125 C 2.6875 -6.8125 2.84375 -6.8125 2.984375 -6.734375 C 2.875 -6.703125 2.6875 -6.5625 2.6875 -6.3125 C 2.6875 -6.09375 2.84375 -5.890625 3.125 -5.890625 C 3.40625 -5.890625 3.5625 -6.09375 3.5625 -6.328125 C 3.5625 -6.703125 3.1875 -7.03125 2.65625 -7.03125 C 1.96875 -7.03125 1.109375 -6.5 1.109375 -5.4375 L 1.109375 -4.296875 L 0.328125 -4.296875 L 0.328125 -3.984375 L 1.109375 -3.984375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.34375 -0.3125 L 0.34375 0 C 0.734375 -0.015625 1.203125 -0.03125 1.46875 -0.03125 C 1.875 -0.03125 2.34375 -0.03125 2.734375 0 L 2.734375 -0.3125 L 2.53125 -0.3125 C 1.796875 -0.3125 1.78125 -0.421875 1.78125 -0.78125 L 1.78125 -3.984375 L 2.90625 -3.984375 L 2.90625 -4.296875 Z M 1.75 -4.296875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 3.3125 -0.75 C 3.359375 -0.359375 3.625 0.0625 4.09375 0.0625 C 4.3125 0.0625 4.921875 -0.078125 4.921875 -0.890625 L 4.921875 -1.453125 L 4.671875 -1.453125 L 4.671875 -0.890625 C 4.671875 -0.3125 4.421875 -0.25 4.3125 -0.25 C 3.984375 -0.25 3.9375 -0.703125 3.9375 -0.75 L 3.9375 -2.734375 C 3.9375 -3.15625 3.9375 -3.546875 3.578125 -3.921875 C 3.1875 -4.3125 2.6875 -4.46875 2.21875 -4.46875 C 1.390625 -4.46875 0.703125 -4 0.703125 -3.34375 C 0.703125 -3.046875 0.90625 -2.875 1.171875 -2.875 C 1.453125 -2.875 1.625 -3.078125 1.625 -3.328125 C 1.625 -3.453125 1.578125 -3.78125 1.109375 -3.78125 C 1.390625 -4.140625 1.875 -4.25 2.1875 -4.25 C 2.6875 -4.25 3.25 -3.859375 3.25 -2.96875 L 3.25 -2.609375 C 2.734375 -2.578125 2.046875 -2.546875 1.421875 -2.25 C 0.671875 -1.90625 0.421875 -1.390625 0.421875 -0.953125 C 0.421875 -0.140625 1.390625 0.109375 2.015625 0.109375 C 2.671875 0.109375 3.125 -0.296875 3.3125 -0.75 Z M 3.25 -2.390625 L 3.25 -1.390625 C 3.25 -0.453125 2.53125 -0.109375 2.078125 -0.109375 C 1.59375 -0.109375 1.1875 -0.453125 1.1875 -0.953125 C 1.1875 -1.5 1.609375 -2.328125 3.25 -2.390625 Z M 3.25 -2.390625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 1.171875 -2.171875 C 1.171875 -3.796875 1.984375 -4.21875 2.515625 -4.21875 C 2.609375 -4.21875 3.234375 -4.203125 3.578125 -3.84375 C 3.171875 -3.8125 3.109375 -3.515625 3.109375 -3.390625 C 3.109375 -3.125 3.296875 -2.9375 3.5625 -2.9375 C 3.828125 -2.9375 4.03125 -3.09375 4.03125 -3.40625 C 4.03125 -4.078125 3.265625 -4.46875 2.5 -4.46875 C 1.25 -4.46875 0.34375 -3.390625 0.34375 -2.15625 C 0.34375 -0.875 1.328125 0.109375 2.484375 0.109375 C 3.8125 0.109375 4.140625 -1.09375 4.140625 -1.1875 C 4.140625 -1.28125 4.03125 -1.28125 4 -1.28125 C 3.921875 -1.28125 3.890625 -1.25 3.875 -1.1875 C 3.59375 -0.265625 2.9375 -0.140625 2.578125 -0.140625 C 2.046875 -0.140625 1.171875 -0.5625 1.171875 -2.171875 Z M 1.171875 -2.171875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.078125 -2.296875 L 6.859375 -2.296875 C 7 -2.296875 7.1875 -2.296875 7.1875 -2.5 C 7.1875 -2.6875 7 -2.6875 6.859375 -2.6875 L 4.078125 -2.6875 L 4.078125 -5.484375 C 4.078125 -5.625 4.078125 -5.8125 3.875 -5.8125 C 3.671875 -5.8125 3.671875 -5.625 3.671875 -5.484375 L 3.671875 -2.6875 L 0.890625 -2.6875 C 0.75 -2.6875 0.5625 -2.6875 0.5625 -2.5 C 0.5625 -2.296875 0.75 -2.296875 0.890625 -2.296875 L 3.671875 -2.296875 L 3.671875 0.5 C 3.671875 0.640625 3.671875 0.828125 3.875 0.828125 C 4.078125 0.828125 4.078125 0.640625 4.078125 0.5 Z M 4.078125 -2.296875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 0.5625 -3.40625 C 0.5625 -1.34375 2.171875 0.21875 4.03125 0.21875 C 5.65625 0.21875 6.625 -1.171875 6.625 -2.328125 C 6.625 -2.421875 6.625 -2.5 6.5 -2.5 C 6.390625 -2.5 6.390625 -2.4375 6.375 -2.328125 C 6.296875 -0.90625 5.234375 -0.09375 4.140625 -0.09375 C 3.53125 -0.09375 1.578125 -0.421875 1.578125 -3.40625 C 1.578125 -6.375 3.53125 -6.71875 4.140625 -6.71875 C 5.21875 -6.71875 6.109375 -5.8125 6.3125 -4.359375 C 6.328125 -4.21875 6.328125 -4.1875 6.46875 -4.1875 C 6.625 -4.1875 6.625 -4.21875 6.625 -4.421875 L 6.625 -6.78125 C 6.625 -6.953125 6.625 -7.03125 6.515625 -7.03125 C 6.484375 -7.03125 6.4375 -7.03125 6.359375 -6.90625 L 5.859375 -6.171875 C 5.5 -6.53125 4.984375 -7.03125 4.03125 -7.03125 C 2.15625 -7.03125 0.5625 -5.4375 0.5625 -3.40625 Z M 0.5625 -3.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 2.265625 -3.15625 L 3.953125 -3.15625 C 5.140625 -3.15625 6.21875 -3.953125 6.21875 -4.953125 C 6.21875 -5.9375 5.234375 -6.8125 3.875 -6.8125 L 0.34375 -6.8125 L 0.34375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.375 -6.390625 1.375 -6.03125 L 1.375 -0.78125 C 1.375 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.34375 -0.3125 L 0.34375 0 C 0.703125 -0.03125 1.4375 -0.03125 1.8125 -0.03125 C 2.1875 -0.03125 2.9375 -0.03125 3.296875 0 L 3.296875 -0.3125 L 3.046875 -0.3125 C 2.28125 -0.3125 2.265625 -0.421875 2.265625 -0.78125 Z M 2.234375 -3.40625 L 2.234375 -6.09375 C 2.234375 -6.4375 2.25 -6.5 2.71875 -6.5 L 3.609375 -6.5 C 5.1875 -6.5 5.1875 -5.4375 5.1875 -4.953125 C 5.1875 -4.484375 5.1875 -3.40625 3.609375 -3.40625 Z M 2.234375 -3.40625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 4.6875 -2.140625 C 4.6875 -3.40625 3.703125 -4.46875 2.5 -4.46875 C 1.25 -4.46875 0.28125 -3.375 0.28125 -2.140625 C 0.28125 -0.84375 1.3125 0.109375 2.484375 0.109375 C 3.6875 0.109375 4.6875 -0.875 4.6875 -2.140625 Z M 2.5 -0.140625 C 2.0625 -0.140625 1.625 -0.34375 1.359375 -0.8125 C 1.109375 -1.25 1.109375 -1.859375 1.109375 -2.21875 C 1.109375 -2.609375 1.109375 -3.140625 1.34375 -3.578125 C 1.609375 -4.03125 2.078125 -4.25 2.484375 -4.25 C 2.921875 -4.25 3.34375 -4.03125 3.609375 -3.59375 C 3.875 -3.171875 3.875 -2.59375 3.875 -2.21875 C 3.875 -1.859375 3.875 -1.3125 3.65625 -0.875 C 3.421875 -0.421875 2.984375 -0.140625 2.5 -0.140625 Z M 2.5 -0.140625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 3.78125 -0.546875 L 3.78125 0.109375 L 5.25 0 L 5.25 -0.3125 C 4.5625 -0.3125 4.46875 -0.375 4.46875 -0.875 L 4.46875 -6.921875 L 3.046875 -6.8125 L 3.046875 -6.5 C 3.734375 -6.5 3.8125 -6.4375 3.8125 -5.9375 L 3.8125 -3.78125 C 3.53125 -4.140625 3.09375 -4.40625 2.5625 -4.40625 C 1.390625 -4.40625 0.34375 -3.421875 0.34375 -2.140625 C 0.34375 -0.875 1.3125 0.109375 2.453125 0.109375 C 3.09375 0.109375 3.53125 -0.234375 3.78125 -0.546875 Z M 3.78125 -3.21875 L 3.78125 -1.171875 C 3.78125 -1 3.78125 -0.984375 3.671875 -0.8125 C 3.375 -0.328125 2.9375 -0.109375 2.5 -0.109375 C 2.046875 -0.109375 1.6875 -0.375 1.453125 -0.75 C 1.203125 -1.15625 1.171875 -1.71875 1.171875 -2.140625 C 1.171875 -2.5 1.1875 -3.09375 1.46875 -3.546875 C 1.6875 -3.859375 2.0625 -4.1875 2.609375 -4.1875 C 2.953125 -4.1875 3.375 -4.03125 3.671875 -3.59375 C 3.78125 -3.421875 3.78125 -3.40625 3.78125 -3.21875 Z M 3.78125 -3.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d="M 3.890625 -0.78125 L 3.890625 0.109375 L 5.328125 0 L 5.328125 -0.3125 C 4.640625 -0.3125 4.5625 -0.375 4.5625 -0.875 L 4.5625 -4.40625 L 3.09375 -4.296875 L 3.09375 -3.984375 C 3.78125 -3.984375 3.875 -3.921875 3.875 -3.421875 L 3.875 -1.65625 C 3.875 -0.78125 3.390625 -0.109375 2.65625 -0.109375 C 1.828125 -0.109375 1.78125 -0.578125 1.78125 -1.09375 L 1.78125 -4.40625 L 0.3125 -4.296875 L 0.3125 -3.984375 C 1.09375 -3.984375 1.09375 -3.953125 1.09375 -3.078125 L 1.09375 -1.578125 C 1.09375 -0.796875 1.09375 0.109375 2.609375 0.109375 C 3.171875 0.109375 3.609375 -0.171875 3.890625 -0.78125 Z M 3.890625 -0.78125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d="M 3.96875 -6.9375 C 3.921875 -7.0625 3.890625 -7.140625 3.734375 -7.140625 C 3.578125 -7.140625 3.546875 -7.078125 3.5 -6.9375 L 1.4375 -0.984375 C 1.25 -0.46875 0.859375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.546875 -0.015625 0.984375 -0.03125 1.328125 -0.03125 C 1.640625 -0.03125 2.15625 -0.015625 2.484375 0 L 2.484375 -0.3125 C 1.984375 -0.3125 1.734375 -0.5625 1.734375 -0.8125 C 1.734375 -0.84375 1.75 -0.953125 1.75 -0.96875 L 2.21875 -2.265625 L 4.671875 -2.265625 L 5.203125 -0.75 C 5.21875 -0.703125 5.234375 -0.640625 5.234375 -0.609375 C 5.234375 -0.3125 4.671875 -0.3125 4.40625 -0.3125 L 4.40625 0 C 4.765625 -0.03125 5.46875 -0.03125 5.84375 -0.03125 C 6.265625 -0.03125 6.734375 -0.015625 7.140625 0 L 7.140625 -0.3125 L 6.96875 -0.3125 C 6.375 -0.3125 6.234375 -0.375 6.125 -0.703125 Z M 3.4375 -5.828125 L 4.5625 -2.578125 L 2.328125 -2.578125 Z M 3.4375 -5.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-15">
+<path style="stroke:none;" d="M 3.296875 2.390625 C 3.296875 2.359375 3.296875 2.34375 3.125 2.171875 C 1.890625 0.921875 1.5625 -0.96875 1.5625 -2.5 C 1.5625 -4.234375 1.9375 -5.96875 3.171875 -7.203125 C 3.296875 -7.328125 3.296875 -7.34375 3.296875 -7.375 C 3.296875 -7.453125 3.265625 -7.484375 3.203125 -7.484375 C 3.09375 -7.484375 2.203125 -6.796875 1.609375 -5.53125 C 1.109375 -4.4375 0.984375 -3.328125 0.984375 -2.5 C 0.984375 -1.71875 1.09375 -0.515625 1.640625 0.625 C 2.25 1.84375 3.09375 2.5 3.203125 2.5 C 3.265625 2.5 3.296875 2.46875 3.296875 2.390625 Z M 3.296875 2.390625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-16">
+<path style="stroke:none;" d="M 2.875 -2.5 C 2.875 -3.265625 2.765625 -4.46875 2.21875 -5.609375 C 1.625 -6.828125 0.765625 -7.484375 0.671875 -7.484375 C 0.609375 -7.484375 0.5625 -7.4375 0.5625 -7.375 C 0.5625 -7.34375 0.5625 -7.328125 0.75 -7.140625 C 1.734375 -6.15625 2.296875 -4.578125 2.296875 -2.5 C 2.296875 -0.78125 1.9375 0.96875 0.703125 2.21875 C 0.5625 2.34375 0.5625 2.359375 0.5625 2.390625 C 0.5625 2.453125 0.609375 2.5 0.671875 2.5 C 0.765625 2.5 1.671875 1.8125 2.25 0.546875 C 2.765625 -0.546875 2.875 -1.65625 2.875 -2.5 Z M 2.875 -2.5 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-17">
+<path style="stroke:none;" d="M 2.21875 -3.65625 L 2.21875 -6.09375 C 2.21875 -6.4375 2.234375 -6.5 2.703125 -6.5 L 3.9375 -6.5 C 4.90625 -6.5 5.25 -5.65625 5.25 -5.125 C 5.25 -4.484375 4.765625 -3.65625 3.65625 -3.65625 Z M 4.5625 -3.5625 C 5.53125 -3.75 6.21875 -4.390625 6.21875 -5.125 C 6.21875 -5.984375 5.296875 -6.8125 4 -6.8125 L 0.359375 -6.8125 L 0.359375 -6.5 L 0.59375 -6.5 C 1.359375 -6.5 1.390625 -6.390625 1.390625 -6.03125 L 1.390625 -0.78125 C 1.390625 -0.421875 1.359375 -0.3125 0.59375 -0.3125 L 0.359375 -0.3125 L 0.359375 0 L 4.265625 0 C 5.59375 0 6.484375 -0.890625 6.484375 -1.828125 C 6.484375 -2.6875 5.671875 -3.4375 4.5625 -3.5625 Z M 3.953125 -0.3125 L 2.703125 -0.3125 C 2.234375 -0.3125 2.21875 -0.375 2.21875 -0.703125 L 2.21875 -3.421875 L 4.09375 -3.421875 C 5.078125 -3.421875 5.5 -2.5 5.5 -1.828125 C 5.5 -1.125 4.96875 -0.3125 3.953125 -0.3125 Z M 3.953125 -0.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-18">
+<path style="stroke:none;" d="M 2.078125 -1.9375 C 2.296875 -1.890625 3.109375 -1.734375 3.109375 -1.015625 C 3.109375 -0.515625 2.765625 -0.109375 1.984375 -0.109375 C 1.140625 -0.109375 0.78125 -0.671875 0.59375 -1.53125 C 0.5625 -1.65625 0.5625 -1.6875 0.453125 -1.6875 C 0.328125 -1.6875 0.328125 -1.625 0.328125 -1.453125 L 0.328125 -0.125 C 0.328125 0.046875 0.328125 0.109375 0.4375 0.109375 C 0.484375 0.109375 0.5 0.09375 0.6875 -0.09375 C 0.703125 -0.109375 0.703125 -0.125 0.890625 -0.3125 C 1.328125 0.09375 1.78125 0.109375 1.984375 0.109375 C 3.125 0.109375 3.59375 -0.5625 3.59375 -1.28125 C 3.59375 -1.796875 3.296875 -2.109375 3.171875 -2.21875 C 2.84375 -2.546875 2.453125 -2.625 2.03125 -2.703125 C 1.46875 -2.8125 0.8125 -2.9375 0.8125 -3.515625 C 0.8125 -3.875 1.0625 -4.28125 1.921875 -4.28125 C 3.015625 -4.28125 3.078125 -3.375 3.09375 -3.078125 C 3.09375 -2.984375 3.1875 -2.984375 3.203125 -2.984375 C 3.34375 -2.984375 3.34375 -3.03125 3.34375 -3.21875 L 3.34375 -4.234375 C 3.34375 -4.390625 3.34375 -4.46875 3.234375 -4.46875 C 3.1875 -4.46875 3.15625 -4.46875 3.03125 -4.34375 C 3 -4.3125 2.90625 -4.21875 2.859375 -4.1875 C 2.484375 -4.46875 2.078125 -4.46875 1.921875 -4.46875 C 0.703125 -4.46875 0.328125 -3.796875 0.328125 -3.234375 C 0.328125 -2.890625 0.484375 -2.609375 0.75 -2.390625 C 1.078125 -2.140625 1.359375 -2.078125 2.078125 -1.9375 Z M 2.078125 -1.9375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-19">
+<path style="stroke:none;" d="M 1.09375 -3.421875 L 1.09375 -0.75 C 1.09375 -0.3125 0.984375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.671875 -0.015625 1.171875 -0.03125 1.453125 -0.03125 C 1.703125 -0.03125 2.21875 -0.015625 2.5625 0 L 2.5625 -0.3125 C 1.890625 -0.3125 1.78125 -0.3125 1.78125 -0.75 L 1.78125 -2.59375 C 1.78125 -3.625 2.5 -4.1875 3.125 -4.1875 C 3.765625 -4.1875 3.875 -3.65625 3.875 -3.078125 L 3.875 -0.75 C 3.875 -0.3125 3.765625 -0.3125 3.09375 -0.3125 L 3.09375 0 C 3.4375 -0.015625 3.953125 -0.03125 4.21875 -0.03125 C 4.46875 -0.03125 5 -0.015625 5.328125 0 L 5.328125 -0.3125 C 4.671875 -0.3125 4.5625 -0.3125 4.5625 -0.75 L 4.5625 -2.59375 C 4.5625 -3.625 5.265625 -4.1875 5.90625 -4.1875 C 6.53125 -4.1875 6.640625 -3.65625 6.640625 -3.078125 L 6.640625 -0.75 C 6.640625 -0.3125 6.53125 -0.3125 5.859375 -0.3125 L 5.859375 0 C 6.203125 -0.015625 6.71875 -0.03125 6.984375 -0.03125 C 7.25 -0.03125 7.765625 -0.015625 8.109375 0 L 8.109375 -0.3125 C 7.59375 -0.3125 7.34375 -0.3125 7.328125 -0.609375 L 7.328125 -2.515625 C 7.328125 -3.375 7.328125 -3.671875 7.015625 -4.03125 C 6.875 -4.203125 6.546875 -4.40625 5.96875 -4.40625 C 5.140625 -4.40625 4.6875 -3.8125 4.53125 -3.421875 C 4.390625 -4.296875 3.65625 -4.40625 3.203125 -4.40625 C 2.46875 -4.40625 2 -3.984375 1.71875 -3.359375 L 1.71875 -4.40625 L 0.3125 -4.296875 L 0.3125 -3.984375 C 1.015625 -3.984375 1.09375 -3.921875 1.09375 -3.421875 Z M 1.09375 -3.421875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-20">
+<path style="stroke:none;" d="M 1.71875 -3.75 L 1.71875 -4.40625 L 0.28125 -4.296875 L 0.28125 -3.984375 C 0.984375 -3.984375 1.0625 -3.921875 1.0625 -3.484375 L 1.0625 1.171875 C 1.0625 1.625 0.953125 1.625 0.28125 1.625 L 0.28125 1.9375 C 0.625 1.921875 1.140625 1.90625 1.390625 1.90625 C 1.671875 1.90625 2.171875 1.921875 2.515625 1.9375 L 2.515625 1.625 C 1.859375 1.625 1.75 1.625 1.75 1.171875 L 1.75 -0.59375 C 1.796875 -0.421875 2.21875 0.109375 2.96875 0.109375 C 4.15625 0.109375 5.1875 -0.875 5.1875 -2.15625 C 5.1875 -3.421875 4.234375 -4.40625 3.109375 -4.40625 C 2.328125 -4.40625 1.90625 -3.96875 1.71875 -3.75 Z M 1.75 -1.140625 L 1.75 -3.359375 C 2.03125 -3.875 2.515625 -4.15625 3.03125 -4.15625 C 3.765625 -4.15625 4.359375 -3.28125 4.359375 -2.15625 C 4.359375 -0.953125 3.671875 -0.109375 2.9375 -0.109375 C 2.53125 -0.109375 2.15625 -0.3125 1.890625 -0.71875 C 1.75 -0.921875 1.75 -0.9375 1.75 -1.140625 Z M 1.75 -1.140625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 4.71875 -6.703125 C 4.609375 -6.953125 4.5 -6.953125 4.328125 -6.953125 C 4.046875 -6.953125 4 -6.875 3.9375 -6.703125 L 1.46875 -0.703125 C 1.40625 -0.546875 1.375 -0.46875 0.625 -0.46875 L 0.40625 -0.46875 L 0.40625 0 C 0.78125 -0.015625 1.265625 -0.03125 1.578125 -0.03125 C 1.96875 -0.03125 2.515625 -0.03125 2.890625 0 L 2.890625 -0.46875 C 2.875 -0.46875 2 -0.46875 2 -0.59375 C 2 -0.609375 2.03125 -0.703125 2.046875 -0.71875 L 2.546875 -1.921875 L 5.21875 -1.921875 L 5.8125 -0.46875 L 4.859375 -0.46875 L 4.859375 0 C 5.25 -0.03125 6.1875 -0.03125 6.625 -0.03125 C 7.015625 -0.03125 7.890625 -0.03125 8.25 0 L 8.25 -0.46875 L 7.28125 -0.46875 Z M 3.875 -5.15625 L 5.015625 -2.390625 L 2.734375 -2.390625 Z M 3.875 -5.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 2.140625 -4 L 2.140625 -6.921875 L 0.375 -6.84375 L 0.375 -6.375 C 0.984375 -6.375 1.0625 -6.375 1.0625 -5.984375 L 1.0625 0 L 1.53125 0 L 2.015625 -0.5625 C 2.09375 -0.484375 2.578125 0.0625 3.46875 0.0625 C 4.953125 0.0625 5.984375 -0.84375 5.984375 -2.21875 C 5.984375 -3.546875 5.046875 -4.484375 3.59375 -4.484375 C 2.875 -4.484375 2.375 -4.203125 2.140625 -4 Z M 2.1875 -0.984375 L 2.1875 -3.484375 C 2.46875 -3.84375 2.9375 -4.125 3.484375 -4.125 C 4.703125 -4.125 4.703125 -2.921875 4.703125 -2.21875 C 4.703125 -1.75 4.703125 -1.203125 4.453125 -0.8125 C 4.15625 -0.40625 3.703125 -0.296875 3.375 -0.296875 C 2.6875 -0.296875 2.296875 -0.84375 2.1875 -0.984375 Z M 2.1875 -0.984375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 2.109375 -2.9375 C 1.734375 -3 1.09375 -3.109375 1.09375 -3.578125 C 1.09375 -4.203125 2.015625 -4.203125 2.203125 -4.203125 C 2.953125 -4.203125 3.328125 -3.90625 3.375 -3.359375 C 3.390625 -3.203125 3.40625 -3.15625 3.609375 -3.15625 C 3.84375 -3.15625 3.84375 -3.203125 3.84375 -3.4375 L 3.84375 -4.234375 C 3.84375 -4.421875 3.84375 -4.515625 3.671875 -4.515625 C 3.625 -4.515625 3.609375 -4.515625 3.21875 -4.328125 C 2.953125 -4.453125 2.609375 -4.515625 2.21875 -4.515625 C 1.90625 -4.515625 0.375 -4.515625 0.375 -3.203125 C 0.375 -2.8125 0.578125 -2.546875 0.78125 -2.375 C 1.171875 -2.03125 1.5625 -1.96875 2.328125 -1.828125 C 2.6875 -1.765625 3.421875 -1.640625 3.421875 -1.046875 C 3.421875 -0.296875 2.515625 -0.296875 2.296875 -0.296875 C 1.234375 -0.296875 0.984375 -1.03125 0.859375 -1.453125 C 0.8125 -1.59375 0.75 -1.59375 0.625 -1.59375 C 0.375 -1.59375 0.375 -1.53125 0.375 -1.3125 L 0.375 -0.21875 C 0.375 -0.03125 0.375 0.0625 0.5625 0.0625 C 0.625 0.0625 0.640625 0.0625 0.859375 -0.09375 C 0.875 -0.09375 1.09375 -0.234375 1.109375 -0.265625 C 1.578125 0.0625 2.09375 0.0625 2.296875 0.0625 C 2.609375 0.0625 4.140625 0.0625 4.140625 -1.390625 C 4.140625 -1.828125 3.9375 -2.171875 3.59375 -2.453125 C 3.203125 -2.734375 2.875 -2.796875 2.109375 -2.9375 Z M 2.109375 -2.9375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 1.03125 -3.953125 L 1.03125 -1.21875 C 1.03125 -0.15625 1.890625 0.0625 2.609375 0.0625 C 3.359375 0.0625 3.8125 -0.515625 3.8125 -1.234375 L 3.8125 -1.765625 L 3.34375 -1.765625 L 3.34375 -1.25 C 3.34375 -0.578125 3.015625 -0.34375 2.734375 -0.34375 C 2.15625 -0.34375 2.15625 -0.984375 2.15625 -1.203125 L 2.15625 -3.953125 L 3.625 -3.953125 L 3.625 -4.421875 L 2.15625 -4.421875 L 2.15625 -6.328125 L 1.6875 -6.328125 C 1.6875 -5.328125 1.203125 -4.34375 0.203125 -4.3125 L 0.203125 -3.953125 Z M 1.03125 -3.953125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 2.03125 -3.359375 L 2.03125 -4.484375 L 0.375 -4.40625 L 0.375 -3.9375 C 0.984375 -3.9375 1.0625 -3.9375 1.0625 -3.546875 L 1.0625 -0.46875 L 0.375 -0.46875 L 0.375 0 C 0.71875 -0.015625 1.171875 -0.03125 1.625 -0.03125 C 2 -0.03125 2.640625 -0.03125 3 0 L 3 -0.46875 L 2.140625 -0.46875 L 2.140625 -2.21875 C 2.140625 -2.90625 2.375 -4.125 3.375 -4.125 C 3.375 -4.109375 3.1875 -3.953125 3.1875 -3.671875 C 3.1875 -3.265625 3.515625 -3.0625 3.796875 -3.0625 C 4.09375 -3.0625 4.40625 -3.265625 4.40625 -3.671875 C 4.40625 -4.203125 3.875 -4.484375 3.34375 -4.484375 C 2.65625 -4.484375 2.25 -3.984375 2.03125 -3.359375 Z M 2.03125 -3.359375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 3.734375 -0.765625 C 3.734375 -0.453125 3.734375 0 4.765625 0 L 5.25 0 C 5.4375 0 5.5625 0 5.5625 -0.234375 C 5.5625 -0.46875 5.4375 -0.46875 5.296875 -0.46875 C 4.6875 -0.484375 4.6875 -0.609375 4.6875 -0.84375 L 4.6875 -2.984375 C 4.6875 -3.875 3.984375 -4.515625 2.5 -4.515625 C 1.9375 -4.515625 0.71875 -4.46875 0.71875 -3.59375 C 0.71875 -3.15625 1.0625 -2.96875 1.328125 -2.96875 C 1.640625 -2.96875 1.96875 -3.1875 1.96875 -3.59375 C 1.96875 -3.890625 1.78125 -4.0625 1.75 -4.09375 C 2.03125 -4.140625 2.34375 -4.15625 2.46875 -4.15625 C 3.203125 -4.15625 3.5625 -3.734375 3.5625 -2.984375 L 3.5625 -2.640625 C 2.84375 -2.609375 0.3125 -2.515625 0.3125 -1.078125 C 0.3125 -0.125 1.5625 0.0625 2.25 0.0625 C 3.046875 0.0625 3.515625 -0.34375 3.734375 -0.765625 Z M 3.5625 -2.328125 L 3.5625 -1.390625 C 3.5625 -0.421875 2.640625 -0.296875 2.390625 -0.296875 C 1.890625 -0.296875 1.484375 -0.640625 1.484375 -1.09375 C 1.484375 -2.15625 3.0625 -2.296875 3.5625 -2.328125 Z M 3.5625 -2.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 3.59375 -4.0625 C 3.40625 -3.890625 3.390625 -3.6875 3.390625 -3.59375 C 3.390625 -3.15625 3.734375 -2.96875 4 -2.96875 C 4.3125 -2.96875 4.640625 -3.1875 4.640625 -3.59375 C 4.640625 -4.453125 3.484375 -4.515625 2.90625 -4.515625 C 1.109375 -4.515625 0.375 -3.375 0.375 -2.21875 C 0.375 -0.890625 1.3125 0.0625 2.84375 0.0625 C 4.46875 0.0625 4.765625 -1.09375 4.765625 -1.171875 C 4.765625 -1.3125 4.625 -1.3125 4.53125 -1.3125 C 4.34375 -1.3125 4.34375 -1.28125 4.28125 -1.15625 C 4.03125 -0.53125 3.546875 -0.34375 3.046875 -0.34375 C 1.65625 -0.34375 1.65625 -1.796875 1.65625 -2.265625 C 1.65625 -2.828125 1.65625 -4.109375 2.9375 -4.109375 C 3.296875 -4.109375 3.453125 -4.09375 3.59375 -4.0625 Z M 3.59375 -4.0625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 6.421875 -6.78125 L 0.390625 -6.78125 L 0.390625 -6.3125 L 1.46875 -6.3125 L 1.46875 -0.46875 L 0.390625 -0.46875 L 0.390625 0 C 0.765625 -0.03125 1.78125 -0.03125 2.21875 -0.03125 C 2.703125 -0.03125 3.78125 -0.03125 4.234375 0 L 4.234375 -0.46875 L 2.875 -0.46875 L 2.875 -3.15625 L 3.375 -3.15625 C 4.34375 -3.15625 4.421875 -2.734375 4.421875 -2 L 4.890625 -2 L 4.890625 -4.796875 L 4.421875 -4.796875 C 4.421875 -4.0625 4.34375 -3.625 3.375 -3.625 L 2.875 -3.625 L 2.875 -6.3125 L 4.28125 -6.3125 C 5.875 -6.3125 6.109375 -5.546875 6.265625 -4.375 L 6.734375 -4.375 Z M 6.421875 -6.78125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 5.40625 -2.171875 C 5.40625 -3.515625 4.484375 -4.515625 2.859375 -4.515625 C 1.21875 -4.515625 0.3125 -3.5 0.3125 -2.171875 C 0.3125 -0.9375 1.203125 0.0625 2.859375 0.0625 C 4.53125 0.0625 5.40625 -0.953125 5.40625 -2.171875 Z M 2.859375 -0.34375 C 1.59375 -0.34375 1.59375 -1.421875 1.59375 -2.28125 C 1.59375 -2.734375 1.59375 -3.234375 1.765625 -3.578125 C 1.953125 -3.953125 2.375 -4.15625 2.859375 -4.15625 C 3.28125 -4.15625 3.703125 -4 3.921875 -3.65625 C 4.125 -3.3125 4.125 -2.765625 4.125 -2.28125 C 4.125 -1.421875 4.125 -0.34375 2.859375 -0.34375 Z M 2.859375 -0.34375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 5.046875 -3.75 C 5.109375 -3.890625 5.140625 -3.953125 5.78125 -3.953125 L 5.78125 -4.421875 C 5.546875 -4.40625 5.25 -4.390625 5 -4.390625 C 4.75 -4.390625 4.296875 -4.421875 4.09375 -4.421875 L 4.09375 -3.953125 C 4.109375 -3.953125 4.5625 -3.953125 4.5625 -3.84375 C 4.5625 -3.828125 4.515625 -3.734375 4.5 -3.71875 L 3.359375 -1.265625 L 2.09375 -3.953125 L 2.625 -3.953125 L 2.625 -4.421875 C 2.296875 -4.40625 1.40625 -4.390625 1.390625 -4.390625 C 1.109375 -4.390625 0.671875 -4.421875 0.265625 -4.421875 L 0.265625 -3.953125 L 0.890625 -3.953125 L 2.765625 0 L 2.53125 0.484375 C 2.3125 0.953125 2 1.640625 1.28125 1.640625 C 1.140625 1.640625 1.125 1.625 1.046875 1.59375 C 1.140625 1.5625 1.359375 1.421875 1.359375 1.0625 C 1.359375 0.734375 1.125 0.5 0.78125 0.5 C 0.515625 0.5 0.21875 0.6875 0.21875 1.078125 C 0.21875 1.578125 0.6875 2 1.28125 2 C 2.046875 2 2.625 1.375 2.90625 0.8125 Z M 5.046875 -3.75 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 7.640625 -6.671875 C 7.640625 -6.859375 7.640625 -6.953125 7.453125 -6.953125 C 7.359375 -6.953125 7.34375 -6.921875 7.265625 -6.859375 L 6.609375 -6.265625 C 5.984375 -6.765625 5.328125 -6.953125 4.640625 -6.953125 C 2.15625 -6.953125 0.640625 -5.46875 0.640625 -3.421875 C 0.640625 -1.375 2.15625 0.109375 4.640625 0.109375 C 6.515625 0.109375 7.640625 -1.109375 7.640625 -2.265625 C 7.640625 -2.46875 7.5625 -2.46875 7.390625 -2.46875 C 7.265625 -2.46875 7.171875 -2.46875 7.171875 -2.296875 C 7.09375 -0.96875 5.890625 -0.359375 4.890625 -0.359375 C 4.109375 -0.359375 3.265625 -0.59375 2.75 -1.203125 C 2.28125 -1.78125 2.15625 -2.515625 2.15625 -3.421875 C 2.15625 -3.984375 2.1875 -5.046875 2.828125 -5.71875 C 3.46875 -6.375 4.34375 -6.484375 4.859375 -6.484375 C 5.9375 -6.484375 6.875 -5.71875 7.09375 -4.453125 C 7.125 -4.265625 7.140625 -4.25 7.359375 -4.25 C 7.625 -4.25 7.640625 -4.265625 7.640625 -4.53125 Z M 7.640625 -6.671875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 1.140625 -3.546875 L 1.140625 -0.46875 L 0.453125 -0.46875 L 0.453125 0 C 0.734375 -0.015625 1.328125 -0.03125 1.703125 -0.03125 C 2.09375 -0.03125 2.6875 -0.015625 2.953125 0 L 2.953125 -0.46875 L 2.265625 -0.46875 L 2.265625 -2.546875 C 2.265625 -3.640625 3.125 -4.125 3.765625 -4.125 C 4.09375 -4.125 4.3125 -3.921875 4.3125 -3.15625 L 4.3125 -0.46875 L 3.625 -0.46875 L 3.625 0 C 3.890625 -0.015625 4.5 -0.03125 4.875 -0.03125 C 5.265625 -0.03125 5.859375 -0.015625 6.125 0 L 6.125 -0.46875 L 5.4375 -0.46875 L 5.4375 -3.046875 C 5.4375 -4.09375 4.90625 -4.484375 3.90625 -4.484375 C 2.953125 -4.484375 2.421875 -3.921875 2.15625 -3.40625 L 2.15625 -4.484375 L 0.453125 -4.40625 L 0.453125 -3.9375 C 1.0625 -3.9375 1.140625 -3.9375 1.140625 -3.546875 Z M 1.140625 -3.546875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 4.609375 -2.171875 C 4.828125 -2.171875 4.921875 -2.171875 4.921875 -2.4375 C 4.921875 -2.75 4.859375 -3.484375 4.359375 -3.984375 C 4 -4.34375 3.46875 -4.515625 2.78125 -4.515625 C 1.1875 -4.515625 0.3125 -3.484375 0.3125 -2.25 C 0.3125 -0.90625 1.3125 0.0625 2.921875 0.0625 C 4.5 0.0625 4.921875 -1 4.921875 -1.171875 C 4.921875 -1.34375 4.734375 -1.34375 4.6875 -1.34375 C 4.515625 -1.34375 4.5 -1.296875 4.4375 -1.140625 C 4.234375 -0.65625 3.65625 -0.34375 3.015625 -0.34375 C 1.609375 -0.34375 1.59375 -1.671875 1.59375 -2.171875 Z M 1.59375 -2.5 C 1.609375 -2.890625 1.625 -3.3125 1.828125 -3.640625 C 2.09375 -4.03125 2.5 -4.15625 2.78125 -4.15625 C 3.953125 -4.15625 3.96875 -2.84375 3.984375 -2.5 Z M 1.59375 -2.5 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d="M 5.15625 -2.21875 L 4.6875 -2.21875 C 4.65625 -2.015625 4.5625 -1.375 4.421875 -1.3125 C 4.3125 -1.25 3.5625 -1.25 3.40625 -1.25 L 1.9375 -1.25 C 2.40625 -1.640625 2.9375 -2.0625 3.375 -2.390625 C 4.515625 -3.234375 5.15625 -3.703125 5.15625 -4.640625 C 5.15625 -5.796875 4.109375 -6.53125 2.71875 -6.53125 C 1.5 -6.53125 0.5625 -5.90625 0.5625 -5.015625 C 0.5625 -4.421875 1.046875 -4.28125 1.28125 -4.28125 C 1.609375 -4.28125 2 -4.5 2 -5 C 2 -5.515625 1.578125 -5.671875 1.4375 -5.71875 C 1.71875 -5.953125 2.109375 -6.0625 2.46875 -6.0625 C 3.3125 -6.0625 3.78125 -5.390625 3.78125 -4.640625 C 3.78125 -3.953125 3.40625 -3.265625 2.703125 -2.5625 L 0.703125 -0.515625 C 0.5625 -0.40625 0.5625 -0.375 0.5625 -0.171875 L 0.5625 0 L 4.84375 0 Z M 5.15625 -2.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 3.53125 -6.203125 C 3.53125 -6.4375 3.53125 -6.53125 3.265625 -6.53125 C 3.15625 -6.53125 3.140625 -6.53125 3.046875 -6.453125 C 2.28125 -5.890625 1.25 -5.890625 1.046875 -5.890625 L 0.84375 -5.890625 L 0.84375 -5.421875 L 1.046875 -5.421875 C 1.203125 -5.421875 1.75 -5.4375 2.34375 -5.625 L 2.34375 -0.46875 L 0.953125 -0.46875 L 0.953125 0 C 1.390625 -0.03125 2.453125 -0.03125 2.9375 -0.03125 C 3.421875 -0.03125 4.484375 -0.03125 4.921875 0 L 4.921875 -0.46875 L 3.53125 -0.46875 Z M 3.53125 -6.203125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 2.875 -3.015625 L 4.640625 -3.015625 C 6.03125 -3.015625 7.1875 -3.734375 7.1875 -4.890625 C 7.1875 -5.984375 6.203125 -6.84375 4.546875 -6.84375 L 0.390625 -6.84375 L 0.390625 -6.375 L 1.46875 -6.375 L 1.46875 -0.46875 L 0.390625 -0.46875 L 0.390625 0 C 0.765625 -0.03125 1.75 -0.03125 2.171875 -0.03125 C 2.609375 -0.03125 3.578125 -0.03125 3.953125 0 L 3.953125 -0.46875 L 2.875 -0.46875 Z M 4.15625 -3.421875 L 2.828125 -3.421875 L 2.828125 -6.375 L 4.171875 -6.375 C 5.65625 -6.375 5.65625 -5.609375 5.65625 -4.890625 C 5.65625 -4.1875 5.65625 -3.421875 4.15625 -3.421875 Z M 4.15625 -3.421875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-16">
+<path style="stroke:none;" d="M 4.171875 -0.421875 L 4.171875 0.0625 L 5.984375 0 L 5.984375 -0.46875 C 5.375 -0.46875 5.296875 -0.46875 5.296875 -0.859375 L 5.296875 -6.921875 L 3.53125 -6.84375 L 3.53125 -6.375 C 4.15625 -6.375 4.234375 -6.375 4.234375 -5.984375 L 4.234375 -4.03125 C 3.734375 -4.421875 3.203125 -4.484375 2.875 -4.484375 C 1.421875 -4.484375 0.375 -3.609375 0.375 -2.203125 C 0.375 -0.890625 1.296875 0.0625 2.765625 0.0625 C 3.375 0.0625 3.859375 -0.171875 4.171875 -0.421875 Z M 4.171875 -3.515625 L 4.171875 -1.03125 C 4.03125 -0.84375 3.625 -0.296875 2.875 -0.296875 C 1.65625 -0.296875 1.65625 -1.5 1.65625 -2.203125 C 1.65625 -2.6875 1.65625 -3.21875 1.90625 -3.609375 C 2.203125 -4.03125 2.671875 -4.125 2.984375 -4.125 C 3.546875 -4.125 3.953125 -3.8125 4.171875 -3.515625 Z M 4.171875 -3.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-17">
+<path style="stroke:none;" d="M 4.359375 -0.71875 L 4.359375 0.0625 L 6.125 0 L 6.125 -0.46875 C 5.515625 -0.46875 5.4375 -0.46875 5.4375 -0.859375 L 5.4375 -4.484375 L 3.625 -4.40625 L 3.625 -3.9375 C 4.234375 -3.9375 4.3125 -3.9375 4.3125 -3.546875 L 4.3125 -1.640625 C 4.3125 -0.828125 3.796875 -0.296875 3.078125 -0.296875 C 2.296875 -0.296875 2.265625 -0.546875 2.265625 -1.09375 L 2.265625 -4.484375 L 0.453125 -4.40625 L 0.453125 -3.9375 C 1.0625 -3.9375 1.140625 -3.9375 1.140625 -3.546875 L 1.140625 -1.21875 C 1.140625 -0.15625 1.9375 0.0625 2.9375 0.0625 C 3.1875 0.0625 3.90625 0.0625 4.359375 -0.71875 Z M 4.359375 -0.71875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-18">
+<path style="stroke:none;" d="M 2.765625 -3.734375 L 2.765625 -6.375 L 4.578125 -6.375 C 5.59375 -6.375 5.765625 -5.578125 5.765625 -5.125 C 5.765625 -4.359375 5.296875 -3.734375 4.328125 -3.734375 Z M 5.46875 -3.5625 C 6.546875 -3.765625 7.1875 -4.359375 7.1875 -5.125 C 7.1875 -6.046875 6.3125 -6.84375 4.71875 -6.84375 L 0.390625 -6.84375 L 0.390625 -6.375 L 1.46875 -6.375 L 1.46875 -0.46875 L 0.390625 -0.46875 L 0.390625 0 L 5.015625 0 C 6.671875 0 7.5 -0.875 7.5 -1.859375 C 7.5 -2.8125 6.65625 -3.484375 5.46875 -3.5625 Z M 4.609375 -0.46875 L 2.765625 -0.46875 L 2.765625 -3.375 L 4.703125 -3.375 C 4.90625 -3.375 5.375 -3.375 5.71875 -2.953125 C 6.046875 -2.53125 6.046875 -1.96875 6.046875 -1.859375 C 6.046875 -1.75 6.046875 -0.46875 4.609375 -0.46875 Z M 4.609375 -0.46875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-19">
+<path style="stroke:none;" d="M 2.234375 -6.921875 L 0.46875 -6.84375 L 0.46875 -6.375 C 1.09375 -6.375 1.15625 -6.375 1.15625 -5.984375 L 1.15625 -0.46875 L 0.46875 -0.46875 L 0.46875 0 C 0.78125 -0.015625 1.265625 -0.03125 1.6875 -0.03125 C 2.125 -0.03125 2.578125 -0.015625 2.921875 0 L 2.921875 -0.46875 L 2.234375 -0.46875 Z M 2.234375 -6.921875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-20">
+<path style="stroke:none;" d="M 2.234375 -4.484375 L 0.5 -4.40625 L 0.5 -3.9375 C 1.09375 -3.9375 1.15625 -3.9375 1.15625 -3.546875 L 1.15625 -0.46875 L 0.46875 -0.46875 L 0.46875 0 C 0.78125 -0.015625 1.265625 -0.03125 1.6875 -0.03125 C 1.984375 -0.03125 2.5 -0.015625 2.84375 0 L 2.84375 -0.46875 L 2.234375 -0.46875 Z M 2.328125 -6.15625 C 2.328125 -6.59375 1.96875 -6.921875 1.5625 -6.921875 C 1.125 -6.921875 0.78125 -6.578125 0.78125 -6.15625 C 0.78125 -5.71875 1.125 -5.375 1.5625 -5.375 C 1.96875 -5.375 2.328125 -5.71875 2.328125 -6.15625 Z M 2.328125 -6.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 4.609375 -2.296875 L 7.171875 -2.296875 C 7.3125 -2.296875 7.5 -2.296875 7.5 -2.5 C 7.5 -2.6875 7.3125 -2.6875 7.171875 -2.6875 L 4.703125 -2.6875 L 5.328125 -5.15625 C 5.359375 -5.296875 5.359375 -5.3125 5.359375 -5.359375 C 5.359375 -5.46875 5.28125 -5.546875 5.15625 -5.546875 C 5 -5.546875 4.96875 -5.390625 4.9375 -5.296875 L 4.296875 -2.6875 L 1.71875 -2.6875 C 1.578125 -2.6875 1.390625 -2.6875 1.390625 -2.5 C 1.390625 -2.296875 1.578125 -2.296875 1.71875 -2.296875 L 4.203125 -2.296875 L 3.578125 0.171875 C 3.546875 0.3125 3.53125 0.3125 3.53125 0.359375 C 3.53125 0.5 3.640625 0.5625 3.734375 0.5625 C 3.890625 0.5625 3.921875 0.421875 3.953125 0.3125 Z M 4.609375 -2.296875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 8.078125 -6.78125 C 8.078125 -6.828125 8.09375 -6.890625 8.09375 -6.921875 C 8.09375 -6.953125 8.078125 -7.03125 7.984375 -7.03125 C 7.96875 -7.03125 7.921875 -7.03125 7.828125 -6.921875 L 7.203125 -6.1875 C 6.765625 -6.875 6.1875 -7.03125 5.6875 -7.03125 C 3.640625 -7.03125 1.5 -4.78125 1.5 -2.4375 C 1.5 -0.8125 2.5625 0.21875 3.9375 0.21875 C 5.875 0.21875 6.96875 -1.90625 6.96875 -2.390625 C 6.96875 -2.5 6.875 -2.5 6.8125 -2.5 C 6.765625 -2.5 6.6875 -2.5 6.65625 -2.40625 C 6.15625 -0.734375 4.90625 -0.09375 4.078125 -0.09375 C 3.234375 -0.09375 2.359375 -0.640625 2.359375 -2.0625 C 2.359375 -2.6875 2.609375 -4.25 3.40625 -5.34375 C 4.09375 -6.265625 5 -6.71875 5.765625 -6.71875 C 6.828125 -6.71875 7.1875 -5.765625 7.1875 -4.890625 C 7.1875 -4.640625 7.140625 -4.3125 7.140625 -4.28125 C 7.140625 -4.1875 7.234375 -4.1875 7.28125 -4.1875 C 7.390625 -4.1875 7.421875 -4.203125 7.46875 -4.359375 Z M 8.078125 -6.78125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 2.578125 -2.875 C 2.578125 -2.90625 3.03125 -4.1875 3.890625 -4.1875 C 3.9375 -4.1875 4.21875 -4.1875 4.421875 -4.046875 C 4.0625 -3.9375 4.03125 -3.625 4.03125 -3.5625 C 4.03125 -3.4375 4.125 -3.25 4.390625 -3.25 C 4.5625 -3.25 4.875 -3.390625 4.875 -3.78125 C 4.875 -4.296875 4.234375 -4.40625 3.890625 -4.40625 C 3.203125 -4.40625 2.84375 -3.90625 2.6875 -3.6875 C 2.578125 -4.21875 2.1875 -4.40625 1.859375 -4.40625 C 1.5 -4.40625 1.3125 -4.171875 1.140625 -3.875 C 0.953125 -3.484375 0.828125 -2.890625 0.828125 -2.875 C 0.828125 -2.765625 0.921875 -2.765625 0.984375 -2.765625 C 1.109375 -2.765625 1.109375 -2.78125 1.171875 -3 C 1.34375 -3.703125 1.53125 -4.1875 1.84375 -4.1875 C 2.109375 -4.1875 2.109375 -3.890625 2.109375 -3.78125 C 2.109375 -3.625 2.078125 -3.4375 2.03125 -3.28125 L 1.28125 -0.296875 C 1.265625 -0.234375 1.25 -0.171875 1.25 -0.15625 C 1.25 -0.046875 1.328125 0.109375 1.53125 0.109375 C 1.828125 0.109375 1.90625 -0.171875 1.921875 -0.265625 Z M 2.578125 -2.875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 2.375 -2.296875 C 2.6875 -2.296875 3.34375 -2.328125 3.828125 -2.515625 C 4.609375 -2.84375 4.609375 -3.484375 4.609375 -3.5625 C 4.609375 -4.015625 4.25 -4.40625 3.609375 -4.40625 C 2.5625 -4.40625 1.140625 -3.40625 1.140625 -1.640625 C 1.140625 -0.734375 1.609375 0.109375 2.5625 0.109375 C 3.84375 0.109375 4.671875 -0.890625 4.671875 -1.03125 C 4.671875 -1.09375 4.578125 -1.203125 4.5 -1.203125 C 4.46875 -1.203125 4.453125 -1.1875 4.375 -1.09375 C 3.640625 -0.15625 2.75 -0.109375 2.578125 -0.109375 C 1.9375 -0.109375 1.828125 -0.8125 1.828125 -1.203125 C 1.828125 -1.578125 1.921875 -2.03125 2 -2.296875 Z M 2.046875 -2.515625 C 2.484375 -4.15625 3.515625 -4.1875 3.609375 -4.1875 C 4 -4.1875 4.234375 -3.921875 4.234375 -3.578125 C 4.234375 -2.515625 2.59375 -2.515625 2.265625 -2.515625 Z M 2.046875 -2.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 3.484375 -0.59375 C 3.59375 -0.09375 3.953125 0.109375 4.3125 0.109375 C 4.671875 0.109375 4.890625 -0.140625 5.03125 -0.453125 C 5.21875 -0.828125 5.328125 -1.40625 5.328125 -1.421875 C 5.328125 -1.53125 5.25 -1.53125 5.1875 -1.53125 C 5.0625 -1.53125 5.046875 -1.515625 5 -1.296875 C 4.859375 -0.734375 4.671875 -0.109375 4.328125 -0.109375 C 4.0625 -0.109375 4.0625 -0.375 4.0625 -0.515625 C 4.0625 -0.59375 4.0625 -0.75 4.140625 -1.03125 L 4.8125 -3.734375 C 4.859375 -3.875 4.859375 -3.890625 4.859375 -3.953125 C 4.859375 -4.15625 4.6875 -4.203125 4.578125 -4.203125 C 4.265625 -4.203125 4.203125 -3.875 4.1875 -3.8125 C 4 -4.25 3.671875 -4.40625 3.359375 -4.40625 C 2.25 -4.40625 1.078125 -2.890625 1.078125 -1.4375 C 1.078125 -0.59375 1.53125 0.109375 2.28125 0.109375 C 2.640625 0.109375 3.078125 -0.09375 3.484375 -0.59375 Z M 4.015625 -3.125 L 3.546875 -1.234375 C 3.46875 -0.921875 2.84375 -0.109375 2.296875 -0.109375 C 1.828125 -0.109375 1.75 -0.703125 1.75 -1 C 1.75 -1.5 2.0625 -2.65625 2.25 -3.078125 C 2.5 -3.6875 2.953125 -4.1875 3.359375 -4.1875 C 3.796875 -4.1875 4.046875 -3.671875 4.046875 -3.25 C 4.046875 -3.234375 4.03125 -3.1875 4.015625 -3.125 Z M 4.015625 -3.125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 2.59375 -3.984375 L 3.4375 -3.984375 C 3.609375 -3.984375 3.71875 -3.984375 3.71875 -4.171875 C 3.71875 -4.296875 3.625 -4.296875 3.46875 -4.296875 L 2.671875 -4.296875 L 3.046875 -5.765625 C 3.078125 -5.90625 3.078125 -5.9375 3.078125 -5.984375 C 3.078125 -6.1875 2.90625 -6.234375 2.8125 -6.234375 C 2.5625 -6.234375 2.46875 -6.03125 2.421875 -5.875 L 2.03125 -4.296875 L 1.1875 -4.296875 C 1.015625 -4.296875 0.90625 -4.296875 0.90625 -4.109375 C 0.90625 -3.984375 1 -3.984375 1.15625 -3.984375 L 1.953125 -3.984375 L 1.234375 -1.125 C 1.21875 -1.09375 1.1875 -0.921875 1.1875 -0.78125 C 1.1875 -0.296875 1.515625 0.109375 2.03125 0.109375 C 3.046875 0.109375 3.546875 -1.375 3.546875 -1.421875 C 3.546875 -1.53125 3.46875 -1.53125 3.40625 -1.53125 C 3.28125 -1.53125 3.28125 -1.515625 3.203125 -1.328125 C 3.015625 -0.859375 2.625 -0.109375 2.046875 -0.109375 C 1.78125 -0.109375 1.78125 -0.359375 1.78125 -0.515625 C 1.78125 -0.59375 1.78125 -0.75 1.859375 -1.03125 Z M 2.59375 -3.984375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 3.125 -3.15625 L 4.671875 -3.15625 C 5.9375 -3.15625 7.28125 -4.171875 7.28125 -5.328125 C 7.28125 -6.171875 6.59375 -6.8125 5.515625 -6.8125 L 2.515625 -6.8125 C 2.359375 -6.8125 2.25 -6.8125 2.25 -6.625 C 2.25 -6.5 2.328125 -6.5 2.515625 -6.5 C 2.828125 -6.5 3.09375 -6.5 3.09375 -6.328125 C 3.09375 -6.296875 3.09375 -6.28125 3.0625 -6.140625 L 1.71875 -0.734375 C 1.640625 -0.390625 1.578125 -0.3125 0.890625 -0.3125 C 0.734375 -0.3125 0.625 -0.3125 0.625 -0.125 C 0.625 0 0.734375 0 0.765625 0 C 1.140625 0 1.5625 -0.03125 1.9375 -0.03125 C 2.34375 -0.03125 2.75 0 3.140625 0 C 3.203125 0 3.328125 0 3.328125 -0.171875 C 3.328125 -0.3125 3.265625 -0.3125 3.0625 -0.3125 C 2.484375 -0.3125 2.484375 -0.390625 2.484375 -0.484375 C 2.484375 -0.515625 2.484375 -0.53125 2.515625 -0.671875 Z M 3.84375 -6.140625 C 3.9375 -6.5 4 -6.5 4.34375 -6.5 L 5.1875 -6.5 C 5.890625 -6.5 6.40625 -6.234375 6.40625 -5.609375 C 6.40625 -5.40625 6.25 -4.421875 5.875 -3.984375 C 5.515625 -3.59375 5.03125 -3.40625 4.421875 -3.40625 L 3.171875 -3.40625 Z M 3.84375 -6.140625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 5.078125 -2.765625 C 5.078125 -3.71875 4.484375 -4.40625 3.625 -4.40625 C 2.375 -4.40625 1.09375 -2.984375 1.09375 -1.53125 C 1.09375 -0.515625 1.71875 0.109375 2.546875 0.109375 C 3.78125 0.109375 5.078125 -1.3125 5.078125 -2.765625 Z M 2.546875 -0.109375 C 2.15625 -0.109375 1.796875 -0.421875 1.796875 -1.140625 C 1.796875 -1.640625 2.046875 -2.734375 2.375 -3.28125 C 2.734375 -3.890625 3.21875 -4.1875 3.609375 -4.1875 C 4.09375 -4.1875 4.375 -3.75 4.375 -3.15625 C 4.375 -2.734375 4.15625 -1.703125 3.84375 -1.109375 C 3.546875 -0.5625 3.046875 -0.109375 2.546875 -0.109375 Z M 2.546875 -0.109375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-8">
+<path style="stroke:none;" d="M 5.546875 -6.671875 C 5.5625 -6.703125 5.578125 -6.78125 5.578125 -6.796875 C 5.578125 -6.890625 5.515625 -6.921875 5.4375 -6.921875 C 5.40625 -6.921875 5.3125 -6.90625 5.28125 -6.890625 L 4.296875 -6.8125 C 4.171875 -6.8125 4.0625 -6.796875 4.0625 -6.609375 C 4.0625 -6.5 4.171875 -6.5 4.3125 -6.5 C 4.78125 -6.5 4.8125 -6.4375 4.8125 -6.328125 C 4.8125 -6.296875 4.78125 -6.171875 4.78125 -6.15625 L 4.203125 -3.828125 C 4.046875 -4.140625 3.78125 -4.40625 3.359375 -4.40625 C 2.25 -4.40625 1.078125 -2.890625 1.078125 -1.4375 C 1.078125 -0.59375 1.53125 0.109375 2.28125 0.109375 C 2.640625 0.109375 3.078125 -0.09375 3.484375 -0.59375 C 3.59375 -0.09375 3.953125 0.109375 4.3125 0.109375 C 4.671875 0.109375 4.890625 -0.140625 5.03125 -0.453125 C 5.21875 -0.828125 5.328125 -1.40625 5.328125 -1.421875 C 5.328125 -1.53125 5.25 -1.53125 5.1875 -1.53125 C 5.0625 -1.53125 5.046875 -1.515625 5 -1.296875 C 4.859375 -0.734375 4.671875 -0.109375 4.328125 -0.109375 C 4.0625 -0.109375 4.0625 -0.375 4.0625 -0.515625 C 4.0625 -0.59375 4.0625 -0.734375 4.125 -0.984375 Z M 3.53125 -1.21875 C 3.453125 -0.90625 2.84375 -0.109375 2.296875 -0.109375 C 1.828125 -0.109375 1.75 -0.703125 1.75 -1 C 1.75 -1.5 2.0625 -2.65625 2.25 -3.078125 C 2.5 -3.6875 2.953125 -4.1875 3.359375 -4.1875 C 3.4375 -4.1875 3.671875 -4.171875 3.84375 -3.890625 C 3.953125 -3.734375 4.046875 -3.453125 4.046875 -3.265625 C 4.046875 -3.234375 4.03125 -3.1875 4.015625 -3.125 Z M 3.53125 -1.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-9">
+<path style="stroke:none;" d="M 5.109375 -3.890625 C 5.140625 -3.953125 5.140625 -4 5.140625 -4.03125 C 5.140625 -4.140625 5.0625 -4.296875 4.859375 -4.296875 C 4.5625 -4.296875 4.5 -4 4.46875 -3.921875 L 3.75 -1.015625 C 3.703125 -0.84375 3.703125 -0.8125 3.609375 -0.6875 C 3.421875 -0.40625 3.125 -0.109375 2.6875 -0.109375 C 2.25 -0.109375 2.15625 -0.546875 2.15625 -0.875 C 2.15625 -1.484375 2.484375 -2.375 2.734375 -3.0625 C 2.8125 -3.265625 2.859375 -3.40625 2.859375 -3.59375 C 2.859375 -4.09375 2.53125 -4.40625 2.109375 -4.40625 C 1.171875 -4.40625 0.828125 -2.9375 0.828125 -2.875 C 0.828125 -2.765625 0.921875 -2.765625 0.984375 -2.765625 C 1.109375 -2.765625 1.109375 -2.796875 1.15625 -2.9375 C 1.234375 -3.234375 1.5 -4.1875 2.078125 -4.1875 C 2.1875 -4.1875 2.296875 -4.15625 2.296875 -3.890625 C 2.296875 -3.65625 2.203125 -3.390625 2.0625 -3 C 1.796875 -2.296875 1.546875 -1.5625 1.546875 -1.046875 C 1.546875 -0.171875 2.125 0.109375 2.65625 0.109375 C 3.1875 0.109375 3.53125 -0.1875 3.765625 -0.484375 C 3.953125 0.046875 4.375 0.109375 4.5625 0.109375 C 4.9375 0.109375 5.140625 -0.140625 5.296875 -0.453125 C 5.46875 -0.828125 5.59375 -1.40625 5.59375 -1.421875 C 5.59375 -1.53125 5.515625 -1.53125 5.4375 -1.53125 C 5.328125 -1.53125 5.3125 -1.515625 5.25 -1.296875 C 5.109375 -0.734375 4.921875 -0.109375 4.578125 -0.109375 C 4.328125 -0.109375 4.328125 -0.375 4.328125 -0.515625 C 4.328125 -0.59375 4.328125 -0.75 4.390625 -1.03125 Z M 5.109375 -3.890625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-10">
+<path style="stroke:none;" d="M 4.34375 -3.765625 C 3.84375 -3.703125 3.84375 -3.296875 3.84375 -3.265625 C 3.84375 -3.109375 3.953125 -2.953125 4.171875 -2.953125 C 4.453125 -2.953125 4.6875 -3.171875 4.6875 -3.546875 C 4.6875 -4.03125 4.25 -4.40625 3.625 -4.40625 C 2.375 -4.40625 1.09375 -2.984375 1.09375 -1.53125 C 1.09375 -0.546875 1.6875 0.109375 2.5625 0.109375 C 3.84375 0.109375 4.671875 -0.890625 4.671875 -1.03125 C 4.671875 -1.09375 4.578125 -1.203125 4.5 -1.203125 C 4.46875 -1.203125 4.453125 -1.1875 4.375 -1.09375 C 3.640625 -0.15625 2.75 -0.109375 2.578125 -0.109375 C 2.046875 -0.109375 1.796875 -0.5625 1.796875 -1.140625 C 1.796875 -1.671875 2.0625 -2.71875 2.328125 -3.1875 C 2.6875 -3.84375 3.1875 -4.1875 3.625 -4.1875 C 3.734375 -4.1875 4.1875 -4.171875 4.34375 -3.765625 Z M 4.34375 -3.765625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-11">
+<path style="stroke:none;" d="M 1.90625 -1.125 C 1.484375 -0.375 1.0625 -0.328125 0.703125 -0.3125 C 0.59375 -0.296875 0.59375 -0.125 0.59375 -0.125 C 0.59375 -0.09375 0.59375 0 0.703125 0 C 0.953125 0 1.25 -0.03125 1.5 -0.03125 C 1.8125 -0.03125 2.140625 0 2.4375 0 C 2.484375 0 2.609375 0 2.609375 -0.1875 C 2.609375 -0.296875 2.53125 -0.296875 2.453125 -0.3125 C 2.390625 -0.3125 2.03125 -0.34375 2.03125 -0.640625 C 2.03125 -0.734375 2.078125 -0.859375 2.171875 -1.03125 L 2.890625 -2.28125 L 5.15625 -2.28125 L 5.28125 -0.625 C 5.28125 -0.421875 5.03125 -0.3125 4.609375 -0.3125 C 4.5 -0.3125 4.375 -0.3125 4.375 -0.125 C 4.375 0 4.5 0 4.53125 0 C 4.890625 0 5.296875 -0.03125 5.671875 -0.03125 C 6.015625 -0.03125 6.375 0 6.71875 0 C 6.78125 0 6.890625 0 6.890625 -0.171875 C 6.890625 -0.3125 6.8125 -0.3125 6.65625 -0.3125 C 6.140625 -0.3125 6.109375 -0.390625 6.09375 -0.640625 L 5.65625 -6.890625 C 5.65625 -7.109375 5.640625 -7.140625 5.484375 -7.140625 C 5.328125 -7.140625 5.28125 -7.0625 5.21875 -6.953125 Z M 4.921875 -5.859375 L 5.140625 -2.59375 L 3.0625 -2.59375 Z M 4.921875 -5.859375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-12">
+<path style="stroke:none;" d="M 2.703125 2.390625 C 2.703125 2.375 2.703125 2.359375 2.625 2.25 C 2.09375 1.4375 2.015625 0.59375 2.015625 -0.109375 C 2.015625 -1.46875 2.609375 -5.15625 5 -7.203125 C 5.140625 -7.34375 5.140625 -7.34375 5.140625 -7.375 C 5.140625 -7.453125 5.109375 -7.484375 5.046875 -7.484375 C 4.9375 -7.484375 3.78125 -6.671875 2.921875 -5.25 C 1.828125 -3.453125 1.515625 -1.53125 1.515625 -0.46875 C 1.515625 0.125 1.609375 0.75 1.78125 1.25 C 2.03125 1.90625 2.46875 2.5 2.609375 2.5 C 2.65625 2.5 2.703125 2.453125 2.703125 2.390625 Z M 2.703125 2.390625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-13">
+<path style="stroke:none;" d="M 3.8125 -4.515625 C 3.8125 -5.109375 3.71875 -5.734375 3.53125 -6.234375 C 3.296875 -6.890625 2.859375 -7.484375 2.71875 -7.484375 C 2.65625 -7.484375 2.625 -7.4375 2.625 -7.375 C 2.625 -7.359375 2.625 -7.34375 2.6875 -7.234375 C 3.234375 -6.421875 3.3125 -5.578125 3.3125 -4.875 C 3.3125 -3.515625 2.71875 0.171875 0.328125 2.21875 C 0.1875 2.359375 0.171875 2.359375 0.171875 2.390625 C 0.171875 2.46875 0.21875 2.5 0.28125 2.5 C 0.390625 2.5 1.53125 1.6875 2.40625 0.265625 C 3.5 -1.53125 3.8125 -3.453125 3.8125 -4.515625 Z M 3.8125 -4.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-14">
+<path style="stroke:none;" d="M 3.84375 -6.140625 C 3.921875 -6.5 4 -6.5 4.328125 -6.5 L 5.5 -6.5 C 6.34375 -6.5 6.4375 -5.828125 6.4375 -5.515625 C 6.4375 -4.671875 5.671875 -3.65625 4.53125 -3.65625 L 3.21875 -3.65625 Z M 5.359375 -3.5625 C 6.578125 -3.828125 7.3125 -4.6875 7.3125 -5.453125 C 7.3125 -6.171875 6.734375 -6.8125 5.640625 -6.8125 L 2.546875 -6.8125 C 2.375 -6.8125 2.265625 -6.8125 2.265625 -6.625 C 2.265625 -6.5 2.359375 -6.5 2.546875 -6.5 C 2.84375 -6.5 3.125 -6.5 3.125 -6.328125 C 3.125 -6.296875 3.125 -6.28125 3.078125 -6.140625 L 1.734375 -0.734375 C 1.65625 -0.390625 1.59375 -0.3125 0.921875 -0.3125 C 0.75 -0.3125 0.640625 -0.3125 0.640625 -0.125 C 0.640625 0 0.734375 0 0.890625 0 L 4.1875 0 C 5.609375 0 6.75 -1.140625 6.75 -2.1875 C 6.75 -3.015625 6.078125 -3.46875 5.359375 -3.5625 Z M 3.96875 -0.3125 L 2.734375 -0.3125 C 2.421875 -0.3125 2.421875 -0.34375 2.421875 -0.40625 C 2.421875 -0.46875 2.453125 -0.5625 2.46875 -0.625 L 3.15625 -3.421875 L 4.875 -3.421875 C 5.796875 -3.421875 5.859375 -2.578125 5.859375 -2.3125 C 5.859375 -1.34375 5.0625 -0.3125 3.96875 -0.3125 Z M 3.96875 -0.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 7.046875 -4.515625 C 7.15625 -4.578125 7.234375 -4.609375 7.234375 -4.71875 C 7.25 -4.828125 7.15625 -4.9375 7.046875 -4.9375 C 7.015625 -4.9375 7 -4.9375 6.875 -4.875 L 1.1875 -2.65625 C 1.078125 -2.59375 1 -2.5625 0.984375 -2.453125 C 0.984375 -2.328125 1.0625 -2.265625 1.15625 -2.203125 L 6.515625 0.75 C 6.625 0.84375 6.640625 0.84375 6.671875 0.84375 C 6.78125 0.84375 6.890625 0.765625 6.890625 0.65625 C 6.90625 0.546875 6.828125 0.484375 6.71875 0.421875 L 1.65625 -2.40625 Z M 7.046875 -4.515625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 6.859375 -1.828125 C 6.984375 -1.890625 7.0625 -1.921875 7.0625 -2.046875 C 7.078125 -2.15625 7 -2.21875 6.890625 -2.28125 L 1.546875 -5.21875 C 1.421875 -5.3125 1.40625 -5.3125 1.375 -5.3125 C 1.265625 -5.3125 1.171875 -5.234375 1.15625 -5.125 C 1.15625 -5.03125 1.203125 -4.953125 1.34375 -4.890625 L 6.390625 -2.09375 L 1.015625 0.046875 C 0.875 0.109375 0.828125 0.15625 0.8125 0.25 C 0.8125 0.359375 0.890625 0.46875 1 0.46875 C 1.03125 0.46875 1.046875 0.46875 1.1875 0.40625 Z M 6.859375 -1.828125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-0">
+<path style="stroke:none;" d="M 2.046875 -4.28125 L 0.65625 -4.25 L 0.625 -3.9375 C 1.265625 -3.90625 1.359375 -3.828125 1.328125 -3.359375 L 1.15625 -0.671875 C 1.125 -0.234375 1.015625 -0.25 0.34375 -0.296875 L 0.328125 0.015625 C 0.640625 0.03125 1.1875 0.046875 1.421875 0.0625 C 1.78125 0.078125 2.125 0.125 2.46875 0.15625 L 2.484375 -0.15625 C 1.8125 -0.203125 1.78125 -0.25 1.8125 -0.640625 Z M 2.1875 -6.015625 C 2.21875 -6.328125 2 -6.5625 1.71875 -6.578125 C 1.40625 -6.59375 1.15625 -6.34375 1.140625 -6.078125 C 1.125 -5.8125 1.328125 -5.53125 1.640625 -5.515625 C 1.921875 -5.5 2.171875 -5.703125 2.1875 -6.015625 Z M 2.1875 -6.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-1">
+<path style="stroke:none;" d="M 1.3125 -3.34375 L 1.140625 -0.671875 C 1.109375 -0.234375 1 -0.25 0.328125 -0.296875 L 0.3125 0.015625 C 0.671875 0.03125 1.171875 0.046875 1.453125 0.0625 C 1.703125 0.078125 2.21875 0.125 2.5625 0.171875 L 2.578125 -0.140625 C 1.90625 -0.1875 1.796875 -0.203125 1.828125 -0.640625 L 1.953125 -2.484375 C 2.015625 -3.515625 2.765625 -4.015625 3.390625 -3.96875 C 4.015625 -3.921875 4.09375 -3.40625 4.0625 -2.828125 L 3.90625 -0.5 C 3.875 -0.0625 3.765625 -0.0625 3.109375 -0.109375 L 3.09375 0.203125 C 3.4375 0.203125 3.9375 0.21875 4.203125 0.234375 C 4.453125 0.25 4.984375 0.3125 5.3125 0.34375 L 5.328125 0.03125 C 4.8125 0 4.5625 -0.015625 4.59375 -0.3125 L 4.703125 -2.21875 C 4.765625 -3.078125 4.78125 -3.375 4.5 -3.734375 C 4.359375 -3.921875 4.046875 -4.140625 3.484375 -4.1875 C 2.75 -4.234375 2.25 -3.84375 1.9375 -3.25 L 2 -4.28125 L 0.59375 -4.265625 L 0.5625 -3.953125 C 1.265625 -3.90625 1.34375 -3.828125 1.3125 -3.34375 Z M 1.3125 -3.34375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-2">
+<path style="stroke:none;" d="M 2.203125 -1.796875 C 2.421875 -1.75 3.21875 -1.53125 3.171875 -0.8125 C 3.140625 -0.3125 2.765625 0.0625 1.984375 0.015625 C 1.140625 -0.03125 0.828125 -0.625 0.6875 -1.5 C 0.671875 -1.625 0.671875 -1.65625 0.5625 -1.65625 C 0.4375 -1.671875 0.4375 -1.609375 0.421875 -1.4375 L 0.34375 -0.109375 C 0.328125 0.0625 0.328125 0.125 0.4375 0.140625 C 0.484375 0.140625 0.5 0.125 0.6875 -0.046875 C 0.703125 -0.0625 0.71875 -0.078125 0.90625 -0.25 C 1.328125 0.171875 1.78125 0.21875 1.984375 0.234375 C 3.125 0.3125 3.625 -0.328125 3.671875 -1.046875 C 3.703125 -1.5625 3.4375 -1.890625 3.3125 -2.015625 C 3.015625 -2.359375 2.625 -2.46875 2.203125 -2.578125 C 1.65625 -2.71875 1 -2.890625 1.046875 -3.46875 C 1.0625 -3.8125 1.34375 -4.203125 2.203125 -4.140625 C 3.296875 -4.078125 3.296875 -3.171875 3.296875 -2.875 C 3.28125 -2.78125 3.375 -2.78125 3.390625 -2.78125 C 3.53125 -2.765625 3.546875 -2.8125 3.546875 -3 L 3.609375 -4 C 3.625 -4.15625 3.625 -4.234375 3.515625 -4.25 C 3.46875 -4.25 3.4375 -4.25 3.3125 -4.125 C 3.28125 -4.109375 3.171875 -4.015625 3.125 -3.984375 C 2.765625 -4.296875 2.359375 -4.3125 2.203125 -4.328125 C 0.984375 -4.40625 0.578125 -3.765625 0.53125 -3.21875 C 0.515625 -2.875 0.65625 -2.578125 0.90625 -2.34375 C 1.21875 -2.078125 1.5 -1.984375 2.203125 -1.796875 Z M 2.203125 -1.796875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-3">
+<path style="stroke:none;" d="M 1.96875 -3.859375 L 3.40625 -3.765625 L 3.4375 -4.078125 L 2 -4.171875 L 2.109375 -6 L 1.859375 -6.015625 C 1.8125 -5.203125 1.453125 -4.15625 0.453125 -4.171875 L 0.4375 -3.953125 L 1.28125 -3.90625 L 1.109375 -1.171875 C 1.03125 0.046875 1.96875 0.234375 2.328125 0.265625 C 3.03125 0.3125 3.34375 -0.375 3.390625 -1.015625 L 3.421875 -1.578125 L 3.171875 -1.59375 L 3.140625 -1.046875 C 3.09375 -0.3125 2.78125 0.03125 2.40625 0.015625 C 1.734375 -0.03125 1.78125 -0.9375 1.796875 -1.109375 Z M 1.96875 -3.859375 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-4">
+<path style="stroke:none;" d="M 3.359375 -0.53125 C 3.375 -0.140625 3.625 0.296875 4.078125 0.328125 C 4.296875 0.34375 4.90625 0.234375 4.96875 -0.578125 L 5 -1.140625 L 4.75 -1.15625 L 4.71875 -0.59375 C 4.671875 -0.015625 4.421875 0.03125 4.3125 0.03125 C 3.984375 0 3.96875 -0.453125 3.96875 -0.5 L 4.09375 -2.484375 C 4.125 -2.90625 4.15625 -3.296875 3.828125 -3.671875 C 3.46875 -4.09375 2.96875 -4.28125 2.5 -4.3125 C 1.671875 -4.359375 0.96875 -3.9375 0.921875 -3.296875 C 0.90625 -3 1.09375 -2.8125 1.359375 -2.796875 C 1.640625 -2.78125 1.828125 -2.96875 1.84375 -3.21875 C 1.84375 -3.34375 1.828125 -3.65625 1.359375 -3.6875 C 1.65625 -4.03125 2.15625 -4.109375 2.46875 -4.09375 C 2.96875 -4.0625 3.5 -3.640625 3.4375 -2.765625 L 3.421875 -2.40625 C 2.90625 -2.40625 2.21875 -2.421875 1.5625 -2.15625 C 0.796875 -1.859375 0.515625 -1.359375 0.484375 -0.921875 C 0.4375 -0.109375 1.390625 0.203125 2.015625 0.234375 C 2.671875 0.28125 3.140625 -0.09375 3.359375 -0.53125 Z M 3.40625 -2.1875 L 3.34375 -1.1875 C 3.28125 -0.25 2.53125 0.046875 2.078125 0.03125 C 1.59375 0 1.21875 -0.375 1.25 -0.875 C 1.28125 -1.421875 1.765625 -2.21875 3.40625 -2.1875 Z M 3.40625 -2.1875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-5">
+<path style="stroke:none;" d="M 1.265625 -2.4375 C 1.4375 -3.90625 2.296875 -4.109375 2.640625 -4.078125 C 3.65625 -4.015625 3.671875 -2.6875 3.640625 -2.296875 Z M 1.25 -2.21875 L 4.015625 -2.046875 C 4.234375 -2.03125 4.265625 -2.03125 4.28125 -2.25 C 4.34375 -3.234375 3.875 -4.21875 2.640625 -4.296875 C 1.484375 -4.375 0.5 -3.421875 0.421875 -2.171875 C 0.34375 -0.84375 1.328125 0.1875 2.46875 0.265625 C 3.6875 0.34375 4.1875 -0.734375 4.203125 -0.921875 C 4.203125 -1.015625 4.125 -1.046875 4.0625 -1.046875 C 3.984375 -1.0625 3.953125 -1 3.9375 -0.921875 C 3.546875 0.09375 2.640625 0.03125 2.546875 0.015625 C 2.046875 -0.015625 1.671875 -0.328125 1.453125 -0.71875 C 1.1875 -1.203125 1.234375 -1.859375 1.25 -2.21875 Z M 1.25 -2.21875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-0">
+<path style="stroke:none;" d="M 6.703125 -5.015625 C 6.8125 -5.078125 6.890625 -5.125 6.890625 -5.234375 C 6.890625 -5.34375 6.796875 -5.4375 6.6875 -5.4375 C 6.65625 -5.4375 6.640625 -5.4375 6.515625 -5.34375 L 1 -2.71875 C 0.890625 -2.65625 0.8125 -2.609375 0.8125 -2.5 C 0.8125 -2.375 0.890625 -2.328125 1 -2.265625 L 6.546875 0.296875 C 6.671875 0.359375 6.6875 0.359375 6.71875 0.359375 C 6.828125 0.359375 6.921875 0.265625 6.921875 0.15625 C 6.921875 0.046875 6.84375 0 6.734375 -0.0625 L 1.484375 -2.515625 Z M 6.703125 -5.015625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph6-1">
+<path style="stroke:none;" d="M 6.71875 -2.3125 C 6.828125 -2.375 6.90625 -2.421875 6.90625 -2.546875 C 6.90625 -2.65625 6.828125 -2.703125 6.71875 -2.765625 L 1.171875 -5.3125 C 1.046875 -5.390625 1.03125 -5.390625 1 -5.390625 C 0.890625 -5.390625 0.796875 -5.296875 0.796875 -5.1875 C 0.796875 -5.09375 0.84375 -5.03125 0.984375 -4.96875 L 6.234375 -2.53125 L 1.015625 -0.015625 C 0.875 0.046875 0.828125 0.109375 0.828125 0.203125 C 0.828125 0.3125 0.921875 0.40625 1.03125 0.40625 C 1.0625 0.40625 1.078125 0.40625 1.203125 0.328125 Z M 6.71875 -2.3125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-0">
+<path style="stroke:none;" d="M 1.734375 -4.421875 L 0.34375 -4.296875 L 0.34375 -3.984375 C 0.984375 -3.984375 1.09375 -3.921875 1.09375 -3.4375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.328125 -0.3125 L 0.328125 0 C 0.640625 -0.015625 1.1875 -0.03125 1.421875 -0.046875 C 1.78125 -0.046875 2.125 -0.03125 2.46875 -0.015625 L 2.46875 -0.328125 C 1.796875 -0.328125 1.765625 -0.375 1.765625 -0.765625 Z M 1.765625 -6.15625 C 1.765625 -6.46875 1.515625 -6.6875 1.234375 -6.671875 C 0.921875 -6.671875 0.71875 -6.40625 0.71875 -6.140625 C 0.71875 -5.875 0.9375 -5.609375 1.25 -5.609375 C 1.53125 -5.625 1.765625 -5.84375 1.765625 -6.15625 Z M 1.765625 -6.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-1">
+<path style="stroke:none;" d="M 1.078125 -3.421875 L 1.09375 -0.75 C 1.09375 -0.3125 0.984375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.671875 -0.015625 1.171875 -0.03125 1.453125 -0.046875 C 1.703125 -0.046875 2.21875 -0.03125 2.5625 -0.015625 L 2.5625 -0.328125 C 1.890625 -0.328125 1.78125 -0.328125 1.78125 -0.765625 L 1.765625 -2.609375 C 1.765625 -3.640625 2.46875 -4.203125 3.09375 -4.203125 C 3.734375 -4.203125 3.859375 -3.671875 3.859375 -3.09375 L 3.875 -0.765625 C 3.875 -0.328125 3.765625 -0.328125 3.09375 -0.328125 L 3.09375 -0.015625 C 3.4375 -0.03125 3.953125 -0.0625 4.21875 -0.0625 C 4.46875 -0.0625 5 -0.046875 5.328125 -0.03125 L 5.328125 -0.34375 C 4.671875 -0.34375 4.5625 -0.34375 4.5625 -0.78125 L 4.546875 -2.625 C 4.546875 -3.65625 5.234375 -4.21875 5.875 -4.21875 C 6.5 -4.21875 6.625 -3.703125 6.625 -3.125 L 6.640625 -0.796875 C 6.640625 -0.359375 6.53125 -0.34375 5.859375 -0.34375 L 5.859375 -0.03125 C 6.203125 -0.046875 6.71875 -0.078125 6.984375 -0.078125 C 7.25 -0.078125 7.765625 -0.0625 8.109375 -0.046875 L 8.109375 -0.359375 C 7.59375 -0.359375 7.34375 -0.359375 7.328125 -0.65625 L 7.3125 -2.5625 C 7.3125 -3.421875 7.3125 -3.71875 6.984375 -4.078125 C 6.84375 -4.25 6.515625 -4.4375 5.9375 -4.4375 C 5.109375 -4.4375 4.671875 -3.84375 4.515625 -3.453125 C 4.359375 -4.328125 3.625 -4.421875 3.171875 -4.421875 C 2.4375 -4.421875 1.96875 -4 1.703125 -3.375 L 1.6875 -4.421875 L 0.28125 -4.296875 L 0.28125 -3.984375 C 0.984375 -3.984375 1.078125 -3.921875 1.078125 -3.421875 Z M 1.078125 -3.421875 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-2">
+<path style="stroke:none;" d="M 1.703125 -3.765625 L 1.6875 -4.421875 L 0.25 -4.296875 L 0.25 -3.984375 C 0.953125 -3.984375 1.046875 -3.921875 1.046875 -3.484375 L 1.0625 1.171875 C 1.078125 1.625 0.96875 1.625 0.296875 1.625 L 0.296875 1.9375 C 0.640625 1.921875 1.15625 1.90625 1.40625 1.890625 C 1.6875 1.890625 2.1875 1.90625 2.53125 1.921875 L 2.53125 1.609375 C 1.875 1.609375 1.765625 1.609375 1.75 1.15625 L 1.75 -0.609375 C 1.796875 -0.4375 2.21875 0.09375 2.96875 0.09375 C 4.15625 0.078125 5.1875 -0.90625 5.171875 -2.1875 C 5.171875 -3.453125 4.203125 -4.4375 3.078125 -4.421875 C 2.296875 -4.421875 1.875 -3.984375 1.703125 -3.765625 Z M 1.75 -1.15625 L 1.734375 -3.375 C 2.015625 -3.890625 2.484375 -4.171875 3 -4.171875 C 3.734375 -4.171875 4.34375 -3.3125 4.34375 -2.1875 C 4.359375 -0.984375 3.671875 -0.125 2.9375 -0.125 C 2.53125 -0.125 2.15625 -0.328125 1.890625 -0.734375 C 1.75 -0.9375 1.75 -0.953125 1.75 -1.15625 Z M 1.75 -1.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-3">
+<path style="stroke:none;" d="M 4.671875 -2.171875 C 4.671875 -3.4375 3.671875 -4.484375 2.46875 -4.484375 C 1.21875 -4.46875 0.265625 -3.375 0.265625 -2.140625 C 0.28125 -0.84375 1.3125 0.09375 2.484375 0.09375 C 3.6875 0.09375 4.6875 -0.90625 4.671875 -2.171875 Z M 2.5 -0.15625 C 2.0625 -0.15625 1.625 -0.359375 1.359375 -0.828125 C 1.109375 -1.25 1.09375 -1.859375 1.09375 -2.21875 C 1.09375 -2.609375 1.09375 -3.140625 1.328125 -3.59375 C 1.578125 -4.046875 2.046875 -4.265625 2.453125 -4.265625 C 2.890625 -4.265625 3.3125 -4.046875 3.59375 -3.609375 C 3.859375 -3.1875 3.859375 -2.609375 3.859375 -2.234375 C 3.859375 -1.875 3.859375 -1.328125 3.65625 -0.890625 C 3.421875 -0.4375 2.984375 -0.15625 2.5 -0.15625 Z M 2.5 -0.15625 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-4">
+<path style="stroke:none;" d="M 1.65625 -3.328125 L 1.640625 -4.421875 L 0.25 -4.296875 L 0.25 -3.984375 C 0.953125 -3.984375 1.046875 -3.921875 1.046875 -3.421875 L 1.0625 -0.75 C 1.0625 -0.3125 0.953125 -0.3125 0.28125 -0.3125 L 0.28125 0 C 0.671875 -0.015625 1.140625 -0.03125 1.421875 -0.046875 C 1.8125 -0.046875 2.28125 -0.046875 2.6875 -0.015625 L 2.6875 -0.328125 L 2.46875 -0.328125 C 1.734375 -0.328125 1.71875 -0.4375 1.71875 -0.796875 L 1.703125 -2.328125 C 1.703125 -3.3125 2.109375 -4.203125 2.859375 -4.203125 C 2.921875 -4.203125 2.953125 -4.203125 2.96875 -4.1875 C 2.9375 -4.1875 2.734375 -4.0625 2.75 -3.796875 C 2.75 -3.53125 2.96875 -3.375 3.1875 -3.375 C 3.359375 -3.375 3.609375 -3.5 3.609375 -3.8125 C 3.59375 -4.125 3.28125 -4.421875 2.859375 -4.421875 C 2.125 -4.421875 1.78125 -3.75 1.65625 -3.328125 Z M 1.65625 -3.328125 "/>
+</symbol>
+<symbol overflow="visible" id="glyph7-5">
+<path style="stroke:none;" d="M 1.6875 -4 L 3.125 -4 L 3.125 -4.3125 L 1.6875 -4.3125 L 1.6875 -6.140625 L 1.4375 -6.140625 C 1.4375 -5.328125 1.140625 -4.25 0.15625 -4.203125 L 0.15625 -3.984375 L 1 -3.984375 L 1.03125 -1.234375 C 1.03125 -0.015625 1.96875 0.09375 2.328125 0.09375 C 3.03125 0.09375 3.3125 -0.609375 3.3125 -1.25 L 3.296875 -1.8125 L 3.046875 -1.8125 L 3.0625 -1.265625 C 3.0625 -0.53125 2.765625 -0.15625 2.390625 -0.15625 C 1.71875 -0.15625 1.71875 -1.0625 1.71875 -1.234375 Z M 1.6875 -4 "/>
+</symbol>
+</g>
+</defs>
+<g id="surface1">
+<path style="fill:none;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,100%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -163.716344 -368.509438 L 702.307094 -368.509438 M -163.716344 -340.161781 L 702.307094 -340.161781 M -163.716344 -311.814125 L 702.307094 -311.814125 M -163.716344 -283.466469 L 702.307094 -283.466469 M -163.716344 -255.122719 L 702.307094 -255.122719 M -163.716344 -226.775063 L 702.307094 -226.775063 M -163.716344 -198.427406 L 702.307094 -198.427406 M -163.716344 -170.07975 L 702.307094 -170.07975 M -163.716344 -141.732094 L 702.307094 -141.732094 M -163.716344 -113.388344 L 702.307094 -113.388344 M -163.716344 -85.040688 L 702.307094 -85.040688 M -163.716344 -56.693031 L 702.307094 -56.693031 M -163.716344 -28.345375 L 702.307094 -28.345375 M -163.716344 -0.001625 L 702.307094 -0.001625 M -141.735875 -368.513344 L -141.735875 4.291344 M -113.388219 -368.513344 L -113.388219 4.291344 M -85.040562 -368.513344 L -85.040562 4.291344 M -56.692906 -368.513344 L -56.692906 4.291344 M -28.34525 -368.513344 L -28.34525 4.291344 M -0.0015 -368.513344 L -0.0015 4.291344 M 28.346156 -368.513344 L 28.346156 4.291344 M 56.693813 -368.513344 L 56.693813 4.291344 M 85.041469 -368.513344 L 85.041469 4.291344 M 113.389125 -368.513344 L 113.389125 4.291344 M 141.732875 -368.513344 L 141.732875 4.291344 M 170.080531 -368.513344 L 170.080531 4.291344 M 198.428188 -368.513344 L 198.428188 4.291344 M 226.775844 -368.513344 L 226.775844 4.291344 M 255.119594 -368.513344 L 255.119594 4.291344 M 283.46725 -368.513344 L 283.46725 4.291344 M 311.814906 -368.513344 L 311.814906 4.291344 M 340.162563 -368.513344 L 340.162563 4.291344 M 368.510219 -368.513344 L 368.510219 4.291344 M 396.853969 -368.513344 L 396.853969 4.291344 M 425.201625 -368.513344 L 425.201625 4.291344 M 453.549281 -368.513344 L 453.549281 4.291344 M 481.896938 -368.513344 L 481.896938 4.291344 M 510.240688 -368.513344 L 510.240688 4.291344 M 538.588344 -368.513344 L 538.588344 4.291344 M 566.936 -368.513344 L 566.936 4.291344 M 595.283656 -368.513344 L 595.283656 4.291344 M 623.631313 -368.513344 L 623.631313 4.291344 M 651.975063 -368.513344 L 651.975063 4.291344 M 680.322719 -368.513344 L 680.322719 4.291344 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -29.169469 -68.962563 L -64.368687 -113.388344 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00105379 2.335124 L 5.502704 0.000694657 L -0.000226037 -2.33372 Z M -0.00105379 2.335124 " transform="matrix(0.62178,-0.78468,-0.78468,-0.62178,135.14548,73.85345)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 29.170375 -68.962563 L 64.369594 -113.388344 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00163496 2.336068 L 5.502142 -0.00140412 L -0.00161597 -2.335833 Z M 0.00163496 2.336068 " transform="matrix(-0.62178,-0.78468,-0.78468,0.62178,193.48252,73.85345)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 399.068813 -101.196938 L 355.439906 -141.732094 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00186868 2.335793 L 5.501744 -0.00155773 L -0.000743231 -2.336213 Z M -0.00186868 2.335793 " transform="matrix(0.73593,-0.68375,-0.68375,-0.73593,563.38363,106.08489)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 451.334438 -101.196938 L 494.963344 -141.732094 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.0000152292 2.336918 L 5.502503 0.00226242 L -0.00111022 -2.335088 Z M 0.0000152292 2.336918 " transform="matrix(-0.73593,-0.68375,-0.68375,0.73593,615.64866,106.08489)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 399.068813 -271.275063 L 355.439906 -311.814125 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.00000872922 2.337795 L 5.503604 0.000444162 L 0.00111672 -2.334211 Z M -0.00000872922 2.337795 " transform="matrix(0.73593,-0.68375,-0.68375,-0.73593,563.38363,276.16576)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 451.334438 -271.275063 L 494.963344 -311.814125 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 0.00187518 2.334916 L 5.504363 0.000260521 L 0.000749731 -2.33709 Z M 0.00187518 2.334916 " transform="matrix(-0.73593,-0.68375,-0.68375,0.73593,615.64866,276.16576)"/>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -74.189 -64.0485 L 74.186 -64.0485 L 74.186 -0.200844 L -74.189 -0.200844 Z M 74.186 -28.0485 L -74.189 -28.0485 M 74.186 -35.091469 L -74.189 -35.091469 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="130.261" y="15.527"/>
+ <use xlink:href="#glyph0-0" x="138.00991" y="15.527"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="145.759" y="15.527"/>
+ <use xlink:href="#glyph1-1" x="148.52661" y="15.527"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="153.782878" y="15.527"/>
+ <use xlink:href="#glyph1-3" x="157.657333" y="15.527"/>
+ <use xlink:href="#glyph1-4" x="162.084713" y="15.527"/>
+ <use xlink:href="#glyph1-5" x="165.987063" y="15.527"/>
+ <use xlink:href="#glyph1-6" x="169.031634" y="15.527"/>
+ <use xlink:href="#glyph1-7" x="174.012934" y="15.527"/>
+ <use xlink:href="#glyph1-3" x="178.440313" y="15.527"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="182.87" y="15.527"/>
+ <use xlink:href="#glyph0-1" x="190.61891" y="15.527"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-0" x="123.384" y="27.482"/>
+ <use xlink:href="#glyph2-1" x="132.045484" y="27.482"/>
+ <use xlink:href="#glyph2-2" x="138.41059" y="27.482"/>
+ <use xlink:href="#glyph2-3" x="142.929625" y="27.482"/>
+ <use xlink:href="#glyph2-4" x="147.3849" y="27.482"/>
+ <use xlink:href="#glyph2-5" x="152.103187" y="27.482"/>
+ <use xlink:href="#glyph2-6" x="157.67228" y="27.482"/>
+ <use xlink:href="#glyph2-3" x="162.764165" y="27.482"/>
+ <use xlink:href="#glyph2-7" x="167.21944" y="27.482"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-5" x="173.471968" y="27.482"/>
+ <use xlink:href="#glyph2-6" x="179.041061" y="27.482"/>
+ <use xlink:href="#glyph2-3" x="184.132946" y="27.482"/>
+ <use xlink:href="#glyph2-8" x="188.588221" y="27.482"/>
+ <use xlink:href="#glyph2-4" x="194.316716" y="27.482"/>
+ <use xlink:href="#glyph2-9" x="199.035003" y="27.482"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-0" x="93.448" y="50.97"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-1" x="104.403871" y="50.97"/>
+ <use xlink:href="#glyph3-2" x="111.533108" y="50.97"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-3" x="115.226244" y="50.97"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-4" x="119.300947" y="50.97"/>
+ <use xlink:href="#glyph3-5" x="124.392832" y="50.97"/>
+ <use xlink:href="#glyph3-3" x="127.702408" y="50.97"/>
+ <use xlink:href="#glyph3-6" x="132.285204" y="50.97"/>
+ <use xlink:href="#glyph3-2" x="139.042835" y="50.97"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-7" x="142.735971" y="50.97"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-8" x="147.319763" y="50.97"/>
+ <use xlink:href="#glyph3-9" x="152.411648" y="50.97"/>
+ <use xlink:href="#glyph3-10" x="157.758576" y="50.97"/>
+ <use xlink:href="#glyph3-5" x="162.341372" y="50.97"/>
+ <use xlink:href="#glyph3-11" x="165.650947" y="50.97"/>
+ <use xlink:href="#glyph3-12" x="173.056148" y="50.97"/>
+ <use xlink:href="#glyph3-13" x="177.129855" y="50.97"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-0" x="93.448" y="62.925"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-1" x="104.403871" y="62.925"/>
+ <use xlink:href="#glyph3-2" x="111.533108" y="62.925"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-3" x="115.226244" y="62.925"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-4" x="119.300947" y="62.925"/>
+ <use xlink:href="#glyph3-5" x="124.392832" y="62.925"/>
+ <use xlink:href="#glyph3-3" x="127.702408" y="62.925"/>
+ <use xlink:href="#glyph3-6" x="132.285204" y="62.925"/>
+ <use xlink:href="#glyph3-2" x="139.042835" y="62.925"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-7" x="142.735971" y="62.925"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph3-8" x="147.319763" y="62.925"/>
+ <use xlink:href="#glyph3-9" x="152.411648" y="62.925"/>
+ <use xlink:href="#glyph3-10" x="157.758576" y="62.925"/>
+ <use xlink:href="#glyph3-5" x="162.341372" y="62.925"/>
+ <use xlink:href="#glyph3-14" x="165.650947" y="62.925"/>
+ <use xlink:href="#glyph3-12" x="172.663621" y="62.925"/>
+ <use xlink:href="#glyph3-13" x="176.737329" y="62.925"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -159.228062 -165.396156 L -10.853062 -165.396156 L -10.853062 -113.587563 L -159.228062 -113.587563 Z M -10.853062 -129.400063 L -159.228062 -129.400063 M -10.853062 -136.439125 L -159.228062 -136.439125 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-10" x="34.91" y="128.829"/>
+ <use xlink:href="#glyph2-8" x="43.184936" y="128.829"/>
+ <use xlink:href="#glyph2-11" x="48.913431" y="128.829"/>
+ <use xlink:href="#glyph2-6" x="55.278536" y="128.829"/>
+ <use xlink:href="#glyph2-4" x="60.370421" y="128.829"/>
+ <use xlink:href="#glyph2-12" x="65.088708" y="128.829"/>
+ <use xlink:href="#glyph2-3" x="70.339994" y="128.829"/>
+ <use xlink:href="#glyph2-12" x="74.795269" y="128.829"/>
+ <use xlink:href="#glyph2-7" x="80.046556" y="128.829"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-5" x="86.299083" y="128.829"/>
+ <use xlink:href="#glyph2-6" x="91.868177" y="128.829"/>
+ <use xlink:href="#glyph2-3" x="96.960062" y="128.829"/>
+ <use xlink:href="#glyph2-8" x="101.415336" y="128.829"/>
+ <use xlink:href="#glyph2-4" x="107.143831" y="128.829"/>
+ <use xlink:href="#glyph2-9" x="111.862119" y="128.829"/>
+ <use xlink:href="#glyph2-13" x="117.908421" y="128.829"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="8.409" y="152.318"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-9" x="19.475456" y="152.318"/>
+ <use xlink:href="#glyph1-4" x="26.670446" y="152.318"/>
+ <use xlink:href="#glyph1-3" x="30.572796" y="152.318"/>
+ <use xlink:href="#glyph1-6" x="35.000176" y="152.318"/>
+ <use xlink:href="#glyph1-2" x="39.981476" y="152.318"/>
+ <use xlink:href="#glyph1-3" x="43.855931" y="152.318"/>
+ <use xlink:href="#glyph1-10" x="48.28331" y="152.318"/>
+ <use xlink:href="#glyph1-4" x="55.063856" y="152.318"/>
+ <use xlink:href="#glyph1-11" x="58.966206" y="152.318"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-12" x="64.226459" y="152.318"/>
+ <use xlink:href="#glyph1-13" x="69.76168" y="152.318"/>
+ <use xlink:href="#glyph1-7" x="75.2969" y="152.318"/>
+ <use xlink:href="#glyph1-2" x="79.72428" y="152.318"/>
+ <use xlink:href="#glyph1-14" x="83.598735" y="152.318"/>
+ <use xlink:href="#glyph1-15" x="91.070685" y="152.318"/>
+ <use xlink:href="#glyph1-16" x="94.94514" y="152.318"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="8.409" y="164.273"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-9" x="19.475456" y="164.273"/>
+ <use xlink:href="#glyph1-4" x="26.670446" y="164.273"/>
+ <use xlink:href="#glyph1-3" x="30.572796" y="164.273"/>
+ <use xlink:href="#glyph1-6" x="35.000176" y="164.273"/>
+ <use xlink:href="#glyph1-2" x="39.981476" y="164.273"/>
+ <use xlink:href="#glyph1-3" x="43.855931" y="164.273"/>
+ <use xlink:href="#glyph1-10" x="48.28331" y="164.273"/>
+ <use xlink:href="#glyph1-4" x="55.063856" y="164.273"/>
+ <use xlink:href="#glyph1-11" x="58.966206" y="164.273"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-12" x="64.226459" y="164.273"/>
+ <use xlink:href="#glyph1-13" x="69.76168" y="164.273"/>
+ <use xlink:href="#glyph1-7" x="75.2969" y="164.273"/>
+ <use xlink:href="#glyph1-2" x="79.72428" y="164.273"/>
+ <use xlink:href="#glyph1-17" x="83.598735" y="164.273"/>
+ <use xlink:href="#glyph1-15" x="90.655244" y="164.273"/>
+ <use xlink:href="#glyph1-16" x="94.529699" y="164.273"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10.853969 -165.396156 L 159.228969 -165.396156 L 159.228969 -113.587563 L 10.853969 -113.587563 Z M 159.228969 -129.400063 L 10.853969 -129.400063 M 159.228969 -136.439125 L 10.853969 -136.439125 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-10" x="204.989" y="128.829"/>
+ <use xlink:href="#glyph2-8" x="213.263936" y="128.829"/>
+ <use xlink:href="#glyph2-11" x="218.992431" y="128.829"/>
+ <use xlink:href="#glyph2-6" x="225.357536" y="128.829"/>
+ <use xlink:href="#glyph2-4" x="230.449421" y="128.829"/>
+ <use xlink:href="#glyph2-12" x="235.167708" y="128.829"/>
+ <use xlink:href="#glyph2-3" x="240.418994" y="128.829"/>
+ <use xlink:href="#glyph2-12" x="244.874269" y="128.829"/>
+ <use xlink:href="#glyph2-7" x="250.125556" y="128.829"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-5" x="256.378083" y="128.829"/>
+ <use xlink:href="#glyph2-6" x="261.947177" y="128.829"/>
+ <use xlink:href="#glyph2-3" x="267.039062" y="128.829"/>
+ <use xlink:href="#glyph2-8" x="271.494336" y="128.829"/>
+ <use xlink:href="#glyph2-4" x="277.222831" y="128.829"/>
+ <use xlink:href="#glyph2-9" x="281.941119" y="128.829"/>
+ <use xlink:href="#glyph2-14" x="287.987421" y="128.829"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="178.488" y="152.318"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-9" x="189.554456" y="152.318"/>
+ <use xlink:href="#glyph1-4" x="196.749446" y="152.318"/>
+ <use xlink:href="#glyph1-3" x="200.651796" y="152.318"/>
+ <use xlink:href="#glyph1-6" x="205.079176" y="152.318"/>
+ <use xlink:href="#glyph1-2" x="210.060476" y="152.318"/>
+ <use xlink:href="#glyph1-3" x="213.934931" y="152.318"/>
+ <use xlink:href="#glyph1-10" x="218.36231" y="152.318"/>
+ <use xlink:href="#glyph1-4" x="225.142856" y="152.318"/>
+ <use xlink:href="#glyph1-11" x="229.045206" y="152.318"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-12" x="234.305459" y="152.318"/>
+ <use xlink:href="#glyph1-13" x="239.84068" y="152.318"/>
+ <use xlink:href="#glyph1-7" x="245.3759" y="152.318"/>
+ <use xlink:href="#glyph1-2" x="249.80328" y="152.318"/>
+ <use xlink:href="#glyph1-14" x="253.677735" y="152.318"/>
+ <use xlink:href="#glyph1-15" x="261.149685" y="152.318"/>
+ <use xlink:href="#glyph1-16" x="265.02414" y="152.318"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-8" x="178.488" y="164.273"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-9" x="189.554456" y="164.273"/>
+ <use xlink:href="#glyph1-4" x="196.749446" y="164.273"/>
+ <use xlink:href="#glyph1-3" x="200.651796" y="164.273"/>
+ <use xlink:href="#glyph1-6" x="205.079176" y="164.273"/>
+ <use xlink:href="#glyph1-2" x="210.060476" y="164.273"/>
+ <use xlink:href="#glyph1-3" x="213.934931" y="164.273"/>
+ <use xlink:href="#glyph1-10" x="218.36231" y="164.273"/>
+ <use xlink:href="#glyph1-4" x="225.142856" y="164.273"/>
+ <use xlink:href="#glyph1-11" x="229.045206" y="164.273"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-12" x="234.305459" y="164.273"/>
+ <use xlink:href="#glyph1-13" x="239.84068" y="164.273"/>
+ <use xlink:href="#glyph1-7" x="245.3759" y="164.273"/>
+ <use xlink:href="#glyph1-2" x="249.80328" y="164.273"/>
+ <use xlink:href="#glyph1-17" x="253.677735" y="164.273"/>
+ <use xlink:href="#glyph1-15" x="260.734244" y="164.273"/>
+ <use xlink:href="#glyph1-16" x="264.608699" y="164.273"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 351.014125 -96.884438 L 499.389125 -96.884438 L 499.389125 -56.89225 L 351.014125 -56.89225 Z M 499.389125 -82.806313 L 351.014125 -82.806313 M 499.389125 -89.845375 L 351.014125 -89.845375 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="555.458" y="72.22"/>
+ <use xlink:href="#glyph0-0" x="563.20691" y="72.22"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="570.956" y="72.22"/>
+ <use xlink:href="#glyph1-1" x="573.72361" y="72.22"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="578.979878" y="72.22"/>
+ <use xlink:href="#glyph1-3" x="582.854333" y="72.22"/>
+ <use xlink:href="#glyph1-4" x="587.281713" y="72.22"/>
+ <use xlink:href="#glyph1-5" x="591.184063" y="72.22"/>
+ <use xlink:href="#glyph1-6" x="594.228634" y="72.22"/>
+ <use xlink:href="#glyph1-7" x="599.209934" y="72.22"/>
+ <use xlink:href="#glyph1-3" x="603.637313" y="72.22"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="608.066" y="72.22"/>
+ <use xlink:href="#glyph0-1" x="615.81491" y="72.22"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-0" x="542.825" y="84.175"/>
+ <use xlink:href="#glyph2-1" x="551.486484" y="84.175"/>
+ <use xlink:href="#glyph2-2" x="557.85159" y="84.175"/>
+ <use xlink:href="#glyph2-3" x="562.370625" y="84.175"/>
+ <use xlink:href="#glyph2-4" x="566.8259" y="84.175"/>
+ <use xlink:href="#glyph2-5" x="571.544187" y="84.175"/>
+ <use xlink:href="#glyph2-6" x="577.11328" y="84.175"/>
+ <use xlink:href="#glyph2-3" x="582.205165" y="84.175"/>
+ <use xlink:href="#glyph2-15" x="586.66044" y="84.175"/>
+ <use xlink:href="#glyph2-4" x="594.49204" y="84.175"/>
+ <use xlink:href="#glyph2-8" x="599.210327" y="84.175"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-16" x="605.257625" y="84.175"/>
+ <use xlink:href="#glyph2-17" x="611.622731" y="84.175"/>
+ <use xlink:href="#glyph2-6" x="617.987836" y="84.175"/>
+ <use xlink:href="#glyph2-3" x="623.079721" y="84.175"/>
+ <use xlink:href="#glyph2-0" x="627.534995" y="84.175"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 265.975063 -169.970375 L 414.350063 -169.970375 L 414.350063 -141.935219 L 265.975063 -141.935219 Z M 414.350063 -155.89225 L 265.975063 -155.89225 M 414.350063 -162.931313 L 265.975063 -162.931313 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-15" x="476.839" y="157.259"/>
+ <use xlink:href="#glyph2-4" x="484.6706" y="157.259"/>
+ <use xlink:href="#glyph2-8" x="489.388887" y="157.259"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-16" x="495.436185" y="157.259"/>
+ <use xlink:href="#glyph2-17" x="501.801291" y="157.259"/>
+ <use xlink:href="#glyph2-6" x="508.166396" y="157.259"/>
+ <use xlink:href="#glyph2-3" x="513.258281" y="157.259"/>
+ <use xlink:href="#glyph2-0" x="517.713555" y="157.259"/>
+ <use xlink:href="#glyph2-14" x="526.37504" y="157.259"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 436.053188 -169.970375 L 584.432094 -169.970375 L 584.432094 -141.935219 L 436.053188 -141.935219 Z M 584.432094 -155.89225 L 436.053188 -155.89225 M 584.432094 -162.931313 L 436.053188 -162.931313 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-15" x="646.918" y="157.259"/>
+ <use xlink:href="#glyph2-4" x="654.7496" y="157.259"/>
+ <use xlink:href="#glyph2-8" x="659.467887" y="157.259"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-16" x="665.515185" y="157.259"/>
+ <use xlink:href="#glyph2-17" x="671.880291" y="157.259"/>
+ <use xlink:href="#glyph2-6" x="678.245396" y="157.259"/>
+ <use xlink:href="#glyph2-3" x="683.337281" y="157.259"/>
+ <use xlink:href="#glyph2-0" x="687.792555" y="157.259"/>
+ <use xlink:href="#glyph2-13" x="696.45404" y="157.259"/>
+</g>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 159.428188 -144.294594 L 265.295375 -151.138344 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -2.192738 -2.391199 L 0.200112 0.00189412 L -2.192729 2.390847 " transform="matrix(0.9982,0.06453,0.06453,-0.9982,429.60872,156.02804)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph4-0" x="338.601" y="146.224"/>
+ <use xlink:href="#glyph4-0" x="346.335962" y="146.724037"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-0" x="354.071104" y="147.224086"/>
+ <use xlink:href="#glyph5-1" x="356.833732" y="147.40268"/>
+ <use xlink:href="#glyph5-2" x="362.358989" y="147.759868"/>
+ <use xlink:href="#glyph5-3" x="366.281166" y="148.013422"/>
+ <use xlink:href="#glyph5-4" x="370.148647" y="148.263441"/>
+ <use xlink:href="#glyph5-1" x="375.120981" y="148.584884"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph5-3" x="380.367787" y="148.924071"/>
+ <use xlink:href="#glyph5-0" x="384.235269" y="149.17409"/>
+ <use xlink:href="#glyph5-4" x="386.997897" y="149.352683"/>
+ <use xlink:href="#glyph5-3" x="391.970231" y="149.674127"/>
+ <use xlink:href="#glyph5-5" x="395.837712" y="149.924145"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph4-1" x="400.258816" y="150.209954"/>
+ <use xlink:href="#glyph4-1" x="407.993778" y="150.709991"/>
+</g>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -56.692906 -165.595375 L -56.692906 -193.943031 L 510.240688 -193.943031 L 510.240688 -170.650063 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -2.190439 -2.392649 L 0.200186 0.0018825 L -2.190439 2.392507 " transform="matrix(0,-1,-1,0,674.55657,175.54003)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="352.453" y="194.92"/>
+ <use xlink:href="#glyph0-0" x="360.20191" y="194.92"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="367.95" y="194.92"/>
+ <use xlink:href="#glyph1-1" x="370.71761" y="194.92"/>
+ <use xlink:href="#glyph1-18" x="376.252831" y="194.92"/>
+ <use xlink:href="#glyph1-2" x="380.18208" y="194.92"/>
+ <use xlink:href="#glyph1-6" x="384.056535" y="194.92"/>
+ <use xlink:href="#glyph1-1" x="389.037835" y="194.92"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="394.294103" y="194.92"/>
+ <use xlink:href="#glyph1-0" x="398.168558" y="194.92"/>
+ <use xlink:href="#glyph1-6" x="400.936169" y="194.92"/>
+ <use xlink:href="#glyph1-2" x="405.917469" y="194.92"/>
+ <use xlink:href="#glyph1-3" x="409.791924" y="194.92"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="414.221" y="194.92"/>
+ <use xlink:href="#glyph0-1" x="421.96991" y="194.92"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 351.014125 -266.966469 L 499.389125 -266.966469 L 499.389125 -226.974281 L 351.014125 -226.974281 Z M 499.389125 -252.888344 L 351.014125 -252.888344 M 499.389125 -259.927406 L 351.014125 -259.927406 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="555.458" y="242.298"/>
+ <use xlink:href="#glyph0-0" x="563.20691" y="242.298"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="570.956" y="242.298"/>
+ <use xlink:href="#glyph1-1" x="573.72361" y="242.298"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="578.979878" y="242.298"/>
+ <use xlink:href="#glyph1-3" x="582.854333" y="242.298"/>
+ <use xlink:href="#glyph1-4" x="587.281713" y="242.298"/>
+ <use xlink:href="#glyph1-5" x="591.184063" y="242.298"/>
+ <use xlink:href="#glyph1-6" x="594.228634" y="242.298"/>
+ <use xlink:href="#glyph1-7" x="599.209934" y="242.298"/>
+ <use xlink:href="#glyph1-3" x="603.637313" y="242.298"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="608.066" y="242.298"/>
+ <use xlink:href="#glyph0-1" x="615.81491" y="242.298"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-0" x="543.08" y="254.253"/>
+ <use xlink:href="#glyph2-1" x="551.741484" y="254.253"/>
+ <use xlink:href="#glyph2-2" x="558.10659" y="254.253"/>
+ <use xlink:href="#glyph2-3" x="562.625625" y="254.253"/>
+ <use xlink:href="#glyph2-4" x="567.0809" y="254.253"/>
+ <use xlink:href="#glyph2-5" x="571.799187" y="254.253"/>
+ <use xlink:href="#glyph2-6" x="577.36828" y="254.253"/>
+ <use xlink:href="#glyph2-3" x="582.460165" y="254.253"/>
+ <use xlink:href="#glyph2-15" x="586.91544" y="254.253"/>
+ <use xlink:href="#glyph2-4" x="594.74704" y="254.253"/>
+ <use xlink:href="#glyph2-8" x="599.465327" y="254.253"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-16" x="605.512625" y="254.253"/>
+ <use xlink:href="#glyph2-17" x="611.877731" y="254.253"/>
+ <use xlink:href="#glyph2-6" x="618.242836" y="254.253"/>
+ <use xlink:href="#glyph2-3" x="623.334721" y="254.253"/>
+ <use xlink:href="#glyph2-18" x="627.789995" y="254.253"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 265.975063 -340.052406 L 414.350063 -340.052406 L 414.350063 -312.013344 L 265.975063 -312.013344 Z M 414.350063 -325.974281 L 265.975063 -325.974281 M 414.350063 -333.013344 L 265.975063 -333.013344 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-15" x="477.095" y="327.338"/>
+ <use xlink:href="#glyph2-4" x="484.9266" y="327.338"/>
+ <use xlink:href="#glyph2-8" x="489.644887" y="327.338"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-16" x="495.692185" y="327.338"/>
+ <use xlink:href="#glyph2-17" x="502.057291" y="327.338"/>
+ <use xlink:href="#glyph2-6" x="508.422396" y="327.338"/>
+ <use xlink:href="#glyph2-3" x="513.514281" y="327.338"/>
+ <use xlink:href="#glyph2-18" x="517.969555" y="327.338"/>
+ <use xlink:href="#glyph2-14" x="526.119958" y="327.338"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 436.053188 -340.052406 L 584.432094 -340.052406 L 584.432094 -312.013344 L 436.053188 -312.013344 Z M 584.432094 -325.974281 L 436.053188 -325.974281 M 584.432094 -333.013344 L 436.053188 -333.013344 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-15" x="647.174" y="327.338"/>
+ <use xlink:href="#glyph2-4" x="655.0056" y="327.338"/>
+ <use xlink:href="#glyph2-8" x="659.723887" y="327.338"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-16" x="665.771185" y="327.338"/>
+ <use xlink:href="#glyph2-17" x="672.136291" y="327.338"/>
+ <use xlink:href="#glyph2-6" x="678.501396" y="327.338"/>
+ <use xlink:href="#glyph2-3" x="683.593281" y="327.338"/>
+ <use xlink:href="#glyph2-18" x="688.048555" y="327.338"/>
+ <use xlink:href="#glyph2-13" x="696.198958" y="327.338"/>
+</g>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 85.041469 -165.595375 L 85.041469 -326.032875 L 265.295375 -326.032875 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -2.189881 -2.3906 L 0.200744 0.000025 L -2.189881 2.39065 " transform="matrix(1,0,0,-1,429.60785,330.9219)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="210.72" y="327.009"/>
+ <use xlink:href="#glyph0-0" x="218.46891" y="327.009"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="226.218" y="327.009"/>
+ <use xlink:href="#glyph1-1" x="228.98561" y="327.009"/>
+ <use xlink:href="#glyph1-18" x="234.520831" y="327.009"/>
+ <use xlink:href="#glyph1-2" x="238.45008" y="327.009"/>
+ <use xlink:href="#glyph1-6" x="242.324535" y="327.009"/>
+ <use xlink:href="#glyph1-1" x="247.305835" y="327.009"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="252.562103" y="327.009"/>
+ <use xlink:href="#glyph1-0" x="256.436558" y="327.009"/>
+ <use xlink:href="#glyph1-6" x="259.204169" y="327.009"/>
+ <use xlink:href="#glyph1-2" x="264.185469" y="327.009"/>
+ <use xlink:href="#glyph1-3" x="268.059924" y="327.009"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="272.489" y="327.009"/>
+ <use xlink:href="#glyph0-1" x="280.23791" y="327.009"/>
+</g>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M -113.388219 -165.595375 L -113.388219 -364.025063 L 510.240688 -364.025063 L 510.240688 -340.732094 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -2.19161 -2.392649 L 0.199015 0.0018825 L -2.19161 2.392507 " transform="matrix(0,-1,-1,0,674.55657,345.62089)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="295.76" y="364.998"/>
+ <use xlink:href="#glyph0-0" x="303.50891" y="364.998"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="311.257" y="364.998"/>
+ <use xlink:href="#glyph1-1" x="314.02461" y="364.998"/>
+ <use xlink:href="#glyph1-18" x="319.559831" y="364.998"/>
+ <use xlink:href="#glyph1-2" x="323.48908" y="364.998"/>
+ <use xlink:href="#glyph1-6" x="327.363535" y="364.998"/>
+ <use xlink:href="#glyph1-1" x="332.344835" y="364.998"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-2" x="337.601103" y="364.998"/>
+ <use xlink:href="#glyph1-0" x="341.475558" y="364.998"/>
+ <use xlink:href="#glyph1-6" x="344.243169" y="364.998"/>
+ <use xlink:href="#glyph1-2" x="349.224469" y="364.998"/>
+ <use xlink:href="#glyph1-3" x="353.098924" y="364.998"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="357.528" y="364.998"/>
+ <use xlink:href="#glyph0-1" x="365.27691" y="364.998"/>
+</g>
+<path style="fill-rule:nonzero;fill:rgb(100%,98.979187%,80.000305%);fill-opacity:1;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M 549.443813 -42.411781 L 697.818813 -42.411781 L 697.818813 -14.372719 L 549.443813 -14.372719 Z M 697.818813 -28.32975 L 549.443813 -28.32975 M 697.818813 -35.368813 L 549.443813 -35.368813 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-10" x="772.74" y="29.7"/>
+ <use xlink:href="#glyph2-19" x="781.014936" y="29.7"/>
+ <use xlink:href="#glyph2-20" x="784.19699" y="29.7"/>
+ <use xlink:href="#glyph2-12" x="787.379044" y="29.7"/>
+ <use xlink:href="#glyph2-11" x="792.630331" y="29.7"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph2-3" x="798.676633" y="29.7"/>
+</g>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 549.244594 -28.833656 L 74.869594 -31.677406 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -2.191832 -2.39074 L 0.197472 0.00122162 L -2.190584 2.390502 " transform="matrix(-1,0.00598,0.00598,1,239.18184,36.56791)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-0" x="445.776" y="29.869994"/>
+ <use xlink:href="#glyph6-0" x="453.52491" y="29.823656"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph7-0" x="461.273" y="29.777322"/>
+ <use xlink:href="#glyph7-1" x="464.04061" y="29.760772"/>
+ <use xlink:href="#glyph7-2" x="472.342445" y="29.711127"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph7-3" x="478.156618" y="29.676358"/>
+ <use xlink:href="#glyph7-4" x="483.137918" y="29.64657"/>
+ <use xlink:href="#glyph7-5" x="487.040269" y="29.623234"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph6-1" x="490.912" y="29.600081"/>
+ <use xlink:href="#glyph6-1" x="498.66091" y="29.553742"/>
+</g>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 623.631313 -42.611 L 623.631313 -76.888344 L 500.068813 -76.888344 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -2.190229 -2.391551 L 0.200396 -0.00092625 L -2.190229 2.389699 " transform="matrix(-1,0,0,1,664.38399,81.77827)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="757.619" y="76.32"/>
+ <use xlink:href="#glyph0-0" x="765.36791" y="76.32"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="773.117" y="76.32"/>
+ <use xlink:href="#glyph1-19" x="775.88461" y="76.32"/>
+ <use xlink:href="#glyph1-20" x="784.186445" y="76.32"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="790.000618" y="76.32"/>
+ <use xlink:href="#glyph1-4" x="794.981918" y="76.32"/>
+ <use xlink:href="#glyph1-2" x="798.884269" y="76.32"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="802.755" y="76.32"/>
+ <use xlink:href="#glyph0-1" x="810.50391" y="76.32"/>
+</g>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-dasharray:2.98883,2.98883;stroke-miterlimit:10;" d="M 623.631313 -42.611 L 623.631313 -246.970375 L 500.068813 -246.970375 " transform="matrix(1,0,0,-1,164.314,4.889)"/>
+<path style="fill:none;stroke-width:0.3985;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(75%,0%,25%);stroke-opacity:1;stroke-miterlimit:10;" d="M -2.190229 -2.39039 L 0.200396 0.000235 L -2.190229 2.39086 " transform="matrix(-1,0,0,1,664.38399,251.85914)"/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-0" x="757.619" y="246.399"/>
+ <use xlink:href="#glyph0-0" x="765.36791" y="246.399"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-0" x="773.116" y="246.399"/>
+ <use xlink:href="#glyph1-19" x="775.88361" y="246.399"/>
+ <use xlink:href="#glyph1-20" x="784.185445" y="246.399"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph1-11" x="789.999618" y="246.399"/>
+ <use xlink:href="#glyph1-4" x="794.980918" y="246.399"/>
+ <use xlink:href="#glyph1-2" x="798.883269" y="246.399"/>
+</g>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+ <use xlink:href="#glyph0-1" x="802.755" y="246.399"/>
+ <use xlink:href="#glyph0-1" x="810.50391" y="246.399"/>
+</g>
+</g>
+</svg>
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.tex b/graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.tex
new file mode 100644
index 0000000000..e1018da4c0
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/abstract-factory.tex
@@ -0,0 +1,69 @@
+
+\begin{tikzpicture}[show background grid]
+ \begin{interface}{AbstractFactory}{0,0}
+ \operation[0]{+ CreateProductA()}
+ \operation[0]{+ CreateProductB()}
+ \end{interface}
+
+ \begin{class}{ConcreteFactory2}{-3,-4}
+ \implement{AbstractFactory}
+ \operation{+ CreateProductA()}
+ \operation{+ CreateProductB()}
+ \end{class}
+
+ \begin{class}{ConcreteFactory1}{3,-4}
+ \implement{AbstractFactory}
+ \operation{+ CreateProductA()}
+ \operation{+ CreateProductB()}
+ \end{class}
+
+ \begin{interface}{AbstractProductA}{15,-2}
+ \end{interface}
+
+ \begin{class}{ProductA1}{12,-5}
+ \implement{AbstractProductA}
+ \end{class}
+
+ \begin{class}{ProductA2}{18,-5}
+ \implement{AbstractProductA}
+ \end{class}
+
+ \draw[umlcd style dashed line,->] (ConcreteFactory1) --node[above,
+ sloped, black]{$<<$instantiate$>>$} (ProductA1);
+
+ \draw[umlcd style dashed line,->] (ConcreteFactory2.south) ++
+ (1,0) -- ++(0,-1) -- node[above, sloped,
+ black]{$<<$instantiate$>>$} ++(20,0) -| (ProductA2);
+
+ \begin{interface}{AbstractProductB}{15,-8}
+ \end{interface}
+
+ \begin{class}{ProductB1}{12,-11}
+ \implement{AbstractProductB}
+ \end{class}
+
+ \begin{class}{ProductB2}{18,-11}
+ \implement{AbstractProductB}
+ \end{class}
+
+ \draw[umlcd style dashed line,->] (ConcreteFactory1) |-node[above,
+ sloped, black]{$<<$instantiate$>>$} (ProductB1);
+
+ \draw[umlcd style dashed line,->] (ConcreteFactory2.south) ++
+ (-1,0) -- ++(0,-7) -- node[above, sloped,
+ black]{$<<$instantiate$>>$} ++(20,0) -| (ProductB2);
+
+ \begin{class}{Client}{22,-0.5}
+ \end{class}
+
+ \draw[umlcd style dashed line,->] (Client) --node[above, sloped,
+ black]{$<<$import$>>$} (AbstractFactory);
+
+ \draw[umlcd style dashed line,->] (Client) |-node[above, sloped,
+ black]{$<<$import$>>$} (AbstractProductA);
+
+ \draw[umlcd style dashed line,->] (Client) |-node[above, sloped,
+ black]{$<<$import$>>$} (AbstractProductB);
+\end{tikzpicture}
+
+
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/aggregation.tex b/graphics/pgf/contrib/pgf-umlcd/demo/aggregation.tex
new file mode 100644
index 0000000000..5de8da63f2
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/aggregation.tex
@@ -0,0 +1,10 @@
+\begin{tikzpicture}[show background grid]
+ \begin{class}{Car}{0,0}
+ \end{class}
+
+ \begin{class}{Wheel}{7.5,0}
+ \end{class}
+
+ \aggregation{Car}{wheels}{4}{Wheel}
+
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/association.tex b/graphics/pgf/contrib/pgf-umlcd/demo/association.tex
new file mode 100644
index 0000000000..0582e54f6e
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/association.tex
@@ -0,0 +1,22 @@
+\begin{tikzpicture}
+ \begin{class}[text width=7cm]{Flight}{0,0}
+ \attribute{flightNumber : Integer}
+ \attribute{departureTime : Date}
+ \attribute{flightDuration : Minutes}
+ \attribute{departingAirport : String}
+ \attribute{arrivingAirport : String}
+
+ \operation{delayFlight ( numberOfMinutes : Minutes )}
+ \operation{getArrivalTime ( ) : Date}
+ \end{class}
+
+ \begin{class}{Plane}{11,0}
+ \attribute{airPlaneType : String}
+ \attribute{maximumSpeed : MPH}
+ \attribute{maximumDistance : Miles}
+ \attribute{tailID : String}
+ \end{class}
+
+ \association{Plane}{assignedPlane}{0..1}{Flight}{0..*}{assignedFlights}
+
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/class.tex b/graphics/pgf/contrib/pgf-umlcd/demo/class.tex
new file mode 100644
index 0000000000..4ba13254a4
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/class.tex
@@ -0,0 +1,10 @@
+\begin{tikzpicture}
+ \begin{class}[text width=8cm]{ClassName}{0,0}
+ \attribute{name : attribute type}
+ \attribute{name : attribute type = default value}
+
+ \operation{name(parameter list) : type of value returned}
+ % virtual operation
+ \operation[0]{name(parameters list) : type of value returned}
+ \end{class}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/composition.tex b/graphics/pgf/contrib/pgf-umlcd/demo/composition.tex
new file mode 100644
index 0000000000..6c584c254d
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/composition.tex
@@ -0,0 +1,10 @@
+\begin{tikzpicture}[show background grid]
+ \begin{class}{Company}{0,0}
+ \end{class}
+
+ \begin{class}{Department}{10,0}
+ \end{class}
+
+ \composition{Company}{theDepartment}{1..*}{Department}
+
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/implement-interface.tex b/graphics/pgf/contrib/pgf-umlcd/demo/implement-interface.tex
new file mode 100644
index 0000000000..b8b36a502a
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/implement-interface.tex
@@ -0,0 +1,16 @@
+\begin{tikzpicture}%[show background grid]
+ \begin{interface}{Person}{0,0}
+ \attribute{firstName : String}
+ \attribute{lastName : String}
+ \end{interface}
+
+ \begin{class}{Professor}{-5,-5}
+ \implement{Person}
+ \attribute{salary : Dollars}
+ \end{class}
+
+ \begin{class}{Student}{5,-5}
+ \implement{Person}
+ \attribute{major : String}
+ \end{class}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/inheritance.tex b/graphics/pgf/contrib/pgf-umlcd/demo/inheritance.tex
new file mode 100644
index 0000000000..3399f606a4
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/inheritance.tex
@@ -0,0 +1,26 @@
+\begin{tikzpicture}
+ \begin{class}[text width=5cm]{BankAccount}{0,0}
+ \attribute{owner : String}
+ \attribute{balance : Dollars = 0}
+
+ \operation{deposit(amount : Dollars)}
+ \operation[0]{withdrawl(amount : Dollars)}
+ \end{class}
+
+ \begin{class}[text width=7cm]{CheckingAccount}{-5,-5}
+ \inherit{BankAccount}
+ \attribute{insufficientFundsFee : Dollars}
+
+ \operation{processCheck ( checkToProcess : Check )}
+ \operation{withdrawal ( amount : Dollars )}
+ \end{class}
+
+ \begin{class}[text width=7cm]{SavingsAccount}{5,-5}
+ \inherit{BankAccount}
+ \attribute{annualInteresRate : Percentage}
+
+ \operation{depositMonthlyInterest ( )}
+ \operation{withdrawal ( amount : Dollars )}
+ \end{class}
+
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/interface.tex b/graphics/pgf/contrib/pgf-umlcd/demo/interface.tex
new file mode 100644
index 0000000000..28bee28f28
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/interface.tex
@@ -0,0 +1,6 @@
+\begin{tikzpicture}%[show background grid]
+ \begin{interface}{Person}{0,0}
+ \attribute{firstName : String}
+ \attribute{lastName : String}
+ \end{interface}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/note.tex b/graphics/pgf/contrib/pgf-umlcd/demo/note.tex
new file mode 100644
index 0000000000..eb7f7d7d19
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/note.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \umlnote (note) {This is a note.};
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/object-include-methods.tex b/graphics/pgf/contrib/pgf-umlcd/demo/object-include-methods.tex
new file mode 100644
index 0000000000..69d66da97f
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/object-include-methods.tex
@@ -0,0 +1,10 @@
+\begin{tikzpicture}
+ \begin{object}[text width=6cm]{Thomas' account}{0,0}
+ \instanceOf{BankAccount}
+ \attribute{owner = Thomas}
+ \attribute{balance = 100}
+
+ \operation{deposit(amount : Dollars)}
+ \operation[0]{withdrawl(amount : Dollars)}
+ \end{object}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/object.tex b/graphics/pgf/contrib/pgf-umlcd/demo/object.tex
new file mode 100644
index 0000000000..198f845ad8
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/object.tex
@@ -0,0 +1,6 @@
+\begin{tikzpicture}
+ \begin{object}[text width=6cm]{Instance Name}{0,0}
+ \instanceOf{Class Name}
+ \attribute{attribute name = value}
+ \end{object}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/package.tex b/graphics/pgf/contrib/pgf-umlcd/demo/package.tex
new file mode 100644
index 0000000000..a3196d7dd3
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/package.tex
@@ -0,0 +1,28 @@
+\begin{tikzpicture}
+ \begin{package}{Accounts}
+ \begin{class}[text width=5cm]{BankAccount}{0,0}
+ \attribute{owner : String}
+ \attribute{balance : Dollars = 0}
+
+ \operation{deposit(amount : Dollars)}
+ \operation[0]{withdrawl(amount : Dollars)}
+ \end{class}
+
+ \begin{class}[text width=7cm]{CheckingAccount}{-5,-5}
+ \inherit{BankAccount}
+ \attribute{insufficientFundsFee : Dollars}
+
+ \operation{processCheck ( checkToProcess : Check )}
+ \operation{withdrawal ( amount : Dollars )}
+ \end{class}
+
+ \begin{class}[text width=7cm]{SavingsAccount}{5,-5}
+ \inherit{BankAccount}
+ \attribute{annualInteresRate : Percentage}
+
+ \operation{depositMonthlyInterest ( )}
+ \operation{withdrawal ( amount : Dollars )}
+ \end{class}
+ \end{package}
+
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/unidirectional-association.tex b/graphics/pgf/contrib/pgf-umlcd/demo/unidirectional-association.tex
new file mode 100644
index 0000000000..9ea07805b0
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/unidirectional-association.tex
@@ -0,0 +1,20 @@
+\begin{tikzpicture}
+ % \draw[help lines] (-7,-6) grid (6,0);
+
+ \begin{class}[text width=6cm]{OverdrawnAccountsReport}{0,0}
+ \attribute{generatedOn : Date}
+
+ \operation{refresh ( )}
+ \end{class}
+
+ \begin{class}{BankAccount}{12,0}
+ \attribute{owner : String}
+ \attribute{balance : Dollars}
+
+ \operation{deposit(amount : Dollars)}
+ \operation[0]{withdrawl(amount : Dollars)}
+ \end{class}
+
+ \unidirectionalAssociation{OverdrawnAccountsReport}{overdrawnAccounts}{0..*}{BankAccount}
+
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/demo/visibility.tex b/graphics/pgf/contrib/pgf-umlcd/demo/visibility.tex
new file mode 100644
index 0000000000..e5bd6e1318
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/demo/visibility.tex
@@ -0,0 +1,17 @@
+\begin{tikzpicture}%[show background grid]
+ \begin{class}[text width=7cm]{Class}{0,0}
+ \attribute{+ Public}
+ \attribute{\# Protected}
+ \attribute{- Private}
+ \attribute{$\sim$ Package}
+ \end{class}
+
+ \begin{class}[text width=7cm]{BankAccount}{0,-3}
+ \attribute{+ owner : String}
+ \attribute{+ balance : Dollars}
+
+ \operation{+ deposit( amount : Dollars )}
+ \operation{+ withdrawal( amount : Dollars )}
+ \operation{\# updateBalance( newBalance : Dollars )}
+ \end{class}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlcd/logo.png b/graphics/pgf/contrib/pgf-umlcd/logo.png
new file mode 100644
index 0000000000..4d04053166
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/logo.png
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.pdf b/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.pdf
new file mode 100644
index 0000000000..7e6fea67e1
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.tex b/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.tex
new file mode 100644
index 0000000000..17a6edc6fd
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd-manual.tex
@@ -0,0 +1,149 @@
+% Manual of pgf-umlcd.sty, a convenient set of macros for drawing UML
+% class diagrams.
+% Written by Xu Yuan <xuyuan.cn@gmail.com>
+% This file is part of pgf-umlcd
+% you may get it at http://code.google.com/p/pgf-umlcd/
+
+\documentclass{article}
+\usepackage[margin=12mm]{geometry}
+\usepackage{hyperref}
+
+\usepackage[
+% school,
+% simplified
+]{pgf-umlcd}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{listings}
+\usepackage{color}
+\definecolor{listinggray}{gray}{0.92}
+\lstset{ %
+language=[LaTeX]TeX,
+breaklines=true,
+frame=single,
+% frameround=tttt,
+basicstyle=\footnotesize\ttfamily,
+backgroundcolor=\color{listinggray},
+keywordstyle=\color{blue}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hypersetup{
+ colorlinks=true,
+ linkcolor=blue,
+ anchorcolor=black,
+ citecolor=olive,
+ filecolor=magenta,
+ menucolor=red,
+ urlcolor=blue
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\demo}[2][1]{
+\begin{minipage}{.49\linewidth}
+\centering
+\resizebox{#1\linewidth}{!}{
+\input{demo/#2}
+}
+\end{minipage}
+\hspace{0.01\linewidth}
+\begin{minipage}{.5\linewidth}
+\lstinputlisting{demo/#2}
+\end{minipage}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\example}[1]{
+\resizebox{\linewidth}{!}{
+\input{demo/#1}
+}
+\lstinputlisting{demo/#1}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{Drawing UML Class Diagram by using \texttt{pgf-umlcd}}
+\author{\href{mailto:xuyuan.cn@gmail.com}{Yuan Xu}}
+\date{\today{}~(v0.2.1)}
+\maketitle
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{abstract}
+ \texttt{pgf-umlcd} is a LaTeX package for drawing UML Class
+ Diagrams. As stated by its name, it is based on a very popular
+ graphic package \texttt{PGF/TikZ}. This document presents the usage
+ of \texttt{pgf-umlcd} and collects some UML class diagrams as
+ examples. \texttt{pgf-umlcd} can be downloaded from
+ \href{http://code.google.com/p/pgf-umlcd/}{http://code.google.com/p/pgf-umlcd/}.
+\end{abstract}
+
+\tableofcontents
+
+\section{Basics}
+\subsection{Class with attributes and operations}
+Note: If you don't want to show empty parts in the diagrams, please
+use \texttt{simplified} option, e.g. \lstinline|\usepackage[simplified]{pgf-umlcd}|.\\
+\demo{class}
+
+\subsubsection{Visibility of attributes and operations}
+\demo[0.8]{visibility}
+
+\subsubsection{Abstract class and interface}
+\demo[0.5]{abstract-class}
+\demo[0.5]{interface}
+
+\subsubsection{Object}
+\demo[0.7]{object}
+Note: Object with rounded corners and methods are used in German school for didactic reasons. You get the rounded corners with \lstinline|\usepackage[school]{pgf-umlcd}|. If you need both in one document you can switch it with \lstinline|\switchUmlcdSchool| \\
+\switchUmlcdSchool
+\demo[0.7]{object}
+\demo[0.7]{object-include-methods}
+
+\subsubsection{Note}
+The \lstinline|\umlnote| use the same syntax as tikz command
+\lstinline|\node|, e.g. \lstinline|\umlnote[style] (name) at (coordinate) {text};|
+
+\demo[0.7]{note}
+
+\subsection{Inheritance and implement}
+\subsubsection{Inheritance}
+\demo{inheritance}
+
+\subsubsection{Implement an interface}
+\demo{implement-interface}
+
+\subsection{Association, Aggregation and Composition}
+\subsubsection{Association}
+\demo{association}
+
+\subsubsection{Unidirectional association}
+\demo{unidirectional-association}
+
+\subsubsection{Aggregation}
+\demo{aggregation}
+
+\subsubsection{Composition}
+\demo{composition}
+
+\subsection{Package}
+\demo{package}
+
+\section{Examples}
+\subsection{Abstract Factory}
+\example{abstract-factory}
+
+\section{Acknowledgements}
+Many people contributed to \texttt{pgf-umlcd} by reporting problems,
+suggesting various improvements or submitting code. Here is a list of
+these people: \href{mailto:martin.quinson@loria.fr}{Martin Quinson},
+and \href{mailto:johannes_pieper@yahoo.de}{Johannes Pieper}.
+
+\end{document}
+%%% Local Variables:
+%%% mode: Tex-PDF
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd.sty b/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd.sty
new file mode 100644
index 0000000000..0062909b8d
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlcd/pgf-umlcd.sty
@@ -0,0 +1,353 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Start of pgf-umlcd.sty
+%
+% Some macros for UML Class Diagrams.
+% Home page of project: http://pgf-umlcd.googlecode.com/
+% Author: Xu Yuan <xu@informatik.hu-berlin.de>, Humboldt University, Berlin
+% Style from: http://www.ibm.com/developerworks/cn/rational/r-uml/
+%
+
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{pgf-umlcd}[2011/10/01 v0.3dev Some LaTeX macros for
+UML Class Diagrams.]
+
+\RequirePackage{tikz}
+
+\usetikzlibrary{arrows,shapes.multipart,backgrounds,fit}
+\tikzstyle{help lines}+=[blue!50,very thin,dashed]
+
+\newcommand{\umltextcolor}{black}
+\newcommand{\umldrawcolor}{purple}
+\newcommand{\umlfillcolor}{yellow!20}
+\tikzstyle{umlcolor}=[color=\umldrawcolor,fill=\umlfillcolor,text=\umltextcolor]
+\tikzstyle{umlcd style}=[umlcolor, >=angle 90]
+
+\tikzstyle{package}=[matrix, column sep=1mm, row sep=1cm, node distance=2cm]
+\tikzstyle{packagename}=[rectangle, minimum height=2em]
+
+\tikzstyle{umlcd style implement line}=[color=\umldrawcolor, open triangle 45-,dashed]
+\tikzstyle{objectline}=[color=\umldrawcolor, diamond->]
+\tikzstyle{umlcd style inherit line}=[color=\umldrawcolor, open triangle 45-]
+\tikzstyle{splitline}=[color=\umldrawcolor, dotted,font=\itshape]
+
+\tikzstyle{umlcd style class}=[rectangle split, rectangle split parts=3,
+every text node part/.style={text centered},
+draw, minimum height=2em, umlcolor, minimum width=2cm, text width=5cm,
+minimum height=1cm, node distance=2cm]
+
+
+\tikzstyle{umlcd style dashed line}=[color=\umldrawcolor, >=angle 90,dashed]
+
+\tikzstyle{umlcd style school}=[]
+\newif\ifschool\schoolfalse
+\DeclareOption{school}{\tikzstyle{umlcd style school}=[rounded corners] \schooltrue}
+\newif\ifsimplified\simplifiedfalse
+\DeclareOption{simplified}{\simplifiedtrue}
+\ProcessOptions\relax
+
+
+% declare layers
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{connectionlayers}
+\pgfsetlayers{background,connectionlayers,main}
+
+\newcounter{umlcdClassAttributesNum}
+\newcounter{umlcdClassOperationsNum}
+\newcounter{umlcdClassAbstractClassNum}
+\newcounter{umlcdClassInterfaceNum}
+\newcounter{umlcdClassSplitPartNum}
+
+\def\umlcdPackageFit{}
+
+\newenvironment{class}[3][]%
+{
+\begin{classAndInterfaceCommon}{#1}{#2}{#3}
+}%
+{\calcuateNumberOfParts{}
+\node[this umlcd style, anchor=north] (\umlcdClassName) at (\umlcdClassPos)
+ {\textbf{\umlcdClassName}
+\insertAttributesAndOperations{}
+};
+
+\end{classAndInterfaceCommon}
+}
+
+\newenvironment{interface}[3][]%
+{
+\begin{classAndInterfaceCommon}{#1}{#2}{#3}
+}%
+{\calcuateNumberOfParts{}
+\node[this umlcd style, anchor=north] (\umlcdClassName) at (\umlcdClassPos)
+ {$<<$interface$>>$ \\ \textbf{\umlcdClassName}
+\insertAttributesAndOperations{}
+};
+
+\end{classAndInterfaceCommon}
+}
+
+\newenvironment{abstractclass}[3][]%
+{
+\begin{classAndInterfaceCommon}{#1}{#2}{#3}
+}%
+{\calcuateNumberOfParts{}
+\node[this umlcd style, anchor=north] (\umlcdClassName) at (\umlcdClassPos)
+ {$<<$abstract$>>$ \\ \textbf{\umlcdClassName}
+\insertAttributesAndOperations{}
+};
+
+\end{classAndInterfaceCommon}
+}
+
+% TODO: here the name of \umlcdClassName and \umlObjectName should be
+% switched, it is only for reusing \classAndInterfaceCommon at the
+% moment.
+\newenvironment{object}[3][]%
+{
+\begin{classAndInterfaceCommon}{#1}{#2}{#3}
+\def\@instanceOf{}
+\def\@@instanceOf{}
+}%
+{
+ % customized
+ \ifsimplified
+ \calcuateNumberOfParts{}
+ \else
+ \ifnum\c@umlcdClassOperationsNum>0
+ \setcounter{umlcdClassSplitPartNum}{3}
+ \protected@xdef\umlcdSplitPart{3}
+ \else
+ \setcounter{umlcdClassSplitPartNum}{2}
+ \protected@xdef\umlcdSplitPart{2}
+ \fi
+ \fi
+
+ \ifx\@instanceOf\@@instanceOf
+ \def\umldObjectName{\umlcdClassName}
+ \else
+ \def\umldObjectName{\umlcdClassName : \@instanceOf}
+ \fi
+
+\node[this umlcd style, anchor=north, umlcd style school] (\umlcdClassName) at (\umlcdClassPos)
+ { \ifschool
+ \textbf{\umldObjectName}
+ \else
+ \underline{\textbf{\umldObjectName}}
+ \fi
+ \insertAttributesAndOperations{}
+};
+
+\end{classAndInterfaceCommon}
+}
+
+\newcommand*{\insertAttributesAndOperations}
+{
+ \ifnum\c@umlcdClassSplitPartNum>1
+ \nodepart{second}
+ \fi
+ \umlcdClassAttributes
+ \ifnum\c@umlcdClassSplitPartNum>2
+ \nodepart{third}
+ \fi
+ \umlcdClassOperations
+}
+
+\newcommand*{\calcuateNumberOfParts}
+{
+ % calcuate the number of parts
+ \ifsimplified
+ \setcounter{umlcdClassSplitPartNum}{1}
+ \ifnum\c@umlcdClassAttributesNum>0
+ \stepcounter{umlcdClassSplitPartNum}
+ \fi
+ \ifnum\c@umlcdClassOperationsNum>0
+ \stepcounter{umlcdClassSplitPartNum}
+ \fi
+ \else
+ \setcounter{umlcdClassSplitPartNum}{3}% three parts by default
+ \fi
+
+ \protected@xdef\umlcdSplitPart{3}
+ \ifnum\c@umlcdClassSplitPartNum=1
+ \protected@xdef\umlcdSplitPart{1}
+ \fi
+ \ifnum\c@umlcdClassSplitPartNum=2
+ \protected@xdef\umlcdSplitPart{2}
+ \fi
+}
+
+\newenvironment*{classAndInterfaceCommon}[3]
+{
+\def\umlcdClassName{#2}%
+\def\umlcdClassPos{#3}
+\def\umlcdClassAttributes{}%
+\def\umlcdClassOperations{}%
+\def\umlcdClassAbstractClass{}%
+\def\umlcdClassInterface{}%
+\setcounter{umlcdClassAttributesNum}{0}%
+\setcounter{umlcdClassOperationsNum}{0}%
+\setcounter{umlcdClassAbstractClassNum}{0}%
+\setcounter{umlcdClassInterfaceNum}{0}%
+\tikzstyle{this umlcd style}=[umlcd style class, rectangle split
+ parts=\umlcdSplitPart, #1]
+}%
+{
+%% connections
+\begin{pgfonlayer}{connectionlayers}
+\ifnum\c@umlcdClassAbstractClassNum>0
+\foreach \c in {\umlcdClassAbstractClass}{
+ \draw [umlcd style inherit line] (\c) -- (\umlcdClassName);
+}
+\fi
+
+\ifnum\c@umlcdClassInterfaceNum>0
+\foreach \c in {\umlcdClassInterface}{
+ \draw [umlcd style implement line] (\c) -- (\umlcdClassName);
+}
+\fi
+\end{pgfonlayer}
+
+%% add to fit
+\let\umlcdPackageFitOld\umlcdPackageFit
+\protected@xdef\umlcdPackageFit{\umlcdPackageFitOld (\umlcdClassName)}
+}
+
+\newcommand{\attribute}[1]{%
+\ifnum\c@umlcdClassAttributesNum=0
+\protected@xdef\umlcdClassAttributes{#1}
+\else
+\let\umlcdClassAttributesOld\umlcdClassAttributes
+\protected@xdef\umlcdClassAttributes{\umlcdClassAttributesOld \ \newline
+ #1}
+\fi
+\stepcounter{umlcdClassAttributesNum}
+}
+
+\newcommand{\operation}[2][1]{%
+\stepcounter{umlcdClassOperationsNum}
+
+\def\virtualoperation{#2}
+\ifnum0=#1
+\def\virtualoperation{\textit{#2}}
+\fi
+
+\ifnum\c@umlcdClassOperationsNum=1
+\protected@xdef\umlcdClassOperations{\virtualoperation}
+\else
+\let\umlcdClassOperationsOld\umlcdClassOperations
+\protected@xdef\umlcdClassOperations{\umlcdClassOperationsOld \ \newline
+ \virtualoperation}
+\fi
+}
+
+\newcommand{\inherit}[1]
+{
+\stepcounter{umlcdClassAbstractClassNum}
+\ifnum\c@umlcdClassAbstractClassNum=1
+\protected@xdef\umlcdClassAbstractClass{#1}
+\else
+\let\umlcdClassAbstractClassOld\umlcdClassAbstractClass
+\protected@xdef\umlcdClassAbstractClass{\umlcdClassAbstractClassOld,
+ #1}
+\fi
+}
+
+\newcommand{\implement}[1]
+{
+\stepcounter{umlcdClassInterfaceNum}
+\ifnum\c@umlcdClassInterfaceNum=1
+\protected@xdef\umlcdClassInterface{#1}
+\else
+\let\umlcdClassInterfaceOld\umlcdClassInterface
+\protected@xdef\umlcdClassInterface{\umlcdClassInterfaceOld,
+ #1}
+\fi
+}
+
+\newcommand{\instanceOf}[1]{\def\@instanceOf{#1}}
+
+\newcommand{\association}[6]{
+\draw [umlcd style] (#1) -- (#4)
+node[near start, above]{#2}
+node[near start, below]{#3}
+node[near end, above]{#5}
+node[near end, below]{#6};
+}
+
+\newcommand{\unidirectionalAssociation}[4]{
+\draw [umlcd style, ->] (#1) -- (#4)
+node[near end, above]{#2}
+node[near end, below]{#3};
+}
+
+\newcommand{\aggregation}[4]
+{
+\draw[umlcd style, open diamond->] (#1) -- (#4)
+node[near end, above]{#2}
+node[near end, below]{#3};
+}
+
+\newcommand{\composition}[4]
+{
+\draw[umlcd style, fill=\umldrawcolor, diamond->] (#1) -- (#4)
+node[near end, above]{#2}
+node[near end, below]{#3};
+}
+
+\newenvironment{package}[1]{
+\def\umlcdPackageFit{}
+\def\umlcdPackageName{#1}
+}{
+ \begin{pgfonlayer}{background}
+ \node[umlcd style, draw, inner sep=0.5cm, fit = \umlcdPackageFit] (\umlcdPackageName) {};
+ \node[umlcd style, draw, outer ysep=-0.5, anchor=south west] (\umlcdPackageName caption) at
+ (\umlcdPackageName.north west) {\umlcdPackageName};
+ \end{pgfonlayer}
+}
+
+\newcommand{\switchUmlcdSchool}{
+ \ifschool
+ \tikzstyle{umlcd style school}=[]
+ \schoolfalse
+ \else
+ \tikzstyle{umlcd style school}=[rounded corners]
+ \schooltrue
+ \fi
+}
+
+\pgfdeclareshape{umlcdnote}{
+\inheritsavedanchors[from=rectangle] % this is nearly a rectangle
+\inheritanchorborder[from=rectangle]
+\inheritanchor[from=rectangle]{center}
+\inheritanchor[from=rectangle]{north}
+\inheritanchor[from=rectangle]{south}
+\inheritanchor[from=rectangle]{west}
+\inheritanchor[from=rectangle]{east}
+% ... and possibly more
+\backgroundpath{% this is new
+% store lower right in xa/ya and upper right in xb/yb
+\southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+\northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+% compute corner of flipped page
+\pgf@xc=\pgf@xb \advance\pgf@xc by-10pt % this should be a parameter
+\pgf@yc=\pgf@yb \advance\pgf@yc by-10pt
+% construct main path
+\pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+\pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
+\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yb}}
+\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
+\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
+\pgfpathclose
+% add little corner
+\pgfpathmoveto{\pgfpoint{\pgf@xc}{\pgf@yb}}
+\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
+\pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yc}}
+\pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
+}
+}
+
+\newcommand{\umlnote}[1][]{
+ \node[umlcd style, anchor=north, draw,shape=umlcdnote, text width=4cm, #1]
+}
+
+%%% End of pgf-umlcd.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/README b/graphics/pgf/contrib/pgf-umlsd/README
new file mode 100644
index 0000000000..c6735d5df4
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/README
@@ -0,0 +1,3 @@
+Some LaTeX macros for UML Sequence Diagrams.
+Home page of project: http://pgf-umlsd.googlecode.com/
+Please read pgf-umlsd-manual.pdf for more information.
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/block.tex b/graphics/pgf/contrib/pgf-umlsd/demo/block.tex
new file mode 100644
index 0000000000..deec2c8fa7
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/block.tex
@@ -0,0 +1,9 @@
+\begin{sequencediagram}
+ \newthread{t}{:Thread}
+ \newinst[1]{i}{:Instance}
+
+ \begin{sdblock}{Block}{description}
+ \begin{call}{t}{function()}{i}{}
+ \end{call}
+ \end{sdblock}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/call.tex b/graphics/pgf/contrib/pgf-umlsd/demo/call.tex
new file mode 100644
index 0000000000..b67d61e841
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/call.tex
@@ -0,0 +1,7 @@
+\begin{sequencediagram}
+ \newthread{t}{:Thread}
+ \newinst[1]{i}{:Instance}
+
+ \begin{call}{t}{function()}{i}{return value}
+ \end{call}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/callself.tex b/graphics/pgf/contrib/pgf-umlsd/demo/callself.tex
new file mode 100644
index 0000000000..4729758237
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/callself.tex
@@ -0,0 +1,6 @@
+\begin{sequencediagram}
+ \newthread{t}{:Thread}
+
+ \begin{call}{t}{function()}{t}{return value}
+ \end{call}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/customize.log b/graphics/pgf/contrib/pgf-umlsd/demo/customize.log
new file mode 100644
index 0000000000..978a646b07
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/customize.log
@@ -0,0 +1,237 @@
+This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=latex 2011.5.2) 27 JUL 2011 02:55
+entering extended mode
+ %&-line parsing enabled.
+**\input customize.tex
+(./customize.tex
+
+! LaTeX Error: Environment sequencediagram undefined.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.1 \begin{sequencediagram}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+! Undefined control sequence.
+l.2 \newthread
+ [red]{r}{:Red}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+
+! LaTeX Error: Missing \begin{document}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.2 \newthread[
+ red]{r}{:Red}
+You're in trouble here. Try typing <return> to proceed.
+If that doesn't work, type X <return> to quit.
+
+Missing character: There is no [ in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no ] in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no R in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no d in font nullfont!
+! Undefined control sequence.
+l.3 \newthread
+ [green]{g}{:Green}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no [ in font nullfont!
+Missing character: There is no g in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no ] in font nullfont!
+Missing character: There is no g in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no G in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no n in font nullfont!
+! Undefined control sequence.
+l.4 \newthread
+ [blue]{b}{:Blue}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no [ in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no u in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no ] in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no B in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no u in font nullfont!
+Missing character: There is no e in font nullfont!
+! Undefined control sequence.
+l.5 \tikzstyle
+ {inststyle}+=[bottom color=yellow]
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no i in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no y in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no + in font nullfont!
+Missing character: There is no = in font nullfont!
+Missing character: There is no [ in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no m in font nullfont!
+Missing character: There is no c in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no = in font nullfont!
+Missing character: There is no y in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no w in font nullfont!
+Missing character: There is no ] in font nullfont!
+! Undefined control sequence.
+l.6 \newinst
+ {y}{:Yellow}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no y in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no Y in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no w in font nullfont!
+! Undefined control sequence.
+l.7 \tikzstyle
+ {inststyle}+=[rounded corners=3mm]
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no i in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no y in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no + in font nullfont!
+Missing character: There is no = in font nullfont!
+Missing character: There is no [ in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no u in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no c in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no = in font nullfont!
+Missing character: There is no 3 in font nullfont!
+Missing character: There is no m in font nullfont!
+Missing character: There is no m in font nullfont!
+Missing character: There is no ] in font nullfont!
+! Undefined control sequence.
+l.8 \newinst
+ {o}{:Rounded}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no o in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no R in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no u in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no d in font nullfont!
+
+! LaTeX Error: \begin{document} ended by \end{sequencediagram}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.9 \end{sequencediagram}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+)
+! Emergency stop.
+<*> \input customize.tex
+
+*** (job aborted, no legal \end found)
+
+
+Here is how much of TeX's memory you used:
+ 7 strings out of 495062
+ 174 string characters out of 1182645
+ 45108 words of memory out of 3000000
+ 3284 multiletter control sequences out of 15000+50000
+ 3640 words of font info for 14 fonts, out of 3000000 for 9000
+ 28 hyphenation exceptions out of 8191
+ 6i,0n,6p,69b,19s stack positions out of 5000i,500n,10000p,200000b,50000s
+No pages of output.
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/customize.tex b/graphics/pgf/contrib/pgf-umlsd/demo/customize.tex
new file mode 100644
index 0000000000..db4cc01c19
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/customize.tex
@@ -0,0 +1,9 @@
+\begin{sequencediagram}
+ \newthread[red]{r}{:Red}
+ \newthread[green]{g}{:Green}
+ \newthread[blue]{b}{:Blue}
+ \tikzstyle{inststyle}+=[top color=yellow, bottom color=gray]
+ \newinst{y}{:Yellow}
+ \tikzstyle{inststyle}+=[bottom color=white, top color=white, rounded corners=3mm]
+ \newinst{o}{:Rounded}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/distance.tex b/graphics/pgf/contrib/pgf-umlsd/demo/distance.tex
new file mode 100644
index 0000000000..f8008770b7
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/distance.tex
@@ -0,0 +1,6 @@
+\begin{sequencediagram}
+ \newthread{a}{:A}
+ \newinst{b}{:B}
+ \newinst[1]{c}{:C}
+ \newinst[2]{d}{:D}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/empty.tex b/graphics/pgf/contrib/pgf-umlsd/demo/empty.tex
new file mode 100644
index 0000000000..2b610eade7
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/empty.tex
@@ -0,0 +1,2 @@
+\begin{sequencediagram}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/instance.tex b/graphics/pgf/contrib/pgf-umlsd/demo/instance.tex
new file mode 100644
index 0000000000..8c5b8339bb
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/instance.tex
@@ -0,0 +1,3 @@
+\begin{sequencediagram}
+ \newinst{name}{:Instance}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/message.tex b/graphics/pgf/contrib/pgf-umlsd/demo/message.tex
new file mode 100644
index 0000000000..d5db59320e
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/message.tex
@@ -0,0 +1,6 @@
+\begin{sequencediagram}
+ \newthread{a}{:Thread A}
+ \newthread[gray]{b}{:Thread B}
+
+ \mess{a}{message}{b}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/messcall.tex b/graphics/pgf/contrib/pgf-umlsd/demo/messcall.tex
new file mode 100644
index 0000000000..5b73efa5a3
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/messcall.tex
@@ -0,0 +1,7 @@
+\begin{sequencediagram}
+ \newthread{t}{:Thread}
+ \newinst[1]{i}{:Instance}
+
+ \begin{messcall}{t}{function()}{i}
+ \end{messcall}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/multi-threads-example.tex b/graphics/pgf/contrib/pgf-umlsd/demo/multi-threads-example.tex
new file mode 100644
index 0000000000..5493006112
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/multi-threads-example.tex
@@ -0,0 +1,37 @@
+\begin{sequencediagram}
+ \tikzstyle{inststyle}+=[bottom color=yellow] % custom the style
+ \newthread[blue]{ss}{:SimulationServer}
+ \newinst{ps}{:PhysicsServer}
+ \newinst[2]{sense}{:SenseServer}
+ \newthread[red]{ctr}{:SimControlNode}
+
+ \begin{sdblock}[green!20]{Run Loop}{The main loop}
+ \mess{ctr}{StartCycle}{ss}
+ \begin{call}{ss}{Update()}{ps}{}
+ \prelevel
+ \begin{call}{ctr}{SenseAgent()}{ctr}{}
+ \begin{call}[3]{ctr}{Read}{sense}{}
+ \end{call}
+ \end{call}
+ \prelevel\prelevel\prelevel\prelevel
+ \setthreadbias{west}
+ \begin{call}{ps}{PrePhysicsUpdate()}{sense}{}
+ \end{call}
+ \setthreadbias{center}
+ \begin{call}{ps}{Update()}{ps}{}
+ \begin{call}{ps}{\small CollisionDetection()}{ps}{}
+ \end{call}
+ \begin{call}{ps}{Dynamics()}{ps}{}
+ \end{call}
+ \end{call}
+ \begin{call}{ps}{PostPhysicsUpdate()}{sense}{}
+ \end{call}
+ \end{call}
+ \mess{ss}{EndCycle}{ctr}
+ \begin{call}{ctr}{ActAgent()}{ctr}{}
+ \begin{call}{ctr}{Write}{sense}{}
+ \end{call}
+ \end{call}
+ \end{sdblock}
+
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/nested-call.tex b/graphics/pgf/contrib/pgf-umlsd/demo/nested-call.tex
new file mode 100644
index 0000000000..4ca253ed33
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/nested-call.tex
@@ -0,0 +1,10 @@
+\begin{sequencediagram}
+ \newthread{t}{:Thread}
+ \newinst{a}{:A}
+ \newinst{b}{:B}
+
+ \begin{call}{t}{funcA()}{a}{return}
+ \begin{call}{a}{funcA()}{b}{return}
+ \end{call}
+ \end{call}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/no-thread-example.tex b/graphics/pgf/contrib/pgf-umlsd/demo/no-thread-example.tex
new file mode 100644
index 0000000000..cd5bf02803
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/no-thread-example.tex
@@ -0,0 +1,33 @@
+\begin{sequencediagram}
+ \tikzstyle{inststyle}+=[{font=\large}]
+ \def\unitfactor{.9}
+
+ \newinst{instance 1}
+ {instance 1}
+
+ \newinst{instance 2}
+ {instance 2}
+
+ \newinst[4cm]{instance 3}
+ {instance 3}
+
+ \tikzstyle{instcolordienst}=[fill=black!25]
+ \tikzstyle{instcolorbuerger}=[fill=black!25]
+
+ \messcall{instance 3}{data 1}{instance 2}
+
+ \begin{call}
+ {instance 3}{data 2}
+ {instance 2}{data 2*}
+
+ \begin{callself}
+ {instance 2}{Nutzerinteraktion}{data 3, data 2}
+ \end{callself}
+
+ \begin{call}
+ {instance 2}{data 4, data 2}
+ {instance 1}{}
+ \end{call}
+ \end{call}
+
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/non-instantaneous-message.tex b/graphics/pgf/contrib/pgf-umlsd/demo/non-instantaneous-message.tex
new file mode 100644
index 0000000000..1efcde133b
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/non-instantaneous-message.tex
@@ -0,0 +1,7 @@
+\begin{sequencediagram}
+ \newthread{a}{:Thread A}
+ \newthread[gray]{b}{:Thread B}
+
+ \mess[1]{a}{ping}{b}
+ \mess[1]{b}{pong}{a}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/postlevel.log b/graphics/pgf/contrib/pgf-umlsd/demo/postlevel.log
new file mode 100644
index 0000000000..8fb6b0813d
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/postlevel.log
@@ -0,0 +1,216 @@
+This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=latex 2011.5.2) 15 SEP 2011 06:48
+entering extended mode
+ %&-line parsing enabled.
+**\input postlevel.tex
+(./postlevel.tex
+
+! LaTeX Error: Environment sequencediagram undefined.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.1 \begin{sequencediagram}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+! Undefined control sequence.
+l.2 \newthread
+ {t}{:Thread}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+
+! LaTeX Error: Missing \begin{document}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.2 \newthread{t
+ }{:Thread}
+You're in trouble here. Try typing <return> to proceed.
+If that doesn't work, type X <return> to quit.
+
+Missing character: There is no t in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no T in font nullfont!
+Missing character: There is no h in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no d in font nullfont!
+! Undefined control sequence.
+l.3 \newinst
+ [1]{i}{:Instance}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no [ in font nullfont!
+Missing character: There is no 1 in font nullfont!
+Missing character: There is no ] in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no I in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no c in font nullfont!
+Missing character: There is no e in font nullfont!
+
+Overfull \hbox (20.0pt too wide) in paragraph at lines 2--4
+[]
+ []
+
+
+! LaTeX Error: Environment sdblock undefined.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.5 \begin{sdblock}
+ {Block}{description}
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+
+! LaTeX Error: Missing \begin{document}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.5 \begin{sdblock}{B
+ lock}{description}
+You're in trouble here. Try typing <return> to proceed.
+If that doesn't work, type X <return> to quit.
+
+Missing character: There is no B in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no c in font nullfont!
+Missing character: There is no k in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no c in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no p in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no n in font nullfont!
+
+! LaTeX Error: Environment call undefined.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.6 \begin{call}
+ {t}{function()}{i}{I have a lot of\newline things to do}
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+Missing character: There is no t in font nullfont!
+Missing character: There is no f in font nullfont!
+Missing character: There is no u in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no c in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no ( in font nullfont!
+Missing character: There is no ) in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no I in font nullfont!
+Missing character: There is no h in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no v in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no f in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no h in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no g in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no o in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no o in font nullfont!
+
+! LaTeX Error: \begin{document} ended by \end{call}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.7 \end{call}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+
+! LaTeX Error: \begin{document} ended by \end{sdblock}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.8 \end{sdblock}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+
+! LaTeX Error: \begin{document} ended by \end{sequencediagram}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.9 \end{sequencediagram}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+)
+! Emergency stop.
+<*> \input postlevel.tex
+
+*** (job aborted, no legal \end found)
+
+
+Here is how much of TeX's memory you used:
+ 11 strings out of 495062
+ 202 string characters out of 1182645
+ 45108 words of memory out of 3000000
+ 3288 multiletter control sequences out of 15000+50000
+ 3640 words of font info for 14 fonts, out of 3000000 for 9000
+ 28 hyphenation exceptions out of 8191
+ 6i,0n,6p,100b,32s stack positions out of 5000i,500n,10000p,200000b,50000s
+No pages of output.
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/postlevel.tex b/graphics/pgf/contrib/pgf-umlsd/demo/postlevel.tex
new file mode 100644
index 0000000000..184d927906
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/postlevel.tex
@@ -0,0 +1,8 @@
+\begin{sequencediagram}
+ \newthread{t}{:Thread}
+ \newinst[1]{i}{:Instance}
+ \begin{call}{t}{function()}{i}{\shortstack{return A\\ return B\\
+ return C}}
+ \postlevel
+ \end{call}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/prelevel.tex b/graphics/pgf/contrib/pgf-umlsd/demo/prelevel.tex
new file mode 100644
index 0000000000..84448e47ca
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/prelevel.tex
@@ -0,0 +1,12 @@
+\begin{sequencediagram}
+ \newthread{t1}{:Thread1}
+ \newthread[gray]{t2}{:Thread2}
+
+ \begin{callself}{t1}{loop}{}
+ \end{callself}
+
+ \prelevel\prelevel
+
+ \begin{callself}{t2}{loop}{}
+ \end{callself}
+\end{sequencediagram}
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/single-thread-example.tex b/graphics/pgf/contrib/pgf-umlsd/demo/single-thread-example.tex
new file mode 100644
index 0000000000..5f3628e479
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/single-thread-example.tex
@@ -0,0 +1,29 @@
+\begin{sequencediagram}
+ \newthread{ss}{:SimulationServer}
+ \newinst{ctr}{:SimControlNode}
+ \newinst{ps}{:PhysicsServer}
+ \newinst[1]{sense}{:SenseServer}
+
+ \begin{call}{ss}{Initialize()}{sense}{}
+ \end{call}
+ \begin{sdblock}{Run Loop}{The main loop}
+ \begin{call}{ss}{StartCycle()}{ctr}{}
+ \begin{call}{ctr}{ActAgent()}{sense}{}
+ \end{call}
+ \end{call}
+ \begin{call}{ss}{Update()}{ps}{}
+ \begin{messcall}{ps}{PrePhysicsUpdate()}{sense}{state}
+ \end{messcall}
+ \begin{sdblock}{Physics Loop}{}
+ \begin{call}{ps}{PhysicsUpdate()}{ps}{}
+ \end{call}
+ \end{sdblock}
+ \begin{call}{ps}{PostPhysicsUpdate()}{sense}{}
+ \end{call}
+ \end{call}
+ \begin{call}{ss}{EndCycle()}{ctr}{}
+ \begin{call}{ctr}{SenseAgent()}{sense}{}
+ \end{call}
+ \end{call}
+ \end{sdblock}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/sync-clock.tex b/graphics/pgf/contrib/pgf-umlsd/demo/sync-clock.tex
new file mode 100644
index 0000000000..9c4a70f28c
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/sync-clock.tex
@@ -0,0 +1,16 @@
+\begin{sequencediagram}
+ \newthread{a}{:Machine A}
+ \newthread[gray]{b}{:Machine B}
+
+ \mess[1]{a}{}{b}
+ \node[anchor=east] (t0) at (mess from) {$t_0$};
+ \node[anchor=west] (t1) at (mess to) {$t_1$};
+ \prelevel
+ \mess[1]{b}{}{a}
+ \node[anchor=east] (t2) at (mess to) {$t_2$};
+
+ \path (t0.east) |- coordinate(t12) (t1);
+ \draw[dashed] (t1) -- (t12);
+ \node[anchor=south west] at (t12) {$\Delta{}t_1$};
+ \node[anchor=north west] at (t12) {$\Delta{}t_2$};
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/thread.tex b/graphics/pgf/contrib/pgf-umlsd/demo/thread.tex
new file mode 100644
index 0000000000..9f1007a948
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/thread.tex
@@ -0,0 +1,3 @@
+\begin{sequencediagram}
+ \newthread{name}{:Thread}
+\end{sequencediagram} \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/threadbias.log b/graphics/pgf/contrib/pgf-umlsd/demo/threadbias.log
new file mode 100644
index 0000000000..1532fefa60
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/threadbias.log
@@ -0,0 +1,266 @@
+This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian) (format=latex 2011.5.2) 15 SEP 2011 07:22
+entering extended mode
+ %&-line parsing enabled.
+**\input threadbias.tex
+(./threadbias.tex
+
+! LaTeX Error: Environment sequencediagram undefined.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.1 \begin{sequencediagram}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+! Undefined control sequence.
+l.2 \newthread
+ [blue]{s1}{:Server1}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+
+! LaTeX Error: Missing \begin{document}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.2 \newthread[
+ blue]{s1}{:Server1}
+You're in trouble here. Try typing <return> to proceed.
+If that doesn't work, type X <return> to quit.
+
+Missing character: There is no [ in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no l in font nullfont!
+Missing character: There is no u in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no ] in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no 1 in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no S in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no v in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no 1 in font nullfont!
+! Undefined control sequence.
+l.3 \newinst
+ {db}{:Database}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no d in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no D in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no e in font nullfont!
+! Undefined control sequence.
+l.4 \newthread
+ [red]{s2}{:Server2}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+Missing character: There is no [ in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no ] in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no 2 in font nullfont!
+Missing character: There is no : in font nullfont!
+Missing character: There is no S in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no v in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no 2 in font nullfont!
+
+Overfull \hbox (20.0pt too wide) in paragraph at lines 2--5
+[]
+ []
+
+! Undefined control sequence.
+l.6 \setthreadbias
+ {west}
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+
+! LaTeX Error: Missing \begin{document}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.6 \setthreadbias{w
+ est}
+You're in trouble here. Try typing <return> to proceed.
+If that doesn't work, type X <return> to quit.
+
+Missing character: There is no w in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no s in font nullfont!
+Missing character: There is no t in font nullfont!
+
+! LaTeX Error: Environment call undefined.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.7 \begin{call}
+ {s1}{reading}{db}{data}
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+Missing character: There is no s in font nullfont!
+Missing character: There is no 1 in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no g in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no a in font nullfont!
+
+! LaTeX Error: \begin{document} ended by \end{call}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.8 \end{call}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+
+Overfull \hbox (20.0pt too wide) in paragraph at lines 6--9
+[]
+ []
+
+! Undefined control sequence.
+l.10 \prelevel
+
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+
+! LaTeX Error: Environment call undefined.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.12 \begin{call}
+ {s2}{reading}{db}{data}
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+
+! LaTeX Error: Missing \begin{document}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.12 \begin{call}{s
+ 2}{reading}{db}{data}
+You're in trouble here. Try typing <return> to proceed.
+If that doesn't work, type X <return> to quit.
+
+Missing character: There is no s in font nullfont!
+Missing character: There is no 2 in font nullfont!
+Missing character: There is no r in font nullfont!
+Missing character: There is no e in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no i in font nullfont!
+Missing character: There is no n in font nullfont!
+Missing character: There is no g in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no b in font nullfont!
+Missing character: There is no d in font nullfont!
+Missing character: There is no a in font nullfont!
+Missing character: There is no t in font nullfont!
+Missing character: There is no a in font nullfont!
+
+! LaTeX Error: \begin{document} ended by \end{call}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.13 \end{call}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+
+! LaTeX Error: \begin{document} ended by \end{sequencediagram}.
+
+See the LaTeX manual or LaTeX Companion for explanation.
+Type H <return> for immediate help.
+ ...
+
+l.14 \end{sequencediagram}
+
+Your command was ignored.
+Type I <command> <return> to replace it with another command,
+or <return> to continue without it.
+
+)
+! Emergency stop.
+<*> \input threadbias.tex
+
+*** (job aborted, no legal \end found)
+
+
+Here is how much of TeX's memory you used:
+ 9 strings out of 495062
+ 189 string characters out of 1182645
+ 45108 words of memory out of 3000000
+ 3286 multiletter control sequences out of 15000+50000
+ 3640 words of font info for 14 fonts, out of 3000000 for 9000
+ 28 hyphenation exceptions out of 8191
+ 6i,0n,6p,66b,24s stack positions out of 5000i,500n,10000p,200000b,50000s
+No pages of output.
diff --git a/graphics/pgf/contrib/pgf-umlsd/demo/threadbias.tex b/graphics/pgf/contrib/pgf-umlsd/demo/threadbias.tex
new file mode 100644
index 0000000000..f4f8ac7f7f
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/demo/threadbias.tex
@@ -0,0 +1,17 @@
+\begin{sequencediagram}
+ \newthread[blue]{s1}{:Server1}
+ \newinst{db}{:Database}
+ \newthread[red]{s2}{:Server2}
+
+ \begin{call}{s1}{reading}{db}{data}
+ \postlevel
+ \end{call}
+
+ \prelevel\prelevel
+
+ \setthreadbias{east}
+
+ \begin{call}{s2}{reading}{db}{data}
+ \postlevel
+ \end{call}
+\end{sequencediagram}
diff --git a/graphics/pgf/contrib/pgf-umlsd/diagrams.pdf b/graphics/pgf/contrib/pgf-umlsd/diagrams.pdf
new file mode 100644
index 0000000000..5e5269184d
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/diagrams.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-umlsd/logo.png b/graphics/pgf/contrib/pgf-umlsd/logo.png
new file mode 100644
index 0000000000..6f77296cd2
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/logo.png
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.pdf b/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.pdf
new file mode 100644
index 0000000000..002c7d4eab
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.tex b/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.tex
new file mode 100644
index 0000000000..8d3bcf39cb
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd-manual.tex
@@ -0,0 +1,192 @@
+% Manual of pgf-umlsd.sty, a convenient set of macros for drawing UML
+% sequence diagrams.
+% Written by Xu Yuan <xuyuan.cn@gmail.com> from
+% Southeast University, China.
+% This file is part of pgf-umlsd
+% you may get it at http://code.google.com/p/pgf-umlsd/
+
+\documentclass{article}
+\usepackage[margin=12mm]{geometry}
+\usepackage{hyperref}
+
+\usepackage[underline=true,rounded corners=false]{pgf-umlsd}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{listings}
+\usepackage{color}
+\definecolor{listinggray}{gray}{0.92}
+\lstset{ %
+language=[LaTeX]TeX,
+breaklines=true,
+frame=single,
+% frameround=tttt,
+basicstyle=\footnotesize\ttfamily,
+backgroundcolor=\color{listinggray},
+keywordstyle=\color{blue}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hypersetup{
+ colorlinks=true,
+ linkcolor=blue,
+ anchorcolor=black,
+ citecolor=olive,
+ filecolor=magenta,
+ menucolor=red,
+ urlcolor=blue
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\demo}[2][1]{
+ \begin{center}
+ \begin{tabular}{cc}
+ \begin{minipage}{.49\linewidth}
+ \centering
+ \resizebox{#1\linewidth}{!}{
+ \input{demo/#2}
+ }
+ \end{minipage}
+ &
+ \begin{minipage}{.45\linewidth}
+ \lstinputlisting{demo/#2}
+ \end{minipage}
+ \end{tabular}
+ \end{center}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\example}[2][1]{
+ \begin{center}
+ \resizebox{#1\linewidth}{!}{
+ \input{demo/#2}
+ }
+ \end{center}
+ \lstinputlisting{demo/#2}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{Drawing UML Sequence Diagram by using \texttt{pgf-umlsd}}
+\author{\href{mailto:xuyuan.cn@gmail.com}{Yuan Xu}}
+\date{\today{}~(v0.7)}
+\maketitle
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{abstract}
+ \texttt{pgf-umlsd} is a LaTeX package for drawing UML Sequence
+ Diagrams. As stated by its name, it is based on a very popular
+ graphic package \texttt{PGF/TikZ}. This document presents the usage
+ of \texttt{pgf-umlsd} and collects some UML sequence diagrams as
+ examples. \texttt{pgf-umlsd} can be downloaded from
+ \href{http://code.google.com/p/pgf-umlsd/}{http://code.google.com/p/pgf-umlsd/}.
+\end{abstract}
+
+\tableofcontents
+
+\section{The Essentials}
+\subsection{Basic graphics objects}
+\subsubsection{empty diagram}
+\demo{empty}
+
+\subsubsection{thread}
+\demo[0.3]{thread}
+
+\subsubsection{instance}
+\demo[0.3]{instance}
+
+\subsubsection{distance between threads and instances}
+\demo{distance}
+
+\subsubsection{customization}
+The package has two options for customization: \texttt{underline} and
+\texttt{rounded corners}, further customization see the example below:
+
+\demo{customize}
+
+
+\subsection{Call}
+\subsubsection{call}
+\demo[0.6]{call}
+
+\subsubsection{call self}
+\demo[0.6]{callself}
+
+\subsubsection{message call}
+\demo[0.6]{messcall}
+
+\subsubsection{nested call}
+\demo[0.6]{nested-call}
+
+\subsection{Message}
+\demo[0.6]{message}
+
+Sometimes however, it takes a considerable amount of time to reach the
+receiver (relatively speaking of course) . For example, a message
+across a network. Such a non-instantaneous message is drawn as a
+slanted arrow.
+
+\demo[0.6]{non-instantaneous-message}
+
+\subsection{Block}
+\demo[0.6]{block}
+
+\section{Manually adjustment}
+The idea of \texttt{pgf-umlsd} is users only have to write the logic
+of diagram, the program generates figure automatically. However, the
+package can not handle all the use case, it still needs to be adjusted
+manually.
+
+\subsection{Level}
+If the text on the arrows is more than one line (large function name
+for example) it will overlap other things. \texttt{postlevel} can be
+used to make the time (level) later.
+
+\demo[0.6]{postlevel}
+
+In the situation of multi-threads, some events happen at the same
+time. \texttt{prelevel} can make the call earlier.
+
+\demo[0.6]{prelevel}
+
+\subsection{Bias of thread line}
+In the situation of multi-threads, the instance cen be accessed at the
+same time (e.g. two threads reading data at the same time). Currently,
+we have to adjust the bias of thread line manually for this. Possible
+parameters for \texttt{setthreadbias} are: \texttt{center},
+\texttt{west} and \texttt{east}.
+
+\demo[0.8]{threadbias}
+
+\section{Examples}
+\subsection{Single thread}
+\example[0.8]{single-thread-example}
+
+\subsection{Multi-threads}
+\example[0.8]{multi-threads-example}
+
+\subsection{Annotation}
+\example[0.5]{sync-clock}
+
+\subsection{Known Issue}
+\texttt{pgf-umlsd} confilts with tikz \texttt{backgrounds} library.
+
+\section{Acknowledgements}
+Many people contributed to \texttt{pgf-umlsd} by reporting problems,
+suggesting various improvements or submitting code. Here is a list of
+these people:
+\href{mailto:nobel1984@gmail.com}{Nobel Huang},
+\href{mailto:humbert@uni-wuppertal.de}{Dr. Ludger Humbert},
+\href{mailto:MathStuf@gmail.com}{MathStuf},
+\href{mailto:vlado.handziski@gmail.com}{Vlado Handziski},
+\href{mailto:frankmorgner@gmail.com}{Frank Morgner},
+and \href{mailto:petrautzki@hs-coburg.de}{Dirk Petrautzki}.
+
+\end{document}
+%%% Local Variables:
+%%% mode: Tex-PDF
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd.sty b/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd.sty
new file mode 100644
index 0000000000..99847db73b
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-umlsd/pgf-umlsd.sty
@@ -0,0 +1,329 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Start of pgf-umlsd.sty
+%
+% Some macros for UML Sequence Diagrams.
+% Home page of project: http://pgf-umlsd.googlecode.com/
+% Author: Xu Yuan <xuyuan.cn@gmail.com>, Southeast University, China
+% Contributor: Nobel Huang <nobel1984@gmail.com>, Southeast University, China
+%
+% History:
+% v0.7 2012/03/05
+% - unify interface of call and callself
+% - non-instantaneous message
+% - bugfix: conflits with tikz library backgrounds
+% v0.6 2011/07/27
+% - Fix Issue 6 reported by frankmorgner@gmail.com
+% - diagram without a thread
+% - allows empty diagram
+% - New manual
+% v0.5 2009/09/30 Fix Issue 2 reported by vlado.handziski
+% - Nested callself is supported
+% - Rename sdloop and sdframe to sdblock
+% v0.4 2008/12/08 Fix Issue 1 reported by MathStuf:
+% Nested sdloop environment hides outer loop
+% v0.3 2008/11/10 in Berlin, fix for the PGF cvs version:
+% - the list items in \foreach are not evaluated by default now,
+% the `evaluate' opinion should be used
+% v0.2 2008/03/20 create project at http://pgf-umlsd.googlecode.com/
+% - use `shadows' library
+% Thanks for Dr. Ludger Humbert's <humbert@uni-wuppertal.de> feedback!
+% - reduce the parameter numbers, the user can write the content
+% of instance (such as no colon)
+% - the user can redefine the `inststyle'
+% - new option: switch underlining of the instance text
+% - new option: switch rounded corners
+% v0.1 2008/01/25 first release at http://www.fauskes.net/pgftikzexamples/
+%
+
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{pgf-umlsd}[2011/07/27 v0.6 Some LaTeX macros for UML
+Sequence Diagrams.]
+
+\RequirePackage{tikz}
+\usetikzlibrary{arrows,shadows}
+
+\RequirePackage{ifthen}
+
+% Options
+% ? the instance name under line ?
+\newif\ifpgfumlsdunderline\pgfumlsdunderlinetrue
+\DeclareOption{underline}{\pgfumlsdunderlinetrue}
+\DeclareOption{underline=true}{\pgfumlsdunderlinetrue}
+\DeclareOption{underline=false}{\pgfumlsdunderlinefalse}
+% ? the instance box with rounded corners ?
+\newif\ifpgfumlsdroundedcorners\pgfumlsdroundedcornersfalse
+\DeclareOption{roundedcorners}{\pgfumlsdroundedcornerstrue}
+\DeclareOption{roundedcorners=true}{\pgfumlsdroundedcornerstrue}
+\DeclareOption{roundedcorners=false}{\pgfumlsdroundedcornersfalse}
+\ProcessOptions
+
+% new counters
+\newcounter{preinst}
+\newcounter{instnum}
+\newcounter{threadnum}
+\newcounter{seqlevel} % level
+\newcounter{callevel}
+\newcounter{callselflevel}
+\newcounter{blocklevel}
+
+% new an instance
+% Example:
+% \newinst[edge distance]{var}{name:class}
+\newcommand{\newinst}[3][0.2]{
+ \stepcounter{instnum}
+ \path (inst\thepreinst.east)+(#1,0) node[inststyle] (inst\theinstnum)
+ {\ifpgfumlsdunderline
+ \underline{#3}
+ \else
+ #3
+ \fi};
+ \path (inst\theinstnum)+(0,-0.5*\unitfactor) node (#2) {};
+ \tikzstyle{instcolor#2}=[]
+ \stepcounter{preinst}
+}
+
+% new an instance thread
+% Example:
+% \newinst[color]{var}{name}{class}
+\newcommand{\newthread}[3][gray!30]{
+ \newinst{#2}{#3}
+ \stepcounter{threadnum}
+ \node[below of=inst\theinstnum,node distance=0.8cm] (thread\thethreadnum) {};
+ \tikzstyle{threadcolor\thethreadnum}=[fill=#1]
+ \tikzstyle{instcolor#2}=[fill=#1]
+}
+
+% draw running (thick) line, should not call directly
+\newcommand*{\drawthread}[2]{
+ \begin{pgfonlayer}{umlsd@threadlayer}
+ \draw[threadstyle] (#1.west) -- (#1.east) -- (#2.east) -- (#2.west) -- cycle;
+ \end{pgfonlayer}
+}
+
+% a function call
+% Example:
+% \begin{call}[height]{caller}{function}{callee}{return}
+% \end{call}
+\newenvironment{call}[5][1]{
+\ifthenelse{\equal{#2}{#4}}
+{
+ \begin{callself}[#1]{#2}{#3}{#5}
+}
+{
+ \begin{callanother}[#1]{#2}{#3}{#4}{#5}
+}
+}
+{
+\ifthenelse{\equal{\f\thecallevel}{\t\thecallevel}}
+{
+ \end{callself}
+}
+{
+ \end{callanother}
+}
+}
+
+% function call to another instance
+% interal use only
+\newenvironment*{callanother}[5][1]{
+ \stepcounter{seqlevel}
+ \stepcounter{callevel} % push
+ \path
+ (#2)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (cf\thecallevel) {}
+ (#4.\threadbias)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (ct\thecallevel) {};
+
+ \draw[->,>=triangle 60] ({cf\thecallevel}) -- (ct\thecallevel)
+ node[midway, above] {#3};
+ \def\l\thecallevel{#1}
+ \def\f\thecallevel{#2}
+ \def\t\thecallevel{#4}
+ \def\returnvalue{#5}
+ \tikzstyle{threadstyle}+=[instcolor#2]
+}
+{
+ \addtocounter{seqlevel}{\l\thecallevel}
+ \path
+ (\f\thecallevel)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (rf\thecallevel) {}
+ (\t\thecallevel.\threadbias)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (rt\thecallevel) {};
+ \draw[dashed,->,>=angle 60] ({rt\thecallevel}) -- (rf\thecallevel)
+ node[midway, above]{\returnvalue};
+ \drawthread{ct\thecallevel}{rt\thecallevel}
+ \addtocounter{callevel}{-1} % pop
+}
+
+% a function do not need call others
+% interal use only
+% Example:
+% \begin{callself}[height]{caller}{function}{return}
+% \end{callself}
+\newenvironment*{callself}[4][1]{
+ \stepcounter{seqlevel}
+ \stepcounter{callevel} % push
+ \stepcounter{callselflevel}
+
+ \path
+ (#2)+(\thecallselflevel*0.1-0.1,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (sc\thecallevel) {}
+ ({sc\thecallevel}.east)+(0,-0.33*\unitfactor) node (scb\thecallevel) {};
+
+ \draw[->,>=triangle 60] ({sc\thecallevel}.east) -- ++(0.8,0)
+ node[near start, above right] {#3} -- ++(0,-0.33*\unitfactor)
+ -- (scb\thecallevel);
+ \def\l\thecallevel{#1}
+ \def\f\thecallevel{#2}
+ \def\t\thecallevel{#2}
+ \def\returnvalue{#4}
+ \tikzstyle{threadstyle}+=[instcolor#2]
+}{
+ \addtocounter{seqlevel}{\l\thecallevel}
+ \path (\f\thecallevel)+(\thecallselflevel*0.1-0.1,-\theseqlevel*\unitfactor-0.33*\unitfactor) node
+ (sct\thecallevel) {};
+
+ \draw[dashed,->,>=angle 60] ({sct\thecallevel}.east) node
+ (sce\thecallevel) {} -- ++(0.8,0) -- node[midway, right]{\returnvalue} ++(0,-0.33*\unitfactor) -- ++(-0.8,0);
+ \drawthread{scb\thecallevel}{sce\thecallevel}
+ \addtocounter{callevel}{-1} % pop
+ \addtocounter{callselflevel}{-1}
+}
+
+% message between threads
+% Example:
+% \mess[delay]{sender}{message content}{receiver}
+\newcommand{\mess}[4][0]{
+ \stepcounter{seqlevel}
+ \path
+ (#2)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess from) {};
+ \addtocounter{seqlevel}{#1}
+ \path
+ (#4)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess to) {};
+ \draw[->,>=angle 60] (mess from) -- (mess to) node[midway, above]
+ {#3};
+
+ \node (#3 from) at (mess from) {};
+ \node (#3 to) at (mess to) {};
+}
+
+\newenvironment{messcall}[4][1]{
+ \stepcounter{seqlevel}
+ \stepcounter{callevel} % push
+ \path
+ (#2)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (cf\thecallevel) {}
+ (#4.\threadbias)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (ct\thecallevel) {};
+
+ \draw[->,>=angle 60] ({cf\thecallevel}) -- (ct\thecallevel)
+ node[midway, above] {#3};
+ \def\l\thecallevel{#1}
+ \def\f\thecallevel{#2}
+ \def\t\thecallevel{#4}
+ \tikzstyle{threadstyle}+=[instcolor#2]
+}
+{
+ \addtocounter{seqlevel}{\l\thecallevel}
+ \path
+ (\f\thecallevel)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (rf\thecallevel) {}
+ (\t\thecallevel.\threadbias)+(0,-\theseqlevel*\unitfactor-0.3*\unitfactor) node (rt\thecallevel) {};
+ \drawthread{ct\thecallevel}{rt\thecallevel}
+ \addtocounter{callevel}{-1} % pop
+}
+
+% In the situation of multi-threads, some objects are called at the
+% same time. Currently, we have to adjust the bias of thread line
+% manually. Possible parameters are: center, west, east
+\newcommand{\setthreadbias}[1]{\global\def\threadbias{#1}}
+
+% This function makes the call earlier.
+\newcommand{\prelevel}{\addtocounter{seqlevel}{-1}}
+
+% This function makes the call later.
+\newcommand{\postlevel}{\addtocounter{seqlevel}{+1}}
+
+% a block box with caption
+% \begin{sdblock}[caption background color]{caption}{comments}
+% \end{sdblock}
+\newenvironment{sdblock}[3][white]{
+ \stepcounter{seqlevel}
+ \stepcounter{blocklevel} % push
+ \coordinate (blockbeg\theblocklevel) at (0,-\theseqlevel*\unitfactor-\unitfactor);
+ \stepcounter{seqlevel}
+ \def\blockcolor\theblocklevel{#1}
+ \def\blockname\theblocklevel{#2}
+ \def\blockcomm\theblocklevel{#3}
+ \begin{pgfinterruptboundingbox}
+}{
+ \coordinate (blockend) at (0,-\theseqlevel*\unitfactor-2*\unitfactor);
+ \path (current bounding box.east)+(0.2,0) node (boxeast) {}
+ (current bounding box.west |- {blockbeg\theblocklevel}) + (-0.2,0)
+ node (nw) {};
+ \path (boxeast |- blockend) node (se) {};
+
+ % % title
+ \node[blockstyle] (blocktitle) at (nw) {\blockname\theblocklevel};
+ \path (blocktitle.south east) + (0,0.2) node (set) {}
+ (blocktitle.south east) + (-0.2,0) node (seb) {}
+ (blocktitle.north east) + (0.2,0) node (comm) {};
+ \draw[fill=\blockcolor\theblocklevel] (blocktitle.north west) -- (blocktitle.north east) --
+ (set.center) -- (seb.center) -- (blocktitle.south west) -- cycle;
+ \node[blockstyle] (blocktitle) at (nw) {\blockname\theblocklevel};
+ \node[blockcommentstyle] (blockcomment) at (comm) {\blockcomm\theblocklevel};
+
+ \coordinate (se) at (current bounding box.south east);
+ \end{pgfinterruptboundingbox}
+
+ \draw (se) rectangle (nw);
+
+ \addtocounter{blocklevel}{-1} % pop
+ \stepcounter{seqlevel}
+}
+
+% the environment of sequence diagram
+\newenvironment{sequencediagram}{
+ % declare layers
+ \pgfdeclarelayer{umlsd@background}
+ \pgfdeclarelayer{umlsd@threadlayer}
+ \pgfsetlayers{umlsd@background,umlsd@threadlayer,main}
+
+ \begin{tikzpicture}
+ \setlength{\unitlength}{1cm}
+ \tikzstyle{sequence}=[coordinate]
+ \tikzstyle{inststyle}=[rectangle, draw, anchor=west, minimum
+ height=0.8cm, minimum width=1.6cm, fill=white,
+ drop shadow={opacity=1,fill=black}]
+ \ifpgfumlsdroundedcorners
+ \tikzstyle{inststyle}+=[rounded corners=3mm]
+ \fi
+ \tikzstyle{blockstyle}=[anchor=north west]
+ \tikzstyle{blockcommentstyle}=[anchor=north west, font=\small]
+ \tikzstyle{dot}=[inner sep=0pt,fill=black,circle,minimum size=0.2pt]
+ \global\def\unitfactor{0.6}
+ \global\def\threadbias{center}
+ % reset counters
+ \setcounter{preinst}{0}
+ \setcounter{instnum}{0}
+ \setcounter{threadnum}{0}
+ \setcounter{seqlevel}{0}
+ \setcounter{callevel}{0}
+ \setcounter{callselflevel}{0}
+ \setcounter{blocklevel}{0}
+
+ % origin
+ \node[coordinate] (inst0) {};
+}
+{
+ \begin{pgfonlayer}{umlsd@background}
+ \ifnum\c@instnum > 0
+ \foreach \t [evaluate=\t] in {1,...,\theinstnum}{
+ \draw[dotted] (inst\t) -- ++(0,-\theseqlevel*\unitfactor-2.2*\unitfactor);
+ }
+ \fi
+ \ifnum\c@threadnum > 0
+ \foreach \t [evaluate=\t] in {1,...,\thethreadnum}{
+ \path (thread\t)+(0,-\theseqlevel*\unitfactor-0.1*\unitfactor) node (threadend) {};
+ \tikzstyle{threadstyle}+=[threadcolor\t]
+ \drawthread{thread\t}{threadend}
+ }
+ \fi
+ \end{pgfonlayer}
+\end{tikzpicture}}
+
+
+%%% End of pgf-umlsd.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgfgantt/README b/graphics/pgf/contrib/pgfgantt/README
new file mode 100644
index 0000000000..b46f25054c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfgantt/README
@@ -0,0 +1,19 @@
+The pgfgantt package v5.0
+------------------------------------------------------------------------------
+This package is released under the LaTeX Project Public License v1.3c or later
+(see http://www.latex-project.org/lppl.txt).
+
+
+The pgfgantt package provides the ganttchart environment, which
+draws a Gantt chart within a TikZ picture. The user may add various
+elements to the chart, for example, titles, bars, groups, milestones and different
+links between these elements. The appearance of the chart elements
+is highly customizable, and even new chart elements may be defined.
+
+The package makes use of pgf/TikZ (http://tug.ctan.org/pkg/pgf).
+
+Installation: Run pgfgantt.ins through LaTeX and follow the instructions.
+
+--
+Wolfgang Skala
+10th January 2018
diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx b/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx
new file mode 100644
index 0000000000..7bb4d52138
--- /dev/null
+++ b/graphics/pgf/contrib/pgfgantt/pgfgantt.dtx
@@ -0,0 +1,5402 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2018 by Wolfgang Skala
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008/05/04 or later.
+%
+% \fi
+%
+% \iffalse
+%<pgfgantt>\ProvidesPackage{pgfgantt}[2018/01/10 v5.0 Draw Gantt diagrams with TikZ]
+%<pgfgantt>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%
+%<*driver>
+\documentclass[captions=tableheading,cleardoublepage=empty]{scrartcl}
+\usepackage[ngerman,english]{babel}
+ \addto\extrasenglish{\extrasngerman}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[hdivide={2cm,*,5cm}]{geometry}
+\usepackage{url}
+\usepackage[dvipsnames]{xcolor}
+\usepackage{listings}
+\usepackage{array,booktabs}
+ \lstset{
+ language=[AlLaTeX]TeX,
+ basicstyle=\ttfamily,
+ texcsstyle=*\color{RoyalBlue},
+ keywordstyle=\color{Maroon},
+ commentstyle=\itshape\color{black!50},
+ columns=fullflexible,
+ keepspaces=true,
+ backgroundcolor=\color{black!5},
+ tabsize=2,
+ gobble=2,
+ frame=tlrb,
+ framesep=.25em,
+ xleftmargin=.25em,
+ xrightmargin=.25em,
+ rulecolor=\color{white},
+ alsoletter={*},
+ morekeywords={ganttchart,tikzpicture,tabular},
+ moretexcs={
+ ganttalignnewline,gantttitle,gantttitlelist,gantttitlecalendar,
+ gantttitlecalendar*,ganttbar,ganttlink,ganttlinkedgroup,
+ ganttlinkedbar,ganttmilestone,ganttlinkedmilestone,ganttgroup,
+ ganttset,ganttnewline,textcolor,foreach,draw,
+ pgfcalendarweekdayshortname,usetikzlibrary,
+ color,rotatebox,definecolor,sfdefault,mddefault,bfdefault,fcolorbox,
+ newganttlinktype,newganttlinktypealias,setganttlinklabel,
+ ganttsetstartanchor,ganttsetendanchor,xLeft,xRight,yUpper,yLower,
+ ganttlinklabel,ganttvalueof,pgfcalendarweekdayname,pgfcalendarweekdayletter,
+ pgfcalendarmonthshortname,currentweek,startyear,startmonth,startday,x,y,
+ pgfcalendarweekday,pgfcalendarmonth,newgantttimeslotformat,pgfcalendardatetojulian,
+ newganttchartelement,newganttchartelement*,gantt,ganttlinked,ganttfoobar,ganttlinkedfoobar,ganttvrule
+ },
+ escapeinside=`',
+ escapebegin=\begin{rmfamily},
+ escapeend=\end{rmfamily},
+ emph={list},
+ emphstyle=\color{black},
+ }
+ \lstnewenvironment{texcode}[1][]{\lstset{basicstyle=\small\ttfamily,#1}}{}
+\usepackage{doc}
+ \setlength\MacroIndent{0pt}
+ \setlength\MacroTopsep\parskip
+ \setlength\MacrocodeTopsep\medskipamount
+ \def\MacroFont{\small\ttfamily}
+ \def\theCodelineNo{\sffamily\scriptsize\color{black!50}\arabic{CodelineNo}}
+ \setcounter{IndexColumns}{2}
+ \def\pack#1{\textsf{#1}}
+ \def\main#1{\textit{#1}}
+ \def\usage#1{\textbf{#1}}
+ \def\opt#1{\textcolor{OliveGreen}{\texttt{#1}}}
+ \providecommand\marg[1]{{\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
+ \providecommand\oarg[1]{{\ttfamily[}\meta{#1}{\ttfamily]}}
+ \def\PrintDescribeMacro#1{\strut\MacroFont\color{RoyalBlue}\string#1}
+ \def\PrintDescribeEnv#1{\strut\MacroFont\color{Maroon}#1}
+ \def\PrintDescribeOpt#1{\strut\MacroFont\color{OliveGreen}#1}
+ \def\PrintMacroName#1{\strut\MacroFont\color{RoyalBlue}\string#1}
+ \def\PrintEnvName#1{\strut\MacroFont\color{Maroon}#1}
+ \def\PrintOptName#1{\strut\MacroFont\color{OliveGreen}#1}
+ \def\PrintIntMacroName#1{\strut\MacroFont\string#1}
+
+\makeatletter
+\def\page@wrindex#1{\if@filesw
+ \immediate\write\@indexfile
+ {\string\indexentry{#1}%
+ {\thepage}}\fi}
+
+\def\SpecialUsageIndex#1{\@bsphack
+ {\let\special@index\page@wrindex\SpecialIndex@{#1}{\encapchar usage}}%
+ \@esphack}
+\def\SpecialEnvIndex#1{\@bsphack\page@wrindex{%
+ #1\actualchar
+ {\string\ttfamily\space#1}
+ (environment)%
+ \encapchar usage}%
+ \page@wrindex{environments:\levelchar#1\actualchar{%
+ \string\ttfamily\space#1}\encapchar
+ usage}\@esphack}
+\def\SpecialOptIndex#1{\@bsphack\page@wrindex{%
+ #1\actualchar
+ {\string\ttfamily\space#1}
+ (option)%
+ \encapchar usage}%
+ \page@wrindex{options:\levelchar#1\actualchar{%
+ \string\ttfamily\space#1}\encapchar
+ usage}\@esphack}
+\def\SpecialMainOptIndex#1{\@bsphack\special@index{%
+ #1\actualchar
+ {\string\ttfamily\space#1}
+ (option)%
+ \encapchar main}%
+ \special@index{options:\levelchar#1\actualchar{%
+ \string\ttfamily\space#1}\encapchar
+ main}\@esphack}
+
+\def\DescribeOpt{\Describe@Opt}
+\def\Describe@Macro#1{\endgroup
+ \marginpar{\rlap{\raggedright\PrintDescribeMacro{#1}}}%
+ \SpecialUsageIndex{#1}\@esphack\ignorespaces}
+\def\Describe@Env#1{\endgroup
+ \marginpar{\rlap{\raggedright\PrintDescribeEnv{#1}}}%
+ \SpecialEnvIndex{#1}\@esphack\ignorespaces}
+\def\Describe@Opt#1{\SpecialOptIndex{#1}\ignorespaces}
+
+\def\macro{\begingroup
+ \catcode`\\12
+ \MakePrivateLetters \m@cro@ 1}
+\def\environment{\begingroup
+ \catcode`\\12
+ \MakePrivateLetters \m@cro@ 2}
+\def\option{\begingroup
+ \catcode`\\12
+ \MakePrivateLetters \m@cro@ 3}
+\def\intmacro{\begingroup
+ \catcode`\\12
+ \MakePrivateLetters \m@cro@ 4}
+\long\def\m@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
+ \edef\saved@macroname{\string#2}%
+ \def\makelabel##1{\rlap{\hskip5pt\hskip\textwidth\hskip\marginparsep##1}}%
+ \if@inlabel
+ \let\@tempa\@empty \count@\macro@cnt
+ \loop \ifnum\count@>\z@
+ \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
+ \edef\makelabel##1{\rlap{\hskip5pt\hskip\textwidth\hskip\marginparsep\vtop to\baselineskip
+ {\@tempa\hbox{##1}\vss}}}%
+ \advance \macro@cnt \@ne
+ \else \macro@cnt\@ne \fi
+ \edef\@tempa{\noexpand\item[%
+ \ifcase #1\or%
+ \noexpand\PrintMacroName
+ \or
+ \noexpand\PrintEnvName
+ \or
+ \noexpand\PrintOptName
+ \or
+ \noexpand\PrintIntMacroName
+ \fi
+ {\string#2}]}%
+ \@tempa
+ \global\advance\c@CodelineNo\@ne
+ \ifcase #1\or%
+ \SpecialMainIndex{#2}\nobreak
+ \DoNotIndex{#2}%
+ \or
+ \SpecialMainEnvIndex{#2}\nobreak
+ \or
+ \SpecialMainOptIndex{#2}\nobreak
+ \or
+ \SpecialMainIndex{#2}\nobreak
+ \DoNotIndex{#2}%
+ \fi
+ \global\advance\c@CodelineNo\m@ne
+ \ignorespaces}
+\let\endoption\endmacro
+\let\endintmacro\endmacro
+\renewenvironment{theglossary}{\glossary@prologue\GlossaryParms\let\item\@idxitem\ignorespaces}{}
+\makeatother
+
+\AtBeginDocument{\lstMakeShortInline|}
+
+\begingroup
+ \makeatletter
+ \def\x\begingroup#1\@nil{%
+ \endgroup
+ \def\DoNotIndex{%
+ \begingroup
+ \@makeother\#%
+ \@makeother\$%
+ \@makeother\%%
+ \@makeother\^%
+ \@makeother\_%
+ \@makeother\~%
+ \@makeother\ %
+ \@makeother\&%
+ #1%
+ }%
+ }%
+\expandafter\x\DoNotIndex\@nil
+
+\usepackage[
+ hyperfootnotes=false,
+ bookmarksnumbered,%
+ bookmarksopen,%
+ bookmarksopenlevel=1,%
+ breaklinks,%
+ linktocpage,%
+ pdfborder={0 0 0},%
+ pdfhighlight=/N%
+]{hyperref}%
+
+\makeatletter
+\newsavebox\keybox
+\newcommand\keyline[4][=]{%
+ \savebox\keybox{\texttt{\textcolor{OliveGreen!50}{/pgfgantt/}\textcolor{OliveGreen}{#2}\space#1}#3}%
+ \noindent\DescribeOpt{#2}\usebox\keybox%
+ \settowidth\@tempdimb{\texttt{#4}}%
+ \@tempdima=\textwidth\relax%
+ \advance\@tempdima by-\wd\keybox\relax%
+ \advance\@tempdima by-5mm\relax%
+ \ifdim\@tempdima<\@tempdimb\relax\\\fi%
+ \hspace*{\fill}\texttt{#4}%
+ \par\noindent\ignorespaces%
+}
+\makeatother
+\newenvironment{key}[4][=]{%
+ \bigskip%
+ \keyline[#1]{#2}{#3}{#4}%
+}{}
+\def\TikZ{Ti\textit{k}Z}
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+
+\def\GlossaryParms{%
+ \def\pfill##1{}
+ \parindent 0pt
+ \parskip 0pt plus 1pt
+ \small\raggedright
+ \def\@idxitem{\par\hangindent 30pt}%
+ \def\subitem{\@idxitem\hspace*{15pt}}%
+ \def\subsubitem{\@idxitem\hspace*{25pt}}%
+ \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
+}
+
+\usepackage{pgfgantt}
+
+\usetikzlibrary{shadows,shadings,decorations.pathmorphing,shapes.misc}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\IndexPrologue{\clearpage\section{Index}\markboth{Index}{Index}Bold numbers refer to the page where the corresponding entry is described; italic numbers refer to the code line of the definition; upright numbers refer to the code lines where the entry is used.}
+\GlossaryPrologue{\clearpage\section{Change History}\markboth{Change history}{Change history}}
+
+
+\setkomafont{title}{\rmfamily\bfseries}
+\addtokomafont{sectioning}{\rmfamily}
+\normalmarginpar
+\pdfpageattr{/Group <</S /Transparency /I true /CS /DeviceRGB>>}
+
+\begin{document}
+ \DocInput{pgfgantt.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{2245}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \GetFileInfo{pgfgantt.sty}
+%
+% \DoNotIndex{\@auxout,\@empty,\@firstoftwo,\@ifundefined,\@namedef,\@nameuse,\@tempa,\@tempb,\@tempc,\@tempcnta,\@tempcntb,\@tempdima,\advance,\anchor,\backgroundpath,\begin,\begingroup,\bfseries,\breakforeach,\clip,\csname,\def,\divide,\draw,\edef,\else,\end,\endcsname,\endgroup,\expandafter,\fi,\foreach,\global,\i,\ifcase,\ifdate,\ifdim,\ifnum,\ifx,\inheritanchor,\inheritanchorborder,\inheritbackgroundpath,\inheritsavedanchors,\itshape,\kernel@ifnextchar,\let,\multiply,\newcommand,\newcount,\newenvironment,\newif,\node,\normalcolor,\normalfont,\normalsize,\northeast,\outernortheast,\PackageError,\PackageWarning,\path,\pgf@process,\pgf@x,\pgf@y,\pgf@xa,\pgf@xb,\pgf@xc,\pgf@ya,\pgf@yb,\pgf@yc,\pgfcalendar,\pgfcalendarbeginjulian,\pgfcalendarcurrentday,\pgfcalendarcurrentjulian,\pgfcalendarcurrentmonth,\pgfcalendarcurrentweekday,\pgfcalendarcurrentyear,\pgfcalendardatetojulian,\pgfcalendarendiso,\pgfcalendarifdateday,\pgfcalendarifdatemonth,\pgfcalendarifdateyear,\pgfcalendarjuliantodate,\pgfcalendarmatchestrue,\pgfdeclareshape,\pgfextractx,\pgfkeys,\pgfkeyscurrentname,\pgfkeyssetvalue,\pgfkeysvalueof,\pgfmathparse,\pgfmathprintnumber,\pgfmathresult,\pgfmathsetlength,\pgfmathsetmacro,\pgfpathclose,\pgfpathlineto,\pgfpathmoveto,\pgfpoint,\pgfpointadd,\pgfpointanchor,\pgfpointdiff,\pgfpointscale,\pgfqkeys,\protected@write,\relax,\RequirePackage,\savedanchor,\scriptsize,\setcounter,\small,\southwest,\stepcounter,\string,\strut,\t,\the,\tikz@align@newline,\usetikzlibrary,\value,\x,\xdef}
+%
+%
+% \title{Drawing Gantt Charts in \LaTeX\\with \TikZ}
+% \subtitle{The \texttt{pgfgantt} Package}
+% \author{Wolfgang Skala\thanks{Department of Biosciences, University of Salzburg, Austria; \texttt{Wolfgang.Skala@sbg.ac.at}}}
+% \date{\fileversion\\\filedate}
+% \maketitle
+%
+% \begin{abstract}
+% The \pack{pgfgantt} package provides the |ganttchart| environment, which draws a Gantt chart within a \TikZ\ picture. The user may add various elements to the chart, for example, titles, bars, groups, milestones and different links between these elements. The appearance of the chart elements is highly customizable, and even new chart elements may be defined.
+% \end{abstract}
+%
+% \clearpage\tableofcontents
+% \changes{v5.0}{2018/01/10}{\cs{gantttitlecalendar} now recognizes the \texttt{decade} key.}
+% \changes{v5.0}{2018/01/10}{Key \texttt{compress calendar} has been replaced by \texttt{time slot unit} to allow an additional level of compression (year).}
+% \changes{v5.0}{2018/01/10}{The command \cs{ganttvrule} allows to draw general vertical rules (similar to the today rule). The keys \texttt{vrule}, \texttt{vrule offset}, \texttt{vrule label font} and \texttt{vrule label text} configure those rules.}
+% \changes{v5.0}{2018/01/10}{The key \texttt{expand chart} was added, which specifies that a chart should expand horizontally to a given dimension.}
+% \changes{v5.0}{2018/01/10}{The key \texttt{title label text} was added to allow fine-tuning of title label formatting.}
+% \changes{v5.0}{2018/01/10}{Made \pack{pgfgantt} robust to \pack{amsgen}'s redefinition of \cs{@ifstar}.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{link label anchor} was renamed to \texttt{link label node}.}
+% \changes{v4.0}{2013/06/01}{\cs{newganttchartelement} defines completely new chart elements.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{progress label anchor} was replaced by \texttt{bar}/\texttt{group}/\texttt{milestone progress label node}.}
+% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone progress label anchor} were added.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{progress label font} was replaced by the keys \texttt{bar}/\texttt{group}/\texttt{milestone progress label font}.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{incomplete} was removed.}
+% \changes{v4.0}{2013/06/01}{The keys \texttt{group right}/\texttt{left peak} and \texttt{group peaks} were replaced by \texttt{group right}/\texttt{left peak tip position}, \texttt{group peaks tip position}, \texttt{group right}/\texttt{left peak width}, \texttt{group peaks width}, \texttt{group right}/\texttt{left peak height} and \texttt{group peaks height}.}
+% \changes{v4.0}{2013/06/01}{Chart elements are now nodes, so the corresponding styles must specify a node shape.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{time slot modifier} was renamed to \texttt{chart element start border}.}
+% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label inline anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone inline label node}.}
+% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label shape anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone inline label anchor}.}
+% \changes{v4.0}{2013/06/01}{The keys \texttt{bar}/\texttt{group}/\texttt{milestone label anchor} were renamed to \texttt{bar}/\texttt{group}/\texttt{milestone label node}.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{title label anchor} was renamed to \texttt{title label node}.}
+% \changes{v4.0}{2013/06/01}{\cs{gantttitlecalendar} prints a title calendar.}
+% \changes{v4.0}{2013/06/01}{The keys \texttt{calendar week text} and \texttt{compress calendar} were added.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{newline shortcut} determines whether the shortcut for line breaks is defined in the chart. In this case, \cs{ganttalignnewline} allows line breaks in the node text.}
+% \changes{v4.0}{2013/06/01}{The keys \texttt{today offset}, \texttt{today label font} and \texttt{today label node} were added.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{today} accepts a time slot specifier.}
+% \changes{v4.0}{2013/06/01}{The canvas is now a node with shape \texttt{rectangle} by default.}
+% \changes{v4.0}{2013/06/01}{\cs{newgantttimeslotformat} allows the user to define custom time slot formats.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format/start date} specifies the internal date representation of digit 1 in the \texttt{simple} time slot format.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format/base century} provides the century for autocompletion of two-digit years.}
+% \changes{v4.0}{2013/06/01}{The key \texttt{time slot format} changes the format of time slot specifiers.}
+% \changes{v4.0}{2013/06/01}{The \texttt{ganttchart} environment now requires two mandatory arguments.}
+%
+% \changes{v3.0}{2012/01/25}{\cs{setganttlinklabel} specifies the label for all links of a certain type. The \texttt{link label} key locally overrides any label set by this command.}
+% \changes{v3.0}{2012/01/25}{The \texttt{chart element} shape supports four additional anchors (\texttt{on left}, \texttt{on top}, \texttt{on right} and \texttt{on bottom}).}
+% \changes{v3.0}{2012/01/25}{\cs{@gtt@get} has been renamed to \cs{ganttvalueof} to provide a convenient access for link type authors.}
+% \changes{v3.0}{2012/01/25}{\cs{@gtt@keydef} and \cs{@gtt@stylekeydef} have been rewritten to support \texttt{pgfkey}'s abilities to store key values.}
+% \changes{v3.0}{2012/01/25}{New auxiliary macros for \cs{newganttlinkstyle}: \cs{xLeft}, \cs{xRight}, \cs{yUpper}, \cs{yLower}, \cs{ganttsetstartanchor}, \cs{ganttsetendanchor} and \cs{ganttlinklabel}.}
+% \changes{v3.0}{2012/01/25}{Completely rewrote the code for links (again). Definition of new link types is now possible (via \cs{newganttlinktype} and \cs{newganttlinktypealias}).}
+% \changes{v3.0}{2012/01/25}{The \texttt{bar/group/milestone label shape anchor} keys allow for a fine-tuned placement of chart element labels.}
+% \changes{v3.0}{2012/01/25}{All style keys (\texttt{canvas}, \texttt{bar} etc.) only support the common \TikZ\ style key syntax.}
+% \changes{v2.1}{2011/11/10}{The \texttt{inline} key moves labels close to their respective chart elements.}
+% \changes{v2.1}{2011/11/10}{Added three keys (\texttt{bar/group/milestone label inline anchor}) for placing inline labels.}
+% \changes{v2.1}{2011/11/10}{The \texttt{ganttchart} environment may be used outside a \texttt{tikzpicture}.}
+% \changes{v2.0}{2011/10/10}{The syntax of \cs{ganttlink} was completely changed. The command now takes one optional and \textit{two} mandatory arguments. The latter specify the name of the chart elements to be linked. Consequently, the keys \texttt{b-b}, \texttt{b-m}, \texttt{m-b} and \texttt{m-m} were removed. The keys \texttt{s-s}, \texttt{s-f}, \texttt{f-s} and \texttt{f-f} are now values for the \texttt{link type} key.}
+% \changes{v2.0}{2011/10/10}{The optional argument of \cs{ganttnewline} now also accepts a style.}
+% \changes{v2.0}{2011/10/10}{Removed the \texttt{hgrid shift} and \texttt{last line height} keys.}
+% \changes{v2.0}{2011/10/10}{Removed the \texttt{vgrid lines list} key, as its behaviour can be simulated by an appropriate \meta{style list} for \texttt{vgrid}.}
+% \changes{v2.0}{2011/10/10}{Added style lists for the horizontal and vertical grid.}
+% \changes{v2.0}{2011/10/10}{Removed the \texttt{vgrid style} key.}
+% \changes{v2.0}{2011/10/10}{Completely rewrote the calculation of coordinates.}
+% \changes{v2.0}{2011/10/10}{The \texttt{x unit}, \texttt{y unit title} and \texttt{y unit chart} keys specify the width of time slots and the height of title or chart lines, respectively. Thus, one can draw titles whose height differs from the rest of the chart. Furthermore, the $x$- and $y$-dimensions of the chart are independent of the dimensions of the surrounding \texttt{tikzpicture}.}
+% \changes{v1.1}{2011/04/18}{\texttt{link tolerance} decides whether a five- or a three-part link is drawn.}
+% \changes{v1.1}{2011/04/18}{\texttt{milestone label text} configures the text of a milestone label.}
+% \changes{v1.1}{2011/04/18}{\texttt{bar label text} configures the text of a bar label.}
+% \changes{v1.1}{2011/04/18}{The \texttt{time slot modifier} key has been added. If set to zero, all $x$-coordinates are interpreted as given, without regarding them as time slots.}
+% \changes{v1.1}{2011/04/18}{The \texttt{vgrid lines list} key determines the number of vertical grid lines drawn.}
+% \changes{v1.1}{2011/04/18}{The introduction clarifies what I mean by ``a current \textsc{pgf} installation''.}
+% \changes{v1.1}{2011/04/18}{\texttt{group label text} configures the text of a group label.}
+% \changes{v1.0}{2011/03/01}{Initial release}
+%
+%
+% \clearpage\section{Introduction}
+%
+% The \pack{pgfgantt} package allows you to draw Gantt charts in \LaTeX. Thus, you can describe simple project schedules without having to include images produced by external programs. Similar to Martin Kumm's \pack{gantt} package\footnote{\url{http://www.martin-kumm.de/tex_gantt_package.php}} (which inspired \pack{pgfgantt}'s fundamental aspects), \pack{pgfgantt} bases upon \textsc{pgf} and its \TikZ\ frontend\footnote{\url{http://ctan.org/tex-archive/graphics/pgf/}}. Besides, it provides a comprehensive (and portable) alternative to \pack{pst-gantt}\footnote{\url{http://ctan.org/tex-archive/graphics/pstricks/contrib/pst-gantt/}}.
+%
+% \paragraph{Requirements} \pack{pgfgantt} requires a \textit{current} \textsc{pgf} installation. Note that the version number must at least be 2.10, dated October 25th, 2010. Furthermore, \pack{pgfgantt}~\fileversion\ and above is not fully downwards compatible.
+%
+% \paragraph{Suggestions} Please report any suggestions and improvements at the project's GitHub page (\url{https://github.com/skafdasschaf/latex-pgfgantt}).
+%
+% \paragraph{Acknowledgements} I would like to thank the following people for their ideas concerning new features:
+% Christian Buhtz,
+% Rapha\"el Clifford (University of Bristol),
+% Jakob D\o llner M\o nster (Technical University of Denmark),
+% Holger Karl (Universität Paderborn),
+% Tristan Miller (Technische Universität Darmstadt),
+% Scott Pakin (Los Alamos National Laboratory),
+% Petr Po\v s\'ik (Czech Technical University in Prague),
+% Una Smith,
+% Sascha Yousefi (Universität Freiburg),
+% and Callum Webb.
+%
+%
+% \clearpage\section{User Guide}
+%
+% \subsection{Overview}
+%
+% To load the package, simply put
+% \begin{texcode}
+% \usepackage{pgfgantt}
+% \end{texcode}
+% into the document preamble.
+%
+% Compare the following code, which demonstrates some commands provided by \pack{pgfgantt}, to the output it produces:
+%
+% \begin{texcode}
+% \begin{ganttchart}{1}{12}
+% \gantttitle{2011}{12} \\
+% \gantttitlelist{1,...,12}{1} \\
+% \ganttgroup{Group 1}{1}{7} \\
+% \ganttbar{Task 1}{1}{2} \\
+% \ganttlinkedbar{Task 2}{3}{7} \ganttnewline
+% \ganttmilestone{Milestone}{7} \ganttnewline
+% \ganttbar{Final Task}{8}{12}
+% \ganttlink{elem2}{elem3}
+% \ganttlink{elem3}{elem4}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}{1}{12}
+% \gantttitle{2011}{12} \\
+% \gantttitlelist{1,...,12}{1} \\
+% \ganttgroup{Group 1}{1}{7} \\
+% \ganttbar{Task 1}{1}{2} \\
+% \ganttlinkedbar{Task 2}{3}{7} \ganttnewline
+% \ganttmilestone{Milestone}{7} \ganttnewline
+% \ganttbar{Final Task}{8}{12}
+% \ganttlink{elem2}{elem3}
+% \ganttlink{elem3}{elem4}
+% \end{ganttchart}
+% \end{center}
+%
+%
+% \subsection{Specifying Keys}
+%
+% \textit{Keys} (sometimes called \textit{options}) modify the output from \pack{pgfgantt}'s commands. You may specify a key in two ways: (1) Pass it to the optional argument present in each command, e.\,g.
+% \begin{texcode}
+% \ganttbar[bar height=.6]{Task 1}{1}{2}
+% \end{texcode}
+% This locally changes a key for the element(s) drawn by that command. (2) Alternatively, specify a key by the \DescribeMacro{\ganttset}|\ganttset|\marg{key=value list} macro, which sets its keys within the current \TeX\ group:
+% \begin{texcode}
+% \ganttset{bar height=.6}
+% \end{texcode}
+% Since \pack{pgfgantt} uses the \pack{pgfkeys} package for key management, all its keys reside in the |/pgfgantt/| path. However, if you set your keys by one of the methods explained above, this path is automatically prepended to each key.
+%
+% \subsection{The Canvas}
+%
+% Let us have a look at the basic anatomy of a Gantt chart and define some common terms. Each \textit{chart} consists of several \textit{lines}, which may contain one or more \textit{title elements} (at the top) or \textit{chart elements} (such as bars, groups and milestones). From left to right, the chart is divided into an integer number of \textit{time slots} that represent the basic $x$-unit.
+%
+% The \DescribeEnv{ganttchart}|ganttchart| environment draws a single Gantt chart:
+% \begin{texcode}
+% \begin{ganttchart}`\oarg{options}\marg{start tss}\marg{end tss}'
+% `$\cdots$'
+% \end{ganttchart}
+% \end{texcode}
+% The environment has one optional argument, which specifies the \meta{options} for the chart, and two mandatory arguments, which indicate the start and end time slot specifier. Although you will often put a |ganttchart| into a |tikzpicture| environment, you may actually use this environment on its own. \pack{pgfgantt} checks whether a chart is surrounded by a |tikzpicture| and adds this environment if necessary.
+%
+% \begin{key}{time slot format}{\meta{format}}{simple}
+% Sets the \meta{format} of time slot specifiers. A \textbf{time slot specifier} (abbreviated ``tss'') denotes a certain time slot along the horizontal axis. \pack{pgfgantt} defines a range of formats:
+% \begin{itemize}
+% \item \texttt{simple} -- positive integers (the single format used by \pack{pgfgantt} prior to v4.0). See also the \opt{time slot format/start date} key below.\\
+% \textit{Examples:} \texttt{1}, \texttt{3}, \texttt{24}
+% \item \texttt{isodate} -- dates in ISO-standard format (\texttt{yyyy-mm-dd}). In this format and any other, you may omit the leading zero if month or day are less than 10.\\
+% \textit{Examples:} \texttt{2013-03-14}, \texttt{2013-5-1}
+% \item \texttt{isodate-yearmonth} -- ISO-standard dates without days (\texttt{yyyy-mm}). Such dates are automatically converted to the first day of the respective month.\\
+% \textit{Examples:} \texttt{2013-03}, \texttt{2013-5}
+% \item \texttt{isodate-year} -- year only (\texttt{yyyy}). Such dates are automatically converted to the first day of January.\\
+% \textit{Examples:} \texttt{2013}, \texttt{2014}
+% \item \texttt{little-endian} -- Gregorian little-endian, i.\,e. day--month--year (the common German date format). Valid day/month and month/year separators are the hyphen (\texttt{-}), slash (\texttt{/}) and period (\texttt{.}). If you enter a two-digit year (for example, \texttt{13} instead of \texttt{2013}), it will be completed according to the value of \opt{time slot format/base century} (see below).\\
+% \textit{Examples:} \texttt{14-03-2013}, \texttt{14/03/13}, \texttt{14.3.2013}
+% \item \texttt{middle-endian} -- middle-endian, i.\,e. month--day--year (the common US date format). For valid separators and automatic year completion, see \textit{little-endian}.\\
+% \textit{Examples:} \texttt{03-14-2013}, \texttt{03/14/13}, \texttt{3.14.2013}
+% \item \texttt{big-endian} -- Gregorian big-endian, i.\,e. year--month--day (the ISO"=standard order). For valid separators and automatic year completion, see \textit{little-endian}.\\
+% \textit{Examples:} \texttt{2013-03-14}, \texttt{13/03/14}, \texttt{2013.3.14}
+% \end{itemize}
+% \end{key}
+%
+% \noindent Two subkeys of \opt{time slot format} let you configure \pack{pgfgantt}'s behavior regarding automatic completion of abbreviated dates:
+%
+% \begin{key}{time slot format/base century}{\meta{year}}{2000}
+% Sets the century for auto-completion of two-digit years (used by the time slot formats \texttt{little-endian}, \texttt{middle-endian} and \texttt{big-endian}). Consequently, default settings convert a year like \texttt{13} to \texttt{2013}.
+% \end{key}
+%
+% \begin{key}{time slot format/start date}{\meta{ISO-standard date}}{2000-01-01}
+% Numbers denoting time slots in the \texttt{simple} format are internally converted to a date, where \texttt{1} is converted to \meta{ISO-standard date}, \texttt{2} to $\meta{ISO-standard date} + 1$ etc.
+% \end{key}
+%
+% \bigskip\noindent Advanced users may add their own time slot \DescribeMacro{\newgantttimeslotformat}formats:
+% \begin{texcode}
+% \newgantttimeslotformat`\marg{name}\marg{converter code}'
+% \end{texcode}
+% Defines a new time slot format called \meta{name}. The \meta{converter code} must convert the time slot specifier stored in |#1| to its corresponding Julian day number (see section~57 of the \TikZ\ manual) and assign this number to the count register |#2|. The \meta{converter code} is executed within a \TeX\ group, so you may use temporary macros like |\@tempa|, counts like |\@tempcnta| etc.
+%
+% For example, we would like to create a format called \texttt{stardate}, where dates are given as ``\meta{year}\texttt{.}\meta{day of year}''. Thus, we will enter 24th February 2259 as ``\texttt{2259.55}''. To this end, we write the following code:
+% \par\bigskip\noindent
+% \begin{texcode}[numbers=left]
+% \newgantttimeslotformat{stardate}{%
+% \def\decomposestardate##1.##2\relax{%
+% \def\stardateyear{##1}\def\stardateday{##2}%
+% }%
+% \decomposestardate#1\relax%
+% \pgfcalendardatetojulian{\stardateyear-01-01}{#2}%
+% \advance#2 by-1\relax%
+% \advance#2 by\stardateday\relax%
+% }
+%
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% time slot format=stardate
+% ]{2259.55}{2259.67}
+% \gantttitlecalendar{year, month=name, day} \\
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \newgantttimeslotformat{stardate}{%
+% \def\decomposestardate##1.##2\relax{%
+% \def\stardateyear{##1}\def\stardateday{##2}%
+% }%
+% \decomposestardate#1\relax%
+% \pgfcalendardatetojulian{\stardateyear-01-01}{#2}%
+% \advance#2 by-1\relax%
+% \advance#2 by\stardateday\relax%
+% }
+%
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% time slot format=stardate
+% ]{2259.55}{2259.67}
+% \gantttitlecalendar{year, month=name, day} \\
+% \end{ganttchart}
+% \end{center}
+%
+% \noindent The macro |\decomposestardate| (lines 2--4) has two delimited arguments: The first one is delimited by a period and the second one by |\relax|. The call in line 5 decomposes the tss stored in |#1| and saves the day in |\stardateday| and the year in |\stardateyear|. |\pgfcalendardatetojulian| (section~57.1.1 of the \TikZ\ manual) calculates the Julian date of the first day of |\stardateyear| and stores it in |#2| (line 6). We then subtract 1 from |#2| (line 7) and add the |\stardateday| (line 8).
+%
+% \begin{key}[./style=]{canvas}{\meta{style}}{shape=rectangle, draw, fill=white}
+% The \opt{canvas} key changes the appearance of the canvas. \meta{style} is a list of \TikZ\ keys suitable for the \meta{options} of a \TikZ\ node (such as |shape=rectangle|, |fill| or |draw|; see chapter~16 of the \TikZ\ manual). By default, the canvas is a white rectangle with a black frame.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{tikzpicture} % optional
+% \begin{ganttchart}[
+% canvas/.style=%
+% {shape=chamfered rectangle, fill=yellow!25,
+% draw=blue, dashed, very thick}
+% ]{1}{6}
+% \gantttitle{Title}{6} \\
+% \ganttbar{}{1}{2} \\
+% \ganttbar{}{3}{6}
+% \end{ganttchart}
+% \end{tikzpicture} % optional
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% canvas/.style=%
+% {shape=chamfered rectangle, fill=yellow!25,
+% draw=blue, dashed, very thick}
+% ]{1}{6}
+% \gantttitle{Title}{6} \\
+% \ganttbar{}{1}{2} \\
+% \ganttbar{}{3}{6}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{x unit}{\meta{dimension}}{.5cm}
+% \keyline{y unit title}{\meta{dimension}}{1cm}
+% \keyline{y unit chart}{\meta{dimension}}{1cm}
+% These keys specify the width of a time slot and the height of title or chart lines, respectively. Typically, the $x/y$-dimension ratio approximates $1:2$, and the line height is equal over the whole chart. Other dimensions are well possible, but you might have to change several spacing-related keys in order to obtain a pleasing chart.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% x unit=1cm,
+% y unit title=.6cm,
+% y unit chart=1.5cm
+% ]{1}{6}
+% \gantttitle{Title 1}{6} \\
+% \gantttitle{Title 2}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% x unit=1cm,
+% y unit title=.6cm,
+% y unit chart=1.5cm
+% ]{1}{6}
+% \gantttitle{Title 1}{6} \\
+% \gantttitle{Title 2}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}[]{expand chart}{\texttt{[=none}\space\textbar\space\meta{dimension}\texttt{]}}{none}
+% If the value of this key differs from |none|, the Gantt chart will expand horizontally to \meta{dimension}. Use this key to produce charts that automatically expand to the text width. Two \LaTeX\ runs are required to calculate the correct size of the chart.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% expand chart=\textwidth
+% ]{1}{6}
+% \gantttitle{Title}{6} \\
+% \ganttbar{Bar 1}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% expand chart=\textwidth
+% ]{1}{6}
+% \gantttitle{Title}{6} \\
+% \ganttbar{Bar 1}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+% \begin{key}[]{hgrid}{\texttt{[=false}\space\textbar\space\texttt{true}\space\textbar\space\meta{style list}\texttt{]}}{false}
+% \keyline[/.style=]{hgrid style}{\meta{style}}{dotted}
+% \keyline[]{vgrid}{\texttt{[=false}\space\textbar\space\texttt{true}\space\textbar\space\meta{style list}\texttt{]}}{false}
+% \opt{hgrid} draws a horizontal grid which starts immediately below the last title element. The key can be specified in four different ways: Firstly, \opt{hgrid}|=false| eliminates the horizontal grid. You may omit this declaration, since it is the default. Secondly, both \opt{hgrid} and \opt{hgrid}|=true| activate the horizontal grid, which is then drawn in the default style |dotted|. Finally, \opt{hgrid}|=|\meta{style list} draws the horizontal grid in the given \meta{style list} (see below).
+%
+% \opt{hgrid style} changes the style of single horizontal grid lines that are drawn with |\ganttnewline[grid]| (see section~\ref{ssc:LineBreaks}).
+%
+% The \opt{vgrid} key governs the vertical grid; otherwise, use it exactly like \opt{hgrid}.
+%
+% \textit{Style lists} allow you to draw the grid lines in different styles. Each style list consists of several \textit{style list items} separated by a comma. A style list item has the general syntax |*{|\meta{n}|}{|\meta{style}|}| and orders the package to repeat the \meta{style} \meta{n}-times. (This syntax is reminiscent of column specifications in a |tabular| environment.) Thus, the list |*2{red}, *1{green}, *{10}{blue, dashed}| instructs \pack{pgfgantt} to draw first two red vertical grid lines, then a green one and finally ten dashed blue lines. If any grid lines remain to be drawn at the end of the list, the package starts again at the beginning of the list.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% hgrid=true,
+% vgrid={*2{red}, *1{green}, *{10}{blue, dashed}}
+% ]{1}{20}
+% \gantttitle{Title 1}{20} \\
+% \ganttbar{}{1}{8} \\
+% \ganttbar{}{9}{20}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% hgrid=true,
+% vgrid={*2{red}, *1{green}, *{10}{blue, dashed}}
+% ]{1}{20}
+% \gantttitle{Title 1}{20} \\
+% \ganttbar{}{1}{8} \\
+% \ganttbar{}{9}{20}
+% \end{ganttchart}
+% \end{center}
+%
+% In most situations, you can omit the multiplier |*1|. Hence, the following style lists are equal:\\
+% |{*1{red}, *1{blue, dashed}}|\\
+% |{{red}, {blue, dashed}}|\\
+% |{red, {blue, dashed}}|\\
+% However, if you wish to use a single style comprising two or more keys for all grid lines, e.\,g. |red, dotted|, you \textit{must} retain the multiplier (i.\,e., |{*1{red, dotted}}|).
+%
+% \par\bigskip\noindent
+% \begin{minipage}[t]{.45\textwidth}
+% \begin{texcode}
+% % wrong code
+%
+% \begin{ganttchart}[
+% hgrid=true,
+% vgrid={{red, dotted}}
+% ]{1}{6}
+% \gantttitle{Title 1}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}\hfill
+% \begin{minipage}[t]{.45\textwidth}
+% \begin{texcode}
+% % correct code
+%
+% \begin{ganttchart}[
+% hgrid=true,
+% vgrid={*1{red, dotted}}
+% ]{1}{6}
+% \gantttitle{Title 1}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}
+%
+% \begin{center}
+% \begin{ganttchart}[
+% hgrid=true,
+% vgrid={{red, dotted}}
+% ]{1}{6}
+% \gantttitle{Title 1}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \hspace{1cm}
+% \begin{ganttchart}[
+% hgrid=true,
+% vgrid={*1{red, dotted}}
+% ]{1}{6}
+% \gantttitle{Title 1}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{center}
+%
+%
+% In a chart with many time slots, drawing vertical grid lines between all of them will lead to a confusing appearance. In such a case, you can pass an appropriate \meta{style list} to |vgrid| in order to draw every second grid line, for example.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[vgrid={draw=none, dotted}]{1}{12}
+% \gantttitlelist{1,...,12}{1} \\
+% \ganttbar{}{1}{4} \\
+% \ganttbar{}{5}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[vgrid={draw=none, dotted}]{1}{12}
+% \gantttitlelist{1,...,12}{1} \\
+% \ganttbar{}{1}{4} \\
+% \ganttbar{}{5}{11}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{today}{\meta{tss}}{none}
+% \keyline{today offset}{\meta{number}}{1}
+% \keyline[/.style=]{today rule}{\meta{style}}{dashed, line width=1pt}
+% \keyline{today label}{\meta{text}}{TODAY}
+% \keyline{today label font}{\meta{font commands}}{\string\normalfont}
+% \keyline[/.style=]{today label node}{\meta{style}}{anchor=north, font=\string\ganttvalueof\{today label font\}}
+% Sometimes, you may wish to indicate the current day, month or the like on a Gantt chart. In order to do so, pass an integer value to the \opt{today} key, which draws a vertical rule at the corresponding \meta{tss}. \opt{today offset} determines the exact $y$-coordinate in the time slot and should lie between 0.0 (left border) and 1.0 (right border). The today rule appears in the \meta{style} denoted by \opt{today rule}. The node that contains the \meta{text} given by \opt{today label} appears below the rule. It is formatted by \opt{today label font} and \opt{today label node}.
+% \par\bigskip\noindent
+% \begin{minipage}[t]{.42\textwidth}
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% today=2
+% ]{1}{6}
+% \gantttitle{Title}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}\hfill
+% \begin{minipage}[t]{.56\textwidth}
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% time slot format=isodate,
+% today=2013-05-03,
+% today offset=.5,
+% today label=Current Week,
+% today label node/.append style=%
+% {anchor=north west},
+% today label font=\itshape\color{red},
+% today rule/.style=%
+% {draw=blue, ultra thick}
+% ]{2013-05-01}{2013-05-06}
+% \gantttitle{Title}{6} \\
+% \ganttbar{}{2013-05-01}{2013-05-03} \\
+% \ganttbar{}{2013-05-04}{2013-05-06}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}
+%
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% today=2
+% ]{1}{6}
+% \gantttitle{Title}{6} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \hspace{1cm}
+% \begin{ganttchart}[
+% vgrid,
+% time slot format=isodate,
+% today=2013-05-03,
+% today offset=.5,
+% today label=Current Week,
+% today label node/.append style=%
+% {anchor=north west},
+% today label font=\itshape\color{red},
+% today rule/.style=%
+% {draw=blue, ultra thick}
+% ]{2013-05-01}{2013-05-06}
+% \gantttitle{Title}{6} \\
+% \ganttbar{}{2013-05-01}{2013-05-03} \\
+% \ganttbar{}{2013-05-04}{2013-05-06}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsection{Line Breaks between Chart Elements}
+% \label{ssc:LineBreaks}
+%
+% \pack{pgfgantt} does not automatically begin a new line after finishing a \DescribeMacro{\ganttnewline}chart element. Instead, you must insert an explicit line break with |\ganttnewline|.
+%
+% \begin{key}{newline shortcut}{\meta{boolean}}{true}
+% If true, \DescribeMacro{\\}|\\| is defined as a shortcut for |\ganttnewline| within a |ganttchart| environment, so that the syntax is reminiscent of \LaTeX's |tabular| enviroment.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[hgrid, vgrid]{1}{6}
+% \gantttitle{Title 1}{3}
+% \gantttitle{Title 2}{3} \\
+% \ganttbar{}{1}{3} \ganttnewline
+% \ganttbar{}{2}{3}
+% \ganttbar{}{5}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[hgrid, vgrid]{1}{6}
+% \gantttitle{Title 1}{3}
+% \gantttitle{Title 2}{3} \\
+% \ganttbar{}{1}{3} \ganttnewline
+% \ganttbar{}{2}{3}
+% \ganttbar{}{5}{6}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% However, enabling this shortcut prevents you from entering multi-line node text (see section~16.4.3 of the \TikZ\ manual). Thus, \pack{pgfgantt} provides the macro \DescribeMacro{\ganttalignnewline}|\ganttalignnewline| for breaking lines in the node text.
+% \par\bigskip\noindent
+% \begin{minipage}[t]{.5\textwidth}
+% \begin{texcode}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% newline shortcut=false,
+% bar label node/.append style=%
+% {align=left}
+% ]{1}{6}
+% \gantttitle{Title}{6} \ganttnewline
+% \ganttbar{%
+% This is a\\
+% multi-line text.%
+% }{1}{3}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}\hfill
+% \begin{minipage}[t]{.48\textwidth}
+% \begin{texcode}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% newline shortcut=true,
+% bar label node/.append style=%
+% {align=left}
+% ]{1}{6}
+% \gantttitle{Title}{6} \\
+% \ganttbar{%
+% This is a\ganttalignnewline
+% multi-line text.%
+% }{1}{3}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}
+% \begin{center}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% newline shortcut=false,
+% bar label node/.append style=%
+% {align=left}
+% ]{1}{6}
+% \gantttitle{Title}{6} \ganttnewline
+% \ganttbar%
+% {This is a\\
+% multi-line text.%
+% }{1}{3}
+% \end{ganttchart}
+% \end{center}
+%
+% Even if you prefer a canvas without a horizontal grid, you may nevertheless want to separate certain lines by a grid rule. For this purpose, specify the optional argument |[grid]| for |\ganttnewline| (or |\\|), which draws a grid rule in \opt{hgrid style} between the current and the new line. Alternatively, directly give the desired style as optional argument.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[hgrid style/.style=red]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{}{1}{3} \ganttnewline[thick, blue]
+% \ganttbar{}{4}{5} \\
+% \ganttbar{}{6}{10} \\[grid]
+% \ganttbar{}{11}{12}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[hgrid style/.style=red]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{}{1}{3} \ganttnewline[thick, blue]
+% \ganttbar{}{4}{5} \\
+% \ganttbar{}{6}{10} \\[grid]
+% \ganttbar{}{11}{12}
+% \end{ganttchart}
+% \end{center}
+%
+%
+% \subsection{Titles}
+%
+% A \textit{title} (comprising one or more lines) at the top of a Gantt chart usually indicates the period of time covered by that chart. For example, the first line could span twelve time slots and display the current year, while the second line could contain twelve elements, each of which corresponds to one month. For these purposes, \pack{pgfgantt} implements several titling commands.
+%
+% \DescribeMacro{\gantttitle}|\gantttitle| draws a single title element:
+% \begin{texcode}
+% \gantttitle`\oarg{options}\marg{label}\marg{number of time slots}'
+% \end{texcode}
+% The \meta{label} appears in the title element, which covers the \meta{number of time slots} starting from the right end of the last title element (or from the beginning of the line, if the title element is the first element in this line). Mostly, you will employ |\gantttitle| for titles that span several time slots.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[hgrid, vgrid]{1}{12}
+% \gantttitle{2011}{12} \\
+% \ganttbar{}{1}{4}
+% \ganttbar{}{6}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[hgrid, vgrid]{1}{12}
+% \gantttitle{2011}{12} \\
+% \ganttbar{}{1}{4}
+% \ganttbar{}{6}{11}
+% \end{ganttchart}
+% \end{center}
+%
+% Whenever you want to draw a larger number of title elements that are equal in size and follow a common enumeration scheme, the \DescribeMacro{\gantttitlelist}|\gantttitlelist| macro provides a fast solution:
+% \begin{texcode}
+% \gantttitlelist`\oarg{options}\marg{pgffor list}\marg{length of each element}'
+% \end{texcode}
+% This macro generates one title element for each element of the \meta{pgffor list}. The second mandatory argument specifies the \meta{length of each element}. Refer to section~56 of the \TikZ\ manual for the detailed syntax for the \meta{pgffor list}.
+%
+% A simple application is to draw twelve title elements that contain the numbers from 1 to 12. The \meta{pgffor list} is |1,...,12|.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[hgrid, vgrid]{1}{12}
+% \gantttitlelist{1,...,12}{1} \\
+% \ganttbar{}{1}{3}
+% \ganttbar{}{5}{12}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[hgrid, vgrid]{1}{12}
+% \gantttitlelist{1,...,12}{1} \\
+% \ganttbar{}{1}{3}
+% \ganttbar{}{5}{12}
+% \end{ganttchart}
+% \end{center}
+% Note that we would have obtained the same result if we had written
+% \begin{texcode}
+% \gantttitle{1}{1} \gantttitle{2}{1} `\dots' \gantttitle{12}{1} \\
+% \end{texcode}
+%
+% As an advanced example, we will draw seven title elements containing the names of the weekdays (``Mon'' to ``Sun''). To this end, we introduce an additional key:
+%
+% \begin{key}{title list options}{\meta{pgffor options}}{var=\string\x, evaluate=\string\x}
+% Changes the \meta{pgffor options} of the |\foreach| command called by |\gantttitlelist| (see section~56 of the \TikZ\ manual). The macro that yields the labels to be printed by |\gantttitlelist| must be called |\x|.
+% \par\bigskip\noindent\shorthandoff{"}
+% \begin{texcode}
+% \begin{ganttchart}[hgrid, vgrid, x unit=1cm]{1}{7}
+% \gantttitlelist[
+% title list options=%
+% {var=\y, evaluate=\y as \x%
+% using "\pgfcalendarweekdayshortname{\y}"}
+% ]{0,...,6}{1} \\
+% \ganttbar{}{1}{4}
+% \ganttbar{}{6}{7}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[hgrid, vgrid, x unit=1cm]{1}{7}
+% \gantttitlelist[
+% title list options=%
+% {var=\y, evaluate=\y as \x%
+% using "\pgfcalendarweekdayshortname{\y}"}
+% ]{0,...,6}{1} \\
+% \ganttbar{}{1}{4}
+% \ganttbar{}{6}{7}
+% \end{ganttchart}
+% \end{center}\shorthandon{"}
+% \end{key}
+%
+% \bigskip While you actually may build any chart title with the two commands described previously, \DescribeMacro{\gantttitlecalendar}|\gantttitlecalendar| saves a lot of time when you wish to create elaborate calendars:
+% \begin{texcode}
+% \gantttitlecalendar`\oarg{options}\marg{calendar lines}'
+% \end{texcode}
+% Prints a title calendar that spans the whole chart and contains one or more \meta{calendar lines}. The starred \DescribeMacro{\gantttitlecalendar*}form of the macro prints a calendar from \meta{start tss} to \meta{end tss}:
+% \begin{texcode}
+% \gantttitlecalendar*`\oarg{options}\marg{start tss}\marg{end tss}\marg{calendar lines}'
+% \end{texcode}
+% \meta{calendar lines} is a comma-separated list of line types:
+% \begin{center}
+% \begin{tabular}{*3l}
+% \toprule
+% \itshape Line type & \meta{output format} & \itshape Example output \\
+% \midrule
+% \texttt{decade} & n/a & 2000s, 2010s, \dots \\[1ex]
+% \texttt{year} & n/a & 2012, 2013, \dots \\[1ex]
+% \texttt{month [=}\meta{output format}\texttt{]} & (none) & 01, 02, \dots, 12 \\
+% & \texttt{name} & January, February, \dots \\
+% & \texttt{shortname} & Jan, Feb, \dots \\[1ex]
+% \texttt{week [=}\meta{number}\texttt{]} & n/a & Week 1, Week 2, \dots \\[1ex]
+% \texttt{weekday [=}\meta{output format}\texttt{]} & (none) & 0, 1, \dots, 6 \\
+% & \texttt{name} & Monday, Tuesday, \dots \\
+% & \texttt{shortname} & Mon, Tue, \dots \\[1ex]
+% \texttt{day} & n/a & 01, 02, \dots, 31 \\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+%
+% The \meta{number} for the \texttt{week} line type is the number of the first week in the calendar.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=4mm,
+% time slot format=isodate
+% ]{2012-12-25}{2013-02-01}
+% \gantttitlecalendar{year, month, day, week=3, weekday} \\
+% \ganttbar{}{2013-01-14}{2013-01-17}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=4mm,
+% time slot format=isodate
+% ]{2012-12-25}{2013-02-01}
+% \gantttitlecalendar{year, month, day, week=3, weekday} \\
+% \ganttbar{}{2013-01-14}{2013-01-17}
+% \end{ganttchart}\hspace*{-51.4pt}
+% \end{center}
+%
+% You can easily add new output formats for \texttt{month} and \texttt{weekday}. The predefined ones use the macros described in section~57.1.3 of the \TikZ\ manual. For example, |weekday=name| calls |\pgfcalendarweekdayname|. Thus, new macros called |\pgfcalendarmonth|\textcolor{RoyalBlue}{\meta{output format}} or |\pgfcalendarweekday|\textcolor{RoyalBlue}{\meta{output format}} will provide additional \meta{output format}s for |month| and |weekday|, respectively.
+%
+% A weekday output format called |letter|, which displays a weekday as single letter, might be implemented as follows:
+% \par\bigskip\noindent
+% \begin{texcode}
+% \def\pgfcalendarweekdayletter#1{%
+% \ifcase#1M\or T\or W\or T\or F\or S\or S\fi%
+% }
+%
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=18mm,
+% time slot format=little-endian
+% ]{7.1.2013}{13.1.2013}
+% \gantttitlecalendar*{7.1.2013}{13.1.2013}{
+% month, month=name, month=shortname, weekday,
+% weekday=name, weekday=shortname, weekday=letter
+% }
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \def\pgfcalendarweekdayletter#1{%
+% \ifcase#1M\or T\or W\or T\or F\or S\or S\fi%
+% }
+%
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=18mm,
+% time slot format=little-endian
+% ]{7.1.2013}{13.1.2013}
+% \gantttitlecalendar*{7.1.2013}{13.1.2013}{
+% month, month=name, month=shortname, weekday,
+% weekday=name, weekday=shortname, weekday=letter
+% }
+% \end{ganttchart}
+% \end{center}
+%
+% \begin{key}{calendar week text}{\meta{format}}{Week\string~\string\currentweek}
+% Changes the text displayed in a week title element. In \meta{format}, four additional macros are available: \DescribeMacro{\currentweek}|\currentweek| is the current week number; \DescribeMacro{\startyear}|\startyear|, \DescribeMacro{\startmonth}|\startmonth| and \DescribeMacro{\startday}|\startday| expand to the year, month and day of the current week's Monday.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \ganttset{%
+% calendar week text={%
+% \pgfcalendarmonthshortname{\startmonth}~\startday, \startyear%
+% }%
+% }
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=4mm,
+% time slot format=isodate
+% ]{2012-12-24}{2013-01-20}
+% \gantttitlecalendar{year, week, day} \\
+% \ganttbar{}{2013-01-10}{2013-01-17}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \ganttset{%
+% calendar week text={%
+% \pgfcalendarmonthshortname{\startmonth}~\startday, \startyear%
+% }%
+% }
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=4mm,
+% time slot format=isodate
+% ]{2012-12-24}{2013-01-20}
+% \gantttitlecalendar{year, week, day} \\
+% \ganttbar{}{2013-01-10}{2013-01-17}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{time slot unit}{\texttt{day}\space\textbar\space\texttt{month}\space\textbar\space\texttt{year}}{day}
+% By default, one \textit{calendar day} is one time slot wide. With \opt{time slot unit}\texttt{=month}, one \textit{month} corresponds to one time slot. Consequently, in such calendars only |year| and |month| are sensible line types for |\gantttitlecalendar|, and the time slot format \texttt{isodate-yearmonth} is especially suited.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% time slot format=isodate-yearmonth,
+% time slot unit=month
+% ]{2012-03}{2014-1}
+% \gantttitlecalendar{year, month} \\
+% \ganttbar{}{2012-05}{2013-01}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% time slot format=isodate-yearmonth,
+% time slot unit=month
+% ]{2012-03}{2014-1}
+% \gantttitlecalendar{year, month} \\
+% \ganttbar{}{2012-05}{2013-01}
+% \end{ganttchart}
+% \end{center}
+%
+% With \opt{time slot unit}\texttt{=year}, one \textit{year} corresponds to one time slot. Consequently, in such calendars only |decade| and |year| are sensible line types for |\gantttitlecalendar|, and the time slot format \texttt{isodate-year} is especially suited.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=7.5mm,
+% time slot format=isodate-year,
+% time slot unit=year
+% ]{2007}{2020}
+% \gantttitlecalendar{decade, year} \\
+% \ganttbar{}{2008}{2018}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% hgrid,
+% vgrid,
+% x unit=7.5mm,
+% time slot format=isodate-year,
+% time slot unit=year
+% ]{2007}{2020}
+% \gantttitlecalendar{decade, year} \\
+% \ganttbar{}{2008}{2018}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \begin{key}[/.style=]{title}{\meta{style}}{shape=rectangle, inner sep=0pt, draw, fill=white}
+% Sets the appearance of a title element.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \usetikzlibrary{shadows}
+% \usetikzlibrary{shadings}
+% `$\cdots$'
+% \begin{ganttchart}[
+% vgrid,
+% canvas/.style={draw=none},
+% title/.append style=%
+% {fill=blue!20, rounded corners=2mm, drop shadow}
+% ]{1}{7}
+% \gantttitle{First week}{7} \\
+% \gantttitlelist[
+% title/.style={draw=none, inner color=red}
+% ]{1,...,7}{1} \\
+% \ganttbar{}{1}{2}
+% \ganttbar{}{4}{7}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% canvas/.style={draw=none},
+% title/.append style=%
+% {fill=blue!20, rounded corners=2mm, drop shadow}
+% ]{1}{7}
+% \gantttitle{First week}{7} \\
+% \gantttitlelist[
+% title/.style={draw=none, inner color=red}
+% ]{1,...,7}{1} \\
+% \ganttbar{}{1}{2}
+% \ganttbar{}{4}{7}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{title label font}{\meta{font commands}}{\string\small}
+% \keyline[/.style=]{title label node}{\meta{options}}{anchor=center, font=\string\ganttvalueof\{title label font\}}
+% \keyline{title label text}{\meta{text}}{\string\strut\#1}
+% The \meta{font commands} and \meta{options} are applied to the title label node, which is positioned at the center of each title element. \meta{text} should contain a single parameter token (|#1|), which is replaced by the first mandatory argument of |\gantttitle|. The |\strut| in the standard value ensures equal vertical spacing of the labels.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% title label font=\LARGE\color{violet},
+% title label node/.append style={anchor=west},
+% title label text=<#1>
+% ]{1}{6}
+% \gantttitle{2011}{6} \\
+% \ganttbar{}{1}{2}
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% title label font=\LARGE\color{violet},
+% title label node/.append style={anchor=west},
+% title label text=<#1>
+% ]{1}{6}
+% \gantttitle{2011}{6} \\
+% \ganttbar{}{1}{2}
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{title left shift}{\meta{factor}}{0}
+% \keyline{title right shift}{\meta{factor}}{0}
+% \keyline{title top shift}{\meta{factor}}{0}
+% \keyline{title height}{\meta{factor}}{0.6}
+% The first three keys shift the coordinates of a title element's borders (or rather of its corners), while \opt{title height} changes its height. By default, the left upper corner of a title element coincides with the origin of the start time slot; its right lower corner touches the right border of the end time slot 0.6~units below the upper line border:
+%
+% \begin{center}
+% \begin{tikzpicture}[x=.5cm, y=1cm]
+% \begin{ganttchart}[vgrid, hgrid]{1}{6}
+% \gantttitle{2011}{6} \\
+% \ganttbar{}{1}{2}
+% \ganttbar{}{4}{6}
+% \end{ganttchart}
+% \small
+% \draw[blue, line width=1.5pt, dashed] (0,0) rectangle (1,-1);
+% \draw[teal, line width=1.5pt, dashed] (5,0) rectangle (6,-1);
+% \fill[red] (0,0) circle (1.5pt) node[above left] {start: $(0, 0)$};
+% \fill[black!75] (6,-1) circle (1.5pt) node[below right] {$(6, 1)$};
+% \fill[red] (6,-0.6) circle (1.5pt) node[right] {$(6, 0+0.6)$: stop};
+% \draw[-latex,blue] (.2,.6) node[above=-4pt] {Start time slot (1)} -- (.5,-.5);
+% \draw[-latex,teal] (6.2,.1) node[above=-4pt] {End time slot (6)} -- (5.5,-.5);
+% \end{tikzpicture}
+% \end{center}
+% The figure below shows a Gantt chart with two lines and one (large) time slot and indicates the distances modified by these keys.
+% \begin{center}
+% \begin{tikzpicture}[x=7cm, y=2cm]
+% \begin{ganttchart}[x unit=7cm, y unit title=2cm, title/.append style={line width=1.5pt,fill=yellow!10},title left shift=.2,title right shift=-.3,title top shift=.25, title height=.5]{1}{1}
+% \gantttitle{}{1} \\
+% \end{ganttchart}
+% \small
+% \draw[densely dashed] (0,-1) -- (1,-1);
+% \draw[dashed,cyan,line width=1pt] (0,0) rectangle (1,-.6);
+% \draw[cyan,-latex] (.8,.5) node[right,align=left] {Title element\\with standard values} -- (.75,0);
+% \fill (0,0) circle (1.5pt) node[left] {$(0,0)$};
+% \fill (0,-1) circle (1.5pt) node[left] {$(0,1)$};
+% \fill (1,0) circle (1.5pt) node[right] {$(1,0)$};
+% \fill (1,-1) circle (1.5pt) node[right] {$(1,1)$};
+% \draw[-latex,line width=1pt,blue]
+% (0, -.5) node[align=right,left] {\texttt{title left shift}\\(here: \texttt{0.2})} -- (.2,-.5);
+% \draw[latex-,line width=1pt,blue]
+% (.7, -.5) -- (1,-.5) node[align=left,right] {\texttt{title right shift}\\(here: \texttt{-0.3})};
+% \draw[-latex,line width=1pt,red]
+% (.45, 0) node[align=left,above] {\texttt{title top shift}\\(here: \texttt{0.25})} -- (.45,-.25);
+% \draw[-latex,line width=1pt,red]
+% (.6, -.25) -- (.6,-.75) node[align=left,below] {\texttt{title height}\\(here: \texttt{0.5})};
+% \end{tikzpicture}
+% \end{center}
+% For example, you might devise a layout where the title element does not touch the borders of the start and end time slot.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% title/.style={fill=teal, draw=none},
+% title label font=\color{white}\bfseries,
+% title left shift=.1,
+% title right shift=-.1,
+% title top shift=.05,
+% title height=.75
+% ]{1}{7}
+% \gantttitle{Title}{7} \\
+% \ganttbar{}{1}{2}
+% \ganttbar{}{4}{7}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% title/.style={fill=teal, draw=none},
+% title label font=\color{white}\bfseries,
+% title left shift=.1,
+% title right shift=-.1,
+% title top shift=.05,
+% title height=.75
+% ]{1}{7}
+% \gantttitle{Title}{7} \\
+% \ganttbar{}{1}{2}
+% \ganttbar{}{4}{7}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{include title in canvas}{\meta{boolean}}{true}
+% The canvas normally comprises all lines of the chart. However, you may wish that your title elements only consist of text lacking any frame or background. In this case, the canvas probably should exclude all lines containing title elements, which you achieve by \opt{include title in canvas}|=false|.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% hgrid={*1{draw=red, thick}},
+% vgrid,
+% y unit title=.5cm,
+% title/.style={draw=none, fill=none},
+% include title in canvas=false
+% ]{1}{7}
+% \gantttitlelist{1,...,7}{1} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{7}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% hgrid={*1{draw=red, thick}},
+% vgrid,
+% y unit title=.5cm,
+% title/.style={draw=none, fill=none},
+% include title in canvas=false
+% ]{1}{7}
+% \gantttitlelist{1,...,7}{1} \\
+% \ganttbar{}{1}{3} \\
+% \ganttbar{}{4}{7}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsection{Vertical rules}
+%
+% A \textit{vertical rule} indicates an important date like a deadline. Such rules represent a generalization of the today rule and are drawn by the \DescribeMacro{\ganttvrule}|\ganttvrule| macro:
+% \begin{texcode}
+% \ganttvrule`\oarg{options}\marg{label}\marg{tss}'
+% \end{texcode}
+% This macro draws a \meta{label}ed vertical rule at the given \meta{tss}.
+%
+% \begin{key}{vrule offset}{\meta{number}}{1}
+% \keyline[/.style=]{vrule}{\meta{style}}{dashed, line width=1pt}
+% \keyline{vrule label font}{\meta{font commands}}{\string\normalfont}
+% \keyline[/.style=]{vrule label node}{\meta{style}}{anchor=north, font=\string\ganttvalueof\{vrule label font\}}
+% \opt{vrule offset} determines the exact $y$-coordinate in the time slot and should lie between 0.0 (left border) and 1.0 (right border). The vertical rule appears in the \meta{style} denoted by \opt{vrule}. The label is formatted by \opt{vrule label font} and \opt{vrule label node}.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% vrule/.style={very thick, blue},
+% vrule label font=\bfseries
+% ]{1}{8}
+% \gantttitle{2018}{8} \\
+% \ganttbar{}{1}{2} \\
+% \ganttbar{}{4}{8}
+% \ganttvrule{day x}{2}
+% \ganttvrule[
+% vrule/.append style={red, thin},
+% vrule offset=.2,
+% vrule label node/.append style={anchor=north west}
+% ]{day z}{6}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% vrule/.style={very thick, blue},
+% vrule label font=\bfseries
+% ]{1}{8}
+% \gantttitle{2018}{8} \\
+% \ganttbar{}{1}{2} \\
+% \ganttbar{}{4}{8}
+% \ganttvrule{day x}{2}
+% \ganttvrule[
+% vrule/.append style={red, thin},
+% vrule offset=.2,
+% vrule label node/.append style={anchor=north west}
+% ]{day z}{6}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsection{Predefined Chart Elements}
+%
+% \pack{pgfgantt} predefines three chart elements:
+% \begin{enumerate}
+% \item \DescribeMacro{\ganttbar}\textit{Bars} indicate the duration of a task or one of its parts.
+% \begin{texcode}
+% \ganttbar`\oarg{options}\marg{label}\marg{start tss}\marg{end tss}'
+% \end{texcode}
+% \item \DescribeMacro{\ganttgroup}\textit{Groups} combine several subtasks (represented by bars) into a single task.
+% \begin{texcode}
+% \ganttgroup`\oarg{options}\marg{label}\marg{start tss}\marg{end tss}'
+% \end{texcode}
+% \item \DescribeMacro{\ganttmilestone}\textit{Milestones} signify that an important task has been completed or that a crucial goal has been reached.
+% \begin{texcode}
+% \ganttmilestone`\oarg{options}\marg{label}\marg{tss}'
+% \end{texcode}
+% \end{enumerate}
+% Each of these macros draws a \meta{label}ed chart element from the \meta{start tss} to the \meta{end tss} (or at the given \meta{tss} in case of |\ganttmilestone|).
+%
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{center}
+%
+% For \DescribeMacro{\ganttlinkedbar}each predefined chart element, there is also a macro that additionally draws a link \DescribeMacro{\ganttlinkedgroup}from the previous element. Otherwise, these macros work exactly like the standard \DescribeMacro{\ganttlinkedmilestone}versions:
+% \begin{texcode}
+% \ganttlinkedbar`\oarg{options}\marg{label}\marg{start tss}\marg{end tss}'
+% \ganttlinkedgroup`\oarg{options}\marg{label}\marg{start tss}\marg{end tss}'
+% \ganttlinkedmilestone`\oarg{options}\marg{label}\marg{tss}'
+% \end{texcode}
+% In the following example, the code on the left is equivalent to the code on the right.
+% \par\bigskip\noindent
+% \begin{minipage}[t]{.49\textwidth}
+% \begin{texcode}
+% % Short version
+%
+% \begin{ganttchart}[
+% vgrid,
+% hgrid
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttlinkedbar{Task 2}{5}{6} \\
+% \ganttlinkedmilestone{M 1}{6} \\
+% \ganttlinkedbar{Task 3}{7}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}\hfill
+% \begin{minipage}[t]{.47\textwidth}
+% \begin{texcode}
+% % Long version
+%
+% \begin{ganttchart}[
+% vgrid,
+% hgrid
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttbar{Task 2}{5}{6} \\
+% \ganttmilestone{M 1}{6} \\
+% \ganttbar{Task 3}{7}{11}
+% \ganttlink{elem0}{elem1}
+% \ganttlink{elem1}{elem2}
+% \ganttlink{elem2}{elem3}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}
+%
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttlinkedbar{Task 2}{5}{6} \\
+% \ganttlinkedmilestone{M 1}{6} \\
+% \ganttlinkedbar{Task 3}{7}{11}
+% \end{ganttchart}
+% \end{center}
+%
+% \begin{key}{chart element start border}{\texttt{left}\space\textbar\space\texttt{right}}{left}
+% Determines which border of the start time slot a chart element touches. \texttt{left} is the behavior usually expected, while \texttt{right} strictly interprets the start time slot as an $x$-coordinate.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[vgrid, hgrid, chart element start border=right]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{0}{10} \\
+% \ganttbar{Task 1}{0}{3} \\
+% \ganttbar{Task 2}{3}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[vgrid, hgrid, chart element start border=right]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{0}{10} \\
+% \ganttbar{Task 1}{0}{3} \\
+% \ganttbar{Task 2}{3}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsubsection{Options: Chart Element Appearance}
+%
+% The following options are similar for all predefined (and user-defined) chart elements:
+%
+% \begin{key}[/.style=]{bar}{\meta{style}}{shape=ganttbar, inner sep=0pt, draw, fill=white}
+% \keyline[/.style=]{group}{\meta{style}}{shape=ganttgroup, inner sep=0pt, fill=black}
+% \keyline[/.style=]{milestone}{\meta{style}}{shape=ganttmilestone, inner sep=0pt, draw, fill=black}
+% Determines the appearance of the chart element. The shapes \texttt{ganttbar}, \texttt{ganttgroup} and \texttt{ganttmilestone} are described below.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% bar/.append style={fill=red!50},
+% group/.append style={draw=black, fill=green!50},
+% milestone/.append style={fill=orange, rounded corners=3pt}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar[
+% bar/.append style={shape=ellipse, fill=yellow, dashed}
+% ]{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% bar/.append style={fill=red!50},
+% group/.append style={draw=black, fill=green!50},
+% milestone/.append style={fill=orange, rounded corners=3pt}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar[
+% bar/.append style={shape=ellipse, fill=yellow, dashed}
+% ]{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsubsection{Options: Label Formatting}
+%
+% \begin{key}{bar label text}{\meta{text}}{\string\strut\#1}
+% \keyline{group label text}{\meta{text}}{\string\strut\#1}
+% \keyline{milestone label text}{\meta{text}}{\string\strut\#1}
+% \keyline{bar label font}{\meta{font commands}}{\string\normalsize}
+% \keyline{group label font}{\meta{font commands}}{\string\bfseries}
+% \keyline{milestone label font}{\meta{font commands}}{\string\itshape}
+% \keyline[./style=]{bar label node}{\meta{options}}{anchor=east, font=\string\ganttvalueof\{bar label font\}}
+% \keyline[./style=]{group label node}{\meta{options}}{anchor=east, font=\string\ganttvalueof\{group label font\}}
+% \keyline[./style=]{milestone label node}{\meta{options}}{anchor=east, font=\string\ganttvalueof\{milestone label font\}}
+% The \opt{\dots\ label text} keys configure the label \meta{text} next to each chart element. Each of these keys should contain a single parameter token (|#1|), which is replaced by the first mandatory argument of |\ganttbar| etc. The |\strut| in the standard value ensures equal vertical spacing of the labels. The \meta{font commands} of \opt{\dots\ label font} and the \meta{options} of \opt{\dots\ label node} are applied to the label node at the left border of the chart (see \opt{inline} below).
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% bar label font=\Large,
+% bar label text={--#1$\rightarrow$},
+% group label font=\color{orange},
+% group label text={+#1+},
+% milestone label font=\color{magenta},
+% milestone label node/.append style={rotate=30},
+% milestone label text={#1 !!!}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% bar label font=\Large,
+% bar label text={--#1$\rightarrow$},
+% group label font=\color{orange},
+% group label text={+#1+},
+% milestone label font=\color{magenta},
+% milestone label node/.append style={rotate=30},
+% milestone label text={#1 !!!}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{inline}{\meta{boolean}}{false}
+% \keyline{bar inline label anchor}{\meta{anchor}}{center}
+% \keyline{group inline label anchor}{\meta{anchor}}{center}
+% \keyline{milestone inline label anchor}{\meta{anchor}}{center}
+% \keyline[/.style=]{bar inline label node}{\meta{options}}{anchor=center, font=\string\ganttvalueof\{bar label font\}}
+% \keyline[/.style=]{group inline label node}{\meta{options}}{anchor=south, font=\string\ganttvalueof\{group label font\}}
+% \keyline[/.style=]{milestone inline label node}{\meta{options}}{anchor=south, font=\string\ganttvalueof\{milestone label font\}}
+% If two or more chart elements appear in a single line, their labels will overlap at the left border of the chart. Thus, you can place the label adjacent to a chart element by setting the boolean key \opt{inline} to |true|. This key instructs the package to draw the label node at the \opt{\dots\ inline label anchor} of the respective chart element and apply the \meta{options} given by \opt{\dots\ inline label node}.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% inline,
+% milestone inline label node/.append style={left=5mm}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% inline,
+% milestone inline label node/.append style={left=5mm}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar{Task 1}{1}{3} \\
+% \ganttbar{Task 2}{4}{10} \\
+% \ganttmilestone{Milestone 1}{11}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsubsection{Options: Chart Element Positioning}
+%
+% \begin{key}{bar left shift}{\meta{factor}}{0}
+% \keyline{bar right shift}{\meta{factor}}{0}
+% \keyline{bar top shift}{\meta{factor}}{.3}
+% \keyline{bar height}{\meta{factor}}{.4}
+% \keyline{group left shift}{\meta{factor}}{-.1}
+% \keyline{group right shift}{\meta{factor}}{.1}
+% \keyline{group top shift}{\meta{factor}}{.4}
+% \keyline{group height}{\meta{factor}}{.2}
+% \keyline{milestone left shift}{\meta{factor}}{.6}
+% \keyline{milestone right shift}{\meta{factor}}{.4}
+% \keyline{milestone top shift}{\meta{factor}}{.3}
+% \keyline{milestone height}{\meta{factor}}{.4}
+% Shift the coordinates of a chart element's borders (\opt{\dots\ shift}) and change its height (\opt{\dots\ height}).
+%
+% \begin{center}
+% \begin{tikzpicture}[x=.5cm, y=1cm]
+% \begin{ganttchart}[vgrid, hgrid]{1}{8}
+% \gantttitle{Title}{8} \\
+% \ganttbar{}{2}{7} \\ \\
+% \ganttgroup{}{2}{6} \\ \\
+% \ganttmilestone{}{4}
+% \end{ganttchart}
+% \small
+% \draw[blue, line width=1.5pt, dashed] (1,-1) rectangle (2,-2);
+% \draw[blue, line width=1.5pt, dashed] (1,-3) rectangle (2,-4);
+% \draw[blue!50!teal, line width=1.5pt, dashed] (3,-5) rectangle (4,-6);
+% \draw[teal, line width=1.5pt, dashed] (6,-1) rectangle (7,-2);
+% \draw[teal, line width=1.5pt, dashed] (5,-3) rectangle (6,-4);
+% \fill[black!75] (1,-1) circle (1.5pt) node[above left] {$(1, 1)$};
+% \fill[black!75] (7,-2) circle (1.5pt) node[below right] {$(7, 2)$};
+% \fill[black!75] (1,-3) circle (1.5pt) node[above left] {$(1, 3)$};
+% \fill[black!75] (6,-4) circle (1.5pt) node[below right] {$(6, 4)$};
+% \fill[black!75] (3,-5) circle (1.5pt) node[above left] {$(3, 5)$};
+% \fill[black!75] (4,-6) circle (1.5pt) node[below right] {$(4, 6)$};
+% \fill[red] (1,-1.3) circle (1.5pt) node[left] {start: $(1+0, 1+0.3)$};
+% \fill[red] (7,-1.7) circle (1.5pt) node[right] {$(7+0, 1+0.3+0.4)$: stop};
+% \fill[red] (.9,-3.4) circle (1.5pt) node[left] {start: $(1-0.1, 3+0.4)$};
+% \fill[red] (6.1,-3.6) circle (1.5pt) node[right] {$(6+0.1, 3+0.4+0.2)$: stop};
+% \fill[red] (3.6,-5.3) circle (1.5pt) node[left] {start: $(3+0.6, 5+0.3)$};
+% \fill[red] (4.4,-5.7) circle (1.5pt) node[right] {$(4+0.4, 5+0.3+0.4)$: stop};
+% \draw[-latex,blue] (.2,.2) node[above=-4pt] {Start time slot (2)} -- (1.5,-1.3);
+% \draw[-latex,blue] (-3,-4) node[below=-4pt] {Start time slot (2)} -- (1,-3.8);
+% \draw[-latex,blue!50!teal] (-.5,-5.9) node[left] {Time slot (4)} -- (3,-5.8);
+% \draw[-latex,teal] (7.2,.1) node[above=-4pt] {End time slot (7)} -- (6.5,-1.3);
+% \draw[-latex,teal] (8,-4.2) node[right] {End time slot (6)} -- (6,-3.8);
+% \end{tikzpicture}
+% \end{center}
+%
+% The three following figures illustrate the distances modified by these keys. The first figure shows a Gantt chart with a bar, two lines and one time slot.
+% \begin{center}
+% \begin{tikzpicture}[x=8cm, y=2cm]
+% \begin{ganttchart}[
+% x unit=8cm,
+% y unit chart=2cm,
+% bar left shift=.2,
+% bar right shift=-.3,
+% bar top shift=.25,
+% bar height=.5,
+% bar/.append style={line width=1.5pt, fill=yellow!10}
+% ]{1}{1}
+% \ganttbar[]{}{1}{1} \\
+% \end{ganttchart}
+% \small
+% \draw[densely dashed] (0,-1) -- (1,-1);
+% \draw[dashed,cyan,line width=1pt] (0,-.3) rectangle (1,-.7);
+% \draw[cyan,-latex] (.8,.5) node[right,align=left] {Bar with standard values} -- (.75,-.3);
+% \fill (0,0) circle (1.5pt) node[left] {$(0,0)$};
+% \fill (0,-1) circle (1.5pt) node[left] {$(0,1)$};
+% \fill (1,0) circle (1.5pt) node[right] {$(1,0)$};
+% \fill (1,-1) circle (1.5pt) node[right] {$(1,1)$};
+% \draw[-latex,line width=1pt,blue]
+% (0, -.5) node[align=right,left] {\texttt{bar left shift}\\(here: \texttt{0.2})} -- (.2,-.5);
+% \draw[latex-,line width=1pt,blue]
+% (.7, -.5) -- (1,-.5) node[align=left,right] {\texttt{bar right shift}\\(here: \texttt{-0.3})};
+% \draw[-latex,line width=1pt,red]
+% (.45, 0) node[align=left,above] {\texttt{bar top shift}\\(here: \texttt{0.25})} -- (.45,-.25);
+% \draw[-latex,line width=1pt,red]
+% (.6, -.25) -- (.6,-.75) node[align=left,below] {\texttt{bar height}\\(here: \texttt{0.5})};
+% \end{tikzpicture}
+% \end{center}
+% The second one shows a Gantt chart with a group, two lines and one time slot.
+% \begin{center}
+% \begin{tikzpicture}[x=7cm, y=2cm]
+% \begin{ganttchart}[
+% x unit=7cm,
+% y unit chart=2cm,
+% group left shift=.2,
+% group right shift=-.3,
+% group top shift=.25,
+% group height=.3,
+% group peaks width=.1,
+% group peaks height=.2,
+% group/.append style={draw=black, line width=1.5pt, fill=yellow!10}
+% ]{1}{1}
+% \ganttgroup{}{1}{1} \\
+% \end{ganttchart}
+% \small
+% \draw[densely dashed] (0,-1) -- (1,-1);
+% \draw[dashed,cyan,line width=1pt] (-.1,-.4) rectangle (1.1,-.6);
+% \draw[cyan,-latex] (.8,.5) node[right,align=left] {Group with standard values\\(without peaks)} -- (.75,-.4);
+% \fill (0,0) circle (1.5pt) node[left] {$(0,0)$};
+% \fill (0,-1) circle (1.5pt) node[left] {$(0,1)$};
+% \fill (1,0) circle (1.5pt) node[right] {$(1,0)$};
+% \fill (1,-1) circle (1.5pt) node[right] {$(1,1)$};
+% \draw[-latex,line width=1pt,blue]
+% (0, -.5) node[align=right,left] {\texttt{group left shift}\\(here: \texttt{0.2})} -- (.2,-.5);
+% \draw[latex-,line width=1pt,blue]
+% (.7, -.5) -- (1,-.5) node[align=left,right] {\texttt{group right shift}\\(here: \texttt{-0.3})};
+% \draw[-latex,line width=1pt,red]
+% (.45, 0) node[align=left,above] {\texttt{group top shift}\\(here: \texttt{0.25})} -- (.45,-.25);
+% \draw[-latex,line width=1pt,red]
+% (.55, -.25) -- (.55,-.55) node[align=left,below left=0pt and -10pt] {\texttt{group height}\\(here: \texttt{0.3})};
+% \end{tikzpicture}
+% \end{center}
+% The third one shows a Gantt chart with a milestone, two lines and two time slots.
+% \begin{center}
+% \begin{tikzpicture}[x=4cm, y=2cm]
+% \begin{ganttchart}[
+% x unit=4cm,
+% y unit chart=2cm,
+% milestone left shift=.2,
+% milestone right shift=-.4,
+% milestone top shift=.15,
+% milestone height=.7,
+% milestone/.append style={draw=black, line width=1.5pt, fill=yellow!10}
+% ]{1}{2}
+% \ganttmilestone{}{1} \\
+% \end{ganttchart}
+% \small
+% \draw [densely dashed] (0,-1) -- (2,-1);
+% \draw [densely dashed] (1,0) -- (1,-2);
+% \draw [dashed, cyan, line width=1pt] (1,-.3) -- (1.4, -0.5) -- (1, -0.7) -- (0.6, -0.5) --cycle;
+% \draw [cyan,-latex] (1.2,.3)
+% node [above left=0pt and -5pt] {Milestone with standard values}
+% -- (1.25,-.4);
+% \draw [dashdotted] (.2, -.15) -- (1.5, -.15);
+% \fill (0,0) circle (1.5pt) node[left] {$(0,0)$};
+% \fill (0,-1) circle (1.5pt) node[left] {$(0,1)$};
+% \fill (1,0) circle (1.5pt) node[above] {$(1,0)$};
+% \fill (1,-1) circle (1.5pt) node[below right] {$(1,1)$};
+% \fill (2,0) circle (1.5pt) node[above right] {$(2,0)$};
+% \fill (2,-1) circle (1.5pt) node[right] {$(2,1)$};
+% \draw [-latex, line width=1pt, blue] (0, -.5)
+% node [align=right, left] {\texttt{milestone left shift}\\(here: \texttt{0.2})}
+% -- (.2,-.5);
+% \draw [latex-, line width=1pt, blue] (0.6, -.5) -- (1,-.5)
+% node [align=left, right] {\texttt{milestone right shift}\\(here: \texttt{-0.4})};
+% \draw [-latex, line width=1pt, red] (1.5, 0)
+% node [align=left, above right=0pt and -5pt] {\texttt{milestone top shift}\\(here: \texttt{0.15})}
+% -- (1.5,-.15);
+% \draw [-latex, line width=1pt, red] (.4, -.15)
+% node [align=right, above] {\texttt{milestone height}\\(here: \texttt{0.7})}
+% -- (.4,-.85);
+% \end{tikzpicture}
+% \end{center}
+%
+% \begin{key}{group right peak tip position}{\meta{fraction}}{0.5}
+% \keyline{group right peak width}{\meta{factor}}{0.4}
+% \keyline{group right peak height}{\meta{factor}}{0.1}
+% \keyline{group left peak tip position}{\meta{fraction}}{0.5}
+% \keyline{group left peak width}{\meta{factor}}{0.4}
+% \keyline{group left peak height}{\meta{factor}}{0.1}
+% \keyline{group peaks tip position}{\meta{fraction}}{\textrm{(none)}}
+% \keyline{group peaks width}{\meta{factor}}{\textrm{(none)}}
+% \keyline{group peaks height}{\meta{factor}}{\textrm{(none)}}
+% Change the appearance of the peaks at both ends of a group. By default, both the left and right peak are 0.4~units wide and 0.1~units high, their tips lie between the peak sides. The \opt{group peaks \dots} keys set the dimensions for both peaks simultaneously. The figure below exemplifies the keys that apply to the left peak.
+%
+% \begin{center}
+% \begin{tikzpicture}[x=8cm, y=2cm]
+% \small
+% \draw (0,0) rectangle (1,-1.3);
+% \draw [line width=1.5pt, dashed] (.5,-.2) -- (.7,-.2);
+% \draw [line width=1.5pt, solid] (.5,-.2) -- (.2,-.2) -- (.2,-.5) -- (.3,-.8) -- (.4,-.5) -- (.5,-.5);
+% \draw [line width=1.5pt, dashed] (.5,-.5) -- (.7,-.5);
+% \draw [densely dashed] (.2,-.5) -- (.2,-1.3);
+% \draw [densely dashed] (.3,-.8) -- (.3,-1.3);
+% \draw [densely dashed] (.3,-.8) -- (1,-.8);
+% \fill (0,0) circle (1.5pt) node [left] {$(0,0)$};
+% \fill (0,-1) circle (1.5pt) node [left] {$(0,1)$};
+% \fill (1,0) circle (1.5pt) node [right] {$(1,0)$};
+% \fill (1,-1) circle (1.5pt) node [right] {$(1,1)$};
+% \draw [-latex, line width=1pt, blue] (.2, -.5)
+% node [left] {\texttt{width}}
+% -- (.4,-.5);
+% \draw [-latex, line width=1pt, teal] (.2, -.9) -- (.3,-.9)
+% node [below, align=left] {\texttt{tip position}\\(as fraction of \texttt{width})};
+% \draw [-latex, line width=1pt, red] (.5, -.5)
+% node [below right] {\texttt{height}} -- (.5,-.8);
+% \end{tikzpicture}
+% \end{center}
+% \end{key}
+%
+% For example, you might devise the following layout: Bars are small and rounded; they do not touch the borders of their start and end time slots. Groups stay within the start and end time slot, and the peaks are more acute.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% bar/.append style={fill=red, rounded corners=3pt},
+% bar left shift=.15,
+% bar right shift=-.15,
+% bar top shift=.4,
+% bar height=.2,
+% group left shift=0,
+% group right shift=0,
+% group peaks tip position=0,
+% group peaks height=.4
+% ]{1}{7}
+% \gantttitle{Title}{7} \\
+% \ganttgroup{Group 1}{1}{7} \\
+% \ganttbar{Task 1}{1}{2} \\
+% \ganttbar{Task 2}{3}{7}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% bar/.append style={fill=red, rounded corners=3pt},
+% bar left shift=.15,
+% bar right shift=-.15,
+% bar top shift=.4,
+% bar height=.2,
+% group left shift=0,
+% group right shift=0,
+% group peaks tip position=0,
+% group peaks height=.4
+% ]{1}{7}
+% \gantttitle{Title}{7} \\
+% \ganttgroup{Group 1}{1}{7} \\
+% \ganttbar{Task 1}{1}{2} \\
+% \ganttbar{Task 2}{3}{7}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsubsection{Options: Progress}
+%
+% The \textit{progress} of a chart element illustrates the extent to which this element has been completed.
+%
+% \begin{key}{progress}{\texttt{none}\space\textbar\space\texttt{today}\space\textbar\space\meta{number}}{none}
+% Indicates that a chart element is \meta{number} percent complete. The value \texttt{none} turns progress calculations off.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup[progress=45]{Group 1}{1}{12} \\
+% \ganttbar[progress=100]{Subtask 1}{1}{3} \\
+% \ganttbar[progress=37]{Subtask 2}{4}{8} \\
+% \ganttbar[progress=none]{Subtask 3}{9}{12}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup[progress=45]{Group 1}{1}{12} \\
+% \ganttbar[progress=100]{Subtask 1}{1}{3} \\
+% \ganttbar[progress=37]{Subtask 2}{4}{8} \\
+% \ganttbar[progress=none]{Subtask 3}{9}{12}
+% \end{ganttchart}
+% \end{center}
+% The value \texttt{today} instructs \pack{pgfgantt} to calculate progress according to the value of the \opt{today} key. Thus, if the current date $T$ is earlier than the start date $S$ of a chart element, its progress is 0\,\%; if the current date is later than the end date $E$ of a chart element, its progress is 100\,\%; otherwise, its progress $P$ is calculated according to
+% \begin{equation}
+% P = \frac{T - S}{E - S} \times 100\,\%
+% \end{equation}
+% \par\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% time slot format=little-endian,
+% progress=today,
+% today=4.5.13
+% ]{1.5.13}{12.5.13}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1.5.13}{12.5.13} \\
+% \ganttbar{Subtask 1}{1.5.13}{3.5.13} \\
+% \ganttbar{Subtask 2}{4.5.13}{8.5.13} \\
+% \ganttbar{Subtask 3}{9.5.13}{12.5.13}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% time slot format=little-endian,
+% progress=today,
+% today=4.5.13
+% ]{1.5.13}{12.5.13}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1.5.13}{12.5.13} \\
+% \ganttbar{Subtask 1}{1.5.13}{3.5.13} \\
+% \ganttbar{Subtask 2}{4.5.13}{8.5.13} \\
+% \ganttbar{Subtask 3}{9.5.13}{12.5.13}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}[/.style=]{bar incomplete}{\meta{style}}{/pgfgantt/bar, fill=black!25}
+% \keyline[/.style=]{group incomplete}{\meta{style}}{/pgfgantt/group, fill=black!25}
+% \keyline[/.style=]{milestone incomplete}{\meta{style}}{/pgfgantt/milestone, fill=black!25}
+% If $P$ is the progress of a chart element, $P\,\%$ of its area (starting from the left) appear in the basic style (i.\,e., \opt{bar}, \opt{group}, \dots), while the remainder is drawn in style \opt{bar incomplete}, \opt{group incomplete} etc.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% time slot format=isodate,
+% today=2013-04-06,
+% progress=today,
+% bar/.append style={fill=green},
+% bar incomplete/.append style={fill=red},
+% group incomplete/.append style={draw=black,fill=none}
+% ]{2013-04-01}{2013-04-12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{2013-04-01}{2013-04-12} \\
+% \ganttbar{Subtask 1}{2013-04-01}{2013-04-03} \\
+% \ganttbar{Subtask 2}{2013-04-04}{2013-04-08} \\
+% \ganttbar{Subtask 3}{2013-04-09}{2013-04-12}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% time slot format=isodate,
+% today=2013-04-06,
+% progress=today,
+% bar/.append style={fill=green},
+% bar incomplete/.append style={fill=red},
+% group incomplete/.append style={draw=black,fill=none}
+% ]{2013-04-01}{2013-04-12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{2013-04-01}{2013-04-12} \\
+% \ganttbar{Subtask 1}{2013-04-01}{2013-04-03} \\
+% \ganttbar{Subtask 2}{2013-04-04}{2013-04-08} \\
+% \ganttbar{Subtask 3}{2013-04-09}{2013-04-12}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{progress label text}{\meta{text}}{\string\pgfmathprintnumber[precision=0, verbatim]\{\#1\}\string\% complete}
+% \keyline{bar progress label anchor}{\meta{anchor}}{east}
+% \keyline{bar progress label font}{\meta{font commands}}{\string\scriptsize}
+% \keyline[/.style=]{bar progress label node}{\meta{options}}{anchor=west, font=\string\ganttvalueof\{bar progress label font\}}
+% \keyline{group progress label anchor}{\meta{anchor}}{east}
+% \keyline{group progress label font}{\meta{font commands}}{\string\scriptsize}
+% \keyline[/.style=]{group progress label node}{\meta{options}}{anchor=west, font=\string\ganttvalueof\{group progress label font\}}
+% \keyline{milestone progress label anchor}{\meta{anchor}}{center}
+% \keyline{milestone progress label font}{\meta{font commands}}{\string\scriptsize}
+% \keyline[/.style=]{milestone progress label node}{\meta{options}}{anchor=west, font=\string\ganttvalueof\{milestone progress label font\}}
+% The \opt{progress label text} key sets the \meta{text} that appears beside each progress element in order to indicate its completeness. This key may contain a single parameter token (|#1|), which is replaced by the (possibly calculated) value of \opt{progress}. The progress label node is drawn at the \opt{\dots\ progress label anchor} of the respective chart element, with the \meta{font commands} given by \opt{\dots\ progress label font} and the \meta{options} given by \opt{\dots\ progress label node}.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% bar/.append style={fill=green},
+% bar incomplete/.append style={fill=red},
+% progress=today,
+% today=6,
+% group progress label node/.append style={below=3pt}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar[
+% bar progress label font=\color{green!25!black}\sffamily
+% ]{Subtask 1}{1}{3} \\
+% \ganttbar[
+% progress label text={$\displaystyle\frac{#1}{100}$}
+% ]{Subtask 2}{5}{12}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% bar/.append style={fill=green},
+% bar incomplete/.append style={fill=red},
+% progress=today,
+% today=6,
+% group progress label node/.append style={below=3pt}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttgroup{Group 1}{1}{10} \\
+% \ganttbar[
+% bar progress label font=\color{green!25!black}\sffamily
+% ]{Subtask 1}{1}{3} \\
+% \ganttbar[
+% progress label text={$\displaystyle\frac{#1}{100}$}
+% ]{Subtask 2}{5}{12}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsubsection{New Node Shapes}
+% \label{sss:NewNodeShapes}
+%
+% \pack{pgfgantt} defines three new node shapes:
+%
+% \bigskip\noindent
+% (1) The \texttt{ganttbar} node shape derives from shape \texttt{rectangle} (section~48.2 of the \TikZ\ manual). It provides four additional anchors: \texttt{on top}, \texttt{on bottom}, \texttt{on left} and \texttt{on right}. The \meta{fraction} set by the following keys indicates a position between the left and right (for \texttt{on top} and \texttt{on bottom}) or upper and lower border (for \texttt{on left} and \texttt{on right}), similarly to the \opt{/tikz/pos} key.
+%
+% \begin{key}{on top fraction}{\meta{fraction}}{0.5}
+% \keyline{on bottom fraction}{\meta{fraction}}{0.5}
+% \keyline{on left fraction}{\meta{fraction}}{0.5}
+% \keyline{on right fraction}{\meta{fraction}}{0.5}
+% In the following figures, \opt{on top/bottom fraction} is 0.7, whereas \opt{on left/right fraction} is 0.1.
+% \begin{center}
+% \begin{tikzpicture}
+% \ganttset{
+% on top fraction=.7,
+% on bottom fraction=.7,
+% on left fraction=.1,
+% on right fraction=.1
+% }
+% \node[
+% name=s,
+% shape=ganttbar,
+% color=black!30,
+% draw,
+% fill=yellow!30,
+% line width=.3cm,
+% inner xsep=2.5cm,
+% inner ysep=0.5cm,
+% font=\Huge
+% ] {ganttbar\vrule width 1pt height 2cm};
+% \foreach \anchor/\placement in
+% {north west/above left, north/above, north east/above right,
+% west/left, center/above, east/right,
+% mid west/right, mid/above, mid east/left,
+% base west/left, base/below, base east/right,
+% south west/below left, south/below, south east/below right,
+% text/below, 10/right, 130/above}
+% \draw [shift=(s.\anchor)] plot [mark=x] coordinates{(0, 0)}
+% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
+% \foreach \anchor/\placement in
+% {on top/above, on bottom/below, on left/left, on right/right}
+% \draw [color=red,shift=(s.\anchor)] plot [mark=x] coordinates{(0, 0)}
+% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
+% \end{tikzpicture}
+% \end{center}
+% \end{key}
+%
+% \bigskip\noindent
+% (2) The \texttt{ganttgroup} node shape also derives from shape \texttt{rectangle}. It provides the additional anchors \texttt{on top}, \texttt{on bottom}, \texttt{on left}, \texttt{on right} (same as above), \texttt{left peak} and \texttt{right peak}.
+% \begin{center}
+% \begin{tikzpicture}
+% \ganttset{
+% group peaks tip position=.5,
+% group peaks width=4,
+% group peaks height=1,
+% on top fraction=.7,
+% on bottom fraction=.7,
+% on left fraction=.1,
+% on right fraction=.1
+% }
+% \node[
+% name=s,
+% shape=ganttgroup,
+% color=black!30,
+% draw,
+% fill=yellow!30,
+% line width=.3cm,
+% inner xsep=2.5cm,
+% inner ysep=0.5cm,
+% font=\Huge
+% ] {ganttgroup\vrule width 1pt height 2cm};
+% \foreach \anchor/\placement in
+% {north west/above left, north/above, north east/above right,
+% west/left, center/above, east/right,
+% mid west/right, mid/above, mid east/left,
+% base west/left, base/below, base east/right,
+% south west/below left, south/below, south east/below right,
+% text/below, 10/right, 130/above}
+% \draw [shift=(s.\anchor)] plot [mark=x] coordinates{(0, 0)}
+% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
+% \foreach \anchor/\placement in
+% {on top/above, on bottom/below, on left/left, on right/right,
+% left peak/below, right peak/below}
+% \draw [color=red,shift=(s.\anchor)] plot [mark=x] coordinates{(0, 0)}
+% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
+% \end{tikzpicture}
+% \end{center}
+%
+% \bigskip\noindent
+% (3) The \texttt{ganttmilestone} node shape derives from shape \texttt{diamond} (section~48.3 of the \TikZ\ manual), but does not consider any aspect ratio. It provides the additional anchors \texttt{on top}, \texttt{on bottom}, \texttt{on left} and \texttt{on right} (same as above).
+% \begin{center}
+% \begin{tikzpicture}
+% \ganttset{
+% on top fraction=.7,
+% on bottom fraction=.7,
+% on left fraction=.1,
+% on right fraction=.1
+% }
+% \node[
+% name=s,
+% shape=ganttmilestone,
+% color=black!30,
+% draw,
+% fill=yellow!30,
+% line width=.3cm,
+% inner sep=0.5cm,
+% font=\Huge
+% ] {ganttmilestone\vrule width 1pt height 1cm};
+% \foreach \anchor/\placement in
+% {north west/above left, north/above, north east/above right,
+% west/left, center/above, east/right, mid/above, base/below,
+% south west/below left, south/below, south east/below right,
+% text/left, 10/right, 130/above}
+% \draw [shift=(s.\anchor)] plot [mark=x] coordinates{(0, 0)}
+% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
+% \foreach \anchor/\placement in
+% {on top/above, on bottom/below, on left/left, on right/right}
+% \draw [color=red,shift=(s.\anchor)] plot [mark=x] coordinates{(0, 0)}
+% node [\placement] {\scriptsize\texttt{(s.\anchor)}};
+% \end{tikzpicture}
+% \end{center}
+%
+%
+% \subsection{Defining Custom Chart Elements}
+%
+% You may define completely new chart elements with
+% \begin{texcode}
+% \newganttchartelement`\marg{name}\marg{new default key values}'
+% \newganttchartelement*`\marg{name}\marg{new default key values}'
+% \end{texcode}
+% \DescribeMacro{\newganttchartelement}|\newganttchartelement| (unstarred) defines a new chart element |\gantt|\textcolor{RoyalBlue}{\meta{name}} and the corresponding |\ganttlinked|\textcolor{RoyalBlue}{\meta{name}}. These chart element macros take one optional argument \meta{options} and \textit{three} mandatory arguments \meta{label}, \meta{start tss} and \meta{end tss} (like |\ganttbar|).
+%
+% Chart element macros defined by the starred form, \DescribeMacro{\newganttchartelement*}|\newganttchartelement*|, take the same single optional argument, but \textit{two} mandatory arguments \meta{label} and \meta{tss} (like |\ganttmilestone|).
+%
+% For each new chart element, |\newganttchartelement| also introduces a set of nine value-storing keys and five style keys and assigns default values to them:
+% \begin{center}
+% \begin{tabular}{l >{\ttfamily}l}
+% \toprule
+% \itshape Key & \rmfamily\itshape Default value \\
+% \midrule
+% \multicolumn{2}{l}{\bfseries Style keys} \\
+% \meta{name} & shape=rectangle, inner sep=0pt, draw, fill=white \\
+% \meta{name}\texttt{ incomplete} & /pgfgantt/\textrm{\meta{name}}, fill=black!25 \\
+% \meta{name}\texttt{ label node} & anchor=east, font=\string\ganttvalueof\{\textrm{\meta{name}} label font\} \\
+% \meta{name}\texttt{ inline label node} & anchor=center, font=\string\ganttvalueof\{\textrm{\meta{name}} label font\} \\
+% \meta{name}\texttt{ progress label node} & anchor=west, font=\string\ganttvalueof\{\textrm{\meta{name}} progress label font\} \\
+% \midrule
+% \multicolumn{2}{l}{\bfseries Value-storing keys} \\
+% \meta{name}\texttt{ label font} & \string\normalsize \\
+% \meta{name}\texttt{ inline label anchor} & center \\
+% \meta{name}\texttt{ progress label anchor} & east \\
+% \meta{name}\texttt{ progress label font} & \string\scriptsize \\
+% \meta{name}\texttt{ left shift} & 0 \\
+% \meta{name}\texttt{ right shift} & 0 \\
+% \meta{name}\texttt{ top shift} & .3 \\
+% \meta{name}\texttt{ height} & .4 \\
+% \meta{name}\texttt{ label text} & \string\strut\#1 \\
+% \bottomrule
+% \end{tabular}\hspace*{-120pt}
+% \end{center}
+% Consequently, a new chart element will look like the standard |\ganttbar| unless you introduce some \meta{new default key values}.
+%
+% Let us define a new chart element called ``foobar'', which is basically a fancy-colored and -shaped bar:
+% \par\bigskip\noindent
+% \begin{texcode}
+% \definecolor{foobarblue}{RGB}{0,153,255}
+% \definecolor{foobaryellow}{RGB}{234,187,0}
+%
+% \newganttchartelement{foobar}{
+% foobar/.style={
+% shape=rounded rectangle,
+% inner sep=0pt,
+% draw=foobarblue!50!black,
+% very thick,
+% top color=white,
+% bottom color=foobarblue!50
+% },
+% foobar incomplete/.style={
+% /pgfgantt/foobar,
+% draw=foobaryellow,
+% bottom color=foobaryellow!50
+% },
+% foobar label font=\slshape,
+% foobar left shift=-.1,
+% foobar right shift=.1
+% }
+%
+% \begin{ganttchart}[
+% vgrid,
+% progress=today,
+% progress label text=\relax,
+% today=6
+% ]{1}{12}
+% \gantttitlecalendar{day} \\[grid]
+% \ganttfoobar{Foobar 1}{1}{2} \\
+% \ganttfoobar{Foobar 2}{3}{7} \\
+% \ganttlinkedfoobar{Foobar 3}{9}{12}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \definecolor{foobarblue}{RGB}{0,153,255}
+% \definecolor{foobaryellow}{RGB}{234,187,0}
+%
+% \newganttchartelement{foobar}{
+% foobar/.style={
+% shape=rounded rectangle,
+% inner sep=0pt,
+% draw=foobarblue!50!black,
+% very thick,
+% top color=white,
+% bottom color=foobarblue!50
+% },
+% foobar incomplete/.style={
+% /pgfgantt/foobar,
+% draw=foobaryellow,
+% bottom color=foobaryellow!50
+% },
+% foobar label font=\slshape,
+% foobar left shift=-.1,
+% foobar right shift=.1
+% }
+%
+% \begin{ganttchart}[
+% vgrid,
+% progress=today,
+% progress label text=\relax,
+% today=6
+% ]{1}{12}
+% \gantttitlecalendar{day} \\[grid]
+% \ganttfoobar{Foobar 1}{1}{2} \\
+% \ganttfoobar{Foobar 2}{3}{7} \\
+% \ganttlinkedfoobar{Foobar 3}{9}{12}
+% \end{ganttchart}
+% \end{center}
+%
+%
+% \subsection{Links}
+% \label{ssc:Links}
+%
+% So far, we have drawn charts whose elements were quite independent of each other. However, relations or \textit{links} between these elements frequently appear on real Gantt charts. For example, a task may only start if a previous one has been completed, or finishing a task may constitute a milestone.
+% \begin{texcode}
+% \ganttlink`\oarg{options}\marg{start element name}\marg{end element name}'
+% \end{texcode}
+%
+% \begin{key}{name}{\meta{name}}{\textrm{(empty)}}
+% The \DescribeMacro{\ganttlink}|\ganttlink| macro connects two elements, which are specified by their \meta{name}s. By default, chart elements are named automatically: The first one receives the name \texttt{elem0}, the second one is called \texttt{elem1} and so on. However, the \opt{name} key allows you to assign a name to each chart element.
+% \par\bigskip\noindent
+% \begin{minipage}[t]{.44\textwidth}
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttbar{Task 2}{5}{7} \\
+% \ganttbar{Task 3}{10}{12}
+% \ganttlink{elem0}{elem1}
+% \ganttlink{elem1}{elem2}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}\hfill
+% \begin{minipage}[t]{.44\textwidth}
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar[name=b1]%
+% {Task 1}{1}{4} \\
+% \ganttbar[name=b2]%
+% {Task 2}{5}{7} \\
+% \ganttbar[name=xyz]%
+% {Task 3}{10}{12}
+% \ganttlink{b1}{b2}
+% \ganttlink{b2}{xyz}
+% \end{ganttchart}
+% \end{texcode}
+% \end{minipage}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar[name=b1]%
+% {Task 1}{1}{4} \\
+% \ganttbar[name=b2]%
+% {Task 2}{5}{7} \\
+% \ganttbar[name=xyz]%
+% {Task 3}{10}{12}
+% \ganttlink{b1}{b2}
+% \ganttlink{b2}{xyz}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}[/.style=]{link}{\meta{style}}{-latex, rounded corners=1pt}
+% Sets the appearance of the link.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link/.style={[-to, line width=1pt, blue}
+% ]{1}{7}
+% \gantttitle{Title}{7} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttbar{Task 2}{5}{7}
+% \ganttlink{elem0}{elem1}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link/.style={[-to, line width=1pt, blue}
+% ]{1}{7}
+% \gantttitle{Title}{7} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttbar{Task 2}{5}{7}
+% \ganttlink{elem0}{elem1}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \begin{key}{link type}{\meta{type}}{auto}
+% Link types fall into several categories:
+% \begin{enumerate}\parskip0pt
+% \item \textit{Automatic links} are arrow-like. As you can see from the examples above, they consist of three segments (two horizontal, one vertical) if their start and end time slots are sufficiently separated. Otherwise, they comprise five segments (three horizontal, two vertical). Three keys further modify the appearance of automatic links:
+%
+% \begin{key}{link mid}{\meta{factor}}{0.5}
+% Changes the position of the single vertical segment (in three-part links) or of the middle horizontal segment (in five-part links). By default, these segments are horizontally centered between the left and the right vertical segment, or vertically centered between the upper and the lower horizontal segment, respectively.\par\bigskip
+% \keyline{link bulge}{\meta{factor}}{0.4}
+% In five-part links, the upper and lower vertical segments are shifted along the $x$-axis by $+$\meta{factor} and $-$\meta{factor}, respectively.\par\bigskip
+% \keyline{link tolerance}{\meta{factor}}{0.6}
+% Decides whether \pack{pgfgantt} draws a five- or a three-part link. If the true $x$-coordinates of the link start and end differ by at least \meta{factor} (this is the case for the second link in the example below), the package draws a five-part link.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[vgrid, hgrid, link mid=.25, link bulge=1.3]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttbar{Task 2}{5}{7} \\
+% \ganttbar{Task 3}{10}{12}
+% \ganttlink{elem0}{elem1}
+% \ganttlink[link mid=.8]{elem1}{elem2}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[vgrid, hgrid, link mid=.25, link bulge=1.3]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{1}{4} \\
+% \ganttbar{Task 2}{5}{7} \\
+% \ganttbar{Task 3}{10}{12}
+% \ganttlink{elem0}{elem1}
+% \ganttlink[link mid=.8]{elem1}{elem2}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+% \item \textit{Straight links} are only meant for connecting two bars in order to establish start-to-finish relations (\texttt{s-f}), start-to-start relations (\texttt{s-s}) etc. Their \meta{type} identifiers are reminiscent of the syntax for specifying arrow tips in \TikZ: Each identifier is composed of two letters separated by a hyphen.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link/.style={-latex, draw=red, fill=red}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{2}{5} \\
+% \ganttbar{Task 3}{6}{11} \\
+% \ganttbar{Task 4}{8}{11}
+% \ganttlink[link type=s-s]{elem0}{elem1}
+% \ganttlink[link type=f-s]{elem1}{elem2}
+% \ganttlink[link type=f-f]{elem2}{elem3}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link/.style={-latex, draw=red, fill=red}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{2}{5} \\
+% \ganttbar{Task 3}{6}{11} \\
+% \ganttbar{Task 4}{8}{11}
+% \ganttlink[link type=s-s]{elem0}{elem1}
+% \ganttlink[link type=f-s]{elem1}{elem2}
+% \ganttlink[link type=f-f]{elem2}{elem3}
+% \end{ganttchart}
+% \end{center}
+%
+% \item \textit{Custom links} allow you to define completely new link types. Strictly speaking, automatic and straight links are predefined custom links whose code supports the keys mentioned above (section~\ref{ssc:ImplLinks} presents the \TikZ\ code of these links).\par
+% For instance, \pack{pgfgantt} provides one additional link type, \texttt{dr} (short for ``down-right''). This type is convenient for connecting inline-labeled bars if the label of the start bar protrudes from its right border.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% inline,
+% link/.style={->, ultra thick}
+% ]{1}{15}
+% \gantttitle{Title}{15} \\
+% \ganttbar{A really long label}{1}{3}
+% \ganttbar{Another really long label}{10}{12} \\
+% \ganttbar{Task 3}{4}{6}
+% \ganttbar{Task 4}{13}{15}
+% \ganttlink[link/.append style=red]{elem0}{elem2}
+% \ganttlink[link/.append style=green, link type=dr]{elem1}{elem3}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% inline,
+% link/.style={->, ultra thick}
+% ]{1}{15}
+% \gantttitle{Title}{15} \\
+% \ganttbar{A really long label}{1}{3}
+% \ganttbar{Another really long label}{10}{12} \\
+% \ganttbar{Task 3}{4}{6}
+% \ganttbar{Task 4}{13}{15}
+% \ganttlink[link/.append style=red]{elem0}{elem2}
+% \ganttlink[link/.append style=green, link type=dr]{elem1}{elem3}
+% \end{ganttchart}
+% \end{center}
+%
+% The following macro creates new link types:
+% \begin{texcode}
+% \newganttlinktype`\marg{type}\marg{TikZ code}'
+% \end{texcode}
+% \DescribeMacro{\newganttlinktype}It defines a new link \meta{type} which is drawn by the given \meta{TikZ code}. When you write this code, you do not have to know the final absolute coordinates of each link type instance. On the contrary, several commands that are only available in the second argument of |\newganttlinktype| help you to design generic link types:
+% \begin{itemize}
+% \item First, you have to choose the border points of the chart elements the link will connect. For this purpose, \DescribeMacro{\ganttsetstartanchor}|\ganttsetstartanchor{|\meta{anchor}|}| and \DescribeMacro{\ganttsetendanchor}|\ganttsetendanchor{|\meta{anchor}|}| select an \meta{anchor} of the start and end element, respectively. See the figures in section~\ref{sss:NewNodeShapes} for possible \meta{anchor}s of the default chart element shapes. You may specify a certain \meta{fraction} for anchors like \texttt{on top} by |\ganttsetstartanchor{on top=|\meta{fraction}|}|.
+%
+% \pack{pgfgantt} sets the default anchors to |\ganttsetstartanchor{east}| and |\ganttsetendanchor{west}|, so you even may omit these two commands.
+% \item The two macro pairs \DescribeMacro{\xLeft}|\xLeft|/\DescribeMacro{\yUpper}|\yUpper| and \DescribeMacro{\xRight}|\xRight|/\DescribeMacro{\yLower}|\yLower| provide the $x$- and $y$-coordinates of the link start and end points, respectively.
+% \begin{center}\makeatletter
+% \begin{ganttchart}[vgrid, hgrid, x unit=.9cm, y unit chart=2cm, link/.style={draw=black!30, ultra thick, ->, rounded corners=5pt}]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar[inline]{Task 1}{2}{4} \\
+% \ganttbar[inline]{Task 2}{7}{9}
+% \ganttlink{elem0}{elem1}
+% \fill [red!10!blue] (elem0.east) circle [radius=1.5pt] node [above right] {(\texttt{\string\xLeft}, \texttt{\string\yUpper})};
+% \fill [red!90!blue] (elem1.west) circle [radius=1.5pt] node [below left] {(\texttt{\string\xRight}, \texttt{\string\yLower})};
+% \end{ganttchart}
+% \end{center}
+% \item \DescribeMacro{\ganttlinklabel}|\ganttlinklabel| contains the label that you may assign to each link type via |\setganttlinklabel| or the \opt{link label} key (see below).
+% \item You can access any values stored in the package's \meta{key}s with the macro \DescribeMacro{\ganttvalueof}|\ganttvalueof|\marg{key}.
+% \item Remember that you can use the style \opt{/pgfgantt/link} to ensure a uniform appearance of all your link types.
+% \end{itemize}
+% \end{enumerate}
+% \end{key}
+%
+% \begin{texcode}
+% \newganttlinktypealias`\marg{new type}\marg{existing type}'
+% \end{texcode}
+% \DescribeMacro{\newganttlinktypealias}|\newganttlinktypealias| lets a \meta{new type} equal an \meta{existing type}, also copying any label that has been set for the \meta{existing type}.
+% \par\bigskip
+% \begin{texcode}
+% \setganttlinklabel`\marg{type}\marg{label}'
+% \end{texcode}
+% \DescribeMacro{\setganttlinklabel}|\setganttlinklabel| sets a \meta{label} for the given link \meta{type}. In the following example, note how \texttt{sta-to-sta} and \texttt{s-s} share a common label, while we change the label of \texttt{fin-to-fin}.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \newganttlinktypealias{sta-to-sta}{s-s}
+% \newganttlinktypealias{fin-to-fin}{f-f}
+% \setganttlinklabel{fin-to-fin}{f2f}
+%
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{2}{8} \\
+% \ganttbar{Task 3}{6}{8}
+% \ganttlink[link type=sta-to-sta]{elem0}{elem1}
+% \ganttlink[link type=fin-to-fin]{elem1}{elem2}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \newganttlinktypealias{sta-to-sta}{s-s}
+% \newganttlinktypealias{fin-to-fin}{f-f}
+% \setganttlinklabel{fin-to-fin}{f2f}
+%
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{2}{8} \\
+% \ganttbar{Task 3}{6}{8}
+% \ganttlink[link type=sta-to-sta]{elem0}{elem1}
+% \ganttlink[link type=fin-to-fin]{elem1}{elem2}
+% \end{ganttchart}
+% \end{center}
+% \par\bigskip Let's put it all together and devise two new link types. Firstly, \texttt{zigzag} connects the lower right corner of the start element and the upper left corner of the end element with a thick, cyan line decorated by a zigzag pattern.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \usetikzlibrary{decorations.pathmorphing}
+%
+% \newganttlinktype{zigzag}{
+% \ganttsetstartanchor{on right=1}
+% \ganttsetendanchor{on left=0}
+% \draw [decoration=zigzag, decorate, thick, cyan]
+% (\xLeft, \yUpper) --
+% (\xRight, \yLower);
+% }
+%
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{7}{12}
+% \ganttlink[link type=zigzag]{elem0}{elem1}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \newganttlinktype{zigzag}{
+% \ganttsetstartanchor{on right=1}
+% \ganttsetendanchor{on left=0}
+% \draw [decoration=zigzag, decorate, thick, cyan]
+% (\xLeft, \yUpper) --
+% (\xRight, \yLower);
+% }
+% \begin{ganttchart}[vgrid, hgrid]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{7}{12}
+% \ganttlink[link type=zigzag]{elem0}{elem1}
+% \end{ganttchart}
+% \end{center}
+% Secondly, \texttt{drur} (short for down-right-up-right) draws a labelled arrow in the default style \opt{link}. The link starts at the bottom of the first element and connects to the left border of the second one. In addition, the known keys \opt{link mid} and \opt{link bulge} decide where the line going up is positioned and how far the first line going right is below the start coordinate, respectively.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \newganttlinktype{drur}{
+% \ganttsetstartanchor{on bottom=0.75}
+% \ganttsetendanchor{on left}
+% \draw [/pgfgantt/link]
+% % first segment (down)
+% (\xLeft, \yUpper) --
+% % second segment (right)
+% (\xLeft, \yUpper -
+% \ganttvalueof{link bulge} * \ganttvalueof{y unit chart}) --
+% % link label
+% node [pos=.5, /pgfgantt/link label anchor] {\ganttlinklabel}
+% % third segment (up)
+% ($(\xLeft,
+% \yUpper -
+% \ganttvalueof{link bulge} * \ganttvalueof{y unit chart})!%
+% \ganttvalueof{link mid}!%
+% (\xRight,
+% \yUpper -
+% \ganttvalueof{link bulge} * \ganttvalueof{y unit chart})$) --
+% % last segment (right again)
+% ($(\xLeft, \yLower)!%
+% \ganttvalueof{link mid}!%
+% (\xRight, \yLower)$) --
+% (\xRight, \yLower);
+% }
+% \setganttlinklabel{drur}{a fancy link}
+%
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link/.style={thick, ->, green!50!black, rounded corners=2mm},
+% link label anchor/.style=below,
+% link mid=.7, link bulge=.6
+% ]{1}12}
+% \gantttitle{Title}{12} \\
+% \ganttbar[inline]{Task 1}{2}{4}
+% \ganttbar[inline]{Task 2}{8}{11} \\
+% \ganttlink[link type=drur]{elem0}{elem1}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \newganttlinktype{drur}{
+% \ganttsetstartanchor{on bottom=0.75}
+% \ganttsetendanchor{on left}
+% \draw [/pgfgantt/link]
+% (\xLeft, \yUpper) --
+% (\xLeft, \yUpper -
+% \ganttvalueof{link bulge} * \ganttvalueof{y unit chart}) --
+% node [pos=.5, /pgfgantt/link label anchor] {\ganttlinklabel}
+% ($(\xLeft,
+% \yUpper -
+% \ganttvalueof{link bulge} * \ganttvalueof{y unit chart})!%
+% \ganttvalueof{link mid}!%
+% (\xRight,
+% \yUpper -
+% \ganttvalueof{link bulge} * \ganttvalueof{y unit chart})$) --
+% ($(\xLeft, \yLower)!%
+% \ganttvalueof{link mid}!%
+% (\xRight, \yLower)$) --
+% (\xRight, \yLower);
+% }
+% \setganttlinklabel{drur}{a fancy link}
+%
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link/.style={thick, ->, green!50!black, rounded corners=2mm},
+% link label anchor/.style=below,
+% link mid=.7, link bulge=.6
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar[inline]{Task 1}{2}{4}
+% \ganttbar[inline]{Task 2}{8}{11} \\
+% \ganttlink[link type=drur]{elem0}{elem1}
+% \end{ganttchart}
+% \end{center}
+% (Please remove the comments if you copy the code above -- they will confuse \TikZ\ and generate tons of errors.)
+%
+% \begin{key}{link label}{\meta{label}}{\textrm{(empty)}}
+% \keyline{link label font}{\meta{font commands}}{\string\scriptsize\string\itshape}
+% \keyline[/.style=]{link label node}{\meta{options}}{anchor=west, font=\string\ganttvalueof\{link label font\}}
+% The \opt{link label} key locally overrides any label specified by |\setganttlinklabel|. The \meta{font commands} and \meta{options} are applied to the link label node. By default, the label appears to the right of the straight link's center.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link label font=\small\bfseries\color{purple}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{2}{5} \\
+% \ganttbar{Task 3}{6}{11} \\
+% \ganttbar{Task 4}{8}{11} \\
+% \ganttbar{Task 5}{4}{7}
+% \ganttlink[link type=s-s]{elem0}{elem1}
+% \ganttlink[link type=f-s, link label={f$\to$s}]{elem1}{elem2}
+% \ganttlink[
+% link type=f-f,
+% link label node/.append style={anchor=east}
+% ]{elem2}{elem3}
+% \ganttlink[
+% link type=s-f,
+% link label node/.append style={anchor=base}
+% ]{elem3}{elem4}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% vgrid,
+% hgrid,
+% link label font=\small\bfseries\color{purple}
+% ]{1}{12}
+% \gantttitle{Title}{12} \\
+% \ganttbar{Task 1}{2}{3} \\
+% \ganttbar{Task 2}{2}{5} \\
+% \ganttbar{Task 3}{6}{11} \\
+% \ganttbar{Task 4}{8}{11} \\
+% \ganttbar{Task 5}{4}{7}
+% \ganttlink[link type=s-s]{elem0}{elem1}
+% \ganttlink[link type=f-s, link label={f$\to$s}]{elem1}{elem2}
+% \ganttlink[
+% link type=f-f,
+% link label node/.append style={anchor=east}
+% ]{elem2}{elem3}
+% \ganttlink[
+% link type=s-f,
+% link label node/.append style={anchor=base}
+% ]{elem3}{elem4}
+% \end{ganttchart}
+% \end{center}
+% \end{key}
+%
+%
+% \subsection{Style Examples}
+%
+% The first example plays around with colors and notably uses equal $x$- and $y$-vectors.
+% \par\bigskip\noindent
+% \begin{texcode}
+% \begin{ganttchart}[
+% y unit title=0.4cm,
+% y unit chart=0.5cm,
+% vgrid,
+% time slot format=isodate-yearmonth,
+% time slot unit=month,
+% title/.append style={draw=none, fill=RoyalBlue!50!black},
+% title label font=\sffamily\bfseries\color{white},
+% title label node/.append style={below=-1.6ex},
+% title left shift=.05,
+% title right shift=-.05,
+% title height=1,
+% bar/.append style={draw=none, fill=OliveGreen!75},
+% bar height=.6,
+% bar label font=\normalsize\color{black!50},
+% group right shift=0,
+% group top shift=.6,
+% group height=.3,
+% group peaks height=.2,
+% bar incomplete/.append style={fill=Maroon}
+% ]{2010-09}{2011-12}
+% \gantttitlecalendar{year} \\
+% \ganttbar[
+% progress=100,
+% bar progress label font=\small\color{OliveGreen!75},
+% bar progress label node/.append style={right=4pt},
+% bar label font=\normalsize\color{OliveGreen},
+% name=pp
+% ]{Preliminary Project}{2010-09}{2010-12} \\
+% \ganttset{progress label text={}, link/.style={black, -to}}
+% \ganttgroup{Objective 1}{2011-01}{2011-12} \\
+% \ganttbar[progress=4, name=T1A]{Task A}{2011-01}{2011-06} \\
+% \ganttlinkedbar[progress=0]{Task B}{2011-07}{2011-12} \\
+% \ganttgroup{Objective 2}{2011-01}{2011-12} \\
+% \ganttbar[progress=15, name=T2A]{Task A}{2011-01}{2011-09} \\
+% \ganttlinkedbar[progress=0]{Task B}{2011-10}{2011-12} \\
+% \ganttgroup{Objective 3}{2011-05}{2011-08} \\
+% \ganttbar[progress=0]{Task A}{2011-05}{2011-08}
+% \ganttset{link/.style={OliveGreen}}
+% \ganttlink[link mid=.4]{pp}{T1A}
+% \ganttlink[link mid=.159]{pp}{T2A}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \begin{ganttchart}[
+% y unit title=0.4cm,
+% y unit chart=0.5cm,
+% vgrid,
+% time slot format=isodate-yearmonth,
+% time slot unit=month,
+% title/.append style={draw=none, fill=RoyalBlue!50!black},
+% title label font=\sffamily\bfseries\color{white},
+% title label node/.append style={below=-1.6ex},
+% title left shift=.05,
+% title right shift=-.05,
+% title height=1,
+% bar/.append style={draw=none, fill=OliveGreen!75},
+% bar height=.6,
+% bar label font=\normalsize\color{black!50},
+% group right shift=0,
+% group top shift=.6,
+% group height=.3,
+% group peaks height=.2,
+% bar incomplete/.append style={fill=Maroon}
+% ]{2010-09}{2011-12}
+% \gantttitlecalendar{year} \\
+% \ganttbar[
+% progress=100,
+% bar progress label font=\small\color{OliveGreen!75},
+% bar progress label node/.append style={right=4pt},
+% bar label font=\normalsize\color{OliveGreen},
+% name=pp
+% ]{Preliminary Project}{2010-09}{2010-12} \\
+% \ganttset{progress label text={}, link/.style={black, -to}}
+% \ganttgroup{Objective 1}{2011-01}{2011-12} \\
+% \ganttbar[progress=4, name=T1A]{Task A}{2011-01}{2011-06} \\
+% \ganttlinkedbar[progress=0]{Task B}{2011-07}{2011-12} \\
+% \ganttgroup{Objective 2}{2011-01}{2011-12} \\
+% \ganttbar[progress=15, name=T2A]{Task A}{2011-01}{2011-09} \\
+% \ganttlinkedbar[progress=0]{Task B}{2011-10}{2011-12} \\
+% \ganttgroup{Objective 3}{2011-05}{2011-08} \\
+% \ganttbar[progress=0]{Task A}{2011-05}{2011-08}
+% \ganttset{link/.style={OliveGreen}}
+% \ganttlink[link mid=.4]{pp}{T1A}
+% \ganttlink[link mid=.159]{pp}{T2A}
+% \end{ganttchart}
+% \end{center}
+%
+% \bigskip
+% The second example demonstrates that \pack{pgfgantt} is really flexible: Even an appearance quite different from the standard layout is possible. (More precisely, the code below tries to reproduce the Gantt chart from the English Wikipedia site, see \url{http://en.wikipedia.org/wiki/Gantt_chart}.)
+% \par\bigskip\noindent
+% \begin{texcode}
+% \definecolor{barblue}{RGB}{153,204,254}
+% \definecolor{groupblue}{RGB}{51,102,254}
+% \definecolor{linkred}{RGB}{165,0,33}
+% \renewcommand\sfdefault{phv}
+% \renewcommand\mddefault{mc}
+% \renewcommand\bfdefault{bc}
+% \setganttlinklabel{s-s}{START-TO-START}
+% \setganttlinklabel{f-s}{FINISH-TO-START}
+% \setganttlinklabel{f-f}{FINISH-TO-FINISH}
+% \sffamily
+% \begin{ganttchart}[
+% canvas/.append style={fill=none, draw=black!5, line width=.75pt},
+% hgrid style/.style={draw=black!5, line width=.75pt},
+% vgrid={*1{draw=black!5, line width=.75pt}},
+% today=7,
+% today rule/.style={
+% draw=black!64,
+% dash pattern=on 3.5pt off 4.5pt,
+% line width=1.5pt
+% },
+% today label font=\small\bfseries,
+% title/.style={draw=none, fill=none},
+% title label font=\bfseries\footnotesize,
+% title label node/.append style={below=7pt},
+% include title in canvas=false,
+% bar label font=\mdseries\small\color{black!70},
+% bar label node/.append style={left=2cm},
+% bar/.append style={draw=none, fill=black!63},
+% bar incomplete/.append style={fill=barblue},
+% bar progress label font=\mdseries\footnotesize\color{black!70},
+% group incomplete/.append style={fill=groupblue},
+% group left shift=0,
+% group right shift=0,
+% group height=.5,
+% group peaks tip position=0,
+% group label node/.append style={left=.6cm},
+% group progress label font=\bfseries\small,
+% link/.style={-latex, line width=1.5pt, linkred},
+% link label font=\scriptsize\bfseries,
+% link label node/.append style={below left=-2pt and 0pt}
+% ]{1}{13}
+% \gantttitle[
+% title label node/.append style={below left=7pt and -3pt}
+% ]{WEEKS:\quad1}{1}
+% \gantttitlelist{2,...,13}{1} \\
+% \ganttgroup[progress=57]{WBS 1 Summary Element 1}{1}{10} \\
+% \ganttbar[
+% progress=75,
+% name=WBS1A
+% ]{\textbf{WBS 1.1} Activity A}{1}{8} \\
+% \ganttbar[
+% progress=67,
+% name=WBS1B
+% ]{\textbf{WBS 1.2} Activity B}{1}{3} \\
+% \ganttbar[
+% progress=50,
+% name=WBS1C
+% ]{\textbf{WBS 1.3} Activity C}{4}{10} \\
+% \ganttbar[
+% progress=0,
+% name=WBS1D
+% ]{\textbf{WBS 1.4} Activity D}{4}{10} \\[grid]
+% \ganttgroup[progress=0]{WBS 2 Summary Element 2}{4}{10} \\
+% \ganttbar[progress=0]{\textbf{WBS 2.1} Activity E}{4}{5} \\
+% \ganttbar[progress=0]{\textbf{WBS 2.2} Activity F}{6}{8} \\
+% \ganttbar[progress=0]{\textbf{WBS 2.3} Activity G}{9}{10}
+% \ganttlink[link type=s-s]{WBS1A}{WBS1B}
+% \ganttlink[link type=f-s]{WBS1B}{WBS1C}
+% \ganttlink[
+% link type=f-f,
+% link label node/.append style=left
+% ]{WBS1C}{WBS1D}
+% \end{ganttchart}
+% \end{texcode}
+% \begin{center}
+% \definecolor{barblue}{RGB}{153,204,254}
+% \definecolor{groupblue}{RGB}{51,102,254}
+% \definecolor{linkred}{RGB}{165,0,33}
+% \renewcommand\sfdefault{phv}
+% \renewcommand\mddefault{mc}
+% \renewcommand\bfdefault{bc}
+% \setganttlinklabel{s-s}{START-TO-START}
+% \setganttlinklabel{f-s}{FINISH-TO-START}
+% \setganttlinklabel{f-f}{FINISH-TO-FINISH}
+% \sffamily
+% \begin{ganttchart}[
+% canvas/.append style={fill=none, draw=black!5, line width=.75pt},
+% hgrid style/.style={draw=black!5, line width=.75pt},
+% vgrid={*1{draw=black!5, line width=.75pt}},
+% today=7,
+% today rule/.style={
+% draw=black!64,
+% dash pattern=on 3.5pt off 4.5pt,
+% line width=1.5pt
+% },
+% today label font=\small\bfseries,
+% title/.style={draw=none, fill=none},
+% title label font=\bfseries\footnotesize,
+% title label node/.append style={below=7pt},
+% include title in canvas=false,
+% bar label font=\mdseries\small\color{black!70},
+% bar label node/.append style={left=2cm},
+% bar/.append style={draw=none, fill=black!63},
+% bar incomplete/.append style={fill=barblue},
+% bar progress label font=\mdseries\footnotesize\color{black!70},
+% group incomplete/.append style={fill=groupblue},
+% group left shift=0,
+% group right shift=0,
+% group height=.5,
+% group peaks tip position=0,
+% group label node/.append style={left=.6cm},
+% group progress label font=\bfseries\small,
+% link/.style={-latex, line width=1.5pt, linkred},
+% link label font=\scriptsize\bfseries,
+% link label node/.append style={below left=-2pt and 0pt}
+% ]{1}{13}
+% \gantttitle[
+% title label node/.append style={below left=7pt and -3pt}
+% ]{WEEKS:\quad1}{1}
+% \gantttitlelist{2,...,13}{1} \\
+% \ganttgroup[progress=57]{WBS 1 Summary Element 1}{1}{10} \\
+% \ganttbar[
+% progress=75,
+% name=WBS1A
+% ]{\textbf{WBS 1.1} Activity A}{1}{8} \\
+% \ganttbar[
+% progress=67,
+% name=WBS1B
+% ]{\textbf{WBS 1.2} Activity B}{1}{3} \\
+% \ganttbar[
+% progress=50,
+% name=WBS1C
+% ]{\textbf{WBS 1.3} Activity C}{4}{10} \\
+% \ganttbar[
+% progress=0,
+% name=WBS1D
+% ]{\textbf{WBS 1.4} Activity D}{4}{10} \\[grid]
+% \ganttgroup[progress=0]{WBS 2 Summary Element 2}{4}{10} \\
+% \ganttbar[progress=0]{\textbf{WBS 2.1} Activity E}{4}{5} \\
+% \ganttbar[progress=0]{\textbf{WBS 2.2} Activity F}{6}{8} \\
+% \ganttbar[progress=0]{\textbf{WBS 2.3} Activity G}{9}{10}
+% \ganttlink[link type=s-s]{WBS1A}{WBS1B}
+% \ganttlink[link type=f-s]{WBS1B}{WBS1C}
+% \ganttlink[
+% link type=f-f,
+% link label node/.append style=left
+% ]{WBS1C}{WBS1D}
+% \end{ganttchart}
+% \end{center}
+%
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+% \lstDeleteShortInline|
+% \MakeShortVerb{\|}
+% \clearpage\section{Implementation}
+%
+%
+% \subsection{Packages}
+%
+% \pack{pgfgantt} is modest in terms of dependencies: It only requires the \TikZ\ and \pack{pgfcalendar} packages.
+%
+% \iffalse
+%<*pgfgantt>
+% \fi
+% \begin{macrocode}
+\RequirePackage{tikz}
+\usetikzlibrary{%
+ arrows, backgrounds, calc,%
+ patterns, positioning, shapes.geometric%
+}
+\RequirePackage{pgfcalendar}
+
+% \end{macrocode}
+%
+%
+% \subsection{Macros for Key and Error Management}
+%
+% \begin{intmacro}{\@gtt@ifstar}
+% |\@gtt@ifstar| reimplements the \LaTeXe\ kernel's |\@ifstar| macro.
+% This makes it robust to \pack{amsgen}'s reimplementation of
+% |\@ifstar|.
+% \begin{macrocode}
+\def\@gtt@ifstar#1{\kernel@ifnextchar*{\@firstoftwo{#1}}}
+% \end{macrocode}
+% \end{intmacro}
+%
+% \begin{macro}{\ganttset}
+% |\ganttset| changes the current key path to |/pgfgantt/| and then executes the keys in its mandatory argument.
+% \begin{macrocode}
+\def\ganttset#1{\pgfqkeys{/pgfgantt}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \begin{intmacro}{\@gtt@keydef}
+% The following auxiliary macros save us some code when we devise keys later on. |\@gtt@keydef|\marg{key}\marg{initial value} declares the key |/pgfgantt/|\meta{key} and stores its \meta{initial value}.
+% \begin{macrocode}
+\def\@gtt@keydef#1#2{%
+ \pgfkeyssetvalue{/pgfgantt/#1}{#2}%
+}
+% \end{macrocode}
+% \end{intmacro}
+% \begin{macro}{\ganttvalueof}
+% |\ganttvalueof|\marg{key} retrieves the value stored by a \meta{key}. Link type authors should be able to use this macro in their code; thus, it lacks any |@|s.
+% \begin{macrocode}
+\def\ganttvalueof#1{%
+ \pgfkeysvalueof{/pgfgantt/#1}%
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{intmacro}{\@gtt@stylekeydef}
+% |\@gtt@stylekeydef|\marg{key}\marg{initial style} declares a style \meta{key} with an \meta{initial style}.
+% \begin{macrocode}
+\def\@gtt@stylekeydef#1#2{%
+ \pgfkeys{/pgfgantt/#1/.style={#2}}%
+}
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\@gtt@PackageError}
+% \begin{intmacro}{\@gtt@PackageWarning}
+% |\@gtt@PackageError|\marg{message} and |\@gtt@PackageWarning|\marg{message} issue a package error or warning \meta{message}, respectively.
+% \begin{macrocode}
+\def\@gtt@PackageError#1{%
+ \PackageError{pgfgantt}{#1}{}%
+}
+\def\@gtt@PackageWarning#1{%
+ \PackageWarning{pgfgantt}{#1}%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+%
+%
+% \subsection{The Horizontal and Vertical Grid}
+%
+% \begin{intmacro}{\gtt@currentline}
+% \begin{intmacro}{\gtt@lasttitleline}
+% \begin{intmacro}{\gtt@currgrid}
+% \begin{intmacro}{\gtt@chartwidth}
+% The count register |\gtt@currentline| holds the current line; it starts from 0 and decreases. |\gtt@lasttitleline| equals the line of the title element drawn last. |\gtt@currgrid| is the index of the current grid line drawn. |\gtt@chartwidth| equals the number of time slots.
+% \begin{macrocode}
+\newcount\gtt@currentline
+\newcount\gtt@lasttitleline
+\newcount\gtt@currgrid
+\newcount\gtt@chartwidth
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{option}{hgrid}
+% \begin{option}{hgrid style}
+% \begin{intmacro}{\ifgtt@hgrid}
+% \begin{intmacro}{\gtt@hgridstyle}
+% \opt{hgrid} checks whether its value is false and sets the boolean |\ifgtt@hgrid| accordingly. If the value is true or missing, horizontal grid lines appear dotted.
+% \begin{macrocode}
+\@gtt@stylekeydef{hgrid style}{dotted}
+\newif\ifgtt@hgrid
+\ganttset{%
+ hgrid/.code={%
+ \def\@tempa{#1}%
+ \def\@tempb{false}%
+ \ifx\@tempa\@tempb%
+ \gtt@hgridfalse%
+ \else%
+ \gtt@hgridtrue%
+ \def\@tempb{true}%
+ \ifx\@tempa\@tempb%
+ \def\gtt@hgridstyle{dotted}%
+ \else%
+ \def\gtt@hgridstyle{#1}%
+ \fi%
+ \fi%
+ },%
+ hgrid/.default=dotted
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{option}
+% \end{option}
+% \begin{intmacro}{\gtt@hgrid@do}
+% The |\gtt@hgrid@do| macro decomposes the style list for the horizontal grid into its comma-separated items. Each item is analyzed (see below) only if some grid lines are still left to draw. Note the ``elegant'' quadruple |\expandafter| construction, which enables tail recursion.
+% \begin{macrocode}
+\def\gtt@hgrid@do#1,{%
+ \ifx\relax#1\else
+ \ifnum\gtt@currgrid<\gtt@currentline\else%
+ \gtt@hgrid@analyze#1\relax%
+ \expandafter\expandafter\expandafter\gtt@hgrid@do%
+ \expandafter\fi%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\gtt@hgrid@analyze}
+% In the absence of a star as the first token in a style list item, |\gtt@hgrid@analyze| adds the multiplier |1| to the input stream.
+% \begin{macrocode}
+\def\gtt@hgrid@analyze{%
+ \@gtt@ifstar{\gtt@hgrid@draw}{\gtt@hgrid@draw1}%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\gtt@hgrid@draw}
+% |\gtt@hgrid@draw| draws as many grid lines as required by the multiplier. It increases |\gtt@currgrid| after each line drawn and breaks the loop as soon as all grid rules have been drawn.
+% \begin{macrocode}
+\def\gtt@hgrid@draw#1#2\relax{%
+ \foreach \i in {1,...,#1} {%
+ \pgfmathsetmacro\y@upper{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title} +%
+ (\gtt@currgrid - \gtt@lasttitleline)%
+ * \ganttvalueof{y unit chart}%
+ }%
+ \draw [#2]
+ (0pt, \y@upper pt) --
+ (\gtt@chartwidth * \ganttvalueof{x unit}, \y@upper pt);%
+ \global\advance\gtt@currgrid by-1\relax%
+ \ifnum\gtt@currgrid<\gtt@currentline\breakforeach\fi%
+ }%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{option}{vgrid}
+% \begin{intmacro}{\ifgtt@vgrid}
+% \begin{intmacro}{\gtt@vgridstyle}
+% \begin{intmacro}{\gtt@vgrid@do}
+% \begin{intmacro}{\gtt@vgrid@analyze}
+% \begin{intmacro}{\gtt@vgrid@draw}
+% Analogously, we declare options and macros for printing the vertical grid.
+% \begin{macrocode}
+\newif\ifgtt@vgrid
+\ganttset{%
+ vgrid/.code={%
+ \def\@tempa{#1}%
+ \def\@tempb{false}%
+ \ifx\@tempa\@tempb%
+ \gtt@vgridfalse%
+ \else%
+ \gtt@vgridtrue%
+ \def\@tempb{true}%
+ \ifx\@tempa\@tempb%
+ \def\gtt@vgridstyle{dotted}%
+ \else%
+ \def\gtt@vgridstyle{#1}%
+ \fi%
+ \fi%
+ },%
+ vgrid/.default=dotted
+}
+
+\def\gtt@vgrid@do#1,{%
+ \ifx\relax#1\else%
+ \ifnum\gtt@currgrid>\gtt@chartwidth\else%
+ \gtt@vgrid@analyze#1\relax%
+ \expandafter\expandafter\expandafter\gtt@vgrid@do%
+ \expandafter\fi%
+ \fi%
+}
+
+\def\gtt@vgrid@analyze{%
+ \@gtt@ifstar{\gtt@vgrid@draw}{\gtt@vgrid@draw1}%
+}
+
+\def\gtt@vgrid@draw#1#2\relax{%
+ \foreach \i in {1,...,#1} {%
+ \draw [#2]
+ (\gtt@currgrid * \ganttvalueof{x unit}, \y@upper pt) --%
+ (\gtt@currgrid * \ganttvalueof{x unit}, \y@lower pt);%
+ \global\advance\gtt@currgrid by1\relax%
+ \ifnum\gtt@currgrid>\gtt@chartwidth\breakforeach\fi%
+ }%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{option}
+%
+%
+% \subsection{Time Slot Formats}
+%
+% \begin{intmacro}{\gtt@smugglecount}
+% |\gtt@smugglecount|\marg{count} smuggles the local value of a count register over the end of a \TeX\ group.
+% \begin{macrocode}
+\def\gtt@smugglecount#1\endgroup{%
+ \edef\@tempa{\the#1}%
+ \expandafter\endgroup\expandafter#1\expandafter=\@tempa%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\gtt@juliantotimeslot}
+% |\gtt@juliantotimeslot|\marg{count 1}\marg{count 2} converts the Julian date stored in \meta{count 1} to a time slot and stores the latter in \meta{count 2}. This macro is called after the start of Gantt chart. Thus, |\gtt@startyear|, |\gtt@startmonth| and |\gtt@startjulian| (see section~\ref{ssc:ImplMain}) have already been initialized. Depending on the value of \opt{time slot unit}, one time slot corresponds to one |day|, one |month| or one |year|.
+% \begin{macrocode}
+\newcommand\gtt@juliantotimeslot[2]{%
+ \begingroup%
+ \@tempcnta=#1\relax%
+ \ifgtt@timeslotunit@day%
+ \advance\@tempcnta by-\gtt@startjulian\relax%
+ \advance\@tempcnta by1\relax%
+ \fi%
+ \ifgtt@timeslotunit@month%
+ \pgfcalendarjuliantodate{\@tempcnta}{\@tempa}{\@tempb}{\@tempc}%
+ \@tempcnta=\@tempa\relax%
+ \advance\@tempcnta by-\gtt@startyear\relax%
+ \multiply\@tempcnta by12\relax%
+ \advance\@tempcnta by\@tempb\relax%
+ \advance\@tempcnta by-\gtt@startmonth\relax%
+ \advance\@tempcnta by1\relax%
+ \fi%
+ \ifgtt@timeslotunit@year%
+ \pgfcalendarjuliantodate{\@tempcnta}{\@tempa}{\@tempb}{\@tempc}%
+ \@tempcnta=\@tempa\relax%
+ \advance\@tempcnta by-\gtt@startyear\relax%
+ \advance\@tempcnta by1\relax%
+ \fi%
+ #2=\@tempcnta\relax%
+ \gtt@smugglecount#2%
+ \endgroup%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{macro}{\newgantttimeslotformat}
+% |\newgantttimeslotformat|\marg{name}\marg{code} defines the macro\\|\gtt@tsstojulian@|\meta{name}\marg{tss}\marg{count}. This macro executes \meta{code} (within a group), which should convert \meta{tss} to a Julian date and store the date in \meta{count}.
+% \begin{macrocode}
+\newcommand\newgantttimeslotformat[2]{%
+ \expandafter\def\csname gtt@tsstojulian@#1\endcsname##1##2{%
+ \begingroup#2\gtt@smugglecount##2\endgroup%
+ }%
+}
+
+% \end{macrocode}
+% \end{macro}
+% The predefined time slot formats |simple|, |isodate|, |isodate-yearmonth| and |isodate-year| are straight forward.
+% \begin{macrocode}
+\newgantttimeslotformat{simple}{%
+ #2=#1\relax%
+ \advance#2 by\gtt@tsf@startjulian\relax%
+ \advance#2 by-1\relax%
+}
+
+\newgantttimeslotformat{isodate}{%
+ \pgfcalendardatetojulian{#1}{#2}%
+}
+
+\newgantttimeslotformat{isodate-yearmonth}{%
+ \pgfcalendardatetojulian{#1-01}{#2}%
+}
+
+\newgantttimeslotformat{isodate-year}{%
+ \pgfcalendardatetojulian{#1-01-01}{#2}%
+}
+
+% \end{macrocode}
+% \begin{intmacro}{\gtt@tsf@getdmy}
+% |\gtt@tsf@getdmy|\marg{date} decomposes a \meta{date} |day|[|sep|]|month|[|sep|]|year| (with [|sep|] representing a period, hyphen or slash) into |day|, |month| and |year| and stores these numbers in |\local@day|, |\local@month| and |\local@year|, respectively.
+% \begin{macrocode}
+\newcommand\gtt@tsf@getdmy[1]{%
+ \edef\local@firstarg{#1}%
+ \def\local@decompose##1.##2.##3\relax{%
+ \def\local@day{##1}\def\local@month{##2}\def\local@year{##3}%
+ }%
+ \expandafter\local@decompose\local@firstarg..\relax%
+ \ifx\local@month\@empty%
+ \def\local@decompose##1/##2/##3\relax{%
+ \def\local@day{##1}\def\local@month{##2}\def\local@year{##3}%
+ }%
+ \expandafter\local@decompose\local@firstarg//\relax%
+ \ifx\local@month\@empty%
+ \def\local@decompose##1-##2-##3\relax{%
+ \def\local@day{##1}\def\local@month{##2}\def\local@year{##3}%
+ }%
+ \expandafter\local@decompose\local@firstarg--\relax%
+ \ifx\local@month\@empty%
+ \@gtt@PackageError{Illegal time slot specifier `#1'.}%
+ \else%
+ \def\local@decompose##1--{\def\local@year{##1}}%
+ \expandafter\local@decompose\local@year%
+ \fi%
+ \else%
+ \def\local@decompose##1//{\def\local@year{##1}}%
+ \expandafter\local@decompose\local@year%
+ \fi%
+ \else%
+ \def\local@decompose##1..{\def\local@year{##1}}%
+ \expandafter\local@decompose\local@year%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% Time slot formats |little-endian|, |big-endian| and |middle-endian| only differ in their call of |\pgfcalendardatetojulian|. If the year (stored in |\local@year| or |\local@day|) lacks a century (e.\,g., 13 instead of 2013), it is completed according to the value of \opt{time slot format/base century}.
+% \begin{macrocode}
+\newgantttimeslotformat{little-endian}{%
+ \gtt@tsf@getdmy{#1}%
+ \ifnum\local@year<100\relax%
+ \edef\local@year{\gtt@tsf@basecentury\local@year}%
+ \fi%
+ \pgfcalendardatetojulian{\local@year-\local@month-\local@day}{#2}%
+}
+
+\newgantttimeslotformat{big-endian}{%
+ \gtt@tsf@getdmy{#1}%
+ \ifnum\local@day<100\relax%
+ \edef\local@day{\gtt@tsf@basecentury\local@day}%
+ \fi%
+ \pgfcalendardatetojulian{\local@day-\local@month-\local@year}{#2}%
+}
+
+\newgantttimeslotformat{middle-endian}{%
+ \gtt@tsf@getdmy{#1}%
+ \ifnum\local@year<100\relax%
+ \edef\local@year{\gtt@tsf@basecentury\local@year}%
+ \fi%
+ \pgfcalendardatetojulian{\local@year-\local@day-\local@month}{#2}%
+}
+
+% \end{macrocode}
+% \begin{option}{time slot format}
+% \begin{intmacro}{\gtt@tsstojulian}
+% The key \opt{time slot format}|=|\meta{name} checks whether the format \meta{name} exists and then defines the macro |\gtt@tsstojulian| to be equivalent to\\|\gtt@tsstojulian@|\meta{name}.
+% \begin{macrocode}
+\ganttset{%
+ time slot format/.code={%
+ \@ifundefined{gtt@tsstojulian@#1}{%
+ \@gtt@PackageError{%
+ Time slot format `#1' undefined.%
+ }%
+ }{}%
+ \expandafter\let\expandafter\gtt@tsstojulian%
+ \csname gtt@tsstojulian@#1\endcsname%
+ },%
+ time slot format=simple,%
+% \end{macrocode}
+% \end{intmacro}
+% \end{option}
+% \begin{option}{time slot format/base century}
+% \begin{intmacro}{\gtt@tsf@basecentury}
+% \opt{time slot format/base century}|=|\meta{year} extracts the century from the four-digit \meta{year} (e.\,g., 20 from 2000) and stores it in |\gtt@tsf@basecentury|.
+% \begin{macrocode}
+ time slot format/base century/.code={%
+ \begingroup%
+ \@tempcnta=#1\relax%
+ \divide\@tempcnta by100\relax%
+ \xdef\gtt@tsf@basecentury{\the\@tempcnta}%
+ \endgroup%
+ },%
+ time slot format/base century=2000,%
+% \end{macrocode}
+% \end{intmacro}
+% \end{option}
+% \begin{option}{time slot format/start date}
+% \begin{intmacro}{\gtt@tsf@startjulian}
+% \opt{time slot format/start date}|=|\meta{isodate} stores the Julian date corresponding to \meta{isodate} in |\gtt@tsf@startjulian|.
+% \begin{macrocode}
+ time slot format/start date/.code={%
+ \begingroup%
+ \pgfcalendardatetojulian{#1}{\@tempcnta}%
+ \xdef\gtt@tsf@startjulian{\the\@tempcnta}%
+ \endgroup%
+ },%
+ time slot format/start date=2000-01-01%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{option}
+%
+%
+% \subsection{The Main Environment}
+% \label{ssc:ImplMain}
+%
+% \begin{option}{x unit}
+% \begin{option}{y unit title}
+% \begin{option}{y unit chart}
+% Keys that store the basis vectors of the chart.
+% \begin{macrocode}
+\@gtt@keydef{x unit}{.5cm}
+\@gtt@keydef{y unit title}{1cm}
+\@gtt@keydef{y unit chart}{1cm}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \begin{option}{canvas}
+% \begin{option}{expand chart}
+% \begin{option}{today}
+% \begin{option}{today offset}
+% \begin{option}{today rule}
+% \begin{option}{today label}
+% \begin{option}{today label font}
+% \begin{option}{today label node}
+% Keys related to the canvas and the today rule.
+% \begin{macrocode}
+\@gtt@stylekeydef{canvas}{shape=rectangle, draw, fill=white}
+\@gtt@keydef{expand chart}{none}
+\@gtt@keydef{today}{none}
+\@gtt@keydef{today offset}{1}
+\@gtt@stylekeydef{today rule}{dashed, line width=1pt}
+\@gtt@keydef{today label}{TODAY}
+\@gtt@keydef{today label font}{\normalfont}
+\@gtt@stylekeydef{today label node}{%
+ anchor=north, font=\ganttvalueof{today label font}%
+}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \begin{intmacro}{\ifgtt@newlineshortcut}
+% \begin{option}{newline shortcut}
+% Boolean key that determines if |\\| is equivalent to |\ganttnewline|.
+% \begin{macrocode}
+\newif\ifgtt@newlineshortcut
+\ganttset{%
+ newline shortcut/.is if=gtt@newlineshortcut,%
+ newline shortcut=true%
+}
+
+% \end{macrocode}
+% \end{option}
+% \end{intmacro}
+% \begin{intmacro}{\ifgtt@tikzpicture}
+% \begin{intmacro}{\ifgtt@intitle}
+% \begin{intmacro}{\gtt@lasttitleslot}
+% \begin{intmacro}{\gtt@elementid}
+% \begin{intmacro}{\gtt@today@slot}
+% \begin{intmacro}{\gtt@startjulian}
+% \begin{intmacro}{\gtt@endjulian}
+% \begin{intmacro}{\gtt@chartid}
+% The boolean |\ifgtt@tikzpicture| is true if a Gantt chart appears within a \TikZ\ picture. |\ifgtt@intitle| is true at the start of a |ganttchart| environment and set to false as soon as the first non-title element is encountered. |\gtt@lasttitleslot| corresponds to the $x$-coordinate of its right border. |\gtt@elementid| enumerates the automatic names of chart elements. |\gtt@today@slot| is the time slot of the today rule. |\gtt@startjulian| and |\gtt@endjulian| contain the Julian dates corresponding to the first and last time slot, respectively. |\gtt@chartid| assigns a consecutive number to each chart.
+% \begin{macrocode}
+\newif\ifgtt@tikzpicture
+\newif\ifgtt@intitle
+\newcount\gtt@lasttitleslot
+\newcount\gtt@elementid
+\newcount\gtt@today@slot
+\newcount\gtt@startjulian
+\newcount\gtt@endjulian
+\newcount\gtt@chartid
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{intmacro}{\gtt@chartextrasize}
+% Each |ganttchart| environment writes a |\gtt@chartextrasize|\marg{chart id}\marg{extra size} macro to the auxililary file. This macro stores its second argument in a macro of the form |\@gtt@chart@|\meta{chart id}|@extrasize|. The \meta{extra size} is the size of the chart's bounding box less the size of the canvas, calculated as \opt{x unit} times the number of time slots.
+% \begin{macrocode}
+\def\gtt@chartextrasize#1#2{%
+ \global\@namedef{@gtt@chart@#1@extrasize}{#2}%
+}
+% \end{macrocode}
+% \end{intmacro}
+% \begin{environment}{ganttchart}
+% At the beginning of a |ganttchart| environment, the keys in its optional argument are executed. Initialize the macros and counts that contain start dates, end dates, the chart width, \dots
+% \begin{macrocode}
+\newenvironment{ganttchart}[3][]{%
+ \ganttset{#1}%
+ \gtt@tsstojulian{#2}{\gtt@startjulian}%
+ \global\gtt@startjulian=\gtt@startjulian\relax%
+ \gtt@tsstojulian{#3}{\gtt@endjulian}%
+ \global\gtt@endjulian=\gtt@endjulian\relax%
+ \pgfcalendarjuliantodate{\gtt@startjulian}%
+ {\gtt@startyear}{\gtt@startmonth}{\@tempa}%
+ \xdef\gtt@startyear{\gtt@startyear}%
+ \xdef\gtt@startmonth{\gtt@startmonth}%
+ \gtt@juliantotimeslot{\gtt@endjulian}{\gtt@chartwidth}
+ \global\gtt@chartwidth=\gtt@chartwidth\relax%
+% \end{macrocode}
+% \dots\ the time slot of the today rule, \dots.
+% \begin{macrocode}
+ \def\@tempa{none}%
+ \edef\@tempb{\ganttvalueof{today}}%
+ \ifx\@tempa\@tempb\else%
+ \gtt@tsstojulian{\ganttvalueof{today}}{\gtt@today@slot}
+ \gtt@juliantotimeslot{\gtt@today@slot}{\gtt@today@slot}%
+ \fi%
+% \end{macrocode}
+% \dots\ the current element number, and information for drawing actions.
+% \begin{macrocode}
+ \global\gtt@elementid=0\relax%
+ \global\gtt@currentline=0\relax%
+ \global\gtt@lasttitleline=0\relax%
+ \global\gtt@lasttitleslot=0\relax%
+% \end{macrocode}
+% \begin{intmacro}{\gtt@expanded@xunit}
+% If \opt{expand chart} contains a value different from |none|, scale the chart so that its $x$-extent equals this value. To this end, use the information stored in the auxiliary file. |\gtt@expanded@xunit| will contain the new value for \opt{x unit}.
+% \begin{macrocode}
+ \def\@tempa{none}%
+ \edef\@tempb{\ganttvalueof{expand chart}}%
+ \ifx\@tempa\@tempb\else%
+ \@ifundefined{@gtt@chart@\the\gtt@chartid @extrasize}{%
+ \@gtt@PackageWarning{Gantt chart expansion may have changed.
+ Rerun to get expansion right}%
+ }{%
+ \pgfmathparse{(\ganttvalueof{expand chart}%
+ - \@nameuse{@gtt@chart@\the\gtt@chartid @extrasize})%
+ / \gtt@chartwidth}%
+ \edef\gtt@expanded@xunit{\pgfmathresult pt}%
+ \ganttset{x unit=\gtt@expanded@xunit}%
+ }%
+ \fi%
+% \end{macrocode}
+% \end{intmacro}
+% \begin{macro}{\\}
+% \begin{macro}{\ganttalignnewline}
+% If a |ganttchart| appears outside of a |tikzpicture|, we implicitly start this environment. ``Within a |tikzpicture|'' means that |\useasboundingbox| is defined. Since we expect a chart to start with at least one title element, |\ifgtt@intitle| is true. If \opt{newline shortcut} is true, make the control symbol |\\| equivalent to |\ganttnewline|. In any case, |\ganttalignnewline| is defined.
+% \begin{macrocode}
+ \@ifundefined{useasboundingbox}%
+ {\gtt@tikzpicturefalse\begin{tikzpicture}}%
+ {\gtt@tikzpicturetrue}%
+ \gtt@intitletrue%
+ \ifgtt@newlineshortcut%
+ \let\\\ganttnewline%
+ \fi%
+ \let\ganttalignnewline\tikz@align@newline%
+}{
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{intmacro}{\y@upper}
+% \begin{intmacro}{\y@lower}
+% \begin{intmacro}{\y@mid}
+% \begin{intmacro}{\y@size}
+% \begin{intmacro}{\x@size}
+% After the contents of the environment have been drawn, we add the canvas to the background layer. \pack{pgfgantt} saves $x$- and $y$-coordinates in local internal macros called |\x@left|, |\x@right|, |\x@mid|, |\x@size|, |\y@upper|, |\y@lower|, |\y@mid| and |\y@size|.
+% \begin{macrocode}
+ \begin{scope}[on background layer]%
+ \ifgtt@includetitle%
+ \def\y@upper{0}%
+ \else%
+ \pgfmathsetmacro\y@upper{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title}%
+ }%
+ \fi%
+ \pgfmathsetmacro\y@lower{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title}%
+ + (\gtt@currentline - \gtt@lasttitleline - 1)%
+ * \ganttvalueof{y unit chart}%
+ }%
+ \pgfmathsetmacro\y@mid{%
+ (\y@upper + \y@lower) / 2%
+ }%
+ \pgfmathsetmacro\y@size{%
+ abs(\y@lower - \y@upper)%
+ }%
+ \pgfmathsetmacro\x@size{%
+ \gtt@chartwidth * \ganttvalueof{x unit}%
+ }%
+ \node [/pgfgantt/canvas, minimum width=\x@size pt,
+ minimum height=\y@size pt]
+ at (\x@size pt / 2, \y@mid pt) {};%
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% The contents of the vertical grid style list are evaluated at most |\gtt@chartwidth|-times, but the loop breaks as soon as all grid lines have been drawn.
+% \begin{macrocode}
+ \pgfmathsetmacro\y@upper{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title}%
+ }%
+ \ifgtt@vgrid
+ \gtt@currgrid=1\relax%
+ \global\advance\gtt@chartwidth by-1\relax%
+ \foreach \x in {1,...,\gtt@chartwidth} {%
+ \expandafter\gtt@vgrid@do\gtt@vgridstyle,\relax,%
+ \ifnum\gtt@currgrid>\gtt@chartwidth\relax\breakforeach\fi%
+ }%
+ \global\advance\gtt@chartwidth by1\relax%
+ \fi%
+% \end{macrocode}
+% Now, we draw the horizontal grid. If we exclude the title from the canvas, we omit the uppermost horizontal grid line since it would coincide with the canvas border.
+% \begin{macrocode}
+ \ifgtt@hgrid%
+ \gtt@currgrid=\gtt@lasttitleline\relax%
+ \ifgtt@includetitle\else%
+ \advance\gtt@currgrid by-1\relax
+ \fi%
+ \edef\@tempa{\the\gtt@currgrid}%
+ \foreach \t in {\@tempa,...,\gtt@currentline} {%
+ \expandafter\gtt@hgrid@do\gtt@hgridstyle,\relax,%
+ \ifnum\gtt@currgrid<\gtt@currentline\relax\breakforeach\fi%
+ }%
+ \fi%
+% \end{macrocode}
+% \begin{intmacro}{\x@mid}
+% The last task of |ganttchart| is to apply the |today| key if its value differs from |none|.
+% \begin{macrocode}
+ \def\@tempa{none}%
+ \edef\@tempb{\ganttvalueof{today}}%
+ \ifx\@tempa\@tempb\else%
+ \pgfmathsetmacro\x@mid{%
+ (\gtt@today@slot - 1 + \ganttvalueof{today offset})%
+ * \ganttvalueof{x unit}%
+ }%
+ \draw [/pgfgantt/today rule]
+ (\x@mid pt, \y@upper pt) -- (\x@mid pt, \y@lower pt)
+ node [/pgfgantt/today label node] {\ganttvalueof{today label}};%
+ \fi%
+ \end{scope}%
+% \end{macrocode}
+% \end{intmacro}
+% Store the $x$-extent of the bounding box in |\@tempdima|. Calculate the size by which the bounding box exceeds the ``raw'' canvas size. Write this information to the auxiliary file.
+% \begin{macrocode}
+ \pgfextractx{\@tempdima}{%
+ \pgfpointdiff{\pgfpointanchor{current bounding box}{south west}}%
+ {\pgfpointanchor{current bounding box}{north east}}%
+ }%
+ \pgfmathparse{\@tempdima -\ganttvalueof{x unit} * \gtt@chartwidth}%
+ \protected@write\@auxout{}{%
+ \string\gtt@chartextrasize{\the\gtt@chartid}{\pgfmathresult pt}}%
+% \end{macrocode}
+% Increase the chart counter.
+% \begin{macrocode}
+ \global\advance\gtt@chartid by1\relax%
+% \end{macrocode}
+% At the end of a |ganttchart|, we also close the |tikzpicture| if we started it implicitly.
+% \begin{macrocode}
+ \ifgtt@tikzpicture\else\end{tikzpicture}\fi%
+}
+
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Starting a New Line}
+%
+% \begin{macro}{\ganttnewline}
+% \begin{intmacro}{\local@drawarg}
+% Unless the optional argument of |\ganttnewline| is empty, this macro adds a horizontal grid rule between the current and the new line. The style of this line, which is stored in |\local@drawarg|, is either |hgrid style| or the style specified in the optional argument. Anyway, |\ganttnewline| decreases |\gtt@currentline| and, if we are still in the title, |\gtt@lasttitleline|. Since the new line starts at time slot zero, |\gtt@lasttitleslot| is reset.
+% \begin{macrocode}
+\newcommand\ganttnewline[1][]{%
+ \begingroup%
+ \def\local@drawarg{#1}%
+ \def\@tempa{grid}%
+ \ifx\local@drawarg\@empty\else%
+ \ifx\local@drawarg\@tempa%
+ \def\local@drawarg{/pgfgantt/hgrid style}%
+ \fi%
+ \pgfmathsetmacro\y@upper{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title}%
+ + (\gtt@currentline - \gtt@lasttitleline - 1)%
+ * \ganttvalueof{y unit chart}%
+ }
+ \expandafter\draw\expandafter[\local@drawarg]
+ (0pt, \y@upper pt) --
+ (\gtt@chartwidth * \ganttvalueof{x unit}, \y@upper pt);%
+ \fi%
+ \global\advance\gtt@currentline by-1\relax%
+ \ifgtt@intitle\global\advance\gtt@lasttitleline by-1\relax\fi%
+ \global\gtt@lasttitleslot=0\relax%
+ \endgroup%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{macro}
+%
+%
+% \subsection{Vertical rules}
+%
+% \begin{option}{vrule offset}
+% \begin{option}{vrule}
+% \begin{option}{vrule label font}
+% \begin{option}{vrule label node}
+% Keys related to the vertical rules.
+% \begin{macrocode}
+\@gtt@keydef{vrule offset}{1}
+\@gtt@stylekeydef{vrule}{dashed, line width=1pt}
+\@gtt@keydef{vrule label font}{\normalfont}
+\@gtt@stylekeydef{vrule label node}{%
+ anchor=north, font=\ganttvalueof{vrule label font}%
+}
+
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \begin{intmacro}{\gtt@vrule@slot}
+% A count for storing the vrule time slot.
+% \begin{macrocode}
+\newcount\gtt@vrule@slot
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{macro}{\ganttvrule}
+% Calculate the coordinates for the vertical rule and draw it.
+% \begin{macrocode}
+\newcommand\ganttvrule[3][]{%
+ \begingroup
+ \ganttset{#1}
+ \gtt@tsstojulian{#3}{\gtt@vrule@slot}%
+ \gtt@juliantotimeslot{\gtt@vrule@slot}{\gtt@vrule@slot}%
+ \pgfmathsetmacro\y@upper{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title}%
+ }%
+ \pgfmathsetmacro\y@lower{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title}%
+ + (\gtt@currentline - \gtt@lasttitleline - 1)%
+ * \ganttvalueof{y unit chart}%
+ }%
+ \pgfmathsetmacro\x@mid{%
+ (\gtt@vrule@slot - 1 + \ganttvalueof{vrule offset})%
+ * \ganttvalueof{x unit}%
+ }%
+ \draw [/pgfgantt/vrule]
+ (\x@mid pt, \y@upper pt) -- (\x@mid pt, \y@lower pt)
+ node [/pgfgantt/vrule label node] {#2};%
+ \endgroup
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Titles}
+%
+% \begin{option}{title}
+% \begin{option}{title label font}
+% \begin{option}{title label node}
+% \begin{option}{title label text}
+% \begin{intmacro}{\gtt@titlelabeltext}
+% \begin{option}{title list options}
+% \begin{intmacro}{\gtt@titlelistoptions}
+% \begin{option}{title left shift}
+% \begin{option}{title right shift}
+% \begin{option}{title top shift}
+% \begin{option}{title height}
+% \begin{option}{include title in canvas}
+% \begin{intmacro}{\ifgtt@includetitle}
+% Keys that influence title elements. The parameter token |#1| in the value of \opt{title label text} is replaced by the argument of |\gtt@titlelabeltext|. Note that |\@gtt@keydef| cannot define \opt{title list options}, since |\@gtt@titlelistoptions| is expanded after a |\foreach| statement, where |\ganttvalueof| will not work.
+% \begin{macrocode}
+\@gtt@stylekeydef{title}{shape=rectangle, inner sep=0pt, draw, fill=white}
+\@gtt@keydef{title label font}{\small}
+\@gtt@stylekeydef{title label node}{%
+ anchor=center, font=\ganttvalueof{title label font}%
+}
+\ganttset{%
+ title label text/.code={%
+ \def\gtt@titlelabeltext##1{#1}%
+ },%
+ title label text=\strut#1,%
+ title list options/.code={%
+ \def\gtt@titlelistoptions{[#1]}%
+ },%
+ title list options={var=\x, evaluate=\x}%
+}
+\@gtt@keydef{title left shift}{0}
+\@gtt@keydef{title right shift}{0}
+\@gtt@keydef{title top shift}{0}
+\@gtt@keydef{title height}{.6}
+\newif\ifgtt@includetitle
+\ganttset{%
+ include title in canvas/.is if=gtt@includetitle,%
+ include title in canvas
+}
+% \end{macrocode}
+% \end{intmacro}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{intmacro}
+% \end{option}
+% \end{intmacro}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \begin{option}{calendar week text}
+% \begin{option}{time slot unit}
+% \begin{intmacro}{\ifgtt@timeslotunit@day}
+% \begin{intmacro}{\ifgtt@timeslotunit@month}
+% \begin{intmacro}{\ifgtt@timeslotunit@year}
+% Keys for title calendars.
+% \begin{macrocode}
+\@gtt@keydef{calendar week text}{Week~\currentweek}
+\newif\ifgtt@timeslotunit@day
+\newif\ifgtt@timeslotunit@month
+\newif\ifgtt@timeslotunit@year
+\ganttset{%
+ time slot unit/.is choice,
+ time slot unit/day/.code={%
+ \gtt@timeslotunit@daytrue%
+ \gtt@timeslotunit@monthfalse%
+ \gtt@timeslotunit@yearfalse%
+ },%
+ time slot unit/month/.code={%
+ \gtt@timeslotunit@dayfalse%
+ \gtt@timeslotunit@monthtrue%
+ \gtt@timeslotunit@yearfalse%
+ },%
+ time slot unit/year/.code={%
+ \gtt@timeslotunit@dayfalse%
+ \gtt@timeslotunit@monthfalse%
+ \gtt@timeslotunit@yeartrue%
+ },%
+ time slot unit=day
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{option}
+% \end{option}
+% \begin{macro}{\gantttitle}
+% \begin{intmacro}{\x@left}
+% \begin{intmacro}{\x@right}
+% |\gantttitle| draws a title element (i.\,e., a rectangle with a single node at its center). For reasons that will become clear below, the element essentially starts at the $x$-coordinate stored in |\gtt@lasttitleslot|. This count is updated at the end of the macro.
+% \begin{macrocode}
+\newcommand\gantttitle[3][]{%
+ \begingroup%
+ \ganttset{#1}%
+ \pgfmathsetmacro\x@left{%
+ (\gtt@lasttitleslot + \ganttvalueof{title left shift})%
+ * \ganttvalueof{x unit}%
+ }%
+ \pgfmathsetmacro\x@right{%
+ (\gtt@lasttitleslot + #3 + \ganttvalueof{title right shift})%
+ * \ganttvalueof{x unit}%
+ }%
+ \pgfmathsetmacro\x@mid{%
+ (\x@left + \x@right) / 2%
+ }%
+ \pgfmathsetmacro\x@size{%
+ \x@right - \x@left%
+ }%
+ \pgfmathsetmacro\y@upper{%
+ (\gtt@currentline - \ganttvalueof{title top shift})%
+ * \ganttvalueof{y unit title}%
+ }%
+ \pgfmathsetmacro\y@lower{%
+ (\gtt@currentline - \ganttvalueof{title top shift}%
+ - \ganttvalueof{title height}) * \ganttvalueof{y unit title}%
+ }%
+ \pgfmathsetmacro\y@mid{%
+ (\y@upper + \y@lower) / 2%
+ }%
+ \pgfmathsetmacro\y@size{%
+ \y@upper - \y@lower%
+ }%
+ \path (\x@mid pt, \y@mid pt)
+ node [/pgfgantt/title, minimum width=\x@size pt,
+ minimum height=\y@size pt] {}
+ node [/pgfgantt/title label node] {\gtt@titlelabeltext{#2}};%
+ \global\advance\gtt@lasttitleslot by#3\relax%
+ \endgroup%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{macro}
+% \begin{macro}{\gantttitlelist}
+% |\gantttitlelist| generates title elements by repeatedly calling |\gantttitle|. Since the latter always starts after the last time slot occupied by the previous element, |\gantttitlelist| does not have to calculate the respective $x$-coordinates explicitly.
+% \begin{macrocode}
+\newcommand\gantttitlelist[3][]{%
+ \begingroup%
+ \ganttset{#1}%
+ \expandafter\foreach\gtt@titlelistoptions in {#2} {\gantttitle{\x}{#3}}%
+ \endgroup%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{intmacro}{\ifgtt@titlecalendarstar}
+% \begin{macro}{\gantttitlecalendar}
+% \begin{macro}{\gantttitlecalendar*}
+% |\gantttitlecalendar| checks whether it is invoked in the starred or nonstarred form, sets |\ifgtt@titlecalendarstar| accordingly and then starts a command relaying chain.
+% \begin{macrocode}
+\newif\ifgtt@titlecalendarstar
+\newcommand\gantttitlecalendar{%
+ \@gtt@ifstar%
+ {\gtt@titlecalendarstartrue\@gantttitlecalendar}%
+ {\gtt@titlecalendarstarfalse\@gantttitlecalendar}%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{intmacro}
+% \begin{intmacro}{\@gantttitlecalendar}
+% The first command in the relaying chain, |\@gantttitlecalendar|\oarg{options}, processes the \meta{options}. If it was executed by the starred form of |\gantttitlecalendar|, it calls the second command in the chain. Otherwise, it directly calls the third command in the chain.
+% \begin{macrocode}
+\newcommand\@gantttitlecalendar[1][]{
+ \begingroup%
+ \ganttset{#1}%
+ \ifgtt@titlecalendarstar%
+ \expandafter\@@gantttitlecalendar%
+ \else%
+ \expandafter\@@@gantttitlecalendar\expandafter%
+ {\expandafter\gtt@startjulian\expandafter}\expandafter%
+ {\expandafter\gtt@endjulian\expandafter}%
+ \fi%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\@@gantttitlecalendar}
+% The second command in the relaying chain,\\|\@@gantttitlecalendar|\marg{start tss}\marg{end tss},\\reads two mandatory arguments from the input stream and converts them to Julian dates. Finally, it calls the third command in the chain.
+% \begin{macrocode}
+\newcommand\@@gantttitlecalendar[2]{
+ \gtt@tsstojulian{#1}{\@tempcnta}%
+ \gtt@tsstojulian{#2}{\@tempcntb}%
+ \@@@gantttitlecalendar{\@tempcnta}{\@tempcntb}%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\@@@gantttitlecalendar}
+% \begin{intmacro}{\gtt@calendar@startdate}
+% \begin{intmacro}{\gtt@calendar@enddate}
+% The third and last command in the relaying chain, |\@@@gantttitlecalendar|\marg{start Julian}\marg{end Julian}\marg{calendar lines}, stores the start and end ISO-standard dates of the calendar in |\gtt@calendar@startdate| and |\gtt@calendar@enddate|, respectively. Then, it executes the keys in \meta{calendar lines}, which reside in path |/pgfgantt/calendar|.
+% \begin{macrocode}
+\newcommand\@@@gantttitlecalendar[3]{%
+ \pgfcalendarjuliantodate{#1}{\@tempa}{\@tempb}{\@tempc}%
+ \edef\gtt@calendar@startdate{\@tempa-\@tempb-\@tempc}%
+ \pgfcalendarjuliantodate{#2}{\@tempa}{\@tempb}{\@tempc}%
+ \edef\gtt@calendar@enddate{\@tempa-\@tempb-\@tempc}%
+ \gtt@calendar@eolfalse%
+ \pgfqkeys{/pgfgantt/calendar}{#3}%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{intmacro}{\ifgtt@calendar@eol}
+% \begin{intmacro}{\gtt@calendar@slots}
+% \begin{intmacro}{\gtt@calendar@weeknumber}
+% \begin{intmacro}{\gtt@calendar@startofweek}
+% Booleans and counts for drawing title calendars: |\ifgtt@calendar@eol| is true if |\ganttcalendar| should start a new calendar line. |\gtt@calendar@slots| is the number of time slots a calendar element will cover. |\gtt@calendar@weeknumber| is the current week number in a calendar line of type |week|. |\gtt@calendar@startofweek| is the Julian date of the Monday in the current week.
+% \begin{macrocode}
+\newif\ifgtt@calendar@eol
+\newcount\gtt@calendar@slots
+\newcount\gtt@calendar@weeknumber
+\newcount\gtt@calendar@startofweek
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{intmacro}{\@gtt@getfourthdigit}
+% \begin{intmacro}{\@gtt@getdecade}
+% |\@gtt@getfourthdigit| returns the fourth digit of a year, while |\@gtt@getdecade| returns the first three digits of a year.
+% \begin{macrocode}
+\def\@gtt@getfourthdigit#1#2#3#4{#4}
+\def\@gtt@getdecade#1#2#3#4{#1#2#3}
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% We define a new check for |\pgfcalendarifdate| as described in the |pgfcalendar| manual: |end of decade=|\meta{date} returns true if a date marks the end of a decade as defined by \meta{date}. For instance, if \meta{date} is |2009-12-31|, then the conditional will be true for the dates |1999-12-31|, |2009-12-31|, |2019-12-31| and so on.
+% \begin{macrocode}
+\pgfkeys{%
+ /pgf/calendar/end of decade/.code={
+ \begingroup
+ \pgfcalendardatetojulian{#1}{\@tempcnta}
+ \pgfcalendarjuliantodate{\@tempcnta}{\@tempa}{\@tempb}{\@tempc}
+ \edef\endofdecade{\expandafter\@gtt@getfourthdigit\@tempa}
+ \edef\querydecade{\expandafter\@gtt@getfourthdigit\pgfcalendarifdateyear}
+ \ifnum\endofdecade=\querydecade\relax%
+ \ifnum\pgfcalendarifdatemonth=\@tempb\relax%
+ \ifnum\pgfcalendarifdateday=\@tempc\relax%
+ \global\pgfcalendarmatchestrue%
+ \fi%
+ \fi%
+ \fi%
+ \endgroup
+ }%
+}
+% \end{macrocode}
+
+% For each \meta{line type}, we define a corresponding key |/pgfgantt/calendar/|\meta{line type}. This key performs the necessary calculations and draws one or several |\gantttitle|s. Line type |decade| draws decades.
+% \begin{macrocode}
+\ganttset{%
+ calendar/decade/.code={%
+ \ifgtt@calendar@eol\ganttnewline\fi%
+ \begingroup%
+ \gtt@calendar@slots=1\relax%
+ \ifgtt@timeslotunit@year%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \ifdate{end of decade=2009-12-31}{%
+ \gantttitle{%
+ \expandafter\@gtt@getdecade\pgfcalendarcurrentyear%
+ 0s%
+ }{\the\gtt@calendar@slots}%
+ \gtt@calendar@slots=0\relax%
+ }{
+ \ifdate{equals=01-01}{%
+ \ifnum\pgfcalendarcurrentjulian>\pgfcalendarbeginjulian\relax%
+ \advance\gtt@calendar@slots by1\relax%
+ \fi
+ }{}%
+ }%
+ \ifdate{equals=\pgfcalendarendiso}{%
+ \ifnum\gtt@calendar@slots=0\relax\else%
+ \gantttitle{%
+ \expandafter\@gtt@getdecade\pgfcalendarcurrentyear%
+ 0s%
+ }{\the\gtt@calendar@slots}%
+ \fi%
+ }{}%
+ }%
+ \fi%
+ \endgroup%
+ \gtt@calendar@eoltrue%
+ },%
+% \end{macrocode}
+% Line type |year| draws years.
+% \begin{macrocode}
+ calendar/year/.code={%
+ \ifgtt@calendar@eol\ganttnewline\fi%
+ \begingroup%
+ \gtt@calendar@slots=1\relax%
+ \ifgtt@timeslotunit@year%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \ifdate{equals=12-31}{%
+ \gantttitle{\pgfcalendarcurrentyear}{1}%
+ \gtt@calendar@slots=1\relax%
+ }{
+ \advance\gtt@calendar@slots by1\relax%
+ }%
+ \ifdate{equals=\pgfcalendarendiso}{%
+ \ifnum\gtt@calendar@slots=1\relax\else%
+ \gantttitle{\pgfcalendarcurrentyear}{1}%
+ \fi%
+ }{}%
+ }%
+ \fi%
+ \ifgtt@timeslotunit@month%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \ifdate{equals=12-31}{%
+ \gantttitle{\pgfcalendarcurrentyear}{\the\gtt@calendar@slots}%
+ \gtt@calendar@slots=1\relax%
+ }{%
+ \ifdate{end of month=1}{%
+ \advance\gtt@calendar@slots by1\relax%
+ }{}%
+ }%
+ \ifdate{equals=\pgfcalendarendiso}{%
+ \ifdate{end of month=1}{%
+ \advance\gtt@calendar@slots by-1\relax%
+ }{}%
+ \ifdate{equals=12-31}{}{%
+ \gantttitle{\pgfcalendarcurrentyear}{\the\gtt@calendar@slots}%
+ }%
+ }{}%
+ }%
+ \fi%
+ \ifgtt@timeslotunit@day%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \ifdate{equals=12-31}{%
+ \gantttitle{\pgfcalendarcurrentyear}{\the\gtt@calendar@slots}%
+ \gtt@calendar@slots=1\relax%
+ }{%
+ \advance\gtt@calendar@slots by1\relax%
+ }%
+ \ifdate{equals=\pgfcalendarendiso}{%
+ \ifnum\gtt@calendar@slots=1\relax\else%
+ \advance\gtt@calendar@slots by-1\relax%
+ \gantttitle{\pgfcalendarcurrentyear}{\the\gtt@calendar@slots}%
+ \fi%
+ }{}%
+ }%
+ \fi%
+ \endgroup%
+ \gtt@calendar@eoltrue%
+ },%
+% \end{macrocode}
+% Line type |month|=\meta{format} draws months. Internally, a month is represented by a number between 1 (January) and 12 (December). However, when the title element is drawn, this number is fed to the macro |\pgfcalendarmonth|\meta{format} and possibly converted.
+% \begin{macrocode}
+ calendar/month/.code={%
+ \ifgtt@calendar@eol\ganttnewline\fi%
+ \begingroup%
+ \gtt@calendar@slots=1\relax%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \ifdate{end of month=1}{%
+ \gantttitle{%
+ \csname pgfcalendarmonth#1\endcsname{\pgfcalendarcurrentmonth}%
+ }{%
+ \ifgtt@timeslotunit@month1\fi%
+ \ifgtt@timeslotunit@day\the\gtt@calendar@slots\fi%
+ }%
+ \gtt@calendar@slots=1\relax%
+ }{%
+ \advance\gtt@calendar@slots by1\relax%
+ }%
+ \ifdate{equals=\pgfcalendarendiso}{%
+ \ifnum\gtt@calendar@slots=1\relax\else%
+ \advance\gtt@calendar@slots by-1\relax%
+ \gantttitle{%
+ \csname pgfcalendarmonth#1\endcsname{\pgfcalendarcurrentmonth}%
+ }{%
+ \ifgtt@timeslotunit@month1\fi%
+ \ifgtt@timeslotunit@day\the\gtt@calendar@slots\fi%
+ }%
+ \fi%
+ }{}%
+ }%
+ \endgroup%
+ \gtt@calendar@eoltrue%
+ },%
+% \end{macrocode}
+% \begin{macro}{\startyear}
+% \begin{macro}{\startmonth}
+% \begin{macro}{\startday}
+% \begin{macro}{\currentweek}
+% Line type |week|=\meta{number} draws weeks. The first week receives \meta{number}, which is also saved in |\currentweek|. This key also defines the macros |\startyear|, |\startmonth| and |\startday|, which store the year, month and day of the current week's Monday. These four macros can be used in the value of \opt{calendar week text}.
+% \begin{macrocode}
+ calendar/week/.code={%
+ \ifgtt@calendar@eol\ganttnewline\fi%
+ \begingroup%
+ \gtt@calendar@slots=1\relax%
+ \gtt@calendar@weeknumber=#1\relax%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \ifdate{Sunday}{%
+ \gtt@calendar@startofweek=\pgfcalendarcurrentjulian\relax%
+ \advance\gtt@calendar@startofweek by1\relax%
+ \advance\gtt@calendar@startofweek by-\gtt@calendar@slots\relax%
+ \pgfcalendarjuliantodate{\gtt@calendar@startofweek}%
+ {\startyear}{\startmonth}{\startday}%
+ \def\currentweek{\the\gtt@calendar@weeknumber}%
+ \gantttitle{%
+ \ganttvalueof{calendar week text}%
+ }{%
+ \the\gtt@calendar@slots%
+ }%
+ \gtt@calendar@slots=1\relax%
+ \advance\gtt@calendar@weeknumber by1\relax%
+ }{%
+ \advance\gtt@calendar@slots by1%
+ }%
+ \ifdate{equals=\pgfcalendarendiso}{%
+ \ifnum\gtt@calendar@slots=1\relax\else%
+ \advance\gtt@calendar@slots by-1\relax%
+ \gtt@calendar@startofweek=\pgfcalendarcurrentjulian\relax%
+ \advance\gtt@calendar@startofweek by1\relax%
+ \advance\gtt@calendar@startofweek by-\gtt@calendar@slots\relax%
+ \pgfcalendarjuliantodate{\gtt@calendar@startofweek}%
+ {\startyear}{\startmonth}{\startday}%
+ \def\currentweek{\the\gtt@calendar@weeknumber}%
+ \gantttitle{%
+ \ganttvalueof{calendar week text}%
+ }{%
+ \the\gtt@calendar@slots%
+ }%
+ \fi%
+ }{}%
+ }%
+ \endgroup%
+ \gtt@calendar@eoltrue%
+ },%
+ calendar/week/.default=1,%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% Line type |weekday|=\meta{format} draws weekdays. Internally, a weekday is represented by a number between 0 (Monday) and 6 (Sunday). However, when the title element is drawn, this number is fed to the macro |\pgfcalendarweekday|\meta{format} and possibly converted.
+% \begin{macrocode}
+ calendar/weekday/.code={%
+ \ifgtt@calendar@eol\ganttnewline\fi%
+ \begingroup%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \gantttitle{%
+ \csname pgfcalendarweekday#1\endcsname{\pgfcalendarcurrentweekday}%
+ }{1}%
+ }%
+ \endgroup%
+ \gtt@calendar@eoltrue%
+ },%
+% \end{macrocode}
+% Line type |day|=\meta{format} draws days of the month.
+% \begin{macrocode}
+ calendar/day/.code={%
+ \ifgtt@calendar@eol\ganttnewline\fi%
+ \begingroup%
+ \pgfcalendar{}{\gtt@calendar@startdate}{\gtt@calendar@enddate}{%
+ \gantttitle{\pgfcalendarcurrentday}{1}%
+ }%
+ \endgroup%
+ \gtt@calendar@eoltrue%
+ }%
+}
+
+% \end{macrocode}
+%
+%
+% \subsection{Chart Elements}
+%
+% \begin{option}{progress}
+% \begin{intmacro}{\gtt@progress}
+% \begin{option}{progress label text}
+% \begin{intmacro}{\gtt@progresslabeltext}
+% \begin{option}{name}
+% \begin{option}{chart element start border}
+% \begin{intmacro}{\ifgtt@ce@startatleftborder}
+% \begin{option}{inline}
+% \begin{intmacro}{\ifgtt@inline}
+% Keys that apply to all chart elements. The parameter token |#1| in the value of \opt{progress label text} is replaced by the argument of |\gtt@progresslabeltext|.
+% \begin{macrocode}
+\ganttset{%
+ progress/.code={%
+ \def\gtt@progress{#1}%
+ },%
+ progress=none,%
+ progress label text/.code={%
+ \def\gtt@progresslabeltext##1{#1}%
+ },%
+ progress label text={%
+ \pgfmathprintnumber[precision=0, verbatim]{#1}\% complete%
+ }%
+}
+\@gtt@keydef{name}{}
+\newif\ifgtt@ce@startatleftborder
+\ganttset{%
+ chart element start border/.is choice,%
+ chart element start border/left/.code=\gtt@ce@startatleftbordertrue,%,
+ chart element start border/right/.code=\gtt@ce@startatleftborderfalse,%
+ chart element start border=left%
+}
+\newif\ifgtt@inline
+\ganttset{%
+ inline/.is if=gtt@inline,%
+ inline=false%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{option}
+% \end{intmacro}
+% \end{option}
+% \end{option}
+% \end{intmacro}
+% \end{option}
+% \end{intmacro}
+% \end{option}
+% \begin{intmacro}{\gtt@lastelement}
+% \begin{intmacro}{\gtt@currentelement}
+% \begin{intmacro}{\ifgtt@draw@complete}
+% \begin{intmacro}{\ifgtt@draw@incomplete}
+% \begin{intmacro}{\ifgtt@draw@clip}
+% \begin{intmacro}{\gtt@left@slot}
+% \begin{intmacro}{\gtt@right@slot}
+% The macros |\gtt@lastelement| and |\gtt@currentelement| save the name of the current and last chart element drawn. Thereby, the |\ganttlinked...| macros can add a link connecting them. |\ifgtt@draw@complete|, |\ifgtt@draw@incomplete| and |\ifgtt@draw@clip| decide whether to draw the complete and incomplete part of a chart element and if these parts are clipped. |\gtt@left@slot| and |\gtt@right@slot| store a chart element's start and end time slot, respectively.
+% \begin{macrocode}
+\def\gtt@lastelement{}
+\def\gtt@currentelement{}
+\newif\ifgtt@draw@complete
+\newif\ifgtt@draw@incomplete
+\newif\ifgtt@draw@clip
+\newcount\gtt@left@slot
+\newcount\gtt@right@slot
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{intmacro}{\gtt@chartelement}
+% \begin{intmacro}{\local@timeslotmodifier}
+% \begin{intmacro}{\gtt@name}
+% |\gtt@chartelement|\oarg{options}\marg{label}\marg{start tss}\marg{end tss}\marg{type}\\is the generic command for drawing chart elements of a certain \meta{type}. First, |\gtt@chartelement| converts \meta{start tss} to |\gtt@left@slot| and \meta{end tss} to |\gtt@right@slot|. Then it calculates the usual coordinates. |\gtt@name| stores the name of the chart element.
+% \begin{macrocode}
+\newcommand\gtt@chartelement[5][]{%
+ \begingroup%
+ \ganttset{#1}%
+ \gtt@tsstojulian{#3}{\gtt@left@slot}%
+ \gtt@juliantotimeslot{\gtt@left@slot}{\gtt@left@slot}%
+ \gtt@tsstojulian{#4}{\gtt@right@slot}%
+ \gtt@juliantotimeslot{\gtt@right@slot}{\gtt@right@slot}%
+ \def\local@timeslotmodifier{-1}%
+ \ifgtt@ce@startatleftborder\else%
+ \ifnum\gtt@left@slot=\gtt@right@slot\relax\else%
+ \def\local@timeslotmodifier{0}%
+ \fi%
+ \fi%
+ \pgfmathsetmacro\x@left{%
+ (\gtt@left@slot + \local@timeslotmodifier%
+ + \ganttvalueof{#5 left shift})%
+ * \ganttvalueof{x unit}%
+ }%
+ \pgfmathsetmacro\x@right{%
+ (\gtt@right@slot + \ganttvalueof{#5 right shift})%
+ * \ganttvalueof{x unit}%
+ }%
+ \pgfmathsetmacro\x@mid{%
+ (\x@left + \x@right) / 2%
+ }%
+ \pgfmathsetmacro\x@size{%
+ \x@right - \x@left%
+ }%
+ \pgfmathsetmacro\y@upper{%
+ \gtt@lasttitleline * \ganttvalueof{y unit title}
+ + (\gtt@currentline - \gtt@lasttitleline
+ - \ganttvalueof{#5 top shift}) * \ganttvalueof{y unit chart}%
+ }%
+ \pgfmathsetmacro\y@lower{%
+ \y@upper - \ganttvalueof{#5 height} * \ganttvalueof{y unit chart}%
+ }%
+ \pgfmathsetmacro\y@mid{%
+ (\y@upper + \y@lower) / 2%
+ }%
+ \pgfmathsetmacro\y@size{%
+ \y@upper - \y@lower%
+ }%
+ \edef\gtt@name{\ganttvalueof{name}}%
+ \ifx\gtt@name\@empty\edef\gtt@name{elem\the\gtt@elementid}\fi%
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{intmacro}{\local@none}
+% Depending on the values of \opt{progress} and \opt{today}, we determine the correct value for |\gtt@progress|. A value between 0 and 100 corresponds to a percentage of completeness. A value of 999 indicates that the chart element has no associated progress.
+% \begin{macrocode}
+ \def\local@none{none}%
+ \ifx\gtt@progress\local@none%
+ \def\gtt@progress{999}%
+ \else%
+ \def\@tempa{today}%
+ \ifx\gtt@progress\@tempa%
+ \edef\@tempa{\ganttvalueof{today}}%
+ \ifx\@tempa\local@none%
+ \@gtt@PackageWarning{%
+ Value of today is `none'. Ignoring `progress=today'%
+ }%
+ \def\gtt@progress{999}%
+ \else\ifnum\gtt@today@slot>\gtt@right@slot\relax%
+ \def\gtt@progress{100}%
+ \else\ifnum\gtt@today@slot<\gtt@left@slot\relax%
+ \def\gtt@progress{0}%
+ \else%
+ \pgfmathsetmacro\gtt@progress{%
+ (\gtt@today@slot - \gtt@left@slot - \local@timeslotmodifier)%
+ / (\gtt@right@slot - \gtt@left@slot - \local@timeslotmodifier)%
+ * 100%
+ }%
+ \fi\fi\fi%
+ \fi%
+ \fi%
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\x@clip@size}
+% Now we determine whether only the complete part of the chart element, only its incomplete one or both are drawn. In the former two cases, we refrain from clipping the (in)complete part.
+% \begin{macrocode}
+ \gtt@draw@completetrue%
+ \gtt@draw@incompletetrue%
+ \gtt@draw@cliptrue%
+ \ifdim\gtt@progress pt<0.001pt\relax%
+ \gtt@draw@completefalse%
+ \gtt@draw@clipfalse%
+ \else\ifdim\gtt@progress pt>99.999pt\relax%
+ \gtt@draw@incompletefalse%
+ \gtt@draw@clipfalse%
+ \fi\fi%
+ \ifgtt@draw@clip%
+ \pgfmathsetmacro\x@clip@size{%
+ (\gtt@right@slot - \gtt@left@slot - \local@timeslotmodifier)%
+ * \gtt@progress / 100%
+ }
+ \pgfmathsetmacro\x@clip{%
+ (\gtt@left@slot + \local@timeslotmodifier + \x@clip@size%
+ + \ganttvalueof{today offset} - 1) * \ganttvalueof{x unit}%
+ }%
+ \fi%
+% \end{macrocode}
+% \end{intmacro}
+% We draw the chart element within a |pgfinterruptboundingbox|, since we clip a large area of the canvas in order to avoid removing parts of the chart element border.
+% \begin{macrocode}
+ \begin{pgfinterruptboundingbox}%
+ \begin{scope}%
+ \ifgtt@draw@clip%
+ \clip (\x@left pt - 10cm, \y@upper pt + 10cm) rectangle
+ (\x@clip pt, \y@lower pt - 10cm);%
+ \fi%
+ \ifgtt@draw@complete%
+ \node [/pgfgantt/#5, minimum width=\x@size pt,
+ minimum height=\y@size pt]
+ (\gtt@name) at (\x@mid pt, \y@mid pt) {};%
+ \fi%
+ \end{scope}%
+ \begin{scope}%
+ \ifgtt@draw@clip%
+ \clip (\x@clip pt, \y@upper pt + 10cm) rectangle
+ (\x@right pt + 10cm, \y@lower pt - 10cm);%
+ \fi%
+ \ifgtt@draw@incomplete%
+ \node [/pgfgantt/#5 incomplete, minimum width=\x@size pt,
+ minimum height=\y@size pt]
+ (\gtt@name) at (\x@mid pt, \y@mid pt) {};%
+ \fi%
+ \end{scope}%
+ \end{pgfinterruptboundingbox}%
+% \end{macrocode}
+% If \opt{progress} differs from |none| and \opt{progress label text} differs from |\relax|, the progress label is drawn.
+% \begin{macrocode}
+ \ifdim\gtt@progress pt=999pt\relax\else%
+ \expandafter\ifx\gtt@progresslabeltext\relax\relax\else%
+ \node at (\gtt@name.\ganttvalueof{#5 progress label anchor})
+ [/pgfgantt/#5 progress label node]
+ {\gtt@progresslabeltext{\gtt@progress}};%
+ \fi%
+ \fi%
+% \end{macrocode}
+% If \meta{label} is not empty, a label is printed. Its anchor is either at the \textcolor{OliveGreen}{\meta{type}}\opt{ inline label anchor} of the chart element (|inline=true|) or at the left canvas border halfway between the upper and lower $y$-coordinate of the chart element (|inline=false|).
+% \begin{macrocode}
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty\else%
+ \ifgtt@inline%
+ \node at (\gtt@name.\ganttvalueof{#5 inline label anchor})
+ [/pgfgantt/#5 inline label node]
+ {\csname gtt@#5labeltext\endcsname{#2}};%
+ \else%
+ \node at (0, \y@mid pt)
+ [/pgfgantt/#5 label node]
+ {\csname gtt@#5labeltext\endcsname{#2}};%
+ \fi%
+ \fi%
+% \end{macrocode}
+% Since the first bar clearly appears after the last line containing a title element, we set the boolean |\ifgtt@intitle| to false.
+% \begin{macrocode}
+ \xdef\gtt@lastelement{\gtt@currentelement}%
+ \xdef\gtt@currentelement{\gtt@name}%
+ \global\advance\gtt@elementid by1\relax%
+ \global\gtt@intitlefalse%
+ \endgroup%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{macro}{\newganttchartelement}
+% \begin{macro}{\newganttchartelement*}
+% |\newganttchartelement| checks whether it was invoked in the starred or nonstarred form and executes |\@newganttchartelement@one| or |\@newganttchartelement@two|, respectively.
+% \begin{macrocode}
+\def\newganttchartelement{%
+ \@gtt@ifstar\@newganttchartelement@one\@newganttchartelement@two%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \begin{intmacro}{\@newganttchartelement@one}
+% \begin{intmacro}{\@newganttchartelement@two}
+% Both |\@newganttchartelement@one|\marg{type} and |...two|\marg{type} define two macros |\gantt|\meta{type} and |\ganttlinked|\meta{type}, which draw a singular chart element or one that is linked to its predecessor. However, the newly defined macros will take three or four mandatory arguments (cf. |\ganttmilestone| vs. |\ganttbar|). At the end, we execute |\@newganttchartelement@definekeys| to process the second mandatory argument of |\newganttchartelement|.
+% \begin{macrocode}
+\newcommand\@newganttchartelement@one[1]{%
+ \expandafter\newcommand\csname gantt#1\endcsname[3][]{%
+ \gtt@chartelement[##1]{##2}{##3}{##3}{#1}%
+ }%
+ \expandafter\newcommand\csname ganttlinked#1\endcsname[3][]{%
+ \begingroup%
+ \ganttset{##1}%
+ \gtt@chartelement{##2}{##3}{##3}{#1}%
+ \ganttlink{\gtt@lastelement}{\gtt@currentelement}%
+ \endgroup%
+ }%
+ \@newganttchartelement@definekeys{#1}%
+}
+
+\newcommand\@newganttchartelement@two[1]{%
+ \expandafter\newcommand\csname gantt#1\endcsname[4][]{%
+ \gtt@chartelement[##1]{##2}{##3}{##4}{#1}%
+ }%
+ \expandafter\newcommand\csname ganttlinked#1\endcsname[4][]{%
+ \begingroup%
+ \ganttset{##1}%
+ \gtt@chartelement{##2}{##3}{##4}{#1}%
+ \ganttlink{\gtt@lastelement}{\gtt@currentelement}%
+ \endgroup%
+ }%
+ \@newganttchartelement@definekeys{#1}%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{intmacro}{\@newganttchartelement@definekeys}
+% |\@newganttchartelement@definekeys|\marg{type}\marg{key-value list} introduces 14 keys for the newly generated chart element \meta{type}.
+% \begin{macrocode}
+\newcommand\@newganttchartelement@definekeys[2]{%
+ \@gtt@stylekeydef{#1}{shape=rectangle, inner sep=0pt, draw, fill=white}%
+ \@gtt@stylekeydef{#1 incomplete}{/pgfgantt/#1, fill=black!25}%
+ \@gtt@keydef{#1 label font}{\normalsize}%
+ \@gtt@stylekeydef{#1 label node}{%
+ anchor=east, font=\ganttvalueof{#1 label font}%
+ }%
+ \@gtt@keydef{#1 inline label anchor}{center}%
+ \@gtt@stylekeydef{#1 inline label node}{%
+ anchor=center, font=\ganttvalueof{#1 label font}%
+ }%
+ \@gtt@keydef{#1 progress label anchor}{east}%
+ \@gtt@keydef{#1 progress label font}{\scriptsize}%
+ \@gtt@stylekeydef{#1 progress label node}{%
+ anchor=west, font=\ganttvalueof{#1 progress label font}%
+ }%
+ \@gtt@keydef{#1 left shift}{0}%
+ \@gtt@keydef{#1 right shift}{0}%
+ \@gtt@keydef{#1 top shift}{.3}%
+ \@gtt@keydef{#1 height}{.4}%
+ \ganttset{%
+ #1 label text/.code={%
+ \expandafter\def\csname gtt@#1labeltext\endcsname####1{##1}%
+ },%
+ #1 label text=\strut##1,%
+ #2%
+ }%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{macro}{\ganttbar}
+% \begin{macro}{\ganttlinkedbar}
+% \begin{option}{bar}
+% \begin{option}{bar incomplete}
+% \begin{option}{bar label text}
+% \begin{option}{bar label font}
+% \begin{option}{bar label node}
+% \begin{option}{bar inline label anchor}
+% \begin{option}{bar inline label node}
+% \begin{option}{bar progress label anchor}
+% \begin{option}{bar progress label font}
+% \begin{option}{bar progress label node}
+% \begin{option}{bar left shift}
+% \begin{option}{bar right shift}
+% \begin{option}{bar top shift}
+% \begin{option}{bar height}
+% Code for the predefined chart element type |bar|.
+% \begin{macrocode}
+\newganttchartelement{bar}{%
+ bar/.style={shape=ganttbar, inner sep=0pt, draw, fill=white},%
+ bar incomplete/.style={/pgfgantt/bar, fill=black!25},%
+ bar label text=\strut#1,%
+ bar label font=\normalsize,%
+ bar label node/.style={%
+ anchor=east, font=\ganttvalueof{bar label font}%
+ },%
+ bar inline label anchor=center,%
+ bar inline label node/.style={%
+ anchor=center, font=\ganttvalueof{bar label font}%
+ },%
+ bar progress label anchor=east,%
+ bar progress label font=\scriptsize,%
+ bar progress label node/.style={%
+ anchor=west, font=\ganttvalueof{bar progress label font}%
+ },%
+ bar left shift=0,%
+ bar right shift=0,%
+ bar top shift=.3,%
+ bar height=.4%
+}
+
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{macro}
+% \end{macro}
+% \clearpage
+% \begin{macro}{\ganttgroup}
+% \begin{macro}{\ganttlinkedgroup}
+% \begin{option}{group}
+% \begin{option}{group incomplete}
+% \begin{option}{group label text}
+% \begin{option}{group label font}
+% \begin{option}{group label node}
+% \begin{option}{group inline label anchor}
+% \begin{option}{group inline label node}
+% \begin{option}{group progress label anchor}
+% \begin{option}{group progress label font}
+% \begin{option}{group progress label node}
+% \begin{option}{group left shift}
+% \begin{option}{group right shift}
+% \begin{option}{group top shift}
+% \begin{option}{group height}
+% Code for the predefined chart element type |group|.
+% \begin{macrocode}
+\newganttchartelement{group}{%
+ group/.style={shape=ganttgroup, inner sep=0pt, fill=black},%
+ group incomplete/.style={/pgfgantt/group, fill=black!25},%
+ group label text=\strut#1,%
+ group label font=\bfseries,%
+ group label node/.style={%
+ anchor=east, font=\ganttvalueof{group label font}%
+ },%
+ group inline label anchor=center,%
+ group inline label node/.style={%
+ anchor=south, font=\ganttvalueof{group label font}%
+ },%
+ group progress label anchor=east,%
+ group progress label font=\scriptsize,%
+ group progress label node/.style={%
+ anchor=west, font=\ganttvalueof{group progress label font}%
+ },%
+ group left shift=-.1,%
+ group right shift=.1,%
+ group top shift=.4,%
+ group height=.2%
+}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{macro}
+% \end{macro}
+% \begin{option}{group right peak tip position}
+% \begin{option}{group right peak width}
+% \begin{option}{group right peak height}
+% \begin{option}{group left peak tip position}
+% \begin{option}{group left peak width}
+% \begin{option}{group left peak height}
+% \begin{option}{group peaks tip position}
+% \begin{option}{group peaks width}
+% \begin{option}{group peaks height}
+% More keys for the appearance of groups.
+% \begin{macrocode}
+\@gtt@keydef{group right peak tip position}{.5}
+\@gtt@keydef{group right peak width}{.4}
+\@gtt@keydef{group right peak height}{.1}
+\@gtt@keydef{group left peak tip position}{.5}
+\@gtt@keydef{group left peak width}{.4}
+\@gtt@keydef{group left peak height}{.1}
+\ganttset{%
+ group peaks tip position/.code={%
+ \ganttset{%
+ group left peak tip position=#1,%
+ group right peak tip position=#1%
+ }%
+ },%
+ group peaks width/.code={%
+ \ganttset{%
+ group left peak width=#1,%
+ group right peak width=#1%
+ }%
+ },%
+ group peaks height/.code={%
+ \ganttset{%
+ group left peak height=#1,%
+ group right peak height=#1%
+ }%
+ }%
+}
+
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \begin{macro}{\ganttmilestone}
+% \begin{macro}{\ganttlinkedmilestone}
+% \begin{option}{milestone}
+% \begin{option}{milestone incomplete}
+% \begin{option}{milestone label text}
+% \begin{option}{milestone label font}
+% \begin{option}{milestone label node}
+% \begin{option}{milestone inline label anchor}
+% \begin{option}{milestone inline label node}
+% \begin{option}{milestone progress label anchor}
+% \begin{option}{milestone progress label font}
+% \begin{option}{milestone progress label node}
+% \begin{option}{milestone left shift}
+% \begin{option}{milestone right shift}
+% \begin{option}{milestone top shift}
+% \begin{option}{milestone height}
+% Code for the predefined chart element type |milestone|.
+% \begin{macrocode}
+\newganttchartelement*{milestone}{%
+ milestone/.style={%
+ shape=ganttmilestone, inner sep=0pt, draw, fill=black%
+ },%
+ milestone incomplete/.style={/pgfgantt/milestone, fill=black!25},%
+ milestone label text=\strut#1,%
+ milestone label font=\itshape,%
+ milestone label node/.style={%
+ anchor=east, font=\ganttvalueof{milestone label font}%
+ },%
+ milestone inline label anchor=center,%
+ milestone inline label node/.style={%
+ anchor=south, font=\ganttvalueof{milestone label font}%
+ },%
+ milestone progress label anchor=center,%
+ milestone progress label font=\scriptsize,%
+ milestone progress label node/.style={%
+ anchor=west, font=\ganttvalueof{milestone progress label font}%
+ },%
+ milestone left shift=.6,%
+ milestone right shift=.4,%
+ milestone top shift=.3,%
+ milestone height=.4%
+}
+
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Node Shapes}
+%
+% \begin{option}{on top fraction}
+% \begin{option}{on bottom fraction}
+% \begin{option}{on left fraction}
+% \begin{option}{on right fraction}
+% Keys for configuring the additional anchors of the new node shapes.
+% \begin{macrocode}
+\@gtt@keydef{on top fraction}{.5}
+\@gtt@keydef{on bottom fraction}{.5}
+\@gtt@keydef{on left fraction}{.5}
+\@gtt@keydef{on right fraction}{.5}
+
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% Code for node shape |ganttbar|. Anchors and background path derive from node shape |rectangle|. The four additional anchors |on top|, |on bottom|, |on left| and |on right| are defined.
+% \begin{macrocode}
+\pgfdeclareshape{ganttbar}{
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchorborder[from=rectangle]
+ \anchor{on top}{
+ \southwest
+ \pgf@xa=\pgf@x
+ \northeast
+ \pgf@xb=\pgf@x
+ \advance\pgf@xb by-\pgf@xa
+ \pgf@xb=\ganttvalueof{on top fraction}\pgf@xb
+ \advance\pgf@xa by\pgf@xb
+ \pgf@x=\pgf@xa
+ }
+ \anchor{on bottom}{
+ \northeast
+ \pgf@xb=\pgf@x
+ \southwest
+ \pgf@xa=\pgf@x
+ \advance\pgf@xb by-\pgf@xa
+ \pgf@xb=\ganttvalueof{on bottom fraction}\pgf@xb
+ \advance\pgf@xa by\pgf@xb
+ \pgf@x=\pgf@xa
+ }
+ \anchor{on left}{
+ \northeast
+ \pgf@ya=\pgf@y
+ \southwest
+ \pgf@yb=\pgf@y
+ \advance\pgf@yb by-\pgf@ya
+ \pgf@yb=\ganttvalueof{on left fraction}\pgf@yb
+ \advance\pgf@ya by\pgf@yb
+ \pgf@y=\pgf@ya
+ }
+ \anchor{on right}{
+ \southwest
+ \pgf@yb=\pgf@y
+ \northeast
+ \pgf@ya=\pgf@y
+ \advance\pgf@yb by-\pgf@ya
+ \pgf@yb=\ganttvalueof{on right fraction}\pgf@yb
+ \advance\pgf@ya by\pgf@yb
+ \pgf@y=\pgf@ya
+ }
+ \inheritbackgroundpath[from=rectangle]
+}
+
+% \end{macrocode}
+% Code for node shape |ganttgroup|. Anchors derive from node shape |ganttbar|. The two additional anchors |left peak| and |right peak| are defined.
+% \begin{macrocode}
+\pgfdeclareshape{ganttgroup}{
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=ganttbar]{on top}
+ \inheritanchor[from=ganttbar]{on bottom}
+ \inheritanchor[from=ganttbar]{on left}
+ \inheritanchor[from=ganttbar]{on right}
+ \anchor{left peak}{
+ \pgf@process{
+ \pgfpointadd{
+ \southwest
+ }{
+ \pgfpoint%
+ {\pgfkeysvalueof{/pgf/outer xsep}}%
+ {\pgfkeysvalueof{/pgf/outer ysep}}
+ }
+ }
+ \pgfmathsetlength\pgf@x{
+ \pgf@x + \ganttvalueof{group left peak tip position}
+ * \ganttvalueof{group left peak width} * \ganttvalueof{x unit}
+ }
+ \pgfmathsetlength\pgf@y{
+ \pgf@y - \ganttvalueof{group left peak height}
+ * \ganttvalueof{y unit chart}
+ }
+ }
+ \anchor{right peak}{
+ \pgf@process{
+ \pgfpointadd{
+ \northeast
+ }{
+ \pgfpointscale{-1}{
+ \pgfpoint%
+ {\pgfkeysvalueof{/pgf/outer xsep}}%
+ {\pgfkeysvalueof{/pgf/outer ysep}}
+ }
+ }
+ }
+ \pgf@xa=\pgf@x
+ \pgf@process{
+ \pgfpointadd{
+ \southwest
+ }{
+ \pgfpoint%
+ {\pgfkeysvalueof{/pgf/outer xsep}}%
+ {\pgfkeysvalueof{/pgf/outer ysep}}
+ }
+ }
+ \pgfmathsetlength\pgf@x{
+ \pgf@xa - \ganttvalueof{group right peak tip position}
+ * \ganttvalueof{group right peak width} * \ganttvalueof{x unit}
+ }
+ \pgfmathsetlength\pgf@y{
+ \pgf@y - \ganttvalueof{group right peak height}
+ * \ganttvalueof{y unit chart}
+ }
+ }
+ \backgroundpath{
+ \pgf@process{
+ \pgfpointadd{
+ \northeast
+ }{
+ \pgfpointscale{-1}{
+ \pgfpoint%
+ {\pgfkeysvalueof{/pgf/outer xsep}}%
+ {\pgfkeysvalueof{/pgf/outer ysep}}
+ }
+ }
+ }
+ \pgf@xb=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{
+ \pgfpointadd{
+ \southwest
+ }{
+ \pgfpoint%
+ {\pgfkeysvalueof{/pgf/outer xsep}}%
+ {\pgfkeysvalueof{/pgf/outer ysep}}
+ }
+ }
+ \pgf@xa=\pgf@x
+ \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgfmathsetlength\pgf@xc{
+ \pgf@xb - \ganttvalueof{group right peak tip position}
+ * \ganttvalueof{group right peak width} * \ganttvalueof{x unit}
+ }
+ \pgfmathsetlength\pgf@yc{
+ \pgf@yb - \ganttvalueof{group right peak height}
+ * \ganttvalueof{y unit chart}
+ }
+ \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
+ \pgfmathsetlength\pgf@xc{
+ \pgf@xb - \ganttvalueof{group right peak width}
+ * \ganttvalueof{x unit}
+ }
+ \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yb}}
+ \pgfmathsetlength\pgf@xc{
+ \pgf@xa + \ganttvalueof{group left peak width}
+ * \ganttvalueof{x unit}
+ }
+ \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yb}}
+ \pgfmathsetlength\pgf@xc{
+ \pgf@xa + \ganttvalueof{group left peak tip position}
+ * \ganttvalueof{group left peak width} * \ganttvalueof{x unit}
+ }
+ \pgfmathsetlength\pgf@yc{
+ \pgf@yb - \ganttvalueof{group left peak height}
+ * \ganttvalueof{y unit chart}
+ }
+ \pgfpathlineto{\pgfpoint{\pgf@xc}{\pgf@yc}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathclose
+ }
+}
+
+% \end{macrocode}
+% Code for node shape |ganttmilestone|. Anchors and background path derive from node shape |diamond|. The four additional anchors |on top|, |on bottom|, |on left| and |on right| are defined.
+% \begin{macrocode}
+\pgfdeclareshape{ganttmilestone}{
+ \inheritsavedanchors[from=diamond]
+ \inheritanchor[from=diamond]{text}
+ \inheritanchor[from=diamond]{center}
+ \inheritanchor[from=diamond]{mid}
+ \inheritanchor[from=diamond]{base}
+ \inheritanchor[from=diamond]{north}
+ \inheritanchor[from=diamond]{south}
+ \inheritanchor[from=diamond]{west}
+ \inheritanchor[from=diamond]{north west}
+ \inheritanchor[from=diamond]{south west}
+ \inheritanchor[from=diamond]{east}
+ \inheritanchor[from=diamond]{north east}
+ \inheritanchor[from=diamond]{south east}
+ \inheritanchorborder[from=diamond]
+ \inheritbackgroundpath[from=diamond]
+ \anchor{on top}{
+ \pgf@process{\outernortheast}
+ \pgf@xa=2\pgf@x
+ \pgf@x=-\pgf@x
+ \advance\pgf@x by\ganttvalueof{on top fraction}\pgf@xa
+ \pgf@ya=2\pgf@y
+ \pgf@y=0pt
+ \pgfmathparse{
+ \ganttvalueof{on top fraction} < 0.5
+ ? \ganttvalueof{on top fraction}
+ : 1 - \ganttvalueof{on top fraction}
+ }
+ \advance\pgf@y by\pgfmathresult\pgf@ya
+ }
+ \anchor{on bottom}{
+ \pgf@process{\outernortheast}
+ \pgf@xa=2\pgf@x
+ \pgf@x=-\pgf@x
+ \advance\pgf@x by\ganttvalueof{on bottom fraction}\pgf@xa
+ \pgf@ya=-2\pgf@y
+ \pgf@y=0pt
+ \pgfmathparse{
+ \ganttvalueof{on bottom fraction} < 0.5
+ ? \ganttvalueof{on bottom fraction}
+ : 1 - \ganttvalueof{on bottom fraction}
+ }
+ \advance\pgf@y by\pgfmathresult\pgf@ya
+ }
+ \anchor{on right}{
+ \pgf@process{\outernortheast}
+ \pgf@ya=-2\pgf@y
+ \advance\pgf@y by\ganttvalueof{on right fraction}\pgf@ya
+ \pgf@xa=2\pgf@x
+ \pgf@x=0pt
+ \pgfmathparse{
+ \ganttvalueof{on right fraction} < 0.5
+ ? \ganttvalueof{on right fraction}
+ : 1 - \ganttvalueof{on right fraction}
+ }
+ \advance\pgf@x by\pgfmathresult\pgf@xa
+ }
+ \anchor{on left}{
+ \pgf@process{\outernortheast}
+ \pgf@ya=-2\pgf@y
+ \advance\pgf@y by\ganttvalueof{on left fraction}\pgf@ya
+ \pgf@xa=-2\pgf@x
+ \pgf@x=0pt
+ \pgfmathparse{
+ \ganttvalueof{on left fraction} < 0.5
+ ? \ganttvalueof{on left fraction}
+ : 1 - \ganttvalueof{on left fraction}
+ }
+ \advance\pgf@x by\pgfmathresult\pgf@xa
+ }
+}
+
+% \end{macrocode}
+%
+%
+% \subsection{Links}
+% \label{ssc:ImplLinks}
+%
+% \begin{option}{link}
+% \begin{option}{link type}
+% \begin{option}{link label}
+% \begin{option}{link label font}
+% \begin{option}{link label node}
+% Keys for configuring links.
+% \begin{macrocode}
+\@gtt@stylekeydef{link}{-latex, rounded corners=1pt}
+\@gtt@keydef{link type}{auto}
+\@gtt@keydef{link label}{}
+\@gtt@keydef{link label font}{\scriptsize\itshape}
+\@gtt@stylekeydef{link label node}{%
+ anchor=west, font=\ganttvalueof{link label font}%
+}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \end{option}
+% \begin{macro}{\newganttlinktype}
+% |\newganttlinktype|\marg{type}\marg{code} stores \meta{code} in an internal macro\\|\@gtt@linktype@|\meta{type}, which is later called by |\gtt@drawlink|.
+% \begin{macrocode}
+\newcommand\newganttlinktype[2]{%
+ \expandafter\def\csname @gtt@linktype@#1\endcsname{#2}%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\setganttlinklabel}
+% |\setganttlinklabel|\marg{type}\marg{label} stores a given \meta{label} in an internal macro |\@gtt@linktype@|\meta{type}|@label|, which is later used by |\gtt@drawlink|.
+% \begin{macrocode}
+\newcommand\setganttlinklabel[2]{%
+ \expandafter\def\csname @gtt@linktype@#1@label\endcsname{#2}%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\newganttlinktypealias}
+% |\newganttlinktypealias|\marg{new link type}\marg{existing link type} copies both the link code and label of an \meta{existing link type} into the internal macros associated with a \meta{new link type}.
+% \begin{macrocode}
+\newcommand\newganttlinktypealias[2]{%
+ \expandafter\def\csname @gtt@linktype@#1\endcsname{%
+ \csname @gtt@linktype@#2\endcsname%
+ }%
+ \expandafter\def\csname @gtt@linktype@#1@label\endcsname{%
+ \csname @gtt@linktype@#2@label\endcsname%
+ }%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \begin{option}{link mid}
+% \begin{option}{link bulge}
+% \begin{option}{link tolerance}
+% We will define three link subtypes for the type |auto|, which require the following keys:
+% \begin{macrocode}
+\@gtt@keydef{link mid}{.5}
+\@gtt@keydef{link bulge}{.4}
+\@gtt@keydef{link tolerance}{.6}
+% \end{macrocode}
+% \end{option}
+% \end{option}
+% \end{option}
+% (1) |r| (short for ``right'') draws a straight arrow. Note that |r| and |default| are alias types.
+% \begin{macrocode}
+\newganttlinktype{r}{%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ (\xRight, \yLower)
+ node [pos=.5, /pgfgantt/link label node] {\ganttlinklabel};
+}
+\newganttlinktypealias{default}{r}
+
+% \end{macrocode}
+% (2) |rdr| (``right-down-right'') is an unlabeled three-part arrow. The value of \opt{link mid} sets the position of the middle segment.
+% \begin{macrocode}
+\newganttlinktype{rdr}{%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ ($(\xLeft, \yUpper)!\ganttvalueof{link mid}!
+ (\xRight, \yUpper)$) --
+ ($(\xLeft, \yLower)!\ganttvalueof{link mid}!
+ (\xRight, \yLower)$) --
+ (\xRight, \yLower);%
+}
+
+% \end{macrocode}
+% (3) |rdldr| (``right-down-left-down-right'') is an unlabeled five-part arrow, which considers the values of \opt{link bulge} and \opt{link mid}.
+% \begin{macrocode}
+\newganttlinktype{rdldr}{%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ (\xLeft + \ganttvalueof{link bulge} * \ganttvalueof{x unit},
+ \yUpper) --
+ ($(\xLeft + \ganttvalueof{link bulge} * \ganttvalueof{x unit},
+ \yUpper)!%
+ \ganttvalueof{link mid}!%
+ (\xLeft + \ganttvalueof{link bulge} * \ganttvalueof{x unit},
+ \yLower)$) --
+ ($(\xRight - \ganttvalueof{link bulge} * \ganttvalueof{x unit},
+ \yUpper)!%
+ \ganttvalueof{link mid}!%
+ (\xRight - \ganttvalueof{link bulge} * \ganttvalueof{x unit},
+ \yLower)$) --
+ (\xRight - \ganttvalueof{link bulge} * \ganttvalueof{x unit},
+ \yLower) --
+ (\xRight, \yLower);%
+}
+
+% \end{macrocode}
+% Now we may define linke type |auto|: The first and last coordinate of the link should touch the preceding or following element at the center of its right or left border, respectively. We check if the connected elements lie in the same row or not (i. e., their $y$-coordinates differ at most 1~pt). In the latter case, |\pgfmathparse| yields 0.
+% \begin{macrocode}
+\newganttlinktype{auto}{%
+ \pgfmathparse{abs(\yUpper - \yLower) <= 1}%
+ \ifcase\pgfmathresult%
+% \end{macrocode}
+% Once again, two possibilities arise: Either the elements to be connected are at least separated by \opt{link tolerance} time slots, in which case we draw a three-part arrow (i. e., link type |rdr|). Alternatively, the elements lie in adjacent time slots or even overlap, in which case we draw a five-part arrow (i. e., link type |rdldr|).
+% \begin{macrocode}
+ \pgfmathparse{
+ (\xRight - \xLeft)
+ >= \ganttvalueof{link tolerance} * \ganttvalueof{x unit}
+ }%
+ \ifcase\pgfmathresult%
+ \gtt@drawlink{rdldr}%
+ \else%
+ \gtt@drawlink{rdr}%
+ \fi%
+% \end{macrocode}
+% For elements that lie in the same row, we draw a simple arrow (i. e., link type |r|).
+% \begin{macrocode}
+ \else%
+ \gtt@drawlink{r}%
+ \fi%
+}
+% \end{macrocode}
+% The |dr| type is explained in section~\ref{ssc:Links}.
+% \begin{macrocode}
+\newganttlinktype{dr}{%
+ \ganttsetstartanchor{south}%
+ \ganttsetendanchor{west}%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ (\xLeft, \yLower)
+ node [pos=.5, /pgfgantt/link label node] {\ganttlinklabel} --
+ (\xRight, \yLower);%
+}
+
+% \end{macrocode}
+% Here is the definition of the four straight link types and their labels.
+% \begin{macrocode}
+\newganttlinktype{s-s}{%
+ \ganttsetstartanchor{south west}%
+ \ganttsetendanchor{north west}%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ (\xRight, \yLower)
+ node [pos=.5, /pgfgantt/link label node] {\ganttlinklabel};
+}
+\setganttlinklabel{s-s}{start-to-start}
+
+\newganttlinktype{s-f}{%
+ \ganttsetstartanchor{on bottom=0}%
+ \ganttsetendanchor{on top=1}%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ (\xRight, \yLower)
+ node [pos=.5, /pgfgantt/link label node] {\ganttlinklabel};
+}
+\setganttlinklabel{s-f}{start-to-finish}
+
+\newganttlinktype{f-s}{%
+ \ganttsetstartanchor{south east}%
+ \ganttsetendanchor{north west}%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ (\xRight, \yLower)
+ node [pos=.5, /pgfgantt/link label node] {\ganttlinklabel};
+}
+\setganttlinklabel{f-s}{finish-to-start}
+
+\newganttlinktype{f-f}{%
+ \ganttsetstartanchor{south east}%
+ \ganttsetendanchor{north east}%
+ \draw [/pgfgantt/link]
+ (\xLeft, \yUpper) --
+ (\xRight, \yLower)
+ node [pos=.5, /pgfgantt/link label node] {\ganttlinklabel};
+}
+\setganttlinklabel{f-f}{finish-to-finish}
+
+% \end{macrocode}
+% \begin{intmacro}{\gtt@drawlink}
+% \begin{intmacro}{\@gtt@currlinktype}
+% |\gtt@drawlink|\marg{link type} first checks if the \meta{link type} is defined, falling back to type |default| if it is unknown. |\@gtt@currlinktype| stores the link type for future reference.
+% \begin{macrocode}
+\newcommand\gtt@drawlink[1]{%
+ \@ifundefined{@gtt@linktype@#1}{%
+ \@gtt@PackageWarning{Link type `#1' unknown, using `default'.}%
+ \def\@gtt@currlinktype{default}%
+ }{%
+ \def\@gtt@currlinktype{#1}%
+ }%
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\@gtt@currlabel}
+% \begin{macro}{\ganttlinklabel}
+% If the \opt{link label} key contains any value, it locally overrides the label set by |\setganttlinklabel|. |\ganttlinklabel| is defined accordingly.
+% \begin{macrocode}
+ \edef\@gtt@currlabel{\ganttvalueof{link label}}%
+ \ifx\@gtt@currlabel\@empty%
+ \def\ganttlinklabel{%
+ \csname @gtt@linktype@\@gtt@currlinktype @label\endcsname%
+ }%
+ \else%
+ \edef\ganttlinklabel{%
+ \ganttvalueof{link label}%
+ }%
+ \fi%
+% \end{macrocode}
+% \end{macro}
+% \end{intmacro}
+% Finally, we call the internal macro that stores the code for the desired link type.
+% \begin{macrocode}
+ \csname @gtt@linktype@\@gtt@currlinktype\endcsname%
+}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\@gtt@link@anchor}
+% We need the following keys for setting the start and end anchor of a link: Whenever a key |/pgfgantt/link anchor/|\meta{anchor} is undefined, \pack{pgfgantt} stores \meta{anchor} in |\@gtt@link@anchor|.
+% \begin{macrocode}
+\ganttset{%
+ link anchor/.unknown/.code={%
+ \edef\@gtt@link@anchor{\pgfkeyscurrentname}%
+ },%
+}
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\@gtt@linkanchordef}
+% |\@gtt@linkanchordef|\marg{anchor} deals with the anchors |on top| etc.: It creates a code key |/pgfgantt/link anchor/|\meta{anchor}, which stores its own name in |\@gtt@link@anchor| and sets the appropriate \opt{\dots fraction} key.
+% \begin{macrocode}
+\def\@gtt@linkanchordef#1{%
+ \ganttset{%
+ link anchor/#1/.code={%
+ \edef\@gtt@link@anchor{#1}%
+ \ganttset{#1 fraction=##1}%
+ },%
+ link anchor/#1/.default=.5%
+ }%
+}
+\@gtt@linkanchordef{on top}
+\@gtt@linkanchordef{on bottom}
+\@gtt@linkanchordef{on left}
+\@gtt@linkanchordef{on right}
+
+% \end{macrocode}
+% \end{intmacro}
+% \begin{intmacro}{\@gtt@setstartanchor}
+% \begin{macro}{\xLeft}
+% \begin{macro}{\yUpper}
+% |\@gtt@setstartanchor|\marg{anchor} recalls the coordinates of the anchor stored in |\@gtt@link@anchor| from chart element |\@gtt@link@startelement|. It stores these coordinates in the auxiliary macros |\xLeft| and |\yUpper|.
+% \begin{macrocode}
+\newcommand\@gtt@setstartanchor[1]{%
+ \pgfqkeys{/pgfgantt/link anchor}{#1}%
+ \pgfpointanchor{\@gtt@link@startelement}{\@gtt@link@anchor}%
+ \edef\xLeft{\the\pgf@x}%
+ \edef\yUpper{\the\pgf@y}%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{intmacro}
+% \begin{intmacro}{\@gtt@setendanchor}
+% \begin{macro}{\xRight}
+% \begin{macro}{\yLower}
+% |\@gtt@setendanchor|\marg{anchor} is similar to the command above. However, it stores the anchor coordinates in the auxiliary macros |\xRight| and |\yLower|.
+% \begin{macrocode}
+\newcommand\@gtt@setendanchor[1]{%
+ \pgfqkeys{/pgfgantt/link anchor}{#1}%
+ \pgfpointanchor{\@gtt@link@endelement}{\@gtt@link@anchor}%
+ \edef\xRight{\the\pgf@x}%
+ \edef\yLower{\the\pgf@y}%
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{intmacro}
+% \begin{macro}{\ganttlink}
+% \begin{intmacro}{\@gtt@link@startelement}
+% \begin{intmacro}{\@gtt@link@endelement}
+% |\ganttlink|\oarg{options}\marg{E1}\marg{E2} executes the \meta{options} and stores the names of the connected elements \meta{E1} and \meta{E2} in |\@gtt@link@startelement| and |\@gtt@link@endelement|.
+% \begin{macrocode}
+\newcommand\ganttlink[3][]{%
+ \begingroup%
+ \ganttset{#1}%
+ \def\@gtt@link@startelement{#2}%
+ \def\@gtt@link@endelement{#3}%
+% \end{macrocode}
+% \end{intmacro}
+% \end{intmacro}
+% \begin{macro}{\ganttsetstartanchor}
+% \begin{macro}{\ganttsetendanchor}
+% |\ganttsetstartanchor| and |\ganttsetendanchor| are only valid in the second argument of |\newganttlinktype|. Since you may wish to omit one of those commands, we set default anchors for the link.
+% \begin{macrocode}
+ \let\ganttsetstartanchor\@gtt@setstartanchor%
+ \let\ganttsetendanchor\@gtt@setendanchor%
+ \ganttsetstartanchor{east}%
+ \ganttsetendanchor{west}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% We call |\gtt@drawlink| with the value of \opt{link type}.
+% \begin{macrocode}
+ \gtt@drawlink{\ganttvalueof{link type}}%
+ \endgroup%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</pgfgantt>
+% \fi
+% \Finale
+\endinput
diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.ins b/graphics/pgf/contrib/pgfgantt/pgfgantt.ins
new file mode 100644
index 0000000000..6e4aa0dd2b
--- /dev/null
+++ b/graphics/pgf/contrib/pgfgantt/pgfgantt.ins
@@ -0,0 +1,61 @@
+%% pgfgantt.ins
+%%
+%% Copyright (C) 2083 by Wolfgang Skala
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2008/05/04 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Wolfgang Skala.
+%%
+%% This work consists of the files pgfgantt.dtx and pgfgantt.ins
+%% and the derived file pgfgantt.sty.
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/pgfgantt}
+
+\preamble
+
+Copyright (C) 2018 by Wolfgang Skala
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008/05/04 or later.
+
+\endpreamble
+
+\generate{\file{pgfgantt.sty}{\from{pgfgantt.dtx}{pgfgantt}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX}
+\Msg{*}
+\Msg{* pgfgantt.sty}
+\Msg{*}
+\Msg{* To produce the documentation execute the}
+\Msg{* following commands:}
+\Msg{*}
+\Msg{* pdflatex pgfgantt.dtx}
+\Msg{* makeindex -s gind.ist -o pgfgantt.ind pgfgantt.idx}
+\Msg{* makeindex -s gglo.ist -o pgfgantt.gls pgfgantt.glo}
+\Msg{* pdflatex pgfgantt.dtx (2x)}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{****************************************************}
+
+\endbatchfile \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf b/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf
new file mode 100644
index 0000000000..5536734a4c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfgantt/pgfgantt.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfmorepages/README b/graphics/pgf/contrib/pgfmorepages/README
new file mode 100644
index 0000000000..a11c2db77b
--- /dev/null
+++ b/graphics/pgf/contrib/pgfmorepages/README
@@ -0,0 +1,14 @@
+----------------------------------------------------------------
+pgfmorepages --- LaTeX functions for manipulating multiple pages
+E-mail: loopspace@mathforge.org
+Released jointly under the LaTeX Project Public License v1.3c (or
+later) and under the GNU Public License.
+
+See http://www.latex-project.org/lppl.txt
+and https://www.gnu.org/licenses/gpl.html
+----------------------------------------------------------------
+
+This package replaces and extends the pgfpages sub-package of the PGF
+system. It provides the capability to arrange multiple "logical"
+pages on multiple "physical" pages, for example as for arranging pages
+to make booklets.
diff --git a/graphics/pgf/contrib/pgfmorepages/pgfmorepages.pdf b/graphics/pgf/contrib/pgfmorepages/pgfmorepages.pdf
new file mode 100644
index 0000000000..5c275b419f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfmorepages/pgfmorepages.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfmorepages/pgfmorepages.sty b/graphics/pgf/contrib/pgfmorepages/pgfmorepages.sty
new file mode 100644
index 0000000000..8d3ea8fda8
--- /dev/null
+++ b/graphics/pgf/contrib/pgfmorepages/pgfmorepages.sty
@@ -0,0 +1,1513 @@
+% Original code copyright 2006 by Till Tantau
+% Extension copyright 2012-2019 by Andrew Stacey
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesPackage{pgfmorepages}[2019/03/22 v1.00 multiple page manipulation]
+
+\@ifpackageloaded{pgfpages}{%
+ \PackageWarning{pgfmorepages}{I notice that the package "pgfpages" has already been loaded. This is an extension of that package and redefines various internal pieces so the two should not be used together.}
+}{}
+
+
+\RequirePackage{pgfcore,calc}
+
+\newcount\pgf@logicalpages
+\newcount\pgf@physicalpages
+\newcount\pgf@firstshipout
+\newcount\pgf@lastshipout
+\newcount\pgf@currentshipout
+\newcount\pgf@cpn
+\newcount\pgf@clpn
+\newcount\pgf@cppn
+\newcount\pgfactualpage
+\newcount\pgf@shipoutnextto
+\newdimen\pgfphysicalheight
+\newdimen\pgfphysicalwidth
+\newif\ifpgfpagesship
+
+\pgf@shipoutnextto=0\relax
+\pgf@logicalpages=0\relax
+\pgf@physicalpages=1\relax
+\pgf@firstshipout=1\relax
+\pgf@lastshipout=1\relax
+\pgf@currentshipout=1\relax
+\pgfphysicalheight=\paperheight
+\pgfphysicalwidth=\paperwidth
+\pgfactualpage=0
+\def\pgf@currentpage{1}
+
+\newif\ifpgfphysicalpageempty
+\newif\ifpgf@holdingphysicalpage
+
+\pgfphysicalpageemptytrue
+\pgf@holdingphysicalpagefalse
+
+% Define a layout
+%
+% #1 = layout name
+% #2 = code before options have been set
+% #2 = code after options have been set
+%
+% Example:
+%
+% \pgfpagesdeclarelayout{resize to}{
+% \pgfpagesphysicalpageoptions{logical pages=1,physical height=\pgfpageoptionheight,physical width=\pgfpageoptionwidth}
+% \pgfpageslogicalpageoptions{1}{resized width=\pgfphysicalwidth,%
+% resized height=\pgfphysicalheight,center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight}}}
+
+\let\pgfpages@layouts=\pgfutil@gobble
+
+\newcommand\pgfpagesdeclarelayout[3]{%
+ \pgfutil@ifundefined{pgfpages@layout@#1}{%
+ \expandafter\def\expandafter\pgfpages@layouts\expandafter{\pgfpages@layouts, #1}
+ \expandafter\newcommand\csname pgfpages@layoutbefore@#1\endcsname{#2}
+ \expandafter\newcommand\csname pgfpages@layout@#1\endcsname{#3}
+ }{%
+ \PackageWarning{pgfmorepages}{Layout #1 already defined}%
+ }}
+
+
+% Use a layout
+%
+% #1 = layout name
+% #2 = options
+%
+% Example:
+%
+% \pgfpagesuselayout{resize to}[a4paper]
+
+\def\pgfpagesuselayout#1{\pgfutil@ifnextchar[{\pgf@pagelayout{#1}}{\pgf@pagelayout{#1}[]}}
+\def\pgf@pagelayout#1[#2]{
+ \pgfutil@ifundefined{pgfpages@layout@#1}{
+ \PackageError{pgfmorepages}{Page layout `#1' undefined. Currently defined layouts are: \pgfpages@layouts \pgfmorepages@extramessage}{}
+ }
+ {
+ \pgfpages@reset
+ \csname pgfpages@layoutbefore@#1\endcsname
+ \setkeys{pgfpagesuselayoutoption}{#2}
+ \csname pgfpages@layout@#1\endcsname
+ }
+}
+
+\def\pgfpages@reset{
+\pgfshipoutphysicalpage
+\pgfphysicalheight=\paperheight
+\pgfphysicalwidth=\paperwidth
+ \pgf@cppn=1\relax%
+ \loop%
+ \expandafter\let\csname pgfpages@lp@\the\pgf@cppn @skipcode\endcsname\relax
+ \expandafter\let\csname pgfpages@lp@\the\pgf@cppn @height\endcsname\relax
+ \expandafter\let\csname pgfpages@lp@\the\pgf@cppn @width\endcsname\relax
+ \expandafter\let\csname pgfpages@lp@\the\pgf@cppn @copy\endcsname\relax
+ \expandafter\let\csname pgf@lpageson@\the\pgf@cppn\endcsname=\relax
+ \advance \pgf@cppn by 1\relax%
+ \expandafter\unless\expandafter\ifx\csname pgf@lpageson@\the\pgf@cppn\endcsname\relax%
+ \repeat%
+ \pgf@clpn=1\relax%
+ \loop%
+ \expandafter\let\csname pgfpages@pp@\the\pgf@clpn @skipcode\endcsname\relax
+ \expandafter\let\csname pgfpages@box@\the\pgf@clpn\endcsname=\relax
+ \advance \pgf@clpn by 1\relax%
+ \expandafter\unless\expandafter\ifx\csname pgfpages@box@\the\pgf@clpn\endcsname\relax%
+ \repeat%
+ \pgf@cppn=1\relax%
+ \pgf@clpn=1\relax%
+ \loop%
+ \loop%
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @reheight\endcsname\relax
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @rewidth\endcsname\relax
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @border\endcsname\relax
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @bordercode\endcsname\relax
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @center\endcsname\relax
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @cornerwidth\endcsname\relax
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @scale\endcsname\relax%
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @xscale\endcsname\relax%
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @yscale\endcsname\relax%
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @rotation\endcsname\relax%
+ \expandafter\let\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @skipcode\endcsname\relax%
+ \advance\pgf@clpn by 1\relax
+ \expandafter\unless\expandafter\ifx\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @reheight\endcsname\relax
+ \repeat
+ \pgf@clpn=1\relax%
+ \advance\pgf@cppn by 1\relax
+ \expandafter\unless\expandafter\ifx\csname pgfpages@p@\the\pgf@clpn @\the\pgf@cppn @reheight\endcsname\relax
+ \repeat
+}
+
+% Predefined options
+
+\define@key{pgfpagesuselayoutoption}{physical paper width}%
+{\def\pgfpageoptionwidth{#1}}
+
+\define@key{pgfpagesuselayoutoption}{physical paper height}%
+{\def\pgfpageoptionheight{#1}}
+
+\define@key{pgfpagesuselayoutoption}{a0paper}[]%
+{\def\pgfpageoptionheight{1189mm} \def\pgfpageoptionwidth{841mm}}
+
+\define@key{pgfpagesuselayoutoption}{a1paper}[]%
+{\def\pgfpageoptionheight{841mm} \def\pgfpageoptionwidth{594mm}}
+
+\define@key{pgfpagesuselayoutoption}{a2paper}[]%
+{\def\pgfpageoptionheight{594mm} \def\pgfpageoptionwidth{420mm}}
+
+\define@key{pgfpagesuselayoutoption}{a3paper}[]%
+{\def\pgfpageoptionheight{420mm} \def\pgfpageoptionwidth{297mm}}
+
+\define@key{pgfpagesuselayoutoption}{a4paper}[]%
+{\def\pgfpageoptionheight{297mm} \def\pgfpageoptionwidth{210mm}}
+
+\define@key{pgfpagesuselayoutoption}{a5paper}[]%
+{\def\pgfpageoptionheight{210mm} \def\pgfpageoptionwidth{148mm}}
+
+\define@key{pgfpagesuselayoutoption}{a6paper}[]%
+{\def\pgfpageoptionheight{148mm} \def\pgfpageoptionwidth{105mm}}
+
+\define@key{pgfpagesuselayoutoption}{letterpaper}[]%
+{\def\pgfpageoptionheight{11in} \def\pgfpageoptionwidth{8.5in}}
+
+\define@key{pgfpagesuselayoutoption}{legalpaper}[]%
+{\def\pgfpageoptionheight{14in} \def\pgfpageoptionwidth{8.5in}}
+
+\define@key{pgfpagesuselayoutoption}{executivepaper}[]%
+{\def\pgfpageoptionheight{10.5in}\def\pgfpageoptionwidth{7.25in}}
+
+\define@key{pgfpagesuselayoutoption}{landscape}[]%
+{
+ \let\pgf@temp=\pgfpageoptionwidth
+ \let\pgfpageoptionwidth=\pgfpageoptionheight
+ \let\pgfpageoptionheight=\pgf@temp
+}
+
+\define@key{pgfpagesuselayoutoption}{border shrink}%
+{\def\pgfpageoptionborder{#1}}
+
+\define@key{pgfpagesuselayoutoption}{border code}%
+{\def\pgfpageoptionbordercode{#1}}
+
+\define@key{pgfpagesuselayoutoption}{corner width}%
+{\def\pgfpageoptioncornerwidth{#1}}
+
+\define@key{pgfpagesuselayoutoption}{odd numbered pages right}[]%
+{\def\pgfpageoptionfirstshipout{2}}
+
+\define@key{pgfpagesuselayoutoption}{second right}[]%
+{%
+ \def\pgfpageoptionfirstcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}%
+ \def\pgfpageoptionsecondcenter{\pgfpoint{1.5\paperwidth}{.5\paperheight}}%
+ \def\pgfpageoptiontwoheight{\paperheight}%
+ \def\pgfpageoptiontwowidth{2\paperwidth}%
+}
+
+\define@key{pgfpagesuselayoutoption}{second left}[]%
+{%
+ \def\pgfpageoptionfirstcenter{\pgfpoint{1.5\paperwidth}{.5\paperheight}}%
+ \def\pgfpageoptionsecondcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}%
+ \def\pgfpageoptiontwoheight{\paperheight}%
+ \def\pgfpageoptiontwowidth{2\paperwidth}%
+}
+
+\define@key{pgfpagesuselayoutoption}{second top}[]%
+{%
+ \def\pgfpageoptionfirstcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}%
+ \def\pgfpageoptionsecondcenter{\pgfpoint{.5\paperwidth}{1.5\paperheight}}%
+ \def\pgfpageoptiontwoheight{2\paperheight}%
+ \def\pgfpageoptiontwowidth{\paperwidth}%
+}
+
+\define@key{pgfpagesuselayoutoption}{second bottom}[]%
+{%
+ \def\pgfpageoptionfirstcenter{\pgfpoint{.5\paperwidth}{1.5\paperheight}}%
+ \def\pgfpageoptionsecondcenter{\pgfpoint{.5\paperwidth}{.5\paperheight}}%
+ \def\pgfpageoptiontwoheight{2\paperheight}%
+ \def\pgfpageoptiontwowidth{\paperwidth}%
+}
+
+
+
+% Predefined layouts
+
+\pgfpagesdeclarelayout{rounded corners}
+{
+ \def\pgfpageoptioncornerwidth{10pt}
+}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=1
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \pgfpageslogicalpageoptions{1}
+ {%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight},%
+ corner width=\pgfpageoptioncornerwidth%
+ }%
+}
+
+\pgfpagesdeclarelayout{resize to}
+{
+ \def\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=1,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \pgfpageslogicalpageoptions{1}
+ {%
+ resized width=\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ border shrink=\pgfpageoptionborder,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+}
+
+\pgfpagesdeclarelayout{two screens with lagging second}
+{}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=2,%
+ physical height=\pgfpageoptiontwoheight,%
+ physical width=\pgfpageoptiontwowidth,%
+ last logical shipout=1,%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \pgfpageslogicalpageoptions{1}
+ {%
+ center=\pgfpageoptionfirstcenter,%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ center=\pgfpageoptionsecondcenter,%
+ copy from=1%
+ }%
+}
+
+\pgfpagesdeclarelayout{two screens with optional second}
+{}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=2,%
+ physical height=\pgfpageoptiontwoheight,%
+ physical width=\pgfpageoptiontwowidth,%
+ last logical shipout=1%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \pgfpageslogicalpageoptions{1}
+ {%
+ center=\pgfpageoptionfirstcenter,%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ center=\pgfpageoptionsecondcenter,%
+ copy from=2%
+ }%
+}
+
+\pgfpagesdeclarelayout{2 on 1}
+{
+ \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
+ \edef\pgfpageoptionwidth{\the\paperheight}
+ \def\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+ \def\pgfpageoptionfirstshipout{1}
+}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=2,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth,%
+ current logical shipout=\pgfpageoptionfirstshipout%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \ifdim\paperheight>\paperwidth\relax
+ % put side-by-side
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \else
+ % stack on top of one another
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \fi
+}
+
+
+\pgfpagesdeclarelayout{4 on 1}
+{
+ \edef\pgfpageoptionheight{\the\paperheight}
+ \edef\pgfpageoptionwidth{\the\paperwidth}
+ \edef\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=4,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+}
+
+\pgfpagesdeclarelayout{6 on 1}
+{
+ \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
+ \edef\pgfpageoptionwidth{\the\paperheight}
+ \def\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=6,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \ifdim\paperheight>\paperwidth\relax
+ % put side-by-side
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.167\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.833\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.167\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{5}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{6}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.833\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \else
+ % stack on top of one another
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.833\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.833\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{5}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.167\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{6}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.167\pgfphysicalheight}%
+ }%
+ \fi
+}
+
+
+\pgfpagesdeclarelayout{8 on 1}
+{
+ \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
+ \edef\pgfpageoptionwidth{\the\paperheight}
+ \def\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=8,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \ifdim\paperheight>\paperwidth\relax
+ % put side-by-side
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.125\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.375\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.625\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.875\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{5}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.125\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{6}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.375\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{7}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.625\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{8}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.875\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \else
+ % stack on top of one another
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.875\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.875\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.625\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.625\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{5}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.375\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{6}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.375\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{7}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.125\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{8}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.125\pgfphysicalheight}%
+ }%
+ \fi
+}
+
+
+\pgfpagesdeclarelayout{16 on 1}
+{
+ \edef\pgfpageoptionheight{\the\paperheight}
+ \edef\pgfpageoptionwidth{\the\paperwidth}
+ \edef\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+}
+{
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=16,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.125\pgfphysicalwidth}{.875\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.375\pgfphysicalwidth}{.875\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.625\pgfphysicalwidth}{.875\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.875\pgfphysicalwidth}{.875\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{5}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.125\pgfphysicalwidth}{.625\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{6}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.375\pgfphysicalwidth}{.625\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{7}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.625\pgfphysicalwidth}{.625\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{8}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.875\pgfphysicalwidth}{.625\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{9}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.125\pgfphysicalwidth}{.375\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{10}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.375\pgfphysicalwidth}{.375\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{11}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.625\pgfphysicalwidth}{.375\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{12}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.875\pgfphysicalwidth}{.375\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{13}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.125\pgfphysicalwidth}{.125\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{14}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.375\pgfphysicalwidth}{.125\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{15}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.625\pgfphysicalwidth}{.125\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{16}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.25\pgfphysicalwidth,%
+ resized height=.25\pgfphysicalheight,%
+ center=\pgfpoint{.875\pgfphysicalwidth}{.125\pgfphysicalheight}%
+ }%
+}
+
+\pgfpagesdeclarelayout{4 on 2, odd then even}%
+{%
+ \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
+ \edef\pgfpageoptionwidth{\the\paperheight}
+ \def\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+ \def\pgfpageoptionfirstshipout{1}
+}%
+{%
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=4,%
+ physical pages=2,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth,%
+ current logical shipout=\pgfpageoptionfirstshipout%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \ifdim\paperheight>\paperwidth\relax
+ % put side-by-side
+ \pgfpagesphysicalpage{1}{}
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpagesphysicalpage{2}{}
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \else
+ % stack on top of one another
+ \pgfpagesphysicalpage{1}{}
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpagesphysicalpage{2}{}
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \fi
+}
+
+\pgfpagesdeclarelayout{4 on 2, even then odd}%
+{%
+ \edef\pgfpageoptionheight{\the\paperwidth} % landscaped by default
+ \edef\pgfpageoptionwidth{\the\paperheight}
+ \def\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+ \def\pgfpageoptionfirstshipout{1}
+}%
+{%
+ \pgfpagesphysicalpageoptions
+ {%
+ logical pages=4,%
+ physical pages=2,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth,%
+ current logical shipout=\pgfpageoptionfirstshipout%
+ }
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ \ifdim\paperheight>\paperwidth\relax
+ % put side-by-side
+ \pgfpagesphysicalpage{2}{}
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpagesphysicalpage{1}{}
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \else
+ % stack on top of one another
+ \pgfpagesphysicalpage{2}{}
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpagesphysicalpage{1}{}
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \fi
+}
+
+% Load more layouts
+
+\def\pgfmorepages@extramessage{. Extra layouts can be loaded with the command \string\pgfmorepagesloadextralayouts}
+\newcommand\pgfmorepagesloadextralayouts{%
+ \input{pgfmorepageslayouts.code.tex}%
+ \def\pgfmorepages@extramessage{}%
+}
+
+% Change/set main option
+%
+% #1 = options
+%
+% Options:
+%
+% logical pages = number of logical pages per physical page
+% logical shipouts = number of shipouts needed to fill a physical page
+% (may be less than the number of logical pages,
+% if some logical pages are calculated
+% automatically)
+% current logical shipout = number of logical shipout that will come
+% next.
+%
+% Example:
+%
+% \pgfpagesphysicalpageoptions{logical pages=2,logical shipouts=1}
+
+\newcommand\pgfpagesphysicalpageoptions[1]{%
+ \pgf@lastshipout=0\relax%
+ \pgf@currentshipout=0\relax%
+ \setkeys{pgfpages@main}{#1}%
+ \ifnum\pgf@lastshipout=0\relax%not set
+ \pgf@lastshipout=\pgf@logicalpages%
+ \fi%
+ \ifnum\pgf@currentshipout=0\relax%not set
+ \pgf@currentshipout=\pgf@firstshipout%
+ \fi%
+}
+
+\define@key{pgfpages@main}{logical pages}{\pgf@logicalpages=#1\relax}
+\define@key{pgfpages@main}{physical pages}{\pgf@physicalpages=#1\relax}
+\define@key{pgfpages@main}{first logical shipout}{\pgf@firstshipout=#1\relax}
+\define@key{pgfpages@main}{last logical shipout}{\pgf@lastshipout=#1\relax}
+\define@key{pgfpages@main}{current logical shipout}{\pgf@currentshipout=#1\relax}
+\define@key{pgfpages@main}{physical height}{\pgfphysicalheight=#1\relax}
+\define@key{pgfpages@main}{physical width}{\pgfphysicalwidth=#1\relax}
+
+
+
+% Setup/change parameters of a logical page. You must call this
+% macro for each logical page.
+%
+% #1 = logical page number
+% #2 = options
+%
+% Options:
+%
+% original height = height of the logical page (\paperheight at point of
+% first invocation by default)
+% original width = width of the logical page (\paperwidth by default)
+% resized height = height of the logical page after resizing
+% resized width = width of the logical page after resizing
+% border shrink = length that is subtracted from resized height and
+% resized width
+% border code = pgf commands to be used for drawing a border (a
+% path with the border set will already have been
+% set)
+% rounded corners = clip the frame against a rectangle of the size of
+% the frame with corners of the given radius
+% scale = factor by which the page is enlarged/shrunk
+% center = center of the logical page in the physical page
+% rotation = degree by which the page is rotated around its center
+% xscale = scale only x-axis (use -1 to flip along y-axis)
+% yscale = scale only y-axis (use -1 to flip along x-axis)
+% copy from = copy the contents from this logical page of the
+% previous physical page, if no contents is specified
+%
+% If more than one of the three options ``resized height'', ``resized
+% width'' and ``scale'' are given, the smallest resulting scaling
+% wins.
+%
+% Example:
+%
+% \pgfpageslogicalpageoptions{1}{scale=0.5,center=\pgfpoint{0cm}{2cm}}
+% \pgfpageslogicalpageoptions{1 on 2}{scale=0.5,center=\pgfpoint{0cm}{2cm}}
+
+\newcommand\pgfpageslogicalpageoptions[2]{%
+% First step is to work out which physical page and which logical page we're dealing with.
+% This could be set via the first argument if it is of the form ``x on y'': this means ``logical page x on physical page y''.
+% Or we could set the physical page beforehand via the \pgfpagesphysicalpage macro.
+ \pgfutil@in@{on}{#1}%
+ \ifpgfutil@in@
+ \pgf@mp@seplp#1\relax
+ \else
+ \pgf@clpn=#1\relax%
+ \pgf@cppn=\pgf@currentpage\relax%
+ \fi
+% Make sure we have the box for this logical page.
+ \expandafter\ifx\csname pgfpages@box@\the\pgf@clpn\endcsname\relax%
+ \expandafter\newbox\csname pgfpages@box@\the\pgf@clpn\endcsname%
+\pgf@elpsetcurrent{height}{\the\paperheight}%
+\pgf@elpsetcurrent{width}{\the\paperwidth}%
+\fi
+% Now set the count \pgf@cpn so that it is the number of logical pages on this particular physical page.
+ \expandafter\ifx\csname pgf@lpageson@\the\pgf@cppn\endcsname\relax
+\expandafter\def\csname pgf@lpageson@\the\pgf@cppn\endcsname{1}%
+\else
+\expandafter\edef\csname pgf@lpageson@\the\pgf@cppn\endcsname{\number\numexpr\csname pgf@lpageson@\the\pgf@cppn\endcsname + 1\relax}%
+\fi
+ \pgf@cpn=\numexpr\csname pgf@lpageson@\the\pgf@cppn\endcsname\relax
+\pgf@epsetcurrent{logicalpage}{\the\pgf@clpn}%
+\pgfpages@processdefaults
+ \setkeys{pgfpages@page}{#2}%
+ \pgf@calculateresizes{height}%
+ \pgf@calculateresizes{width}%
+ \pgfsetupphysicalpagesizes%
+}
+
+\def\pgf@mp@seplp#1on#2\relax{%
+ \pgf@cpn=#1\relax
+ \pgf@cppn=#2\relax
+}
+
+% Set the current default physical page for the logical page options
+\newcommand\pgfpagesphysicalpage[2]{%
+ \edef\pgf@currentpage{#1}%
+ \pgf@cppn=#1\relax
+ \setkeys{pgfpages@ppage}{#2}%
+}
+
+% Set some defaults
+\newcommand\pgfpagessetdefaults[1]{%
+ \def\pgf@defaults{#1}}
+\def\pgf@defaults{}
+
+\def\pgfpages@processdefaults{%
+ \def\pgf@temp{\setkeys{pgfpages@page}}%
+ \expandafter\pgf@temp\expandafter{\pgf@defaults}%
+}
+
+% Set and get options for a particular logical page on a particular physical page.
+\def\pgf@epset#1#2#3#4{\expandafter\edef\csname pgfpages@p@#1@#2@#3\endcsname{#4}}
+\def\pgf@pset#1#2#3#4{\expandafter\def\csname pgfpages@p@#1@#2@#3\endcsname{#4}}
+\def\pgf@pget#1#2#3{\csname pgfpages@p@#1@#2@#3\endcsname}
+\def\pgf@epsetcurrent#1#2{\pgf@epset{\the\pgf@cpn}{\the\pgf@cppn}{#1}{#2}}
+\def\pgf@psetcurrent#1#2{\pgf@pset{\the\pgf@cpn}{\the\pgf@cppn}{#1}{#2}}
+\def\pgf@pgetcurrent#1{\pgf@pget{\the\pgf@cpn}{\the\pgf@cppn}{#1}}
+
+% Set and get options for a particular logical page.
+\def\pgf@elpset#1#2#3{\expandafter\edef\csname pgfpages@lp@#1@#2\endcsname{#3}}
+\def\pgf@lpset#1#2#3{\expandafter\def\csname pgfpages@lp@#1@#2\endcsname{#3}}
+\def\pgf@lpget#1#2{\csname pgfpages@lp@#1@#2\endcsname}
+\def\pgf@elpsetcurrent#1#2{\pgf@elpset{\the\pgf@clpn}{#1}{#2}}
+\def\pgf@lpsetcurrent#1#2{\pgf@lpset{\the\pgf@clpn}{#1}{#2}}
+\def\pgf@lpgetcurrent#1{\pgf@lpget{\the\pgf@clpn}{#1}}
+
+% Set and get options for a particular physical page.
+\def\pgf@eppset#1#2#3{\expandafter\edef\csname pgfpages@pp@#1@#2\endcsname{#3}}
+\def\pgf@ppset#1#2#3{\expandafter\def\csname pgfpages@pp@#1@#2\endcsname{#3}}
+\def\pgf@ppget#1#2{\csname pgfpages@pp@#1@#2\endcsname}
+\def\pgf@eppsetcurrent#1#2{\pgf@eppset{\the\pgf@cppn}{#1}{#2}}
+\def\pgf@ppsetcurrent#1#2{\pgf@ppset{\the\pgf@cppn}{#1}{#2}}
+\def\pgf@ppgetcurrent#1{\pgf@ppget{\the\pgf@cppn}{#1}}
+
+\define@key{pgfpages@page}{skip code}{\pgf@psetcurrent{skipcode}{#1}}
+\define@key{pgfpages@page}{scale}{\pgf@epsetcurrent{scale}{#1}}
+\define@key{pgfpages@page}{xscale}{\pgf@epsetcurrent{xscale}{#1}}
+\define@key{pgfpages@page}{yscale}{\pgf@epsetcurrent{yscale}{#1}}
+\define@key{pgfpages@page}{original height}{\pgf@elpsetcurrent{height}{#1}}
+\define@key{pgfpages@page}{original width}{\pgf@elpsetcurrent{width}{#1}}
+\define@key{pgfpages@page}{resized height}{\pgf@epsetcurrent{reheight}{#1}}
+\define@key{pgfpages@page}{resized width}{\pgf@epsetcurrent{rewidth}{#1}}
+\define@key{pgfpages@page}{center}{\pgf@psetcurrent{center}{#1}}
+\define@key{pgfpages@page}{rotation}{\pgf@epsetcurrent{rotation}{#1}}
+\define@key{pgfpages@page}{copy from}{\pgf@elpsetcurrent{copy}{#1}}
+\define@key{pgfpages@page}{border shrink}{\pgf@epsetcurrent{border}{#1}}
+\define@key{pgfpages@page}{border code}{\pgf@psetcurrent{bordercode}{#1}}
+\define@key{pgfpages@page}{corner width}{\pgf@psetcurrent{cornerwidth}{#1}}
+
+\define@key{pgfpages@ppage}{skip code}{\pgf@ppsetcurrent{skipcode}{#1}}
+\define@key{pgfpages@ppage}{defaults}{\pgfpagessetdefaults{#1}}
+
+\def\pgf@calculateresizes#1{%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @re#1\endcsname\relax%
+ \else%
+ \expandafter\pgfutil@tempdima\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @re#1\endcsname\relax%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @border\endcsname\relax%
+ \else%
+ \expandafter\pgfutil@tempdimb\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @border\endcsname\relax%
+ \advance\pgfutil@tempdima by-2\pgfutil@tempdimb\relax%
+ \fi%
+ \expandafter\pgfutil@tempdimb\csname pgfpages@lp@\the\pgf@clpn @#1\endcsname\relax%
+ \pgfutil@tempcnta=\pgfutil@tempdimb%
+ \divide\pgfutil@tempcnta by 65536\relax%
+ \ifnum\pgfutil@tempcnta=0\relax%
+ \pgfutil@tempcnta=1\relax%
+ \fi%
+ \divide\pgfutil@tempdima by\pgfutil@tempcnta\relax%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @scale\endcsname\relax%
+ \pgfutil@tempdimb=10000pt%
+ \else%
+ \expandafter\pgfutil@tempdimb\expandafter=\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @scale\endcsname pt\relax%
+ \fi%
+ \ifdim\pgfutil@tempdima<\pgfutil@tempdimb%
+ \edef\pgf@temp{{scale}{\expandafter\Pgf@geT\the\pgfutil@tempdima}}%
+ \expandafter\pgf@psetcurrent\pgf@temp%
+ \fi%
+ \fi%
+}
+
+
+
+% Shipout a physical page immediately
+%
+% Example:
+%
+% \pgfshipoutphysicalpage
+
+
+\newcommand\pgfshipoutphysicalpage{%
+ \ifnum\pgf@logicalpages>0\relax%
+ \pgf@cppn=1\relax%
+ \loop%
+ \global\advance\pgfactualpage by 1\relax
+ \pgfpagesshiptrue
+ \csname pgfpages@pp@\the\pgf@cppn @skipcode\endcsname
+ \ifpgfpagesship
+ \pgfpages@buildshipoutbox%
+ \pgfpages@shipoutshipoutbox%
+ \fi
+ \ifnum\pgf@cppn<\pgf@physicalpages%
+ \advance \pgf@cppn by 1\relax
+ \repeat%
+ \pgfpages@performcopying%
+ \global\pgfphysicalpageemptytrue%
+ \global\pgf@holdingphysicalpagefalse%
+ \fi%
+}
+
+\newbox\pgfpages@shipoutbox
+
+\def\pgfpages@buildshipoutbox{%
+ \setbox\pgfpages@shipoutbox=\vbox{{%
+ \set@typeset@protect%
+ \offinterlineskip%
+ \pgfsys@beginpicture%
+ \pgf@cpn=1\relax%
+ \loop%
+ \pgfpagesshiptrue
+ \csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @skipcode\endcsname
+\ifpgfpagesship
+\pgf@clpn=\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @logicalpage\endcsname\relax%
+ \setbox0=\hbox to \csname pgfpages@lp@\the\pgf@clpn @width\endcsname{%
+ \hskip1in%
+ \vbox to \csname pgfpages@lp@\the\pgf@clpn @height\endcsname%
+ {\vskip1in\offinterlineskip \expandafter\copy\csname
+ pgfpages@box@\the\pgf@clpn\endcsname\vss}\hss}%
+ \pgfsys@beginscope%
+ % Translate lower left corner
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @center\endcsname\relax%
+ \else%
+ \pgflowlevel{\pgftransformshift{\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @center\endcsname}}%
+ \fi%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @scale\endcsname\relax%
+ \else%
+ \pgflowlevel{\pgftransformscale{\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @scale\endcsname}}%
+ \fi%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @xscale\endcsname\relax%
+ \else%
+ \pgflowlevel{\pgftransformxscale{\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @xscale\endcsname}}%
+ \fi%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @yscale\endcsname\relax%
+ \else%
+ \pgflowlevel{\pgftransformyscale{\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @yscale\endcsname}}%
+ \fi%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @rotation\endcsname\relax%
+% \pgfscope%
+ \else%
+ \pgflowlevel{\pgftransformrotate{\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @rotation\endcsname}}%
+ \fi%
+ \pgfutil@tempdima=\csname pgfpages@lp@\the\pgf@clpn @width\endcsname\relax%
+ \pgfutil@tempdimb=\csname pgfpages@lp@\the\pgf@clpn @height\endcsname\relax%
+ \pgflowlevel{\pgftransformshift{\pgfpoint{-.5\pgfutil@tempdima}{-.5\pgfutil@tempdimb}}}%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @bordercode\endcsname\relax%
+ \else%
+ \pgfpathmoveto{\pgfpointorigin}%
+ \pgfpathlineto{\pgfpoint{\wd0}{0pt}}%
+ \pgfpathlineto{\pgfpoint{\wd0}{\ht0}}%
+ \pgfpathlineto{\pgfpoint{0pt}{\ht0}}%
+ \pgfpathclose%
+ {\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @bordercode\endcsname}%
+ \fi%
+ \expandafter\ifx\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @cornerwidth\endcsname\relax%
+ \else%
+ {
+ \expandafter\pgfutil@tempdima\csname pgfpages@p@\the\pgf@cpn @\the\pgf@cppn @cornerwidth\endcsname\relax%
+ \color{black}
+ \pgfpathrectangle{\pgfpointorigin}{\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdima}}%
+ \pgfpathrectangle{\pgfpoint{0pt}{\ht0-\pgfutil@tempdima}}{\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdima}}%
+ \pgfpathrectangle{\pgfpoint{\wd0-\pgfutil@tempdima}{0pt}}{\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdima}}%
+ \pgfpathrectangle{\pgfpoint{\wd0-\pgfutil@tempdima}{\ht0-\pgfutil@tempdima}}{\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdima}}%
+ \pgfusepath{fill}%
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgfutil@tempdima}}%
+ \pgfpathcurveto{\pgfpoint{0pt}{0.555\pgfutil@tempdima}}{\pgfpoint{.555\pgfutil@tempdima}{0pt}}{\pgfpoint{\pgfutil@tempdima}{0pt}}%
+ \pgfpathlineto{\pgfpoint{\wd0-\pgfutil@tempdima}{0pt}}%
+ \pgfpathcurveto{\pgfpoint{\wd0-.555\pgfutil@tempdima}{0pt}}{\pgfpoint{\wd0}{.555\pgfutil@tempdima}}{\pgfpoint{\wd0}{\pgfutil@tempdima}}%
+ \pgfpathlineto{\pgfpoint{\wd0}{\ht0-\pgfutil@tempdima}}%
+ \pgfpathcurveto{\pgfpoint{\wd0}{\ht0-.555\pgfutil@tempdima}}{\pgfpoint{\wd0-.555\pgfutil@tempdima}{\ht0}}{\pgfpoint{\wd0-\pgfutil@tempdima}{\ht0}}%
+ \pgfpathlineto{\pgfpoint{\pgfutil@tempdima}{\ht0}}%
+ \pgfpathcurveto{\pgfpoint{.555\pgfutil@tempdima}{\ht0}}{\pgfpoint{0pt}{\ht0-.555\pgfutil@tempdima}}{\pgfpoint{0pt}{\ht0-\pgfutil@tempdima}}%
+ \pgfpathclose
+ \pgfusepath{clip}%
+ \color{white}%
+ \pgfpathrectangle{\pgfpointorigin}{\pgfpoint{\wd0}{\ht0}}%
+ \pgfusepath{fill}%
+ }%
+ \fi%
+ \ht0=0pt%
+ \wd0=0pt%
+ \dp0=0pt%
+ \pgfsys@hbox0%
+% \endpgfscope%
+ \pgfsys@endscope%
+ \fi
+ \ifnum\pgf@cpn<\csname pgf@lpageson@\the\pgf@cppn\endcsname\relax%
+ \advance \pgf@cpn by 1\relax%
+ \repeat%
+ \pgfsys@endpicture%
+ }}%
+}
+
+
+\def\pgfpages@shipoutshipoutbox{%
+ \begingroup
+ \let \protect \noexpand
+ \@resetactivechars
+ \global\let\@@if@newlist\if@newlist
+ \global\@newlistfalse
+ \@parboxrestore%
+ \pgfpages@originalshipout%
+ \vbox{\hbox{%
+ \hskip-1in%
+ \vbox to \pgfphysicalheight{%
+ \vss\box\pgfpages@shipoutbox%
+ \vskip1in%
+ }}}%
+ \endgroup%
+}
+
+\def\pgfpages@performcopying{
+ \pgf@clpn=1\relax% copy first
+ \loop%
+ \expandafter\ifx\csname pgfpages@lp@\the\pgf@clpn @copy\endcsname\relax
+ \else%
+ \edef\pgf@temp{\noexpand\global\noexpand\setbox\csname pgfpages@box@%
+ \the\pgf@clpn\endcsname=\noexpand\copy\csname pgfpages@box@\csname
+ pgfpages@lp@\the\pgf@clpn @copy\endcsname\endcsname}%
+ \pgf@temp%
+ \fi%
+ \ifnum\pgf@clpn<\pgf@logicalpages%
+ \advance \pgf@clpn by 1\relax%
+ \repeat%
+ \pgf@clpn=1\relax% then void
+ \loop%
+ \expandafter\ifx\csname pgfpages@lp@\the\pgf@clpn @copy\endcsname\relax
+ \expandafter\global\expandafter\setbox\csname pgfpages@box@\the\pgf@clpn\endcsname=\box\voidb@x%
+ \else%
+ \fi%
+ \ifnum\pgf@clpn<\pgf@logicalpages%
+ \advance \pgf@clpn by 1\relax%
+ \repeat%
+}
+
+
+
+% Save original shipout commands
+%
+% Example:
+%
+% \pgfhookintoshipout
+
+\newcommand\pgfhookintoshipout{
+ \let\pgfpages@originalshipout=\shipout
+ \let\shipout=\pgfpages@interceptshipout
+}
+
+\def\pgfpages@interceptshipout{%
+ \ifnum\pgf@shipoutnextto>0\relax
+ \def\pgf@next{%
+ \expandafter\global\expandafter\setbox\csname pgfpages@box@\the\pgf@shipoutnextto\endcsname=\box\voidb@x%
+ \afterassignment\pgfpages@shipouttestnext%
+ \pgfpagesshipoutlogicalpage{\the\pgf@shipoutnextto}%
+ }%
+ \else%
+ \ifpgf@holdingphysicalpage% shipout physical page now
+ {\pgfshipoutphysicalpage}%
+ \fi%
+ \ifnum\pgf@logicalpages=0\relax
+ \def\pgf@next{\pgfpages@originalshipout}%
+ \else%
+ \def\pgf@next{%
+ \expandafter\global\expandafter\setbox\csname pgfpages@box@\the\pgf@currentshipout\endcsname=\box\voidb@x%
+ \afterassignment\pgfpages@shipouttest%
+ \pgfpagesshipoutlogicalpage{\the\pgf@currentshipout}%
+ }%
+ \fi%
+ \fi%
+ \pgf@next%
+}
+
+\def\pgfpages@shipouttest{%
+ \ifvoid\csname pgfpages@box@\the\pgf@currentshipout\endcsname\relax%
+ \aftergroup\pgfpages@preparenextshipout%
+ \else%
+ \pgfpages@preparenextshipout%
+ \fi%
+}
+
+\def\pgfpages@shipouttestnext{%
+ \ifvoid\csname pgfpages@box@\the\pgf@shipoutnextto\endcsname\relax%
+ \aftergroup\pgfpages@preparenextshipout%
+ \else%
+ \pgfpages@preparenextshipout%
+ \fi%
+}
+
+\def\pgfpages@preparenextshipout{%
+ \ifnum\pgf@shipoutnextto=0\relax%
+ \global\advance\pgf@currentshipout by 1\relax%
+ \else%
+ \global\pgf@shipoutnextto=0\relax%
+ \fi%
+ \ifnum\pgf@currentshipout>\pgf@lastshipout\relax%
+ \global\pgf@currentshipout=\pgf@firstshipout\relax%
+ \global\pgf@holdingphysicalpagetrue%
+ \fi%
+}
+
+
+
+% Shipout a logical page
+%
+% #1 = logical page number
+%
+% The command should be followed by a box. This box will become the
+% contents of the logical page.
+%
+% Example:
+%
+% \pgfpagesshipoutlogicalpage{0}\vbox{Hi!}
+
+\newcommand\pgfpagesshipoutlogicalpage[1]{%
+ \global\pgfphysicalpageemptyfalse%
+ \expandafter\global\expandafter\setbox\csname pgfpages@box@#1\endcsname=}
+
+
+
+% Finish current page and shipout next page to a specific logical page.
+%
+% #1 = logical page number
+%
+% When the current page has been typset, it will be become the given
+% logical page. This command ``interrupts'' the normal order of
+% logical pages.
+%
+% Example:
+%
+% \pgfpagesuselayout{two screens with optional second}
+%
+% Text for main page.\clearpage
+%
+% \pgfpagescurrentpagewillbelogicalpage{2}
+%
+% Text that goes to second page
+%
+% \clearpage
+%
+% Text for main page.
+
+\newcommand\pgfpagescurrentpagewillbelogicalpage[1]{%
+ \global\pgf@shipoutnextto=#1\relax%
+}
+
+
+% Setup the physical page sizes
+%
+% Example:
+%
+% \pgfsetupphysicalpagesizes
+
+\newcommand\pgfsetupphysicalpagesizes{%
+ % The following code was send to me by Rolf Niepraschk
+ \ifx\Gin@driver\pgfutil@empty\else%
+ \filename@parse{\Gin@driver}\@tempswafalse%
+ \def\reserved@a{dvips}%
+ \ifx\filename@base\reserved@a\@tempswatrue\fi%
+ \def\reserved@a{dvipdfm}%
+ \ifx\filename@base\reserved@a\@tempswatrue\fi%
+ \if@tempswa%
+ \AtBeginDvi{%
+ \special{papersize=\the\pgfphysicalwidth,\the\pgfphysicalheight}}%
+ \fi%
+ \def\reserved@a{pdftex}%
+ \ifx\filename@base\reserved@a
+ \pdfpagewidth\pgfphysicalwidth\pdfpageheight\pgfphysicalheight%
+ \fi%
+ \def\reserved@a{vtex}%
+ \ifx\filename@base\reserved@a
+ \mediawidth\pgfphysicalwidth\mediaheight\pgfphysicalheight%
+ \fi%
+ \def\reserved@a{luatex}%
+ \ifx\filename@base\reserved@a
+ \pagewidth\pgfphysicalwidth\pageheight\pgfphysicalheight%
+ \fi%
+ \fi
+}
+
+
+%
+% Start/End setup
+%
+\AtBeginDocument
+{
+ \pgfhookintoshipout
+ \pgfsetupphysicalpagesizes
+}
+\AtEndDocument
+{
+ \clearpage
+ \ifpgfphysicalpageempty
+ \else
+ \pgfshipoutphysicalpage
+ \fi
+}
+
diff --git a/graphics/pgf/contrib/pgfmorepages/pgfmorepages.tex b/graphics/pgf/contrib/pgfmorepages/pgfmorepages.tex
new file mode 100644
index 0000000000..0eb4b69dc5
--- /dev/null
+++ b/graphics/pgf/contrib/pgfmorepages/pgfmorepages.tex
@@ -0,0 +1,390 @@
+\documentclass{ltxdoc}
+
+\usepackage{tikz}
+\usetikzlibrary{positioning}
+\usepackage{pgfmorepages}
+\usepackage{fancyvrb}
+
+\GetFileInfo{pgfmorepages.sty}
+
+\title{PGF \emph{more} Pages}
+\author{Andrew Stacey \\ \texttt{loopspace@mathforge.org}}
+\date{\fileversion\ from \filedate}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+The \Verb+pgfmorepages+ package is a drop-in replacement for the \Verb+pgfpages+ package which comes with TikZ/PGF.
+As it is a drop-in replacement, it \emph{ought} to be fully backwards compatible with \Verb+pgfpages+.
+
+\Verb+pgfpages+ allows you the ability to place several pages of your document (hereafter \emph{logical pages}) onto one page of the output (hereafter \emph{physical pages}).
+\Verb+pgfmorepages+ adds extra features, the primary one being that whereas \Verb+pgfpages+ is ``many to one'', \Verb+pgfmorepages+ is ``many to many''.
+That is, while \Verb+pgfpages+ works one physical page at a time then \Verb+pgfmorepages+ can juggle several logical pages onto several physical pages.
+
+As an example of its capability, the layout \Verb+4 on 2, book format+ places four logical pages onto two physical pages so that when folded it forms a booklet.
+The layout is therefore:
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(4\)};
+\node at (1,0) {\(1\)};
+\node at (3,0) {\(2\)};
+\node at (4,0) {\(3\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+This requires knowing all four logical pages before the first physical page is output.
+
+\section{Usage}
+
+In your preamble:
+
+\begin{verbatim}
+\usepackage{pgfmorepages}
+\end{verbatim}
+
+\subsection{Layouts}
+
+The original \Verb+pgfpages+ defined the following layouts:
+
+\begin{itemize}
+\item \Verb+rounded corners+
+\item \Verb+resize to+
+\item \Verb+two screens with lagging second+
+\item \Verb+two screens with optional second+
+\item \Verb+2 on 1+
+\item \Verb+4 on 1+
+\item \Verb+6 on 1+
+\item \Verb+8 on 1+
+\item \Verb+16 on 1+
+\end{itemize}
+
+The \Verb+pgfmorepages+ defines some extra layouts, which require the following command in your preamble:
+%
+\begin{verbatim}
+\pgfmorepagesloadextralayouts
+\end{verbatim}
+
+\begin{itemize}
+\item \Verb+4 on 2, odd then even+
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(1\)};
+\node at (1,0) {\(3\)};
+\node at (3,0) {\(2\)};
+\node at (4,0) {\(4\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+\item \Verb+4 on 2, even then odd+
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(2\)};
+\node at (1,0) {\(4\)};
+\node at (3,0) {\(1\)};
+\node at (4,0) {\(3\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+\item \Verb+4 on 2, book format+
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(4\)};
+\node at (1,0) {\(1\)};
+\node at (3,0) {\(2\)};
+\node at (4,0) {\(3\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+\item \Verb+8 on 4, book format+
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(8\)};
+\node at (1,0) {\(1\)};
+\node at (3,0) {\(2\)};
+\node at (4,0) {\(7\)};
+\node at (6,0) {\(6\)};
+\node at (7,0) {\(3\)};
+\node at (9,0) {\(4\)};
+\node at (10,0) {\(5\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (6,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (7,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (9,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (10,0) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+\item \Verb+8 on 4, book format, reverse second, single sided+
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(8\)};
+\node at (1,0) {\(1\)};
+\node at (3,0) {\(6\)};
+\node at (4,0) {\(3\)};
+\node[rotate=180] at (6,0) {\(5\)};
+\node[rotate=180] at (7,0) {\(4\)};
+\node[rotate=180] at (9,0) {\(7\)};
+\node[rotate=180] at (10,0) {\(2\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (6,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (7,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (9,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (10,0) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+
+\item \Verb+5 index cards+
+\item \Verb+repeated 2-up+
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(1\)};
+\node at (1,0) {\(1\)};
+\node at (3,0) {\(2\)};
+\node at (4,0) {\(2\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+\item \Verb+repeated 4-up+
+
+\begin{center}
+\begin{tikzpicture}
+\node at (0,0) {\(1\)};
+\node at (1,0) {\(1\)};
+\node at (0,1.4) {\(1\)};
+\node at (1,1.4) {\(1\)};
+\node at (3,0) {\(2\)};
+\node at (4,0) {\(2\)};
+\node at (3,1.4) {\(2\)};
+\node at (4,1.4) {\(2\)};
+\draw (-.5,-.7) rectangle (.5,.7);
+\draw (1,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,0) +(-.5,-.7) rectangle +(.5,.7);
+\draw (0,1.4) +(-.5,-.7) rectangle +(.5,.7);
+\draw (1,1.4) +(-.5,-.7) rectangle +(.5,.7);
+\draw (3,1.4) +(-.5,-.7) rectangle +(.5,.7);
+\draw (4,1.4) +(-.5,-.7) rectangle +(.5,.7);
+\end{tikzpicture}
+\end{center}
+
+
+\item \Verb+1 on 1+
+
+This is a layout that ``resets'' the mechanism back to one logical page on one physical page.
+It still uses the mechanics of the \Verb+pgfmorepages+ package so is not quite the same as removing it altogether, but is effectively the same.
+
+\item \Verb+discard+
+
+This layout discards all its pages.
+Useful to remove pages from a document without changing the source file too much.
+
+\end{itemize}
+
+To use a layout, use the command:
+%
+\begin{verbatim}
+\pgfpagesuselayout{<layout name>}[<optional arguments>]
+\end{verbatim}
+
+
+
+\subsection{Options}
+
+The optional arguments are a superset of the ones that \Verb+pgfpages+ allows.
+
+\begin{itemize}
+\item \Verb+physical paper width+
+\item \Verb+physical paper height+
+\item \Verb+a0paper+
+\item \Verb+a1paper+
+\item \Verb+a2paper+
+\item \Verb+a3paper+
+\item \Verb+a4paper+
+\item \Verb+a5paper+
+\item \Verb+a6paper+
+\item \Verb+letterpaper+
+\item \Verb+legalpaper+
+\item \Verb+executivepaper+
+\item \Verb+landscape+
+\item \Verb+border shrink+
+\item \Verb+border code+
+\item \Verb+corner width+
+\item \Verb+odd numbered pages right+
+\item \Verb+second right+
+\item \Verb+second left+
+\item \Verb+second top+
+\item \Verb+second bottom+
+\end{itemize}
+
+The only additional option is \Verb+border code+ which, if the layout does anything with it, is designed for passing a command to the layout for the border path.
+The intention of this is that sometimes it is useful to draw the page border when designing a document but you might want to disable it for the final version.
+This makes it easy to switch between those (providing the layout supports it).
+
+\subsection{Changing Layout}
+
+The documentation for \Verb+pgfpages+ states that it is possible to change layout mid-document.
+This turns out not to be correct for \Verb+pgfpages+ as it doesn't reset everything correctly.
+\Verb+pgfmorepages+ fixes this\footnote{Or tries to -- I keep discovering new options that I haven't reset properly.}.
+It is best practice to use a \Verb+\newpage+ or \Verb+\clearpage+ before doing so.
+The layout \Verb+1 on 1+ is useful here as it sets the layout back to one logical page on one physical page.
+
+\section{Defining a New Layout}
+
+The best way to define a new layout is to start with one of the predefined ones and modify it.
+To that end, here is an example layout with comments.
+
+\begin{verbatim}
+ % Set the name of the layout
+\pgfpagesdeclarelayout{4 on 2, book format}%
+{%
+ % Unless overridden, this layout uses the same paper size
+ % but rotated so that two logical pages fit naturally on
+ % one physical page
+ \edef\pgfpageoptionheight{\the\paperwidth}
+ \edef\pgfpageoptionwidth{\the\paperheight}
+ % Defaults for the border
+ \def\pgfpageoptionborder{0pt}
+ \def\pgfpageoptionbordercode{}
+ % Start with the first page of the document
+ \def\pgfpageoptionfirstshipout{1}
+}%
+{%
+ % These are the settings for the physical pages
+ \pgfpagesphysicalpageoptions
+ {%
+ % Each set consists of 4 logical and 2 physical pages
+ logical pages=4,%
+ physical pages=2,%
+ physical height=\pgfpageoptionheight,%
+ physical width=\pgfpageoptionwidth,%
+ current logical shipout=\pgfpageoptionfirstshipout%
+ }
+ % These are the settings for the logical pages.
+ % These hold for all the logical pages.
+ \pgfpagessetdefaults{%
+ border code=\pgfpageoptionbordercode
+ }
+ % Our arrangement is different for two portrait pages
+ % on one landscape as opposed to two landscape on
+ % one portrait.
+ % This is for two portrait on one landscape
+ \ifdim\paperheight>\paperwidth\relax
+ % put side-by-side
+ % There are several ways to declare which logical page
+ % goes on which physical page. This command sets the
+ % physical page for the following logical pages. The
+ % second argument is any options to be set for that
+ % physical page.
+ \pgfpagesphysicalpage{1}{}
+ % Our fourth logical page goes on the first physical page
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ % The second and third logical pages go on the second
+ % physical page.
+ \pgfpagesphysicalpage{2}{}
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.25\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ % The first logical page goes back on the first physical page.
+ \pgfpagesphysicalpage{1}{}
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=.5\pgfphysicalwidth,%
+ resized height=\pgfphysicalheight,%
+ center=\pgfpoint{.75\pgfphysicalwidth}{.5\pgfphysicalheight}%
+ }%
+ \else
+ % These are essentially the same as above, except with
+ % two landscape pages on one portrait, so the pages
+ % are in different locations.
+ % stack on top of one another
+ \pgfpagesphysicalpage{1}{}
+ \pgfpageslogicalpageoptions{4}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpagesphysicalpage{2}{}
+ \pgfpageslogicalpageoptions{3}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \pgfpageslogicalpageoptions{2}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.75\pgfphysicalheight}%
+ }%
+ \pgfpagesphysicalpage{2}{}
+ \pgfpageslogicalpageoptions{1}
+ {%
+ border shrink=\pgfpageoptionborder,%
+ resized width=\pgfphysicalwidth,%
+ resized height=.5\pgfphysicalheight,%
+ center=\pgfpoint{.5\pgfphysicalwidth}{.25\pgfphysicalheight}%
+ }%
+ \fi
+}
+\end{verbatim}
+
+\end{document}
diff --git a/graphics/pgf/contrib/pgfornament-han/README.md b/graphics/pgf/contrib/pgfornament-han/README.md
new file mode 100644
index 0000000000..0b231c5935
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/README.md
@@ -0,0 +1,17 @@
+# pgfornament-han 2019/08/10
+A pgfornament library for Chinese traditional motifs and patterns.
+
+以 pgfornament å®åŒ…的机制,实现绘制汉风图纹。
+
+# Maintainers å®åŒ…维护
+LianTze Lim æž—èŽ²æž (liantze@gmail.com)
+
+# Contributors å¼€å‘人员
+Chennan Zhang (23637935@qq.com) drew the motifs using a CAD application,
+re-drew them in `TikZ`, and granted permission for these to be turned into
+a library suitable for use with the `pgfornament` package by LianTze Lim.
+
+所有图纹å‡ç”±å¼ æ™¨å—以 CAD 设计ã€ä»¥TikZ绘制,å†ç”±æž—莲æžè½¬ä¸ºé€‚用 pgfornament 机制的å®åŒ…代ç ã€‚
+
+# License
+[LaTeX Project Public License (LPPL 1.3c)](https://www.latex-project.org/lppl/lppl-1-3c/)
diff --git a/graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty b/graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty
new file mode 100644
index 0000000000..ca6d49bafc
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/beamerthemeHeavenlyClouds.sty
@@ -0,0 +1,206 @@
+% beamerthemeHeavenlyClouds.sty v1.1 2019/07/24
+% by LianTze Lim (liantze@gmail.com)
+\ProvidesPackage{beamerthemeHeavenlyClouds}
+
+\RequirePackage{cncolours}
+\RequirePackage{pgfornament-han}
+\RequirePackage{tikz}
+\usetikzlibrary{decorations,decorations.markings}
+\RequirePackage{calc}
+
+\setbeamercolor{structure}{fg=殷红}
+\setbeamercolor{headline}{fg=殷红}
+\setbeamercolor{page number in head/foot}{fg=殷红}
+\setbeamercolor{normal text}{bg=牙色}
+\setbeamercolor{alerted text}{fg=紫棠}
+\setbeamercolor{example text}{fg=æ¾èŠ±ç»¿}
+% \setbeamercolor{section name}{fg=structure!80!black}
+\setbeamerfont{section name}{size=\Huge,family=\lishu}
+\setbeamerfont{section title}{size=\Huge,family=\lishu}
+\setbeamerfont{section in toc}{family=\lishu}
+
+\usefonttheme[stillsansserifsmall]{serif}
+
+\renewcommand{\CJKrmdefault}{zhfs}
+
+\setbeamerfont{frametitle}{shape=\itshape,family=\lishu,series=\bfseries,size=\LARGE}
+% \setbeamercolor{frametitle}{fg=茜色}
+
+\setbeamerfont{title}{family=\lishu,series=\bfseries,size=\huge}
+
+\setbeamertemplate{itemize items}{$\diamond$}
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{frametitle continuation}[from second]
+
+\newif\if@clouds@alttitlecircle
+\newcommand{\alttitlecircle}{%
+ \@clouds@alttitlecircletrue%
+}
+
+\preto{\maketitle}{%
+ \def\title@circle@rotate{45}%
+ \def\title@circle@symmetry{none}%
+ \if@clouds@alttitlecircle
+ \def\title@circle@rotate{0}%
+ \def\title@circle@symmetry{h}%
+ \fi%
+ \newbox{\clouds@title@circle@elem}%
+ \savebox{\clouds@title@circle@elem}{%
+ \tikzset{pgfornamentstyle/.style={transform shape,rotate=\title@circle@rotate}}%
+ \usebeamercolor{headline}%
+ \pgfornamenthan[width=1.0471cm,
+ color=headline.fg!80!black,
+ symmetry=\title@circle@symmetry]{74}%
+ }
+ \begin{minipage}{4cm}
+ \begin{tikzpicture}
+ \begin{scope}[decoration={markings, mark=between positions 0 and 1 step 1.0471cm
+ with { \node[transform shape,inner sep=0pt,outer sep=0pt]{\usebox{\clouds@title@circle@elem}}; }} ]
+ \path [postaction={decorate}] circle (2cm);
+ \end{scope}%
+ \node {\inserttitlegraphic};
+ \end{tikzpicture}%
+ \end{minipage}%
+ \hfill\titlegraphic{}
+ \begin{minipage}{\dimexpr\textwidth-5cm}
+}
+\appto{\maketitle}{\end{minipage}}
+
+
+% \setbeamerfont{block title}{series=\centering}
+% \addtobeamertemplate{block alerted begin}{}{\centering}
+% \addtobeamertemplate{block example begin}{}{\centering}
+\addtobeamertemplate{block begin}{
+ \preto{\insertblocktitle}{\raisebox{0.75ex}{\pgfornamenthan[width=1em]{44}\space}}
+ % \appto{\insertblocktitle}{\raisebox{0.5ex}{\space\pgfornamenthan[width=1em]{44}}}
+}{}
+
+\addtobeamertemplate{block alerted begin}{
+ \preto{\insertblocktitle}{\raisebox{0.75ex}{\pgfornamenthan[width=1em]{44}\space}}
+ % \appto{\insertblocktitle}{\raisebox{0.5ex}{\space\pgfornamenthan[width=1em]{44}}}
+}{}
+
+\addtobeamertemplate{block example begin}{
+ \preto{\insertblocktitle}{\raisebox{0.75ex}{\pgfornamenthan[width=1em]{44}\space}}
+ % \appto{\insertblocktitle}{\raisebox{0.5ex}{\space\pgfornamenthan[width=1em]{44}}}
+}{}
+
+\newlength{\clouds@frametitle@rawwidth}%
+\newlength{\clouds@frametitle@actualwidth}%
+\def\clouds@progressmarker{}
+\newcommand{\simpleprogressmarker}{%
+ \renewcommand{\clouds@progressmarker}{%
+ \clip (-1.25em,2em) rectangle (\paperwidth,0pt);
+ \fill[headline.fg] (\clouds@progressinheadfoot,1.25em) circle (2pt);
+ }%
+}
+\newbox{\clouds@shenma}
+\savebox{\clouds@shenma}{%
+ \usebeamercolor[fg]{headline}%
+ \tikzset{pgfornamentstyle/.style={line width=0pt}}%
+ \pgfornamenthan[width=2.5em]{78}%
+}
+\newcommand{\shenmaprogressmarker}{%
+ \renewcommand{\clouds@progressmarker}{%
+ \clip (-1.3em,4em) rectangle (\paperwidth,0pt);
+ \node[anchor=south,inner sep=1pt] at (\clouds@progressinheadfoot,1.25em)
+ {\usebox{\clouds@shenma}};
+ }
+}%
+
+
+\AtBeginDocument{%
+ \shenmaprogressmarker
+ \newbox{\clouds@title@deco}
+ \savebox{\clouds@title@deco}{%
+ \usebeamercolor{headline}%
+ \pgfornamenthan[width=3.5em,color=headline.fg]{70}%
+ }
+ \setbeamertemplate{frametitle}{%
+ \settowidth{\clouds@frametitle@rawwidth}{\insertframetitle}%
+ \pgfmathsetlength{\clouds@frametitle@actualwidth}{max(\clouds@frametitle@rawwidth,\textwidth)}
+ \vskip.25em\centering%
+ \usebeamerfont{frametitle}\usebeamercolor{frametitle}%
+ \begin{minipage}{\clouds@frametitle@actualwidth}%
+ \raisebox{0.5ex}{\reflectbox{\usebox{\clouds@title@deco}}}\hfill%
+ \parbox{\dimexpr\clouds@frametitle@actualwidth-5em}{\centering\insertframetitle}%
+ \hfill\raisebox{0.5ex}{\usebox{\clouds@title@deco}}%
+ \end{minipage}\par%
+ }
+
+ \newbox{\clouds@smallhuiwen}
+ \savebox{\clouds@smallhuiwen}{\usebeamerfont{headline}\usebeamercolor{headline}\pgfornamenthan[width=2.5em,color=headline.fg]{39}}
+ \setbeamertemplate{headline}{%
+ \tikzset{every node/.append style={inner xsep=0pt}}%
+ \begin{tikzpicture}[decoration={markings, mark=between positions 0 and 1 step 2.5em
+ with { \node[transform shape]{\usebox{\clouds@smallhuiwen}}; }} ]
+ \path [postaction={decorate}] (0,0) -- (\paperwidth,0);
+ \end{tikzpicture}
+ }
+
+ \newlength{\clouds@progressinheadfoot}
+ \setbeamertemplate{footline}{%
+ \tikzset{every node/.append style={inner xsep=0pt}}%
+ \setlength{\clouds@progressinheadfoot}{%
+ \paperwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt} - 1.25em%
+ }
+ \begin{tikzpicture}[decoration={markings, mark=between positions 0 and 1 step 2.5em
+ with { \node[transform shape]{\usebox{\clouds@smallhuiwen}}; }} ]
+ \path [postaction={decorate}] (0,0) -- (\paperwidth,0);
+ \draw[headline.fg!50,line width=0.6pt] (-1.25em,1.25em) -- (\paperwidth,1.25em);
+ \clouds@progressmarker
+ % \fill[headline.fg] (\clouds@progressinheadfoot,1.25em) circle (2pt); %<-- TODO
+ \end{tikzpicture}
+ }
+}
+
+\AtBeginSection{\begin{frame}\sectionpage\end{frame}}
+\renewcommand{\thesection}{\chinese{section}}
+\newlength{\cloud@secname@height}
+\setbeamertemplate{section page}{
+\usebeamercolor{section title}\usebeamercolor{section name}
+\newbox{\clouds@section@circle@elem}
+\savebox{\clouds@section@circle@elem}{%
+ \usebeamercolor{headline}%
+ \pgfornamenthan[width=1.0471cm,color=headline.fg!80!black]{59}%
+}
+\settototalheight{\cloud@secname@height}{\usebeamerfont{section name}节}
+\begin{tikzpicture}
+ \begin{scope}[decoration={markings, mark=between positions 0 and 1 step 1.0471cm
+ with { \node[transform shape,inner sep=0pt,outer sep=0pt,draw=none]{\usebox{\clouds@section@circle@elem}}; }} ]
+ \path [postaction={decorate}] circle (1.5cm);
+ \end{scope}%
+ \node[anchor=center,text height=\cloud@secname@height,text=section name.fg,font=\usebeamerfont{section name}] {\thesection};
+ \node[anchor=west,text=section title.fg,font=\usebeamerfont{section title},
+ text width=\dimexpr\textwidth-5cm\relax] at (2.5cm,0) {\insertsection};
+\end{tikzpicture}
+}
+
+\RequirePackage{pgfmath}
+\newcommand{\randorn}[1]{%
+ \pgfmathsetmacro{\myscale}{(rnd * 0.4 + 0.1)}
+ \pgfmathsetmacro{\myintensity}{rnd * 20 + 65}
+ \pgfmathsetmacro{\mychoice}{int (ifthenelse(rand > 0, 1, -1)}
+ % \pgfmathparse{int(rand)}
+ \ifnum\mychoice > 0\relax
+ \def\myflip{v}
+ \else
+ \def\myflip{none}
+ \fi
+ \pgfmathsetmacro{\myx}{rnd * 0.8}
+ \pgfmathsetmacro{\myy}{rnd * 0.8}
+ \pgfmathtruncatemacro{\myorn}{random(0,1) + #1}
+ \node at (\myx * \paperwidth, \myy * \paperheight) {\pgfornamenthan[
+ color=normal text.bg!\myintensity!white,symmetry=\myflip,scale=\myscale]{\myorn}};
+}
+\setbeamertemplate{background}{%
+\begin{tikzpicture}
+ \clip (0,0) rectangle (\paperwidth,\paperheight);
+ \randorn{66}\randorn{68}\randorn{66}\randorn{70}\randorn{68}
+\end{tikzpicture}
+}
+
+%% 默认寿字纹图案
+\titlegraphic{\usebeamercolor{headline}\pgfornamenthan[width=2.5cm,color=headline.fg]{56}}
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty b/graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty
new file mode 100644
index 0000000000..2058d785ba
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/beamerthemeXiaoshan.sty
@@ -0,0 +1,157 @@
+% beamerthemeXiaoshan.sty v1.0 2018/04/09
+% by LianTze Lim (liantze@gmail.com)
+\ProvidesPackage{beamerthemeXiaoshan}
+
+\usetheme[progressbar=frametitle]{metropolis}
+
+\RequirePackage{pgfornament-han}
+\RequirePackage{tikz}
+\usetikzlibrary{decorations,decorations.markings}
+\RequirePackage{cncolours}
+\RequirePackage{needspace}
+
+\setbeamertemplate{frametitle continuation}[from second]
+
+\renewcommand{\metropolis@colors@dark}{
+ \setbeamercolor{normal text}{%
+ fg=black!2,
+ bg=漆黑
+ }
+ \usebeamercolor[fg]{normal text}
+}
+\renewcommand{\metropolis@colors@light}{
+ \setbeamercolor{normal text}{%
+ fg=漆黑,
+ bg=black!2
+ }
+ \usebeamercolor[fg]{normal text}
+}
+
+\metroset{background=light}
+
+\setbeamercolor{alerted text}{fg=酡红}
+\setbeamercolor{example text}{fg=é›è“}
+
+\AtBeginEnvironment{theorem}{%
+ \setbeamercolor{block title}{fg=æ¾èŠ±ç»¿}
+}
+
+\AtBeginEnvironment{proof}{%
+ \setbeamercolor{block title}{fg=æ¾èŠ±ç»¿}
+}
+
+\setbeamercolor{qed symbol}{fg=æ¾èŠ±ç»¿}
+
+\setbeamertemplate{title}{
+\raggedleft%
+\linespread{1.0}%
+\inserttitle%
+\hspace*{2em}\par%
+\vspace*{0.5em}
+}
+
+\setbeamertemplate{subtitle}{
+\raggedleft%
+\insertsubtitle%
+\hspace*{2em}\par%
+\vspace*{0.5em}
+}
+\addtobeamertemplate{author}{\raggedleft}{}
+\addtobeamertemplate{date}{\raggedleft}{}
+
+\setbeamertemplate{progress bar in head/foot}{
+ \nointerlineskip
+ \setlength{\metropolis@progressinheadfoot}{%
+ \paperwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}%
+ }%
+ \begin{beamercolorbox}[wd=\paperwidth]{progress bar in head/foot}
+ \begin{tikzpicture}%
+ \newbox{\orn}
+ \savebox{\orn}{\pgfornamenthan[width=1em]{39}}
+ \fill[bg!60] (0,0) rectangle (\paperwidth, .55em);
+ \clip (0,0) rectangle (\metropolis@progressinheadfoot, .55em);
+ \begin{scope}[decoration={markings, mark=between positions 0 and 1 step 1em
+ with { \node[transform shape,inner sep=0pt,outer sep=0pt,draw=none]{\usebox{\orn}}; }} ]
+ \path [postaction={decorate}] (.5em,.275em) -- (\dimexpr\metropolis@progressinheadfoot+0.5em, .275em);
+ \end{scope}%
+ \end{tikzpicture}%
+ \end{beamercolorbox}
+}
+
+\setbeamertemplate{progress bar in section page}{
+ \setlength{\metropolis@progressonsectionpage}{%
+ \textwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}%
+ }%
+ \begin{tikzpicture}
+ \newbox{\orn}
+ \savebox{\orn}{\pgfornamenthan[width=.8em]{39}}
+ \fill[bg!60] (0,0) rectangle (\textwidth, .44em);
+ \clip (0,0) rectangle (\metropolis@progressonsectionpage, .44em);
+ \begin{scope}[decoration={markings, mark=between positions 0 and 1 step .8em
+with { \node[transform shape,inner sep=0pt,outer sep=0pt,draw=none]{\usebox{\orn}}; }} ]
+ \path [postaction={decorate}] (.4em,.22em) -- (\dimexpr\metropolis@progressonsectionpage+0.5em, .22em);
+ \end{scope}%
+ \end{tikzpicture}%
+}
+
+\setbeamertemplate{title separator}{%
+ \vspace*{-5em}%
+ \begin{tikzpicture}
+ \newbox{\orn}
+ \savebox{\orn}{\pgfornamenthan[width=2em]{31}}
+ \node[anchor=south east,inner sep=0pt,outer sep=0pt] (endmotif) at (\textwidth,0){\pgfornamenthan[width=2em,symmetry=c]{13}};
+ % \node[rotate=90,anchor=south west,inner sep=0pt,outer sep=0pt] at (endmotif.north east) {\pgfornamenthan[width=2em]{31}};
+ \begin{scope}[decoration={markings, mark=between positions 0 and 1 step 2em
+ with { \node[transform shape,inner sep=0pt,outer sep=0pt,anchor=south]{\usebox{\orn}}; }} ]
+ \path [postaction={decorate}] ([yshift=1em]endmotif.north east) -- ++(0,2em);
+ \clip (0,1em) rectangle ([yshift=-2pt]endmotif.south west);
+ \path [postaction={decorate}] (1em, 0) -- (\textwidth,0);
+ \end{scope}%
+ \end{tikzpicture}%
+\par
+}
+
+\@ifpackageloaded{ctex}{%
+ \renewcommand{\metropolis@strut}{%
+ \vphantom{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz()\rule[-6pt]{1em}{0pt}}%
+ }
+}{}
+
+\@ifpackageloaded{CJK}{%
+ \renewcommand{\metropolis@strut}{%
+ \vphantom{ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz()\rule[-6pt]{1em}{0pt}}%
+ }
+}{}
+
+
+\addtobeamertemplate{block begin}{%
+ \needspace{3em}%
+ \begin{tikzpicture}[overlay]
+ \tikzset{every node/.style={inner sep=0pt,outer sep=0pt,draw=none,æ¾èŠ±ç»¿!60}}
+ \node[anchor=north]{\pgfornamenthan[width=1.8em]{9}};%
+ \node[anchor=north west,xscale=0.5] at (0.9em,0) {\pgfornamenthan[width=1.8em]{29}};%
+ \node[anchor=south west,yscale=0.5,rotate=-90] at (-0.9em,-1.8em) {\pgfornamenthan[width=1.8em]{29}};%
+ \end{tikzpicture}\vskip-3pt%
+ }{}
+
+\addtobeamertemplate{block alerted begin}{%
+ \needspace{3em}%
+ \begin{tikzpicture}[overlay]
+ \tikzset{every node/.style={inner sep=0pt,outer sep=0pt,draw=none, alerted text.fg!60}}
+ \node[anchor=north]{\pgfornamenthan[width=1.8em]{9}};%
+ \node[anchor=north west,xscale=0.5] at (0.9em,0) {\pgfornamenthan[width=1.8em]{29}};%
+ \node[anchor=south west,yscale=0.5,rotate=-90] at (-0.9em,-1.8em) {\pgfornamenthan[width=1.8em]{29}};%
+ \end{tikzpicture}\vskip-3pt%
+}{}
+
+\addtobeamertemplate{block example begin}{%
+ \needspace{3em}%
+ \begin{tikzpicture}[overlay]
+ \tikzset{every node/.style={inner sep=0pt,outer sep=0pt,draw=none, example text.fg!60}}
+ \node[anchor=north]{\pgfornamenthan[width=1.8em]{9}};%
+ \node[anchor=north west,xscale=0.5] at (0.9em,0) {\pgfornamenthan[width=1.8em]{29}};%
+ \node[anchor=south west,yscale=0.5,rotate=-90] at (-0.9em,-1.8em) {\pgfornamenthan[width=1.8em]{29}};%
+ \end{tikzpicture}\vskip-3pt%
+}{}
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/cncolours.sty b/graphics/pgf/contrib/pgfornament-han/cncolours.sty
new file mode 100644
index 0000000000..c0e66e8cab
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/cncolours.sty
@@ -0,0 +1,261 @@
+% Extracted from http://ylbook.com/cms/web/chuantongsecai/chuantongsecai.htm
+% by LianTze Lim (liantze@gmail.com), 27 December 2015
+% v1.1 Updated 7 May 2018: 端憲 @heangfat 新增三正色並加傳統字色å
+\ProvidesPackage{cncolours}[2018/07/05 v1.1 Chinese colour names]
+\RequirePackage{xcolor}
+\definecolor{粉红}{RGB}{255,179,167}
+\definecolor{粉紅}{RGB}{255,179,167}
+\definecolor{妃色}{RGB}{237,87,54}
+\definecolor{å“红}{RGB}{240,0,86}
+\definecolor{å“ç´…}{RGB}{240,0,86}
+\definecolor{桃红}{RGB}{244,121,131}
+\definecolor{桃紅}{RGB}{244,121,131}
+\definecolor{海棠红}{RGB}{219,90,107}
+\definecolor{海棠紅}{RGB}{219,90,107}
+\definecolor{石榴红}{RGB}{242,12,0}
+\definecolor{石榴紅}{RGB}{242,12,0}
+\definecolor{樱桃色}{RGB}{201,55,86}
+\definecolor{櫻桃色}{RGB}{201,55,86}
+\definecolor{银红}{RGB}{240,86,84}
+\definecolor{銀紅}{RGB}{240,86,84}
+\definecolor{大红}{RGB}{255,33,33}
+\definecolor{大紅}{RGB}{255,33,33}
+\definecolor{绛紫}{RGB}{140,67,86}
+\definecolor{絳紫}{RGB}{140,67,86}
+\definecolor{绯红}{RGB}{200,60,35}
+\definecolor{ç·‹ç´…}{RGB}{200,60,35}
+\definecolor{胭脂}{RGB}{157,41,51}
+\definecolor{朱红}{RGB}{255,76,0}
+\definecolor{朱紅}{RGB}{255,76,0}
+\definecolor{丹}{RGB}{255,78,32}
+\definecolor{彤}{RGB}{243,83,54}
+\definecolor{茜色}{RGB}{203,58,86}
+\definecolor{ç«çº¢}{RGB}{255,45,81}
+\definecolor{ç«ç´…}{RGB}{255,45,81}
+\definecolor{赫赤}{RGB}{201,31,55}
+\definecolor{嫣红}{RGB}{239,122,130}
+\definecolor{嫣紅}{RGB}{239,122,130}
+\definecolor{洋红}{RGB}{255,0,151}
+\definecolor{æ´‹ç´…}{RGB}{255,0,151}
+\definecolor{ç‚Ž}{RGB}{255,51,0}
+\definecolor{赤}{RGB}{195,39,43}
+\definecolor{绾}{RGB}{169,129,117}
+\definecolor{綰}{RGB}{169,129,117}
+\definecolor{枣红}{RGB}{195,33,54}
+\definecolor{棗紅}{RGB}{195,33,54}
+\definecolor{檀}{RGB}{179,109,97}
+\definecolor{殷红}{RGB}{190,0,47}
+\definecolor{æ®·ç´…}{RGB}{190,0,47}
+\definecolor{酡红}{RGB}{220,48,35}
+\definecolor{é…¡ç´…}{RGB}{220,48,35}
+\definecolor{酡颜}{RGB}{249,144,111}
+\definecolor{é…¡é¡}{RGB}{249,144,111}
+\definecolor{鹅黄}{RGB}{255,241,67}
+\definecolor{éµé»ƒ}{RGB}{255,241,67}
+\definecolor{鸭黄}{RGB}{250,255,114}
+\definecolor{鴨黃}{RGB}{250,255,114}
+\definecolor{樱è‰è‰²}{RGB}{234,255,86}
+\definecolor{æ«»è‰è‰²}{RGB}{234,255,86}
+\definecolor{æ黄}{RGB}{255,166,49}
+\definecolor{æ黃}{RGB}{255,166,49}
+\definecolor{æ红}{RGB}{255,140,49}
+\definecolor{æç´…}{RGB}{255,140,49}
+\definecolor{橘黄}{RGB}{255,137,54}
+\definecolor{橘黃}{RGB}{255,137,54}
+\definecolor{橙黄}{RGB}{255,164,0}
+\definecolor{橙黃}{RGB}{255,164,0}
+\definecolor{橘红}{RGB}{255,117,0}
+\definecolor{橘紅}{RGB}{255,117,0}
+\definecolor{姜黄}{RGB}{255,199,115}
+% 姜黃ã€è–‘黃是兩種æ¤ç‰©ã€‚未審此指何種,闕之.
+\definecolor{缃色}{RGB}{240,194,57}
+\definecolor{緗色}{RGB}{240,194,57}
+\definecolor{橙色}{RGB}{250,140,53}
+\definecolor{茶色}{RGB}{179,92,68}
+\definecolor{驼色}{RGB}{168,132,98}
+\definecolor{é§è‰²}{RGB}{168,132,98}
+\definecolor{æ˜é»„}{RGB}{200,155,64}
+\definecolor{æ˜é»ƒ}{RGB}{200,155,64}
+\definecolor{栗色}{RGB}{96,40,30}
+\definecolor{棕色}{RGB}{178,93,37}
+\definecolor{椶色}{RGB}{178,93,37}
+\definecolor{棕绿}{RGB}{130,113,0}
+\definecolor{椶綠}{RGB}{130,113,0}
+\definecolor{棕黑}{RGB}{124,75,0}
+\definecolor{椶黑}{RGB}{124,75,0}
+\definecolor{棕红}{RGB}{155,68,0}
+\definecolor{椶紅}{RGB}{155,68,0}
+\definecolor{棕黄}{RGB}{174,112,0}
+\definecolor{椶黃}{RGB}{174,112,0}
+\definecolor{赭色}{RGB}{149,85,57}
+\definecolor{ç¥ç€}{RGB}{202,105,36}
+\definecolor{è¤è‰²}{RGB}{110,81,30}
+\definecolor{枯黄}{RGB}{211,177,125}
+\definecolor{枯黃}{RGB}{211,177,125}
+\definecolor{黄栌}{RGB}{226,156,69}
+\definecolor{黃櫨}{RGB}{226,156,69}
+\definecolor{秋色}{RGB}{137,108,57}
+\definecolor{秋香色}{RGB}{217,182,17}
+\definecolor{嫩绿}{RGB}{189,221,34}
+\definecolor{嫩綠}{RGB}{189,221,34}
+\definecolor{柳黄}{RGB}{201,221,34}
+\definecolor{柳黃}{RGB}{201,221,34}
+\definecolor{柳绿}{RGB}{175,221,34}
+\definecolor{柳綠}{RGB}{175,221,34}
+\definecolor{竹é’}{RGB}{120,146,98}
+\definecolor{葱黄}{RGB}{163,217,0}
+\definecolor{蔥黃}{RGB}{163,217,0}
+\definecolor{葱绿}{RGB}{158,217,0}
+\definecolor{蔥綠}{RGB}{158,217,0}
+\definecolor{葱é’}{RGB}{14,184,58}
+\definecolor{蔥é’}{RGB}{14,184,58}
+\definecolor{é’葱}{RGB}{10,163,68}
+\definecolor{é’蔥}{RGB}{10,163,68}
+\definecolor{油绿}{RGB}{0,188,18}
+\definecolor{油綠}{RGB}{0,188,18}
+\definecolor{绿沉}{RGB}{12,137,24}
+\definecolor{綠沉}{RGB}{12,137,24}
+\definecolor{碧色}{RGB}{27,209,165}
+\definecolor{碧绿}{RGB}{42,221,156}
+\definecolor{碧綠}{RGB}{42,221,156}
+\definecolor{é’碧}{RGB}{72,192,163}
+\definecolor{翡翠色}{RGB}{61,225,173}
+\definecolor{è‰ç»¿}{RGB}{64,222,90}
+\definecolor{è‰ç¶ }{RGB}{64,222,90}
+\definecolor{é’色}{RGB}{0,224,158}
+\definecolor{é’ç¿ }{RGB}{0,224,121}
+\definecolor{é’白}{RGB}{192,235,215}
+\definecolor{鸭åµé’}{RGB}{224,238,232}
+\definecolor{é´¨åµé’}{RGB}{224,238,232}
+\definecolor{蟹壳é’}{RGB}{187,205,197}
+\definecolor{蟹殼é’}{RGB}{187,205,197}
+\definecolor{鸦é’}{RGB}{66,76,80}
+\definecolor{é´‰é’}{RGB}{66,76,80}
+\definecolor{绿色}{RGB}{0,229,0}
+\definecolor{綠色}{RGB}{0,229,0}
+\definecolor{豆绿}{RGB}{158,208,72}
+\definecolor{豆綠}{RGB}{158,208,72}
+\definecolor{豆é’}{RGB}{150,206,84}
+\definecolor{石é’}{RGB}{123,207,166}
+\definecolor{玉色}{RGB}{46,223,163}
+\definecolor{ç¼¥}{RGB}{127,236,173}
+\definecolor{縹}{RGB}{127,236,173}
+\definecolor{艾绿}{RGB}{164,226,198}
+\definecolor{艾綠}{RGB}{164,226,198}
+\definecolor{æ¾æŸç»¿}{RGB}{33,166,117}
+\definecolor{æ¾æŸç¶ }{RGB}{33,166,117}
+\definecolor{æ¾èŠ±ç»¿}{RGB}{5,119,72}
+\definecolor{æ¾èŠ±ç¶ }{RGB}{5,119,72}
+\definecolor{æ¾èŠ±è‰²}{RGB}{5,119,72}
+\definecolor{è“}{RGB}{68,206,246}
+\definecolor{è—}{RGB}{68,206,246}
+\definecolor{é›é’}{RGB}{23,124,176}
+\definecolor{é›è“}{RGB}{6,82,121}
+\definecolor{é›è—}{RGB}{6,82,121}
+\definecolor{碧è“}{RGB}{62,237,231}
+\definecolor{碧è—}{RGB}{62,237,231}
+\definecolor{蔚è“}{RGB}{112,243,255}
+\definecolor{蔚è—}{RGB}{112,243,255}
+\definecolor{å®è“}{RGB}{75,92,196}
+\definecolor{寶è—}{RGB}{75,92,196}
+\definecolor{è“ç°è‰²}{RGB}{161,175,201}
+\definecolor{è—ç°è‰²}{RGB}{161,175,201}
+\definecolor{è—é’}{RGB}{46,78,126}
+\definecolor{è—è“}{RGB}{59,46,126}
+\definecolor{è—è—}{RGB}{59,46,126}
+\definecolor{é»›}{RGB}{74,66,102}
+\definecolor{é»±}{RGB}{74,66,102}
+\definecolor{黛绿}{RGB}{66,102,102}
+\definecolor{黛綠}{RGB}{66,102,102}
+\definecolor{é»›è“}{RGB}{66,80,102}
+\definecolor{é»›è—}{RGB}{66,80,102}
+\definecolor{黛紫}{RGB}{87,66,102}
+\definecolor{紫色}{RGB}{141,75,187}
+\definecolor{ç´«é…±}{RGB}{129,84,99}
+\definecolor{紫醬}{RGB}{129,84,99}
+\definecolor{酱紫}{RGB}{129,84,118}
+\definecolor{醬紫}{RGB}{129,84,118}
+\definecolor{紫檀}{RGB}{76,34,27}
+\definecolor{绀é’}{RGB}{0,51,113}
+\definecolor{ç´ºé’}{RGB}{0,51,113}
+\definecolor{紫棠}{RGB}{86,0,79}
+\definecolor{é’莲}{RGB}{128,29,174}
+\definecolor{é’è“®}{RGB}{128,29,174}
+\definecolor{群é’}{RGB}{76,141,174}
+\definecolor{雪é’}{RGB}{176,164,227}
+\definecolor{ä¸é¦™è‰²}{RGB}{204,164,227}
+\definecolor{藕色}{RGB}{237,209,216}
+\definecolor{è—•è·è‰²}{RGB}{228,198,208}
+\definecolor{è‹è‰²}{RGB}{117,135,138}
+\definecolor{蒼色}{RGB}{117,135,138}
+\definecolor{è‹é»„}{RGB}{81,154,115}
+\definecolor{蒼黃}{RGB}{81,154,115}
+\definecolor{è‹é’}{RGB}{162,155,124}
+\definecolor{è’¼é’}{RGB}{162,155,124}
+\definecolor{è‹é»‘}{RGB}{115,151,171}
+\definecolor{蒼黑}{RGB}{115,151,171}
+\definecolor{è‹ç™½}{RGB}{209,217,224}
+\definecolor{蒼白}{RGB}{209,217,224}
+\definecolor{水色}{RGB}{136,173,166}
+\definecolor{水红}{RGB}{243,211,231}
+\definecolor{æ°´ç´…}{RGB}{243,211,231}
+\definecolor{水绿}{RGB}{212,242,231}
+\definecolor{水綠}{RGB}{212,242,231}
+\definecolor{æ°´è“}{RGB}{210,240,244}
+\definecolor{æ°´è—}{RGB}{210,240,244}
+\definecolor{æ·¡é’}{RGB}{211,224,243}
+\definecolor{æ¹–è“}{RGB}{48,223,243}
+\definecolor{æ¹–è—}{RGB}{48,223,243}
+\definecolor{湖绿}{RGB}{37,248,203}
+\definecolor{湖綠}{RGB}{37,248,203}
+\definecolor{精白}{RGB}{255,255,255}
+\definecolor{象牙白}{RGB}{255,251,240}
+\definecolor{雪白}{RGB}{240,252,255}
+\definecolor{月白}{RGB}{214,236,240}
+\definecolor{缟}{RGB}{242,236,222}
+\definecolor{縞}{RGB}{242,236,222}
+\definecolor{ç´ }{RGB}{224,240,233}
+\definecolor{è¼ç™½}{RGB}{243,249,241}
+\definecolor{霜色}{RGB}{233,241,246}
+\definecolor{花白}{RGB}{194,204,208}
+\definecolor{鱼肚白}{RGB}{252,239,232}
+\definecolor{魚肚白}{RGB}{252,239,232}
+\definecolor{莹白}{RGB}{227,239,253}
+\definecolor{瑩白}{RGB}{227,239,253}
+\definecolor{ç°è‰²}{RGB}{128,128,128}
+\definecolor{牙色}{RGB}{238,222,176}
+\definecolor{铅白}{RGB}{240,240,244}
+\definecolor{鉛白}{RGB}{240,240,244}
+\definecolor{玄色}{RGB}{98,42,29}
+\definecolor{玄é’}{RGB}{61,59,79}
+\definecolor{乌色}{RGB}{114,94,130}
+\definecolor{çƒè‰²}{RGB}{114,94,130}
+\definecolor{乌黑}{RGB}{57,47,65}
+\definecolor{çƒé»‘}{RGB}{57,47,65}
+\definecolor{漆黑}{RGB}{22,24,35}
+\definecolor{墨色}{RGB}{80,97,109}
+\definecolor{墨ç°}{RGB}{117,138,153}
+\definecolor{黑色}{RGB}{0,0,0}
+\definecolor{ç¼è‰²}{RGB}{73,49,49}
+\definecolor{緇色}{RGB}{73,49,49}
+\definecolor{煤黑}{RGB}{49,37,32}
+\definecolor{黧}{RGB}{93,81,60}
+\definecolor{黎}{RGB}{117,102,77}
+\definecolor{é»}{RGB}{107,104,130}
+\definecolor{é»é»‘}{RGB}{102,87,87}
+\definecolor{黯}{RGB}{65,85,93}
+\definecolor{赤金}{RGB}{242,190,69}
+\definecolor{金色}{RGB}{234,205,118}
+\definecolor{银白}{RGB}{233,231,239}
+\definecolor{銀白}{RGB}{233,231,239}
+\definecolor{铜绿}{RGB}{84,150,136}
+\definecolor{銅綠}{RGB}{84,150,136}
+\definecolor{乌金}{RGB}{167,142,68}
+\definecolor{çƒé‡‘}{RGB}{167,142,68}
+\definecolor{è€é“¶}{RGB}{186,202,198}
+\definecolor{è€éŠ€}{RGB}{186,202,198}
+% 以下增補,出處肖世孟《先秦色彩研究》:
+\definecolor{æ­£é’}{RGB}{16.27, 51.37, 147.9}%{Hsb}{224, 89, 58}
+\definecolor{正赤}{RGB}{153, 22.95, 33.79}%{Hsb}{335, 85, 60}
+\definecolor{正黄}{RGB}{221.85, 149.45, 24.4}%{Hsb}{38, 89, 87}
+\definecolor{正黃}{RGB}{221.85, 149.45, 24.4}%{Hsb}{38, 89, 87}
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han1.pgf b/graphics/pgf/contrib/pgfornament-han/han/han1.pgf
new file mode 100644
index 0000000000..f62644297d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han1.pgf
@@ -0,0 +1,64 @@
+% han1.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 150
+\l 40 150
+\l 40 130
+\l 0 130
+\l 0 80
+\l 50 80
+\l 50 120
+\l 70 120
+\l 70 60
+\l 0 60
+\l 0 0
+\l 10 0
+\l 10 50
+\l 80 50
+\l 80 120
+\l 150 120
+\l 150 190
+\l 200 190
+\l 200 200
+\l 140 200
+\l 140 130
+\l 80 130
+\l 80 150
+\l 120 150
+\l 120 200
+\l 70 200
+\l 70 160
+\l 50 160
+\l 50 200
+\l 0 200
+
+\m 10 190
+\l 40 190
+\l 40 160
+\l 10 160
+\l 10 190
+
+\m 80 190
+\l 110 190
+\l 110 160
+\l 80 160
+\l 80 190
+
+\m 50 150
+\l 70 150
+\l 70 130
+\l 50 130
+\l 50 150
+
+\m 10 120
+\l 40 120
+\l 40 90
+\l 10 90
+\l 10 120
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han10.pgf b/graphics/pgf/contrib/pgfornament-han/han/han10.pgf
new file mode 100644
index 0000000000..2a5195f16f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han10.pgf
@@ -0,0 +1,112 @@
+% han10.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200.5
+\l 0 130
+\l 30 130
+\l 30 110.5
+\l 0 110.5
+\l 0 0.25
+\l 0.5 0.25
+\l 0.5 110
+\l 30 110
+\l 30 100.5
+\l 10 100.5
+\l 10 0.25
+\l 10.5 0.25
+\l 10.5 100
+\l 30 100
+\l 30 0.25
+\l 30.5 0.25
+\l 30.5 130
+\l 40 130
+\l 40 0.25
+\l 40.5 0.25
+\l 40.5 100
+\l 70.5 100
+\l 70.5 130
+\l 100.5 130
+\l 100.5 160
+\l 200.25 160
+\l 200.25 160.5
+\l 100.5 160.5
+\l 100.5 170
+\l 200.25 170
+\l 200.25 170.5
+\l 100.5 170.5
+\l 100.5 190
+\l 200.25 190
+\l 200.25 190.5
+\l 100 190.5
+\l 100 130.5
+\l 70.5 130.5
+\l 70.5 140
+\l 90.5 140
+\l 90.5 200
+\l 200.25 200
+\l 200.25 200.5
+\l 90 200.5
+\l 90 170.5
+\l 70.5 170.5
+\l 70.5 200.5
+\l 0 200.5
+
+\m 0.5 200
+\l 70 200
+\l 70 170.5
+\l 60.5 170.5
+\l 60.5 190.5
+\l 10 190.5
+\l 10 140
+\l 60 140
+\l 60 130.5
+\l 0.5 130.5
+\l 0.5 200
+
+\m 10.5 190
+\l 60 190
+\l 60 170.5
+\l 30 170.5
+\l 30 140.5
+\l 10.5 140.5
+\l 10.5 190
+
+\m 30.5 170
+\l 90 170
+\l 90 160.5
+\l 40 160.5
+\l 40 140.5
+\l 30.5 140.5
+\l 30.5 170
+
+\m 40.5 160
+\l 60 160
+\l 60 140.5
+\l 40.5 140.5
+\l 40.5 160
+
+\m 60.5 160
+\l 70 160
+\l 70 100.5
+\l 40.5 100.5
+\l 40.5 110
+\l 60.5 110
+\l 60.5 160
+
+\m 70.5 160
+\l 90 160
+\l 90 140.5
+\l 70.5 140.5
+\l 70.5 160
+
+\m 40.5 130
+\l 60 130
+\l 60 110.5
+\l 40.5 110.5
+\l 40.5 130
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han11.pgf b/graphics/pgf/contrib/pgfornament-han/han/han11.pgf
new file mode 100644
index 0000000000..5408e5db4d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han11.pgf
@@ -0,0 +1,68 @@
+% han11.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 30 200
+\l 30 170
+\l 0 170
+\l 0 130
+\l 30 130
+\l 30 110
+\l 0 110
+\l 0 0
+\l 10 0
+\l 10 100
+\l 30 100
+\l 30 0
+\l 40 0
+\l 40 100
+\l 70 100
+\l 70 130
+\l 100 130
+\l 100 160
+\l 200 160
+\l 200 170
+\l 100 170
+\l 100 190
+\l 200 190
+\l 200 200
+\l 90 200
+\l 90 170
+\l 70 170
+\l 70 200
+\l 30 200
+
+\m 40 190
+\l 60 190
+\l 60 170
+\l 40 170
+\l 40 190
+
+\m 10 160
+\l 30 160
+\l 30 140
+\l 10 140
+\l 10 160
+
+\m 40 160
+\l 60 160
+\l 60 140
+\l 40 140
+\l 40 160
+
+\m 70 160
+\l 90 160
+\l 90 140
+\l 70 140
+\l 70 160
+
+\m 40 130
+\l 60 130
+\l 60 110
+\l 40 110
+\l 40 130
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han12.pgf b/graphics/pgf/contrib/pgfornament-han/han/han12.pgf
new file mode 100644
index 0000000000..e3111e3492
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han12.pgf
@@ -0,0 +1,124 @@
+% han12.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 30 200.5
+\l 30 170.5
+\l 0 170.5
+\l 0 130
+\l 30 130
+\l 30 110.5
+\l 0 110.5
+\l 0 0.25
+\l 0.5 0.25
+\l 0.5 110
+\l 30 110
+\l 30 100.5
+\l 10 100.5
+\l 10 0.25
+\l 10.5 0.25
+\l 10.5 100
+\l 30 100
+\l 30 0.25
+\l 30.5 0.25
+\l 30.5 130
+\l 40 130
+\l 40 0.25
+\l 40.5 0.25
+\l 40.5 100
+\l 70.5 100
+\l 70.5 130
+\l 100.5 130
+\l 100.5 160
+\l 200.25 160
+\l 200.25 160.5
+\l 100.5 160.5
+\l 100.5 170
+\l 200.25 170
+\l 200.25 170.5
+\l 100.5 170.5
+\l 100.5 190
+\l 200.25 190
+\l 200.25 190.5
+\l 100 190.5
+\l 100 130.5
+\l 70.5 130.5
+\l 70.5 140
+\l 90.5 140
+\l 90.5 200
+\l 200.25 200
+\l 200.25 200.5
+\l 90 200.5
+\l 90 170.5
+\l 70.5 170.5
+\l 70.5 200.5
+\l 30 200.5
+
+\m 30.5 200
+\l 70 200
+\l 70 170.5
+\l 60.5 170.5
+\l 60.5 190.5
+\l 40 190.5
+\l 40 140.5
+\l 30.5 140.5
+\l 30.5 200
+
+\m 40.5 190
+\l 60 190
+\l 60 170.5
+\l 40.5 170.5
+\l 40.5 190
+
+\m 0.5 170
+\l 30 170
+\l 30 160.5
+\l 10 160.5
+\l 10 140
+\l 60 140
+\l 60 130.5
+\l 0.5 130.5
+\l 0.5 170
+
+\m 40.5 170
+\l 90 170
+\l 90 160.5
+\l 40.5 160.5
+\l 40.5 170
+
+\m 10.5 160
+\l 30 160
+\l 30 140.5
+\l 10.5 140.5
+\l 10.5 160
+
+\m 40.5 160
+\l 60 160
+\l 60 140.5
+\l 40.5 140.5
+\l 40.5 160
+
+\m 60.5 160
+\l 70 160
+\l 70 100.5
+\l 40.5 100.5
+\l 40.5 110
+\l 60.5 110
+\l 60.5 160
+
+\m 70.5 160
+\l 90 160
+\l 90 140.5
+\l 70.5 140.5
+\l 70.5 160
+
+\m 40.5 130
+\l 60 130
+\l 60 110.5
+\l 40.5 110.5
+\l 40.5 130
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han13.pgf b/graphics/pgf/contrib/pgfornament-han/han/han13.pgf
new file mode 100644
index 0000000000..f6bb4bbcaa
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han13.pgf
@@ -0,0 +1,80 @@
+% han13.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 90
+\l 70 90
+\l 70 70
+\l 0 70
+\l 0 0
+\l 10 0
+\l 10 60
+\l 70 60
+\l 70 40
+\l 30 40
+\l 30 0
+\l 40 0
+\l 40 30
+\l 80 30
+\l 80 60
+\l 110 60
+\l 110 90
+\l 140 90
+\l 140 120
+\l 170 120
+\l 170 160
+\l 200 160
+\l 200 170
+\l 160 170
+\l 160 130
+\l 140 130
+\l 140 190
+\l 200 190
+\l 200 200
+\l 130 200
+\l 130 130
+\l 110 130
+\l 110 200
+\l 0 200
+
+\m 10 190
+\l 100 190
+\l 100 130
+\l 80 130
+\l 80 170
+\l 30 170
+\l 30 120
+\l 70 120
+\l 70 100
+\l 10 100
+\l 10 190
+
+\m 40 160
+\l 70 160
+\l 70 130
+\l 40 130
+\l 40 160
+
+\m 80 120
+\l 100 120
+\l 100 100
+\l 80 100
+\l 80 120
+
+\m 110 120
+\l 130 120
+\l 130 100
+\l 110 100
+\l 110 120
+
+\m 80 90
+\l 100 90
+\l 100 70
+\l 80 70
+\l 80 90
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han14.pgf b/graphics/pgf/contrib/pgfornament-han/han/han14.pgf
new file mode 100644
index 0000000000..ced5918071
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han14.pgf
@@ -0,0 +1,146 @@
+% han14.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\m 0 200.5
+\l 0 90
+\l 70 90
+\l 70 70.5
+\l 0 70.5
+\l 0 0.25
+\l 0.5 0.25
+\l 0.5 70
+\l 100.5 70
+\l 100.5 90
+\l 110 90
+\l 110 60.5
+\l 10 60.5
+\l 10 0.25
+\l 10.5 0.25
+\l 10.5 60
+\l 70 60
+\l 70 40.5
+\l 30 40.5
+\l 30 0.25
+\l 30.5 0.25
+\l 30.5 40
+\l 70.5 40
+\l 70.5 60
+\l 80 60
+\l 80 30.5
+\l 40 30.5
+\l 40 0.25
+\l 40.5 0.25
+\l 40.5 30
+\l 80.5 30
+\l 80.5 60
+\l 110.5 60
+\l 110.5 90
+\l 140.5 90
+\l 140.5 120
+\l 170.5 120
+\l 170.5 160
+\l 200.25 160
+\l 200.25 160.5
+\l 170 160.5
+\l 170 120.5
+\l 110.5 120.5
+\l 110.5 130
+\l 160.5 130
+\l 160.5 170
+\l 200.25 170
+\l 200.25 170.5
+\l 160 170.5
+\l 160 130.5
+\l 140.5 130.5
+\l 140.5 190
+\l 200.25 190
+\l 200.25 190.5
+\l 140 190.5
+\l 140 130.5
+\l 130.5 130.5
+\l 130.5 200
+\l 200.25 200
+\l 200.25 200.5
+\l 130 200.5
+\l 130 130.5
+\l 110.5 130.5
+\l 110.5 200.5
+\l 0 200.5
+
+\m 0.5 200
+\l 110 200
+\l 110 100.5
+\l 100.5 100.5
+\l 100.5 190.5
+\l 10 190.5
+\l 10 100
+\l 70 100
+\l 70 90.5
+\l 0.5 90.5
+\l 0.5 200
+
+\m 10.5 190
+\l 100 190
+\l 100 130.5
+\l 80.5 130.5
+\l 80.5 170.5
+\l 30 170.5
+\l 30 120
+\l 70 120
+\l 70 100.5
+\l 10.5 100.5
+\l 10.5 190
+
+\m 30.5 170
+\l 80 170
+\l 80 130.5
+\l 70.5 130.5
+\l 70.5 160.5
+\l 40 160.5
+\l 40 130
+\l 100 130
+\l 100 120.5
+\l 30.5 120.5
+\l 30.5 170
+
+\m 40.5 160
+\l 70 160
+\l 70 130.5
+\l 40.5 130.5
+\l 40.5 160
+
+\m 70.5 120
+\l 80 120
+\l 80 70.5
+\l 70.5 70.5
+\l 70.5 120
+
+\m 80.5 120
+\l 100 120
+\l 100 100.5
+\l 80.5 100.5
+\l 80.5 120
+
+\m 110.5 120
+\l 130 120
+\l 130 100.5
+\l 110.5 100.5
+\l 110.5 120
+
+\m 130.5 120
+\l 140 120
+\l 140 90.5
+\l 80.5 90.5
+\l 80.5 100
+\l 130.5 100
+\l 130.5 120
+
+\m 80.5 90
+\l 100 90
+\l 100 70.5
+\l 80.5 70.5
+\l 80.5 90
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han15.pgf b/graphics/pgf/contrib/pgfornament-han/han/han15.pgf
new file mode 100644
index 0000000000..a1be0fc67d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han15.pgf
@@ -0,0 +1,16 @@
+% han15.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 0 200
+\l 200 200
+\l 200 190
+\l 10 190
+\l 10 0
+\l 0 0
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han16.pgf b/graphics/pgf/contrib/pgfornament-han/han/han16.pgf
new file mode 100644
index 0000000000..c32c1d1f49
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han16.pgf
@@ -0,0 +1,24 @@
+% han16.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0.25
+\l 0 200.5
+\l 200.25 200.5
+\l 200.25 200
+\l 0.5 200
+\l 0.5 0.25
+\l 0 0.25
+
+\m 10 0.25
+\l 10 190.5
+\l 200.25 190.5
+\l 200.25 190
+\l 10.5 190
+\l 10.5 0.25
+\l 10 0.25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han17.pgf b/graphics/pgf/contrib/pgfornament-han/han/han17.pgf
new file mode 100644
index 0000000000..edabbd440c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han17.pgf
@@ -0,0 +1,24 @@
+% han17.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 0
+\l 10 0
+\l 10 190
+\l 200 190
+\l 200 200
+\l 0 200
+
+\m 30 170
+\l 30 0
+\l 40 0
+\l 40 160
+\l 200 160
+\l 200 170
+\l 30 170
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han18.pgf b/graphics/pgf/contrib/pgfornament-han/han/han18.pgf
new file mode 100644
index 0000000000..f97b501bbb
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han18.pgf
@@ -0,0 +1,40 @@
+% han18.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200.5
+\l 0 0.25
+\l 0.5 0.25
+\l 0.5 200
+\l 200.25 200
+\l 200.25 200.5
+\l 0 200.5
+
+\m 10 190.5
+\l 10 0.25
+\l 10.5 0.25
+\l 10.5 190
+\l 200.25 190
+\l 200.25 190.5
+\l 10 190.5
+
+\m 30 170.5
+\l 30 0.25
+\l 30.5 0.25
+\l 30.5 170
+\l 200.25 170
+\l 200.25 170.5
+\l 30 170.5
+
+\m 40 160.5
+\l 40 0.25
+\l 40.5 0.25
+\l 40.5 160
+\l 200.25 160
+\l 200.25 160.5
+\l 40 160.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han19.pgf b/graphics/pgf/contrib/pgfornament-han/han/han19.pgf
new file mode 100644
index 0000000000..66b5c8bbd9
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han19.pgf
@@ -0,0 +1,99 @@
+% han19.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 80
+\l 120 80
+\l 120 200
+\l 0 200
+
+\m 10 190
+\l 110 190
+\l 110 90
+\l 10 90
+\l 10 190
+
+\m 132.5 160
+\l 132.5 67.5
+\l 40 67.5
+\l 40 7.5
+\l 75 7.5
+\l 75 32.5
+\l 90 32.5
+\l 90 0
+\l 100 0
+\l 100 42.5
+\l 65 42.5
+\l 65 17.5
+\l 50 17.5
+\l 50 57.5
+\l 142.5 57.5
+\l 142.5 150
+\l 182.5 150
+\l 182.5 135
+\l 157.5 135
+\l 157.5 100
+\l 200 100
+\l 200 110
+\l 167.5 110
+\l 167.5 125
+\l 192.5 125
+\l 192.5 160
+\l 132.5 160
+
+\s
+\endinput
+
+}
+}
+{
+\newrgbcolor{curcolor}{0 0 0}
+\pscustom[linewidth=0.50 linecolor=curcolor]
+{
+\newpath
+\m 0 200
+\l 0 80
+\l 120 80
+\l 120 200
+\l 0 200
+
+\m 10 190
+\l 110 190
+\l 110 90
+\l 10 90
+\l 10 190
+
+\m 132.5 160
+\l 132.5 67.5
+\l 40 67.5
+\l 40 7.5
+\l 75 7.5
+\l 75 32.5
+\l 90 32.5
+\l 90 0
+\l 100 0
+\l 100 42.5
+\l 65 42.5
+\l 65 17.5
+\l 50 17.5
+\l 50 57.5
+\l 142.5 57.5
+\l 142.5 150
+\l 182.5 150
+\l 182.5 135
+\l 157.5 135
+\l 157.5 100
+\l 200 100
+\l 200 110
+\l 167.5 110
+\l 167.5 125
+\l 192.5 125
+\l 192.5 160
+\l 132.5 160
+
+}
+}
+\end{pspicture}
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han2.pgf b/graphics/pgf/contrib/pgfornament-han/han/han2.pgf
new file mode 100644
index 0000000000..2451704d27
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han2.pgf
@@ -0,0 +1,124 @@
+% han2.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0.25
+\l 0 60.5
+\l 70 60.5
+\l 70 120
+\l 50.5 120
+\l 50.5 80
+\l 0 80
+\l 0 130.5
+\l 40 130.5
+\l 40 150
+\l 0 150
+\l 0 200.5
+\l 50.5 200.5
+\l 50.5 160.5
+\l 70 160.5
+\l 70 200.5
+\l 120.5 200.5
+\l 120.5 150
+\l 80.5 150
+\l 80.5 130.5
+\l 140 130.5
+\l 140 200.5
+\l 200.25 200.5
+\l 200.25 200
+\l 140.5 200
+\l 140.5 130
+\l 80 130
+\l 80 150.5
+\l 120 150.5
+\l 120 200
+\l 70.5 200
+\l 70.5 160
+\l 50 160
+\l 50 200
+\l 0.5 200
+\l 0.5 150.5
+\l 40.5 150.5
+\l 40.5 130
+\l 0.5 130
+\l 0.5 80.5
+\l 50 80.5
+\l 50 120.5
+\l 70.5 120.5
+\l 70.5 60
+\l 0.5 60
+\l 0.5 0.25
+\l 0 0.25
+
+\m 10 0.25
+\l 10 50.5
+\l 80 50.5
+\l 80 120.5
+\l 150 120.5
+\l 150 190.5
+\l 200.25 190.5
+\l 200.25 190
+\l 150.5 190
+\l 150.5 120
+\l 80.5 120
+\l 80.5 50
+\l 10.5 50
+\l 10.5 0.25
+\l 10 0.25
+
+\m 10 90
+\l 10 90.25
+\l 10 120.5
+\l 40.5 120.5
+\l 40.5 90
+\l 10 90
+
+\m 10.5 90.5
+\l 40 90.5
+\l 40 120
+\l 10.5 120
+\l 10.5 90.5
+
+\m 50 130
+\l 50 130.25
+\l 50 150.5
+\l 70.5 150.5
+\l 70.5 130
+\l 50 130
+
+\m 50.5 130.5
+\l 70 130.5
+\l 70 150
+\l 50.5 150
+\l 50.5 130.5
+
+\m 10 160
+\l 10 160.25
+\l 10 190.5
+\l 40.5 190.5
+\l 40.5 160
+\l 10 160
+
+\m 80 160
+\l 80 160.25
+\l 80 190.5
+\l 110.5 190.5
+\l 110.5 160
+\l 80 160
+
+\m 10.5 160.5
+\l 40 160.5
+\l 40 190
+\l 10.5 190
+\l 10.5 160.5
+
+\m 80.5 160.5
+\l 110 160.5
+\l 110 190
+\l 80.5 190
+\l 80.5 160.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han20.pgf b/graphics/pgf/contrib/pgfornament-han/han/han20.pgf
new file mode 100644
index 0000000000..66d20e1de9
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han20.pgf
@@ -0,0 +1,90 @@
+% han20.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200.5
+\l 0 80.25
+\l 0 80
+\l 120.5 80
+\l 120.5 200.5
+\l 0 200.5
+
+\m 0.5 200
+\l 120 200
+\l 120 80.5
+\l 0.5 80.5
+\l 0.5 200
+
+\m 10 190.5
+\l 10 90.25
+\l 10 90
+\l 110.5 90
+\l 110.5 190.5
+\l 10 190.5
+
+\m 10.5 190
+\l 110 190
+\l 110 90.5
+\l 10.5 90.5
+\l 10.5 190
+
+\m 132.5 160.5
+\l 132.5 68
+\l 40 68
+\l 40 7.5
+\l 75.5 7.5
+\l 75.5 32.5
+\l 90 32.5
+\l 90 0.25
+\l 90.5 0.25
+\l 90.5 33
+\l 75 33
+\l 75 8
+\l 40.5 8
+\l 40.5 67.5
+\l 133 67.5
+\l 133 160
+\l 192.5 160
+\l 192.5 125.5
+\l 167.5 125.5
+\l 167.5 110
+\l 200.25 110
+\l 200.25 110.5
+\l 168 110.5
+\l 168 125
+\l 193 125
+\l 193 160.5
+\l 132.5 160.5
+
+\m 142.5 150.5
+\l 142.5 58
+\l 50 58
+\l 50 17.5
+\l 65.5 17.5
+\l 65.5 42.5
+\l 100 42.5
+\l 100 0.25
+\l 100.5 0.25
+\l 100.5 43
+\l 65 43
+\l 65 18
+\l 50.5 18
+\l 50.5 57.5
+\l 143 57.5
+\l 143 150
+\l 182.5 150
+\l 182.5 135.5
+\l 157.5 135.5
+\l 157.5 100
+\l 200.25 100
+\l 200.25 100.5
+\l 158 100.5
+\l 158 135
+\l 183 135
+\l 183 150.5
+\l 142.5 150.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han21.pgf b/graphics/pgf/contrib/pgfornament-han/han/han21.pgf
new file mode 100644
index 0000000000..5f9a30889f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han21.pgf
@@ -0,0 +1,64 @@
+% han21.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 260
+\l 0 130
+\l 130 130
+\l 130 260
+\l 0 260
+
+\m 10 250
+\l 120 250
+\l 120 140
+\l 10 140
+\l 10 250
+
+\m 145 240
+\l 145 115
+\l 20 115
+\l 20 5
+\l 105 5
+\l 105 65
+\l 70 65
+\l 70 40
+\l 55 40
+\l 55 80
+\l 120 80
+\l 120 0
+\l 130 0
+\l 130 90
+\l 45 90
+\l 45 30
+\l 80 30
+\l 80 55
+\l 95 55
+\l 95 15
+\l 30 15
+\l 30 105
+\l 155 105
+\l 155 230
+\l 245 230
+\l 245 165
+\l 205 165
+\l 205 180
+\l 230 180
+\l 230 215
+\l 170 215
+\l 170 130
+\l 260 130
+\l 260 140
+\l 180 140
+\l 180 205
+\l 220 205
+\l 220 190
+\l 195 190
+\l 195 155
+\l 255 155
+\l 255 240
+\l 145 240
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han22.pgf b/graphics/pgf/contrib/pgfornament-han/han/han22.pgf
new file mode 100644
index 0000000000..934349e613
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han22.pgf
@@ -0,0 +1,122 @@
+% han22.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 260.5
+\l 0 130
+\l 130.25 130
+\l 130.5 130
+\l 130.5 260.5
+\l 0 260.5
+
+\m 0.5 260
+\l 130 260
+\l 130 130.5
+\l 0.5 130.5
+\l 0.5 260
+
+\m 10 250.5
+\l 10 140
+\l 120.25 140
+\l 120.5 140
+\l 120.5 250.5
+\l 10 250.5
+
+\m 10.5 250
+\l 120 250
+\l 120 140.5
+\l 10.5 140.5
+\l 10.5 250
+
+\m 145 240.5
+\l 145 115.5
+\l 20 115.5
+\l 20 5
+\l 105.5 5
+\l 105.5 65.5
+\l 70 65.5
+\l 70 40.5
+\l 55.5 40.5
+\l 55.5 80
+\l 120 80
+\l 120 0.25
+\l 120.5 0.25
+\l 120.5 80.5
+\l 55 80.5
+\l 55 40
+\l 70.5 40
+\l 70.5 65
+\l 105 65
+\l 105 5.5
+\l 20.5 5.5
+\l 20.5 115
+\l 145.5 115
+\l 145.5 240
+\l 255 240
+\l 255 155.5
+\l 195.5 155.5
+\l 195.5 190
+\l 220.5 190
+\l 220.5 205.5
+\l 180 205.5
+\l 180 140
+\l 260.25 140
+\l 260.25 140.5
+\l 180.5 140.5
+\l 180.5 205
+\l 220 205
+\l 220 190.5
+\l 195 190.5
+\l 195 155
+\l 255.5 155
+\l 255.5 240.5
+\l 145 240.5
+
+\m 155 230.5
+\l 155 105.5
+\l 30 105.5
+\l 30 15
+\l 95.5 15
+\l 95.5 55.5
+\l 80 55.5
+\l 80 30.5
+\l 45.5 30.5
+\l 45.5 90
+\l 130 90
+\l 130 0.25
+\l 130.5 0.25
+\l 130.5 90.5
+\l 45 90.5
+\l 45 30
+\l 80.5 30
+\l 80.5 55
+\l 95 55
+\l 95 15.5
+\l 30.5 15.5
+\l 30.5 105
+\l 155.5 105
+\l 155.5 230
+\l 245 230
+\l 245 165.5
+\l 205.5 165.5
+\l 205.5 180
+\l 230.5 180
+\l 230.5 215.5
+\l 170 215.5
+\l 170 130
+\l 260.25 130
+\l 260.25 130.5
+\l 170.5 130.5
+\l 170.5 215
+\l 230 215
+\l 230 180.5
+\l 205 180.5
+\l 205 165
+\l 245.5 165
+\l 245.5 230.5
+\l 155 230.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han23.pgf b/graphics/pgf/contrib/pgfornament-han/han/han23.pgf
new file mode 100644
index 0000000000..470fa934af
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han23.pgf
@@ -0,0 +1,48 @@
+% han23.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 125 200
+\l 125 75
+\l 0 75
+\l 0 0
+\l 60 0
+\l 60 50
+\l 25 50
+\l 25 25
+\l 35 25
+\l 35 40
+\l 50 40
+\l 50 10
+\l 10 10
+\l 10 65
+\l 135 65
+\l 135 190
+\l 190 190
+\l 190 150
+\l 160 150
+\l 160 165
+\l 175 165
+\l 175 175
+\l 150 175
+\l 150 140
+\l 200 140
+\l 200 200
+\l 125 200
+
+\m 15 185
+\l 15 90
+\l 110 90
+\l 110 185
+\l 15 185
+
+\m 25 175
+\l 100 175
+\l 100 100
+\l 25 100
+\l 25 175
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han24.pgf b/graphics/pgf/contrib/pgfornament-han/han/han24.pgf
new file mode 100644
index 0000000000..e8eb286c68
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han24.pgf
@@ -0,0 +1,91 @@
+% han24.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 125 200.5
+\l 125 75.5
+\l 0 75.5
+\l 0 0
+\l 60.5 0
+\l 60.5 50.5
+\l 25 50.5
+\l 25 25
+\l 35.25 25
+\l 35.5 25
+\l 35.5 40
+\l 50 40
+\l 50 10.5
+\l 10.5 10.5
+\l 10.5 65
+\l 135.5 65
+\l 135.5 190
+\l 190 190
+\l 190 150.5
+\l 160.5 150.5
+\l 160.5 165
+\l 175.5 165
+\l 175.5 175.5
+\l 150 175.5
+\l 150 140
+\l 200.5 140
+\l 200.5 200.5
+\l 125 200.5
+
+\m 125.5 200
+\l 200 200
+\l 200 140.5
+\l 150.5 140.5
+\l 150.5 175
+\l 175 175
+\l 175 165.5
+\l 160 165.5
+\l 160 150
+\l 190.5 150
+\l 190.5 190.5
+\l 135 190.5
+\l 135 65.5
+\l 10 65.5
+\l 10 10
+\l 50.5 10
+\l 50.5 40.5
+\l 35 40.5
+\l 35 25.5
+\l 25.5 25.5
+\l 25.5 50
+\l 60 50
+\l 60 0.5
+\l 0.5 0.5
+\l 0.5 75
+\l 125.5 75
+\l 125.5 200
+
+\m 15 185.5
+\l 15 90.25
+\l 15 90
+\l 110.5 90
+\l 110.5 185.5
+\l 15 185.5
+
+\m 15.5 185
+\l 110 185
+\l 110 90.5
+\l 15.5 90.5
+\l 15.5 185
+
+\m 25 175.5
+\l 25 100.25
+\l 25 100
+\l 100.5 100
+\l 100.5 175.5
+\l 25 175.5
+
+\m 25.5 175
+\l 100 175
+\l 100 100.5
+\l 25.5 100.5
+\l 25.5 175
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han25.pgf b/graphics/pgf/contrib/pgfornament-han/han/han25.pgf
new file mode 100644
index 0000000000..5af4c330c8
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han25.pgf
@@ -0,0 +1,64 @@
+% han25.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 117.75 200.25
+\l 117.75 146.5
+\l 102.75 146.5
+\l 102.75 185.25
+\l 15.25 185.25
+\l 15.25 97.75
+\l 54 97.75
+\l 54 82.75
+\l 0.25 82.75
+\l 0.25 7.75
+\l 25.25 7.75
+\l 25.25 0.25
+\l 35.25 0.25
+\l 35.25 7.75
+\l 60.25 7.75
+\l 60.25 57.75
+\l 25.25 57.75
+\l 25.25 32.75
+\l 35.25 32.75
+\l 35.25 47.75
+\l 50.25 47.75
+\l 50.25 17.75
+\l 10.25 17.75
+\l 10.25 72.75
+\l 127.75 72.75
+\l 127.75 190.25
+\l 182.75 190.25
+\l 182.75 150.25
+\l 152.75 150.25
+\l 152.75 165.25
+\l 167.75 165.25
+\l 167.75 175.25
+\l 142.75 175.25
+\l 142.75 140.25
+\l 192.75 140.25
+\l 192.75 165.25
+\l 200.25 165.25
+\l 200.25 175.25
+\l 192.75 175.25
+\l 192.75 200.25
+\l 117.75 200.25
+
+\m 25.25 175.25
+\l 92.75 175.25
+\l 92.75 107.75
+\l 25.25 107.75
+\l 25.25 175.25
+
+\m 102.75 136.5
+\l 117.75 136.5
+\l 117.75 82.75
+\l 64 82.75
+\l 64 97.75
+\l 102.75 97.75
+\l 102.75 136.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han26.pgf b/graphics/pgf/contrib/pgfornament-han/han/han26.pgf
new file mode 100644
index 0000000000..3956b2d215
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han26.pgf
@@ -0,0 +1,122 @@
+% han26.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 117.5 200.5
+\l 117.5 146.75
+\l 103 146.75
+\l 103 185.5
+\l 15 185.5
+\l 15 97.5
+\l 53.75 97.5
+\l 53.75 83
+\l 0 83
+\l 0 7.5
+\l 25 7.5
+\l 25 0.25
+\l 25.5 0.25
+\l 25.5 8
+\l 0.5 8
+\l 0.5 82.5
+\l 54.25 82.5
+\l 54.25 98
+\l 15.5 98
+\l 15.5 185
+\l 102.5 185
+\l 102.5 146.25
+\l 118 146.25
+\l 118 200
+\l 192.5 200
+\l 192.5 175
+\l 200.25 175
+\l 200.25 175.5
+\l 193 175.5
+\l 193 200.5
+\l 117.5 200.5
+
+\m 127.5 190.5
+\l 127.5 73
+\l 10 73
+\l 10 17.5
+\l 50.5 17.5
+\l 50.5 48
+\l 35 48
+\l 35 33
+\l 25.5 33
+\l 25.5 57.5
+\l 60 57.5
+\l 60 8
+\l 35 8
+\l 35 0.25
+\l 35.5 0.25
+\l 35.5 7.5
+\l 60.5 7.5
+\l 60.5 58
+\l 25 58
+\l 25 32.5
+\l 35.5 32.5
+\l 35.5 47.5
+\l 50 47.5
+\l 50 18
+\l 10.5 18
+\l 10.5 72.5
+\l 128 72.5
+\l 128 190
+\l 182.5 190
+\l 182.5 150.5
+\l 153 150.5
+\l 153 165
+\l 168 165
+\l 168 175.5
+\l 142.5 175.5
+\l 142.5 140
+\l 193 140
+\l 193 165
+\l 200.25 165
+\l 200.25 165.5
+\l 192.5 165.5
+\l 192.5 140.5
+\l 143 140.5
+\l 143 175
+\l 167.5 175
+\l 167.5 165.5
+\l 152.5 165.5
+\l 152.5 150
+\l 183 150
+\l 183 190.5
+\l 127.5 190.5
+
+\m 25 175.5
+\l 25 107.75
+\l 25 107.5
+\l 93 107.5
+\l 93 175.5
+\l 25 175.5
+
+\m 25.5 175
+\l 92.5 175
+\l 92.5 108
+\l 25.5 108
+\l 25.5 175
+
+\m 102.5 136.75
+\l 102.5 98
+\l 63.75 98
+\l 63.75 82.75
+\l 63.75 82.5
+\l 118 82.5
+\l 118 136.75
+\l 102.5 136.75
+
+\m 103 136.25
+\l 117.5 136.25
+\l 117.5 83
+\l 64.25 83
+\l 64.25 97.5
+\l 103 97.5
+\l 103 136.25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han27.pgf b/graphics/pgf/contrib/pgfornament-han/han/han27.pgf
new file mode 100644
index 0000000000..944c99c6c4
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han27.pgf
@@ -0,0 +1,64 @@
+% han27.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 97.5
+\l 40 97.5
+\l 40 82.5
+\l 15 82.5
+\l 15 7.5
+\l 40 7.5
+\l 40 0
+\l 50 0
+\l 50 7.5
+\l 75 7.5
+\l 75 57.5
+\l 40 57.5
+\l 40 32.5
+\l 50 32.5
+\l 50 47.5
+\l 65 47.5
+\l 65 17.5
+\l 25 17.5
+\l 25 72.5
+\l 127.5 72.5
+\l 127.5 175
+\l 182.5 175
+\l 182.5 135
+\l 152.5 135
+\l 152.5 150
+\l 167.5 150
+\l 167.5 160
+\l 142.5 160
+\l 142.5 125
+\l 192.5 125
+\l 192.5 150
+\l 200 150
+\l 200 160
+\l 192.5 160
+\l 192.5 185
+\l 117.5 185
+\l 117.5 160
+\l 102.5 160
+\l 102.5 200
+\l 0 200
+
+\m 10 190
+\l 92.5 190
+\l 92.5 107.5
+\l 10 107.5
+\l 10 190
+
+\m 102.5 150
+\l 117.5 150
+\l 117.5 82.5
+\l 50 82.5
+\l 50 97.5
+\l 102.5 97.5
+\l 102.5 150
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han28.pgf b/graphics/pgf/contrib/pgfornament-han/han/han28.pgf
new file mode 100644
index 0000000000..3417f8ee52
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han28.pgf
@@ -0,0 +1,122 @@
+% han28.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200.5
+\l 0 97.5
+\l 40 97.5
+\l 40 83
+\l 15 83
+\l 15 7.5
+\l 40 7.5
+\l 40 0.25
+\l 40.5 0.25
+\l 40.5 8
+\l 15.5 8
+\l 15.5 82.5
+\l 40.5 82.5
+\l 40.5 98
+\l 0.5 98
+\l 0.5 200
+\l 102.5 200
+\l 102.5 160
+\l 118 160
+\l 118 185
+\l 192.5 185
+\l 192.5 160
+\l 200.25 160
+\l 200.25 160.5
+\l 193 160.5
+\l 193 185.5
+\l 117.5 185.5
+\l 117.5 160.5
+\l 103 160.5
+\l 103 200.5
+\l 0 200.5
+
+\m 10 190.5
+\l 10 107.75
+\l 10 107.5
+\l 93 107.5
+\l 93 190.5
+\l 10 190.5
+
+\m 10.5 190
+\l 92.5 190
+\l 92.5 108
+\l 10.5 108
+\l 10.5 190
+
+\m 127.5 175.5
+\l 127.5 73
+\l 25 73
+\l 25 17.5
+\l 65.5 17.5
+\l 65.5 48
+\l 50 48
+\l 50 33
+\l 40.5 33
+\l 40.5 57.5
+\l 75 57.5
+\l 75 8
+\l 50 8
+\l 50 0.25
+\l 50.5 0.25
+\l 50.5 7.5
+\l 75.5 7.5
+\l 75.5 58
+\l 40 58
+\l 40 32.5
+\l 50.5 32.5
+\l 50.5 47.5
+\l 65 47.5
+\l 65 18
+\l 25.5 18
+\l 25.5 72.5
+\l 128 72.5
+\l 128 175
+\l 182.5 175
+\l 182.5 135.5
+\l 153 135.5
+\l 153 150
+\l 168 150
+\l 168 160.5
+\l 142.5 160.5
+\l 142.5 125
+\l 193 125
+\l 193 150
+\l 200.25 150
+\l 200.25 150.5
+\l 192.5 150.5
+\l 192.5 125.5
+\l 143 125.5
+\l 143 160
+\l 167.5 160
+\l 167.5 150.5
+\l 152.5 150.5
+\l 152.5 135
+\l 183 135
+\l 183 175.5
+\l 127.5 175.5
+
+\m 102.5 150.5
+\l 102.5 98
+\l 50 98
+\l 50 82.75
+\l 50 82.5
+\l 118 82.5
+\l 118 150.5
+\l 102.5 150.5
+
+\m 103 150
+\l 117.5 150
+\l 117.5 83
+\l 50.5 83
+\l 50.5 97.5
+\l 103 97.5
+\l 103 150
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han29.pgf b/graphics/pgf/contrib/pgfornament-han/han/han29.pgf
new file mode 100644
index 0000000000..6b644ea277
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han29.pgf
@@ -0,0 +1,14 @@
+% han29.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 0 10
+\l 200 10
+\l 200 0
+\l 0 0
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han3.pgf b/graphics/pgf/contrib/pgfornament-han/han/han3.pgf
new file mode 100644
index 0000000000..2f68b135aa
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han3.pgf
@@ -0,0 +1,80 @@
+% han3.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 160
+\l 30 160
+\l 30 145
+\l 0 145
+\l 0 105
+\l 40 105
+\l 40 135
+\l 55 135
+\l 55 90
+\l 0 90
+\l 0 55
+\l 20 55
+\l 20 40
+\l 0 40
+\l 0 0
+\l 10 0
+\l 10 30
+\l 30 30
+\l 30 65
+\l 10 65
+\l 10 80
+\l 65 80
+\l 65 135
+\l 120 135
+\l 120 190
+\l 135 190
+\l 135 170
+\l 170 170
+\l 170 190
+\l 200 190
+\l 200 200
+\l 160 200
+\l 160 180
+\l 145 180
+\l 145 200
+\l 110 200
+\l 110 145
+\l 65 145
+\l 65 160
+\l 95 160
+\l 95 200
+\l 55 200
+\l 55 170
+\l 40 170
+\l 40 200
+\l 0 200
+
+\m 10 190
+\l 30 190
+\l 30 170
+\l 10 170
+\l 10 190
+
+\m 65 190
+\l 85 190
+\l 85 170
+\l 65 170
+\l 65 190
+
+\m 40 160
+\l 55 160
+\l 55 145
+\l 40 145
+\l 40 160
+
+\m 10 135
+\l 30 135
+\l 30 115
+\l 10 115
+\l 10 135
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han30.pgf b/graphics/pgf/contrib/pgfornament-han/han/han30.pgf
new file mode 100644
index 0000000000..8fb6ecd2f3
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han30.pgf
@@ -0,0 +1,20 @@
+% han30.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0.25 10.5
+\l 0.25 10
+\l 200.25 10
+\l 200.25 10.5
+\l 0.25 10.5
+
+\m 0.25 0.5
+\l 0.25 0
+\l 200.25 0
+\l 200.25 0.5
+\l 0.25 0.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han31.pgf b/graphics/pgf/contrib/pgfornament-han/han/han31.pgf
new file mode 100644
index 0000000000..846796b0aa
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han31.pgf
@@ -0,0 +1,20 @@
+% han31.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 40
+\l 0 30
+\l 200 30
+\l 200 40
+\l 0 40
+
+\m 0 10
+\l 0 0
+\l 200 0
+\l 200 10
+\l 0 10
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han32.pgf b/graphics/pgf/contrib/pgfornament-han/han/han32.pgf
new file mode 100644
index 0000000000..a072b9be98
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han32.pgf
@@ -0,0 +1,32 @@
+% han32.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0.25 0
+\l 0.25 0.5
+\l 200.25 0.5
+\l 200.25 0
+\l 0.25 0
+
+\m 0.25 10
+\l 0.25 10.5
+\l 200.25 10.5
+\l 200.25 10
+\l 0.25 10
+
+\m 0.25 30
+\l 0.25 30.5
+\l 200.25 30.5
+\l 200.25 30
+\l 0.25 30
+
+\m 0.25 40
+\l 0.25 40.5
+\l 200.25 40.5
+\l 200.25 40
+\l 0.25 40
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han33.pgf b/graphics/pgf/contrib/pgfornament-han/han/han33.pgf
new file mode 100644
index 0000000000..a28064870e
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han33.pgf
@@ -0,0 +1,26 @@
+% han33.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 17.5 0
+\l 17.5 50
+\l 57.5 50
+\l 57.5 35
+\l 32.5 35
+\l 32.5 0
+\l 75 0
+\l 75 10
+\l 42.5 10
+\l 42.5 25
+\l 67.5 25
+\l 67.5 60
+\l 7.5 60
+\l 7.5 10
+\l 0 10
+\l 0 0
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han34.pgf b/graphics/pgf/contrib/pgfornament-han/han/han34.pgf
new file mode 100644
index 0000000000..91d74a568a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han34.pgf
@@ -0,0 +1,44 @@
+% han34.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0.25 0
+\l 0.25 0.5
+\l 17.5 0.5
+\l 17.5 50.5
+\l 58 50.5
+\l 58 35
+\l 33 35
+\l 33 0.5
+\l 75.25 0.5
+\l 75.25 0
+\l 32.5 0
+\l 32.5 35.5
+\l 57.5 35.5
+\l 57.5 50
+\l 18 50
+\l 18 0
+\l 0.25 0
+
+\m 0.25 10
+\l 0.25 10.5
+\l 7.5 10.5
+\l 7.5 60.5
+\l 68 60.5
+\l 68 25
+\l 43 25
+\l 43 10.5
+\l 75.25 10.5
+\l 75.25 10
+\l 42.5 10
+\l 42.5 25.5
+\l 67.5 25.5
+\l 67.5 60
+\l 8 60
+\l 8 10
+\l 0.25 10
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han35.pgf b/graphics/pgf/contrib/pgfornament-han/han/han35.pgf
new file mode 100644
index 0000000000..dd058d7a6f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han35.pgf
@@ -0,0 +1,30 @@
+% han35.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 42.5 0
+\l 42.5 35
+\l 17.5 35
+\l 17.5 50
+\l 82.5 50
+\l 82.5 35
+\l 57.5 35
+\l 57.5 0
+\l 100 0
+\l 100 10
+\l 67.5 10
+\l 67.5 25
+\l 92.5 25
+\l 92.5 60
+\l 7.5 60
+\l 7.5 25
+\l 32.5 25
+\l 32.5 10
+\l 0 10
+\l 0 0
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han36.pgf b/graphics/pgf/contrib/pgfornament-han/han/han36.pgf
new file mode 100644
index 0000000000..abd84781c1
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han36.pgf
@@ -0,0 +1,52 @@
+% han36.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0.25 0
+\l 0.25 0.5
+\l 42.5 0.5
+\l 42.5 35
+\l 17.5 35
+\l 17.5 50.5
+\l 83 50.5
+\l 83 35
+\l 58 35
+\l 58 0.5
+\l 100.25 0.5
+\l 100.25 0
+\l 57.5 0
+\l 57.5 35.5
+\l 82.5 35.5
+\l 82.5 50
+\l 18 50
+\l 18 35.5
+\l 43 35.5
+\l 43 0
+\l 0.25 0
+
+\m 0.25 10
+\l 0.25 10.5
+\l 32.5 10.5
+\l 32.5 25
+\l 7.5 25
+\l 7.5 60.5
+\l 93 60.5
+\l 93 25
+\l 68 25
+\l 68 10.5
+\l 100.25 10.5
+\l 100.25 10
+\l 67.5 10
+\l 67.5 25.5
+\l 92.5 25.5
+\l 92.5 60
+\l 8 60
+\l 8 25.5
+\l 33 25.5
+\l 33 10
+\l 0.25 10
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han37.pgf b/graphics/pgf/contrib/pgfornament-han/han/han37.pgf
new file mode 100644
index 0000000000..5a669a7584
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han37.pgf
@@ -0,0 +1,34 @@
+% han37.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 10
+\l 10 10
+\l 10 110
+\l 120 110
+\l 120 25
+\l 60 25
+\l 60 60
+\l 85 60
+\l 85 75
+\l 45 75
+\l 45 10
+\l 125 10
+\l 125 0
+\l 35 0
+\l 35 85
+\l 95 85
+\l 95 50
+\l 70 50
+\l 70 35
+\l 110 35
+\l 110 100
+\l 20 100
+\l 20 0
+\l 0 0
+\l 0 10
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han38.pgf b/graphics/pgf/contrib/pgfornament-han/han/han38.pgf
new file mode 100644
index 0000000000..94af485893
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han38.pgf
@@ -0,0 +1,60 @@
+% han38.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0.25 0
+\l 0.25 0.5
+\l 20 0.5
+\l 20 100.5
+\l 110.5 100.5
+\l 110.5 35
+\l 70 35
+\l 70 50.5
+\l 95 50.5
+\l 95 85
+\l 35.5 85
+\l 35.5 0.5
+\l 125.25 0.5
+\l 125.25 0
+\l 35 0
+\l 35 85.5
+\l 95.5 85.5
+\l 95.5 50
+\l 70.5 50
+\l 70.5 35.5
+\l 110 35.5
+\l 110 100
+\l 20.5 100
+\l 20.5 0
+\l 0.25 0
+
+\m 0.25 10
+\l 0.25 10.5
+\l 10 10.5
+\l 10 110.5
+\l 120.5 110.5
+\l 120.5 25
+\l 60 25
+\l 60 60.5
+\l 85 60.5
+\l 85 75
+\l 45.5 75
+\l 45.5 10.5
+\l 125.25 10.5
+\l 125.25 10
+\l 45 10
+\l 45 75.5
+\l 85.5 75.5
+\l 85.5 60
+\l 60.5 60
+\l 60.5 25.5
+\l 120 25.5
+\l 120 110
+\l 10.5 110
+\l 10.5 10
+\l 0.25 10
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han39.pgf b/graphics/pgf/contrib/pgfornament-han/han/han39.pgf
new file mode 100644
index 0000000000..7385a07823
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han39.pgf
@@ -0,0 +1,46 @@
+% han39.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 92.5 0
+\l 92.5 85
+\l 32.5 85
+\l 32.5 50
+\l 57.5 50
+\l 57.5 35
+\l 17.5 35
+\l 17.5 100
+\l 182.5 100
+\l 182.5 35
+\l 142.5 35
+\l 142.5 50
+\l 167.5 50
+\l 167.5 85
+\l 107.5 85
+\l 107.5 0
+\l 200 0
+\l 200 10
+\l 117.5 10
+\l 117.5 75
+\l 157.5 75
+\l 157.5 60
+\l 132.5 60
+\l 132.5 25
+\l 192.5 25
+\l 192.5 110
+\l 7.5 110
+\l 7.5 25
+\l 67.5 25
+\l 67.5 60
+\l 42.5 60
+\l 42.5 75
+\l 82.5 75
+\l 82.5 10
+\l 0 10
+\l 0 0
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han4.pgf b/graphics/pgf/contrib/pgfornament-han/han/han4.pgf
new file mode 100644
index 0000000000..fff3f5a8f9
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han4.pgf
@@ -0,0 +1,156 @@
+% han4.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200.5
+\l 0 160
+\l 30 160
+\l 30 145.5
+\l 0 145.5
+\l 0 105
+\l 40.5 105
+\l 40.5 135
+\l 55 135
+\l 55 90.5
+\l 0 90.5
+\l 0 55
+\l 20 55
+\l 20 40.5
+\l 0 40.5
+\l 0 0.25
+\l 0.5 0.25
+\l 0.5 40
+\l 20.5 40
+\l 20.5 55.5
+\l 0.5 55.5
+\l 0.5 90
+\l 55.5 90
+\l 55.5 135.5
+\l 40 135.5
+\l 40 105.5
+\l 0.5 105.5
+\l 0.5 145
+\l 30.5 145
+\l 30.5 160.5
+\l 0.5 160.5
+\l 0.5 200
+\l 40 200
+\l 40 170
+\l 55.5 170
+\l 55.5 200
+\l 95 200
+\l 95 160.5
+\l 65 160.5
+\l 65 145
+\l 110.5 145
+\l 110.5 200
+\l 145 200
+\l 145 180
+\l 160.5 180
+\l 160.5 200
+\l 200.25 200
+\l 200.25 200.5
+\l 160 200.5
+\l 160 180.5
+\l 145.5 180.5
+\l 145.5 200.5
+\l 110 200.5
+\l 110 145.5
+\l 65.5 145.5
+\l 65.5 160
+\l 95.5 160
+\l 95.5 200.5
+\l 55 200.5
+\l 55 170.5
+\l 40.5 170.5
+\l 40.5 200.5
+\l 0 200.5
+
+\m 10 190.5
+\l 10 170.25
+\l 10 170
+\l 30.5 170
+\l 30.5 190.5
+\l 10 190.5
+
+\m 65 190.5
+\l 65 170.25
+\l 65 170
+\l 85.5 170
+\l 85.5 190.5
+\l 65 190.5
+
+\m 120 190.5
+\l 120 135.5
+\l 65 135.5
+\l 65 80.5
+\l 10 80.5
+\l 10 65
+\l 30 65
+\l 30 30.5
+\l 10 30.5
+\l 10 0.25
+\l 10.5 0.25
+\l 10.5 30
+\l 30.5 30
+\l 30.5 65.5
+\l 10.5 65.5
+\l 10.5 80
+\l 65.5 80
+\l 65.5 135
+\l 120.5 135
+\l 120.5 190
+\l 135 190
+\l 135 170
+\l 170.5 170
+\l 170.5 190
+\l 200.25 190
+\l 200.25 190.5
+\l 170 190.5
+\l 170 170.5
+\l 135.5 170.5
+\l 135.5 190.5
+\l 120 190.5
+
+\m 10.5 190
+\l 30 190
+\l 30 170.5
+\l 10.5 170.5
+\l 10.5 190
+
+\m 65.5 190
+\l 85 190
+\l 85 170.5
+\l 65.5 170.5
+\l 65.5 190
+
+\m 40 160.5
+\l 40 145.25
+\l 40 145
+\l 55.5 145
+\l 55.5 160.5
+\l 40 160.5
+
+\m 40.5 160
+\l 55 160
+\l 55 145.5
+\l 40.5 145.5
+\l 40.5 160
+
+\m 10 135.5
+\l 10 115.25
+\l 10 115
+\l 30.5 115
+\l 30.5 135.5
+\l 10 135.5
+
+\m 10.5 135
+\l 30 135
+\l 30 115.5
+\l 10.5 115.5
+\l 10.5 135
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han40.pgf b/graphics/pgf/contrib/pgfornament-han/han/han40.pgf
new file mode 100644
index 0000000000..8015104ded
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han40.pgf
@@ -0,0 +1,84 @@
+% han40.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0.25 0
+\l 0.25 0.5
+\l 92.5 0.5
+\l 92.5 85
+\l 33 85
+\l 33 50.5
+\l 58 50.5
+\l 58 35
+\l 17.5 35
+\l 17.5 100.5
+\l 183 100.5
+\l 183 35
+\l 142.5 35
+\l 142.5 50.5
+\l 167.5 50.5
+\l 167.5 85
+\l 108 85
+\l 108 0.5
+\l 200.25 0.5
+\l 200.25 0
+\l 107.5 0
+\l 107.5 85.5
+\l 168 85.5
+\l 168 50
+\l 143 50
+\l 143 35.5
+\l 182.5 35.5
+\l 182.5 100
+\l 18 100
+\l 18 35.5
+\l 57.5 35.5
+\l 57.5 50
+\l 32.5 50
+\l 32.5 85.5
+\l 93 85.5
+\l 93 0
+\l 0.25 0
+
+\m 0.25 10
+\l 0.25 10.5
+\l 82.5 10.5
+\l 82.5 75
+\l 43 75
+\l 43 60.5
+\l 68 60.5
+\l 68 25
+\l 7.5 25
+\l 7.5 110.5
+\l 193 110.5
+\l 193 25
+\l 132.5 25
+\l 132.5 60.5
+\l 157.5 60.5
+\l 157.5 75
+\l 118 75
+\l 118 10.5
+\l 200.25 10.5
+\l 200.25 10
+\l 117.5 10
+\l 117.5 75.5
+\l 158 75.5
+\l 158 60
+\l 133 60
+\l 133 25.5
+\l 192.5 25.5
+\l 192.5 110
+\l 8 110
+\l 8 25.5
+\l 67.5 25.5
+\l 67.5 60
+\l 42.5 60
+\l 42.5 75.5
+\l 83 75.5
+\l 83 10
+\l 0.25 10
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han41.pgf b/graphics/pgf/contrib/pgfornament-han/han/han41.pgf
new file mode 100644
index 0000000000..7cbc61e908
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han41.pgf
@@ -0,0 +1,30 @@
+% han41.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 25 25
+\l 40 25
+\l 40 10
+\l 10 10
+\l 10 50
+\l 105 50
+\l 105 10
+\l 75 10
+\l 75 25
+\l 90 25
+\l 90 35
+\l 65 35
+\l 65 0
+\l 115 0
+\l 115 60
+\l 0 60
+\l 0 0
+\l 50 0
+\l 50 35
+\l 25 35
+\l 25 25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han42.pgf b/graphics/pgf/contrib/pgfornament-han/han/han42.pgf
new file mode 100644
index 0000000000..5be98bcfcc
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han42.pgf
@@ -0,0 +1,53 @@
+% han42.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 0 60.5
+\l 115.5 60.5
+\l 115.5 0
+\l 65 0
+\l 65 35.5
+\l 90.5 35.5
+\l 90.5 25
+\l 75.5 25
+\l 75.5 10.5
+\l 105 10.5
+\l 105 50
+\l 10.5 50
+\l 10.5 10.5
+\l 40 10.5
+\l 40 25
+\l 25 25
+\l 25 25.25
+\l 25 35.5
+\l 50.5 35.5
+\l 50.5 0
+\l 0 0
+
+\m 0.5 0.5
+\l 50 0.5
+\l 50 35
+\l 25.5 35
+\l 25.5 25.5
+\l 40.5 25.5
+\l 40.5 10
+\l 10 10
+\l 10 50.5
+\l 105.5 50.5
+\l 105.5 10
+\l 75 10
+\l 75 25.5
+\l 90 25.5
+\l 90 35
+\l 65.5 35
+\l 65.5 0.5
+\l 115 0.5
+\l 115 60
+\l 0.5 60
+\l 0.5 0.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han43.pgf b/graphics/pgf/contrib/pgfornament-han/han/han43.pgf
new file mode 100644
index 0000000000..66a37399c1
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han43.pgf
@@ -0,0 +1,34 @@
+% han43.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 25 25
+\l 40 25
+\l 40 10
+\l 10 10
+\l 10 50
+\l 65 50
+\l 65 0
+\l 140 0
+\l 140 60
+\l 90 60
+\l 90 25
+\l 115 25
+\l 115 35
+\l 100 35
+\l 100 50
+\l 130 50
+\l 130 10
+\l 75 10
+\l 75 60
+\l 0 60
+\l 0 0
+\l 50 0
+\l 50 35
+\l 25 35
+\l 25 25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han44.pgf b/graphics/pgf/contrib/pgfornament-han/han/han44.pgf
new file mode 100644
index 0000000000..9aba5f4373
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han44.pgf
@@ -0,0 +1,61 @@
+% han44.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 0 60.5
+\l 75.5 60.5
+\l 75.5 10.5
+\l 130 10.5
+\l 130 50
+\l 100.5 50
+\l 100.5 35.5
+\l 115.5 35.5
+\l 115.5 25
+\l 90 25
+\l 90 60.5
+\l 140.5 60.5
+\l 140.5 0
+\l 65 0
+\l 65 50
+\l 10.5 50
+\l 10.5 10.5
+\l 40 10.5
+\l 40 25
+\l 25 25
+\l 25 25.25
+\l 25 35.5
+\l 50.5 35.5
+\l 50.5 0
+\l 0 0
+
+\m 0.5 0.5
+\l 50 0.5
+\l 50 35
+\l 25.5 35
+\l 25.5 25.5
+\l 40.5 25.5
+\l 40.5 10
+\l 10 10
+\l 10 50.5
+\l 65.5 50.5
+\l 65.5 0.5
+\l 140 0.5
+\l 140 60
+\l 90.5 60
+\l 90.5 25.5
+\l 115 25.5
+\l 115 35
+\l 100 35
+\l 100 50.5
+\l 130.5 50.5
+\l 130.5 10
+\l 75 10
+\l 75 60
+\l 0.5 60
+\l 0.5 0.5
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han45.pgf b/graphics/pgf/contrib/pgfornament-han/han/han45.pgf
new file mode 100644
index 0000000000..a59b241954
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han45.pgf
@@ -0,0 +1,38 @@
+% han45.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 25
+\l 7.5 25
+\l 7.5 0
+\l 57.5 0
+\l 57.5 35
+\l 32.5 35
+\l 32.5 25
+\l 47.5 25
+\l 47.5 10
+\l 17.5 10
+\l 17.5 50
+\l 112.5 50
+\l 112.5 10
+\l 82.5 10
+\l 82.5 25
+\l 97.5 25
+\l 97.5 35
+\l 72.5 35
+\l 72.5 0
+\l 122.5 0
+\l 122.5 25
+\l 130 25
+\l 130 35
+\l 122.5 35
+\l 122.5 60
+\l 7.5 60
+\l 7.5 35
+\l 0 35
+\l 0 25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han46.pgf b/graphics/pgf/contrib/pgfornament-han/han/han46.pgf
new file mode 100644
index 0000000000..f7a9fc0c0c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han46.pgf
@@ -0,0 +1,68 @@
+% han46.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 7.5 0
+\l 7.5 25
+\l 0.25 25
+\l 0.25 25.5
+\l 8 25.5
+\l 8 0.5
+\l 57.5 0.5
+\l 57.5 35
+\l 33 35
+\l 33 25.5
+\l 48 25.5
+\l 48 10
+\l 17.5 10
+\l 17.5 50.5
+\l 113 50.5
+\l 113 10
+\l 82.5 10
+\l 82.5 25.5
+\l 97.5 25.5
+\l 97.5 35
+\l 73 35
+\l 73 0.5
+\l 122.5 0.5
+\l 122.5 25.5
+\l 130.25 25.5
+\l 130.25 25
+\l 123 25
+\l 123 0
+\l 72.5 0
+\l 72.5 35.5
+\l 98 35.5
+\l 98 25
+\l 83 25
+\l 83 10.5
+\l 112.5 10.5
+\l 112.5 50
+\l 18 50
+\l 18 10.5
+\l 47.5 10.5
+\l 47.5 25
+\l 32.5 25
+\l 32.5 35.5
+\l 58 35.5
+\l 58 0
+\l 7.5 0
+
+\m 0.25 35
+\l 0.25 35.5
+\l 7.5 35.5
+\l 7.5 60.5
+\l 123 60.5
+\l 123 35.5
+\l 130.25 35.5
+\l 130.25 35
+\l 122.5 35
+\l 122.5 60
+\l 8 60
+\l 8 35
+\l 0.25 35
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han47.pgf b/graphics/pgf/contrib/pgfornament-han/han/han47.pgf
new file mode 100644
index 0000000000..f9ab44fa19
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han47.pgf
@@ -0,0 +1,42 @@
+% han47.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 25
+\l 7.5 25
+\l 7.5 0
+\l 57.5 0
+\l 57.5 35
+\l 32.5 35
+\l 32.5 25
+\l 47.5 25
+\l 47.5 10
+\l 17.5 10
+\l 17.5 50
+\l 72.5 50
+\l 72.5 0
+\l 147.5 0
+\l 147.5 25
+\l 155 25
+\l 155 35
+\l 147.5 35
+\l 147.5 60
+\l 97.5 60
+\l 97.5 25
+\l 122.5 25
+\l 122.5 35
+\l 107.5 35
+\l 107.5 50
+\l 137.5 50
+\l 137.5 10
+\l 82.5 10
+\l 82.5 60
+\l 7.5 60
+\l 7.5 35
+\l 0 35
+\l 0 25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han48.pgf b/graphics/pgf/contrib/pgfornament-han/han/han48.pgf
new file mode 100644
index 0000000000..fe6f5cd2c7
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han48.pgf
@@ -0,0 +1,76 @@
+% han48.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 7.5 0
+\l 7.5 25
+\l 0.25 25
+\l 0.25 25.5
+\l 8 25.5
+\l 8 0.5
+\l 57.5 0.5
+\l 57.5 35
+\l 33 35
+\l 33 25.5
+\l 48 25.5
+\l 48 10
+\l 17.5 10
+\l 17.5 50.5
+\l 73 50.5
+\l 73 0.5
+\l 147.5 0.5
+\l 147.5 25.5
+\l 155.25 25.5
+\l 155.25 25
+\l 148 25
+\l 148 0
+\l 72.5 0
+\l 72.5 50
+\l 18 50
+\l 18 10.5
+\l 47.5 10.5
+\l 47.5 25
+\l 32.5 25
+\l 32.5 35.5
+\l 58 35.5
+\l 58 0
+\l 7.5 0
+
+\m 82.5 10
+\l 82.5 60
+\l 8 60
+\l 8 35
+\l 0.25 35
+\l 0.25 35.5
+\l 7.5 35.5
+\l 7.5 60.5
+\l 83 60.5
+\l 83 10.5
+\l 137.5 10.5
+\l 137.5 50
+\l 108 50
+\l 108 35.5
+\l 123 35.5
+\l 123 25
+\l 97.5 25
+\l 97.5 60.5
+\l 148 60.5
+\l 148 35.5
+\l 155.25 35.5
+\l 155.25 35
+\l 147.5 35
+\l 147.5 60
+\l 98 60
+\l 98 25.5
+\l 122.5 25.5
+\l 122.5 35
+\l 107.5 35
+\l 107.5 50.5
+\l 138 50.5
+\l 138 10
+\l 82.5 10
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han49.pgf b/graphics/pgf/contrib/pgfornament-han/han/han49.pgf
new file mode 100644
index 0000000000..daa1c2a88b
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han49.pgf
@@ -0,0 +1,338 @@
+% han49.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 176.19 360.11
+\c 158.36 359.65 140.70 356.53 123.79 350.87
+\l 129.34 334.28
+\c 133.82 335.78 138.37 337.09 142.96 338.19
+\l 144.71 330.89
+\c 139.02 329.53 133.39 327.84 127.88 325.83
+\l 127.88 325.84
+\c 122.38 323.83 116.98 321.50 111.74 318.89
+\l 108.39 325.60
+\c 112.62 327.70 116.95 329.64 121.34 331.37
+\l 114.93 347.65
+\c 98.34 341.12 82.81 332.14 68.85 321.04
+\l 79.74 307.35
+\c 83.44 310.29 87.27 313.08 91.21 315.68
+\l 95.35 309.43
+\c 90.47 306.19 85.75 302.68 81.26 298.92
+\c 76.78 295.15 72.50 291.12 68.47 286.87
+\l 63.03 292.03
+\c 66.28 295.46 69.69 298.75 73.22 301.88
+\l 61.63 314.99
+\c 48.27 303.17 36.74 289.43 27.43 274.23
+\l 42.35 265.08
+\c 44.81 269.11 47.46 273.04 50.27 276.83
+\l 56.30 272.37
+\c 52.82 267.66 49.59 262.75 46.66 257.68
+\c 43.73 252.61 41.09 247.36 38.76 241.98
+\l 31.88 244.97
+\c 33.76 249.30 35.84 253.56 38.10 257.71
+\l 22.72 266.06
+\c 14.21 250.39 8.07 233.54 4.52 216.06
+\l 21.66 212.58
+\c 22.60 217.20 23.75 221.80 25.10 226.33
+\l 32.29 224.20
+\c 30.62 218.58 29.27 212.86 28.25 207.10
+\c 27.23 201.33 26.55 195.49 26.19 189.64
+\l 18.71 190.10
+\c 18.99 194.82 19.49 199.53 20.19 204.20
+\l 2.88 206.78
+\c 0.25 189.15 0.25 171.21 2.88 153.58
+\l 20.19 156.16
+\c 19.49 160.83 18.99 165.55 18.71 170.26
+\l 26.19 170.72
+\c 26.55 164.87 27.23 159.03 28.25 153.27
+\c 29.27 147.50 30.62 141.77 32.29 136.16
+\l 25.10 134.03
+\c 23.75 138.56 22.60 143.16 21.66 147.79
+\l 4.52 144.29
+\c 8.07 126.82 14.21 109.97 22.72 94.30
+\l 38.10 102.65
+\c 35.84 106.80 33.76 111.06 31.88 115.39
+\l 38.76 118.38
+\c 41.09 113.01 43.73 107.75 46.66 102.68
+\c 49.59 97.61 52.82 92.70 56.30 87.99
+\l 50.27 83.53
+\c 47.46 87.32 44.81 91.25 42.35 95.28
+\l 27.43 86.13
+\c 36.74 70.93 48.27 57.19 61.63 45.37
+\l 73.22 58.48
+\c 69.69 61.61 66.28 64.90 63.03 68.33
+\l 68.47 73.49
+\c 72.50 69.24 76.78 65.21 81.26 61.44
+\c 85.75 57.68 90.47 54.16 95.35 50.93
+\l 91.21 44.68
+\c 87.27 47.28 83.44 50.07 79.74 53.01
+\l 68.85 39.32
+\c 82.81 28.22 98.34 19.25 114.93 12.71
+\l 121.34 28.99
+\c 116.95 30.72 112.62 32.65 108.39 34.76
+\l 111.74 41.47
+\c 116.98 38.86 122.38 36.53 127.88 34.53
+\c 133.39 32.52 139.02 30.83 144.71 29.47
+\l 142.96 22.17
+\c 138.37 23.27 133.82 24.58 129.34 26.08
+\l 123.79 9.49
+\c 140.70 3.83 158.36 0.71 176.19 0.25
+\l 176.64 17.74
+\c 171.92 17.86 167.20 18.20 162.50 18.73
+\l 163.35 26.18
+\c 169.17 25.52 175.04 25.18 180.90 25.18
+\c 186.76 25.18 192.62 25.52 198.44 26.18
+\l 199.29 18.73
+\c 194.60 18.20 189.87 17.86 185.15 17.74
+\l 185.61 0.25
+\c 203.43 0.71 221.10 3.83 238.01 9.49
+\l 232.46 26.08
+\c 227.98 24.58 223.42 23.27 218.83 22.17
+\l 217.08 29.47
+\c 222.78 30.83 228.41 32.52 233.91 34.53
+\c 239.42 36.53 244.81 38.86 250.05 41.47
+\l 253.40 34.76
+\c 249.18 32.65 244.85 30.72 240.45 28.99
+\l 246.87 12.71
+\c 263.45 19.25 278.99 28.22 292.95 39.32
+\l 282.05 53.01
+\c 278.36 50.07 274.52 47.28 270.58 44.68
+\l 266.45 50.93
+\c 271.33 54.16 276.04 57.68 280.53 61.44
+\c 285.02 65.21 289.30 69.24 293.33 73.49
+\l 298.77 68.33
+\c 295.52 64.90 292.11 61.61 288.57 58.48
+\l 300.17 45.37
+\c 313.52 57.19 325.05 70.93 334.37 86.13
+\l 319.45 95.28
+\c 316.98 91.25 314.33 87.32 311.52 83.53
+\l 305.49 87.99
+\c 308.98 92.70 312.20 97.61 315.13 102.68
+\c 318.06 107.75 320.70 113.01 323.04 118.38
+\l 329.92 115.39
+\c 328.03 111.06 325.95 106.80 323.70 102.65
+\l 339.08 94.30
+\c 347.58 109.97 353.73 126.82 357.28 144.29
+\l 340.13 147.79
+\c 339.19 143.16 338.04 138.56 336.70 134.03
+\l 329.51 136.16
+\c 331.17 141.77 332.53 147.50 333.55 153.27
+\c 334.56 159.03 335.25 164.87 335.60 170.72
+\l 343.09 170.26
+\c 342.80 165.55 342.30 160.83 341.61 156.16
+\l 358.91 153.58
+\c 361.55 171.21 361.55 189.15 358.91 206.78
+\l 341.61 204.20
+\c 342.30 199.53 342.80 194.82 343.09 190.10
+\l 335.60 189.64
+\c 335.25 195.49 334.56 201.33 333.55 207.10
+\c 332.53 212.86 331.17 218.58 329.51 224.20
+\l 336.70 226.33
+\c 338.04 221.80 339.19 217.20 340.13 212.58
+\l 357.28 216.06
+\c 353.73 233.54 347.58 250.39 339.08 266.06
+\l 323.70 257.71
+\c 325.95 253.56 328.03 249.30 329.92 244.97
+\l 323.04 241.98
+\c 320.70 247.36 318.06 252.61 315.13 257.68
+\c 312.20 262.75 308.98 267.66 305.49 272.37
+\l 311.52 276.83
+\c 314.33 273.04 316.98 269.11 319.45 265.08
+\l 334.37 274.23
+\c 325.05 289.43 313.52 303.17 300.17 314.99
+\l 288.57 301.88
+\c 292.11 298.75 295.52 295.46 298.77 292.03
+\l 293.33 286.87
+\c 289.30 291.12 285.02 295.15 280.53 298.92
+\c 276.04 302.68 271.33 306.19 266.45 309.43
+\l 270.58 315.68
+\c 274.52 313.08 278.36 310.29 282.05 307.35
+\l 292.95 321.04
+\c 278.99 332.14 263.45 341.12 246.87 347.65
+\l 240.45 331.37
+\c 244.84 329.64 249.18 327.70 253.40 325.60
+\l 250.05 318.89
+\c 244.81 321.50 239.42 323.83 233.91 325.83
+\l 233.91 325.84
+\c 228.41 327.84 222.78 329.53 217.08 330.89
+\l 218.83 338.19
+\c 223.42 337.08 227.98 335.78 232.46 334.28
+\l 238.01 350.87
+\c 221.10 356.53 203.43 359.65 185.61 360.11
+\l 185.15 342.62
+\c 189.87 342.50 194.60 342.16 199.29 341.63
+\l 198.44 334.18
+\c 192.62 334.84 186.76 335.18 180.90 335.18
+\c 175.04 335.18 169.17 334.84 163.35 334.18
+\l 162.50 341.63
+\c 167.20 342.16 171.92 342.50 176.64 342.62
+\l 176.19 360.11
+
+\m 170.21 354.85
+\l 170.67 347.36
+\c 165.81 347.07 160.95 346.55 156.14 345.83
+\l 158.73 328.53
+\c 166.06 329.62 173.48 330.18 180.90 330.18
+\c 188.31 330.18 195.74 329.62 203.07 328.53
+\l 205.65 345.83
+\c 200.84 346.55 195.98 347.07 191.12 347.36
+\l 191.58 354.85
+\c 204.80 354.04 217.90 351.73 230.60 347.97
+\l 228.47 340.78
+\c 223.80 342.16 219.06 343.34 214.29 344.31
+\l 210.80 327.17
+\c 218.06 325.69 225.24 323.67 232.20 321.14
+\c 239.17 318.60 245.95 315.53 252.47 312.00
+\l 260.82 327.37
+\c 256.54 329.70 252.15 331.84 247.69 333.78
+\l 250.68 340.66
+\c 262.82 335.38 274.34 328.73 284.99 320.85
+\l 280.53 314.82
+\c 276.61 317.72 272.56 320.45 268.41 322.99
+\l 259.27 308.07
+\c 265.59 304.20 271.64 299.85 277.32 295.09
+\c 283.00 290.32 288.32 285.12 293.24 279.57
+\l 306.34 291.17
+\c 303.12 294.81 299.72 298.32 296.19 301.68
+\l 301.36 307.12
+\c 310.96 298.00 319.52 287.81 326.82 276.77
+\l 320.57 272.63
+\c 317.88 276.69 315.01 280.64 311.98 284.45
+\l 298.28 273.55
+\c 302.90 267.75 307.10 261.60 310.80 255.18
+\c 314.51 248.76 317.74 242.05 320.46 235.15
+\l 336.74 241.57
+\c 334.95 246.10 332.96 250.56 330.79 254.91
+\l 337.50 258.26
+\c 343.41 246.41 347.97 233.90 351.06 221.03
+\l 343.77 219.28
+\c 342.63 224.01 341.28 228.71 339.74 233.33
+\l 323.14 227.77
+\c 325.49 220.74 327.33 213.53 328.62 206.23
+\c 329.91 198.93 330.65 191.51 330.84 184.11
+\l 348.34 184.56
+\c 348.21 189.43 347.87 194.30 347.32 199.14
+\l 354.77 199.99
+\c 356.27 186.83 356.27 173.52 354.77 160.37
+\l 347.32 161.22
+\c 347.87 166.06 348.21 170.93 348.34 175.80
+\l 330.84 176.25
+\c 330.65 168.84 329.91 161.43 328.62 154.13
+\c 327.33 146.83 325.49 139.61 323.14 132.59
+\l 339.74 127.03
+\c 341.28 131.65 342.63 136.35 343.77 141.08
+\l 351.06 139.33
+\c 347.97 126.46 343.41 113.95 337.50 102.10
+\l 330.79 105.45
+\c 332.96 109.80 334.95 114.26 336.74 118.79
+\l 320.46 125.21
+\c 317.74 118.31 314.51 111.60 310.80 105.18
+\c 307.10 98.76 302.90 92.61 298.28 86.81
+\l 311.98 75.91
+\c 315.01 79.72 317.88 83.68 320.57 87.73
+\l 326.82 83.59
+\c 319.52 72.55 310.96 62.36 301.36 53.24
+\l 296.19 58.68
+\c 299.72 62.03 303.12 65.55 306.34 69.19
+\l 293.24 80.79
+\c 288.32 75.24 283.00 70.04 277.32 65.27
+\c 271.64 60.51 265.59 56.16 259.27 52.29
+\l 268.41 37.37
+\c 272.56 39.91 276.61 42.64 280.53 45.54
+\l 284.99 39.51
+\c 274.34 31.63 262.82 24.98 250.68 19.70
+\l 247.69 26.58
+\c 252.15 28.52 256.54 30.66 260.82 32.98
+\l 252.47 48.36
+\c 245.95 44.83 239.17 41.76 232.20 39.22
+\c 225.24 36.69 218.06 34.67 210.80 33.20
+\l 214.29 16.05
+\c 219.06 17.02 223.80 18.20 228.47 19.58
+\l 230.60 12.39
+\c 217.90 8.63 204.80 6.32 191.58 5.51
+\l 191.12 13.00
+\c 195.98 13.29 200.84 13.81 205.65 14.53
+\l 203.07 31.83
+\c 195.74 30.74 188.31 30.18 180.90 30.18
+\c 173.48 30.18 166.06 30.74 158.73 31.83
+\l 156.14 14.53
+\c 160.95 13.81 165.81 13.29 170.67 13.00
+\l 170.21 5.51
+\c 157.00 6.32 143.89 8.63 131.20 12.39
+\l 133.33 19.58
+\c 138.00 18.20 142.74 17.02 147.51 16.05
+\l 150.99 33.20
+\c 143.73 34.67 136.56 36.69 129.59 39.22
+\c 122.63 41.76 115.84 44.83 109.33 48.36
+\l 100.98 32.98
+\c 105.26 30.66 109.65 28.52 114.11 26.58
+\l 111.12 19.70
+\c 98.98 24.98 87.45 31.63 76.81 39.51
+\l 81.27 45.54
+\c 85.18 42.64 89.23 39.91 93.38 37.37
+\l 102.53 52.29
+\c 96.21 56.16 90.16 60.51 84.48 65.27
+\c 78.80 70.04 73.47 75.24 68.56 80.79
+\l 55.45 69.19
+\c 58.68 65.55 62.07 62.03 65.60 58.68
+\l 60.44 53.24
+\c 50.84 62.36 42.28 72.55 34.97 83.59
+\l 41.23 87.73
+\c 43.91 83.68 46.79 79.72 49.82 75.91
+\l 63.51 86.81
+\c 58.90 92.61 54.70 98.76 50.99 105.18
+\c 47.29 111.60 44.06 118.31 41.34 125.21
+\l 25.06 118.79
+\c 26.84 114.26 28.83 109.80 31.00 105.45
+\l 24.29 102.10
+\c 18.38 113.95 13.83 126.46 10.74 139.33
+\l 18.03 141.08
+\c 19.16 136.35 20.51 131.65 22.06 127.03
+\l 38.65 132.59
+\c 36.30 139.61 34.46 146.83 33.17 154.13
+\c 31.89 161.43 31.15 168.84 30.95 176.25
+\l 13.46 175.80
+\c 13.58 170.93 13.93 166.06 14.48 161.22
+\l 7.03 160.37
+\c 5.53 173.52 5.53 186.83 7.03 199.99
+\l 14.48 199.14
+\c 13.93 194.30 13.58 189.43 13.46 184.56
+\l 30.95 184.11
+\c 31.15 191.51 31.89 198.93 33.17 206.23
+\c 34.46 213.53 36.30 220.74 38.65 227.77
+\l 22.06 233.33
+\c 20.51 228.71 19.16 224.01 18.03 219.28
+\l 10.74 221.03
+\c 13.83 233.90 18.38 246.41 24.29 258.26
+\l 31.00 254.91
+\c 28.83 250.56 26.84 246.10 25.06 241.57
+\l 41.34 235.15
+\c 44.06 242.05 47.29 248.76 50.99 255.18
+\c 54.70 261.60 58.90 267.75 63.51 273.55
+\l 49.82 284.45
+\c 46.79 280.64 43.91 276.69 41.23 272.63
+\l 34.97 276.77
+\c 42.28 287.81 50.84 298.00 60.44 307.12
+\l 65.60 301.68
+\c 62.07 298.32 58.68 294.81 55.45 291.17
+\l 68.56 279.57
+\c 73.47 285.12 78.80 290.32 84.48 295.09
+\c 90.16 299.85 96.21 304.20 102.53 308.07
+\l 93.38 322.99
+\c 89.23 320.45 85.18 317.72 81.27 314.82
+\l 76.81 320.85
+\c 87.45 328.73 98.98 335.38 111.12 340.66
+\l 114.11 333.78
+\c 109.65 331.84 105.26 329.70 100.98 327.37
+\l 109.33 312.00
+\c 115.84 315.53 122.63 318.60 129.59 321.14
+\c 136.56 323.67 143.73 325.69 150.99 327.17
+\l 147.51 344.31
+\c 142.74 343.35 138.00 342.16 133.33 340.78
+\l 131.20 347.97
+\c 143.89 351.73 157.00 354.04 170.21 354.85
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han5.pgf b/graphics/pgf/contrib/pgfornament-han/han/han5.pgf
new file mode 100644
index 0000000000..4f4fc2cbf1
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han5.pgf
@@ -0,0 +1,56 @@
+% han5.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 150
+\l 20 150
+\l 20 120
+\l 0 120
+\l 0 70
+\l 30 70
+\l 30 80
+\l 10 80
+\l 10 110
+\l 50 110
+\l 50 50
+\l 0 50
+\l 0 0
+\l 10 0
+\l 10 40
+\l 60 40
+\l 60 120
+\l 30 120
+\l 30 150
+\l 50 150
+\l 50 170
+\l 80 170
+\l 80 140
+\l 160 140
+\l 160 190
+\l 200 190
+\l 200 200
+\l 150 200
+\l 150 150
+\l 90 150
+\l 90 190
+\l 120 190
+\l 120 170
+\l 130 170
+\l 130 200
+\l 80 200
+\l 80 180
+\l 50 180
+\l 50 200
+\l 0 200
+
+\m 10 190
+\l 40 190
+\l 40 160
+\l 10 160
+\l 10 190
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han50.pgf b/graphics/pgf/contrib/pgfornament-han/han/han50.pgf
new file mode 100644
index 0000000000..64beea3b08
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han50.pgf
@@ -0,0 +1,955 @@
+% han50.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 176.43 360.37
+\l 176.18 360.36
+\c 158.33 359.90 140.64 356.78 123.71 351.11
+\l 123.47 351.03
+\l 129.18 333.96
+\l 129.42 334.04
+\c 133.81 335.51 138.28 336.79 142.79 337.87
+\l 144.42 331.07
+\c 138.80 329.71 133.23 328.05 127.80 326.07
+\c 122.36 324.09 117.04 321.78 111.86 319.21
+\l 108.73 325.48
+\c 112.88 327.54 117.13 329.44 121.44 331.14
+\l 121.67 331.23
+\l 115.07 347.97
+\l 114.84 347.88
+\c 98.23 341.34 82.67 332.35 68.70 321.24
+\l 68.50 321.08
+\l 79.70 307.00
+\l 79.90 307.15
+\c 83.52 310.03 87.29 312.76 91.15 315.33
+\l 95.01 309.49
+\c 90.20 306.29 85.53 302.83 81.10 299.11
+\c 76.67 295.39 72.46 291.40 68.47 287.21
+\l 63.39 292.04
+\c 66.58 295.39 69.92 298.62 73.39 301.69
+\l 73.58 301.86
+\l 61.65 315.34
+\l 61.46 315.17
+\c 48.09 303.34 36.55 289.58 27.22 274.36
+\l 27.08 274.14
+\l 42.43 264.74
+\l 42.56 264.95
+\c 44.98 268.90 47.58 272.75 50.33 276.48
+\l 55.97 272.31
+\c 52.53 267.66 49.34 262.81 46.45 257.80
+\c 43.56 252.79 40.96 247.60 38.64 242.30
+\l 32.22 245.10
+\c 34.07 249.34 36.11 253.52 38.31 257.59
+\l 38.43 257.81
+\l 22.62 266.40
+\l 22.50 266.18
+\c 13.98 250.49 7.83 233.61 4.27 216.12
+\l 4.22 215.87
+\l 21.86 212.28
+\l 21.91 212.53
+\c 22.83 217.06 23.96 221.57 25.27 226.02
+\l 31.99 224.03
+\c 30.36 218.48 29.01 212.83 28.00 207.14
+\c 27.00 201.44 26.33 195.68 25.97 189.91
+\l 18.98 190.33
+\c 19.27 194.96 19.75 199.58 20.43 204.16
+\l 20.47 204.41
+\l 2.67 207.07
+\l 2.64 206.82
+\c -0.00 189.16 -0.00 171.20 2.64 153.54
+\l 2.67 153.29
+\l 20.47 155.95
+\l 20.43 156.20
+\c 19.75 160.78 19.27 165.41 18.98 170.03
+\l 25.97 170.45
+\c 26.33 164.68 27.00 158.92 28.00 153.22
+\c 29.01 147.53 30.36 141.88 31.99 136.33
+\l 25.27 134.34
+\c 23.96 138.79 22.83 143.30 21.91 147.83
+\l 21.86 148.08
+\l 4.22 144.49
+\l 4.27 144.24
+\c 7.83 126.75 13.98 109.87 22.50 94.18
+\l 22.62 93.96
+\l 38.43 102.54
+\l 38.31 102.77
+\c 36.11 106.84 34.07 111.02 32.22 115.26
+\l 38.64 118.06
+\c 40.96 112.76 43.56 107.56 46.45 102.55
+\c 49.34 97.55 52.53 92.70 55.97 88.05
+\l 50.33 83.88
+\c 47.58 87.61 44.98 91.46 42.56 95.41
+\l 42.43 95.62
+\l 27.08 86.21
+\l 27.22 86.00
+\c 36.55 70.78 48.09 57.02 61.46 45.19
+\l 61.65 45.02
+\l 73.58 58.50
+\l 73.39 58.67
+\c 69.92 61.74 66.58 64.97 63.39 68.32
+\l 68.47 73.15
+\c 72.46 68.96 76.67 64.97 81.10 61.25
+\c 85.53 57.53 90.20 54.07 95.01 50.87
+\l 91.15 45.03
+\c 87.29 47.60 83.52 50.32 79.90 53.21
+\l 79.70 53.36
+\l 68.50 39.28
+\l 68.70 39.12
+\c 82.67 28.01 98.23 19.02 114.84 12.48
+\l 115.07 12.39
+\l 121.67 29.13
+\l 121.44 29.22
+\c 117.13 30.92 112.88 32.82 108.73 34.88
+\l 111.86 41.15
+\c 117.04 38.58 122.36 36.27 127.80 34.29
+\c 133.23 32.31 138.80 30.65 144.42 29.29
+\l 142.79 22.48
+\c 138.28 23.57 133.81 24.85 129.42 26.32
+\l 129.18 26.40
+\l 123.47 9.33
+\l 123.71 9.25
+\c 140.64 3.58 158.33 0.46 176.18 -0.00
+\l 176.43 -0.01
+\l 176.90 17.98
+\l 176.65 17.99
+\c 172.02 18.11 167.38 18.44 162.78 18.96
+\l 163.57 25.92
+\c 169.32 25.27 175.11 24.93 180.90 24.93
+\c 186.68 24.93 192.48 25.27 198.22 25.92
+\l 199.02 18.96
+\c 194.41 18.44 189.77 18.11 185.14 17.99
+\l 184.89 17.98
+\l 185.37 -0.01
+\l 185.62 -0.00
+\c 203.47 0.46 221.16 3.58 238.09 9.25
+\l 238.33 9.33
+\l 232.62 26.40
+\l 232.38 26.32
+\c 227.99 24.85 223.51 23.57 219.01 22.48
+\l 217.38 29.29
+\c 223.00 30.65 228.56 32.31 234.00 34.29
+\c 239.43 36.27 244.76 38.58 249.94 41.15
+\l 253.06 34.88
+\c 248.91 32.82 244.67 30.92 240.36 29.22
+\l 240.13 29.13
+\l 246.72 12.39
+\l 246.96 12.48
+\c 263.57 19.02 279.12 28.01 293.10 39.12
+\l 293.29 39.28
+\l 282.09 53.36
+\l 281.90 53.21
+\c 278.27 50.32 274.51 47.60 270.65 45.03
+\l 266.78 50.87
+\c 271.60 54.07 276.26 57.53 280.69 61.25
+\c 285.12 64.97 289.34 68.96 293.33 73.15
+\l 298.41 68.32
+\c 295.21 64.97 291.87 61.74 288.40 58.67
+\l 288.22 58.50
+\l 300.15 45.02
+\l 300.33 45.19
+\c 313.70 57.02 325.25 70.78 334.58 86.00
+\l 334.71 86.21
+\l 319.37 95.62
+\l 319.23 95.41
+\c 316.81 91.46 314.21 87.61 311.46 83.88
+\l 305.83 88.05
+\c 309.26 92.70 312.46 97.55 315.35 102.55
+\c 318.24 107.56 320.84 112.76 323.15 118.06
+\l 329.58 115.26
+\c 327.72 111.02 325.69 106.84 323.48 102.77
+\l 323.36 102.54
+\l 339.18 93.96
+\l 339.29 94.18
+\c 347.81 109.87 353.96 126.75 357.52 144.24
+\l 357.57 144.49
+\l 339.94 148.08
+\l 339.89 147.83
+\c 338.96 143.30 337.83 138.79 336.52 134.34
+\l 329.81 136.33
+\c 331.44 141.88 332.79 147.53 333.79 153.22
+\c 334.80 158.92 335.46 164.68 335.82 170.45
+\l 342.81 170.03
+\c 342.53 165.41 342.04 160.78 341.36 156.20
+\l 341.32 155.95
+\l 359.12 153.29
+\l 359.16 153.54
+\c 361.80 171.20 361.80 189.16 359.16 206.82
+\l 359.12 207.07
+\l 341.32 204.41
+\l 341.36 204.16
+\c 342.04 199.58 342.53 194.96 342.81 190.33
+\l 335.82 189.91
+\c 335.46 195.68 334.80 201.44 333.79 207.14
+\c 332.79 212.83 331.44 218.48 329.81 224.03
+\l 336.52 226.02
+\c 337.83 221.57 338.96 217.06 339.89 212.53
+\l 339.94 212.28
+\l 357.57 215.87
+\l 357.52 216.12
+\c 353.96 233.61 347.81 250.49 339.29 266.18
+\l 339.18 266.40
+\l 323.36 257.81
+\l 323.48 257.59
+\c 325.69 253.52 327.72 249.34 329.58 245.10
+\l 323.15 242.30
+\c 320.84 247.60 318.24 252.79 315.35 257.80
+\c 312.46 262.81 309.26 267.66 305.83 272.31
+\l 311.46 276.48
+\c 314.21 272.75 316.81 268.90 319.23 264.95
+\l 319.37 264.74
+\l 334.71 274.14
+\l 334.58 274.36
+\c 325.25 289.58 313.70 303.34 300.33 315.17
+\l 300.15 315.34
+\l 288.22 301.86
+\l 288.40 301.69
+\c 291.87 298.62 295.21 295.39 298.41 292.04
+\l 293.33 287.21
+\c 289.34 291.40 285.12 295.39 280.69 299.11
+\c 276.26 302.83 271.60 306.29 266.78 309.49
+\l 270.65 315.33
+\c 274.51 312.76 278.27 310.03 281.90 307.15
+\l 282.09 307.00
+\l 293.29 321.08
+\l 293.10 321.24
+\c 279.12 332.35 263.57 341.34 246.96 347.88
+\l 246.72 347.97
+\l 240.13 331.23
+\l 240.36 331.14
+\c 244.67 329.44 248.91 327.54 253.06 325.48
+\l 249.94 319.21
+\c 244.76 321.78 239.43 324.09 234.00 326.07
+\c 228.56 328.05 223.00 329.71 217.38 331.07
+\l 219.01 337.87
+\c 223.51 336.79 227.99 335.51 232.38 334.04
+\l 232.62 333.96
+\l 238.33 351.03
+\l 238.09 351.11
+\c 221.16 356.78 203.47 359.90 185.62 360.36
+\l 185.37 360.37
+\l 184.89 342.38
+\l 185.14 342.37
+\c 189.77 342.25 194.41 341.92 199.02 341.40
+\l 198.22 334.44
+\c 192.48 335.08 186.68 335.43 180.90 335.43
+\c 175.11 335.43 169.32 335.08 163.57 334.44
+\l 162.78 341.40
+\c 167.38 341.92 172.02 342.25 176.65 342.37
+\l 176.90 342.38
+\l 176.43 360.37
+
+\m 175.95 359.85
+\l 176.39 342.85
+\c 171.74 342.72 167.09 342.40 162.48 341.88
+\l 162.23 341.85
+\l 163.13 333.90
+\l 163.38 333.93
+\c 169.19 334.59 175.05 334.93 180.90 334.93
+\c 186.75 334.93 192.60 334.59 198.41 333.93
+\l 198.66 333.90
+\l 199.57 341.85
+\l 199.32 341.88
+\c 194.70 342.40 190.05 342.72 185.41 342.85
+\l 185.85 359.85
+\c 203.48 359.37 220.95 356.28 237.69 350.71
+\l 232.30 334.58
+\c 227.89 336.05 223.41 337.35 218.89 338.43
+\l 218.65 338.49
+\l 216.78 330.71
+\l 217.02 330.65
+\c 222.71 329.29 228.33 327.60 233.83 325.60
+\c 239.32 323.60 244.71 321.28 249.94 318.67
+\l 250.17 318.55
+\l 253.73 325.71
+\l 253.51 325.82
+\c 249.35 327.89 245.09 329.79 240.77 331.50
+\l 247.00 347.32
+\c 263.41 340.83 278.77 331.96 292.59 321.00
+\l 282.01 307.69
+\c 278.37 310.58 274.60 313.33 270.72 315.89
+\l 270.51 316.03
+\l 266.10 309.36
+\l 266.31 309.22
+\c 271.18 305.99 275.89 302.49 280.37 298.73
+\c 284.85 294.97 289.12 290.94 293.15 286.70
+\l 293.32 286.52
+\l 299.12 292.03
+\l 298.95 292.21
+\c 295.75 295.58 292.39 298.81 288.92 301.89
+\l 300.18 314.63
+\c 313.38 302.92 324.78 289.33 334.02 274.30
+\l 319.52 265.42
+\c 317.09 269.38 314.49 273.25 311.72 276.98
+\l 311.57 277.18
+\l 305.15 272.43
+\l 305.29 272.23
+\c 308.77 267.52 311.99 262.62 314.92 257.55
+\c 317.84 252.49 320.48 247.25 322.81 241.88
+\l 322.91 241.65
+\l 330.24 244.85
+\l 330.14 245.07
+\c 328.29 249.33 326.24 253.52 324.03 257.61
+\l 338.97 265.72
+\c 347.36 250.21 353.44 233.54 356.98 216.26
+\l 340.31 212.87
+\c 339.38 217.42 338.26 221.94 336.94 226.40
+\l 336.87 226.64
+\l 329.20 224.37
+\l 329.27 224.13
+\c 330.93 218.52 332.29 212.81 333.30 207.05
+\c 334.32 201.29 335.00 195.47 335.36 189.63
+\l 335.37 189.38
+\l 343.35 189.87
+\l 343.34 190.12
+\c 343.06 194.76 342.56 199.39 341.88 203.99
+\l 358.70 206.50
+\c 361.28 189.05 361.28 171.31 358.70 153.86
+\l 341.88 156.37
+\c 342.56 160.97 343.06 165.61 343.34 170.24
+\l 343.35 170.49
+\l 335.37 170.98
+\l 335.36 170.73
+\c 335.00 164.89 334.32 159.07 333.30 153.31
+\c 332.29 147.55 330.93 141.84 329.27 136.23
+\l 329.20 135.99
+\l 336.87 133.72
+\l 336.94 133.96
+\c 338.26 138.41 339.38 142.94 340.31 147.49
+\l 356.98 144.10
+\c 353.44 126.82 347.36 110.15 338.97 94.64
+\l 324.03 102.75
+\c 326.24 106.84 328.29 111.03 330.14 115.29
+\l 330.24 115.51
+\l 322.91 118.70
+\l 322.81 118.48
+\c 320.48 113.11 317.84 107.87 314.92 102.80
+\c 311.99 97.74 308.77 92.84 305.29 88.13
+\l 305.15 87.93
+\l 311.57 83.18
+\l 311.72 83.38
+\c 314.49 87.11 317.09 90.98 319.52 94.94
+\l 334.02 86.06
+\c 324.78 71.03 313.38 57.44 300.18 45.73
+\l 288.92 58.47
+\c 292.39 61.55 295.75 64.78 298.95 68.15
+\l 299.12 68.33
+\l 293.32 73.84
+\l 293.15 73.66
+\c 289.12 69.42 284.85 65.39 280.37 61.63
+\c 275.89 57.87 271.18 54.37 266.31 51.14
+\l 266.10 51.00
+\l 270.51 44.33
+\l 270.72 44.47
+\c 274.60 47.03 278.37 49.78 282.01 52.67
+\l 292.59 39.37
+\c 278.77 28.40 263.41 19.53 247.00 13.04
+\l 240.77 28.86
+\c 245.09 30.57 249.36 32.47 253.51 34.54
+\l 253.73 34.65
+\l 250.17 41.81
+\l 249.94 41.69
+\c 244.71 39.08 239.32 36.76 233.83 34.76
+\c 228.33 32.76 222.71 31.07 217.02 29.71
+\l 216.78 29.65
+\l 218.65 21.87
+\l 218.89 21.93
+\c 223.41 23.01 227.89 24.31 232.30 25.78
+\l 237.69 9.65
+\c 220.95 4.08 203.48 0.99 185.85 0.51
+\l 185.41 17.51
+\c 190.05 17.64 194.70 17.96 199.32 18.48
+\l 199.57 18.51
+\l 198.66 26.46
+\l 198.41 26.43
+\c 192.60 25.77 186.75 25.43 180.90 25.43
+\c 175.05 25.43 169.19 25.77 163.38 26.43
+\l 163.13 26.46
+\l 162.23 18.51
+\l 162.48 18.48
+\c 167.09 17.96 171.74 17.64 176.39 17.51
+\l 175.95 0.51
+\c 158.31 0.99 140.84 4.08 124.10 9.65
+\l 129.50 25.78
+\c 133.91 24.31 138.39 23.01 142.91 21.93
+\l 143.15 21.87
+\l 145.02 29.65
+\l 144.78 29.71
+\c 139.09 31.07 133.46 32.76 127.97 34.76
+\c 122.47 36.76 117.08 39.08 111.85 41.69
+\l 111.63 41.81
+\l 108.06 34.65
+\l 108.28 34.54
+\c 112.44 32.47 116.70 30.57 121.03 28.86
+\l 114.79 13.04
+\c 98.39 19.53 83.03 28.40 69.21 39.37
+\l 79.79 52.67
+\c 83.43 49.78 87.20 47.03 91.07 44.47
+\l 91.28 44.33
+\l 95.70 51.00
+\l 95.49 51.14
+\c 90.61 54.37 85.91 57.87 81.43 61.63
+\c 76.95 65.39 72.67 69.42 68.65 73.66
+\l 68.48 73.84
+\l 62.68 68.33
+\l 62.85 68.15
+\c 66.05 64.78 69.41 61.55 72.88 58.47
+\l 61.61 45.73
+\c 48.42 57.44 37.02 71.03 27.78 86.06
+\l 42.28 94.94
+\c 44.71 90.98 47.31 87.11 50.07 83.38
+\l 50.22 83.18
+\l 56.65 87.93
+\l 56.50 88.13
+\c 53.03 92.84 49.80 97.74 46.88 102.80
+\c 43.95 107.87 41.32 113.11 38.99 118.48
+\l 38.89 118.70
+\l 31.55 115.51
+\l 31.65 115.29
+\c 33.50 111.03 35.56 106.84 37.77 102.75
+\l 22.83 94.64
+\c 14.43 110.15 8.36 126.82 4.82 144.10
+\l 21.48 147.49
+\c 22.41 142.94 23.54 138.41 24.86 133.96
+\l 24.93 133.72
+\l 32.60 135.99
+\l 32.53 136.23
+\c 30.87 141.84 29.51 147.55 28.50 153.31
+\c 27.48 159.07 26.80 164.89 26.44 170.73
+\l 26.43 170.98
+\l 18.44 170.49
+\l 18.46 170.24
+\c 18.74 165.61 19.24 160.97 19.92 156.37
+\l 3.10 153.86
+\c 0.52 171.31 0.52 189.05 3.10 206.50
+\l 19.92 203.99
+\c 19.24 199.39 18.74 194.75 18.46 190.12
+\l 18.44 189.87
+\l 26.43 189.38
+\l 26.44 189.63
+\c 26.80 195.47 27.48 201.29 28.50 207.05
+\l 28.49 207.05
+\c 29.51 212.81 30.87 218.52 32.53 224.13
+\l 32.60 224.37
+\l 24.93 226.64
+\l 24.86 226.40
+\c 23.54 221.94 22.41 217.42 21.48 212.87
+\l 4.82 216.26
+\c 8.36 233.54 14.43 250.21 22.83 265.72
+\l 37.77 257.61
+\c 35.56 253.52 33.50 249.33 31.65 245.07
+\l 31.55 244.85
+\l 38.89 241.65
+\l 38.99 241.88
+\c 41.32 247.25 43.95 252.49 46.88 257.55
+\c 49.80 262.62 53.03 267.52 56.50 272.23
+\l 56.65 272.43
+\l 50.22 277.18
+\l 50.07 276.98
+\c 47.31 273.25 44.71 269.38 42.28 265.42
+\l 27.78 274.30
+\c 37.02 289.33 48.42 302.92 61.61 314.63
+\l 72.88 301.89
+\c 69.41 298.81 66.05 295.58 62.85 292.21
+\l 62.68 292.03
+\l 68.48 286.52
+\l 68.65 286.70
+\c 72.67 290.94 76.95 294.97 81.43 298.73
+\c 85.91 302.49 90.61 305.99 95.49 309.22
+\l 95.70 309.36
+\l 91.28 316.03
+\l 91.07 315.89
+\c 87.20 313.33 83.43 310.58 79.79 307.69
+\l 69.21 321.00
+\c 83.03 331.96 98.39 340.83 114.79 347.32
+\l 121.02 331.50
+\c 116.70 329.79 112.44 327.89 108.28 325.82
+\l 108.06 325.71
+\l 111.63 318.55
+\l 111.85 318.67
+\c 117.08 321.28 122.47 323.60 127.97 325.60
+\c 133.46 327.60 139.09 329.29 144.78 330.65
+\l 145.02 330.71
+\l 143.15 338.49
+\l 142.91 338.43
+\c 138.39 337.35 133.91 336.05 129.50 334.58
+\l 124.10 350.71
+\c 140.84 356.28 158.31 359.37 175.95 359.85
+
+\m 170.45 355.11
+\l 170.20 355.10
+\c 156.96 354.29 143.84 351.97 131.13 348.20
+\l 130.89 348.13
+\l 133.16 340.46
+\l 133.40 340.54
+\c 137.98 341.89 142.63 343.05 147.31 344.01
+\l 150.70 327.35
+\c 143.51 325.88 136.41 323.88 129.51 321.37
+\c 122.61 318.86 115.89 315.82 109.43 312.33
+\l 101.32 327.27
+\c 105.53 329.54 109.83 331.65 114.21 333.55
+\l 114.44 333.65
+\l 111.25 340.99
+\l 111.02 340.89
+\c 98.86 335.60 87.32 328.94 76.66 321.05
+\l 76.46 320.90
+\l 81.22 314.47
+\l 81.42 314.62
+\c 85.26 317.47 89.24 320.14 93.31 322.64
+\l 102.19 308.15
+\c 95.94 304.30 89.94 300.00 84.32 295.28
+\c 78.69 290.56 73.42 285.41 68.54 279.92
+\l 55.81 291.18
+\c 58.98 294.75 62.31 298.21 65.77 301.50
+\l 65.95 301.67
+\l 60.45 307.47
+\l 60.27 307.30
+\c 50.65 298.17 42.08 287.96 34.77 276.90
+\l 34.63 276.70
+\l 41.29 272.28
+\l 41.44 272.49
+\c 44.07 276.47 46.90 280.35 49.87 284.09
+\l 63.17 273.51
+\c 58.61 267.76 54.45 261.66 50.78 255.30
+\c 47.10 248.95 43.91 242.30 41.21 235.47
+\l 25.39 241.70
+\c 27.15 246.15 29.09 250.53 31.22 254.80
+\l 31.34 255.03
+\l 24.18 258.59
+\l 24.07 258.37
+\c 18.15 246.51 13.59 233.98 10.49 221.09
+\l 10.44 220.85
+\l 18.21 218.98
+\l 18.27 219.22
+\c 19.39 223.87 20.72 228.48 22.23 233.01
+\l 38.35 227.61
+\c 36.03 220.65 34.20 213.50 32.93 206.27
+\c 31.66 199.04 30.92 191.70 30.72 184.36
+\l 13.72 184.80
+\c 13.85 189.58 14.19 194.36 14.73 199.11
+\l 14.75 199.36
+\l 6.81 200.26
+\l 6.78 200.02
+\c 5.28 186.84 5.28 173.52 6.78 160.34
+\l 6.81 160.10
+\l 14.75 161.00
+\l 14.73 161.25
+\c 14.19 166.00 13.85 170.78 13.72 175.56
+\l 30.72 176.00
+\c 30.92 168.66 31.66 161.32 32.93 154.09
+\l 32.93 154.09
+\c 34.20 146.86 36.03 139.71 38.35 132.75
+\l 22.22 127.35
+\c 20.72 131.89 19.38 136.49 18.27 141.14
+\l 18.21 141.38
+\l 10.44 139.51
+\l 10.49 139.27
+\c 13.59 126.38 18.15 113.85 24.07 101.99
+\l 24.18 101.77
+\l 31.34 105.33
+\l 31.23 105.56
+\c 29.10 109.83 27.15 114.21 25.39 118.66
+\l 41.21 124.89
+\c 43.91 118.06 47.10 111.41 50.78 105.05
+\c 54.45 98.70 58.61 92.60 63.17 86.85
+\l 49.87 76.27
+\c 46.90 80.01 44.07 83.89 41.44 87.87
+\l 41.29 88.08
+\l 34.63 83.66
+\l 34.77 83.46
+\c 42.08 72.40 50.65 62.19 60.27 53.06
+\l 60.45 52.89
+\l 65.95 58.69
+\l 65.77 58.86
+\c 62.31 62.15 58.98 65.61 55.81 69.18
+\l 68.54 80.44
+\c 73.42 74.95 78.69 69.80 84.32 65.08
+\c 89.94 60.36 95.94 56.06 102.19 52.21
+\l 93.31 37.72
+\c 89.24 40.22 85.26 42.89 81.42 45.74
+\l 81.22 45.88
+\l 76.46 39.45
+\l 76.66 39.31
+\c 87.32 31.42 98.86 24.76 111.02 19.47
+\l 111.25 19.37
+\l 114.44 26.70
+\l 114.21 26.81
+\c 109.83 28.71 105.53 30.82 101.32 33.09
+\l 109.43 48.03
+\c 115.89 44.54 122.61 41.50 129.51 38.99
+\c 136.41 36.48 143.51 34.48 150.70 33.01
+\l 147.31 16.35
+\c 142.63 17.31 137.98 18.47 133.40 19.82
+\l 133.16 19.89
+\l 130.89 12.23
+\l 131.13 12.15
+\c 143.84 8.39 156.96 6.07 170.20 5.26
+\l 170.45 5.25
+\l 170.93 13.23
+\l 170.69 13.25
+\c 165.92 13.54 161.15 14.05 156.43 14.75
+\l 158.94 31.56
+\c 166.20 30.49 173.55 29.93 180.90 29.93
+\c 188.24 29.93 195.59 30.49 202.86 31.56
+\l 205.37 14.75
+\c 200.64 14.05 195.88 13.54 191.11 13.25
+\l 190.86 13.23
+\l 191.35 5.25
+\l 191.60 5.26
+\c 204.83 6.07 217.96 8.39 230.67 12.15
+\l 230.91 12.23
+\l 228.63 19.89
+\l 228.40 19.82
+\c 223.82 18.47 219.16 17.31 214.48 16.35
+\l 211.10 33.01
+\c 218.29 34.48 225.39 36.48 232.29 38.99
+\c 239.19 41.50 245.91 44.54 252.36 48.03
+\l 260.47 33.09
+\c 256.27 30.82 251.97 28.71 247.59 26.81
+\l 247.36 26.70
+\l 250.55 19.37
+\l 250.78 19.47
+\c 262.93 24.76 274.48 31.42 285.14 39.31
+\l 285.34 39.45
+\l 280.58 45.88
+\l 280.38 45.74
+\c 276.54 42.89 272.56 40.22 268.49 37.72
+\l 259.61 52.21
+\c 265.86 56.06 271.85 60.36 277.48 65.08
+\c 283.10 69.80 288.38 74.95 293.25 80.44
+\l 305.98 69.18
+\c 302.81 65.61 299.49 62.15 296.02 58.86
+\l 295.84 58.69
+\l 301.35 52.89
+\l 301.53 53.06
+\c 311.14 62.19 319.71 72.40 327.03 83.46
+\l 327.17 83.66
+\l 320.50 88.08
+\l 320.36 87.87
+\c 317.72 83.89 314.90 80.01 311.93 76.27
+\l 298.63 86.85
+\c 303.19 92.60 307.35 98.70 311.02 105.05
+\c 314.69 111.41 317.89 118.06 320.59 124.89
+\l 336.40 118.66
+\c 334.65 114.21 332.70 109.83 330.57 105.56
+\l 330.46 105.33
+\l 337.62 101.77
+\l 337.73 101.99
+\c 343.64 113.85 348.21 126.38 351.30 139.27
+\l 351.36 139.51
+\l 343.58 141.38
+\l 343.53 141.14
+\c 342.41 136.49 341.08 131.89 339.57 127.35
+\l 323.45 132.75
+\c 325.77 139.71 327.59 146.86 328.87 154.09
+\c 330.14 161.32 330.87 168.66 331.08 176.00
+\l 348.07 175.56
+\c 347.94 170.78 347.61 166.00 347.07 161.25
+\l 347.04 161.00
+\l 354.99 160.10
+\l 355.02 160.34
+\c 356.52 173.52 356.52 186.84 355.02 200.02
+\l 354.99 200.26
+\l 347.04 199.36
+\l 347.07 199.11
+\c 347.61 194.36 347.94 189.58 348.07 184.80
+\l 331.08 184.36
+\c 330.87 191.70 330.14 199.04 328.87 206.27
+\l 328.87 206.27
+\c 327.59 213.50 325.77 220.65 323.45 227.61
+\l 339.57 233.01
+\c 341.08 228.48 342.41 223.87 343.52 219.22
+\l 343.58 218.98
+\l 351.36 220.85
+\l 351.30 221.09
+\c 348.21 233.98 343.64 246.51 337.73 258.37
+\l 337.62 258.59
+\l 330.46 255.03
+\l 330.57 254.80
+\c 332.70 250.53 334.64 246.15 336.40 241.70
+\l 320.59 235.47
+\c 317.89 242.30 314.69 248.95 311.02 255.30
+\c 307.35 261.66 303.19 267.76 298.63 273.51
+\l 311.93 284.09
+\c 314.90 280.35 317.72 276.47 320.36 272.49
+\l 320.50 272.28
+\l 327.17 276.70
+\l 327.03 276.90
+\c 319.71 287.96 311.14 298.17 301.53 307.30
+\l 301.35 307.47
+\l 295.84 301.67
+\l 296.02 301.50
+\c 299.49 298.21 302.81 294.75 305.98 291.18
+\l 293.25 279.92
+\c 288.38 285.41 283.10 290.56 277.48 295.28
+\c 271.85 300.00 265.86 304.30 259.61 308.15
+\l 268.49 322.64
+\c 272.56 320.14 276.54 317.47 280.38 314.62
+\l 280.58 314.47
+\l 285.34 320.90
+\l 285.14 321.05
+\c 274.48 328.94 262.93 335.60 250.78 340.89
+\l 250.55 340.99
+\l 247.36 333.65
+\l 247.59 333.55
+\c 251.97 331.65 256.27 329.54 260.47 327.27
+\l 252.36 312.33
+\c 245.91 315.82 239.19 318.86 232.29 321.37
+\c 225.39 323.88 218.29 325.88 211.10 327.35
+\l 214.48 344.01
+\c 219.16 343.05 223.82 341.89 228.40 340.54
+\l 228.64 340.46
+\l 230.91 348.13
+\l 230.67 348.20
+\c 217.96 351.97 204.83 354.29 191.60 355.10
+\l 191.35 355.11
+\l 190.86 347.13
+\l 191.11 347.11
+\c 195.88 346.82 200.64 346.31 205.37 345.62
+\l 202.86 328.80
+\c 195.59 329.87 188.24 330.43 180.90 330.43
+\c 173.55 330.43 166.20 329.87 158.94 328.80
+\l 156.43 345.62
+\c 161.15 346.31 165.92 346.82 170.69 347.11
+\l 170.94 347.13
+\l 170.45 355.11
+
+\m 169.98 354.57
+\l 170.41 347.58
+\c 165.63 347.28 160.84 346.79 156.11 346.08
+\l 155.86 346.04
+\l 158.52 328.24
+\l 158.76 328.28
+\c 166.08 329.37 173.50 329.93 180.90 329.93
+\c 188.30 329.93 195.71 329.37 203.03 328.28
+\l 203.28 328.24
+\l 205.94 346.04
+\l 205.69 346.08
+\c 200.95 346.79 196.17 347.28 191.39 347.58
+\l 191.81 354.57
+\c 204.84 353.76 217.76 351.47 230.29 347.79
+\l 228.30 341.08
+\c 223.70 342.43 219.04 343.60 214.34 344.56
+\l 214.10 344.61
+\l 210.51 326.97
+\l 210.75 326.92
+\c 218.00 325.45 225.16 323.43 232.12 320.90
+\c 239.07 318.37 245.84 315.31 252.35 311.78
+\l 252.57 311.66
+\l 261.15 327.47
+\l 260.94 327.59
+\c 256.73 329.88 252.40 331.98 248.01 333.90
+\l 250.80 340.32
+\c 262.76 335.10 274.13 328.54 284.63 320.79
+\l 280.47 315.16
+\c 276.61 318.01 272.63 320.70 268.54 323.20
+\l 268.33 323.33
+\l 258.93 307.99
+\l 259.14 307.86
+\c 265.45 303.99 271.49 299.65 277.16 294.90
+\c 282.83 290.14 288.15 284.95 293.05 279.41
+\l 293.21 279.22
+\l 306.69 291.14
+\l 306.53 291.33
+\c 303.35 294.92 300.01 298.38 296.54 301.68
+\l 301.35 306.75
+\c 310.81 297.75 319.25 287.70 326.47 276.83
+\l 320.63 272.96
+\c 317.98 276.96 315.16 280.85 312.17 284.60
+\l 312.02 284.80
+\l 297.93 273.59
+\l 298.09 273.40
+\c 302.69 267.61 306.89 261.46 310.59 255.05
+\c 314.29 248.65 317.51 241.95 320.22 235.06
+\l 320.31 234.83
+\l 337.06 241.43
+\l 336.97 241.66
+\c 335.21 246.12 333.25 250.51 331.12 254.80
+\l 337.38 257.92
+\c 343.19 246.23 347.68 233.90 350.75 221.21
+\l 343.94 219.58
+\c 342.82 224.23 341.49 228.86 339.97 233.40
+\l 339.89 233.64
+\l 322.83 227.93
+\l 322.91 227.70
+\c 325.25 220.68 327.09 213.47 328.38 206.18
+\c 329.66 198.90 330.40 191.49 330.59 184.10
+\l 330.60 183.85
+\l 348.59 184.32
+\l 348.59 184.57
+\c 348.46 189.36 348.11 194.16 347.58 198.92
+\l 354.54 199.71
+\c 355.99 186.74 355.99 173.62 354.54 160.65
+\l 347.58 161.44
+\c 348.11 166.20 348.46 171.00 348.59 175.79
+\l 348.59 176.04
+\l 330.60 176.51
+\l 330.59 176.26
+\c 330.40 168.86 329.66 161.46 328.38 154.18
+\c 327.09 146.89 325.25 139.68 322.91 132.67
+\l 322.83 132.43
+\l 339.89 126.72
+\l 339.97 126.95
+\c 341.49 131.50 342.82 136.12 343.94 140.78
+\l 350.75 139.15
+\c 347.68 126.46 343.19 114.13 337.38 102.44
+\l 331.12 105.56
+\c 333.25 109.85 335.21 114.24 336.97 118.70
+\l 337.06 118.93
+\l 320.31 125.53
+\l 320.22 125.30
+\c 317.51 118.41 314.29 111.71 310.59 105.30
+\c 306.89 98.90 302.69 92.75 298.09 86.96
+\l 297.93 86.77
+\l 312.02 75.56
+\l 312.17 75.76
+\c 315.16 79.51 317.98 83.40 320.63 87.39
+\l 326.47 83.53
+\c 319.25 72.65 310.81 62.61 301.35 53.61
+\l 296.54 58.68
+\c 300.01 61.99 303.35 65.44 306.53 69.03
+\l 306.69 69.21
+\l 293.21 81.14
+\l 293.05 80.95
+\c 288.15 75.41 282.83 70.22 277.16 65.46
+\c 271.49 60.71 265.45 56.37 259.14 52.50
+\l 258.93 52.37
+\l 268.33 37.03
+\l 268.54 37.15
+\c 272.63 39.66 276.61 42.35 280.47 45.20
+\l 284.63 39.57
+\c 274.13 31.82 262.76 25.26 250.80 20.04
+\l 248.01 26.46
+\c 252.40 28.38 256.73 30.48 260.94 32.77
+\l 261.15 32.88
+\l 252.57 48.70
+\l 252.35 48.58
+\c 245.84 45.05 239.07 41.99 232.12 39.46
+\c 225.16 36.93 218.00 34.91 210.75 33.44
+\l 210.51 33.39
+\l 214.10 15.75
+\l 214.34 15.80
+\c 219.04 16.76 223.70 17.93 228.30 19.28
+\l 230.28 12.57
+\c 217.76 8.88 204.84 6.60 191.81 5.79
+\l 191.39 12.78
+\c 196.17 13.07 200.95 13.57 205.69 14.28
+\l 205.94 14.32
+\l 203.28 32.12
+\l 203.03 32.08
+\c 195.71 30.99 188.30 30.43 180.90 30.43
+\c 173.50 30.43 166.08 30.99 158.76 32.08
+\l 158.52 32.12
+\l 155.86 14.32
+\l 156.11 14.28
+\c 160.84 13.57 165.63 13.07 170.41 12.78
+\l 169.98 5.79
+\c 156.95 6.60 144.03 8.88 131.51 12.57
+\l 133.50 19.28
+\c 138.09 17.93 142.76 16.76 147.46 15.80
+\l 147.70 15.75
+\l 151.29 33.39
+\l 151.04 33.44
+\c 143.79 34.91 136.63 36.93 129.68 39.46
+\c 122.73 41.99 115.95 45.05 109.45 48.58
+\l 109.23 48.70
+\l 100.64 32.88
+\l 100.86 32.77
+\c 105.07 30.48 109.39 28.38 113.79 26.46
+\l 111.00 20.04
+\c 99.03 25.26 87.67 31.82 77.16 39.57
+\l 81.33 45.20
+\c 85.19 42.35 89.17 39.66 93.25 37.15
+\l 93.46 37.03
+\l 102.87 52.37
+\l 102.66 52.50
+\c 96.35 56.37 90.31 60.71 84.64 65.46
+\c 78.97 70.22 73.65 75.41 68.74 80.95
+\l 68.58 81.14
+\l 55.10 69.21
+\l 55.27 69.03
+\c 58.44 65.44 61.79 61.99 65.26 58.68
+\l 60.44 53.61
+\c 50.99 62.61 42.55 72.65 35.33 83.53
+\l 41.17 87.39
+\c 43.82 83.40 46.64 79.51 49.62 75.76
+\l 49.78 75.56
+\l 63.86 86.77
+\l 63.71 86.96
+\c 59.10 92.75 54.91 98.90 51.21 105.30
+\c 47.51 111.71 44.28 118.41 41.57 125.30
+\l 41.48 125.53
+\l 24.74 118.93
+\l 24.83 118.70
+\c 26.58 114.24 28.55 109.85 30.68 105.56
+\l 24.42 102.44
+\c 18.61 114.13 14.11 126.46 11.05 139.15
+\l 17.86 140.78
+\c 18.98 136.12 20.30 131.50 21.82 126.95
+\l 21.90 126.72
+\l 38.97 132.43
+\l 38.89 132.67
+\c 36.54 139.68 34.70 146.89 33.42 154.18
+\c 32.14 161.46 31.40 168.86 31.20 176.26
+\l 31.20 176.51
+\l 13.21 176.04
+\l 13.21 175.79
+\c 13.33 171.00 13.68 166.20 14.21 161.44
+\l 7.26 160.65
+\c 5.80 173.62 5.80 186.74 7.26 199.71
+\l 14.21 198.92
+\c 13.68 194.16 13.33 189.36 13.21 184.57
+\l 13.21 184.32
+\l 31.20 183.85
+\l 31.20 184.10
+\c 31.40 191.49 32.14 198.90 33.42 206.18
+\c 34.70 213.47 36.54 220.68 38.89 227.70
+\l 38.97 227.93
+\l 21.90 233.64
+\l 21.82 233.40
+\c 20.30 228.86 18.98 224.23 17.86 219.58
+\l 11.05 221.21
+\c 14.11 233.90 18.61 246.23 24.42 257.92
+\l 30.68 254.80
+\c 28.55 250.51 26.58 246.12 24.83 241.66
+\l 24.74 241.43
+\l 41.48 234.83
+\l 41.57 235.06
+\c 44.28 241.95 47.51 248.65 51.21 255.05
+\c 54.91 261.46 59.10 267.61 63.71 273.40
+\l 63.86 273.59
+\l 49.78 284.80
+\l 49.62 284.60
+\c 46.64 280.85 43.82 276.96 41.17 272.96
+\l 35.33 276.83
+\c 42.55 287.70 50.99 297.75 60.44 306.75
+\l 65.26 301.68
+\c 61.79 298.38 58.44 294.92 55.27 291.33
+\l 55.10 291.14
+\l 68.58 279.22
+\l 68.74 279.41
+\c 73.65 284.95 78.97 290.14 84.64 294.90
+\c 90.31 299.65 96.35 303.99 102.66 307.86
+\l 102.87 307.99
+\l 93.46 323.33
+\l 93.25 323.20
+\c 89.17 320.70 85.19 318.01 81.33 315.16
+\l 77.16 320.79
+\c 87.67 328.54 99.03 335.10 111.00 340.32
+\l 113.79 333.90
+\c 109.39 331.98 105.07 329.88 100.86 327.59
+\l 100.64 327.47
+\l 109.23 311.66
+\l 109.45 311.78
+\c 115.95 315.31 122.73 318.37 129.68 320.90
+\c 136.63 323.43 143.79 325.45 151.04 326.92
+\l 151.29 326.97
+\l 147.70 344.61
+\l 147.46 344.56
+\c 142.76 343.60 138.09 342.43 133.50 341.08
+\l 131.51 347.79
+\c 144.04 351.47 156.95 353.76 169.98 354.57
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han51.pgf b/graphics/pgf/contrib/pgfornament-han/han/han51.pgf
new file mode 100644
index 0000000000..364d174e6f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han51.pgf
@@ -0,0 +1,273 @@
+% han51.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 181.54 361.53
+\c 167.95 361.53 154.36 360.00 141.04 356.92
+\l 147.79 327.69
+\c 157.15 329.85 166.71 331.11 176.30 331.45
+\l 175.69 348.94
+\c 170.83 348.77 165.95 348.38 161.12 347.79
+\l 161.73 342.83
+\c 164.54 343.17 167.37 343.44 170.20 343.64
+\l 170.72 336.16
+\c 164.43 335.72 158.15 334.89 151.96 333.69
+\l 148.14 353.32
+\c 170.19 357.61 192.88 357.61 214.93 353.32
+\l 211.11 333.69
+\c 204.92 334.89 198.64 335.72 192.35 336.16
+\l 192.87 343.64
+\c 195.70 343.44 198.53 343.17 201.34 342.83
+\l 201.95 347.79
+\c 197.12 348.38 192.24 348.77 187.38 348.94
+\l 186.77 331.45
+\c 196.36 331.11 205.93 329.85 215.28 327.69
+\l 222.03 356.92
+\c 208.71 360.00 195.12 361.53 181.54 361.53
+
+\m 128.91 353.67
+\c 102.76 345.68 78.76 331.82 58.77 313.18
+\l 79.23 291.24
+\c 86.25 297.79 93.91 303.66 102.04 308.74
+\l 92.77 323.59
+\c 88.64 321.01 84.62 318.24 80.73 315.31
+\l 83.74 311.32
+\c 86.00 313.02 88.32 314.67 90.67 316.26
+\l 94.86 310.04
+\c 89.63 306.51 84.60 302.65 79.84 298.52
+\l 66.72 313.61
+\c 83.67 328.35 103.32 339.69 124.56 347.00
+\l 131.07 328.09
+\c 125.11 326.04 119.26 323.61 113.59 320.85
+\l 110.30 327.59
+\c 112.85 328.83 115.43 330.01 118.04 331.12
+\l 116.09 335.72
+\c 111.61 333.82 107.20 331.72 102.90 329.43
+\l 111.11 313.98
+\c 119.59 318.48 128.50 322.18 137.68 324.98
+\l 128.91 353.67
+
+\m 234.16 353.67
+\l 225.39 324.98
+\c 234.57 322.18 243.48 318.48 251.96 313.98
+\l 260.17 329.43
+\c 255.87 331.72 251.46 333.82 246.98 335.72
+\l 245.03 331.12
+\c 247.64 330.01 250.22 328.83 252.77 327.59
+\l 249.48 320.85
+\c 243.81 323.61 237.96 326.04 232 328.09
+\l 238.51 347.00
+\c 259.75 339.69 279.40 328.35 296.35 313.61
+\l 283.23 298.52
+\c 278.47 302.65 273.44 306.51 268.21 310.04
+\l 272.40 316.26
+\c 274.75 314.67 277.07 313.02 279.33 311.32
+\l 282.34 315.31
+\c 278.45 318.24 274.43 321.01 270.30 323.59
+\l 261.02 308.74
+\c 269.16 303.66 276.82 297.79 283.84 291.24
+\l 304.30 313.18
+\c 284.30 331.82 260.30 345.68 234.16 353.67
+
+\m 49.89 304.30
+\c 31.25 284.31 17.39 260.31 9.40 234.16
+\l 38.09 225.39
+\c 40.89 234.57 44.59 243.48 49.09 251.96
+\l 33.64 260.17
+\c 31.35 255.87 29.25 251.46 27.35 246.98
+\l 31.95 245.03
+\c 33.06 247.64 34.24 250.22 35.48 252.77
+\l 42.22 249.48
+\c 39.46 243.81 37.03 237.96 34.98 232.00
+\l 16.07 238.51
+\c 23.38 259.75 34.72 279.40 49.46 296.35
+\l 64.55 283.23
+\c 60.42 278.47 56.56 273.44 53.03 268.21
+\l 46.81 272.40
+\c 48.40 274.75 50.05 277.07 51.75 279.33
+\l 47.76 282.34
+\c 44.83 278.45 42.06 274.43 39.48 270.30
+\l 54.33 261.03
+\c 59.41 269.16 65.28 276.82 71.83 283.84
+\l 49.89 304.30
+
+\m 313.18 304.30
+\l 291.24 283.84
+\c 297.79 276.82 303.66 269.16 308.74 261.03
+\l 323.59 270.30
+\c 321.01 274.43 318.24 278.45 315.31 282.34
+\l 311.32 279.33
+\c 313.02 277.07 314.67 274.75 316.26 272.40
+\l 310.04 268.21
+\c 306.51 273.44 302.65 278.47 298.52 283.23
+\l 313.61 296.35
+\c 328.35 279.40 339.69 259.75 347.00 238.51
+\l 328.09 232.00
+\c 326.04 237.96 323.61 243.81 320.85 249.48
+\l 327.59 252.77
+\c 328.83 250.22 330.01 247.64 331.12 245.03
+\l 335.72 246.98
+\c 333.82 251.46 331.72 255.87 329.43 260.17
+\l 313.98 251.96
+\c 318.48 243.48 322.18 234.57 324.98 225.39
+\l 353.67 234.16
+\c 345.68 260.31 331.82 284.31 313.18 304.30
+
+\m 6.15 222.03
+\c -0.00 195.39 -0.00 167.68 6.15 141.04
+\l 35.38 147.79
+\c 33.22 157.14 31.96 166.71 31.63 176.30
+\l 14.13 175.69
+\c 14.30 170.83 14.69 165.95 15.28 161.12
+\l 20.24 161.73
+\c 19.90 164.54 19.63 167.37 19.43 170.20
+\l 26.91 170.72
+\c 27.35 164.43 28.18 158.15 29.38 151.96
+\l 9.75 148.14
+\c 5.46 170.19 5.46 192.88 9.75 214.93
+\l 29.38 211.11
+\c 28.18 204.92 27.35 198.64 26.91 192.35
+\l 19.43 192.87
+\c 19.63 195.70 19.90 198.53 20.24 201.34
+\l 15.28 201.95
+\c 14.69 197.12 14.30 192.24 14.13 187.38
+\l 31.63 186.77
+\c 31.96 196.36 33.22 205.92 35.38 215.28
+\l 6.15 222.03
+
+\m 356.92 222.03
+\l 327.69 215.28
+\c 329.85 205.92 331.11 196.36 331.45 186.77
+\l 348.94 187.38
+\c 348.77 192.24 348.38 197.12 347.79 201.95
+\l 342.83 201.34
+\c 343.17 198.53 343.44 195.70 343.64 192.87
+\l 336.16 192.35
+\c 335.72 198.64 334.89 204.92 333.69 211.11
+\l 353.32 214.93
+\c 357.61 192.88 357.61 170.19 353.32 148.14
+\l 333.69 151.96
+\c 334.89 158.15 335.72 164.43 336.16 170.72
+\l 343.64 170.20
+\c 343.44 167.37 343.17 164.54 342.83 161.73
+\l 347.79 161.12
+\c 348.38 165.95 348.77 170.83 348.94 175.69
+\l 331.45 176.30
+\c 331.11 166.71 329.85 157.14 327.69 147.79
+\l 356.92 141.04
+\c 363.07 167.68 363.07 195.39 356.92 222.03
+
+\m 38.09 137.68
+\l 9.40 128.91
+\c 17.39 102.77 31.25 78.77 49.89 58.77
+\l 71.83 79.23
+\c 65.28 86.25 59.41 93.91 54.33 102.05
+\l 39.48 92.77
+\c 42.06 88.64 44.83 84.62 47.76 80.73
+\l 51.75 83.74
+\c 50.05 86.00 48.40 88.32 46.81 90.67
+\l 53.03 94.86
+\c 56.56 89.63 60.42 84.60 64.55 79.84
+\l 49.46 66.72
+\c 34.72 83.67 23.38 103.32 16.07 124.56
+\l 34.98 131.07
+\c 37.03 125.11 39.46 119.26 42.22 113.59
+\l 35.48 110.30
+\c 34.24 112.85 33.06 115.43 31.95 118.04
+\l 27.35 116.09
+\c 29.25 111.61 31.35 107.20 33.64 102.90
+\l 49.09 111.11
+\c 44.59 119.59 40.89 128.50 38.09 137.68
+
+\m 324.98 137.68
+\c 322.18 128.50 318.48 119.59 313.98 111.11
+\l 329.43 102.90
+\c 331.72 107.20 333.82 111.61 335.72 116.09
+\l 331.12 118.04
+\c 330.01 115.43 328.83 112.85 327.59 110.30
+\l 320.85 113.59
+\c 323.61 119.26 326.04 125.11 328.09 131.07
+\l 347.00 124.56
+\c 339.69 103.32 328.35 83.67 313.61 66.72
+\l 298.52 79.84
+\c 302.65 84.60 306.51 89.63 310.04 94.86
+\l 316.26 90.67
+\c 314.67 88.32 313.02 86.00 311.32 83.74
+\l 315.31 80.73
+\c 318.24 84.62 321.01 88.64 323.59 92.77
+\l 308.74 102.05
+\c 303.66 93.91 297.79 86.25 291.24 79.23
+\l 313.18 58.77
+\c 331.82 78.77 345.68 102.77 353.67 128.91
+\l 324.98 137.68
+
+\m 79.23 71.83
+\l 58.77 49.89
+\c 78.76 31.25 102.76 17.39 128.91 9.40
+\l 137.68 38.09
+\c 128.50 40.89 119.59 44.59 111.11 49.09
+\l 102.90 33.64
+\c 107.20 31.35 111.61 29.25 116.09 27.35
+\l 118.04 31.95
+\c 115.43 33.06 112.85 34.24 110.30 35.48
+\l 113.59 42.22
+\c 119.26 39.46 125.11 37.03 131.07 34.98
+\l 124.56 16.07
+\c 103.32 23.38 83.67 34.72 66.72 49.46
+\l 79.84 64.55
+\c 84.60 60.42 89.63 56.56 94.86 53.03
+\l 90.67 46.81
+\c 88.32 48.40 86.00 50.05 83.74 51.75
+\l 80.73 47.76
+\c 84.62 44.83 88.64 42.06 92.77 39.48
+\l 102.04 54.33
+\c 93.91 59.41 86.25 65.28 79.23 71.83
+
+\m 283.84 71.83
+\c 276.82 65.28 269.16 59.41 261.02 54.33
+\l 270.30 39.48
+\c 274.43 42.06 278.45 44.83 282.34 47.76
+\l 279.33 51.75
+\c 277.07 50.05 274.75 48.40 272.40 46.81
+\l 268.21 53.03
+\c 273.44 56.56 278.47 60.42 283.23 64.55
+\l 296.35 49.46
+\c 279.40 34.72 259.75 23.38 238.51 16.07
+\l 232 34.98
+\c 237.96 37.03 243.81 39.46 249.48 42.22
+\l 252.77 35.48
+\c 250.22 34.24 247.64 33.06 245.03 31.95
+\l 246.98 27.35
+\c 251.46 29.25 255.87 31.35 260.17 33.64
+\l 251.96 49.09
+\c 243.48 44.59 234.57 40.89 225.39 38.09
+\l 234.16 9.40
+\c 260.30 17.39 284.30 31.25 304.30 49.89
+\l 283.84 71.83
+
+\m 147.79 35.38
+\l 141.04 6.15
+\c 167.68 -0.00 195.39 -0.00 222.03 6.15
+\l 215.28 35.38
+\c 205.93 33.22 196.36 31.96 186.77 31.62
+\l 187.38 14.13
+\c 192.24 14.30 197.12 14.69 201.95 15.28
+\l 201.34 20.24
+\c 198.53 19.90 195.70 19.63 192.87 19.43
+\l 192.35 26.91
+\c 198.64 27.35 204.92 28.18 211.11 29.38
+\l 214.93 9.75
+\c 192.88 5.46 170.19 5.46 148.14 9.75
+\l 151.96 29.38
+\c 158.15 28.18 164.43 27.35 170.72 26.91
+\l 170.20 19.43
+\c 167.37 19.63 164.54 19.90 161.73 20.24
+\l 161.12 15.28
+\c 165.95 14.69 170.83 14.30 175.69 14.13
+\l 176.30 31.62
+\c 166.71 31.96 157.15 33.22 147.79 35.38
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han52.pgf b/graphics/pgf/contrib/pgfornament-han/han/han52.pgf
new file mode 100644
index 0000000000..9743b565a5
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han52.pgf
@@ -0,0 +1,780 @@
+% han52.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 181.78 362.03
+\c 168.18 362.03 154.57 360.49 141.24 357.41
+\l 141.00 357.36
+\l 147.86 327.64
+\l 148.10 327.70
+\c 157.43 329.85 166.98 331.11 176.56 331.45
+\l 176.81 331.46
+\l 176.18 349.44
+\l 175.93 349.43
+\c 171.06 349.27 166.18 348.88 161.34 348.29
+\l 161.09 348.26
+\l 161.76 342.80
+\l 162.01 342.83
+\c 164.74 343.16 167.48 343.42 170.22 343.62
+\l 170.71 336.63
+\c 164.57 336.19 158.45 335.38 152.41 334.22
+\l 148.69 353.36
+\c 170.54 357.58 193.03 357.58 214.88 353.36
+\l 211.16 334.22
+\c 205.12 335.38 199.00 336.19 192.86 336.63
+\l 193.35 343.62
+\c 196.09 343.42 198.83 343.16 201.56 342.83
+\l 201.81 342.80
+\l 202.47 348.26
+\l 202.23 348.29
+\c 197.39 348.88 192.51 349.27 187.64 349.43
+\l 187.39 349.44
+\l 186.76 331.46
+\l 187.01 331.45
+\c 196.59 331.11 206.13 329.85 215.47 327.70
+\l 215.71 327.64
+\l 222.57 357.36
+\l 222.33 357.41
+\c 208.99 360.49 195.39 362.03 181.78 362.03
+
+\m 181.78 361.52
+\c 195.27 361.52 208.75 360.01 221.97 356.97
+\l 215.34 328.23
+\c 206.13 330.34 196.72 331.58 187.28 331.92
+\l 187.87 348.92
+\c 192.56 348.75 197.26 348.38 201.92 347.81
+\l 201.37 343.35
+\c 198.64 343.68 195.89 343.95 193.14 344.14
+\l 192.89 344.15
+\l 192.33 336.18
+\l 192.58 336.16
+\c 198.86 335.72 205.13 334.89 211.31 333.69
+\l 211.56 333.65
+\l 215.47 353.77
+\l 215.22 353.82
+\c 193.15 358.11 170.42 358.11 148.34 353.82
+\l 148.10 353.77
+\l 152.01 333.65
+\l 152.26 333.69
+\c 158.44 334.89 164.71 335.72 170.99 336.16
+\l 171.24 336.18
+\l 170.68 344.15
+\l 170.43 344.14
+\c 167.68 343.95 164.93 343.68 162.20 343.35
+\l 161.65 347.81
+\c 166.31 348.38 171.01 348.75 175.70 348.92
+\l 176.29 331.92
+\c 166.85 331.58 157.44 330.34 148.23 328.23
+\l 141.59 356.97
+\c 154.82 360.01 168.30 361.52 181.78 361.52
+
+\m 129.32 354.23
+\l 129.08 354.16
+\c 102.91 346.15 78.87 332.28 58.85 313.61
+\l 58.67 313.44
+\l 79.47 291.14
+\l 79.65 291.31
+\c 86.66 297.84 94.30 303.71 102.43 308.78
+\l 102.64 308.92
+\l 93.10 324.18
+\l 92.89 324.05
+\c 88.76 321.46 84.72 318.69 80.83 315.76
+\l 80.63 315.61
+\l 83.94 311.22
+\l 84.14 311.37
+\c 86.33 313.02 88.58 314.62 90.85 316.15
+\l 94.77 310.34
+\c 89.68 306.89 84.77 303.13 80.13 299.11
+\l 67.33 313.83
+\c 84.15 328.41 103.62 339.65 124.66 346.93
+\l 131.01 328.48
+\c 125.20 326.47 119.49 324.11 113.96 321.42
+\l 110.88 327.72
+\c 113.35 328.92 115.86 330.07 118.38 331.14
+\l 118.62 331.23
+\l 116.47 336.30
+\l 116.24 336.20
+\c 111.75 334.30 107.34 332.19 103.03 329.90
+\l 102.81 329.78
+\l 111.26 313.89
+\l 111.48 314.01
+\c 119.94 318.51 128.84 322.19 138 324.99
+\l 138.24 325.07
+\l 129.32 354.23
+
+\m 234.25 354.23
+\l 225.33 325.07
+\l 225.57 324.99
+\c 234.73 322.19 243.63 318.51 252.09 314.01
+\l 252.31 313.89
+\l 260.76 329.78
+\l 260.54 329.90
+\c 256.23 332.19 251.82 334.30 247.33 336.20
+\l 247.10 336.30
+\l 244.95 331.23
+\l 245.18 331.14
+\c 247.71 330.07 250.22 328.92 252.69 327.72
+\l 249.61 321.42
+\c 244.08 324.11 238.37 326.47 232.56 328.48
+\l 238.91 346.93
+\c 259.94 339.65 279.42 328.41 296.24 313.83
+\l 283.44 299.11
+\c 278.79 303.13 273.89 306.89 268.79 310.34
+\l 272.72 316.15
+\c 274.99 314.62 277.24 313.02 279.43 311.37
+\l 279.63 311.22
+\l 282.94 315.61
+\l 282.74 315.76
+\c 278.85 318.69 274.81 321.46 270.68 324.05
+\l 270.47 324.18
+\l 260.93 308.92
+\l 261.14 308.78
+\c 269.27 303.71 276.91 297.84 283.92 291.31
+\l 284.10 291.14
+\l 304.90 313.44
+\l 304.72 313.61
+\c 284.70 332.28 260.66 346.15 234.48 354.16
+\l 234.25 354.23
+
+\m 129.00 353.60
+\l 137.62 325.38
+\c 128.59 322.61 119.82 318.98 111.47 314.56
+\l 103.49 329.57
+\c 107.64 331.77 111.89 333.79 116.21 335.64
+\l 117.96 331.49
+\c 115.43 330.42 112.92 329.27 110.44 328.06
+\l 110.21 327.95
+\l 113.72 320.77
+\l 113.95 320.87
+\c 119.61 323.63 125.45 326.06 131.40 328.11
+\l 131.63 328.19
+\l 124.96 347.57
+\l 124.73 347.49
+\c 103.46 340.17 83.78 328.81 66.81 314.05
+\l 66.62 313.89
+\l 80.07 298.42
+\l 80.26 298.58
+\c 85.01 302.71 90.03 306.56 95.25 310.08
+\l 95.45 310.22
+\l 90.98 316.85
+\l 90.78 316.71
+\c 88.49 315.17 86.24 313.56 84.04 311.91
+\l 81.33 315.50
+\c 85.09 318.32 88.97 320.99 92.95 323.48
+\l 101.96 309.06
+\c 93.95 304.05 86.42 298.27 79.50 291.83
+\l 59.38 313.41
+\c 79.25 331.88 103.06 345.63 129.00 353.60
+
+\m 234.57 353.60
+\c 260.51 345.63 284.32 331.88 304.18 313.41
+\l 284.07 291.83
+\c 277.15 298.27 269.61 304.05 261.61 309.06
+\l 270.62 323.48
+\c 274.60 320.99 278.48 318.32 282.24 315.50
+\l 279.53 311.91
+\c 277.33 313.56 275.08 315.17 272.79 316.71
+\l 272.59 316.85
+\l 268.12 310.22
+\l 268.32 310.08
+\c 273.54 306.56 278.56 302.71 283.31 298.58
+\l 283.50 298.42
+\l 296.95 313.89
+\l 296.76 314.05
+\c 279.79 328.81 260.11 340.17 238.84 347.49
+\l 238.61 347.57
+\l 231.93 328.19
+\l 232.17 328.11
+\c 238.12 326.06 243.96 323.63 249.62 320.87
+\l 249.85 320.77
+\l 253.35 327.95
+\l 253.13 328.06
+\c 250.65 329.27 248.14 330.42 245.60 331.49
+\l 247.36 335.64
+\c 251.68 333.79 255.93 331.77 260.08 329.57
+\l 252.10 314.56
+\c 243.75 318.98 234.98 322.61 225.95 325.38
+\l 234.57 353.60
+
+\m 50.13 304.90
+\l 49.96 304.72
+\c 31.29 284.70 17.41 260.66 9.41 234.48
+\l 9.34 234.25
+\l 38.50 225.33
+\l 38.58 225.57
+\c 41.38 234.73 45.06 243.63 49.56 252.09
+\l 49.68 252.31
+\l 33.79 260.76
+\l 33.67 260.54
+\c 31.38 256.23 29.27 251.82 27.37 247.33
+\l 27.27 247.10
+\l 32.33 244.95
+\l 32.43 245.18
+\c 33.50 247.71 34.65 250.22 35.85 252.69
+\l 42.15 249.61
+\c 39.46 244.08 37.10 238.37 35.08 232.56
+\l 16.64 238.91
+\c 23.92 259.94 35.16 279.42 49.74 296.24
+\l 64.46 283.44
+\c 60.44 278.79 56.67 273.89 53.23 268.80
+\l 47.41 272.72
+\c 48.95 274.99 50.55 277.24 52.20 279.43
+\l 52.35 279.63
+\l 47.96 282.94
+\l 47.81 282.74
+\c 44.88 278.85 42.11 274.81 39.52 270.68
+\l 39.39 270.47
+\l 54.65 260.93
+\l 54.79 261.14
+\c 59.86 269.27 65.73 276.91 72.26 283.92
+\l 72.43 284.10
+\l 50.13 304.90
+
+\m 313.44 304.90
+\l 291.14 284.10
+\l 291.30 283.92
+\c 297.84 276.91 303.71 269.27 308.78 261.14
+\l 308.92 260.93
+\l 324.18 270.47
+\l 324.04 270.68
+\c 321.46 274.81 318.69 278.85 315.76 282.74
+\l 315.61 282.94
+\l 311.22 279.63
+\l 311.37 279.43
+\c 313.02 277.24 314.61 274.99 316.15 272.72
+\l 310.34 268.80
+\c 306.89 273.89 303.13 278.79 299.11 283.44
+\l 313.83 296.24
+\c 328.41 279.42 339.65 259.95 346.93 238.91
+\l 328.48 232.56
+\c 326.47 238.37 324.11 244.08 321.42 249.61
+\l 327.72 252.69
+\c 328.92 250.21 330.06 247.71 331.14 245.18
+\l 331.23 244.95
+\l 336.29 247.10
+\l 336.20 247.33
+\c 334.29 251.82 332.19 256.23 329.90 260.54
+\l 329.78 260.76
+\l 313.89 252.31
+\l 314.01 252.09
+\c 318.50 243.63 322.19 234.73 324.99 225.57
+\l 325.06 225.33
+\l 354.23 234.25
+\l 354.16 234.48
+\c 346.15 260.66 332.28 284.70 313.61 304.72
+\l 313.44 304.90
+
+\m 50.16 304.18
+\l 71.73 284.07
+\c 65.30 277.15 59.52 269.62 54.50 261.61
+\l 40.09 270.62
+\c 42.58 274.60 45.25 278.48 48.07 282.24
+\l 51.66 279.53
+\c 50.01 277.33 48.40 275.08 46.86 272.79
+\l 46.72 272.59
+\l 53.35 268.12
+\l 53.49 268.32
+\c 57.01 273.54 60.86 278.56 64.99 283.31
+\l 65.15 283.50
+\l 49.68 296.95
+\l 49.52 296.76
+\c 34.76 279.79 23.40 260.11 16.08 238.84
+\l 16.00 238.61
+\l 35.38 231.93
+\l 35.46 232.17
+\c 37.51 238.12 39.93 243.96 42.70 249.62
+\l 42.80 249.85
+\l 35.62 253.35
+\l 35.50 253.13
+\c 34.30 250.65 33.15 248.14 32.07 245.60
+\l 27.93 247.36
+\c 29.77 251.68 31.80 255.93 34 260.08
+\l 49.01 252.10
+\c 44.59 243.75 40.96 234.98 38.19 225.95
+\l 9.97 234.57
+\c 17.94 260.51 31.68 284.32 50.16 304.18
+
+\m 313.41 304.18
+\c 331.88 284.32 345.63 260.51 353.60 234.57
+\l 325.38 225.95
+\c 322.61 234.98 318.97 243.75 314.55 252.10
+\l 329.57 260.08
+\c 331.76 255.93 333.79 251.68 335.63 247.36
+\l 331.49 245.60
+\c 330.41 248.14 329.27 250.65 328.06 253.13
+\l 327.95 253.35
+\l 320.77 249.85
+\l 320.87 249.62
+\c 323.63 243.96 326.06 238.12 328.11 232.17
+\l 328.19 231.93
+\l 347.57 238.61
+\l 347.49 238.84
+\c 340.17 260.11 328.80 279.79 314.05 296.76
+\l 313.89 296.95
+\l 298.41 283.50
+\l 298.58 283.31
+\c 302.71 278.56 306.56 273.54 310.08 268.32
+\l 310.22 268.12
+\l 316.85 272.59
+\l 316.71 272.79
+\c 315.17 275.08 313.56 277.33 311.91 279.53
+\l 315.50 282.24
+\c 318.32 278.48 320.99 274.60 323.48 270.62
+\l 309.06 261.61
+\c 304.04 269.62 298.26 277.15 291.83 284.07
+\l 313.41 304.18
+
+\m 6.21 222.57
+\l 6.15 222.33
+\c -0.00 195.66 -0.00 167.91 6.15 141.24
+\l 6.21 141.00
+\l 35.93 147.86
+\l 35.87 148.10
+\c 33.72 157.43 32.46 166.98 32.12 176.56
+\l 32.11 176.81
+\l 14.13 176.18
+\l 14.13 175.93
+\c 14.30 171.06 14.69 166.18 15.28 161.34
+\l 15.31 161.09
+\l 20.77 161.76
+\l 20.74 162.01
+\c 20.40 164.74 20.15 167.48 19.95 170.22
+\l 26.94 170.71
+\c 27.38 164.57 28.19 158.45 29.35 152.41
+\l 10.21 148.69
+\c 5.99 170.54 5.99 193.03 10.21 214.88
+\l 29.35 211.16
+\c 28.19 205.12 27.38 199.00 26.94 192.86
+\l 19.95 193.35
+\c 20.15 196.09 20.40 198.83 20.74 201.56
+\l 20.77 201.81
+\l 15.31 202.48
+\l 15.28 202.23
+\c 14.69 197.39 14.30 192.51 14.13 187.64
+\l 14.13 187.39
+\l 32.11 186.76
+\l 32.12 187.01
+\c 32.46 196.59 33.72 206.13 35.87 215.47
+\l 35.93 215.71
+\l 6.21 222.57
+
+\m 357.36 222.57
+\l 327.64 215.71
+\l 327.70 215.47
+\c 329.85 206.13 331.11 196.59 331.45 187.01
+\l 331.46 186.76
+\l 349.44 187.39
+\l 349.43 187.64
+\c 349.26 192.51 348.88 197.39 348.29 202.23
+\l 348.26 202.48
+\l 342.80 201.81
+\l 342.83 201.56
+\c 343.16 198.83 343.42 196.09 343.62 193.35
+\l 336.63 192.86
+\c 336.19 199.00 335.38 205.12 334.21 211.16
+\l 353.36 214.88
+\c 357.58 193.03 357.58 170.54 353.36 148.69
+\l 334.21 152.41
+\c 335.38 158.45 336.19 164.57 336.63 170.71
+\l 343.62 170.22
+\c 343.42 167.48 343.16 164.74 342.83 162.01
+\l 342.80 161.76
+\l 348.26 161.09
+\l 348.29 161.34
+\c 348.88 166.18 349.26 171.06 349.43 175.93
+\l 349.44 176.18
+\l 331.46 176.81
+\l 331.45 176.56
+\c 331.11 166.98 329.85 157.43 327.70 148.10
+\l 327.64 147.86
+\l 357.36 141.00
+\l 357.41 141.24
+\c 363.57 167.91 363.57 195.66 357.41 222.33
+\l 357.36 222.57
+
+\m 6.60 221.98
+\l 35.34 215.34
+\c 33.23 206.13 31.99 196.72 31.64 187.28
+\l 14.65 187.87
+\c 14.82 192.56 15.19 197.26 15.76 201.92
+\l 20.22 201.37
+\c 19.89 198.64 19.62 195.89 19.43 193.14
+\l 19.41 192.89
+\l 27.39 192.33
+\l 27.41 192.58
+\c 27.85 198.86 28.68 205.13 29.88 211.31
+\l 29.92 211.56
+\l 9.80 215.47
+\l 9.75 215.23
+\c 5.46 193.15 5.46 170.42 9.75 148.34
+\l 9.80 148.10
+\l 29.92 152.01
+\l 29.88 152.26
+\c 28.68 158.44 27.85 164.71 27.41 170.99
+\l 27.39 171.24
+\l 19.41 170.68
+\l 19.43 170.43
+\c 19.62 167.68 19.89 164.93 20.22 162.20
+\l 15.76 161.65
+\c 15.19 166.31 14.82 171.01 14.65 175.70
+\l 31.64 176.29
+\c 31.99 166.85 33.23 157.44 35.34 148.23
+\l 6.60 141.59
+\c 0.53 168.04 0.53 195.53 6.60 221.98
+
+\m 356.97 221.98
+\c 363.04 195.53 363.04 168.04 356.97 141.59
+\l 328.23 148.23
+\c 330.34 157.44 331.58 166.85 331.92 176.29
+\l 348.92 175.70
+\c 348.75 171.01 348.38 166.31 347.81 161.65
+\l 343.35 162.20
+\c 343.68 164.93 343.95 167.68 344.14 170.43
+\l 344.15 170.68
+\l 336.18 171.24
+\l 336.16 170.99
+\c 335.72 164.71 334.89 158.44 333.69 152.26
+\l 333.65 152.01
+\l 353.77 148.10
+\l 353.81 148.34
+\c 358.10 170.42 358.10 193.15 353.81 215.23
+\l 353.77 215.47
+\l 333.65 211.56
+\l 333.69 211.31
+\c 334.89 205.13 335.72 198.86 336.16 192.58
+\l 336.18 192.33
+\l 344.15 192.89
+\l 344.14 193.14
+\c 343.95 195.89 343.68 198.64 343.35 201.37
+\l 347.81 201.92
+\c 348.38 197.26 348.75 192.56 348.92 187.87
+\l 331.92 187.28
+\c 331.58 196.72 330.34 206.13 328.23 215.34
+\l 356.97 221.98
+
+\m 38.50 138.24
+\l 9.34 129.32
+\l 9.41 129.08
+\c 17.41 102.91 31.29 78.87 49.96 58.85
+\l 50.13 58.67
+\l 72.43 79.47
+\l 72.26 79.65
+\c 65.73 86.66 59.86 94.30 54.79 102.43
+\l 54.65 102.64
+\l 39.39 93.10
+\l 39.52 92.89
+\c 42.11 88.76 44.88 84.72 47.81 80.83
+\l 47.96 80.63
+\l 52.35 83.94
+\l 52.20 84.14
+\c 50.55 86.33 48.95 88.58 47.41 90.85
+\l 53.23 94.77
+\c 56.67 89.68 60.44 84.78 64.46 80.13
+\l 49.74 67.33
+\c 35.16 84.15 23.92 103.62 16.64 124.66
+\l 35.08 131.01
+\c 37.10 125.20 39.46 119.49 42.15 113.96
+\l 35.85 110.88
+\c 34.65 113.35 33.50 115.86 32.43 118.39
+\l 32.33 118.62
+\l 27.27 116.47
+\l 27.37 116.24
+\c 29.27 111.75 31.38 107.34 33.67 103.03
+\l 33.79 102.81
+\l 49.68 111.26
+\l 49.56 111.48
+\c 45.06 119.94 41.38 128.84 38.58 138.00
+\l 38.50 138.24
+
+\m 325.06 138.24
+\l 324.99 138.00
+\c 322.19 128.84 318.50 119.94 314.01 111.48
+\l 313.89 111.26
+\l 329.78 102.81
+\l 329.90 103.03
+\c 332.19 107.34 334.29 111.75 336.20 116.24
+\l 336.29 116.47
+\l 331.23 118.62
+\l 331.14 118.39
+\c 330.06 115.86 328.92 113.35 327.72 110.88
+\l 321.42 113.96
+\c 324.11 119.49 326.47 125.20 328.48 131.01
+\l 346.93 124.66
+\c 339.65 103.62 328.41 84.15 313.83 67.33
+\l 299.11 80.13
+\c 303.13 84.78 306.89 89.68 310.34 94.77
+\l 316.15 90.85
+\c 314.61 88.58 313.02 86.33 311.37 84.14
+\l 311.22 83.94
+\l 315.61 80.63
+\l 315.76 80.83
+\c 318.69 84.72 321.46 88.76 324.04 92.89
+\l 324.18 93.10
+\l 308.92 102.64
+\l 308.78 102.43
+\c 303.71 94.30 297.84 86.66 291.30 79.65
+\l 291.14 79.47
+\l 313.44 58.67
+\l 313.61 58.85
+\c 332.28 78.87 346.15 102.91 354.16 129.08
+\l 354.23 129.32
+\l 325.06 138.24
+
+\m 38.19 137.62
+\c 40.96 128.59 44.59 119.82 49.01 111.47
+\l 34 103.49
+\c 31.80 107.64 29.77 111.89 27.93 116.21
+\l 32.07 117.97
+\c 33.15 115.43 34.30 112.92 35.50 110.44
+\l 35.61 110.22
+\l 42.80 113.72
+\l 42.70 113.95
+\c 39.93 119.61 37.51 125.45 35.46 131.40
+\l 35.38 131.64
+\l 16.00 124.96
+\l 16.08 124.73
+\c 23.40 103.46 34.76 83.78 49.52 66.81
+\l 49.68 66.62
+\l 65.15 80.07
+\l 64.99 80.26
+\c 60.86 85.01 57.01 90.03 53.49 95.25
+\l 53.35 95.45
+\l 46.72 90.98
+\l 46.86 90.78
+\c 48.40 88.49 50.01 86.24 51.66 84.04
+\l 48.07 81.33
+\c 45.25 85.09 42.58 88.97 40.09 92.95
+\l 54.50 101.96
+\c 59.52 93.95 65.30 86.42 71.73 79.50
+\l 50.16 59.39
+\c 31.68 79.25 17.94 103.06 9.97 129.00
+\l 38.19 137.62
+
+\m 325.38 137.62
+\l 353.60 129.00
+\c 345.63 103.06 331.88 79.25 313.41 59.39
+\l 291.83 79.50
+\c 298.26 86.42 304.04 93.95 309.06 101.96
+\l 323.48 92.95
+\c 320.99 88.97 318.32 85.09 315.50 81.33
+\l 311.91 84.04
+\c 313.56 86.24 315.17 88.49 316.71 90.78
+\l 316.85 90.98
+\l 310.22 95.45
+\l 310.08 95.25
+\c 306.56 90.03 302.71 85.01 298.58 80.26
+\l 298.41 80.07
+\l 313.89 66.62
+\l 314.05 66.81
+\c 328.80 83.78 340.17 103.46 347.49 124.73
+\l 347.57 124.96
+\l 328.19 131.64
+\l 328.11 131.40
+\c 326.06 125.45 323.63 119.61 320.87 113.95
+\l 320.77 113.72
+\l 327.95 110.22
+\l 328.06 110.44
+\c 329.27 112.92 330.41 115.43 331.49 117.97
+\l 335.63 116.21
+\c 333.79 111.89 331.76 107.64 329.57 103.49
+\l 314.55 111.47
+\c 318.97 119.82 322.61 128.59 325.38 137.62
+
+\m 79.47 72.43
+\l 58.67 50.13
+\l 58.85 49.96
+\c 78.87 31.29 102.91 17.42 129.08 9.41
+\l 129.32 9.34
+\l 138.24 38.50
+\l 138 38.58
+\c 128.84 41.38 119.94 45.06 111.48 49.56
+\l 111.26 49.68
+\l 102.81 33.79
+\l 103.03 33.67
+\c 107.34 31.38 111.75 29.28 116.24 27.37
+\l 116.47 27.27
+\l 118.62 32.33
+\l 118.38 32.43
+\c 115.86 33.50 113.35 34.65 110.88 35.85
+\l 113.96 42.15
+\c 119.49 39.46 125.20 37.10 131.01 35.09
+\l 124.66 16.64
+\c 103.62 23.92 84.15 35.16 67.33 49.74
+\l 80.13 64.46
+\c 84.77 60.44 89.68 56.67 94.77 53.23
+\l 90.85 47.41
+\c 88.58 48.95 86.33 50.55 84.14 52.20
+\l 83.94 52.35
+\l 80.63 47.96
+\l 80.83 47.81
+\c 84.72 44.88 88.76 42.11 92.89 39.52
+\l 93.10 39.39
+\l 102.64 54.65
+\l 102.43 54.79
+\c 94.30 59.86 86.66 65.73 79.65 72.26
+\l 79.47 72.43
+
+\m 284.10 72.43
+\l 283.92 72.26
+\c 276.91 65.73 269.27 59.86 261.14 54.79
+\l 260.93 54.65
+\l 270.47 39.39
+\l 270.68 39.52
+\c 274.81 42.11 278.85 44.88 282.74 47.81
+\l 282.94 47.96
+\l 279.63 52.35
+\l 279.43 52.20
+\c 277.24 50.55 274.99 48.95 272.72 47.41
+\l 268.79 53.23
+\c 273.89 56.67 278.79 60.44 283.44 64.46
+\l 296.24 49.74
+\c 279.42 35.16 259.95 23.92 238.91 16.64
+\l 232.56 35.09
+\c 238.37 37.10 244.08 39.46 249.61 42.15
+\l 252.69 35.85
+\c 250.21 34.65 247.71 33.50 245.18 32.43
+\l 244.95 32.33
+\l 247.10 27.27
+\l 247.33 27.37
+\c 251.82 29.28 256.23 31.38 260.54 33.67
+\l 260.76 33.79
+\l 252.31 49.68
+\l 252.09 49.56
+\c 243.63 45.06 234.73 41.38 225.57 38.58
+\l 225.33 38.50
+\l 234.25 9.34
+\l 234.48 9.41
+\c 260.66 17.42 284.70 31.29 304.72 49.96
+\l 304.90 50.13
+\l 284.10 72.43
+
+\m 79.50 71.74
+\c 86.42 65.30 93.95 59.52 101.96 54.50
+\l 92.95 40.09
+\c 88.97 42.58 85.09 45.25 81.33 48.07
+\l 84.04 51.66
+\c 86.24 50.01 88.49 48.40 90.78 46.86
+\l 90.98 46.72
+\l 95.45 53.35
+\l 95.25 53.49
+\c 90.03 57.01 85.01 60.86 80.26 64.99
+\l 80.07 65.15
+\l 66.62 49.68
+\l 66.81 49.52
+\c 83.78 34.76 103.46 23.40 124.73 16.08
+\l 124.96 16.00
+\l 131.63 35.38
+\l 131.40 35.46
+\c 125.45 37.51 119.61 39.94 113.95 42.70
+\l 113.72 42.80
+\l 110.21 35.62
+\l 110.44 35.51
+\c 112.92 34.30 115.43 33.15 117.96 32.07
+\l 116.21 27.93
+\c 111.89 29.77 107.64 31.80 103.49 34.00
+\l 111.47 49.01
+\c 119.82 44.59 128.59 40.96 137.62 38.19
+\l 129.00 9.97
+\c 103.06 17.94 79.25 31.69 59.38 50.16
+\l 79.50 71.74
+
+\m 284.07 71.74
+\l 304.18 50.16
+\c 284.32 31.69 260.51 17.94 234.57 9.97
+\l 225.95 38.19
+\c 234.98 40.96 243.75 44.59 252.10 49.01
+\l 260.08 34.00
+\c 255.93 31.80 251.68 29.77 247.36 27.93
+\l 245.60 32.07
+\c 248.14 33.15 250.65 34.30 253.13 35.51
+\l 253.35 35.62
+\l 249.85 42.80
+\l 249.62 42.70
+\c 243.96 39.94 238.12 37.51 232.17 35.46
+\l 231.93 35.38
+\l 238.61 16.00
+\l 238.84 16.08
+\c 260.11 23.40 279.79 34.76 296.76 49.52
+\l 296.95 49.68
+\l 283.50 65.15
+\l 283.31 64.99
+\c 278.56 60.86 273.54 57.01 268.32 53.49
+\l 268.12 53.35
+\l 272.59 46.72
+\l 272.79 46.86
+\c 275.08 48.40 277.33 50.01 279.53 51.66
+\l 282.24 48.07
+\c 278.48 45.25 274.60 42.58 270.62 40.09
+\l 261.61 54.50
+\c 269.61 59.52 277.15 65.30 284.07 71.74
+
+\m 147.86 35.93
+\l 141.00 6.21
+\l 141.24 6.15
+\c 154.57 3.08 168.18 1.54 181.78 1.54
+\c 195.39 1.54 208.99 3.08 222.33 6.15
+\l 222.57 6.21
+\l 215.71 35.93
+\l 215.47 35.87
+\c 206.13 33.72 196.59 32.46 187.01 32.12
+\l 186.76 32.11
+\l 187.39 14.13
+\l 187.64 14.14
+\c 192.51 14.30 197.39 14.69 202.23 15.28
+\l 202.47 15.31
+\l 201.81 20.77
+\l 201.56 20.74
+\c 198.83 20.41 196.09 20.15 193.35 19.95
+\l 192.86 26.94
+\c 199.00 27.38 205.12 28.19 211.16 29.35
+\l 214.88 10.21
+\c 193.03 5.99 170.54 5.99 148.69 10.21
+\l 152.41 29.35
+\c 158.45 28.19 164.57 27.38 170.71 26.94
+\l 170.22 19.95
+\c 167.48 20.15 164.74 20.41 162.01 20.74
+\l 161.76 20.77
+\l 161.09 15.31
+\l 161.34 15.28
+\c 166.18 14.69 171.06 14.30 175.93 14.14
+\l 176.18 14.13
+\l 176.81 32.11
+\l 176.56 32.12
+\c 166.98 32.46 157.43 33.72 148.10 35.87
+\l 147.86 35.93
+
+\m 148.23 35.34
+\c 157.44 33.23 166.85 31.99 176.29 31.64
+\l 175.70 14.65
+\c 171.01 14.82 166.31 15.19 161.65 15.76
+\l 162.20 20.22
+\c 164.93 19.89 167.68 19.62 170.43 19.43
+\l 170.68 19.41
+\l 171.24 27.39
+\l 170.99 27.41
+\c 164.71 27.85 158.44 28.68 152.26 29.88
+\l 152.01 29.92
+\l 148.10 9.80
+\l 148.34 9.75
+\c 170.42 5.47 193.15 5.47 215.22 9.75
+\l 215.47 9.80
+\l 211.56 29.92
+\l 211.31 29.88
+\c 205.13 28.68 198.86 27.85 192.58 27.41
+\l 192.33 27.39
+\l 192.89 19.41
+\l 193.14 19.43
+\c 195.89 19.62 198.64 19.89 201.37 20.22
+\l 201.92 15.76
+\c 197.26 15.19 192.56 14.82 187.87 14.65
+\l 187.28 31.64
+\c 196.72 31.99 206.13 33.23 215.34 35.34
+\l 221.97 6.60
+\c 208.75 3.56 195.27 2.03 181.78 2.03
+\c 168.30 2.03 154.82 3.56 141.59 6.60
+\l 148.23 35.34
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han53.pgf b/graphics/pgf/contrib/pgfornament-han/han/han53.pgf
new file mode 100644
index 0000000000..a25c36e7b8
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han53.pgf
@@ -0,0 +1,312 @@
+% han53.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 167.94 359.37
+\c 152.25 358.28 136.76 355.12 121.89 350.01
+\l 130.03 326.37
+\c 120.65 323.14 111.58 319.01 102.99 314.05
+\l 92.99 331.37
+\c 98.28 334.42 103.74 337.20 109.31 339.68
+\l 112.36 332.83
+\c 109.69 331.64 107.05 330.38 104.45 329.06
+\l 106.72 324.60
+\c 110.93 326.74 115.24 328.71 119.62 330.48
+\l 113.06 346.70
+\c 103.36 342.78 93.99 338.01 85.11 332.46
+\l 91.73 321.86
+\c 88.43 319.80 85.19 317.61 82.04 315.32
+\c 78.89 313.03 75.81 310.63 72.82 308.12
+\l 64.79 317.70
+\c 52.75 307.59 42.06 295.94 33.04 283.06
+\l 53.52 268.72
+\c 47.84 260.59 42.93 251.92 38.89 242.86
+\l 20.62 250.99
+\c 23.10 256.57 25.89 262.03 28.94 267.31
+\l 35.43 263.56
+\c 33.97 261.03 32.57 258.46 31.25 255.86
+\l 35.70 253.59
+\c 37.85 257.79 40.18 261.92 42.68 265.92
+\l 27.84 275.20
+\c 22.29 266.32 17.52 256.95 13.60 247.24
+\l 25.19 242.56
+\c 23.73 238.94 22.39 235.28 21.19 231.57
+\c 19.98 227.87 18.91 224.11 17.96 220.33
+\l 5.84 223.36
+\c 2.03 208.10 0.25 192.39 0.52 176.67
+\l 25.52 177.11
+\c 25.69 167.19 26.82 157.28 28.88 147.58
+\l 9.31 143.42
+\c 8.05 149.39 7.08 155.45 6.45 161.52
+\l 13.91 162.30
+\c 14.21 159.40 14.60 156.49 15.05 153.61
+\l 19.99 154.39
+\c 19.25 159.05 18.72 163.76 18.39 168.47
+\l 0.93 167.25
+\c 1.66 156.81 3.30 146.42 5.84 136.27
+\l 17.96 139.29
+\c 18.91 135.51 19.98 131.75 21.19 128.05
+\c 22.39 124.34 23.73 120.68 25.19 117.06
+\l 13.60 112.38
+\c 19.49 97.80 27.27 84.04 36.74 71.48
+\l 56.70 86.53
+\c 62.67 78.61 69.41 71.26 76.78 64.62
+\l 63.39 49.76
+\c 58.86 53.84 54.53 58.18 50.44 62.71
+\l 56.02 67.73
+\c 57.97 65.56 59.99 63.43 62.05 61.37
+\l 65.59 64.90
+\c 62.25 68.24 59.05 71.74 56.01 75.36
+\l 42.61 64.11
+\c 49.33 56.08 56.77 48.65 64.79 41.92
+\l 72.82 51.50
+\c 75.81 48.99 78.89 46.59 82.04 44.30
+\c 85.19 42.01 88.43 39.82 91.73 37.76
+\l 85.11 27.16
+\c 98.44 18.83 112.83 12.27 127.87 7.67
+\l 135.18 31.58
+\c 144.66 28.68 154.43 26.69 164.29 25.66
+\l 162.20 5.77
+\c 156.13 6.40 150.08 7.36 144.11 8.63
+\l 145.67 15.97
+\c 148.53 15.36 151.41 14.83 154.29 14.37
+\l 155.07 19.31
+\c 150.41 20.05 145.76 20.99 141.18 22.13
+\l 136.95 5.15
+\c 147.11 2.62 157.49 0.98 167.94 0.25
+\l 168.81 12.72
+\c 172.70 12.45 176.60 12.31 180.49 12.31
+\c 184.39 12.31 188.29 12.45 192.18 12.72
+\l 193.05 0.25
+\c 208.74 1.34 224.23 4.50 239.10 9.61
+\l 230.96 33.25
+\c 240.34 36.48 249.40 40.61 257.99 45.57
+\l 267.99 28.25
+\c 262.71 25.20 257.25 22.42 251.67 19.94
+\l 248.62 26.79
+\c 251.29 27.97 253.94 29.24 256.54 30.56
+\l 254.27 35.02
+\c 250.06 32.88 245.75 30.91 241.37 29.14
+\l 247.92 12.91
+\c 257.63 16.84 267.00 21.61 275.88 27.16
+\l 269.26 37.76
+\c 272.56 39.82 275.80 42.01 278.95 44.30
+\c 282.10 46.59 285.18 48.99 288.16 51.50
+\l 296.20 41.92
+\c 308.24 52.03 318.93 63.69 327.94 76.56
+\l 307.46 90.90
+\c 313.15 99.03 318.06 107.70 322.10 116.77
+\l 340.37 108.63
+\c 337.88 103.05 335.10 97.59 332.05 92.31
+\l 325.55 96.06
+\c 327.01 98.59 328.41 101.16 329.74 103.77
+\l 325.28 106.03
+\c 323.14 101.83 320.81 97.70 318.30 93.70
+\l 333.14 84.42
+\c 338.69 93.30 343.47 102.67 347.39 112.38
+\l 335.80 117.06
+\c 337.26 120.68 338.60 124.34 339.80 128.05
+\c 341.00 131.75 342.08 135.51 343.02 139.29
+\l 355.15 136.27
+\c 358.95 151.52 360.74 167.23 360.47 182.95
+\l 335.47 182.52
+\c 335.30 192.43 334.17 202.33 332.11 212.04
+\l 351.67 216.19
+\c 352.94 210.22 353.90 204.17 354.54 198.10
+\l 347.08 197.32
+\c 346.77 200.22 346.39 203.13 345.93 206.01
+\l 340.99 205.23
+\c 341.73 200.57 342.27 195.86 342.60 191.15
+\l 360.06 192.37
+\c 359.33 202.81 357.68 213.20 355.15 223.36
+\l 343.02 220.33
+\c 342.08 224.11 341.00 227.87 339.80 231.57
+\c 338.60 235.28 337.26 238.94 335.80 242.56
+\l 347.39 247.24
+\c 341.50 261.82 333.71 275.58 324.25 288.14
+\l 304.29 273.09
+\c 298.32 281.01 291.58 288.36 284.21 295.00
+\l 297.59 309.86
+\c 302.13 305.78 306.46 301.44 310.54 296.91
+\l 304.97 291.89
+\c 303.02 294.06 301.00 296.19 298.94 298.25
+\l 295.40 294.72
+\c 298.74 291.38 301.94 287.88 304.98 284.27
+\l 318.38 295.51
+\c 311.65 303.53 304.22 310.97 296.20 317.70
+\l 288.16 308.12
+\c 285.18 310.63 282.10 313.03 278.95 315.32
+\c 275.80 317.61 272.56 319.80 269.26 321.86
+\l 275.88 332.46
+\c 262.55 340.79 248.16 347.35 233.12 351.95
+\l 225.81 328.04
+\c 216.33 330.94 206.56 332.93 196.70 333.96
+\l 198.79 353.85
+\c 204.85 353.22 210.91 352.26 216.88 350.99
+\l 215.32 343.65
+\c 212.46 344.26 209.58 344.79 206.70 345.25
+\l 205.91 340.31
+\c 210.58 339.57 215.22 338.63 219.80 337.49
+\l 224.04 354.47
+\c 213.88 357.00 203.50 358.64 193.05 359.37
+\l 192.18 346.90
+\c 188.29 347.17 184.39 347.31 180.49 347.31
+\c 176.60 347.31 172.70 347.17 168.81 346.90
+\l 167.94 359.37
+
+\m 162.20 353.85
+\l 164.29 333.96
+\c 158.92 333.40 153.55 332.55 148.27 331.43
+\l 146.71 338.76
+\c 149.48 339.35 152.28 339.87 155.07 340.31
+\l 154.29 345.25
+\c 149.48 344.49 144.70 343.51 139.97 342.34
+\l 144.21 325.36
+\c 152.67 327.47 161.32 328.84 170.03 329.44
+\l 169.16 341.92
+\c 172.93 342.18 176.71 342.31 180.49 342.31
+\c 184.28 342.31 188.06 342.18 191.83 341.92
+\l 190.96 329.44
+\c 204.03 328.53 216.94 325.90 229.33 321.64
+\l 237.47 345.28
+\c 248.06 341.63 258.30 336.97 267.99 331.37
+\l 257.99 314.05
+\c 253.31 316.75 248.48 319.21 243.54 321.41
+\l 246.59 328.26
+\c 249.18 327.11 251.75 325.89 254.27 324.60
+\l 256.54 329.06
+\c 252.20 331.26 247.75 333.29 243.24 335.11
+\l 236.69 318.89
+\c 244.78 315.62 252.58 311.64 259.98 307.02
+\l 266.61 317.62
+\c 269.81 315.62 272.95 313.50 276.01 311.28
+\c 279.07 309.06 282.05 306.72 284.95 304.29
+\l 276.91 294.72
+\c 286.95 286.30 295.85 276.58 303.37 265.85
+\l 323.85 280.19
+\c 330.27 271.01 335.81 261.22 340.37 250.99
+\l 322.10 242.86
+\c 319.90 247.79 317.43 252.63 314.73 257.31
+\l 321.22 261.06
+\c 322.64 258.61 324.00 256.11 325.28 253.59
+\l 329.74 255.86
+\c 327.53 260.19 325.12 264.45 322.54 268.57
+\l 307.70 259.30
+\c 312.33 251.90 316.31 244.09 319.57 236.00
+\l 331.16 240.68
+\c 332.58 237.18 333.88 233.62 335.04 230.03
+\c 336.21 226.43 337.26 222.79 338.17 219.12
+\l 326.04 216.10
+\c 329.21 203.38 330.70 190.29 330.47 177.19
+\l 355.47 176.76
+\c 355.27 165.56 354.00 154.38 351.67 143.42
+\l 332.11 147.58
+\c 333.23 152.87 334.08 158.23 334.65 163.61
+\l 342.11 162.83
+\c 341.81 160.01 341.44 157.19 340.99 154.39
+\l 345.93 153.61
+\c 346.70 158.41 347.25 163.27 347.59 168.12
+\l 330.13 169.35
+\c 329.52 160.64 328.15 151.99 326.04 143.52
+\l 338.17 140.50
+\c 337.26 136.83 336.21 133.19 335.04 129.59
+\c 333.88 126.00 332.58 122.44 331.16 118.94
+\l 319.57 123.62
+\c 314.67 111.47 308.18 100.00 300.29 89.53
+\l 320.26 74.49
+\c 313.52 65.55 305.91 57.25 297.59 49.76
+\l 284.21 64.62
+\c 288.23 68.24 292.07 72.08 295.68 76.09
+\l 301.25 71.08
+\c 299.36 68.97 297.40 66.91 295.40 64.90
+\l 298.94 61.37
+\c 302.38 64.81 305.68 68.41 308.81 72.14
+\l 295.40 83.39
+\c 289.79 76.71 283.60 70.51 276.91 64.90
+\l 284.95 55.33
+\c 282.05 52.90 279.07 50.57 276.01 48.34
+\c 272.95 46.12 269.81 44.00 266.61 42.00
+\l 259.98 52.60
+\c 248.87 45.66 236.88 40.19 224.35 36.36
+\l 231.66 12.45
+\c 220.95 9.18 209.92 6.94 198.79 5.77
+\l 196.70 25.66
+\c 202.07 26.22 207.43 27.07 212.72 28.19
+\l 214.28 20.86
+\c 211.51 20.27 208.71 19.75 205.91 19.31
+\l 206.70 14.37
+\c 211.50 15.13 216.29 16.11 221.02 17.28
+\l 216.78 34.26
+\c 208.31 32.15 199.66 30.78 190.96 30.17
+\l 191.83 17.70
+\c 188.06 17.44 184.28 17.31 180.49 17.31
+\c 176.71 17.31 172.93 17.44 169.16 17.70
+\l 170.03 30.17
+\c 156.96 31.09 144.05 33.72 131.66 37.98
+\l 123.52 14.34
+\c 112.93 17.99 102.69 22.65 92.99 28.25
+\l 102.99 45.57
+\c 107.67 42.87 112.51 40.41 117.45 38.21
+\l 114.40 31.36
+\c 111.81 32.51 109.24 33.73 106.72 35.02
+\l 104.45 30.56
+\c 108.79 28.36 113.23 26.33 117.75 24.51
+\l 124.30 40.73
+\c 116.21 44.00 108.40 47.98 101.00 52.60
+\l 94.38 42.00
+\c 91.17 44.00 88.04 46.12 84.98 48.34
+\c 81.92 50.57 78.94 52.90 76.04 55.33
+\l 84.07 64.90
+\c 74.04 73.32 65.13 83.04 57.62 93.77
+\l 37.14 79.43
+\c 30.72 88.61 25.17 98.40 20.62 108.63
+\l 38.89 116.77
+\c 41.09 111.83 43.55 106.99 46.26 102.31
+\l 39.76 98.56
+\c 38.35 101.01 36.99 103.51 35.70 106.03
+\l 31.25 103.77
+\c 33.46 99.43 35.86 95.17 38.44 91.05
+\l 53.29 100.32
+\c 48.66 107.72 44.68 115.53 41.41 123.62
+\l 29.82 118.94
+\c 28.41 122.44 27.11 126.00 25.94 129.59
+\c 24.78 133.19 23.73 136.83 22.82 140.50
+\l 34.95 143.52
+\c 31.78 156.24 30.29 169.33 30.52 182.43
+\l 5.52 182.86
+\c 5.71 194.06 6.99 205.24 9.31 216.19
+\l 28.88 212.04
+\c 27.76 206.75 26.90 201.39 26.34 196.01
+\l 18.88 196.79
+\c 19.18 199.61 19.55 202.43 19.99 205.23
+\l 15.05 206.01
+\c 14.29 201.21 13.74 196.35 13.40 191.50
+\l 30.86 190.27
+\c 31.47 198.98 32.84 207.63 34.95 216.10
+\l 22.82 219.12
+\c 23.73 222.79 24.78 226.43 25.94 230.03
+\c 27.11 233.62 28.41 237.18 29.82 240.68
+\l 41.41 236.00
+\c 46.32 248.15 52.81 259.62 60.70 270.08
+\l 40.73 285.13
+\c 47.47 294.07 55.07 302.37 63.39 309.86
+\l 76.78 295.00
+\c 72.76 291.38 68.92 287.54 65.31 283.53
+\l 59.73 288.54
+\c 61.63 290.65 63.58 292.71 65.59 294.72
+\l 62.05 298.25
+\c 58.61 294.81 55.31 291.21 52.18 287.48
+\l 65.59 276.23
+\c 71.19 282.91 77.39 289.11 84.07 294.72
+\l 76.04 304.29
+\c 78.94 306.72 81.92 309.06 84.98 311.28
+\c 88.04 313.50 91.17 315.62 94.38 317.62
+\l 101.00 307.02
+\c 112.12 313.96 124.11 319.43 136.64 323.26
+\l 129.33 347.16
+\c 140.04 350.44 151.06 352.68 162.20 353.85
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han54.pgf b/graphics/pgf/contrib/pgfornament-han/han/han54.pgf
new file mode 100644
index 0000000000..f90578910f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han54.pgf
@@ -0,0 +1,898 @@
+% han54.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 168.16797 359.63827515
+\l 167.91797 359.62265015
+\c 152.21028 358.5252377 136.69464 355.3657908 121.80664 350.2417908
+\l 121.57227 350.1617127
+\l 129.71484 326.5113219
+\c 120.48462 323.3169969 111.55934 319.2452909 103.0918 314.3746029
+\l 93.339844 331.2632749
+\c 98.477808 334.2209749 103.78034 336.9236999 109.19336 339.3413999
+\l 112.03906 332.9488219
+\c 109.44356 331.7903349 106.86759 330.5651599 104.33594 329.2769469
+\l 104.11523 329.1656189
+\l 106.60938 324.2652279
+\l 106.83203 324.3785099
+\c 111.03353 326.5176219 115.34081 328.4844409 119.71289 330.2496029
+\l 119.94531 330.3413999
+\l 113.20117 347.0288999
+\l 112.97266 346.9371029
+\c 103.24989 343.0094779 93.866716 338.2292809 84.974609 332.6734319
+\l 84.763672 332.5386659
+\l 91.392578 321.9312439
+\c 88.156431 319.9022439 84.981313 317.7695059 81.892578 315.5249939
+\c 78.803471 313.2801689 75.789413 310.9174629 72.859375 308.4663999
+\l 64.820312 318.0503849
+\l 64.628906 317.8882749
+\c 52.568314 307.7694749 41.869481 296.0955509 32.839844 283.1988219
+\l 32.699219 282.9937439
+\l 53.1875 268.6480409
+\c 47.598363 260.6379969 42.763331 252.0983339 38.777344 243.1812439
+\l 20.962891 251.1109339
+\c 23.380591 256.5239539 26.083316 261.8245299 29.041016 266.9624939
+\l 35.097656 263.4663999
+\c 33.680469 261.0034719 32.314128 258.4990639 31.025391 255.9664039
+\l 30.914062 255.7456939
+\l 35.810547 253.2496039
+\l 35.925781 253.4722639
+\c 38.064794 257.6735339 40.396469 261.7922149 42.894531 265.7906189
+\l 43.025391 266.0035099
+\l 27.763672 275.5406189
+\l 27.630859 275.3296819
+\c 22.075009 266.4375749 17.294813 257.0544039 13.367188 247.3316339
+\l 13.275391 247.1031239
+\l 24.871094 242.4156239
+\c 23.445831 238.8735639 22.131109 235.2805739 20.951172 231.6480439
+\l 20.953125 231.6480439
+\c 19.773162 228.0154539 18.718716 224.3348939 17.791016 220.6304639
+\l 5.6542969 223.6578039
+\l 5.59375 223.4156239
+\c 1.787175 208.1370239 -0.00275625 192.4070239 0.26953125 176.6636639
+\l 0.2734375 176.4136639
+\l 25.283203 176.8511639
+\c 25.468991 167.0848239 26.581969 157.3348739 28.597656 147.7769439
+\l 9.5195312 143.7203039
+\c 8.2954187 149.5228739 7.3623156 155.4007439 6.7363281 161.2964739
+\l 13.695312 162.0289039
+\c 13.9958 159.2029339 14.365919 156.3733339 14.808594 153.5679639
+\l 14.847656 153.3238239
+\l 20.279297 154.1831939
+\l 20.240234 154.4292939
+\c 19.502447 159.0862339 18.963494 163.7879639 18.636719 168.4917939
+\l 18.619141 168.7378839
+\l 0.6640625 167.4839739
+\l 0.68164062 167.2339739
+\c 1.4132406 156.7741339 3.05785 146.3785439 5.59375 136.2046839
+\l 5.6542969 135.9624939
+\l 17.791016 138.9898339
+\c 18.718728 135.2854139 19.773175 131.6048539 20.953125 127.9722639
+\c 22.133287 124.3389939 23.445506 120.7454639 24.871094 117.2027239
+\l 13.275391 112.5171839
+\l 13.367188 112.2886639
+\c 19.264075 97.6893939 27.061909 83.9065639 36.537109 71.3316339
+\l 36.6875 71.1304639
+\l 56.664062 86.1871039
+\c 62.555878 78.3955339 69.18593 71.1626439 76.433594 64.6148339
+\l 63.384766 50.1226539
+\c 58.987174 54.0940839 54.778078 58.3031839 50.806641 62.7007739
+\l 56.003906 67.3824139
+\c 57.907635 65.2732139 59.865309 63.2006839 61.875 61.1910139
+\l 62.050781 61.0152239
+\l 65.941406 64.9019439
+\l 65.761719 65.0777239
+\c 62.426872 68.4125839 59.231494 71.9030939 56.201172 75.5152239
+\l 56.042969 75.7066339
+\l 42.253906 64.1363239
+\l 42.416016 63.9449139
+\c 49.154541 55.9136939 56.59768 48.4705539 64.628906 41.7320239
+\l 64.820312 41.5699139
+\l 72.859375 51.1519439
+\c 75.789413 48.7008839 78.803471 46.3401339 81.892578 44.0953039
+\c 84.981313 41.8507939 88.156431 39.7180539 91.392578 37.6890539
+\l 84.763672 27.0777239
+\l 84.974609 26.9468639
+\c 98.327872 18.6048839 112.73713 12.0385739 127.79297 7.4371039
+\l 128.03125 7.3628839
+\l 135.3457 31.2828039
+\c 144.69163 28.4418539 154.30668 26.4827439 164.02148 25.4468639
+\l 161.98047 6.0523339
+\c 156.08473 6.6783239 150.20686 7.6114439 144.4043 8.8355439
+\l 145.85938 15.6773339
+\c 148.6413 15.0917139 151.4461 14.5673639 154.25195 14.1246039
+\l 154.49805 14.0855439
+\l 155.35742 19.5171839
+\l 155.11328 19.5562439
+\c 150.45637 20.2940339 145.81939 21.2377039 141.24414 22.3765539
+\l 141.00195 22.4351539
+\l 136.64648 4.9703039
+\l 136.88867 4.9097639
+\c 147.06254 2.3738639 157.45812 0.7292539 167.91797 -0.0023461
+\l 168.16797 -0.0199261
+\l 169.03906 12.4585839
+\c 172.85068 12.1984839 176.67283 12.0581939 180.49414 12.0581939
+\c 184.31545 12.0581939 188.1376 12.1984739 191.94922 12.4585839
+\l 192.82031 -0.0199261
+\l 193.07031 -0.0023461
+\c 208.778 1.0950639 224.29169 4.2545139 239.17969 9.3785139
+\l 239.41406 9.4585839
+\l 231.27344 33.1089739
+\c 240.50366 36.3033039 249.42894 40.3730539 257.89648 45.2437439
+\l 267.64648 28.3570239
+\c 262.50852 25.3993239 257.20794 22.6966039 251.79492 20.2789039
+\l 248.94922 26.6695239
+\c 251.54472 27.8280139 254.11874 29.0531839 256.65039 30.3414039
+\l 256.87305 30.4546839
+\l 254.37891 35.3550739
+\l 254.15625 35.2417939
+\c 249.95475 33.1026739 245.64747 31.1358639 241.27539 29.3706939
+\l 241.04297 29.2769439
+\l 247.78711 12.5914039
+\l 248.01562 12.6831939
+\c 257.73839 16.6108239 267.12157 21.3910139 276.01367 26.9468639
+\l 276.22461 27.0796839
+\l 269.5957 37.6890539
+\c 272.83185 39.7180539 276.00697 41.8507939 279.0957 44.0953039
+\c 282.18481 46.3401339 285.19887 48.7008839 288.12891 51.1519439
+\l 296.16797 41.5699139
+\l 296.35742 41.7320239
+\c 308.41801 51.8508239 319.1188 63.5247539 328.14844 76.4214739
+\l 328.28906 76.6265539
+\l 307.80078 90.9722639
+\c 313.38992 98.9823039 318.22495 107.5219639 322.21094 116.4390539
+\l 340.02539 108.5093639
+\c 337.60769 103.0963439 334.90497 97.7938139 331.94727 92.6558539
+\l 325.88867 96.1519439
+\c 327.30586 98.6148739 328.6722 101.1192839 329.96094 103.6519439
+\l 330.07422 103.8746039
+\l 325.17578 106.3706939
+\l 325.0625 106.1480439
+\c 322.92349 101.9467739 320.59181 97.8261339 318.09375 93.8277239
+\l 317.96289 93.6167939
+\l 333.22266 84.0796839
+\l 333.35742 84.2906239
+\c 338.91327 93.1827239 343.69347 102.5658939 347.62109 112.2886639
+\l 347.71289 112.5171839
+\l 336.11719 117.2046839
+\c 337.54245 120.7467339 338.85717 124.3397239 340.03711 127.9722639
+\l 340.03516 127.9722639
+\c 341.21512 131.6048539 342.26957 135.2854139 343.19727 138.9898339
+\l 355.33203 135.9624939
+\l 355.39453 136.2046839
+\c 359.20111 151.4832739 360.99104 167.2132739 360.71875 182.9566339
+\l 360.71289 183.2066339
+\l 335.70312 182.7691339
+\c 335.51734 192.5354839 334.40631 202.2854339 332.39062 211.8433539
+\l 351.46875 215.8980439
+\c 352.69286 210.0954739 353.62597 204.2195539 354.25195 198.3238239
+\l 347.29297 197.5914039
+\c 346.99248 200.4173639 346.62236 203.2469639 346.17969 206.0523339
+\l 346.14062 206.2964739
+\l 340.70898 205.4371039
+\l 340.74805 205.1910139
+\c 341.48583 200.5340639 342.02479 195.8323439 342.35156 191.1285139
+\l 342.36914 190.8824139
+\l 360.32227 192.1363239
+\l 360.30469 192.3863239
+\c 359.57309 202.8461739 357.92848 213.2417539 355.39258 223.4156239
+\l 355.33203 223.6578039
+\l 343.19531 220.6304639
+\c 342.2676 224.3348939 341.21511 228.0154539 340.03516 231.6480439
+\c 338.85499 235.2813039 337.54278 238.8748339 336.11719 242.4175739
+\l 347.71289 247.1031239
+\l 347.62109 247.3316339
+\c 341.72421 261.9309079 333.92637 275.7137359 324.45117 288.2886659
+\l 324.30078 288.4898379
+\l 304.32422 273.4331969
+\c 298.4324 281.2247679 291.80235 288.4576519 284.55469 295.0054629
+\l 297.60352 309.4976499
+\c 302.00111 305.5262129 306.2102 301.3171169 310.18164 296.9195249
+\l 304.98438 292.2359319
+\c 303.08065 294.3451319 301.12102 296.4176599 299.11133 298.4273379
+\l 298.93555 298.6031189
+\l 295.04688 294.7163999
+\l 295.22461 294.5406189
+\c 298.55946 291.2057609 301.75483 287.7172079 304.78516 284.1050719
+\l 304.94531 283.9136659
+\l 318.73438 295.4839779
+\l 318.57227 295.6734319
+\c 311.83374 303.7046579 304.38865 311.1497499 296.35742 317.8882749
+\l 296.16797 318.0503849
+\l 288.12891 308.4663999
+\c 285.19887 310.9174629 282.18481 313.2801689 279.0957 315.5249939
+\c 276.00697 317.7695069 272.83185 319.9022439 269.5957 321.9312439
+\l 276.22461 332.5425719
+\l 276.01367 332.6734319
+\c 262.66041 341.0154189 248.2492 347.5817219 233.19336 352.183197
+\l 232.95703 352.2554627
+\l 225.64258 328.3374939
+\c 216.29665 331.1784439 206.6816 333.1375559 196.9668 334.1734319
+\l 199.00781 353.5679627
+\c 204.90355 352.9419752 210.77946 352.0088595 216.58203 350.7847595
+\l 215.12695 343.9429629
+\c 212.34503 344.5285879 209.54218 345.0529349 206.73633 345.4956969
+\l 206.49023 345.5347599
+\l 205.63086 340.1031189
+\l 205.875 340.0640559
+\c 210.53191 339.3262689 215.16889 338.3825939 219.74414 337.2437439
+\l 219.98633 337.1851499
+\l 224.3418 354.6480408
+\l 224.09961 354.7105408
+\c 213.92574 357.2464408 203.53016 358.89105015 193.07031 359.62265015
+\l 192.82031 359.63827515
+\l 191.94922 347.1617129
+\c 188.1376 347.4218129 184.31545 347.5621029 180.49414 347.5621029
+\c 176.67283 347.5621029 172.85068 347.4218249 169.03906 347.1617129
+\l 168.16797 359.63827515
+
+\m 167.70508 359.09921265
+\l 168.57812 346.6363219
+\l 168.82617 346.6558529
+\c 172.70797 346.9263909 176.60232 347.0640559 180.49414 347.0640559
+\c 184.38596 347.0640559 188.28031 346.9263409 192.16211 346.6558529
+\l 192.41016 346.6382749
+\l 193.28125 359.0953064
+\c 203.54496 358.3630314 213.74695 356.7496564 223.73438 354.2749939
+\l 219.62305 337.7769469
+\c 215.19266 338.8725849 210.704 339.7863409 206.19727 340.5074159
+\l 206.90234 344.9585879
+\c 209.69929 344.5127499 212.49696 343.9955439 215.26953 343.4078059
+\l 215.51172 343.3570249
+\l 217.17578 351.1792908
+\l 216.93164 351.230072
+\c 210.95237 352.5002345 204.89094 353.4647408 198.8125 354.1011658
+\l 198.5625 354.1265564
+\l 196.42188 333.7398379
+\l 196.66797 333.7163999
+\c 206.51702 332.6821499 216.27132 330.6953719 225.74023 327.8003849
+\l 225.97656 327.7281189
+\l 233.28516 351.6265564
+\c 248.13425 347.0657939 262.3482 340.5893309 275.53516 332.3765559
+\l 268.91406 321.7808529
+\l 269.125 321.6480409
+\c 272.42482 319.5859909 275.65605 317.4073219 278.80273 315.1206969
+\c 281.94941 312.8340469 285.02308 310.4342349 288.00391 307.9331969
+\l 288.19336 307.7710879
+\l 296.2207 317.3394469
+\c 304.09344 310.7152469 311.39924 303.4094459 318.02344 295.5367129
+\l 304.99805 284.6089779
+\c 302.05964 288.1005699 298.96884 291.4778759 295.74609 294.7105409
+\l 298.93164 297.8960879
+\c 300.9324 295.8892809 302.89076 293.8293489 304.78516 291.7242129
+\l 304.95117 291.5386659
+\l 310.89648 296.8902279
+\l 310.72852 297.0757749
+\c 306.63977 301.6164699 302.30046 305.9557749 297.75977 310.0445249
+\l 297.57422 310.2124939
+\l 283.85742 294.9781189
+\l 284.04297 294.8121029
+\c 291.4009 288.1861869 298.12794 280.8529719 304.08789 272.9449159
+\l 304.23633 272.7437439
+\l 324.19727 287.7867129
+\c 333.52857 275.3669639 341.22043 261.7724519 347.05859 247.3765539
+\l 335.47461 242.6929639
+\l 335.56641 242.4644439
+\c 337.02363 238.8583239 338.35856 235.1941639 339.56055 231.4937439
+\c 340.76257 227.7931639 341.84215 224.0454339 342.78125 220.2710839
+\l 342.83984 220.0289039
+\l 354.95898 223.0503839
+\c 357.43365 213.0629539 359.04702 202.8609739 359.7793 192.5972639
+\l 342.82031 191.4117139
+\c 342.49685 195.9653039 341.97498 200.5135839 341.26758 205.0230439
+\l 345.71875 205.7281239
+\c 346.15634 202.9294939 346.53699 200.1091639 346.83203 197.2925739
+\l 346.85547 197.0445239
+\l 354.81055 197.8785139
+\l 354.78516 198.1285139
+\c 354.14873 204.2069439 353.18424 210.2683739 351.91406 216.2476539
+\l 351.86328 216.4917939
+\l 331.81445 212.2300739
+\l 331.86523 211.9859339
+\c 333.92431 202.2997739 335.05031 192.4104139 335.22266 182.5093639
+\l 335.22852 182.2613239
+\l 360.21484 182.6988239
+\c 360.46198 167.1646139 358.69608 151.6483339 354.96094 136.5679639
+\l 342.83984 139.5894439
+\l 342.78125 139.3492139
+\c 341.84216 135.5748639 340.76258 131.8251839 339.56055 128.1246039
+\c 338.35856 124.4241939 337.02754 120.7619739 335.57031 117.1558539
+\l 335.47461 116.9273339
+\l 347.05664 112.2456939
+\c 343.18885 102.7092739 338.49698 93.5052839 333.05664 84.7710839
+\l 318.63867 93.7789039
+\c 321.05156 97.6540039 323.30727 101.6417139 325.38477 105.7066339
+\l 329.39844 103.6597639
+\c 328.10979 101.1369539 326.75579 98.6376739 325.33984 96.1851539
+\l 325.21484 95.9664039
+\l 332.14258 91.9683539
+\l 332.26562 92.1851539
+\c 335.32217 97.4772639 338.10946 102.9452439 340.59375 108.5289039
+\l 340.69336 108.7554639
+\l 321.96875 117.0933539
+\l 321.86914 116.8648339
+\c 317.84312 107.8186339 312.93878 99.1596039 307.25977 91.0484339
+\l 307.11719 90.8433539
+\l 327.5918 76.5074139
+\c 318.66511 63.7954339 308.11018 52.2790239 296.22461 42.2789039
+\l 288.19336 51.8492139
+\l 288.00391 51.6871039
+\c 285.02308 49.1860639 281.94941 46.7862539 278.80273 44.4996039
+\c 275.65605 42.2129739 272.42482 40.0343139 269.125 37.9722639
+\l 268.91406 37.8394439
+\l 275.5332 27.2456939
+\c 266.799 21.8053639 257.59306 17.1154339 248.05664 13.2476539
+\l 241.6875 29.0113239
+\c 245.9169 30.7265739 250.08657 32.6287239 254.15625 34.6929639
+\l 256.20117 30.6792939
+\c 253.67445 29.3980639 251.10983 28.1675739 248.52148 27.0171839
+\l 248.29492 26.9175739
+\l 251.54883 19.6089739
+\l 251.77539 19.7105439
+\c 257.35904 22.1948239 262.82702 24.9801639 268.11914 28.0367139
+\l 268.33594 28.1617139
+\l 258.08594 45.9136639
+\l 257.86914 45.7886639
+\c 249.29278 40.8369539 240.23958 36.7091039 230.87695 33.4859339
+\l 230.64258 33.4058539
+\l 238.7793 9.7749939
+\c 224.08305 4.7396739 208.77763 1.6254739 193.28125 0.5210839
+\l 192.41016 12.9839739
+\l 192.16211 12.9644439
+\c 188.28031 12.6939139 184.38596 12.5562439 180.49414 12.5562439
+\c 176.60232 12.5562439 172.70797 12.6939239 168.82617 12.9644439
+\l 168.57812 12.9820239
+\l 167.70508 0.5249939
+\c 157.44137 1.2572739 147.24134 2.8706439 137.25391 5.3453039
+\l 141.36523 21.8433539
+\c 145.79562 20.7477139 150.28428 19.8320039 154.79102 19.1109339
+\l 154.08594 14.6617139
+\c 151.28899 15.1075539 148.49132 15.6228039 145.71875 16.2105439
+\l 145.47656 16.2632739
+\l 143.8125 8.4410139
+\l 144.05664 8.3882739
+\c 150.03592 7.1181139 156.09734 6.1536039 162.17578 5.5171839
+\l 162.42578 5.4937439
+\l 164.56641 25.8785139
+\l 164.32031 25.9039039
+\c 154.47126 26.9381539 144.71696 28.9249239 135.24805 31.8199139
+\l 135.00977 31.8921839
+\l 127.70312 7.9937439
+\c 112.85403 12.5545039 98.640077 19.0309639 85.453125 27.2437439
+\l 92.074219 37.8394439
+\l 91.863281 37.9722639
+\c 88.563456 40.0343139 85.332231 42.2129739 82.185547 44.4996039
+\c 79.038869 46.7862539 75.965201 49.1860639 72.984375 51.6871039
+\l 72.792969 51.8492139
+\l 64.765625 42.2808539
+\c 56.892891 48.9050539 49.589044 56.2089039 42.964844 64.0816339
+\l 55.990234 75.0093639
+\c 58.928644 71.5177739 62.019441 68.1424239 65.242188 64.9097639
+\l 62.056641 61.7242139
+\c 60.055879 63.7310139 58.095568 65.7909539 56.201172 67.8960839
+\l 56.035156 68.0816339
+\l 50.091797 62.7300739
+\l 50.259766 62.5445239
+\c 54.348516 58.0038339 58.687821 53.6645239 63.228516 49.5757739
+\l 63.414062 49.4078039
+\l 77.128906 64.6421839
+\l 76.943359 64.8081939
+\c 69.585433 71.4341139 62.860339 78.7673239 56.900391 86.6753839
+\l 56.751953 86.8746039
+\l 36.791016 71.8335839
+\c 27.459716 84.2533339 19.767838 97.8478539 13.929688 112.2437439
+\l 25.513672 116.9273339
+\l 25.419922 117.1558539
+\c 23.962697 120.7619739 22.627769 124.4241839 21.425781 128.1246039
+\c 20.223756 131.8251839 19.146131 135.5748639 18.207031 139.3492139
+\l 18.148438 139.5894439
+\l 6.0292969 136.5699139
+\c 3.5546344 146.5573439 1.9412594 156.7573739 1.2089844 167.0210839
+\l 18.167969 168.2085839
+\c 18.491431 163.6549939 19.013303 159.1067239 19.720703 154.5972639
+\l 15.269531 153.8921839
+\c 14.831944 156.6908039 14.451288 159.5111439 14.15625 162.3277239
+\l 14.130859 162.5757739
+\l 6.1777344 161.7417939
+\l 6.2011719 161.4917939
+\c 6.8375969 155.4133539 7.8020906 149.3519239 9.0722656 143.3726539
+\l 9.125 143.1285139
+\l 29.173828 147.3902239
+\l 29.121094 147.6343639
+\c 27.062019 157.3205239 25.937975 167.2079339 25.765625 177.1089739
+\l 25.759766 177.3589739
+\l 0.77148438 176.9214739
+\c 0.52434688 192.4556839 2.2902531 207.9719639 6.0253906 223.0523339
+\l 18.146484 220.0289039
+\l 18.205078 220.2710839
+\c 19.144166 224.0454339 20.223744 227.7931639 21.425781 231.4937439
+\c 22.627769 235.1941539 23.960744 238.8583239 25.417969 242.4644439
+\l 25.513672 242.6929639
+\l 13.931641 247.3726539
+\c 17.799428 256.9090739 22.48935 266.1150139 27.929688 274.8492129
+\l 42.349609 265.8394469
+\c 39.936722 261.9643459 37.681016 257.9785839 35.603516 253.9136639
+\l 31.589844 255.9605439
+\c 32.878494 258.4833439 34.232487 260.9826209 35.648438 263.4351499
+\l 35.771484 263.6519469
+\l 28.845703 267.6519469
+\l 28.720703 267.4351499
+\c 25.664153 262.1430339 22.878819 256.6750539 20.394531 251.0914039
+\l 20.292969 250.8648339
+\l 39.019531 242.5269439
+\l 39.119141 242.7535139
+\c 43.145166 251.7997139 48.049503 260.4606949 53.728516 268.5718689
+\l 53.871094 268.7769469
+\l 33.396484 283.1128849
+\c 42.323172 295.8248699 52.878102 307.3412749 64.763672 317.3413999
+\l 72.792969 307.7710879
+\l 72.984375 307.9331969
+\c 75.965201 310.4342349 79.038869 312.8340469 82.185547 315.1206969
+\c 85.332231 317.4073219 88.563456 319.5859909 91.863281 321.6480409
+\l 92.074219 321.7808529
+\l 85.455078 332.3726499
+\c 94.189277 337.8129879 103.39327 342.5048629 112.92969 346.3726499
+\l 119.30078 330.6089779
+\c 115.07139 328.8937279 110.90171 326.9915749 106.83203 324.9273379
+\l 104.78516 328.9410099
+\c 107.31187 330.2222349 109.87845 331.4527319 112.4668 332.6031189
+\l 112.69336 332.7027279
+\l 109.43945 340.0093689
+\l 109.21289 339.9097599
+\c 103.62924 337.4254719 98.161257 334.6381849 92.869141 331.5816349
+\l 92.652344 331.4585879
+\l 102.90039 313.7066349
+\l 103.11914 313.8316349
+\c 111.6955 318.7833469 120.7487 322.9092409 130.11133 326.1324159
+\l 130.3457 326.2144469
+\l 122.20703 349.8433533
+\c 136.90328 354.8786783 152.2087 357.9948251 167.70508 359.09921265
+
+\m 162.42578 354.1265564
+\l 162.17578 354.1011658
+\c 151.02194 352.9299033 139.97912 350.680397 129.25586 347.4019469
+\l 129.01758 347.3296819
+\l 136.32812 323.4136659
+\c 123.94389 319.6060779 112.08863 314.2040749 101.08789 307.3570249
+\l 94.458984 317.9644469
+\l 94.248047 317.8316349
+\c 91.037021 315.8250849 87.894071 313.7051849 84.832031 311.4800719
+\c 81.769996 309.2549469 78.779479 306.9157109 75.878906 304.4820249
+\l 75.689453 304.3238219
+\l 83.728516 294.7398379
+\c 77.171123 289.2191889 71.085102 283.1331679 65.564453 276.5757749
+\l 52.539062 287.5035099
+\c 55.561868 291.0957399 58.74294 294.5685709 62.058594 297.8941349
+\l 65.240234 294.7124939
+\c 63.294899 292.7610859 61.390754 290.7573799 59.548828 288.7105409
+\l 59.380859 288.5249939
+\l 65.326172 283.1734319
+\l 65.492188 283.3589779
+\c 69.10265 287.3685209 72.933817 291.2016409 76.943359 294.8121029
+\l 77.128906 294.9781189
+\l 63.414062 310.2124939
+\l 63.228516 310.0445249
+\c 54.895966 302.5409419 47.280775 294.2365719 40.53125 285.2808529
+\l 40.380859 285.0816349
+\l 60.351562 270.0288999
+\c 52.571726 259.6679739 46.157881 248.3293739 41.285156 236.3238239
+\l 29.685547 241.0093639
+\l 29.59375 240.7769439
+\c 28.175737 237.2679639 26.876744 233.7040939 25.707031 230.1031239
+\c 24.537394 226.5022939 23.490084 222.8562939 22.576172 219.1831939
+\l 22.515625 218.9410139
+\l 34.65625 215.9136639
+\c 32.59655 207.5913439 31.251147 199.0923639 30.638672 190.5406239
+\l 13.677734 191.7261639
+\c 14.010209 196.4082139 14.543972 201.0891639 15.271484 205.7261639
+\l 19.714844 205.0249939
+\c 19.289394 202.3035339 18.919813 199.5617039 18.632812 196.8218639
+\l 18.609375 196.5718639
+\l 26.5625 195.7378839
+\l 26.587891 195.9839739
+\c 27.149841 201.3511139 27.999469 206.7059339 29.121094 211.9859339
+\l 29.173828 212.2300739
+\l 9.125 216.4917939
+\l 9.0722656 216.2476539
+\c 6.7404531 205.2783639 5.4647563 194.0813939 5.2695312 182.8687439
+\l 5.2636719 182.6206939
+\l 30.271484 182.1851539
+\c 30.068659 169.2278739 31.540456 156.2862339 34.652344 143.7066339
+\l 22.515625 140.6792939
+\l 22.576172 140.4371039
+\c 23.490084 136.7640039 24.537394 133.1180039 25.707031 129.5171839
+\c 26.876744 125.9162039 28.175737 122.3523239 29.59375 118.8433539
+\l 29.685547 118.6109339
+\l 41.287109 123.2964739
+\c 44.511797 115.3523739 48.418719 107.6837839 52.949219 100.4058539
+\l 38.533203 91.3960839
+\c 36.051803 95.3809939 33.727959 99.4797539 31.591797 103.6597639
+\l 35.599609 105.7027239
+\c 36.852984 103.2491739 38.169987 100.8199739 39.546875 98.4351539
+\l 39.671875 98.2183539
+\l 46.597656 102.2164039
+\l 46.472656 102.4351539
+\c 43.773694 107.1081839 41.312778 111.9344439 39.119141 116.8648339
+\l 39.019531 117.0933539
+\l 20.292969 108.7554639
+\l 20.394531 108.5289039
+\c 24.953956 98.2842239 30.506213 88.4762439 36.9375 79.2906239
+\l 37.078125 79.0855439
+\l 57.564453 93.4273339
+\c 65.013297 82.8260739 73.816784 73.2225139 83.728516 64.8785139
+\l 75.689453 55.2964739
+\l 75.878906 55.1363239
+\c 78.779479 52.7026239 81.769996 50.3653539 84.832031 48.1402239
+\c 87.894059 45.9151239 91.037021 43.7932639 94.248047 41.7867139
+\l 94.458984 41.6558539
+\l 101.08984 52.2652239
+\c 108.36777 47.7347239 116.03637 43.8278039 123.98047 40.6031239
+\l 117.61328 24.8394439
+\c 113.26256 26.6037139 108.97574 28.5593639 104.78906 30.6831939
+\l 106.83203 34.6910139
+\c 109.28781 33.4459239 111.78037 32.2489139 114.29688 31.1304639
+\l 114.52539 31.0289039
+\l 117.77734 38.3355439
+\l 117.54883 38.4351539
+\c 112.61843 40.6287839 107.79218 43.0897039 103.11914 45.7886639
+\l 102.90039 45.9136639
+\l 92.652344 28.1617139
+\l 92.869141 28.0367139
+\c 102.58155 22.4290839 112.83257 17.7552639 123.43555 14.1050739
+\l 123.67188 14.0230439
+\l 131.81445 37.6714739
+\c 144.07326 33.4752139 156.83888 30.8734939 169.76367 29.9488239
+\l 168.89258 17.4742139
+\l 169.13867 17.4566339
+\c 172.91578 17.1933939 176.7069 17.0581939 180.49414 17.0581939
+\c 184.28138 17.0581939 188.0725 17.1934739 191.84961 17.4566339
+\l 192.0957 17.4742139
+\l 191.22461 29.9546839
+\c 199.77636 30.5671539 208.27534 31.9125639 216.59766 33.9722639
+\l 220.70898 17.4742139
+\c 216.15159 16.3470239 211.5363 15.4070839 206.90039 14.6656239
+\l 206.19922 19.1089739
+\c 208.91819 19.5425739 211.63756 20.0436639 214.33203 20.6148339
+\l 214.57617 20.6675739
+\l 212.91406 28.4898339
+\l 212.66992 28.4371039
+\c 207.38992 27.3154639 202.0351 26.4658639 196.66797 25.9039039
+\l 196.42188 25.8785139
+\l 198.5625 5.4937439
+\l 198.8125 5.5191339
+\c 209.96634 6.6903939 221.00917 8.9399039 231.73242 12.2183539
+\l 231.9707 12.2906239
+\l 224.6582 36.2066339
+\c 237.04244 40.0142239 248.89965 45.4162239 259.90039 52.2632739
+\l 266.5293 41.6558539
+\l 266.73828 41.7886639
+\c 269.94931 43.7952139 273.09421 45.9151139 276.15625 48.1402239
+\c 279.21828 50.3653539 282.20685 52.7026339 285.10742 55.1363239
+\l 285.29883 55.2964739
+\l 277.25977 64.8804639
+\c 283.81716 70.4011139 289.90318 76.4871339 295.42383 83.0445239
+\l 308.44727 72.1167939
+\c 305.42446 68.5245639 302.24534 65.0517339 298.92969 61.7261639
+\l 295.74805 64.9078039
+\c 297.69338 66.8592139 299.59753 68.8609639 301.43945 70.9078039
+\l 301.60742 71.0933539
+\l 295.66211 76.4449139
+\l 295.49609 76.2593639
+\c 291.88563 72.2498239 288.05251 68.4186639 284.04297 64.8081939
+\l 283.85742 64.6421839
+\l 297.57422 49.4078039
+\l 297.75977 49.5757739
+\c 306.09232 57.0793539 313.70751 65.3837239 320.45703 74.3394439
+\l 320.60547 74.5386639
+\l 300.63477 89.5894439
+\c 308.4146 99.9503739 314.8304 111.2909239 319.70312 123.2964739
+\l 331.30273 118.6109339
+\l 331.39453 118.8433539
+\c 332.81254 122.3523339 334.11154 125.9162039 335.28125 129.5171839
+\c 336.45089 133.1180039 337.4982 136.7640039 338.41211 140.4371039
+\l 338.47266 140.6792939
+\l 326.33203 143.7066339
+\c 328.39173 152.0289539 329.73713 160.5279339 330.34961 169.0796839
+\l 347.31055 167.8941339
+\c 346.97807 163.2120939 346.44431 158.5311439 345.7168 153.8941339
+\l 341.27344 154.5953039
+\c 341.69889 157.3167639 342.06652 160.0585939 342.35352 162.7984339
+\l 342.37891 163.0464739
+\l 334.42383 163.8824139
+\l 334.40039 163.6363239
+\c 333.83844 158.2691839 332.98686 152.9143739 331.86523 147.6343639
+\l 331.81445 147.3902239
+\l 351.86328 143.1285139
+\l 351.91406 143.3726539
+\c 354.24587 154.3419339 355.52353 165.5389139 355.71875 176.7515539
+\l 355.72266 176.9996039
+\l 330.7168 177.4351539
+\c 330.91962 190.3924239 329.44782 203.3340639 326.33594 215.9136639
+\l 338.47266 218.9410139
+\l 338.41211 219.1831939
+\c 337.4982 222.8562939 336.45089 226.5022939 335.28125 230.1031239
+\c 334.11154 233.7040939 332.81254 237.2679839 331.39453 240.7769439
+\l 331.30273 241.0093639
+\l 319.70117 236.3238239
+\c 316.47648 244.2679239 312.56761 251.9365139 308.03711 259.2144439
+\l 322.45508 268.2222599
+\c 324.93648 264.2373519 327.25837 260.1405459 329.39453 255.9605439
+\l 325.38867 253.9156239
+\c 324.1353 256.3691739 322.81829 258.8003239 321.44141 261.1851499
+\l 321.31641 261.4019469
+\l 314.39062 257.4019439
+\l 314.51562 257.1851539
+\c 317.21459 252.5121139 319.6755 247.6839039 321.86914 242.7535139
+\l 321.96875 242.5269439
+\l 340.69336 250.8648339
+\l 340.59375 251.0914039
+\c 336.03433 261.3360719 330.48207 271.1440539 324.05078 280.3296819
+\l 323.91016 280.5347599
+\l 303.42383 266.1910099
+\c 295.97498 276.7922769 287.1715 286.3977819 277.25977 294.7417909
+\l 285.29883 304.3238219
+\l 285.10742 304.4820249
+\c 282.20685 306.9157239 279.21828 309.2549469 276.15625 311.4800719
+\c 273.09422 313.7051719 269.94931 315.8250849 266.73828 317.8316349
+\l 266.5293 317.9644469
+\l 259.89844 307.3531189
+\c 252.62051 311.8836189 244.95191 315.7924939 237.00781 319.0171819
+\l 243.375 334.7808529
+\c 247.72572 333.0165909 252.01254 331.0589879 256.19922 328.9351499
+\l 254.15625 324.9292909
+\c 251.70047 326.1743779 249.20595 327.3713879 246.68945 328.4898379
+\l 246.46289 328.5913999
+\l 243.21094 321.2847599
+\l 243.4375 321.1851499
+\c 248.3679 318.9915129 253.19611 316.5305969 257.86914 313.8316349
+\l 258.08594 313.7066349
+\l 268.33594 331.4585879
+\l 268.11914 331.5816349
+\c 258.40673 337.1892599 248.15572 341.8650409 237.55273 345.5152279
+\l 237.31445 345.5953059
+\l 229.17383 321.9488219
+\c 216.91502 326.1450849 204.1494 328.7468029 191.22461 329.6714779
+\l 192.0957 342.1460879
+\l 191.84961 342.1636659
+\c 188.0725 342.4269029 184.28138 342.5621029 180.49414 342.5621029
+\c 176.7069 342.5621029 172.91578 342.4268659 169.13867 342.1636659
+\l 168.89258 342.1460879
+\l 169.76367 329.6656189
+\c 161.21192 329.0531439 152.71295 327.7077409 144.39062 325.6480409
+\l 140.2793 342.1460879
+\c 144.83669 343.2732749 149.45198 344.2132189 154.08789 344.9546819
+\l 154.78906 340.5113219
+\c 152.07009 340.0777219 149.35072 339.5746849 146.65625 339.0035099
+\l 146.41211 338.9527279
+\l 148.07422 331.1304629
+\l 148.31836 331.1812439
+\c 153.59836 332.3028809 158.95318 333.1544379 164.32031 333.7163999
+\l 164.56641 333.7398379
+\l 162.42578 354.1265564
+
+\m 161.98047 353.5679627
+\l 164.02148 334.1695249
+\c 158.8018 333.6144379 153.59806 332.7893469 148.46094 331.7066349
+\l 147.00586 338.5640559
+\c 149.69362 339.1296689 152.40334 339.6364309 155.11328 340.0640559
+\l 155.35742 340.1031189
+\l 154.49805 345.5347599
+\l 154.25195 345.4956969
+\c 149.43719 344.7329099 144.64236 343.7590849 139.91211 342.5816349
+\l 139.67188 342.5191349
+\l 144.02344 325.0562439
+\l 144.26562 325.1148379
+\c 152.71794 327.2216379 161.35684 328.5890689 170.04688 329.1968689
+\l 170.29688 329.2144469
+\l 169.42188 341.6773379
+\c 173.1061 341.9285749 176.80092 342.0640559 180.49414 342.0640559
+\c 184.18736 342.0640559 187.88218 341.9283129 191.56641 341.6773379
+\l 190.69141 329.2144469
+\l 190.94141 329.1968689
+\c 203.99125 328.2851439 216.8791 325.6609249 229.24805 321.4038999
+\l 229.48633 321.3238219
+\l 237.62109 344.9527279
+\c 248.03105 341.3522409 258.09817 336.7598779 267.64648 331.2652279
+\l 257.89648 314.3726499
+\c 253.34763 316.9900999 248.65476 319.3838309 243.86328 321.5249939
+\l 246.71289 327.9273379
+\c 249.22032 326.8079999 251.70954 325.6234719 254.15625 324.3785099
+\l 254.37891 324.2652279
+\l 256.87305 329.1656189
+\l 256.65039 329.2769469
+\c 252.30672 331.4884469 247.85451 333.5221349 243.33398 335.3472599
+\l 243.10352 335.4390559
+\l 236.36133 318.7535099
+\l 236.5918 318.6578059
+\c 244.66938 315.3947819 252.46406 311.4259249 259.85156 306.8101499
+\l 260.0625 306.6753849
+\l 266.68359 317.2710879
+\c 269.81124 315.3099129 272.87802 313.2470529 275.86328 311.0777279
+\c 278.8489 308.9081409 281.76166 306.6243359 284.59375 304.2554629
+\l 276.5625 294.6851499
+\l 276.75391 294.5269469
+\c 286.7738 286.1203009 295.66228 276.4211429 303.16406 265.7066349
+\l 303.30664 265.5015559
+\l 323.77539 279.8335879
+\c 330.08057 270.8007769 335.5319 261.1685729 340.02539 251.1109339
+\l 322.20703 243.1792939
+\c 320.06587 247.9707639 317.67409 252.6636439 315.05664 257.2124939
+\l 321.12891 260.7163999
+\c 322.49769 258.3372639 323.81791 255.9181739 325.0625 253.4722639
+\l 325.17578 253.2496039
+\l 330.07422 255.7456939
+\l 329.96094 255.9664039
+\c 327.74931 260.3102779 325.33658 264.5708369 322.75391 268.7046819
+\l 322.62305 268.9156189
+\l 307.35938 259.3785139
+\l 307.49414 259.1675739
+\c 312.10992 251.7800639 316.07877 243.9853839 319.3418 235.9078039
+\l 319.4375 235.6773339
+\l 331.01953 240.3570239
+\c 332.39697 236.9334339 333.66822 233.4595239 334.80859 229.9488239
+\c 335.94909 226.4377339 336.96261 222.8803839 337.85938 219.3003839
+\l 325.74023 216.2789039
+\l 325.79883 216.0386639
+\c 328.96133 203.3452739 330.44887 190.2745139 330.22266 177.1949139
+\l 330.2207 176.9468639
+\l 355.20312 176.5113239
+\c 354.99555 165.4965539 353.74416 154.4995339 351.46875 143.7203039
+\l 332.39062 147.7769439
+\c 333.47333 152.9140739 334.29844 158.1178039 334.85352 163.3374939
+\l 341.82617 162.6031239
+\c 341.53575 159.8737239 341.17575 157.1396739 340.74805 154.4292939
+\l 340.71094 154.1831939
+\l 346.14062 153.3238239
+\l 346.17969 153.5679639
+\c 346.94245 158.3827039 347.49805 163.2454339 347.83594 168.1089739
+\l 347.85156 168.3550739
+\l 329.89844 169.6128839
+\l 329.88086 169.3628839
+\c 329.27306 160.6728439 327.90563 152.0339439 325.79883 143.5816339
+\l 325.74023 143.3394439
+\l 337.85938 140.3199139
+\c 336.96261 136.7399139 335.94909 133.1825639 334.80859 129.6714739
+\c 333.66822 126.1607739 332.39697 122.6868739 331.01953 119.2632739
+\l 319.4375 123.9429639
+\l 319.3418 123.7105439
+\c 314.44268 111.5815639 307.96573 100.1323539 300.09375 89.6851539
+\l 299.94531 89.4878839
+\l 319.90039 74.4468639
+\c 313.2582 65.6598939 305.77748 57.5047939 297.60352 50.1226539
+\l 284.55078 64.6148339
+\c 288.44492 68.1327339 292.17156 71.8574239 295.68945 75.7515539
+\l 300.89844 71.0601539
+\c 299.05883 69.0221839 297.16639 67.0195339 295.22461 65.0777239
+\l 295.04688 64.9019439
+\l 298.93555 61.0152239
+\l 299.11133 61.1910139
+\c 302.55923 64.6389039 305.86497 68.2454839 308.99805 71.9800739
+\l 309.1582 72.1714739
+\l 295.36914 83.7398339
+\l 295.21094 83.5503839
+\c 289.61262 76.8780939 283.42619 70.6916739 276.75391 65.0933539
+\l 276.5625 64.9351539
+\l 284.59375 55.3648339
+\c 281.76166 52.9959739 278.8489 50.7121639 275.86328 48.5425739
+\c 272.878 46.3732339 269.81124 44.3103839 266.68359 42.3492139
+\l 260.0625 52.9449139
+\l 259.85156 52.8101539
+\c 248.75767 45.8796239 236.78562 40.4259839 224.27734 36.6031239
+\l 224.03906 36.5289039
+\l 231.3457 12.6324139
+\c 220.80738 9.4269639 209.96268 7.2186339 199.00781 6.0523339
+\l 196.9668 25.4507739
+\c 202.18649 26.0058639 207.39022 26.8309539 212.52734 27.9136639
+\l 213.98242 21.0562439
+\c 211.29466 20.4906339 208.58494 19.9838639 205.875 19.5562439
+\l 205.63086 19.5171839
+\l 206.49023 14.0855439
+\l 206.73633 14.1246039
+\c 211.55109 14.8873939 216.34397 15.8612139 221.07422 17.0386639
+\l 221.31641 17.0992139
+\l 216.96289 34.5640539
+\l 216.72266 34.5054639
+\c 208.27035 32.3986639 199.63145 31.0312339 190.94141 30.4234339
+\l 190.69141 30.4058539
+\l 191.56641 17.9429639
+\c 187.88218 17.6917239 184.18736 17.5562439 180.49414 17.5562439
+\c 176.80092 17.5562439 173.1061 17.6920039 169.42188 17.9429639
+\l 170.29688 30.4058539
+\l 170.04688 30.4234339
+\c 156.99703 31.3351539 144.10723 33.9593739 131.73828 38.2164039
+\l 131.50195 38.2964739
+\l 123.36719 14.6675739
+\c 112.95723 18.2680639 102.88816 22.8604239 93.339844 28.3550739
+\l 103.0918 45.2476539
+\c 107.64065 42.6302039 112.33352 40.2364639 117.125 38.0953039
+\l 114.27539 31.6929639
+\c 111.76797 32.8123039 109.27874 33.9968239 106.83203 35.2417939
+\l 106.60938 35.3550739
+\l 104.11523 30.4546839
+\l 104.33594 30.3414039
+\c 108.67961 28.1299039 113.13377 26.0981639 117.6543 24.2730439
+\l 117.88477 24.1792939
+\l 124.62695 40.8667939
+\l 124.39453 40.9624939
+\c 116.31695 44.2255239 108.52423 48.1943739 101.13672 52.8101539
+\l 100.92578 52.9449139
+\l 94.304688 42.3492139
+\c 91.177039 44.3103839 88.110266 46.3732439 85.125 48.5425739
+\c 82.139379 50.7121639 79.226616 52.9959639 76.394531 55.3648339
+\l 84.423828 64.9351539
+\l 84.234375 65.0933539
+\c 74.214481 73.5000039 65.324044 83.1991539 57.822266 93.9136639
+\l 57.681641 94.1187439
+\l 37.212891 79.7847639
+\c 30.907716 88.8175739 25.456378 98.4517239 20.962891 108.5093639
+\l 38.779297 116.4410139
+\c 40.920459 111.6495339 43.314191 106.9566639 45.931641 102.4078039
+\l 39.859375 98.9039039
+\c 38.490588 101.2830339 37.170369 103.7021339 35.925781 106.1480439
+\l 35.810547 106.3706939
+\l 30.914062 103.8746039
+\l 31.025391 103.6519439
+\c 33.237016 99.3080739 35.649747 95.0494639 38.232422 90.9156239
+\l 38.365234 90.7027239
+\l 53.628906 100.2417939
+\l 53.494141 100.4527239
+\c 48.878366 107.8402339 44.909509 115.6329639 41.646484 123.7105439
+\l 41.550781 123.9429639
+\l 29.96875 119.2632739
+\c 28.591313 122.6868639 27.320063 126.1607739 26.179688 129.6714739
+\c 25.039187 133.1825639 24.025669 136.7399139 23.128906 140.3199139
+\l 35.248047 143.3394439
+\l 35.189453 143.5816339
+\c 32.026953 156.2750239 30.539412 169.3457939 30.765625 182.4253839
+\l 30.767578 182.6734339
+\l 5.7851562 183.1089739
+\c 5.9927313 194.1237539 7.2441187 205.1188139 9.5195312 215.8980439
+\l 28.597656 211.8433539
+\c 27.514956 206.7062339 26.687887 201.5024939 26.132812 196.2828039
+\l 19.160156 197.0171839
+\c 19.450581 199.7465839 19.812534 202.4806239 20.240234 205.1910139
+\l 20.277344 205.4371039
+\l 14.847656 206.2964739
+\l 14.808594 206.0523339
+\c 14.045831 201.2375939 13.490231 196.3748639 13.152344 191.5113239
+\l 13.134766 191.2652239
+\l 31.089844 190.0074139
+\l 31.107422 190.2574139
+\c 31.715222 198.9474539 33.082653 207.5863539 35.189453 216.0386639
+\l 35.248047 216.2789039
+\l 23.128906 219.3003839
+\c 24.025669 222.8803839 25.039187 226.4377339 26.179688 229.9488239
+\c 27.320063 233.4595239 28.591312 236.9334239 29.96875 240.3570239
+\l 41.550781 235.6773339
+\l 41.646484 235.9078039
+\c 46.545597 248.0367839 53.022554 259.4879439 60.894531 269.9351499
+\l 61.042969 270.1324159
+\l 41.087891 285.1734319
+\c 47.730078 293.9604059 55.210803 302.1155019 63.384766 309.4976499
+\l 76.435547 295.0054629
+\c 72.541409 291.4875679 68.816723 287.7609279 65.298828 283.8667909
+\l 60.087891 288.5601499
+\c 61.927502 290.5981129 63.819964 292.5988169 65.761719 294.5406189
+\l 65.941406 294.7163999
+\l 62.050781 298.6031189
+\l 61.875 298.4273379
+\c 58.427094 294.9794449 55.123309 291.3748149 51.990234 287.6402279
+\l 51.830078 287.4488219
+\l 65.619141 275.8785099
+\l 65.777344 276.0699159
+\c 71.375661 282.7422019 77.562089 288.9286299 84.234375 294.5269469
+\l 84.423828 294.6851499
+\l 76.394531 304.2554629
+\c 79.226616 306.6243239 82.139379 308.9081409 85.125 311.0777279
+\c 88.110279 313.2470659 91.177039 315.3099129 94.304688 317.2710879
+\l 100.92578 306.6753849
+\l 101.13672 306.8101499
+\c 112.23061 313.7406749 124.20071 319.1943189 136.70898 323.0171819
+\l 136.94922 323.0913999
+\l 129.64258 346.9878849
+\c 140.1809 350.1933345 151.0256 352.4016627 161.98047 353.5679627
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han55.pgf b/graphics/pgf/contrib/pgfornament-han/han/han55.pgf
new file mode 100644
index 0000000000..e40430c51f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han55.pgf
@@ -0,0 +1,79 @@
+% han55.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\r 0 0 200 200
+\ubb
+
+\m 100.25 200.25
+\c 45.02 200.25 0.25 155.48 0.25 100.25
+\l 100.25 100.25
+\l 100.25 200.25
+
+\m 115.25 199.12
+\l 115.25 70.25
+\l 195.64 70.25
+\c 206.14 103.65 198.40 140.13 175.24 166.39
+\l 175.25 140.25
+\c 184.23 123.42 187.28 104.04 183.91 85.26
+\l 160.25 85.25
+\l 160.25 180.25
+\c 155.54 183.79 150.51 186.90 145.25 189.55
+\l 145.25 85.25
+\l 130.25 85.25
+\l 130.25 195.64
+\c 125.35 197.18 120.32 198.35 115.25 199.12
+
+\m 85.25 183.92
+\l 85.25 145.25
+\l 65.25 145.25
+\l 65.25 177.71
+\c 71.63 180.60 78.36 182.69 85.25 183.92
+
+\m 50.25 168.99
+\l 50.25 145.25
+\l 28.14 145.25
+\c 33.91 154.51 41.43 162.57 50.25 168.99
+
+\m 20.72 130.25
+\l 50.25 130.25
+\l 50.25 115.25
+\l 16.59 115.25
+\c 17.50 120.36 18.89 125.39 20.72 130.25
+
+\m 65.25 130.25
+\l 85.25 130.25
+\l 85.25 115.25
+\l 65.25 115.25
+\l 65.25 130.25
+
+\m 1.38 85.25
+\c 3.54 70.97 8.79 57.31 16.73 45.25
+\l 100.25 45.25
+\l 100.25 85.25
+\l 1.38 85.25
+
+\m 20.72 70.25
+\l 85.25 70.25
+\l 85.25 60.25
+\l 25.25 60.25
+\c 23.53 63.48 22.01 66.83 20.72 70.25
+
+\m 115.25 60.25
+\l 115.25 1.38
+\c 149.21 6.53 178.16 28.77 191.90 60.25
+\l 175.25 60.25
+\c 165.55 42.05 149.55 28.00 130.25 20.72
+\l 130.25 60.25
+\l 115.25 60.25
+
+\m 45.48 35.25
+\l 24.26 35.25
+\c 43.25 13.04 71.02 0.25 100.25 0.25
+\l 100.25 15.25
+\c 80.21 15.25 60.80 22.34 45.48 35.25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han56.pgf b/graphics/pgf/contrib/pgfornament-han/han/han56.pgf
new file mode 100644
index 0000000000..e8d1c8b8be
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han56.pgf
@@ -0,0 +1,74 @@
+% han56.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 100.25 200.25
+\c 45.02 200.25 0.25 155.48 0.25 100.25
+\c 0.25 45.02 45.02 0.25 100.25 0.25
+\c 155.48 0.25 200.25 45.02 200.25 100.25
+\c 200.25 155.48 155.48 200.25 100.25 200.25
+
+\m 106.25 188.05
+\c 141.00 185.68 171.10 163.01 182.98 130.26
+\l 152.25 130.25
+\l 152.25 118.25
+\l 186.39 118.25
+\c 188.87 106.38 188.87 94.12 186.39 82.25
+\l 152.25 82.25
+\l 152.25 70.25
+\l 182.98 70.25
+\c 171.10 37.50 141.01 14.83 106.25 12.45
+\l 106.25 46.25
+\l 134.60 46.25
+\c 129.11 42.75 123.10 40.11 116.81 38.43
+\l 119.92 26.84
+\c 137.82 31.63 153.35 42.81 163.59 58.25
+\l 36.91 58.25
+\c 47.15 42.81 62.68 31.63 80.58 26.84
+\l 83.69 38.43
+\c 77.40 40.11 71.39 42.76 65.90 46.25
+\l 94.25 46.25
+\l 94.25 12.45
+\c 59.49 14.82 29.40 37.49 17.52 70.24
+\l 48.25 70.25
+\l 48.25 82.25
+\l 14.11 82.25
+\c 11.63 94.12 11.63 106.38 14.11 118.25
+\l 48.25 118.25
+\l 48.25 130.25
+\l 17.52 130.25
+\c 29.39 163.00 59.49 185.67 94.25 188.04
+\l 94.25 154.25
+\l 65.90 154.25
+\c 71.39 157.74 77.40 160.39 83.68 162.07
+\l 80.58 173.66
+\c 62.68 168.86 47.15 157.69 36.91 142.25
+\l 163.59 142.25
+\c 153.35 157.69 137.82 168.87 119.92 173.66
+\l 116.81 162.07
+\c 123.10 160.39 129.10 157.74 134.59 154.25
+\l 106.25 154.25
+\l 106.25 188.05
+
+\m 60.25 130.25
+\l 60.25 118.25
+\l 140.25 118.25
+\l 140.25 130.25
+\l 60.25 130.25
+
+\m 25.25 106.25
+\l 25.25 94.25
+\l 175.25 94.25
+\l 175.25 106.25
+\l 25.25 106.25
+
+\m 60.25 82.25
+\l 60.25 70.25
+\l 140.25 70.25
+\l 140.25 82.25
+\l 60.25 82.25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han57.pgf b/graphics/pgf/contrib/pgfornament-han/han/han57.pgf
new file mode 100644
index 0000000000..464b0ed1ee
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han57.pgf
@@ -0,0 +1,131 @@
+% han57.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+%\begin{pspicture} 201.25 200.24
+
+\m 95.62 199.99
+\l 95.62 179.96
+\c 77.89 178.85 61.02 171.87 47.70 160.12
+\l 64.57 160.12
+\c 74.00 165.79 84.65 169.15 95.62 169.94
+\l 95.62 155.12
+\l 70.62 155.12
+\l 70.62 145.12
+\l 95.62 145.12
+\l 95.62 130.12
+\l 70.62 130.12
+\l 70.62 70.12
+\l 95.62 70.12
+\l 95.62 55.12
+\l 70.62 55.12
+\l 70.62 45.12
+\l 95.62 45.12
+\l 95.62 30.30
+\c 84.64 31.08 73.99 34.45 64.56 40.12
+\l 47.71 40.12
+\c 61.03 28.37 77.90 21.39 95.62 20.28
+\l 95.62 0.25
+\l 105.62 0.25
+\l 105.63 20.27
+\c 123.36 21.38 140.22 28.37 153.54 40.12
+\l 136.68 40.12
+\c 127.25 34.45 116.60 31.08 105.62 30.30
+\l 105.62 45.12
+\l 130.63 45.12
+\l 130.63 55.12
+\l 105.62 55.12
+\l 105.62 70.12
+\l 130.63 70.12
+\l 130.63 130.12
+\l 105.62 130.12
+\l 105.62 145.12
+\l 130.63 145.12
+\l 130.63 155.12
+\l 105.62 155.12
+\l 105.63 169.94
+\c 116.60 169.16 127.25 165.79 136.68 160.12
+\l 153.54 160.12
+\c 140.22 171.86 123.35 178.85 105.62 179.96
+\l 105.62 199.99
+\l 95.62 199.99
+
+\m 85.62 198.99
+\c 49.76 193.55 19.64 169.10 6.95 135.12
+\l 50.62 135.12
+\l 50.62 105.12
+\l 35.62 105.12
+\l 35.62 125.12
+\l 3.80 125.12
+\c 2.95 121.83 2.27 118.48 1.76 115.12
+\l 25.62 115.12
+\l 25.62 105.12
+\l 0.75 105.12
+\c 0.25 95.03 1.28 84.91 3.80 75.12
+\l 14.16 75.12
+\c 12.28 81.63 11.14 88.35 10.76 95.12
+\l 25.62 95.12
+\l 25.62 75.12
+\l 50.62 75.12
+\l 50.62 65.12
+\l 6.95 65.12
+\c 19.65 31.14 49.76 6.69 85.63 1.25
+\l 85.62 11.38
+\c 59.18 15.85 36.09 31.89 22.68 55.11
+\l 60.62 55.12
+\l 60.62 85.12
+\l 35.62 85.12
+\l 35.62 95.12
+\l 60.62 95.12
+\l 60.62 145.12
+\l 22.68 145.12
+\c 36.09 168.35 59.18 184.39 85.63 188.86
+\l 85.62 198.99
+
+\m 115.62 198.99
+\l 115.62 188.86
+\c 142.06 184.39 165.15 168.35 178.56 145.12
+\l 140.63 145.12
+\l 140.63 95.12
+\l 165.63 95.12
+\l 165.63 85.12
+\l 140.63 85.12
+\l 140.63 55.12
+\l 178.57 55.11
+\c 165.16 31.89 142.07 15.85 115.62 11.38
+\l 115.62 1.25
+\c 151.49 6.69 181.60 31.14 194.29 65.12
+\l 150.63 65.12
+\l 150.63 75.12
+\l 175.63 75.12
+\l 175.63 95.12
+\l 190.49 95.12
+\c 190.11 88.35 188.97 81.63 187.08 75.12
+\l 197.44 75.12
+\c 199.97 84.91 201.00 95.03 200.49 105.12
+\l 175.63 105.12
+\l 175.63 115.12
+\l 199.49 115.12
+\c 198.98 118.48 198.30 121.83 197.45 125.12
+\l 165.63 125.12
+\l 165.63 105.12
+\l 150.63 105.12
+\l 150.63 135.12
+\l 194.30 135.12
+\c 181.60 169.10 151.49 193.55 115.62 198.99
+
+\m 80.62 120.12
+\l 95.62 120.12
+\l 95.62 80.12
+\l 80.62 80.12
+\l 80.62 120.12
+
+\m 105.62 120.12
+\l 120.62 120.12
+\l 120.62 80.12
+\l 105.62 80.12
+\l 105.62 120.12
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han58.pgf b/graphics/pgf/contrib/pgfornament-han/han/han58.pgf
new file mode 100644
index 0000000000..008667808d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han58.pgf
@@ -0,0 +1,73 @@
+% han58.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\r 0 0 812 270
+\ubb
+
+\m 406.39 270.31
+\l 341.39 205.31
+\l 391.39 155.31
+\l 356.39 120.31
+\l 305.38 171.32
+\c 268.29 208.40 349.67 218.54 306.05 245.65
+\c 287.51 255.92 248.08 223.58 265.07 189.94
+\c 232.47 183.12 213.79 171.45 184.93 121.79
+\c 142.67 67.59 71.39 114.22 114.61 148.58
+\c 137.56 168.95 146.09 132.01 166.31 143.69
+\c 177.31 156.68 174.60 164.95 164.23 174.15
+\c 226.94 198.50 172.00 249.66 160.74 209.81
+\c 151.38 166.04 81.17 204.98 84.16 150.54
+\c 27.31 177.78 -13.51 141.44 5.62 112.12
+\c 38.79 90.77 42.30 149.73 74.20 112.76
+\c 115.65 57.19 154.93 57.70 194.22 94.92
+\c 234.60 54.61 278.47 70.92 275.92 92.34
+\c 275.08 119.07 255.29 120.03 239.96 100.89
+\c 191.45 111.10 255.91 190.79 290.38 156.32
+\l 341.39 105.31
+\c 257.58 21.50 322.58 -43.50 406.39 40.31
+\c 490.20 -43.50 555.20 21.50 471.39 105.31
+\l 522.40 156.32
+\c 556.87 190.79 621.33 111.10 572.82 100.89
+\c 557.49 120.03 537.70 119.07 536.86 92.34
+\c 534.31 70.92 578.18 54.61 618.56 94.92
+\c 657.85 57.70 697.13 57.19 738.58 112.76
+\c 770.47 149.73 773.98 90.77 807.15 112.12
+\c 826.28 141.44 785.46 177.78 728.61 150.54
+\c 731.60 204.98 661.40 166.04 652.04 209.81
+\c 640.78 249.66 585.84 198.50 648.55 174.15
+\c 638.18 164.95 635.47 156.68 646.47 143.69
+\c 666.69 132.01 675.22 168.95 698.17 148.58
+\c 741.38 114.22 670.11 67.59 627.85 121.79
+\c 598.99 171.45 580.31 183.12 547.71 189.94
+\c 564.70 223.58 525.27 255.92 506.73 245.65
+\c 463.11 218.54 544.49 208.40 507.40 171.32
+\l 456.39 120.31
+\l 421.39 155.31
+\l 471.39 205.31
+\l 406.39 270.31
+
+\m 406.39 240.31
+\l 441.39 205.31
+\l 406.39 170.31
+\l 371.39 205.31
+\l 406.39 240.31
+
+\m 406.39 140.31
+\l 441.39 105.31
+\l 406.39 70.31
+\l 371.39 105.31
+\l 406.39 140.31
+
+\m 356.39 90.31
+\l 391.39 55.31
+\c 336.17 0.09 301.21 35.06 356.39 90.31
+
+\m 456.39 90.31
+\c 511.57 35.06 476.61 0.09 421.39 55.31
+\l 456.39 90.31
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han59.pgf b/graphics/pgf/contrib/pgfornament-han/han/han59.pgf
new file mode 100644
index 0000000000..65f4febde4
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han59.pgf
@@ -0,0 +1,369 @@
+% han59.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+\pgfsetmiterlimit{4.0}
+
+\m 331.29 0.07
+\c 322.56 0.57 315.38 3.62 310.25 8.74
+\c 302.05 16.94 299.16 30.41 303.56 47.04
+\c 307.94 63.62 319.59 83.36 340.45 104.27
+\l 289.60 155.11
+\c 281.04 163.67 270.67 165.13 260.60 162.36
+\c 250.53 159.60 240.79 152.58 233.64 144.17
+\c 226.48 135.75 221.93 125.95 222.17 117.68
+\c 222.29 113.54 223.59 109.79 226.36 106.75
+\c 229.11 103.73 233.33 101.42 239.28 100.14
+\c 246.95 109.65 255.74 114.23 262.81 113.03
+\c 266.36 112.42 269.47 110.34 271.71 106.74
+\c 273.95 103.15 275.35 98.04 275.56 91.34
+\l 275.56 91.33
+\c 276.21 85.89 273.90 80.77 269.47 76.82
+\c 265.04 72.87 258.48 70.06 250.59 69.20
+\c 234.85 67.48 213.79 73.49 193.61 93.55
+\c 173.99 75.02 154.33 65.59 134.39 67.76
+\c 114.38 69.94 94.14 83.76 73.39 111.58
+\c 65.45 120.78 59.32 123.97 54.09 123.97
+\c 48.86 123.98 44.44 120.79 39.95 117.07
+\c 35.45 113.35 30.89 109.11 25.33 107.14
+\c 19.77 105.17 13.22 105.51 4.89 110.88
+\l 4.84 110.91
+\l 4.81 110.95
+\c 0 118.33 -1.05 126.19 0.99 133.36
+\c 3.03 140.53 8.16 147.02 15.67 151.72
+\c 30.61 161.08 54.99 163.34 83.33 149.88
+\c 82.68 163.28 86.49 171.09 92.80 175.78
+\c 99.18 180.52 108.00 182.12 117.18 183.39
+\c 126.36 184.66 135.90 185.60 143.70 188.94
+\c 151.50 192.27 157.57 197.96 159.89 208.83
+\l 159.89 208.84
+\l 159.89 208.85
+\c 162.73 218.87 168.36 223.26 174.23 223.69
+\c 180.09 224.13 186.13 220.65 189.83 215.16
+\c 193.52 209.67 194.87 202.14 191.34 194.46
+\c 187.84 186.85 179.52 179.12 164.04 173.04
+\c 169.07 168.52 172.33 164.18 172.93 159.34
+\c 173.54 154.41 171.42 149.02 165.89 142.50
+\l 165.87 142.46
+\l 165.83 142.44
+\c 160.72 139.49 156.29 139.60 152.24 141.13
+\c 148.18 142.65 144.49 145.55 140.74 148.16
+\c 136.98 150.77 133.17 153.08 128.90 153.49
+\c 124.63 153.90 119.87 152.42 114.17 147.36
+\l 114.16 147.36
+\l 114.16 147.35
+\c 103.40 138.80 99.81 129.54 101.07 121.28
+\c 102.32 113.02 108.43 105.72 117.23 101.16
+\c 134.82 92.04 163.06 93.89 184.13 120.91
+\c 198.56 145.74 210.45 161.09 222.84 171.09
+\c 235.15 181.04 247.95 185.67 264.13 189.08
+\c 255.79 205.90 261.40 222.40 271.45 233.40
+\c 276.50 238.93 282.66 243.08 288.75 245.21
+\c 294.83 247.34 300.85 247.45 305.57 244.84
+\l 305.57 244.83
+\l 305.58 244.83
+\c 311.05 241.43 314.57 238.29 316.62 235.30
+\c 318.68 232.32 319.24 229.47 318.77 226.74
+\c 317.84 221.28 312.86 216.30 307.74 211.02
+\c 302.61 205.74 297.32 200.17 295.61 193.67
+\c 293.90 187.17 295.72 179.70 304.95 170.46
+\l 355.96 120.21
+\l 355.61 119.85
+\l 304.60 170.11
+\l 304.60 170.11
+\c 295.29 179.42 293.37 187.12 295.13 193.80
+\c 296.88 200.47 302.25 206.08 307.38 211.37
+\c 312.51 216.65 317.39 221.60 318.28 226.82
+\c 318.73 229.43 318.21 232.12 316.21 235.02
+\c 314.22 237.92 310.75 241.03 305.32 244.40
+\c 300.77 246.92 294.90 246.84 288.91 244.74
+\c 282.92 242.64 276.81 238.54 271.81 233.06
+\c 261.82 222.11 256.24 205.74 264.69 189.02
+\l 264.83 188.73
+\l 264.52 188.66
+\c 248.23 185.26 235.46 180.65 223.15 170.70
+\c 210.83 160.76 198.96 145.45 184.54 120.63
+\l 184.53 120.62
+\l 184.52 120.60
+\c 163.33 93.42 134.81 91.49 117.00 100.72
+\c 108.09 105.34 101.85 112.75 100.57 121.21
+\c 99.29 129.66 103.00 139.11 113.85 147.74
+\c 119.62 152.86 124.53 154.41 128.94 153.98
+\c 133.36 153.56 137.25 151.18 141.02 148.56
+\c 144.79 145.94 148.46 143.08 152.41 141.59
+\c 156.35 140.11 160.56 139.99 165.54 142.86
+\c 170.99 149.31 173.02 154.54 172.43 159.28
+\c 171.84 164.03 168.62 168.35 163.46 172.93
+\l 163.15 173.20
+\l 163.53 173.35
+\c 179.17 179.42 187.44 187.15 190.89 194.67
+\c 194.35 202.19 193.02 209.52 189.41 214.88
+\c 185.80 220.25 179.91 223.61 174.27 223.19
+\c 168.62 222.77 163.17 218.61 160.37 208.71
+\l 160.38 208.73
+\c 158.02 197.71 151.80 191.85 143.90 188.48
+\c 135.99 185.10 126.42 184.17 117.25 182.90
+\c 108.09 181.63 99.34 180.02 93.10 175.38
+\c 86.86 170.74 83.07 163.08 83.81 149.52
+\l 83.83 149.10
+\l 83.46 149.28
+\c 55.09 162.87 30.76 160.59 15.93 151.30
+\c 8.51 146.65 3.47 140.26 1.47 133.22
+\c -0.53 126.20 0.48 118.53 5.21 111.27
+\c 13.43 106.00 19.75 105.69 25.16 107.61
+\c 30.59 109.54 35.12 113.73 39.63 117.46
+\c 44.14 121.19 48.66 124.48 54.09 124.47
+\c 59.52 124.47 65.79 121.16 73.78 111.89
+\l 73.79 111.88
+\l 73.79 111.88
+\c 94.49 84.12 114.62 70.41 134.44 68.26
+\c 154.26 66.10 173.83 75.49 193.44 94.07
+\l 193.62 94.23
+\l 193.79 94.06
+\c 213.94 73.95 234.93 67.99 250.54 69.70
+\c 258.34 70.55 264.80 73.32 269.14 77.19
+\c 273.48 81.06 275.70 86.01 275.07 91.28
+\l 275.07 91.29
+\l 275.07 91.30
+\c 274.86 97.95 273.47 102.98 271.29 106.48
+\c 269.11 109.98 266.14 111.95 262.73 112.54
+\c 255.90 113.70 247.18 109.23 239.55 99.70
+\l 239.45 99.58
+\l 239.30 99.61
+\c 233.20 100.90 228.85 103.28 225.99 106.42
+\c 223.14 109.55 221.79 113.43 221.67 117.67
+\c 221.43 126.13 226.05 136.01 233.26 144.49
+\c 240.47 152.97 250.27 160.04 260.47 162.84
+\c 270.66 165.65 281.27 164.14 289.95 155.46
+\l 340.79 104.63
+\l 390.44 154.28
+\l 340.43 204.28
+\l 405.79 269.63
+\l 471.14 204.28
+\l 421.14 154.28
+\l 455.60 119.82
+\l 506.62 170.46
+\c 515.86 179.70 517.67 187.17 515.97 193.67
+\c 514.26 200.17 508.96 205.74 503.84 211.02
+\c 498.71 216.30 493.74 221.28 492.80 226.74
+\c 492.33 229.47 492.90 232.32 494.95 235.30
+\c 497.00 238.29 500.53 241.43 506.00 244.83
+\l 506.00 244.83
+\l 506.01 244.84
+\c 510.72 247.45 516.74 247.34 522.83 245.21
+\c 528.91 243.08 535.07 238.93 540.13 233.40
+\c 550.17 222.40 555.78 205.90 547.44 189.08
+\c 563.62 185.67 576.43 181.04 588.74 171.09
+\c 601.12 161.09 613.02 145.74 627.45 120.91
+\c 648.51 93.89 676.76 92.04 694.35 101.16
+\c 703.14 105.72 709.26 113.02 710.51 121.28
+\c 711.76 129.54 708.17 138.80 697.42 147.35
+\l 697.41 147.36
+\l 697.41 147.36
+\c 691.70 152.42 686.95 153.90 682.68 153.49
+\c 678.41 153.08 674.59 150.77 670.84 148.16
+\c 667.08 145.55 663.39 142.65 659.34 141.13
+\c 655.29 139.60 650.86 139.49 645.75 142.44
+\l 645.71 142.46
+\l 645.68 142.50
+\c 640.16 149.02 638.04 154.41 638.65 159.34
+\c 639.25 164.18 642.51 168.52 647.54 173.04
+\c 632.05 179.12 623.73 186.85 620.23 194.46
+\c 616.70 202.14 618.05 209.67 621.75 215.16
+\c 625.44 220.65 631.48 224.13 637.34 223.69
+\c 643.21 223.26 648.85 218.87 651.68 208.85
+\l 651.68 208.84
+\l 651.68 208.83
+\c 654.01 197.96 660.07 192.27 667.87 188.94
+\c 675.67 185.60 685.21 184.66 694.39 183.39
+\c 703.57 182.12 712.40 180.52 718.77 175.78
+\c 725.08 171.09 728.90 163.28 728.25 149.88
+\c 756.58 163.34 780.96 161.08 795.91 151.72
+\c 803.41 147.02 808.54 140.53 810.58 133.36
+\c 812.63 126.19 811.58 118.33 806.76 110.95
+\l 806.73 110.91
+\l 806.69 110.88
+\c 798.35 105.51 791.80 105.17 786.25 107.14
+\c 780.69 109.11 776.12 113.35 771.63 117.07
+\c 767.13 120.79 762.71 123.98 757.48 123.97
+\c 752.26 123.97 746.13 120.78 738.18 111.58
+\c 717.43 83.76 697.20 69.94 677.19 67.76
+\c 657.24 65.59 637.58 75.02 617.96 93.55
+\c 597.78 73.49 576.72 67.48 560.98 69.20
+\c 553.09 70.06 546.54 72.87 542.11 76.82
+\c 537.67 80.77 535.36 85.89 536.01 91.33
+\c 536.01 91.33 536.01 91.33 536.01 91.34
+\c 536.23 98.04 537.62 103.15 539.86 106.74
+\c 542.11 110.34 545.21 112.42 548.76 113.03
+\c 555.83 114.23 564.62 109.65 572.29 100.14
+\c 578.24 101.42 582.46 103.73 585.21 106.75
+\c 587.98 109.79 589.29 113.54 589.41 117.68
+\c 589.64 125.95 585.09 135.75 577.94 144.17
+\c 570.79 152.58 561.04 159.60 550.98 162.36
+\c 540.91 165.13 530.53 163.67 521.97 155.11
+\l 471.13 104.27
+\c 491.99 83.36 503.63 63.62 508.02 47.04
+\c 512.41 30.41 509.52 16.94 501.32 8.74
+\c 493.12 0.54 479.65 -2.35 463.02 2.05
+\c 446.44 6.43 426.70 18.08 405.79 38.94
+\c 384.88 18.08 365.13 6.43 348.55 2.05
+\c 342.32 0.40 336.52 -0.23 331.29 0.07
+
+\m 331.32 0.56
+\c 336.50 0.27 342.23 0.89 348.42 2.53
+\c 364.89 6.88 384.57 18.47 405.43 39.29
+\l 390.78 53.93
+\c 377.03 40.22 364.53 32.07 354.35 28.45
+\c 344.12 24.80 336.18 25.71 331.71 30.17
+\c 327.24 34.64 326.34 42.58 329.98 52.82
+\c 333.61 63.05 341.80 75.62 355.61 89.45
+\l 355.79 89.63
+\l 405.44 139.28
+\l 390.79 153.93
+\l 341.14 104.28
+\l 340.96 104.10
+\c 320.03 83.17 308.41 63.42 304.04 46.91
+\c 299.67 30.40 302.55 17.14 310.60 9.09
+\c 315.64 4.06 322.70 1.05 331.32 0.56
+
+\m 480.25 0.56
+\c 488.87 1.05 495.94 4.06 500.97 9.09
+\c 509.02 17.14 511.90 30.40 507.54 46.91
+\c 503.18 63.37 491.59 83.06 470.78 103.92
+\l 456.13 89.27
+\c 469.83 75.51 477.98 63.01 481.60 52.82
+\c 485.24 42.58 484.33 34.64 479.86 30.17
+\c 475.40 25.71 467.46 24.80 457.23 28.45
+\c 447.00 32.09 434.44 40.28 420.61 54.10
+\l 420.44 54.28
+\l 370.79 103.93
+\l 356.14 89.28
+\l 405.79 39.63
+\l 405.79 39.63
+\l 405.96 39.45
+\c 426.89 18.52 446.64 6.90 463.15 2.53
+\c 469.34 0.89 475.08 0.27 480.25 0.56
+
+\m 340.93 26.76
+\c 344.65 26.44 349.11 27.11 354.18 28.91
+\c 364.26 32.50 376.72 40.61 390.43 54.28
+\l 355.79 88.92
+\c 342.13 75.20 334.03 62.74 330.45 52.65
+\c 326.84 42.51 327.78 34.81 332.06 30.53
+\c 334.20 28.38 337.20 27.08 340.93 26.76
+
+\m 470.65 26.76
+\c 474.38 27.08 477.37 28.38 479.51 30.53
+\c 483.79 34.81 484.73 42.51 481.13 52.65
+\c 477.54 62.74 469.44 75.20 455.78 88.92
+\l 421.15 54.28
+\c 434.86 40.61 447.31 32.50 457.40 28.91
+\c 462.46 27.11 466.92 26.44 470.65 26.76
+
+\m 420.79 54.63
+\l 470.44 104.28
+\l 470.61 104.45
+\l 521.62 155.46
+\c 530.30 164.14 540.91 165.65 551.11 162.84
+\c 561.30 160.04 571.11 152.97 578.32 144.49
+\c 585.52 136.01 590.15 126.13 589.90 117.67
+\c 589.78 113.43 588.43 109.55 585.58 106.42
+\c 582.72 103.28 578.37 100.90 572.27 99.61
+\l 572.12 99.58
+\l 572.03 99.70
+\c 564.39 109.23 555.68 113.70 548.85 112.54
+\c 545.43 111.95 542.47 109.98 540.29 106.48
+\c 538.11 102.98 536.72 97.95 536.51 91.30
+\l 536.51 91.29
+\l 536.50 91.28
+\c 535.88 86.01 538.10 81.06 542.44 77.19
+\c 546.77 73.32 553.23 70.55 561.04 69.70
+\c 576.65 67.99 597.64 73.95 617.78 94.06
+\l 617.96 94.23
+\l 618.13 94.07
+\c 637.75 75.49 657.32 66.10 677.13 68.26
+\c 696.95 70.41 717.08 84.12 737.78 111.88
+\l 737.79 111.88
+\l 737.79 111.89
+\c 745.79 121.16 752.05 124.47 757.48 124.47
+\c 762.92 124.48 767.43 121.19 771.94 117.46
+\c 776.46 113.73 780.99 109.54 786.41 107.61
+\c 791.83 105.69 798.15 106.00 806.37 111.27
+\c 811.09 118.53 812.11 126.20 810.11 133.22
+\c 808.10 140.26 803.06 146.65 795.64 151.30
+\c 780.81 160.59 756.48 162.87 728.12 149.28
+\l 727.74 149.10
+\l 727.76 149.52
+\c 728.51 163.08 724.72 170.74 718.48 175.38
+\c 712.24 180.02 703.49 181.63 694.32 182.90
+\c 685.16 184.17 675.58 185.10 667.68 188.48
+\c 659.77 191.85 653.55 197.71 651.20 208.73
+\l 651.20 208.71
+\c 648.40 218.61 642.95 222.77 637.31 223.19
+\c 631.66 223.61 625.77 220.25 622.16 214.88
+\c 618.55 209.52 617.23 202.19 620.68 194.67
+\c 624.14 187.15 632.40 179.42 648.04 173.35
+\l 648.42 173.20
+\l 648.12 172.93
+\c 642.95 168.35 639.73 164.03 639.14 159.28
+\c 638.56 154.54 640.58 149.31 646.03 142.86
+\c 651.01 139.99 655.22 140.11 659.16 141.59
+\c 663.11 143.08 666.78 145.94 670.56 148.56
+\c 674.33 151.18 678.21 153.56 682.63 153.98
+\c 687.05 154.41 691.96 152.86 697.73 147.74
+\l 697.74 147.73
+\c 708.58 139.11 712.28 129.66 711.00 121.21
+\c 709.72 112.75 703.48 105.34 694.58 100.72
+\c 676.77 91.49 648.25 93.42 627.05 120.60
+\l 627.04 120.62
+\l 627.03 120.63
+\c 612.61 145.45 600.74 160.76 588.43 170.70
+\c 576.11 180.65 563.34 185.26 547.06 188.66
+\l 546.74 188.73
+\l 546.89 189.02
+\c 555.33 205.74 549.76 222.11 539.76 233.06
+\c 534.76 238.54 528.65 242.64 522.66 244.74
+\c 516.67 246.84 510.81 246.92 506.25 244.40
+\c 506.25 244.40 506.25 244.40 506.25 244.40
+\c 500.82 241.03 497.35 237.92 495.36 235.02
+\c 493.37 232.12 492.84 229.43 493.29 226.82
+\c 494.19 221.60 499.06 216.65 504.19 211.37
+\c 509.32 206.08 514.69 200.47 516.45 193.80
+\c 518.20 187.12 516.28 179.42 506.97 170.11
+\l 506.97 170.11
+\l 455.95 119.47
+\l 455.96 119.45
+\l 455.61 119.10
+\l 455.60 119.12
+\l 440.89 104.52
+\l 440.96 104.45
+\l 440.61 104.10
+\l 440.54 104.17
+\l 405.96 69.85
+\l 405.61 70.20
+\l 440.19 104.52
+\l 405.79 138.93
+\l 371.14 104.28
+\l 420.79 54.63
+
+\m 440.54 104.87
+\l 455.25 119.47
+\l 370.44 204.28
+\l 405.79 239.63
+\l 441.14 204.28
+\l 406.14 169.28
+\l 420.79 154.63
+\l 470.44 204.28
+\l 405.79 268.93
+\l 341.14 204.28
+\l 440.54 104.87
+
+\m 405.79 169.63
+\l 440.44 204.28
+\l 405.79 238.93
+\l 371.14 204.28
+\l 405.79 169.63
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han6.pgf b/graphics/pgf/contrib/pgfornament-han/han/han6.pgf
new file mode 100644
index 0000000000..8094bf1061
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han6.pgf
@@ -0,0 +1,104 @@
+% han6.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200.5
+\l 0 150
+\l 20 150
+\l 20 120.5
+\l 0 120.5
+\l 0 70
+\l 30.5 70
+\l 30.5 80.5
+\l 10.5 80.5
+\l 10.5 110
+\l 50 110
+\l 50 50.5
+\l 0 50.5
+\l 0 0.25
+\l 0.5 0.25
+\l 0.5 50
+\l 50.5 50
+\l 50.5 110.5
+\l 10 110.5
+\l 10 80
+\l 30 80
+\l 30 70.5
+\l 0.5 70.5
+\l 0.5 120
+\l 20.5 120
+\l 20.5 150.5
+\l 0.5 150.5
+\l 0.5 200
+\l 50 200
+\l 50 180
+\l 80.5 180
+\l 80.5 200
+\l 130 200
+\l 130 170.5
+\l 120.5 170.5
+\l 120.5 190.5
+\l 90 190.5
+\l 90 150
+\l 150.5 150
+\l 150.5 200
+\l 200.25 200
+\l 200.25 200.5
+\l 150 200.5
+\l 150 150.5
+\l 90.5 150.5
+\l 90.5 190
+\l 120 190
+\l 120 170
+\l 130.5 170
+\l 130.5 200.5
+\l 80 200.5
+\l 80 180.5
+\l 50.5 180.5
+\l 50.5 200.5
+\l 0 200.5
+
+\m 10 190.5
+\l 10 160.25
+\l 10 160
+\l 40.5 160
+\l 40.5 190.5
+\l 10 190.5
+
+\m 160 190.5
+\l 160 140.5
+\l 80.5 140.5
+\l 80.5 170.5
+\l 50 170.5
+\l 50 150.5
+\l 30 150.5
+\l 30 120
+\l 60 120
+\l 60 40.5
+\l 10 40.5
+\l 10 0.25
+\l 10.5 0.25
+\l 10.5 40
+\l 60.5 40
+\l 60.5 120.5
+\l 30.5 120.5
+\l 30.5 150
+\l 50.5 150
+\l 50.5 170
+\l 80 170
+\l 80 140
+\l 160.5 140
+\l 160.5 190
+\l 200.25 190
+\l 200.25 190.5
+\l 160 190.5
+
+\m 10.5 190
+\l 40 190
+\l 40 160.5
+\l 10.5 160.5
+\l 10.5 190
+
+\s\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han60.pgf b/graphics/pgf/contrib/pgfornament-han/han/han60.pgf
new file mode 100644
index 0000000000..71cd12debf
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han60.pgf
@@ -0,0 +1,109 @@
+% han60.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetroundjoin
+
+\r 7 5 435 110
+\ubb
+
+\m 227.76 95.77
+\c 227.56 86.07 233.06 79.03 239.09 77.39
+\c 233.06 75.75 227.58 68.71 227.74 59.01
+\c 227.78 56.24 222.54 56.24 222.58 59.01
+\c 222.74 68.71 217.26 75.75 211.23 77.39
+\c 217.26 79.03 222.76 86.07 222.56 95.77
+\c 222.50 98.71 227.81 98.71 227.76 95.77
+
+\m 273.81 20.02
+\c 295.82 25.30 313.98 16.73 325.18 24.76
+\c 340.04 37.64 359.52 32.24 352.32 17.64
+\c 345.70 8.78 343.52 26.64 337.23 15.39
+\c 330.98 2.76 383.07 0.25 359.68 33.84
+\c 357.81 37.05 361.40 38.56 365.28 33.31
+\c 380.76 15.12 393.46 16.74 394.96 26.43
+\c 394.40 30.39 392.15 31.44 386.38 29.28
+\c 382.90 28.33 374.78 31.33 370.07 36.31
+\c 367.74 39.75 368.69 42.89 373.51 40.19
+\c 383.12 35.39 399.32 38.40 418.90 31.44
+\c 441.59 26.83 450.07 43.19 434.92 53.13
+\c 417.91 41.65 408.11 40.45 389.23 44.26
+\c 392.82 58.43 386.68 61.84 315.53 34.64
+\c 279.35 23.68 244.28 20.22 241.13 37.82
+\c 240.90 22.56 257.51 16.65 273.81 20.02
+
+\m 349.66 51.48
+\c 312.29 41.26 291.27 31.54 271.30 30.45
+\c 302.79 50.94 301.51 77.27 285.19 76.12
+\c 290.22 88.89 316.88 86.14 306.45 58.76
+\c 317.86 65.86 322.70 61.39 313.92 47.68
+\c 326.49 47.68 326.22 66.70 346.82 67.51
+\c 365.01 68.45 376.82 59.76 349.66 51.48
+
+\m 264.37 47.05
+\c 260.32 45.52 254.81 47.35 254.40 50.23
+\c 254.12 53.00 251.86 53.47 250.66 50.20
+\c 246.70 32.96 266.48 29.07 284.63 49.38
+\c 293.85 62.43 278.82 89.86 253.27 76.09
+\c 232.65 66.73 226.84 44.77 232.71 30.08
+\c 233.98 27.73 237.79 29.78 235.87 34.66
+\c 231.78 63.29 252.59 72.86 256.56 68.60
+\c 262.86 61.81 251.24 58.22 262.38 55.80
+\c 266.60 55.37 269.35 58.98 264.60 70.68
+\c 276.72 71.70 284.22 57.39 264.37 47.05
+
+\m 273.76 107.55
+\c 262.76 122.04 243.07 116.92 246.69 97.35
+\c 259.26 117.32 272.37 104.52 264.21 94.74
+\c 259.64 90.09 260.11 104.68 254.72 98.94
+\c 249.69 93.69 266.49 93.50 258.38 90.24
+\c 249.28 88.99 240.67 91.30 230.19 97.67
+\c 252.63 71.12 281.67 86.89 273.76 107.55
+
+\m 176.56 107.55
+\c 187.56 122.04 207.25 116.92 203.63 97.35
+\c 191.06 117.32 177.95 104.52 186.11 94.74
+\c 190.68 90.09 190.21 104.68 195.60 98.94
+\c 200.63 93.69 183.83 93.50 191.94 90.24
+\c 201.04 88.99 209.65 91.30 220.13 97.67
+\c 197.69 71.12 168.65 86.89 176.56 107.55
+
+\m 185.95 47.05
+\c 190.00 45.52 195.51 47.35 195.92 50.23
+\c 196.20 53.00 198.46 53.47 199.66 50.20
+\c 203.62 32.96 183.84 29.07 165.69 49.38
+\c 156.47 62.43 171.50 89.86 197.05 76.09
+\c 217.67 66.73 223.48 44.77 217.61 30.08
+\c 216.34 27.73 212.53 29.78 214.45 34.66
+\c 218.54 63.29 197.73 72.86 193.76 68.60
+\c 187.46 61.81 199.08 58.22 187.94 55.80
+\c 183.72 55.37 180.97 58.98 185.72 70.68
+\c 173.60 71.70 166.10 57.39 185.95 47.05
+
+\m 100.66 51.48
+\c 138.03 41.26 159.05 31.54 179.02 30.45
+\c 147.53 50.94 148.81 77.27 165.13 76.12
+\c 160.10 88.89 133.44 86.14 143.87 58.76
+\c 132.46 65.86 127.62 61.39 136.40 47.68
+\c 123.83 47.68 124.10 66.70 103.50 67.51
+\c 85.31 68.45 73.50 59.76 100.66 51.48
+
+\m 176.51 20.02
+\c 154.50 25.30 136.34 16.73 125.14 24.76
+\c 110.28 37.64 90.80 32.24 98.00 17.64
+\c 104.62 8.78 106.80 26.64 113.09 15.39
+\c 119.34 2.76 67.25 0.25 90.64 33.84
+\c 92.51 37.05 88.92 38.56 85.04 33.31
+\c 69.56 15.12 56.86 16.74 55.36 26.43
+\c 55.92 30.39 58.17 31.44 63.94 29.28
+\c 67.42 28.33 75.54 31.33 80.25 36.31
+\c 82.58 39.75 81.63 42.89 76.81 40.19
+\c 67.20 35.39 51.00 38.40 31.42 31.44
+\c 8.73 26.83 0.25 43.19 15.40 53.13
+\c 32.41 41.65 42.21 40.45 61.09 44.26
+\c 57.50 58.43 63.64 61.84 134.79 34.64
+\c 170.97 23.68 206.04 20.22 209.19 37.82
+\c 209.42 22.56 192.81 16.65 176.51 20.02
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han61.pgf b/graphics/pgf/contrib/pgfornament-han/han/han61.pgf
new file mode 100644
index 0000000000..cadd02fc32
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han61.pgf
@@ -0,0 +1,711 @@
+% han61.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+%\pgfsetmiterlimit{4}
+\pgfsetroundjoin
+
+\m 190.90 116.10
+\c 185.94 115.90 180.52 113.18 176.36 107.70
+\l 176.34 107.67
+\l 176.33 107.64
+\c 172.33 97.19 177.69 87.92 186.88 84.67
+\c 196.07 81.42 209.05 84.17 220.32 97.51
+\l 221.31 98.68
+\l 220 97.88
+\c 209.56 91.54 201.03 89.25 192.01 90.48
+\c 191.03 90.88 190.42 91.23 190.15 91.51
+\c 190.01 91.65 189.95 91.76 189.94 91.84
+\c 189.93 91.93 189.94 92.00 190.01 92.10
+\c 190.13 92.30 190.49 92.56 190.97 92.82
+\c 191.46 93.07 192.07 93.34 192.71 93.61
+\c 193.99 94.17 195.39 94.78 196.19 95.65
+\c 196.59 96.09 196.84 96.62 196.80 97.21
+\c 196.76 97.80 196.43 98.43 195.78 99.11
+\l 195.78 99.11
+\c 195.09 99.85 194.48 100.28 193.90 100.45
+\c 193.33 100.63 192.79 100.54 192.35 100.26
+\c 191.47 99.71 190.89 98.53 190.32 97.36
+\c 189.75 96.18 189.20 94.98 188.59 94.42
+\c 188.29 94.14 187.99 94.02 187.64 94.07
+\c 187.29 94.11 186.84 94.36 186.29 94.91
+\c 182.30 99.70 183.54 105.13 187.21 106.98
+\c 189.04 107.90 191.51 107.95 194.33 106.52
+\c 197.14 105.09 200.29 102.18 203.42 97.22
+\l 203.76 96.68
+\l 203.87 97.31
+\c 205.01 103.47 203.86 108.26 201.37 111.46
+\c 198.87 114.66 195.04 116.26 190.90 116.10
+
+\m 259.42 116.10
+\c 255.28 116.26 251.45 114.66 248.95 111.46
+\c 246.46 108.26 245.30 103.47 246.45 97.31
+\l 246.56 96.68
+\l 246.90 97.22
+\c 250.03 102.18 253.18 105.09 255.99 106.52
+\c 258.80 107.95 261.27 107.90 263.11 106.98
+\c 266.78 105.13 268.02 99.70 264.02 94.91
+\c 263.48 94.36 263.03 94.11 262.68 94.07
+\c 262.32 94.02 262.03 94.14 261.72 94.42
+\c 261.11 94.98 260.56 96.18 260.00 97.36
+\c 259.43 98.53 258.85 99.71 257.96 100.26
+\c 257.52 100.54 256.99 100.63 256.41 100.45
+\c 255.84 100.27 255.23 99.85 254.54 99.11
+\c 253.89 98.43 253.56 97.80 253.52 97.21
+\c 253.47 96.62 253.72 96.09 254.12 95.65
+\c 254.93 94.78 256.32 94.17 257.61 93.61
+\c 258.25 93.34 258.86 93.07 259.34 92.82
+\c 259.83 92.56 260.18 92.30 260.31 92.10
+\c 260.37 92.00 260.39 91.93 260.38 91.84
+\c 260.36 91.76 260.31 91.65 260.17 91.51
+\c 259.89 91.23 259.29 90.88 258.31 90.48
+\c 249.29 89.25 240.76 91.54 230.32 97.88
+\l 229.01 98.68
+\l 230 97.51
+\c 241.27 84.17 254.25 81.42 263.44 84.67
+\c 272.63 87.92 277.99 97.19 273.99 107.64
+\l 273.98 107.67
+\l 273.96 107.70
+\c 269.80 113.18 264.38 115.90 259.42 116.10
+
+\m 190.92 115.60
+\c 194.92 115.76 198.58 114.22 200.97 111.15
+\c 203.28 108.19 204.38 103.75 203.45 97.99
+\c 200.41 102.64 197.35 105.54 194.55 106.97
+\c 191.63 108.45 188.97 108.42 186.98 107.42
+\c 183.00 105.42 181.76 99.56 185.92 94.58
+\l 185.92 94.57
+\l 185.93 94.56
+\c 186.52 93.96 187.06 93.64 187.57 93.57
+\c 188.09 93.50 188.55 93.71 188.93 94.06
+\c 189.68 94.75 190.21 95.97 190.77 97.14
+\c 191.33 98.31 191.93 99.41 192.62 99.84
+\c 192.96 100.05 193.31 100.12 193.76 99.98
+\c 194.21 99.84 194.76 99.47 195.42 98.77
+\l 195.42 98.77
+\l 195.42 98.77
+\c 196.02 98.14 196.27 97.61 196.30 97.17
+\c 196.33 96.74 196.16 96.36 195.82 95.99
+\c 195.14 95.25 193.79 94.63 192.51 94.07
+\c 191.88 93.79 191.26 93.53 190.74 93.26
+\c 190.23 92.99 189.81 92.73 189.59 92.37
+\c 189.47 92.19 189.41 91.98 189.45 91.76
+\c 189.49 91.54 189.61 91.34 189.80 91.16
+\c 190.17 90.78 190.82 90.42 191.84 90.01
+\l 191.87 90.00
+\l 191.90 89.99
+\c 200.65 88.79 209.01 90.98 218.89 96.73
+\c 207.97 84.55 195.73 82.07 187.04 85.14
+\c 178.09 88.30 172.90 97.22 176.78 107.42
+\c 180.86 112.79 186.13 115.41 190.92 115.60
+
+\m 259.40 115.60
+\c 264.19 115.42 269.45 112.79 273.54 107.42
+\c 277.42 97.22 272.23 88.30 263.27 85.14
+\c 254.58 82.07 242.34 84.55 231.43 96.73
+\c 241.31 90.98 249.66 88.79 258.41 89.99
+\l 258.44 90.00
+\l 258.47 90.01
+\c 259.50 90.42 260.15 90.78 260.52 91.16
+\c 260.71 91.34 260.83 91.54 260.87 91.76
+\c 260.90 91.98 260.84 92.19 260.73 92.37
+\c 260.50 92.73 260.09 92.99 259.57 93.26
+\c 259.06 93.53 258.44 93.79 257.80 94.07
+\c 256.53 94.63 255.17 95.25 254.49 95.99
+\c 254.15 96.36 253.98 96.74 254.01 97.17
+\c 254.05 97.61 254.29 98.14 254.90 98.77
+\l 254.90 98.77
+\l 254.90 98.77
+\c 255.56 99.47 256.11 99.84 256.56 99.98
+\c 257.01 100.12 257.36 100.05 257.70 99.84
+\c 258.39 99.41 258.99 98.31 259.55 97.14
+\c 260.11 95.97 260.64 94.75 261.39 94.06
+\c 261.77 93.71 262.23 93.50 262.74 93.57
+\c 263.26 93.64 263.79 93.96 264.39 94.56
+\l 264.39 94.57
+\l 264.40 94.58
+\c 268.56 99.56 267.32 105.42 263.34 107.42
+\c 261.34 108.42 258.69 108.45 255.77 106.97
+\c 252.96 105.54 249.90 102.64 246.87 97.99
+\c 245.94 103.75 247.03 108.19 249.35 111.15
+\c 251.74 114.22 255.40 115.76 259.40 115.60
+
+\m 225.15 98.22
+\c 224.45 98.22 223.75 98.03 223.20 97.62
+\c 222.66 97.22 222.29 96.57 222.31 95.76
+\c 222.51 86.16 217.06 79.23 211.16 77.63
+\l 210.28 77.39
+\l 211.16 77.15
+\c 217.06 75.55 222.49 68.62 222.33 59.01
+\c 222.32 58.24 222.69 57.63 223.23 57.25
+\c 223.77 56.86 224.46 56.68 225.16 56.68
+\c 225.85 56.68 226.55 56.86 227.09 57.25
+\c 227.63 57.63 228.00 58.24 227.99 59.01
+\c 227.83 68.62 233.26 75.55 239.15 77.15
+\l 240.04 77.39
+\l 239.15 77.63
+\c 233.26 79.23 227.81 86.16 228.01 95.76
+\l 228.01 95.77
+\l 228.01 95.77
+\c 228.02 96.58 227.65 97.22 227.11 97.62
+\c 226.56 98.03 225.86 98.22 225.15 98.22
+
+\m 225.15 97.72
+\c 225.76 97.72 226.37 97.55 226.81 97.22
+\c 227.24 96.90 227.52 96.43 227.51 95.77
+\l 227.51 95.78
+\c 227.31 86.24 232.58 79.30 238.55 77.39
+\c 232.59 75.47 227.33 68.54 227.49 59.00
+\c 227.50 58.39 227.23 57.96 226.80 57.65
+\c 226.37 57.34 225.76 57.18 225.16 57.18
+\c 224.55 57.18 223.95 57.34 223.52 57.65
+\c 223.09 57.96 222.82 58.39 222.83 59.00
+\c 222.99 68.54 217.73 75.47 211.77 77.39
+\c 217.73 79.30 223.00 86.24 222.81 95.78
+\c 222.79 96.44 223.07 96.90 223.50 97.22
+\c 223.94 97.55 224.54 97.72 225.15 97.72
+
+\m 153.44 83.71
+\c 149.30 83.66 145.18 81.72 142.95 77.61
+\c 140.76 73.60 140.43 67.54 143.46 59.26
+\c 140.83 60.83 138.53 61.85 136.70 62.20
+\c 134.73 62.57 133.21 62.24 132.37 61.18
+\c 131.52 60.11 131.40 58.40 132.02 56.13
+\c 132.60 53.97 133.91 51.23 135.92 48.02
+\c 133.11 48.15 130.93 49.18 129.02 50.85
+\c 126.98 52.62 125.20 55.01 123.15 57.45
+\c 119.06 62.32 113.89 67.35 103.51 67.76
+\l 103.51 67.76
+\c 98.94 67.99 94.77 67.63 91.50 66.81
+\c 88.23 65.99 85.84 64.73 84.86 63.08
+\c 84.37 62.25 84.25 61.31 84.59 60.36
+\c 84.92 59.40 85.69 58.42 86.93 57.41
+\c 89.40 55.41 93.78 53.32 100.58 51.24
+\l 100.59 51.24
+\l 100.59 51.24
+\c 137.94 41.02 158.96 31.29 179.00 30.20
+\l 179.93 30.15
+\l 179.15 30.66
+\c 163.45 40.87 155.95 52.54 154.39 61.44
+\c 153.61 65.89 154.32 69.65 156.19 72.20
+\c 158.06 74.76 161.10 76.15 165.11 75.87
+\l 165.51 75.84
+\l 165.36 76.21
+\c 163.43 81.11 158.40 83.77 153.44 83.71
+
+\m 296.88 83.71
+\c 291.92 83.77 286.89 81.11 284.96 76.21
+\l 284.81 75.84
+\l 285.21 75.87
+\c 289.22 76.15 292.26 74.76 294.13 72.20
+\c 296.00 69.65 296.71 65.89 295.93 61.44
+\c 294.37 52.54 286.87 40.87 271.16 30.66
+\l 270.38 30.15
+\l 271.31 30.20
+\c 291.35 31.29 312.37 41.02 349.73 51.24
+\l 349.73 51.24
+\l 349.73 51.24
+\c 356.54 53.32 360.91 55.41 363.39 57.41
+\c 364.63 58.42 365.39 59.40 365.73 60.36
+\c 366.06 61.31 365.95 62.25 365.46 63.08
+\c 364.48 64.73 362.09 65.99 358.82 66.81
+\c 355.55 67.63 351.38 67.99 346.81 67.76
+\l 346.81 67.76
+\c 336.43 67.35 331.26 62.32 327.17 57.45
+\c 325.12 55.01 323.34 52.62 321.30 50.85
+\c 319.39 49.18 317.21 48.15 314.40 48.02
+\c 316.41 51.23 317.72 53.97 318.30 56.13
+\c 318.91 58.40 318.80 60.11 317.95 61.18
+\c 317.11 62.24 315.59 62.57 313.62 62.20
+\c 311.78 61.85 309.48 60.83 306.86 59.26
+\c 309.88 67.54 309.56 73.60 307.37 77.61
+\c 305.13 81.72 301.02 83.66 296.88 83.71
+
+\m 153.44 83.21
+\c 158.10 83.26 162.75 80.80 164.70 76.35
+\c 160.78 76.50 157.68 75.09 155.79 72.50
+\c 153.81 69.80 153.10 65.90 153.90 61.36
+\c 155.46 52.42 162.87 40.94 178.09 30.80
+\c 158.47 32.13 137.53 41.65 100.73 51.72
+\l 100.72 51.72
+\c 93.95 53.78 89.62 55.88 87.24 57.80
+\c 86.05 58.77 85.35 59.69 85.06 60.52
+\c 84.77 61.35 84.86 62.11 85.29 62.82
+\c 86.14 64.26 88.41 65.52 91.62 66.32
+\c 94.83 67.13 98.96 67.49 103.48 67.26
+\l 103.49 67.26
+\l 103.49 67.26
+\c 113.71 66.86 118.70 61.97 122.77 57.13
+\c 124.80 54.71 126.59 52.30 128.69 50.47
+\c 130.78 48.65 133.19 47.43 136.40 47.43
+\l 136.85 47.43
+\l 136.61 47.81
+\c 134.42 51.23 133.09 54.06 132.50 56.26
+\c 131.91 58.45 132.06 59.99 132.76 60.87
+\c 133.45 61.75 134.73 62.06 136.61 61.71
+\c 138.48 61.35 140.90 60.31 143.74 58.55
+\l 144.36 58.16
+\l 144.10 58.85
+\c 140.86 67.36 141.24 73.43 143.38 77.37
+\c 145.53 81.31 149.46 83.16 153.44 83.21
+
+\m 296.88 83.21
+\c 300.86 83.16 304.79 81.31 306.94 77.37
+\c 309.08 73.43 309.46 67.36 306.22 58.85
+\l 305.95 58.16
+\l 306.58 58.55
+\c 309.42 60.31 311.84 61.35 313.71 61.71
+\c 315.58 62.06 316.87 61.75 317.56 60.87
+\c 318.26 59.99 318.41 58.45 317.82 56.26
+\c 317.23 54.06 315.90 51.23 313.71 47.81
+\l 313.46 47.43
+\l 313.92 47.43
+\c 317.13 47.43 319.54 48.65 321.63 50.47
+\c 323.72 52.30 325.52 54.71 327.55 57.13
+\c 331.62 61.97 336.61 66.86 346.83 67.26
+\l 346.83 67.26
+\l 346.83 67.26
+\c 351.36 67.49 355.49 67.13 358.70 66.32
+\c 361.91 65.52 364.18 64.26 365.03 62.82
+\c 365.46 62.11 365.55 61.35 365.26 60.52
+\c 364.97 59.69 364.27 58.77 363.08 57.80
+\c 360.69 55.88 356.36 53.78 349.59 51.72
+\c 349.59 51.72 349.59 51.72 349.59 51.72
+\c 349.59 51.72 349.59 51.72 349.59 51.72
+\c 312.79 41.65 291.85 32.13 272.22 30.80
+\c 287.44 40.94 294.85 52.42 296.42 61.36
+\c 297.21 65.90 296.51 69.80 294.53 72.50
+\c 292.63 75.09 289.54 76.50 285.62 76.35
+\c 287.56 80.80 292.22 83.26 296.88 83.21
+
+\m 183.88 80.11
+\c 166.52 80.33 157.86 60.03 165.48 49.23
+\l 165.49 49.22
+\l 165.50 49.21
+\c 174.61 39.02 184.15 34.86 190.99 35.46
+\c 194.41 35.76 197.16 37.27 198.78 39.81
+\c 200.41 42.35 200.90 45.90 199.90 50.26
+\l 199.90 50.27
+\l 199.89 50.29
+\c 199.58 51.13 199.20 51.74 198.78 52.15
+\c 198.36 52.56 197.88 52.76 197.43 52.73
+\c 196.97 52.69 196.55 52.42 196.25 52.00
+\c 195.95 51.57 195.75 50.98 195.67 50.26
+\c 195.49 48.97 194.10 47.83 192.22 47.22
+\c 190.34 46.61 188.00 46.54 186.05 47.28
+\c 176.19 52.42 173.21 58.48 174.09 63.08
+\c 174.95 67.59 179.58 70.76 185.38 70.41
+\c 183.14 64.78 182.59 60.98 183.22 58.63
+\c 183.55 57.42 184.18 56.58 185.02 56.08
+\c 185.85 55.59 186.87 55.44 187.96 55.55
+\l 187.98 55.55
+\l 187.99 55.56
+\c 190.80 56.16 192.22 56.84 192.86 57.72
+\c 193.18 58.16 193.29 58.65 193.26 59.14
+\c 193.23 59.63 193.08 60.12 192.90 60.64
+\c 192.53 61.68 192.03 62.81 192.01 64.08
+\c 191.98 65.35 192.40 66.77 193.94 68.43
+\c 194.83 69.38 196.77 69.61 199.17 68.88
+\c 201.56 68.15 204.38 66.48 206.95 63.79
+\c 212.08 58.41 216.24 48.95 214.20 34.69
+\l 214.22 34.75
+\c 213.23 32.25 213.70 30.39 214.66 29.48
+\c 215.14 29.02 215.75 28.80 216.34 28.87
+\c 216.93 28.94 217.48 29.31 217.83 29.96
+\l 217.84 29.97
+\l 217.84 29.99
+\c 223.76 44.81 217.89 66.89 197.17 76.31
+\l 197.16 76.31
+\c 192.34 78.91 187.88 80.05 183.88 80.11
+
+\m 266.44 80.11
+\c 262.43 80.05 257.97 78.90 253.15 76.31
+\c 232.43 66.89 226.56 44.81 232.48 29.99
+\l 232.48 29.97
+\l 232.49 29.96
+\c 232.84 29.31 233.39 28.94 233.98 28.87
+\c 234.57 28.80 235.17 29.02 235.66 29.48
+\c 236.62 30.39 237.09 32.25 236.10 34.75
+\l 236.12 34.69
+\c 234.08 48.95 238.24 58.41 243.37 63.79
+\c 245.94 66.48 248.75 68.15 251.15 68.88
+\c 253.54 69.61 255.49 69.38 256.38 68.43
+\c 257.92 66.77 258.34 65.35 258.31 64.08
+\c 258.28 62.81 257.79 61.68 257.42 60.64
+\c 257.24 60.12 257.08 59.63 257.05 59.14
+\c 257.03 58.65 257.13 58.16 257.46 57.72
+\c 258.10 56.84 259.52 56.16 262.33 55.56
+\l 262.34 55.55
+\l 262.35 55.55
+\c 263.45 55.44 264.47 55.59 265.30 56.08
+\c 266.14 56.58 266.77 57.42 267.09 58.63
+\c 267.73 60.98 267.18 64.78 264.94 70.41
+\c 270.74 70.76 275.36 67.59 276.23 63.08
+\c 277.11 58.48 274.13 52.42 264.27 47.28
+\c 262.31 46.54 259.98 46.61 258.10 47.22
+\c 256.21 47.83 254.83 48.97 254.64 50.26
+\c 254.57 50.98 254.37 51.57 254.07 52.00
+\c 253.77 52.42 253.35 52.69 252.89 52.73
+\c 252.43 52.76 251.96 52.56 251.54 52.15
+\c 251.12 51.74 250.73 51.13 250.42 50.29
+\l 250.42 50.27
+\l 250.42 50.26
+\c 249.42 45.90 249.91 42.35 251.53 39.81
+\c 253.16 37.27 255.91 35.76 259.33 35.46
+\c 266.17 34.86 275.70 39.02 284.81 49.21
+\l 284.82 49.22
+\l 284.83 49.23
+\c 292.46 60.03 283.80 80.33 266.44 80.11
+
+\m 183.87 79.61
+\c 187.79 79.56 192.17 78.44 196.93 75.87
+\l 196.94 75.87
+\l 196.95 75.86
+\c 217.44 66.56 223.19 44.75 217.38 30.19
+\c 217.10 29.67 216.70 29.42 216.28 29.36
+\c 215.86 29.31 215.39 29.47 215.00 29.84
+\c 214.23 30.58 213.75 32.19 214.68 34.57
+\l 214.69 34.59
+\l 214.70 34.62
+\c 216.75 49.00 212.55 58.64 207.31 64.13
+\c 204.69 66.88 201.81 68.60 199.31 69.36
+\c 196.82 70.12 194.67 69.95 193.58 68.77
+\c 191.97 67.03 191.48 65.46 191.51 64.07
+\c 191.54 62.68 192.07 61.49 192.43 60.48
+\c 192.61 59.97 192.74 59.51 192.77 59.11
+\c 192.79 58.70 192.71 58.36 192.46 58.01
+\c 191.96 57.33 190.65 56.65 187.90 56.05
+\c 186.89 55.95 185.99 56.09 185.27 56.51
+\c 184.55 56.94 184.00 57.65 183.71 58.75
+\c 183.11 60.97 183.58 64.76 185.95 70.58
+\l 186.08 70.90
+\l 185.74 70.93
+\c 179.58 71.44 174.54 68.05 173.60 63.17
+\c 172.66 58.29 175.85 52.03 185.83 46.83
+\l 185.85 46.82
+\l 185.86 46.82
+\c 187.95 46.03 190.39 46.11 192.38 46.75
+\c 194.36 47.39 195.94 48.61 196.16 50.19
+\l 196.17 50.20
+\l 196.17 50.20
+\c 196.23 50.86 196.42 51.37 196.65 51.71
+\c 196.89 52.05 197.17 52.21 197.46 52.23
+\c 197.75 52.25 198.09 52.13 198.43 51.79
+\c 198.78 51.46 199.13 50.91 199.42 50.12
+\c 200.39 45.87 199.90 42.47 198.36 40.08
+\c 196.83 37.67 194.24 36.24 190.94 35.96
+\c 184.35 35.38 174.92 39.43 165.89 49.53
+\c 158.54 59.94 166.91 79.83 183.87 79.61
+
+\m 266.45 79.61
+\c 283.41 79.83 291.78 59.94 284.43 49.53
+\c 275.39 39.43 265.97 35.38 259.37 35.96
+\c 256.07 36.24 253.49 37.67 251.95 40.08
+\c 250.42 42.47 249.92 45.87 250.90 50.12
+\c 251.19 50.91 251.54 51.46 251.88 51.79
+\c 252.23 52.13 252.56 52.25 252.86 52.23
+\c 253.15 52.21 253.42 52.05 253.66 51.71
+\c 253.90 51.37 254.08 50.86 254.15 50.20
+\l 254.15 50.20
+\l 254.15 50.19
+\c 254.38 48.61 255.95 47.39 257.94 46.75
+\c 259.93 46.11 262.37 46.03 264.46 46.82
+\l 264.47 46.82
+\l 264.48 46.83
+\c 274.46 52.03 277.65 58.29 276.72 63.17
+\c 275.78 68.05 270.74 71.44 264.58 70.93
+\l 264.24 70.90
+\l 264.37 70.58
+\c 266.73 64.76 267.21 60.97 266.61 58.75
+\c 266.32 57.65 265.77 56.94 265.05 56.51
+\c 264.33 56.09 263.43 55.95 262.41 56.05
+\c 259.67 56.65 258.36 57.33 257.86 58.01
+\c 257.60 58.36 257.53 58.70 257.55 59.11
+\c 257.57 59.51 257.71 59.97 257.89 60.48
+\c 258.25 61.49 258.78 62.68 258.81 64.07
+\c 258.84 65.46 258.35 67.03 256.74 68.77
+\c 255.64 69.95 253.50 70.12 251.00 69.36
+\c 248.51 68.60 245.63 66.88 243.01 64.13
+\c 237.77 58.64 233.57 49.00 235.62 34.62
+\l 235.63 34.59
+\l 235.64 34.57
+\c 236.57 32.19 236.09 30.58 235.31 29.84
+\c 234.93 29.47 234.46 29.31 234.04 29.36
+\c 233.62 29.42 233.22 29.67 232.93 30.19
+\c 227.13 44.75 232.88 66.56 253.37 75.86
+\l 253.38 75.87
+\l 253.39 75.87
+\c 258.15 78.44 262.53 79.56 266.45 79.61
+
+\m 68.15 55.30
+\c 66.06 55.33 64.44 55.09 63.21 54.58
+\c 61.99 54.08 61.15 53.30 60.65 52.30
+\c 59.69 50.37 60.01 47.67 60.80 44.47
+\c 42.12 40.73 32.43 41.93 15.54 53.34
+\l 15.40 53.43
+\l 15.26 53.34
+\c 11.44 50.83 9.09 47.90 8.08 44.98
+\c 7.08 42.05 7.44 39.13 9.01 36.69
+\c 12.15 31.81 20.06 28.88 31.46 31.19
+\l 31.48 31.20
+\l 31.50 31.20
+\c 41.26 34.67 50.18 35.66 57.87 36.38
+\c 65.57 37.09 72.04 37.53 76.92 39.97
+\l 76.92 39.97
+\l 76.93 39.97
+\c 78.11 40.63 79.05 40.93 79.72 40.96
+\c 80.39 40.98 80.77 40.78 81.00 40.42
+\c 81.22 40.06 81.28 39.50 81.13 38.80
+\c 80.97 38.11 80.61 37.30 80.05 36.47
+\c 77.73 34.02 74.55 32.04 71.54 30.80
+\c 68.51 29.56 65.63 29.07 64.00 29.52
+\l 64.03 29.51
+\c 61.12 30.60 59.07 30.91 57.61 30.38
+\c 56.88 30.12 56.32 29.64 55.91 28.98
+\c 55.51 28.31 55.25 27.47 55.11 26.46
+\l 55.11 26.43
+\l 55.11 26.39
+\c 55.49 23.91 56.60 21.93 58.30 20.66
+\c 60.00 19.39 62.29 18.83 64.99 19.17
+\c 70.38 19.84 77.46 24.02 85.23 33.15
+\l 85.23 33.15
+\l 85.24 33.16
+\c 87.15 35.75 88.98 36.60 89.97 36.50
+\c 90.46 36.45 90.75 36.21 90.86 35.79
+\c 90.97 35.37 90.87 34.73 90.42 33.97
+\c 90.42 33.96 90.42 33.96 90.42 33.96
+\c 84.56 25.54 83.39 19.32 84.92 14.93
+\c 86.45 10.53 90.67 8.04 95.38 7.04
+\c 100.09 6.03 105.32 6.48 109.02 7.99
+\c 110.87 8.74 112.35 9.77 113.17 11.04
+\c 113.99 12.32 114.12 13.86 113.31 15.50
+\l 113.31 15.50
+\l 113.31 15.51
+\c 112.51 16.93 111.78 17.90 111.07 18.54
+\c 110.37 19.17 109.68 19.46 109.02 19.49
+\c 107.70 19.54 106.58 18.58 105.50 17.60
+\c 104.42 16.62 103.34 15.61 102.22 15.38
+\c 101.65 15.26 101.07 15.32 100.41 15.68
+\c 99.75 16.03 99.02 16.70 98.21 17.77
+\c 96.45 21.36 96.33 24.35 97.34 26.62
+\c 98.35 28.90 100.50 30.50 103.36 31.26
+\c 109.08 32.80 117.60 30.96 124.97 24.57
+\l 124.98 24.56
+\l 124.99 24.55
+\c 130.68 20.48 138.09 20.63 146.78 21.11
+\c 155.48 21.59 165.49 22.40 176.45 19.78
+\l 176.45 19.78
+\l 176.46 19.77
+\c 184.65 18.08 192.93 18.71 199.16 21.71
+\c 205.37 24.69 209.53 30.08 209.43 37.76
+\c 209.43 37.77 209.44 37.77 209.44 37.78
+\l 209.43 37.78
+\c 209.43 37.79 209.44 37.81 209.44 37.82
+\l 208.94 37.86
+\c 208.17 33.54 205.46 30.54 201.22 28.58
+\c 196.98 26.63 191.20 25.75 184.38 25.77
+\c 170.74 25.80 152.95 29.40 134.88 34.87
+\l 134.87 34.88
+\c 134.87 34.88 134.86 34.88 134.86 34.88
+\c 97.07 49.32 77.64 55.15 68.15 55.30
+
+\m 382.17 55.30
+\c 372.68 55.15 353.24 49.32 315.44 34.87
+\c 297.37 29.40 279.58 25.80 265.94 25.77
+\c 259.12 25.75 253.34 26.63 249.10 28.58
+\c 244.86 30.54 242.15 33.54 241.38 37.86
+\l 240.88 37.82
+\c 240.88 37.81 240.89 37.79 240.88 37.78
+\l 240.88 37.78
+\c 240.88 37.77 240.89 37.77 240.89 37.76
+\c 240.79 30.08 244.95 24.69 251.16 21.71
+\c 257.39 18.71 265.66 18.08 273.86 19.77
+\l 273.86 19.78
+\l 273.87 19.78
+\c 284.83 22.41 294.84 21.59 303.54 21.11
+\c 312.23 20.63 319.64 20.48 325.32 24.56
+\l 325.33 24.56
+\l 325.34 24.57
+\c 332.72 30.96 341.24 32.80 346.96 31.26
+\c 349.82 30.50 351.97 28.90 352.98 26.62
+\c 353.99 24.35 353.87 21.36 352.11 17.77
+\c 351.30 16.70 350.57 16.03 349.91 15.68
+\c 349.25 15.32 348.67 15.26 348.10 15.38
+\c 346.97 15.61 345.90 16.62 344.82 17.60
+\c 343.73 18.58 342.62 19.54 341.30 19.49
+\c 340.64 19.47 339.95 19.17 339.25 18.54
+\c 338.54 17.90 337.81 16.93 337.01 15.51
+\l 337.01 15.50
+\l 337.01 15.50
+\c 336.20 13.86 336.33 12.32 337.15 11.04
+\c 337.97 9.77 339.45 8.74 341.30 7.99
+\c 345.00 6.48 350.22 6.03 354.94 7.04
+\c 359.65 8.04 363.86 10.53 365.40 14.93
+\c 366.93 19.32 365.75 25.54 359.89 33.96
+\l 359.89 33.97
+\c 359.45 34.73 359.35 35.37 359.46 35.79
+\c 359.57 36.21 359.86 36.45 360.35 36.50
+\c 361.34 36.60 363.17 35.75 365.08 33.16
+\l 365.09 33.15
+\l 365.09 33.15
+\c 372.86 24.02 379.94 19.84 385.33 19.17
+\c 388.03 18.83 390.32 19.39 392.02 20.66
+\c 393.72 21.93 394.82 23.92 395.21 26.39
+\l 395.21 26.43
+\l 395.21 26.46
+\c 395.06 27.47 394.81 28.31 394.41 28.98
+\c 394.00 29.64 393.44 30.12 392.71 30.38
+\c 391.25 30.91 389.20 30.60 386.29 29.51
+\l 386.32 29.52
+\c 384.69 29.07 381.81 29.56 378.78 30.80
+\c 375.76 32.04 372.59 34.02 370.27 36.47
+\c 369.71 37.30 369.34 38.11 369.19 38.80
+\c 369.04 39.50 369.10 40.06 369.32 40.42
+\c 369.55 40.78 369.93 40.98 370.60 40.96
+\c 371.27 40.93 372.21 40.63 373.39 39.97
+\l 373.39 39.97
+\l 373.40 39.97
+\c 378.27 37.53 384.75 37.09 392.44 36.38
+\c 400.14 35.66 409.06 34.67 418.82 31.20
+\l 418.83 31.20
+\l 418.85 31.19
+\c 430.26 28.88 438.17 31.81 441.31 36.69
+\c 442.88 39.13 443.24 42.05 442.24 44.98
+\c 441.23 47.90 438.88 50.83 435.06 53.34
+\l 434.92 53.43
+\l 434.78 53.34
+\c 417.88 41.93 408.20 40.73 389.52 44.47
+\c 390.31 47.68 390.63 50.37 389.66 52.30
+\c 389.17 53.30 388.33 54.08 387.10 54.58
+\c 385.88 55.09 384.26 55.33 382.17 55.30
+
+\m 68.14 54.80
+\c 77.44 54.65 96.90 48.85 134.70 34.41
+\l 134.71 34.40
+\l 134.71 34.40
+\c 152.82 28.92 170.65 25.31 184.37 25.27
+\c 191.24 25.25 197.08 26.13 201.43 28.13
+\c 204.85 29.70 207.30 32.03 208.60 35.11
+\c 207.80 29.08 204.25 24.71 198.94 22.16
+\c 192.85 19.23 184.67 18.59 176.57 20.26
+\l 176.56 20.26
+\c 165.51 22.91 155.44 22.08 146.75 21.61
+\c 138.07 21.13 130.80 21.01 125.28 24.96
+\l 125.30 24.95
+\c 117.82 31.43 109.16 33.34 103.23 31.74
+\c 100.26 30.95 97.96 29.26 96.88 26.82
+\c 95.80 24.38 95.95 21.23 97.78 17.53
+\l 97.79 17.51
+\l 97.80 17.49
+\c 98.64 16.36 99.42 15.65 100.17 15.24
+\c 100.92 14.83 101.65 14.75 102.31 14.89
+\c 103.65 15.16 104.76 16.25 105.83 17.23
+\c 106.91 18.20 107.94 19.03 109.00 18.99
+\c 109.53 18.97 110.09 18.74 110.74 18.17
+\c 111.38 17.59 112.09 16.66 112.87 15.28
+\c 113.61 13.76 113.49 12.46 112.75 11.31
+\c 112.01 10.17 110.62 9.18 108.83 8.45
+\c 105.26 6.99 100.09 6.54 95.49 7.52
+\c 90.88 8.51 86.85 10.91 85.39 15.09
+\c 83.93 19.27 85.02 25.33 90.84 33.70
+\l 90.85 33.70
+\l 90.85 33.71
+\c 91.34 34.55 91.50 35.31 91.34 35.91
+\c 91.18 36.51 90.67 36.92 90.02 36.99
+\c 88.71 37.13 86.80 36.12 84.84 33.46
+\c 77.13 24.40 70.12 20.31 64.92 19.66
+\c 62.33 19.34 60.19 19.87 58.60 21.06
+\c 57.02 22.24 55.99 24.08 55.62 26.43
+\c 55.75 27.38 55.99 28.15 56.34 28.72
+\c 56.69 29.30 57.15 29.69 57.78 29.91
+\c 59.03 30.37 60.99 30.12 63.85 29.05
+\l 63.86 29.04
+\l 63.87 29.04
+\c 65.72 28.53 68.64 29.07 71.72 30.34
+\c 74.81 31.60 78.04 33.61 80.43 36.14
+\l 80.44 36.15
+\l 80.45 36.17
+\c 81.05 37.05 81.44 37.92 81.61 38.69
+\c 81.79 39.47 81.74 40.17 81.42 40.68
+\c 81.09 41.20 80.49 41.49 79.69 41.45
+\c 78.90 41.42 77.91 41.09 76.69 40.40
+\l 76.70 40.41
+\c 71.96 38.05 65.53 37.59 57.83 36.87
+\c 50.13 36.15 41.17 35.16 31.37 31.68
+\c 31.37 31.68 31.36 31.68 31.36 31.68
+\c 20.08 29.39 12.41 32.33 9.43 36.96
+\c 7.93 39.28 7.59 42.02 8.55 44.82
+\c 9.50 47.58 11.75 50.38 15.42 52.82
+\c 32.36 41.43 42.29 40.21 61.13 44.01
+\l 61.39 44.07
+\l 61.33 44.32
+\c 60.49 47.62 60.21 50.30 61.10 52.08
+\c 61.54 52.97 62.27 53.65 63.41 54.12
+\c 64.54 54.59 66.09 54.83 68.14 54.80
+
+\m 382.18 54.80
+\c 384.23 54.83 385.78 54.59 386.91 54.12
+\c 388.05 53.65 388.77 52.97 389.22 52.08
+\c 390.10 50.30 389.83 47.62 388.99 44.32
+\l 388.92 44.06
+\l 389.18 44.01
+\c 408.03 40.21 417.96 41.43 434.90 52.82
+\c 438.57 50.38 440.82 47.58 441.77 44.82
+\c 442.72 42.02 442.38 39.28 440.89 36.96
+\c 437.91 32.33 430.23 29.39 418.95 31.68
+\l 418.95 31.68
+\c 409.14 35.16 400.18 36.15 392.49 36.87
+\c 384.79 37.59 378.36 38.04 373.62 40.41
+\l 373.63 40.40
+\c 372.41 41.09 371.41 41.42 370.62 41.45
+\c 369.83 41.49 369.22 41.20 368.90 40.68
+\c 368.57 40.17 368.53 39.47 368.70 38.69
+\c 368.88 37.92 369.27 37.05 369.86 36.17
+\l 369.87 36.15
+\l 369.89 36.14
+\c 372.28 33.61 375.51 31.60 378.59 30.34
+\c 381.67 29.07 384.60 28.53 386.45 29.04
+\l 386.46 29.04
+\l 386.47 29.05
+\c 389.33 30.12 391.29 30.37 392.54 29.91
+\c 393.17 29.69 393.63 29.30 393.98 28.72
+\c 394.33 28.15 394.56 27.38 394.70 26.43
+\c 394.33 24.08 393.29 22.24 391.72 21.06
+\c 390.13 19.87 387.99 19.34 385.39 19.66
+\c 380.20 20.31 373.19 24.40 365.48 33.46
+\c 363.51 36.12 361.61 37.13 360.30 36.99
+\c 359.64 36.92 359.14 36.51 358.98 35.91
+\c 358.82 35.31 358.98 34.55 359.46 33.71
+\l 359.47 33.70
+\l 359.47 33.70
+\c 365.30 25.33 366.38 19.27 364.93 15.09
+\c 363.47 10.91 359.44 8.51 354.83 7.52
+\c 350.22 6.54 345.06 6.99 341.48 8.45
+\c 339.69 9.18 338.31 10.16 337.57 11.31
+\c 336.83 12.46 336.70 13.76 337.45 15.28
+\c 337.45 15.28 337.45 15.28 337.45 15.28
+\c 338.23 16.66 338.94 17.59 339.58 18.17
+\c 340.22 18.74 340.79 18.97 341.32 18.99
+\c 342.38 19.03 343.41 18.20 344.48 17.22
+\c 345.56 16.25 346.67 15.16 348.00 14.89
+\c 348.67 14.75 349.40 14.83 350.15 15.24
+\c 350.90 15.65 351.68 16.36 352.52 17.49
+\l 352.53 17.51
+\l 352.54 17.53
+\c 354.37 21.23 354.52 24.38 353.43 26.82
+\c 352.35 29.26 350.06 30.95 347.09 31.74
+\c 341.15 33.34 332.50 31.43 325.02 24.95
+\l 325.04 24.96
+\c 319.52 21.01 312.25 21.13 303.56 21.61
+\c 294.88 22.08 284.80 22.91 273.75 20.26
+\c 265.65 18.59 257.47 19.23 251.38 22.16
+\c 246.07 24.71 242.52 29.08 241.72 35.11
+\c 243.02 32.03 245.47 29.70 248.89 28.13
+\c 253.24 26.13 259.08 25.25 265.94 25.27
+\c 279.67 25.31 297.50 28.92 315.60 34.40
+\l 315.61 34.40
+\l 315.62 34.41
+\c 353.41 48.85 372.88 54.65 382.18 54.80
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han62.pgf b/graphics/pgf/contrib/pgfornament-han/han/han62.pgf
new file mode 100644
index 0000000000..556dd0a6c1
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han62.pgf
@@ -0,0 +1,37 @@
+% han62.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 107.15 140.25
+\c 122.81 163.37 148.02 176.74 161.92 153.95
+\c 168.91 167.58 183.29 180.25 205.63 180.25
+\c 216.14 180.25 229.12 172.51 234.92 159.11
+\c 250.05 167.81 265.53 162.47 272.98 149.29
+\c 283.31 159.86 297.24 152.39 298.92 136.19
+\c 304.14 98.20 352.81 116.59 345.41 137.61
+\c 337.64 152.41 322.43 146.91 323.29 139.62
+\c 323.47 134.24 328.11 129.49 317.71 127.37
+\c 309.28 125.77 304.28 138.23 307.68 148.62
+\c 318.25 171.43 334.27 171.51 346.85 161.27
+\c 366.42 176.91 386.05 176.27 400.25 152.65
+\c 358.77 163.75 370.37 74.94 313.00 94.20
+\c 280.48 34.31 221.88 109.27 278.20 114.01
+\c 266.42 135.96 240.64 126.54 240.85 112.92
+\c 240.67 105.62 249.58 99.18 239.05 97.28
+\c 232.19 96.45 233.75 99.36 230.28 104.72
+\c 206.60 151.87 122.35 106.53 152.18 65.49
+\c 197.52 14.88 233.71 103.59 167.57 84.09
+\c 187.77 120.49 219.39 105.61 235.68 74.88
+\c 308.95 65.64 265.05 7.66 244.12 34.26
+\c 245.01 11.58 227.79 0.25 217.59 0.25
+\c 202.83 0.25 192.42 8.17 184.04 17.64
+\c 173.66 9.50 161.35 8.42 154.33 20.59
+\c 147.67 31.36 141.72 31.53 134.86 26.53
+\c 126.62 21.35 113.10 29.03 107.15 40.25
+\l 0.25 40.25
+\l 0.25 140.25
+\l 107.15 140.25
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han63.pgf b/graphics/pgf/contrib/pgfornament-han/han/han63.pgf
new file mode 100644
index 0000000000..0d0f65213f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han63.pgf
@@ -0,0 +1,199 @@
+% han63.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 217.59 -0.00
+\c 202.83 -0.00 192.39 7.89 184.01 17.32
+\c 178.84 13.31 173.19 11.01 167.91 11.25
+\c 162.58 11.48 157.66 14.32 154.12 20.46
+\l 154.12 20.46
+\c 150.81 25.81 147.69 28.49 144.61 29.23
+\c 141.53 29.97 138.41 28.81 135.01 26.33
+\l 135.00 26.32
+\l 134.99 26.32
+\c 130.77 23.67 125.23 24.32 120.03 27.02
+\c 114.87 29.70 110.02 34.40 107.01 40.00
+\l -0.00 40.00
+\l -0.00 140.50
+\l 107.03 140.50
+\c 114.87 152.04 125.07 161.15 135.11 164.55
+\c 140.15 166.26 145.16 166.52 149.78 164.91
+\c 154.31 163.33 158.45 159.93 161.90 154.41
+\c 168.99 167.97 183.39 180.50 205.63 180.50
+\c 216.20 180.50 229.14 172.78 235.03 159.43
+\c 250.09 167.95 265.51 162.68 273.04 149.64
+\c 278.21 154.79 284.31 155.58 289.31 153.00
+\c 294.39 150.38 298.32 144.38 299.17 136.22
+\l 299.17 136.22
+\c 300.47 126.78 304.45 120.89 309.56 117.64
+\c 314.68 114.39 320.95 113.79 326.85 115.01
+\c 332.75 116.24 338.26 119.30 341.82 123.34
+\c 345.38 127.38 346.99 132.35 345.18 137.51
+\c 341.33 144.82 335.70 147.08 331.14 146.65
+\c 328.86 146.44 326.84 145.55 325.46 144.28
+\c 324.08 143.01 323.33 141.38 323.54 139.65
+\l 323.54 139.64
+\l 323.54 139.63
+\c 323.63 137.01 324.84 134.49 324.72 132.26
+\c 324.66 131.14 324.23 130.10 323.15 129.23
+\c 322.08 128.36 320.38 127.66 317.76 127.13
+\l 317.76 127.12
+\l 317.76 127.12
+\c 315.59 126.71 313.62 127.21 311.97 128.35
+\c 310.32 129.49 308.99 131.26 308.03 133.40
+\c 306.13 137.67 305.73 143.44 307.45 148.70
+\l 307.45 148.71
+\l 307.46 148.73
+\c 312.76 160.17 319.47 165.97 326.46 167.58
+\c 333.39 169.18 340.56 166.64 346.85 161.57
+\c 356.62 169.33 366.43 173.09 375.60 171.93
+\c 384.82 170.76 393.34 164.63 400.47 152.78
+\l 400.79 152.25
+\l 400.19 152.41
+\c 389.90 155.16 382.98 151.75 377.38 145.33
+\c 371.77 138.91 367.54 129.46 362.81 120.25
+\c 358.08 111.04 352.84 102.05 345.15 96.56
+\c 337.50 91.10 327.40 89.17 313.11 93.92
+\c 304.98 79.03 295.20 72.44 285.96 71.12
+\c 276.68 69.78 267.99 73.72 262.11 79.69
+\c 256.22 85.66 253.11 93.68 255.07 100.56
+\c 257.00 107.36 263.95 112.92 277.80 114.19
+\c 271.94 124.82 262.79 127.84 255.07 126.56
+\c 247.27 125.26 241.00 119.57 241.10 112.92
+\l 241.10 112.92
+\l 241.10 112.91
+\c 241.01 109.37 243.16 105.97 244.07 103.15
+\c 244.52 101.74 244.66 100.44 243.96 99.36
+\c 243.25 98.28 241.76 97.51 239.10 97.03
+\l 239.09 97.03
+\l 239.08 97.03
+\c 237.35 96.82 236.13 96.84 235.21 97.10
+\c 234.29 97.35 233.66 97.85 233.19 98.53
+\c 232.24 99.90 231.79 101.94 230.07 104.58
+\l 230.07 104.59
+\l 230.06 104.61
+\c 224.17 116.33 214.55 122.28 203.85 124.01
+\c 193.16 125.73 181.38 123.22 171.28 117.95
+\c 161.17 112.69 152.74 104.68 148.70 95.46
+\c 144.65 86.25 144.97 75.84 152.38 65.64
+\c 163.67 53.04 174.35 49.15 182.99 50.03
+\c 191.63 50.92 198.27 56.59 201.46 63.23
+\c 204.65 69.87 204.38 77.41 199.28 82.11
+\c 194.17 86.81 184.13 88.71 167.64 83.85
+\l 167.06 83.68
+\l 167.35 84.21
+\c 172.42 93.34 178.21 99.27 184.33 102.55
+\c 190.44 105.82 196.87 106.42 203.15 104.90
+\c 215.69 101.87 227.66 90.45 235.83 75.10
+\c 254.10 72.78 265.13 67.43 271.04 61.06
+\c 276.96 54.68 277.70 47.28 275.46 41.04
+\c 273.22 34.81 268.01 29.71 262.01 27.85
+\c 256.16 26.03 249.57 27.40 244.34 33.71
+\c 244.62 22.60 240.61 14.19 235.19 8.57
+\c 229.68 2.86 222.78 -0.00 217.59 -0.00
+
+\m 217.59 0.50
+\c 222.60 0.50 229.41 3.30 234.84 8.92
+\c 240.26 14.54 244.31 22.97 243.87 34.25
+\l 243.84 35.01
+\l 244.32 34.41
+\c 249.50 27.83 256.03 26.51 261.86 28.32
+\c 267.69 30.14 272.80 35.13 274.99 41.21
+\c 277.18 47.30 276.48 54.47 270.67 60.72
+\c 264.87 66.98 253.93 72.33 235.65 74.63
+\l 235.52 74.65
+\l 235.46 74.76
+\c 227.34 90.08 215.40 101.43 203.03 104.42
+\c 196.85 105.91 190.57 105.32 184.56 102.11
+\c 178.67 98.96 173.06 93.22 168.10 84.46
+\c 184.29 89.11 194.39 87.28 199.61 82.48
+\c 204.91 77.60 205.16 69.79 201.91 63.01
+\c 198.65 56.24 191.87 50.44 183.04 49.54
+\c 174.21 48.63 163.36 52.63 151.99 65.32
+\l 151.99 65.33
+\l 151.98 65.34
+\c 144.48 75.66 144.14 86.31 148.24 95.66
+\c 152.35 105.02 160.86 113.09 171.05 118.40
+\c 181.24 123.70 193.10 126.25 203.93 124.50
+\c 214.75 122.75 224.54 116.69 230.49 104.85
+\c 232.25 102.14 232.75 100.05 233.60 98.82
+\c 234.03 98.21 234.52 97.80 235.34 97.58
+\c 236.16 97.35 237.32 97.32 239.02 97.53
+\l 239.02 97.53
+\c 241.61 98.00 242.95 98.74 243.54 99.63
+\c 244.13 100.53 244.03 101.65 243.60 103.00
+\c 242.73 105.70 240.51 109.17 240.60 112.92
+\c 240.50 119.88 247.00 125.72 254.99 127.05
+\c 262.98 128.38 272.49 125.18 278.42 114.13
+\l 278.60 113.79
+\l 278.22 113.76
+\c 264.20 112.58 257.43 107.07 255.55 100.42
+\c 253.66 93.78 256.68 85.92 262.47 80.04
+\c 268.26 74.17 276.79 70.30 285.89 71.61
+\c 294.99 72.92 304.68 79.39 312.78 94.32
+\l 312.88 94.50
+\l 313.08 94.44
+\c 327.37 89.64 337.29 91.57 344.86 96.97
+\c 352.43 102.37 357.64 111.28 362.37 120.48
+\c 367.09 129.67 371.32 139.15 377.00 145.65
+\c 382.57 152.03 389.62 155.45 399.72 152.97
+\c 392.71 164.40 384.45 170.31 375.54 171.44
+\c 366.50 172.58 356.76 168.87 347.01 161.07
+\l 346.85 160.95
+\l 346.70 161.08
+\c 340.45 166.16 333.38 168.67 326.57 167.10
+\c 319.77 165.53 313.18 159.88 307.92 148.53
+\c 306.24 143.40 306.64 137.75 308.49 133.60
+\c 309.41 131.52 310.70 129.83 312.25 128.76
+\c 313.81 127.69 315.62 127.23 317.66 127.61
+\c 320.24 128.14 321.87 128.83 322.84 129.61
+\c 323.82 130.40 324.17 131.27 324.22 132.28
+\c 324.33 134.30 323.14 136.84 323.05 139.59
+\c 323.05 139.59 323.05 139.59 323.05 139.59
+\c 322.82 141.50 323.65 143.30 325.12 144.65
+\c 326.60 146.00 328.71 146.92 331.09 147.15
+\c 335.86 147.59 341.71 145.19 345.63 137.72
+\l 345.64 137.71
+\l 345.65 137.69
+\c 347.53 132.35 345.84 127.15 342.19 123.01
+\c 338.55 118.88 332.95 115.77 326.95 114.53
+\c 320.95 113.28 314.54 113.88 309.30 117.22
+\c 304.05 120.55 299.99 126.60 298.68 136.15
+\l 298.68 136.16
+\l 298.67 136.16
+\c 297.84 144.20 293.97 150.03 289.08 152.56
+\c 284.19 155.08 278.27 154.34 273.16 149.12
+\l 272.93 148.88
+\l 272.77 149.17
+\c 265.37 162.24 250.07 167.54 235.05 158.89
+\l 234.80 158.75
+\l 234.69 159.01
+\c 228.93 172.32 216.02 180.00 205.63 180.00
+\c 183.39 180.00 169.10 167.40 162.14 153.84
+\l 161.94 153.44
+\l 161.71 153.82
+\c 158.26 159.48 154.12 162.87 149.62 164.44
+\c 145.12 166.01 140.23 165.76 135.28 164.08
+\c 125.36 160.72 115.16 151.64 107.36 140.11
+\l 107.28 140.00
+\l 107.15 140.00
+\l 0.50 140.00
+\l 0.50 40.50
+\l 107.30 40.50
+\l 107.37 40.37
+\c 110.32 34.80 115.16 30.11 120.26 27.46
+\c 125.37 24.81 130.71 24.21 134.73 26.74
+\c 138.18 29.25 141.46 30.50 144.73 29.71
+\c 148.00 28.93 151.20 26.13 154.54 20.72
+\l 154.55 20.72
+\l 154.55 20.71
+\c 158.02 14.68 162.77 11.98 167.94 11.75
+\c 173.11 11.52 178.73 13.79 183.89 17.83
+\l 184.07 17.98
+\l 184.23 17.80
+\c 192.59 8.36 202.92 0.50 217.59 0.50
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han64.pgf b/graphics/pgf/contrib/pgfornament-han/han/han64.pgf
new file mode 100644
index 0000000000..8594ea5c34
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han64.pgf
@@ -0,0 +1,50 @@
+% han64.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+\pgfsetroundjoin
+
+\r -5 45 355 255
+\ubb
+
+\m 0.25 132.05
+\c 158.62 0.25 402.79 96.48 310.16 210.08
+\c 274.00 252.46 310.18 271.55 328.88 262.88
+\c 348.03 252.44 335.95 232.76 322.01 240.55
+\c 312.27 248.75 301.43 235.21 318.38 225.83
+\c 355.39 208.51 369.69 291.59 306.18 275.22
+\c 275.42 263.61 275.67 235.90 291.55 219.78
+\c 249.29 223.20 231.12 206.69 235.75 168.51
+\c 242.98 120.83 201.04 111.35 177.89 132.55
+\c 160.85 154.57 186.93 178.70 204.00 165.35
+\c 209.46 160.08 209.83 149.98 203.38 151.12
+\c 200.42 152.06 199.66 158.97 190.69 156.79
+\c 185.75 155.19 184.47 144.69 191.84 140.40
+\c 205.77 131.90 224.90 148.10 219.36 162.52
+\c 206.11 193.55 168.05 185.15 161.95 154.53
+\c 141.37 164.07 123.92 160.67 112.33 142.80
+\c 98.33 120.19 61.08 134.72 77.48 155.23
+\c 91.50 171.89 110.58 155.07 85.09 147.41
+\c 102.42 136.61 115.40 153.31 103.94 166.60
+\c 93.88 180.04 78.29 173.39 66.37 157.95
+\c 52.04 178.14 35.04 180.73 18.70 170.72
+\c 9.61 163.37 16.50 154.76 28.45 163.04
+\c 39.98 168.85 51.73 161.85 58.42 146.01
+\c 68.55 122.41 85.42 112.62 107.46 123.56
+\c 122.02 94.14 173.98 109.53 153.26 131.32
+\c 146.83 140.53 135.54 133.40 142.88 124.63
+\c 145.26 121.71 142.68 116.89 131.46 119.81
+\c 110.96 127.26 138.25 172.31 161.07 136.47
+\c 195.03 88.53 244.47 108.05 248.17 150.42
+\c 281.46 134.75 303.76 153.55 299.77 173.32
+\c 292.95 197.43 270.72 197.21 264.02 186.83
+\c 257.34 179.72 266.08 171.76 274.48 178.72
+\c 278.57 185.24 286.75 185.35 286.53 174.41
+\c 281.63 146.90 246.44 155.52 246.98 178.82
+\c 247.46 210.95 283.37 222.99 304.34 200.26
+\c 367.33 112.12 172.37 20.92 7.43 141.85
+\l 0.25 132.05
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han65.pgf b/graphics/pgf/contrib/pgfornament-han/han/han65.pgf
new file mode 100644
index 0000000000..488a3a8fe2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han65.pgf
@@ -0,0 +1,275 @@
+% han65.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+\pgfsetroundjoin
+
+\m 176.82 68.16
+\c 119.21 68.13 54.58 86.51 0.09 131.86
+\l -0.09 132.01
+\l 0.05 132.20
+\l 7.38 142.20
+\l 7.58 142.05
+\c 89.98 81.63 179.89 74.21 241.29 92.89
+\c 271.99 102.23 295.56 118.09 307.51 137.08
+\c 319.46 156.06 319.84 178.14 304.15 200.10
+\c 293.73 211.39 279.63 214.03 268.06 209.88
+\c 256.50 205.73 247.47 194.79 247.23 178.82
+\l 247.23 178.81
+\c 246.96 167.29 255.53 159.42 264.76 157.81
+\c 269.38 157.00 274.15 157.77 278.07 160.42
+\c 281.99 163.08 285.06 167.62 286.28 174.44
+\c 286.33 177.13 285.87 179.12 285.10 180.49
+\c 284.33 181.87 283.27 182.62 282.07 182.87
+\c 279.69 183.36 276.70 181.78 274.69 178.59
+\l 274.67 178.55
+\l 274.64 178.53
+\c 270.37 174.99 265.94 175.21 263.44 177.31
+\c 262.19 178.36 261.42 179.87 261.41 181.58
+\c 261.40 183.29 262.13 185.17 263.83 186.98
+\c 270.67 197.55 293.16 197.62 300.01 173.39
+\l 300.01 173.38
+\l 300.02 173.37
+\c 302.03 163.38 297.40 153.62 288.08 148.36
+\c 278.81 143.13 264.93 142.36 248.37 150.07
+\c 246.40 128.97 233.11 113.52 216.03 109.34
+\c 198.85 105.13 177.89 112.30 160.87 136.33
+\l 160.86 136.33
+\l 160.86 136.34
+\c 155.18 145.26 149.26 149.10 143.90 149.79
+\c 138.55 150.48 133.72 148.02 130.20 144.20
+\c 126.69 140.39 124.51 135.23 124.48 130.59
+\c 124.45 125.96 126.51 121.88 131.54 120.05
+\c 137.10 118.60 140.48 119.10 142.13 120.23
+\c 142.95 120.80 143.35 121.52 143.43 122.26
+\c 143.50 123.00 143.25 123.78 142.69 124.47
+\c 140.82 126.70 140.12 128.85 140.25 130.69
+\c 140.39 132.52 141.36 134.02 142.77 134.93
+\c 145.60 136.73 150.19 136.15 153.46 131.46
+\c 158.66 125.98 159.34 120.79 157.11 116.66
+\c 154.88 112.52 149.80 109.45 143.65 107.99
+\c 137.49 106.54 130.23 106.69 123.59 109.06
+\c 117.01 111.41 111.04 115.96 107.36 123.25
+\c 96.38 117.86 86.62 117.57 78.36 121.61
+\c 70.05 125.67 63.27 134.08 58.19 145.91
+\l 58.19 145.91
+\c 54.86 153.80 50.28 159.46 45.12 162.43
+\c 39.97 165.39 34.26 165.69 28.56 162.82
+\c 25.56 160.74 22.86 159.71 20.63 159.47
+\c 18.40 159.22 16.62 159.76 15.51 160.84
+\c 14.40 161.92 14.00 163.54 14.47 165.32
+\c 14.93 167.10 16.24 169.05 18.54 170.91
+\l 18.55 170.92
+\l 18.57 170.93
+\c 26.78 175.96 35.19 177.84 43.34 175.90
+\c 51.43 173.98 59.24 168.30 66.37 158.34
+\c 72.31 165.95 79.13 171.43 85.78 173.35
+\c 92.50 175.28 99.05 173.53 104.13 166.76
+\l 104.13 166.76
+\c 109.92 160.04 109.56 152.39 105.50 147.81
+\c 101.43 143.22 93.70 141.75 84.96 147.20
+\l 84.49 147.49
+\l 85.02 147.65
+\c 91.36 149.55 94.89 152.03 96.42 154.34
+\c 97.94 156.66 97.53 158.79 95.93 160.26
+\c 92.75 163.20 84.62 163.32 77.68 155.07
+\l 77.68 155.07
+\c 77.67 155.07 77.67 155.07 77.67 155.07
+\c 73.61 149.99 72.90 145.34 74.27 141.54
+\c 75.65 137.73 79.14 134.74 83.59 133.08
+\c 92.50 129.75 105.18 131.73 112.12 142.93
+\l 112.12 142.93
+\l 112.12 142.94
+\c 117.94 151.91 125.26 157.28 133.72 159.19
+\c 142.09 161.08 151.57 159.55 161.78 154.86
+\c 164.94 170.10 175.97 179.84 187.93 181.89
+\c 199.97 183.96 212.93 178.22 219.59 162.62
+\l 219.59 162.61
+\l 219.59 162.61
+\c 225.23 147.95 205.85 131.56 191.72 140.18
+\c 191.72 140.18 191.72 140.18 191.71 140.18
+\c 191.71 140.18 191.71 140.19 191.71 140.19
+\c 187.95 142.38 186.38 146.17 186.40 149.61
+\c 186.42 153.04 188.00 156.18 190.62 157.03
+\l 190.62 157.03
+\l 190.63 157.03
+\c 195.18 158.14 197.74 156.92 199.46 155.31
+\c 200.32 154.50 200.98 153.61 201.60 152.87
+\c 202.22 152.14 202.79 151.58 203.45 151.37
+\c 204.98 151.10 206.06 151.49 206.78 152.29
+\c 207.51 153.09 207.89 154.35 207.91 155.83
+\c 207.94 158.79 206.50 162.58 203.83 165.16
+\c 195.41 171.74 184.79 169.08 178.34 162.05
+\c 171.89 155.01 169.64 143.64 178.08 132.72
+\c 189.58 122.19 205.75 119.30 218.11 124.93
+\c 230.48 130.56 239.11 144.71 235.51 168.47
+\l 235.51 168.48
+\l 235.51 168.48
+\c 233.19 187.61 236.58 201.39 245.90 209.93
+\c 255.14 218.39 270.17 221.65 291.03 220.04
+\c 283.30 228.11 279.35 238.92 281.13 249.23
+\c 282.95 259.72 290.65 269.63 306.10 275.46
+\l 306.11 275.46
+\l 306.12 275.46
+\c 322.05 279.57 333.15 277.45 340.24 272.17
+\c 347.32 266.90 350.36 258.51 350.23 250.17
+\c 350.10 241.82 346.81 233.52 341.19 228.36
+\c 335.58 223.21 327.60 221.24 318.28 225.61
+\l 318.27 225.61
+\l 318.26 225.61
+\c 313.99 227.98 311.45 230.61 310.21 233.13
+\c 308.96 235.65 309.03 238.06 309.97 239.90
+\c 310.91 241.74 312.72 243.01 314.92 243.28
+\c 317.12 243.55 319.70 242.83 322.17 240.74
+\l 322.13 240.77
+\c 329.00 236.93 335.32 239.85 337.63 244.98
+\c 339.94 250.11 338.26 257.48 328.77 262.66
+\c 319.54 266.93 305.93 264.35 299.15 255.47
+\c 295.76 251.04 294.06 245.03 295.45 237.47
+\c 296.84 229.92 301.33 220.82 310.35 210.24
+\l 310.35 210.24
+\l 310.36 210.24
+\c 333.56 181.78 335.69 154.33 323.31 131.31
+\c 310.92 108.29 284.08 89.71 249.41 78.80
+\c 227.74 71.99 203.00 68.17 176.82 68.16
+
+\m 176.82 68.66
+\c 202.96 68.67 227.64 72.48 249.26 79.28
+\c 283.85 90.15 310.57 108.69 322.87 131.55
+\c 335.16 154.40 333.08 181.58 309.97 209.92
+\c 300.91 220.54 296.37 229.71 294.96 237.38
+\c 293.55 245.06 295.28 251.23 298.75 255.78
+\c 305.70 264.87 319.52 267.50 328.99 263.11
+\l 328.99 263.10
+\l 329.00 263.10
+\c 338.65 257.84 340.51 250.15 338.08 244.78
+\c 335.66 239.40 328.97 236.38 321.89 240.33
+\l 321.87 240.35
+\l 321.85 240.36
+\c 319.46 242.37 317.03 243.03 314.98 242.78
+\c 312.94 242.53 311.28 241.36 310.41 239.67
+\c 309.54 237.98 309.47 235.75 310.65 233.35
+\c 311.84 230.95 314.30 228.38 318.50 226.05
+\c 327.67 221.76 335.37 223.69 340.85 228.73
+\c 346.34 233.77 349.60 241.96 349.73 250.17
+\c 349.86 258.39 346.88 266.61 339.94 271.78
+\c 333.00 276.93 322.08 279.06 306.26 274.98
+\c 290.95 269.20 283.41 259.45 281.62 249.15
+\c 279.84 238.85 283.84 227.97 291.73 219.96
+\l 292.20 219.48
+\l 291.53 219.53
+\c 270.44 221.24 255.41 217.96 246.24 209.56
+\c 237.07 201.16 233.69 187.59 236.00 168.55
+\l 236.00 168.54
+\c 239.62 144.63 230.90 130.20 218.32 124.47
+\c 205.74 118.75 189.37 121.70 177.72 132.37
+\l 177.71 132.38
+\l 177.70 132.40
+\c 169.11 143.49 171.38 155.19 177.97 162.38
+\c 184.57 169.58 195.51 172.30 204.16 165.55
+\l 204.17 165.54
+\l 204.18 165.53
+\c 206.96 162.84 208.44 158.95 208.41 155.83
+\c 208.39 154.27 208.00 152.89 207.15 151.95
+\c 206.31 151.02 205.01 150.58 203.34 150.87
+\l 203.32 150.88
+\l 203.31 150.88
+\c 202.49 151.14 201.86 151.79 201.22 152.55
+\c 200.59 153.30 199.94 154.18 199.12 154.94
+\c 197.48 156.47 195.18 157.62 190.76 156.55
+\c 188.44 155.80 186.92 152.89 186.90 149.60
+\c 186.88 146.32 188.36 142.71 191.97 140.62
+\l 191.97 140.61
+\l 191.97 140.61
+\c 205.69 132.24 224.58 148.25 219.13 162.43
+\c 212.54 177.85 199.85 183.43 188.02 181.40
+\c 176.19 179.37 165.23 169.70 162.20 154.48
+\l 162.13 154.17
+\l 161.85 154.30
+\c 151.59 159.06 142.14 160.58 133.82 158.70
+\c 125.51 156.82 118.31 151.56 112.54 142.67
+\l 112.54 142.66
+\c 105.47 131.26 92.53 129.20 83.42 132.61
+\c 78.86 134.31 75.24 137.39 73.80 141.37
+\c 72.37 145.35 73.15 150.21 77.28 155.39
+\l 77.29 155.39
+\l 77.29 155.39
+\c 84.36 163.80 92.78 163.84 96.27 160.62
+\c 98.01 159.01 98.46 156.54 96.83 154.07
+\c 95.26 151.68 91.69 149.30 85.71 147.40
+\c 94.08 142.41 101.31 143.83 105.12 148.14
+\c 109.02 152.52 109.42 159.87 103.75 166.44
+\l 103.74 166.44
+\l 103.74 166.45
+\c 98.76 173.11 92.49 174.76 85.92 172.87
+\c 79.35 170.98 72.51 165.49 66.57 157.80
+\l 66.36 157.53
+\l 66.17 157.81
+\c 59.03 167.87 51.24 173.52 43.23 175.42
+\c 35.22 177.32 26.97 175.49 18.84 170.52
+\c 16.61 168.71 15.38 166.83 14.95 165.19
+\c 14.52 163.55 14.89 162.15 15.86 161.20
+\c 16.83 160.24 18.45 159.73 20.58 159.96
+\c 22.71 160.20 25.35 161.19 28.31 163.25
+\l 28.32 163.26
+\l 28.34 163.26
+\c 34.17 166.20 40.09 165.90 45.37 162.86
+\c 50.65 159.82 55.29 154.06 58.65 146.11
+\l 58.65 146.11
+\c 63.70 134.34 70.42 126.05 78.58 122.06
+\c 86.75 118.06 96.38 118.34 107.35 123.78
+\l 107.57 123.89
+\l 107.68 123.67
+\c 111.29 116.38 117.21 111.87 123.76 109.53
+\c 130.30 107.19 137.47 107.04 143.53 108.48
+\c 149.60 109.91 154.54 112.94 156.67 116.90
+\c 158.81 120.85 158.22 125.75 153.08 131.15
+\l 153.07 131.16
+\l 153.06 131.18
+\c 149.90 135.70 145.63 136.16 143.04 134.51
+\c 141.75 133.68 140.87 132.33 140.75 130.65
+\c 140.63 128.97 141.27 126.94 143.07 124.79
+\l 143.07 124.79
+\l 143.07 124.79
+\c 143.70 124.01 144.02 123.10 143.93 122.21
+\c 143.84 121.32 143.34 120.46 142.41 119.82
+\c 140.56 118.55 137.05 118.10 131.40 119.57
+\l 131.39 119.57
+\l 131.37 119.58
+\c 126.16 121.47 123.95 125.81 123.98 130.60
+\c 124.01 135.38 126.24 140.64 129.84 144.54
+\c 133.43 148.44 138.42 150.99 143.96 150.28
+\c 149.50 149.57 155.55 145.60 161.27 136.61
+\c 178.21 112.70 198.95 105.66 215.91 109.82
+\c 232.87 113.98 246.08 129.35 247.92 150.44
+\l 247.95 150.80
+\l 248.28 150.65
+\c 264.87 142.84 278.67 143.63 287.83 148.80
+\c 296.98 153.96 301.50 163.48 299.53 173.26
+\c 292.74 197.22 270.79 196.86 264.23 186.70
+\l 264.22 186.68
+\l 264.20 186.66
+\c 262.57 184.92 261.89 183.15 261.91 181.59
+\c 261.92 180.02 262.61 178.65 263.76 177.69
+\c 266.05 175.77 270.18 175.49 274.31 178.91
+\c 276.40 182.19 279.52 183.91 282.17 183.36
+\c 283.51 183.08 284.70 182.22 285.53 180.74
+\c 286.36 179.26 286.84 177.17 286.78 174.40
+\l 286.78 174.39
+\l 286.78 174.37
+\c 285.54 167.44 282.39 162.75 278.35 160.01
+\c 274.31 157.27 269.40 156.49 264.67 157.32
+\c 255.22 158.96 246.46 167.05 246.73 178.83
+\c 246.97 194.98 256.14 206.13 267.89 210.35
+\c 279.65 214.57 293.98 211.86 304.52 200.43
+\l 304.53 200.42
+\l 304.54 200.41
+\c 320.34 178.30 319.97 155.94 307.93 136.81
+\c 295.89 117.68 272.22 101.78 241.43 92.42
+\c 179.92 73.70 89.96 81.13 7.49 141.51
+\l 0.59 132.10
+\c 54.95 86.94 119.39 68.63 176.82 68.66
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han66.pgf b/graphics/pgf/contrib/pgfornament-han/han/han66.pgf
new file mode 100644
index 0000000000..1401e8653c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han66.pgf
@@ -0,0 +1,60 @@
+% han66.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\r 10 10 395 175
+\ubb
+
+\m 140.10 187.75
+\c 124.87 187.95 112.47 178.32 108.71 164.44
+\c 91.77 172.95 65.34 150.08 70.34 136.24
+\c 33.74 119.60 60.39 82.09 84.64 97.16
+\c 100.47 108.63 95.48 124.94 78.11 125.25
+\c 89.35 129.66 105.27 124.97 98.03 104.25
+\c 93.40 91.19 64.29 78.81 47.48 97.78
+\c 32.50 109.16 0.25 84.24 24.46 63.78
+\c 2.48 16.97 66.52 0.25 80.20 34.53
+\c 87.73 56.12 56.36 70.38 52.44 44.45
+\c 42.10 63.53 86.02 85.96 126.21 50.19
+\c 148.45 26.95 175.49 22.18 211.21 31.65
+\c 175.62 30.38 149.18 38.00 127.90 73.96
+\c 87.72 65.23 98.36 113.64 120.28 113.77
+\c 128.22 138.26 160.56 145.30 176.28 119.65
+\c 203.20 133.61 240.48 99.63 212.72 72.29
+\c 241.38 52.67 271.92 68.81 286.77 84.51
+\c 305.77 100.24 325.47 101.32 343.19 91.40
+\c 350.95 85.39 369.31 76.06 390.64 74.45
+\c 378.34 79.18 366.66 84.69 351.24 99.00
+\c 333.43 113.33 309.00 113.33 282.47 92.05
+\c 237.23 69.12 232.27 126.09 263.28 122.28
+\c 275.50 119.46 278.88 108.47 270.18 104.52
+\c 272.22 112.04 268.61 117.53 259.40 117.14
+\c 237.75 108.98 255.32 80.92 281.42 97.07
+\c 298.44 108.35 289.85 133.89 266.64 131.77
+\c 278.64 151.76 252.47 171.80 236.85 158.11
+\c 233.92 165.37 223.91 169.83 215.96 165.90
+\c 207.17 160.19 212.33 147.28 207.09 140.81
+\c 182.43 107.64 145.54 151.21 182.37 160.89
+\c 152.91 141.46 199.49 118.12 205.39 152.05
+\c 209.13 176.81 177.87 186.17 169.33 175.54
+\c 159.40 183.96 149.24 187.62 140.10 187.75
+
+\m 150.19 128.29
+\c 140.43 128.60 130.26 123.02 123.44 108.28
+\c 103.60 109.61 101.20 63.68 130.50 82.83
+\c 156.69 12.50 264.81 34.53 301.14 69.62
+\c 312.13 79.98 331.02 80.68 346.40 71.74
+\c 360.30 60.73 388.18 61.29 404.53 72.13
+\c 391.43 68.80 376.08 69.11 354.85 79.18
+\c 333.89 92.75 319.05 95.78 304.47 89.49
+\c 290.14 81.63 284.84 72.39 270.29 64.04
+\c 243.64 53.07 221.15 55.80 208.86 68.63
+\c 201.96 59.49 172.41 68.32 179.27 86.66
+\c 185.82 107.45 208.26 99.38 203.30 85.83
+\c 200.52 95.30 190.79 97.25 186.09 84.89
+\c 183.61 78.22 200.31 63.51 212.65 81.30
+\c 224.48 93.95 203.15 126.92 174.48 112.98
+\c 169.30 121.78 159.95 127.98 150.19 128.29
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han67.pgf b/graphics/pgf/contrib/pgfornament-han/han/han67.pgf
new file mode 100644
index 0000000000..a8b510700d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han67.pgf
@@ -0,0 +1,328 @@
+% han67.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\m 140.11 188.00
+\c 124.86 188.20 112.43 178.60 108.56 164.76
+\c 100.01 168.88 89.21 165.28 81.14 158.92
+\c 77.07 155.71 73.68 151.79 71.62 147.80
+\c 69.60 143.88 68.88 139.87 70.06 136.37
+\c 60.99 132.20 55.77 126.74 53.49 121.09
+\c 51.19 115.40 51.86 109.54 54.45 104.69
+\c 59.63 95.00 72.53 89.34 84.77 96.95
+\l 84.78 96.95
+\l 84.79 96.96
+\c 92.76 102.73 95.54 109.78 94.07 115.45
+\c 92.67 120.84 87.35 124.79 79.32 125.33
+\c 84.65 127.09 90.75 126.91 94.85 123.97
+\c 97.05 122.40 98.67 120.07 99.31 116.84
+\c 99.95 113.62 99.59 109.48 97.79 104.33
+\c 95.53 97.93 87.15 91.59 77.26 89.25
+\c 67.37 86.91 56.00 88.53 47.66 97.95
+\l 47.65 97.96
+\l 47.63 97.98
+\c 43.81 100.88 38.91 101.46 34.10 100.39
+\c 29.30 99.32 24.58 96.61 21.09 92.89
+\c 17.60 89.17 15.34 84.43 15.49 79.32
+\c 15.63 74.24 18.19 68.83 24.17 63.72
+\c 18.74 52.04 18.60 42.19 21.74 34.54
+\c 24.90 26.86 31.33 21.40 38.87 18.51
+\c 46.41 15.62 55.06 15.28 62.71 17.82
+\c 70.35 20.36 76.98 25.80 80.43 34.44
+\l 80.43 34.44
+\l 80.43 34.45
+\c 84.24 45.36 78.21 54.47 70.71 57.54
+\c 66.95 59.07 62.81 59.11 59.36 57.09
+\c 56.07 55.17 53.48 51.32 52.39 45.31
+\c 50.31 49.76 51.07 54.32 54.15 58.27
+\c 57.39 62.44 63.12 65.90 70.43 67.65
+\c 85.06 71.15 106.00 67.84 126.05 50.00
+\c 148.34 26.71 175.51 21.93 211.28 31.41
+\l 213.42 31.98
+\l 211.20 31.90
+\c 193.43 31.26 177.96 32.85 164.29 39.07
+\c 150.62 45.29 138.74 56.14 128.12 74.09
+\l 128.02 74.24
+\l 127.85 74.20
+\c 117.85 72.03 111.06 73.42 106.83 76.68
+\c 102.59 79.93 100.86 85.08 101.05 90.53
+\c 101.24 95.99 103.35 101.74 106.77 106.11
+\c 110.19 110.49 114.89 113.49 120.28 113.52
+\l 120.46 113.52
+\l 120.52 113.69
+\c 124.46 125.85 134.45 133.67 145.40 135.27
+\c 156.35 136.87 168.25 132.27 176.07 119.52
+\l 176.19 119.32
+\l 176.40 119.43
+\c 189.74 126.35 205.68 121.38 214.82 111.29
+\c 219.40 106.24 222.26 99.93 222.28 93.19
+\c 222.29 86.44 219.45 79.27 212.55 72.47
+\l 212.33 72.26
+\l 212.58 72.09
+\c 226.97 62.23 241.86 61.35 254.99 64.91
+\c 268.11 68.47 279.49 76.45 286.94 84.33
+\c 305.88 100.00 325.43 101.06 343.07 91.18
+\c 343.07 91.18 343.07 91.18 343.07 91.18
+\c 350.90 85.13 369.25 75.82 390.62 74.20
+\l 392.32 74.08
+\l 390.73 74.68
+\c 378.45 79.41 366.81 84.89 351.41 99.18
+\l 351.40 99.19
+\l 351.40 99.19
+\c 342.45 106.39 331.82 110.00 320.11 109.13
+\c 308.41 108.25 295.64 102.91 282.36 92.27
+\c 271.09 86.56 262.36 85.84 256.10 87.87
+\c 249.84 89.90 246.01 94.68 244.52 100.06
+\c 243.03 105.44 243.90 111.42 247.04 115.79
+\c 250.17 120.17 255.57 122.97 263.24 122.03
+\c 269.28 120.63 273.09 117.23 274.34 113.74
+\c 274.97 112.00 274.95 110.23 274.26 108.67
+\c 273.63 107.23 272.36 105.99 270.53 105.04
+\c 271.36 108.60 270.97 111.74 269.20 113.95
+\c 267.35 116.29 264.05 117.59 259.39 117.39
+\l 259.35 117.39
+\l 259.31 117.37
+\c 253.85 115.31 250.81 111.97 249.80 108.36
+\c 248.79 104.75 249.79 100.89 252.31 97.83
+\c 257.35 91.71 268.43 88.74 281.55 96.86
+\l 281.56 96.86
+\l 281.56 96.86
+\c 290.16 102.56 292.31 111.90 289.35 119.53
+\c 286.43 127.07 278.50 132.91 267.04 132.03
+\c 272.78 141.99 269.25 151.98 262.26 157.76
+\c 255.26 163.57 244.81 165.17 236.93 158.48
+\c 233.80 165.72 223.84 170.07 215.85 166.12
+\l 215.84 166.12
+\l 215.83 166.11
+\c 211.34 163.20 210.41 158.43 209.95 153.67
+\c 209.48 148.90 209.44 144.11 206.90 140.97
+\l 206.90 140.96
+\l 206.89 140.96
+\c 200.76 132.71 193.90 129.26 187.63 128.84
+\c 181.36 128.42 175.65 131.03 171.85 134.95
+\c 168.05 138.88 166.16 144.11 167.47 148.94
+\c 168.70 153.48 172.92 157.65 181.02 160.14
+\c 174.65 155.54 172.16 150.74 172.46 146.52
+\c 172.79 142.02 176.10 138.27 180.52 136.23
+\c 184.93 134.19 190.46 133.84 195.27 136.16
+\c 200.08 138.48 204.15 143.47 205.64 152.01
+\l 205.64 152.01
+\l 205.64 152.01
+\c 207.52 164.50 200.56 173.15 192.08 177.29
+\c 187.83 179.36 183.20 180.32 179.08 180.09
+\c 175.05 179.86 171.52 178.47 169.31 175.86
+\c 159.40 184.20 149.26 187.88 140.11 188.00
+
+\m 140.10 187.50
+\c 149.17 187.38 159.28 183.74 169.17 175.35
+\l 169.36 175.18
+\l 169.52 175.38
+\c 171.60 177.97 175.08 179.36 179.11 179.59
+\c 183.13 179.81 187.69 178.88 191.86 176.84
+\c 200.20 172.77 207.00 164.36 205.14 152.09
+\c 203.68 143.67 199.72 138.85 195.06 136.61
+\c 190.39 134.37 185.01 134.70 180.72 136.69
+\c 176.44 138.67 173.27 142.28 172.96 146.56
+\c 172.65 150.84 175.19 155.85 182.51 160.68
+\l 183.77 161.51
+\l 182.31 161.13
+\c 173.05 158.70 168.35 154.10 166.99 149.07
+\c 165.63 144.04 167.60 138.63 171.49 134.61
+\c 175.39 130.58 181.23 127.91 187.66 128.34
+\c 194.09 128.78 201.09 132.32 207.29 140.65
+\l 207.29 140.66
+\c 209.98 143.99 209.98 148.88 210.44 153.62
+\c 210.91 158.35 211.79 162.89 216.09 165.68
+\c 223.89 169.53 233.75 165.12 236.62 158.02
+\l 236.75 157.69
+\l 237.02 157.92
+\c 244.73 164.68 255.03 163.11 261.95 157.38
+\c 268.86 151.64 272.37 141.79 266.43 131.90
+\l 266.18 131.48
+\l 266.67 131.52
+\c 278.18 132.57 286.01 126.78 288.89 119.35
+\c 291.77 111.93 289.71 102.86 281.29 97.28
+\c 268.31 89.25 257.56 92.24 252.70 98.15
+\c 250.27 101.10 249.31 104.78 250.28 108.22
+\c 251.24 111.66 254.12 114.87 259.46 116.89
+\c 263.98 117.07 267.09 115.82 268.82 113.64
+\c 270.55 111.46 270.95 108.29 269.94 104.58
+\l 269.80 104.08
+\l 270.29 104.29
+\c 272.51 105.30 273.98 106.77 274.72 108.47
+\c 275.46 110.16 275.47 112.06 274.81 113.91
+\c 273.49 117.60 269.51 121.10 263.34 122.52
+\l 263.33 122.53
+\l 263.31 122.53
+\c 255.49 123.49 249.87 120.60 246.63 116.09
+\c 243.40 111.57 242.52 105.45 244.04 99.93
+\c 245.57 94.41 249.53 89.48 255.95 87.40
+\c 262.38 85.32 271.24 86.07 282.59 91.83
+\l 282.61 91.84
+\l 282.63 91.86
+\c 295.87 102.47 308.56 107.77 320.15 108.63
+\c 331.74 109.49 342.23 105.94 351.09 98.81
+\c 365.82 85.14 377.18 79.52 388.89 74.91
+\c 368.39 76.89 350.84 85.80 343.35 91.60
+\l 343.33 91.61
+\l 343.32 91.62
+\c 325.52 101.58 305.68 100.48 286.61 84.70
+\l 286.60 84.69
+\l 286.59 84.68
+\c 279.19 76.86 267.88 68.93 254.86 65.40
+\c 241.91 61.89 227.30 62.73 213.10 72.35
+\c 219.91 79.16 222.79 86.38 222.77 93.19
+\c 222.76 100.07 219.83 106.50 215.19 111.62
+\c 205.95 121.82 189.90 126.84 176.37 119.95
+\c 168.46 132.71 156.41 137.38 145.33 135.76
+\c 134.24 134.14 124.14 126.24 120.10 114.00
+\c 114.61 113.90 109.82 110.84 106.38 106.42
+\c 102.89 101.96 100.74 96.12 100.55 90.55
+\c 100.36 84.98 102.14 79.65 106.52 76.28
+\c 110.88 72.93 117.79 71.56 127.78 73.69
+\c 138.42 55.77 150.36 44.86 164.09 38.62
+\c 177.24 32.63 192.09 30.98 208.92 31.40
+\c 174.38 22.74 148.10 27.68 126.39 50.36
+\l 126.38 50.37
+\l 126.38 50.37
+\c 106.23 68.31 85.12 71.67 70.32 68.13
+\c 62.92 66.36 57.09 62.86 53.76 58.58
+\c 50.42 54.29 49.59 49.18 52.22 44.33
+\l 52.57 43.68
+\l 52.69 44.41
+\c 53.66 50.84 56.32 54.73 59.62 56.66
+\c 62.91 58.59 66.88 58.56 70.52 57.08
+\c 77.79 54.10 83.69 45.29 79.97 34.61
+\c 79.97 34.61 79.97 34.61 79.96 34.61
+\c 76.57 26.11 70.07 20.79 62.55 18.29
+\c 55.02 15.79 46.48 16.13 39.04 18.98
+\c 31.61 21.83 25.30 27.19 22.20 34.73
+\c 19.10 42.28 19.21 52.02 24.68 63.67
+\l 24.77 63.84
+\l 24.62 63.97
+\c 18.61 69.05 16.13 74.37 15.98 79.33
+\c 15.84 84.29 18.03 88.91 21.45 92.55
+\c 24.87 96.19 29.51 98.86 34.21 99.90
+\c 38.91 100.95 43.65 100.37 47.33 97.58
+\c 47.33 97.58 47.33 97.58 47.33 97.58
+\c 55.80 88.06 67.37 86.39 77.38 88.76
+\c 87.40 91.13 95.90 97.50 98.26 104.17
+\l 98.26 104.17
+\c 100.08 109.38 100.46 113.60 99.80 116.94
+\c 99.14 120.28 97.43 122.74 95.14 124.38
+\c 90.57 127.66 83.70 127.71 78.02 125.48
+\l 76.85 125.02
+\l 78.11 125.00
+\c 86.71 124.85 92.18 120.75 93.58 115.33
+\c 94.99 109.90 92.35 103.06 84.50 97.36
+\c 72.49 89.91 59.95 95.47 54.89 104.93
+\c 52.36 109.65 51.71 115.35 53.96 120.90
+\c 56.20 126.45 61.34 131.87 70.44 136.01
+\l 70.65 136.11
+\l 70.57 136.32
+\c 69.36 139.70 70.05 143.65 72.06 147.57
+\c 74.08 151.48 77.43 155.35 81.45 158.53
+\c 89.50 164.87 100.26 168.41 108.60 164.22
+\l 108.87 164.08
+\l 108.95 164.38
+\c 112.68 178.15 124.97 187.70 140.10 187.50
+
+\m 150.20 128.54
+\c 140.37 128.85 130.13 123.22 123.28 108.51
+\c 118.31 108.78 114.41 106.13 111.85 102.31
+\c 109.25 98.44 108.00 93.38 108.29 88.86
+\c 108.59 84.34 110.45 80.33 114.14 78.69
+\c 117.79 77.07 123.16 77.83 130.38 82.48
+\c 136.97 64.99 148.63 53.20 162.99 45.94
+\c 177.43 38.64 194.57 35.89 212.03 36.44
+\c 246.93 37.55 283.08 51.83 301.31 69.44
+\l 301.32 69.44
+\c 312.21 79.70 330.98 80.42 346.28 71.52
+\c 353.29 65.98 363.77 63.37 374.55 63.49
+\c 385.34 63.61 396.44 66.47 404.67 71.92
+\l 405.89 72.73
+\l 404.47 72.37
+\c 391.42 69.05 376.15 69.35 354.97 79.40
+\c 354.96 79.40 354.96 79.40 354.96 79.40
+\c 344.48 86.19 335.51 90.35 327.32 92.03
+\c 319.12 93.70 311.70 92.88 304.37 89.72
+\l 304.36 89.71
+\l 304.35 89.71
+\c 289.98 81.82 284.68 72.59 270.18 64.26
+\c 243.60 53.33 221.24 56.07 209.04 68.80
+\l 208.84 69.01
+\l 208.66 68.78
+\c 207.00 66.58 203.94 65.43 200.35 65.26
+\c 196.76 65.09 192.67 65.90 189.01 67.57
+\c 185.35 69.23 182.13 71.74 180.25 74.95
+\c 178.37 78.15 177.81 82.05 179.50 86.57
+\l 179.51 86.58
+\l 179.51 86.59
+\c 182.76 96.89 189.87 99.97 195.56 98.88
+\c 198.40 98.33 200.88 96.74 202.35 94.46
+\c 203.71 92.35 204.15 89.64 203.24 86.61
+\c 201.73 90.96 198.74 93.67 195.43 93.79
+\c 191.92 93.93 188.23 91.22 185.86 84.98
+\l 185.86 84.98
+\c 185.20 83.19 185.82 80.95 187.26 78.87
+\c 188.69 76.79 190.97 74.86 193.72 73.69
+\c 199.21 71.37 206.62 72.19 212.83 81.13
+\c 215.85 84.36 216.75 88.88 215.95 93.59
+\c 215.16 98.30 212.68 103.21 208.94 107.28
+\c 201.47 115.39 188.91 120.16 174.56 113.28
+\c 169.32 122.05 159.99 128.23 150.20 128.54
+
+\m 150.18 128.04
+\c 159.84 127.73 169.13 121.59 174.27 112.85
+\l 174.38 112.66
+\l 174.59 112.76
+\c 188.83 119.68 201.19 114.96 208.57 106.94
+\c 212.26 102.94 214.69 98.10 215.46 93.51
+\c 216.24 88.91 215.36 84.57 212.47 81.47
+\l 212.46 81.46
+\l 212.45 81.44
+\c 206.32 72.62 199.23 71.90 193.91 74.15
+\c 191.25 75.28 189.05 77.16 187.67 79.16
+\c 186.28 81.15 185.75 83.25 186.33 84.80
+\c 188.66 90.92 192.18 93.42 195.41 93.30
+\c 198.64 93.17 201.69 90.42 203.06 85.76
+\l 203.28 85.03
+\l 203.54 85.74
+\c 204.80 89.20 204.32 92.33 202.77 94.73
+\c 201.22 97.13 198.62 98.80 195.65 99.37
+\c 189.72 100.50 182.34 97.22 179.04 86.75
+\c 177.30 82.10 177.87 78.02 179.82 74.69
+\c 181.77 71.37 185.07 68.81 188.80 67.11
+\c 192.54 65.42 196.69 64.59 200.37 64.76
+\c 203.94 64.93 207.06 66.07 208.87 68.30
+\c 221.29 55.52 243.80 52.87 270.39 63.81
+\l 270.40 63.82
+\l 270.42 63.82
+\c 285.01 72.20 290.31 81.43 304.58 89.26
+\c 311.83 92.39 319.12 93.20 327.22 91.54
+\c 335.33 89.88 344.26 85.75 354.72 78.97
+\l 354.73 78.96
+\l 354.75 78.95
+\c 375.25 69.23 390.27 68.68 403.11 71.64
+\c 395.12 66.76 384.73 64.10 374.55 63.99
+\c 363.84 63.87 353.44 66.48 346.56 71.93
+\l 346.54 71.95
+\l 346.53 71.95
+\c 331.07 80.94 312.06 80.26 300.97 69.80
+\l 300.97 69.80
+\l 300.97 69.80
+\c 282.87 52.32 246.79 38.04 212.01 36.94
+\c 194.62 36.39 177.55 39.13 163.21 46.38
+\c 148.88 53.63 137.26 65.39 130.73 82.92
+\l 130.63 83.21
+\l 130.36 83.04
+\c 123.08 78.27 117.82 77.60 114.35 79.14
+\c 110.87 80.69 109.08 84.48 108.79 88.89
+\c 108.50 93.29 109.74 98.27 112.26 102.03
+\c 114.78 105.80 118.56 108.36 123.42 108.03
+\l 123.59 108.02
+\l 123.67 108.17
+\c 130.46 122.85 140.52 128.35 150.18 128.04
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han68.pgf b/graphics/pgf/contrib/pgfornament-han/han/han68.pgf
new file mode 100644
index 0000000000..15cbbe38da
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han68.pgf
@@ -0,0 +1,49 @@
+% han68.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\r 0 10 400 165
+\ubb
+
+\m 300.90 169.67
+\c 289.81 169.56 279.59 161.07 278.51 146.92
+\c 260.34 153.89 248.99 143.35 251.69 127.41
+\c 258.87 108.08 278.38 128.39 290.23 113.64
+\c 296.44 103.97 284.78 92.66 276.96 102.29
+\c 271.55 109.83 255.43 115.75 243.76 114.43
+\c 249.44 132.00 240.49 151.34 217.79 148.24
+\c 183.73 141.02 210.49 91.14 231.77 126.62
+\c 235.16 122.20 233.69 113.13 227.25 107.91
+\c 199.64 83.75 160.80 137.00 125.89 120.52
+\c 180.85 121.57 182.46 79.39 221.00 90.88
+\c 213.48 47.10 276.99 53.02 261.82 85.81
+\c 250.40 65.36 231.61 83.73 244.69 94.00
+\c 259.45 104.21 282.15 91.41 277.75 64.94
+\c 272.51 34.81 232.32 35.31 187.82 81.40
+\c 115.90 140.51 62.85 121.41 0.25 57.98
+\c 56.02 99.44 110.16 137.19 179.69 67.65
+\c 226.27 11.18 274.30 0.25 311.21 28.52
+\c 340.14 52.10 341.02 99.69 376.03 95.77
+\c 388.75 94.62 388.69 72.29 375.18 71.47
+\c 362.69 70.97 366.42 85.34 375.10 84.99
+\c 370.74 89.37 364.28 90.15 360.41 82.11
+\c 349.07 55.11 401.97 44.40 394.08 90.61
+\c 405.31 99.49 394.88 122.92 375.73 115.54
+\c 377.20 127.52 361.84 135.84 338.31 108.42
+\c 329.50 98.63 298.21 102.56 296.92 124.98
+\c 295.51 147.86 324.32 148.67 327.36 136.43
+\c 330.83 123.79 319.37 116.76 312.71 122.78
+\c 326.74 125.93 320.75 136.56 310.06 133.17
+\c 301.31 130.00 302.26 114.02 322.28 111.52
+\c 351.52 108.69 352.56 155.25 324.45 153.44
+\c 318.67 164.77 309.52 169.75 300.90 169.67
+
+\m 305.55 96.82
+\c 310.22 96.92 315.80 95.60 321.98 92.18
+\c 334.25 84.79 326.07 55.20 303.01 50.36
+\c 319.80 62.52 324.86 77.70 311.83 88.01
+\c 314.65 76.75 303.86 65.70 293.01 79.60
+\c 287.64 87.00 293.61 96.55 305.55 96.82
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han69.pgf b/graphics/pgf/contrib/pgfornament-han/han/han69.pgf
new file mode 100644
index 0000000000..2a270ad4eb
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han69.pgf
@@ -0,0 +1,237 @@
+% han69.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\m 300.90 169.92
+\c 289.77 169.81 279.52 161.31 278.31 147.24
+\c 269.31 150.61 261.92 149.73 257.12 145.95
+\c 252.27 142.13 250.08 135.40 251.45 127.37
+\l 251.45 127.35
+\l 251.46 127.32
+\c 253.27 122.44 255.90 120.01 258.99 118.94
+\c 262.09 117.87 265.60 118.15 269.24 118.56
+\c 272.87 118.97 276.63 119.51 280.19 119.05
+\c 283.75 118.58 287.11 117.13 290.03 113.50
+\c 293.06 108.76 291.72 103.66 288.69 100.91
+\c 287.18 99.53 285.25 98.75 283.22 98.89
+\c 281.20 99.03 279.08 100.08 277.16 102.45
+\c 274.40 106.28 268.98 109.65 262.79 111.92
+\c 256.71 114.14 249.89 115.28 244.07 114.69
+\c 246.80 123.44 245.99 132.59 241.63 139.22
+\c 237.21 145.94 229.18 150.05 217.76 148.49
+\l 217.75 148.49
+\l 217.74 148.48
+\c 209.16 146.66 204.36 142.13 202.38 136.91
+\c 200.40 131.70 201.23 125.82 203.81 121.29
+\c 206.39 116.76 210.75 113.56 215.83 113.76
+\c 220.84 113.97 226.47 117.53 231.75 126.16
+\c 233.22 124.02 233.66 120.89 232.95 117.62
+\c 232.22 114.20 230.27 110.67 227.10 108.10
+\l 227.09 108.10
+\l 227.09 108.10
+\c 220.24 102.11 212.74 100.92 204.72 102.25
+\c 196.70 103.58 188.17 107.44 179.41 111.56
+\c 170.65 115.67 161.65 120.04 152.63 122.35
+\c 143.62 124.65 134.58 124.89 125.79 120.74
+\l 124.73 120.25
+\l 125.89 120.27
+\c 153.31 120.80 167.37 110.56 179.46 101.58
+\c 185.50 97.10 191.05 92.92 197.53 90.58
+\c 203.92 88.27 211.23 87.80 220.73 90.56
+\c 218.96 79.76 221.50 71.93 226.16 66.84
+\c 230.87 61.69 237.70 59.33 244.28 59.38
+\c 250.86 59.44 257.22 61.90 260.98 66.45
+\c 264.74 71.01 265.87 77.65 262.05 85.91
+\l 261.84 86.36
+\l 261.61 85.93
+\c 258.77 80.86 255.50 78.22 252.41 77.26
+\c 249.33 76.29 246.40 76.97 244.22 78.59
+\c 242.03 80.20 240.59 82.75 240.49 85.52
+\c 240.39 88.28 241.62 91.27 244.83 93.79
+\l 244.84 93.80
+\c 252.13 98.84 261.37 98.20 268.26 93.02
+\c 275.15 87.85 279.69 78.14 277.51 64.98
+\c 276.20 57.50 272.75 51.95 267.61 48.52
+\c 262.47 45.10 255.63 43.78 247.54 44.83
+\c 231.36 46.94 210.22 58.55 188.00 81.57
+\l 187.99 81.58
+\l 187.98 81.59
+\c 151.98 111.18 120.66 121.22 90.50 115.89
+\c 60.34 110.56 31.39 89.89 0.07 58.16
+\l 0.40 57.78
+\c 28.28 78.51 55.74 98.28 84.86 104.20
+\c 113.98 110.11 144.79 102.21 179.51 67.48
+\c 179.51 67.48 179.51 67.47 179.52 67.47
+\c 202.82 39.22 226.51 22.34 249.01 16.07
+\c 271.52 9.79 292.86 14.15 311.37 28.32
+\l 311.37 28.32
+\l 311.37 28.33
+\c 325.90 40.17 333.36 58.00 341.56 72.33
+\c 345.66 79.50 349.94 85.79 355.36 90.03
+\c 360.77 94.28 367.31 96.49 376.01 95.52
+\l 376.01 95.52
+\l 376.01 95.52
+\c 379.12 95.24 381.43 93.68 382.96 91.46
+\c 384.50 89.24 385.25 86.37 385.20 83.50
+\c 385.14 80.63 384.28 77.78 382.61 75.60
+\c 380.94 73.43 378.48 71.92 375.18 71.72
+\c 372.10 71.60 370.07 72.39 368.86 73.60
+\c 367.65 74.81 367.23 76.46 367.45 78.14
+\c 367.89 81.51 370.89 84.91 375.10 84.74
+\l 375.73 84.71
+\l 375.28 85.17
+\c 373.06 87.39 370.29 88.73 367.55 88.45
+\c 364.81 88.18 362.15 86.29 360.19 82.22
+\l 360.19 82.21
+\l 360.18 82.20
+\c 357.32 75.39 358.51 69.54 361.81 65.39
+\c 365.10 61.25 370.47 58.80 375.95 58.66
+\c 381.43 58.52 387.04 60.70 390.76 65.84
+\c 394.47 70.96 396.29 79.00 394.34 90.52
+\c 399.96 95.07 400.14 103.21 396.52 109.30
+\c 392.91 115.36 385.48 119.38 375.96 115.87
+\c 376.24 118.77 375.59 121.48 374.01 123.49
+\c 372.37 125.59 369.77 126.93 366.41 127.00
+\c 359.68 127.16 349.91 122.32 338.12 108.58
+\c 333.83 103.81 323.88 102.32 314.87 104.86
+\c 305.85 107.40 297.81 113.90 297.17 124.99
+\l 297.17 125.00
+\c 295.77 147.67 324.17 148.25 327.12 136.37
+\l 327.12 136.37
+\l 327.12 136.36
+\c 328.84 130.12 326.87 125.32 323.68 122.80
+\c 320.62 120.38 316.48 120.13 313.29 122.72
+\c 316.48 123.52 318.69 124.69 319.91 126.04
+\c 321.20 127.49 321.47 129.12 320.89 130.52
+\c 319.74 133.32 315.42 135.13 309.99 133.41
+\l 309.98 133.41
+\l 309.98 133.40
+\c 305.48 131.77 303.47 126.82 305.15 122.01
+\c 306.83 117.20 312.18 112.53 322.25 111.27
+\l 322.26 111.27
+\l 322.26 111.27
+\c 329.64 110.56 335.27 112.97 339.09 116.96
+\c 342.91 120.95 344.92 126.50 345.12 132.09
+\c 345.33 137.67 343.72 143.29 340.28 147.41
+\c 336.86 151.50 331.61 154.08 324.60 153.68
+\c 318.78 164.98 309.59 170.00 300.90 169.92
+
+\m 300.90 169.42
+\c 309.43 169.50 318.49 164.59 324.23 153.33
+\l 324.31 153.18
+\l 324.47 153.19
+\c 331.43 153.64 336.54 151.11 339.89 147.10
+\c 343.25 143.09 344.82 137.58 344.62 132.11
+\c 344.43 126.63 342.45 121.19 338.73 117.30
+\c 335.01 113.42 329.55 111.07 322.31 111.77
+\c 312.37 113.01 307.23 117.58 305.62 122.18
+\c 304.01 126.77 305.90 131.39 310.14 132.93
+\c 315.40 134.60 319.42 132.79 320.43 130.33
+\c 320.93 129.10 320.73 127.71 319.53 126.38
+\c 318.34 125.05 316.13 123.80 312.66 123.02
+\l 312.19 122.92
+\l 312.54 122.59
+\c 315.96 119.50 320.65 119.76 323.99 122.41
+\c 327.34 125.06 329.36 130.10 327.61 136.49
+\l 327.60 136.49
+\c 324.47 149.09 295.25 148.05 296.67 124.96
+\c 297.33 113.64 305.58 106.96 314.73 104.38
+\c 323.88 101.80 333.98 103.24 338.50 108.25
+\l 338.50 108.25
+\l 338.50 108.26
+\c 350.24 121.94 359.92 126.65 366.39 126.50
+\c 369.63 126.43 372.07 125.16 373.62 123.18
+\c 375.18 121.21 375.85 118.51 375.49 115.57
+\l 375.44 115.16
+\l 375.82 115.31
+\c 385.30 118.96 392.54 115.00 396.09 109.04
+\c 399.63 103.09 399.43 95.15 393.93 90.80
+\l 393.81 90.71
+\l 393.84 90.57
+\c 395.80 79.06 393.98 71.14 390.36 66.13
+\c 386.73 61.13 381.30 59.02 375.96 59.15
+\c 370.62 59.29 365.38 61.69 362.20 65.70
+\c 359.01 69.71 357.84 75.33 360.64 82.01
+\c 360.64 82.01 360.64 82.01 360.65 82.01
+\c 362.55 85.97 365.06 87.70 367.60 87.96
+\c 369.98 88.19 372.42 87.03 374.48 85.13
+\c 370.36 84.94 367.41 81.63 366.96 78.21
+\c 366.72 76.40 367.18 74.58 368.51 73.24
+\c 369.84 71.91 372.02 71.09 375.19 71.22
+\l 375.20 71.22
+\l 375.20 71.22
+\c 378.65 71.43 381.26 73.02 383.00 75.30
+\c 384.75 77.58 385.64 80.53 385.69 83.49
+\c 385.75 86.45 384.98 89.42 383.37 91.74
+\c 381.76 94.06 379.31 95.72 376.06 96.02
+\c 367.25 97.00 360.55 94.74 355.05 90.43
+\c 349.55 86.11 345.24 79.77 341.13 72.58
+\c 332.90 58.20 325.46 40.45 311.05 28.71
+\c 292.65 14.62 271.52 10.31 249.14 16.55
+\c 226.77 22.78 203.15 39.60 179.88 67.81
+\l 179.88 67.82
+\l 179.87 67.83
+\c 145.06 102.63 114.03 110.63 84.76 104.68
+\c 56.46 98.94 29.81 80.17 2.87 60.19
+\c 33.21 90.49 61.38 110.24 90.58 115.40
+\c 120.58 120.70 151.73 110.74 187.65 81.21
+\c 187.66 81.21 187.66 81.21 187.66 81.21
+\c 209.93 58.15 231.13 46.47 247.48 44.34
+\c 255.65 43.27 262.62 44.60 267.88 48.11
+\c 273.14 51.62 276.68 57.31 278.00 64.90
+\l 278.00 64.90
+\c 280.21 78.21 275.60 88.13 268.56 93.42
+\c 261.51 98.71 252.02 99.37 244.55 94.20
+\l 244.54 94.20
+\l 244.54 94.19
+\c 241.21 91.59 239.89 88.43 239.99 85.50
+\c 240.10 82.58 241.62 79.89 243.92 78.18
+\c 246.22 76.48 249.32 75.76 252.56 76.78
+\c 255.70 77.76 258.94 80.41 261.75 85.25
+\c 265.25 77.34 264.16 71.09 260.59 66.77
+\c 256.95 62.36 250.74 59.93 244.28 59.88
+\c 237.82 59.83 231.13 62.15 226.52 67.18
+\c 221.92 72.20 219.38 79.95 221.25 90.84
+\l 221.31 91.23
+\l 220.93 91.12
+\c 211.34 88.26 204.08 88.74 197.69 91.05
+\c 191.31 93.35 185.80 97.50 179.75 101.99
+\c 167.87 110.81 153.85 120.88 127.23 120.73
+\c 135.51 124.24 143.99 124.04 152.51 121.86
+\c 161.46 119.58 170.44 115.23 179.20 111.11
+\c 187.97 106.99 196.52 103.10 204.63 101.76
+\c 212.75 100.41 220.45 101.63 227.41 107.72
+\l 227.41 107.72
+\c 230.68 110.37 232.68 113.99 233.44 117.51
+\c 234.20 121.04 233.72 124.48 231.97 126.77
+\l 231.75 127.06
+\l 231.56 126.75
+\c 226.26 117.92 220.67 114.46 215.81 114.26
+\c 210.95 114.07 206.76 117.13 204.24 121.54
+\c 201.73 125.95 200.93 131.68 202.85 136.74
+\c 204.76 141.79 209.39 146.20 217.84 147.99
+\c 229.11 149.53 236.90 145.52 241.21 138.95
+\c 245.53 132.38 246.34 123.23 243.52 114.51
+\l 243.41 114.14
+\l 243.79 114.18
+\c 249.57 114.84 256.49 113.69 262.62 111.45
+\c 268.76 109.20 274.10 105.85 276.76 102.15
+\l 276.77 102.14
+\l 276.77 102.13
+\c 278.76 99.68 281.02 98.54 283.19 98.39
+\c 285.36 98.24 287.43 99.09 289.03 100.54
+\c 292.23 103.45 293.61 108.84 290.44 113.77
+\l 290.43 113.79
+\l 290.42 113.80
+\c 287.42 117.53 283.91 119.06 280.25 119.54
+\c 276.60 120.02 272.81 119.46 269.18 119.05
+\c 265.56 118.65 262.11 118.39 259.16 119.41
+\c 256.21 120.43 253.71 122.71 251.93 127.47
+\c 250.60 135.37 252.75 141.87 257.43 145.56
+\c 262.12 149.25 269.39 150.15 278.42 146.69
+\l 278.73 146.57
+\l 278.76 146.90
+\c 279.83 160.94 289.94 169.31 300.90 169.42
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han7.pgf b/graphics/pgf/contrib/pgfornament-han/han/han7.pgf
new file mode 100644
index 0000000000..fe147df2a0
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han7.pgf
@@ -0,0 +1,64 @@
+% han7.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 140
+\l 50 140
+\l 50 100
+\l 0 100
+\l 0 10
+\l 100 10
+\l 100 0
+\l 110 0
+\l 110 20
+\l 10 20
+\l 10 90
+\l 50 90
+\l 50 40
+\l 110 40
+\l 110 90
+\l 160 90
+\l 160 150
+\l 110 150
+\l 110 190
+\l 180 190
+\l 180 90
+\l 200 90
+\l 200 100
+\l 190 100
+\l 190 200
+\l 100 200
+\l 100 150
+\l 60 150
+\l 60 200
+\l 0 200
+
+\m 10 190
+\l 50 190
+\l 50 150
+\l 10 150
+\l 10 190
+
+\m 60 140
+\l 100 140
+\l 100 100
+\l 60 100
+\l 60 140
+
+\m 110 140
+\l 150 140
+\l 150 100
+\l 110 100
+\l 110 140
+
+\m 60 90
+\l 100 90
+\l 100 50
+\l 60 50
+\l 60 90
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han70.pgf b/graphics/pgf/contrib/pgfornament-han/han/han70.pgf
new file mode 100644
index 0000000000..95caaad0ed
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han70.pgf
@@ -0,0 +1,40 @@
+% han70.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\r 0 0 395 140
+\ubb
+
+\m 352.75 132.23
+\c 344.51 132.04 336.70 128.91 332.37 123.07
+\c 298.71 149.57 251.34 111.81 281.32 82.38
+\c 266.62 50.77 314.66 38.32 325.84 59.47
+\c 334.36 77.45 323.44 90.93 312.10 87.35
+\c 323.87 78.99 321.95 66.51 307.58 66.63
+\c 286.20 67.67 289.14 101.88 313.82 110.28
+\c 346.42 118.70 369.51 84.74 360.20 62.44
+\c 350.36 34.36 311.96 30.02 274.89 50.62
+\c 156.80 121.99 165.79 8.22 76.11 43.72
+\c 140.72 3.28 160.92 64.75 214.57 51.39
+\c 254.10 42.09 260.91 0.25 340.95 6.30
+\c 363.93 6.63 421.07 55.88 380.34 88.06
+\c 390.97 118.78 370.86 132.64 352.75 132.23
+
+\m 116.83 98.20
+\c 103.38 98.59 89.63 90.08 90.06 73.61
+\c 91.06 59.16 101.07 54.44 110.36 60.45
+\c 117.59 65.03 114.41 74.66 102.94 71.20
+\c 98.59 70.38 98.07 75.11 102.44 80.36
+\c 110.75 92.73 129.72 86.76 130.74 75.76
+\c 132.04 61.05 121.21 47.45 102.60 50.39
+\c 89.42 53.66 83.91 57.84 82.05 65.12
+\c 77.97 60.18 73.80 59.87 67.83 61.92
+\c 50.79 66.42 40.68 52.90 23.81 49.43
+\c 14.23 47.62 6.57 52.17 0.25 57.40
+\c 5.48 40.70 26.10 39.12 39.65 46.88
+\c 58.11 57.34 68.59 56.91 94.32 44.14
+\c 126.08 33.50 151.87 59.40 139.39 84.60
+\c 135.10 93.50 126.03 97.93 116.83 98.20
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han71.pgf b/graphics/pgf/contrib/pgfornament-han/han/han71.pgf
new file mode 100644
index 0000000000..f13af27187
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han71.pgf
@@ -0,0 +1,189 @@
+% han71.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetmiterlimit{4.0}
+
+\m 352.74 132.48
+\c 344.54 132.29 336.75 129.18 332.34 123.39
+\c 315.46 136.55 295.17 133.73 282.83 123.89
+\c 276.63 118.96 272.43 112.25 271.67 104.90
+\c 270.92 97.60 273.60 89.69 281.04 82.33
+\c 277.42 74.44 277.65 67.69 280.28 62.38
+\c 282.93 57.03 287.96 53.13 293.79 50.91
+\c 299.62 48.68 306.26 48.11 312.16 49.44
+\c 318.06 50.76 323.23 53.99 326.06 59.35
+\l 326.07 59.36
+\l 326.07 59.36
+\c 330.36 68.41 329.77 76.37 326.64 81.62
+\c 323.50 86.87 317.81 89.41 312.03 87.59
+\l 311.55 87.44
+\l 311.96 87.15
+\c 317.79 83.00 320.18 77.88 319.40 73.86
+\c 319.01 71.85 317.84 70.10 315.87 68.85
+\c 313.91 67.60 311.14 66.85 307.59 66.88
+\c 302.31 67.14 298.58 69.43 296.27 72.85
+\c 293.97 76.27 293.11 80.85 293.68 85.66
+\c 294.82 95.30 301.66 105.87 313.90 110.04
+\c 313.90 110.04 313.90 110.04 313.90 110.04
+\c 346.31 118.40 369.19 84.61 359.97 62.54
+\l 359.97 62.53
+\l 359.97 62.52
+\c 355.08 48.57 343.12 40.53 327.73 38.52
+\c 312.33 36.51 293.52 40.56 275.02 50.83
+\l 275.01 50.84
+\c 245.47 68.69 223.85 74.98 206.62 74.91
+\c 189.40 74.83 176.59 68.38 164.71 60.83
+\c 152.84 53.28 141.88 44.64 128.32 40.09
+\c 114.76 35.55 98.58 35.09 76.20 43.95
+\l 75.98 43.51
+\c 75.99 43.50 76.00 43.50 76.02 43.49
+\c 108.36 23.26 129.70 28.52 149.55 37.17
+\c 169.41 45.82 187.78 57.80 214.51 51.15
+\l 214.51 51.15
+\l 214.52 51.15
+\c 234.20 46.52 245.76 33.77 262.44 22.88
+\c 279.11 11.99 300.91 3.02 340.97 6.05
+\l 340.97 6.05
+\c 346.80 6.14 354.70 9.30 362.67 14.48
+\c 370.64 19.66 378.69 26.87 384.74 35.09
+\c 390.80 43.31 394.87 52.53 394.85 61.75
+\c 394.84 70.93 390.75 80.08 380.63 88.13
+\c 385.89 103.47 383.52 114.68 377.51 121.98
+\c 371.49 129.30 361.86 132.68 352.74 132.48
+
+\m 352.75 131.98
+\c 361.74 132.18 371.22 128.84 377.13 121.66
+\c 383.03 114.48 385.40 103.45 380.11 88.14
+\l 380.05 87.97
+\l 380.19 87.86
+\c 390.33 79.86 394.34 70.83 394.36 61.75
+\c 394.37 52.68 390.35 43.54 384.34 35.38
+\c 378.33 27.22 370.32 20.05 362.39 14.90
+\c 354.47 9.75 346.61 6.63 340.95 6.55
+\l 340.94 6.55
+\l 340.93 6.55
+\c 300.96 3.53 279.33 12.45 262.71 23.30
+\c 246.09 34.14 234.47 46.96 214.63 51.63
+\l 214.63 51.63
+\c 187.71 58.33 169.16 46.26 149.35 37.63
+\c 130.11 29.24 109.61 24.25 78.90 42.46
+\c 99.85 34.74 115.41 35.25 128.48 39.62
+\c 142.14 44.20 153.13 52.88 164.98 60.41
+\c 176.83 67.94 189.52 74.34 206.63 74.41
+\c 223.73 74.49 245.26 68.23 274.76 50.41
+\l 274.77 50.40
+\l 274.77 50.40
+\c 293.34 40.08 312.26 36.00 327.79 38.03
+\c 343.32 40.06 355.49 48.23 360.44 62.36
+\c 369.82 84.88 346.54 118.99 313.76 110.52
+\l 313.75 110.52
+\l 313.74 110.52
+\c 301.31 106.28 294.34 95.55 293.18 85.72
+\c 292.60 80.81 293.47 76.11 295.86 72.57
+\c 298.25 69.02 302.16 66.64 307.57 66.38
+\l 307.57 66.38
+\l 307.58 66.38
+\c 311.21 66.35 314.07 67.11 316.14 68.43
+\c 318.21 69.75 319.48 71.62 319.89 73.76
+\c 320.70 77.92 318.26 83.02 312.68 87.18
+\c 318.06 88.64 323.27 86.30 326.21 81.37
+\c 329.24 76.28 329.85 68.51 325.62 59.58
+\c 322.87 54.37 317.84 51.22 312.05 49.92
+\c 306.26 48.62 299.71 49.18 293.97 51.37
+\c 288.23 53.56 283.31 57.39 280.73 62.60
+\c 278.15 67.81 277.90 74.42 281.55 82.27
+\l 281.62 82.43
+\l 281.50 82.56
+\c 274.04 89.87 271.42 97.67 272.17 104.85
+\c 272.91 112.04 277.03 118.64 283.14 123.50
+\c 295.35 133.24 315.48 136.05 332.22 122.88
+\l 332.42 122.72
+\l 332.57 122.92
+\c 336.84 128.68 344.58 131.80 352.75 131.98
+
+\m 116.84 98.45
+\c 110.06 98.64 103.20 96.60 98.08 92.42
+\c 92.96 88.24 89.60 81.91 89.81 73.60
+\l 89.81 73.60
+\l 89.81 73.59
+\c 90.32 66.31 93.10 61.43 96.97 59.14
+\c 100.85 56.86 105.79 57.20 110.49 60.24
+\l 110.49 60.24
+\c 114.19 62.58 115.28 66.28 113.88 68.96
+\c 112.49 71.63 108.67 73.19 102.87 71.44
+\l 102.89 71.44
+\c 101.85 71.25 101.08 71.39 100.55 71.75
+\c 100.03 72.11 99.73 72.71 99.67 73.52
+\c 99.55 75.15 100.47 77.61 102.63 80.20
+\l 102.64 80.21
+\l 102.65 80.22
+\c 110.84 92.41 129.50 86.46 130.49 75.74
+\c 131.14 68.45 128.78 61.45 123.96 56.63
+\c 119.15 51.82 111.88 49.18 102.65 50.64
+\c 96.08 52.27 91.44 54.12 88.22 56.45
+\c 85.01 58.79 83.21 61.59 82.29 65.18
+\l 82.17 65.66
+\l 81.86 65.28
+\c 79.84 62.84 77.84 61.57 75.60 61.14
+\c 73.37 60.72 70.87 61.14 67.91 62.16
+\l 67.90 62.16
+\l 67.89 62.16
+\c 59.30 64.43 52.43 62.15 45.65 58.89
+\c 38.86 55.63 32.14 51.40 23.76 49.67
+\c 14.28 47.88 6.70 52.38 0.41 57.59
+\l -0.24 58.13
+\l 0.01 57.32
+\c 2.65 48.89 9.21 44.25 16.78 42.72
+\c 24.35 41.20 32.94 42.75 39.77 46.66
+\c 48.98 51.88 56.16 54.36 64.25 53.97
+\c 72.33 53.58 81.35 50.30 94.21 43.92
+\l 94.22 43.91
+\l 94.24 43.90
+\c 110.20 38.56 124.69 42.39 133.62 50.75
+\c 142.54 59.11 145.90 72.02 139.62 84.71
+\l 139.61 84.71
+\c 135.27 93.70 126.11 98.18 116.84 98.45
+
+\m 116.82 97.95
+\c 125.95 97.68 134.92 93.30 139.17 84.49
+\l 139.17 84.49
+\l 139.17 84.49
+\c 145.36 71.98 142.06 59.34 133.28 51.11
+\c 124.49 42.88 110.21 39.08 94.41 44.37
+\c 94.40 44.37 94.40 44.37 94.40 44.38
+\c 81.54 50.76 72.46 54.07 64.27 54.47
+\c 56.07 54.87 48.77 52.34 39.53 47.10
+\c 32.80 43.25 24.31 41.71 16.88 43.21
+\c 9.73 44.65 3.66 48.95 0.89 56.61
+\c 7.09 51.63 14.56 47.43 23.86 49.19
+\l 23.86 49.19
+\l 23.86 49.19
+\c 32.35 50.93 39.11 55.20 45.86 58.44
+\c 52.61 61.68 59.32 63.91 67.77 61.68
+\c 70.76 60.65 73.34 60.20 75.70 60.65
+\c 77.95 61.09 79.98 62.41 81.96 64.70
+\c 82.93 61.20 84.75 58.36 87.93 56.05
+\c 91.23 53.66 95.93 51.79 102.54 50.15
+\l 102.55 50.14
+\l 102.56 50.14
+\c 111.93 48.66 119.38 51.35 124.31 56.28
+\c 129.24 61.21 131.64 68.36 130.99 75.78
+\l 130.99 75.78
+\c 129.94 87.06 110.67 93.04 102.24 80.50
+\c 100.04 77.85 99.04 75.33 99.17 73.48
+\c 99.24 72.56 99.61 71.80 100.27 71.34
+\c 100.93 70.88 101.86 70.74 102.99 70.96
+\l 103.00 70.96
+\l 103.01 70.96
+\c 108.68 72.67 112.18 71.14 113.44 68.72
+\c 114.70 66.31 113.76 62.90 110.23 60.66
+\l 110.22 60.66
+\c 105.64 57.69 100.93 57.39 97.23 59.57
+\c 93.53 61.75 90.81 66.46 90.31 73.62
+\c 90.31 73.62 90.31 73.63 90.31 73.63
+\c 90.10 81.79 93.39 87.94 98.40 92.03
+\c 103.41 96.13 110.15 98.14 116.82 97.95
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han72.pgf b/graphics/pgf/contrib/pgfornament-han/han/han72.pgf
new file mode 100644
index 0000000000..89cfccad05
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han72.pgf
@@ -0,0 +1,36 @@
+% han72.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0.25 0.25
+\l 0.25 300.25
+\c 25.25 295.25 35.25 275.25 35.25 250.25
+\c 83.19 244.29 84.10 183.53 45.86 184.21
+\c 13.49 185.79 28.30 222.35 43.37 207.99
+\c 45.67 205.63 49.22 209.09 45.41 213.79
+\c 29.87 231.75 0.90 194.83 40.25 175.25
+\c 25.25 162.75 25.25 147.75 40.25 135.25
+\c 18.30 112.63 38.60 83.30 52.75 100.25
+\c 77.84 75.76 99.43 123.65 71.52 127.38
+\c 65.61 128.14 64.38 119.78 72.12 120.48
+\c 87.79 120.62 75.13 89.51 52.36 111.92
+\c 41.91 123.73 47.59 167.94 98.12 149.58
+\c 124.45 177.45 132.72 145.30 160.25 160.25
+\c 145.30 132.72 177.45 124.45 149.58 98.12
+\c 167.94 47.59 123.73 41.91 111.92 52.36
+\c 89.51 75.13 120.62 87.79 120.48 72.12
+\c 119.78 64.38 128.14 65.61 127.38 71.52
+\c 123.65 99.43 75.76 77.84 100.25 52.75
+\c 83.30 38.60 112.63 18.30 135.25 40.25
+\c 147.75 25.25 162.75 25.25 175.25 40.25
+\c 194.83 0.90 231.75 29.87 213.79 45.41
+\c 209.09 49.22 205.63 45.67 207.99 43.37
+\c 222.35 28.30 185.79 13.49 184.21 45.86
+\c 183.53 84.10 244.29 83.19 250.25 35.25
+\c 275.25 35.25 295.25 25.25 300.25 0.25
+\l 0.25 0.25
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han73.pgf b/graphics/pgf/contrib/pgfornament-han/han/han73.pgf
new file mode 100644
index 0000000000..8e5d18d15d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han73.pgf
@@ -0,0 +1,223 @@
+% han73.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 0
+\l 0 0.25
+\l 0 300.56
+\l 0.30 300.50
+\c 12.85 297.99 21.67 291.69 27.33 282.89
+\c 32.96 274.13 35.46 262.91 35.49 250.46
+\c 59.42 247.39 71.67 230.67 73.12 214.76
+\c 73.84 206.78 71.86 199.00 67.27 193.25
+\c 62.68 187.50 55.48 183.79 45.85 183.96
+\l 45.85 183.96
+\l 45.85 183.96
+\c 37.71 184.36 32.49 186.96 29.51 190.45
+\c 26.52 193.94 25.80 198.29 26.58 202.13
+\c 27.36 205.97 29.65 209.31 32.74 210.78
+\c 35.83 212.26 39.72 211.81 43.54 208.17
+\l 43.54 208.17
+\l 43.55 208.17
+\c 44.08 207.62 44.65 207.43 45.17 207.49
+\c 45.68 207.54 46.15 207.85 46.47 208.37
+\c 47.09 209.41 47.08 211.33 45.22 213.63
+\c 41.39 218.06 36.79 219.08 32.58 217.86
+\c 28.38 216.64 24.58 213.15 22.47 208.50
+\c 20.37 203.84 19.95 198.03 22.50 192.16
+\c 25.04 186.29 30.56 180.35 40.36 175.47
+\l 40.70 175.30
+\l 40.41 175.06
+\c 32.95 168.84 29.25 162.04 29.25 155.25
+\c 29.25 148.47 32.95 141.66 40.41 135.44
+\l 40.62 135.27
+\l 40.43 135.08
+\c 29.52 123.83 29.14 110.96 33.18 103.02
+\c 35.21 99.06 38.33 96.33 41.79 95.63
+\c 45.25 94.93 49.06 96.22 52.56 100.41
+\l 52.73 100.62
+\l 52.92 100.43
+\c 59.16 94.35 65.11 92.79 70.14 93.88
+\c 75.17 94.96 79.29 98.71 81.79 103.35
+\c 84.28 107.99 85.13 113.50 83.65 118.05
+\c 82.17 122.59 78.39 126.21 71.49 127.13
+\c 68.65 127.50 67.02 125.70 66.95 123.94
+\c 66.91 123.06 67.26 122.19 68.08 121.57
+\c 68.90 120.94 70.21 120.56 72.10 120.73
+\l 72.11 120.73
+\l 72.12 120.73
+\c 76.12 120.77 78.40 118.76 79.09 116.11
+\c 79.77 113.47 78.92 110.22 76.85 107.69
+\c 74.78 105.16 71.47 103.33 67.24 103.57
+\c 63.02 103.82 57.91 106.11 52.18 111.74
+\l 52.18 111.75
+\l 52.17 111.76
+\c 49.50 114.77 47.89 119.80 47.75 125.36
+\c 47.60 130.93 48.91 137.03 52.16 142.20
+\c 55.41 147.36 60.59 151.58 68.13 153.34
+\c 75.63 155.10 85.47 154.41 98.05 149.86
+\c 104.60 156.76 110.07 160 115.01 161.14
+\c 119.98 162.30 124.40 161.35 128.81 160
+\c 137.63 157.31 146.44 153.03 160.13 160.47
+\l 160.87 160.87
+\l 160.47 160.13
+\c 153.03 146.44 157.31 137.63 160 128.81
+\c 161.35 124.40 162.30 119.98 161.14 115.01
+\c 160 110.07 156.76 104.60 149.86 98.05
+\c 154.41 85.47 155.10 75.63 153.34 68.13
+\c 151.58 60.59 147.36 55.41 142.20 52.16
+\c 137.03 48.91 130.93 47.60 125.36 47.75
+\c 119.80 47.89 114.77 49.50 111.76 52.17
+\l 111.75 52.18
+\l 111.74 52.18
+\c 106.11 57.91 103.82 63.02 103.57 67.24
+\c 103.33 71.47 105.16 74.78 107.69 76.85
+\c 110.22 78.92 113.47 79.77 116.11 79.09
+\c 118.76 78.40 120.77 76.12 120.73 72.12
+\l 120.73 72.11
+\l 120.73 72.10
+\c 120.56 70.21 120.94 68.90 121.57 68.08
+\c 122.19 67.26 123.06 66.91 123.94 66.95
+\c 125.70 67.02 127.50 68.65 127.13 71.49
+\c 126.21 78.39 122.59 82.17 118.05 83.65
+\c 113.50 85.13 107.99 84.28 103.35 81.79
+\c 98.71 79.29 94.96 75.17 93.88 70.14
+\c 92.79 65.11 94.35 59.16 100.43 52.92
+\l 100.62 52.73
+\l 100.41 52.56
+\c 96.22 49.06 94.93 45.25 95.63 41.79
+\c 96.33 38.33 99.06 35.21 103.02 33.18
+\c 110.96 29.14 123.83 29.52 135.08 40.43
+\l 135.27 40.61
+\l 135.44 40.41
+\c 141.66 32.95 148.47 29.25 155.25 29.25
+\c 162.04 29.25 168.84 32.95 175.06 40.41
+\l 175.30 40.70
+\l 175.47 40.36
+\c 180.35 30.56 186.29 25.04 192.16 22.50
+\c 198.03 19.95 203.84 20.37 208.50 22.47
+\c 213.15 24.58 216.64 28.38 217.86 32.58
+\c 219.08 36.78 218.06 41.39 213.63 45.22
+\c 213.63 45.22 213.63 45.22 213.63 45.22
+\c 211.33 47.08 209.41 47.09 208.37 46.47
+\c 207.85 46.15 207.54 45.68 207.49 45.17
+\c 207.43 44.65 207.62 44.08 208.17 43.55
+\l 208.17 43.54
+\l 208.17 43.54
+\c 211.81 39.72 212.26 35.83 210.78 32.74
+\c 209.31 29.65 205.97 27.36 202.13 26.58
+\c 198.29 25.80 193.94 26.52 190.45 29.51
+\c 186.96 32.49 184.36 37.71 183.96 45.85
+\l 183.96 45.85
+\l 183.96 45.85
+\c 183.79 55.48 187.50 62.68 193.25 67.27
+\c 199.00 71.86 206.78 73.84 214.76 73.12
+\c 230.67 71.67 247.39 59.42 250.46 35.49
+\c 262.91 35.46 274.13 32.96 282.89 27.33
+\c 291.69 21.67 297.99 12.85 300.50 0.30
+\l 300.56 0
+\l 0 0
+
+\m 0.50 0.50
+\l 299.92 0.50
+\c 297.39 12.77 291.24 21.37 282.62 26.91
+\c 273.92 32.50 262.72 35.00 250.25 35.00
+\l 250.03 35.00
+\l 250 35.22
+\c 247.04 59.09 230.46 71.19 214.72 72.62
+\c 206.85 73.34 199.19 71.38 193.56 66.88
+\c 187.93 62.39 184.29 55.36 184.46 45.87
+\l 184.46 45.87
+\c 184.46 45.87 184.46 45.87 184.46 45.86
+\c 184.85 37.82 187.41 32.76 190.77 29.88
+\c 194.14 27.01 198.32 26.31 202.03 27.07
+\c 205.73 27.82 208.94 30.04 210.33 32.96
+\c 211.72 35.87 211.35 39.48 207.82 43.19
+\c 207.82 43.19 207.82 43.19 207.82 43.19
+\c 207.18 43.81 206.92 44.54 206.99 45.22
+\c 207.07 45.90 207.48 46.51 208.11 46.89
+\c 209.39 47.66 211.54 47.55 213.95 45.60
+\l 213.95 45.60
+\l 213.95 45.60
+\c 218.51 41.66 219.61 36.81 218.34 32.44
+\c 217.07 28.07 213.48 24.18 208.70 22.02
+\c 203.92 19.86 197.96 19.44 191.96 22.04
+\c 186.03 24.61 180.09 30.17 175.20 39.84
+\c 168.98 32.49 162.13 28.75 155.25 28.75
+\c 148.35 28.75 141.47 32.51 135.23 39.91
+\c 123.90 29.05 110.90 28.61 102.80 32.74
+\c 98.73 34.82 95.88 38.05 95.14 41.69
+\c 94.42 45.28 95.79 49.23 99.92 52.77
+\c 93.91 59.01 92.28 65.09 93.39 70.24
+\c 94.51 75.45 98.37 79.68 103.12 82.23
+\c 107.86 84.78 113.49 85.66 118.20 84.13
+\c 122.91 82.59 126.68 78.60 127.63 71.55
+\c 128.02 68.48 126.02 66.54 123.96 66.45
+\c 122.93 66.41 121.89 66.83 121.17 67.78
+\c 120.45 68.72 120.06 70.15 120.23 72.12
+\c 120.27 75.96 118.44 77.97 115.99 78.60
+\c 113.54 79.24 110.43 78.44 108.01 76.46
+\c 105.58 74.48 103.84 71.34 104.07 67.27
+\c 104.30 63.21 106.52 58.20 112.08 52.55
+\l 112.09 52.54
+\c 114.98 49.99 119.90 48.39 125.38 48.24
+\c 130.85 48.10 136.86 49.40 141.93 52.58
+\c 147.00 55.77 151.13 60.83 152.86 68.24
+\c 154.59 75.65 153.92 85.43 149.35 98.03
+\l 149.29 98.19
+\l 149.41 98.30
+\c 156.35 104.86 159.54 110.27 160.66 115.12
+\c 161.79 119.97 160.86 124.27 159.52 128.66
+\c 156.89 137.30 152.71 146.27 159.74 159.74
+\c 146.27 152.71 137.30 156.89 128.66 159.52
+\c 124.27 160.86 119.97 161.79 115.12 160.66
+\c 110.27 159.54 104.86 156.35 98.30 149.41
+\l 98.19 149.29
+\l 98.03 149.35
+\c 85.43 153.92 75.65 154.59 68.24 152.86
+\c 60.83 151.13 55.77 147.00 52.58 141.93
+\c 49.40 136.86 48.10 130.85 48.24 125.38
+\c 48.39 119.90 49.99 114.98 52.54 112.09
+\c 52.54 112.09 52.54 112.09 52.55 112.08
+\c 58.20 106.52 63.21 104.30 67.27 104.07
+\c 71.34 103.84 74.48 105.58 76.46 108.01
+\c 78.44 110.43 79.24 113.54 78.60 115.99
+\c 77.97 118.44 75.96 120.27 72.12 120.23
+\c 70.15 120.06 68.72 120.45 67.78 121.17
+\c 66.84 121.89 66.41 122.93 66.45 123.96
+\c 66.54 126.02 68.48 128.02 71.55 127.63
+\c 78.60 126.68 82.59 122.91 84.13 118.20
+\c 85.66 113.49 84.78 107.86 82.23 103.11
+\c 79.68 98.37 75.45 94.51 70.24 93.39
+\c 65.09 92.28 59.01 93.91 52.77 99.92
+\c 49.23 95.79 45.28 94.42 41.69 95.14
+\c 38.05 95.88 34.82 98.73 32.74 102.80
+\c 28.61 110.90 29.05 123.90 39.91 135.23
+\c 32.51 141.47 28.75 148.35 28.75 155.25
+\c 28.75 162.13 32.49 168.98 39.84 175.20
+\c 30.17 180.09 24.61 186.03 22.04 191.96
+\c 19.44 197.96 19.86 203.92 22.02 208.70
+\c 24.18 213.48 28.07 217.07 32.44 218.34
+\c 36.81 219.61 41.66 218.51 45.60 213.95
+\l 45.60 213.95
+\l 45.60 213.95
+\c 47.55 211.54 47.66 209.39 46.89 208.11
+\c 46.51 207.48 45.90 207.07 45.22 206.99
+\c 44.54 206.92 43.81 207.18 43.19 207.82
+\c 39.48 211.35 35.87 211.72 32.96 210.33
+\c 30.04 208.94 27.82 205.73 27.07 202.03
+\c 26.31 198.32 27.01 194.14 29.89 190.77
+\c 32.76 187.41 37.82 184.85 45.86 184.46
+\c 55.36 184.29 62.39 187.92 66.88 193.56
+\c 71.38 199.19 73.34 206.85 72.62 214.72
+\c 71.19 230.46 59.09 247.04 35.22 250
+\l 35.00 250.03
+\l 35.00 250.25
+\c 35.00 262.72 32.50 273.92 26.91 282.62
+\c 21.37 291.24 12.77 297.39 0.50 299.92
+\l 0.50 0.50
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han74.pgf b/graphics/pgf/contrib/pgfornament-han/han/han74.pgf
new file mode 100644
index 0000000000..814b663643
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han74.pgf
@@ -0,0 +1,55 @@
+% han74.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\m 21.69 309.04
+\c 9.23 284.31 21.49 262.70 42.90 253.16
+\c 57.31 246.15 60.81 252.57 43.49 264.06
+\c 26.36 278.47 35.51 303.00 21.69 309.04
+
+\m 26.60 250.62
+\c 19.84 250.51 14.04 245.56 9.04 235.90
+\c 29.36 241.39 39.95 230.92 45.43 223.69
+\c 51.54 215.86 58.60 222.69 53.43 232.18
+\c 43.12 244.66 34.25 250.74 26.60 250.62
+
+\m 33.66 212.49
+\c 26.40 212.55 19.67 208.85 15.78 199.81
+\c 40.02 189.62 43.08 179.22 31.20 152.73
+\c 0.25 96.59 20.44 62.37 51.72 59.76
+\c 43.86 55.79 35.55 47.25 36.38 36.38
+\c 47.25 35.55 55.79 43.86 59.76 51.72
+\c 62.37 20.44 96.59 0.25 152.73 31.20
+\c 179.22 43.08 189.62 40.02 199.81 15.78
+\c 227.36 27.63 205.29 65.93 178.63 64.89
+\c 181.54 92.04 177.14 87.64 165.41 80.10
+\c 152.12 66.71 150.02 92.63 135.41 80.00
+\c 129.39 66.59 137.17 43.91 115.27 39.96
+\c 95.17 38.98 81.79 53.68 86.03 59.91
+\c 89.11 65.89 95.38 66.55 98.98 62.02
+\c 111.64 53.37 122.13 79.99 101.96 92.90
+\c 112.04 96.87 115.90 104.68 111.17 111.17
+\c 104.68 115.90 96.87 112.04 92.90 101.96
+\c 79.99 122.13 53.37 111.64 62.02 98.98
+\c 66.55 95.38 65.89 89.11 59.91 86.03
+\c 53.68 81.79 38.98 95.17 39.96 115.27
+\c 43.91 137.17 66.59 129.39 80 135.41
+\c 92.63 150.02 66.71 152.12 80.10 165.41
+\c 87.64 177.14 92.04 181.54 64.89 178.63
+\c 65.59 196.54 48.53 212.38 33.66 212.49
+
+\m 225.75 55.22
+\c 220.19 55.13 217.82 50.01 223.69 45.43
+\c 230.92 39.95 241.39 29.36 235.90 9.04
+\c 256.51 19.71 255.66 34.03 232.18 53.43
+\c 229.81 54.72 227.60 55.25 225.75 55.22
+
+\m 252.11 55.14
+\c 249.50 55.13 249.44 50.55 253.16 42.90
+\c 262.70 21.49 284.31 9.23 309.04 21.69
+\c 303.00 35.51 278.47 26.36 264.06 43.49
+\c 258.68 51.61 254.40 55.15 252.11 55.14
+
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han75.pgf b/graphics/pgf/contrib/pgfornament-han/han/han75.pgf
new file mode 100644
index 0000000000..cd4f0dd6b7
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han75.pgf
@@ -0,0 +1,287 @@
+% han75.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\m 21.57 309.37
+\l 21.47 309.15
+\c 15.21 296.73 15.15 285.06 19.36 275.31
+\c 23.58 265.55 32.04 257.73 42.80 252.94
+\c 46.41 251.18 49.35 250.25 51.48 250.05
+\c 52.55 249.94 53.41 250.01 54.07 250.27
+\c 54.73 250.53 55.19 251.00 55.33 251.62
+\c 55.63 252.86 54.82 254.56 52.92 256.69
+\c 51.02 258.82 47.98 261.38 43.65 264.25
+\c 35.15 271.40 33.17 281.05 31.59 289.74
+\c 30.80 294.08 30.12 298.17 28.75 301.59
+\c 27.38 305.00 25.31 307.73 21.79 309.27
+\l 21.57 309.37
+
+\m 21.82 308.68
+\c 25.05 307.19 26.98 304.65 28.29 301.40
+\c 29.62 298.06 30.31 293.99 31.10 289.65
+\c 32.68 280.95 34.69 271.14 43.33 263.87
+\l 43.34 263.86
+\l 43.35 263.86
+\c 47.67 260.99 50.68 258.44 52.54 256.36
+\c 54.40 254.28 55.07 252.66 54.85 251.73
+\c 54.74 251.27 54.44 250.95 53.89 250.73
+\c 53.35 250.52 52.55 250.44 51.53 250.54
+\c 49.49 250.74 46.59 251.64 43.01 253.39
+\l 43.00 253.39
+\l 43.00 253.39
+\c 32.34 258.14 23.97 265.89 19.82 275.51
+\c 15.69 285.06 15.74 296.47 21.82 308.69
+
+\m 26.59 250.87
+\c 19.72 250.76 13.84 245.72 8.82 236.02
+\l 8.56 235.51
+\l 9.10 235.66
+\c 19.21 238.39 26.87 237.15 32.69 234.34
+\c 38.51 231.53 42.50 227.14 45.23 223.54
+\l 45.23 223.54
+\c 46.79 221.55 48.42 220.47 49.93 220.14
+\c 51.45 219.81 52.84 220.25 53.84 221.27
+\c 55.83 223.29 56.27 227.49 53.65 232.30
+\l 53.64 232.32
+\l 53.62 232.34
+\c 43.30 244.84 34.38 250.99 26.59 250.87
+
+\m 26.60 250.37
+\c 34.11 250.49 42.94 244.48 53.22 232.05
+\c 55.76 227.37 55.25 223.42 53.48 221.62
+\c 52.60 220.71 51.40 220.33 50.04 220.62
+\c 48.67 220.92 47.13 221.92 45.63 223.84
+\c 42.88 227.47 38.83 231.93 32.91 234.79
+\c 27.10 237.59 19.46 238.80 9.54 236.25
+\c 14.46 245.52 20.09 250.26 26.60 250.37
+
+\m 33.66 212.74
+\c 26.32 212.80 19.47 209.02 15.55 199.91
+\l 15.45 199.68
+\l 15.68 199.58
+\c 27.78 194.50 34.52 189.39 36.80 182.31
+\c 39.07 175.23 36.91 166.07 30.98 152.85
+\c 15.48 124.74 12.77 102.08 17.88 86.10
+\c 22.93 70.34 35.62 61.13 51.04 59.61
+\c 43.29 55.49 35.31 47.10 36.13 36.36
+\l 36.15 36.15
+\l 36.36 36.13
+\c 47.10 35.31 55.49 43.29 59.61 51.04
+\c 61.13 35.62 70.34 22.93 86.10 17.89
+\c 102.08 12.77 124.74 15.48 152.85 30.98
+\c 166.07 36.91 175.23 39.07 182.31 36.80
+\c 189.39 34.52 194.50 27.78 199.58 15.68
+\l 199.68 15.45
+\l 199.91 15.55
+\c 206.85 18.54 210.71 23.22 212.11 28.54
+\c 213.52 33.85 212.50 39.77 209.77 45.28
+\c 204.36 56.21 192.24 65.51 178.90 65.12
+\c 179.60 71.76 179.88 76.53 179.69 79.79
+\c 179.60 81.45 179.39 82.73 179.05 83.70
+\c 178.72 84.67 178.25 85.34 177.64 85.72
+\c 177.03 86.09 176.29 86.16 175.47 86.00
+\c 174.65 85.85 173.74 85.47 172.72 84.94
+\c 170.68 83.88 168.20 82.19 165.28 80.31
+\l 165.25 80.30
+\l 165.23 80.28
+\c 161.94 76.96 159.41 76.12 157.21 76.46
+\c 155.00 76.79 153.07 78.35 151.06 79.96
+\c 149.05 81.57 146.98 83.25 144.44 83.71
+\c 141.90 84.16 138.93 83.37 135.25 80.19
+\l 135.21 80.15
+\l 135.18 80.10
+\c 132.14 73.31 132.59 64.28 131.05 56.48
+\c 130.28 52.58 129.02 49.00 126.62 46.16
+\c 124.22 43.31 120.66 41.19 115.24 40.21
+\c 105.26 39.73 96.96 43.14 91.68 47.42
+\c 89.04 49.57 87.16 51.94 86.21 54.13
+\c 85.26 56.31 85.23 58.30 86.23 59.77
+\l 86.24 59.78
+\l 86.25 59.80
+\c 87.76 62.73 90.03 64.32 92.35 64.66
+\c 94.66 64.99 97.03 64.07 98.79 61.87
+\l 98.81 61.84
+\l 98.84 61.81
+\c 102.07 59.61 105.23 59.64 107.75 61.17
+\c 110.28 62.69 112.17 65.67 113.03 69.32
+\c 114.71 76.52 112.29 86.34 102.44 92.85
+\c 107.30 94.85 110.72 97.74 112.34 100.98
+\c 114.01 104.31 113.78 108.01 111.37 111.32
+\l 111.35 111.35
+\l 111.32 111.37
+\c 108.01 113.78 104.31 114.01 100.98 112.34
+\c 97.74 110.72 94.85 107.30 92.85 102.44
+\c 86.34 112.29 76.52 114.71 69.32 113.02
+\c 65.67 112.17 62.69 110.28 61.17 107.75
+\c 59.64 105.23 59.61 102.07 61.81 98.84
+\l 61.84 98.81
+\l 61.87 98.79
+\c 64.07 97.03 64.99 94.66 64.66 92.35
+\c 64.33 90.03 62.73 87.76 59.80 86.25
+\l 59.78 86.24
+\l 59.77 86.23
+\c 58.30 85.23 56.31 85.26 54.13 86.21
+\c 51.94 87.16 49.57 89.04 47.42 91.68
+\c 43.13 96.96 39.72 105.26 40.21 115.24
+\c 41.19 120.66 43.31 124.22 46.16 126.62
+\c 49.00 129.03 52.58 130.28 56.48 131.05
+\c 64.28 132.59 73.31 132.14 80.10 135.18
+\l 80.15 135.21
+\l 80.19 135.25
+\c 83.37 138.94 84.16 141.90 83.71 144.44
+\c 83.25 146.98 81.57 149.05 79.96 151.06
+\c 78.34 153.07 76.79 155.00 76.46 157.21
+\c 76.12 159.41 76.96 161.94 80.28 165.23
+\l 80.29 165.25
+\l 80.31 165.28
+\c 82.19 168.20 83.88 170.68 84.94 172.72
+\c 85.47 173.74 85.85 174.65 86.00 175.47
+\c 86.16 176.29 86.09 177.03 85.71 177.64
+\c 85.34 178.26 84.67 178.72 83.70 179.06
+\c 82.73 179.39 81.45 179.60 79.79 179.69
+\c 76.53 179.88 71.75 179.61 65.11 178.90
+\c 65.37 187.83 61.30 196.22 55.29 202.41
+\c 49.22 208.67 41.18 212.69 33.66 212.74
+
+\m 33.66 212.24
+\c 41.00 212.19 48.94 208.24 54.93 202.06
+\c 60.93 195.89 64.99 187.52 64.64 178.64
+\l 64.63 178.35
+\l 64.92 178.38
+\c 71.70 179.11 76.51 179.38 79.77 179.19
+\c 81.40 179.10 82.64 178.89 83.54 178.58
+\c 84.44 178.27 84.99 177.87 85.29 177.38
+\c 85.59 176.89 85.65 176.30 85.51 175.56
+\c 85.37 174.82 85.02 173.95 84.50 172.95
+\c 83.47 170.96 81.78 168.49 79.90 165.56
+\c 76.54 162.22 75.60 159.51 75.96 157.13
+\c 76.33 154.75 77.96 152.76 79.57 150.75
+\c 81.18 148.74 82.79 146.73 83.22 144.35
+\c 83.64 141.98 82.94 139.21 79.85 135.62
+\c 73.23 132.67 64.25 133.09 56.38 131.54
+\c 52.44 130.76 48.77 129.48 45.84 127.00
+\c 42.90 124.52 40.71 120.83 39.71 115.31
+\l 39.71 115.30
+\l 39.71 115.28
+\c 39.22 105.17 42.67 96.74 47.04 91.37
+\c 49.22 88.68 51.64 86.75 53.93 85.75
+\c 56.21 84.76 58.40 84.71 60.04 85.82
+\c 63.08 87.39 64.79 89.79 65.15 92.27
+\c 65.51 94.75 64.51 97.29 62.22 99.13
+\c 60.11 102.23 60.16 105.12 61.59 107.49
+\c 63.03 109.87 65.89 111.71 69.43 112.54
+\c 76.52 114.20 86.29 111.83 92.69 101.82
+\l 92.95 101.41
+\l 93.13 101.87
+\c 95.10 106.87 98.01 110.30 101.20 111.90
+\c 104.38 113.49 107.82 113.28 110.99 110.99
+\c 113.28 107.82 113.49 104.38 111.90 101.20
+\c 110.30 98.01 106.87 95.10 101.87 93.13
+\l 101.42 92.95
+\l 101.83 92.69
+\c 111.83 86.29 114.20 76.52 112.54 69.43
+\c 111.71 65.89 109.87 63.03 107.49 61.59
+\c 105.12 60.16 102.23 60.11 99.13 62.22
+\c 97.28 64.51 94.75 65.51 92.27 65.15
+\c 89.79 64.79 87.39 63.08 85.82 60.04
+\c 84.71 58.40 84.76 56.21 85.75 53.93
+\c 86.75 51.64 88.68 49.22 91.37 47.04
+\c 96.74 42.67 105.17 39.22 115.28 39.71
+\l 115.30 39.71
+\l 115.31 39.72
+\c 120.83 40.71 124.52 42.90 127 45.84
+\c 129.48 48.77 130.76 52.44 131.54 56.39
+\c 133.09 64.25 132.67 73.23 135.62 79.85
+\c 139.21 82.94 141.98 83.65 144.35 83.22
+\c 146.73 82.79 148.74 81.18 150.75 79.57
+\c 152.76 77.96 154.75 76.33 157.13 75.97
+\c 159.51 75.60 162.22 76.54 165.56 79.90
+\c 168.49 81.78 170.96 83.47 172.95 84.50
+\c 173.95 85.02 174.82 85.37 175.56 85.51
+\c 176.30 85.66 176.89 85.59 177.38 85.29
+\c 177.87 84.99 178.27 84.44 178.58 83.54
+\c 178.89 82.64 179.10 81.40 179.19 79.77
+\c 179.38 76.51 179.11 71.70 178.38 64.92
+\l 178.35 64.63
+\l 178.64 64.64
+\c 191.85 65.16 203.96 55.90 209.33 45.06
+\c 212.01 39.64 213.00 33.83 211.63 28.66
+\c 210.28 23.56 206.61 19.06 199.92 16.12
+\c 194.86 28.10 189.69 34.95 182.46 37.27
+\c 175.17 39.61 165.89 37.37 152.63 31.43
+\l 152.62 31.42
+\l 152.61 31.42
+\c 124.58 15.96 102.06 13.30 86.25 18.36
+\c 70.44 23.42 61.31 36.19 60.01 51.74
+\l 59.94 52.62
+\l 59.54 51.83
+\c 55.63 44.09 47.25 35.95 36.63 36.63
+\c 35.95 47.25 44.09 55.63 51.83 59.54
+\l 52.62 59.94
+\l 51.74 60.01
+\c 36.19 61.31 23.42 70.44 18.36 86.25
+\c 13.30 102.06 15.96 124.58 31.42 152.61
+\l 31.42 152.62
+\l 31.43 152.63
+\c 37.37 165.89 39.61 175.17 37.27 182.46
+\c 34.95 189.69 28.10 194.85 16.13 199.92
+\c 20.00 208.71 26.55 212.30 33.66 212.25
+
+\m 225.75 55.47
+\c 222.89 55.42 220.79 54.07 220.20 52.08
+\c 219.60 50.09 220.55 47.56 223.54 45.23
+\l 223.54 45.23
+\c 227.14 42.50 231.53 38.51 234.34 32.69
+\c 237.15 26.87 238.39 19.21 235.66 9.10
+\l 235.51 8.56
+\l 236.02 8.82
+\c 241.19 11.50 245.03 14.41 247.51 17.60
+\c 250.00 20.78 251.12 24.25 250.82 27.98
+\c 250.24 35.44 244.10 43.90 232.34 53.62
+\l 232.32 53.64
+\l 232.30 53.65
+\c 229.90 54.96 227.65 55.50 225.75 55.47
+
+\m 252.11 55.39
+\c 251.38 55.39 250.78 55.04 250.43 54.42
+\c 250.08 53.81 249.95 52.95 250.01 51.87
+\c 250.14 49.71 251.07 46.64 252.94 42.80
+\c 257.73 32.04 265.55 23.58 275.31 19.36
+\c 285.06 15.15 296.73 15.21 309.15 21.47
+\l 309.37 21.57
+\l 309.27 21.79
+\c 307.73 25.31 305.00 27.38 301.59 28.75
+\c 298.17 30.12 294.08 30.80 289.74 31.59
+\c 281.05 33.17 271.40 35.15 264.25 43.65
+\c 261.56 47.71 259.14 50.63 257.10 52.55
+\c 255.05 54.46 253.38 55.40 252.11 55.39
+
+\m 225.75 54.97
+\c 227.55 55.00 229.71 54.49 232.05 53.22
+\c 243.75 43.54 249.77 35.15 250.33 27.94
+\c 250.61 24.33 249.54 21.01 247.12 17.90
+\c 244.78 14.90 241.11 12.13 236.25 9.55
+\c 238.80 19.46 237.59 27.10 234.79 32.91
+\c 231.93 38.83 227.47 42.88 223.84 45.63
+\l 223.84 45.63
+\c 220.96 47.88 220.16 50.20 220.67 51.94
+\c 221.19 53.68 223.05 54.92 225.75 54.97
+
+\m 252.11 54.89
+\c 253.13 54.90 254.75 54.06 256.76 52.18
+\c 258.76 50.30 261.17 47.40 263.86 43.35
+\l 263.86 43.34
+\l 263.87 43.33
+\c 271.13 34.69 280.95 32.68 289.65 31.10
+\c 293.99 30.31 298.06 29.62 301.40 28.29
+\c 304.65 26.98 307.18 25.05 308.68 21.82
+\c 296.47 15.74 285.06 15.69 275.51 19.82
+\c 265.89 23.98 258.14 32.34 253.39 43.00
+\l 253.39 43.00
+\l 253.39 43.01
+\c 251.53 46.82 250.63 49.86 250.51 51.90
+\c 250.45 52.93 250.59 53.69 250.87 54.18
+\c 251.14 54.66 251.53 54.89 252.11 54.89
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han76.pgf b/graphics/pgf/contrib/pgfornament-han/han/han76.pgf
new file mode 100644
index 0000000000..a6bbf276a7
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han76.pgf
@@ -0,0 +1,30 @@
+% han76.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+%\r 15 1 120 122.5
+%\ubb
+
+\m 75 122.5
+\c 61.25 122.5 47.5 115 45 100
+\c 0 100 22 38 48 60
+\c 10 72 55 110 63 70
+\c 69 40 47 15 15 15
+\l 15 0
+\c 46 0 67 22 75 40
+\c 83 22 104 0 135 0
+\l 135 15
+\c 103 15 81 40 87 70
+\c 95 110 140 72 102 60
+\c 128 38 150 100 105 100
+\c 102.5 115 89.00 122.5 75 122.5
+
+\m 75 109
+\c 81.25 109 87.5 106 90 100
+\c 82 95 77 90 75 78
+\c 73 90 68 95 60 100
+\c 62.5 106 69.00 109 75 109
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han77.pgf b/graphics/pgf/contrib/pgfornament-han/han/han77.pgf
new file mode 100644
index 0000000000..1b668f2e85
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han77.pgf
@@ -0,0 +1,88 @@
+% han77.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 15.25 0
+\l 15.25 0.50
+\c 46.13 0.50 67.06 22.43 75.02 40.35
+\l 75.25 40.86
+\l 75.48 40.35
+\c 83.44 22.43 104.37 0.50 135.25 0.50
+\l 135.25 0
+\c 104.37 0 83.42 21.72 75.25 39.71
+\c 67.07 21.72 46.12 0 15.25 0
+
+\m 15.25 15.00
+\l 15.25 15.50
+\c 31.18 15.50 44.61 21.72 53.31 31.66
+\c 62.01 41.61 65.99 55.27 63.01 70.20
+\c 61.02 80.15 56.75 85.18 52.09 87.02
+\c 47.44 88.86 42.35 87.51 38.65 84.56
+\c 34.96 81.60 32.70 77.07 33.68 72.55
+\c 34.65 68.04 38.87 63.47 48.32 60.49
+\l 48.75 60.35
+\l 48.41 60.06
+\c 41.85 54.51 35.46 54.24 30.36 57.00
+\c 25.27 59.76 21.46 65.51 19.88 71.94
+\c 18.30 78.37 18.96 85.51 22.87 91.05
+\c 26.76 96.56 33.87 100.43 45.06 100.48
+\c 50.28 130.48 100.22 130.48 105.44 100.48
+\c 116.63 100.43 123.74 96.56 127.62 91.05
+\c 131.53 85.51 132.19 78.37 130.62 71.94
+\c 129.04 65.51 125.23 59.76 120.13 57.00
+\c 115.04 54.24 108.64 54.51 102.09 60.06
+\l 101.74 60.35
+\l 102.18 60.49
+\c 111.63 63.47 115.84 68.04 116.82 72.55
+\c 117.79 77.07 115.53 81.60 111.84 84.56
+\c 108.15 87.51 103.06 88.86 98.40 87.02
+\c 93.75 85.18 89.48 80.15 87.49 70.20
+\c 84.51 55.27 88.49 41.61 97.19 31.66
+\c 105.89 21.72 119.31 15.50 135.25 15.50
+\l 135.25 15.00
+\c 119.18 15.00 105.61 21.28 96.81 31.34
+\c 88.01 41.39 83.99 55.23 87.00 70.30
+\c 89.01 80.35 93.37 85.57 98.22 87.48
+\c 103.07 89.40 108.35 87.99 112.16 84.94
+\c 115.96 81.90 118.33 77.18 117.30 72.45
+\c 116.30 67.80 111.97 63.22 102.78 60.20
+\c 109.08 55.05 115.06 54.81 119.90 57.44
+\c 124.83 60.11 128.58 65.74 130.13 72.06
+\c 131.68 78.38 131.03 85.36 127.22 90.76
+\c 123.41 96.16 116.44 100.00 105.25 100.00
+\l 105.04 100.00
+\l 105.00 100.21
+\c 100.05 129.94 50.45 129.94 45.49 100.21
+\l 45.46 100.00
+\l 45.25 100.00
+\c 34.06 100.00 27.09 96.16 23.28 90.76
+\c 19.47 85.36 18.82 78.38 20.37 72.06
+\c 21.91 65.74 25.67 60.11 30.60 57.44
+\c 35.44 54.81 41.42 55.05 47.72 60.20
+\c 38.53 63.22 34.20 67.80 33.19 72.45
+\c 32.17 77.18 34.53 81.90 38.34 84.94
+\c 42.15 87.99 47.43 89.40 52.28 87.48
+\c 57.12 85.57 61.48 80.35 63.49 70.30
+\c 66.51 55.23 62.49 41.39 53.69 31.34
+\c 44.89 21.28 31.31 15.00 15.25 15.00
+
+\m 75.25 76.74
+\l 75.00 78.21
+\c 73.01 90.15 68.09 95.05 60.12 100.04
+\l 59.94 100.15
+\l 60.02 100.35
+\c 65.11 112.56 85.39 112.56 90.48 100.35
+\l 90.56 100.15
+\l 90.38 100.04
+\c 82.40 95.05 77.49 90.15 75.50 78.21
+\l 75.25 76.74
+
+\m 75.25 79.22
+\c 77.35 90.42 82.25 95.49 89.91 100.32
+\c 84.90 111.85 65.59 111.85 60.58 100.32
+\c 68.24 95.49 73.14 90.42 75.25 79.22
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han78.pgf b/graphics/pgf/contrib/pgfornament-han/han/han78.pgf
new file mode 100644
index 0000000000..d0ef212640
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han78.pgf
@@ -0,0 +1,432 @@
+% han78.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\m 100.50 31.79
+\l 100.12 30.01
+\l 100.42 28.84
+\l 101.25 27.78
+\l 102.16 27.25
+\l 102.69 26.49
+\l 102.58 24.87
+\l 101.67 23.09
+\l 100.23 21.92
+\l 97.70 20.11
+\l 95.89 18.29
+\l 95.40 16.67
+\l 94.11 15.27
+\l 91.65 14.78
+\l 89.84 13.68
+\l 89.35 12.43
+\l 88.33 11.79
+\l 86.48 11.75
+\l 84.10 11.68
+\l 83.34 11.64
+\l 82.92 13.15
+\l 83.00 14.44
+\l 83.64 15.72
+\l 84.78 16.82
+\l 86.17 17.42
+\l 87.69 17.57
+\l 88.90 17.01
+\l 89.76 16.48
+\l 90.41 16.44
+\l 91.01 17.35
+\l 91.31 18.52
+\l 92.34 19.46
+\l 93.51 19.69
+\l 94.45 20.03
+\l 94.91 20.45
+\l 96.11 21.81
+\l 97.10 23.70
+\l 97.25 24.30
+\l 97.02 24.83
+\l 96.23 24.57
+\l 94.49 23.77
+\l 93.09 22.72
+\l 91.69 21.85
+\l 91.13 20.94
+\l 90.52 19.43
+\l 89.50 18.41
+\l 87.80 17.95
+\l 86.40 18.48
+\l 85.31 19.05
+\l 83.07 19.65
+\l 79.98 20.45
+\l 78.80 21.88
+\l 78.77 22.87
+\l 79.22 23.81
+\l 80.13 24.68
+\l 82.28 25.66
+\l 84.06 25.59
+\l 85.49 24.60
+\l 85.76 23.32
+\l 85.68 22.41
+\l 86.21 21.77
+\l 86.63 21.92
+\l 86.93 22.68
+\l 87.76 23.06
+\l 88.56 23.06
+\l 89.08 22.98
+\l 90.14 23.70
+\l 91.28 24.68
+\l 92.00 25.55
+\l 92.60 26.65
+\l 92.79 27.36
+\l 92.45 27.67
+\l 90.37 27.74
+\l 88.40 27.63
+\l 86.10 27.59
+\l 83.68 26.99
+\l 81.00 26.12
+\l 77.03 24.19
+\l 73.51 22.87
+\l 68.33 22.19
+\l 66.26 22.26
+\l 64.86 22.53
+\l 63.99 22.49
+\l 63.57 22.15
+\l 62.85 21.32
+\l 61.76 20.45
+\l 60.59 20.07
+\l 59.53 20.11
+\l 58.70 19.58
+\l 58.17 18.90
+\l 56.20 16.44
+\l 54.35 14.82
+\l 51.70 14.36
+\l 48.38 14.06
+\l 44.90 13.19
+\l 41.42 11.98
+\l 38.63 10.28
+\l 36.21 8.32
+\l 35.34 6.80
+\l 34.58 4.99
+\l 33.34 4.04
+\l 31.37 3.93
+\l 29.78 3.40
+\l 28.84 1.78
+\l 26.95 0.87
+\l 23.09 0.00
+\l 22.11 1.21
+\l 21.92 2.61
+\l 22.75 4.54
+\l 24.61 5.97
+\l 26.08 6.46
+\l 27.33 5.90
+\l 28.12 5.44
+\l 28.61 5.25
+\l 29.22 5.74
+\l 29.71 6.84
+\l 30.01 7.86
+\l 30.09 8.24
+\l 32.43 8.84
+\l 34.92 9.86
+\l 36.28 11.38
+\l 37.46 13.72
+\l 38.36 15.68
+\l 39.80 17.46
+\l 41.46 18.03
+\l 43.05 17.69
+\l 43.77 17.20
+\l 44.30 17.31
+\l 46.19 18.63
+\l 48.08 20.14
+\l 48.87 21.66
+\l 49.63 23.51
+\l 49.44 24.15
+\l 48.57 24.15
+\l 45.96 22.41
+\l 43.81 20.94
+\l 41.46 20.75
+\l 38.93 20.37
+\l 36.59 19.09
+\l 34.58 17.76
+\l 33.75 16.48
+\l 31.98 16.06
+\l 29.82 14.78
+\l 28.12 13.08
+\l 26.99 11.57
+\l 26.34 10.24
+\l 25.25 8.92
+\l 23.74 8.28
+\l 21.77 8.09
+\l 20.64 7.11
+\l 19.88 6.92
+\l 19.24 5.93
+\l 18.14 5.86
+\l 16.18 4.35
+\l 14.40 3.44
+\l 13.08 5.06
+\l 12.85 6.84
+\l 13.15 8.16
+\l 14.29 9.41
+\l 15.65 10.62
+\l 16.97 11.15
+\l 17.95 11.11
+\l 18.71 10.77
+\l 19.35 10.17
+\l 20.37 10.28
+\l 21.05 10.62
+\l 21.43 11.11
+\l 21.28 11.57
+\l 21.54 12.28
+\l 22.15 12.74
+\l 25.25 14.17
+\l 27.02 15.34
+\l 28.08 16.33
+\l 28.65 18.10
+\l 29.86 20.90
+\l 30.73 21.92
+\l 32.92 22.75
+\l 34.85 23.51
+\l 36.55 24.11
+\l 37.00 24.64
+\l 37.98 28.35
+\l 39.76 32.16
+\l 41.58 36.17
+\l 43.62 39.00
+\l 42.26 39.23
+\l 40.48 37.04
+\l 40.06 35.00
+\l 38.78 31.75
+\l 37.08 28.46
+\l 34.81 26.04
+\l 31.79 23.36
+\l 28.35 21.51
+\l 27.21 21.32
+\l 30.54 23.32
+\l 32.20 24.98
+\l 34.02 26.80
+\l 34.81 28.65
+\l 30.61 25.63
+\l 27.97 24.08
+\l 24.95 23.43
+\l 21.85 23.36
+\l 20.33 23.89
+\l 22.72 24.30
+\l 26.23 25.63
+\l 28.57 27.14
+\l 30.12 28.42
+\l 27.02 27.67
+\l 23.77 27.10
+\l 20.07 26.15
+\l 15.57 24.87
+\l 13.04 23.85
+\l 15.31 26.04
+\l 18.37 28.08
+\l 20.64 28.95
+\l 15.23 28.50
+\l 13.57 28.12
+\l 10.70 27.78
+\l 7.26 28.01
+\l 5.10 28.46
+\l 2.65 29.25
+\l 1.28 30.01
+\l 3.40 29.78
+\l 5.03 29.74
+\l 7.86 29.97
+\l 4.80 31.03
+\l 2.65 31.86
+\l 0.68 32.62
+\l -0 33.00
+\l 2.53 32.62
+\l 4.69 32.31
+\l 8.47 32.88
+\l 6.69 33.26
+\l 4.99 33.68
+\l 3.70 34.28
+\l 2.31 35.07
+\l 2.12 35.26
+\l 4.69 34.96
+\l 7.22 35.60
+\l 10.24 36.74
+\l 13.04 37.53
+\l 15.76 37.76
+\l 17.27 37.64
+\l 17.58 37.68
+\l 15.38 38.66
+\l 13.61 38.93
+\l 11.11 38.66
+\l 14.51 39.68
+\l 16.33 39.99
+\l 19.20 40.02
+\l 22.07 39.61
+\l 19.47 40.37
+\l 17.31 41.39
+\l 16.40 42.18
+\l 17.50 41.84
+\l 18.90 41.50
+\l 20.79 41.42
+\l 21.35 41.69
+\l 19.96 42.71
+\l 19.20 43.69
+\l 19.05 44.37
+\l 20.56 43.99
+\l 23.89 43.65
+\l 27.59 44.07
+\l 32.32 45.73
+\l 35.45 47.06
+\l 38.70 47.66
+\l 41.54 47.92
+\l 44.83 47.06
+\l 47.02 46.41
+\l 48.95 44.94
+\l 50.08 44.22
+\l 52.73 45.20
+\l 55.90 46.26
+\l 59.45 45.58
+\l 65.24 46.22
+\l 70.19 47.85
+\l 74.12 51.06
+\l 76.42 54.20
+\l 76.76 55.11
+\l 77.25 55.60
+\l 75.71 55.29
+\l 76.61 56.39
+\l 74.95 56.43
+\l 74.31 56.77
+\l 75.71 57.45
+\l 76.65 57.64
+\l 77.18 59.11
+\l 77.52 60.51
+\l 78.27 61.34
+\l 78.92 61.76
+\l 77.71 61.98
+\l 77.41 62.25
+\l 77.93 62.36
+\l 78.54 62.63
+\l 79.22 63.08
+\l 79.56 63.12
+\l 79.48 63.61
+\l 78.31 63.99
+\l 76.84 65.01
+\l 76.61 65.27
+\l 77.97 64.97
+\l 79.60 65.20
+\l 81.60 64.93
+\l 83.11 64.10
+\l 84.40 63.16
+\l 85.99 62.40
+\l 86.36 62.32
+\l 86.51 62.74
+\l 86.25 63.31
+\l 84.96 63.91
+\l 85.38 64.10
+\l 85.83 63.99
+\l 86.44 63.95
+\l 86.78 63.80
+\l 86.48 64.48
+\l 85.76 65.16
+\l 85.27 65.50
+\l 86.51 65.12
+\l 87.53 64.78
+\l 88.18 64.52
+\l 87.19 65.24
+\l 86.29 66.26
+\l 85.76 67.99
+\l 85.80 68.90
+\l 86.33 67.84
+\l 87.46 66.63
+\l 89.31 65.84
+\l 89.69 65.80
+\l 89.16 66.63
+\l 89.16 67.50
+\l 89.54 66.78
+\l 90.71 66.03
+\l 91.65 65.69
+\l 92.49 65.01
+\l 93.51 64.33
+\l 93.28 65.73
+\l 93.13 66.37
+\l 93.54 67.80
+\l 93.70 67.99
+\l 93.92 66.75
+\l 94.38 65.80
+\l 94.79 65.54
+\l 95.40 66.86
+\l 96.00 67.35
+\l 95.89 66.29
+\l 96.04 65.35
+\l 96.64 64.74
+\l 97.48 64.89
+\l 100.31 66.14
+\l 109.38 63.61
+\l 109.87 63.19
+\l 113.05 61.08
+\l 115.16 62.32
+\l 115.01 58.96
+\l 116.26 57.90
+\l 117.02 57.15
+\l 117.47 56.54
+\l 117.77 55.67
+\l 118.15 55.11
+\l 118.94 55.82
+\l 119.21 56.32
+\l 119.09 57.15
+\l 120.04 57.71
+\l 121.25 58.51
+\l 121.51 58.66
+\l 121.55 57.49
+\l 120.57 54.69
+\l 119.36 53.48
+\l 118.49 52.76
+\l 118.23 52.57
+\l 119.62 52.50
+\l 120.83 52.99
+\l 122.31 52.84
+\l 122.68 52.65
+\l 121.21 52.46
+\l 120.57 51.93
+\l 121.25 51.89
+\l 122.23 51.93
+\l 121.78 51.29
+\l 120.49 50.65
+\l 118.87 50.65
+\l 118.07 50.80
+\l 118.60 50.38
+\l 119.28 50.04
+\l 119.77 49.85
+\l 118.26 49.70
+\l 117.09 50.42
+\l 116.60 50.15
+\l 116.75 49.51
+\l 116.98 48.79
+\l 117.32 47.92
+\l 117.36 46.87
+\l 116.49 46.00
+\l 115.24 44.52
+\l 114.71 43.28
+\l 113.24 38.14
+\l 112.67 36.28
+\l 113.12 34.92
+\l 112.93 34.32
+\l 110.67 31.56
+\l 108.81 31.11
+\l 106.96 31.26
+\l 105.30 32.24
+\l 104.35 33.60
+\l 104.88 34.77
+\l 105.26 35.41
+\l 105.07 36.51
+\l 105.03 38.06
+\l 105.22 38.97
+\l 104.39 42.41
+\l 104.05 43.05
+\l 103.37 44.60
+\l 103.14 46.30
+\l 103.03 47.85
+\l 102.96 48.38
+\l 102.35 48.23
+\l 101.90 46.94
+\l 102.05 45.69
+\l 100.99 43.50
+\l 100.54 41.61
+\l 100.73 39.35
+\l 100.27 37.08
+\l 99.70 35.30
+\l 100.01 34.47
+\l 100.73 32.96
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han8.pgf b/graphics/pgf/contrib/pgfornament-han/han/han8.pgf
new file mode 100644
index 0000000000..e1ffc5c330
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han8.pgf
@@ -0,0 +1,116 @@
+% han8.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200.5
+\l 0 140
+\l 50 140
+\l 50 100.5
+\l 0 100.5
+\l 0 10
+\l 95 10
+\l 95 0.25
+\l 95.5 0.25
+\l 95.5 10.5
+\l 0.5 10.5
+\l 0.5 100
+\l 100 100
+\l 100 90.5
+\l 10 90.5
+\l 10 20
+\l 105 20
+\l 105 0.25
+\l 105.5 0.25
+\l 105.5 20.5
+\l 10.5 20.5
+\l 10.5 90
+\l 50 90
+\l 50 40
+\l 110.5 40
+\l 110.5 90
+\l 160.5 90
+\l 160.5 150.5
+\l 110.5 150.5
+\l 110.5 190
+\l 180 190
+\l 180 95
+\l 200.25 95
+\l 200.25 95.5
+\l 180.5 95.5
+\l 180.5 190.5
+\l 110 190.5
+\l 110 150.5
+\l 100.5 150.5
+\l 100.5 200
+\l 190 200
+\l 190 105
+\l 200.25 105
+\l 200.25 105.5
+\l 190.5 105.5
+\l 190.5 200.5
+\l 100 200.5
+\l 100 150.5
+\l 60.5 150.5
+\l 60.5 200.5
+\l 0 200.5
+
+\m 0.5 200
+\l 60 200
+\l 60 100.5
+\l 50.5 100.5
+\l 50.5 190.5
+\l 10 190.5
+\l 10 150
+\l 50 150
+\l 50 140.5
+\l 0.5 140.5
+\l 0.5 200
+
+\m 10.5 190
+\l 50 190
+\l 50 150.5
+\l 10.5 150.5
+\l 10.5 190
+
+\m 60.5 150
+\l 160 150
+\l 160 90.5
+\l 110.5 90.5
+\l 110.5 100
+\l 150.5 100
+\l 150.5 140.5
+\l 60.5 140.5
+\l 60.5 150
+
+\m 60.5 140
+\l 100 140
+\l 100 100.5
+\l 60.5 100.5
+\l 60.5 140
+
+\m 100.5 140
+\l 110 140
+\l 110 40.5
+\l 50.5 40.5
+\l 50.5 90
+\l 60 90
+\l 60 50
+\l 100.5 50
+\l 100.5 140
+
+\m 110.5 140
+\l 150 140
+\l 150 100.5
+\l 110.5 100.5
+\l 110.5 140
+
+\m 60.5 90
+\l 100 90
+\l 100 50.5
+\l 60.5 50.5
+\l 60.5 90
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/han/han9.pgf b/graphics/pgf/contrib/pgfornament-han/han/han9.pgf
new file mode 100644
index 0000000000..75f01d386f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/han/han9.pgf
@@ -0,0 +1,62 @@
+% han9.pgf
+% pgfornament-han v0.33 2019/08/10
+% Author: LIM LianTze
+
+\pgfsetrectcap
+
+\m 0 200
+\l 0 130
+\l 30 130
+\l 30 110
+\l 0 110
+\l 0 0
+\l 10 0
+\l 10 100
+\l 30 100
+\l 30 0
+\l 40 0
+\l 40 100
+\l 70 100
+\l 70 130
+\l 100 130
+\l 100 160
+\l 200 160
+\l 200 170
+\l 100 170
+\l 100 190
+\l 200 190
+\l 200 200
+\l 90 200
+\l 90 170
+\l 70 170
+\l 70 200
+\l 0 200
+
+\m 10 190
+\l 60 190
+\l 60 170
+\l 30 170
+\l 30 140
+\l 10 140
+\l 10 190
+
+\m 40 160
+\l 60 160
+\l 60 140
+\l 40 140
+\l 40 160
+
+\m 70 160
+\l 90 160
+\l 90 140
+\l 70 140
+\l 70 160
+
+\m 40 130
+\l 60 130
+\l 60 110
+\l 40 110
+\l 40 130
+
+\s
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.pdf b/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.pdf
new file mode 100644
index 0000000000..ba30e0a3d2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.pdf
@@ -0,0 +1,1987 @@
+%PDF-1.5
+%äðíø
+15 0 obj
+<</Length 137149>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 91.073 121.179 cm 0 G 0 g q 1 0 0 1 -75.028 -229.646 cm q 0 G 0 g 0.3985 w q 0.94574 0.89465 0.74782 RG 0.94574 0.89465 0.74782 rg 42.4179 56.84483 m 37.80672 56.90538 34.0524 53.98972 32.91397 49.78728 c 27.78508 52.36385 19.78288 45.43953 21.29674 41.2492 c 10.21541 36.21114 18.28418 24.85426 25.62633 29.417 c 30.41916 32.88976 28.90836 37.82791 23.64926 37.92177 c 27.05237 39.25699 31.87247 37.837 29.6804 31.56363 c 28.2786 27.60947 19.46498 23.86119 14.37544 29.60472 c 9.83998 33.05023 0.07567 25.50523 7.40572 19.31058 c 0.75085 5.13797 20.14017 0.07567 24.28204 10.45459 c 26.56189 16.99136 17.06403 21.30885 15.87718 13.45805 c 12.74655 19.2349 26.04416 26.02599 38.21243 15.19595 c 44.94601 8.1596 53.13289 6.7154 63.94778 9.58263 c 53.17224 9.1981 45.16704 11.5052 38.72412 22.39276 c 26.55887 19.74959 29.78032 34.40663 36.41702 34.44598 c 38.821 41.8608 48.61255 43.99228 53.37207 36.22626 c 61.5226 40.45291 72.80983 30.16484 64.40497 21.88713 c 73.08232 15.94682 82.32887 20.8335 86.825 25.58698 c 92.57759 30.34953 98.54214 30.67651 103.9072 27.67305 c 106.2567 25.85341 111.81554 23.02858 118.27359 22.54112 c 114.54953 23.9732 111.01318 25.64148 106.34448 29.97409 c 100.95218 34.31277 93.55554 34.31277 85.52309 27.86986 c 71.82584 20.92735 70.32408 38.1761 79.71295 37.02255 c 83.41278 36.16875 84.43614 32.84131 81.80205 31.64537 c 82.41971 33.9222 81.32672 35.5844 78.53821 35.46631 c 71.98326 32.99571 77.30292 24.50003 85.20518 29.38976 c 90.3583 32.80498 87.75752 40.53769 80.73026 39.89583 c 84.36348 45.94817 76.44002 52.01566 71.71078 47.87076 c 70.82365 50.06886 67.79294 51.4192 65.38594 50.22932 c 62.72461 48.50052 64.28688 44.59177 62.70036 42.63286 c 55.23409 32.59001 44.06494 45.78165 55.21593 48.71245 c 46.29636 42.82967 60.39934 35.76303 62.18565 46.03598 c 63.31802 53.53253 53.85347 56.36646 51.26782 53.14801 c 48.26134 55.69734 45.1852 56.80547 42.4179 56.84483 c 45.47284 38.8422 m 42.51779 38.93605 39.43864 37.2466 37.37376 32.78378 c 31.36682 33.18648 30.64018 19.2803 39.5113 25.07832 c 47.44083 3.7846 80.17618 10.45459 91.17577 21.07874 c 94.50322 24.21542 100.22252 24.42737 104.87909 21.72061 c 109.08759 18.38713 117.52876 18.55669 122.47905 21.8387 c 118.51276 20.83047 113.86528 20.92433 107.4375 23.9732 c 101.09146 28.08179 96.59836 28.99918 92.184 27.09477 c 87.84532 24.71501 86.24065 21.91742 81.83536 19.3893 c 73.76657 16.06792 66.9573 16.89449 63.23627 20.77899 c 61.14717 18.0117 52.20035 20.68515 54.27734 26.23793 c 56.26048 32.53249 63.05461 30.08914 61.55287 25.98663 c 60.71118 28.85385 57.76524 29.44424 56.34224 25.70203 c 55.59137 23.68256 60.6476 19.22882 64.38376 24.61508 c 67.96553 28.44511 61.50748 38.4274 52.82709 34.2068 c 51.25874 36.87115 48.42786 38.74834 45.47284 38.8422 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 217.016 171.717 cm 0 G 0 g q 1 0 0 1 64.913 -230.885 cm q 0 G 0 g 0.3985 w q 0.95187 0.90657 0.77632 RG 0.95187 0.90657 0.77632 rg -102.95819 58.14108 m -99.14987 58.10344 -95.64264 55.19502 -95.22862 50.38074 c -92.14911 51.53383 -89.62048 51.23271 -87.97809 49.93933 c -86.31857 48.63225 -85.56923 46.32945 -86.03801 43.58186 c -86.03801 43.57501 l -86.04143 43.56476 l -86.66074 41.89497 -87.56064 41.0635 -88.61795 40.69739 c -89.67867 40.33127 -90.87967 40.42706 -92.12517 40.56735 c -93.36723 40.70766 -94.65378 40.89241 -95.87189 40.73502 c -97.09001 40.5742 -98.23969 40.07806 -99.23883 38.83598 c -100.27559 37.21411 -99.8171 35.46907 -98.78032 34.5281 c -98.26364 34.05592 -97.60326 33.78902 -96.90866 33.83691 c -96.21748 33.88483 -95.49208 34.24411 -94.83513 35.05504 c -93.89075 36.36554 -92.0362 37.51865 -89.91817 38.29538 c -87.8378 39.05498 -85.50423 39.44505 -83.5128 39.24316 c -84.44691 42.23714 -84.16977 45.36797 -82.67792 47.63655 c -81.16553 49.93591 -78.41792 51.34221 -74.51038 50.80844 c -74.50696 50.80844 l -74.50354 50.80501 l -71.56775 50.18227 -69.92534 48.63225 -69.24785 46.84613 c -68.57034 45.06345 -68.85434 43.0515 -69.73714 41.50148 c -70.61993 39.95146 -72.11177 38.85652 -73.84999 38.92494 c -75.56425 38.99681 -77.49066 40.21492 -79.2973 43.16783 c -79.80028 42.43561 -79.95085 41.36461 -79.7079 40.24573 c -79.45811 39.0755 -78.7909 37.86766 -77.70622 36.9883 c -77.70279 36.9883 l -77.70279 36.9883 l -75.35895 34.9387 -72.7927 34.53152 -70.04851 34.9866 c -67.30432 35.44168 -64.38565 36.76247 -61.38826 38.1722 c -58.39087 39.57849 -55.31136 41.07376 -52.225 41.86417 c -49.14207 42.65115 -46.04889 42.73329 -43.04123 41.31328 c -42.67853 41.14561 l -43.07545 41.15247 l -52.45769 41.33382 -57.26855 37.83002 -61.40536 34.75735 c -63.47205 33.22444 -65.37108 31.79419 -67.58832 30.99352 c -69.77478 30.20311 -72.27602 30.0423 -75.52661 30.98666 c -74.92097 27.29126 -75.79008 24.61209 -77.38458 22.87045 c -78.99619 21.10829 -81.33319 20.30078 -83.58467 20.31789 c -85.83612 20.33841 -88.0123 21.18015 -89.29886 22.73701 c -90.5854 24.2973 -90.97205 26.56927 -89.66496 29.3956 c -89.59311 29.54956 l -89.51442 29.40242 l -88.54266 27.66765 -87.42377 26.76433 -86.36647 26.43584 c -85.3126 26.10394 -84.31006 26.33661 -83.56413 26.89093 c -82.81477 27.44182 -82.32207 28.31435 -82.28784 29.26215 c -82.25363 30.20653 -82.6745 31.22961 -83.77286 32.09187 c -83.77628 32.09529 l -86.27068 33.81982 -89.4323 33.60083 -91.78983 31.8284 c -94.14737 30.0594 -95.7008 26.73694 -94.95488 22.23402 c -94.50665 19.67462 -93.32617 17.77559 -91.56743 16.60194 c -89.80869 15.43173 -87.46825 14.98009 -84.70012 15.33936 c -79.16385 16.06133 -71.93044 20.03389 -64.32747 27.91058 c -64.32405 27.914 l -64.32063 27.91742 l -52.0026 38.04218 -41.28592 41.47752 -30.96616 39.65378 c -20.64638 37.83002 -10.74062 30.75743 -0.02394 19.90045 c -0.13684 19.77042 l -9.67648 26.86354 -19.07239 33.6282 -29.03632 35.65382 c -39.00023 37.67604 -49.5424 34.97292 -61.42245 23.08945 c -61.42245 23.08945 -61.42245 23.08601 -61.4259 23.08601 c -69.39839 13.4198 -77.50435 7.644 -85.20311 5.49863 c -92.9053 3.3498 -100.20717 4.84166 -106.54066 9.69016 c -106.54066 9.69016 l -106.54066 9.69359 l -111.51237 13.74484 -114.06494 19.8457 -116.8707 24.74895 c -118.2736 27.20229 -119.73807 29.35452 -121.59262 30.80533 c -123.44376 32.25954 -125.68153 33.01573 -128.65839 32.68382 c -128.65839 32.68382 l -128.65839 32.68382 l -129.72252 32.58801 -130.51292 32.05423 -131.03645 31.29462 c -131.56339 30.535 -131.82 29.553 -131.80289 28.57097 c -131.78236 27.58896 -131.48811 26.61377 -130.91669 25.86784 c -130.34526 25.12534 -129.50354 24.60867 -128.37437 24.54022 c -127.32051 24.49918 -126.6259 24.76949 -126.2119 25.18352 c -125.79785 25.59753 -125.65414 26.16211 -125.72943 26.73694 c -125.87997 27.89005 -126.9065 29.05342 -128.34702 28.99525 c -128.56258 28.985 l -128.4086 29.14238 l -127.64899 29.902 -126.70119 30.3605 -125.76364 30.2647 c -124.82611 30.17232 -123.91594 29.5256 -123.24529 28.133 c -123.24529 28.12956 l -123.24187 28.12614 l -122.26328 25.79599 -122.67046 23.79431 -123.7996 22.37431 c -124.92534 20.95775 -126.76277 20.11943 -128.63786 20.07153 c -130.51292 20.02362 -132.43248 20.76955 -133.70535 22.52829 c -134.9748 24.2802 -135.59753 27.03122 -134.9303 30.97299 c -136.8533 32.52986 -136.91487 35.31508 -135.67624 37.3989 c -134.44101 39.47241 -131.89871 40.84793 -128.64128 39.64693 c -128.73708 40.6392 -128.51468 41.56648 -127.97404 42.25424 c -127.4129 42.9728 -126.52325 43.4313 -125.37358 43.45526 c -123.07079 43.51 -119.72781 41.85391 -115.69366 37.15253 c -114.22575 35.52039 -110.8212 35.01056 -107.73827 35.87967 c -104.65192 36.74876 -101.90088 38.97287 -101.68188 42.7675 c -101.68188 42.77092 l -101.20287 50.52786 -110.92043 50.72632 -111.92982 46.66138 c -111.92982 46.66138 l -111.92982 46.65793 l -112.51833 44.52281 -111.84428 42.88042 -110.75276 42.01816 c -109.70572 41.19011 -108.28915 41.10457 -107.19765 41.99077 c -108.28915 42.26451 -109.04535 42.66484 -109.4628 43.12677 c -109.90419 43.62292 -109.99657 44.18065 -109.79811 44.65968 c -109.40462 45.61775 -107.92645 46.23708 -106.06848 45.64856 c -106.06506 45.64856 l -106.06506 45.64511 l -104.5253 45.08739 -103.83754 43.39368 -104.4124 41.74783 c -104.98724 40.10202 -106.81784 38.50409 -110.26346 38.07297 c -110.26688 38.07297 l -110.26688 38.07297 l -112.79207 37.83002 -114.71849 38.65465 -116.02554 40.0199 c -117.33264 41.38515 -118.0204 43.28418 -118.08882 45.19688 c -118.16069 47.10619 -117.60979 49.02916 -116.43274 50.43889 c -115.26251 51.83836 -113.46614 52.72115 -111.06755 52.58427 c -109.07613 56.45078 -105.93163 58.16846 -102.95819 58.14108 c -102.95819 57.97 m -105.87686 57.99738 -108.97691 56.31734 -110.94095 52.46452 c -110.96832 52.4132 l -111.02307 52.41663 l -113.40456 52.57059 -115.15303 51.70491 -116.29929 50.33282 c -117.44897 48.96072 -117.98618 47.07538 -117.91774 45.20374 c -117.85274 43.32866 -117.17525 41.46727 -115.90239 40.13623 c -114.62952 38.80862 -112.76129 38.00453 -110.284 38.24405 c -106.88284 38.66833 -105.1241 40.23204 -104.57321 41.806 c -104.02232 43.37656 -104.66902 44.95737 -106.11981 45.4843 c -107.91962 46.05573 -109.29512 45.4364 -109.6407 44.59468 c -109.81178 44.17381 -109.74336 43.6982 -109.33276 43.24312 c -108.92558 42.78802 -108.1694 42.36032 -106.98207 42.09343 c -106.82126 42.05922 l -106.94101 41.94629 l -108.11124 40.88899 -109.71599 40.97797 -110.85883 41.8847 c -112.0051 42.79144 -112.69627 44.51598 -112.09747 46.70244 c -112.09406 46.70244 l -111.02307 51.01373 -101.02493 50.65788 -101.5108 42.75725 c -101.73665 38.8839 -104.55954 36.59822 -107.69037 35.71542 c -110.8212 34.83264 -114.27708 35.32536 -115.82368 37.03961 c -115.82368 37.03961 l -115.82368 37.04303 l -119.84073 41.72389 -123.15291 43.3355 -125.36674 43.28418 c -126.47536 43.26022 -127.31024 42.82567 -127.8406 42.14818 c -128.37437 41.4741 -128.60364 40.55025 -128.48045 39.54428 c -128.46335 39.40399 l -128.59337 39.4553 l -131.83713 40.70424 -134.3144 39.34924 -135.52911 37.30992 c -136.74039 35.27402 -136.67194 32.55722 -134.79002 31.06879 c -134.74896 31.038 l -134.75923 30.9901 l -135.42987 27.05174 -134.80714 24.34178 -133.56848 22.62753 c -132.32642 20.91669 -130.46844 20.19472 -128.64128 20.2392 c -126.8141 20.2871 -125.02113 21.10829 -123.93306 22.4804 c -122.84154 23.85248 -122.4412 25.77547 -123.39928 28.06114 c -123.39928 28.06114 -123.39928 28.06114 -123.4027 28.06114 c -124.0528 29.41612 -124.91165 30.00807 -125.78075 30.09703 c -126.59511 30.17574 -127.43 29.77881 -128.13487 29.12871 c -126.72513 29.06367 -125.71574 27.93112 -125.56177 26.7609 c -125.47964 26.14157 -125.63704 25.51884 -126.09213 25.06033 c -126.54721 24.60524 -127.29314 24.32468 -128.3778 24.36916 c -128.38123 24.36916 l -128.38123 24.36916 l -129.5617 24.44101 -130.45477 24.98505 -131.05014 25.76518 c -131.64893 26.54533 -131.95346 27.55473 -131.97057 28.56755 c -131.99109 29.58035 -131.72763 30.5966 -131.17674 31.39044 c -130.62585 32.18425 -129.78754 32.75226 -128.67549 32.8549 c -125.661 33.19023 -123.36847 32.41693 -121.48656 30.94218 c -119.60463 29.46402 -118.1299 27.2947 -116.72359 24.8345 c -113.90753 19.91412 -111.36183 13.84065 -106.43118 9.82362 c -100.1353 5.00247 -92.9053 3.52774 -85.24759 5.66286 c -77.5933 7.79457 -69.5113 13.54982 -61.54907 23.20236 c -61.54907 23.20578 l -61.54564 23.2092 l -49.6348 35.11664 -39.01735 37.85397 -29.0021 35.81807 c -19.31876 33.85403 -10.2 27.43155 -0.982 20.59505 c -11.36336 30.9627 -21.00223 37.72052 -30.99352 39.48611 c -41.25854 41.2996 -51.91705 37.8916 -64.2077 27.78741 c -64.21114 27.78741 -64.21114 27.78741 -64.21114 27.78741 c -71.8312 19.897 -79.08516 15.9005 -84.67958 15.17169 c -87.4751 14.80557 -89.86002 15.26065 -91.65982 16.46167 c -93.45961 17.66267 -94.67087 19.6096 -95.12254 22.20665 c -95.12254 22.20665 l -95.87874 26.7609 -94.30135 30.1552 -91.89249 31.96527 c -89.48021 33.77534 -86.23303 34.00116 -83.67705 32.23215 c -83.67363 32.23215 l -83.67363 32.22874 l -82.53421 31.3391 -82.08255 30.25786 -82.11676 29.25531 c -82.1544 28.25616 -82.6745 27.33575 -83.46149 26.75064 c -84.24846 26.16895 -85.30917 25.92259 -86.41782 26.27159 c -87.49222 26.60692 -88.60083 27.51367 -89.56233 29.16975 c -90.7599 26.46321 -90.38695 24.32468 -89.1654 22.84651 c -87.91992 21.33755 -85.79506 20.50607 -83.58467 20.48898 c -81.37425 20.47186 -79.08516 21.26569 -77.50777 22.9868 c -75.93379 24.70447 -75.06468 27.35628 -75.70454 31.08247 c -75.72508 31.21591 l -75.59503 31.17828 l -72.31366 30.19968 -69.82951 30.36392 -67.64308 31.15433 c -65.46005 31.94133 -63.5747 33.36131 -61.5046 34.89766 c -57.43964 37.91557 -52.64246 41.36119 -43.53397 41.30986 c -46.3671 42.51088 -49.26868 42.44244 -52.18394 41.69652 c -55.24635 40.91638 -58.319 39.42793 -61.31639 38.0182 c -64.3172 36.60849 -67.24274 35.27745 -70.01772 34.81894 c -72.79611 34.35703 -75.43082 34.77448 -77.81229 36.85826 c -77.81229 36.85826 l -78.93117 37.765 -79.61552 39.00366 -79.87556 40.20808 c -80.1356 41.41592 -79.97137 42.59299 -79.37257 43.37656 c -79.2973 43.47578 l -79.2323 43.36972 l -77.41881 40.34837 -75.50607 39.16447 -73.84314 39.09604 c -72.18022 39.03102 -70.74654 40.07806 -69.88428 41.587 c -69.02542 43.09598 -68.7517 45.0566 -69.40866 46.78798 c -70.0622 48.5159 -71.64642 50.02487 -74.53775 50.63736 c -78.39398 51.16429 -81.05946 49.7922 -82.53421 47.54414 c -84.01237 45.29611 -84.28952 42.16528 -83.32462 39.18156 c -83.28699 39.05498 l -83.41699 39.06866 l -85.39473 39.2945 -87.76251 38.901 -89.86002 38.13455 c -91.9609 37.36467 -93.7881 36.21841 -94.69826 34.9524 c -94.70168 34.94896 l -94.70168 34.94556 l -95.3826 34.10724 -96.1559 33.71716 -96.89839 33.66583 c -97.6409 33.61452 -98.34918 33.90536 -98.89667 34.40149 c -99.99158 35.3972 -100.46379 37.2415 -99.3791 38.92838 c -99.37569 38.93523 l -99.37227 38.93864 l -98.34576 40.21492 -97.14476 40.73845 -95.89243 40.90268 c -94.64351 41.06694 -93.3467 40.87532 -92.10463 40.73502 c -90.86598 40.59816 -89.6855 40.50919 -88.67612 40.85822 c -87.66672 41.2072 -86.8113 41.98735 -86.20224 43.61607 c -85.74716 46.31918 -86.48282 48.54329 -88.08417 49.80588 c -89.68893 51.06848 -92.17648 51.37643 -95.26627 50.19254 c -95.37233 50.15147 l -95.3826 50.26439 l -95.74872 55.06842 -99.20802 57.93236 -102.95819 57.97 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -76.413 6.399 cm 0 G 0 g q 1 0 0 1 -78.798 -245.21 cm q 0 G 0 g 0.3985 w q 0.94528 0.89378 0.74574 RG 0.94528 0.89378 0.74574 rg 62.08778 83.30959 m 55.32997 83.39821 49.8218 79.1441 48.10686 73.0111 c 44.31802 74.83682 39.53217 73.24153 35.95604 70.42319 c 34.15248 69.00072 32.65025 67.26363 31.7374 65.49551 c 30.84227 63.7584 30.52321 61.98145 31.0461 60.43047 c 27.02686 58.58258 24.7137 56.16306 23.70334 53.65935 c 22.68413 51.1379 22.98102 48.54112 24.12874 46.39192 c 26.4242 42.09792 32.14066 39.58977 37.56464 42.96204 c 37.56906 42.96204 l 37.57349 42.96648 l 41.10529 45.52336 42.33722 48.64748 41.6858 51.16005 c 41.06541 53.54855 38.70793 55.29895 35.14955 55.53825 c 37.51144 56.31816 40.21458 56.2384 42.03145 54.93558 c 43.00636 54.23987 43.72423 53.20734 44.00783 51.77602 c 44.29144 50.3491 44.13191 48.51453 43.33426 46.23239 c 42.3328 43.3963 38.6193 40.58682 34.2367 39.54988 c 29.85406 38.51295 24.81561 39.23082 21.11986 43.40517 c 21.11542 43.4096 l 21.10655 43.41847 l 19.41377 44.70357 17.24242 44.96059 15.11093 44.48642 c 12.98387 44.01227 10.89227 42.81136 9.34573 41.1629 c 7.79918 39.51443 6.79768 37.41396 6.86415 35.14955 c 6.92621 32.8984 8.06062 30.50104 10.71059 28.23662 c 8.30437 23.06079 8.24232 18.6959 9.63376 15.30591 c 11.03407 11.90262 13.88344 9.4831 17.22469 8.20244 c 20.56593 6.92177 24.39906 6.7711 27.78906 7.89668 c 31.1746 9.02223 34.11261 11.43289 35.64142 15.2616 c 35.64142 15.2616 l 35.64142 15.26602 l 37.32977 20.10065 34.65765 24.13762 31.33414 25.49805 c 29.66794 26.17606 27.83337 26.19376 26.30455 25.29863 c 24.84662 24.4478 23.6989 22.74174 23.2159 20.07848 c 22.29416 22.05045 22.63095 24.07114 23.9958 25.82153 c 25.43156 27.6694 27.97073 29.20265 31.21007 29.97813 c 37.69315 31.52913 46.97241 30.06235 55.8573 22.1568 c 65.7348 11.83617 77.77483 9.71794 93.6258 13.9189 c 94.57411 14.17148 l 93.59035 14.13602 l 85.71582 13.85242 78.8605 14.557 72.80283 17.31331 c 66.74516 20.06961 61.4807 24.87766 56.7746 32.83195 c 56.73029 32.8984 l 56.65495 32.88069 l 52.22357 31.91908 49.21469 32.53503 47.34023 33.97966 c 45.46132 35.41986 44.6947 37.70201 44.7789 40.1171 c 44.8631 42.53664 45.79811 45.08467 47.31363 47.02116 c 48.82916 48.96211 50.91191 50.29152 53.30042 50.3048 c 53.38017 50.3048 l 53.40677 50.38014 l 55.15273 55.76868 59.57965 59.234 64.43198 59.94302 c 69.28433 60.65204 74.55765 58.6136 78.02298 52.96362 c 78.07616 52.875 l 78.1692 52.92374 l 84.08064 55.99025 91.14423 53.78786 95.1945 49.3166 c 97.22406 47.07877 98.49144 44.28258 98.5003 41.29585 c 98.50473 38.30467 97.24623 35.12738 94.1886 32.11406 c 94.0911 32.021 l 94.20187 31.94568 l 100.57861 27.57635 107.17691 27.18639 112.99529 28.76396 c 118.80923 30.34152 123.85213 33.87773 127.15349 37.36966 c 135.5465 44.31361 144.2098 44.78333 152.02672 40.40514 c 152.02672 40.40514 152.02672 40.40514 152.02672 40.40514 c 155.49648 37.72417 163.62802 33.59857 173.09784 32.88069 c 173.85118 32.82751 l 173.14659 33.0934 l 167.70488 35.18942 162.54678 37.61781 155.72247 43.95024 c 155.71803 43.95465 l 155.71803 43.95465 l 151.75198 47.14525 147.04144 48.74496 141.85231 48.35944 c 136.66762 47.96947 131.00877 45.60313 125.12392 40.88817 c 120.12978 38.35785 116.2612 38.03879 113.48717 38.93835 c 110.71313 39.83792 109.01591 41.95612 108.35565 44.34018 c 107.69539 46.72426 108.08089 49.3742 109.47234 51.31071 c 110.85938 53.25166 113.2523 54.49245 116.65115 54.0759 c 119.3277 53.45552 121.01604 51.94884 121.56998 50.40228 c 121.84914 49.63124 121.84027 48.84688 121.53452 48.1556 c 121.25536 47.51747 120.69255 46.96799 119.88162 46.54701 c 120.24942 48.12457 120.0766 49.51602 119.29224 50.49536 c 118.47244 51.53229 117.01009 52.10837 114.94508 52.01973 c 114.92735 52.01973 l 114.90964 52.01086 l 112.49011 51.09802 111.14297 49.61794 110.6954 48.01822 c 110.24783 46.4185 110.69098 44.708 111.80766 43.35199 c 114.04108 40.64 118.95103 39.3239 124.76498 42.92215 c 124.76941 42.92215 l 124.76941 42.92215 l 128.58038 45.44803 129.53313 49.58691 128.22145 52.96805 c 126.92747 56.30931 123.41342 58.89722 118.33507 58.50725 c 120.87868 62.92088 119.3144 67.34781 116.21689 69.90915 c 113.11491 72.48376 108.48415 73.1928 104.99225 70.22821 c 103.60522 73.43651 99.19157 75.36417 95.65092 73.61377 c 95.6465 73.61377 l 95.64207 73.60934 l 93.65239 72.31982 93.24028 70.20604 93.03644 68.09673 c 92.82816 65.98296 92.81042 63.86034 91.68486 62.46889 c 91.68486 62.46446 l 91.68044 62.46446 l 88.964 58.8086 85.92409 57.27975 83.14563 57.09366 c 80.36717 56.90753 77.83685 58.06412 76.15294 59.80121 c 74.46901 61.54274 73.63148 63.86034 74.212 66.00069 c 74.75706 68.01251 76.62709 69.86041 80.2165 70.96382 c 77.39372 68.92538 76.29031 66.79834 76.42326 64.9283 c 76.56949 62.93419 78.03627 61.27243 79.99493 60.36842 c 81.94916 59.46443 84.3997 59.30933 86.53119 60.3374 c 88.66267 61.36548 90.46623 63.57674 91.12653 67.36111 c 91.12653 67.36111 l 91.12653 67.36111 l 91.95961 72.89587 88.87538 76.72902 85.11758 78.56358 c 83.23425 79.4809 81.18254 79.9063 79.35681 79.80437 c 77.57097 79.70245 76.00671 79.0865 75.02736 77.92992 c 70.6359 81.62566 66.14249 83.25641 62.08778 83.30959 c 62.08337 83.08801 m 66.10262 83.03484 70.58272 81.42183 74.96535 77.70392 c 75.04953 77.62857 l 75.12044 77.71722 l 76.04216 78.86494 77.58426 79.4809 79.37012 79.58282 c 81.15154 79.68031 83.17223 79.26819 85.0201 78.36418 c 88.71585 76.56062 91.72917 72.83386 90.90495 67.39656 c 90.25797 63.66536 88.50314 61.52943 86.43813 60.53682 c 84.3687 59.54419 81.9846 59.69043 80.08356 60.57228 c 78.18694 61.44968 76.7822 63.0494 76.64482 64.94601 c 76.50745 66.84265 77.63301 69.06276 80.87677 71.20311 c 81.43512 71.5709 l 80.78815 71.40251 l 76.68471 70.3257 74.60197 68.28728 73.9993 66.0583 c 73.39664 63.82932 74.2696 61.43195 75.99341 59.65054 c 77.72165 57.86472 80.30956 56.68155 83.15892 56.87209 c 86.00829 57.06706 89.11023 58.63577 91.85768 62.32709 c 91.85768 62.33153 l 93.04973 63.80716 93.04973 65.9741 93.25357 68.07455 c 93.46185 70.17061 93.85179 72.18243 95.75728 73.41878 c 99.21375 75.12486 103.58307 73.17062 104.85486 70.02437 c 104.91248 69.87813 l 105.03214 69.98006 l 108.4487 72.97565 113.013 72.27992 116.0795 69.74075 c 119.14159 67.19716 120.69698 62.83226 118.06476 58.44963 c 117.95396 58.26352 l 118.17111 58.28127 l 123.2716 58.74655 126.74136 56.18079 128.0176 52.88829 c 129.29384 49.60022 128.38097 45.58096 124.64975 43.10828 c 118.89786 39.54988 114.13414 40.87486 111.9805 43.49379 c 110.90369 44.80106 110.47827 46.4318 110.90811 47.95618 c 111.33353 49.48058 112.60976 50.90305 114.97609 51.79817 c 116.97908 51.87794 118.35722 51.32402 119.12387 50.35797 c 119.89049 49.39195 120.06773 47.9872 119.62016 46.34317 c 119.55814 46.1216 l 119.77527 46.21466 l 120.75903 46.66222 121.41045 47.31363 121.73836 48.06696 c 122.06628 48.81587 122.07071 49.65782 121.77824 50.47763 c 121.1933 52.1128 119.42963 53.66379 116.69547 54.29303 c 116.69102 54.29745 l 116.68219 54.29745 l 113.21684 54.72287 110.72643 53.44221 109.29066 51.44366 c 107.85931 49.44069 107.46938 46.7287 108.14294 44.28258 c 108.82094 41.83647 110.57576 39.6518 113.42068 38.73009 c 116.27007 37.80836 120.19624 38.14072 125.22585 40.69318 c 125.23471 40.6976 l 125.24358 40.70647 l 131.11069 45.40816 136.73409 47.75677 141.87004 48.13786 c 147.006 48.51898 151.6545 46.94583 155.58067 43.78627 c 162.10806 37.72859 167.14209 35.23817 172.33122 33.19533 c 163.24692 34.07272 155.46988 38.02107 152.1508 40.59126 c 152.14194 40.59569 l 152.13751 40.60011 l 144.24968 45.01376 135.45784 44.52629 127.00725 37.53362 c 127.00282 37.52919 l 126.99838 37.52475 l 123.71918 34.05943 118.70732 30.54536 112.93768 28.9811 c 107.19905 27.42569 100.72485 27.79791 94.43231 32.06088 c 97.45007 35.07864 98.72629 38.27809 98.71742 41.29585 c 98.71301 44.34462 97.41463 47.19398 95.35846 49.46283 c 91.26389 53.98283 84.15155 56.20738 78.15591 53.15416 c 74.65071 58.8086 69.31091 60.87804 64.40097 60.16016 c 59.48659 59.44226 55.01091 55.9415 53.22064 50.5175 c 50.78783 50.47319 48.6652 49.1172 47.14081 47.15854 c 45.59427 45.18216 44.64153 42.59424 44.55733 40.12596 c 44.47314 37.6577 45.2619 35.29578 47.20285 33.80241 c 49.13493 32.3179 52.19699 31.7108 56.62393 32.6547 c 61.3389 24.7137 66.62994 19.87907 72.7142 17.1139 c 78.54144 14.45952 85.12201 13.72833 92.58 13.91446 c 77.27408 10.0769 65.62845 12.26598 56.00797 22.31631 c 56.00354 22.32076 l 56.00354 22.32076 l 47.07434 30.27061 37.71973 31.75955 31.16133 30.19084 c 27.88211 29.4065 25.29863 27.85551 23.82298 25.95891 c 22.3429 24.05783 21.97511 21.79341 23.14055 19.64421 c 23.29565 19.35617 l 23.34883 19.67967 l 23.77867 22.52902 24.95741 24.25282 26.41977 25.10808 c 27.87769 25.96333 29.63693 25.95003 31.24994 25.2942 c 34.47154 23.97365 37.08606 20.06961 35.43758 15.33691 c 35.43758 15.33691 35.43758 15.33691 35.43315 15.33691 c 33.93091 11.57027 31.05054 9.21278 27.71815 8.10495 c 24.38133 6.9971 20.59694 7.14778 17.30002 8.4107 c 14.00752 9.67365 11.21133 12.04886 9.8376 15.39009 c 8.4639 18.73578 8.51263 23.05193 10.93658 28.21446 c 10.97647 28.2898 l 10.91 28.34741 l 8.24675 30.59854 7.14778 32.95602 7.0813 35.15398 c 7.01924 37.35194 7.98973 39.39922 9.50526 41.01224 c 11.02077 42.62526 13.07693 43.80843 15.15968 44.26929 c 17.24242 44.73457 19.34286 44.47755 20.97362 43.24121 c 20.97362 43.24121 20.97362 43.24121 20.97362 43.24121 c 24.72699 39.02255 29.85406 38.28253 34.28987 39.33275 c 38.73009 40.38298 42.49675 43.20576 43.54254 46.16148 c 43.54254 46.16148 l 44.34906 48.47023 44.51746 50.34027 44.22498 51.82033 c 43.93251 53.30042 43.17473 54.39053 42.15996 55.11726 c 40.13483 56.57076 37.09048 56.59291 34.57347 55.6047 c 34.055 55.40086 l 34.61334 55.392 l 38.42432 55.32555 40.84827 53.50868 41.46866 51.10689 c 42.09349 48.70065 40.92361 45.66959 37.44499 43.14372 c 32.12292 39.84236 26.566 42.3062 24.32372 46.49826 c 23.20259 48.58986 22.91455 51.11575 23.9116 53.57515 c 24.90424 56.03456 27.18195 58.43636 31.21451 60.27092 c 31.30756 60.31526 l 31.27211 60.40833 l 30.7359 61.90611 31.04167 63.6565 31.93237 65.3936 c 32.82751 67.12624 34.31201 68.84119 36.09343 70.25037 c 39.66068 73.05984 44.4288 74.62856 48.12457 72.7718 c 48.24422 72.70978 l 48.27966 72.84271 l 49.93256 78.9447 55.37872 83.17665 62.08337 83.08801 c 66.55904 56.9607 m 62.203 57.09808 57.6653 54.60323 54.6298 48.08469 c 52.42741 48.20435 50.6992 47.03003 49.56477 45.33725 c 48.41261 43.62231 47.85869 41.38005 47.9872 39.37708 c 48.12013 37.37408 48.94437 35.5971 50.57954 34.87036 c 52.19699 34.15248 54.57663 34.48927 57.77608 36.54985 c 60.69635 28.7994 65.86333 23.57483 72.22675 20.35767 c 78.62564 17.12277 86.221 15.90413 93.95815 16.14787 c 109.4236 16.63974 125.44298 22.96773 133.52136 30.77136 c 133.52579 30.77136 l 138.35155 35.31795 146.66919 35.63701 153.44919 31.69307 c 156.55557 29.23811 161.19965 28.08151 165.97665 28.1347 c 170.75809 28.18788 175.6769 29.45525 179.32391 31.87033 c 179.86455 32.22928 l 179.23529 32.06975 l 173.45236 30.59854 166.68565 30.73148 157.30005 35.185 c 157.29561 35.185 157.29561 35.185 157.29561 35.185 c 152.65154 38.1939 148.6766 40.03734 145.04733 40.78181 c 141.4136 41.52184 138.12553 41.15848 134.87733 39.75816 c 134.87292 39.75374 l 134.8685 39.75374 l 128.50061 36.2574 126.15198 32.16724 119.72652 28.4759 c 107.94797 23.63245 98.03943 24.84662 92.63318 30.48776 c 92.54454 30.58081 l 92.46478 30.4789 l 91.72917 29.504 90.37318 28.99437 88.78233 28.91905 c 87.19145 28.8437 85.37903 29.20265 83.75716 29.9427 c 82.13528 30.6783 80.70837 31.79057 79.87529 33.21303 c 79.04219 34.63107 78.79404 36.35931 79.54292 38.36229 c 79.54735 38.36671 l 79.54735 38.37114 l 80.98756 42.93544 84.13824 44.30031 86.6597 43.81729 c 87.9182 43.57356 89.01718 42.86897 89.6686 41.85863 c 90.27126 40.92361 90.46623 39.7227 90.06299 38.38002 c 89.39384 40.30766 88.06886 41.50856 86.6021 41.56172 c 85.04669 41.62376 83.41151 40.42287 82.36127 37.6577 c 82.36127 37.6577 l 82.0688 36.86449 82.34357 35.87186 82.98166 34.95013 c 83.61536 34.02841 84.6257 33.17316 85.84433 32.6547 c 88.27715 31.62662 91.56078 31.98999 94.31267 35.95163 c 95.65092 37.38295 96.04976 39.38593 95.69525 41.4731 c 95.34517 43.56027 94.24619 45.73607 92.58885 47.53963 c 89.27864 51.13347 83.71284 53.24724 77.35384 50.19844 c 75.0318 54.08476 70.89735 56.82333 66.55904 56.9607 c 66.55019 56.73914 m 70.83087 56.60176 74.94762 53.8809 77.22533 50.0079 c 77.27408 49.92372 l 77.36713 49.96802 l 83.67738 53.03453 89.15456 50.94292 92.42491 47.38896 c 94.06007 45.61641 95.13689 43.47165 95.47812 41.43765 c 95.82376 39.39922 95.43379 37.47601 94.15312 36.1023 c 94.1487 36.09787 l 94.14426 36.08899 l 91.42786 32.18053 88.286 31.86147 85.92853 32.85854 c 84.74977 33.35927 83.77487 34.19237 83.16336 35.07864 c 82.5474 35.96048 82.31253 36.89107 82.56955 37.57793 c 83.60205 40.28992 85.1619 41.39777 86.59323 41.34459 c 88.02455 41.28699 89.37613 40.06834 89.98323 38.00334 c 90.08072 37.67984 l 90.1959 37.99448 l 90.75429 39.52773 90.54158 40.91475 89.8547 41.97827 c 89.16785 43.0418 88.01569 43.78185 86.69958 44.03442 c 84.07178 44.53516 80.80142 43.08168 79.33908 38.44205 c 78.56802 36.38145 78.82062 34.57347 79.68474 33.09782 c 80.54884 31.62662 82.0112 30.49219 83.6641 29.73885 c 85.32141 28.98996 87.16045 28.62215 88.79117 28.69748 c 90.37318 28.77281 91.75575 29.278 92.55783 30.26619 c 98.06158 24.6029 108.03659 23.4286 119.81958 28.27649 c 119.824 28.28093 l 119.83287 28.28093 l 126.29823 31.99442 128.64685 36.08456 134.97041 39.55432 c 138.18315 40.94133 141.4136 41.30028 145.00302 40.56467 c 148.59683 39.82907 152.55405 37.9989 157.18925 34.99445 c 157.1937 34.99002 l 157.20256 34.98558 l 166.28685 30.6783 172.94275 30.43457 178.63261 31.74625 c 175.09195 29.58374 170.48778 28.40501 165.97665 28.35628 c 161.23065 28.30309 156.62204 29.45967 153.57327 31.87477 c 153.5644 31.88364 l 153.55998 31.88364 l 146.70909 35.86742 138.28506 35.56609 133.37068 30.9309 c 133.37068 30.9309 l 133.37068 30.9309 l 125.34993 23.18488 109.36157 16.85687 93.94928 16.36943 c 86.24315 16.1257 78.67882 17.3399 72.32423 20.55264 c 65.9741 23.76538 60.82486 28.97667 57.93117 36.74483 c 57.88686 36.87335 l 57.76723 36.798 l 54.5412 34.68425 52.2103 34.38736 50.6726 35.06978 c 49.1305 35.75664 48.33728 37.43613 48.20877 39.39035 c 48.08026 41.34015 48.62975 43.54697 49.74646 45.21317 c 50.86316 46.88379 52.53821 48.01822 54.69185 47.87198 c 54.76718 47.86755 l 54.80264 47.93402 l 57.81154 54.43927 62.26949 56.87653 66.55019 56.73914 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 88.211 57.257 cm 0 G 0 g q 1 0 0 1 -71.895 -230.757 cm q 0 G 0 g 0.3985 w q 0.9441 0.89151 0.74028 RG 0.9441 0.89151 0.74028 rg 4.0 M 154.83167 58.15076 m 151.23236 58.06735 147.81302 56.70224 145.87729 54.16078 c 138.46799 59.93724 129.56189 58.69942 124.14539 54.38025 c 121.42395 52.21628 119.5804 49.27098 119.24681 46.04478 c 118.9176 42.84053 120.09396 39.36852 123.35966 36.13791 c 121.7707 32.67467 121.87167 29.71184 123.02608 27.38107 c 124.18927 25.03273 126.39714 23.32086 128.95616 22.34642 c 131.51518 21.36757 134.42973 21.11739 137.01949 21.70119 c 139.60924 22.28058 141.87856 23.69835 143.12076 26.05107 c 143.12514 26.05545 l 143.12514 26.05545 l 145.0082 30.02786 144.74922 33.52184 143.37534 35.82625 c 141.99707 38.1307 139.49948 39.2456 136.96243 38.44673 c 136.75172 38.3809 l 136.9317 38.2536 l 139.49072 36.432 140.5398 34.18462 140.1974 32.42007 c 140.02621 31.53783 139.51266 30.76968 138.64795 30.22101 c 137.78764 29.67232 136.57176 29.34312 135.01353 29.3563 c 132.69594 29.47041 131.05869 30.47559 130.04474 31.97676 c 129.03517 33.47794 128.65768 35.48828 128.90787 37.59958 c 129.40826 41.83096 132.41063 46.47055 137.78325 48.30093 c 137.78325 48.30093 137.78325 48.30093 137.78325 48.30093 c 152.0093 51.97046 162.05223 37.1387 158.0052 27.45128 c 158.0052 27.4469 l 158.0052 27.44252 l 155.8588 21.31929 150.60907 17.7902 143.85378 16.90796 c 137.09412 16.02568 128.83765 17.80339 120.71725 22.3113 c 120.71286 22.31569 l 107.74658 30.15077 98.2567 32.9117 90.69376 32.88098 c 83.13521 32.84586 77.51239 30.01471 72.29779 26.7007 c 67.08757 23.3867 62.27678 19.59427 56.32477 17.59709 c 50.37274 15.6043 43.27069 15.40237 33.4472 19.2914 c 33.35065 19.09827 l 33.35503 19.09387 33.3594 19.09387 33.3682 19.08948 c 47.56352 10.20972 56.93051 12.51855 65.64346 16.31538 c 74.36081 20.11221 82.42413 25.37071 94.15698 22.45177 c 94.15698 22.45177 l 94.16139 22.45177 l 102.79973 20.41948 107.87387 14.82298 115.1954 10.04292 c 122.51253 5.26288 132.0814 1.32559 149.66534 2.65556 c 149.66534 2.65556 l 152.22437 2.69507 155.692 4.08212 159.19034 6.35583 c 162.68869 8.62955 166.22217 11.7943 168.87775 15.40237 c 171.53773 19.01047 173.3242 23.0575 173.31543 27.10452 c 173.31105 31.13399 171.51578 35.1503 167.0737 38.68376 c 169.38254 45.4171 168.34224 50.33762 165.70422 53.54187 c 163.0618 56.75493 158.83481 58.23854 154.83167 58.15076 c 154.83606 57.93127 m 158.78214 58.01907 162.94328 56.55301 165.53741 53.40143 c 168.12717 50.24983 169.16743 45.40831 166.84546 38.68814 c 166.81914 38.61354 l 166.88057 38.56525 l 171.33142 35.05373 173.09157 31.0901 173.10034 27.10452 c 173.10474 23.12334 171.34021 19.11143 168.70216 15.52968 c 166.06415 11.94792 162.54825 8.80074 159.06744 6.54019 c 155.59103 4.27965 152.14096 2.91016 149.65657 2.87503 c 149.65218 2.87503 l 149.64778 2.87503 l 132.10336 1.54944 122.60909 5.46478 115.3139 10.2273 c 108.01872 14.98538 102.91824 20.6126 94.20967 22.66245 c 94.20967 22.66245 l 82.3934 25.60335 74.25108 20.30533 65.55566 16.51729 c 57.11046 12.8346 48.11218 10.64429 34.63235 18.63737 c 43.82814 15.24876 50.65805 15.47261 56.39499 17.39078 c 62.39091 19.40112 67.21487 23.21114 72.4163 26.51634 c 77.61774 29.82156 83.1879 32.63078 90.69815 32.6615 c 98.20401 32.69662 107.6544 29.94887 120.60313 22.12694 c 120.60751 22.12254 l 120.60751 22.12254 l 128.75864 17.5927 137.06339 15.80182 143.88013 16.69287 c 150.69685 17.58392 156.03876 21.17006 158.21152 27.37228 c 162.32877 37.25722 152.11024 52.22945 137.72179 48.51163 c 137.7174 48.51163 l 137.71301 48.51163 l 132.25699 46.65051 129.19757 41.9407 128.6884 37.62592 c 128.43384 35.47072 128.8157 33.40771 129.86476 31.85385 c 130.91383 30.29562 132.6301 29.25095 135.00475 29.13683 c 135.00475 29.13683 l 135.00914 29.13683 l 136.6025 29.12366 137.85785 29.45724 138.76646 30.03664 c 139.67508 30.61604 140.23253 31.43686 140.41249 32.37619 c 140.76804 34.20218 139.69702 36.44078 137.24774 38.26677 c 139.60924 38.90762 141.8961 37.88051 143.18658 35.71652 c 144.51659 33.48232 144.78433 30.07176 142.92763 26.15204 c 141.72052 23.86514 139.51266 22.48248 136.9712 21.91187 c 134.42973 21.34125 131.55469 21.58705 129.03517 22.54832 c 126.51564 23.50961 124.35606 25.19075 123.22362 27.47763 c 122.09114 29.7645 121.9814 32.6659 123.58353 36.11157 c 123.61426 36.1818 l 123.56158 36.23886 l 120.2871 39.44751 119.13707 42.87125 119.46628 46.02284 c 119.79109 49.17882 121.59952 52.07582 124.28145 54.20908 c 129.64091 58.48434 138.47678 59.71777 145.82462 53.93694 c 145.91241 53.8667 l 145.97826 53.95447 l 147.85252 56.48277 151.24992 57.85228 154.83606 57.93127 c 51.28572 43.21362 m 48.30972 43.29703 45.29858 42.4016 43.05122 40.56682 c 40.80385 38.73206 39.32901 35.95355 39.42119 32.30595 c 39.42119 32.30595 l 39.42119 32.30156 l 39.64505 29.1061 40.8653 26.96407 42.564 25.9589 c 44.26707 24.95811 46.43544 25.10735 48.49847 26.44173 c 48.49847 26.44173 l 50.12254 27.46884 50.60098 29.09291 49.98647 30.26929 c 49.37634 31.44125 47.69958 32.12599 45.15373 31.35786 c 45.16252 31.35786 l 44.70601 31.27446 44.36803 31.3359 44.13539 31.49393 c 43.90715 31.65195 43.77545 31.91531 43.74913 32.27086 c 43.69646 32.98631 44.10028 34.06612 45.0484 35.20297 c 45.05278 35.20737 l 45.05716 35.21175 l 48.65208 40.56242 56.84271 37.95074 57.27727 33.24529 c 57.56258 30.04543 56.52666 26.97284 54.411 24.85716 c 52.29968 22.74586 49.10858 21.58705 45.05716 22.2279 c 42.17334 22.94337 40.13666 23.75542 38.72327 24.77814 c 37.31427 25.80525 36.52417 27.03429 36.12035 28.61009 c 36.06769 28.82079 l 35.9316 28.65399 l 35.04495 27.58296 34.16707 27.02553 33.18384 26.83678 c 32.205 26.65242 31.10767 26.83678 29.8084 27.28448 c 29.804 27.28448 l 29.7996 27.28448 l 26.02913 28.28088 23.0136 27.28009 20.03758 25.84915 c 17.05719 24.41821 14.1075 22.5615 10.42918 21.80212 c 6.26804 21.01642 2.94087 22.99167 0.17995 25.27853 c -0.10533 25.51556 l 0.00436 25.16003 l 1.16318 21.45976 4.04262 19.42308 7.3654 18.7515 c 10.68817 18.0843 14.45866 18.76466 17.45662 20.48091 c 21.49927 22.77219 24.65085 23.86076 28.20189 23.68958 c 31.7485 23.51839 35.70775 22.07866 41.35252 19.27823 c 41.35692 19.27383 l 41.36569 19.26944 l 48.37117 16.9255 54.7314 18.60666 58.65114 22.27618 c 62.56648 25.94572 64.04132 31.61244 61.28477 37.18259 c 61.2804 37.18259 l 59.3754 41.12866 55.35469 43.09511 51.28572 43.21362 c 51.27695 42.99416 m 55.28447 42.87564 59.22176 40.9531 61.08727 37.08603 c 61.08727 37.08603 l 61.08727 37.08603 l 63.80429 31.59488 62.35579 26.04668 58.5019 22.4342 c 54.64363 18.82173 48.37556 17.15375 41.4403 19.47575 c 41.43591 19.47575 41.43591 19.47575 41.43591 19.48015 c 35.79115 22.28058 31.80557 23.73347 28.21065 23.90904 c 24.61134 24.08461 21.40709 22.9741 17.35127 20.67406 c 14.3972 18.98413 10.67061 18.30818 7.40929 18.96658 c 4.27087 19.59866 1.6065 21.48608 0.39064 24.84837 c 3.11206 22.66245 6.39095 20.81891 10.4731 21.59143 c 10.4731 21.59143 l 10.4731 21.59143 l 14.19969 22.35518 17.16692 24.22946 20.12976 25.65164 c 23.09262 27.0738 26.03792 28.05264 29.74695 27.0738 c 31.05937 26.6217 32.19183 26.42416 33.22775 26.6217 c 34.21535 26.81482 35.1064 27.39423 35.97551 28.3994 c 36.40126 26.8631 37.20015 25.61652 38.59598 24.60257 c 40.04446 23.5535 42.1075 22.73268 45.00888 22.01282 c 45.01328 22.00842 l 45.01767 22.00842 l 49.13052 21.3588 52.40063 22.53955 54.5646 24.70352 c 56.72859 26.8675 57.78204 30.00592 57.49673 33.26285 c 57.49673 33.26285 l 57.03586 38.21408 48.57747 40.83896 44.87721 35.33466 c 43.91153 34.17146 43.47261 33.06532 43.52966 32.25328 c 43.5604 31.84946 43.7228 31.51587 44.0125 31.31395 c 44.30219 31.11206 44.7104 31.0506 45.2064 31.14717 c 45.2108 31.14717 l 45.2152 31.14717 l 47.70398 31.89775 49.24026 31.22618 49.79335 30.16394 c 50.34639 29.1061 49.93379 27.60931 48.38434 26.62607 c 48.37994 26.62607 l 46.3696 25.32243 44.30219 25.19075 42.67812 26.14764 c 41.05403 27.10452 39.86012 29.17194 39.64066 32.31473 c 39.64066 32.31473 39.64066 32.31914 39.64066 32.31914 c 39.54848 35.90088 40.99258 38.60037 43.19167 40.39563 c 45.39078 42.19528 48.34921 43.07755 51.27695 42.99416 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 17.96 137.389 cm 0 G 0 g q 1 0 0 1 -72 -222.38 cm q 0 G 0 g 0.3985 w q 0.94681 0.89674 0.7528 RG 0.94681 0.89674 0.7528 rg 72.39305 40.82062 m 69.72491 40.79416 67.2661 38.75157 67.00627 35.34724 c 62.63478 37.02414 59.9041 34.48834 60.55368 30.65335 c 62.28111 26.00278 66.97499 30.88913 69.82596 27.34044 c 71.32 25.01396 68.51476 22.29291 66.63335 24.60977 c 65.33177 26.42381 61.45349 27.84808 58.64581 27.53052 c 60.01236 31.75766 57.85909 36.41063 52.39774 35.66481 c 44.2033 33.92776 50.64145 21.92722 55.76117 30.46329 c 56.57675 29.39989 56.2231 27.21776 54.67369 25.96188 c 48.03105 20.14926 38.68661 32.9606 30.28766 28.9957 c 43.51039 29.24832 43.89775 19.1003 53.17003 21.86467 c 51.36081 11.3317 66.64056 12.75598 62.99084 20.64487 c 60.24332 15.72484 55.72266 20.14445 58.86957 22.6153 c 62.42065 25.0717 67.882 21.99217 66.82343 15.6238 c 65.56273 8.37486 55.8935 8.49516 45.1873 19.58388 c 27.88417 33.80505 15.12097 29.20982 0.06013 13.9493 c 13.47775 23.92409 26.5032 33.00632 43.23132 16.27579 c 54.43793 2.68976 65.9934 0.06013 74.8735 6.86157 c 81.83372 12.53465 82.04546 23.98424 90.46846 23.04114 c 93.52873 22.76445 93.5143 17.39212 90.26395 17.19484 c 87.259 17.07455 88.1564 20.5318 90.2447 20.4476 c 89.19574 21.50137 87.64154 21.68904 86.71046 19.7547 c 83.98218 13.2588 96.7093 10.6821 94.81107 21.7997 c 97.51286 23.93613 95.00354 29.57312 90.39627 27.79758 c 90.74994 30.67982 87.0545 32.6815 81.39345 26.08458 c 79.27386 23.72922 71.74586 24.67473 71.4355 30.06873 c 71.09627 35.5734 78.02763 35.76826 78.759 32.82347 c 79.59386 29.78241 76.8367 28.0911 75.23439 29.53943 c 78.60985 30.29727 77.16872 32.85474 74.59683 32.03914 c 72.49167 31.27649 72.72023 27.43187 77.53682 26.8304 c 84.57162 26.14954 84.82184 37.35135 78.0589 36.91586 c 76.6683 39.64174 74.46692 40.83986 72.39305 40.82062 c 73.51178 23.29376 m 74.63531 23.31783 75.97781 23.00023 77.46463 22.17743 c 80.41667 20.39946 78.44864 13.28046 72.90068 12.11601 c 76.94017 15.04158 78.15755 18.6937 75.02267 21.17418 c 75.70113 18.46515 73.10518 15.80664 70.4948 19.15082 c 69.20284 20.93117 70.63914 23.22879 73.51178 23.29376 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g q 1 0 0 1 23.574 -47.789 cm q 0 G 0 g 0.3985 w q q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 32.479 -91.462 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.50072 .86557 -.86557 -.50072 53.187 -81.173 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86546 .50093 -.50093 -.86546 65.793 -61.924 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.99998 .00023 -.00023 -.99998 67.25 -38.893 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86577 -.50041 .50041 -.86577 56.969 -18.189 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.50124 -.86528 .86528 -.50124 37.724 -5.575 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.0006 -.99998 .99998 -.0006 14.694 -4.11 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .50012 -.86592 .86592 .50012 -6.015 -14.385 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .86511 -.5015 .5015 .86511 -18.634 -33.627 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .99998 -.00089 .00089 .99998 -20.108 -56.656 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .8661 .49982 -.49982 .8661 -9.841 -77.366 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .50182 .86494 -.86494 .50182 9.396 -89.992 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .00124 .99998 -.99998 .00124 32.426 -91.474 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -35.433 0 cm 0 G 0 g q 1 0 0 1 23.486 -83.31 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 35.52145 70.95435 m 15.95187 70.95435 0.08856 55.09103 0.08856 35.52145 c 0.08856 15.95187 15.95187 0.08856 35.52145 0.08856 c 55.09103 0.08856 70.95435 15.95187 70.95435 35.52145 c 70.95435 55.09103 55.09103 70.95435 35.52145 70.95435 c 37.64743 66.63155 m 49.96037 65.79176 60.62567 57.75914 64.8351 46.15486 c 53.94655 46.15132 l 53.94655 41.89938 l 66.04335 41.89938 l 66.92207 37.6935 66.92207 33.34941 66.04335 29.14354 c 53.94655 29.14354 l 53.94655 24.89159 l 64.8351 24.89159 l 60.62567 13.28731 49.9639 5.25468 37.64743 4.41138 c 37.64743 16.3877 l 47.69266 16.3877 l 45.74739 15.14755 43.61787 14.21211 41.38914 13.61685 c 42.4911 9.51016 l 48.8336 11.20741 54.33632 15.1688 57.96465 20.63965 c 13.07826 20.63965 l 16.70659 15.1688 22.20932 11.20741 28.5518 9.51016 c 29.65376 13.61685 l 27.42503 14.21211 25.29552 15.1511 23.35027 16.3877 c 33.3955 16.3877 l 33.3955 4.41138 l 21.07901 5.25113 10.41725 13.28377 6.20782 24.88805 c 17.09634 24.89159 l 17.09634 29.14354 l 4.99956 29.14354 l 4.12083 33.34941 4.12083 37.6935 4.99956 41.89938 c 17.09634 41.89938 l 17.09634 46.15132 l 6.20782 46.15132 l 10.41371 57.75558 21.07901 65.78822 33.3955 66.62799 c 33.3955 54.65521 l 23.35027 54.65521 l 25.29552 55.89183 27.42503 56.8308 29.65022 57.42607 c 28.5518 61.53273 l 22.20932 59.83197 16.70659 55.8741 13.07826 50.40327 c 57.96465 50.40327 l 54.33632 55.8741 48.8336 59.8355 42.4911 61.53273 c 41.38914 57.42607 l 43.61787 56.8308 45.74384 55.89183 47.6891 54.65521 c 37.64743 54.65521 l 37.64743 66.63155 l 21.3483 46.15132 m 21.3483 41.89938 l 49.69461 41.89938 l 49.69461 46.15132 l 21.3483 46.15132 l 8.94678 37.64743 m 8.94678 33.3955 l 62.09612 33.3955 l 62.09612 37.64743 l 8.94678 37.64743 l 21.3483 29.14354 m 21.3483 24.89159 l 49.69461 24.89159 l 49.69461 29.14354 l 21.3483 29.14354 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F1 24.795 Tf 130.694 11.127 Td[<352d2ff7283f3d2c>]TJ /F2 20.6625 Tf -18.039 -24.906 Td[<00220032001c004b00320060>]TJ /F1 24.795 Tf 85.667 0 Td[<3ed93758>]TJ ET BT /F3 10.9091 Tf 109.058 -32.494 Td[<0054003b003700510060004d001c004b0032004d00690040003f001c004d>]TJ /F1 13.0909 Tf 90.087 0 Td[<285b2fc628412e89>]TJ ET 0 G 0 g BT /F4 10.9091 Tf 163.92 -71.838 Td[<2f222ef73e88>]TJ ET BT /F5 10.9091 Tf 135.747 -116.162 Td[<006b00790052004e>]TJ /F4 10.9091 Tf 25.451 0 Td[<3170>]TJ /F5 10.9091 Tf 14.542 0 Td[<0033>]TJ /F4 10.9091 Tf 9.087 0 Td[<3d28>]TJ /F5 10.9091 Tf 14.542 0 Td[<00520052>]TJ /F4 10.9091 Tf 14.542 0 Td[<3453>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -21.073 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+22 0 obj
+<</Length 250236>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 65.933 98.752 cm 0 G 0 g q 1 0 0 1 9.11 -219.653 cm q 0 G 0 g 0.3985 w q 0.952 0.90681 0.77692 RG 0.952 0.90681 0.77692 rg -28.0584 37.60146 m -25.00822 37.64153 -22.52483 35.71288 -21.77179 32.93307 c -18.37915 34.6374 -13.0859 30.05713 -14.08727 27.28534 c -6.75725 23.95277 -12.09453 16.44049 -16.95119 19.45863 c -20.12152 21.75577 -19.12216 25.02223 -15.6434 25.08432 c -17.89449 25.96754 -21.08286 25.02826 -19.63286 20.87857 c -18.70558 18.26299 -12.87561 15.7836 -9.509 19.5828 c -6.5089 21.86191 -0.05005 16.8711 -4.8987 12.77347 c -0.49666 3.39864 -13.32222 0.05005 -16.06198 6.91545 c -17.57004 11.23938 -11.28743 14.09528 -10.50235 8.90216 c -8.43153 12.7234 -17.22757 17.21555 -25.2766 10.05174 c -29.73068 5.39738 -35.1461 4.44206 -42.2999 6.33865 c -35.17213 6.0843 -29.87688 7.61041 -25.61505 14.81227 c -17.56804 13.06387 -19.69894 22.75916 -24.08897 22.78517 c -25.67914 27.6899 -32.156 29.09982 -35.30432 23.9628 c -40.69571 26.75862 -48.16191 19.95331 -42.60231 14.4778 c -48.34216 10.54843 -54.45854 13.78084 -57.43262 16.92516 c -61.23782 20.07547 -65.18321 20.29176 -68.73209 18.30504 c -70.28621 17.1014 -73.96324 15.23283 -78.23509 14.9104 c -75.77171 15.8577 -73.43253 16.9612 -70.34428 19.82713 c -66.7774 22.69707 -61.8847 22.69707 -56.57143 18.43521 c -47.51102 13.84293 -46.51767 25.25256 -52.72818 24.48952 c -55.17552 23.92474 -55.85246 21.72372 -54.11006 20.93265 c -54.51862 22.4387 -53.79562 23.53821 -51.95111 23.4601 c -47.61517 21.82587 -51.13399 16.20616 -56.36115 19.4406 c -59.7698 21.69969 -58.04945 26.81468 -53.4011 26.3901 c -55.80438 30.3936 -50.56322 34.40709 -47.43492 31.66533 c -46.84813 33.11932 -44.84338 34.01254 -43.2512 33.22546 c -41.49078 32.08191 -42.5242 29.49635 -41.47476 28.20059 c -36.536 21.5575 -29.14789 30.28345 -36.52399 32.22209 c -30.6239 28.33078 -39.95268 23.65637 -41.1343 30.45168 c -41.88333 35.41046 -35.62276 37.28503 -33.91241 35.15611 c -31.92369 36.84242 -29.8889 37.57542 -28.0584 37.60146 c -30.07916 25.69316 m -28.12448 25.75525 -26.08769 24.63771 -24.72183 21.68567 c -20.74838 21.95203 -20.26773 12.75343 -26.13577 16.5887 c -31.38095 2.5034 -53.03459 6.91545 -60.31056 13.94307 c -62.51157 16.01791 -66.29474 16.1581 -69.37497 14.36766 c -72.15877 12.16264 -77.74242 12.27478 -81.0169 14.44577 c -78.39331 13.77885 -75.3191 13.84094 -71.06728 15.8577 c -66.86952 18.57541 -63.89746 19.18225 -60.97746 17.92252 c -58.10753 16.34837 -57.04608 14.49783 -54.1321 12.82553 c -48.79478 10.62852 -44.29062 11.1753 -41.82925 13.7448 c -40.44736 11.9143 -34.52927 13.68271 -35.90314 17.35574 c -37.21494 21.51944 -41.70908 19.90323 -40.71573 17.18953 c -40.15897 19.0861 -38.21028 19.47664 -37.26901 17.00127 c -36.77234 15.66544 -40.1169 12.71939 -42.58829 16.28227 c -44.95753 18.81573 -40.68568 25.41878 -34.94382 22.62695 c -33.9064 24.38937 -32.03384 25.63107 -30.07916 25.69316 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.821 179.42 cm 0 G 0 g q 1 0 0 1 106.377 -240.2 cm q 0 G 0 g 0.3985 w q 0.94695 0.897 0.75342 RG 0.94695 0.897 0.75342 rg -134.13857 75.74884 m -129.17693 75.6998 -124.60756 71.91057 -124.06815 65.63829 c -120.05602 67.14061 -116.76163 66.7483 -114.62183 65.06322 c -112.45975 63.36029 -111.48346 60.36012 -112.0942 56.78041 c -112.0942 56.7715 l -112.09865 56.75813 l -112.90555 54.58267 -114.07796 53.49939 -115.45546 53.0224 c -116.83742 52.5454 -118.40213 52.67021 -120.02483 52.853 c -121.64305 53.03577 -123.31921 53.27649 -124.90623 53.07144 c -126.49326 52.86191 -127.99112 52.21552 -129.29282 50.59729 c -130.64357 48.48424 -130.04622 46.21071 -128.69547 44.98477 c -128.02231 44.36958 -127.16194 44.02187 -126.25699 44.08429 c -125.35648 44.14668 -124.4114 44.61478 -123.55548 45.6713 c -122.3251 47.37868 -119.9089 48.881 -117.14946 49.89294 c -114.43907 50.8826 -111.39876 51.3908 -108.80426 51.12779 c -110.02127 55.02846 -109.66017 59.10744 -107.71652 62.06305 c -105.74612 65.05876 -102.16643 66.89096 -97.07549 66.19553 c -97.07104 66.19553 l -97.06657 66.19107 l -93.2417 65.37973 -91.1019 63.36029 -90.21922 61.03328 c -89.33655 58.7107 -89.70656 56.08945 -90.8567 54.07 c -92.00684 52.05057 -93.95049 50.62404 -96.2151 50.7132 c -98.44852 50.80681 -100.95834 52.39383 -103.3121 56.24101 c -103.96742 55.28702 -104.16357 53.8917 -103.84705 52.43396 c -103.52164 50.90933 -102.65234 49.33571 -101.23918 48.19002 c -101.23473 48.19002 l -101.23473 48.19002 l -98.18106 45.51973 -94.83762 44.98924 -91.26236 45.58214 c -87.68712 46.17505 -83.88452 47.8958 -79.9794 49.73244 c -76.07425 51.56467 -72.06215 53.51277 -68.0411 54.54254 c -64.02452 55.56786 -59.99457 55.67485 -56.07607 53.82483 c -55.60353 53.60638 l -56.12065 53.6153 l -68.34424 53.85158 -74.61206 49.28667 -80.0017 45.28346 c -82.69426 43.28632 -85.16841 41.42291 -88.05713 40.37975 c -90.90575 39.34998 -94.16447 39.14046 -98.39948 40.37083 c -97.61044 35.55629 -98.74274 32.06573 -100.82013 29.79666 c -102.9198 27.50084 -105.96457 26.44878 -108.89787 26.47107 c -111.83119 26.49782 -114.66641 27.59445 -116.34259 29.62282 c -118.01875 31.65562 -118.5225 34.61568 -116.81958 38.29791 c -116.72597 38.49852 l -116.62344 38.30682 l -115.35739 36.04666 -113.89964 34.86977 -112.52216 34.4418 c -111.14912 34.0094 -109.84296 34.31255 -108.87112 35.03471 c -107.89485 35.75243 -107.2529 36.8892 -107.20833 38.12404 c -107.16374 39.35443 -107.71207 40.68736 -109.14305 41.81075 c -109.1475 41.8152 l -112.39734 44.06198 -116.51643 43.77669 -119.58795 41.4675 c -122.65945 39.16275 -124.68333 34.8341 -123.71152 28.9675 c -123.12752 25.63298 -121.58955 23.15884 -119.29819 21.62978 c -117.00682 20.10518 -113.95761 19.51672 -110.35115 19.9848 c -103.13826 20.92543 -93.71422 26.10106 -83.80875 36.36317 c -83.80429 36.36765 l -83.79982 36.3721 l -67.75133 49.56305 -53.78915 54.0388 -40.3441 51.66273 c -26.89903 49.28667 -13.99336 40.07216 -0.03119 25.92722 c -0.1783 25.7578 l -12.60696 34.99905 -24.84839 43.81235 -37.82983 46.45143 c -50.81126 49.08606 -64.5461 45.56432 -80.02397 30.08197 c -80.02397 30.08197 -80.02397 30.07751 -80.02844 30.07751 c -90.41537 17.4839 -100.97617 9.95895 -111.00647 7.16385 c -121.04123 4.36427 -130.55441 6.30794 -138.806 12.6248 c -138.806 12.6248 l -138.806 12.62924 l -145.28336 17.90742 -148.60895 25.85588 -152.26445 32.24406 c -154.0922 35.44038 -156.00018 38.24442 -158.41637 40.13457 c -160.8281 42.02919 -163.74358 43.01439 -167.62196 42.58197 c -167.62196 42.58197 l -167.62196 42.58197 l -169.00836 42.45714 -170.03815 41.7617 -170.72021 40.77206 c -171.40672 39.7824 -171.74107 38.50298 -171.71878 37.22356 c -171.69203 35.94412 -171.30865 34.67363 -170.56418 33.70181 c -169.81972 32.73442 -168.72305 32.0613 -167.25195 31.97212 c -165.87892 31.91864 -164.97395 32.27081 -164.43456 32.81023 c -163.89514 33.34962 -163.7079 34.08519 -163.80597 34.8341 c -164.00212 36.33643 -165.33951 37.85211 -167.21628 37.77634 c -167.49713 37.76297 l -167.29654 37.96803 l -166.30687 38.95767 -165.07202 39.55504 -163.85057 39.43022 c -162.62909 39.30986 -161.44328 38.4673 -160.56953 36.65294 c -160.56953 36.64848 l -160.56508 36.64403 l -159.29012 33.60817 -159.82062 31.0003 -161.29172 29.15027 c -162.75838 27.30469 -165.15228 26.21251 -167.5952 26.1501 c -170.03815 26.08768 -172.53903 27.05951 -174.19737 29.35088 c -175.85126 31.63333 -176.66261 35.21748 -175.7933 40.35301 c -178.29866 42.38136 -178.37889 46.0101 -176.76514 48.72496 c -175.15584 51.42647 -171.8436 53.21855 -167.59966 51.65382 c -167.72449 52.94661 -167.43472 54.1547 -166.73036 55.05075 c -165.99927 55.98691 -164.84021 56.58426 -163.34236 56.61548 c -160.34218 56.6868 -155.9868 54.52917 -150.73093 48.404 c -148.81848 46.27757 -144.38286 45.61334 -140.36627 46.74565 c -136.34525 47.87796 -132.76108 50.7756 -132.47578 55.71944 c -132.47578 55.72389 l -131.85165 65.82997 -144.51215 66.08855 -145.82722 60.79254 c -145.82722 60.79254 l -145.82722 60.78809 l -146.59398 58.00633 -145.71577 55.86655 -144.29369 54.74315 c -142.92957 53.66432 -141.084 53.5529 -139.66193 54.70749 c -141.084 55.06413 -142.0692 55.5857 -142.61307 56.18752 c -143.18814 56.83391 -143.3085 57.56055 -143.04994 58.18465 c -142.53728 59.43288 -140.61147 60.23976 -138.19083 59.47299 c -138.18636 59.47299 l -138.18636 59.46854 l -136.18028 58.7419 -135.28426 56.53523 -136.03317 54.39098 c -136.78212 52.24672 -139.1671 50.16489 -143.65622 49.60318 c -143.66068 49.60318 l -143.66068 49.60318 l -146.95062 49.28667 -149.46042 50.36101 -151.16335 52.13974 c -152.86627 53.91843 -153.7623 56.39258 -153.85146 58.88455 c -153.94508 61.37207 -153.22736 63.87741 -151.69383 65.71407 c -150.16922 67.53735 -147.82881 68.6875 -144.70383 68.50919 c -142.10931 73.54662 -138.0125 75.7845 -134.13857 75.74884 c -134.13857 75.52592 m -137.94116 75.56161 -141.98006 73.37277 -144.53888 68.35316 c -144.57454 68.28629 l -144.64587 68.29074 l -147.74858 68.49135 -150.02657 67.3635 -151.51997 65.57588 c -153.01784 63.78825 -153.71773 61.33195 -153.62857 58.89346 c -153.54387 56.45053 -152.6612 54.02542 -151.00285 52.2913 c -149.34451 50.56163 -146.91049 49.51402 -143.68297 49.82608 c -139.2518 50.37885 -136.96042 52.41612 -136.2427 54.46675 c -135.52498 56.51294 -136.36752 58.5725 -138.25769 59.259 c -140.60254 60.0035 -142.39462 59.19661 -142.84486 58.09996 c -143.06778 57.55164 -142.9786 56.93199 -142.44366 56.33908 c -141.91318 55.74619 -140.928 55.18895 -139.38107 54.84122 c -139.17155 54.79665 l -139.32759 54.64952 l -140.85219 53.27205 -142.94295 53.38794 -144.43188 54.56929 c -145.92531 55.75064 -146.82579 57.99742 -146.04565 60.84604 c -146.0412 60.84604 l -144.64587 66.463 -131.61984 65.99937 -132.25287 55.70605 c -132.54709 50.6597 -136.22487 47.68182 -140.30386 46.53168 c -144.38286 45.38153 -148.88535 46.02348 -150.90031 48.25688 c -150.90031 48.25688 l -150.90031 48.26134 l -156.13391 54.35977 -160.44917 56.45944 -163.33345 56.39258 c -164.7778 56.36137 -165.86554 55.79523 -166.55652 54.91255 c -167.25195 54.03435 -167.55063 52.8307 -167.39015 51.52008 c -167.36786 51.3373 l -167.53726 51.40417 l -171.76337 53.03133 -174.99088 51.26598 -176.57346 48.60907 c -178.15155 45.9566 -178.06238 42.41702 -175.61053 40.47783 c -175.55704 40.43771 l -175.57042 40.3753 l -176.44417 35.24423 -175.63283 31.71356 -174.01906 29.48015 c -172.40083 27.2512 -169.9802 26.3106 -167.59966 26.36855 c -165.21913 26.43094 -162.8832 27.50084 -161.46559 29.28847 c -160.0435 31.0761 -159.52193 33.58144 -160.77014 36.55933 c -160.77014 36.55933 -160.77014 36.55933 -160.7746 36.55933 c -161.6216 38.32465 -162.74054 39.09587 -163.87285 39.21179 c -164.93384 39.31432 -166.02156 38.7972 -166.9399 37.9502 c -165.10324 37.8655 -163.78816 36.38992 -163.58755 34.86533 c -163.48056 34.05843 -163.68562 33.2471 -164.27853 32.64973 c -164.87143 32.05682 -165.84326 31.69128 -167.25641 31.74924 c -167.26086 31.74924 l -167.26086 31.74924 l -168.79886 31.84285 -169.96236 32.55167 -170.73805 33.56805 c -171.51817 34.58447 -171.91492 35.89955 -171.93723 37.2191 c -171.96396 38.53864 -171.62071 39.86264 -170.90297 40.89687 c -170.18526 41.9311 -169.09308 42.67113 -167.64424 42.80486 c -163.71683 43.24173 -160.73003 42.23425 -158.27817 40.31288 c -155.82632 38.38707 -153.90495 35.56075 -152.07275 32.35551 c -148.4039 25.94502 -145.08722 18.03223 -138.66336 12.79865 c -130.46078 6.51744 -121.04123 4.59608 -111.06442 7.37784 c -101.09207 10.1551 -90.56248 17.65332 -80.18892 30.22908 c -80.18892 30.23355 l -80.18445 30.238 l -64.66646 45.75154 -50.83357 49.31787 -37.78523 46.66542 c -25.16936 44.10657 -13.28902 35.73907 -1.2794 26.83215 c -14.80472 40.33963 -27.36266 49.14401 -40.37975 51.44429 c -53.7535 53.80699 -67.6399 49.36691 -83.65271 36.2027 c -83.65718 36.2027 -83.65718 36.2027 -83.65718 36.2027 c -93.58493 25.92274 -103.03572 20.7159 -110.3244 19.76636 c -113.96652 19.28937 -117.07368 19.88226 -119.41855 21.447 c -121.7634 23.01173 -123.3415 25.54828 -123.92996 28.93184 c -123.92996 28.93184 l -124.91515 34.86533 -122.86006 39.28757 -119.72168 41.6458 c -116.57886 44.00403 -112.3483 44.29825 -109.01825 41.99352 c -109.01378 41.99352 l -109.01378 41.98906 l -107.5293 40.83 -106.94084 39.42131 -106.98543 38.11514 c -107.03445 36.81342 -107.71207 35.61424 -108.73738 34.85194 c -109.76271 34.09409 -111.14467 33.77312 -112.58902 34.22784 c -113.9888 34.66472 -115.43318 35.84605 -116.68585 38.0037 c -118.24612 34.4775 -117.76021 31.69128 -116.16872 29.76547 c -114.54605 27.79953 -111.7777 26.71625 -108.89787 26.69397 c -106.01805 26.67166 -103.03572 27.7059 -100.98062 29.94824 c -98.92998 32.18611 -97.79767 35.64099 -98.6313 40.49567 c -98.65805 40.66951 l -98.48863 40.62048 l -94.2135 39.3455 -90.97707 39.5595 -88.12846 40.58928 c -85.2843 41.61461 -82.828 43.46461 -80.13095 45.46623 c -74.83496 49.3981 -68.58498 53.88724 -56.71802 53.82036 c -60.40916 55.38509 -64.18947 55.29593 -67.98761 54.32411 c -71.97743 53.30771 -75.98065 51.36852 -79.88579 49.53186 c -83.79536 47.69519 -87.60689 45.96106 -91.22224 45.3637 c -94.84209 44.76189 -98.27466 45.30576 -101.37738 48.02063 c -101.37738 48.02063 l -102.83511 49.20195 -103.7267 50.81573 -104.0655 52.38492 c -104.4043 53.95854 -104.19032 55.49208 -103.41017 56.51294 c -103.3121 56.64221 l -103.22742 56.50403 l -100.86472 52.56769 -98.37274 51.02525 -96.20619 50.9361 c -94.03966 50.85138 -92.17178 52.21552 -91.0484 54.18146 c -89.92946 56.14738 -89.57281 58.70178 -90.42874 60.95747 c -91.2802 63.20872 -93.34421 65.17465 -97.11116 65.97264 c -102.13522 66.65915 -105.60793 64.87154 -107.5293 61.94267 c -109.45512 59.01382 -109.8162 54.93483 -108.55907 51.04753 c -108.51004 50.8826 l -108.67944 50.90042 l -111.25612 51.19464 -114.34099 50.68199 -117.07368 49.68341 c -119.81084 48.68039 -122.19136 47.187 -123.37717 45.53757 c -123.38164 45.5331 l -123.38164 45.52864 l -124.26877 44.43645 -125.27625 43.92825 -126.2436 43.86137 c -127.21098 43.79453 -128.13376 44.17345 -128.84703 44.81984 c -130.27356 46.11708 -130.88875 48.5199 -129.47559 50.71765 c -129.47113 50.72658 l -129.46669 50.73103 l -128.1293 52.39383 -126.56458 53.0759 -124.93298 53.28987 c -123.30585 53.50386 -121.61629 53.25421 -119.99808 53.07144 c -118.38432 52.89311 -116.84633 52.7772 -115.53127 53.23192 c -114.21617 53.68661 -113.1017 54.70303 -112.30818 56.825 c -111.71527 60.34674 -112.67372 63.24438 -114.76001 64.88934 c -116.85078 66.53432 -120.0917 66.93553 -124.11719 65.3931 c -124.25539 65.33961 l -124.26877 65.48672 l -124.74576 71.74562 -129.2527 75.4769 -134.13857 75.52592 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -18.946 8.018 cm 0 G 0 g q 1 0 0 1 -77.681 -237.804 cm q 0 G 0 g 0.3985 w q 0.94676 0.89665 0.7526 RG 0.94676 0.89665 0.7526 rg 51.88771 69.62308 m 46.24008 69.69714 41.63681 66.14192 40.20361 61.01648 c 37.03725 62.54225 33.03761 61.20906 30.04901 58.85371 c 28.54175 57.66495 27.28632 56.21321 26.52342 54.73558 c 25.77534 53.28387 25.5087 51.79881 25.9457 50.50266 c 22.58675 48.95834 20.6536 46.93631 19.80923 44.84392 c 18.95747 42.73671 19.2056 40.56653 20.16475 38.77042 c 22.0831 35.18187 26.86041 33.08575 31.39334 35.904 c 31.39703 35.904 l 31.40073 35.90771 l 34.35231 38.04456 35.38184 40.65543 34.83745 42.75522 c 34.31897 44.75133 32.3488 46.21416 29.375 46.41414 c 31.34889 47.06592 33.60794 46.99928 35.12633 45.91048 c 35.94106 45.32906 36.541 44.46617 36.778 43.26999 c 37.01501 42.07751 36.88171 40.54433 36.21509 38.6371 c 35.37814 36.26694 32.27472 33.919 28.6121 33.05244 c 24.94948 32.18585 20.73877 32.7858 17.65018 36.27435 c 17.64647 36.27806 l 17.63905 36.28546 l 16.22438 37.35944 14.40973 37.57423 12.62843 37.17796 c 10.85081 36.78171 9.10283 35.7781 7.81036 34.40045 c 6.51788 33.02281 5.68092 31.26741 5.73648 29.375 c 5.78833 27.4937 6.73639 25.49019 8.95099 23.59776 c 6.94008 19.27223 6.88821 15.62444 8.05109 12.79138 c 9.22133 9.94719 11.6026 7.92517 14.39493 6.8549 c 17.18726 5.78462 20.39067 5.65872 23.22374 6.59937 c 26.0531 7.54001 28.5084 9.55463 29.78607 12.75433 c 29.78607 12.75433 l 29.78607 12.75804 l 31.19705 16.7984 28.96393 20.17216 26.18642 21.3091 c 24.79395 21.87572 23.26077 21.89052 21.98311 21.14243 c 20.7647 20.4314 19.80553 19.00562 19.40187 16.77989 c 18.63156 18.42787 18.91301 20.11662 20.05365 21.57944 c 21.25354 23.12373 23.37556 24.40509 26.08272 25.05319 c 31.50073 26.34935 39.25555 25.12354 46.68079 18.51677 c 54.93556 9.89165 64.99759 8.12143 78.24448 11.63223 c 79.037 11.8433 l 78.21486 11.81367 l 71.63399 11.57666 65.9049 12.16551 60.8424 14.469 c 55.77992 16.77248 51.38034 20.79062 47.44737 27.43816 c 47.41034 27.4937 l 47.3474 27.47888 l 43.64404 26.67525 41.12944 27.19002 39.56293 28.39731 c 37.9927 29.6009 37.35204 31.50813 37.4224 33.52646 c 37.49275 35.5485 38.27417 37.67793 39.54073 39.29628 c 40.80725 40.91837 42.54784 42.02937 44.54395 42.04047 c 44.61061 42.04047 l 44.63281 42.10344 l 46.09195 46.60672 49.7916 49.50275 53.84677 50.09528 c 57.90196 50.6878 62.30894 48.98427 65.20497 44.2625 c 65.2494 44.18843 l 65.32718 44.22916 l 70.26746 46.79189 76.1706 44.95131 79.55547 41.21463 c 81.2516 39.34444 82.31078 37.00761 82.31818 34.51155 c 82.32187 32.01178 81.27013 29.35649 78.71481 26.83821 c 78.63333 26.76044 l 78.72592 26.69746 l 84.05504 23.04596 89.56935 22.72008 94.43185 24.03847 c 99.29065 25.35686 103.50508 28.31215 106.26407 31.23038 c 113.27823 37.03355 120.51828 37.42609 127.05101 33.76718 c 127.05101 33.76718 127.05101 33.76718 127.05101 33.76718 c 129.95074 31.52664 136.7464 28.07883 144.66046 27.47888 c 145.29004 27.43443 l 144.7012 27.65665 l 140.15347 29.40833 135.84277 31.43777 130.13962 36.72986 c 130.13591 36.73357 l 130.13591 36.73357 l 126.8214 39.39998 122.88475 40.73691 118.54811 40.4147 c 114.21518 40.0888 109.486 38.11122 104.56795 34.17085 c 100.39426 32.05623 97.16124 31.7896 94.84293 32.54137 c 92.52463 33.29315 91.10625 35.06335 90.55444 37.05576 c 90.00264 39.04816 90.32483 41.26277 91.48769 42.88113 c 92.64684 44.5032 94.64664 45.54015 97.48712 45.19203 c 99.72395 44.67357 101.13492 43.41443 101.59784 42.12195 c 101.83116 41.47757 101.82376 40.82208 101.56822 40.24434 c 101.3349 39.71106 100.8646 39.25185 100.18687 38.90002 c 100.49425 40.21843 100.34982 41.38129 99.69432 42.19972 c 99.0092 43.0663 97.7871 43.54774 96.06133 43.47366 c 96.04652 43.47366 l 96.03171 43.46626 l 94.00967 42.70338 92.88385 41.46646 92.50981 40.12955 c 92.13576 38.79263 92.50612 37.36314 93.43935 36.2299 c 95.30585 33.96346 99.40916 32.86357 104.26796 35.87068 c 104.27167 35.87068 l 104.27167 35.87068 l 107.45656 37.9816 108.25278 41.44052 107.15659 44.26619 c 106.0752 47.05852 103.13844 49.22128 98.8944 48.89539 c 101.02011 52.58394 99.71284 56.28358 97.12419 58.42413 c 94.53185 60.57578 90.66183 61.16832 87.74359 58.69077 c 86.58444 61.372 82.89589 62.98296 79.93692 61.52013 c 79.93321 61.52013 l 79.92952 61.51642 l 78.2667 60.43875 77.92229 58.67224 77.75194 56.90945 c 77.57788 55.14294 77.56306 53.36905 76.62242 52.20619 c 76.62242 52.20248 l 76.61871 52.20248 l 74.34856 49.14722 71.80804 47.86955 69.48605 47.71402 c 67.16405 47.55847 65.04942 48.52505 63.64215 49.97678 c 62.23486 51.43219 61.53494 53.36905 62.02008 55.15778 c 62.47559 56.8391 64.0384 58.38339 67.03813 59.30553 c 64.6791 57.60197 63.75696 55.82436 63.86806 54.26155 c 63.99026 52.59503 65.21608 51.20628 66.85295 50.4508 c 68.48613 49.69533 70.5341 49.56569 72.31541 50.42488 c 74.09673 51.28404 75.60399 53.13203 76.15579 56.2947 c 76.15579 56.2947 l 76.15579 56.2947 l 76.85204 60.92018 74.27449 64.1236 71.13405 65.65677 c 69.5601 66.42339 67.84546 66.7789 66.31967 66.69371 c 64.82724 66.60854 63.51994 66.09377 62.70149 65.1272 c 59.03148 68.2158 55.27628 69.57864 51.88771 69.62308 c 51.88399 69.4379 m 55.24295 69.39346 58.98703 68.04544 62.64966 64.93832 c 62.72002 64.87537 l 62.77927 64.94945 l 63.54956 65.90862 64.83833 66.42339 66.33078 66.50856 c 67.81955 66.59003 69.50827 66.2456 71.05257 65.49013 c 74.14116 63.98285 76.65945 60.86833 75.97063 56.32433 c 75.42993 53.2061 73.96341 51.42108 72.23764 50.59152 c 70.50818 49.76196 68.51576 49.88417 66.92702 50.62115 c 65.34198 51.35442 64.16803 52.69133 64.05322 54.27637 c 63.93842 55.86139 64.87907 57.71678 67.58994 59.50551 c 68.05656 59.81288 l 67.51585 59.67215 l 64.08656 58.77223 62.34598 57.0687 61.84233 55.20592 c 61.33867 53.34311 62.06822 51.33961 63.50883 49.85085 c 64.95314 48.3584 67.1159 47.36961 69.49716 47.52884 c 71.87842 47.69179 74.47076 49.00278 76.76683 52.08769 c 76.76683 52.09138 l 77.76305 53.3246 77.76305 55.13554 77.93341 56.89093 c 78.10747 58.64262 78.43335 60.32393 80.02579 61.35718 c 82.91441 62.78297 86.56592 61.14978 87.62878 58.5204 c 87.67693 58.3982 l 87.77693 58.48337 l 90.63222 60.98685 94.44666 60.40541 97.00938 58.2834 c 99.5684 56.15767 100.86829 52.50986 98.66849 48.84724 c 98.5759 48.6917 l 98.75737 48.70653 l 103.01994 49.09537 105.91966 46.95113 106.98622 44.19954 c 108.0528 41.45164 107.28992 38.0927 104.17168 36.02623 c 99.36472 33.05244 95.3836 34.15973 93.58379 36.34842 c 92.68387 37.44092 92.32834 38.80374 92.68756 40.0777 c 93.04309 41.35165 94.10966 42.54044 96.08727 43.28851 c 97.76117 43.35516 98.91292 42.89226 99.5536 42.08492 c 100.19427 41.27759 100.3424 40.10362 99.96837 38.72968 c 99.91653 38.5445 l 100.09798 38.62227 l 100.92014 38.99632 101.46452 39.54073 101.73859 40.17027 c 102.01262 40.79614 102.01631 41.49979 101.7719 42.1849 c 101.28307 43.55145 99.80913 44.84763 97.52415 45.3735 c 97.52046 45.3772 l 97.51305 45.3772 l 94.61703 45.73273 92.53574 44.66246 91.33585 42.99223 c 90.13965 41.31833 89.81377 39.05186 90.37668 37.00761 c 90.94328 34.96338 92.40982 33.13762 94.78737 32.36731 c 97.16864 31.59702 100.4498 31.87477 104.65312 34.0079 c 104.66052 34.01161 l 104.66794 34.01901 l 109.57117 37.94827 114.27072 39.91106 118.56291 40.22954 c 122.85512 40.54803 126.73993 39.23334 130.0211 36.59283 c 135.47615 31.53035 139.68315 29.44907 144.01978 27.74182 c 136.42792 28.4751 129.92851 31.77477 127.15471 33.92271 c 127.14731 33.92644 l 127.1436 33.93013 l 120.55162 37.61867 113.20415 37.2113 106.14186 31.3674 c 106.13817 31.36371 l 106.13446 31.36 l 103.39397 28.46397 99.20549 25.52722 94.38371 24.21992 c 89.58786 22.92006 84.17726 23.23114 78.91849 26.79376 c 81.44049 29.31575 82.50705 31.98958 82.49963 34.51155 c 82.49593 37.05946 81.41086 39.44072 79.6925 41.33684 c 76.2706 45.11426 70.3267 46.97334 65.31607 44.42174 c 62.38672 49.14722 57.92416 50.87668 53.82085 50.27673 c 49.71384 49.6768 45.97343 46.75116 44.47728 42.21825 c 42.44414 42.18121 40.67024 41.04797 39.39629 39.41109 c 38.1038 37.7594 37.30759 35.59663 37.23723 33.53387 c 37.16687 31.4711 37.82605 29.49721 39.44814 28.24918 c 41.06279 27.00856 43.62181 26.50119 47.32147 27.29002 c 51.26184 20.6536 55.68364 16.61324 60.76836 14.30235 c 65.63826 12.08403 71.13774 11.47298 77.3705 11.62852 c 64.5791 8.42142 54.8467 10.25087 46.8067 18.65009 c 46.803 18.65378 l 46.803 18.65378 l 39.34073 25.2976 31.52295 26.54193 26.04199 25.23094 c 23.3015 24.57545 21.14243 23.27928 19.90921 21.69423 c 18.6723 20.1055 18.36493 18.21309 19.3389 16.41696 c 19.46852 16.17624 l 19.51297 16.4466 l 19.8722 18.82784 20.85728 20.26845 22.07939 20.98318 c 23.2978 21.69794 24.76804 21.68683 26.11604 21.13873 c 28.80838 20.03514 30.99336 16.77248 29.61572 12.81729 c 29.61572 12.81729 29.61572 12.81729 29.61201 12.81729 c 28.35658 9.66943 25.9494 7.69926 23.16447 6.77342 c 20.37584 5.84758 17.21318 5.97351 14.45789 7.02895 c 11.70628 8.08441 9.36948 10.0694 8.22144 12.86174 c 7.0734 15.65778 7.11414 19.26483 9.13986 23.57925 c 9.1732 23.6422 l 9.11763 23.69034 l 6.89194 25.57166 5.97351 27.54184 5.91794 29.37871 c 5.8661 31.21556 6.67714 32.92651 7.94368 34.27454 c 9.21024 35.62256 10.92859 36.61136 12.66917 36.9965 c 14.40973 37.38535 16.16512 37.17056 17.52797 36.13733 c 17.52797 36.13733 17.52797 36.13733 17.52797 36.13733 c 20.6647 32.61172 24.94948 31.99327 28.65654 32.87097 c 32.36731 33.74867 35.51515 36.1077 36.38914 38.57784 c 36.38914 38.57784 l 37.06316 40.5073 37.2039 42.07011 36.95947 43.30702 c 36.71506 44.54395 36.08179 45.45497 35.2337 46.06232 c 33.54128 47.27702 30.99707 47.29555 28.89357 46.4697 c 28.46027 46.29933 l 28.9269 46.29193 l 32.11179 46.23639 34.13751 44.71802 34.65599 42.71078 c 35.17816 40.69987 34.20047 38.16676 31.29333 36.05586 c 26.84561 33.29686 22.2016 35.35591 20.3277 38.85928 c 19.39075 40.60727 19.15004 42.71819 19.98329 44.77356 c 20.81284 46.82892 22.71637 48.83614 26.08643 50.36931 c 26.1642 50.40636 l 26.13457 50.48413 l 25.68646 51.73587 25.94199 53.1987 26.68637 54.6504 c 27.43443 56.0984 28.67506 57.53162 30.16382 58.70929 c 33.14502 61.0572 37.12982 62.36821 40.21843 60.8165 c 40.3184 60.76465 l 40.34805 60.87575 l 41.72939 65.97527 46.28082 69.51196 51.88399 69.4379 c 55.62437 47.60292 m 51.984 47.71773 48.19176 45.63274 45.65495 40.1851 c 43.81439 40.28508 42.37009 39.30371 41.42203 37.889 c 40.45915 36.45581 39.99623 34.58192 40.10362 32.908 c 40.21472 31.23409 40.90355 29.74904 42.27008 29.14168 c 43.62181 28.54175 45.61052 28.8232 48.28433 30.54527 c 50.72484 24.06808 55.04297 19.70183 60.36098 17.0132 c 65.70863 14.30975 72.05618 13.29132 78.52223 13.49501 c 91.44695 13.90608 104.83458 19.19449 111.5858 25.71608 c 111.58951 25.71608 l 115.62245 29.51573 122.57365 29.78236 128.23979 26.48639 c 130.83583 24.43472 134.71696 23.46814 138.70918 23.51259 c 142.7051 23.55702 146.81583 24.6162 149.86368 26.6345 c 150.31549 26.9345 l 149.78961 26.80118 l 144.95674 25.57166 139.30171 25.68275 131.45801 29.40463 c 131.4543 29.40463 131.4543 29.40463 131.4543 29.40463 c 127.57318 31.9192 124.25127 33.45981 121.21823 34.08195 c 118.18146 34.70042 115.43358 34.39674 112.71901 33.22649 c 112.71532 33.2228 l 112.71162 33.2228 l 107.3899 30.30084 105.42711 26.88264 100.05725 23.79774 c 90.21373 19.74997 81.93303 20.7647 77.41493 25.47906 c 77.34087 25.55684 l 77.2742 25.47166 l 76.65945 24.65692 75.52621 24.23103 74.19672 24.16808 c 72.8672 24.10513 71.35254 24.40509 69.9971 25.02356 c 68.64168 25.6383 67.4492 26.56786 66.75298 27.75664 c 66.05673 28.9417 65.84935 30.38602 66.47522 32.05994 c 66.47893 32.06364 l 66.47893 32.06734 l 67.68251 35.8818 70.3156 37.02243 72.4228 36.61876 c 73.47456 36.41508 74.393 35.82625 74.93738 34.98189 c 75.44104 34.20047 75.60399 33.19685 75.267 32.07475 c 74.70778 33.6857 73.60048 34.68932 72.37466 34.73375 c 71.07478 34.7856 69.70825 33.782 68.83055 31.4711 c 68.83055 31.4711 l 68.58614 30.8082 68.81575 29.97864 69.34903 29.20834 c 69.8786 28.43805 70.72298 27.72331 71.7414 27.29002 c 73.77454 26.43083 76.5187 26.73451 78.81851 30.0453 c 79.93692 31.24149 80.27022 32.9154 79.97395 34.65968 c 79.6814 36.40398 78.76295 38.2223 77.3779 39.72958 c 74.6115 42.73302 69.96007 44.49951 64.64575 41.9516 c 62.7052 45.19945 59.24997 47.48811 55.62437 47.60292 c 55.61697 47.41774 m 59.19443 47.30293 62.63484 45.02908 64.53836 41.79236 c 64.5791 41.72198 l 64.65686 41.75902 l 69.93045 44.32175 74.5078 42.57376 77.24088 39.60367 c 78.60742 38.12233 79.50732 36.32991 79.79248 34.63007 c 80.08136 32.92651 79.75545 31.31926 78.6852 30.17122 c 78.68147 30.16753 l 78.67776 30.16011 l 76.40762 26.89375 73.78194 26.6271 71.81175 27.46036 c 70.82666 27.87885 70.01193 28.57507 69.50085 29.31575 c 68.9861 30.0527 68.78981 30.83043 69.00461 31.40443 c 69.8675 33.6709 71.17108 34.59673 72.36726 34.55229 c 73.56345 34.50415 74.69296 33.48572 75.20033 31.75996 c 75.2818 31.48961 l 75.37808 31.75256 l 75.84471 33.0339 75.66695 34.19307 75.09293 35.08188 c 74.5189 35.97069 73.55603 36.58914 72.45613 36.80023 c 70.26006 37.2187 67.52696 36.00401 66.30487 32.12659 c 65.66048 30.40453 65.87158 28.89357 66.59373 27.66034 c 67.31589 26.43083 68.538 25.48276 69.91934 24.85321 c 71.30438 24.22734 72.8413 23.91995 74.20412 23.98291 c 75.52621 24.04587 76.68167 24.46806 77.35197 25.29391 c 81.95155 20.56102 90.2878 19.57962 100.13503 23.63109 c 100.13872 23.6348 l 100.14613 23.6348 l 105.54933 26.7382 107.51212 30.1564 112.7968 33.05614 c 115.48174 34.21529 118.18146 34.51524 121.1812 33.9005 c 124.18462 33.28574 127.4917 31.75626 131.36543 29.24538 c 131.36913 29.24168 l 131.37654 29.23798 l 138.9684 25.6383 144.53085 25.43462 149.28596 26.53082 c 146.32697 24.72357 142.4792 23.7385 138.70918 23.69777 c 134.74287 23.65332 130.8914 24.61989 128.34349 26.63821 c 128.33606 26.64563 l 128.33237 26.64563 l 122.607 29.97495 115.56691 29.72311 111.45988 25.84941 c 111.45988 25.84941 l 111.45988 25.84941 l 104.7568 19.37595 91.39511 14.08754 78.51482 13.68018 c 72.07469 13.4765 65.75307 14.49121 60.44244 17.17615 c 55.13554 19.86108 50.83224 24.21623 48.41394 30.7082 c 48.3769 30.8156 l 48.27693 30.75264 l 45.58089 28.98615 43.63292 28.73802 42.34785 29.30835 c 41.0591 29.88237 40.3962 31.28592 40.28879 32.91911 c 40.1814 34.54858 40.64061 36.39285 41.57387 37.78531 c 42.5071 39.18149 43.90697 40.12955 45.70679 40.00732 c 45.76976 40.00363 l 45.7994 40.05919 l 48.31396 45.49571 52.03954 47.53255 55.61697 47.41774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 133.729 197.885 cm 0 G 0 g q 1 0 0 1 100.27 -230.655 cm q 0 G 0 g 0.3985 w q 0.94745 0.898 0.7558 RG 0.94745 0.898 0.7558 rg -153.84566 57.66975 m -150.25192 57.5869 -146.84573 56.2218 -144.95729 53.67479 c -130.27707 65.2323 -109.61748 48.76395 -122.69273 35.92856 c -116.28159 22.14243 -137.23337 16.71257 -142.10933 25.93677 c -145.82518 33.77844 -141.06262 39.65749 -136.11688 38.09615 c -141.25017 34.45007 -140.4128 29.00714 -134.14557 29.05946 c -124.82104 29.51305 -126.10329 44.43315 -136.86703 48.09665 c -151.08495 51.76889 -161.15524 36.95784 -157.09485 27.23209 c -152.8033 14.98549 -136.05583 13.09268 -119.88838 22.07701 c -68.38553 53.20377 -72.30637 3.58499 -33.19402 19.06769 c -61.37253 1.4305 -70.18239 28.23955 -93.58089 22.41281 c -110.82121 18.3568 -113.79128 0.10902 -148.6993 2.74762 c -158.72162 2.89154 -183.64223 24.37106 -165.87856 38.40579 c -170.51463 51.80377 -161.744 57.84857 -153.84566 57.66975 c -50.95332 42.82817 m -45.08734 42.99828 -39.09053 39.28679 -39.27806 32.10368 c -39.71419 25.80157 -44.07988 23.74304 -48.13156 26.36418 c -51.28477 28.36166 -49.89789 32.56163 -44.89545 31.0526 c -42.99828 30.69498 -42.77148 32.75789 -44.67737 35.04758 c -48.30164 40.44254 -56.57507 37.83882 -57.01993 33.04135 c -57.5869 26.62587 -52.86359 20.69446 -44.74715 21.97668 c -38.99893 23.40285 -36.59586 25.22586 -35.78464 28.40092 c -34.00522 26.24641 -32.18655 26.11122 -29.58282 27.0053 c -22.15114 28.9679 -17.74184 23.07138 -10.3843 21.558 c -6.20615 20.7686 -2.86537 22.753 -0.10902 25.03397 c -2.38998 17.75056 -11.38304 17.06148 -17.29262 20.44586 c -25.34364 25.00781 -29.91429 24.82028 -41.13599 19.25087 c -54.98753 14.61041 -66.2354 25.90625 -60.79247 36.89677 c -58.92146 40.77835 -54.96574 42.71042 -50.95332 42.82817 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 2.437 196.353 cm 0 G 0 g q 1 0 0 1 41.803 -225.693 cm q 0 G 0 g 0.3985 w q 0.94566 0.89452 0.74748 RG 0.94566 0.89452 0.74748 rg -85.57962 48.32732 m -82.41411 48.29602 -79.49889 45.87851 -79.15475 41.87683 c -76.59503 42.83531 -74.49323 42.58502 -73.12807 41.50995 c -71.74866 40.4235 -71.1258 38.5094 -71.51544 36.22556 c -71.51544 36.21988 l -71.51828 36.21135 l -72.03308 34.82343 -72.78108 34.1323 -73.65991 33.82797 c -74.54158 33.52365 -75.53987 33.60329 -76.57513 33.7199 c -77.60754 33.83652 -78.67694 33.99008 -79.68945 33.85925 c -80.70197 33.72559 -81.6576 33.31319 -82.48805 32.28078 c -83.34982 30.93266 -82.96872 29.48216 -82.10696 28.70003 c -81.67749 28.30754 -81.12857 28.0857 -80.55122 28.1255 c -79.9767 28.16531 -79.37375 28.46396 -78.82768 29.13802 c -78.0427 30.22731 -76.50117 31.18579 -74.74068 31.8314 c -73.01144 32.4628 -71.07175 32.78703 -69.41649 32.61923 c -70.19292 35.10783 -69.96255 37.7102 -68.72252 39.59586 c -67.46541 41.50711 -65.18158 42.67604 -61.93358 42.23235 c -61.93076 42.23235 l -61.9279 42.2295 l -59.48764 41.71188 -58.12247 40.4235 -57.55934 38.93887 c -56.99619 37.45708 -57.23227 35.78473 -57.96605 34.49634 c -58.69981 33.20795 -59.93987 32.29784 -61.38469 32.3547 c -62.80959 32.41444 -64.41083 33.42696 -65.91252 35.88144 c -66.3306 35.2728 -66.45575 34.38258 -66.25381 33.45256 c -66.04619 32.47986 -65.4916 31.47589 -64.59001 30.74495 c -64.58714 30.74495 l -64.58714 30.74495 l -62.63893 29.04132 -60.50584 28.70287 -58.22485 29.08113 c -55.94386 29.45941 -53.51782 30.55724 -51.02638 31.72902 c -48.53493 32.89793 -45.97522 34.14082 -43.40982 34.79782 c -40.84727 35.45197 -38.27618 35.52022 -35.77618 34.33992 c -35.47472 34.20055 l -35.80464 34.20624 l -43.60323 34.35698 -47.60205 31.4446 -51.0406 28.89058 c -52.75845 27.61641 -54.33694 26.42757 -56.17992 25.76204 c -57.99731 25.10506 -60.07637 24.97137 -62.77829 25.75635 c -62.27489 22.68471 -62.9973 20.45775 -64.32266 19.0101 c -65.66223 17.54536 -67.60477 16.87416 -69.47621 16.88838 c -71.34764 16.90544 -73.15651 17.6051 -74.22589 18.89917 c -75.29529 20.19609 -75.61667 22.0846 -74.53021 24.43384 c -74.47049 24.56183 l -74.40508 24.43953 l -73.59735 22.99756 -72.6673 22.2467 -71.78848 21.97368 c -70.91249 21.69778 -70.07915 21.89119 -69.45914 22.35194 c -68.83629 22.80984 -68.42673 23.53508 -68.39828 24.32292 c -68.36984 25.1079 -68.71967 25.95828 -69.63263 26.675 c -69.63547 26.67786 l -71.70883 28.11128 -74.33682 27.92926 -76.29642 26.45601 c -78.25601 24.9856 -79.54724 22.22395 -78.92722 18.48108 c -78.55464 16.35368 -77.57343 14.7752 -76.11154 13.79967 c -74.64966 12.82698 -72.70428 12.45155 -70.40338 12.75018 c -65.8016 13.3503 -59.78912 16.65231 -53.46948 23.1995 c -53.46664 23.20233 l -53.46379 23.20517 l -43.22495 31.62093 -34.31717 34.47644 -25.7393 32.96051 c -17.1614 31.4446 -8.92769 25.5658 -0.0199 16.5414 c -0.11375 16.43332 l -8.04317 22.3292 -15.85312 27.95203 -24.13521 29.63573 c -32.41728 31.31662 -41.18002 29.06976 -51.05482 19.19211 c -51.05482 19.19211 -51.05482 19.18929 -51.05766 19.18929 c -57.68448 11.15463 -64.4222 6.35374 -70.82146 4.57048 c -77.2236 2.78438 -83.29295 4.02441 -88.55742 8.05453 c -88.55742 8.05453 l -88.55742 8.05737 l -92.68994 11.42482 -94.81165 16.49588 -97.14383 20.57152 c -98.30992 22.61075 -99.5272 24.3997 -101.06873 25.6056 c -102.60739 26.81436 -104.46744 27.44292 -106.94182 27.16704 c -106.94182 27.16704 l -106.94182 27.16704 l -107.82635 27.0874 -108.48335 26.64372 -108.91849 26.01233 c -109.35649 25.38092 -109.56981 24.56467 -109.55557 23.7484 c -109.53851 22.93214 -109.29391 22.12157 -108.81894 21.50156 c -108.34398 20.88438 -107.64432 20.45491 -106.70576 20.39803 c -105.82979 20.36389 -105.25243 20.58858 -104.90828 20.93272 c -104.56415 21.27687 -104.44469 21.74615 -104.50725 22.22395 c -104.6324 23.18242 -105.48564 24.14943 -106.68301 24.10107 c -106.8622 24.09254 l -106.7342 24.22337 l -106.10281 24.85477 -105.31499 25.23589 -104.53569 25.15623 c -103.75641 25.07945 -102.99988 24.54192 -102.44243 23.38435 c -102.44243 23.38152 l -102.43958 23.37868 l -101.62616 21.44182 -101.96461 19.77802 -102.90317 18.5977 c -103.83888 17.42023 -105.36618 16.72342 -106.92476 16.6836 c -108.48335 16.64378 -110.07889 17.2638 -111.13692 18.72568 c -112.19208 20.18188 -112.70972 22.46855 -112.15509 25.74498 c -113.75351 27.03905 -113.80469 29.35417 -112.77513 31.08624 c -111.7484 32.80978 -109.63522 33.95311 -106.92761 32.95482 c -107.00725 33.77962 -106.82236 34.55038 -106.37299 35.12206 c -105.90657 35.7193 -105.1671 36.10042 -104.21147 36.12033 c -102.29738 36.16585 -99.51866 34.78929 -96.16544 30.88145 c -94.94531 29.52483 -92.11542 29.10104 -89.55286 29.82344 c -86.98746 30.54585 -84.70079 32.39455 -84.51877 35.54866 c -84.51877 35.55153 l -84.12059 41.99913 -92.19789 42.1641 -93.03693 38.7853 c -93.03693 38.7853 l -93.03693 38.78242 l -93.52611 37.0077 -92.9658 35.64252 -92.05853 34.92581 c -91.18823 34.23752 -90.01077 34.16643 -89.10349 34.90305 c -90.01077 35.13058 -90.63933 35.46335 -90.98631 35.84729 c -91.3532 36.2597 -91.42998 36.7233 -91.26503 37.12148 c -90.93796 37.91782 -89.70929 38.43262 -88.16493 37.94342 c -88.1621 37.94342 l -88.1621 37.94057 l -86.88223 37.47699 -86.31056 36.06915 -86.78838 34.70113 c -87.26619 33.3331 -88.78778 32.00488 -91.65182 31.64653 c -91.65466 31.64653 l -91.65466 31.64653 l -93.75363 31.4446 -95.35487 32.13002 -96.44133 33.26485 c -97.52779 34.39964 -98.09946 35.97813 -98.15633 37.568 c -98.21606 39.15501 -97.75815 40.75342 -96.77979 41.9252 c -95.80708 43.08844 -94.31392 43.82222 -92.32019 43.70845 c -90.66492 46.92232 -88.05116 48.35007 -85.57962 48.32732 c -85.57962 48.18509 m -88.00566 48.20786 -90.58244 46.81139 -92.21497 43.6089 c -92.2377 43.56625 l -92.28322 43.56909 l -94.26273 43.69708 -95.71606 42.97752 -96.66885 41.83702 c -97.62448 40.69652 -98.07101 39.12941 -98.01413 37.57368 c -97.96008 36.0151 -97.39696 34.4679 -96.33894 33.36154 c -95.28093 32.25801 -93.72803 31.58966 -91.6689 31.78874 c -88.84183 32.14142 -87.37994 33.44116 -86.92204 34.74947 c -86.46414 36.05492 -87.00168 37.3689 -88.2076 37.8069 c -89.7036 38.28188 -90.84694 37.76709 -91.1342 37.06743 c -91.2764 36.7176 -91.21953 36.32228 -90.87822 35.944 c -90.53976 35.56573 -89.91122 35.21022 -88.92432 34.98837 c -88.79065 34.95993 l -88.89018 34.86607 l -89.86287 33.98726 -91.19676 34.0612 -92.14671 34.81488 c -93.09949 35.56857 -93.674 37.00201 -93.17628 38.81941 c -93.17343 38.81941 l -92.28322 42.403 -83.9727 42.10721 -84.37657 35.54013 c -84.56427 32.32059 -86.91068 30.42072 -89.51305 29.68694 c -92.11542 28.95316 -94.98798 29.3627 -96.27353 30.7876 c -96.27353 30.7876 l -96.27353 30.79045 l -99.61252 34.68121 -102.36563 36.0208 -104.20578 35.97813 c -105.12729 35.95822 -105.82124 35.59702 -106.26208 35.03387 c -106.70576 34.4736 -106.89632 33.70569 -106.79393 32.8695 c -106.77972 32.7529 l -106.88779 32.79555 l -109.58401 33.83366 -111.64316 32.70738 -112.65282 31.01228 c -113.65965 29.32004 -113.60277 27.06181 -112.0385 25.82462 c -112.00436 25.79901 l -112.0129 25.7592 l -112.57034 22.48563 -112.0527 20.23306 -111.02315 18.80817 c -109.99072 17.3861 -108.44638 16.78598 -106.92761 16.82295 c -105.40884 16.8628 -103.91853 17.54536 -103.0141 18.68587 c -102.10681 19.82637 -101.77406 21.42476 -102.57042 23.32463 c -102.57042 23.32463 -102.57042 23.32463 -102.57326 23.32463 c -103.11365 24.4509 -103.82751 24.94295 -104.54993 25.01689 c -105.22682 25.0823 -105.92078 24.75238 -106.50668 24.212 c -105.3349 24.15796 -104.49588 23.21655 -104.3679 22.24387 c -104.29964 21.72908 -104.43047 21.21146 -104.80875 20.83034 c -105.187 20.45207 -105.80702 20.21886 -106.7086 20.25583 c -106.71146 20.25583 l -106.71146 20.25583 l -107.69267 20.31555 -108.43498 20.76776 -108.92987 21.41621 c -109.42758 22.0647 -109.68071 22.9037 -109.69495 23.74556 c -109.712 24.58742 -109.493 25.43213 -109.03511 26.09196 c -108.57721 26.7518 -107.88039 27.22392 -106.95605 27.30925 c -104.45038 27.58797 -102.54482 26.94519 -100.98055 25.71939 c -99.41628 24.4907 -98.19046 22.68755 -97.02153 20.64262 c -94.68082 16.55278 -92.56479 11.50446 -88.46642 8.16547 c -83.23323 4.15808 -77.2236 2.93227 -70.85844 4.70702 c -64.49615 6.4789 -57.77834 11.26271 -51.16006 19.28596 c -51.16006 19.28882 l -51.1572 19.29167 l -41.25682 29.18922 -32.43152 31.46451 -24.10675 29.77226 c -16.0579 28.13974 -8.47832 22.80132 -0.81625 17.11876 c -9.44531 25.73643 -17.4572 31.35359 -25.76204 32.82115 c -34.2944 34.32854 -43.15385 31.4958 -53.36995 23.0971 c -53.37279 23.0971 -53.37279 23.0971 -53.37279 23.0971 c -59.70665 16.53854 -65.73619 13.21663 -70.38632 12.61082 c -72.70998 12.3065 -74.69232 12.68477 -76.18834 13.68304 c -77.68434 14.68135 -78.69116 16.29965 -79.06659 18.45834 c -79.06659 18.45834 l -79.69513 22.24387 -78.38399 25.06523 -76.38174 26.56976 c -74.37663 28.07431 -71.67755 28.26202 -69.553 26.79161 c -69.55016 26.79161 l -69.55016 26.78877 l -68.60306 26.0493 -68.22765 25.15056 -68.25607 24.31723 c -68.28735 23.48674 -68.71967 22.72168 -69.37381 22.23534 c -70.02797 21.75183 -70.90964 21.54704 -71.83113 21.83714 c -72.72418 22.11588 -73.64569 22.86957 -74.44489 24.24612 c -75.44032 21.99641 -75.13031 20.21886 -74.11497 18.99019 c -73.0797 17.73593 -71.3135 17.0448 -69.47621 17.0306 c -67.6389 17.01637 -65.73619 17.6762 -64.42505 19.1068 c -63.11674 20.53455 -62.39433 22.73875 -62.9262 25.83598 c -62.94325 25.94691 l -62.83517 25.91562 l -60.10765 25.1022 -58.04283 25.23872 -56.22543 25.8957 c -54.41089 26.54987 -52.84377 27.73018 -51.12308 29.00719 c -47.74426 31.5157 -43.7568 34.37973 -36.18575 34.33707 c -38.54068 35.33536 -40.9525 35.27847 -43.37569 34.65846 c -45.92119 34.01 -48.4752 32.7728 -50.96666 31.60103 c -53.46095 30.42924 -55.89268 29.32289 -58.19926 28.94177 c -60.50868 28.55782 -62.69865 28.9048 -64.67818 30.63687 c -64.67818 30.63687 l -65.60818 31.39056 -66.17702 32.42014 -66.39317 33.42126 c -66.60933 34.42523 -66.47282 35.40363 -65.97508 36.05492 c -65.91252 36.1374 l -65.85847 36.04924 l -64.35109 33.53789 -62.76123 32.55382 -61.37898 32.49693 c -59.99675 32.44289 -58.80505 33.31319 -58.08835 34.56744 c -57.37447 35.8217 -57.14694 37.45139 -57.69301 38.89052 c -58.23624 40.3268 -59.55305 41.58105 -61.95634 42.09015 c -65.16168 42.52815 -67.37724 41.38765 -68.60306 39.51906 c -69.83173 37.65047 -70.06209 35.04811 -69.26006 32.56802 c -69.22878 32.4628 l -69.33684 32.47417 l -70.98074 32.66188 -72.94887 32.33481 -74.69232 31.69772 c -76.43861 31.0578 -77.95738 30.10501 -78.71391 29.05269 c -78.71677 29.04985 l -78.71677 29.04701 l -79.28273 28.35019 -79.9255 28.02597 -80.5427 27.9833 c -81.15985 27.94064 -81.74858 28.18239 -82.20366 28.59479 c -83.11377 29.42244 -83.50626 30.95541 -82.60468 32.35757 c -82.60182 32.36325 l -82.59898 32.3661 l -81.74574 33.42696 -80.74745 33.8621 -79.70651 33.99863 c -78.66841 34.13513 -77.59048 33.97586 -76.55807 33.85925 c -75.5285 33.7455 -74.54727 33.67155 -73.70825 33.96165 c -72.86925 34.25174 -72.1582 34.9002 -71.65196 36.25401 c -71.2737 38.50087 -71.88518 40.34953 -73.21622 41.39902 c -74.55011 42.4485 -76.6178 42.70448 -79.18604 41.72041 c -79.2742 41.6863 l -79.28273 41.78014 l -79.58707 45.77328 -82.46246 48.15382 -85.57962 48.18509 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g q 1 0 0 1 6.098 -41.047 cm q 0 G 0 g 0.3985 w q q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.00002 .99998 -.99998 -.00002 7.573 -62.056 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.6431 .76575 -.76575 -.6431 20.753 -56.203 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.98497 .17262 -.17262 -.98497 27.099 -43.224 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86574 -.50044 .50044 -.86574 23.58 -29.231 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.34251 -.93948 .93948 -.34251 11.898 -20.802 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .34146 -.93988 .93988 .34146 -2.473 -21.805 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .86517 -.50142 .50142 .86517 -12.788 -31.814 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .98514 .17157 -.17157 .98514 -14.295 -46.102 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .64392 .76505 -.76505 .64392 -6.288 -58.054 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .00107 .99998 -.99998 .00107 7.55 -62.06 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -14.872 -10.797 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg BT /F6 29.7444 Tf 6.098 -41.047 Td[<3ba5>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 74.702 -8.968 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg BT /F1 29.7444 Tf 6.098 -41.047 Td[<2b882c3d>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q n Q Q q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 51.494 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+28 0 obj
+<</Length 86864>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 104.127 173.249 cm 0 G 0 g q 1 0 0 1 -74.181 -221.392 cm q 0 G 0 g 0.3985 w q 0.9463 0.89578 0.75049 RG 0.9463 0.89578 0.75049 rg 30.55746 40.9505 m 27.23563 40.99413 24.53104 38.8937 23.71092 35.8663 c 20.01611 37.72244 14.25142 32.73422 15.34198 29.71556 c 7.35907 26.08618 13.17177 17.90479 18.46098 21.19174 c 21.9137 23.69348 20.8253 27.25089 17.03671 27.31851 c 19.4883 28.28038 22.96063 27.25743 21.3815 22.73816 c 20.37163 19.8896 14.0224 17.18939 10.35593 21.32697 c 7.08862 23.80908 0.0545 18.37373 5.335 13.91115 c 0.5409 3.70134 14.50879 0.0545 17.49255 7.53139 c 19.13493 12.24043 12.29277 15.35071 11.43777 9.69505 c 9.18251 13.85664 18.76196 18.74889 27.5279 10.94702 c 32.37871 5.8781 38.27644 4.8377 46.06741 6.90323 c 38.3048 6.62624 32.53793 8.28824 27.8965 16.13155 c 19.13277 14.22742 21.45346 24.78622 26.23448 24.81458 c 27.9663 30.15614 35.02003 31.69165 38.44876 26.09708 c 44.32033 29.1419 52.45154 21.73047 46.39676 15.76729 c 52.64784 11.48795 59.30899 15.00827 62.54794 18.43262 c 66.69208 21.86353 70.98888 22.09909 74.85382 19.93541 c 76.54636 18.62456 80.5509 16.58958 85.20323 16.23842 c 82.52045 17.2701 79.9729 18.4719 76.60962 21.59306 c 72.72504 24.71861 67.39656 24.71861 61.61006 20.07718 c 51.74268 15.07588 50.66084 27.50171 57.4245 26.67072 c 60.08983 26.05563 60.82704 23.65858 58.92947 22.79704 c 59.37442 24.43726 58.58704 25.63467 56.57822 25.54962 c 51.8561 23.76982 55.68832 17.6496 61.38106 21.1721 c 65.0933 23.63242 63.21973 29.20299 58.15735 28.7406 c 60.77469 33.10065 55.06671 37.47162 51.65979 34.48567 c 51.02074 36.06915 48.83743 37.04193 47.10344 36.18475 c 45.18623 34.93933 46.31169 32.1235 45.16878 30.71233 c 39.79013 23.47755 31.74399 32.98068 39.77707 35.09201 c 33.35147 30.8541 43.51114 25.76337 44.79799 33.1639 c 45.61374 38.56436 38.79555 40.6059 36.93288 38.28734 c 34.76703 40.12387 32.55101 40.92215 30.55746 40.9505 c 32.75822 27.98155 m 30.62944 28.04918 28.41124 26.83212 26.92372 23.61714 c 22.59637 23.90723 22.07292 13.88936 28.46358 18.0662 c 34.17593 2.7264 57.75821 7.53139 65.6822 15.18494 c 68.07927 17.44456 72.1994 17.59726 75.55396 15.64732 c 78.58572 13.24591 84.66669 13.36807 88.2328 15.73239 c 85.37553 15.00609 82.02753 15.0737 77.397 17.2701 c 72.82538 20.22987 69.5886 20.89075 66.40852 19.51883 c 63.28299 17.80446 62.12698 15.78911 58.95346 13.96788 c 53.14078 11.5752 48.23544 12.17064 45.55486 14.969 c 44.04987 12.97546 37.60468 14.9014 39.1009 18.90157 c 40.52954 23.43611 45.42398 21.67595 44.34215 18.72054 c 43.7358 20.78606 41.61356 21.21138 40.58844 18.5155 c 40.04752 17.0607 43.68999 13.85228 46.38148 17.7325 c 48.96175 20.49161 44.30943 27.68275 38.05615 24.64226 c 36.92635 26.56165 34.88698 27.91396 32.75822 27.98155 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 160.207 21.061 cm 0 G 0 g q 1 0 0 1 -72.019 -224.838 cm q 0 G 0 g 0.3985 w q 0.94621 0.89558 0.75005 RG 0.94621 0.89558 0.75005 rg 82.71918 46.71199 m 79.65947 46.68176 76.84167 44.34505 76.50905 40.47713 c 74.03488 41.40355 72.00333 41.16165 70.68378 40.1225 c 69.3505 39.07236 68.74844 37.22223 69.12508 35.01474 c 69.12508 35.00925 l 69.1278 35.00099 l 69.6254 33.65945 70.34839 32.99144 71.19786 32.6973 c 72.05008 32.40314 73.01498 32.48012 74.01564 32.59282 c 75.01355 32.70555 76.04721 32.85397 77.02586 32.72752 c 78.00453 32.59833 78.9282 32.1997 79.73093 31.2018 c 80.56389 29.89874 80.19554 28.49672 79.36256 27.74072 c 78.94745 27.36136 78.41689 27.14694 77.85883 27.18542 c 77.30351 27.2239 76.72072 27.51256 76.1929 28.1641 c 75.43416 29.21698 73.94417 30.14342 72.2425 30.76744 c 70.57108 31.37775 68.69621 31.69113 67.09627 31.52895 c 67.84676 33.93437 67.62408 36.44977 66.42549 38.27238 c 65.21042 40.11975 63.00291 41.24962 59.86348 40.82076 c 59.86075 40.82076 l 59.858 40.81801 l 57.4993 40.31767 56.17975 39.07236 55.63544 37.63736 c 55.09113 36.20508 55.31929 34.58864 56.02855 33.3433 c 56.73781 32.09799 57.9364 31.21829 59.33292 31.27327 c 60.7102 31.33101 62.25792 32.30966 63.70941 34.6821 c 64.11353 34.09383 64.2345 33.23335 64.03932 32.33441 c 63.83864 31.39424 63.30257 30.42381 62.4311 29.7173 c 62.42836 29.7173 l 62.42836 29.7173 l 60.54526 28.07063 58.48346 27.74348 56.27872 28.1091 c 54.07396 28.47473 51.72902 29.53587 49.32085 30.66847 c 46.91267 31.79836 44.43852 32.99968 41.95886 33.63472 c 39.48196 34.267 36.99683 34.33298 34.58038 33.19212 c 34.289 33.0574 l 34.6079 33.06291 l 42.1458 33.2086 46.01099 30.39359 49.3346 27.92491 c 50.99503 26.69334 52.52077 25.54424 54.30214 24.90096 c 56.05879 24.26591 58.06836 24.13672 60.67995 24.89546 c 60.19337 21.92647 60.89163 19.77397 62.1727 18.37468 c 63.46751 16.95892 65.34512 16.31015 67.15399 16.3239 c 68.96288 16.3404 70.71127 17.01666 71.74492 18.26749 c 72.77856 19.52106 73.0892 21.34644 72.03906 23.61714 c 71.98134 23.74086 l 71.91812 23.62265 l 71.13737 22.22887 70.23843 21.50311 69.38898 21.23921 c 68.54227 20.97255 67.7368 21.15948 67.1375 21.60483 c 66.53545 22.04744 66.13959 22.74844 66.1121 23.50995 c 66.08461 24.26868 66.42274 25.09065 67.30519 25.7834 c 67.30794 25.78615 l 69.312 27.17168 71.85213 26.99574 73.74623 25.57173 c 75.64034 24.15047 76.88841 21.48114 76.28911 17.86337 c 75.92899 15.80707 74.98056 14.28134 73.56755 13.33842 c 72.15453 12.39824 70.27419 12.03537 68.05019 12.324 c 63.60222 12.90407 57.7907 16.09572 51.6823 22.42406 c 51.67955 22.4268 l 51.67679 22.42955 l 41.78018 30.56401 33.17014 33.32408 24.87897 31.85883 c 16.5878 30.39359 8.62927 24.71127 0.01923 15.98851 c 0.10995 15.88405 l 7.77432 21.58286 15.32324 27.01775 23.32849 28.64517 c 31.33374 30.26987 39.8036 28.09811 49.34834 18.55063 c 49.34834 18.55063 49.34834 18.54788 49.35109 18.54788 c 55.7564 10.7818 62.26892 6.14137 68.45428 4.41772 c 74.64244 2.6913 80.50893 3.88991 85.59743 7.78532 c 85.59743 7.78532 l 85.59743 7.78807 l 89.59181 11.04295 91.64261 15.94452 93.89684 19.88393 c 95.02396 21.855 96.20055 23.58415 97.69054 24.74976 c 99.17778 25.9181 100.97566 26.52565 103.36736 26.25899 c 103.36736 26.25899 l 103.36736 26.25899 l 104.2223 26.18202 104.85735 25.75316 105.27795 25.14288 c 105.7013 24.53258 105.90749 23.74359 105.89374 22.95462 c 105.87724 22.16565 105.64082 21.38217 105.18172 20.78288 c 104.72264 20.18633 104.04636 19.77121 103.13916 19.71623 c 102.29247 19.68324 101.73442 19.90042 101.40176 20.23305 c 101.06912 20.56569 100.95367 21.01929 101.01414 21.48114 c 101.1351 22.40756 101.95982 23.34225 103.11719 23.2955 c 103.29036 23.28726 l 103.16667 23.41371 l 102.55637 24.02402 101.79489 24.3924 101.04164 24.3154 c 100.2884 24.2412 99.55714 23.72162 99.01834 22.60275 c 99.01834 22.59999 l 99.01558 22.59724 l 98.22935 20.72514 98.55649 19.11694 99.46368 17.97607 c 100.36812 16.83797 101.84438 16.16446 103.35086 16.12596 c 104.85735 16.08746 106.39955 16.68677 107.42221 18.0998 c 108.44211 19.50731 108.94243 21.71756 108.40636 24.88446 c 109.95134 26.1353 110.00082 28.37303 109.00568 30.04721 c 108.01326 31.71313 105.9707 32.81825 103.3536 31.85332 c 103.43057 32.65056 103.25188 33.39555 102.81752 33.9481 c 102.36668 34.5254 101.65193 34.8938 100.72826 34.91302 c 98.87813 34.95702 96.1923 33.62648 92.95117 29.84926 c 91.7718 28.53796 89.0365 28.12836 86.5596 28.82663 c 84.07994 29.52489 81.8697 31.31177 81.69377 34.36047 c 81.69377 34.36324 l 81.3089 40.59534 89.11623 40.75478 89.9272 37.48889 c 89.9272 37.48889 l 89.9272 37.48616 l 90.40002 35.77074 89.85847 34.45119 88.98152 33.75844 c 88.1403 33.09315 87.0022 33.02443 86.12524 33.73643 c 87.0022 33.95636 87.60974 34.27798 87.94513 34.64912 c 88.29976 35.04773 88.37398 35.49583 88.21454 35.8807 c 87.89839 36.65044 86.7108 37.14803 85.21806 36.67517 c 85.2153 36.67517 l 85.2153 36.67242 l 83.97823 36.22433 83.42567 34.86356 83.88751 33.54126 c 84.34935 32.21896 85.8201 30.93513 88.58841 30.58876 c 88.59114 30.58876 l 88.59114 30.58876 l 90.61996 30.39359 92.16768 31.05609 93.21782 32.15298 c 94.26796 33.24985 94.82053 34.77559 94.87549 36.3123 c 94.93323 37.84627 94.49065 39.39124 93.54495 40.52386 c 92.60477 41.64822 91.16153 42.35748 89.23444 42.24753 c 87.63449 45.35396 85.10811 46.734 82.71918 46.71199 c 82.71918 46.57454 m 85.0641 46.59653 87.55476 45.24673 89.13272 42.1513 c 89.15471 42.11006 l 89.1987 42.11282 l 91.11205 42.23651 92.51682 41.54102 93.43774 40.43864 c 94.36142 39.33627 94.79305 37.82155 94.73805 36.31781 c 94.68582 34.81133 94.1415 33.31583 93.11887 32.24644 c 92.0962 31.17981 90.59523 30.53377 88.60489 30.72621 c 85.87233 31.0671 84.4593 32.32341 84.01672 33.58797 c 83.57411 34.8498 84.09369 36.11986 85.2593 36.54323 c 86.70529 37.00232 87.81042 36.50473 88.08807 35.82848 c 88.22552 35.49033 88.17053 35.10822 87.84065 34.7426 c 87.51352 34.37697 86.90598 34.03333 85.95206 33.81891 c 85.82285 33.79141 l 85.91907 33.7007 l 86.85925 32.85124 88.14856 32.9227 89.06674 33.65121 c 89.98767 34.37971 90.54298 35.76524 90.06189 37.52188 c 90.05916 37.52188 l 89.1987 40.9857 81.16594 40.6998 81.5563 34.35222 c 81.73775 31.24028 84.00574 29.40392 86.5211 28.69466 c 89.0365 27.98541 91.81305 28.38127 93.05562 29.75854 c 93.05562 29.75854 l 93.05562 29.76129 l 96.28302 33.52202 98.9441 34.8168 100.72275 34.77559 c 101.61345 34.75633 102.28423 34.40721 102.71033 33.86288 c 103.13916 33.32133 103.32335 32.57907 103.2244 31.77086 c 103.21065 31.65814 l 103.31511 31.69939 l 105.92122 32.70279 107.91154 31.61417 108.88747 29.97572 c 109.86063 28.34004 109.80563 26.15727 108.29366 24.96144 c 108.26067 24.93669 l 108.26892 24.89822 l 108.80772 21.73404 108.3074 19.5568 107.31224 18.1795 c 106.31433 16.805 104.8216 16.22493 103.3536 16.26067 c 101.8856 16.29916 100.4451 16.95892 99.57089 18.0613 c 98.69394 19.16367 98.3723 20.70865 99.14203 22.54501 c 99.14203 22.54501 99.14203 22.54501 99.14479 22.54501 c 99.66711 23.63364 100.35713 24.10924 101.05539 24.18071 c 101.70967 24.24394 102.38043 23.92505 102.94675 23.40273 c 101.81413 23.3505 101.00316 22.44055 100.87946 21.50038 c 100.81348 21.00279 100.93993 20.50246 101.30556 20.13408 c 101.67117 19.76846 102.27046 19.54305 103.14192 19.57878 c 103.14467 19.57878 l 103.14467 19.57878 l 104.0931 19.6365 104.8106 20.07361 105.28894 20.7004 c 105.77002 21.32718 106.01468 22.13817 106.02844 22.95187 c 106.04494 23.7656 105.83325 24.58206 105.39066 25.21985 c 104.94804 25.85764 104.27454 26.31398 103.38109 26.39645 c 100.95917 26.66586 99.1173 26.04457 97.60533 24.85973 c 96.09334 23.67213 94.9085 21.92923 93.77863 19.95265 c 91.51614 15.99951 89.47086 11.11992 85.50946 7.89253 c 80.45119 4.0191 74.64244 2.83426 68.49002 4.54967 c 62.3404 6.26234 55.84712 10.88626 49.45006 18.64134 c 49.45006 18.6441 l 49.4473 18.64685 l 39.87782 28.21358 31.3475 30.41283 23.30101 28.77713 c 15.52116 27.19917 8.19492 22.03918 0.78896 16.54657 c 9.12961 24.87622 16.8737 30.3056 24.90096 31.72412 c 33.14813 33.18112 41.71146 30.44307 51.58606 22.32509 c 51.58882 22.32509 51.58882 22.32509 51.58882 22.32509 c 57.71097 15.98575 63.53899 12.77486 68.03369 12.1893 c 70.27966 11.89516 72.19577 12.26079 73.64178 13.2257 c 75.08778 14.19063 76.06094 15.75484 76.42381 17.84137 c 76.42381 17.84137 l 77.03137 21.50038 75.76405 24.22745 73.8287 25.68169 c 71.89063 27.13596 69.28177 27.31738 67.22823 25.89612 c 67.22546 25.89612 l 67.22546 25.89337 l 66.31003 25.17862 65.94716 24.3099 65.97466 23.50444 c 66.00488 22.70172 66.42274 21.96222 67.05502 21.49213 c 67.68732 21.02478 68.53952 20.82686 69.4302 21.10725 c 70.29343 21.37666 71.18413 22.10516 71.95659 23.43571 c 72.91878 21.2612 72.61913 19.54305 71.63771 18.35545 c 70.63705 17.14311 68.92989 16.4751 67.15399 16.46135 c 65.37811 16.4476 63.53899 17.08537 62.27165 18.46815 c 61.0071 19.84818 60.30884 21.97871 60.8229 24.97243 c 60.8394 25.07964 l 60.73494 25.04941 l 58.09859 24.26317 56.10277 24.39514 54.34612 25.03017 c 52.59222 25.66245 51.0775 26.8033 49.4143 28.03764 c 46.14842 30.46231 42.29425 33.2306 34.97626 33.18936 c 37.25247 34.1543 39.58368 34.0993 41.92587 33.50002 c 44.38629 32.87321 46.85493 31.67738 49.2631 30.54478 c 51.67404 29.41216 54.02449 28.34277 56.25397 27.9744 c 58.48622 27.60329 60.60298 27.93867 62.51634 29.61285 c 62.51634 29.61285 l 63.41527 30.34135 63.96509 31.33652 64.17403 32.30417 c 64.38293 33.27458 64.25099 34.22028 63.7699 34.8498 c 63.70941 34.92953 l 63.6572 34.84431 l 62.2002 32.41689 60.66345 31.46571 59.32742 31.41074 c 57.99138 31.35849 56.83952 32.1997 56.14676 33.41203 c 55.45674 34.62439 55.23682 36.19958 55.76465 37.59062 c 56.2897 38.97888 57.56253 40.19122 59.88548 40.68332 c 62.98367 41.10666 65.1252 40.00429 66.31003 38.19815 c 67.49763 36.39203 67.72029 33.87665 66.94507 31.47946 c 66.91483 31.37775 l 67.01929 31.38873 l 68.60826 31.57018 70.5106 31.25403 72.19577 30.63824 c 73.8837 30.0197 75.35168 29.09877 76.08293 28.08162 c 76.08568 28.07887 l 76.08568 28.07611 l 76.63275 27.4026 77.25403 27.0892 77.85059 27.04797 c 78.44713 27.00673 79.01617 27.2404 79.45604 27.639 c 80.33572 28.43898 80.71509 29.92075 79.84366 31.27603 c 79.84091 31.28152 l 79.83815 31.28429 l 79.01343 32.30966 78.04851 32.73027 77.04236 32.86223 c 76.03896 32.99419 74.99706 32.84026 73.99915 32.72752 c 73.004 32.61757 72.05556 32.5461 71.2446 32.82649 c 70.43361 33.10689 69.74635 33.73369 69.25703 35.04224 c 68.8914 37.21399 69.48244 39.00089 70.769 40.01527 c 72.05832 41.0297 74.05688 41.2771 76.53928 40.32593 c 76.6245 40.29294 l 76.63275 40.38365 l 76.9269 44.24335 79.7062 46.5443 82.71918 46.57454 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -87.501 4.663 cm 0 G 0 g q 1 0 0 1 125.698 -247.72 cm q 0 G 0 g 0.3985 w q 0.9562 0.915 0.79648 RG 0.9562 0.915 0.79648 rg -68.38983 91.65018 m -60.9553 91.7478 -54.90224 87.04694 -53.0668 80.2714 c -44.79753 84.42557 -31.8957 73.26157 -34.33646 66.50557 c -16.47017 58.38275 -29.47939 40.07222 -41.31702 47.42867 c -49.04443 53.02773 -46.60857 60.98947 -38.1294 61.1408 c -43.6162 63.29353 -51.38756 61.00412 -47.85335 50.88963 c -45.5932 44.51439 -31.38315 38.4711 -23.17735 47.73132 c -15.86487 53.28647 -0.12202 41.12175 -11.94014 31.1342 c -1.21059 8.28389 -32.47174 0.12202 -39.14961 16.8558 c -42.8254 27.39497 -27.51213 34.35599 -25.59857 21.69826 c -20.5511 31.01216 -41.99066 41.96138 -61.60944 24.50024 c -72.46588 13.15564 -85.66547 10.82715 -103.10219 15.44994 c -85.72891 14.82999 -72.82222 18.54968 -62.4344 36.10358 c -42.82051 31.84201 -48.01443 55.47337 -58.71469 55.53683 c -62.59059 67.49162 -78.37738 70.9282 -86.0511 58.40715 c -99.19211 65.22173 -117.39034 48.63438 -103.8393 35.28836 c -117.82968 25.71086 -132.73778 33.5896 -139.98682 41.25356 c -149.26169 48.93214 -158.87822 49.45937 -167.52826 44.6169 c -171.3163 41.68314 -180.27873 37.12868 -190.69098 36.34276 c -184.68674 38.6517 -178.98514 41.34142 -171.45786 48.32686 c -162.7639 55.32204 -150.8384 55.32204 -137.88777 44.93422 c -115.80386 33.74092 -113.38263 61.55084 -128.52016 59.69098 c -134.48535 58.31442 -136.13531 52.94965 -131.8884 51.02144 c -132.88423 54.69232 -131.12201 57.37227 -126.62614 57.1819 c -116.05771 53.1986 -124.63449 39.50108 -137.37521 47.38472 c -145.68353 52.89107 -141.49033 65.3584 -130.16035 64.32353 c -136.01816 74.08165 -123.24327 83.86418 -115.61836 77.18141 c -114.18808 80.72539 -109.3017 82.90254 -105.42091 80.9841 c -101.13007 78.19676 -103.64893 71.89474 -101.091 68.7364 c -89.0532 52.54448 -71.04536 73.81319 -89.02393 78.53847 c -74.64304 69.05371 -97.38107 57.6603 -100.26115 74.22322 c -102.08684 86.30981 -86.82726 90.8789 -82.65845 85.68987 c -77.81113 89.8001 -72.85152 91.58673 -68.38983 91.65018 c -73.31526 62.62477 m -68.55092 62.77611 -63.58641 60.05223 -60.25725 52.85687 c -50.57234 53.50612 -49.40079 31.08537 -63.70358 40.43347 c -76.48825 6.10187 -129.26703 16.8558 -147.00154 33.98499 c -152.36632 39.04224 -161.58746 39.38394 -169.09521 35.01988 c -175.88051 29.64534 -189.49013 29.9187 -197.47137 35.21025 c -191.07661 33.58472 -183.58353 33.73604 -173.2201 38.6517 c -162.98846 45.27592 -155.74431 46.755 -148.62708 43.68456 c -141.63188 39.84769 -139.0447 35.33717 -131.9421 31.26111 c -118.93289 25.90611 -107.95439 27.23875 -101.95505 33.50174 c -98.58679 29.04004 -84.16196 33.35042 -87.51067 42.30309 c -90.70805 52.4517 -101.66214 48.51234 -99.24092 41.89792 c -97.88387 46.52069 -93.13416 47.4726 -90.83986 41.43906 c -89.62924 38.18309 -97.78136 31.00241 -103.80511 39.6866 c -109.57994 45.8617 -99.1677 61.95601 -85.17244 55.15118 c -82.64381 59.44691 -78.0796 62.47345 -73.31526 62.62477 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -13.517 104.885 cm 0 G 0 g q 1 0 0 1 -13.343 -210.521 cm q 0 G 0 g 0.3985 w q 0.95396 0.91064 0.78609 RG 0.95396 0.91064 0.78609 rg -52.38351 19.63618 m -51.15988 19.60797 -50.00009 19.14317 -49.35707 18.27594 c -44.35857 22.2112 -37.32408 16.60382 -41.77614 12.23344 c -39.59319 7.53935 -46.72713 5.69052 -48.38737 8.83131 c -49.65259 11.50134 -48.03096 13.50313 -46.34698 12.97151 c -48.09483 11.73004 -47.8097 9.87675 -45.67575 9.89456 c -42.50082 10.049 -42.93741 15.12921 -46.6024 16.37662 c -51.4435 17.62698 -54.87239 12.58392 -53.48984 9.27235 c -52.0286 5.10246 -46.32619 4.45798 -40.82127 7.51707 c -23.28487 18.11555 -24.61987 1.22067 -11.30235 6.49242 c -20.89697 0.48706 -23.89668 9.61539 -31.86372 7.63141 c -37.73395 6.25037 -38.74524 0.03711 -50.63121 0.93553 c -54.04376 0.98454 -62.52907 8.29819 -56.48065 13.07693 c -58.0592 17.63887 -55.07286 19.69708 -52.38351 19.63618 c -17.34929 14.58273 m -15.35196 14.64064 -13.31009 13.3769 -13.37393 10.93109 c -13.52243 8.78528 -15.00893 8.08435 -16.3885 8.97684 c -17.46216 9.65697 -16.98991 11.08702 -15.28662 10.57321 c -14.64064 10.45145 -14.56343 11.15385 -15.21237 11.93349 c -16.44641 13.77043 -19.26347 12.88388 -19.41493 11.25038 c -19.60797 9.06593 -17.99973 7.04634 -15.23613 7.48293 c -13.27888 7.96852 -12.46066 8.58925 -12.18443 9.67033 c -11.57857 8.93674 -10.9593 8.8907 -10.07277 9.19514 c -7.54231 9.86339 -6.04099 7.85567 -3.53578 7.34036 c -2.11314 7.07158 -0.97563 7.74725 -0.03711 8.52391 c -0.81377 6.04395 -3.87584 5.80933 -5.88802 6.96169 c -8.62935 8.515 -10.18562 8.45116 -14.00655 6.5548 c -18.72292 4.97475 -22.55275 8.8209 -20.69946 12.56313 c -20.0624 13.88478 -18.7155 14.54263 -17.34929 14.58273 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 83.628 37.55 cm 0 G 0 g q 1 0 0 1 12.808 -219.738 cm q 0 G 0 g 0.3985 w q 0.94911 0.90121 0.76352 RG 0.94911 0.90121 0.76352 rg -63.7979 35.97403 m -61.44655 35.95071 -59.27966 34.15063 -59.05067 31.15048 c -55.19821 32.6283 -52.79173 30.39357 -53.36421 27.0139 c -54.88654 22.9155 -59.02312 27.2217 -61.5356 24.09436 c -62.85226 22.04408 -60.38007 19.64609 -58.72205 21.68788 c -57.575 23.28653 -54.15718 24.54172 -51.68286 24.26184 c -52.88716 27.98709 -50.98955 32.08763 -46.1766 31.43037 c -38.95508 29.89955 -44.62883 19.32382 -49.14069 26.8464 c -49.85945 25.90927 -49.54779 23.98622 -48.18234 22.87946 c -42.32838 17.75697 -34.09338 29.04721 -26.69164 25.55307 c -38.34445 25.7757 -38.68582 16.83253 -46.85721 19.26868 c -45.26279 9.9863 -58.72841 11.24147 -55.51201 18.19374 c -53.0907 13.85785 -49.10678 17.75273 -51.88004 19.93019 c -55.0095 22.09496 -59.82243 19.38106 -58.88954 13.76878 c -57.77853 7.38052 -49.25731 7.48654 -39.82227 17.25871 c -24.57352 29.79141 -13.32567 25.74178 -0.053 12.29312 c -11.87755 21.08362 -23.3565 29.08751 -38.09851 14.34338 c -47.97456 2.3704 -58.15807 0.053 -65.98384 6.0469 c -72.11769 11.04642 -72.30428 21.13661 -79.72722 20.30548 c -82.42416 20.06165 -82.41144 15.32718 -79.547 15.1533 c -76.89882 15.0473 -77.68967 18.09407 -79.53004 18.01987 c -78.60562 18.94853 -77.23595 19.1139 -76.4154 17.40924 c -74.01106 11.6846 -85.22711 9.41383 -83.55424 19.21144 c -85.93527 21.09421 -83.72388 26.06194 -79.66362 24.4972 c -79.9753 27.03723 -76.7186 28.80127 -71.72969 22.9876 c -69.86177 20.91188 -63.22754 21.74513 -62.95403 26.4987 c -62.65509 31.34981 -68.76349 31.52155 -69.40804 28.92636 c -70.14375 26.24638 -67.71397 24.75584 -66.30188 26.03224 c -69.27658 26.7001 -68.00656 28.95392 -65.74002 28.23515 c -63.88481 27.56305 -64.08624 24.17491 -68.33095 23.64487 c -74.53052 23.04483 -74.75102 32.91666 -68.79105 32.53288 c -67.56555 34.9351 -65.62553 35.991 -63.7979 35.97403 c -64.7838 20.5281 m -65.77396 20.54932 -66.95705 20.26944 -68.26735 19.54433 c -70.86888 17.97746 -69.13452 11.70369 -64.24525 10.67749 c -67.80513 13.25569 -68.87796 16.47421 -66.11531 18.66017 c -66.71321 16.2728 -64.42548 13.92993 -62.12502 16.87706 c -60.98645 18.44604 -62.25223 20.47087 -64.7838 20.5281 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 30.908 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 33.549 31.999 Td[<25713ed93758315a26d62fde2599>]TJ ET 0 G 0 g q 1 0 0 1 224.782 30.908 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -27.27 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -27.27 Td[<30873ba53b9d2628231f2cc226283d2c23f438b83b251c6838ad3ea51ba225993a0f1ba2352a337326de35c1369e2ad22628>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -44.507 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -44.507 Td[<36b13bbe346529573160345b29f627023b9d26282a881c68234c3bd535ab3d31369b2d9931622ab923342c232a8035ab2b7a>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -61.745 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -61.745 Td[<26203b0033b82b69350b>]TJ /F8 10.9091 Tf 58.178 0 Td[<0024001c0048006900690042006900480032002b00420060002b00480032>]TJ /F4 10.9091 Tf 85.909 0 Td[<1c68235637583b9d262838b83b252ab923502a87>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -78.982 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -78.982 Td[<34722d0726272c4c26ea376b350b2628352d2ff7372129593be734493f421c64240a1c6531451c682d993bbe3c6b>]TJ /F8 10.9091 Tf 0 -13.549 Td[<002400620042004b005400480032005400600051003b0060003200620062004b001c0060004600320060>]TJ /F4 10.9091 Tf 123.905 0 Td[<2b8826093d182647341f25a01ba3>]TJ /F5 10.9091 Tf 76.364 0 Td[<0055>]TJ /F4 10.9091 Tf 4.243 0 Td[<3132344d3e97>]TJ -204.512 -13.55 Td[<35c1>]TJ /F8 10.9091 Tf 10.909 0 Td[<00240062003f0032004d004b001c005400600051003b0060003200620062004b001c0060004600320060>]TJ /F5 10.9091 Tf 120.272 0 Td[<0056>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 124.061 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+31 0 obj
+<</Length 77710>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 257.125 27.09 cm 0 G 0 g q 1 0 0 1 -73.073 -210.583 cm q 0 G 0 g 0.3985 w q 0.94514 0.89351 0.74506 RG 0.94514 0.89351 0.74506 rg 15.02646 20.13719 m 13.39296 20.15863 12.063 19.12576 11.65973 17.63707 c 9.84282 18.5498 7.00806 16.09688 7.54433 14.61247 c 3.61877 12.82773 6.47714 8.80458 9.07808 10.42091 c 10.77592 11.65114 10.24072 13.40048 8.37772 13.43372 c 9.58325 13.90672 11.29076 13.4037 10.51422 11.18137 c 10.01764 9.78061 6.89543 8.45277 5.09247 10.48741 c 3.4858 11.70798 0.0268 9.03519 2.62346 6.84073 c 0.26598 1.82011 7.13461 0.0268 8.60187 3.7035 c 9.4095 6.01915 6.0449 7.54863 5.62445 4.76749 c 4.51544 6.81392 9.22609 9.21965 13.53668 5.38313 c 15.92204 2.89052 18.82224 2.3789 22.6534 3.39462 c 18.83618 3.25839 16.00035 4.07568 13.71796 7.9326 c 9.40843 6.99625 10.54962 12.18848 12.90067 12.20244 c 13.75227 14.82912 17.22092 15.5842 18.90697 12.8331 c 21.79428 14.33038 25.79277 10.68584 22.81535 7.75348 c 25.8893 5.64912 29.16489 7.38023 30.75763 9.06415 c 32.79547 10.75127 34.9084 10.8671 36.80898 9.80313 c 37.64128 9.15852 39.61047 8.15784 41.89824 7.98515 c 40.579 8.49248 39.32625 9.08345 37.67238 10.61827 c 35.76216 12.15524 33.1419 12.15524 30.29643 9.87285 c 25.44418 7.41348 24.9122 13.52382 28.23819 13.11517 c 29.54886 12.81273 29.91138 11.63397 28.97824 11.21033 c 29.19705 12.01688 28.80986 12.60571 27.82205 12.56387 c 25.49995 11.68867 27.38445 8.6791 30.18379 10.41127 c 32.0093 11.62111 31.08797 14.3604 28.59856 14.13303 c 29.88564 16.27707 27.07877 18.42647 25.40343 16.95813 c 25.08917 17.73682 24.01555 18.21516 23.16287 17.79366 c 22.2201 17.18123 22.77353 15.79657 22.21152 15.10262 c 19.56657 11.54495 15.60992 16.21808 19.56015 17.2563 c 16.4004 15.17235 21.39636 12.66899 22.02917 16.30817 c 22.43031 18.9638 19.0775 19.96773 18.16154 18.82759 c 17.0965 19.73068 16.00677 20.12325 15.02646 20.13719 c 16.10867 13.75978 m 15.06186 13.79303 13.97107 13.19455 13.2396 11.6136 c 11.11165 11.75624 10.85423 6.83002 13.99683 8.88396 c 16.80585 1.34067 28.40228 3.7035 32.29887 7.4671 c 33.47762 8.57828 35.50366 8.65335 37.15326 7.69449 c 38.6441 6.5136 41.6344 6.57367 43.38802 7.73631 c 41.98296 7.37915 40.33661 7.4124 38.05956 8.49248 c 35.8115 9.94792 34.21983 10.27292 32.65605 9.59828 c 31.11906 8.75523 30.55061 7.7642 28.99004 6.86862 c 26.1317 5.69202 23.71951 5.98483 22.40135 7.36093 c 21.66129 6.38062 18.4919 7.32768 19.22766 9.29474 c 19.93018 11.52458 22.33699 10.65903 21.80501 9.20572 c 21.50684 10.22142 20.46324 10.43057 19.95914 9.1049 c 19.69315 8.38951 21.48431 6.81177 22.80785 8.71985 c 24.07668 10.07663 21.78893 13.61285 18.7139 12.1177 c 18.15833 13.06155 17.15549 13.72653 16.10867 13.75978 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -.996 109.602 cm 0 G 0 g q 1 0 0 1 118.063 -244.078 cm q 0 G 0 g 0.3985 w q 0.9481 0.89925 0.75882 RG 0.9481 0.89925 0.75882 rg -142.97708 80.62119 m -137.70749 80.56892 -132.85132 76.53477 -132.33812 69.8112 c -123.70439 73.12311 -118.31128 68.11485 -119.59421 60.54073 c -123.00589 51.35579 -132.27635 61.0064 -137.90706 53.99771 c -140.85785 49.40286 -135.31743 44.02875 -131.60164 48.60458 c -129.03099 52.18733 -121.37132 55.0003 -115.82616 54.3731 c -118.52509 62.72174 -114.27237 71.91144 -103.48613 70.43842 c -87.302 67.00774 -100.01743 43.3065 -110.12894 60.16534 c -111.73973 58.06512 -111.04124 53.75537 -107.98119 51.27502 c -94.8619 39.79503 -76.4065 65.09756 -59.81848 57.26685 c -85.93353 57.76578 -86.69856 37.72331 -105.0114 43.18295 c -101.43816 22.38025 -131.61589 25.19322 -124.40764 40.77386 c -118.98126 31.05675 -110.0529 39.78554 -116.26807 44.66547 c -123.28148 49.5169 -134.06773 43.4348 -131.977 30.85718 c -129.48715 16.54047 -110.39027 16.77805 -89.24544 38.67839 c -55.07158 66.76538 -29.86409 57.68974 -0.11876 27.55003 c -26.61871 47.25037 -52.34415 65.18784 -85.38234 32.14488 c -107.51553 5.31232 -130.33769 0.11876 -147.87602 13.5517 c -161.62254 24.75607 -162.0407 47.36916 -178.67622 45.50652 c -184.7203 44.96007 -184.69179 34.34964 -178.27231 33.96 c -172.33751 33.72243 -174.10988 40.55054 -178.23431 40.38425 c -176.16258 42.46545 -173.09302 42.83607 -171.25414 39.01576 c -165.86577 26.18631 -191.00198 21.0973 -187.25293 43.05467 c -192.58902 47.27414 -187.63307 58.40724 -178.53365 54.90053 c -179.23215 60.593 -171.93361 64.54637 -160.75299 51.51735 c -156.56677 46.8655 -141.6989 48.73288 -141.08592 59.38608 c -140.41594 70.25786 -154.10544 70.64273 -155.54993 64.82672 c -157.19876 58.82063 -151.75336 55.48022 -148.58878 58.34071 c -155.25534 59.8375 -152.4091 64.88849 -147.32959 63.27768 c -143.17189 61.77141 -143.62329 54.17828 -153.13611 52.99037 c -167.02992 51.64565 -167.5241 73.76933 -154.1672 72.90927 c -151.42076 78.2929 -147.073 80.65921 -142.97708 80.62119 c -145.1866 46.00543 m -147.40561 46.05296 -150.05704 45.42574 -152.99355 43.80067 c -158.82382 40.2892 -154.93698 26.22908 -143.97966 23.92928 c -151.95769 29.70729 -154.36201 36.92029 -148.17064 41.81923 c -149.51059 36.46889 -144.38356 31.2183 -139.22803 37.8231 c -136.67639 41.33932 -139.51312 45.87715 -145.1866 46.00543 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 30.681 206.555 cm 0 G 0 g q 1 0 0 1 71.804 -234.746 cm q 0 G 0 g 0.3985 w q 0.95424 0.91118 0.78737 RG 0.95424 0.91118 0.78737 rg -49.74622 66.6656 m -44.3384 66.73663 -39.93546 63.31723 -38.60036 58.38878 c -32.58536 61.41048 -23.20068 53.28987 -24.97607 48.37563 c -11.98026 42.46715 -21.44305 29.14822 -30.05367 34.49922 c -35.67453 38.57196 -33.9027 44.36325 -27.73502 44.47331 c -31.72607 46.03922 -37.3789 44.3739 -34.80815 37.01672 c -33.16412 32.37941 -22.82785 27.98357 -16.85902 34.71936 c -11.53996 38.76015 -0.08876 29.91164 -8.68515 22.64676 c -0.88057 6.02563 -23.61967 0.08876 -28.47713 12.26079 c -31.15085 19.92688 -20.0121 24.99028 -18.6202 15.78314 c -14.9487 22.558 -30.54367 30.52237 -44.81421 17.82127 c -52.7111 9.5693 -62.31236 7.87558 -74.99571 11.23816 c -62.35854 10.78722 -52.9703 13.49289 -45.41428 26.26146 c -31.14731 23.16162 -34.92532 40.35089 -42.7086 40.39705 c -45.52791 49.09286 -57.01108 51.5926 -62.5929 42.4849 c -72.15155 47.44176 -85.38881 35.37627 -75.53188 25.66846 c -85.70837 18.70186 -96.55241 24.4328 -101.8253 30.0075 c -108.57176 35.59285 -115.56677 35.97633 -121.85872 32.45398 c -124.61412 30.31998 -131.13332 27.00711 -138.70709 26.43542 c -134.33966 28.11494 -130.19237 30.07143 -124.71709 35.15256 c -118.39317 40.24081 -109.71864 40.24081 -100.29846 32.6848 c -84.2348 24.54288 -82.47363 44.77158 -93.48454 43.41875 c -97.82358 42.41743 -99.02374 38.51515 -95.93457 37.11258 c -96.65894 39.78276 -95.37712 41.73213 -92.10684 41.59366 c -84.41945 38.69623 -90.65814 28.73277 -99.92564 34.46727 c -105.96904 38.47253 -102.91893 47.54118 -94.67761 46.78842 c -98.93852 53.8864 -89.64618 61.00214 -84.09987 56.14114 c -83.0595 58.71901 -79.50519 60.30264 -76.68233 58.90718 c -73.56119 56.8797 -75.3934 52.29567 -73.53279 49.9983 c -64.7766 38.22043 -51.67783 53.69112 -64.7553 57.12825 c -54.29475 50.22913 -70.83421 41.94162 -72.92915 53.98938 c -74.25716 62.78108 -63.15746 66.1046 -60.1251 62.33012 c -56.5992 65.31989 -52.99161 66.61946 -49.74622 66.6656 c -53.32895 45.55275 m -49.86339 45.66283 -46.25226 43.6815 -43.83064 38.44768 c -36.78592 38.91994 -35.93373 22.61125 -46.33748 29.41096 c -55.63693 4.43843 -94.02782 12.26079 -106.92775 24.72041 c -110.83005 28.399 -117.53743 28.64755 -122.99852 25.47318 c -127.93408 21.56378 -137.8336 21.76263 -143.63913 25.61166 c -138.98761 24.42924 -133.5372 24.53934 -125.99892 28.11494 c -118.55652 32.93335 -113.28717 34.00922 -108.11015 31.77579 c -103.0219 28.9849 -101.14 25.70398 -95.97363 22.73907 c -86.51085 18.84389 -78.52518 19.81326 -74.16129 24.36888 c -71.71126 21.12349 -61.21873 24.25882 -63.65457 30.77092 c -65.98032 38.15295 -73.94824 35.28749 -72.18706 30.47621 c -71.19995 33.83878 -67.74504 34.53117 -66.07619 30.14243 c -65.19559 27.77406 -71.12538 22.5509 -75.50702 28.8677 c -79.70758 33.35942 -72.13379 45.0663 -61.95374 40.11653 c -60.11446 43.24121 -56.79448 45.44269 -53.32895 45.55275 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.722 216.388 cm 0 G 0 g q 1 0 0 1 -72 -223.547 cm q 0 G 0 g 0.3985 w q 0.95192 0.90666 0.77657 RG 0.95192 0.90666 0.77657 rg 118.02441 44.24199 m 115.26744 44.17844 112.65434 43.13118 111.2056 41.17722 c 99.9435 50.04369 84.09427 37.40979 94.12509 27.56299 c 89.20671 16.9868 105.2801 12.82123 109.02077 19.89767 c 111.87141 25.9135 108.21776 30.42368 104.42358 29.22589 c 108.36162 26.42876 107.71924 22.25314 102.91125 22.2933 c 95.75786 22.64127 96.74153 34.08739 104.99907 36.89789 c 115.90651 39.71507 123.63203 28.35262 120.51704 20.8914 c 117.22476 11.49628 104.37674 10.04419 91.97371 16.93661 c 52.46272 40.81586 55.47063 2.75026 25.46515 14.62799 c 47.08261 1.09743 53.8412 21.66429 71.79163 17.19423 c 85.01773 14.08261 87.29625 0.08363 114.07632 2.10786 c 121.76506 2.21828 140.8832 18.69652 127.25557 29.46344 c 130.8122 39.74184 124.08372 44.37918 118.02441 44.24199 c 39.0894 32.85611 m 34.58925 32.9866 29.98872 30.1393 30.1326 24.62871 c 30.46718 19.79396 33.81636 18.21472 36.92465 20.22557 c 39.34369 21.75797 38.27971 24.98001 34.44203 23.82234 c 32.9866 23.54799 32.8126 25.13057 34.27473 26.88715 c 37.05513 31.02594 43.40219 29.02847 43.74347 25.34804 c 44.17844 20.42633 40.55489 15.87598 34.32828 16.85965 c 29.91846 17.95374 28.07492 19.35231 27.45258 21.78807 c 26.08748 20.13522 24.69226 20.03152 22.6948 20.71742 c 16.9935 22.22304 13.61084 17.69946 7.96642 16.53845 c 4.76111 15.93286 2.1982 17.45523 0.08363 19.2051 c 1.8335 13.61754 8.73262 13.0889 13.26622 15.68527 c 19.44266 19.18501 22.94908 19.04115 31.55794 14.76851 c 42.18431 11.20853 50.81322 19.87425 46.6376 28.30577 c 45.20226 31.28357 42.16757 32.76578 39.0894 32.85611 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.515 158.99 cm 0 G 0 g q 1 0 0 1 -72 -236.389 cm q 0 G 0 g 0.3985 w q 0.9458 0.89479 0.74815 RG 0.9458 0.89479 0.74815 rg 117.96297 66.51637 m 113.61531 66.47324 109.60873 63.14488 109.18533 57.5976 c 102.06207 60.33008 97.61249 56.19804 98.67099 49.94902 c 101.48578 42.371 109.13437 50.3332 113.77995 44.55072 c 116.21451 40.75974 111.64339 36.32585 108.57768 40.10112 c 106.45679 43.05705 100.13719 45.3779 95.56215 44.86043 c 97.78891 51.74846 94.2802 59.33038 85.38104 58.11508 c 72.02837 55.2846 82.5192 35.72995 90.86166 49.63931 c 92.19066 47.90652 91.61438 44.35077 89.08968 42.30437 c 78.26561 32.83281 63.03902 53.70863 49.35312 47.24791 c 70.8993 47.65955 71.53049 31.12355 86.63945 35.62802 c 83.69136 18.46478 108.58945 20.78563 102.64229 33.64041 c 98.16527 25.6233 90.79895 32.82497 95.92676 36.85117 c 101.71317 40.85384 110.61234 35.8358 108.88739 25.45865 c 106.83313 13.64667 91.0773 13.8427 73.63177 31.91153 c 45.4367 55.08466 24.63931 47.5968 0.09799 22.73012 c 21.96173 38.98383 43.18643 53.7831 70.44455 26.52107 c 88.70547 4.38292 107.53487 0.09799 122.00484 11.18079 c 133.34637 20.42494 133.69138 39.08183 147.41647 37.54506 c 152.40315 37.09422 152.37962 28.3401 147.08324 28.01863 c 142.18674 27.82262 143.64903 33.45616 147.0519 33.31894 c 145.34262 35.03606 142.81009 35.34184 141.29291 32.18988 c 136.84724 21.60497 157.58585 17.40628 154.49269 35.52217 c 158.89522 39.00343 154.80632 48.18877 147.29886 45.29558 c 147.87515 49.99214 141.85352 53.25386 132.62895 42.5043 c 129.17514 38.66629 116.9084 40.20697 116.40268 48.99638 c 115.8499 57.96611 127.1444 58.28366 128.33618 53.48515 c 129.69653 48.52985 125.20384 45.77385 122.5929 48.1339 c 128.09312 49.36879 125.74484 53.53612 121.554 52.20712 c 118.1237 50.96439 118.49612 44.69968 126.34465 43.7196 c 137.80772 42.61015 138.21544 60.86324 127.19537 60.15366 c 124.92941 64.5954 121.3423 66.54773 117.96297 66.51637 c 119.78593 37.9567 m 121.61673 37.99591 123.80428 37.47842 126.22704 36.13766 c 131.03731 33.24052 127.83046 21.64026 118.79015 19.7428 c 125.3724 24.50995 127.3561 30.46101 122.24791 34.50287 c 123.35344 30.08858 119.1234 25.7566 114.86983 31.20589 c 112.7646 34.10692 115.10504 37.85085 119.78593 37.9567 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 30.867 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 9.028 31.875 Td[<25713ed93758315a26d62fde2599>]TJ ET BT /F1 20.6585 Tf 160.764 31.875 Td[<1c643a661c65>]TJ ET 0 G 0 g q 1 0 0 1 224.782 30.867 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -37.287 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -37.287 Td[<235637583b9d262835d33f7638b81c682d993bbe3c6b28953f74287d3a11262823563ea025a0375c1ba3>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -54.775 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -54.775 Td[<3eb22956287d3a113a112aad29f6270226de35c13d183a3c26281ba33435230f3ba53972231f2cc235c137ec30bf34e72628>]TJ /F5 10.9091 Tf 0 -13.549 Td[<0054004d003b>]TJ /F4 10.9091 Tf 21.218 0 Td[<2aca>]TJ /F5 10.9091 Tf 14.542 0 Td[<0054>-27<002f0037>]TJ /F4 10.9091 Tf 19.407 0 Td[<26191ba3>]TJ /F8 10.9091 Tf -55.167 -13.55 Td[<002400690042006900480032003b0060001c0054003f0042002b002600240042004d002b0048006d002f0032003b0060001c0054003f0042002b0062002800720042002f0069003f0034006b002b004b0029002600480051003b005100270027>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 196.633 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+34 0 obj
+<</Length 105583>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 179.989 137.468 cm 0 G 0 g q 1 0 0 1 60.304 -231.977 cm q 0 G 0 g 0.3985 w q 0.95473 0.91211 0.78958 RG 0.95473 0.91211 0.78958 rg -45.76779 61.33408 m -40.79247 61.39941 -36.74164 58.2535 -35.51332 53.71918 c -29.97937 56.49922 -21.34523 49.02806 -22.97862 44.50682 c -11.02216 39.07088 -19.72816 26.81712 -27.65015 31.74017 c -32.82149 35.48718 -31.19135 40.81534 -25.51692 40.91661 c -29.18881 42.35727 -34.38954 40.82513 -32.02438 34.05634 c -30.51186 29.7899 -21.00221 25.7456 -15.51073 31.94272 c -10.61707 35.66034 -0.08165 27.51949 -7.99057 20.83562 c -0.81015 5.54373 -21.7307 0.08165 -26.19969 11.28023 c -28.65958 18.33324 -18.41165 22.9917 -17.13106 14.52089 c -13.75319 20.75395 -28.10097 28.08136 -41.23022 16.39603 c -48.49557 8.804 -57.329 7.24573 -68.99799 10.33939 c -57.37146 9.92451 -48.73405 12.4138 -41.78232 24.16121 c -28.65631 21.3093 -32.13219 37.12386 -39.29301 37.16632 c -41.88684 45.1667 -52.45166 47.46652 -57.58707 39.0872 c -66.38129 43.64764 -78.55989 32.54707 -69.49127 23.61565 c -78.85391 17.20619 -88.8307 22.4788 -93.6819 27.60768 c -99.88882 32.74635 -106.3244 33.09917 -112.11317 29.8585 c -114.6482 27.89516 -120.64604 24.84723 -127.6141 24.32127 c -123.59595 25.86647 -119.78033 27.66649 -114.74294 32.34128 c -108.92477 37.02258 -100.94398 37.02258 -92.27718 30.07085 c -77.49818 22.58006 -75.87785 41.19101 -86.0082 39.94637 c -90.00021 39.02513 -91.1044 35.43492 -88.26228 34.14453 c -88.92871 36.60115 -87.7494 38.39464 -84.74069 38.26723 c -77.66808 35.60152 -83.40782 26.43489 -91.93416 31.71077 c -97.49425 35.39572 -94.68806 43.7391 -87.10583 43.04655 c -91.02599 49.57689 -82.47679 56.12354 -77.37405 51.65129 c -76.41689 54.023 -73.14682 55.47998 -70.54971 54.19612 c -67.67819 52.3308 -69.36386 48.11336 -67.65207 45.99974 c -59.59615 35.16377 -47.54492 49.39722 -59.57654 52.55946 c -49.95258 46.2121 -65.16931 38.58739 -67.09671 49.67162 c -68.31848 57.7602 -58.10649 60.81792 -55.31665 57.34532 c -52.07271 60.09596 -48.75365 61.29161 -45.76779 61.33408 c -49.064 41.9097 m -45.8756 42.01099 -42.55327 40.18811 -40.32532 35.37285 c -33.844 35.80734 -33.05997 20.80295 -42.63167 27.05885 c -51.18741 4.08348 -86.50801 11.28023 -98.37628 22.74341 c -101.9665 26.1278 -108.13747 26.35648 -113.1618 23.43599 c -117.70265 19.83925 -126.81047 20.02217 -132.15169 23.56339 c -127.87218 22.47554 -122.85765 22.57681 -115.92226 25.86647 c -109.07504 30.29951 -104.22711 31.28935 -99.46414 29.23456 c -94.7828 26.66684 -93.0514 23.64833 -88.29822 20.92055 c -79.5922 17.33687 -72.24518 18.2287 -68.23029 22.42001 c -65.9762 19.43416 -56.32281 22.31873 -58.56384 28.31004 c -60.70358 35.10172 -68.03427 32.4654 -66.41396 28.0389 c -65.50578 31.13255 -62.3272 31.76958 -60.7918 27.73183 c -59.98163 25.55286 -65.43718 20.7474 -69.4684 26.55904 c -73.33302 30.69154 -66.36494 41.46216 -56.99905 36.90823 c -55.30684 39.78302 -52.25238 41.80844 -49.064 41.9097 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 164.568 169.396 cm 0 G 0 g q 1 0 0 1 -1.645 -215.932 cm q 0 G 0 g 0.3985 w q 0.94751 0.8981 0.75606 RG 0.94751 0.8981 0.75606 rg -52.90701 29.87689 m -50.95003 29.85756 -49.1478 28.363 -48.93504 25.88908 c -47.35257 26.48163 -46.05319 26.3269 -45.20921 25.66228 c -44.35645 24.9906 -43.97137 23.80727 -44.21225 22.39537 c -44.21225 22.39183 l -44.21402 22.38658 l -44.53227 21.52852 -44.9947 21.10126 -45.53802 20.91313 c -46.08308 20.72499 -46.70024 20.77422 -47.34026 20.8463 c -47.97852 20.9184 -48.63963 21.01334 -49.2656 20.93246 c -49.89154 20.84982 -50.48233 20.59488 -50.99576 19.9566 c -51.52852 19.12317 -51.29291 18.22646 -50.76015 17.74292 c -50.49464 17.50026 -50.15529 17.36313 -49.79836 17.38774 c -49.44318 17.41235 -49.07043 17.59698 -48.73283 18.0137 c -48.24754 18.68712 -47.29456 19.27966 -46.20616 19.6788 c -45.13713 20.06914 -43.93797 20.26958 -42.91464 20.16585 c -43.39465 21.70436 -43.25224 23.31319 -42.48561 24.47893 c -41.70845 25.6605 -40.29654 26.38316 -38.28856 26.10887 c -38.28682 26.10887 l -38.28505 26.10712 l -36.77644 25.78711 -35.93245 24.9906 -35.5843 24.07278 c -35.23618 23.1567 -35.38211 22.12282 -35.83575 21.32631 c -36.2894 20.52982 -37.056 19.96715 -37.94922 20.00233 c -38.83012 20.03926 -39.82004 20.66519 -40.74843 22.18262 c -41.00688 21.80634 -41.08424 21.256 -40.95941 20.68102 c -40.83105 20.0797 -40.48819 19.45901 -39.93082 19.00713 c -39.92905 19.00713 l -39.92905 19.00713 l -38.72462 17.9539 -37.4059 17.74469 -35.99576 17.97852 c -34.5856 18.21239 -33.08577 18.89108 -31.54552 19.6155 c -30.00525 20.33815 -28.42278 21.10652 -26.8368 21.5127 c -25.2526 21.9171 -23.66309 21.95929 -22.11755 21.22961 c -21.93117 21.14345 l -22.13513 21.14697 l -26.95638 21.24017 -29.42853 19.43967 -31.5543 17.86072 c -32.61632 17.07301 -33.59216 16.33804 -34.73154 15.9266 c -35.85509 15.52043 -37.1404 15.4378 -38.81078 15.9231 c -38.49956 14.02412 -38.94617 12.64738 -39.76553 11.75241 c -40.5937 10.8469 -41.79462 10.43195 -42.95157 10.44072 c -44.10852 10.45128 -45.22679 10.88382 -45.88791 11.68384 c -46.54903 12.48563 -46.74771 13.65314 -46.07605 15.10548 c -46.03912 15.1846 l -45.99869 15.109 l -45.49933 14.21753 -44.92436 13.75334 -44.38106 13.58455 c -43.83951 13.414 -43.32433 13.53357 -42.94102 13.8184 c -42.55595 14.10149 -42.30275 14.54985 -42.28517 15.03691 c -42.2676 15.52219 -42.48386 16.04793 -43.04826 16.49101 c -43.05002 16.49277 l -44.33182 17.37895 -45.95648 17.26642 -47.16795 16.35562 c -48.37941 15.44658 -49.17767 13.73929 -48.79437 11.42537 c -48.56404 10.11017 -47.95743 9.13431 -47.05367 8.53122 c -46.1499 7.92989 -44.94722 7.69778 -43.52477 7.88242 c -40.67986 8.2534 -36.96281 10.29478 -33.0559 14.34238 c -33.05414 14.34413 l -33.05238 14.3459 l -26.72252 19.54869 -21.21556 21.31401 -15.91254 20.37685 c -10.60953 19.43967 -5.51927 15.80528 -0.01228 10.22621 c -0.07031 10.1594 l -4.97244 13.80435 -9.8007 17.28049 -14.92085 18.3214 c -20.041 19.36055 -25.4583 17.9715 -31.5631 11.86494 c -31.5631 11.86494 -31.5631 11.86319 -31.56487 11.86319 c -35.6617 6.89601 -39.82707 3.92801 -43.78323 2.82556 c -47.74115 1.72134 -51.49335 2.48796 -54.74796 4.97948 c -54.74796 4.97948 l -54.74796 4.98123 l -57.30275 7.06305 -58.61444 10.19809 -60.05623 12.71771 c -60.77713 13.97841 -61.52968 15.08438 -62.48268 15.8299 c -63.43391 16.57718 -64.58385 16.96574 -66.11356 16.7952 c -66.11356 16.7952 l -66.11356 16.7952 l -66.66039 16.74596 -67.06654 16.47166 -67.33557 16.08133 c -67.60635 15.691 -67.73822 15.18636 -67.72943 14.68173 c -67.71887 14.1771 -67.56766 13.67598 -67.27403 13.29268 c -66.9804 12.91112 -66.54785 12.64561 -65.96762 12.61046 c -65.42607 12.58936 -65.06912 12.72826 -64.85637 12.94102 c -64.64363 13.15378 -64.56978 13.4439 -64.60846 13.73929 c -64.68582 14.33182 -65.2133 14.92964 -65.95355 14.89975 c -66.06433 14.89449 l -65.9852 14.97537 l -65.59486 15.3657 -65.10782 15.60132 -64.62604 15.5521 c -64.14427 15.50461 -63.67656 15.1723 -63.33194 14.45667 c -63.33194 14.45491 l -63.33017 14.45316 l -62.8273 13.25575 -63.03654 12.22716 -63.61678 11.49747 c -64.19525 10.76953 -65.13947 10.33875 -66.10301 10.31412 c -67.06654 10.2895 -68.05296 10.67282 -68.70703 11.57658 c -69.35938 12.47684 -69.67937 13.8905 -69.3365 15.91605 c -70.32466 16.71608 -70.35631 18.14732 -69.71982 19.21812 c -69.08508 20.28365 -67.77866 20.9905 -66.10477 20.37332 c -66.154 20.88322 -66.03972 21.35973 -65.7619 21.71315 c -65.47353 22.08238 -65.01637 22.31801 -64.4256 22.3303 c -63.24226 22.35844 -61.5244 21.50742 -59.45139 19.09154 c -58.69708 18.25282 -56.94757 17.99083 -55.36334 18.43744 c -53.77737 18.88405 -52.36371 20.02695 -52.25117 21.97688 c -52.25117 21.97865 l -52.00502 25.96469 -56.99857 26.06667 -57.51726 23.97783 c -57.51726 23.97783 l -57.51726 23.97606 l -57.81969 22.87889 -57.47331 22.03491 -56.91241 21.59181 c -56.37437 21.16632 -55.64644 21.12234 -55.08554 21.57776 c -55.64644 21.71841 -56.03502 21.92413 -56.24953 22.16151 c -56.47635 22.41646 -56.52382 22.70306 -56.42184 22.94922 c -56.21965 23.44154 -55.46007 23.7598 -54.50531 23.45738 c -54.50354 23.45738 l -54.50354 23.45561 l -53.71233 23.169 -53.3589 22.29865 -53.6543 21.45291 c -53.94969 20.60718 -54.89037 19.78606 -56.66098 19.56451 c -56.66273 19.56451 l -56.66273 19.56451 l -57.96034 19.43967 -58.95027 19.86342 -59.62193 20.56499 c -60.29361 21.26654 -60.64702 22.24239 -60.68219 23.22527 c -60.71912 24.2064 -60.43604 25.19456 -59.83118 25.91899 c -59.22983 26.63812 -58.30673 27.09175 -57.07417 27.02144 c -56.05084 29.0083 -54.43498 29.89096 -52.90701 29.87689 c -52.90701 29.78899 m -54.40685 29.80304 -55.99985 28.93973 -57.00911 26.9599 c -57.02318 26.93352 l -57.05132 26.93527 l -58.27509 27.01439 -59.17357 26.56955 -59.7626 25.86447 c -60.35338 25.1594 -60.62944 24.19058 -60.59427 23.22879 c -60.56087 22.26524 -60.21272 21.30875 -59.55864 20.62476 c -58.90456 19.94254 -57.94452 19.52936 -56.67152 19.65242 c -54.92378 19.87045 -54.02 20.674 -53.73694 21.4828 c -53.45384 22.28986 -53.78616 23.10219 -54.53168 23.37297 c -55.45654 23.66661 -56.16338 23.34836 -56.34096 22.91582 c -56.42886 22.69954 -56.3937 22.45514 -56.18272 22.22128 c -55.97348 21.98744 -55.5849 21.76764 -54.97478 21.63051 c -54.89214 21.61292 l -54.95367 21.55489 l -55.55501 21.0116 -56.37964 21.0573 -56.96692 21.52324 c -57.55594 21.9892 -57.91112 22.87538 -57.60342 23.99893 c -57.60165 23.99893 l -57.05132 26.21437 -51.91357 26.03151 -52.16325 21.9716 c -52.27931 19.98123 -53.72989 18.80669 -55.33873 18.35306 c -56.94757 17.89941 -58.72345 18.1526 -59.5182 19.03351 c -59.5182 19.03351 l -59.5182 19.03526 l -61.58243 21.4406 -63.28445 22.26877 -64.42209 22.24239 c -64.99176 22.23007 -65.42079 22.00677 -65.69331 21.65863 c -65.96762 21.31226 -66.08542 20.83751 -66.02213 20.32059 c -66.01334 20.24847 l -66.08015 20.27486 l -67.74701 20.91664 -69.02002 20.22035 -69.64421 19.17241 c -70.26665 18.12622 -70.23148 16.73013 -69.26442 15.96529 c -69.24332 15.94945 l -69.2486 15.92484 l -69.59322 13.90105 -69.27321 12.50848 -68.63672 11.62758 c -67.99844 10.74843 -67.0437 10.37743 -66.10477 10.40028 c -65.16585 10.4249 -64.24449 10.8469 -63.68535 11.55196 c -63.12447 12.25705 -62.91873 13.24521 -63.41106 14.41974 c -63.41106 14.41974 -63.41106 14.41974 -63.41281 14.41974 c -63.74689 15.11603 -64.18823 15.42021 -64.63484 15.46594 c -65.0533 15.50638 -65.48233 15.30241 -65.84453 14.96834 c -65.12012 14.93492 -64.60143 14.35292 -64.5223 13.7516 c -64.4801 13.43335 -64.56099 13.11333 -64.79483 12.87773 c -65.02869 12.64388 -65.41199 12.49968 -65.96938 12.52255 c -65.97113 12.52255 l -65.97113 12.52255 l -66.57774 12.55948 -67.03665 12.83904 -67.34259 13.23993 c -67.6503 13.64082 -67.8068 14.15952 -67.8156 14.67996 c -67.82613 15.20042 -67.69073 15.72264 -67.40767 16.13057 c -67.12457 16.53848 -66.69379 16.83037 -66.12234 16.88312 c -64.5733 17.05542 -63.39523 16.65805 -62.42818 15.90022 c -61.46112 15.14064 -60.7033 14.02588 -59.98064 12.76167 c -58.53355 10.23325 -57.22539 7.11229 -54.69168 5.04803 c -51.45642 2.5706 -47.74115 1.81279 -43.80609 2.90996 c -39.87279 4.00539 -35.7197 6.96283 -31.62816 11.92296 c -31.62816 11.92473 l -31.6264 11.92648 l -25.50578 18.04535 -20.0498 19.45197 -14.90327 18.40579 c -9.9273 17.39653 -5.24146 14.09622 -0.50461 10.58316 c -5.83926 15.91078 -10.79237 19.3834 -15.9266 20.29068 c -21.20148 21.22258 -26.67857 19.47133 -32.99435 14.27908 c -32.99611 14.27908 -32.99611 14.27908 -32.99611 14.27908 c -36.91182 10.22444 -40.6394 8.17076 -43.5142 7.79625 c -44.95074 7.60812 -46.17627 7.84196 -47.10114 8.45914 c -48.02599 9.0763 -48.64844 10.07677 -48.88052 11.4113 c -48.88052 11.4113 l -49.26912 13.7516 -48.45853 15.49582 -47.2207 16.42596 c -45.9811 17.3561 -44.31248 17.47214 -42.99904 16.5631 c -42.99728 16.5631 l -42.99728 16.56134 l -42.41176 16.10419 -42.17967 15.54855 -42.19725 15.03339 c -42.2166 14.51996 -42.48386 14.04698 -42.88828 13.74632 c -43.29268 13.4474 -43.83774 13.3208 -44.40744 13.50015 c -44.95953 13.67247 -45.52922 14.13841 -46.0233 14.98943 c -46.6387 13.59862 -46.44705 12.49968 -45.81934 11.7401 c -45.17932 10.96469 -44.08742 10.53743 -42.95157 10.52864 c -41.8157 10.51985 -40.6394 10.92776 -39.82884 11.8122 c -39.02002 12.69485 -38.57341 14.05754 -38.90222 15.97232 c -38.91277 16.0409 l -38.84595 16.02155 l -37.15974 15.51868 -35.88322 15.60307 -34.75967 16.00925 c -33.63788 16.41365 -32.66907 17.14334 -31.6053 17.93282 c -29.51645 19.48363 -27.05132 21.25423 -22.37076 21.22786 c -23.82661 21.84502 -25.31764 21.80984 -26.8157 21.42654 c -28.38939 21.02565 -29.96834 20.26079 -31.50859 19.53638 c -33.05061 18.81195 -34.55396 18.12799 -35.97993 17.89236 c -37.40767 17.65501 -38.76155 17.86952 -39.98534 18.94032 c -39.98534 18.94032 l -40.56029 19.40627 -40.91194 20.04277 -41.04558 20.66168 c -41.1792 21.28235 -41.0948 21.8872 -40.7871 22.28986 c -40.74843 22.34085 l -40.71501 22.28635 l -39.78311 20.73378 -38.80023 20.12541 -37.9457 20.09024 c -37.09117 20.05682 -36.35445 20.59488 -35.91136 21.37029 c -35.47002 22.14569 -35.32936 23.15318 -35.66695 24.04288 c -36.00279 24.93082 -36.81688 25.70624 -38.30264 26.02097 c -40.28423 26.29173 -41.65395 25.58665 -42.41176 24.43146 c -43.17134 23.27626 -43.31377 21.66743 -42.81793 20.13419 c -42.7986 20.06914 l -42.8654 20.07617 l -43.8817 20.19221 -45.09843 19.99002 -46.17627 19.59616 c -47.25586 19.20055 -48.1948 18.61151 -48.66249 17.96095 c -48.66426 17.95918 l -48.66426 17.95744 l -49.01414 17.52664 -49.41153 17.3262 -49.79309 17.29984 c -50.17464 17.27345 -50.53859 17.4229 -50.81993 17.67786 c -51.38257 18.18953 -51.62523 19.13725 -51.06784 20.00407 c -51.06609 20.0076 l -51.06432 20.00935 l -50.53683 20.66519 -49.91968 20.93422 -49.27614 21.01862 c -48.63437 21.10301 -47.96797 21.00455 -47.32971 20.93246 c -46.69322 20.86212 -46.0866 20.8164 -45.5679 20.99576 c -45.04921 21.1751 -44.60963 21.57599 -44.29666 22.41293 c -44.0628 23.80199 -44.44083 24.94489 -45.26372 25.59369 c -46.08836 26.2425 -47.36664 26.40076 -48.95438 25.79239 c -49.00888 25.77129 l -49.01414 25.82932 l -49.20229 28.29794 -50.97993 29.76965 -52.90701 29.78899 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 65.08 9.173 cm 0 G 0 g q 1 0 0 1 6.278 -219.747 cm q 0 G 0 g 0.3985 w q 0.9473 0.8977 0.75511 RG 0.9473 0.8977 0.75511 rg -27.02136 36.25735 m -24.08028 36.29591 -21.68304 34.44449 -20.93669 31.77531 c -19.28775 32.5699 -17.20488 31.87561 -15.6485 30.64903 c -14.86357 30.02995 -14.20978 29.27394 -13.8125 28.50444 c -13.42293 27.74844 -13.28406 26.97508 -13.51163 26.30006 c -11.76242 25.49585 -10.75569 24.44284 -10.31598 23.3532 c -9.8724 22.25583 -10.00162 21.12569 -10.50113 20.19032 c -11.50012 18.32152 -13.988 17.22995 -16.34859 18.69759 c -16.35051 18.69759 l -16.35245 18.69952 l -17.88951 19.81232 -18.42567 21.17197 -18.14217 22.26547 c -17.87216 23.30498 -16.84616 24.06677 -15.2975 24.17093 c -16.32544 24.51035 -17.50188 24.47563 -18.29259 23.90863 c -18.71689 23.60583 -19.02931 23.15648 -19.15274 22.53355 c -19.27618 21.91255 -19.20676 21.1141 -18.8596 20.1209 c -18.42374 18.8866 -16.80759 17.66386 -14.9002 17.21259 c -12.99284 16.76129 -10.80005 17.07373 -9.1916 18.89046 c -9.18968 18.8924 l -9.18584 18.89624 l -8.4491 19.45554 -7.5041 19.56738 -6.57646 19.36104 c -5.65074 19.15466 -4.74045 18.63202 -4.06737 17.9146 c -3.39429 17.19716 -2.95844 16.28302 -2.98737 15.2975 c -3.01436 14.3178 -3.50807 13.27441 -4.66138 12.28893 c -3.61415 10.03632 -3.58716 8.13667 -4.19273 6.6613 c -4.80215 5.18016 -6.04224 4.12715 -7.4964 3.5698 c -8.95053 3.01244 -10.61876 2.94687 -12.09413 3.43672 c -13.56758 3.92657 -14.8462 4.97572 -15.51158 6.64203 c -15.51158 6.64203 l -15.51158 6.64395 l -16.24637 8.74803 -15.08342 10.50497 -13.63701 11.09706 c -12.91185 11.39212 -12.11342 11.39984 -11.44806 11.01027 c -10.81355 10.63998 -10.31404 9.89746 -10.10384 8.73839 c -9.70268 9.59662 -9.84926 10.47606 -10.44327 11.23784 c -11.06813 12.04205 -12.1732 12.70935 -13.583 13.04684 c -16.40451 13.72185 -20.44296 13.0835 -24.30978 9.6429 c -28.60858 5.15123 -33.84856 4.22937 -40.74709 6.05766 c -41.1598 6.16759 l -40.73166 6.15216 l -37.30457 6.02873 -34.32106 6.33539 -31.68468 7.53496 c -29.0483 8.73453 -26.75714 10.82706 -24.70898 14.28885 c -24.68971 14.3178 l -24.65692 14.31007 l -22.72833 13.89157 -21.41884 14.15965 -20.60304 14.78836 c -19.78532 15.41515 -19.45168 16.40837 -19.48833 17.45944 c -19.52496 18.51247 -19.9319 19.62138 -20.59146 20.46419 c -21.25104 21.3089 -22.15747 21.88748 -23.19698 21.89326 c -23.2317 21.89326 l -23.24327 21.92606 l -24.00313 24.2712 -25.92978 25.77936 -28.04158 26.08792 c -30.1534 26.3965 -32.44841 25.50935 -33.95654 23.05042 c -33.97969 23.01184 l -34.0202 23.03305 l -36.59291 24.36765 -39.66708 23.40912 -41.42981 21.46318 c -42.31311 20.48924 -42.86467 19.27231 -42.86853 17.97246 c -42.87045 16.67067 -42.32274 15.28786 -40.99202 13.97644 c -40.94958 13.93591 l -40.99782 13.90314 l -43.77304 12.00156 -46.6447 11.83185 -49.17693 12.51842 c -51.70723 13.20499 -53.90195 14.744 -55.33875 16.26372 c -58.99149 19.28581 -62.76186 19.49025 -66.16388 17.58481 c -66.16388 17.58481 -66.16388 17.58481 -66.16388 17.58481 c -67.67397 16.41801 -71.21292 14.6225 -75.33429 14.31007 c -75.66216 14.28693 l -75.35551 14.40263 l -72.98721 15.31487 -70.74234 16.37173 -67.77232 19.12767 c -67.7704 19.1296 l -67.7704 19.1296 l -66.04431 20.51817 -63.99425 21.2144 -61.73587 21.04662 c -59.47942 20.87689 -57.01662 19.84705 -54.45546 17.79501 c -52.28195 16.6938 -50.59828 16.55495 -49.391 16.94644 c -48.18372 17.33794 -47.44507 18.2598 -47.1577 19.29738 c -46.87033 20.33496 -47.03812 21.48827 -47.6437 22.33104 c -48.24734 23.17577 -49.28879 23.71577 -50.768 23.53448 c -51.93288 23.2645 -52.66766 22.60876 -52.90874 21.93568 c -53.03024 21.60011 -53.02638 21.25876 -52.8933 20.9579 c -52.7718 20.68019 -52.52687 20.44104 -52.17393 20.25781 c -52.33401 20.9444 -52.2588 21.54997 -51.91743 21.97618 c -51.56065 22.42747 -50.92422 22.67819 -50.02551 22.63962 c -50.01779 22.63962 l -50.01007 22.63577 l -48.95706 22.23848 -48.37077 21.59433 -48.176 20.8981 c -47.9812 20.20189 -48.17406 19.45746 -48.66006 18.86732 c -49.63208 17.68703 -51.76895 17.11423 -54.29924 18.68024 c -54.30116 18.68024 l -54.30116 18.68024 l -55.95975 19.77953 -56.3744 21.58083 -55.80354 23.05234 c -55.24039 24.5065 -53.71103 25.63278 -51.50087 25.46306 c -52.60788 27.38394 -51.9271 29.3106 -50.57901 30.42531 c -49.229 31.54582 -47.21362 31.8544 -45.69391 30.56418 c -45.09026 31.96046 -43.16939 32.79941 -41.62845 32.0376 c -41.62653 32.0376 l -41.62459 32.03569 l -40.75865 31.47446 -40.5793 30.55452 -40.49059 29.63652 c -40.39995 28.71658 -40.39223 27.7928 -39.90237 27.18723 c -39.90237 27.18529 l -39.90044 27.18529 l -38.71822 25.59421 -37.3952 24.92885 -36.18599 24.84785 c -34.97676 24.76685 -33.87555 25.27022 -33.14268 26.02621 c -32.40982 26.78415 -32.04532 27.7928 -32.29796 28.7243 c -32.53517 29.59987 -33.34904 30.4041 -34.9112 30.88432 c -33.68268 29.99716 -33.20248 29.07146 -33.26033 28.25758 c -33.32397 27.38971 -33.96234 26.66652 -34.81477 26.27307 c -35.66528 25.87964 -36.73178 25.81215 -37.65942 26.25957 c -38.58708 26.707 -39.37201 27.66937 -39.65936 29.31638 c -39.65936 29.31638 l -39.65936 29.31638 l -40.02194 31.72519 -38.67964 33.3934 -37.0442 34.19183 c -36.22456 34.59105 -35.33162 34.77618 -34.53705 34.73183 c -33.75983 34.68748 -33.07904 34.41942 -32.65282 33.91605 c -30.74161 35.52448 -28.78601 36.2342 -27.02136 36.25735 c -27.01944 36.16092 m -28.76866 36.13777 -30.71846 35.43578 -32.62582 33.81769 c -32.66246 33.7849 l -32.69333 33.82349 l -33.09447 34.32297 -33.76563 34.59105 -34.54285 34.6354 c -35.31813 34.67783 -36.19756 34.49847 -37.00177 34.10506 c -38.61021 33.32011 -39.92165 31.69818 -39.56294 29.3318 c -39.28137 27.70793 -38.51765 26.77837 -37.61893 26.34636 c -36.71828 25.91435 -35.68071 25.978 -34.85335 26.36179 c -34.02791 26.74365 -33.41653 27.43987 -33.35677 28.2653 c -33.29698 29.09073 -33.78683 30.05695 -35.19855 30.98845 c -35.44156 31.14853 l -35.15997 31.07526 l -33.37411 30.60661 -32.46768 29.71945 -32.2054 28.74937 c -31.9431 27.7793 -32.32304 26.73595 -33.07326 25.96063 c -33.8254 25.18343 -34.95169 24.66849 -36.19179 24.75142 c -37.43185 24.83627 -38.78186 25.519 -39.97758 27.1255 c -39.97758 27.12744 l -40.49637 27.76965 -40.49637 28.71272 -40.5851 29.62689 c -40.67574 30.5391 -40.84544 31.41467 -41.67474 31.95274 c -43.17903 32.69525 -45.08063 31.84474 -45.63411 30.47546 c -45.6592 30.4118 l -45.71126 30.45616 l -47.1982 31.75989 -49.18465 31.45709 -50.51923 30.35202 c -51.85187 29.24503 -52.52881 27.34535 -51.38322 25.43799 c -51.335 25.357 l -51.42952 25.3647 l -53.6493 25.56721 -55.15938 24.45056 -55.71481 23.01762 c -56.27025 21.58662 -55.87297 19.83739 -54.2491 18.76125 c -51.74579 17.21259 -49.67258 17.78925 -48.73529 18.92903 c -48.26663 19.49796 -48.0815 20.20767 -48.26857 20.87111 c -48.45372 21.53453 -49.00914 22.15363 -50.039 22.54318 c -50.91072 22.57791 -51.51051 22.33684 -51.84416 21.91641 c -52.17781 21.49597 -52.25494 20.88461 -52.06015 20.16911 c -52.03316 20.07268 l -52.12766 20.11319 l -52.5558 20.30797 -52.83931 20.59146 -52.98203 20.91933 c -53.12474 21.24525 -53.12666 21.6117 -52.99937 21.96848 c -52.74481 22.68013 -51.97723 23.35513 -50.7873 23.62898 c -50.78537 23.6309 l -50.78151 23.6309 l -49.27336 23.81606 -48.18948 23.2587 -47.56462 22.3889 c -46.9417 21.5172 -46.77197 20.3369 -47.06514 19.27231 c -47.3602 18.20773 -48.12392 17.25694 -49.36208 16.85579 c -50.60214 16.45467 -52.31088 16.5993 -54.49982 17.71016 c -54.50368 17.7121 l -54.50754 17.71596 l -57.06097 19.76219 -59.50835 20.78432 -61.74358 20.9502 c -63.9788 21.11604 -66.00189 20.4314 -67.7106 19.0563 c -70.55142 16.41994 -72.74228 15.33609 -75.00066 14.44699 c -71.04706 14.82886 -67.6624 16.54723 -66.2179 17.6658 c -66.21404 17.66772 l -66.2121 17.66966 l -62.77922 19.59055 -58.95291 19.37839 -55.2751 16.33508 c -55.27318 16.33315 l -55.27126 16.33122 l -53.84409 14.82307 -51.66287 13.29372 -49.15186 12.61292 c -46.65434 11.93599 -43.83667 12.09799 -41.0981 13.95328 c -42.41145 15.26666 -42.96687 16.65907 -42.96303 17.97246 c -42.9611 19.29932 -42.39603 20.5394 -41.50116 21.52682 c -39.71916 23.49399 -36.62378 24.46213 -34.0144 23.13335 c -32.4889 25.59421 -30.16496 26.49487 -28.02808 26.18243 c -25.88928 25.87001 -23.94142 24.34642 -23.16228 21.98584 c -22.10347 21.96655 -21.17969 21.3764 -20.51625 20.52397 c -19.84319 19.66382 -19.42853 18.53752 -19.39189 17.46332 c -19.35524 16.38908 -19.69853 15.36115 -20.54324 14.71123 c -21.38411 14.06514 -22.71677 13.80092 -24.64342 14.21172 c -26.69542 10.75569 -28.99817 8.65161 -31.6461 7.44817 c -34.18219 6.29295 -37.04613 5.97473 -40.29195 6.05573 c -33.63062 4.38557 -28.5623 5.3383 -24.37535 9.71233 c -24.37341 9.71425 l -24.37341 9.71425 l -20.48732 13.17413 -16.41608 13.82213 -13.56178 13.13942 c -12.13463 12.79807 -11.01027 12.12305 -10.36804 11.29762 c -9.7239 10.47026 -9.56383 9.48476 -10.07104 8.5494 c -10.13853 8.42403 l -10.1617 8.56482 l -10.34875 9.8049 -10.86176 10.55511 -11.49818 10.92734 c -12.1327 11.29955 -12.89836 11.29378 -13.60036 11.00833 c -15.00243 10.43361 -16.1403 8.73453 -15.42287 6.67482 c -15.42287 6.67482 -15.42287 6.67482 -15.42094 6.67482 c -14.76715 5.0355 -13.51357 4.00952 -12.06328 3.52736 c -10.61105 3.04523 -8.96404 3.1108 -7.52917 3.66043 c -6.09622 4.21007 -4.8793 5.2438 -4.28143 6.69795 c -3.68358 8.15402 -3.70479 10.03247 -4.75974 12.27927 c -4.77708 12.31206 l -4.74815 12.33713 l -3.58907 13.31685 -3.1108 14.34286 -3.08186 15.29942 c -3.05486 16.25601 -3.47722 17.14702 -4.1368 17.84901 c -4.79637 18.55103 -5.69124 19.06595 -6.59767 19.26653 c -7.5041 19.46902 -8.41826 19.35718 -9.12796 18.81909 c -9.12796 18.81909 -9.12796 18.81909 -9.12796 18.81909 c -10.76147 16.98308 -12.99284 16.66101 -14.92337 17.11809 c -16.85579 17.57516 -18.4951 18.80367 -18.95024 20.09003 c -18.95024 20.09003 l -19.30124 21.09483 -19.37453 21.90869 -19.24725 22.55284 c -19.11996 23.19698 -18.79018 23.67142 -18.34853 23.9877 c -17.46716 24.62029 -16.14223 24.62991 -15.04678 24.19984 c -14.82115 24.11113 l -15.06415 24.10727 l -16.72273 24.07834 -17.77766 23.28763 -18.04765 22.24234 c -18.3196 21.19511 -17.81046 19.87596 -16.29651 18.77667 c -13.98029 17.33987 -11.56184 18.41217 -10.58598 20.2366 c -10.09804 21.1469 -9.97269 22.24619 -10.40662 23.31656 c -10.83862 24.38692 -11.82991 25.4322 -13.58492 26.23064 c -13.62541 26.24994 l -13.61 26.29044 l -13.37663 26.94229 -13.50972 27.70407 -13.89735 28.46008 c -14.28693 29.21417 -14.933 29.96053 -15.70828 30.57382 c -17.2608 31.79654 -19.33595 32.47925 -20.9444 31.67117 c -20.99646 31.64417 l -21.01189 31.70203 l -21.73125 34.3577 -24.10149 36.1995 -27.01944 36.16092 c -28.9673 24.79 m -27.0715 24.84978 -25.09663 23.76398 -23.77556 20.92703 c -22.81705 20.97911 -22.06491 20.46805 -21.57118 19.73132 c -21.06975 18.98495 -20.82867 18.0091 -20.88461 17.13737 c -20.94246 16.26566 -21.3012 15.4923 -22.01283 15.17601 c -22.71677 14.86357 -23.75241 15.01015 -25.14485 15.90694 c -26.41579 12.53384 -28.66452 10.26006 -31.43396 8.85991 c -34.21884 7.45203 -37.52443 6.92166 -40.89174 7.02774 c -47.62248 7.24182 -54.59431 9.99582 -58.11012 13.39207 c -58.11205 13.39207 l -60.21228 15.37079 -63.83223 15.50964 -66.78297 13.7932 c -68.13489 12.72478 -70.15605 12.2214 -72.23506 12.24457 c -74.31601 12.2677 -76.45673 12.81927 -78.04396 13.87035 c -78.27925 14.02657 l -78.00539 13.95714 l -75.48859 13.31685 -72.54364 13.37471 -68.45891 15.31293 c -68.45699 15.31293 -68.45699 15.31293 -68.45699 15.31293 c -66.43582 16.62244 -64.70587 17.42473 -63.12637 17.74873 c -61.54492 18.07082 -60.11392 17.91266 -58.70027 17.30324 c -58.69835 17.3013 l -58.69641 17.3013 l -55.92505 15.77966 -54.9029 13.99957 -52.10645 12.39305 c -46.98027 10.28513 -42.66797 10.81355 -40.3151 13.26865 c -40.2765 13.30913 l -40.2418 13.26479 l -39.92165 12.8405 -39.33151 12.6187 -38.63914 12.58592 c -37.9468 12.55313 -37.15799 12.70935 -36.45213 13.03142 c -35.74628 13.35156 -35.12527 13.83563 -34.7627 14.45471 c -34.40013 15.07185 -34.29211 15.824 -34.61804 16.69574 c -34.61998 16.69766 l -34.61998 16.69958 l -35.24677 18.68602 -36.61798 19.28003 -37.71536 19.06981 c -38.26306 18.96375 -38.74136 18.65709 -39.02487 18.21738 c -39.28716 17.81046 -39.37201 17.28781 -39.19652 16.70345 c -38.90529 17.54237 -38.32864 18.06502 -37.69029 18.08815 c -37.01335 18.11517 -36.30171 17.59253 -35.84464 16.38908 c -35.84464 16.38908 l -35.71735 16.04387 -35.83693 15.61186 -36.11464 15.21071 c -36.39043 14.80957 -36.83012 14.43736 -37.36049 14.21172 c -38.41928 13.76427 -39.84836 13.92242 -41.04602 15.64658 c -41.62845 16.26952 -41.80203 17.14122 -41.64774 18.04959 c -41.49538 18.95795 -41.01709 19.90489 -40.2958 20.68982 c -38.85515 22.2539 -36.43286 23.17384 -33.66533 21.84697 c -32.65475 23.53835 -30.8554 24.73021 -28.9673 24.79 c -28.96344 24.69357 m -30.82646 24.63377 -32.61812 23.44962 -33.6094 21.76404 c -33.63062 21.7274 l -33.67111 21.74667 l -36.41742 23.08127 -38.80116 22.17099 -40.22444 20.62425 c -40.9361 19.85281 -41.40474 18.91939 -41.55324 18.03416 c -41.70367 17.14702 -41.53395 16.31001 -40.9766 15.71214 c -40.97466 15.71022 l -40.97273 15.70638 l -39.79051 14.00536 -38.42314 13.86649 -37.39714 14.30043 c -36.88414 14.51836 -36.45985 14.88094 -36.1937 15.26666 c -35.92563 15.65044 -35.82341 16.05544 -35.93529 16.35437 c -36.38463 17.53467 -37.06349 18.0168 -37.68643 17.99367 c -38.30936 17.9686 -38.89758 17.43823 -39.16179 16.53952 c -39.20422 16.39873 l -39.25436 16.53566 l -39.49736 17.20294 -39.4048 17.80658 -39.10587 18.26945 c -38.80693 18.73232 -38.3055 19.05438 -37.73271 19.16432 c -36.58905 19.38225 -35.16577 18.74966 -34.52934 16.73044 c -34.19377 15.83366 -34.3037 15.04678 -34.67976 14.40457 c -35.05585 13.76427 -35.69228 13.27055 -36.41164 12.9427 c -37.13292 12.61678 -37.93329 12.45671 -38.64299 12.48949 c -39.33151 12.52228 -39.93323 12.74214 -40.2823 13.1722 c -42.6776 10.70747 -47.01884 10.1964 -52.14694 12.30627 c -52.14888 12.3082 l -52.15274 12.3082 l -54.96654 13.92435 -55.98868 15.70444 -58.74077 17.21451 c -60.13899 17.81816 -61.54492 17.97437 -63.10709 17.65424 c -64.67117 17.33409 -66.39339 16.53758 -68.41069 15.23 c -68.41261 15.22807 l -68.41647 15.22614 l -72.37007 13.35156 -75.2668 13.2455 -77.7431 13.81636 c -76.20216 12.8752 -74.19836 12.36221 -72.23506 12.34099 c -70.16956 12.31784 -68.16382 12.8212 -66.83696 13.87228 c -66.8331 13.87614 l -66.83118 13.87614 l -63.8496 15.60992 -60.18335 15.47879 -58.04456 13.4615 c -58.04456 13.4615 l -58.04456 13.4615 l -54.55382 10.09033 -47.59549 7.33632 -40.88788 7.12418 c -37.53407 7.0181 -34.24197 7.54652 -31.4764 8.94476 c -28.71272 10.34297 -26.47171 12.611 -25.21236 15.99179 c -25.19305 16.04771 l -25.14099 16.01494 l -23.73698 15.09502 -22.72255 14.96579 -22.05333 15.26279 c -21.38219 15.56172 -21.03697 16.29265 -20.98103 17.14316 c -20.92511 17.99173 -21.16426 18.95218 -21.65025 19.6773 c -22.13626 20.40439 -22.86528 20.8981 -23.80255 20.83447 c -23.83534 20.83253 l -23.85077 20.86147 l -25.16028 23.69263 -27.10043 24.75334 -28.96344 24.69357 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 139.571 108.369 cm 0 G 0 g q 1 0 0 1 20.421 -216.46 cm q 0 G 0 g 0.3985 w q 0.94827 0.89958 0.75958 RG 0.94827 0.89958 0.75958 rg 4.0 M -82.56145 31.00793 m -80.64218 30.96346 -78.81888 30.23553 -77.78668 28.88034 c -73.83578 31.96054 -69.08675 31.3005 -66.1985 28.99738 c -64.74733 27.84348 -63.7643 26.27295 -63.5864 24.55261 c -63.41086 22.84401 -64.03815 20.9926 -65.77953 19.26994 c -64.93224 17.42322 -64.98607 15.84334 -65.60164 14.6005 c -66.2219 13.34828 -67.39922 12.43547 -68.76375 11.91585 c -70.12831 11.3939 -71.68246 11.2605 -73.0634 11.57178 c -74.44434 11.88075 -75.65442 12.63676 -76.3168 13.8913 c -76.31914 13.89365 l -76.31914 13.89365 l -77.32324 16.01186 -77.18515 17.87497 -76.45255 19.10376 c -75.7176 20.33257 -74.38583 20.92706 -73.03297 20.5011 c -72.92062 20.46597 l -73.01659 20.3981 l -74.38115 19.42677 -74.94054 18.22838 -74.75797 17.28748 c -74.66669 16.81702 -74.39285 16.40742 -73.93176 16.11485 c -73.47299 15.82227 -72.82466 15.64673 -71.99374 15.65376 c -70.75793 15.71461 -69.8849 16.25061 -69.34422 17.05107 c -68.8059 17.85155 -68.6046 18.92354 -68.73802 20.04935 c -69.00484 22.30568 -70.60579 24.77966 -73.47066 25.75568 c -73.47066 25.75568 -73.47066 25.75568 -73.47066 25.75568 c -81.05647 27.71239 -86.4117 19.80359 -84.2537 14.63794 c -84.2537 14.6356 l -84.2537 14.63327 l -83.10915 11.36816 -80.30983 9.48633 -76.70767 9.01587 c -73.1032 8.54543 -68.70056 9.49335 -64.3705 11.89713 c -64.36816 11.89946 l -57.45409 16.07741 -52.39378 17.54962 -48.36095 17.53323 c -44.33047 17.51451 -41.33221 16.00485 -38.55162 14.23772 c -35.77335 12.47057 -33.20807 10.44832 -30.03426 9.38335 c -26.86043 8.32074 -23.0734 8.21306 -17.83516 10.28682 c -17.78368 10.18382 l -17.78601 10.18149 -17.78836 10.18149 -17.79305 10.17915 c -25.36246 5.44415 -30.35725 6.67531 -35.0033 8.6999 c -39.65167 10.7245 -43.95131 13.5285 -50.20767 11.97202 c -50.20767 11.97202 l -50.21 11.97202 l -54.81625 10.88835 -57.52197 7.90411 -61.42607 5.35522 c -65.3278 2.80634 -70.43025 0.70683 -79.8066 1.41603 c -79.8066 1.41603 l -81.17116 1.4371 -83.02022 2.17671 -84.88565 3.38913 c -86.75108 4.60156 -88.63525 6.28911 -90.0513 8.21306 c -91.46968 10.13702 -92.4223 12.29503 -92.41762 14.45305 c -92.41528 16.60168 -91.45798 18.74332 -89.08931 20.62749 c -90.32047 24.21791 -89.76575 26.8417 -88.35905 28.55032 c -86.95003 30.26364 -84.69606 31.05475 -82.56145 31.00793 c -82.5638 30.8909 m -84.66797 30.9377 -86.88684 30.15596 -88.27013 28.47543 c -89.65106 26.79489 -90.20576 24.21323 -88.9676 20.62982 c -88.95357 20.59003 l -88.98634 20.56429 l -91.35968 18.69183 -92.29825 16.57828 -92.30292 14.45305 c -92.30527 12.33014 -91.36436 10.19086 -89.95767 8.28093 c -88.55098 6.37103 -86.67618 4.69284 -84.82011 3.48743 c -82.96637 2.28206 -81.1267 1.55177 -79.80191 1.53307 c -79.79958 1.53307 l -79.79723 1.53307 l -70.44194 0.8262 -65.37929 2.914 -61.48926 5.45352 c -57.59921 7.9907 -54.87947 10.99133 -50.23576 12.08438 c -50.23576 12.08438 l -43.93492 13.65257 -39.59317 10.82748 -34.95648 8.80756 c -30.45322 6.84383 -25.65503 5.67587 -18.46713 9.93808 c -23.37064 8.13115 -27.01257 8.25052 -30.0717 9.27335 c -33.26894 10.34534 -35.84123 12.37694 -38.61479 14.1394 c -41.38838 15.90186 -44.35858 17.39983 -48.36331 17.41621 c -52.36569 17.43492 -57.40494 15.96973 -64.30965 11.79883 c -64.312 11.79648 l -64.312 11.79648 l -68.65843 9.38101 -73.0868 8.42606 -76.72171 8.90118 c -80.35663 9.37633 -83.20512 11.28859 -84.3637 14.59581 c -86.55916 19.86679 -81.1103 27.8505 -73.4379 25.86803 c -73.43555 25.86803 l -73.43321 25.86803 l -70.52386 24.87563 -68.89249 22.36418 -68.62097 20.0634 c -68.48524 18.91417 -68.68887 17.81412 -69.24826 16.98555 c -69.80766 16.15463 -70.72282 15.59758 -71.98909 15.53673 c -71.98909 15.53673 l -71.99141 15.53673 l -72.84105 15.52971 -73.51045 15.7076 -73.99495 16.01654 c -74.47946 16.3255 -74.7767 16.76318 -74.87267 17.26407 c -75.06226 18.23775 -74.49115 19.43146 -73.18512 20.40512 c -74.44434 20.74684 -75.66379 20.19914 -76.35191 19.04524 c -77.0611 17.8539 -77.20387 16.03526 -76.21382 13.94513 c -75.57014 12.7257 -74.39285 11.9884 -73.03766 11.68414 c -71.68246 11.37985 -70.14938 11.51093 -68.8059 12.02353 c -67.4624 12.5361 -66.31084 13.43256 -65.70697 14.652 c -65.1031 15.87141 -65.04457 17.41853 -65.8989 19.2559 c -65.91528 19.29333 l -65.88719 19.32378 l -64.14113 21.03474 -63.5279 22.8604 -63.70345 24.54092 c -63.87663 26.22379 -64.84096 27.76859 -66.27104 28.9061 c -69.12889 31.18582 -73.84047 31.84352 -77.75859 28.76099 c -77.8054 28.72353 l -77.84052 28.77034 l -78.83994 30.11852 -80.65155 30.84877 -82.5638 30.8909 c -27.34727 23.04295 m -25.76036 23.08742 -24.15472 22.60994 -22.95634 21.63159 c -21.75798 20.65321 -20.97154 19.17165 -21.02069 17.22661 c -21.02069 17.22661 l -21.02069 17.22427 l -21.14006 15.52034 -21.79076 14.37814 -22.69655 13.84215 c -23.60469 13.30849 -24.76093 13.38808 -25.86101 14.09961 c -25.86101 14.09961 l -26.72702 14.64731 -26.98213 15.51332 -26.65446 16.1406 c -26.32912 16.76552 -25.43501 17.13066 -24.07748 16.72105 c -24.08217 16.72105 l -23.83875 16.67659 -23.65852 16.70935 -23.53448 16.79362 c -23.41275 16.87787 -23.34254 17.01833 -23.3285 17.2079 c -23.30042 17.58942 -23.51575 18.16519 -24.0213 18.7714 c -24.02365 18.77374 l -24.02599 18.77608 l -25.94293 21.62924 -30.31044 20.2366 -30.54216 17.72751 c -30.69429 16.02122 -30.1419 14.38281 -29.01376 13.25465 c -27.88794 12.12885 -26.18634 11.51093 -24.02599 11.85266 c -22.48824 12.23418 -21.4022 12.66718 -20.64853 13.21254 c -19.89722 13.76022 -19.47592 14.41559 -19.26057 15.25584 c -19.2325 15.36821 l -19.15994 15.27925 l -18.68715 14.70816 -18.21901 14.4109 -17.69473 14.31027 c -17.17279 14.21196 -16.58765 14.31027 -15.89484 14.549 c -15.89249 14.549 l -15.89015 14.549 l -13.8796 15.0803 -12.27162 14.54666 -10.68471 13.78363 c -9.09546 13.02061 -7.5226 12.03055 -5.56119 11.62561 c -3.34233 11.20667 -1.56816 12.25992 -0.09595 13.47935 c 0.05617 13.60574 l -0.00232 13.41617 l -0.62024 11.44305 -2.15565 10.35703 -3.92747 9.99893 c -5.6993 9.64316 -7.70984 10.00595 -9.30846 10.92111 c -11.46413 12.1429 -13.14465 12.72334 -15.03818 12.63208 c -16.92937 12.54079 -19.04056 11.77307 -22.05055 10.2798 c -22.05289 10.27745 l -22.05757 10.2751 l -25.79312 9.02524 -29.18463 9.92169 -31.27475 11.8784 c -33.36255 13.83513 -34.14899 16.85681 -32.67911 19.82701 c -32.67677 19.82701 l -31.66095 21.93117 -29.51698 22.97975 -27.34727 23.04295 c -27.34259 22.92593 m -29.47954 22.86272 -31.57903 21.83755 -32.57378 19.77551 c -32.57378 19.77551 l -32.57378 19.77551 l -34.0226 16.84744 -33.2502 13.88896 -31.19518 11.96268 c -29.1378 10.03636 -25.79547 9.14696 -22.09737 10.38512 c -22.09502 10.38512 -22.09502 10.38512 -22.09502 10.38745 c -19.08504 11.88075 -16.9598 12.65547 -15.04286 12.7491 c -13.12358 12.84271 -11.41498 12.25055 -9.25229 11.02411 c -7.67706 10.12297 -5.68993 9.76253 -3.95088 10.11362 c -2.27737 10.45065 -0.85664 11.4571 -0.20828 13.24997 c -1.65945 12.08438 -3.40787 11.10133 -5.5846 11.51328 c -5.5846 11.51328 l -5.5846 11.51328 l -7.57175 11.92053 -9.15398 12.91995 -10.73387 13.67831 c -12.31375 14.43666 -13.88428 14.9586 -15.86208 14.43666 c -16.56189 14.19557 -17.16576 14.09026 -17.71814 14.19557 c -18.24477 14.29857 -18.71991 14.60751 -19.18333 15.14351 c -19.41039 14.3243 -19.83636 13.65958 -20.58066 13.11891 c -21.35306 12.55952 -22.45311 12.12183 -24.00026 11.73798 c -24.0026 11.73563 l -24.00493 11.73563 l -26.19804 11.38922 -27.94177 12.01884 -29.09569 13.17274 c -30.24959 14.32664 -30.81131 16.00017 -30.6592 17.73688 c -30.6592 17.73688 l -30.41342 20.37703 -25.90314 21.7767 -23.93004 18.84161 c -23.4151 18.22137 -23.18105 17.63153 -23.21147 17.19853 c -23.22786 16.9832 -23.31447 16.80533 -23.46895 16.69765 c -23.62341 16.58998 -23.8411 16.5572 -24.10558 16.60872 c -24.10791 16.60872 l -24.11026 16.60872 l -25.43736 17.00896 -26.25656 16.65085 -26.55148 16.08441 c -26.84639 15.52034 -26.62637 14.72221 -25.80016 14.1979 c -25.7978 14.1979 l -24.72583 13.50278 -23.62341 13.43256 -22.7574 13.9428 c -21.89139 14.45305 -21.25475 15.55545 -21.13773 17.2313 c -21.13773 17.2313 -21.13773 17.23364 -21.13773 17.23364 c -21.08858 19.14355 -21.85861 20.58301 -23.03125 21.5403 c -24.20389 22.49994 -25.78142 22.9704 -27.34259 22.92593 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 5.127 212.468 cm 0 G 0 g q 1 0 0 1 43.057 -226.733 cm q 0 G 0 g 0.3985 w q 0.94984 0.90263 0.76692 RG 0.94984 0.90263 0.76692 rg -86.55301 48.80508 m -83.363 48.77342 -80.42325 46.3313 -80.11258 42.2611 c -74.88603 44.266 -71.62125 41.2342 -72.39789 36.64911 c -74.4632 31.08888 -80.0752 36.931 -83.48381 32.6882 c -85.27011 29.90666 -81.91614 26.65337 -79.66673 29.4234 c -78.11057 31.59227 -73.4737 33.29514 -70.11685 32.91544 c -71.75069 37.9694 -69.17624 43.5325 -62.64665 42.6408 c -52.8494 40.56398 -60.54683 26.21614 -66.66797 36.42186 c -67.64308 35.15047 -67.22023 32.5415 -65.3678 31.03998 c -57.42586 24.09042 -46.25363 39.40764 -36.21188 34.66722 c -52.02097 34.96925 -52.48409 22.83629 -63.56999 26.14136 c -61.40689 13.54816 -79.67537 15.25104 -75.31177 24.68298 c -72.02682 18.8006 -66.62193 24.08467 -70.38437 27.0388 c -74.63004 29.9757 -81.15964 26.29381 -79.89398 18.6798 c -78.3867 10.01297 -66.82617 10.1568 -54.02588 23.41446 c -33.33829 40.41728 -18.07861 34.92322 -0.0719 16.67776 c -16.11398 28.6036 -31.6872 39.4623 -51.6873 19.45932 c -65.0859 3.21588 -78.9016 0.0719 -89.51865 8.20367 c -97.84027 14.9864 -98.09341 28.67554 -108.16394 27.54796 c -111.82281 27.21716 -111.80556 20.79399 -107.91943 20.55814 c -104.32674 20.4143 -105.39964 24.54779 -107.89642 24.44711 c -106.64229 25.70702 -104.78409 25.93138 -103.67088 23.61868 c -100.40897 15.85222 -115.6255 12.77151 -113.35597 26.06369 c -116.58624 28.618 -113.58609 35.35757 -108.07764 33.23474 c -108.50047 36.68076 -104.08223 39.07397 -97.31389 31.18669 c -94.77972 28.37062 -85.77924 29.50107 -85.40817 35.95012 c -85.00258 42.5315 -93.2897 42.76448 -94.16415 39.24368 c -95.16228 35.60782 -91.86584 33.58566 -89.95013 35.3173 c -93.98581 36.22339 -92.2628 39.28107 -89.18785 38.30595 c -86.67094 37.3941 -86.94421 32.79752 -92.7029 32.0784 c -101.11371 31.26434 -101.41286 44.6572 -93.3271 44.13657 c -91.6645 47.3956 -89.03252 48.82808 -86.55301 48.80508 c -87.89056 27.84999 m -89.23387 27.87875 -90.83896 27.49905 -92.61661 26.5153 c -96.14604 24.38957 -93.79308 15.87811 -87.15994 14.4859 c -91.98953 17.98367 -93.44504 22.35017 -89.69699 25.3158 c -90.50815 22.0769 -87.40443 18.89839 -84.28346 22.8967 c -82.73882 25.0253 -84.45605 27.77232 -87.89056 27.84999 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 30.97 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 6.125 31.875 Td[<374d2ff7262829d43f733169383238d63a493f53>]TJ ET 0 G 0 g q 1 0 0 1 224.782 30.97 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -44.505 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -44.505 Td[<27a924c326282d752ff739a12b4827c73ba53b25>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -61.043 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -61.043 Td[<3ba5382f38d02b6026283d133b9a369e316934232f432e59>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -77.581 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -77.581 Td[<316926283a3229bd29e72599263c3ba53b252dbd293f>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 269.2 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+41 0 obj
+<</Length 100195>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 143.607 82.636 cm 0 G 0 g q 1 0 0 1 55.527 -230.827 cm q 0 G 0 g 0.3985 w q 0.95049 0.90388 0.7699 RG 0.95049 0.90388 0.7699 rg -44.1153 59.11952 m -39.31961 59.18251 -35.41504 56.15018 -34.23108 51.77957 c -28.89693 54.45924 -20.57454 47.25783 -22.14896 42.89984 c -10.62419 37.66016 -19.01585 25.84885 -26.6518 30.59416 c -31.63641 34.20587 -30.06514 39.34164 -24.59561 39.43925 c -28.1349 40.8279 -33.14787 39.35109 -30.8681 32.82669 c -29.41019 28.7143 -20.24391 24.81602 -14.9507 30.78938 c -10.23372 34.37277 -0.0787 26.52585 -7.70206 20.08331 c -0.78088 5.34357 -20.9461 0.0787 -25.25372 10.87296 c -27.6248 17.67131 -17.74687 22.16154 -16.51251 13.9966 c -13.25662 20.0046 -27.08635 27.06744 -39.74155 15.80403 c -46.74457 8.48611 -55.25905 6.98412 -66.50671 9.96608 c -55.29999 9.56618 -46.97444 11.96559 -40.2737 23.28883 c -27.62166 20.53989 -30.97202 35.78346 -37.87428 35.82439 c -40.37447 43.5359 -50.55782 45.75269 -55.50781 37.6759 c -63.9845 42.0717 -75.72339 31.37192 -66.98221 22.76299 c -76.00679 16.58495 -85.62335 21.66718 -90.2994 26.61086 c -96.2822 31.564 -102.48543 31.90408 -108.06517 28.78043 c -110.50868 26.88795 -116.28995 23.95009 -123.00644 23.44313 c -119.13335 24.93253 -115.4555 26.66754 -110.59999 31.17355 c -104.9919 35.68584 -97.29927 35.68584 -88.94539 28.9851 c -74.70003 21.76479 -73.13818 39.70377 -82.90276 38.50404 c -86.75064 37.61607 -87.81496 34.15549 -85.07547 32.9117 c -85.71782 35.27963 -84.5811 37.00836 -81.681 36.88554 c -74.86375 34.31609 -80.39627 25.48042 -88.61476 30.56583 c -93.97409 34.11772 -91.26924 42.15985 -83.96077 41.49231 c -87.73938 47.78685 -79.49886 54.09712 -74.58037 49.78636 c -73.65775 52.07242 -70.50577 53.4768 -68.00243 52.2393 c -65.23459 50.44133 -66.8594 46.37616 -65.2094 44.33885 c -57.44435 33.89413 -45.82826 47.61365 -57.42545 50.66174 c -48.14896 44.54353 -62.81628 37.19412 -64.67409 47.87816 c -65.85178 55.6747 -56.00847 58.62201 -53.31937 55.2748 c -50.19257 57.92613 -46.99333 59.0786 -44.1153 59.11952 c -47.29248 40.3965 m -44.21921 40.49413 -41.01683 38.73706 -38.86932 34.09567 c -32.62201 34.51445 -31.86629 20.05182 -41.09239 26.08186 c -49.33923 3.93605 -83.38454 10.87296 -94.82428 21.92223 c -98.28485 25.18445 -104.23303 25.40486 -109.07596 22.5898 c -113.45285 19.12291 -122.23181 19.29926 -127.38019 22.7126 c -123.25519 21.66403 -118.42172 21.76164 -111.73672 24.93253 c -105.13673 29.20552 -100.46387 30.1596 -95.87285 28.17899 c -91.36055 25.704 -89.69167 22.79446 -85.11009 20.16518 c -76.71841 16.7109 -69.63667 17.57053 -65.76674 21.6105 c -63.59406 18.73247 -54.2892 21.5129 -56.44931 27.28786 c -58.51181 33.8343 -65.57782 31.2932 -64.01599 27.0265 c -63.14061 30.00847 -60.07678 30.6225 -58.59682 26.73053 c -57.81592 24.63023 -63.0745 19.99829 -66.96014 25.6001 c -70.68524 29.58337 -63.96875 39.96512 -54.94102 35.57562 c -53.30992 38.3466 -50.36574 40.29889 -47.29248 40.3965 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -6.544 100.923 cm 0 G 0 g q 1 0 0 1 -72 -223.056 cm q 0 G 0 g 0.3985 w q 0.95125 0.90536 0.77344 RG 0.95125 0.90536 0.77344 rg 74.59233 42.06075 m 71.84314 42.03348 69.30965 39.92882 69.0419 36.4211 c 64.53761 38.14893 61.72398 35.53609 62.39331 31.5846 c 64.1732 26.79276 69.00967 31.82755 71.94727 28.17105 c 73.48672 25.77388 70.59624 22.97017 68.65767 25.3574 c 67.31654 27.22656 63.32043 28.69412 60.42747 28.36688 c 61.83553 32.72244 59.61685 37.51678 53.98958 36.7483 c 45.54619 34.9585 52.17993 22.59335 57.45518 31.38876 c 58.29555 30.29305 57.93114 28.04463 56.33467 26.7506 c 49.49023 20.7614 39.86191 33.96194 31.2078 29.87659 c 44.83224 30.13689 45.23137 19.68056 54.78532 22.52892 c 52.92113 11.67596 68.66512 13.14351 64.90451 21.27206 c 62.07352 16.20256 57.41553 20.75644 60.65802 23.30234 c 64.31699 25.83339 69.94426 22.6603 68.8535 16.09845 c 67.55453 8.62929 57.59154 8.75325 46.56009 20.17883 c 28.73131 34.83206 15.58035 30.09721 0.06195 14.37308 c 13.88719 24.65091 27.30836 34.00903 44.54468 16.77025 c 56.09175 2.77148 67.99826 0.06195 77.14816 7.07002 c 84.31984 12.91544 84.53798 24.71288 93.21689 23.74112 c 96.37013 23.45604 96.35526 17.9205 93.00616 17.71721 c 89.90991 17.59328 90.83458 21.15555 92.98633 21.0688 c 91.9055 22.15459 90.30408 22.34793 89.34471 20.35484 c 86.53355 13.66162 99.64734 11.00664 97.69144 22.46198 c 100.47531 24.6633 97.88974 30.47154 93.1425 28.64206 c 93.50691 31.61186 89.6992 33.67438 83.86618 26.87703 c 81.6822 24.4501 73.92549 25.42435 73.60571 30.98222 c 73.25616 36.6541 80.3981 36.8549 81.15169 33.82063 c 82.01192 30.68721 79.171 28.94449 77.52 30.43683 c 80.998 31.21771 79.5131 33.85287 76.86308 33.01248 c 74.69397 32.22665 74.92947 28.26526 79.89238 27.64552 c 87.14091 26.94397 87.39873 38.48607 80.43031 38.03738 c 78.99747 40.84605 76.72922 42.08057 74.59233 42.06075 c 75.74506 24.00142 m 76.90274 24.0262 78.28601 23.69897 79.81801 22.85117 c 82.85971 21.01921 80.83192 13.68391 75.1154 12.4841 c 79.27759 15.49854 80.53195 19.26161 77.30185 21.81744 c 78.00092 19.02612 75.32611 16.28685 72.63643 19.73264 c 71.30522 21.56706 72.78517 23.9345 75.74506 24.00142 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.965 198.973 cm 0 G 0 g q 1 0 0 1 121.045 -246.6 cm q 0 G 0 g 0.3985 w q 0.94426 0.89182 0.741 RG 0.94426 0.89182 0.741 rg -66.78008 89.49294 m -59.52054 89.58826 -53.60995 84.99802 -51.81772 78.38199 c -43.74309 82.43835 -31.14496 71.53714 -33.52826 64.94017 c -16.0825 57.00853 -28.78549 39.12901 -40.34451 46.31229 c -47.89003 51.77957 -45.51149 59.55391 -37.23192 59.70168 c -42.58957 61.80374 -50.178 59.5682 -46.72699 49.6918 c -44.52003 43.46663 -30.64445 37.56557 -22.6318 46.60782 c -15.49144 52.03221 -0.11914 40.15382 -11.65909 30.40137 c -1.1821 8.0889 -31.70741 0.11914 -38.22812 16.45905 c -41.81738 26.75015 -26.86455 33.54732 -24.99605 21.18752 c -20.06738 30.28221 -41.0023 40.97371 -60.15927 23.92355 c -70.76018 12.84596 -83.64908 10.5723 -100.67538 15.08627 c -83.71104 14.48093 -71.10814 18.11305 -60.96481 35.25377 c -41.81262 31.09253 -46.88428 54.16765 -57.33267 54.22961 c -61.11736 65.90302 -76.53255 69.2587 -84.02565 57.03238 c -96.85733 63.68655 -114.62723 47.48964 -101.39514 34.45773 c -115.05623 25.10568 -129.61343 32.79897 -136.69183 40.28253 c -145.74838 47.78041 -155.13858 48.2952 -163.585 43.56671 c -167.28387 40.702 -176.03535 36.25475 -186.20251 35.48732 c -180.3396 37.74193 -174.77222 40.36833 -167.42212 47.18933 c -158.93279 54.01987 -147.28798 54.01987 -134.64218 43.87656 c -113.07808 32.94672 -110.71384 60.10207 -125.49507 58.286 c -131.31987 56.94182 -132.93098 51.70332 -128.78403 49.82051 c -129.75642 53.40498 -128.03568 56.02185 -123.64563 55.83597 c -113.32594 51.9464 -121.70088 38.57132 -134.1417 46.2694 c -142.25446 51.64612 -138.15993 63.82 -127.09665 62.8095 c -132.81657 72.33792 -120.34238 81.89021 -112.89696 75.36473 c -111.50034 78.82527 -106.72897 80.95119 -102.93951 79.0779 c -98.74968 76.35619 -101.20924 70.2025 -98.71155 67.1185 c -86.95709 51.3077 -69.3731 72.07578 -86.92851 76.68983 c -72.8861 67.42833 -95.08893 56.30309 -97.90121 72.47617 c -99.68393 84.27827 -84.78352 88.7398 -80.71286 83.67291 c -75.97961 87.6864 -71.13675 89.43097 -66.78008 89.49294 c -71.58957 61.15071 m -66.93738 61.2985 -62.08974 58.63872 -58.83891 51.61275 c -49.38197 52.2467 -48.23798 30.3537 -62.20413 39.48175 c -74.68788 5.95824 -126.22437 16.45905 -143.54144 33.18506 c -148.77994 38.12326 -157.78404 38.45692 -165.11508 34.19559 c -171.74065 28.94756 -185.02992 29.2145 -192.82333 34.38148 c -186.57907 32.7942 -179.26234 32.94197 -169.14285 37.74193 c -159.15205 44.21022 -152.07841 45.6545 -145.12872 42.6563 c -138.29817 38.90976 -135.77187 34.50542 -128.83647 30.52528 c -116.13347 25.29634 -105.41339 26.59761 -99.55522 32.71318 c -96.26628 28.3565 -82.18097 32.56541 -85.45087 41.30736 c -88.57298 51.21712 -99.26923 47.37047 -96.905 40.91173 c -95.57988 45.42569 -90.94199 46.3552 -88.70168 40.46365 c -87.51956 37.28435 -95.47978 30.27266 -101.36177 38.75247 c -107.00067 44.78221 -96.8335 60.4977 -83.16766 53.85304 c -80.69855 58.04765 -76.24178 61.00294 -71.58957 61.15071 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 160.186 195.398 cm 0 G 0 g q 1 0 0 1 -71.895 -230.632 cm q 0 G 0 g 0.3985 w q 0.94475 0.89273 0.74323 RG 0.94475 0.89273 0.74323 rg 4.0 M 154.19655 57.91222 m 150.612 57.82915 147.20668 56.46965 145.2789 53.93861 c 137.89998 59.69136 129.03041 58.45863 123.63614 54.1572 c 120.92586 52.00209 119.08987 49.06888 118.75764 45.85591 c 118.4298 42.6648 119.60133 39.20702 122.85364 35.98967 c 121.27121 32.54065 121.37173 29.58995 122.52142 27.26874 c 123.67984 24.93004 125.87865 23.2252 128.42717 22.25475 c 130.9757 21.27992 133.8783 21.03076 136.45741 21.61215 c 139.03654 22.18918 141.29655 23.60114 142.53366 25.9442 c 142.53802 25.94858 l 142.53802 25.94858 l 144.41336 29.90468 144.15546 33.38431 142.7872 35.67929 c 141.41458 37.97427 138.92726 39.08461 136.40059 38.28902 c 136.19078 38.22345 l 136.37001 38.09668 l 138.91852 36.28255 139.96329 34.0444 139.6223 32.2871 c 139.45183 31.40845 138.94037 30.64346 138.07921 30.09703 c 137.22241 29.55061 136.01155 29.22275 134.4597 29.23587 c 132.1516 29.34952 130.52107 30.35057 129.51129 31.84558 c 128.50586 33.3406 128.12991 35.34271 128.37909 37.44534 c 128.87743 41.65938 131.86746 46.27992 137.21805 48.10281 c 137.21805 48.10281 137.21805 48.10281 137.21805 48.10281 c 151.38573 51.7573 161.3875 36.98634 157.35707 27.33868 c 157.35707 27.3343 l 157.35707 27.32994 l 155.21944 21.23186 149.99126 17.71724 143.26369 16.8386 c 136.53174 15.95995 128.30914 17.73036 120.22208 22.21979 c 120.2177 22.22415 l 107.3046 30.0271 97.85365 32.77669 90.32173 32.7461 c 82.79417 32.71112 77.19443 29.89159 72.00124 26.59117 c 66.81236 23.29077 62.02133 19.51389 56.0937 17.52489 c 50.16609 15.54028 43.09319 15.3392 33.31 19.21225 c 33.21384 19.01991 l 33.21822 19.01553 33.22258 19.01553 33.23132 19.01117 c 47.36841 10.16783 56.69698 12.4672 65.37419 16.24844 c 74.05577 20.02971 82.08603 25.26663 93.77075 22.35965 c 93.77075 22.35965 l 93.77513 22.35965 l 102.37804 20.33571 107.43135 14.76218 114.72287 10.00172 c 122.00998 5.24129 131.53961 1.32014 149.0514 2.64468 c 149.0514 2.64468 l 151.59993 2.684 155.05333 4.06538 158.53734 6.32976 c 162.02135 8.59415 165.54031 11.74593 168.185 15.3392 c 170.83408 18.9325 172.61322 22.96292 172.60449 26.99335 c 172.60011 31.00629 170.81221 35.0061 166.38837 38.52507 c 168.68771 45.2308 167.6517 50.13113 165.02448 53.32224 c 162.39291 56.52211 158.18326 57.99965 154.19655 57.91222 c 154.20091 57.69365 m 158.1308 57.78107 162.27487 56.32103 164.85838 53.18237 c 167.4375 50.0437 168.47351 45.22205 166.16106 38.52945 c 166.13483 38.45512 l 166.19601 38.40704 l 170.62862 34.90994 172.38153 30.96257 172.39027 26.99335 c 172.39465 23.02849 170.63736 19.03304 168.01015 15.46597 c 165.38293 11.89891 161.88145 8.76463 158.41493 6.51335 c 154.9528 4.2621 151.51688 2.89822 149.04266 2.86324 c 149.0383 2.86324 l 149.03392 2.86324 l 131.56146 1.54309 122.10614 5.44237 114.84088 10.18533 c 107.57562 14.92392 102.49606 20.52805 93.82321 22.56949 c 93.82321 22.56949 l 82.05542 25.49834 73.94649 20.22205 65.28676 16.44954 c 56.87619 12.78194 47.91484 10.6006 34.49028 18.56093 c 43.64835 15.1862 50.45026 15.40915 56.16365 17.31944 c 62.13498 19.32153 66.93915 23.1159 72.11925 26.40758 c 77.29935 29.69923 82.84665 32.49693 90.32611 32.52753 c 97.80118 32.5625 107.2128 29.826 120.10841 22.03618 c 120.11278 22.03181 l 120.11278 22.03181 l 128.23045 17.52054 136.50114 15.737 143.2899 16.62439 c 150.07869 17.5118 155.39868 21.08322 157.56252 27.26 c 161.66287 37.10437 151.48628 52.0152 137.15685 48.31264 c 137.15248 48.31264 l 137.1481 48.31264 l 131.71446 46.45915 128.66759 41.76866 128.1605 37.47157 c 127.90698 35.32521 128.28728 33.27066 129.33206 31.72319 c 130.37682 30.17134 132.08603 29.13095 134.45096 29.0173 c 134.45096 29.0173 l 134.45532 29.0173 l 136.04214 29.00418 137.29236 29.33641 138.19724 29.91342 c 139.10213 30.49045 139.65729 31.3079 139.83652 32.2434 c 140.1906 34.06187 139.12396 36.29129 136.68474 38.1098 c 139.03654 38.74803 141.31404 37.72511 142.59923 35.57 c 143.92377 33.34497 144.19043 29.94841 142.34131 26.04475 c 141.13919 23.76726 138.94037 22.39026 136.40933 21.82198 c 133.8783 21.2537 131.01503 21.49849 128.50586 22.45583 c 125.99667 23.41316 123.84595 25.08742 122.71812 27.36491 c 121.59032 29.64241 121.48102 32.53189 123.0766 35.96346 c 123.10718 36.03337 l 123.05473 36.09021 l 119.79367 39.2857 118.64836 42.69539 118.97623 45.83405 c 119.29971 48.97707 121.10071 51.8622 123.77164 53.98671 c 129.10912 58.24445 137.90872 59.47281 145.22644 53.71567 c 145.31386 53.64574 l 145.37944 53.73317 l 147.24602 56.25108 150.62949 57.61496 154.20091 57.69365 c 51.07536 43.03635 m 48.11154 43.11942 45.11278 42.22765 42.87462 40.4004 c 40.63646 38.57315 39.16768 35.80608 39.25946 32.17345 c 39.25946 32.17345 l 39.25946 32.16907 l 39.48242 28.9867 40.69766 26.85345 42.38939 25.85242 c 44.08548 24.85573 46.24496 25.00436 48.29951 26.33327 c 48.29951 26.33327 l 49.91693 27.35617 50.39342 28.97359 49.78142 30.14513 c 49.1738 31.31229 47.50392 31.99422 44.9685 31.22922 c 44.97726 31.22922 l 44.52263 31.14616 44.18604 31.20735 43.95436 31.36473 c 43.72704 31.5221 43.59589 31.7844 43.56967 32.13847 c 43.51721 32.85101 43.91937 33.92638 44.8636 35.05855 c 44.86797 35.06294 l 44.87234 35.0673 l 48.45251 40.39604 56.60953 37.79506 57.04231 33.10893 c 57.32645 29.92216 56.29478 26.8622 54.18779 24.75519 c 52.08514 22.65256 48.90715 21.49849 44.87234 22.13672 c 42.00034 22.84926 39.97202 23.65796 38.56442 24.6765 c 37.1612 25.6994 36.37436 26.9234 35.97217 28.49272 c 35.91972 28.70256 l 35.78423 28.53645 l 34.9012 27.46982 34.02692 26.91466 33.04773 26.72668 c 32.07289 26.54309 30.98006 26.72668 29.68613 27.17258 c 29.68175 27.17258 l 29.67737 27.17258 l 25.92235 28.16489 22.91919 27.1682 19.95538 25.74312 c 16.98721 24.31805 14.04965 22.46895 10.38641 21.71269 c 6.24234 20.9302 2.92882 22.89735 0.17921 25.17484 c -0.1049 25.4109 l 0.00435 25.05682 l 1.1584 21.37172 4.02603 19.3434 7.33517 18.67458 c 10.64433 18.01013 14.39935 18.6877 17.38503 20.39691 c 21.41107 22.67877 24.54973 23.76288 28.0862 23.59239 c 31.61827 23.4219 35.56128 21.98808 41.18289 19.19914 c 41.18726 19.19476 l 41.196 19.1904 l 48.17273 16.85608 54.5069 18.53032 58.41055 22.1848 c 62.30983 25.8393 63.77861 31.48276 61.03339 37.03006 c 61.02902 37.03006 l 59.13182 40.95995 55.12762 42.91832 51.07536 43.03635 c 51.06662 42.8178 m 55.0577 42.69975 58.97884 40.7851 60.83667 36.9339 c 60.83667 36.9339 l 60.83667 36.9339 l 63.54257 31.46527 62.1 25.93983 58.26192 22.34218 c 54.41948 18.74452 48.17712 17.0834 41.27032 19.39586 c 41.26595 19.39586 41.26595 19.39586 41.26595 19.40022 c 35.64433 22.18918 31.67511 23.63612 28.09494 23.81097 c 24.51039 23.98581 21.31927 22.87987 17.28009 20.58925 c 14.33815 18.90627 10.62685 18.23306 7.37889 18.88878 c 4.25336 19.51825 1.59991 21.39795 0.38902 24.74644 c 3.09929 22.56949 6.36473 20.7335 10.43013 21.50287 c 10.43013 21.50287 l 10.43013 21.50287 l 14.14145 22.26349 17.0965 24.13008 20.0472 25.54642 c 22.9979 26.96274 25.9311 27.93756 29.62492 26.96274 c 30.93196 26.51248 32.0598 26.31577 33.09143 26.51248 c 34.075 26.70482 34.96239 27.28186 35.82794 28.2829 c 36.25195 26.75291 37.04755 25.51143 38.43765 24.50165 c 39.8802 23.4569 41.93475 22.63943 44.82426 21.92252 c 44.82863 21.91815 l 44.833 21.91815 l 48.92899 21.2712 52.1857 22.4471 54.34079 24.60219 c 56.49588 26.75728 57.54501 29.88284 57.26088 33.1264 c 57.26088 33.1264 l 56.80188 38.05734 48.3782 40.67143 44.69313 35.1897 c 43.7314 34.0313 43.29427 32.9297 43.35109 32.12099 c 43.3817 31.71881 43.54344 31.3866 43.83195 31.18552 c 44.12047 30.98442 44.52701 30.92323 45.02097 31.0194 c 45.02534 31.0194 l 45.02971 31.0194 l 47.50829 31.76689 49.03827 31.09808 49.5891 30.04019 c 50.13988 28.9867 49.72896 27.49605 48.18585 26.51686 c 48.18149 26.51686 l 46.1794 25.21855 44.12047 25.08742 42.50305 26.04037 c 40.88562 26.99335 39.69661 29.05226 39.47804 32.18219 c 39.47804 32.18219 39.47804 32.18657 39.47804 32.18657 c 39.38623 35.75362 40.82443 38.44203 43.0145 40.22993 c 45.20457 42.0222 48.1509 42.90085 51.06662 42.8178 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -35.127 141.617 cm 0 G 0 g q 1 0 0 1 -72.022 -227.8 cm q 0 G 0 g 0.3985 w q 0.94446 0.89218 0.74187 RG 0.94446 0.89218 0.74187 rg 92.63206 52.30986 m 89.20569 52.27599 86.05023 49.65927 85.67772 45.32782 c 82.90707 46.36528 80.63206 46.09436 79.15439 44.9307 c 77.6613 43.7547 76.9871 41.68288 77.40887 39.21083 c 77.40887 39.2047 l 77.41194 39.19545 l 77.96916 37.69315 78.77881 36.94505 79.73007 36.61566 c 80.6844 36.28627 81.76495 36.37245 82.88553 36.49869 c 84.00302 36.62491 85.16054 36.79114 86.25648 36.64954 c 87.35243 36.50484 88.38681 36.05846 89.28572 34.94096 c 90.21852 33.48174 89.806 31.91171 88.8732 31.06512 c 88.40836 30.64029 87.81421 30.40018 87.18927 30.44328 c 86.56741 30.48637 85.91476 30.80962 85.3237 31.53922 c 84.47403 32.71828 82.80548 33.75574 80.89989 34.45456 c 79.02818 35.13799 76.92863 35.48894 75.13695 35.3073 c 75.97737 38.00099 75.72801 40.81783 74.38579 42.85887 c 73.0251 44.92761 70.55305 46.19287 67.0374 45.71263 c 67.03433 45.71263 l 67.03125 45.70956 l 64.38991 45.14928 62.91222 43.7547 62.30267 42.14774 c 61.69313 40.54384 61.94865 38.73367 62.7429 37.33911 c 63.53714 35.94455 64.87938 34.95944 66.44327 35.021 c 67.98558 35.08566 69.7188 36.1816 71.34422 38.83835 c 71.79678 38.17955 71.93222 37.21597 71.71365 36.20929 c 71.48892 35.15645 70.88861 34.06975 69.91273 33.27856 c 69.90965 33.27856 l 69.90965 33.27856 l 67.80087 31.43456 65.492 31.06822 63.02304 31.47765 c 60.55408 31.88708 57.92812 33.0754 55.23137 34.34372 c 52.53459 35.609 49.76395 36.9543 46.98714 37.66544 c 44.21341 38.37347 41.43045 38.44737 38.72443 37.1698 c 38.39812 37.01895 l 38.75522 37.02512 l 47.19647 37.18828 51.52483 34.03589 55.24675 31.2714 c 57.10617 29.89223 58.81473 28.60541 60.8096 27.88504 c 62.77676 27.1739 65.02715 27.02922 67.95172 27.87889 c 67.40683 24.5541 68.18877 22.14363 69.62335 20.57668 c 71.07332 18.99124 73.17593 18.26472 75.2016 18.2801 c 77.22725 18.29858 79.18517 19.0559 80.3427 20.4566 c 81.5002 21.86041 81.84807 23.90454 80.67209 26.44737 c 80.60744 26.5859 l 80.53664 26.45354 l 79.66234 24.89275 78.65567 24.08002 77.70442 23.78447 c 76.75624 23.48587 75.85423 23.69519 75.18312 24.19391 c 74.50893 24.68956 74.06563 25.47456 74.03484 26.32733 c 74.00406 27.17699 74.3827 28.09746 75.37091 28.87323 c 75.374 28.87631 l 77.61821 30.42787 80.46274 30.23087 82.58383 28.63618 c 84.70491 27.04462 86.10255 24.05539 85.43144 20.00407 c 85.02815 17.70135 83.96608 15.9928 82.38373 14.93686 c 80.80138 13.88402 78.6957 13.47766 76.20518 13.80089 c 71.22417 14.45045 64.71622 18.0246 57.8758 25.1113 c 57.87271 25.1144 l 57.86963 25.11746 l 46.78703 34.22675 37.14517 37.31757 27.86041 35.67673 c 18.57565 34.03589 9.66339 27.67262 0.02153 17.90454 c 0.12312 17.78755 l 8.70598 24.16928 17.15955 30.2555 26.12413 32.07796 c 35.08873 33.89735 44.5736 31.46533 55.26215 20.7737 c 55.26215 20.7737 55.26215 20.77063 55.26521 20.77063 c 62.43814 12.07385 69.73111 6.87735 76.65771 4.94714 c 83.58743 3.01382 90.15695 4.35606 95.85524 8.71829 c 95.85524 8.71829 l 95.85524 8.72139 l 100.32831 12.36632 102.62486 17.8553 105.14923 22.26677 c 106.41142 24.47406 107.72902 26.41043 109.39758 27.71573 c 111.06305 29.02408 113.07639 29.70444 115.75468 29.40582 c 115.75468 29.40582 l 115.75468 29.40582 l 116.71208 29.31963 117.42322 28.83937 117.89424 28.15596 c 118.36833 27.47252 118.59921 26.58899 118.58382 25.70546 c 118.56534 24.82193 118.30058 23.94455 117.78648 23.27345 c 117.27237 22.60541 116.51508 22.14056 115.49915 22.07898 c 114.551 22.04204 113.92606 22.28525 113.55356 22.65775 c 113.18105 23.03024 113.05176 23.53821 113.11948 24.05539 c 113.25493 25.09283 114.17848 26.13954 115.47453 26.08719 c 115.66847 26.07797 l 115.52995 26.21957 l 114.84651 26.903 113.99377 27.31552 113.15027 27.22932 c 112.30675 27.1462 111.48787 26.56436 110.88449 25.3114 c 110.88449 25.30833 l 110.8814 25.30525 l 110.00096 23.20879 110.3673 21.40787 111.3832 20.1303 c 112.39603 18.85579 114.0492 18.10156 115.7362 18.05847 c 117.42322 18.01537 119.15025 18.68648 120.29547 20.26881 c 121.43759 21.84502 121.99788 24.32013 121.39757 27.86658 c 123.12769 29.26729 123.18309 31.7732 122.06868 33.648 c 120.95735 35.51357 118.67001 36.75113 115.73929 35.67056 c 115.82547 36.56334 115.62537 37.3976 115.13898 38.01639 c 114.6341 38.66287 113.8337 39.07538 112.79932 39.09694 c 110.72748 39.1462 107.71979 37.6562 104.09024 33.42635 c 102.76956 31.9579 99.70645 31.4992 96.93272 32.28113 c 94.15593 33.06308 91.6808 35.0641 91.48378 38.47816 c 91.48378 38.48125 l 91.0528 45.4602 99.79573 45.63875 100.70389 41.98149 c 100.70389 41.98149 l 100.70389 41.97841 l 101.23338 40.05743 100.62692 38.57976 99.64488 37.80397 c 98.70287 37.05896 97.42836 36.98201 96.44632 37.77934 c 97.42836 38.02563 98.10872 38.3858 98.4843 38.8014 c 98.88141 39.24777 98.96454 39.74957 98.78598 40.18057 c 98.43195 41.04256 97.10204 41.59976 95.4304 41.07025 c 95.42734 41.07025 l 95.42734 41.06718 l 94.042 40.56538 93.42323 39.04153 93.94041 37.56076 c 94.45761 36.08 96.1046 34.64235 99.20465 34.25446 c 99.20773 34.25446 l 99.20773 34.25446 l 101.47968 34.03589 103.21286 34.7778 104.38884 36.00612 c 105.56483 37.23444 106.18362 38.94301 106.2452 40.66388 c 106.30984 42.3817 105.8142 44.11182 104.7552 45.38016 c 103.70235 46.63927 102.08612 47.4335 99.9281 47.31038 c 98.13643 50.7891 95.30728 52.33449 92.63206 52.30986 c 92.63206 52.15593 m 95.25803 52.18057 98.04715 50.66902 99.8142 47.20264 c 99.83884 47.15645 l 99.88809 47.15953 l 102.03072 47.29807 103.60384 46.5192 104.63513 45.28473 c 105.66951 44.05025 106.15283 42.354 106.09125 40.67006 c 106.03278 38.98303 105.42323 37.30832 104.27803 36.1108 c 103.13283 34.91634 101.45197 34.19289 99.22313 34.40837 c 96.1631 34.79012 94.58075 36.19699 94.08511 37.6131 c 93.58946 39.02614 94.17131 40.4484 95.4766 40.92249 c 97.09589 41.4366 98.33344 40.8794 98.64436 40.12207 c 98.7983 39.74342 98.73672 39.31552 98.3673 38.90607 c 98.00096 38.49663 97.32063 38.11182 96.25238 37.87169 c 96.1077 37.84091 l 96.21542 37.73932 l 97.26828 36.78807 98.7121 36.8681 99.74031 37.6839 c 100.7716 38.4997 101.39346 40.05127 100.85474 42.01843 c 100.85165 42.01843 l 99.88809 45.89735 90.89272 45.57718 91.32985 38.46893 c 91.53304 34.98405 94.0728 32.92763 96.88962 32.13338 c 99.70645 31.33911 102.81573 31.78242 104.20721 33.32475 c 104.20721 33.32475 l 104.20721 33.32782 l 107.82138 37.53922 110.80136 38.9892 112.79315 38.94301 c 113.7906 38.92146 114.54175 38.5305 115.0189 37.92094 c 115.49915 37.3145 115.70541 36.48329 115.59459 35.57822 c 115.57921 35.452 l 115.69618 35.49817 l 118.6146 36.62183 120.84344 35.40274 121.93631 33.56795 c 123.0261 31.73624 122.96452 29.29192 121.27135 27.95277 c 121.2344 27.92505 l 121.24364 27.88196 l 121.84703 24.33861 121.28674 21.90044 120.17232 20.35811 c 119.05482 18.81886 117.38321 18.1693 115.73929 18.2093 c 114.09535 18.25241 112.48222 18.99124 111.50327 20.22572 c 110.52122 21.46022 110.16104 23.19032 111.02303 25.24675 c 111.02303 25.24675 111.02303 25.24675 111.0261 25.24675 c 111.61102 26.46585 112.38371 26.99843 113.16566 27.07848 c 113.89833 27.14928 114.64949 26.79218 115.28366 26.20726 c 114.01532 26.14876 113.10716 25.12979 112.96863 24.07693 c 112.89474 23.51971 113.03636 22.95943 113.4458 22.54692 c 113.85524 22.13748 114.52637 21.88506 115.50224 21.92506 c 115.50533 21.92506 l 115.50533 21.92506 l 116.5674 21.98972 117.37088 22.47919 117.90656 23.18109 c 118.44528 23.88298 118.71927 24.79115 118.73466 25.7024 c 118.75313 26.61362 118.5161 27.52794 118.02045 28.24216 c 117.52481 28.95636 116.77058 29.46739 115.77007 29.55974 c 113.0579 29.86143 110.9953 29.1657 109.30214 27.83885 c 107.60896 26.50894 106.28214 24.55717 105.01688 22.34373 c 102.48326 17.91685 100.19286 12.45251 95.75674 8.83836 c 90.0923 4.50075 83.58743 3.1739 76.69774 5.09491 c 69.81114 7.0128 62.53972 12.19086 55.37605 20.87529 c 55.37605 20.87837 l 55.37297 20.88144 l 44.65671 31.59464 35.10413 34.05743 26.09335 32.22572 c 17.3812 30.45866 9.17699 24.68031 0.88351 18.52946 c 10.2237 27.85733 18.89583 33.93738 27.88504 35.52588 c 37.12053 37.15749 46.71007 34.0913 57.76804 25.00049 c 57.77113 25.00049 57.77113 25.00049 57.77113 25.00049 c 64.62694 17.90146 71.15337 14.30577 76.1867 13.65004 c 78.70183 13.32065 80.84756 13.7301 82.46684 14.81064 c 84.08614 15.8912 85.17593 17.64287 85.58229 19.97945 c 85.58229 19.97945 l 86.26265 24.07693 84.84344 27.13081 82.6762 28.75932 c 80.50584 30.38786 77.58435 30.59103 75.2847 28.99945 c 75.28163 28.99945 l 75.28163 28.99638 l 74.25648 28.19597 73.85013 27.22316 73.8809 26.32115 c 73.91478 25.42223 74.3827 24.59412 75.09076 24.06769 c 75.79881 23.54434 76.75316 23.3227 77.75058 23.63672 c 78.71724 23.9384 79.71466 24.75421 80.57974 26.2442 c 81.65721 23.8091 81.32166 21.88506 80.22263 20.55513 c 79.10205 19.19751 77.1903 18.44943 75.2016 18.43405 c 73.21289 18.41866 71.15337 19.13286 69.73418 20.68134 c 68.31807 22.22676 67.53612 24.6126 68.1118 27.96509 c 68.13028 28.08514 l 68.01329 28.05127 l 65.061 27.17082 62.82602 27.3186 60.85886 28.02974 c 58.89476 28.73778 57.19852 30.01535 55.33603 31.39761 c 51.67877 34.11284 47.36272 37.2129 39.16774 37.16672 c 41.71675 38.24727 44.3273 38.1857 46.9502 37.51459 c 49.70544 36.8127 52.46994 35.47354 55.16672 34.2052 c 57.86655 32.93686 60.49867 31.73932 62.99533 31.3268 c 65.49507 30.91121 67.86551 31.28679 70.00816 33.16159 c 70.00816 33.16159 l 71.01482 33.97739 71.63052 35.09181 71.8645 36.17545 c 72.09846 37.26216 71.9507 38.32115 71.41196 39.02614 c 71.34422 39.11542 l 71.28574 39.01997 l 69.65413 36.30167 67.93326 35.23651 66.43709 35.17493 c 64.94095 35.11644 63.65106 36.05846 62.87529 37.41608 c 62.10257 38.77368 61.8563 40.53767 62.44736 42.0954 c 63.03535 43.65004 64.4607 45.00766 67.06203 45.55872 c 70.5315 46.0328 72.92966 44.79832 74.25648 42.77574 c 75.5864 40.75317 75.83575 37.93634 74.96762 35.25189 c 74.93376 35.13799 l 75.05075 35.1503 l 76.83012 35.35349 78.96043 34.99947 80.84756 34.30988 c 82.73776 33.6172 84.38167 32.5859 85.20056 31.44687 c 85.20363 31.44379 l 85.20363 31.4407 l 85.81625 30.68648 86.51201 30.33553 87.18004 30.28934 c 87.84807 30.24318 88.4853 30.50485 88.97789 30.95122 c 89.963 31.84708 90.38783 33.50638 89.41194 35.0241 c 89.40886 35.03024 l 89.40579 35.03331 l 88.48224 36.1816 87.40169 36.65262 86.27496 36.80038 c 85.1513 36.94814 83.98456 36.77576 82.86705 36.64954 c 81.75264 36.5264 80.69055 36.44635 79.78241 36.76035 c 78.87424 37.07437 78.10461 37.77628 77.55664 39.24164 c 77.1472 41.67365 77.80908 43.67467 79.2498 44.81064 c 80.69363 45.94661 82.93172 46.22366 85.7116 45.15851 c 85.80702 45.12157 l 85.81625 45.22316 l 86.14566 49.54536 89.25803 52.12207 92.63206 52.15593 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 31.001 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 60.758 31.968 Td[<28953eb8>]TJ /F9 17.2154 Tf 48.444 0 Td[<002300480051>58<002b0046>]TJ ET 0 G 0 g q 1 0 0 1 224.782 31.001 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -43.654 7.999 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 6.717 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -8.016 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg q 1 0 0 1 -43.654 -29.304 cm q 0.01962 0.46667 0.28235 RG 0.01962 0.46667 0.28235 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -30.586 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -45.319 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.337 0 0.31 RG 0.337 0 0.31 rg q 1 0 0 1 -43.654 -66.608 cm q 0.33725 0 0.3098 RG 0.33725 0 0.3098 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -67.889 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -82.622 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -43.654 -103.911 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -105.192 Td[<26ca2e7b>]TJ /F10 11.9552 Tf 27.808 0 Td[<0055>]TJ /F4 11.9552 Tf 4.555 0 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ /F10 11.9552 Tf 119.551 0 Td[<0056>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -121.563 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -43.654 -142.852 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -144.133 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ /F10 11.9552 Tf 119.552 0 Td[<0058>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -158.866 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg q .3985 w 254.774 -158.866 m 254.774 -151.503 l S Q q .3985 w 254.973 -151.702 m 261.519 -151.702 l S Q q .3985 w 254.973 -158.667 m 261.519 -158.667 l S Q q .3985 w 261.718 -158.866 m 261.718 -151.503 l S Q 0 G 0 g 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 341.767 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+53 0 obj
+<</Length 339>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /YQFIMT+CMSY10-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+1 beginbfchar
+<05> <22C4>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+55 0 obj
+<</Subtype/Type1C/Length 417>>
+stream
+
+7Ÿ ’
+Œ ³
+³ ³› ³› ÷á
+endstream
+endobj
+57 0 obj
+<</Length 777>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /IJRJAI+STBaoliSC-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+31 beginbfchar
+<1C64> <FF08>
+<1C65> <FF09>
+<2571> <6B64>
+<2599> <5927>
+<2628> <7684>
+<26D6> <6D1E>
+<283F> <6D6E>
+<2841> <798F>
+<285B> <9644>
+<2895> <5404>
+<29D4> <6C49>
+<2B88> <7B80>
+<2C3D> <4ECB>
+<2E89> <5229>
+<2FC6> <5F55>
+<2FDE> <7565>
+<2FF7> <9A6C>
+<315A> <8111>
+<3169> <4F60>
+<352D> <795E>
+<374D> <5957>
+<3758> <9898>
+<3832> <5A01>
+<38D6> <6B66>
+<3A49> <96C4>
+<3A66> <7EED>
+<3D2C> <4E91>
+<3EB8> <79CD>
+<3ED9> <4E3B>
+<3F53> <58EE>
+<3F73> <5B50>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+58 0 obj
+<</Length 409>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /LLLGUO+LMRoman12-Bold-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+5 beginbfchar
+<001C> <0061>
+<0022> <0042>
+<0032> <0065>
+<004B> <006D>
+<0060> <0072>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+59 0 obj
+<</Length 509>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /ESNRQK+LMMonoLt10-Bold-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+12 beginbfchar
+<001C> <0061>
+<0032> <0065>
+<0037> <0066>
+<003B> <0067>
+<003F> <0068>
+<0040> <002D>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0054> <0070>
+<0060> <0072>
+<0069> <0074>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+60 0 obj
+<</Length 2294>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /ABFWKB+STFangsong-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+100 beginbfchar
+<1BA2> <3001>
+<1BA3> <3002>
+<1C64> <FF08>
+<1C65> <FF09>
+<1C68> <FF0C>
+<227F> <628A>
+<230F> <4FDD>
+<231F> <80CC>
+<2334> <6BD4>
+<234B> <8FB9>
+<234C> <7F16>
+<2350> <53D8>
+<2356> <6807>
+<23F4> <5F69>
+<240A> <4FA7>
+<24C3> <9A70>
+<2599> <5927>
+<25A0> <4EE3>
+<2609> <5355>
+<2619> <6863>
+<2620> <5BFC>
+<2627> <5F97>
+<2628> <7684>
+<263C> <5730>
+<2647> <70B9>
+<26CA> <5B9A>
+<26DE> <90FD>
+<26EA> <5EA6>
+<2702> <591A>
+<27A9> <98DE>
+<27C7> <98CE>
+<287D> <9AD8>
+<2895> <5404>
+<293F> <5E7F>
+<2956> <56FD>
+<2957> <679C>
+<2959> <8FC7>
+<29BD> <6D77>
+<29E7> <548C>
+<29F6> <5F88>
+<2A80> <82B1>
+<2A87> <5316>
+<2A88> <8BDD>
+<2AAD> <5FBD>
+<2AB9> <4F1A>
+<2ACA> <6216>
+<2AD2> <673A>
+<2B48> <75BE>
+<2B60> <9645>
+<2B69> <52A0>
+<2B7A> <95F4>
+<2B88> <7B80>
+<2C23> <8F83>
+<2C4C> <8FDB>
+<2CC2> <666F>
+<2D07> <89C9>
+<2D75> <9A8F>
+<2D99> <53EF>
+<2DBD> <5BBD>
+<2E42> <6765>
+<2E59> <6D6A>
+<2E7B> <7406>
+<2EF7> <83B2>
+<2F22> <6797>
+<2F40> <7559>
+<2F43> <6D41>
+<2FF7> <9A6C>
+<3087> <6BCF>
+<3088> <7F8E>
+<30BF> <660E>
+<3132> <9ED8>
+<3145> <76EE>
+<3160> <5185>
+<3162> <80FD>
+<3169> <4F60>
+<3170> <5E74>
+<3373> <6D45>
+<33B8> <533A>
+<341F> <53D6>
+<3423> <53BB>
+<3435> <786E>
+<3441> <8BA9>
+<3449> <4EBA>
+<344D> <8BA4>
+<3453> <65E5>
+<345B> <5BB9>
+<3465> <5982>
+<3472> <82E5>
+<34E7> <8272>
+<350B> <4E0A>
+<352A> <6DF1>
+<352D> <795E>
+<35AB> <65F6>
+<35C1> <662F>
+<35D3> <5BFF>
+<369B> <7B97>
+<369E> <968F>
+<36B1> <6240>
+<3721> <592A>
+<3758> <9898>
+endbfchar
+38 beginbfchar
+<375C> <66FF>
+<3762> <5929>
+<376B> <6761>
+<37EC> <900F>
+<382F> <671B>
+<38AD> <4F4D>
+<38B8> <7EB9>
+<38C4> <6211>
+<38D0> <65E0>
+<3972> <4E0B>
+<39A1> <50CF>
+<3A0F> <5C0F>
+<3A11> <6821>
+<3A32> <5FC3>
+<3A3C> <5F62>
+<3B00> <8A00>
+<3B25> <6837>
+<3B9A> <91CE>
+<3B9D> <9875>
+<3BA5> <4E00>
+<3BBE> <4EE5>
+<3BD5> <8BD1>
+<3BE7> <5F15>
+<3C6B> <7528>
+<3D13> <539F>
+<3D18> <5706>
+<3D28> <6708>
+<3D2C> <4E91>
+<3D31> <8FD0>
+<3E88> <679D>
+<3E97> <503C>
+<3EA0> <5FD7>
+<3EA5> <7F6E>
+<3EB2> <4E2D>
+<3F42> <6CE8>
+<3F74> <81EA>
+<3F76> <5B57>
+<3F8E> <6700>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+61 0 obj
+<</Length 511>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /BMTVZW+LMRoman10-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+12 beginbfchar
+<002F> <0064>
+<0033> <0038>
+<0037> <0066>
+<003B> <0067>
+<004D> <006E>
+<004E> <0039>
+<0052> <0031>
+<0054> <0070>
+<0055> <0028>
+<0056> <0029>
+<006B> <0032>
+<0079> <0030>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+62 0 obj
+<</Length 357>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /VYDQHA+STLibianSC-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+1 beginbfchar
+<3BA5> <4E00>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+63 0 obj
+<</Length 692>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /OKBUDR+LMMono10-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+25 beginbfchar
+<001C> <0061>
+<0024> <005C>
+<0026> <007B>
+<0027> <007D>
+<0028> <005B>
+<0029> <005D>
+<002B> <0063>
+<002F> <0064>
+<0032> <0065>
+<0034> <003D>
+<003B> <0067>
+<003F> <0068>
+<0042> <0069>
+<0046> <006B>
+<0048> <006C>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0054> <0070>
+<0060> <0072>
+<0062> <0073>
+<0069> <0074>
+<006B> <0032>
+<006D> <0075>
+<0072> <0077>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+64 0 obj
+<</Length 415>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /JJQEIC+LMRoman10-BoldItalic-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+5 beginbfchar
+<0023> <0062>
+<002B> <0063>
+<0046> <006B>
+<0048> <006C>
+<0051> <006F>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+65 0 obj
+<</Length 384>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /KYGWNF+LMRoman12-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+3 beginbfchar
+<0055> <0028>
+<0056> <0029>
+<0058> <002E>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+67 0 obj
+<</Length 2031>>
+stream
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð
+endstream
+endobj
+68 0 obj
+<</Length1 86440/Length 86440>>
+stream
+
+1nE[£3
+
+^
+088 -'%(
+    -  .
+ '   "
+ $$(
+)7?.K
+£+L!;  
+&*&  &   &%,  V)  +>#%$  *  
+
+H*   6;,> !    !"  
+( "  
+AIId=x)1D + D:  .;D"
+ {Ñ[ _**-zE+F6&
+ 7{ 
+   &$%+ hr
+2M;+
+"Y
+.     ?'   
+
+  )$    '  (A    *< ² &?  þœ F"
+
+ !G!  )@ J!8T;$ 4  -30     &g>
+  IK@ $ 
+2! =!   'YN& '#
+7{#  'k   
+r  
+
+ Y>
+þ4+Y3#) " ?6
+%! BSZ&
+
+$C 0(  .7U@/)%)
+%
+  
+.  þ;$(7 633-  ] 4
+4Ñ.
+ H 
+ q .
+Â#6"*,!F>0  
+v¡+L0@'D@6-
+# <GE1?{5+ :
+ F    %   
+
+
+3! 
+:  /   
+%'/\TG   þ"3=$  , *"D .($ &'!”  I$ 
+&.[%#  #"  @8+  7"   2%
+ . $ $
+ 
+$ 2XE0 ýQ  7$L# À
+
+
+  
+
++   #
+     
+
+ ¡ -  C   .%  "
+     
+  
+    V  #
+ 
+
+ -M  
+þo 4 : #$" *QI= &$  " 
+  ë
+&;T<
+   843 "¤)B( *'!
+@
+ 
+%
+¾ 
+
+¸  
+   ·
+  
+
+ 
+'
+ †% 1/ ¯ ,V""#@-S-
+%
+  *1       8F*%'
+ *# +.( 
+    
+ ©  
+
+  
+
+: 
+   
+
+
+ 
+  8N# !  !*"`
+þâ   *þ3 * - D`LY 9-O/ ;o%#+
+*&rJK!  . 6@ (. 9eb`4 
+  
+
+
+    
+1  ?? ¾  +( # »
+ [ %
+2kjf-    6(3#'XN; #D$ % $
+BcOB!þ[
+!  |>%
+ a9
+H["/&
+Am; 
+ ?n&  ø
+
+#'+ & ((# 
+!( 
+'--
+
+  % # Ä     Ì#-  u   
+
+,,$ &8,$!  (6  (C<9ý•> ') $]$ · 
+  #
+ › )
+Á' &=#" 
+O0 0  $/ $N&   
+ =)D' *V!=
+"
+  
+; 
+ý× %C
+'* …  %*  $  7 O D#>7 *5×! &
+
+   
+"   
+  -  
+œ 
+ 
+þâ 
+ Tr    (5>:Ç+*#-+ +
+")*  R "!    
+ E 
+ 
+ !S $î    œ') '@!
+%C%#   !$   +3<B2% !9!)5&þ¡'&"DJU5!  e
+ ¸'=<8&3#H<(%þÝ"   &
+
+  %6' " E(KI
+"
+$1"
+ 3%  (,) 7 ( ! -% ûA* 4:8 $.6…,% ,5,+SW_7 '&'ALc°
+     4Y
+ X/ ".  #M   
+    
+
+
+
+!  H|"
+ #JE7
+.2. +; .22+!92 .57
+= A<3 #!
+G:PJU>  37?%
+ ! 
+ ?QT <GL@- $1/"/()  $H:'ý— .*  )u
+    &B  
+/@   #!
+  !       !
+ 
+  (    & … 
+
+-@!2% (  ,3    $D-   !G!
+
+   !
+ 6R * !& 
+ @GI!þ«    
+ þ¿  „  ƒ  ƒ
+  
+I"  2# !, -* '1 3    
+ 150-(  4# $ 
+ ?5   "  ’  
+        P
+     z" )
+ +c3CHG  ) :GJ &  ! Í. ^8'RMB$ #%Qsa];Æ?5( #3 " %
+Z
+ !/%
+2D 
+ +/VÆ
+ (       
+ &   n!4+$.
+>@6    ýÑ   !
+  4Ù   2•U04  +1K
+$ ?- KE9-   
+ $$
+  % # þµ #   !  
+   &#    .3
+
+ ,W,#&# !=+7#'-*@ú ( D  
+
+
+    4    '4)! þ*  
+*3 "¥y  †*47 3C~$$!   #-$#   *
+a
+   *)# $
+
+   #!½$ ERc=' %-NKK) !+
+%9
+þÛ82%
+ 'S3(*<@> +   
+ !Z;#(þÆ %"(
+ " 
+#"!+      !  (
+ 
+ $
+þ
+   2*'<Q=2 (  +!     €  ? È "   #  Á >  Á   %
+
+
+ — ',) <
+  %L&&%G#
+:c% 
+  %     !§
+ -N-" +^0 
+ '    
+ ‚
+
+     e 
+
+
+  
+
+%'$    %U3 C# "/% #$ "(/ <H[<  .& &+,
+
+
+ !-  *:  
+0a""*. !+-(
+ :"
+
+.g4 = ;8". $  #
+  $ 50*L7 V·c þr&
+  &N*8
+ 
+  
+  
+  
+
+ 
+          9
+/"' 
+  $ 
+ *<
+W  
+$  (3 Ë
+(-     $  
+
+ .6!  !"*5%&D ^.‰ZIo¡s  '$*!     $" 
+($0#'3;  
+"
+!+"   40G‚8  5+
+%=) !5ý€ 3 0  2- ñ 7-B$
+     
+  B%
+26, '&"  6W,      þ8Y4"
+ -; '4&   -
+     
+ 
+T1"P#D 
+  !
+ #
+j
+ 9 
+'AI #J2     
+#B   2;I0 :
+AU%)2=  
+ cŽþB =s9  
+&   @  %2P% 
+d "   %C
+ þ
+  ! 
+  (@
+
+ K3-g6#  n(
+
+
+  3  JEh   (    ¥  >"
+, #E 
+7@   þ½82%*! !! ''/37#? 5
+
+&: 8
+
+,G" $%I~ 0   
+ 4-% *#  T3 $+:(H1 
+9FZ</  3 A  þS"
+!$`;
+  !  
+ 
+    /5)#
+ 276  " 6 <.)5   ,#/ 
+  )! !5BJ%0 )$    #      
+
+ (
+Ho! ' < ;&&
+ 
+# (:
+/ KZ
+þÆ "   '  $ & 
+' $!
+¨
+ 3h)  :$     
+#  * þ¿
+   
++     
+ 
+  
+      
+ !>BI-  "
+      
+    
+ k   eT
+_   
+ !! ) (   51% 
+3'&    (
+  @@
+" 
+  &  þñ=
+ /  #/r. ? eY '(!1i** 
+  *
+ !
+?9-
+ý¦  3>@,&794ãE  ,! #  
+    
+-
+
+ $" %
+  ,
+   H     %
+ 
+ 
+ 
+F    F/  18    "'2+3%
+
+ 
+Ö ) 
+"7 ;C= Ì"! "2%+36 ' <B<
+" /+  $-%Q B*#?) +'!  >?a(#
+
+%+*;{P3qdJ   
+
+ "
+¬  1$
+ 
+     !,   
+'0 $    
+   
+)Å   
+¢5"&  -R !*'3V9  !     
+   Ã   IU')*N*"  G?    
+ 
+  
+) Œ
+      
+&06>z)"HB:$  /a2  0+!  #   +)">   "3JZ^]'zR20,  %.4 E€*-32
+   þ7     0    ''   & 
+  0 
+'
+( )Q0,
+ý™ H4'  (4!
+  B2+ ) c  B  
+   ! !D
+
+  .  D'##> ›Zt‰J# "#$L*?     & 6 0= "*
++egc)  #+?n-';   $,./*# !$.
+ 03-
+%  I
+@v?" K$  2 ?F+" ,5:   2    2 #  
+š ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ
+
+endstream
+endobj
+70 0 obj
+<</Subtype/CIDFontType0C/Length 1093>>
+stream
+
+†7a«y¦©¨ ±ž„z–”¬£‹žÏ´e9cû2û3_û0÷wÐؼµ·ŸXf‹`ð¾ “‹¡ûW÷ -7ykZb¬¹æ÷
+To ‹ ¶
+÷ ¨ŽŒŽŽŒŒ“’–Ö µ¹—”’Ž” øÇù£
+endstream
+endobj
+72 0 obj
+<</Length 13>>
+stream
+€
+endstream
+endobj
+74 0 obj
+<</Subtype/CIDFontType0C/Length 1888>>
+stream
+
+To ‹ Ö
+Þ º¢ŒŒŒŒŒž‘ ÑŒŒ’ŒŒŒŸ”Œ” ø¡ö
+endstream
+endobj
+76 0 obj
+<</Length 14>>
+stream
+€
+endstream
+endobj
+78 0 obj
+<</Length 2034>>
+stream
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ
+endstream
+endobj
+79 0 obj
+<</Length1 115998/Length 115998>>
+stream
+
+
+
+
+
+
+
+
+ 
++YE°#B°+-, °+ E°CRX° +°
++YE°#B°+-, 9/-, Š Š99//-
+*P nk?Ãd1´
+B
+=#æ
+~Ï_ .. þÄ4v\d h†m’r6HþÏBA=Z N .E eš tq9<?{ þ‹kc "N^I“HQ*(" ¾$Ço1  ±ÆÛÛÚ
+F   *Û- §  ¦,.
+ÚQ<MMßäÇéJ;þ © B.Z–oO •áC üû %þ½Y <Xç¾i„¤ "_849Z"JC!*.^!6$vX7 u$›
+ Q E# #"S l/ý/ý/ý/ý/ý
+´+:’'+ä;( ,NmþÉÙþömlþö '/_KD  +;yo"1 $,_u67|? wÆ& a„P +ALs&n!þˆ(þìNH .B =)\þ"QO
+ /¢G!WÏ>0@"
+%* *)@
+6/ý/ý/ý
+"< Y3 “`c !`$4½
+A ‰þq
+
+xæ þ}hh<)_9 "/’(0ä-"!,J9ǦiIT(%þç…BF
+FÝŠ¼Z ­à'[œ%<U64O:˜ ý8}! 'BQ,#(% 9GZ
+9$
+6  c G% CŠLl! .þ¾D:þ÷ÿV|) ‚UHiJ|zv<<á* ŒþóÀ&5$‚" -·>&B4· X+Ä+ $è^R 3* $-@s `S31BcH7;9‹n C"(®:þù¡
+kïˆT[-*$J% 0 (þL+ © = 6-"
+ ++ 6/ ~58'm
+´ó*~ütÌ…R `ƒ.'+Q]""'>,• §`G4Ž '"()®[)
+!ZMa3%
+9'YM
+ÈI‹!#¶
+
+¦1U..· 
+BU {þä*"™þí .^u‰%0æÞþÂ i=
+œ  ?t D:Bfþˆ“L//8ªw Т "`W@( 8jY }# !!è
+Qþòh?=X LYñH1 "è’C ÕK ).W|
+
+„K’1 zˆ þþÄ™
+$y“ ´Q:/ø
+1 {n
+„»_Áò í+>
+;K"lN„$ [°7 ”—Gs%zƒ'† ‘Rs X5œ!b#þèK(H#OÃÂf ´&Q"'3
+™ }(f 8
+a…
+íB >X{ Ç(
+ °
+!
+
+©}.  4…MOJH 5 êeýð}*K$=ÌmV u35&Nýán0NM
+JIt?;#þäFE0D1þ¤s;6â†&27/¶{2J£Gýæ žFqA
+Kƒ›ŒQ2Y„?
+#'
+Uk+˜  -
+j"œ*Ù(!%;
+4 [An+
+*5v
+ [<JƒDýçÜ3ÉV5P
+#JN½  ™®? -ZKM  &+{,+ ¯ A
+ "þà$%%Y;2H9¿l)6'AžE*2Ív*/ %=éJÈ<S:)K9ÛL;¸ T
+M
+
+Dñ 8;
+K
+ Ù`5þž‘=i
+»þ¤• ©L +olJ$ ; 1eP)&þùp9
+L ³*(ÿ
+7’‘+ "?°á¹:f6þ ‡\(tSeD|6ˆ" ƒ
+
+5ß-+ˆy?@ mþpfD)oN©- Ѩ &SeF" 9B8L t) +#ù! *O &+L1 1%zÏ÷ž
+Q3À0ÃþD $ 
+ýQEZJ3æRz<"". 
+#þ*:bÓ  ŠL* ¯-ãþÙÄk>6V M$P§X.˜
+,'78EJv@KV$+*%F 'P)ŽV#7(*›#€(
+: C/ý/ý/ý/ý2
+—? Ç<K
+r ÍE 60*,h¢H+NO'•#l10$¬)7+Ž#/: TU¸ jB [—&þù $þ”Y>:*J*PG h½(þ×òA@DK L&ÝW3
+%%&?$!  ) 
++ ΆC OH V…‹"w3
+E KX!+!þÍ:<*%&? ( BTNVd7> ®!« º ;W0º
+8q7‹4" % , =Ž" q%m.dVþ5voþì0Æd )­ A9½d2IJVÔ<P€*0VJ8±‚+
++hF.%CÅ|34
+/VÞFÈ~(1c­8ìJ@Ãðù- %P ·l<0[¯
+ % EÏ6fþ¿(× “ þ= -
+%&‡ 6 i!  qˆ !)
+ s!A7 '.a7HS
+Ô&`4oãªôGì8lEDTZ™3·‡*·
+!B1p"#“¸f”r" ¡?pR /( Z-e; * • ÐH;(ºG<?0> .¼NB K^3#*3 "{ A]124F |¾WHm=¡e i Q!
+¤lf?uM3 H:;XlÅý¢›MYRBV#
+ 'ß/þþ[ˆé E,uG<XÉ@J D%þŽ%<ˆ®0U´ž!R%3˜^J ¢¹2'!,
+ <W›Pƒ
+²p¨|] 6c‡ˆº†* *-1/)¥†DO/MY=_]Áõ¬
+ # '
+/í/ý/í/í
+%±O3fEƒÞ»GS#€þ¼ÝC ‹¾sU#,0!“5½Î=¡.$;Rz»U z®ac ¯†T N 9F
+M/ý/ý/ý/ý2/ý2
+&"Ib-ýÕ ) )š)  õ" À̺÷-~ ‹& '!r984B"14b0! &ÀE/Q
+F|ü9É]U>59¤GFP9[F*-!F* (^
+-'þÎ,
+p‡ Œ_2J>/¶!U š-+*ä86@Š“zþÊþö êçÕU:=* ˜!#%I(.u:.H4S <BY wd|í;D C;$,2 !W?oJ !¶
+/í
+€ý¸0L4
+XE 0é"Ã.¥½> U€vm/ n¬Û­ck/
+$þ *  ýß×î$8þˆ0ÌV(*¨c+(**²j-%»-UéGýüPuVSZ/1ßKTO!0S!ý‹ ! H'& Æ %†% $ ‡ 
+ÆS
+3 h
+*
+2øs P¿P2tš(%„/ å-)þ´Fe\R8öµM$†¢Ç©£X&$/ÿ
+!emkkug
+ 
+/
+`1
+UHQBV@`!b(3T3_ /ý22
+( ? 7þ b Ó¦ U(‘ ):4 e ¹<' 
+;)†  ë#[˜ðT - šþú] 7þ¼\
+Ý~%=P‡'@:öV5e /  þS ]V!w_R6H#c  :Z
+$
+d6A 2)$2kœ9#
+i¢® Ae° $› þ?L?©
+&=H{#I)!÷   ,ÄÓ¶&G#
+sþ¨°I-e®q
+ª·%©%9D*;²;+ &çQFLéZ] þÞ
+ + ì0
+ !ãvj 7DJ]qêð‡# ¼àþ¶= (bf n³ ß@ e«!üÐ ˜þ”l ­'-@,F;S#(!Ö­i;B*;nJ ·#oo\?þ\M/;!WB_C VÉ+
+ ZZY[.a k/ý/ý2/ý/ý
+—97
+>½ :®() oL\FWDE]
+5GL ""4T:•0 þ= 6
+(Zz
+n£ w)S m-G$; *IB# =<WI D %>þ^.J;W]: &E™[7*r>pA #8@y.)³FþÁF=I/8ÞpL
+X×4
+)p_ Œ§Û[žS!>I [5 D Á ”IF’) ÜeýëN8K+=µ‹A Fý¯qf EE¯*"6(6Y5?.þò§QE ‹3Ë;-
+D( :B c V/ý/ý/ý/3ý
+ #3þETX Df  *
+"
+MJ
+Ñ :  ;j2 s‹O T(/AK"3?Z4B%Ö,Æ
+/. X ÓNÔ/*6(&&
+1
+‡/1*#
+ ý ‡uIvUN-&#ƒë€=Gp+zIlZ
+þ59"H’_ Ü {N Oš<þú2þ‚“L(01W; Òc\
+?=-
+p)=-% wM0- )
+i#!*G 
+@! þ¡ 6%i10V
++‚^YþÙ£~*ù0ºþ±}O-4 µ #þµ. !!M: žC4I'P k÷«~,j< œ†6 B"È.–-?;  ,)#3;-g[! '"
+U/ý2/ý/ý
+kk0g
+a&þš2¤ IÀ**þñ#57*(5:†L€Ë+¶
+%
+”‘}iþ«?¤¯LKm4j`xV e€aø %#Xq 7QK#¼}J…C 5KBD¼".l þ×"b#8#_-03†xp#p
+ |0 
++J
+-E pþt“S0?A¦€
+¿± %bz:8=*ZþzJ/14Yñ\^TJ! SËéó2X** þ(! °
+E!
+-/í/ý2
+n
+ss
+RS€;Ú "‡A.þ²#×#+¡Ï=&þéK@d`ýH b
+å*Œ
+üˆ KxžAM’f %=Y
+>4Åhýþ¶k fÀY xfÉ2a#%", 866b%}jE1%%‚
+
+þõ%  ,i i+8ÚÓþ»(OE £
+‰
+;e ÖXFH[3b-< 70.NFr3ý m%E/{ÄbCT*=$á( :þÛU5>b OJ L&í <w? Ép­1%_‚
+
+GCH7*F 1> 7H/ýÞ2ý/ý
+A
+xœ#î
+$ ¾§$
+™Ù/ Fd \$) þlà l Í%Xš+<rK'@4ü"K%MBçLXU#FþÅ
+Ûç!  »ÁV# Ž®Ë5•
+M!þ
+ŽY;r c%€'*S=MþwºE-9D¶/š9¶"'9=¥Q?(He n
+ #5Ó3þ®“A:XOOc{ %A¤(h
+O -_€ð.): ýÔ1% »
+
+ß
+  ´»K y­ºA(tL9 Ìm8 Z9A!x pF uÒ4=
+`Õ?€4! þÇ–T6V
+MÄ= #(P,
+8[½}&G5E’¤%Y
+„M1Bm*P=&CK O
+þ~*³½+@I w$L C;
+…¦€_£ŸX1 /(&9 *,Ekfã+œeB[P'%6‡ " x|
+$}79d "ól! +C…!Î"%§Õ' "×"+^P 4:c `i'ýÆ Î›k x N.>;rA :HKmY
+C†
+CF%,”i6Ć Øm ¨þÛ¸y0%RG%/’-Ó+2#-!:F»§vQx±j<G)Aˆ´S
+:pO !<` #nk :m!CRI4MT
+$ %žQL.¦
+ý<T6 ,0a+‡
+$!#-(e/SA-
+Ö )J \‘ 
+c01Ÿ‰ " #[+â+
+ ò[¤þœþÕFþ¯?õ $`xhˆ
+ TƒÂ4;$%% !0 m=-2L @*M; 4&:* #$Y 6:2a1>L$)) '}1#I D ì$R"— A0 5l%f+!BO
+(8¥ú
+P
+8 X
+x0 
+
+þæ $  êe<Wh &©¬ë|
+- 3 F<s('Ei.AP7XQ1#"Z{*>Dlo/©O£þå$(£d=*ª­=#73‘ 0AþæHz (/†,‘š5[öV )+*^ ¨
+þç )$d !!b%3ÿH Qg6“)! , h/¸(ä) /5¿%4"+B  ?Zø•–kÌÁeN+. ° &– *)-7<SRÙd##E3þ¬×0G*#%!$‘&:)y*- þ´)¼§$Q
+AYþ$ Š4,#´U %&þÝ^
+'9
+-[)l>AG
+ýʤuA KwX ,# ¦l61$,
+*D658)B
+B>H C
+
++<
+4/ý2/ý1#"'&'7654''$7#"/6/&'777ñ(  EJ { þLL3â,þš. Ñ)¤¤Á&9þDZZG [&KÍF6%)5$Ì)$€&0;?‹QL ³
+`))±#/ S l
+ùè¸) 
+P*
+
+ 
+þà # !«.
+#ĺ}ÂHš2Z†R
+ - 7>wAÁ )9V ' D% *4Y ")( # 7& >A7%‹' ƒ N,(U ' :2Ô&
+–a:+¡¤b7367B4
+'$ k¡?³uK
+'(6.^*®
+F ¼0(þí;' )"'ž9+þ»•.7HKýè) MþÙ©N$lßfÉ<žÎ( Ô&"<</A#ÕTL!@1B#´7/ Š$š
+*? /ý2/ý2
+,GE`vÞþþ Ó±,þ¾£+4 J­m}Ï.™®.Š ýaþÆh Ž+;ßEMW"+&&¾ ‘V98 ;Z? j#i dwýë:< 2ÍVHŠ
+
+" %Ÿ$‘
+BK±DA?#,'
+Hô!¡ ˜‹ —Œ ™ ›r
+CÎ Ä
+
+! Æ8
+ /ý/ý
+=×+‹2ê!¶&ô{ "I(— % ã()þÂ3w / e(©•)þ
+V Ê©þÍ`B3;9+=7'2ƒ$Ê$D0&%¹¯‚_¨ e2*
+C35!
+ (1 # !
+:07 þHmCU $\F:# S 37€ ^ +
+\ ê"‰
+ý¶<V"%%':*g #% k(9. 8'
+'m”
+H'w,,Ü CB(“ ? u+) Çt"T=„ [þgy3I2¨ùÆ… ¦ã
+5Dpþ›}0E8¦ìÖƒ Iàc"I]O&8)oA HcW :<HBãBA
+ ,« #ž”6 ¾* "/ 4; _&Ÿ XG K^?(1:, þ­0  )”Àa‘^ Ó72%Ž¬ÿEA~/
+z;=Nj7>\¼`V‰" ¢„63 <?Î$ )Ir7 >²U $,þ—!-ÓzB& =%FÆ4A2"i „ FYƒ hþú
+^(~g}kÂ(£"#Š
+n ,G(L
+b%2'X+ '(í4Š
+#þ15, (”þµjO/:æD.38«7+ £×& '¿k=!)‹=% (&“‡1 J¿Y$
+'5(,! /í
+ÕCþåB3~!>
+>£N
+þ/7ý*½+ ‹»QNH UT04%"Á83E‘Z))1/0þáÍ3( 
+N /í/ý22
+S'—.1K
+qþæ(# y4,Ý
+D(
+‹!Éþ·T;
+ÒþªX xD
+­*S €Ê6@
+>,þ†fD
+  tl9H I1d # $9\ &ˆI->!&(Bb ‡ žU#h
+ž¬Ou
+
+ MQ
+/3í/ý2/ý
+*(þ‰
+©\+þëMq}^þ,_ @jž(C}Z $A4#X !_ "iZ&? =T"_Y
+&"Jl;í/¯
+|¶vt
+Šy -ªþy) r% "“
+šBlL âýÄEBI
+@q3_YO8„°Y yý›>V(F%þÜz=HAdÝMRGœ
+ ¯ @
+ mD% ÈmJCþf ŸH!†±þº,-ËV)%¤c,
+ #ƒn, 
+\wJ#
+c
+[ÿ:+
+"H&-¤ÓÕ1 \Þ¥ >»o*@F‡ZþÝE9ø ¢[ X(S".[ \ 8) r?4L, >Ï…U>1½ÎÉf]%'{ ýÛ'‹  „%œ )eO04u
+ B]‰#ÿ
+º =n7§+ &à  F  ïþã×cce)Oï¯p\a cPÍ94‹ @^eœj´,H.KmWWb‡ =*v>þ¤Q¨
+ › !# — .$?4þÂ Ì2 .%h $gÐ87)  1;
+R¦O|C!| "
+ £Â
+b4{7 4ª  #Ÿ(¢3 *1W +*ÑI14 /{b8; [( u (3,% -´.C’ ^Õ" $(þñ#<97 4kþT
+
+V:€5=1Yó2<CþÏ9c
+ A3ì<+. sz.5mN)'‡
+Hdƒƒ
+=  1Mm +
+gM ± Ž
+QpTsv'kRˆêD @NS4)m d3ýæ#HA9K€dS éP
+ þº0
+aétJAB ?qņ(µ
+ C
+ÖS´Je`
+
+>D
+/ý/ý22/í
+ þŽ (
+¾µ$-ø  )¶h2 Oj l„ / "RQ+õš!)â+þ–² âF7C… ,‰F(9š p` wã>F$9*% œ#§3¦¢
+D É' þù È,þõ(EE
+=0O€ 
+iþá y6 z þš / AœY<^)gJhI QpOl0II  px" 2jK.9JF6FaL<]E;).¸8@r ƒ+{ þÑ2‡ þ7@
+/˜
+/62!  !sFG&(ýw‹&)\v—k †kU ´˜R= nQ
+³Ñ‹‡š
+2!L’'º
+‡/ý2/ý/ý/ý1#"'&'7656767#"/6='75'75'>54''>54'7?7'7'?#"/6/&''>7'>77'.7A^…0f9j'2"q/!ili:EZ$ QT - ƒ")'/vS“#u¥­ (y+ ”%  0H Ro ^,Œ–$Rva1&þml:B> =E§m p ŽC99O
+o mjÖ°< W¿ÉD,,l¹@ A%>** 6Vq//'…( H+ Œ+55%%ŠCC U¿J þä²
+ 
+:
+-/í/ý
+±",¬< 8‹u!þLK” þÀf&2? #"!þ±à
+|‘> B  VG`Zý½ f Ò‚'0  ƒ#*É$  —¡¶êVVè4Ù% = Ì-¸™^ ŠL¤
+þ±C % #%%ý®
+/ý2/í/í
+þìê *Ú%þ•þÿF(DHfQU'$&å#þë ‹
+Nb ;/ý/ý/ý2
+2:8ýñ (&þ| %n0 ¿
+n sK qœþæ
+
+8a1 þÞ(r}«ý
+ Xb_KCþÊþüéü-~
+–4Gn.>>
+8#~%#.(Í'^ ›V}&-p@ þg NT4)
+™, ?!x'.`<aF>OXF©
+H/ý2/ý
+9R[½ªXIJs2Ì :3™ 2$IA*uE½0 ø+ (ÕÓ
+²\#
+<:ˆo p0Y‡
+'^A FÌ.4>)ÍwA£9>{*þü>1
+LM1ap$þÐ
+! /ý2/ý/ý2
+Â$ ” 1å @È
+<-b
+þ0$), þÄ&o¤ Ç‹¦j5Y3 "wõ"Êþñû{P6O1 `*7
+ (HI 00: @X 2c ý 30/()žC
+?3€1!kˆÊ ,T9?)! é´
+DC); J5 /ý2/ý/ý/ý
+CU´#* þ`Z“ó
+÷ï)൞ơ·pP AZÒ“P8sMI+2#(1 B_+, #%^,r93¢Ò(%,;
+£¤¦
+/ý
+%J @
+/ý2/ý
+BS þmxE¦¶'x¸
+®dp .æ 9£)$ÙE2>JHý–z&: Iƒ
+7\6&(-%z ª1KO `'y:`L ”($n þþø`$Ic®¼t €± %ˆ1 I_E;®þ6A 4©
+) r & *
+
+? ‘›8 k7& ­}yK’^ ±k+aY
+²Z®(*(--Q 0Ã~8 ÙƒA1A‹ D3Q£?BJE[C5&,X'Bn
+   -&Dnn‹
+º-— þK$oþÏu0G_ïvM´¥- '@9
+ e#þS !† !#œ¤W†]Ù
+3îþlD^SL
+Q Io!&ªh97 ? w þ˜7K?c>f4IQG)þUc² Ú
+ 0¦
+%#9 E # /ý2/ý
+þ¿
+  +þܶ è%ÁþT(†4
+wŠ $ .¦þöD.©}, þ¦¡,ä]‡v8#­&&;5‚3?F$B`b#ýÓ4Ö:…" `Ì8 7
+EL%* " ~ Ž*%
+þï£?%
+þð’
+ !0- %PD :E"+1 ;. #
+
+þì% ±,épn®D.',   %=+  gÄ)Éþ¼Î)! þëÜ þî7A
+¦ »,%`8' šv78!6"'Y
+G\
+TÊE?
+Qýð‘D&<%{µ> .eR&& 06'/9:(#$ » 
+-)9#1%5"v4
+5­iª%þÍ@'5!!//#
+447i
++ $c *5<\%*%*³„bHþ Mz5&&&þìv(/2 &.K W
+S $E$E/3 ][ !tF@ $Dý.0c#6T'l-C.. -'&7H³þ Ã0R%t¦oRX(&8AE%& /@5>H 1.{
+@X oJ
+¡˜© (†€–r dj .Y• ô !$`(#)nþú{ Mûÿ|hI96þÖOH{þx3RnI¾ça p!G6N#7;.Bp
+4 % /ý2/ý/ý/ý
+ 8T,&/qµýå0c
+ES
+/ e32g$‡@ t€ZC
+0 
+MTo›l4f1^  225s49GT ZÄz""$ºC0ºÇ)47¯ 4;;? !ý3Þ~l `Ò:
+6 J&ì!&l t0SœW/$ <l‚;)'‘-CO
+0+{
+>
+ 8(! )'¿[)TNþÙþÎÆðÊ&‘pj7Ö
+Ò0l1.Ò _/ª 8 *! b 6& Ý2S>"%
+yyIGDG^xF6F [_ %G V$ ,h Oj0$ $c t!Y­ D 3z‡x€–#9(H$6 %9
+3- 
++
+PE7©"bTxz ,à *8Dm…fPÖ Î3@o€>+é
+0dMþÛ(h9¼ ™ [z "ÓžW v…E9DR u: o¹5A7$&)H@OP ëL117 @?Æ %?. )*Œ 0V# –U†6*kd
+‚4 B
+ /3ý2/ý
+$h­¯xbý` z @Y,'BN7} !#(%8N%7R „ !66+D{ fz" [V+%#a !]1 ¿>d !
+ 5 $!bnJ5D8r
+  ;
+*ae*#u9¬
+¾h$©k%"º…
+W:´ñؼ¾-R!2J-»þVü6*i--Ù”1*¿!,ø—+-í1Õ*~ "-ÐS;(? 6*KÚ; 3" RjY`Œ+Nz¦M_! y
+%ýy $o "f##"f!p
+)]b
+…  2F 3þ“T0‹5u þB40E6 &3—DþÍ5 ð
+M8ýã\=H&rœV 4‰<Áð"'$ýß,4ZC†Ù ˆ'( i«
+å`I0E%8 'œX,{6+¤#-.5^Tþ3þô4D}:1$- 2Ž((‘a#J -Èn*Pñ7b(#·ü«ñv‚«V >_D, "1%.;lONY:ÓŽ$"
+‰aPa hH"®r {
+9^t ™=æu.3ÖmV… %2 ª 
+K €0)Ô [
+"M*mD K oYB^Q~QH1BJ{†„.;ÎVD9K 9M™I \Ž# ™*=M5 £x^[
+Avm k~iLA
+])S€´ $
+
+ O¯V"'’Ǥ ´F01{90¦(2ÿ
+/ý1#"/654'',7"'.'7qþs& 0¬q;Dj!#qw®$Hþ\+H-o„r *"þ‚%6"QJ
+*:aV†cÊt
+m™ \a@1£¢6a#
+> ln 4#,Q˜*â 8ˆ
+eV5Q;þ¾P& 2
+¡µš—¤“sà7&De ‚ˆ ò0vj7;: 9<VOV+f‰rK6OKBZ cb //C95 lÂA><##
+f% C  -Fm06OqD,‡ 27/Ne4  Y&ýêc<M"HÇY^ ó9
+~ NsŒz€  s‡
+(H
+7ýà_L>cD(X­^[!þÑ “ šõ2þà 4Æ 
+¨Ÿc¨
+¢]F/&! 7,5'' * ,M{m/@6+Tþnc/H14Ežw ʨ""I> : PO-š
+Ë-%'"çM`ýÇÇžS_ŸX; .!´P;L7BKz4 ":JaT
+¤þ '%'/>^ÁoCÎz BþþÀ7Ô ;€§YW#ˆyß–u _θþï¦è
+(/ý2/í/3ý
+tc q$8ÏG8P8(
+U2#zr 
+W.é S7TÕl†Çl Þ &J8 ¡|þþúu%9.;à¡ÊW
+bµœ$}v
+ # 
+!ñ w|OZm Éqþö
+Di¯1 P«%
+06E >/ý2/ý
+(g& $^&#VI%x@*>"!Ÿ
+d.
+Q‚
+©3g&/½ C
+ J'Ò$#- &1n(+ ×O2' ¥¨.þý_ º})EDMp 'y #x C9)mþª;GB?† Ð )`i= : <#U SŠ CBi"w !{n'¨
+
+B/ý22Þ2ý22Þí/ý
+{=;-¶iH\®(è 0f }þ°þ€<ßL"0žX &  í )“n%¢ºJp%P\e_&å5<iþŽl%OM Yg7"€
+7§ " %/%‹")þ}‡ %>† #€ A8=»08M##,Æ 4 j  p {ki€r †
++   '/í/í/ý
+þ”/Å+ !
+þ¾% W&Á`/HE%þ®1 ²«
+ÐJ¤
+ð
+p+* ìz< !è ï1M<&1¶'\E v** þÅ0*ªÍDfÜ”-þN"7N„
+
+*W +=E[`JLýbzîƒ)l%¢+åø% jK*ßS&)¢ 6 b&£¥)}¨jGTcS CNN! +'- !T@A9%* ýð™) *"% $'#'þ߀3R‹"B3>- $q
+ "\+ .>#q
+ ˜ ;7 )Y „G"Ç#¢þþ +00 âÞ.Bfý¹W9KÕ`Fþ>!s¨XP_
+quß $,k3Gž
+'",*x”!$
+(Tgá_&+­h')· $
+I11«E(1ž¾"_N HK Â2 "ýâR9` I;O=« !“!ÏMJ C1=Ÿ "“ "¬±þŪF P¨ËD>Y5
+F/ýÞ2ý/ý
+
+'  3
+ýÇÞ'§* ó ¼»°C% þ
+ ý0<x+¥Í * %ý߇RGLT)-PNS&%"ýg"F# >(+
+9+"- OA qa+poL5  D/1.þÍ:Oa7T§%L
+
+,/ý/ý
+þò* =Ý+OA §-='6?*
+?áF-.
+Vó( … ¢d&$.
+c/21h½þÐ{u9+&UK"$2”#,á*#+JHÈbHØ #b2• ß + .1A#< B, ( &a<& %ýÅ<3 , >W){ !%(&
+5N ""1- ="
+A 7-þû
+u-
+k˜ÿÎ{)"ĉ!Çäþ­,* SY †… % {b99 _ "0S38 b!_&('þr ²VQUi·F+ýÎS#A78¦iOÚA
+WІ<Ð~"_'² &"²%&eW41-cþM‰
+^$ZG .^…?P'¤w|UUªN„’¦
+ ú()M Ð  õ*þÕ
+îA$þ®¦(˜/€Ÿ—¯†~žšþ®Û þíÜþêÙ$þè0( OC2 F
+!1- ##)`8C&#L +!E"% 'þâ ­ o a
+n
+ n mÙ<8
+?D
+- 106 /ý2/ý/33ý22
+ G ç*õÛþûã \¥þËjP)6Ì ,E=ž+HR‚T-8¢0RÒÒÏ
+þc„'o-'Ã]F,^L+ ßX8. »»=ý}‡7.O“±#• ž'‡ ýN$ #Ø #!"Ù "þì_} ý÷D' .Ä
+}=CHC3S(Œ!%‹"#¥F
+#/ý/ý
+zÒ‡1‡$rþå4m!+FXëAáJŸ ¸hl09N>%•'-1)þVB@h{4W EŠ40&G9 #%“"%&"6B]
+(yY- :F  G ?/ý/ý/ý2/3ý
+uI
+w‰št=u dD2)% -œ&Ø(9KS] w"/3!tHJ,HI Ss#ü ea*B#.K_*< !6þª ] ? `ušZ[ Yk(B,&OU
+&#%z*\9
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R        ´ ´ ´ ´ ´ ´ ´ ” F F F F F F F F F F F F F F F F F F F F ø ø ø ø ø ø ø ø ø ø øààààààààààààààààààààààààbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222ššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔd¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŠŠŠŠŠŠŠ¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾............¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤TTTTTTTTôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢LLLLLLLLLØØØØØØØØØØØØØØØØØzzzzzzzzzzzzzz p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " #
+B
+B
+B
+B
+B
+B`B`B`B`B`B`B`B`B`C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C CòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀE8E8E8E8E8E8E8E8E8E8E8EØEØEØEØEØEØEØEØEØEØEØEØF~F~F~F~F~F~F~F~F~F~F~F~FòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòG4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"HrHrI*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I|I|I|I|I|I|I|I|I|I|JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤KfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfL>L>L>LÊLÊLÊLÊLÊLÊLÊLÊLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHNNNNNNNNNNNNNNNNNNN„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O OÐOÐOÐOÐOÐP¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨QQQQQ^Q^Q^Q^Q^RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRªRªRªRªRªRªRªRªRªRªRªRªRªRªRªSfSfSfSfSfSfSfSfSfSðSðSðSðSðTØTØTØTØTØTØTØTØTØTØTØTØTØULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄVBVBVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎWª
+
+
+
+
+
+Á
+
+
+ HHÀ¸x…KPX±Ž±
+endstream
+endobj
+81 0 obj
+<</Subtype/CIDFontType0C/Length 2023>>
+stream
+
+")ûûí(÷˸­«¤I@÷y‹‰€z²[m^u`^g¥±sq´ˆÄ´°Ç¨¸ª ±¬Á®µ|^ª–z‹‰yøˆu§ù¤µ½ ½÷ˆ½ø]÷<¯€¸eµx {•K³Ó°¼¿Íç2Ä0':A.y^µ\–°r¤zQn5S(!ñHô÷êÞöD÷ñRd[OhûÛ]©‡­œÈ̵ÒÔËWC üA@W95CÉÞÅ«Ëàº÷=§xºmN÷Æ‹ªøª÷4ß“¡÷Íçâ÷ùù°f¬VE6V!û<lÚûØ^€‹Hl÷Ž³º‹ˆ³ªvA‰–¯÷Ö÷ªû ÷ã»»·Žš‹„š‡y~rt›w¦¨šŸ£øˆûb¢÷RŸ¢›¢÷‹¢¢÷3Ö‹Ö‹Ö€€øyø(œ«dw_…baû€¬aaŽu.FF>_¡e¤v~|yjhl˜eªwOzk`cCîT÷÷
+ó¾Ù®}¾X§§VQ‹Nr`‹Œ„kvª«‹¢œŸo²´ˆžèÐÐØ°{°r¢­¯¯€‹’‹ŽŠ€‡†€z˜›•ž’¢ûDû
+To ‹ ª
+Ð ¡ŒŒŒ’ŽÈ ¤´Ž‘‘ŽŽŽ‘
+endstream
+endobj
+83 0 obj
+<</Length 16>>
+stream
+€
+endstream
+endobj
+85 0 obj
+<</Length 1909>>
+stream
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü
+endstream
+endobj
+86 0 obj
+<</Length1 63320/Length 63320>>
+stream
+
+l
+
+f‘kM!".
+  %GNY6-ZM:   „  
+  
+
+
+
+endstream
+endobj
+88 0 obj
+<</Subtype/CIDFontType0C/Length 3354>>
+stream
+
+sú U Í
+?
+Ù÷A…ÈTÈ÷ÒȽÐ÷{Ðxø›ª©r‹|aŽƒ÷lÒUßû$`%‹Bm {£š§”°Œ“ŒŒŸŒ™˜‹”׿lDûEˆûY+€FÊJñ°É’ªº@l¡»Š±§¡‹ªû=òt‹vdy˜zg^‹ƒMb­²¼á°÷%øf[“‡•ˆ‘ûßùG•†ƒœuw|zyƒŽ…÷ßýG“z¡Ÿšœ8È÷½È÷½È÷xÐàøgW¨rŒ‚ûŽ‹¯ª÷5¤ˆ´T©µ¤š¬Œ¤÷¤‹³Ž“±ã®‘Ÿ‘£ªs‹yEû~3zŠ…‹Yo1g‹|g{|gYŠt…w…sm£Š•¥Š÷ˆUû:m‹^¿ntµÂ„»£‹ª8È÷½È÷½È÷xÐàøg÷Å©sŒsŒû‰Ã÷;§‹¸W¨¥[Lhzr‹lqž‡™÷‰‹gjû5cšk¶tSk‰\‡ûFn‹gû%‰…w…sl¤‹œâêŸÜšŒ‘‹½§å¯‹š¯›š¯»Œ£‘Ÿ‘£8Èù#È÷rÐøwVªs‹{û,ù#÷,š¤‹©ªs‹{ûIj„‚kýKl‘­÷Iš¤‹©8Èù#È÷}Ð÷ÂaùKª…•iûI|r‹ml£‹›÷,ý#û,|r‹ml£‹›÷I¬’”«…È÷ØÈÔÐ÷säøf÷§n‹…{‰w„~…x\A6CÑ滧÷÷ ²‹‚hŒž}££ œ¨Ô#‹^û@Oû3û é%÷÷­íœ…ÈTÈ÷ÏÈ÷È÷¥÷.FÐF÷.~ø”ª©q‹}^ø‘ª…•iB{r‹lm¥‹™¸û2¨jb›`û+,ûŽûå*õõ¦¨§Ng‹}³Ô›¤‹ªû.÷7®S^8>DOÒäëÑÌÑ˼ST…È‹Ç×Ç÷Èpød÷§n‹…yƒˆx„XuU‚o@@½á{÷¾ ž‹°÷Kíûû +'û°ûð&÷÷ºå¤D÷"ûžÔ™ÆÂÑ¿Ér$”÷WÑÝÑøzø®f‹}ûî}f‹hh¬‹—÷ú—¬‹®û,®j‹ûúj‹hh°‹™÷î™°‹®ûyÇ÷AÄÂÇ÷?ÇmǨÅxÐRÐ÷HÐqŇÐQÅ
+
+š¥‹©‹Èø}È÷xÐøg©ªs‹{ûø‘ª…•iû2{r‹lm¥‹™÷ü}û{r‹lm¥‹™÷Ýš¤‹©‹È÷ÉÈTÈÀÃ÷ Ã÷ üø˜©ªv‹g÷†Ÿ‹÷2mb~do­|ojkm}usÜ©‰w‹yk|q‹ml ‹¯ûÉgv‹lm¦‹™ãš¥‹©ªv‹g÷G¼ä´º´¢™zJû}xr‹lm¦‹™Öš¥‹©ªv‹g÷Gä´º´¢™zJû}xr‹lm¦‹™Öš¥‹©‹È÷ÉÈTÈìÐ÷Tиø”©ªr‹{_÷|ðX¶<H^ixxЫ‹šcB{r‹lm¥‹™¸ûÉ_{r‹lm¥‹™÷3™¥‹©ªr‹{_÷E¨ïÕ±¾À™oOûwd{r‹lm¦‹™÷-™¥‹©…È÷ØÈÄÐ÷¤Ðøg÷l÷.îûû.(ûûê,÷÷êë÷F’.M@AAMÖèæÌÌÒÓËJ0ûrÈ÷/È÷ÏÈTÈìзÐ÷ Ðø|÷l÷2í![^yli™eB{r‹lm¥‹™¸ü§_{r‹lm¥‹™÷3™¥‹©ªr‹{_÷ba´¶‚«÷ìê÷F+EJE=hã»ÔÆÅÀÊÕÅB4‹È÷ÉÈTÈ÷-Ð÷Ћà0ø{ø Ÿµ8XKyLT­ت…•iû|r‹ml£‹›ÜûÉ:|r‹ml£‹›÷™š¥‹©ªq‹|û÷$éÆë÷ sŒœw¤¡Ÿ›¦…È÷ØÈÓÈ÷Èø_÷óû kG—nG—²¥«ªêÞ™mqŽzŒzª®‹ ŸÐ›‹¤ms‡}„‰ __‹xû;t9g/ôzç}¼ƒÛ~Vffj0\S–Ùr†‡–qh‹vw*{‹r©”›Œ°—g¼À‰§÷2«Þ»…È÷ÏÈ÷-Ð÷2ÐøU÷‹ hjŠvzMŠRt>‹¿¤÷‚÷8š¤‹©ªs‹{û8Ýž‹¡ih‹vw94{r‹lm¤‹šãûˆ+ÏgÔÕܶä‹ÈøˆÈ¿ä÷rÐnЈøl´¥ž‹¡ih‹xoû‚ƾëÖ¶³èÊùËÛ÷ &Öûû
+<96f§€œ ¢œ§—†˜‚’¹šºªÂÝØ]3EZQITûqûN‚ƒ…†}l¤‹›÷笒”«…ÈTÈ÷ÉÈ÷¥÷.FÐF÷.|ø”ª©q‹}^÷ݪ…•iB{r‹lm¥‹™¸ûi¼1:k<‹¬«÷¢ª…•iB{r‹lm¥‹™¸û”+ÐsÔ´´•§°\kŒ ‹Ô›¤‹ª‡×÷¾È›÷[é÷[øø%©s‹yûys‹ml¢‹ž¼Yû¾Š‡¥~¹´Êyˆ–hx‹u€ˆ„cû‡wŠW÷¾¼£‹©ªt‹xûys‹ml ‹©ÇûätŽ|³³Ž”Ȥ㌙Ž¡ŒW°û ƒz—‹—°Ž›¡Ç÷ä© ‹ª
+To ‹ È
+Ð ±›‘ŒŒŒŒŒŸ‘ ® ’ŒžŒ•Á¬• ø¡ö
+endstream
+endobj
+90 0 obj
+<</Length 15>>
+stream
+€
+endstream
+endobj
+92 0 obj
+<</Subtype/CIDFontType0C/Length 1137>>
+stream
+
+To ‹ ¯
+ë ¯ŒŽŒŽŒ’ŒÔš ÉŽª–—Œ‘÷ 
+endstream
+endobj
+94 0 obj
+<</Length 11>>
+stream
+€
+endstream
+endobj
+96 0 obj
+<</Subtype/CIDFontType0C/Length 689>>
+stream
+
+•”‹Ž‘†‡~9C)ZX&t û2™û ¿ û ÆÝJ–‘ûšûzvú}w÷xÁ÷®÷×÷S÷÷ P9Ì€‡†‰…ˆ‹‰œzï&Ãû9û`ûV\û;ûû
+‚‹‰ˆ…‰˜ÝÓí¼¾ñ¢÷
+To ‹ ¨
+Ì žŒŒŒ‘Œ³š ¡¦™‘Ž‘ ø~ù
+endstream
+endobj
+98 0 obj
+<</Length 12>>
+stream
+€
+endstream
+endobj
+17 0 obj
+<</Type/ObjStm/N 62/First 471/Length 8440>>
+stream
+16 0 21 119 23 232 29 322 32 442 35 562 42 662 4 773 45 806 44 837 43 868 46 899 48 917 47 974 3 1012 51 1089 18 1098 24 1189 50 1266 30 1324 33 1401 36 1478 52 1555 49 1613 2 1698 1 1984 54 2211 25 2217 56 2345 5 2530 66 2717 71 2972 7 3010 69 3181 75 3429 9 3514 73 3686 11 3933 77 4113 82 4348 13 4428 80 4602 19 4847 84 5035 89 5291 26 5464 87 5637 93 5880 37 5918 91 6095 97 6359 39 6380 95 6554 6 6799 8 6922 10 7053 12 7185 14 7302 20 7437 27 7562 38 7696 40 7834 <</ColorSpace 4 0 R/Font<</F1 6 0 R/F2 8 0 R/F3 10 0 R/F4 12 0 R/F5 14 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</Type/Annot/Subtype/Link/Border[0 0 0]/H/N/C[.5 .5 .5]/A<</S/GoTo/D(1)>>/Rect[152.801 139.998 212.29 181.64]>>
+<</ColorSpace 4 0 R/Font<</F6 20 0 R/F1 6 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ColorSpace 4 0 R/Font<</F1 6 0 R/F7 25 0 R/F4 12 0 R/F8 27 0 R/F5 14 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ColorSpace 4 0 R/Font<</F1 6 0 R/F7 25 0 R/F4 12 0 R/F5 14 0 R/F8 27 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ColorSpace 4 0 R/Font<</F1 6 0 R/F7 25 0 R/F4 12 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ColorSpace 4 0 R/Font<</F1 6 0 R/F9 38 0 R/F4 12 0 R/F10 40 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</pgfprgb[/Pattern/DeviceRGB]>>
+<</Names[(0)43 0 R(1)44 0 R]>>
+[18 0 R/XYZ 27.35 273.13 null]
+[18 0 R/XYZ 28.35 259.92 null]
+<</Dests 45 0 R>>
+<</Title<feff7b804ecb>/A<</S/GoTo/D(0)>>/Parent 47 0 R>>
+<</First 48 0 R/Last 48 0 R/Count 1>>
+<</Trans<</S/R>>/Resources 16 0 R/Type/Page/Parent 49 0 R/Contents[15 0 R]>>
+[21 0 R]
+<</Trans<</S/R>>/Resources 23 0 R/Type/Page/Parent 50 0 R/Contents[22 0 R]/Annots 51 0 R>>
+<</Trans<</S/R>>/Resources 29 0 R/Type/Page/Parent 50 0 R/Contents[28 0 R]>>
+<</Type/Pages/Count 2/Parent 49 0 R/Kids[18 0 R 24 0 R]>>
+<</Trans<</S/R>>/Resources 32 0 R/Type/Page/Parent 49 0 R/Contents[31 0 R]>>
+<</Trans<</S/R>>/Resources 35 0 R/Type/Page/Parent 52 0 R/Contents[34 0 R]>>
+<</Trans<</S/R>>/Resources 42 0 R/Type/Page/Parent 52 0 R/Contents[41 0 R]>>
+<</Type/Pages/Count 2/Parent 49 0 R/Kids[33 0 R 36 0 R]>>
+<</Type/Pages/Count 6/Kids[3 0 R 50 0 R 30 0 R 52 0 R]/MediaBox[0 0 362.83 272.13]>>
+<</Creator(LaTeX with Beamer class)/Title<feff795e9a6c6d6e4e910020004200650061006d006500724e3b98980020002d0020007000670066006f0072006e0061006d0065006e0074002d00680061006e96445f55798f5229>/Author<feff679783b2679d>/Producer(xdvipdfmx \(20190503\))/CreationDate(D:20190811104346+08'00')>>
+<</OpenAction[3 0 R/Fit]/PageMode/UseOutlines/PageLabels<</Nums[0<</P<feff0030>>>1<</P<feff0031>>>2<</P<feff0032>>>3<</P<feff0033>>>4<</P<feff0034>>>5<</P<feff0035>>>]>>/Names 46 0 R/Outlines 47 0 R/Pages 49 0 R/Type/Catalog>>
+[500]
+<</Type/Font/Subtype/Type1/ToUnicode 53 0 R/Widths 54 0 R/FirstChar 5/LastChar 5/BaseFont/YQFIMT+CMSY10/FontDescriptor 56 0 R>>
+<</Type/FontDescriptor/CapHeight 683/Ascent 0/Descent 0/ItalicAngle -14.04/StemV 40/Flags 70/FontBBox[-29 -960 1116 775]/FontFile3 55 0 R/CharSet(/diamondmath)/FontName/YQFIMT+CMSY10>>
+<</Type/Font/Subtype/CIDFontType2/BaseFont/IJRJAI+STBaoliSC-Regular/FontDescriptor 66 0 R/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/CIDToGIDMap/Identity>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 514/XHeight 434/AvgWidth 436/FontBBox[-24 -305 1024 916]/ItalicAngle 0/Flags 6/Style<</Panose<000002010600040101010101>>>/FontName/IJRJAI+STBaoliSC-Regular/CIDSet 67 0 R/FontFile2 68 0 R>>
+[28[547]34[800]50[513]75[938]96[460]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/LLLGUO+LMRoman12-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 69 0 R/DW 280/W 71 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 109/CapHeight 806/AvgWidth 618/FontBBox[-476 -289 1577 1137]/ItalicAngle 0/Flags 262150/Style<</Panose<000000000800000000000000>>>/FontName/LLLGUO+LMRoman12-Bold/FontFile3 70 0 R/CIDSet 72 0 R>>
+[28[525]50[525]55[525]59[525]63[525 525]75[525]77[525]81[525]84[525]96[525]105[525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/ESNRQK+LMMonoLt10-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 73 0 R/DW 280/W 75 0 R>>
+<</Type/FontDescriptor/Ascent 783/Descent -217/StemV 83/CapHeight 783/AvgWidth 500/FontBBox[-454 -308 734 1039]/ItalicAngle 0/Flags 262151/Style<</Panose<000000000809000000000000>>>/FontName/ESNRQK+LMMonoLt10-Bold/FontFile3 74 0 R/CIDSet 76 0 R>>
+<</Type/Font/Subtype/CIDFontType2/BaseFont/ABFWKB+STFangsong/FontDescriptor 77 0 R/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/CIDToGIDMap/Identity>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 860/AvgWidth 389/FontBBox[-4 -144 1003 860]/ItalicAngle 0/Flags 6/Style<</Panose<000002010600040101010101>>>/FontName/ABFWKB+STFangsong/CIDSet 78 0 R/FontFile2 79 0 R>>
+[47[556]51[500]55[306]59[500]77[556 500]82[500]84[556 389 389]107[500]121[500]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/BMTVZW+LMRoman10-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 80 0 R/DW 280/W 82 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 69/CapHeight 806/AvgWidth 549/FontBBox[-430 -290 1417 1127]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/BMTVZW+LMRoman10-Regular/FontFile3 81 0 R/CIDSet 83 0 R>>
+<</Type/Font/Subtype/CIDFontType2/BaseFont/VYDQHA+STLibianSC-Regular/FontDescriptor 84 0 R/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/CIDToGIDMap/Identity>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 617/XHeight 486/AvgWidth 358/FontBBox[-83 -303 1003 918]/ItalicAngle 0/Flags 6/Style<</Panose<000002010600040101010101>>>/FontName/VYDQHA+STLibianSC-Regular/CIDSet 85 0 R/FontFile2 86 0 R>>
+[28[525]36[525]38[525 525 525 525]43[525]47[525]50[525]52[525]59[525]63[525]66[525]70[525]72[525]75[525]77[525]81[525]84[525]96[525]98[525]105[525]107[525]109[525]114[525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/OKBUDR+LMMono10-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 87 0 R/DW 280/W 89 0 R>>
+<</Type/FontDescriptor/Ascent 778/Descent -222/StemV 69/CapHeight 778/AvgWidth 500/FontBBox[-451 -316 731 1016]/ItalicAngle 0/Flags 7/Style<</Panose<000000000509000000000000>>>/FontName/OKBUDR+LMMono10-Regular/FontFile3 88 0 R/CIDSet 90 0 R>>
+[35[532]43[532]70[532]72[297]81[591]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/JJQEIC+LMRoman10-BoldItalic/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 91 0 R/DW 280/W 93 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 96/CapHeight 806/AvgWidth 634/FontBBox[-518 -307 1565 1147]/ItalicAngle -14.03619385/Flags 262214/Style<</Panose<000000000800000000000000>>>/FontName/JJQEIC+LMRoman10-BoldItalic/FontFile3 92 0 R/CIDSet 94 0 R>>
+[85[381 381]88[272]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/KYGWNF+LMRoman12-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 95 0 R/DW 280/W 97 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 65/CapHeight 806/AvgWidth 537/FontBBox[-422 -280 1394 1127]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/KYGWNF+LMRoman12-Regular/FontFile3 96 0 R/CIDSet 98 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/IJRJAI+STBaoliSC-Regular/Encoding/Identity-H/DescendantFonts[5 0 R]/ToUnicode 57 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/LLLGUO+LMRoman12-Bold-Identity-H/Encoding/Identity-H/DescendantFonts[7 0 R]/ToUnicode 58 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/ESNRQK+LMMonoLt10-Bold-Identity-H/Encoding/Identity-H/DescendantFonts[9 0 R]/ToUnicode 59 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/ABFWKB+STFangsong/Encoding/Identity-H/DescendantFonts[11 0 R]/ToUnicode 60 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/BMTVZW+LMRoman10-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[13 0 R]/ToUnicode 61 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/VYDQHA+STLibianSC-Regular/Encoding/Identity-H/DescendantFonts[19 0 R]/ToUnicode 62 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/OKBUDR+LMMono10-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[26 0 R]/ToUnicode 63 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/JJQEIC+LMRoman10-BoldItalic-Identity-H/Encoding/Identity-H/DescendantFonts[37 0 R]/ToUnicode 64 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/KYGWNF+LMRoman12-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[39 0 R]/ToUnicode 65 0 R>>
+
+endstream
+endobj
+99 0 obj
+<</Type/XRef/Root 1 0 R/Info 2 0 R/ID[<93eb94fce78fbcb8e4107c3ab534043b><93eb94fce78fbcb8e4107c3ab534043b>]/Size
+100/W[1 3 2]/Length 600>>
+stream
+
+ œ
+
+endstream
+endobj
+startxref
+1057337
+%%EOF
diff --git a/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.tex b/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.tex
new file mode 100644
index 0000000000..325c61c158
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/heavenlyclouds-sample.tex
@@ -0,0 +1,89 @@
+% !TEX program=xelatex
+\documentclass{ctexbeamer}
+
+\usetheme{HeavenlyClouds}
+
+% Mac 或 Linux 上请自己设定 \lishu!!
+% \providecommand{\lishu}{\CJKfontspec{Libian SC}[BoldFont=Baoli SC,Scale=1.2]}
+
+\author{林莲æž}
+\title{神马浮云\\Beamer主题}
+\subtitle{\texttt{pgfornament-han}附录ç¦åˆ©}
+
+% å¯ä»¥æ”¾å„自高校的校徽,中国高校校徽好åƒå¤§å¤šæ•°éƒ½æ˜¯åœ†å½¢çš„。确ä¿ä¸€ä¸‹èƒŒæ™¯æ˜¯é€æ˜Žè‰²çš„ png 或 pdf 档就å¯ä»¥äº†
+% \titlegraphic{\includegraphics[width=2cm]{example-grid-100x100pt}}
+
+% \alttitlecircle %% 试试å–消注释,有惊喜
+% \simpleprogressmarker %% 神马太过引人注目的è¯ï¼Œå¯ä»¥ç”¨ç®€å•åœ†ç‚¹å–代。
+
+\begin{document}
+
+\begin{frame}[noframenumbering]
+ \maketitle
+\end{frame}
+
+\section{简介}
+
+\begin{frame}[fragile,allowframebreaks]
+ \frametitle{此主题脑洞略大}
+
+ \begin{itemize}
+ \item æ¯ä¸€é¡µçš„背景的云彩纹样,ä½ç½®ã€å¤§å°ã€æ·±æµ…都是éšæœºçš„
+ \item 所以如果内容很多页的è¯ï¼Œç¼–译时è¿ç®—å¯èƒ½ä¼šæ¯”较花时间
+ \item 导言区加上 \verb|\alttitlecircle|,标题页的纹样会å˜åŒ–
+ \item 若觉得进度æ¡ä¸Šçš„神马太过引人注(侧)目,å¯ä»¥ç”¨ \verb|\simpleprogressmarker| 简å•åœ†ç‚¹å–代。(默认值是\verb|\shenmaprogressmarker|)
+
+ \framebreak
+ \item 标题页的寿字纹,å¯ä»¥ç”¨å„自高校的标志代替。
+ \item 中国高校校徽很多都是圆形的。确ä¿ä¸€ä¸‹èƒŒæ™¯æ˜¯é€æ˜Žè‰²çš„png或pdf档。
+
+ \verb|\titlegraphic{\includegraphics[width=2cm]{logo}}|
+
+ % \medskip
+ %
+ % \item 浮云有了,神马呢?
+ % \begin{itemize}
+ % \item 以åŽå¦‚æžœåšå‡ºæ¥äº†é©¬çš„简易图腾纹样,æ‰è€ƒè™‘å–代掉进度æ¡çš„圆点å§
+ % \item 2019å¹´8月,åšå‡ºæ¥äº†
+ % \end{itemize}
+ \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+ \frametitle{套马的汉å­ä½ å¨æ­¦é›„壮}
+
+ \begin{itemize}
+ \item 飞驰的éªé©¬åƒç–¾é£Žä¸€æ ·
+ \item 一望无际的原野éšä½ åŽ»æµæµª
+ \item 你的心海和大地一样宽广
+ \end{itemize}
+
+\end{frame}
+
+\begin{frame}[allowframebreaks]
+ \frametitle{å„ç§ block}
+
+ \begin{block}{你是我天边最美的云彩}
+ 让我用心把你留下æ¥
+ \end{block}
+
+ \begin{exampleblock}{你是我天边最美的云彩}
+ 让我用心把你留下æ¥
+ \end{exampleblock}
+
+ \begin{alertblock}{你是我天边最美的云彩}
+ 让我用心把你留下æ¥
+ \end{alertblock}
+
+ \begin{theorem}[你是我天边最美的云彩]
+ 让我用心把你留下æ¥
+ \end{theorem}
+
+ \begin{proof}[你是我天边最美的云彩]
+ 让我用心把你留下æ¥
+ \end{proof}
+\end{frame}
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/pgfornament-han/lppl-1-3c.txt b/graphics/pgf/contrib/pgfornament-han/lppl-1-3c.txt
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/lppl-1-3c.txt
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/graphics/pgf/contrib/pgfornament-han/pgflibraryhan.code.tex b/graphics/pgf/contrib/pgfornament-han/pgflibraryhan.code.tex
new file mode 100644
index 0000000000..2ecfc691f7
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/pgflibraryhan.code.tex
@@ -0,0 +1,89 @@
+% pgflibraryhan.code.tex v0.33 2019/08/10
+% Authors: pgf and LaTeX code by LIM LianTze
+% based on CAD drawing by ZHANG Chennan
+
+\makeatletter
+\def\@pgfornamenthanDim#1{% dim in bp
+\ifcase#1\relax%
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 1
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 2
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 3
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 4
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 5
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 6
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 7
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 8
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 9
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 10
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 11
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 12
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 13
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 14
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 15
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 16
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 17
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 18
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 19
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 20
+\or\def\@pgfornamentX{260}\def\@pgfornamentY{260}% 21
+\or\def\@pgfornamentX{260}\def\@pgfornamentY{260}% 22
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 23
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 24
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 25
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 26
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 27
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 28
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{10}% 29
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{10}% 30
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{40}% 31
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{40}% 32
+\or\def\@pgfornamentX{75}\def\@pgfornamentY{60}% 33
+\or\def\@pgfornamentX{75}\def\@pgfornamentY{60}% 34
+\or\def\@pgfornamentX{100}\def\@pgfornamentY{60}% 35
+\or\def\@pgfornamentX{100}\def\@pgfornamentY{60}% 36
+\or\def\@pgfornamentX{125}\def\@pgfornamentY{110}% 37
+\or\def\@pgfornamentX{125}\def\@pgfornamentY{110}% 38
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{110}% 39
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{110}% 40
+\or\def\@pgfornamentX{115}\def\@pgfornamentY{60}% 41
+\or\def\@pgfornamentX{115}\def\@pgfornamentY{60}% 42
+\or\def\@pgfornamentX{140}\def\@pgfornamentY{60}% 43
+\or\def\@pgfornamentX{140}\def\@pgfornamentY{60}% 44
+\or\def\@pgfornamentX{130}\def\@pgfornamentY{60}% 45
+\or\def\@pgfornamentX{130}\def\@pgfornamentY{60}% 46
+\or\def\@pgfornamentX{155}\def\@pgfornamentY{60}% 47
+\or\def\@pgfornamentX{155}\def\@pgfornamentY{60}% 48
+\or\def\@pgfornamentX{360}\def\@pgfornamentY{360}% 49
+\or\def\@pgfornamentX{360}\def\@pgfornamentY{360}% 50
+\or\def\@pgfornamentX{360}\def\@pgfornamentY{360}% 51
+\or\def\@pgfornamentX{360}\def\@pgfornamentY{360}% 52
+\or\def\@pgfornamentX{360}\def\@pgfornamentY{360}% 53
+\or\def\@pgfornamentX{360}\def\@pgfornamentY{360}% 54
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 55
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 56
+\or\def\@pgfornamentX{200}\def\@pgfornamentY{200}% 57
+\or\def\@pgfornamentX{810}\def\@pgfornamentY{270}% 58
+\or\def\@pgfornamentX{810}\def\@pgfornamentY{270}% 59
+\or\def\@pgfornamentX{450}\def\@pgfornamentY{120}% 60
+\or\def\@pgfornamentX{450}\def\@pgfornamentY{120}% 61
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{180}% 62
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{180}% 63
+\or\def\@pgfornamentX{350}\def\@pgfornamentY{210}% 64
+\or\def\@pgfornamentX{350}\def\@pgfornamentY{210}% 65
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{180}% 66
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{180}% 67
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{170}% 68
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{170}% 69
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{140}% 70
+\or\def\@pgfornamentX{400}\def\@pgfornamentY{140}% 71
+\or\def\@pgfornamentX{300}\def\@pgfornamentY{300}% 72
+\or\def\@pgfornamentX{300}\def\@pgfornamentY{300}% 73
+\or\def\@pgfornamentX{300}\def\@pgfornamentY{300}% 74
+\or\def\@pgfornamentX{300}\def\@pgfornamentY{300}% 75
+\or\def\@pgfornamentX{120}\def\@pgfornamentY{122.5}% 76
+\or\def\@pgfornamentX{120}\def\@pgfornamentY{122.5}% 77
+\or\def\@pgfornamentX{123}\def\@pgfornamentY{69}% 78
+\fi%
+}%
+\endinput
+\makeatother
diff --git a/graphics/pgf/contrib/pgfornament-han/pgfornament-han.sty b/graphics/pgf/contrib/pgfornament-han/pgfornament-han.sty
new file mode 100644
index 0000000000..824fb15389
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/pgfornament-han.sty
@@ -0,0 +1,71 @@
+% pgfornamenthan.sty v0.33 2019/08/10
+% Authors: pgf and LaTeX code by LIM LianTze
+% based on CAD drawing by ZHANG Chennan
+
+\ProvidesPackage{pgfornament-han}
+\RequirePackage{xpatch}
+\RequirePackage{pgfornament}
+
+\def\pgfornamenthan{\pgfutil@ifnextchar[{\pgf@ornamenthan}{\pgf@ornamenthan[]}}%
+\let\pgf@ornamenthan\pgf@ornament
+\xpatchcmd{\pgf@ornamenthan}{\@pgfornamentDim}{\@pgfornamenthanDim}{}{}
+\xpatchcmd{\pgf@ornamenthan}{\@pgfornamentDim}{\@pgfornamenthanDim}{}{}
+\xpatchcmd{\pgf@ornamenthan}{\pgf@@ornament}{\pgf@@ornamenthan}{}{}
+
+\def\pgfOrnamentsHanObject{pgflibraryhan.code.tex}
+\input{\pgfOrnamentsHanObject}%
+
+\let\pgf@@ornamenthan\pgf@@ornament
+% \patchcmd{\pgf@@ornamenthan}{\OrnamentsFamily}{han}{}{}
+\pretocmd{\pgf@@ornamenthan}{%
+ \def\OrnamentsFamily{han}
+}{}{}
+
+\patchcmd{\pgf@@ornamenthan}
+ {\OrnamentsFamily#1.pgf}
+ {\OrnamentsFamily/\OrnamentsFamily#1.pgf}{}{}
+
+\tikzset{
+ ornamenthan/.style={%
+ to path={%
+ \pgfextra{%
+ \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \advance\pgf@xa by-\pgf@xb
+ \advance\pgf@ya by-\pgf@yb
+ \pgfmathveclen{\pgf@xa}{\pgf@ya}%
+ \global\let\ornamentlen\pgfmathresult}
+ -- node [pos=\ornamenttopos,options,
+ anchor=\ornamenttoanchor]{%
+ \pgfornamenthan[width = \ornamentlen,
+ symmetry=\ornamenttosymmetry]{#1}}
+ (\tikztotarget)\tikztonodes %end pgfextra
+ }% end to path
+ }% end style
+}
+
+\patchcmd{\pgf@@ornamenthan}
+ {\begingroup}
+ {\begingroup\def\ubb{\pgfusepath{use as bounding box}}}
+ {}{}
+
+% \def\pgf@@ornamenthan#1{%
+% \begingroup
+% \def\i{\pgfusepath{clip}}%
+% \def\k{\pgfusepath{stroke}}%
+% \let\o\pgfpathclose
+% \let\s\pgfusepathqfillstroke
+% \def\p ##1##2{\pgfqpoint{##1bp}{##2bp}}%
+% \def\m ##1 ##2 {\pgfpathmoveto{\p{##1}{##2}}}%
+% \def\l ##1 ##2 {\pgfpathlineto{\p{##1}{##2}}}%
+% \def\r ##1 ##2 ##3 ##4 {\pgfpathrectangle{\p{##1}{##2}}{\p{##3}{##4}}}%
+% \def\c ##1 ##2 ##3 ##4 ##5 ##6 {%
+% \pgfpathcurveto{\p{##1}{##2}}{\p{##3}{##4}}{\p{##5}{##6}}}%
+% \@@input han#1.pgf
+% %\@nameuse{pgf@@am@#1}%
+% \endgroup}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.pdf b/graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.pdf
new file mode 100644
index 0000000000..6ac00fa5dd
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.pdf
@@ -0,0 +1,3917 @@
+%PDF-1.5
+%äðíø
+29 0 obj
+<</Length 126579>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.071 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0012>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F2 18 Tf 126.225 -44.643 Td[<077106840e6d0ed5>]TJ /F3 18 Tf 76.5 0 Td[<0054003b003700510060004d001c004b0032004d00690040003f001c004d>]TJ /F2 12 Tf -10.725 -34.47 Td[<0a1f09f411a50061116604e40b32>]TJ /F1 12 Tf 15.804 -29.22 Td[<001300110012001a001000110019001000120011>]TJ ET 0 1 0 0 K 0 1 0 0 k BT /F3 12 Tf 103.971 -124.713 Td[<003f0069006900540062002c00660066003b00420069003f006d00230058002b0051004b006600480042001c004d00690078003200660054003b003700510060004d001c004b0032004d00690040>-41<003f001c004d>]TJ ET 0 G 0 g BT /F4 9 Tf 225 -164.466 Td[<114b1031>]TJ ET BT /F2 9 Tf 42.907 -183.968 Td[<09e610a8>]TJ /F5 9 Tf 19.835 0 Td[<0054003b003700510060004d001c004b0032004d0069>]TJ /F2 9 Tf 53.81 0 Td[<07a104070956105b111d>]TJ /F1 9 Tf 46.835 0 Td[<002d>]TJ /F1 5.9776 Tf 1.512 1.944 Td[<0022>]TJ /F1 9 Tf 2.804 -1.944 Td[<0035>]TJ 3.873 -1.931 Td[<0026>]TJ 3.888 1.931 Td[<0039>]TJ /F2 9 Tf 7.775 0 Td[<0ed3087109da044c08ae05b907c2051b0d45067305c50fee0bce0a0a05a50061>276<0b780d54068406ec05a507bd0ed50062>851<010d0f570c660c6812310f9b>]TJ -158.332 -14.04 Td[<06600ed9>]TJ ET 0 1 0 0 K 0 1 0 0 k BT /F5 9 Tf 45.031 -198.008 Td[<003f006900690054002c00660066002b0069001c004d005800510060003b006600540046003b00660054003b003700510060004d001c004b0032004d0069>]TJ ET 0 G 0 g BT /F2 9 Tf 191.505 -198.008 Td[<010e>]TJ /F5 9 Tf 8.245 0 Td[<0054003b003700510060004d001c004b0032004d00690040003f001c004d>]TJ /F2 9 Tf 73 0 Td[<07a1040705a510a810690111>83<119e0d5e0eb90a1404c70d6b10a8>]TJ /F5 9 Tf 118.369 0 Td[<0054003b003700510060004d001c004b0032004d0069>]TJ /F2 9 Tf -366.212 -14.04 Td[<05a5105810b5080f11c50111>69<0e34070210420f740771068405a5052e0e640e6d0ed50062>69<0dee10b50e6d0ed5092810ae>]TJ /F6 9 Tf 214.757 0 Td[<116604e40b32>]TJ /F2 9 Tf 26.999 0 Td[<105b>]TJ /F1 9 Tf 11.147 0 Td[<002400220025>]TJ /F2 9 Tf 20.524 0 Td[<04f10d5405e706e00061>]TJ /F1 9 Tf 44.379 0 Td[<0035004a004c003b>]TJ /F2 9 Tf 20.002 0 Td[<07fb11c50111>69<111c10ae>]TJ /F6 9 Tf 44.378 0 Td[<0a1f09f411a5>]TJ /F2 9 Tf 27 0 Td[<1207>]TJ -409.186 -14.04 Td[<0eb90d610786>]TJ /F5 9 Tf 29.25 0 Td[<0054003b003700510060004d001c004b0032004d0069>]TJ /F2 9 Tf 54.224 0 Td[<080f11c50d5010a805a507a10407057d0a920062>]TJ ET BT /F4 15 Tf 166.5 -267.506 Td[<05bb104204860673>-1000<080e042710a80645>]TJ /F7 10.5 Tf -145.5 -29.894 Td[<004d>]TJ /F2 10.5 Tf 8.169 0 Td[<0eb90e6d>-1<0ed5>-1<0449>-1<077c>-1<05a5>-1<07c50111>-1<124b>-1<0865>-1<0586>-1<05a5>-1<10a80645>-1<0d5e>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 189.45 -297.4 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F7 10.5 Tf 272.137 -297.4 Td[<0028002b0051004800510060003400600032002f002d00720042002f0069003f0034005200580038002b004b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 398.925 -297.4 Td[<0026>]TJ ET 0 G 0 g BT /F7 10.5 Tf 404.437 -297.4 Td[<004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 409.95 -297.4 Td[<0027>]TJ ET 0 G 0 g BT /F2 10.5 Tf 415.462 -297.4 Td[<00621039>-1<0956>-1<105b>-1<10a8>]TJ /F7 10.5 Tf -415.462 -16.38 Td[<003f00320042003b003f0069>]TJ /F2 10.5 Tf 35.507 0 Td[<08071180>]TJ /F7 10.5 Tf 23.433 0 Td[<0062002b001c00480032>]TJ /F2 10.5 Tf 29.995 0 Td[<0d2105e705760f6c0062>110<11ff10690e6d0ed5043109e80d5e0482044d05a50111>110<1079054e11ba10b5124b07aa06f3051b05a50fca0f5b10b50f720062>110<054e0e93>]TJ /F7 10.5 Tf 334.965 0 Td[<00620076004b004b0032006900600076>]TJ /F2 10.5 Tf -423.9 -16.38 Td[<04950d940956105b0d4c0f43>]TJ /F1 10.5 Tf 65.599 0 Td[<0014>]TJ /F2 10.5 Tf 7.482 0 Td[<11d508e40f5e0111>]TJ /F7 10.5 Tf 41.847 0 Td[<0070>]TJ /F1 10.5 Tf 8.112 0 Td[<0009>]TJ /F2 10.5 Tf 3.129 0 Td[<053c11b0010e>503<0061>]TJ /F7 10.5 Tf 36.555 0 Td[<003f>]TJ /F2 10.5 Tf 5.359 0 Td[<010d0da30bdc010e>503<0061>]TJ /F7 10.5 Tf 47.055 0 Td[<002b>]TJ /F2 10.5 Tf 5.359 0 Td[<010d11cf0f8f>]TJ /F1 10.5 Tf 34.1 0 Td[<001e>]TJ /F2 10.5 Tf 8.374 0 Td[<053c11b0>]TJ /F1 10.5 Tf 23.599 0 Td[<000c>]TJ /F2 10.5 Tf 8.375 0 Td[<0da30bdc08e40f5e010e>503<0111>15<07c20448097f05a50db906f1089805c40d480793077a>]TJ -294.945 -16.38 Td[<10a800620c030df1>]TJ /F1 10.5 Tf 44.625 0 Td[<0035004a004c003b>]TJ /F2 10.5 Tf 23.457 0 Td[<04950d9405a5108b10a8011f>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 0 -372.883 Td[<00240069004200460078006200320069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 44.1 -372.883 Td[<0026>]TJ ET 0 G 0 g BT /F7 10.5 Tf 49.612 -372.883 Td[<0054003b003700510060004d001c004b0032004d00690062006900760048003200660058001c005400540032004d002f>-525<006200690076004800320034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 220.5 -372.883 Td[<0026>]TJ ET 0 G 0 g BT /F7 10.5 Tf 226.012 -372.883 Td[<002f0060001c0072003400230048001c002b0046002d0037004200480048003400600032002f002d00480042004d0032>-525<00720042002f0069003f00340052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 402.412 -372.883 Td[<00270027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 0 -389.263 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F7 10.5 Tf 82.687 -389.263 Td[<00280062002b001c004800320034006b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 132.3 -389.263 Td[<0026>]TJ ET 0 G 0 g BT /F7 10.5 Tf 137.812 -389.263 Td[<004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 143.325 -389.263 Td[<0027>]TJ ET 0 G 0 g BT /F2 10.5 Tf 21 -415.605 Td[<105b0f2f0d5e10420f74065309e800621039083a05a4064a059e0ed30596124b07aa05a506b80a63011110b508d90f1f0062>]TJ ET q 1 0 0 1 0 -532.167 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 94.3447 l 0.0 96.69304 1.90364 98.5967 4.25198 98.5967 c 463.75406 98.5967 l 466.1024 98.5967 468.00604 96.69304 468.00604 94.3447 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 78.62056 l 466.58871 78.62056 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q [ 2.83466 2.83466 ] 1.41731 d 0.45882 0.54118 0.6 RG 0.45882 0.54118 0.6 rg /pgf@CA1.0 gs 282.33443 78.62056 m 282.33443 1.41731 l S Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 80.03789 m 1.41731 94.3447 l 1.41731 95.91026 2.68643 97.17937 4.25198 97.17937 c 463.75406 97.17937 l 465.31961 97.17937 466.58871 95.91026 466.58871 94.3447 c 466.58871 80.03789 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -532.167 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 85.165 cm 1 1 1 RG 1 1 1 rg BT /F6 12 Tf 0 -532.167 Td[<0ed3042711cf05a50d5010a8>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -532.167 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -532.167 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 37.394 cm BT /F9 9 Tf 0 -525.33 Td[<0f35099f104206f1>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 40.725 -525.33 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 111.6 -525.33 Td[<0028002b0051004800510060003400230048006d0032002d0062002b001c00480032003400790058005200330029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 220.275 -525.33 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 225 -525.33 Td[<00380065>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 234.45 -525.33 Td[<0027>]TJ ET 0 G 0 g BT /F9 9 Tf 0 -539.37 Td[<0d7012330ed5006210f0042705a5>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 67.725 -539.37 Td[<00240054003b003700510060004d001c004b0032004d0069>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 124.425 -539.37 Td[<00280062002b001c00480032003400790058006b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 176.4 -539.37 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 181.125 -539.37 Td[<00380065>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 190.575 -539.37 Td[<0027>]TJ ET 0 G 0 g BT /F9 9 Tf 200.025 -539.37 Td[<10470c96095610a80062>]TJ ET BT /F2 10.5 Tf 280.914 -517.444 Td[<0f35099f104206f1>]TJ ET q 1 0 0 1 325.388 -535.489 cm q 0 G 0 g 0.3985 w q 0 0 1 RG 0 0 1 rg 2 J 18.04448 36.04398 m 8.10336 36.04398 0.04497 27.9856 0.04497 18.04448 c 0.04497 8.10336 8.10336 0.04497 18.04448 0.04497 c 27.9856 0.04497 36.04398 8.10336 36.04398 18.04448 c 36.04398 27.9856 27.9856 36.04398 18.04448 36.04398 c 19.12445 33.84805 m 25.37929 33.42145 30.79713 29.34097 32.93547 23.44612 c 27.40422 23.44434 l 27.40422 21.2844 l 33.54926 21.2844 l 33.99565 19.14786 33.99565 16.9411 33.54926 14.80458 c 27.40422 14.80458 l 27.40422 12.64464 l 32.93547 12.64464 l 30.79713 6.74979 25.38107 2.66931 19.12445 2.24092 c 19.12445 8.32475 l 24.22731 8.32475 l 23.23914 7.69478 22.15736 7.21957 21.02519 6.91719 c 21.58498 4.83104 l 24.8069 5.69322 27.60222 7.70557 29.44536 10.4847 c 6.6436 10.4847 l 8.48674 7.70557 11.28206 5.69322 14.50398 4.83104 c 15.06377 6.91719 l 13.93158 7.21957 12.84982 7.69658 11.86165 8.32475 c 16.96451 8.32475 l 16.96451 2.24092 l 10.70789 2.66751 5.29182 6.748 3.15349 12.64284 c 8.68475 12.64464 l 8.68475 14.80458 l 2.5397 14.80458 l 2.09332 16.9411 2.09332 19.14786 2.5397 21.2844 c 8.68475 21.2844 l 8.68475 23.44434 l 3.15349 23.44434 l 5.29004 29.33917 10.70789 33.41966 16.96451 33.84624 c 16.96451 27.76422 l 11.86165 27.76422 l 12.84982 28.3924 13.93158 28.86938 15.06197 29.17177 c 14.50398 31.25792 l 11.28206 30.39395 8.48674 28.38339 6.6436 25.60428 c 29.44536 25.60428 l 27.60222 28.38339 24.8069 30.39574 21.58498 31.25792 c 21.02519 29.17177 l 22.15736 28.86938 23.23734 28.3924 24.22551 27.76422 c 19.12445 27.76422 l 19.12445 33.84805 l 10.8447 23.44434 m 10.8447 21.2844 l 25.24428 21.2844 l 25.24428 23.44434 l 10.8447 23.44434 l 4.54485 19.12445 m 4.54485 16.96451 l 31.54411 16.96451 l 31.54411 19.12445 l 4.54485 19.12445 l 10.8447 14.80458 m 10.8447 12.64464 l 25.24428 12.64464 l 25.24428 14.80458 l 10.8447 14.80458 l B Q n Q Q BT /F2 10.5 Tf 363.951 -517.444 Td[<0d7012330ed50062>60<10f0042705a5>]TJ ET q 1 0 0 1 280.914 -559.64 cm q 0 G 0 g 0.3985 w q 53.79985 23.19994 m 0.0 23.19994 l 0.0 0.0 l 53.79985 0.0 l h 0.0 0.0 m W n 7.23108 7.86548 m 7.23108 8.1499 7.46156 8.38078 7.746 8.38078 c 8.0308 8.38078 8.2613 8.1499 8.2613 7.86548 c 8.2613 7.58069 8.0308 7.35094 7.746 7.35094 c 7.46156 7.35094 7.23108 7.58069 7.23108 7.86548 c h B 6.48602 11.02489 m 6.48602 11.22768 6.65045 11.39209 6.85323 11.39209 c 7.05562 11.39209 7.22044 11.22768 7.22044 11.02489 c 7.22044 10.8225 7.05562 10.65805 6.85323 10.65805 c 6.65045 10.65805 6.48602 10.8225 6.48602 11.02489 c h B 25.43265 8.38078 m 25.98174 5.83958 25.08861 4.12242 25.02025 2.95511 c 24.9515 1.78702 26.11958 2.33687 26.11958 2.33687 c 26.11958 2.33687 25.83022 0.9854 24.81442 1.16882 c 23.92091 1.3302 23.78381 2.33687 24.67697 4.25949 c 25.56972 6.18324 25.43265 8.38078 25.43265 8.38078 c h B 3.27802 7.08475 m 4.05457 7.28563 4.9443 7.17703 5.78351 6.77942 c 6.62387 6.38109 7.4464 5.69339 8.5013 4.71404 c 8.92812 4.3176 9.78479 3.53723 10.66733 2.81383 c 9.7738 3.98495 9.26001 5.47884 9.20912 7.20929 c 9.20305 7.41283 9.20647 7.61485 9.2171 7.81384 c 9.2171 7.81725 9.21558 7.82028 9.21558 7.82408 c 9.21863 7.94904 9.31583 10.89693 10.90958 12.66193 c 11.4754 13.28928 11.99944 13.72786 12.46158 14.11406 c 13.28749 14.80554 13.83281 15.26163 13.83281 16.20299 c 13.83281 17.08171 13.26167 17.47244 12.72739 17.5446 c 12.20866 17.61713 11.59767 17.387 11.43893 16.81512 c 11.29387 16.2888 11.42793 15.84225 11.79932 15.62085 c 12.0883 15.44768 12.43385 15.47389 12.65637 15.68655 c 12.71675 15.74428 12.81282 15.74313 12.87016 15.68199 c 12.92789 15.62198 12.92523 15.52592 12.86523 15.46858 c 12.5417 15.16023 12.05145 15.11694 11.64323 15.3611 c 11.26198 15.59009 10.93085 16.1126 11.14767 16.89563 c 11.35197 17.63536 12.1164 17.93233 12.768 17.84422 c 13.39915 17.75916 14.13507 17.27765 14.13507 16.20299 c 14.13507 15.12074 13.51422 14.60162 12.65561 13.88316 c 12.20068 13.5023 11.68541 13.07053 11.13364 12.45992 c 10.7577 12.04335 10.46872 11.54932 10.24693 11.04198 c 11.0968 12.34447 12.40424 13.23497 13.9452 13.40776 c 15.84503 13.62039 17.42247 13.24332 18.50963 12.31714 c 19.44531 11.51932 19.97543 10.35086 20.04301 8.9371 c 20.1862 5.92351 18.19713 4.63809 16.45033 4.4524 c 15.32707 4.3328 14.19925 4.72847 13.5089 5.4834 c 12.88992 6.15971 12.65675 7.07715 12.85193 8.06674 c 13.03041 8.96635 13.41585 9.58757 14.00027 9.91492 c 14.86264 10.39755 15.8287 10.04857 15.8716 10.03264 c 16.12906 9.93126 16.32047 9.78659 16.46742 9.62329 c 16.50351 9.66278 l 16.50351 9.66278 17.19006 8.93025 17.03058 7.8537 c 16.86957 6.77753 15.72502 6.68639 15.33582 7.28183 c 14.94656 7.87686 15.38213 8.56421 15.77136 8.54065 c 16.1602 8.51785 16.6182 8.65459 16.25134 9.38745 c 16.26161 9.39886 l 16.14047 9.54012 15.98099 9.66505 15.76376 9.75012 c 15.7554 9.75354 14.88885 10.06682 14.14723 9.65062 c 13.64445 9.36963 13.3084 8.8171 13.14851 8.00787 c 12.92296 6.86449 13.34143 6.1145 13.73178 5.68694 c 14.35875 5.00188 15.3886 4.64455 16.4188 4.75314 c 18.11206 4.93315 19.87404 6.12248 19.74037 8.92265 c 19.67772 10.25063 19.18367 11.3454 18.31369 12.087 c 17.29182 12.95737 15.79149 13.3109 13.97939 13.10698 c 11.3425 12.81155 9.42178 10.27948 9.5114 7.21727 c 9.6124 3.76242 11.62198 1.27437 14.88696 0.56049 c 18.31865 -0.18759 21.21565 0.71577 22.83562 3.04092 c 23.52748 4.03355 24.02684 5.23163 24.30975 6.52007 c 23.58217 4.45923 21.9421 3.42825 21.44844 3.20685 c 20.57883 2.81688 19.18216 2.95511 19.18216 4.12242 c 19.18216 5.29012 20.34985 5.221 20.34985 5.221 c 19.93782 4.53444 20.9677 3.09218 22.82271 5.08391 c 23.55975 5.87564 24.12709 6.76045 24.3333 7.76256 c 24.64658 9.28152 24.35646 10.83047 24.35646 10.83047 c 24.42899 10.56123 24.4848 10.30113 24.5304 10.04747 c 24.33519 12.18918 23.5328 14.30621 22.01234 15.9558 c 21.87944 15.66263 21.58589 15.4549 21.58589 15.4549 c 21.58589 15.4549 20.3954 14.83669 19.11343 16.4855 c 17.68639 18.32002 16.22856 20.67516 11.14616 19.64531 c 6.0634 18.61507 2.97269 14.83707 2.97269 14.83707 c 7.506 20.8126 12.65714 20.46895 16.91513 20.12605 c 21.17389 19.78278 23.57762 17.03499 25.29515 15.38655 c 27.01234 13.7385 28.04259 13.66978 29.34773 13.66978 c 30.65251 13.66978 30.17137 15.18074 30.17137 15.18074 c 31.82018 14.97455 32.89522 12.70941 30.58339 11.88347 c 28.66078 11.19691 26.87526 12.36461 24.81442 14.6996 c 22.75397 17.03499 20.93352 18.09903 20.93352 18.09903 c 20.5215 18.37431 20.0753 18.23724 21.79208 16.76045 c 21.87868 16.6864 21.9398 16.61197 21.98425 16.53792 c 22.94196 15.75414 24.7586 13.96898 26.26465 10.75983 c 26.50388 10.25024 26.7378 9.72202 26.96413 9.21089 c 27.1088 8.8847 27.25462 8.55699 27.40233 8.23117 c 27.44295 8.238 27.48436 8.24295 27.52727 8.24295 c 27.92523 8.24295 28.2484 7.92055 28.2484 7.5222 c 28.2484 7.30423 28.1489 7.11057 27.99586 6.97765 c 28.26965 6.42892 28.56282 5.89236 28.88597 5.37782 c 30.03392 6.32034 l 30.65251 5.4268 l 29.49886 4.48657 l 29.86075 4.00735 30.26022 3.55736 30.70984 3.14801 c 30.82643 3.24104 30.97263 3.29839 31.13326 3.29839 c 31.51224 3.29839 31.82018 2.99042 31.82018 2.61143 c 31.82018 2.51231 31.79779 2.41853 31.76057 2.33348 c 32.46005 1.87665 33.26207 1.50488 34.19583 1.2459 c 36.68994 0.55327 38.95166 0.81908 40.56555 1.99588 c 41.8874 2.95927 42.65524 4.47253 42.72739 6.25768 c 42.8656 9.68251 40.80518 11.82993 38.698 12.1808 c 37.4012 12.39877 36.11539 12.11588 35.17328 11.4092 c 34.3371 10.78186 33.8233 9.84732 33.68698 8.7066 c 33.54877 7.54082 33.78458 6.56337 34.38873 5.80275 c 34.94884 5.09604 35.83022 4.61531 36.74767 4.51315 c 37.29979 4.4524 38.16219 4.57697 38.77356 5.13365 c 39.22165 5.54187 39.44229 6.10161 39.43013 6.79842 c 39.40811 8.07169 38.64749 8.70053 37.9499 8.74646 c 37.89598 8.74875 37.84132 8.74646 37.78625 8.7423 c 37.87093 8.69597 l 37.356 8.73128 36.73514 8.23459 36.91248 7.80928 c 37.08981 7.38358 37.87093 7.5784 37.87093 7.5784 c 37.87093 7.5784 37.83524 6.94006 37.3032 6.72704 c 36.77084 6.51399 35.95706 6.8436 36.30946 7.86168 c 36.62845 8.78444 37.32108 8.99748 37.32108 8.99748 c 37.3788 8.96559 l 37.57094 9.03203 37.77258 9.06128 37.97003 9.04799 c 38.80092 8.99292 39.70772 8.26837 39.73242 6.80334 c 39.74606 6.02678 39.4848 5.37251 38.97673 4.90923 c 38.29166 4.28569 37.32828 4.14442 36.71465 4.2128 c 35.71896 4.32368 34.76088 4.84694 34.15178 5.61438 c 33.50508 6.42969 33.24078 7.51157 33.38737 8.7423 c 33.53319 9.96732 34.08836 10.97325 34.99214 11.65108 c 35.9992 12.40675 37.36855 12.70941 38.74774 12.47891 c 40.98553 12.10564 43.1751 9.8458 43.02966 6.24515 c 42.98257 5.08734 42.65524 4.03659 42.08372 3.16205 c 42.80788 3.70773 44.05646 4.62367 45.81541 5.82666 c 49.17609 8.12598 51.6702 7.42726 52.88385 6.00667 c 53.76067 4.98062 54.06026 3.39142 53.61255 2.1417 c 53.27345 1.1954 52.54398 0.57756 51.55933 0.40211 c 51.30678 0.35695 51.07552 0.3368 50.86592 0.3368 c 49.86646 0.3368 49.3257 0.7944 49.039 1.2212 c 48.49178 2.03615 48.57573 3.20723 48.96684 3.82507 c 49.31964 4.38254 49.86113 4.72163 50.45314 4.7562 c 50.9559 4.78278 51.4173 4.58911 51.71841 4.21736 c 52.10614 3.73888 52.16728 3.0208 51.86081 2.54688 c 51.67856 2.26512 51.20921 1.8341 50.1201 2.12158 c 50.03998 2.14322 49.99138 2.226 50.01265 2.30688 c 50.03429 2.38664 50.11668 2.4341 50.19759 2.41397 c 50.86743 2.23701 51.36868 2.34221 51.60716 2.71167 c 51.84184 3.07434 51.78792 3.6523 51.48412 4.02747 c 51.24527 4.32178 50.87769 4.47748 50.47061 4.45467 c 49.9777 4.42581 49.52202 4.13797 49.22165 3.6637 c 48.87988 3.12332 48.82596 2.08131 49.28963 1.38905 c 49.71532 0.7553 50.48277 0.51718 51.50613 0.69946 c 52.62639 0.8992 53.11472 1.64957 53.32814 2.24347 c 53.73407 3.37775 53.4504 4.87733 52.6541 5.81033 c 51.52551 7.13184 49.18102 7.7637 45.98553 5.57756 c 43.06194 3.5771 41.54564 2.3684 41.53082 2.3555 c 41.49515 2.32777 41.4511 2.31941 41.40933 2.32664 c 41.31741 2.23398 41.22134 2.14473 41.12224 2.05779 c 41.62653 2.3346 42.0507 2.55333 42.43118 2.7151 c 42.54967 2.82675 l 42.54967 2.82675 43.49864 3.29533 44.45824 3.34433 c 45.55566 3.3994 45.78656 2.38246 45.53477 1.6731 c 45.37643 1.22919 44.97278 1.12628 44.68114 1.22046 c 44.50645 1.27666 44.41533 1.42096 44.32076 1.55843 c 44.06898 1.9245 44.04622 2.45079 43.29016 2.47398 c 42.53525 2.49677 41.6193 1.94765 41.6193 1.94765 c 41.70476 2.02855 l 41.47008 1.90436 41.21754 1.76614 40.93768 1.60931 c 39.16127 0.61781 37.52348 0.58365 37.45435 0.58289 c 37.4536 0.58289 37.45284 0.58289 37.45207 0.58289 c 37.43994 0.58289 37.42892 0.58669 37.41753 0.58972 c 37.21777 0.57529 37.01614 0.56616 36.81032 0.56616 c 35.95592 0.56616 35.05023 0.69452 34.11493 0.95465 c 33.13828 1.22615 32.30284 1.61386 31.57564 2.09006 c 31.45566 1.9879 31.303 1.9245 31.13326 1.9245 c 30.75352 1.9245 30.44632 2.2317 30.44632 2.61143 c 30.44632 2.71852 30.47289 2.81877 30.51656 2.90878 c 30.04947 3.3318 29.63634 3.79735 29.2623 4.29291 c 28.04259 3.29839 l 27.35524 4.12242 l 28.64864 5.1834 l 28.31445 5.7135 28.01181 6.26718 27.7289 6.83296 c 27.66473 6.81438 27.59789 6.80107 27.52727 6.80107 c 27.12929 6.80107 26.80614 7.12386 26.80614 7.5222 c 26.80614 7.77016 26.93109 7.98776 27.1213 8.118 c 26.97513 8.44116 26.83119 8.76547 26.68765 9.08899 c 26.46211 9.59822 26.22856 10.12416 25.99123 10.63148 c 25.08328 12.56549 24.04811 13.98114 23.1694 14.962 c 25.61604 11.23566 25.29138 6.03667 23.08359 2.86813 c 21.77768 0.99376 19.68837 0.0 17.16881 0.0 c 16.42146 0.0 15.63617 0.0877 14.82278 0.26505 c 14.46469 0.34402 14.1256 0.44656 13.79749 0.56465 c 13.79674 0.56465 13.79674 0.56429 13.79597 0.56429 c 13.77963 0.56429 13.76332 0.56693 13.747 0.57262 c 13.7276 0.57909 13.50357 0.65805 13.17737 0.80426 c 13.16257 0.80768 13.14775 0.80768 13.1341 0.81566 c 13.106 0.8316 13.07333 0.84946 13.04068 0.8673 c 12.91116 0.92729 12.76915 0.99718 12.61992 1.07654 c 12.59181 1.08907 12.56258 1.10237 12.53334 1.11566 c 12.65714 1.03932 l 12.17526 1.29146 11.1644 1.70538 10.61339 1.4293 c 10.06163 1.154 10.40607 0.35011 9.83191 0.21227 c 9.25772 0.0744 8.31598 0.94705 9.09673 1.63628 c 9.87746 2.32512 11.27907 1.88841 11.27907 1.88841 c 11.3459 1.84778 l 11.37894 1.8402 11.41235 1.83145 11.44539 1.8231 c 10.27277 2.68472 8.8814 3.94812 8.29587 4.49226 c 7.26183 5.45224 6.45908 6.12401 5.65442 6.50603 c 4.8786 6.874 4.06104 6.97498 3.35396 6.79234 c 2.41638 6.54893 1.98994 5.87413 1.79628 5.34935 c 1.47389 4.47595 1.58476 3.38571 2.06625 2.69803 c 2.34158 2.30423 2.72777 2.03615 3.12611 1.96246 c 3.82939 1.83145 4.64243 2.13979 4.78139 2.87953 c 4.87746 3.39256 4.76013 3.85242 4.45671 4.14139 c 4.17458 4.41101 3.75723 4.49911 3.28218 4.38708 c 3.20016 4.36772 3.11964 4.41899 3.1003 4.49986 c 3.08092 4.58115 3.13106 4.6624 3.21269 4.68102 c 3.79027 4.81581 4.30634 4.70341 4.66595 4.35976 c 5.0438 3.999 5.19417 3.43925 5.07835 2.8241 c 4.90518 1.89792 3.92204 1.50716 3.07104 1.66553 c 2.59561 1.75362 2.13919 2.06651 1.81868 2.52486 c 1.27528 3.30066 1.15262 4.47748 1.51262 5.45377 c 1.82097 6.29109 2.44789 6.8702 3.27802 7.08475 c h B 0.08328 7.75195 m 0.08063 7.76028 0.07683 7.76712 0.07568 7.77586 c 0.07112 7.80775 -0.36478 11.01349 0.9073 14.5109 c 1.42715 15.94022 2.05145 16.89981 2.60245 17.74623 c 3.21309 18.6842 3.69571 19.42545 3.78381 20.44809 c 3.8833 21.6021 3.20966 22.30994 2.49805 22.49864 c 1.87982 22.66345 1.3235 22.43523 1.0835 21.9169 c 0.76451 21.22842 1.0497 20.80238 1.1868 20.65201 c 1.3877 20.43098 1.67705 20.32922 1.89233 20.40591 c 2.326 20.55894 2.11792 21.18361 2.1088 21.20984 c 2.08185 21.28844 2.1236 21.37425 2.20221 21.40236 c 2.28044 21.42892 2.36702 21.38753 2.39397 21.30933 c 2.50638 20.98654 2.56638 20.32352 1.99223 20.12112 c 1.66147 20.00377 1.24756 20.13594 0.96313 20.44809 c 0.59288 20.85515 0.53554 21.45248 0.80934 22.04411 c 1.10933 22.69154 1.81944 22.99269 2.5755 22.79105 c 3.40903 22.56929 4.19925 21.75058 4.08495 20.42226 c 3.98962 19.32407 3.46407 18.51672 2.85573 17.58107 c 2.31348 16.74867 1.69943 15.80428 1.19136 14.40797 c 0.58832 12.75041 0.37758 11.16159 0.32024 9.9586 c 0.72124 11.99512 1.77539 15.10745 4.55203 17.69499 c 5.6901 18.75557 6.94931 19.56708 8.17206 20.18607 c 8.07826 20.17123 l 10.16188 21.31653 12.17639 21.82008 13.06915 22.16373 c 13.9623 22.507 13.73293 23.28586 13.73293 23.28586 c 14.85466 23.42216 15.86252 22.34676 15.29024 21.88841 c 14.71797 21.43083 13.80167 21.54552 12.31348 21.27057 c 10.82565 20.99565 9.3834 20.37744 9.3834 20.37744 c 9.23532 20.35464 l 7.76044 19.7072 6.16478 18.78444 4.75784 17.47435 c 0.83592 13.81898 0.42352 9.09468 0.381 8.0242 c 1.82932 14.49797 5.71138 16.34653 6.99107 16.2797 c 8.09686 16.22122 8.8795 15.8673 8.94824 14.63124 c 9.0166 13.39484 7.16272 13.32648 7.16272 13.32648 c 7.43726 14.6996 6.20503 15.31706 4.0371 13.7385 c 1.97816 12.23853 0.70149 8.82545 0.37682 7.87686 c 0.37605 7.82979 0.37605 7.80319 0.37605 7.7994 c 0.37682 7.79295 0.3734 7.7861 0.37225 7.77966 c 0.3715 7.76903 0.37036 7.75952 0.36694 7.74968 c 0.36427 7.74094 0.35933 7.7322 0.35478 7.72385 c 0.34987 7.71548 0.34569 7.7075 0.33885 7.6999 c 0.33276 7.6927 0.32555 7.68701 0.31796 7.6813 c 0.31453 7.67827 0.31264 7.67485 0.30884 7.67256 c 0.29857 7.64142 0.29404 7.6251 0.29404 7.6251 c 0.29707 7.63992 0.30049 7.6532 0.30276 7.66765 c 0.30049 7.66612 0.29707 7.66612 0.29404 7.66422 c 0.28569 7.65967 0.27657 7.65738 0.26706 7.65434 c 0.25986 7.65205 0.25377 7.64825 0.24655 7.64674 c 0.2405 7.64636 0.23518 7.64636 0.2291 7.64636 c 0.22871 7.64636 0.22871 7.64598 0.22797 7.64598 c 0.22682 7.64598 0.22606 7.64598 0.2253 7.64598 c 0.20518 7.64598 0.18733 7.65054 0.1691 7.657 c 0.16377 7.65929 0.15923 7.66309 0.15428 7.6665 c 0.1429 7.67181 0.13226 7.67827 0.12276 7.68701 c 0.11823 7.69157 0.11479 7.69727 0.11023 7.70256 c 0.10265 7.7113 0.0958 7.72005 0.09012 7.73067 c 0.08708 7.73714 0.08557 7.7455 0.08328 7.75195 c h B Q n Q Q BT /F2 10.5 Tf 337.338 -548.04 Td[<10470c96095610a80062>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -532.167 cm Q Q Q Q Q n Q Q q 1 0 0 1 0 -663.594 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 120.20267 l 0.0 122.55101 1.90364 124.45467 4.25198 124.45467 c 463.75406 124.45467 l 466.1024 124.45467 468.00604 122.55101 468.00604 120.20267 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 105.36656 l 466.58871 105.36656 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q [ 2.83466 2.83466 ] 1.41731 d 0.45882 0.54118 0.6 RG 0.45882 0.54118 0.6 rg /pgf@CA1.0 gs 353.20148 105.36656 m 353.20148 1.41731 l S Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 106.78389 m 1.41731 120.20267 l 1.41731 121.76823 2.68643 123.03734 4.25198 123.03734 c 463.75406 123.03734 l 465.31961 123.03734 466.58871 121.76823 466.58871 120.20267 c 466.58871 106.78389 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -663.594 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 111.119 cm 1 1 1 RG 1 1 1 rg BT /F10 12 Tf 0 -663.594 Td[<0035004a004c003b>]TJ /F6 12 Tf 27.36 0 Td[<0fca0f5b05a5108b10a8>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -663.594 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -663.594 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 50.767 cm 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -628.677 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -628.677 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -628.677 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 85.05 -628.677 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 89.775 -628.677 Td[<00280023001c0062003200480042004d00320034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 137.025 -628.677 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 141.75 -628.677 Td[<0055002b006d006000600032004d0069>-524<00230051006d004d002f0042004d003b>-525<0023005100740058002b0032004d0069003200600056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 278.775 -628.677 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 283.5 -628.677 Td[<0029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -642.717 Td[<00240069004200460078006200320069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -642.717 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 51.975 -642.717 Td[<0054003b003700510060004d001c004b0032004d00690062006900760048003200660058006200690076004800320034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 165.375 -642.717 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 56.7 -656.757 Td[<002f0060001c00720034003a00510048002f0032004d00600051002f002d00370042004800480034005f0032002f002d00480042004d0032>-525<00720042002f0069003f0034005200540069>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 236.25 -656.757 Td[<00270027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -670.797 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -670.797 Td[<00280037004200480048003400230048001c002b0046002d002b00420060002b00480032002d002f0060001c00720034005f0032002f002d00480042004d0032>-525<00720042002f0069003f0034006b00540069002d0042004d004d00320060>-525<006200320054003400400033005400690029>]TJ ET 0 G 0 g BT /F5 9 Tf 18.9 -684.837 Td[<001c0069>-524<00550079002d00790056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 61.425 -684.837 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 66.15 -684.837 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 137.025 -684.837 Td[<00280062002b001c00480032003400790058006a00330029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 193.725 -684.837 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 198.45 -684.837 Td[<00380065>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 207.9 -684.837 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 217.35 -684.837 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -698.877 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -698.877 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -698.877 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 75.6 -698.877 Td[<0027>]TJ ET 0 G 0 g q 1 0 0 1 395.25 -660.969 cm q 0 G 0 g 0.3985 w q q 0 g 1 0 0 RG 1.99255 w q 0 g 1 0 0 RG 1.99255 w 42.47432 0.0 m 42.47432 23.4582 23.4582 42.47432 0.0 42.47432 c -23.4582 42.47432 -42.47432 23.4582 -42.47432 0.0 c -42.47432 -23.4582 -23.4582 -42.47432 0.0 -42.47432 c 23.4582 -42.47432 42.47432 -23.4582 42.47432 0.0 c h 0.0 0.0 m B Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 395.25 -660.969 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -38.001 0 cm 0 G 0 g q 1 0 0 1 395.155 -699.065 cm q 0 G 0 g 0.3985 w q 0.855 0.648 0.125 RG 1 0 0 rg 0.99628 w 2 J 38.09596 76.09694 m 17.10803 76.09694 0.09499 59.0839 0.09499 38.09596 c 0.09499 17.10803 17.10803 0.09499 38.09596 0.09499 c 59.0839 0.09499 76.09694 17.10803 76.09694 38.09596 c 76.09694 59.0839 59.0839 76.09694 38.09596 76.09694 c 40.37602 71.46083 m 53.58136 70.56018 65.01965 61.94537 69.53418 49.50005 c 57.85648 49.49625 l 57.85648 44.93614 l 70.83 44.93614 l 71.77243 40.42543 71.77243 35.7665 70.83 31.2558 c 57.85648 31.2558 l 57.85648 26.69566 l 69.53418 26.69566 l 65.01965 14.25035 53.58516 5.63553 40.37602 4.73111 c 40.37602 17.57544 l 51.14929 17.57544 l 49.06305 16.2454 46.77919 15.24219 44.38892 14.60376 c 45.57076 10.19945 l 52.37294 12.0197 58.27448 16.26819 62.16577 22.13554 c 14.02614 22.13554 l 17.91743 16.26819 23.819 12.0197 30.62117 10.19945 c 31.80301 14.60376 l 29.41273 15.24219 27.12888 16.24919 25.04262 17.57544 c 35.8159 17.57544 l 35.8159 4.73111 l 22.60677 5.63173 11.17226 14.24655 6.65776 26.69186 c 18.33545 26.69566 l 18.33545 31.2558 l 5.36191 31.2558 l 4.4195 35.7665 4.4195 40.42543 5.36191 44.93614 c 18.33545 44.93614 l 18.33545 49.49625 l 6.65776 49.49625 l 11.16846 61.94157 22.60677 70.5564 35.8159 71.45702 c 35.8159 58.6165 l 25.04262 58.6165 l 27.12888 59.94273 29.41273 60.94975 31.7992 61.58818 c 30.62117 65.99248 l 23.819 64.16844 17.91743 59.92372 14.02614 54.05637 c 62.16577 54.05637 l 58.27448 59.92372 52.37294 64.17223 45.57076 65.99248 c 44.38892 61.58818 l 46.77919 60.94975 49.05923 59.94273 51.1455 58.6165 c 40.37602 58.6165 l 40.37602 71.46083 l 22.89557 49.49625 m 22.89557 44.93614 l 53.29636 44.93614 l 53.29636 49.49625 l 22.89557 49.49625 l 9.59523 40.37602 m 9.59523 35.8159 l 66.5967 35.8159 l 66.5967 40.37602 l 9.59523 40.37602 l 22.89557 31.2558 m 22.89557 26.69566 l 53.29636 26.69566 l 53.29636 31.2558 l 22.89557 31.2558 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 395.25 -660.969 cm Q Q Q Q Q Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -663.594 cm Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+34 0 obj
+<</Length 116633>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.083 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0013>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g q 1 0 0 1 0 -560.96 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 571.11533 l 0.0 573.46365 1.90364 575.36731 4.25198 575.36731 c 463.75406 575.36731 l 466.1024 575.36731 468.00604 573.46365 468.00604 571.11533 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 555.31918 l 466.58871 555.31918 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q [ 2.83466 2.83466 ] 1.41731 d 0.45882 0.54118 0.6 RG 0.45882 0.54118 0.6 rg /pgf@CA1.0 gs 1.41731 159.22656 m 466.58871 159.22656 l S Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 556.73651 m 1.41731 571.11533 l 1.41731 572.68088 2.68643 573.94998 4.25198 573.94998 c 463.75406 573.94998 l 465.31961 573.94998 466.58871 572.68088 466.58871 571.11533 c 466.58871 556.73651 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -560.96 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 561.803 cm 1 1 1 RG 1 1 1 rg BT /F6 12 Tf 0 -560.96 Td[<0865058605a50448097f065309e8>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -560.96 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -560.96 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 171.943 cm 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -195.92 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -195.92 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -195.92 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 85.05 -195.92 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 89.775 -195.92 Td[<002800740034005200540069002d007600340052005400690029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -209.96 Td[<00240069004200460078006200320069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -209.96 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 61.425 -209.96 Td[<00320070003200600076>-524<004d0051002f003200660058001c005400540032004d002f>-525<0062006900760048>-1<00320034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 179.55 -209.96 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 184.275 -209.96 Td[<0042004d004d00320060>-524<0062003200540034007900540069002d002b00510048005100600034>]TJ /F9 9 Tf 99.225 0 Td[<14150ce4>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 301.5 -209.96 Td[<00270027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -224 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g BT /F5 9 Tf 47.25 -224 Td[<0055004d00720056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -224 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 75.6 -224 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 146.475 -224 Td[<00280062002b001c00480032003400790058006a00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 203.175 -224 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 207.9 -224 Td[<0052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 212.625 -224 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 222.075 -224 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -238.04 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 42.525 -238.04 Td[<0028001c004d002b003f005100600034004d005100600069003f>-524<00720032>-1<00620069002d00600042003b003f0069003400520039007900230054>-525<00510037>-525<004d00720029>]TJ ET 0 G 0 g BT /F5 9 Tf 222.075 -238.04 Td[<0055004d00320056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 29.4 -252.08 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 34.125 -252.08 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 105 -252.08 Td[<002800620076004b004b003200690060007600340070002d0062002b001c00480032003400790058006a00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 213.675 -252.08 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 218.4 -252.08 Td[<0052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 223.125 -252.08 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 232.575 -252.08 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -266.12 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 42.525 -266.12 Td[<0028001c004d002b003f005100600034004d005100600069003f>-524<00720032>-1<00620069002d002300320048005100720034007900540069>-525<00510037>-525<004d00720029>]TJ ET 0 G 0 g BT /F5 9 Tf 212.625 -266.12 Td[<0055006200720056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 29.4 -280.16 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 34.125 -280.16 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 105 -280.16 Td[<002800620076004b004b00320069006000760034003f002d0062002b001c00480032003400790058006a00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 213.675 -280.16 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 218.4 -280.16 Td[<0052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 223.125 -280.16 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 232.575 -280.16 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -294.2 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 42.525 -294.2 Td[<0028001c004d002b003f005100600034004d005100600069003f>-524<0032001c>-1<00620069002d002300320048005100720034007900540069>-525<00510037>-525<004d00320029>]TJ ET 0 G 0 g BT /F5 9 Tf 212.625 -294.2 Td[<0055006200320056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 29.4 -308.24 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 34.125 -308.24 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 105 -308.24 Td[<002800620076004b004b00320069006000760034002b002d0062002b001c00480032003400790058006a00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 213.675 -308.24 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 218.4 -308.24 Td[<0052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 223.125 -308.24 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 232.575 -308.24 Td[<0063>]TJ ET 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 18.9 -336.32 Td[<00570057>]TJ /F9 9 Tf 14.175 0 Td[<10a8>]TJ /F11 9 Tf 13.725 0 Td[<0054003b003700510060004d004b001c004d00320069>]TJ /F9 9 Tf 56.7 0 Td[<1231057b05a5>]TJ /F11 9 Tf 31.725 0 Td[<0024002f0060001c0072>-524<0055001b0056>-525<00690051002800510060004d001c004b0032004d0069003f001c004d00340052004e0029>-525<005500220056>]TJ /F9 9 Tf 155.925 0 Td[<080f11c505a507c507f6059d11c10f4c0e4806da060706f51222044d07c40106>]TJ -261.75 -14.04 Td[<11ba077a117c11d310a8>]TJ /F11 9 Tf 49.725 0 Td[<0069004200460078>]TJ /F9 9 Tf 23.625 0 Td[<05a5>]TJ /F11 9 Tf 13.725 0 Td[<00740062002b001c00480032>]TJ /F9 9 Tf 33.075 0 Td[<099f0d4c0f43084604c90a140062>]TJ /F11 9 Tf 63 0 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ /F9 9 Tf 75.6 0 Td[<04270d2605a5>]TJ /F11 9 Tf 31.725 0 Td[<0062002b001c00480032>]TJ /F9 9 Tf 28.349 0 Td[<113510310c92040c0784089805c405a5>]TJ /F11 9 Tf -318.824 -14.04 Td[<0062002b001c00480032>]TJ /F9 9 Tf 28.35 0 Td[<104211c10062>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -378.44 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 42.525 -378.44 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-524<00720032>-1<00620069002d00740062002b001c004800320034006b0029>]TJ ET 0 G 0 g BT /F5 9 Tf 179.55 -378.44 Td[<001c0069>-524<005500620072005800620051006d0069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 269.325 -378.44 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 274.05 -378.44 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 344.924 -378.44 Td[<00280062002b001c00480032003400790058006a00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 401.624 -378.44 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 406.349 -378.44 Td[<006b004e>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 415.799 -378.44 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 425.249 -378.44 Td[<0063>]TJ ET 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 18.9 -406.52 Td[<00570057>]TJ /F9 9 Tf 14.175 0 Td[<0a360e93104211d5065a06450d5e10a8>]TJ /F11 9 Tf 76.725 0 Td[<002f0032002b00510060001c006900420051004d0062>]TJ /F9 9 Tf 51.975 0 Td[<01110e5d10220fb3103111ff106910420f2f06f211d504c9060704950d94>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -420.56 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -420.56 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 51.975 -420.56 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 75.6 -420.56 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 80.325 -420.56 Td[<0028002f0032002b00510060001c006900420051004d0034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 137.025 -420.56 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 141.75 -420.56 Td[<004b001c006000460042004d003b0062002d>]TJ -113.4 -14.04 Td[<004b001c006000460034002300320069007200320032004d>-525<0054005100620042006900420051004d0062>-525<0079>-525<001c004d002f>-525<0079005800640038>-525<0062006900320054>-525<0064007900230054>-525<007200420069003f>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 37.8 -448.64 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 47.25 -448.64 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 70.875 -448.64 Td[<002800690060001c004d0062003700510060004b>-524<0062003f001c00540032002d001c004d002b003f005100600034004d005100600069>-1<003f>-525<00720032006200690029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 236.25 -448.64 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 240.975 -448.64 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 311.85 -448.64 Td[<00280062002b001c00480032003400790058006a00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 368.549 -448.64 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 373.274 -448.64 Td[<006b004e>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 382.724 -448.64 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 392.174 -448.64 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 396.899 -448.64 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -462.68 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -462.68 Td[<0029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 28.35 -476.72 Td[<0024002f0060001c0072>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 51.975 -476.72 Td[<0028002f0032002b00510060001c006900320029>]TJ ET 0 G 0 g BT /F5 9 Tf 103.95 -476.72 Td[<0055004d00720058004d005100600069003f>-524<0032001c006200690056>-525<00400040>-525<0055004d00320058004d005100600069003f>-525<007200320062006900560063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -490.76 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 37.8 -490.76 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 42.525 -490.76 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 66.15 -490.76 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -518.84 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -518.84 Td[<002800370051004d0069003400240046001c00420062003f006d002d001c00480042003b004d0034002b0032004d006900320060002d00740062003f004200370069003400640079002d0069003200740069003400230048001c002b00460029>]TJ ET 0 G 0 g BT /F5 9 Tf 264.6 -518.84 Td[<001c0069>-524<0055004d0072005800620051006d0069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 23.625 -532.88 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 28.35 -532.88 Td[<06f30ee110420bcb075a0e1707a303ac075a0e1707a3>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 127.35 -532.88 Td[<00240024>]TJ ET 0 G 0 g BT /F9 9 Tf 136.8 -532.88 Td[<0fd31042102205a5075a0e1707a3>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 199.8 -532.88 Td[<00240024>]TJ ET 0 G 0 g BT /F9 9 Tf 23.625 -546.92 Td[<066d0fd305a50d0e0e650d5e0f54051305a50d0e0e65>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 122.625 -546.92 Td[<00240024>]TJ ET 0 G 0 g BT /F9 9 Tf 132.075 -546.92 Td[<06f30ee110420bcb075a0e1707a303ac075a0e1707a3>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 231.075 -546.92 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 235.8 -546.92 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -560.96 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -560.96 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -560.96 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 75.6 -560.96 Td[<0027>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -560.96 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -560.96 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 9.921 cm q 1 0 0 1 35.001 -455.56 cm q 0 G 0 g 0.3985 w q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -35.001 0 cm 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 1 0 0 1 35.001 -490.56 cm q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.3985 w q 2 J 0.0 70.0021 m 0.0 52.50157 l 14.00041 52.50157 l 14.00041 45.50136 l 0.0 45.50136 l 0.0 28.00084 l 17.5005 28.00084 l 17.5005 42.00127 l 24.50073 42.00127 l 24.50073 21.00061 l 0.0 21.00061 l 0.0 0.0 l 3.50008 0.0 l 3.50008 17.5005 l 28.00084 17.5005 l 28.00084 42.00127 l 52.50157 42.00127 l 52.50157 66.502 l 70.0021 66.502 l 70.0021 70.0021 l 49.00146 70.0021 l 49.00146 45.50136 l 28.00084 45.50136 l 28.00084 52.50157 l 42.00127 52.50157 l 42.00127 70.0021 l 24.50073 70.0021 l 24.50073 56.00168 l 17.5005 56.00168 l 17.5005 70.0021 l 0.0 70.0021 l 3.50008 66.502 m 14.00041 66.502 l 14.00041 56.00168 l 3.50008 56.00168 l 3.50008 66.502 l 28.00084 66.502 m 38.50114 66.502 l 38.50114 56.00168 l 28.00084 56.00168 l 28.00084 66.502 l 17.5005 52.50157 m 24.50073 52.50157 l 24.50073 45.50136 l 17.5005 45.50136 l 17.5005 52.50157 l 3.50008 42.00127 m 14.00041 42.00127 l 14.00041 31.50095 l 3.50008 31.50095 l 3.50008 42.00127 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 175.401 0 cm 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 1 0 0 1 105.002 -490.56 cm q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.3985 w q 2 J 0.0 70.0021 m 0.0 52.50157 l -14.00041 52.50157 l -14.00041 45.50136 l 0.0 45.50136 l 0.0 28.00084 l -17.5005 28.00084 l -17.5005 42.00127 l -24.50073 42.00127 l -24.50073 21.00061 l 0.0 21.00061 l 0.0 0.0 l -3.50008 0.0 l -3.50008 17.5005 l -28.00084 17.5005 l -28.00084 42.00127 l -52.50157 42.00127 l -52.50157 66.502 l -70.0021 66.502 l -70.0021 70.0021 l -49.00146 70.0021 l -49.00146 45.50136 l -28.00084 45.50136 l -28.00084 52.50157 l -42.00127 52.50157 l -42.00127 70.0021 l -24.50073 70.0021 l -24.50073 56.00168 l -17.5005 56.00168 l -17.5005 70.0021 l 0.0 70.0021 l -3.50008 66.502 m -14.00041 66.502 l -14.00041 56.00168 l -3.50008 56.00168 l -3.50008 66.502 l -28.00084 66.502 m -38.50114 66.502 l -38.50114 56.00168 l -28.00084 56.00168 l -28.00084 66.502 l -17.5005 52.50157 m -24.50073 52.50157 l -24.50073 45.50136 l -17.5005 45.50136 l -17.5005 52.50157 l -3.50008 42.00127 m -14.00041 42.00127 l -14.00041 31.50095 l -3.50008 31.50095 l -3.50008 42.00127 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -35.001 -70.401 cm 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 1 0 0 1 35.001 -420.559 cm q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.3985 w q 2 J 0.0 -70.0021 m 0.0 -52.50157 l 14.00041 -52.50157 l 14.00041 -45.50136 l 0.0 -45.50136 l 0.0 -28.00084 l 17.5005 -28.00084 l 17.5005 -42.00127 l 24.50073 -42.00127 l 24.50073 -21.00061 l 0.0 -21.00061 l 0.0 0.0 l 3.50008 0.0 l 3.50008 -17.5005 l 28.00084 -17.5005 l 28.00084 -42.00127 l 52.50157 -42.00127 l 52.50157 -66.502 l 70.0021 -66.502 l 70.0021 -70.0021 l 49.00146 -70.0021 l 49.00146 -45.50136 l 28.00084 -45.50136 l 28.00084 -52.50157 l 42.00127 -52.50157 l 42.00127 -70.0021 l 24.50073 -70.0021 l 24.50073 -56.00168 l 17.5005 -56.00168 l 17.5005 -70.0021 l 0.0 -70.0021 l 3.50008 -66.502 m 14.00041 -66.502 l 14.00041 -56.00168 l 3.50008 -56.00168 l 3.50008 -66.502 l 28.00084 -66.502 m 38.50114 -66.502 l 38.50114 -56.00168 l 28.00084 -56.00168 l 28.00084 -66.502 l 17.5005 -52.50157 m 24.50073 -52.50157 l 24.50073 -45.50136 l 17.5005 -45.50136 l 17.5005 -52.50157 l 3.50008 -42.00127 m 14.00041 -42.00127 l 14.00041 -31.50095 l 3.50008 -31.50095 l 3.50008 -42.00127 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 175.401 -70.401 cm 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 1 0 0 1 105.002 -420.559 cm q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.3985 w q 2 J 0.0 -70.0021 m 0.0 -52.50157 l -14.00041 -52.50157 l -14.00041 -45.50136 l 0.0 -45.50136 l 0.0 -28.00084 l -17.5005 -28.00084 l -17.5005 -42.00127 l -24.50073 -42.00127 l -24.50073 -21.00061 l 0.0 -21.00061 l 0.0 0.0 l -3.50008 0.0 l -3.50008 -17.5005 l -28.00084 -17.5005 l -28.00084 -42.00127 l -52.50157 -42.00127 l -52.50157 -66.502 l -70.0021 -66.502 l -70.0021 -70.0021 l -49.00146 -70.0021 l -49.00146 -45.50136 l -28.00084 -45.50136 l -28.00084 -52.50157 l -42.00127 -52.50157 l -42.00127 -70.0021 l -24.50073 -70.0021 l -24.50073 -56.00168 l -17.5005 -56.00168 l -17.5005 -70.0021 l 0.0 -70.0021 l -3.50008 -66.502 m -14.00041 -66.502 l -14.00041 -56.00168 l -3.50008 -56.00168 l -3.50008 -66.502 l -28.00084 -66.502 m -38.50114 -66.502 l -38.50114 -56.00168 l -28.00084 -56.00168 l -28.00084 -66.502 l -17.5005 -52.50157 m -24.50073 -52.50157 l -24.50073 -45.50136 l -17.5005 -45.50136 l -17.5005 -52.50157 l -3.50008 -42.00127 m -14.00041 -42.00127 l -14.00041 -31.50095 l -3.50008 -31.50095 l -3.50008 -42.00127 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 2 0 0 1 .598 -103.652 cm 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 1 0 0 1 35.001 -457.31 cm q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 3.50008 l 70.0021 3.50008 l 70.0021 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q q q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 35.4 33.251 cm 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 1 0 0 1 35.001 -457.31 cm q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 3.50008 l 70.0021 3.50008 l 70.0021 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q Q q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 105.4 33.251 cm 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 1 0 0 1 35.001 -457.31 cm q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 3.50008 l 70.0021 3.50008 l 70.0021 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q Q 35.2003 35.2003 m 175.20209 35.2003 m 175.20209 35.2003 m S Q q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 35.001 -455.56 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 47.189 -62.947 cm 0 G 0 g BT /F6 10.5 Tf 35.001 -406.42 Td[<06f30ee110420bcb075a0e1707a303ac075a0e1707a3>]TJ 21 -16.38 Td[<0fd31042102205a5075a0e1707a3>]TJ -21 -16.38 Td[<066d0fd305a50d0e0e650d5e0f54051305a50d0e0e65>]TJ 0 -16.38 Td[<06f30ee110420bcb075a0e1707a303ac075a0e1707a3>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 35.001 -455.56 cm Q Q Q Q Q Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -560.96 cm Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+37 0 obj
+<</Length 136533>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.035 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0014>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g q 1 0 0 1 0 -416.244 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 426.39763 l 0.0 428.74597 1.90364 430.64961 4.25198 430.64961 c 463.75406 430.64961 l 466.1024 430.64961 468.00604 428.74597 468.00604 426.39763 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 410.60149 l 466.58871 410.60149 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q [ 2.83466 2.83466 ] 1.41731 d 0.45882 0.54118 0.6 RG 0.45882 0.54118 0.6 rg /pgf@CA1.0 gs 1.41731 168.95074 m 466.58871 168.95074 l S Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 412.01881 m 1.41731 426.39763 l 1.41731 427.96318 2.68643 429.23228 4.25198 429.23228 c 463.75406 429.23228 l 465.31961 429.23228 466.58871 427.96318 466.58871 426.39763 c 466.58871 412.01881 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -416.244 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 417.086 cm 1 1 1 RG 1 1 1 rg BT /F6 12 Tf 0 -416.244 Td[<0a36104206f10865058605a50448097f065309e8>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -416.244 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -416.244 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 181.667 cm 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -205.644 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -205.644 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -205.644 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 85.05 -205.644 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -219.684 Td[<00240069004200460078006200320069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -219.684 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 51.975 -219.684 Td[<00320070003200600076>-524<004d0051002f003200660058001c005400540032004d002f>-526<006200690076004800320034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 170.1 -219.684 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 174.825 -219.684 Td[<0e5e0a73>]TJ /F5 9 Tf 18 0 Td[<002d0042004d004d00320060>-524<0062003200540034007900540069>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 258.975 -219.684 Td[<00270027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -233.724 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g BT /F5 9 Tf 37.8 -233.724 Td[<0055004d00720056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 61.425 -233.724 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 66.15 -233.724 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 137.025 -233.724 Td[<00280062002b001c00480032003400790058006b00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 193.725 -233.724 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 198.45 -233.724 Td[<0052006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 207.9 -233.724 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 217.35 -233.724 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -247.764 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -247.764 Td[<002800600042003b003f006900340038007900230054>-524<00510037>-526<004d00720029>]TJ ET 0 G 0 g BT /F5 9 Tf 122.85 -247.764 Td[<0055004d00320056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 146.475 -247.764 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 151.2 -247.764 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 222.075 -247.764 Td[<00280062002b001c00480032003400790058006b0038002d00620076004b004b0032006900600076003400700029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 330.75 -247.764 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 335.474 -247.764 Td[<0052006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 344.924 -247.764 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -247.764 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -261.804 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -261.804 Td[<00280023003200480051007200340038007900230054>-524<00510037>-526<004d00720029>]TJ ET 0 G 0 g BT /F5 9 Tf 122.85 -261.804 Td[<0055006200720056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 146.475 -261.804 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 151.2 -261.804 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 222.075 -261.804 Td[<00280062002b001c00480032003400790058006b0038002d00620076004b004b00320069006000760034003f0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 330.75 -261.804 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 335.474 -261.804 Td[<0052006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 344.924 -261.804 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -261.804 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -275.844 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -275.844 Td[<00280023003200480051007200340038007900230054>-524<00510037>-526<004d00320029>]TJ ET 0 G 0 g BT /F5 9 Tf 122.85 -275.844 Td[<0055006200320056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 146.475 -275.844 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 151.2 -275.844 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 222.075 -275.844 Td[<00280062002b001c00480032003400790058006b0038002d00620076004b004b00320069006000760034002b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 330.75 -275.844 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 335.474 -275.844 Td[<0052006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 344.924 -275.844 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -275.844 Td[<0063>]TJ ET 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 9.45 -289.884 Td[<0057>]TJ /F9 9 Tf 9.45 0 Td[<0ac406f10486087110f0097a06070eb9>]TJ /F11 9 Tf 76.725 0 Td[<006b0079007900230054002d>]TJ /F9 9 Tf 33.075 0 Td[<1079054e07fb07c20d480cc20754105b>]TJ /F11 9 Tf 76.725 0 Td[<00230054>]TJ /F9 9 Tf 14.175 0 Td[<12540eb905860eca011107f6043108a00cb8105e08390dd8>]TJ /F11 9 Tf 112.724 0 Td[<00740062002b001c00480032>]TJ /F9 9 Tf 33.075 0 Td[<05a511b40062118309da>]TJ /F11 9 Tf -345.449 -14.04 Td[<0062002b001c00480032003400790058006b0038>]TJ /F9 9 Tf 51.975 0 Td[<11350486087110b50f72097a06070eb9>]TJ /F11 9 Tf 76.725 0 Td[<0038007900230054>]TJ /F9 9 Tf 18.9 0 Td[<011106d0077a0d5e0a0606f1089805c40698077c11ad085705a5090f09d601111079054e04820fb31031111c0d21>]TJ /F11 9 Tf 211.724 0 Td[<00740062002b001c00480032>]TJ /F9 9 Tf 28.35 0 Td[<0062>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -317.964 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -317.964 Td[<0028001c004d002b003f005100600034004d005100600069003f>-525<00720032006200690029>]TJ ET 0 G 0 g BT /F5 9 Tf 127.575 -317.964 Td[<001c0069>-524<0055004d00720058004d005100600069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 217.35 -317.964 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 222.075 -317.964 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 292.95 -317.964 Td[<00280062002b001c00480032003400790058006b00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 349.649 -317.964 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -317.964 Td[<006a006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 363.824 -317.964 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 373.274 -317.964 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -332.004 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -332.004 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<00720032006200690029>]TJ ET 0 G 0 g BT /F5 9 Tf 127.575 -332.004 Td[<001c0069>-524<005500620072005800620051006d0069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 217.35 -332.004 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 222.075 -332.004 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 292.95 -332.004 Td[<00280062002b001c00480032003400790058006b00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 349.649 -332.004 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -332.004 Td[<006a006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 363.824 -332.004 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 373.274 -332.004 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -346.044 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -346.044 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0072003200620069002d006000510069001c0069003200340040004e00790029>]TJ ET 0 G 0 g BT /F5 9 Tf 179.55 -346.044 Td[<001c0069>-524<0055004d0072005800620051006d0069003f>-525<00720032006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 269.325 -346.044 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 274.05 -346.044 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 344.924 -346.044 Td[<00280062002b001c00480032003400790058006b00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 401.624 -346.044 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 406.349 -346.044 Td[<006a006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 415.799 -346.044 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 425.249 -346.044 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -360.084 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -360.084 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0032001c00620069002d006000510069001c006900320034004e00790029>]TJ ET 0 G 0 g BT /F5 9 Tf 174.825 -360.084 Td[<001c0069>-524<0055004d0032005800620051006d0069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 264.6 -360.084 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 269.325 -360.084 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 340.199 -360.084 Td[<00280062002b001c00480032003400790058006b00380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 396.899 -360.084 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 401.624 -360.084 Td[<006a006b>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 411.074 -360.084 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 420.524 -360.084 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -388.164 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -388.164 Td[<0028001c004d002b003f005100600034002b0032004d006900320060002d>]TJ /F9 9 Tf 75.6 0 Td[<05c609a1>]TJ /F5 9 Tf 18 0 Td[<002d0062003f004200370069003400260055006b003800230054002d0040006b003800230054005600270029>]TJ ET 0 G 0 g BT /F5 9 Tf 225.9 -388.164 Td[<001c0069>-524<0055004d0072005800620051006d0069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 10.5 -402.204 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 15.225 -402.204 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 86.1 -402.204 Td[<00280062002b001c0048003200340079005800380029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 138.075 -402.204 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 142.8 -402.204 Td[<00380064>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 152.25 -402.204 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 161.7 -402.204 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -416.244 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -416.244 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -416.244 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 75.6 -416.244 Td[<0027>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -416.244 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -416.244 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 9.921 cm q 1 0 0 1 25.031 -290.752 cm q 0 G 0 g 0.3985 w q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.032 0 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 25.031 -315.846 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 7.50009 50.12563 m 7.50009 42.62553 l 0.0 42.62553 l 0.0 32.50041 l 7.50009 32.50041 l 7.50009 27.62535 l 0.0 27.62535 l 0.0 0.06248 l 0.12498 0.06248 l 0.12498 27.50034 l 7.50009 27.50034 l 7.50009 25.1253 l 2.50002 25.1253 l 2.50002 0.06248 l 2.62503 0.06248 l 2.62503 25.00032 l 7.50009 25.00032 l 7.50009 0.06248 l 7.62508 0.06248 l 7.62508 32.50041 l 10.0001 32.50041 l 10.0001 0.06248 l 10.12512 0.06248 l 10.12512 25.00032 l 17.62521 25.00032 l 17.62521 32.50041 l 25.1253 32.50041 l 25.1253 40.0005 l 50.06313 40.0005 l 50.06313 40.1255 l 25.1253 40.1255 l 25.1253 42.50053 l 50.06313 42.50053 l 50.06313 42.62553 l 25.1253 42.62553 l 25.1253 47.5006 l 50.06313 47.5006 l 50.06313 47.6256 l 25.00032 47.6256 l 25.00032 32.6254 l 17.62521 32.6254 l 17.62521 35.00043 l 22.62527 35.00043 l 22.62527 50.00064 l 50.06313 50.00064 l 50.06313 50.12563 l 22.50027 50.12563 l 22.50027 42.62553 l 17.62521 42.62553 l 17.62521 50.12563 l 7.50009 50.12563 l 7.62508 50.00064 m 17.5002 50.00064 l 17.5002 42.62553 l 15.12518 42.62553 l 15.12518 47.6256 l 10.0001 47.6256 l 10.0001 35.12544 l 7.62508 35.12544 l 7.62508 50.00064 l 10.12512 47.5006 m 15.00018 47.5006 l 15.00018 42.62553 l 10.12512 42.62553 l 10.12512 47.5006 l 0.12498 42.50053 m 7.50009 42.50053 l 7.50009 40.1255 l 2.50002 40.1255 l 2.50002 35.00043 l 15.00018 35.00043 l 15.00018 32.6254 l 0.12498 32.6254 l 0.12498 42.50053 l 10.12512 42.50053 m 22.50027 42.50053 l 22.50027 40.1255 l 10.12512 40.1255 l 10.12512 42.50053 l 2.62503 40.0005 m 7.50009 40.0005 l 7.50009 35.12544 l 2.62503 35.12544 l 2.62503 40.0005 l 10.12512 40.0005 m 15.00018 40.0005 l 15.00018 35.12544 l 10.12512 35.12544 l 10.12512 40.0005 l 15.12518 40.0005 m 17.5002 40.0005 l 17.5002 25.1253 l 10.12512 25.1253 l 10.12512 27.50034 l 15.12518 27.50034 l 15.12518 40.0005 l 17.62521 40.0005 m 22.50027 40.0005 l 22.50027 35.12544 l 17.62521 35.12544 l 17.62521 40.0005 l 10.12512 32.50041 m 15.00018 32.50041 l 15.00018 27.62535 l 10.12512 27.62535 l 10.12512 32.50041 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 75.431 0 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 75.094 -315.846 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J -7.50009 50.12563 m -7.50009 42.62553 l 0.0 42.62553 l 0.0 32.50041 l -7.50009 32.50041 l -7.50009 27.62535 l 0.0 27.62535 l 0.0 0.06248 l -0.12498 0.06248 l -0.12498 27.50034 l -7.50009 27.50034 l -7.50009 25.1253 l -2.50002 25.1253 l -2.50002 0.06248 l -2.62503 0.06248 l -2.62503 25.00032 l -7.50009 25.00032 l -7.50009 0.06248 l -7.62508 0.06248 l -7.62508 32.50041 l -10.0001 32.50041 l -10.0001 0.06248 l -10.12512 0.06248 l -10.12512 25.00032 l -17.62521 25.00032 l -17.62521 32.50041 l -25.1253 32.50041 l -25.1253 40.0005 l -50.06313 40.0005 l -50.06313 40.1255 l -25.1253 40.1255 l -25.1253 42.50053 l -50.06313 42.50053 l -50.06313 42.62553 l -25.1253 42.62553 l -25.1253 47.5006 l -50.06313 47.5006 l -50.06313 47.6256 l -25.00032 47.6256 l -25.00032 32.6254 l -17.62521 32.6254 l -17.62521 35.00043 l -22.62527 35.00043 l -22.62527 50.00064 l -50.06313 50.00064 l -50.06313 50.12563 l -22.50027 50.12563 l -22.50027 42.62553 l -17.62521 42.62553 l -17.62521 50.12563 l -7.50009 50.12563 l -7.62508 50.00064 m -17.5002 50.00064 l -17.5002 42.62553 l -15.12518 42.62553 l -15.12518 47.6256 l -10.0001 47.6256 l -10.0001 35.12544 l -7.62508 35.12544 l -7.62508 50.00064 l -10.12512 47.5006 m -15.00018 47.5006 l -15.00018 42.62553 l -10.12512 42.62553 l -10.12512 47.5006 l -0.12498 42.50053 m -7.50009 42.50053 l -7.50009 40.1255 l -2.50002 40.1255 l -2.50002 35.00043 l -15.00018 35.00043 l -15.00018 32.6254 l -0.12498 32.6254 l -0.12498 42.50053 l -10.12512 42.50053 m -22.50027 42.50053 l -22.50027 40.1255 l -10.12512 40.1255 l -10.12512 42.50053 l -2.62503 40.0005 m -7.50009 40.0005 l -7.50009 35.12544 l -2.62503 35.12544 l -2.62503 40.0005 l -10.12512 40.0005 m -15.00018 40.0005 l -15.00018 35.12544 l -10.12512 35.12544 l -10.12512 40.0005 l -15.12518 40.0005 m -17.5002 40.0005 l -17.5002 25.1253 l -10.12512 25.1253 l -10.12512 27.50034 l -15.12518 27.50034 l -15.12518 40.0005 l -17.62521 40.0005 m -22.50027 40.0005 l -22.50027 35.12544 l -17.62521 35.12544 l -17.62521 40.0005 l -10.12512 32.50041 m -15.00018 32.50041 l -15.00018 27.62535 l -10.12512 27.62535 l -10.12512 32.50041 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.032 -100.462 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 25.031 -265.658 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 7.50009 -50.12563 m 7.50009 -42.62553 l 0.0 -42.62553 l 0.0 -32.50041 l 7.50009 -32.50041 l 7.50009 -27.62535 l 0.0 -27.62535 l 0.0 -0.06248 l 0.12498 -0.06248 l 0.12498 -27.50034 l 7.50009 -27.50034 l 7.50009 -25.1253 l 2.50002 -25.1253 l 2.50002 -0.06248 l 2.62503 -0.06248 l 2.62503 -25.00032 l 7.50009 -25.00032 l 7.50009 -0.06248 l 7.62508 -0.06248 l 7.62508 -32.50041 l 10.0001 -32.50041 l 10.0001 -0.06248 l 10.12512 -0.06248 l 10.12512 -25.00032 l 17.62521 -25.00032 l 17.62521 -32.50041 l 25.1253 -32.50041 l 25.1253 -40.0005 l 50.06313 -40.0005 l 50.06313 -40.1255 l 25.1253 -40.1255 l 25.1253 -42.50053 l 50.06313 -42.50053 l 50.06313 -42.62553 l 25.1253 -42.62553 l 25.1253 -47.5006 l 50.06313 -47.5006 l 50.06313 -47.6256 l 25.00032 -47.6256 l 25.00032 -32.6254 l 17.62521 -32.6254 l 17.62521 -35.00043 l 22.62527 -35.00043 l 22.62527 -50.00064 l 50.06313 -50.00064 l 50.06313 -50.12563 l 22.50027 -50.12563 l 22.50027 -42.62553 l 17.62521 -42.62553 l 17.62521 -50.12563 l 7.50009 -50.12563 l 7.62508 -50.00064 m 17.5002 -50.00064 l 17.5002 -42.62553 l 15.12518 -42.62553 l 15.12518 -47.6256 l 10.0001 -47.6256 l 10.0001 -35.12544 l 7.62508 -35.12544 l 7.62508 -50.00064 l 10.12512 -47.5006 m 15.00018 -47.5006 l 15.00018 -42.62553 l 10.12512 -42.62553 l 10.12512 -47.5006 l 0.12498 -42.50053 m 7.50009 -42.50053 l 7.50009 -40.1255 l 2.50002 -40.1255 l 2.50002 -35.00043 l 15.00018 -35.00043 l 15.00018 -32.6254 l 0.12498 -32.6254 l 0.12498 -42.50053 l 10.12512 -42.50053 m 22.50027 -42.50053 l 22.50027 -40.1255 l 10.12512 -40.1255 l 10.12512 -42.50053 l 2.62503 -40.0005 m 7.50009 -40.0005 l 7.50009 -35.12544 l 2.62503 -35.12544 l 2.62503 -40.0005 l 10.12512 -40.0005 m 15.00018 -40.0005 l 15.00018 -35.12544 l 10.12512 -35.12544 l 10.12512 -40.0005 l 15.12518 -40.0005 m 17.5002 -40.0005 l 17.5002 -25.1253 l 10.12512 -25.1253 l 10.12512 -27.50034 l 15.12518 -27.50034 l 15.12518 -40.0005 l 17.62521 -40.0005 m 22.50027 -40.0005 l 22.50027 -35.12544 l 17.62521 -35.12544 l 17.62521 -40.0005 l 10.12512 -32.50041 m 15.00018 -32.50041 l 15.00018 -27.62535 l 10.12512 -27.62535 l 10.12512 -32.50041 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 75.431 -100.462 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 75.094 -265.658 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J -7.50009 -50.12563 m -7.50009 -42.62553 l 0.0 -42.62553 l 0.0 -32.50041 l -7.50009 -32.50041 l -7.50009 -27.62535 l 0.0 -27.62535 l 0.0 -0.06248 l -0.12498 -0.06248 l -0.12498 -27.50034 l -7.50009 -27.50034 l -7.50009 -25.1253 l -2.50002 -25.1253 l -2.50002 -0.06248 l -2.62503 -0.06248 l -2.62503 -25.00032 l -7.50009 -25.00032 l -7.50009 -0.06248 l -7.62508 -0.06248 l -7.62508 -32.50041 l -10.0001 -32.50041 l -10.0001 -0.06248 l -10.12512 -0.06248 l -10.12512 -25.00032 l -17.62521 -25.00032 l -17.62521 -32.50041 l -25.1253 -32.50041 l -25.1253 -40.0005 l -50.06313 -40.0005 l -50.06313 -40.1255 l -25.1253 -40.1255 l -25.1253 -42.50053 l -50.06313 -42.50053 l -50.06313 -42.62553 l -25.1253 -42.62553 l -25.1253 -47.5006 l -50.06313 -47.5006 l -50.06313 -47.6256 l -25.00032 -47.6256 l -25.00032 -32.6254 l -17.62521 -32.6254 l -17.62521 -35.00043 l -22.62527 -35.00043 l -22.62527 -50.00064 l -50.06313 -50.00064 l -50.06313 -50.12563 l -22.50027 -50.12563 l -22.50027 -42.62553 l -17.62521 -42.62553 l -17.62521 -50.12563 l -7.50009 -50.12563 l -7.62508 -50.00064 m -17.5002 -50.00064 l -17.5002 -42.62553 l -15.12518 -42.62553 l -15.12518 -47.6256 l -10.0001 -47.6256 l -10.0001 -35.12544 l -7.62508 -35.12544 l -7.62508 -50.00064 l -10.12512 -47.5006 m -15.00018 -47.5006 l -15.00018 -42.62553 l -10.12512 -42.62553 l -10.12512 -47.5006 l -0.12498 -42.50053 m -7.50009 -42.50053 l -7.50009 -40.1255 l -2.50002 -40.1255 l -2.50002 -35.00043 l -15.00018 -35.00043 l -15.00018 -32.6254 l -0.12498 -32.6254 l -0.12498 -42.50053 l -10.12512 -42.50053 m -22.50027 -42.50053 l -22.50027 -40.1255 l -10.12512 -40.1255 l -10.12512 -42.50053 l -2.62503 -40.0005 m -7.50009 -40.0005 l -7.50009 -35.12544 l -2.62503 -35.12544 l -2.62503 -40.0005 l -10.12512 -40.0005 m -15.00018 -40.0005 l -15.00018 -35.12544 l -10.12512 -35.12544 l -10.12512 -40.0005 l -15.12518 -40.0005 m -17.5002 -40.0005 l -17.5002 -25.1253 l -10.12512 -25.1253 l -10.12512 -27.50034 l -15.12518 -27.50034 l -15.12518 -40.0005 l -17.62521 -40.0005 m -22.50027 -40.0005 l -22.50027 -35.12544 l -17.62521 -35.12544 l -17.62521 -40.0005 l -10.12512 -32.50041 m -15.00018 -32.50041 l -15.00018 -27.62535 l -10.12512 -27.62535 l -10.12512 -32.50041 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 25.43 19.969 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 24.969 -295.815 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.06248 0.0 m 0.06248 0.12498 l 50.06313 0.12498 l 50.06313 0.0 l 0.06248 0.0 l 0.06248 2.50002 m 0.06248 2.62503 l 50.06313 2.62503 l 50.06313 2.50002 l 0.06248 2.50002 l 0.06248 7.50009 m 0.06248 7.62508 l 50.06313 7.62508 l 50.06313 7.50009 l 0.06248 7.50009 l 0.06248 10.0001 m 0.06248 10.12512 l 50.06313 10.12512 l 50.06313 10.0001 l 0.06248 10.0001 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 25.43 -120.431 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 24.969 -295.815 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.06248 0.0 m 0.06248 0.12498 l 50.06313 0.12498 l 50.06313 0.0 l 0.06248 0.0 l 0.06248 2.50002 m 0.06248 2.62503 l 50.06313 2.62503 l 50.06313 2.50002 l 0.06248 2.50002 l 0.06248 7.50009 m 0.06248 7.62508 l 50.06313 7.62508 l 50.06313 7.50009 l 0.06248 7.50009 l 0.06248 10.0001 m 0.06248 10.12512 l 50.06313 10.12512 l 50.06313 10.0001 l 0.06248 10.0001 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 295.814 -291.151 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 24.969 -295.815 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.06248 0.0 m 0.06248 0.12498 l 50.06313 0.12498 l 50.06313 0.0 l 0.06248 0.0 l 0.06248 2.50002 m 0.06248 2.62503 l 50.06313 2.62503 l 50.06313 2.50002 l 0.06248 2.50002 l 0.06248 7.50009 m 0.06248 7.62508 l 50.06313 7.62508 l 50.06313 7.50009 l 0.06248 7.50009 l 0.06248 10.0001 m 0.06248 10.12512 l 50.06313 10.12512 l 50.06313 10.0001 l 0.06248 10.0001 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 -145.29 -391.214 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 24.969 -295.815 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.06248 0.0 m 0.06248 0.12498 l 50.06313 0.12498 l 50.06313 0.0 l 0.06248 0.0 l 0.06248 2.50002 m 0.06248 2.62503 l 50.06313 2.62503 l 50.06313 2.50002 l 0.06248 2.50002 l 0.06248 7.50009 m 0.06248 7.62508 l 50.06313 7.62508 l 50.06313 7.50009 l 0.06248 7.50009 l 0.06248 10.0001 m 0.06248 10.12512 l 50.06313 10.12512 l 50.06313 10.0001 l 0.06248 10.0001 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg Q q q -1 0 0 -1 0 0 cm q Q 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg q 1 0 0 1 25.031 -290.752 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .043 -50.231 cm 0.02353 0.32158 0.47452 RG 0.02353 0.32158 0.47452 rg q 1 0 0 1 24.906 -340.812 cm q 0.02353 0.32158 0.47452 RG 0.02353 0.32158 0.47452 rg 0.3985 w q 2 J 47.8106 99.99628 m 47.8106 89.98114 l 38.94548 89.42615 30.51038 85.9361 23.85028 80.06102 c 32.2854 80.06102 l 37.00047 82.89604 42.32552 84.57608 47.8106 84.97108 c 47.8106 77.56099 l 35.31044 77.56099 l 35.31044 72.56091 l 47.8106 72.56091 l 47.8106 65.06082 l 35.31044 65.06082 l 35.31044 35.06044 l 47.8106 35.06044 l 47.8106 27.56035 l 35.31044 27.56035 l 35.31044 22.56027 l 47.8106 22.56027 l 47.8106 15.15018 l 42.32054 15.54019 36.99547 17.2252 32.28041 20.06024 c 23.8553 20.06024 l 30.51538 14.18517 38.95049 10.69511 47.8106 10.14012 c 47.8106 0.12498 l 52.81067 0.12498 l 52.81566 10.13512 l 61.68077 10.69012 70.1109 14.18517 76.77097 20.06024 c 68.34087 20.06024 l 63.62581 17.2252 58.30074 15.54019 52.81067 15.15018 c 52.81067 22.56027 l 65.31583 22.56027 l 65.31583 27.56035 l 52.81067 27.56035 l 52.81067 35.06044 l 65.31583 35.06044 l 65.31583 65.06082 l 52.81067 65.06082 l 52.81067 72.56091 l 65.31583 72.56091 l 65.31583 77.56099 l 52.81067 77.56099 l 52.81566 84.97108 l 58.30074 84.58109 63.62581 82.89604 68.34087 80.06102 c 76.77097 80.06102 l 70.1109 85.93109 61.67578 89.42615 52.81067 89.98114 c 52.81067 99.99628 l 47.8106 99.99628 l 42.81053 99.49628 m 24.88031 96.77623 9.8201 84.55109 3.47502 67.56085 c 25.31032 67.56085 l 25.31032 52.56067 l 17.81021 52.56067 l 17.81021 62.56079 l 1.90001 62.56079 l 1.47499 60.91577 1.13501 59.24075 0.87999 57.56071 c 12.81015 57.56071 l 12.81015 52.56067 l 0.375 52.56067 l 0.12498 47.5156 0.64 42.45554 1.90001 37.56046 c 7.08008 37.56046 l 6.14006 40.8155 5.57005 44.17555 5.38005 47.5606 c 12.81015 47.5606 l 12.81015 37.56046 l 25.31032 37.56046 l 25.31032 32.5604 l 3.47502 32.5604 l 9.8251 15.57018 24.88031 3.34503 42.81554 0.62498 c 42.81053 5.69006 l 29.59036 7.9251 18.04521 15.94519 11.34012 27.55534 c 30.31036 27.56035 l 30.31036 42.56053 l 17.81021 42.56053 l 17.81021 47.5606 l 30.31036 47.5606 l 30.31036 72.56091 l 11.34012 72.56091 l 18.04521 84.17607 29.59036 92.19618 42.81554 94.4312 c 42.81053 99.49628 l 57.81073 99.49628 m 57.81073 94.4312 l 71.0309 92.19618 82.57605 84.17607 89.28113 72.56091 c 70.31589 72.56091 l 70.31589 47.5606 l 82.81606 47.5606 l 82.81606 42.56053 l 70.31589 42.56053 l 70.31589 27.56035 l 89.28613 27.55534 l 82.58104 15.94519 71.0359 7.9251 57.81073 5.69006 c 57.81073 0.62498 l 75.74596 3.34503 90.80116 15.57018 97.14622 32.5604 c 75.31596 32.5604 l 75.31596 37.56046 l 87.81612 37.56046 l 87.81612 47.5606 l 95.24622 47.5606 l 95.05621 44.17555 94.4862 40.8155 93.54118 37.56046 c 98.72125 37.56046 l 99.98628 42.45554 100.50128 47.5156 100.24628 52.56067 c 87.81612 52.56067 l 87.81612 57.56071 l 99.74626 57.56071 l 99.49127 59.24075 99.15126 60.91577 98.72626 62.56079 c 82.81606 62.56079 l 82.81606 52.56067 l 75.31596 52.56067 l 75.31596 67.56085 l 97.15125 67.56085 l 90.80116 84.55109 75.74596 96.77623 57.81073 99.49628 c 40.3105 60.06076 m 47.8106 60.06076 l 47.8106 40.0605 l 40.3105 40.0605 l 40.3105 60.06076 l 52.81067 60.06076 m 60.31076 60.06076 l 60.31076 40.0605 l 52.81067 40.0605 l 52.81067 60.06076 l B Q n Q Q Q 1 G 1 g 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg q 1 0 0 1 25.031 -290.752 cm Q Q Q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0 G 0 g Q Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -416.244 cm Q Q Q Q Q n Q Q q 1 0 0 1 0 -617.194 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 189.72661 l 0.0 192.07495 1.90364 193.9786 4.25198 193.9786 c 463.75406 193.9786 l 466.1024 193.9786 468.00604 192.07495 468.00604 189.72661 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 173.71448 l 466.58871 173.71448 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q [ 2.83466 2.83466 ] 1.41731 d 0.45882 0.54118 0.6 RG 0.45882 0.54118 0.6 rg /pgf@CA1.0 gs 1.41731 58.42525 m 466.58871 58.42525 l S Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 175.1318 m 1.41731 189.72661 l 1.41731 191.29218 2.68643 192.56128 4.25198 192.56128 c 463.75406 192.56128 l 465.31961 192.56128 466.58871 191.29218 466.58871 189.72661 c 466.58871 175.1318 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -617.194 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 180.258 cm 1 1 1 RG 1 1 1 rg BT /F6 12 Tf 0 -617.194 Td[<10b50f74048608710f3b08a409560b3f0fb310310d6d05ee>]TJ /F8 12 Tf 150.3 0 Td[<0062003f004200370069>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -617.194 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -617.194 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 71.141 cm 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -532.954 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -532.954 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -532.954 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 85.05 -532.954 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 89.775 -532.954 Td[<00240069004200460078006200320069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 127.575 -532.954 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 132.3 -532.954 Td[<00320070003200600076>-524<004d0051002f003200660058001c005400540032004d002f>-525<006200690076004800320034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 250.425 -532.954 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 255.15 -532.954 Td[<050508c1>]TJ /F5 9 Tf 18 0 Td[<002d0042004d004d00320060>-524<0062003200540034007900540069>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 339.299 -532.954 Td[<00270027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -546.994 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g BT /F5 9 Tf 37.8 -546.994 Td[<0055004d00720056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 61.425 -546.994 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 66.15 -546.994 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 137.025 -546.994 Td[<00280062002b001c00480032003400790058006b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 189 -546.994 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 193.725 -546.994 Td[<006b006a>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 203.175 -546.994 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 212.625 -546.994 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -561.034 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -561.034 Td[<002800600042003b003f006900340038006a00230054>-524<00510037>-526<004d00720029>]TJ ET 0 G 0 g BT /F5 9 Tf 122.85 -561.034 Td[<0055004d00320056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 146.475 -561.034 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 151.2 -561.034 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 222.075 -561.034 Td[<00280062002b001c00480032003400790058006b002d00620076004b004b0032006900600076003400700029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 326.025 -561.034 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 330.75 -561.034 Td[<006b006a>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 340.2 -561.034 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 349.649 -561.034 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -575.074 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -575.074 Td[<0028001c004d002b003f005100600034004d005100600069003f>-525<0072003200620069002d00740062003f0042003700690034006b002300540029>]TJ ET 0 G 0 g BT /F5 9 Tf 179.55 -575.074 Td[<001c0069>-524<0055004d00720058004d005100600069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 269.325 -575.074 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 274.05 -575.074 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 344.924 -575.074 Td[<00280062002b001c00480032003400790058006b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 396.899 -575.074 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 401.624 -575.074 Td[<00390052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 411.074 -575.074 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 420.524 -575.074 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -589.114 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -589.114 Td[<0028001c004d002b003f005100600034004d005100600069003f>-525<0032001c00620069002d00740062003f00420037006900340040006b002300540029>]TJ ET 0 G 0 g BT /F5 9 Tf 184.275 -589.114 Td[<001c0069>-524<0055004d00320058004d005100600069003f>-525<00720032006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 19.95 -603.154 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 24.675 -603.154 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 95.55 -603.154 Td[<00280062002b001c00480032003400790058006b002d00620076004b004b0032006900600076003400700029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 199.5 -603.154 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 204.225 -603.154 Td[<00390052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 213.675 -603.154 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 223.125 -603.154 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -617.194 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -617.194 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -617.194 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 75.6 -617.194 Td[<0027>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -617.194 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -617.194 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 9.921 cm q 1 0 0 1 20 -597.195 cm q 0 G 0 g 0.3985 w q q 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q 1 0 0 1 20 -597.195 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -20 0 cm 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg q 1 0 0 1 20 -617.194 cm q 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg 0.3985 w q 2 J 24.99992 39.9999 m 24.99992 14.99995 l 0.0 14.99995 l 0.0 0.0 l 11.99995 0.0 l 11.99995 9.99995 l 4.99997 9.99995 l 4.99997 4.99997 l 6.99997 4.99997 l 6.99997 7.99995 l 9.99995 7.99995 l 9.99995 1.99998 l 1.99998 1.99998 l 1.99998 12.99995 l 26.99992 12.99995 l 26.99992 37.9999 l 37.9999 37.9999 l 37.9999 29.99991 l 31.99991 29.99991 l 31.99991 32.9999 l 34.99991 32.9999 l 34.99991 34.99991 l 29.99991 34.99991 l 29.99991 27.99992 l 39.9999 27.99992 l 39.9999 39.9999 l 24.99992 39.9999 l 2.99998 36.9999 m 2.99998 17.99994 l 21.99992 17.99994 l 21.99992 36.9999 l 2.99998 36.9999 l 4.99997 34.99991 m 19.99994 34.99991 l 19.99994 19.99994 l 4.99997 19.99994 l 4.99997 34.99991 l B Q n Q Q Q 1 G 1 g 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q 1 0 0 1 20 -597.195 cm Q Q Q Q 0 G 0 g Q q 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 20 -597.195 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 73.399 0 cm 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg q 1 0 0 1 59.999 -617.194 cm q 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg 0.3985 w q 2 J -24.99992 39.9999 m -24.99992 14.99995 l 0.0 14.99995 l 0.0 0.0 l -11.99995 0.0 l -11.99995 9.99995 l -4.99997 9.99995 l -4.99997 4.99997 l -6.99997 4.99997 l -6.99997 7.99995 l -9.99995 7.99995 l -9.99995 1.99998 l -1.99998 1.99998 l -1.99998 12.99995 l -26.99992 12.99995 l -26.99992 37.9999 l -37.9999 37.9999 l -37.9999 29.99991 l -31.99991 29.99991 l -31.99991 32.9999 l -34.99991 32.9999 l -34.99991 34.99991 l -29.99991 34.99991 l -29.99991 27.99992 l -39.9999 27.99992 l -39.9999 39.9999 l -24.99992 39.9999 l -2.99998 36.9999 m -2.99998 17.99994 l -21.99992 17.99994 l -21.99992 36.9999 l -2.99998 36.9999 l -4.99997 34.99991 m -19.99994 34.99991 l -19.99994 19.99994 l -4.99997 19.99994 l -4.99997 34.99991 l B Q n Q Q Q 1 G 1 g 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q 1 0 0 1 20 -597.195 cm Q Q Q Q 0 G 0 g Q q 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 20 -597.195 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.398 14 cm 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg q 1 0 0 1 20 -603.194 cm q 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg 0.3985 w q 2 J 4.99997 4.99997 m 7.99995 4.99997 l 7.99995 1.99998 l 1.99998 1.99998 l 1.99998 9.99995 l 20.99992 9.99995 l 20.99992 1.99998 l 14.99995 1.99998 l 14.99995 4.99997 l 17.99994 4.99997 l 17.99994 6.99997 l 12.99995 6.99997 l 12.99995 0.0 l 22.99994 0.0 l 22.99994 11.99995 l 0.0 11.99995 l 0.0 0.0 l 9.99995 0.0 l 9.99995 6.99997 l 4.99997 6.99997 l 4.99997 4.99997 l B Q n Q Q Q 1 G 1 g 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q 1 0 0 1 20 -597.195 cm Q Q Q Q 0 G 0 g Q q 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 20 -597.195 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 48.001 14 cm 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg q 1 0 0 1 42.999 -603.194 cm q 0.94902 0.7451 0.2706 RG 0.94902 0.7451 0.2706 rg 0.3985 w q 2 J -4.99997 4.99997 m -7.99995 4.99997 l -7.99995 1.99998 l -1.99998 1.99998 l -1.99998 9.99995 l -20.99992 9.99995 l -20.99992 1.99998 l -14.99995 1.99998 l -14.99995 4.99997 l -17.99994 4.99997 l -17.99994 6.99997 l -12.99995 6.99997 l -12.99995 0.0 l -22.99994 0.0 l -22.99994 11.99995 l 0.0 11.99995 l 0.0 0.0 l -9.99995 0.0 l -9.99995 6.99997 l -4.99997 6.99997 l -4.99997 4.99997 l B Q n Q Q Q 1 G 1 g 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q 1 0 0 1 20 -597.195 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -617.194 cm Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+40 0 obj
+<</Length 118720>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.083 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0015>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g q 1 0 0 1 0 -656.089 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 666.24501 l 0.0 668.59335 1.90364 670.49701 4.25198 670.49701 c 463.75406 670.49701 l 466.1024 670.49701 468.00604 668.59335 468.00604 666.24501 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 650.23288 l 466.58871 650.23288 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 651.6502 m 1.41731 666.24501 l 1.41731 667.81058 2.68643 669.07968 4.25198 669.07968 c 463.75406 669.07968 l 465.31961 669.07968 466.58871 667.81058 466.58871 666.24501 c 466.58871 651.6502 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -656.089 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 656.777 cm 1 1 1 RG 1 1 1 rg BT /F6 12 Tf 0 -656.089 Td[<097f1222119c06f1103a0aeb05a5057d0a92006207930d6107860b26099f0d2108390882121111a30d8005a510b50b2110b50106>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -656.089 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -656.089 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 14.133 cm 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -38.329 Td[<0024004d00320072002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 33.075 -38.329 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 37.8 -38.329 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 89.775 -38.329 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -52.369 Td[<00240062001c00700032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 37.8 -52.369 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 42.525 -52.369 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 94.5 -52.369 Td[<00270026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 103.95 -52.369 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 174.825 -52.369 Td[<00280062002b001c00480032003400790058006b002d002b00510048005100600034>]TJ /F9 9 Tf 85.05 0 Td[<0fe50a780c5d>]TJ /F5 9 Tf 27 0 Td[<0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 291.6 -52.369 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 296.325 -52.369 Td[<00390064>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 305.775 -52.369 Td[<00270027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -66.409 Td[<00240069004200460078006200320069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 37.8 -66.409 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 42.525 -66.409 Td[<00320070003200600076>-524<004d0051002f003200660058001c>-1<005400540032004d002f>-525<006200690076004800320034>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 160.65 -66.409 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 165.375 -66.409 Td[<0042004d004d00320060>-524<0062003200540034007900540069002d>]TJ /F9 9 Tf 70.875 0 Td[<0fe50a780c5d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 263.25 -66.409 Td[<00270027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -80.449 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -80.449 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -80.449 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 85.05 -80.449 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 89.775 -80.449 Td[<002800510070003200600048001c0076002d00600032004b0032004b002300320060>-524<00540042002b0069006d006000320029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -94.489 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -94.489 Td[<0028001c004d002b003f005100600034004d005100600069003f>-525<0072003200620069002d0062003f004200370069003400260055005200390058003800540069002d0040005200390058003800540069005600270029>]TJ ET 0 G 0 g BT /F5 9 Tf 236.25 -94.489 Td[<001c0069>-524<0055002b006d006000600032004d0069>-525<0054001c003b00320058004d005100600069003f>-525<00720032006200690056>]TJ -226.8 -14.04 Td[<0055004d00720056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 33.075 -108.529 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 37.8 -108.529 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 108.675 -108.529 Td[<00280062002b001c00480032003400790058006b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 160.65 -108.529 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 165.375 -108.529 Td[<006b0038>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 174.825 -108.529 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 184.275 -108.529 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -122.569 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -122.569 Td[<0028001c004d002b003f005100600034004d005100600069003f>-525<0032001c00620069002d0062003f0042003700690034002600550040005200390058003800540069002d0040005200390058003800540069005600270029>]TJ ET 0 G 0 g BT /F5 9 Tf 240.975 -122.569 Td[<001c0069>-524<0055002b006d006000600032004d0069>-525<0054001c003b00320058004d005100600069003f>-525<0032001c006200690056>]TJ -231.525 -14.04 Td[<0055004d00320056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 33.075 -136.609 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 37.8 -136.609 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 108.675 -136.609 Td[<00280062002b001c00480032003400790058006b002d00620076004b004b0032006900600076003400700029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 212.625 -136.609 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 217.35 -136.609 Td[<006b0038>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 226.8 -136.609 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 236.25 -136.609 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -150.649 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -150.649 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0072003200620069002d0062003f004200370069003400260055005200390058003800540069002d005200390058003800540069005600270029>]TJ ET 0 G 0 g BT /F5 9 Tf 231.525 -150.649 Td[<001c0069>-524<0055002b006d006000600032004d0069>-525<0054001c003b0032005800620051006d0069003f>-525<00720032006200690056>]TJ -222.075 -14.04 Td[<0055006200720056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 33.075 -164.689 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 37.8 -164.689 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 108.675 -164.689 Td[<00280062002b001c00480032003400790058006b002d00620076004b004b00320069006000760034003f0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 212.625 -164.689 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 217.35 -164.689 Td[<006b0038>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 226.8 -164.689 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 236.25 -164.689 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -178.729 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -178.729 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0032001c00620069002d0062003f0042003700690034002600550040005200390058003800540069002d005200390058003800540069005600270029>]TJ ET 0 G 0 g BT /F5 9 Tf 236.25 -178.729 Td[<001c0069>-524<0055002b006d006000600032004d0069>-525<0054001c003b0032005800620051006d0069003f>-525<0032001c006200690056>]TJ -226.8 -14.04 Td[<0055006200320056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 33.075 -192.769 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 37.8 -192.769 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 108.675 -192.769 Td[<00280062002b001c00480032003400790058006b002d00620076004b004b00320069006000760034002b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 212.625 -192.769 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 217.35 -192.769 Td[<006b0038>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 226.8 -192.769 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 236.25 -192.769 Td[<0063>]TJ ET 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -206.809 Td[<0057>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -220.849 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -220.849 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -220.849 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -220.849 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 61.425 -220.849 Td[<002800620069001c00600069>-524<002b003f001c0042004d002d004d0051002f0032>-525<002f004200620069>-1<001c004d002b003200340079005400690029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -234.889 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -234.889 Td[<0028001c004d002b003f005100600034004d005100600069003f>-525<0072003200620069002d0051004d>-525<002b003f001c0042004d0029>]TJ ET 0 G 0 g BT /F5 9 Tf 160.65 -234.889 Td[<001c0069>-524<0055004d00720058004d005100600069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 250.425 -234.889 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 255.15 -234.889 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 288.225 -234.889 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 292.95 -234.889 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 344.924 -234.889 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -234.889 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -248.929 Td[<00240037005100600032001c002b003f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 42.525 -248.929 Td[<00240042>]TJ ET 0 G 0 g BT /F5 9 Tf 56.7 -248.929 Td[<0042004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -248.929 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 75.6 -248.929 Td[<0052002d005800580058002d00520038>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 113.4 -248.929 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 122.85 -248.929 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -262.969 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -262.969 Td[<00280051004d>-524<002b003f001c0042004d0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 80.325 -262.969 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 85.05 -262.969 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 118.125 -262.969 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 122.85 -262.969 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 174.825 -262.969 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 184.275 -262.969 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 0 -277.009 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -291.049 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -291.049 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -291.049 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -291.049 Td[<0027>]TJ ET 0 G 0 g 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -305.089 Td[<0057>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -319.129 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -319.129 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -319.129 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -319.129 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 61.425 -319.129 Td[<002800620069001c00600069>-524<002b003f001c0042004d002d004d0051002f0032>-525<002f004200620069>-1<001c004d002b003200340079005400690029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -333.169 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -333.169 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0072003200620069002d0051004d>-525<002b003f001c0042004d0029>]TJ ET 0 G 0 g BT /F5 9 Tf 160.65 -333.169 Td[<001c0069>-524<005500620072005800620051006d0069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 250.425 -333.169 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 255.15 -333.169 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 288.225 -333.169 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 292.95 -333.169 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 344.924 -333.169 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -333.169 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -347.209 Td[<00240037005100600032001c002b003f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 42.525 -347.209 Td[<00240042>]TJ ET 0 G 0 g BT /F5 9 Tf 56.7 -347.209 Td[<0042004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -347.209 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 75.6 -347.209 Td[<0052002d005800580058002d0065>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 108.675 -347.209 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 118.125 -347.209 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 141.75 -347.209 Td[<00280051004d>-524<002b003f001c0042004d0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 189 -347.209 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 193.725 -347.209 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 226.8 -347.209 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 231.525 -347.209 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 283.5 -347.209 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 292.95 -347.209 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -361.249 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -361.249 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -361.249 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -361.249 Td[<0027>]TJ ET 0 G 0 g 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -375.289 Td[<0057>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -389.329 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -389.329 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -389.329 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -389.329 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 61.425 -389.329 Td[<002800620069001c00600069>-524<002b003f001c0042004d0034003b00510042004d003b>-525<0048003200370069>-1<002d004d0051002f0032>-525<002f004200620069001c004d002b003200340079005400690029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -403.369 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -403.369 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0032001c00620069002d0051004d>-525<002b003f001c0042004d0029>]TJ ET 0 G 0 g BT /F5 9 Tf 160.65 -403.369 Td[<001c0069>-524<005500620032005800620051006d0069003f>-525<00720032006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 250.425 -403.369 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 255.15 -403.369 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 288.225 -403.369 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 292.95 -403.369 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 344.924 -403.369 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 354.374 -403.369 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -417.409 Td[<00240037005100600032001c002b003f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 42.525 -417.409 Td[<00240042>]TJ ET 0 G 0 g BT /F5 9 Tf 56.7 -417.409 Td[<0042004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -417.409 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 75.6 -417.409 Td[<0052002d005800580058002d0065>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 108.675 -417.409 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 118.125 -417.409 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 141.75 -417.409 Td[<00280051004d>-524<002b003f001c0042004d0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 189 -417.409 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 193.725 -417.409 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 226.8 -417.409 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 231.525 -417.409 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 283.5 -417.409 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 292.95 -417.409 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -431.449 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -431.449 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -431.449 Td[<0062002b005100540032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -431.449 Td[<0027>]TJ ET 0 G 0 g 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -445.489 Td[<0057>]TJ ET 0 G 0 g 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -459.529 Td[<0057>]TJ /F9 9 Tf 9.45 0 Td[<053c11b005a507c5>]TJ /F11 9 Tf 40.725 0 Td[<002b003f001c0042004d0062>]TJ /F9 9 Tf 33.075 0 Td[<043108a00482077a096511c501110ee109ac05a4117c0e2d0a14011111b008a410a8>]TJ /F11 9 Tf 157.725 0 Td[<00240037005100600032001c002b003f>]TJ /F9 9 Tf 37.8 0 Td[<0062>]TJ ET 0 G 0 g 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -473.569 Td[<0057>]TJ /F9 9 Tf 9.45 0 Td[<1231082d0dd810420f2f0111>]TJ /F11 9 Tf 58.725 0 Td[<0055003900640056>]TJ /F9 9 Tf 23.625 0 Td[<04c90607>]TJ /F11 9 Tf 22.725 0 Td[<0052003800380058>]TJ /F9 9 Tf 23.625 0 Td[<0b2a0ab9>]TJ /F11 9 Tf 22.725 0 Td[<0062002b001c00480032>-524<0034>-525<00790058006b>]TJ /F9 9 Tf 56.7 0 Td[<05a507c5006c006c>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -487.609 Td[<00240037005100600032001c002b003f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 42.525 -487.609 Td[<00240042>]TJ ET 0 G 0 g BT /F5 9 Tf 56.7 -487.609 Td[<0042004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -487.609 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 75.6 -487.609 Td[<0079002d005800580058002d006b0052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 113.4 -487.609 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -501.649 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -501.649 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0072003200620069002d006000510069001c0069003200340040004e0079002d0062003f00420037006900340026005500300024004200200055006a005200230054002d007900560030005600270029>]TJ ET 0 G 0 g BT /F5 9 Tf 292.95 -501.649 Td[<001c0069>-524<0055004d0072005800620051006d0069003f>-525<00720032006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -515.689 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 23.625 -515.689 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -515.689 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 61.425 -515.689 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 113.4 -515.689 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 122.85 -515.689 Td[<0063>]TJ ET 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -529.729 Td[<0057>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -543.769 Td[<00240037005100600032001c002b003f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 42.525 -543.769 Td[<00240042>]TJ ET 0 G 0 g BT /F5 9 Tf 56.7 -543.769 Td[<0042004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -543.769 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 75.6 -543.769 Td[<0079002d005800580058002d006b0052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 113.4 -543.769 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -557.809 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 33.075 -557.809 Td[<0028001c004d002b003f00510060003400620051006d0069003f>-525<0032001c00620069002d006000510069001c006900320034004e0079002d0062003f004200370069003400260055003000240042002000550040006a005200230054002d007900560030005600270029>]TJ ET 0 G 0 g BT /F5 9 Tf 292.95 -557.809 Td[<001c0069>-524<0055004d0032005800620051006d0069003f>-525<0032001c006200690056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -571.849 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 23.625 -571.849 Td[<0024006d00620032002300510074>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -571.849 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 61.425 -571.849 Td[<0024003700510060006900760062003200700032004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 113.4 -571.849 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 122.85 -571.849 Td[<0063>]TJ ET 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -585.889 Td[<0057>]TJ ET 0 G 0 g 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -599.929 Td[<00570057>]TJ /F9 9 Tf 14.175 0 Td[<0ff806ec099f0daa108b06be0662111d>]TJ /F11 9 Tf 76.725 0 Td[<00240037001c004d002b00760037005100510069>]TJ /F9 9 Tf 51.975 0 Td[<03d401110dd80a1410421022099d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -613.969 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -613.969 Td[<002800760062003f0042003700690034006a006b00540069002d>]TJ /F9 9 Tf 66.15 0 Td[<0e5e0a73>]TJ /F5 9 Tf 18 0 Td[<0029>]TJ ET 0 G 0 g BT /F5 9 Tf 117.225 -613.969 Td[<001c0069>-524<0055002b006d006000600032004d0069>-525<0054001c003b0032005800620051006d0069003f0056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 230.625 -613.969 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 235.35 -613.969 Td[<00240054003b003700510060004d001c004b0032004d0069003f001c004d>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 306.225 -613.969 Td[<00280062002b001c0048003200340079005800520029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 358.199 -613.969 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 362.924 -613.969 Td[<00380052>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 372.374 -613.969 Td[<00270027>]TJ ET 0 G 0 g BT /F5 9 Tf 381.824 -613.969 Td[<0063>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -628.009 Td[<0024004d0051002f0032>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F5 9 Tf 23.625 -628.009 Td[<002800760062003f0042003700690034006a006b00540069002d0069003200740069003400230048001c002b00460029>]TJ ET 0 G 0 g BT /F5 9 Tf 141.75 -628.009 Td[<001c0069>-524<0055002b006d006000600032004d0069>-525<0054001c003b0032005800620051006d0069003f0056>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 255.15 -628.009 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 259.875 -628.009 Td[<00240048001c0060003b003200240069003f00320054001c003b0032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 326.025 -628.009 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 330.75 -628.009 Td[<0063>]TJ ET 0.25 0.5 0.5 RG 0.25 0.5 0.5 rg BT /F11 9 Tf 0 -642.049 Td[<0057>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -656.089 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -656.089 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -656.089 Td[<006900420046007800540042002b0069006d00600032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 75.6 -656.089 Td[<0027>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -656.089 cm Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+45 0 obj
+<</Length 160341>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.035 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0016>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F4 15 Tf 166.5 2.94 Td[<05bb063d04860673>-1000<0ed510220a190456>]TJ /F2 10.5 Tf -145.5 -29.894 Td[<105b0f2f0486087105a510f0097a0607006110f006da060708a5105b>]TJ /F1 10.5 Tf 149.625 0 Td[<001200430051>]TJ /F2 10.5 Tf 18.133 0 Td[<0eb9058610ed0062>]TJ ET BT /F10 15 Tf 192.825 -66.055 Td[<0012>]TJ /F4 15 Tf 22.35 0 Td[<089805c40698077c>]TJ ET BT /F10 12 Tf 0 -95.135 Td[<0012000f0012>]TJ /F4 12 Tf 26.688 0 Td[<08a405860f4c05a5089805c40698077c>]TJ /F2 10.5 Tf -26.688 -23.137 Td[<10b50d4c0f8f0f4c0f9810d00613108b05a509620f8f0f4c0f980a0611d50062105b0f2f08a50e5d0062>]TJ ET q 1 0 0 1 28.346 -161.403 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -186.915 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 38.26723 l 10.20457 38.26723 l 10.20457 33.16493 l 0.0 33.16493 l 0.0 20.40918 l 12.75572 20.40918 l 12.75572 30.61378 l 17.85803 30.61378 l 17.85803 15.30688 l 0.0 15.30688 l 0.0 0.0 l 2.55113 0.0 l 2.55113 12.75572 l 20.40918 12.75572 l 20.40918 30.61378 l 38.26723 30.61378 l 38.26723 48.47183 l 51.02298 48.47183 l 51.02298 51.02298 l 35.71608 51.02298 l 35.71608 33.16493 l 20.40918 33.16493 l 20.40918 38.26723 l 30.61378 38.26723 l 30.61378 51.02298 l 17.85803 51.02298 l 17.85803 40.81839 l 12.75572 40.81839 l 12.75572 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 10.20457 48.47183 l 10.20457 40.81839 l 2.55113 40.81839 l 2.55113 48.47183 l 20.40918 48.47183 m 28.06264 48.47183 l 28.06264 40.81839 l 20.40918 40.81839 l 20.40918 48.47183 l 12.75572 38.26723 m 17.85803 38.26723 l 17.85803 33.16493 l 12.75572 33.16493 l 12.75572 38.26723 l 2.55113 30.61378 m 10.20457 30.61378 l 10.20457 22.96033 l 2.55113 22.96033 l 2.55113 30.61378 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -161.403 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.954 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -161.403 Td[<0012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -161.403 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -161.403 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -161.403 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -161.403 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 142.323 -187.01 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.06377 m 0.0 15.43443 l 17.85803 15.43443 l 17.85803 30.61378 l 12.88329 30.61378 l 12.88329 20.40918 l 0.0 20.40918 l 0.0 33.2925 l 10.20457 33.2925 l 10.20457 38.26723 l 0.0 38.26723 l 0.0 51.15053 l 12.88329 51.15053 l 12.88329 40.94594 l 17.85803 40.94594 l 17.85803 51.15053 l 30.74135 51.15053 l 30.74135 38.26723 l 20.53674 38.26723 l 20.53674 33.2925 l 35.71608 33.2925 l 35.71608 51.15053 l 51.08676 51.15053 l 51.08676 51.02298 l 35.84364 51.02298 l 35.84364 33.16493 l 20.40918 33.16493 l 20.40918 38.39479 l 30.61378 38.39479 l 30.61378 51.02298 l 17.9856 51.02298 l 17.9856 40.81839 l 12.75572 40.81839 l 12.75572 51.02298 l 0.12753 51.02298 l 0.12753 38.39479 l 10.33214 38.39479 l 10.33214 33.16493 l 0.12753 33.16493 l 0.12753 20.53674 l 12.75572 20.53674 l 12.75572 30.74135 l 17.9856 30.74135 l 17.9856 15.30688 l 0.12753 15.30688 l 0.12753 0.06377 l 0.0 0.06377 l 2.55113 0.06377 m 2.55113 12.88329 l 20.40918 12.88329 l 20.40918 30.74135 l 38.26723 30.74135 l 38.26723 48.5994 l 51.08676 48.5994 l 51.08676 48.47183 l 38.39479 48.47183 l 38.39479 30.61378 l 20.53674 30.61378 l 20.53674 12.75572 l 2.67868 12.75572 l 2.67868 0.06377 l 2.55113 0.06377 l 2.55113 22.96033 m 2.55113 23.02411 l 2.55113 30.74135 l 10.33214 30.74135 l 10.33214 22.96033 l 2.55113 22.96033 l 2.67868 23.08789 m 10.20457 23.08789 l 10.20457 30.61378 l 2.67868 30.61378 l 2.67868 23.08789 l 12.75572 33.16493 m 12.75572 33.2287 l 12.75572 38.39479 l 17.9856 38.39479 l 17.9856 33.16493 l 12.75572 33.16493 l 12.88329 33.2925 m 17.85803 33.2925 l 17.85803 38.26723 l 12.88329 38.26723 l 12.88329 33.2925 l 2.55113 40.81839 m 2.55113 40.88216 l 2.55113 48.5994 l 10.33214 48.5994 l 10.33214 40.81839 l 2.55113 40.81839 l 20.40918 40.81839 m 20.40918 40.88216 l 20.40918 48.5994 l 28.19019 48.5994 l 28.19019 40.81839 l 20.40918 40.81839 l 2.67868 40.94594 m 10.20457 40.94594 l 10.20457 48.47183 l 2.67868 48.47183 l 2.67868 40.94594 l 20.53674 40.94594 m 28.06264 40.94594 l 28.06264 48.47183 l 20.53674 48.47183 l 20.53674 40.94594 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -161.403 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.95 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -161.403 Td[<0013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -161.403 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -161.403 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -161.403 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -161.403 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 256.299 -186.915 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 40.81839 l 7.65343 40.81839 l 7.65343 36.99165 l 0.0 36.99165 l 0.0 26.78705 l 10.20457 26.78705 l 10.20457 34.4405 l 14.03131 34.4405 l 14.03131 22.96033 l 0.0 22.96033 l 0.0 14.03131 l 5.10228 14.03131 l 5.10228 10.20457 l 0.0 10.20457 l 0.0 0.0 l 2.55113 0.0 l 2.55113 7.65343 l 7.65343 7.65343 l 7.65343 16.58246 l 2.55113 16.58246 l 2.55113 20.40918 l 16.58246 20.40918 l 16.58246 34.4405 l 30.61378 34.4405 l 30.61378 48.47183 l 34.4405 48.47183 l 34.4405 43.36954 l 43.36954 43.36954 l 43.36954 48.47183 l 51.02298 48.47183 l 51.02298 51.02298 l 40.81839 51.02298 l 40.81839 45.92068 l 36.99165 45.92068 l 36.99165 51.02298 l 28.06264 51.02298 l 28.06264 36.99165 l 16.58246 36.99165 l 16.58246 40.81839 l 24.23592 40.81839 l 24.23592 51.02298 l 14.03131 51.02298 l 14.03131 43.36954 l 10.20457 43.36954 l 10.20457 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 7.65343 48.47183 l 7.65343 43.36954 l 2.55113 43.36954 l 2.55113 48.47183 l 16.58246 48.47183 m 21.68477 48.47183 l 21.68477 43.36954 l 16.58246 43.36954 l 16.58246 48.47183 l 10.20457 40.81839 m 14.03131 40.81839 l 14.03131 36.99165 l 10.20457 36.99165 l 10.20457 40.81839 l 2.55113 34.4405 m 7.65343 34.4405 l 7.65343 29.3382 l 2.55113 29.3382 l 2.55113 34.4405 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -161.403 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.924 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -161.403 Td[<0014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -161.403 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -161.403 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -161.403 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -161.403 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 370.275 -187.01 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.15053 m 0.0 40.81839 l 7.65343 40.81839 l 7.65343 37.11922 l 0.0 37.11922 l 0.0 26.78705 l 10.33214 26.78705 l 10.33214 34.4405 l 14.03131 34.4405 l 14.03131 23.08789 l 0.0 23.08789 l 0.0 14.03131 l 5.10228 14.03131 l 5.10228 10.33214 l 0.0 10.33214 l 0.0 0.06377 l 0.12753 0.06377 l 0.12753 10.20457 l 5.22984 10.20457 l 5.22984 14.15886 l 0.12753 14.15886 l 0.12753 22.96033 l 14.15886 22.96033 l 14.15886 34.56805 l 10.20457 34.56805 l 10.20457 26.91461 l 0.12753 26.91461 l 0.12753 36.99165 l 7.78099 36.99165 l 7.78099 40.94594 l 0.12753 40.94594 l 0.12753 51.02298 l 10.20457 51.02298 l 10.20457 43.36954 l 14.15886 43.36954 l 14.15886 51.02298 l 24.23592 51.02298 l 24.23592 40.94594 l 16.58246 40.94594 l 16.58246 36.99165 l 28.19019 36.99165 l 28.19019 51.02298 l 36.99165 51.02298 l 36.99165 45.92068 l 40.94594 45.92068 l 40.94594 51.02298 l 51.08676 51.02298 l 51.08676 51.15053 l 40.81839 51.15053 l 40.81839 46.04823 l 37.11922 46.04823 l 37.11922 51.15053 l 28.06264 51.15053 l 28.06264 37.11922 l 16.71002 37.11922 l 16.71002 40.81839 l 24.36346 40.81839 l 24.36346 51.15053 l 14.03131 51.15053 l 14.03131 43.4971 l 10.33214 43.4971 l 10.33214 51.15053 l 0.0 51.15053 l 2.55113 48.5994 m 2.55113 43.4333 l 2.55113 43.36954 l 7.78099 43.36954 l 7.78099 48.5994 l 2.55113 48.5994 l 16.58246 48.5994 m 16.58246 43.4333 l 16.58246 43.36954 l 21.8123 43.36954 l 21.8123 48.5994 l 16.58246 48.5994 l 30.61378 48.5994 m 30.61378 34.56805 l 16.58246 34.56805 l 16.58246 20.53674 l 2.55113 20.53674 l 2.55113 16.58246 l 7.65343 16.58246 l 7.65343 7.78099 l 2.55113 7.78099 l 2.55113 0.06377 l 2.67868 0.06377 l 2.67868 7.65343 l 7.78099 7.65343 l 7.78099 16.71002 l 2.67868 16.71002 l 2.67868 20.40918 l 16.71002 20.40918 l 16.71002 34.4405 l 30.74135 34.4405 l 30.74135 48.47183 l 34.4405 48.47183 l 34.4405 43.36954 l 43.4971 43.36954 l 43.4971 48.47183 l 51.08676 48.47183 l 51.08676 48.5994 l 43.36954 48.5994 l 43.36954 43.4971 l 34.56805 43.4971 l 34.56805 48.5994 l 30.61378 48.5994 l 2.67868 48.47183 m 7.65343 48.47183 l 7.65343 43.4971 l 2.67868 43.4971 l 2.67868 48.47183 l 16.71002 48.47183 m 21.68477 48.47183 l 21.68477 43.4971 l 16.71002 43.4971 l 16.71002 48.47183 l 10.20457 40.94594 m 10.20457 37.05544 l 10.20457 36.99165 l 14.15886 36.99165 l 14.15886 40.94594 l 10.20457 40.94594 l 10.33214 40.81839 m 14.03131 40.81839 l 14.03131 37.11922 l 10.33214 37.11922 l 10.33214 40.81839 l 2.55113 34.56805 m 2.55113 29.402 l 2.55113 29.3382 l 7.78099 29.3382 l 7.78099 34.56805 l 2.55113 34.56805 l 2.67868 34.4405 m 7.65343 34.4405 l 7.65343 29.46576 l 2.67868 29.46576 l 2.67868 34.4405 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -161.403 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.954 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -161.403 Td[<0015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -161.403 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -161.403 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -161.403 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -161.403 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 28.346 -219.491 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -245.002 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 38.26723 l 5.10228 38.26723 l 5.10228 30.61378 l 0.0 30.61378 l 0.0 17.85803 l 7.65343 17.85803 l 7.65343 20.40918 l 2.55113 20.40918 l 2.55113 28.06264 l 12.75572 28.06264 l 12.75572 12.75572 l 0.0 12.75572 l 0.0 0.0 l 2.55113 0.0 l 2.55113 10.20457 l 15.30688 10.20457 l 15.30688 30.61378 l 7.65343 30.61378 l 7.65343 38.26723 l 12.75572 38.26723 l 12.75572 43.36954 l 20.40918 43.36954 l 20.40918 35.71608 l 40.81839 35.71608 l 40.81839 48.47183 l 51.02298 48.47183 l 51.02298 51.02298 l 38.26723 51.02298 l 38.26723 38.26723 l 22.96033 38.26723 l 22.96033 48.47183 l 30.61378 48.47183 l 30.61378 43.36954 l 33.16493 43.36954 l 33.16493 51.02298 l 20.40918 51.02298 l 20.40918 45.92068 l 12.75572 45.92068 l 12.75572 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 10.20457 48.47183 l 10.20457 40.81839 l 2.55113 40.81839 l 2.55113 48.47183 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -219.491 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -219.491 Td[<0016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -219.491 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -219.491 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -219.491 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -219.491 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 142.323 -245.098 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.15053 m 0.0 38.26723 l 5.10228 38.26723 l 5.10228 30.74135 l 0.0 30.74135 l 0.0 17.85803 l 7.78099 17.85803 l 7.78099 20.53674 l 2.67868 20.53674 l 2.67868 28.06264 l 12.75572 28.06264 l 12.75572 12.88329 l 0.0 12.88329 l 0.0 0.06377 l 0.12753 0.06377 l 0.12753 12.75572 l 12.88329 12.75572 l 12.88329 28.19019 l 2.55113 28.19019 l 2.55113 20.40918 l 7.65343 20.40918 l 7.65343 17.9856 l 0.12753 17.9856 l 0.12753 30.61378 l 5.22984 30.61378 l 5.22984 38.39479 l 0.12753 38.39479 l 0.12753 51.02298 l 12.75572 51.02298 l 12.75572 45.92068 l 20.53674 45.92068 l 20.53674 51.02298 l 33.16493 51.02298 l 33.16493 43.4971 l 30.74135 43.4971 l 30.74135 48.5994 l 22.96033 48.5994 l 22.96033 38.26723 l 38.39479 38.26723 l 38.39479 51.02298 l 51.08676 51.02298 l 51.08676 51.15053 l 38.26723 51.15053 l 38.26723 38.39479 l 23.08789 38.39479 l 23.08789 48.47183 l 30.61378 48.47183 l 30.61378 43.36954 l 33.2925 43.36954 l 33.2925 51.15053 l 20.40918 51.15053 l 20.40918 46.04823 l 12.88329 46.04823 l 12.88329 51.15053 l 0.0 51.15053 l 2.55113 48.5994 m 2.55113 40.88216 l 2.55113 40.81839 l 10.33214 40.81839 l 10.33214 48.5994 l 2.55113 48.5994 l 40.81839 48.5994 m 40.81839 35.84364 l 20.53674 35.84364 l 20.53674 43.4971 l 12.75572 43.4971 l 12.75572 38.39479 l 7.65343 38.39479 l 7.65343 30.61378 l 15.30688 30.61378 l 15.30688 10.33214 l 2.55113 10.33214 l 2.55113 0.06377 l 2.67868 0.06377 l 2.67868 10.20457 l 15.43443 10.20457 l 15.43443 30.74135 l 7.78099 30.74135 l 7.78099 38.26723 l 12.88329 38.26723 l 12.88329 43.36954 l 20.40918 43.36954 l 20.40918 35.71608 l 40.94594 35.71608 l 40.94594 48.47183 l 51.08676 48.47183 l 51.08676 48.5994 l 40.81839 48.5994 l 2.67868 48.47183 m 10.20457 48.47183 l 10.20457 40.94594 l 2.67868 40.94594 l 2.67868 48.47183 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -219.491 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -219.491 Td[<0017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -219.491 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -219.491 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -219.491 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -219.491 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 256.299 -245.002 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 35.71608 l 12.75572 35.71608 l 12.75572 25.51147 l 0.0 25.51147 l 0.0 2.55113 l 25.51147 2.55113 l 25.51147 0.0 l 28.06264 0.0 l 28.06264 5.10228 l 2.55113 5.10228 l 2.55113 22.96033 l 12.75572 22.96033 l 12.75572 10.20457 l 28.06264 10.20457 l 28.06264 22.96033 l 40.81839 22.96033 l 40.81839 38.26723 l 28.06264 38.26723 l 28.06264 48.47183 l 45.92068 48.47183 l 45.92068 22.96033 l 51.02298 22.96033 l 51.02298 25.51147 l 48.47183 25.51147 l 48.47183 51.02298 l 25.51147 51.02298 l 25.51147 38.26723 l 15.30688 38.26723 l 15.30688 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 12.75572 48.47183 l 12.75572 38.26723 l 2.55113 38.26723 l 2.55113 48.47183 l 15.30688 35.71608 m 25.51147 35.71608 l 25.51147 25.51147 l 15.30688 25.51147 l 15.30688 35.71608 l 28.06264 35.71608 m 38.26723 35.71608 l 38.26723 25.51147 l 28.06264 25.51147 l 28.06264 35.71608 l 15.30688 22.96033 m 25.51147 22.96033 l 25.51147 12.75572 l 15.30688 12.75572 l 15.30688 22.96033 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -219.491 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.913 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -219.491 Td[<0018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -219.491 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -219.491 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -219.491 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -219.491 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 370.275 -245.098 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.15053 m 0.0 35.71608 l 12.75572 35.71608 l 12.75572 25.63904 l 0.0 25.63904 l 0.0 2.55113 l 24.23592 2.55113 l 24.23592 0.06377 l 24.36346 0.06377 l 24.36346 2.67868 l 0.12753 2.67868 l 0.12753 25.51147 l 25.51147 25.51147 l 25.51147 23.08789 l 2.55113 23.08789 l 2.55113 5.10228 l 26.78705 5.10228 l 26.78705 0.06377 l 26.91461 0.06377 l 26.91461 5.22984 l 2.67868 5.22984 l 2.67868 22.96033 l 12.75572 22.96033 l 12.75572 10.20457 l 28.19019 10.20457 l 28.19019 22.96033 l 40.94594 22.96033 l 40.94594 38.39479 l 28.19019 38.39479 l 28.19019 48.47183 l 45.92068 48.47183 l 45.92068 24.23592 l 51.08676 24.23592 l 51.08676 24.36346 l 46.04823 24.36346 l 46.04823 48.5994 l 28.06264 48.5994 l 28.06264 38.39479 l 25.63904 38.39479 l 25.63904 51.02298 l 48.47183 51.02298 l 48.47183 26.78705 l 51.08676 26.78705 l 51.08676 26.91461 l 48.5994 26.91461 l 48.5994 51.15053 l 25.51147 51.15053 l 25.51147 38.39479 l 15.43443 38.39479 l 15.43443 51.15053 l 0.0 51.15053 l 0.12753 51.02298 m 15.30688 51.02298 l 15.30688 25.63904 l 12.88329 25.63904 l 12.88329 48.5994 l 2.55113 48.5994 l 2.55113 38.26723 l 12.75572 38.26723 l 12.75572 35.84364 l 0.12753 35.84364 l 0.12753 51.02298 l 2.67868 48.47183 m 12.75572 48.47183 l 12.75572 38.39479 l 2.67868 38.39479 l 2.67868 48.47183 l 15.43443 38.26723 m 40.81839 38.26723 l 40.81839 23.08789 l 28.19019 23.08789 l 28.19019 25.51147 l 38.39479 25.51147 l 38.39479 35.84364 l 15.43443 35.84364 l 15.43443 38.26723 l 15.43443 35.71608 m 25.51147 35.71608 l 25.51147 25.63904 l 15.43443 25.63904 l 15.43443 35.71608 l 25.63904 35.71608 m 28.06264 35.71608 l 28.06264 10.33214 l 12.88329 10.33214 l 12.88329 22.96033 l 15.30688 22.96033 l 15.30688 12.75572 l 25.63904 12.75572 l 25.63904 35.71608 l 28.19019 35.71608 m 38.26723 35.71608 l 38.26723 25.63904 l 28.19019 25.63904 l 28.19019 35.71608 l 15.43443 22.96033 m 25.51147 22.96033 l 25.51147 12.88329 l 15.43443 12.88329 l 15.43443 22.96033 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -219.491 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -219.491 Td[<0019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -219.491 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -219.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -219.491 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -219.491 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 12 Tf 0 -281.332 Td[<0012000f0013>]TJ /F4 12 Tf 26.688 0 Td[<08a40da00f4c05a5089805c40698077c>]TJ ET q 1 0 0 1 28.346 -319.622 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -345.133 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 33.16493 l 7.65343 33.16493 l 7.65343 28.06264 l 0.0 28.06264 l 0.0 0.0 l 2.55113 0.0 l 2.55113 25.51147 l 7.65343 25.51147 l 7.65343 0.0 l 10.20457 0.0 l 10.20457 25.51147 l 17.85803 25.51147 l 17.85803 33.16493 l 25.51147 33.16493 l 25.51147 40.81839 l 51.02298 40.81839 l 51.02298 43.36954 l 25.51147 43.36954 l 25.51147 48.47183 l 51.02298 48.47183 l 51.02298 51.02298 l 22.96033 51.02298 l 22.96033 43.36954 l 17.85803 43.36954 l 17.85803 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 15.30688 48.47183 l 15.30688 43.36954 l 7.65343 43.36954 l 7.65343 35.71608 l 2.55113 35.71608 l 2.55113 48.47183 l 10.20457 40.81839 m 15.30688 40.81839 l 15.30688 35.71608 l 10.20457 35.71608 l 10.20457 40.81839 l 17.85803 40.81839 m 22.96033 40.81839 l 22.96033 35.71608 l 17.85803 35.71608 l 17.85803 40.81839 l 10.20457 33.16493 m 15.30688 33.16493 l 15.30688 28.06264 l 10.20457 28.06264 l 10.20457 33.16493 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -319.622 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 20.75 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -319.622 Td[<001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -319.622 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -319.622 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -319.622 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -319.622 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 142.323 -345.229 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.15053 m 0.0 33.16493 l 7.65343 33.16493 l 7.65343 28.19019 l 0.0 28.19019 l 0.0 0.06377 l 0.12753 0.06377 l 0.12753 28.06264 l 7.65343 28.06264 l 7.65343 25.63904 l 2.55113 25.63904 l 2.55113 0.06377 l 2.67868 0.06377 l 2.67868 25.51147 l 7.65343 25.51147 l 7.65343 0.06377 l 7.78099 0.06377 l 7.78099 33.16493 l 10.20457 33.16493 l 10.20457 0.06377 l 10.33214 0.06377 l 10.33214 25.51147 l 17.9856 25.51147 l 17.9856 33.16493 l 25.63904 33.16493 l 25.63904 40.81839 l 51.08676 40.81839 l 51.08676 40.94594 l 25.63904 40.94594 l 25.63904 43.36954 l 51.08676 43.36954 l 51.08676 43.4971 l 25.63904 43.4971 l 25.63904 48.47183 l 51.08676 48.47183 l 51.08676 48.5994 l 25.51147 48.5994 l 25.51147 33.2925 l 17.9856 33.2925 l 17.9856 35.71608 l 23.08789 35.71608 l 23.08789 51.02298 l 51.08676 51.02298 l 51.08676 51.15053 l 22.96033 51.15053 l 22.96033 43.4971 l 17.9856 43.4971 l 17.9856 51.15053 l 0.0 51.15053 l 0.12753 51.02298 m 17.85803 51.02298 l 17.85803 43.4971 l 15.43443 43.4971 l 15.43443 48.5994 l 2.55113 48.5994 l 2.55113 35.71608 l 15.30688 35.71608 l 15.30688 33.2925 l 0.12753 33.2925 l 0.12753 51.02298 l 2.67868 48.47183 m 15.30688 48.47183 l 15.30688 43.4971 l 7.65343 43.4971 l 7.65343 35.84364 l 2.67868 35.84364 l 2.67868 48.47183 l 7.78099 43.36954 m 22.96033 43.36954 l 22.96033 40.94594 l 10.20457 40.94594 l 10.20457 35.84364 l 7.78099 35.84364 l 7.78099 43.36954 l 10.33214 40.81839 m 15.30688 40.81839 l 15.30688 35.84364 l 10.33214 35.84364 l 10.33214 40.81839 l 15.43443 40.81839 m 17.85803 40.81839 l 17.85803 25.63904 l 10.33214 25.63904 l 10.33214 28.06264 l 15.43443 28.06264 l 15.43443 40.81839 l 17.9856 40.81839 m 22.96033 40.81839 l 22.96033 35.84364 l 17.9856 35.84364 l 17.9856 40.81839 l 10.33214 33.16493 m 15.30688 33.16493 l 15.30688 28.19019 l 10.33214 28.19019 l 10.33214 33.16493 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -319.622 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -319.622 Td[<00120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -319.622 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -319.622 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -319.622 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -319.622 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 256.299 -345.133 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 7.65343 51.02298 m 7.65343 43.36954 l 0.0 43.36954 l 0.0 33.16493 l 7.65343 33.16493 l 7.65343 28.06264 l 0.0 28.06264 l 0.0 0.0 l 2.55113 0.0 l 2.55113 25.51147 l 7.65343 25.51147 l 7.65343 0.0 l 10.20457 0.0 l 10.20457 25.51147 l 17.85803 25.51147 l 17.85803 33.16493 l 25.51147 33.16493 l 25.51147 40.81839 l 51.02298 40.81839 l 51.02298 43.36954 l 25.51147 43.36954 l 25.51147 48.47183 l 51.02298 48.47183 l 51.02298 51.02298 l 22.96033 51.02298 l 22.96033 43.36954 l 17.85803 43.36954 l 17.85803 51.02298 l 7.65343 51.02298 l 10.20457 48.47183 m 15.30688 48.47183 l 15.30688 43.36954 l 10.20457 43.36954 l 10.20457 48.47183 l 2.55113 40.81839 m 7.65343 40.81839 l 7.65343 35.71608 l 2.55113 35.71608 l 2.55113 40.81839 l 10.20457 40.81839 m 15.30688 40.81839 l 15.30688 35.71608 l 10.20457 35.71608 l 10.20457 40.81839 l 17.85803 40.81839 m 22.96033 40.81839 l 22.96033 35.71608 l 17.85803 35.71608 l 17.85803 40.81839 l 10.20457 33.16493 m 15.30688 33.16493 l 15.30688 28.06264 l 10.20457 28.06264 l 10.20457 33.16493 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -319.622 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.954 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -319.622 Td[<00120012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -319.622 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -319.622 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -319.622 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -319.622 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 370.275 -345.229 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 7.65343 51.15053 m 7.65343 43.4971 l 0.0 43.4971 l 0.0 33.16493 l 7.65343 33.16493 l 7.65343 28.19019 l 0.0 28.19019 l 0.0 0.06377 l 0.12753 0.06377 l 0.12753 28.06264 l 7.65343 28.06264 l 7.65343 25.63904 l 2.55113 25.63904 l 2.55113 0.06377 l 2.67868 0.06377 l 2.67868 25.51147 l 7.65343 25.51147 l 7.65343 0.06377 l 7.78099 0.06377 l 7.78099 33.16493 l 10.20457 33.16493 l 10.20457 0.06377 l 10.33214 0.06377 l 10.33214 25.51147 l 17.9856 25.51147 l 17.9856 33.16493 l 25.63904 33.16493 l 25.63904 40.81839 l 51.08676 40.81839 l 51.08676 40.94594 l 25.63904 40.94594 l 25.63904 43.36954 l 51.08676 43.36954 l 51.08676 43.4971 l 25.63904 43.4971 l 25.63904 48.47183 l 51.08676 48.47183 l 51.08676 48.5994 l 25.51147 48.5994 l 25.51147 33.2925 l 17.9856 33.2925 l 17.9856 35.71608 l 23.08789 35.71608 l 23.08789 51.02298 l 51.08676 51.02298 l 51.08676 51.15053 l 22.96033 51.15053 l 22.96033 43.4971 l 17.9856 43.4971 l 17.9856 51.15053 l 7.65343 51.15053 l 7.78099 51.02298 m 17.85803 51.02298 l 17.85803 43.4971 l 15.43443 43.4971 l 15.43443 48.5994 l 10.20457 48.5994 l 10.20457 35.84364 l 7.78099 35.84364 l 7.78099 51.02298 l 10.33214 48.47183 m 15.30688 48.47183 l 15.30688 43.4971 l 10.33214 43.4971 l 10.33214 48.47183 l 0.12753 43.36954 m 7.65343 43.36954 l 7.65343 40.94594 l 2.55113 40.94594 l 2.55113 35.71608 l 15.30688 35.71608 l 15.30688 33.2925 l 0.12753 33.2925 l 0.12753 43.36954 l 10.33214 43.36954 m 22.96033 43.36954 l 22.96033 40.94594 l 10.33214 40.94594 l 10.33214 43.36954 l 2.67868 40.81839 m 7.65343 40.81839 l 7.65343 35.84364 l 2.67868 35.84364 l 2.67868 40.81839 l 10.33214 40.81839 m 15.30688 40.81839 l 15.30688 35.84364 l 10.33214 35.84364 l 10.33214 40.81839 l 15.43443 40.81839 m 17.85803 40.81839 l 17.85803 25.63904 l 10.33214 25.63904 l 10.33214 28.06264 l 15.43443 28.06264 l 15.43443 40.81839 l 17.9856 40.81839 m 22.96033 40.81839 l 22.96033 35.84364 l 17.9856 35.84364 l 17.9856 40.81839 l 10.33214 33.16493 m 15.30688 33.16493 l 15.30688 28.19019 l 10.33214 28.19019 l 10.33214 33.16493 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -319.622 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.95 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -319.622 Td[<00120013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -319.622 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -319.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -319.622 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -319.622 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 28.346 -377.71 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -377.71 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -403.221 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 22.96033 l 17.85803 22.96033 l 17.85803 17.85803 l 0.0 17.85803 l 0.0 0.0 l 2.55113 0.0 l 2.55113 15.30688 l 17.85803 15.30688 l 17.85803 10.20457 l 7.65343 10.20457 l 7.65343 0.0 l 10.20457 0.0 l 10.20457 7.65343 l 20.40918 7.65343 l 20.40918 15.30688 l 28.06264 15.30688 l 28.06264 22.96033 l 35.71608 22.96033 l 35.71608 30.61378 l 43.36954 30.61378 l 43.36954 40.81839 l 51.02298 40.81839 l 51.02298 43.36954 l 40.81839 43.36954 l 40.81839 33.16493 l 35.71608 33.16493 l 35.71608 48.47183 l 51.02298 48.47183 l 51.02298 51.02298 l 33.16493 51.02298 l 33.16493 33.16493 l 28.06264 33.16493 l 28.06264 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 25.51147 48.47183 l 25.51147 33.16493 l 20.40918 33.16493 l 20.40918 43.36954 l 7.65343 43.36954 l 7.65343 30.61378 l 17.85803 30.61378 l 17.85803 25.51147 l 2.55113 25.51147 l 2.55113 48.47183 l 10.20457 40.81839 m 17.85803 40.81839 l 17.85803 33.16493 l 10.20457 33.16493 l 10.20457 40.81839 l 20.40918 30.61378 m 25.51147 30.61378 l 25.51147 25.51147 l 20.40918 25.51147 l 20.40918 30.61378 l 28.06264 30.61378 m 33.16493 30.61378 l 33.16493 25.51147 l 28.06264 25.51147 l 28.06264 30.61378 l 20.40918 22.96033 m 25.51147 22.96033 l 25.51147 17.85803 l 20.40918 17.85803 l 20.40918 22.96033 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -377.71 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -377.71 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.924 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -377.71 Td[<00120014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -377.71 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -377.71 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -377.71 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -377.71 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -377.71 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -377.71 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 142.323 -403.317 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 0.0 51.15053 m 0.0 22.96033 l 17.85803 22.96033 l 17.85803 17.9856 l 0.0 17.9856 l 0.0 0.06377 l 0.12753 0.06377 l 0.12753 17.85803 l 25.63904 17.85803 l 25.63904 22.96033 l 28.06264 22.96033 l 28.06264 15.43443 l 2.55113 15.43443 l 2.55113 0.06377 l 2.67868 0.06377 l 2.67868 15.30688 l 17.85803 15.30688 l 17.85803 10.33214 l 7.65343 10.33214 l 7.65343 0.06377 l 7.78099 0.06377 l 7.78099 10.20457 l 17.9856 10.20457 l 17.9856 15.30688 l 20.40918 15.30688 l 20.40918 7.78099 l 10.20457 7.78099 l 10.20457 0.06377 l 10.33214 0.06377 l 10.33214 7.65343 l 20.53674 7.65343 l 20.53674 15.30688 l 28.19019 15.30688 l 28.19019 22.96033 l 35.84364 22.96033 l 35.84364 30.61378 l 43.4971 30.61378 l 43.4971 40.81839 l 51.08676 40.81839 l 51.08676 40.94594 l 43.36954 40.94594 l 43.36954 30.74135 l 28.19019 30.74135 l 28.19019 33.16493 l 40.94594 33.16493 l 40.94594 43.36954 l 51.08676 43.36954 l 51.08676 43.4971 l 40.81839 43.4971 l 40.81839 33.2925 l 35.84364 33.2925 l 35.84364 48.47183 l 51.08676 48.47183 l 51.08676 48.5994 l 35.71608 48.5994 l 35.71608 33.2925 l 33.2925 33.2925 l 33.2925 51.02298 l 51.08676 51.02298 l 51.08676 51.15053 l 33.16493 51.15053 l 33.16493 33.2925 l 28.19019 33.2925 l 28.19019 51.15053 l 0.0 51.15053 l 0.12753 51.02298 m 28.06264 51.02298 l 28.06264 25.63904 l 25.63904 25.63904 l 25.63904 48.5994 l 2.55113 48.5994 l 2.55113 25.51147 l 17.85803 25.51147 l 17.85803 23.08789 l 0.12753 23.08789 l 0.12753 51.02298 l 2.67868 48.47183 m 25.51147 48.47183 l 25.51147 33.2925 l 20.53674 33.2925 l 20.53674 43.4971 l 7.65343 43.4971 l 7.65343 30.61378 l 17.85803 30.61378 l 17.85803 25.63904 l 2.67868 25.63904 l 2.67868 48.47183 l 7.78099 43.36954 m 20.40918 43.36954 l 20.40918 33.2925 l 17.9856 33.2925 l 17.9856 40.94594 l 10.20457 40.94594 l 10.20457 33.16493 l 25.51147 33.16493 l 25.51147 30.74135 l 7.78099 30.74135 l 7.78099 43.36954 l 10.33214 40.81839 m 17.85803 40.81839 l 17.85803 33.2925 l 10.33214 33.2925 l 10.33214 40.81839 l 17.9856 30.61378 m 20.40918 30.61378 l 20.40918 17.9856 l 17.9856 17.9856 l 17.9856 30.61378 l 20.53674 30.61378 m 25.51147 30.61378 l 25.51147 25.63904 l 20.53674 25.63904 l 20.53674 30.61378 l 28.19019 30.61378 m 33.16493 30.61378 l 33.16493 25.63904 l 28.19019 25.63904 l 28.19019 30.61378 l 33.2925 30.61378 m 35.71608 30.61378 l 35.71608 23.08789 l 20.53674 23.08789 l 20.53674 25.51147 l 33.2925 25.51147 l 33.2925 30.61378 l 20.53674 22.96033 m 25.51147 22.96033 l 25.51147 17.9856 l 20.53674 17.9856 l 20.53674 22.96033 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -377.71 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -377.71 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.954 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -377.71 Td[<00120015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -377.71 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -377.71 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -377.71 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -377.71 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 12 Tf 0 -439.55 Td[<0012000f0014>]TJ /F4 12 Tf 26.688 0 Td[<08650586089805c40698077c>]TJ /F2 10.5 Tf -26.688 -23.137 Td[<07840c030df0089805c40698077c0ba507860111111d10420e48061308980f4c0d080d5010a80c030df0089805c40698077c01110a3610420e48061308980f4c0d080d5010a808650586089805c40698077c0062>]TJ ET q 1 0 0 1 28.346 -505.924 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -531.435 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 0.0 51.02298 l 51.02298 51.02298 l 51.02298 48.47183 l 2.55113 48.47183 l 2.55113 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -505.924 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -505.924 Td[<00120016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -505.924 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -505.924 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -505.924 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -505.924 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 142.323 -531.531 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.06377 m 0.0 51.15053 l 51.08676 51.15053 l 51.08676 51.02298 l 0.12753 51.02298 l 0.12753 0.06377 l 0.0 0.06377 l 2.55113 0.06377 m 2.55113 48.5994 l 51.08676 48.5994 l 51.08676 48.47183 l 2.67868 48.47183 l 2.67868 0.06377 l 2.55113 0.06377 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -505.924 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -505.924 Td[<00120017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -505.924 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -505.924 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -505.924 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -505.924 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 256.299 -531.435 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 0.0 l 2.55113 0.0 l 2.55113 48.47183 l 51.02298 48.47183 l 51.02298 51.02298 l 0.0 51.02298 l 7.65343 43.36954 m 7.65343 0.0 l 10.20457 0.0 l 10.20457 40.81839 l 51.02298 40.81839 l 51.02298 43.36954 l 7.65343 43.36954 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -505.924 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -505.924 Td[<00120018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -505.924 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -505.924 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -505.924 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -505.924 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 370.275 -531.531 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.15053 m 0.0 0.06377 l 0.12753 0.06377 l 0.12753 51.02298 l 51.08676 51.02298 l 51.08676 51.15053 l 0.0 51.15053 l 2.55113 48.5994 m 2.55113 0.06377 l 2.67868 0.06377 l 2.67868 48.47183 l 51.08676 48.47183 l 51.08676 48.5994 l 2.55113 48.5994 l 7.65343 43.4971 m 7.65343 0.06377 l 7.78099 0.06377 l 7.78099 43.36954 l 51.08676 43.36954 l 51.08676 43.4971 l 7.65343 43.4971 l 10.20457 40.94594 m 10.20457 0.06377 l 10.33214 0.06377 l 10.33214 40.81839 l 51.08676 40.81839 l 51.08676 40.94594 l 10.20457 40.94594 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -505.924 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -505.924 Td[<00120019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -505.924 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -505.924 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -505.924 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -505.924 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 12 Tf 0 -567.764 Td[<0012000f0015>]TJ /F4 12 Tf 26.688 0 Td[<07ed0ed505a5089805c40698077c>]TJ /F2 10.5 Tf -26.688 -23.137 Td[<078409f50fc305a507ed0ed50ba507860062>]TJ ET q 1 0 0 1 28.346 -633.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -659.365 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 20.40918 l 30.61378 20.40918 l 30.61378 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 28.06264 48.47183 l 28.06264 22.96033 l 2.55113 22.96033 l 2.55113 48.47183 l 33.80272 40.81839 m 33.80272 17.22025 l 10.20457 17.22025 l 10.20457 1.91335 l 19.1336 1.91335 l 19.1336 8.29123 l 22.96033 8.29123 l 22.96033 0.0 l 25.51147 0.0 l 25.51147 10.84236 l 16.58246 10.84236 l 16.58246 4.4645 l 12.75572 4.4645 l 12.75572 14.6691 l 36.35387 14.6691 l 36.35387 38.26723 l 46.55847 38.26723 l 46.55847 34.4405 l 40.1806 34.4405 l 40.1806 25.51147 l 51.02298 25.51147 l 51.02298 28.06264 l 42.73174 28.06264 l 42.73174 31.88936 l 49.10962 31.88936 l 49.10962 40.81839 l 33.80272 40.81839 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -633.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -633.854 Td[<0012001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -633.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -633.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -633.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -633.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 142.323 -659.461 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.15053 m 0.0 20.47296 l 0.0 20.40918 l 30.74135 20.40918 l 30.74135 51.15053 l 0.0 51.15053 l 0.12753 51.02298 m 30.61378 51.02298 l 30.61378 20.53674 l 0.12753 20.53674 l 0.12753 51.02298 l 2.55113 48.5994 m 2.55113 23.02411 l 2.55113 22.96033 l 28.19019 22.96033 l 28.19019 48.5994 l 2.55113 48.5994 l 2.67868 48.47183 m 28.06264 48.47183 l 28.06264 23.08789 l 2.67868 23.08789 l 2.67868 48.47183 l 33.80272 40.94594 m 33.80272 17.34781 l 10.20457 17.34781 l 10.20457 1.91335 l 19.26115 1.91335 l 19.26115 8.29123 l 22.96033 8.29123 l 22.96033 0.06377 l 23.08789 0.06377 l 23.08789 8.41878 l 19.1336 8.41878 l 19.1336 2.04091 l 10.33214 2.04091 l 10.33214 17.22025 l 33.93028 17.22025 l 33.93028 40.81839 l 49.10962 40.81839 l 49.10962 32.0169 l 42.73174 32.0169 l 42.73174 28.06264 l 51.08676 28.06264 l 51.08676 28.19019 l 42.8593 28.19019 l 42.8593 31.88936 l 49.23718 31.88936 l 49.23718 40.94594 l 33.80272 40.94594 l 36.35387 38.39479 m 36.35387 14.79666 l 12.75572 14.79666 l 12.75572 4.4645 l 16.71002 4.4645 l 16.71002 10.84236 l 25.51147 10.84236 l 25.51147 0.06377 l 25.63904 0.06377 l 25.63904 10.96992 l 16.58246 10.96992 l 16.58246 4.59206 l 12.88329 4.59206 l 12.88329 14.6691 l 36.48143 14.6691 l 36.48143 38.26723 l 46.55847 38.26723 l 46.55847 34.56805 l 40.1806 34.56805 l 40.1806 25.51147 l 51.08676 25.51147 l 51.08676 25.63904 l 40.30815 25.63904 l 40.30815 34.4405 l 46.68604 34.4405 l 46.68604 38.39479 l 36.35387 38.39479 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -633.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -633.854 Td[<00130011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -633.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -633.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -633.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -633.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.512 0 cm 0 G 0 g q 1 0 0 1 256.299 -659.366 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.0239 m 0.0 25.51193 l 25.51193 25.51193 l 25.51193 51.0239 l 0.0 51.0239 l 1.96245 49.06145 m 23.54948 49.06145 l 23.54948 27.4744 l 1.96245 27.4744 l 1.96245 49.06145 l 28.45563 47.09897 m 28.45563 22.56825 l 3.9249 22.56825 l 3.9249 0.9812 l 20.60579 0.9812 l 20.60579 12.75595 l 13.73718 12.75595 l 13.73718 7.84982 l 10.7935 7.84982 l 10.7935 15.69965 l 23.54948 15.69965 l 23.54948 0.0 l 25.51193 0.0 l 25.51193 17.66211 l 8.83105 17.66211 l 8.83105 5.88736 l 15.69965 5.88736 l 15.69965 10.7935 l 18.64334 10.7935 l 18.64334 2.94368 l 5.88736 2.94368 l 5.88736 20.60579 l 30.41809 20.60579 l 30.41809 45.13652 l 48.08022 45.13652 l 48.08022 32.38054 l 40.23038 32.38054 l 40.23038 35.32423 l 45.13652 35.32423 l 45.13652 42.19284 l 33.36177 42.19284 l 33.36177 25.51193 l 51.0239 25.51193 l 51.0239 27.4744 l 35.32423 27.4744 l 35.32423 40.23038 l 43.17407 40.23038 l 43.17407 37.2867 l 38.26791 37.2867 l 38.26791 30.41809 l 50.04266 30.41809 l 50.04266 47.09897 l 28.45563 47.09897 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -633.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.95 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -633.854 Td[<00130012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -633.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -633.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -633.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -633.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.536 0 cm 0 G 0 g q 1 0 0 1 370.275 -659.439 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.12201 m 0.0 25.51193 l 25.56099 25.51193 l 25.61006 25.51193 l 25.61006 51.12201 l 0.0 51.12201 l 0.0981 51.0239 m 25.51193 51.0239 l 25.51193 25.61006 l 0.0981 25.61006 l 0.0981 51.0239 l 1.96245 49.15956 m 1.96245 27.4744 l 23.59854 27.4744 l 23.64761 27.4744 l 23.64761 49.15956 l 1.96245 49.15956 l 2.06056 49.06145 m 23.54948 49.06145 l 23.54948 27.57253 l 2.06056 27.57253 l 2.06056 49.06145 l 28.45563 47.1971 m 28.45563 22.66637 l 3.9249 22.66637 l 3.9249 0.9812 l 20.70392 0.9812 l 20.70392 12.85408 l 13.73718 12.85408 l 13.73718 7.94794 l 10.89163 7.94794 l 10.89163 15.69965 l 23.54948 15.69965 l 23.54948 0.04904 l 23.64761 0.04904 l 23.64761 15.79776 l 10.7935 15.79776 l 10.7935 7.84982 l 13.83531 7.84982 l 13.83531 12.75595 l 20.60579 12.75595 l 20.60579 1.07933 l 4.02303 1.07933 l 4.02303 22.56825 l 28.55374 22.56825 l 28.55374 47.09897 l 50.04266 47.09897 l 50.04266 30.5162 l 38.36604 30.5162 l 38.36604 37.2867 l 43.27219 37.2867 l 43.27219 40.3285 l 35.32423 40.3285 l 35.32423 27.4744 l 51.07295 27.4744 l 51.07295 27.57253 l 35.42235 27.57253 l 35.42235 40.23038 l 43.17407 40.23038 l 43.17407 37.38483 l 38.26791 37.38483 l 38.26791 30.41809 l 50.14078 30.41809 l 50.14078 47.1971 l 28.45563 47.1971 l 30.41809 45.23465 m 30.41809 20.70392 l 5.88736 20.70392 l 5.88736 2.94368 l 18.74146 2.94368 l 18.74146 10.89163 l 15.69965 10.89163 l 15.69965 5.98549 l 8.92917 5.98549 l 8.92917 17.66211 l 25.51193 17.66211 l 25.51193 0.04904 l 25.61006 0.04904 l 25.61006 17.76024 l 8.83105 17.76024 l 8.83105 5.88736 l 15.79776 5.88736 l 15.79776 10.7935 l 18.64334 10.7935 l 18.64334 3.0418 l 5.98549 3.0418 l 5.98549 20.60579 l 30.5162 20.60579 l 30.5162 45.13652 l 48.08022 45.13652 l 48.08022 32.47867 l 40.3285 32.47867 l 40.3285 35.32423 l 45.23465 35.32423 l 45.23465 42.29095 l 33.36177 42.29095 l 33.36177 25.51193 l 51.07295 25.51193 l 51.07295 25.61006 l 33.4599 25.61006 l 33.4599 42.19284 l 45.13652 42.19284 l 45.13652 35.42235 l 40.23038 35.42235 l 40.23038 32.38054 l 48.17833 32.38054 l 48.17833 45.23465 l 30.41809 45.23465 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -633.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.95 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -633.854 Td[<00130013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -633.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -633.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -633.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -633.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q Q
+
+endstream
+endobj
+48 0 obj
+<</Length 157792>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.035 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0017>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F2 10.5 Tf 0 4.437 Td[<078409d60cdb05a507ed0ed50ba507860062>]TJ ET q 1 0 0 1 28.346 -38.971 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -64.482 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 31.88936 51.02298 m 31.88936 19.1336 l 0.0 19.1336 l 0.0 0.0 l 15.30688 0.0 l 15.30688 12.75572 l 6.37785 12.75572 l 6.37785 6.37785 l 8.92902 6.37785 l 8.92902 10.20457 l 12.75572 10.20457 l 12.75572 2.55113 l 2.55113 2.55113 l 2.55113 16.58246 l 34.4405 16.58246 l 34.4405 48.47183 l 48.47183 48.47183 l 48.47183 38.26723 l 40.81839 38.26723 l 40.81839 42.09395 l 44.6451 42.09395 l 44.6451 44.6451 l 38.26723 44.6451 l 38.26723 35.71608 l 51.02298 35.71608 l 51.02298 51.02298 l 31.88936 51.02298 l 3.8267 47.19626 m 3.8267 22.96033 l 28.06264 22.96033 l 28.06264 47.19626 l 3.8267 47.19626 l 6.37785 44.6451 m 25.51147 44.6451 l 25.51147 25.51147 l 6.37785 25.51147 l 6.37785 44.6451 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -38.971 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.924 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -38.971 Td[<00130014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -38.971 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -38.971 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -38.971 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -38.971 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.575 0 cm 0 G 0 g q 1 0 0 1 142.323 -64.546 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 31.88936 51.15053 m 31.88936 19.26115 l 0.0 19.26115 l 0.0 0.0 l 15.43443 0.0 l 15.43443 12.88329 l 6.37785 12.88329 l 6.37785 6.37785 l 8.99278 6.37785 l 9.05656 6.37785 l 9.05656 10.20457 l 12.75572 10.20457 l 12.75572 2.67868 l 2.67868 2.67868 l 2.67868 16.58246 l 34.56805 16.58246 l 34.56805 48.47183 l 48.47183 48.47183 l 48.47183 38.39479 l 40.94594 38.39479 l 40.94594 42.09395 l 44.77266 42.09395 l 44.77266 44.77266 l 38.26723 44.77266 l 38.26723 35.71608 l 51.15053 35.71608 l 51.15053 51.15053 l 31.88936 51.15053 l 32.0169 51.02298 m 51.02298 51.02298 l 51.02298 35.84364 l 38.39479 35.84364 l 38.39479 44.6451 l 44.6451 44.6451 l 44.6451 42.22151 l 40.81839 42.22151 l 40.81839 38.26723 l 48.5994 38.26723 l 48.5994 48.5994 l 34.4405 48.5994 l 34.4405 16.71002 l 2.55113 16.71002 l 2.55113 2.55113 l 12.88329 2.55113 l 12.88329 10.33214 l 8.92902 10.33214 l 8.92902 6.50542 l 6.50542 6.50542 l 6.50542 12.75572 l 15.30688 12.75572 l 15.30688 0.12753 l 0.12753 0.12753 l 0.12753 19.1336 l 32.0169 19.1336 l 32.0169 51.02298 l 3.8267 47.3238 m 3.8267 23.02411 l 3.8267 22.96033 l 28.19019 22.96033 l 28.19019 47.3238 l 3.8267 47.3238 l 3.95427 47.19626 m 28.06264 47.19626 l 28.06264 23.08789 l 3.95427 23.08789 l 3.95427 47.19626 l 6.37785 44.77266 m 6.37785 25.57526 l 6.37785 25.51147 l 25.63904 25.51147 l 25.63904 44.77266 l 6.37785 44.77266 l 6.50542 44.6451 m 25.51147 44.6451 l 25.51147 25.63904 l 6.50542 25.63904 l 6.50542 44.6451 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -38.971 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.95 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -38.971 Td[<00130015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -38.971 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -38.971 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -38.971 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -38.971 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 256.235 -64.546 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 30.03976 51.08676 m 30.03976 37.37433 l 26.21306 37.37433 l 26.21306 47.26004 l 3.89049 47.26004 l 3.89049 24.93747 l 13.7762 24.93747 l 13.7762 21.11075 l 0.06377 21.11075 l 0.06377 1.97711 l 6.44164 1.97711 l 6.44164 0.06377 l 8.99278 0.06377 l 8.99278 1.97711 l 15.37067 1.97711 l 15.37067 14.73286 l 6.44164 14.73286 l 6.44164 8.355 l 8.99278 8.355 l 8.99278 12.18172 l 12.81952 12.18172 l 12.81952 4.52827 l 2.61491 4.52827 l 2.61491 18.5596 l 32.59093 18.5596 l 32.59093 48.53561 l 46.62224 48.53561 l 46.62224 38.33101 l 38.9688 38.33101 l 38.9688 42.15775 l 42.79552 42.15775 l 42.79552 44.7089 l 36.41765 44.7089 l 36.41765 35.77986 l 49.17339 35.77986 l 49.17339 42.15775 l 51.08676 42.15775 l 51.08676 44.7089 l 49.17339 44.7089 l 49.17339 51.08676 l 30.03976 51.08676 l 6.44164 44.7089 m 23.6619 44.7089 l 23.6619 27.48862 l 6.44164 27.48862 l 6.44164 44.7089 l 26.21306 34.82318 m 30.03976 34.82318 l 30.03976 21.11075 l 16.32735 21.11075 l 16.32735 24.93747 l 26.21306 24.93747 l 26.21306 34.82318 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -38.971 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -38.971 Td[<00130016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -38.971 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -38.971 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -38.971 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -38.971 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 370.275 -64.578 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 29.976 51.15053 m 29.976 37.4381 l 26.27682 37.4381 l 26.27682 47.3238 l 3.8267 47.3238 l 3.8267 24.8737 l 13.71242 24.8737 l 13.71242 21.17453 l 0.0 21.17453 l 0.0 1.91335 l 6.37785 1.91335 l 6.37785 0.06377 l 6.50542 0.06377 l 6.50542 2.04091 l 0.12753 2.04091 l 0.12753 21.04697 l 13.83997 21.04697 l 13.83997 25.00125 l 3.95427 25.00125 l 3.95427 47.19626 l 26.14926 47.19626 l 26.14926 37.31055 l 30.10355 37.31055 l 30.10355 51.02298 l 49.10962 51.02298 l 49.10962 44.6451 l 51.08676 44.6451 l 51.08676 44.77266 l 49.23718 44.77266 l 49.23718 51.15053 l 29.976 51.15053 l 32.52715 48.5994 m 32.52715 18.62337 l 2.55113 18.62337 l 2.55113 4.4645 l 12.88329 4.4645 l 12.88329 12.2455 l 8.92902 12.2455 l 8.92902 8.41878 l 6.50542 8.41878 l 6.50542 14.6691 l 15.30688 14.6691 l 15.30688 2.04091 l 8.92902 2.04091 l 8.92902 0.06377 l 9.05656 0.06377 l 9.05656 1.91335 l 15.43443 1.91335 l 15.43443 14.79666 l 6.37785 14.79666 l 6.37785 8.29123 l 9.05656 8.29123 l 9.05656 12.11795 l 12.75572 12.11795 l 12.75572 4.59206 l 2.67868 4.59206 l 2.67868 18.49582 l 32.65471 18.49582 l 32.65471 48.47183 l 46.55847 48.47183 l 46.55847 38.39479 l 39.03258 38.39479 l 39.03258 42.09395 l 42.8593 42.09395 l 42.8593 44.77266 l 36.35387 44.77266 l 36.35387 35.71608 l 49.23718 35.71608 l 49.23718 42.09395 l 51.08676 42.09395 l 51.08676 42.22151 l 49.10962 42.22151 l 49.10962 35.84364 l 36.48143 35.84364 l 36.48143 44.6451 l 42.73174 44.6451 l 42.73174 42.22151 l 38.90501 42.22151 l 38.90501 38.26723 l 46.68604 38.26723 l 46.68604 48.5994 l 32.52715 48.5994 l 6.37785 44.77266 m 6.37785 27.48862 l 6.37785 27.42485 l 23.72568 27.42485 l 23.72568 44.77266 l 6.37785 44.77266 l 6.50542 44.6451 m 23.59811 44.6451 l 23.59811 27.55241 l 6.50542 27.55241 l 6.50542 44.6451 l 26.14926 34.88695 m 26.14926 25.00125 l 16.26357 25.00125 l 16.26357 21.11075 l 16.26357 21.04697 l 30.10355 21.04697 l 30.10355 34.88695 l 26.14926 34.88695 l 26.27682 34.7594 m 29.976 34.7594 l 29.976 21.17453 l 16.39111 21.17453 l 16.39111 24.8737 l 26.27682 24.8737 l 26.27682 34.7594 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -38.971 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -38.971 Td[<00130017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -38.971 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -38.971 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -38.971 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -38.971 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 28.346 -97.059 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -97.059 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -122.57 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.02298 m 0.0 24.8737 l 10.20457 24.8737 l 10.20457 21.04697 l 3.8267 21.04697 l 3.8267 1.91335 l 10.20457 1.91335 l 10.20457 0.0 l 12.75572 0.0 l 12.75572 1.91335 l 19.1336 1.91335 l 19.1336 14.6691 l 10.20457 14.6691 l 10.20457 8.29123 l 12.75572 8.29123 l 12.75572 12.11795 l 16.58246 12.11795 l 16.58246 4.4645 l 6.37785 4.4645 l 6.37785 18.49582 l 32.52715 18.49582 l 32.52715 44.6451 l 46.55847 44.6451 l 46.55847 34.4405 l 38.90501 34.4405 l 38.90501 38.26723 l 42.73174 38.26723 l 42.73174 40.81839 l 36.35387 40.81839 l 36.35387 31.88936 l 49.10962 31.88936 l 49.10962 38.26723 l 51.02298 38.26723 l 51.02298 40.81839 l 49.10962 40.81839 l 49.10962 47.19626 l 29.976 47.19626 l 29.976 40.81839 l 26.14926 40.81839 l 26.14926 51.02298 l 0.0 51.02298 l 2.55113 48.47183 m 23.59811 48.47183 l 23.59811 27.42485 l 2.55113 27.42485 l 2.55113 48.47183 l 26.14926 38.26723 m 29.976 38.26723 l 29.976 21.04697 l 12.75572 21.04697 l 12.75572 24.8737 l 26.14926 24.8737 l 26.14926 38.26723 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -97.059 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -97.059 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -97.059 Td[<00130018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -97.059 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -97.059 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -97.059 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -97.059 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -97.059 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -97.059 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.543 0 cm 0 G 0 g q 1 0 0 1 142.323 -122.665 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 51.15053 m 0.0 24.8737 l 10.20457 24.8737 l 10.20457 21.17453 l 3.8267 21.17453 l 3.8267 1.91335 l 10.20457 1.91335 l 10.20457 0.06377 l 10.33214 0.06377 l 10.33214 2.04091 l 3.95427 2.04091 l 3.95427 21.04697 l 10.33214 21.04697 l 10.33214 25.00125 l 0.12753 25.00125 l 0.12753 51.02298 l 26.14926 51.02298 l 26.14926 40.81839 l 30.10355 40.81839 l 30.10355 47.19626 l 49.10962 47.19626 l 49.10962 40.81839 l 51.08676 40.81839 l 51.08676 40.94594 l 49.23718 40.94594 l 49.23718 47.3238 l 29.976 47.3238 l 29.976 40.94594 l 26.27682 40.94594 l 26.27682 51.15053 l 0.0 51.15053 l 2.55113 48.5994 m 2.55113 27.48862 l 2.55113 27.42485 l 23.72568 27.42485 l 23.72568 48.5994 l 2.55113 48.5994 l 2.67868 48.47183 m 23.59811 48.47183 l 23.59811 27.55241 l 2.67868 27.55241 l 2.67868 48.47183 l 32.52715 44.77266 m 32.52715 18.62337 l 6.37785 18.62337 l 6.37785 4.4645 l 16.71002 4.4645 l 16.71002 12.2455 l 12.75572 12.2455 l 12.75572 8.41878 l 10.33214 8.41878 l 10.33214 14.6691 l 19.1336 14.6691 l 19.1336 2.04091 l 12.75572 2.04091 l 12.75572 0.06377 l 12.88329 0.06377 l 12.88329 1.91335 l 19.26115 1.91335 l 19.26115 14.79666 l 10.20457 14.79666 l 10.20457 8.29123 l 12.88329 8.29123 l 12.88329 12.11795 l 16.58246 12.11795 l 16.58246 4.59206 l 6.50542 4.59206 l 6.50542 18.49582 l 32.65471 18.49582 l 32.65471 44.6451 l 46.55847 44.6451 l 46.55847 34.56805 l 39.03258 34.56805 l 39.03258 38.26723 l 42.8593 38.26723 l 42.8593 40.94594 l 36.35387 40.94594 l 36.35387 31.88936 l 49.23718 31.88936 l 49.23718 38.26723 l 51.08676 38.26723 l 51.08676 38.39479 l 49.10962 38.39479 l 49.10962 32.0169 l 36.48143 32.0169 l 36.48143 40.81839 l 42.73174 40.81839 l 42.73174 38.39479 l 38.90501 38.39479 l 38.90501 34.4405 l 46.68604 34.4405 l 46.68604 44.77266 l 32.52715 44.77266 l 26.14926 38.39479 m 26.14926 25.00125 l 12.75572 25.00125 l 12.75572 21.11075 l 12.75572 21.04697 l 30.10355 21.04697 l 30.10355 38.39479 l 26.14926 38.39479 l 26.27682 38.26723 m 29.976 38.26723 l 29.976 21.17453 l 12.88329 21.17453 l 12.88329 24.8737 l 26.27682 24.8737 l 26.27682 38.26723 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -97.059 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -97.059 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -97.059 Td[<00130019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -97.059 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -97.059 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -97.059 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -97.059 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 15 Tf 192.825 -164.77 Td[<0013>]TJ /F4 15 Tf 22.35 0 Td[<0f4c0f98058610ed>]TJ ET BT /F10 12 Tf 0 -193.85 Td[<0013000f0012>]TJ /F4 12 Tf 26.688 0 Td[<05860f4c00610da00f4c11b00f4c>]TJ ET q 1 0 0 1 28.346 -232.129 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -233.405 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 0.0 2.55113 l 51.02298 2.55113 l 51.02298 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -232.129 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -232.129 Td[<0013001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -232.129 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -232.129 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -232.129 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -232.129 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 142.259 -233.469 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.06377 2.67868 m 0.06377 2.55113 l 51.08676 2.55113 l 51.08676 2.67868 l 0.06377 2.67868 l 0.06377 0.12753 m 0.06377 0.0 l 51.08676 0.0 l 51.08676 0.12753 l 0.06377 0.12753 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -232.129 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.924 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -232.129 Td[<00140011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -232.129 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -232.129 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -232.129 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -232.129 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 256.299 -237.231 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 10.20457 m 0.0 7.65343 l 51.02298 7.65343 l 51.02298 10.20457 l 0.0 10.20457 l 0.0 2.55113 m 0.0 0.0 l 51.02298 0.0 l 51.02298 2.55113 l 0.0 2.55113 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -232.129 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.924 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -232.129 Td[<00140012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -232.129 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -232.129 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00150011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -232.129 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -232.129 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 370.211 -237.295 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.06377 0.0 m 0.06377 0.12753 l 51.08676 0.12753 l 51.08676 0.0 l 0.06377 0.0 l 0.06377 2.55113 m 0.06377 2.67868 l 51.08676 2.67868 l 51.08676 2.55113 l 0.06377 2.55113 l 0.06377 7.65343 m 0.06377 7.78099 l 51.08676 7.78099 l 51.08676 7.65343 l 0.06377 7.65343 l 0.06377 10.20457 m 0.06377 10.33214 l 51.08676 10.33214 l 51.08676 10.20457 l 0.06377 10.20457 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -232.129 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.924 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -232.129 Td[<00140013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -232.129 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -232.129 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -232.129 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00150011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -232.129 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 12 Tf 0 -294.035 Td[<0013000f0013>]TJ /F4 12 Tf 26.688 0 Td[<07ed12330ed5>]TJ ET BT /F10 10.5 Tf 0 -317.171 Td[<0013000f0013000f0012>]TJ /F4 10.5 Tf 31.059 0 Td[<09f50fc3>]TJ ET q 1 0 0 1 28.346 -352.347 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -10.63 0 cm 0 G 0 g q 1 0 0 1 28.346 -360.851 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 4.96065 0.0 l 4.96065 14.1733 l 16.2993 14.1733 l 16.2993 9.92131 l 9.21263 9.92131 l 9.21263 0.0 l 21.25995 0.0 l 21.25995 2.83464 l 12.04729 2.83464 l 12.04729 7.08664 l 19.13394 7.08664 l 19.13394 17.00795 l 2.12598 17.00795 l 2.12598 2.83464 l 0.0 2.83464 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -352.347 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.758 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -352.347 Td[<00140014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -352.347 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -352.347 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<00180016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -352.347 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 142.323 -352.347 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -10.63 0 cm 0 G 0 g q 1 0 0 1 142.252 -360.921 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.07085 0.0 m 0.07085 0.14172 l 4.96065 0.14172 l 4.96065 14.31503 l 16.44102 14.31503 l 16.44102 9.92131 l 9.35437 9.92131 l 9.35437 0.14172 l 21.33081 0.14172 l 21.33081 0.0 l 9.21263 0.0 l 9.21263 10.06303 l 16.2993 10.06303 l 16.2993 14.1733 l 5.10237 14.1733 l 5.10237 0.0 l 0.07085 0.0 l 0.07085 2.83464 m 0.07085 2.97638 l 2.12598 2.97638 l 2.12598 17.14969 l 19.27568 17.14969 l 19.27568 7.08664 l 12.18903 7.08664 l 12.18903 2.97638 l 21.33081 2.97638 l 21.33081 2.83464 l 12.04729 2.83464 l 12.04729 7.22836 l 19.13394 7.22836 l 19.13394 17.00795 l 2.26772 17.00795 l 2.26772 2.83464 l 0.07085 2.83464 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -352.347 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.758 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -352.347 Td[<00140015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -352.347 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -352.347 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<00180016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -352.347 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 256.299 -352.347 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -14.173 0 cm 0 G 0 g q 1 0 0 1 256.299 -360.851 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 12.04729 0.0 l 12.04729 9.92131 l 4.96065 9.92131 l 4.96065 14.1733 l 23.38594 14.1733 l 23.38594 9.92131 l 16.2993 9.92131 l 16.2993 0.0 l 28.3466 0.0 l 28.3466 2.83464 l 19.13394 2.83464 l 19.13394 7.08664 l 26.22061 7.08664 l 26.22061 17.00795 l 2.12598 17.00795 l 2.12598 7.08664 l 9.21263 7.08664 l 9.21263 2.83464 l 0.0 2.83464 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -352.347 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.758 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -352.347 Td[<00140016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -352.347 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -352.347 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -352.347 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 370.275 -352.347 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -14.173 0 cm 0 G 0 g q 1 0 0 1 370.204 -360.921 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.07085 0.0 m 0.07085 0.14172 l 12.04729 0.14172 l 12.04729 9.92131 l 4.96065 9.92131 l 4.96065 14.31503 l 23.52768 14.31503 l 23.52768 9.92131 l 16.44102 9.92131 l 16.44102 0.14172 l 28.41747 0.14172 l 28.41747 0.0 l 16.2993 0.0 l 16.2993 10.06303 l 23.38594 10.06303 l 23.38594 14.1733 l 5.10237 14.1733 l 5.10237 10.06303 l 12.18903 10.06303 l 12.18903 0.0 l 0.07085 0.0 l 0.07085 2.83464 m 0.07085 2.97638 l 9.21263 2.97638 l 9.21263 7.08664 l 2.12598 7.08664 l 2.12598 17.14969 l 26.36234 17.14969 l 26.36234 7.08664 l 19.27568 7.08664 l 19.27568 2.97638 l 28.41747 2.97638 l 28.41747 2.83464 l 19.13394 2.83464 l 19.13394 7.22836 l 26.22061 7.22836 l 26.22061 17.00795 l 2.26772 17.00795 l 2.26772 7.22836 l 9.35437 7.22836 l 9.35437 2.83464 l 0.07085 2.83464 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -352.347 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.758 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -352.347 Td[<00140017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -352.347 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -352.347 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -352.347 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -352.347 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 28.346 -410.434 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -17.717 0 cm 0 G 0 g q 1 0 0 1 28.346 -426.025 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 2.83464 m 2.83464 2.83464 l 2.83464 31.18126 l 34.01593 31.18126 l 34.01593 7.08664 l 17.00795 7.08664 l 17.00795 17.00795 l 24.0946 17.00795 l 24.0946 21.25995 l 12.75595 21.25995 l 12.75595 2.83464 l 35.43324 2.83464 l 35.43324 0.0 l 9.92131 0.0 l 9.92131 24.0946 l 26.92926 24.0946 l 26.92926 14.1733 l 19.84262 14.1733 l 19.84262 9.92131 l 31.18126 9.92131 l 31.18126 28.3466 l 5.66931 28.3466 l 5.66931 0.0 l 0.0 0.0 l 0.0 2.83464 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -410.434 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.751 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -410.434 Td[<00140018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -410.434 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -410.434 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -410.434 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 142.323 -410.434 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -17.717 0 cm 0 G 0 g q 1 0 0 1 142.252 -426.096 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.07085 0.0 m 0.07085 0.14172 l 5.66931 0.14172 l 5.66931 28.48833 l 31.323 28.48833 l 31.323 9.92131 l 19.84262 9.92131 l 19.84262 14.31503 l 26.92926 14.31503 l 26.92926 24.0946 l 10.06303 24.0946 l 10.06303 0.14172 l 35.50412 0.14172 l 35.50412 0.0 l 9.92131 0.0 l 9.92131 24.23634 l 27.071 24.23634 l 27.071 14.1733 l 19.98434 14.1733 l 19.98434 10.06303 l 31.18126 10.06303 l 31.18126 28.3466 l 5.81104 28.3466 l 5.81104 0.0 l 0.07085 0.0 l 0.07085 2.83464 m 0.07085 2.97638 l 2.83464 2.97638 l 2.83464 31.323 l 34.15765 31.323 l 34.15765 7.08664 l 17.00795 7.08664 l 17.00795 17.14969 l 24.0946 17.14969 l 24.0946 21.25995 l 12.8977 21.25995 l 12.8977 2.97638 l 35.50412 2.97638 l 35.50412 2.83464 l 12.75595 2.83464 l 12.75595 21.40167 l 24.23634 21.40167 l 24.23634 17.00795 l 17.14969 17.00795 l 17.14969 7.22836 l 34.01593 7.22836 l 34.01593 31.18126 l 2.97638 31.18126 l 2.97638 2.83464 l 0.07085 2.83464 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -410.434 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.758 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -410.434 Td[<00140019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -410.434 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -410.434 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -410.434 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 256.299 -410.434 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -28.347 0 cm 0 G 0 g q 1 0 0 1 256.299 -426.025 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 26.22061 0.0 l 26.22061 24.0946 l 9.21263 24.0946 l 9.21263 14.1733 l 16.2993 14.1733 l 16.2993 9.92131 l 4.96065 9.92131 l 4.96065 28.3466 l 51.73257 28.3466 l 51.73257 9.92131 l 40.39392 9.92131 l 40.39392 14.1733 l 47.48056 14.1733 l 47.48056 24.0946 l 30.4726 24.0946 l 30.4726 0.0 l 56.69322 0.0 l 56.69322 2.83464 l 33.30725 2.83464 l 33.30725 21.25995 l 44.6459 21.25995 l 44.6459 17.00795 l 37.55925 17.00795 l 37.55925 7.08664 l 54.56721 7.08664 l 54.56721 31.18126 l 2.12598 31.18126 l 2.12598 7.08664 l 19.13394 7.08664 l 19.13394 17.00795 l 12.04729 17.00795 l 12.04729 21.25995 l 23.38594 21.25995 l 23.38594 2.83464 l 0.0 2.83464 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -410.434 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.758 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -410.434 Td[<0014001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -410.434 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -410.434 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -410.434 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 370.275 -410.434 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -28.347 0 cm 0 G 0 g q 1 0 0 1 370.204 -426.096 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.07085 0.0 m 0.07085 0.14172 l 26.22061 0.14172 l 26.22061 24.0946 l 9.35437 24.0946 l 9.35437 14.31503 l 16.44102 14.31503 l 16.44102 9.92131 l 4.96065 9.92131 l 4.96065 28.48833 l 51.8743 28.48833 l 51.8743 9.92131 l 40.39392 9.92131 l 40.39392 14.31503 l 47.48056 14.31503 l 47.48056 24.0946 l 30.61433 24.0946 l 30.61433 0.14172 l 56.76408 0.14172 l 56.76408 0.0 l 30.4726 0.0 l 30.4726 24.23634 l 47.6223 24.23634 l 47.6223 14.1733 l 40.53564 14.1733 l 40.53564 10.06303 l 51.73257 10.06303 l 51.73257 28.3466 l 5.10237 28.3466 l 5.10237 10.06303 l 16.2993 10.06303 l 16.2993 14.1733 l 9.21263 14.1733 l 9.21263 24.23634 l 26.36234 24.23634 l 26.36234 0.0 l 0.07085 0.0 l 0.07085 2.83464 m 0.07085 2.97638 l 23.38594 2.97638 l 23.38594 21.25995 l 12.18903 21.25995 l 12.18903 17.14969 l 19.27568 17.14969 l 19.27568 7.08664 l 2.12598 7.08664 l 2.12598 31.323 l 54.70895 31.323 l 54.70895 7.08664 l 37.55925 7.08664 l 37.55925 17.14969 l 44.6459 17.14969 l 44.6459 21.25995 l 33.44899 21.25995 l 33.44899 2.97638 l 56.76408 2.97638 l 56.76408 2.83464 l 33.30725 2.83464 l 33.30725 21.40167 l 44.78763 21.40167 l 44.78763 17.00795 l 37.70099 17.00795 l 37.70099 7.22836 l 54.56721 7.22836 l 54.56721 31.18126 l 2.26772 31.18126 l 2.26772 7.22836 l 19.13394 7.22836 l 19.13394 17.00795 l 12.04729 17.00795 l 12.04729 21.40167 l 23.52768 21.40167 l 23.52768 2.83464 l 0.07085 2.83464 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -410.434 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.762 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -410.434 Td[<00150011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -410.434 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -410.434 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -410.434 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -410.434 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q BT /F10 10.5 Tf 0 -472.835 Td[<0013000f0013000f0013>]TJ /F4 10.5 Tf 31.059 0 Td[<09d60cdb>]TJ ET q 1 0 0 1 28.346 -508.094 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.299 0 cm 0 G 0 g q 1 0 0 1 28.346 -516.598 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 7.08664 7.08664 m 11.33864 7.08664 l 11.33864 2.83464 l 2.83464 2.83464 l 2.83464 14.1733 l 29.76393 14.1733 l 29.76393 2.83464 l 21.25995 2.83464 l 21.25995 7.08664 l 25.51193 7.08664 l 25.51193 9.92131 l 18.4253 9.92131 l 18.4253 0.0 l 32.5986 0.0 l 32.5986 17.00795 l 0.0 17.00795 l 0.0 0.0 l 14.1733 0.0 l 14.1733 9.92131 l 7.08664 9.92131 l 7.08664 7.08664 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -508.094 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.788 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -508.094 Td[<00150012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -508.094 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -508.094 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200120016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -508.094 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 142.323 -508.094 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.37 0 cm 0 G 0 g q 1 0 0 1 142.323 -516.669 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 0.0 17.14969 l 32.74033 17.14969 l 32.74033 0.0 l 18.4253 0.0 l 18.4253 10.06303 l 25.65367 10.06303 l 25.65367 7.08664 l 21.40167 7.08664 l 21.40167 2.97638 l 29.76393 2.97638 l 29.76393 14.1733 l 2.97638 14.1733 l 2.97638 2.97638 l 11.33864 2.97638 l 11.33864 7.08664 l 7.08664 7.08664 l 7.08664 7.15752 l 7.08664 10.06303 l 14.31503 10.06303 l 14.31503 0.0 l 0.0 0.0 l 0.14172 0.14172 m 14.1733 0.14172 l 14.1733 9.92131 l 7.22836 9.92131 l 7.22836 7.22836 l 11.48036 7.22836 l 11.48036 2.83464 l 2.83464 2.83464 l 2.83464 14.31503 l 29.90565 14.31503 l 29.90565 2.83464 l 21.25995 2.83464 l 21.25995 7.22836 l 25.51193 7.22836 l 25.51193 9.92131 l 18.56702 9.92131 l 18.56702 0.14172 l 32.5986 0.14172 l 32.5986 17.00795 l 0.14172 17.00795 l 0.14172 0.14172 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -508.094 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.784 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -508.094 Td[<00150013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -508.094 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -508.094 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200120016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -508.094 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 256.299 -508.094 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -19.843 0 cm 0 G 0 g q 1 0 0 1 256.299 -516.598 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 7.08664 7.08664 m 11.33864 7.08664 l 11.33864 2.83464 l 2.83464 2.83464 l 2.83464 14.1733 l 18.4253 14.1733 l 18.4253 0.0 l 39.68524 0.0 l 39.68524 17.00795 l 25.51193 17.00795 l 25.51193 7.08664 l 32.5986 7.08664 l 32.5986 9.92131 l 28.3466 9.92131 l 28.3466 14.1733 l 36.85059 14.1733 l 36.85059 2.83464 l 21.25995 2.83464 l 21.25995 17.00795 l 0.0 17.00795 l 0.0 0.0 l 14.1733 0.0 l 14.1733 9.92131 l 7.08664 9.92131 l 7.08664 7.08664 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -508.094 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.758 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -508.094 Td[<00150014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -508.094 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -508.094 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200150011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -508.094 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 370.275 -508.094 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -19.913 0 cm 0 G 0 g q 1 0 0 1 370.275 -516.669 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 0.0 17.14969 l 21.40167 17.14969 l 21.40167 2.97638 l 36.85059 2.97638 l 36.85059 14.1733 l 28.48833 14.1733 l 28.48833 10.06303 l 32.74033 10.06303 l 32.74033 7.08664 l 25.51193 7.08664 l 25.51193 17.14969 l 39.82698 17.14969 l 39.82698 0.0 l 18.4253 0.0 l 18.4253 14.1733 l 2.97638 14.1733 l 2.97638 2.97638 l 11.33864 2.97638 l 11.33864 7.08664 l 7.08664 7.08664 l 7.08664 7.15752 l 7.08664 10.06303 l 14.31503 10.06303 l 14.31503 0.0 l 0.0 0.0 l 0.14172 0.14172 m 14.1733 0.14172 l 14.1733 9.92131 l 7.22836 9.92131 l 7.22836 7.22836 l 11.48036 7.22836 l 11.48036 2.83464 l 2.83464 2.83464 l 2.83464 14.31503 l 18.56702 14.31503 l 18.56702 0.14172 l 39.68524 0.14172 l 39.68524 17.00795 l 25.65367 17.00795 l 25.65367 7.22836 l 32.5986 7.22836 l 32.5986 9.92131 l 28.3466 9.92131 l 28.3466 14.31503 l 36.99232 14.31503 l 36.99232 2.83464 l 21.25995 2.83464 l 21.25995 17.00795 l 0.14172 17.00795 l 0.14172 0.14172 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -508.094 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.788 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -508.094 Td[<00150015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -508.094 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -508.094 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -508.094 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200150011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -508.094 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q BT /F10 10.5 Tf 0 -570.494 Td[<0013000f0013000f0014>]TJ /F4 10.5 Tf 31.059 0 Td[<09d60cdb09f508a4>]TJ ET q 1 0 0 1 28.346 -605.753 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -18.425 0 cm 0 G 0 g q 1 0 0 1 28.346 -614.257 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 7.08664 m 2.12598 7.08664 l 2.12598 0.0 l 16.2993 0.0 l 16.2993 9.92131 l 9.21263 9.92131 l 9.21263 7.08664 l 13.46463 7.08664 l 13.46463 2.83464 l 4.96065 2.83464 l 4.96065 14.1733 l 31.88992 14.1733 l 31.88992 2.83464 l 23.38594 2.83464 l 23.38594 7.08664 l 27.63794 7.08664 l 27.63794 9.92131 l 20.55127 9.92131 l 20.55127 0.0 l 34.7246 0.0 l 34.7246 7.08664 l 36.85059 7.08664 l 36.85059 9.92131 l 34.7246 9.92131 l 34.7246 17.00795 l 2.12598 17.00795 l 2.12598 9.92131 l 0.0 9.92131 l 0.0 7.08664 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -605.753 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.762 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -605.753 Td[<00150016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -605.753 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -605.753 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200140011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -605.753 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 142.323 -605.753 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -18.425 0 cm 0 G 0 g q 1 0 0 1 142.252 -614.328 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 2.12598 0.0 m 2.12598 7.08664 l 0.07085 7.08664 l 0.07085 7.22836 l 2.26772 7.22836 l 2.26772 0.14172 l 16.2993 0.14172 l 16.2993 9.92131 l 9.35437 9.92131 l 9.35437 7.22836 l 13.60635 7.22836 l 13.60635 2.83464 l 4.96065 2.83464 l 4.96065 14.31503 l 32.03166 14.31503 l 32.03166 2.83464 l 23.38594 2.83464 l 23.38594 7.22836 l 27.63794 7.22836 l 27.63794 9.92131 l 20.69302 9.92131 l 20.69302 0.14172 l 34.7246 0.14172 l 34.7246 7.22836 l 36.92145 7.22836 l 36.92145 7.08664 l 34.86632 7.08664 l 34.86632 0.0 l 20.55127 0.0 l 20.55127 10.06303 l 27.77966 10.06303 l 27.77966 7.08664 l 23.52768 7.08664 l 23.52768 2.97638 l 31.88992 2.97638 l 31.88992 14.1733 l 5.10237 14.1733 l 5.10237 2.97638 l 13.46463 2.97638 l 13.46463 7.08664 l 9.21263 7.08664 l 9.21263 10.06303 l 16.44102 10.06303 l 16.44102 0.0 l 2.12598 0.0 l 0.07085 9.92131 m 0.07085 10.06303 l 2.12598 10.06303 l 2.12598 17.14969 l 34.86632 17.14969 l 34.86632 10.06303 l 36.92145 10.06303 l 36.92145 9.92131 l 34.7246 9.92131 l 34.7246 17.00795 l 2.26772 17.00795 l 2.26772 9.92131 l 0.07085 9.92131 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -605.753 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.762 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -605.753 Td[<00150017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -605.753 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -605.753 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200140011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -605.753 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 256.299 -605.753 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -21.969 0 cm 0 G 0 g q 1 0 0 1 256.299 -614.257 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 7.08664 m 2.12598 7.08664 l 2.12598 0.0 l 16.2993 0.0 l 16.2993 9.92131 l 9.21263 9.92131 l 9.21263 7.08664 l 13.46463 7.08664 l 13.46463 2.83464 l 4.96065 2.83464 l 4.96065 14.1733 l 20.55127 14.1733 l 20.55127 0.0 l 41.81123 0.0 l 41.81123 7.08664 l 43.93724 7.08664 l 43.93724 9.92131 l 41.81123 9.92131 l 41.81123 17.00795 l 27.63794 17.00795 l 27.63794 7.08664 l 34.7246 7.08664 l 34.7246 9.92131 l 30.4726 9.92131 l 30.4726 14.1733 l 38.9766 14.1733 l 38.9766 2.83464 l 23.38594 2.83464 l 23.38594 17.00795 l 2.12598 17.00795 l 2.12598 9.92131 l 0.0 9.92131 l 0.0 7.08664 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -605.753 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.751 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -605.753 Td[<00150018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -605.753 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -605.753 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200160016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -605.753 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q q 1 0 0 1 370.275 -605.753 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -31.18167 m -28.3468 -31.18167 m -28.3468 25.51195 l 28.3468 25.51195 l 28.3468 -31.18167 l h 28.3468 25.51195 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -21.969 0 cm 0 G 0 g q 1 0 0 1 370.204 -614.328 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 2.12598 0.0 m 2.12598 7.08664 l 0.07085 7.08664 l 0.07085 7.22836 l 2.26772 7.22836 l 2.26772 0.14172 l 16.2993 0.14172 l 16.2993 9.92131 l 9.35437 9.92131 l 9.35437 7.22836 l 13.60635 7.22836 l 13.60635 2.83464 l 4.96065 2.83464 l 4.96065 14.31503 l 20.69302 14.31503 l 20.69302 0.14172 l 41.81123 0.14172 l 41.81123 7.22836 l 44.0081 7.22836 l 44.0081 7.08664 l 41.95299 7.08664 l 41.95299 0.0 l 20.55127 0.0 l 20.55127 14.1733 l 5.10237 14.1733 l 5.10237 2.97638 l 13.46463 2.97638 l 13.46463 7.08664 l 9.21263 7.08664 l 9.21263 10.06303 l 16.44102 10.06303 l 16.44102 0.0 l 2.12598 0.0 l 23.38594 2.83464 m 23.38594 17.00795 l 2.26772 17.00795 l 2.26772 9.92131 l 0.07085 9.92131 l 0.07085 10.06303 l 2.12598 10.06303 l 2.12598 17.14969 l 23.52768 17.14969 l 23.52768 2.97638 l 38.9766 2.97638 l 38.9766 14.1733 l 30.61433 14.1733 l 30.61433 10.06303 l 34.86632 10.06303 l 34.86632 7.08664 l 27.63794 7.08664 l 27.63794 17.14969 l 41.95299 17.14969 l 41.95299 10.06303 l 44.0081 10.06303 l 44.0081 9.92131 l 41.81123 9.92131 l 41.81123 17.00795 l 27.77966 17.00795 l 27.77966 7.22836 l 34.7246 7.22836 l 34.7246 9.92131 l 30.4726 9.92131 l 30.4726 14.31503 l 39.11832 14.31503 l 39.11832 2.83464 l 23.38594 2.83464 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -605.753 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -27.762 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -605.753 Td[<00150019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -605.753 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -605.753 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -605.753 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200160016>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -605.753 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -31.18167 m 28.3468 -31.18167 m 28.3468 25.51195 l 79.37119 25.51195 l 79.37119 -31.18167 l h 79.37119 25.51195 m S Q Q n Q Q Q
+
+endstream
+endobj
+51 0 obj
+<</Length 293328>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.041 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0018>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F10 10.5 Tf 0 4.437 Td[<0013000f0013000f0015>]TJ /F4 10.5 Tf 31.059 0 Td[<10f511db0b86048305a507ed0ed5>]TJ ET q 1 0 0 1 42.52 -47.725 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -42.52022 m -42.52022 -42.52022 m -42.52022 42.52022 l 42.52022 42.52022 l 42.52022 -42.52022 l h 42.52022 42.52022 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -39.829 0 cm 0 G 0 g q 1 0 0 1 42.465 -87.45 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 38.84584 79.39598 m 34.91473 79.29456 31.0211 78.60667 27.29283 77.35876 c 28.51648 73.70107 l 29.50424 74.03177 30.5074 74.32062 31.5194 74.56313 c 31.90523 72.95364 l 30.65071 72.65381 29.40942 72.28119 28.1946 71.83804 c 28.1946 71.84024 l 26.98196 71.39708 25.7914 70.88336 24.6361 70.30792 c 23.89749 71.78732 l 24.83011 72.25034 25.78477 72.67805 26.75267 73.05946 c 25.33942 76.64883 l 21.6817 75.20912 18.25769 73.22925 15.17984 70.78194 c 17.58083 67.76361 l 18.39659 68.41182 19.24101 69.02695 20.1097 69.60019 c 21.02248 68.2222 l 19.94653 67.50786 18.90588 66.734 17.91595 65.905 c 16.92822 65.07379 15.98457 64.18527 15.09604 63.24825 c 13.89665 64.38591 l 14.6132 65.14214 15.36502 65.86751 16.14333 66.55762 c 13.588 69.44806 l 10.64241 66.84203 8.10033 63.81267 6.04767 60.46141 c 9.33719 58.44405 l 9.87956 59.33257 10.46384 60.19905 11.08337 61.03465 c 12.41284 60.05132 l 11.64558 59.0129 10.93344 57.93034 10.28745 56.81252 c 9.64145 55.6947 9.05939 54.5372 8.54568 53.35103 c 7.0288 54.01025 l 7.4433 54.96492 7.90189 55.90416 8.40016 56.81914 c 5.00923 58.66011 l 3.13297 55.20523 1.77924 51.4902 0.99654 47.63626 c 4.77551 46.869 l 4.98277 47.8876 5.23631 48.90181 5.53395 49.90056 c 7.11919 49.43094 l 6.75099 48.19186 6.45335 46.93074 6.22845 45.6608 c 6.00357 44.38863 5.85365 43.10106 5.77428 41.81125 c 4.1251 41.91269 l 4.18684 42.95334 4.29707 43.99178 4.45142 45.02141 c 0.63496 45.59024 l 0.0551 41.70323 0.0551 37.74788 0.63496 33.86086 c 4.45142 34.42969 l 4.29707 35.4593 4.18684 36.49995 4.1251 37.5384 c 5.77428 37.63983 l 5.85365 36.35004 6.00357 35.06245 6.22845 33.7925 c 6.45335 32.52036 6.75099 31.25702 7.11919 30.02014 c 5.53395 29.55052 l 5.23631 30.54929 4.98277 31.56348 4.77551 32.58429 c 0.99654 31.81262 l 1.77924 27.96089 3.13297 24.24585 5.00923 20.79099 c 8.40016 22.63196 l 7.90189 23.54695 7.4433 24.48618 7.0288 25.44084 c 8.54568 26.10005 l 9.05939 24.91609 9.64145 23.75638 10.28745 22.63857 c 10.93344 21.52075 11.64558 20.4382 12.41284 19.39977 c 11.08337 18.41643 l 10.46384 19.25203 9.87956 20.11852 9.33719 21.00705 c 6.04767 18.98969 l 8.10033 15.63841 10.64241 12.60907 13.588 10.00304 c 16.14333 12.8935 l 15.36502 13.58359 14.6132 14.30894 13.89665 15.06519 c 15.09604 16.20284 l 15.98457 15.26582 16.92822 14.37729 17.91595 13.5461 c 18.90588 12.7171 19.94653 11.94102 21.02248 11.22887 c 20.1097 9.8509 l 19.24101 10.42415 18.39659 11.03928 17.58083 11.68747 c 15.17984 8.66914 l 18.25769 6.22185 21.6817 4.24417 25.33942 2.80225 c 26.75267 6.39162 l 25.78477 6.77304 24.83011 7.19855 23.89749 7.66377 c 24.6361 9.14316 l 25.7914 8.56772 26.98196 8.05402 28.1946 7.61305 c 29.40942 7.1699 30.65071 6.7973 31.90523 6.49744 c 31.5194 4.88795 l 30.5074 5.13048 29.50424 5.41931 28.51648 5.75002 c 27.29283 2.09232 l 31.0211 0.84442 34.91473 0.15652 38.84584 0.0551 c 38.94505 3.91125 l 37.9044 3.9377 36.86375 4.01266 35.82751 4.12952 c 36.01491 5.77208 l 37.2981 5.62656 38.5923 5.5516 39.88428 5.5516 c 41.17628 5.5516 42.46829 5.62656 43.75145 5.77208 c 43.93886 4.12952 l 42.90483 4.01266 41.86197 3.9377 40.82132 3.91125 c 40.92273 0.0551 l 44.85164 0.15652 48.74747 0.84442 52.47574 2.09232 c 51.25209 5.75002 l 50.26434 5.41931 49.25897 5.13048 48.24698 4.88795 c 47.86116 6.49744 l 49.11787 6.7973 50.35916 7.1699 51.57178 7.61305 c 52.7866 8.05402 53.97498 8.56772 55.13028 9.14316 c 55.86888 7.66377 l 54.93846 7.19855 53.9838 6.77304 53.0137 6.39162 c 54.42915 2.80225 l 58.08467 4.24417 61.5109 6.22185 64.58875 8.66914 c 62.18555 11.68747 l 61.372 11.03928 60.52536 10.42415 59.65668 9.8509 c 58.74611 11.22887 l 59.82202 11.94102 60.86047 12.7171 61.85043 13.5461 c 62.84036 14.37729 63.78401 15.26582 64.67252 16.20284 c 65.87193 15.06519 l 65.15536 14.30894 64.40353 13.58359 63.62305 12.8935 c 66.18059 10.00304 l 69.12396 12.60907 71.66606 15.63841 73.7209 18.98969 c 70.43138 21.00705 l 69.88681 20.11852 69.30254 19.25203 68.683 18.41643 c 67.35353 19.39977 l 68.12299 20.4382 68.83292 21.52075 69.47893 22.63857 c 70.12492 23.75638 70.70699 24.91609 71.2229 26.10005 c 72.73979 25.44084 l 72.32309 24.48618 71.86449 23.54695 71.36842 22.63196 c 74.75935 20.79099 l 76.6334 24.24585 77.98933 27.96089 78.77203 31.81262 c 74.99084 32.58429 l 74.7836 31.56348 74.53004 30.54929 74.23462 29.55052 c 72.64938 30.02014 l 73.01538 31.25702 73.31523 32.52036 73.54012 33.7925 c 73.7628 35.06245 73.91493 36.35004 73.9921 37.63983 c 75.64348 37.5384 l 75.57953 36.49995 75.46928 35.4593 75.31715 34.42969 c 79.13141 33.86086 l 79.71349 37.74788 79.71349 41.70323 79.13141 45.59024 c 75.31715 45.02141 l 75.46928 43.99178 75.57953 42.95334 75.64348 41.91269 c 73.9921 41.81125 l 73.91493 43.10106 73.7628 44.38863 73.54012 45.6608 c 73.31523 46.93074 73.01538 48.19186 72.64938 49.43094 c 74.23462 49.90056 l 74.53004 48.90181 74.7836 47.8876 74.99084 46.869 c 78.77203 47.63626 l 77.98933 51.4902 76.6334 55.20523 74.75935 58.66011 c 71.36842 56.81914 l 71.86449 55.90416 72.32309 54.96492 72.73979 54.01025 c 71.2229 53.35103 l 70.70699 54.5372 70.12492 55.6947 69.47893 56.81252 c 68.83292 57.93034 68.12299 59.0129 67.35353 60.05132 c 68.683 61.03465 l 69.30254 60.19905 69.88681 59.33257 70.43138 58.44405 c 73.7209 60.46141 l 71.66606 63.81267 69.12396 66.84203 66.18059 69.44806 c 63.62305 66.55762 l 64.40353 65.86751 65.15536 65.14214 65.87193 64.38591 c 64.67252 63.24825 l 63.78401 64.18527 62.84036 65.07379 61.85043 65.905 c 60.86047 66.734 59.82202 67.50786 58.74611 68.2222 c 59.65668 69.60019 l 60.52536 69.02695 61.372 68.41182 62.18555 67.76361 c 64.58875 70.78194 l 61.5109 73.22925 58.08467 75.20912 54.42915 76.64883 c 53.0137 73.05946 l 53.9816 72.67805 54.93846 72.25034 55.86888 71.78732 c 55.13028 70.30792 l 53.97498 70.88336 52.7866 71.39708 51.57178 71.83804 c 51.57178 71.84024 l 50.35916 72.28119 49.11787 72.65381 47.86116 72.95364 c 48.24698 74.56313 l 49.25897 74.3184 50.26434 74.03177 51.25209 73.70107 c 52.47574 77.35876 l 48.74747 78.60667 44.85164 79.29456 40.92273 79.39598 c 40.82132 75.53984 l 41.86197 75.51338 42.90483 75.43843 43.93886 75.32156 c 43.75145 73.67902 l 42.46829 73.82452 41.17628 73.89949 39.88428 73.89949 c 38.5923 73.89949 37.2981 73.82452 36.01491 73.67902 c 35.82751 75.32156 l 36.86375 75.43843 37.9044 75.51338 38.94505 75.53984 c 38.84584 79.39598 l 37.52739 78.23628 m 37.62881 76.5849 l 36.55728 76.52097 35.48578 76.40633 34.42526 76.24759 c 34.9963 72.43332 l 36.61241 72.67365 38.24835 72.79712 39.88428 72.79712 c 41.51802 72.79712 43.15617 72.67365 44.77226 72.43332 c 45.3411 76.24759 l 44.28061 76.40633 43.20908 76.52097 42.13757 76.5849 c 42.23898 78.23628 l 45.15369 78.05768 48.04193 77.54839 50.84201 76.71939 c 50.37239 75.13416 l 49.34276 75.43843 48.2977 75.6986 47.246 75.91246 c 46.47656 72.13347 l 48.07722 71.80716 49.66023 71.3618 51.19476 70.804 c 52.73149 70.24399 54.22632 69.56712 55.66383 68.78883 c 57.50482 72.17757 l 56.56117 72.69128 55.59328 73.1631 54.60995 73.59082 c 55.26917 75.10771 l 57.94577 73.94359 60.48567 72.47742 62.83376 70.74005 c 61.85043 69.41058 l 60.98615 70.04996 60.09322 70.65187 59.17824 71.21188 c 57.16309 67.92236 l 58.55649 67.0691 59.89038 66.11003 61.14268 65.06056 c 62.39499 64.0089 63.56793 62.86241 64.65268 61.63876 c 67.54094 64.19629 l 66.831 64.99884 66.08138 65.7727 65.30309 66.51352 c 66.44296 67.7129 l 68.55952 65.70215 70.44682 63.45549 72.0563 61.02144 c 70.67833 60.10864 l 70.08525 61.00378 69.45247 61.87468 68.78442 62.71469 c 65.76389 60.3115 l 66.7825 59.03273 67.7085 57.67679 68.52426 56.26132 c 69.34224 54.84586 70.05437 53.36646 70.65407 51.84517 c 74.24344 53.26064 l 73.84879 54.2594 73.41005 55.24272 72.9316 56.2018 c 74.411 56.94038 l 75.71402 54.32774 76.71939 51.56956 77.40067 48.73203 c 75.7934 48.3462 l 75.54204 49.38905 75.2444 50.42531 74.90486 51.4439 c 71.24495 50.21806 l 71.76308 48.66809 72.16876 47.07845 72.45317 45.46898 c 72.73758 43.8595 72.90073 42.22354 72.94263 40.59201 c 76.80096 40.69124 l 76.77231 41.76495 76.69734 42.83868 76.57608 43.90578 c 78.21864 44.0932 l 78.54936 41.19171 78.54936 38.25717 78.21864 35.3579 c 76.57608 35.5453 l 76.69734 36.61241 76.77231 37.68613 76.80096 38.75986 c 72.94263 38.85907 l 72.90073 37.22534 72.73758 35.5916 72.45317 33.98212 c 72.16876 32.37263 71.76308 30.78079 71.24495 29.23305 c 74.90486 28.00719 l 75.2444 29.02579 75.54204 30.06204 75.7934 31.1049 c 77.40067 30.71906 l 76.71939 27.88152 75.71402 25.12334 74.411 22.5107 c 72.9316 23.24928 l 73.41005 24.20837 73.84879 25.1917 74.24344 26.19044 c 70.65407 27.60591 l 70.05437 26.08463 69.34224 24.60522 68.52426 23.18976 c 67.7085 21.7743 66.7825 20.41837 65.76389 19.1396 c 68.78442 16.7364 l 69.45247 17.57642 70.08525 18.44951 70.67833 19.34244 c 72.0563 18.42967 l 70.44682 15.99559 68.55952 13.74893 66.44296 11.73819 c 65.30309 12.93758 l 66.08138 13.67618 66.831 14.45226 67.54094 15.25479 c 64.65268 17.81232 l 63.56793 16.58868 62.39499 15.4422 61.14268 14.39052 c 59.89038 13.34105 58.55649 12.38197 57.16309 11.52873 c 59.17824 8.23921 l 60.09322 8.79922 60.98615 9.40112 61.85043 10.0405 c 62.83376 8.71103 l 60.48567 6.97368 57.94577 5.5075 55.26917 4.34338 c 54.60995 5.86026 l 55.59328 6.28798 56.56117 6.75981 57.50482 7.27132 c 55.66383 10.66225 l 54.22632 9.88397 52.73149 9.2071 51.19476 8.6471 c 49.66023 8.08928 48.07722 7.64392 46.47656 7.31982 c 47.246 3.53865 l 48.2977 3.7525 49.34276 4.01266 50.37239 4.31693 c 50.84201 2.73169 l 48.04193 1.90271 45.15369 1.3934 42.23898 1.21481 c 42.13757 2.8662 l 43.20908 2.93013 44.28061 3.04477 45.3411 3.20352 c 44.77226 7.01778 l 43.15617 6.77745 41.51802 6.65398 39.88428 6.65398 c 38.24835 6.65398 36.61241 6.77745 34.9963 7.01778 c 34.42526 3.20352 l 35.48578 3.04477 36.55728 2.93013 37.62881 2.8662 c 37.52739 1.21481 l 34.61488 1.3934 31.72444 1.90271 28.92657 2.73169 c 29.3962 4.31693 l 30.42583 4.01266 31.47089 3.7525 32.52255 3.53865 c 33.28981 7.31982 l 31.68915 7.64392 30.10834 8.08928 28.57161 8.6471 c 27.0371 9.2071 25.54004 9.88397 24.10474 10.66225 c 22.26376 7.27132 l 23.2074 6.75981 24.1753 6.28798 25.15863 5.86026 c 24.49939 4.34338 l 21.8228 5.5075 19.2807 6.97368 16.93483 8.71103 c 17.91815 10.0405 l 18.78021 9.40112 19.67314 8.79922 20.58813 8.23921 c 22.6055 11.52873 l 21.21208 12.38197 19.87819 13.34105 18.62589 14.39052 c 17.37358 15.4422 16.19843 16.58868 15.11589 17.81232 c 12.22543 15.25479 l 12.93758 14.45226 13.685 13.67618 14.46327 12.93758 c 13.32562 11.73819 l 11.20903 13.74893 9.32175 15.99559 7.71007 18.42967 c 9.09026 19.34244 l 9.68112 18.44951 10.3161 17.57642 10.98415 16.7364 c 14.00249 19.1396 l 12.98608 20.41837 12.06009 21.7743 11.24211 23.18976 c 10.42635 24.60522 9.7142 26.08463 9.1145 27.60591 c 5.52513 26.19044 l 5.91759 25.1917 6.35634 24.20837 6.83478 23.24928 c 5.35538 22.5107 l 4.05235 25.12334 3.04918 27.88152 2.36792 30.71906 c 3.97519 31.1049 l 4.22432 30.06204 4.52197 29.02579 4.86371 28.00719 c 8.52142 29.23305 l 8.0033 30.78079 7.59763 32.37263 7.3132 33.98212 c 7.031 35.5916 6.86783 37.22534 6.82375 38.85907 c 2.9676 38.75986 l 2.99406 37.68613 3.07123 36.61241 3.19249 35.5453 c 1.54994 35.3579 l 1.21922 38.25717 1.21922 41.19171 1.54994 44.0932 c 3.19249 43.90578 l 3.07123 42.83868 2.99406 41.76495 2.9676 40.69124 c 6.82375 40.59201 l 6.86783 42.22354 7.031 43.8595 7.3132 45.46898 c 7.59763 47.07845 8.0033 48.66809 8.52142 50.21806 c 4.86371 51.4439 l 4.52197 50.42531 4.22432 49.38905 3.97519 48.3462 c 2.36792 48.73203 l 3.04918 51.56956 4.05235 54.32774 5.35538 56.94038 c 6.83478 56.2018 l 6.35634 55.24272 5.91759 54.2594 5.52513 53.26064 c 9.1145 51.84517 l 9.7142 53.36646 10.42635 54.84586 11.24211 56.26132 c 12.06009 57.67679 12.98608 59.03273 14.00249 60.3115 c 10.98415 62.71469 l 10.3161 61.87468 9.68112 61.00378 9.09026 60.10864 c 7.71007 61.02144 l 9.32175 63.45549 11.20903 65.70215 13.32562 67.7129 c 14.46327 66.51352 l 13.685 65.7727 12.93758 64.99884 12.22543 64.19629 c 15.11589 61.63876 l 16.19843 62.86241 17.37358 64.0089 18.62589 65.06056 c 19.87819 66.11003 21.21208 67.0691 22.6055 67.92236 c 20.58813 71.21188 l 19.67314 70.65187 18.78021 70.04996 17.91815 69.41058 c 16.93483 70.74005 l 19.2807 72.47742 21.8228 73.94359 24.49939 75.10771 c 25.15863 73.59082 l 24.1753 73.1631 23.2074 72.69128 22.26376 72.17757 c 24.10474 68.78883 l 25.54004 69.56712 27.0371 70.24399 28.57161 70.804 c 30.10834 71.3618 31.68915 71.80716 33.28981 72.13347 c 32.52255 75.91246 l 31.47089 75.70079 30.42583 75.43843 29.3962 75.13416 c 28.92657 76.71939 l 31.72444 77.54839 34.61488 78.05768 37.52739 78.23628 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -47.725 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -3.855 -2.25 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 42.52 -47.725 Td[<0015001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -47.725 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 42.52 -47.725 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -47.725 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -42.52022 m 42.52022 -42.52022 m 42.52022 42.52022 l 99.21387 42.52022 l 99.21387 -42.52022 l h 99.21387 42.52022 m S Q Q n Q Q q 1 0 0 1 189.701 -47.725 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -42.52022 m -42.52022 -42.52022 m -42.52022 42.52022 l 42.52022 42.52022 l 42.52022 -42.52022 l h 42.52022 42.52022 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -39.884 0 cm 0 G 0 g q 1 0 0 1 189.701 -87.45 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 38.89876 79.45331 m 38.84363 79.45111 l 34.90813 79.34969 31.00787 78.66179 27.27519 77.41168 c 27.22227 77.39406 l 28.48122 73.63052 l 28.53412 73.64815 l 29.50201 73.97224 30.48756 74.25447 31.4819 74.49257 c 31.84128 72.99333 l 30.6022 72.69348 29.37413 72.3275 28.17696 71.89096 c 26.97755 71.45439 25.80463 70.9451 24.66254 70.37848 c 23.97246 71.76085 l 24.88744 72.21504 25.82446 72.63396 26.77472 73.00877 c 26.82544 73.02861 l 25.37029 76.71939 l 25.31956 76.69955 l 21.65744 75.25763 18.22682 73.27554 15.14676 70.82603 c 15.10266 70.79077 l 17.572 67.68645 l 17.6161 67.71951 l 18.41423 68.35449 19.24542 68.95639 20.09648 69.52301 c 20.94751 68.23544 l 19.88702 67.5299 18.85739 66.76706 17.88068 65.94688 c 16.90396 65.12671 15.97575 64.24701 15.09604 63.32321 c 13.97603 64.3881 l 14.67934 65.12671 15.41574 65.83885 16.1808 66.51572 c 16.22269 66.5532 l 13.5924 69.52522 l 13.5505 69.48775 l 10.60272 66.8795 8.05843 63.84573 6.00137 60.49008 c 5.9705 60.44157 l 9.35481 58.36908 l 9.38348 58.41539 l 9.91705 59.28627 10.49028 60.13512 11.0966 60.95749 c 12.34009 60.03809 l 11.58165 59.0129 10.87831 57.94356 10.24113 56.83897 c 9.60396 55.73438 9.03073 54.59012 8.51921 53.42159 c 7.10376 54.03893 l 7.51164 54.97374 7.96141 55.89534 8.44646 56.79266 c 8.47292 56.84117 l 4.98717 58.73508 l 4.96072 58.68657 l 3.08226 55.2273 1.72632 51.50563 0.94142 47.64949 c 0.9304 47.59438 l 4.81961 46.80286 l 4.83063 46.85797 l 5.03348 47.85674 5.28262 48.85109 5.57144 49.83221 c 7.05304 49.39346 l 6.69366 48.16982 6.39603 46.92412 6.17336 45.6696 c 5.95287 44.41289 5.80515 43.14293 5.72577 41.87079 c 4.18465 41.96338 l 4.24858 42.98419 4.3544 44.0028 4.50432 45.01257 c 4.51315 45.0677 l 0.58865 45.65417 l 0.58205 45.59906 l 0.0 41.70543 0.0 37.74565 0.58205 33.85204 c 0.58865 33.7969 l 4.51315 34.38339 l 4.50432 34.4385 l 4.3544 35.44829 4.24858 36.4691 4.18465 37.4877 c 5.72577 37.5803 l 5.80515 36.30815 5.95287 35.0382 6.17336 33.78148 c 6.39603 32.52696 6.69366 31.28127 7.05304 30.05762 c 5.57144 29.61887 l 5.28262 30.59999 5.03348 31.59436 4.83063 32.59311 c 4.81961 32.64824 l 0.9304 31.8567 l 0.94142 31.8016 l 1.72632 27.94545 3.08226 24.2238 4.96072 20.76451 c 4.98717 20.71602 l 8.47292 22.60771 l 8.44646 22.65842 l 7.96141 23.55574 7.51164 24.47736 7.10376 25.41217 c 8.51921 26.02951 l 9.03073 24.86098 9.60396 23.71451 10.24113 22.60991 c 10.87831 21.50752 11.58165 20.4382 12.34009 19.413 c 11.0966 18.4936 l 10.49028 19.31598 9.91705 20.16483 9.38348 21.0357 c 9.35481 21.082 l 5.9705 19.00731 l 6.00137 18.96101 l 8.05843 15.60536 10.60272 12.5716 13.5505 9.96333 c 13.5924 9.92587 l 16.22269 12.8979 l 16.1808 12.93536 l 15.41574 13.61224 14.67934 14.32437 13.97603 15.06297 c 15.09604 16.12788 l 15.97575 15.20409 16.90396 14.32437 17.88068 13.5042 c 18.85739 12.68404 19.88702 11.92119 20.94751 11.21565 c 20.09648 9.92807 l 19.24542 10.49469 18.41423 11.09439 17.6161 11.73157 c 17.572 11.76463 l 15.10266 8.66031 l 15.14676 8.62505 l 18.22682 6.17554 21.65744 4.19345 25.31956 2.75154 c 25.37029 2.73169 l 26.82544 6.42249 l 26.77472 6.44234 l 25.82446 6.81714 24.88744 7.23604 23.97246 7.69023 c 24.66254 9.07262 l 25.80463 8.50598 26.97755 7.99669 28.17696 7.56015 c 29.37413 7.1236 30.6022 6.7576 31.84128 6.45776 c 31.4819 4.95631 l 30.48756 5.19664 29.50201 5.47885 28.53412 5.80293 c 28.48122 5.82057 l 27.22227 2.05704 l 27.27519 2.0394 l 31.00787 0.78929 34.90813 0.10141 38.84363 0.0 c 38.89876 -0.00218 l 39.00237 3.96417 l 38.94727 3.96637 l 37.92645 3.99283 36.90343 4.06558 35.88925 4.18024 c 36.06342 5.71475 l 37.33118 5.57144 38.60773 5.49648 39.88428 5.49648 c 41.15865 5.49648 42.43741 5.57144 43.70294 5.71475 c 43.87933 4.18024 l 42.86293 4.06558 41.83992 3.99283 40.8191 3.96637 c 40.76399 3.96417 l 40.86981 -0.00218 l 40.92493 0.0 l 44.86046 0.10141 48.7607 0.78929 52.49336 2.0394 c 52.54628 2.05704 l 51.28737 5.82057 l 51.23445 5.80293 l 50.26656 5.47885 49.27882 5.19664 48.28667 4.95631 c 47.9273 6.45776 l 49.16637 6.7576 50.39223 7.1236 51.59161 7.56015 c 52.78882 7.99669 53.96396 8.50598 55.10602 9.07262 c 55.79391 7.69023 l 54.87894 7.23604 53.9441 6.81714 52.99387 6.44234 c 52.94315 6.42249 l 54.39609 2.73169 l 54.449 2.75154 l 58.11113 4.19345 61.53955 6.17554 64.62183 8.62505 c 64.66371 8.66031 l 62.19435 11.76463 l 62.15248 11.73157 l 61.35214 11.09439 60.52315 10.49469 59.6721 9.92807 c 58.81886 11.21565 l 59.88156 11.92119 60.90898 12.68404 61.8857 13.5042 c 62.86241 14.32437 63.79283 15.20409 64.67252 16.12788 c 65.79256 15.06297 l 65.08702 14.32437 64.35062 13.61224 63.58559 12.93536 c 63.54588 12.8979 l 66.17618 9.92587 l 66.21587 9.96333 l 69.16365 12.5716 71.71016 15.60536 73.76721 18.96101 c 73.79587 19.00731 l 70.41374 21.082 l 70.38289 21.0357 l 69.84933 20.16483 69.2761 19.31598 68.66977 18.4936 c 67.42848 19.413 l 68.18472 20.4382 68.89024 21.50752 69.52742 22.60991 c 70.16461 23.71451 70.73785 24.86098 71.24715 26.02951 c 72.66483 25.41217 l 72.25473 24.47736 71.80716 23.55574 71.3199 22.65842 c 71.29346 22.60771 l 74.7814 20.71602 l 74.80565 20.76451 l 76.68413 24.2238 78.04005 27.94545 78.82495 31.8016 c 78.83598 31.8567 l 74.94897 32.64824 l 74.93794 32.59311 l 74.73291 31.59436 74.48376 30.59999 74.19493 29.61887 c 72.71553 30.05762 l 73.07492 31.28127 73.37256 32.52696 73.59303 33.78148 c 73.8157 35.0382 73.96123 36.30815 74.0406 37.5803 c 75.58174 37.4877 l 75.52 36.4691 75.41196 35.44829 75.26204 34.4385 c 75.25322 34.38339 l 79.17772 33.7969 l 79.18654 33.85204 l 79.76859 37.74565 79.76859 41.70543 79.18654 45.59906 c 79.17772 45.65417 l 75.25322 45.0677 l 75.26204 45.01257 l 75.41196 44.0028 75.52 42.98419 75.58174 41.96338 c 74.0406 41.87079 l 73.96123 43.14293 73.8157 44.41289 73.59303 45.6696 c 73.37256 46.92412 73.07492 48.16982 72.71553 49.39346 c 74.19493 49.83221 l 74.48376 48.85109 74.73291 47.85674 74.93794 46.85797 c 74.94897 46.80286 l 78.83598 47.59438 l 78.82495 47.64949 l 78.04005 51.50563 76.68413 55.2273 74.80565 58.68657 c 74.7814 58.73508 l 71.29346 56.84117 l 71.3199 56.79266 l 71.80716 55.89534 72.25473 54.97374 72.66483 54.03893 c 71.24715 53.42159 l 70.73785 54.59012 70.16461 55.73438 69.52742 56.83897 c 68.89024 57.94356 68.18472 59.0129 67.42848 60.03809 c 68.66977 60.95749 l 69.2761 60.13512 69.84933 59.28627 70.38289 58.41539 c 70.41374 58.36908 l 73.79587 60.44157 l 73.76721 60.49008 l 71.71016 63.84573 69.16365 66.8795 66.21587 69.48775 c 66.17618 69.52522 l 63.54588 66.5532 l 63.58559 66.51572 l 64.35062 65.83885 65.08702 65.12671 65.79256 64.3881 c 64.67252 63.32321 l 63.79283 64.24701 62.86241 65.12671 61.8857 65.94688 c 60.90898 66.76706 59.88156 67.5299 58.81886 68.23544 c 59.6721 69.52301 l 60.52315 68.95639 61.35214 68.35449 62.15248 67.71951 c 62.19435 67.68645 l 64.66371 70.79077 l 64.62183 70.82603 l 61.53955 73.27554 58.11113 75.25763 54.449 76.69955 c 54.39609 76.71939 l 52.94315 73.02861 l 52.99387 73.00877 l 53.9441 72.63396 54.87894 72.21504 55.79391 71.76085 c 55.10602 70.37848 l 53.96396 70.9451 52.78882 71.45439 51.59161 71.89096 c 50.39223 72.3275 49.16637 72.69348 47.9273 72.99333 c 48.28667 74.49257 l 49.27882 74.25447 50.26656 73.97224 51.23445 73.64815 c 51.28737 73.63052 l 52.54628 77.39406 l 52.49336 77.41168 l 48.7607 78.66179 44.86046 79.34969 40.92493 79.45111 c 40.86981 79.45331 l 40.76399 75.48694 l 40.8191 75.48471 l 41.83992 75.45827 42.86293 75.38551 43.87933 75.27086 c 43.70294 73.73634 l 42.43741 73.87744 41.15865 73.9546 39.88428 73.9546 c 38.60773 73.9546 37.33118 73.87744 36.06342 73.73634 c 35.88925 75.27086 l 36.90343 75.38551 37.92645 75.45827 38.94727 75.48471 c 39.00237 75.48694 l 38.89876 79.45331 l 38.79294 79.33867 m 38.88994 75.59055 l 37.86472 75.56187 36.8395 75.49133 35.8231 75.3767 c 35.76797 75.37007 l 35.96642 73.61728 l 36.02153 73.62389 l 37.3025 73.76941 38.5945 73.84438 39.88428 73.84438 c 41.17407 73.84438 42.46388 73.76941 43.74484 73.62389 c 43.79996 73.61728 l 44.0006 75.37007 l 43.94548 75.3767 l 42.92686 75.49133 41.90164 75.56187 40.87865 75.59055 c 40.97565 79.33867 l 44.86266 79.23282 48.7144 78.55156 52.40518 77.3235 c 51.21681 73.76721 l 50.2445 74.09131 49.25677 74.37793 48.26021 74.61604 c 48.20729 74.62927 l 47.795 72.91396 l 47.84792 72.90073 l 49.10245 72.60089 50.3415 72.22827 51.55414 71.78732 c 52.76456 71.34637 53.95293 70.83485 55.10602 70.25941 c 55.15674 70.23297 l 55.94164 71.81157 l 55.89313 71.83583 l 54.97594 72.2922 54.03671 72.71112 53.08426 73.08813 c 54.45782 76.57608 l 58.07585 75.1452 61.46239 73.18956 64.50937 70.77312 c 62.17673 67.83858 l 61.37419 68.47575 60.543 69.08206 59.68753 69.64648 c 59.64125 69.67737 l 58.66895 68.20677 l 58.71523 68.1759 l 59.78896 67.46378 60.82741 66.6921 61.81514 65.8631 c 62.80287 65.0341 63.74432 64.14558 64.63284 63.21075 c 64.67032 63.17108 l 65.9491 64.38591 l 65.9116 64.4256 l 65.20609 65.1686 64.46527 65.88075 63.70023 66.55981 c 66.1828 69.36868 l 69.0931 66.78691 71.60652 63.79062 73.64374 60.47685 c 70.44682 58.51901 l 69.91106 59.3921 69.33783 60.24535 68.7271 61.06772 c 68.69403 61.11182 l 67.27856 60.06456 l 67.30943 60.02046 l 68.0767 58.98201 68.78664 57.90167 69.43263 56.78384 c 70.07642 55.66824 70.65848 54.51295 71.1722 53.329 c 71.19424 53.27827 l 72.81033 53.9838 l 72.7883 54.0323 l 72.3804 54.97153 71.92842 55.89534 71.44118 56.79709 c 74.7351 58.58514 l 76.5849 55.16556 77.92542 51.4902 78.70589 47.68036 c 75.03055 46.93294 l 74.8255 47.93611 74.57855 48.93266 74.28754 49.91599 c 74.2721 49.96892 l 72.58105 49.46843 l 72.59648 49.41551 l 72.96246 48.17863 73.26231 46.91971 73.485 45.64977 c 73.70988 44.3798 73.8598 43.09665 73.93918 41.80905 c 73.94138 41.75394 l 75.70079 41.86197 l 75.6986 41.9171 l 75.63686 42.9401 75.52661 43.9609 75.3767 44.97511 c 79.08511 45.5285 l 79.65395 41.68117 79.65395 37.76991 79.08511 33.92258 c 75.3767 34.47598 l 75.52661 35.49019 75.63686 36.5132 75.6986 37.53401 c 75.70079 37.58911 l 73.94138 37.69716 l 73.93918 37.64204 l 73.8598 36.35445 73.70988 35.07127 73.485 33.80132 c 73.26231 32.53137 72.96246 31.27246 72.59648 30.03557 c 72.58105 29.98265 l 74.2721 29.48218 l 74.28754 29.5351 l 74.57855 30.51622 74.8255 31.51497 75.03055 32.51814 c 78.70589 31.77072 l 77.92542 27.96089 76.5849 24.28554 74.7351 20.86594 c 71.44118 22.65399 l 71.92842 23.55574 72.3804 24.47955 72.7883 25.41878 c 72.81033 25.46729 l 71.19424 26.17061 l 71.1722 26.12212 l 70.65848 24.93814 70.07642 23.78285 69.43263 22.66504 c 68.78664 21.54942 68.0767 20.46907 67.30943 19.43063 c 67.27856 19.38654 l 68.69403 18.33926 l 68.7271 18.38336 l 69.33783 19.20575 69.91106 20.05899 70.44682 20.93208 c 73.64374 18.97423 l 71.60652 15.66048 69.0931 12.66418 66.1828 10.0824 c 63.70023 12.89128 l 64.46527 13.57034 65.20609 14.2825 65.9116 15.0255 c 65.9491 15.06519 l 64.67032 16.28 l 64.63284 16.24033 l 63.74432 15.3055 62.80287 14.41699 61.81514 13.588 c 60.82741 12.759 59.78896 11.98732 58.71523 11.27518 c 58.66895 11.24432 l 59.64125 9.77374 l 59.68753 9.8046 l 60.543 10.36902 61.37419 10.97534 62.17673 11.6125 c 64.50937 8.68018 l 61.46239 6.26154 58.07585 4.30591 54.45782 2.875 c 53.08426 6.36295 l 54.03671 6.73997 54.97815 7.15887 55.89313 7.61525 c 55.94164 7.63951 l 55.15674 9.21814 l 55.10602 9.19167 l 53.95293 8.61623 52.76456 8.10472 51.55414 7.66377 c 50.3415 7.22282 49.10245 6.8502 47.84792 6.55035 c 47.795 6.53712 l 48.20729 4.82182 l 48.26021 4.83504 l 49.25677 5.07315 50.2445 5.35979 51.21681 5.68387 c 52.40518 2.12758 l 48.7144 0.89952 44.86266 0.21826 40.97565 0.11243 c 40.87865 3.86053 l 41.90164 3.8892 42.92686 3.95976 43.94548 4.0744 c 44.0006 4.08101 l 43.79996 5.83382 l 43.74484 5.82718 l 42.46388 5.68169 41.17407 5.6067 39.88428 5.6067 c 38.5945 5.6067 37.3025 5.68169 36.02153 5.82718 c 35.96642 5.83382 l 35.76797 4.08101 l 35.8231 4.0744 l 36.8395 3.95976 37.86472 3.8892 38.88994 3.86053 c 38.79294 0.11243 l 34.9037 0.21826 31.05199 0.89952 27.36119 2.12758 c 28.55177 5.68387 l 29.52408 5.35979 30.51181 5.07315 31.50836 4.83504 c 31.56128 4.82182 l 31.97357 6.53712 l 31.92065 6.55035 l 30.66614 6.8502 29.42485 7.22282 28.21443 7.66377 c 27.0018 8.10472 25.81343 8.61623 24.66035 9.19167 c 24.61185 9.21814 l 23.82474 7.63951 l 23.87325 7.61525 l 24.79042 7.15887 25.72966 6.73997 26.68433 6.36295 c 25.30855 2.875 l 21.69273 4.30591 18.3062 6.26154 15.2592 8.68018 c 17.59184 11.6125 l 18.39438 10.97534 19.22559 10.36902 20.07883 9.8046 c 20.12514 9.77374 l 21.09964 11.24432 l 21.05333 11.27518 l 19.97742 11.98732 18.94118 12.759 17.95343 13.588 c 16.96568 14.41699 16.02206 15.3055 15.13574 16.24033 c 15.09825 16.28 l 13.81949 15.06519 l 13.85698 15.0255 l 14.5625 14.2825 15.3033 13.57034 16.06834 12.89128 c 13.58359 10.0824 l 10.67548 12.66418 8.16205 15.66048 6.12483 18.97423 c 9.32175 20.93208 l 9.85751 20.05899 10.43076 19.20575 11.03928 18.38336 c 11.07234 18.33926 l 12.49002 19.38654 l 12.45694 19.43063 l 11.69188 20.46907 10.97974 21.54942 10.33595 22.66504 c 9.68994 23.78285 9.11009 24.93814 8.59639 26.12212 c 8.57434 26.17061 l 6.95604 25.46729 l 6.97807 25.41878 l 7.38597 24.47955 7.84015 23.55574 8.32741 22.65399 c 5.03348 20.86594 l 3.18146 24.28554 1.84317 27.96089 1.06268 31.77072 c 4.73584 32.51814 l 4.94087 31.51497 5.19 30.51622 5.48105 29.5351 c 5.49648 29.48218 l 7.18753 29.98265 l 7.1721 30.03557 l 6.80612 31.27246 6.50626 32.53137 6.28358 33.80132 c 6.0587 35.07127 5.90877 36.35445 5.8294 37.64204 c 5.82718 37.69716 l 4.06558 37.58911 l 4.06999 37.53401 l 4.13173 36.5132 4.24197 35.49019 4.39189 34.47598 c 0.68346 33.92258 l 0.11462 37.76991 0.11462 41.68117 0.68346 45.5285 c 4.39189 44.97511 l 4.24197 43.9609 4.13173 42.9379 4.06999 41.9171 c 4.06558 41.86197 l 5.82718 41.75394 l 5.8294 41.80905 l 5.90877 43.09665 6.0587 44.3798 6.28358 45.64977 c 6.28137 45.64977 l 6.50626 46.91971 6.80612 48.17863 7.1721 49.41551 c 7.18753 49.46843 l 5.49648 49.96892 l 5.48105 49.91599 l 5.19 48.93266 4.94087 47.93611 4.73584 46.93294 c 1.06268 47.68036 l 1.84317 51.4902 3.18146 55.16556 5.03348 58.58514 c 8.32741 56.79709 l 7.84015 55.89534 7.38597 54.97153 6.97807 54.0323 c 6.95604 53.9838 l 8.57434 53.27827 l 8.59639 53.329 l 9.11009 54.51295 9.68994 55.66824 10.33595 56.78384 c 10.97974 57.90167 11.69188 58.98201 12.45694 60.02046 c 12.49002 60.06456 l 11.07234 61.11182 l 11.03928 61.06772 l 10.43076 60.24535 9.85751 59.3921 9.32175 58.51901 c 6.12483 60.47685 l 8.16205 63.79062 10.67548 66.78691 13.58359 69.36868 c 16.06834 66.55981 l 15.3033 65.88075 14.5625 65.1686 13.85698 64.4256 c 13.81949 64.38591 l 15.09825 63.17108 l 15.13574 63.21075 l 16.02206 64.14558 16.96568 65.0341 17.95343 65.8631 c 18.94118 66.6921 19.97742 67.46378 21.05333 68.1759 c 21.09964 68.20677 l 20.12514 69.67737 l 20.07883 69.64648 l 19.22559 69.08206 18.39438 68.47575 17.59184 67.83858 c 15.2592 70.77312 l 18.3062 73.18956 21.69273 75.1452 25.30855 76.57608 c 26.68213 73.08813 l 25.72966 72.71112 24.79042 72.2922 23.87325 71.83583 c 23.82474 71.81157 l 24.61185 70.23297 l 24.66035 70.25941 l 25.81343 70.83485 27.0018 71.34637 28.21443 71.78732 c 29.42485 72.22827 30.66614 72.60089 31.92065 72.90073 c 31.97357 72.91396 l 31.56128 74.62927 l 31.50836 74.61604 l 30.51181 74.37793 29.52408 74.09131 28.55177 73.76721 c 27.36119 77.3235 l 31.05199 78.55156 34.9037 79.23282 38.79294 79.33867 c 37.5803 78.2936 m 37.52518 78.2914 l 34.60606 78.11281 31.71341 77.6013 28.91115 76.77011 c 28.85823 76.75467 l 29.3587 75.06361 l 29.41162 75.08125 l 30.42142 75.37889 31.44664 75.63466 32.47845 75.8463 c 33.22588 72.17316 l 31.64064 71.84906 30.07527 71.40811 28.55397 70.85469 c 27.03268 70.30132 25.55107 69.63106 24.1268 68.86159 c 22.33871 72.15552 l 23.26692 72.65599 24.21498 73.1212 25.18066 73.54012 c 25.23138 73.56215 l 24.52806 75.18047 l 24.47736 75.15842 l 21.79634 73.9921 19.25203 72.52373 16.90175 70.78416 c 16.85767 70.75108 l 17.90714 69.33342 l 17.95123 69.36649 l 18.79787 69.99484 19.67537 70.58353 20.5727 71.13472 c 22.53055 67.93999 l 21.15256 67.09116 19.8297 66.14311 18.5906 65.10246 c 17.34932 64.06181 16.18741 62.92635 15.1115 61.71594 c 12.30481 64.1985 l 13.00372 64.98561 13.73792 65.74846 14.50076 66.47382 c 14.54044 66.5113 l 13.32782 67.79007 l 13.28813 67.7526 l 11.16716 65.73964 9.27765 63.48856 7.66597 61.0501 c 7.63512 61.00598 l 9.10349 60.03148 l 9.13655 60.07779 l 9.71642 60.95529 10.34036 61.81073 10.99518 62.63531 c 13.9275 60.30267 l 12.92215 59.03493 12.00496 57.69002 11.19582 56.28778 c 10.38445 54.88776 9.68112 53.42159 9.08585 51.91573 c 5.5979 53.28929 l 5.98593 54.27042 6.41367 55.23611 6.88329 56.17755 c 6.90973 56.22826 l 5.33112 57.01315 l 5.30687 56.96465 l 4.00163 54.3498 2.99628 51.5872 2.31279 48.74525 c 2.30177 48.69235 l 4.01488 48.28006 l 4.0281 48.33296 l 4.27502 49.35818 4.56827 50.37459 4.90118 51.37335 c 8.45528 50.18277 l 7.94377 48.64825 7.5403 47.07184 7.26028 45.47778 c 6.98029 43.88374 6.81714 42.26544 6.77304 40.64714 c 3.02493 40.74416 l 3.0536 41.79803 3.12856 42.85191 3.2476 43.89917 c 3.25201 43.9543 l 1.50143 44.15273 l 1.49481 44.09981 l 1.1641 41.19392 1.1641 38.25717 1.49481 35.35129 c 1.50143 35.29837 l 3.25201 35.4968 l 3.2476 35.55191 l 3.12856 36.59918 3.0536 37.65306 3.02493 38.70694 c 6.77304 38.80396 l 6.81714 37.18564 6.98029 35.56735 7.26028 33.9733 c 7.26028 33.9733 l 7.5403 32.37924 7.94377 30.80284 8.45528 29.26831 c 4.89899 28.07774 l 4.56827 29.0787 4.27283 30.0929 4.0281 31.11812 c 4.01488 31.17104 l 2.30177 30.75873 l 2.31279 30.70583 l 2.99628 27.86388 4.00163 25.1013 5.30687 22.48643 c 5.33112 22.43793 l 6.90973 23.22284 l 6.88548 23.27354 l 6.41586 24.21498 5.98593 25.18066 5.5979 26.16179 c 9.08585 27.53537 l 9.68112 26.02951 10.38445 24.56334 11.19582 23.1611 c 12.00496 21.76108 12.92215 20.41615 13.9275 19.14842 c 10.99518 16.81577 l 10.34036 17.64035 9.71642 18.4958 9.13655 19.3733 c 9.10349 19.4196 l 7.63512 18.4451 l 7.66597 18.401 l 9.27765 15.96252 11.16716 13.71144 13.28813 11.69849 c 13.32782 11.66103 l 14.54044 12.93977 l 14.50076 12.97726 l 13.73792 13.70264 13.00372 14.46548 12.30481 15.25258 c 15.1115 17.73515 l 16.18741 16.52473 17.34932 15.38928 18.5906 14.34863 c 19.8297 13.30798 21.15256 12.35992 22.53055 11.5111 c 20.5727 8.31639 l 19.67537 8.86757 18.79787 9.45625 17.95123 10.08461 c 17.90714 10.11548 l 16.85767 8.6978 l 16.90175 8.66693 l 19.25203 6.92737 21.79634 5.459 24.47736 4.29266 c 24.52806 4.27063 l 25.23138 5.88672 l 25.18066 5.91098 l 24.21498 6.32988 23.26692 6.79509 22.33871 7.29558 c 24.1268 10.5895 l 25.55107 9.82002 27.03268 9.1498 28.55397 8.59639 c 30.07527 8.043 31.64064 7.60204 33.22588 7.27792 c 32.47845 3.6048 l 31.44664 3.81645 30.42142 4.07219 29.41162 4.36983 c 29.3587 4.38527 l 28.85823 2.69641 l 28.91115 2.67877 l 31.71341 1.84978 34.60606 1.33829 37.52518 1.15968 c 37.5803 1.15749 l 37.68613 2.91689 l 37.63322 2.92131 l 36.58154 2.98523 35.52986 3.09769 34.48921 3.25201 c 35.04262 6.95824 l 36.64328 6.72234 38.26378 6.59886 39.88428 6.59886 c 41.5026 6.59886 43.1231 6.72234 44.72597 6.95824 c 45.27936 3.25201 l 44.2365 3.09769 43.18703 2.98523 42.13536 2.92131 c 42.08025 2.91689 l 42.18828 1.15749 l 42.2434 1.15968 l 45.16031 1.33829 48.05516 1.84978 50.85744 2.67877 c 50.91035 2.69641 l 50.40765 4.38527 l 50.35693 4.36983 l 49.34717 4.07219 48.31973 3.81645 47.2879 3.6048 c 46.5427 7.27792 l 48.12791 7.60204 49.69331 8.043 51.2146 8.59639 c 52.7359 9.1498 54.2175 9.82002 55.63959 10.5895 c 57.42766 7.29558 l 56.50165 6.79509 55.5536 6.32988 54.5879 5.91098 c 54.5372 5.88672 l 55.24051 4.27063 l 55.29123 4.29266 l 57.97002 5.459 60.51653 6.92737 62.86682 8.66693 c 62.91092 8.6978 l 61.86145 10.11548 l 61.81735 10.08461 l 60.97072 9.45625 60.09322 8.86757 59.19588 8.31639 c 57.23804 11.5111 l 58.61603 12.35992 59.93668 13.30798 61.17796 14.34863 c 62.41705 15.38928 63.58118 16.52473 64.65489 17.73515 c 67.46155 15.25258 l 66.76265 14.46548 66.03067 13.70264 65.26561 12.97726 c 65.22592 12.93977 l 66.44075 11.66103 l 66.48044 11.69849 l 68.59923 13.71144 70.48871 15.96252 72.1026 18.401 c 72.13347 18.4451 l 70.66289 19.4196 l 70.63202 19.3733 l 70.04996 18.4958 69.42822 17.64035 68.77339 16.81577 c 65.84105 19.14842 l 66.84644 20.41615 67.76361 21.76108 68.57277 23.1611 c 69.38191 24.56334 70.08743 26.02951 70.68272 27.53537 c 74.16847 26.16179 l 73.78264 25.18066 73.35272 24.21498 72.8831 23.27354 c 72.85886 23.22284 l 74.43745 22.43793 l 74.46172 22.48643 l 75.76472 25.1013 76.77231 27.86388 77.45358 30.70583 c 77.46681 30.75873 l 75.7515 31.17104 l 75.74048 31.11812 l 75.49355 30.0929 75.2003 29.0787 74.8674 28.07774 c 71.3133 29.26831 l 71.82481 30.80284 72.22606 32.37924 72.50827 33.9733 c 72.7883 35.56735 72.94923 37.18564 72.99554 38.80396 c 76.74146 38.70694 l 76.71278 37.65306 76.64001 36.59918 76.52097 35.55191 c 76.51434 35.4968 l 78.26715 35.29837 l 78.27376 35.35129 l 78.60448 38.25717 78.60448 41.19392 78.27376 44.09981 c 78.26715 44.15273 l 76.51434 43.9543 l 76.52097 43.89917 l 76.64001 42.85191 76.71278 41.79803 76.74146 40.74416 c 72.99554 40.64714 l 72.94923 42.26544 72.7883 43.88374 72.50827 45.47778 c 72.50827 45.47778 l 72.22606 47.07184 71.82481 48.64825 71.3133 50.18277 c 74.8674 51.37335 l 75.2003 50.37459 75.49355 49.35818 75.73827 48.33296 c 75.7515 48.28006 l 77.46681 48.69235 l 77.45358 48.74525 l 76.77231 51.5872 75.76472 54.3498 74.46172 56.96465 c 74.43745 57.01315 l 72.85886 56.22826 l 72.8831 56.17755 l 73.35272 55.23611 73.78044 54.27042 74.16847 53.28929 c 70.68272 51.91573 l 70.08743 53.42159 69.38191 54.88776 68.57277 56.28778 c 67.76361 57.69002 66.84644 59.03493 65.84105 60.30267 c 68.77339 62.63531 l 69.42822 61.81073 70.04996 60.95529 70.63202 60.07779 c 70.66289 60.03148 l 72.13347 61.00598 l 72.1026 61.0501 l 70.48871 63.48856 68.59923 65.73964 66.48044 67.7526 c 66.44075 67.79007 l 65.22592 66.5113 l 65.26561 66.47382 l 66.03067 65.74846 66.76265 64.98561 67.46155 64.1985 c 64.65489 61.71594 l 63.58118 62.92635 62.41705 64.06181 61.17796 65.10246 c 59.93668 66.14311 58.61603 67.09116 57.23804 67.93999 c 59.19588 71.13472 l 60.09322 70.58353 60.97072 69.99484 61.81735 69.36649 c 61.86145 69.33342 l 62.91092 70.75108 l 62.86682 70.78416 l 60.51653 72.52373 57.97002 73.9921 55.29123 75.15842 c 55.24051 75.18047 l 54.5372 73.56215 l 54.5879 73.54012 l 55.5536 73.1212 56.50165 72.65599 57.42766 72.15552 c 55.63959 68.86159 l 54.2175 69.63106 52.7359 70.30132 51.2146 70.85469 c 49.69331 71.40811 48.12791 71.84906 46.5427 72.17316 c 47.2879 75.8463 l 48.31973 75.63466 49.34717 75.37889 50.35693 75.08125 c 50.40987 75.06361 l 50.91035 76.75467 l 50.85744 76.77011 l 48.05516 77.6013 45.16031 78.11281 42.2434 78.2914 c 42.18828 78.2936 l 42.08025 76.5342 l 42.13536 76.52977 l 43.18703 76.46585 44.2365 76.35341 45.27936 76.20128 c 44.72597 72.49284 l 43.1231 72.72874 41.5026 72.85222 39.88428 72.85222 c 38.26378 72.85222 36.64328 72.72874 35.04262 72.49284 c 34.48921 76.20128 l 35.52986 76.35341 36.58154 76.46585 37.63322 76.52977 c 37.68834 76.5342 l 37.5803 78.2936 l 37.47668 78.17455 m 37.57149 76.6334 l 36.51761 76.56726 35.46153 76.45923 34.41866 76.30269 c 34.36354 76.29387 l 34.95001 72.36938 l 35.00293 72.3782 l 36.61682 72.61852 38.25276 72.74199 39.88428 72.74199 c 41.51582 72.74199 43.14957 72.61852 44.76344 72.3782 c 44.81857 72.36938 l 45.40503 76.29387 l 45.34991 76.30269 l 44.30486 76.45923 43.25098 76.56726 42.1971 76.6334 c 42.28969 78.17455 l 45.16252 77.99596 48.01108 77.49106 50.77365 76.6797 c 50.3349 75.2003 l 49.32071 75.49794 48.29329 75.7559 47.25705 75.96756 c 47.20413 75.97859 l 46.41261 72.08937 l 46.46553 72.07835 l 48.06398 71.75424 49.6426 71.30888 51.17712 70.75108 c 52.70944 70.19327 54.20207 69.51862 55.63737 68.74033 c 55.68588 68.71388 l 57.57758 72.19962 l 57.53127 72.22606 l 56.60307 72.73097 55.6484 73.19395 54.68051 73.61728 c 55.29564 75.03275 l 57.93254 73.88185 60.43936 72.43552 62.75438 70.72684 c 61.83719 69.48555 l 60.98615 70.1139 60.10864 70.70699 59.2069 71.25818 c 59.1606 71.28685 l 57.08812 67.90472 l 57.13441 67.87607 l 58.52562 67.02281 59.85732 66.06593 61.10742 65.01868 c 62.35751 63.96921 63.53046 62.82494 64.6108 61.60349 c 64.64607 61.56158 l 67.6181 64.18968 l 67.58282 64.23157 l 66.8817 65.02309 66.14531 65.78593 65.38025 66.51352 c 66.44075 67.63133 l 68.52647 65.64703 70.3873 63.43123 71.97914 61.03465 c 70.69154 60.1814 l 70.10728 61.06331 69.48555 61.92097 68.82631 62.74777 c 68.79324 62.79185 l 65.68672 60.3203 l 65.72198 60.27843 l 66.73619 59.00185 67.66219 57.64592 68.47795 56.23267 c 69.29373 54.82161 70.00366 53.34442 70.60115 51.82533 c 70.621 51.77461 l 74.31398 53.22977 l 74.29414 53.28047 l 73.90611 54.26381 73.47397 55.2317 73.00436 56.17755 c 74.38455 56.86543 l 75.66551 54.28806 76.65546 51.56956 77.33232 48.77173 c 75.83087 48.41234 l 75.58394 49.43756 75.29071 50.45837 74.95558 51.45932 c 74.93794 51.51225 l 71.1766 50.25333 l 71.19424 50.2026 l 71.71016 48.65486 72.11583 47.06523 72.40025 45.45795 c 72.68246 43.85287 72.84561 42.21915 72.8875 40.58983 c 72.88971 40.5347 l 76.8561 40.63832 l 76.8561 40.69344 l 76.82744 41.74953 76.75026 42.80782 76.6334 43.85728 c 78.16792 44.03146 l 78.48763 41.17188 78.48763 38.2792 78.16792 35.41963 c 76.6334 35.5938 l 76.75026 36.64328 76.82744 37.70157 76.8561 38.75764 c 76.8561 38.81277 l 72.88971 38.91638 l 72.8875 38.86127 l 72.84561 37.22974 72.68246 35.59822 72.40025 33.99313 c 72.11583 32.38586 71.71016 30.79622 71.19424 29.25069 c 71.1766 29.19777 l 74.93794 27.93884 l 74.95558 27.98956 l 75.29071 28.99272 75.58394 30.01132 75.83087 31.03876 c 77.33232 30.67937 l 76.65546 27.88152 75.66551 25.16304 74.38455 22.58566 c 73.00436 23.27354 l 73.47397 24.21939 73.90611 25.18729 74.29414 26.17061 c 74.31398 26.22133 l 70.621 27.67647 l 70.60115 27.62576 l 70.00366 26.10667 69.29373 24.62947 68.47795 23.21623 c 67.66219 21.80516 66.73619 20.44923 65.72198 19.17267 c 65.68672 19.13078 l 68.79324 16.65923 l 68.82631 16.70332 l 69.48555 17.5301 70.10728 18.38777 70.69154 19.26749 c 71.97914 18.41643 l 70.3873 16.01765 68.52647 13.80406 66.44075 11.81976 c 65.38025 12.93758 l 66.14531 13.66736 66.8817 14.42801 67.58282 15.21951 c 67.6181 15.2592 l 64.64607 17.8895 l 64.6108 17.8476 l 63.53046 16.62616 62.35751 15.48189 61.10742 14.43242 c 59.85732 13.38515 58.52562 12.42828 57.13441 11.57504 c 57.08812 11.54637 l 59.1606 8.16425 l 59.2069 8.19069 l 60.10864 8.74411 60.98615 9.33719 61.83719 9.96555 c 62.75438 8.72426 l 60.43936 7.01556 57.93254 5.56924 55.29564 4.41833 c 54.68051 5.83382 l 55.6484 6.25713 56.60307 6.72012 57.53127 7.22502 c 57.57758 7.24927 l 55.68588 10.73721 l 55.63737 10.71075 l 54.20207 9.93248 52.70944 9.25781 51.17712 8.70001 c 49.6426 8.1422 48.06398 7.69684 46.46553 7.37274 c 46.41261 7.36172 l 47.20413 3.47249 l 47.25705 3.48352 l 48.29329 3.69519 49.32071 3.95313 50.3349 4.25078 c 50.77145 2.7714 l 48.01108 1.95782 45.16252 1.45514 42.28969 1.27655 c 42.1971 2.81767 l 43.25098 2.88162 44.30486 2.99187 45.34991 3.14839 c 45.40503 3.15721 l 44.81857 7.08171 l 44.76344 7.07288 l 43.14957 6.83257 41.51582 6.70909 39.88428 6.70909 c 38.25276 6.70909 36.61682 6.83257 35.00293 7.07288 c 34.95001 7.08171 l 34.36354 3.15721 l 34.41866 3.14839 l 35.46153 2.99187 36.51761 2.88162 37.57149 2.81767 c 37.47668 1.27655 l 34.60387 1.45514 31.7553 1.95782 28.99492 2.7714 c 29.43367 4.25078 l 30.44566 3.95313 31.4753 3.69519 32.51154 3.48352 c 32.56445 3.47249 l 33.35596 7.36172 l 33.30084 7.37274 l 31.70238 7.69684 30.12378 8.1422 28.59145 8.70001 c 27.05913 9.25781 25.5643 9.93248 24.1312 10.71075 c 24.08269 10.73721 l 22.1888 7.24927 l 22.2373 7.22502 l 23.16551 6.72012 24.11798 6.25713 25.08807 5.83382 c 24.47295 4.41833 l 21.83383 5.56924 19.32921 7.01556 17.012 8.72426 c 17.93138 9.96555 l 18.78242 9.33719 19.65993 8.74411 20.55946 8.19069 c 20.60577 8.16425 l 22.68047 11.54637 l 22.63416 11.57504 l 21.24295 12.42828 19.91127 13.38515 18.66116 14.43242 c 17.41106 15.48189 16.23813 16.62616 15.15558 17.8476 c 15.1203 17.8895 l 12.14827 15.2592 l 12.18575 15.21951 l 12.88467 14.42801 13.62326 13.66736 14.38832 12.93758 c 13.32562 11.81976 l 11.24211 13.80406 9.38129 16.01765 7.78944 18.41643 c 9.07701 19.26749 l 9.66129 18.38777 10.28304 17.5301 10.94005 16.70332 c 10.97534 16.65923 l 14.07965 19.13078 l 14.04657 19.17267 l 13.03018 20.44923 12.10638 21.80516 11.29062 23.21623 c 10.47485 24.62947 9.7627 26.10667 9.16522 27.62576 c 9.14537 27.67647 l 5.45459 26.22133 l 5.47444 26.17061 l 5.86026 25.18729 6.2946 24.21939 6.76422 23.27354 c 5.38403 22.58566 l 4.10307 25.16304 3.11092 27.88152 2.43626 30.67937 c 3.9377 31.03876 l 4.18465 30.01132 4.47566 28.99272 4.81079 27.98956 c 4.82843 27.93884 l 8.59198 29.19777 l 8.57434 29.25069 l 8.05621 30.79622 7.65054 32.38586 7.36833 33.99313 c 7.08612 35.59822 6.92296 37.22974 6.87888 38.86127 c 6.87888 38.91638 l 2.91249 38.81277 l 2.91249 38.75764 l 2.93895 37.70157 3.01611 36.64328 3.13297 35.5938 c 1.60063 35.41963 l 1.27875 38.2792 1.27875 41.17188 1.60063 44.03146 c 3.13297 43.85728 l 3.01611 42.80782 2.93895 41.74953 2.91249 40.69344 c 2.91249 40.63832 l 6.87888 40.5347 l 6.87888 40.58983 l 6.92296 42.21915 7.08612 43.85287 7.36833 45.45795 c 7.65054 47.06523 8.05621 48.65486 8.57434 50.2026 c 8.59198 50.25333 l 4.82843 51.51225 l 4.81079 51.45932 l 4.47566 50.45837 4.18465 49.43756 3.9377 48.41234 c 2.43626 48.77173 l 3.11092 51.56956 4.10307 54.28806 5.38403 56.86543 c 6.76422 56.17755 l 6.2946 55.2317 5.86026 54.26381 5.47444 53.28047 c 5.45459 53.22977 l 9.14537 51.77461 l 9.16522 51.82533 l 9.7627 53.34442 10.47485 54.82161 11.29062 56.23267 c 12.10638 57.64592 13.03018 59.00185 14.04657 60.27843 c 14.07965 60.3203 l 10.97534 62.79185 l 10.94005 62.74777 l 10.28304 61.92097 9.66129 61.06331 9.07701 60.1814 c 7.78944 61.03465 l 9.38129 63.43123 11.24211 65.64703 13.32562 67.63133 c 14.38832 66.51352 l 13.62326 65.78593 12.88467 65.02309 12.18575 64.23157 c 12.14827 64.18968 l 15.1203 61.56158 l 15.15558 61.60349 l 16.23813 62.82494 17.41106 63.96921 18.66116 65.01868 c 19.91127 66.06593 21.24295 67.02281 22.63416 67.87607 c 22.68047 67.90472 l 20.60577 71.28685 l 20.55946 71.25818 l 19.65993 70.70699 18.78242 70.1139 17.93138 69.48555 c 17.012 70.72684 l 19.32921 72.43552 21.83383 73.88185 24.47295 75.03275 c 25.08807 73.61728 l 24.11798 73.19395 23.16551 72.73097 22.2373 72.22606 c 22.1888 72.19962 l 24.08269 68.71388 l 24.1312 68.74033 l 25.5643 69.51862 27.05913 70.19327 28.59145 70.75108 c 30.12378 71.30888 31.70238 71.75424 33.30084 72.07835 c 33.35596 72.08937 l 32.56445 75.97859 l 32.51154 75.96756 l 31.4753 75.7559 30.44566 75.49794 29.43367 75.2003 c 28.99492 76.6797 l 31.7575 77.49106 34.60387 77.99596 37.47668 78.17455 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -47.725 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -3.855 -2.25 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 189.701 -47.725 Td[<00160011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -47.725 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 189.701 -47.725 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -47.725 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -42.52022 m 42.52022 -42.52022 m 42.52022 42.52022 l 99.21387 42.52022 l 99.21387 -42.52022 l h 99.21387 42.52022 m S Q Q n Q Q q 1 0 0 1 336.883 -47.725 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -42.52022 m -42.52022 -42.52022 m -42.52022 42.52022 l 42.52022 42.52022 l 42.52022 -42.52022 l h 42.52022 42.52022 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -40.024 0 cm 0 G 0 g q 1 0 0 1 336.883 -87.579 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 40.02539 79.70906 m 37.02911 79.70906 34.03282 79.37173 31.09607 78.69267 c 32.58429 72.24812 l 34.64796 72.72435 36.75572 73.00215 38.8701 73.07712 c 38.73561 76.93326 l 37.66408 76.89578 36.58817 76.8098 35.52324 76.6797 c 35.65773 75.58615 l 36.27728 75.6611 36.90123 75.72064 37.52518 75.76472 c 37.63983 74.11557 l 36.25304 74.01854 34.86844 73.83556 33.50368 73.57098 c 32.66145 77.89894 l 37.52298 78.84479 42.5256 78.84479 47.38713 77.89894 c 46.5449 73.57098 l 45.18015 73.83556 43.79555 74.01854 42.40875 74.11557 c 42.52339 75.76472 l 43.14734 75.72064 43.77129 75.6611 44.39084 75.58615 c 44.52533 76.6797 l 43.46043 76.8098 42.38449 76.89578 41.31297 76.93326 c 41.17848 73.07712 l 43.29288 73.00215 45.40283 72.72435 47.4643 72.24812 c 48.9525 78.69267 l 46.01576 79.37173 43.01947 79.70906 40.02539 79.70906 c 28.42169 77.9761 m 22.65622 76.21451 17.36476 73.15869 12.95743 69.049 c 17.46838 64.21173 l 19.01613 65.65585 20.70499 66.95006 22.49747 68.07007 c 20.45364 71.34416 l 19.54308 70.77533 18.65675 70.16461 17.79909 69.51862 c 18.46274 68.63892 l 18.96101 69.01372 19.47252 69.3775 19.99065 69.72806 c 20.91443 68.35669 l 19.76135 67.57841 18.65234 66.72737 17.60287 65.8168 c 14.71022 69.1438 l 18.44731 72.39363 22.77966 74.89384 27.46262 76.50552 c 28.89792 72.3363 l 27.58388 71.88432 26.29408 71.34857 25.04398 70.74005 c 24.31862 72.22606 l 24.88083 72.49947 25.44966 72.75963 26.0251 73.00436 c 25.59517 74.01854 l 24.60744 73.59964 23.63513 73.13664 22.68707 72.63174 c 24.4972 69.22537 l 26.36684 70.21751 28.3313 71.0333 30.35527 71.65062 c 28.42169 77.9761 l 51.62689 77.9761 m 49.69331 71.65062 l 51.71729 71.0333 53.68173 70.21751 55.55139 69.22537 c 57.36151 72.63174 l 56.41345 73.13664 55.44115 73.59964 54.45341 74.01854 c 54.02348 73.00436 l 54.59894 72.75963 55.16776 72.49947 55.72998 72.22606 c 55.00461 70.74005 l 53.7545 71.34857 52.4647 71.88432 51.15067 72.3363 c 52.58598 76.50552 l 57.2689 74.89384 61.60129 72.39363 65.33836 69.1438 c 62.44571 65.8168 l 61.39624 66.72737 60.28723 67.57841 59.13414 68.35669 c 60.05795 69.72806 l 60.57607 69.3775 61.08757 69.01372 61.58585 68.63892 c 62.24948 69.51862 l 61.39183 70.16461 60.50551 70.77533 59.59494 71.34416 c 57.54892 68.07007 l 59.3436 66.95006 61.03246 65.65585 62.5802 64.21173 c 67.09116 69.049 l 62.68163 73.15869 57.39017 76.21451 51.62689 77.9761 c 10.99959 67.09116 m 6.8899 62.68382 3.83408 57.39236 2.07246 51.62689 c 8.39795 49.69331 l 9.0153 51.71729 9.83105 53.68173 10.82321 55.55139 c 7.41684 57.36151 l 6.91194 56.41345 6.44894 55.44115 6.03004 54.45341 c 7.04422 54.02348 l 7.28896 54.59894 7.54912 55.16776 7.82251 55.72998 c 9.30853 55.00461 l 8.70001 53.7545 8.16425 52.4647 7.71228 51.15067 c 3.54306 52.58598 l 5.15474 57.2689 7.65495 61.60129 10.90479 65.33836 c 14.23178 62.44571 l 13.32121 61.39624 12.47015 60.28723 11.69188 59.13414 c 10.32051 60.05795 l 10.67107 60.57607 11.03487 61.08757 11.40967 61.58585 c 10.52997 62.24948 l 9.88397 61.39183 9.27324 60.50551 8.70442 59.59494 c 11.9785 57.55112 l 13.09854 59.3436 14.39273 61.03246 15.83685 62.5802 c 10.99959 67.09116 l 69.049 67.09116 m 64.21173 62.5802 l 65.65585 61.03246 66.95006 59.3436 68.07007 57.55112 c 71.34416 59.59494 l 70.77533 60.50551 70.16461 61.39183 69.51862 62.24948 c 68.63892 61.58585 l 69.01372 61.08757 69.3775 60.57607 69.72806 60.05795 c 68.35669 59.13414 l 67.57841 60.28723 66.72737 61.39624 65.8168 62.44571 c 69.1438 65.33836 l 72.39363 61.60129 74.89384 57.2689 76.50552 52.58598 c 72.3363 51.15067 l 71.88432 52.4647 71.34857 53.7545 70.74005 55.00461 c 72.22606 55.72998 l 72.49947 55.16776 72.75963 54.59894 73.00436 54.02348 c 74.01854 54.45341 l 73.59964 55.44115 73.13664 56.41345 72.63174 57.36151 c 69.22537 55.55139 l 70.21751 53.68173 71.0333 51.71729 71.65062 49.69331 c 77.9761 51.62689 l 76.21451 57.39236 73.15869 62.68382 69.049 67.09116 c 1.35591 48.9525 m 0.0 43.07901 0.0 36.96957 1.35591 31.09607 c 7.80046 32.58429 l 7.32423 34.64575 7.04643 36.75572 6.97368 38.8701 c 3.11533 38.73561 l 3.1528 37.66408 3.23878 36.58817 3.36887 35.52324 c 4.46245 35.65773 l 4.38748 36.27728 4.32796 36.90123 4.28384 37.52518 c 5.93301 37.63983 l 6.03004 36.25304 6.21303 34.86844 6.4776 33.50368 c 2.14964 32.66145 l 1.2038 37.52298 1.2038 42.5256 2.14964 47.38713 c 6.4776 46.5449 l 6.21303 45.18015 6.03004 43.79555 5.93301 42.40875 c 4.28384 42.52339 l 4.32796 43.14734 4.38748 43.77129 4.46245 44.39084 c 3.36887 44.52533 l 3.23878 43.46043 3.1528 42.38449 3.11533 41.31297 c 6.97368 41.17848 l 7.04643 43.29288 7.32423 45.40062 7.80046 47.4643 c 1.35591 48.9525 l 78.69267 48.9525 m 72.24812 47.4643 l 72.72435 45.40062 73.00215 43.29288 73.07712 41.17848 c 76.93326 41.31297 l 76.89578 42.38449 76.8098 43.46043 76.6797 44.52533 c 75.58615 44.39084 l 75.6611 43.77129 75.72064 43.14734 75.76472 42.52339 c 74.11557 42.40875 l 74.01854 43.79555 73.83556 45.18015 73.57098 46.5449 c 77.89894 47.38713 l 78.84479 42.5256 78.84479 37.52298 77.89894 32.66145 c 73.57098 33.50368 l 73.83556 34.86844 74.01854 36.25304 74.11557 37.63983 c 75.76472 37.52518 l 75.72064 36.90123 75.6611 36.27728 75.58615 35.65773 c 76.6797 35.52324 l 76.8098 36.58817 76.89578 37.66408 76.93326 38.73561 c 73.07712 38.8701 l 73.00215 36.75572 72.72435 34.64575 72.24812 32.58429 c 78.69267 31.09607 l 80.04861 36.96957 80.04861 43.07901 78.69267 48.9525 c 8.39795 30.35527 m 2.07246 28.42169 l 3.83408 22.65842 6.8899 17.36696 10.99959 12.95743 c 15.83685 17.46838 l 14.39273 19.01613 13.09854 20.70499 11.9785 22.49966 c 8.70442 20.45364 l 9.27324 19.54308 9.88397 18.65675 10.52997 17.79909 c 11.40967 18.46274 l 11.03487 18.96101 10.67107 19.47252 10.32051 19.99065 c 11.69188 20.91443 l 12.47015 19.76135 13.32121 18.65234 14.23178 17.60287 c 10.90479 14.71022 l 7.65495 18.44731 5.15474 22.77966 3.54306 27.46262 c 7.71228 28.89792 l 8.16425 27.58388 8.70001 26.29408 9.30853 25.04398 c 7.82251 24.31862 l 7.54912 24.88083 7.28896 25.44966 7.04422 26.0251 c 6.03004 25.59517 l 6.44894 24.60744 6.91194 23.63513 7.41684 22.68707 c 10.82321 24.4972 l 9.83105 26.36684 9.0153 28.3313 8.39795 30.35527 c 71.65062 30.35527 m 71.0333 28.3313 70.21751 26.36684 69.22537 24.4972 c 72.63174 22.68707 l 73.13664 23.63513 73.59964 24.60744 74.01854 25.59517 c 73.00436 26.0251 l 72.75963 25.44966 72.49947 24.88083 72.22606 24.31862 c 70.74005 25.04398 l 71.34857 26.29408 71.88432 27.58388 72.3363 28.89792 c 76.50552 27.46262 l 74.89384 22.77966 72.39363 18.44731 69.1438 14.71022 c 65.8168 17.60287 l 66.72737 18.65234 67.57841 19.76135 68.35669 20.91443 c 69.72806 19.99065 l 69.3775 19.47252 69.01372 18.96101 68.63892 18.46274 c 69.51862 17.79909 l 70.16461 18.65675 70.77533 19.54308 71.34416 20.45364 c 68.07007 22.49966 l 66.95006 20.70499 65.65585 19.01613 64.21173 17.46838 c 69.049 12.95743 l 73.15869 17.36696 76.21451 22.65842 77.9761 28.42169 c 71.65062 30.35527 l 17.46838 15.83685 m 12.95743 10.99959 l 17.36476 6.8899 22.65622 3.83408 28.42169 2.07246 c 30.35527 8.39795 l 28.3313 9.0153 26.36684 9.83105 24.4972 10.82321 c 22.68707 7.41684 l 23.63513 6.91194 24.60744 6.44894 25.59517 6.03004 c 26.0251 7.04422 l 25.44966 7.28896 24.88083 7.54912 24.31862 7.82251 c 25.04398 9.30853 l 26.29408 8.70001 27.58388 8.16425 28.89792 7.71228 c 27.46262 3.54306 l 22.77966 5.15474 18.44731 7.65495 14.71022 10.90479 c 17.60287 14.23178 l 18.65234 13.32121 19.76135 12.47015 20.91443 11.69188 c 19.99065 10.32051 l 19.47252 10.67107 18.96101 11.03487 18.46274 11.40967 c 17.79909 10.52997 l 18.65675 9.88397 19.54308 9.27324 20.45364 8.70442 c 22.49747 11.9785 l 20.70499 13.09854 19.01613 14.39273 17.46838 15.83685 c 62.5802 15.83685 m 61.03246 14.39273 59.3436 13.09854 57.54892 11.9785 c 59.59494 8.70442 l 60.50551 9.27324 61.39183 9.88397 62.24948 10.52997 c 61.58585 11.40967 l 61.08757 11.03487 60.57607 10.67107 60.05795 10.32051 c 59.13414 11.69188 l 60.28723 12.47015 61.39624 13.32121 62.44571 14.23178 c 65.33836 10.90479 l 61.60129 7.65495 57.2689 5.15474 52.58598 3.54306 c 51.15067 7.71228 l 52.4647 8.16425 53.7545 8.70001 55.00461 9.30853 c 55.72998 7.82251 l 55.16776 7.54912 54.59894 7.28896 54.02348 7.04422 c 54.45341 6.03004 l 55.44115 6.44894 56.41345 6.91194 57.36151 7.41684 c 55.55139 10.82321 l 53.68173 9.83105 51.71729 9.0153 49.69331 8.39795 c 51.62689 2.07246 l 57.39017 3.83408 62.68163 6.8899 67.09116 10.99959 c 62.5802 15.83685 l 32.58429 7.80046 m 31.09607 1.35591 l 36.96957 0.0 43.07901 0.0 48.9525 1.35591 c 47.4643 7.80046 l 45.40283 7.32423 43.29288 7.04643 41.17848 6.97147 c 41.31297 3.11533 l 42.38449 3.1528 43.46043 3.23878 44.52533 3.36887 c 44.39084 4.46245 l 43.77129 4.38748 43.14734 4.32796 42.52339 4.28384 c 42.40875 5.93301 l 43.79555 6.03004 45.18015 6.21303 46.5449 6.4776 c 47.38713 2.14964 l 42.5256 1.2038 37.52298 1.2038 32.66145 2.14964 c 33.50368 6.4776 l 34.86844 6.21303 36.25304 6.03004 37.63983 5.93301 c 37.52518 4.28384 l 36.90123 4.32796 36.27728 4.38748 35.65773 4.46245 c 35.52324 3.36887 l 36.58817 3.23878 37.66408 3.1528 38.73561 3.11533 c 38.8701 6.97147 l 36.75572 7.04643 34.64796 7.32423 32.58429 7.80046 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -47.725 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -3.855 -2.25 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 336.883 -47.725 Td[<00160012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -47.725 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -47.725 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 336.883 -47.725 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -47.725 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -42.52022 m 42.52022 -42.52022 m 42.52022 42.52022 l 99.21387 42.52022 l 99.21387 -42.52022 l h 99.21387 42.52022 m S Q Q n Q Q q 1 0 0 1 42.52 -134.159 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -42.52022 m -42.52022 -42.52022 m -42.52022 42.52022 l 42.52022 42.52022 l 42.52022 -42.52022 l h 42.52022 42.52022 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -40.079 0 cm 0 G 0 g q 1 0 0 1 42.52 -174.238 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 40.07831 79.8193 m 37.07982 79.8193 34.07913 79.47977 31.14017 78.80069 c 31.08725 78.78967 l 32.59972 72.23709 l 32.65263 72.25034 l 34.70969 72.72435 36.81525 73.00215 38.92743 73.07712 c 38.98253 73.07933 l 38.84363 77.0435 l 38.78851 77.04129 l 37.7148 77.00601 36.63885 76.92003 35.57176 76.78995 c 35.51663 76.78333 l 35.66435 75.57953 l 35.71947 75.58615 l 36.32138 75.6589 36.92548 75.71623 37.52959 75.76031 c 37.63763 74.21918 l 36.28389 74.12218 34.93459 73.94359 33.6029 73.68782 c 32.78273 77.90776 l 37.60014 78.83818 42.55867 78.83818 47.3761 77.90776 c 46.55592 73.68782 l 45.22424 73.94359 43.87492 74.12218 42.5212 74.21918 c 42.62923 75.76031 l 43.23334 75.71623 43.83743 75.6589 44.43935 75.58615 c 44.49446 75.57953 l 44.63998 76.78333 l 44.58707 76.78995 l 43.51996 76.92003 42.44402 77.00601 41.3703 77.04129 c 41.31519 77.0435 l 41.17628 73.07933 l 41.2314 73.07712 l 43.34357 73.00215 45.44693 72.72435 47.50618 72.25034 c 47.5591 72.23709 l 49.07156 78.78967 l 49.01865 78.80069 l 46.0775 79.47977 43.07901 79.8193 40.07831 79.8193 c 40.07831 79.70686 m 43.05254 79.70686 46.02458 79.37395 48.93929 78.70369 c 47.47752 72.36717 l 45.44693 72.83238 43.37224 73.10577 41.29094 73.18074 c 41.421 76.92885 l 42.45505 76.89137 43.49129 76.8098 44.5187 76.68413 c 44.39745 75.70079 l 43.79555 75.77354 43.18924 75.83307 42.58292 75.87497 c 42.5278 75.87717 l 42.40434 74.11998 l 42.45947 74.11557 l 43.84406 74.01854 45.22644 73.83556 46.58899 73.57098 c 46.64412 73.56215 l 47.50618 77.99817 l 47.45107 78.00919 l 42.58513 78.95503 37.57368 78.95503 32.70557 78.00919 c 32.65263 77.99817 l 33.5147 73.56215 l 33.56982 73.57098 l 34.93237 73.83556 36.31477 74.01854 37.69936 74.11557 c 37.75449 74.11998 l 37.63101 75.87717 l 37.5759 75.87497 l 36.96957 75.83307 36.36327 75.77354 35.76137 75.70079 c 35.6401 76.68413 l 36.66753 76.8098 37.70377 76.89137 38.73781 76.92885 c 38.86789 73.18074 l 36.78659 73.10577 34.7119 72.83238 32.68129 72.36717 c 31.21733 78.70369 l 34.13425 79.37395 37.10628 79.70686 40.07831 79.70686 c 28.51208 78.09958 m 28.45917 78.08415 l 22.68929 76.31812 17.38902 73.2601 12.97507 69.1438 c 12.93536 69.10632 l 17.52129 64.18968 l 17.56099 64.22717 l 19.10652 65.66689 20.79099 66.96107 22.58345 68.07889 c 22.62975 68.10977 l 20.5264 71.47424 l 20.4801 71.44559 l 19.56953 70.87454 18.6788 70.26382 17.82115 69.61783 c 17.77705 69.58475 l 18.50684 68.61685 l 18.55092 68.64993 l 19.03377 69.01372 19.52983 69.36649 20.03033 69.70381 c 20.89459 68.42284 l 19.77237 67.66219 18.68982 66.8332 17.66682 65.94688 c 14.84471 69.19229 l 18.55313 72.40686 22.84581 74.88503 27.48465 76.4901 c 28.88469 72.42229 l 27.60371 71.97914 26.34479 71.4588 25.12555 70.86574 c 24.44647 72.25473 l 24.99106 72.51932 25.54445 72.77286 26.10005 73.00877 c 26.15297 73.02861 l 25.67894 74.14642 l 25.62825 74.12439 l 24.63829 73.70547 23.66599 73.24026 22.71573 72.73538 c 22.66724 72.70891 l 24.53027 69.20554 l 24.57877 69.232 l 26.444 70.22414 28.40623 71.03549 30.42583 71.65283 c 30.47874 71.67049 l 28.51208 78.09958 l 51.64674 78.09958 m 49.68008 71.67049 l 49.733 71.65283 l 51.75258 71.03549 53.71481 70.22414 55.58005 69.232 c 55.62856 69.20554 l 57.4916 72.70891 l 57.44308 72.73538 l 56.49283 73.24026 55.52052 73.70547 54.53058 74.12439 c 54.47987 74.14642 l 54.00584 73.02861 l 54.05655 73.00877 l 54.61436 72.77286 55.16776 72.51932 55.71234 72.25473 c 55.03326 70.86574 l 53.81404 71.4588 52.5551 71.97914 51.27414 72.42229 c 52.67416 76.4901 l 57.31079 74.88503 61.6057 72.40686 65.31412 69.19229 c 62.492 65.94688 l 61.4668 66.8332 60.38644 67.66219 59.26202 68.42284 c 60.1285 69.70381 l 60.62898 69.36649 61.12505 69.01372 61.6079 68.64993 c 61.652 68.61685 l 62.38176 69.58475 l 62.33768 69.61783 l 61.48001 70.26382 60.58928 70.87454 59.67871 71.44559 c 59.63242 71.47424 l 57.52907 68.10977 l 57.57538 68.07889 l 59.36786 66.96107 61.05229 65.66689 62.59784 64.22717 c 62.63753 64.18968 l 67.22345 69.10632 l 67.18375 69.1438 l 62.7698 73.2601 57.46954 76.31812 51.69745 78.08415 c 51.64674 78.09958 l 28.44153 77.96068 m 30.34203 71.73882 l 28.35114 71.12808 26.41756 70.32776 24.57655 69.35326 c 22.81715 72.66263 l 23.73213 73.14767 24.66917 73.59303 25.62161 74.00092 c 26.00746 73.08594 l 25.44966 72.85002 24.89626 72.59648 24.34947 72.3297 c 24.29875 72.30544 l 25.07263 70.72243 l 25.12334 70.74446 l 26.37125 71.35298 27.65884 71.88873 28.97067 72.34071 c 29.0214 72.35835 l 27.5508 76.63121 l 27.50008 76.61357 l 22.81055 74.99966 18.47156 72.49506 14.73006 69.24081 c 14.68816 69.20554 l 17.6536 65.79475 l 17.69548 65.83003 l 18.74274 66.7406 19.84953 67.58943 21.00043 68.36552 c 21.04451 68.39638 l 20.05899 69.85814 l 20.0149 69.82729 l 19.51 69.48775 19.01393 69.13278 18.52888 68.769 c 17.93138 69.5605 l 18.76038 70.18225 19.61583 70.77092 20.49332 71.3199 c 22.47983 68.14063 l 20.7138 67.03604 19.0536 65.76169 17.52791 64.34181 c 13.09192 69.0997 l 17.4728 73.17192 22.72237 76.20348 28.44153 77.96068 c 51.71729 77.96068 m 57.43648 76.20348 62.68604 73.17192 67.06471 69.0997 c 62.6309 64.34181 l 61.10521 65.76169 59.44281 67.03604 57.67899 68.14063 c 59.6655 71.3199 l 60.543 70.77092 61.39844 70.18225 62.22743 69.5605 c 61.62994 68.769 l 61.14488 69.13278 60.64882 69.48775 60.14394 69.82729 c 60.09982 69.85814 l 59.1143 68.39638 l 59.1584 68.36552 l 60.30928 67.58943 61.41608 66.7406 62.46333 65.83003 c 62.50523 65.79475 l 65.47066 69.20554 l 65.42876 69.24081 l 61.68727 72.49506 57.34827 74.99966 52.65874 76.61357 c 52.60802 76.63121 l 51.13524 72.35835 l 51.18816 72.34071 l 52.49998 71.88873 53.78757 71.35298 55.03548 70.74446 c 55.08618 70.72243 l 55.85785 72.30544 l 55.80934 72.3297 l 55.26256 72.59648 54.70917 72.85002 54.14915 73.08594 c 54.5372 74.00092 l 55.48964 73.59303 56.42668 73.14767 57.34166 72.66263 c 55.58226 69.35326 l 53.74129 70.32776 51.80768 71.12808 49.81679 71.73882 c 51.71729 77.96068 l 11.0525 67.22345 m 11.01503 67.18375 l 6.89871 62.7698 3.83849 57.46954 2.07466 51.69745 c 2.05923 51.64674 l 8.48836 49.68008 l 8.50598 49.733 l 9.12332 51.75258 9.93468 53.71481 10.92682 55.58005 c 10.95328 55.62856 l 7.4499 57.4916 l 7.42345 57.44308 l 6.91855 56.49283 6.45335 55.52052 6.03444 54.53058 c 6.01239 54.47987 l 7.128 54.00584 l 7.15004 54.05655 l 7.38597 54.61436 7.63951 55.16776 7.9041 55.71234 c 9.29309 55.03326 l 8.70001 53.81404 8.17969 52.5551 7.73431 51.27414 c 3.66872 52.67416 l 5.2738 57.31079 7.75195 61.6057 10.96652 65.31412 c 14.21194 62.492 l 13.32562 61.4668 12.49442 60.38644 11.73598 59.26422 c 10.45279 60.1285 l 10.79233 60.62898 11.1451 61.12505 11.50888 61.6079 c 11.54196 61.652 l 10.57407 62.38176 l 10.541 62.33768 l 9.89499 61.48001 9.28427 60.58928 8.71324 59.67871 c 8.68459 59.63242 l 12.04906 57.52907 l 12.07993 57.57538 l 13.19774 59.36786 14.49194 61.05229 15.93166 62.59784 c 15.96913 62.63753 l 11.0525 67.22345 l 69.10632 67.22345 m 64.18968 62.63753 l 64.22496 62.59784 l 65.66689 61.05229 66.96107 59.36786 68.07889 57.57538 c 68.10977 57.52907 l 71.47424 59.63242 l 71.44337 59.67871 l 70.87454 60.58928 70.26382 61.48001 69.61783 62.33768 c 69.58475 62.38176 l 68.61685 61.652 l 68.64993 61.6079 l 69.01372 61.12505 69.36427 60.62898 69.70381 60.1285 c 68.42284 59.26422 l 67.66219 60.38644 66.8332 61.4668 65.94688 62.492 c 69.19229 65.31412 l 72.40686 61.6057 74.88503 57.313 76.4901 52.67416 c 72.42229 51.27414 l 71.97914 52.5551 71.4588 53.81404 70.86574 55.03326 c 72.25473 55.71234 l 72.51932 55.16556 72.77065 54.61436 73.00877 54.05655 c 73.02861 54.00584 l 74.14423 54.47987 l 74.12439 54.53058 l 73.70328 55.52052 73.24026 56.49283 72.73538 57.44308 c 72.70891 57.4916 l 69.20554 55.62856 l 69.232 55.58005 l 70.22192 53.71481 71.03549 51.75258 71.65283 49.733 c 71.66826 49.68008 l 78.09958 51.64674 l 78.08415 51.69745 l 76.31812 57.46954 73.2601 62.7698 69.1438 67.18375 c 69.10632 67.22345 l 11.05911 67.06471 m 15.8148 62.6309 l 14.39713 61.10521 13.12279 59.44502 12.01599 57.67899 c 8.83891 59.6655 l 9.3879 60.543 9.97656 61.39844 10.59831 62.22743 c 11.38983 61.62994 l 11.02605 61.14488 10.67107 60.64882 10.33154 60.14394 c 10.30067 60.09982 l 11.76244 59.1143 l 11.7933 59.1584 l 12.56938 60.30928 13.41821 61.41608 14.32878 62.46333 c 14.36407 62.50523 l 10.95328 65.47066 l 10.91801 65.42876 l 7.66377 61.68727 5.15915 57.34827 3.54526 52.65874 c 3.52762 52.60802 l 7.80046 51.13524 l 7.8181 51.18816 l 8.27008 52.49998 8.80362 53.78757 9.41435 55.03548 c 9.4364 55.08618 l 7.85338 55.85785 l 7.82692 55.80934 l 7.56235 55.26256 7.30879 54.70917 7.0707 54.14915 c 6.1579 54.5372 l 6.56358 55.48964 7.01115 56.42668 7.49622 57.34166 c 10.80556 55.58226 l 9.83105 53.74129 9.03073 51.80768 8.42 49.81679 c 2.19814 51.71729 l 3.95534 57.43648 6.9847 62.68604 11.05911 67.06471 c 69.0997 67.06471 m 73.17192 62.68604 76.20348 57.43648 77.96068 51.71729 c 71.73882 49.81679 l 71.12808 51.80768 70.32556 53.74129 69.35106 55.58226 c 72.66263 57.34166 l 73.14546 56.42668 73.59303 55.48964 73.9987 54.5372 c 73.08594 54.14915 l 72.84781 54.70917 72.59648 55.26256 72.3297 55.80934 c 72.30544 55.85785 l 70.72243 55.08618 l 70.74446 55.03548 l 71.35298 53.78757 71.88873 52.49998 72.34071 51.18816 c 72.35835 51.13524 l 76.63121 52.60802 l 76.61357 52.65874 l 74.99966 57.34827 72.49284 61.68727 69.24081 65.42876 c 69.20554 65.47066 l 65.79256 62.50523 l 65.83003 62.46333 l 66.7406 61.41608 67.58943 60.30928 68.36552 59.1584 c 68.39638 59.1143 l 69.85814 60.09982 l 69.82729 60.14394 l 69.48775 60.64882 69.13278 61.14488 68.769 61.62994 c 69.5605 62.22743 l 70.18225 61.39844 70.77092 60.543 71.3199 59.6655 c 68.14063 57.67899 l 67.03383 59.44502 65.75948 61.10521 64.34181 62.6309 c 69.0997 67.06471 l 1.36914 49.07156 m 1.35591 49.01865 l 0.0 43.13852 0.0 37.0203 1.35591 31.14017 c 1.36914 31.08725 l 7.92172 32.59972 l 7.90851 32.65263 l 7.43448 34.70969 7.15668 36.81525 7.08171 38.92743 c 7.07951 38.98253 l 3.11533 38.84363 l 3.11533 38.78851 l 3.1528 37.7148 3.23878 36.63885 3.36887 35.57176 c 3.37549 35.51663 l 4.5793 35.66435 l 4.5727 35.71947 l 4.49771 36.32138 4.4426 36.92548 4.3985 37.52959 c 5.93964 37.63763 l 6.03665 36.28389 6.21523 34.93459 6.471 33.6029 c 2.25105 32.78273 l 1.32065 37.60014 1.32065 42.55867 2.25105 47.3761 c 6.471 46.55592 l 6.21523 45.22424 6.03665 43.87492 5.93964 42.5212 c 4.3985 42.62923 l 4.4426 43.23334 4.49771 43.83743 4.5727 44.43935 c 4.5793 44.49446 l 3.37549 44.64218 l 3.36887 44.58707 l 3.23878 43.51996 3.1528 42.44402 3.11533 41.3703 c 3.11533 41.31519 l 7.07951 41.17628 l 7.08171 41.2314 l 7.15668 43.34357 7.43448 45.44693 7.90851 47.50618 c 7.92172 47.5591 l 1.36914 49.07156 l 78.78967 49.07156 m 72.23709 47.5591 l 72.25034 47.50618 l 72.72435 45.44693 73.00215 43.34357 73.07712 41.2314 c 73.07933 41.17628 l 77.0435 41.31519 l 77.04129 41.3703 l 77.0038 42.44402 76.92003 43.51996 76.78995 44.58707 c 76.78333 44.64218 l 75.57953 44.49446 l 75.58615 44.43935 l 75.6589 43.83743 75.71623 43.23334 75.76031 42.62923 c 74.21918 42.5212 l 74.12218 43.87492 73.94359 45.22424 73.68564 46.55592 c 77.90776 47.3761 l 78.83818 42.55867 78.83818 37.60014 77.90776 32.78273 c 73.68564 33.6029 l 73.94359 34.93459 74.12218 36.28389 74.21918 37.63763 c 75.76031 37.52959 l 75.71623 36.92548 75.6589 36.32138 75.58615 35.71947 c 75.57953 35.66435 l 76.78333 35.51663 l 76.78995 35.57176 l 76.92003 36.63885 77.0038 37.7148 77.04129 38.78851 c 77.0435 38.84363 l 73.07933 38.98253 l 73.07712 38.92743 l 73.00215 36.81525 72.72435 34.70969 72.25034 32.65263 c 72.23709 32.59972 l 78.78967 31.08725 l 78.80069 31.14017 l 80.15884 37.0203 80.15884 43.13852 78.80069 49.01865 c 78.78967 49.07156 l 1.45514 48.94148 m 7.79164 47.47752 l 7.32643 45.44693 7.05304 43.37224 6.97588 41.29094 c 3.22997 41.421 l 3.26746 42.45505 3.34903 43.49129 3.47472 44.5187 c 4.45804 44.39745 l 4.38527 43.79555 4.32574 43.18924 4.28384 42.58292 c 4.27943 42.5278 l 6.03886 42.40434 l 6.04326 42.45947 l 6.14027 43.84406 6.32327 45.22644 6.58784 46.58899 c 6.59666 46.64412 l 2.16066 47.50618 l 2.14964 47.45326 l 1.2038 42.58513 1.2038 37.57368 2.14964 32.70557 c 2.16066 32.65263 l 6.59666 33.5147 l 6.58784 33.56982 l 6.32327 34.93237 6.14027 36.31477 6.04326 37.69936 c 6.03886 37.75449 l 4.27943 37.63101 l 4.28384 37.5759 l 4.32574 36.96957 4.38527 36.36327 4.45804 35.76137 c 3.47472 35.6401 l 3.34903 36.66753 3.26746 37.70377 3.22997 38.73781 c 6.97588 38.86789 l 7.05304 36.78659 7.32643 34.7119 7.79164 32.68129 c 1.45514 31.21733 l 0.11684 37.04895 0.11684 43.10986 1.45514 48.94148 c 78.70369 48.94148 m 80.04198 43.10986 80.04198 37.04895 78.70369 31.21733 c 72.36717 32.68129 l 72.83238 34.7119 73.10577 36.78659 73.18074 38.86789 c 76.92885 38.73781 l 76.89137 37.70377 76.8098 36.66753 76.68413 35.6401 c 75.70079 35.76137 l 75.77354 36.36327 75.83307 36.96957 75.87497 37.5759 c 75.87717 37.63101 l 74.11998 37.75449 l 74.11557 37.69936 l 74.01854 36.31477 73.83556 34.93237 73.57098 33.56982 c 73.56215 33.5147 l 77.99817 32.65263 l 78.00699 32.70557 l 78.95284 37.57368 78.95284 42.58513 78.00699 47.45326 c 77.99817 47.50618 l 73.56215 46.64412 l 73.57098 46.58899 l 73.83556 45.22644 74.01854 43.84406 74.11557 42.45947 c 74.11998 42.40434 l 75.87717 42.5278 l 75.87497 42.58292 l 75.83307 43.18924 75.77354 43.79555 75.70079 44.39745 c 76.68413 44.5187 l 76.8098 43.49129 76.89137 42.45505 76.92885 41.421 c 73.18074 41.29094 l 73.10577 43.37224 72.83238 45.44693 72.36717 47.47752 c 78.70369 48.94148 l 8.48836 30.47874 m 2.05923 28.51208 l 2.07466 28.45917 l 3.83849 22.68929 6.89871 17.38902 11.01503 12.97507 c 11.0525 12.93536 l 15.96913 17.52129 l 15.93166 17.56099 l 14.49194 19.10652 13.19774 20.79099 12.07993 22.58345 c 12.04906 22.62975 l 8.68459 20.5264 l 8.71324 20.4801 l 9.28427 19.56953 9.89499 18.6788 10.541 17.82115 c 10.57407 17.77705 l 11.54196 18.50684 l 11.50888 18.55092 l 11.1451 19.03377 10.79233 19.52983 10.45279 20.03033 c 11.73598 20.89459 l 12.49442 19.77237 13.32562 18.69203 14.21194 17.66682 c 10.96652 14.84471 l 7.75195 18.55313 5.2738 22.84581 3.66872 27.48465 c 7.73431 28.88469 l 8.17969 27.60371 8.70001 26.34479 9.29309 25.12555 c 7.9041 24.44647 l 7.63951 24.99106 7.38597 25.54445 7.15004 26.10226 c 7.128 26.15297 l 6.01239 25.67894 l 6.03444 25.62825 l 6.45335 24.63829 6.91855 23.66599 7.42345 22.71573 c 7.4499 22.66724 l 10.95328 24.53027 l 10.92682 24.57877 l 9.93468 26.444 9.12332 28.40623 8.50598 30.42583 c 8.48836 30.47874 l 71.66826 30.47874 m 71.65283 30.42583 l 71.03549 28.40623 70.22192 26.444 69.232 24.57877 c 69.20554 24.53027 l 72.70891 22.66724 l 72.73538 22.71573 l 73.24026 23.66599 73.70328 24.63829 74.12439 25.62825 c 74.14423 25.67894 l 73.02861 26.15297 l 73.00877 26.10226 l 72.77065 25.54445 72.51932 24.99106 72.25473 24.44647 c 70.86574 25.12555 l 71.4588 26.34479 71.97914 27.60371 72.42229 28.88469 c 76.4901 27.48465 l 74.88503 22.84581 72.40686 18.55313 69.19229 14.84471 c 65.94688 17.66682 l 66.8332 18.69203 67.66219 19.77237 68.42284 20.89459 c 69.70381 20.03033 l 69.36427 19.52983 69.01372 19.03377 68.64993 18.55092 c 68.61685 18.50684 l 69.58475 17.77705 l 69.61783 17.82115 l 70.26382 18.6788 70.87454 19.56953 71.44337 20.4801 c 71.47424 20.5264 l 68.10977 22.62975 l 68.07889 22.58345 l 66.96107 20.79099 65.66689 19.10652 64.22496 17.56099 c 64.18968 17.52129 l 69.10632 12.93536 l 69.1438 12.97507 l 73.2601 17.38902 76.31812 22.68929 78.08415 28.45917 c 78.09958 28.51208 l 71.66826 30.47874 l 8.42 30.34203 m 9.03073 28.35114 9.83105 26.41756 10.80556 24.57655 c 7.49622 22.81715 l 7.01115 23.73213 6.56358 24.66917 6.1579 25.62161 c 7.0707 26.00966 l 7.30879 25.44966 7.56235 24.89626 7.82692 24.34947 c 7.85118 24.30096 l 9.4364 25.07263 l 9.41435 25.12334 l 8.80362 26.37125 8.27008 27.65884 7.8181 28.97067 c 7.80046 29.02357 l 3.52762 27.5508 l 3.54526 27.50008 l 5.15915 22.81055 7.66377 18.47156 10.91801 14.73006 c 10.95328 14.68816 l 14.36407 17.6536 l 14.32878 17.69548 l 13.41821 18.74274 12.56938 19.84953 11.7933 21.00043 c 11.76244 21.04451 l 10.30067 20.05899 l 10.33154 20.0149 l 10.67107 19.51 11.02605 19.01393 11.38983 18.52888 c 10.59831 17.93138 l 9.97656 18.76038 9.3879 19.61583 8.83891 20.49332 c 12.01599 22.47983 l 13.12279 20.7138 14.39713 19.0536 15.8148 17.52791 c 11.05911 13.09412 l 6.9847 17.4728 3.95534 22.72237 2.19814 28.44153 c 8.42 30.34203 l 71.73882 30.34203 m 77.96068 28.44153 l 76.20348 22.72237 73.17192 17.4728 69.0997 13.09412 c 64.34181 17.52791 l 65.75948 19.0536 67.03383 20.7138 68.14063 22.47983 c 71.3199 20.49332 l 70.77092 19.61583 70.18225 18.76038 69.5605 17.93138 c 68.769 18.52888 l 69.13278 19.01393 69.48775 19.51 69.82729 20.0149 c 69.85814 20.05899 l 68.39638 21.04451 l 68.36552 21.00043 l 67.58943 19.84953 66.7406 18.74274 65.83003 17.69548 c 65.79256 17.6536 l 69.20554 14.68816 l 69.24081 14.73006 l 72.49284 18.47156 74.99966 22.81055 76.61357 27.50008 c 76.63121 27.5508 l 72.35835 29.02357 l 72.34071 28.97067 l 71.88873 27.65884 71.35298 26.37125 70.74446 25.12334 c 70.72243 25.07263 l 72.30544 24.30096 l 72.3297 24.34947 l 72.59648 24.89626 72.84781 25.44966 73.08594 26.00966 c 73.9987 25.62161 l 73.59303 24.66917 73.14546 23.73213 72.66263 22.81715 c 69.35106 24.57655 l 70.32556 26.41756 71.12808 28.35114 71.73882 30.34203 c 17.52129 15.96913 m 12.93536 11.0525 l 12.97507 11.01503 l 17.38902 6.89871 22.68929 3.8407 28.45917 2.07466 c 28.51208 2.05923 l 30.47874 8.48836 l 30.42583 8.50598 l 28.40623 9.12332 26.444 9.93468 24.57877 10.92682 c 24.53027 10.95328 l 22.66724 7.4499 l 22.71573 7.42345 l 23.66599 6.91855 24.63829 6.45555 25.62825 6.03444 c 25.67894 6.01239 l 26.15297 7.128 l 26.10005 7.15004 l 25.54445 7.38597 24.99106 7.63951 24.44647 7.9041 c 25.12555 9.29309 l 26.34479 8.70001 27.60371 8.17969 28.88469 7.73653 c 27.48465 3.66872 l 22.84581 5.2738 18.55313 7.75195 14.84471 10.96652 c 17.66682 14.21194 l 18.68982 13.32562 19.77237 12.49442 20.89459 11.73598 c 20.03033 10.45279 l 19.52983 10.79233 19.03377 11.1451 18.55092 11.50888 c 18.50684 11.54196 l 17.77705 10.57407 l 17.82115 10.541 l 18.6788 9.89499 19.56953 9.28427 20.4801 8.71324 c 20.5264 8.68459 l 22.62975 12.04906 l 22.58345 12.07993 l 20.79099 13.19774 19.10652 14.49194 17.56099 15.93166 c 17.52129 15.96913 l 62.63753 15.96913 m 62.59784 15.93166 l 61.05229 14.49194 59.36786 13.19774 57.57538 12.07993 c 57.52907 12.04906 l 59.63242 8.68459 l 59.67871 8.71324 l 60.58928 9.28427 61.48001 9.89499 62.33768 10.541 c 62.38176 10.57407 l 61.652 11.54196 l 61.6079 11.50888 l 61.12505 11.1451 60.62898 10.79233 60.1285 10.45279 c 59.26202 11.73598 l 60.38644 12.49442 61.4668 13.32562 62.492 14.21194 c 65.31412 10.96652 l 61.6057 7.75195 57.313 5.2738 52.67416 3.66872 c 51.27414 7.73653 l 52.5551 8.17969 53.81404 8.70001 55.03326 9.29309 c 55.71234 7.9041 l 55.16556 7.63951 54.61436 7.38597 54.05655 7.15004 c 54.00584 7.128 l 54.47987 6.01239 l 54.53058 6.03444 l 55.52052 6.45555 56.49283 6.91855 57.44308 7.42345 c 57.4916 7.4499 l 55.62856 10.95328 l 55.58005 10.92682 l 53.71481 9.93468 51.75258 9.12332 49.733 8.50598 c 49.68008 8.48836 l 51.64674 2.05923 l 51.69745 2.07466 l 57.46954 3.8407 62.7698 6.89871 67.18375 11.01503 c 67.22345 11.0525 l 62.63753 15.96913 l 17.52791 15.81702 m 19.0536 14.39713 20.7138 13.12279 22.47983 12.01599 c 20.49332 8.83891 l 19.61583 9.3879 18.76038 9.97656 17.93138 10.59831 c 18.52888 11.38983 l 19.01393 11.02605 19.51 10.67107 20.0149 10.33154 c 20.05899 10.30067 l 21.04451 11.76244 l 21.00043 11.7933 l 19.84953 12.56938 18.74274 13.41821 17.69548 14.32878 c 17.6536 14.36407 l 14.68816 10.95328 l 14.73006 10.91801 l 18.47156 7.66377 22.81055 5.15915 27.50008 3.54526 c 27.5508 3.52762 l 29.0214 7.80046 l 28.97067 7.8181 l 27.65884 8.27008 26.37125 8.80585 25.12334 9.41435 c 25.07263 9.4364 l 24.29875 7.85338 l 24.34947 7.82912 l 24.89626 7.56235 25.44966 7.30879 26.00746 7.0707 c 25.62161 6.1579 l 24.66917 6.56358 23.73213 7.01115 22.81715 7.49622 c 24.57655 10.80556 l 26.41756 9.83105 28.35114 9.03073 30.34203 8.42 c 28.44153 2.19814 l 22.72237 3.95534 17.4728 6.9869 13.09192 11.05911 c 17.52791 15.81702 l 62.6309 15.81702 m 67.06471 11.05911 l 62.68604 6.9869 57.43648 3.95534 51.71729 2.19814 c 49.81679 8.42 l 51.80768 9.03073 53.74129 9.83105 55.58226 10.80556 c 57.34166 7.49622 l 56.42668 7.01115 55.48964 6.56358 54.5372 6.1579 c 54.14915 7.0707 l 54.70917 7.30879 55.26256 7.56235 55.80934 7.82912 c 55.85785 7.85338 l 55.08618 9.4364 l 55.03548 9.41435 l 53.78757 8.80585 52.49998 8.27008 51.18816 7.8181 c 51.13524 7.80046 l 52.60802 3.52762 l 52.65874 3.54526 l 57.34827 5.15915 61.68727 7.66377 65.42876 10.91801 c 65.47066 10.95328 l 62.50523 14.36407 l 62.46333 14.32878 l 61.41608 13.41821 60.30928 12.56938 59.1584 11.7933 c 59.1143 11.76244 l 60.09982 10.30067 l 60.14394 10.33154 l 60.64882 10.67107 61.14488 11.02605 61.62994 11.38983 c 62.22743 10.59831 l 61.39844 9.97656 60.543 9.3879 59.6655 8.83891 c 57.67899 12.01599 l 59.44281 13.12279 61.10521 14.39713 62.6309 15.81702 c 32.59972 7.92172 m 31.08725 1.36914 l 31.14017 1.35591 l 34.07913 0.67905 37.07982 0.33951 40.07831 0.33951 c 43.07901 0.33951 46.0775 0.67905 49.01865 1.35591 c 49.07156 1.36914 l 47.5591 7.92172 l 47.50618 7.90851 l 45.44693 7.43448 43.34357 7.15668 41.2314 7.08171 c 41.17628 7.07951 l 41.31519 3.11533 l 41.3703 3.11752 l 42.44402 3.1528 43.51996 3.23878 44.58707 3.36887 c 44.63998 3.37549 l 44.49446 4.5793 l 44.43935 4.5727 l 43.83743 4.49991 43.23334 4.4426 42.62923 4.3985 c 42.5212 5.93964 l 43.87492 6.03665 45.22424 6.21523 46.55592 6.471 c 47.3761 2.25105 l 42.55867 1.32065 37.60014 1.32065 32.78273 2.25105 c 33.6029 6.471 l 34.93459 6.21523 36.28389 6.03665 37.63763 5.93964 c 37.52959 4.3985 l 36.92548 4.4426 36.32138 4.49991 35.71947 4.5727 c 35.66435 4.5793 l 35.51663 3.37549 l 35.57176 3.36887 l 36.63885 3.23878 37.7148 3.1528 38.78851 3.11752 c 38.84363 3.11533 l 38.98253 7.07951 l 38.92743 7.08171 l 36.81525 7.15668 34.70969 7.43448 32.65263 7.90851 c 32.59972 7.92172 l 32.68129 7.79164 m 34.7119 7.32643 36.78659 7.05304 38.86789 6.97588 c 38.73781 3.22997 l 37.70377 3.26746 36.66753 3.34903 35.6401 3.47472 c 35.76137 4.45804 l 36.36327 4.38527 36.96957 4.32574 37.5759 4.28384 c 37.63101 4.27943 l 37.75449 6.03886 l 37.69936 6.04326 l 36.31477 6.14027 34.93237 6.32327 33.56982 6.58784 c 33.5147 6.59666 l 32.65263 2.16066 l 32.70557 2.14964 l 37.57368 1.206 42.58513 1.206 47.45107 2.14964 c 47.50618 2.16066 l 46.64412 6.59666 l 46.58899 6.58784 l 45.22644 6.32327 43.84406 6.14027 42.45947 6.04326 c 42.40434 6.03886 l 42.5278 4.27943 l 42.58292 4.28384 l 43.18924 4.32574 43.79555 4.38527 44.39745 4.45804 c 44.5187 3.47472 l 43.49129 3.34903 42.45505 3.26746 41.421 3.22997 c 41.29094 6.97588 l 43.37224 7.05304 45.44693 7.32643 47.47752 7.79164 c 48.93929 1.45514 l 46.02458 0.78488 43.05254 0.44756 40.07831 0.44756 c 37.10628 0.44756 34.13425 0.78488 31.21733 1.45514 c 32.68129 7.79164 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -134.159 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -3.855 -2.25 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 42.52 -134.159 Td[<00160013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -134.159 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 42.52 -134.159 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -134.159 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -42.52022 m 42.52022 -42.52022 m 42.52022 42.52022 l 99.21387 42.52022 l 99.21387 -42.52022 l h 99.21387 42.52022 m S Q Q n Q Q q 1 0 0 1 189.701 -134.159 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -42.52022 m -42.52022 -42.52022 m -42.52022 42.52022 l 42.52022 42.52022 l 42.52022 -42.52022 l h 42.52022 42.52022 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -39.74 0 cm 0 G 0 g q 1 0 0 1 189.646 -173.803 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 37.0269 79.23282 m 33.56761 78.99251 30.15244 78.2958 26.87393 77.16917 c 28.66861 71.95708 l 26.60054 71.24495 24.60081 70.33438 22.70691 69.24081 c 20.50215 73.05946 l 21.66847 73.73193 22.87228 74.34486 24.10033 74.89165 c 24.77278 73.38138 l 24.18413 73.119 23.60205 72.8412 23.02881 72.55017 c 23.5293 71.56685 l 24.45752 72.03867 25.40776 72.473 26.37344 72.86324 c 24.92712 76.43939 l 22.78848 75.57512 20.72263 74.52344 18.76479 73.2998 c 20.22433 70.96274 l 19.49678 70.50856 18.78242 70.02571 18.08794 69.52081 c 17.39343 69.01593 16.71436 68.48677 16.05511 67.93338 c 14.2847 70.04556 l 11.63014 67.81653 9.27324 65.24797 7.28453 62.40822 c 11.79993 59.24658 l 10.5476 57.4541 9.46506 55.54256 8.57434 53.54506 c 4.54622 55.33754 l 5.093 56.56778 5.70815 57.7716 6.3806 58.9357 c 7.81148 58.10892 l 7.4896 57.55112 7.18092 56.98448 6.8899 56.41125 c 7.87102 55.91077 l 8.34505 56.83678 8.85875 57.74733 9.40994 58.62926 c 6.13806 60.67528 l 4.91441 58.71744 3.86273 56.65158 2.99847 54.51074 c 5.5538 53.47891 l 5.2319 52.68077 4.93646 51.87383 4.67189 51.05586 c 4.40512 50.2401 4.1692 49.4111 3.95976 48.5777 c 1.28757 49.24574 l 0.44756 45.88127 0.0551 42.41757 0.11462 38.95168 c 5.62656 39.04868 l 5.66403 36.86156 5.91318 34.67662 6.36736 32.538 c 2.05263 31.6208 l 1.77483 32.93706 1.56096 34.27315 1.42206 35.61145 c 3.06682 35.78342 l 3.13297 35.14403 3.21895 34.50244 3.31816 33.86748 c 4.40732 34.03944 l 4.24417 35.06686 4.12732 36.10532 4.05455 37.14377 c 0.20502 36.87477 l 0.36598 34.573 0.72755 32.28224 1.28757 30.04439 c 3.95976 30.71024 l 4.1692 29.87683 4.40512 29.04784 4.67189 28.23207 c 4.93646 27.4141 5.2319 26.60716 5.5538 25.80904 c 2.99847 24.77719 l 4.29707 21.56265 6.01239 18.52888 8.10033 15.75969 c 12.50104 19.07787 l 13.81728 17.3317 15.3033 15.71118 16.92822 14.24721 c 13.97603 10.97093 l 12.97726 11.87047 12.0226 12.82735 11.12085 13.8261 c 12.35112 14.93289 l 12.78104 14.45445 13.22641 13.98483 13.68059 13.53067 c 14.46107 14.30894 l 13.72469 15.04535 13.01917 15.81702 12.3489 16.61513 c 9.39452 14.13477 l 10.87613 12.36433 12.51646 10.7262 14.2847 9.24239 c 16.05511 11.35455 l 16.71436 10.80115 17.39343 10.27202 18.08794 9.76712 c 18.78242 9.26222 19.49678 8.77937 20.22433 8.3252 c 18.76479 5.98814 l 21.70375 4.15157 24.87642 2.70525 28.19238 1.69104 c 29.80408 6.96265 l 31.8942 6.32327 34.04826 5.8845 36.22215 5.65742 c 35.76137 1.27214 l 34.42308 1.41104 33.08919 1.6227 31.77293 1.90271 c 32.11688 3.521 l 32.74744 3.3865 33.38242 3.26967 34.0174 3.16824 c 34.18936 4.2574 l 33.16194 4.42055 32.13672 4.62779 31.12694 4.87915 c 30.19432 1.13544 l 32.43437 0.57764 34.72292 0.21605 37.0269 0.0551 c 37.21872 2.80446 l 38.07637 2.74492 38.93625 2.71407 39.7939 2.71407 c 40.65375 2.71407 41.51361 2.74492 42.37126 2.80446 c 42.56308 0.0551 l 46.02237 0.29543 49.43756 0.99214 52.71606 2.11877 c 50.92137 7.33084 l 52.98944 8.043 54.98697 8.95357 56.88087 10.04713 c 59.08565 6.22845 l 57.92152 5.55602 56.71771 4.94308 55.48746 4.3963 c 54.815 5.90656 l 55.40366 6.16672 55.98793 6.44675 56.56117 6.73776 c 56.0607 7.7211 l 55.13248 7.24927 54.18224 6.81493 53.21654 6.42468 c 54.66066 2.84633 l 56.8015 3.71281 58.86736 4.7645 60.82521 5.98814 c 59.36565 8.3252 l 60.09322 8.77937 60.80756 9.26222 61.50206 9.76712 c 62.19658 10.27202 62.87564 10.80115 63.53267 11.35455 c 65.30528 9.24239 l 67.95984 11.4714 70.31674 14.04216 72.30324 16.8797 c 67.78786 20.04135 l 69.04237 21.83383 70.12492 23.74536 71.01566 25.74509 c 75.04376 23.95041 l 74.49478 22.72015 73.88185 21.51634 73.20941 20.35222 c 71.7763 21.17902 l 72.09819 21.73682 72.40686 22.30345 72.70009 22.87889 c 71.71677 23.37717 l 71.24495 22.45117 70.73125 21.54059 70.17784 20.65869 c 73.44972 18.61266 l 74.67337 20.5705 75.72725 22.63637 76.5915 24.77719 c 74.0362 25.80904 l 74.35808 26.60716 74.65353 27.4141 74.91809 28.23207 c 75.18266 29.04784 75.42078 29.87683 75.62804 30.71024 c 78.30241 30.04439 l 79.14023 33.40668 79.53488 36.87038 79.47536 40.33627 c 73.96344 40.24147 l 73.92595 42.42639 73.6768 44.60912 73.22263 46.74994 c 77.53516 47.66493 l 77.81517 46.34868 78.02682 45.01479 78.16792 43.6765 c 76.52316 43.50453 l 76.45483 44.1439 76.37103 44.78549 76.26962 45.42046 c 75.18047 45.2485 l 75.34361 44.22107 75.46268 43.18263 75.53543 42.14418 c 79.38496 42.41316 l 79.22401 44.71494 78.86023 47.00569 78.30241 49.24574 c 75.62804 48.5777 l 75.42078 49.4111 75.18266 50.2401 74.91809 51.05586 c 74.65353 51.87383 74.35808 52.68077 74.0362 53.47891 c 76.5915 54.51074 l 75.29291 57.7253 73.5754 60.75906 71.48969 63.52826 c 67.08896 60.21007 l 65.7727 61.95625 64.2867 63.57675 62.66177 65.04073 c 65.61176 68.31702 l 66.61272 67.41747 67.56738 66.4606 68.46693 65.46184 c 67.23888 64.35504 l 66.80894 64.83348 66.36359 65.30309 65.90941 65.75728 c 65.12892 64.97899 l 65.86531 64.2426 66.57085 63.47093 67.24107 62.67502 c 70.19548 65.15317 l 68.71167 66.9214 67.07352 68.56174 65.30528 70.04556 c 63.53267 67.93338 l 62.87564 68.48677 62.19658 69.01593 61.50206 69.52081 c 60.80756 70.02571 60.09322 70.50856 59.36565 70.96274 c 60.82521 73.2998 l 57.88623 75.13637 54.71356 76.58269 51.3976 77.5969 c 49.7859 72.32529 l 47.69579 72.96468 45.54173 73.40341 43.36781 73.63052 c 43.82861 78.01581 l 45.16472 77.8769 46.50081 77.66524 47.81706 77.38524 c 47.47311 75.76692 l 46.84254 75.90141 46.20758 76.01828 45.57259 76.1197 c 45.39842 75.03055 l 46.42805 74.8674 47.45107 74.66014 48.46085 74.4088 c 49.39568 78.1525 l 47.15562 78.7103 44.86707 79.07188 42.56308 79.23282 c 42.37126 76.48349 l 41.51361 76.54301 40.65375 76.57388 39.7939 76.57388 c 38.93625 76.57388 38.07637 76.54301 37.21872 76.48349 c 37.0269 79.23282 l 35.76137 78.01581 m 36.22215 73.63052 l 35.0382 73.50705 33.85423 73.31964 32.69011 73.07271 c 32.34619 74.6888 l 32.9569 74.81888 33.57423 74.93352 34.18936 75.03055 c 34.0174 76.1197 l 32.9569 75.95213 31.90302 75.73607 30.86015 75.4781 c 31.795 71.7344 l 33.66022 72.19962 35.56735 72.50166 37.4877 72.63396 c 37.29588 75.38551 l 38.12709 75.44284 38.9605 75.4715 39.7939 75.4715 c 40.6295 75.4715 41.4629 75.44284 42.2941 75.38551 c 42.10228 72.63396 l 44.98392 72.43332 47.83028 71.85347 50.562 70.91423 c 52.35667 76.12631 l 54.69153 75.32156 56.94922 74.29414 59.08565 73.05946 c 56.88087 69.24081 l 55.84903 69.8361 54.78412 70.37848 53.69498 70.86353 c 54.36742 72.37378 l 54.93846 72.12024 55.5051 71.85126 56.0607 71.56685 c 56.56117 72.55017 l 55.6043 73.03522 54.62318 73.48279 53.62883 73.88405 c 52.18471 70.30792 l 53.96837 69.58696 55.6881 68.70947 57.31961 67.69086 c 58.78137 70.02792 l 59.4869 69.58696 60.1792 69.11954 60.85387 68.63008 c 61.52852 68.14063 62.18555 67.62471 62.82494 67.08896 c 61.05229 64.97899 l 63.26588 63.12257 65.22812 60.97954 66.88611 58.61382 c 71.40149 61.77545 l 72.81696 59.75148 74.03839 57.593 75.04376 55.33754 c 71.01566 53.54506 l 70.53061 54.63199 69.98602 55.69911 69.39073 56.73094 c 70.82162 57.55774 l 71.13472 57.01756 71.43456 56.46637 71.71677 55.91077 c 72.70009 56.41125 l 72.21284 57.36592 71.68149 58.30515 71.11266 59.2135 c 67.84077 57.1697 l 68.86159 55.53816 69.73909 53.81622 70.45786 52.03258 c 73.01318 53.0644 l 73.32625 52.29272 73.61287 51.50784 73.86862 50.71632 c 74.12659 49.9226 74.35808 49.12007 74.55872 48.31093 c 71.88432 47.64508 l 72.58325 44.84062 72.91176 41.95456 72.86105 39.06633 c 78.37297 38.97151 l 78.32889 36.50218 78.04887 34.03723 77.53516 31.6208 c 73.22263 32.538 l 73.46956 33.70432 73.65697 34.88606 73.78264 36.07224 c 75.42738 35.90027 l 75.36127 35.27852 75.2797 34.65678 75.18047 34.03944 c 76.26962 33.86748 l 76.43939 34.92577 76.56065 35.99727 76.63562 37.06659 c 72.78607 37.33778 l 72.65158 35.41742 72.34953 33.51028 71.88432 31.64285 c 74.55872 30.97702 l 74.35808 30.16786 74.12659 29.36533 73.86862 28.57161 c 73.61287 27.78009 73.32625 26.9952 73.01318 26.22353 c 70.45786 27.25536 l 69.3775 24.57655 67.94661 22.0477 66.20705 19.73929 c 70.60997 16.42332 l 69.12396 14.45226 67.44612 12.6223 65.61176 10.97093 c 62.66177 14.24721 l 63.5481 15.04535 64.39471 15.89197 65.19066 16.7761 c 66.41872 15.6715 l 66.002 15.20628 65.56987 14.7521 65.12892 14.30894 c 65.90941 13.53067 l 66.66785 14.28911 67.39542 15.08282 68.08553 15.9052 c 65.12892 18.38557 l 63.89204 16.91278 62.52728 15.54582 61.05229 14.30894 c 62.82494 12.19897 l 62.18555 11.66322 61.52852 11.14952 60.85387 10.65784 c 60.1792 10.16838 59.4869 9.70097 58.78137 9.26003 c 57.31961 11.59708 l 54.87012 10.06697 52.22661 8.86095 49.46402 8.01653 c 51.0757 2.74492 l 48.7144 2.02397 46.28253 1.5301 43.82861 1.27214 c 43.36781 5.65742 l 44.55179 5.7809 45.73355 5.9683 46.89987 6.21523 c 47.24382 4.59914 l 46.6331 4.46906 46.01576 4.3544 45.39842 4.2574 c 45.57259 3.16824 l 46.63089 3.33582 47.68697 3.55188 48.72983 3.80981 c 47.795 7.55353 l 45.92757 7.08832 44.02043 6.78625 42.10228 6.65176 c 42.2941 3.90244 l 41.4629 3.84511 40.6295 3.81645 39.7939 3.81645 c 38.9605 3.81645 38.12709 3.84511 37.29588 3.90244 c 37.4877 6.65176 l 34.60606 6.85461 31.7597 7.43448 29.028 8.3737 c 27.23332 3.16162 l 24.89847 3.96637 22.64078 4.99377 20.50215 6.22845 c 22.70691 10.04713 l 23.73875 9.45184 24.80586 8.90945 25.89502 8.42441 c 25.22255 6.91414 l 24.65152 7.1677 24.0849 7.43668 23.5293 7.7211 c 23.02881 6.73776 l 23.98569 6.25272 24.9646 5.80515 25.96115 5.40387 c 27.40529 8.98001 l 25.62161 9.70097 23.89969 10.57848 22.26817 11.59708 c 20.80861 9.26003 l 20.10089 9.70097 19.4108 10.16838 18.73613 10.65784 c 18.06146 11.14952 17.40445 11.66322 16.76506 12.19897 c 18.53549 14.30894 l 16.32411 16.16536 14.35966 18.30841 12.70387 20.67412 c 8.1885 17.51247 l 6.77304 19.53645 5.54938 21.69493 4.54622 23.95041 c 8.57434 25.74509 l 9.05939 24.65593 9.60176 23.58882 10.19926 22.55699 c 8.76616 21.73021 l 8.45528 22.27037 8.15543 22.82156 7.87102 23.37717 c 6.8899 22.87889 l 7.37715 21.92203 7.90628 20.98279 8.47513 20.07442 c 11.7492 22.11824 l 10.7284 23.74977 9.8509 25.4717 9.12993 27.25536 c 6.5746 26.22353 l 6.26373 26.9952 5.97713 27.78009 5.71916 28.57161 c 5.4634 29.36533 5.2319 30.16786 5.03127 30.97702 c 7.70566 31.64285 l 7.00674 34.44733 6.67824 37.33337 6.72894 40.22162 c 1.21701 40.31644 l 1.25891 42.78577 1.54112 45.2507 2.05263 47.66493 c 6.36736 46.74994 l 6.12044 45.58363 5.93082 44.40187 5.80734 43.21568 c 4.16258 43.38766 l 4.22873 44.00941 4.31032 44.63116 4.40732 45.2485 c 3.31816 45.42046 l 3.1506 44.36218 3.02934 43.29066 2.95438 42.22134 c 6.80391 41.95015 l 6.9384 43.87051 7.24045 45.77765 7.70566 47.64508 c 5.03127 48.31093 l 5.2319 49.12007 5.4634 49.9226 5.71916 50.71632 c 5.97713 51.50784 6.26373 52.29272 6.5746 53.0644 c 9.12993 52.03258 l 10.21248 54.71136 11.64337 57.24025 13.38295 59.54643 c 8.98001 62.86461 l 10.46603 64.83568 12.14166 66.66563 13.97603 68.31702 c 16.92822 65.04073 l 16.0419 64.2426 15.19527 63.39597 14.39934 62.51186 c 13.16908 63.61644 l 13.588 64.08165 14.01791 64.53583 14.46107 64.97899 c 13.68059 65.75728 l 12.92215 64.99884 12.19456 64.20512 11.50447 63.38274 c 14.46107 60.90237 l 15.69574 62.37515 17.06271 63.74211 18.53549 64.97899 c 16.76506 67.08896 l 17.40445 67.62471 18.06146 68.14063 18.73613 68.63008 c 19.4108 69.11954 20.10089 69.58696 20.80861 70.02792 c 22.26817 67.69086 l 24.71986 69.22096 27.3634 70.42697 30.12596 71.27141 c 28.51428 76.54082 l 30.8756 77.26398 33.30525 77.75784 35.76137 78.01581 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -134.159 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -3.855 -2.246 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 189.701 -134.159 Td[<00160014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -134.159 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 189.701 -134.159 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -134.159 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -42.52022 m 42.52022 -42.52022 m 42.52022 42.52022 l 99.21387 42.52022 l 99.21387 -42.52022 l h 99.21387 42.52022 m S Q Q n Q Q q 1 0 0 1 336.883 -134.159 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -42.52022 m -42.52022 -42.52022 m -42.52022 42.52022 l 42.52022 42.52022 l 42.52022 -42.52022 l h 42.52022 42.52022 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -39.795 0 cm 0 G 0 g q 1 0 0 1 336.883 -173.803 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 37.07716 79.29198 m 37.02205 79.28854 l 33.55887 79.04659 30.13802 78.35 26.85556 77.22026 c 26.80388 77.20262 l 28.59914 71.98825 l 26.56409 71.28397 24.59627 70.38625 22.72937 69.31238 c 20.57927 73.03595 l 21.71208 73.68805 22.88118 74.28394 24.07462 74.81699 c 24.70203 73.40756 l 24.12978 73.15215 23.56184 72.88203 23.00368 72.598 c 22.95502 72.57346 l 23.50491 71.49304 l 23.554 71.51802 l 24.48033 71.98962 25.42998 72.42328 26.39392 72.81245 c 26.44518 72.83269 l 24.95825 76.5119 l 24.90787 76.49167 l 22.76422 75.62572 20.69545 74.5718 18.73494 73.34685 c 18.68842 73.31714 l 20.14996 70.97844 l 19.43645 70.5311 18.73642 70.06088 18.05542 69.56601 c 17.37433 69.07108 16.70981 68.55017 16.0638 68.00975 c 14.29137 70.12282 l 14.24918 70.08707 l 11.59009 67.85611 9.23125 65.28227 7.24042 62.43883 c 7.20941 62.39363 l 11.72662 59.23071 l 10.49432 57.46469 9.42831 55.5819 8.5495 53.61588 c 4.62183 55.36418 l 5.15486 56.55765 5.75076 57.72629 6.40286 58.85909 c 7.7382 58.08829 l 7.42575 57.54527 7.12451 56.9931 6.84036 56.43471 c 6.81583 56.38605 l 7.89539 55.83572 l 7.9208 55.88481 l 8.3924 56.8111 8.90648 57.71916 9.45724 58.60072 c 9.48608 58.64766 l 6.12123 60.75038 l 6.09196 60.70386 l 4.86702 58.74336 3.8131 56.67459 2.94714 54.53094 c 2.92691 54.48056 l 5.48349 53.44708 l 5.16925 52.66614 4.87938 51.87396 4.61923 51.07306 c 4.61966 51.07306 l 4.35951 50.27217 4.12703 49.4607 3.9225 48.64395 c 1.24663 49.31142 l 1.23328 49.25801 l 0.39401 45.88943 -0.00058 42.42133 0.05942 38.95027 c 0.06027 38.89516 l 5.57434 38.99161 l 5.61531 36.83835 5.8607 34.68872 6.30511 32.58142 c 2.09882 31.68701 l 1.82893 32.96635 1.6232 34.26228 1.4852 35.56216 c 3.01949 35.72363 l 3.08574 35.10059 3.16734 34.47673 3.26494 33.8582 c 3.27356 33.80437 l 4.4711 33.99385 l 4.4625 34.04811 l 4.29982 35.07484 4.18102 36.11147 4.10895 37.14856 c 4.10507 37.20282 l 0.1464 36.92636 l 0.15027 36.87125 l 0.31157 34.56508 0.67416 32.27309 1.23328 30.03 c 1.24663 29.97661 l 3.9225 30.64406 l 4.12704 29.82732 4.35951 29.01584 4.61966 28.21494 c 4.87987 27.4139 5.16919 26.6216 5.48349 25.8405 c 2.92691 24.80745 l 2.94714 24.75706 l 4.24727 21.53827 5.9665 18.49947 8.05559 15.72697 c 8.08873 15.68263 l 12.49312 19.00227 l 13.79213 17.2844 15.2539 15.68971 16.85184 14.24606 c 13.97487 11.05087 l 13.0053 11.9265 12.0773 12.85449 11.20168 13.82407 c 12.34755 14.85626 l 12.7673 14.39124 13.19891 13.9343 13.642 13.4912 c 13.68076 13.45245 l 14.53856 14.30937 l 14.49895 14.34813 l 13.76369 15.08339 13.05917 15.85297 12.39105 16.64937 c 12.35617 16.69157 l 9.31601 14.14056 l 9.35175 14.09837 l 10.83743 12.32767 12.47847 10.68663 14.24918 9.20094 c 14.29137 9.1652 l 16.0638 11.27782 l 16.70981 10.73741 17.37433 10.21692 18.05542 9.72198 c 18.73642 9.22713 19.43645 8.75691 20.14996 8.30956 c 18.68842 5.97 l 18.73494 5.94115 l 21.67903 4.10194 24.85594 2.6542 28.1754 1.6397 c 28.22794 1.62334 l 29.8406 6.89713 l 31.90118 6.27077 34.02107 5.83882 36.16296 5.61043 c 35.71297 1.3344 l 34.41309 1.4724 33.11716 1.67815 31.83781 1.94801 c 32.15863 3.45648 l 32.77199 3.32736 33.39038 3.21176 34.009 3.11414 c 34.06326 3.10553 l 34.25275 4.30309 l 34.19891 4.31169 l 33.17216 4.47437 32.14983 4.68242 31.14108 4.9335 c 31.08769 4.94641 l 30.12741 1.09583 l 30.1808 1.08247 l 32.4239 0.52336 34.71588 0.16077 37.02205 -0.00049 c 37.07716 -0.00436 l 37.26923 2.74683 l 38.10959 2.68947 38.9523 2.65854 39.7948 2.65854 c 40.63731 2.65854 41.48003 2.68947 42.32039 2.74683 c 42.51245 -0.00436 l 42.56757 -0.00049 l 46.03075 0.24141 49.45116 0.938 52.73361 2.06773 c 52.78531 2.08539 l 50.99046 7.29976 l 53.02553 8.00403 54.99335 8.9013 56.86024 9.97519 c 59.00989 6.25206 l 57.8771 5.59996 56.70845 5.00406 55.51498 4.47101 c 54.88759 5.87999 l 55.45984 6.13542 56.02734 6.40555 56.58551 6.68956 c 56.6346 6.71454 l 56.0847 7.79495 l 56.03561 7.77 l 55.10928 7.29837 54.15962 6.86472 53.19568 6.47556 c 53.14444 6.45488 l 54.63136 2.77611 l 54.68175 2.79634 l 56.8254 3.6623 58.89417 4.7162 60.85466 5.94115 c 60.90118 5.97043 l 59.43965 8.30956 l 60.15315 8.75691 60.8532 9.22713 61.5342 9.72198 c 62.21527 10.21692 62.87979 10.73741 63.5258 11.27782 c 65.29823 9.1652 l 65.34 9.20094 l 67.99908 11.4319 70.35837 14.00572 72.34918 16.84917 c 72.3802 16.89438 l 67.863 20.05728 l 69.09528 21.82332 70.16129 23.70612 71.04012 25.67213 c 74.96779 23.92381 l 74.43475 22.73038 73.83885 21.56128 73.18675 20.42847 c 71.85097 21.1993 l 72.16342 21.74231 72.46468 22.29446 72.74881 22.85287 c 72.77379 22.90196 l 71.6938 23.45229 l 71.66882 23.4032 l 71.1972 22.47691 70.68312 21.5684 70.13235 20.68684 c 70.10352 20.64034 l 73.46794 18.53761 l 73.49765 18.58414 l 74.7226 20.54465 75.77652 22.6134 76.64247 24.75706 c 76.6627 24.80745 l 74.10612 25.84093 l 74.42036 26.62186 74.71022 27.41403 74.97037 28.21494 c 74.96994 28.21494 l 75.2301 29.01584 75.46259 29.82732 75.66711 30.64406 c 78.34254 29.97661 l 78.35634 30.03 l 79.1956 33.39857 79.59024 36.86667 79.53021 40.33772 c 79.52892 40.39285 l 74.01483 40.29639 l 73.97386 42.44965 73.72891 44.59929 73.2845 46.70659 c 77.49078 47.60056 l 77.76068 46.32123 77.96642 45.02571 78.10442 43.72585 c 76.57013 43.56436 l 76.50388 44.18741 76.42227 44.81128 76.32468 45.4298 c 76.31606 45.48363 l 75.1185 45.29416 l 75.12712 45.2399 l 75.28978 44.21315 75.40862 43.17653 75.48065 42.13943 c 75.48453 42.08517 l 79.44278 42.36165 l 79.4389 42.41675 l 79.2776 44.72292 78.91501 47.01491 78.3559 49.25801 c 78.34254 49.31142 l 75.66669 48.64395 l 75.46214 49.4607 75.2301 50.27217 74.96994 51.07306 c 74.70975 51.87411 74.42043 52.66641 74.10612 53.44751 c 76.6627 54.48056 l 76.64247 54.53094 l 75.34235 57.74976 73.6231 60.78854 71.53403 63.56104 c 71.50087 63.6054 l 67.0965 60.28574 l 65.79749 62.0036 64.33572 63.5983 62.73776 65.04193 c 65.61475 68.23712 l 66.5843 67.36151 67.51231 66.4335 68.38792 65.46394 c 67.24205 64.43132 l 66.82233 64.89635 66.39027 65.35329 65.94717 65.79637 c 65.90843 65.83513 l 65.05106 64.9782 l 65.09024 64.93944 l 65.8255 64.20418 66.53001 63.43504 67.19814 62.63864 c 67.23343 62.59644 l 70.27362 65.14743 l 70.23787 65.1892 l 68.75217 66.9599 67.1107 68.60136 65.34 70.08707 c 65.29823 70.12282 l 63.5258 68.00975 l 62.87979 68.55017 62.21527 69.07108 61.5342 69.56601 c 60.8532 70.06088 60.15315 70.5311 59.43965 70.97844 c 60.90118 73.318 l 60.85466 73.34685 l 57.9106 75.18607 54.73325 76.63379 51.41379 77.64832 c 51.36166 77.66425 l 49.749 72.39087 l 47.68843 73.01724 45.56854 73.44919 43.42665 73.67757 c 43.87665 77.95361 l 45.17651 77.81561 46.47203 77.60988 47.75136 77.33998 c 47.43054 75.83151 l 46.81718 75.96065 46.19923 76.07626 45.5806 76.17387 c 45.52635 76.18248 l 45.33687 74.98492 l 45.3907 74.97632 l 46.41743 74.81364 47.43979 74.60559 48.44853 74.35449 c 48.50192 74.34158 l 49.46222 78.19174 l 49.40881 78.20554 l 47.16571 78.76463 44.87372 79.12723 42.56757 79.28854 c 42.51245 79.29198 l 42.32039 76.5412 l 41.48003 76.59854 40.63731 76.62946 39.7948 76.62946 c 38.9523 76.62946 38.10959 76.59854 37.26923 76.5412 c 37.07716 79.29198 l 36.97511 79.17313 m 37.1676 76.42535 l 37.22227 76.42966 l 38.07814 76.4893 38.93674 76.51965 39.7948 76.51965 c 40.65286 76.51965 41.51147 76.48929 42.36732 76.42966 c 42.42201 76.42578 l 42.61407 79.17227 l 44.87698 79.01082 47.1263 78.6551 49.32828 78.10951 c 48.42183 74.47206 l 47.44504 74.71362 46.45538 74.91508 45.46175 75.07407 c 45.6172 76.05545 l 46.23387 75.95715 46.8507 75.84312 47.46198 75.71353 c 47.51538 75.70233 l 47.88228 77.42697 l 47.82845 77.43817 l 46.51015 77.7182 45.17374 77.93085 43.83359 78.07118 c 43.77847 78.07678 l 43.3065 73.58195 l 43.36076 73.57681 l 45.53226 73.34879 47.68285 72.91074 49.77052 72.27246 c 49.82263 72.25653 l 51.43402 77.52559 l 54.7079 76.52003 57.84175 75.09213 60.74916 73.2814 c 59.28937 70.94528 l 59.33588 70.916 l 60.06342 70.46138 60.77583 69.98102 61.4696 69.47688 c 62.16338 68.97272 62.84105 68.44362 63.49825 67.8922 c 63.54002 67.85646 l 65.30986 69.96606 l 67.04562 68.50558 68.65639 66.8948 70.11687 65.15906 c 67.24506 62.74974 l 66.59721 63.51956 65.91576 64.26418 65.20522 64.97691 c 65.90756 65.67924 l 66.34868 65.23679 66.78046 64.78261 67.19814 64.31848 c 67.23473 64.27757 l 68.54553 65.45747 l 68.5085 65.49838 l 67.60703 66.49951 66.65031 67.45622 65.64919 68.3577 c 65.60828 68.39473 l 62.58405 65.03589 l 62.62495 64.9993 l 64.24721 63.53844 65.73036 61.92163 67.0444 60.17809 c 67.07713 60.13373 l 71.47806 63.45036 l 73.53539 60.71208 75.23126 57.7148 76.51845 54.54085 c 73.96445 53.50822 l 73.9847 53.45784 l 74.30597 52.66277 74.6003 51.85492 74.8653 51.03905 c 75.13033 50.22316 75.36835 49.39688 75.5754 48.5647 c 75.58832 48.51132 l 78.26031 49.17747 l 78.80591 46.9755 79.16162 44.7262 79.32307 42.46327 c 75.584 42.20189 l 75.5127 43.20584 75.39763 44.20863 75.24167 45.20287 c 76.22305 45.35832 l 76.31952 44.74129 76.40344 44.11946 76.46849 43.49847 c 76.47366 43.44379 l 78.22758 43.62767 l 78.22198 43.68279 l 78.08165 45.02293 77.869 46.35934 77.58897 47.67764 c 77.57777 47.73146 l 73.15746 46.79185 l 73.16867 46.73802 l 73.62263 44.60245 73.8709 42.42207 73.90889 40.2391 c 73.91019 40.18443 l 79.4191 40.28088 l 79.47359 36.85594 79.08426 33.43497 78.26074 30.11009 c 75.58832 30.77626 l 75.5754 30.7233 l 75.36835 29.89113 75.13033 29.0644 74.8653 28.24852 c 74.6003 27.43266 74.30684 26.62524 73.98555 25.83015 c 73.96445 25.77979 l 76.51802 24.74759 l 75.66525 22.64502 74.63081 20.61575 73.43134 18.69006 c 70.25252 20.67609 l 70.7845 21.53044 71.28183 22.40965 71.73987 23.30588 c 72.62479 22.85458 l 72.34067 22.29836 72.04216 21.74733 71.72997 21.2066 c 71.70241 21.15839 l 73.22981 20.27689 l 73.25694 20.3247 l 73.93083 21.49149 74.54536 22.69705 75.0931 23.92812 c 75.11507 23.97807 l 70.98671 25.81639 l 70.96475 25.766 l 70.07712 23.77153 68.99582 21.8624 67.74371 20.07408 c 67.71228 20.02885 l 72.22646 16.86812 l 70.25833 14.06541 67.93121 11.52632 65.31071 9.32152 c 63.54002 11.43155 l 63.49825 11.39581 l 62.84105 10.84439 62.16338 10.31528 61.4696 9.81113 c 60.77583 9.30698 60.06342 8.82663 59.33588 8.372 c 59.28937 8.34271 l 60.74873 6.00703 l 58.82304 4.80756 56.79335 3.77354 54.69078 2.92078 c 53.28654 6.39632 l 54.21902 6.77449 55.13834 7.19388 56.03561 7.64899 c 56.48647 6.76407 l 55.9294 6.48158 55.36394 6.2103 54.79327 5.95665 c 54.74332 5.9347 l 55.46074 4.32332 l 55.51068 4.3457 l 56.74176 4.89343 57.94733 5.50754 59.1141 6.18144 c 59.16191 6.209 l 56.90202 10.1229 l 56.85422 10.09534 l 54.96333 9.00359 52.9673 8.09349 50.90306 7.38286 c 50.85138 7.36522 l 52.64534 2.15515 l 49.40517 1.04498 46.03067 0.35837 42.61407 0.11487 c 42.42201 2.86264 l 42.36732 2.85834 l 41.51147 2.79869 40.65286 2.76834 39.7948 2.76834 c 38.93674 2.76834 38.07814 2.7987 37.22227 2.85834 c 37.1676 2.86223 l 36.97511 0.11574 l 34.7122 0.27719 32.46333 0.63289 30.26132 1.1785 c 31.16777 4.81595 l 32.14458 4.57437 33.13423 4.37248 34.12785 4.21352 c 33.9724 3.23256 l 33.35573 3.33086 32.7389 3.44446 32.12762 3.57404 c 32.07423 3.58566 l 31.70735 1.86104 l 31.76117 1.84941 l 33.07947 1.56937 34.41588 1.3567 35.75603 1.2164 c 35.81114 1.21123 l 36.2831 5.7056 l 36.22885 5.7112 l 34.05734 5.93922 31.90675 6.37727 29.81908 7.01555 c 29.76654 7.03146 l 28.1556 1.76242 l 24.88171 2.76797 21.74785 4.19588 18.84044 6.00659 c 20.30025 8.34271 l 20.25372 8.372 l 19.5262 8.82663 18.81378 9.30698 18.12001 9.81113 c 17.42625 10.31528 16.74858 10.84439 16.09137 11.39581 c 16.04916 11.43155 l 14.27931 9.32193 l 12.54355 10.78242 10.93324 12.39275 9.47276 14.12851 c 12.34454 16.53783 l 12.9924 15.76802 13.67386 15.02382 14.3844 14.31111 c 13.68205 13.60876 l 13.24094 14.05121 12.80872 14.50539 12.39105 14.96951 c 12.35446 15.01042 l 11.04408 13.83052 l 11.08112 13.78961 l 11.98259 12.7885 12.93932 11.83179 13.94041 10.93031 c 13.98132 10.89328 l 17.00514 14.2521 l 16.96423 14.28871 l 15.34198 15.74956 13.85924 17.36636 12.54521 19.10991 c 12.51248 19.15384 l 8.11156 15.83765 l 6.05423 18.57591 4.35834 21.5732 3.07115 24.74716 c 5.62517 25.77979 l 5.60449 25.83015 l 5.28322 26.62524 4.98889 27.43266 4.72388 28.24852 c 4.45885 29.0644 4.22127 29.89113 4.0142 30.7233 c 4.00131 30.77626 l 1.3293 30.11052 l 0.7837 32.31252 0.428 34.56139 0.26654 36.82431 c 4.0056 37.08612 l 4.07692 36.08217 4.19199 35.07936 4.34795 34.08514 c 3.36656 33.92969 l 3.2701 34.54672 3.18616 35.16853 3.12111 35.78952 c 3.11551 35.84422 l 1.36203 35.66034 l 1.3672 35.60522 l 1.5075 34.26508 1.72017 32.92867 2.00021 31.61037 c 2.01184 31.55655 l 6.43214 32.49615 l 6.42052 32.54999 l 5.96654 34.68556 5.71872 36.86551 5.68071 39.04845 c 5.67943 39.10358 l 0.17007 39.00711 l 0.11559 42.43205 0.50493 45.85304 1.32845 49.1779 c 4.00087 48.51132 l 4.01378 48.5647 l 4.22084 49.39688 4.45885 50.22316 4.72388 51.03905 c 4.98889 51.8549 5.28278 52.66277 5.60406 53.45784 c 5.62517 53.50822 l 3.07158 54.53998 l 3.92435 56.64255 4.95836 58.67224 6.15784 60.59793 c 9.3371 58.6115 l 8.80511 57.75711 8.30779 56.87834 7.84975 55.98213 c 6.96483 56.43341 l 7.24893 56.98964 7.54745 57.54066 7.85965 58.0814 c 7.88678 58.1292 l 6.3598 59.01111 l 6.33224 58.9633 l 5.65834 57.79651 5.04424 56.59096 4.4965 55.35988 c 4.47412 55.30992 l 8.6029 53.47162 l 8.62485 53.52156 l 9.51251 55.51605 10.5938 57.4256 11.84589 59.21393 c 11.87733 59.25914 l 7.36314 62.41989 l 9.33127 65.2226 11.65839 67.76169 14.27888 69.96649 c 16.04916 67.85646 l 16.09137 67.8922 l 16.74858 68.44362 17.42625 68.97272 18.12001 69.47688 c 18.81378 69.98102 19.5262 70.46138 20.25372 70.916 c 20.30025 70.94528 l 18.84087 73.28053 l 20.76657 74.48 22.79584 75.51445 24.89839 76.36722 c 26.30309 72.89168 l 25.37059 72.5135 24.45126 72.09413 23.554 71.639 c 23.1027 72.52394 l 23.65979 72.80641 24.22566 73.07771 24.79634 73.33136 c 24.84628 73.3533 l 24.12888 74.96426 l 24.07892 74.94229 l 22.84785 74.39456 21.64229 73.78003 20.47551 73.10614 c 20.4277 73.07901 l 22.68716 69.1651 l 22.73538 69.19266 l 24.62628 70.28441 26.6223 71.19408 28.68655 71.90471 c 28.73822 71.92279 l 26.94383 77.13243 l 30.18402 78.2426 33.55852 78.92964 36.97511 79.17313 c 35.81114 78.07678 m 35.75603 78.07118 l 33.29686 77.81294 30.86217 77.31699 28.49794 76.59416 c 28.4454 76.57823 l 30.0572 71.30528 l 27.32677 70.4658 24.71295 69.27478 22.28755 67.76517 c 20.82602 70.10385 l 20.77951 70.07457 l 20.07156 69.63219 19.3786 69.16478 18.7035 68.6742 c 18.0284 68.18362 17.36906 67.66786 16.72954 67.13129 c 16.68776 67.09642 l 18.4602 64.98335 l 17.01443 63.76617 15.67262 62.42436 14.45544 60.9786 c 11.58365 63.38792 l 12.25009 64.17992 12.95146 64.94562 13.68248 65.67882 c 14.38397 64.97734 l 13.95506 64.54709 13.53525 64.10532 13.12914 63.65404 c 13.0921 63.61313 l 14.40291 62.43324 l 14.43951 62.47415 l 15.23553 63.35815 16.08022 64.20326 16.96423 64.9993 c 17.00514 65.03589 l 13.98132 68.39473 l 13.94041 68.3577 l 12.10329 66.70332 10.4243 64.87239 8.93619 62.89787 c 8.90305 62.85396 l 13.30612 59.53517 l 11.59085 57.25082 10.17674 54.75092 9.10242 52.10397 c 6.54497 53.13704 l 6.52473 53.08578 l 6.21208 52.31213 5.92569 51.52638 5.66779 50.73245 c 5.40993 49.93855 5.179 49.13469 4.97751 48.32486 c 4.96417 48.27145 l 7.64088 47.604 l 7.18677 45.76912 6.89015 43.89528 6.75511 42.00983 c 3.01561 42.27121 l 3.08891 43.3035 3.20659 44.33553 3.367 45.3579 c 4.34665 45.2033 l 4.25285 44.60329 4.17137 43.99878 4.1081 43.3947 c 4.10294 43.33957 l 5.8564 43.1557 l 5.86201 43.20996 l 5.9859 44.3933 6.17323 45.57391 6.42052 46.73802 c 6.43214 46.79185 l 2.01184 47.73146 l 2.00021 47.67764 l 1.4861 45.25916 1.20483 42.79048 1.16179 40.31834 c 1.16049 40.26366 l 6.67415 40.16763 l 6.62944 37.31085 6.95392 34.4575 7.64003 31.684 c 4.96417 31.01654 l 4.97751 30.96313 l 5.179 30.15332 5.40993 29.34944 5.66779 28.55556 c 5.92569 27.76161 6.21208 26.97588 6.52473 26.20221 c 6.54497 26.15097 l 9.10284 27.18404 l 9.81381 25.43254 10.6752 23.74179 11.67407 22.13718 c 8.49567 20.15073 l 7.94858 21.0293 7.43622 21.933 6.96526 22.85458 c 7.84888 23.30501 l 8.12523 22.76405 8.41559 22.22847 8.71916 21.70267 c 8.74672 21.65488 l 10.2737 22.53636 l 10.24614 22.58458 l 9.65108 23.61488 9.1085 24.67896 8.62485 25.766 c 8.6029 25.81639 l 4.47412 23.97807 l 4.4965 23.92812 l 5.50175 21.6694 6.7259 19.50696 8.14386 17.48175 c 8.17485 17.43654 l 12.69162 20.59857 l 14.33392 18.26123 16.2749 16.14388 18.4602 14.3042 c 16.68776 12.19159 l 16.72954 12.15628 l 17.36906 11.6197 18.0284 11.10439 18.7035 10.6138 c 19.3786 10.12321 20.07156 9.6554 20.77951 9.213 c 20.82602 9.18414 l 22.28798 11.52327 l 23.8926 10.5244 25.58334 9.66301 27.33484 8.95204 c 25.93102 5.4765 l 24.97179 5.8655 24.02663 6.29666 23.10356 6.76492 c 23.554 7.64854 l 24.09544 7.37405 24.645 7.11012 25.19983 6.86354 c 25.2502 6.84114 l 25.9672 8.45209 l 25.91681 8.47404 l 24.82976 8.9577 23.76569 9.50027 22.73538 10.09534 c 22.68716 10.1229 l 20.4277 6.209 l 20.47551 6.18144 l 22.61685 4.94507 24.87698 3.91461 27.21469 3.10983 c 27.2668 3.09174 l 29.06206 8.30568 l 31.76483 7.38051 34.57936 6.80687 37.42899 6.60301 c 37.23694 3.85265 l 37.29118 3.84877 l 38.12395 3.79073 38.95981 3.76093 39.7948 3.76093 c 40.6298 3.76093 41.46565 3.79076 42.29842 3.84877 c 42.35269 3.85265 l 42.16063 6.60431 l 44.0461 6.73935 45.91992 7.03596 47.7548 7.49008 c 48.66125 3.85265 l 47.65646 3.60413 46.63889 3.3969 45.61678 3.23343 c 45.46219 4.21307 l 46.06165 4.30867 46.66122 4.41914 47.25528 4.54507 c 47.30911 4.55672 l 46.94266 6.28134 l 46.88882 6.26971 l 45.72472 6.02243 44.5441 5.8351 43.36076 5.7112 c 43.3065 5.7056 l 43.77847 1.21123 l 43.83359 1.21681 l 46.29276 1.47507 48.72745 1.97104 51.09167 2.69385 c 51.14421 2.70978 l 49.53198 7.98271 l 52.2624 8.8222 54.87666 10.01321 57.30208 11.52283 c 58.7636 9.18414 l 58.80966 9.21342 l 59.51762 9.65582 60.211 10.12321 60.88611 10.6138 c 61.5612 11.10439 62.22012 11.6197 62.85963 12.15628 c 62.90184 12.19159 l 61.12941 14.30464 l 62.57516 15.52182 63.91698 16.86363 65.13416 18.3094 c 68.00554 15.90007 l 67.33907 15.10808 66.63815 14.3424 65.90712 13.60918 c 65.20566 14.31067 l 65.63455 14.7409 66.05438 15.18225 66.46048 15.63353 c 66.4975 15.67444 l 65.1867 16.85434 l 65.1501 16.81343 l 64.35406 15.92941 63.50896 15.08473 62.62495 14.28871 c 62.58405 14.2521 l 65.60828 10.89328 l 65.64919 10.93031 l 67.48633 12.58467 69.1653 14.4156 70.65343 16.39012 c 70.68616 16.43405 l 66.28307 19.75241 l 67.99834 22.03674 69.41286 24.53708 70.4872 27.18404 c 73.04465 26.15097 l 73.06488 26.20221 l 73.37752 26.97588 73.66393 27.76161 73.92181 28.55556 c 74.1797 29.34944 74.4106 30.15332 74.61209 30.96313 c 74.62546 31.01654 l 71.94872 31.684 l 72.40283 33.51888 72.69948 35.39272 72.83449 37.27818 c 76.574 37.0168 l 76.5007 35.98451 76.38301 34.95247 76.22263 33.93011 c 75.24297 34.08472 l 75.33676 34.68472 75.41782 35.28925 75.48108 35.89331 c 75.4867 35.94798 l 73.73277 36.1323 l 73.72762 36.07805 l 73.60371 34.8947 73.41595 33.71411 73.16867 32.54999 c 73.15746 32.49615 l 77.57777 31.55655 l 77.58897 31.61037 l 78.10307 34.02884 78.38477 36.49753 78.42783 38.96965 c 78.42867 39.02434 l 72.91547 39.12036 l 72.96017 41.97716 72.63568 44.83049 71.94957 47.604 c 74.62546 48.27145 l 74.61209 48.32486 l 74.4106 49.13469 74.1797 49.93855 73.92181 50.73245 c 73.66393 51.52638 73.37752 52.31215 73.06488 53.08578 c 73.04465 53.13704 l 70.48676 52.10397 l 69.7758 53.85547 68.91399 55.54622 67.9151 57.15083 c 71.09395 59.13684 l 71.64104 58.25826 72.15295 57.35503 72.62393 56.43341 c 71.74072 55.98256 l 71.46439 56.52351 71.17401 57.05952 70.87044 57.58533 c 70.84288 57.63312 l 69.3159 56.7512 l 69.34346 56.70341 l 69.93854 55.67311 70.48111 54.6086 70.96475 53.52156 c 70.98671 53.47162 l 75.11507 55.30992 l 75.0931 55.35988 l 74.08786 57.61859 72.86371 59.78104 71.44576 61.80624 c 71.41475 61.85147 l 66.89798 58.68901 l 65.25569 61.02634 63.31471 63.14413 61.12941 64.9838 c 62.90184 67.09642 l 62.85963 67.13129 l 62.22012 67.66788 61.5612 68.18362 60.88611 68.6742 c 60.211 69.16478 59.51762 69.63219 58.80966 70.07457 c 58.7636 70.10385 l 57.30164 67.7643 l 55.69702 68.76318 54.00627 69.625 52.25478 70.33595 c 53.6586 73.8115 l 54.61783 73.4225 55.56297 72.9909 56.48604 72.52264 c 56.03561 71.63945 l 55.49416 71.91396 54.94418 72.17787 54.38936 72.42447 c 54.3394 72.44685 l 53.62242 70.8359 l 53.67236 70.81395 l 54.75941 70.3303 55.82393 69.78773 56.85422 69.19266 c 56.90202 69.1651 l 59.16191 73.07901 l 59.1141 73.10614 l 56.97275 74.34248 54.71263 75.3734 52.37491 76.17818 c 52.32239 76.19583 l 50.52756 70.98232 l 47.82478 71.9075 45.01025 72.48112 42.16063 72.685 c 42.35269 75.43535 l 42.29842 75.43924 l 41.46565 75.49727 40.6298 75.52708 39.7948 75.52708 c 38.95981 75.52708 38.12395 75.49725 37.29118 75.43924 c 37.23694 75.43535 l 37.42899 72.68369 l 35.5435 72.54866 33.66968 72.25203 31.83481 71.79791 c 30.92836 75.43535 l 31.93317 75.68388 32.95071 75.89111 33.97282 76.0546 c 34.12743 75.07494 l 33.52795 74.97932 32.92839 74.86841 32.33432 74.7425 c 32.2805 74.7313 l 32.64696 73.00665 l 32.70079 73.01787 l 33.86491 73.26515 35.04552 73.4529 36.22885 73.57681 c 36.2831 73.58195 l 35.81114 78.07678 l 35.71297 77.95361 m 36.16296 73.6767 l 35.01215 73.55432 33.86484 73.37242 32.73222 73.1337 c 32.4114 74.6456 l 33.00398 74.7703 33.60143 74.88203 34.19891 74.97632 c 34.25275 74.98492 l 34.06326 76.18248 l 34.009 76.17387 l 32.94745 76.00569 31.8903 75.79099 30.8474 75.53139 c 30.79443 75.5176 l 31.75386 71.66743 l 31.80725 71.68036 l 33.67079 72.14485 35.57547 72.44635 37.49141 72.58035 c 37.54654 72.58423 l 37.35362 75.33202 l 38.16591 75.38739 38.98055 75.41727 39.7948 75.41727 c 40.60907 75.41727 41.42369 75.38734 42.23598 75.33202 c 42.04308 72.58423 l 42.09819 72.58035 l 44.97537 72.37933 47.81686 71.80077 50.54393 70.86218 c 50.59647 70.84453 l 52.39 76.05415 l 54.68513 75.26033 56.90472 74.24782 59.00989 73.03638 c 56.86024 69.31195 l 55.85733 69.88904 54.82266 70.41681 53.76625 70.88887 c 54.39453 72.30045 l 54.94736 72.05367 55.49617 71.79251 56.03561 71.51802 c 56.0847 71.49304 l 56.6346 72.57346 l 56.58551 72.598 l 55.62784 73.08559 54.64622 73.53397 53.64955 73.93637 c 53.59874 73.95662 l 52.11224 70.27783 l 52.16306 70.25673 l 53.94397 69.53731 55.66252 68.66226 57.29129 67.64459 c 57.33781 67.61488 l 58.7976 69.95099 l 59.48717 69.5186 60.16333 69.06378 60.82152 68.5855 c 61.47977 68.10715 62.12196 67.60362 62.74638 67.08133 c 60.97568 64.9713 l 61.01787 64.93643 l 63.22704 63.08296 65.18674 60.9445 66.8407 58.58221 c 66.87215 58.53699 l 71.38503 61.69687 l 72.77518 59.70535 73.97708 57.58167 74.96779 55.36418 c 71.03925 53.61543 l 70.56718 54.67186 70.03984 55.70653 69.46275 56.70944 c 70.80154 57.48196 l 71.10333 56.95743 71.39441 56.42409 71.66882 55.88481 c 71.6938 55.83572 l 72.77379 56.38605 l 72.74881 56.43471 l 72.2612 57.39243 71.72925 58.33179 71.15984 59.24321 c 71.13098 59.28972 l 67.76569 57.187 l 67.7954 57.14049 l 68.81306 55.51172 69.68811 53.79317 70.40753 52.01225 c 70.42863 51.96144 l 72.98221 52.99321 l 73.2859 52.23839 73.56618 51.47246 73.81761 50.69843 c 74.06906 49.9243 74.29251 49.14001 74.49023 48.3507 c 71.81824 47.68452 l 71.83116 47.63156 l 72.52841 44.83295 72.85638 41.95116 72.8065 39.0674 c 72.80608 39.01271 l 78.31413 38.91669 l 78.26837 36.48817 77.99246 34.06358 77.49078 31.68701 c 73.2845 32.58142 l 73.52321 33.71404 73.70512 34.86134 73.8275 36.01216 c 75.36482 35.85023 l 75.30078 35.24847 75.22142 34.64568 75.12712 34.04811 c 75.11894 33.99385 l 76.31606 33.80437 l 76.32468 33.8582 l 76.49283 34.91974 76.61534 35.99187 76.68983 37.06416 c 76.69328 37.11842 l 72.73503 37.39574 l 72.73116 37.3406 l 72.59715 35.42467 72.29565 33.51999 71.83116 31.65643 c 71.81824 31.60306 l 74.49023 30.93732 l 74.29251 30.14801 74.06906 29.3637 73.81761 28.58958 c 73.56618 27.81554 73.2859 27.04964 72.98221 26.29482 c 70.42863 27.32657 l 70.40753 27.27531 l 69.32738 24.60115 67.89937 22.07687 66.16377 19.77351 c 66.13104 19.73001 l 70.53069 16.41382 l 69.06624 14.47649 67.4169 12.67847 65.61475 11.05087 c 62.73691 14.24606 l 63.59547 15.0217 64.41711 15.8429 65.19273 16.70146 c 66.3412 15.66711 l 65.9356 15.21779 65.51836 14.77626 65.09024 14.34813 c 65.05106 14.30937 l 65.90843 13.45245 l 65.94717 13.4912 l 66.70735 14.25137 67.4362 15.04654 68.12697 15.86995 c 68.1623 15.91214 l 65.1221 18.4627 l 65.08723 18.42093 l 63.85294 16.94984 62.48895 15.58588 61.01787 14.35158 c 60.97568 14.3167 l 62.74638 12.20667 l 62.12196 11.68439 61.47977 11.18085 60.82152 10.7025 c 60.16333 10.22421 59.48717 9.76941 58.7976 9.33702 c 57.33781 11.67313 l 57.29129 11.64342 l 54.84535 10.11539 52.2058 8.913 49.448 8.07013 c 49.39546 8.05377 l 51.00641 2.78514 l 48.68294 2.0784 46.29195 1.59154 43.87665 1.3344 c 43.42665 5.6113 l 44.57747 5.73367 45.72478 5.91559 46.85739 6.15431 c 47.1782 4.64241 l 46.58562 4.5177 45.98817 4.40596 45.3907 4.31169 c 45.33687 4.30309 l 45.52635 3.10553 l 45.5806 3.11414 l 46.64215 3.28232 47.69887 3.49702 48.74178 3.7566 c 48.79518 3.76996 l 47.83533 7.62056 l 47.78236 7.60765 l 45.91882 7.14314 44.01414 6.84166 42.09819 6.70766 c 42.04308 6.70378 l 42.23598 3.956 l 41.42369 3.9006 40.60907 3.87074 39.7948 3.87074 c 38.98055 3.87074 38.16591 3.90067 37.35362 3.956 c 37.54654 6.70378 l 37.49141 6.70766 l 34.61423 6.90866 31.77232 7.48724 29.04526 8.42583 c 28.99315 8.44348 l 27.19962 3.23384 l 24.90446 4.02768 22.68446 5.04018 20.57927 6.25162 c 22.72937 9.97604 l 23.73228 9.39897 24.76695 8.8712 25.82336 8.39912 c 25.19508 6.98755 l 24.64226 7.23434 24.09344 7.49551 23.554 7.77 c 23.50491 7.79495 l 22.95502 6.71454 l 23.00368 6.68956 l 23.96135 6.202 24.94339 5.75403 25.94005 5.35164 c 25.99088 5.33096 l 27.47737 9.01018 l 27.42613 9.03128 l 25.64522 9.75069 23.92708 10.62573 22.29831 11.64342 c 22.25182 11.67313 l 20.792 9.33702 l 20.10243 9.76941 19.42628 10.22421 18.7681 10.7025 c 18.10983 11.18085 17.46764 11.68439 16.84322 12.20667 c 18.61351 14.3167 l 18.57173 14.35158 l 16.36256 16.20505 14.40244 18.34349 12.74846 20.7058 c 12.71747 20.751 l 8.20457 17.59068 l 6.81444 19.58223 5.61253 21.70633 4.62183 23.92381 c 8.54994 25.67256 l 9.022 24.61615 9.54977 23.58148 10.12685 22.57857 c 8.78806 21.80603 l 8.48627 22.33057 8.19519 22.86392 7.9208 23.4032 c 7.89539 23.45229 l 6.81583 22.90196 l 6.84036 22.85287 l 7.32799 21.89514 7.85994 20.9562 8.42935 20.04478 c 8.45863 19.99786 l 11.82393 22.10101 l 11.79422 22.1475 l 10.77654 23.77628 9.9015 25.4944 9.18208 27.27531 c 9.16098 27.32657 l 6.6074 26.29482 l 6.30371 27.04962 6.02342 27.81554 5.772 28.58958 c 5.52054 29.3637 5.29709 30.14801 5.09938 30.93732 c 7.77136 31.60306 l 7.75845 31.65643 l 7.06119 34.45505 6.73322 37.33685 6.7831 40.2206 c 6.78352 40.2753 l 1.27548 40.3713 l 1.32124 42.79982 1.59714 45.22398 2.09882 47.60056 c 6.30511 46.70659 l 6.0664 45.57397 5.88405 44.42667 5.76166 43.27585 c 4.22437 43.43776 l 4.28839 44.03954 4.3682 44.64232 4.4625 45.2399 c 4.47067 45.29416 l 3.27356 45.48363 l 3.26494 45.4298 l 3.09677 44.36826 2.97427 43.29614 2.89977 42.22383 c 2.89589 42.16959 l 6.85458 41.89227 l 6.85846 41.94739 l 6.99246 43.86334 7.29395 45.768 7.75845 47.63156 c 7.77136 47.68452 l 5.09938 48.3507 l 5.29709 49.14001 5.52054 49.9243 5.772 50.69843 c 6.02342 51.47246 6.30371 52.23837 6.6074 52.99321 c 9.16098 51.96144 l 9.18208 52.01225 l 10.26222 54.68642 11.69023 57.21114 13.42583 59.51451 c 13.45856 59.55798 l 9.05893 62.87419 l 10.52336 64.81151 12.1727 66.60953 13.97487 68.23712 c 16.85226 65.04193 l 15.9937 64.26631 15.1725 63.44467 14.39688 62.5861 c 13.24799 63.62088 l 13.65358 64.0702 14.07082 64.51132 14.49895 64.93944 c 14.53856 64.9782 l 13.68076 65.83513 l 13.642 65.79637 l 12.88182 65.0362 12.15341 64.24146 11.46263 63.41806 c 11.42732 63.37585 l 14.4675 60.82487 l 14.50238 60.86707 l 15.73668 62.33815 17.10065 63.70213 18.57173 64.93643 c 18.61351 64.9713 l 16.84322 67.08133 l 17.46764 67.60362 18.10983 68.10715 18.7681 68.5855 c 19.42628 69.06378 20.10243 69.5186 20.792 69.95099 c 22.25182 67.61488 l 22.29831 67.64459 l 24.74425 69.1726 27.38339 70.37502 30.14119 71.21786 c 30.19415 71.23422 l 28.58319 76.50285 l 30.90666 77.2096 33.29768 77.69647 35.71297 77.95361 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -134.159 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -3.855 -2.25 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 336.883 -134.159 Td[<00160015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -134.159 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -134.159 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 336.883 -134.159 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -134.159 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -42.52022 m 42.52022 -42.52022 m 42.52022 42.52022 l 99.21387 42.52022 l 99.21387 -42.52022 l h 99.21387 42.52022 m S Q Q n Q Q BT /F10 15 Tf 192.825 -216.044 Td[<0014>]TJ /F4 15 Tf 22.35 0 Td[<081d0f560ed50a5e>]TJ ET BT /F10 12 Tf 0 -245.124 Td[<0014000f0012>]TJ /F4 12 Tf 26.688 0 Td[<069e12330ed5>]TJ ET q 1 0 0 1 28.346 -283.379 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -283.379 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.346 -308.89 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 25.57526 51.08676 m 11.48528 51.08676 0.06377 39.66525 0.06377 25.57526 c 25.57526 25.57526 l 25.57526 51.08676 l 29.402 50.79848 m 29.402 17.9218 l 49.91068 17.9218 l 52.58939 26.44264 50.61479 35.74925 44.70633 42.44856 c 44.7089 35.77986 l 46.99982 31.48627 47.77791 26.54214 46.91818 21.75108 c 40.88216 21.74854 l 40.88216 45.98445 l 39.68056 46.88756 38.39734 47.68097 37.05544 48.35703 c 37.05544 21.74854 l 33.2287 21.74854 l 33.2287 49.91068 l 31.97865 50.30356 30.69542 50.60204 29.402 50.79848 c 21.74854 46.92073 m 21.74854 37.05544 l 16.64624 37.05544 l 16.64624 45.33647 l 18.27386 46.07375 19.9908 46.60693 21.74854 46.92073 c 12.81952 43.11186 m 12.81952 37.05544 l 7.17891 37.05544 l 8.65094 39.4178 10.5694 41.47403 12.81952 43.11186 c 5.28596 33.2287 m 12.81952 33.2287 l 12.81952 29.402 l 4.23235 29.402 l 4.4645 30.70561 4.8191 31.98885 5.28596 33.2287 c 16.64624 33.2287 m 21.74854 33.2287 l 21.74854 29.402 l 16.64624 29.402 l 16.64624 33.2287 l 0.35204 21.74854 m 0.90308 18.10548 2.24243 14.62062 4.26805 11.54393 c 25.57526 11.54393 l 25.57526 21.74854 l 0.35204 21.74854 l 5.28596 17.9218 m 21.74854 17.9218 l 21.74854 15.37067 l 6.44164 15.37067 l 6.00284 16.19467 5.61505 17.04932 5.28596 17.9218 c 29.402 15.37067 m 29.402 0.35204 l 38.06569 1.6659 45.45126 7.33965 48.95654 15.37067 c 44.7089 15.37067 l 42.23427 10.72757 38.15244 7.1432 33.2287 5.28596 c 33.2287 15.37067 l 29.402 15.37067 l 11.60262 8.99278 m 6.18907 8.99278 l 11.0337 3.32669 18.11824 0.06377 25.57526 0.06377 c 25.57526 3.89049 l 20.46275 3.89049 15.51099 5.69925 11.60262 8.99278 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -283.379 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -283.379 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -283.379 Td[<00160016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -283.379 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -283.379 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -283.379 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -283.379 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 12 Tf 0 -345.285 Td[<0014000f0013>]TJ /F4 12 Tf 26.688 0 Td[<0d7012330ed5>]TJ ET q 1 0 0 1 28.346 -383.539 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -383.539 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.283 -409.114 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 25.57526 51.08676 m 11.48528 51.08676 0.06377 39.66525 0.06377 25.57526 c 0.06377 11.48528 11.48528 0.06377 25.57526 0.06377 c 39.66525 0.06377 51.08676 11.48528 51.08676 25.57526 c 51.08676 39.66525 39.66525 51.08676 25.57526 51.08676 c 27.10596 47.97435 m 35.9712 47.36974 43.65016 41.58629 46.68092 33.23126 c 38.84125 33.2287 l 38.84125 30.16733 l 47.55087 30.16733 l 48.18355 27.13911 48.18355 24.0114 47.55087 20.98318 c 38.84125 20.98318 l 38.84125 17.9218 l 46.68092 17.9218 l 43.65016 9.56679 35.97374 3.78334 27.10596 3.17616 c 27.10596 11.79906 l 34.33847 11.79906 l 32.93788 10.90614 31.40463 10.23264 29.79996 9.80405 c 30.59337 6.84727 l 35.15993 8.06927 39.12187 10.92146 41.73424 14.86043 c 9.41628 14.86043 l 12.02866 10.92146 15.99059 8.06927 20.55716 6.84727 c 21.35056 9.80405 l 19.74588 10.23264 18.21265 10.9087 16.81206 11.79906 c 24.04457 11.79906 l 24.04457 3.17616 l 15.17679 3.78079 7.50037 9.56424 4.4696 17.91927 c 12.30928 17.9218 l 12.30928 20.98318 l 3.59966 20.98318 l 2.96698 24.0114 2.96698 27.13911 3.59966 30.16733 c 12.30928 30.16733 l 12.30928 33.2287 l 4.4696 33.2287 l 7.4978 41.58372 15.17679 47.36719 24.04457 47.9718 c 24.04457 39.35147 l 16.81206 39.35147 l 18.21265 40.24182 19.74588 40.91788 21.348 41.34647 c 20.55716 44.30325 l 15.99059 43.0787 12.02866 40.22906 9.41628 36.2901 c 41.73424 36.2901 l 39.12187 40.22906 35.15993 43.08124 30.59337 44.30325 c 29.79996 41.34647 l 31.40463 40.91788 32.93532 40.24182 34.3359 39.35147 c 27.10596 39.35147 l 27.10596 47.97435 l 15.37067 33.2287 m 15.37067 30.16733 l 35.77986 30.16733 l 35.77986 33.2287 l 15.37067 33.2287 l 6.44164 27.10596 m 6.44164 24.04457 l 44.7089 24.04457 l 44.7089 27.10596 l 6.44164 27.10596 l 15.37067 20.98318 m 15.37067 17.9218 l 35.77986 17.9218 l 35.77986 20.98318 l 15.37067 20.98318 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -383.539 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -383.539 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -383.539 Td[<00160017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -383.539 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -383.539 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -383.539 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -383.539 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -383.539 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -383.539 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.607 0 cm 0 G 0 g q 1 0 0 1 142.259 -409.081 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 24.39407 51.02043 m 24.39407 45.91046 l 19.8709 45.6273 15.56711 43.84659 12.16896 40.849 c 16.47276 40.849 l 18.8785 42.2955 21.59547 43.15268 24.39407 43.35423 c 24.39407 39.57341 l 18.0162 39.57341 l 18.0162 37.02226 l 24.39407 37.02226 l 24.39407 33.19556 l 18.0162 33.19556 l 18.0162 17.88864 l 24.39407 17.88864 l 24.39407 14.06192 l 18.0162 14.06192 l 18.0162 11.51076 l 24.39407 11.51076 l 24.39407 7.72997 l 21.59291 7.92897 18.87595 8.7887 16.47021 10.2352 c 12.17152 10.2352 l 15.56964 7.2376 19.87343 5.4569 24.39407 5.1737 c 24.39407 0.06377 l 26.94522 0.06377 l 26.94778 5.17116 l 31.47096 5.45435 35.7722 7.2376 39.17033 10.2352 c 34.8691 10.2352 l 32.46336 8.7887 29.74638 7.92897 26.94522 7.72997 c 26.94522 11.51076 l 33.32565 11.51076 l 33.32565 14.06192 l 26.94522 14.06192 l 26.94522 17.88864 l 33.32565 17.88864 l 33.32565 33.19556 l 26.94522 33.19556 l 26.94522 37.02226 l 33.32565 37.02226 l 33.32565 39.57341 l 26.94522 39.57341 l 26.94778 43.35423 l 29.74638 43.15523 32.46336 42.2955 34.8691 40.849 c 39.17033 40.849 l 35.7722 43.84406 31.46843 45.6273 26.94522 45.91046 c 26.94522 51.02043 l 24.39407 51.02043 l 21.84293 50.7653 m 12.6945 49.37749 5.01044 43.13992 1.77303 34.47112 c 12.91391 34.47112 l 12.91391 26.81767 l 9.08717 26.81767 l 9.08717 31.91997 l 0.96942 31.91997 l 0.75256 31.08063 0.5791 30.22601 0.44899 29.36882 c 6.53603 29.36882 l 6.53603 26.81767 l 0.19133 26.81767 l 0.06377 24.24356 0.32654 21.66179 0.96942 19.16422 c 3.61241 19.16422 l 3.13278 20.82501 2.84195 22.53938 2.74501 24.26651 c 6.53603 24.26651 l 6.53603 19.16422 l 12.91391 19.16422 l 12.91391 16.61307 l 1.77303 16.61307 l 5.013 7.94426 12.6945 1.70671 21.84547 0.31888 c 21.84293 2.90318 l 15.09769 4.04355 9.20709 8.1356 5.78598 14.05937 c 15.46506 14.06192 l 15.46506 21.71536 l 9.08717 21.71536 l 9.08717 24.26651 l 15.46506 24.26651 l 15.46506 37.02226 l 5.78598 37.02226 l 9.20709 42.9486 15.09769 47.04063 21.84547 48.181 c 21.84293 50.7653 l 29.49637 50.7653 m 29.49637 48.181 l 36.24161 47.04063 42.13222 42.9486 45.55331 37.02226 c 35.8768 37.02226 l 35.8768 24.26651 l 42.25468 24.26651 l 42.25468 21.71536 l 35.8768 21.71536 l 35.8768 14.06192 l 45.55586 14.05937 l 42.13477 8.1356 36.24417 4.04355 29.49637 2.90318 c 29.49637 0.31888 l 38.64735 1.70671 46.32887 7.94426 49.56627 16.61307 c 38.42795 16.61307 l 38.42795 19.16422 l 44.80583 19.16422 l 44.80583 24.26651 l 48.59685 24.26651 l 48.4999 22.53938 48.20908 20.82501 47.7269 19.16422 c 50.36987 19.16422 l 51.01532 21.66179 51.27809 24.24356 51.148 26.81767 c 44.80583 26.81767 l 44.80583 29.36882 l 50.89287 29.36882 l 50.76276 30.22601 50.5893 31.08063 50.37244 31.91997 c 42.25468 31.91997 l 42.25468 26.81767 l 38.42795 26.81767 l 38.42795 34.47112 l 49.56883 34.47112 l 46.32887 43.13992 38.64735 49.37749 29.49637 50.7653 c 20.56735 30.6444 m 24.39407 30.6444 l 24.39407 20.4398 l 20.56735 20.4398 l 20.56735 30.6444 l 26.94522 30.6444 m 30.77194 30.6444 l 30.77194 20.4398 l 26.94522 20.4398 l 26.94522 30.6444 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -383.539 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -383.539 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -383.539 Td[<00160018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -383.539 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -383.539 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -383.539 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -383.539 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 15 Tf 207.825 -451.251 Td[<0015>]TJ /F4 15 Tf 22.35 0 Td[<11090ed5>]TJ ET BT /F10 12 Tf 0 -480.331 Td[<0015000f0012>]TJ /F4 12 Tf 26.688 0 Td[<061304eb0698077c>]TJ ET q 1 0 0 1 42.52 -518.622 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -28.3468 m -42.52022 -28.3468 m -42.52022 28.3468 l 42.52022 28.3468 l 42.52022 -28.3468 l h 42.52022 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -39.785 0 cm 0 G 0 g q 1 0 0 1 42.52 -531.851 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 39.82344 26.48853 m 33.45389 20.11897 l 38.35355 15.2193 l 34.92378 11.78955 l 29.92514 16.78818 l 26.29059 20.42177 34.26527 21.41542 29.9908 24.07202 c 28.17401 25.0784 24.31015 21.90932 25.97505 18.61281 c 22.78046 17.9445 20.94995 16.80092 18.12186 11.93459 c 13.98067 6.62334 6.99571 11.19276 11.23099 14.55981 c 13.47993 16.55594 14.31581 12.93607 16.29723 14.08063 c 17.37515 15.35356 17.10959 16.16397 16.09341 17.0655 c 22.23856 19.45164 16.85483 24.46497 15.75142 20.55994 c 14.83418 16.27078 7.95409 20.08662 8.2471 14.75189 c 2.67618 17.42122 -1.32387 13.86014 0.5507 10.98698 c 3.80115 8.89482 4.1451 14.6725 7.27109 11.0497 c 11.3329 5.60422 15.18207 5.65419 19.03223 9.3015 c 22.98918 5.3514 27.28815 6.94966 27.03828 9.04868 c 26.95596 11.66805 25.01668 11.76212 23.51443 9.88652 c 18.76079 10.88702 25.07742 18.6961 28.45525 15.31828 c 33.45389 10.31964 l 25.24107 2.10684 31.61064 -4.2627 39.82344 3.95009 c 48.03625 -4.2627 54.4058 2.10684 46.193 10.31964 c 51.19164 15.31828 l 54.56946 18.6961 60.88611 10.88702 56.13246 9.88652 c 54.63022 11.76212 52.69093 11.66805 52.60861 9.04868 c 52.35873 6.94966 56.65768 5.3514 60.61465 9.3015 c 64.46481 5.65419 68.314 5.60422 72.37581 11.0497 c 75.50081 14.6725 75.84476 8.89482 79.0952 10.98698 c 80.9698 13.86014 76.96973 17.42122 71.39882 14.75189 c 71.6918 20.08662 64.81268 16.27078 63.89548 20.55994 c 62.79207 24.46497 57.40833 19.45164 63.55347 17.0655 c 62.53728 16.16397 62.27173 15.35356 63.34964 14.08063 c 65.33107 12.93607 66.16695 16.55594 68.41591 14.55981 c 72.65019 11.19276 65.66621 6.62334 61.52501 11.93459 c 58.69693 16.80092 56.86642 17.9445 53.67184 18.61281 c 55.33675 21.90932 51.47287 25.0784 49.65608 24.07202 c 45.38162 21.41542 53.35631 20.42177 49.72174 16.78818 c 44.7231 11.78955 l 41.29333 15.2193 l 46.193 20.11897 l 39.82344 26.48853 l 39.82344 23.54874 m 43.2532 20.11897 l 39.82344 16.68921 l 36.39368 20.11897 l 39.82344 23.54874 l 39.82344 13.7494 m 43.2532 10.31964 l 39.82344 6.8899 l 36.39368 10.31964 l 39.82344 13.7494 l 34.92378 8.84975 m 38.35355 5.41998 l 32.94237 0.0088 29.51653 3.43562 34.92378 8.84975 c 44.7231 8.84975 m 50.13037 3.43562 46.70453 0.0088 41.29333 5.41998 c 44.7231 8.84975 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -518.622 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 32.996 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 42.52 -518.622 Td[<00160019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -518.622 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 42.52 -518.622 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001900120011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300180011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -518.622 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -28.3468 m 42.52022 -28.3468 m 42.52022 28.3468 l 99.21387 28.3468 l 99.21387 -28.3468 l h 99.21387 28.3468 m S Q Q n Q Q q 1 0 0 1 189.701 -518.622 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -28.3468 m -42.52022 -28.3468 m -42.52022 28.3468 l 42.52022 28.3468 l 42.52022 -28.3468 l h 42.52022 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -39.868 0 cm 0 G 0 g q 1 0 0 1 189.804 -531.717 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 4.0 M 32.46416 0.00685 m 31.60867 0.05585 30.90508 0.35472 30.40239 0.85645 c 29.59883 1.65999 29.31564 2.97997 29.7468 4.60959 c 30.17601 6.23431 31.31763 8.1687 33.36177 10.21774 c 28.37881 15.1997 l 27.54 16.03853 26.52382 16.1816 25.53702 15.91016 c 24.55023 15.6397 23.59578 14.9518 22.89511 14.12766 c 22.19348 13.30257 21.7476 12.34224 21.77113 11.53181 c 21.7829 11.12614 21.91028 10.75867 22.18173 10.46077 c 22.4512 10.16483 22.86475 9.93845 23.4478 9.81302 c 24.19942 10.74493 25.06078 11.19374 25.75357 11.07616 c 26.10146 11.01637 26.4062 10.81255 26.62573 10.45978 c 26.84523 10.10799 26.9824 9.60724 27.00299 8.95068 c 27.00299 8.9497 l 27.0667 8.41661 26.84032 7.9149 26.4062 7.52783 c 25.9721 7.14075 25.32927 6.86539 24.55609 6.78111 c 23.01369 6.61256 20.94995 7.2015 18.97244 9.16724 c 17.04982 7.35144 15.12328 6.42735 13.16928 6.64 c 11.20844 6.85362 9.22507 8.20789 7.1917 10.93407 c 6.41364 11.8356 5.81294 12.1482 5.30043 12.1482 c 4.78793 12.14919 4.3548 11.8366 3.91481 11.47205 c 3.47385 11.10751 3.027 10.69202 2.48216 10.49898 c 1.93732 10.30592 1.29546 10.33925 0.47917 10.86546 c 0.47426 10.86842 l 0.47133 10.87233 l 0.0 11.59552 -0.10287 12.36575 0.097 13.06836 c 0.2969 13.77097 0.79962 14.40695 1.53554 14.86751 c 2.99956 15.78473 5.38864 16.0062 8.16577 14.6872 c 8.10207 16.00032 8.47542 16.76564 9.09375 17.22523 c 9.71895 17.68971 10.58325 17.84651 11.48282 17.97095 c 12.3824 18.09541 13.31726 18.18752 14.0816 18.51482 c 14.84596 18.84114 15.44078 19.39873 15.66812 20.46391 c 15.66812 20.46487 l 15.66812 20.46587 l 15.94641 21.44775 16.49812 21.87794 17.07333 21.92009 c 17.64757 21.9632 18.23946 21.62218 18.60204 21.08421 c 18.96362 20.54622 19.09593 19.80833 18.75 19.05576 c 18.40703 18.31001 17.59172 17.55254 16.0748 16.95674 c 16.5677 16.5138 16.88716 16.0885 16.94594 15.61421 c 17.00574 15.13112 16.79797 14.60294 16.25607 13.96402 c 16.25412 13.9601 l 16.2502 13.95815 l 15.74945 13.66907 15.31535 13.67984 14.91847 13.82976 c 14.52061 13.97871 14.15903 14.2629 13.79155 14.51866 c 13.4231 14.77441 13.04973 15.0008 12.6313 15.04097 c 12.21288 15.08115 11.74643 14.9361 11.18787 14.44026 c 11.18689 14.44026 l 11.18689 14.43929 l 10.13248 13.60144 9.78069 12.69403 9.90416 11.8846 c 10.02666 11.07518 10.62538 10.35982 11.48773 9.91298 c 13.21143 9.01929 15.97876 9.20056 18.04347 11.84834 c 19.45752 14.28152 20.62267 15.7857 21.83678 16.76564 c 23.04309 17.74068 24.29741 18.19438 25.88292 18.52855 c 25.06567 20.17679 25.6154 21.79367 26.60025 22.8716 c 27.09511 23.4135 27.69875 23.82018 28.29553 24.0289 c 28.89133 24.23761 29.48123 24.24841 29.94377 23.99263 c 29.94377 23.99167 l 29.94475 23.99167 l 30.48076 23.65848 30.82571 23.35078 31.0266 23.05779 c 31.22845 22.76576 31.28334 22.48648 31.23727 22.21896 c 31.14613 21.68393 30.65814 21.1959 30.15642 20.67851 c 29.6537 20.1611 29.13533 19.61528 28.96776 18.97832 c 28.80019 18.34137 28.97853 17.60936 29.88301 16.70392 c 34.88165 11.77974 l 34.84735 11.74446 l 29.84871 16.66962 l 29.84871 16.66962 l 28.9364 17.58192 28.74826 18.33647 28.92072 18.99106 c 29.0922 19.64468 29.61844 20.19443 30.12112 20.71281 c 30.62384 21.23021 31.10205 21.71527 31.18927 22.2268 c 31.23335 22.48256 31.1824 22.74617 30.98642 23.03035 c 30.7914 23.31451 30.45139 23.6193 29.91927 23.94952 c 29.4734 24.19646 28.89818 24.18861 28.3112 23.98285 c 27.72423 23.77705 27.12549 23.37529 26.63551 22.83827 c 25.65657 21.76526 25.10977 20.1611 25.9378 18.52266 c 25.95152 18.49425 l 25.92114 18.48738 l 24.32484 18.1542 23.07347 17.70245 21.86717 16.72743 c 20.6599 15.75337 19.49672 14.2531 18.08365 11.82089 c 18.08267 11.81993 l 18.0817 11.81796 l 16.00522 9.1545 13.21045 8.9654 11.4652 9.86986 c 10.59207 10.32259 9.98059 11.04872 9.85516 11.87773 c 9.72974 12.7058 10.09329 13.63182 11.15651 14.47751 c 11.72194 14.97923 12.20308 15.13112 12.63522 15.08897 c 13.06836 15.04782 13.44955 14.81459 13.81898 14.55785 c 14.18843 14.30112 14.54807 14.02086 14.93513 13.87483 c 15.32121 13.72981 15.73376 13.71806 16.22179 13.9993 c 16.75584 14.63135 16.95477 15.14386 16.89694 15.60834 c 16.83913 16.0738 16.5236 16.49713 16.01796 16.94594 c 15.98758 16.97241 l 16.02481 16.9871 l 17.55742 17.58192 18.36783 18.33942 18.7059 19.07631 c 19.04497 19.81323 18.91463 20.53152 18.56088 21.05676 c 18.20712 21.583 17.62994 21.91225 17.07726 21.8711 c 16.5236 21.82993 15.98953 21.42229 15.71516 20.45215 c 15.71613 20.4541 l 15.48486 19.37422 14.87535 18.79997 14.10121 18.46974 c 13.32608 18.13852 12.38828 18.04738 11.4897 17.92294 c 10.59207 17.79848 9.73462 17.64072 9.12315 17.18602 c 8.51167 16.73135 8.14029 15.98073 8.2128 14.65193 c 8.21477 14.61076 l 8.1785 14.62842 l 5.39842 15.96014 3.01425 15.73671 1.561 14.82635 c 0.83391 14.37068 0.34001 13.7445 0.14403 13.05464 c -0.05193 12.36673 0.04701 11.61513 0.51053 10.90369 c 1.31602 10.38727 1.93536 10.35689 2.4655 10.54503 c 2.99759 10.73416 3.44151 11.14474 3.88345 11.51025 c 4.3254 11.87578 4.76834 12.19818 5.30043 12.19719 c 5.83253 12.19719 6.44696 11.87285 7.22992 10.96445 c 7.23091 10.96346 l 7.23091 10.96346 l 9.25937 8.24318 11.23196 6.89969 13.1742 6.689 c 15.11641 6.47734 17.03415 7.39749 18.9558 9.2182 c 18.97343 9.23389 l 18.9901 9.21722 l 20.96465 7.24658 23.02153 6.66255 24.55121 6.83011 c 25.31554 6.9134 25.94858 7.18484 26.37387 7.56409 c 26.79916 7.94331 27.01671 8.42838 26.95497 8.94481 c 26.95497 8.94579 l 26.95497 8.94676 l 26.9344 9.59842 26.79819 10.09132 26.58456 10.4343 c 26.37094 10.77728 26.0799 10.97032 25.74574 11.02815 c 25.07645 11.14182 24.22194 10.70378 23.47426 9.76991 c 23.46446 9.75815 l 23.44975 9.7611 l 22.852 9.8875 22.42574 10.12073 22.14548 10.42842 c 21.86618 10.73514 21.7339 11.11536 21.72214 11.53084 c 21.69861 12.35986 22.15134 13.32803 22.85788 14.15903 c 23.5644 14.99 24.52475 15.68282 25.52428 15.95718 c 26.52283 16.23256 27.56253 16.08458 28.41312 15.23401 c 33.3951 10.253 l 38.26045 15.11838 l 33.3598 20.01804 l 39.76465 26.42189 l 46.1685 20.01804 l 41.26884 15.11838 l 44.64569 11.74153 l 49.64531 16.70392 l 50.55077 17.60936 50.72813 18.34137 50.56154 18.97832 c 50.39397 19.61528 49.87462 20.1611 49.37288 20.67851 c 48.87018 21.1959 48.38315 21.68393 48.29103 22.21896 c 48.24498 22.48648 48.30084 22.76576 48.50172 23.05779 c 48.7026 23.35078 49.04852 23.65848 49.58455 23.99167 c 49.58455 23.99167 l 49.58553 23.99263 l 50.04707 24.24841 50.637 24.23761 51.23378 24.0289 c 51.82957 23.82018 52.43321 23.4135 52.92906 22.8716 c 53.91292 21.79367 54.46265 20.17679 53.64539 18.52855 c 55.23091 18.19438 56.4862 17.74068 57.6925 16.76564 c 58.90567 15.7857 60.07178 14.28152 61.48582 11.84834 c 63.54955 9.20056 66.31786 9.01929 68.04156 9.91298 c 68.90292 10.35982 69.50264 11.07518 69.62512 11.8846 c 69.74762 12.69403 69.39584 13.60144 68.3424 14.43929 c 68.34143 14.44026 l 68.34143 14.44026 l 67.78189 14.9361 67.31642 15.08115 66.89798 15.04097 c 66.47955 15.0008 66.10522 14.77441 65.73775 14.51866 c 65.3693 14.2629 65.00769 13.97871 64.61082 13.82976 c 64.21396 13.67984 63.77985 13.66907 63.2791 13.95815 c 63.27518 13.9601 l 63.27223 13.96402 l 62.73132 14.60294 62.52357 15.13112 62.58334 15.61421 c 62.64215 16.0885 62.9616 16.5138 63.45451 16.95674 c 61.93658 17.55254 61.12128 18.31001 60.7783 19.05576 c 60.4324 19.80833 60.56468 20.54622 60.92726 21.08421 c 61.28885 21.62218 61.88074 21.9632 62.45499 21.92009 c 63.0302 21.87794 63.58287 21.44775 63.86018 20.46587 c 63.86018 20.46487 l 63.86018 20.46391 l 64.08852 19.39873 64.68236 18.84114 65.44672 18.51482 c 66.21106 18.18752 67.14592 18.09541 68.04549 17.97095 c 68.94507 17.84651 69.81035 17.68971 70.43456 17.22523 c 71.0529 16.76564 71.42723 16.00032 71.36354 14.6872 c 74.1397 16.0062 76.52876 15.78473 77.99376 14.86751 c 78.72871 14.40695 79.23141 13.77097 79.43132 13.06836 c 79.6322 12.36575 79.52931 11.59552 79.05699 10.87233 c 79.05405 10.86842 l 79.05013 10.86546 l 78.23285 10.33925 77.59102 10.30592 77.04715 10.49898 c 76.5023 10.69202 76.05447 11.10751 75.61449 11.47205 c 75.17352 11.8366 74.74039 12.14919 74.22787 12.1482 c 73.71634 12.1482 73.11566 11.8356 72.33661 10.93407 c 70.30324 8.20789 68.32085 6.85362 66.36 6.64 c 64.40504 6.42735 62.4785 7.35144 60.55588 9.16724 c 58.57837 7.2015 56.51462 6.61256 54.97221 6.78111 c 54.19905 6.86539 53.55719 7.14075 53.12308 7.52783 c 52.688 7.9149 52.46162 8.41661 52.52531 8.9497 c 52.52531 8.9497 52.52531 8.9497 52.52531 8.95068 c 52.54688 9.60724 52.68309 10.10799 52.9026 10.45978 c 53.12308 10.81255 53.42686 11.01637 53.77473 11.07616 c 54.46754 11.19374 55.32892 10.74493 56.08052 9.81302 c 56.66357 9.93845 57.07712 10.16483 57.34659 10.46077 c 57.61803 10.75867 57.7464 11.12614 57.75816 11.53181 c 57.78069 12.34224 57.33484 13.30257 56.63417 14.12766 c 55.93353 14.9518 54.9781 15.6397 53.99228 15.91016 c 53.0055 16.1816 51.98833 16.03853 51.14949 15.1997 c 46.16753 10.21774 l 48.21167 8.1687 49.35231 6.23431 49.78249 4.60959 c 50.21269 2.97997 49.92947 1.65999 49.12595 0.85645 c 48.3224 0.0529 47.00243 -0.23027 45.3728 0.20087 c 43.74808 0.63008 41.81369 1.77171 39.76465 3.81584 c 37.7156 1.77171 35.78024 0.63008 34.15552 0.20087 c 33.54501 0.03918 32.97665 -0.02252 32.46416 0.00685 c 32.4671 0.05486 m 32.9747 0.02644 33.5362 0.08719 34.14278 0.24791 c 35.75673 0.67416 37.68523 1.80992 39.72937 3.85014 c 38.29378 5.28476 l 36.94637 3.94127 35.72145 3.14262 34.72388 2.78789 c 33.7214 2.4302 32.94333 2.51938 32.50533 2.95644 c 32.06729 3.39447 31.97908 4.17255 32.33578 5.176 c 32.6915 6.17845 33.49405 7.41023 34.84735 8.76549 c 34.86499 8.78311 l 39.73035 13.64848 l 38.29475 15.08408 l 33.42938 10.21872 l 33.41176 10.20108 l 31.36075 8.15007 30.22208 6.2147 29.79384 4.59685 c 29.36562 2.97897 29.64783 1.67958 30.43668 0.89073 c 30.93056 0.39784 31.62239 0.10287 32.4671 0.05486 c 47.06123 0.05486 m 47.90593 0.10287 48.59874 0.39784 49.09163 0.89073 c 49.88048 1.67958 50.1627 2.97897 49.73546 4.59685 c 49.3082 6.20982 48.17245 8.1393 46.13322 10.18343 c 44.69763 8.74783 l 46.04013 7.39944 46.83878 6.17453 47.19351 5.176 c 47.55022 4.17255 47.46104 3.39447 47.02301 2.95644 c 46.58595 2.51938 45.80789 2.4302 44.80542 2.78789 c 43.80295 3.14458 42.57216 3.94716 41.2169 5.30142 c 41.20024 5.31906 l 36.33488 10.18442 l 34.89928 8.74883 l 39.76465 3.88345 l 39.76465 3.88345 l 39.78131 3.86581 l 41.8323 1.81482 43.76767 0.67613 45.38553 0.24791 c 45.99211 0.08719 46.5546 0.02644 47.06123 0.05486 c 33.4088 2.62228 m 33.77335 2.59093 34.21039 2.65659 34.70721 2.83298 c 35.69498 3.18477 36.91599 3.97949 38.25946 5.31906 c 34.86499 8.71353 l 33.5264 7.36908 32.73265 6.14809 32.38184 5.15933 c 32.02808 4.16566 32.1202 3.41113 32.53961 2.99171 c 32.74931 2.78102 33.04329 2.65364 33.4088 2.62228 c 46.12048 2.62228 m 46.48601 2.65364 46.779 2.78102 46.9887 2.99171 c 47.40813 3.41113 47.50023 4.16566 47.14746 5.15933 c 46.79567 6.14809 46.0019 7.36908 44.66333 8.71353 c 41.26982 5.31906 l 42.61331 3.97949 43.83333 3.18477 44.82208 2.83298 c 45.31793 2.65659 45.75497 2.59093 46.12048 2.62228 c 41.23454 5.35335 m 46.09991 10.21872 l 46.11656 10.23538 l 51.1152 15.23401 l 51.96577 16.08458 53.0055 16.23256 54.00502 15.95718 c 55.00357 15.68282 55.96489 14.99 56.67142 14.15903 c 57.37697 13.32803 57.83067 12.35986 57.80617 11.53084 c 57.79442 11.11536 57.66212 10.73514 57.38284 10.42842 c 57.10258 10.12073 56.67632 9.8875 56.07855 9.7611 c 56.06386 9.75815 l 56.05504 9.76991 l 55.30637 10.70378 54.45284 11.14182 53.78355 11.02815 c 53.44841 10.97032 53.15836 10.77728 52.94473 10.4343 c 52.73111 10.09132 52.5949 9.59842 52.57431 8.94676 c 52.57431 8.94579 l 52.57335 8.94481 l 52.51259 8.42838 52.73012 7.94331 53.15543 7.56409 c 53.57973 7.18484 54.21277 6.9134 54.9781 6.83011 c 56.50777 6.66255 58.56464 7.24658 60.53822 9.21722 c 60.55588 9.23389 l 60.57253 9.2182 l 62.49516 7.39749 64.41287 6.47734 66.35413 6.689 c 68.29636 6.89969 70.26895 8.24318 72.29741 10.96346 c 72.2984 10.96346 l 72.2984 10.96445 l 73.08234 11.87285 73.69579 12.19719 74.22787 12.19719 c 74.76097 12.19818 75.2029 11.87578 75.64485 11.51025 c 76.0878 11.14474 76.5317 10.73416 77.06282 10.54503 c 77.59395 10.35689 78.21326 10.38727 79.01877 10.90369 c 79.4813 11.61513 79.58125 12.36673 79.38525 13.05464 c 79.1883 13.7445 78.6944 14.37068 77.9673 14.82635 c 76.51405 15.73671 74.12988 15.96014 71.3508 14.62842 c 71.31357 14.61076 l 71.3155 14.65193 l 71.389 15.98073 71.01761 16.73135 70.40614 17.18602 c 69.79466 17.64072 68.93723 17.79848 68.03864 17.92294 c 67.141 18.04738 66.20224 18.13852 65.42809 18.46974 c 64.65295 18.79997 64.04344 19.37422 63.81316 20.4541 c 63.81316 20.45215 l 63.53877 21.42229 63.00471 21.82993 62.45203 21.8711 c 61.89838 21.91225 61.3212 21.583 60.96744 21.05676 c 60.61368 20.53152 60.48433 19.81323 60.8224 19.07631 c 61.16145 18.33942 61.97089 17.58192 63.50351 16.9871 c 63.54074 16.97241 l 63.51134 16.94594 l 63.00471 16.49713 62.68918 16.0738 62.63136 15.60834 c 62.57452 15.14386 62.77248 14.63135 63.30653 13.9993 c 63.79454 13.71806 64.20709 13.72981 64.59319 13.87483 c 64.98026 14.02086 65.33989 14.30112 65.7103 14.55785 c 66.07974 14.81459 66.45996 15.04782 66.8931 15.08897 c 67.32622 15.13112 67.80737 14.97923 68.37279 14.47751 c 68.37376 14.47652 l 69.43602 13.63182 69.79858 12.7058 69.67316 11.87773 c 69.54771 11.04872 68.93625 10.32259 68.0641 9.86986 c 66.31885 8.9654 63.52408 9.1545 61.44661 11.81796 c 61.44565 11.81993 l 61.44467 11.82089 l 60.0316 14.2531 58.86842 15.75337 57.66212 16.72743 c 56.45485 17.70245 55.20349 18.1542 53.60814 18.48738 c 53.5768 18.49425 l 53.59148 18.52266 l 54.41855 20.1611 53.87273 21.76526 52.89279 22.83827 c 52.40282 23.37529 51.8041 23.77705 51.21712 23.98285 c 50.63014 24.18861 50.0559 24.19646 49.60905 23.94952 c 49.60905 23.94952 49.60905 23.94952 49.60905 23.94952 c 49.07695 23.6193 48.73691 23.31451 48.5419 23.03035 c 48.3469 22.74617 48.29495 22.48256 48.33905 22.2268 c 48.42725 21.71527 48.90446 21.23021 49.40718 20.71281 c 49.90988 20.19443 50.43611 19.64468 50.60858 18.99106 c 50.78006 18.33647 50.59192 17.58192 49.6796 16.66962 c 49.6796 16.66962 l 44.68 11.70723 l 44.68097 11.70528 l 44.64667 11.67097 l 44.64569 11.67294 l 43.20421 10.24223 l 43.21107 10.23538 l 43.17677 10.20108 l 43.16992 10.20793 l 39.78131 6.8448 l 39.74701 6.8791 l 43.13562 10.24223 l 39.76465 13.61418 l 36.36919 10.21872 l 41.23454 5.35335 l 43.16992 10.27654 m 44.6114 11.70723 l 36.30058 20.01804 l 39.76465 23.48209 l 43.2287 20.01804 l 39.79893 16.58827 l 41.23454 15.15266 l 46.09991 20.01804 l 39.76465 26.35329 l 33.42938 20.01804 l 43.16992 10.27654 l 39.76465 16.62256 m 43.16011 20.01804 l 39.76465 23.4135 l 36.36919 20.01804 l 39.76465 16.62256 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -518.622 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 32.996 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 189.701 -518.622 Td[<0016001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -518.622 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 189.701 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 189.701 -518.622 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001900120011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300180011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 189.701 -518.622 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -28.3468 m 42.52022 -28.3468 m 42.52022 28.3468 l 99.21387 28.3468 l 99.21387 -28.3468 l h 99.21387 28.3468 m S Q Q n Q Q q 1 0 0 1 336.883 -518.622 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -28.3468 m -42.52022 -28.3468 m -42.52022 28.3468 l 42.52022 28.3468 l 42.52022 -28.3468 l h 42.52022 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -38.362 0 cm 0 G 0 g q 1 0 0 1 335.648 -529.204 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 1 j 40.17198 16.89177 m 40.1367 15.1809 41.10678 13.9392 42.17033 13.64992 c 41.10678 13.36066 40.14023 12.11896 40.16846 10.40808 c 40.1755 9.91951 39.25127 9.91951 39.25835 10.40808 c 39.28656 12.11896 38.31999 13.36066 37.25644 13.64992 c 38.31999 13.9392 39.29008 15.1809 39.25482 16.89177 c 39.24422 17.41032 40.1808 17.41032 40.17198 16.89177 c 48.29422 3.5311 m 52.17632 4.46237 55.37933 2.9508 57.35478 4.36713 c 59.97577 6.63889 63.41162 5.68643 62.1417 3.11131 c 60.97408 1.54858 60.58955 4.69872 59.48015 2.71446 c 58.37778 0.48679 67.56534 0.04408 63.43983 5.96864 c 63.11002 6.5348 63.74321 6.80115 64.42755 5.87517 c 67.15791 2.66682 69.39792 2.95256 69.66248 4.66167 c 69.56372 5.36014 69.16685 5.54532 68.14915 5.16435 c 67.53535 4.9968 66.10316 5.52592 65.27243 6.4043 c 64.86145 7.01103 65.02902 7.56487 65.87917 7.08864 c 67.57416 6.24202 70.43149 6.77292 73.88498 5.54532 c 77.88702 4.73222 79.38272 7.61778 76.71057 9.37097 c 73.71037 7.34615 71.98186 7.13449 68.65184 7.8065 c 69.28503 10.30577 68.20207 10.90723 55.65273 6.10974 c 49.27135 4.17664 43.08575 3.56636 42.53015 6.67062 c 42.4896 3.97908 45.41925 2.93668 48.29422 3.5311 c 61.67253 9.07996 m 55.08125 7.27736 51.37378 5.56296 47.8515 5.37071 c 53.40567 8.98471 53.1799 13.62877 50.3014 13.42592 c 51.18858 15.67828 55.89084 15.19322 54.05121 10.36398 c 56.06369 11.61629 56.91736 10.82787 55.36876 8.40971 c 57.58585 8.40971 57.53822 11.76443 61.17162 11.9073 c 64.37994 12.0731 66.46298 10.54037 61.67253 9.07996 c 46.6292 8.2986 m 45.91486 8.02873 44.94301 8.35152 44.8707 8.85948 c 44.82132 9.34805 44.4227 9.43095 44.21106 8.85419 c 43.51259 5.81343 47.00136 5.12732 50.20262 8.70955 c 51.82884 11.0113 49.17787 15.84937 44.6714 13.42064 c 41.03447 11.76973 40.00972 7.89645 41.04504 5.30545 c 41.26904 4.89096 41.94106 5.25253 41.60242 6.11327 c 40.88101 11.163 44.55145 12.85092 45.25168 12.09955 c 46.36287 10.90193 44.31335 10.26875 46.2782 9.8419 c 47.02252 9.76607 47.50755 10.4028 46.66977 12.46642 c 48.80748 12.64633 50.13031 10.12234 46.6292 8.2986 c 48.2854 18.96951 m 46.34523 21.52524 42.87234 20.62218 43.51082 17.17044 c 45.7279 20.69273 48.04022 18.43509 46.60097 16.7101 c 45.79494 15.88994 45.87782 18.4633 44.92714 17.4509 c 44.03996 16.52489 47.00313 16.4914 45.5727 15.91638 c 43.96764 15.6959 42.44902 16.10336 40.60059 17.22688 c 44.55852 12.54402 49.68054 15.32552 48.2854 18.96951 c 31.1414 18.96951 m 33.08154 21.52524 36.55446 20.62218 35.91595 17.17044 c 33.69888 20.69273 31.38657 18.43509 32.8258 16.7101 c 33.63187 15.88994 33.54897 18.4633 34.49963 17.4509 c 35.38683 16.52489 32.42368 16.4914 33.8541 15.91638 c 35.45914 15.6959 36.97775 16.10336 38.8262 17.22688 c 34.86827 12.54402 29.74623 15.32552 31.1414 18.96951 c 32.79759 8.2986 m 33.51192 8.02873 34.48376 8.35152 34.55608 8.85948 c 34.60547 9.34805 35.00409 9.43095 35.21574 8.85419 c 35.9142 5.81343 32.42543 5.12732 29.22415 8.70955 c 27.59795 11.0113 30.24892 15.84937 34.75539 13.42064 c 38.39232 11.76973 39.41708 7.89645 38.38173 5.30545 c 38.15773 4.89096 37.48573 5.25253 37.82439 6.11327 c 38.54576 11.163 34.87532 12.85092 34.17511 12.09955 c 33.06392 10.90193 35.11343 10.26875 33.14857 9.8419 c 32.40427 9.76607 31.91922 10.4028 32.75702 12.46642 c 30.61931 12.64633 29.29646 10.12234 32.79759 8.2986 c 17.75426 9.07996 m 24.34552 7.27736 28.05301 5.56296 31.57527 5.37071 c 26.02112 8.98471 26.24689 13.62877 29.12538 13.42592 c 28.2382 15.67828 23.53595 15.19322 25.37558 10.36398 c 23.3631 11.61629 22.50943 10.82787 24.05801 8.40971 c 21.84094 8.40971 21.88858 11.76443 18.25517 11.9073 c 15.04683 12.0731 12.96382 10.54037 17.75426 9.07996 c 31.13258 3.5311 m 27.25049 4.46237 24.04744 2.9508 22.072 4.36713 c 19.45102 6.63889 16.01517 5.68643 17.28508 3.11131 c 18.45271 1.54858 18.83722 4.69872 19.94664 2.71446 c 21.049 0.48679 11.86143 0.04408 15.98694 5.96864 c 16.31676 6.5348 15.68356 6.80115 14.99922 5.87517 c 12.26889 2.66682 10.02887 2.95256 9.7643 4.66167 c 9.86308 5.36014 10.25993 5.54532 11.27762 5.16435 c 11.89143 4.9968 13.32362 5.52592 14.15437 6.4043 c 14.56532 7.01103 14.39777 7.56487 13.54764 7.08864 c 11.85263 6.24202 8.99529 6.77292 5.5418 5.54532 c 1.53976 4.73222 0.04408 7.61778 2.7162 9.37097 c 5.71642 7.34615 7.44493 7.13449 10.77496 7.8065 c 10.14175 10.30577 11.22472 10.90723 23.77405 6.10974 c 30.15544 4.17664 36.34103 3.56636 36.89662 6.67062 c 36.9372 3.97908 34.00755 2.93668 31.13258 3.5311 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -518.622 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 32.996 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 336.883 -518.622 Td[<00170011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -518.622 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 336.883 -518.622 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 336.883 -518.622 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500160011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 336.883 -518.622 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -28.3468 m 42.52022 -28.3468 m 42.52022 28.3468 l 99.21387 28.3468 l 99.21387 -28.3468 l h 99.21387 28.3468 m S Q Q n Q Q q 1 0 0 1 42.52 -576.709 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -42.52022 -28.3468 m -42.52022 -28.3468 m -42.52022 28.3468 l 42.52022 28.3468 l 42.52022 -28.3468 l h 42.52022 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -576.709 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -38.465 0 cm 0 G 0 g q 1 0 0 1 41.271 -587.494 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 1 j 33.67065 20.47754 m 32.79582 20.44226 31.83986 19.96251 31.10611 18.99596 c 31.10258 18.99066 l 31.10083 18.98538 l 30.39531 17.14221 31.3407 15.5072 32.96162 14.93396 c 34.58255 14.36072 36.87193 14.84578 38.85971 17.19865 c 39.03435 17.40503 l 38.80328 17.26392 l 36.96188 16.14568 35.45738 15.74178 33.86644 15.95872 c 33.6936 16.02928 33.586 16.091 33.53839 16.1404 c 33.51369 16.16507 33.5031 16.1845 33.50134 16.1986 c 33.49957 16.21446 33.50134 16.2268 33.51369 16.24446 c 33.53485 16.27972 33.59834 16.32559 33.683 16.37144 c 33.76944 16.41554 33.87703 16.46315 33.98991 16.51079 c 34.21568 16.60956 34.4626 16.71715 34.60371 16.8706 c 34.67426 16.94821 34.71835 17.04169 34.71129 17.14575 c 34.70424 17.24982 34.64603 17.36093 34.53139 17.48087 c 34.53139 17.48087 l 34.40968 17.61139 34.30211 17.68724 34.1998 17.71721 c 34.09926 17.74898 34.00403 17.73308 33.92642 17.68372 c 33.77121 17.58669 33.6689 17.37857 33.56836 17.17221 c 33.46783 16.96408 33.37082 16.75243 33.26323 16.65366 c 33.21031 16.60426 33.15741 16.5831 33.09567 16.59192 c 33.03394 16.59897 32.95457 16.64307 32.85754 16.74008 c 32.15381 17.58493 32.37251 18.54266 33.01984 18.86896 c 33.3426 19.03125 33.77826 19.04005 34.27563 18.78783 c 34.77127 18.53561 35.32686 18.02235 35.87892 17.1475 c 35.93889 17.05226 l 35.9583 17.16339 l 36.15936 18.24988 35.95653 19.09473 35.51735 19.65915 c 35.0764 20.22356 34.40086 20.50575 33.67065 20.47754 c 45.75612 20.47754 m 45.02591 20.50575 44.35039 20.22356 43.90944 19.65915 c 43.47026 19.09473 43.26566 18.24988 43.4685 17.16339 c 43.4879 17.05226 l 43.54787 17.1475 l 44.09993 18.02235 44.65552 18.53561 45.15114 18.78783 c 45.64677 19.04005 46.08241 19.03125 46.40697 18.86896 c 47.05426 18.54266 47.27298 17.58493 46.56747 16.74008 c 46.47221 16.64307 46.39285 16.59897 46.33112 16.59192 c 46.26762 16.5831 46.21648 16.60426 46.1618 16.65366 c 46.0542 16.75243 45.9572 16.96408 45.85841 17.17221 c 45.75789 17.37857 45.6556 17.58669 45.49861 17.68372 c 45.421 17.73308 45.32751 17.74898 45.22522 17.71721 c 45.1247 17.68547 45.01709 17.61139 44.8954 17.48087 c 44.78075 17.36093 44.72253 17.24982 44.71548 17.14575 c 44.70667 17.04169 44.75078 16.94821 44.82132 16.8706 c 44.96417 16.71715 45.20935 16.60956 45.43687 16.51079 c 45.54976 16.46315 45.65735 16.41554 45.74202 16.37144 c 45.82845 16.32559 45.89017 16.27972 45.9131 16.24446 c 45.92368 16.2268 45.9272 16.21446 45.92545 16.1986 c 45.92192 16.1845 45.9131 16.16507 45.88841 16.1404 c 45.83902 16.091 45.7332 16.02928 45.56033 15.95872 c 43.9694 15.74178 42.46489 16.14568 40.6235 17.26392 c 40.39246 17.40503 l 40.56706 17.19865 l 42.55486 14.84578 44.84425 14.36072 46.46518 14.93396 c 48.08609 15.5072 49.03148 17.14221 48.32596 18.98538 c 48.32419 18.99066 l 48.32066 18.99596 l 47.58694 19.96251 46.63097 20.44226 45.75612 20.47754 c 33.67418 20.38936 m 34.37971 20.41757 35.02524 20.14595 35.4468 19.60446 c 35.85422 19.08238 36.04825 18.29927 35.88422 17.28333 c 35.34802 18.10349 34.8083 18.61497 34.31444 18.8672 c 33.79942 19.12825 33.33026 19.12296 32.97925 18.94656 c 32.27727 18.59383 32.05856 17.56024 32.7923 16.68187 c 32.7923 16.6801 l 32.79407 16.67834 l 32.89812 16.57253 32.99336 16.51608 33.08333 16.50374 c 33.17505 16.4914 33.25618 16.52841 33.3232 16.59015 c 33.45547 16.71187 33.54897 16.92705 33.64774 17.13339 c 33.7465 17.33977 33.85234 17.53378 33.97403 17.60963 c 34.034 17.64667 34.09573 17.65901 34.17511 17.63432 c 34.25447 17.60963 34.35147 17.54437 34.4679 17.4209 c 34.4679 17.4209 l 34.4679 17.4209 l 34.57372 17.30978 34.61781 17.2163 34.62311 17.13869 c 34.6284 17.06285 34.59842 16.99583 34.53845 16.93057 c 34.4185 16.80005 34.18039 16.6907 33.95464 16.59192 c 33.84352 16.54253 33.73416 16.49667 33.64244 16.44905 c 33.55249 16.40144 33.47841 16.35558 33.4396 16.29207 c 33.41844 16.26033 33.40787 16.22328 33.41492 16.1845 c 33.42197 16.14568 33.44313 16.11041 33.47665 16.07866 c 33.54192 16.01163 33.65656 15.94815 33.83646 15.87581 c 33.84174 15.87407 l 33.84705 15.8723 l 35.39035 15.66064 36.86488 16.0469 38.6075 17.06108 c 36.68144 14.9128 34.52258 14.47537 32.98984 15.01686 c 31.41125 15.57422 30.49585 17.1475 31.18019 18.94656 c 31.89983 19.89372 32.82933 20.35583 33.67418 20.38936 c 45.7526 20.38936 m 46.59744 20.3576 47.5252 19.89372 48.24658 18.94656 c 48.93094 17.1475 48.01553 15.57422 46.43518 15.01686 c 44.90245 14.47537 42.74358 14.9128 40.81927 17.06108 c 42.56192 16.0469 44.03467 15.66064 45.57799 15.8723 c 45.58328 15.87407 l 45.58856 15.87581 l 45.77023 15.94815 45.88489 16.01163 45.95015 16.07866 c 45.98366 16.11041 46.0048 16.14568 46.01187 16.1845 c 46.01715 16.22328 46.00658 16.26033 45.98718 16.29207 c 45.94662 16.35558 45.8743 16.40144 45.78258 16.44905 c 45.69263 16.49667 45.58328 16.54253 45.47038 16.59192 c 45.24638 16.6907 45.00652 16.80005 44.88658 16.93057 c 44.82661 16.99583 44.79662 17.06285 44.80191 17.13869 c 44.80898 17.2163 44.8513 17.30978 44.9589 17.4209 c 44.9589 17.4209 l 44.9589 17.4209 l 45.0753 17.54437 45.1723 17.60963 45.25168 17.63432 c 45.33104 17.65901 45.39278 17.64667 45.45276 17.60963 c 45.57446 17.53378 45.68028 17.33977 45.77907 17.13339 c 45.87782 16.92705 45.97131 16.71187 46.10359 16.59015 c 46.17062 16.52841 46.25175 16.4914 46.3417 16.50374 c 46.43341 16.51608 46.5269 16.57253 46.63274 16.67834 c 46.63274 16.6801 l 46.63449 16.68187 l 47.36823 17.56024 47.14952 18.59383 46.44753 18.94656 c 46.09476 19.12296 45.62737 19.12825 45.11235 18.8672 c 44.61671 18.61497 44.07701 18.10349 43.54257 17.28333 c 43.37856 18.29927 43.57079 19.08238 43.98 19.60446 c 44.40154 20.14595 45.04709 20.41757 45.7526 20.38936 c 39.71164 17.3239 m 39.58817 17.3239 39.46469 17.29037 39.36769 17.21806 c 39.27245 17.1475 39.20718 17.03287 39.21071 16.89 c 39.24599 15.19678 38.28473 13.97446 37.2441 13.69226 c 37.08888 13.64992 l 37.2441 13.60759 l 38.28473 13.3254 39.24248 12.10307 39.21423 10.40808 c 39.21248 10.27228 39.27774 10.16469 39.37299 10.09766 c 39.46822 10.02887 39.58992 9.99712 39.7134 9.99712 c 39.83508 9.99712 39.95856 10.02887 40.0538 10.09766 c 40.14906 10.16469 40.21431 10.27228 40.21254 10.40808 c 40.18433 12.10307 41.14206 13.3254 42.18092 13.60759 c 42.3379 13.64992 l 42.18092 13.69226 l 41.14206 13.97446 40.1808 15.19678 40.21606 16.89 c 40.21606 16.89177 l 40.21606 16.89177 l 40.21785 17.03464 40.15259 17.1475 40.05733 17.21806 c 39.96033 17.29037 39.83685 17.3239 39.71164 17.3239 c 39.71164 17.2357 m 39.81921 17.2357 39.9268 17.20572 40.00441 17.1475 c 40.08026 17.09108 40.12964 17.00818 40.12788 16.89177 c 40.12788 16.89352 l 40.0926 15.21088 41.02213 13.9868 42.0751 13.64992 c 41.02388 13.31126 40.09613 12.08897 40.12436 10.40633 c 40.12611 10.29872 40.0785 10.2229 40.00266 10.16821 c 39.9268 10.11354 39.81921 10.0853 39.7134 10.0853 c 39.6058 10.0853 39.49997 10.11354 39.42413 10.16821 c 39.3483 10.2229 39.30066 10.29872 39.30243 10.40633 c 39.33066 12.08897 38.4029 13.31126 37.35168 13.64992 c 38.4029 13.9868 39.33243 15.21088 39.2989 16.89352 c 39.29538 17.00995 39.34476 17.09108 39.42061 17.1475 c 39.49821 17.20572 39.60403 17.2357 39.71164 17.2357 c 27.0635 14.76463 m 26.33331 14.75583 25.60663 14.41364 25.2133 13.68874 c 24.82704 12.98145 24.76883 11.9126 25.30325 10.45218 c 24.83939 10.7291 24.4337 10.90901 24.11093 10.97073 c 23.76349 11.036 23.49538 10.9778 23.34721 10.79083 c 23.1973 10.6021 23.17613 10.30049 23.28549 9.90012 c 23.3878 9.51913 23.61885 9.03587 23.97336 8.46968 c 23.47775 8.49261 23.09325 8.67429 22.75635 8.96884 c 22.39653 9.28102 22.08258 9.70256 21.72101 10.13293 c 20.99962 10.9919 20.08775 11.87907 18.25693 11.95139 c 18.25693 11.95139 l 17.4509 11.99197 16.7154 11.92847 16.13863 11.78383 c 15.56186 11.6392 15.14032 11.41696 14.96748 11.12595 c 14.88104 10.97954 14.85988 10.81375 14.91985 10.6462 c 14.97806 10.47688 15.11388 10.30402 15.33257 10.12589 c 15.76823 9.77312 16.54076 9.4045 17.74014 9.03763 c 17.7419 9.03763 l 17.7419 9.03763 l 24.32965 7.23505 28.03714 5.51888 31.57175 5.32661 c 31.73578 5.3178 l 31.59822 5.40775 l 28.82907 7.20857 27.50623 9.26692 27.23108 10.83669 c 27.0935 11.62157 27.21873 12.28476 27.54857 12.73453 c 27.87839 13.18605 28.41457 13.43121 29.12186 13.38182 c 29.19241 13.37653 l 29.16594 13.44179 l 28.82555 14.30606 27.93835 14.77522 27.0635 14.76463 c 52.36327 14.76463 m 51.48842 14.77522 50.60126 14.30606 50.26083 13.44179 c 50.23439 13.37653 l 50.30493 13.38182 l 51.0122 13.43121 51.5484 13.18605 51.87823 12.73453 c 52.20805 12.28476 52.33328 11.62157 52.19571 10.83669 c 51.92056 9.26692 50.59772 7.20857 47.82681 5.40775 c 47.68924 5.3178 l 47.85327 5.32661 l 51.3879 5.51888 55.09537 7.23505 61.68488 9.03763 c 61.68488 9.03763 l 61.68488 9.03763 l 62.88602 9.4045 63.65678 9.77312 64.09421 10.12589 c 64.31293 10.30402 64.44698 10.47688 64.50693 10.6462 c 64.56514 10.81375 64.54573 10.97954 64.45932 11.12595 c 64.28647 11.41696 63.86491 11.6392 63.28815 11.78383 c 62.71141 11.92847 61.9759 11.99197 61.16985 11.95139 c 61.16985 11.95139 l 59.33905 11.87907 58.42717 10.9919 57.70578 10.13293 c 57.3442 9.70256 57.03024 9.28102 56.67043 8.96884 c 56.33356 8.67429 55.94905 8.49261 55.45341 8.46968 c 55.80794 9.03587 56.039 9.51913 56.1413 9.90012 c 56.24889 10.30049 56.22948 10.6021 56.07956 10.79083 c 55.9314 10.9778 55.66331 11.036 55.31584 10.97073 c 54.9913 10.90901 54.58563 10.7291 54.12352 10.45218 c 54.6562 11.9126 54.59975 12.98145 54.21349 13.68874 c 53.81839 14.41364 53.09348 14.75583 52.36327 14.76463 c 27.0635 14.67645 m 27.88544 14.68527 28.7056 14.25137 29.04955 13.46649 c 28.35814 13.49295 27.81136 13.24426 27.47801 12.78743 c 27.12877 12.3112 27.00356 11.62334 27.14464 10.82257 c 27.4198 9.24574 28.72676 7.22093 31.41125 5.43245 c 27.9507 5.66704 24.25734 7.34615 17.7666 9.12228 c 17.76485 9.12228 l 16.57076 9.48561 15.80704 9.85603 15.38725 10.19467 c 15.17735 10.36575 15.05391 10.52803 15.00275 10.67441 c 14.9516 10.8208 14.96748 10.95486 15.0433 11.0801 c 15.19322 11.33408 15.59361 11.5563 16.15979 11.69742 c 16.72597 11.84029 17.45442 11.90378 18.25163 11.8632 c 18.2534 11.8632 l 18.2534 11.8632 l 20.056 11.79265 20.93613 10.93018 21.65398 10.0765 c 22.01202 9.64966 22.32774 9.22458 22.69814 8.90181 c 23.06677 8.58081 23.49185 8.36563 24.05801 8.36563 c 24.1374 8.36563 l 24.09506 8.43265 l 23.7088 9.03587 23.47421 9.535 23.37015 9.92303 c 23.26608 10.30931 23.29254 10.58093 23.41602 10.73615 c 23.5377 10.89136 23.76349 10.94604 24.09506 10.88431 c 24.4249 10.8208 24.85173 10.63737 25.35265 10.32695 c 25.462 10.25816 l 25.41615 10.37985 l 24.84468 11.88084 24.9117 12.95148 25.28915 13.6464 c 25.66837 14.34132 26.36153 14.66763 27.0635 14.67645 c 52.36327 14.67645 m 53.06525 14.66763 53.75842 14.34132 54.13765 13.6464 c 54.51509 12.95148 54.5821 11.88084 54.01065 10.37985 c 53.96301 10.25816 l 54.07414 10.32695 l 54.57504 10.63737 55.00189 10.8208 55.33173 10.88431 c 55.66154 10.94604 55.88908 10.89136 56.01077 10.73615 c 56.13425 10.58093 56.1607 10.30931 56.05664 9.92303 c 55.95258 9.535 55.718 9.03587 55.33173 8.43265 c 55.28763 8.36563 l 55.36876 8.36563 l 55.93492 8.36563 56.36 8.58081 56.72864 8.90181 c 57.09727 9.22458 57.41475 9.64966 57.7728 10.0765 c 58.49065 10.93018 59.37079 11.79265 61.17337 11.8632 c 61.17337 11.8632 l 61.17337 11.8632 l 61.97238 11.90378 62.70082 11.84029 63.267 11.69742 c 63.83318 11.5563 64.23355 11.33408 64.38347 11.0801 c 64.45932 10.95486 64.47519 10.8208 64.42403 10.67441 c 64.3729 10.52803 64.24942 10.36575 64.03952 10.19467 c 63.618 9.85603 62.85428 9.48561 61.66019 9.12228 c 61.66019 9.12228 61.66019 9.12228 61.66019 9.12228 c 61.66019 9.12228 61.66019 9.12228 61.66019 9.12228 c 55.16945 7.34615 51.47607 5.66704 48.01376 5.43245 c 50.69826 7.22093 52.00522 9.24574 52.28214 10.82257 c 52.42148 11.62334 52.298 12.3112 51.94878 12.78743 c 51.61366 13.24426 51.06865 13.49295 50.37724 13.46649 c 50.71942 14.25137 51.54134 14.68527 52.36327 14.67645 c 32.43248 14.12967 m 29.37054 14.16847 27.84311 10.58798 29.18712 8.6831 c 29.18889 8.68134 l 29.19064 8.67958 l 30.79745 6.88228 32.4801 6.14854 33.68654 6.25438 c 34.28976 6.30728 34.7748 6.57362 35.06053 7.02162 c 35.34802 7.46962 35.43445 8.09576 35.25806 8.86476 c 35.25806 8.86653 l 35.2563 8.87006 l 35.20163 9.01822 35.13461 9.12581 35.06053 9.19814 c 34.98645 9.27045 34.9018 9.30571 34.82242 9.30043 c 34.74129 9.29337 34.6672 9.24574 34.61429 9.17166 c 34.56137 9.09583 34.52611 8.99176 34.51198 8.86476 c 34.48024 8.63724 34.23508 8.43617 33.90347 8.32858 c 33.57188 8.221 33.15915 8.20863 32.81523 8.33916 c 31.07614 9.24574 30.55052 10.3146 30.70573 11.12595 c 30.85742 11.92142 31.67406 12.48053 32.69705 12.41881 c 32.30196 11.42578 32.20496 10.75554 32.31607 10.34106 c 32.37428 10.12764 32.4854 9.97948 32.63356 9.8913 c 32.77995 9.80487 32.95985 9.77841 33.15211 9.79782 c 33.15562 9.79782 l 33.15741 9.79958 l 33.65302 9.90541 33.90347 10.02534 34.01636 10.18056 c 34.07281 10.25816 34.09221 10.34459 34.08691 10.43102 c 34.08163 10.51744 34.05516 10.60385 34.02342 10.69559 c 33.95816 10.87901 33.86996 11.07832 33.86644 11.30232 c 33.86116 11.52634 33.93523 11.77678 34.20685 12.06958 c 34.36383 12.23712 34.70601 12.27771 35.12932 12.14894 c 35.55086 12.02019 36.04825 11.72563 36.50154 11.25117 c 37.40636 10.30225 38.1401 8.63371 37.78029 6.11856 c 37.78381 6.12914 l 37.6092 5.68819 37.6921 5.36014 37.86142 5.19963 c 37.94608 5.11848 38.05368 5.07968 38.15773 5.09203 c 38.2618 5.10437 38.35881 5.16963 38.42053 5.28429 c 38.4223 5.28606 l 38.4223 5.28958 l 39.46646 7.90352 38.43112 11.79794 34.77655 13.45943 c 34.7748 13.45943 l 33.92465 13.91803 33.138 14.1191 32.43248 14.12967 c 46.99431 14.12967 m 46.28702 14.1191 45.50038 13.91624 44.65022 13.45943 c 40.99567 11.79794 39.96033 7.90352 41.00449 5.28958 c 41.00449 5.28606 l 41.00626 5.28429 l 41.06798 5.16963 41.165 5.10437 41.26904 5.09203 c 41.37312 5.07968 41.47894 5.11848 41.56537 5.19963 c 41.73468 5.36014 41.8176 5.68819 41.64297 6.12914 c 41.6465 6.11856 l 41.2867 8.63371 42.02042 10.30225 42.92525 11.25117 c 43.37856 11.72563 43.87416 12.02019 44.29749 12.14894 c 44.71901 12.27771 45.06296 12.23712 45.21994 12.06958 c 45.49156 11.77678 45.56563 11.52634 45.56033 11.30232 c 45.55505 11.07832 45.46863 10.87901 45.40337 10.69559 c 45.37161 10.60385 45.3434 10.51744 45.33812 10.43102 c 45.33458 10.34459 45.35222 10.25816 45.41043 10.18056 c 45.5233 10.02534 45.77376 9.90541 46.2694 9.79958 c 46.27115 9.79782 l 46.27292 9.79782 l 46.46693 9.77841 46.64684 9.80487 46.79323 9.8913 c 46.94139 9.97948 47.0525 10.12764 47.10895 10.34106 c 47.22183 10.75554 47.12482 11.42578 46.72974 12.41881 c 47.75273 12.48053 48.5676 11.92142 48.72105 11.12595 c 48.87627 10.3146 48.35066 9.24574 46.61156 8.33916 c 46.26585 8.20863 45.85489 8.221 45.5233 8.32858 c 45.18996 8.43617 44.94655 8.63724 44.91304 8.86476 c 44.9007 8.99176 44.8654 9.09583 44.8125 9.17166 c 44.75958 9.24574 44.6855 9.29337 44.60437 9.30043 c 44.52324 9.30571 44.44035 9.27045 44.36627 9.19814 c 44.29219 9.12581 44.2234 9.01822 44.16872 8.87006 c 44.16872 8.86653 l 44.16872 8.86476 l 43.99234 8.09576 44.07877 7.46962 44.3645 7.02162 c 44.652 6.57362 45.13704 6.30728 45.74025 6.25438 c 46.94669 6.14854 48.62756 6.88228 50.23439 8.67958 c 50.23615 8.68134 l 50.23792 8.6831 l 51.58368 10.58798 50.05623 14.16847 46.99431 14.12967 c 32.43073 14.04149 m 33.12212 14.03267 33.89465 13.83511 34.73422 13.38182 c 34.73598 13.38182 l 34.73775 13.38007 l 38.35176 11.73973 39.36592 7.89291 38.34117 5.32484 c 38.29178 5.23314 38.22124 5.18904 38.14716 5.17845 c 38.07307 5.16963 37.99017 5.19786 37.92139 5.2631 c 37.78557 5.39365 37.70091 5.67761 37.86494 6.0974 c 37.8667 6.1009 l 37.86847 6.10622 l 38.23006 8.64253 37.48926 10.34282 36.56503 11.31114 c 36.10292 11.79617 35.59496 12.09955 35.154 12.2336 c 34.71481 12.36766 34.3356 12.33766 34.14336 12.12955 c 33.85939 11.82265 33.77296 11.54573 33.77826 11.30057 c 33.78355 11.05539 33.87703 10.8455 33.94052 10.66736 c 33.97226 10.57741 33.99521 10.49628 34.00049 10.42572 c 34.00403 10.35341 33.98991 10.29344 33.94582 10.2317 c 33.85762 10.11177 33.62657 9.99182 33.14153 9.886 c 32.96338 9.86838 32.80464 9.89307 32.67764 9.96713 c 32.55066 10.04298 32.45364 10.16821 32.40251 10.36223 c 32.29668 10.75378 32.37956 11.42226 32.79759 12.44879 c 32.82051 12.50523 l 32.76054 12.51053 l 31.67406 12.60046 30.78511 12.00255 30.61931 11.14183 c 30.4535 10.2811 31.01616 9.17696 32.77641 8.2598 c 32.77995 8.25803 l 32.78171 8.25803 l 33.15034 8.11868 33.5807 8.13281 33.9317 8.24568 c 34.28093 8.35857 34.5596 8.57375 34.59842 8.85242 c 34.60019 8.85419 l 34.60019 8.85419 l 34.61076 8.9706 34.64427 9.06055 34.68484 9.12053 c 34.72716 9.1805 34.77655 9.20871 34.82771 9.21223 c 34.87885 9.21576 34.93883 9.19461 34.9988 9.13463 c 35.06053 9.07643 35.12227 8.97942 35.1734 8.84007 c 35.3445 8.09047 35.25806 7.49078 34.98645 7.06924 c 34.71658 6.64417 34.25977 6.39195 33.6777 6.34256 c 32.51538 6.24025 30.85213 6.95459 29.25945 8.73602 c 27.96304 10.57211 29.43933 14.08029 32.43073 14.04149 c 46.99606 14.04149 m 49.98744 14.08029 51.46373 10.57211 50.16736 8.73602 c 48.57288 6.95459 46.91139 6.24025 45.7473 6.34256 c 45.16525 6.39195 44.71019 6.64417 44.43858 7.06924 c 44.16872 7.49078 44.08054 8.09047 44.25337 8.84007 c 44.30453 8.97942 44.36627 9.07643 44.42624 9.13463 c 44.48796 9.19461 44.54617 9.21576 44.59909 9.21223 c 44.65022 9.20871 44.69785 9.1805 44.74019 9.12053 c 44.78252 9.06055 44.81427 8.9706 44.82661 8.85419 c 44.82661 8.85419 l 44.82661 8.85242 l 44.86717 8.57375 45.14409 8.35857 45.49509 8.24568 c 45.84607 8.13281 46.27644 8.11868 46.64508 8.25803 c 46.64684 8.25803 l 46.6486 8.2598 l 48.40886 9.17696 48.97151 10.2811 48.80748 11.14183 c 48.64168 12.00255 47.75273 12.60046 46.66623 12.51053 c 46.60626 12.50523 l 46.6292 12.44879 l 47.04546 11.42226 47.13011 10.75378 47.02429 10.36223 c 46.97313 10.16821 46.87613 10.04298 46.74913 9.96713 c 46.62215 9.89307 46.4634 9.86838 46.2835 9.886 c 45.80022 9.99182 45.56917 10.11177 45.48097 10.2317 c 45.43512 10.29344 45.42278 10.35341 45.4263 10.42572 c 45.42982 10.49628 45.45451 10.57741 45.48627 10.66736 c 45.54976 10.8455 45.64325 11.05539 45.64854 11.30057 c 45.65382 11.54573 45.56741 11.82265 45.28343 12.12955 c 45.08942 12.33766 44.71196 12.36766 44.27101 12.2336 c 43.83183 12.09955 43.32387 11.79617 42.86176 11.31114 c 41.93753 10.34282 41.19675 8.64253 41.5583 6.10622 c 41.56007 6.1009 l 41.56184 6.0974 l 41.72588 5.67761 41.6412 5.39365 41.50363 5.2631 c 41.43661 5.19786 41.35371 5.16963 41.27963 5.17845 c 41.20555 5.18904 41.13501 5.23314 41.08386 5.32484 c 40.06085 7.89291 41.07504 11.73973 44.68904 13.38007 c 44.6908 13.38182 l 44.69257 13.38182 l 45.53212 13.83511 46.30466 14.03267 46.99606 14.04149 c 12.02019 9.75372 m 11.65155 9.759 11.36583 9.71669 11.14888 9.62672 c 10.9337 9.53853 10.78554 9.40097 10.69736 9.22458 c 10.52803 8.88417 10.58446 8.40794 10.7238 7.84355 c 7.42905 7.18388 5.71994 7.39554 2.7409 9.408 c 2.7162 9.42389 l 2.69151 9.408 l 2.01775 8.96532 1.60327 8.44852 1.42511 7.93349 c 1.24875 7.4167 1.31224 6.90167 1.58916 6.47131 c 2.14299 5.61058 3.53813 5.0938 5.54886 5.50124 c 5.55238 5.503 l 5.55591 5.503 l 7.27736 6.11504 8.85066 6.28964 10.20702 6.41664 c 11.56512 6.54185 12.7063 6.61946 13.56703 7.04984 c 13.56703 7.04984 l 13.56879 7.04984 l 13.77692 7.16624 13.94272 7.21915 14.06088 7.22446 c 14.17906 7.22798 14.24608 7.1927 14.28665 7.1292 c 14.32545 7.0657 14.33603 6.96693 14.30959 6.84346 c 14.28136 6.72177 14.21786 6.5789 14.1191 6.43251 c 13.7099 6.00038 13.149 5.65115 12.6181 5.43245 c 12.08368 5.21375 11.57571 5.12732 11.28822 5.20668 c 11.29352 5.20493 l 10.78024 5.39717 10.41867 5.45184 10.16116 5.35837 c 10.0324 5.3125 9.93364 5.22784 9.86131 5.11143 c 9.79077 4.99327 9.7449 4.84511 9.72021 4.66698 c 9.72021 4.66167 l 9.72021 4.65462 l 9.78723 4.21721 9.98302 3.86797 10.28285 3.64397 c 10.5827 3.41997 10.98662 3.3212 11.46283 3.38115 c 12.41351 3.49933 13.66226 4.2366 15.03273 5.84694 c 15.03273 5.84694 l 15.03448 5.8487 l 15.37138 6.30551 15.69415 6.45543 15.86877 6.4378 c 15.9552 6.42899 16.00633 6.38664 16.02576 6.31256 c 16.04515 6.2385 16.02751 6.12561 15.94815 5.99156 c 15.94815 5.9898 15.94815 5.9898 15.94815 5.9898 c 14.91457 4.50468 14.70819 3.40762 14.97806 2.63332 c 15.24791 1.85725 15.99223 1.41806 16.82297 1.24168 c 17.65372 1.06354 18.57619 1.14293 19.22878 1.40924 c 19.55507 1.54153 19.81612 1.72319 19.96075 1.9472 c 20.10538 2.17296 20.12831 2.4446 19.98544 2.73386 c 19.98544 2.73386 l 19.98544 2.73563 l 19.84433 2.98607 19.71559 3.15715 19.59036 3.27005 c 19.46689 3.38115 19.3452 3.43231 19.22878 3.4376 c 18.99596 3.44641 18.79843 3.2771 18.60793 3.10425 c 18.41743 2.9314 18.22696 2.75325 18.0294 2.71269 c 17.92888 2.69151 17.82658 2.70212 17.71016 2.7656 c 17.59375 2.82733 17.465 2.94551 17.32213 3.13423 c 17.0117 3.76744 16.99054 4.29482 17.16869 4.69519 c 17.34682 5.09732 17.72603 5.37953 18.23048 5.51358 c 19.23936 5.7852 20.74211 5.46066 22.04202 4.3336 c 22.0438 4.33185 l 22.04555 4.33008 l 23.04913 3.61221 24.3561 3.63867 25.88884 3.72334 c 27.42332 3.808 29.18889 3.95087 31.12198 3.48875 c 31.12198 3.48875 l 31.12375 3.48698 l 32.5683 3.1889 34.0287 3.30002 35.12755 3.82916 c 36.22285 4.35477 36.95659 5.30545 36.93896 6.66003 c 36.93896 6.6618 36.94072 6.6618 36.94072 6.66357 c 36.93896 6.66357 l 36.93896 6.66533 36.94072 6.66885 36.94072 6.67062 c 36.85254 6.67767 l 36.71672 5.91573 36.23872 5.38658 35.49088 5.04088 c 34.74304 4.69695 33.72357 4.54173 32.52068 4.54526 c 30.11487 4.55055 26.97708 5.18552 23.78993 6.1503 c 23.78816 6.15207 l 23.78816 6.15207 23.7864 6.15207 23.7864 6.15207 c 17.12105 8.69897 13.69403 9.72726 12.02019 9.75372 c 67.4066 9.75372 m 65.73277 9.72726 62.30397 8.69897 55.63686 6.1503 c 52.44969 5.18552 49.3119 4.55055 46.90611 4.54526 c 45.7032 4.54173 44.68375 4.69695 43.9359 5.04088 c 43.18805 5.38658 42.71005 5.91573 42.57426 6.67767 c 42.48607 6.67062 l 42.48607 6.66885 42.48784 6.66533 42.48607 6.66357 c 42.48607 6.66357 l 42.48607 6.6618 42.48784 6.6618 42.48784 6.66003 c 42.47018 5.30545 43.20392 4.35477 44.29924 3.82916 c 45.39807 3.30002 46.85674 3.1889 48.30304 3.48698 c 48.30304 3.48875 l 48.3048 3.48875 l 50.23792 3.95262 52.00345 3.808 53.53793 3.72334 c 55.07068 3.63867 56.37764 3.61221 57.37949 4.33185 c 57.38124 4.33185 l 57.38301 4.3336 l 58.68468 5.46066 60.18742 5.7852 61.1963 5.51358 c 61.70074 5.37953 62.07996 5.09732 62.25812 4.69519 c 62.43625 4.29482 62.41508 3.76744 62.10466 3.13423 c 61.96179 2.94551 61.83304 2.82733 61.71661 2.7656 c 61.60022 2.70212 61.49792 2.69151 61.39738 2.71269 c 61.19807 2.75325 61.00935 2.9314 60.81885 3.10425 c 60.6266 3.2771 60.43082 3.44641 60.198 3.4376 c 60.0816 3.43407 59.9599 3.38115 59.83643 3.27005 c 59.71121 3.15715 59.58244 2.98607 59.44135 2.73563 c 59.44135 2.73386 l 59.44135 2.73386 l 59.29848 2.4446 59.32141 2.17296 59.46603 1.9472 c 59.61066 1.72319 59.8717 1.54153 60.198 1.40924 c 60.8506 1.14293 61.7713 1.06354 62.6038 1.24168 c 63.43456 1.41806 64.17711 1.85725 64.44873 2.63332 c 64.71858 3.40762 64.51047 4.50468 63.47688 5.9898 c 63.47688 5.99156 l 63.39928 6.12561 63.38165 6.2385 63.40105 6.31256 c 63.42044 6.38664 63.4716 6.42899 63.55801 6.4378 c 63.73264 6.45543 64.0554 6.30551 64.39229 5.8487 c 64.39406 5.84694 l 64.39406 5.84694 l 65.76451 4.2366 67.01328 3.49933 67.96394 3.38115 c 68.44019 3.3212 68.84409 3.41997 69.14392 3.64397 c 69.44377 3.86797 69.63779 4.21895 69.70659 4.65462 c 69.70659 4.66167 l 69.70659 4.66698 l 69.68011 4.84511 69.63603 4.99327 69.56548 5.11143 c 69.49316 5.22784 69.39438 5.3125 69.26564 5.35837 c 69.00812 5.45184 68.64653 5.39717 68.13329 5.20493 c 68.13858 5.20668 l 67.85107 5.12732 67.3431 5.21375 66.80867 5.43245 c 66.27602 5.65115 65.7169 6.00038 65.3077 6.43251 c 65.20892 6.5789 65.14366 6.72177 65.11722 6.84346 c 65.09074 6.96693 65.10133 7.0657 65.14014 7.1292 c 65.1807 7.1927 65.24773 7.22798 65.3659 7.22446 c 65.48409 7.21915 65.64987 7.16624 65.858 7.04984 c 65.858 7.04984 l 65.85976 7.04984 l 66.71872 6.61946 67.86165 6.54185 69.218 6.41664 c 70.57613 6.28964 72.14941 6.11504 73.87088 5.503 c 73.87263 5.503 l 73.87616 5.50124 l 75.88864 5.0938 77.2838 5.61058 77.83763 6.47131 c 78.11455 6.90167 78.17804 7.4167 78.00166 7.93349 c 77.82353 8.44852 77.40903 8.96532 76.73526 9.408 c 76.71057 9.42389 l 76.68587 9.408 l 73.70508 7.39554 71.99773 7.18388 68.70297 7.84355 c 68.84232 8.40971 68.89876 8.88417 68.72768 9.22458 c 68.64124 9.40097 68.49309 9.53853 68.27615 9.62672 c 68.06097 9.71669 67.77524 9.759 67.4066 9.75372 c 12.01842 9.66553 m 13.65874 9.63908 17.09108 8.61607 23.75818 6.06917 c 23.75995 6.06741 l 23.75995 6.06741 l 26.95416 5.10085 30.099 4.46413 32.5189 4.45708 c 33.73062 4.45355 34.76068 4.60876 35.52792 4.96152 c 36.13115 5.23843 36.56328 5.6494 36.79257 6.19264 c 36.65146 5.12907 36.02531 4.35829 35.08875 3.90854 c 34.0146 3.39174 32.57182 3.27885 31.14316 3.57341 c 31.1414 3.57341 l 29.19241 4.04082 27.41628 3.89442 25.88354 3.81152 c 24.35258 3.72687 23.0703 3.7057 22.0967 4.40239 c 22.10022 4.40063 l 20.78091 5.54356 19.25348 5.88045 18.20755 5.59824 c 17.68372 5.45891 17.27803 5.16083 17.08755 4.73045 c 16.89705 4.3001 16.92351 3.74449 17.24629 3.0919 c 17.24805 3.08836 l 17.24982 3.08485 l 17.39798 2.88554 17.53555 2.7603 17.66782 2.68799 c 17.80011 2.61568 17.92888 2.60156 18.04527 2.62625 c 18.28163 2.67389 18.4774 2.86615 18.66614 3.03899 c 18.85661 3.21007 19.0383 3.35646 19.22525 3.34941 c 19.31873 3.34589 19.41751 3.30531 19.53215 3.20479 c 19.64503 3.1025 19.77026 2.93846 19.90784 2.69504 c 20.03836 2.42696 20.0172 2.19766 19.88667 1.99483 c 19.75615 1.79375 19.51099 1.61914 19.19527 1.49037 c 18.5656 1.23288 17.65372 1.1535 16.84238 1.32635 c 16.02928 1.50096 15.31847 1.92427 15.06096 2.66154 c 14.80344 3.3988 14.9957 4.46765 16.0222 5.94395 c 16.02399 5.94395 l 16.02399 5.94571 l 16.11041 6.09387 16.13863 6.2279 16.11041 6.33374 c 16.08218 6.43956 15.99223 6.51189 15.8776 6.52423 c 15.64653 6.54893 15.30965 6.37077 14.96394 5.90161 c 13.60406 4.30362 12.36766 3.58223 11.45049 3.46759 c 10.99367 3.41115 10.61621 3.50462 10.33577 3.71452 c 10.05708 3.92265 9.87543 4.24718 9.81017 4.66167 c 9.83308 4.82924 9.87543 4.96504 9.93716 5.06558 c 9.9989 5.16788 10.08002 5.23666 10.19115 5.27547 c 10.41162 5.35661 10.75732 5.3125 11.26175 5.1238 c 11.26352 5.12201 l 11.26527 5.12201 l 11.5916 5.03206 12.1066 5.12732 12.64986 5.35132 c 13.19487 5.57355 13.76457 5.92807 14.18611 6.3743 c 14.18788 6.37607 l 14.18964 6.3796 l 14.29547 6.5348 14.36426 6.68825 14.39424 6.82407 c 14.42598 6.96165 14.41718 7.08511 14.36072 7.17506 c 14.30254 7.26678 14.1967 7.31793 14.05559 7.31088 c 13.91624 7.30559 13.74164 7.24739 13.52646 7.12567 c 13.52821 7.12744 l 12.69218 6.7112 11.55807 6.63007 10.19995 6.50307 c 8.84184 6.37607 7.26149 6.20146 5.53297 5.58766 c 5.53297 5.58766 5.53122 5.58766 5.53122 5.58766 c 3.54166 5.18375 2.18884 5.7023 1.66322 6.51894 c 1.39867 6.92815 1.3387 7.4114 1.50803 7.90527 c 1.67558 8.39207 2.07243 8.88594 2.71974 9.31631 c 5.7076 7.30734 7.45905 7.09218 10.78201 7.7624 c 10.82787 7.773 l 10.81728 7.8171 l 10.66913 8.39912 10.61975 8.87183 10.77672 9.18579 c 10.85432 9.34276 10.9831 9.46269 11.18414 9.5456 c 11.38347 9.6285 11.65685 9.67082 12.01842 9.66553 c 67.40836 9.66553 m 67.76994 9.67082 68.04333 9.6285 68.24263 9.5456 c 68.44371 9.46269 68.57071 9.34276 68.65007 9.18579 c 68.80528 8.87183 68.75766 8.39912 68.6095 7.8171 c 68.59715 7.77122 l 68.643 7.7624 l 71.96776 7.09218 73.7192 7.30734 76.70705 9.31631 c 77.35435 8.88594 77.7512 8.39207 77.91876 7.90527 c 78.08632 7.4114 78.02635 6.92815 77.76355 6.51894 c 77.23795 5.7023 75.88336 5.18375 73.8938 5.58766 c 73.8938 5.58766 l 72.16353 6.20146 70.58318 6.37607 69.22682 6.50307 c 67.86871 6.63007 66.73459 6.70943 65.89856 7.12744 c 65.90033 7.12567 l 65.68513 7.24739 65.50877 7.30559 65.36943 7.31088 c 65.23009 7.31793 65.1225 7.26678 65.06606 7.17506 c 65.00784 7.08511 65.0008 6.96165 65.03078 6.82407 c 65.06253 6.68825 65.13132 6.5348 65.23538 6.3796 c 65.23714 6.37607 l 65.24066 6.3743 l 65.66222 5.92807 66.23192 5.57355 66.77516 5.35132 c 67.3184 5.12732 67.8352 5.03206 68.1615 5.12201 c 68.16327 5.12201 l 68.16502 5.1238 l 68.66948 5.3125 69.01517 5.35661 69.23564 5.27547 c 69.34677 5.23666 69.4279 5.16788 69.48964 5.06558 c 69.55138 4.96504 69.59193 4.82924 69.61662 4.66167 c 69.55138 4.24718 69.36792 3.92265 69.09102 3.71452 c 68.81058 3.50462 68.43312 3.41115 67.97455 3.46759 c 67.05913 3.58223 65.82272 4.30362 64.46284 5.90161 c 64.11537 6.37077 63.78026 6.54893 63.54921 6.52423 c 63.43279 6.51189 63.3446 6.43956 63.31639 6.33374 c 63.28815 6.2279 63.31639 6.09387 63.40105 5.94571 c 63.4028 5.94395 l 63.4028 5.94395 l 64.4311 4.46765 64.62158 3.3988 64.36584 2.66154 c 64.10832 1.92427 63.39752 1.50096 62.58441 1.32635 c 61.7713 1.1535 60.86119 1.23288 60.22977 1.49037 c 59.91403 1.61914 59.67062 1.79199 59.54012 1.99483 c 59.40959 2.19766 59.38666 2.42696 59.51895 2.69504 c 59.51895 2.69504 59.51895 2.69504 59.51895 2.69504 c 59.65652 2.93846 59.78175 3.1025 59.89464 3.20479 c 60.00752 3.30531 60.10805 3.34589 60.20152 3.34941 c 60.3885 3.35646 60.57016 3.21007 60.7589 3.03723 c 60.94937 2.86615 61.14516 2.67389 61.37975 2.62625 c 61.49792 2.60156 61.62666 2.61568 61.75896 2.68799 c 61.89125 2.7603 62.02881 2.88554 62.17699 3.08485 c 62.17873 3.08836 l 62.18051 3.0919 l 62.50328 3.74449 62.52972 4.3001 62.33746 4.73045 c 62.14699 5.16083 61.74309 5.45891 61.21924 5.59824 c 60.17155 5.88045 58.64587 5.54356 57.32657 4.40063 c 57.3301 4.40239 l 56.35648 3.7057 55.0742 3.72687 53.54149 3.81152 c 52.01051 3.89442 50.23262 4.04082 48.28363 3.57341 c 46.85497 3.27885 45.41219 3.39174 44.33804 3.90854 c 43.40147 4.35829 42.77531 5.12907 42.63423 6.19264 c 42.86353 5.6494 43.29564 5.23843 43.89885 4.96152 c 44.6661 4.60876 45.69615 4.45355 46.90611 4.45708 c 49.3278 4.46413 52.47261 5.10085 55.66507 6.06741 c 55.66684 6.06741 l 55.66861 6.06917 l 62.33395 8.61607 65.76804 9.63908 67.40836 9.66553 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -576.709 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -576.709 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 32.996 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 42.52 -576.709 Td[<00170012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -576.709 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 42.52 -576.709 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.054 3.641 cm 0 G 0 g BT /F2 7.5 Tf 42.52 -576.709 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500160011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 42.52 -576.709 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 42.52022 -28.3468 m 42.52022 -28.3468 m 42.52022 28.3468 l 99.21387 28.3468 l 99.21387 -28.3468 l h 99.21387 28.3468 m S Q Q n Q Q Q
+
+endstream
+endobj
+54 0 obj
+<</Length 229817>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.035 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<0019>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F10 12 Tf 0 4.437 Td[<0015000f0013>]TJ /F4 12 Tf 26.688 0 Td[<125010b704a70698077c>]TJ ET q 1 0 0 1 28.346 -33.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.513 0 cm 0 G 0 g q 1 0 0 1 28.315 -45.366 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 13.6686 17.89099 m 15.66626 20.84029 18.88217 22.54585 20.65533 19.63864 c 21.547 21.37735 23.3814 22.99359 26.2312 22.99359 c 27.57191 22.99359 29.2277 22.00624 29.96758 20.29688 c 31.89764 21.4067 33.87236 20.7255 34.82271 19.04417 c 36.14046 20.39255 37.91743 19.43964 38.13176 17.37308 c 38.79764 12.52689 45.00624 14.8728 44.06226 17.55421 c 43.07108 19.44218 41.1308 18.74059 41.24051 17.81062 c 41.26347 17.12433 41.85538 16.51839 40.5287 16.24796 c 39.45332 16.04385 38.81549 17.63332 39.24922 18.95871 c 40.5976 21.86847 42.64117 21.87868 44.24594 20.5724 c 46.7424 22.56752 49.24649 22.48589 51.05792 19.4728 c 45.76653 20.88878 47.24628 9.55971 39.92787 12.01662 c 35.77945 4.37675 28.30412 13.93903 35.4886 14.54369 c 33.98589 17.34373 30.69725 16.14207 30.72404 14.40465 c 30.70108 13.47342 31.83769 12.65189 30.49443 12.40952 c 29.61932 12.30363 29.81834 12.67485 29.37567 13.35861 c 26.35493 19.3733 15.60757 13.5895 19.41284 8.35422 c 25.19666 1.89816 29.81323 13.21445 21.37607 10.72693 c 23.95288 15.3703 27.9865 13.47214 30.06453 9.55206 c 39.41122 8.37337 33.81113 0.97713 31.14119 4.37036 c 31.25471 1.47719 29.05804 0.03188 27.75688 0.03188 c 25.87402 0.03188 24.54607 1.04219 23.47707 2.25023 c 22.15294 1.21185 20.58263 1.07408 19.68712 2.62654 c 18.83752 4.00043 18.07852 4.02211 17.20341 3.3843 c 16.15228 2.7235 14.4276 3.7032 13.6686 5.13448 c 0.03188 5.13448 l 0.03188 17.89099 l 13.6686 17.89099 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -33.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -33.854 Td[<00170013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -33.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -33.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200190011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -33.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -33.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.563 0 cm 0 G 0 g q 1 0 0 1 142.323 -45.366 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 27.75688 0.0 m 25.87402 0.0 24.54224 1.00647 23.47325 2.20941 c 22.81372 1.69788 22.09299 1.40448 21.41945 1.43509 c 20.73952 1.46443 20.11191 1.82672 19.66031 2.60997 c 19.66031 2.60997 l 19.23808 3.29243 18.84007 3.63431 18.44719 3.72871 c 18.05428 3.8231 17.65627 3.67513 17.22255 3.35878 c 17.22128 3.3575 l 17.22 3.3575 l 16.68167 3.01945 15.97496 3.10237 15.31163 3.4468 c 14.6534 3.78868 14.0347 4.38823 13.65073 5.10258 c 0.0 5.10258 l 0.0 17.92288 l 13.65329 17.92288 l 14.6534 19.39497 15.95456 20.5571 17.2353 20.99083 c 17.87823 21.20895 18.51733 21.24213 19.10669 21.03674 c 19.68457 20.8352 20.21268 20.40147 20.65277 19.69731 c 21.55722 21.42711 23.39415 23.02548 26.2312 23.02548 c 27.57956 23.02548 29.23026 22.04068 29.98161 20.33769 c 31.90274 21.42455 33.8698 20.75227 34.83037 19.08882 c 35.48988 19.74579 36.26802 19.84657 36.90585 19.51744 c 37.55388 19.18323 38.0552 18.41785 38.16365 17.3769 c 38.16365 17.3769 l 38.32947 16.1727 38.83719 15.42134 39.48904 15.00674 c 40.14217 14.59216 40.942 14.51561 41.69464 14.67125 c 42.44728 14.82816 43.15016 15.2185 43.6043 15.73387 c 44.05843 16.24924 44.26381 16.88324 44.03291 17.54146 c 43.5418 18.47397 42.8236 18.76225 42.2419 18.70741 c 41.95105 18.68062 41.69336 18.56708 41.51732 18.40508 c 41.3413 18.24307 41.24562 18.03514 41.2724 17.81445 c 41.2724 17.81317 l 41.2724 17.8119 l 41.28389 17.47768 41.43825 17.15622 41.42294 16.87173 c 41.41527 16.72887 41.36043 16.5962 41.22266 16.48523 c 41.08615 16.37424 40.8693 16.28494 40.53508 16.21735 c 40.53508 16.21606 l 40.53508 16.21606 l 40.25827 16.16376 40.00696 16.22754 39.79648 16.37297 c 39.58598 16.51839 39.41634 16.74419 39.29387 17.01717 c 39.05148 17.56187 39.00047 18.29793 39.21988 18.96892 c 39.21988 18.97018 l 39.22116 18.97275 l 39.89725 20.43208 40.75322 21.17197 41.6449 21.37735 c 42.52893 21.58145 43.44357 21.25743 44.24594 20.61069 c 45.49226 21.60059 46.74367 22.08023 47.91345 21.93225 c 49.0896 21.783 50.17645 21.00102 51.08598 19.48938 c 51.12682 19.42177 l 51.05028 19.44218 l 49.73763 19.79298 48.85487 19.35799 48.1405 18.53902 c 47.42488 17.72006 46.88527 16.51457 46.28189 15.33969 c 45.6785 14.16481 45.01006 13.018 44.02908 12.31767 c 43.0532 11.62115 41.7648 11.37497 39.9419 11.9809 c 38.90479 10.08145 37.65721 9.2408 36.4785 9.07242 c 35.2947 8.90147 34.18616 9.40408 33.43608 10.16565 c 32.68472 10.9272 32.288 11.95029 32.53802 12.82794 c 32.78421 13.69537 33.67079 14.40465 35.43758 14.56665 c 34.69003 15.92267 33.52281 16.3079 32.53802 16.14462 c 31.54301 15.97879 30.74318 15.25294 30.75594 14.40465 c 30.75594 14.40465 l 30.75594 14.40337 l 30.74446 13.95178 31.01872 13.51807 31.1348 13.15833 c 31.1922 12.97845 31.21007 12.81264 31.12077 12.67485 c 31.0302 12.53708 30.84012 12.43886 30.5008 12.37762 c 30.49953 12.37762 l 30.49825 12.37762 l 30.27756 12.35085 30.12193 12.3534 30.00458 12.38657 c 29.88722 12.41844 29.80684 12.48222 29.74689 12.56897 c 29.62572 12.74373 29.5683 13.00398 29.34889 13.34074 c 29.34889 13.34203 l 29.34761 13.34457 l 28.59625 14.83963 27.36908 15.59865 26.00414 15.81934 c 24.64047 16.03874 23.13774 15.71857 21.84933 15.04628 c 20.55965 14.3753 19.48428 13.3535 18.96892 12.17735 c 18.45227 11.00247 18.49309 9.67451 19.43835 8.37337 c 20.87857 6.76604 22.24095 6.2698 23.34312 6.38206 c 24.4453 6.4956 25.29231 7.2189 25.69925 8.06592 c 26.10619 8.91296 26.07175 9.8748 25.42117 10.47435 c 24.7693 11.07391 23.48856 11.31628 21.385 10.69632 c 21.311 10.67464 l 21.348 10.74225 l 21.99477 11.9069 22.73337 12.66338 23.51407 13.08179 c 24.29349 13.49892 25.11372 13.57547 25.91484 13.38156 c 27.51451 12.99504 29.04146 11.53825 30.08368 9.58012 c 32.41429 9.28418 33.82132 8.6017 34.57524 7.78911 c 35.33043 6.97523 35.42482 6.03125 35.13908 5.23524 c 34.85333 4.44052 34.1887 3.78993 33.42332 3.55267 c 32.67706 3.3205 31.83641 3.49525 31.16925 4.3002 c 31.20496 2.88295 30.69342 1.81013 30.00203 1.09322 c 29.29915 0.36482 28.41893 0.0 27.75688 0.0 c 27.75688 0.06377 m 28.39598 0.06377 29.2647 0.42094 29.95738 1.13786 c 30.64877 1.85478 31.16542 2.93016 31.10928 4.36908 c 31.10545 4.46605 l 31.16669 4.3895 l 31.82748 3.55013 32.66049 3.38173 33.40417 3.61263 c 34.14789 3.8448 34.79976 4.48135 35.07912 5.25694 c 35.35849 6.03381 35.2692 6.94846 34.52803 7.74573 c 33.78815 8.5443 32.3926 9.22678 30.0607 9.52017 c 30.04411 9.52272 l 30.03647 9.53676 l 29.00064 11.49104 27.47751 12.93892 25.89952 13.32033 c 25.11118 13.5104 24.31007 13.43513 23.5434 13.02565 c 22.79204 12.62383 22.0764 11.8916 21.44368 10.77414 c 23.50896 11.36732 24.79736 11.13387 25.46326 10.52156 c 26.13936 9.89903 26.17125 8.90276 25.75665 8.03786 c 25.34079 7.17424 24.4759 6.43437 23.3495 6.31956 c 22.22311 6.20348 20.83902 6.71373 19.38861 8.33255 c 19.38861 8.3338 l 19.38733 8.33508 l 18.4306 9.65157 18.38722 11.01013 18.91023 12.20287 c 19.43454 13.39687 20.52011 14.42632 21.82 15.10368 c 23.11989 15.77979 24.63281 16.10507 26.01433 15.88185 c 27.39459 15.65862 28.64345 14.88556 29.40247 13.37518 c 29.62698 13.02948 29.69077 12.76288 29.7992 12.60597 c 29.85405 12.52815 29.91656 12.47586 30.02116 12.44778 c 30.12576 12.41844 30.27374 12.41463 30.4906 12.4414 c 30.4906 12.4414 l 30.821 12.50137 30.99193 12.59576 31.0672 12.7093 c 31.14246 12.82411 31.1297 12.96698 31.07484 13.1392 c 30.96387 13.48361 30.68066 13.92627 30.69215 14.40465 c 30.6794 15.29248 31.50858 16.03748 32.52782 16.20712 c 33.54706 16.3768 34.7602 15.9686 35.51666 14.55899 c 35.53963 14.51561 l 35.49115 14.51178 l 33.70268 14.36127 32.83908 13.65837 32.59926 12.81007 c 32.35815 11.96304 32.7434 10.96037 33.482 10.2103 c 34.2206 9.46149 35.30873 8.9678 36.46959 9.13492 c 37.63042 9.30203 38.86653 10.12738 39.89981 12.03194 c 39.91255 12.05489 l 39.93806 12.04724 l 41.76099 11.43492 43.02643 11.68112 43.99208 12.36998 c 44.95776 13.05882 45.62238 14.19543 46.22575 15.36902 c 46.82787 16.54135 47.36748 17.75067 48.09203 18.57983 c 48.80257 19.3937 49.7019 19.82999 50.99031 19.51361 c 50.09608 20.97168 49.04239 21.7256 47.90579 21.86975 c 46.7526 22.01518 45.51012 21.54192 44.26636 20.54689 c 44.24594 20.53159 l 44.2268 20.54817 l 43.42952 21.1962 42.52765 21.51639 41.65894 21.31612 c 40.79147 21.11584 39.95082 20.3951 39.27983 18.94724 c 39.06554 18.29282 39.11655 17.57208 39.35255 17.0427 c 39.46991 16.77736 39.63448 16.56175 39.83218 16.42528 c 40.03119 16.28877 40.26208 16.2301 40.52232 16.27858 c 40.85143 16.34618 41.05937 16.4342 41.1831 16.53369 c 41.30814 16.63448 41.35277 16.74545 41.35915 16.8743 c 41.37318 17.13199 41.22137 17.456 41.2099 17.8068 c 41.2099 17.8068 41.2099 17.8068 41.2099 17.8068 c 41.18056 18.05046 41.28644 18.28006 41.47395 18.45227 c 41.66275 18.62448 41.93192 18.74185 42.23552 18.7712 c 42.844 18.82732 43.59027 18.52116 44.09032 17.56825 c 44.0916 17.56697 l 44.09286 17.56442 l 44.33269 16.88324 44.11711 16.2199 43.65149 15.69176 c 43.18715 15.16492 42.47278 14.7682 41.7074 14.61002 c 40.942 14.45056 40.12433 14.5271 39.45587 14.95316 c 38.78615 15.37796 38.26825 16.14972 38.10114 17.36798 c 38.10114 17.36926 l 38.09985 17.36926 l 37.99397 18.39487 37.5003 19.13858 36.87651 19.46132 c 36.25272 19.78278 35.49753 19.68839 34.84567 19.02249 c 34.81635 18.99188 l 34.79593 19.02887 l 33.85194 20.69615 31.90019 21.37224 29.98416 20.2688 c 29.95227 20.25095 l 29.93823 20.28412 l 29.20346 21.98201 27.55661 22.9617 26.2312 22.9617 c 23.39415 22.9617 21.57124 21.35439 20.6834 19.6246 c 20.65788 19.57358 l 20.62854 19.62206 l 20.18843 20.34407 19.66031 20.77652 19.08627 20.97679 c 18.51224 21.17706 17.88843 21.14519 17.25699 20.93086 c 15.99155 20.50224 14.69038 19.34396 13.69537 17.87312 c 13.68518 17.8591 l 13.6686 17.8591 l 0.06377 17.8591 l 0.06377 5.16637 l 13.68771 5.16637 l 13.69666 5.14978 l 14.07297 4.43924 14.69038 3.84097 15.34096 3.50293 c 15.99283 3.16487 16.67403 3.08833 17.18683 3.41107 c 17.62692 3.73126 18.04535 3.89073 18.46248 3.78993 c 18.87962 3.69044 19.28783 3.33325 19.7139 2.64313 c 19.71518 2.64313 l 19.71518 2.64185 l 20.15784 1.87263 20.76376 1.52821 21.42328 1.49887 c 22.08278 1.46954 22.7997 1.75911 23.45793 2.27446 c 23.4809 2.29361 l 23.50131 2.27063 l 24.56775 1.06642 25.8855 0.06377 27.75688 0.06377 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -33.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.924 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -33.854 Td[<00170014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -33.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -33.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200190011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -33.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -33.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.877 0 cm 0 G 0 g q 1 0 0 1 257.028 -59.001 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 1 j 0.03644 19.25081 m 23.1243 0.03644 58.72046 14.06526 45.21645 30.62636 c 39.9449 36.8047 45.21938 39.58772 47.94554 38.32378 c 50.7373 36.80177 48.97624 33.93275 46.944 35.0684 c 45.52406 36.26384 43.94376 34.28992 46.41481 32.92245 c 51.81029 30.39748 53.895 42.50923 44.63625 40.12276 c 40.15192 38.43019 40.18835 34.39052 42.50342 32.04047 c 36.34256 32.53905 33.69366 30.13216 34.36864 24.5661 c 35.42267 17.6151 29.30847 16.23308 25.93356 19.3237 c 23.44939 22.53387 27.25145 26.05165 29.73999 24.10542 c 30.53598 23.33714 30.58992 21.86473 29.64961 22.03091 c 29.2181 22.16795 29.10728 23.17532 27.7996 22.8575 c 27.07942 22.62427 26.89282 21.09352 27.96725 20.46811 c 29.99803 19.22894 32.7869 21.59065 31.97923 23.69286 c 30.04759 28.21655 24.49904 26.99196 23.60976 22.52803 c 20.60951 23.91881 18.06558 23.42316 16.37595 20.818 c 14.33496 17.5218 8.9045 19.64005 11.29535 22.63008 c 13.33926 25.05885 16.12082 22.60677 12.40477 21.49005 c 14.93123 19.91559 16.82349 22.35019 15.1528 24.28766 c 13.68622 26.247 11.41344 25.27754 9.67569 23.02663 c 7.5866 25.97 5.10826 26.3476 2.72615 24.88829 c 1.40097 23.81676 2.40543 22.56157 4.14755 23.76866 c 5.82845 24.61568 7.54141 23.59518 8.51671 21.28595 c 9.9935 17.84544 12.45288 16.41821 15.66597 18.0131 c 17.78859 13.72412 25.36356 15.96774 22.34288 19.1444 c 21.4055 20.48706 19.7596 19.44762 20.82965 18.1691 c 21.17662 17.7434 20.80049 17.04071 19.1648 17.46642 c 16.17622 18.5525 20.15466 25.12009 23.48148 19.89517 c 28.4323 12.90628 35.6399 15.75198 36.17929 21.92886 c 41.03244 19.64442 44.28343 22.38516 43.70175 25.26732 c 42.7075 28.78218 39.46674 28.7501 38.48997 27.23688 c 37.51613 26.20035 38.79028 25.0399 40.01486 26.05455 c 40.61113 27.00508 41.80363 27.02112 41.77158 25.42622 c 41.05724 21.41571 35.9271 22.67236 36.0058 26.06914 c 36.07578 30.7532 41.3109 32.50844 44.36798 29.19475 c 53.55095 16.34532 25.12883 3.0498 1.08316 20.6795 c 0.03644 19.25081 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -33.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -33.854 Td[<00170015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -33.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -33.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400160011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -33.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -33.854 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.545 0 cm 0 G 0 g q 1 0 0 1 370.288 -59.198 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 1 j 25.77757 9.93665 m 17.37894 9.93227 7.9569 12.61179 0.0131 19.22311 c -0.0131 19.24496 l 0.00728 19.27267 l 1.07587 20.73051 l 1.10503 20.70865 l 13.11766 11.90036 26.22513 10.81865 35.17628 13.54189 c 39.65187 14.90352 43.08801 17.21565 44.83012 19.9841 c 46.57225 22.75108 46.62766 25.97 44.34029 29.17143 c 42.82121 30.81734 40.76567 31.20221 39.07895 30.59721 c 37.39366 29.9922 36.07724 28.39732 36.04224 26.06914 c 36.04224 26.06767 l 36.00288 24.38826 37.25226 23.24094 38.59784 23.00621 c 39.27136 22.88812 39.96677 23.00038 40.53824 23.3867 c 41.10971 23.7745 41.55728 24.43636 41.73512 25.4306 c 41.74242 25.82277 41.67535 26.11287 41.5631 26.31259 c 41.45085 26.51378 41.29633 26.62312 41.12137 26.65956 c 40.7744 26.731 40.33852 26.50066 40.04549 26.03561 c 40.04257 26.02977 l 40.03821 26.02686 l 39.4157 25.51079 38.76987 25.54286 38.40543 25.84901 c 38.22318 26.00208 38.11093 26.22221 38.10947 26.4715 c 38.108 26.7208 38.21443 26.99487 38.46228 27.25874 c 39.45943 28.79968 42.73811 28.80989 43.73676 25.27754 c 43.73676 25.27608 l 43.73819 25.27461 l 44.03123 23.81824 43.35625 22.39539 41.99754 21.62854 c 40.64612 20.86609 38.62262 20.75385 36.20845 21.87784 c 35.92125 18.80179 33.98376 16.54942 31.49377 15.94005 c 28.98921 15.3263 25.93356 16.37157 23.45232 19.87477 c 23.45085 19.87477 l 23.45085 19.87622 l 22.6228 21.17662 21.75975 21.73643 20.97835 21.83702 c 20.19841 21.93762 19.49426 21.579 18.98111 21.0221 c 18.4694 20.46664 18.1516 19.7144 18.14722 19.03796 c 18.14284 18.36298 18.44318 17.76819 19.17645 17.50139 c 19.98701 17.29001 20.47977 17.3629 20.72032 17.52763 c 20.83986 17.61073 20.89816 17.7157 20.90982 17.82358 c 20.92004 17.93146 20.88359 18.04517 20.80196 18.14575 c 20.52934 18.47086 20.42729 18.7843 20.44624 19.05254 c 20.46664 19.31932 20.60805 19.538 20.81361 19.67067 c 21.22618 19.93307 21.89534 19.84851 22.37204 19.1648 c 23.13014 18.36589 23.22926 17.60928 22.90416 17.00719 c 22.57907 16.40364 21.83849 15.95609 20.94191 15.74324 c 20.04388 15.53186 18.98549 15.55371 18.01747 15.89923 c 17.05821 16.24182 16.18788 16.90514 15.65138 17.96791 c 14.05067 17.18213 12.62782 17.13986 11.42365 17.72882 c 10.21217 18.32071 9.22375 19.54675 8.48317 21.27138 c 8.48317 21.27138 l 7.99771 22.42162 7.33002 23.24675 6.57777 23.67973 c 5.82698 24.11125 4.99455 24.155 4.16359 23.73659 c 3.72623 23.43335 3.33261 23.2832 3.00752 23.24821 c 2.68242 23.21178 2.42291 23.29048 2.26111 23.44794 c 2.09927 23.60538 2.04097 23.84155 2.10948 24.10106 c 2.17654 24.36055 2.36752 24.64484 2.70284 24.91599 c 2.70428 24.91745 l 2.7072 24.91891 l 3.90408 25.65219 5.13014 25.92627 6.31828 25.64345 c 7.49767 25.36356 8.63625 24.53548 9.67569 23.08348 c 10.54166 24.19289 11.53589 24.99179 12.50537 25.2717 c 13.48503 25.55305 14.43993 25.29794 15.18051 24.31097 c 15.18051 24.31097 l 16.0246 23.3313 15.97212 22.21606 15.38023 21.54837 c 14.7869 20.87921 13.65997 20.6649 12.38582 21.45944 c 12.3173 21.50171 l 12.39458 21.52504 l 13.31885 21.80203 13.83347 22.16357 14.05652 22.50034 c 14.2781 22.83856 14.21832 23.14908 13.98506 23.36339 c 13.52148 23.79199 12.33626 23.80948 11.32451 22.60677 c 11.32451 22.60677 l 11.32304 22.60677 11.32304 22.60677 11.32304 22.60677 c 10.73117 21.86618 10.62767 21.18828 10.8274 20.6343 c 11.02856 20.07886 11.53735 19.64297 12.1861 19.40097 c 13.48503 18.91551 15.33357 19.20415 16.34532 20.83693 c 16.34532 20.83693 l 16.34532 20.8384 l 17.1938 22.14609 18.26093 22.92896 19.49426 23.2074 c 20.71448 23.48293 22.09653 23.25989 23.58498 22.57614 c 24.04565 24.7979 25.65366 26.21783 27.39725 26.5167 c 29.15248 26.81847 31.04184 25.98167 32.01277 23.70743 c 32.01277 23.70598 l 32.01277 23.70598 l 32.83499 21.56877 30.00969 19.17937 27.94975 20.43602 c 27.94975 20.43602 27.94975 20.43602 27.9483 20.43602 c 27.9483 20.43602 27.9483 20.43748 27.9483 20.43748 c 27.40015 20.75676 27.17126 21.30928 27.17418 21.81079 c 27.17711 22.31082 27.40744 22.76859 27.7894 22.8925 c 27.7894 22.8925 l 27.79085 22.8925 l 28.45418 23.05432 28.82738 22.87646 29.07814 22.64174 c 29.2035 22.52367 29.29973 22.39392 29.39012 22.28603 c 29.48048 22.17961 29.56358 22.09798 29.6598 22.06737 c 29.88286 22.028 30.0403 22.08485 30.14528 22.20148 c 30.2517 22.31812 30.3071 22.5018 30.31 22.71756 c 30.31438 23.14908 30.10446 23.70161 29.71521 24.07773 c 28.48772 25.03699 26.93948 24.64922 25.99916 23.62434 c 25.05885 22.59802 24.73085 20.94044 25.96126 19.34848 c 27.63779 17.81337 29.9951 17.39206 31.79701 18.21281 c 33.60036 19.03358 34.85847 21.09644 34.33366 24.56027 c 34.33366 24.56174 l 34.33366 24.56174 l 33.99544 27.35059 34.48965 29.3595 35.84836 30.60449 c 37.1954 31.83783 39.38654 32.3131 42.4276 32.07837 c 41.30069 33.25485 40.72485 34.83078 40.98434 36.33382 c 41.24966 37.86308 42.37221 39.30783 44.62457 40.15773 c 44.62604 40.15773 l 44.62749 40.15773 l 46.94983 40.75693 48.56804 40.44785 49.60164 39.67812 c 50.6338 38.90982 51.07698 37.6867 51.05804 36.47086 c 51.03908 35.25356 50.55946 34.04355 49.74016 33.29129 c 48.9223 32.54051 47.75894 32.25331 46.40024 32.89038 c 46.39877 32.89038 l 46.39731 32.89038 l 45.77481 33.2359 45.40451 33.61932 45.22375 33.9867 c 45.04152 34.35406 45.05173 34.70541 45.18875 34.97365 c 45.3258 35.24188 45.58966 35.42703 45.91039 35.4664 c 46.23111 35.50577 46.60724 35.40079 46.96733 35.09612 c 46.9615 35.10048 l 47.96304 34.54066 48.88438 34.96637 49.22116 35.71423 c 49.5579 36.4621 49.31299 37.53653 47.9295 38.2917 c 46.58392 38.9142 44.59978 38.53807 43.61137 37.24352 c 43.11717 36.59769 42.86932 35.72153 43.07198 34.6194 c 43.27461 33.51872 43.92918 32.19208 45.24416 30.64969 c 45.24416 30.64969 l 45.2456 30.64969 l 48.6278 26.50066 48.93834 22.49889 47.13353 19.14293 c 45.32726 15.78697 41.41441 13.0783 36.36005 11.4878 c 33.20091 10.495 29.59421 9.93811 25.77757 9.93665 c 25.77757 10.00954 m 29.58838 10.011 33.18634 10.56644 36.3382 11.55777 c 41.38087 13.14244 45.27623 15.84529 47.06938 19.17792 c 48.86107 22.5091 48.55783 26.4715 45.18875 30.60303 c 43.86795 32.15126 43.20609 33.48811 43.00053 34.60628 c 42.79498 35.72589 43.0472 36.6254 43.55305 37.2887 c 44.56627 38.61389 46.581 38.9973 47.96158 38.3573 c 47.96158 38.35585 l 47.96304 38.35585 l 49.36984 37.58902 49.64102 36.46794 49.28676 35.68507 c 48.93396 34.90076 47.95866 34.4605 46.92651 35.03635 c 46.92358 35.03926 l 46.92067 35.04071 l 46.57225 35.33374 46.21799 35.42995 45.91913 35.39351 c 45.62173 35.35706 45.37973 35.1865 45.25291 34.94011 c 45.12608 34.69374 45.11586 34.36864 45.28789 34.01877 c 45.46136 33.66888 45.82 33.2942 46.4323 32.95454 c 47.76913 32.32912 48.89168 32.61049 49.69058 33.34525 c 50.49094 34.07999 50.96619 35.27396 50.98515 36.47086 c 51.00409 37.6692 50.56966 38.86754 49.5579 39.62126 c 48.54617 40.37204 46.95421 40.68257 44.6479 40.08777 c 42.41594 39.24513 41.31673 37.82373 41.05577 36.32216 c 40.79628 34.82059 41.37941 33.23444 42.52965 32.06671 c 42.59818 31.99673 l 42.5005 32.00401 l 39.4259 32.25331 37.23476 31.77513 35.89793 30.55055 c 34.56108 29.32596 34.06833 27.34767 34.40509 24.57195 c 34.40509 24.57048 l 34.93283 21.08478 33.66158 18.98111 31.82764 18.14575 c 29.99367 17.31189 27.60716 17.74193 25.90878 19.29745 c 25.90732 19.29892 l 25.90587 19.30183 l 24.65358 20.91858 24.9845 22.62427 25.94522 23.67245 c 26.90741 24.72209 28.50229 25.11864 29.76332 24.13458 c 29.76477 24.13312 l 29.76622 24.13167 l 30.17151 23.7395 30.38727 23.1724 30.38289 22.71756 c 30.37999 22.49013 30.32314 22.28896 30.1992 22.15192 c 30.07675 22.01633 29.88724 21.9522 29.64377 21.99448 c 29.64085 21.99593 l 29.63939 21.99593 l 29.51987 22.03383 29.42801 22.12859 29.3347 22.2394 c 29.24287 22.34872 29.14812 22.47702 29.02856 22.5878 c 28.78947 22.81087 28.45418 22.97852 27.80981 22.82253 c 27.47159 22.7132 27.25 22.28896 27.24707 21.80933 c 27.24416 21.33115 27.45992 20.80487 27.9862 20.50018 c 27.9862 20.49872 l 27.9862 20.49872 l 29.98636 19.2785 32.74023 21.6125 31.94571 23.67973 c 30.98499 25.92772 29.135 26.7412 27.41035 26.44527 c 25.68573 26.14932 24.08794 24.73958 23.6462 22.52075 c 23.636 22.47556 l 23.59518 22.4945 l 22.09943 23.18843 20.72177 23.41003 19.50885 23.13596 c 18.29738 22.86188 17.24773 22.09506 16.40656 20.79904 c 16.40656 20.79758 l 15.37587 19.13564 13.48941 18.83533 12.16132 19.33244 c 11.49654 19.58028 10.9688 20.0293 10.75888 20.60951 c 10.5504 21.18974 10.66411 21.89824 11.26619 22.65341 c 11.26765 22.65341 l 11.26765 22.65341 l 12.29834 23.87946 13.52586 23.8853 14.03464 23.41586 c 14.2883 23.18115 14.35391 22.82106 14.11627 22.46098 c 13.88739 22.11255 13.36696 21.7656 12.49516 21.4886 c 13.71536 20.76114 14.7694 20.96814 15.32483 21.59647 c 15.89339 22.23502 15.9517 23.30652 15.1251 24.26433 c 15.12366 24.26433 l 15.12366 24.2658 l 14.39764 25.23671 13.48358 25.47726 12.52577 25.20172 c 11.56796 24.9262 10.57082 24.12584 9.70485 23.00475 c 9.67422 22.9654 l 9.64653 23.00621 l 8.60564 24.47281 7.46997 25.29648 6.30225 25.57347 c 5.1345 25.85046 3.9318 25.58368 2.74657 24.85913 c 2.42146 24.59526 2.24214 24.32118 2.17946 24.0821 c 2.11678 23.84302 2.17072 23.63892 2.31212 23.50043 c 2.45354 23.36046 2.68971 23.28612 3.00023 23.31964 c 3.31076 23.35464 3.69562 23.49896 4.12714 23.79929 c 4.12859 23.80074 l 4.13152 23.80074 l 4.98143 24.22934 5.84448 24.18561 6.61423 23.74243 c 7.38396 23.29924 8.0604 22.45952 8.55023 21.30054 c 8.55023 21.30054 l 9.28644 19.58466 10.26611 18.3761 11.45572 17.79442 c 12.64677 17.21127 14.05067 17.2521 15.64993 18.04517 c 15.682 18.0612 l 15.69804 18.02913 l 16.22432 16.96637 17.08737 16.30887 18.04225 15.96774 c 18.99568 15.6266 20.04095 15.60475 20.92441 15.81467 c 21.80933 16.02313 22.5295 16.46487 22.84003 17.04218 c 23.152 17.61803 23.06598 18.33237 22.31665 19.1196 c 22.31519 19.12106 l 22.31374 19.12398 l 21.85306 19.78291 21.23056 19.84998 20.85297 19.60944 c 20.6649 19.48845 20.53662 19.29163 20.51913 19.0467 c 20.50163 18.80179 20.59494 18.50584 20.85735 18.19241 c 20.85735 18.19241 l 20.85735 18.19241 l 20.9492 18.0787 20.99583 17.94603 20.98273 17.81628 c 20.9696 17.68654 20.89671 17.56117 20.76114 17.46786 c 20.49144 17.28271 19.97972 17.21712 19.15605 17.43141 c 19.15459 17.43141 l 19.15167 17.43288 l 18.39214 17.7084 18.06995 18.34113 18.07433 19.03943 c 18.0787 19.73627 18.4038 20.5031 18.92863 21.07166 c 19.45198 21.64021 20.17944 22.01198 20.9871 21.90846 c 21.79475 21.80495 22.67674 21.22618 23.51062 19.91559 c 25.98022 16.42989 29.00378 15.40356 31.47629 16.01001 c 33.94879 16.61649 35.87459 18.8572 36.14284 21.93178 c 36.14722 21.98425 l 36.19533 21.9624 l 38.61389 20.8238 40.62572 20.93898 41.9611 21.6927 c 43.29501 22.44493 43.95396 23.83281 43.66676 25.25858 c 42.6769 28.75157 39.47693 28.6991 38.52058 27.21793 c 38.51913 27.215 l 38.5162 27.2121 l 38.2786 26.95842 38.17944 26.70038 38.18236 26.47296 c 38.18382 26.24408 38.28441 26.04436 38.45206 25.9044 c 38.7859 25.6245 39.388 25.58368 39.99008 26.08226 c 40.29478 26.56044 40.74962 26.81119 41.13596 26.731 c 41.3313 26.69019 41.50478 26.5648 41.6258 26.34904 c 41.74678 26.13329 41.81676 25.8286 41.80801 25.42477 c 41.80801 25.42331 l 41.80801 25.42041 l 41.62724 24.41011 41.16803 23.7264 40.57906 23.32693 c 39.99008 22.92749 39.27429 22.81378 38.58473 22.93477 c 37.20706 23.17387 35.93 24.35326 35.96936 26.0706 c 36.00435 28.42502 37.34119 30.05052 39.05415 30.66573 c 40.76859 31.28093 42.85767 30.88585 44.39424 29.21953 c 44.39569 29.2181 l 44.39714 29.21663 l 46.70055 25.99333 46.64659 22.7336 44.89136 19.94475 c 43.13611 17.15588 39.6854 14.83792 35.19669 13.47337 c 26.2295 10.7443 13.11475 11.82747 1.0919 20.62993 c 0.08598 19.2581 l 8.01083 12.67447 17.40518 10.00516 25.77757 10.00954 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -33.854 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -33.854 Td[<00170016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -33.854 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -33.854 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -33.854 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400160011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001300120011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -33.854 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 28.346 -91.941 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.194 0 cm 0 G 0 g q 1 0 0 1 27.071 -104.379 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 17.87186 23.95033 m 15.92903 23.97586 14.34724 22.74739 13.86758 20.97679 c 11.70663 22.06236 8.33508 19.14496 8.97292 17.37946 c 4.30403 15.25677 7.70364 10.4718 10.79709 12.39421 c 12.81645 13.85739 12.1799 15.93797 9.9641 15.97751 c 11.39793 16.54008 13.42877 15.94179 12.50519 13.29866 c 11.91455 11.63266 8.20114 10.05339 6.05678 12.47331 c 4.14584 13.92499 0.03188 10.74608 3.12022 8.1361 c 0.31635 2.16476 8.48561 0.03188 10.23071 4.40482 c 11.19128 7.15894 7.18956 8.97803 6.6895 5.67026 c 5.37047 8.1042 10.97313 10.96548 16.09998 6.40247 c 18.93703 3.43787 22.3864 2.82938 26.94301 4.03743 c 22.40297 3.87541 19.03015 4.84746 16.31557 9.43471 c 11.19 8.32106 12.5473 14.49648 15.34352 14.51306 c 16.35638 17.63713 20.48184 18.5352 22.48717 15.26314 c 25.92122 17.04396 30.67683 12.7093 27.13564 9.22166 c 30.79166 6.71884 34.68748 8.77774 36.58183 10.7805 c 39.00558 12.78711 41.5186 12.92488 43.77905 11.65944 c 44.76897 10.89278 47.11105 9.70258 49.83202 9.49721 c 48.26297 10.10059 46.77301 10.80348 44.80595 12.62894 c 42.53401 14.45694 39.41762 14.45694 36.03331 11.74236 c 30.26225 8.81728 29.62953 16.08467 33.58533 15.59865 c 35.14417 15.2389 35.57535 13.83698 34.46552 13.33308 c 34.72577 14.29237 34.26526 14.99272 33.09038 14.94296 c 30.3286 13.90204 32.56992 10.32254 35.89935 12.38274 c 38.07053 13.82166 36.97473 17.07967 34.01395 16.80925 c 35.54472 19.35927 32.20636 21.91566 30.21379 20.16931 c 29.84001 21.09543 28.5631 21.66437 27.54893 21.16302 c 26.42764 20.43465 27.08589 18.78777 26.41745 17.96242 c 23.27168 13.7311 18.56581 19.28911 23.26404 20.52394 c 19.50597 18.04535 25.44795 15.06798 26.20059 19.39626 c 26.67767 22.55478 22.68999 23.74878 21.60059 22.39276 c 20.33386 23.46686 19.03781 23.93375 17.87186 23.95033 c 19.15898 16.36531 m 17.91396 16.40486 16.61662 15.69304 15.74663 13.81274 c 13.21573 13.98239 12.90958 8.12332 16.64723 10.56621 c 19.98816 1.59454 33.7805 4.40482 38.41495 8.88106 c 39.8169 10.20265 42.2266 10.29193 44.18854 9.1515 c 45.9617 7.74701 49.51822 7.81845 51.6039 9.20126 c 49.93279 8.77646 47.97467 8.81601 45.26646 10.10059 c 42.5927 11.83165 40.69965 12.21817 38.83974 11.41579 c 37.01173 10.41312 36.33563 9.23442 34.47955 8.16925 c 31.07996 6.76985 28.211 7.11812 26.64323 8.75478 c 25.76305 7.58884 21.99348 8.71524 22.86859 11.05478 c 23.70413 13.70686 26.5667 12.67741 25.93398 10.9489 c 25.57935 12.15694 24.33813 12.40569 23.73859 10.82898 c 23.42221 9.97813 25.55255 8.10164 27.12671 10.37103 c 28.6358 11.98473 25.91484 16.19055 22.25754 14.4123 c 21.59676 15.53487 20.40402 16.32576 19.15898 16.36531 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -91.941 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -91.941 Td[<00170017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -91.941 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -91.941 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200190011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -91.941 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -91.941 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -24.91 0 cm 0 G 0 g q 1 0 0 1 140.366 -104.919 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 17.87312 23.98222 m 15.92776 24.00775 14.34213 22.78313 13.84845 21.01761 c 12.75777 21.54318 11.38007 21.08395 10.35063 20.27263 c 9.83144 19.86316 9.39899 19.36308 9.1362 18.85411 c 8.87851 18.35405 8.78668 17.84253 8.9372 17.39604 c 7.78018 16.86409 7.11429 16.16759 6.82344 15.44684 c 6.53004 14.721 6.61551 13.97346 6.94589 13.35478 c 7.6067 12.11867 9.25229 11.39665 10.81367 12.36743 c 10.81496 12.36743 l 10.81622 12.3687 l 11.83292 13.10475 12.18756 14.00409 12.00005 14.72739 c 11.82144 15.41495 11.14279 15.91884 10.11844 15.98772 c 10.79837 16.21223 11.5765 16.18929 12.09953 15.81422 c 12.38017 15.61395 12.58684 15.31673 12.66847 14.9047 c 12.75012 14.49394 12.7042 13.9658 12.47456 13.30885 c 12.18628 12.49243 11.11728 11.68367 9.85567 11.38516 c 8.59406 11.08667 7.14363 11.29333 6.07973 12.49498 c 6.07846 12.49626 l 6.0759 12.49881 l 5.58861 12.86876 4.96355 12.94275 4.34996 12.80624 c 3.73764 12.66975 3.13554 12.32405 2.69034 11.8495 c 2.24513 11.37497 1.95683 10.77031 1.97597 10.11844 c 1.99382 9.47041 2.32039 8.78029 3.08322 8.12843 c 2.39055 6.63847 2.3727 5.38194 2.77324 4.40608 c 3.17636 3.42638 3.9966 2.72987 4.95844 2.3612 c 5.92029 1.99255 7.02371 1.94917 7.99959 2.2732 c 8.9742 2.5972 9.81995 3.29115 10.26006 4.39333 c 10.26006 4.39333 l 10.26006 4.39459 l 10.74608 5.78633 9.97685 6.94846 9.02011 7.34009 c 8.54047 7.53526 8.01234 7.54036 7.57225 7.28268 c 7.15256 7.03775 6.82217 6.54663 6.68312 5.77995 c 6.41779 6.34763 6.51474 6.92932 6.90764 7.4332 c 7.32095 7.96515 8.05188 8.40652 8.98439 8.62976 c 10.85068 9.07625 13.5219 8.654 16.07956 6.37823 c 18.92299 3.40724 22.38893 2.79749 26.95195 4.0068 c 27.22493 4.07951 l 26.94174 4.0693 l 24.6749 3.98767 22.70148 4.19049 20.95766 4.98395 c 19.21385 5.77742 17.69836 7.1615 16.34363 9.4513 c 16.33087 9.47041 l 16.30919 9.46532 l 15.03354 9.18849 14.16737 9.36581 13.62776 9.78168 c 13.08688 10.19626 12.8662 10.85323 12.89043 11.54845 c 12.91469 12.24496 13.18385 12.97845 13.62012 13.53592 c 14.05638 14.09467 14.65594 14.47736 15.34352 14.48119 c 15.36649 14.48119 l 15.37413 14.50287 l 15.87674 16.05406 17.15111 17.0516 18.54796 17.2557 c 19.9448 17.45982 21.46281 16.87302 22.46037 15.24657 c 22.47568 15.22105 l 22.50247 15.23508 l 24.2042 16.11784 26.23758 15.48384 27.40352 14.19672 c 27.98778 13.5525 28.35262 12.74756 28.35516 11.88777 c 28.35645 11.02672 27.99414 10.11208 27.11395 9.24463 c 27.08589 9.21783 l 27.11778 9.19615 l 28.95343 7.93835 30.85287 7.82611 32.52782 8.28024 c 34.20146 8.73436 35.65317 9.75233 36.60352 10.75755 c 39.0196 12.7565 41.51349 12.89171 43.76375 11.63138 c 43.76375 11.63138 43.76375 11.63138 43.76375 11.63138 c 44.76259 10.8596 47.1034 9.67198 49.82947 9.46532 c 50.04634 9.45001 l 49.8435 9.52654 l 48.27701 10.12994 46.79216 10.82898 44.82765 12.65189 c 44.82637 12.65317 l 44.82637 12.65317 l 43.68466 13.57164 42.32864 14.03215 40.83487 13.92116 c 39.34235 13.80891 37.71333 13.1277 36.01927 11.77042 c 34.58162 11.04202 33.46797 10.95018 32.6694 11.20912 c 31.87085 11.4681 31.38228 12.07784 31.1922 12.76414 c 31.00214 13.45044 31.11313 14.21329 31.51366 14.77075 c 31.91295 15.32948 32.6018 15.68668 33.58022 15.56676 c 34.35072 15.38817 34.83675 14.95444 34.9962 14.50925 c 35.07657 14.28728 35.074 14.0615 34.986 13.86247 c 34.90564 13.67879 34.74362 13.52061 34.51018 13.39943 c 34.61606 13.85356 34.56631 14.2541 34.34052 14.53603 c 34.10452 14.83452 33.68355 15.00037 33.08911 14.97485 c 33.084 14.97485 l 33.07889 14.9723 l 32.3824 14.70952 31.9946 14.28345 31.86575 13.82294 c 31.73691 13.36243 31.86449 12.87003 32.18594 12.47968 c 32.82886 11.69897 34.24228 11.32011 35.91594 12.35594 c 35.91722 12.35594 l 35.91722 12.35594 l 37.01428 13.08305 37.28854 14.27452 36.91096 15.24783 c 36.53847 16.20969 35.52687 16.95467 34.06497 16.8424 c 34.7972 18.11295 34.3469 19.38733 33.45522 20.12466 c 32.56226 20.86581 31.2292 21.06992 30.22398 20.2165 c 29.8247 21.14008 28.55415 21.69498 27.53491 21.1911 c 27.53363 21.1911 l 27.53236 21.18983 l 26.9596 20.81862 26.84096 20.21013 26.78227 19.60292 c 26.72232 18.99443 26.71722 18.38339 26.3932 17.98283 c 26.3932 17.98157 l 26.39194 17.98157 l 25.60995 16.92915 24.73486 16.48904 23.93503 16.43547 c 23.1352 16.3819 22.4068 16.71484 21.92206 17.21489 c 21.4373 17.71623 21.1962 18.38339 21.36331 18.99953 c 21.52022 19.57867 22.05855 20.11063 23.09183 20.42825 c 22.27924 19.84146 21.9616 19.22916 21.99986 18.69083 c 22.04196 18.11678 22.4642 17.63841 23.02805 17.37817 c 23.5906 17.11795 24.29604 17.0733 24.90962 17.36926 c 25.52322 17.6652 26.04239 18.30174 26.23248 19.39114 c 26.23248 19.39114 l 26.23248 19.39114 l 26.47229 20.98445 25.58446 22.08789 24.50269 22.61601 c 23.96054 22.88007 23.36992 23.00253 22.84435 22.97319 c 22.33026 22.94385 21.87996 22.76654 21.59804 22.43358 c 20.33386 23.49748 19.04034 23.96692 17.87312 23.98222 c 17.87186 23.91846 m 19.02887 23.90314 20.31856 23.4388 21.58017 22.36853 c 21.6044 22.34683 l 21.62482 22.37234 l 21.89015 22.70274 22.33409 22.88007 22.84818 22.90941 c 23.36098 22.93747 23.94269 22.81883 24.47462 22.55861 c 25.53853 22.03941 26.40596 20.9666 26.16869 19.40137 c 25.98245 18.32727 25.4773 17.7124 24.88283 17.42667 c 24.28711 17.1409 23.6008 17.183 23.05354 17.43686 c 22.50757 17.68944 22.1032 18.14995 22.06364 18.69594 c 22.02411 19.24191 22.34811 19.881 23.28189 20.49715 c 23.44263 20.60303 l 23.25638 20.55455 l 22.07513 20.24457 21.47557 19.65778 21.30208 19.01611 c 21.1286 18.37445 21.3799 17.68433 21.87613 17.17152 c 22.37363 16.65744 23.1186 16.31683 23.93886 16.37169 c 24.75911 16.42781 25.65205 16.87941 26.44295 17.94202 c 26.44295 17.9433 l 26.7861 18.36809 26.7861 18.99188 26.84479 19.59654 c 26.90474 20.19992 27.017 20.77905 27.56552 21.13496 c 28.56055 21.6261 29.81834 21.06354 30.18445 20.15784 c 30.20103 20.11572 l 30.23546 20.14507 l 31.219 21.00742 32.53291 20.80713 33.41568 20.07619 c 34.29715 19.34396 34.74489 18.08745 33.98717 16.82582 c 33.95526 16.77225 l 34.01778 16.77736 l 35.48605 16.9113 36.48488 16.1727 36.85228 15.22488 c 37.21967 14.27835 36.95688 13.12134 35.88277 12.40952 c 34.22697 11.38516 32.85565 11.7666 32.2357 12.5205 c 31.92572 12.89682 31.80325 13.36626 31.92697 13.80507 c 32.04944 14.24391 32.41682 14.6534 33.09802 14.91107 c 33.67462 14.93404 34.07135 14.77458 34.29204 14.49648 c 34.51273 14.21838 34.56375 13.81401 34.4349 13.34074 c 34.41705 13.27696 l 34.47955 13.30374 l 34.76276 13.4326 34.95027 13.62012 35.04468 13.83698 c 35.13908 14.05257 35.14035 14.29494 35.05615 14.53093 c 34.88777 15.00163 34.38005 15.44812 33.59299 15.62927 c 33.5917 15.63052 l 33.58916 15.63052 l 32.5916 15.75299 31.87468 15.38434 31.46136 14.80902 c 31.04933 14.23242 30.93709 13.45172 31.13097 12.74756 c 31.32614 12.04341 31.83131 11.4145 32.65027 11.14917 c 33.47052 10.88385 34.60074 10.9795 36.04861 11.7143 c 36.05116 11.71556 l 36.05373 11.71812 l 37.74268 13.07158 39.36147 13.74768 40.83995 13.85739 c 42.31844 13.96709 43.65659 13.51424 44.78682 12.60469 c 46.66585 10.86089 48.115 10.14397 49.6088 9.55588 c 46.9937 9.80846 44.75493 10.94507 43.79945 11.68495 c 43.79692 11.68622 l 43.79564 11.6875 l 41.525 12.95805 38.99408 12.81772 36.56142 10.80475 c 36.56013 10.80348 l 36.55887 10.8022 l 35.61488 9.80464 34.17212 8.79305 32.51123 8.34274 c 30.85927 7.89499 28.99553 8.00215 27.18411 9.22932 c 28.05283 10.09804 28.42021 11.01906 28.41766 11.88777 c 28.4164 12.76543 28.04263 13.58566 27.45071 14.2388 c 26.27202 15.53998 24.22461 16.18034 22.49864 15.30142 c 21.4896 16.92915 19.95245 17.52487 18.53902 17.31822 c 17.12433 17.11157 15.83592 16.10379 15.32056 14.5424 c 14.62022 14.52965 14.00919 14.13931 13.57036 13.57547 c 13.12515 13.00653 12.85089 12.26155 12.82666 11.55101 c 12.80241 10.84047 13.02948 10.16054 13.58823 9.73065 c 14.1444 9.30331 15.02588 9.12854 16.30025 9.40025 c 17.65755 7.11429 19.18068 5.72255 20.93214 4.92654 c 22.60962 4.16243 24.50397 3.95195 26.65088 4.00552 c 22.24478 2.90082 18.89238 3.53099 16.12294 6.42416 c 16.12166 6.42545 l 16.12166 6.42545 l 13.55124 8.71394 10.85832 9.14256 8.97037 8.691 c 8.02638 8.4652 7.28268 8.01874 6.85788 7.47275 c 6.43181 6.92549 6.32593 6.27364 6.66144 5.65495 c 6.70609 5.57204 l 6.72139 5.66515 l 6.84512 6.4854 7.18445 6.98163 7.60542 7.22781 c 8.0251 7.47403 8.53154 7.4702 8.99586 7.2814 c 9.92326 6.90126 10.67592 5.77742 10.20137 4.41501 c 10.20137 4.41501 10.20137 4.41501 10.20009 4.41501 c 9.76764 3.33072 8.93846 2.65207 7.97917 2.33315 c 7.01863 2.01424 5.9292 2.05762 4.98013 2.42117 c 4.03232 2.78473 3.22739 3.46848 2.83192 4.43031 c 2.43648 5.39345 2.4505 6.63593 3.14828 8.12206 c 3.15977 8.14374 l 3.14063 8.16032 l 2.37396 8.80835 2.05762 9.487 2.03847 10.11972 c 2.02061 10.75244 2.29999 11.3418 2.73625 11.80614 c 3.17253 12.27046 3.76443 12.61107 4.364 12.74373 c 4.96355 12.87769 5.5682 12.8037 6.03764 12.44778 c 6.03764 12.44778 6.03764 12.44778 6.03764 12.44778 c 7.11812 11.23337 8.59406 11.02032 9.87097 11.32266 c 11.14917 11.62498 12.23347 12.43758 12.53453 13.28844 c 12.53453 13.28844 l 12.76671 13.95305 12.81519 14.49138 12.73099 14.91745 c 12.64679 15.34352 12.42867 15.65733 12.13652 15.86655 c 11.55356 16.28494 10.67719 16.29134 9.95262 16.00685 c 9.80338 15.94818 l 9.9641 15.94562 l 11.06114 15.9265 11.75894 15.40347 11.93753 14.71207 c 12.1174 14.0194 11.78062 13.14685 10.77924 12.41972 c 9.24718 11.46938 7.64752 12.17863 7.00204 13.38539 c 6.67929 13.9875 6.59637 14.71463 6.8834 15.4226 c 7.16914 16.1306 7.82483 16.822 8.98567 17.35011 c 9.01245 17.36287 l 9.00226 17.38966 l 8.8479 17.82083 8.93593 18.32472 9.19232 18.82477 c 9.45001 19.32355 9.87735 19.81723 10.39017 20.22289 c 11.41705 21.03165 12.78966 21.48323 13.85356 20.94873 c 13.888 20.93086 l 13.89821 20.96915 l 14.37402 22.72571 15.94179 23.94395 17.87186 23.91846 c 19.16026 16.3972 m 17.9063 16.43675 16.60004 15.71857 15.72621 13.84207 c 15.09221 13.87651 14.59471 13.53847 14.26814 13.05116 c 13.93646 12.5575 13.77701 11.91202 13.81401 11.33542 c 13.85228 10.75883 14.08955 10.2473 14.56027 10.03809 c 15.02588 9.83144 15.7109 9.92838 16.63193 10.52156 c 17.47258 8.29044 18.95999 6.78644 20.79182 5.86032 c 22.63387 4.9291 24.82033 4.5783 27.0476 4.64845 c 31.49963 4.79005 36.11111 6.61168 38.43663 8.85811 c 38.43791 8.85811 l 39.82709 10.16692 42.22148 10.25877 44.17323 9.12344 c 45.06746 8.41673 46.40436 8.08379 47.77951 8.09909 c 49.15593 8.1144 50.5719 8.47923 51.62177 9.17447 c 51.77739 9.27779 l 51.59625 9.23187 l 49.93153 8.80835 47.98361 8.84663 45.28177 10.12866 c 45.2805 10.12866 45.2805 10.12866 45.2805 10.12866 c 43.94362 10.99483 42.79935 11.5255 41.7546 11.73979 c 40.70856 11.95284 39.76202 11.84824 38.82698 11.44511 c 38.82571 11.44386 l 38.82443 11.44386 l 36.99132 10.43736 36.31522 9.25993 34.46552 8.19733 c 31.07484 6.80302 28.22249 7.15256 26.6662 8.77646 c 26.64069 8.80324 l 26.61774 8.77391 l 26.40596 8.49327 26.01561 8.34656 25.55766 8.32489 c 25.09969 8.30319 24.57796 8.40652 24.11107 8.61955 c 23.64418 8.83133 23.23341 9.1515 22.99359 9.56099 c 22.75378 9.9692 22.68233 10.4667 22.89793 11.0433 c 22.8992 11.04457 l 22.8992 11.04584 l 23.3138 12.35976 24.22078 12.75267 24.94662 12.61362 c 25.3089 12.54346 25.62527 12.34064 25.81279 12.04977 c 25.98627 11.78062 26.04239 11.43492 25.92632 11.0484 c 25.73369 11.60332 25.35226 11.949 24.93004 11.96431 c 24.48227 11.98218 24.01157 11.63647 23.70924 10.84047 c 23.70924 10.84047 l 23.62503 10.61212 23.70413 10.32637 23.88783 10.06104 c 24.07024 9.7957 24.3611 9.54951 24.7119 9.40025 c 25.41223 9.10431 26.35748 9.20891 27.14967 10.34935 c 27.53491 10.76138 27.64973 11.33798 27.54767 11.93881 c 27.44688 12.53963 27.13054 13.16599 26.65344 13.68518 c 25.70053 14.71971 24.09831 15.3282 22.26775 14.45056 c 21.59932 15.5693 20.40913 16.35765 19.16026 16.3972 c 19.15771 16.33342 m 20.39 16.29387 21.57509 15.51064 22.23076 14.3957 c 22.24478 14.37148 l 22.27158 14.38423 l 24.0881 15.26697 25.66481 14.66487 26.60623 13.64178 c 27.07695 13.13153 27.38693 12.51413 27.48517 11.9286 c 27.58467 11.3418 27.47241 10.78816 27.10374 10.39272 c 27.10248 10.39145 l 27.1012 10.38889 l 26.31923 9.26376 25.41478 9.1719 24.73613 9.45894 c 24.3968 9.60309 24.11617 9.84291 23.94012 10.09804 c 23.76282 10.35188 23.6952 10.61978 23.7692 10.8175 c 24.06642 11.5982 24.51544 11.91711 24.92747 11.90181 c 25.33952 11.88524 25.72859 11.53442 25.90335 10.93997 c 25.93143 10.84685 l 25.96458 10.93742 l 26.12532 11.3788 26.06409 11.77808 25.86636 12.08423 c 25.66864 12.39038 25.33696 12.60342 24.9581 12.67613 c 24.20163 12.82028 23.26021 12.40186 22.83925 11.06625 c 22.61728 10.47308 22.68999 9.95262 22.93875 9.52782 c 23.1875 9.10431 23.60847 8.77774 24.08427 8.56088 c 24.56137 8.3453 25.09076 8.23943 25.56021 8.2611 c 26.01561 8.28279 26.4136 8.4282 26.64452 8.71269 c 28.22887 7.0824 31.10037 6.74435 34.49232 8.13991 c 34.49359 8.14119 l 34.49614 8.14119 l 36.35732 9.21019 37.03342 10.3876 38.85378 11.38644 c 39.77861 11.78572 40.70856 11.88905 41.74184 11.6773 c 42.7764 11.46553 43.91556 10.93869 45.24988 10.07379 c 45.25116 10.07254 l 45.25371 10.07124 l 47.8688 8.83133 49.78484 8.76115 51.42276 9.13875 c 50.40352 8.51624 49.07813 8.17691 47.77951 8.16287 c 46.41327 8.14757 45.0866 8.48051 44.20895 9.17574 c 44.2064 9.1783 l 44.20512 9.1783 l 42.23297 10.3251 39.80795 10.23836 38.39326 8.90404 c 38.39326 8.90404 l 38.39326 8.90404 l 36.08434 6.6742 31.48178 4.85255 27.04506 4.71223 c 24.8267 4.64209 22.64917 4.99161 20.81989 5.91644 c 18.99188 6.84131 17.50957 8.34148 16.67657 10.57768 c 16.66382 10.61469 l 16.62938 10.59299 l 15.7007 9.9845 15.02971 9.89903 14.58705 10.09549 c 14.14313 10.29323 13.9148 10.77669 13.87779 11.33925 c 13.8408 11.90053 13.99898 12.5358 14.32043 13.01546 c 14.64192 13.49637 15.1241 13.82294 15.74408 13.78084 c 15.76575 13.77957 l 15.77597 13.7987 l 16.64214 15.67136 17.92543 16.37297 19.15771 16.33342 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -91.941 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -91.941 Td[<00170018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -91.941 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -91.941 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200190011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -91.941 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -91.941 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.513 0 cm 0 G 0 g q 1 0 0 1 256.299 -103.741 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 38.38434 21.64397 m 36.96964 21.62993 35.66591 20.54689 35.52814 18.74185 c 33.2103 19.63098 31.76244 18.28644 32.10684 16.25305 c 33.02277 13.78723 35.51155 16.37807 37.02321 14.49648 c 37.81538 13.26292 36.32797 11.82018 35.33043 13.04863 c 34.6403 14.01045 32.58394 14.76564 31.09526 14.59726 c 31.81982 16.8386 30.67812 19.30568 27.7824 18.91023 c 23.43752 17.98923 26.85117 11.62627 29.56575 16.15228 c 29.9982 15.58844 29.81068 14.43143 28.98917 13.76553 c 25.46709 10.68356 20.51247 17.4764 16.05914 15.37413 c 23.07013 15.50807 23.27551 10.12738 28.19188 11.5931 c 27.23259 6.0083 35.33426 6.76349 33.3991 10.94635 c 31.94228 8.33765 29.54533 10.68102 31.2139 11.9911 c 33.09676 13.29355 35.9925 11.66072 35.4312 8.28407 c 34.76276 4.44052 29.63591 4.5043 23.95927 10.38377 c 14.78479 17.92416 8.01746 15.48766 0.03188 7.39621 c 7.14618 12.68506 14.05257 17.50064 22.92216 8.62976 c 28.86414 1.42616 34.9911 0.03188 39.69952 3.63814 c 43.38998 6.64613 43.50224 12.71695 47.96829 12.21689 c 49.59093 12.07019 49.58327 9.22166 47.85986 9.11707 c 46.26657 9.05328 46.7424 10.88638 47.84967 10.84174 c 47.29349 11.40047 46.4694 11.49998 45.97572 10.47435 c 44.52914 7.0301 51.27733 5.66386 50.27086 11.55867 c 51.7034 12.69144 50.37291 15.68028 47.93002 14.73886 c 48.11755 16.26707 46.15814 17.32843 43.15654 13.8306 c 42.03268 12.58173 38.04118 13.08305 37.87662 15.94307 c 37.69675 18.86177 41.3719 18.96509 41.7597 17.40369 c 42.20236 15.79128 40.74046 14.89449 39.89088 15.66243 c 41.6806 16.06425 40.9165 17.42027 39.55283 16.98782 c 38.43663 16.58345 38.55782 14.54495 41.11168 14.22604 c 44.84167 13.86504 44.97435 19.80447 41.38849 19.57358 c 40.65117 21.01889 39.48393 21.65416 38.38434 21.64397 c 38.9775 12.35085 m 39.57324 12.3636 40.28505 12.19522 41.0734 11.75894 c 42.63863 10.81622 41.59514 7.04158 38.65349 6.42416 c 40.7953 7.97536 41.44078 9.91179 39.77861 11.22699 c 40.13835 9.79062 38.76192 8.38101 37.37784 10.15417 c 36.69281 11.09814 37.45438 12.31639 38.9775 12.35085 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -91.941 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -91.941 Td[<00170019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -91.941 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -91.941 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200180011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -91.941 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -91.941 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.517 0 cm 0 G 0 g q 1 0 0 1 370.266 -103.408 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 38.38434 21.67586 m 36.96452 21.66182 35.657 20.57751 35.50262 18.78267 c 34.35455 19.21257 33.41185 19.10031 32.79953 18.61812 c 32.18083 18.13081 31.90146 17.2723 32.07623 16.24796 c 32.07623 16.2454 l 32.0775 16.24158 l 32.30841 15.61905 32.6439 15.30907 33.03807 15.17259 c 33.43352 15.03609 33.88129 15.0718 34.34563 15.1241 c 34.80867 15.1764 35.28833 15.2453 35.74246 15.18661 c 36.1966 15.12666 36.62521 14.94168 36.9977 14.47864 c 37.38422 13.87398 37.21329 13.22339 36.82675 12.87259 c 36.63412 12.69653 36.38794 12.59703 36.12898 12.6149 c 35.87129 12.63277 35.60085 12.76671 35.35593 13.06903 c 35.00386 13.5576 34.31245 13.9875 33.52281 14.27707 c 32.74722 14.56027 31.87723 14.70569 31.1348 14.63042 c 31.48306 15.74663 31.37973 16.91385 30.82353 17.7596 c 30.25972 18.61684 29.23535 19.14114 27.77856 18.94212 c 27.7773 18.94212 l 27.77602 18.94086 l 26.6815 18.7087 26.0692 18.13081 25.81662 17.46492 c 25.56404 16.80031 25.66992 16.05023 25.99902 15.47235 c 26.32814 14.89449 26.88432 14.48628 27.53236 14.51178 c 28.17146 14.53859 28.88966 14.99272 29.5632 16.0936 c 29.75072 15.82062 29.80684 15.42134 29.71628 15.0042 c 29.62315 14.56793 29.3744 14.11761 28.97002 13.78976 c 28.96875 13.78976 l 28.96875 13.78976 l 28.09492 13.02565 27.13818 12.87387 26.11513 13.04352 c 25.09204 13.21317 24.00392 13.70558 22.88644 14.23114 c 21.76897 14.75545 20.62088 15.3129 19.47025 15.60757 c 18.32088 15.90097 17.1677 15.9316 16.0464 15.40219 c 15.91118 15.33969 l 16.05914 15.34224 l 19.55699 15.40985 21.35056 14.10358 22.89282 12.95805 c 23.66331 12.38657 24.3713 11.85333 25.19792 11.55484 c 26.01308 11.26016 26.94556 11.2002 28.15742 11.55228 c 27.93164 10.17458 28.25565 9.17574 28.85011 8.52643 c 29.45094 7.86948 30.3222 7.56842 31.16159 7.5748 c 32.00098 7.58244 32.81229 7.89627 33.29193 8.47668 c 33.77156 9.05838 33.91573 9.90543 33.42842 10.95909 c 33.40163 11.0165 l 33.3723 10.96165 l 33.01001 10.3149 32.59286 9.97813 32.1987 9.85567 c 31.8058 9.73193 31.43202 9.81868 31.15395 10.02533 c 30.87457 10.23071 30.69087 10.556 30.67812 10.90936 c 30.66536 11.26143 30.82227 11.64285 31.23175 11.96431 c 31.23302 11.96559 l 32.16298 12.60852 33.34169 12.52689 34.2206 11.86609 c 35.09952 11.20659 35.67867 9.96791 35.40057 8.28915 c 35.23346 7.33498 34.79337 6.62698 34.1377 6.18945 c 33.482 5.75316 32.60945 5.5848 31.57745 5.71873 c 29.51344 5.98788 26.81673 7.46892 23.98222 10.40547 c 23.98094 10.40675 l 23.97968 10.40802 l 19.38733 14.18268 15.392 15.46342 11.54463 14.78351 c 7.69727 14.10358 4.00426 11.46681 0.00891 7.41916 c 0.05101 7.3707 l 3.60753 10.01512 7.11046 12.53708 10.82515 13.29227 c 14.53986 14.04617 18.47014 13.0384 22.8992 8.60808 c 22.8992 8.60808 22.8992 8.60681 22.90048 8.60681 c 25.87274 5.00308 28.89476 2.8498 31.76497 2.04996 c 34.63647 1.24886 37.3587 1.80502 39.71994 3.61263 c 39.71994 3.61263 l 39.71994 3.61389 l 41.57346 5.12428 42.5251 7.39876 43.57112 9.22678 c 44.09415 10.14142 44.64014 10.94379 45.33153 11.48468 c 46.02165 12.02682 46.85593 12.30875 47.96574 12.185 c 47.96574 12.185 l 47.96574 12.185 l 48.36247 12.14929 48.65715 11.95029 48.85233 11.66708 c 49.04877 11.3839 49.14444 11.01778 49.13806 10.65167 c 49.13042 10.28555 49.0207 9.922 48.80768 9.64392 c 48.59464 9.36708 48.28084 9.17447 47.85986 9.14896 c 47.46696 9.13365 47.20801 9.23442 47.05367 9.38878 c 46.89929 9.54312 46.84572 9.75362 46.8738 9.96791 c 46.92992 10.39781 47.3126 10.83154 47.84967 10.80984 c 47.93002 10.80603 l 47.87262 10.86472 l 47.58942 11.14789 47.23607 11.31883 46.88654 11.28311 c 46.53702 11.24869 46.1977 11.00758 45.94766 10.48839 c 45.94766 10.4871 l 45.9464 10.48582 l 45.58156 9.61711 45.73335 8.87086 46.15433 8.34148 c 46.574 7.81335 47.25903 7.50081 47.95808 7.48296 c 48.65715 7.46509 49.37279 7.74318 49.84732 8.39888 c 50.32059 9.05202 50.55278 10.07762 50.304 11.54718 c 51.02094 12.1276 51.04388 13.16599 50.5821 13.94286 c 50.1216 14.7159 49.17378 15.22871 47.95937 14.78094 c 47.99509 15.1509 47.91216 15.4966 47.71062 15.75299 c 47.5014 16.02089 47.16974 16.19182 46.74112 16.20076 c 45.8826 16.22116 44.6363 15.60374 43.13231 13.851 c 42.58505 13.24251 41.31578 13.05244 40.16641 13.37645 c 39.01578 13.70047 37.99014 14.52965 37.90851 15.94435 c 37.90851 15.94562 l 37.72992 18.83752 41.35277 18.91151 41.7291 17.39604 c 41.7291 17.39604 l 41.7291 17.39476 l 41.9485 16.59875 41.69719 15.98643 41.29027 15.66498 c 40.89992 15.35628 40.3718 15.32437 39.96486 15.65477 c 40.3718 15.75682 40.65372 15.90608 40.80934 16.0783 c 40.9739 16.26326 41.00835 16.4712 40.93436 16.64978 c 40.78766 17.00696 40.23657 17.23787 39.5439 17.01843 c 39.54262 17.01843 l 39.54262 17.01717 l 38.96858 16.80925 38.71216 16.1778 38.92648 15.56421 c 39.14078 14.95062 39.82326 14.35489 41.10785 14.19415 c 41.10912 14.19415 l 41.10912 14.19415 l 42.05055 14.10358 42.76874 14.41101 43.25604 14.92 c 43.74333 15.42899 43.99974 16.13696 44.02525 16.85007 c 44.05205 17.56187 43.84666 18.2788 43.40784 18.80435 c 42.97157 19.3261 42.30185 19.65523 41.40762 19.60419 c 40.66519 21.04567 39.49286 21.68605 38.38434 21.67586 c 38.38434 21.61206 m 39.47246 21.62227 40.6282 20.99593 41.36043 19.55954 c 41.37062 19.5404 l 41.39104 19.54169 l 42.2789 19.59908 42.93074 19.27634 43.3581 18.76482 c 43.78671 18.25328 43.987 17.55038 43.96147 16.85262 c 43.93724 16.15355 43.68466 15.4596 43.21011 14.96338 c 42.73558 14.46841 42.03908 14.16864 41.1155 14.25795 c 39.84749 14.41612 39.19182 14.99908 38.98643 15.58588 c 38.78107 16.17142 39.02216 16.76077 39.56303 16.9572 c 40.23402 17.17024 40.74683 16.93936 40.87569 16.62555 c 40.93945 16.46864 40.91394 16.29134 40.76086 16.12166 c 40.60907 15.95201 40.32715 15.79256 39.88449 15.69304 c 39.82454 15.68028 l 39.86919 15.6382 l 40.30545 15.24402 40.90375 15.27719 41.3298 15.61523 c 41.75716 15.95328 42.01483 16.5962 41.7916 17.41135 c 41.79033 17.41135 l 41.39104 19.01868 37.66359 18.886 37.84473 15.94052 c 37.92892 14.49648 38.98134 13.64435 40.14856 13.31523 c 41.31578 12.98611 42.60417 13.1698 43.18077 13.80891 c 43.18077 13.80891 l 43.18077 13.81018 l 44.67839 15.55528 45.91322 16.15611 46.73857 16.13696 c 47.15187 16.12805 47.46313 15.96603 47.66087 15.71346 c 47.85986 15.46216 47.94533 15.11772 47.89941 14.74269 c 47.89304 14.69038 l 47.94151 14.70952 l 49.15083 15.17513 50.0744 14.66998 50.52725 13.90968 c 50.97884 13.15068 50.95331 12.1378 50.25171 11.5829 c 50.2364 11.57143 l 50.24023 11.55356 l 50.49026 10.08528 50.25809 9.07497 49.79631 8.43587 c 49.33324 7.79805 48.64056 7.52888 47.95937 7.54547 c 47.27818 7.56332 46.60973 7.86948 46.20407 8.38101 c 45.79713 8.89255 45.64789 9.60947 46.00507 10.4616 c 46.00507 10.4616 46.00507 10.4616 46.00635 10.4616 c 46.24872 10.96677 46.56891 11.18745 46.89293 11.22061 c 47.19653 11.24995 47.50778 11.10197 47.77057 10.8596 c 47.24501 10.83537 46.86868 10.41312 46.81128 9.97685 c 46.78065 9.74597 46.83934 9.51378 47.009 9.34285 c 47.17867 9.17319 47.45676 9.06859 47.86115 9.08516 c 47.86241 9.08516 l 47.86241 9.08516 l 48.30252 9.11195 48.63545 9.31479 48.85744 9.60564 c 49.08066 9.89648 49.1942 10.27281 49.20058 10.65039 c 49.20824 11.028 49.11 11.40686 48.90462 11.7028 c 48.69923 11.99876 48.3867 12.21053 47.97212 12.2488 c 46.84828 12.3738 45.99359 12.08551 45.29198 11.53569 c 44.59038 10.98462 44.04056 10.17584 43.51628 9.25867 c 42.46642 7.42427 41.51732 5.15999 39.67912 3.66238 c 37.33191 1.86499 34.63647 1.31517 31.78156 2.11118 c 28.92793 2.90591 25.91484 5.05156 22.94641 8.65018 c 22.94641 8.65146 l 22.94511 8.65273 l 18.5046 13.092 14.54623 14.11252 10.8124 13.3535 c 7.20232 12.62128 3.8027 10.22688 0.3661 7.67813 c 4.23642 11.54335 7.82994 14.06276 11.55484 14.721 c 15.38177 15.3971 19.35544 14.12656 23.93758 10.35954 c 23.93886 10.35954 23.93886 10.35954 23.93886 10.35954 c 26.77972 7.4179 29.4841 5.92793 31.56981 5.65622 c 32.612 5.51973 33.50114 5.68939 34.17212 6.13713 c 34.84312 6.5849 35.2947 7.31075 35.46309 8.27896 c 35.46309 8.27896 l 35.74501 9.97685 35.15694 11.2423 34.25887 11.91711 c 33.35953 12.59195 32.14896 12.67613 31.19603 12.01662 c 31.19476 12.01662 l 31.19476 12.01535 l 30.76997 11.68367 30.60158 11.28056 30.61435 10.9068 c 30.62837 10.53432 30.82227 10.19116 31.11566 9.97302 c 31.40907 9.75616 31.80452 9.66432 32.21783 9.79443 c 32.6184 9.91945 33.03171 10.25749 33.39015 10.87491 c 33.83664 9.86586 33.69759 9.06859 33.24217 8.5175 c 32.77785 7.95494 31.98567 7.64496 31.16159 7.6386 c 30.33751 7.6322 29.4841 7.92816 28.89604 8.56981 c 28.30923 9.21019 27.98523 10.19882 28.22377 11.588 c 28.23141 11.63774 l 28.18294 11.62372 l 26.9596 11.25888 26.03348 11.32011 25.21832 11.61479 c 24.40448 11.90819 23.70158 12.43758 22.92982 13.01035 c 21.41434 14.13548 19.62589 15.42006 16.2301 15.40092 c 17.28633 15.84868 18.36809 15.82315 19.45494 15.54506 c 20.59665 15.25423 21.74219 14.69931 22.85965 14.17374 c 23.97841 13.64818 25.06909 13.15195 26.10362 12.981 c 27.13947 12.80879 28.1217 12.96442 29.00957 13.7413 c 29.00957 13.7413 l 29.42671 14.07935 29.68184 14.54114 29.77878 14.99016 c 29.87575 15.44046 29.81451 15.87929 29.59126 16.17142 c 29.5632 16.2084 l 29.53896 16.16887 l 28.86287 15.04245 28.14978 14.60109 27.52982 14.57558 c 26.90985 14.55135 26.37535 14.94168 26.0539 15.50424 c 25.73369 16.06682 25.63164 16.79776 25.87657 17.44324 c 26.12021 18.08745 26.71085 18.65001 27.78877 18.87834 c 29.22644 19.0748 30.22015 18.56326 30.76997 17.72516 c 31.32106 16.88705 31.42438 15.71985 31.06464 14.60747 c 31.05061 14.56027 l 31.09909 14.56537 l 31.83641 14.64957 32.71916 14.50287 33.50114 14.21712 c 34.2844 13.9301 34.96558 13.50276 35.3049 13.03076 c 35.30618 13.02948 l 35.30618 13.02821 l 35.56003 12.71567 35.84834 12.57025 36.12515 12.55112 c 36.40196 12.53198 36.66603 12.64041 36.87013 12.82538 c 37.27835 13.1966 37.45438 13.88417 37.05 14.51306 c 37.04872 14.51561 l 37.04744 14.51689 l 36.66475 14.99272 36.21701 15.1879 35.7501 15.24911 c 35.2845 15.31035 34.80103 15.2389 34.33797 15.18661 c 33.87617 15.13559 33.43608 15.10242 33.05977 15.23254 c 32.68344 15.36266 32.36453 15.6535 32.13747 16.26071 c 31.9678 17.26846 32.24207 18.09764 32.83908 18.56836 c 33.43735 19.03908 34.36475 19.15388 35.51666 18.71252 c 35.5562 18.6972 l 35.56003 18.7393 l 35.69653 20.5303 36.9862 21.59804 38.38434 21.61206 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -91.941 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.928 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -91.941 Td[<0017001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -91.941 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -91.941 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -91.941 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200180011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -91.941 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 28.346 -150.029 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -150.029 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.194 0 cm 0 G 0 g q 1 0 0 1 28.346 -158.958 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 44.99858 16.86792 m 43.94743 16.84367 42.95116 16.4444 42.3988 15.69943 c 38.10497 19.07991 32.0622 14.26303 35.8866 10.5088 c 34.0114 6.47646 40.13963 4.88828 41.56581 7.58629 c 42.65265 9.87991 41.25966 11.59949 39.81306 11.14279 c 41.3145 10.07635 41.06958 8.48434 39.23647 8.49965 c 36.50912 8.63231 36.88416 12.99632 40.03247 14.06787 c 44.1911 15.14197 47.13657 10.80984 45.94894 7.96515 c 44.6937 4.38312 39.7952 3.8295 35.06636 6.45734 c 20.0022 15.56165 21.149 1.04857 9.70897 5.57713 c 17.95094 0.4184 20.52776 8.25983 27.37163 6.55556 c 32.41429 5.3692 33.283 0.03188 43.4933 0.80365 c 46.42476 0.84573 53.71382 7.12833 48.5181 11.23337 c 49.87413 15.15218 47.30878 16.92023 44.99858 16.86792 c 14.90341 12.52689 m 13.18767 12.57663 11.43364 11.49104 11.4885 9.39006 c 11.61607 7.54674 12.89299 6.94464 14.07808 7.7113 c 15.00037 8.29555 14.59471 9.524 13.13153 9.08263 c 12.57663 8.97803 12.5103 9.5814 13.06775 10.25111 c 14.1278 11.82909 16.54773 11.06754 16.67786 9.66432 c 16.84367 7.78783 15.46216 6.05295 13.08817 6.428 c 11.40686 6.84512 10.70398 7.37834 10.4667 8.30702 c 9.94624 7.67685 9.41429 7.63731 8.65273 7.89882 c 6.47902 8.47285 5.18933 6.74818 3.03731 6.30553 c 1.81523 6.07465 0.83809 6.65506 0.03188 7.32222 c 0.69904 5.19188 3.32944 4.99033 5.05794 5.98024 c 7.4128 7.31456 8.74968 7.25972 12.03194 5.6307 c 16.08339 4.27342 19.3733 7.57736 17.7813 10.79199 c 17.23404 11.92732 16.07701 12.49243 14.90341 12.52689 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -150.029 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -150.029 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -150.029 Td[<00180011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -150.029 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -150.029 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -150.029 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200150011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -150.029 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -150.029 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -150.029 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.201 0 cm 0 G 0 g q 1 0 0 1 142.353 -158.931 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 4.0 M 44.9973 16.89981 m 43.95126 16.87556 42.95755 16.47885 42.39497 15.74025 c 40.24168 17.41899 37.65338 17.05927 36.07922 15.80403 c 35.28833 15.17513 34.75255 14.31917 34.6556 13.38156 c 34.55992 12.45033 34.90181 11.4413 35.85088 10.50241 c 35.3891 9.49594 35.41844 8.63487 35.75394 7.9575 c 36.09198 7.27502 36.73364 6.77753 37.47734 6.49432 c 38.22105 6.20985 39.06807 6.13713 39.82071 6.30681 c 40.57335 6.47519 41.23286 6.88722 41.59387 7.57097 c 41.59514 7.57225 l 41.59514 7.57225 l 42.1424 8.72672 42.06714 9.74214 41.66786 10.41185 c 41.2673 11.08156 40.54144 11.40558 39.80412 11.17342 c 39.7429 11.15428 l 39.7952 11.11728 l 40.53891 10.58789 40.84378 9.93475 40.7443 9.42195 c 40.69453 9.16554 40.54527 8.94229 40.29398 8.78284 c 40.04395 8.6234 39.6906 8.52771 39.23775 8.53154 c 38.5642 8.56471 38.08838 8.85683 37.7937 9.2931 c 37.5003 9.72939 37.3906 10.31363 37.4633 10.9272 c 37.60873 12.15694 38.48128 13.50531 40.04268 14.03726 c 40.04268 14.03726 40.04268 14.03726 40.04268 14.03726 c 44.17706 15.10368 47.09575 10.79327 45.9196 7.9779 c 45.9196 7.97664 l 45.9196 7.97536 l 45.2958 6.19582 43.77013 5.1702 41.80688 4.91379 c 39.8424 4.6574 37.4429 5.17403 35.08293 6.48412 c 35.08168 6.4854 l 31.31339 8.76242 28.55544 9.56482 26.35748 9.55588 c 24.16081 9.54568 22.5267 8.72289 21.01125 7.75977 c 19.49702 6.79666 18.09892 5.69449 16.36914 5.11407 c 14.63936 4.53493 12.57536 4.47624 9.72044 5.60646 c 9.69238 5.55034 l 9.69365 5.54906 9.69493 5.54906 9.69748 5.54779 c 13.82294 2.96715 16.54518 3.63814 19.07735 4.74158 c 21.6108 5.84502 23.95416 7.37325 27.36398 6.52493 c 27.36398 6.52493 l 27.36525 6.52493 l 29.87575 5.93431 31.35039 4.30785 33.47816 2.91869 c 35.60468 1.5295 38.3856 0.38522 43.49586 0.77174 c 43.49586 0.77174 l 44.23958 0.78323 45.24733 1.18634 46.26402 1.84712 c 47.28072 2.5079 48.30762 3.42766 49.07938 4.47624 c 49.85243 5.52483 50.37163 6.70097 50.36908 7.87712 c 50.3678 9.04817 49.84605 10.21541 48.5551 11.2423 c 49.22609 13.19914 48.92375 14.62915 48.15709 15.56038 c 47.38914 16.49416 46.16069 16.92532 44.9973 16.89981 c 44.99858 16.83603 m 46.14539 16.86154 47.3547 16.43547 48.10861 15.51956 c 48.86125 14.60364 49.16359 13.1966 48.48875 11.24358 c 48.48111 11.2219 l 48.49898 11.20786 l 49.79248 10.18733 50.304 9.03543 50.30656 7.87712 c 50.30785 6.72012 49.79503 5.55417 49.02837 4.51323 c 48.2617 3.4723 47.2399 2.55766 46.22832 1.9007 c 45.21799 1.24374 44.21533 0.84573 43.4933 0.83554 c 43.49203 0.83554 l 43.49075 0.83554 l 38.39198 0.45029 35.63275 1.58818 33.51262 2.97226 c 31.39249 4.35506 29.91017 5.99043 27.37929 6.58617 c 27.37929 6.58617 l 23.94524 7.44086 21.5789 5.90114 19.05183 4.80026 c 16.59749 3.73 13.98239 3.09344 10.06487 5.4164 c 12.73737 4.4316 14.72227 4.49666 16.38956 5.05412 c 18.1321 5.63837 19.53403 6.74562 21.04567 7.70619 c 22.55733 8.66676 24.17612 9.48317 26.35876 9.49211 c 28.54013 9.5023 31.2866 8.70375 35.04977 6.43054 c 35.05106 6.42926 l 35.05106 6.42926 l 37.41994 5.1128 39.83347 4.59233 41.81456 4.85127 c 43.79564 5.11024 45.34811 6.15245 45.97957 7.95494 c 47.17612 10.82771 44.2064 15.17896 40.02481 14.09848 c 40.02354 14.09848 l 40.02228 14.09848 l 38.43663 13.5576 37.5475 12.18883 37.39952 10.93486 c 37.32555 10.30852 37.43652 9.70897 37.7414 9.25739 c 38.0463 8.80452 38.54506 8.50093 39.23518 8.46776 c 39.23518 8.46776 l 39.23647 8.46776 l 39.69952 8.46394 40.06436 8.56088 40.32843 8.72926 c 40.59248 8.89764 40.75449 9.1362 40.80678 9.40918 c 40.91011 9.93985 40.59885 10.59044 39.88705 11.12111 c 40.57335 11.30736 41.23796 11.00885 41.613 10.37996 c 41.99953 9.73065 42.07733 8.73947 41.53773 7.60031 c 41.18694 6.9357 40.54527 6.53386 39.80667 6.36804 c 39.06807 6.20221 38.23253 6.27364 37.5003 6.55301 c 36.76808 6.83237 36.14046 7.32095 35.81134 7.98557 c 35.48221 8.65018 35.45033 9.49338 35.91594 10.49477 c 35.92487 10.51517 l 35.90956 10.53175 l 34.95793 11.46426 34.62372 12.45927 34.71938 13.37518 c 34.81378 14.29237 35.33934 15.13431 36.11877 15.75427 c 37.67635 16.99677 40.24423 17.35522 42.37967 15.67519 c 42.40518 15.65477 l 42.42432 15.68028 l 42.96902 16.41505 43.95638 16.81306 44.99858 16.83603 c 14.9047 12.55878 m 14.0398 12.58301 13.1647 12.32278 12.51157 11.78955 c 11.85843 11.25633 11.42981 10.44884 11.45662 9.38878 c 11.45662 9.38878 l 11.45662 9.3875 l 11.52167 8.45883 11.8763 7.8363 12.36998 7.54419 c 12.86493 7.25334 13.49509 7.2967 14.09467 7.6845 c 14.09467 7.6845 l 14.56665 7.983 14.70569 8.455 14.5271 8.79688 c 14.34978 9.13748 13.86247 9.33647 13.12262 9.11325 c 13.12515 9.11325 l 12.99248 9.08899 12.89427 9.10686 12.82666 9.15279 c 12.76031 9.19872 12.72206 9.27525 12.7144 9.37859 c 12.69908 9.5865 12.81645 9.90031 13.092 10.23071 c 13.09328 10.232 l 13.09453 10.23325 l 14.13931 11.78827 16.51967 11.02927 16.64597 9.66176 c 16.72887 8.73181 16.42781 7.83887 15.81296 7.224 c 15.19937 6.61041 14.27197 6.27364 13.09453 6.45987 c 12.25644 6.6678 11.66455 6.90381 11.25377 7.20103 c 10.8443 7.49954 10.61469 7.85672 10.49733 8.31468 c 10.48201 8.3759 l 10.44246 8.32744 l 10.18478 8.01617 9.92966 7.85417 9.64392 7.79932 c 9.35944 7.74573 9.04051 7.79932 8.66293 7.92943 c 8.66165 7.92943 l 8.66037 7.92943 l 7.5646 8.21901 6.68822 7.92816 5.82332 7.5123 c 4.95715 7.09642 4.09991 6.55684 3.03093 6.33615 c 1.82161 6.1078 0.85466 6.68184 0.05229 7.34645 c -0.0306 7.41534 l 0.00125 7.31203 l 0.33803 6.23665 1.17487 5.64474 2.14052 5.44957 c 3.1062 5.25566 4.20198 5.4534 5.07324 5.95218 c 6.24812 6.61807 7.16405 6.93442 8.19604 6.88467 c 9.22678 6.83493 10.37741 6.4165 12.0179 5.60263 c 12.01917 5.60138 l 12.02171 5.6001 l 14.05766 4.9189 15.90608 5.40747 17.04524 6.4739 c 18.1831 7.54036 18.61172 9.18721 17.81062 10.80603 c 17.80936 10.80603 l 17.2557 11.95284 16.08723 12.52432 14.9047 12.55878 c 14.90215 12.49498 m 16.06682 12.46054 17.21106 11.90181 17.75323 10.77797 c 17.75323 10.77797 l 17.75323 10.77797 l 18.54285 9.18213 18.12189 7.5697 17.00188 6.51984 c 15.88057 5.46999 14.05893 4.98523 12.04341 5.66005 c 12.04213 5.66005 12.04213 5.66005 12.04213 5.66133 c 10.40164 6.47519 9.24336 6.89743 8.1986 6.94846 c 7.15256 6.99948 6.22134 6.67674 5.04262 6.0083 c 4.18413 5.51717 3.10109 5.32072 2.15327 5.51208 c 1.2412 5.69577 0.46687 6.2443 0.11353 7.22145 c 0.90442 6.58617 1.85735 6.0504 3.04369 6.27492 c 3.04369 6.27492 l 3.04369 6.27492 l 4.12672 6.49687 4.98906 7.04158 5.85013 7.4549 c 6.71118 7.8682 7.56714 8.15268 8.64507 7.8682 c 9.02649 7.73682 9.3556 7.67941 9.65666 7.73682 c 9.94368 7.79294 10.20265 7.96133 10.45523 8.25345 c 10.57896 7.80696 10.81113 7.44469 11.21678 7.15001 c 11.63774 6.84512 12.2373 6.60657 13.0805 6.39738 c 13.08179 6.3961 l 13.08305 6.3961 l 14.27835 6.2073 15.22871 6.55045 15.8576 7.17935 c 16.48651 7.80824 16.79266 8.72034 16.70973 9.66687 c 16.70973 9.66687 l 16.5758 11.1058 14.11761 11.86865 13.04224 10.26898 c 12.7616 9.93092 12.63403 9.60947 12.65062 9.37347 c 12.65955 9.25612 12.70674 9.15915 12.79094 9.10048 c 12.87512 9.0418 12.99376 9.02394 13.13792 9.05202 c 13.1392 9.05202 l 13.14046 9.05202 l 13.86375 9.27014 14.31024 9.07497 14.47096 8.76627 c 14.6317 8.45883 14.51178 8.02382 14.0615 7.73808 c 14.06021 7.73808 l 13.47597 7.3592 12.87512 7.32095 12.40314 7.59903 c 11.93114 7.87712 11.58417 8.47797 11.52039 9.39133 c 11.52039 9.39133 11.52039 9.39261 11.52039 9.39261 c 11.4936 10.43353 11.9133 11.21806 12.55238 11.73979 c 13.1915 12.26282 14.05128 12.51921 14.90215 12.49498 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -150.029 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -150.029 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -150.029 Td[<00180012>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -150.029 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -150.029 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -150.029 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001500110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200150011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -150.029 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 12 Tf 0 -211.934 Td[<0015000f0014>]TJ /F4 12 Tf 26.688 0 Td[<08980a8b0698077c>]TJ ET q 1 0 0 1 28.346 -250.225 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.511 0 cm 0 G 0 g q 1 0 0 1 28.304 -275.779 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0425 0.0425 m 0.0425 51.0655 l 4.29442 50.21512 5.99518 46.81358 5.99518 42.56168 c 14.14865 41.548 14.30342 31.21416 7.7997 31.3298 c 2.29433 31.59853 4.81316 37.81653 7.3762 35.37422 c 7.76738 34.97284 8.37115 35.56131 7.72316 36.36067 c 5.08017 39.41524 0.15305 33.13602 6.84557 29.80592 c 4.29442 27.67995 4.29442 25.12881 6.84557 23.00285 c 3.11238 19.15572 6.56494 14.16737 8.97153 17.05017 c 13.23874 12.885 16.9107 21.02997 12.16386 21.66435 c 11.15872 21.79361 10.94952 20.37177 12.2659 20.49081 c 14.93102 20.51462 12.77785 15.22354 8.9052 19.03497 c 7.1279 21.04356 8.09393 28.56265 16.6879 25.44005 c 21.16603 30.18008 22.57256 24.71211 27.25476 27.25476 c 24.71211 22.57256 30.18008 21.16603 25.44005 16.6879 c 28.56265 8.09393 21.04356 7.1279 19.03497 8.9052 c 15.22354 12.77785 20.51462 14.93102 20.49081 12.2659 c 20.37177 10.94952 21.79361 11.15872 21.66435 12.16386 c 21.02997 16.9107 12.885 13.23874 17.05017 8.97153 c 14.16737 6.56494 19.15572 3.11238 23.00285 6.84557 c 25.12881 4.29442 27.67995 4.29442 29.80592 6.84557 c 33.13602 0.15305 39.41524 5.08017 36.36067 7.72316 c 35.56131 8.37115 34.97284 7.76738 35.37422 7.3762 c 37.81653 4.81316 31.59853 2.29433 31.3298 7.7997 c 31.21416 14.30342 41.548 14.14865 42.56168 5.99518 c 46.81358 5.99518 50.21512 4.29442 51.0655 0.0425 c 0.0425 0.0425 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -250.225 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 20.439 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -250.225 Td[<00180013>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -250.225 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -250.225 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -250.225 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -250.225 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.559 0 cm 0 G 0 g q 1 0 0 1 142.323 -275.784 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 0.0 0.0 m 0.0 0.0425 l 0.0 51.11823 l 0.05101 51.10802 l 2.18547 50.68112 3.68555 49.60965 4.64818 48.11298 c 5.60571 46.6231 6.0309 44.71483 6.036 42.59738 c 10.10593 42.07526 12.18938 39.23157 12.43599 36.52565 c 12.55844 35.16843 12.2217 33.84523 11.44104 32.8673 c 10.6604 31.88936 9.43584 31.25838 7.798 31.2873 c 7.798 31.2873 l 7.798 31.2873 l 6.41357 31.35532 5.52577 31.79752 5.01894 32.39108 c 4.51042 32.98465 4.38797 33.72449 4.52061 34.37758 c 4.65327 35.03067 5.04274 35.59872 5.5683 35.84874 c 6.09383 36.10045 6.75543 36.02393 7.40512 35.40483 c 7.40512 35.40483 l 7.40681 35.40483 l 7.49696 35.3113 7.59392 35.27898 7.68234 35.2892 c 7.76909 35.2977 7.84901 35.35042 7.90344 35.43886 c 8.0089 35.61574 8.00719 35.94229 7.69086 36.33347 c 7.03944 37.0869 6.2571 37.26038 5.54108 37.05289 c 4.82675 36.8454 4.18047 36.25182 3.82161 35.46097 c 3.46445 34.66841 3.39302 33.68027 3.8267 32.68192 c 4.2587 31.68356 5.19753 30.67331 6.86427 29.84334 c 6.9221 29.81442 l 6.87277 29.7736 l 5.604 28.71573 4.97472 27.5592 4.97472 26.40439 c 4.97472 25.25127 5.604 24.09305 6.87277 23.03517 c 6.90851 23.00626 l 6.87617 22.97394 l 5.02065 21.06058 4.95602 18.87169 5.64311 17.52127 c 5.98839 16.84778 6.51903 16.38347 7.10748 16.26442 c 7.69595 16.14536 8.34395 16.36476 8.93921 17.07738 c 8.96812 17.1131 l 9.00044 17.08078 l 10.06172 16.0467 11.07367 15.78139 11.92917 15.96678 c 12.78464 16.15047 13.48537 16.78825 13.91055 17.57741 c 14.33405 18.36656 14.47862 19.30368 14.2269 20.07753 c 13.97519 20.84967 13.33229 21.46535 12.15877 21.62183 c 11.67575 21.68477 11.39853 21.37863 11.38661 21.07928 c 11.3798 20.92963 11.43935 20.78165 11.57881 20.67621 c 11.71828 20.56906 11.94107 20.50443 12.26251 20.53334 c 12.2642 20.53334 l 12.2659 20.53334 l 12.94623 20.54015 13.334 20.19829 13.45134 19.74759 c 13.567 19.29858 13.42242 18.74582 13.07037 18.31554 c 12.71832 17.88524 12.15536 17.574 11.43594 17.61482 c 10.7182 17.65735 9.84912 18.04683 8.87459 19.00435 c 8.87459 19.00606 l 8.87288 19.00775 l 8.41878 19.51968 8.14496 20.37517 8.12115 21.3208 c 8.09564 22.26813 8.31844 23.30559 8.87119 24.18488 c 9.42392 25.06247 10.30493 25.78021 11.58731 26.07953 c 12.86288 26.37888 14.53644 26.26152 16.676 25.48767 c 17.79001 26.66121 18.72032 27.21225 19.5605 27.40613 c 20.40578 27.60342 21.15752 27.44186 21.90756 27.21225 c 23.40764 26.75475 24.90602 26.02681 27.23434 27.29218 c 27.36021 27.36021 l 27.29218 27.23434 l 26.02681 24.90602 26.75475 23.40764 27.21225 21.90756 c 27.44186 21.15752 27.60342 20.40578 27.40613 19.5605 c 27.21225 18.72032 26.66121 17.79001 25.48767 16.676 c 26.26152 14.53644 26.37888 12.86288 26.07953 11.58731 c 25.78021 10.30493 25.06247 9.42392 24.18488 8.87119 c 23.30559 8.31844 22.26813 8.09564 21.3208 8.12115 c 20.37517 8.14496 19.51968 8.41878 19.00775 8.87288 c 19.00606 8.87459 l 19.00435 8.87459 l 18.04683 9.84912 17.65735 10.7182 17.61482 11.43594 c 17.574 12.15536 17.88524 12.71832 18.31554 13.07037 c 18.74582 13.42242 19.29858 13.567 19.74759 13.45134 c 20.19829 13.334 20.54015 12.94623 20.53334 12.2659 c 20.53334 12.2642 l 20.53334 12.26251 l 20.50443 11.94107 20.56906 11.71828 20.67621 11.57881 c 20.78165 11.43935 20.92963 11.3798 21.07928 11.38661 c 21.37863 11.39853 21.68477 11.67575 21.62183 12.15877 c 21.46535 13.33229 20.84967 13.97519 20.07753 14.2269 c 19.30368 14.47862 18.36656 14.33405 17.57741 13.91055 c 16.78825 13.48537 16.15047 12.78464 15.96678 11.92917 c 15.78139 11.07367 16.0467 10.06172 17.08078 9.00044 c 17.1131 8.96812 l 17.07738 8.93921 l 16.36476 8.34395 16.14536 7.69595 16.26442 7.10748 c 16.38347 6.51903 16.84778 5.98839 17.52127 5.64311 c 18.87169 4.95602 21.06058 5.02065 22.97394 6.87617 c 23.00626 6.9068 l 23.03517 6.87277 l 24.09305 5.604 25.25127 4.97472 26.40439 4.97472 c 27.5592 4.97472 28.71573 5.604 29.7736 6.87277 c 29.81442 6.9221 l 29.84334 6.86427 l 30.67331 5.19753 31.68356 4.2587 32.68192 3.8267 c 33.68027 3.39302 34.66841 3.46445 35.46097 3.82161 c 36.25182 4.18047 36.8454 4.82675 37.05289 5.54108 c 37.26038 6.2554 37.0869 7.03944 36.33347 7.69086 c 36.33347 7.69086 36.33347 7.69086 36.33347 7.69086 c 35.94229 8.00719 35.61574 8.0089 35.43886 7.90344 c 35.35042 7.84901 35.2977 7.76909 35.2892 7.68234 c 35.27898 7.59392 35.3113 7.49696 35.40483 7.40681 c 35.40483 7.40512 l 35.40483 7.40512 l 36.02393 6.75543 36.10045 6.09383 35.84874 5.5683 c 35.59872 5.04274 35.03067 4.65327 34.37758 4.52061 c 33.72449 4.38797 32.98465 4.51042 32.39108 5.01894 c 31.79752 5.52577 31.35532 6.41357 31.2873 7.798 c 31.2873 7.798 l 31.2873 7.798 l 31.25838 9.43584 31.88936 10.6604 32.8673 11.44104 c 33.84523 12.2217 35.16843 12.55844 36.52565 12.43599 c 39.23157 12.18938 42.07526 10.10593 42.59738 6.036 c 44.71483 6.0309 46.6231 5.60571 48.11298 4.64818 c 49.60965 3.68555 50.68112 2.18547 51.10802 0.05101 c 51.11823 0.0 l 0.0 0.0 l 0.08502 0.08502 m 51.00938 0.08502 l 50.57907 2.17188 49.53311 3.63452 48.06705 4.57675 c 46.58739 5.52748 44.68253 5.95267 42.56168 5.95267 c 42.52425 5.95267 l 42.51915 5.99008 l 42.01572 10.0498 39.19585 12.10774 36.51884 12.35095 c 35.18033 12.47342 33.87755 12.14005 32.92003 11.37471 c 31.9625 10.61107 31.34341 9.41544 31.37233 7.8014 c 31.37233 7.8014 l 31.37233 7.8014 31.37233 7.8014 31.37233 7.7997 c 31.43866 6.43228 31.87405 5.5717 32.44551 5.08188 c 33.01866 4.59375 33.7296 4.4747 34.36057 4.60396 c 34.98985 4.73152 35.5358 5.10909 35.7722 5.60571 c 36.00862 6.10063 35.9457 6.71461 35.34532 7.34558 c 35.34532 7.34558 35.34532 7.34558 35.34532 7.34558 c 35.23647 7.45105 35.19225 7.5752 35.20416 7.69086 c 35.21776 7.8065 35.28749 7.91025 35.39464 7.97487 c 35.61234 8.10583 35.978 8.08713 36.3879 7.75548 c 36.3879 7.75548 l 36.3879 7.75548 l 37.16344 7.08537 37.35052 6.2605 37.13452 5.51727 c 36.91853 4.77403 36.30794 4.11243 35.49498 3.74507 c 34.682 3.3777 33.66837 3.30627 32.6479 3.74846 c 31.63934 4.18556 30.62909 5.1312 29.79742 6.77583 c 28.73953 5.52577 27.57451 4.8897 26.40439 4.8897 c 25.23085 4.8897 24.06073 5.52917 22.99945 6.78773 c 21.07248 4.9407 18.86148 4.86588 17.48386 5.5683 c 16.79166 5.92206 16.30693 6.4714 16.18108 7.09048 c 16.05862 7.70105 16.29161 8.37286 16.99403 8.97491 c 15.9719 10.03621 15.69466 11.07027 15.88344 11.94617 c 16.07393 12.83228 16.73042 13.5517 17.53828 13.98538 c 18.34445 14.41908 19.30199 14.56874 20.10304 14.30853 c 20.90411 14.04662 21.54529 13.36801 21.70686 12.16896 c 21.7732 11.64684 21.43304 11.31688 21.08269 11.30157 c 20.9075 11.29477 20.73062 11.36621 20.60817 11.52777 c 20.48572 11.68765 20.41939 11.93085 20.44829 12.2659 c 20.45511 12.919 20.14386 13.26086 19.72717 13.36801 c 19.31049 13.47687 18.78156 13.34079 18.36995 13.00404 c 17.95668 12.6673 17.66074 12.13326 17.69987 11.44104 c 17.73898 10.75053 18.11656 9.89844 19.06218 8.93752 c 19.06389 8.9358 l 19.55539 8.5021 20.39217 8.23 21.3242 8.20448 c 22.25452 8.18068 23.27667 8.40178 24.13896 8.94261 c 25.00125 9.48515 25.70366 10.34575 25.9979 11.60602 c 26.29213 12.86627 26.17818 14.52963 25.40094 16.67259 c 25.39073 16.69981 l 25.41113 16.71852 l 26.59148 17.83423 27.13402 18.75433 27.3245 19.57921 c 27.51668 20.40407 27.3585 21.1354 27.13062 21.88203 c 26.6833 23.3515 25.9724 24.8771 27.16803 27.16803 c 24.8771 25.9724 23.3515 26.6833 21.88203 27.13062 c 21.1354 27.3585 20.40407 27.51668 19.57921 27.3245 c 18.75433 27.13402 17.83423 26.59148 16.71852 25.41113 c 16.69981 25.39073 l 16.67259 25.40094 l 14.52963 26.17818 12.86627 26.29213 11.60602 25.9979 c 10.34575 25.70366 9.48515 25.00125 8.94261 24.13896 c 8.40178 23.27667 8.18068 22.25452 8.20448 21.3242 c 8.23 20.39217 8.5021 19.55539 8.9358 19.06389 c 8.9358 19.06389 8.9358 19.06389 8.93752 19.06218 c 9.89844 18.11656 10.75053 17.73898 11.44104 17.69987 c 12.13326 17.66074 12.6673 17.95668 13.00404 18.36995 c 13.34079 18.78156 13.47687 19.31049 13.36801 19.72717 c 13.26086 20.14386 12.919 20.45511 12.2659 20.44829 c 11.93085 20.41939 11.68765 20.48572 11.52777 20.60817 c 11.3679 20.73062 11.29477 20.9075 11.30157 21.08269 c 11.31688 21.43304 11.64684 21.7732 12.16896 21.70686 c 13.36801 21.54529 14.04662 20.90411 14.30853 20.10304 c 14.56874 19.30199 14.41908 18.34445 13.98538 17.53659 c 13.5517 16.73042 12.83228 16.07393 11.94617 15.88344 c 11.07027 15.69466 10.03621 15.9719 8.97491 16.99403 c 8.37286 16.29161 7.70105 16.05862 7.09048 16.18108 c 6.4714 16.30693 5.92206 16.79166 5.5683 17.48386 c 4.86588 18.86148 4.9407 21.07248 6.78773 22.99945 c 5.52917 24.06073 4.8897 25.23085 4.8897 26.40439 c 4.8897 27.57451 5.52577 28.73953 6.77583 29.79742 c 5.1312 30.62909 4.18556 31.63934 3.74846 32.6479 c 3.30627 33.66837 3.3777 34.682 3.74507 35.49498 c 4.11243 36.30794 4.77403 36.91853 5.51727 37.13452 c 6.2605 37.35052 7.08537 37.16344 7.75548 36.3879 c 7.75548 36.3879 l 7.75548 36.3879 l 8.08713 35.978 8.10583 35.61234 7.97487 35.39464 c 7.91025 35.28749 7.8065 35.21776 7.69086 35.20416 c 7.5752 35.19225 7.45105 35.23647 7.34558 35.34532 c 6.71461 35.9457 6.10063 36.00862 5.60571 35.7722 c 5.10909 35.5358 4.73152 34.98985 4.60396 34.36057 c 4.4747 33.7296 4.59375 33.01866 5.08357 32.44551 c 5.5717 31.87405 6.43228 31.43866 7.7997 31.37233 c 9.41544 31.34341 10.61107 31.96078 11.37471 32.92003 c 12.14005 33.87755 12.47342 35.18033 12.35095 36.51884 c 12.10774 39.19585 10.0498 42.01572 5.99008 42.51915 c 5.95267 42.52425 l 5.95267 42.56168 l 5.95267 44.68253 5.52748 46.58739 4.57675 48.06705 c 3.63452 49.53311 2.17188 50.57907 0.08502 51.00938 c 0.08502 0.08502 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -250.225 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 20.439 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -250.225 Td[<00180014>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -250.225 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -250.225 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -250.225 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 256.299 -250.225 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -26.259 0 cm 0 G 0 g q 1 0 0 1 256.256 -276.526 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 3.68895 52.56047 m 1.5698 48.35448 3.65492 44.67912 7.29628 43.05658 c 9.74707 41.86435 10.34235 42.95624 7.39662 44.91042 c 4.48322 47.36122 6.0394 51.5332 3.68895 52.56047 c 4.52403 42.62459 m 3.3743 42.6059 2.38786 41.764 1.53748 40.12106 c 4.99344 41.0548 6.79454 39.2741 7.72656 38.04443 c 8.76573 36.71272 9.96648 37.87436 9.08717 39.48837 c 7.33368 41.61093 5.82512 42.645 4.52403 42.62459 c 5.72476 36.13957 m 4.49 36.14978 3.34538 35.5205 2.68379 33.983 c 6.80646 32.24992 7.32689 30.48112 5.30638 25.9758 c 0.0425 16.42769 3.47635 10.60767 8.79634 10.16376 c 7.45955 9.48856 6.04622 8.0361 6.18738 6.18738 c 8.0361 6.04622 9.48856 7.45955 10.16376 8.79634 c 10.60767 3.47635 16.42769 0.0425 25.9758 5.30638 c 30.48112 7.32689 32.24992 6.80646 33.983 2.68379 c 38.66861 4.6992 34.91501 11.21313 30.38078 11.03627 c 30.8757 15.65384 30.12737 14.9055 28.13237 13.62312 c 25.87204 11.3458 25.5149 15.75418 23.03006 13.60611 c 22.0062 11.3254 23.3294 7.46805 19.60472 6.79625 c 16.18617 6.62958 13.91055 9.1297 14.63168 10.18927 c 15.15552 11.20633 16.22191 11.31857 16.83418 10.54814 c 18.98734 9.07697 20.77144 13.60442 17.34099 15.80011 c 19.05537 16.47531 19.71187 17.8036 18.90741 18.90741 c 17.8036 19.71187 16.47531 19.05537 15.80011 17.34099 c 13.60442 20.77144 9.07697 18.98734 10.54814 16.83418 c 11.31857 16.22191 11.20633 15.15552 10.18927 14.63168 c 9.1297 13.91055 6.62958 16.18617 6.79625 19.60472 c 7.46805 23.3294 11.3254 22.0062 13.60611 23.03006 c 15.75418 25.5149 11.3458 25.87204 13.62312 28.13237 c 14.9055 30.12737 15.65384 30.8757 11.03627 30.38078 c 11.1553 33.42685 8.2538 36.12086 5.72476 36.13957 c 38.39479 9.39162 m 37.44917 9.37631 37.04608 8.50551 38.04443 7.72656 c 39.2741 6.79454 41.0548 4.99344 40.12106 1.53748 c 43.62634 3.3522 43.48178 5.78769 39.48837 9.08717 c 39.0853 9.30658 38.70943 9.39671 38.39479 9.39162 c 42.878 9.37802 m 42.43411 9.37631 42.4239 8.59737 43.05658 7.29628 c 44.67912 3.65492 48.35448 1.5698 52.56047 3.68895 c 51.5332 6.0394 47.36122 4.48322 44.91042 7.39662 c 43.99542 8.77765 43.26749 9.3797 42.878 9.37802 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -250.225 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 20.439 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 256.299 -250.225 Td[<00180015>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -250.225 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 256.299 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 256.299 -250.225 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 256.299 -250.225 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 370.275 -250.225 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.58 0 cm 0 G 0 g q 1 0 0 1 368.819 -277.261 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 3.66853 52.6166 m 3.65152 52.57918 l 2.58685 50.46684 2.57664 48.48204 3.29266 46.82379 c 4.01039 45.16383 5.44923 43.83383 7.27927 43.01918 c 7.89323 42.71983 8.39326 42.56168 8.75552 42.52765 c 8.93752 42.50896 9.08379 42.52086 9.19603 42.56508 c 9.30829 42.60928 9.38652 42.68922 9.41032 42.79468 c 9.46135 43.00557 9.3236 43.2947 9.00044 43.65695 c 8.67729 44.01923 8.16026 44.45462 7.42383 44.94273 c 5.97816 46.1588 5.64143 47.80003 5.37271 49.278 c 5.23836 50.01613 5.1227 50.71175 4.8897 51.2934 c 4.65668 51.87337 4.30463 52.33766 3.70596 52.5996 c 3.66853 52.6166 l 3.71106 52.49925 m 4.2604 52.24583 4.58865 51.81384 4.81145 51.2611 c 5.03766 50.69302 5.155 50.00082 5.28937 49.26268 c 5.55809 47.78302 5.89995 46.11456 7.36942 44.8781 c 7.37111 44.87642 l 7.3728 44.87642 l 8.10754 44.38829 8.61946 43.95459 8.9358 43.60083 c 9.25217 43.24707 9.36612 42.97154 9.32869 42.81339 c 9.30997 42.73514 9.25896 42.68071 9.16542 42.64331 c 9.07358 42.60757 8.93752 42.594 8.76404 42.611 c 8.41708 42.645 7.92386 42.79808 7.31499 43.0957 c 7.31328 43.0957 l 7.31328 43.0957 l 5.50026 43.90356 4.07672 45.22166 3.37091 46.85779 c 2.66849 48.48204 2.67699 50.4226 3.71106 52.50095 c 4.52232 42.66711 m 3.3539 42.64839 2.35385 41.79121 1.50006 40.14146 c 1.45584 40.05473 l 1.54767 40.08025 l 3.26715 40.54456 4.56993 40.33365 5.55978 39.85574 c 6.54962 39.37782 7.22824 38.6312 7.69255 38.01892 c 7.69255 38.01892 l 7.95787 37.68047 8.2351 37.49678 8.49191 37.44066 c 8.75043 37.38454 8.98685 37.45937 9.1569 37.63284 c 9.49536 37.97641 9.5702 38.69072 9.1246 39.50879 c 9.1229 39.51219 l 9.11949 39.5156 l 7.3643 41.64156 5.84721 42.68753 4.52232 42.66711 c 4.52403 42.58208 m 5.8013 42.6025 7.30307 41.58032 9.05147 39.46628 c 9.48346 38.67032 9.39671 37.9985 9.09569 37.69237 c 8.94603 37.5376 8.74191 37.47298 8.51062 37.5223 c 8.27762 37.57332 8.01569 37.7434 7.76059 38.06995 c 7.29286 38.68733 6.60406 39.44586 5.59721 39.93228 c 4.60907 40.4085 3.30968 40.61429 1.62251 40.1806 c 2.45929 41.7572 3.41682 42.56335 4.52403 42.58208 c 5.72476 36.18208 m 4.4764 36.1923 3.31139 35.54941 2.64468 34.0 c 2.62767 33.96089 l 2.66678 33.94388 l 4.7247 33.0799 5.87103 32.2108 6.2588 31.00667 c 6.64488 29.80252 6.27751 28.24461 5.26895 25.9962 c 2.63277 21.21535 2.17188 17.3614 3.04095 14.64359 c 3.89984 11.96318 6.05812 10.39677 8.6807 10.13826 c 7.3626 9.43753 6.00539 8.0106 6.14487 6.18398 c 6.14825 6.14825 l 6.18398 6.14487 l 8.0106 6.00539 9.43753 7.3626 10.13826 8.6807 c 10.39677 6.05812 11.96318 3.89984 14.64359 3.04265 c 17.3614 2.17188 21.21535 2.63277 25.9962 5.26895 c 28.24461 6.27751 29.80252 6.64488 31.00667 6.2588 c 32.2108 5.87103 33.0799 4.7247 33.94388 2.66678 c 33.96089 2.62767 l 34.0 2.64468 l 35.18033 3.1532 35.83684 3.94916 36.07494 4.85397 c 36.31476 5.75708 36.14127 6.76393 35.67697 7.70105 c 34.75685 9.56 32.69553 11.14171 30.4267 11.07538 c 30.54575 12.20468 30.59338 13.01596 30.56107 13.5704 c 30.54575 13.85274 30.51003 14.07042 30.45221 14.2354 c 30.39609 14.40038 30.31615 14.51433 30.2124 14.57895 c 30.10866 14.64189 29.98279 14.6538 29.84334 14.62657 c 29.70387 14.60107 29.5491 14.53644 29.37563 14.44629 c 29.02867 14.26602 28.60687 13.97859 28.11026 13.65883 c 28.10515 13.65715 l 28.10175 13.65375 l 27.54219 13.08908 27.1119 12.94623 26.73773 13.00404 c 26.36186 13.06017 26.03363 13.32549 25.69176 13.59932 c 25.34991 13.87314 24.99785 14.15887 24.56586 14.2371 c 24.13387 14.31364 23.62874 14.17928 23.00285 13.63843 c 22.99605 13.63162 l 22.99095 13.62312 l 22.4739 12.4683 22.55045 10.93251 22.28853 9.60591 c 22.15758 8.94261 21.94327 8.33374 21.53508 7.85072 c 21.1269 7.366 20.52144 7.00545 19.59961 6.83878 c 17.90225 6.75714 16.49062 7.3371 15.59262 8.06502 c 15.14362 8.4307 14.82387 8.83377 14.6623 9.20624 c 14.50072 9.577 14.4956 9.91545 14.6657 10.16547 c 14.66739 10.16716 l 14.6691 10.17058 l 14.9259 10.6689 15.31198 10.93932 15.70657 10.99713 c 16.09944 11.05325 16.50252 10.8968 16.80186 10.52261 c 16.80527 10.51753 l 16.81035 10.51242 l 17.35971 10.13826 17.89714 10.14336 18.32574 10.40358 c 18.75604 10.66208 19.07748 11.16891 19.22374 11.7897 c 19.50948 13.01425 19.09789 14.6844 17.42262 15.7916 c 18.2492 16.13176 18.83087 16.62328 19.1064 17.17432 c 19.39043 17.74069 19.3513 18.36995 18.94142 18.93292 c 18.93802 18.93802 l 18.93292 18.94142 l 18.36995 19.3513 17.74069 19.39043 17.17432 19.1064 c 16.62328 18.83087 16.13176 18.2492 15.7916 17.42262 c 14.6844 19.09789 13.01425 19.50948 11.7897 19.22205 c 11.16891 19.07748 10.66208 18.75604 10.40358 18.32574 c 10.14336 17.89714 10.13826 17.35971 10.51242 16.81035 c 10.51753 16.80527 l 10.52261 16.80186 l 10.8968 16.50252 11.05325 16.09944 10.99713 15.70657 c 10.94101 15.31198 10.6689 14.9259 10.17058 14.6691 c 10.16716 14.66739 l 10.16547 14.6657 l 9.91545 14.4956 9.577 14.50072 9.20624 14.6623 c 8.83377 14.82387 8.4307 15.14362 8.06502 15.59262 c 7.33539 16.49062 6.75543 17.90225 6.83878 19.59961 c 7.00545 20.52144 7.366 21.1269 7.85072 21.53508 c 8.33374 21.94498 8.94261 22.15758 9.60591 22.28853 c 10.93251 22.55045 12.4683 22.4739 13.62312 22.99095 c 13.63162 22.99605 l 13.63843 23.00285 l 14.17928 23.63043 14.31364 24.13387 14.2371 24.56586 c 14.15887 24.99785 13.87314 25.34991 13.59932 25.69176 c 13.32378 26.03363 13.06017 26.36186 13.00404 26.73773 c 12.94623 27.1119 13.08908 27.54219 13.65375 28.10175 c 13.65544 28.10515 l 13.65883 28.11026 l 13.97859 28.60687 14.26602 29.02867 14.44629 29.37563 c 14.53644 29.5491 14.60107 29.70387 14.62657 29.84334 c 14.6538 29.98279 14.64189 30.10866 14.57726 30.2124 c 14.51433 30.31784 14.40038 30.39609 14.2354 30.4539 c 14.07042 30.51003 13.85274 30.54575 13.5704 30.56107 c 13.01596 30.59338 12.20299 30.54745 11.07367 30.4267 c 11.1179 31.9455 10.42569 33.37242 9.40352 34.4252 c 8.37115 35.48988 7.00374 36.17358 5.72476 36.18208 c 5.72476 36.09706 m 6.97313 36.08855 8.32353 35.41676 9.34229 34.36568 c 10.36276 33.3163 11.05325 31.89276 10.99374 30.38248 c 10.99203 30.33316 l 11.04135 30.33826 l 12.19447 30.46242 13.01256 30.50835 13.567 30.47603 c 13.84422 30.46071 14.05511 30.425 14.20819 30.37227 c 14.36125 30.31955 14.45479 30.25153 14.50583 30.16818 c 14.55684 30.08484 14.56705 29.9845 14.54324 29.85864 c 14.51944 29.73279 14.4599 29.58482 14.37146 29.41473 c 14.19629 29.07628 13.90886 28.6562 13.5891 28.15787 c 13.01764 27.58981 12.85777 27.1289 12.919 26.72412 c 12.98193 26.31935 13.25916 25.98088 13.53299 25.63904 c 13.80681 25.2972 14.08063 24.95534 14.15376 24.55055 c 14.2252 24.14746 14.10614 23.67636 13.5806 23.06577 c 12.4547 22.56404 10.9274 22.63548 9.5889 22.37186 c 8.91881 22.23921 8.29462 22.0215 7.7963 21.59972 c 7.29628 21.17793 6.92381 20.55034 6.75372 19.61151 c 6.75372 19.60983 l 6.75372 19.60643 l 6.6704 17.88695 7.25716 16.4532 8.00038 15.53989 c 8.37115 15.08238 8.78275 14.75414 9.17221 14.58406 c 9.56 14.41568 9.93246 14.40718 10.2114 14.59596 c 10.72842 14.86298 11.01926 15.27116 11.08047 15.69296 c 11.14171 16.11475 10.97162 16.54674 10.58215 16.85968 c 10.2233 17.38692 10.2318 17.87845 10.475 18.28152 c 10.71991 18.68631 11.20633 18.99924 11.8084 19.14041 c 13.01425 19.42274 14.67589 19.01965 15.76439 17.31718 c 15.80861 17.24745 l 15.83922 17.32568 l 16.17427 18.17607 16.66919 18.75945 17.21173 19.03156 c 17.7526 19.30199 18.33765 19.26627 18.87679 18.87679 c 19.26627 18.33765 19.30199 17.7526 19.03156 17.21173 c 18.75945 16.66919 18.17607 16.17427 17.32568 15.83922 c 17.24916 15.80861 l 17.3189 15.76439 l 19.01965 14.67589 19.42274 13.01425 19.14041 11.8084 c 18.99924 11.20633 18.68631 10.71991 18.28152 10.475 c 17.87845 10.2318 17.38692 10.2233 16.85968 10.58215 c 16.54503 10.97162 16.11475 11.14171 15.69296 11.08047 c 15.27116 11.01926 14.86298 10.72842 14.59596 10.2114 c 14.40718 9.93246 14.41568 9.56 14.58406 9.17221 c 14.75414 8.78275 15.08238 8.37115 15.53989 8.00038 c 16.4532 7.25716 17.88695 6.6704 19.60643 6.75372 c 19.60983 6.75372 l 19.61151 6.75543 l 20.55034 6.92381 21.17793 7.29628 21.59972 7.7963 c 22.0215 8.29462 22.23921 8.91881 22.37186 9.5906 c 22.63548 10.9274 22.56404 12.4547 23.06577 13.5806 c 23.67636 14.10614 24.14746 14.2269 24.55055 14.15376 c 24.95534 14.08063 25.2972 13.80681 25.63904 13.53299 c 25.98088 13.25916 26.31935 12.98193 26.72412 12.9207 c 27.1289 12.85777 27.58981 13.01764 28.15787 13.5891 c 28.6562 13.90886 29.07628 14.19629 29.41473 14.37146 c 29.58482 14.4599 29.73279 14.51944 29.85864 14.54324 c 29.9845 14.56874 30.08484 14.55684 30.16818 14.50583 c 30.25153 14.45479 30.31955 14.36125 30.37227 14.20819 c 30.425 14.05511 30.46071 13.84422 30.47603 13.567 c 30.50835 13.01256 30.46242 12.19447 30.33826 11.04135 c 30.33316 10.99203 l 30.38248 10.99374 l 32.6292 11.08217 34.68883 9.50726 35.60213 7.66364 c 36.05792 6.74182 36.2263 5.75368 35.9933 4.87439 c 35.7637 4.00699 35.13951 3.24165 34.00171 2.74162 c 33.14113 4.77914 32.26183 5.94417 31.03217 6.33875 c 29.79231 6.73672 28.214 6.35574 25.95879 5.34549 c 25.95708 5.3438 l 25.95538 5.3438 l 21.18813 2.71442 17.358 2.26201 14.6691 3.12259 c 11.98018 3.98318 10.42738 6.15506 10.20628 8.79974 c 10.19438 8.94942 l 10.12634 8.81506 l 9.46135 7.49866 8.0361 6.11424 6.2299 6.2299 c 6.11424 8.0361 7.49866 9.46135 8.81506 10.12634 c 8.94942 10.19438 l 8.79974 10.20628 l 6.15506 10.42738 3.98318 11.98018 3.12259 14.6691 c 2.26201 17.358 2.71442 21.18813 5.3438 25.95538 c 5.3438 25.95708 l 5.34549 25.95879 l 6.35574 28.214 6.73672 29.79231 6.33875 31.03217 c 5.94417 32.26183 4.77914 33.13942 2.74333 34.00171 c 3.4015 35.49669 4.51552 36.10725 5.72476 36.09874 c 38.39479 9.43414 m 37.90837 9.42563 37.55121 9.19603 37.45085 8.85757 c 37.34882 8.51912 37.51039 8.08882 38.01892 7.69255 c 38.01892 7.69255 l 38.6312 7.22824 39.37782 6.54962 39.85574 5.55978 c 40.33365 4.56993 40.54456 3.26715 40.08025 1.54767 c 40.05473 1.45584 l 40.14146 1.50006 l 41.02077 1.95586 41.67386 2.45079 42.09566 2.99333 c 42.51915 3.53418 42.70963 4.12433 42.65862 4.75873 c 42.55997 6.0275 41.5157 7.46635 39.5156 9.11949 c 39.51219 9.1229 l 39.50879 9.1246 l 39.1006 9.3474 38.71793 9.43924 38.39479 9.43414 c 42.878 9.42052 m 42.75386 9.42052 42.65181 9.36101 42.59227 9.25555 c 42.53276 9.15181 42.51064 9.00554 42.52086 8.82185 c 42.54295 8.4545 42.70113 7.93236 43.01918 7.27927 c 43.83383 5.44923 45.16383 4.01039 46.82379 3.29266 c 48.48204 2.57664 50.46684 2.58685 52.57918 3.65152 c 52.6166 3.66853 l 52.5996 3.70596 l 52.33766 4.30463 51.87337 4.65668 51.2934 4.8897 c 50.71175 5.1227 50.01613 5.23836 49.278 5.37271 c 47.80003 5.64143 46.1588 5.97816 44.94273 7.42383 c 44.48524 8.11433 44.07364 8.61098 43.72668 8.93752 c 43.37804 9.26236 43.09401 9.42223 42.878 9.42052 c 38.39479 9.3491 m 38.70093 9.3542 39.06828 9.26747 39.46628 9.05147 c 41.45616 7.40512 42.48004 5.97816 42.57527 4.75192 c 42.6229 4.13795 42.4409 3.57329 42.02933 3.04436 c 41.63135 2.53412 41.00716 2.06302 40.1806 1.62422 c 40.61429 3.30968 40.4085 4.60907 39.93228 5.59721 c 39.44586 6.60406 38.68733 7.29286 38.06995 7.76059 c 38.06995 7.76059 l 37.58012 8.14325 37.44406 8.53783 37.5308 8.83377 c 37.61923 9.1297 37.9356 9.34059 38.39479 9.3491 c 42.878 9.3355 m 43.0515 9.33719 43.32701 9.19434 43.66885 8.87459 c 44.00902 8.55484 44.41891 8.06161 44.87642 7.3728 c 44.87642 7.37111 l 44.8781 7.36942 l 46.11287 5.89995 47.78302 5.55809 49.26268 5.28937 c 50.00082 5.155 50.69302 5.03766 51.2611 4.81145 c 51.81384 4.58865 52.24413 4.2604 52.49925 3.71106 c 50.4226 2.67699 48.48204 2.66849 46.85779 3.37091 c 45.22166 4.07843 43.90356 5.50026 43.0957 7.31328 c 43.0957 7.31328 l 43.0957 7.31499 l 42.77936 7.96297 42.6263 8.48001 42.6059 8.82697 c 42.59567 9.00215 42.61948 9.1314 42.66711 9.21474 c 42.71304 9.29639 42.77936 9.3355 42.878 9.3355 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -250.225 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 20.439 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 370.275 -250.225 Td[<00180016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -250.225 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 370.275 -250.225 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 370.275 -250.225 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001400110011>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 370.275 -250.225 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 12 Tf 0 -312.13 Td[<0015000f0015>]TJ /F4 12 Tf 26.688 0 Td[<09f508a40f4c>]TJ ET q 1 0 0 1 28.346 -350.409 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -350.409 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -17.717 0 cm 0 G 0 g q 1 0 0 1 28.346 -364.877 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 17.71681 28.93745 m 14.46872 28.93745 11.22063 27.16579 10.63008 23.62242 c 0.0 23.62242 5.19693 8.9765 11.33876 14.17345 c 2.36223 17.00813 12.99232 25.98466 14.88213 16.53569 c 16.29947 9.44896 11.10252 3.54335 3.54335 3.54335 c 3.54335 0.0 l 10.8663 0.0 15.82701 5.19693 17.71681 9.44896 c 19.60661 5.19693 24.56732 0.0 31.89027 0.0 c 31.89027 3.54335 l 24.3311 3.54335 19.13416 9.44896 20.5515 16.53569 c 22.4413 25.98466 33.0714 17.00813 24.09486 14.17345 c 30.2367 8.9765 35.43364 23.62242 24.80354 23.62242 c 24.21297 27.16579 21.02394 28.93745 17.71681 28.93745 c 17.71681 25.74843 m 19.19322 25.74843 20.66962 25.03976 21.26018 23.62242 c 19.37038 22.4413 18.18927 21.26018 17.71681 18.42549 c 17.24435 21.26018 16.06323 22.4413 14.17345 23.62242 c 14.764 25.03976 16.29947 25.74843 17.71681 25.74843 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -350.409 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -350.409 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -350.409 Td[<00180017>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -350.409 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -350.409 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -350.409 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130013000f0016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -350.409 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 142.323 -350.409 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -350.409 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -14.173 0 cm 0 G 0 g q 1 0 0 1 138.72 -365.82 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 2 J 3.6024 0.0 m 3.6024 0.1181 l 10.89702 0.1181 15.84119 5.2985 17.72153 9.53163 c 17.77586 9.65211 l 17.8302 9.53163 l 19.71054 5.2985 24.65471 0.1181 31.94934 0.1181 c 31.94934 0.0 l 24.65471 0.0 19.70581 5.13078 17.77586 9.38045 c 15.84355 5.13078 10.89464 0.0 3.6024 0.0 c 3.6024 3.54335 m 3.6024 3.66147 l 7.36546 3.66147 10.53796 5.13078 12.5931 7.47885 c 14.64825 9.82928 15.58844 13.0561 14.88448 16.58293 c 14.4144 18.93335 13.40572 20.12157 12.30492 20.55623 c 11.20647 20.99089 10.00407 20.67198 9.13005 19.97511 c 8.25839 19.2759 7.72452 18.2058 7.95602 17.13806 c 8.18515 16.07268 9.18202 14.99315 11.41435 14.2892 c 11.51591 14.25612 l 11.43561 14.18762 l 9.88597 12.87657 8.3765 12.81279 7.17175 13.46477 c 5.96938 14.11674 5.06937 15.47504 4.69612 16.99396 c 4.32289 18.51288 4.4788 20.19952 5.40242 21.50821 c 6.32133 22.8098 8.0009 23.72398 10.64426 23.7358 c 11.87735 30.82254 23.67438 30.82254 24.90747 23.7358 c 27.55083 23.72398 29.2304 22.8098 30.14693 21.50821 c 31.07057 20.19952 31.22649 18.51288 30.85562 16.99396 c 30.48238 15.47504 29.58235 14.11674 28.37761 13.46477 c 27.17523 12.81279 25.66339 12.87657 24.11612 14.18762 c 24.03345 14.25612 l 24.13739 14.2892 l 26.3697 14.99315 27.36421 16.07268 27.59572 17.13806 c 27.82486 18.2058 27.29099 19.2759 26.41931 19.97511 c 25.54765 20.67198 24.34526 20.99089 23.24446 20.55623 c 22.14603 20.12157 21.13734 18.93335 20.66725 16.58293 c 19.9633 13.0561 20.90347 9.82928 22.95863 7.47885 c 25.01378 5.13078 28.18391 3.66147 31.94934 3.66147 c 31.94934 3.54335 l 28.1532 3.54335 24.94765 5.02682 22.86887 7.40324 c 20.79008 9.77731 19.84047 13.04665 20.5515 16.60655 c 21.02632 18.9806 22.05626 20.2137 23.20193 20.66489 c 24.34763 21.11844 25.5949 20.78537 26.49492 20.06488 c 27.39256 19.34676 27.95242 18.23177 27.70909 17.11444 c 27.47287 16.01599 26.45003 14.93408 24.27911 14.22069 c 25.76733 13.00414 27.17996 12.94745 28.32329 13.56871 c 29.48788 14.19943 30.37372 15.52937 30.73985 17.02232 c 31.106 18.51524 30.95245 20.1641 30.05244 21.43971 c 29.15244 22.71532 27.50595 23.62242 24.8626 23.62242 c 24.81299 23.62242 l 24.80354 23.67203 l 23.63423 30.69498 11.91751 30.69498 10.74583 23.67203 c 10.73874 23.62242 l 10.68915 23.62242 l 8.04578 23.62242 6.39929 22.71532 5.4993 21.43971 c 4.59927 20.1641 4.44574 18.51524 4.81187 17.02232 c 5.17566 15.52937 6.06386 14.19943 7.22845 13.56871 c 8.37177 12.94745 9.7844 13.00414 11.27261 14.22069 c 9.1017 14.93408 8.07886 16.01599 7.84027 17.11444 c 7.59932 18.23177 8.15681 19.34676 9.05682 20.06488 c 9.95683 20.78537 11.2041 21.11844 12.3498 20.66489 c 13.49312 20.2137 14.52306 18.9806 14.99786 16.60655 c 15.71127 13.04665 14.76164 9.77731 12.68286 7.40324 c 10.6041 5.02682 7.39616 3.54335 3.6024 3.54335 c 17.77586 18.12784 m 17.71681 18.4751 l 17.24673 21.29561 16.08449 22.4531 14.20178 23.63187 c 14.15927 23.65784 l 14.17816 23.70511 l 15.38055 26.58939 20.17117 26.58939 21.37357 23.70511 c 21.39246 23.65784 l 21.34995 23.63187 l 19.46486 22.4531 18.30501 21.29561 17.83493 18.4751 c 17.77586 18.12784 l 17.77586 18.71367 m 18.27193 21.35939 19.42943 22.55705 21.23892 23.69801 c 20.05544 26.42169 15.49394 26.42169 14.31046 23.69801 c 16.11993 22.55705 17.27744 21.35939 17.77586 18.71367 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -350.409 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -350.409 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.913 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 142.323 -350.409 Td[<00180018>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -350.409 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 142.323 -350.409 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 142.323 -350.409 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130011>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130013000f0016>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 142.323 -350.409 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q BT /F10 15 Tf 207.825 -418.12 Td[<0016>]TJ /F4 15 Tf 22.35 0 Td[<05ee0efe>]TJ ET q 1 0 0 1 28.346 -460.303 cm q 0 G 0 g 0.3985 w q q 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg -28.3468 -28.3468 m -28.3468 -28.3468 m -28.3468 28.3468 l 28.3468 28.3468 l 28.3468 -28.3468 l h 28.3468 28.3468 m f 0 G 0 g Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -460.303 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -25.446 0 cm 0 G 0 g q 1 0 0 1 28.346 -474.593 cm q 0 G 0 g 0.3985 w q 0.79608 0.22745 0.33725 RG 0.79608 0.22745 0.33725 rg 41.69048 13.18745 m 41.53284 12.44907 l 41.65729 11.9637 l 42.0016 11.52399 l 42.37909 11.30412 l 42.59897 10.98885 l 42.55333 10.31683 l 42.17583 9.57843 l 41.57846 9.09306 l 40.52895 8.34222 l 39.77809 7.58722 l 39.57483 6.9152 l 39.0397 6.33444 l 38.01921 6.13118 l 37.26839 5.67487 l 37.06512 5.15633 l 36.64198 4.89084 l 35.87454 4.87425 l 34.88725 4.8452 l 34.57198 4.82861 l 34.39775 5.45502 l 34.43094 5.99013 l 34.69643 6.52112 l 35.16933 6.97745 l 35.74596 7.22633 l 36.37648 7.28856 l 36.87845 7.05624 l 37.23518 6.8364 l 37.50484 6.8198 l 37.75372 7.1973 l 37.87819 7.68265 l 38.30545 8.07259 l 38.7908 8.168 l 39.18076 8.30905 l 39.37158 8.48328 l 39.86937 9.04745 l 40.28004 9.83148 l 40.34227 10.08037 l 40.24687 10.30023 l 39.91914 10.19237 l 39.19734 9.86052 l 38.61658 9.42493 l 38.03581 9.06404 l 37.80351 8.68654 l 37.55048 8.06013 l 37.12735 7.63702 l 36.42212 7.4462 l 35.84137 7.66605 l 35.38919 7.90251 l 34.45998 8.1514 l 33.17815 8.48328 l 32.68864 9.07649 l 32.67621 9.48717 l 32.86288 9.87709 l 33.24039 10.238 l 34.13226 10.64455 l 34.87065 10.61551 l 35.46387 10.20482 l 35.57588 9.67384 l 35.54268 9.29634 l 35.76254 9.03085 l 35.93677 9.09306 l 36.06122 9.40834 l 36.40552 9.56598 l 36.7374 9.56598 l 36.95311 9.53279 l 37.39284 9.83148 l 37.86574 10.238 l 38.16441 10.59892 l 38.41331 11.05522 l 38.49213 11.34975 l 38.35109 11.47835 l 37.48824 11.50739 l 36.67102 11.46175 l 35.71692 11.44516 l 34.71303 11.19626 l 33.60127 10.83536 l 31.95439 10.03474 l 30.49419 9.48717 l 28.34537 9.20508 l 27.48668 9.23412 l 26.9059 9.34613 l 26.545 9.32954 l 26.37077 9.18848 l 26.0721 8.84416 l 25.61993 8.48328 l 25.13458 8.32564 l 24.69485 8.34222 l 24.35056 8.12236 l 24.13069 7.84027 l 23.31348 6.8198 l 22.54605 6.14778 l 21.44673 5.95695 l 20.06949 5.8325 l 18.62589 5.47159 l 17.18227 4.96965 l 16.0249 4.26443 l 15.02101 3.45137 l 14.6601 2.82085 l 14.34483 2.06999 l 13.83043 1.67589 l 13.01321 1.63026 l 12.35364 1.4104 l 11.9637 0.73839 l 11.17967 0.36089 l 9.57843 0.0 l 9.17189 0.50194 l 9.09306 1.08269 l 9.43738 1.8833 l 10.20897 2.47653 l 10.81877 2.6798 l 11.33731 2.44748 l 11.66502 2.25667 l 11.8683 2.17784 l 12.12134 2.3811 l 12.3246 2.83743 l 12.44907 3.26056 l 12.48222 3.41818 l 13.45294 3.66708 l 14.48587 4.09023 l 15.05005 4.72075 l 15.53955 5.69147 l 15.91289 6.50452 l 16.51025 7.24294 l 17.19887 7.47939 l 17.85844 7.33833 l 18.15714 7.13507 l 18.377 7.18071 l 19.16103 7.72829 l 19.94505 8.35466 l 20.27275 8.98521 l 20.58803 9.75266 l 20.50923 10.01814 l 20.14832 10.01814 l 19.06561 9.29634 l 18.17372 8.68654 l 17.19887 8.60771 l 16.14934 8.45009 l 15.17863 7.9191 l 14.34483 7.36737 l 14.00053 6.8364 l 13.26627 6.66216 l 12.37024 6.13118 l 11.66502 5.42598 l 11.19626 4.79958 l 10.92662 4.24785 l 10.47446 3.70027 l 9.84807 3.43477 l 9.03085 3.35597 l 8.5621 2.94943 l 8.24683 2.8706 l 7.98134 2.45993 l 7.52502 2.4309 l 6.71194 1.8045 l 5.97354 1.427 l 5.42598 2.09901 l 5.33057 2.83743 l 5.45502 3.385 l 5.92792 3.90353 l 6.4921 4.40549 l 7.03966 4.62535 l 7.4462 4.60875 l 7.76147 4.4677 l 8.02696 4.21881 l 8.45009 4.26443 l 8.73218 4.40549 l 8.8898 4.60875 l 8.82759 4.79958 l 8.93542 5.0941 l 9.18848 5.28493 l 10.47446 5.87813 l 11.20871 6.36348 l 11.64844 6.77417 l 11.88489 7.50842 l 12.38683 8.66994 l 12.74773 9.09306 l 13.65622 9.43738 l 14.45683 9.75266 l 15.16205 10.00156 l 15.34872 10.2214 l 15.75525 11.76044 l 16.49365 13.34094 l 17.24864 15.00441 l 18.09491 16.17838 l 17.53073 16.27379 l 16.79233 15.3653 l 16.61812 14.51906 l 16.08713 13.17085 l 15.3819 11.80608 l 14.44025 10.80217 l 13.18745 9.69043 l 11.76044 8.92299 l 11.28754 8.84416 l 12.66891 9.67384 l 13.35753 10.36246 l 14.11252 11.11745 l 14.44025 11.88489 l 12.69795 10.6321 l 11.6028 9.9891 l 10.35 9.71947 l 9.06404 9.69043 l 8.43349 9.91028 l 9.42493 10.08037 l 10.881 10.6321 l 11.8517 11.25848 l 12.49467 11.78947 l 11.20871 11.47835 l 9.86052 11.2419 l 8.32564 10.84781 l 6.45891 10.31683 l 5.40938 9.89369 l 6.35104 10.80217 l 7.62042 11.64844 l 8.5621 12.00932 l 6.31784 11.82266 l 5.62924 11.66502 l 4.43866 11.52399 l 3.01166 11.61938 l 2.11562 11.80608 l 1.09927 12.13379 l 0.53096 12.44907 l 1.4104 12.35364 l 2.08658 12.33705 l 3.26056 12.43246 l 1.99117 12.87218 l 1.09927 13.21649 l 0.28206 13.53175 l 0.0 13.6894 l 1.0495 13.53175 l 1.94554 13.40317 l 3.5136 13.63962 l 2.7752 13.79724 l 2.06999 13.97148 l 1.53487 14.22038 l 0.95824 14.5481 l 0.87943 14.6269 l 1.94554 14.50247 l 2.99506 14.76797 l 4.24785 15.24088 l 5.40938 15.56859 l 6.5377 15.66399 l 7.16411 15.61421 l 7.2927 15.6308 l 6.38008 16.03735 l 5.64583 16.14934 l 4.60875 16.03735 l 6.01917 16.46046 l 6.77417 16.58907 l 7.96474 16.60152 l 9.15529 16.43143 l 8.07672 16.7467 l 7.18071 17.16983 l 6.80319 17.49754 l 7.25952 17.3565 l 7.84027 17.21545 l 8.62431 17.18227 l 8.85661 17.29428 l 8.28001 17.7174 l 7.96474 18.12395 l 7.90251 18.40602 l 8.5289 18.24838 l 9.91028 18.10735 l 11.44516 18.28157 l 13.40732 18.97018 l 14.70573 19.52191 l 16.05394 19.77081 l 17.23204 19.87868 l 18.59685 19.52191 l 19.50533 19.25227 l 20.30594 18.64249 l 20.77472 18.3438 l 21.874 18.75032 l 23.18901 19.19005 l 24.66168 18.90797 l 27.06354 19.17346 l 29.11694 19.84964 l 30.74724 21.18124 l 31.70134 22.48381 l 31.84239 22.8613 l 32.04565 23.06458 l 31.40683 22.93597 l 31.78017 23.39229 l 31.09155 23.40887 l 30.82607 23.54993 l 31.40683 23.83202 l 31.79675 23.91083 l 32.01662 24.52063 l 32.15767 25.1014 l 32.4688 25.44571 l 32.73842 25.61993 l 32.23648 25.7112 l 32.11203 25.8232 l 32.32774 25.86884 l 32.58078 25.98082 l 32.86288 26.16751 l 33.0039 26.1841 l 32.97073 26.38737 l 32.48537 26.545 l 31.87558 26.96812 l 31.78017 27.07599 l 32.34433 26.95154 l 33.02051 27.04694 l 33.85017 26.93495 l 34.47658 26.59064 l 35.0117 26.2007 l 35.67128 25.88542 l 35.82477 25.85223 l 35.88698 26.02646 l 35.77914 26.26291 l 35.244 26.51181 l 35.41823 26.59064 l 35.6049 26.545 l 35.85796 26.52841 l 35.99901 26.46619 l 35.87454 26.74828 l 35.57588 27.03035 l 35.3726 27.1714 l 35.88698 27.01376 l 36.31012 26.87273 l 36.57976 26.76486 l 36.16907 27.06354 l 35.79573 27.48668 l 35.57588 28.20433 l 35.59245 28.58182 l 35.81233 28.1421 l 36.2811 27.64015 l 37.04852 27.31244 l 37.20615 27.29585 l 36.9863 27.64015 l 36.9863 28.00107 l 37.14394 27.70238 l 37.62929 27.39125 l 38.01921 27.25021 l 38.36769 26.96812 l 38.7908 26.68605 l 38.6954 27.26682 l 38.63318 27.5323 l 38.80325 28.1255 l 38.86963 28.20433 l 38.96089 27.68994 l 39.15172 27.29585 l 39.3218 27.18799 l 39.57483 27.73557 l 39.82373 27.93884 l 39.77809 27.49911 l 39.84032 27.10918 l 40.08923 26.85612 l 40.43768 26.91835 l 41.61165 27.43689 l 45.37418 26.38737 l 45.57744 26.21315 l 46.8966 25.33784 l 47.7719 25.85223 l 47.70967 24.4584 l 48.22821 24.01868 l 48.54349 23.70755 l 48.73016 23.45451 l 48.8546 23.09361 l 49.01224 22.8613 l 49.33997 23.15584 l 49.45197 23.36327 l 49.40218 23.70755 l 49.79628 23.93987 l 50.29822 24.27173 l 50.40607 24.33395 l 50.42267 23.8486 l 50.01613 22.68707 l 49.51419 22.18513 l 49.15329 21.88644 l 49.04543 21.80765 l 49.62202 21.77861 l 50.124 21.98187 l 50.73793 21.91963 l 50.89142 21.84082 l 50.28163 21.76201 l 50.01613 21.54214 l 50.29822 21.52556 l 50.70474 21.54214 l 50.51807 21.27666 l 49.98294 21.01117 l 49.31091 21.01117 l 48.97905 21.07338 l 49.19891 20.89915 l 49.481 20.75812 l 49.68427 20.6793 l 49.05788 20.61707 l 48.57253 20.91576 l 48.36925 20.80374 l 48.43147 20.53824 l 48.52689 20.23958 l 48.66792 19.87868 l 48.68452 19.4431 l 48.32361 19.0822 l 47.80508 18.46825 l 47.58522 17.95386 l 46.97542 15.82164 l 46.73897 15.05005 l 46.92564 14.48587 l 46.84682 14.23698 l 45.9093 13.09204 l 45.13773 12.90536 l 44.37029 12.96759 l 43.68166 13.37413 l 43.28758 13.9383 l 43.50743 14.42366 l 43.66505 14.68915 l 43.58626 15.14545 l 43.56967 15.78844 l 43.64847 16.16594 l 43.30417 17.59296 l 43.16312 17.85844 l 42.88103 18.50143 l 42.78563 19.20665 l 42.73999 19.84964 l 42.71097 20.06949 l 42.45792 20.00726 l 42.27124 19.47214 l 42.33347 18.95361 l 41.89374 18.04512 l 41.70706 17.2611 l 41.78589 16.32358 l 41.59506 15.3819 l 41.35861 14.64351 l 41.48721 14.2992 l 41.78589 13.6728 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -460.303 cm Q Q Q Q Q q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg q 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -460.303 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 18.823 -24.916 cm 0.29805 0.13333 0.10588 RG 0.29805 0.13333 0.10588 rg BT /F12 7.5 Tf 28.346 -460.303 Td[<00180019>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -460.303 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 28.346 -460.303 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.881 3.641 cm 0 G 0 g BT /F2 7.5 Tf 28.346 -460.303 Td[<097a011f>]TJ /F1 7.5 Tf 15 0 Td[<001200130014>]TJ /F2 7.5 Tf -15 -11.7 Td[<06da011f>]TJ /F1 7.5 Tf 15 0 Td[<0017001a>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 28.346 -460.303 cm Q Q Q Q Q q 0.93333 0.87059 0.6902 RG 0.93333 0.87059 0.6902 rg 28.3468 -28.3468 m 28.3468 -28.3468 m 28.3468 28.3468 l 79.37119 28.3468 l 79.37119 -28.3468 l h 79.37119 28.3468 m S Q Q n Q Q q 1 0 0 1 163.776 -599.965 cm q 0 G 0 g 0.3985 w q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -20.025 0 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 163.776 -620.039 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.0 40.0999 m 0.0 29.99991 l 3.99997 29.99991 l 3.99997 24.09993 l 0.0 24.09993 l 0.0 13.99995 l 6.09998 13.99995 l 6.09998 16.09995 l 2.09998 16.09995 l 2.09998 21.99992 l 9.99995 21.99992 l 9.99995 10.09996 l 0.0 10.09996 l 0.0 0.04997 l 0.09998 0.04997 l 0.09998 9.99995 l 10.09996 9.99995 l 10.09996 22.09993 l 1.99998 22.09993 l 1.99998 15.99994 l 5.99997 15.99994 l 5.99997 14.09995 l 0.09998 14.09995 l 0.09998 23.99994 l 4.09998 23.99994 l 4.09998 30.09991 l 0.09998 30.09991 l 0.09998 39.9999 l 9.99995 39.9999 l 9.99995 35.99991 l 16.09995 35.99991 l 16.09995 39.9999 l 25.99992 39.9999 l 25.99992 34.0999 l 24.09993 34.0999 l 24.09993 38.09988 l 17.99994 38.09988 l 17.99994 29.99991 l 30.09991 29.99991 l 30.09991 39.9999 l 40.0499 39.9999 l 40.0499 40.0999 l 29.99991 40.0999 l 29.99991 30.09991 l 18.09995 30.09991 l 18.09995 37.9999 l 23.99994 37.9999 l 23.99994 33.99991 l 26.09991 33.99991 l 26.09991 40.0999 l 15.99994 40.0999 l 15.99994 36.0999 l 10.09996 36.0999 l 10.09996 40.0999 l 0.0 40.0999 l 1.99998 38.09988 m 1.99998 32.04991 l 1.99998 31.99991 l 8.09998 31.99991 l 8.09998 38.09988 l 1.99998 38.09988 l 31.99991 38.09988 m 31.99991 28.09991 l 16.09995 28.09991 l 16.09995 34.0999 l 9.99995 34.0999 l 9.99995 30.09991 l 5.99997 30.09991 l 5.99997 23.99994 l 11.99995 23.99994 l 11.99995 8.09998 l 1.99998 8.09998 l 1.99998 0.04997 l 2.09998 0.04997 l 2.09998 7.99995 l 12.09996 7.99995 l 12.09996 24.09993 l 6.09998 24.09993 l 6.09998 29.99991 l 10.09996 29.99991 l 10.09996 33.99991 l 15.99994 33.99991 l 15.99994 27.99992 l 32.09991 27.99992 l 32.09991 37.9999 l 40.0499 37.9999 l 40.0499 38.09988 l 31.99991 38.09988 l 2.09998 37.9999 m 7.99995 37.9999 l 7.99995 32.09991 l 2.09998 32.09991 l 2.09998 37.9999 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 163.776 -599.965 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 120.425 0 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 203.825 -620.039 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.0 0.04997 m 0.0 40.0999 l -40.0499 40.0999 l -40.0499 39.9999 l -0.09998 39.9999 l -0.09998 0.04997 l 0.0 0.04997 l -1.99998 0.04997 m -1.99998 38.09988 l -40.0499 38.09988 l -40.0499 37.9999 l -2.09998 37.9999 l -2.09998 0.04997 l -1.99998 0.04997 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 163.776 -599.965 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -20.025 -32.448 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 163.776 -579.89 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.0 -0.04997 m 0.0 -40.0999 l 40.0499 -40.0999 l 40.0499 -39.9999 l 0.09998 -39.9999 l 0.09998 -0.04997 l 0.0 -0.04997 l 1.99998 -0.04997 m 1.99998 -38.09988 l 40.0499 -38.09988 l 40.0499 -37.9999 l 2.09998 -37.9999 l 2.09998 -0.04997 l 1.99998 -0.04997 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 163.776 -599.965 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 120.425 -32.448 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 203.825 -579.89 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.0 -40.0999 m 0.0 -29.99991 l -3.99997 -29.99991 l -3.99997 -24.09993 l 0.0 -24.09993 l 0.0 -13.99995 l -6.09998 -13.99995 l -6.09998 -16.09995 l -2.09998 -16.09995 l -2.09998 -21.99992 l -9.99995 -21.99992 l -9.99995 -10.09996 l 0.0 -10.09996 l 0.0 -0.04997 l -0.09998 -0.04997 l -0.09998 -9.99995 l -10.09996 -9.99995 l -10.09996 -22.09993 l -1.99998 -22.09993 l -1.99998 -15.99994 l -5.99997 -15.99994 l -5.99997 -14.09995 l -0.09998 -14.09995 l -0.09998 -23.99994 l -4.09998 -23.99994 l -4.09998 -30.09991 l -0.09998 -30.09991 l -0.09998 -39.9999 l -9.99995 -39.9999 l -9.99995 -35.99991 l -16.09995 -35.99991 l -16.09995 -39.9999 l -25.99992 -39.9999 l -25.99992 -34.0999 l -24.09993 -34.0999 l -24.09993 -38.09988 l -17.99994 -38.09988 l -17.99994 -29.99991 l -30.09991 -29.99991 l -30.09991 -39.9999 l -40.0499 -39.9999 l -40.0499 -40.0999 l -29.99991 -40.0999 l -29.99991 -30.09991 l -18.09995 -30.09991 l -18.09995 -37.9999 l -23.99994 -37.9999 l -23.99994 -33.99991 l -26.09991 -33.99991 l -26.09991 -40.0999 l -15.99994 -40.0999 l -15.99994 -36.0999 l -10.09996 -36.0999 l -10.09996 -40.0999 l 0.0 -40.0999 l -1.99998 -38.09988 m -1.99998 -32.04991 l -1.99998 -31.99991 l -8.09998 -31.99991 l -8.09998 -38.09988 l -1.99998 -38.09988 l -31.99991 -38.09988 m -31.99991 -28.09991 l -16.09995 -28.09991 l -16.09995 -34.0999 l -9.99995 -34.0999 l -9.99995 -30.09991 l -5.99997 -30.09991 l -5.99997 -23.99994 l -11.99995 -23.99994 l -11.99995 -8.09998 l -1.99998 -8.09998 l -1.99998 -0.04997 l -2.09998 -0.04997 l -2.09998 -7.99995 l -12.09996 -7.99995 l -12.09996 -24.09993 l -6.09998 -24.09993 l -6.09998 -29.99991 l -10.09996 -29.99991 l -10.09996 -33.99991 l -15.99994 -33.99991 l -15.99994 -27.99992 l -32.09991 -27.99992 l -32.09991 -37.9999 l -40.0499 -37.9999 l -40.0499 -38.09988 l -31.99991 -38.09988 l -2.09998 -37.9999 m -7.99995 -37.9999 l -7.99995 -32.09991 l -2.09998 -32.09991 l -2.09998 -37.9999 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 163.776 -599.965 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 2.5 0 0 1 -224.942 18.975 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 163.726 -601.015 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.04997 2.09998 m 0.04997 1.99998 l 40.0499 1.99998 l 40.0499 2.09998 l 0.04997 2.09998 l 0.04997 0.09998 m 0.04997 0.0 l 40.0499 0.0 l 40.0499 0.09998 l 0.04997 0.09998 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 163.776 -599.965 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 2.5 0 0 1 -224.942 -51.423 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 163.726 -601.015 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 0.04997 2.09998 m 0.04997 1.99998 l 40.0499 1.99998 l 40.0499 2.09998 l 0.04997 2.09998 l 0.04997 0.09998 m 0.04997 0.0 l 40.0499 0.0 l 40.0499 0.09998 l 0.04997 0.09998 l B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm Q Q Q Q 0 G 0 g Q q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 163.776 -599.965 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 55.225 -20.769 cm 0 G 0 g BT /F6 15 Tf 163.776 -599.965 Td[<05800fc3>]TJ ET Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 163.776 -599.965 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g Q
+
+endstream
+endobj
+60 0 obj
+<</Length 171895>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.213 -731.023 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<001a>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F4 15 Tf 106.32 2.88 Td[<06b80a63>]TJ /F10 15 Tf 33.75 0 Td[<0022>]TJ /F4 15 Tf 25.485 0 Td[<052e0e6411cf07530ffe0ce4>]TJ /F8 15 Tf 93.75 0 Td[<002b004d002b005100480051006d006000620058006200690076>]TJ /F2 10.5 Tf -238.305 -26.741 Td[<1183>-37<0d5e>-37<0ee1>-37<0431>-38<08a0>-37<112a>-37<105b>-38<0c2d>-37<1253>-37<05a5>-38<1042>-37<06f1>-37<07a1>-38<0407>-37<0a140111>-37<0ce4>-38<0935>-37<0c7c>-37<1231>]TJ ET 0 1 0 0 K 0 1 0 0 k BT /F7 10.5 Tf 241.987 -23.861 Td[<003f006900690054002c006600660076004800230051005100460058002b0051004b0066002b004b006200660072003200230066002b003f006d001c004d00690051004d003b00620032002b001c00420066>]TJ -241.987 -16.38 Td[<002b003f006d001c004d00690051004d003b00620032002b001c00420058003f0069004b>]TJ ET 0 G 0 g BT /F2 10.5 Tf 99.225 -40.241 Td[<0062>]TJ -78.225 -16.38 Td[<06cb0f860ea910b6>]TJ ET 0 1 0 0 K 0 1 0 0 k BT /F6 10.5 Tf 63 -56.621 Td[<060a21c4>]TJ ET 0 G 0 g BT /F2 10.5 Tf 84 -56.621 Td[<011108460cc60a140cd8119e0ce40111105b08230e340702064e0e3811cf0ed305a50ffe0ce40b0004eb0062>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.702 0.655 RG 1 0.702 0.655 rg q .398 -88.05 26.978 12.876 re f Q 0 G 0 g 1 0.702 0.655 RG 1 0.702 0.655 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -74.974 m 27.775 -74.974 l S Q q .3985 w .199 -88.249 m .199 -74.974 l S Q q .3985 w 27.575 -88.249 m 27.575 -74.974 l S Q q .3985 w 0 -88.249 m 27.775 -88.249 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -84.956 Td[<067807a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.929 0.341 0.212 RG 0.929 0.341 0.212 rg q 85.923 -88.05 26.978 12.876 re f Q 0 G 0 g 0.929 0.341 0.212 RG 0.929 0.341 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -74.974 m 113.299 -74.974 l S Q q .3985 w 85.724 -88.249 m 85.724 -74.974 l S Q q .3985 w 113.1 -88.249 m 113.1 -74.974 l S Q q .3985 w 85.525 -88.249 m 113.299 -88.249 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -84.956 Td[<17760ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0 0.337 RG 0.941 0 0.337 rg q 171.448 -88.05 26.978 12.876 re f Q 0 G 0 g 0.941 0 0.337 RG 0.941 0 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -74.974 m 198.824 -74.974 l S Q q .3985 w 171.248 -88.249 m 171.248 -74.974 l S Q q .3985 w 198.624 -88.249 m 198.624 -74.974 l S Q q .3985 w 171.049 -88.249 m 198.824 -88.249 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -84.956 Td[<0bd607a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.957 0.475 0.514 RG 0.957 0.475 0.514 rg q 256.972 -88.05 26.978 12.876 re f Q 0 G 0 g 0.957 0.475 0.514 RG 0.957 0.475 0.514 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -74.974 m 284.348 -74.974 l S Q q .3985 w 256.773 -88.249 m 256.773 -74.974 l S Q q .3985 w 284.149 -88.249 m 284.149 -74.974 l S Q q .3985 w 256.574 -88.249 m 284.348 -88.249 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -84.956 Td[<0e2507a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.859 0.353 0.42 RG 0.859 0.353 0.42 rg q 342.497 -88.05 26.978 12.876 re f Q 0 G 0 g 0.859 0.353 0.42 RG 0.859 0.353 0.42 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -74.974 m 369.873 -74.974 l S Q q .3985 w 342.297 -88.249 m 342.297 -74.974 l S Q q .3985 w 369.673 -88.249 m 369.673 -74.974 l S Q q .3985 w 342.098 -88.249 m 369.873 -88.249 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -84.956 Td[<075a0e1707a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.949 0.047 0 RG 0.949 0.047 0 rg q 428.021 -88.05 26.978 12.876 re f Q 0 G 0 g 0.949 0.047 0 RG 0.949 0.047 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -74.974 m 455.397 -74.974 l S Q q .3985 w 427.822 -88.249 m 427.822 -74.974 l S Q q .3985 w 455.198 -88.249 m 455.198 -74.974 l S Q q .3985 w 427.623 -88.249 m 455.397 -88.249 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -84.956 Td[<0d460a3a07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.788 0.216 0.337 RG 0.788 0.216 0.337 rg q .398 -104.43 26.978 12.876 re f Q 0 G 0 g 0.788 0.216 0.337 RG 0.788 0.216 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -91.354 m 27.775 -91.354 l S Q q .3985 w .199 -104.629 m .199 -91.354 l S Q q .3985 w 27.575 -104.629 m 27.575 -91.354 l S Q q .3985 w 0 -104.629 m 27.775 -104.629 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -101.336 Td[<10880e250ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.337 0.329 RG 0.941 0.337 0.329 rg q 85.923 -104.43 26.978 12.876 re f Q 0 G 0 g 0.941 0.337 0.329 RG 0.941 0.337 0.329 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -91.354 m 113.299 -91.354 l S Q q .3985 w 85.724 -104.629 m 85.724 -91.354 l S Q q .3985 w 113.1 -104.629 m 113.1 -91.354 l S Q q .3985 w 85.525 -104.629 m 113.299 -104.629 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -101.336 Td[<107f07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.129 0.129 RG 1 0.129 0.129 rg q 171.448 -104.43 26.978 12.876 re f Q 0 G 0 g 1 0.129 0.129 RG 1 0.129 0.129 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -91.354 m 198.824 -91.354 l S Q q .3985 w 171.248 -104.629 m 171.248 -91.354 l S Q q .3985 w 198.624 -104.629 m 198.624 -91.354 l S Q q .3985 w 171.049 -104.629 m 198.824 -104.629 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -101.336 Td[<057607a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.549 0.263 0.337 RG 0.549 0.263 0.337 rg q 256.972 -104.43 26.978 12.876 re f Q 0 G 0 g 0.549 0.263 0.337 RG 0.549 0.263 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -91.354 m 284.348 -91.354 l S Q q .3985 w 256.773 -104.629 m 256.773 -91.354 l S Q q .3985 w 284.149 -104.629 m 284.149 -91.354 l S Q q .3985 w 256.574 -104.629 m 284.348 -104.629 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -101.336 Td[<17e5122c>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.784 0.235 0.137 RG 0.784 0.235 0.137 rg q 342.497 -104.43 26.978 12.876 re f Q 0 G 0 g 0.784 0.235 0.137 RG 0.784 0.235 0.137 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -91.354 m 369.873 -91.354 l S Q q .3985 w 342.297 -104.629 m 342.297 -91.354 l S Q q .3985 w 369.673 -104.629 m 369.673 -91.354 l S Q q .3985 w 342.098 -104.629 m 369.873 -104.629 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -101.336 Td[<17eb07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.616 0.161 0.2 RG 0.616 0.161 0.2 rg q 428.021 -104.43 26.978 12.876 re f Q 0 G 0 g 0.616 0.161 0.2 RG 0.616 0.161 0.2 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -91.354 m 455.397 -91.354 l S Q q .3985 w 427.822 -104.629 m 427.822 -91.354 l S Q q .3985 w 455.198 -104.629 m 455.198 -91.354 l S Q q .3985 w 427.623 -104.629 m 455.397 -104.629 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -101.336 Td[<198911ab>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.298 0 RG 1 0.298 0 rg q .398 -120.81 26.978 12.876 re f Q 0 G 0 g 1 0.298 0 RG 1 0.298 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -107.734 m 27.775 -107.734 l S Q q .3985 w .199 -121.009 m .199 -107.734 l S Q q .3985 w 27.575 -121.009 m 27.575 -107.734 l S Q q .3985 w 0 -121.009 m 27.775 -121.009 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -117.716 Td[<11eb07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.306 0.125 RG 1 0.306 0.125 rg q 85.923 -120.81 26.978 12.876 re f Q 0 G 0 g 1 0.306 0.125 RG 1 0.306 0.125 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -107.734 m 113.299 -107.734 l S Q q .3985 w 85.724 -121.009 m 85.724 -107.734 l S Q q .3985 w 113.1 -121.009 m 113.1 -107.734 l S Q q .3985 w 85.525 -121.009 m 113.299 -121.009 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -117.716 Td[<0585>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.953 0.325 0.212 RG 0.953 0.325 0.212 rg q 171.448 -120.81 26.978 12.876 re f Q 0 G 0 g 0.953 0.325 0.212 RG 0.953 0.325 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -107.734 m 198.824 -107.734 l S Q q .3985 w 171.248 -121.009 m 171.248 -107.734 l S Q q .3985 w 198.624 -121.009 m 198.624 -107.734 l S Q q .3985 w 171.049 -121.009 m 198.824 -121.009 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -117.716 Td[<0e5f>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.796 0.227 0.337 RG 0.796 0.227 0.337 rg q 256.972 -120.81 26.978 12.876 re f Q 0 G 0 g 0.796 0.227 0.337 RG 0.796 0.227 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -107.734 m 284.348 -107.734 l S Q q .3985 w 256.773 -121.009 m 256.773 -107.734 l S Q q .3985 w 284.149 -121.009 m 284.149 -107.734 l S Q q .3985 w 256.574 -121.009 m 284.348 -121.009 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -117.716 Td[<14150ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.176 0.318 RG 1 0.176 0.318 rg q 342.497 -120.81 26.978 12.876 re f Q 0 G 0 g 1 0.176 0.318 RG 1 0.176 0.318 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -107.734 m 369.873 -107.734 l S Q q .3985 w 342.297 -121.009 m 342.297 -107.734 l S Q q .3985 w 369.673 -121.009 m 369.673 -107.734 l S Q q .3985 w 342.098 -121.009 m 369.873 -121.009 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -117.716 Td[<080507a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.788 0.122 0.216 RG 0.788 0.122 0.216 rg q 428.021 -120.81 26.978 12.876 re f Q 0 G 0 g 0.788 0.122 0.216 RG 0.788 0.122 0.216 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -107.734 m 455.397 -107.734 l S Q q .3985 w 427.822 -121.009 m 427.822 -107.734 l S Q q .3985 w 455.198 -121.009 m 455.198 -107.734 l S Q q .3985 w 427.623 -121.009 m 455.397 -121.009 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -117.716 Td[<078c0505>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.937 0.478 0.51 RG 0.937 0.478 0.51 rg q .398 -137.19 26.978 12.876 re f Q 0 G 0 g 0.937 0.478 0.51 RG 0.937 0.478 0.51 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -124.114 m 27.775 -124.114 l S Q q .3985 w .199 -137.389 m .199 -124.114 l S Q q .3985 w 27.575 -137.389 m 27.575 -124.114 l S Q q .3985 w 0 -137.389 m 27.775 -137.389 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -134.096 Td[<17a607a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0 0.592 RG 1 0 0.592 rg q 85.923 -137.19 26.978 12.876 re f Q 0 G 0 g 1 0 0.592 RG 1 0 0.592 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -124.114 m 113.299 -124.114 l S Q q .3985 w 85.724 -137.389 m 85.724 -124.114 l S Q q .3985 w 113.1 -137.389 m 113.1 -124.114 l S Q q .3985 w 85.525 -137.389 m 113.299 -137.389 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -134.096 Td[<101c07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.2 0 RG 1 0.2 0 rg q 171.448 -137.19 26.978 12.876 re f Q 0 G 0 g 1 0.2 0 RG 1 0.2 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -124.114 m 198.824 -124.114 l S Q q .3985 w 171.248 -137.389 m 171.248 -124.114 l S Q q .3985 w 198.624 -137.389 m 198.624 -124.114 l S Q q .3985 w 171.049 -137.389 m 198.824 -137.389 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -134.096 Td[<1000>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.765 0.153 0.169 RG 0.765 0.153 0.169 rg q 256.972 -137.19 26.978 12.876 re f Q 0 G 0 g 0.765 0.153 0.169 RG 0.765 0.153 0.169 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -124.114 m 284.348 -124.114 l S Q q .3985 w 256.773 -137.389 m 256.773 -124.114 l S Q q .3985 w 284.149 -137.389 m 284.149 -124.114 l S Q q .3985 w 256.574 -137.389 m 284.348 -137.389 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -134.096 Td[<0505>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.663 0.506 0.459 RG 0.663 0.506 0.459 rg q 342.497 -137.19 26.978 12.876 re f Q 0 G 0 g 0.663 0.506 0.459 RG 0.663 0.506 0.459 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -124.114 m 369.873 -124.114 l S Q q .3985 w 342.297 -137.389 m 342.297 -124.114 l S Q q .3985 w 369.673 -137.389 m 369.673 -124.114 l S Q q .3985 w 342.098 -137.389 m 369.873 -137.389 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -134.096 Td[<17f2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.765 0.129 0.212 RG 0.765 0.129 0.212 rg q 428.021 -137.19 26.978 12.876 re f Q 0 G 0 g 0.765 0.129 0.212 RG 0.765 0.129 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -124.114 m 455.397 -124.114 l S Q q .3985 w 427.822 -137.389 m 427.822 -124.114 l S Q q .3985 w 455.198 -137.389 m 455.198 -124.114 l S Q q .3985 w 427.623 -137.389 m 455.397 -137.389 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -134.096 Td[<112907a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.702 0.427 0.38 RG 0.702 0.427 0.38 rg q .398 -153.57 26.978 12.876 re f Q 0 G 0 g 0.702 0.427 0.38 RG 0.702 0.427 0.38 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -140.494 m 27.775 -140.494 l S Q q .3985 w .199 -153.769 m .199 -140.494 l S Q q .3985 w 27.575 -153.769 m 27.575 -140.494 l S Q q .3985 w 0 -153.769 m 27.775 -153.769 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -150.476 Td[<0e07>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.745 0 0.184 RG 0.745 0 0.184 rg q 85.923 -153.57 26.978 12.876 re f Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -140.494 m 113.299 -140.494 l S Q q .3985 w 85.724 -153.769 m 85.724 -140.494 l S Q q .3985 w 113.1 -153.769 m 113.1 -140.494 l S Q q .3985 w 85.525 -153.769 m 113.299 -153.769 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -150.476 Td[<107a07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 171.448 -153.57 26.978 12.876 re f Q 0 G 0 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -140.494 m 198.824 -140.494 l S Q q .3985 w 171.248 -153.769 m 171.248 -140.494 l S Q q .3985 w 198.624 -153.769 m 198.624 -140.494 l S Q q .3985 w 171.049 -153.769 m 198.824 -153.769 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -150.476 Td[<1cfe07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.976 0.565 0.435 RG 0.976 0.565 0.435 rg q 256.972 -153.57 26.978 12.876 re f Q 0 G 0 g 0.976 0.565 0.435 RG 0.976 0.565 0.435 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -140.494 m 284.348 -140.494 l S Q q .3985 w 256.773 -153.769 m 256.773 -140.494 l S Q q .3985 w 284.149 -153.769 m 284.149 -140.494 l S Q q .3985 w 256.574 -153.769 m 284.348 -153.769 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -150.476 Td[<1cfe0ffe>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.945 0.263 RG 1 0.945 0.263 rg q 342.497 -153.57 26.978 12.876 re f Q 0 G 0 g 1 0.945 0.263 RG 1 0.945 0.263 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -140.494 m 369.873 -140.494 l S Q q .3985 w 342.297 -153.769 m 342.297 -140.494 l S Q q .3985 w 369.673 -153.769 m 369.673 -140.494 l S Q q .3985 w 342.098 -153.769 m 369.873 -153.769 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -150.476 Td[<062b07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.98 1 0.447 RG 0.98 1 0.447 rg q 428.021 -153.57 26.978 12.876 re f Q 0 G 0 g 0.98 1 0.447 RG 0.98 1 0.447 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -140.494 m 455.397 -140.494 l S Q q .3985 w 427.822 -153.769 m 427.822 -140.494 l S Q q .3985 w 455.198 -153.769 m 455.198 -140.494 l S Q q .3985 w 427.623 -153.769 m 455.397 -153.769 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -150.476 Td[<0fe507db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.918 1 0.337 RG 0.918 1 0.337 rg q .398 -169.95 26.978 12.876 re f Q 0 G 0 g 0.918 1 0.337 RG 0.918 1 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -156.874 m 27.775 -156.874 l S Q q .3985 w .199 -170.149 m .199 -156.874 l S Q q .3985 w 27.575 -170.149 m 27.575 -156.874 l S Q q .3985 w 0 -170.149 m 27.775 -170.149 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -166.856 Td[<108804a40ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.651 0.192 RG 1 0.651 0.192 rg q 85.923 -169.95 26.978 12.876 re f Q 0 G 0 g 1 0.651 0.192 RG 1 0.651 0.192 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -156.874 m 113.299 -156.874 l S Q q .3985 w 85.724 -170.149 m 85.724 -156.874 l S Q q .3985 w 113.1 -170.149 m 113.1 -156.874 l S Q q .3985 w 85.525 -170.149 m 113.299 -170.149 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -166.856 Td[<0f9e07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.549 0.192 RG 1 0.549 0.192 rg q 171.448 -169.95 26.978 12.876 re f Q 0 G 0 g 1 0.549 0.192 RG 1 0.549 0.192 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -156.874 m 198.824 -156.874 l S Q q .3985 w 171.248 -170.149 m 171.248 -156.874 l S Q q .3985 w 198.624 -170.149 m 198.624 -156.874 l S Q q .3985 w 171.049 -170.149 m 198.824 -170.149 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -166.856 Td[<0f9e07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.537 0.212 RG 1 0.537 0.212 rg q 256.972 -169.95 26.978 12.876 re f Q 0 G 0 g 1 0.537 0.212 RG 1 0.537 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -156.874 m 284.348 -156.874 l S Q q .3985 w 256.773 -170.149 m 256.773 -156.874 l S Q q .3985 w 284.149 -170.149 m 284.149 -156.874 l S Q q .3985 w 256.574 -170.149 m 284.348 -170.149 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -166.856 Td[<18cd07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.643 0 RG 1 0.643 0 rg q 342.497 -169.95 26.978 12.876 re f Q 0 G 0 g 1 0.643 0 RG 1 0.643 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -156.874 m 369.873 -156.874 l S Q q .3985 w 342.297 -170.149 m 342.297 -156.874 l S Q q .3985 w 369.673 -170.149 m 369.673 -156.874 l S Q q .3985 w 342.098 -170.149 m 369.873 -170.149 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -166.856 Td[<04ed07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.459 0 RG 1 0.459 0 rg q 428.021 -169.95 26.978 12.876 re f Q 0 G 0 g 1 0.459 0 RG 1 0.459 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -156.874 m 455.397 -156.874 l S Q q .3985 w 427.822 -170.149 m 427.822 -156.874 l S Q q .3985 w 455.198 -170.149 m 455.198 -156.874 l S Q q .3985 w 427.623 -170.149 m 455.397 -170.149 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -166.856 Td[<18cd07a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.78 0.451 RG 1 0.78 0.451 rg q .398 -186.33 26.978 12.876 re f Q 0 G 0 g 1 0.78 0.451 RG 1 0.78 0.451 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -173.254 m 27.775 -173.254 l S Q q .3985 w .199 -186.529 m .199 -173.254 l S Q q .3985 w 27.575 -186.529 m 27.575 -173.254 l S Q q .3985 w 0 -186.529 m 27.775 -186.529 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -183.236 Td[<087b07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.761 0.224 RG 0.941 0.761 0.224 rg q 85.923 -186.33 26.978 12.876 re f Q 0 G 0 g 0.941 0.761 0.224 RG 0.941 0.761 0.224 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -173.254 m 113.299 -173.254 l S Q q .3985 w 85.724 -186.529 m 85.724 -173.254 l S Q q .3985 w 113.1 -186.529 m 113.1 -173.254 l S Q q .3985 w 85.525 -186.529 m 113.299 -186.529 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -183.236 Td[<17f50ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.98 0.549 0.208 RG 0.98 0.549 0.208 rg q 171.448 -186.33 26.978 12.876 re f Q 0 G 0 g 0.98 0.549 0.208 RG 0.98 0.549 0.208 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -173.254 m 198.824 -173.254 l S Q q .3985 w 171.248 -186.529 m 171.248 -173.254 l S Q q .3985 w 198.624 -186.529 m 198.624 -173.254 l S Q q .3985 w 171.049 -186.529 m 198.824 -186.529 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -183.236 Td[<04ed0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.702 0.361 0.267 RG 0.702 0.361 0.267 rg q 256.972 -186.33 26.978 12.876 re f Q 0 G 0 g 0.702 0.361 0.267 RG 0.702 0.361 0.267 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -173.254 m 284.348 -173.254 l S Q q .3985 w 256.773 -186.529 m 256.773 -173.254 l S Q q .3985 w 284.149 -186.529 m 284.149 -173.254 l S Q q .3985 w 256.574 -186.529 m 284.348 -186.529 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -183.236 Td[<04af0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.659 0.518 0.384 RG 0.659 0.518 0.384 rg q 342.497 -186.33 26.978 12.876 re f Q 0 G 0 g 0.659 0.518 0.384 RG 0.659 0.518 0.384 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -173.254 m 369.873 -173.254 l S Q q .3985 w 342.297 -186.529 m 342.297 -173.254 l S Q q .3985 w 369.673 -186.529 m 369.673 -173.254 l S Q q .3985 w 342.098 -186.529 m 369.873 -186.529 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -183.236 Td[<0e860ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.784 0.608 0.251 RG 0.784 0.608 0.251 rg q 428.021 -186.33 26.978 12.876 re f Q 0 G 0 g 0.784 0.608 0.251 RG 0.784 0.608 0.251 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -173.254 m 455.397 -173.254 l S Q q .3985 w 427.822 -186.529 m 427.822 -173.254 l S Q q .3985 w 455.198 -186.529 m 455.198 -173.254 l S Q q .3985 w 427.623 -186.529 m 455.397 -186.529 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -183.236 Td[<07fd07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.376 0.157 0.118 RG 0.376 0.157 0.118 rg q .398 -202.71 26.978 12.876 re f Q 0 G 0 g 0.376 0.157 0.118 RG 0.376 0.157 0.118 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -189.635 m 27.775 -189.635 l S Q q .3985 w .199 -202.909 m .199 -189.635 l S Q q .3985 w 27.575 -202.909 m 27.575 -189.635 l S Q q .3985 w 0 -202.909 m 27.775 -202.909 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -199.616 Td[<09e00ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.698 0.365 0.145 RG 0.698 0.365 0.145 rg q 85.923 -202.71 26.978 12.876 re f Q 0 G 0 g 0.698 0.365 0.145 RG 0.698 0.365 0.145 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -189.635 m 113.299 -189.635 l S Q q .3985 w 85.724 -202.909 m 85.724 -189.635 l S Q q .3985 w 113.1 -202.909 m 113.1 -189.635 l S Q q .3985 w 85.525 -202.909 m 113.299 -202.909 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -199.616 Td[<12350ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.51 0.443 0 RG 0.51 0.443 0 rg q 171.448 -202.71 26.978 12.876 re f Q 0 G 0 g 0.51 0.443 0 RG 0.51 0.443 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -189.635 m 198.824 -189.635 l S Q q .3985 w 171.248 -202.909 m 171.248 -189.635 l S Q q .3985 w 198.624 -202.909 m 198.624 -189.635 l S Q q .3985 w 171.049 -202.909 m 198.824 -202.909 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -199.616 Td[<12350a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.486 0.294 0 RG 0.486 0.294 0 rg q 256.972 -202.71 26.978 12.876 re f Q 0 G 0 g 0.486 0.294 0 RG 0.486 0.294 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -189.635 m 284.348 -189.635 l S Q q .3985 w 256.773 -202.909 m 256.773 -189.635 l S Q q .3985 w 284.149 -202.909 m 284.149 -189.635 l S Q q .3985 w 256.574 -202.909 m 284.348 -202.909 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -199.616 Td[<12350791>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.608 0.267 0 RG 0.608 0.267 0 rg q 342.497 -202.71 26.978 12.876 re f Q 0 G 0 g 0.608 0.267 0 RG 0.608 0.267 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -189.635 m 369.873 -189.635 l S Q q .3985 w 342.297 -202.909 m 342.297 -189.635 l S Q q .3985 w 369.673 -202.909 m 369.673 -189.635 l S Q q .3985 w 342.098 -202.909 m 369.873 -202.909 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -199.616 Td[<123507a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.682 0.439 0 RG 0.682 0.439 0 rg q 428.021 -202.71 26.978 12.876 re f Q 0 G 0 g 0.682 0.439 0 RG 0.682 0.439 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -189.635 m 455.397 -189.635 l S Q q .3985 w 427.822 -202.909 m 427.822 -189.635 l S Q q .3985 w 455.198 -202.909 m 455.198 -189.635 l S Q q .3985 w 427.623 -202.909 m 455.397 -202.909 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -199.616 Td[<123507db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.584 0.333 0.224 RG 0.584 0.333 0.224 rg q .398 -219.09 26.978 12.876 re f Q 0 G 0 g 0.584 0.333 0.224 RG 0.584 0.333 0.224 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -206.015 m 27.775 -206.015 l S Q q .3985 w .199 -219.289 m .199 -206.015 l S Q q .3985 w 27.575 -219.289 m 27.575 -206.015 l S Q q .3985 w 0 -219.289 m 27.775 -219.289 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -215.996 Td[<1cf50ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.792 0.412 0.141 RG 0.792 0.412 0.141 rg q 85.923 -219.09 26.978 12.876 re f Q 0 G 0 g 0.792 0.412 0.141 RG 0.792 0.412 0.141 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -206.015 m 113.299 -206.015 l S Q q .3985 w 85.724 -219.289 m 85.724 -206.015 l S Q q .3985 w 113.1 -219.289 m 113.1 -206.015 l S Q q .3985 w 85.525 -219.289 m 113.299 -219.289 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -215.996 Td[<18321822>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.431 0.318 0.118 RG 0.431 0.318 0.118 rg q 171.448 -219.09 26.978 12.876 re f Q 0 G 0 g 0.431 0.318 0.118 RG 0.431 0.318 0.118 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -206.015 m 198.824 -206.015 l S Q q .3985 w 171.248 -219.289 m 171.248 -206.015 l S Q q .3985 w 198.624 -219.289 m 198.624 -206.015 l S Q q .3985 w 171.049 -219.289 m 198.824 -219.289 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -215.996 Td[<078d0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.827 0.694 0.49 RG 0.827 0.694 0.49 rg q 256.972 -219.09 26.978 12.876 re f Q 0 G 0 g 0.827 0.694 0.49 RG 0.827 0.694 0.49 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -206.015 m 284.348 -206.015 l S Q q .3985 w 256.773 -219.289 m 256.773 -206.015 l S Q q .3985 w 284.149 -219.289 m 284.149 -206.015 l S Q q .3985 w 256.574 -219.289 m 284.348 -219.289 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -215.996 Td[<096a07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.886 0.612 0.271 RG 0.886 0.612 0.271 rg q 342.497 -219.09 26.978 12.876 re f Q 0 G 0 g 0.886 0.612 0.271 RG 0.886 0.612 0.271 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -206.015 m 369.873 -206.015 l S Q q .3985 w 342.297 -219.289 m 342.297 -206.015 l S Q q .3985 w 369.673 -219.289 m 369.673 -206.015 l S Q q .3985 w 342.098 -219.289 m 369.873 -219.289 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -215.996 Td[<07db1869>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.537 0.424 0.224 RG 0.537 0.424 0.224 rg q 428.021 -219.09 26.978 12.876 re f Q 0 G 0 g 0.537 0.424 0.224 RG 0.537 0.424 0.224 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -206.015 m 455.397 -206.015 l S Q q .3985 w 427.822 -219.289 m 427.822 -206.015 l S Q q .3985 w 455.198 -219.289 m 455.198 -206.015 l S Q q .3985 w 427.623 -219.289 m 455.397 -219.289 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -215.996 Td[<0c6c0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.851 0.714 0.067 RG 0.851 0.714 0.067 rg q .398 -235.47 26.978 12.876 re f Q 0 G 0 g 0.851 0.714 0.067 RG 0.851 0.714 0.067 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -222.395 m 27.775 -222.395 l S Q q .3985 w .199 -235.669 m .199 -222.395 l S Q q .3985 w 27.575 -235.669 m 27.575 -222.395 l S Q q .3985 w 0 -235.669 m 27.775 -235.669 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -232.376 Td[<0c6c0f500ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.741 0.867 0.133 RG 0.741 0.867 0.133 rg q 85.923 -235.47 26.978 12.876 re f Q 0 G 0 g 0.741 0.867 0.133 RG 0.741 0.867 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -222.395 m 113.299 -222.395 l S Q q .3985 w 85.724 -235.669 m 85.724 -222.395 l S Q q .3985 w 113.1 -235.669 m 113.1 -222.395 l S Q q .3985 w 85.525 -235.669 m 113.299 -235.669 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -232.376 Td[<0b3e0a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.788 0.867 0.133 RG 0.788 0.867 0.133 rg q 171.448 -235.47 26.978 12.876 re f Q 0 G 0 g 0.788 0.867 0.133 RG 0.788 0.867 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -222.395 m 198.824 -222.395 l S Q q .3985 w 171.248 -235.669 m 171.248 -222.395 l S Q q .3985 w 198.624 -235.669 m 198.624 -222.395 l S Q q .3985 w 171.049 -235.669 m 198.824 -235.669 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -232.376 Td[<0a4107db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.686 0.867 0.133 RG 0.686 0.867 0.133 rg q 256.972 -235.47 26.978 12.876 re f Q 0 G 0 g 0.686 0.867 0.133 RG 0.686 0.867 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -222.395 m 284.348 -222.395 l S Q q .3985 w 256.773 -235.669 m 256.773 -222.395 l S Q q .3985 w 284.149 -235.669 m 284.149 -222.395 l S Q q .3985 w 256.574 -235.669 m 284.348 -235.669 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -232.376 Td[<0a410a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.471 0.573 0.384 RG 0.471 0.573 0.384 rg q 342.497 -235.47 26.978 12.876 re f Q 0 G 0 g 0.471 0.573 0.384 RG 0.471 0.573 0.384 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -222.395 m 369.873 -222.395 l S Q q .3985 w 342.297 -235.669 m 342.297 -222.395 l S Q q .3985 w 369.673 -235.669 m 369.673 -222.395 l S Q q .3985 w 342.098 -235.669 m 369.873 -235.669 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -232.376 Td[<11f00c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.639 0.851 0 RG 0.639 0.851 0 rg q 428.021 -235.47 26.978 12.876 re f Q 0 G 0 g 0.639 0.851 0 RG 0.639 0.851 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -222.395 m 455.397 -222.395 l S Q q .3985 w 427.822 -235.669 m 427.822 -222.395 l S Q q .3985 w 455.198 -235.669 m 455.198 -222.395 l S Q q .3985 w 427.623 -235.669 m 455.397 -235.669 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -232.376 Td[<055307db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.62 0.851 0 RG 0.62 0.851 0 rg q .398 -251.85 26.978 12.876 re f Q 0 G 0 g 0.62 0.851 0 RG 0.62 0.851 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -238.775 m 27.775 -238.775 l S Q q .3985 w .199 -252.049 m .199 -238.775 l S Q q .3985 w 27.575 -252.049 m 27.575 -238.775 l S Q q .3985 w 0 -252.049 m 27.775 -252.049 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -248.756 Td[<05530a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.055 0.722 0.227 RG 0.055 0.722 0.227 rg q 85.923 -251.85 26.978 12.876 re f Q 0 G 0 g 0.055 0.722 0.227 RG 0.055 0.722 0.227 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -238.775 m 113.299 -238.775 l S Q q .3985 w 85.724 -252.049 m 85.724 -238.775 l S Q q .3985 w 113.1 -252.049 m 113.1 -238.775 l S Q q .3985 w 85.525 -252.049 m 113.299 -252.049 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -248.756 Td[<05530c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.039 0.639 0.267 RG 0.039 0.639 0.267 rg q 171.448 -251.85 26.978 12.876 re f Q 0 G 0 g 0.039 0.639 0.267 RG 0.039 0.639 0.267 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -238.775 m 198.824 -238.775 l S Q q .3985 w 171.248 -252.049 m 171.248 -238.775 l S Q q .3985 w 198.624 -252.049 m 198.624 -238.775 l S Q q .3985 w 171.049 -252.049 m 198.824 -252.049 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -248.756 Td[<0c5d0553>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.737 0.071 RG 0 0.737 0.071 rg q 256.972 -251.85 26.978 12.876 re f Q 0 G 0 g 0 0.737 0.071 RG 0 0.737 0.071 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -238.775 m 284.348 -238.775 l S Q q .3985 w 256.773 -252.049 m 256.773 -238.775 l S Q q .3985 w 284.149 -252.049 m 284.149 -238.775 l S Q q .3985 w 256.574 -252.049 m 284.348 -252.049 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -248.756 Td[<10b20a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.047 0.537 0.094 RG 0.047 0.537 0.094 rg q 342.497 -251.85 26.978 12.876 re f Q 0 G 0 g 0.047 0.537 0.094 RG 0.047 0.537 0.094 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -238.775 m 369.873 -238.775 l S Q q .3985 w 342.297 -252.049 m 342.297 -238.775 l S Q q .3985 w 369.673 -252.049 m 369.673 -238.775 l S Q q .3985 w 342.098 -252.049 m 369.873 -252.049 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -248.756 Td[<0a7304e6>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.106 0.82 0.647 RG 0.106 0.82 0.647 rg q 428.021 -251.85 26.978 12.876 re f Q 0 G 0 g 0.106 0.82 0.647 RG 0.106 0.82 0.647 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -238.775 m 455.397 -238.775 l S Q q .3985 w 427.822 -252.049 m 427.822 -238.775 l S Q q .3985 w 455.198 -252.049 m 455.198 -238.775 l S Q q .3985 w 427.623 -252.049 m 455.397 -252.049 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -248.756 Td[<04350ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.165 0.867 0.612 RG 0.165 0.867 0.612 rg q .398 -268.23 26.978 12.876 re f Q 0 G 0 g 0.165 0.867 0.612 RG 0.165 0.867 0.612 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -255.155 m 27.775 -255.155 l S Q q .3985 w .199 -268.429 m .199 -255.155 l S Q q .3985 w 27.575 -268.429 m 27.575 -255.155 l S Q q .3985 w 0 -268.429 m 27.775 -268.429 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -265.136 Td[<04350a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.282 0.753 0.639 RG 0.282 0.753 0.639 rg q 85.923 -268.23 26.978 12.876 re f Q 0 G 0 g 0.282 0.753 0.639 RG 0.282 0.753 0.639 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -255.155 m 113.299 -255.155 l S Q q .3985 w 85.724 -268.429 m 85.724 -255.155 l S Q q .3985 w 113.1 -268.429 m 113.1 -255.155 l S Q q .3985 w 85.525 -268.429 m 113.299 -268.429 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -265.136 Td[<0c5d0435>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.239 0.882 0.678 RG 0.239 0.882 0.678 rg q 171.448 -268.23 26.978 12.876 re f Q 0 G 0 g 0.239 0.882 0.678 RG 0.239 0.882 0.678 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -255.155 m 198.824 -255.155 l S Q q .3985 w 171.248 -268.429 m 171.248 -255.155 l S Q q .3985 w 198.624 -268.429 m 198.624 -255.155 l S Q q .3985 w 171.049 -268.429 m 198.824 -268.429 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -265.136 Td[<1ce205670ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.251 0.871 0.353 RG 0.251 0.871 0.353 rg q 256.972 -268.23 26.978 12.876 re f Q 0 G 0 g 0.251 0.871 0.353 RG 0.251 0.871 0.353 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -255.155 m 284.348 -255.155 l S Q q .3985 w 256.773 -268.429 m 256.773 -255.155 l S Q q .3985 w 284.149 -268.429 m 284.149 -255.155 l S Q q .3985 w 256.574 -268.429 m 284.348 -268.429 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -265.136 Td[<04a40a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.878 0.62 RG 0 0.878 0.62 rg q 342.497 -268.23 26.978 12.876 re f Q 0 G 0 g 0 0.878 0.62 RG 0 0.878 0.62 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -255.155 m 369.873 -255.155 l S Q q .3985 w 342.297 -268.429 m 342.297 -255.155 l S Q q .3985 w 369.673 -268.429 m 369.673 -255.155 l S Q q .3985 w 342.098 -268.429 m 369.873 -268.429 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -265.136 Td[<0c5d0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.878 0.475 RG 0 0.878 0.475 rg q 428.021 -268.23 26.978 12.876 re f Q 0 G 0 g 0 0.878 0.475 RG 0 0.878 0.475 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -255.155 m 455.397 -255.155 l S Q q .3985 w 427.822 -268.429 m 427.822 -255.155 l S Q q .3985 w 455.198 -268.429 m 455.198 -255.155 l S Q q .3985 w 427.623 -268.429 m 455.397 -268.429 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -265.136 Td[<0c5d0567>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.753 0.922 0.843 RG 0.753 0.922 0.843 rg q .398 -284.61 26.978 12.876 re f Q 0 G 0 g 0.753 0.922 0.843 RG 0.753 0.922 0.843 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -271.535 m 27.775 -271.535 l S Q q .3985 w .199 -284.809 m .199 -271.535 l S Q q .3985 w 27.575 -284.809 m 27.575 -271.535 l S Q q .3985 w 0 -284.809 m 27.775 -284.809 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -281.516 Td[<0c5d03e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 85.923 -284.61 26.978 12.876 re f Q 0 G 0 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -271.535 m 113.299 -271.535 l S Q q .3985 w 85.724 -284.809 m 85.724 -271.535 l S Q q .3985 w 113.1 -284.809 m 113.1 -271.535 l S Q q .3985 w 85.525 -284.809 m 113.299 -284.809 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -281.516 Td[<0fe50a780c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.733 0.804 0.773 RG 0.733 0.804 0.773 rg q 171.448 -284.61 26.978 12.876 re f Q 0 G 0 g 0.733 0.804 0.773 RG 0.733 0.804 0.773 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -271.535 m 198.824 -271.535 l S Q q .3985 w 171.248 -284.809 m 171.248 -271.535 l S Q q .3985 w 198.624 -284.809 m 198.624 -271.535 l S Q q .3985 w 171.049 -284.809 m 198.824 -284.809 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -281.516 Td[<0f8209540c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.259 0.298 0.314 RG 0.259 0.298 0.314 rg q 256.972 -284.61 26.978 12.876 re f Q 0 G 0 g 0.259 0.298 0.314 RG 0.259 0.298 0.314 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -271.535 m 284.348 -271.535 l S Q q .3985 w 256.773 -284.809 m 256.773 -271.535 l S Q q .3985 w 284.149 -284.809 m 284.149 -271.535 l S Q q .3985 w 256.574 -284.809 m 284.348 -284.809 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -281.516 Td[<0fe40c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.898 0 RG 0 0.898 0 rg q 342.497 -284.61 26.978 12.876 re f Q 0 G 0 g 0 0.898 0 RG 0 0.898 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -271.535 m 369.873 -271.535 l S Q q .3985 w 342.297 -284.809 m 342.297 -271.535 l S Q q .3985 w 369.673 -284.809 m 369.673 -271.535 l S Q q .3985 w 342.098 -284.809 m 369.873 -284.809 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -281.516 Td[<0a730ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.62 0.816 0.282 RG 0.62 0.816 0.282 rg q 428.021 -284.61 26.978 12.876 re f Q 0 G 0 g 0.62 0.816 0.282 RG 0.62 0.816 0.282 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -271.535 m 455.397 -271.535 l S Q q .3985 w 427.822 -284.809 m 427.822 -271.535 l S Q q .3985 w 455.198 -284.809 m 455.198 -271.535 l S Q q .3985 w 427.623 -284.809 m 455.397 -284.809 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -281.516 Td[<05f80a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.588 0.808 0.329 RG 0.588 0.808 0.329 rg q .398 -300.99 26.978 12.876 re f Q 0 G 0 g 0.588 0.808 0.329 RG 0.588 0.808 0.329 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -287.915 m 27.775 -287.915 l S Q q .3985 w .199 -301.189 m .199 -287.915 l S Q q .3985 w 27.575 -301.189 m 27.575 -287.915 l S Q q .3985 w 0 -301.189 m 27.775 -301.189 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -297.896 Td[<05f80c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.482 0.812 0.651 RG 0.482 0.812 0.651 rg q 85.923 -300.99 26.978 12.876 re f Q 0 G 0 g 0.482 0.812 0.651 RG 0.482 0.812 0.651 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -287.915 m 113.299 -287.915 l S Q q .3985 w 85.724 -301.189 m 85.724 -287.915 l S Q q .3985 w 113.1 -301.189 m 113.1 -287.915 l S Q q .3985 w 85.525 -301.189 m 113.299 -301.189 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -297.896 Td[<0d460c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.18 0.875 0.639 RG 0.18 0.875 0.639 rg q 171.448 -300.99 26.978 12.876 re f Q 0 G 0 g 0.18 0.875 0.639 RG 0.18 0.875 0.639 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -287.915 m 198.824 -287.915 l S Q q .3985 w 171.248 -301.189 m 171.248 -287.915 l S Q q .3985 w 198.624 -301.189 m 198.624 -287.915 l S Q q .3985 w 171.049 -301.189 m 198.824 -301.189 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -297.896 Td[<10d60ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.498 0.925 0.678 RG 0.498 0.925 0.678 rg q 256.972 -300.99 26.978 12.876 re f Q 0 G 0 g 0.498 0.925 0.678 RG 0.498 0.925 0.678 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -287.915 m 284.348 -287.915 l S Q q .3985 w 256.773 -301.189 m 256.773 -287.915 l S Q q .3985 w 284.149 -301.189 m 284.149 -287.915 l S Q q .3985 w 256.574 -301.189 m 284.348 -301.189 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -297.896 Td[<1806>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.643 0.886 0.776 RG 0.643 0.886 0.776 rg q 342.497 -300.99 26.978 12.876 re f Q 0 G 0 g 0.643 0.886 0.776 RG 0.643 0.886 0.776 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -287.915 m 369.873 -287.915 l S Q q .3985 w 342.297 -301.189 m 342.297 -287.915 l S Q q .3985 w 369.673 -301.189 m 369.673 -287.915 l S Q q .3985 w 342.098 -301.189 m 369.873 -301.189 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -297.896 Td[<03b70a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.129 0.651 0.459 RG 0.129 0.651 0.459 rg q 428.021 -300.99 26.978 12.876 re f Q 0 G 0 g 0.129 0.651 0.459 RG 0.129 0.651 0.459 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -287.915 m 455.397 -287.915 l S Q q .3985 w 427.822 -301.189 m 427.822 -287.915 l S Q q .3985 w 455.198 -301.189 m 455.198 -287.915 l S Q q .3985 w 427.623 -301.189 m 455.397 -301.189 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -297.896 Td[<0dbe03e30a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg q .398 -317.37 26.978 12.876 re f Q 0 G 0 g 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -304.295 m 27.775 -304.295 l S Q q .3985 w .199 -317.569 m .199 -304.295 l S Q q .3985 w 27.575 -317.569 m 27.575 -304.295 l S Q q .3985 w 0 -317.569 m 27.775 -317.569 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -314.276 Td[<0dbe07bd0a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg q 85.923 -317.37 26.978 12.876 re f Q 0 G 0 g 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -304.295 m 113.299 -304.295 l S Q q .3985 w 85.724 -317.569 m 85.724 -304.295 l S Q q .3985 w 113.1 -317.569 m 113.1 -304.295 l S Q q .3985 w 85.525 -317.569 m 113.299 -317.569 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -314.276 Td[<0dbe07bd0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.267 0.808 0.965 RG 0.267 0.808 0.965 rg q 171.448 -317.37 26.978 12.876 re f Q 0 G 0 g 0.267 0.808 0.965 RG 0.267 0.808 0.965 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -304.295 m 198.824 -304.295 l S Q q .3985 w 171.248 -317.569 m 171.248 -304.295 l S Q q .3985 w 198.624 -317.569 m 198.624 -304.295 l S Q q .3985 w 171.049 -317.569 m 198.824 -317.569 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -314.276 Td[<09a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.09 0.486 0.69 RG 0.09 0.486 0.69 rg q 256.972 -317.37 26.978 12.876 re f Q 0 G 0 g 0.09 0.486 0.69 RG 0.09 0.486 0.69 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -304.295 m 284.348 -304.295 l S Q q .3985 w 256.773 -317.569 m 256.773 -304.295 l S Q q .3985 w 284.149 -317.569 m 284.149 -304.295 l S Q q .3985 w 256.574 -317.569 m 284.348 -317.569 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -314.276 Td[<05c60c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg q 342.497 -317.37 26.978 12.876 re f Q 0 G 0 g 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -304.295 m 369.873 -304.295 l S Q q .3985 w 342.297 -317.569 m 342.297 -304.295 l S Q q .3985 w 369.673 -317.569 m 369.673 -304.295 l S Q q .3985 w 342.098 -317.569 m 369.873 -317.569 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -314.276 Td[<05c609a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.243 0.929 0.906 RG 0.243 0.929 0.906 rg q 428.021 -317.37 26.978 12.876 re f Q 0 G 0 g 0.243 0.929 0.906 RG 0.243 0.929 0.906 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -304.295 m 455.397 -304.295 l S Q q .3985 w 427.822 -317.569 m 427.822 -304.295 l S Q q .3985 w 455.198 -317.569 m 455.198 -304.295 l S Q q .3985 w 427.623 -317.569 m 455.397 -317.569 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -314.276 Td[<043509a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.439 0.953 1 RG 0.439 0.953 1 rg q .398 -333.75 26.978 12.876 re f Q 0 G 0 g 0.439 0.953 1 RG 0.439 0.953 1 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -320.675 m 27.775 -320.675 l S Q q .3985 w .199 -333.949 m .199 -320.675 l S Q q .3985 w 27.575 -333.949 m 27.575 -320.675 l S Q q .3985 w 0 -333.949 m 27.775 -333.949 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -330.656 Td[<0ec409a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.294 0.361 0.769 RG 0.294 0.361 0.769 rg q 85.923 -333.75 26.978 12.876 re f Q 0 G 0 g 0.294 0.361 0.769 RG 0.294 0.361 0.769 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -320.675 m 113.299 -320.675 l S Q q .3985 w 85.724 -333.949 m 85.724 -320.675 l S Q q .3985 w 113.1 -333.949 m 113.1 -320.675 l S Q q .3985 w 85.525 -333.949 m 113.299 -333.949 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -330.656 Td[<040f09a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.631 0.686 0.788 RG 0.631 0.686 0.788 rg q 171.448 -333.75 26.978 12.876 re f Q 0 G 0 g 0.631 0.686 0.788 RG 0.631 0.686 0.788 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -320.675 m 198.824 -320.675 l S Q q .3985 w 171.248 -333.949 m 171.248 -320.675 l S Q q .3985 w 198.624 -333.949 m 198.624 -320.675 l S Q q .3985 w 171.049 -333.949 m 198.824 -333.949 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -330.656 Td[<09a107e70ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.18 0.306 0.494 RG 0.18 0.306 0.494 rg q 256.972 -333.75 26.978 12.876 re f Q 0 G 0 g 0.18 0.306 0.494 RG 0.18 0.306 0.494 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -320.675 m 284.348 -320.675 l S Q q .3985 w 256.773 -333.949 m 256.773 -320.675 l S Q q .3985 w 284.149 -333.949 m 284.149 -320.675 l S Q q .3985 w 256.574 -333.949 m 284.348 -333.949 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -330.656 Td[<049f0c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.231 0.18 0.494 RG 0.231 0.18 0.494 rg q 342.497 -333.75 26.978 12.876 re f Q 0 G 0 g 0.231 0.18 0.494 RG 0.231 0.18 0.494 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -320.675 m 369.873 -320.675 l S Q q .3985 w 342.297 -333.949 m 342.297 -320.675 l S Q q .3985 w 369.673 -333.949 m 369.673 -320.675 l S Q q .3985 w 342.098 -333.949 m 369.873 -333.949 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -330.656 Td[<049f09a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.29 0.259 0.4 RG 0.29 0.259 0.4 rg q 428.021 -333.75 26.978 12.876 re f Q 0 G 0 g 0.29 0.259 0.4 RG 0.29 0.259 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -320.675 m 455.397 -320.675 l S Q q .3985 w 427.822 -333.949 m 427.822 -320.675 l S Q q .3985 w 455.198 -333.949 m 455.198 -320.675 l S Q q .3985 w 427.623 -333.949 m 455.397 -333.949 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -330.656 Td[<1e04>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.259 0.4 0.4 RG 0.259 0.4 0.4 rg q .398 -350.13 26.978 12.876 re f Q 0 G 0 g 0.259 0.4 0.4 RG 0.259 0.4 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -337.055 m 27.775 -337.055 l S Q q .3985 w .199 -350.329 m .199 -337.055 l S Q q .3985 w 27.575 -350.329 m 27.575 -337.055 l S Q q .3985 w 0 -350.329 m 27.775 -350.329 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -347.036 Td[<1e040a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.259 0.314 0.4 RG 0.259 0.314 0.4 rg q 85.923 -350.13 26.978 12.876 re f Q 0 G 0 g 0.259 0.314 0.4 RG 0.259 0.314 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -337.055 m 113.299 -337.055 l S Q q .3985 w 85.724 -350.329 m 85.724 -337.055 l S Q q .3985 w 113.1 -350.329 m 113.1 -337.055 l S Q q .3985 w 85.525 -350.329 m 113.299 -350.329 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -347.036 Td[<1e0409a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.341 0.259 0.4 RG 0.341 0.259 0.4 rg q 171.448 -350.13 26.978 12.876 re f Q 0 G 0 g 0.341 0.259 0.4 RG 0.341 0.259 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -337.055 m 198.824 -337.055 l S Q q .3985 w 171.248 -350.329 m 171.248 -337.055 l S Q q .3985 w 198.624 -350.329 m 198.624 -337.055 l S Q q .3985 w 171.049 -350.329 m 198.824 -350.329 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -347.036 Td[<1e04122c>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.553 0.294 0.733 RG 0.553 0.294 0.733 rg q 256.972 -350.13 26.978 12.876 re f Q 0 G 0 g 0.553 0.294 0.733 RG 0.553 0.294 0.733 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -337.055 m 284.348 -337.055 l S Q q .3985 w 256.773 -350.329 m 256.773 -337.055 l S Q q .3985 w 284.149 -350.329 m 284.149 -337.055 l S Q q .3985 w 256.574 -350.329 m 284.348 -350.329 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -347.036 Td[<122c0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.506 0.329 0.388 RG 0.506 0.329 0.388 rg q 342.497 -350.13 26.978 12.876 re f Q 0 G 0 g 0.506 0.329 0.388 RG 0.506 0.329 0.388 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -337.055 m 369.873 -337.055 l S Q q .3985 w 342.297 -350.329 m 342.297 -337.055 l S Q q .3985 w 369.673 -350.329 m 369.673 -337.055 l S Q q .3985 w 342.098 -350.329 m 369.873 -350.329 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -347.036 Td[<122c0885>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.506 0.329 0.463 RG 0.506 0.329 0.463 rg q 428.021 -350.13 26.978 12.876 re f Q 0 G 0 g 0.506 0.329 0.463 RG 0.506 0.329 0.463 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -337.055 m 455.397 -337.055 l S Q q .3985 w 427.822 -350.329 m 427.822 -337.055 l S Q q .3985 w 455.198 -350.329 m 455.198 -337.055 l S Q q .3985 w 427.623 -350.329 m 455.397 -350.329 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -347.036 Td[<0885122c>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.298 0.133 0.106 RG 0.298 0.133 0.106 rg q .398 -366.51 26.978 12.876 re f Q 0 G 0 g 0.298 0.133 0.106 RG 0.298 0.133 0.106 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -353.435 m 27.775 -353.435 l S Q q .3985 w .199 -366.709 m .199 -353.435 l S Q q .3985 w 27.575 -366.709 m 27.575 -353.435 l S Q q .3985 w 0 -366.709 m 27.775 -366.709 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -363.416 Td[<122c0e07>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.2 0.443 RG 0 0.2 0.443 rg q 85.923 -366.51 26.978 12.876 re f Q 0 G 0 g 0 0.2 0.443 RG 0 0.2 0.443 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -353.435 m 113.299 -353.435 l S Q q .3985 w 85.724 -366.709 m 85.724 -353.435 l S Q q .3985 w 113.1 -366.709 m 113.1 -353.435 l S Q q .3985 w 85.525 -366.709 m 113.299 -366.709 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -363.416 Td[<17dc0c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.337 0 0.31 RG 0.337 0 0.31 rg q 171.448 -366.51 26.978 12.876 re f Q 0 G 0 g 0.337 0 0.31 RG 0.337 0 0.31 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -353.435 m 198.824 -353.435 l S Q q .3985 w 171.248 -366.709 m 171.248 -353.435 l S Q q .3985 w 198.624 -366.709 m 198.624 -353.435 l S Q q .3985 w 171.049 -366.709 m 198.824 -366.709 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -363.416 Td[<122c0e17>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.502 0.114 0.682 RG 0.502 0.114 0.682 rg q 256.972 -366.51 26.978 12.876 re f Q 0 G 0 g 0.502 0.114 0.682 RG 0.502 0.114 0.682 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -353.435 m 284.348 -353.435 l S Q q .3985 w 256.773 -366.709 m 256.773 -353.435 l S Q q .3985 w 284.149 -366.709 m 284.149 -353.435 l S Q q .3985 w 256.574 -366.709 m 284.348 -366.709 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -363.416 Td[<0c5d09f4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.298 0.553 0.682 RG 0.298 0.553 0.682 rg q 342.497 -366.51 26.978 12.876 re f Q 0 G 0 g 0.298 0.553 0.682 RG 0.298 0.553 0.682 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -353.435 m 369.873 -353.435 l S Q q .3985 w 342.297 -366.709 m 342.297 -353.435 l S Q q .3985 w 369.673 -366.709 m 369.673 -353.435 l S Q q .3985 w 342.098 -366.709 m 369.873 -366.709 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -363.416 Td[<0c950c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.69 0.643 0.89 RG 0.69 0.643 0.89 rg q 428.021 -366.51 26.978 12.876 re f Q 0 G 0 g 0.69 0.643 0.89 RG 0.69 0.643 0.89 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -353.435 m 455.397 -353.435 l S Q q .3985 w 427.822 -366.709 m 427.822 -353.435 l S Q q .3985 w 455.198 -366.709 m 455.198 -353.435 l S Q q .3985 w 427.623 -366.709 m 455.397 -366.709 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -363.416 Td[<0fd20c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.8 0.643 0.89 RG 0.8 0.643 0.89 rg q .398 -382.89 26.978 12.876 re f Q 0 G 0 g 0.8 0.643 0.89 RG 0.8 0.643 0.89 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -369.815 m 27.775 -369.815 l S Q q .3985 w .199 -383.089 m .199 -369.815 l S Q q .3985 w 27.575 -383.089 m 27.575 -369.815 l S Q q .3985 w 0 -383.089 m 27.775 -383.089 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -379.796 Td[<05e00f500ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.929 0.82 0.847 RG 0.929 0.82 0.847 rg q 85.923 -382.89 26.978 12.876 re f Q 0 G 0 g 0.929 0.82 0.847 RG 0.929 0.82 0.847 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -369.815 m 113.299 -369.815 l S Q q .3985 w 85.724 -383.089 m 85.724 -369.815 l S Q q .3985 w 113.1 -383.089 m 113.1 -369.815 l S Q q .3985 w 85.525 -383.089 m 113.299 -383.089 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -379.796 Td[<0b7b0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.894 0.776 0.816 RG 0.894 0.776 0.816 rg q 171.448 -382.89 26.978 12.876 re f Q 0 G 0 g 0.894 0.776 0.816 RG 0.894 0.776 0.816 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -369.815 m 198.824 -369.815 l S Q q .3985 w 171.248 -383.089 m 171.248 -369.815 l S Q q .3985 w 198.624 -383.089 m 198.624 -369.815 l S Q q .3985 w 171.049 -383.089 m 198.824 -383.089 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -379.796 Td[<0b7b07800ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.459 0.529 0.541 RG 0.459 0.529 0.541 rg q 256.972 -382.89 26.978 12.876 re f Q 0 G 0 g 0.459 0.529 0.541 RG 0.459 0.529 0.541 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -369.815 m 284.348 -369.815 l S Q q .3985 w 256.773 -383.089 m 256.773 -369.815 l S Q q .3985 w 284.149 -383.089 m 284.149 -369.815 l S Q q .3985 w 256.574 -383.089 m 284.348 -383.089 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -379.796 Td[<049b0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.318 0.604 0.451 RG 0.318 0.604 0.451 rg q 342.497 -382.89 26.978 12.876 re f Q 0 G 0 g 0.318 0.604 0.451 RG 0.318 0.604 0.451 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -369.815 m 369.873 -369.815 l S Q q .3985 w 342.297 -383.089 m 342.297 -369.815 l S Q q .3985 w 369.673 -383.089 m 369.673 -369.815 l S Q q .3985 w 342.098 -383.089 m 369.873 -383.089 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -379.796 Td[<049b07db>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.635 0.608 0.486 RG 0.635 0.608 0.486 rg q 428.021 -382.89 26.978 12.876 re f Q 0 G 0 g 0.635 0.608 0.486 RG 0.635 0.608 0.486 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -369.815 m 455.397 -369.815 l S Q q .3985 w 427.822 -383.089 m 427.822 -369.815 l S Q q .3985 w 455.198 -383.089 m 455.198 -369.815 l S Q q .3985 w 427.623 -383.089 m 455.397 -383.089 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -379.796 Td[<049b0c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.451 0.592 0.671 RG 0.451 0.592 0.671 rg q .398 -399.27 26.978 12.876 re f Q 0 G 0 g 0.451 0.592 0.671 RG 0.451 0.592 0.671 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -386.195 m 27.775 -386.195 l S Q q .3985 w .199 -399.469 m .199 -386.195 l S Q q .3985 w 27.575 -399.469 m 27.575 -386.195 l S Q q .3985 w 0 -399.469 m 27.775 -399.469 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -396.176 Td[<049b0791>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.82 0.851 0.878 RG 0.82 0.851 0.878 rg q 85.923 -399.27 26.978 12.876 re f Q 0 G 0 g 0.82 0.851 0.878 RG 0.82 0.851 0.878 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -386.195 m 113.299 -386.195 l S Q q .3985 w 85.724 -399.469 m 85.724 -386.195 l S Q q .3985 w 113.1 -399.469 m 113.1 -386.195 l S Q q .3985 w 85.525 -399.469 m 113.299 -399.469 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -396.176 Td[<049b03e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.533 0.678 0.651 RG 0.533 0.678 0.651 rg q 171.448 -399.27 26.978 12.876 re f Q 0 G 0 g 0.533 0.678 0.651 RG 0.533 0.678 0.651 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -386.195 m 198.824 -386.195 l S Q q .3985 w 171.248 -399.469 m 171.248 -386.195 l S Q q .3985 w 198.624 -399.469 m 198.624 -386.195 l S Q q .3985 w 171.049 -399.469 m 198.824 -399.469 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -396.176 Td[<0da30ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.953 0.827 0.906 RG 0.953 0.827 0.906 rg q 256.972 -399.27 26.978 12.876 re f Q 0 G 0 g 0.953 0.827 0.906 RG 0.953 0.827 0.906 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -386.195 m 284.348 -386.195 l S Q q .3985 w 256.773 -399.469 m 256.773 -386.195 l S Q q .3985 w 284.149 -399.469 m 284.149 -386.195 l S Q q .3985 w 256.574 -399.469 m 284.348 -399.469 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -396.176 Td[<0da307a3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.831 0.949 0.906 RG 0.831 0.949 0.906 rg q 342.497 -399.27 26.978 12.876 re f Q 0 G 0 g 0.831 0.949 0.906 RG 0.831 0.949 0.906 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -386.195 m 369.873 -386.195 l S Q q .3985 w 342.297 -399.469 m 342.297 -386.195 l S Q q .3985 w 369.673 -399.469 m 369.673 -386.195 l S Q q .3985 w 342.098 -399.469 m 369.873 -399.469 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -396.176 Td[<0da30a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.824 0.941 0.957 RG 0.824 0.941 0.957 rg q 428.021 -399.27 26.978 12.876 re f Q 0 G 0 g 0.824 0.941 0.957 RG 0.824 0.941 0.957 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -386.195 m 455.397 -386.195 l S Q q .3985 w 427.822 -399.469 m 427.822 -386.195 l S Q q .3985 w 455.198 -399.469 m 455.198 -386.195 l S Q q .3985 w 427.623 -399.469 m 455.397 -399.469 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -396.176 Td[<0da309a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.827 0.878 0.953 RG 0.827 0.878 0.953 rg q .398 -415.65 26.978 12.876 re f Q 0 G 0 g 0.827 0.878 0.953 RG 0.827 0.878 0.953 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -402.575 m 27.775 -402.575 l S Q q .3985 w .199 -415.849 m .199 -402.575 l S Q q .3985 w 27.575 -415.849 m 27.575 -402.575 l S Q q .3985 w 0 -415.849 m 27.775 -415.849 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -412.556 Td[<058e0c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.188 0.875 0.953 RG 0.188 0.875 0.953 rg q 85.923 -415.65 26.978 12.876 re f Q 0 G 0 g 0.188 0.875 0.953 RG 0.188 0.875 0.953 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -402.575 m 113.299 -402.575 l S Q q .3985 w 85.724 -415.849 m 85.724 -402.575 l S Q q .3985 w 113.1 -415.849 m 113.1 -402.575 l S Q q .3985 w 85.525 -415.849 m 113.299 -415.849 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -412.556 Td[<07b509a1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.145 0.973 0.796 RG 0.145 0.973 0.796 rg q 171.448 -415.65 26.978 12.876 re f Q 0 G 0 g 0.145 0.973 0.796 RG 0.145 0.973 0.796 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -402.575 m 198.824 -402.575 l S Q q .3985 w 171.248 -415.849 m 171.248 -402.575 l S Q q .3985 w 198.624 -415.849 m 198.624 -402.575 l S Q q .3985 w 171.049 -415.849 m 198.824 -415.849 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -412.556 Td[<07b50a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 1 1 RG 1 1 1 rg q 256.972 -415.65 26.978 12.876 re f Q 0 G 0 g 1 1 1 RG 1 1 1 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -402.575 m 284.348 -402.575 l S Q q .3985 w 256.773 -415.849 m 256.773 -402.575 l S Q q .3985 w 284.149 -415.849 m 284.149 -402.575 l S Q q .3985 w 256.574 -415.849 m 284.348 -415.849 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -412.556 Td[<08da03e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.984 0.941 RG 1 0.984 0.941 rg q 342.497 -415.65 26.978 12.876 re f Q 0 G 0 g 1 0.984 0.941 RG 1 0.984 0.941 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -402.575 m 369.873 -402.575 l S Q q .3985 w 342.297 -415.849 m 342.297 -402.575 l S Q q .3985 w 369.673 -415.849 m 369.673 -402.575 l S Q q .3985 w 342.098 -415.849 m 369.873 -415.849 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -412.556 Td[<0f600fe903e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.988 1 RG 0.941 0.988 1 rg q 428.021 -415.65 26.978 12.876 re f Q 0 G 0 g 0.941 0.988 1 RG 0.941 0.988 1 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -402.575 m 455.397 -402.575 l S Q q .3985 w 427.822 -415.849 m 427.822 -402.575 l S Q q .3985 w 455.198 -415.849 m 455.198 -402.575 l S Q q .3985 w 427.623 -415.849 m 455.397 -415.849 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -412.556 Td[<0fd203e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.839 0.925 0.941 RG 0.839 0.925 0.941 rg q .398 -432.03 26.978 12.876 re f Q 0 G 0 g 0.839 0.925 0.941 RG 0.839 0.925 0.941 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -418.955 m 27.775 -418.955 l S Q q .3985 w .199 -432.229 m .199 -418.955 l S Q q .3985 w 27.575 -432.229 m 27.575 -418.955 l S Q q .3985 w 0 -432.229 m 27.775 -432.229 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -428.936 Td[<110503e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.949 0.925 0.871 RG 0.949 0.925 0.871 rg q 85.923 -432.03 26.978 12.876 re f Q 0 G 0 g 0.949 0.925 0.871 RG 0.949 0.925 0.871 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -418.955 m 113.299 -418.955 l S Q q .3985 w 85.724 -432.229 m 85.724 -418.955 l S Q q .3985 w 113.1 -432.229 m 113.1 -418.955 l S Q q .3985 w 85.525 -432.229 m 113.299 -432.229 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -428.936 Td[<1801>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.878 0.941 0.914 RG 0.878 0.941 0.914 rg q 171.448 -432.03 26.978 12.876 re f Q 0 G 0 g 0.878 0.941 0.914 RG 0.878 0.941 0.914 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -418.955 m 198.824 -418.955 l S Q q .3985 w 171.248 -432.229 m 171.248 -418.955 l S Q q .3985 w 198.624 -432.229 m 198.624 -418.955 l S Q q .3985 w 171.049 -432.229 m 198.824 -432.229 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -428.936 Td[<0dcd>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.953 0.976 0.945 RG 0.953 0.976 0.945 rg q 256.972 -432.03 26.978 12.876 re f Q 0 G 0 g 0.953 0.976 0.945 RG 0.953 0.976 0.945 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -418.955 m 284.348 -418.955 l S Q q .3985 w 256.773 -432.229 m 256.773 -418.955 l S Q q .3985 w 284.149 -432.229 m 284.149 -418.955 l S Q q .3985 w 256.574 -432.229 m 284.348 -432.229 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -428.936 Td[<143d03e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.914 0.945 0.965 RG 0.914 0.945 0.965 rg q 342.497 -432.03 26.978 12.876 re f Q 0 G 0 g 0.914 0.945 0.965 RG 0.914 0.945 0.965 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -418.955 m 369.873 -418.955 l S Q q .3985 w 342.297 -432.229 m 342.297 -418.955 l S Q q .3985 w 369.673 -432.229 m 369.673 -418.955 l S Q q .3985 w 342.098 -432.229 m 369.873 -432.229 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -428.936 Td[<0d9f0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.761 0.8 0.816 RG 0.761 0.8 0.816 rg q 428.021 -432.03 26.978 12.876 re f Q 0 G 0 g 0.761 0.8 0.816 RG 0.761 0.8 0.816 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -418.955 m 455.397 -418.955 l S Q q .3985 w 427.822 -432.229 m 427.822 -418.955 l S Q q .3985 w 455.198 -432.229 m 455.198 -418.955 l S Q q .3985 w 427.623 -432.229 m 455.397 -432.229 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -428.936 Td[<07bd03e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.988 0.937 0.91 RG 0.988 0.937 0.91 rg q .398 -448.41 26.978 12.876 re f Q 0 G 0 g 0.988 0.937 0.91 RG 0.988 0.937 0.91 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -435.335 m 27.775 -435.335 l S Q q .3985 w .199 -448.609 m .199 -435.335 l S Q q .3985 w 27.575 -448.609 m 27.575 -435.335 l S Q q .3985 w 0 -448.609 m 27.775 -448.609 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -445.316 Td[<10c8060603e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.89 0.937 0.992 RG 0.89 0.937 0.992 rg q 85.923 -448.41 26.978 12.876 re f Q 0 G 0 g 0.89 0.937 0.992 RG 0.89 0.937 0.992 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -435.335 m 113.299 -435.335 l S Q q .3985 w 85.724 -448.609 m 85.724 -435.335 l S Q q .3985 w 113.1 -448.609 m 113.1 -435.335 l S Q q .3985 w 85.525 -448.609 m 113.299 -448.609 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -445.316 Td[<108d03e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.502 0.502 0.502 RG 0.502 0.502 0.502 rg q 171.448 -448.41 26.978 12.876 re f Q 0 G 0 g 0.502 0.502 0.502 RG 0.502 0.502 0.502 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -435.335 m 198.824 -435.335 l S Q q .3985 w 171.248 -448.609 m 171.248 -435.335 l S Q q .3985 w 198.624 -448.609 m 198.624 -435.335 l S Q q .3985 w 171.049 -448.609 m 198.824 -448.609 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -445.316 Td[<07e70ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q 256.972 -448.41 26.978 12.876 re f Q 0 G 0 g 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -435.335 m 284.348 -435.335 l S Q q .3985 w 256.773 -448.609 m 256.773 -435.335 l S Q q .3985 w 284.149 -448.609 m 284.149 -435.335 l S Q q .3985 w 256.574 -448.609 m 284.348 -448.609 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -445.316 Td[<0fe90ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.941 0.957 RG 0.941 0.941 0.957 rg q 342.497 -448.41 26.978 12.876 re f Q 0 G 0 g 0.941 0.941 0.957 RG 0.941 0.941 0.957 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -435.335 m 369.873 -435.335 l S Q q .3985 w 342.297 -448.609 m 342.297 -435.335 l S Q q .3985 w 369.673 -448.609 m 369.673 -435.335 l S Q q .3985 w 342.098 -448.609 m 369.873 -448.609 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -445.316 Td[<0c2303e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.384 0.165 0.114 RG 0.384 0.165 0.114 rg q 428.021 -448.41 26.978 12.876 re f Q 0 G 0 g 0.384 0.165 0.114 RG 0.384 0.165 0.114 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -435.335 m 455.397 -435.335 l S Q q .3985 w 427.822 -448.609 m 427.822 -435.335 l S Q q .3985 w 455.198 -448.609 m 455.198 -435.335 l S Q q .3985 w 427.623 -448.609 m 455.397 -448.609 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -445.316 Td[<0fc90ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.239 0.231 0.31 RG 0.239 0.231 0.31 rg q .398 -464.79 26.978 12.876 re f Q 0 G 0 g 0.239 0.231 0.31 RG 0.239 0.231 0.31 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -451.715 m 27.775 -451.715 l S Q q .3985 w .199 -464.99 m .199 -451.715 l S Q q .3985 w 27.575 -464.99 m 27.575 -451.715 l S Q q .3985 w 0 -464.99 m 27.775 -464.99 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -461.696 Td[<0fc90c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.447 0.369 0.51 RG 0.447 0.369 0.51 rg q 85.923 -464.79 26.978 12.876 re f Q 0 G 0 g 0.447 0.369 0.51 RG 0.447 0.369 0.51 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -451.715 m 113.299 -451.715 l S Q q .3985 w 85.724 -464.99 m 85.724 -451.715 l S Q q .3985 w 113.1 -464.99 m 113.1 -451.715 l S Q q .3985 w 85.525 -464.99 m 113.299 -464.99 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -461.696 Td[<0ee90ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q 171.448 -464.79 26.978 12.876 re f Q 0 G 0 g 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -451.715 m 198.824 -451.715 l S Q q .3985 w 171.248 -464.99 m 171.248 -451.715 l S Q q .3985 w 198.624 -464.99 m 198.624 -451.715 l S Q q .3985 w 171.049 -464.99 m 198.824 -464.99 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -461.696 Td[<0ee90791>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q 256.972 -464.79 26.978 12.876 re f Q 0 G 0 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -451.715 m 284.348 -451.715 l S Q q .3985 w 256.773 -464.99 m 256.773 -451.715 l S Q q .3985 w 284.149 -464.99 m 284.149 -451.715 l S Q q .3985 w 256.574 -464.99 m 284.348 -464.99 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -461.696 Td[<0c000791>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.314 0.38 0.427 RG 0.314 0.38 0.427 rg q 342.497 -464.79 26.978 12.876 re f Q 0 G 0 g 0.314 0.38 0.427 RG 0.314 0.38 0.427 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -451.715 m 369.873 -451.715 l S Q q .3985 w 342.297 -464.99 m 342.297 -451.715 l S Q q .3985 w 369.673 -464.99 m 369.673 -451.715 l S Q q .3985 w 342.098 -464.99 m 369.873 -464.99 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -461.696 Td[<0b0e0ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.459 0.541 0.6 RG 0.459 0.541 0.6 rg q 428.021 -464.79 26.978 12.876 re f Q 0 G 0 g 0.459 0.541 0.6 RG 0.459 0.541 0.6 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -451.715 m 455.397 -451.715 l S Q q .3985 w 427.822 -464.99 m 427.822 -451.715 l S Q q .3985 w 455.198 -464.99 m 455.198 -451.715 l S Q q .3985 w 427.623 -464.99 m 455.397 -464.99 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -461.696 Td[<0b0e07e7>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0 0 RG 0 0 0 rg q .398 -481.17 26.978 12.876 re f Q 0 G 0 g 0 0 0 RG 0 0 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -468.095 m 27.775 -468.095 l S Q q .3985 w .199 -481.37 m .199 -468.095 l S Q q .3985 w 27.575 -481.37 m 27.575 -468.095 l S Q q .3985 w 0 -481.37 m 27.775 -481.37 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -478.077 Td[<07910ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.286 0.192 0.192 RG 0.286 0.192 0.192 rg q 85.923 -481.17 26.978 12.876 re f Q 0 G 0 g 0.286 0.192 0.192 RG 0.286 0.192 0.192 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -468.095 m 113.299 -468.095 l S Q q .3985 w 85.724 -481.37 m 85.724 -468.095 l S Q q .3985 w 113.1 -481.37 m 113.1 -468.095 l S Q q .3985 w 85.525 -481.37 m 113.299 -481.37 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -478.077 Td[<17f30ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.192 0.145 0.125 RG 0.192 0.145 0.125 rg q 171.448 -481.17 26.978 12.876 re f Q 0 G 0 g 0.192 0.145 0.125 RG 0.192 0.145 0.125 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -468.095 m 198.824 -468.095 l S Q q .3985 w 171.248 -481.37 m 171.248 -468.095 l S Q q .3985 w 198.624 -481.37 m 198.624 -468.095 l S Q q .3985 w 171.049 -481.37 m 198.824 -481.37 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -478.077 Td[<0abf0791>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.365 0.318 0.235 RG 0.365 0.318 0.235 rg q 256.972 -481.17 26.978 12.876 re f Q 0 G 0 g 0.365 0.318 0.235 RG 0.365 0.318 0.235 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -468.095 m 284.348 -468.095 l S Q q .3985 w 256.773 -481.37 m 256.773 -468.095 l S Q q .3985 w 284.149 -481.37 m 284.149 -468.095 l S Q q .3985 w 256.574 -481.37 m 284.348 -481.37 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -478.077 Td[<1e0b>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.459 0.4 0.302 RG 0.459 0.4 0.302 rg q 342.497 -481.17 26.978 12.876 re f Q 0 G 0 g 0.459 0.4 0.302 RG 0.459 0.4 0.302 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -468.095 m 369.873 -468.095 l S Q q .3985 w 342.297 -481.37 m 342.297 -468.095 l S Q q .3985 w 369.673 -481.37 m 369.673 -468.095 l S Q q .3985 w 342.098 -481.37 m 369.873 -481.37 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -478.077 Td[<09d3>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.42 0.408 0.51 RG 0.42 0.408 0.51 rg q 428.021 -481.17 26.978 12.876 re f Q 0 G 0 g 0.42 0.408 0.51 RG 0.42 0.408 0.51 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -468.095 m 455.397 -468.095 l S Q q .3985 w 427.822 -481.37 m 427.822 -468.095 l S Q q .3985 w 455.198 -481.37 m 455.198 -468.095 l S Q q .3985 w 427.623 -481.37 m 455.397 -481.37 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -478.077 Td[<1e06>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.4 0.341 0.341 RG 0.4 0.341 0.341 rg q .398 -497.55 26.978 12.876 re f Q 0 G 0 g 0.4 0.341 0.341 RG 0.4 0.341 0.341 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -484.475 m 27.775 -484.475 l S Q q .3985 w .199 -497.75 m .199 -484.475 l S Q q .3985 w 27.575 -497.75 m 27.575 -484.475 l S Q q .3985 w 0 -497.75 m 27.775 -497.75 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -494.457 Td[<1e060791>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.255 0.333 0.365 RG 0.255 0.333 0.365 rg q 85.923 -497.55 26.978 12.876 re f Q 0 G 0 g 0.255 0.333 0.365 RG 0.255 0.333 0.365 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -484.475 m 113.299 -484.475 l S Q q .3985 w 85.724 -497.75 m 85.724 -484.475 l S Q q .3985 w 113.1 -497.75 m 113.1 -484.475 l S Q q .3985 w 85.525 -497.75 m 113.299 -497.75 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -494.457 Td[<1e0e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q 171.448 -497.55 26.978 12.876 re f Q 0 G 0 g 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -484.475 m 198.824 -484.475 l S Q q .3985 w 171.248 -497.75 m 171.248 -484.475 l S Q q .3985 w 198.624 -497.75 m 198.624 -484.475 l S Q q .3985 w 171.049 -497.75 m 198.824 -497.75 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -494.457 Td[<050508c1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.918 0.804 0.463 RG 0.918 0.804 0.463 rg q 256.972 -497.55 26.978 12.876 re f Q 0 G 0 g 0.918 0.804 0.463 RG 0.918 0.804 0.463 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -484.475 m 284.348 -484.475 l S Q q .3985 w 256.773 -497.75 m 256.773 -484.475 l S Q q .3985 w 284.149 -497.75 m 284.149 -484.475 l S Q q .3985 w 256.574 -497.75 m 284.348 -497.75 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -494.457 Td[<08c10ce4>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.914 0.906 0.937 RG 0.914 0.906 0.937 rg q 342.497 -497.55 26.978 12.876 re f Q 0 G 0 g 0.914 0.906 0.937 RG 0.914 0.906 0.937 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -484.475 m 369.873 -484.475 l S Q q .3985 w 342.297 -497.75 m 342.297 -484.475 l S Q q .3985 w 369.673 -497.75 m 369.673 -484.475 l S Q q .3985 w 342.098 -497.75 m 369.873 -497.75 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -494.457 Td[<107f03e2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 428.021 -497.55 26.978 12.876 re f Q 0 G 0 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -484.475 m 455.397 -484.475 l S Q q .3985 w 427.822 -497.75 m 427.822 -484.475 l S Q q .3985 w 455.198 -497.75 m 455.198 -484.475 l S Q q .3985 w 427.623 -497.75 m 455.397 -497.75 l S Q 0 G 0 g BT /F2 10.5 Tf 458.022 -494.457 Td[<0e5e0a73>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.655 0.557 0.267 RG 0.655 0.557 0.267 rg q .398 -513.93 26.978 12.876 re f Q 0 G 0 g 0.655 0.557 0.267 RG 0.655 0.557 0.267 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -500.855 m 27.775 -500.855 l S Q q .3985 w .199 -514.13 m .199 -500.855 l S Q q .3985 w 27.575 -514.13 m 27.575 -500.855 l S Q q .3985 w 0 -514.13 m 27.775 -514.13 l S Q 0 G 0 g BT /F2 10.5 Tf 30.4 -510.837 Td[<0ee908c1>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.729 0.792 0.776 RG 0.729 0.792 0.776 rg q 85.923 -513.93 26.978 12.876 re f Q 0 G 0 g 0.729 0.792 0.776 RG 0.729 0.792 0.776 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -500.855 m 113.299 -500.855 l S Q q .3985 w 85.724 -514.13 m 85.724 -500.855 l S Q q .3985 w 113.1 -514.13 m 113.1 -500.855 l S Q q .3985 w 85.525 -514.13 m 113.299 -514.13 l S Q 0 G 0 g BT /F2 10.5 Tf 115.924 -510.837 Td[<09ba107f>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.064 0.201 0.58 RG 0.064 0.201 0.58 rg q 171.448 -513.93 26.978 12.876 re f Q 0 G 0 g 0.064 0.201 0.58 RG 0.064 0.201 0.58 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -500.855 m 198.824 -500.855 l S Q q .3985 w 171.248 -514.13 m 171.248 -500.855 l S Q q .3985 w 198.624 -514.13 m 198.624 -500.855 l S Q q .3985 w 171.049 -514.13 m 198.824 -514.13 l S Q 0 G 0 g BT /F2 10.5 Tf 201.449 -510.837 Td[<119e0c5d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.6 0.09 0.133 RG 0.6 0.09 0.133 rg q 256.972 -513.93 26.978 12.876 re f Q 0 G 0 g 0.6 0.09 0.133 RG 0.6 0.09 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -500.855 m 284.348 -500.855 l S Q q .3985 w 256.773 -514.13 m 256.773 -500.855 l S Q q .3985 w 284.149 -514.13 m 284.149 -500.855 l S Q q .3985 w 256.574 -514.13 m 284.348 -514.13 l S Q 0 G 0 g BT /F2 10.5 Tf 286.973 -510.837 Td[<119e0505>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.87 0.586 0.096 RG 0.87 0.586 0.096 rg q 342.497 -513.93 26.978 12.876 re f Q 0 G 0 g 0.87 0.586 0.096 RG 0.87 0.586 0.096 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -500.855 m 369.873 -500.855 l S Q q .3985 w 342.297 -514.13 m 342.297 -500.855 l S Q q .3985 w 369.673 -514.13 m 369.673 -500.855 l S Q q .3985 w 342.098 -514.13 m 369.873 -514.13 l S Q 0 G 0 g BT /F2 10.5 Tf 372.498 -510.837 Td[<119e07db>]TJ ET Q
+
+endstream
+endobj
+66 0 obj
+<</Length 171350>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 228.423 -731.035 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<00120011>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F13 10.5 Tf 21 4.437 Td[<2667252c51317dffb451255a50013cbcb4512ed0752df3516c2e7cb72e75>]TJ ET 0 1 0 0 K 0 1 0 0 k BT /F13 10.5 Tf 178.5 4.437 Td[<76db4937>]TJ ET 0 G 0 g BT /F13 10.5 Tf 199.605 4.437 Td[<4cc02775f34f38edbb1af34e8d1ebb1a51312aa3752655d9672ef34f52d13de65a604b7127077526f351ab1e2587f34f>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.702 0.655 RG 1 0.702 0.655 rg q .398 -26.992 26.978 12.876 re f Q 0 G 0 g 1 0.702 0.655 RG 1 0.702 0.655 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -13.917 m 27.775 -13.917 l S Q q .3985 w .199 -27.191 m .199 -13.917 l S Q q .3985 w 27.575 -27.191 m 27.575 -13.917 l S Q q .3985 w 0 -27.191 m 27.775 -27.191 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -23.898 Td[<7a3c7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.929 0.341 0.212 RG 0.929 0.341 0.212 rg q 85.923 -26.992 26.978 12.876 re f Q 0 G 0 g 0.929 0.341 0.212 RG 0.929 0.341 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -13.917 m 113.299 -13.917 l S Q q .3985 w 85.724 -27.191 m 85.724 -13.917 l S Q q .3985 w 113.1 -27.191 m 113.1 -13.917 l S Q q .3985 w 85.525 -27.191 m 113.299 -27.191 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -23.898 Td[<3805865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0 0.337 RG 0.941 0 0.337 rg q 171.448 -26.992 26.978 12.876 re f Q 0 G 0 g 0.941 0 0.337 RG 0.941 0 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -13.917 m 198.824 -13.917 l S Q q .3985 w 171.248 -27.191 m 171.248 -13.917 l S Q q .3985 w 198.624 -27.191 m 198.624 -13.917 l S Q q .3985 w 171.049 -27.191 m 198.824 -27.191 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -23.898 Td[<2fe37b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.957 0.475 0.514 RG 0.957 0.475 0.514 rg q 256.972 -26.992 26.978 12.876 re f Q 0 G 0 g 0.957 0.475 0.514 RG 0.957 0.475 0.514 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -13.917 m 284.348 -13.917 l S Q q .3985 w 256.773 -27.191 m 256.773 -13.917 l S Q q .3985 w 284.149 -27.191 m 284.149 -13.917 l S Q q .3985 w 256.574 -27.191 m 284.348 -27.191 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -23.898 Td[<54777b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.859 0.353 0.42 RG 0.859 0.353 0.42 rg q 342.497 -26.992 26.978 12.876 re f Q 0 G 0 g 0.859 0.353 0.42 RG 0.859 0.353 0.42 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -13.917 m 369.873 -13.917 l S Q q .3985 w 342.297 -27.191 m 342.297 -13.917 l S Q q .3985 w 369.673 -27.191 m 369.673 -13.917 l S Q q .3985 w 342.098 -27.191 m 369.873 -27.191 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -23.898 Td[<5daf557d7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.949 0.047 0 RG 0.949 0.047 0 rg q 428.021 -26.992 26.978 12.876 re f Q 0 G 0 g 0.949 0.047 0 RG 0.949 0.047 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -13.917 m 455.397 -13.917 l S Q q .3985 w 427.822 -27.191 m 427.822 -13.917 l S Q q .3985 w 455.198 -27.191 m 455.198 -13.917 l S Q q .3985 w 427.623 -27.191 m 455.397 -27.191 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -23.898 Td[<712a57037b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.788 0.216 0.337 RG 0.788 0.216 0.337 rg q .398 -43.372 26.978 12.876 re f Q 0 G 0 g 0.788 0.216 0.337 RG 0.788 0.216 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -30.297 m 27.775 -30.297 l S Q q .3985 w .199 -43.571 m .199 -30.297 l S Q q .3985 w 27.575 -43.571 m 27.575 -30.297 l S Q q .3985 w 0 -43.571 m 27.775 -43.571 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -40.278 Td[<597e5477865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.337 0.329 RG 0.941 0.337 0.329 rg q 85.923 -43.372 26.978 12.876 re f Q 0 G 0 g 0.941 0.337 0.329 RG 0.941 0.337 0.329 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -30.297 m 113.299 -30.297 l S Q q .3985 w 85.724 -43.571 m 85.724 -30.297 l S Q q .3985 w 113.1 -43.571 m 113.1 -30.297 l S Q q .3985 w 85.525 -43.571 m 113.299 -43.571 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -40.278 Td[<a5f07b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.129 0.129 RG 1 0.129 0.129 rg q 171.448 -43.372 26.978 12.876 re f Q 0 G 0 g 1 0.129 0.129 RG 1 0.129 0.129 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -30.297 m 198.824 -30.297 l S Q q .3985 w 171.248 -43.571 m 171.248 -30.297 l S Q q .3985 w 198.624 -43.571 m 198.624 -30.297 l S Q q .3985 w 171.049 -43.571 m 198.824 -43.571 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -40.278 Td[<37557b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.549 0.263 0.337 RG 0.549 0.263 0.337 rg q 256.972 -43.372 26.978 12.876 re f Q 0 G 0 g 0.549 0.263 0.337 RG 0.549 0.263 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -30.297 m 284.348 -30.297 l S Q q .3985 w 256.773 -43.571 m 256.773 -30.297 l S Q q .3985 w 284.149 -43.571 m 284.149 -30.297 l S Q q .3985 w 256.574 -43.571 m 284.348 -43.571 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -40.278 Td[<7c297b8d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.784 0.235 0.137 RG 0.784 0.235 0.137 rg q 342.497 -43.372 26.978 12.876 re f Q 0 G 0 g 0.784 0.235 0.137 RG 0.784 0.235 0.137 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -30.297 m 369.873 -30.297 l S Q q .3985 w 342.297 -43.571 m 342.297 -30.297 l S Q q .3985 w 369.673 -43.571 m 369.673 -30.297 l S Q q .3985 w 342.098 -43.571 m 369.873 -43.571 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -40.278 Td[<7cf17b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.616 0.161 0.2 RG 0.616 0.161 0.2 rg q 428.021 -43.372 26.978 12.876 re f Q 0 G 0 g 0.616 0.161 0.2 RG 0.616 0.161 0.2 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -30.297 m 455.397 -30.297 l S Q q .3985 w 427.822 -43.571 m 427.822 -30.297 l S Q q .3985 w 455.198 -43.571 m 455.198 -30.297 l S Q q .3985 w 427.623 -43.571 m 455.397 -43.571 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -40.278 Td[<82fd832e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.298 0 RG 1 0.298 0 rg q .398 -59.752 26.978 12.876 re f Q 0 G 0 g 1 0.298 0 RG 1 0.298 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -46.677 m 27.775 -46.677 l S Q q .3985 w .199 -59.951 m .199 -46.677 l S Q q .3985 w 27.575 -59.951 m 27.575 -46.677 l S Q q .3985 w 0 -59.951 m 27.775 -59.951 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -56.658 Td[<52da7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.306 0.125 RG 1 0.306 0.125 rg q 85.923 -59.752 26.978 12.876 re f Q 0 G 0 g 1 0.306 0.125 RG 1 0.306 0.125 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -46.677 m 113.299 -46.677 l S Q q .3985 w 85.724 -59.951 m 85.724 -46.677 l S Q q .3985 w 113.1 -59.951 m 113.1 -46.677 l S Q q .3985 w 85.525 -59.951 m 113.299 -59.951 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -56.658 Td[<256b>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.953 0.325 0.212 RG 0.953 0.325 0.212 rg q 171.448 -59.752 26.978 12.876 re f Q 0 G 0 g 0.953 0.325 0.212 RG 0.953 0.325 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -46.677 m 198.824 -46.677 l S Q q .3985 w 171.248 -59.951 m 171.248 -46.677 l S Q q .3985 w 198.624 -59.951 m 198.624 -46.677 l S Q q .3985 w 171.049 -59.951 m 198.824 -59.951 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -56.658 Td[<44fe>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.796 0.227 0.337 RG 0.796 0.227 0.337 rg q 256.972 -59.752 26.978 12.876 re f Q 0 G 0 g 0.796 0.227 0.337 RG 0.796 0.227 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -46.677 m 284.348 -46.677 l S Q q .3985 w 256.773 -59.951 m 256.773 -46.677 l S Q q .3985 w 284.149 -59.951 m 284.149 -46.677 l S Q q .3985 w 256.574 -59.951 m 284.348 -59.951 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -56.658 Td[<87b3865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.176 0.318 RG 1 0.176 0.318 rg q 342.497 -59.752 26.978 12.876 re f Q 0 G 0 g 1 0.176 0.318 RG 1 0.176 0.318 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -46.677 m 369.873 -46.677 l S Q q .3985 w 342.297 -59.951 m 342.297 -46.677 l S Q q .3985 w 369.673 -59.951 m 369.673 -46.677 l S Q q .3985 w 342.098 -59.951 m 369.873 -59.951 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -56.658 Td[<632a7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.788 0.122 0.216 RG 0.788 0.122 0.216 rg q 428.021 -59.752 26.978 12.876 re f Q 0 G 0 g 0.788 0.122 0.216 RG 0.788 0.122 0.216 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -46.677 m 455.397 -46.677 l S Q q .3985 w 427.822 -59.951 m 427.822 -46.677 l S Q q .3985 w 455.198 -59.951 m 455.198 -46.677 l S Q q .3985 w 427.623 -59.951 m 455.397 -59.951 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -56.658 Td[<9c3a9c31>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.937 0.478 0.51 RG 0.937 0.478 0.51 rg q .398 -76.132 26.978 12.876 re f Q 0 G 0 g 0.937 0.478 0.51 RG 0.937 0.478 0.51 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -63.057 m 27.775 -63.057 l S Q q .3985 w .199 -76.331 m .199 -63.057 l S Q q .3985 w 27.575 -76.331 m 27.575 -63.057 l S Q q .3985 w 0 -76.331 m 27.775 -76.331 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -73.038 Td[<3b977b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0 0.592 RG 1 0 0.592 rg q 85.923 -76.132 26.978 12.876 re f Q 0 G 0 g 1 0 0.592 RG 1 0 0.592 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -63.057 m 113.299 -63.057 l S Q q .3985 w 85.724 -76.331 m 85.724 -63.057 l S Q q .3985 w 113.1 -76.331 m 113.1 -63.057 l S Q q .3985 w 85.525 -76.331 m 113.299 -76.331 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -73.038 Td[<5d0e7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.2 0 RG 1 0.2 0 rg q 171.448 -76.132 26.978 12.876 re f Q 0 G 0 g 1 0.2 0 RG 1 0.2 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -63.057 m 198.824 -63.057 l S Q q .3985 w 171.248 -76.331 m 171.248 -63.057 l S Q q .3985 w 198.624 -76.331 m 198.624 -63.057 l S Q q .3985 w 171.049 -76.331 m 198.824 -76.331 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -73.038 Td[<636a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.765 0.153 0.169 RG 0.765 0.153 0.169 rg q 256.972 -76.132 26.978 12.876 re f Q 0 G 0 g 0.765 0.153 0.169 RG 0.765 0.153 0.169 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -63.057 m 284.348 -63.057 l S Q q .3985 w 256.773 -76.331 m 256.773 -63.057 l S Q q .3985 w 284.149 -76.331 m 284.149 -63.057 l S Q q .3985 w 256.574 -76.331 m 284.348 -76.331 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -73.038 Td[<9c31>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.663 0.506 0.459 RG 0.663 0.506 0.459 rg q 342.497 -76.132 26.978 12.876 re f Q 0 G 0 g 0.663 0.506 0.459 RG 0.663 0.506 0.459 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -63.057 m 369.873 -63.057 l S Q q .3985 w 342.297 -76.331 m 342.297 -63.057 l S Q q .3985 w 369.673 -76.331 m 369.673 -63.057 l S Q q .3985 w 342.098 -76.331 m 369.873 -76.331 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -73.038 Td[<7cb2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.765 0.129 0.212 RG 0.765 0.129 0.212 rg q 428.021 -76.132 26.978 12.876 re f Q 0 G 0 g 0.765 0.129 0.212 RG 0.765 0.129 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -63.057 m 455.397 -63.057 l S Q q .3985 w 427.822 -76.331 m 427.822 -63.057 l S Q q .3985 w 455.198 -76.331 m 455.198 -63.057 l S Q q .3985 w 427.623 -76.331 m 455.397 -76.331 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -73.038 Td[<55707b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.702 0.427 0.38 RG 0.702 0.427 0.38 rg q .398 -92.512 26.978 12.876 re f Q 0 G 0 g 0.702 0.427 0.38 RG 0.702 0.427 0.38 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -79.437 m 27.775 -79.437 l S Q q .3985 w .199 -92.711 m .199 -79.437 l S Q q .3985 w 27.575 -92.711 m 27.575 -79.437 l S Q q .3985 w 0 -92.711 m 27.775 -92.711 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -89.418 Td[<5884>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.745 0 0.184 RG 0.745 0 0.184 rg q 85.923 -92.512 26.978 12.876 re f Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -79.437 m 113.299 -79.437 l S Q q .3985 w 85.724 -92.711 m 85.724 -79.437 l S Q q .3985 w 113.1 -92.711 m 113.1 -79.437 l S Q q .3985 w 85.525 -92.711 m 113.299 -92.711 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -89.418 Td[<5ade7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 171.448 -92.512 26.978 12.876 re f Q 0 G 0 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -79.437 m 198.824 -79.437 l S Q q .3985 w 171.248 -92.711 m 171.248 -79.437 l S Q q .3985 w 198.624 -92.711 m 198.624 -79.437 l S Q q .3985 w 171.049 -92.711 m 198.824 -92.711 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -89.418 Td[<a3fc7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.976 0.565 0.435 RG 0.976 0.565 0.435 rg q 256.972 -92.512 26.978 12.876 re f Q 0 G 0 g 0.976 0.565 0.435 RG 0.976 0.565 0.435 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -79.437 m 284.348 -79.437 l S Q q .3985 w 256.773 -92.711 m 256.773 -79.437 l S Q q .3985 w 284.149 -92.711 m 284.149 -79.437 l S Q q .3985 w 256.574 -92.711 m 284.348 -92.711 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -89.418 Td[<a3fcafba>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.945 0.263 RG 1 0.945 0.263 rg q 342.497 -92.512 26.978 12.876 re f Q 0 G 0 g 1 0.945 0.263 RG 1 0.945 0.263 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -79.437 m 369.873 -79.437 l S Q q .3985 w 342.297 -92.711 m 342.297 -79.437 l S Q q .3985 w 369.673 -92.711 m 369.673 -79.437 l S Q q .3985 w 342.098 -92.711 m 369.873 -92.711 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -89.418 Td[<b89abb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.98 1 0.447 RG 0.98 1 0.447 rg q 428.021 -92.512 26.978 12.876 re f Q 0 G 0 g 0.98 1 0.447 RG 0.98 1 0.447 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -79.437 m 455.397 -79.437 l S Q q .3985 w 427.822 -92.711 m 427.822 -79.437 l S Q q .3985 w 455.198 -92.711 m 455.198 -79.437 l S Q q .3985 w 427.623 -92.711 m 455.397 -92.711 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -89.418 Td[<b843bb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.918 1 0.337 RG 0.918 1 0.337 rg q .398 -108.892 26.978 12.876 re f Q 0 G 0 g 0.918 1 0.337 RG 0.918 1 0.337 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -95.817 m 27.775 -95.817 l S Q q .3985 w .199 -109.091 m .199 -95.817 l S Q q .3985 w 27.575 -109.091 m 27.575 -95.817 l S Q q .3985 w 0 -109.091 m 27.775 -109.091 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -105.798 Td[<597e8818865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.651 0.192 RG 1 0.651 0.192 rg q 85.923 -108.892 26.978 12.876 re f Q 0 G 0 g 1 0.651 0.192 RG 1 0.651 0.192 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -95.817 m 113.299 -95.817 l S Q q .3985 w 85.724 -109.091 m 85.724 -95.817 l S Q q .3985 w 113.1 -109.091 m 113.1 -95.817 l S Q q .3985 w 85.525 -109.091 m 113.299 -109.091 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -105.798 Td[<5304bb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.549 0.192 RG 1 0.549 0.192 rg q 171.448 -108.892 26.978 12.876 re f Q 0 G 0 g 1 0.549 0.192 RG 1 0.549 0.192 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -95.817 m 198.824 -95.817 l S Q q .3985 w 171.248 -109.091 m 171.248 -95.817 l S Q q .3985 w 198.624 -109.091 m 198.624 -95.817 l S Q q .3985 w 171.049 -109.091 m 198.824 -109.091 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -105.798 Td[<53047b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.537 0.212 RG 1 0.537 0.212 rg q 256.972 -108.892 26.978 12.876 re f Q 0 G 0 g 1 0.537 0.212 RG 1 0.537 0.212 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -95.817 m 284.348 -95.817 l S Q q .3985 w 256.773 -109.091 m 256.773 -95.817 l S Q q .3985 w 284.149 -109.091 m 284.149 -95.817 l S Q q .3985 w 256.574 -109.091 m 284.348 -109.091 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -105.798 Td[<583fbb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.643 0 RG 1 0.643 0 rg q 342.497 -108.892 26.978 12.876 re f Q 0 G 0 g 1 0.643 0 RG 1 0.643 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -95.817 m 369.873 -95.817 l S Q q .3985 w 342.297 -109.091 m 342.297 -95.817 l S Q q .3985 w 369.673 -109.091 m 369.673 -95.817 l S Q q .3985 w 342.098 -109.091 m 369.873 -109.091 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -105.798 Td[<5841bb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.459 0 RG 1 0.459 0 rg q 428.021 -108.892 26.978 12.876 re f Q 0 G 0 g 1 0.459 0 RG 1 0.459 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -95.817 m 455.397 -95.817 l S Q q .3985 w 427.822 -109.091 m 427.822 -95.817 l S Q q .3985 w 455.198 -109.091 m 455.198 -95.817 l S Q q .3985 w 427.623 -109.091 m 455.397 -109.091 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -105.798 Td[<583f7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.78 0.451 RG 1 0.78 0.451 rg q .398 -125.272 26.978 12.876 re f Q 0 G 0 g 1 0.78 0.451 RG 1 0.78 0.451 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -112.197 m 27.775 -112.197 l S Q q .3985 w .199 -125.471 m .199 -112.197 l S Q q .3985 w 27.575 -125.471 m 27.575 -112.197 l S Q q .3985 w 0 -125.471 m 27.775 -125.471 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -122.178 Td[<38edbb1b>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.761 0.224 RG 0.941 0.761 0.224 rg q 85.923 -125.272 26.978 12.876 re f Q 0 G 0 g 0.941 0.761 0.224 RG 0.941 0.761 0.224 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -112.197 m 113.299 -112.197 l S Q q .3985 w 85.724 -125.471 m 85.724 -112.197 l S Q q .3985 w 113.1 -125.471 m 113.1 -112.197 l S Q q .3985 w 85.525 -125.471 m 113.299 -125.471 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -122.178 Td[<7d08865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.98 0.549 0.208 RG 0.98 0.549 0.208 rg q 171.448 -125.272 26.978 12.876 re f Q 0 G 0 g 0.98 0.549 0.208 RG 0.98 0.549 0.208 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -112.197 m 198.824 -112.197 l S Q q .3985 w 171.248 -125.471 m 171.248 -112.197 l S Q q .3985 w 198.624 -125.471 m 198.624 -112.197 l S Q q .3985 w 171.049 -125.471 m 198.824 -125.471 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -122.178 Td[<5841865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.702 0.361 0.267 RG 0.702 0.361 0.267 rg q 256.972 -125.272 26.978 12.876 re f Q 0 G 0 g 0.702 0.361 0.267 RG 0.702 0.361 0.267 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -112.197 m 284.348 -112.197 l S Q q .3985 w 256.773 -125.471 m 256.773 -112.197 l S Q q .3985 w 284.149 -125.471 m 284.149 -112.197 l S Q q .3985 w 256.574 -125.471 m 284.348 -125.471 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -122.178 Td[<87ed865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.659 0.518 0.384 RG 0.659 0.518 0.384 rg q 342.497 -125.272 26.978 12.876 re f Q 0 G 0 g 0.659 0.518 0.384 RG 0.659 0.518 0.384 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -112.197 m 369.873 -112.197 l S Q q .3985 w 342.297 -125.471 m 342.297 -112.197 l S Q q .3985 w 369.673 -125.471 m 369.673 -112.197 l S Q q .3985 w 342.098 -125.471 m 369.873 -125.471 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -122.178 Td[<b291865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.784 0.608 0.251 RG 0.784 0.608 0.251 rg q 428.021 -125.272 26.978 12.876 re f Q 0 G 0 g 0.784 0.608 0.251 RG 0.784 0.608 0.251 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -112.197 m 455.397 -112.197 l S Q q .3985 w 427.822 -125.471 m 427.822 -112.197 l S Q q .3985 w 455.198 -125.471 m 455.198 -112.197 l S Q q .3985 w 427.623 -125.471 m 455.397 -125.471 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -122.178 Td[<50fdbb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.376 0.157 0.118 RG 0.376 0.157 0.118 rg q .398 -141.652 26.978 12.876 re f Q 0 G 0 g 0.376 0.157 0.118 RG 0.376 0.157 0.118 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -128.577 m 27.775 -128.577 l S Q q .3985 w .199 -141.851 m .199 -128.577 l S Q q .3985 w 27.575 -141.851 m 27.575 -128.577 l S Q q .3985 w 0 -141.851 m 27.775 -141.851 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -138.558 Td[<542f865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.698 0.365 0.145 RG 0.698 0.365 0.145 rg q 85.923 -141.652 26.978 12.876 re f Q 0 G 0 g 0.698 0.365 0.145 RG 0.698 0.365 0.145 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -128.577 m 113.299 -128.577 l S Q q .3985 w 85.724 -141.851 m 85.724 -128.577 l S Q q .3985 w 113.1 -141.851 m 113.1 -128.577 l S Q q .3985 w 85.525 -141.851 m 113.299 -141.851 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -138.558 Td[<5615865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.51 0.443 0 RG 0.51 0.443 0 rg q 171.448 -141.652 26.978 12.876 re f Q 0 G 0 g 0.51 0.443 0 RG 0.51 0.443 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -128.577 m 198.824 -128.577 l S Q q .3985 w 171.248 -141.851 m 171.248 -128.577 l S Q q .3985 w 198.624 -141.851 m 198.624 -128.577 l S Q q .3985 w 171.049 -141.851 m 198.824 -141.851 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -138.558 Td[<56157c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.486 0.294 0 RG 0.486 0.294 0 rg q 256.972 -141.652 26.978 12.876 re f Q 0 G 0 g 0.486 0.294 0 RG 0.486 0.294 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -128.577 m 284.348 -128.577 l S Q q .3985 w 256.773 -141.851 m 256.773 -128.577 l S Q q .3985 w 284.149 -141.851 m 284.149 -128.577 l S Q q .3985 w 256.574 -141.851 m 284.348 -141.851 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -138.558 Td[<5615bb36>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.608 0.267 0 RG 0.608 0.267 0 rg q 342.497 -141.652 26.978 12.876 re f Q 0 G 0 g 0.608 0.267 0 RG 0.608 0.267 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -128.577 m 369.873 -128.577 l S Q q .3985 w 342.297 -141.851 m 342.297 -128.577 l S Q q .3985 w 369.673 -141.851 m 369.673 -128.577 l S Q q .3985 w 342.098 -141.851 m 369.873 -141.851 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -138.558 Td[<56157b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.682 0.439 0 RG 0.682 0.439 0 rg q 428.021 -141.652 26.978 12.876 re f Q 0 G 0 g 0.682 0.439 0 RG 0.682 0.439 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -128.577 m 455.397 -128.577 l S Q q .3985 w 427.822 -141.851 m 427.822 -128.577 l S Q q .3985 w 455.198 -141.851 m 455.198 -128.577 l S Q q .3985 w 427.623 -141.851 m 455.397 -141.851 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -138.558 Td[<5615bb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.584 0.333 0.224 RG 0.584 0.333 0.224 rg q .398 -158.032 26.978 12.876 re f Q 0 G 0 g 0.584 0.333 0.224 RG 0.584 0.333 0.224 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -144.957 m 27.775 -144.957 l S Q q .3985 w .199 -158.231 m .199 -144.957 l S Q q .3985 w 27.575 -158.231 m 27.575 -144.957 l S Q q .3985 w 0 -158.231 m 27.775 -158.231 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -154.938 Td[<9c3d865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.792 0.412 0.141 RG 0.792 0.412 0.141 rg q 85.923 -158.032 26.978 12.876 re f Q 0 G 0 g 0.792 0.412 0.141 RG 0.792 0.412 0.141 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -144.957 m 113.299 -144.957 l S Q q .3985 w 85.724 -158.231 m 85.724 -144.957 l S Q q .3985 w 113.1 -158.231 m 113.1 -144.957 l S Q q .3985 w 85.525 -158.231 m 113.299 -158.231 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -154.938 Td[<6a066969>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.431 0.318 0.118 RG 0.431 0.318 0.118 rg q 171.448 -158.032 26.978 12.876 re f Q 0 G 0 g 0.431 0.318 0.118 RG 0.431 0.318 0.118 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -144.957 m 198.824 -144.957 l S Q q .3985 w 171.248 -158.231 m 171.248 -144.957 l S Q q .3985 w 198.624 -158.231 m 198.624 -144.957 l S Q q .3985 w 171.049 -158.231 m 198.824 -158.231 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -154.938 Td[<9417865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.827 0.694 0.49 RG 0.827 0.694 0.49 rg q 256.972 -158.032 26.978 12.876 re f Q 0 G 0 g 0.827 0.694 0.49 RG 0.827 0.694 0.49 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -144.957 m 284.348 -144.957 l S Q q .3985 w 256.773 -158.231 m 256.773 -144.957 l S Q q .3985 w 284.149 -158.231 m 284.149 -144.957 l S Q q .3985 w 256.574 -158.231 m 284.348 -158.231 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -154.938 Td[<538fbb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.886 0.612 0.271 RG 0.886 0.612 0.271 rg q 342.497 -158.032 26.978 12.876 re f Q 0 G 0 g 0.886 0.612 0.271 RG 0.886 0.612 0.271 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -144.957 m 369.873 -144.957 l S Q q .3985 w 342.297 -158.231 m 342.297 -144.957 l S Q q .3985 w 369.673 -158.231 m 369.673 -144.957 l S Q q .3985 w 342.098 -158.231 m 369.873 -158.231 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -154.938 Td[<bb1a5954>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.537 0.424 0.224 RG 0.537 0.424 0.224 rg q 428.021 -158.032 26.978 12.876 re f Q 0 G 0 g 0.537 0.424 0.224 RG 0.537 0.424 0.224 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -144.957 m 455.397 -144.957 l S Q q .3985 w 427.822 -158.231 m 427.822 -144.957 l S Q q .3985 w 455.198 -158.231 m 455.198 -144.957 l S Q q .3985 w 427.623 -158.231 m 455.397 -158.231 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -154.938 Td[<747e865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.851 0.714 0.067 RG 0.851 0.714 0.067 rg q .398 -174.412 26.978 12.876 re f Q 0 G 0 g 0.851 0.714 0.067 RG 0.851 0.714 0.067 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -161.337 m 27.775 -161.337 l S Q q .3985 w .199 -174.611 m .199 -161.337 l S Q q .3985 w 27.575 -174.611 m 27.575 -161.337 l S Q q .3985 w 0 -174.611 m 27.775 -174.611 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -171.318 Td[<747eb226865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.741 0.867 0.133 RG 0.741 0.867 0.133 rg q 85.923 -174.412 26.978 12.876 re f Q 0 G 0 g 0.741 0.867 0.133 RG 0.741 0.867 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -161.337 m 113.299 -161.337 l S Q q .3985 w 85.724 -174.611 m 85.724 -161.337 l S Q q .3985 w 113.1 -174.611 m 113.1 -161.337 l S Q q .3985 w 85.525 -174.611 m 113.299 -174.611 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -171.318 Td[<3ba77c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.788 0.867 0.133 RG 0.788 0.867 0.133 rg q 171.448 -174.412 26.978 12.876 re f Q 0 G 0 g 0.788 0.867 0.133 RG 0.788 0.867 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -161.337 m 198.824 -161.337 l S Q q .3985 w 171.248 -174.611 m 171.248 -161.337 l S Q q .3985 w 198.624 -174.611 m 198.624 -161.337 l S Q q .3985 w 171.049 -174.611 m 198.824 -174.611 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -171.318 Td[<53febb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.686 0.867 0.133 RG 0.686 0.867 0.133 rg q 256.972 -174.412 26.978 12.876 re f Q 0 G 0 g 0.686 0.867 0.133 RG 0.686 0.867 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -161.337 m 284.348 -161.337 l S Q q .3985 w 256.773 -174.611 m 256.773 -161.337 l S Q q .3985 w 284.149 -174.611 m 284.149 -161.337 l S Q q .3985 w 256.574 -174.611 m 284.348 -174.611 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -171.318 Td[<53fe7c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.471 0.573 0.384 RG 0.471 0.573 0.384 rg q 342.497 -174.412 26.978 12.876 re f Q 0 G 0 g 0.471 0.573 0.384 RG 0.471 0.573 0.384 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -161.337 m 369.873 -161.337 l S Q q .3985 w 342.297 -174.611 m 342.297 -161.337 l S Q q .3985 w 369.673 -174.611 m 369.673 -161.337 l S Q q .3985 w 342.098 -174.611 m 369.873 -174.611 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -171.318 Td[<76efadf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.639 0.851 0 RG 0.639 0.851 0 rg q 428.021 -174.412 26.978 12.876 re f Q 0 G 0 g 0.639 0.851 0 RG 0.639 0.851 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -161.337 m 455.397 -161.337 l S Q q .3985 w 427.822 -174.611 m 427.822 -161.337 l S Q q .3985 w 455.198 -174.611 m 455.198 -161.337 l S Q q .3985 w 427.623 -174.611 m 455.397 -174.611 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -171.318 Td[<8c25bb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.62 0.851 0 RG 0.62 0.851 0 rg q .398 -190.792 26.978 12.876 re f Q 0 G 0 g 0.62 0.851 0 RG 0.62 0.851 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -177.717 m 27.775 -177.717 l S Q q .3985 w .199 -190.991 m .199 -177.717 l S Q q .3985 w 27.575 -190.991 m 27.575 -177.717 l S Q q .3985 w 0 -190.991 m 27.775 -190.991 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -187.698 Td[<8c257c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.055 0.722 0.227 RG 0.055 0.722 0.227 rg q 85.923 -190.792 26.978 12.876 re f Q 0 G 0 g 0.055 0.722 0.227 RG 0.055 0.722 0.227 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -177.717 m 113.299 -177.717 l S Q q .3985 w 85.724 -190.991 m 85.724 -177.717 l S Q q .3985 w 113.1 -190.991 m 113.1 -177.717 l S Q q .3985 w 85.525 -190.991 m 113.299 -190.991 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -187.698 Td[<8c25adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.039 0.639 0.267 RG 0.039 0.639 0.267 rg q 171.448 -190.792 26.978 12.876 re f Q 0 G 0 g 0.039 0.639 0.267 RG 0.039 0.639 0.267 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -177.717 m 198.824 -177.717 l S Q q .3985 w 171.248 -190.991 m 171.248 -177.717 l S Q q .3985 w 198.624 -190.991 m 198.624 -177.717 l S Q q .3985 w 171.049 -190.991 m 198.824 -190.991 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -187.698 Td[<adf28c25>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.737 0.071 RG 0 0.737 0.071 rg q 256.972 -190.792 26.978 12.876 re f Q 0 G 0 g 0 0.737 0.071 RG 0 0.737 0.071 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -177.717 m 284.348 -177.717 l S Q q .3985 w 256.773 -190.991 m 256.773 -177.717 l S Q q .3985 w 284.149 -190.991 m 284.149 -177.717 l S Q q .3985 w 256.574 -190.991 m 284.348 -190.991 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -187.698 Td[<5c937c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.047 0.537 0.094 RG 0.047 0.537 0.094 rg q 342.497 -190.792 26.978 12.876 re f Q 0 G 0 g 0.047 0.537 0.094 RG 0.047 0.537 0.094 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -177.717 m 369.873 -177.717 l S Q q .3985 w 342.297 -190.991 m 342.297 -177.717 l S Q q .3985 w 369.673 -190.991 m 369.673 -177.717 l S Q q .3985 w 342.098 -190.991 m 369.873 -190.991 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -187.698 Td[<7c8e5c4c>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.106 0.82 0.647 RG 0.106 0.82 0.647 rg q 428.021 -190.792 26.978 12.876 re f Q 0 G 0 g 0.106 0.82 0.647 RG 0.106 0.82 0.647 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -177.717 m 455.397 -177.717 l S Q q .3985 w 427.822 -190.991 m 427.822 -177.717 l S Q q .3985 w 455.198 -190.991 m 455.198 -177.717 l S Q q .3985 w 427.623 -190.991 m 455.397 -190.991 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -187.698 Td[<7242865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.165 0.867 0.612 RG 0.165 0.867 0.612 rg q .398 -207.172 26.978 12.876 re f Q 0 G 0 g 0.165 0.867 0.612 RG 0.165 0.867 0.612 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -194.097 m 27.775 -194.097 l S Q q .3985 w .199 -207.371 m .199 -194.097 l S Q q .3985 w 27.575 -207.371 m 27.575 -194.097 l S Q q .3985 w 0 -207.371 m 27.775 -207.371 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -204.078 Td[<72427c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.282 0.753 0.639 RG 0.282 0.753 0.639 rg q 85.923 -207.172 26.978 12.876 re f Q 0 G 0 g 0.282 0.753 0.639 RG 0.282 0.753 0.639 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -194.097 m 113.299 -194.097 l S Q q .3985 w 85.724 -207.371 m 85.724 -194.097 l S Q q .3985 w 113.1 -207.371 m 113.1 -194.097 l S Q q .3985 w 85.525 -207.371 m 113.299 -207.371 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -204.078 Td[<adf27242>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.239 0.882 0.678 RG 0.239 0.882 0.678 rg q 171.448 -207.172 26.978 12.876 re f Q 0 G 0 g 0.239 0.882 0.678 RG 0.239 0.882 0.678 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -194.097 m 198.824 -194.097 l S Q q .3985 w 171.248 -207.371 m 171.248 -194.097 l S Q q .3985 w 198.624 -207.371 m 198.624 -194.097 l S Q q .3985 w 171.049 -207.371 m 198.824 -207.371 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -204.078 Td[<f16c80ca865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.251 0.871 0.353 RG 0.251 0.871 0.353 rg q 256.972 -207.172 26.978 12.876 re f Q 0 G 0 g 0.251 0.871 0.353 RG 0.251 0.871 0.353 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -194.097 m 284.348 -194.097 l S Q q .3985 w 256.773 -207.371 m 256.773 -194.097 l S Q q .3985 w 284.149 -207.371 m 284.149 -194.097 l S Q q .3985 w 256.574 -207.371 m 284.348 -207.371 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -204.078 Td[<88187c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.878 0.62 RG 0 0.878 0.62 rg q 342.497 -207.172 26.978 12.876 re f Q 0 G 0 g 0 0.878 0.62 RG 0 0.878 0.62 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -194.097 m 369.873 -194.097 l S Q q .3985 w 342.297 -207.371 m 342.297 -194.097 l S Q q .3985 w 369.673 -207.371 m 369.673 -194.097 l S Q q .3985 w 342.098 -207.371 m 369.873 -207.371 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -204.078 Td[<adf2865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.878 0.475 RG 0 0.878 0.475 rg q 428.021 -207.172 26.978 12.876 re f Q 0 G 0 g 0 0.878 0.475 RG 0 0.878 0.475 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -194.097 m 455.397 -194.097 l S Q q .3985 w 427.822 -207.371 m 427.822 -194.097 l S Q q .3985 w 455.198 -207.371 m 455.198 -194.097 l S Q q .3985 w 427.623 -207.371 m 455.397 -207.371 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -204.078 Td[<adf280ca>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.753 0.922 0.843 RG 0.753 0.922 0.843 rg q .398 -223.552 26.978 12.876 re f Q 0 G 0 g 0.753 0.922 0.843 RG 0.753 0.922 0.843 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -210.477 m 27.775 -210.477 l S Q q .3985 w .199 -223.751 m .199 -210.477 l S Q q .3985 w 27.575 -223.751 m 27.575 -210.477 l S Q q .3985 w 0 -223.751 m 27.775 -223.751 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -220.458 Td[<adf26eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 85.923 -223.552 26.978 12.876 re f Q 0 G 0 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -210.477 m 113.299 -210.477 l S Q q .3985 w 85.724 -223.751 m 85.724 -210.477 l S Q q .3985 w 113.1 -223.751 m 113.1 -210.477 l S Q q .3985 w 85.525 -223.751 m 113.299 -223.751 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -220.458 Td[<b8432df0adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.733 0.804 0.773 RG 0.733 0.804 0.773 rg q 171.448 -223.552 26.978 12.876 re f Q 0 G 0 g 0.733 0.804 0.773 RG 0.733 0.804 0.773 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -210.477 m 198.824 -210.477 l S Q q .3985 w 171.248 -223.751 m 171.248 -210.477 l S Q q .3985 w 198.624 -223.751 m 198.624 -210.477 l S Q q .3985 w 171.049 -223.751 m 198.824 -223.751 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -220.458 Td[<91d65ae9adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.259 0.298 0.314 RG 0.259 0.298 0.314 rg q 256.972 -223.552 26.978 12.876 re f Q 0 G 0 g 0.259 0.298 0.314 RG 0.259 0.298 0.314 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -210.477 m 284.348 -210.477 l S Q q .3985 w 256.773 -223.751 m 256.773 -210.477 l S Q q .3985 w 284.149 -223.751 m 284.149 -210.477 l S Q q .3985 w 256.574 -223.751 m 284.348 -223.751 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -220.458 Td[<b810adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.898 0 RG 0 0.898 0 rg q 342.497 -223.552 26.978 12.876 re f Q 0 G 0 g 0 0.898 0 RG 0 0.898 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -210.477 m 369.873 -210.477 l S Q q .3985 w 342.297 -223.751 m 342.297 -210.477 l S Q q .3985 w 369.673 -223.751 m 369.673 -210.477 l S Q q .3985 w 342.098 -223.751 m 369.873 -223.751 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -220.458 Td[<7c8e865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.62 0.816 0.282 RG 0.62 0.816 0.282 rg q 428.021 -223.552 26.978 12.876 re f Q 0 G 0 g 0.62 0.816 0.282 RG 0.62 0.816 0.282 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -210.477 m 455.397 -210.477 l S Q q .3985 w 427.822 -223.751 m 427.822 -210.477 l S Q q .3985 w 455.198 -223.751 m 455.198 -210.477 l S Q q .3985 w 427.623 -223.751 m 455.397 -223.751 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -220.458 Td[<9a807c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.588 0.808 0.329 RG 0.588 0.808 0.329 rg q .398 -239.932 26.978 12.876 re f Q 0 G 0 g 0.588 0.808 0.329 RG 0.588 0.808 0.329 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -226.857 m 27.775 -226.857 l S Q q .3985 w .199 -240.131 m .199 -226.857 l S Q q .3985 w 27.575 -240.131 m 27.575 -226.857 l S Q q .3985 w 0 -240.131 m 27.775 -240.131 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -236.838 Td[<9a80adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.482 0.812 0.651 RG 0.482 0.812 0.651 rg q 85.923 -239.932 26.978 12.876 re f Q 0 G 0 g 0.482 0.812 0.651 RG 0.482 0.812 0.651 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -226.857 m 113.299 -226.857 l S Q q .3985 w 85.724 -240.131 m 85.724 -226.857 l S Q q .3985 w 113.1 -240.131 m 113.1 -226.857 l S Q q .3985 w 85.525 -240.131 m 113.299 -240.131 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -236.838 Td[<712aadf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.18 0.875 0.639 RG 0.18 0.875 0.639 rg q 171.448 -239.932 26.978 12.876 re f Q 0 G 0 g 0.18 0.875 0.639 RG 0.18 0.875 0.639 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -226.857 m 198.824 -226.857 l S Q q .3985 w 171.248 -240.131 m 171.248 -226.857 l S Q q .3985 w 198.624 -240.131 m 198.624 -226.857 l S Q q .3985 w 171.049 -240.131 m 198.824 -240.131 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -236.838 Td[<691d865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.498 0.925 0.678 RG 0.498 0.925 0.678 rg q 256.972 -239.932 26.978 12.876 re f Q 0 G 0 g 0.498 0.925 0.678 RG 0.498 0.925 0.678 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -226.857 m 284.348 -226.857 l S Q q .3985 w 256.773 -240.131 m 256.773 -226.857 l S Q q .3985 w 284.149 -240.131 m 284.149 -226.857 l S Q q .3985 w 256.574 -240.131 m 284.348 -240.131 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -236.838 Td[<7deb>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.643 0.886 0.776 RG 0.643 0.886 0.776 rg q 342.497 -239.932 26.978 12.876 re f Q 0 G 0 g 0.643 0.886 0.776 RG 0.643 0.886 0.776 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -226.857 m 369.873 -226.857 l S Q q .3985 w 342.297 -240.131 m 342.297 -226.857 l S Q q .3985 w 369.673 -240.131 m 369.673 -226.857 l S Q q .3985 w 342.098 -240.131 m 369.873 -240.131 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -236.838 Td[<86727c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.129 0.651 0.459 RG 0.129 0.651 0.459 rg q 428.021 -239.932 26.978 12.876 re f Q 0 G 0 g 0.129 0.651 0.459 RG 0.129 0.651 0.459 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -226.857 m 455.397 -226.857 l S Q q .3985 w 427.822 -240.131 m 427.822 -226.857 l S Q q .3985 w 455.198 -240.131 m 455.198 -226.857 l S Q q .3985 w 427.623 -240.131 m 455.397 -240.131 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -236.838 Td[<534553c37c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg q .398 -256.312 26.978 12.876 re f Q 0 G 0 g 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -243.237 m 27.775 -243.237 l S Q q .3985 w .199 -256.511 m .199 -243.237 l S Q q .3985 w 27.575 -256.511 m 27.575 -243.237 l S Q q .3985 w 0 -256.511 m 27.775 -256.511 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -253.218 Td[<534586df7c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg q 85.923 -256.312 26.978 12.876 re f Q 0 G 0 g 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -243.237 m 113.299 -243.237 l S Q q .3985 w 85.724 -256.511 m 85.724 -243.237 l S Q q .3985 w 113.1 -256.511 m 113.1 -243.237 l S Q q .3985 w 85.525 -256.511 m 113.299 -256.511 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -253.218 Td[<534586df865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.267 0.808 0.965 RG 0.267 0.808 0.965 rg q 171.448 -256.312 26.978 12.876 re f Q 0 G 0 g 0.267 0.808 0.965 RG 0.267 0.808 0.965 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -243.237 m 198.824 -243.237 l S Q q .3985 w 171.248 -256.511 m 171.248 -243.237 l S Q q .3985 w 198.624 -256.511 m 198.624 -243.237 l S Q q .3985 w 171.049 -256.511 m 198.824 -256.511 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -253.218 Td[<8db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.09 0.486 0.69 RG 0.09 0.486 0.69 rg q 256.972 -256.312 26.978 12.876 re f Q 0 G 0 g 0.09 0.486 0.69 RG 0.09 0.486 0.69 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -243.237 m 284.348 -243.237 l S Q q .3985 w 256.773 -256.511 m 256.773 -243.237 l S Q q .3985 w 284.149 -256.511 m 284.149 -243.237 l S Q q .3985 w 256.574 -256.511 m 284.348 -256.511 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -253.218 Td[<ae05adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg q 342.497 -256.312 26.978 12.876 re f Q 0 G 0 g 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -243.237 m 369.873 -243.237 l S Q q .3985 w 342.297 -256.511 m 342.297 -243.237 l S Q q .3985 w 369.673 -256.511 m 369.673 -243.237 l S Q q .3985 w 342.098 -256.511 m 369.873 -256.511 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -253.218 Td[<ae058db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.243 0.929 0.906 RG 0.243 0.929 0.906 rg q 428.021 -256.312 26.978 12.876 re f Q 0 G 0 g 0.243 0.929 0.906 RG 0.243 0.929 0.906 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -243.237 m 455.397 -243.237 l S Q q .3985 w 427.822 -256.511 m 427.822 -243.237 l S Q q .3985 w 455.198 -256.511 m 455.198 -243.237 l S Q q .3985 w 427.623 -256.511 m 455.397 -256.511 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -253.218 Td[<72428db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.439 0.953 1 RG 0.439 0.953 1 rg q .398 -272.692 26.978 12.876 re f Q 0 G 0 g 0.439 0.953 1 RG 0.439 0.953 1 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -259.617 m 27.775 -259.617 l S Q q .3985 w .199 -272.891 m .199 -259.617 l S Q q .3985 w 27.575 -272.891 m 27.575 -259.617 l S Q q .3985 w 0 -272.891 m 27.775 -272.891 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -269.598 Td[<8c078db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.294 0.361 0.769 RG 0.294 0.361 0.769 rg q 85.923 -272.692 26.978 12.876 re f Q 0 G 0 g 0.294 0.361 0.769 RG 0.294 0.361 0.769 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -259.617 m 113.299 -259.617 l S Q q .3985 w 85.724 -272.891 m 85.724 -259.617 l S Q q .3985 w 113.1 -272.891 m 113.1 -259.617 l S Q q .3985 w 85.525 -272.891 m 113.299 -272.891 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -269.598 Td[<3e058db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.631 0.686 0.788 RG 0.631 0.686 0.788 rg q 171.448 -272.692 26.978 12.876 re f Q 0 G 0 g 0.631 0.686 0.788 RG 0.631 0.686 0.788 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -259.617 m 198.824 -259.617 l S Q q .3985 w 171.248 -272.891 m 171.248 -259.617 l S Q q .3985 w 198.624 -272.891 m 198.624 -259.617 l S Q q .3985 w 171.049 -272.891 m 198.824 -272.891 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -269.598 Td[<8db06331865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.18 0.306 0.494 RG 0.18 0.306 0.494 rg q 256.972 -272.692 26.978 12.876 re f Q 0 G 0 g 0.18 0.306 0.494 RG 0.18 0.306 0.494 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -259.617 m 284.348 -259.617 l S Q q .3985 w 256.773 -272.891 m 256.773 -259.617 l S Q q .3985 w 284.149 -272.891 m 284.149 -259.617 l S Q q .3985 w 256.574 -272.891 m 284.348 -272.891 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -269.598 Td[<8db5adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.231 0.18 0.494 RG 0.231 0.18 0.494 rg q 342.497 -272.692 26.978 12.876 re f Q 0 G 0 g 0.231 0.18 0.494 RG 0.231 0.18 0.494 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -259.617 m 369.873 -259.617 l S Q q .3985 w 342.297 -272.891 m 342.297 -259.617 l S Q q .3985 w 369.673 -272.891 m 369.673 -259.617 l S Q q .3985 w 342.098 -272.891 m 369.873 -272.891 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -269.598 Td[<8db58db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.29 0.259 0.4 RG 0.29 0.259 0.4 rg q 428.021 -272.692 26.978 12.876 re f Q 0 G 0 g 0.29 0.259 0.4 RG 0.29 0.259 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -259.617 m 455.397 -259.617 l S Q q .3985 w 427.822 -272.891 m 427.822 -259.617 l S Q q .3985 w 455.198 -272.891 m 455.198 -259.617 l S Q q .3985 w 427.623 -272.891 m 455.397 -272.891 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -269.598 Td[<f314>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.259 0.4 0.4 RG 0.259 0.4 0.4 rg q .398 -289.072 26.978 12.876 re f Q 0 G 0 g 0.259 0.4 0.4 RG 0.259 0.4 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -275.997 m 27.775 -275.997 l S Q q .3985 w .199 -289.272 m .199 -275.997 l S Q q .3985 w 27.575 -289.272 m 27.575 -275.997 l S Q q .3985 w 0 -289.272 m 27.775 -289.272 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -285.978 Td[<f3147c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.259 0.314 0.4 RG 0.259 0.314 0.4 rg q 85.923 -289.072 26.978 12.876 re f Q 0 G 0 g 0.259 0.314 0.4 RG 0.259 0.314 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -275.997 m 113.299 -275.997 l S Q q .3985 w 85.724 -289.272 m 85.724 -275.997 l S Q q .3985 w 113.1 -289.272 m 113.1 -275.997 l S Q q .3985 w 85.525 -289.272 m 113.299 -289.272 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -285.978 Td[<f3148db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.341 0.259 0.4 RG 0.341 0.259 0.4 rg q 171.448 -289.072 26.978 12.876 re f Q 0 G 0 g 0.341 0.259 0.4 RG 0.341 0.259 0.4 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -275.997 m 198.824 -275.997 l S Q q .3985 w 171.248 -289.272 m 171.248 -275.997 l S Q q .3985 w 198.624 -289.272 m 198.624 -275.997 l S Q q .3985 w 171.049 -289.272 m 198.824 -289.272 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -285.978 Td[<f3147b8d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.553 0.294 0.733 RG 0.553 0.294 0.733 rg q 256.972 -289.072 26.978 12.876 re f Q 0 G 0 g 0.553 0.294 0.733 RG 0.553 0.294 0.733 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -275.997 m 284.348 -275.997 l S Q q .3985 w 256.773 -289.272 m 256.773 -275.997 l S Q q .3985 w 284.149 -289.272 m 284.149 -275.997 l S Q q .3985 w 256.574 -289.272 m 284.348 -289.272 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -285.978 Td[<7b8d865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.506 0.329 0.388 RG 0.506 0.329 0.388 rg q 342.497 -289.072 26.978 12.876 re f Q 0 G 0 g 0.506 0.329 0.388 RG 0.506 0.329 0.388 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -275.997 m 369.873 -275.997 l S Q q .3985 w 342.297 -289.272 m 342.297 -275.997 l S Q q .3985 w 369.673 -289.272 m 369.673 -275.997 l S Q q .3985 w 342.098 -289.272 m 369.873 -289.272 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -285.978 Td[<7b8da49f>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.506 0.329 0.463 RG 0.506 0.329 0.463 rg q 428.021 -289.072 26.978 12.876 re f Q 0 G 0 g 0.506 0.329 0.463 RG 0.506 0.329 0.463 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -275.997 m 455.397 -275.997 l S Q q .3985 w 427.822 -289.272 m 427.822 -275.997 l S Q q .3985 w 455.198 -289.272 m 455.198 -275.997 l S Q q .3985 w 427.623 -289.272 m 455.397 -289.272 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -285.978 Td[<a49f7b8d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.298 0.133 0.106 RG 0.298 0.133 0.106 rg q .398 -305.452 26.978 12.876 re f Q 0 G 0 g 0.298 0.133 0.106 RG 0.298 0.133 0.106 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -292.377 m 27.775 -292.377 l S Q q .3985 w .199 -305.652 m .199 -292.377 l S Q q .3985 w 27.575 -305.652 m 27.575 -292.377 l S Q q .3985 w 0 -305.652 m 27.775 -305.652 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -302.359 Td[<7b8d5884>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0.2 0.443 RG 0 0.2 0.443 rg q 85.923 -305.452 26.978 12.876 re f Q 0 G 0 g 0 0.2 0.443 RG 0 0.2 0.443 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -292.377 m 113.299 -292.377 l S Q q .3985 w 85.724 -305.652 m 85.724 -292.377 l S Q q .3985 w 113.1 -305.652 m 113.1 -292.377 l S Q q .3985 w 85.525 -305.652 m 113.299 -305.652 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -302.359 Td[<7bacadf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.337 0 0.31 RG 0.337 0 0.31 rg q 171.448 -305.452 26.978 12.876 re f Q 0 G 0 g 0.337 0 0.31 RG 0.337 0 0.31 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -292.377 m 198.824 -292.377 l S Q q .3985 w 171.248 -305.652 m 171.248 -292.377 l S Q q .3985 w 198.624 -305.652 m 198.624 -292.377 l S Q q .3985 w 171.049 -305.652 m 198.824 -305.652 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -302.359 Td[<7b8d557d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.502 0.114 0.682 RG 0.502 0.114 0.682 rg q 256.972 -305.452 26.978 12.876 re f Q 0 G 0 g 0.502 0.114 0.682 RG 0.502 0.114 0.682 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -292.377 m 284.348 -292.377 l S Q q .3985 w 256.773 -305.652 m 256.773 -292.377 l S Q q .3985 w 284.149 -305.652 m 284.149 -292.377 l S Q q .3985 w 256.574 -305.652 m 284.348 -305.652 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -302.359 Td[<adf28b9b>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.298 0.553 0.682 RG 0.298 0.553 0.682 rg q 342.497 -305.452 26.978 12.876 re f Q 0 G 0 g 0.298 0.553 0.682 RG 0.298 0.553 0.682 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -292.377 m 369.873 -292.377 l S Q q .3985 w 342.297 -305.652 m 342.297 -292.377 l S Q q .3985 w 369.673 -305.652 m 369.673 -292.377 l S Q q .3985 w 342.098 -305.652 m 369.873 -305.652 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -302.359 Td[<8041adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.69 0.643 0.89 RG 0.69 0.643 0.89 rg q 428.021 -305.452 26.978 12.876 re f Q 0 G 0 g 0.69 0.643 0.89 RG 0.69 0.643 0.89 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -292.377 m 455.397 -292.377 l S Q q .3985 w 427.822 -305.652 m 427.822 -292.377 l S Q q .3985 w 455.198 -305.652 m 455.198 -292.377 l S Q q .3985 w 427.623 -305.652 m 455.397 -305.652 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -302.359 Td[<ace4adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.8 0.643 0.89 RG 0.8 0.643 0.89 rg q .398 -321.832 26.978 12.876 re f Q 0 G 0 g 0.8 0.643 0.89 RG 0.8 0.643 0.89 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -308.757 m 27.775 -308.757 l S Q q .3985 w .199 -322.032 m .199 -308.757 l S Q q .3985 w 27.575 -322.032 m 27.575 -308.757 l S Q q .3985 w 0 -322.032 m 27.775 -322.032 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -318.739 Td[<251fb226865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.929 0.82 0.847 RG 0.929 0.82 0.847 rg q 85.923 -321.832 26.978 12.876 re f Q 0 G 0 g 0.929 0.82 0.847 RG 0.929 0.82 0.847 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -308.757 m 113.299 -308.757 l S Q q .3985 w 85.724 -322.032 m 85.724 -308.757 l S Q q .3985 w 113.1 -322.032 m 113.1 -308.757 l S Q q .3985 w 85.525 -322.032 m 113.299 -322.032 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -318.739 Td[<8dc1865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.894 0.776 0.816 RG 0.894 0.776 0.816 rg q 171.448 -321.832 26.978 12.876 re f Q 0 G 0 g 0.894 0.776 0.816 RG 0.894 0.776 0.816 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -308.757 m 198.824 -308.757 l S Q q .3985 w 171.248 -322.032 m 171.248 -308.757 l S Q q .3985 w 198.624 -322.032 m 198.624 -308.757 l S Q q .3985 w 171.049 -322.032 m 198.824 -322.032 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -318.739 Td[<8dc18861865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.459 0.529 0.541 RG 0.459 0.529 0.541 rg q 256.972 -321.832 26.978 12.876 re f Q 0 G 0 g 0.459 0.529 0.541 RG 0.459 0.529 0.541 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -308.757 m 284.348 -308.757 l S Q q .3985 w 256.773 -322.032 m 256.773 -308.757 l S Q q .3985 w 284.149 -322.032 m 284.149 -308.757 l S Q q .3985 w 256.574 -322.032 m 284.348 -322.032 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -318.739 Td[<8b2b865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.318 0.604 0.451 RG 0.318 0.604 0.451 rg q 342.497 -321.832 26.978 12.876 re f Q 0 G 0 g 0.318 0.604 0.451 RG 0.318 0.604 0.451 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -308.757 m 369.873 -308.757 l S Q q .3985 w 342.297 -322.032 m 342.297 -308.757 l S Q q .3985 w 369.673 -322.032 m 369.673 -308.757 l S Q q .3985 w 342.098 -322.032 m 369.873 -322.032 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -318.739 Td[<8b2bbb1a>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.635 0.608 0.486 RG 0.635 0.608 0.486 rg q 428.021 -321.832 26.978 12.876 re f Q 0 G 0 g 0.635 0.608 0.486 RG 0.635 0.608 0.486 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -308.757 m 455.397 -308.757 l S Q q .3985 w 427.822 -322.032 m 427.822 -308.757 l S Q q .3985 w 455.198 -322.032 m 455.198 -308.757 l S Q q .3985 w 427.623 -322.032 m 455.397 -322.032 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -318.739 Td[<8b2badf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.451 0.592 0.671 RG 0.451 0.592 0.671 rg q .398 -338.212 26.978 12.876 re f Q 0 G 0 g 0.451 0.592 0.671 RG 0.451 0.592 0.671 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -325.137 m 27.775 -325.137 l S Q q .3985 w .199 -338.412 m .199 -325.137 l S Q q .3985 w 27.575 -338.412 m 27.575 -325.137 l S Q q .3985 w 0 -338.412 m 27.775 -338.412 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -335.119 Td[<8b2bbb36>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.82 0.851 0.878 RG 0.82 0.851 0.878 rg q 85.923 -338.212 26.978 12.876 re f Q 0 G 0 g 0.82 0.851 0.878 RG 0.82 0.851 0.878 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -325.137 m 113.299 -325.137 l S Q q .3985 w 85.724 -338.412 m 85.724 -325.137 l S Q q .3985 w 113.1 -338.412 m 113.1 -325.137 l S Q q .3985 w 85.525 -338.412 m 113.299 -338.412 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -335.119 Td[<8b2b6eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.533 0.678 0.651 RG 0.533 0.678 0.651 rg q 171.448 -338.212 26.978 12.876 re f Q 0 G 0 g 0.533 0.678 0.651 RG 0.533 0.678 0.651 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -325.137 m 198.824 -325.137 l S Q q .3985 w 171.248 -338.412 m 171.248 -325.137 l S Q q .3985 w 198.624 -338.412 m 198.624 -325.137 l S Q q .3985 w 171.049 -338.412 m 198.824 -338.412 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -335.119 Td[<5bca865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.953 0.827 0.906 RG 0.953 0.827 0.906 rg q 256.972 -338.212 26.978 12.876 re f Q 0 G 0 g 0.953 0.827 0.906 RG 0.953 0.827 0.906 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -325.137 m 284.348 -325.137 l S Q q .3985 w 256.773 -338.412 m 256.773 -325.137 l S Q q .3985 w 284.149 -338.412 m 284.149 -325.137 l S Q q .3985 w 256.574 -338.412 m 284.348 -338.412 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -335.119 Td[<5bca7b37>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.831 0.949 0.906 RG 0.831 0.949 0.906 rg q 342.497 -338.212 26.978 12.876 re f Q 0 G 0 g 0.831 0.949 0.906 RG 0.831 0.949 0.906 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -325.137 m 369.873 -325.137 l S Q q .3985 w 342.297 -338.412 m 342.297 -325.137 l S Q q .3985 w 369.673 -338.412 m 369.673 -325.137 l S Q q .3985 w 342.098 -338.412 m 369.873 -338.412 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -335.119 Td[<5bca7c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.824 0.941 0.957 RG 0.824 0.941 0.957 rg q 428.021 -338.212 26.978 12.876 re f Q 0 G 0 g 0.824 0.941 0.957 RG 0.824 0.941 0.957 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -325.137 m 455.397 -325.137 l S Q q .3985 w 427.822 -338.412 m 427.822 -325.137 l S Q q .3985 w 455.198 -338.412 m 455.198 -325.137 l S Q q .3985 w 427.623 -338.412 m 455.397 -338.412 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -335.119 Td[<5bca8db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.827 0.878 0.953 RG 0.827 0.878 0.953 rg q .398 -354.592 26.978 12.876 re f Q 0 G 0 g 0.827 0.878 0.953 RG 0.827 0.878 0.953 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -341.517 m 27.775 -341.517 l S Q q .3985 w .199 -354.792 m .199 -341.517 l S Q q .3985 w 27.575 -354.792 m 27.575 -341.517 l S Q q .3985 w 0 -354.792 m 27.775 -354.792 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -351.499 Td[<5e5dadf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.188 0.875 0.953 RG 0.188 0.875 0.953 rg q 85.923 -354.592 26.978 12.876 re f Q 0 G 0 g 0.188 0.875 0.953 RG 0.188 0.875 0.953 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -341.517 m 113.299 -341.517 l S Q q .3985 w 85.724 -354.792 m 85.724 -341.517 l S Q q .3985 w 113.1 -354.792 m 113.1 -341.517 l S Q q .3985 w 85.525 -354.792 m 113.299 -354.792 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -351.499 Td[<5f2f8db0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.145 0.973 0.796 RG 0.145 0.973 0.796 rg q 171.448 -354.592 26.978 12.876 re f Q 0 G 0 g 0.145 0.973 0.796 RG 0.145 0.973 0.796 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -341.517 m 198.824 -341.517 l S Q q .3985 w 171.248 -354.792 m 171.248 -341.517 l S Q q .3985 w 198.624 -354.792 m 198.624 -341.517 l S Q q .3985 w 171.049 -354.792 m 198.824 -354.792 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -351.499 Td[<5f2f7c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 1 1 RG 1 1 1 rg q 256.972 -354.592 26.978 12.876 re f Q 0 G 0 g 1 1 1 RG 1 1 1 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -341.517 m 284.348 -341.517 l S Q q .3985 w 256.773 -354.792 m 256.773 -341.517 l S Q q .3985 w 284.149 -354.792 m 284.149 -341.517 l S Q q .3985 w 256.574 -354.792 m 284.348 -354.792 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -351.499 Td[<7aa36eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 1 0.984 0.941 RG 1 0.984 0.941 rg q 342.497 -354.592 26.978 12.876 re f Q 0 G 0 g 1 0.984 0.941 RG 1 0.984 0.941 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -341.517 m 369.873 -341.517 l S Q q .3985 w 342.297 -354.792 m 342.297 -341.517 l S Q q .3985 w 369.673 -354.792 m 369.673 -341.517 l S Q q .3985 w 342.098 -354.792 m 369.873 -354.792 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -351.499 Td[<9aaf67146eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.988 1 RG 0.941 0.988 1 rg q 428.021 -354.592 26.978 12.876 re f Q 0 G 0 g 0.941 0.988 1 RG 0.941 0.988 1 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -341.517 m 455.397 -341.517 l S Q q .3985 w 427.822 -354.792 m 427.822 -341.517 l S Q q .3985 w 455.198 -354.792 m 455.198 -341.517 l S Q q .3985 w 427.623 -354.792 m 455.397 -354.792 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -351.499 Td[<ace46eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.839 0.925 0.941 RG 0.839 0.925 0.941 rg q .398 -370.972 26.978 12.876 re f Q 0 G 0 g 0.839 0.925 0.941 RG 0.839 0.925 0.941 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -357.897 m 27.775 -357.897 l S Q q .3985 w .199 -371.172 m .199 -357.897 l S Q q .3985 w 27.575 -371.172 m 27.575 -357.897 l S Q q .3985 w 0 -371.172 m 27.775 -371.172 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -367.879 Td[<52936eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.949 0.925 0.871 RG 0.949 0.925 0.871 rg q 85.923 -370.972 26.978 12.876 re f Q 0 G 0 g 0.949 0.925 0.871 RG 0.949 0.925 0.871 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -357.897 m 113.299 -357.897 l S Q q .3985 w 85.724 -371.172 m 85.724 -357.897 l S Q q .3985 w 113.1 -371.172 m 113.1 -357.897 l S Q q .3985 w 85.525 -371.172 m 113.299 -371.172 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -367.879 Td[<7daa>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.878 0.941 0.914 RG 0.878 0.941 0.914 rg q 171.448 -370.972 26.978 12.876 re f Q 0 G 0 g 0.878 0.941 0.914 RG 0.878 0.941 0.914 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -357.897 m 198.824 -357.897 l S Q q .3985 w 171.248 -371.172 m 171.248 -357.897 l S Q q .3985 w 198.624 -371.172 m 198.624 -357.897 l S Q q .3985 w 171.049 -371.172 m 198.824 -371.172 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -367.879 Td[<7b77>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.953 0.976 0.945 RG 0.953 0.976 0.945 rg q 256.972 -370.972 26.978 12.876 re f Q 0 G 0 g 0.953 0.976 0.945 RG 0.953 0.976 0.945 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -357.897 m 284.348 -357.897 l S Q q .3985 w 256.773 -371.172 m 256.773 -357.897 l S Q q .3985 w 284.149 -371.172 m 284.149 -357.897 l S Q q .3985 w 256.574 -371.172 m 284.348 -371.172 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -367.879 Td[<886c6eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.914 0.945 0.965 RG 0.914 0.945 0.965 rg q 342.497 -370.972 26.978 12.876 re f Q 0 G 0 g 0.914 0.945 0.965 RG 0.914 0.945 0.965 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -357.897 m 369.873 -357.897 l S Q q .3985 w 342.297 -371.172 m 342.297 -357.897 l S Q q .3985 w 369.673 -371.172 m 369.673 -357.897 l S Q q .3985 w 342.098 -371.172 m 369.873 -371.172 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -367.879 Td[<ad66865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.761 0.8 0.816 RG 0.761 0.8 0.816 rg q 428.021 -370.972 26.978 12.876 re f Q 0 G 0 g 0.761 0.8 0.816 RG 0.761 0.8 0.816 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -357.897 m 455.397 -357.897 l S Q q .3985 w 427.822 -371.172 m 427.822 -357.897 l S Q q .3985 w 455.198 -371.172 m 455.198 -357.897 l S Q q .3985 w 427.623 -371.172 m 455.397 -371.172 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -367.879 Td[<86df6eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.988 0.937 0.91 RG 0.988 0.937 0.91 rg q .398 -387.352 26.978 12.876 re f Q 0 G 0 g 0.988 0.937 0.91 RG 0.988 0.937 0.91 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -374.277 m 27.775 -374.277 l S Q q .3985 w .199 -387.552 m .199 -374.277 l S Q q .3985 w 27.575 -387.552 m 27.575 -374.277 l S Q q .3985 w 0 -387.552 m 27.775 -387.552 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -384.259 Td[<b583825b6eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.89 0.937 0.992 RG 0.89 0.937 0.992 rg q 85.923 -387.352 26.978 12.876 re f Q 0 G 0 g 0.89 0.937 0.992 RG 0.89 0.937 0.992 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -374.277 m 113.299 -374.277 l S Q q .3985 w 85.724 -387.552 m 85.724 -374.277 l S Q q .3985 w 113.1 -387.552 m 113.1 -374.277 l S Q q .3985 w 85.525 -387.552 m 113.299 -387.552 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -384.259 Td[<6a876eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.502 0.502 0.502 RG 0.502 0.502 0.502 rg q 171.448 -387.352 26.978 12.876 re f Q 0 G 0 g 0.502 0.502 0.502 RG 0.502 0.502 0.502 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -374.277 m 198.824 -374.277 l S Q q .3985 w 171.248 -387.552 m 171.248 -374.277 l S Q q .3985 w 198.624 -387.552 m 198.624 -374.277 l S Q q .3985 w 171.049 -387.552 m 198.824 -387.552 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -384.259 Td[<6331865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q 256.972 -387.352 26.978 12.876 re f Q 0 G 0 g 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -374.277 m 284.348 -374.277 l S Q q .3985 w 256.773 -387.552 m 256.773 -374.277 l S Q q .3985 w 284.149 -387.552 m 284.149 -374.277 l S Q q .3985 w 256.574 -387.552 m 284.348 -387.552 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -384.259 Td[<6714865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.941 0.941 0.957 RG 0.941 0.941 0.957 rg q 342.497 -387.352 26.978 12.876 re f Q 0 G 0 g 0.941 0.941 0.957 RG 0.941 0.941 0.957 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -374.277 m 369.873 -374.277 l S Q q .3985 w 342.297 -387.552 m 342.297 -374.277 l S Q q .3985 w 369.673 -387.552 m 369.673 -374.277 l S Q q .3985 w 342.098 -387.552 m 369.873 -387.552 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -384.259 Td[<a5b96eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.384 0.165 0.114 RG 0.384 0.165 0.114 rg q 428.021 -387.352 26.978 12.876 re f Q 0 G 0 g 0.384 0.165 0.114 RG 0.384 0.165 0.114 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -374.277 m 455.397 -374.277 l S Q q .3985 w 427.822 -387.552 m 427.822 -374.277 l S Q q .3985 w 455.198 -387.552 m 455.198 -374.277 l S Q q .3985 w 427.623 -387.552 m 455.397 -387.552 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -384.259 Td[<6914865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.239 0.231 0.31 RG 0.239 0.231 0.31 rg q .398 -403.732 26.978 12.876 re f Q 0 G 0 g 0.239 0.231 0.31 RG 0.239 0.231 0.31 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -390.657 m 27.775 -390.657 l S Q q .3985 w .199 -403.932 m .199 -390.657 l S Q q .3985 w 27.575 -403.932 m 27.575 -390.657 l S Q q .3985 w 0 -403.932 m 27.775 -403.932 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -400.639 Td[<6914adf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.447 0.369 0.51 RG 0.447 0.369 0.51 rg q 85.923 -403.732 26.978 12.876 re f Q 0 G 0 g 0.447 0.369 0.51 RG 0.447 0.369 0.51 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -390.657 m 113.299 -390.657 l S Q q .3985 w 85.724 -403.932 m 85.724 -390.657 l S Q q .3985 w 113.1 -403.932 m 113.1 -390.657 l S Q q .3985 w 85.525 -403.932 m 113.299 -403.932 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -400.639 Td[<63e0865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q 171.448 -403.732 26.978 12.876 re f Q 0 G 0 g 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -390.657 m 198.824 -390.657 l S Q q .3985 w 171.248 -403.932 m 171.248 -390.657 l S Q q .3985 w 198.624 -403.932 m 198.624 -390.657 l S Q q .3985 w 171.049 -403.932 m 198.824 -403.932 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -400.639 Td[<63e0bb36>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q 256.972 -403.732 26.978 12.876 re f Q 0 G 0 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -390.657 m 284.348 -390.657 l S Q q .3985 w 256.773 -403.932 m 256.773 -390.657 l S Q q .3985 w 284.149 -403.932 m 284.149 -390.657 l S Q q .3985 w 256.574 -403.932 m 284.348 -403.932 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -400.639 Td[<6072bb36>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.314 0.38 0.427 RG 0.314 0.38 0.427 rg q 342.497 -403.732 26.978 12.876 re f Q 0 G 0 g 0.314 0.38 0.427 RG 0.314 0.38 0.427 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -390.657 m 369.873 -390.657 l S Q q .3985 w 342.297 -403.932 m 342.297 -390.657 l S Q q .3985 w 369.673 -403.932 m 369.673 -390.657 l S Q q .3985 w 342.098 -403.932 m 369.873 -403.932 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -400.639 Td[<367a865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.459 0.541 0.6 RG 0.459 0.541 0.6 rg q 428.021 -403.732 26.978 12.876 re f Q 0 G 0 g 0.459 0.541 0.6 RG 0.459 0.541 0.6 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -390.657 m 455.397 -390.657 l S Q q .3985 w 427.822 -403.932 m 427.822 -390.657 l S Q q .3985 w 455.198 -403.932 m 455.198 -390.657 l S Q q .3985 w 427.623 -403.932 m 455.397 -403.932 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -400.639 Td[<367a6331>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0 0 0 RG 0 0 0 rg q .398 -420.112 26.978 12.876 re f Q 0 G 0 g 0 0 0 RG 0 0 0 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -407.037 m 27.775 -407.037 l S Q q .3985 w .199 -420.312 m .199 -407.037 l S Q q .3985 w 27.575 -420.312 m 27.575 -407.037 l S Q q .3985 w 0 -420.312 m 27.775 -420.312 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -417.019 Td[<bb36865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.286 0.192 0.192 RG 0.286 0.192 0.192 rg q 85.923 -420.112 26.978 12.876 re f Q 0 G 0 g 0.286 0.192 0.192 RG 0.286 0.192 0.192 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -407.037 m 113.299 -407.037 l S Q q .3985 w 85.724 -420.312 m 85.724 -407.037 l S Q q .3985 w 113.1 -420.312 m 113.1 -407.037 l S Q q .3985 w 85.525 -420.312 m 113.299 -420.312 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -417.019 Td[<7ce7865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.192 0.145 0.125 RG 0.192 0.145 0.125 rg q 171.448 -420.112 26.978 12.876 re f Q 0 G 0 g 0.192 0.145 0.125 RG 0.192 0.145 0.125 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -407.037 m 198.824 -407.037 l S Q q .3985 w 171.248 -420.312 m 171.248 -407.037 l S Q q .3985 w 198.624 -420.312 m 198.624 -407.037 l S Q q .3985 w 171.049 -420.312 m 198.824 -420.312 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -417.019 Td[<6508bb36>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.365 0.318 0.235 RG 0.365 0.318 0.235 rg q 256.972 -420.112 26.978 12.876 re f Q 0 G 0 g 0.365 0.318 0.235 RG 0.365 0.318 0.235 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -407.037 m 284.348 -407.037 l S Q q .3985 w 256.773 -420.312 m 256.773 -407.037 l S Q q .3985 w 284.149 -420.312 m 284.149 -407.037 l S Q q .3985 w 256.574 -420.312 m 284.348 -420.312 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -417.019 Td[<bb65>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.459 0.4 0.302 RG 0.459 0.4 0.302 rg q 342.497 -420.112 26.978 12.876 re f Q 0 G 0 g 0.459 0.4 0.302 RG 0.459 0.4 0.302 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -407.037 m 369.873 -407.037 l S Q q .3985 w 342.297 -420.312 m 342.297 -407.037 l S Q q .3985 w 369.673 -420.312 m 369.673 -407.037 l S Q q .3985 w 342.098 -420.312 m 369.873 -420.312 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -417.019 Td[<bb30>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.42 0.408 0.51 RG 0.42 0.408 0.51 rg q 428.021 -420.112 26.978 12.876 re f Q 0 G 0 g 0.42 0.408 0.51 RG 0.42 0.408 0.51 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -407.037 m 455.397 -407.037 l S Q q .3985 w 427.822 -420.312 m 427.822 -407.037 l S Q q .3985 w 455.198 -420.312 m 455.198 -407.037 l S Q q .3985 w 427.623 -420.312 m 455.397 -420.312 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -417.019 Td[<bb50>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.4 0.341 0.341 RG 0.4 0.341 0.341 rg q .398 -436.493 26.978 12.876 re f Q 0 G 0 g 0.4 0.341 0.341 RG 0.4 0.341 0.341 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -423.417 m 27.775 -423.417 l S Q q .3985 w .199 -436.692 m .199 -423.417 l S Q q .3985 w 27.575 -436.692 m 27.575 -423.417 l S Q q .3985 w 0 -436.692 m 27.775 -436.692 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -433.399 Td[<bb50bb36>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.255 0.333 0.365 RG 0.255 0.333 0.365 rg q 85.923 -436.493 26.978 12.876 re f Q 0 G 0 g 0.255 0.333 0.365 RG 0.255 0.333 0.365 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -423.417 m 113.299 -423.417 l S Q q .3985 w 85.724 -436.692 m 85.724 -423.417 l S Q q .3985 w 113.1 -436.692 m 113.1 -423.417 l S Q q .3985 w 85.525 -436.692 m 113.299 -436.692 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -433.399 Td[<bb75>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg q 171.448 -436.493 26.978 12.876 re f Q 0 G 0 g 0.949 0.745 0.271 RG 0.949 0.745 0.271 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -423.417 m 198.824 -423.417 l S Q q .3985 w 171.248 -436.692 m 171.248 -423.417 l S Q q .3985 w 198.624 -436.692 m 198.624 -423.417 l S Q q .3985 w 171.049 -436.692 m 198.824 -436.692 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -433.399 Td[<9c31a4ed>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.918 0.804 0.463 RG 0.918 0.804 0.463 rg q 256.972 -436.493 26.978 12.876 re f Q 0 G 0 g 0.918 0.804 0.463 RG 0.918 0.804 0.463 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -423.417 m 284.348 -423.417 l S Q q .3985 w 256.773 -436.692 m 256.773 -423.417 l S Q q .3985 w 284.149 -436.692 m 284.149 -423.417 l S Q q .3985 w 256.574 -436.692 m 284.348 -436.692 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -433.399 Td[<a4ed865d>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.914 0.906 0.937 RG 0.914 0.906 0.937 rg q 342.497 -436.493 26.978 12.876 re f Q 0 G 0 g 0.914 0.906 0.937 RG 0.914 0.906 0.937 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -423.417 m 369.873 -423.417 l S Q q .3985 w 342.297 -436.692 m 342.297 -423.417 l S Q q .3985 w 369.673 -436.692 m 369.673 -423.417 l S Q q .3985 w 342.098 -436.692 m 369.873 -436.692 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -433.399 Td[<a5f06eae>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 428.021 -436.493 26.978 12.876 re f Q 0 G 0 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 427.623 -423.417 m 455.397 -423.417 l S Q q .3985 w 427.822 -436.692 m 427.822 -423.417 l S Q q .3985 w 455.198 -436.692 m 455.198 -423.417 l S Q q .3985 w 427.623 -436.692 m 455.397 -436.692 l S Q 0 G 0 g BT /F13 10.5 Tf 458.022 -433.399 Td[<a5f87c8e>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.655 0.557 0.267 RG 0.655 0.557 0.267 rg q .398 -452.873 26.978 12.876 re f Q 0 G 0 g 0.655 0.557 0.267 RG 0.655 0.557 0.267 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 0 -439.797 m 27.775 -439.797 l S Q q .3985 w .199 -453.072 m .199 -439.797 l S Q q .3985 w 27.575 -453.072 m 27.575 -439.797 l S Q q .3985 w 0 -453.072 m 27.775 -453.072 l S Q 0 G 0 g BT /F13 10.5 Tf 30.4 -449.779 Td[<63e0a4ed>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.729 0.792 0.776 RG 0.729 0.792 0.776 rg q 85.923 -452.873 26.978 12.876 re f Q 0 G 0 g 0.729 0.792 0.776 RG 0.729 0.792 0.776 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 85.525 -439.797 m 113.299 -439.797 l S Q q .3985 w 85.724 -453.072 m 85.724 -439.797 l S Q q .3985 w 113.1 -453.072 m 113.1 -439.797 l S Q q .3985 w 85.525 -453.072 m 113.299 -453.072 l S Q 0 G 0 g BT /F13 10.5 Tf 115.924 -449.779 Td[<811ba5f0>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.064 0.201 0.58 RG 0.064 0.201 0.58 rg q 171.448 -452.873 26.978 12.876 re f Q 0 G 0 g 0.064 0.201 0.58 RG 0.064 0.201 0.58 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 171.049 -439.797 m 198.824 -439.797 l S Q q .3985 w 171.248 -453.072 m 171.248 -439.797 l S Q q .3985 w 198.624 -453.072 m 198.624 -439.797 l S Q q .3985 w 171.049 -453.072 m 198.824 -453.072 l S Q 0 G 0 g BT /F13 10.5 Tf 201.449 -449.779 Td[<5a5eadf2>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.6 0.09 0.133 RG 0.6 0.09 0.133 rg q 256.972 -452.873 26.978 12.876 re f Q 0 G 0 g 0.6 0.09 0.133 RG 0.6 0.09 0.133 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 256.574 -439.797 m 284.348 -439.797 l S Q q .3985 w 256.773 -453.072 m 256.773 -439.797 l S Q q .3985 w 284.149 -453.072 m 284.149 -439.797 l S Q q .3985 w 256.574 -453.072 m 284.348 -453.072 l S Q 0 G 0 g BT /F13 10.5 Tf 286.973 -449.779 Td[<5a5e9c31>]TJ ET 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg 0.87 0.586 0.096 RG 0.87 0.586 0.096 rg q 342.497 -452.873 26.978 12.876 re f Q 0 G 0 g 0.87 0.586 0.096 RG 0.87 0.586 0.096 rg 0.224 0.184 0.255 RG 0.224 0.184 0.255 rg q .3985 w 342.098 -439.797 m 369.873 -439.797 l S Q q .3985 w 342.297 -453.072 m 342.297 -439.797 l S Q q .3985 w 369.673 -453.072 m 369.673 -439.797 l S Q q .3985 w 342.098 -453.072 m 369.873 -453.072 l S Q 0 G 0 g BT /F13 10.5 Tf 372.498 -449.779 Td[<5a5ebb1a>]TJ ET Q
+
+endstream
+endobj
+74 0 obj
+<</Subtype/CIDFontType0C/Length 5677>>
+stream
+
+'
++
+Š i ¯„ÇX1?Ì…âãsŽ­ÌÚy©Ì
+1
+´ ] ë ¿ Õ‰6¶”ƒ#¦eú|ú|ùùÏüùóøœ÷xèûàú|÷–øŽüœûx.÷àøù#ú|ùÍùÏ[JgGqCl7|4‹/‹1š3ª7¥E¯G»IêaÑkÐuÏmâ}â‹á‹â™â©á¡Ð«ÐµÐ,ú|ÛùÏ´F«F¢F¨5š4‹4‹5|4n4tGkFbEêºÍ°Ï¥Ñ©ß›ã‹å‹ç{âmßqÓfÏ\Ì,ú|÷™ùlA‹Qv`a_avQ‹A÷‹µ“¬œ¢ž§ª˜·‹­‹¦‚žxx•q‹j‹r‚syu}JQda~p}p…j‹e}÷™‹£ •Ÿ”˜œš»µ¨¦”•£«˜´‹½‹Èw»c®c¯VœJ‹yüÕu‹y„|}|}„y‹u‹u’yš}š}ƒ¡‹¡‹’š™š™“ž‹¡‹¡ƒ}™|™x’u‹ú|¸ø7#ú!óþ!ú|øSøžýõù!’÷À(û$û!û
+ûL1Ê,÷8Ý÷÷ö÷+äû÷û÷J-Êêû\ðû"÷ 9÷/ú|÷Zù³<RÁS·W¬]ÝÃk¸_¿QÅ÷þü87VÉ?½F°MçËfÃWÌGÖû9øOû+Šn‰n‰nûÊ%÷¿~1v=oH\%16ûGÆ.÷ÊìåÆ÷µß¨ôœ÷÷Ê‹û
+ˆû…'…'sWb‡\‹WS‘§&‡¯·‰¿Ï‹»´¦Û¥Û˜÷P‹÷ºü+§Œ¨Œ©÷+$ú|øSøÅûYûË(÷Ëû~ü%úñü÷~÷ÌîûÌ÷Y÷ýñü~¼yÁsÇ%oŸ`ž^›\ûù%÷üú|ùl÷ç'kµK³F²@ûxû |û"€ô÷÷÷I÷/÷!¿ûû\ûûHû!û4ljnuo§!÷Žš÷e¡÷:©™m™k™jñ¹P÷D÷9÷ ûÊø~û
+6/+JÏ:·«´¯²³­e³g·i!Vûeû u¹,÷3©÷¼÷
+Ï÷H÷[÷6o¹ëû"¡û®#½×ÃÌÍÁ×Þûþ•›•–"£ŒûFŒ÷»]ZX_QeS¯[µbºú|÷_ø«)÷ŽüŠE¡Q»]Ö½™À—Ä&kû6Lû.+Î7ÂÁ¹Í±Ú´S¿`Énçe÷,x÷j‹â òV†XˆY‹)Œ8G•÷D÷°íû°÷ ÷†íüèùd÷Wü~°~­}©ûy›r™o™mü ûñ÷!ùûñ÷|ú|øæ÷W÷H÷8ÅæûÒûÉûÁ”›÷õíûËÅ–ÍÔ÷&û‡B}IsQüD)ø ‡‡ˆ†‡†KAûMûNYÄ3÷D¹÷ÌÝàû³øW>ÍqÊgÉ]ÁÞQ³J­E§ñ÷W>ËrÉhÈ]ÁÞQ³L¬G¦øë÷ü«©€¦ y–u•t•qü ûgñ÷ùûñ÷gú|ù¶ùüÑûùw!ýwûŽø×"ýsôÃøñRôùn"ú|ø,øWû´÷cû?ƒ>…<…¤'÷.š÷&÷ “s’q“pæ®yÐp×hÞ.q”u”t”tk‡l†k‡÷ ÷a÷´ûaÎ÷B÷¤üUû¤÷?Hûcø:û\û÷÷ûûkû÷÷ûüI÷r÷D÷Ñû´+÷Rûû;kûÑ÷d‹#‡G„k„ko{Z‹o‹op¤,‰§¦‰¦ç‘¿ª—Å•Å‘÷‹÷>ûaœ÷øÿ÷û•ï÷•'ú|øóøÛ÷8‡û t"_1`Ùgåmð‘ššš÷žÍîûÄ”±“´’µ%sû<]ûG(Ë:£¦œ¨©1®9µCM95Jû[Ë5ð¼ßËÍÙÇ:ÑKÜ[Çä;¹EÊOÝÎ÷°÷’÷6ý8üŠ÷ª÷nø&ûþ(÷˜ûcûmûù‹i~usª1÷¶÷ º÷
+s÷‹Œœ‹œÜ÷Atûv1yM÷y:kB^Iú|÷¥ù¾û‘A÷~$üŠû^vû(c/ÚF³Ù¦÷—÷$éûíñ×Ñ?Ì÷®÷0÷WÕû­!¼3]UR]Hf¼-ѱǺ¿ÅºPÅ\Ïg¿èLªU·_ÅÅæ²÷¡÷äûÿ÷÷ ‘÷Ÿ÷­Yèûcû"vû3ˆü‡û8qûZ-øûSŒ¤Œ¥¦«÷pò_÷‘%ø%ü÷+|8q@eGkÌsÖ{áú|ø(ùªüy÷a/ûl*÷l.û’&øóðûè÷kìûkç÷_øyü”ø0ü$õò!ûc"õô!"÷Wõô!"÷eõò!$õý û€'êûpdcƒb„¥'ó¤í©ç¯ðl~lk€÷Qìï*÷`÷îûÙ(÷û`,ú|ø5ù'û,¹š¾–Á"™ƒR~TyV+ýnïÚ÷(YïùQûŒü¿÷Q÷(ûQû(÷®÷C÷(ûCû(øB©6VÉ;½B°IßÅhÉZÒKÜ÷á÷‡ûÄš»˜¾•Á$˜sû_ûI-Ê8°»«Á¦Ç÷†‰û¯ˆû9…[…dvwg‹j‹d_Ž¤,‡¿¯‰Ÿá‹»®•Ñ•Ý÷l‹÷òú|ùùÆû:ûPülïµãûÛô÷ÛæañølûU÷:"3üˆ÷€ãû€3÷U÷€æû€0ý/÷î³²±û û#&÷k*X4G>·û»Î²Ô«Ûü/ñøB¢i¦a«XÆä[¼\¸]³¯÷
+ðû
+÷µ“³•±•fë,mû
+¥÷0÷W÷Ú÷/]ûú|ø–ùÐûymœk›hü*÷C%QK]s†ˆ„ˆ‰£-÷a–÷Rš÷Bž¢i ižjáÈ_ÔKá9î:X p o oû|û€ûƒ··¼ÌÃãø_ìûù}µ|²{­ûbü©…,vGhafaMf4lÍ7ïµÒ¼¶Ã±À¢ß“÷&øü¯§” œ™È–õ+©†>ƒ_€€†€‹ p~™¦÷•#û§;±cØ÷6
+
+
+í ú|
+endstream
+endobj
+75 0 obj
+<</Length 5434>>
+stream
+€
+endstream
+endobj
+76 0 obj
+<</Length 877>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /KXEIRA+PingFangHK-Semibold-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+38 beginbfchar
+<033F> <300C>
+<0340> <300D>
+<0481> <FF08>
+<0482> <FF09>
+<0498> <FF1F>
+<04DE> <4E00>
+<04FB> <4E2A>
+<0505> <4E3A>
+<0506> <4E3B>
+<050D> <4E48>
+<054B> <4EC0>
+<0555> <4ECB>
+<05A2> <4F5C>
+<064C> <5176>
+<075E> <53EB>
+<0771> <5404>
+<0A27> <5B9A>
+<0A2B> <5B9E>
+<0A8A> <5C71>
+<0B69> <5F3A>
+<0DAF> <6539>
+<0E0E> <662F>
+<0E84> <6781>
+<11C7> <7248>
+<1258> <7406>
+<1331> <7684>
+<143F> <79CD>
+<14CC> <7B80>
+<1585> <7EED>
+<17E2> <8427>
+<19E3> <8C03>
+<1A73> <8D70>
+<1D8E> <9762>
+<1DAD> <9875>
+<1DCC> <9898>
+<1DDA> <98CE>
+<1E79> <9B54>
+<A9CC> <5145>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+80 0 obj
+<</Subtype/CIDFontType0C/Length 2137>>
+stream
+
+ij­t<üçø
+練ij­t<üçøîRÉ5Œ vøgÓwêç÷mçØ÷ëø¯FSgUg¸ƒÙ<ü£çØø
+ƾ«t<üçøïSÈ*ŠÕø'ÕÄî÷¤î÷¹ø¯û*5ûû7û;àû
+Õø(Ô»ë÷Sì÷‚ø¯û:N7A¸Z÷mñp¥wWY_mFRZž«aZSc¹Ënäöð½÷çK·û§6¡oŸ¶µ°¦Ç¼´|mº²Å±YT¡Aût×øÒðç÷Úâ{qv„t]z¤À÷Î÷•Òû÷/€û /DçûÒ)ÀW丱—£®ˆÓdvø£wåç÷iç¸ø{ø£/ü Vk`eRRs¦Óø/ü$ÂQçÖ¼©Ë³x’9Úûí÷½÷÷ ÷dmled©l²³©ª²±mªcû™û%úr³ë÷vùá)û3û ûûãû íûų1÷Q÷
+ ‹ Õ
+ç Õ ç øÝ
+endstream
+endobj
+81 0 obj
+<</Length 270>>
+stream
+€
+endstream
+endobj
+83 0 obj
+<</Length 636>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /FPNZXO+FiraSans-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+21 beginbfchar
+<0024> <0042>
+<009B> <004D>
+<014F> <0061>
+<0173> <0062>
+<017C> <0063>
+<0187> <0064>
+<019A> <0065>
+<01DE> <0069>
+<01FA> <006B>
+<0200> <006C>
+<0212> <006D>
+<0218> <006E>
+<0229> <006F>
+<0254> <0070>
+<025F> <0072>
+<026F> <0073>
+<027E> <0074>
+<0295> <0075>
+<084F> <002E>
+<086B> <0028>
+<086C> <0029>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+87 0 obj
+<</Subtype/CIDFontType0C/Length 1882>>
+stream
+
+o¨É? ÁW÷<÷4æÄòÝ;È!é€,U{Ÿ¤ž—Ÿš—ƒ¢ ˆ®÷ÔÖóÇm¸M§ƾŒ™·ò€ûžpÙ²b<=c]@5d¾ÓÒ±½à vøkÎ÷ewïß÷}ß÷Lù7‚ývßø´§Á¹ÆʨpLüßøí^Å$LKnTa€ÑøùÎ÷rß÷ÆùwûŠH÷6ü®0ÊUèÁ¶—š§uÈ€no„lXgž¿ vølÍ€w¾Ø÷Ù÷ØÜøSø®VioanÁ{d›cVjkbo¼…ÉJü£ØÜø-¸¨©¬±ŽpHüÙø-¸¨ª«±ŽpHüØø÷ X¤X vøk΀wïß÷}ßØïßøµ§À¹ÉÚ–`û
+ ‹ Ð
+ß Ð ß øìö
+endstream
+endobj
+88 0 obj
+<</Length 128>>
+stream
+€
+endstream
+endobj
+89 0 obj
+<</Length 594>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /LTRQHE+FiraMono-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+18 beginbfchar
+<0086> <0061>
+<0093> <0063>
+<009D> <0065>
+<00A7> <0066>
+<00A8> <0067>
+<00AD> <0068>
+<00C2> <006C>
+<00C8> <006D>
+<00C9> <006E>
+<00D0> <006F>
+<00DC> <0070>
+<00DF> <0072>
+<00E3> <0073>
+<00EA> <0074>
+<00EF> <0075>
+<0101> <0079>
+<03D9> <002E>
+<03FE> <002D>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+93 0 obj
+<</Subtype/CIDFontType0C/Length 10434>>
+stream
+
+
++
+0
+d
+ñ  o t Ž ¯ Ï íLm„‹ÏzŒåZ 1W0Ì0Vy °â¶s0+ÌÏÚ
+n
+Û Œ # à å  Q ¦:¹v¥1‰Ýa›JÓ{9¦i=%4ζ m â!º"=##Í$Â%Ü&}ú|ú|÷Ž÷"g‹lrsqsm‹g‹g—m¥s¤tª¯‹¯‹©—¥£¤£˜©‹®‹¯~©r£q£m—g‹WŸ‹„š|š}“z‹v‹wƒz|}|}yƒw‹v‹y“}™{™„œ‹Ÿ‹ ’œ›™™š’ ‹ú|ùùÏüùÔø¶÷‹ÎûÔú|÷©øŽü¶û‹H÷ÔøùBú|ùæùÏ_KiFrBm5}4‹2‹4™4©5¤C­F·JÑcÎkÐtÒmã}â‹à‹á™á©ã¢Ó«Ð³ÍEú|ÛùϳIªF£C¨3š5‹5‹6|4n3sDlFcHѶ̭ХӨášâ‹â‹ä|ânáqÔiÐ`ËEú|÷N÷ w‹|†€…|‹x‹z‘|——™…œ‹•‹“‹s„u|v{wv|q‚Zµ–®¡¥«¥­˜²‹·‹¨„¢~}žx”u‹ú|½ø'CúÓþú|ø4ùÅý»ûüEúÑü\ø@øÑü÷ÉAú|øcøý
+ÌÚÝ´ïí5Ú:Æ=¿¿Cà1à!à‘Ÿ¡¡÷ŽÏû…¸Ž»¿E‹Wˆ[†^û‡ù=÷˜ý¼ýùÓ¸ù,^ÓùùýtýˆùDù,ýDý,ú|÷û÷óE÷yû¨û¢DùÒû°÷¨÷ƒÑûƒ÷NBûNûyû5_ü.Òø€ÁϺղÚø«Òü‹¶š¸™¹@”}Zy[w]û·D÷•Eû*û
+û$¸Pµ®²°°±ú|·øÃGåûãki€i‚GߧٯӵÑp{p|o}÷ÄäÏ2÷‘Eû‘1ø û9÷
+×ûÌû"Ô™”š”›÷óÏûÕ¡É—ÒŽÚ÷
+Eû
+ˆ<}DqMüTGø1{|}A;ûJûN[³N÷K»÷ÎÜáûº÷ûgUÏpÎeË[°ÄOµH°Bªå÷#fUÑoÐdÎY°ÄM¸F±@ªøñ÷ ûþ~²~®~©Ašo™m—iüûTÑ÷ù6ûÑ÷Tú|÷=øÅI÷8J;VZby‡‰†ˆ…‰›Míëéû
+{±{®{©ú|øcùÈû<û!tÂrºp²Gr§g£dŸbû<û~Ô÷8ùDû4Ô÷zûH¤­¤µ£½G¤uVoYk[û÷<Aû†ûõGøÄÏüÄû/ûPD÷™Kû WCdp‡‰†ˆ„‰œK÷i—÷Yš÷IŸq›qšqÉ·aÐNÜ=èOg«e¨e¥gû,yû-}û-ƒ´·ºÔÁñø§Òýúú|ùÊùüäû±ùˆAýˆû²øçCýnÓÍùHÓùlCú|ødù3ý ü.FúÐü-ù ÷ìÐýF÷ëú|ÄùRFø*ûûÌüaÒø÷…ü§Õø§÷‘ûªo}}o,FïǪªÇ÷ÿûÙ÷ø*Ðü-{¹{µ{°>if›aü(ú|÷ù÷¡û4û½û±û9EøbûsÔ÷s÷îÑûî÷l÷«Ðû«÷4÷ÎÑý™­˜®–±@™hûG$&?»OË»¿ÆµÒ·üQ÷l÷uûlûuú|÷@ùŸJøŒ'üjLøj*üðJøûû%û4û.B¨H÷"×÷ßòéûKn€|wi‹hfŽšG÷¿¦©Ç÷bå#÷3÷.C¯Ë!¹/Á=ÈÓ±ÊÂÃÓT¹WAMRDco¤r¥s§÷ø#ÌûH÷ÙüÕ“ü@[]Í^¾`±c¹ºbµX¶Nµú|÷jùÁü=ûüWÐÕ÷´ø û/÷N÷\Íû\÷AELýt÷‰÷oû‰ûoùœø™û Z…Ùˆå‹ðE‹#Ž.‘7û#q–I÷¤‘D•M˜U•^–a˜eCA:S0d´TܬؿÓјmšp›tµO²m±‹¸‹®Ï£÷P«{#xWuŠz‹t£o»Ÿ€£€¦ÊÔÆäÁôS±a4[>UIƒ¥„¨…ª»‚È…Ó÷¥¼Íû9÷\Xk¼V±[§_À°o³d¹YÁú|øø÷š'û*ï÷*û1+û*ë÷*É+ë÷(+û(÷(NZÍø:ümÜ»ÈƵÏ–û#Ì÷#—Ê7ÞIóY«Ç(³?¹VÁ÷YËû «ž°œ³M¡z]w_ub?÷+é”Þ™ÓžjÅû"iûFyûjŠ OÝ‹ÙŽÓû%;}µ{°z©Otœqšn™lûK÷S[PAZ'dÁp|p|o}÷ZâÏ4÷QCûQûG÷ûz`z_|]D±™²™±›û‰r~~rs‹rqŽšFàè§Â÷½§™¦™¦š˜­T—‘˜’˜’ü/ͼ÷üû(÷jï÷('û(ú|øèøì÷T‰û$mûR$Wá`ñk÷“ “¡“£÷™ÙÐûÓ•µ•¹“¼E—qûCZûB%·S¢© ­Ÿ±¬ µ-½:J32GûY¸P÷
+±J÷(÷÷÷/Ñ÷Oüjn}|qk‹ih›E÷Å©ªÈø¶÷Ðû÷ZCûZû³F÷“ý.ÒF÷2gûPû8)«:Éâ½í°÷
+IûÓlÈ÷Â÷ ¼÷J¥ù.ü½Å!Ñ3ØDàì÷Í÷7®÷TÊü´FÛ›ûDÇû4ñû$=+(<û MºQ÷ÉíÚÝëÐ7á<òCû˜÷ñ3÷X÷"}÷0÷Ömû8Rû!9û ú|÷Èø¢F÷²û/ûoü'ÒÂø VÒø%ûu÷/÷´Ðû´÷:æ˜ÛžÑ¤hÉZû$ûJrûn¡Já‹Ü×’û1û²÷üŒ÷hø ûhü ûÓù¡Z\Ó[Ä_´a¼¼]·R·H·tûƒYZÔWÄYµ\½½]½Q¼G¼÷
+ûžaû Xû
+QûÓl¿÷»÷ ·÷J¤ú|÷iøh÷’ûCû’÷C‡û…÷–û¹Õ÷¹÷¤ûBaxvgi‹fcžD÷Ñ®®Ñùý}üt‰ûjûK2ÂZËß°õ–÷øðÍû¤÷C÷¤ûC÷†û¤÷@÷¤û@ûî÷@û@û’÷@÷’ú|ø(ùû5Ÿ½šÂ—ÆC•‚O}QwS.ý[Ñá÷JRÑù>ûüÂ÷o÷JûoûJ÷°÷b÷JûbûJø>µQgÐ9ÂA´IijeÉUÔCÞ÷ë÷{ûÓ¿™Ã—ÆD”qû"\û E)¶R²¾¬Ä§Ê÷§‰û´‡ûA…SƒXpq\‹l‹gŒaœI‰»­‰Ÿß‹¹²•×•Ù÷b‹÷àú|×ùjFø †p…o…oû~üÜû#Hú Îû(øÜû´‘¥‘§¨ø#Ðü¦Ž§Ž¨B•ˆl‡l‡kü÷WýtãøZ3üZ÷'àøZ6üZ÷#ßøZ7üZ÷#âøZ4üZú|ø#ùKø´Ëü´Åûûqø>÷qü>÷úû7û¶ô÷¶"÷ûüšüWÏ´øbÏøWüVûï÷÷1ûû1÷u÷÷1ûû1ûu÷B÷÷1ûû1÷u÷÷1ûû1÷ü¢ü1Ñø<«pªkªf²Æc´^¯[«ÀÓ²Ó£ÔÈû¨–µz¸v½GwŸb`š_û%F÷}aû
+]#U0}‚†žI“•Á•T+\Hec‚ƒ€ƒ~…ŸIë›ð¨ô·ÎDlEsEyÅÓÔ÷ ã÷:J¤xeyhyi_ƒ_ƒ_…¿×¾ñ½÷F§÷VüK÷&–÷š÷Ÿœqšr™qòfÍV×GâTi¤k£j¡k/|.€.ƒ­³²Ê·â÷ÆÐûu}µ|²|­B›lši™eû“F÷?U#`Kir‡Š‡‰…‰›KÜb‡û}9sWrXa_Pe¹RÏ·»À¨É¥Æ›è÷E÷øü9·§—˜Ÿ˜¡’Æ‹éM¡‹Pˆ`‡o‡u~u‰J{„– ÷ßFûëQ©nÇÑú|øvøeûIûƒ÷I÷ƒÔûI÷I÷ûIûû~ø
+÷Úd[dacgûí¼±¹µµ¹û+ûü˜OªmÊø©ű¡Ÿ·—§”º’ÍD¡„Gƒ`z~vt€iŠüwkz›©÷Lù
+ûfI÷#ûÄby\XV7ÁZç²¹£—‹˜ƒ˜zªg®r²³€¾…ËŠÊŠÆŠÁ‹ûêùyH÷
+<‹aˆc†eû%G÷u-`EL^¶QØÅ¿ä¥÷ ÷Fû³Ñ÷³÷3Ïû3÷[÷Îû÷2Eû2û2÷3Fû3û
+÷OH÷2û[û:µŽ¹»Êú|ÛùþÑùÂ÷t7l.c#Å3©<‹D‹v…|ƒ€ƒv†m‰€‹~{£BËŒ¸—¥¡Ÿ”ªŒµ‡ÖmÞUæ¯ì«é¥åÁûª÷ùûÕüÂÑùK§Ê¢ÎžÑH«eû2Nû!8û¢@ª³¨¶¥·÷÷&E÷züg|xnm‹kjŽ›FóǪ­Îø¡âÑ4÷gCûgûzÎûHPo±C®9¬0È©iãgÜeÕú|ùs{ûa‹û”Q‡†…÷÷Ëûõ÷6Íü<I÷Zû‡l¢n«q´©Žª­K“†ûn%U0¿]«Á¤ÆË´QºbÀuÇq÷)~÷„‹÷Y—ÓY‰@‰'‹ýù®ûñ÷é÷ñûé÷£ûµû]à÷]6û]÷!ã÷]3û]÷×÷'I÷Oˆp‡p…qû#ü(Ë÷ê÷†ûêÎø(û9‘¥¥Ž§÷HÍüD÷´ü½[]ÌW¾Y°]¾½a»W»M»"÷¾û!‰@|Nq\n^YgCq²Mשô­À­Äž×ê÷!Iú|ø“ù›G÷K‡f†gƒiûütÎø3÷‰ü3ÐøtûB“­‘®±÷KÏüK÷±ý$[]ÍO¿R±V¾¾_ÂVÂMÂ%÷üû@‰2zBmSiVPa8k²Lã­Ë»³È²Í äŽ÷÷@Fü!÷ïA~•s”p“oûBKÕ•a”]”W*û‚‰û#{ûl<ÃX¯ëž÷÷4÷C÷öÊ"™¸–º“»ÁËû4ƒ­ƒªƒ¦¬û¼3‚½‚ºƒ¶÷'ƒZ€\}_÷ü G7'Oûg§M÷"µöÏÕêZ°g÷(VH<[!m¥P÷­âÃÅÙ[¯r÷!XO?`'q¦P÷
+
+
+Ñ ú|
+endstream
+endobj
+94 0 obj
+<</Length 956>>
+stream
+€
+endstream
+endobj
+95 0 obj
+<</Length 1324>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /QWCLFA+PingFangHK-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+70 beginbfchar
+<0336> <3002>
+<033F> <300C>
+<0340> <300D>
+<0481> <FF08>
+<0482> <FF09>
+<0485> <FF0C>
+<04DE> <4E00>
+<04E4> <4E0A>
+<04FB> <4E2A>
+<0505> <4E3A>
+<0506> <4E3B>
+<051E> <4E5F>
+<0527> <4E86>
+<0566> <4EE5>
+<0583> <4F20>
+<05A2> <4F5C>
+<0632> <5143>
+<0641> <5165>
+<06A5> <5229>
+<06D2> <52A0>
+<06D6> <52A8>
+<0777> <540D>
+<07B8> <547D>
+<08A9> <56E0>
+<08C1> <5728>
+<0909> <57CE>
+<0A01> <5B57>
+<0A2B> <5B9E>
+<0A30> <5BA4>
+<0A64> <5C1D>
+<0A8A> <5C71>
+<0AE1> <5DE5>
+<0AF1> <5E02>
+<0B19> <5E74>
+<0B6F> <5F55>
+<0C74> <6218>
+<0D8E> <64AD>
+<0DAF> <6539>
+<0DCF> <6599>
+<0DED> <65E5>
+<0E0E> <662F>
+<0E4C> <6708>
+<0E6D> <6750>
+<0E84> <6781>
+<0E8B> <6797>
+<0E8F> <679D>
+<0ECF> <6837>
+<0F7A> <6B21>
+<0F8C> <6B64>
+<0FE5> <6C49>
+<105A> <6D3B>
+<12A0> <7528>
+<1331> <7684>
+<1357> <76F4>
+<1430> <798F>
+<14CC> <7B80>
+<1530> <7D20>
+<1556> <7EB9>
+<1579> <7EDF>
+<170B> <8272>
+<17B0> <83B2>
+<17E2> <8427>
+<1908> <884C>
+<19B6> <8BD5>
+<1A73> <8D70>
+<1B30> <8FDB>
+<1D2B> <9644>
+<1DCC> <9898>
+<1DCF> <989C>
+<1DDA> <98CE>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+99 0 obj
+<</Subtype/CIDFontType0C/Length 2359>>
+stream
+
+@¹8”û÷¤ø÷Íj/;P]8û÷ô÷üÝû÷²÷%èÔa#%BeûU‹½÷¬½÷“½÷Çø_ùAûðýA÷÷½û»÷¬÷‡½û‡÷“÷­2‹Áù w÷Ç÷?ùAOýA÷æ“Áû²p€¾øñ¾ÍÈ÷½È÷ŸùLû :D*(Æ\÷a÷e´i8/DV+;V¨·YheVÃÐjé÷äÜ÷ ÷ @·û±û°f«ÑÓÅ·ßʹx_¾®±»UU§2D vù À÷nÆøyùAüjV÷_ý Æù ÷]U vùAw•ø‚÷¶ø÷N÷ÎJû0ûªû0÷ªG÷PûÑûeüÌ÷G÷Þ÷JûÞÏm€º÷€µ÷?¼ÃÉ÷“ÅøC÷÷öWÆû TWtQš_ž¿»–µâ­f8X'û8Pû.ÈLðѨű“U¦t¹˜´o–{œÅû_;Fb³ÓÞÆ´ôæû"Nk]jHž€»{vøz»÷^w¦wÐÉ÷¶Å®ø9ù{û¬°m^­Cû>ûû5û:Õ#÷×¾²¿©v’;½ùt®ûaýO3TØ÷&÷'ŠÉÚç˵h_ªû¥NhagEo€¼÷]¸÷^»ËÈ÷»Äøq÷­÷.Gîûû:ûû;û<ß'÷ÐÀ£³¼p°i]eyR1IÆ÷"„÷ñŒ•Œ››RŽû»÷!’ÉÈÜî¹Bûû¼ vøŸw÷:ßæâCÅ
+îWÈ7€¼øS¼ËÉ÷ÔÈ÷²øªû6"û<û<Ý#÷÷ßô÷=÷?9ïûZðÆ@û'û*N@''P×÷'÷*ÈÕîûU vøs€w¤wõÅÈ÷ÉøªB\a5o¨†÷ YüŸÅ÷ÒÈ÷
+$ÁRéÜÀµÉ°xŽ.½{€»øã»ÍÇ÷½È÷§ù8ûCû
+ûuûuÓû ÷÷Ô÷
+÷u÷vC÷
+û[ë¿0ûaûaW1++Væ÷a÷aÁåêû- v÷~Å÷¸ù-Yû[û¦`÷8ñüíÅ4‹¾øÔ¼÷ðÇ÷uù8;PlKV´m¼³·¦Ë×½Y<û QFû‹û›Zø “¾ûÏ÷s÷ÕÞ÷ïFÖû;€¼÷µº÷‘¼÷îÅbÇ
+ ‹ ¼
+Å ¼ Å øÊ
+endstream
+endobj
+100 0 obj
+<</Length 265>>
+stream
+endstream
+endobj
+102 0 obj
+<</Length 677>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /IDDCNL+FiraSans-Light-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+18 beginbfchar
+<0002> <0041>
+<0024> <0042>
+<0043> <0045>
+<0090> <004C>
+<00EB> <0053>
+<00F7> <0054>
+<012D> <0058>
+<014F> <0061>
+<0187> <0064>
+<019A> <0065>
+<01DE> <0069>
+<0212> <006D>
+<0229> <006F>
+<025F> <0072>
+<027E> <0074>
+<0295> <0075>
+<07E4> <0038>
+<07E5> <0039>
+endbfchar
+1 beginbfrange
+<07DC> <07E1> <0030>
+endbfrange
+1 beginbfchar
+<0844> <2022>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+103 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R/F2 77 0 R/F3 84 0 R/F4 90 0 R/F5
+96 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length 13073>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -72 -200.126 362.835 272.126 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.065 0.071 0.103 RG 0.065 0.071 0.103 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0 G 0 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F1 14.3462 Tf 118.668 -21.287 Td[<17e20a8a>]TJ /F2 14.3462 Tf 32.494 0 Td[<0024019a014f0212019a025f>]TJ /F1 14.3462 Tf 53.942 0 Td[<05061dcc>]TJ ET BT /F3 11.9552 Tf 79.825 -44.5 Td[<00dc00a800a700d000df00c9008600c8009d00c900ea03fe00ad008600c9>]TJ /F4 11.9552 Tf 110.932 0 Td[<1d2b0b6f143006a5>]TJ ET 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 284.329 10.909 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg q 1 0 0 1 -21.837 -54.007 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 -21.81728 m 0.0 -9.81776 l -7.63603 -9.81776 l -7.63603 -7.63603 l 0.0 -7.63603 l 0.0 0.0 l -1.09085 0.0 l -1.09085 -6.54518 l -7.63603 -6.54518 l -7.63603 -4.36345 l -3.27258 -4.36345 l -3.27258 0.0 l -4.36345 0.0 l -4.36345 -3.27258 l -8.7269 -3.27258 l -8.7269 -6.54518 l -11.9995 -6.54518 l -11.9995 -9.81776 l -15.2721 -9.81776 l -15.2721 -13.09038 l -18.5447 -13.09038 l -18.5447 -17.45383 l -21.81728 -17.45383 l -21.81728 -18.5447 l -17.45383 -18.5447 l -17.45383 -14.18123 l -15.2721 -14.18123 l -15.2721 -20.72641 l -21.81728 -20.72641 l -21.81728 -21.81728 l -14.18123 -21.81728 l -14.18123 -14.18123 l -11.9995 -14.18123 l -11.9995 -21.81728 l 0.0 -21.81728 l -1.09085 -20.72641 m -10.90863 -20.72641 l -10.90863 -14.18123 l -8.7269 -14.18123 l -8.7269 -18.5447 l -3.27258 -18.5447 l -3.27258 -13.09038 l -7.63603 -13.09038 l -7.63603 -10.90863 l -1.09085 -10.90863 l -1.09085 -20.72641 l -4.36345 -17.45383 m -7.63603 -17.45383 l -7.63603 -14.18123 l -4.36345 -14.18123 l -4.36345 -17.45383 l -8.7269 -13.09038 m -10.90863 -13.09038 l -10.90863 -10.90863 l -8.7269 -10.90863 l -8.7269 -13.09038 l -11.9995 -13.09038 m -14.18123 -13.09038 l -14.18123 -10.90863 l -11.9995 -10.90863 l -11.9995 -13.09038 l -8.7269 -9.81776 m -10.90863 -9.81776 l -10.90863 -7.63603 l -8.7269 -7.63603 l -8.7269 -9.81776 l B Q n Q Q Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 195.395 .556 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 195.395 22.374 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q Q 0.0 10.90923 m 0.0 10.90923 m 0.0 -1.99255 l 284.3285 -1.99255 l 284.3285 10.90923 l h 284.3285 -1.99255 m W n q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .001 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 21.819 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 43.637 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 65.456 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 87.274 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 109.093 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 130.911 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 152.73 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 174.548 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 196.367 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 218.185 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 240.004 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.822 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -64.916 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 283.641 2.182 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -67.097 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 4.36345 m 0.0 3.27258 l 21.81728 3.27258 l 21.81728 4.36345 l 0.0 4.36345 l 0.0 1.09085 m 0.0 0.0 l 21.81728 0.0 l 21.81728 1.09085 l 0.0 1.09085 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -43.654 -64.916 cm Q Q Q Q Q Q Q Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F4 9.9626 Tf 232.6 -100.582 Td[<0e8b17b00e8f>]TJ ET BT /F5 9.9626 Tf 188.755 -116.821 Td[<07de07dc>10<07dd07e5>]TJ /F4 9.9626 Tf 22.207 0 Td[<0b19>]TJ /F5 9.9626 Tf 12.742 0 Td[<07e4>]TJ /F4 9.9626 Tf 8.139 0 Td[<0e4c>]TJ /F5 9.9626 Tf 12.742 0 Td[<07e5>]TJ /F4 9.9626 Tf 7.941 0 Td[<0ded>]TJ ET BT /F5 7.9701 Tf 278.164 -187.621 Td[<07dd>]TJ ET Q
+
+endstream
+endobj
+104 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+6413>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -72 -200.126 362.835 272.126 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F1 14.3462 Tf -10.583 -55.652 Td[<14cc0555>]TJ ET 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.714 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q q 0.898 0.837 0.832 RG 0.898 0.837 0.832 rg 0.0 0.0 m 0.0 0.0 m 0.0 6.31244 l 240.00302 6.31244 l 240.00302 0.0 l h 240.00302 6.31244 m f 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg Q 0.0 0.0 m 0.0 0.0 m 0.0 6.31244 l 47.99986 6.31244 l 47.99986 0.0 l h 47.99986 6.31244 m W n q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.714 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 0 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.87 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.714 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.714 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 11.477 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.87 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.714 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.714 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.954 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.87 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.714 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.714 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.431 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.87 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.714 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.714 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.908 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.87 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.714 cm Q Q Q Q Q Q Q Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q
+
+endstream
+endobj
+105 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R/F2 77 0 R/F5 96 0 R/F4 90 0 R/F3
+84 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length 16417>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -72 -200.126 362.835 272.126 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.065 0.071 0.103 RG 0.065 0.071 0.103 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q -72 42.451 362.835 29.549 re f Q 0.98 G 0.98 g BT /F1 11.9552 Tf -61.344 53.107 Td[<064c0a2b0e0e>]TJ /F2 11.9552 Tf 39.034 0 Td[<009b>5<019a027e025f>10<022902540229020001de026f>]TJ /F1 11.9552 Tf 61.533 0 Td[<05061dcc13311e790daf>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg q -72 35.876 362.835 6.575 re f Q 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q q 0.898 0.837 0.832 RG 0.898 0.837 0.832 rg 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 362.8394 6.57545 l 362.8394 0.0 l h 362.8394 6.57545 m f 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg Q 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 145.13354 6.57545 l 145.13354 0.0 l h 145.13354 6.57545 m W n q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .001 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 11.956 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 23.911 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 35.867 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 47.822 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 59.777 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 71.733 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 83.688 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 95.643 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 107.599 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 119.554 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 131.509 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 143.465 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q Q Q Q n Q Q 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F5 10.9091 Tf -30.421 -65.166 Td[<0844>]TJ ET BT /F4 10.9091 Tf -21.835 -65.166 Td[<0daf05271dcf170b048112a00527>]TJ /F3 10.9091 Tf 79.407 0 Td[<009300c9009300d000c200d000ef00df00e303d900e300ea0101>]TJ /F4 10.9091 Tf 85.091 0 Td[<0482>]TJ ET BT /F5 10.9091 Tf -30.421 -83.736 Td[<0844>]TJ ET BT /F4 10.9091 Tf -21.835 -83.736 Td[<06d20641>]TJ /F3 10.9091 Tf 24.861 0 Td[<00dc00a800a700d000df00c9008600c8009d00c900ea03fe00ad008600c9>]TJ /F4 10.9091 Tf 101.226 0 Td[<0fe51dda15560ecf06321530>]TJ ET BT /F5 7.9701 Tf 277.638 -187.621 Td[<07de>]TJ ET Q
+
+endstream
+endobj
+109 0 obj
+<</Length 772>>
+stream
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€
+endstream
+endobj
+110 0 obj
+<</Length1 28356/Length 28356>>
+stream
+
+$J& þúô0!#2^g %[Œ.@[ 4jD_Z?47<-0<E,bJÛqk."%%WfÛ
+sG7Sf.29"-" 0!g @n/
+ ‹UD'!U3M]
+Vf;I J&c7 % F#
+Sþ3Lk VSKÒ < *Kþ
+*   -¥ Iþ§¯
+2]<@W?í(o‘ì“N MÔ´€, '  /Uæd?<#Q5+â a 7)*1S7#3[ @#4
+ %Y
+g'cé"gë/%}™<ðJ12 !1\3   k…N>Dh?F 9#*'\Ð]K<˜{R; Ž² 8xH# #gc &,!6\
+•+
+-Î*$‘L'2?]! $>žˆ h•S 5–M+$
+  P(3wŸh*(dJ !Mh,f =E 1NR0<GI+f? þS ).,34 3u#D2(ë4>%“ 
+T% )B  
+
+ "$ý - þû*;,-(ç
+ B!/    $# 2*
+¯nGD:&G((£1g;I07WkL E
+^K q*
+  X+[ $6
+
+endstream
+endobj
+111 0 obj
+<</Length 412>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /PCOLSV+STKaitiSC-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+5 beginbfchar
+<06E2> <5C71>
+<085E> <533A>
+<088C> <5DDE>
+<12EE> <676D>
+<1818> <8427>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+112 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R/F5 96 0 R/F4 90 0 R/F3 84 0 R/F6
+106 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length 23513>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -72 -200.126 362.835 272.126 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.065 0.071 0.103 RG 0.065 0.071 0.103 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q -72 42.451 362.835 29.549 re f Q 0.98 G 0.98 g BT /F1 11.9552 Tf -61.344 53.107 Td[<0505054b050d075e033f17e20a8a0340>500<0498>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg q -72 35.876 362.835 6.575 re f Q 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q q 0.898 0.837 0.832 RG 0.898 0.837 0.832 rg 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 362.8394 6.57545 l 362.8394 0.0 l h 362.8394 6.57545 m f 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg Q 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 217.70584 6.57545 l 217.70584 0.0 l h 217.70584 6.57545 m W n q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .001 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 11.956 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 23.911 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 35.867 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 47.822 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 59.777 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 71.733 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 83.688 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 95.643 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 107.599 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 119.554 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 131.509 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 143.465 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 155.42 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 167.375 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 179.331 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 191.286 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 203.241 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.196 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q Q Q Q n Q Q 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F5 10.9091 Tf -30.421 -48.396 Td[<0844>]TJ ET BT /F4 10.9091 Tf -21.835 -48.396 Td[<056609090af107770a0107b8077705061dcc04850e0e>]TJ /F5 10.9091 Tf 123.043 0 Td[<0024019a014f0212019a025f>]TJ /F4 10.9091 Tf 40.528 0 Td[<133104de04fb05831579>]TJ ET BT /F5 10.9091 Tf -30.421 -66.966 Td[<0844>]TJ ET BT /F4 10.9091 Tf -21.835 -66.966 Td[<05a20505>]TJ /F3 10.9091 Tf 28.363 0 Td[<00dc00a800a700d000df00c9008600c8009d00c900ea03fe00ad008600c9>]TJ /F4 10.9091 Tf 101.226 0 Td[<13310a2b0c740a6419b6048512a008c10527>]TJ /F5 10.9091 Tf 101.225 0 Td[<0090>]TJ /F5 7.9701 Tf 1.276 2.013 Td[<0002>]TJ /F5 10.9091 Tf 2.867 -2.013 Td[<00f7>]TJ 3.582 -2.853 Td[<0043>]TJ 4.222 2.853 Td[<012d>-278<00eb027e0295018701de0229>]TJ /F4 10.9091 Tf -242.761 -15.581 Td[<0ae105a20a30133104de0f7a13570d8e105a06d613310e6d0dcf04e4>]TJ ET BT /F5 10.9091 Tf -30.421 -101.118 Td[<0844>]TJ ET BT /F4 10.9091 Tf -21.835 -101.118 Td[<13570d8e08c1>]TJ /F6 10.9091 Tf 32.727 0 Td[<12ee088c181806e2085e>]TJ /F4 10.9091 Tf 54.545 0 Td[<1b301908>]TJ ET BT /F5 7.9701 Tf 277.582 -187.533 Td[<07df>]TJ ET Q
+
+endstream
+endobj
+113 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R/F2 77 0 R/F5 96 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+574>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q -72 -200.126 362.835 272.126 re f Q 0.065 0.071 0.103 RG 0.065 0.071 0.103 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g BT /F1 14.3462 Tf 11.77 -57.913 Td[<05a205050b6919e3133104de04fb>]TJ /F2 14.3462 Tf 104.225 0 Td[<026f027e014f0218018702290295027e>]TJ /F1 14.3462 Tf 62.377 0 Td[<1dad1d8e>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F5 7.9701 Tf 277.582 -187.533 Td[<07df>]TJ ET 0.98 G 0.98 g Q
+
+endstream
+endobj
+114 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+15490>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -72 -200.126 362.835 272.126 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F1 14.3462 Tf -10.583 -55.681 Td[<a9cc11c71d8e>]TJ ET 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q q 0.898 0.837 0.832 RG 0.898 0.837 0.832 rg 0.0 0.0 m 0.0 0.0 m 0.0 6.31244 l 240.00302 6.31244 l 240.00302 0.0 l h 240.00302 6.31244 m f 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg Q 0.0 0.0 m 0.0 0.0 m 0.0 6.31244 l 144.00327 6.31244 l 144.00327 0.0 l h 144.00327 6.31244 m W n q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 0 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 11.477 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.954 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.431 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.908 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 57.385 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 68.862 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 80.34 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 91.817 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 103.294 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 114.771 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 126.248 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -10.583 -68.743 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 137.725 3.156 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -71.899 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.30847 0.0 l 5.30847 4.87805 l 1.86513 4.87805 l 1.86513 2.86945 l 3.29985 2.86945 l 3.29985 2.0086 l 1.0043 2.0086 l 1.0043 5.73889 l 10.47348 5.73889 l 10.47348 2.0086 l 8.17793 2.0086 l 8.17793 2.86945 l 9.61264 2.86945 l 9.61264 4.87805 l 6.16931 4.87805 l 6.16931 0.0 l 11.47778 0.0 l 11.47778 0.57388 l 6.7432 0.57388 l 6.7432 4.30415 l 9.03876 4.30415 l 9.03876 3.44333 l 7.60403 3.44333 l 7.60403 1.43471 l 11.04738 1.43471 l 11.04738 6.31277 l 0.4304 6.31277 l 0.4304 1.43471 l 3.87375 1.43471 l 3.87375 3.44333 l 2.43901 3.44333 l 2.43901 4.30415 l 4.73459 4.30415 l 4.73459 0.57388 l 0.0 0.57388 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -10.583 -68.743 cm Q Q Q Q Q Q Q Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q
+
+endstream
+endobj
+115 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R/F2 77 0 R/F4 90 0 R/F5 96 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+39580>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -72 -200.126 362.835 272.126 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.065 0.071 0.103 RG 0.065 0.071 0.103 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q -72 42.451 362.835 29.549 re f Q 0.98 G 0.98 g BT /F1 11.9552 Tf -61.344 53.107 Td[<0771143f>]TJ /F2 11.9552 Tf 27.078 0 Td[<01730200>9<0229017c01fa>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg q -72 35.876 362.835 6.575 re f Q 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q q 0.898 0.837 0.832 RG 0.898 0.837 0.832 rg 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 362.8394 6.57545 l 362.8394 0.0 l h 362.8394 6.57545 m f 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg Q 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 290.27261 6.57545 l 290.27261 0.0 l h 290.27261 6.57545 m W n q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .001 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 11.956 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 23.911 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 35.867 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 47.822 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 59.777 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 71.733 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 83.688 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 95.643 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 107.599 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 119.554 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 131.509 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 143.465 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 155.42 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 167.375 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 179.331 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 191.286 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 203.241 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.196 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 227.152 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 239.107 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 251.062 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 263.018 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 274.973 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 286.928 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q Q Q Q n Q Q 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm q 1 0 0 1 -43.654 3.925 cm q 0.08627 0.09413 0.13725 RG 0.08627 0.09413 0.13725 rg 0.3985 w q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 3.925 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -9.818 -9.818 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 -5.892 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 19.63525 m 0.0 12.76291 l 2.94527 12.76291 l 2.94527 10.79938 l 0.0 10.79938 l 0.0 0.0 l 0.98175 0.0 l 0.98175 9.81761 l 2.94527 9.81761 l 2.94527 0.0 l 3.92705 0.0 l 3.92705 9.81761 l 6.87231 9.81761 l 6.87231 12.76291 l 9.81761 12.76291 l 9.81761 15.70819 l 19.63525 15.70819 l 19.63525 16.68996 l 9.81761 16.68996 l 9.81761 18.65349 l 19.63525 18.65349 l 19.63525 19.63525 l 8.83585 19.63525 l 8.83585 16.68996 l 6.87231 16.68996 l 6.87231 19.63525 l 0.0 19.63525 l 0.98175 18.65349 m 5.89056 18.65349 l 5.89056 16.68996 l 2.94527 16.68996 l 2.94527 13.74466 l 0.98175 13.74466 l 0.98175 18.65349 l 3.92705 15.70819 m 5.89056 15.70819 l 5.89056 13.74466 l 3.92705 13.74466 l 3.92705 15.70819 l 6.87231 15.70819 m 8.83585 15.70819 l 8.83585 13.74466 l 6.87231 13.74466 l 6.87231 15.70819 l 3.92705 12.76291 m 5.89056 12.76291 l 5.89056 10.79938 l 3.92705 10.79938 l 3.92705 12.76291 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 3.925 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 3.925 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .5 0 0 1 -12.009 -.498 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 3.434 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 3.925 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 3.925 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -.5 1 0 -56.899 -37.538 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 3.434 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 3.925 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F2 10.9091 Tf -43.654 -14.895 Td[<009b>4<019a027e025f>10<022902540229020001de026f>]TJ /F1 10.9091 Tf 56.15 0 Td[<1a730e8414cc1dda>]TJ ET BT /F4 10.9091 Tf -43.654 -29.894 Td[<08a90f8c033f17e20a8a034005061dcc051e1a730e8414cc1dda0336>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm q 1 0 0 1 -43.654 -52.071 cm q 0.08627 0.09413 0.13725 RG 0.08627 0.09413 0.13725 rg 0.3985 w q q 0.414 0.593 0.685 RG 0.414 0.593 0.685 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.414 0.593 0.685 RG 0.414 0.593 0.685 rg q 1 0 0 1 -43.654 -52.071 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -9.818 -9.818 cm 0.41412 0.59294 0.68471 RG 0.41412 0.59294 0.68471 rg q 1 0 0 1 -43.654 -61.889 cm q 0.41412 0.59294 0.68471 RG 0.41412 0.59294 0.68471 rg 0.3985 w q 2 J 0.0 19.63525 m 0.0 12.76291 l 2.94527 12.76291 l 2.94527 10.79938 l 0.0 10.79938 l 0.0 0.0 l 0.98175 0.0 l 0.98175 9.81761 l 2.94527 9.81761 l 2.94527 0.0 l 3.92705 0.0 l 3.92705 9.81761 l 6.87231 9.81761 l 6.87231 12.76291 l 9.81761 12.76291 l 9.81761 15.70819 l 19.63525 15.70819 l 19.63525 16.68996 l 9.81761 16.68996 l 9.81761 18.65349 l 19.63525 18.65349 l 19.63525 19.63525 l 8.83585 19.63525 l 8.83585 16.68996 l 6.87231 16.68996 l 6.87231 19.63525 l 0.0 19.63525 l 0.98175 18.65349 m 5.89056 18.65349 l 5.89056 16.68996 l 2.94527 16.68996 l 2.94527 13.74466 l 0.98175 13.74466 l 0.98175 18.65349 l 3.92705 15.70819 m 5.89056 15.70819 l 5.89056 13.74466 l 3.92705 13.74466 l 3.92705 15.70819 l 6.87231 15.70819 m 8.83585 15.70819 l 8.83585 13.74466 l 6.87231 13.74466 l 6.87231 15.70819 l 3.92705 12.76291 m 5.89056 12.76291 l 5.89056 10.79938 l 3.92705 10.79938 l 3.92705 12.76291 l B Q n Q Q Q 1 G 1 g 0.414 0.593 0.685 RG 0.414 0.593 0.685 rg q 1 0 0 1 -43.654 -52.071 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.414 0.593 0.685 RG 0.414 0.593 0.685 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -52.071 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .5 0 0 1 -12.009 -.498 cm 0.41412 0.59294 0.68471 RG 0.41412 0.59294 0.68471 rg q 1 0 0 1 -43.654 -52.562 cm q 0.41412 0.59294 0.68471 RG 0.41412 0.59294 0.68471 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.414 0.593 0.685 RG 0.414 0.593 0.685 rg q 1 0 0 1 -43.654 -52.071 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.414 0.593 0.685 RG 0.414 0.593 0.685 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -52.071 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -.5 1 0 -.902 -93.535 cm 0.41412 0.59294 0.68471 RG 0.41412 0.59294 0.68471 rg q 1 0 0 1 -43.654 -52.562 cm q 0.41412 0.59294 0.68471 RG 0.41412 0.59294 0.68471 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.414 0.593 0.685 RG 0.414 0.593 0.685 rg q 1 0 0 1 -43.654 -52.071 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -43.654 -76.869 306.142 15.196 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.024 0.322 0.475 RG 0.024 0.322 0.475 rg BT /F2 10.9091 Tf -43.654 -70.891 Td[<009b>4<019a027e025f>10<022902540229020001de026f>]TJ /F1 10.9091 Tf 56.15 0 Td[<1a730e8414cc1dda>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F4 10.9091 Tf -43.654 -85.891 Td[<08a90f8c033f17e20a8a034005061dcc051e1a730e8414cc1dda0336>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm q 1 0 0 1 -43.654 -108.068 cm q 0.08627 0.09413 0.13725 RG 0.08627 0.09413 0.13725 rg 0.3985 w q q 0.918 0.513 0.482 RG 0.918 0.513 0.482 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.918 0.513 0.482 RG 0.918 0.513 0.482 rg q 1 0 0 1 -43.654 -108.068 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -9.818 -9.818 cm 0.91766 0.51295 0.48235 RG 0.91766 0.51295 0.48235 rg q 1 0 0 1 -43.654 -117.885 cm q 0.91766 0.51295 0.48235 RG 0.91766 0.51295 0.48235 rg 0.3985 w q 2 J 0.0 19.63525 m 0.0 12.76291 l 2.94527 12.76291 l 2.94527 10.79938 l 0.0 10.79938 l 0.0 0.0 l 0.98175 0.0 l 0.98175 9.81761 l 2.94527 9.81761 l 2.94527 0.0 l 3.92705 0.0 l 3.92705 9.81761 l 6.87231 9.81761 l 6.87231 12.76291 l 9.81761 12.76291 l 9.81761 15.70819 l 19.63525 15.70819 l 19.63525 16.68996 l 9.81761 16.68996 l 9.81761 18.65349 l 19.63525 18.65349 l 19.63525 19.63525 l 8.83585 19.63525 l 8.83585 16.68996 l 6.87231 16.68996 l 6.87231 19.63525 l 0.0 19.63525 l 0.98175 18.65349 m 5.89056 18.65349 l 5.89056 16.68996 l 2.94527 16.68996 l 2.94527 13.74466 l 0.98175 13.74466 l 0.98175 18.65349 l 3.92705 15.70819 m 5.89056 15.70819 l 5.89056 13.74466 l 3.92705 13.74466 l 3.92705 15.70819 l 6.87231 15.70819 m 8.83585 15.70819 l 8.83585 13.74466 l 6.87231 13.74466 l 6.87231 15.70819 l 3.92705 12.76291 m 5.89056 12.76291 l 5.89056 10.79938 l 3.92705 10.79938 l 3.92705 12.76291 l B Q n Q Q Q 1 G 1 g 0.918 0.513 0.482 RG 0.918 0.513 0.482 rg q 1 0 0 1 -43.654 -108.068 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.918 0.513 0.482 RG 0.918 0.513 0.482 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -108.068 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .5 0 0 1 -12.009 -.498 cm 0.91766 0.51295 0.48235 RG 0.91766 0.51295 0.48235 rg q 1 0 0 1 -43.654 -108.559 cm q 0.91766 0.51295 0.48235 RG 0.91766 0.51295 0.48235 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.918 0.513 0.482 RG 0.918 0.513 0.482 rg q 1 0 0 1 -43.654 -108.068 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.918 0.513 0.482 RG 0.918 0.513 0.482 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -108.068 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -.5 1 0 55.094 -149.531 cm 0.91766 0.51295 0.48235 RG 0.91766 0.51295 0.48235 rg q 1 0 0 1 -43.654 -108.559 cm q 0.91766 0.51295 0.48235 RG 0.91766 0.51295 0.48235 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.918 0.513 0.482 RG 0.918 0.513 0.482 rg q 1 0 0 1 -43.654 -108.068 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -43.654 -132.865 306.142 15.196 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg BT /F2 10.9091 Tf -43.654 -126.888 Td[<009b>4<019a027e025f>10<022902540229020001de026f>]TJ /F1 10.9091 Tf 56.15 0 Td[<1a730e8414cc1dda>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F4 10.9091 Tf -43.654 -141.887 Td[<08a90f8c033f17e20a8a034005061dcc051e1a730e8414cc1dda0336>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm BT /F5 7.9701 Tf 277.327 -187.621 Td[<07e0>]TJ ET Q
+
+endstream
+endobj
+116 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 70 0 R/Font<</F1 71 0 R/F2 77 0 R/F4 90 0 R/F5 96 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+42980>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g q -72 -200.126 362.835 272.126 re f Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.065 0.071 0.103 RG 0.065 0.071 0.103 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.623 0.626 0.643 RG 0.623 0.626 0.643 rg 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q -72 42.451 362.835 29.549 re f Q 0.98 G 0.98 g BT /F1 11.9552 Tf -61.344 53.107 Td[<0771143f>]TJ /F2 11.9552 Tf 27.078 0 Td[<01730200>9<0229017c01fa>]TJ ET BT /F1 11.9552 Tf -1.795 53.107 Td[<048115850482>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.98 G 0.98 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg q -72 35.876 362.835 6.575 re f Q 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q q 0.898 0.837 0.832 RG 0.898 0.837 0.832 rg 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 362.8394 6.57545 l 362.8394 0.0 l h 362.8394 6.57545 m f 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg Q 0.0 0.0 m 0.0 0.0 m 0.0 6.57545 l 362.8394 6.57545 l 362.8394 0.0 l h 362.8394 6.57545 m W n q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .001 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 11.956 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 23.911 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 35.867 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 47.822 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 59.777 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 71.733 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 83.688 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 95.643 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 107.599 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 119.554 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 131.509 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 143.465 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 155.42 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 167.375 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 179.331 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 191.286 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 203.241 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.196 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 227.152 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 239.107 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 251.062 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 263.018 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 274.973 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 286.928 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 298.884 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 310.839 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 322.794 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 334.75 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 346.705 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 35.876 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 358.66 3.288 cm 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 32.588 cm q 0.86276 0.18825 0.13725 RG 0.86276 0.18825 0.13725 rg 0.3985 w q 2 J 0.0 0.0 m 5.52866 0.0 l 5.52866 5.08038 l 1.94249 5.08038 l 1.94249 2.98846 l 3.43674 2.98846 l 3.43674 2.09192 l 1.04594 2.09192 l 1.04594 5.97693 l 10.90791 5.97693 l 10.90791 2.09192 l 8.51714 2.09192 l 8.51714 2.98846 l 10.01137 2.98846 l 10.01137 5.08038 l 6.4252 5.08038 l 6.4252 0.0 l 11.95387 0.0 l 11.95387 0.59767 l 7.0229 0.59767 l 7.0229 4.4827 l 9.41367 4.4827 l 9.41367 3.58615 l 7.91943 3.58615 l 7.91943 1.49423 l 11.50562 1.49423 l 11.50562 6.57462 l 0.44826 6.57462 l 0.44826 1.49423 l 4.03441 1.49423 l 4.03441 3.58615 l 2.54018 3.58615 l 2.54018 4.4827 l 4.93097 4.4827 l 4.93097 0.59767 l 0.0 0.59767 l 0.0 0.0 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg q 1 0 0 1 -72 35.876 cm Q Q Q Q Q Q Q Q Q n Q Q 0.829 0.728 0.721 RG 0.829 0.728 0.721 rg 0.863 0.188 0.137 RG 0.863 0.188 0.137 rg 0.98 G 0.98 g 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg q 1 0 0 1 -43.654 -16.462 cm q 0.08627 0.09413 0.13725 RG 0.08627 0.09413 0.13725 rg 0.3985 w q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -16.462 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -9.818 -9.818 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 -26.28 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 19.63525 m 0.0 12.76291 l 2.94527 12.76291 l 2.94527 10.79938 l 0.0 10.79938 l 0.0 0.0 l 0.98175 0.0 l 0.98175 9.81761 l 2.94527 9.81761 l 2.94527 0.0 l 3.92705 0.0 l 3.92705 9.81761 l 6.87231 9.81761 l 6.87231 12.76291 l 9.81761 12.76291 l 9.81761 15.70819 l 19.63525 15.70819 l 19.63525 16.68996 l 9.81761 16.68996 l 9.81761 18.65349 l 19.63525 18.65349 l 19.63525 19.63525 l 8.83585 19.63525 l 8.83585 16.68996 l 6.87231 16.68996 l 6.87231 19.63525 l 0.0 19.63525 l 0.98175 18.65349 m 5.89056 18.65349 l 5.89056 16.68996 l 2.94527 16.68996 l 2.94527 13.74466 l 0.98175 13.74466 l 0.98175 18.65349 l 3.92705 15.70819 m 5.89056 15.70819 l 5.89056 13.74466 l 3.92705 13.74466 l 3.92705 15.70819 l 6.87231 15.70819 m 8.83585 15.70819 l 8.83585 13.74466 l 6.87231 13.74466 l 6.87231 15.70819 l 3.92705 12.76291 m 5.89056 12.76291 l 5.89056 10.79938 l 3.92705 10.79938 l 3.92705 12.76291 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -16.462 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -16.462 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .5 0 0 1 -12.009 -.498 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 -16.953 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -16.462 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -16.462 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -.5 1 0 -36.511 -57.926 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 -16.953 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -16.462 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg BT /F1 10.9091 Tf -43.654 -35.755 Td[<0a271258>]TJ /F2 10.9091 Tf 24.71 0 Td[<086b009b>5<019a027e025f>10<022902540229020001de026f>]TJ /F1 10.9091 Tf 59.683 0 Td[<1a730e8414cc1dda>]TJ /F2 10.9091 Tf 43.637 0 Td[<086c>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F4 10.9091 Tf -43.654 -50.755 Td[<08a90f8c033f17e20a8a034005061dcc051e1a730e8414cc1dda0336>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm q 1 0 0 1 -43.654 -72.932 cm q 0.08627 0.09413 0.13725 RG 0.08627 0.09413 0.13725 rg 0.3985 w q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -72.932 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -9.818 -9.818 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 -82.749 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 19.63525 m 0.0 12.76291 l 2.94527 12.76291 l 2.94527 10.79938 l 0.0 10.79938 l 0.0 0.0 l 0.98175 0.0 l 0.98175 9.81761 l 2.94527 9.81761 l 2.94527 0.0 l 3.92705 0.0 l 3.92705 9.81761 l 6.87231 9.81761 l 6.87231 12.76291 l 9.81761 12.76291 l 9.81761 15.70819 l 19.63525 15.70819 l 19.63525 16.68996 l 9.81761 16.68996 l 9.81761 18.65349 l 19.63525 18.65349 l 19.63525 19.63525 l 8.83585 19.63525 l 8.83585 16.68996 l 6.87231 16.68996 l 6.87231 19.63525 l 0.0 19.63525 l 0.98175 18.65349 m 5.89056 18.65349 l 5.89056 16.68996 l 2.94527 16.68996 l 2.94527 13.74466 l 0.98175 13.74466 l 0.98175 18.65349 l 3.92705 15.70819 m 5.89056 15.70819 l 5.89056 13.74466 l 3.92705 13.74466 l 3.92705 15.70819 l 6.87231 15.70819 m 8.83585 15.70819 l 8.83585 13.74466 l 6.87231 13.74466 l 6.87231 15.70819 l 3.92705 12.76291 m 5.89056 12.76291 l 5.89056 10.79938 l 3.92705 10.79938 l 3.92705 12.76291 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -72.932 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -72.932 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .5 0 0 1 -12.009 -.498 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 -73.423 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -72.932 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q q 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -43.654 -72.932 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -.5 1 0 19.958 -114.395 cm 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg q 1 0 0 1 -43.654 -73.423 cm q 0.41177 0.68001 0.56941 RG 0.41177 0.68001 0.56941 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 0.98175 l 19.63525 0.98175 l 19.63525 0.0 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.412 0.68 0.569 RG 0.412 0.68 0.569 rg q 1 0 0 1 -43.654 -72.932 cm Q Q Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg Q Q n Q Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg BT /F2 10.9091 Tf -43.654 -92.225 Td[<009b>4<019a027e025f>10<022902540229020001de026f>]TJ /F1 10.9091 Tf 56.15 0 Td[<1a730e8414cc1dda>]TJ /F2 10.9091 Tf 43.636 0 Td[<084f>]TJ ET 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg BT /F4 10.9091 Tf -43.654 -107.224 Td[<08a90f8c033f17e20a8a034005061dcc051e1a730e8414cc1dda0336>]TJ ET 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg q .3985 w 254.774 -107.224 m 254.774 -99.861 l S Q q .3985 w 254.973 -100.06 m 261.519 -100.06 l S Q q .3985 w 254.973 -107.025 m 261.519 -107.025 l S Q q .3985 w 261.718 -107.224 m 261.718 -99.861 l S Q 0.086 0.094 0.137 RG 0.086 0.094 0.137 rg 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm BT /F5 7.9701 Tf 277.574 -187.533 Td[<07e1>]TJ ET Q
+
+endstream
+endobj
+117 0 obj
+<</Length 113023>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 228.423 -731.071 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<00120012>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F4 15 Tf 66.015 2.955 Td[<06b80a63>]TJ /F10 15 Tf 33.75 0 Td[<0023>]TJ /F4 15 Tf 24.3 0 Td[<0f610cf6>]TJ /F10 15 Tf 33.75 0 Td[<00230046>-5<0042004e00460053>]TJ /F4 15 Tf 52.125 0 Td[<11f60e35>]TJ /F10 15 Tf 33.75 0 Td[<0039004a00420050005400490042004f>-250<00230046>-5<0042004e00460053>-250<082c0046004e0046>]TJ /F8 15 Tf -71.227 -23.4 Td[<00230032001c004b003200600069003f0032004b003200730042001c00510062003f001c004d0058006200690076>]TJ /F2 10.5 Tf -151.463 -26.741 Td[<118306f1>]TJ /F1 10.5 Tf 23.625 0 Td[<002300460042004e00460053>]TJ /F2 10.5 Tf 35.185 0 Td[<11f60e350d5e105b>]TJ ET 0 1 0 0 K 0 1 0 0 k BT /F1 10.5 Tf 124.435 -47.186 Td[<002e004600550053>7<00500051>-6<0050004d004a0054>]TJ ET 0 G 0 g BT /F2 10.5 Tf 173.523 -47.186 Td[<0eb9080e0524011110a8>]TJ /F7 10.5 Tf 55.125 0 Td[<002b004d002b005100480051006d006000620058006200690076>]TJ /F2 10.5 Tf 74.287 0 Td[<05d80a1410420f2f0ffe0ce4011108460cc60d120fb8077106840ed510220062>]TJ ET q 1 0 0 1 0 -482.283 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 412.45401 l 0.0 414.80234 1.90364 416.706 4.25198 416.706 c 463.75406 416.706 l 466.1024 416.706 468.00604 414.80234 468.00604 412.45401 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 397.5099 l 466.58871 397.5099 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q [ 2.83466 2.83466 ] 1.41731 d 0.45882 0.54118 0.6 RG 0.45882 0.54118 0.6 rg /pgf@CA1.0 gs 234.00302 397.5099 m 234.00302 1.41731 l S Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 398.92722 m 1.41731 412.45401 l 1.41731 414.01956 2.68643 415.28867 4.25198 415.28867 c 463.75406 415.28867 l 465.31961 415.28867 466.58871 414.01956 466.58871 412.45401 c 466.58871 398.92722 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -482.283 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 403.466 cm 1 1 1 RG 1 1 1 rg BT /F6 12 Tf 0 -482.283 Td[<0d5010a8065309e8>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -482.283 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -482.283 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 196.839 cm 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -299.947 Td[<0024002f0051002b006d004b0032004d0069002b0048001c00620062>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 66.15 -299.947 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 70.875 -299.947 Td[<002b00690032007400230032001c004b00320060>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 118.125 -299.947 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -328.027 Td[<0024006d006200320069003f0032004b0032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 42.525 -328.027 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 47.25 -328.027 Td[<00730042001c00510062003f001c004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 85.05 -328.027 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -356.107 Td[<0024001c006d0069003f00510060>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 33.075 -356.107 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 37.8 -356.107 Td[<0a1f09f411a5>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 64.8 -356.107 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -370.147 Td[<002400690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -370.147 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 33.075 -370.147 Td[<0f610cf6>]TJ /F5 9 Tf 22.725 0 Td[<00220032001c004b00320060>]TJ /F9 9 Tf 33.075 0 Td[<11f60e35>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 106.875 -370.147 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -384.187 Td[<00240062006d002300690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 42.525 -384.187 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 47.25 -384.187 Td[<0024006900320074006900690069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 80.325 -384.187 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 85.05 -384.187 Td[<0054003b003700510060004d001c004b0032004d00690040003f001c004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 155.925 -384.187 Td[<0027>]TJ ET 0 G 0 g BT /F9 9 Tf 160.65 -384.187 Td[<06b80a63069e09e6>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 196.65 -384.187 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -412.266 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -412.266 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -412.266 Td[<002f0051002b006d004b0032004d0069>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -412.266 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -440.346 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -440.346 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -440.346 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -440.346 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -454.386 Td[<0024004b001c0046003200690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -468.426 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -468.426 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -468.426 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -468.426 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -496.506 Td[<002400620032002b006900420051004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 37.8 -496.506 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 42.525 -496.506 Td[<086508ba>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 60.525 -496.506 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -524.586 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -524.586 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -524.586 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -524.586 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -538.626 Td[<002400370060001c004b003200690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 61.425 -538.626 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 66.15 -538.626 Td[<0c030d4c0d5e>]TJ /F5 9 Tf 31.725 0 Td[<004a003200690060005100540051004800420062>]TJ /F9 9 Tf 51.975 0 Td[<11f60e3505a50b0a06bf>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 194.85 -538.626 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -552.666 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 37.8 -552.666 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 42.525 -552.666 Td[<004200690032004b004200780032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 75.6 -552.666 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -566.706 Td[<0024004200690032004b>]TJ ET 0 G 0 g BT /F9 9 Tf 47.25 -566.706 Td[<06bf0a140ffe0ce4010d10a80a14>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 29.4 -580.746 Td[<0024006900320074006900690069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 62.475 -580.746 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 67.2 -580.746 Td[<002b004d002b005100480051006d006000620058006200690076>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 128.625 -580.746 Td[<0027>]TJ ET 0 G 0 g BT /F9 9 Tf 133.35 -580.746 Td[<010e>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 18.9 -594.786 Td[<0024004200690032004b>]TJ ET 0 G 0 g BT /F9 9 Tf 47.25 -594.786 Td[<08460cc6>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 69.975 -594.786 Td[<0024006900320074006900690069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 103.05 -594.786 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 107.775 -594.786 Td[<0054003b003700510060004d001c004b0032004d00690040003f001c004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 178.65 -594.786 Td[<0027>]TJ ET 0 G 0 g BT /F9 9 Tf 188.1 -594.786 Td[<0771>]TJ -158.7 -14.04 Td[<06840ed5102210ed0dcd>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -622.866 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -622.866 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -622.866 Td[<004200690032004b004200780032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 66.15 -622.866 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -636.906 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -636.906 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -636.906 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -636.906 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 0 -650.946 Td[<005800580058005800580058>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -664.986 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -664.986 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -664.986 Td[<002f0051002b006d004b0032004d0069>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 61.425 -664.986 Td[<0027>]TJ ET 0 G 0 g q 1 0 0 1 232.583 -396.491 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -396.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -396.491 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -396.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -396.491 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -396.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 169.45 -313.863 cm q 1 0 0 1 232.583 -430.799 cm /Fm0 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -396.491 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 337.536 -396.491 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -396.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -396.491 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -396.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -396.491 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -396.491 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 245.915 -313.863 cm q 1 0 0 1 337.536 -430.799 cm /Fm1 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -396.491 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 232.583 -476.824 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -476.824 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -476.824 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -476.824 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -476.824 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -476.824 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 169.45 -372.39 cm q 1 0 0 1 232.583 -511.132 cm /Fm2 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -476.824 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 337.536 -476.824 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -476.824 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -476.824 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -476.824 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -476.824 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -476.824 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 245.915 -372.39 cm q 1 0 0 1 337.536 -511.132 cm /Fm3 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -476.824 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 232.583 -557.156 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -557.156 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -557.156 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -557.156 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -557.156 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -557.156 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 169.45 -430.918 cm q 1 0 0 1 232.583 -591.465 cm /Fm4 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -557.156 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 337.536 -557.156 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -557.156 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -557.156 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -557.156 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -557.156 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -557.156 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 245.915 -430.918 cm q 1 0 0 1 337.536 -591.465 cm /Fm5 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -557.156 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 232.583 -637.489 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -637.489 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -637.489 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -637.489 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -637.489 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -637.489 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 169.45 -489.445 cm q 1 0 0 1 232.583 -671.797 cm /Fm6 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -637.489 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 337.536 -637.489 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -637.489 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -637.489 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -637.489 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -637.489 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -637.489 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 245.915 -489.445 cm q 1 0 0 1 337.536 -671.797 cm /Fm7 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -637.489 cm Q Q Q Q Q Q Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -482.283 cm Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+124 0 obj
+<</Length 2031>>
+stream
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð
+endstream
+endobj
+125 0 obj
+<</Length1 86440/Length 86440>>
+stream
+
+1nE[£3
+
+^
+088 -'%(
+    -  .
+ '   "
+ $$(
+)7?.K
+£+L!;  
+&*&  &   &%,  V)  +>#%$  *  
+
+H*   6;,> !    !"  
+( "  
+AIId=x)1D + D:  .;D"
+ {Ñ[ _**-zE+F6&
+ 7{ 
+   &$%+ hr
+2M;+
+"Y
+.     ?'   
+
+  )$    '  (A    *< ² &?  þœ F"
+
+ !G!  )@ J!8T;$ 4  -30     &g>
+  IK@ $ 
+2! =!   'YN& '#
+7{#  'k   
+r  
+
+ Y>
+þ4+Y3#) " ?6
+%! BSZ&
+
+$C 0(  .7U@/)%)
+%
+  
+.  þ;$(7 633-  ] 4
+4Ñ.
+ H 
+ q .
+Â#6"*,!F>0  
+v¡+L0@'D@6-
+# <GE1?{5+ :
+ F    %   
+
+
+3! 
+:  /   
+%'/\TG   þ"3=$  , *"D .($ &'!”  I$ 
+&.[%#  #"  @8+  7"   2%
+ . $ $
+ 
+$ 2XE0 ýQ  7$L# À
+
+
+  
+
++   #
+     
+
+ ¡ -  C   .%  "
+     
+  
+    V  #
+ 
+
+ -M  
+þo 4 : #$" *QI= &$  " 
+  ë
+&;T<
+   843 "¤)B( *'!
+@
+ 
+%
+¾ 
+
+¸  
+   ·
+  
+
+ 
+'
+ †% 1/ ¯ ,V""#@-S-
+%
+  *1       8F*%'
+ *# +.( 
+    
+ ©  
+
+  
+
+: 
+   
+
+
+ 
+  8N# !  !*"`
+þâ   *þ3 * - D`LY 9-O/ ;o%#+
+*&rJK!  . 6@ (. 9eb`4 
+  
+
+
+    
+1  ?? ¾  +( # »
+ [ %
+2kjf-    6(3#'XN; #D$ % $
+BcOB!þ[
+!  |>%
+ a9
+H["/&
+Am; 
+ ?n&  ø
+
+#'+ & ((# 
+!( 
+'--
+
+  % # Ä     Ì#-  u   
+
+,,$ &8,$!  (6  (C<9ý•> ') $]$ · 
+  #
+ › )
+Á' &=#" 
+O0 0  $/ $N&   
+ =)D' *V!=
+"
+  
+; 
+ý× %C
+'* …  %*  $  7 O D#>7 *5×! &
+
+   
+"   
+  -  
+œ 
+ 
+þâ 
+ Tr    (5>:Ç+*#-+ +
+")*  R "!    
+ E 
+ 
+ !S $î    œ') '@!
+%C%#   !$   +3<B2% !9!)5&þ¡'&"DJU5!  e
+ ¸'=<8&3#H<(%þÝ"   &
+
+  %6' " E(KI
+"
+$1"
+ 3%  (,) 7 ( ! -% ûA* 4:8 $.6…,% ,5,+SW_7 '&'ALc°
+     4Y
+ X/ ".  #M   
+    
+
+
+
+!  H|"
+ #JE7
+.2. +; .22+!92 .57
+= A<3 #!
+G:PJU>  37?%
+ ! 
+ ?QT <GL@- $1/"/()  $H:'ý— .*  )u
+    &B  
+/@   #!
+  !       !
+ 
+  (    & … 
+
+-@!2% (  ,3    $D-   !G!
+
+   !
+ 6R * !& 
+ @GI!þ«    
+ þ¿  „  ƒ  ƒ
+  
+I"  2# !, -* '1 3    
+ 150-(  4# $ 
+ ?5   "  ’  
+        P
+     z" )
+ +c3CHG  ) :GJ &  ! Í. ^8'RMB$ #%Qsa];Æ?5( #3 " %
+Z
+ !/%
+2D 
+ +/VÆ
+ (       
+ &   n!4+$.
+>@6    ýÑ   !
+  4Ù   2•U04  +1K
+$ ?- KE9-   
+ $$
+  % # þµ #   !  
+   &#    .3
+
+ ,W,#&# !=+7#'-*@ú ( D  
+
+
+    4    '4)! þ*  
+*3 "¥y  †*47 3C~$$!   #-$#   *
+a
+   *)# $
+
+   #!½$ ERc=' %-NKK) !+
+%9
+þÛ82%
+ 'S3(*<@> +   
+ !Z;#(þÆ %"(
+ " 
+#"!+      !  (
+ 
+ $
+þ
+   2*'<Q=2 (  +!     €  ? È "   #  Á >  Á   %
+
+
+ — ',) <
+  %L&&%G#
+:c% 
+  %     !§
+ -N-" +^0 
+ '    
+ ‚
+
+     e 
+
+
+  
+
+%'$    %U3 C# "/% #$ "(/ <H[<  .& &+,
+
+
+ !-  *:  
+0a""*. !+-(
+ :"
+
+.g4 = ;8". $  #
+  $ 50*L7 V·c þr&
+  &N*8
+ 
+  
+  
+  
+
+ 
+          9
+/"' 
+  $ 
+ *<
+W  
+$  (3 Ë
+(-     $  
+
+ .6!  !"*5%&D ^.‰ZIo¡s  '$*!     $" 
+($0#'3;  
+"
+!+"   40G‚8  5+
+%=) !5ý€ 3 0  2- ñ 7-B$
+     
+  B%
+26, '&"  6W,      þ8Y4"
+ -; '4&   -
+     
+ 
+T1"P#D 
+  !
+ #
+j
+ 9 
+'AI #J2     
+#B   2;I0 :
+AU%)2=  
+ cŽþB =s9  
+&   @  %2P% 
+d "   %C
+ þ
+  ! 
+  (@
+
+ K3-g6#  n(
+
+
+  3  JEh   (    ¥  >"
+, #E 
+7@   þ½82%*! !! ''/37#? 5
+
+&: 8
+
+,G" $%I~ 0   
+ 4-% *#  T3 $+:(H1 
+9FZ</  3 A  þS"
+!$`;
+  !  
+ 
+    /5)#
+ 276  " 6 <.)5   ,#/ 
+  )! !5BJ%0 )$    #      
+
+ (
+Ho! ' < ;&&
+ 
+# (:
+/ KZ
+þÆ "   '  $ & 
+' $!
+¨
+ 3h)  :$     
+#  * þ¿
+   
++     
+ 
+  
+      
+ !>BI-  "
+      
+    
+ k   eT
+_   
+ !! ) (   51% 
+3'&    (
+  @@
+" 
+  &  þñ=
+ /  #/r. ? eY '(!1i** 
+  *
+ !
+?9-
+ý¦  3>@,&794ãE  ,! #  
+    
+-
+
+ $" %
+  ,
+   H     %
+ 
+ 
+ 
+F    F/  18    "'2+3%
+
+ 
+Ö ) 
+"7 ;C= Ì"! "2%+36 ' <B<
+" /+  $-%Q B*#?) +'!  >?a(#
+
+%+*;{P3qdJ   
+
+ "
+¬  1$
+ 
+     !,   
+'0 $    
+   
+)Å   
+¢5"&  -R !*'3V9  !     
+   Ã   IU')*N*"  G?    
+ 
+  
+) Œ
+      
+&06>z)"HB:$  /a2  0+!  #   +)">   "3JZ^]'zR20,  %.4 E€*-32
+   þ7     0    ''   & 
+  0 
+'
+( )Q0,
+ý™ H4'  (4!
+  B2+ ) c  B  
+   ! !D
+
+  .  D'##> ›Zt‰J# "#$L*?     & 6 0= "*
++egc)  #+?n-';   $,./*# !$.
+ 03-
+%  I
+@v?" K$  2 ?F+" ,5:   2    2 #  
+š ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ Þ
+
+endstream
+endobj
+126 0 obj
+<</Length 777>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /IJRJAI+STBaoliSC-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+31 beginbfchar
+<1C64> <FF08>
+<1C65> <FF09>
+<2571> <6B64>
+<2599> <5927>
+<2628> <7684>
+<26D6> <6D1E>
+<283F> <6D6E>
+<2841> <798F>
+<285B> <9644>
+<2895> <5404>
+<29D4> <6C49>
+<2B88> <7B80>
+<2C3D> <4ECB>
+<2E89> <5229>
+<2FC6> <5F55>
+<2FDE> <7565>
+<2FF7> <9A6C>
+<315A> <8111>
+<3169> <4F60>
+<352D> <795E>
+<374D> <5957>
+<3758> <9898>
+<3832> <5A01>
+<38D6> <6B66>
+<3A49> <96C4>
+<3A66> <7EED>
+<3D2C> <4E91>
+<3EB8> <79CD>
+<3ED9> <4E3B>
+<3F53> <58EE>
+<3F73> <5B50>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+130 0 obj
+<</Subtype/CIDFontType0C/Length 1093>>
+stream
+
+†7a«y¦©¨ ±ž„z–”¬£‹žÏ´e9cû2û3_û0÷wÐؼµ·ŸXf‹`ð¾ “‹¡ûW÷ -7ykZb¬¹æ÷
+To ‹ ¶
+÷ ¨ŽŒŽŽŒŒ“’–Ö µ¹—”’Ž” øÇù£
+endstream
+endobj
+131 0 obj
+<</Length 13>>
+stream
+€
+endstream
+endobj
+133 0 obj
+<</Length 409>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /LLLGUO+LMRoman12-Bold-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+5 beginbfchar
+<001C> <0061>
+<0022> <0042>
+<0032> <0065>
+<004B> <006D>
+<0060> <0072>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+137 0 obj
+<</Subtype/CIDFontType0C/Length 1888>>
+stream
+
+To ‹ Ö
+Þ º¢ŒŒŒŒŒž‘ ÑŒŒ’ŒŒŒŸ”Œ” ø¡ö
+endstream
+endobj
+138 0 obj
+<</Length 14>>
+stream
+€
+endstream
+endobj
+140 0 obj
+<</Length 509>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /ESNRQK+LMMonoLt10-Bold-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+12 beginbfchar
+<001C> <0061>
+<0032> <0065>
+<0037> <0066>
+<003B> <0067>
+<003F> <0068>
+<0040> <002D>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0054> <0070>
+<0060> <0072>
+<0069> <0074>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+144 0 obj
+<</Length 2034>>
+stream
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ
+endstream
+endobj
+145 0 obj
+<</Length1 115998/Length 115998>>
+stream
+
+
+
+
+
+
+
+
+ 
++YE°#B°+-, °+ E°CRX° +°
++YE°#B°+-, 9/-, Š Š99//-
+*P nk?Ãd1´
+B
+=#æ
+~Ï_ .. þÄ4v\d h†m’r6HþÏBA=Z N .E eš tq9<?{ þ‹kc "N^I“HQ*(" ¾$Ço1  ±ÆÛÛÚ
+F   *Û- §  ¦,.
+ÚQ<MMßäÇéJ;þ © B.Z–oO •áC üû %þ½Y <Xç¾i„¤ "_849Z"JC!*.^!6$vX7 u$›
+ Q E# #"S l/ý/ý/ý/ý/ý
+´+:’'+ä;( ,NmþÉÙþömlþö '/_KD  +;yo"1 $,_u67|? wÆ& a„P +ALs&n!þˆ(þìNH .B =)\þ"QO
+ /¢G!WÏ>0@"
+%* *)@
+6/ý/ý/ý
+"< Y3 “`c !`$4½
+A ‰þq
+
+xæ þ}hh<)_9 "/’(0ä-"!,J9ǦiIT(%þç…BF
+FÝŠ¼Z ­à'[œ%<U64O:˜ ý8}! 'BQ,#(% 9GZ
+9$
+6  c G% CŠLl! .þ¾D:þ÷ÿV|) ‚UHiJ|zv<<á* ŒþóÀ&5$‚" -·>&B4· X+Ä+ $è^R 3* $-@s `S31BcH7;9‹n C"(®:þù¡
+kïˆT[-*$J% 0 (þL+ © = 6-"
+ ++ 6/ ~58'm
+´ó*~ütÌ…R `ƒ.'+Q]""'>,• §`G4Ž '"()®[)
+!ZMa3%
+9'YM
+ÈI‹!#¶
+
+¦1U..· 
+BU {þä*"™þí .^u‰%0æÞþÂ i=
+œ  ?t D:Bfþˆ“L//8ªw Т "`W@( 8jY }# !!è
+Qþòh?=X LYñH1 "è’C ÕK ).W|
+
+„K’1 zˆ þþÄ™
+$y“ ´Q:/ø
+1 {n
+„»_Áò í+>
+;K"lN„$ [°7 ”—Gs%zƒ'† ‘Rs X5œ!b#þèK(H#OÃÂf ´&Q"'3
+™ }(f 8
+a…
+íB >X{ Ç(
+ °
+!
+
+©}.  4…MOJH 5 êeýð}*K$=ÌmV u35&Nýán0NM
+JIt?;#þäFE0D1þ¤s;6â†&27/¶{2J£Gýæ žFqA
+Kƒ›ŒQ2Y„?
+#'
+Uk+˜  -
+j"œ*Ù(!%;
+4 [An+
+*5v
+ [<JƒDýçÜ3ÉV5P
+#JN½  ™®? -ZKM  &+{,+ ¯ A
+ "þà$%%Y;2H9¿l)6'AžE*2Ív*/ %=éJÈ<S:)K9ÛL;¸ T
+M
+
+Dñ 8;
+K
+ Ù`5þž‘=i
+»þ¤• ©L +olJ$ ; 1eP)&þùp9
+L ³*(ÿ
+7’‘+ "?°á¹:f6þ ‡\(tSeD|6ˆ" ƒ
+
+5ß-+ˆy?@ mþpfD)oN©- Ѩ &SeF" 9B8L t) +#ù! *O &+L1 1%zÏ÷ž
+Q3À0ÃþD $ 
+ýQEZJ3æRz<"". 
+#þ*:bÓ  ŠL* ¯-ãþÙÄk>6V M$P§X.˜
+,'78EJv@KV$+*%F 'P)ŽV#7(*›#€(
+: C/ý/ý/ý/ý2
+—? Ç<K
+r ÍE 60*,h¢H+NO'•#l10$¬)7+Ž#/: TU¸ jB [—&þù $þ”Y>:*J*PG h½(þ×òA@DK L&ÝW3
+%%&?$!  ) 
++ ΆC OH V…‹"w3
+E KX!+!þÍ:<*%&? ( BTNVd7> ®!« º ;W0º
+8q7‹4" % , =Ž" q%m.dVþ5voþì0Æd )­ A9½d2IJVÔ<P€*0VJ8±‚+
++hF.%CÅ|34
+/VÞFÈ~(1c­8ìJ@Ãðù- %P ·l<0[¯
+ % EÏ6fþ¿(× “ þ= -
+%&‡ 6 i!  qˆ !)
+ s!A7 '.a7HS
+Ô&`4oãªôGì8lEDTZ™3·‡*·
+!B1p"#“¸f”r" ¡?pR /( Z-e; * • ÐH;(ºG<?0> .¼NB K^3#*3 "{ A]124F |¾WHm=¡e i Q!
+¤lf?uM3 H:;XlÅý¢›MYRBV#
+ 'ß/þþ[ˆé E,uG<XÉ@J D%þŽ%<ˆ®0U´ž!R%3˜^J ¢¹2'!,
+ <W›Pƒ
+²p¨|] 6c‡ˆº†* *-1/)¥†DO/MY=_]Áõ¬
+ # '
+/í/ý/í/í
+%±O3fEƒÞ»GS#€þ¼ÝC ‹¾sU#,0!“5½Î=¡.$;Rz»U z®ac ¯†T N 9F
+M/ý/ý/ý/ý2/ý2
+&"Ib-ýÕ ) )š)  õ" À̺÷-~ ‹& '!r984B"14b0! &ÀE/Q
+F|ü9É]U>59¤GFP9[F*-!F* (^
+-'þÎ,
+p‡ Œ_2J>/¶!U š-+*ä86@Š“zþÊþö êçÕU:=* ˜!#%I(.u:.H4S <BY wd|í;D C;$,2 !W?oJ !¶
+/í
+€ý¸0L4
+XE 0é"Ã.¥½> U€vm/ n¬Û­ck/
+$þ *  ýß×î$8þˆ0ÌV(*¨c+(**²j-%»-UéGýüPuVSZ/1ßKTO!0S!ý‹ ! H'& Æ %†% $ ‡ 
+ÆS
+3 h
+*
+2øs P¿P2tš(%„/ å-)þ´Fe\R8öµM$†¢Ç©£X&$/ÿ
+!emkkug
+ 
+/
+`1
+UHQBV@`!b(3T3_ /ý22
+( ? 7þ b Ó¦ U(‘ ):4 e ¹<' 
+;)†  ë#[˜ðT - šþú] 7þ¼\
+Ý~%=P‡'@:öV5e /  þS ]V!w_R6H#c  :Z
+$
+d6A 2)$2kœ9#
+i¢® Ae° $› þ?L?©
+&=H{#I)!÷   ,ÄÓ¶&G#
+sþ¨°I-e®q
+ª·%©%9D*;²;+ &çQFLéZ] þÞ
+ + ì0
+ !ãvj 7DJ]qêð‡# ¼àþ¶= (bf n³ ß@ e«!üÐ ˜þ”l ­'-@,F;S#(!Ö­i;B*;nJ ·#oo\?þ\M/;!WB_C VÉ+
+ ZZY[.a k/ý/ý2/ý/ý
+—97
+>½ :®() oL\FWDE]
+5GL ""4T:•0 þ= 6
+(Zz
+n£ w)S m-G$; *IB# =<WI D %>þ^.J;W]: &E™[7*r>pA #8@y.)³FþÁF=I/8ÞpL
+X×4
+)p_ Œ§Û[žS!>I [5 D Á ”IF’) ÜeýëN8K+=µ‹A Fý¯qf EE¯*"6(6Y5?.þò§QE ‹3Ë;-
+D( :B c V/ý/ý/ý/3ý
+ #3þETX Df  *
+"
+MJ
+Ñ :  ;j2 s‹O T(/AK"3?Z4B%Ö,Æ
+/. X ÓNÔ/*6(&&
+1
+‡/1*#
+ ý ‡uIvUN-&#ƒë€=Gp+zIlZ
+þ59"H’_ Ü {N Oš<þú2þ‚“L(01W; Òc\
+?=-
+p)=-% wM0- )
+i#!*G 
+@! þ¡ 6%i10V
++‚^YþÙ£~*ù0ºþ±}O-4 µ #þµ. !!M: žC4I'P k÷«~,j< œ†6 B"È.–-?;  ,)#3;-g[! '"
+U/ý2/ý/ý
+kk0g
+a&þš2¤ IÀ**þñ#57*(5:†L€Ë+¶
+%
+”‘}iþ«?¤¯LKm4j`xV e€aø %#Xq 7QK#¼}J…C 5KBD¼".l þ×"b#8#_-03†xp#p
+ |0 
++J
+-E pþt“S0?A¦€
+¿± %bz:8=*ZþzJ/14Yñ\^TJ! SËéó2X** þ(! °
+E!
+-/í/ý2
+n
+ss
+RS€;Ú "‡A.þ²#×#+¡Ï=&þéK@d`ýH b
+å*Œ
+üˆ KxžAM’f %=Y
+>4Åhýþ¶k fÀY xfÉ2a#%", 866b%}jE1%%‚
+
+þõ%  ,i i+8ÚÓþ»(OE £
+‰
+;e ÖXFH[3b-< 70.NFr3ý m%E/{ÄbCT*=$á( :þÛU5>b OJ L&í <w? Ép­1%_‚
+
+GCH7*F 1> 7H/ýÞ2ý/ý
+A
+xœ#î
+$ ¾§$
+™Ù/ Fd \$) þlà l Í%Xš+<rK'@4ü"K%MBçLXU#FþÅ
+Ûç!  »ÁV# Ž®Ë5•
+M!þ
+ŽY;r c%€'*S=MþwºE-9D¶/š9¶"'9=¥Q?(He n
+ #5Ó3þ®“A:XOOc{ %A¤(h
+O -_€ð.): ýÔ1% »
+
+ß
+  ´»K y­ºA(tL9 Ìm8 Z9A!x pF uÒ4=
+`Õ?€4! þÇ–T6V
+MÄ= #(P,
+8[½}&G5E’¤%Y
+„M1Bm*P=&CK O
+þ~*³½+@I w$L C;
+…¦€_£ŸX1 /(&9 *,Ekfã+œeB[P'%6‡ " x|
+$}79d "ól! +C…!Î"%§Õ' "×"+^P 4:c `i'ýÆ Î›k x N.>;rA :HKmY
+C†
+CF%,”i6Ć Øm ¨þÛ¸y0%RG%/’-Ó+2#-!:F»§vQx±j<G)Aˆ´S
+:pO !<` #nk :m!CRI4MT
+$ %žQL.¦
+ý<T6 ,0a+‡
+$!#-(e/SA-
+Ö )J \‘ 
+c01Ÿ‰ " #[+â+
+ ò[¤þœþÕFþ¯?õ $`xhˆ
+ TƒÂ4;$%% !0 m=-2L @*M; 4&:* #$Y 6:2a1>L$)) '}1#I D ì$R"— A0 5l%f+!BO
+(8¥ú
+P
+8 X
+x0 
+
+þæ $  êe<Wh &©¬ë|
+- 3 F<s('Ei.AP7XQ1#"Z{*>Dlo/©O£þå$(£d=*ª­=#73‘ 0AþæHz (/†,‘š5[öV )+*^ ¨
+þç )$d !!b%3ÿH Qg6“)! , h/¸(ä) /5¿%4"+B  ?Zø•–kÌÁeN+. ° &– *)-7<SRÙd##E3þ¬×0G*#%!$‘&:)y*- þ´)¼§$Q
+AYþ$ Š4,#´U %&þÝ^
+'9
+-[)l>AG
+ýʤuA KwX ,# ¦l61$,
+*D658)B
+B>H C
+
++<
+4/ý2/ý1#"'&'7654''$7#"/6/&'777ñ(  EJ { þLL3â,þš. Ñ)¤¤Á&9þDZZG [&KÍF6%)5$Ì)$€&0;?‹QL ³
+`))±#/ S l
+ùè¸) 
+P*
+
+ 
+þà # !«.
+#ĺ}ÂHš2Z†R
+ - 7>wAÁ )9V ' D% *4Y ")( # 7& >A7%‹' ƒ N,(U ' :2Ô&
+–a:+¡¤b7367B4
+'$ k¡?³uK
+'(6.^*®
+F ¼0(þí;' )"'ž9+þ»•.7HKýè) MþÙ©N$lßfÉ<žÎ( Ô&"<</A#ÕTL!@1B#´7/ Š$š
+*? /ý2/ý2
+,GE`vÞþþ Ó±,þ¾£+4 J­m}Ï.™®.Š ýaþÆh Ž+;ßEMW"+&&¾ ‘V98 ;Z? j#i dwýë:< 2ÍVHŠ
+
+" %Ÿ$‘
+BK±DA?#,'
+Hô!¡ ˜‹ —Œ ™ ›r
+CÎ Ä
+
+! Æ8
+ /ý/ý
+=×+‹2ê!¶&ô{ "I(— % ã()þÂ3w / e(©•)þ
+V Ê©þÍ`B3;9+=7'2ƒ$Ê$D0&%¹¯‚_¨ e2*
+C35!
+ (1 # !
+:07 þHmCU $\F:# S 37€ ^ +
+\ ê"‰
+ý¶<V"%%':*g #% k(9. 8'
+'m”
+H'w,,Ü CB(“ ? u+) Çt"T=„ [þgy3I2¨ùÆ… ¦ã
+5Dpþ›}0E8¦ìÖƒ Iàc"I]O&8)oA HcW :<HBãBA
+ ,« #ž”6 ¾* "/ 4; _&Ÿ XG K^?(1:, þ­0  )”Àa‘^ Ó72%Ž¬ÿEA~/
+z;=Nj7>\¼`V‰" ¢„63 <?Î$ )Ir7 >²U $,þ—!-ÓzB& =%FÆ4A2"i „ FYƒ hþú
+^(~g}kÂ(£"#Š
+n ,G(L
+b%2'X+ '(í4Š
+#þ15, (”þµjO/:æD.38«7+ £×& '¿k=!)‹=% (&“‡1 J¿Y$
+'5(,! /í
+ÕCþåB3~!>
+>£N
+þ/7ý*½+ ‹»QNH UT04%"Á83E‘Z))1/0þáÍ3( 
+N /í/ý22
+S'—.1K
+qþæ(# y4,Ý
+D(
+‹!Éþ·T;
+ÒþªX xD
+­*S €Ê6@
+>,þ†fD
+  tl9H I1d # $9\ &ˆI->!&(Bb ‡ žU#h
+ž¬Ou
+
+ MQ
+/3í/ý2/ý
+*(þ‰
+©\+þëMq}^þ,_ @jž(C}Z $A4#X !_ "iZ&? =T"_Y
+&"Jl;í/¯
+|¶vt
+Šy -ªþy) r% "“
+šBlL âýÄEBI
+@q3_YO8„°Y yý›>V(F%þÜz=HAdÝMRGœ
+ ¯ @
+ mD% ÈmJCþf ŸH!†±þº,-ËV)%¤c,
+ #ƒn, 
+\wJ#
+c
+[ÿ:+
+"H&-¤ÓÕ1 \Þ¥ >»o*@F‡ZþÝE9ø ¢[ X(S".[ \ 8) r?4L, >Ï…U>1½ÎÉf]%'{ ýÛ'‹  „%œ )eO04u
+ B]‰#ÿ
+º =n7§+ &à  F  ïþã×cce)Oï¯p\a cPÍ94‹ @^eœj´,H.KmWWb‡ =*v>þ¤Q¨
+ › !# — .$?4þÂ Ì2 .%h $gÐ87)  1;
+R¦O|C!| "
+ £Â
+b4{7 4ª  #Ÿ(¢3 *1W +*ÑI14 /{b8; [( u (3,% -´.C’ ^Õ" $(þñ#<97 4kþT
+
+V:€5=1Yó2<CþÏ9c
+ A3ì<+. sz.5mN)'‡
+Hdƒƒ
+=  1Mm +
+gM ± Ž
+QpTsv'kRˆêD @NS4)m d3ýæ#HA9K€dS éP
+ þº0
+aétJAB ?qņ(µ
+ C
+ÖS´Je`
+
+>D
+/ý/ý22/í
+ þŽ (
+¾µ$-ø  )¶h2 Oj l„ / "RQ+õš!)â+þ–² âF7C… ,‰F(9š p` wã>F$9*% œ#§3¦¢
+D É' þù È,þõ(EE
+=0O€ 
+iþá y6 z þš / AœY<^)gJhI QpOl0II  px" 2jK.9JF6FaL<]E;).¸8@r ƒ+{ þÑ2‡ þ7@
+/˜
+/62!  !sFG&(ýw‹&)\v—k †kU ´˜R= nQ
+³Ñ‹‡š
+2!L’'º
+‡/ý2/ý/ý/ý1#"'&'7656767#"/6='75'75'>54''>54'7?7'7'?#"/6/&''>7'>77'.7A^…0f9j'2"q/!ili:EZ$ QT - ƒ")'/vS“#u¥­ (y+ ”%  0H Ro ^,Œ–$Rva1&þml:B> =E§m p ŽC99O
+o mjÖ°< W¿ÉD,,l¹@ A%>** 6Vq//'…( H+ Œ+55%%ŠCC U¿J þä²
+ 
+:
+-/í/ý
+±",¬< 8‹u!þLK” þÀf&2? #"!þ±à
+|‘> B  VG`Zý½ f Ò‚'0  ƒ#*É$  —¡¶êVVè4Ù% = Ì-¸™^ ŠL¤
+þ±C % #%%ý®
+/ý2/í/í
+þìê *Ú%þ•þÿF(DHfQU'$&å#þë ‹
+Nb ;/ý/ý/ý2
+2:8ýñ (&þ| %n0 ¿
+n sK qœþæ
+
+8a1 þÞ(r}«ý
+ Xb_KCþÊþüéü-~
+–4Gn.>>
+8#~%#.(Í'^ ›V}&-p@ þg NT4)
+™, ?!x'.`<aF>OXF©
+H/ý2/ý
+9R[½ªXIJs2Ì :3™ 2$IA*uE½0 ø+ (ÕÓ
+²\#
+<:ˆo p0Y‡
+'^A FÌ.4>)ÍwA£9>{*þü>1
+LM1ap$þÐ
+! /ý2/ý/ý2
+Â$ ” 1å @È
+<-b
+þ0$), þÄ&o¤ Ç‹¦j5Y3 "wõ"Êþñû{P6O1 `*7
+ (HI 00: @X 2c ý 30/()žC
+?3€1!kˆÊ ,T9?)! é´
+DC); J5 /ý2/ý/ý/ý
+CU´#* þ`Z“ó
+÷ï)൞ơ·pP AZÒ“P8sMI+2#(1 B_+, #%^,r93¢Ò(%,;
+£¤¦
+/ý
+%J @
+/ý2/ý
+BS þmxE¦¶'x¸
+®dp .æ 9£)$ÙE2>JHý–z&: Iƒ
+7\6&(-%z ª1KO `'y:`L ”($n þþø`$Ic®¼t €± %ˆ1 I_E;®þ6A 4©
+) r & *
+
+? ‘›8 k7& ­}yK’^ ±k+aY
+²Z®(*(--Q 0Ã~8 ÙƒA1A‹ D3Q£?BJE[C5&,X'Bn
+   -&Dnn‹
+º-— þK$oþÏu0G_ïvM´¥- '@9
+ e#þS !† !#œ¤W†]Ù
+3îþlD^SL
+Q Io!&ªh97 ? w þ˜7K?c>f4IQG)þUc² Ú
+ 0¦
+%#9 E # /ý2/ý
+þ¿
+  +þܶ è%ÁþT(†4
+wŠ $ .¦þöD.©}, þ¦¡,ä]‡v8#­&&;5‚3?F$B`b#ýÓ4Ö:…" `Ì8 7
+EL%* " ~ Ž*%
+þï£?%
+þð’
+ !0- %PD :E"+1 ;. #
+
+þì% ±,épn®D.',   %=+  gÄ)Éþ¼Î)! þëÜ þî7A
+¦ »,%`8' šv78!6"'Y
+G\
+TÊE?
+Qýð‘D&<%{µ> .eR&& 06'/9:(#$ » 
+-)9#1%5"v4
+5­iª%þÍ@'5!!//#
+447i
++ $c *5<\%*%*³„bHþ Mz5&&&þìv(/2 &.K W
+S $E$E/3 ][ !tF@ $Dý.0c#6T'l-C.. -'&7H³þ Ã0R%t¦oRX(&8AE%& /@5>H 1.{
+@X oJ
+¡˜© (†€–r dj .Y• ô !$`(#)nþú{ Mûÿ|hI96þÖOH{þx3RnI¾ça p!G6N#7;.Bp
+4 % /ý2/ý/ý/ý
+ 8T,&/qµýå0c
+ES
+/ e32g$‡@ t€ZC
+0 
+MTo›l4f1^  225s49GT ZÄz""$ºC0ºÇ)47¯ 4;;? !ý3Þ~l `Ò:
+6 J&ì!&l t0SœW/$ <l‚;)'‘-CO
+0+{
+>
+ 8(! )'¿[)TNþÙþÎÆðÊ&‘pj7Ö
+Ò0l1.Ò _/ª 8 *! b 6& Ý2S>"%
+yyIGDG^xF6F [_ %G V$ ,h Oj0$ $c t!Y­ D 3z‡x€–#9(H$6 %9
+3- 
++
+PE7©"bTxz ,à *8Dm…fPÖ Î3@o€>+é
+0dMþÛ(h9¼ ™ [z "ÓžW v…E9DR u: o¹5A7$&)H@OP ëL117 @?Æ %?. )*Œ 0V# –U†6*kd
+‚4 B
+ /3ý2/ý
+$h­¯xbý` z @Y,'BN7} !#(%8N%7R „ !66+D{ fz" [V+%#a !]1 ¿>d !
+ 5 $!bnJ5D8r
+  ;
+*ae*#u9¬
+¾h$©k%"º…
+W:´ñؼ¾-R!2J-»þVü6*i--Ù”1*¿!,ø—+-í1Õ*~ "-ÐS;(? 6*KÚ; 3" RjY`Œ+Nz¦M_! y
+%ýy $o "f##"f!p
+)]b
+…  2F 3þ“T0‹5u þB40E6 &3—DþÍ5 ð
+M8ýã\=H&rœV 4‰<Áð"'$ýß,4ZC†Ù ˆ'( i«
+å`I0E%8 'œX,{6+¤#-.5^Tþ3þô4D}:1$- 2Ž((‘a#J -Èn*Pñ7b(#·ü«ñv‚«V >_D, "1%.;lONY:ÓŽ$"
+‰aPa hH"®r {
+9^t ™=æu.3ÖmV… %2 ª 
+K €0)Ô [
+"M*mD K oYB^Q~QH1BJ{†„.;ÎVD9K 9M™I \Ž# ™*=M5 £x^[
+Avm k~iLA
+])S€´ $
+
+ O¯V"'’Ǥ ´F01{90¦(2ÿ
+/ý1#"/654'',7"'.'7qþs& 0¬q;Dj!#qw®$Hþ\+H-o„r *"þ‚%6"QJ
+*:aV†cÊt
+m™ \a@1£¢6a#
+> ln 4#,Q˜*â 8ˆ
+eV5Q;þ¾P& 2
+¡µš—¤“sà7&De ‚ˆ ò0vj7;: 9<VOV+f‰rK6OKBZ cb //C95 lÂA><##
+f% C  -Fm06OqD,‡ 27/Ne4  Y&ýêc<M"HÇY^ ó9
+~ NsŒz€  s‡
+(H
+7ýà_L>cD(X­^[!þÑ “ šõ2þà 4Æ 
+¨Ÿc¨
+¢]F/&! 7,5'' * ,M{m/@6+Tþnc/H14Ežw ʨ""I> : PO-š
+Ë-%'"çM`ýÇÇžS_ŸX; .!´P;L7BKz4 ":JaT
+¤þ '%'/>^ÁoCÎz BþþÀ7Ô ;€§YW#ˆyß–u _θþï¦è
+(/ý2/í/3ý
+tc q$8ÏG8P8(
+U2#zr 
+W.é S7TÕl†Çl Þ &J8 ¡|þþúu%9.;à¡ÊW
+bµœ$}v
+ # 
+!ñ w|OZm Éqþö
+Di¯1 P«%
+06E >/ý2/ý
+(g& $^&#VI%x@*>"!Ÿ
+d.
+Q‚
+©3g&/½ C
+ J'Ò$#- &1n(+ ×O2' ¥¨.þý_ º})EDMp 'y #x C9)mþª;GB?† Ð )`i= : <#U SŠ CBi"w !{n'¨
+
+B/ý22Þ2ý22Þí/ý
+{=;-¶iH\®(è 0f }þ°þ€<ßL"0žX &  í )“n%¢ºJp%P\e_&å5<iþŽl%OM Yg7"€
+7§ " %/%‹")þ}‡ %>† #€ A8=»08M##,Æ 4 j  p {ki€r †
++   '/í/í/ý
+þ”/Å+ !
+þ¾% W&Á`/HE%þ®1 ²«
+ÐJ¤
+ð
+p+* ìz< !è ï1M<&1¶'\E v** þÅ0*ªÍDfÜ”-þN"7N„
+
+*W +=E[`JLýbzîƒ)l%¢+åø% jK*ßS&)¢ 6 b&£¥)}¨jGTcS CNN! +'- !T@A9%* ýð™) *"% $'#'þ߀3R‹"B3>- $q
+ "\+ .>#q
+ ˜ ;7 )Y „G"Ç#¢þþ +00 âÞ.Bfý¹W9KÕ`Fþ>!s¨XP_
+quß $,k3Gž
+'",*x”!$
+(Tgá_&+­h')· $
+I11«E(1ž¾"_N HK Â2 "ýâR9` I;O=« !“!ÏMJ C1=Ÿ "“ "¬±þŪF P¨ËD>Y5
+F/ýÞ2ý/ý
+
+'  3
+ýÇÞ'§* ó ¼»°C% þ
+ ý0<x+¥Í * %ý߇RGLT)-PNS&%"ýg"F# >(+
+9+"- OA qa+poL5  D/1.þÍ:Oa7T§%L
+
+,/ý/ý
+þò* =Ý+OA §-='6?*
+?áF-.
+Vó( … ¢d&$.
+c/21h½þÐ{u9+&UK"$2”#,á*#+JHÈbHØ #b2• ß + .1A#< B, ( &a<& %ýÅ<3 , >W){ !%(&
+5N ""1- ="
+A 7-þû
+u-
+k˜ÿÎ{)"ĉ!Çäþ­,* SY †… % {b99 _ "0S38 b!_&('þr ²VQUi·F+ýÎS#A78¦iOÚA
+WІ<Ð~"_'² &"²%&eW41-cþM‰
+^$ZG .^…?P'¤w|UUªN„’¦
+ ú()M Ð  õ*þÕ
+îA$þ®¦(˜/€Ÿ—¯†~žšþ®Û þíÜþêÙ$þè0( OC2 F
+!1- ##)`8C&#L +!E"% 'þâ ­ o a
+n
+ n mÙ<8
+?D
+- 106 /ý2/ý/33ý22
+ G ç*õÛþûã \¥þËjP)6Ì ,E=ž+HR‚T-8¢0RÒÒÏ
+þc„'o-'Ã]F,^L+ ßX8. »»=ý}‡7.O“±#• ž'‡ ýN$ #Ø #!"Ù "þì_} ý÷D' .Ä
+}=CHC3S(Œ!%‹"#¥F
+#/ý/ý
+zÒ‡1‡$rþå4m!+FXëAáJŸ ¸hl09N>%•'-1)þVB@h{4W EŠ40&G9 #%“"%&"6B]
+(yY- :F  G ?/ý/ý/ý2/3ý
+uI
+w‰št=u dD2)% -œ&Ø(9KS] w"/3!tHJ,HI Ss#ü ea*B#.K_*< !6þª ] ? `ušZ[ Yk(B,&OU
+&#%z*\9
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R
+R        ´ ´ ´ ´ ´ ´ ´ ” F F F F F F F F F F F F F F F F F F F F ø ø ø ø ø ø ø ø ø ø øààààààààààààààààààààààààbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222ššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššššÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔd¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŠŠŠŠŠŠŠ¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾............¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤TTTTTTTTôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôô¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢LLLLLLLLLØØØØØØØØØØØØØØØØØzzzzzzzzzzzzzz p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N!N" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " #
+B
+B
+B
+B
+B
+B`B`B`B`B`B`B`B`B`C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C CòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòCòDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀDÀE8E8E8E8E8E8E8E8E8E8E8EØEØEØEØEØEØEØEØEØEØEØEØF~F~F~F~F~F~F~F~F~F~F~F~FòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòFòG4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4G4H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"H"HrHrI*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I*I|I|I|I|I|I|I|I|I|I|JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤J¤KfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfKfL>L>L>LÊLÊLÊLÊLÊLÊLÊLÊLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäLäMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHMHNNNNNNNNNNNNNNNNNNN„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„N„O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O OÐOÐOÐOÐOÐP¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨P¨QQQQQ^Q^Q^Q^Q^RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRªRªRªRªRªRªRªRªRªRªRªRªRªRªRªSfSfSfSfSfSfSfSfSfSðSðSðSðSðTØTØTØTØTØTØTØTØTØTØTØTØTØULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULULUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄUÄVBVBVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎVÎWª
+
+
+
+
+
+Á
+
+
+ HHÀ¸x…KPX±Ž±
+endstream
+endobj
+146 0 obj
+<</Length 2294>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /ABFWKB+STFangsong-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+100 beginbfchar
+<1BA2> <3001>
+<1BA3> <3002>
+<1C64> <FF08>
+<1C65> <FF09>
+<1C68> <FF0C>
+<227F> <628A>
+<230F> <4FDD>
+<231F> <80CC>
+<2334> <6BD4>
+<234B> <8FB9>
+<234C> <7F16>
+<2350> <53D8>
+<2356> <6807>
+<23F4> <5F69>
+<240A> <4FA7>
+<24C3> <9A70>
+<2599> <5927>
+<25A0> <4EE3>
+<2609> <5355>
+<2619> <6863>
+<2620> <5BFC>
+<2627> <5F97>
+<2628> <7684>
+<263C> <5730>
+<2647> <70B9>
+<26CA> <5B9A>
+<26DE> <90FD>
+<26EA> <5EA6>
+<2702> <591A>
+<27A9> <98DE>
+<27C7> <98CE>
+<287D> <9AD8>
+<2895> <5404>
+<293F> <5E7F>
+<2956> <56FD>
+<2957> <679C>
+<2959> <8FC7>
+<29BD> <6D77>
+<29E7> <548C>
+<29F6> <5F88>
+<2A80> <82B1>
+<2A87> <5316>
+<2A88> <8BDD>
+<2AAD> <5FBD>
+<2AB9> <4F1A>
+<2ACA> <6216>
+<2AD2> <673A>
+<2B48> <75BE>
+<2B60> <9645>
+<2B69> <52A0>
+<2B7A> <95F4>
+<2B88> <7B80>
+<2C23> <8F83>
+<2C4C> <8FDB>
+<2CC2> <666F>
+<2D07> <89C9>
+<2D75> <9A8F>
+<2D99> <53EF>
+<2DBD> <5BBD>
+<2E42> <6765>
+<2E59> <6D6A>
+<2E7B> <7406>
+<2EF7> <83B2>
+<2F22> <6797>
+<2F40> <7559>
+<2F43> <6D41>
+<2FF7> <9A6C>
+<3087> <6BCF>
+<3088> <7F8E>
+<30BF> <660E>
+<3132> <9ED8>
+<3145> <76EE>
+<3160> <5185>
+<3162> <80FD>
+<3169> <4F60>
+<3170> <5E74>
+<3373> <6D45>
+<33B8> <533A>
+<341F> <53D6>
+<3423> <53BB>
+<3435> <786E>
+<3441> <8BA9>
+<3449> <4EBA>
+<344D> <8BA4>
+<3453> <65E5>
+<345B> <5BB9>
+<3465> <5982>
+<3472> <82E5>
+<34E7> <8272>
+<350B> <4E0A>
+<352A> <6DF1>
+<352D> <795E>
+<35AB> <65F6>
+<35C1> <662F>
+<35D3> <5BFF>
+<369B> <7B97>
+<369E> <968F>
+<36B1> <6240>
+<3721> <592A>
+<3758> <9898>
+endbfchar
+38 beginbfchar
+<375C> <66FF>
+<3762> <5929>
+<376B> <6761>
+<37EC> <900F>
+<382F> <671B>
+<38AD> <4F4D>
+<38B8> <7EB9>
+<38C4> <6211>
+<38D0> <65E0>
+<3972> <4E0B>
+<39A1> <50CF>
+<3A0F> <5C0F>
+<3A11> <6821>
+<3A32> <5FC3>
+<3A3C> <5F62>
+<3B00> <8A00>
+<3B25> <6837>
+<3B9A> <91CE>
+<3B9D> <9875>
+<3BA5> <4E00>
+<3BBE> <4EE5>
+<3BD5> <8BD1>
+<3BE7> <5F15>
+<3C6B> <7528>
+<3D13> <539F>
+<3D18> <5706>
+<3D28> <6708>
+<3D2C> <4E91>
+<3D31> <8FD0>
+<3E88> <679D>
+<3E97> <503C>
+<3EA0> <5FD7>
+<3EA5> <7F6E>
+<3EB2> <4E2D>
+<3F42> <6CE8>
+<3F74> <81EA>
+<3F76> <5B57>
+<3F8E> <6700>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+150 0 obj
+<</Subtype/CIDFontType0C/Length 2023>>
+stream
+
+")ûûí(÷˸­«¤I@÷y‹‰€z²[m^u`^g¥±sq´ˆÄ´°Ç¨¸ª ±¬Á®µ|^ª–z‹‰yøˆu§ù¤µ½ ½÷ˆ½ø]÷<¯€¸eµx {•K³Ó°¼¿Íç2Ä0':A.y^µ\–°r¤zQn5S(!ñHô÷êÞöD÷ñRd[OhûÛ]©‡­œÈ̵ÒÔËWC üA@W95CÉÞÅ«Ëàº÷=§xºmN÷Æ‹ªøª÷4ß“¡÷Íçâ÷ùù°f¬VE6V!û<lÚûØ^€‹Hl÷Ž³º‹ˆ³ªvA‰–¯÷Ö÷ªû ÷ã»»·Žš‹„š‡y~rt›w¦¨šŸ£øˆûb¢÷RŸ¢›¢÷‹¢¢÷3Ö‹Ö‹Ö€€øyø(œ«dw_…baû€¬aaŽu.FF>_¡e¤v~|yjhl˜eªwOzk`cCîT÷÷
+ó¾Ù®}¾X§§VQ‹Nr`‹Œ„kvª«‹¢œŸo²´ˆžèÐÐØ°{°r¢­¯¯€‹’‹ŽŠ€‡†€z˜›•ž’¢ûDû
+To ‹ ª
+Ð ¡ŒŒŒ’ŽÈ ¤´Ž‘‘ŽŽŽ‘
+endstream
+endobj
+151 0 obj
+<</Length 16>>
+stream
+€
+endstream
+endobj
+153 0 obj
+<</Length 511>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /BMTVZW+LMRoman10-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+12 beginbfchar
+<002F> <0064>
+<0033> <0038>
+<0037> <0066>
+<003B> <0067>
+<004D> <006E>
+<004E> <0039>
+<0052> <0031>
+<0054> <0070>
+<0055> <0028>
+<0056> <0029>
+<006B> <0032>
+<0079> <0030>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+154 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 120 0 R/Font<</F1 121 0 R/F2 127 0 R/F3 134 0 R/F4 141 0 R/F5
+147 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length 137149>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 91.073 121.179 cm 0 G 0 g q 1 0 0 1 -75.028 -229.646 cm q 0 G 0 g 0.3985 w q 0.94574 0.89465 0.74782 RG 0.94574 0.89465 0.74782 rg 42.4179 56.84483 m 37.80672 56.90538 34.0524 53.98972 32.91397 49.78728 c 27.78508 52.36385 19.78288 45.43953 21.29674 41.2492 c 10.21541 36.21114 18.28418 24.85426 25.62633 29.417 c 30.41916 32.88976 28.90836 37.82791 23.64926 37.92177 c 27.05237 39.25699 31.87247 37.837 29.6804 31.56363 c 28.2786 27.60947 19.46498 23.86119 14.37544 29.60472 c 9.83998 33.05023 0.07567 25.50523 7.40572 19.31058 c 0.75085 5.13797 20.14017 0.07567 24.28204 10.45459 c 26.56189 16.99136 17.06403 21.30885 15.87718 13.45805 c 12.74655 19.2349 26.04416 26.02599 38.21243 15.19595 c 44.94601 8.1596 53.13289 6.7154 63.94778 9.58263 c 53.17224 9.1981 45.16704 11.5052 38.72412 22.39276 c 26.55887 19.74959 29.78032 34.40663 36.41702 34.44598 c 38.821 41.8608 48.61255 43.99228 53.37207 36.22626 c 61.5226 40.45291 72.80983 30.16484 64.40497 21.88713 c 73.08232 15.94682 82.32887 20.8335 86.825 25.58698 c 92.57759 30.34953 98.54214 30.67651 103.9072 27.67305 c 106.2567 25.85341 111.81554 23.02858 118.27359 22.54112 c 114.54953 23.9732 111.01318 25.64148 106.34448 29.97409 c 100.95218 34.31277 93.55554 34.31277 85.52309 27.86986 c 71.82584 20.92735 70.32408 38.1761 79.71295 37.02255 c 83.41278 36.16875 84.43614 32.84131 81.80205 31.64537 c 82.41971 33.9222 81.32672 35.5844 78.53821 35.46631 c 71.98326 32.99571 77.30292 24.50003 85.20518 29.38976 c 90.3583 32.80498 87.75752 40.53769 80.73026 39.89583 c 84.36348 45.94817 76.44002 52.01566 71.71078 47.87076 c 70.82365 50.06886 67.79294 51.4192 65.38594 50.22932 c 62.72461 48.50052 64.28688 44.59177 62.70036 42.63286 c 55.23409 32.59001 44.06494 45.78165 55.21593 48.71245 c 46.29636 42.82967 60.39934 35.76303 62.18565 46.03598 c 63.31802 53.53253 53.85347 56.36646 51.26782 53.14801 c 48.26134 55.69734 45.1852 56.80547 42.4179 56.84483 c 45.47284 38.8422 m 42.51779 38.93605 39.43864 37.2466 37.37376 32.78378 c 31.36682 33.18648 30.64018 19.2803 39.5113 25.07832 c 47.44083 3.7846 80.17618 10.45459 91.17577 21.07874 c 94.50322 24.21542 100.22252 24.42737 104.87909 21.72061 c 109.08759 18.38713 117.52876 18.55669 122.47905 21.8387 c 118.51276 20.83047 113.86528 20.92433 107.4375 23.9732 c 101.09146 28.08179 96.59836 28.99918 92.184 27.09477 c 87.84532 24.71501 86.24065 21.91742 81.83536 19.3893 c 73.76657 16.06792 66.9573 16.89449 63.23627 20.77899 c 61.14717 18.0117 52.20035 20.68515 54.27734 26.23793 c 56.26048 32.53249 63.05461 30.08914 61.55287 25.98663 c 60.71118 28.85385 57.76524 29.44424 56.34224 25.70203 c 55.59137 23.68256 60.6476 19.22882 64.38376 24.61508 c 67.96553 28.44511 61.50748 38.4274 52.82709 34.2068 c 51.25874 36.87115 48.42786 38.74834 45.47284 38.8422 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 217.016 171.717 cm 0 G 0 g q 1 0 0 1 64.913 -230.885 cm q 0 G 0 g 0.3985 w q 0.95187 0.90657 0.77632 RG 0.95187 0.90657 0.77632 rg -102.95819 58.14108 m -99.14987 58.10344 -95.64264 55.19502 -95.22862 50.38074 c -92.14911 51.53383 -89.62048 51.23271 -87.97809 49.93933 c -86.31857 48.63225 -85.56923 46.32945 -86.03801 43.58186 c -86.03801 43.57501 l -86.04143 43.56476 l -86.66074 41.89497 -87.56064 41.0635 -88.61795 40.69739 c -89.67867 40.33127 -90.87967 40.42706 -92.12517 40.56735 c -93.36723 40.70766 -94.65378 40.89241 -95.87189 40.73502 c -97.09001 40.5742 -98.23969 40.07806 -99.23883 38.83598 c -100.27559 37.21411 -99.8171 35.46907 -98.78032 34.5281 c -98.26364 34.05592 -97.60326 33.78902 -96.90866 33.83691 c -96.21748 33.88483 -95.49208 34.24411 -94.83513 35.05504 c -93.89075 36.36554 -92.0362 37.51865 -89.91817 38.29538 c -87.8378 39.05498 -85.50423 39.44505 -83.5128 39.24316 c -84.44691 42.23714 -84.16977 45.36797 -82.67792 47.63655 c -81.16553 49.93591 -78.41792 51.34221 -74.51038 50.80844 c -74.50696 50.80844 l -74.50354 50.80501 l -71.56775 50.18227 -69.92534 48.63225 -69.24785 46.84613 c -68.57034 45.06345 -68.85434 43.0515 -69.73714 41.50148 c -70.61993 39.95146 -72.11177 38.85652 -73.84999 38.92494 c -75.56425 38.99681 -77.49066 40.21492 -79.2973 43.16783 c -79.80028 42.43561 -79.95085 41.36461 -79.7079 40.24573 c -79.45811 39.0755 -78.7909 37.86766 -77.70622 36.9883 c -77.70279 36.9883 l -77.70279 36.9883 l -75.35895 34.9387 -72.7927 34.53152 -70.04851 34.9866 c -67.30432 35.44168 -64.38565 36.76247 -61.38826 38.1722 c -58.39087 39.57849 -55.31136 41.07376 -52.225 41.86417 c -49.14207 42.65115 -46.04889 42.73329 -43.04123 41.31328 c -42.67853 41.14561 l -43.07545 41.15247 l -52.45769 41.33382 -57.26855 37.83002 -61.40536 34.75735 c -63.47205 33.22444 -65.37108 31.79419 -67.58832 30.99352 c -69.77478 30.20311 -72.27602 30.0423 -75.52661 30.98666 c -74.92097 27.29126 -75.79008 24.61209 -77.38458 22.87045 c -78.99619 21.10829 -81.33319 20.30078 -83.58467 20.31789 c -85.83612 20.33841 -88.0123 21.18015 -89.29886 22.73701 c -90.5854 24.2973 -90.97205 26.56927 -89.66496 29.3956 c -89.59311 29.54956 l -89.51442 29.40242 l -88.54266 27.66765 -87.42377 26.76433 -86.36647 26.43584 c -85.3126 26.10394 -84.31006 26.33661 -83.56413 26.89093 c -82.81477 27.44182 -82.32207 28.31435 -82.28784 29.26215 c -82.25363 30.20653 -82.6745 31.22961 -83.77286 32.09187 c -83.77628 32.09529 l -86.27068 33.81982 -89.4323 33.60083 -91.78983 31.8284 c -94.14737 30.0594 -95.7008 26.73694 -94.95488 22.23402 c -94.50665 19.67462 -93.32617 17.77559 -91.56743 16.60194 c -89.80869 15.43173 -87.46825 14.98009 -84.70012 15.33936 c -79.16385 16.06133 -71.93044 20.03389 -64.32747 27.91058 c -64.32405 27.914 l -64.32063 27.91742 l -52.0026 38.04218 -41.28592 41.47752 -30.96616 39.65378 c -20.64638 37.83002 -10.74062 30.75743 -0.02394 19.90045 c -0.13684 19.77042 l -9.67648 26.86354 -19.07239 33.6282 -29.03632 35.65382 c -39.00023 37.67604 -49.5424 34.97292 -61.42245 23.08945 c -61.42245 23.08945 -61.42245 23.08601 -61.4259 23.08601 c -69.39839 13.4198 -77.50435 7.644 -85.20311 5.49863 c -92.9053 3.3498 -100.20717 4.84166 -106.54066 9.69016 c -106.54066 9.69016 l -106.54066 9.69359 l -111.51237 13.74484 -114.06494 19.8457 -116.8707 24.74895 c -118.2736 27.20229 -119.73807 29.35452 -121.59262 30.80533 c -123.44376 32.25954 -125.68153 33.01573 -128.65839 32.68382 c -128.65839 32.68382 l -128.65839 32.68382 l -129.72252 32.58801 -130.51292 32.05423 -131.03645 31.29462 c -131.56339 30.535 -131.82 29.553 -131.80289 28.57097 c -131.78236 27.58896 -131.48811 26.61377 -130.91669 25.86784 c -130.34526 25.12534 -129.50354 24.60867 -128.37437 24.54022 c -127.32051 24.49918 -126.6259 24.76949 -126.2119 25.18352 c -125.79785 25.59753 -125.65414 26.16211 -125.72943 26.73694 c -125.87997 27.89005 -126.9065 29.05342 -128.34702 28.99525 c -128.56258 28.985 l -128.4086 29.14238 l -127.64899 29.902 -126.70119 30.3605 -125.76364 30.2647 c -124.82611 30.17232 -123.91594 29.5256 -123.24529 28.133 c -123.24529 28.12956 l -123.24187 28.12614 l -122.26328 25.79599 -122.67046 23.79431 -123.7996 22.37431 c -124.92534 20.95775 -126.76277 20.11943 -128.63786 20.07153 c -130.51292 20.02362 -132.43248 20.76955 -133.70535 22.52829 c -134.9748 24.2802 -135.59753 27.03122 -134.9303 30.97299 c -136.8533 32.52986 -136.91487 35.31508 -135.67624 37.3989 c -134.44101 39.47241 -131.89871 40.84793 -128.64128 39.64693 c -128.73708 40.6392 -128.51468 41.56648 -127.97404 42.25424 c -127.4129 42.9728 -126.52325 43.4313 -125.37358 43.45526 c -123.07079 43.51 -119.72781 41.85391 -115.69366 37.15253 c -114.22575 35.52039 -110.8212 35.01056 -107.73827 35.87967 c -104.65192 36.74876 -101.90088 38.97287 -101.68188 42.7675 c -101.68188 42.77092 l -101.20287 50.52786 -110.92043 50.72632 -111.92982 46.66138 c -111.92982 46.66138 l -111.92982 46.65793 l -112.51833 44.52281 -111.84428 42.88042 -110.75276 42.01816 c -109.70572 41.19011 -108.28915 41.10457 -107.19765 41.99077 c -108.28915 42.26451 -109.04535 42.66484 -109.4628 43.12677 c -109.90419 43.62292 -109.99657 44.18065 -109.79811 44.65968 c -109.40462 45.61775 -107.92645 46.23708 -106.06848 45.64856 c -106.06506 45.64856 l -106.06506 45.64511 l -104.5253 45.08739 -103.83754 43.39368 -104.4124 41.74783 c -104.98724 40.10202 -106.81784 38.50409 -110.26346 38.07297 c -110.26688 38.07297 l -110.26688 38.07297 l -112.79207 37.83002 -114.71849 38.65465 -116.02554 40.0199 c -117.33264 41.38515 -118.0204 43.28418 -118.08882 45.19688 c -118.16069 47.10619 -117.60979 49.02916 -116.43274 50.43889 c -115.26251 51.83836 -113.46614 52.72115 -111.06755 52.58427 c -109.07613 56.45078 -105.93163 58.16846 -102.95819 58.14108 c -102.95819 57.97 m -105.87686 57.99738 -108.97691 56.31734 -110.94095 52.46452 c -110.96832 52.4132 l -111.02307 52.41663 l -113.40456 52.57059 -115.15303 51.70491 -116.29929 50.33282 c -117.44897 48.96072 -117.98618 47.07538 -117.91774 45.20374 c -117.85274 43.32866 -117.17525 41.46727 -115.90239 40.13623 c -114.62952 38.80862 -112.76129 38.00453 -110.284 38.24405 c -106.88284 38.66833 -105.1241 40.23204 -104.57321 41.806 c -104.02232 43.37656 -104.66902 44.95737 -106.11981 45.4843 c -107.91962 46.05573 -109.29512 45.4364 -109.6407 44.59468 c -109.81178 44.17381 -109.74336 43.6982 -109.33276 43.24312 c -108.92558 42.78802 -108.1694 42.36032 -106.98207 42.09343 c -106.82126 42.05922 l -106.94101 41.94629 l -108.11124 40.88899 -109.71599 40.97797 -110.85883 41.8847 c -112.0051 42.79144 -112.69627 44.51598 -112.09747 46.70244 c -112.09406 46.70244 l -111.02307 51.01373 -101.02493 50.65788 -101.5108 42.75725 c -101.73665 38.8839 -104.55954 36.59822 -107.69037 35.71542 c -110.8212 34.83264 -114.27708 35.32536 -115.82368 37.03961 c -115.82368 37.03961 l -115.82368 37.04303 l -119.84073 41.72389 -123.15291 43.3355 -125.36674 43.28418 c -126.47536 43.26022 -127.31024 42.82567 -127.8406 42.14818 c -128.37437 41.4741 -128.60364 40.55025 -128.48045 39.54428 c -128.46335 39.40399 l -128.59337 39.4553 l -131.83713 40.70424 -134.3144 39.34924 -135.52911 37.30992 c -136.74039 35.27402 -136.67194 32.55722 -134.79002 31.06879 c -134.74896 31.038 l -134.75923 30.9901 l -135.42987 27.05174 -134.80714 24.34178 -133.56848 22.62753 c -132.32642 20.91669 -130.46844 20.19472 -128.64128 20.2392 c -126.8141 20.2871 -125.02113 21.10829 -123.93306 22.4804 c -122.84154 23.85248 -122.4412 25.77547 -123.39928 28.06114 c -123.39928 28.06114 -123.39928 28.06114 -123.4027 28.06114 c -124.0528 29.41612 -124.91165 30.00807 -125.78075 30.09703 c -126.59511 30.17574 -127.43 29.77881 -128.13487 29.12871 c -126.72513 29.06367 -125.71574 27.93112 -125.56177 26.7609 c -125.47964 26.14157 -125.63704 25.51884 -126.09213 25.06033 c -126.54721 24.60524 -127.29314 24.32468 -128.3778 24.36916 c -128.38123 24.36916 l -128.38123 24.36916 l -129.5617 24.44101 -130.45477 24.98505 -131.05014 25.76518 c -131.64893 26.54533 -131.95346 27.55473 -131.97057 28.56755 c -131.99109 29.58035 -131.72763 30.5966 -131.17674 31.39044 c -130.62585 32.18425 -129.78754 32.75226 -128.67549 32.8549 c -125.661 33.19023 -123.36847 32.41693 -121.48656 30.94218 c -119.60463 29.46402 -118.1299 27.2947 -116.72359 24.8345 c -113.90753 19.91412 -111.36183 13.84065 -106.43118 9.82362 c -100.1353 5.00247 -92.9053 3.52774 -85.24759 5.66286 c -77.5933 7.79457 -69.5113 13.54982 -61.54907 23.20236 c -61.54907 23.20578 l -61.54564 23.2092 l -49.6348 35.11664 -39.01735 37.85397 -29.0021 35.81807 c -19.31876 33.85403 -10.2 27.43155 -0.982 20.59505 c -11.36336 30.9627 -21.00223 37.72052 -30.99352 39.48611 c -41.25854 41.2996 -51.91705 37.8916 -64.2077 27.78741 c -64.21114 27.78741 -64.21114 27.78741 -64.21114 27.78741 c -71.8312 19.897 -79.08516 15.9005 -84.67958 15.17169 c -87.4751 14.80557 -89.86002 15.26065 -91.65982 16.46167 c -93.45961 17.66267 -94.67087 19.6096 -95.12254 22.20665 c -95.12254 22.20665 l -95.87874 26.7609 -94.30135 30.1552 -91.89249 31.96527 c -89.48021 33.77534 -86.23303 34.00116 -83.67705 32.23215 c -83.67363 32.23215 l -83.67363 32.22874 l -82.53421 31.3391 -82.08255 30.25786 -82.11676 29.25531 c -82.1544 28.25616 -82.6745 27.33575 -83.46149 26.75064 c -84.24846 26.16895 -85.30917 25.92259 -86.41782 26.27159 c -87.49222 26.60692 -88.60083 27.51367 -89.56233 29.16975 c -90.7599 26.46321 -90.38695 24.32468 -89.1654 22.84651 c -87.91992 21.33755 -85.79506 20.50607 -83.58467 20.48898 c -81.37425 20.47186 -79.08516 21.26569 -77.50777 22.9868 c -75.93379 24.70447 -75.06468 27.35628 -75.70454 31.08247 c -75.72508 31.21591 l -75.59503 31.17828 l -72.31366 30.19968 -69.82951 30.36392 -67.64308 31.15433 c -65.46005 31.94133 -63.5747 33.36131 -61.5046 34.89766 c -57.43964 37.91557 -52.64246 41.36119 -43.53397 41.30986 c -46.3671 42.51088 -49.26868 42.44244 -52.18394 41.69652 c -55.24635 40.91638 -58.319 39.42793 -61.31639 38.0182 c -64.3172 36.60849 -67.24274 35.27745 -70.01772 34.81894 c -72.79611 34.35703 -75.43082 34.77448 -77.81229 36.85826 c -77.81229 36.85826 l -78.93117 37.765 -79.61552 39.00366 -79.87556 40.20808 c -80.1356 41.41592 -79.97137 42.59299 -79.37257 43.37656 c -79.2973 43.47578 l -79.2323 43.36972 l -77.41881 40.34837 -75.50607 39.16447 -73.84314 39.09604 c -72.18022 39.03102 -70.74654 40.07806 -69.88428 41.587 c -69.02542 43.09598 -68.7517 45.0566 -69.40866 46.78798 c -70.0622 48.5159 -71.64642 50.02487 -74.53775 50.63736 c -78.39398 51.16429 -81.05946 49.7922 -82.53421 47.54414 c -84.01237 45.29611 -84.28952 42.16528 -83.32462 39.18156 c -83.28699 39.05498 l -83.41699 39.06866 l -85.39473 39.2945 -87.76251 38.901 -89.86002 38.13455 c -91.9609 37.36467 -93.7881 36.21841 -94.69826 34.9524 c -94.70168 34.94896 l -94.70168 34.94556 l -95.3826 34.10724 -96.1559 33.71716 -96.89839 33.66583 c -97.6409 33.61452 -98.34918 33.90536 -98.89667 34.40149 c -99.99158 35.3972 -100.46379 37.2415 -99.3791 38.92838 c -99.37569 38.93523 l -99.37227 38.93864 l -98.34576 40.21492 -97.14476 40.73845 -95.89243 40.90268 c -94.64351 41.06694 -93.3467 40.87532 -92.10463 40.73502 c -90.86598 40.59816 -89.6855 40.50919 -88.67612 40.85822 c -87.66672 41.2072 -86.8113 41.98735 -86.20224 43.61607 c -85.74716 46.31918 -86.48282 48.54329 -88.08417 49.80588 c -89.68893 51.06848 -92.17648 51.37643 -95.26627 50.19254 c -95.37233 50.15147 l -95.3826 50.26439 l -95.74872 55.06842 -99.20802 57.93236 -102.95819 57.97 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -76.413 6.399 cm 0 G 0 g q 1 0 0 1 -78.798 -245.21 cm q 0 G 0 g 0.3985 w q 0.94528 0.89378 0.74574 RG 0.94528 0.89378 0.74574 rg 62.08778 83.30959 m 55.32997 83.39821 49.8218 79.1441 48.10686 73.0111 c 44.31802 74.83682 39.53217 73.24153 35.95604 70.42319 c 34.15248 69.00072 32.65025 67.26363 31.7374 65.49551 c 30.84227 63.7584 30.52321 61.98145 31.0461 60.43047 c 27.02686 58.58258 24.7137 56.16306 23.70334 53.65935 c 22.68413 51.1379 22.98102 48.54112 24.12874 46.39192 c 26.4242 42.09792 32.14066 39.58977 37.56464 42.96204 c 37.56906 42.96204 l 37.57349 42.96648 l 41.10529 45.52336 42.33722 48.64748 41.6858 51.16005 c 41.06541 53.54855 38.70793 55.29895 35.14955 55.53825 c 37.51144 56.31816 40.21458 56.2384 42.03145 54.93558 c 43.00636 54.23987 43.72423 53.20734 44.00783 51.77602 c 44.29144 50.3491 44.13191 48.51453 43.33426 46.23239 c 42.3328 43.3963 38.6193 40.58682 34.2367 39.54988 c 29.85406 38.51295 24.81561 39.23082 21.11986 43.40517 c 21.11542 43.4096 l 21.10655 43.41847 l 19.41377 44.70357 17.24242 44.96059 15.11093 44.48642 c 12.98387 44.01227 10.89227 42.81136 9.34573 41.1629 c 7.79918 39.51443 6.79768 37.41396 6.86415 35.14955 c 6.92621 32.8984 8.06062 30.50104 10.71059 28.23662 c 8.30437 23.06079 8.24232 18.6959 9.63376 15.30591 c 11.03407 11.90262 13.88344 9.4831 17.22469 8.20244 c 20.56593 6.92177 24.39906 6.7711 27.78906 7.89668 c 31.1746 9.02223 34.11261 11.43289 35.64142 15.2616 c 35.64142 15.2616 l 35.64142 15.26602 l 37.32977 20.10065 34.65765 24.13762 31.33414 25.49805 c 29.66794 26.17606 27.83337 26.19376 26.30455 25.29863 c 24.84662 24.4478 23.6989 22.74174 23.2159 20.07848 c 22.29416 22.05045 22.63095 24.07114 23.9958 25.82153 c 25.43156 27.6694 27.97073 29.20265 31.21007 29.97813 c 37.69315 31.52913 46.97241 30.06235 55.8573 22.1568 c 65.7348 11.83617 77.77483 9.71794 93.6258 13.9189 c 94.57411 14.17148 l 93.59035 14.13602 l 85.71582 13.85242 78.8605 14.557 72.80283 17.31331 c 66.74516 20.06961 61.4807 24.87766 56.7746 32.83195 c 56.73029 32.8984 l 56.65495 32.88069 l 52.22357 31.91908 49.21469 32.53503 47.34023 33.97966 c 45.46132 35.41986 44.6947 37.70201 44.7789 40.1171 c 44.8631 42.53664 45.79811 45.08467 47.31363 47.02116 c 48.82916 48.96211 50.91191 50.29152 53.30042 50.3048 c 53.38017 50.3048 l 53.40677 50.38014 l 55.15273 55.76868 59.57965 59.234 64.43198 59.94302 c 69.28433 60.65204 74.55765 58.6136 78.02298 52.96362 c 78.07616 52.875 l 78.1692 52.92374 l 84.08064 55.99025 91.14423 53.78786 95.1945 49.3166 c 97.22406 47.07877 98.49144 44.28258 98.5003 41.29585 c 98.50473 38.30467 97.24623 35.12738 94.1886 32.11406 c 94.0911 32.021 l 94.20187 31.94568 l 100.57861 27.57635 107.17691 27.18639 112.99529 28.76396 c 118.80923 30.34152 123.85213 33.87773 127.15349 37.36966 c 135.5465 44.31361 144.2098 44.78333 152.02672 40.40514 c 152.02672 40.40514 152.02672 40.40514 152.02672 40.40514 c 155.49648 37.72417 163.62802 33.59857 173.09784 32.88069 c 173.85118 32.82751 l 173.14659 33.0934 l 167.70488 35.18942 162.54678 37.61781 155.72247 43.95024 c 155.71803 43.95465 l 155.71803 43.95465 l 151.75198 47.14525 147.04144 48.74496 141.85231 48.35944 c 136.66762 47.96947 131.00877 45.60313 125.12392 40.88817 c 120.12978 38.35785 116.2612 38.03879 113.48717 38.93835 c 110.71313 39.83792 109.01591 41.95612 108.35565 44.34018 c 107.69539 46.72426 108.08089 49.3742 109.47234 51.31071 c 110.85938 53.25166 113.2523 54.49245 116.65115 54.0759 c 119.3277 53.45552 121.01604 51.94884 121.56998 50.40228 c 121.84914 49.63124 121.84027 48.84688 121.53452 48.1556 c 121.25536 47.51747 120.69255 46.96799 119.88162 46.54701 c 120.24942 48.12457 120.0766 49.51602 119.29224 50.49536 c 118.47244 51.53229 117.01009 52.10837 114.94508 52.01973 c 114.92735 52.01973 l 114.90964 52.01086 l 112.49011 51.09802 111.14297 49.61794 110.6954 48.01822 c 110.24783 46.4185 110.69098 44.708 111.80766 43.35199 c 114.04108 40.64 118.95103 39.3239 124.76498 42.92215 c 124.76941 42.92215 l 124.76941 42.92215 l 128.58038 45.44803 129.53313 49.58691 128.22145 52.96805 c 126.92747 56.30931 123.41342 58.89722 118.33507 58.50725 c 120.87868 62.92088 119.3144 67.34781 116.21689 69.90915 c 113.11491 72.48376 108.48415 73.1928 104.99225 70.22821 c 103.60522 73.43651 99.19157 75.36417 95.65092 73.61377 c 95.6465 73.61377 l 95.64207 73.60934 l 93.65239 72.31982 93.24028 70.20604 93.03644 68.09673 c 92.82816 65.98296 92.81042 63.86034 91.68486 62.46889 c 91.68486 62.46446 l 91.68044 62.46446 l 88.964 58.8086 85.92409 57.27975 83.14563 57.09366 c 80.36717 56.90753 77.83685 58.06412 76.15294 59.80121 c 74.46901 61.54274 73.63148 63.86034 74.212 66.00069 c 74.75706 68.01251 76.62709 69.86041 80.2165 70.96382 c 77.39372 68.92538 76.29031 66.79834 76.42326 64.9283 c 76.56949 62.93419 78.03627 61.27243 79.99493 60.36842 c 81.94916 59.46443 84.3997 59.30933 86.53119 60.3374 c 88.66267 61.36548 90.46623 63.57674 91.12653 67.36111 c 91.12653 67.36111 l 91.12653 67.36111 l 91.95961 72.89587 88.87538 76.72902 85.11758 78.56358 c 83.23425 79.4809 81.18254 79.9063 79.35681 79.80437 c 77.57097 79.70245 76.00671 79.0865 75.02736 77.92992 c 70.6359 81.62566 66.14249 83.25641 62.08778 83.30959 c 62.08337 83.08801 m 66.10262 83.03484 70.58272 81.42183 74.96535 77.70392 c 75.04953 77.62857 l 75.12044 77.71722 l 76.04216 78.86494 77.58426 79.4809 79.37012 79.58282 c 81.15154 79.68031 83.17223 79.26819 85.0201 78.36418 c 88.71585 76.56062 91.72917 72.83386 90.90495 67.39656 c 90.25797 63.66536 88.50314 61.52943 86.43813 60.53682 c 84.3687 59.54419 81.9846 59.69043 80.08356 60.57228 c 78.18694 61.44968 76.7822 63.0494 76.64482 64.94601 c 76.50745 66.84265 77.63301 69.06276 80.87677 71.20311 c 81.43512 71.5709 l 80.78815 71.40251 l 76.68471 70.3257 74.60197 68.28728 73.9993 66.0583 c 73.39664 63.82932 74.2696 61.43195 75.99341 59.65054 c 77.72165 57.86472 80.30956 56.68155 83.15892 56.87209 c 86.00829 57.06706 89.11023 58.63577 91.85768 62.32709 c 91.85768 62.33153 l 93.04973 63.80716 93.04973 65.9741 93.25357 68.07455 c 93.46185 70.17061 93.85179 72.18243 95.75728 73.41878 c 99.21375 75.12486 103.58307 73.17062 104.85486 70.02437 c 104.91248 69.87813 l 105.03214 69.98006 l 108.4487 72.97565 113.013 72.27992 116.0795 69.74075 c 119.14159 67.19716 120.69698 62.83226 118.06476 58.44963 c 117.95396 58.26352 l 118.17111 58.28127 l 123.2716 58.74655 126.74136 56.18079 128.0176 52.88829 c 129.29384 49.60022 128.38097 45.58096 124.64975 43.10828 c 118.89786 39.54988 114.13414 40.87486 111.9805 43.49379 c 110.90369 44.80106 110.47827 46.4318 110.90811 47.95618 c 111.33353 49.48058 112.60976 50.90305 114.97609 51.79817 c 116.97908 51.87794 118.35722 51.32402 119.12387 50.35797 c 119.89049 49.39195 120.06773 47.9872 119.62016 46.34317 c 119.55814 46.1216 l 119.77527 46.21466 l 120.75903 46.66222 121.41045 47.31363 121.73836 48.06696 c 122.06628 48.81587 122.07071 49.65782 121.77824 50.47763 c 121.1933 52.1128 119.42963 53.66379 116.69547 54.29303 c 116.69102 54.29745 l 116.68219 54.29745 l 113.21684 54.72287 110.72643 53.44221 109.29066 51.44366 c 107.85931 49.44069 107.46938 46.7287 108.14294 44.28258 c 108.82094 41.83647 110.57576 39.6518 113.42068 38.73009 c 116.27007 37.80836 120.19624 38.14072 125.22585 40.69318 c 125.23471 40.6976 l 125.24358 40.70647 l 131.11069 45.40816 136.73409 47.75677 141.87004 48.13786 c 147.006 48.51898 151.6545 46.94583 155.58067 43.78627 c 162.10806 37.72859 167.14209 35.23817 172.33122 33.19533 c 163.24692 34.07272 155.46988 38.02107 152.1508 40.59126 c 152.14194 40.59569 l 152.13751 40.60011 l 144.24968 45.01376 135.45784 44.52629 127.00725 37.53362 c 127.00282 37.52919 l 126.99838 37.52475 l 123.71918 34.05943 118.70732 30.54536 112.93768 28.9811 c 107.19905 27.42569 100.72485 27.79791 94.43231 32.06088 c 97.45007 35.07864 98.72629 38.27809 98.71742 41.29585 c 98.71301 44.34462 97.41463 47.19398 95.35846 49.46283 c 91.26389 53.98283 84.15155 56.20738 78.15591 53.15416 c 74.65071 58.8086 69.31091 60.87804 64.40097 60.16016 c 59.48659 59.44226 55.01091 55.9415 53.22064 50.5175 c 50.78783 50.47319 48.6652 49.1172 47.14081 47.15854 c 45.59427 45.18216 44.64153 42.59424 44.55733 40.12596 c 44.47314 37.6577 45.2619 35.29578 47.20285 33.80241 c 49.13493 32.3179 52.19699 31.7108 56.62393 32.6547 c 61.3389 24.7137 66.62994 19.87907 72.7142 17.1139 c 78.54144 14.45952 85.12201 13.72833 92.58 13.91446 c 77.27408 10.0769 65.62845 12.26598 56.00797 22.31631 c 56.00354 22.32076 l 56.00354 22.32076 l 47.07434 30.27061 37.71973 31.75955 31.16133 30.19084 c 27.88211 29.4065 25.29863 27.85551 23.82298 25.95891 c 22.3429 24.05783 21.97511 21.79341 23.14055 19.64421 c 23.29565 19.35617 l 23.34883 19.67967 l 23.77867 22.52902 24.95741 24.25282 26.41977 25.10808 c 27.87769 25.96333 29.63693 25.95003 31.24994 25.2942 c 34.47154 23.97365 37.08606 20.06961 35.43758 15.33691 c 35.43758 15.33691 35.43758 15.33691 35.43315 15.33691 c 33.93091 11.57027 31.05054 9.21278 27.71815 8.10495 c 24.38133 6.9971 20.59694 7.14778 17.30002 8.4107 c 14.00752 9.67365 11.21133 12.04886 9.8376 15.39009 c 8.4639 18.73578 8.51263 23.05193 10.93658 28.21446 c 10.97647 28.2898 l 10.91 28.34741 l 8.24675 30.59854 7.14778 32.95602 7.0813 35.15398 c 7.01924 37.35194 7.98973 39.39922 9.50526 41.01224 c 11.02077 42.62526 13.07693 43.80843 15.15968 44.26929 c 17.24242 44.73457 19.34286 44.47755 20.97362 43.24121 c 20.97362 43.24121 20.97362 43.24121 20.97362 43.24121 c 24.72699 39.02255 29.85406 38.28253 34.28987 39.33275 c 38.73009 40.38298 42.49675 43.20576 43.54254 46.16148 c 43.54254 46.16148 l 44.34906 48.47023 44.51746 50.34027 44.22498 51.82033 c 43.93251 53.30042 43.17473 54.39053 42.15996 55.11726 c 40.13483 56.57076 37.09048 56.59291 34.57347 55.6047 c 34.055 55.40086 l 34.61334 55.392 l 38.42432 55.32555 40.84827 53.50868 41.46866 51.10689 c 42.09349 48.70065 40.92361 45.66959 37.44499 43.14372 c 32.12292 39.84236 26.566 42.3062 24.32372 46.49826 c 23.20259 48.58986 22.91455 51.11575 23.9116 53.57515 c 24.90424 56.03456 27.18195 58.43636 31.21451 60.27092 c 31.30756 60.31526 l 31.27211 60.40833 l 30.7359 61.90611 31.04167 63.6565 31.93237 65.3936 c 32.82751 67.12624 34.31201 68.84119 36.09343 70.25037 c 39.66068 73.05984 44.4288 74.62856 48.12457 72.7718 c 48.24422 72.70978 l 48.27966 72.84271 l 49.93256 78.9447 55.37872 83.17665 62.08337 83.08801 c 66.55904 56.9607 m 62.203 57.09808 57.6653 54.60323 54.6298 48.08469 c 52.42741 48.20435 50.6992 47.03003 49.56477 45.33725 c 48.41261 43.62231 47.85869 41.38005 47.9872 39.37708 c 48.12013 37.37408 48.94437 35.5971 50.57954 34.87036 c 52.19699 34.15248 54.57663 34.48927 57.77608 36.54985 c 60.69635 28.7994 65.86333 23.57483 72.22675 20.35767 c 78.62564 17.12277 86.221 15.90413 93.95815 16.14787 c 109.4236 16.63974 125.44298 22.96773 133.52136 30.77136 c 133.52579 30.77136 l 138.35155 35.31795 146.66919 35.63701 153.44919 31.69307 c 156.55557 29.23811 161.19965 28.08151 165.97665 28.1347 c 170.75809 28.18788 175.6769 29.45525 179.32391 31.87033 c 179.86455 32.22928 l 179.23529 32.06975 l 173.45236 30.59854 166.68565 30.73148 157.30005 35.185 c 157.29561 35.185 157.29561 35.185 157.29561 35.185 c 152.65154 38.1939 148.6766 40.03734 145.04733 40.78181 c 141.4136 41.52184 138.12553 41.15848 134.87733 39.75816 c 134.87292 39.75374 l 134.8685 39.75374 l 128.50061 36.2574 126.15198 32.16724 119.72652 28.4759 c 107.94797 23.63245 98.03943 24.84662 92.63318 30.48776 c 92.54454 30.58081 l 92.46478 30.4789 l 91.72917 29.504 90.37318 28.99437 88.78233 28.91905 c 87.19145 28.8437 85.37903 29.20265 83.75716 29.9427 c 82.13528 30.6783 80.70837 31.79057 79.87529 33.21303 c 79.04219 34.63107 78.79404 36.35931 79.54292 38.36229 c 79.54735 38.36671 l 79.54735 38.37114 l 80.98756 42.93544 84.13824 44.30031 86.6597 43.81729 c 87.9182 43.57356 89.01718 42.86897 89.6686 41.85863 c 90.27126 40.92361 90.46623 39.7227 90.06299 38.38002 c 89.39384 40.30766 88.06886 41.50856 86.6021 41.56172 c 85.04669 41.62376 83.41151 40.42287 82.36127 37.6577 c 82.36127 37.6577 l 82.0688 36.86449 82.34357 35.87186 82.98166 34.95013 c 83.61536 34.02841 84.6257 33.17316 85.84433 32.6547 c 88.27715 31.62662 91.56078 31.98999 94.31267 35.95163 c 95.65092 37.38295 96.04976 39.38593 95.69525 41.4731 c 95.34517 43.56027 94.24619 45.73607 92.58885 47.53963 c 89.27864 51.13347 83.71284 53.24724 77.35384 50.19844 c 75.0318 54.08476 70.89735 56.82333 66.55904 56.9607 c 66.55019 56.73914 m 70.83087 56.60176 74.94762 53.8809 77.22533 50.0079 c 77.27408 49.92372 l 77.36713 49.96802 l 83.67738 53.03453 89.15456 50.94292 92.42491 47.38896 c 94.06007 45.61641 95.13689 43.47165 95.47812 41.43765 c 95.82376 39.39922 95.43379 37.47601 94.15312 36.1023 c 94.1487 36.09787 l 94.14426 36.08899 l 91.42786 32.18053 88.286 31.86147 85.92853 32.85854 c 84.74977 33.35927 83.77487 34.19237 83.16336 35.07864 c 82.5474 35.96048 82.31253 36.89107 82.56955 37.57793 c 83.60205 40.28992 85.1619 41.39777 86.59323 41.34459 c 88.02455 41.28699 89.37613 40.06834 89.98323 38.00334 c 90.08072 37.67984 l 90.1959 37.99448 l 90.75429 39.52773 90.54158 40.91475 89.8547 41.97827 c 89.16785 43.0418 88.01569 43.78185 86.69958 44.03442 c 84.07178 44.53516 80.80142 43.08168 79.33908 38.44205 c 78.56802 36.38145 78.82062 34.57347 79.68474 33.09782 c 80.54884 31.62662 82.0112 30.49219 83.6641 29.73885 c 85.32141 28.98996 87.16045 28.62215 88.79117 28.69748 c 90.37318 28.77281 91.75575 29.278 92.55783 30.26619 c 98.06158 24.6029 108.03659 23.4286 119.81958 28.27649 c 119.824 28.28093 l 119.83287 28.28093 l 126.29823 31.99442 128.64685 36.08456 134.97041 39.55432 c 138.18315 40.94133 141.4136 41.30028 145.00302 40.56467 c 148.59683 39.82907 152.55405 37.9989 157.18925 34.99445 c 157.1937 34.99002 l 157.20256 34.98558 l 166.28685 30.6783 172.94275 30.43457 178.63261 31.74625 c 175.09195 29.58374 170.48778 28.40501 165.97665 28.35628 c 161.23065 28.30309 156.62204 29.45967 153.57327 31.87477 c 153.5644 31.88364 l 153.55998 31.88364 l 146.70909 35.86742 138.28506 35.56609 133.37068 30.9309 c 133.37068 30.9309 l 133.37068 30.9309 l 125.34993 23.18488 109.36157 16.85687 93.94928 16.36943 c 86.24315 16.1257 78.67882 17.3399 72.32423 20.55264 c 65.9741 23.76538 60.82486 28.97667 57.93117 36.74483 c 57.88686 36.87335 l 57.76723 36.798 l 54.5412 34.68425 52.2103 34.38736 50.6726 35.06978 c 49.1305 35.75664 48.33728 37.43613 48.20877 39.39035 c 48.08026 41.34015 48.62975 43.54697 49.74646 45.21317 c 50.86316 46.88379 52.53821 48.01822 54.69185 47.87198 c 54.76718 47.86755 l 54.80264 47.93402 l 57.81154 54.43927 62.26949 56.87653 66.55019 56.73914 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 88.211 57.257 cm 0 G 0 g q 1 0 0 1 -71.895 -230.757 cm q 0 G 0 g 0.3985 w q 0.9441 0.89151 0.74028 RG 0.9441 0.89151 0.74028 rg 4.0 M 154.83167 58.15076 m 151.23236 58.06735 147.81302 56.70224 145.87729 54.16078 c 138.46799 59.93724 129.56189 58.69942 124.14539 54.38025 c 121.42395 52.21628 119.5804 49.27098 119.24681 46.04478 c 118.9176 42.84053 120.09396 39.36852 123.35966 36.13791 c 121.7707 32.67467 121.87167 29.71184 123.02608 27.38107 c 124.18927 25.03273 126.39714 23.32086 128.95616 22.34642 c 131.51518 21.36757 134.42973 21.11739 137.01949 21.70119 c 139.60924 22.28058 141.87856 23.69835 143.12076 26.05107 c 143.12514 26.05545 l 143.12514 26.05545 l 145.0082 30.02786 144.74922 33.52184 143.37534 35.82625 c 141.99707 38.1307 139.49948 39.2456 136.96243 38.44673 c 136.75172 38.3809 l 136.9317 38.2536 l 139.49072 36.432 140.5398 34.18462 140.1974 32.42007 c 140.02621 31.53783 139.51266 30.76968 138.64795 30.22101 c 137.78764 29.67232 136.57176 29.34312 135.01353 29.3563 c 132.69594 29.47041 131.05869 30.47559 130.04474 31.97676 c 129.03517 33.47794 128.65768 35.48828 128.90787 37.59958 c 129.40826 41.83096 132.41063 46.47055 137.78325 48.30093 c 137.78325 48.30093 137.78325 48.30093 137.78325 48.30093 c 152.0093 51.97046 162.05223 37.1387 158.0052 27.45128 c 158.0052 27.4469 l 158.0052 27.44252 l 155.8588 21.31929 150.60907 17.7902 143.85378 16.90796 c 137.09412 16.02568 128.83765 17.80339 120.71725 22.3113 c 120.71286 22.31569 l 107.74658 30.15077 98.2567 32.9117 90.69376 32.88098 c 83.13521 32.84586 77.51239 30.01471 72.29779 26.7007 c 67.08757 23.3867 62.27678 19.59427 56.32477 17.59709 c 50.37274 15.6043 43.27069 15.40237 33.4472 19.2914 c 33.35065 19.09827 l 33.35503 19.09387 33.3594 19.09387 33.3682 19.08948 c 47.56352 10.20972 56.93051 12.51855 65.64346 16.31538 c 74.36081 20.11221 82.42413 25.37071 94.15698 22.45177 c 94.15698 22.45177 l 94.16139 22.45177 l 102.79973 20.41948 107.87387 14.82298 115.1954 10.04292 c 122.51253 5.26288 132.0814 1.32559 149.66534 2.65556 c 149.66534 2.65556 l 152.22437 2.69507 155.692 4.08212 159.19034 6.35583 c 162.68869 8.62955 166.22217 11.7943 168.87775 15.40237 c 171.53773 19.01047 173.3242 23.0575 173.31543 27.10452 c 173.31105 31.13399 171.51578 35.1503 167.0737 38.68376 c 169.38254 45.4171 168.34224 50.33762 165.70422 53.54187 c 163.0618 56.75493 158.83481 58.23854 154.83167 58.15076 c 154.83606 57.93127 m 158.78214 58.01907 162.94328 56.55301 165.53741 53.40143 c 168.12717 50.24983 169.16743 45.40831 166.84546 38.68814 c 166.81914 38.61354 l 166.88057 38.56525 l 171.33142 35.05373 173.09157 31.0901 173.10034 27.10452 c 173.10474 23.12334 171.34021 19.11143 168.70216 15.52968 c 166.06415 11.94792 162.54825 8.80074 159.06744 6.54019 c 155.59103 4.27965 152.14096 2.91016 149.65657 2.87503 c 149.65218 2.87503 l 149.64778 2.87503 l 132.10336 1.54944 122.60909 5.46478 115.3139 10.2273 c 108.01872 14.98538 102.91824 20.6126 94.20967 22.66245 c 94.20967 22.66245 l 82.3934 25.60335 74.25108 20.30533 65.55566 16.51729 c 57.11046 12.8346 48.11218 10.64429 34.63235 18.63737 c 43.82814 15.24876 50.65805 15.47261 56.39499 17.39078 c 62.39091 19.40112 67.21487 23.21114 72.4163 26.51634 c 77.61774 29.82156 83.1879 32.63078 90.69815 32.6615 c 98.20401 32.69662 107.6544 29.94887 120.60313 22.12694 c 120.60751 22.12254 l 120.60751 22.12254 l 128.75864 17.5927 137.06339 15.80182 143.88013 16.69287 c 150.69685 17.58392 156.03876 21.17006 158.21152 27.37228 c 162.32877 37.25722 152.11024 52.22945 137.72179 48.51163 c 137.7174 48.51163 l 137.71301 48.51163 l 132.25699 46.65051 129.19757 41.9407 128.6884 37.62592 c 128.43384 35.47072 128.8157 33.40771 129.86476 31.85385 c 130.91383 30.29562 132.6301 29.25095 135.00475 29.13683 c 135.00475 29.13683 l 135.00914 29.13683 l 136.6025 29.12366 137.85785 29.45724 138.76646 30.03664 c 139.67508 30.61604 140.23253 31.43686 140.41249 32.37619 c 140.76804 34.20218 139.69702 36.44078 137.24774 38.26677 c 139.60924 38.90762 141.8961 37.88051 143.18658 35.71652 c 144.51659 33.48232 144.78433 30.07176 142.92763 26.15204 c 141.72052 23.86514 139.51266 22.48248 136.9712 21.91187 c 134.42973 21.34125 131.55469 21.58705 129.03517 22.54832 c 126.51564 23.50961 124.35606 25.19075 123.22362 27.47763 c 122.09114 29.7645 121.9814 32.6659 123.58353 36.11157 c 123.61426 36.1818 l 123.56158 36.23886 l 120.2871 39.44751 119.13707 42.87125 119.46628 46.02284 c 119.79109 49.17882 121.59952 52.07582 124.28145 54.20908 c 129.64091 58.48434 138.47678 59.71777 145.82462 53.93694 c 145.91241 53.8667 l 145.97826 53.95447 l 147.85252 56.48277 151.24992 57.85228 154.83606 57.93127 c 51.28572 43.21362 m 48.30972 43.29703 45.29858 42.4016 43.05122 40.56682 c 40.80385 38.73206 39.32901 35.95355 39.42119 32.30595 c 39.42119 32.30595 l 39.42119 32.30156 l 39.64505 29.1061 40.8653 26.96407 42.564 25.9589 c 44.26707 24.95811 46.43544 25.10735 48.49847 26.44173 c 48.49847 26.44173 l 50.12254 27.46884 50.60098 29.09291 49.98647 30.26929 c 49.37634 31.44125 47.69958 32.12599 45.15373 31.35786 c 45.16252 31.35786 l 44.70601 31.27446 44.36803 31.3359 44.13539 31.49393 c 43.90715 31.65195 43.77545 31.91531 43.74913 32.27086 c 43.69646 32.98631 44.10028 34.06612 45.0484 35.20297 c 45.05278 35.20737 l 45.05716 35.21175 l 48.65208 40.56242 56.84271 37.95074 57.27727 33.24529 c 57.56258 30.04543 56.52666 26.97284 54.411 24.85716 c 52.29968 22.74586 49.10858 21.58705 45.05716 22.2279 c 42.17334 22.94337 40.13666 23.75542 38.72327 24.77814 c 37.31427 25.80525 36.52417 27.03429 36.12035 28.61009 c 36.06769 28.82079 l 35.9316 28.65399 l 35.04495 27.58296 34.16707 27.02553 33.18384 26.83678 c 32.205 26.65242 31.10767 26.83678 29.8084 27.28448 c 29.804 27.28448 l 29.7996 27.28448 l 26.02913 28.28088 23.0136 27.28009 20.03758 25.84915 c 17.05719 24.41821 14.1075 22.5615 10.42918 21.80212 c 6.26804 21.01642 2.94087 22.99167 0.17995 25.27853 c -0.10533 25.51556 l 0.00436 25.16003 l 1.16318 21.45976 4.04262 19.42308 7.3654 18.7515 c 10.68817 18.0843 14.45866 18.76466 17.45662 20.48091 c 21.49927 22.77219 24.65085 23.86076 28.20189 23.68958 c 31.7485 23.51839 35.70775 22.07866 41.35252 19.27823 c 41.35692 19.27383 l 41.36569 19.26944 l 48.37117 16.9255 54.7314 18.60666 58.65114 22.27618 c 62.56648 25.94572 64.04132 31.61244 61.28477 37.18259 c 61.2804 37.18259 l 59.3754 41.12866 55.35469 43.09511 51.28572 43.21362 c 51.27695 42.99416 m 55.28447 42.87564 59.22176 40.9531 61.08727 37.08603 c 61.08727 37.08603 l 61.08727 37.08603 l 63.80429 31.59488 62.35579 26.04668 58.5019 22.4342 c 54.64363 18.82173 48.37556 17.15375 41.4403 19.47575 c 41.43591 19.47575 41.43591 19.47575 41.43591 19.48015 c 35.79115 22.28058 31.80557 23.73347 28.21065 23.90904 c 24.61134 24.08461 21.40709 22.9741 17.35127 20.67406 c 14.3972 18.98413 10.67061 18.30818 7.40929 18.96658 c 4.27087 19.59866 1.6065 21.48608 0.39064 24.84837 c 3.11206 22.66245 6.39095 20.81891 10.4731 21.59143 c 10.4731 21.59143 l 10.4731 21.59143 l 14.19969 22.35518 17.16692 24.22946 20.12976 25.65164 c 23.09262 27.0738 26.03792 28.05264 29.74695 27.0738 c 31.05937 26.6217 32.19183 26.42416 33.22775 26.6217 c 34.21535 26.81482 35.1064 27.39423 35.97551 28.3994 c 36.40126 26.8631 37.20015 25.61652 38.59598 24.60257 c 40.04446 23.5535 42.1075 22.73268 45.00888 22.01282 c 45.01328 22.00842 l 45.01767 22.00842 l 49.13052 21.3588 52.40063 22.53955 54.5646 24.70352 c 56.72859 26.8675 57.78204 30.00592 57.49673 33.26285 c 57.49673 33.26285 l 57.03586 38.21408 48.57747 40.83896 44.87721 35.33466 c 43.91153 34.17146 43.47261 33.06532 43.52966 32.25328 c 43.5604 31.84946 43.7228 31.51587 44.0125 31.31395 c 44.30219 31.11206 44.7104 31.0506 45.2064 31.14717 c 45.2108 31.14717 l 45.2152 31.14717 l 47.70398 31.89775 49.24026 31.22618 49.79335 30.16394 c 50.34639 29.1061 49.93379 27.60931 48.38434 26.62607 c 48.37994 26.62607 l 46.3696 25.32243 44.30219 25.19075 42.67812 26.14764 c 41.05403 27.10452 39.86012 29.17194 39.64066 32.31473 c 39.64066 32.31473 39.64066 32.31914 39.64066 32.31914 c 39.54848 35.90088 40.99258 38.60037 43.19167 40.39563 c 45.39078 42.19528 48.34921 43.07755 51.27695 42.99416 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 17.96 137.389 cm 0 G 0 g q 1 0 0 1 -72 -222.38 cm q 0 G 0 g 0.3985 w q 0.94681 0.89674 0.7528 RG 0.94681 0.89674 0.7528 rg 72.39305 40.82062 m 69.72491 40.79416 67.2661 38.75157 67.00627 35.34724 c 62.63478 37.02414 59.9041 34.48834 60.55368 30.65335 c 62.28111 26.00278 66.97499 30.88913 69.82596 27.34044 c 71.32 25.01396 68.51476 22.29291 66.63335 24.60977 c 65.33177 26.42381 61.45349 27.84808 58.64581 27.53052 c 60.01236 31.75766 57.85909 36.41063 52.39774 35.66481 c 44.2033 33.92776 50.64145 21.92722 55.76117 30.46329 c 56.57675 29.39989 56.2231 27.21776 54.67369 25.96188 c 48.03105 20.14926 38.68661 32.9606 30.28766 28.9957 c 43.51039 29.24832 43.89775 19.1003 53.17003 21.86467 c 51.36081 11.3317 66.64056 12.75598 62.99084 20.64487 c 60.24332 15.72484 55.72266 20.14445 58.86957 22.6153 c 62.42065 25.0717 67.882 21.99217 66.82343 15.6238 c 65.56273 8.37486 55.8935 8.49516 45.1873 19.58388 c 27.88417 33.80505 15.12097 29.20982 0.06013 13.9493 c 13.47775 23.92409 26.5032 33.00632 43.23132 16.27579 c 54.43793 2.68976 65.9934 0.06013 74.8735 6.86157 c 81.83372 12.53465 82.04546 23.98424 90.46846 23.04114 c 93.52873 22.76445 93.5143 17.39212 90.26395 17.19484 c 87.259 17.07455 88.1564 20.5318 90.2447 20.4476 c 89.19574 21.50137 87.64154 21.68904 86.71046 19.7547 c 83.98218 13.2588 96.7093 10.6821 94.81107 21.7997 c 97.51286 23.93613 95.00354 29.57312 90.39627 27.79758 c 90.74994 30.67982 87.0545 32.6815 81.39345 26.08458 c 79.27386 23.72922 71.74586 24.67473 71.4355 30.06873 c 71.09627 35.5734 78.02763 35.76826 78.759 32.82347 c 79.59386 29.78241 76.8367 28.0911 75.23439 29.53943 c 78.60985 30.29727 77.16872 32.85474 74.59683 32.03914 c 72.49167 31.27649 72.72023 27.43187 77.53682 26.8304 c 84.57162 26.14954 84.82184 37.35135 78.0589 36.91586 c 76.6683 39.64174 74.46692 40.83986 72.39305 40.82062 c 73.51178 23.29376 m 74.63531 23.31783 75.97781 23.00023 77.46463 22.17743 c 80.41667 20.39946 78.44864 13.28046 72.90068 12.11601 c 76.94017 15.04158 78.15755 18.6937 75.02267 21.17418 c 75.70113 18.46515 73.10518 15.80664 70.4948 19.15082 c 69.20284 20.93117 70.63914 23.22879 73.51178 23.29376 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g q 1 0 0 1 23.574 -47.789 cm q 0 G 0 g 0.3985 w q q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 32.479 -91.462 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.50072 .86557 -.86557 -.50072 53.187 -81.173 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86546 .50093 -.50093 -.86546 65.793 -61.924 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.99998 .00023 -.00023 -.99998 67.25 -38.893 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86577 -.50041 .50041 -.86577 56.969 -18.189 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.50124 -.86528 .86528 -.50124 37.724 -5.575 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.0006 -.99998 .99998 -.0006 14.694 -4.11 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .50012 -.86592 .86592 .50012 -6.015 -14.385 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .86511 -.5015 .5015 .86511 -18.634 -33.627 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .99998 -.00089 .00089 .99998 -20.108 -56.656 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .8661 .49982 -.49982 .8661 -9.841 -77.366 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .50182 .86494 -.86494 .50182 9.396 -89.992 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .00124 .99998 -.99998 .00124 32.426 -91.474 cm 0 G 0 g q 1 0 0 1 43.673 -62.172 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg -20.09932 23.1336 m -19.24107 20.53227 -16.87195 19.87827 -14.70709 20.70856 c -13.20882 21.22615 -13.41306 21.92003 -15.42825 21.51224 c -17.63438 21.32198 -18.71016 23.67781 -20.09932 23.1336 c -15.66957 19.39073 m -16.13472 18.9102 -16.19417 18.15826 -15.86821 17.13283 c -14.8309 18.93817 -13.3578 18.94656 -12.4688 18.82416 c -11.49371 18.70386 -11.47762 19.67542 -12.50305 19.9776 c -14.09715 20.1294 -15.14287 19.93422 -15.66957 19.39073 c -12.50864 17.21748 m -13.02066 16.71385 -13.2326 15.98431 -12.87238 15.07988 c -10.4641 16.06265 -9.5226 15.54924 -8.50067 12.86537 c -6.7387 6.77367 -2.93288 5.79231 -0.56238 7.7977 c -0.83446 6.97021 -0.81837 5.79161 0.0 5.08934 c 0.81837 5.79161 0.83446 6.97021 0.56238 7.7977 c 2.93288 5.79231 6.7387 6.77367 8.50067 12.86537 c 9.5226 15.54924 10.4641 16.06265 12.87238 15.07988 c 13.97055 17.8358 9.74783 18.97105 7.95578 17.03352 c 6.26025 19.13612 6.26025 18.5206 5.96718 17.17271 c 5.97417 15.30652 4.01425 16.97267 3.87576 15.0673 c 4.39267 13.70822 6.52327 12.66602 5.26772 10.85788 c 3.93033 9.38339 1.96622 9.47572 1.82701 10.20807 c 1.62416 10.84178 2.01657 11.32652 2.58524 11.26146 c 4.0758 11.54196 2.94757 14.13771 0.63371 13.62988 c 1.0611 14.61266 0.78479 15.42892 0.0 15.55205 c -0.78479 15.42892 -1.0611 14.61266 -0.63371 13.62988 c -2.94757 14.13771 -4.0758 11.54196 -2.58524 11.26146 c -2.01657 11.32652 -1.62416 10.84178 -1.82701 10.20807 c -1.96622 9.47572 -3.93033 9.38339 -5.26772 10.85788 c -6.52327 12.66602 -4.39267 13.70822 -3.87576 15.0673 c -4.01425 16.97267 -5.97417 15.30652 -5.96718 17.17271 c -6.26025 18.5206 -6.26025 19.13612 -7.95578 17.03352 c -9.15956 18.33524 -11.46085 18.2499 -12.50864 17.21748 c 11.92809 19.65303 m 11.54547 19.25783 11.73784 18.73393 12.4688 18.82416 c 13.3578 18.94656 14.8309 18.93817 15.86821 17.13283 c 16.56349 19.3208 15.5024 20.26299 12.50305 19.9776 c 12.24704 19.90205 12.05539 19.78453 11.92809 19.65303 c 13.77748 21.49124 m 13.59563 21.30798 13.91177 20.98343 14.70709 20.70856 c 16.87195 19.87827 19.24107 20.53227 20.09932 23.1336 c 18.71016 23.67781 17.63438 21.32198 15.42825 21.51224 c 14.48395 21.70389 13.93697 21.65213 13.77748 21.49124 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 23.574 -47.789 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -35.433 0 cm 0 G 0 g q 1 0 0 1 23.486 -83.31 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 35.52145 70.95435 m 15.95187 70.95435 0.08856 55.09103 0.08856 35.52145 c 0.08856 15.95187 15.95187 0.08856 35.52145 0.08856 c 55.09103 0.08856 70.95435 15.95187 70.95435 35.52145 c 70.95435 55.09103 55.09103 70.95435 35.52145 70.95435 c 37.64743 66.63155 m 49.96037 65.79176 60.62567 57.75914 64.8351 46.15486 c 53.94655 46.15132 l 53.94655 41.89938 l 66.04335 41.89938 l 66.92207 37.6935 66.92207 33.34941 66.04335 29.14354 c 53.94655 29.14354 l 53.94655 24.89159 l 64.8351 24.89159 l 60.62567 13.28731 49.9639 5.25468 37.64743 4.41138 c 37.64743 16.3877 l 47.69266 16.3877 l 45.74739 15.14755 43.61787 14.21211 41.38914 13.61685 c 42.4911 9.51016 l 48.8336 11.20741 54.33632 15.1688 57.96465 20.63965 c 13.07826 20.63965 l 16.70659 15.1688 22.20932 11.20741 28.5518 9.51016 c 29.65376 13.61685 l 27.42503 14.21211 25.29552 15.1511 23.35027 16.3877 c 33.3955 16.3877 l 33.3955 4.41138 l 21.07901 5.25113 10.41725 13.28377 6.20782 24.88805 c 17.09634 24.89159 l 17.09634 29.14354 l 4.99956 29.14354 l 4.12083 33.34941 4.12083 37.6935 4.99956 41.89938 c 17.09634 41.89938 l 17.09634 46.15132 l 6.20782 46.15132 l 10.41371 57.75558 21.07901 65.78822 33.3955 66.62799 c 33.3955 54.65521 l 23.35027 54.65521 l 25.29552 55.89183 27.42503 56.8308 29.65022 57.42607 c 28.5518 61.53273 l 22.20932 59.83197 16.70659 55.8741 13.07826 50.40327 c 57.96465 50.40327 l 54.33632 55.8741 48.8336 59.8355 42.4911 61.53273 c 41.38914 57.42607 l 43.61787 56.8308 45.74384 55.89183 47.6891 54.65521 c 37.64743 54.65521 l 37.64743 66.63155 l 21.3483 46.15132 m 21.3483 41.89938 l 49.69461 41.89938 l 49.69461 46.15132 l 21.3483 46.15132 l 8.94678 37.64743 m 8.94678 33.3955 l 62.09612 33.3955 l 62.09612 37.64743 l 8.94678 37.64743 l 21.3483 29.14354 m 21.3483 24.89159 l 49.69461 24.89159 l 49.69461 29.14354 l 21.3483 29.14354 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 23.574 -47.789 cm Q Q Q Q Q Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F1 24.795 Tf 130.694 11.127 Td[<352d2ff7283f3d2c>]TJ /F2 20.6625 Tf -18.039 -24.906 Td[<00220032001c004b00320060>]TJ /F1 24.795 Tf 85.667 0 Td[<3ed93758>]TJ ET BT /F3 10.9091 Tf 109.058 -32.494 Td[<0054003b003700510060004d001c004b0032004d00690040003f001c004d>]TJ /F1 13.0909 Tf 90.087 0 Td[<285b2fc628412e89>]TJ ET 0 G 0 g BT /F4 10.9091 Tf 163.92 -71.838 Td[<2f222ef73e88>]TJ ET BT /F5 10.9091 Tf 135.747 -116.162 Td[<006b00790052004e>]TJ /F4 10.9091 Tf 25.451 0 Td[<3170>]TJ /F5 10.9091 Tf 14.542 0 Td[<0033>]TJ /F4 10.9091 Tf 9.087 0 Td[<3d28>]TJ /F5 10.9091 Tf 14.542 0 Td[<00520052>]TJ /F4 10.9091 Tf 14.542 0 Td[<3453>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -21.073 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+158 0 obj
+<</Length 1909>>
+stream
+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü
+endstream
+endobj
+159 0 obj
+<</Length1 63320/Length 63320>>
+stream
+
+l
+
+f‘kM!".
+  %GNY6-ZM:   „  
+  
+
+
+
+endstream
+endobj
+160 0 obj
+<</Length 357>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /VYDQHA+STLibianSC-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+1 beginbfchar
+<3BA5> <4E00>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+161 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 120 0 R/Font<</F6 155 0 R/F1 121 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+250236>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 65.933 98.752 cm 0 G 0 g q 1 0 0 1 9.11 -219.653 cm q 0 G 0 g 0.3985 w q 0.952 0.90681 0.77692 RG 0.952 0.90681 0.77692 rg -28.0584 37.60146 m -25.00822 37.64153 -22.52483 35.71288 -21.77179 32.93307 c -18.37915 34.6374 -13.0859 30.05713 -14.08727 27.28534 c -6.75725 23.95277 -12.09453 16.44049 -16.95119 19.45863 c -20.12152 21.75577 -19.12216 25.02223 -15.6434 25.08432 c -17.89449 25.96754 -21.08286 25.02826 -19.63286 20.87857 c -18.70558 18.26299 -12.87561 15.7836 -9.509 19.5828 c -6.5089 21.86191 -0.05005 16.8711 -4.8987 12.77347 c -0.49666 3.39864 -13.32222 0.05005 -16.06198 6.91545 c -17.57004 11.23938 -11.28743 14.09528 -10.50235 8.90216 c -8.43153 12.7234 -17.22757 17.21555 -25.2766 10.05174 c -29.73068 5.39738 -35.1461 4.44206 -42.2999 6.33865 c -35.17213 6.0843 -29.87688 7.61041 -25.61505 14.81227 c -17.56804 13.06387 -19.69894 22.75916 -24.08897 22.78517 c -25.67914 27.6899 -32.156 29.09982 -35.30432 23.9628 c -40.69571 26.75862 -48.16191 19.95331 -42.60231 14.4778 c -48.34216 10.54843 -54.45854 13.78084 -57.43262 16.92516 c -61.23782 20.07547 -65.18321 20.29176 -68.73209 18.30504 c -70.28621 17.1014 -73.96324 15.23283 -78.23509 14.9104 c -75.77171 15.8577 -73.43253 16.9612 -70.34428 19.82713 c -66.7774 22.69707 -61.8847 22.69707 -56.57143 18.43521 c -47.51102 13.84293 -46.51767 25.25256 -52.72818 24.48952 c -55.17552 23.92474 -55.85246 21.72372 -54.11006 20.93265 c -54.51862 22.4387 -53.79562 23.53821 -51.95111 23.4601 c -47.61517 21.82587 -51.13399 16.20616 -56.36115 19.4406 c -59.7698 21.69969 -58.04945 26.81468 -53.4011 26.3901 c -55.80438 30.3936 -50.56322 34.40709 -47.43492 31.66533 c -46.84813 33.11932 -44.84338 34.01254 -43.2512 33.22546 c -41.49078 32.08191 -42.5242 29.49635 -41.47476 28.20059 c -36.536 21.5575 -29.14789 30.28345 -36.52399 32.22209 c -30.6239 28.33078 -39.95268 23.65637 -41.1343 30.45168 c -41.88333 35.41046 -35.62276 37.28503 -33.91241 35.15611 c -31.92369 36.84242 -29.8889 37.57542 -28.0584 37.60146 c -30.07916 25.69316 m -28.12448 25.75525 -26.08769 24.63771 -24.72183 21.68567 c -20.74838 21.95203 -20.26773 12.75343 -26.13577 16.5887 c -31.38095 2.5034 -53.03459 6.91545 -60.31056 13.94307 c -62.51157 16.01791 -66.29474 16.1581 -69.37497 14.36766 c -72.15877 12.16264 -77.74242 12.27478 -81.0169 14.44577 c -78.39331 13.77885 -75.3191 13.84094 -71.06728 15.8577 c -66.86952 18.57541 -63.89746 19.18225 -60.97746 17.92252 c -58.10753 16.34837 -57.04608 14.49783 -54.1321 12.82553 c -48.79478 10.62852 -44.29062 11.1753 -41.82925 13.7448 c -40.44736 11.9143 -34.52927 13.68271 -35.90314 17.35574 c -37.21494 21.51944 -41.70908 19.90323 -40.71573 17.18953 c -40.15897 19.0861 -38.21028 19.47664 -37.26901 17.00127 c -36.77234 15.66544 -40.1169 12.71939 -42.58829 16.28227 c -44.95753 18.81573 -40.68568 25.41878 -34.94382 22.62695 c -33.9064 24.38937 -32.03384 25.63107 -30.07916 25.69316 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.821 179.42 cm 0 G 0 g q 1 0 0 1 106.377 -240.2 cm q 0 G 0 g 0.3985 w q 0.94695 0.897 0.75342 RG 0.94695 0.897 0.75342 rg -134.13857 75.74884 m -129.17693 75.6998 -124.60756 71.91057 -124.06815 65.63829 c -120.05602 67.14061 -116.76163 66.7483 -114.62183 65.06322 c -112.45975 63.36029 -111.48346 60.36012 -112.0942 56.78041 c -112.0942 56.7715 l -112.09865 56.75813 l -112.90555 54.58267 -114.07796 53.49939 -115.45546 53.0224 c -116.83742 52.5454 -118.40213 52.67021 -120.02483 52.853 c -121.64305 53.03577 -123.31921 53.27649 -124.90623 53.07144 c -126.49326 52.86191 -127.99112 52.21552 -129.29282 50.59729 c -130.64357 48.48424 -130.04622 46.21071 -128.69547 44.98477 c -128.02231 44.36958 -127.16194 44.02187 -126.25699 44.08429 c -125.35648 44.14668 -124.4114 44.61478 -123.55548 45.6713 c -122.3251 47.37868 -119.9089 48.881 -117.14946 49.89294 c -114.43907 50.8826 -111.39876 51.3908 -108.80426 51.12779 c -110.02127 55.02846 -109.66017 59.10744 -107.71652 62.06305 c -105.74612 65.05876 -102.16643 66.89096 -97.07549 66.19553 c -97.07104 66.19553 l -97.06657 66.19107 l -93.2417 65.37973 -91.1019 63.36029 -90.21922 61.03328 c -89.33655 58.7107 -89.70656 56.08945 -90.8567 54.07 c -92.00684 52.05057 -93.95049 50.62404 -96.2151 50.7132 c -98.44852 50.80681 -100.95834 52.39383 -103.3121 56.24101 c -103.96742 55.28702 -104.16357 53.8917 -103.84705 52.43396 c -103.52164 50.90933 -102.65234 49.33571 -101.23918 48.19002 c -101.23473 48.19002 l -101.23473 48.19002 l -98.18106 45.51973 -94.83762 44.98924 -91.26236 45.58214 c -87.68712 46.17505 -83.88452 47.8958 -79.9794 49.73244 c -76.07425 51.56467 -72.06215 53.51277 -68.0411 54.54254 c -64.02452 55.56786 -59.99457 55.67485 -56.07607 53.82483 c -55.60353 53.60638 l -56.12065 53.6153 l -68.34424 53.85158 -74.61206 49.28667 -80.0017 45.28346 c -82.69426 43.28632 -85.16841 41.42291 -88.05713 40.37975 c -90.90575 39.34998 -94.16447 39.14046 -98.39948 40.37083 c -97.61044 35.55629 -98.74274 32.06573 -100.82013 29.79666 c -102.9198 27.50084 -105.96457 26.44878 -108.89787 26.47107 c -111.83119 26.49782 -114.66641 27.59445 -116.34259 29.62282 c -118.01875 31.65562 -118.5225 34.61568 -116.81958 38.29791 c -116.72597 38.49852 l -116.62344 38.30682 l -115.35739 36.04666 -113.89964 34.86977 -112.52216 34.4418 c -111.14912 34.0094 -109.84296 34.31255 -108.87112 35.03471 c -107.89485 35.75243 -107.2529 36.8892 -107.20833 38.12404 c -107.16374 39.35443 -107.71207 40.68736 -109.14305 41.81075 c -109.1475 41.8152 l -112.39734 44.06198 -116.51643 43.77669 -119.58795 41.4675 c -122.65945 39.16275 -124.68333 34.8341 -123.71152 28.9675 c -123.12752 25.63298 -121.58955 23.15884 -119.29819 21.62978 c -117.00682 20.10518 -113.95761 19.51672 -110.35115 19.9848 c -103.13826 20.92543 -93.71422 26.10106 -83.80875 36.36317 c -83.80429 36.36765 l -83.79982 36.3721 l -67.75133 49.56305 -53.78915 54.0388 -40.3441 51.66273 c -26.89903 49.28667 -13.99336 40.07216 -0.03119 25.92722 c -0.1783 25.7578 l -12.60696 34.99905 -24.84839 43.81235 -37.82983 46.45143 c -50.81126 49.08606 -64.5461 45.56432 -80.02397 30.08197 c -80.02397 30.08197 -80.02397 30.07751 -80.02844 30.07751 c -90.41537 17.4839 -100.97617 9.95895 -111.00647 7.16385 c -121.04123 4.36427 -130.55441 6.30794 -138.806 12.6248 c -138.806 12.6248 l -138.806 12.62924 l -145.28336 17.90742 -148.60895 25.85588 -152.26445 32.24406 c -154.0922 35.44038 -156.00018 38.24442 -158.41637 40.13457 c -160.8281 42.02919 -163.74358 43.01439 -167.62196 42.58197 c -167.62196 42.58197 l -167.62196 42.58197 l -169.00836 42.45714 -170.03815 41.7617 -170.72021 40.77206 c -171.40672 39.7824 -171.74107 38.50298 -171.71878 37.22356 c -171.69203 35.94412 -171.30865 34.67363 -170.56418 33.70181 c -169.81972 32.73442 -168.72305 32.0613 -167.25195 31.97212 c -165.87892 31.91864 -164.97395 32.27081 -164.43456 32.81023 c -163.89514 33.34962 -163.7079 34.08519 -163.80597 34.8341 c -164.00212 36.33643 -165.33951 37.85211 -167.21628 37.77634 c -167.49713 37.76297 l -167.29654 37.96803 l -166.30687 38.95767 -165.07202 39.55504 -163.85057 39.43022 c -162.62909 39.30986 -161.44328 38.4673 -160.56953 36.65294 c -160.56953 36.64848 l -160.56508 36.64403 l -159.29012 33.60817 -159.82062 31.0003 -161.29172 29.15027 c -162.75838 27.30469 -165.15228 26.21251 -167.5952 26.1501 c -170.03815 26.08768 -172.53903 27.05951 -174.19737 29.35088 c -175.85126 31.63333 -176.66261 35.21748 -175.7933 40.35301 c -178.29866 42.38136 -178.37889 46.0101 -176.76514 48.72496 c -175.15584 51.42647 -171.8436 53.21855 -167.59966 51.65382 c -167.72449 52.94661 -167.43472 54.1547 -166.73036 55.05075 c -165.99927 55.98691 -164.84021 56.58426 -163.34236 56.61548 c -160.34218 56.6868 -155.9868 54.52917 -150.73093 48.404 c -148.81848 46.27757 -144.38286 45.61334 -140.36627 46.74565 c -136.34525 47.87796 -132.76108 50.7756 -132.47578 55.71944 c -132.47578 55.72389 l -131.85165 65.82997 -144.51215 66.08855 -145.82722 60.79254 c -145.82722 60.79254 l -145.82722 60.78809 l -146.59398 58.00633 -145.71577 55.86655 -144.29369 54.74315 c -142.92957 53.66432 -141.084 53.5529 -139.66193 54.70749 c -141.084 55.06413 -142.0692 55.5857 -142.61307 56.18752 c -143.18814 56.83391 -143.3085 57.56055 -143.04994 58.18465 c -142.53728 59.43288 -140.61147 60.23976 -138.19083 59.47299 c -138.18636 59.47299 l -138.18636 59.46854 l -136.18028 58.7419 -135.28426 56.53523 -136.03317 54.39098 c -136.78212 52.24672 -139.1671 50.16489 -143.65622 49.60318 c -143.66068 49.60318 l -143.66068 49.60318 l -146.95062 49.28667 -149.46042 50.36101 -151.16335 52.13974 c -152.86627 53.91843 -153.7623 56.39258 -153.85146 58.88455 c -153.94508 61.37207 -153.22736 63.87741 -151.69383 65.71407 c -150.16922 67.53735 -147.82881 68.6875 -144.70383 68.50919 c -142.10931 73.54662 -138.0125 75.7845 -134.13857 75.74884 c -134.13857 75.52592 m -137.94116 75.56161 -141.98006 73.37277 -144.53888 68.35316 c -144.57454 68.28629 l -144.64587 68.29074 l -147.74858 68.49135 -150.02657 67.3635 -151.51997 65.57588 c -153.01784 63.78825 -153.71773 61.33195 -153.62857 58.89346 c -153.54387 56.45053 -152.6612 54.02542 -151.00285 52.2913 c -149.34451 50.56163 -146.91049 49.51402 -143.68297 49.82608 c -139.2518 50.37885 -136.96042 52.41612 -136.2427 54.46675 c -135.52498 56.51294 -136.36752 58.5725 -138.25769 59.259 c -140.60254 60.0035 -142.39462 59.19661 -142.84486 58.09996 c -143.06778 57.55164 -142.9786 56.93199 -142.44366 56.33908 c -141.91318 55.74619 -140.928 55.18895 -139.38107 54.84122 c -139.17155 54.79665 l -139.32759 54.64952 l -140.85219 53.27205 -142.94295 53.38794 -144.43188 54.56929 c -145.92531 55.75064 -146.82579 57.99742 -146.04565 60.84604 c -146.0412 60.84604 l -144.64587 66.463 -131.61984 65.99937 -132.25287 55.70605 c -132.54709 50.6597 -136.22487 47.68182 -140.30386 46.53168 c -144.38286 45.38153 -148.88535 46.02348 -150.90031 48.25688 c -150.90031 48.25688 l -150.90031 48.26134 l -156.13391 54.35977 -160.44917 56.45944 -163.33345 56.39258 c -164.7778 56.36137 -165.86554 55.79523 -166.55652 54.91255 c -167.25195 54.03435 -167.55063 52.8307 -167.39015 51.52008 c -167.36786 51.3373 l -167.53726 51.40417 l -171.76337 53.03133 -174.99088 51.26598 -176.57346 48.60907 c -178.15155 45.9566 -178.06238 42.41702 -175.61053 40.47783 c -175.55704 40.43771 l -175.57042 40.3753 l -176.44417 35.24423 -175.63283 31.71356 -174.01906 29.48015 c -172.40083 27.2512 -169.9802 26.3106 -167.59966 26.36855 c -165.21913 26.43094 -162.8832 27.50084 -161.46559 29.28847 c -160.0435 31.0761 -159.52193 33.58144 -160.77014 36.55933 c -160.77014 36.55933 -160.77014 36.55933 -160.7746 36.55933 c -161.6216 38.32465 -162.74054 39.09587 -163.87285 39.21179 c -164.93384 39.31432 -166.02156 38.7972 -166.9399 37.9502 c -165.10324 37.8655 -163.78816 36.38992 -163.58755 34.86533 c -163.48056 34.05843 -163.68562 33.2471 -164.27853 32.64973 c -164.87143 32.05682 -165.84326 31.69128 -167.25641 31.74924 c -167.26086 31.74924 l -167.26086 31.74924 l -168.79886 31.84285 -169.96236 32.55167 -170.73805 33.56805 c -171.51817 34.58447 -171.91492 35.89955 -171.93723 37.2191 c -171.96396 38.53864 -171.62071 39.86264 -170.90297 40.89687 c -170.18526 41.9311 -169.09308 42.67113 -167.64424 42.80486 c -163.71683 43.24173 -160.73003 42.23425 -158.27817 40.31288 c -155.82632 38.38707 -153.90495 35.56075 -152.07275 32.35551 c -148.4039 25.94502 -145.08722 18.03223 -138.66336 12.79865 c -130.46078 6.51744 -121.04123 4.59608 -111.06442 7.37784 c -101.09207 10.1551 -90.56248 17.65332 -80.18892 30.22908 c -80.18892 30.23355 l -80.18445 30.238 l -64.66646 45.75154 -50.83357 49.31787 -37.78523 46.66542 c -25.16936 44.10657 -13.28902 35.73907 -1.2794 26.83215 c -14.80472 40.33963 -27.36266 49.14401 -40.37975 51.44429 c -53.7535 53.80699 -67.6399 49.36691 -83.65271 36.2027 c -83.65718 36.2027 -83.65718 36.2027 -83.65718 36.2027 c -93.58493 25.92274 -103.03572 20.7159 -110.3244 19.76636 c -113.96652 19.28937 -117.07368 19.88226 -119.41855 21.447 c -121.7634 23.01173 -123.3415 25.54828 -123.92996 28.93184 c -123.92996 28.93184 l -124.91515 34.86533 -122.86006 39.28757 -119.72168 41.6458 c -116.57886 44.00403 -112.3483 44.29825 -109.01825 41.99352 c -109.01378 41.99352 l -109.01378 41.98906 l -107.5293 40.83 -106.94084 39.42131 -106.98543 38.11514 c -107.03445 36.81342 -107.71207 35.61424 -108.73738 34.85194 c -109.76271 34.09409 -111.14467 33.77312 -112.58902 34.22784 c -113.9888 34.66472 -115.43318 35.84605 -116.68585 38.0037 c -118.24612 34.4775 -117.76021 31.69128 -116.16872 29.76547 c -114.54605 27.79953 -111.7777 26.71625 -108.89787 26.69397 c -106.01805 26.67166 -103.03572 27.7059 -100.98062 29.94824 c -98.92998 32.18611 -97.79767 35.64099 -98.6313 40.49567 c -98.65805 40.66951 l -98.48863 40.62048 l -94.2135 39.3455 -90.97707 39.5595 -88.12846 40.58928 c -85.2843 41.61461 -82.828 43.46461 -80.13095 45.46623 c -74.83496 49.3981 -68.58498 53.88724 -56.71802 53.82036 c -60.40916 55.38509 -64.18947 55.29593 -67.98761 54.32411 c -71.97743 53.30771 -75.98065 51.36852 -79.88579 49.53186 c -83.79536 47.69519 -87.60689 45.96106 -91.22224 45.3637 c -94.84209 44.76189 -98.27466 45.30576 -101.37738 48.02063 c -101.37738 48.02063 l -102.83511 49.20195 -103.7267 50.81573 -104.0655 52.38492 c -104.4043 53.95854 -104.19032 55.49208 -103.41017 56.51294 c -103.3121 56.64221 l -103.22742 56.50403 l -100.86472 52.56769 -98.37274 51.02525 -96.20619 50.9361 c -94.03966 50.85138 -92.17178 52.21552 -91.0484 54.18146 c -89.92946 56.14738 -89.57281 58.70178 -90.42874 60.95747 c -91.2802 63.20872 -93.34421 65.17465 -97.11116 65.97264 c -102.13522 66.65915 -105.60793 64.87154 -107.5293 61.94267 c -109.45512 59.01382 -109.8162 54.93483 -108.55907 51.04753 c -108.51004 50.8826 l -108.67944 50.90042 l -111.25612 51.19464 -114.34099 50.68199 -117.07368 49.68341 c -119.81084 48.68039 -122.19136 47.187 -123.37717 45.53757 c -123.38164 45.5331 l -123.38164 45.52864 l -124.26877 44.43645 -125.27625 43.92825 -126.2436 43.86137 c -127.21098 43.79453 -128.13376 44.17345 -128.84703 44.81984 c -130.27356 46.11708 -130.88875 48.5199 -129.47559 50.71765 c -129.47113 50.72658 l -129.46669 50.73103 l -128.1293 52.39383 -126.56458 53.0759 -124.93298 53.28987 c -123.30585 53.50386 -121.61629 53.25421 -119.99808 53.07144 c -118.38432 52.89311 -116.84633 52.7772 -115.53127 53.23192 c -114.21617 53.68661 -113.1017 54.70303 -112.30818 56.825 c -111.71527 60.34674 -112.67372 63.24438 -114.76001 64.88934 c -116.85078 66.53432 -120.0917 66.93553 -124.11719 65.3931 c -124.25539 65.33961 l -124.26877 65.48672 l -124.74576 71.74562 -129.2527 75.4769 -134.13857 75.52592 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -18.946 8.018 cm 0 G 0 g q 1 0 0 1 -77.681 -237.804 cm q 0 G 0 g 0.3985 w q 0.94676 0.89665 0.7526 RG 0.94676 0.89665 0.7526 rg 51.88771 69.62308 m 46.24008 69.69714 41.63681 66.14192 40.20361 61.01648 c 37.03725 62.54225 33.03761 61.20906 30.04901 58.85371 c 28.54175 57.66495 27.28632 56.21321 26.52342 54.73558 c 25.77534 53.28387 25.5087 51.79881 25.9457 50.50266 c 22.58675 48.95834 20.6536 46.93631 19.80923 44.84392 c 18.95747 42.73671 19.2056 40.56653 20.16475 38.77042 c 22.0831 35.18187 26.86041 33.08575 31.39334 35.904 c 31.39703 35.904 l 31.40073 35.90771 l 34.35231 38.04456 35.38184 40.65543 34.83745 42.75522 c 34.31897 44.75133 32.3488 46.21416 29.375 46.41414 c 31.34889 47.06592 33.60794 46.99928 35.12633 45.91048 c 35.94106 45.32906 36.541 44.46617 36.778 43.26999 c 37.01501 42.07751 36.88171 40.54433 36.21509 38.6371 c 35.37814 36.26694 32.27472 33.919 28.6121 33.05244 c 24.94948 32.18585 20.73877 32.7858 17.65018 36.27435 c 17.64647 36.27806 l 17.63905 36.28546 l 16.22438 37.35944 14.40973 37.57423 12.62843 37.17796 c 10.85081 36.78171 9.10283 35.7781 7.81036 34.40045 c 6.51788 33.02281 5.68092 31.26741 5.73648 29.375 c 5.78833 27.4937 6.73639 25.49019 8.95099 23.59776 c 6.94008 19.27223 6.88821 15.62444 8.05109 12.79138 c 9.22133 9.94719 11.6026 7.92517 14.39493 6.8549 c 17.18726 5.78462 20.39067 5.65872 23.22374 6.59937 c 26.0531 7.54001 28.5084 9.55463 29.78607 12.75433 c 29.78607 12.75433 l 29.78607 12.75804 l 31.19705 16.7984 28.96393 20.17216 26.18642 21.3091 c 24.79395 21.87572 23.26077 21.89052 21.98311 21.14243 c 20.7647 20.4314 19.80553 19.00562 19.40187 16.77989 c 18.63156 18.42787 18.91301 20.11662 20.05365 21.57944 c 21.25354 23.12373 23.37556 24.40509 26.08272 25.05319 c 31.50073 26.34935 39.25555 25.12354 46.68079 18.51677 c 54.93556 9.89165 64.99759 8.12143 78.24448 11.63223 c 79.037 11.8433 l 78.21486 11.81367 l 71.63399 11.57666 65.9049 12.16551 60.8424 14.469 c 55.77992 16.77248 51.38034 20.79062 47.44737 27.43816 c 47.41034 27.4937 l 47.3474 27.47888 l 43.64404 26.67525 41.12944 27.19002 39.56293 28.39731 c 37.9927 29.6009 37.35204 31.50813 37.4224 33.52646 c 37.49275 35.5485 38.27417 37.67793 39.54073 39.29628 c 40.80725 40.91837 42.54784 42.02937 44.54395 42.04047 c 44.61061 42.04047 l 44.63281 42.10344 l 46.09195 46.60672 49.7916 49.50275 53.84677 50.09528 c 57.90196 50.6878 62.30894 48.98427 65.20497 44.2625 c 65.2494 44.18843 l 65.32718 44.22916 l 70.26746 46.79189 76.1706 44.95131 79.55547 41.21463 c 81.2516 39.34444 82.31078 37.00761 82.31818 34.51155 c 82.32187 32.01178 81.27013 29.35649 78.71481 26.83821 c 78.63333 26.76044 l 78.72592 26.69746 l 84.05504 23.04596 89.56935 22.72008 94.43185 24.03847 c 99.29065 25.35686 103.50508 28.31215 106.26407 31.23038 c 113.27823 37.03355 120.51828 37.42609 127.05101 33.76718 c 127.05101 33.76718 127.05101 33.76718 127.05101 33.76718 c 129.95074 31.52664 136.7464 28.07883 144.66046 27.47888 c 145.29004 27.43443 l 144.7012 27.65665 l 140.15347 29.40833 135.84277 31.43777 130.13962 36.72986 c 130.13591 36.73357 l 130.13591 36.73357 l 126.8214 39.39998 122.88475 40.73691 118.54811 40.4147 c 114.21518 40.0888 109.486 38.11122 104.56795 34.17085 c 100.39426 32.05623 97.16124 31.7896 94.84293 32.54137 c 92.52463 33.29315 91.10625 35.06335 90.55444 37.05576 c 90.00264 39.04816 90.32483 41.26277 91.48769 42.88113 c 92.64684 44.5032 94.64664 45.54015 97.48712 45.19203 c 99.72395 44.67357 101.13492 43.41443 101.59784 42.12195 c 101.83116 41.47757 101.82376 40.82208 101.56822 40.24434 c 101.3349 39.71106 100.8646 39.25185 100.18687 38.90002 c 100.49425 40.21843 100.34982 41.38129 99.69432 42.19972 c 99.0092 43.0663 97.7871 43.54774 96.06133 43.47366 c 96.04652 43.47366 l 96.03171 43.46626 l 94.00967 42.70338 92.88385 41.46646 92.50981 40.12955 c 92.13576 38.79263 92.50612 37.36314 93.43935 36.2299 c 95.30585 33.96346 99.40916 32.86357 104.26796 35.87068 c 104.27167 35.87068 l 104.27167 35.87068 l 107.45656 37.9816 108.25278 41.44052 107.15659 44.26619 c 106.0752 47.05852 103.13844 49.22128 98.8944 48.89539 c 101.02011 52.58394 99.71284 56.28358 97.12419 58.42413 c 94.53185 60.57578 90.66183 61.16832 87.74359 58.69077 c 86.58444 61.372 82.89589 62.98296 79.93692 61.52013 c 79.93321 61.52013 l 79.92952 61.51642 l 78.2667 60.43875 77.92229 58.67224 77.75194 56.90945 c 77.57788 55.14294 77.56306 53.36905 76.62242 52.20619 c 76.62242 52.20248 l 76.61871 52.20248 l 74.34856 49.14722 71.80804 47.86955 69.48605 47.71402 c 67.16405 47.55847 65.04942 48.52505 63.64215 49.97678 c 62.23486 51.43219 61.53494 53.36905 62.02008 55.15778 c 62.47559 56.8391 64.0384 58.38339 67.03813 59.30553 c 64.6791 57.60197 63.75696 55.82436 63.86806 54.26155 c 63.99026 52.59503 65.21608 51.20628 66.85295 50.4508 c 68.48613 49.69533 70.5341 49.56569 72.31541 50.42488 c 74.09673 51.28404 75.60399 53.13203 76.15579 56.2947 c 76.15579 56.2947 l 76.15579 56.2947 l 76.85204 60.92018 74.27449 64.1236 71.13405 65.65677 c 69.5601 66.42339 67.84546 66.7789 66.31967 66.69371 c 64.82724 66.60854 63.51994 66.09377 62.70149 65.1272 c 59.03148 68.2158 55.27628 69.57864 51.88771 69.62308 c 51.88399 69.4379 m 55.24295 69.39346 58.98703 68.04544 62.64966 64.93832 c 62.72002 64.87537 l 62.77927 64.94945 l 63.54956 65.90862 64.83833 66.42339 66.33078 66.50856 c 67.81955 66.59003 69.50827 66.2456 71.05257 65.49013 c 74.14116 63.98285 76.65945 60.86833 75.97063 56.32433 c 75.42993 53.2061 73.96341 51.42108 72.23764 50.59152 c 70.50818 49.76196 68.51576 49.88417 66.92702 50.62115 c 65.34198 51.35442 64.16803 52.69133 64.05322 54.27637 c 63.93842 55.86139 64.87907 57.71678 67.58994 59.50551 c 68.05656 59.81288 l 67.51585 59.67215 l 64.08656 58.77223 62.34598 57.0687 61.84233 55.20592 c 61.33867 53.34311 62.06822 51.33961 63.50883 49.85085 c 64.95314 48.3584 67.1159 47.36961 69.49716 47.52884 c 71.87842 47.69179 74.47076 49.00278 76.76683 52.08769 c 76.76683 52.09138 l 77.76305 53.3246 77.76305 55.13554 77.93341 56.89093 c 78.10747 58.64262 78.43335 60.32393 80.02579 61.35718 c 82.91441 62.78297 86.56592 61.14978 87.62878 58.5204 c 87.67693 58.3982 l 87.77693 58.48337 l 90.63222 60.98685 94.44666 60.40541 97.00938 58.2834 c 99.5684 56.15767 100.86829 52.50986 98.66849 48.84724 c 98.5759 48.6917 l 98.75737 48.70653 l 103.01994 49.09537 105.91966 46.95113 106.98622 44.19954 c 108.0528 41.45164 107.28992 38.0927 104.17168 36.02623 c 99.36472 33.05244 95.3836 34.15973 93.58379 36.34842 c 92.68387 37.44092 92.32834 38.80374 92.68756 40.0777 c 93.04309 41.35165 94.10966 42.54044 96.08727 43.28851 c 97.76117 43.35516 98.91292 42.89226 99.5536 42.08492 c 100.19427 41.27759 100.3424 40.10362 99.96837 38.72968 c 99.91653 38.5445 l 100.09798 38.62227 l 100.92014 38.99632 101.46452 39.54073 101.73859 40.17027 c 102.01262 40.79614 102.01631 41.49979 101.7719 42.1849 c 101.28307 43.55145 99.80913 44.84763 97.52415 45.3735 c 97.52046 45.3772 l 97.51305 45.3772 l 94.61703 45.73273 92.53574 44.66246 91.33585 42.99223 c 90.13965 41.31833 89.81377 39.05186 90.37668 37.00761 c 90.94328 34.96338 92.40982 33.13762 94.78737 32.36731 c 97.16864 31.59702 100.4498 31.87477 104.65312 34.0079 c 104.66052 34.01161 l 104.66794 34.01901 l 109.57117 37.94827 114.27072 39.91106 118.56291 40.22954 c 122.85512 40.54803 126.73993 39.23334 130.0211 36.59283 c 135.47615 31.53035 139.68315 29.44907 144.01978 27.74182 c 136.42792 28.4751 129.92851 31.77477 127.15471 33.92271 c 127.14731 33.92644 l 127.1436 33.93013 l 120.55162 37.61867 113.20415 37.2113 106.14186 31.3674 c 106.13817 31.36371 l 106.13446 31.36 l 103.39397 28.46397 99.20549 25.52722 94.38371 24.21992 c 89.58786 22.92006 84.17726 23.23114 78.91849 26.79376 c 81.44049 29.31575 82.50705 31.98958 82.49963 34.51155 c 82.49593 37.05946 81.41086 39.44072 79.6925 41.33684 c 76.2706 45.11426 70.3267 46.97334 65.31607 44.42174 c 62.38672 49.14722 57.92416 50.87668 53.82085 50.27673 c 49.71384 49.6768 45.97343 46.75116 44.47728 42.21825 c 42.44414 42.18121 40.67024 41.04797 39.39629 39.41109 c 38.1038 37.7594 37.30759 35.59663 37.23723 33.53387 c 37.16687 31.4711 37.82605 29.49721 39.44814 28.24918 c 41.06279 27.00856 43.62181 26.50119 47.32147 27.29002 c 51.26184 20.6536 55.68364 16.61324 60.76836 14.30235 c 65.63826 12.08403 71.13774 11.47298 77.3705 11.62852 c 64.5791 8.42142 54.8467 10.25087 46.8067 18.65009 c 46.803 18.65378 l 46.803 18.65378 l 39.34073 25.2976 31.52295 26.54193 26.04199 25.23094 c 23.3015 24.57545 21.14243 23.27928 19.90921 21.69423 c 18.6723 20.1055 18.36493 18.21309 19.3389 16.41696 c 19.46852 16.17624 l 19.51297 16.4466 l 19.8722 18.82784 20.85728 20.26845 22.07939 20.98318 c 23.2978 21.69794 24.76804 21.68683 26.11604 21.13873 c 28.80838 20.03514 30.99336 16.77248 29.61572 12.81729 c 29.61572 12.81729 29.61572 12.81729 29.61201 12.81729 c 28.35658 9.66943 25.9494 7.69926 23.16447 6.77342 c 20.37584 5.84758 17.21318 5.97351 14.45789 7.02895 c 11.70628 8.08441 9.36948 10.0694 8.22144 12.86174 c 7.0734 15.65778 7.11414 19.26483 9.13986 23.57925 c 9.1732 23.6422 l 9.11763 23.69034 l 6.89194 25.57166 5.97351 27.54184 5.91794 29.37871 c 5.8661 31.21556 6.67714 32.92651 7.94368 34.27454 c 9.21024 35.62256 10.92859 36.61136 12.66917 36.9965 c 14.40973 37.38535 16.16512 37.17056 17.52797 36.13733 c 17.52797 36.13733 17.52797 36.13733 17.52797 36.13733 c 20.6647 32.61172 24.94948 31.99327 28.65654 32.87097 c 32.36731 33.74867 35.51515 36.1077 36.38914 38.57784 c 36.38914 38.57784 l 37.06316 40.5073 37.2039 42.07011 36.95947 43.30702 c 36.71506 44.54395 36.08179 45.45497 35.2337 46.06232 c 33.54128 47.27702 30.99707 47.29555 28.89357 46.4697 c 28.46027 46.29933 l 28.9269 46.29193 l 32.11179 46.23639 34.13751 44.71802 34.65599 42.71078 c 35.17816 40.69987 34.20047 38.16676 31.29333 36.05586 c 26.84561 33.29686 22.2016 35.35591 20.3277 38.85928 c 19.39075 40.60727 19.15004 42.71819 19.98329 44.77356 c 20.81284 46.82892 22.71637 48.83614 26.08643 50.36931 c 26.1642 50.40636 l 26.13457 50.48413 l 25.68646 51.73587 25.94199 53.1987 26.68637 54.6504 c 27.43443 56.0984 28.67506 57.53162 30.16382 58.70929 c 33.14502 61.0572 37.12982 62.36821 40.21843 60.8165 c 40.3184 60.76465 l 40.34805 60.87575 l 41.72939 65.97527 46.28082 69.51196 51.88399 69.4379 c 55.62437 47.60292 m 51.984 47.71773 48.19176 45.63274 45.65495 40.1851 c 43.81439 40.28508 42.37009 39.30371 41.42203 37.889 c 40.45915 36.45581 39.99623 34.58192 40.10362 32.908 c 40.21472 31.23409 40.90355 29.74904 42.27008 29.14168 c 43.62181 28.54175 45.61052 28.8232 48.28433 30.54527 c 50.72484 24.06808 55.04297 19.70183 60.36098 17.0132 c 65.70863 14.30975 72.05618 13.29132 78.52223 13.49501 c 91.44695 13.90608 104.83458 19.19449 111.5858 25.71608 c 111.58951 25.71608 l 115.62245 29.51573 122.57365 29.78236 128.23979 26.48639 c 130.83583 24.43472 134.71696 23.46814 138.70918 23.51259 c 142.7051 23.55702 146.81583 24.6162 149.86368 26.6345 c 150.31549 26.9345 l 149.78961 26.80118 l 144.95674 25.57166 139.30171 25.68275 131.45801 29.40463 c 131.4543 29.40463 131.4543 29.40463 131.4543 29.40463 c 127.57318 31.9192 124.25127 33.45981 121.21823 34.08195 c 118.18146 34.70042 115.43358 34.39674 112.71901 33.22649 c 112.71532 33.2228 l 112.71162 33.2228 l 107.3899 30.30084 105.42711 26.88264 100.05725 23.79774 c 90.21373 19.74997 81.93303 20.7647 77.41493 25.47906 c 77.34087 25.55684 l 77.2742 25.47166 l 76.65945 24.65692 75.52621 24.23103 74.19672 24.16808 c 72.8672 24.10513 71.35254 24.40509 69.9971 25.02356 c 68.64168 25.6383 67.4492 26.56786 66.75298 27.75664 c 66.05673 28.9417 65.84935 30.38602 66.47522 32.05994 c 66.47893 32.06364 l 66.47893 32.06734 l 67.68251 35.8818 70.3156 37.02243 72.4228 36.61876 c 73.47456 36.41508 74.393 35.82625 74.93738 34.98189 c 75.44104 34.20047 75.60399 33.19685 75.267 32.07475 c 74.70778 33.6857 73.60048 34.68932 72.37466 34.73375 c 71.07478 34.7856 69.70825 33.782 68.83055 31.4711 c 68.83055 31.4711 l 68.58614 30.8082 68.81575 29.97864 69.34903 29.20834 c 69.8786 28.43805 70.72298 27.72331 71.7414 27.29002 c 73.77454 26.43083 76.5187 26.73451 78.81851 30.0453 c 79.93692 31.24149 80.27022 32.9154 79.97395 34.65968 c 79.6814 36.40398 78.76295 38.2223 77.3779 39.72958 c 74.6115 42.73302 69.96007 44.49951 64.64575 41.9516 c 62.7052 45.19945 59.24997 47.48811 55.62437 47.60292 c 55.61697 47.41774 m 59.19443 47.30293 62.63484 45.02908 64.53836 41.79236 c 64.5791 41.72198 l 64.65686 41.75902 l 69.93045 44.32175 74.5078 42.57376 77.24088 39.60367 c 78.60742 38.12233 79.50732 36.32991 79.79248 34.63007 c 80.08136 32.92651 79.75545 31.31926 78.6852 30.17122 c 78.68147 30.16753 l 78.67776 30.16011 l 76.40762 26.89375 73.78194 26.6271 71.81175 27.46036 c 70.82666 27.87885 70.01193 28.57507 69.50085 29.31575 c 68.9861 30.0527 68.78981 30.83043 69.00461 31.40443 c 69.8675 33.6709 71.17108 34.59673 72.36726 34.55229 c 73.56345 34.50415 74.69296 33.48572 75.20033 31.75996 c 75.2818 31.48961 l 75.37808 31.75256 l 75.84471 33.0339 75.66695 34.19307 75.09293 35.08188 c 74.5189 35.97069 73.55603 36.58914 72.45613 36.80023 c 70.26006 37.2187 67.52696 36.00401 66.30487 32.12659 c 65.66048 30.40453 65.87158 28.89357 66.59373 27.66034 c 67.31589 26.43083 68.538 25.48276 69.91934 24.85321 c 71.30438 24.22734 72.8413 23.91995 74.20412 23.98291 c 75.52621 24.04587 76.68167 24.46806 77.35197 25.29391 c 81.95155 20.56102 90.2878 19.57962 100.13503 23.63109 c 100.13872 23.6348 l 100.14613 23.6348 l 105.54933 26.7382 107.51212 30.1564 112.7968 33.05614 c 115.48174 34.21529 118.18146 34.51524 121.1812 33.9005 c 124.18462 33.28574 127.4917 31.75626 131.36543 29.24538 c 131.36913 29.24168 l 131.37654 29.23798 l 138.9684 25.6383 144.53085 25.43462 149.28596 26.53082 c 146.32697 24.72357 142.4792 23.7385 138.70918 23.69777 c 134.74287 23.65332 130.8914 24.61989 128.34349 26.63821 c 128.33606 26.64563 l 128.33237 26.64563 l 122.607 29.97495 115.56691 29.72311 111.45988 25.84941 c 111.45988 25.84941 l 111.45988 25.84941 l 104.7568 19.37595 91.39511 14.08754 78.51482 13.68018 c 72.07469 13.4765 65.75307 14.49121 60.44244 17.17615 c 55.13554 19.86108 50.83224 24.21623 48.41394 30.7082 c 48.3769 30.8156 l 48.27693 30.75264 l 45.58089 28.98615 43.63292 28.73802 42.34785 29.30835 c 41.0591 29.88237 40.3962 31.28592 40.28879 32.91911 c 40.1814 34.54858 40.64061 36.39285 41.57387 37.78531 c 42.5071 39.18149 43.90697 40.12955 45.70679 40.00732 c 45.76976 40.00363 l 45.7994 40.05919 l 48.31396 45.49571 52.03954 47.53255 55.61697 47.41774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 133.729 197.885 cm 0 G 0 g q 1 0 0 1 100.27 -230.655 cm q 0 G 0 g 0.3985 w q 0.94745 0.898 0.7558 RG 0.94745 0.898 0.7558 rg -153.84566 57.66975 m -150.25192 57.5869 -146.84573 56.2218 -144.95729 53.67479 c -130.27707 65.2323 -109.61748 48.76395 -122.69273 35.92856 c -116.28159 22.14243 -137.23337 16.71257 -142.10933 25.93677 c -145.82518 33.77844 -141.06262 39.65749 -136.11688 38.09615 c -141.25017 34.45007 -140.4128 29.00714 -134.14557 29.05946 c -124.82104 29.51305 -126.10329 44.43315 -136.86703 48.09665 c -151.08495 51.76889 -161.15524 36.95784 -157.09485 27.23209 c -152.8033 14.98549 -136.05583 13.09268 -119.88838 22.07701 c -68.38553 53.20377 -72.30637 3.58499 -33.19402 19.06769 c -61.37253 1.4305 -70.18239 28.23955 -93.58089 22.41281 c -110.82121 18.3568 -113.79128 0.10902 -148.6993 2.74762 c -158.72162 2.89154 -183.64223 24.37106 -165.87856 38.40579 c -170.51463 51.80377 -161.744 57.84857 -153.84566 57.66975 c -50.95332 42.82817 m -45.08734 42.99828 -39.09053 39.28679 -39.27806 32.10368 c -39.71419 25.80157 -44.07988 23.74304 -48.13156 26.36418 c -51.28477 28.36166 -49.89789 32.56163 -44.89545 31.0526 c -42.99828 30.69498 -42.77148 32.75789 -44.67737 35.04758 c -48.30164 40.44254 -56.57507 37.83882 -57.01993 33.04135 c -57.5869 26.62587 -52.86359 20.69446 -44.74715 21.97668 c -38.99893 23.40285 -36.59586 25.22586 -35.78464 28.40092 c -34.00522 26.24641 -32.18655 26.11122 -29.58282 27.0053 c -22.15114 28.9679 -17.74184 23.07138 -10.3843 21.558 c -6.20615 20.7686 -2.86537 22.753 -0.10902 25.03397 c -2.38998 17.75056 -11.38304 17.06148 -17.29262 20.44586 c -25.34364 25.00781 -29.91429 24.82028 -41.13599 19.25087 c -54.98753 14.61041 -66.2354 25.90625 -60.79247 36.89677 c -58.92146 40.77835 -54.96574 42.71042 -50.95332 42.82817 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 2.437 196.353 cm 0 G 0 g q 1 0 0 1 41.803 -225.693 cm q 0 G 0 g 0.3985 w q 0.94566 0.89452 0.74748 RG 0.94566 0.89452 0.74748 rg -85.57962 48.32732 m -82.41411 48.29602 -79.49889 45.87851 -79.15475 41.87683 c -76.59503 42.83531 -74.49323 42.58502 -73.12807 41.50995 c -71.74866 40.4235 -71.1258 38.5094 -71.51544 36.22556 c -71.51544 36.21988 l -71.51828 36.21135 l -72.03308 34.82343 -72.78108 34.1323 -73.65991 33.82797 c -74.54158 33.52365 -75.53987 33.60329 -76.57513 33.7199 c -77.60754 33.83652 -78.67694 33.99008 -79.68945 33.85925 c -80.70197 33.72559 -81.6576 33.31319 -82.48805 32.28078 c -83.34982 30.93266 -82.96872 29.48216 -82.10696 28.70003 c -81.67749 28.30754 -81.12857 28.0857 -80.55122 28.1255 c -79.9767 28.16531 -79.37375 28.46396 -78.82768 29.13802 c -78.0427 30.22731 -76.50117 31.18579 -74.74068 31.8314 c -73.01144 32.4628 -71.07175 32.78703 -69.41649 32.61923 c -70.19292 35.10783 -69.96255 37.7102 -68.72252 39.59586 c -67.46541 41.50711 -65.18158 42.67604 -61.93358 42.23235 c -61.93076 42.23235 l -61.9279 42.2295 l -59.48764 41.71188 -58.12247 40.4235 -57.55934 38.93887 c -56.99619 37.45708 -57.23227 35.78473 -57.96605 34.49634 c -58.69981 33.20795 -59.93987 32.29784 -61.38469 32.3547 c -62.80959 32.41444 -64.41083 33.42696 -65.91252 35.88144 c -66.3306 35.2728 -66.45575 34.38258 -66.25381 33.45256 c -66.04619 32.47986 -65.4916 31.47589 -64.59001 30.74495 c -64.58714 30.74495 l -64.58714 30.74495 l -62.63893 29.04132 -60.50584 28.70287 -58.22485 29.08113 c -55.94386 29.45941 -53.51782 30.55724 -51.02638 31.72902 c -48.53493 32.89793 -45.97522 34.14082 -43.40982 34.79782 c -40.84727 35.45197 -38.27618 35.52022 -35.77618 34.33992 c -35.47472 34.20055 l -35.80464 34.20624 l -43.60323 34.35698 -47.60205 31.4446 -51.0406 28.89058 c -52.75845 27.61641 -54.33694 26.42757 -56.17992 25.76204 c -57.99731 25.10506 -60.07637 24.97137 -62.77829 25.75635 c -62.27489 22.68471 -62.9973 20.45775 -64.32266 19.0101 c -65.66223 17.54536 -67.60477 16.87416 -69.47621 16.88838 c -71.34764 16.90544 -73.15651 17.6051 -74.22589 18.89917 c -75.29529 20.19609 -75.61667 22.0846 -74.53021 24.43384 c -74.47049 24.56183 l -74.40508 24.43953 l -73.59735 22.99756 -72.6673 22.2467 -71.78848 21.97368 c -70.91249 21.69778 -70.07915 21.89119 -69.45914 22.35194 c -68.83629 22.80984 -68.42673 23.53508 -68.39828 24.32292 c -68.36984 25.1079 -68.71967 25.95828 -69.63263 26.675 c -69.63547 26.67786 l -71.70883 28.11128 -74.33682 27.92926 -76.29642 26.45601 c -78.25601 24.9856 -79.54724 22.22395 -78.92722 18.48108 c -78.55464 16.35368 -77.57343 14.7752 -76.11154 13.79967 c -74.64966 12.82698 -72.70428 12.45155 -70.40338 12.75018 c -65.8016 13.3503 -59.78912 16.65231 -53.46948 23.1995 c -53.46664 23.20233 l -53.46379 23.20517 l -43.22495 31.62093 -34.31717 34.47644 -25.7393 32.96051 c -17.1614 31.4446 -8.92769 25.5658 -0.0199 16.5414 c -0.11375 16.43332 l -8.04317 22.3292 -15.85312 27.95203 -24.13521 29.63573 c -32.41728 31.31662 -41.18002 29.06976 -51.05482 19.19211 c -51.05482 19.19211 -51.05482 19.18929 -51.05766 19.18929 c -57.68448 11.15463 -64.4222 6.35374 -70.82146 4.57048 c -77.2236 2.78438 -83.29295 4.02441 -88.55742 8.05453 c -88.55742 8.05453 l -88.55742 8.05737 l -92.68994 11.42482 -94.81165 16.49588 -97.14383 20.57152 c -98.30992 22.61075 -99.5272 24.3997 -101.06873 25.6056 c -102.60739 26.81436 -104.46744 27.44292 -106.94182 27.16704 c -106.94182 27.16704 l -106.94182 27.16704 l -107.82635 27.0874 -108.48335 26.64372 -108.91849 26.01233 c -109.35649 25.38092 -109.56981 24.56467 -109.55557 23.7484 c -109.53851 22.93214 -109.29391 22.12157 -108.81894 21.50156 c -108.34398 20.88438 -107.64432 20.45491 -106.70576 20.39803 c -105.82979 20.36389 -105.25243 20.58858 -104.90828 20.93272 c -104.56415 21.27687 -104.44469 21.74615 -104.50725 22.22395 c -104.6324 23.18242 -105.48564 24.14943 -106.68301 24.10107 c -106.8622 24.09254 l -106.7342 24.22337 l -106.10281 24.85477 -105.31499 25.23589 -104.53569 25.15623 c -103.75641 25.07945 -102.99988 24.54192 -102.44243 23.38435 c -102.44243 23.38152 l -102.43958 23.37868 l -101.62616 21.44182 -101.96461 19.77802 -102.90317 18.5977 c -103.83888 17.42023 -105.36618 16.72342 -106.92476 16.6836 c -108.48335 16.64378 -110.07889 17.2638 -111.13692 18.72568 c -112.19208 20.18188 -112.70972 22.46855 -112.15509 25.74498 c -113.75351 27.03905 -113.80469 29.35417 -112.77513 31.08624 c -111.7484 32.80978 -109.63522 33.95311 -106.92761 32.95482 c -107.00725 33.77962 -106.82236 34.55038 -106.37299 35.12206 c -105.90657 35.7193 -105.1671 36.10042 -104.21147 36.12033 c -102.29738 36.16585 -99.51866 34.78929 -96.16544 30.88145 c -94.94531 29.52483 -92.11542 29.10104 -89.55286 29.82344 c -86.98746 30.54585 -84.70079 32.39455 -84.51877 35.54866 c -84.51877 35.55153 l -84.12059 41.99913 -92.19789 42.1641 -93.03693 38.7853 c -93.03693 38.7853 l -93.03693 38.78242 l -93.52611 37.0077 -92.9658 35.64252 -92.05853 34.92581 c -91.18823 34.23752 -90.01077 34.16643 -89.10349 34.90305 c -90.01077 35.13058 -90.63933 35.46335 -90.98631 35.84729 c -91.3532 36.2597 -91.42998 36.7233 -91.26503 37.12148 c -90.93796 37.91782 -89.70929 38.43262 -88.16493 37.94342 c -88.1621 37.94342 l -88.1621 37.94057 l -86.88223 37.47699 -86.31056 36.06915 -86.78838 34.70113 c -87.26619 33.3331 -88.78778 32.00488 -91.65182 31.64653 c -91.65466 31.64653 l -91.65466 31.64653 l -93.75363 31.4446 -95.35487 32.13002 -96.44133 33.26485 c -97.52779 34.39964 -98.09946 35.97813 -98.15633 37.568 c -98.21606 39.15501 -97.75815 40.75342 -96.77979 41.9252 c -95.80708 43.08844 -94.31392 43.82222 -92.32019 43.70845 c -90.66492 46.92232 -88.05116 48.35007 -85.57962 48.32732 c -85.57962 48.18509 m -88.00566 48.20786 -90.58244 46.81139 -92.21497 43.6089 c -92.2377 43.56625 l -92.28322 43.56909 l -94.26273 43.69708 -95.71606 42.97752 -96.66885 41.83702 c -97.62448 40.69652 -98.07101 39.12941 -98.01413 37.57368 c -97.96008 36.0151 -97.39696 34.4679 -96.33894 33.36154 c -95.28093 32.25801 -93.72803 31.58966 -91.6689 31.78874 c -88.84183 32.14142 -87.37994 33.44116 -86.92204 34.74947 c -86.46414 36.05492 -87.00168 37.3689 -88.2076 37.8069 c -89.7036 38.28188 -90.84694 37.76709 -91.1342 37.06743 c -91.2764 36.7176 -91.21953 36.32228 -90.87822 35.944 c -90.53976 35.56573 -89.91122 35.21022 -88.92432 34.98837 c -88.79065 34.95993 l -88.89018 34.86607 l -89.86287 33.98726 -91.19676 34.0612 -92.14671 34.81488 c -93.09949 35.56857 -93.674 37.00201 -93.17628 38.81941 c -93.17343 38.81941 l -92.28322 42.403 -83.9727 42.10721 -84.37657 35.54013 c -84.56427 32.32059 -86.91068 30.42072 -89.51305 29.68694 c -92.11542 28.95316 -94.98798 29.3627 -96.27353 30.7876 c -96.27353 30.7876 l -96.27353 30.79045 l -99.61252 34.68121 -102.36563 36.0208 -104.20578 35.97813 c -105.12729 35.95822 -105.82124 35.59702 -106.26208 35.03387 c -106.70576 34.4736 -106.89632 33.70569 -106.79393 32.8695 c -106.77972 32.7529 l -106.88779 32.79555 l -109.58401 33.83366 -111.64316 32.70738 -112.65282 31.01228 c -113.65965 29.32004 -113.60277 27.06181 -112.0385 25.82462 c -112.00436 25.79901 l -112.0129 25.7592 l -112.57034 22.48563 -112.0527 20.23306 -111.02315 18.80817 c -109.99072 17.3861 -108.44638 16.78598 -106.92761 16.82295 c -105.40884 16.8628 -103.91853 17.54536 -103.0141 18.68587 c -102.10681 19.82637 -101.77406 21.42476 -102.57042 23.32463 c -102.57042 23.32463 -102.57042 23.32463 -102.57326 23.32463 c -103.11365 24.4509 -103.82751 24.94295 -104.54993 25.01689 c -105.22682 25.0823 -105.92078 24.75238 -106.50668 24.212 c -105.3349 24.15796 -104.49588 23.21655 -104.3679 22.24387 c -104.29964 21.72908 -104.43047 21.21146 -104.80875 20.83034 c -105.187 20.45207 -105.80702 20.21886 -106.7086 20.25583 c -106.71146 20.25583 l -106.71146 20.25583 l -107.69267 20.31555 -108.43498 20.76776 -108.92987 21.41621 c -109.42758 22.0647 -109.68071 22.9037 -109.69495 23.74556 c -109.712 24.58742 -109.493 25.43213 -109.03511 26.09196 c -108.57721 26.7518 -107.88039 27.22392 -106.95605 27.30925 c -104.45038 27.58797 -102.54482 26.94519 -100.98055 25.71939 c -99.41628 24.4907 -98.19046 22.68755 -97.02153 20.64262 c -94.68082 16.55278 -92.56479 11.50446 -88.46642 8.16547 c -83.23323 4.15808 -77.2236 2.93227 -70.85844 4.70702 c -64.49615 6.4789 -57.77834 11.26271 -51.16006 19.28596 c -51.16006 19.28882 l -51.1572 19.29167 l -41.25682 29.18922 -32.43152 31.46451 -24.10675 29.77226 c -16.0579 28.13974 -8.47832 22.80132 -0.81625 17.11876 c -9.44531 25.73643 -17.4572 31.35359 -25.76204 32.82115 c -34.2944 34.32854 -43.15385 31.4958 -53.36995 23.0971 c -53.37279 23.0971 -53.37279 23.0971 -53.37279 23.0971 c -59.70665 16.53854 -65.73619 13.21663 -70.38632 12.61082 c -72.70998 12.3065 -74.69232 12.68477 -76.18834 13.68304 c -77.68434 14.68135 -78.69116 16.29965 -79.06659 18.45834 c -79.06659 18.45834 l -79.69513 22.24387 -78.38399 25.06523 -76.38174 26.56976 c -74.37663 28.07431 -71.67755 28.26202 -69.553 26.79161 c -69.55016 26.79161 l -69.55016 26.78877 l -68.60306 26.0493 -68.22765 25.15056 -68.25607 24.31723 c -68.28735 23.48674 -68.71967 22.72168 -69.37381 22.23534 c -70.02797 21.75183 -70.90964 21.54704 -71.83113 21.83714 c -72.72418 22.11588 -73.64569 22.86957 -74.44489 24.24612 c -75.44032 21.99641 -75.13031 20.21886 -74.11497 18.99019 c -73.0797 17.73593 -71.3135 17.0448 -69.47621 17.0306 c -67.6389 17.01637 -65.73619 17.6762 -64.42505 19.1068 c -63.11674 20.53455 -62.39433 22.73875 -62.9262 25.83598 c -62.94325 25.94691 l -62.83517 25.91562 l -60.10765 25.1022 -58.04283 25.23872 -56.22543 25.8957 c -54.41089 26.54987 -52.84377 27.73018 -51.12308 29.00719 c -47.74426 31.5157 -43.7568 34.37973 -36.18575 34.33707 c -38.54068 35.33536 -40.9525 35.27847 -43.37569 34.65846 c -45.92119 34.01 -48.4752 32.7728 -50.96666 31.60103 c -53.46095 30.42924 -55.89268 29.32289 -58.19926 28.94177 c -60.50868 28.55782 -62.69865 28.9048 -64.67818 30.63687 c -64.67818 30.63687 l -65.60818 31.39056 -66.17702 32.42014 -66.39317 33.42126 c -66.60933 34.42523 -66.47282 35.40363 -65.97508 36.05492 c -65.91252 36.1374 l -65.85847 36.04924 l -64.35109 33.53789 -62.76123 32.55382 -61.37898 32.49693 c -59.99675 32.44289 -58.80505 33.31319 -58.08835 34.56744 c -57.37447 35.8217 -57.14694 37.45139 -57.69301 38.89052 c -58.23624 40.3268 -59.55305 41.58105 -61.95634 42.09015 c -65.16168 42.52815 -67.37724 41.38765 -68.60306 39.51906 c -69.83173 37.65047 -70.06209 35.04811 -69.26006 32.56802 c -69.22878 32.4628 l -69.33684 32.47417 l -70.98074 32.66188 -72.94887 32.33481 -74.69232 31.69772 c -76.43861 31.0578 -77.95738 30.10501 -78.71391 29.05269 c -78.71677 29.04985 l -78.71677 29.04701 l -79.28273 28.35019 -79.9255 28.02597 -80.5427 27.9833 c -81.15985 27.94064 -81.74858 28.18239 -82.20366 28.59479 c -83.11377 29.42244 -83.50626 30.95541 -82.60468 32.35757 c -82.60182 32.36325 l -82.59898 32.3661 l -81.74574 33.42696 -80.74745 33.8621 -79.70651 33.99863 c -78.66841 34.13513 -77.59048 33.97586 -76.55807 33.85925 c -75.5285 33.7455 -74.54727 33.67155 -73.70825 33.96165 c -72.86925 34.25174 -72.1582 34.9002 -71.65196 36.25401 c -71.2737 38.50087 -71.88518 40.34953 -73.21622 41.39902 c -74.55011 42.4485 -76.6178 42.70448 -79.18604 41.72041 c -79.2742 41.6863 l -79.28273 41.78014 l -79.58707 45.77328 -82.46246 48.15382 -85.57962 48.18509 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g q 1 0 0 1 6.098 -41.047 cm q 0 G 0 g 0.3985 w q q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.00002 .99998 -.99998 -.00002 7.573 -62.056 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.6431 .76575 -.76575 -.6431 20.753 -56.203 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.98497 .17262 -.17262 -.98497 27.099 -43.224 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86574 -.50044 .50044 -.86574 23.58 -29.231 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.34251 -.93948 .93948 -.34251 11.898 -20.802 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .34146 -.93988 .93988 .34146 -2.473 -21.805 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .86517 -.50142 .50142 .86517 -12.788 -31.814 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .98514 .17157 -.17157 .98514 -14.295 -46.102 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .64392 .76505 -.76505 .64392 -6.288 -58.054 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .00107 .99998 -.99998 .00107 7.55 -62.06 cm 0 G 0 g q 1 0 0 1 6.137 -45.945 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 2 J 4.0 M 12.14246 0.00255 m 11.82248 0.02087 11.55931 0.13266 11.3713 0.32033 c 11.07074 0.62086 10.96481 1.11458 11.1261 1.72409 c 11.28662 2.33179 11.71362 3.0553 12.47818 3.8217 c 10.61443 5.68509 l 10.30069 5.99883 9.92061 6.05234 9.55151 5.95082 c 9.18243 5.84966 8.82544 5.59236 8.56337 5.2841 c 8.30093 4.97551 8.13417 4.61632 8.14297 4.3132 c 8.14737 4.16145 8.19502 4.02402 8.29655 3.9126 c 8.39734 3.8019 8.55202 3.71724 8.7701 3.67033 c 9.05122 4.01888 9.3734 4.18675 9.6325 4.14278 c 9.76263 4.1204 9.87663 4.04417 9.95871 3.91222 c 10.04082 3.78065 10.09213 3.59335 10.09984 3.3478 c 10.09984 3.34743 l 10.12366 3.14804 10.03899 2.96037 9.87663 2.8156 c 9.71425 2.67082 9.47382 2.56784 9.18463 2.5363 c 8.60773 2.47327 7.83583 2.69354 7.0962 3.42879 c 6.37709 2.74962 5.6565 2.40399 4.92566 2.48352 c 4.19226 2.56343 3.45041 3.06996 2.68988 4.08963 c 2.39886 4.42682 2.17418 4.54375 1.9825 4.54375 c 1.7908 4.54411 1.62881 4.42719 1.46423 4.29085 c 1.2993 4.1545 1.13217 3.99908 0.92838 3.9269 c 0.7246 3.85468 0.48453 3.86714 0.17921 4.06396 c 0.17738 4.06506 l 0.17627 4.06654 l 0.0 4.33702 -0.03847 4.62512 0.03627 4.8879 c 0.11104 5.1507 0.29906 5.38858 0.57433 5.56085 c 1.1219 5.90392 2.01549 5.98672 3.0542 5.4934 c 3.03038 5.98454 3.17003 6.2708 3.40129 6.44269 c 3.63513 6.61642 3.9584 6.67506 4.29488 6.7216 c 4.63133 6.76816 4.981 6.80261 5.26689 6.92502 c 5.55278 7.04709 5.77525 7.25565 5.86028 7.65404 c 5.86028 7.6544 l 5.86028 7.65477 l 5.96439 8.02203 6.17073 8.18292 6.38588 8.1987 c 6.60066 8.21483 6.82204 8.08727 6.95764 7.88605 c 7.0929 7.68481 7.14238 7.40884 7.013 7.12735 c 6.8847 6.84842 6.57977 6.56511 6.01239 6.34225 c 6.19676 6.17659 6.31624 6.01753 6.33823 5.84012 c 6.3606 5.65942 6.28288 5.46188 6.0802 5.2229 c 6.07947 5.22145 l 6.078 5.2207 l 5.89072 5.11258 5.72835 5.11661 5.5799 5.1727 c 5.43109 5.22841 5.29584 5.3347 5.1584 5.43036 c 5.02058 5.52602 4.88094 5.61067 4.72443 5.62572 c 4.56793 5.64075 4.39346 5.58649 4.18456 5.40105 c 4.18419 5.40105 l 4.18419 5.40067 l 3.78981 5.0873 3.65823 4.7479 3.7044 4.44514 c 3.75023 4.14241 3.97417 3.87485 4.2967 3.7077 c 4.94142 3.37344 5.97647 3.44125 6.74873 4.43158 c 7.27762 5.34166 7.71341 5.90427 8.16753 6.2708 c 8.61873 6.63547 9.08788 6.80518 9.68091 6.93016 c 9.37521 7.54665 9.58084 8.15141 9.94919 8.55458 c 10.13428 8.75726 10.36006 8.90936 10.58328 8.98744 c 10.80612 9.0655 11.02676 9.06953 11.19977 8.97389 c 11.19977 8.97351 l 11.20012 8.97351 l 11.4006 8.84889 11.52963 8.7338 11.60477 8.62422 c 11.68027 8.515 11.7008 8.41054 11.68356 8.31047 c 11.64948 8.11035 11.46695 7.92783 11.2793 7.7343 c 11.09126 7.54079 10.89738 7.33664 10.8347 7.09839 c 10.77203 6.86015 10.83875 6.58636 11.17703 6.2477 c 13.04666 4.40593 l 13.03383 4.39275 l 11.1642 6.23488 l 11.1642 6.23488 l 10.82298 6.5761 10.75261 6.85832 10.81711 7.10316 c 10.88126 7.34763 11.07806 7.55325 11.2661 7.74713 c 11.45412 7.94066 11.63298 8.12209 11.6656 8.3134 c 11.6821 8.40907 11.66304 8.50768 11.58974 8.61395 c 11.5168 8.72025 11.38962 8.83424 11.1906 8.95776 c 11.02383 9.05011 10.80869 9.0472 10.58914 8.97021 c 10.3696 8.89323 10.14565 8.74297 9.96239 8.54211 c 9.59622 8.14078 9.39171 7.54079 9.70143 6.92796 c 9.70656 6.91733 l 9.69519 6.91476 l 9.09813 6.79016 8.63008 6.62119 8.1789 6.25648 c 7.72734 5.89217 7.2923 5.33104 6.76376 4.42133 c 6.7634 4.42096 l 6.76303 4.42023 l 5.98636 3.42403 4.94104 3.35329 4.28827 3.69157 c 3.9617 3.86092 3.733 4.1325 3.6861 4.44258 c 3.63916 4.7523 3.77515 5.09866 4.17284 5.41496 c 4.38431 5.60262 4.56427 5.65942 4.7259 5.64366 c 4.8879 5.62828 5.03047 5.54105 5.16867 5.44502 c 5.30684 5.34898 5.44136 5.24416 5.58612 5.18956 c 5.73055 5.13531 5.88484 5.1309 6.06738 5.2361 c 6.26714 5.4725 6.34152 5.6642 6.3199 5.83794 c 6.29828 6.01202 6.18027 6.17036 5.99113 6.33823 c 5.97977 6.34813 l 5.99371 6.35362 l 6.56694 6.5761 6.87006 6.85944 6.9965 7.13504 c 7.12332 7.41068 7.07457 7.67934 6.94225 7.8758 c 6.80995 8.0726 6.59407 8.19576 6.38734 8.18036 c 6.18027 8.16498 5.98051 8.0125 5.87788 7.64964 c 5.87825 7.65038 l 5.79175 7.24648 5.56377 7.03168 5.27422 6.90817 c 4.9843 6.78429 4.63354 6.7502 4.29744 6.70366 c 3.9617 6.6571 3.641 6.5981 3.4123 6.42802 c 3.1836 6.25797 3.04468 5.97722 3.0718 5.4802 c 3.07253 5.46481 l 3.05896 5.4714 l 2.01915 5.9695 1.1274 5.88594 0.58386 5.54544 c 0.31189 5.37502 0.12717 5.1408 0.05386 4.88278 c -0.01941 4.62549 0.01758 4.34436 0.19095 4.07826 c 0.49222 3.8851 0.72386 3.87375 0.92215 3.94412 c 1.12117 4.01485 1.2872 4.16843 1.45251 4.30513 c 1.6178 4.44185 1.78348 4.56244 1.9825 4.56207 c 2.18152 4.56207 2.41133 4.44075 2.70418 4.10098 c 2.70454 4.10062 l 2.70454 4.10062 l 3.46324 3.08315 4.20105 2.58066 4.92749 2.50186 c 5.65393 2.42268 6.37122 2.76685 7.08997 3.44785 c 7.09656 3.45372 l 7.1028 3.44748 l 7.84132 2.7104 8.61066 2.49196 9.1828 2.55464 c 9.46869 2.58578 9.70546 2.68732 9.86453 2.82916 c 10.0236 2.97101 10.10497 3.15242 10.08186 3.34558 c 10.08186 3.34595 l 10.08186 3.34631 l 10.07417 3.59006 10.02324 3.77441 9.94333 3.90271 c 9.86343 4.03098 9.75456 4.1032 9.62958 4.1248 c 9.37924 4.16733 9.05965 4.0035 8.77998 3.6542 c 8.77632 3.64981 l 8.77083 3.6509 l 8.54724 3.69818 8.38782 3.7854 8.28299 3.9005 c 8.17853 4.01521 8.12906 4.15742 8.12466 4.31284 c 8.11586 4.62291 8.28519 4.98505 8.54945 5.29584 c 8.8137 5.60664 9.1729 5.86578 9.54675 5.96841 c 9.92024 6.07141 10.30913 6.01605 10.62726 5.69792 c 12.49065 3.83488 l 14.31042 5.65468 l 12.47746 7.48727 l 14.87303 9.88248 l 17.26825 7.48727 l 15.43564 5.65468 l 16.69868 4.39163 l 18.56866 6.2477 l 18.90733 6.58636 18.97368 6.86015 18.91136 7.09839 c 18.84868 7.33664 18.65443 7.54079 18.46677 7.7343 c 18.27875 7.92783 18.09657 8.11035 18.06213 8.31047 c 18.0449 8.41054 18.0658 8.515 18.14095 8.62422 c 18.21606 8.7338 18.34544 8.84889 18.54593 8.97351 c 18.54593 8.97351 l 18.5463 8.97389 l 18.71893 9.06953 18.93959 9.0655 19.1628 8.98744 c 19.38564 8.90936 19.6114 8.75726 19.79688 8.55458 c 20.16486 8.15141 20.37048 7.54665 20.06479 6.93016 c 20.65784 6.80518 21.12735 6.63547 21.57854 6.2708 c 22.03229 5.90427 22.46844 5.34166 22.99733 4.43158 c 23.76923 3.44125 24.80466 3.37344 25.44937 3.7077 c 25.77153 3.87485 25.99585 4.14241 26.04166 4.44514 c 26.08746 4.7479 25.9559 5.0873 25.56187 5.40067 c 25.56151 5.40105 l 25.56151 5.40105 l 25.35222 5.58649 25.17813 5.64075 25.02162 5.62572 c 24.86513 5.61067 24.72511 5.52602 24.58768 5.43036 c 24.44984 5.3347 24.31462 5.22841 24.16617 5.1727 c 24.01773 5.11661 23.85536 5.11258 23.66808 5.2207 c 23.6666 5.22145 l 23.66551 5.2229 l 23.46318 5.46188 23.38548 5.65942 23.40784 5.84012 c 23.42982 6.01753 23.54932 6.17659 23.73367 6.34225 c 23.16594 6.56511 22.861 6.84842 22.73271 7.12735 c 22.60333 7.40884 22.65282 7.68481 22.7884 7.88605 c 22.92366 8.08727 23.14503 8.21483 23.35982 8.1987 c 23.57498 8.18292 23.7817 8.02203 23.88542 7.65477 c 23.88542 7.6544 l 23.88542 7.65404 l 23.97081 7.25565 24.19292 7.04709 24.4788 6.92502 c 24.7647 6.80261 25.11436 6.76816 25.45082 6.7216 c 25.7873 6.67506 26.11093 6.61642 26.34439 6.44269 c 26.57568 6.2708 26.7157 5.98454 26.69186 5.4934 c 27.73022 5.98672 28.6238 5.90392 29.17174 5.56085 c 29.44664 5.38858 29.63466 5.1507 29.70943 4.8879 c 29.78458 4.62512 29.74608 4.33702 29.56943 4.06654 c 29.56833 4.06506 l 29.56685 4.06396 l 29.26117 3.86714 29.0211 3.85468 28.81769 3.9269 c 28.6139 3.99908 28.44641 4.1545 28.28183 4.29085 c 28.1169 4.42719 27.9549 4.54411 27.7632 4.54375 c 27.57188 4.54375 27.34721 4.42682 27.05582 4.08963 c 26.29529 3.06996 25.55382 2.56343 24.82042 2.48352 c 24.0892 2.40399 23.36862 2.74962 22.6495 3.42879 c 21.90988 2.69354 21.13799 2.47327 20.56107 2.5363 c 20.2719 2.56784 20.0318 2.67082 19.86945 2.8156 c 19.70671 2.96037 19.62204 3.14804 19.64587 3.34743 c 19.64587 3.34743 19.64587 3.34743 19.64587 3.3478 c 19.65393 3.59335 19.70488 3.78065 19.78697 3.91222 c 19.86945 4.04417 19.98306 4.1204 20.11319 4.14278 c 20.37231 4.18675 20.69449 4.01888 20.9756 3.67033 c 21.19368 3.71724 21.34836 3.8019 21.44914 3.9126 c 21.55067 4.02402 21.5987 4.16145 21.60309 4.3132 c 21.61153 4.61632 21.44475 4.97551 21.1827 5.2841 c 20.92062 5.59236 20.56326 5.84966 20.19455 5.95082 c 19.82547 6.05234 19.445 5.99883 19.13127 5.68509 c 17.26787 3.8217 l 18.03244 3.0553 18.45908 2.33179 18.61998 1.72409 c 18.78088 1.11458 18.67496 0.62086 18.3744 0.32033 c 18.07387 0.01978 17.58015 -0.0861 16.97063 0.07512 c 16.36295 0.23566 15.63942 0.66266 14.87303 1.42722 c 14.10664 0.66266 13.38277 0.23566 12.77507 0.07512 c 12.54674 0.01465 12.33415 -0.0084 12.14246 0.00255 c 12.14355 0.02051 m 12.33342 0.00987 12.54343 0.03261 12.77031 0.09271 c 13.37396 0.25215 14.09528 0.67696 14.85983 1.44005 c 14.32289 1.97662 l 13.81892 1.47412 13.36076 1.17543 12.98766 1.04274 c 12.6127 0.90895 12.32169 0.94232 12.15785 1.10579 c 11.99402 1.26962 11.96103 1.56062 12.09444 1.93594 c 12.2275 2.31091 12.52766 2.77162 13.03383 3.27852 c 13.04044 3.28511 l 14.8602 5.10489 l 14.32326 5.64185 l 12.50348 3.82205 l 12.49689 3.81546 l 11.72975 3.04834 11.30385 2.32446 11.14368 1.71933 c 10.98352 1.11421 11.08908 0.6282 11.38411 0.33316 c 11.56885 0.14879 11.82762 0.03847 12.14355 0.02051 c 17.60216 0.02051 m 17.91809 0.03847 18.17723 0.14879 18.36159 0.33316 c 18.65663 0.6282 18.76218 1.11421 18.60239 1.71933 c 18.44258 2.32263 18.01779 3.04431 17.25507 3.80887 c 16.7181 3.27191 l 17.22023 2.7676 17.51895 2.30943 17.65163 1.93594 c 17.78505 1.56062 17.7517 1.26962 17.58786 1.10579 c 17.42438 0.94232 17.13336 0.90895 16.7584 1.04274 c 16.38347 1.17615 15.92313 1.47633 15.41621 1.98286 c 15.40997 1.98946 l 13.59021 3.80923 l 13.05327 3.27228 l 14.87303 1.45251 l 14.87303 1.45251 l 14.87926 1.4459 l 15.6464 0.67877 16.37027 0.25288 16.9754 0.09271 c 17.20227 0.03261 17.41266 0.00987 17.60216 0.02051 c 12.49577 0.98079 m 12.63213 0.96907 12.7956 0.99362 12.98141 1.0596 c 13.35088 1.19118 13.80756 1.48843 14.31006 1.98946 c 13.04044 3.25908 l 12.53975 2.75621 12.24287 2.29953 12.11166 1.92972 c 11.97935 1.55806 12.01381 1.27585 12.17068 1.11897 c 12.24911 1.04018 12.35907 0.99252 12.49577 0.98079 c 17.25029 0.98079 m 17.387 0.99252 17.49658 1.04018 17.57503 1.11897 c 17.7319 1.27585 17.76634 1.55806 17.63441 1.92972 c 17.50282 2.29953 17.20595 2.75621 16.70526 3.25908 c 15.436 1.98946 l 15.9385 1.48843 16.39482 1.19118 16.76465 1.0596 c 16.9501 0.99362 17.11357 0.96907 17.25029 0.98079 c 15.4228 2.00229 m 17.2426 3.82205 l 17.24883 3.8283 l 19.11844 5.69792 l 19.43658 6.01605 19.82547 6.07141 20.19931 5.96841 c 20.5728 5.86578 20.93236 5.60664 21.19661 5.29584 c 21.46053 4.98505 21.63022 4.62291 21.62105 4.31284 c 21.61664 4.15742 21.56717 4.01521 21.4627 3.9005 c 21.3579 3.7854 21.19846 3.69818 20.97488 3.6509 c 20.96938 3.64981 l 20.96608 3.6542 l 20.68605 4.0035 20.3668 4.16733 20.11649 4.1248 c 19.99112 4.1032 19.88264 4.03098 19.80275 3.90271 c 19.72284 3.77441 19.67189 3.59006 19.6642 3.34631 c 19.6642 3.34595 l 19.66383 3.34558 l 19.6411 3.15242 19.72247 2.97101 19.88153 2.82916 c 20.04024 2.68732 20.27701 2.58578 20.56326 2.55464 c 21.1354 2.49196 21.90474 2.7104 22.64291 3.44748 c 22.6495 3.45372 l 22.65575 3.44785 l 23.37486 2.76685 24.09213 2.42268 24.8182 2.50186 c 25.54465 2.58066 26.28247 3.08315 27.04117 4.10062 c 27.04153 4.10062 l 27.04153 4.10098 l 27.33475 4.44075 27.5642 4.56207 27.7632 4.56207 c 27.96259 4.56244 28.1279 4.44185 28.2932 4.30513 c 28.45886 4.16843 28.6249 4.01485 28.82355 3.94412 c 29.02222 3.87375 29.25385 3.8851 29.55513 4.07826 c 29.72813 4.34436 29.76552 4.62549 29.69221 4.88278 c 29.61855 5.1408 29.4338 5.37502 29.16183 5.54544 c 28.6183 5.88594 27.72655 5.9695 26.6871 5.4714 c 26.67317 5.46481 l 26.6739 5.4802 l 26.7014 5.97722 26.56248 6.25797 26.33377 6.42802 c 26.10506 6.5981 25.78436 6.6571 25.44826 6.70366 c 25.11252 6.7502 24.7614 6.78429 24.47185 6.90817 c 24.18193 7.03168 23.95395 7.24648 23.86783 7.65038 c 23.86783 7.64964 l 23.7652 8.0125 23.56544 8.16498 23.35873 8.18036 c 23.15163 8.19576 22.93576 8.0726 22.80345 7.8758 c 22.67113 7.67934 22.62276 7.41068 22.7492 7.13504 c 22.87602 6.85944 23.17877 6.5761 23.752 6.35362 c 23.76593 6.34813 l 23.75494 6.33823 l 23.56544 6.17036 23.44742 6.01202 23.4258 5.83794 c 23.40453 5.6642 23.47858 5.4725 23.67833 5.2361 c 23.86086 5.1309 24.01517 5.13531 24.15958 5.18956 c 24.30435 5.24416 24.43886 5.34898 24.57741 5.44502 c 24.71558 5.54105 24.8578 5.62828 25.0198 5.64366 c 25.1818 5.65942 25.36176 5.60262 25.57324 5.41496 c 25.57361 5.4146 l 25.97092 5.09866 26.10654 4.7523 26.05962 4.44258 c 26.01271 4.1325 25.784 3.86092 25.4578 3.69157 c 24.80501 3.35329 23.75969 3.42403 22.98268 4.42023 c 22.98232 4.42096 l 22.98193 4.42133 l 22.45341 5.33104 22.01836 5.89217 21.56717 6.25648 c 21.11562 6.62119 20.64757 6.79016 20.05087 6.91476 c 20.03915 6.91733 l 20.04463 6.92796 l 20.35399 7.54079 20.14984 8.14078 19.78331 8.54211 c 19.60005 8.74297 19.37611 8.89323 19.15657 8.97021 c 18.93703 9.0472 18.72223 9.05011 18.5551 8.95776 c 18.5551 8.95776 18.5551 8.95776 18.5551 8.95776 c 18.35608 8.83424 18.2289 8.72025 18.15596 8.61395 c 18.08302 8.50768 18.0636 8.40907 18.08008 8.3134 c 18.11307 8.12209 18.29158 7.94066 18.4796 7.74713 c 18.66763 7.55325 18.86444 7.34763 18.92896 7.10316 c 18.9931 6.85832 18.92271 6.5761 18.5815 6.23488 c 18.5815 6.23488 l 16.7115 4.37881 l 16.71187 4.37807 l 16.69905 4.36525 l 16.69868 4.36598 l 16.15953 3.83086 l 16.16208 3.8283 l 16.14926 3.81546 l 16.1467 3.81802 l 14.87926 2.56012 l 14.86644 2.57295 l 16.13387 3.83086 l 14.87303 5.09206 l 13.60304 3.82205 l 15.4228 2.00229 l 16.1467 3.84369 m 16.68585 4.37881 l 13.57738 7.48727 l 14.87303 8.78291 l 16.16869 7.48727 l 14.88586 6.20445 l 15.4228 5.6675 l 17.2426 7.48727 l 14.87303 9.85683 l 12.50348 7.48727 l 16.1467 3.84369 l 14.87303 6.21729 m 16.14304 7.48727 l 14.87303 8.75726 l 13.60304 7.48727 l 14.87303 6.21729 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -14.872 -10.797 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg BT /F6 29.7444 Tf 6.098 -41.047 Td[<3ba5>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 6.098 -41.047 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 74.702 -8.968 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg BT /F1 29.7444 Tf 6.098 -41.047 Td[<2b882c3d>]TJ ET Q 1 G 1 g 0 G 0 g q 1 0 0 1 6.098 -41.047 cm Q Q Q Q Q Q n Q Q q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 51.494 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+163 0 obj
+<</Length 339>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /YQFIMT+CMSY10-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+1 beginbfchar
+<05> <22C4>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+166 0 obj
+<</Subtype/Type1C/Length 417>>
+stream
+
+7Ÿ ’
+Œ ³
+³ ³› ³› ÷á
+endstream
+endobj
+170 0 obj
+<</Subtype/CIDFontType0C/Length 3354>>
+stream
+
+sú U Í
+?
+Ù÷A…ÈTÈ÷ÒȽÐ÷{Ðxø›ª©r‹|aŽƒ÷lÒUßû$`%‹Bm {£š§”°Œ“ŒŒŸŒ™˜‹”׿lDûEˆûY+€FÊJñ°É’ªº@l¡»Š±§¡‹ªû=òt‹vdy˜zg^‹ƒMb­²¼á°÷%øf[“‡•ˆ‘ûßùG•†ƒœuw|zyƒŽ…÷ßýG“z¡Ÿšœ8È÷½È÷½È÷xÐàøgW¨rŒ‚ûŽ‹¯ª÷5¤ˆ´T©µ¤š¬Œ¤÷¤‹³Ž“±ã®‘Ÿ‘£ªs‹yEû~3zŠ…‹Yo1g‹|g{|gYŠt…w…sm£Š•¥Š÷ˆUû:m‹^¿ntµÂ„»£‹ª8È÷½È÷½È÷xÐàøg÷Å©sŒsŒû‰Ã÷;§‹¸W¨¥[Lhzr‹lqž‡™÷‰‹gjû5cšk¶tSk‰\‡ûFn‹gû%‰…w…sl¤‹œâêŸÜšŒ‘‹½§å¯‹š¯›š¯»Œ£‘Ÿ‘£8Èù#È÷rÐøwVªs‹{û,ù#÷,š¤‹©ªs‹{ûIj„‚kýKl‘­÷Iš¤‹©8Èù#È÷}Ð÷ÂaùKª…•iûI|r‹ml£‹›÷,ý#û,|r‹ml£‹›÷I¬’”«…È÷ØÈÔÐ÷säøf÷§n‹…{‰w„~…x\A6CÑ滧÷÷ ²‹‚hŒž}££ œ¨Ô#‹^û@Oû3û é%÷÷­íœ…ÈTÈ÷ÏÈ÷È÷¥÷.FÐF÷.~ø”ª©q‹}^ø‘ª…•iB{r‹lm¥‹™¸û2¨jb›`û+,ûŽûå*õõ¦¨§Ng‹}³Ô›¤‹ªû.÷7®S^8>DOÒäëÑÌÑ˼ST…È‹Ç×Ç÷Èpød÷§n‹…yƒˆx„XuU‚o@@½á{÷¾ ž‹°÷Kíûû +'û°ûð&÷÷ºå¤D÷"ûžÔ™ÆÂÑ¿Ér$”÷WÑÝÑøzø®f‹}ûî}f‹hh¬‹—÷ú—¬‹®û,®j‹ûúj‹hh°‹™÷î™°‹®ûyÇ÷AÄÂÇ÷?ÇmǨÅxÐRÐ÷HÐqŇÐQÅ
+
+š¥‹©‹Èø}È÷xÐøg©ªs‹{ûø‘ª…•iû2{r‹lm¥‹™÷ü}û{r‹lm¥‹™÷Ýš¤‹©‹È÷ÉÈTÈÀÃ÷ Ã÷ üø˜©ªv‹g÷†Ÿ‹÷2mb~do­|ojkm}usÜ©‰w‹yk|q‹ml ‹¯ûÉgv‹lm¦‹™ãš¥‹©ªv‹g÷G¼ä´º´¢™zJû}xr‹lm¦‹™Öš¥‹©ªv‹g÷Gä´º´¢™zJû}xr‹lm¦‹™Öš¥‹©‹È÷ÉÈTÈìÐ÷Tиø”©ªr‹{_÷|ðX¶<H^ixxЫ‹šcB{r‹lm¥‹™¸ûÉ_{r‹lm¥‹™÷3™¥‹©ªr‹{_÷E¨ïÕ±¾À™oOûwd{r‹lm¦‹™÷-™¥‹©…È÷ØÈÄÐ÷¤Ðøg÷l÷.îûû.(ûûê,÷÷êë÷F’.M@AAMÖèæÌÌÒÓËJ0ûrÈ÷/È÷ÏÈTÈìзÐ÷ Ðø|÷l÷2í![^yli™eB{r‹lm¥‹™¸ü§_{r‹lm¥‹™÷3™¥‹©ªr‹{_÷ba´¶‚«÷ìê÷F+EJE=hã»ÔÆÅÀÊÕÅB4‹È÷ÉÈTÈ÷-Ð÷Ћà0ø{ø Ÿµ8XKyLT­ت…•iû|r‹ml£‹›ÜûÉ:|r‹ml£‹›÷™š¥‹©ªq‹|û÷$éÆë÷ sŒœw¤¡Ÿ›¦…È÷ØÈÓÈ÷Èø_÷óû kG—nG—²¥«ªêÞ™mqŽzŒzª®‹ ŸÐ›‹¤ms‡}„‰ __‹xû;t9g/ôzç}¼ƒÛ~Vffj0\S–Ùr†‡–qh‹vw*{‹r©”›Œ°—g¼À‰§÷2«Þ»…È÷ÏÈ÷-Ð÷2ÐøU÷‹ hjŠvzMŠRt>‹¿¤÷‚÷8š¤‹©ªs‹{û8Ýž‹¡ih‹vw94{r‹lm¤‹šãûˆ+ÏgÔÕܶä‹ÈøˆÈ¿ä÷rÐnЈøl´¥ž‹¡ih‹xoû‚ƾëÖ¶³èÊùËÛ÷ &Öûû
+<96f§€œ ¢œ§—†˜‚’¹šºªÂÝØ]3EZQITûqûN‚ƒ…†}l¤‹›÷笒”«…ÈTÈ÷ÉÈ÷¥÷.FÐF÷.|ø”ª©q‹}^÷ݪ…•iB{r‹lm¥‹™¸ûi¼1:k<‹¬«÷¢ª…•iB{r‹lm¥‹™¸û”+ÐsÔ´´•§°\kŒ ‹Ô›¤‹ª‡×÷¾È›÷[é÷[øø%©s‹yûys‹ml¢‹ž¼Yû¾Š‡¥~¹´Êyˆ–hx‹u€ˆ„cû‡wŠW÷¾¼£‹©ªt‹xûys‹ml ‹©ÇûätŽ|³³Ž”Ȥ㌙Ž¡ŒW°û ƒz—‹—°Ž›¡Ç÷ä© ‹ª
+To ‹ È
+Ð ±›‘ŒŒŒŒŒŸ‘ ® ’ŒžŒ•Á¬• ø¡ö
+endstream
+endobj
+171 0 obj
+<</Length 15>>
+stream
+€
+endstream
+endobj
+173 0 obj
+<</Length 692>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /OKBUDR+LMMono10-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+25 beginbfchar
+<001C> <0061>
+<0024> <005C>
+<0026> <007B>
+<0027> <007D>
+<0028> <005B>
+<0029> <005D>
+<002B> <0063>
+<002F> <0064>
+<0032> <0065>
+<0034> <003D>
+<003B> <0067>
+<003F> <0068>
+<0042> <0069>
+<0046> <006B>
+<0048> <006C>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0054> <0070>
+<0060> <0072>
+<0062> <0073>
+<0069> <0074>
+<006B> <0032>
+<006D> <0075>
+<0072> <0077>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+174 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 120 0 R/Font<</F1 121 0 R/F7 162 0 R/F4 141 0 R/F8 167 0 R/F5
+147 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length 86864>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 104.127 173.249 cm 0 G 0 g q 1 0 0 1 -74.181 -221.392 cm q 0 G 0 g 0.3985 w q 0.9463 0.89578 0.75049 RG 0.9463 0.89578 0.75049 rg 30.55746 40.9505 m 27.23563 40.99413 24.53104 38.8937 23.71092 35.8663 c 20.01611 37.72244 14.25142 32.73422 15.34198 29.71556 c 7.35907 26.08618 13.17177 17.90479 18.46098 21.19174 c 21.9137 23.69348 20.8253 27.25089 17.03671 27.31851 c 19.4883 28.28038 22.96063 27.25743 21.3815 22.73816 c 20.37163 19.8896 14.0224 17.18939 10.35593 21.32697 c 7.08862 23.80908 0.0545 18.37373 5.335 13.91115 c 0.5409 3.70134 14.50879 0.0545 17.49255 7.53139 c 19.13493 12.24043 12.29277 15.35071 11.43777 9.69505 c 9.18251 13.85664 18.76196 18.74889 27.5279 10.94702 c 32.37871 5.8781 38.27644 4.8377 46.06741 6.90323 c 38.3048 6.62624 32.53793 8.28824 27.8965 16.13155 c 19.13277 14.22742 21.45346 24.78622 26.23448 24.81458 c 27.9663 30.15614 35.02003 31.69165 38.44876 26.09708 c 44.32033 29.1419 52.45154 21.73047 46.39676 15.76729 c 52.64784 11.48795 59.30899 15.00827 62.54794 18.43262 c 66.69208 21.86353 70.98888 22.09909 74.85382 19.93541 c 76.54636 18.62456 80.5509 16.58958 85.20323 16.23842 c 82.52045 17.2701 79.9729 18.4719 76.60962 21.59306 c 72.72504 24.71861 67.39656 24.71861 61.61006 20.07718 c 51.74268 15.07588 50.66084 27.50171 57.4245 26.67072 c 60.08983 26.05563 60.82704 23.65858 58.92947 22.79704 c 59.37442 24.43726 58.58704 25.63467 56.57822 25.54962 c 51.8561 23.76982 55.68832 17.6496 61.38106 21.1721 c 65.0933 23.63242 63.21973 29.20299 58.15735 28.7406 c 60.77469 33.10065 55.06671 37.47162 51.65979 34.48567 c 51.02074 36.06915 48.83743 37.04193 47.10344 36.18475 c 45.18623 34.93933 46.31169 32.1235 45.16878 30.71233 c 39.79013 23.47755 31.74399 32.98068 39.77707 35.09201 c 33.35147 30.8541 43.51114 25.76337 44.79799 33.1639 c 45.61374 38.56436 38.79555 40.6059 36.93288 38.28734 c 34.76703 40.12387 32.55101 40.92215 30.55746 40.9505 c 32.75822 27.98155 m 30.62944 28.04918 28.41124 26.83212 26.92372 23.61714 c 22.59637 23.90723 22.07292 13.88936 28.46358 18.0662 c 34.17593 2.7264 57.75821 7.53139 65.6822 15.18494 c 68.07927 17.44456 72.1994 17.59726 75.55396 15.64732 c 78.58572 13.24591 84.66669 13.36807 88.2328 15.73239 c 85.37553 15.00609 82.02753 15.0737 77.397 17.2701 c 72.82538 20.22987 69.5886 20.89075 66.40852 19.51883 c 63.28299 17.80446 62.12698 15.78911 58.95346 13.96788 c 53.14078 11.5752 48.23544 12.17064 45.55486 14.969 c 44.04987 12.97546 37.60468 14.9014 39.1009 18.90157 c 40.52954 23.43611 45.42398 21.67595 44.34215 18.72054 c 43.7358 20.78606 41.61356 21.21138 40.58844 18.5155 c 40.04752 17.0607 43.68999 13.85228 46.38148 17.7325 c 48.96175 20.49161 44.30943 27.68275 38.05615 24.64226 c 36.92635 26.56165 34.88698 27.91396 32.75822 27.98155 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 160.207 21.061 cm 0 G 0 g q 1 0 0 1 -72.019 -224.838 cm q 0 G 0 g 0.3985 w q 0.94621 0.89558 0.75005 RG 0.94621 0.89558 0.75005 rg 82.71918 46.71199 m 79.65947 46.68176 76.84167 44.34505 76.50905 40.47713 c 74.03488 41.40355 72.00333 41.16165 70.68378 40.1225 c 69.3505 39.07236 68.74844 37.22223 69.12508 35.01474 c 69.12508 35.00925 l 69.1278 35.00099 l 69.6254 33.65945 70.34839 32.99144 71.19786 32.6973 c 72.05008 32.40314 73.01498 32.48012 74.01564 32.59282 c 75.01355 32.70555 76.04721 32.85397 77.02586 32.72752 c 78.00453 32.59833 78.9282 32.1997 79.73093 31.2018 c 80.56389 29.89874 80.19554 28.49672 79.36256 27.74072 c 78.94745 27.36136 78.41689 27.14694 77.85883 27.18542 c 77.30351 27.2239 76.72072 27.51256 76.1929 28.1641 c 75.43416 29.21698 73.94417 30.14342 72.2425 30.76744 c 70.57108 31.37775 68.69621 31.69113 67.09627 31.52895 c 67.84676 33.93437 67.62408 36.44977 66.42549 38.27238 c 65.21042 40.11975 63.00291 41.24962 59.86348 40.82076 c 59.86075 40.82076 l 59.858 40.81801 l 57.4993 40.31767 56.17975 39.07236 55.63544 37.63736 c 55.09113 36.20508 55.31929 34.58864 56.02855 33.3433 c 56.73781 32.09799 57.9364 31.21829 59.33292 31.27327 c 60.7102 31.33101 62.25792 32.30966 63.70941 34.6821 c 64.11353 34.09383 64.2345 33.23335 64.03932 32.33441 c 63.83864 31.39424 63.30257 30.42381 62.4311 29.7173 c 62.42836 29.7173 l 62.42836 29.7173 l 60.54526 28.07063 58.48346 27.74348 56.27872 28.1091 c 54.07396 28.47473 51.72902 29.53587 49.32085 30.66847 c 46.91267 31.79836 44.43852 32.99968 41.95886 33.63472 c 39.48196 34.267 36.99683 34.33298 34.58038 33.19212 c 34.289 33.0574 l 34.6079 33.06291 l 42.1458 33.2086 46.01099 30.39359 49.3346 27.92491 c 50.99503 26.69334 52.52077 25.54424 54.30214 24.90096 c 56.05879 24.26591 58.06836 24.13672 60.67995 24.89546 c 60.19337 21.92647 60.89163 19.77397 62.1727 18.37468 c 63.46751 16.95892 65.34512 16.31015 67.15399 16.3239 c 68.96288 16.3404 70.71127 17.01666 71.74492 18.26749 c 72.77856 19.52106 73.0892 21.34644 72.03906 23.61714 c 71.98134 23.74086 l 71.91812 23.62265 l 71.13737 22.22887 70.23843 21.50311 69.38898 21.23921 c 68.54227 20.97255 67.7368 21.15948 67.1375 21.60483 c 66.53545 22.04744 66.13959 22.74844 66.1121 23.50995 c 66.08461 24.26868 66.42274 25.09065 67.30519 25.7834 c 67.30794 25.78615 l 69.312 27.17168 71.85213 26.99574 73.74623 25.57173 c 75.64034 24.15047 76.88841 21.48114 76.28911 17.86337 c 75.92899 15.80707 74.98056 14.28134 73.56755 13.33842 c 72.15453 12.39824 70.27419 12.03537 68.05019 12.324 c 63.60222 12.90407 57.7907 16.09572 51.6823 22.42406 c 51.67955 22.4268 l 51.67679 22.42955 l 41.78018 30.56401 33.17014 33.32408 24.87897 31.85883 c 16.5878 30.39359 8.62927 24.71127 0.01923 15.98851 c 0.10995 15.88405 l 7.77432 21.58286 15.32324 27.01775 23.32849 28.64517 c 31.33374 30.26987 39.8036 28.09811 49.34834 18.55063 c 49.34834 18.55063 49.34834 18.54788 49.35109 18.54788 c 55.7564 10.7818 62.26892 6.14137 68.45428 4.41772 c 74.64244 2.6913 80.50893 3.88991 85.59743 7.78532 c 85.59743 7.78532 l 85.59743 7.78807 l 89.59181 11.04295 91.64261 15.94452 93.89684 19.88393 c 95.02396 21.855 96.20055 23.58415 97.69054 24.74976 c 99.17778 25.9181 100.97566 26.52565 103.36736 26.25899 c 103.36736 26.25899 l 103.36736 26.25899 l 104.2223 26.18202 104.85735 25.75316 105.27795 25.14288 c 105.7013 24.53258 105.90749 23.74359 105.89374 22.95462 c 105.87724 22.16565 105.64082 21.38217 105.18172 20.78288 c 104.72264 20.18633 104.04636 19.77121 103.13916 19.71623 c 102.29247 19.68324 101.73442 19.90042 101.40176 20.23305 c 101.06912 20.56569 100.95367 21.01929 101.01414 21.48114 c 101.1351 22.40756 101.95982 23.34225 103.11719 23.2955 c 103.29036 23.28726 l 103.16667 23.41371 l 102.55637 24.02402 101.79489 24.3924 101.04164 24.3154 c 100.2884 24.2412 99.55714 23.72162 99.01834 22.60275 c 99.01834 22.59999 l 99.01558 22.59724 l 98.22935 20.72514 98.55649 19.11694 99.46368 17.97607 c 100.36812 16.83797 101.84438 16.16446 103.35086 16.12596 c 104.85735 16.08746 106.39955 16.68677 107.42221 18.0998 c 108.44211 19.50731 108.94243 21.71756 108.40636 24.88446 c 109.95134 26.1353 110.00082 28.37303 109.00568 30.04721 c 108.01326 31.71313 105.9707 32.81825 103.3536 31.85332 c 103.43057 32.65056 103.25188 33.39555 102.81752 33.9481 c 102.36668 34.5254 101.65193 34.8938 100.72826 34.91302 c 98.87813 34.95702 96.1923 33.62648 92.95117 29.84926 c 91.7718 28.53796 89.0365 28.12836 86.5596 28.82663 c 84.07994 29.52489 81.8697 31.31177 81.69377 34.36047 c 81.69377 34.36324 l 81.3089 40.59534 89.11623 40.75478 89.9272 37.48889 c 89.9272 37.48889 l 89.9272 37.48616 l 90.40002 35.77074 89.85847 34.45119 88.98152 33.75844 c 88.1403 33.09315 87.0022 33.02443 86.12524 33.73643 c 87.0022 33.95636 87.60974 34.27798 87.94513 34.64912 c 88.29976 35.04773 88.37398 35.49583 88.21454 35.8807 c 87.89839 36.65044 86.7108 37.14803 85.21806 36.67517 c 85.2153 36.67517 l 85.2153 36.67242 l 83.97823 36.22433 83.42567 34.86356 83.88751 33.54126 c 84.34935 32.21896 85.8201 30.93513 88.58841 30.58876 c 88.59114 30.58876 l 88.59114 30.58876 l 90.61996 30.39359 92.16768 31.05609 93.21782 32.15298 c 94.26796 33.24985 94.82053 34.77559 94.87549 36.3123 c 94.93323 37.84627 94.49065 39.39124 93.54495 40.52386 c 92.60477 41.64822 91.16153 42.35748 89.23444 42.24753 c 87.63449 45.35396 85.10811 46.734 82.71918 46.71199 c 82.71918 46.57454 m 85.0641 46.59653 87.55476 45.24673 89.13272 42.1513 c 89.15471 42.11006 l 89.1987 42.11282 l 91.11205 42.23651 92.51682 41.54102 93.43774 40.43864 c 94.36142 39.33627 94.79305 37.82155 94.73805 36.31781 c 94.68582 34.81133 94.1415 33.31583 93.11887 32.24644 c 92.0962 31.17981 90.59523 30.53377 88.60489 30.72621 c 85.87233 31.0671 84.4593 32.32341 84.01672 33.58797 c 83.57411 34.8498 84.09369 36.11986 85.2593 36.54323 c 86.70529 37.00232 87.81042 36.50473 88.08807 35.82848 c 88.22552 35.49033 88.17053 35.10822 87.84065 34.7426 c 87.51352 34.37697 86.90598 34.03333 85.95206 33.81891 c 85.82285 33.79141 l 85.91907 33.7007 l 86.85925 32.85124 88.14856 32.9227 89.06674 33.65121 c 89.98767 34.37971 90.54298 35.76524 90.06189 37.52188 c 90.05916 37.52188 l 89.1987 40.9857 81.16594 40.6998 81.5563 34.35222 c 81.73775 31.24028 84.00574 29.40392 86.5211 28.69466 c 89.0365 27.98541 91.81305 28.38127 93.05562 29.75854 c 93.05562 29.75854 l 93.05562 29.76129 l 96.28302 33.52202 98.9441 34.8168 100.72275 34.77559 c 101.61345 34.75633 102.28423 34.40721 102.71033 33.86288 c 103.13916 33.32133 103.32335 32.57907 103.2244 31.77086 c 103.21065 31.65814 l 103.31511 31.69939 l 105.92122 32.70279 107.91154 31.61417 108.88747 29.97572 c 109.86063 28.34004 109.80563 26.15727 108.29366 24.96144 c 108.26067 24.93669 l 108.26892 24.89822 l 108.80772 21.73404 108.3074 19.5568 107.31224 18.1795 c 106.31433 16.805 104.8216 16.22493 103.3536 16.26067 c 101.8856 16.29916 100.4451 16.95892 99.57089 18.0613 c 98.69394 19.16367 98.3723 20.70865 99.14203 22.54501 c 99.14203 22.54501 99.14203 22.54501 99.14479 22.54501 c 99.66711 23.63364 100.35713 24.10924 101.05539 24.18071 c 101.70967 24.24394 102.38043 23.92505 102.94675 23.40273 c 101.81413 23.3505 101.00316 22.44055 100.87946 21.50038 c 100.81348 21.00279 100.93993 20.50246 101.30556 20.13408 c 101.67117 19.76846 102.27046 19.54305 103.14192 19.57878 c 103.14467 19.57878 l 103.14467 19.57878 l 104.0931 19.6365 104.8106 20.07361 105.28894 20.7004 c 105.77002 21.32718 106.01468 22.13817 106.02844 22.95187 c 106.04494 23.7656 105.83325 24.58206 105.39066 25.21985 c 104.94804 25.85764 104.27454 26.31398 103.38109 26.39645 c 100.95917 26.66586 99.1173 26.04457 97.60533 24.85973 c 96.09334 23.67213 94.9085 21.92923 93.77863 19.95265 c 91.51614 15.99951 89.47086 11.11992 85.50946 7.89253 c 80.45119 4.0191 74.64244 2.83426 68.49002 4.54967 c 62.3404 6.26234 55.84712 10.88626 49.45006 18.64134 c 49.45006 18.6441 l 49.4473 18.64685 l 39.87782 28.21358 31.3475 30.41283 23.30101 28.77713 c 15.52116 27.19917 8.19492 22.03918 0.78896 16.54657 c 9.12961 24.87622 16.8737 30.3056 24.90096 31.72412 c 33.14813 33.18112 41.71146 30.44307 51.58606 22.32509 c 51.58882 22.32509 51.58882 22.32509 51.58882 22.32509 c 57.71097 15.98575 63.53899 12.77486 68.03369 12.1893 c 70.27966 11.89516 72.19577 12.26079 73.64178 13.2257 c 75.08778 14.19063 76.06094 15.75484 76.42381 17.84137 c 76.42381 17.84137 l 77.03137 21.50038 75.76405 24.22745 73.8287 25.68169 c 71.89063 27.13596 69.28177 27.31738 67.22823 25.89612 c 67.22546 25.89612 l 67.22546 25.89337 l 66.31003 25.17862 65.94716 24.3099 65.97466 23.50444 c 66.00488 22.70172 66.42274 21.96222 67.05502 21.49213 c 67.68732 21.02478 68.53952 20.82686 69.4302 21.10725 c 70.29343 21.37666 71.18413 22.10516 71.95659 23.43571 c 72.91878 21.2612 72.61913 19.54305 71.63771 18.35545 c 70.63705 17.14311 68.92989 16.4751 67.15399 16.46135 c 65.37811 16.4476 63.53899 17.08537 62.27165 18.46815 c 61.0071 19.84818 60.30884 21.97871 60.8229 24.97243 c 60.8394 25.07964 l 60.73494 25.04941 l 58.09859 24.26317 56.10277 24.39514 54.34612 25.03017 c 52.59222 25.66245 51.0775 26.8033 49.4143 28.03764 c 46.14842 30.46231 42.29425 33.2306 34.97626 33.18936 c 37.25247 34.1543 39.58368 34.0993 41.92587 33.50002 c 44.38629 32.87321 46.85493 31.67738 49.2631 30.54478 c 51.67404 29.41216 54.02449 28.34277 56.25397 27.9744 c 58.48622 27.60329 60.60298 27.93867 62.51634 29.61285 c 62.51634 29.61285 l 63.41527 30.34135 63.96509 31.33652 64.17403 32.30417 c 64.38293 33.27458 64.25099 34.22028 63.7699 34.8498 c 63.70941 34.92953 l 63.6572 34.84431 l 62.2002 32.41689 60.66345 31.46571 59.32742 31.41074 c 57.99138 31.35849 56.83952 32.1997 56.14676 33.41203 c 55.45674 34.62439 55.23682 36.19958 55.76465 37.59062 c 56.2897 38.97888 57.56253 40.19122 59.88548 40.68332 c 62.98367 41.10666 65.1252 40.00429 66.31003 38.19815 c 67.49763 36.39203 67.72029 33.87665 66.94507 31.47946 c 66.91483 31.37775 l 67.01929 31.38873 l 68.60826 31.57018 70.5106 31.25403 72.19577 30.63824 c 73.8837 30.0197 75.35168 29.09877 76.08293 28.08162 c 76.08568 28.07887 l 76.08568 28.07611 l 76.63275 27.4026 77.25403 27.0892 77.85059 27.04797 c 78.44713 27.00673 79.01617 27.2404 79.45604 27.639 c 80.33572 28.43898 80.71509 29.92075 79.84366 31.27603 c 79.84091 31.28152 l 79.83815 31.28429 l 79.01343 32.30966 78.04851 32.73027 77.04236 32.86223 c 76.03896 32.99419 74.99706 32.84026 73.99915 32.72752 c 73.004 32.61757 72.05556 32.5461 71.2446 32.82649 c 70.43361 33.10689 69.74635 33.73369 69.25703 35.04224 c 68.8914 37.21399 69.48244 39.00089 70.769 40.01527 c 72.05832 41.0297 74.05688 41.2771 76.53928 40.32593 c 76.6245 40.29294 l 76.63275 40.38365 l 76.9269 44.24335 79.7062 46.5443 82.71918 46.57454 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -87.501 4.663 cm 0 G 0 g q 1 0 0 1 125.698 -247.72 cm q 0 G 0 g 0.3985 w q 0.9562 0.915 0.79648 RG 0.9562 0.915 0.79648 rg -68.38983 91.65018 m -60.9553 91.7478 -54.90224 87.04694 -53.0668 80.2714 c -44.79753 84.42557 -31.8957 73.26157 -34.33646 66.50557 c -16.47017 58.38275 -29.47939 40.07222 -41.31702 47.42867 c -49.04443 53.02773 -46.60857 60.98947 -38.1294 61.1408 c -43.6162 63.29353 -51.38756 61.00412 -47.85335 50.88963 c -45.5932 44.51439 -31.38315 38.4711 -23.17735 47.73132 c -15.86487 53.28647 -0.12202 41.12175 -11.94014 31.1342 c -1.21059 8.28389 -32.47174 0.12202 -39.14961 16.8558 c -42.8254 27.39497 -27.51213 34.35599 -25.59857 21.69826 c -20.5511 31.01216 -41.99066 41.96138 -61.60944 24.50024 c -72.46588 13.15564 -85.66547 10.82715 -103.10219 15.44994 c -85.72891 14.82999 -72.82222 18.54968 -62.4344 36.10358 c -42.82051 31.84201 -48.01443 55.47337 -58.71469 55.53683 c -62.59059 67.49162 -78.37738 70.9282 -86.0511 58.40715 c -99.19211 65.22173 -117.39034 48.63438 -103.8393 35.28836 c -117.82968 25.71086 -132.73778 33.5896 -139.98682 41.25356 c -149.26169 48.93214 -158.87822 49.45937 -167.52826 44.6169 c -171.3163 41.68314 -180.27873 37.12868 -190.69098 36.34276 c -184.68674 38.6517 -178.98514 41.34142 -171.45786 48.32686 c -162.7639 55.32204 -150.8384 55.32204 -137.88777 44.93422 c -115.80386 33.74092 -113.38263 61.55084 -128.52016 59.69098 c -134.48535 58.31442 -136.13531 52.94965 -131.8884 51.02144 c -132.88423 54.69232 -131.12201 57.37227 -126.62614 57.1819 c -116.05771 53.1986 -124.63449 39.50108 -137.37521 47.38472 c -145.68353 52.89107 -141.49033 65.3584 -130.16035 64.32353 c -136.01816 74.08165 -123.24327 83.86418 -115.61836 77.18141 c -114.18808 80.72539 -109.3017 82.90254 -105.42091 80.9841 c -101.13007 78.19676 -103.64893 71.89474 -101.091 68.7364 c -89.0532 52.54448 -71.04536 73.81319 -89.02393 78.53847 c -74.64304 69.05371 -97.38107 57.6603 -100.26115 74.22322 c -102.08684 86.30981 -86.82726 90.8789 -82.65845 85.68987 c -77.81113 89.8001 -72.85152 91.58673 -68.38983 91.65018 c -73.31526 62.62477 m -68.55092 62.77611 -63.58641 60.05223 -60.25725 52.85687 c -50.57234 53.50612 -49.40079 31.08537 -63.70358 40.43347 c -76.48825 6.10187 -129.26703 16.8558 -147.00154 33.98499 c -152.36632 39.04224 -161.58746 39.38394 -169.09521 35.01988 c -175.88051 29.64534 -189.49013 29.9187 -197.47137 35.21025 c -191.07661 33.58472 -183.58353 33.73604 -173.2201 38.6517 c -162.98846 45.27592 -155.74431 46.755 -148.62708 43.68456 c -141.63188 39.84769 -139.0447 35.33717 -131.9421 31.26111 c -118.93289 25.90611 -107.95439 27.23875 -101.95505 33.50174 c -98.58679 29.04004 -84.16196 33.35042 -87.51067 42.30309 c -90.70805 52.4517 -101.66214 48.51234 -99.24092 41.89792 c -97.88387 46.52069 -93.13416 47.4726 -90.83986 41.43906 c -89.62924 38.18309 -97.78136 31.00241 -103.80511 39.6866 c -109.57994 45.8617 -99.1677 61.95601 -85.17244 55.15118 c -82.64381 59.44691 -78.0796 62.47345 -73.31526 62.62477 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -13.517 104.885 cm 0 G 0 g q 1 0 0 1 -13.343 -210.521 cm q 0 G 0 g 0.3985 w q 0.95396 0.91064 0.78609 RG 0.95396 0.91064 0.78609 rg -52.38351 19.63618 m -51.15988 19.60797 -50.00009 19.14317 -49.35707 18.27594 c -44.35857 22.2112 -37.32408 16.60382 -41.77614 12.23344 c -39.59319 7.53935 -46.72713 5.69052 -48.38737 8.83131 c -49.65259 11.50134 -48.03096 13.50313 -46.34698 12.97151 c -48.09483 11.73004 -47.8097 9.87675 -45.67575 9.89456 c -42.50082 10.049 -42.93741 15.12921 -46.6024 16.37662 c -51.4435 17.62698 -54.87239 12.58392 -53.48984 9.27235 c -52.0286 5.10246 -46.32619 4.45798 -40.82127 7.51707 c -23.28487 18.11555 -24.61987 1.22067 -11.30235 6.49242 c -20.89697 0.48706 -23.89668 9.61539 -31.86372 7.63141 c -37.73395 6.25037 -38.74524 0.03711 -50.63121 0.93553 c -54.04376 0.98454 -62.52907 8.29819 -56.48065 13.07693 c -58.0592 17.63887 -55.07286 19.69708 -52.38351 19.63618 c -17.34929 14.58273 m -15.35196 14.64064 -13.31009 13.3769 -13.37393 10.93109 c -13.52243 8.78528 -15.00893 8.08435 -16.3885 8.97684 c -17.46216 9.65697 -16.98991 11.08702 -15.28662 10.57321 c -14.64064 10.45145 -14.56343 11.15385 -15.21237 11.93349 c -16.44641 13.77043 -19.26347 12.88388 -19.41493 11.25038 c -19.60797 9.06593 -17.99973 7.04634 -15.23613 7.48293 c -13.27888 7.96852 -12.46066 8.58925 -12.18443 9.67033 c -11.57857 8.93674 -10.9593 8.8907 -10.07277 9.19514 c -7.54231 9.86339 -6.04099 7.85567 -3.53578 7.34036 c -2.11314 7.07158 -0.97563 7.74725 -0.03711 8.52391 c -0.81377 6.04395 -3.87584 5.80933 -5.88802 6.96169 c -8.62935 8.515 -10.18562 8.45116 -14.00655 6.5548 c -18.72292 4.97475 -22.55275 8.8209 -20.69946 12.56313 c -20.0624 13.88478 -18.7155 14.54263 -17.34929 14.58273 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 83.628 37.55 cm 0 G 0 g q 1 0 0 1 12.808 -219.738 cm q 0 G 0 g 0.3985 w q 0.94911 0.90121 0.76352 RG 0.94911 0.90121 0.76352 rg -63.7979 35.97403 m -61.44655 35.95071 -59.27966 34.15063 -59.05067 31.15048 c -55.19821 32.6283 -52.79173 30.39357 -53.36421 27.0139 c -54.88654 22.9155 -59.02312 27.2217 -61.5356 24.09436 c -62.85226 22.04408 -60.38007 19.64609 -58.72205 21.68788 c -57.575 23.28653 -54.15718 24.54172 -51.68286 24.26184 c -52.88716 27.98709 -50.98955 32.08763 -46.1766 31.43037 c -38.95508 29.89955 -44.62883 19.32382 -49.14069 26.8464 c -49.85945 25.90927 -49.54779 23.98622 -48.18234 22.87946 c -42.32838 17.75697 -34.09338 29.04721 -26.69164 25.55307 c -38.34445 25.7757 -38.68582 16.83253 -46.85721 19.26868 c -45.26279 9.9863 -58.72841 11.24147 -55.51201 18.19374 c -53.0907 13.85785 -49.10678 17.75273 -51.88004 19.93019 c -55.0095 22.09496 -59.82243 19.38106 -58.88954 13.76878 c -57.77853 7.38052 -49.25731 7.48654 -39.82227 17.25871 c -24.57352 29.79141 -13.32567 25.74178 -0.053 12.29312 c -11.87755 21.08362 -23.3565 29.08751 -38.09851 14.34338 c -47.97456 2.3704 -58.15807 0.053 -65.98384 6.0469 c -72.11769 11.04642 -72.30428 21.13661 -79.72722 20.30548 c -82.42416 20.06165 -82.41144 15.32718 -79.547 15.1533 c -76.89882 15.0473 -77.68967 18.09407 -79.53004 18.01987 c -78.60562 18.94853 -77.23595 19.1139 -76.4154 17.40924 c -74.01106 11.6846 -85.22711 9.41383 -83.55424 19.21144 c -85.93527 21.09421 -83.72388 26.06194 -79.66362 24.4972 c -79.9753 27.03723 -76.7186 28.80127 -71.72969 22.9876 c -69.86177 20.91188 -63.22754 21.74513 -62.95403 26.4987 c -62.65509 31.34981 -68.76349 31.52155 -69.40804 28.92636 c -70.14375 26.24638 -67.71397 24.75584 -66.30188 26.03224 c -69.27658 26.7001 -68.00656 28.95392 -65.74002 28.23515 c -63.88481 27.56305 -64.08624 24.17491 -68.33095 23.64487 c -74.53052 23.04483 -74.75102 32.91666 -68.79105 32.53288 c -67.56555 34.9351 -65.62553 35.991 -63.7979 35.97403 c -64.7838 20.5281 m -65.77396 20.54932 -66.95705 20.26944 -68.26735 19.54433 c -70.86888 17.97746 -69.13452 11.70369 -64.24525 10.67749 c -67.80513 13.25569 -68.87796 16.47421 -66.11531 18.66017 c -66.71321 16.2728 -64.42548 13.92993 -62.12502 16.87706 c -60.98645 18.44604 -62.25223 20.47087 -64.7838 20.5281 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 30.908 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 33.549 31.999 Td[<25713ed93758315a26d62fde2599>]TJ ET 0 G 0 g q 1 0 0 1 224.782 30.908 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -27.27 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -27.27 Td[<30873ba53b9d2628231f2cc226283d2c23f438b83b251c6838ad3ea51ba225993a0f1ba2352a337326de35c1369e2ad22628>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -44.507 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -44.507 Td[<36b13bbe346529573160345b29f627023b9d26282a881c68234c3bd535ab3d31369b2d9931622ab923342c232a8035ab2b7a>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -61.745 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -61.745 Td[<26203b0033b82b69350b>]TJ /F8 10.9091 Tf 58.178 0 Td[<0024001c0048006900690042006900480032002b00420060002b00480032>]TJ /F4 10.9091 Tf 85.909 0 Td[<1c68235637583b9d262838b83b252ab923502a87>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -78.982 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -78.982 Td[<34722d0726272c4c26ea376b350b2628352d2ff7372129593be734493f421c64240a1c6531451c682d993bbe3c6b>]TJ /F8 10.9091 Tf 0 -13.549 Td[<002400620042004b005400480032005400600051003b0060003200620062004b001c0060004600320060>]TJ /F4 10.9091 Tf 123.905 0 Td[<2b8826093d182647341f25a01ba3>]TJ /F5 10.9091 Tf 76.364 0 Td[<0055>]TJ /F4 10.9091 Tf 4.243 0 Td[<3132344d3e97>]TJ -204.512 -13.55 Td[<35c1>]TJ /F8 10.9091 Tf 10.909 0 Td[<00240062003f0032004d004b001c005400600051003b0060003200620062004b001c0060004600320060>]TJ /F5 10.9091 Tf 120.272 0 Td[<0056>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 124.061 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+175 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 120 0 R/Font<</F1 121 0 R/F7 162 0 R/F4 141 0 R/F5 147 0 R/F8
+167 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length 77710>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 257.125 27.09 cm 0 G 0 g q 1 0 0 1 -73.073 -210.583 cm q 0 G 0 g 0.3985 w q 0.94514 0.89351 0.74506 RG 0.94514 0.89351 0.74506 rg 15.02646 20.13719 m 13.39296 20.15863 12.063 19.12576 11.65973 17.63707 c 9.84282 18.5498 7.00806 16.09688 7.54433 14.61247 c 3.61877 12.82773 6.47714 8.80458 9.07808 10.42091 c 10.77592 11.65114 10.24072 13.40048 8.37772 13.43372 c 9.58325 13.90672 11.29076 13.4037 10.51422 11.18137 c 10.01764 9.78061 6.89543 8.45277 5.09247 10.48741 c 3.4858 11.70798 0.0268 9.03519 2.62346 6.84073 c 0.26598 1.82011 7.13461 0.0268 8.60187 3.7035 c 9.4095 6.01915 6.0449 7.54863 5.62445 4.76749 c 4.51544 6.81392 9.22609 9.21965 13.53668 5.38313 c 15.92204 2.89052 18.82224 2.3789 22.6534 3.39462 c 18.83618 3.25839 16.00035 4.07568 13.71796 7.9326 c 9.40843 6.99625 10.54962 12.18848 12.90067 12.20244 c 13.75227 14.82912 17.22092 15.5842 18.90697 12.8331 c 21.79428 14.33038 25.79277 10.68584 22.81535 7.75348 c 25.8893 5.64912 29.16489 7.38023 30.75763 9.06415 c 32.79547 10.75127 34.9084 10.8671 36.80898 9.80313 c 37.64128 9.15852 39.61047 8.15784 41.89824 7.98515 c 40.579 8.49248 39.32625 9.08345 37.67238 10.61827 c 35.76216 12.15524 33.1419 12.15524 30.29643 9.87285 c 25.44418 7.41348 24.9122 13.52382 28.23819 13.11517 c 29.54886 12.81273 29.91138 11.63397 28.97824 11.21033 c 29.19705 12.01688 28.80986 12.60571 27.82205 12.56387 c 25.49995 11.68867 27.38445 8.6791 30.18379 10.41127 c 32.0093 11.62111 31.08797 14.3604 28.59856 14.13303 c 29.88564 16.27707 27.07877 18.42647 25.40343 16.95813 c 25.08917 17.73682 24.01555 18.21516 23.16287 17.79366 c 22.2201 17.18123 22.77353 15.79657 22.21152 15.10262 c 19.56657 11.54495 15.60992 16.21808 19.56015 17.2563 c 16.4004 15.17235 21.39636 12.66899 22.02917 16.30817 c 22.43031 18.9638 19.0775 19.96773 18.16154 18.82759 c 17.0965 19.73068 16.00677 20.12325 15.02646 20.13719 c 16.10867 13.75978 m 15.06186 13.79303 13.97107 13.19455 13.2396 11.6136 c 11.11165 11.75624 10.85423 6.83002 13.99683 8.88396 c 16.80585 1.34067 28.40228 3.7035 32.29887 7.4671 c 33.47762 8.57828 35.50366 8.65335 37.15326 7.69449 c 38.6441 6.5136 41.6344 6.57367 43.38802 7.73631 c 41.98296 7.37915 40.33661 7.4124 38.05956 8.49248 c 35.8115 9.94792 34.21983 10.27292 32.65605 9.59828 c 31.11906 8.75523 30.55061 7.7642 28.99004 6.86862 c 26.1317 5.69202 23.71951 5.98483 22.40135 7.36093 c 21.66129 6.38062 18.4919 7.32768 19.22766 9.29474 c 19.93018 11.52458 22.33699 10.65903 21.80501 9.20572 c 21.50684 10.22142 20.46324 10.43057 19.95914 9.1049 c 19.69315 8.38951 21.48431 6.81177 22.80785 8.71985 c 24.07668 10.07663 21.78893 13.61285 18.7139 12.1177 c 18.15833 13.06155 17.15549 13.72653 16.10867 13.75978 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -.996 109.602 cm 0 G 0 g q 1 0 0 1 118.063 -244.078 cm q 0 G 0 g 0.3985 w q 0.9481 0.89925 0.75882 RG 0.9481 0.89925 0.75882 rg -142.97708 80.62119 m -137.70749 80.56892 -132.85132 76.53477 -132.33812 69.8112 c -123.70439 73.12311 -118.31128 68.11485 -119.59421 60.54073 c -123.00589 51.35579 -132.27635 61.0064 -137.90706 53.99771 c -140.85785 49.40286 -135.31743 44.02875 -131.60164 48.60458 c -129.03099 52.18733 -121.37132 55.0003 -115.82616 54.3731 c -118.52509 62.72174 -114.27237 71.91144 -103.48613 70.43842 c -87.302 67.00774 -100.01743 43.3065 -110.12894 60.16534 c -111.73973 58.06512 -111.04124 53.75537 -107.98119 51.27502 c -94.8619 39.79503 -76.4065 65.09756 -59.81848 57.26685 c -85.93353 57.76578 -86.69856 37.72331 -105.0114 43.18295 c -101.43816 22.38025 -131.61589 25.19322 -124.40764 40.77386 c -118.98126 31.05675 -110.0529 39.78554 -116.26807 44.66547 c -123.28148 49.5169 -134.06773 43.4348 -131.977 30.85718 c -129.48715 16.54047 -110.39027 16.77805 -89.24544 38.67839 c -55.07158 66.76538 -29.86409 57.68974 -0.11876 27.55003 c -26.61871 47.25037 -52.34415 65.18784 -85.38234 32.14488 c -107.51553 5.31232 -130.33769 0.11876 -147.87602 13.5517 c -161.62254 24.75607 -162.0407 47.36916 -178.67622 45.50652 c -184.7203 44.96007 -184.69179 34.34964 -178.27231 33.96 c -172.33751 33.72243 -174.10988 40.55054 -178.23431 40.38425 c -176.16258 42.46545 -173.09302 42.83607 -171.25414 39.01576 c -165.86577 26.18631 -191.00198 21.0973 -187.25293 43.05467 c -192.58902 47.27414 -187.63307 58.40724 -178.53365 54.90053 c -179.23215 60.593 -171.93361 64.54637 -160.75299 51.51735 c -156.56677 46.8655 -141.6989 48.73288 -141.08592 59.38608 c -140.41594 70.25786 -154.10544 70.64273 -155.54993 64.82672 c -157.19876 58.82063 -151.75336 55.48022 -148.58878 58.34071 c -155.25534 59.8375 -152.4091 64.88849 -147.32959 63.27768 c -143.17189 61.77141 -143.62329 54.17828 -153.13611 52.99037 c -167.02992 51.64565 -167.5241 73.76933 -154.1672 72.90927 c -151.42076 78.2929 -147.073 80.65921 -142.97708 80.62119 c -145.1866 46.00543 m -147.40561 46.05296 -150.05704 45.42574 -152.99355 43.80067 c -158.82382 40.2892 -154.93698 26.22908 -143.97966 23.92928 c -151.95769 29.70729 -154.36201 36.92029 -148.17064 41.81923 c -149.51059 36.46889 -144.38356 31.2183 -139.22803 37.8231 c -136.67639 41.33932 -139.51312 45.87715 -145.1866 46.00543 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 30.681 206.555 cm 0 G 0 g q 1 0 0 1 71.804 -234.746 cm q 0 G 0 g 0.3985 w q 0.95424 0.91118 0.78737 RG 0.95424 0.91118 0.78737 rg -49.74622 66.6656 m -44.3384 66.73663 -39.93546 63.31723 -38.60036 58.38878 c -32.58536 61.41048 -23.20068 53.28987 -24.97607 48.37563 c -11.98026 42.46715 -21.44305 29.14822 -30.05367 34.49922 c -35.67453 38.57196 -33.9027 44.36325 -27.73502 44.47331 c -31.72607 46.03922 -37.3789 44.3739 -34.80815 37.01672 c -33.16412 32.37941 -22.82785 27.98357 -16.85902 34.71936 c -11.53996 38.76015 -0.08876 29.91164 -8.68515 22.64676 c -0.88057 6.02563 -23.61967 0.08876 -28.47713 12.26079 c -31.15085 19.92688 -20.0121 24.99028 -18.6202 15.78314 c -14.9487 22.558 -30.54367 30.52237 -44.81421 17.82127 c -52.7111 9.5693 -62.31236 7.87558 -74.99571 11.23816 c -62.35854 10.78722 -52.9703 13.49289 -45.41428 26.26146 c -31.14731 23.16162 -34.92532 40.35089 -42.7086 40.39705 c -45.52791 49.09286 -57.01108 51.5926 -62.5929 42.4849 c -72.15155 47.44176 -85.38881 35.37627 -75.53188 25.66846 c -85.70837 18.70186 -96.55241 24.4328 -101.8253 30.0075 c -108.57176 35.59285 -115.56677 35.97633 -121.85872 32.45398 c -124.61412 30.31998 -131.13332 27.00711 -138.70709 26.43542 c -134.33966 28.11494 -130.19237 30.07143 -124.71709 35.15256 c -118.39317 40.24081 -109.71864 40.24081 -100.29846 32.6848 c -84.2348 24.54288 -82.47363 44.77158 -93.48454 43.41875 c -97.82358 42.41743 -99.02374 38.51515 -95.93457 37.11258 c -96.65894 39.78276 -95.37712 41.73213 -92.10684 41.59366 c -84.41945 38.69623 -90.65814 28.73277 -99.92564 34.46727 c -105.96904 38.47253 -102.91893 47.54118 -94.67761 46.78842 c -98.93852 53.8864 -89.64618 61.00214 -84.09987 56.14114 c -83.0595 58.71901 -79.50519 60.30264 -76.68233 58.90718 c -73.56119 56.8797 -75.3934 52.29567 -73.53279 49.9983 c -64.7766 38.22043 -51.67783 53.69112 -64.7553 57.12825 c -54.29475 50.22913 -70.83421 41.94162 -72.92915 53.98938 c -74.25716 62.78108 -63.15746 66.1046 -60.1251 62.33012 c -56.5992 65.31989 -52.99161 66.61946 -49.74622 66.6656 c -53.32895 45.55275 m -49.86339 45.66283 -46.25226 43.6815 -43.83064 38.44768 c -36.78592 38.91994 -35.93373 22.61125 -46.33748 29.41096 c -55.63693 4.43843 -94.02782 12.26079 -106.92775 24.72041 c -110.83005 28.399 -117.53743 28.64755 -122.99852 25.47318 c -127.93408 21.56378 -137.8336 21.76263 -143.63913 25.61166 c -138.98761 24.42924 -133.5372 24.53934 -125.99892 28.11494 c -118.55652 32.93335 -113.28717 34.00922 -108.11015 31.77579 c -103.0219 28.9849 -101.14 25.70398 -95.97363 22.73907 c -86.51085 18.84389 -78.52518 19.81326 -74.16129 24.36888 c -71.71126 21.12349 -61.21873 24.25882 -63.65457 30.77092 c -65.98032 38.15295 -73.94824 35.28749 -72.18706 30.47621 c -71.19995 33.83878 -67.74504 34.53117 -66.07619 30.14243 c -65.19559 27.77406 -71.12538 22.5509 -75.50702 28.8677 c -79.70758 33.35942 -72.13379 45.0663 -61.95374 40.11653 c -60.11446 43.24121 -56.79448 45.44269 -53.32895 45.55275 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.722 216.388 cm 0 G 0 g q 1 0 0 1 -72 -223.547 cm q 0 G 0 g 0.3985 w q 0.95192 0.90666 0.77657 RG 0.95192 0.90666 0.77657 rg 118.02441 44.24199 m 115.26744 44.17844 112.65434 43.13118 111.2056 41.17722 c 99.9435 50.04369 84.09427 37.40979 94.12509 27.56299 c 89.20671 16.9868 105.2801 12.82123 109.02077 19.89767 c 111.87141 25.9135 108.21776 30.42368 104.42358 29.22589 c 108.36162 26.42876 107.71924 22.25314 102.91125 22.2933 c 95.75786 22.64127 96.74153 34.08739 104.99907 36.89789 c 115.90651 39.71507 123.63203 28.35262 120.51704 20.8914 c 117.22476 11.49628 104.37674 10.04419 91.97371 16.93661 c 52.46272 40.81586 55.47063 2.75026 25.46515 14.62799 c 47.08261 1.09743 53.8412 21.66429 71.79163 17.19423 c 85.01773 14.08261 87.29625 0.08363 114.07632 2.10786 c 121.76506 2.21828 140.8832 18.69652 127.25557 29.46344 c 130.8122 39.74184 124.08372 44.37918 118.02441 44.24199 c 39.0894 32.85611 m 34.58925 32.9866 29.98872 30.1393 30.1326 24.62871 c 30.46718 19.79396 33.81636 18.21472 36.92465 20.22557 c 39.34369 21.75797 38.27971 24.98001 34.44203 23.82234 c 32.9866 23.54799 32.8126 25.13057 34.27473 26.88715 c 37.05513 31.02594 43.40219 29.02847 43.74347 25.34804 c 44.17844 20.42633 40.55489 15.87598 34.32828 16.85965 c 29.91846 17.95374 28.07492 19.35231 27.45258 21.78807 c 26.08748 20.13522 24.69226 20.03152 22.6948 20.71742 c 16.9935 22.22304 13.61084 17.69946 7.96642 16.53845 c 4.76111 15.93286 2.1982 17.45523 0.08363 19.2051 c 1.8335 13.61754 8.73262 13.0889 13.26622 15.68527 c 19.44266 19.18501 22.94908 19.04115 31.55794 14.76851 c 42.18431 11.20853 50.81322 19.87425 46.6376 28.30577 c 45.20226 31.28357 42.16757 32.76578 39.0894 32.85611 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.515 158.99 cm 0 G 0 g q 1 0 0 1 -72 -236.389 cm q 0 G 0 g 0.3985 w q 0.9458 0.89479 0.74815 RG 0.9458 0.89479 0.74815 rg 117.96297 66.51637 m 113.61531 66.47324 109.60873 63.14488 109.18533 57.5976 c 102.06207 60.33008 97.61249 56.19804 98.67099 49.94902 c 101.48578 42.371 109.13437 50.3332 113.77995 44.55072 c 116.21451 40.75974 111.64339 36.32585 108.57768 40.10112 c 106.45679 43.05705 100.13719 45.3779 95.56215 44.86043 c 97.78891 51.74846 94.2802 59.33038 85.38104 58.11508 c 72.02837 55.2846 82.5192 35.72995 90.86166 49.63931 c 92.19066 47.90652 91.61438 44.35077 89.08968 42.30437 c 78.26561 32.83281 63.03902 53.70863 49.35312 47.24791 c 70.8993 47.65955 71.53049 31.12355 86.63945 35.62802 c 83.69136 18.46478 108.58945 20.78563 102.64229 33.64041 c 98.16527 25.6233 90.79895 32.82497 95.92676 36.85117 c 101.71317 40.85384 110.61234 35.8358 108.88739 25.45865 c 106.83313 13.64667 91.0773 13.8427 73.63177 31.91153 c 45.4367 55.08466 24.63931 47.5968 0.09799 22.73012 c 21.96173 38.98383 43.18643 53.7831 70.44455 26.52107 c 88.70547 4.38292 107.53487 0.09799 122.00484 11.18079 c 133.34637 20.42494 133.69138 39.08183 147.41647 37.54506 c 152.40315 37.09422 152.37962 28.3401 147.08324 28.01863 c 142.18674 27.82262 143.64903 33.45616 147.0519 33.31894 c 145.34262 35.03606 142.81009 35.34184 141.29291 32.18988 c 136.84724 21.60497 157.58585 17.40628 154.49269 35.52217 c 158.89522 39.00343 154.80632 48.18877 147.29886 45.29558 c 147.87515 49.99214 141.85352 53.25386 132.62895 42.5043 c 129.17514 38.66629 116.9084 40.20697 116.40268 48.99638 c 115.8499 57.96611 127.1444 58.28366 128.33618 53.48515 c 129.69653 48.52985 125.20384 45.77385 122.5929 48.1339 c 128.09312 49.36879 125.74484 53.53612 121.554 52.20712 c 118.1237 50.96439 118.49612 44.69968 126.34465 43.7196 c 137.80772 42.61015 138.21544 60.86324 127.19537 60.15366 c 124.92941 64.5954 121.3423 66.54773 117.96297 66.51637 c 119.78593 37.9567 m 121.61673 37.99591 123.80428 37.47842 126.22704 36.13766 c 131.03731 33.24052 127.83046 21.64026 118.79015 19.7428 c 125.3724 24.50995 127.3561 30.46101 122.24791 34.50287 c 123.35344 30.08858 119.1234 25.7566 114.86983 31.20589 c 112.7646 34.10692 115.10504 37.85085 119.78593 37.9567 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 30.867 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 9.028 31.875 Td[<25713ed93758315a26d62fde2599>]TJ ET BT /F1 20.6585 Tf 160.764 31.875 Td[<1c643a661c65>]TJ ET 0 G 0 g q 1 0 0 1 224.782 30.867 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -37.287 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -37.287 Td[<235637583b9d262835d33f7638b81c682d993bbe3c6b28953f74287d3a11262823563ea025a0375c1ba3>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -54.775 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -54.775 Td[<3eb22956287d3a113a112aad29f6270226de35c13d183a3c26281ba33435230f3ba53972231f2cc235c137ec30bf34e72628>]TJ /F5 10.9091 Tf 0 -13.549 Td[<0054004d003b>]TJ /F4 10.9091 Tf 21.218 0 Td[<2aca>]TJ /F5 10.9091 Tf 14.542 0 Td[<0054>-27<002f0037>]TJ /F4 10.9091 Tf 19.407 0 Td[<26191ba3>]TJ /F8 10.9091 Tf -55.167 -13.55 Td[<002400690042006900480032003b0060001c0054003f0042002b002600240042004d002b0048006d002f0032003b0060001c0054003f0042002b0062002800720042002f0069003f0034006b002b004b0029002600480051003b005100270027>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 196.633 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+176 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 120 0 R/Font<</F1 121 0 R/F7 162 0 R/F4 141 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+105583>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 179.989 137.468 cm 0 G 0 g q 1 0 0 1 60.304 -231.977 cm q 0 G 0 g 0.3985 w q 0.95473 0.91211 0.78958 RG 0.95473 0.91211 0.78958 rg -45.76779 61.33408 m -40.79247 61.39941 -36.74164 58.2535 -35.51332 53.71918 c -29.97937 56.49922 -21.34523 49.02806 -22.97862 44.50682 c -11.02216 39.07088 -19.72816 26.81712 -27.65015 31.74017 c -32.82149 35.48718 -31.19135 40.81534 -25.51692 40.91661 c -29.18881 42.35727 -34.38954 40.82513 -32.02438 34.05634 c -30.51186 29.7899 -21.00221 25.7456 -15.51073 31.94272 c -10.61707 35.66034 -0.08165 27.51949 -7.99057 20.83562 c -0.81015 5.54373 -21.7307 0.08165 -26.19969 11.28023 c -28.65958 18.33324 -18.41165 22.9917 -17.13106 14.52089 c -13.75319 20.75395 -28.10097 28.08136 -41.23022 16.39603 c -48.49557 8.804 -57.329 7.24573 -68.99799 10.33939 c -57.37146 9.92451 -48.73405 12.4138 -41.78232 24.16121 c -28.65631 21.3093 -32.13219 37.12386 -39.29301 37.16632 c -41.88684 45.1667 -52.45166 47.46652 -57.58707 39.0872 c -66.38129 43.64764 -78.55989 32.54707 -69.49127 23.61565 c -78.85391 17.20619 -88.8307 22.4788 -93.6819 27.60768 c -99.88882 32.74635 -106.3244 33.09917 -112.11317 29.8585 c -114.6482 27.89516 -120.64604 24.84723 -127.6141 24.32127 c -123.59595 25.86647 -119.78033 27.66649 -114.74294 32.34128 c -108.92477 37.02258 -100.94398 37.02258 -92.27718 30.07085 c -77.49818 22.58006 -75.87785 41.19101 -86.0082 39.94637 c -90.00021 39.02513 -91.1044 35.43492 -88.26228 34.14453 c -88.92871 36.60115 -87.7494 38.39464 -84.74069 38.26723 c -77.66808 35.60152 -83.40782 26.43489 -91.93416 31.71077 c -97.49425 35.39572 -94.68806 43.7391 -87.10583 43.04655 c -91.02599 49.57689 -82.47679 56.12354 -77.37405 51.65129 c -76.41689 54.023 -73.14682 55.47998 -70.54971 54.19612 c -67.67819 52.3308 -69.36386 48.11336 -67.65207 45.99974 c -59.59615 35.16377 -47.54492 49.39722 -59.57654 52.55946 c -49.95258 46.2121 -65.16931 38.58739 -67.09671 49.67162 c -68.31848 57.7602 -58.10649 60.81792 -55.31665 57.34532 c -52.07271 60.09596 -48.75365 61.29161 -45.76779 61.33408 c -49.064 41.9097 m -45.8756 42.01099 -42.55327 40.18811 -40.32532 35.37285 c -33.844 35.80734 -33.05997 20.80295 -42.63167 27.05885 c -51.18741 4.08348 -86.50801 11.28023 -98.37628 22.74341 c -101.9665 26.1278 -108.13747 26.35648 -113.1618 23.43599 c -117.70265 19.83925 -126.81047 20.02217 -132.15169 23.56339 c -127.87218 22.47554 -122.85765 22.57681 -115.92226 25.86647 c -109.07504 30.29951 -104.22711 31.28935 -99.46414 29.23456 c -94.7828 26.66684 -93.0514 23.64833 -88.29822 20.92055 c -79.5922 17.33687 -72.24518 18.2287 -68.23029 22.42001 c -65.9762 19.43416 -56.32281 22.31873 -58.56384 28.31004 c -60.70358 35.10172 -68.03427 32.4654 -66.41396 28.0389 c -65.50578 31.13255 -62.3272 31.76958 -60.7918 27.73183 c -59.98163 25.55286 -65.43718 20.7474 -69.4684 26.55904 c -73.33302 30.69154 -66.36494 41.46216 -56.99905 36.90823 c -55.30684 39.78302 -52.25238 41.80844 -49.064 41.9097 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 164.568 169.396 cm 0 G 0 g q 1 0 0 1 -1.645 -215.932 cm q 0 G 0 g 0.3985 w q 0.94751 0.8981 0.75606 RG 0.94751 0.8981 0.75606 rg -52.90701 29.87689 m -50.95003 29.85756 -49.1478 28.363 -48.93504 25.88908 c -47.35257 26.48163 -46.05319 26.3269 -45.20921 25.66228 c -44.35645 24.9906 -43.97137 23.80727 -44.21225 22.39537 c -44.21225 22.39183 l -44.21402 22.38658 l -44.53227 21.52852 -44.9947 21.10126 -45.53802 20.91313 c -46.08308 20.72499 -46.70024 20.77422 -47.34026 20.8463 c -47.97852 20.9184 -48.63963 21.01334 -49.2656 20.93246 c -49.89154 20.84982 -50.48233 20.59488 -50.99576 19.9566 c -51.52852 19.12317 -51.29291 18.22646 -50.76015 17.74292 c -50.49464 17.50026 -50.15529 17.36313 -49.79836 17.38774 c -49.44318 17.41235 -49.07043 17.59698 -48.73283 18.0137 c -48.24754 18.68712 -47.29456 19.27966 -46.20616 19.6788 c -45.13713 20.06914 -43.93797 20.26958 -42.91464 20.16585 c -43.39465 21.70436 -43.25224 23.31319 -42.48561 24.47893 c -41.70845 25.6605 -40.29654 26.38316 -38.28856 26.10887 c -38.28682 26.10887 l -38.28505 26.10712 l -36.77644 25.78711 -35.93245 24.9906 -35.5843 24.07278 c -35.23618 23.1567 -35.38211 22.12282 -35.83575 21.32631 c -36.2894 20.52982 -37.056 19.96715 -37.94922 20.00233 c -38.83012 20.03926 -39.82004 20.66519 -40.74843 22.18262 c -41.00688 21.80634 -41.08424 21.256 -40.95941 20.68102 c -40.83105 20.0797 -40.48819 19.45901 -39.93082 19.00713 c -39.92905 19.00713 l -39.92905 19.00713 l -38.72462 17.9539 -37.4059 17.74469 -35.99576 17.97852 c -34.5856 18.21239 -33.08577 18.89108 -31.54552 19.6155 c -30.00525 20.33815 -28.42278 21.10652 -26.8368 21.5127 c -25.2526 21.9171 -23.66309 21.95929 -22.11755 21.22961 c -21.93117 21.14345 l -22.13513 21.14697 l -26.95638 21.24017 -29.42853 19.43967 -31.5543 17.86072 c -32.61632 17.07301 -33.59216 16.33804 -34.73154 15.9266 c -35.85509 15.52043 -37.1404 15.4378 -38.81078 15.9231 c -38.49956 14.02412 -38.94617 12.64738 -39.76553 11.75241 c -40.5937 10.8469 -41.79462 10.43195 -42.95157 10.44072 c -44.10852 10.45128 -45.22679 10.88382 -45.88791 11.68384 c -46.54903 12.48563 -46.74771 13.65314 -46.07605 15.10548 c -46.03912 15.1846 l -45.99869 15.109 l -45.49933 14.21753 -44.92436 13.75334 -44.38106 13.58455 c -43.83951 13.414 -43.32433 13.53357 -42.94102 13.8184 c -42.55595 14.10149 -42.30275 14.54985 -42.28517 15.03691 c -42.2676 15.52219 -42.48386 16.04793 -43.04826 16.49101 c -43.05002 16.49277 l -44.33182 17.37895 -45.95648 17.26642 -47.16795 16.35562 c -48.37941 15.44658 -49.17767 13.73929 -48.79437 11.42537 c -48.56404 10.11017 -47.95743 9.13431 -47.05367 8.53122 c -46.1499 7.92989 -44.94722 7.69778 -43.52477 7.88242 c -40.67986 8.2534 -36.96281 10.29478 -33.0559 14.34238 c -33.05414 14.34413 l -33.05238 14.3459 l -26.72252 19.54869 -21.21556 21.31401 -15.91254 20.37685 c -10.60953 19.43967 -5.51927 15.80528 -0.01228 10.22621 c -0.07031 10.1594 l -4.97244 13.80435 -9.8007 17.28049 -14.92085 18.3214 c -20.041 19.36055 -25.4583 17.9715 -31.5631 11.86494 c -31.5631 11.86494 -31.5631 11.86319 -31.56487 11.86319 c -35.6617 6.89601 -39.82707 3.92801 -43.78323 2.82556 c -47.74115 1.72134 -51.49335 2.48796 -54.74796 4.97948 c -54.74796 4.97948 l -54.74796 4.98123 l -57.30275 7.06305 -58.61444 10.19809 -60.05623 12.71771 c -60.77713 13.97841 -61.52968 15.08438 -62.48268 15.8299 c -63.43391 16.57718 -64.58385 16.96574 -66.11356 16.7952 c -66.11356 16.7952 l -66.11356 16.7952 l -66.66039 16.74596 -67.06654 16.47166 -67.33557 16.08133 c -67.60635 15.691 -67.73822 15.18636 -67.72943 14.68173 c -67.71887 14.1771 -67.56766 13.67598 -67.27403 13.29268 c -66.9804 12.91112 -66.54785 12.64561 -65.96762 12.61046 c -65.42607 12.58936 -65.06912 12.72826 -64.85637 12.94102 c -64.64363 13.15378 -64.56978 13.4439 -64.60846 13.73929 c -64.68582 14.33182 -65.2133 14.92964 -65.95355 14.89975 c -66.06433 14.89449 l -65.9852 14.97537 l -65.59486 15.3657 -65.10782 15.60132 -64.62604 15.5521 c -64.14427 15.50461 -63.67656 15.1723 -63.33194 14.45667 c -63.33194 14.45491 l -63.33017 14.45316 l -62.8273 13.25575 -63.03654 12.22716 -63.61678 11.49747 c -64.19525 10.76953 -65.13947 10.33875 -66.10301 10.31412 c -67.06654 10.2895 -68.05296 10.67282 -68.70703 11.57658 c -69.35938 12.47684 -69.67937 13.8905 -69.3365 15.91605 c -70.32466 16.71608 -70.35631 18.14732 -69.71982 19.21812 c -69.08508 20.28365 -67.77866 20.9905 -66.10477 20.37332 c -66.154 20.88322 -66.03972 21.35973 -65.7619 21.71315 c -65.47353 22.08238 -65.01637 22.31801 -64.4256 22.3303 c -63.24226 22.35844 -61.5244 21.50742 -59.45139 19.09154 c -58.69708 18.25282 -56.94757 17.99083 -55.36334 18.43744 c -53.77737 18.88405 -52.36371 20.02695 -52.25117 21.97688 c -52.25117 21.97865 l -52.00502 25.96469 -56.99857 26.06667 -57.51726 23.97783 c -57.51726 23.97783 l -57.51726 23.97606 l -57.81969 22.87889 -57.47331 22.03491 -56.91241 21.59181 c -56.37437 21.16632 -55.64644 21.12234 -55.08554 21.57776 c -55.64644 21.71841 -56.03502 21.92413 -56.24953 22.16151 c -56.47635 22.41646 -56.52382 22.70306 -56.42184 22.94922 c -56.21965 23.44154 -55.46007 23.7598 -54.50531 23.45738 c -54.50354 23.45738 l -54.50354 23.45561 l -53.71233 23.169 -53.3589 22.29865 -53.6543 21.45291 c -53.94969 20.60718 -54.89037 19.78606 -56.66098 19.56451 c -56.66273 19.56451 l -56.66273 19.56451 l -57.96034 19.43967 -58.95027 19.86342 -59.62193 20.56499 c -60.29361 21.26654 -60.64702 22.24239 -60.68219 23.22527 c -60.71912 24.2064 -60.43604 25.19456 -59.83118 25.91899 c -59.22983 26.63812 -58.30673 27.09175 -57.07417 27.02144 c -56.05084 29.0083 -54.43498 29.89096 -52.90701 29.87689 c -52.90701 29.78899 m -54.40685 29.80304 -55.99985 28.93973 -57.00911 26.9599 c -57.02318 26.93352 l -57.05132 26.93527 l -58.27509 27.01439 -59.17357 26.56955 -59.7626 25.86447 c -60.35338 25.1594 -60.62944 24.19058 -60.59427 23.22879 c -60.56087 22.26524 -60.21272 21.30875 -59.55864 20.62476 c -58.90456 19.94254 -57.94452 19.52936 -56.67152 19.65242 c -54.92378 19.87045 -54.02 20.674 -53.73694 21.4828 c -53.45384 22.28986 -53.78616 23.10219 -54.53168 23.37297 c -55.45654 23.66661 -56.16338 23.34836 -56.34096 22.91582 c -56.42886 22.69954 -56.3937 22.45514 -56.18272 22.22128 c -55.97348 21.98744 -55.5849 21.76764 -54.97478 21.63051 c -54.89214 21.61292 l -54.95367 21.55489 l -55.55501 21.0116 -56.37964 21.0573 -56.96692 21.52324 c -57.55594 21.9892 -57.91112 22.87538 -57.60342 23.99893 c -57.60165 23.99893 l -57.05132 26.21437 -51.91357 26.03151 -52.16325 21.9716 c -52.27931 19.98123 -53.72989 18.80669 -55.33873 18.35306 c -56.94757 17.89941 -58.72345 18.1526 -59.5182 19.03351 c -59.5182 19.03351 l -59.5182 19.03526 l -61.58243 21.4406 -63.28445 22.26877 -64.42209 22.24239 c -64.99176 22.23007 -65.42079 22.00677 -65.69331 21.65863 c -65.96762 21.31226 -66.08542 20.83751 -66.02213 20.32059 c -66.01334 20.24847 l -66.08015 20.27486 l -67.74701 20.91664 -69.02002 20.22035 -69.64421 19.17241 c -70.26665 18.12622 -70.23148 16.73013 -69.26442 15.96529 c -69.24332 15.94945 l -69.2486 15.92484 l -69.59322 13.90105 -69.27321 12.50848 -68.63672 11.62758 c -67.99844 10.74843 -67.0437 10.37743 -66.10477 10.40028 c -65.16585 10.4249 -64.24449 10.8469 -63.68535 11.55196 c -63.12447 12.25705 -62.91873 13.24521 -63.41106 14.41974 c -63.41106 14.41974 -63.41106 14.41974 -63.41281 14.41974 c -63.74689 15.11603 -64.18823 15.42021 -64.63484 15.46594 c -65.0533 15.50638 -65.48233 15.30241 -65.84453 14.96834 c -65.12012 14.93492 -64.60143 14.35292 -64.5223 13.7516 c -64.4801 13.43335 -64.56099 13.11333 -64.79483 12.87773 c -65.02869 12.64388 -65.41199 12.49968 -65.96938 12.52255 c -65.97113 12.52255 l -65.97113 12.52255 l -66.57774 12.55948 -67.03665 12.83904 -67.34259 13.23993 c -67.6503 13.64082 -67.8068 14.15952 -67.8156 14.67996 c -67.82613 15.20042 -67.69073 15.72264 -67.40767 16.13057 c -67.12457 16.53848 -66.69379 16.83037 -66.12234 16.88312 c -64.5733 17.05542 -63.39523 16.65805 -62.42818 15.90022 c -61.46112 15.14064 -60.7033 14.02588 -59.98064 12.76167 c -58.53355 10.23325 -57.22539 7.11229 -54.69168 5.04803 c -51.45642 2.5706 -47.74115 1.81279 -43.80609 2.90996 c -39.87279 4.00539 -35.7197 6.96283 -31.62816 11.92296 c -31.62816 11.92473 l -31.6264 11.92648 l -25.50578 18.04535 -20.0498 19.45197 -14.90327 18.40579 c -9.9273 17.39653 -5.24146 14.09622 -0.50461 10.58316 c -5.83926 15.91078 -10.79237 19.3834 -15.9266 20.29068 c -21.20148 21.22258 -26.67857 19.47133 -32.99435 14.27908 c -32.99611 14.27908 -32.99611 14.27908 -32.99611 14.27908 c -36.91182 10.22444 -40.6394 8.17076 -43.5142 7.79625 c -44.95074 7.60812 -46.17627 7.84196 -47.10114 8.45914 c -48.02599 9.0763 -48.64844 10.07677 -48.88052 11.4113 c -48.88052 11.4113 l -49.26912 13.7516 -48.45853 15.49582 -47.2207 16.42596 c -45.9811 17.3561 -44.31248 17.47214 -42.99904 16.5631 c -42.99728 16.5631 l -42.99728 16.56134 l -42.41176 16.10419 -42.17967 15.54855 -42.19725 15.03339 c -42.2166 14.51996 -42.48386 14.04698 -42.88828 13.74632 c -43.29268 13.4474 -43.83774 13.3208 -44.40744 13.50015 c -44.95953 13.67247 -45.52922 14.13841 -46.0233 14.98943 c -46.6387 13.59862 -46.44705 12.49968 -45.81934 11.7401 c -45.17932 10.96469 -44.08742 10.53743 -42.95157 10.52864 c -41.8157 10.51985 -40.6394 10.92776 -39.82884 11.8122 c -39.02002 12.69485 -38.57341 14.05754 -38.90222 15.97232 c -38.91277 16.0409 l -38.84595 16.02155 l -37.15974 15.51868 -35.88322 15.60307 -34.75967 16.00925 c -33.63788 16.41365 -32.66907 17.14334 -31.6053 17.93282 c -29.51645 19.48363 -27.05132 21.25423 -22.37076 21.22786 c -23.82661 21.84502 -25.31764 21.80984 -26.8157 21.42654 c -28.38939 21.02565 -29.96834 20.26079 -31.50859 19.53638 c -33.05061 18.81195 -34.55396 18.12799 -35.97993 17.89236 c -37.40767 17.65501 -38.76155 17.86952 -39.98534 18.94032 c -39.98534 18.94032 l -40.56029 19.40627 -40.91194 20.04277 -41.04558 20.66168 c -41.1792 21.28235 -41.0948 21.8872 -40.7871 22.28986 c -40.74843 22.34085 l -40.71501 22.28635 l -39.78311 20.73378 -38.80023 20.12541 -37.9457 20.09024 c -37.09117 20.05682 -36.35445 20.59488 -35.91136 21.37029 c -35.47002 22.14569 -35.32936 23.15318 -35.66695 24.04288 c -36.00279 24.93082 -36.81688 25.70624 -38.30264 26.02097 c -40.28423 26.29173 -41.65395 25.58665 -42.41176 24.43146 c -43.17134 23.27626 -43.31377 21.66743 -42.81793 20.13419 c -42.7986 20.06914 l -42.8654 20.07617 l -43.8817 20.19221 -45.09843 19.99002 -46.17627 19.59616 c -47.25586 19.20055 -48.1948 18.61151 -48.66249 17.96095 c -48.66426 17.95918 l -48.66426 17.95744 l -49.01414 17.52664 -49.41153 17.3262 -49.79309 17.29984 c -50.17464 17.27345 -50.53859 17.4229 -50.81993 17.67786 c -51.38257 18.18953 -51.62523 19.13725 -51.06784 20.00407 c -51.06609 20.0076 l -51.06432 20.00935 l -50.53683 20.66519 -49.91968 20.93422 -49.27614 21.01862 c -48.63437 21.10301 -47.96797 21.00455 -47.32971 20.93246 c -46.69322 20.86212 -46.0866 20.8164 -45.5679 20.99576 c -45.04921 21.1751 -44.60963 21.57599 -44.29666 22.41293 c -44.0628 23.80199 -44.44083 24.94489 -45.26372 25.59369 c -46.08836 26.2425 -47.36664 26.40076 -48.95438 25.79239 c -49.00888 25.77129 l -49.01414 25.82932 l -49.20229 28.29794 -50.97993 29.76965 -52.90701 29.78899 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 65.08 9.173 cm 0 G 0 g q 1 0 0 1 6.278 -219.747 cm q 0 G 0 g 0.3985 w q 0.9473 0.8977 0.75511 RG 0.9473 0.8977 0.75511 rg -27.02136 36.25735 m -24.08028 36.29591 -21.68304 34.44449 -20.93669 31.77531 c -19.28775 32.5699 -17.20488 31.87561 -15.6485 30.64903 c -14.86357 30.02995 -14.20978 29.27394 -13.8125 28.50444 c -13.42293 27.74844 -13.28406 26.97508 -13.51163 26.30006 c -11.76242 25.49585 -10.75569 24.44284 -10.31598 23.3532 c -9.8724 22.25583 -10.00162 21.12569 -10.50113 20.19032 c -11.50012 18.32152 -13.988 17.22995 -16.34859 18.69759 c -16.35051 18.69759 l -16.35245 18.69952 l -17.88951 19.81232 -18.42567 21.17197 -18.14217 22.26547 c -17.87216 23.30498 -16.84616 24.06677 -15.2975 24.17093 c -16.32544 24.51035 -17.50188 24.47563 -18.29259 23.90863 c -18.71689 23.60583 -19.02931 23.15648 -19.15274 22.53355 c -19.27618 21.91255 -19.20676 21.1141 -18.8596 20.1209 c -18.42374 18.8866 -16.80759 17.66386 -14.9002 17.21259 c -12.99284 16.76129 -10.80005 17.07373 -9.1916 18.89046 c -9.18968 18.8924 l -9.18584 18.89624 l -8.4491 19.45554 -7.5041 19.56738 -6.57646 19.36104 c -5.65074 19.15466 -4.74045 18.63202 -4.06737 17.9146 c -3.39429 17.19716 -2.95844 16.28302 -2.98737 15.2975 c -3.01436 14.3178 -3.50807 13.27441 -4.66138 12.28893 c -3.61415 10.03632 -3.58716 8.13667 -4.19273 6.6613 c -4.80215 5.18016 -6.04224 4.12715 -7.4964 3.5698 c -8.95053 3.01244 -10.61876 2.94687 -12.09413 3.43672 c -13.56758 3.92657 -14.8462 4.97572 -15.51158 6.64203 c -15.51158 6.64203 l -15.51158 6.64395 l -16.24637 8.74803 -15.08342 10.50497 -13.63701 11.09706 c -12.91185 11.39212 -12.11342 11.39984 -11.44806 11.01027 c -10.81355 10.63998 -10.31404 9.89746 -10.10384 8.73839 c -9.70268 9.59662 -9.84926 10.47606 -10.44327 11.23784 c -11.06813 12.04205 -12.1732 12.70935 -13.583 13.04684 c -16.40451 13.72185 -20.44296 13.0835 -24.30978 9.6429 c -28.60858 5.15123 -33.84856 4.22937 -40.74709 6.05766 c -41.1598 6.16759 l -40.73166 6.15216 l -37.30457 6.02873 -34.32106 6.33539 -31.68468 7.53496 c -29.0483 8.73453 -26.75714 10.82706 -24.70898 14.28885 c -24.68971 14.3178 l -24.65692 14.31007 l -22.72833 13.89157 -21.41884 14.15965 -20.60304 14.78836 c -19.78532 15.41515 -19.45168 16.40837 -19.48833 17.45944 c -19.52496 18.51247 -19.9319 19.62138 -20.59146 20.46419 c -21.25104 21.3089 -22.15747 21.88748 -23.19698 21.89326 c -23.2317 21.89326 l -23.24327 21.92606 l -24.00313 24.2712 -25.92978 25.77936 -28.04158 26.08792 c -30.1534 26.3965 -32.44841 25.50935 -33.95654 23.05042 c -33.97969 23.01184 l -34.0202 23.03305 l -36.59291 24.36765 -39.66708 23.40912 -41.42981 21.46318 c -42.31311 20.48924 -42.86467 19.27231 -42.86853 17.97246 c -42.87045 16.67067 -42.32274 15.28786 -40.99202 13.97644 c -40.94958 13.93591 l -40.99782 13.90314 l -43.77304 12.00156 -46.6447 11.83185 -49.17693 12.51842 c -51.70723 13.20499 -53.90195 14.744 -55.33875 16.26372 c -58.99149 19.28581 -62.76186 19.49025 -66.16388 17.58481 c -66.16388 17.58481 -66.16388 17.58481 -66.16388 17.58481 c -67.67397 16.41801 -71.21292 14.6225 -75.33429 14.31007 c -75.66216 14.28693 l -75.35551 14.40263 l -72.98721 15.31487 -70.74234 16.37173 -67.77232 19.12767 c -67.7704 19.1296 l -67.7704 19.1296 l -66.04431 20.51817 -63.99425 21.2144 -61.73587 21.04662 c -59.47942 20.87689 -57.01662 19.84705 -54.45546 17.79501 c -52.28195 16.6938 -50.59828 16.55495 -49.391 16.94644 c -48.18372 17.33794 -47.44507 18.2598 -47.1577 19.29738 c -46.87033 20.33496 -47.03812 21.48827 -47.6437 22.33104 c -48.24734 23.17577 -49.28879 23.71577 -50.768 23.53448 c -51.93288 23.2645 -52.66766 22.60876 -52.90874 21.93568 c -53.03024 21.60011 -53.02638 21.25876 -52.8933 20.9579 c -52.7718 20.68019 -52.52687 20.44104 -52.17393 20.25781 c -52.33401 20.9444 -52.2588 21.54997 -51.91743 21.97618 c -51.56065 22.42747 -50.92422 22.67819 -50.02551 22.63962 c -50.01779 22.63962 l -50.01007 22.63577 l -48.95706 22.23848 -48.37077 21.59433 -48.176 20.8981 c -47.9812 20.20189 -48.17406 19.45746 -48.66006 18.86732 c -49.63208 17.68703 -51.76895 17.11423 -54.29924 18.68024 c -54.30116 18.68024 l -54.30116 18.68024 l -55.95975 19.77953 -56.3744 21.58083 -55.80354 23.05234 c -55.24039 24.5065 -53.71103 25.63278 -51.50087 25.46306 c -52.60788 27.38394 -51.9271 29.3106 -50.57901 30.42531 c -49.229 31.54582 -47.21362 31.8544 -45.69391 30.56418 c -45.09026 31.96046 -43.16939 32.79941 -41.62845 32.0376 c -41.62653 32.0376 l -41.62459 32.03569 l -40.75865 31.47446 -40.5793 30.55452 -40.49059 29.63652 c -40.39995 28.71658 -40.39223 27.7928 -39.90237 27.18723 c -39.90237 27.18529 l -39.90044 27.18529 l -38.71822 25.59421 -37.3952 24.92885 -36.18599 24.84785 c -34.97676 24.76685 -33.87555 25.27022 -33.14268 26.02621 c -32.40982 26.78415 -32.04532 27.7928 -32.29796 28.7243 c -32.53517 29.59987 -33.34904 30.4041 -34.9112 30.88432 c -33.68268 29.99716 -33.20248 29.07146 -33.26033 28.25758 c -33.32397 27.38971 -33.96234 26.66652 -34.81477 26.27307 c -35.66528 25.87964 -36.73178 25.81215 -37.65942 26.25957 c -38.58708 26.707 -39.37201 27.66937 -39.65936 29.31638 c -39.65936 29.31638 l -39.65936 29.31638 l -40.02194 31.72519 -38.67964 33.3934 -37.0442 34.19183 c -36.22456 34.59105 -35.33162 34.77618 -34.53705 34.73183 c -33.75983 34.68748 -33.07904 34.41942 -32.65282 33.91605 c -30.74161 35.52448 -28.78601 36.2342 -27.02136 36.25735 c -27.01944 36.16092 m -28.76866 36.13777 -30.71846 35.43578 -32.62582 33.81769 c -32.66246 33.7849 l -32.69333 33.82349 l -33.09447 34.32297 -33.76563 34.59105 -34.54285 34.6354 c -35.31813 34.67783 -36.19756 34.49847 -37.00177 34.10506 c -38.61021 33.32011 -39.92165 31.69818 -39.56294 29.3318 c -39.28137 27.70793 -38.51765 26.77837 -37.61893 26.34636 c -36.71828 25.91435 -35.68071 25.978 -34.85335 26.36179 c -34.02791 26.74365 -33.41653 27.43987 -33.35677 28.2653 c -33.29698 29.09073 -33.78683 30.05695 -35.19855 30.98845 c -35.44156 31.14853 l -35.15997 31.07526 l -33.37411 30.60661 -32.46768 29.71945 -32.2054 28.74937 c -31.9431 27.7793 -32.32304 26.73595 -33.07326 25.96063 c -33.8254 25.18343 -34.95169 24.66849 -36.19179 24.75142 c -37.43185 24.83627 -38.78186 25.519 -39.97758 27.1255 c -39.97758 27.12744 l -40.49637 27.76965 -40.49637 28.71272 -40.5851 29.62689 c -40.67574 30.5391 -40.84544 31.41467 -41.67474 31.95274 c -43.17903 32.69525 -45.08063 31.84474 -45.63411 30.47546 c -45.6592 30.4118 l -45.71126 30.45616 l -47.1982 31.75989 -49.18465 31.45709 -50.51923 30.35202 c -51.85187 29.24503 -52.52881 27.34535 -51.38322 25.43799 c -51.335 25.357 l -51.42952 25.3647 l -53.6493 25.56721 -55.15938 24.45056 -55.71481 23.01762 c -56.27025 21.58662 -55.87297 19.83739 -54.2491 18.76125 c -51.74579 17.21259 -49.67258 17.78925 -48.73529 18.92903 c -48.26663 19.49796 -48.0815 20.20767 -48.26857 20.87111 c -48.45372 21.53453 -49.00914 22.15363 -50.039 22.54318 c -50.91072 22.57791 -51.51051 22.33684 -51.84416 21.91641 c -52.17781 21.49597 -52.25494 20.88461 -52.06015 20.16911 c -52.03316 20.07268 l -52.12766 20.11319 l -52.5558 20.30797 -52.83931 20.59146 -52.98203 20.91933 c -53.12474 21.24525 -53.12666 21.6117 -52.99937 21.96848 c -52.74481 22.68013 -51.97723 23.35513 -50.7873 23.62898 c -50.78537 23.6309 l -50.78151 23.6309 l -49.27336 23.81606 -48.18948 23.2587 -47.56462 22.3889 c -46.9417 21.5172 -46.77197 20.3369 -47.06514 19.27231 c -47.3602 18.20773 -48.12392 17.25694 -49.36208 16.85579 c -50.60214 16.45467 -52.31088 16.5993 -54.49982 17.71016 c -54.50368 17.7121 l -54.50754 17.71596 l -57.06097 19.76219 -59.50835 20.78432 -61.74358 20.9502 c -63.9788 21.11604 -66.00189 20.4314 -67.7106 19.0563 c -70.55142 16.41994 -72.74228 15.33609 -75.00066 14.44699 c -71.04706 14.82886 -67.6624 16.54723 -66.2179 17.6658 c -66.21404 17.66772 l -66.2121 17.66966 l -62.77922 19.59055 -58.95291 19.37839 -55.2751 16.33508 c -55.27318 16.33315 l -55.27126 16.33122 l -53.84409 14.82307 -51.66287 13.29372 -49.15186 12.61292 c -46.65434 11.93599 -43.83667 12.09799 -41.0981 13.95328 c -42.41145 15.26666 -42.96687 16.65907 -42.96303 17.97246 c -42.9611 19.29932 -42.39603 20.5394 -41.50116 21.52682 c -39.71916 23.49399 -36.62378 24.46213 -34.0144 23.13335 c -32.4889 25.59421 -30.16496 26.49487 -28.02808 26.18243 c -25.88928 25.87001 -23.94142 24.34642 -23.16228 21.98584 c -22.10347 21.96655 -21.17969 21.3764 -20.51625 20.52397 c -19.84319 19.66382 -19.42853 18.53752 -19.39189 17.46332 c -19.35524 16.38908 -19.69853 15.36115 -20.54324 14.71123 c -21.38411 14.06514 -22.71677 13.80092 -24.64342 14.21172 c -26.69542 10.75569 -28.99817 8.65161 -31.6461 7.44817 c -34.18219 6.29295 -37.04613 5.97473 -40.29195 6.05573 c -33.63062 4.38557 -28.5623 5.3383 -24.37535 9.71233 c -24.37341 9.71425 l -24.37341 9.71425 l -20.48732 13.17413 -16.41608 13.82213 -13.56178 13.13942 c -12.13463 12.79807 -11.01027 12.12305 -10.36804 11.29762 c -9.7239 10.47026 -9.56383 9.48476 -10.07104 8.5494 c -10.13853 8.42403 l -10.1617 8.56482 l -10.34875 9.8049 -10.86176 10.55511 -11.49818 10.92734 c -12.1327 11.29955 -12.89836 11.29378 -13.60036 11.00833 c -15.00243 10.43361 -16.1403 8.73453 -15.42287 6.67482 c -15.42287 6.67482 -15.42287 6.67482 -15.42094 6.67482 c -14.76715 5.0355 -13.51357 4.00952 -12.06328 3.52736 c -10.61105 3.04523 -8.96404 3.1108 -7.52917 3.66043 c -6.09622 4.21007 -4.8793 5.2438 -4.28143 6.69795 c -3.68358 8.15402 -3.70479 10.03247 -4.75974 12.27927 c -4.77708 12.31206 l -4.74815 12.33713 l -3.58907 13.31685 -3.1108 14.34286 -3.08186 15.29942 c -3.05486 16.25601 -3.47722 17.14702 -4.1368 17.84901 c -4.79637 18.55103 -5.69124 19.06595 -6.59767 19.26653 c -7.5041 19.46902 -8.41826 19.35718 -9.12796 18.81909 c -9.12796 18.81909 -9.12796 18.81909 -9.12796 18.81909 c -10.76147 16.98308 -12.99284 16.66101 -14.92337 17.11809 c -16.85579 17.57516 -18.4951 18.80367 -18.95024 20.09003 c -18.95024 20.09003 l -19.30124 21.09483 -19.37453 21.90869 -19.24725 22.55284 c -19.11996 23.19698 -18.79018 23.67142 -18.34853 23.9877 c -17.46716 24.62029 -16.14223 24.62991 -15.04678 24.19984 c -14.82115 24.11113 l -15.06415 24.10727 l -16.72273 24.07834 -17.77766 23.28763 -18.04765 22.24234 c -18.3196 21.19511 -17.81046 19.87596 -16.29651 18.77667 c -13.98029 17.33987 -11.56184 18.41217 -10.58598 20.2366 c -10.09804 21.1469 -9.97269 22.24619 -10.40662 23.31656 c -10.83862 24.38692 -11.82991 25.4322 -13.58492 26.23064 c -13.62541 26.24994 l -13.61 26.29044 l -13.37663 26.94229 -13.50972 27.70407 -13.89735 28.46008 c -14.28693 29.21417 -14.933 29.96053 -15.70828 30.57382 c -17.2608 31.79654 -19.33595 32.47925 -20.9444 31.67117 c -20.99646 31.64417 l -21.01189 31.70203 l -21.73125 34.3577 -24.10149 36.1995 -27.01944 36.16092 c -28.9673 24.79 m -27.0715 24.84978 -25.09663 23.76398 -23.77556 20.92703 c -22.81705 20.97911 -22.06491 20.46805 -21.57118 19.73132 c -21.06975 18.98495 -20.82867 18.0091 -20.88461 17.13737 c -20.94246 16.26566 -21.3012 15.4923 -22.01283 15.17601 c -22.71677 14.86357 -23.75241 15.01015 -25.14485 15.90694 c -26.41579 12.53384 -28.66452 10.26006 -31.43396 8.85991 c -34.21884 7.45203 -37.52443 6.92166 -40.89174 7.02774 c -47.62248 7.24182 -54.59431 9.99582 -58.11012 13.39207 c -58.11205 13.39207 l -60.21228 15.37079 -63.83223 15.50964 -66.78297 13.7932 c -68.13489 12.72478 -70.15605 12.2214 -72.23506 12.24457 c -74.31601 12.2677 -76.45673 12.81927 -78.04396 13.87035 c -78.27925 14.02657 l -78.00539 13.95714 l -75.48859 13.31685 -72.54364 13.37471 -68.45891 15.31293 c -68.45699 15.31293 -68.45699 15.31293 -68.45699 15.31293 c -66.43582 16.62244 -64.70587 17.42473 -63.12637 17.74873 c -61.54492 18.07082 -60.11392 17.91266 -58.70027 17.30324 c -58.69835 17.3013 l -58.69641 17.3013 l -55.92505 15.77966 -54.9029 13.99957 -52.10645 12.39305 c -46.98027 10.28513 -42.66797 10.81355 -40.3151 13.26865 c -40.2765 13.30913 l -40.2418 13.26479 l -39.92165 12.8405 -39.33151 12.6187 -38.63914 12.58592 c -37.9468 12.55313 -37.15799 12.70935 -36.45213 13.03142 c -35.74628 13.35156 -35.12527 13.83563 -34.7627 14.45471 c -34.40013 15.07185 -34.29211 15.824 -34.61804 16.69574 c -34.61998 16.69766 l -34.61998 16.69958 l -35.24677 18.68602 -36.61798 19.28003 -37.71536 19.06981 c -38.26306 18.96375 -38.74136 18.65709 -39.02487 18.21738 c -39.28716 17.81046 -39.37201 17.28781 -39.19652 16.70345 c -38.90529 17.54237 -38.32864 18.06502 -37.69029 18.08815 c -37.01335 18.11517 -36.30171 17.59253 -35.84464 16.38908 c -35.84464 16.38908 l -35.71735 16.04387 -35.83693 15.61186 -36.11464 15.21071 c -36.39043 14.80957 -36.83012 14.43736 -37.36049 14.21172 c -38.41928 13.76427 -39.84836 13.92242 -41.04602 15.64658 c -41.62845 16.26952 -41.80203 17.14122 -41.64774 18.04959 c -41.49538 18.95795 -41.01709 19.90489 -40.2958 20.68982 c -38.85515 22.2539 -36.43286 23.17384 -33.66533 21.84697 c -32.65475 23.53835 -30.8554 24.73021 -28.9673 24.79 c -28.96344 24.69357 m -30.82646 24.63377 -32.61812 23.44962 -33.6094 21.76404 c -33.63062 21.7274 l -33.67111 21.74667 l -36.41742 23.08127 -38.80116 22.17099 -40.22444 20.62425 c -40.9361 19.85281 -41.40474 18.91939 -41.55324 18.03416 c -41.70367 17.14702 -41.53395 16.31001 -40.9766 15.71214 c -40.97466 15.71022 l -40.97273 15.70638 l -39.79051 14.00536 -38.42314 13.86649 -37.39714 14.30043 c -36.88414 14.51836 -36.45985 14.88094 -36.1937 15.26666 c -35.92563 15.65044 -35.82341 16.05544 -35.93529 16.35437 c -36.38463 17.53467 -37.06349 18.0168 -37.68643 17.99367 c -38.30936 17.9686 -38.89758 17.43823 -39.16179 16.53952 c -39.20422 16.39873 l -39.25436 16.53566 l -39.49736 17.20294 -39.4048 17.80658 -39.10587 18.26945 c -38.80693 18.73232 -38.3055 19.05438 -37.73271 19.16432 c -36.58905 19.38225 -35.16577 18.74966 -34.52934 16.73044 c -34.19377 15.83366 -34.3037 15.04678 -34.67976 14.40457 c -35.05585 13.76427 -35.69228 13.27055 -36.41164 12.9427 c -37.13292 12.61678 -37.93329 12.45671 -38.64299 12.48949 c -39.33151 12.52228 -39.93323 12.74214 -40.2823 13.1722 c -42.6776 10.70747 -47.01884 10.1964 -52.14694 12.30627 c -52.14888 12.3082 l -52.15274 12.3082 l -54.96654 13.92435 -55.98868 15.70444 -58.74077 17.21451 c -60.13899 17.81816 -61.54492 17.97437 -63.10709 17.65424 c -64.67117 17.33409 -66.39339 16.53758 -68.41069 15.23 c -68.41261 15.22807 l -68.41647 15.22614 l -72.37007 13.35156 -75.2668 13.2455 -77.7431 13.81636 c -76.20216 12.8752 -74.19836 12.36221 -72.23506 12.34099 c -70.16956 12.31784 -68.16382 12.8212 -66.83696 13.87228 c -66.8331 13.87614 l -66.83118 13.87614 l -63.8496 15.60992 -60.18335 15.47879 -58.04456 13.4615 c -58.04456 13.4615 l -58.04456 13.4615 l -54.55382 10.09033 -47.59549 7.33632 -40.88788 7.12418 c -37.53407 7.0181 -34.24197 7.54652 -31.4764 8.94476 c -28.71272 10.34297 -26.47171 12.611 -25.21236 15.99179 c -25.19305 16.04771 l -25.14099 16.01494 l -23.73698 15.09502 -22.72255 14.96579 -22.05333 15.26279 c -21.38219 15.56172 -21.03697 16.29265 -20.98103 17.14316 c -20.92511 17.99173 -21.16426 18.95218 -21.65025 19.6773 c -22.13626 20.40439 -22.86528 20.8981 -23.80255 20.83447 c -23.83534 20.83253 l -23.85077 20.86147 l -25.16028 23.69263 -27.10043 24.75334 -28.96344 24.69357 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 139.571 108.369 cm 0 G 0 g q 1 0 0 1 20.421 -216.46 cm q 0 G 0 g 0.3985 w q 0.94827 0.89958 0.75958 RG 0.94827 0.89958 0.75958 rg 4.0 M -82.56145 31.00793 m -80.64218 30.96346 -78.81888 30.23553 -77.78668 28.88034 c -73.83578 31.96054 -69.08675 31.3005 -66.1985 28.99738 c -64.74733 27.84348 -63.7643 26.27295 -63.5864 24.55261 c -63.41086 22.84401 -64.03815 20.9926 -65.77953 19.26994 c -64.93224 17.42322 -64.98607 15.84334 -65.60164 14.6005 c -66.2219 13.34828 -67.39922 12.43547 -68.76375 11.91585 c -70.12831 11.3939 -71.68246 11.2605 -73.0634 11.57178 c -74.44434 11.88075 -75.65442 12.63676 -76.3168 13.8913 c -76.31914 13.89365 l -76.31914 13.89365 l -77.32324 16.01186 -77.18515 17.87497 -76.45255 19.10376 c -75.7176 20.33257 -74.38583 20.92706 -73.03297 20.5011 c -72.92062 20.46597 l -73.01659 20.3981 l -74.38115 19.42677 -74.94054 18.22838 -74.75797 17.28748 c -74.66669 16.81702 -74.39285 16.40742 -73.93176 16.11485 c -73.47299 15.82227 -72.82466 15.64673 -71.99374 15.65376 c -70.75793 15.71461 -69.8849 16.25061 -69.34422 17.05107 c -68.8059 17.85155 -68.6046 18.92354 -68.73802 20.04935 c -69.00484 22.30568 -70.60579 24.77966 -73.47066 25.75568 c -73.47066 25.75568 -73.47066 25.75568 -73.47066 25.75568 c -81.05647 27.71239 -86.4117 19.80359 -84.2537 14.63794 c -84.2537 14.6356 l -84.2537 14.63327 l -83.10915 11.36816 -80.30983 9.48633 -76.70767 9.01587 c -73.1032 8.54543 -68.70056 9.49335 -64.3705 11.89713 c -64.36816 11.89946 l -57.45409 16.07741 -52.39378 17.54962 -48.36095 17.53323 c -44.33047 17.51451 -41.33221 16.00485 -38.55162 14.23772 c -35.77335 12.47057 -33.20807 10.44832 -30.03426 9.38335 c -26.86043 8.32074 -23.0734 8.21306 -17.83516 10.28682 c -17.78368 10.18382 l -17.78601 10.18149 -17.78836 10.18149 -17.79305 10.17915 c -25.36246 5.44415 -30.35725 6.67531 -35.0033 8.6999 c -39.65167 10.7245 -43.95131 13.5285 -50.20767 11.97202 c -50.20767 11.97202 l -50.21 11.97202 l -54.81625 10.88835 -57.52197 7.90411 -61.42607 5.35522 c -65.3278 2.80634 -70.43025 0.70683 -79.8066 1.41603 c -79.8066 1.41603 l -81.17116 1.4371 -83.02022 2.17671 -84.88565 3.38913 c -86.75108 4.60156 -88.63525 6.28911 -90.0513 8.21306 c -91.46968 10.13702 -92.4223 12.29503 -92.41762 14.45305 c -92.41528 16.60168 -91.45798 18.74332 -89.08931 20.62749 c -90.32047 24.21791 -89.76575 26.8417 -88.35905 28.55032 c -86.95003 30.26364 -84.69606 31.05475 -82.56145 31.00793 c -82.5638 30.8909 m -84.66797 30.9377 -86.88684 30.15596 -88.27013 28.47543 c -89.65106 26.79489 -90.20576 24.21323 -88.9676 20.62982 c -88.95357 20.59003 l -88.98634 20.56429 l -91.35968 18.69183 -92.29825 16.57828 -92.30292 14.45305 c -92.30527 12.33014 -91.36436 10.19086 -89.95767 8.28093 c -88.55098 6.37103 -86.67618 4.69284 -84.82011 3.48743 c -82.96637 2.28206 -81.1267 1.55177 -79.80191 1.53307 c -79.79958 1.53307 l -79.79723 1.53307 l -70.44194 0.8262 -65.37929 2.914 -61.48926 5.45352 c -57.59921 7.9907 -54.87947 10.99133 -50.23576 12.08438 c -50.23576 12.08438 l -43.93492 13.65257 -39.59317 10.82748 -34.95648 8.80756 c -30.45322 6.84383 -25.65503 5.67587 -18.46713 9.93808 c -23.37064 8.13115 -27.01257 8.25052 -30.0717 9.27335 c -33.26894 10.34534 -35.84123 12.37694 -38.61479 14.1394 c -41.38838 15.90186 -44.35858 17.39983 -48.36331 17.41621 c -52.36569 17.43492 -57.40494 15.96973 -64.30965 11.79883 c -64.312 11.79648 l -64.312 11.79648 l -68.65843 9.38101 -73.0868 8.42606 -76.72171 8.90118 c -80.35663 9.37633 -83.20512 11.28859 -84.3637 14.59581 c -86.55916 19.86679 -81.1103 27.8505 -73.4379 25.86803 c -73.43555 25.86803 l -73.43321 25.86803 l -70.52386 24.87563 -68.89249 22.36418 -68.62097 20.0634 c -68.48524 18.91417 -68.68887 17.81412 -69.24826 16.98555 c -69.80766 16.15463 -70.72282 15.59758 -71.98909 15.53673 c -71.98909 15.53673 l -71.99141 15.53673 l -72.84105 15.52971 -73.51045 15.7076 -73.99495 16.01654 c -74.47946 16.3255 -74.7767 16.76318 -74.87267 17.26407 c -75.06226 18.23775 -74.49115 19.43146 -73.18512 20.40512 c -74.44434 20.74684 -75.66379 20.19914 -76.35191 19.04524 c -77.0611 17.8539 -77.20387 16.03526 -76.21382 13.94513 c -75.57014 12.7257 -74.39285 11.9884 -73.03766 11.68414 c -71.68246 11.37985 -70.14938 11.51093 -68.8059 12.02353 c -67.4624 12.5361 -66.31084 13.43256 -65.70697 14.652 c -65.1031 15.87141 -65.04457 17.41853 -65.8989 19.2559 c -65.91528 19.29333 l -65.88719 19.32378 l -64.14113 21.03474 -63.5279 22.8604 -63.70345 24.54092 c -63.87663 26.22379 -64.84096 27.76859 -66.27104 28.9061 c -69.12889 31.18582 -73.84047 31.84352 -77.75859 28.76099 c -77.8054 28.72353 l -77.84052 28.77034 l -78.83994 30.11852 -80.65155 30.84877 -82.5638 30.8909 c -27.34727 23.04295 m -25.76036 23.08742 -24.15472 22.60994 -22.95634 21.63159 c -21.75798 20.65321 -20.97154 19.17165 -21.02069 17.22661 c -21.02069 17.22661 l -21.02069 17.22427 l -21.14006 15.52034 -21.79076 14.37814 -22.69655 13.84215 c -23.60469 13.30849 -24.76093 13.38808 -25.86101 14.09961 c -25.86101 14.09961 l -26.72702 14.64731 -26.98213 15.51332 -26.65446 16.1406 c -26.32912 16.76552 -25.43501 17.13066 -24.07748 16.72105 c -24.08217 16.72105 l -23.83875 16.67659 -23.65852 16.70935 -23.53448 16.79362 c -23.41275 16.87787 -23.34254 17.01833 -23.3285 17.2079 c -23.30042 17.58942 -23.51575 18.16519 -24.0213 18.7714 c -24.02365 18.77374 l -24.02599 18.77608 l -25.94293 21.62924 -30.31044 20.2366 -30.54216 17.72751 c -30.69429 16.02122 -30.1419 14.38281 -29.01376 13.25465 c -27.88794 12.12885 -26.18634 11.51093 -24.02599 11.85266 c -22.48824 12.23418 -21.4022 12.66718 -20.64853 13.21254 c -19.89722 13.76022 -19.47592 14.41559 -19.26057 15.25584 c -19.2325 15.36821 l -19.15994 15.27925 l -18.68715 14.70816 -18.21901 14.4109 -17.69473 14.31027 c -17.17279 14.21196 -16.58765 14.31027 -15.89484 14.549 c -15.89249 14.549 l -15.89015 14.549 l -13.8796 15.0803 -12.27162 14.54666 -10.68471 13.78363 c -9.09546 13.02061 -7.5226 12.03055 -5.56119 11.62561 c -3.34233 11.20667 -1.56816 12.25992 -0.09595 13.47935 c 0.05617 13.60574 l -0.00232 13.41617 l -0.62024 11.44305 -2.15565 10.35703 -3.92747 9.99893 c -5.6993 9.64316 -7.70984 10.00595 -9.30846 10.92111 c -11.46413 12.1429 -13.14465 12.72334 -15.03818 12.63208 c -16.92937 12.54079 -19.04056 11.77307 -22.05055 10.2798 c -22.05289 10.27745 l -22.05757 10.2751 l -25.79312 9.02524 -29.18463 9.92169 -31.27475 11.8784 c -33.36255 13.83513 -34.14899 16.85681 -32.67911 19.82701 c -32.67677 19.82701 l -31.66095 21.93117 -29.51698 22.97975 -27.34727 23.04295 c -27.34259 22.92593 m -29.47954 22.86272 -31.57903 21.83755 -32.57378 19.77551 c -32.57378 19.77551 l -32.57378 19.77551 l -34.0226 16.84744 -33.2502 13.88896 -31.19518 11.96268 c -29.1378 10.03636 -25.79547 9.14696 -22.09737 10.38512 c -22.09502 10.38512 -22.09502 10.38512 -22.09502 10.38745 c -19.08504 11.88075 -16.9598 12.65547 -15.04286 12.7491 c -13.12358 12.84271 -11.41498 12.25055 -9.25229 11.02411 c -7.67706 10.12297 -5.68993 9.76253 -3.95088 10.11362 c -2.27737 10.45065 -0.85664 11.4571 -0.20828 13.24997 c -1.65945 12.08438 -3.40787 11.10133 -5.5846 11.51328 c -5.5846 11.51328 l -5.5846 11.51328 l -7.57175 11.92053 -9.15398 12.91995 -10.73387 13.67831 c -12.31375 14.43666 -13.88428 14.9586 -15.86208 14.43666 c -16.56189 14.19557 -17.16576 14.09026 -17.71814 14.19557 c -18.24477 14.29857 -18.71991 14.60751 -19.18333 15.14351 c -19.41039 14.3243 -19.83636 13.65958 -20.58066 13.11891 c -21.35306 12.55952 -22.45311 12.12183 -24.00026 11.73798 c -24.0026 11.73563 l -24.00493 11.73563 l -26.19804 11.38922 -27.94177 12.01884 -29.09569 13.17274 c -30.24959 14.32664 -30.81131 16.00017 -30.6592 17.73688 c -30.6592 17.73688 l -30.41342 20.37703 -25.90314 21.7767 -23.93004 18.84161 c -23.4151 18.22137 -23.18105 17.63153 -23.21147 17.19853 c -23.22786 16.9832 -23.31447 16.80533 -23.46895 16.69765 c -23.62341 16.58998 -23.8411 16.5572 -24.10558 16.60872 c -24.10791 16.60872 l -24.11026 16.60872 l -25.43736 17.00896 -26.25656 16.65085 -26.55148 16.08441 c -26.84639 15.52034 -26.62637 14.72221 -25.80016 14.1979 c -25.7978 14.1979 l -24.72583 13.50278 -23.62341 13.43256 -22.7574 13.9428 c -21.89139 14.45305 -21.25475 15.55545 -21.13773 17.2313 c -21.13773 17.2313 -21.13773 17.23364 -21.13773 17.23364 c -21.08858 19.14355 -21.85861 20.58301 -23.03125 21.5403 c -24.20389 22.49994 -25.78142 22.9704 -27.34259 22.92593 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 5.127 212.468 cm 0 G 0 g q 1 0 0 1 43.057 -226.733 cm q 0 G 0 g 0.3985 w q 0.94984 0.90263 0.76692 RG 0.94984 0.90263 0.76692 rg -86.55301 48.80508 m -83.363 48.77342 -80.42325 46.3313 -80.11258 42.2611 c -74.88603 44.266 -71.62125 41.2342 -72.39789 36.64911 c -74.4632 31.08888 -80.0752 36.931 -83.48381 32.6882 c -85.27011 29.90666 -81.91614 26.65337 -79.66673 29.4234 c -78.11057 31.59227 -73.4737 33.29514 -70.11685 32.91544 c -71.75069 37.9694 -69.17624 43.5325 -62.64665 42.6408 c -52.8494 40.56398 -60.54683 26.21614 -66.66797 36.42186 c -67.64308 35.15047 -67.22023 32.5415 -65.3678 31.03998 c -57.42586 24.09042 -46.25363 39.40764 -36.21188 34.66722 c -52.02097 34.96925 -52.48409 22.83629 -63.56999 26.14136 c -61.40689 13.54816 -79.67537 15.25104 -75.31177 24.68298 c -72.02682 18.8006 -66.62193 24.08467 -70.38437 27.0388 c -74.63004 29.9757 -81.15964 26.29381 -79.89398 18.6798 c -78.3867 10.01297 -66.82617 10.1568 -54.02588 23.41446 c -33.33829 40.41728 -18.07861 34.92322 -0.0719 16.67776 c -16.11398 28.6036 -31.6872 39.4623 -51.6873 19.45932 c -65.0859 3.21588 -78.9016 0.0719 -89.51865 8.20367 c -97.84027 14.9864 -98.09341 28.67554 -108.16394 27.54796 c -111.82281 27.21716 -111.80556 20.79399 -107.91943 20.55814 c -104.32674 20.4143 -105.39964 24.54779 -107.89642 24.44711 c -106.64229 25.70702 -104.78409 25.93138 -103.67088 23.61868 c -100.40897 15.85222 -115.6255 12.77151 -113.35597 26.06369 c -116.58624 28.618 -113.58609 35.35757 -108.07764 33.23474 c -108.50047 36.68076 -104.08223 39.07397 -97.31389 31.18669 c -94.77972 28.37062 -85.77924 29.50107 -85.40817 35.95012 c -85.00258 42.5315 -93.2897 42.76448 -94.16415 39.24368 c -95.16228 35.60782 -91.86584 33.58566 -89.95013 35.3173 c -93.98581 36.22339 -92.2628 39.28107 -89.18785 38.30595 c -86.67094 37.3941 -86.94421 32.79752 -92.7029 32.0784 c -101.11371 31.26434 -101.41286 44.6572 -93.3271 44.13657 c -91.6645 47.3956 -89.03252 48.82808 -86.55301 48.80508 c -87.89056 27.84999 m -89.23387 27.87875 -90.83896 27.49905 -92.61661 26.5153 c -96.14604 24.38957 -93.79308 15.87811 -87.15994 14.4859 c -91.98953 17.98367 -93.44504 22.35017 -89.69699 25.3158 c -90.50815 22.0769 -87.40443 18.89839 -84.28346 22.8967 c -82.73882 25.0253 -84.45605 27.77232 -87.89056 27.84999 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 30.97 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 6.125 31.875 Td[<374d2ff7262829d43f733169383238d63a493f53>]TJ ET 0 G 0 g q 1 0 0 1 224.782 30.97 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -44.505 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -44.505 Td[<27a924c326282d752ff739a12b4827c73ba53b25>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -61.043 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -61.043 Td[<3ba5382f38d02b6026283d133b9a369e316934232f432e59>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg BT /F7 10.9091 Tf -32.744 -77.581 Td[(\005)]TJ ET 0 G 0 g BT /F4 10.9091 Tf -21.835 -77.581 Td[<316926283a3229bd29e72599263c3ba53b252dbd293f>]TJ ET q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 269.2 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+180 0 obj
+<</Subtype/CIDFontType0C/Length 1137>>
+stream
+
+To ‹ ¯
+ë ¯ŒŽŒŽŒ’ŒÔš ÉŽª–—Œ‘÷ 
+endstream
+endobj
+181 0 obj
+<</Length 11>>
+stream
+€
+endstream
+endobj
+183 0 obj
+<</Length 415>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /JJQEIC+LMRoman10-BoldItalic-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+5 beginbfchar
+<0023> <0062>
+<002B> <0063>
+<0046> <006B>
+<0048> <006C>
+<0051> <006F>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+187 0 obj
+<</Subtype/CIDFontType0C/Length 689>>
+stream
+
+•”‹Ž‘†‡~9C)ZX&t û2™û ¿ û ÆÝJ–‘ûšûzvú}w÷xÁ÷®÷×÷S÷÷ P9Ì€‡†‰…ˆ‹‰œzï&Ãû9û`ûV\û;ûû
+‚‹‰ˆ…‰˜ÝÓí¼¾ñ¢÷
+To ‹ ¨
+Ì žŒŒŒ‘Œ³š ¡¦™‘Ž‘ ø~ù
+endstream
+endobj
+188 0 obj
+<</Length 12>>
+stream
+€
+endstream
+endobj
+190 0 obj
+<</Length 384>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /KYGWNF+LMRoman12-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+3 beginbfchar
+<0055> <0028>
+<0056> <0029>
+<0058> <002E>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+191 0 obj
+<</Type/XObject/Subtype/Form/FormType 1/BBox[0 0 362.83 272.13]/Matrix[1 0 0 1 0
+0]/Resources<</ColorSpace 120 0 R/Font<</F1 121 0 R/F9 177 0 R/F4 141 0 R/F10 184 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>/Length
+100195>>
+stream
+ q 1 0 0 1 72 200.126 cm 0.933 0.871 0.69 RG 0.933 0.871 0.69 rg q -72 -200.126 362.835 272.126 re f Q 0 G 0 g q 1 0 0 1 -72 -200.126 cm q 0 G 0 g 0.3985 w q 0.0 0.0 m 0.0 0.0 m 0.0 272.12965 l 362.8394 272.12965 l 362.8394 0.0 l h 362.8394 272.12965 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 143.607 82.636 cm 0 G 0 g q 1 0 0 1 55.527 -230.827 cm q 0 G 0 g 0.3985 w q 0.95049 0.90388 0.7699 RG 0.95049 0.90388 0.7699 rg -44.1153 59.11952 m -39.31961 59.18251 -35.41504 56.15018 -34.23108 51.77957 c -28.89693 54.45924 -20.57454 47.25783 -22.14896 42.89984 c -10.62419 37.66016 -19.01585 25.84885 -26.6518 30.59416 c -31.63641 34.20587 -30.06514 39.34164 -24.59561 39.43925 c -28.1349 40.8279 -33.14787 39.35109 -30.8681 32.82669 c -29.41019 28.7143 -20.24391 24.81602 -14.9507 30.78938 c -10.23372 34.37277 -0.0787 26.52585 -7.70206 20.08331 c -0.78088 5.34357 -20.9461 0.0787 -25.25372 10.87296 c -27.6248 17.67131 -17.74687 22.16154 -16.51251 13.9966 c -13.25662 20.0046 -27.08635 27.06744 -39.74155 15.80403 c -46.74457 8.48611 -55.25905 6.98412 -66.50671 9.96608 c -55.29999 9.56618 -46.97444 11.96559 -40.2737 23.28883 c -27.62166 20.53989 -30.97202 35.78346 -37.87428 35.82439 c -40.37447 43.5359 -50.55782 45.75269 -55.50781 37.6759 c -63.9845 42.0717 -75.72339 31.37192 -66.98221 22.76299 c -76.00679 16.58495 -85.62335 21.66718 -90.2994 26.61086 c -96.2822 31.564 -102.48543 31.90408 -108.06517 28.78043 c -110.50868 26.88795 -116.28995 23.95009 -123.00644 23.44313 c -119.13335 24.93253 -115.4555 26.66754 -110.59999 31.17355 c -104.9919 35.68584 -97.29927 35.68584 -88.94539 28.9851 c -74.70003 21.76479 -73.13818 39.70377 -82.90276 38.50404 c -86.75064 37.61607 -87.81496 34.15549 -85.07547 32.9117 c -85.71782 35.27963 -84.5811 37.00836 -81.681 36.88554 c -74.86375 34.31609 -80.39627 25.48042 -88.61476 30.56583 c -93.97409 34.11772 -91.26924 42.15985 -83.96077 41.49231 c -87.73938 47.78685 -79.49886 54.09712 -74.58037 49.78636 c -73.65775 52.07242 -70.50577 53.4768 -68.00243 52.2393 c -65.23459 50.44133 -66.8594 46.37616 -65.2094 44.33885 c -57.44435 33.89413 -45.82826 47.61365 -57.42545 50.66174 c -48.14896 44.54353 -62.81628 37.19412 -64.67409 47.87816 c -65.85178 55.6747 -56.00847 58.62201 -53.31937 55.2748 c -50.19257 57.92613 -46.99333 59.0786 -44.1153 59.11952 c -47.29248 40.3965 m -44.21921 40.49413 -41.01683 38.73706 -38.86932 34.09567 c -32.62201 34.51445 -31.86629 20.05182 -41.09239 26.08186 c -49.33923 3.93605 -83.38454 10.87296 -94.82428 21.92223 c -98.28485 25.18445 -104.23303 25.40486 -109.07596 22.5898 c -113.45285 19.12291 -122.23181 19.29926 -127.38019 22.7126 c -123.25519 21.66403 -118.42172 21.76164 -111.73672 24.93253 c -105.13673 29.20552 -100.46387 30.1596 -95.87285 28.17899 c -91.36055 25.704 -89.69167 22.79446 -85.11009 20.16518 c -76.71841 16.7109 -69.63667 17.57053 -65.76674 21.6105 c -63.59406 18.73247 -54.2892 21.5129 -56.44931 27.28786 c -58.51181 33.8343 -65.57782 31.2932 -64.01599 27.0265 c -63.14061 30.00847 -60.07678 30.6225 -58.59682 26.73053 c -57.81592 24.63023 -63.0745 19.99829 -66.96014 25.6001 c -70.68524 29.58337 -63.96875 39.96512 -54.94102 35.57562 c -53.30992 38.3466 -50.36574 40.29889 -47.29248 40.3965 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -6.544 100.923 cm 0 G 0 g q 1 0 0 1 -72 -223.056 cm q 0 G 0 g 0.3985 w q 0.95125 0.90536 0.77344 RG 0.95125 0.90536 0.77344 rg 74.59233 42.06075 m 71.84314 42.03348 69.30965 39.92882 69.0419 36.4211 c 64.53761 38.14893 61.72398 35.53609 62.39331 31.5846 c 64.1732 26.79276 69.00967 31.82755 71.94727 28.17105 c 73.48672 25.77388 70.59624 22.97017 68.65767 25.3574 c 67.31654 27.22656 63.32043 28.69412 60.42747 28.36688 c 61.83553 32.72244 59.61685 37.51678 53.98958 36.7483 c 45.54619 34.9585 52.17993 22.59335 57.45518 31.38876 c 58.29555 30.29305 57.93114 28.04463 56.33467 26.7506 c 49.49023 20.7614 39.86191 33.96194 31.2078 29.87659 c 44.83224 30.13689 45.23137 19.68056 54.78532 22.52892 c 52.92113 11.67596 68.66512 13.14351 64.90451 21.27206 c 62.07352 16.20256 57.41553 20.75644 60.65802 23.30234 c 64.31699 25.83339 69.94426 22.6603 68.8535 16.09845 c 67.55453 8.62929 57.59154 8.75325 46.56009 20.17883 c 28.73131 34.83206 15.58035 30.09721 0.06195 14.37308 c 13.88719 24.65091 27.30836 34.00903 44.54468 16.77025 c 56.09175 2.77148 67.99826 0.06195 77.14816 7.07002 c 84.31984 12.91544 84.53798 24.71288 93.21689 23.74112 c 96.37013 23.45604 96.35526 17.9205 93.00616 17.71721 c 89.90991 17.59328 90.83458 21.15555 92.98633 21.0688 c 91.9055 22.15459 90.30408 22.34793 89.34471 20.35484 c 86.53355 13.66162 99.64734 11.00664 97.69144 22.46198 c 100.47531 24.6633 97.88974 30.47154 93.1425 28.64206 c 93.50691 31.61186 89.6992 33.67438 83.86618 26.87703 c 81.6822 24.4501 73.92549 25.42435 73.60571 30.98222 c 73.25616 36.6541 80.3981 36.8549 81.15169 33.82063 c 82.01192 30.68721 79.171 28.94449 77.52 30.43683 c 80.998 31.21771 79.5131 33.85287 76.86308 33.01248 c 74.69397 32.22665 74.92947 28.26526 79.89238 27.64552 c 87.14091 26.94397 87.39873 38.48607 80.43031 38.03738 c 78.99747 40.84605 76.72922 42.08057 74.59233 42.06075 c 75.74506 24.00142 m 76.90274 24.0262 78.28601 23.69897 79.81801 22.85117 c 82.85971 21.01921 80.83192 13.68391 75.1154 12.4841 c 79.27759 15.49854 80.53195 19.26161 77.30185 21.81744 c 78.00092 19.02612 75.32611 16.28685 72.63643 19.73264 c 71.30522 21.56706 72.78517 23.9345 75.74506 24.00142 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 34.965 198.973 cm 0 G 0 g q 1 0 0 1 121.045 -246.6 cm q 0 G 0 g 0.3985 w q 0.94426 0.89182 0.741 RG 0.94426 0.89182 0.741 rg -66.78008 89.49294 m -59.52054 89.58826 -53.60995 84.99802 -51.81772 78.38199 c -43.74309 82.43835 -31.14496 71.53714 -33.52826 64.94017 c -16.0825 57.00853 -28.78549 39.12901 -40.34451 46.31229 c -47.89003 51.77957 -45.51149 59.55391 -37.23192 59.70168 c -42.58957 61.80374 -50.178 59.5682 -46.72699 49.6918 c -44.52003 43.46663 -30.64445 37.56557 -22.6318 46.60782 c -15.49144 52.03221 -0.11914 40.15382 -11.65909 30.40137 c -1.1821 8.0889 -31.70741 0.11914 -38.22812 16.45905 c -41.81738 26.75015 -26.86455 33.54732 -24.99605 21.18752 c -20.06738 30.28221 -41.0023 40.97371 -60.15927 23.92355 c -70.76018 12.84596 -83.64908 10.5723 -100.67538 15.08627 c -83.71104 14.48093 -71.10814 18.11305 -60.96481 35.25377 c -41.81262 31.09253 -46.88428 54.16765 -57.33267 54.22961 c -61.11736 65.90302 -76.53255 69.2587 -84.02565 57.03238 c -96.85733 63.68655 -114.62723 47.48964 -101.39514 34.45773 c -115.05623 25.10568 -129.61343 32.79897 -136.69183 40.28253 c -145.74838 47.78041 -155.13858 48.2952 -163.585 43.56671 c -167.28387 40.702 -176.03535 36.25475 -186.20251 35.48732 c -180.3396 37.74193 -174.77222 40.36833 -167.42212 47.18933 c -158.93279 54.01987 -147.28798 54.01987 -134.64218 43.87656 c -113.07808 32.94672 -110.71384 60.10207 -125.49507 58.286 c -131.31987 56.94182 -132.93098 51.70332 -128.78403 49.82051 c -129.75642 53.40498 -128.03568 56.02185 -123.64563 55.83597 c -113.32594 51.9464 -121.70088 38.57132 -134.1417 46.2694 c -142.25446 51.64612 -138.15993 63.82 -127.09665 62.8095 c -132.81657 72.33792 -120.34238 81.89021 -112.89696 75.36473 c -111.50034 78.82527 -106.72897 80.95119 -102.93951 79.0779 c -98.74968 76.35619 -101.20924 70.2025 -98.71155 67.1185 c -86.95709 51.3077 -69.3731 72.07578 -86.92851 76.68983 c -72.8861 67.42833 -95.08893 56.30309 -97.90121 72.47617 c -99.68393 84.27827 -84.78352 88.7398 -80.71286 83.67291 c -75.97961 87.6864 -71.13675 89.43097 -66.78008 89.49294 c -71.58957 61.15071 m -66.93738 61.2985 -62.08974 58.63872 -58.83891 51.61275 c -49.38197 52.2467 -48.23798 30.3537 -62.20413 39.48175 c -74.68788 5.95824 -126.22437 16.45905 -143.54144 33.18506 c -148.77994 38.12326 -157.78404 38.45692 -165.11508 34.19559 c -171.74065 28.94756 -185.02992 29.2145 -192.82333 34.38148 c -186.57907 32.7942 -179.26234 32.94197 -169.14285 37.74193 c -159.15205 44.21022 -152.07841 45.6545 -145.12872 42.6563 c -138.29817 38.90976 -135.77187 34.50542 -128.83647 30.52528 c -116.13347 25.29634 -105.41339 26.59761 -99.55522 32.71318 c -96.26628 28.3565 -82.18097 32.56541 -85.45087 41.30736 c -88.57298 51.21712 -99.26923 47.37047 -96.905 40.91173 c -95.57988 45.42569 -90.94199 46.3552 -88.70168 40.46365 c -87.51956 37.28435 -95.47978 30.27266 -101.36177 38.75247 c -107.00067 44.78221 -96.8335 60.4977 -83.16766 53.85304 c -80.69855 58.04765 -76.24178 61.00294 -71.58957 61.15071 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 160.186 195.398 cm 0 G 0 g q 1 0 0 1 -71.895 -230.632 cm q 0 G 0 g 0.3985 w q 0.94475 0.89273 0.74323 RG 0.94475 0.89273 0.74323 rg 4.0 M 154.19655 57.91222 m 150.612 57.82915 147.20668 56.46965 145.2789 53.93861 c 137.89998 59.69136 129.03041 58.45863 123.63614 54.1572 c 120.92586 52.00209 119.08987 49.06888 118.75764 45.85591 c 118.4298 42.6648 119.60133 39.20702 122.85364 35.98967 c 121.27121 32.54065 121.37173 29.58995 122.52142 27.26874 c 123.67984 24.93004 125.87865 23.2252 128.42717 22.25475 c 130.9757 21.27992 133.8783 21.03076 136.45741 21.61215 c 139.03654 22.18918 141.29655 23.60114 142.53366 25.9442 c 142.53802 25.94858 l 142.53802 25.94858 l 144.41336 29.90468 144.15546 33.38431 142.7872 35.67929 c 141.41458 37.97427 138.92726 39.08461 136.40059 38.28902 c 136.19078 38.22345 l 136.37001 38.09668 l 138.91852 36.28255 139.96329 34.0444 139.6223 32.2871 c 139.45183 31.40845 138.94037 30.64346 138.07921 30.09703 c 137.22241 29.55061 136.01155 29.22275 134.4597 29.23587 c 132.1516 29.34952 130.52107 30.35057 129.51129 31.84558 c 128.50586 33.3406 128.12991 35.34271 128.37909 37.44534 c 128.87743 41.65938 131.86746 46.27992 137.21805 48.10281 c 137.21805 48.10281 137.21805 48.10281 137.21805 48.10281 c 151.38573 51.7573 161.3875 36.98634 157.35707 27.33868 c 157.35707 27.3343 l 157.35707 27.32994 l 155.21944 21.23186 149.99126 17.71724 143.26369 16.8386 c 136.53174 15.95995 128.30914 17.73036 120.22208 22.21979 c 120.2177 22.22415 l 107.3046 30.0271 97.85365 32.77669 90.32173 32.7461 c 82.79417 32.71112 77.19443 29.89159 72.00124 26.59117 c 66.81236 23.29077 62.02133 19.51389 56.0937 17.52489 c 50.16609 15.54028 43.09319 15.3392 33.31 19.21225 c 33.21384 19.01991 l 33.21822 19.01553 33.22258 19.01553 33.23132 19.01117 c 47.36841 10.16783 56.69698 12.4672 65.37419 16.24844 c 74.05577 20.02971 82.08603 25.26663 93.77075 22.35965 c 93.77075 22.35965 l 93.77513 22.35965 l 102.37804 20.33571 107.43135 14.76218 114.72287 10.00172 c 122.00998 5.24129 131.53961 1.32014 149.0514 2.64468 c 149.0514 2.64468 l 151.59993 2.684 155.05333 4.06538 158.53734 6.32976 c 162.02135 8.59415 165.54031 11.74593 168.185 15.3392 c 170.83408 18.9325 172.61322 22.96292 172.60449 26.99335 c 172.60011 31.00629 170.81221 35.0061 166.38837 38.52507 c 168.68771 45.2308 167.6517 50.13113 165.02448 53.32224 c 162.39291 56.52211 158.18326 57.99965 154.19655 57.91222 c 154.20091 57.69365 m 158.1308 57.78107 162.27487 56.32103 164.85838 53.18237 c 167.4375 50.0437 168.47351 45.22205 166.16106 38.52945 c 166.13483 38.45512 l 166.19601 38.40704 l 170.62862 34.90994 172.38153 30.96257 172.39027 26.99335 c 172.39465 23.02849 170.63736 19.03304 168.01015 15.46597 c 165.38293 11.89891 161.88145 8.76463 158.41493 6.51335 c 154.9528 4.2621 151.51688 2.89822 149.04266 2.86324 c 149.0383 2.86324 l 149.03392 2.86324 l 131.56146 1.54309 122.10614 5.44237 114.84088 10.18533 c 107.57562 14.92392 102.49606 20.52805 93.82321 22.56949 c 93.82321 22.56949 l 82.05542 25.49834 73.94649 20.22205 65.28676 16.44954 c 56.87619 12.78194 47.91484 10.6006 34.49028 18.56093 c 43.64835 15.1862 50.45026 15.40915 56.16365 17.31944 c 62.13498 19.32153 66.93915 23.1159 72.11925 26.40758 c 77.29935 29.69923 82.84665 32.49693 90.32611 32.52753 c 97.80118 32.5625 107.2128 29.826 120.10841 22.03618 c 120.11278 22.03181 l 120.11278 22.03181 l 128.23045 17.52054 136.50114 15.737 143.2899 16.62439 c 150.07869 17.5118 155.39868 21.08322 157.56252 27.26 c 161.66287 37.10437 151.48628 52.0152 137.15685 48.31264 c 137.15248 48.31264 l 137.1481 48.31264 l 131.71446 46.45915 128.66759 41.76866 128.1605 37.47157 c 127.90698 35.32521 128.28728 33.27066 129.33206 31.72319 c 130.37682 30.17134 132.08603 29.13095 134.45096 29.0173 c 134.45096 29.0173 l 134.45532 29.0173 l 136.04214 29.00418 137.29236 29.33641 138.19724 29.91342 c 139.10213 30.49045 139.65729 31.3079 139.83652 32.2434 c 140.1906 34.06187 139.12396 36.29129 136.68474 38.1098 c 139.03654 38.74803 141.31404 37.72511 142.59923 35.57 c 143.92377 33.34497 144.19043 29.94841 142.34131 26.04475 c 141.13919 23.76726 138.94037 22.39026 136.40933 21.82198 c 133.8783 21.2537 131.01503 21.49849 128.50586 22.45583 c 125.99667 23.41316 123.84595 25.08742 122.71812 27.36491 c 121.59032 29.64241 121.48102 32.53189 123.0766 35.96346 c 123.10718 36.03337 l 123.05473 36.09021 l 119.79367 39.2857 118.64836 42.69539 118.97623 45.83405 c 119.29971 48.97707 121.10071 51.8622 123.77164 53.98671 c 129.10912 58.24445 137.90872 59.47281 145.22644 53.71567 c 145.31386 53.64574 l 145.37944 53.73317 l 147.24602 56.25108 150.62949 57.61496 154.20091 57.69365 c 51.07536 43.03635 m 48.11154 43.11942 45.11278 42.22765 42.87462 40.4004 c 40.63646 38.57315 39.16768 35.80608 39.25946 32.17345 c 39.25946 32.17345 l 39.25946 32.16907 l 39.48242 28.9867 40.69766 26.85345 42.38939 25.85242 c 44.08548 24.85573 46.24496 25.00436 48.29951 26.33327 c 48.29951 26.33327 l 49.91693 27.35617 50.39342 28.97359 49.78142 30.14513 c 49.1738 31.31229 47.50392 31.99422 44.9685 31.22922 c 44.97726 31.22922 l 44.52263 31.14616 44.18604 31.20735 43.95436 31.36473 c 43.72704 31.5221 43.59589 31.7844 43.56967 32.13847 c 43.51721 32.85101 43.91937 33.92638 44.8636 35.05855 c 44.86797 35.06294 l 44.87234 35.0673 l 48.45251 40.39604 56.60953 37.79506 57.04231 33.10893 c 57.32645 29.92216 56.29478 26.8622 54.18779 24.75519 c 52.08514 22.65256 48.90715 21.49849 44.87234 22.13672 c 42.00034 22.84926 39.97202 23.65796 38.56442 24.6765 c 37.1612 25.6994 36.37436 26.9234 35.97217 28.49272 c 35.91972 28.70256 l 35.78423 28.53645 l 34.9012 27.46982 34.02692 26.91466 33.04773 26.72668 c 32.07289 26.54309 30.98006 26.72668 29.68613 27.17258 c 29.68175 27.17258 l 29.67737 27.17258 l 25.92235 28.16489 22.91919 27.1682 19.95538 25.74312 c 16.98721 24.31805 14.04965 22.46895 10.38641 21.71269 c 6.24234 20.9302 2.92882 22.89735 0.17921 25.17484 c -0.1049 25.4109 l 0.00435 25.05682 l 1.1584 21.37172 4.02603 19.3434 7.33517 18.67458 c 10.64433 18.01013 14.39935 18.6877 17.38503 20.39691 c 21.41107 22.67877 24.54973 23.76288 28.0862 23.59239 c 31.61827 23.4219 35.56128 21.98808 41.18289 19.19914 c 41.18726 19.19476 l 41.196 19.1904 l 48.17273 16.85608 54.5069 18.53032 58.41055 22.1848 c 62.30983 25.8393 63.77861 31.48276 61.03339 37.03006 c 61.02902 37.03006 l 59.13182 40.95995 55.12762 42.91832 51.07536 43.03635 c 51.06662 42.8178 m 55.0577 42.69975 58.97884 40.7851 60.83667 36.9339 c 60.83667 36.9339 l 60.83667 36.9339 l 63.54257 31.46527 62.1 25.93983 58.26192 22.34218 c 54.41948 18.74452 48.17712 17.0834 41.27032 19.39586 c 41.26595 19.39586 41.26595 19.39586 41.26595 19.40022 c 35.64433 22.18918 31.67511 23.63612 28.09494 23.81097 c 24.51039 23.98581 21.31927 22.87987 17.28009 20.58925 c 14.33815 18.90627 10.62685 18.23306 7.37889 18.88878 c 4.25336 19.51825 1.59991 21.39795 0.38902 24.74644 c 3.09929 22.56949 6.36473 20.7335 10.43013 21.50287 c 10.43013 21.50287 l 10.43013 21.50287 l 14.14145 22.26349 17.0965 24.13008 20.0472 25.54642 c 22.9979 26.96274 25.9311 27.93756 29.62492 26.96274 c 30.93196 26.51248 32.0598 26.31577 33.09143 26.51248 c 34.075 26.70482 34.96239 27.28186 35.82794 28.2829 c 36.25195 26.75291 37.04755 25.51143 38.43765 24.50165 c 39.8802 23.4569 41.93475 22.63943 44.82426 21.92252 c 44.82863 21.91815 l 44.833 21.91815 l 48.92899 21.2712 52.1857 22.4471 54.34079 24.60219 c 56.49588 26.75728 57.54501 29.88284 57.26088 33.1264 c 57.26088 33.1264 l 56.80188 38.05734 48.3782 40.67143 44.69313 35.1897 c 43.7314 34.0313 43.29427 32.9297 43.35109 32.12099 c 43.3817 31.71881 43.54344 31.3866 43.83195 31.18552 c 44.12047 30.98442 44.52701 30.92323 45.02097 31.0194 c 45.02534 31.0194 l 45.02971 31.0194 l 47.50829 31.76689 49.03827 31.09808 49.5891 30.04019 c 50.13988 28.9867 49.72896 27.49605 48.18585 26.51686 c 48.18149 26.51686 l 46.1794 25.21855 44.12047 25.08742 42.50305 26.04037 c 40.88562 26.99335 39.69661 29.05226 39.47804 32.18219 c 39.47804 32.18219 39.47804 32.18657 39.47804 32.18657 c 39.38623 35.75362 40.82443 38.44203 43.0145 40.22993 c 45.20457 42.0222 48.1509 42.90085 51.06662 42.8178 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -72 -200.126 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -35.127 141.617 cm 0 G 0 g q 1 0 0 1 -72.022 -227.8 cm q 0 G 0 g 0.3985 w q 0.94446 0.89218 0.74187 RG 0.94446 0.89218 0.74187 rg 92.63206 52.30986 m 89.20569 52.27599 86.05023 49.65927 85.67772 45.32782 c 82.90707 46.36528 80.63206 46.09436 79.15439 44.9307 c 77.6613 43.7547 76.9871 41.68288 77.40887 39.21083 c 77.40887 39.2047 l 77.41194 39.19545 l 77.96916 37.69315 78.77881 36.94505 79.73007 36.61566 c 80.6844 36.28627 81.76495 36.37245 82.88553 36.49869 c 84.00302 36.62491 85.16054 36.79114 86.25648 36.64954 c 87.35243 36.50484 88.38681 36.05846 89.28572 34.94096 c 90.21852 33.48174 89.806 31.91171 88.8732 31.06512 c 88.40836 30.64029 87.81421 30.40018 87.18927 30.44328 c 86.56741 30.48637 85.91476 30.80962 85.3237 31.53922 c 84.47403 32.71828 82.80548 33.75574 80.89989 34.45456 c 79.02818 35.13799 76.92863 35.48894 75.13695 35.3073 c 75.97737 38.00099 75.72801 40.81783 74.38579 42.85887 c 73.0251 44.92761 70.55305 46.19287 67.0374 45.71263 c 67.03433 45.71263 l 67.03125 45.70956 l 64.38991 45.14928 62.91222 43.7547 62.30267 42.14774 c 61.69313 40.54384 61.94865 38.73367 62.7429 37.33911 c 63.53714 35.94455 64.87938 34.95944 66.44327 35.021 c 67.98558 35.08566 69.7188 36.1816 71.34422 38.83835 c 71.79678 38.17955 71.93222 37.21597 71.71365 36.20929 c 71.48892 35.15645 70.88861 34.06975 69.91273 33.27856 c 69.90965 33.27856 l 69.90965 33.27856 l 67.80087 31.43456 65.492 31.06822 63.02304 31.47765 c 60.55408 31.88708 57.92812 33.0754 55.23137 34.34372 c 52.53459 35.609 49.76395 36.9543 46.98714 37.66544 c 44.21341 38.37347 41.43045 38.44737 38.72443 37.1698 c 38.39812 37.01895 l 38.75522 37.02512 l 47.19647 37.18828 51.52483 34.03589 55.24675 31.2714 c 57.10617 29.89223 58.81473 28.60541 60.8096 27.88504 c 62.77676 27.1739 65.02715 27.02922 67.95172 27.87889 c 67.40683 24.5541 68.18877 22.14363 69.62335 20.57668 c 71.07332 18.99124 73.17593 18.26472 75.2016 18.2801 c 77.22725 18.29858 79.18517 19.0559 80.3427 20.4566 c 81.5002 21.86041 81.84807 23.90454 80.67209 26.44737 c 80.60744 26.5859 l 80.53664 26.45354 l 79.66234 24.89275 78.65567 24.08002 77.70442 23.78447 c 76.75624 23.48587 75.85423 23.69519 75.18312 24.19391 c 74.50893 24.68956 74.06563 25.47456 74.03484 26.32733 c 74.00406 27.17699 74.3827 28.09746 75.37091 28.87323 c 75.374 28.87631 l 77.61821 30.42787 80.46274 30.23087 82.58383 28.63618 c 84.70491 27.04462 86.10255 24.05539 85.43144 20.00407 c 85.02815 17.70135 83.96608 15.9928 82.38373 14.93686 c 80.80138 13.88402 78.6957 13.47766 76.20518 13.80089 c 71.22417 14.45045 64.71622 18.0246 57.8758 25.1113 c 57.87271 25.1144 l 57.86963 25.11746 l 46.78703 34.22675 37.14517 37.31757 27.86041 35.67673 c 18.57565 34.03589 9.66339 27.67262 0.02153 17.90454 c 0.12312 17.78755 l 8.70598 24.16928 17.15955 30.2555 26.12413 32.07796 c 35.08873 33.89735 44.5736 31.46533 55.26215 20.7737 c 55.26215 20.7737 55.26215 20.77063 55.26521 20.77063 c 62.43814 12.07385 69.73111 6.87735 76.65771 4.94714 c 83.58743 3.01382 90.15695 4.35606 95.85524 8.71829 c 95.85524 8.71829 l 95.85524 8.72139 l 100.32831 12.36632 102.62486 17.8553 105.14923 22.26677 c 106.41142 24.47406 107.72902 26.41043 109.39758 27.71573 c 111.06305 29.02408 113.07639 29.70444 115.75468 29.40582 c 115.75468 29.40582 l 115.75468 29.40582 l 116.71208 29.31963 117.42322 28.83937 117.89424 28.15596 c 118.36833 27.47252 118.59921 26.58899 118.58382 25.70546 c 118.56534 24.82193 118.30058 23.94455 117.78648 23.27345 c 117.27237 22.60541 116.51508 22.14056 115.49915 22.07898 c 114.551 22.04204 113.92606 22.28525 113.55356 22.65775 c 113.18105 23.03024 113.05176 23.53821 113.11948 24.05539 c 113.25493 25.09283 114.17848 26.13954 115.47453 26.08719 c 115.66847 26.07797 l 115.52995 26.21957 l 114.84651 26.903 113.99377 27.31552 113.15027 27.22932 c 112.30675 27.1462 111.48787 26.56436 110.88449 25.3114 c 110.88449 25.30833 l 110.8814 25.30525 l 110.00096 23.20879 110.3673 21.40787 111.3832 20.1303 c 112.39603 18.85579 114.0492 18.10156 115.7362 18.05847 c 117.42322 18.01537 119.15025 18.68648 120.29547 20.26881 c 121.43759 21.84502 121.99788 24.32013 121.39757 27.86658 c 123.12769 29.26729 123.18309 31.7732 122.06868 33.648 c 120.95735 35.51357 118.67001 36.75113 115.73929 35.67056 c 115.82547 36.56334 115.62537 37.3976 115.13898 38.01639 c 114.6341 38.66287 113.8337 39.07538 112.79932 39.09694 c 110.72748 39.1462 107.71979 37.6562 104.09024 33.42635 c 102.76956 31.9579 99.70645 31.4992 96.93272 32.28113 c 94.15593 33.06308 91.6808 35.0641 91.48378 38.47816 c 91.48378 38.48125 l 91.0528 45.4602 99.79573 45.63875 100.70389 41.98149 c 100.70389 41.98149 l 100.70389 41.97841 l 101.23338 40.05743 100.62692 38.57976 99.64488 37.80397 c 98.70287 37.05896 97.42836 36.98201 96.44632 37.77934 c 97.42836 38.02563 98.10872 38.3858 98.4843 38.8014 c 98.88141 39.24777 98.96454 39.74957 98.78598 40.18057 c 98.43195 41.04256 97.10204 41.59976 95.4304 41.07025 c 95.42734 41.07025 l 95.42734 41.06718 l 94.042 40.56538 93.42323 39.04153 93.94041 37.56076 c 94.45761 36.08 96.1046 34.64235 99.20465 34.25446 c 99.20773 34.25446 l 99.20773 34.25446 l 101.47968 34.03589 103.21286 34.7778 104.38884 36.00612 c 105.56483 37.23444 106.18362 38.94301 106.2452 40.66388 c 106.30984 42.3817 105.8142 44.11182 104.7552 45.38016 c 103.70235 46.63927 102.08612 47.4335 99.9281 47.31038 c 98.13643 50.7891 95.30728 52.33449 92.63206 52.30986 c 92.63206 52.15593 m 95.25803 52.18057 98.04715 50.66902 99.8142 47.20264 c 99.83884 47.15645 l 99.88809 47.15953 l 102.03072 47.29807 103.60384 46.5192 104.63513 45.28473 c 105.66951 44.05025 106.15283 42.354 106.09125 40.67006 c 106.03278 38.98303 105.42323 37.30832 104.27803 36.1108 c 103.13283 34.91634 101.45197 34.19289 99.22313 34.40837 c 96.1631 34.79012 94.58075 36.19699 94.08511 37.6131 c 93.58946 39.02614 94.17131 40.4484 95.4766 40.92249 c 97.09589 41.4366 98.33344 40.8794 98.64436 40.12207 c 98.7983 39.74342 98.73672 39.31552 98.3673 38.90607 c 98.00096 38.49663 97.32063 38.11182 96.25238 37.87169 c 96.1077 37.84091 l 96.21542 37.73932 l 97.26828 36.78807 98.7121 36.8681 99.74031 37.6839 c 100.7716 38.4997 101.39346 40.05127 100.85474 42.01843 c 100.85165 42.01843 l 99.88809 45.89735 90.89272 45.57718 91.32985 38.46893 c 91.53304 34.98405 94.0728 32.92763 96.88962 32.13338 c 99.70645 31.33911 102.81573 31.78242 104.20721 33.32475 c 104.20721 33.32475 l 104.20721 33.32782 l 107.82138 37.53922 110.80136 38.9892 112.79315 38.94301 c 113.7906 38.92146 114.54175 38.5305 115.0189 37.92094 c 115.49915 37.3145 115.70541 36.48329 115.59459 35.57822 c 115.57921 35.452 l 115.69618 35.49817 l 118.6146 36.62183 120.84344 35.40274 121.93631 33.56795 c 123.0261 31.73624 122.96452 29.29192 121.27135 27.95277 c 121.2344 27.92505 l 121.24364 27.88196 l 121.84703 24.33861 121.28674 21.90044 120.17232 20.35811 c 119.05482 18.81886 117.38321 18.1693 115.73929 18.2093 c 114.09535 18.25241 112.48222 18.99124 111.50327 20.22572 c 110.52122 21.46022 110.16104 23.19032 111.02303 25.24675 c 111.02303 25.24675 111.02303 25.24675 111.0261 25.24675 c 111.61102 26.46585 112.38371 26.99843 113.16566 27.07848 c 113.89833 27.14928 114.64949 26.79218 115.28366 26.20726 c 114.01532 26.14876 113.10716 25.12979 112.96863 24.07693 c 112.89474 23.51971 113.03636 22.95943 113.4458 22.54692 c 113.85524 22.13748 114.52637 21.88506 115.50224 21.92506 c 115.50533 21.92506 l 115.50533 21.92506 l 116.5674 21.98972 117.37088 22.47919 117.90656 23.18109 c 118.44528 23.88298 118.71927 24.79115 118.73466 25.7024 c 118.75313 26.61362 118.5161 27.52794 118.02045 28.24216 c 117.52481 28.95636 116.77058 29.46739 115.77007 29.55974 c 113.0579 29.86143 110.9953 29.1657 109.30214 27.83885 c 107.60896 26.50894 106.28214 24.55717 105.01688 22.34373 c 102.48326 17.91685 100.19286 12.45251 95.75674 8.83836 c 90.0923 4.50075 83.58743 3.1739 76.69774 5.09491 c 69.81114 7.0128 62.53972 12.19086 55.37605 20.87529 c 55.37605 20.87837 l 55.37297 20.88144 l 44.65671 31.59464 35.10413 34.05743 26.09335 32.22572 c 17.3812 30.45866 9.17699 24.68031 0.88351 18.52946 c 10.2237 27.85733 18.89583 33.93738 27.88504 35.52588 c 37.12053 37.15749 46.71007 34.0913 57.76804 25.00049 c 57.77113 25.00049 57.77113 25.00049 57.77113 25.00049 c 64.62694 17.90146 71.15337 14.30577 76.1867 13.65004 c 78.70183 13.32065 80.84756 13.7301 82.46684 14.81064 c 84.08614 15.8912 85.17593 17.64287 85.58229 19.97945 c 85.58229 19.97945 l 86.26265 24.07693 84.84344 27.13081 82.6762 28.75932 c 80.50584 30.38786 77.58435 30.59103 75.2847 28.99945 c 75.28163 28.99945 l 75.28163 28.99638 l 74.25648 28.19597 73.85013 27.22316 73.8809 26.32115 c 73.91478 25.42223 74.3827 24.59412 75.09076 24.06769 c 75.79881 23.54434 76.75316 23.3227 77.75058 23.63672 c 78.71724 23.9384 79.71466 24.75421 80.57974 26.2442 c 81.65721 23.8091 81.32166 21.88506 80.22263 20.55513 c 79.10205 19.19751 77.1903 18.44943 75.2016 18.43405 c 73.21289 18.41866 71.15337 19.13286 69.73418 20.68134 c 68.31807 22.22676 67.53612 24.6126 68.1118 27.96509 c 68.13028 28.08514 l 68.01329 28.05127 l 65.061 27.17082 62.82602 27.3186 60.85886 28.02974 c 58.89476 28.73778 57.19852 30.01535 55.33603 31.39761 c 51.67877 34.11284 47.36272 37.2129 39.16774 37.16672 c 41.71675 38.24727 44.3273 38.1857 46.9502 37.51459 c 49.70544 36.8127 52.46994 35.47354 55.16672 34.2052 c 57.86655 32.93686 60.49867 31.73932 62.99533 31.3268 c 65.49507 30.91121 67.86551 31.28679 70.00816 33.16159 c 70.00816 33.16159 l 71.01482 33.97739 71.63052 35.09181 71.8645 36.17545 c 72.09846 37.26216 71.9507 38.32115 71.41196 39.02614 c 71.34422 39.11542 l 71.28574 39.01997 l 69.65413 36.30167 67.93326 35.23651 66.43709 35.17493 c 64.94095 35.11644 63.65106 36.05846 62.87529 37.41608 c 62.10257 38.77368 61.8563 40.53767 62.44736 42.0954 c 63.03535 43.65004 64.4607 45.00766 67.06203 45.55872 c 70.5315 46.0328 72.92966 44.79832 74.25648 42.77574 c 75.5864 40.75317 75.83575 37.93634 74.96762 35.25189 c 74.93376 35.13799 l 75.05075 35.1503 l 76.83012 35.35349 78.96043 34.99947 80.84756 34.30988 c 82.73776 33.6172 84.38167 32.5859 85.20056 31.44687 c 85.20363 31.44379 l 85.20363 31.4407 l 85.81625 30.68648 86.51201 30.33553 87.18004 30.28934 c 87.84807 30.24318 88.4853 30.50485 88.97789 30.95122 c 89.963 31.84708 90.38783 33.50638 89.41194 35.0241 c 89.40886 35.03024 l 89.40579 35.03331 l 88.48224 36.1816 87.40169 36.65262 86.27496 36.80038 c 85.1513 36.94814 83.98456 36.77576 82.86705 36.64954 c 81.75264 36.5264 80.69055 36.44635 79.78241 36.76035 c 78.87424 37.07437 78.10461 37.77628 77.55664 39.24164 c 77.1472 41.67365 77.80908 43.67467 79.2498 44.81064 c 80.69363 45.94661 82.93172 46.22366 85.7116 45.15851 c 85.80702 45.12157 l 85.81625 45.22316 l 86.14566 49.54536 89.25803 52.12207 92.63206 52.15593 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -72 -200.126 cm Q Q Q Q Q Q n Q Q 0.559 0 0.138 RG 0.559 0 0.138 rg 0 G 0 g 0.858 0.522 0.488 RG 0.858 0.522 0.488 rg 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.528 65.898 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg q 1 0 0 1 -64.528 61.788 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.528 65.898 cm Q Q Q Q Q Q Q Q n Q Q 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q -1 0 0 1 -11.895 0 cm 0 G 0 g q 1 0 0 1 -5.947 31.001 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg Q BT /F1 20.6585 Tf 60.758 31.968 Td[<28953eb8>]TJ /F9 17.2154 Tf 48.444 0 Td[<002300480051>58<002b0046>]TJ ET 0 G 0 g q 1 0 0 1 224.782 31.001 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 33.67357 12.62268 m 32.88698 12.60454 32.14145 12.30577 31.7281 11.74828 c 28.51491 14.27797 23.99295 10.67339 26.85484 7.864 c 25.45158 4.84651 30.03749 3.65802 31.10475 5.677 c 31.91806 7.39339 30.87564 8.68019 29.79312 8.33842 c 30.91669 7.54039 30.73341 6.34904 29.36163 6.3605 c 27.3207 6.45976 27.60136 9.72548 29.95732 10.52733 c 33.0693 11.3311 35.2735 8.08928 34.38475 5.96053 c 33.44542 3.28 29.77975 2.8657 26.24104 4.83218 c 14.96815 11.64517 15.82632 0.78467 7.26546 4.1735 c 13.43315 0.3131 15.36143 6.18103 20.48288 4.90569 c 24.25642 4.0179 24.90651 0.02385 32.54713 0.60138 c 34.74081 0.63287 40.19542 5.3343 36.30731 8.40622 c 37.32207 11.33876 35.40236 12.66182 33.67357 12.62268 c 11.1526 9.37418 m 9.86867 9.4114 8.55608 8.59903 8.59714 7.02682 c 8.6926 5.6474 9.64815 5.19684 10.53497 5.77055 c 11.22514 6.20776 10.9216 7.12704 9.82666 6.79675 c 9.4114 6.71848 9.36177 7.17 9.77893 7.67117 c 10.5722 8.85202 12.38309 8.2821 12.48045 7.23204 c 12.60454 5.82782 11.57072 4.52957 9.7942 4.81021 c 8.53604 5.12238 8.01006 5.5214 7.83249 6.21635 c 7.44302 5.74478 7.04495 5.7152 6.47505 5.91089 c 4.8484 6.34045 3.8833 5.04984 2.27289 4.71858 c 1.35838 4.54579 0.62717 4.98015 0.02385 5.4794 c 0.5231 3.88521 2.49149 3.73439 3.78499 4.47516 c 5.54718 5.47368 6.5476 5.43263 9.00378 4.21361 c 12.03561 3.19789 14.49753 5.67032 13.30618 8.07593 c 12.89667 8.92552 12.03084 9.3484 11.1526 9.37418 c B Q n Q Q 0.745 0 0.184 RG 0.745 0 0.184 rg 0 G 0 g 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -43.654 7.999 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 6.717 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -8.016 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.02 0.467 0.282 RG 0.02 0.467 0.282 rg q 1 0 0 1 -43.654 -29.304 cm q 0.01962 0.46667 0.28235 RG 0.01962 0.46667 0.28235 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -30.586 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -45.319 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.337 0 0.31 RG 0.337 0 0.31 rg q 1 0 0 1 -43.654 -66.608 cm q 0.33725 0 0.3098 RG 0.33725 0 0.3098 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -67.889 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -82.622 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -43.654 -103.911 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -105.192 Td[<26ca2e7b>]TJ /F10 11.9552 Tf 27.808 0 Td[<0055>]TJ /F4 11.9552 Tf 4.555 0 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ /F10 11.9552 Tf 119.551 0 Td[<0056>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -121.563 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -43.654 -142.852 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 2 J 0.0 0.0 m 0.0 5.16603 l 6.44688 5.16603 l 6.44688 0.89658 l 11.10059 0.89658 l 11.10059 4.26945 l 8.5816 4.26945 l 8.5816 3.0313 l 9.86244 3.0313 l 9.86244 2.13472 l 7.68501 2.13472 l 7.68501 5.16603 l 11.99718 5.16603 l 11.99718 0.0 l 5.55028 0.0 l 5.55028 4.26945 l 0.89658 4.26945 l 0.89658 0.89658 l 3.41556 0.89658 l 3.41556 2.13472 l 2.13472 2.13472 l 2.13472 2.15605 l 2.13472 3.0313 l 4.31213 3.0313 l 4.31213 0.0 l 0.0 0.0 l 0.04268 0.04268 m 4.26945 0.04268 l 4.26945 2.98862 l 2.17741 2.98862 l 2.17741 2.17741 l 3.45825 2.17741 l 3.45825 0.85387 l 0.85387 0.85387 l 0.85387 4.31213 l 5.59299 4.31213 l 5.59299 0.04268 l 11.95448 0.04268 l 11.95448 5.12335 l 7.72772 5.12335 l 7.72772 2.17741 l 9.81976 2.17741 l 9.81976 2.98862 l 8.53891 2.98862 l 8.53891 4.31213 l 11.14328 4.31213 l 11.14328 0.85387 l 6.40417 0.85387 l 6.40417 5.12335 l 0.04268 5.12335 l 0.04268 0.04268 l B Q n Q Q BT /F4 11.9552 Tf -27.759 -144.133 Td[<316935c138c43762234b3f8e308826283d2c23f4>]TJ /F10 11.9552 Tf 119.552 0 Td[<0058>]TJ ET 0 G 0 g BT /F4 10.9091 Tf -43.654 -158.866 Td[<344138c43c6b3a32227f31692f4039722e42>]TJ ET 0.745 0 0.184 RG 0.745 0 0.184 rg q .3985 w 254.774 -158.866 m 254.774 -151.503 l S Q q .3985 w 254.973 -151.702 m 261.519 -151.702 l S Q q .3985 w 254.973 -158.667 m 261.519 -158.667 l S Q q .3985 w 261.718 -158.866 m 261.718 -151.503 l S Q 0 G 0 g 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm 1 0 0 1 2000.02579 2000.02579 cm 1 0 0 1 -2000.02579 -2000.02579 cm q 1 0 0 1 -64.229 -194.024 cm q 0 G 0 g 0.3985 w q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 7.472 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 22.416 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 37.36 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 52.304 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 67.248 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 82.193 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 97.137 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 112.081 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 127.025 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 141.969 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 156.913 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.857 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 186.802 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 201.746 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 216.69 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 231.634 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 246.578 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 261.522 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 276.467 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 291.411 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 306.355 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 321.299 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 336.243 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 351.187 0 cm 0 G 0 g q 1 0 0 1 -64.229 -198.134 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 0.0 0.0 m 6.9119 0.0 l 6.9119 6.35146 l 2.4285 6.35146 l 2.4285 3.73615 l 4.29657 3.73615 l 4.29657 2.6153 l 1.30763 2.6153 l 1.30763 7.4723 l 13.63698 7.4723 l 13.63698 2.6153 l 10.64806 2.6153 l 10.64806 3.73615 l 12.51613 3.73615 l 12.51613 6.35146 l 8.03273 6.35146 l 8.03273 0.0 l 14.94463 0.0 l 14.94463 0.74721 l 8.77997 0.74721 l 8.77997 5.60423 l 11.76889 5.60423 l 11.76889 4.48337 l 9.90082 4.48337 l 9.90082 1.86807 l 14.38422 1.86807 l 14.38422 8.21953 l 0.56041 8.21953 l 0.56041 1.86807 l 5.0438 1.86807 l 5.0438 4.48337 l 3.17572 4.48337 l 3.17572 5.60423 l 6.16466 5.60423 l 6.16466 0.74721 l 0.0 0.74721 l 0.0 0.0 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q Q q 0.873 0.5 0.592 RG 0.873 0.5 0.592 rg 0.59776 w -7.47208 7.47208 m 362.8394 7.47208 l S 0 G 0 g Q -7.77097 23.91064 m -7.77097 23.91064 m -7.77097 0.0 l 362.8394 0.0 l 362.8394 23.91064 l h 362.8394 0.0 m W n q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 -64.229 -194.024 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 341.767 16.306 cm 0 G 0 g 0.745 0 0.184 RG 0.745 0 0.184 rg q 1 0 0 1 -64.229 -201.663 cm q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 0.3985 w q 0.0 w 22.28368 7.04872 m 22.19943 6.65405 l 22.26593 6.39462 l 22.44997 6.15959 l 22.65175 6.04208 l 22.76927 5.87357 l 22.74487 5.51437 l 22.54309 5.11969 l 22.22382 4.86026 l 21.66284 4.45894 l 21.2615 4.05539 l 21.15286 3.69618 l 20.86684 3.38577 l 20.32138 3.27713 l 19.92006 3.03323 l 19.8114 2.75607 l 19.58525 2.61415 l 19.17505 2.60529 l 18.64734 2.58977 l 18.47882 2.58089 l 18.3857 2.9157 l 18.40343 3.20174 l 18.54535 3.48555 l 18.79811 3.72945 l 19.10631 3.8625 l 19.44334 3.89575 l 19.71164 3.77159 l 19.90231 3.65407 l 20.04645 3.6452 l 20.17947 3.84697 l 20.246 4.1064 l 20.47438 4.31482 l 20.73381 4.36581 l 20.94221 4.44121 l 21.04424 4.53433 l 21.31029 4.83588 l 21.52982 5.25494 l 21.56305 5.38799 l 21.51207 5.5055 l 21.3369 5.44785 l 20.95108 5.27048 l 20.64067 5.03766 l 20.33025 4.84474 l 20.20609 4.64297 l 20.07083 4.30815 l 19.84467 4.082 l 19.46774 3.98001 l 19.15732 4.09752 l 18.91563 4.2239 l 18.41895 4.35693 l 17.73381 4.53433 l 17.47217 4.8514 l 17.46553 5.0709 l 17.5653 5.27934 l 17.76707 5.47223 l 18.24379 5.68953 l 18.63847 5.67401 l 18.95554 5.45451 l 19.0154 5.17068 l 18.99767 4.96892 l 19.11519 4.82701 l 19.20831 4.86026 l 19.27483 5.02878 l 19.45886 5.11304 l 19.63623 5.11304 l 19.75154 5.0953 l 19.98657 5.25494 l 20.23935 5.47223 l 20.39899 5.66515 l 20.53203 5.90904 l 20.57416 6.06647 l 20.49876 6.13521 l 20.03757 6.15073 l 19.60077 6.12634 l 19.09079 6.11746 l 18.5542 5.98444 l 17.95998 5.79152 l 17.07971 5.36359 l 16.29924 5.0709 l 15.15068 4.92014 l 14.6917 4.93565 l 14.38127 4.99551 l 14.18839 4.98665 l 14.09525 4.91127 l 13.93562 4.72723 l 13.69392 4.53433 l 13.4345 4.45007 l 13.19948 4.45894 l 13.01544 4.34142 l 12.89792 4.19064 l 12.46112 3.6452 l 12.05092 3.28601 l 11.46333 3.184 l 10.72719 3.11748 l 9.95558 2.92458 l 9.18396 2.6563 l 8.56535 2.27934 l 8.02876 1.84477 l 7.83586 1.50774 l 7.66736 1.10641 l 7.39241 0.89577 l 6.9556 0.87137 l 6.60304 0.75386 l 6.39462 0.39467 l 5.97556 0.19289 l 5.11969 0.0 l 4.9024 0.26828 l 4.86026 0.5787 l 5.0443 1.00662 l 5.45671 1.3237 l 5.78265 1.43236 l 6.05981 1.30818 l 6.23497 1.20618 l 6.34363 1.16405 l 6.4789 1.2727 l 6.58752 1.5166 l 6.65405 1.74277 l 6.67178 1.82703 l 7.19063 1.96005 l 7.74274 2.18622 l 8.04428 2.52325 l 8.30592 3.04208 l 8.50548 3.47668 l 8.82477 3.87135 l 9.19284 3.99774 l 9.5454 3.92236 l 9.70503 3.8137 l 9.82256 3.8381 l 10.24161 4.13078 l 10.66069 4.46559 l 10.83585 4.80261 l 11.00435 5.21281 l 10.96223 5.35472 l 10.76933 5.35472 l 10.19063 4.96892 l 9.7139 4.64297 l 9.19284 4.60085 l 8.63185 4.51659 l 8.11302 4.23277 l 7.66736 3.93788 l 7.48332 3.65407 l 7.09085 3.56093 l 6.61192 3.27713 l 6.23497 2.90019 l 5.98444 2.56538 l 5.8403 2.27048 l 5.59862 1.9778 l 5.26381 1.83589 l 4.82701 1.79376 l 4.57646 1.57646 l 4.40794 1.53435 l 4.26604 1.31482 l 4.02213 1.2993 l 3.58755 0.9645 l 3.19287 0.76274 l 2.90019 1.12193 l 2.8492 1.5166 l 2.9157 1.80928 l 3.16847 2.08646 l 3.47003 2.35474 l 3.76271 2.47226 l 3.98001 2.46338 l 4.14851 2.388 l 4.29044 2.25496 l 4.51659 2.27934 l 4.66736 2.35474 l 4.75162 2.46338 l 4.71837 2.56538 l 4.77602 2.72281 l 4.91127 2.82481 l 5.59862 3.14188 l 5.99107 3.40129 l 6.22612 3.62082 l 6.35251 4.01328 l 6.62079 4.63411 l 6.8137 4.86026 l 7.29929 5.0443 l 7.72722 5.21281 l 8.10416 5.34586 l 8.20393 5.46336 l 8.42122 6.28598 l 8.81589 7.13077 l 9.21945 8.0199 l 9.67178 8.6474 l 9.37022 8.69838 l 8.97554 8.2128 l 8.88242 7.76048 l 8.59862 7.03986 l 8.22166 6.31038 l 7.71834 5.77377 l 7.04872 5.17955 l 6.28598 4.76935 l 6.03322 4.72723 l 6.77156 5.17068 l 7.13963 5.53876 l 7.54318 5.9423 l 7.71834 6.35251 l 6.78708 5.68289 l 6.20174 5.3392 l 5.5321 5.19507 l 4.84474 5.17955 l 4.50772 5.29707 l 5.03766 5.38799 l 5.81592 5.68289 l 6.33476 6.0177 l 6.67844 6.3015 l 5.99107 6.13521 l 5.27048 6.00882 l 4.45007 5.79817 l 3.4523 5.51437 l 2.89131 5.2882 l 3.39464 5.77377 l 4.07314 6.22612 l 4.57646 6.419 l 3.37689 6.31924 l 3.00885 6.23497 l 2.37247 6.15959 l 1.60973 6.21059 l 1.13081 6.31038 l 0.58757 6.48553 l 0.2838 6.65405 l 0.75386 6.60304 l 1.11526 6.5942 l 1.74277 6.64519 l 1.06429 6.8802 l 0.58757 7.06424 l 0.15077 7.23276 l 0.0 7.31702 l 0.56096 7.23276 l 1.03989 7.16403 l 1.87802 7.2904 l 1.48334 7.37466 l 1.10641 7.4678 l 0.82039 7.60083 l 0.51218 7.776 l 0.47005 7.81813 l 1.03989 7.7516 l 1.60086 7.89351 l 2.27048 8.14627 l 2.89131 8.32144 l 3.49443 8.37244 l 3.82924 8.34584 l 3.89796 8.3547 l 3.41016 8.572 l 3.0177 8.63185 l 2.46338 8.572 l 3.21727 8.79817 l 3.62082 8.8669 l 4.25717 8.87355 l 4.89352 8.78265 l 4.31703 8.95116 l 3.8381 9.17732 l 3.63632 9.35248 l 3.88022 9.27708 l 4.19064 9.2017 l 4.60973 9.18396 l 4.73389 9.24385 l 4.42569 9.47 l 4.25717 9.6873 l 4.2239 9.83807 l 4.55872 9.75381 l 5.29707 9.67842 l 6.11746 9.77155 l 7.16623 10.13962 l 7.86024 10.43452 l 8.58087 10.56755 l 9.21059 10.6252 l 9.94006 10.43452 l 10.42564 10.29039 l 10.85358 9.96445 l 11.10414 9.80481 l 11.69171 10.02211 l 12.39459 10.25713 l 13.18173 10.10635 l 14.46555 10.24828 l 15.5631 10.60968 l 16.43448 11.32144 l 16.94446 12.01765 l 17.01985 12.21944 l 17.1285 12.32808 l 16.78703 12.25934 l 16.98659 12.50323 l 16.61852 12.51212 l 16.47661 12.58751 l 16.78703 12.73828 l 16.99545 12.7804 l 17.11296 13.10635 l 17.18837 13.41676 l 17.35466 13.6008 l 17.49878 13.69392 l 17.2305 13.7427 l 17.16397 13.80257 l 17.27928 13.82697 l 17.41452 13.88683 l 17.5653 13.9866 l 17.64069 13.99548 l 17.62294 14.10411 l 17.36353 14.18839 l 17.0376 14.41454 l 16.98659 14.47218 l 17.28813 14.40567 l 17.64957 14.45667 l 18.09302 14.3968 l 18.42783 14.21278 l 18.71385 14.00435 l 19.0664 13.83583 l 19.14844 13.81808 l 19.1817 13.91121 l 19.12405 14.03761 l 18.83803 14.17064 l 18.93115 14.21278 l 19.03093 14.18839 l 19.16617 14.17952 l 19.24156 14.14626 l 19.17505 14.29703 l 19.0154 14.4478 l 18.90675 14.5232 l 19.1817 14.43892 l 19.40785 14.36356 l 19.55199 14.3059 l 19.33247 14.46555 l 19.13292 14.6917 l 19.0154 15.07529 l 19.02428 15.27707 l 19.14178 15.04204 l 19.39235 14.77374 l 19.80255 14.59857 l 19.8868 14.5897 l 19.76929 14.77374 l 19.76929 14.96664 l 19.85353 14.80699 l 20.11296 14.6407 l 20.32138 14.5653 l 20.50764 14.41454 l 20.73381 14.26376 l 20.6828 14.57419 l 20.64954 14.71608 l 20.74045 15.03317 l 20.77592 15.07529 l 20.8247 14.80035 l 20.9267 14.5897 l 21.01761 14.53204 l 21.15286 14.82474 l 21.28589 14.93338 l 21.2615 14.69836 l 21.29477 14.48993 l 21.42781 14.35468 l 21.61406 14.38794 l 22.24155 14.6651 l 24.25264 14.10411 l 24.36127 14.011 l 25.06636 13.54315 l 25.53423 13.81808 l 25.50096 13.07309 l 25.77812 12.83804 l 25.94664 12.67175 l 26.0464 12.5365 l 26.11293 12.3436 l 26.19717 12.21944 l 26.37236 12.37686 l 26.43222 12.48772 l 26.4056 12.67175 l 26.61626 12.79593 l 26.88454 12.9733 l 26.94218 13.00656 l 26.95107 12.74715 l 26.73376 12.12631 l 26.46548 11.858 l 26.27257 11.69836 l 26.21492 11.65625 l 26.52313 11.64073 l 26.79141 11.74937 l 27.11958 11.71611 l 27.20161 11.67397 l 26.87567 11.63185 l 26.73376 11.51434 l 26.88454 11.50548 l 27.10184 11.51434 l 27.00204 11.37242 l 26.71602 11.23051 l 26.35683 11.23051 l 26.17944 11.26378 l 26.29697 11.17067 l 26.44774 11.09526 l 26.5564 11.05313 l 26.22157 11.01988 l 25.96216 11.17952 l 25.85352 11.11966 l 25.88676 10.97775 l 25.93776 10.8181 l 26.01315 10.6252 l 26.02202 10.39238 l 25.82912 10.1995 l 25.55197 9.87134 l 25.43443 9.59637 l 25.10849 8.4567 l 24.98212 8.04428 l 25.0819 7.74274 l 25.03976 7.60971 l 24.53867 6.99774 l 24.12625 6.89795 l 23.71605 6.93121 l 23.34798 7.14851 l 23.13734 7.45006 l 23.25485 7.70947 l 23.3391 7.8514 l 23.29698 8.09529 l 23.28812 8.43896 l 23.33025 8.64073 l 23.14621 9.40347 l 23.07082 9.5454 l 22.92004 9.88907 l 22.86905 10.266 l 22.84467 10.60968 l 22.82913 10.72719 l 22.69388 10.69394 l 22.5941 10.4079 l 22.62737 10.13074 l 22.39232 9.64516 l 22.29256 9.2261 l 22.33467 8.725 l 22.23268 8.22166 l 22.1063 7.827 l 22.17503 7.64296 l 22.33467 7.30815 l B Q n Q Q 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 -64.229 -194.024 cm Q Q Q Q Q Q n Q Q Q
+
+endstream
+endobj
+192 0 obj
+<</Length 148204>>
+stream
+ q 1 0 0 1 72 720 cm q 1 0 0 1 0 39.306 cm q 0 G 0 g 0.3985 w q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 40.0499 m 23.54993 29.29991 l 20.54994 29.29991 l 20.54994 37.04991 l 3.04999 37.04991 l 3.04999 19.54993 l 10.79996 19.54993 l 10.79996 16.54994 l 0.04997 16.54994 l 0.04997 1.54999 l 5.04997 1.54999 l 5.04997 0.04997 l 7.04997 0.04997 l 7.04997 1.54999 l 12.04996 1.54999 l 12.04996 11.54996 l 5.04997 11.54996 l 5.04997 6.54996 l 7.04997 6.54996 l 7.04997 9.54997 l 10.04996 9.54997 l 10.04996 3.54997 l 2.04997 3.54997 l 2.04997 14.54994 l 25.54993 14.54994 l 25.54993 38.0499 l 36.5499 38.0499 l 36.5499 30.04991 l 30.5499 30.04991 l 30.5499 33.0499 l 33.54991 33.0499 l 33.54991 35.0499 l 28.54991 35.0499 l 28.54991 28.04993 l 38.5499 28.04993 l 38.5499 33.0499 l 40.0499 33.0499 l 40.0499 35.0499 l 38.5499 35.0499 l 38.5499 40.0499 l 23.54993 40.0499 l 5.04997 35.0499 m 18.54993 35.0499 l 18.54993 21.54994 l 5.04997 21.54994 l 5.04997 35.0499 l 20.54994 27.29991 m 23.54993 27.29991 l 23.54993 16.54994 l 12.79996 16.54994 l 12.79996 19.54993 l 20.54994 19.54993 l 20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -1.951 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 19.257 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 40.0499 m -23.54993 29.29991 l -20.54994 29.29991 l -20.54994 37.04991 l -3.04999 37.04991 l -3.04999 19.54993 l -10.79996 19.54993 l -10.79996 16.54994 l -0.04997 16.54994 l -0.04997 1.54999 l -5.04997 1.54999 l -5.04997 0.04997 l -7.04997 0.04997 l -7.04997 1.54999 l -12.04996 1.54999 l -12.04996 11.54996 l -5.04997 11.54996 l -5.04997 6.54996 l -7.04997 6.54996 l -7.04997 9.54997 l -10.04996 9.54997 l -10.04996 3.54997 l -2.04997 3.54997 l -2.04997 14.54994 l -25.54993 14.54994 l -25.54993 38.0499 l -36.5499 38.0499 l -36.5499 30.04991 l -30.5499 30.04991 l -30.5499 33.0499 l -33.54991 33.0499 l -33.54991 35.0499 l -28.54991 35.0499 l -28.54991 28.04993 l -38.5499 28.04993 l -38.5499 33.0499 l -40.0499 33.0499 l -40.0499 35.0499 l -38.5499 35.0499 l -38.5499 40.0499 l -23.54993 40.0499 l -5.04997 35.0499 m -18.54993 35.0499 l -18.54993 21.54994 l -5.04997 21.54994 l -5.04997 35.0499 l -20.54994 27.29991 m -23.54993 27.29991 l -23.54993 16.54994 l -12.79996 16.54994 l -12.79996 19.54993 l -20.54994 19.54993 l -20.54994 27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -57.356 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 -.05 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J 23.54993 -40.0499 m 23.54993 -29.29991 l 20.54994 -29.29991 l 20.54994 -37.04991 l 3.04999 -37.04991 l 3.04999 -19.54993 l 10.79996 -19.54993 l 10.79996 -16.54994 l 0.04997 -16.54994 l 0.04997 -1.54999 l 5.04997 -1.54999 l 5.04997 -0.04997 l 7.04997 -0.04997 l 7.04997 -1.54999 l 12.04996 -1.54999 l 12.04996 -11.54996 l 5.04997 -11.54996 l 5.04997 -6.54996 l 7.04997 -6.54996 l 7.04997 -9.54997 l 10.04996 -9.54997 l 10.04996 -3.54997 l 2.04997 -3.54997 l 2.04997 -14.54994 l 25.54993 -14.54994 l 25.54993 -38.0499 l 36.5499 -38.0499 l 36.5499 -30.04991 l 30.5499 -30.04991 l 30.5499 -33.0499 l 33.54991 -33.0499 l 33.54991 -35.0499 l 28.54991 -35.0499 l 28.54991 -28.04993 l 38.5499 -28.04993 l 38.5499 -33.0499 l 40.0499 -33.0499 l 40.0499 -35.0499 l 38.5499 -35.0499 l 38.5499 -40.0499 l 23.54993 -40.0499 l 5.04997 -35.0499 m 18.54993 -35.0499 l 18.54993 -21.54994 l 5.04997 -21.54994 l 5.04997 -35.0499 l 20.54994 -27.29991 m 23.54993 -27.29991 l 23.54993 -16.54994 l 12.79996 -16.54994 l 12.79996 -19.54993 l 20.54994 -19.54993 l 20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 485.362 -724.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 40.049 59.356 cm q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 0.3985 w q 2 J -23.54993 -40.0499 m -23.54993 -29.29991 l -20.54994 -29.29991 l -20.54994 -37.04991 l -3.04999 -37.04991 l -3.04999 -19.54993 l -10.79996 -19.54993 l -10.79996 -16.54994 l -0.04997 -16.54994 l -0.04997 -1.54999 l -5.04997 -1.54999 l -5.04997 -0.04997 l -7.04997 -0.04997 l -7.04997 -1.54999 l -12.04996 -1.54999 l -12.04996 -11.54996 l -5.04997 -11.54996 l -5.04997 -6.54996 l -7.04997 -6.54996 l -7.04997 -9.54997 l -10.04996 -9.54997 l -10.04996 -3.54997 l -2.04997 -3.54997 l -2.04997 -14.54994 l -25.54993 -14.54994 l -25.54993 -38.0499 l -36.5499 -38.0499 l -36.5499 -30.04991 l -30.5499 -30.04991 l -30.5499 -33.0499 l -33.54991 -33.0499 l -33.54991 -35.0499 l -28.54991 -35.0499 l -28.54991 -28.04993 l -38.5499 -28.04993 l -38.5499 -33.0499 l -40.0499 -33.0499 l -40.0499 -35.0499 l -38.5499 -35.0499 l -38.5499 -40.0499 l -23.54993 -40.0499 l -5.04997 -35.0499 m -18.54993 -35.0499 l -18.54993 -21.54994 l -5.04997 -21.54994 l -5.04997 -35.0499 l -20.54994 -27.29991 m -23.54993 -27.29991 l -23.54993 -16.54994 l -12.79996 -16.54994 l -12.79996 -19.54993 l -20.54994 -19.54993 l -20.54994 -27.29991 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 202.832 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 234.23 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.628 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 297.027 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.425 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.824 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.222 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.62 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 454.019 12.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -16.957 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 14.441 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 45.84 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 77.238 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 108.636 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 140.035 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 171.433 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 453.963 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 422.565 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 391.167 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 359.768 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 328.37 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 296.971 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 265.573 -738.671 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 16.957 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -14.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -107.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -169.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -200.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -262.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -324.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -355.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -417.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -479.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -510.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -572.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 -1 1 0 -90.662 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -14.043 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -45.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -76.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -107.044 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -138.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -169.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -200.045 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -231.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -262.046 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -293.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -324.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -355.047 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -386.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -417.048 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -448.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -479.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -510.049 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -541.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -572.05 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -603.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -634.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 0 1 -1 0 558.668 -665.051 cm 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg q 1 0 0 1 0 33.306 cm q 0 G 0 g 0.3985 w q 0.87843 0.93333 0.9098 RG 0.87843 0.93333 0.9098 rg 2 J 0.0 4.99997 m 1.49998 4.99997 l 1.49998 0.0 l 11.49995 0.0 l 11.49995 6.99997 l 6.49997 6.99997 l 6.49997 4.99997 l 9.49997 4.99997 l 9.49997 1.99998 l 3.49997 1.99998 l 3.49997 9.99995 l 14.49994 9.99995 l 14.49994 0.0 l 29.49992 0.0 l 29.49992 4.99997 l 30.99991 4.99997 l 30.99991 6.99997 l 29.49992 6.99997 l 29.49992 11.99995 l 19.49994 11.99995 l 19.49994 4.99997 l 24.49992 4.99997 l 24.49992 6.99997 l 21.49994 6.99997 l 21.49994 9.99995 l 27.49991 9.99995 l 27.49991 1.99998 l 16.49994 1.99998 l 16.49994 11.99995 l 1.49998 11.99995 l 1.49998 6.99997 l 0.0 6.99997 l 0.0 4.99997 l B Q n Q Q Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg Q q q -1 0 0 -1 0 0 cm q Q 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 215.848 -727.435 cm 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg q 1 0 0 1 0 21.229 cm q 0.3294 0.58824 0.53333 RG 0.3294 0.58824 0.53333 rg 0.3985 w q 2 J 18.15532 36.15567 m 16.79623 36.15567 15.43713 36.00264 14.10503 35.69461 c 14.78008 32.77141 l 15.71614 32.98741 16.67221 33.11343 17.63129 33.14743 c 17.57028 34.89656 l 17.08424 34.87956 16.5962 34.84056 16.11317 34.78156 c 16.17418 34.28552 l 16.4552 34.31952 16.73822 34.34653 17.02124 34.36653 c 17.07324 33.61847 l 16.4442 33.57446 15.81615 33.49146 15.19711 33.37144 c 14.81508 35.3346 l 17.02025 35.76364 19.28941 35.76364 21.49457 35.3346 c 21.11255 33.37144 l 20.4935 33.49146 19.86545 33.57446 19.2364 33.61847 c 19.28842 34.36653 l 19.57143 34.34653 19.85445 34.31952 20.13547 34.28552 c 20.19647 34.78156 l 19.71344 34.84056 19.2254 34.87956 18.73936 34.89656 c 18.67836 33.14743 l 19.63744 33.11343 20.59451 32.98741 21.52959 32.77141 c 22.20462 35.69461 l 20.87253 36.00264 19.51341 36.15567 18.15532 36.15567 c 12.89194 35.3696 m 10.27675 34.57054 7.87656 33.18443 5.87741 31.3203 c 7.92357 29.12613 l 8.62563 29.78119 9.39168 30.36823 10.20473 30.87627 c 9.27766 32.36137 l 8.86464 32.10336 8.46262 31.82634 8.07358 31.53333 c 8.3746 31.13428 l 8.60062 31.3043 8.83263 31.4693 9.06766 31.62831 c 9.48668 31.00629 l 8.96364 30.65324 8.4606 30.26723 7.98457 29.85419 c 6.67247 31.3633 l 8.3676 32.8374 10.33275 33.97148 12.45691 34.70255 c 13.10796 32.81142 l 12.5119 32.6064 11.92686 32.36337 11.35982 32.08736 c 11.0308 32.76141 l 11.28581 32.8854 11.54384 33.00343 11.80486 33.11443 c 11.60985 33.57446 l 11.16182 33.38445 10.72078 33.17444 10.29074 32.94542 c 11.1118 31.4003 l 11.95987 31.85034 12.85094 32.22035 13.769 32.5004 c 12.89194 35.3696 l 23.41771 35.3696 m 22.54065 32.5004 l 23.45871 32.22035 24.34978 31.85034 25.19785 31.4003 c 26.0189 32.94542 l 25.58887 33.17444 25.14784 33.38445 24.6998 33.57446 c 24.50479 33.11443 l 24.76581 33.00343 25.02383 32.8854 25.27884 32.76141 c 24.94983 32.08736 l 24.38278 32.36337 23.79774 32.6064 23.20169 32.81142 c 23.85275 34.70255 l 25.9769 33.97148 27.94205 32.8374 29.63718 31.3633 c 28.32507 29.85419 l 27.84904 30.26723 27.34601 30.65324 26.82297 31.00629 c 27.242 31.62831 l 27.47702 31.4693 27.70903 31.3043 27.93506 31.13428 c 28.23607 31.53333 l 27.84703 31.82634 27.445 32.10336 27.03198 32.36137 c 26.10391 30.87627 l 26.91797 30.36823 27.68402 29.78119 28.38608 29.12613 c 30.43224 31.3203 l 28.43208 33.18443 26.0319 34.57054 23.41771 35.3696 c 4.98936 30.43224 m 3.12521 28.43309 1.73912 26.03291 0.94005 23.41771 c 3.80927 22.54065 l 4.0893 23.45871 4.4593 24.34978 4.90935 25.19785 c 3.36424 26.0189 l 3.13522 25.58887 2.9252 25.14784 2.7352 24.6998 c 3.19522 24.50479 l 3.30623 24.76581 3.42424 25.02383 3.54823 25.27884 c 4.22229 24.94983 l 3.94627 24.38278 3.70326 23.79774 3.49825 23.20169 c 1.6071 23.85275 l 2.33817 25.9769 3.47224 27.94205 4.94635 29.63718 c 6.45546 28.32507 l 6.04243 27.84904 5.6564 27.34601 5.30338 26.82297 c 4.68134 27.242 l 4.84035 27.47702 5.00536 27.70903 5.17537 27.93506 c 4.77634 28.23607 l 4.4833 27.84703 4.20628 27.445 3.94829 27.03198 c 5.4334 26.10492 l 5.94142 26.91797 6.52847 27.68402 7.18352 28.38608 c 4.98936 30.43224 l 31.3203 30.43224 m 29.12613 28.38608 l 29.78119 27.68402 30.36823 26.91797 30.87627 26.10492 c 32.36137 27.03198 l 32.10336 27.445 31.82634 27.84703 31.53333 28.23607 c 31.13428 27.93506 l 31.3043 27.70903 31.4693 27.47702 31.62831 27.242 c 31.00629 26.82297 l 30.65324 27.34601 30.26723 27.84904 29.85419 28.32507 c 31.3633 29.63718 l 32.8374 27.94205 33.97148 25.9769 34.70255 23.85275 c 32.81142 23.20169 l 32.6064 23.79774 32.36337 24.38278 32.08736 24.94983 c 32.76141 25.27884 l 32.8854 25.02383 33.00343 24.76581 33.11443 24.50479 c 33.57446 24.6998 l 33.38445 25.14784 33.17444 25.58887 32.94542 26.0189 c 31.4003 25.19785 l 31.85034 24.34978 32.22035 23.45871 32.5004 22.54065 c 35.3696 23.41771 l 34.57054 26.03291 33.18443 28.43309 31.3203 30.43224 c 0.61504 22.20462 m 0.0 19.54044 0.0 16.76923 0.61504 14.10503 c 3.53825 14.78008 l 3.32224 15.71515 3.19623 16.67221 3.16322 17.63129 c 1.41309 17.57028 l 1.43008 17.08424 1.4691 16.5962 1.52809 16.11317 c 2.02414 16.17418 l 1.99013 16.4552 1.96313 16.73822 1.94313 17.02124 c 2.69118 17.07324 l 2.7352 16.4442 2.81819 15.81615 2.9382 15.19711 c 0.97507 14.81508 l 0.54602 17.02025 0.54602 19.28941 0.97507 21.49457 c 2.9382 21.11255 l 2.81819 20.4935 2.7352 19.86545 2.69118 19.2364 c 1.94313 19.28842 l 1.96313 19.57143 1.99013 19.85445 2.02414 20.13547 c 1.52809 20.19647 l 1.4691 19.71344 1.43008 19.2254 1.41309 18.73936 c 3.16322 18.67836 l 3.19623 19.63744 3.32224 20.5935 3.53825 21.52959 c 0.61504 22.20462 l 35.69461 22.20462 m 32.77141 21.52959 l 32.98741 20.5935 33.11343 19.63744 33.14743 18.67836 c 34.89656 18.73936 l 34.87956 19.2254 34.84056 19.71344 34.78156 20.19647 c 34.28552 20.13547 l 34.31952 19.85445 34.34653 19.57143 34.36653 19.28842 c 33.61847 19.2364 l 33.57446 19.86545 33.49146 20.4935 33.37144 21.11255 c 35.3346 21.49457 l 35.76364 19.28941 35.76364 17.02025 35.3346 14.81508 c 33.37144 15.19711 l 33.49146 15.81615 33.57446 16.4442 33.61847 17.07324 c 34.36653 17.02124 l 34.34653 16.73822 34.31952 16.4552 34.28552 16.17418 c 34.78156 16.11317 l 34.84056 16.5962 34.87956 17.08424 34.89656 17.57028 c 33.14743 17.63129 l 33.11343 16.67221 32.98741 15.71515 32.77141 14.78008 c 35.69461 14.10503 l 36.30968 16.76923 36.30968 19.54044 35.69461 22.20462 c 3.80927 13.769 m 0.94005 12.89194 l 1.73912 10.27774 3.12521 7.87756 4.98936 5.87741 c 7.18352 7.92357 l 6.52847 8.62563 5.94142 9.39168 5.4334 10.20573 c 3.94829 9.27766 l 4.20628 8.86464 4.4833 8.46262 4.77634 8.07358 c 5.17537 8.3746 l 5.00536 8.60062 4.84035 8.83263 4.68134 9.06766 c 5.30338 9.48668 l 5.6564 8.96364 6.04243 8.4606 6.45546 7.98457 c 4.94635 6.67247 l 3.47224 8.3676 2.33817 10.33275 1.6071 12.45691 c 3.49825 13.10796 l 3.70326 12.5119 3.94627 11.92686 4.22229 11.35982 c 3.54823 11.0308 l 3.42424 11.28581 3.30623 11.54384 3.19522 11.80486 c 2.7352 11.60985 l 2.9252 11.16182 3.13522 10.72078 3.36424 10.29074 c 4.90935 11.1118 l 4.4593 11.95987 4.0893 12.85094 3.80927 13.769 c 32.5004 13.769 m 32.22035 12.85094 31.85034 11.95987 31.4003 11.1118 c 32.94542 10.29074 l 33.17444 10.72078 33.38445 11.16182 33.57446 11.60985 c 33.11443 11.80486 l 33.00343 11.54384 32.8854 11.28581 32.76141 11.0308 c 32.08736 11.35982 l 32.36337 11.92686 32.6064 12.5119 32.81142 13.10796 c 34.70255 12.45691 l 33.97148 10.33275 32.8374 8.3676 31.3633 6.67247 c 29.85419 7.98457 l 30.26723 8.4606 30.65324 8.96364 31.00629 9.48668 c 31.62831 9.06766 l 31.4693 8.83263 31.3043 8.60062 31.13428 8.3746 c 31.53333 8.07358 l 31.82634 8.46262 32.10336 8.86464 32.36137 9.27766 c 30.87627 10.20573 l 30.36823 9.39168 29.78119 8.62563 29.12613 7.92357 c 31.3203 5.87741 l 33.18443 7.87756 34.57054 10.27774 35.3696 12.89194 c 32.5004 13.769 l 7.92357 7.18352 m 5.87741 4.98936 l 7.87656 3.12521 10.27675 1.73912 12.89194 0.94005 c 13.769 3.80927 l 12.85094 4.0893 11.95987 4.4593 11.1118 4.90935 c 10.29074 3.36424 l 10.72078 3.13522 11.16182 2.9252 11.60985 2.7352 c 11.80486 3.19522 l 11.54384 3.30623 11.28581 3.42424 11.0308 3.54823 c 11.35982 4.22229 l 11.92686 3.94627 12.5119 3.70326 13.10796 3.49825 c 12.45691 1.6071 l 10.33275 2.33817 8.3676 3.47224 6.67247 4.94635 c 7.98457 6.45546 l 8.4606 6.04243 8.96364 5.6564 9.48668 5.30338 c 9.06766 4.68134 l 8.83263 4.84035 8.60062 5.00536 8.3746 5.17537 c 8.07358 4.77634 l 8.46262 4.4833 8.86464 4.20628 9.27766 3.94829 c 10.20473 5.4334 l 9.39168 5.94142 8.62563 6.52847 7.92357 7.18352 c 28.38608 7.18352 m 27.68402 6.52847 26.91797 5.94142 26.10391 5.4334 c 27.03198 3.94829 l 27.445 4.20628 27.84703 4.4833 28.23607 4.77634 c 27.93506 5.17537 l 27.70903 5.00536 27.47702 4.84035 27.242 4.68134 c 26.82297 5.30338 l 27.34601 5.6564 27.84904 6.04243 28.32507 6.45546 c 29.63718 4.94635 l 27.94205 3.47224 25.9769 2.33817 23.85275 1.6071 c 23.20169 3.49825 l 23.79774 3.70326 24.38278 3.94627 24.94983 4.22229 c 25.27884 3.54823 l 25.02383 3.42424 24.76581 3.30623 24.50479 3.19522 c 24.6998 2.7352 l 25.14784 2.9252 25.58887 3.13522 26.0189 3.36424 c 25.19785 4.90935 l 24.34978 4.4593 23.45871 4.0893 22.54065 3.80927 c 23.41771 0.94005 l 26.0319 1.73912 28.43208 3.12521 30.43224 4.98936 c 28.38608 7.18352 l 14.78008 3.53825 m 14.10503 0.61504 l 16.76923 0.0 19.54044 0.0 22.20462 0.61504 c 21.52959 3.53825 l 20.59451 3.32224 19.63744 3.19623 18.67836 3.16222 c 18.73936 1.41309 l 19.2254 1.43008 19.71344 1.4691 20.19647 1.52809 c 20.13547 2.02414 l 19.85445 1.99013 19.57143 1.96313 19.28842 1.94313 c 19.2364 2.69118 l 19.86545 2.7352 20.4935 2.81819 21.11255 2.9382 c 21.49457 0.97507 l 19.28941 0.54602 17.02025 0.54602 14.81508 0.97507 c 15.19711 2.9382 l 15.81615 2.81819 16.4442 2.7352 17.07324 2.69118 c 17.02124 1.94313 l 16.73822 1.96313 16.4552 1.99013 16.17418 2.02414 c 16.11317 1.52809 l 16.5962 1.4691 17.08424 1.43008 17.57028 1.41309 c 17.63129 3.16222 l 16.67221 3.19623 15.71614 3.32224 14.78008 3.53825 c B Q n Q Q Q 1 G 1 g 0.329 0.588 0.533 RG 0.329 0.588 0.533 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg 0 G 0 g Q q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q Q q q -1 0 0 -1 0 0 cm q Q 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 228.423 -731.083 cm 0 G 0 g BT /F1 12 Tf 0 39.306 Td[<00120013>]TJ ET Q 1 G 1 g 0.878 0.933 0.91 RG 0.878 0.933 0.91 rg q 1 0 0 1 0 39.306 cm Q Q Q Q 0 G 0 g Q Q n Q Q 0 G 0 g BT /F4 15 Tf 26.25 2.955 Td[<06b80a63>]TJ /F10 15 Tf 33.75 0 Td[<0024>]TJ /F4 15 Tf 24.99 0 Td[<0d2a0a94069c1109>]TJ /F10 15 Tf 63.75 0 Td[<00230046>-5<0042004e00460053>]TJ /F4 15 Tf 52.125 0 Td[<11f60e35>]TJ /F10 15 Tf 33.75 0 Td[<00290046>-5<00420057>4<0046004f004d005a>-249<0024004d0050005600450054>-250<00230046>-5<0042004e00460053>-250<082c0046004e0046>]TJ /F8 15 Tf -85.432 -23.4 Td[<00230032001c004b003200600069003f0032004b0032003e0032001c00700032004d00480076002a00480051006d002f00620058006200690076>]TJ /F2 10.5 Tf -128.183 -26.741 Td[<118306f1>]TJ /F1 10.5 Tf 23.472 0 Td[<002300460042004e00460053>]TJ /F2 10.5 Tf 35.033 0 Td[<11f60e350d5e0ee110420551046811cf0b0310c80b03051b099f05a50111>87<0b3705f30a7b05760062>87<0ac41042103a05a5041c08df05a5110904910ed510220111>87<0eca11c20061>87<05760f6c0061>]TJ -79.505 -16.38 Td[<0d270c3005fb0d5e0ddb080f05a501110dee105b0cc207540b3d0cb8103a0d94043108a0061f0111044910720d48110e0dd809560b3f07f6043108a007bd0d48085701110c6812310f9b118612200d5010a8054e11f60e350062>]TJ ET q 1 0 0 1 0 -411.293 cm q 0 G 0 g 0.3985 w q 0.45882 0.54118 0.6 rg /pgf@ca1.0 gs 0.0 4.25198 m 0.0 328.21297 l 0.0 330.56131 1.90364 332.46497 4.25198 332.46497 c 463.75406 332.46497 l 466.1024 332.46497 468.00604 330.56131 468.00604 328.21297 c 468.00604 4.25198 l 468.00604 1.90364 466.1024 0.0 463.75406 0.0 c 4.25198 0.0 l 1.90364 0.0 0.0 1.90364 0.0 4.25198 c h f Q q 0.96472 0.96472 0.97412 rg /pgf@ca1.0 gs 1.41731 4.25198 m 1.41731 313.26886 l 466.58871 313.26886 l 466.58871 4.25198 l 466.58871 2.68643 465.31961 1.41731 463.75406 1.41731 c 4.25198 1.41731 l 2.68643 1.41731 1.41731 2.68643 1.41731 4.25198 c h f Q q [ 2.83466 2.83466 ] 1.41731 d 0.45882 0.54118 0.6 RG 0.45882 0.54118 0.6 rg /pgf@CA1.0 gs 234.00302 313.26886 m 234.00302 1.41731 l S Q q 0 0.2 0.44315 rg /pgf@ca1.0 gs 1.41731 314.68619 m 1.41731 328.21297 l 1.41731 329.77853 2.68643 331.04764 4.25198 331.04764 c 463.75406 331.04764 l 465.31961 331.04764 466.58871 329.77853 466.58871 328.21297 c 466.58871 314.68619 l h f Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -411.293 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 319.225 cm 1 1 1 RG 1 1 1 rg BT /F6 12 Tf 0 -411.293 Td[<0d5010a8065309e8>]TJ ET 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -411.293 cm Q Q Q Q Q q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 0 -411.293 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 15.591 154.718 cm 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -271.076 Td[<0024002f0051002b006d004b0032004d0069002b0048001c00620062>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 66.15 -271.076 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 70.875 -271.076 Td[<002b00690032007400230032001c004b00320060>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 118.125 -271.076 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -285.116 Td[<0024006d006200320069003f0032004b0032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 42.525 -285.116 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 47.25 -285.116 Td[<003e0032001c00700032004d00480076002a00480051006d002f0062>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 113.4 -285.116 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -313.196 Td[<0024001c006d0069003f00510060>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 33.075 -313.196 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 37.8 -313.196 Td[<0a1f09f411a5>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 64.8 -313.196 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -327.236 Td[<002400690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -327.236 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 33.075 -327.236 Td[<0d2a0a94069c1109>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 69.075 -327.236 Td[<00240024>]TJ ET 0 G 0 g BT /F5 9 Tf 78.525 -327.236 Td[<00220032001c004b00320060>]TJ /F9 9 Tf 33.075 0 Td[<11f60e35>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 129.6 -327.236 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -341.276 Td[<00240062006d002300690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 42.525 -341.276 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 47.25 -341.276 Td[<0024006900320074006900690069>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 80.325 -341.276 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 85.05 -341.276 Td[<0054003b003700510060004d001c004b0032004d00690040003f001c004d>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 155.925 -341.276 Td[<0027>]TJ ET 0 G 0 g BT /F9 9 Tf 160.65 -341.276 Td[<06b80a63069e09e6>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 196.65 -341.276 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -369.356 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -369.356 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -369.356 Td[<002f0051002b006d004b0032004d0069>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 70.875 -369.356 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -397.436 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -397.436 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -397.436 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -397.436 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 61.425 -397.436 Td[<0028004d005100370060001c004b0032004d006d004b0023003200600042004d003b0029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -411.476 Td[<0024004b001c0046003200690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -425.516 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -425.516 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -425.516 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -425.516 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -453.596 Td[<002400620032002b006900420051004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 37.8 -453.596 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 42.525 -453.596 Td[<086508ba1042>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 69.525 -453.596 Td[<0027>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -481.676 Td[<002400230032003b0042004d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 28.35 -481.676 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 33.075 -481.676 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 56.7 -481.676 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 61.425 -481.676 Td[<002800370060001c003b004200480032002d001c004800480051007200370060001c004b0032002300600032001c004600620029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 9.45 -495.716 Td[<002400370060001c004b003200690042006900480032>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 61.425 -495.716 Td[<0026>]TJ ET 0 G 0 g BT /F9 9 Tf 66.15 -495.716 Td[<054e11f60e350b3705f30a7b0576>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 129.15 -495.716 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 9.45 -509.756 Td[<005800580058>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -523.796 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -523.796 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -523.796 Td[<00370060001c004b0032>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 47.25 -523.796 Td[<0027>]TJ ET 0 G 0 g BT /F5 9 Tf 0 -537.836 Td[<005800580058>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 9 Tf 0 -551.876 Td[<00240032004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 18.9 -551.876 Td[<0026>]TJ ET 0 G 0 g BT /F5 9 Tf 23.625 -551.876 Td[<002f0051002b006d004b0032004d0069>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F5 9 Tf 61.425 -551.876 Td[<0027>]TJ ET 0 G 0 g q 1 0 0 1 232.583 -365.667 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -365.667 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -365.667 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -365.667 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -365.667 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -365.667 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 169.45 -291.406 cm q 1 0 0 1 232.583 -399.975 cm /Fm8 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -365.667 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 337.536 -365.667 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -365.667 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -365.667 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -365.667 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -365.667 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -365.667 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 245.915 -291.406 cm q 1 0 0 1 337.536 -399.975 cm /Fm9 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -365.667 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 232.583 -445.999 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -445.999 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -445.999 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -445.999 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -445.999 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -445.999 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 169.45 -349.933 cm q 1 0 0 1 232.583 -480.308 cm /Fm10 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -445.999 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 337.536 -445.999 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -445.999 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -445.999 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -445.999 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -445.999 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -445.999 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 245.915 -349.933 cm q 1 0 0 1 337.536 -480.308 cm /Fm11 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -445.999 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 232.583 -526.332 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -526.332 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -526.332 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -526.332 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -526.332 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 232.583 -526.332 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 169.45 -408.46 cm q 1 0 0 1 232.583 -560.64 cm /Fm12 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 232.583 -526.332 cm Q Q Q Q Q Q Q n Q Q q 1 0 0 1 337.536 -526.332 cm q 0 G 0 g 0.3985 w q q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -526.332 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -526.332 cm Q Q Q Q Q q 0.0 w q 0.0 w Q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -526.332 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 49.642 37.332 cm 0 G 0 g Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -526.332 cm Q Q Q Q Q Q q 0.25 g /pgf@ca1.0 gs 0.0 0.0 m 0.0 74.66434 l 99.28477 74.66434 l 99.28477 0.0 l h f Q q 1 g /pgf@ca1.0 gs 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h f Q q 0.3985 0.3985 m 0.3985 74.26584 l 98.88628 74.26584 l 98.88628 0.3985 l h W n q /pgf@ca1.0 gs q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 337.536 -526.332 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 .399 34.707 cm q .27144 0 0 .27144 245.915 -408.46 cm q 1 0 0 1 337.536 -560.64 cm /Fm13 Do Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 337.536 -526.332 cm Q Q Q Q Q Q Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 0 -411.293 cm Q Q Q Q Q n Q Q BT /F2 10.5 Tf 21 -430.121 Td[<10420f7411ff10690d590f5b011f>]TJ ET BT /F1 10.5 Tf 16.24 -452.311 Td[<06e6>]TJ ET BT /F1 10.5 Tf 24.907 -452.311 Td[<002e00420044>]TJ /F2 10.5 Tf 20.727 0 Td[<0807>]TJ /F1 10.5 Tf 13.125 0 Td[<002d004a004f00560059>]TJ /F2 10.5 Tf 27.426 0 Td[<0f220e640d080111>]TJ /F7 10.5 Tf 42 0 Td[<002b006900320074>]TJ /F2 10.5 Tf 24.674 0 Td[<0d5e04820e34070209ee0d80>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 215.859 -452.311 Td[<0024004800420062003f006d>]TJ ET 0 G 0 g BT /F2 10.5 Tf 248.934 -452.311 Td[<05a501110c681231082d0d2105e7006209e8011f>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 24.907 -472.136 Td[<002400540060005100700042002f0032002b0051004b004b001c004d002f>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 107.594 -472.136 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 113.107 -472.136 Td[<0024004800420062003f006d>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 146.182 -472.136 Td[<00270026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 157.207 -472.136 Td[<0024002a0043004500370051004d0069006200540032002b>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 223.357 -472.136 Td[<0026>]TJ ET 0 G 0 g BT /F7 10.5 Tf 228.869 -472.136 Td[<0047004200230042001c004d>-525<0061002a>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 278.481 -472.136 Td[<0027>]TJ ET 0 G 0 g BT /F7 10.5 Tf 283.994 -472.136 Td[<0028002200510048002f00360051004d006900340022001c005100480042>-525<0061002a002d0061002b001c00480032003400520058006b0029>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 443.856 -472.136 Td[<0027>]TJ ET 0 G 0 g BT /F1 10.5 Tf 16.24 -495.406 Td[<06e6>]TJ ET BT /F2 10.5 Tf 24.907 -495.406 Td[<0956105b10a8>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 59.032 -495.406 Td[<002400620042004b005400480032005400600051003b0060003200620062004b001c0060004600320060>]TJ ET 0 G 0 g BT /F2 10.5 Tf 177.419 -495.406 Td[<105b0865058610f505c4057d0e3908c906070e480d0805a50d2a0a940062>]TJ ET BT /F1 10.5 Tf 16.24 -518.676 Td[<06e6>]TJ ET BT /F2 10.5 Tf 24.907 -518.676 Td[<0453>-5<0e35>-5<103a>-5<05a5>-5<0d70>-6<1233>-5<0ed50111>-5<0956>-5<105b>-6<10a8>-5<06f2>-5<1231>-5<06da>-6<0f6e>-5<05a5>-5<0453>-5<11bd>-6<057d>-5<0e390062>-5<11cf>-5<0753>-6<06da>-5<0f6e>-5<0f6e>-5<07ea>-6<0793>-5<061f>-5<05fb>-5<0d5e>-6<10f5>-5<0f99>-5<05a50062>-5<0c92>-6<040c>-5<1042>-5<0f2f>-5<041c>-6<08df>-5<0d5e>]TJ 0 -16.38 Td[<0e690afc0ce405a5>]TJ /F1 10.5 Tf 44.625 0 Td[<0051004f0048>]TJ /F2 10.5 Tf 19.015 0 Td[<0807>]TJ /F1 10.5 Tf 13.125 0 Td[<0051>-7<00450047>]TJ /F2 10.5 Tf 16.716 0 Td[<059608fc0956105b0a140062>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 24.907 -554.881 Td[<002400690042006900480032003b0060001c0054003f0042002b>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 96.569 -554.881 Td[<0026>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 102.082 -554.881 Td[<00240042004d002b0048006d002f0032003b0060001c0054003f0042002b0062>]TJ ET 0 G 0 g 0.49 0.56 0.16 RG 0.49 0.56 0.16 rg BT /F7 10.5 Tf 190.282 -554.881 Td[<002800720042002f0069003f0034006b002b004b0029>]TJ ET 0 G 0 g 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 250.919 -554.881 Td[<0026>]TJ ET 0 G 0 g BT /F7 10.5 Tf 256.431 -554.881 Td[<00480051003b0051>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F7 10.5 Tf 278.481 -554.881 Td[<00270027>]TJ ET 0 G 0 g BT /F1 10.5 Tf 16.24 -578.151 Td[<06e6>]TJ ET BT /F2 10.5 Tf 24.907 -578.151 Td[<10390956105b111d059d0ffd0c75084610420913>]TJ ET 0 0.5 0 RG 0 0.5 0 rg BT /F8 10.5 Tf 132.532 -578.151 Td[<0024001c0048006900690042006900480032002b00420060002b00480032>]TJ ET 0 G 0 g BT /F2 10.5 Tf 215.219 -578.151 Td[<011107f605a4059e0a36104211d504530e35103a05a5120d0d650ed5102200620f7207540cc20f2f011f>]TJ ET q 1 0 0 1 60.892 -620.603 cm q 0 G 0 g 0.3985 w q q q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.00002 .99998 -.99998 -.00002 -531.351 -689.144 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.50078 .86554 -.86554 -.50078 -417.393 -976.529 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86554 .50078 -.50078 -.86554 -176.403 -1167.525 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -1 0 0 -1 129.423 -1212.86 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.86565 -.50063 .50063 -.86565 416.737 -1098.965 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.50093 -.86546 .86546 -.50093 607.778 -857.992 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q -.0002 -.99998 .99998 -.0002 653.15 -552.193 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .5005 -.8657 .8657 .5005 539.291 -264.833 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .86537 -.50105 .50105 .86537 298.358 -73.764 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .99998 -.00034 .00034 .99998 -7.435 -28.336 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .86577 .5004 -.5004 .86577 -294.825 -142.156 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .50119 .86531 -.86531 .50119 -485.922 -383.05 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q .00049 .99998 -.99998 .00049 -531.386 -688.842 cm 0 G 0 g q 1 0 0 1 60.88 -612.953 cm q 0 G 0 g 0.3985 w q 0.59608 0 0.14745 RG 0.59608 0 0.14745 rg 1.07298 -15.28807 m 0.45659 -14.0647 1.06308 -12.99567 2.12224 -12.52371 c 2.83508 -12.17693 3.00824 -12.49452 2.15143 -13.06293 c 1.304 -13.7758 1.75665 -14.98927 1.07298 -15.28807 c 1.31587 -12.39806 m 0.98146 -12.39261 0.69453 -12.14774 0.44719 -11.66986 c 1.45242 -11.94147 1.97629 -11.42351 2.24739 -11.06584 c 2.54965 -10.6785 2.89891 -11.01637 2.64314 -11.48584 c 2.13312 -12.10323 1.69432 -12.404 1.31587 -12.39806 c 1.66513 -10.51178 m 1.30598 -10.51476 0.97305 -10.33171 0.78061 -9.88452 c 1.97977 -9.38042 2.13115 -8.86594 1.54343 -7.55548 c 0.01234 -4.77826 1.01114 -3.0854 2.55855 -2.95628 c 2.16972 -2.7599 1.75864 -2.33742 1.7997 -1.7997 c 2.33742 -1.75864 2.7599 -2.16972 2.95628 -2.55855 c 3.0854 -1.01114 4.77826 -0.01234 7.55548 -1.54343 c 8.86594 -2.13115 9.38042 -1.97977 9.88452 -0.78061 c 11.2474 -1.36684 10.1556 -3.26152 8.83675 -3.21007 c 8.9807 -4.55316 8.76303 -4.33551 8.18275 -3.96251 c 7.5253 -3.3001 7.42142 -4.58235 6.69867 -3.95755 c 6.40086 -3.29417 6.78574 -2.1722 5.70235 -1.97679 c 4.70801 -1.92831 4.04611 -2.65552 4.25586 -2.96371 c 4.40822 -3.25954 4.7184 -3.29219 4.89648 -3.06808 c 5.52278 -2.64018 6.04172 -3.95706 5.0439 -4.59572 c 5.54256 -4.79211 5.7335 -5.17847 5.49953 -5.49953 c 5.17847 -5.7335 4.79211 -5.54256 4.59572 -5.0439 c 3.95706 -6.04172 2.64018 -5.52278 3.06808 -4.89648 c 3.29219 -4.7184 3.25954 -4.40822 2.96371 -4.25586 c 2.65552 -4.04611 1.92831 -4.70801 1.97679 -5.70235 c 2.1722 -6.78574 3.29417 -6.40086 3.95755 -6.69867 c 4.58235 -7.42142 3.3001 -7.5253 3.96251 -8.18275 c 4.33551 -8.76303 4.55316 -8.9807 3.21007 -8.83675 c 3.2447 -9.72275 2.40076 -10.50633 1.66513 -10.51178 c 11.16776 -2.73169 m 10.8927 -2.72725 10.77545 -2.47397 11.06584 -2.24739 c 11.42351 -1.97629 11.94147 -1.45242 11.66986 -0.44719 c 12.68944 -0.97504 12.64738 -1.68343 11.48584 -2.64314 c 11.36859 -2.70697 11.25928 -2.73318 11.16776 -2.73169 c 12.47177 -2.72774 m 12.34267 -2.72725 12.33969 -2.50067 12.52371 -2.12224 c 12.99567 -1.06308 14.0647 -0.45659 15.28807 -1.07298 c 14.98927 -1.75665 13.7758 -1.304 13.06293 -2.15143 c 12.79678 -2.55312 12.58505 -2.72823 12.47177 -2.72774 c B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q Q Q q q q -1 0 0 -1 0 0 cm q Q q 1 0 0 1 60.892 -620.603 cm -1 0 0 -1 0 0 cm q Q 0 J [] 0 d 1 G 1 g 0 G 0 g q 1 0 0 1 -17.717 0 cm 0 G 0 g q 1 0 0 1 60.848 -638.365 cm q 0 G 0 g 0.3985 w q 0.7451 0 0.18431 RG 0.7451 0 0.18431 rg 2 J 17.76149 35.47868 m 7.97627 35.47868 0.04428 27.54669 0.04428 17.76149 c 0.04428 7.97627 7.97627 0.04428 17.76149 0.04428 c 27.54669 0.04428 35.47868 7.97627 35.47868 17.76149 c 35.47868 27.54669 27.54669 35.47868 17.76149 35.47868 c 18.82452 33.3172 m 24.98125 32.89731 30.31412 28.8808 32.41893 23.07841 c 26.97443 23.07664 l 26.97443 20.95058 l 33.02309 20.95058 l 33.46248 18.84755 33.46248 16.67542 33.02309 14.57239 c 26.97443 14.57239 l 26.97443 12.44632 l 32.41893 12.44632 l 30.31412 6.64394 24.98302 2.62744 18.82452 2.20576 c 18.82452 8.1942 l 23.84735 8.1942 l 22.87466 7.5741 21.80988 7.10635 20.69545 6.8087 c 21.24646 4.75528 l 24.41783 5.60394 27.16931 7.58472 28.98357 10.32025 c 6.53941 10.32025 l 8.35365 7.58472 11.10513 5.60394 14.2765 4.75528 c 14.82751 6.8087 l 13.7131 7.10635 12.6483 7.57585 11.67563 8.1942 c 16.69846 8.1942 l 16.69846 2.20576 l 10.53995 2.62567 5.20885 6.64217 3.10403 12.44456 c 8.54854 12.44632 l 8.54854 14.57239 l 2.49988 14.57239 l 2.0605 16.67542 2.0605 18.84755 2.49988 20.95058 c 8.54854 20.95058 l 8.54854 23.07664 l 3.10403 23.07664 l 5.20706 28.87904 10.53995 32.89552 16.69846 33.31541 c 16.69846 27.32877 l 11.67563 27.32877 l 12.6483 27.94711 13.7131 28.41661 14.82573 28.71426 c 14.2765 30.76768 l 11.10513 29.91725 8.35365 27.93825 6.53941 25.20271 c 28.98357 25.20271 l 27.16931 27.93825 24.41783 29.91904 21.24646 30.76768 c 20.69545 28.71426 l 21.80988 28.41661 22.87291 27.94711 23.84557 27.32877 c 18.82452 27.32877 l 18.82452 33.3172 l 10.6746 23.07664 m 10.6746 20.95058 l 24.84837 20.95058 l 24.84837 23.07664 l 10.6746 23.07664 l 4.47359 18.82452 m 4.47359 16.69846 l 31.0494 16.69846 l 31.0494 18.82452 l 4.47359 18.82452 l 10.6746 14.57239 m 10.6746 12.44632 l 24.84837 12.44632 l 24.84837 14.57239 l 10.6746 14.57239 l B Q n Q Q Q 1 G 1 g 0 G 0 g q 1 0 0 1 60.892 -620.603 cm Q Q Q Q Q Q n Q Q BT /F6 10.5 Tf 99.505 -656.59 Td[<0f72075410b509560b3f10b505c4097e01110c680d6a04c60786118612200d5010a80062>]TJ ET Q
+
+endstream
+endobj
+264 0 obj
+<</Length 648>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /ZMFVPC+LinLibertineO-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+10 beginbfchar
+<0009> <0028>
+<000C> <002B>
+<001E> <003D>
+<002D> <004C>
+<002E> <004D>
+<0035> <0054>
+<0039> <0058>
+<003B> <005A>
+<004A> <0069>
+<0059> <0078>
+endbfchar
+5 beginbfrange
+<000F> <001A> <002E>
+<0022> <0026> <0041>
+<0042> <0048> <0061>
+<004C> <0051> <006B>
+<0053> <0056> <0072>
+endbfrange
+1 beginbfchar
+<06E6> <2022>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+265 0 obj
+<</Length 650>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /ISTZRL+LMMono12-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+22 beginbfchar
+<001C> <0061>
+<0023> <0062>
+<002B> <0063>
+<002C> <003A>
+<0032> <0065>
+<0037> <0066>
+<003B> <0067>
+<003F> <0068>
+<0040> <002D>
+<0042> <0069>
+<0048> <006C>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0054> <0070>
+<0058> <002E>
+<0060> <0072>
+<0062> <0073>
+<0066> <002F>
+<0069> <0074>
+<006D> <0075>
+<0078> <007A>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+266 0 obj
+<</Length 1139>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /FLOTYG+LMMono9-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+57 beginbfchar
+<001C> <0061>
+<0020> <002A>
+<0022> <0042>
+<0023> <0062>
+<0024> <005C>
+<0026> <007B>
+<0027> <007D>
+<0028> <005B>
+<0029> <005D>
+<002A> <0043>
+<002B> <0063>
+<002C> <003A>
+<002D> <002C>
+<002F> <0064>
+<0030> <0024>
+<0032> <0065>
+<0033> <0038>
+<0034> <003D>
+<0037> <0066>
+<0038> <0035>
+<0039> <0034>
+<003A> <0047>
+<003B> <0067>
+<003E> <0048>
+<003F> <0068>
+<0040> <002D>
+<0042> <0069>
+<0046> <006B>
+<0048> <006C>
+<004A> <004D>
+<004B> <006D>
+<004D> <006E>
+<004E> <0039>
+<0051> <006F>
+<0052> <0031>
+<0054> <0070>
+<0055> <0028>
+<0056> <0029>
+<0058> <002E>
+<005F> <0052>
+<0060> <0072>
+<0062> <0073>
+<0063> <003B>
+<0064> <0037>
+<0065> <0036>
+<0066> <002F>
+<0069> <0074>
+<006A> <0033>
+<006B> <0032>
+<006D> <0075>
+<0070> <0076>
+<0072> <0077>
+<0073> <0058>
+<0074> <0078>
+<0076> <0079>
+<0078> <007A>
+<0079> <0030>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+267 0 obj
+<</Length 902>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /UQVGRY+LMMono10-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+40 beginbfchar
+<001C> <0061>
+<0022> <0042>
+<0023> <0062>
+<0026> <007B>
+<0027> <007D>
+<0028> <005B>
+<0029> <005D>
+<002A> <0043>
+<002B> <0063>
+<002C> <003A>
+<002D> <002C>
+<002F> <0064>
+<0032> <0065>
+<0034> <003D>
+<0036> <0046>
+<0037> <0066>
+<0038> <0035>
+<003B> <0067>
+<003F> <0068>
+<0042> <0069>
+<0046> <006B>
+<0047> <004C>
+<0048> <006C>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0052> <0031>
+<0054> <0070>
+<0058> <002E>
+<0060> <0072>
+<0061> <0053>
+<0062> <0073>
+<0066> <002F>
+<0069> <0074>
+<006B> <0032>
+<006D> <0075>
+<0070> <0076>
+<0072> <0077>
+<0074> <0078>
+<0076> <0079>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+268 0 obj
+<</Length 775>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /DLGCHB+LMMonoLt10-Bold-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+31 beginbfchar
+<001C> <0061>
+<0023> <0062>
+<0024> <005C>
+<002A> <0043>
+<002B> <0063>
+<002F> <0064>
+<0032> <0065>
+<0037> <0066>
+<003B> <0067>
+<003E> <0048>
+<003F> <0068>
+<0042> <0069>
+<0043> <004A>
+<0045> <004B>
+<0046> <006B>
+<0048> <006C>
+<004B> <006D>
+<004D> <006E>
+<0051> <006F>
+<0054> <0070>
+<0058> <002E>
+<0060> <0072>
+<0062> <0073>
+<0069> <0074>
+<006D> <0075>
+<0070> <0076>
+<0072> <0077>
+<0073> <0058>
+<0074> <0078>
+<0076> <0079>
+<0078> <007A>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+269 0 obj
+<</Length 681>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /DLKYYU+LinLibertineOZ-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+15 beginbfchar
+<000F> <002E>
+<0029> <0048>
+<0035> <0054>
+<0039> <0058>
+<003B> <005A>
+<0042> <0061>
+<0045> <0064>
+<0046> <0065>
+<0049> <0068>
+<004A> <0069>
+<0053> <0072>
+<0054> <0073>
+<0056> <0075>
+<0057> <0076>
+<005A> <0079>
+endbfchar
+3 beginbfrange
+<0012> <0016> <0031>
+<0022> <0024> <0041>
+<004C> <0050> <006B>
+endbfrange
+1 beginbfchar
+<082C> <00540068>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+270 0 obj
+<</Length 901>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /YLJAWD+LMMono10-Italic-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+40 beginbfchar
+<001B> <0041>
+<001C> <0061>
+<0022> <0042>
+<0023> <0062>
+<0024> <005C>
+<0028> <005B>
+<0029> <005D>
+<002B> <0063>
+<002D> <002C>
+<002F> <0064>
+<0032> <0065>
+<0034> <003D>
+<0037> <0066>
+<0038> <0035>
+<0039> <0034>
+<003B> <0067>
+<003F> <0068>
+<0042> <0069>
+<0046> <006B>
+<0048> <006C>
+<004B> <006D>
+<004D> <006E>
+<004E> <0039>
+<0051> <006F>
+<0052> <0031>
+<0054> <0070>
+<0055> <0028>
+<0056> <0029>
+<0057> <0025>
+<0058> <002E>
+<0060> <0072>
+<0062> <0073>
+<0064> <0037>
+<0069> <0074>
+<006B> <0032>
+<0072> <0077>
+<0074> <0078>
+<0076> <0079>
+<0078> <007A>
+<0079> <0030>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+271 0 obj
+<</Length 361>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /BQACRY+LinBiolinumOB-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+1 beginbfrange
+<0011> <001A> <0030>
+endbfrange
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+272 0 obj
+<</Length 2586>>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CMapName /NMPYOS+NotoSerifCJKtc-Regular-UTF16 def
+/CMapType 2 def
+/CIDSystemInfo <<
+ /Registry (Adobe)
+ /Ordering (UCS)
+ /Supplement 0
+>> def
+1 begincodespacerange
+<0000> <FFFF>
+endcodespacerange
+100 beginbfchar
+<251F> <4E01>
+<252C> <4E0B>
+<255A> <4E2D>
+<256B> <4E39>
+<2587> <4E4B>
+<2667> <4EE5>
+<2707> <4F55>
+<2775> <4F9B>
+<2AA3> <5169>
+<2DF0> <5375>
+<2E75> <53CB>
+<2ED0> <540D>
+<2FE3> <54C1>
+<367A> <58A8>
+<3755> <5927>
+<3805> <5983>
+<38ED> <59DC>
+<3B97> <5AE3>
+<3BA7> <5AE9>
+<3CBC> <5B57>
+<3DE6> <5BE9>
+<3E05> <5BF6>
+<44FE> <5F64>
+<4937> <61B2>
+<4B71> <6307>
+<4CC0> <63D0>
+<5001> <6587>
+<50FD> <660F>
+<5131> <662F>
+<5293> <6708>
+<52D1> <672A>
+<52DA> <6731>
+<5304> <674F>
+<5345> <677E>
+<538F> <67AF>
+<53C3> <67CF>
+<53FE> <67F3>
+<542F> <6817>
+<5477> <6843>
+<5570> <68D7>
+<557D> <68E0>
+<55D9> <690D>
+<5615> <6936>
+<5703> <69B4>
+<583F> <6A58>
+<5841> <6A59>
+<5884> <6A80>
+<5954> <6AE8>
+<597E> <6AFB>
+<5A5E> <6B63>
+<5A60> <6B64>
+<5ADE> <6BB7>
+<5AE9> <6BBC>
+<5BCA> <6C34>
+<5C4C> <6C89>
+<5C93> <6CB9>
+<5D0E> <6D0B>
+<5DAF> <6D77>
+<5E5D> <6DE1>
+<5F2F> <6E56>
+<6072> <6F06>
+<632A> <706B>
+<6331> <7070>
+<636A> <708E>
+<63E0> <70CF>
+<6508> <7164>
+<6714> <7259>
+<672E> <7269>
+<6914> <7384>
+<691D> <7389>
+<6969> <73C0>
+<6A06> <7425>
+<6A87> <7469>
+<6C2E> <7531>
+<6EAE> <767D>
+<712A> <77F3>
+<7242> <78A7>
+<747E> <79CB>
+<7526> <7A2E>
+<752D> <7A31>
+<76DB> <7AEF>
+<76EF> <7AF9>
+<7A3C> <7C89>
+<7AA3> <7CBE>
+<7B37> <7D05>
+<7B77> <7D20>
+<7B8D> <7D2B>
+<7BAC> <7D3A>
+<7C29> <7D73>
+<7C8E> <7DA0>
+<7CB2> <7DB0>
+<7CB7> <7DB2>
+<7CE7> <7DC7>
+<7CF1> <7DCB>
+<7D08> <7DD7>
+<7DAA> <7E1E>
+<7DEB> <7E39>
+<7DFF> <7E41>
+<8041> <7FA4>
+<80CA> <7FE0>
+endbfchar
+58 beginbfchar
+<811B> <8001>
+<825B> <809A>
+<82FD> <80ED>
+<832E> <8102>
+<865D> <8272>
+<8672> <827E>
+<86DF> <82B1>
+<87B3> <831C>
+<87ED> <8336>
+<8818> <8349>
+<8861> <8377>
+<886C> <837C>
+<8B2B> <84BC>
+<8B9B> <84EE>
+<8C07> <851A>
+<8C25> <8525>
+<8D1E> <8591>
+<8DB0> <85CD>
+<8DB5> <85CF>
+<8DC1> <85D5>
+<91D6> <87F9>
+<9417> <8910>
+<9A80> <8C46>
+<9AAF> <8C61>
+<9C31> <8D64>
+<9C3A> <8D6B>
+<9C3D> <8D6D>
+<A3FC> <9161>
+<A49F> <91AC>
+<A4ED> <91D1>
+<A5B9> <925B>
+<A5F0> <9280>
+<A5F8> <9285>
+<AB1E> <95D5>
+<ACE4> <96EA>
+<AD66> <971C>
+<ADF2> <9752>
+<AE05> <975B>
+<AFBA> <984F>
+<B226> <9999>
+<B291> <99DD>
+<B451> <9AD4>
+<B583> <9B5A>
+<B810> <9D09>
+<B843> <9D28>
+<B89A> <9D5D>
+<BB1A> <9EC3>
+<BB1B> <9EC4>
+<BB30> <9ECE>
+<BB36> <9ED1>
+<BB50> <9EDD>
+<BB65> <9EE7>
+<BB75> <9EEF>
+<F16C> <7FE1>
+<F314> <9EDB>
+<F34E> <3001>
+<F34F> <3002>
+<F351> <FF0C>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+
+endstream
+endobj
+274 0 obj
+<</Subtype/CIDFontType0C/Length 9555>>
+stream
+
+Open Font under Terms of following Free Software Licenses:
+GPL (General Public License) with font-exception and OFL (Open Font License).
+Created with FontForge (http://fontforge.sf.net)
+Sept 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,2012Linux Libertine O
+  $ × ùšiPE˜šŸ¡A¶ š'|V Õ ¤"U"v,‹½ø龋½ø$½½øï÷>û’û>û’©^÷>÷’÷>û’û ÷¿÷>÷’‹üû\÷¿û>÷‘÷è‹ü8ýøˆùNüˆû½·Þ·÷‹^û{÷dûH•“’Ž“j±û ÷‹÷›‹÷›÷
+÷«¯ÿÿü™šÿ
+LÌÿÿùÌÌÿ
+‹ûZ‹ÿÿ•ffÿ
+æfÿÿüæfÿ
+šÿÿþÌΖÿ
+LÌÿ
+ÌÎÿ
+eŽ‰‹‰‰‹Š‡^W€[•‡—Š—‹ŸÛ¹¥Í‹¼°•eNü‹8z†;ˆ……‹v‘…¼Œÿ
+÷,ÿ
+™špÿ
+LÍ—‘‹–ÿÿöÌÍÿ
+€
+LÌÿÿýæfÿ
+LÌÿÿýæfÿ
+LÌÿÿýæfÿ
+33ÿÿûÌÍÿ
+LÌÿÿýæfÿ
+³4u¢€·…¤…‘xŠ……û«Â÷í²äÚ¶øA}‡ƒ~†ŒŠÆûÁDªo¹¹‹½¡²·‰ÿ
+LÍ…ÿ
+–ÿ ‘
+¯ Ú Ú’
+endstream
+endobj
+276 0 obj
+<</Length 221>>
+stream
+€Iÿâ>P?¯Þ@
+endstream
+endobj
+278 0 obj
+<</Subtype/CIDFontType0C/Length 170128>>
+stream
+
+
+
+
+
+
+6
+:
+A
+c
+s
+x
+{
+’
+”
+¿
+
+
+?×@ËA©EFHIL'MFO PÃRâSÝU\WFYg\—^ž_ý`ºa*cPddêfh)jålrlÒm…n§p•rGsÆu8v}x yÅ{Ä}]~nƒ~„Ì…Öˆ(ŠQŒƒŽ’p“Õ–
+˜šyœQž½ 2¢g¤a¥A§¨ì«Á®i¯ù²^³Àµ·9º@»Ê½ ¿À%Â;ÃŽÅÆúÇ‚ÈôÊ°Í ÎZÐ Ñ¡ÔÖz×rÙÎÜÇÞ`á©äå‹ç>èõê#ëCìzîæðOò`ó¾öøøîúíûêþÞ,A
+o ¡Ôõy2€1çÈUôý!E"F#3#ý$û&›((Û)Ö+Ž,˜-»/3/â1€2Ä4 6À7F9:Ý;¤<w> ?2@àAnBÑDEEãG§I¡KÁMÍPlQR_TÃVOX3Y¼[à]¨`¨aþd,eÃg³j l n0p‚q˜tAuÏx’z^|ñƒ‚
+¤”›‘’’‘‘ˆ¬Å®»©±¦±¥³³´ÁµÁª·ž­û­…û¨”œ‘‘‘‘…ã÷Ä—’rŽ€’w—o˜p™qšt›s›w™|›|y¡y¡w~š‚”˜••–”–“Ÿ¨Š˜v|ŽƒƒŽ|‘v–v–qœk£m¢p¦v«v©~ †”†”‡–‡—÷‘œ“ŒŒ‰†JÔUMûN÷#÷ a¨¢”œ˜ƒç÷;¤”‘Ž‰Ž†J¾f^û³E¯’ûû4„û©“•Ž‘ŒŽŒŽŽ°÷û#û7¯[¢“˜¢ŽŽ¡™Œ‘÷iFhShagarp~}€x|twtyy|©ø£ž‘’ŽŽŒŒŒˆ„h ¹ì–™«¢À¨™ŒŽ‡‚÷ûÉ÷…÷Æû…øD9ûÐ5Ž®Z ’¡‘£¡›”ù“›“ŒŒˆ…’HÒIKûã÷¢÷К“ŒŒˆ„“LÎMOû`÷V÷㎌ŽŒŽ‡‘‚”LÎOKü‚;Ž³Z™«¨’¤÷DûVû[FŽ·\˜°©’¡÷ûžø:‰œ‰Šž{‰yˆu‰{‡€‰€„}|‚€‚‚sw„„‡„‰„„„‘…‘„—‡ŒœŒš‘————“˜Ž™Žš™Œ™Œ™‹–’ù)€oƒx††‚……•…À½¶¦¬§ŽŽŽŒŽˆ…8ÐVSûÛ£ —œŒ˜Œ˜…˜——{•y”w“u”r”…ƒ¦ržo•k’nŒ†ƒŽ€÷üjŸxš{”€”€•|•w•y’{ƒˆ’†“‰“”“•’š‘š˜”‰•‡•ƒ–ƒ–v™h›ir—z“³ød¸Fµž§˜Ø¥÷°k‡RžŽš””””’…Û÷P¡›’ŽŽŒŒŒ†Ž7­._ûsJ±_—¤¦‘ª÷;/B~-zV‚X…[ˆù5:k\üA»‘ûû¨…û §•’‘“‘‘†ïÐø#‰„ˆ†‡‡ƒˆ€Š€xŒŽqqzŽ„Œˆ¼x§|”ƒ”ƒŒƒŒ„‹ƒŠ‚®–¢”–“–““•‘—–Ž˜™÷ý¥£ŽŒ‡‚‘ünûðø&üûïø'ûù>2û_t{•‚•‚œ„¤ˆˆ£¾‰Ù®Š¤‹šŒšŒ™——•‘”‘““–˜™ž|–€“„’…’‡•‰˜ˆ—Š–Š–Š•‹•”…h„\ˆ|‡†…†……‡ƒŠ…Šm‰W‰vŠz‹|Œ]Žz€Ž……Ž‡ˆ‰Š’–Ç£‘÷?·˜ŽŸ‘¦”§…‘Š‹ŒŒŠˆ‘]Ûz{~€„‚„|ƒww€Us4fõ¦’ŽŽŒŒ†Ž¬´”ƒ —¬¤¹±º²²®¬«¬«¬³®¼­¼­Â®Èûûû1>Žµ\˜¨¬’±çû…û¥’šŒ”’™–„ç÷$÷hŒŒˆ‘‚”QÇQS+øœ˜h˜m–s–qšokk¢h¨d¨e¥n¢v¢v«r´m—ž—–—‘˜ ª˜o’n–m™n™pšs›rœl¨eµf¶n°w­w«w¯x²÷Þœ”ŒŒ‡ƒ“IÎPNû™÷&¤š•‘‡Ž‚Ž-¯‘û/ûÍ0Ž°[›’ž‘ ŽŽ ›–÷Zƒp†}v|p|pxkshuglcf^f^fegjfjxz‰‰‰‰‡†„„÷;ùZ’ûü´‚Š‚ˆ€‰€ˆ‚†„‡ƒ‚‚|‚ÀAš›Ÿœ¥¤³¢À¥Á§©š‘Ž‘“–’…˜nXvz„Vz3nø÷zœ“ŒŽŒ‰†‘J×NGû÷}¦’ŽŒŽŽ‡Žƒ÷œZýr‘x—€˜€„¤‡£‰¯‰¼Š«Š¬Œ­Ž¬¦Ÿ’ž“ž ­x˜•‡•‡“ˆšŠŸ†»Š˜‹—Š––‹•Œ“{‡k†[‡f‡q‰q„z‚‚‚~†zˆ‰zkŠ\kŠsŒy{„“„”ˆ˜÷³ðØ–’Ä»ò䮑ŒŒŒŒ‡‘‚”DÌ{i„~{trlqksousvtjk^b÷ò«¢‘ŽŽŽŠŽ‡„Ž*±¥û‘´ ¯žª©»¬Ì»û†%®™•’ŽŽŽŽŽºøF¦Ž¢•žžƒÙ÷
+û8†û¤”Ÿ•™”¬÷0‰tŠy†uƒrƒr€o}ny™†k°PÐ~€ fp™z˜zv trknmjqjoWkEd÷1ø-÷÷6W‚Šsˆeû2÷&÷÷6ûÀû&Ë‘‹ŸŒ¬÷5ûû5÷&÷÷5û÷wø»€l‚r{ktdudwkzrzrsila•‚¨¤¨¨ª­©«¢¦› ›Ÿ¡¨§²¨•“ŽŽŒŒ‡Ž„÷6ülBXEgFxGxGzH||÷ ˜çŸÍ¤Î¤Å¦½¦¼n¿sÄwÄwÐyÜ|•§Žœ¦—½“—NŠPO’Q’[–i˜g™n˜t—ÒÏÈ̾ʨ—•ŽŒŒŒ†‚’KÀ]^ûó.¸b•žŸž¡žY™j”z“z—zšxšxœxžx¯§`ªl¨y¦y§€ž†•‡•†˜†š÷ºeMlastsuwyz|üJøη`¡•‘•¤Ž²÷>û]…û¦£“ •†è÷Z÷*ûS„û
+Jûkûlûyûˆ}÷‡õ’ïžðžà¥Ò®Ò®Á¦°ž²ŽŒŒˆ†ûÒ÷¸vq„‚qw_k`k`patbuWsMr~ö¦Ý¨Å«ÆªÀªº©®”’ŽŒŒŒ„‘}–Ã:gdbj_o]oTpIpIqPwV|{÷ ¤è¥Í¥Í§Ô¯Ü¸©ŒŒŽŒŒŒˆ…½÷s|À¤±Ÿ¥™£™­ ´¦ûâj’t—|™}¡„„£Üˆ÷!÷-Œ»±‘§§“œ•‘š‘š•Œ|–€—†—…—ˆœŠ¢‰¡Š¤Š¨~†I‰o‰uˆ{ˆz†€„ƒ„…~…w…y‡GŠûûYlŽw’‚–‚–†¤²÷®ø…R‡`‡lˆw‡w†~„„…„‚ˆŠ‚U“›&‰z¶‚©‚‚ž‚–€Ž€ŽŽŒ¯–¤”š•™“–˜’š“›’©‘·‘·Ž¥‘“œŽ¨°s³t¶t›Ÿ–™¥“µ—ed”b˜c˜^¤Y®Y®V¼TÈ¡ŒŠŠŽˆ„Ž0³mZh^cbcb^cYfYfPaH^÷˜÷ÉÂÎÈÔЮZ§ižuŸw¬k¹`ûþû÷º¹\¢•’˜¢Ž«÷"`‡_ ˜”žˆ³«÷jj‰R¢ŽŸ‘œ”‡´ª÷ŽŒŽˆ†KÌ\Qû!ŒÏŸ˜’ŽŽŽ†Ž€D©CPûjÍ¡›“‘ŠŒˆ…Ž=¨ŽEPûP·÷€¯d™’ŽŒ–ŽžŽŠoŠoˆn‡o‡m…ppƒpzlrh—®°šœ™¢˜ª˜ª“¥‘£¡ žžœšÒ‰GŠg…fff{iwkwmnjei’~«¢¨ž§§¦±§¯ž¬”¦•¦’¨Ž«Ž©Ž¬Œ¬Œ¬ŒµŠ¼¼‹½Œ½÷ÿW|Žb’H‘I\ooru}pwopnW¼iZ^÷Âh£’œ’–“†Àמ˜Ž‹Œ‹‰Ž %\¬sjYì÷‘ŒŽŒŒŠŽ†R¾gaûM¬‘6ûãfuË\¨®÷dcetuXg<X~÷¾Õ¸­°­°£§™œžg˜s›vœ{œy£x©vªt¢€™›’”ŒŽ‹ŠŽŠŽˆ’„–ƒ–‡ž‰¤‰§‹¤¢Ž¢Ž ŽŸy€O†r†xˆ}ˆ~†‚†‰…‡{“qžqžy £€£„œˆ•£¹Ÿ´›°›¯•¤˜˜š‘œ •–ŒŒ‡Ž„?µƒ]ƒenƒm‚s„x„x‚vt†©ˆ™ˆ¯†Å†Å‰²ŠžŠŸ‹£¨÷ŽŒŒŒŒ‰‡MÍ^Tû«¡Ÿ•’ŒŒ†Ž@¬hjjûõDµ‘0Œ‚ŒqŒ^9öžš“’ŽŠ‹†Ž‚J¦5FkoÁ`§®Ø‹‹ŒH‹‹‹†‹yn %û!÷½ûx÷Êûï÷”+û7ë¢ìÊ*üø­c”¢¦©÷AX†K§“Ÿ’˜‘†Ã±÷0e†K¢ ‘ž’…Àª÷㎌ŒŒŒˆ†FÎWSûl¾¤’ŽŽ†ŽŽ>¤NXû0»§ ŽŽŠŽˆ…Ž;¦EaûSøË^¢v‘„“}—u•u”‘Š’‰’’‘’’Ž”–‰–ˆ•„“…’“|“|“y“t“¨ç±b¡”š”ŒŒ”š‹¡÷Ëûƒûª’¦” ”„ï÷ø6ŒŽŒŒ‰ŽˆDÕQLû¹õ÷U`£¢“¡–„í÷7£¤—•Œ…”Tµj]üDD¹ûû=ƒû–—Ž——•Ž”Ž»÷R!ûçøè÷üS÷øSüS¡õøS!ý.÷¾°`–¡¤‘§÷Hd†@©’¢’œ“…À²÷Ib†Fª‘¢“›”…½°÷½ŒŽŒŒ‰„’DÐZLûGʧŽŽŽŒŒ…Ž~9ª@UûIÊ¥›Šˆ…Ž5®;\û^ø¡ø– ’ŒŒŒ‰Ž‡ŽBÄ{r|svqonoohjaf`ffmmvku^mOf~تѰɶʶÝÎñçžn¢o¨n¨nºnÍmÌmÇuÀ~”›–˜—”—•™’›“‡Œ|ŒrŒr^’L˜L—VŸ`§`¨r”ƒ”—~šüj÷¯b•£§¬÷0l‡/ª˜ ”–’Š¹»÷x_ˆO§Œ¡”››‰©»÷¡’ŽŒŒŒŒ‰Ž†DÎWSû+Ô¡š‘ŽŽŒŒˆ„Ž6¨ŽFMûx×¢—“ŽŠŽŠŽˆ„Ž4¨‘=SûvŠ÷†üË®‘’ŒŒŽŒŽ‰Ž†AÅ‚x€urhb[b\VXIU“²¢®¢«£¬¡Â¹ÙÐ÷÷ û“Q­a–¦§‘¦÷YûŠ„ˆˆˆˆ}ŠrŒrŒon‘‰~µ|¥€•”ƒ‘‚ŒƒŒƒŒƒƒ¦“ ”™—š•”•“”•–÷˜÷ ”ŒŒŒ‰Ž†KÊZVû8í¢›’Žˆ†-¨’(÷"ûˆ«u¥xš€‡‡˜¡w¡x›|“•’€‘‚‘‚“}–y•y“‘Š’Š“””“”—™™‰š…™…›{špšpšhŸ_¢`£fžm˜÷0ø¿€„m‡x„z‚{‚{‚ƒƒ„ƒ‚~‚„‚ˆƒˆ‚Žƒ“‚ƒ’–‡›™š’˜™™˜”œŸŽžŽ ¢ùCxovktg–‡¹²¨ —˜˜˜Ž¨Ž˜Œ“ŽŽ…“~˜GÊ][ûs·¸¹º»»ª’ŒŒŒŽŽ†€’C»€n|lyjyjrdk]I÷a§ ŽŒŒŒ†Ž3¬’ûû)ûʉ©Š‹’Š˜ù`ûÚWPý@+²_“š•ŒŒ—šŒ ÷xykzq{u{wvrsoqoyyƒƒx„r†²GÁ›¤“¸“Γ÷–÷0Ÿ–Œ›Œ¢Ž¤c¢XŽ‡ŽˆŽŠ‰’’‘’’”‘˜‘˜Ž•Œ“Œ“‡—ƒ›ƒ›p¢\ª\©_¥b¡‚­m£uš}™}™z™v!„û†û„ŠyoŠfÎÆÉÃÅÀ¨’“ŒŒŽŽˆŽ†Žb¨ø‹’ŒŽŒŽ‡”ûz÷}_Qü)¹_—¨¨‘¨øY–‘ŒŽŒ‡‚“üÁ÷ù®`œx˜s”l—[Œ†Ž‡ŠŠŽŠŽŠ”‘˜™˜—šŠš›‡™ƒ—…–{˜u—s™pšlž÷,øPAŒ‚‹iQQŠZˆcˆd…i‚n‚o~p|p{psmli“~¾µ¯¯Ÿ©ž¨™§’¦“¥¡ŽŸŽ¡Ž£÷ûR{‰ˆƒ‡„‚‚|€»L³¬Žœ–©œª³Ÿ½¡‰–û=a÷sâ«\©d¨m¨m©sªw«yªz©|©}ž‚“ˆ”‡£‚´}’œ•——•—“£‘°ŒŒ™aŽej‘ih•h™hšeœd ÷Ó¬ŠŽŽŒŽŒˆ„’V¶÷b”ŒŽ‰…’CÎXPý÷’Œ¤Œ¶ùE–ŠŒŽŒŽˆ…EÉZTüÍø2ûød¤s€—€•v¢l¬÷Š}x€xkiWZ÷ùZiaücE²û#‡û¨’Ÿ“–’•øxz›’¤œ™•‡Ýó£ ‘ŽŽŒŒ‡„‘üÇûväøx2üx÷æøx0ü‹ûÀ´^Ÿ”‘–¦Ž·ø^ŽŒŽŠŽ‡FÉbWü
+§øš¬q˜˜|–w—w’{Ž€Ž€Žƒ††‰ŠŠŽ‘‘‘“”˜•“‰“†•€˜€˜z–q—s•r•r“›û÷‡€¹yš…•ƒ’€‘€Ž~Œzy‰z‡{ˆ{…w„s‡}‰„„Ž…††‘…“…¡z™ˆ’–’•œ‰¤‰£Š©°°Œ§ŒŸŽŸ¡ Ê­ó«òÄ•˜º}sJm?h1g3tU‚y‚z‚ƒˆ†‰‚‹€|yŒÑøŃƒžzœy™z›z”yŽzyŽ€Ž†Ž‡ˆŠ’ˆ“’’“‘‘“•–Œ—ˆ˜ˆ—}˜sšqšl›fœ÷áû”=Œ€ŠkŠVŠV‰cŠpŠqˆq‡s†qƒs€s€r}vzw{yuxnxnybwTt}Àš´™ª˜ª˜¨¦¢¦¢ £™¦˜¦•¨’¬’«°ŽµŽµ°Œ¬Œ¬¨Œ¤÷=üJdŒ~€”„”„§‡ºŠÓŠ¶›™—“’•–š–—“‰ŠŒŠŒŠŒ‰Œ†Œ†Œ†…’„“ˆ‰§¨Š¦¤~„WŠ‚ˆz†q‡q…z‚„‚„|‡tŠfŠnŠzŽˆ‘ˆ‘‰”˜ø)§ŸŽŽŠŽ‰ŽˆŽIÂi]û"û
+”•ªœ¿÷6ŽŒŽŒ‡‘€•OÅ\TûR7±`– £¥º~A~Q~`~a~d~h~h~mt€s|nxj÷ž.û÷Ì÷÷)û "ûKosÃ^°°÷ÚA‰•™›“ŒŒŽŽŽŽ‡õ÷`¢œ’ŽŒŒ†Ž‚9°,ûiûø+÷[‘Œ”™—‘–‘’’ˆÝ÷E¡œ‘ŽŽŠŠ‰†9«*ûJû÷Σš’ŽŽŽ…‘>±û
+§—’ŽŽŒŒ…~’B³‡nˆvˆ€ˆ€‡z…t„u‡}Šƒ‰…‡~†z*1´b•ž¡¦Ò ÷Ì´b”¦¨ª÷ ûGû),¶a¢’œ–Œ–—Œš÷Éû5û®û»_–¦¨¬ù?ŒŽŒŒŽˆ…@Ë]Sû‰÷5ø—‘ŒŽŒ‰ŽˆŽFÄ`\.÷G÷sŒŒŽ‰ˆŽDÈaZû÷G÷<ŽŒŒŒŽ‰Ž†EÈeXû–÷!î™Ô”¹®„”‰‘‹Œˆ‘ƒ•WÎv|X}5x5yDR„R„A„.‚Œ|­¾ŽÏÎÌ‘È’ûûÀ.Ž°b•§¤ àûGû)÷`û^÷G÷"ûG÷^û"÷G÷"Ãü÷G÷%ûGøûGû%÷G¼^º@­œ©š£–¥–¶È£È£Û«î´‰˜û1c÷ó÷1’ŒŒŒ‡ƒ“LÊ`SV÷ƒª¢“‹‹‹‡Ž %,´‘ûüÔû løo¢Ÿ˜—€1·’û5ü/b‚f‚j‚øªù±ûý+€€~–„„³†ÉŠœŠ¥Œ®¯¤œœ˜““–”•”™’žx™–…”„”‡—‰š‰šŠœŠŠ‹£Š©|ûŠ|ˆ}‡~†~„ƒ‚‚r†bBŠb‘‚•‚—‡™œ÷ÆÖÅ©¢Ä¼àן˜’ŒŽŒŽˆ†EËnZk^hbgbebcb÷ñ¬Ÿ’ŽŽ‹Ž‹ˆŽŽ %÷Òøþj:DûGpN{f††…„‚„‚‚‡ƒŠŠscŽˆ|·€Š’†–ƒ–ƒ“ƒ„‘„Ž{Œƒ‹‚ƒŠ‰{‡t‡tˆzŠ€Š…Š„‚‚—€•€—…—Œ˜Œ“Ž‘”—˜Š—Š–‚†©ˆ¦£¤ŸŽœŽ›’©–·—·›¾žÄžÄ È¡Ìû‹½šx¯Z•z“x’vš]~‘…“Š‘‘“““•”Œ–™†››‚c¨Dµø8ûWŒ[lŠbˆXˆX„\€a€a{evjvilkambmkvu€un}g{“}ԦЪ˱˯·¸¢¿¢¿š¹’´‘³‘ºÂ–]Ž~“p˜d˜d–j•p•q™nŸkk¥j«kªi¤t}¤ž –œŽœŒ ™e•k—q˜q™u›x›xw¡u§u¦z¤¡~¡|­wºyº©†™†˜†„¢‘ªž—ŽŽŽŒŽŒ†Ž€Žûè º¡¾¤Á§˜•ŽŒŒ…€8µ†oˆ~„r€e€e|^yVzWv[r`r`tcvf—‚¹Ä©°³Ð¾î÷ÙFû•„Á¼«¦”•‘–‘˜‘­—Œ‘Œ‡‘“8Îj_÷;»‚|Xˆ‚„~~}‚ƒ„‡lv††ˆ…Š†Š„ƒ’…’ƒ•ˆ™Œ™™“™™™›”šš›ŽžŒ Œ–‹”‘‘‹”Š˜ûøù±d¡’šŽ“’˜Œ÷Ih†Z@³j‚qwƒy{nudvdyn|u}wwpqk–„IJ´¢©¡§£­¥°÷mLŠˆ…~v€ŒpŽb€ …¢†£‡mbqluvuuuxu|u{mxfu’󾜓¥­§­¦ª¬§°²¯€¬~of„suchch]pVxVx\zb~ç¡“¥“¶šŽ/:zŒ€„Œ…ƒ””€©†¾Š¡Š¹ŒÐŽÑ·Ÿš–‘•“’‘”‘”‘•‘–s¡„†’‡–†–‰˜›ÈC‡r‡y†‡€…‚„„„„l‡TˆˆUoŠŠD†c––†—–÷—‘ŽŽ‹ŠŒˆ†ŽM¦Ø°¾§¤Ÿ¥¨©«³²y¤~ž˜˜–†”Œ”Œ“›Š™Š–ˆ’ˆ‘„’€”€“}‘z{{z¨Ë••¦š¸÷ …AŠˆs†d†e‡m‡uˆv„|ƒƒtˆjivŒ„„Œ}vˆ€¼|¦‚œ‚‘ƒ’„ƒƒ‘s¸š¨—–“—•–˜•œ•œ”·“Гё¾Ž¬¬¦ŽŽŒ‡‚‘R±f`ü[Ÿ©­˜¦‘ž’—’ˆµ«÷Rc‡P’—Žš›•ŽŒ‡´³÷·—‘ŒŒ‰ŽˆŽCÐXRûJ½£šŽŽŽ‡ŽƒŽ<¦CgûRº ™’ŽŽ…Ž€@¦‘>lûk÷šû·ž®¯ž°÷p=Š†ƒz|mc”e’f‘Ÿûu±e†“€”x•x‘~Žƒ”m„Ž†Ž‰‰‹‘Ž‘‘‘‘’Ž“—‹—…™‡—{›r›rošl˜÷íQ²d¢q“~“~“}‘z“{|~}‚‡Ž‡‰Š‘Š’”•””‘•Ž•’¤…¡xŸxvœtšt™o›jžøaºûí&µ`•¨©ª÷Î6‡*¤¢”ž–ˆÈëøJ”ŒŒˆ„’EÎVPûÕ³¡˜ŽŠ†Ž‚Ž_—¼±¸°´°©{ —ƒ—ƒ˜š~š~–€’‚£jš|—””®Ž—Œ•Š’Š“…”~–~–UŸ*¨”•–•—”žŒŒŒˆƒ]«÷›”ŒŽŒŽ‰Ž†FÉ^Uû·Ÿž•™Š””ƒ–{–|–u—o–÷_¦‘ŽŒŒ‰ˆŽK¿eaû^:¶d’”ŒŒ›«Ž÷Fû
+ûaAqjƒjd‚`¸QªŸ©œ¨™§™Î«õ½ûž’š‘”žv˜wxwŽ€ŒŠŒŠ‡†û¬û³c “Œ•Œœ–ŒôŒ‡{ˆ‚‚|}v}vzsxqwrebRS“€çÔ’°¯ÐΩjŸp“v•v‘~††Ž‰ŽŠŠŒ‘’––Ž•Š”Š”ˆ”†“…•~“v“w”v”u–“”““”“¢‘ŒŽŒŽŽˆŽ†ŽZª÷±Œu{quktmic\ZxŽTû°øОs—y‘’€ŽƒŽ†Ž‰Ž‰ŽŠŽŠ’Š“”””–”“‰“‡”‚”‚•pš\Ÿ÷Óû8³R¨Ÿ˜Ð©÷
+»û‘Œ•šš–’†ß÷¦ŒŒ‰ˆŽIÀibûG6³e¡•ŽŒª÷4ûû kJy|ˆ|‡q†e…Ë÷1žw’„‘~ŽƒŒ„†ˆˆŠŽŠŠŒ‘‘‘‘‘‘’Œ’’‡”„”ƒ”q™^žø8øaƒ7Š|‡s…i…k~WwEvF\OBXBXQe`p’÷Áž“¨ž°¨°©¯¬­®¬¯¤·›¿›¿–¸‘±‘±’»’Åœ•7u’m–d–d—j–p—pži¤c¤d©h®m¯l·lÁjžš—•‘–‘¥µŒ˜V˜]›ddœY¯MÀMÀcÍyØxÙÂ…«ø,ŒŒŒŠ‰Ž@ÝMFûÌ•÷Œ–¯Ç£˜“ŽŽŒ„}‘/®ŽUŒ|‹m‰[Š]ŠlŠ|Š}Šz‰vû¦û°^ž”š–Ž—šŒž÷»ù†u‡vyUi2k2gAeOfNp`zq–„¾É¤§±Á¾ÜüN…û#œ’š’–‘–‘“‡åøš–—{’iŸªÃ§Á¦À¨—ŽŒŒŒ‡ƒ‘Vû¦¾e¦—¢’ Œõ“ŒrŒnŽljjl’m‘l–fœ_^g n n§n¯o®m«y§„„§œ‡‘š“•Œ“‰•…•‡•‡“‰’Š’Š“Š–‰¢‹¤Œ¥Œ¥Ž¬Ž²pû …r‡{‰†ˆ†ˆ‡ˆ‰ˆŠ|’|’z•x˜x˜v¢s«tªv¸yÅxÄ€Á‰¼ˆ¼‰­Šœ÷É–’ŽŒŒŒ‰Ž‡?Ï]NûU„‰ÂŠ›Š¦²Œ²‹±±£‘ŽŽŽŒŽ‡Ž‚Ž1®’ûlŽCûû"ƒ÷¢÷Ž¦ry•~”~“€€€Ž‚‡Ž†‡ŽŠ‰ŽŠŽ“Š’’”’•••Ž—Š–ˆ–ˆ•}˜sšsšy–~‘’z“v•øOøèq˜u“x’x‘vrŽzŒ~ŠŒ„ˆŽ†‘‰•Š“•‘—””—‘——Œ–‰›„¢ƒ¢h®JºûIû»‰HŠzˆs…m…l€g{a{atgmnmngj`h“‚­Ÿ°¤´ª³ª©® ³ ²™±“°“¯©Ž¥£¤Œ¢øû邉„ˆ†ˆ‡€‰yŒxŒ_ŽD’ˆ~¸¯‚¡€“~’’}‘{£‘Ÿ“›”›”•“‘‘Ž’”Œ”Œ—š÷ô÷j‘ŒŽ‰„’CÐYK+÷뤙’Ž‹‹‡ %Kºi\ûô9®!Œ€‹lŠWŠW‹fŠut‹iŠ^û/@µ_“•¡Ž¬÷3£ãöŒÈŒ—Œ™Œ§¸øû÷øeèû¼û¶]¢”‘Œ™¡¡›Œ–÷û
+îøF”ŠŒŒŒ‰ˆFÑYOûÚ÷ ÷ŽWž“—‘’‘“–”„÷÷f§¢ŽŒŒ‡‚’O¶jZû2žœ£¢ª¨ª¨ Ÿ˜—©’ŒŒŽŒˆ„’HÅyc†€xynyo|u€}€{~{|yû×?Ä‘ûû€ˆû¢’™Ž²÷€û€÷N÷%÷€û%û€û6÷÷€ûÂ÷÷ŽûûŽ÷6÷%÷Žû%ü¡÷ú¯e¤p—z™z•{“z“y‘€††Žˆ‘Š‘’’’’–™˜„›}œ~]«=¸£ø— y›}”€”•}–{–y’|}}‚††‰Š—ˆ–•–¢‘˜Ž–•Š•‡•‚–‚•}•x–w–i›[¡“ü‚°€¢ƒ“†•†‘…‘„„Ž~ŒyzŠ{ˆ{‰z‡s…jˆ}‹Ž‚Ž‚’‚™„—„—‡”Œ“‘Œš‰¦‰¦Š™Ž銛ŒœŒžŒžŸ¡‘¢š¾¤Ú¤Ú¬÷µ÷#}HûRf%m>tWtX{nƒ‡…ƒ€‰| øó¥ržw•{—{’}}Ž~Ž€Ž€‚‡…‘‰’‘Š’Ž“’’’‘“–Ž“—ŠšŠ››tœ]ªdªt–…ø\ü ‰cˆ]ˆlŠzŠz‡s†l…l„m‚m‚ozotrtrotkwlwq|ww‚m~d|’~訬”°œ¶¤¶£ª¦ ª ª™§”¤”¤’¥¤¤“³”À™D’d”f—f—gšmqsœu›y›y˜}—•œ |˜œš–š‘š‘¥Ž¯Š•`—i—p˜p—u™x›y›|›~›~š‚˜…–„–ƒš€ŸÀ­¼©¸¤ª‰“ŠŒŽŽ‰†’QÍ~z{wwrvr|z}|}z¹¬†Ÿ† …¥…ªŸ™‘ŽŽŒŒ†Ž‚Ž3ø)\u‹uŠuŠvŠr‰p‰p‡s„x…x‚w~xxvunsmsRi8^‘€ܭ˪º¦¹§¨£–¡–Ÿ“›•Ùo¥‚©z­s®q¥užvžv—‰‘‘’’’Ž–™Šš†›œ€œnœ[Zœf—s‘r‘l’f’Ž˜Ž™šÅž÷
+ø¢›•‘ŠŒŒ‰Ž†C¿c[û"÷˪žŒŒŒŒŒŒ~’q—M¥#û¨û39Ž´a–¢¤¥÷îûXüG³b—Ž›ŸŽŽ ˜÷ÈûTüYùT­f”˜yšpšp•yŽ€Ž€|xxŽ€ŽŠŠŠŠ’Ž““””‘”–Ž””–•‡–„—ƒ—zžp¥o¤j¥c¦÷Òû‰–ƒ­°¤§››ž¯·ÂС”ŒŒ†’Pµ’€†Šƒqz`†ƒx~rrtxxymrb¦÷Z¸b–¤¢‘¢÷šu”€“{’x’xz}}Ž|Œ|{Žˆ”„–Œ–“—“”““”Ž™ŠžŠž€Ÿt t r p ÷êŠûj}ˆ…†††ˆ~~a•E…}Äz¤„œƒ“‚’ƒ„Ž„Œ‚Œ~¿šªš•™”™›÷’÷¤ŒŒŒŒŠŽ†=ÓXMû(Ì£˜’ŽŽ…€B¬÷Óž‘’˜’”‘”“”—”nžˆŒ‡‘ˆ—‡•‰˜‰š™Š ¦~€Cˆzˆ|‡‡†‚„„„„p†\††\O‰CZ]ŒŒ``mŒxŒx|€€ƒˆ‡‰—œàøX`”Œ–˜˜‘–“‘‰Ñç›——”‘ŠŒŠŒ‰Œ‡ŽF·jbü63±‘ûûOuŽz~‘~”‚˜‡˜†¯†ÆˆÅˆ»‰±Œ±Œ¸Œ¾Œ’.dü“÷$÷ì÷øXûÇZº>§œ¦™§•¥•¸šÊžÉžâ§÷°†˜:x=z>{÷P÷fŒŒŒŠˆŽ<ÒaR+÷Aª²‘¼’“o‘r‚Ž†ŠˆŒ’’‘’–“›˜Š•Š–‡˜„™„›a±@ʃ‚ŒŠ„””~”~“}’|–x˜r2ƒ*†#ˆ¿Æ¿Ç¿Ê¥”—‘Œ‰ˆW­÷©ŒŽŒŒŽŠŠGÐ]Sûè9Ž±b”¥¤¢÷tU‡ƒwwjwk|t‚||‚€„…„„‚…†‚‡{ˆuˆ·H£•œ‘”Ž”Ž±‘Ì–û:ûAŽ°`–¢¡¢ìû]>|@~BøÉù\(ûü†û¨–¡–™•ˆÜø<ž™”’ŽŒ€ð÷ ‘ûýGzŠˆ‰ˆˆ‡†ˆ†ˆƒ‹‚Œ~{Œ{ŒsŽl‡|´€¥€–‚–‚’‚ƒŽ„€¢ž’š”›”””’’Ž“”“‹žªùp œ’‘ŽŠŠ‰‡÷Ãøj¢“’ŒŽŽŒŽ‡Ž„8½cˆ~„w€qqwfoZnZsfxqwpzu|y•ÓÖ˜˜©¯ºÇûï…û•Ž—™’˜’–’“’‡Úø œ‘ŽŠŒŠ‰†Žg£¡¨ ¨ž¦p÷»€t‚{xsnknjsrxxxxglT_’‚ܻį¬¥«£°©´­¬’ŒŒŒŒ‡‚’ø ü±û×3±a”¤¤¢÷ÀûL|‰‚†‡‡ˆ…ˆƒŠ‚ŠxŒoŽnŽpr„~¶|¦•†–…”„„„‘}‘v”Œ—š‘›‘—‘•‘•‘“”‘–’–Ž——÷n÷KŒŒŒ‹‰ŽBÒVQI÷÷!’ŽŒŽŒŒŽŠˆŽEÈcZü7´b˜™ŽšŽ›•Œ÷šûµÊ¥Ÿ”™–·÷Q§”Ÿ”—”ˆá÷R¢ž’ŽŠŒŒ‡„‘Q²jbû„C¬)û.÷ÕaûŒ÷÷û¢ó÷#ûÕüS–”‚“|“v‘vwŒxŒrŒ…Œ†ŽˆŽˆ‰Š“Š“”•”•‘”Ž“˜‹—‰•‡——{›y™sžk¡êøבûüH…û«˜œ’ŽŽŒŽŽŽÒ÷d8”ž”••‘–“ˆ÷ øK¬¥’ŽŠŒˆŽ†H»g_û¥¾§ÀªÃ¢•“Ž‹‹‡Ž %:´ŠwŠz‡ofƒf„r‡}‡…z„vruü©÷–÷dû–ûd÷­÷y÷dûy÷Õø ¦—’ŽŒŽ‡Žƒ8½‚^Š‚„t€d€d~f~g~gwcq]r_ugxp˜‚»Ä¬µ¦¦¡¯¤·÷l‡û†û>ˆYˆ_‡cˆe†i†o†owz~z~qˆg‘i‘f’d’~º{¬}žž~–Ž€Ž€Ž„šœ’”Ÿ•™•——•••—‘™“—‘ ‘¦¦ª­Ž¬Ž½ÎŽÎæ’÷ ˜—’‘ŒŒˆ…DÄe]ûOœ´Ÿ¶ ¹ûûÒ•¢mšw–s“p’pv|Ž}‚††ˆŽ‰’†’Š““Ž’’•‘”™ŒŒœˆš„š…™zžn¤n£pžr™÷M¿HrQy\€½E¦ ªŸ°ž°Ÿ´Ÿ·Ÿ¹ ¥—““–‘š“…›MtYzf€÷Ú÷0ŒŽŒŒŽŒŒŽ‰Ž‡FÓ\Kc÷z¢›’Œ…’=³’ûûE(Q©f”ŽšŽ¡ŽŸ™Œµ÷‡`û4J°ožŸŸš¢•Ȥûÿnw”•­„Ljň½Š³ŒàŒÂŒ¡£Ÿœ‘˜“’—’–‘•Ž“t¡†‡”ˆ™ˆ™Š›œœ‹šŒ–Œ—ŒšœzŽ€S‡t†u…s„uƒ{‚‚ƒ€…}‡‰eˆMŠûŠGŒwx€ˆˆŠ—÷ü÷Äû–…ûš–““–“š˜„ï÷¥÷-ω:Šh‰eˆb‰b‰p~Š}‰ˆ€ˆ€†„ƒ‡‡…‰}r”h…}±~¢~’“„Œ†††Œ„ª˜ ˜–—–—’˜˜˜Ž›Œœœ¡§Œ¥¯Žµ·±Œ¬¡¢‘‘ŽŽ‡Ž„I²pRûO÷t¥ž“’Ž†Ž‚6±‘ûûWûP÷K¢œ‘ŽŽ…€>¯’û ÷@È…s…t‡{ƒy€w€x{zx|x|‚ˆ‡…„ˆ„†Œ…Ž……‘…•ˆœŒœŒ›‘™˜›—•œ‘   ŽŸ ©Ž²«ø ‘ûû#„û ’Š•——–‘”“»øEY––••’ŽŽ’†ä÷%¢Ÿ”’ŽŠŒŒ‡ŽƒM²l^û_÷;ø’ŽŽŒŒˆ…‘EÌWNû—ñ©¢‘ŽŽŽŒŽŽ‡Ž‚/¯‘ûûƒûø,û|üE÷eøEûÌüs¨z‚”‚”“€”‚§X‚Ž€~Ž|ŽzzŒ{Œ||‚‰Ž‡ŠŠ•Š”Ž””””‘”Ž•’Œ•––ˆ–…–†–„–ƒ˜÷Ô¢h˜u‘‚‚{{ŽzyxŽ~„„‘‡”Š’Š•–––—‘˜Ššš‡šƒœƒœ|œvžuŸsŸr ÷ÖûA|~ŽŽ~Žƒˆ‡‰“Š“”•“”‘•Ž”›Œ™†—†–‚™|š|›{šx˜x™h¥W°~¦pžv˜{˜z•|’}’|”z”w÷L÷)E©` ”Œ˜£¡›Œ’ù¾“‡„’DÏ\KTø"ª¡’Žˆ…M½e[û÷ ª¡‘ŽŽŠŽ‡Ž‚2´’ûDû÷¨ ’ŽŽ†€8°’û?"2½’û0Çûå÷c÷ûcø8ûRû÷R÷Gü8÷c÷ûcû÷z÷R÷ûRÃûz÷c÷ûcû÷z÷R÷ûRü*û¨v€{€€€rscfcfM^6T—}¤˜¬µ£µ£Õ¹ôε’ŽŒŽŒŒŽ†€”÷2¢®w­w«x«x¬q¬j²b–“€’‚‚’‘†ŠŽ’–Ž•Œ–˜Š—ˆ˜…™…™}™u™t™f›X-ªx‘{Ž²øC¸_œ“š˜ŒŒ˜šŒœ÷à’ŽŒ‰†‘SÀi]ûÙ÷)˜‘ŒŽŒŽ‰†WÁf]BÚ÷>–ŒŒŒ‰ˆŽIÊdW=É ›’ŽŽŠŽ‡Žƒ@±Ž0^û KŽµ`• §¯Ã;!ŒLŽ¶bœ’“Ÿ«¼<û&Œ›^’ûûÄ„û£ ”ž™„ç÷÷\ûy‰€ˆ‡‡‡ƒˆ‰ŠgŽP“‰{¯ƒ¡…”‰“‡’‡…†…Œ†…Œ…Œ…´“£””–“•”Œ””Œ—›÷ê¡œ’Œ‡‚’UµoaûB÷Iûkû\â÷\û\¤Ú÷\<÷LØ…Kˆp‡p…o„oƒl€j€j€k~m~mv`lT—„®¾¤°™¤š¤ž°£¼Ÿcœkšsšr£v­y­zÐô†’ž‘–“‘ž‘©“›;;‹:–÷“÷C–‘ŒŒŒ‰„’MÅ`Y;÷Q÷V’ŒŽŒŽ‰„‘CÅhYû„KŽ´b›‘”Ÿª¶üZrŸ’™}¢|¢‚›†“†•†—„š˜‘ ’§“§’£‘Ÿ ”“ŽŽ‹‹‡ %V÷ꈵ|Œˆyˆz„zƒxy}‚‚ƒƒ‡„†„‹„„„“‡—–—”––”“—ššŽ›ž÷²p‰‡†‚{‚zy€x—ƒ³Á¦ªš”š“˜•Œ—Œ‘‹ŒŒŽŒŽŽ…’~˜Y¹_dûW÷;ƒ¥g…€‘{‘{|~}Œ‚Ž‡‡Ž‰Š’Ž“•‘‘”–Ž’“Š’Š’‡”•ƒ”–~—~˜w™r›¸ø œ‘Ž’ªºûËv‰|‡‚‡‚ƒ€~ÉZªÁœ§ŒŒ•™ž¦¥™Ÿ”™‚•stnlhf÷Ï¢ ””Š‡‚’T²h\4Zì÷Þ‚˜~™{w›w—z{}}Ž€ŽƒŽ‡”•Š•–”–’••”“Œ‘–‡——ƒ—w›mmŸr™x•÷‚taŽCŒeŒSŒB;‹O‰cd‰f‰k‰i‡o„r„rƒt€t€u}swoyqliad•¹°›˜ŸŸ¤¦¤¦£˜ ˜Ÿ–£•¨–¨’°º¹ÀŒÇ÷F®‹ÀŒÑøJýDzŠŠ„Š„ˆ†‡†††‰{Š|ŠdL–‰{ºª€˜€˜€”‚Ž‚ƒŽ¹œ¥š’™‘šŽž¢ùdª¨ŽŒŒŒ‡Žƒ‘J¼dWü,šûѬcš’Ž’¢Œ°÷‰š’ŽŒŒ‰†OÆdXC÷÷*ŽŒŽŒŽŠŠŒMÊ_WXТ’ŽŽ‹†Ž‚?¬<P$^¦e“œž Ëû!÷oBnaûI±3û…*§›ŽŽŽÈ÷!Xœ–Ž”’˜–†Ï÷¤ ŽŒŒ…€”ûhûE÷'÷!û'½ù¯^ž“’ŽžŽ¨Ž© Œ—÷}üþp‰{‡†‡……‡‰ƒˆwŒnng’b”ˆzœ…´š†›„œ‚œ‚–€Ž~~˜šœ”œ“˜“”“”“’•Ž—Ž–¡ªùø.•ŒŒŽ‰†8ÒQHýKŒ÷Š÷¨JŠ††wh‚hzasWtYwg|x{xuqok”Źµµ¤°¥°©—¢•¢˜¥˜¨žZ›e˜r˜ržt§x¥w¥}£ƒ£‚³…Ɔé…÷„™¦Ž‘’‘”’”’¡”­––P„\†f‰fŠ[ŠPP^Žn÷g÷©ŽŒŽŒŒ‰…‘DÑVLû.÷S÷á“ŽŒŽˆ‘„’CÍWLü¾Z©až’‘˜¤Ž±÷]ü4d•l™vvžx z¥{£|ª~°ŸÁ¥›“ŒŠŒ†Ž‚ûøˆ¦Š‹“Š™{ˆgŠ„ˆ€†z…{„}„ƒ~vwjp‚‚‡„Œ„Œ„Ž…‘„„’•ˆ˜œŠœ“›™œ›•ŸŽ§Ž¥Ž¢Œøåyewbt^˜†™›£©”•–•—•™–—’•—˜Ž›ŒŒŽŒŽ‰†7Ô`Yû«œ›•™—Ž–Š–…–‡–ƒ•••kW¦‚‚¡p†‘“z”zz{Ž{ŒˆˆŽ‡†´÷)‰}´‚¤…–‡•‡“„’‚’€ŽŠ|}Šwˆs‰qˆxˆ}†x‰}Œ‚‚‘€•~—~–‡––“”——Œ›‰Ÿƒçˆ¬Š§¢¡žœŽ›’¡”¨¹÷(«òœÂ’’–œztHvPxXxY{b}k|k€pƒw‚uƒ~‚„‚„‚‡‰†Šr‹`Ž”ø „€«p˜‚—~—y–x”z‘y’{……ŽˆŠ’‰’’”’”—Ž™–‹”‰“Š’‡“„“…“~•v—w—{”‘z“v”Ï÷n†~·l”†•€—}—{“€€„‰’ˆ‘Œ’‘’”‘šŽ—•Š•†˜š‚›Y¡2§÷}„‘û"üü„û‘™””•’••…ôùGø:ýAxˆ~†„†ƒ„†‚Š‚ŠxŒmmsy‡}¼{©•‚–‚‘ƒŽƒŽƒŒŒ€ÅŸ¬‘“›Žš—ùV¡¡”“ŒŒŒ„‘}•U°i]ü›û<¦c•‘—šš–Œ“÷}•‘ŒŒŽŠˆŽNÄd[û\‘û‘,û7…û
+œŒŒŠ’˜—”‘ï÷q8‘•š‘š‘—””–„ì÷z¢ ””y—O±l[û;ÈÁ“’¡ ®¯÷h”‘ŒŽŒŒŽ‰†DÎ[P3Òâ–˜¦°·È§‘”Œ‘ŒŒŽ†‘€”GÂu…{†‚†‚~tufJÏ]Sn‘ŽŒ†Ž6¨"Lû1V®b¢“™‘ŒŒ‘•Œ™ñû0û_\©b“’Ÿ®÷^eaiglmM¦Ëûä÷÷qû÷%ûq÷ œ˜÷`Œû÷9÷0÷kZfW`T÷º÷ª’û ý„ûš—Ž•‘”–“—•ƒ÷ùH÷ yKƒkwKl+—|´]—|—{—y—y•x•v“vrŒnŒo†x€€€~†|Š|Šb“Iœ…zºz§}”€”€’ŽŽ~Ž|°—Œ—’ › ™› –¥–¥¡Šžžˆœ†‡›‚Ÿ}¢}¢x¢r¤r£p¤m¦À÷š­¡µ§¾©›’ŽŒŒŒ†€“Iº`Yû÷ùqŽHŒl‹jŒegŠKŠ2Š2‰J‰c‰cˆl‰t‡t‡q„m„lƒq‚t‚t{nvh—ƒ²»§¶›±š²•ª¢¢Ž¡  ššŒ Œ¦÷"û˜zŠ€ˆ†‰†‡‡…‡…‡q^”i’ˆŒ‡‹…Œˆ} ƒ´}™„”„ƒ…Ž„„Œ…ƒŽ‚ª”¡–ššš™’ ùa©Ÿ“Ž†’Q³i`û~üE÷F÷ûF÷`ûŽ÷a÷Ðýb­c•¦¨ªø^ŒŽ‡„“JÒPHû2øZ÷ŠŽŒŒ‡„“MËURû÷‡ª ”’‹…Ž‘,¸’ûûkû7W¬c”¥§¨òŠüZûG÷&ùH*Œ{‹fRŒRŠZŠcŠc‰c‰dŠd‰lˆuˆt‡t…s…rƒq€nosbdU—‚´¸¦«˜œ—œ•ž•ž“ž“Ÿ’Ÿ’ž¨±±Ž®Œ¬Œ«»ŒËʼŒ«Œ­¨Œ¦ùf”ŽŒŒŽ‰†?ÒWJû™›­“‹•ƒ—…—z˜r˜r˜v•|‘ƒ¤t›v’u’wxŽ{ûº÷ºýIZEeBqBrT{f„|ǔʙ͞͞ºœ¨š¨š§›¦œ¬s­x¯|°|¯~®€®€¨ „š¢Ž’“‘˜’˜’ž‘¤Š›eŒddŽcŽc”b™b™eœgŸ³±––®´ÄÒ®š”ŽŒŒŒŒ†”MÁd`ûð]Ž«`™“–”ŒŒ”–Œ˜ Œ—p’z–vœoœq¡l¦i5÷K÷ŽŒte€x|wyyywwxvwl¢s¡{¡zŸz¨x°~÷±ûŠVŽ¨bš““œ¦Ú,†*¢Ÿ”žš¡÷Ne™–’“•’–•‡ÏØ÷r‘ŽŽˆ‘‚”GÌOK*Àœ˜’•ŠŒ†‚=°0ŒlûPŒÄžš”‘‰‘~’A¯5ÃûMŒ÷ ÷NŒû ÷¡÷ŸmOrwkncobum{x{wkg\W”›¯«™˜£¤­®­®¦« § §¡¬¤±£`”|—nœ_œ_”oŽ~Ž~Ž‚Ž†…ˆŠŠ’‘’””Ž”•Œ˜‹—ˆ—ˆ–…œ€¡€¡¡¡}¢u¬l¶³î‘›¡Ï²÷ ¦šž–ŒŠ…€•GÅbYû¢\Ž«a–¤«²÷^ZŠ„†wƒl‚lƒo„sƒtm|ha¿k±v¤v¤l­b¸~‚¢oª_µO³O§`šq÷[÷ªe’Ž’ ¬÷4ü€ˆƒ†………|ˆrŠqŠg‘\–…|¶}§—…—…”„’ƒ‘ƒ’}’vŸ’”›•›•—•“–“–šžŒøª÷0–‘ŽŒŽˆ‘„’GÑTH_÷N¨ ”’Œ„~‘,´’ûû ûmrû¢b}zy{Œ|ŽAŒ„‰‡ŠŽŠ‘––““’™‘—Ž˜Œ—Ÿ„ |¡}¡œ˜—yr¤ù²÷rqiˆ†~vvvvorflem]pStTsGs:t:t7y3ŒzڒӔʖ˖Ӟ٥ۦȧ¸ª·ª³«¯®®­¦¤œœµšŽŒ‡‘‚•UÄU^û°—˜À®©’ŒŒŽŽ…‘~•N·wpvsstuthn^h^gdnitktdt^s^rq}‚†’~â°Ê¨° °Ÿ¼¨Æ±ªa…~“x‘x{Œ„ˆ‰ŽŠŽ’Š”“™›—Œœ€ž€}š|˜{—y˜xšÉ»•ø´lbqjusttqqnpnojnfnfnYkJh’~ԪĨ¶¨¶¨´¨´ª—€•~“|“{‘}~Ž~ŒŒƒŽ‡†ˆ’Š”Š“Ž””””•–›†›€š€šo¥_°–“÷ùa`~vyltmtkvjujwOo5g4i%pû
+yzÅ‘¸‘«“¬‘­“®•¯“¥“›œ‘¨•¶›Ì¨¸ ¦™¦š¦œ¨ž¨žº²ÍÅ°•’ŒŒŒ‡‘€”NÁR\ûÝŠ¥¢¦¢§¡°““ŒŒŒŒˆ„°÷N¹U®µ’’ž¨©û|‰‰ˆˆ‡„‰€ŠgP”‰~¾|–ˆ•…””’ƒŽ„Ž…ŽƒŽ€¬— ›’ž’Ÿ›÷Ρ£¢££¢•P]÷ îbxncbŽo|Ž|{Žzxo{u~z}zxusp”€²­®¬¬«›\‘x–qj›i l¤n£o£y£‚”‡’ŠŽŽŽŒ‘’‰“†”†”ˆ•ˆ–‰•ŠšŸš‹—Œ’’Œ–˜|…r‡{‰„ˆƒ‰„Š…‰…Š‡Šˆ‰‰‰Š‡Š‡Š‚˜|¤s¯†“ƒž~ªv¼ˆ•†›… ”¬¸ÊÛ¦ŽŒŒŒ‰Ž†H¼„tƒvyw{ptg‡§‰—‰ž‰¤‰¤Š¡ŠŸŠ‹Ÿž÷[Œû7mkÂ[¥©÷£ˆrƒ:Š‡‰r†\…]‡nˆˆ…‚„„ƒ}ˆy~ŠgQ•‡{¨„¢„žƒƒ–Ž~~ŽŒƒ´›¦™˜˜˜˜“š‘›¨´µŽ¥Œ••ÔŒ–ŒœŽ¢¥ŸŽŒˆ„R¶lbû™Œ÷ø÷eŠaŠŠuˆ_ˆ_‰o‰~‰~‡‚…††…ˆ}~Šm[•‡}¨žƒ•†”†’„ƒ„€Ž~¤”“•‘—’““’”’•˜›Ž›¡Ž¨‘ØŒ˜Œ Œ¦¡ŽŽŒŒ‡‚’Z²kaûŠ•¢š©Ÿ±Ÿ“‘ŽŽŽŒŒ†Ž€K¥‰kŠ‚Š|‰x„\Š†Š„Š‚fCº"ûCÕ^S:ŠËŠ¾Š¦‹¡Œž‹žŒŸ¤ŸŽŒŒ„}I¤ŽTŒ‚‹rŒaŒ#|‹tŒl(÷@À›ŸŒ‡„“d´akjur}riz_x’} ’Ô£’–Žšû3-bªc•Ÿ¡¢²û,oqtxy€y€u~q~÷ÿøŸs†‘{’|ŒƒƒŒ‚Œ‚‚Œ…Ž‡‰ŽˆŠ”ˆ“Ž“–‘–”“Ž”‹’ŠŠ‘†’‚––p¡\¬Ëüåªa˜’—–Œ–™Œ÷|“ŒŒŒŠ‡IÈaVûZ÷!øa¥l†ƒ‘~~Žƒ†Ž‡Ž‰ŠŽŠŒ‘‘Ž’“”Š•Š•„—|™{˜uœmžªøƒ~¤y¤v¤s£s›v•y“z’€Ž‡ˆˆŠ’‰“Ž•“–“Ž—‡›‡šœyž{žX¦7¯÷ñº Òz’8ûuZû{f|f€s„„ƒ‚‚…‚†z‡sŠs‰pŒnŽŠw½‚«…›†™†–†„’‚yŠnŠn‡s„vk‡v‚‘‚“‚’„’‡‡“’‰•““‘’Ž“Š“Š“Š•‰˜‰—‰žŠ¤ˆ±Š§ŒœŽ¡‘¦¥˜¶ÇŸÇ¬ô»÷+¨j •”ŸŽ©èû[ûjZ·`–¢¥¨öh‡~‚t|i|iu\kOmPtg~€}x‚t…ÁG´œœ‘É—õœ÷
+£’¡—ž†å÷á¦vŸz––}”’~–p€…Š‰ŠŽŒ’Œ’’—–Ž–”’ˆ—ƒ™…›\¢6«Ý÷@nWˆ†€{zr˜„¤¨¡¦¥£©¬œ¬˜¤“œ’››³£Ë£”–ŽŒŽ…€;®Fˆ|…tiknƒrro|jMÈbY>Œ÷¬¥ ”’ŒŠŒ…~;¯ûŒûŠû.Œ]¨b– ¤§F÷€œr—w’}“~‘{y‘gŒ†ˆˆ‰Š”Š“’“’’”Ž”ž…žzžzŸn¢b¨÷Ù¤€h„tˆˆƒy€r€r‚z……ƒ…‚†‚—ƒ‘œ ©®¨¯¢§œžŸ‘’ŽŒˆŽ„ãûÛ†(Šn‡l„h„i€j|k|krnioiqdr_t‘}¢°—Ÿ—Ÿš  žŸœ¢›¢˜ª”´”³•Ó”ó÷1€û¡ŠxŠz‰zˆz†€„…„†€ˆ}ŠxŠf’U™†|­¢–‚–‚“ƒƒ‚Ž|¶™¨›™ž˜ž”›Ž™Ž™˜Œ–™÷¾¡œ”’ŠŒŒˆŽ†N·mbû‰XŽ«fœ“Ž˜ŒžŠ÷"øklrŽrtt‘p”l”m”s“w”y—ušs›r™x˜}˜}™|œ{˜™–”–‘–Ž¤ŠŒ•h›~w˜p¢o¢t¤z¥z§Ÿ„š„š…œ„ …Ÿ‡š‰•‰•‰•Š”¥Ÿ–“ŠŒŒ†Ž÷NùoŽDMŒSUŒPŒMVŠaŠmŠm‰rŠw‰w‡u†t†t…w…{„{ƒz‚y‚xz||zsrl–€–•ŸŸ¦©¦ª¢®ž³ž´—²‘±’±¶Ž»Ž»ŒÑæçŒÉŒªøaMŠû
+÷8ûgû˜9ûr‘x•~—À„ìŠö‰ÓŽ¯’¯’ –—™”Œx˜—†—†—ˆ›ŠžŸ‹ŸŠŸ„MŠy†z…|„|…€„…‚t†gŒûŠ<cŽ’‡‰’‰”˜÷ —ŽŽŽŒŽ‡Ž‚Ñσ‚°f¤i˜n`‘†’ŠŠ“””•”˜‰œŠ›…™€—€˜{—t—s—u—t˜÷Æ^†¶j§t–—˜|˜y˜y•|‘€‘‚Ž††Žˆ’‘Ž‘’’‘‘”Ž—˜ˆŸ‚¤¤I¯û¹«ù²bŸ‘š©Žºù€ŒŽŽ‰†BÒQMû°™””Ž—‰˜‰™…–ƒ”“{”r–r–s”s’‡£zœ{”}”|“|{zŽ‚Œ‰ŒŠ‡†ûúùIûÐh]üæB¯û6ûr‡û¤’ ”›–ø1øýûЃˆ„„……„|ŠrŽrŽi’_•‰}¨€¡ƒš…š†–„’‘ƒ‚‚‚‚¦’¢•˜œ˜––•Ž–˜›÷Ó¤¡ŽŒ†’û=÷f ž’ŽŽŠŽŠˆŽ†O²nfûÎ?°24‡?ª’ ”––¦÷à^«•‘ŽŒŽŒŽ‘Ž†Âü}÷
+÷àû
+UûuûuI²Ž4,ˆ2¤“ž”™•½÷‰]¬–œ‘ŒŽŒŽŽŽ†ÅÞŸž‘‘ŽŒ‡‚‘R®û™ûE÷÷‰û®¹•„¨¬¤«ŸªŸª©¼²Îû؆û¤”Ÿ•š–†õ÷ê¨m“„’‚‘~‘“z–t~‘„Ž•Žš˜Š™†œ‡œf¢F©÷÷7ŒŒ‰Ž‡HÉZVZ÷Kö˜’ŒŒŒ‰„’T¾qzr~rsjb~a~k€v„}÷2¦û?7<Ž­d“ ¡£ÄxL|^‚qp}iw`ya|m€w€yv}t÷ïøç·e“£ª²øDŽŒŽŽ‰Ž‡LË\Tû\™˜”–••”Š”Š”…•~——qšbœ…‚Ÿq‘„€‘zz‘uoû/DýÀ ’Ÿ•–‡ð÷ÒøûÅrŠ{ˆƒˆƒ€ˆxŒ‚~ŽxwŽtp‰{µ€¥‚••ƒ’‚Ž‚Žƒ€Ž~¦– ”™’˜’””——šž÷ᣠ‘ŽŠˆ„U³mbüD­ûû™Ûø ž‘“ž•º÷_R—©›’ŽŽ†ÐÑ£žŽŽ‰Ž‡ŽS´g^ûBD±G5½Šé÷_-ûcûV@û‡1 ”›”˜”³÷ Y¤“ž“˜“„Ø圙‘ŽŽ‹ˆŽ„‘_¯ogû‰û/÷÷ û¡î—‚©®§¯¥²¥±¨— •Ÿ–ž”ü…û ¡’¢–†÷ ø |›~”~””}”}“{‘‡…‰ŽŠ•ˆ“‘’™’™—Š•‰”„—~™™e›Lœ÷÷+‘ŽŒŒ‰†‘RÍ\QY÷9©¤ŽŽŽŠŽ‡ƒŽ7ª&û'KŽ±b•Ÿ£§¾€_†u}btMtOtZufvfwkzoøï÷Åvropkoimouqys{YlB`Ž~®˜»¡È©‘3û=‡û ŽŒ”Ž™‘š–’ŽÜ÷•Œ8«•¡•˜”…æŒ÷J«¤ŽˆŽ†J¿e_û€d¦Á°Æ¶Ê¼­m¦v€ž€¤~¨{¨}¥¢„™ –œ¡–®‘š`Žkw‘w‘q”m™k—u–’}“}•|–¯µž¡®¹¼Ð±™ŽŒŒŽŽˆ…FÅ`[û\Š˜¨š¨›ª£š’ŽŽŽŠŒˆ†Ž3±ƒc†v…sƒo‚o|cuXvXpXjX–¨¬¤«Ÿª¡ª¡±£¸œ]Ž€•všlšmšq™uû
+øD©¤ŽŽŒ‡„Ž.®÷ÛøܧYŸi—y—y¢n¬dkl`jUiUg\ocwcuTrFm’{²—®—©—«—¸žÈ¦Ž+û?†û¤” –˜½÷ì@£–™‘ŽŽ’”‘‡Ô÷`£’ŽŽŠ‡‚’S¶h\ûÖ[»ä¾Î¶º­¿bÃiÇpÆqÏrÖr›£••“š“™‘Ÿ‘¤›2Š:˜D£C¥]v˜v˜y—|—¼¶š˜½½à㱚‘ŽŽŒŒŒˆ„‘?Ä^XûÃÄ⦖”ŽŠŽˆŽ„Ž0¶{\„v}kxbxbs^m]o[_URN–‚µ­±®­¯¬¯±»µÈý&÷v÷ìûvûàù2÷Âh\XRHHp ~”zžs¦u¦{ž…–ƒ–„—‚š÷pù‹…m‰‚}as?q>w[|w|w~„†„†…€…³N¢™˜”¸˜Ú>û[Gz‚z‚|†€ˆ»G©›˜“¦”µ–³–Á˜ÍœŠ›ûŠrÅβ»Ÿ¦Ü÷ •š›  §§“”ŽŒŒ‡‚’D¿~ho€su}r{pX†[ˆ]ˆ¯Ç’—²ÓÐ÷¬™‘ŽŽŒ†€ûŠý²>¨›™”¦–³›²™Í¥ç°ˆ™0uI|a„a„[ƒU„÷£÷Ú–‚°ª«¨¤§¤¨ª°®»®¹´Ñºè™`œZžbžmŸk¡n¢n¢oœx–‚•—€™œœš•––ž¥œI Y¥i¨i©oªt«t«|¤ƒƒœƒŸ‚¢š‘“Ž‰€‘7µƒl…p€k}f|gvbq^r]rcsishnfhd÷üož“±œŒŒŒŒŽâ÷¢&¦”›‘ŽŽŽ‘…÷÷`¥¡‹Ž‹Ž‰ŽŽ %I¸l^û„Š<°ûûU÷Ü©û¢÷~÷¢ûÏ÷H°e¡‘–¤²÷]ŽŒŽŒŒŽ‰Ž‡KÈ`Wû(÷€ù „c…o‚j~e~e{^wWxWt[p_p_tgwp”‚¬®¦©ž¦ž¥¢¬¥²üm„û¥”¢–ž–‡÷øyœžŠ‰Ž‡eŸã÷Xª™’ŽŽ‹Œ‹Œ‡Ž %÷4üÝP!€wxqpkpkff\a“ƒÒ²»¬¥¥¦¥³´Àì”’ŒŽŒŽŒ‡ƒû¿÷³cž“–¤²øÔŒŒŠŽˆFÐZO ÷¹÷P’ŽŒŒŒ‰ˆŽCÎ[P@÷B¢£ŽŽŒŒ‡Ž„Ž9¯ûû ûF÷B¥œ’Ž‹†€9²#û#9?²c”£¥§´û¹û÷<÷¹÷Fû¹q6ƒµj¦u——œ{Ÿs upšl™m“z‡Ž‡ˆŽ‰ŠŠŽ”Š“’“—”™˜˜™ˆ˜†–†—|›ržsžsr›rœ`£N«÷e÷ ¹_¡“’›¨Ž´øFŽŒŒŒŒŽ‰Ž‡EÈdXûR÷w÷uŒŠŽ‡ŽFÇc\û ÷2÷«ŒŒŒŽŠˆŽDÎ^UüCº`–§ª‘®ãû2!6¸b ”–ŸŽ¨Ìûwû1÷ž÷Q¸c–€—|˜vži€’‘…‘Š’‘“•“—Ž—‡š‰š‚—~–~–x”s”s”w“{’üPø@û>üÄ„û=¨— –š–Èù7¤’£” ˜„÷ù£Ÿ”’‹“‚”T¿`Wüüýzùbùýb¨>È£» ¯ž­ž®¡¬¥¬¤«§©ª©ª«¬­¯û£„û¢‘¢”¢–…ñ÷™œ•u~–xqr r¢s£s§t«vªv³t¼t—•š™•›‘œŽŒ•Y’W—TšT›^¤f®f®t£‚˜‚˜‚™ƒ˜ø
+•È‘ȒГڔ¬‡ŠŽŒŽŒŽ‰†’VÏd{WzHyHyûwûKuø™ûéa[ûê<»‘û"ûD…û ’ –¢˜Ëø6£’¢” –…ë÷u«¡“ŒŽ†‚’üaû´÷øû¼÷@¸¥‘ƒ‘‚„†Ž‹~Š|Š|‰}Š‰‡{†v†v‡zŠŠ†‹………Ž…’…‘†“†•‡•‡’‰ŒŒŽŽ–ŠžŠž‹˜”ˆË‰¦Š¥¢ Œ™Œ”Œ”›’¤šÇ›“§˜´—´”¨‘•§™²÷‚ûQeM¶‘ûûM…û¢“ž”š–î÷Sž“–‘‘ŽŽ’“’†Ù÷8¤ž‘ŽŽŠŽŠ‡„V¯mdr•÷R÷'ŠŽŒŽŠ‡VÆ]XV”÷4¥ ŽŽŽŽŽ‡ŽƒŽ:¬‹‹(‹‹‹‹‡û‹ %%®÷{‘|X‚opC`û`ûpJƒ}}ƒƒ…ˆƒˆ‹xŒx€Œ‡÷À:÷e÷ûeü;ø8ž{™{•{–{“z‘{‘z€Ž‡†ˆ‰ˆŽŠŽŽ‘‘‘“˜Ž”’’‘‡•™ƒ˜e¢H¬Ï÷W›z–~‘‚‘‚‘‚‘€„‡žY„‡ŠŠŽ‘’’’’“Ž‘“’Œ‚›yšy™kŸ\¤ù;Hû J¶ I‹;‡,‡,‡O‡q‡p†r†s†t€n{i{hpjflflam^p‘}Ê«´£šŸ››š›š™™šš˜š™š™¤š­š®”¬«ªŽ§¢÷+ûƒsŠ|‰ƒ‰…‡…†‡†‡€‰{Œ{ŒgS–‰|²¤‚•‡”…’†„„}’v¬–¢”—“—”“”‘—•Ž£ù0ª£‘ŽŽŒ†‚’N¸û?ü\ÞŒ•ŒªŒ¾÷ ûCû ÷[÷M÷ûM²¼”~Í©¢¶¹ÄÐû€„ûª”£•š–ˆâ÷ߟ¦¡¨¢¨­ŒŒŒ‰†Ž8„tt€stsbhPhPi]mikjpnst˜øµ¿`°–¶¼Œ÷Šf‡K©¡“™—ˆ°²÷G]ˆE©”¡”™”‰¶¹÷¾”ŒŽŒŒŠŽˆJÑSOûQ䣚•‘‰‘}’6±ûŒZûG㣛’ŽŽŽŒŽ‰‡/±!Uû[÷Yü©’{¬˜®š¯™¯›§—Ÿ”û1n‘u–~—}Ÿ‚§ˆ¨ˆ®‰µŒ’§ŒŒº»­Žžž™’”–”•“™’žz”€„–‡‡ž‰œŠ‹¤«~‚R„bˆtˆt…{ƒ‚„ƒ…|‰‡{lŠ^OŠ]p“‚ƒ”‡š¡Œ÷7ȱ¾­¶ªµª­£¥œ¯ŒŽŒŒŠŽˆŽFÒrj†„{{qtqtuxy}z|lt_l÷E¨›’ŽŽŠŽ†Ž6¯ ŠûFNbJgFkôù ¦”’ž°ŽÃù3“ŽŽˆ†?ÍYOý "‘ý‹ÔUª¶ù?¨’¢–˜ƒ÷
+øE¦ŸŽŽŽ‹‹ŽˆŽ %-¼ûüKý%øT©œŽŒŽŒŽˆŽ†Ž.À’û$ü ÷6ª ’ •ž–´÷×Z£ “œ—…ìø ©¤“‘ŒŒ„‘}•U²i]ûÀB°‘û"ûæ÷Mpû÷p÷û¢÷`÷û`Àû‡÷p÷ûpû÷‡÷`÷û`÷ø¦§‘‘ŽŠ‡‚’J·kWA…9Œµa¢–§‘¬ºŽü‰fv}tnqÞV• “›’•‘•—œ¦¹Ñ˜ž ¨¦²˜ûû&ûùk²k‘†“‚–}–~’€Ž„Ž„‚€Ž‚Œ„„…Ž‡Ž‡‰“Š•Š–•–––‘—Š™—†š‚›‚›W§-´÷Eû±¼\¤”¡‘žŽŽž¡Œ¢÷ ûVû
+G¾‘û2û@…ûŸ’Ÿ” ˜ë÷Ñ.©– ”˜”…÷÷_¥£ŽŽŽŒŽ‡‚K°mZû ÷V÷¹‘Œ‰†HÍYKûJ÷eڛĔ¬Œ—•ŠŠ‘“ŠŠŽŒŒŒŒŒŽ‰†’SÏt|o~h~g~]~Q|Q{A|0{ŒyÍ‘Ù”å—ûZûZÔün÷÷Ñû©ø|½a–®½Ê÷‹û
+0Ž½_¦”ŽŒ¨ŽÁ¹û!ûkªõ–ƒ·Ã¬º¢²¡² ² ³ûÍ„û?ž”—‘•‘™–‡÷÷à²k¦ošsšs•}Ž‡‡Ž‰•Š’‘—™Œ—–˜‰•‡“‡’~”w•u”j˜\š÷÷B’ŽŒ‰ˆŽDÏ\MMŒ÷1£™”ŽŒ†Ž9²û(7B&´d¦’®´˜‰r‡q~_uLtLvZyiwgykzmøZùHŒjŒTŒ?Œ?‰E†J†J…[„k„jlzm{lwnsqroclTg’Ì­¹©©¥§¥¥©¡¬ ­š­•¬“¬‘¬ª«Ž±Œµ·±¯­‹ÊŒä÷2ý-pŽy‘‚’ƒ•†•…š‡ŸŠ¢‰¢‹¥£ŸŽ—˜Ž–‘“””““•”˜xš—ˆ•‡–ˆ™Šž‰ž‹«Œ¹z7…ZŠ~ˆ‡…ˆ…†‡†ˆ†ˆz‰p‰rŠ|Ž…’…’ˆ™žù®¨””ŒŒ‡Žƒ’I¼gZûŒ÷Uù(ª’±¶¿‡:‰tˆo‡i‡i‡i…i‡i†o†t†t…q‚n‚nƒs„x„x€u|p|qzqvqwpsroqnsornt•~ؾö¬®¬®¥ªž§¨›«›®™¯˜¸––Á”À”¾¥7|˜hŸS¡SŸ` l lršwnqirfrfr\sTtTta{n„o„o„n…|Ò“²ÄšÕ¦֦¤¯¤®£¦žž™ÎJÝQëZŸ¦”™¢–±”Œ—nv~~Ž{‘v’w“s•q™p—f¨\·¬µ¤­œ¤›¤›¦š©š§ž±¡¸­™“Ž†‘”IÅe^û®÷
+Ž”–ªžÀµœ‘ŽŽŽ…‘€–OÁd]üû!÷û3ÄŒ•¥´÷ŒfûwJˆ‚ˆƒ‡ƒˆƒfuÌJ¯¶÷{_ˆ‚„}‚vw~r|m|mobdVlªr«v«v¬y«}¬{«©¥€§}¸zË÷ù2»^œ¡Ÿ¨Ž®Œøû•ül:Ä‘û>û¯|{Ž{Ž{“~––¢…®‰®‰ºˆÇ‰‡ÈºŠ­ µŒÊÊŽ¶¢¢Ÿœ’œ’™””—”—•”¢m ˆŒ‡ˆ–ˆ–ˆ˜ŠœŠ›ŠœŠŒ¥Œ­|Œtû9ˆr„x‚~~„|Š{‰h‰T‰Tˆ_ŠjŒû33[„‘„“†’Š”Š“Š–˜÷÷øvE™•Ž•–‘–”„÷÷A¨£ŽŒŽŒŽ†€’H¶dXüd¥ø ¯p¤’¢¢‘ü u‰}‡„ˆ„„„‚‚¾F›¨›§›¤›¤´ÅÌ怓ûû÷ý¤ ”’†‘€’S±l[f÷α^‘„’‘~“~~€€Ž€Œ‚Œ„ˆŒˆŽˆŠ”ˆ–˜˜—˜‘—Œ˜Œ˜„›|}œc¦I¯÷ƒ>¯g¡’Œ¯ŽÎŽ÷•ûšûÅH¶Ž#ûærx€€“‚—„…—ÀˆèôÓŒ±²Ž¨‘œ”œ•™œ•¢y––‡–…–ˆ˜ˆ›‰›Š¦²Œ|û Š~„~~s†gŠûVKi‘‡‡‰—žø÷ÊSŸ¡“£•†õ÷[£¡“’ŒŽŽ†€‘L¯jYûÄŠ÷wø‹ˆûŠnˆhˆbˆb‡h‡o†nƒf~_]ydqhshpinj•~²°¦¦›žš›¡›¦›¦š§—ª™ª”¬’°‘°¯Ž®Ž¯Ž«©Œ§´¿÷&ƒûµŠtŠkˆa‰a†hƒqƒo{sŽû•‡|°ƒ¥ƒ˜…˜ƒ•„‚‚‘|±›Ÿ“›™—Ÿ— “ª¶¶ŽÆ×÷SŒ›Œ£¬«¤‘ŽŽŽ‡ƒ‘HºkUûŽ½ÄÌž˜‘ŽŽŽŽ‰…Ž2´Žû Œ|Š`†E*/¯c£’¬µŽø5ô‘û.üK…û"Ÿ“§–ŽŒ’ì÷>+ ’¢“Œ‘Ž”…÷øj¦¡’ŒŒ†‚’P¸g[û"|ü¸ø¢÷>ü¢õ¶„ûi¦¢”ž—‡÷7ø°ª¡ŽŽŒŽŽˆŽ†*´’ûKä÷´¦h›t‚‘‚~’{‘{}€€ƒŽ†Ž†‘‰“Š“Š““““’‘””˜Œ˜‡˜ˆ—|œo q l j ÷ý|¤”¡“œ’´÷lU­–¡•••„è÷¯¢Ÿ’‘ŽŽŠŽˆ†ŽH´o^ûYŒF´ûûvÄQ÷<÷lû<ûl÷S÷/÷lû.)øû ¹a¢‘˜Ž±Ê÷“ý;{ˆ…„…„ˆzû —zº †š„•‚•ƒ’‚‚ŒŒ€®™¤˜š–š–“–””› ù>¨¥ŽŽŒ‡ƒG»eX»ø_•‚ª§¥¥¡¤¡¤¨¬¯¶Ò”|‘~~~‚Œ†Z†Ž…’…’ƒ“Ž–––—˜Œ˜Œ˜‚œyŸg³÷P”‘ŽŽˆ‘„’NÀdZûB³Æ ‘ŒŒŽŽˆŽ‚I±ƒuˆ‚uxiyhzn|s{rj]XGãý¢”¢• ”ˆ÷ø£–“ŽˆƒŽ6°Žû"û¹¹ø¶²cœz˜x‘v“v}Ž†Ž†‡‘Š’Š’“’”’•Œ™Œ™ˆ—ƒ—ƒ•y™n›nœt˜z•÷,ü瘎‘¤•¾÷CU§”Ÿ”—’„÷ ÷I§¡‘ŽŽŒŽŒ†’R³jaû<³ûû4¿h÷÷CûûC÷-÷÷Cûûk÷¨®fª¹È÷“ülv‰‡†‡†‡ˆˆŠ‡‰‚‹}Ž$œ‰~¶~¦~—€—€“€ƒ€±œ£š–˜–˜‘—”Œ•Œš øh©¤‘ŽŽŽ†€“Q´dZû³÷ ÷Ê~gˆƒƒz}q}pzowlvloghb•€¼»¸»´ºÙœiŽ„Ž€Ž|Ž|Ž}Œ~Œ~„Ž‰‰ŽŽŠŽ“Š“Ž“““”“Ž“”‹“ˆ“‰”…”—€•{štž÷ ŽŽŒŽŠŽˆBÆ[Zûu¾Ê¤’ŒŽŒ‰Ž†Ž¢÷–‚á÷‘’¥©·ü0„û7š¢”«™…÷øi¥œ–’‹‘€hž«È•  ¸«Ò«—ŒŽŒŒ‡ƒŽ0±…o…q…r…r€iz^{^~jsu~nzjzj}o}vvxnsh÷•›µbª“™«Ž¼Ž÷NûŒ„û*¥”¡•ž–‡÷ ÷÷¢™Š‹‘~˜FÍ[Lû.÷„÷|ŽŽŽŽŽŽˆƒ’CÊ[Oû÷@§£ŠŽŠŽ‰ŽˆŒ/¯“û$!û%¯å£ŒŽŠŠ†€‘D±‚Vƒd†q…s„r‚s‚sƒu‚vƒwxfmU–¬¸¢­›¢™¢ž­¡¸÷/û„û‹²û&|÷’ë—КК½›ªœªœ§š¢š×mÅn´o°p™€–ˆ’’“’–Š›Š›…š}—™p—d™d—b˜`˜œž›¡¢›£ž«ž²÷”ŽŒ‡’€•LÂaTü:œ £ž§¦‘’ŽŒŽŒŽŠŽ‡ŽM²øH®ŠŽŒŽŽ†‘”RÀZTû®÷÷ÔŽŽŒŽŒŒŽ‹ˆŽIÅ`[ûlöø‘ŽŽˆ…‘IÇ]SûXê죎’ŒŒŽŒŽ‰‡Ž>¾‡x‡xtY`<û6›–••““”“Š”‡–‚—‚˜dŸD¦„¨pžx’’~‘‚”s…‡Ž‡“ƒûHû ¿b©”²º÷b ûbû·aŸ’”Žª¾÷Dûû£ûµe¬’¶¾÷i~m~syaLûjû°c£”©Ž¿÷05û
+Æ€šˆÈ~÷
+÷`¥”ž’—’‡Àè÷&ŽŽŒŒŽˆ‘„’S¾_[]ݪ ŽŽ‹ŒŒ‡ƒ’O·kbû ì÷·ŽŒŽŒ‰Ž‡EÍ]SûFǦ•‘Ž‹†Ž‚5®IJûû
+·^¥–•¥´øÎ’ŒŒŒ‡‚”RÂ^Xû÷øŽŒŽŒ‡‘‚”SÂ`Vûªð˜’Ž…€ŽD¡/æù¡“Ž›£¥œŒ–øŠýw‰‡‡‡ˆ…‰ŠƒŠsŒffŽmvŽ‰z¼‚«ƒ™„›„•ƒ“‘‚……ŒƒŒ‚Êž¬Ž›Ž›œžùC÷:ŽŽ‡„‘?ÌYNýû&Ž÷$û0‘ûûx„û¢Ž ” ˜â÷`ŠA¥’¢”ž˜†ð÷u œ’ŽŽŒ‡‚‘M´j^ûK„û¸÷¡÷_Œû¡øb+û½!¶_£”—ŒŒ–˜Œšùg–‘ŒŒŒŽˆƒ”?ÕVDû§÷¦÷§“ŠŒŽŒŽˆ†‘EÐTKü ,Žµa¦•¦¨Œ÷ü ¾“‚º¡¼¥»©½ªÆµÐÁ±ŽŒŒˆ‚”NÈ~v„~srbfcekntvtv`lN`÷ø ‰¢ŠŒŠ“‰˜€„o„t„y„z~yxzrs‚†ƒ„Œ„Ž………”ˆ˜®¡š©’“©žŒ’Œ’‹•Œ—ùqhsluo“ƒ®¦¦•Ÿ•œ‘œŽª–Œ‘ŒŒŽ‡‚”IÍebûÙž¡ŒŒŽ‘”•“Œ’žœsštšg[ž‚€¤vœz”|”}‘}‘||‘x’rÎûŸµs§{£{ { zzœxœx™z—|–{“‡™~–ˆ””””—šŒ˜‹•‰“Š“†–ƒš‚šj P§P¦N£J ¢Î—ƒ©¯©³ª·©·®Æ³Öûç†ûT¬™“ƒ÷
+÷ö¢w˜€™z˜rhŽ„ˆŽŠ’ˆ’’“‘”“””Œ”Š“Š’‰’†“‡‘~•t–t–q–n”÷(÷ŽŒŒŒ‰…’RÆbWu÷>«›’ŽŽŒŽ†€5±ûûû3Žµb“ŽŒ“˜Œ˜•Œ‘Ü|]„t€n{g}fw_sXrWlSdNø$ø^´^—¦¥‘¦ìûsû
+ûw¼÷w÷ûwÀ÷w÷ûwý9ù\·^˜¦©’ª÷5iˆT¤ŽŸ’š•‰®­÷TiˆV¦ ’š–ˆ°§÷¥”‘ŽŒŒŽ‡‘‚“JÅXQû5Т™ŽŠŽ†Ž€C¦Ž>YûTÉ£š’ŽŽŒ„~C¨ŽJOûSû(6'†+˜’Ž’Ž”‘”’‡×÷¢™’ŽŽŠŒ‡Žƒé»3û‡(¢’¡•žš‡È÷*›—’ŠŒˆ„Ž¢ûy•ƒ¤¦¡¦Ÿ¥¤¢¬¥²÷Å—‘ŒŽŽ‡‘•OÅ^QûTŸ¯¡–‘ŽŽŽŒŒ‡Ž‚C§„e‰ƒv~k~l~o€t€swjp`÷D÷£nœp“t•t‘x||ƒŽŠ‰ŽŠ’‰”•—––‘˜™Œ’‹’‰“Š’„•}——j¡X«÷ñ÷›@X^T`QdRdXm`u}Ú®’«¹¦¹¦¸ª¸­ûakœy¬‰‡­µ‰»‰¼¯‹ ÷ ŒÑŽ ’ ’š••—•™”—’—u£~–„ž¦‰í|}û ˆv…zƒ„ƒˆˆ|‰yŠû †lŒŒXXjŽzŽzŽƒ•šêô°÷µ÷ ¸¦…’Š‹Ž†“€˜YÆmq~€kwVnWnNlDi󺵣 º¹ÐÒ÷å’ŒŒˆ‘ƒ”LÊMMûU¹Àñ÷“•˜šœŸª’“ŒŒŽŒ†’~—FÆpˆ‚†‚}‚~zopb?ÒWQ,÷ªžŽŽŽŽŒŽ…Ž€6±5ûû<1Žª`—¨ª‘«÷û9û¦@‰†“wž’Ž‘œ¦øjda`Z]Ç÷*÷:÷l< ‡†{xni÷—øÒû!@Ž°_œ–‘š£ëfPxlumqnrohf^\“‚²¨©££ž¡ž··ÊÐ&… ©—›’Œ—“‡Úó €™‚‘…“„“‚“}•’‚ˆ–ƒ”Œ”‘•”‹“‹’‰”– %‡–e˜Fœ¹÷-š“ŒŒŒŽˆ„”ZÃYVF÷­’­­Ž£’ŒŒŒŒˆ†‘PÆowo|o‚p‚e€Z~Z~e‚n†Žz’Œ¦º‘º’¯‘£ŽûyüÓ~¤‘¯—º¹œµž±  {š~•‚“‚””}“|“€•“ƒ“‘’¡’¡Š›„”ƒ”“}‘‘~€𰤞™™«§¹´¢r vžzžzªv¶pµpÚi÷`•¢‘’’•’—’œ’¤‘•:>šB£B¥Y¡nŸn s w¢¤•ŒŽŒŒˆŽ„C½‚rˆ€{|y{wttlnmojqfrfrbs_u]sh{r‚åû ´K©¡¯ ¶Ÿ¶ Â¦Ð­…–b}û$]]}a€e„÷XC¿ƒ­yœn”yŒˆŒˆŽ‡±œ¡—’‘“Ž”Ž•–˜Œ÷"¿z³|¦¦§{¨w¨vŸ{—~˜~•„’‰’‰’Œ‘‘•ŠšŠš…™‚—‚—w˜m›l™f—_•`“^•]””Æ¡®—••¤­†ŠŽŒŒŽˆ„”XÃni\kJlŠì¡™’ŽŽŽŒŽŒŽ„|B¤’/ûxŠƒ‡‡‰†‚‰|Š}d”J÷ªùÞƒi‡y…yƒx„x€t~n~o€v„~ƒ~}txj—‚–˜¯¸ž¤¤­ª¸å†lˆ|€mu\w\maee€€“—£ ©©©¨¢ª›«œª›²š¹Þ‡iˆm‡q‡u€R†r„yƒƒ€„~‰ˆ}Œ{Ž|Žxv†¾x¥|Œ~‹‰‚ª“¢”™—™•–—’—“˜“£”°”¯•Ã—פšŽŽŒŒŽ‡‚’Z³heûh––—žœ‘“ŽŒŒ‡Žƒø—ù ü2LŽ­g›‘¥ŒºŒøhgg}|ns^ip–PŸ0ª‡}«|¢€š„š„¤}®v^hPgBd‘€Ì¢·¤—£˜¥™¦š²p’†š~£x£wšŒŒ‘Ž—–‹–‡•‰–…“ƒ’‚’‘’’{”w–÷
+÷ž¤¥ŽŽŒŽ†‚‘K´jXü_:º’ûû©…û˜¡’ª˜Í÷gûGû‰'Ž±`ž””Ž¨÷|ûJûø÷%ø,÷;÷gû;ûg÷S÷<÷gû<ÉûS÷;÷gû;ûg÷S÷<÷gû<ªû‘ÍžÀ ´¢´¢³¦³«³ª¨¦£¡› ˜œ’ûT„û"¨”ŽŽ’Ž’ˆö÷\«®R«`¨o§m®qµqµs²w°}™ž‘••’™™›ŽžŒ˜@–P™`žažgŸm¢n¢u~™~™}š~š÷ö•‘ŽŒŽ‰„’@ÏXKûºÍ ˜•ŽŠŽŠ‡ŽƒŽ3±2\ûçT«f˜‘œ Œ÷zbV`[^b^bSfIlcyˆŠˆ‰†ˆùÕùêVOý+9­d›‘Œª÷\ûûD¶=û%‡8ž’ “ –¢ø˜X§– •™”†äô¡œ””‰Ž†Hºf[û ÷÷ÐŽŒŒŽˆ„’ýJûÕ÷<÷û<ÆŒ÷;÷û<û÷T÷÷ûÄûT÷<÷û<¾–”‚¼·°³¦­¦¯£­ « ­š£”›“œ”– ûì…û3¤‘£“¢–…÷÷Ó§tžy”|”|•{•y•z“}€‘†‘Š‘•“––œ‰›…›†›xšmškšm˜m—è÷hŽŒŽŒŒ‡‘€–RÀ[V&÷S®•´–º˜¥“ŒŽŠ‰HÈmtatUvUuVyX}=v‡Š„Š‚ˆŒ}Ê’×™ã¡ûFûQŠ[Ž­e˜‘–Ž’’•ŒŒ—÷‚oˆ€€qyazar\kWlWnaqkmf‰‰ˆˆ‡†øÛù‘'û¯„ûD¦’¡•™†÷÷ï¡š‘ŽŽŽŒ…Ž€gý*À|ª~“”~‚„Œ„ŒƒŒ¦ ’š”›”•“‘Ž‘Ž‘Œ“Œ‘Œ—œùt¡›ŽŽŽŽ…A«û ý)}ˆ‡…††€‰zŒzf‘R•§÷ç—‚¦¦§ªª®ª®šŒŒür„ûœŽŒš‘§˜‡ìŠøƒ¢œŽŽŽŒ†€hœŸ©Œ”š›¦š§œ©žª›Ž—Ž‘ŒŽŒŽ…‘€”M»~_†}ƒvn~ozhtbtavfvlwkrgndø8÷÷…RˆpczXzXx]xexco^hWgW]YTZ“}½²¯«¢¢¢¢¢§¤ª¤ª¢¬¡¯¡­Ÿ³œ·œ¸—²’­’­¤Ž›¤žŽŽŒŒ…‘•Y²kdû“ŸŽ’‘Ÿ–®•­‘žŽŒ’Ž•÷O’ŽŽŒŽŠŽ‰ŽRÆcZû€BŽ°d“•–˜Ù‰|Š~‡w…q…q~dwUwWw_wixhxlyn–ƒ½Ç˜ž¡ªžv˜x”y”{’z‘z”oŽ‚†Š‰Œ‘Ž‘Ž””•–Š•…™~n¤]ªž¯ž² ´÷xü£¸~¨€—‚˜‚‘‚Œƒ‚Šˆ€®“£“™“™”•”–‘–Ž™œùrŸ™”‘„}’B©’ûý€ˆƒ†‡†‡€‰zŒzŒd’M™—ù&ûê„û§’ “˜”‡óø ’‘Ž‹‡‚øZùû}>­c›““¢²÷RŒ%ûï=Žªg’ £¤÷Øûûv ªi§¦Œ˜’Œ÷uûWz„.h\xVyOyû h…Š‚ˆ‡¾L²¤ª¢–¢–³ŸÆ§Æ§¼¡³œû*€‰ƒ‡…‡…w‰fflqˆ|ª„¦‚¡~¢˜~‘~}€„¶ž¤›“˜”˜›ø ¬C™k d¤_¥_­c¶f¶gºh¿j•›”•’™š¡ª•g”n“t•t“mœd¢d¢o¡xžwž{}›Ã¦ʪ®œ–œ’¥ŒŽŒˆ‘‚”[Àdfst\fEXq¬|q»dÚ÷G^¦’¡“š“†Öé÷KŠŒŒŒ‡’–PÍ[K@᧡‘ŽŽ‡„Lµg^ûFÙ§žŽŽŽŠŽ‡Ž„Ž4±‘'ÄûEñ÷T%ûTû&÷÷TûüŸ[¢vœx—{•z•|’}’|~€Žƒ‡‡‰‘’Š’Ž““““–Ž™˜‰˜…™…˜}šs™u›kb ÷ƒ÷Êqcû…Z‡¥o–‘”Ž“Œ÷ ’û‡\x‰Š|„p|o}sx¾T¡¬“™š›¢œ¡œ•—Œ™Œž€¤t¥s£y¢€¢€­ƒºˆºˆ÷"‰÷ƒŠ”§Ž™¢š´›‡•R‚U…Y‡Z‡N‰AŠŠCTŒhhk‘p•o—ml¦÷žœŽŽŽŠ‰Ž†ŽÕ÷ýûn4¬c™“”ž§÷^n†>¥ “š–ˆ¼¬÷\eˆQ¨•›‘ŒŽŽ‰»¢÷”’ŽŽŽ‰…’OÇ^Rû/ÞŸ™ŽŽŽŽŒŽ…Ž€B¥DDû\Õ ›ŽŽŒŒˆ„Ž=©Jûsû:¤x|””€•~•{•|’|}}ŽƒŽ‰‡’Œ””‘•Ž™Ž˜Š˜ˆ˜ˆ˜€—y—z˜x•y“w“y“y“ø_ü;ûe9®i‘¤œŽ•÷`P„%©”¢—›™‡¿Õ÷¡‘ŒŽŽ…“~˜UÀURû1÷÷VŽŒ†’”QÂ[T9ङŽŽŽŽ…€>©,Tû(×÷B÷ã“ŒŽŽ‰…’QÅXVûr ºž“’ŽŠˆŽ†Lµ‚e~ezf7KŽ¦i˜›ŽžËpLuXzfesÉU¤«÷(ºø;°f’’Ž‘ŒŒ“‹–ŒÚüt|€ƒcvFiÃC¨º¡©™™™˜˜”˜—Ž›† }¬rž¡€¦€¥€«‚±„²„¶‡¹Š»Š½‹ÃŠ÷“žš¡˜²”ˆ›X„D†0ˆ0ˆC‹UŽWŽ]‘f–f–o•y–y–{•|–øª¤ŽŽŒŠŽ‡ƒ’U²dZ?‰°÷·¡s™|ƒ…’€•}“}‘……~‘~‚…ŠŽŠŒ“Ž‘’’”•Ž•”™žw¢w¢c¨N­÷Fü¥¶`œ“™–Œ–˜Œœ÷
+0†û›˜”Ž•Ž”‘”“‡íã÷Ä”ŒŽŒŒŽ‰†NËORûT÷(÷€‘ŒŽŒŽ‡‘‚–SÄVRû÷ ˜’ŽŽŽ†=®ûDû ÷
+ü€‰ƒ‰„‡…†…ƒ†¯I¨¥˜˜Ë¯÷È…_‡\t^a^a^_j]t\tcyh|÷Nù h˜ihŒ€Œ~Š~~Œ€Œƒƒ‘†•Š“Š“‘”–”–˜ŒšŒ£ƒ£{¡y£u¢o£øà÷üd{‡€…„ƒ…‚ˆŠa’˜B‰{§„£‚Ÿ€ž€—€Ž‚Ž‚}§‘¢”œ—œ˜—˜’˜’˜Žœ øg›š”“Œ‡„T³m^ûO>¼ûü„ûW’—œ‘œ’—‘”‘„÷,øé¯û)™s•w’z‘zzŽyŽy}Œ€€Œ„Ž†Ž‡Ž‰ŠŠ‘’’‘’’‘•Ž—™™€Ÿv¦u¦t¢tžÓù"’ûü!„û4›ŽŸ”¤™É÷]M ‘Ÿ“ž–…÷ ¦§—©™«œ,û0†û¨•›‘ŽŒŽ‘Ž’È÷tD ’¡”¢—„Õ÷X™’‘‹‹‡ %Q¶i`ûUL¶·¨¦¹¯Ì°e¬n¨u©w°r¹o˜›˜–˜‘˜’žŽ¢Ššg“m”t–s•m›h h k£n¤§¬¡’—’•£±´Ë¬¡ŽŽŽŒ‡‚’NµcaûL˜¥™¦›¨¡““ŽŽ†‚@°‡m…hyXlGlGmMnS•¼Í›¡¥´°ÇžY—l~‘œn¦\XL7Fû @ø§¥’‘ŽŽ‹Œ…€”Y¯kcûF{ü°÷ÓûC÷§÷ƒÓûƒ¿û§÷Øû>÷§÷ƒØûƒ÷dü5÷m÷tûm+ø„v¤y£~ ~ zªw³÷Y~k}o}u}syqum¬÷W™…Åá’˜¢¢´ûº†û+ž”ž—›ë÷@ ’Ÿ•œ™†÷ ÷›  ’‘ŠŽŽˆ„Wµlfûž¼›µ—¯–¯—±˜³÷IŒŽŒŒŽ‰Ž‡DÑZPûoS®^¢–Œ’–ŒŒ–”Œ°ˆt‡^|Mp;q=e5X.÷8û÷æ÷ûæøD÷']Sû—a³_œ”—‘’Œ’“Œ•÷À–‘ŒŒŒ‰Ž‡ûÁøˆVŠkˆh†f‡f…\„SglÇU¨±÷׊?bˆb†d†d…k†u…s‚}~ƒ}…zˆuŒuc’Q˜‡|µ~¦ƒ‚““‚‘‚Ž‚Ž‚{ž®¡š£š¢–¢‘¡‘ ¥ŽªŽªªŽ¬Ž¬Ž²¹¢¢ŽŒŽŒˆŽ„Nµo_N°÷짠‘ŽŽ†‘€”Xµf_û‡JŽ°_— œ‘˜÷xgüû_­÷¤–‘ŽŽ‹‹ˆŽ %ºî·]Ÿ•˜‘’Œ’“Œ•øä‘ŒŒ†’˜HÊQLü”øè½\š¦£’ øcJüûä·÷¦™’ŽŽŒŒŽˆŽ„8¾…=ˆj‡h†h†h‚_€XboÑS¨°ø­†J†]ˆq€+†^ƒq‚x‡qŒvŠ]’E˜ˆ½y¨€Ÿ•–’ƒŽ‚Œ€¿˜­š™›œ•‘œœ Ž¢©÷©£ŽŽŽŒ…‘~•U³dXûÉø§Ÿ’ŽŽŒ‰Ž†J¿d]ü…÷UùŒ/Œƒ‹bŠAŠûxŠS†X„[„]|_waucwiwsxqvrtr”‚½·±±£«¥«žª˜©˜©”¡™”µžv˜y”|”|’}‘~‘}}{}…Ž‡ˆŠŠŽ‘‘‘‘’’’Œ”Œ¤z¥i§i¦n¢rž–òŒš¶ŽÐ±®±¬²©¥Ž’ŒŒŒŒ‡„“XÀs‚ypf^RÛÚŽÙ¥ ’‘ŒŒ†Ž€ûHûuˆp‰w‰}ˆ~ˆ}…~‡}~txl„€ˆƒƒ”…ˆˆ™‘–œ–œ¡‰§§‰¢Šœ‰ŸŠ¡øGûãjW€zrkc\d[NW9R’´ °¡«£«¡«¥ª¦«¦£¢›œšœœŸ¡û7†û•—™‘™’•‘’‘†î÷nœ`™j•t–t™užvv¢t¦t§s£yž•š––—“–“ž¥Œ•`˜l–u”w”nžf©g§r¦|¢}¢Ÿ‚œ÷®ŽŽŒŒŒ‹‰EÒZSûS잎‰Ž‡†1ª6hûk?­f–™Ž›Œ•ŒŽVøV®e“¢ûO„û,¨”œ‘••°÷tX¬•¡–—–†÷÷F÷#‘ŽŒŒŒŠŽˆŽJÎ^Uc䧞ŽŒŒŒˆ†/¯(SûtÛ®¥ŽŒŽ‰†0µ"SP÷û¥÷÷tûût÷ ÷÷tûø,÷k£r›w”|”|‘}}}Ž€‚ƒ…Ž‰‡Ž‰Š‘Š’Ž“’““‘•˜Ž””Š”Š”†•–—{—w—v–u˜r™›÷q¡m‘„‘~’y’y{|Ž}Ž†Ž†‡‰“ˆ•™š—š’—Š—Š•†™š‚ši£P¬üAûF«e’ª««ßmûMŠ„ˆ„…„‡…‚…„ÂU«¯øZ‰lŠp„y€‚€‚z†uŠrŠcU•‡{´€¦ƒ‚•‚“‚”y”p»œ©œ™š—š“˜–•Ž˜Œšš¢¨÷,ŽŒŒŠŽ‡GÐYRd”÷p÷?‘ŽŒŽŒŒŠŽˆŽNÎYTH“÷J® ŽŽˆ„K¾d\üSº‚,~(Šzˆqˆhû ÷ûˆ­÷qøBŠƒûpü8÷‡¨÷_ø-‚û^ü<ø“x\tXnVnUS;8"”ÏϺ¼¤ª¤ª¥«¤¬øùŒŒŒ‰Ž†CÖWKük´Ãª‘’ŒŽŒŒŒ‡‚‘ôùVûûå†ûB‘•š‘š“ŽŽŽŽŽŽã÷J;¨‘¡•š™…õøª¡ŽŠŒŠˆŽGÁi[û.zü_÷b÷JûbûJ÷{÷`÷Jû`ûüç“~Ʀ¸£« « «¥ª©ª«£©š§š©•¨ªªŽ¤Žž÷{ûš}‰‚ˆ‡ˆˆ{‹nng_‘ˆ~²€¥ƒ™ƒ˜…•ƒ’ƒ‘„“x”mª˜ •–’•’“•˜™Ž—•ù¨¡ŽŽŽˆŽ…D·kZû^E°Žû ûš'ƒ2y<y<`OGaG`\op|÷òø2Ž÷d÷wûdûu÷{Ž÷f÷rûf£¹‘z÷ ²é±Ó¯û<†û)ª’ •˜˜Âø;°–¤–™˜…÷÷N£¡ŽŒŒ‡ƒD¹n[ûí»¨À±ÃºÅ»Ùàï÷ ­™’ŽŒŽŽŠŽŠŒ=ÍdXûÛŒÄÛ²š‘Ž‹‹ŽˆŽŽ %.¼…uˆ~‚u|l|luep\p]l]i_i]]XQR”ÏÂ¥ ¬«²¸²¸¸Ä¾Ð÷èXCrhd^TUUTbfovovnwnxgŸ`YlathzizUsAk÷ñû÷‡øû‡ü<ø¶¹h«jœm `€‘†Ž”Ž—Ž–•Š””†•‚––y—o™q˜n—l–ÂøŒ‘›œŽžáû]p>j~†y…r‚ÂN¨¤®¥´¦û¿€Š‚ˆ…ˆ…ƒ‰~ŒpŒjd”…€¶v¥~’…’„‘ƒŽŽ‚¨–Ÿ—˜–—–’”Ž’Ž’Œ”–ø¶¦¸§º©†—ûS÷>÷ŒŒŒŒ‰ŽˆHÐ`Ql÷9¬œŒŒ‰†Ž(´ûûû X÷€ýSŽ؜ȜµŸ·®¢¦¥¦¥Ÿ¥–¦–¥” ’šœ¡T‘{šv¤o£qŸv~›}¯tÀj–˜’”“Ž˜˜˜šŒŽ˜U”UŸT¨U¨h¥{¢{¡~ž‚œ÷»ŽŒŒŒŒ‹‰ŽHÓ^Qûv£ŒŽŒ–ŒœŒœžŽŸ÷$S¨’ ”—–ˆÒ÷J«¡Œ‹ŒŒŠˆŽD¾nbûÍI´,ûD†)­” –“–ª÷ ŠlŠyŠ|‰€Š€‰‰~û€PŽ§g–Ž™ŽœŒœ”ŒŽ÷PŒƒs‚luiiejebo[y[zd}m‚ø«ø¦ûÙì÷ÙûÙû ÷Ù'ûÙûø±g“œš˜ìjˆL¢ŽŸ“›™‰´©÷q‡H¤¡’œ–‰±¬÷fŒŒ‰Ž†GË^T(ר ŒŒŒŒŠˆŒ0³@Dû࢞ŽŽŒ‹‹ŠŒŒ %9ª8Lû ¸I´c“¬¬¬ùˆŽŒŒŒŒŠ†KÊXXûÀ÷
+¡òíë)÷ +ãë¾ûaí÷)÷ ûã÷­ù=«f’¥£¡äûRE·ûüF…û:¦Ÿ”˜—ä÷´=˜ž”œ”ŽŽŽ†÷ø_¥¡ŽŒŒˆ„S³obS÷÷BŒŽŒŒŽ‰†KËYRûسýU÷÷´ûû´÷k÷ÉЇ-Šd†g‚ik‚s„ƒ}ƒƒWª¦¦ ¦™¦›¦•¦‘§‘¦¥££©¯Ëûao‘{—‡–ˆ«‰¾Š%ûDø÷Ëû÷û†~g‚Œ†‰‰Š“—÷QÏ÷ ÷Lªh‘¢£Ž¢÷?ûŸûIG°û ü|~•ƒ“š‡ž‰ŸŠ¥‹¬Œ÷ ŒÍš“š””’’’’”oŸ†Ž‡’‡˜ˆ˜‰›Šž‰žŠ¤‰©}Šˆf†BŠq…y‚€m‡ZŒZhŒyŠwŠ€‡‡‰”šø(÷ST©“œ‘Ž…ï÷i¡žŽŽŠŠ‡ƒP°o\ûH´ø°‡€ xš}’’‚“~’{“|‘~€Ž€ƒŽ……ŽˆŽŠŽ’’‘’Ž””–—Š–„™}œ~œdŸL¤÷›¹{bc l;m7oO‚tƒ|…ƒ„……†„ˆˆ„‚Š~ƒ}ŒŒvˆ~¸¥’€’€Œ}Œ}‰~‰~‡~†vƒl†zŠ~ŒŒ‚’„’„’…“ˆ’‡’‰’ŒœŽ“”Š›Š›Š ‰¤‰¤Š¥¦Š¤ŒŸŒ™Œš˜˜˜’¦—´£à’¦—°»›»–ª™š‘Ÿ“¥û[÷Cz™{–~–~“yv‘u}ŽƒŽ…‡Š‰’Ž’‘““‘’”‘•Ž”Š”Š”ˆ“‡”…”–wšwšo™f™÷Ãýƒz†€zytysvrtrsrbfQZ‚³ž­ž§¡¦Ÿ§¢¨¢¨££Ÿ œ Œ”‘ˆ…û—÷ ¯b•¤§¨÷zû^|‡ƒ†„…t‹e“e’wŽˆŒˆ}­‚¡ƒ—†•†”„„„ƒŒƒƒƒ‚®•¡••“••’”•Ž•˜œ÷a›”Œ’÷ÀŽŽŒŽŒŽ‰…GÅWYü«hø¹±e’¢¦«÷û:B°-û‡9¥’ž“—“²ø,k‘›ŒŽŒŽ‘‘’“Ž†Ô÷£Ÿ’‘ŽŠŽŽ†‚‘R±n^+÷÷…ŽŽŽˆƒ’GÄXVüÏûÙ÷<ìû<Â÷<îû<÷S(÷îÁûÁ÷<òû<üYû­c˜‘˜—Œ˜ŸŒ¦ø‘ŽŒŽŒ‰Ž†MÄX[ûÏ÷¢ûIˆ€¼b«mšyšz™x—x¤`’‘…ŒŒ‘””””™ŒŸœ…ž~ž~žL®û¼÷E÷±8· û‹†û ‘Ž”Ž––’Î÷e7¡Ÿ“ž—…æ÷¥¢•“ŒŠŒ†”PºiXûXûÆ÷°÷eû°Xù^=¼‘*ûN…ûœ˜Žœ“Œ’´øY¤’¡”Ÿ–†Þ÷L§¥ŽŽŒˆ„H½gTüû—÷€øû€Nû)6»‘ûûƒ…û¤Ÿ”™—Â÷q=£’š‘Ž‘Ž‘†÷÷|¥¤’ŽŠˆ„F»hTû[ûÆ÷°÷qû°®÷̱]¨•’œ«Ž»÷™û¥„ûK®•£”™“…÷.÷§øK“ŽŽ†’€•AÊTKûËø÷𔌌ŒŽ‡”BÍTLüÁ8­a¡•”§¹÷oüûìÖ÷À®^¡h•q”s’tvvz}Œ}ƒˆ—–—š•™“•Ž‘–•Š–Š–ˆ–…—…–š~œ~œ}›™}˜r¢fªø¡ž{]„v|ju_u]s_q`—ƒ¹ÂÁÏÉÜ©’ŽŒŽ‡‘€”÷°øÙûû늈„~€r€r‚}„††„‚‰€‰…ŒŒ€Œ€Œ~£ƒ¡ƒ•†“ƒ’’‚Ž|Œx‰x‡s‡qˆzˆ†x‰}ŒƒŒƒ„„…“…•†—„”ˆ‘‘‘”•“‘Š‘Š–ˆœˆœ‰žŠ ‰°Š¦žŒ ¢£”®™¸š¹’¤ŒŽØ÷™û™Q¦qœz‚‘‚‘€‘€ŽŽ€€ƒŽ…Ž‡ˆŠ•Š”’‘›“œŽ–Œ–Š“‡‘‡’€•y˜x˜m›aœÉ÷Z ušy”~”~“}’|‘|~~~Ž„ˆˆ’Š“Œ“’‘“‘•Ž‘˜‹•ˆ”‡”€—x›y›j Z¦îü²‘ç«Ú±Îµη¼­«¦žt u¢y¢wªv³r´s²x°}™ž–—’‘’œ¥Œ˜Z’b’l’k’h™džcžqš–~–•€•¡’Œ‰Ž†ŽG·}wxutipkpipisjqNg2[÷Í(*^1i:s¹P¡žœ˜—“—“¢™­ ®Ÿ¯¡²¤û™÷Á‘¸¤­Ÿ¡˜ ˜ ™ŸšŸš´ªÈ»t‡?Œ–›‘›–Ž†µ¢âjÄp¦v¦v£w y“ƒ‘‡ŒŒ‘Ž”Œ™—„œ|¡| 4¥û4©Á÷±š’ŒŒˆ…DÇYUûFÇ¢š’ŽŽ‹Œ†=¨7hûUEªb–ª¯´éwmolhjhjtw€ƒ‚y}qxrxx}€‚÷û=œ~˜•“”}”w”y’Š‘‰’Ž”•”“•–Š–‡–‚˜ƒ—išOžµû½®¡‚–ƒ•„’ƒŽ‚‚‚Ž²›¢–’’’‘‘“Ž‘Œ•—÷Äv³x¢{£y¡{ž{ž{š}••~“…Œ‘Œ‘””Ž—Š™Š˜‡˜„—ƒ—q™]›_šk–yxm“b”Ÿ¾ ¾¡½ ¨”ŒŒŒŒˆ…’]¿vu†„|~rxrxrzq|÷Ÿ•“ŽŽŒˆ†Ž7¯ûû‚|‰†‡†ˆƒˆ€ŠŠjV–÷äÚuj„vwgngnhqjsjtdt`u’}ä®Ì©´£´£»¨À­¨”ŒŽŒŒ‡„‘üö­`–¥¯‘¹ù›”ŒŒŒŽˆƒ’9ÔWHûøa÷y–ŒŽŒŒ‰Ž†7ÔWJ#छ’ŽŒ‡„Ž,²‘ûXû©Ö£“‘ŒŽŽ†Ž1¯‘ûfû.;«b•¥­¶îüaûGøšû©÷)÷©£û©÷÷©û©¢÷÷©ûBü!«{Êj¢~£|¤y£x¡užqžq˜|‡†‘‘ˆ‘‘Œ‘‘‘—‘—›Š ŠŸw¡d¢d¢Y¡MžMžk•ŠŒ÷eù‘ˆhŠx†p„g„fd}a{b{dzfzf}q€zynˆ††„†”€«¯ªµ©ºßû1 F©b–¨¨¨ÆŠûs~ŠŠ…Š„‰†ˆ‡ˆ‡„…€‚ËP¢¯–› ¥¬®ÄÈ’’•–™š–|€x|uytxntgo÷†÷E—’ŒŒŒ‡‘€•QÀ]X<÷1÷2”‘Œˆ‚’PÂ\XûL¬Å•˜¦ž¶÷o–‘ŒŒŒŒˆ„’PÈ]Vû•¡¼Ž”™”¥—ŽŽŒ†Ž‚ßü2“~¶œ©š›–—œ›œŸœž˜§“®“®¯Œ®®§Œ ÷6û~tŒ|„„…‘…“„žˆ¬ŠÄŠ²  –ŒŽŒˆ„‘„“˜}žw‚|…‚Š‰‚Š|wŠ‡ˆŽˆ‰ŠŠ“–÷f¢ ŽŽ†’X±hYû7´‘$„ŠuŠf‰g‡hƒj…izoruqtoxn{ô`:ûx…ûšž’šŽŒ’Ò÷2¨”œ‘‘š—…ç÷r¤ ”“ŒŒ‡‚‘Mµf^ûu|ûª÷“÷û“µøÛ°`–©±‘¸ù~–‘ŒŽŒŒŽˆ…’NÍTOût›—žš¢œ¢œ¥ ª£­Ž’ŒŒŒˆ…@Å~q|r{t{slf\YûLŠ˜¬•”Š’Š’‰’ˆ’‡’}•qšs™hœ_ž…‚£vz˜~—~–|–{–{–x–tû“Œ¸1ûüD†)¢ ‘”‡Û÷:÷‰û<‡‚ƒ„„„^8œˆ|¯‚¬‚ž‚’ƒ’„Ž„Œƒ…Šƒ‰ƒ´—§•™•˜“’œ¤øšš•”‘ŠŽŠŽ‡‚R­k_ûfzû9÷"÷‰û"û‰û&÷÷‰û÷k÷|”•ŽŽ‡ƒ<°‘$û…$¦’ ’™”‡ÔwûO¬‚¡„•…—„’„ƒ„|¨“Ÿ’–’–‘“““•–™ø¿¡™ŽŽŒŽŒ†Ž‚=°“û4üE~‰‚ˆ‡ˆˆ…ˆ…ƒŠdD–ºø”½`’…™}tŸt—z‘€‘€„Š•ˆ“’“‘“Ž–Š™™‰—…•‡••x•x•x•v”v”v–t–‘üȆ¯„–„–„‘‚ŽŒ‡Œƒ€€‰z†t‡t†y†}€n†wŒ€Œ€’}š}š{–ˆ“’”’”Ž•”Œž§·ŒŒ¡£Œ¥Ž¡Ÿ žœ•°›Å›Ã–±œ‘œ”©˜´¬o›–—‘’’–ŽšŽÊ–ZŠ‚j’Qû'nE€¶j™–’¡‘²“ꟓWŽvuss”n—h\k_pbtbu[sVr’|ö°ë¶ß¾¡f l rŸq«l¸h¸gµw³‡²†¢Œ‘’‘ŽŒŒˆ‘†”…”„˜ƒœƒœ…ž†Ÿ‡ ˆ ˆ¡‰¡‰¥‰©}ŒŠK‡AŠy‰}€‰€‰…‡‰‡‰~t”u•t›rŸs¡u¡w¥v£z¤}¤¾°®¦ œÅ¼‘•’™•¤‰ŽŠŽŒŒŽŒˆ‘‚”OÅyp‚{zwttttgj[b~´‚¦‰™‡™†­ƒÀ÷Û̘Ž’ŽŠŽˆŽ…KºgNûƒ^„ƈ¨ˆ§‰¨÷ÅÂŽŒŒŒŽŒŽ…‘€’J±kTû[gŠ¦Š‘‹š‰¡¢Šœ•–‹œŠ¢ŸšŽŽŽŽ„Ž}C¡G‘HEŽmû
+|Òš¾˜©–¨–®˜³œ³œ©™Ÿ— —¤›¨ž®l®q¯s¯u¹rÂp¡˜˜”Ž“ ­’–G–T™_žaž]§[²¯»˜š–•Ÿ– –¢–¥–¦˜¦™¨®™’ŽŒŒ‡‘”LÁ]^û·ŠR¯f––Ž–Ž“c~’t™l—k—q–u–w kªbIZ€‚nyZrZq@l$f÷ªøo÷›~`mƒy„yw€u€vzƒƒ€~}zg±r©~Ÿ~¡€ƒ‚›…š†–‡–†„£aø7)Œ~Šs†h‡g…nƒuƒu}vxvxvmsdp²›«§ ¥ŸŸž™œ—•Ÿ‘¡’¢¢Ž¤Ž¤Ž¬Ž´÷WûYw{–€•€ª„À‰¤ŠªŒ°°ŽžŒˆ…’xŸš|“††„‰…‡‡~‰~ˆ‹~Œ{ŒŽ„‘„’‡™¡÷ž ””‹Ž‹‡‘ %QµhXû;±ø£ªr”„•–{–{•{‘|“|€…„ˆŠ‘Š‘’‘’’“Ž•œ‰‚ƒž\¤6ª÷¬÷ NûDeûxX~e„r„s„yƒ~…~ƒƒƒ…‚‡ˆzŒzŒy‹wŒŠ½©“€•€|Œ~‹{‰uˆwˆyˆ}…rˆz€‘€”~”~–†˜Œ˜”‘—‰žƒ½ˆ‰ Š¤‰¡Š ŒŸŒŸŒŸŽŸŽ Ð®÷ ­÷¤áš‘¡’©ûWô„ƒ³^”€”’|’|’|’{’z‘‚‰‘‰’’’‘“”Ž•Œ•”Š•†•ƒ•‚––z–z–o›bžôýÃ’}º¤¸¨µ«´ª®®¨¯¨±©¶«½uŒûˆ„û š“’““‘ˆë÷¾–œYy›l¤^¤^¨hªrªr¥wž}œ¡Ž’“˜™ž¥”\›h™t–u—ušsœuu¡v¦v¦~ž„–„—ƒ› ÷¦’ŽŒŽŒŒŽ‡ƒ“CÉ]PûQ㤛ŽŽŒŽ‰‡1­3ŠIûjG®e”«£š÷Œ‚o„xszpzptmpkokywƒ„‚ƒgnKXáø’ƒ±¦¨¢ œŸ›š•———¥ª´¼ª”ŒŒŽŒŽŠˆŒ=¾„qˆƒƒz}q}r{pwoynlga_ðø…¹~ƒaŠ„‡…~…~„‚€uo„€ˆƒ„Œƒ‘†”†”‡–Œ™’—’•“‘–’•Ž—Œ™Œš‹šŒ›ø/S “„ªª¢¡™˜š˜š“œŽ¨–Œ’ŽŒ…’~–DÂ`]û+ûµi§rš|š|˜z—x¡e“’…‘’Š“‘“™”™™†š‡™‚›|›|T¦,°¬÷“‚«¢¢›š™š®¯ÁÅûä…û¢• —ŸšˆÚø©v’‡”‚—}–}•}’}~“‘„Š‘’‘’Ž–Š˜Š˜‰–‡”†”‚“}’|’l–[™›Û÷¯ž“ŽŽŒˆ„’NÀa]û?A®e–ª¢œ÷%oL‚x{kr^r_uixuwswtutwtyw|z÷ù«`Ÿh“n•dŽŽ…‰‘ˆ’“‘”’‘“”•”Œ’–‡•…•ƒ•—yšyš}•ƒ€’|“÷û.‘+ûÌ… ¢”™ŽŽ’¸÷ûŠ…û ¨š —™–ˆÙ÷‹÷I¢”š‘‘Ž’’‡Î÷Ñ¥–“‘‹Œ‹Œ…• %P¼h^ûŒ÷¥“Ž‹‹‡ %6°,ûû~ü÷=÷û=û÷U÷6÷û6ÂûU÷=÷û=û÷U÷6÷û6ødø(ûÓ:±e”§¥¤÷¯ü ƒû1¨’ž’’’’†÷"÷þøŠ˜“ŽŒŽ‡‘‚”>ÐUFû¦÷­££””ŠŒŒ„|7¨‘û¢Ò–˶»¯©©«¨ª««®ŽGû–…'§–¡•›–Õø$û¬˜œ“ŽŒŽŒ“‘ˆÌø¤ —•‘‹ƒ’|—Rµ`Püy”á÷˜žªÂ»æøFŽŒŽŽ‡’€–IÑHCý+7Ž´d–Ž—Ž™ŽŽš”Œ÷—j8lHnZnYm]k`k`rkxuxvwvvwvvorhnù[#ü$÷íø$æù#ûüz‚û  ‘˜“‘““‘Ó÷JC¢’ •œ˜ˆÓø† ™”‘ŠˆŽ…I¹l]û/~ü°÷—÷Jû—ûJ÷°÷÷Jûø(÷ û†=Žªh‘¨¢Žœ÷püŒ~ˆ‚„ƒ……|‰tsuŽwŽvŽ{Ž‡€·z¨€Ÿ€•ƒ—’‚€€ŽŽ}º›¨œ”œ”œ¡¤ø©÷7“ŒŽŒŒŽŠŽ‡@ÕXJ\÷^¤’ŽŒŠ‡Ž‚0±’ûû•û¼ªa‘ƒ‘~“z‘y‘yyzz|Œ|Ž…Ž‡ˆ’Š–ˆ•‘•˜•˜‘™Œ™¨§t¥u¤h©[­º÷G®c”¨¢š÷ñƒv‚ptff]f\YjNuNwDu;uŒ}ۖԛ̠̠¾¥°ª°ª¢¡”–”—–›—ž÷WÝY¼[ÃN”‚‘‡ŒŒ‘Ž’‘’’˜ŒžŒˆ™„”…•y™mžnžh›c™cšQž?£‘ž’’žø
+øŸ›’ŽŽŠ‰Ž†7¯‘ûûÀqˆz…ƒ„ƒ‚|€÷Kø”·¸ššž¢¡ª¡ª¤¯¦µ÷û7û Œ>±Ž4Œû©…ûª—œ’ŽŽ‡àŠ÷Á÷ü†û.¡”™‘Ž‘Ž“’–•„÷ø ÷&ûʈ‚„†„…gH˜‰}¶z¤}‘~‘~Ž}z°—£–—•–•’•Ž“Ž•Œœ¦÷À¡ ’’ŠŒ‡„JµjYû÷7÷¡”ŒŽ‰…‘EÎWNûתä¿Ž•’˜£—”ŽŽ‹Ž‹†Ž %4®…k‡wƒmdd{cvawcyi{qzrtjnc°ø%­e”žœšÕûôsˆz†€…‚‚~„ÈI£±£¬¤¦£§´¸ÅÈ‚˜^gWbP\Œ÷ü¥¡ŽŽŽ‰Ž†ŽI½hV6»÷͵\‘„“|•u–u‘x}|Ž€…Ž†ˆ‘Š‘Š‘‘‘‘‘”—‘š—Š•Š–„—€ššz™všu™sšqš÷+ûS«d“žžŸ÷±.ŽObsul’f“e“k“q’r“t’x’x–u™t™t™wšyš{›yŸ{y›‡‡–Œ‰—„œ„†›‰™Š˜Š™ššŒŽ Ž¡©‘±€ŽvI~`†w†x†…Š…|—¤st¤v´yÄyÄ€¶†¥‡§‡©‰®‡®‰§¡Š¡Š¬Š¸÷ˆŽŒŒŒŒ‰…“MÒZKûŠ÷@œ”’ŠŽ…‚Ž8¥‘<ŽkŽVŽBûÅ`ü³·?¬ °œ²š÷,ž“©—´›†˜_]€p„‚Š‚‰x‡m†÷²÷”‘ŽŽŽŽˆ‘„’NÈ_QûDSªg’š›ŽžÏû¿ZY‚W‚øSùk§p‡’•z–z’}~~„Š‰‘’‘“”—Œ˜Š•ˆ”ˆ”‚”|•}–o˜a›Æ÷ó®d¢“Ž“¦÷IkDqVvjvitkqmrl_bNW’Ʋ»°¯­¯¯¯µ¯¾÷óûh‰‚ˆ‡…‡‰{{\–=Š|¼©ƒ ‚—–€’‚ƒŠŠ‚°–¤—™–—–”—––˜™÷~÷LŽŒ‰…‘MÈ]S=¼¨žŽŒŒŒ‰‡.³1Šoûä ±–ž™©œ´ø¡ŽŒŽŒŽ‰Ž‡IÍ[Qü+˜®˜²˜´÷ûŽŽŒŒŒ‰…’KÉXSû€©÷ø*‘ŽŒŒŒ‰Ž‡EÎYTû¯Ê£•ŽŒŽŒŽ‡‚‘7¹‰lŠ‚ŠƒƒŠ„…o‚[û€>¯g’ž¤¨÷]‚dffûB@Ž°g’ ¢÷"|Tˆ„„w€jûv÷šûg l…~~~‘cŒ„‡‘‰‘‰’Ž”’”“‘””’˜Œ˜‰•‡—ƒ—}˜}˜qœd Ê÷°´e”Ÿ ÷£û—‚û8°š¤—˜–„÷÷˜÷ìŠ^Š†‰q†]†]†l†|†{…€ƒ†|‚Y4™‰€¶z¥~”‚”‚‘ƒŽƒŒ€Œ€¸™¨˜™—™—–œ’Ÿ’¡‘§­¯‘½“Ì©ž’ŒŽŽ†‘’I¹i[< ÷Z¦¡’‡ƒ‘M»jXû_÷:§žŽŽŒŽˆ…Ž-²’û
+ûû‚S¯g˜’Ž™ ÷aûnûÂ÷ý÷n÷mvûn~ø(´z­y¦x§w¥p¥i}•“„‘‘‘’š‘š˜ˆ˜‰˜…—ƒ•‚–v—k˜l—[–J•¤û:‘}Π¿ž±›¯©¢ž¢žŸžœ¼`‘…–~œx–’…ŒŒ‘–‘–Ž–Œ•—ˆ–…”…–”z“z”y”x–¦´–š¬¦À¥™•ŽŒ†’€”P¼j^#ˆŸ­œ”ŒŒŠŠŒ@®{XŠ††~‚tûC‰¬c™”’›Ž¥ŒÏqX†„€xxlÊr¯|–„–„•„–„hd}{txjvjvq{wxph}÷N÷’Æò÷Žx\|l‚{‚z€z€zû¸÷n–~ʽ˜•£¡­­¬­­²®¶û†=¨“ ”™•‡ÂÏÀh˜‚™}˜v™v•~‘†’†“”•••—ˆ˜ˆ˜…—€–€–}”w“y”z‘}}||±÷b”ŒŒŽˆ…’WÃaYû ÷K¤–š‘‹’{’7­(û)û4E¯f“ œ™æraxl|w|xytvrur{yƒ‚‚€}€ËøI®c”€’~|™W‚‘‡‘ŠŠ“––••Ž˜‡œ‡ƒ™~—~–mž[¤÷þ§ˆˆŠŠŠˆŠ…Š††ƒyƒy…~†‚U0ˆˆŠŠŒˆ‰Š”“›šÝß’”‘Œ¤ŒŽŒŒŒŒŒŒˆŽ„‘û*ýì}դ ¯ž¯ž«¡§¤§¥¥§¤ª¦f¤k¥o£nx•ƒ”–‚—‚¤”š›ŸŒ¢ˆ”`Ÿm›y–y—x™x›xš{™€˜€˜~œ|¢§È‘—“¢•®•®”®‘­“¯•É™ä÷
+ŽŽŒŒŒ‰…‘HÐWOûs£Ì Ãž¸¦—‘ŽŽŽŒŽˆŽ„5ºz+†o„n„o„m€i~a~c~g€mmxcqX˜ƒ°Ã¤³—¤—£˜§™«–4Žn‘j’d“d“k“q“q–l˜hrhoimimifn_s^sbwe{ø<ù:û ˆr†jƒc‚c„n…z†zt~ntÇ„ž‚«¸¸‚³‡¬…¬‡­ˆ¬¤D“‚ÌÆœšºÁØêû\„û¥•›‘‘ŽŽ’’†ß÷L±p¬i¦b””‰’’’’‘”Ž˜Œ‘Œ‘Š’’ˆ’†”…”“z“z”j•\–Ó÷9ŽŒŒŽˆ‘„’OÃ`VMЗŽŽŽŽŽ‡ŽB©5_ûDŽ«e“ž  Þt]ˆƒ~uvivg{r€|{€{}{zwvrøTù;ûŠ¬€„h‰€†€ƒ~ƒ~subk†ƒˆ„†Œ†Ž…„…”ˆ˜˜Š™’œ˜œ˜”¡¡ŽŒ™÷Áû†$ª”¡’™’‡Û÷÷Ùm‚v†€†€„~ƒ}“…¦¬Ÿ•”•””‘““–šŽŸ’ŒŒŽ†’€•JÃd]ûÒÕ÷Æ‘Œ‡‘”JÈSRü~F°e“Ÿž÷rû°û˜s÷f£û`ãŠs÷f£ø8û,j_ûyJ¯ûûȈ.¥” –œ–³÷…@¢“š‘’‘‘‘‘‡Ö÷⥢ŽŒŒ…”ûÑû”ó÷…#û…÷ï÷…'û…û*÷…ûû…­øÁ÷_£û_û÷_¤û_Ãø`­d”Ž•˜˜’ŒŽ÷2r"„k~ex^x^vdvjvixp{xzwjiX[’‚¿¯±¨£¡¢¢£¦¤­£«Ÿ«š§š©™©™­—«¾¡Î¨“†‚’FÁbVû8Š÷:ü­Ì‚±}•x•x’yŽ|¶œ¥™••“”’–™—™šŒøÀ³û%’r–jše›cšl™r™rq o oŸtœzœz§t±ož š˜––¤Œ±Š–^™h™o™qšqœs¡tŸp©k³m±u­¥§€£‚¡Î²¦œÂ°ÞƱ‘ŒŽŒŽ‰„‘;ÓdQ‡…~|vsvtxx{{{}uwntu¾ƒœ}Ávåí¦’ŽŽ‡Žƒ0³’û6ý r‡z„„ƒ|ˆuŽtŽwŽxyvŽsŽ÷ûž˜’’“‘”’äù û
+÷CûC£÷÷Cû©û#–‚ÈųŸ¾ ¾—¹´´Ž¯¬÷2AŒ”Žž‘—‘‡÷ ÷¦¡ŽŽŠŽŠŽ‰‡ŽI¶h^ûŠ÷ʛʱ”œœšŽ–ŽŽ–”Œ‘‰‘ŠŽŒŒŒŒŒ‰Ž‡SÆsyo{k{j}b{X{E»’û.2r‹d‰VU‰euŠu‰sŠo‰q†i„eƒc~izlzlukph÷Gø>÷Q÷,ûPû$ü<’~ï·Õ´»³»±«¯›«›«–©‘©’§¯µ¶³Œ°÷ŒûÕ…ûx®”£”™–†÷4÷ü÷<ŽŒˆ†FÑZOûŠ÷d¸’·’µ“µ“«‘¡¡šŽ‘’‘ŒŽŒŽŒ‹’ŠŠ‘‹‘Š‰‘‹ŒŠŒŒŠŽˆSÔszix]w_wQzD~Iµ1ŠûrŠjŠaŠa‰cˆd‰d…dbbtdfegdflfsesetevª÷…”‚³´§«›¢œ££®ªºûý…ûgª—Ÿ––”†÷(øœ›’’ŠŽŽ‡Ž„g¡§Âš¦¢¿ªØ¦•’ŽŽŒŒˆŽ…4½…i‡w€dwQyQxZzdydyfwjyin`eW÷÷ºq•”“‘ŽŽ•˜¬—ü-}Ž~~ƒ©†©†ÍŠñŒ÷ŒÔ¨’©“•“™‘—‘˜˜w’~“„”„•ˆ¦¦‹ ŒšŒ›‹™Œ˜zˆrˆyŠ‚†f…hˆwˆ{ˆ~ˆ†‚„†„†ƒ‡‚ŠŠp‰_‰_‰dŠhŒTŒeŒwŒx}„„‘‡’–ø+÷²ûr…ûM›‘¢•–‘ŽŒŒŒŽŽ‡÷÷¦÷&½ˆ)†9ŠmŠyŠ…‰rŠ‚‰ƒ…‰ƒ‰……††‡€ˆ{{rj‰}¨ƒž„”„”„‘„ƒ‚ŒƒŒ‚¶›¥š”™”™—Ž”•™ŒœÌ’÷›Œ£Ž¬¤Ÿ’ŽŒŒŒ†‚‘H¸lXû]÷x¡™’ŽŽŒŽ†Ž=®‘$ûjûf÷¡›”Š‡Ž‚:­ûû
+÷3¤œ”‘ŽŠŒŒ‡Žƒ’L¹h]ûx„û«÷ ÷Œû ûŒ÷#÷÷Œû÷+Ú–¨–§•§¢˜’ŽŠ‰ˆ>¸†h‰‚ˆz…r‡rƒleepJa0”„¯½œ¤¦½°Ö›v£nœvyž|ž{£|¨~¨}²¼„¼„Û‡÷‡÷‰Õˆ®Š’ž’š’•’•¡”®’˜û‚2†SŠUŠZŠ``ŒcŒfŽeŽc“`™÷0÷?ŽŒŒŒŠŽ†MÈ_YJ÷‘÷KŒŒŒŒŒŠŽˆŽLË^ZûØP±d”™š›÷0û¹oˆ”{š{šzžx¢÷–¤’Ÿ”˜•­÷;`ž“—ŽŽ”˜“…ó÷RŸ™’“Š‡Ž„‘R±oaû+Lª1û\Àl÷÷;ûû;÷(÷ ÷;û Åüöۦʨ¸ª¸©¨°—¶˜·“¸ŽºŽ¹Ž³¬Ÿ›ŽŽ‹Š‡„ŽF¦L‚Št‰h‰h‰p‰yŠzˆx‡w†w‚q~k~lmn^q^r`udzø€ù«^RûäIŽ´b•ª©¨Ô‚`†oˆ}‡}‡y†tgH«3û[†û˜—–—’Ž‰Þ÷Ž÷{ŒûŽ‰ûš“—““ŽŽŒŽŒŽ†÷÷L¦›’ŽŽŒŽ…“T®leû2Õ÷ ÷ŒŒŒŒŒŒŠŽˆŽû–üįr¢z–€–˜~™zšz–~‘€’€…Žˆ“ƒ’‹’’’“”•Œ‘Œ’’’Š“ˆ“ˆ’†’ƒ“ƒ‘v—i›h›i™i—³÷‚•„¦®¡©š£š¢ ­¤·ûü…ûi¤”¢—ž™†÷5ø7›š’Ž}‘nš ¼¤É©Ö¥˜ŽŽ‹‹ŽˆŽ %9¹€P†rƒlf€f~b{_{]{d}j{is\iP÷cûT—~ÏÅžš¡¡§©¥ª¡¦›£›¢œ¨«­—£’š‘š“ •¤ûèûLµb–¨£‘ ÔJ„ûV¬”¢”š–„÷÷
+tF€l{ctYu[o[h]h]a[XY˜÷/€¶ž³¢°§¯¥§¥¡¤Ÿ¤™‘™’—‘™˜Æa‘†žz¬l”‚“‡Œ‘ŽŽ“Œ–ŒŽ‹‘”“ˆ“…’…’’z’y’f”R—žžŸ÷EŽŒŒŠˆŽKÉ_YHÀŠ’ ­÷1ŽŒ‹‰†LÉ_ZW‘Ú¦œŽ‹‡Ž„Ž0±Ž@Œ„‹rbûOŽ´c”¤££Å‡JŠ†‰zˆoû0SŽ±e”¨¥£ç†s‡ymzazaofbjbkgqjv÷hóûû@‡û0¢’ ”ž•¾øF ’˜‘Ž’Ž”—’†÷%÷A£œ”’Œ†’‚K´i]û´· ¯ž¨›¨›¦Ÿ¦£¦£œ£”£”¤’ Ÿ™TœalŸm¡q§t¥t«v®v¦•œ¢”¯Œ—g‘p‘z‘y‘v•ršršw™|™|š~š€œ€œ„—‡”‡”‡”‡–÷”ŒŒŒ‰ŽˆŽKÉ^YûM“ÇŒ‘ª÷‡’Š‹„’FÌ`Wû“Ý¥š’ŠŒŒˆ„Ž.³F†9SKŽ³c£’¦¨†`‰qŠŠ‚Š‰|YUŽ²f’˜—Ž•”Œ“‹’Œl†z|qqisjopmylwlykyP|û¶÷øûü÷-÷øû¥÷mŽ|ÐÅ›½›»™¾¢¾¨¿©¾ª¾«°o®t¬z¬z·xÄvÄvµ}¨„˜¡––•›”š“›œŽ–yi|Œsk‘kn’p”p“p”n–n–u”z“z’y–v™Æ¿Ð̘˜ ž§¤¥“’Œ‰Ž†Ž<Çc[û«®¿¨–œ’ˆŽ„9¸}^‰……}€u€u{luctcxlyt{upkg`“ƒ¬¦«ª«¬«­°ºµÇ°@“y£h´Vsvltdsdqcsasas?mûhøt÷“b´xp²jÆ÷žkbso|z|zrthlüZüð“‚»¢¸¥µ©µ§ÀµËÁ¡Ž”ŒŽŒŽ‰Ž†DÄiRg\dedfY`L[øA÷Üû˜G²f—›Ž¡ŸšŒ”÷Wûn€‰ƒˆ‡‡ˆ€‰yzŒh‘W–ˆ~Êq—‡”„‘€‘€Ž‚„„‚Œ‚¤’ “œ—œ•••“’””÷š÷¿ŽŒŒŒŒŒ‰Ž†BÑ\QûGÙ˜“‘Šˆ…Ž7©Ž2÷û.ºt³r¬p¬p¥pŸoŸp˜z††ˆŽŽŽ“‘’‘Ž™ŠŸŠ ‡œƒ™‚™zšqœpœn˜k—k•d˜^˜÷ù‘û üå…ûS›’Ÿ““Ž–’™•‚÷ù7ùýa„ˆ…„ˆ…‡‰~Š~Š]’<˜‰{¬–€—€“ƒŽ„€Ž}¼œ©™–˜–˜‘–•ùv¥¤ŽŽŒŽŽˆŽ†ŽE¸jZüäéû`”¦¦¥ø ŽŒŒŒŠŽˆŽBÑ[QûÊIÐû,ûB†û ¤’Ÿ•›—Ï÷bC¨˜ –™”…ê÷.¤žŽŽŒŽ‰‡ŽI½j\ûIûw÷a÷bûa¢÷±–ƒ™œ—œ•š”š—¡š§Ýû*-J·a– §®ªŠûmt‰{†‚†ƒ‚~€ËJ£±‘”›ž¤ªÐÜ””—™šž’Ze]f`g÷‡÷1ŽŒŒŒŒŒ‰†LËeWS÷*÷ŽŒ‹ŒŒŒ‰ˆNÎ`Vû5¡¸¡º¡»÷l‘‹ŒŒ‡ƒ”NÊ`T#š±›²›´£™’Žˆ†Ž4µ†h‡rˆyˆ{„n€c€c|ZuRwR{cv€v‚x‚{ø%øOûý„ûGŽŒ“™‘™‘˜’–”‰ôùW÷íýd„‰†ˆˆˆ‡‰}Š|ŠdŽL{Ÿ‡œ‡–ˆ˜ˆ™…˜‡–„’ƒ’ƒƒŒ‚‚ƒŒ„œž”ž—ž˜•›Ÿù‚££“’Š‹‡Ž„K´h[ûÕŒûK¸b¤”ŸšŒŒ÷YŒ‹ŒŒŒŠ†LÍ`Wû$!:ûC†û¤•œ“•‘ÐäM¤”ž•—–†ë÷%Ÿ—ŽŽŒŒˆŽ†Uµqe=‰ûn÷WäûW÷»ø戊‰…Ž‚ŽŽ|ŒvwŒ{~ˆ…VŠ‡‹†……†ˆ‡Ž‰—‰–•˜”˜‘˜™¡„¥y©{¨|¥¢ûûºˆNŠuˆoˆj‡i…hƒg„gk{n{nukog”ƒÉ¿´Â Å Æ˜¾¸‘¸¨™™Œ™Œš÷fû¾ˆ‚„„„„Y,™Š{¯‚¦ƒ›ƒƒ•~~Œƒž’”›”˜“’“’””•÷ì÷(’Š‹„“HÏ[Sj÷㦒ŽŽŒŒˆŽ„K¼fZûEE¼‹‹'‹‹‹‹†ûÕ‹ %UI´e” ¢¢Т÷ò÷_ûò’üeŽ²”¹š¾£¿¡µ¡«Ÿ« §Ÿ£ ¢Ÿº¶ÒΦ–ŒŒŒŠŽˆŽFÏi[‚~pk^Z^YZ`VhVgHh<hóøÑ’€Â«¹ª²¨²¨ª§¥¤£¥¢£ ¢¥‘“ŒŒŒˆŽ†EÉzh†€~vulwlvqxuwvrrnqnopurxûŸ“¾¦´¥¬¤¬¤®¨¯ª°ª¯¬¬­£•ŒŒŒ‰Ž†IÇ‚zsg‚~uphcicjikpkpfl`h¦œ±A ˜Ÿ•ž“ž”­š» ½ Ä¤Ì¨‰™(m?vXW[‚`„ÖøBÐ÷
+÷4÷Í–’‡‘‚•NËTKûb÷=÷Ž–‘ŽŽˆ‘„“IÍUKû!÷9÷´˜‘Œ‰Ž‡GÑSLû$¹ÆÆ×”•—™œ¡“™’ŽŒŒ…~’=´†x„v‚vƒuq|k|myhwdû–6¶`–¨¨‘¨÷$û9û$4µc“ž¥®bø8žx™y—z•z”{z‘z|~Ž}Ž‚†…‰‘‘Š’Ž‘‘“‘”—Ž•”Š•“‡—‚™‚™xl¡l tš|“¶÷(ºB®¢¨¡—£–¬›¶ · µŸ´ž…šû`ø ÷!•‘ŒŽŒŒ‰„’SÇYTûD7¬`˜‘™™Ž™•Œ‘¾ü0Qx{…jƒX€÷ƒû´|Àœµ™©—¨—®±£³¤©¥¡¨ ¨šª’®’®©Ž¤¤©®Œ®®Ž®š”’ŠŽ‡Ž„Ž9©Œd6r‰jˆ`ˆ`‡j…s‡t~ix`x`cfPmOlUs[xôùí°c“¤¥¦÷„Y‡hˆvŠ…Š…ˆ€ˆ|HC·ûû›ƒ ª—¡˜˜™†÷÷ž÷´ûª‡û •¡˜¤š†÷÷‚Ÿœ“’ŒŒ‡Ž„’R¸i_û?Ï÷$÷”ŽŒ‰„‘HÇRQûõ÷~ý†œ€{ xŸxœz˜|™|–}“~“}’~‘„Žˆ„‘’ˆ““’”“‘”Ž˜ŠœŠœ‡™„–„—‚–}””sšgiŸgœh›ž÷Û•¥¤œš¶¼ÑÜü–„û¥’¡—„÷øÏ™£ªÇ’‘•’™©•ŒŒŽŽ‰Ž†Ž>À{X‡rye{ewbs`u`aMN;÷€÷“~¦›®¤¶­û„.¦’ž“—–ª÷ld‚€z{rvrwszt|t}gx\s”}ê°Ëª¬¤¬¥£Ÿ™™›v—sWRX_ZkZl\n`r{÷Èœ’¦œ±¤±¤¯¥®¥—qŒ‰Œ„€b]ad^k^klvy€x€btKg{â±Ð­¼ª¼ª½®½³HŒy‰u…r…rƒz€ƒ„€‡~Š|Š`”CˆyŠ•‡Ÿ„Ÿƒšƒ•…–ƒ’……„Ž„Œ…ŒƒŒƒÑœ´¬˜¾˜¾‘°¢£ŠŸ‰ˆ›‰™ˆ•ˆ”ˆ–‡˜¦–›Yy™m b b l w¡wz›}—–•’””ŽŸŽ¬œO“\¢k°i²tª~£~¢‚œ‰•‚¬µ ´ ´  ‡–‰‹ŽŒŽ‰†’`Ãlo„„v|jtjsoyu~m¹y¦„”„”~šw¡–—•—“˜÷mŒc¬”¡•–—ƒÜÙ›–•|—X³o_û,¾´§¢Ž”‘—’«Œ’Œ‡„”ZÁ^cûaŒ¸É¤‘’ŒŽŽ‡Ž‚D¯~h…z{orerdwp}|~|ywtstsvvvx÷v÷E÷kh`ojvuûPzž¤¦¤¦£¤óûˆuŠ„ˆ}†u†u‡|‡‚‰‚‡‚†û÷÷Nû“¡”¢‘¢¡Ž¡Ž›Œ–÷Bû¡ø>”€¿§½¨»ªŽ[T…@”Ž “”Ž••’¦÷CbX\bUmUlZs_x_xo†~ݤУģäŮǸ›{†’“zBHBYCiDhNoYv“ì¨Ø©ÄªÄªÊ±Ï¶•sŒ‡Ž|nlWc@[@\Oh^u]t]w\z‘}Ü¡Åž­œ¯›µ¡½¥¼§¨›““‘™”¡šŸ™—™”iŒ‚ŒzŠt‰_…qƒ}†zŠŠwŽpp‘w~Ž†~‘ˆ–†š‡š…™†—„—…”„„‘„’}“v ‘›‘•‘—•“–––•”ž”¨”§¦Š¦¦‰£‡¡ˆ¡ˆ›‡–‰–‡–‡—¶—¨J¨^¦p¦p¨s¨w¨u¢}š„›„›„œ„‘˜’–’‘’“““Ž“Ž›£˜lŽpq‘sh™`¡_¡h¤q§q§|ž…”‡”†•‡”É Û¥˜ ’§”«‡‘ŠŽŒŒŒŒŒ‰‡SÐqttvfv[tYuaxgzt±}£„“ƒ•v g¬™›™œ˜œ÷£hŒ”Ž›’š’”ŒŽ‡½Û˜“ŠŠŽˆ„T«meû]¿­©ž“±ž­ŽŒŽŽˆƒ’BÆieûx˜›š›œ›¢“ŒŽŒŒ‚’x—M¯p^siwswtpoijjjqsx|x|eoPb÷kq÷
+÷ƒ„q†w~lwbûZ÷ ±©²¬³¯÷7(yû ±ŒŽ•‘ž‘‘›‘™÷gû
+¤ ’‚ÊÁ¼¼¬¸¬¸£®›¥™¦¬È¾ê¢’•ŽŽŒŽ„}’7µ‡yŠ„…w€i€k~f{d|cyewgwhzp}y}xmd\N÷¾8—‡¦…—‡™…šƒš„–ƒ’‚‘‚‚ƒŽ‚Œ‚½ ¨ž’“œŒœù‹¥›‘ŽŽŽŒŽ…Ž1®RŒ}ŒkŒXý!y…‚~Š~Š[7•÷Þø¼½R«ešx™xœr k jœk›j™j—m‘p’o‘|ŽŠŽ‰‹ŽŒŒ‘’”“”““”››ŠšŠš‡Ÿƒ£‚¤e¹FÎGÎR½]ªáø…“  ¢Ç}S‡y„sm€mk~i}i}l}q~oxjsd•‚¢¤ §ŸªŸªœ§™¥™¥Ÿ¸¥Êü#„û+ž¡“¤—†÷!øš€—~“~“~’}’~’}Ž„Ž„ˆŠ‘ŠŽ‘‘Ž‘Ž‘Ž–••Š•ˆ”„•„“€”z”z“t–n˜â÷$’ŒŒˆ†’UÆZW\÷+¦“‘ŽŒ…~‘9²’%ûû S÷…ý>‘|èžÔ§Â­Á¯µ«ª¨¡r¥sªuªt¹oÊiš£Ž’“‘™‘— Ž¦ŽŠ™^d’j—j•lšmnržvŸ¢²¬—§˜¥–¤’¡’¡“¢“¢¥–’ŽŽŒŒŒ‡‚<¶uûxE{n{o~v‚}q¯€›|¥z®z®¨…¡„ †œˆ˜}ˆlq‘vv“t”q•r•u–xªXŒˆŽ…ƒrkjjaiaiBi"hÐø–‚ÓÎÏÕËÜ£•Œ‘ŽŒŒ‡€’F¼€kˆ‚~ot^t^bQPD¸÷÷²`–²·¼÷ó•‘ŒŒˆ‘„’EÇ_RûÜÙ÷@†‚¢ušz’’‘Ž~|}‚ˆˆ‰‘‘‘”•Ž–—Š–‡˜„™ƒ™d¢D¬÷û›±r§užyžw™|•~•“‚žhƒ’‘‡ŽŠ‘’Ž”’Œ•—–‡™‚›‚›mŸV£W£hšy’÷‚øS¦’‘ŽŽ‡’J·„t…v~mvdwdyk{o{qwlsj•ƒ°²¬°§­¨®ž£•š•™—™¢÷ƒ÷XYPûÌ:«`•©¯µ÷ö”ŒŽŒ‰†‘ü…ý^•ƒ¡˜¤œ§ ¨  œ›˜™˜œœžŸŸ˜›”—”—˜žœ¦ ošt–y•y“y‘zy…„ˆŠ‘Š‘“‘“’Ž’–•Š–Š•‡—ƒ™„˜€š}›}œu¢n© ¶Ÿ¶ž´Ÿ‘’ŽŒŽŒŽ‡‚‘Eº~Zg„w„uƒx„xTº_­k €€zÐH”—}šxnS„}{sqishpmpqpqmqkr÷Gú%„ƒœx˜y”{•|’zy˜SŒˆŒ‰ŠŠŒŠŽ‘Š”‘—–——‘™Š™Ššˆ™…–…–—w˜y˜r™n›÷
+ûâuŒ|Ž„Ž„„“ƒ’…˜†ŠœŠ­Š¾ŒÑ³Œ©ŸŸ˜’•‘–”Ž”’ƒ‘‡‘†ˆ–ˆœˆœŠŸŒ¢ŽÅœz‰r‡`ŠŠ‰}†o†q†x„„‚„€…‡€|ˆzOhŠtŒ~Ž~ƒˆ‡‘‰’”÷å¿á¿–‘•£˜¬ŽŽŒŽŒŽŠŽ†MÊy†…yyklll]eP^÷¨ùT£‘’Ž‡ƒO¯{g‚xuhe[gYhckl”€´ª«¥¢Ÿ j‰i‡h‡i„lootdfX–~¤¤ž¡˜œ˜–ž–Ÿ–Ÿ’›˜Ž——˜÷j„A£‘–”–¢ˆ™†‘„‘„…„Ž„Ž…Ž†˜Œ•Ž”‘‘[rûkI»>-…GžŠž‘œ˜ ÷wCKˆûˆûa†·E¶—ž’Å’ê’ê’÷+—÷bœ¢n›u•}}–“„’˜Š’•ŽžŒ—Š–ˆ•‡•tœ`¢`¢mœx”„€ |œ}™~Bˆ=ˆ8ˆÓ÷zsœ–’Ž’‘‘‘”…¸Í¢ ŽŽŠˆŽ…\±ngûr¥£œŽŒˆ†ŽV¨”‘‘“Ž“”Ž”Œ“Œ’Œ–™¨h£•Œ”ŒŽœŽœ•ŒŽác†9¡Ž™‘‘‘Ž‘†¼·÷8“ŒŒ‰„’U½`^AØ÷#’ŒŽŽˆ‚”Z»b_RšŸ”Œ‹Ž‹Ž‰Œ %EžjŒŠ‹ƒŠ~:–¡œ’‘ŽŒŒŒ‡ƒ]ªlŠ…„z€n€oƒx†‚†ƒ~€{x÷b£ ŽŽŒˆ„\°jcû¥¦Ÿž™”š•—‘–•Œ’ŽŒŽŒŒŽˆ„‘W´ddû”—–—–—)ûšœšœ›œ÷"yrxsxr'û]Ó÷ Bû ìÜ÷ :?üNõ÷w!"÷¡¿ô_†ˆ†„‡‡„„‰‚ˆŠ€ŒyŽyŽ~Ž‚Ž×ÔôB"ìÜô:¿üNõ÷z!ûP÷Á›¦›¤œ¤ï>ûS÷!”‚³ ¨ž›ž›™›–›•›‘šŽ™Ž™˜Œ˜÷#…Rƒkƒ€‚‡}Š{xxz}Ž†}’ˆ¦€¢€™‚ƒ„Žƒƒ§Œ£•ŸŸž˜ ‘£¤ Žž¤›ŽŽŒŒ†‘€•b°jcûqG²b›’Ÿ•‘Œœ‰uŠx„xxxz}}wzpv÷Z¥ø¥ “’‘ŠŠŽ‡„S±l]GYŽ¬c”§¡›§ü~‰ˆ€‡€ƒ~Ì_˜ ™¡š¡š¡³¿Ê݃”prQS€€z|uw–û9“€À®´ª¨¤¨¤§§¨«§© £˜›·Ä’“•—˜šûw|†‚ƒvŠj’k’v€z¶}¥”“‚„„Œƒ‚ ™‘ŽŽ”™“—“”’Ž‘‘Ž‘Œ’Œ’Œœ§ùž™”’ŒŒŒŒˆ…O½hZ)¨´š¢ŽŽ‘’””¡“ŒŽ‰†ŽF²‡w‡x†y‡y‚m|byM´ûû×hV°_™’œ Ž ˜Œ’ífA^JWSVT\^`h÷õøû9ó÷9û9¢÷÷9ûû9û­÷÷9ûÖ÷°­c ”©³Œ¬ü˜x‰€‡ˆ‡ˆ„ˆƒŠ‚e”H‰{›‡¥„—‡˜…™ƒ™‚“~Œ‚†˜ž’š‘–—““—‘—¤ø³÷
+Ž–‘œ”œ•—“’‘ˆ×÷M÷µ‘ŒŒŽˆ„’@ÏYMû;÷A÷…ŽŒŒŒŽ‡ƒ’KÆ`Vû÷6÷”ŒŒŒŽˆƒ“NÆ_Tû÷÷9¨˜’ŽŽŒŒ‡Ž‚7¶ƒl‰‚…z‚q‚qs‚vv~oziûmbŽ±`£•–¦Ž·ŠÈŒû6û2M²`¡“‘™©Ž¸ÑûBø5®f£m—s—s“yŽ~Ž~Ž‚††ˆŠŠ‘Ž“•““‘”“‘˜–‰–Š–ƒ—|š}š`¦D³®÷Õ¼l™š‘’š“£”É£üŒ€€€‘~•|–}£ƒ²ˆ±ˆ¿‰Í‡‰Ì¼‰ª®Š¿ŒÓÑŒ»££œ•”™”™“™™kŸ†Ž†’†˜†˜‡š‰ŠžŠ¥Š¬|‡6ˆk‰vˆ‚ˆ‚†‚ƒƒ‚ƒv†i‰jˆf‰cŠcŠ_‹\ŒûŽ:q‘q‘z’ƒ“ƒ’‡—›ø÷bÒŠûцû¦’¢— šƒð÷Í÷yÛˆH‰f‰cˆb†8Šv‰z‰€‰€‡‚ƒ„…„z‹rq‘h“^–†|¶|§}™~˜“€ŽŽŒŒ‚°—¤–˜–™–“•””˜Ž›ŽœŽ¤¬’÷Œ¦Ž´ŽÁª¤’ŽŽ~”H½iRûjA÷a©›“ŽŠŽ‰‡Ž@°u•ŽŠ`5ûDûbD÷'ª ‘ŽŽŠŒˆŽ…Ž1¹û$ û_ÈùZ³^˜¥ª‘®÷Œhû;'A¶(û»‡ ª˜“Ž‘‡Ö÷ÙøŒû¿‡#§–¡–š•…çŒ÷«¥ŒŒŽŒ‰ˆŽI½gYû‚Ø÷;ø)’ŽŒŽŒŽ‰†GÕWHý.Iýé{ʘƛßߺ¤°«±©¥§™£™£•£££®ŽºŽº¦Œ’’ŒœŽ¦¢Ÿ’Ž‰Ž‰ŽˆŒ1¬Œ/zŠnŠb‰cˆi†q‡oƒq}qrokadbd3cûbø]÷‡}Ìl¾o²q²pªq¥r£r›|†•‚“‡‘‘“Ž•Œ•Š—Š˜†™…›ƒ›pž\¡\ ;¨û°ª÷Ù¨d¢Ž¦ŽŽ§œŒ‘ùœ‘ŽŽŽ‰…7×QDý_©÷ˆ”ƒ­¸¢©•š—š¥²µÊü†…û¨”¡•˜”‡àŒ÷FÇ·ŽŽš«¨«¨¤£Ÿû¶~ŠŠ„Šƒ‰„‡„‰…„ƒ‚‚ÈPŸª’•žžª©©§¹²Èºƒ˜PfMgLh÷Ï¡š‘ŽŽŠŒˆ†Žg™¶Ä±¿¬¼’]Žwtq‘q“o“l•l—dœ\œ\¨Y¶WµV°f«vŸ›š••–ŸªŒ’l˜s—y–{–w™ttr¥p«p­x¥Ÿ ‚Ÿƒžá걕‘“‘–’–’«’ŒŒŒŒˆŽ…AÊxjyp{u{vke\V‚¥y¼…š„¡„¥ƒ§†Ÿ‰—‰™‰™ˆš–‘•‘–Ÿ˜Ž‰z”j›÷Ý‘ŒŒŒŽ‡‘‚”?ÑPGûX £“’š Œ ~Ÿrrœlœh›†ƒ£p›t’z’zxww€‰ˆ‡Ž†û|VŒ«c–ª­°÷qP†}rtfuewlzszsuoojqjvt||}|xystŠ÷é¡šŽŽŠŽŠŽ‰Ž‡iš¦Ä¦Å¦Ä¨”‹‚.µUˆxbwMuMsPqToSlOfKòù(­_£”‘œªŽ¹øEûü…ȧž’ˆ„Ž-´3üL€Œ€Ž€‘‚‘‚˜ƒž„ž„¿‡àˆà‰ÍŠ»ŒÐÍŽÈÈ‘³‘ž‘ž—”—‘—–Ž•o¡†Ž‡“†—‡™‰›‰ŸŠŸŒ©Œ²|} ˆvˆ{‡~‡~ƒ€€Y…1‰‰2WŠ}xŠcŒMMŒcŽyx~ƒ“‚“‡˜œ÷óø…F¦‘¢”–…ãŠ÷h«£ŽŽŒŒ‰Ž‡ŽBÀgWü•öÔO¤²¨·´¾¿Ä¿ÄÃÈÆÊ–(0-52;ø§¤˜’ŽŒŽŒŽˆŽ„Ž2¹‘û&üNz‰{‡~‡}†‚††††…‡„†÷8û<¼žµž­›®²¤µ­·­­°¥´¤´¤·£¼Ñ2¹H¢]¢]šf“p“p|ˆ‰ŽŽŠ’Ž“’’‘‘—œž‹ˆŸˆwªiµgµk®m§m§o¥p£¤á–´–À”ϔ͔ΓͪžŽŽŽŒˆ†Ž,¹Š>v‰e…V‡V…^†e†gƒcabsLg6h6RK<`<`Xor~ØùÒ¢bœl–u–u”u“v”v{€Œ}yyŽ€ˆˆ‰‘Œ‘Œ“•—••™Šœœ…¡~§~¦_Ã?à¬øs³b–ž£ªù²”ŒŽŒŽ†‘€•=ÑYFû‡¦ª¤§Ž’’••£’ŒŒŒˆŽ†Q´÷|–ŒŽŽˆ„’<Ñ]Kûwœœ’’•‰™‡šƒ—}–}—~’~{w‰§o•‚’~yy…†ˆŠŠû CŒªd”¡¡ ø…q…v†{…z€q{fû,˜›‘’”‡˜‰˜„•“”~“y”{•y”y–‡€¢p™y€€ŽŽ€Ž~û˜Ûü7c‡|„{€{€{~}‚hr€‚…‚Œ„ŒƒŽ„‘†…”ˆ™—™•šš––˜’›’›œŽœŽœŒ›Œ˜™‹œŠŸï÷ßH¶Ž6û5†3§Ž ’˜˜£ø6d¨ ”˜˜‡ÕŒ÷&¦¡ŽŽ‹‹‰Ž %K¶l_ü.ûqâø5Œ4ü6÷ãø63zûn†V‰|‡z„w„xƒ|‚‚h…OŠOŠeŠzŒ{~‹€„†‡‰‘Œ”Œò œ‘ŽŽŠŽŠŽˆ…:¡’9Œ"p•| ‡‰ ¼‰ØيªŽª¡’–•–•—™—tšƒ…–‡›‡‰››ŒšŒŒžûŸµ¨o“„“”z“{’{zz‚‰’†“”‘•““Ž•”¯~¦ggo™v”÷ÄS¿`­fšma‘€‘…’Š‘Š‘Œ‘’Ž”–––Š–†™‚š‚›X¦/±—øIºdž—ŽšŽ¦Ž±ûê~Š‰Š‰ˆƒ‰‚…‚€Î\˜©Ž“˜¤¤µ¤µ¨»®À‘ûû÷磻š—ŠŒ†Ž‚’JµjX2…Í÷Сs–€˜wšmšo“vŒ€Œ€‚‡…ˆŠŠ’Ž““•”‘””Ž••Š””„™~~c¥H®÷#üa’€Ð£¿ž®˜¯™­œ«ŸªŸ©Ÿ¦žØ^Ân­}­}®~¯€’’œ¡™²–”S’_‘k“k‘R¢8²½Á¬°œŸœŸœ¡ž¢«˜”ŽŽŒŒ†‘€•P¿\ZûéC³f“š™š›°K†”~t›t™{––€›} ybldoeuesIi-^÷Mø÷¾tixo{wzusojhO¸c®x¤x¤{ŸœHüÎG¹`ž•š˜—šŒ÷û+†û
+YJür/Ž¬c ’™Œ™‹¡ø»ŽŒŽŽ…“}™÷2ùm“û ŒyŒZŠ:Š:ŠN‰a‰`†[ƒTƒU~]zezeubp_’‚¿Ä²Æ¥Ë¥É›È‘Æ’ÆŽÌՌӌތç÷Ѓ]‰}‚izT(N°-û=…û ’Ž¢””Ž””’Œ£÷+ûŒ€ˆƒ„††…ˆwy`Ž’H‰|¾¬‚š‚šƒ”Ž}Ž€Œƒª–¡–˜”˜”“•”•—™÷­÷)ŒŒm¢Ÿ“˜†å÷= ›’ŒŒ…‘~•X²k_ûjž«¡­¢®’”ŽŒŒ…‘`¡øŽŽŒŽŽŽ„“|šV¾YRüã÷@ûÅ÷÷øûûøûŒ÷÷÷ûüæûꓽ¦·§±©°©´¯¶´ ”ŽŒŒŒ†€’I²tczlsjmknibgWcø®÷o—‚±p®q¥tšw›w˜y”y”{’††ŽˆŽŠ‘‘’“’˜Ž–Š••†˜€›šqa ` _Ÿ^Ÿ÷{€}÷ ­Ö®§°§°œ­‘«‘«®Ž±”•ŒŒ„}“E®@Œmˆl„lƒlzjrhqhOi.jÅ÷–•””ŽŒŽŒŽŒ‰Á÷=÷Éû:‰IŽ“–—‘“ŽŽŽ‡Ú÷£ ŽŽŒŒ…€“X®obûµP¬Ž/û ­÷³‡C¦–š‘ŒŒŒŽŽ÷ƒsœ’•’–”‡¿µ ŽŽŒŒŒ‡‚‘]­nfûkJªŽH»@ã÷ƒ3+ûþÀq¯u¡yŸy›z•|–{’‰‡ŠŽŒŽŽ•Š˜Š™†™›™{—t“t“[šB¢ü)ûͪ˜¡–—’Çù HŽ”—’–’“ŽŽ…÷ù1 š”’ŒŒ…€”N¸kWüöH²’ûIŠüçÄpŒùyùýy²û4•ž—βªž«£®¨®¨£®—´™´’¬¤¤¤Œ£øû”~‰ƒˆ‡ˆ†ˆz‰zŠZ‘:˜Š}Äz®~—ƒ–„“‚€Ž€›Ž›‘œ’œ“˜“•••“—˜ùs¢œ–’Š†€“J·g[ûáCµ‘ûŒ}‹kX‚ŠWŠ*Š*ˆD†^…^z[nZmZOS2N÷»ø3÷X÷ûûXûú÷p÷\÷øû[ùìøVWHýû¿V¥™Ž•ŽšŽ›™Œ˜÷u€k‚szktcscxm|w|wvpojnixw…€…z†s‡Ç6¢“˜Í•÷
+š÷
+™÷˜ô•“e’kŽ€„’‰”‡–š™™˜“œŒ Œšˆœ„œ„œ~¡w¤v¤s¦n¦n¦dªY®ƒ²c¨ižpžp™t”x”y”x”vûI‚ûE…ûA‡íﶵÅÐÒì¡“—Ž‘ŽŠŽ‡‚‘OµøgŠŽŒŒŒŒˆ„’ý÷´¼Y¬˜’©´ø~ŽŒŒŒŒŒ‡‘”GÌWOüRø
+œ­Ÿ³£º –—‘‘‡Žƒ5½Wˆz„unno~pû¢-Žµ[ª—‘Ž—žž›Œ™÷Wxdq_lX˜üs±]¢”¢ ¡Œ™øtŽŒŽŒŽ†’~˜NÆWMûT÷¾÷ŠŽŒŽŒŽ†’~—MÅ[Oû÷H©œ’Ž…€0­‘û)!û*>²^–¦¨‘©ñŒû¾û4µ÷“¸Ÿº¢º¤º¤ºªº¯º¯·²µ¶M…û¦¢“ —…å÷¼P°b¥r¤s®q·o¶n¸s¸x¤ªŽ’—–‘žŽ¥•Z“W—T›U›Y¤^­^­Z¶V¿Í÷bŠûˆT¤’¢•Ÿ˜‡ØÑ š’ŽŒŒŒŒ…‘•W¶g]ûUÞø0ŽŽŒŽŽŽ…’~—FÆ]Nû¶Â¥š•ŠŽŠŽ„}8¥‘6hûöG­c¤”•¨¼÷§7ûUC´*ŠCˆ!©“ “–”‰¾÷÷`[fZb]_c_a`g`i`kShEg÷Lû
+ŒlŒKŠ*DŠMŠVŠW†X„Z„Z~`zgzfzkzn÷*ø!÷M÷ûNû÷dŽ÷]÷Šû\øjûXû€Fº*û—† ”–—™”’¼÷–D“˜‘””ŽŽŽŽŒŽŽ…Ú÷•Ÿ›“’ŒŒƒ’{˜\­û«ûü÷÷–ûû–÷3÷÷–ûûˆøQ÷0ª“ŽŒŒ‡Ž‚5®Ž6ûžl›y«„«…½‰ÏŒìŒÊŽ¨’¨’œ•’™’™—Ž•qœ†Ž‡“ˆšˆ™Š›ŒœŒœ‹ŸŒ¡ŒG‡p‡x‡€ˆ…„…„„v…iˆiˆSŠ>Œ]rŽ‘‡‡‰’“Ú½›­—ž’÷»™ ’§•ª‚Š‹Œ‰‘„•Y×suvvdrTmTn\td|÷"û2@Œ¬b—”’£´ù¾”‘ŽŒŒŽ‰…‘@ÔVG:ø¬®¤‘ŽŠŒ‰‡ŽAÄdYûEž÷ø.”Œ‰„‘<ÓRHûª˜Ý¡˜Ÿ—Œ†Ž‚2¶‰T"ûùV·dœ’˜•ŒŒ–˜Œ›÷¯xûû
+xû›÷ƒ÷ûƒÅ÷ƒ÷ûƒ #ƒ¼¦À¨ž–©Ÿ³§µ§¯ª©««­»ÈÌäû ƒû>££”¤™…÷÷Ù¤š]Žšl¥U¦W®^·f¸g½fÂf” “’”‘”‘““’Ž§Ž•@˜L¡X¬W«a¯l³l²w§ƒ›‚›‚‚Ÿ÷ö’ŒŽ‰†‘@ÔUJû¦÷Q÷ë“ŒŽŒŒˆƒ“DÑQJûn÷+¡—•ŒŽŽ†€2©“û2Pû\¶ã¥’”ŽŒ‡Ž‚;´t/ˆ„wl€l€q€t€tyjr^”…­±”•–š™ ™ œ¥žª÷kûQüR¶d’”œ¦÷™^<„~{tqjsjtpxvwunpfjekXdK^±÷¯•‚¨¨££œŸœŸ›Ÿ™Ÿ™Ÿœ¦Ÿ¬±üRƒûA¨•£™žœ…÷øP÷S’ŒŒŒŒ‰„’DÔ[Jû5§¾²Ñ–”œ˜¢¨š˜“Œˆ„=¹‚n|_vSvQoPjNjNfRbXø‘–¦ªŸ¥™ŸšŸ¨¸¸Ñ÷ü„Š„‡†‰†€‰xtŽlŽx„Œ…Œ€Ž|Ž|´„§˜}˜”‚Ž‚ŽŽ|¹¢¦›“–’–œ¤ø±÷T‘ŽŒŒ‰†?ÕUJû‰¨Ä©Ã¨Ã«—’Ž‹‹‹‡Ž %:¸‡|W†|p|e|e|fzg{fzixlykugqbøg#ü
+[»`Ÿ•–ŸŽªù–“ŒŽŽ‰†8ÛQBû¯÷Å÷Õ’ŒŒŒˆƒ’<ÖYGûV÷©øŒŒŒˆƒ’8ØUDüþW½`ž”—‘‘ŒŒ’”Œ—÷‰û©ûŸU¶_œ“’—¢Ž­÷TCø»ž{›{•{—|•x“u”u‘zŽ€Ž€Ž‚Ž‡Ž…ˆŠ’‰–“ššœ‘›š‰™‡˜…–„–|—u˜v™hœZ¢´÷-|è{¢†š†„„„ŒƒŒ}‰s…j†j†s‡}„xˆ}ƒŒ„Ž‚‘‘’“…“ƒ“ˆ“Š¡ˆ–’šŒšŠ Š¦Šµ†Ã‰«Ž¬“¬“¬—¸›ÂœÂ§ñ²÷'µh›’˜–ŒŒ–—Œšóû‹ûTMŽ¼\›–‘’ŸŽª÷ûØû˜P¹]™”‘’£Ž¶ø½ŽŒŒ‰…‘AÏ_SûS÷Ø÷““ŒŽŒŒ‰Ž†GÌYTû$÷‹÷š“ŒŒŒŒˆ…’HÎ`RüL§õz•hûhûo6vSvS}i„~…~…‚ƒ………x‡l‰l‰jŠfŠ÷ð¿Y“„–|›u™u–z’~‘~‚††‘ˆ’‘’““““™Š¡Ÿw£c¥c¤c¡cœÎ÷a²k£v””€–|˜w¤_•{”ƒ“Š‘Ž’”“’”––‡˜ƒ™ƒ™}šwœw›`¢H¨ø4§§l›x‘ƒ…’~“z“z‘yzy€ˆ‡‰Š‘‘‘‘”™Ž•”””ˆ•„—…–~™v›v›lŸ`£ ø߸c•ŸšªƒlwL`ƒo‡|†|…‚€ƒ‚{ƒÁU¬±÷ û?-tA{U‚±G汜Ÿ’ž’£”¦”û …û¢’¡–¢šˆ÷÷-¼ž¿Äž†›oƒFyˆx‡r…÷2÷’ŽŒŒŒŒ‰ŽˆKÑSQrè ž‹‹˜”‹‹‹‹~‹ %5­‘û cû œÂ«éž”©˜³÷p”ŒŽŒˆ†EÍXQ'”«•­˜°¦››“z•@²€L‡x‚f|R1÷úû`¿c”œ›™·ƒi…s‡}‡}ˆ€‡ƒ‰„‡…ˆˆˆˆ…‡…ˆƒ‡„‡ƒ†ÒR©¯÷SvbgLX5X UŸSŸƒ~¢€«z²t³tªu¢t¡tšy”}¡f„†ˆ‰‘“’“’•Ž˜˜Œ—Š––„—|™|˜lŸZ¥÷÷ž¡™š”’’•–——Œ’ŒŽŽ‰Ž‡EÒ`VûV®÷!÷ß’ŒŒŒ‰„’CÔTJû^™À™Ã™Æ÷Š“ŒŒ‰„’GÏUNû‘¤•²™¾­Ÿ’‹Œ‹‹‡Ž %:¿€Lmûûhµa•’™ Æw/x?û°vŽޥ𩘩˜²Ÿº¥Šûz‰~‡‡€ƒ€~¾S ž¤ž§ž§ž¦›§›¥™©¬ž‚—RtGp<l÷X²¦³ªµ°™f•r’}’}–x›r›r¡p§n§nÐ]÷N—Ÿ—˜—‘–‘¡ŽªŒ–lm’l’k’g›_£a¢k¡wžÈ³¯£˜’—’”’¥‘“ŒŒŒŒˆŽ†PÀƒzy{yzwnmb`|–{œz¢z¢œƒ—…˜‚šžø ŽŒŒŒˆ„’HÊ\Rû´œ”™•Œ–‡•‚–•nžZ§„x˜y’z’y}ƒŒŒ‚Œü\´d›”‘›¤÷‰sutvimamZmYlGj4fšø9¸S§©š­¢«¢¡š•’•’Ÿ—¨œû†4¨” •™—‡Ê÷Õ¢š“ŽŠ‰†4°+û5t€gyWsYsk}‡x÷­­l¡q•x•x’z}“sŽ~ƒŠŠ‘‘‘“’”““’’‡—ƒ›‚›aª>¹÷¨û ¹e”šœž÷û;û;b«j˜žŽ¢ø‘ŒŽŒŒ‰…‘MÆ_Wû÷;÷•ŽŒŒŒ‰„’JÎ]Oû(÷¡”’ŠŒŠ‰Œ†6°Hû ûP¯ù8½e’›ž ØûGJ±‘ûŠür†û‘’ŽŒŒŒ“—“Þ÷¼1¢––˜–…çø…Ÿœ’ŽŽŠˆŽ…W±qhO÷÷Q‘ŽŒŒŽ‰†EÉWTûúÇýN÷÷¼ûû¼÷0ø׉R‰iˆk‡m‡m„p€r€sr|p“†Ÿ£šŸ•š–š”œ“’ž‘ž¡ŸŽ¢¢¢¦ŽªÍûr‚Œ„Ž„Ž„‡‘‰‰‘”Š˜Í"ûGøŽ÷Ìû÷ûŒY‚…Ž‰‰Š’”÷[Ñ÷­÷U¨œŽŒˆ†Ž4¸‰sŠ|†oƒdƒd~YyOzP{\}i}ixcr\’…«µ£®š§š¦˜¤•¡•¡˜«œµ÷_Š5dŠS‡B‰B‡L‡W‡U‡j‡~†~…€„„„„}†xŠwŠ_‘F™ˆ¢ƒ¤ƒ–†—…˜ƒ™„”„„„Ž„Œ„„‚Ž€¯œ£™˜—˜•”˜“˜‘˜‘ Ž¡Ž££Ž¥¬´´ŽÉ܎ݎʶ£š’ŽŽŒˆŽ†Q¶j`ûMdûDƒ„²^¤^”`“]Œ‚Ž…ŽˆˆŽŠŽ‘’Ž“““‘‘•˜Ž“Œ”“Š•‡–‚™ƒ™˜•—m¢\¯ÀûŽ~¾ ¸Ÿ³¡²Ÿ¾©É±©ŒŒŒŒŽˆƒ‘H¸xpƒzyptptNa,Pøº­IÊ ¹˜¨“¨‘»—љϛ¿•®’‰û1w÷ ÷BŒŒ‰†PÊ^VCꜞš—ŠŒ†‚<ª<ûj†i†h†÷?ž›”’Œ|?«Cû>k‡iˆhˆø\û7û Q^ud|iƒi„i‰j²G®”¤’Ö‘÷û:{‰ˆ…‡‡‚‰}cŽf’j”ˆ~³{£€“…“…‘„…ƒƒŒ¬“£’™™‘•’‘”‘”Ž™Ÿ÷T÷d™ t˜z€€‘†ŽŽŒ”Ž˜“Œ’Š’’ˆ“„”…•~–v–v—[ž>¦‡¦xµo‡”„—‚ü ‚÷ ¹÷¾÷÷’ŠŒŽŒŽˆ‚‘Hº€€~‚}t~k{û‘ˆ¾ªÁ«Æ¬¨ˆ’ŠŒŒŒˆƒ“Y»…‚ˆ†z{knjnpvs~u}y‚ˆ‡z‰tŠ´MÒ˜žÄ‘ì“÷÷È÷%¢˜•Š‡ŽƒŽ5ª‘;û’p˜{£…†¥Äˆä³Š§œŽœŽ—’•”“”—™™s¢‡‡’†•‡–‰˜Œ›¿…jŠˆ‰‡w‡x‡{ˆ€‡€†‚„†…†ƒ‡‚‰‚‰pŠ^Š_oŒ€ƒŽ†‘…‰š£ÄÛ©¢“¼¡×¯­Œ™•MÃnpourxqybqRjkü›à`Âf¥m¥mšzˆ“„‘ˆŒŒŽ’’’’–Š›Š›‡˜„–„•{•o•q–k–h—h—l–p•÷·øÞ?´‘ûü¡…ûš‘–‘‘–’›•ÈøO#¤–™‘Œ“—“†÷
+ã÷L3ûøHE²6û5†5ž‘œ‘““““Œ§ø;Z¨’¡”™–†È÷5¥£ŽŒŠ‰Ž‡ŽL·i]ü0ûkŒâø;4ü;÷Ýø;:cüámjssw{y{hrXh’ƒ¿ ²Ÿ¥¥¦¡§¤½^”‚œ¥{ÌbŽŠˆ‡¦­’ °Œ•[–a™g™h›f¢fª§´¡¯œª›«œ°ž´¦œŽŽŒŒŒŠˆH¾g\ûr¯g“—›ŽŸE’n”q”u•s›o¡h÷ ÷~qA~fwcn^v¦|Ÿ„—„—ƒ›‚ŸƒŸ…›‡—‡—‡™†š÷yù‹ˆ~Š„†}ƒtƒszcrRrRoWl_l]lalb“~¼¹š®´¾ÌüY„ûA¢–¡—ž™„÷6øŽÙ÷%§•“ŽŒŒŒŠˆãûBûaŽµc–’Œ‘Œ—Ž—’ŒØ†û4gKÀ/û«†C¢‘Ÿ“š•«÷V¢’Œ—”žš…ô÷kª §·•PŽx‘r“l“m’s‘x’x“u•q_IyxtpppoYbAV”ݵį­ª«ª­®®´¯X’Ÿt­f¬f¨p¢xœž‘”§‘½Ž’œh“d›b¥a£\½VÕ¡¶“™“ž”£”¤•¬•µ—¶’´³´Ž¬¥÷’ŒŒŒ‡‚”OÁ]Zû>–¥ŒŽ—’¢’¢”¢”£¬“’ŒŽŽ‡’;¿W‚`ƒiƒh‚jj€j‚o‚u‚s|kvb]±kbi÷4÷”ŒŒŒˆ…’T¿d^Z“÷0©›‘ŽŽ‹‹ˆŽŽ %8·Œ,Vý ÷±÷û±÷ø°ž²ž´÷…Jˆp†hƒaƒaƒjƒsƒs~kzby²}«‚¥‚£ƒ£…¡†¢„¦„ªœøb¯`–¤°‘»÷aˆûû%:¸ûû¾†û
+¦‘Ÿ“š–Ðøß;š¢”©š†ã÷Ì›••‘ŒŠŒ‡ƒ‘H¹jZû3÷÷ö’ŒŒŽ‡‘‚”FÌSNýxìü µÆ©µ¥¦ ¦¡ž£–£–¥“¤Ž¤Ž¥¤Ž£÷ûM|“œ„œƒ¨ˆµŒ´Œ¥•Œ•šŽŸûü>÷è‰^Š€‰|ˆyˆzƒt€n€nwsowows{w÷«÷n¤•÷÷û÷ûyšƒ•zœb€h†n{Œˆˆ‰— ÷÷Dýs÷þ­`–¤¨«÷<_†4Ÿ—Ž”‘™”ˆÍ²÷G]†?™“•”‘–“†Á®÷Ã’ŒŽŽŠŽ†?ÐWOûLÖš”™’’ŠŠ‡Ž„Ž3±)]ûGÖ§ŸŽŽŒŒˆŽ„Ž6²4Oûj©÷€’÷²å²Æ°ư˺ÑÄ·g¡w²rÂnÂm¸v­~­®¯€’ ž¦—¾›LR’Y•W•[š]Ÿ^Ÿlšy–{–v˜sœ–žŒœŒ‹‘z–C¶{p„|yrtsshm]g]fVkQnOncwu€’ø±b¤”–¢Ž®÷f‡(£š‘Ž’Ž‘’†Ù¬÷¤W‡8°–Ÿ‘ŽŒŽŽ†Ê»÷Ÿ•ŒŒŒ‰Ž†?ÏXRû(ЬŽŽŒ„~‘9°,`û¤Í¥šŽŽŒŒ†Ž‚:®3]û^xýy—º©±¥¨¡¨ ¸°É¾§Œ’ŽŒŽŒŒŽˆŽ†@Â~pŠ‡‚~yu{u}‡………~}uuuv||ƒ„lp„†‚‚~§÷¸±_˜«¯‘³÷cŒûM~‰‚…‡‡†…‰…Š„ŠylmuŽ|Žˆ~°}§€‚“ƒ“„ƒŒ„Œ„Œ‚Š‚¦¡“ž•—•”’Ž“Œ–˜÷s÷Ù’ŒŒ‡‚“FÅ^Wûkö÷:›“ŒŒŒ‰Ž‡EÈ[Yû„K°c•¤¦¦Ê ûªø:-Áo¸q­s¯t¥t›wu—}“ƒ’„”‹•”–“—Œ›‰˜†”…“”}”|”w•r–r•s•r”r”w’|{yw‘÷ ÷ZÐj¿o®uqbpfmhoiX^CR‘€´¤±¤­¦¬¥¤ ›œ›œ¥ª¯¹¡x›|—•~–~”}”~’‚‡„‘ˆŽŽŽ’Ž”Ž—–‰–•†–‚˜‚—~—x—x–w˜u˜Ÿ¾”¡•«”µ•µ’±­‘¬¯²¢ž”’ŠŠˆ…JµnX(™È˜“­˜À¦š“ŽŽŒˆŽ„Ž7¶†XˆhM{1.J¤fŸž““Œ“Í{<Zv;lû÷B\d›c›bš¢è”®œ×¤÷÷ †Z‰v†h„[„Z„f„q„ri}aøŸ÷,’Œ•Ž˜™•’‡ÔŠ÷vŸ”•‘‹†Ž‘O®n\û>²_¡“œ—Ž—šŒ÷uû™ûuB±ûûâu‹}Œ„Œ„„“‚“ƒ›†¥Š‰£µŠÃų‹Š¡££Ž£¥š”’™’—–Ž’q¤‰Œ‡’‡–…—‰œ‰¢¡Š¦¬}…C†]‰y‡w‡~…ƒ„ƒb…>ˆŠzmŒa`s†“†“ˆ›£÷ö÷~÷{ùO¤–•Ž‡Žƒ@´<|û‰}ˆw‡pF‡]Ž¤g˜“™šŒ¸qû+ˆvUx4±w‰–„œ~ž~ }yewgvjujc`QW”€¾±§Ÿ¥££¦£¦¤®¦´›v—z‘“‘€€€„ŽŠŠŒ’’’•Ž”“ŒŒ™‡—„—ƒ••~”~”}•|—›¼–´‘ª’ª‘±’¹‘·‘¸’¶¥¡“‘ŠŒ…‘F¶oa=‰§üpšmšlš¤÷™ØšŽš¦’³æƒ$Št†hƒZƒZ„i„v…v†{‡÷fhˆv†v…w…wwxwwy~……ŒƒŽ………“ˆ”–Š””••““˜’œ’œ ¦Œ•‹—š¶5÷Þ©g‘šœŽž¯ƒU‡r‚Y|AiyÃW¨©ø~'ˆy‡u„p„p‚zƒ‚ƒ†|‰€‰|‹wŽvpŽiˆ€º~©€—–‚’‚ŽƒŽ‚‚Œ€¨•Ÿ”—’—’˜—šœšœ–¬“¼”¼’½’¼¤Ÿ’ŽŒ„’N¼h^ü¢æøŽŒŒŒˆ„’QÆaXû™’´ž–”Ž‹†€’Uªød”‹Ž’„JÌ\Xû;÷÷pŒŒŒŠŠMÌ`Xû ÷÷’ŒŒŒ‰Ž‡FÊZWûò)Ž«e“Ÿžœ÷;ûŽû
+÷-éû-¼÷-çû-÷D/÷ ç¸û¹÷-îŠû,tNbYû¯Œ8®b—“’Ž¦÷ú’ŽŒŒˆ„’û'ûNµo¨t›z›z—z”|Ÿa|’’ƒ’Š‘Ž’‘‘“Ž•Ž–Œ•Š–Š–ƒ—|™|™y˜v•v—fœW¢¤ŠºD¬¡’£˜³Ÿà¶ó¾–œ“¡–„šZxUxQzŒ÷ˆ÷-”ŒŒŒŒŒ‡‘ƒ”RÎ^MTŒ÷}÷8”‘ŒŽŒŒˆƒ”NËZPûR0«gœ—Ž’’–‹šÊû}?E«f—˜šŒ°Ž°Œû›RxS{V~øFøþ”û&ük‚û>¬˜’ŒŒ‘è÷Óû
+«Á—…ª·¤±©ž«›¨š¨™¨™ªš­ûì„û>¥’–™“›™†÷ø°n£m”l”l’zŽˆŽˆ‰Š’Š’‘”–“–˜Š˜Š˜‡˜ƒ—ƒ—}˜w—v™q™jš÷÷-”‘ŒŒŒ‡’–TÆYPX÷MŸ•“ŽŽŒŽ†Ž€=«‘ûû48Žª`–˜‘¢Ö„l‡xg{XzX|`}h}h}m~p~q|nzl÷—û{“…’Žœ™¦¡¦£žœ——•—™œ™Ÿ›¡—Ÿ– – “§’¯’°¥š›‹›Œš÷ÄZ¤ “›–‡÷ 褜’ŽŒŒ‡„‘K¼g]ûŠ÷÷«”ŒŒ‡‘ƒ”KÎZLû=Šô““ŽŽŒŽŒ…~‘@¬‘ûûP9=¸DŒ‚‹thŠ8‰I‡[†[…f„rƒr€p}n}oxoqosptsww÷øDÇÇŽÈ÷ºŒûH÷Hø‹€[€bii}gye{er[lP—€±Á§·ž­ž­¡¶¤¿ûú„û`ž “¢˜†÷:÷ïš|”~‘}}{€„Ž„‘†’Š‘Š’”’”’Ž•Š™Š™†šƒšƒ›n Y¥÷÷ŠŒŒŒŒˆ…’UÇ\Wq÷?¡™’ŽŒŒ†‘@²ûû3@Žºd“ŽžŒ«Œø†¢û* Ž¹`–©¨‘¦¸_`flmwnvft^r|ٮ¦¬¡«Ÿ³ªº²û…Š‡ˆˆˆˆŒvvvvŽˆ|°~¡‚“…“„…„Œ…‹†Š†¥ŒŸ‘™”™•’œ£÷÷2Œtjtktm˜¶²©£–œ•‘œŒ¤Œ’ŒŒŽ†‚”IÂWbûD•Ž’‘’’‘ŠŽ‹ŠŽ–¢˜§›¦™¡–š’›‘›™‰›ˆ“‹ŽŽŒŒŒŒŒŽˆ…’NÎOgû·2¹^±˜‘š¥Ž®÷|opjmdky™|—b™Fš†´t¤z–~–~—z˜v÷XûPk^üG®ûû¬‡û ’Ÿ•Ÿ˜†á÷ ¦œ©Ÿª¡RU‡/ž›‘š’£÷lŸ“œ“˜”‰µÍ›–‘ŽŒŒ‡ƒ’]±vn#d¨½²¨ŽŒŒŽˆŽ„W³vdb\NR÷;øŠûñ„‰†ˆ†‡ˆƒ‰ŠfM”‰{·€¦€“•€ƒŒ„Œ…Š„‰ƒÀ”ª™’“žš–Š÷󥡒ŽŒŒŒ†€”ûoû»ûê÷u÷§yž|•””€“p†ˆ‘Š‘‘’‘’•Š˜Š—…––•dœH¢¦û2–‚ÇׯǗ¸–·’«ŽŸŽ ´‘Ê÷ûx‡~ƒ…„ƒa>œ‡|¸|¨•€—€ƒƒ…Šƒ‰„¿œ¨›’›‘œŽ ùL¦ ”’Œˆ…Q¸h`$I¹‘û1ŠZ‹TŠNŠOŠXŠbŠa†^ƒ[ƒ[bzg{i{hzj÷/ø5÷C÷ ŠûBû ÷Z÷i÷ûi÷ÚXˆRŠzŠxˆu‡u‰z‡‰€†|†z…zƒwt€tvik^•·½ª³œªœ©—¡šš™™©d„•|˜r˜r–t’t•fŒ†‡ŽŠŽ‡‘Š’Ž’Ž’•Ž–’‰“†•†“}t¤t¤k©d¬ªŒ•˜ŒšŒšŒŸŒ¢÷“Œ†“™f´i`R÷¢ ’’‹‹Œ‡ %?£‹‹û‹‹‹„Šs` %bB®`˜’–’Œ“•Œ–ûD÷Ö‘ûQüw…ûj˜¡•¨™Ê÷î?¡“ ”Ÿ–…÷øù©¤ŽŒŒŒŒˆ„‘O¼cZûÍyýbùI÷îýI²—¹Kª ¸£Æ¨Ƨ¸ ©™…—az[{U{T|h‚{ˆ|ˆwˆsˆ÷ßø>ûŽM­d”¥¦¨÷Xt‡X –›“ž•ŒŽŽŽ‡Ý÷¤œ‘ŽŽ‡Ž‚9­Ehû„TŒ¯d¯–‘›Œ¤÷D3ûkX¬d²•’œŒ¦÷#¥ûTlbû‡V©g¥”Œ’‹Œ˜©Œ÷[ûÙ€‰ƒ††‡††‰…†yŒŒnmt{Š}½}©€“„•„ƒŽƒƒƒŒƒš‘›’™“›“•‘‘Ž•Ž“––÷ßž›™”ŒŽ…‘~”ûœ\€€šw–}‘ƒ€Ž~”[ŒˆŒ‰ŒŠŠŒŽŠŽ“‰””—••—Œ•—„–~˜~˜qŸf§÷­ûk³Qµ °ª™òµ”™’”„–8tU|q…q…bƒR¬÷­d©•Œ”‹œŒ›•‹÷@ûÀŠˆ…ˆƒˆ†‡ˆ‡ˆƒ‰‚ŠxŒpŽpŽuŽ{Ž‰z°‚£„•ˆ•‡”…“ƒ“ƒ‚‚‚Ž‚Žƒ²ž£˜’‘“‘‘“•–˜š÷Ø£ ”’‹Œ‹‡’ %Q³h`û~÷Ðø;\SûQº£™ŽŽŽŽ‡Ž‚Ž:«$û}†ûŸ‘ ”¢–‰¹ ÷Ï”‘ŒŽŒŒŽˆ‚“IÃ\Wûcà÷Ÿ‘Œ†’€•M¾bXû6ã÷¿•ŒŒŒˆ…‘ûÿü5œw—|€Ž€’cŒˆˆŒ‰ŠŽŠ’“”•“”–Œ—Œ˜…˜~˜~˜qc¡žû-‘èÊÅÀ¡µ¡µ˜­¤¤Ž§ªŒ©Œ£ŒžŒã˜‹žŒ¤ÐüQ|‰‚‡††ˆ†ˆ……‰|rsx}ˆ|¶|¥““Ž‚„Š„ˆ„ˆ„¬¡“—“••“•––”’ø*¡t’‚“”{”|‘|}}Ž}Œ~~ŽƒŽ‰ŽˆŠŠ“Š“”–“––––…šž€ž~š}™}—rh Èª§£÷ bS„‚xsjd]¦>kdtr~}~}~||||y{xx”¾¬¾¶¾¿û~†û•™‘™“•‘Ñ÷]=––•Ž–Ž‘ŽŽŒŽŽŽ…î÷—¤žŽŒŒ†’S°nbû5’Ÿ¨¬¨¬¡¥™œ÷a“ŒŽŒŒŽˆ‚“KÇ_T8Ÿ¥®½ŒŒ¦¯¾Ñ¤’’ŒŒŽŒŽ†€“F»‚q…~~qvdPÃd^j÷  ™’ŽŽŽ†Ž‚>«ûB9[Ž¯e“¤£¡¢û$)[\ºcZ;÷$÷-“ŒŒŒˆƒ“RÃ[XW÷¥˜”Ž†Ž9«ûEû]Ž³f’¤¡Ÿ½û$û+LŽ±d’¤¢ ºTy‹qŠjˆ%Šj„e``tdggghnotwøäé÷&÷]û&û]÷:÷÷]ûû÷Î÷$÷rdynxx}x|xüï3ŠpŠ~ˆw‡p…q„l€fgƒs…~†~…~…}–‚¬À¢´˜«˜©š´¼š“’ŽŒŒ†Ž‚øaùh[UûÙR·c¯˜ŒŽ˜‹¡¿ûKP¯û
+üJ†û›•Œ“–‘Æ÷´>™™”—‘“ŽŽˆ÷ ølž˜“‘ŠŽ‡ƒ‘Z°phOŠ÷÷G’ŒŽŽ‡‚“ü!ýZ÷÷´ûû´÷1¶¡ž¡›œ¢˜©—ª“¨‘©§©©Œ©Œ¢ŒšËûj~€Žƒ’…•‰‰•˜Ššºûû´Ä÷ÔÔpr‰kˆdˆd†lƒs…sƒx{ƒ}||÷÷ìŒ÷Éû÷ûŒkzŒŽˆˆŽ‰ŠŽ‰‹‘”÷UÑ÷FꇢŠŽ‰”ˆš~ŠqŠxˆz…z†z{x|x|Š„Š……’…’†”ˆ™—–“””“‘”––Ž–—Œ——Œ–÷ ylwivg”‚œ§ª••—•˜”™•™‘˜ŒªŽŒŽˆ…‘DÉe_ûû ûü7Œ‚„„ƒ’„ƒ’œ‡¦¦Œ©‹«Šª¢‹Œš¯Œ¢‘—–•–—œ—¡}’€ƒ•†›…šˆ  ‹£Œ§{‡fAˆvˆ}‡‚ˆ‚…„ƒ…ƒ†]‰6Ž}‘‡…‰”–÷iµ¥ß¿¾ªªž–’¢‰’Š‹ŒŽŒŠ†’TÍzq…‚xwkmkmuw€y}sx÷t£œ’ŽŠŒŠŒ‰‡n÷Ѥd…€{{|Š||‚ˆˆ‘Š”Œ“Œ“”–”––—Œš…š™šp `¤£øf‘¿¦± ¢š¢š¥§ 3ˆ@”Žû4ˆ2¢’“™”÷^Aû·N¯d”¦«°÷pCüN¬h˜™ŸŒŒ¡–Œ¢„wˆƒ…{€|{}u~lz‚‡††‡…‰„„“ƒ’‚–‡—Š™Š™™“›“——“š•›‘Ÿ¡Ž£š’›øƇ°n¥r›x™x—y“}“{‘††ŽˆŠ‘Š‘‘‘‘Ž”Ž–Ž˜Œ•“Š“ˆ“…”„”x—kœ@°†„‘÷UŽŒŒŒŒ‚”y›\²\]ûÌÓ÷莌Œ‡‚”Vº`aû‚Õ÷lk£“ ”œ•ˆÏ÷ª„–ˆ¦ˆ·‰Š˜””ŽŽŒŽˆƒ“…’…”ˆ”‡˜ŠšœœŸ‘¢€yX„z†~‡„‡„††‡‰ˆ…Šy{Šsk”m”k™kkœv™€–•–‚–÷Ö«•ŒŒŒ…‘~•O¶aVûyt{£€œ€¬~º›˜”’ŠŠŒˆŒ.¬,“t‘|Ž„„‚’€û;y<…¼g¤—ª“°÷˜¦f§n¦w¦x³v¾uüdpšœ–÷˜–’ŽŠˆŽi›ñ਎ŒŒˆŽ†Ž@¼|pvnrmrljkbjcj_i[h÷’û‚÷4÷^û40ž›˜”–†›†™}œvœuœ|—‚’€™|–}‘~“}|Ž|‘pŒˆŒ‡Œ…÷.÷4÷lû4û9¬¨«¥«¤¬”ŒŒŒ‹ŒŒ…“€V­€n‚x…‚…ypm^ûqû‚ f–kŒrr‚Œ…Ž‰Ž‰ŽŠŽŠ”‰”‘–™–˜‘˜Š—˜†–‚•”tŸf¨÷^†™{˜|—s–l–fŽ‚†‰‰ŠŽŠ’’”“••Ž•Ž”‹•ˆ”‰•€˜wšwšršm™Ïù]®z¤v™tšs“~Žˆ‡ŽŽŠŽŠ’”••”•‰––‡”…”„”}“v‘v’z~Ž~}ŽÆ÷ºS±—¶–¼•¼–ҙ꞊šû;væ÷:ŽŒŒŒŒˆƒ”WÀa]D÷òe”Ÿ•”Ž‘ŒŒŒŒŽ‡Ó÷\Ÿ›‘ŽŒŒŒ…€“^«phûrU§2û_†7“«–ŒŒŽ¬èû(ŠR±d™’’¡°²+`†N‡<Šä÷Ÿ÷A—x„€Ž}Ž~}Œ~ŒtƒŒ†Ž‰‡’”“•’“Œ”“‡™‚ž‚žz£p¦…ŠÌèûµÀ÷Xò:Z¬_‚j}ixfV¢£®¦²¨·¢–û,ûœû䀉XŠ€ˆ|…z…z‚{€|€|„Š†Šˆ‹…Œ‚ƒ“‡››Œ™”˜–œ‘ž‰£¡‰žŠšŠ™‰–‰’Š’‰”ˆ•Ú†“cŽ~Šs„j…iŠ‡‹ˆˆ‚†•”‰”“•“••Ž–”‹—ˆ˜ˆ™‡™…™…™‚ Û•v‘~}Ž{z‹|‰}‹‰…ƒ‹‡‡‰‰‰“•—•–‘—Š™Š™†š‚›‚™„•ƒ•ƒ•ƒ”Û™p”|’{xxŽyŒ||‹‚‡‰ˆŒŠŒ‰ŽŠŠ‘Š“––••˜Šššƒ{ zŸu¢n¦÷n÷´nAsOw_w]~p…€…†…‡‡‡‰†‡„ˆ­S©ž¤˜ ’ “ “¢“v{Œ‹ƒŒˆŽŠ‘’’’’’‘“Ž”Ž”’’Œ©p¹TɃ„œd•p||Œ~Œ‚b‚b‚`„ºì¬ÑŸ¶¶¢À¥È«n›”Ž–ŽžŽ‰lˆM‡P…R„SYy_y`tfpkpmsryywyouepç¿Éº¬µ«µ¤²œ¯œ®—¼’ǒɺŽ®®¥ŒÒ‰û~‰^ˆ=ˆ?ˆXŠtŠt‰vˆ{‰yˆ†ƒ†„……„ˆ„‡~‰yxŒpŽh’‰~´~¤€”ƒ•ƒ‘ƒƒŽƒŒ‚Œ²˜¥—Ÿ–¡“£¦¦Ž¸ÈŽÉÈŒÆƽŸ”“ŒŒ…€“X­p`P‡ŽÜŒœŒµŽÏ™“Š‡Ž„Ž>«.ŒiŒjmŠk‹oŠr;…ž²›‘‘ŽŒŒŒ†’Q®†nˆx†x†x†xƒs‚nh„h‡hˆ´å³å³å›’‘ŽŒŽ†€’L°†_Š††x„k„lƒoƒrk,…x†~†ƒ‡ƒ„…†¡Z˦Žœª’¬ø Û´ÙÂ×ÒOˆ<šŽž”¤™ˆÇŠ¸¥€ž}™|—|”Ž‚ƒ†ˆˆ’’’‘Ž”Œ——‡—ƒ–‚–z”p‘px€Ž±÷ ŽŽŒŽŽ†‘€–[¶e`\Œßßœ‰•Š‹ŒŒŒˆ…“c½iwayY{YzL|?~~ Œ¬¸‘¸‘©›Aû0G³aœ’‘–¤Ž²ÇthqklnlnahVcšûÚ¹`Ÿ•–¨¸ùrŽŒŽŽ‡‘€”Q½^[ûÊÊ÷͘Š‘˜|Qºb`ûgÔ÷}Šržž”ˆÊÝ›˜“ŒŽŒŽ„‘~”c¦miü|N¦ŽF-ˆ; ’œ“š”Ÿ÷qBûrFŽ·c”¤¬´÷(Lûí÷÷J÷÷qû.Œœ’’‹”†•‡––{•y”x•v–… y’†‘‘~’~’z’v÷3÷÷|ûû6  ¢¡£ Ÿ—Œ‘ŒŽŒ‡ƒ‘T±‚n‡€…„}ƒx|tûùûz€lˆ~||rxmv„†…†ˆ†ˆ‡‰‡ˆŠ†Ž†„‘…šˆ¢Œ¢Œœ˜“¥•¤ ššŒ››÷ƒ„›gŽ…ŽzŽW„Œ†‰ŠŽŠ–‰–•˜•˜–“Š•‰“‡“‡“„”‚”‚”y›r ìø“Œ…Š‚‹“”–—£¥œž•™•—™Ÿ¥ï~m{ctgmmnkindo“¼£¶¨±¯°­¤§– – – • ÷ ‚d‚k‚r‚q„|„††…‚‰€†n‘—V‡§‚žƒ––ƒ‘‚Ž„Ž„„Œ„°•£—•™—™”ž“¢ŸÉ•š’ž¤œ’ŽŽŒŒ†‚’Y®mhû’¯¹Ÿ’ŒŒŒ…~’S«‚nˆ~‚v~n}n}q}r~ry„€Îüµ¢o˜|”x‘uu~Œ‰Œ‡‰ŒŠŠŠŽ”Š“‘”˜¡ªˆ£qp›n›l™÷]€¥ty”}”}“~‘~€Ž‚Ž…Ž‰ŠŽŠŽ’Š”•–––‘˜ŠœŠœ€švšvšgX èÊlŽh…px}x€{€~ƒ‡„Œ…Œ‡…††“ˆ˜Œ˜—‘—––—’ Œ¨Œ˜Šœ‰ ‰ ‰šˆ•‚©÷*íHƒE‡BŠ¶M²˜®”ª’ª’µ“•Á•Â–Ö†›ûKrè÷SŽŒŽŒŽˆ‚“Xºa_-÷
+ff Ÿ
+Ð ¡”” ¤š—‘–”‘™ ú|ù§
+endstream
+endobj
+279 0 obj
+<</Length 962>>
+stream
+€
+@
+
+(
+
+endstream
+endobj
+281 0 obj
+<</Subtype/CIDFontType0C/Length 2824>>
+stream
+
+¿ $
+wØ÷¬ø—…ÅWÅ÷4ÅõžÌ÷xÌ\ø‘¨¨q‹}qw‘}÷n×RÛûa*‹Fpž|¡‘¬µŒŒŒ Œ—˜‹—¢­‹r¬¯o‹onP‰Q‡MwYzKgG€DÊOè«É¯¿@jŸ½‰±££‹¨û9òt‹vbx¬zh\‹ˆP`«´Æö­÷ ø—…Å÷ÛÅ÷ÅëÌ÷Ìøq÷l÷7í#B]_‚÷Oª…•iI}q‹nn¥‹™´ü”y‹t¬«‹ ¨p£°nÃõèê÷J+GGD@fà½ÚÄÃÃÌÓÅB1ø—…Å÷ÞÅÕÌ÷4ÌŽÙUÌôø\÷¥r‹ƒt‡ƒ}†TuZ…s6CÒ辨÷÷¦ ‰Š”’‰ŒŠ†bŽªŠ‘è¡žš¦Ð&‹_û?Tû 7ûè'÷ ÷®î›ø—‹÷÷a÷÷]÷÷Îø
+¬p£nkrrkm¥q©¬£¦¨ûÒ¬p£nkrrkm¥q©¬£¦¨ø—…Åà‹Â÷ÅÃÏ÷žÍÜø\÷‘‰¡lx…„|…QrJ†x8IÊØ€÷¹ ž‹°÷ Iéûû.'ûûð)÷÷ºä¥I÷<ûžà˜Ì½Êï 6Yø—‹Å÷ÏÅ÷Å÷JÌñÛøAøÄÄ?‹|?;`2U(}p‹nn¥‹™ïûÏ,}q‹nn¥‹™÷“™¥‹¨¨q‹},÷Ï÷ ™¥‹¨¨q‹}û ½ÙÑ‹«‹“d¬›¢—§ø—ûyÃ÷FÃÅÃ÷bèÄyÌ‹Ä÷ÌpÌŒÄ
+Ó—øC—÷<™ŽŒ
+To ‹ Å
+Ì ¨”œŒŒŒŒŽŒŸ ¬¢ŒŒŒŒŒ–”
+endstream
+endobj
+283 0 obj
+<</Length 16>>
+stream
+€
+endstream
+endobj
+285 0 obj
+<</Subtype/CIDFontType0C/Length 32444>>
+stream
+
+
+^
+c
+‹
+” † Û ä ö * p  5dÕþLVa˜Ãþ"1B¨·íõ K°ÏÛö3P
+m ˈ
+· П@š›Ð"“$Ê&¾()r*p,{-Ÿ0)1®4l79/:ó=–??B1C_E–GøIQJ"KäM¶OQÄT‰V¶Y3[Ê]ý`ÅbÖe·højëllÌmânæoêq½r²uÁv¥wŒyEz5{Â|ÚêÿŒÀÿf€ÿ
+÷KT’‡‡‡†Šˆ‰…jŠq‚zy{~ƒ‚…ty‰ˆ…Ž’û#ò3÷7l÷s‚ü2«´«  •“†˜¯nx…Šˆˆ„û7‰û]ˆ€€ƒx…d‚q‹}•„‘ˆ‘‘èк;UŠ‰p–””‡¶Ë‰ß÷̈†ˆ†ˆ„\4P4B40,P^tˆŒ‰ŒŽ˜š¥¥ò÷Ù÷/¾÷[ø÷íûKû
+Œ÷S…÷œ¨€Àpˆ•¿‰ê¢š——“Ž•ˆ…š¨ž•}ŽˆŒˆˆŠ‡†…ƒ…‰‡‰‰ˆ÷²ºŠüŒŠû–‰~…~xƒ\€l‡}ŠŽŠŽŠ¯z£l—fš…ŽˆŽ“Ј±‹“Ž”•Œ÷eø-„÷Œ“Š“‹—Š”˜ˆœ‡ž‡ŠŠŠ•‡†…†‚x~û+ûŒû¦‹û"Œ‚ŠbŠv‰‰€y…q|ŠŽ‡‘ˆŠ‘“‘÷t‹÷C…÷ŽŒŽÚ~ˆŠ•ˆ‡…‡ˆ‡…‡‰Š†ˆƒ…üÄ–†’’‡ƒ“Š„‹‡ŠŠ††…‡‚ˆŒûõ‹ûKŒ~ŒN‹jˆ…}t„h~‚‡‡”Š–˜‘ø¡2û ˆˆ‰‰‰ŠˆŒ‰Œ‘‘š—¢¶âª÷ ž÷1¤š‘ŽŒŒ‹ŠÉw²|š”†……Š„‚…{‡nPzf…|ø\ø<û55¸†¯z¦nœv“vu^ŠwudfŒ|Ÿ‘°Šº‚®z¢Šû»‹û)Š‰†ƒ„†€ˆf€q‹}—ˆ‰ŽŽèöŠ÷ ^Vaafk†‡†‡††„„†‡‰†ˆŽ‘ŒŽŒŽŽŒŽŽ’ŽÅëµ÷¤÷N`Š‰t‚•‚”‚”‡ªÃ‰Ü÷0û(‰„ŒˆŽŽ‘œ”÷
+°Ûª´¥š–˜“—‘’‡•„™€ŒŠŒ‹ŒŠÂb¦o}Š†‰ˆ‡ŠyŠZ‡;ƒ‡‚…„ƒ„û#—º² £˜Š©qºV¤Üé—÷
+Š‰j‚•‚”‚”‡¸Ú‰÷÷¤ûJˆd‰}‰€”“”¶‰¼‹Ä…÷”ŽÍ¶£†œ…“…„„}p}†ûNðŽ¬ž™›”ŽŠ–‡‚•‡‘ˆ‰ˆˆ’‡«x›}ƒƒ€v~‚û˜{û9vFxTfjT„…‹Š‡o‰}“œ‚°k©V¡„ŽˆŽŽŽ’Š‚Ȫ†Ÿš‘—•ŒŒ‹ŒŒªºž÷9’÷°û‰…ûTtûd:pS]ZLb_qh<[yy†ˆ ˜´ž£–¥ž§¦””“”““Üâ´÷<÷Žáø`z›‚•ŽŠ´~ÖUö-¢à™ÜØû)5Š‰vp©œ‰œ‰›ˆ÷s©ž—š’Š•ˆœ…ˆ”‡—‡®|¦~™€ƒŠƒ~r|rûp-m<ÂM±QžV™V†ctr|}{„zpŒy˜¤‚ž‚ª´‚ª¥ xvyw{zXTP[Jb„€ƒ‡‡†Œˆ‹ŒŒŒ’˜••™’ÆÂÇáÆ÷
+D÷SÕ`®ø&”÷ZŠ÷‰é‡ÕžŠ¬‡¢‡œ‰•Šˆ“‘Š †–„€Š„€€v}ûiŽŽ‹Š¼´ £Œ’ˆ‘‡‘†”„”ƒ•ƒ•‚•––ƒ…‡…Š‡ˆ‚û-ŠûúŠûMˆ…z|~t†Šˆ‹ˆŠBxgŽ¢€³s¥f—€Ž‚Ž„‡ŽŒŽŒŽ“Ù‚º‰š‘‘ŽŽŒ“Œøkû @Š‰pt§µû&ˆ‡‡ƒ’‡ŒŽ‘‘Š‰Æx·n§f˜z’xxWŠsqZzx•žx†•‹ª¾Š¡ƒ¡} ÷mùÎÀª¬“‘Œ“†–ÈWªl‚…‡ü´û¸Š‰do¨¸øòÊ…ø¨Æ´¥©—Š”‡—‚Ä`¨o}…‡ˆƒücûŠ‰j‚•””Éøh}–„‘ŠŒ’ŒŽŽ’¤¢Š …´€¦z—s€€€]vt`iz®†³¤|•÷ƒ¢¯Ó °ŽŠˆŒ„…sL{Zƒjdû†|†w„s]û.¤L“vx|Šp}xoˆ~€‰vŒ|’€™˜†•Œ‘ÒŒ¹† ƒ£xœn•‡Œ‰‘Ž“¦‘–“—–­ÉÄ÷7ø†ˆˆ†Ž‰ŽŽŽ‘º‘µ‡¯}²xžnd`ŠuubfwŸ³‰„´z¦p™ø(ü)÷d?TŠ‰jt¨¢‰¡‰¡ˆ÷ ։ׇ׌ŽŽ’“Š£‰³†¨‡ž‡•†”‡†…Œˆ‰ˆ‡‡„††û@ðƲ£¨“’Š”…—´^ q…„†‡û‹ûd÷ª·§¢—™ŽŠ“…—´bŸrŒ‡‡ˆƒ‰û¿Š™„–„“…˜’ƒ„Š…sŠûWûY÷Ñ„z¸q¯j¦|™ƒ“‘Ž“Š‰“’Š‘ŽŠ‹ŠÊzÂlº\§g™kpŠsƒw|||~z„xnŒw—£…¡ˆ Ÿûsdûl`v…ˆ†ˆ†‰…Œ„“ƒ™…’€«|€œ’˜¤“äËÝÓ÷!û @Š‰j‚”„•„•¢‰¡‰¡ˆ÷Ñù
+Ž“Ž’‘ŒŠž‚¬y¢¢|¢y•„„„Š†ˆ‡„ˆ‡ˆ‚Š}Šjflknp„‡†††…JQ1KûFŠ‡ˆŠ‰†ŒˆŒŒŽŒÉʾIJ¾ŽŽŽŽ¨´²Ìºä÷µû×û ††…†……y;v0kG`^XT3Zû^†Š‰‘Œ’“ЯÅÀºÑ²Ì£å•÷{ŒgŠT‰„”ƒ”ƒ”ø †¹¸’‡ƒ–Çd©p}Š„ƒ„|ƒ}û5 mFZms}q‚o‡v€’™‡±r¥^™u‘†ˆŽŒÐ…¸Œž”ŒŽŒ­©œô÷H÷õ¹avnh{\ƒ‡‡‡‡Šr˜¤Z„~”z™†‡Ž‡Ž+ÝB÷X÷@ŠŽŠŽŽ†”™“Œ– ›Š›ŠšŠ–Š“‰’‰’‰Žˆ†Š…ƒ€||’e™fžg¯R·\ÀhÄe¼u´…³…•‰ˆ†ˆ‰‰‡Š÷ŒøUŒŒŒ‹ŒÓyµ~—ƒ–…‘……Š…tŠL@ˆ—‡‘…ŽˆŒ‡‡Š…††€†ûaŒûqŠqˆ{……pzlˆj—„ˆ÷ëfkUbEZ‰‰ˆŠ‡…ŒˆŒ—š£¥ÉԾ߲뙘‘˜j÷ÇŒ””“—‰ž…Š’ŽŠ‰Æx«‘…‘†Ž‡‡Š‚„t‡V:ðŒŽŽŽ¬Ÿš›–‘“†–²jŸx……Š‡ˆƒûC˜‚˜„—‡¢~š”ƒ—~‘}{dwxd|Š“”…œ¢Š­ƒª|¦kUEIH=J‡‡ˆ‰ˆ†‰Ž‘ŒŽŒŽŽºÖ¬Åž¶ŒŽŽ’œž¿¨áø\üd†÷4˜‹ž‰Š‘Š’Š®†ˆ˜”‰‘ŠŽŽ‹˜†’†„Š„ƒyƒ!°Ž³¬žŸ”…˜²gžv„…‡ˆƒûCŠûŠûˆ„„€{‚tƒ„uw‡y}Œ‚’†™„£ƒœ•z˜m—b•„Ž‡ŽŒ’›ª†Š‹½‡§‹‘Œ‹‹ŒŽ’ï÷Sû2)Š‰f‚•ƒ”‚”¡‰¢‰¢ˆ“`¾}­}œ}¦v™row„{}~}z„xfŒxš¨’óu¢ˆŽ‰ŽŠŒŽ‘Š÷*ø„Ž£ŽŽŒŠ™‰¤†‰—Šˆ¢ƒœ†•‰ˆŠ˜„’……Š‡‰‡‡‡„‡ƒ‡ƒ‡†„‡„‡…vn~x‡÷:º­¡£•’—„}œš‚«k›z‰…Š‡ˆƒû•¬€¡€˜¤x˜uthvybfxš¨ŒÃ˜ƒœ{žaû8TTr†Œ‰Œ““š™ ²Îªá¢óÖø
+“‹’Œ‘¶~ªržˆŠŠŽŒ–¼Š²§tŸw•tq^Šuu`fŒxšŒ¨÷l÷MŽ–Ž”“‘ŽŽŽŽˆ…Œ…rVû†pûŒƒˆzŠ|}ˆf˜F¨(Šu…z||w„rtŒ{”€š‚š‡§Ž´ŠÝw»d™~’…“¦Œ•“¤¨Å÷æ÷ˆûB÷Qɹ{l¨›y“vsŠ€‰‡ƒt€w€nqŒ{–… ˆ’‰•˜‰¶{«n ˆŽ‰ŠŽ“÷üÂæƒ÷]ž‰°‡ÂŒ‘Š”Š—ˆŠŠŽ‹“Ššˆžˆ †žž¢©¤²ûTû Š‰Z†•†”‡”‡¼÷‰÷`£ž™—“Œ‹ŠŽÀp¯tœz‡‡†‚†zTQxeN™†’†‡Š…„x‚V÷Á¬¡¦—‘Š˜ƒŸ|¸j¡t†Šˆˆ„ûµû|Šj}upjg…e€Š…•ˆ²}¤s•r–~‘Œ“̆°•“’•÷Fû'Š2Šl‰ønøÕ¬›•Š¢|®n¬pžx‡†ˆ‰û¶vfŠû”‡‚Š†Ž‘‘Ž“÷8¤÷(®÷¸üû¬›Š°€©v£‰ŠŽŽŒ–Ÿ‡‚¨²}¤u˜n‘xŠwƒw„€ƒ}‡ˆ„„Š‚v|’™ƒ†”‰““÷=÷†’‡’‡‘Š‹ŒŒŽ–œ† ¥ž˜}›z“vty…{}~|…zhŒy›ª”»‰­}ž÷x®ŒŽŽŽŠŠŽ‰‰’‰ž„¬|ºt”††‡Š„|ƒmƒˆˆ‡‰…ˆ>Tdn‰‡€‚‚‚ˆŒ‰Œ‹ŒŒ¬Ö¦ËžÀ÷øˆ<MŠ‰^{§‡ÇΉÖ›”—™“ŽŽŒŒŒŽŠ‰Äu°yœ}•ƒ…†~}…pŠnjpptu–‚…††„…}…¸…®}¥uœ|”vq`ŠxvfŒ…‡‹ˆu‘€Ÿ¬°‚©s£ûwŒûdf‰u…ƒƒ…‚‡€‰f‚rŒ}•‡‰ŽŽî÷÷?`d]jZoˆ†ˆŠˆ…ŒˆŠ•—žàäÉî²÷
+Š‰hs¦ù„ü(ŒûŒ6Žf‰‚†…‚†‚zr‡k~‚…„ˆ‘”­ûýiŒ~…ƒ†ƒvs‡r€‚Ž‘…†‰ŽÕÍƊʉȇƴ|Ûl‰÷Š÷w”‘•“•™–“’’ŽŠ’ˆ—…®€§{ x’…Ž†‡†‚€zzüxûc÷ý÷‡ûý÷ùô¹° ¢‘‡ƒ“·d¡s‚†Š‰‰‡û\¯¤€™œ~“{zjwzdm|˜¤Š²‚©|¡f JUv†‰Œ’•šž£°¶°Õ®òŒ–•Ž•ŒŽŠ•‡œ…‰‘ŽŠŠÌp’ˆ‰ŽŠ–ƒ‘…‡Š‚„t„‚€wûÈû›Œû$tŠr‡|ƒ…€|t†m‚…Œ‡„‰›¦øŒ™Š¥‡Š“ŽŠ‰È~—†‘…„„‚‚z€}÷<ĵƒ{¥¢}—yvgwydxŒ}‘ƒ—‰ˆ’‡—z±x¥v™ˆŽŠŠŠ“÷ûü_û:Œbƒ†„…„|s‡l‚Ž‡Žî‹÷ˆ÷-­Êp‰Ž½Šë¦¢™™¶z¦|—”„†‡Š†„ƒ}ûŒ@xq‰|†‡~xt…o‚Œƒ…ˆ‰š¤û:ž÷:÷û:ž÷:öû:Ú÷!÷›© ™š‘·|©{š|“………„ƒ‚|ürŠx‹Š††€ƒ‚ƒ€„††MzlŽ¢†ªz p•~€€‚Ž‡ŽŒ“šÊ…°Š•‘‘Ž’“øiûB!Š‰fp§÷_÷I÷F»°¡£“ŽŠ•…š~±ižw„„†ˆû™„›ƒœ€¥z˜uqgŒvyblŒ|š©Š¶„¬}¢r|~|~}}z~jq\d‚†ƒ†ƒ…‰‡ˆŠ‰†‰Ž«¸£¯š§™¨ž¼¢Ñ‘Ž›Œ¯~Âr˜‚’„…€…vˆ€{|}øGù ÷(¦¦›™’Šœƒ§|Çh©x†Œ„…†‡Š‡Š‰…bƒGTcj÷/¥œ™˜–ŽŽŠ‰ŽŠ™…¢™…˜„˜‚–…‘†‡Š‡‚ƒzŠü|Œr„y}~}~tl…d†v‹†Š¤‡ž„—„œt™d˜„ŽˆŽŽ‘Ó²Š‘“È÷û0ŒûGd‰u‡‡€zs†k|‚Ž‘‡ˆŽŠŽ×Üáû&„IrQbXb[Qd?nŠ‰Š‹Š†ŠˆŒŽŽ¶±«° ®¶ãœ÷;‚÷‹Zkfur~…~…~„ŠˆˆŠˆ†‰ŒŽŒŽ””÷öì÷
+Ì÷Š”‘‹Ž–†š†Ÿ…Äv¨€Žˆˆˆ‡Š…‡‡ƒˆg€{zyywz@û=÷3¥¸£½¡ÂûEpv[fEVÖûæ÷$÷ûŒž÷÷û÷„û¬÷0÷û0ž÷0÷û‡‚…„‚‡øên•f•`”_ˆnŽ}•…Žˆ‘Š’“–•œ¢¢­©¸WaŠ‰lq§‡²Â‰Ð¢µž´™²<VŠ‰pn¥ˆ¼ïŠ÷+Δ³™ŒžžŽœŒ–ŽŒšŠ¯Æx™†’…ƒ††‡‡„‡„ˆƒ‰2û#æ¼°¡£‘ŽŠ‰’‡ŽŠ‰Žˆ¶f¡s†Šˆ‰…û¸Š¡…–„ƒŠ‚€…w‰…~zop`÷cŒŒ‹ŒŒº« ¢•“†€˜´j t‡Šˆ‰„ûŠ›ƒ“„…€Š†ztcscrdÎ|½r¬h˜|’zydŠywhvŒx’|™_¸c«hž?,ûeû:„Œ‡ŽŒ—£÷Ÿé¸×Òî÷Hû
+ŒŒȆ³‚žŽˆˆ‡†‚x}S÷½°¡¤“Š‘‡–ƒ»d£t‚„Œ…‡ûŸ~ŒvpŠ~ƒƒ{†epŠ{–†‘‰ŒŽ­Œ¤šû1ŒoŒu|~‚z…†{{ˆ|pŒ~’Œ™Ž´Œ¦—û<Š‰pq§ˆ´â‰÷ûlûÊ„†‡†Ž‰ŒŠŠ’Œ–Ž ¨§†€¤©{šsldŠwxcn}—¢†´€¦|—€û¤¶Œ¤Ž’’˜¡œ¬ ¸Ì÷¾ð¯Ð‘ŽŽˆ…Šˆ‹ŠŠŠx^g Tû<xN‚cwˆ—`£9s€yv…ˆyŠ}•€”†™œĈ¯›‚˜x˜o™†ŽˆŽ‘îøYz—‚’¾–¹…³u¢|–wrv…|~€‚‡~pxž°‚£~y—ô÷øQ¾°¢¥“Š–…›~¶g¡u‚†ˆˆ…ü"ûiŠ‰po¦øÐøË ª™œ”Œ©}Äm—…’‡ˆ†‡‡Š„~€r}„@|û8ƒ1|Ú¨¢šš’Š§{Àk |•‚†Š„€s}†\…_ƒb{CzWzlwhosg}‚ph‡`xŽ‚˜£ˆ¬z l–‚Ž‚Ž†‰ŽŒ’ŽŽ‘‰Œ‹‹ŠŒ”Š•Š–‰…©¨ˆ¦®¤•ž™£¬žÞ™÷’Œ’Œ’ülqz{‚…‚“€”‚‘…k¦‚œ™”¡©š÷+’ë¶ëxª„šƒ‚Š„~‚r~‚1†Z‚†f‡b‰^÷À­ø û³û1Š‰po§Ë†÷Â÷ˆ¸¾ŠÆ÷L\dŠ‰n‚”ƒ“ƒ”ˆ¸¹Š¼÷NpnŠ‰nw¥ˆ¸®Š¤ȉ·ÕŒŽ’Ž°Š¯†¬€”ˆ†„Š†ˆ‡„†ˆˆ…‡‚†Œüu‹ûŒ|`‹u‰‰}r„f|Œ‚‡‡‰‘ÆØéP_Š‰p‚”ƒ”ƒ”øUøʼ³¡£ŽŠ‰’‡ŒŠ‰Ž‰¸d¡sƒ†Šˆˆ„ûaŠûQÊ‘”’¨žš™•‰‡¶d¡t…†Šˆˆ…ûRûLÓ¼³¡¤ŽŠ‰’‡¼b¤r€†Šˆ‰…ûlŠ?CFŠ‚ƒƒ}…†~y‰v{Œ‡†‘‰’Œ“ŽÄè÷Œ÷Û‰÷\‡ÕŒŽŽ‘¶Š°†ª”ˆ†……‚x~üðûIŒâ‰Ü‡×Œ•Š—Š™‰‰’Š•ŠžŠˆœ„”†††Š…‚‚yûQ²¥ž•‘Š—‚œy¡u–}…†Š‰‰†ûûµ––•œ©Ÿ”•ŠŠˆŠˆ‰‡‡‡BPdk†…{üt…|ƒxxo‚f|Œ„“š¤zŸjšnš†Ž‰ŽŒŽ’½ˆ©Š•‘Ž”™÷|rurusu„…‡ˆ‰‡Œ‰Ž‘z߃¶ŒŒŒ”±™Î¢÷6hlŠ‰rƒ”ƒ”ƒ“ˆº±Š©÷”ùK0ÏŠœ‹›š„펌©ŠÄ‡©†šƒŠ†ˆ†„…‡‡…‡ƒ‡0’°¨œ‘ˆ…‘²mŸxƒ†Šˆˆ„ûû#›¯¦›‘‘Œ¢w²dŒ’Œ‘˜Å˜ë—÷ŽŒ“Š™‰ž† †Ÿ†Ÿ‡¤„˜„‚ivvLxRyX÷)¹° ¢‘Š•…š²dŸw‰†Šˆˆ„û–‡—ˆ—‰ž‡”…ƒŠ„………z<pûp3pN²aÂdÔh¤‚˜„‡‡ŠŠ‰ˆ‚ˆ€‡‡j„pxxk‚ƒ††‰Œ‰Š‹Šh¡_ºVÓMSK\Hf‚†……ƒ‰†‰Œ••ŸšÎÂÁÌ´ÕŠŽŠŠŒmÐwì÷‰‰Š‰ŠˆC]pgƒ‡‰Ž‘”£—«š²ŒŒ•Ž••ûÅû9Š‰t€”‚“‚”ˆºµŠ°÷#gmŠ‰t‚”ƒ“ƒ”ˆ¸±Šª¬‰»‡ÌŒŒ©ŠÆ‡©†šƒ„‚xû‘Î÷#Hø0jD™9§9´8¨ëõ’÷ü ü1û+Œ1ŒNl‰~z…‡{‰x{Ž‘‡†‰’жšŠ÷3‰÷ ‡ÝŒŒŒŒŒŒ­}Îp‰Ž»Šè¦š™—•‡ƒ™¶t¡{‚Š†ƒ„|ŒûòŠr‰{‡ƒ}tp}d‡pŠ|‹‰ŠŽ‹‡ª} t—‚Žƒƒ„‡ŽŽŠȪŒŒ´Ùû+ž÷+ñû+÷+žíû+'øJù9BB÷;’’‘‘ž›•”Œ¥¸t´q z‚Š……‡ˆ€Šƒ‰„ˆt†ZfAF÷/¨Ÿšš–Šžƒ§{©yš}Š…€w|Šû7Š9‰‰~|r…jzŒ€‡“‰ŽŠ­ü*û<ŒzŽ~’ƒ”‚ž„¨‡†Ç¹‰«÷Oö•¤°˜®¾¬å–•–ŽŽŒŠ‰‡v6†S—p o•z…ƒ…||zsiƒ|‰\†û‰ûiûŒ9—j¡wš˜—ˆ•Š÷=÷ÜN6[l~†‰ŽŒŽ¼¾¬°œ ÈÚÅñÀ÷ŒŒŒŽŠ•ŠœˆÎzµ{}’…††Œ~|„nˆûeûhÇm÷D¨À¤¼žºûR^[ccil÷eûœ÷kû*ûk÷÷.÷kû†ƒ†„……òv÷Љ÷\‡ßŽŒ“´…‰šŠ‡Ÿ†™ˆ“Š‰Š™…’„ƒŠ„‚‚züÖ÷nù,…÷ŽŒ“›Œ°†Æ‰Š—‡‘…ƒ„€x|ýl÷…÷ç‰÷g‡ßŽŽŽŠÍ†¶ƒž‡‡‡Š‚yû×û_9Šƒ…„…€sr†rzŒ‚‘˜¬üÒ‚}‚€ƒƒ„„…‡…‚Œy”o}”€”ƒ“„‡ŽŽ“›“”“Ž÷˜ø—.GŠ‰^w§‡¾Ö‰îŸ•”•”ŠŽŠ‰ßi¶tŽ€€„v†vyiiZZ—…‘………„…}…Ô€ºt j“~}`vv`lz ´ˆ†±~©v ŒüŠ[Šq‰‡~{q„h|Œ‚Ž‡‘ˆŠê÷÷G‡ˆˆˆ‰ˆL@]lz‡Œ‰“•š™èòÐõº÷-÷…”Š™‰ž‡¿­u›l’~Ž~qwt}„€~ˆ}€ŒƒŒ„u’€¡°Ž¶¬t¡ŠŠŒŽ‘ù-üû9(ŒBZ]‰q……„„}†x‰lˆxŒƒ‘†Ž‰‘÷íá8jˆx…‡„†„‰ƒŠe‡uŒ„’ƒ‘‡‘’–÷5‹÷4€÷4®Êo‡©‰Â¸‰Ò‡ìŽŒ“¾‡¸Š¡ƒ}„‚ƒzƒŒû:Ï“Ž’Ž’š•”““íZ–„‘……‰…€x}ûIû NŠ~‚v‡f„s‹‘†‰™£ûŸÞ÷=8÷UûBÞ÷BñûþÝ÷=9ŠžÞ÷B9®÷܇ªæ‰÷+œ´˜´•²ûŠCŠ|‰q¨‡®Ü‰÷–±”µ“ºû>*Š‰tr§‡¯õ‰÷E²´´”‹“Œ”•Ž‘ŠŒ‹Œœˆìu©„š‚Œ†ˆ‡…†…††u;÷x¶£§’‡‚—Äc¨q„…‡üƒia|X÷N°¢¦“Ž‘‡ƒ•Ã_§qƒ„Œ…‡ûî„q}cwTø½°¡¤’Ž‘‡ƒ–»d£s‚„Œ…ˆü™}jwerbµ†÷ƒ¡‡âÞŠ¼ƒš|ˆŒ‰ˆ„€v}]ª¾­¡¤•ŽŠ‘‡•ƒ¼d£t‚„Œ…‡û@ûŒx‡~ƒ‚tqdVu€“†§ƒ“€•s”g“‚Ž‡Ž’Ž“Š›‰ ‰¤‰¢¡Œ –—ž÷Fû,2Š‰rƒ‘„„plsovt‰ŠŠŠŠ‰ûûCTv…ŒˆŒ–—¡žððÓ÷¸÷ û;Š‰r÷ìûB~™„“ŽŽŒ’Œž†¨Äv§k`x…|~~~}{…z€ŒƒŒ„Žqšƒ •¤¸‡¦ƒ“÷×ùûŠ4Š`‰o§‡¸æ‰÷¨ ˜™‘Œ¬yÈhš‚“ƒ…Š„‚wû w#o3¼A§U“jžNŠ^uo}…|wŒ}•‚ž‡”‡˜‡~ŵ¤k]ldmlŠŠŠ‰Š#0R^Œ‡Œ‰ŒŽŒŽ˜š¥§ £ ¦Ÿ©Ææ°Ø™ÊSèXÎ\²xš‚”ŒŠŠÐ`Ë\ÈX‹ŒŒŒ ì–äÛ¥ý~­ë¼ØÑÄèN÷%i÷<„÷Qwˆ‚•ƒ”‚”‡¸å‰÷¨š˜š•÷U—„‘„…ƒ|€n}jûU`û)V!ÊR×\ähŽŠŒ‰ˆ…‡‡ƒ‰q„qyrpru€ŠŒ‰‰‹‰A¼Q¾bÀMUOcPrj8Vzv„Œ‡ŒŽ“—š‘ø$ùpûn’H>¨4¦C¥R¥b´Þ¨÷š÷L÷b÷u€û™z™}™÷«.PŠ‰r‚•‚”‚”¸…÷²·­ž¡’ˆ‡‡´d v‡„Š‡ˆƒû‰‚†„‚„ûª°¦š’’ŽŒŠŒ‹Š¼f¤s„Š‡‡ƒû.û-•ˆ•‡–‡÷#h÷U÷‡°Ž’“Œ“Ž‰‡†ˆ‡…‡dqvc‰VŠˆ‹‰Š‰ûŒû5“7š2=ÄJë{DhMTV€‚„…‰ˆ‡…‡‰‰‡Œ‰ŒŽŒ¦Ãœ¼‘´‹ŒŽ¼‰á„÷’±ˆÎ™ˆ’…ƒŠ†…ƒ~•øv÷§ ˜™‡§}°t˜‚‘…ˆŠ‰zz2ŒDVŠ€„„‡…xxˆw~Œƒ‰Š§û)v~ƒ|…ot‰z’†‘ˆŽð‹÷ˆ÷ŽŒŒˆ¯zÎl~û
+÷)îû)ûm÷)Œìû)Œøc-ŽŠ“‹—Š¯‡°ˆƒ†‚‚z‰*ƒ<}Lî€És£f–{xŠz‡~ƒ|€{„xqŒyœ«†–‡”‡“x®o¦h‰ŠŠ‰Šˆzunp`ll{Ju*oŠƒ†Š‰„ŒˆŒŽŽÀ¢µŸªÆ²¯½—ÊŽ ŒÙ÷ŒŽŽŽ‘ûL÷q‡®ö‰÷F»±Ÿ£ŒŠŠŠÃa§q„Šˆˆ„û-†~‚}„{o{p|rЬ ™›’Ãp¬yœ~ƒŠ†x}Œû‹8ŒpŠjŠyˆ†|{tƒm}“…ˆŠ‘÷ÙûFŒû?‹+ŒwŠn‡yƒ…€yw…vv€”œŽ÷‹÷ˆ÷ŒŒŒŒ‘§t¾†›š‰™Ž±‹°ˆ®I\Š‰p·÷yŒŒŒ‹Œ¹ŒÁÃÈ÷‰„„Š…gƒhƒjƒ‚ˆ…Š†ŠŒŠ‹ŒŠŠ–ƒ«|²¤§¤°æº÷0žˆ¢ƒ¦¾v¥{‡††…„ˆ€ˆ}‡W>YD\JäwŒŽ’‘˜’‘–‘™˜®“ “ŽŒŒŽŸ„‰ŽŠŠ¶s¤}“‡›‚“„…~}„pQ>J>C=÷\’‰‡Š‰}„p„‰ƒˆ€‡û5H:h†ˆ‰Œ¡€¶vÌŒŽŒ ûx÷%¤ìº–¢—ŽŽ’Ž‰‡†ˆˆ…ˆn{u~}û4&9V‡‡‡ˆši÷Œ’Ž“Œ“Œø0÷¢g„r†}ˆ‡‰ŽdôŽ“•ŒšŽž’Œ‹‹Œ½¬µ¾¬Ð,KŠ‰jƒ•ƒ”ƒ”¡Š¡‰ ˆø)»°¢£“—„}²džw‰…Š‡ˆ‚û«¢—ƒ‚Š†xLXP_Tf÷µ‰v®u v“…Ž†Ž‡ŠŠŽ‘¿Š¼~¸r»m£ifx„{}}}|{„z|€•„†‡•‰™„£…œ…–ûu(w9y‡™‰–Š¡ˆ‡™†˜ˆ‘…ƒŠ†ƒƒ{€‚@ƒX„qv@[TAh\xV{P~‰‰ˆ‡‚Œ‡Ž–‘ ‘ô¯Òʯæ È“҇ݷøy´°‚y¬²uŸngŠx„z}}||y„vvŒ|‘€—‚˜‡™›Š½€¬xš€•…‘Š‰“Ž•ˆ÷tü¥û;Œ5‡Ž„’†•ˆŠ”‘ŠŽ¶Œ¨—›¡“Ÿ¶¬Ù”ŽŽŽŠŽ‰Š‡€T†dv‰‚”wžl†„Špws~z„o‡eŠ!ŒN•|ž€˜…œ¡†÷î‘Ž¤‰¶„—ˆ”Š‘Š „•„ƒŠ‚„z…ɉ÷š÷œà¢™”‰‡ˆˆ{o|x€y‚z‚ûT3\JfŒŠ‰‹‰ŠŒŠŒŒ€›¸}ÕŒŒŒŒ‘Œ’÷ù\°rž|…Š€}…oŠTJTCg^|zª„©‡©‰ŒŽ“‘—˜¤Ž”Ž’’”ŽŽ’Šš„¢}ºl¢y…Š€†sŠG:QI\X”÷ΓŒŽŒ‘ŠŽ‰†Šˆ‡ˆƒ‡„Š„ˆ„‡û5H)ajzŒˆˆŒ‰‰‰‰‘vÅ©„–’’žŒ¶¡ÀÆÈëJzW}f~‡‰Œ‚ıž–‘••´ž¾ÜÈ÷#Œ’’Ž’ŽŒŽŒ«{˜„} bý蘑˜˜ò¸äÏÕçU÷p÷÷2\cŠ‰j„•ƒ”ƒ”Ì…ø¼²¡¤‘Œ—„œ}µj v…Šˆˆ…ûOš…›†š†œ…—†“†“††…Š„„wƒw2yI|^{`u`pbÉNÞ`òt–ˆ‘‡‡††‡ˆŠŒŠ‹Š`~jotb€„……†ˆŽˆŒ‰Œ<³IÁVÎ:F'Zû
+mn…v†~‡ˆŒ‰ŽøAùûHŒ’û ±ûÐ(·÷¡÷ðû9÷˜á€Ãm¥Z”z|}Šl~vq~„~~ˆ}v{‘—‚”†§ºŠ³§vš~–…‘ŽŒŽ‘ø8ønˆŠˆ‹‰Š%ûOµ“´”²•’Ÿ—ŽŠ‰‡ˆ‰ˆ‡‰kyrr~t}~„€„€……‡…ˆ…‰Šûw‹ûŠˆ†„‚†}‡ft‹•ˆŽ‰Šçó÷„vl|xx€z‰ˆ‰ŠˆŒŠŠ‹Š„—~¯xȉ‘‰‰Œ”Œ‘‘Œ’˜Œ¹‘ܘ÷e[uFuVuhfW„ŠˆŽ‘”®Œ™™Ž™ŒŽŒ‘”ÚŒä‰íŒ‘¶Š¯„¦}•ˆ‡„„††‡„u†v‰xˆŠˆ‰†…u·‡÷ŒŽŒ’ʇ±„™†‡‡€€‚vƒûU´¥›Ÿ‘’Š˜œz—•~“}±Û¢Þ”á“ŒŽŠŠŒŠ’‰—‰”Š”Š•ˆ¿~©€“‚ˆƒ„…|„~xˆ„ˆ‡‰‰U-÷£¦›—™“‰‰‰‘ˆ‰‰¨|£~~˜ƒ‘„…‚‚x‚û€û)~$}T~e}l{s^d^uXŒ„Ž‰‘Ž‰“‡™„¦o¤Z ƒŽ‡ŽŒŽŽ‘ჽ™šŒŒŒ¹Ø¥÷=‘÷˜bœ‚“ƒƒŠ…††€‡hûk(nNmPWUAZdtMq6oˆ†‡Š‡ˆŒˆŒ‰ŠŒŠŒŒ‘‘œ•¦™ÛµÐÍÄåÆ÷¬÷‘÷n‘„Ž‡ˆ„‚‚zˆ„Š„Š„iû^/RLsrZeAX„†…ˆ…‰ˆŽˆ‰™™’’’‘ììÈ÷!¢÷Kn^e\\Zd`qwƒ‡‰ŽŽ‘¬¼¦ºž¸÷Tùo‘£ŽŒ¨¾z¬{š|‘†Ž‡†~|„nŠû6ûWôw›¦™¥˜¥“ ‘™‘ŒŽ‹ŒŒŒ‘ŽŒŠ‹ŽŠ‘ˆ”†—…’‡–„š¶p zƒ„…†~‰t û >8Z^ÄŽ÷K˜”‰ˆ‡ŠŠ|„n}û)Py†]yAlˆŒŠn㊊ŒŒ‚¢Ž–šŒ±”ÁÊÑ÷‰aBv†x€ˆ†‡”‡ž†¦‚§Ž›™š™—™ž´Ç¨ÌœÑ”“Ž“û ýk¶”Ùž÷¦ª’ŒŒ”žÁª””’Ž‰‡Š†ˆˆ…ˆ]t.Mû!'Wh…“y¶mÚ‰‘ŒŒŒŒŒŒ÷Oû˜’˜—ä°çÉëãvÞ~φÀM€X€d€’‚“‚“¶‘ƕיŠ–Š—Š™Š–ˆ±‡Î\„iƒvƒm¡÷Ÿˆ®‡×‡÷‰™Š˜Š˜ŽŒ“Š§‰°† ˆ˜‰‘ˆ‰‡…‰ƒ†…‚„}ƒûW÷.¨Ÿ¹ŽŽŒŽŒœ•““’Šš‚§|¦|šŠ……‡‰û¨V•û.÷/¨˜¤’™¦œ•˜–¨|nº˜€’…ˆ…ˆˆ…ŠûÅS’X’_“fšš¥°®Æ”Ž‰‡‘¥}p¾¦|˜„Š~z„iŠb`canny|¸C¶g³Œ—Œ˜–™¡˜¢–¢•£“ž“”œ“ŽŽŽ‡ƒ‚W†l†k–a¦Vv|xƒ{w‡t-6Â÷><R%^ûll„|ˆŠ‚Š†Ž‘Ž•øù½ɶ|n¢”~||gvybxŒ~…–qÞv –ŒŽ•÷øƒ8JŠ‰\†•‡”‡”‡¾Ï‰â¢ž—–’ŒŠž‚¯|š„›~˜ƒ‘„…Š€„s†zxqpji—‡‘†Œ…„„„}…ˆ¶{ r˜|’yvv†|€~{„xuŒ}“„šˆ‰š‰¢†¨„ ™~•Šûmû#EŠ†ƒ‚†l€o‰r‘‚Ž†‘ð÷÷>X^bklxmwˆ†ˆŠˆ†Œˆ•—žž’’‘“’“×éÆé¶êU÷+Š¶©xš‚’‡ŽŒ“ÍŒ»t¨\’~Ž}}Šx„{}}€€|…xpz•ž„‡—‰˜Œ™÷-ü–‡ÀÚ‰ö÷MKQŠ‰V…•†”†”‡ÂˉÓ÷0NTŠ‰Z„•…”„”‡Åå‰÷ §÷™ßÆŽŒŠž‡­‚É|ª~~Š……t…bJbMdRÖ¼­ £”–€v¤¬nœz…†Š‰ˆ†û‡ŽˆˆŒ‡Š††‡€‡ûÆ·¨Ÿ¡˜•†™š‚›}šz—‘ƒ‡‡Šˆ‰…û`ûMìŠÀ¯¢¦–Š—„ž}´j t…Šˆˆ…û“ŒûŒ>Žbx†~„o}l‰j–„‡’•÷&ŒCŠ`‰àù ‘Š–‰š‡²€ª|¢w¬o›ooZŠts`rŒy•œ„•ˆœŠ¢‡Ã{´p¤‰ŒŠŽŒ÷&÷ª‘Ž™Š©†º¡†–ƒŠ…ƒƒ{ˆ6„FVzV`UDT‚†‚†ƒ†‡†…‰…†Š‰Œ’”–œ™¡ ¬™º–¸‘ë÷'3÷&ˆ¿÷ Š÷PÒû!7Š‰rr§‡¬æ‰÷+¢‰£Š£Š¢’®‰Ì„‰Š–ˆ‘‡„Š†ƒ‚}_÷'¦œ˜™•Š¤¸x •ƒ††€‚vY‹Š¼²¡¤Š’‡—‚‘†‘†’…¿V„Š‡‡ƒû0pŒqr‰€€ƒx…†zyˆxŒ…””û5ü9ˆ~…‚€‡g~n‰v”ƒ‡’–ä÷#÷Zû#6Š‰pr§‡±è‰÷)ÐûTûŠ‰løNI÷5Ðû5 ÷5Š¢‹£¢û4û]û” ˆ¶‡¡‚}…ƒ„|‚|F{Xzkxklkbl„ˆ…†……ˆˆˆ‰‰†ŒˆŒŽŽŽŽ³ÌŸë÷˜Š–‹–Š÷yi…”ˆ‘ŽŒŠ’‰•‡ÎpµdœV•jŠp~uvy€tgy¥ÀȺtª÷««ŒûQ‹)ŒƒŠgŠvˆ……„ƒ‡ˆjƒu‹~“„ˆ÷=Š÷…󞫉¸‚¤‰—…‡‚‚z}ü³ø3¥‡Û—“³†Îz—†‘†…Š…w}]÷D ‰¦Š§Š¦ŒŽŒŽÅŠ²‚ž|‰ˆ‡…‚x~`÷¿¸£¥ŽŠ”†™€¶i x‡‘†Ž‡‡„Š‡ˆƒû«}ŒyvŠ~ƒ‚{†cq‹•ˆŽŠŽŽµŒ¢ûDŒ|xŠ~‚‚{…†xz‰}~ŒŽ…’ˆ‰ŒŽªŒž‘û?Š‰pq§‡µß‰÷÷ø…êŠÂŠ¼ˆ´lŠbŠXˆs§‡¹÷‰÷[»°¡£“‘Š–„›}§r›|„…‡‰„Š†ˆ;†ƒ‡…‡†ûš•˜”˜“—š˜”“’Š–ƒœ}ŒŠ§t™|ƒ„†ˆûŒ!‹KŒvŠv‰}†…€€t…j}‚Ž‘‡‰ŽŠŽ÷|N‡0xHi`€€€ZKXrf„ˆŠ•ŽŽ’—“×Á±æ÷MZŠ‰hr§÷¦…ŸŸ‹ŠŸ÷$`†€…ƒ……ø2…ŒûŒ;kˆ‚„x…f„u‹ƒ“ˆŽŠ‘ä‹ï‰÷ŽŒ‘¹¬…ž”‡†…†„ƒ}€÷DÍü9Šv~zr~jp„x„†‰Šˆ“‡™€¥qž`—†ˆŽŽŽ´ˆª‹ “‘“Š÷yŠ÷"ˆÄŒ‘ņ¯…™ƒ˜‡’…ƒŠ†‚x~ýÚýŒ‡Æ÷‰÷g÷-û+*ŠŠ`r§‡Èõ‰÷)‡÷ŽŒŽŽ˜Š‰ ¢‡›‰•Šˆ’Š¡„–„ƒ†‚x;÷)¾²¢¤‘‘”†€—¹`¢t‡„Š†ˆ€û¼û-÷`Ķ¤§“Ž”†™x –Œ«n›z‡…Š†ˆü§û³Š‰b÷&øPÖ|™ª˜«—ª”“Ž“Ž™‡ €¨|¡šƒ”…††Š‚†y‰P.P5N=”Œ“Œ“”Œ“Œ“Œ÷&ŽŠ‰‰‡†‡€†vƒl}bw„†‡†FoUscwˆˆ‘—ˆ„¦„¥…¥š„Ž’—Œœ“šš£¦¬Á´Ü€ˆ‰ˆz†e}PsŒŠŠ‹Šˆ}À„¨ŽŒŽ‘–Ž–‘–•—–Ÿª¦ÀŽ“ Ë³÷ ŽŒŒŽŒŽŠŽ‰¨€¬y®r–………Š€€†uŠX9Y?ZDøž÷>SŠ‰j„•ƒ”ƒ”‡¶Ê‰ÞŠÜ‹¹Š˜“­‰Æƒªˆ›ƒŠ„„xƒ†1ôº²¢¢‘“‡ƒ•¶c¡t…†Šˆ‰…ûƒû÷>¦š—™–Š“‡˜ƒÈdªp|Š„‡†‚‰O^zjmxu‰†‰Ž‘²÷
+ûû#Š‰jƒ•ƒ”ƒ”‡¶Ä‰ÑüüÓr~|‚‡‡ˆ†‰‰Š‰‰ŠŠŠ‰ŠŠrÖ±•¢®ðšÓ›¸š’¨›’Ž‰‡Š‡ˆ‡…‡‡Šˆ‰‰‰&T@\Xd÷]÷t÷Ž¥Ö•ê„÷ŒŽ‘®¯†€®ž†•„ƒŠ„‚wˆJ?x3󔎑®¦œ’”ž}p¦’‚‘„‘…’…†‡„Š†ˆ€û‚„z…{…}ŽŽ‹Šå}Êv¯p«r›om`ŠwvduŒx˜|¤aÔ[½V§G.ûRû2up‰|Œ‡“•ž÷ »çÕ¸îû1,Š‰js¦ç÷1ÎŒ¸ xœ|”xvdxwex’™„ˆ‘†™„ ƒ¤|žv™’†‘ŽŒŽ‘Â÷Ù½€v –€‘{xdxwfz’™„‡ˆ‘‰“|³y¤w•}’„‘Ž‘÷Rø õ¡×™Î‘Æû*3Š‰rs§›‰›‰›ˆ÷)t˜€¢Š¨Š‰“~§}œ}’ŠŠŽŒ¶{k¨–€’€‘v‰xzƒ€}€xͶ¬ž¡‘‘ˆˆ‡µh v„„‡ˆ‚ûÍt°|”‚Ž‡ˆ‰Š‚ƒs…2û¬²§Ÿ“Š‡“…°fxŠ„Š‡‡ƒû¼FŠû#rûZ:Tjuoˆ‰’‘š—¢½÷÷:c÷TŒŒŒŒŒŠ‹Šø&ûÿš|’ƒŒˆŠ‚{…k‰û
+÷CûuTŠyƒ~|ƒƒ}u‡n|‚‡†ˆ‘“÷B‹÷‡æŽŒŽ‘Ž´yhÛû÷u÷|ûuøÑûvû|÷v÷®ù4ŠûA‡û/„ûƒ<rDbNqmEEch†‰““—™š¤© ªšªŽŒŒ˜—Ážëš÷@‡÷Tu÷iŒŒ‹ŒŒŽŒµ{Ûj‰÷6Š÷Ô¬œ™›˜ ­zjº–ƒ„„Š„€€x|ümŠû†‰…‚„}„zoiƒdvŒ“™‰›…™˜–l›V „ŽˆŒ•‘—…ݺ‹˜—’’—šùûÙû£÷ E`Š‰{ƒ”„“„”ˆ¿½Š¼Š Š±‰ÂŒŽ‘DZ‡ƒš’ˆ‡„Š†‚‚|Gº¶¨ž “Ž”…›¬rœ{…ŽˆˆŒ‰„Š…ˆû<û Ê´¦Ÿ•Š’ˆ•„¶n¡x„Š…‡û•û%Š‰ly§‡°Á‰Ñ÷ƒû)Œ2‹\Œ„Šn‰{†‡€xr†lxŒ‚–±û1YŠ€†‚€…g€r‰}’„Žˆ÷Šõ…àŽŒŒŒŒŒ›ƒä^÷!§œ™™–Ž²~ª| |’††…Š‡‚z}ûû÷3û1û3ø?*÷¿û=Š+Šv‰q¨‡¸ó‰÷8Š÷¢ûWûŠ‰j‚•ƒ”‚”Î…øí˶§«—’–„}›ŽŠ†“ƒ®mžyŽ…‘†Ž‡‡‚Š…‡û舂„„…ŒûŒ÷’’”‘“‘“¬¢››•‘Š–…š~†¤r¸\ƒŠ†‡€ûÇû¿÷lȳ¥©—‘Œ–„›}ÏI…‡‰„Œ…‡ü¹û¹Š‰hq§¤‰¤‰¤ˆ÷ùÁz—ƒ’ŽŠ“ÈŠ¾²t²sŸjbQŠonT]t¡´ŠÊ|¶p ø€øØ÷Á¦™—™•Šª|Èmªx›{}~~…rRŠUuX^ƒŠ‡‰Œ‹ŽŒ»÷ýT†c|tmvr|o{Œ}‘—lª‘­´®´µ µ´‘ŒŽ†‘’”x•q÷¸v’|•„›Œ Š³Š¢ˆ‘_¶ŽŽ‘¶«ˆ„¡©‚¡z™q’~Ž~Šn~ut}ƒˆ€ˆ}‰Zü ‰½‡ÚŽŒ“ Š­‚º|—œ—¨˜³ûOû Š‰V†•…”…”®ˆ÷‰÷g‰®Ÿ›—Œ¯xÐd¡€–Š‡†‡‡WŠQuJ`’ˆˆ‡Š‚‚‚yƒ6÷XŒŒ‹ŒŒų¥¨—’Š˜ƒž|’„‘†‘‡ŒŒŠ‰Œ¯py…Š‡ˆ‚ü ûˆŠr…w}rpc~VŒ„‰‰ŠŠŠ®u¤b™j”„ŽˆŽŽ“׆´Š‘’‘Ž“Œ—ŒÐ÷ûYûŠ‰Z{§Ü„÷Ûø„û9Š‰j‚•ƒ”‚”ˆ¸ç‰÷’¼“ԓ딌Ž‘Œ°»wÈœ…“……„|€n|hû+÷Ç´£¦“Š˜‚Ÿ{¶j v€„‡ˆƒüoŒt:p<m<ˆÀöŠ÷7¾²¡¤’Ž™‚y£“„Žˆ‰ªo›z…„ˆˆ„ûS‚ƒƒƒƒ‚ûÒ÷%¢¨˜œ‘”•‘‘”ŽŽ”…™»h£s}†Šˆˆ…üHû€Š‰h‚•ƒ”‚”ˆ¸ô‰÷:÷ëNŠbŠw‰‚’’‘c>oX|r_LNM=Nt{‚Š‰‡†ˆ‰‰ˆ‰‰Ž‹ŒŒŒ¨°Ÿ‘ö÷Õ÷J³÷w
+î ž É©‘ ú|ù¦
+endstream
+endobj
+286 0 obj
+<</Length 587>>
+stream
+€
+endstream
+endobj
+288 0 obj
+<</Subtype/CIDFontType0C/Length 6894>>
+stream
+
+A
+Þ < Ä  § M Ä:yÊD•æ­«üVÈfûuâB×[á‡î7÷A†ÌOÌ÷,ÌçÌ»Õ÷uÕ\ø›¬«p‹{|v‹’x÷gÙOÙû ]&‹@n¡y£›ª‘»Ž§‹”Ú¹jNû;‰û\)€?ÐMì—׋²Á@i£Á‹¬§£‹¬û@÷
+v÷÷÷[÷(÷ï¥Åf¶\drmjf¦p°’’ŒŒ†uyeXz‚ˆy…u|šyž«òÀ÷†ÌOÌ÷ÆÌ÷Ì­Õ÷ŒÕ|ø˜«¬p‹|_øŒ¬ƒ”i?}o‹kj¦‹š·û,žuc¢Vû++û„ûå*÷
+v÷÷÷E÷÷[÷÷Úø°l¦kfplkfªp«°¦ª«ûçÈp±agpohs™e½‰‚isom|„ˆ|„x|šyž¡ìÁ÷•vøÁÌ·Õ¼ÕøtøÖ¬p‹|ûØ›„z‹‚f‹tx^x‹t°°‹ ¦÷PI[@h:Wûƒû
+]~‹g°¯Œ­›÷u÷÷Fó𞎚€Ì÷¨ÍÓ÷.J̽ß÷€ßUÕTøn÷U÷2åûTXxgb÷šäÞ唤‹{›…„ˆ€‚¬tœt¨¦Ÿž©¹kÆ%ûûûû[û€÷@óÊ÷ïÞ÷ A9KRC+iöÈÄľØÛ¿JCMvùwÅø,øfù$¢xšys‚x†ûÙýBƒ{‹Š„tž|£”–÷ÙùB“›‹Œ’†Ì÷ÆÌ÷w÷+Õ‹Õ×ÕìøU÷®q‹€{w‰kŠ[‰cuiA‹Á£÷x÷3™§‹«¬p‹|û3Üž‹¢fÔf‹tw;8{p‹jk¦‹šßû|#ÓhÒáÐÇÕ€Ì÷‡Ì÷WÌ·èKè‹è÷
+Õ^Õjøt÷CÝMÃ\ Ô¿’ͦØ?ÍûûIZGm¡y¤¤ Ÿ¥”ˆ–†’¦¬Ì‹‘Ѹfbo~bdrqzyŠ\ˆd‰w‰mj¦‹šÕµò·EXLRP5q?»hŽ‘”‹•‹ŒŽ¤w qst|i3éR÷÷âæê‹Ìø€Ì¿è]Õ÷uÕØølµ¨ž‹¢ff‹vpûuÀ¹÷䤢°¯ÓÎî÷ (Ùû û ;;6c«š蟥œ© ƒ’†·œ·¥¾ÛÕ]5EUOcjûû\ƒ„„„|j¦‹›÷㬔“­†ÌOÌ÷ÁÌéÕÑÕ·Õlø˜«¬p‹|_÷جƒ”i?}o‹kj¦‹š·ûf¼7>i>‹¨ª÷¡¬ƒ”i?}o‹kj¦‹š·û-ÎqØ®³©¶@mŸ‹×™§‹«›vøÌ£øpøˆø"¬p‹{û
+}n‹kj§‹š¥$ûÌ$÷Ì¥™¨‹«¬o‹|û
+|o‹kj¦‹›¨÷ûâf—¢‹ ž¤‹¯—÷÷㨚§‹«›vøÌ›ø€øø#«p‹|û }n‹kj§‹š½]ûµŠ‡¦{éÀ|‡›fg‡|Q{€f~\‡rŠY÷µ½™¨‹«¬o‹|û |p‹kj£‹§Åûáe’¡‹Ÿ¶Ž•Çœ¢ÜŒŸŒ™ŒŽoœM‘uOœŽ~´¡‹±’Å÷᧣‹¬‹ÌøuÌøƒ«¬p‹{uû÷™÷
+÷$÷%ÏëÓÓÏ*û$
+To ‹ Ì
+Õ ±›•ŒŒŒœ“ °¢Ž›Œ”Á÷Ì ø¡ö
+endstream
+endobj
+290 0 obj
+<</Length 16>>
+stream
+€
+endstream
+endobj
+292 0 obj
+<</Subtype/CIDFontType0C/Length 58556>>
+stream
+
+
+SmñóTZ†“£9eq‚¤ V ~  Ÿ è ô
+
+6
+’
+ë ! & 2 ? Ë h  ! P ^ a j m €eÓá;T[rt³ÃÊÓ"1:B‹¨µf†œ£¥Ï "!Ä
+ƒ•†‰,ŠúŒë!“Å•L˜(›UœÛŸp¢t¤ú©5­B°y²pµŸ¹» »j½
+¿8ÁhÄZÈgÍ>ÏkÒ‚Ô3Ö<ÚÝâ$êù§÷§÷•‰Œ÷ªýØý¾ùýggýÙŒ­gŒù¾ŒŒ®®‹ùØŒŠi®ŠŠûªû”û¨÷ ýË­ŽÙ‹³³ç‹¯ $ªi-‹˜®÷Šáë•k6£÷s7j+5÷‘¬’¹÷ ÷*¥Sû›£o÷uü¸l£×€gü g‰€?s÷Ž÷)©Š¥ŸwŸv•rolrwwvuqokŒs•wŸw ¥¨©•¤Ÿž ¡¥•§‰k‹[ssZv“y™}|™›„Ÿ¿Œ£¤¼ ƒœ}™™{y’w÷Xø󆆆±üL‚~——š“±øN‹«qžqoqwlüøp¡q©©£¥¦¥u¦kmuqp÷TÀm¡t©›™’–—}û=_x„“‰Óß÷¶ÈWmusnøWùEx~}„~…~„ƒ†~‡‚|Žvw‘…†’}©$™'Š*Š*~(t%†zŠ{Ž|Ž|“{˜z”„ˆŒŠŒ”¦÷–÷…ð…ð…õ…÷‰’Š‘Š’‘”Š—Ž––––’˜’Ž•‘ŒŽ‹„~‰†n…oƒs…q‹p“m‘€Š†„Œƒƒ‹ŠƒŒ…†‹ˆ‡Œˆ“„“…’…’…’…‘„ƒ–{’„ŒŒ‘””›Œ˜‹–Š—Š•ˆ—‡–y¦‡¨•ª•«ž§§£ŽŽŠ…‘˜~”{“|‘~‰‚€ø89‹HxM|Q~P~N}K|‡‰Š‰‰‰Ž‰‰¥ƒ¦Š¨§‘¦‘¦‘œ”ŒŒŒ‚”x©0™5Š:Š:„52Š†Š‡ˆ‰ŠˆŠ„>š„Ž…Ž†‡Œ†–€œzšz˜z™y–y•z~†ŽŽ’‘•“ºÙžØƒÙ„ׄ؄Öô“ÈZ¨„Ž‰ŽŒŒŒŽŠ¬”©‘¨Ž§Ž©ŽªŽ–ŒŠŠ‰‘‡”ƒ—‚“€Ž‹‡ýDû‹j€nƒpˆp‡n‹l `–acd•bžb…ŽŒˆŠŽ’Ž’““‘Ž¡’ ’Ÿ‘ ‘ ’¡““ŽŽŒŽŒ‡Žƒ„Ž†‰ŒˆŒ’ŽŸ‘›’œ–œœž’’Œˆƒ“~˜}•{‘}}Š~ƒ•jûŒ{‚yƒy„{…}‡‚Š†ŠŠŠ‰‹’ŒŠ¡‰ ‰Ÿ‰ž‡Ÿ… ‰—‰’‰ŽŠŽ‘Œ™ŒïŸŽ‹‰‰‹ŠŠŠøN‹p~r€uƒvtˆrƒÄû$Œ‚Œ‡‹ŒŠ“ž›–œ’œ’ž’ŽŽŠ‹“‰‡–‹˜Ž˜Ž˜‘˜“–¦¬}¢|˜}{zˆxu`°‡/†‡€ˆˆ‰€‰“„—‡›ˆœˆ™‰–”•–’™—–Ž”ø ùr‹˜|“~ŽŽ}Œ{ŽvŽvŒwŒvŒvŠv}ˆ†ˆ‚ˆûUl„†‡‡‰Œ‡ˆ“‡–„•†–ˆ–‡–Œ—÷¤’Œ‘ŒŽŠ††€a6Y:P=P=AA2DײÓÀÎÏÏÍÂÓ´ØŽ’‡‡‹‡Œ‡ûŠ‚‹†ŠˆŠ‰†ŠŠ#}ƒ†ˆˆŒ‡Œ‰‡“‡œ„š‰™Œ™šŒœ˜“ŒŽŠŠŒƒŠ|Šl‡o†o†qŽn—m’’†‘‘–’’¬©ˆ§ˆ¦‹¨ŒªŠ–‹‘Ž‘‹—ŠŸŒŸŒŒžŒ Ž “‘Ž‰‰‡„v”wŽw‰wŠx‰x‰ƒŒ‡‹ŠŒŠŒ‹Œ’÷­“ŒŽˆŽˆ‡Œ†¶P¶S¶T¶U¿VÉV°ˆ­‹¬Ž¬Ž­¯’‘ŒŒ†ŒŒ†ˆŒ‰,§2·8Ç7ÇBÛLð‡“‰ŒŒŒ“Œ´±¯¯±‘³“’ŽŠ‘‡„Ž{•~’‚ŽŒ}ˆûoƒˆ…Š‡Š‡ŠŠŒ–¥Œ£¢¢¢£‘²|˜z”zz‘{‹}‡†ŒˆŠˆ‰ˆŒˆŒˆø·ù[“fiik‰h„fmo…p‰qˆpˆoˆ„‡‰†‰†Ž‡“‡•ƒ”…“ˆ’ˆ”‹–馒ŽŒŒŒŒ‹‡‚ŠzItKmNmNYOFP‡†‰‰ŒŽŒŒŽÜ´ÇÀ±Í±Î¥ÏšÐ–’‘’™ŒÝœ”‘ŒŽŽ†Ž~XŠ\…^‡^€\{Z‡ˆƒ‡„‰„ƒ‰Œ€‚Ž€Ž€ˆŒ„—}–|”€’„¨\ˆ”Ž˜•˜“”•‘”–ž“›››œ¸µŽµŽ³›µ§´š–Œ”}“““‚’~“‚‘„ƒ‚‰ƒû
+t‹’ŽŠŠ‡ˆ‹†Œ„A‚„‡{‰{ˆ}ˆ€ˆ„Š„‰„‰ƒ‰Œ’–™Ž˜—–˜˜Š•‹‘ŽŒ‹–Š¾“ûF=‹sbscucsckfahŽ||}~”|˜{’‚†‰ŽŠ–¨Ç¢Ã›¿š¿šÁ™Ã‘‹Œ‡‡‰‡ˆˆŠˆø ùg‹j'`,V0V0;2"4™Þ·ÒÅÇÑÇÓ¿Ô¸Ö’”Ž‘Ž‘†”€ºV¹X¸]¸[ºZ½W®†­Š¬Ž¬Ž­¯”J L¦N®N®K¼FËEÍxšƒ–Œ’Œ’“—˜›•‘ŽŽ‹‘†•œ|™x—x–}ˆ„z›ûÍ‹–TVYYŒVŒTf‰^‡X…X›g®w’‘Ž””’’‡ß‰ÙŒÔŒÔŽ×’Ú ƒœy˜x˜z‘{Š†‰ˆ‰‡‰Š‡Š‡÷uù>ƒˆ^_wbybic[d}„‰~“v•v–†™•¢“ ‘žŸ ¢Ž’ŒŒŽŽ‰‡†‚vovrtuturxoz„††ˆ†‰†‰‹†Ž„‚‚‚“€ŽŠ’–”–”“’Œ¨ž§™¦”¦”§•¨–ŽŒŠŠˆ‹ŠˆûxŠ†ˆ‹ˆ‡Ž‘‘®±ª°©®§¯¯°´°–•–••}”„Ž†Œ‡Œ‡ˆ‡‚‰„|‚zz€y€{€|v„w†yˆx‡x‰w‰Œ„†‹‰ˆ’’¤«¢©Ÿ¦Ÿ¦Ÿ¨ ©›¡šš{–x”Œ„‡‹ˆˆŠŠ‡Š‚÷Þ…‹‚4v8h>g>K7,1ÚºÇÁ³Ç³Ç­Ç§Æ™‘ŒŠŠ’…—³^«^¢`£`¯c¼g†¤¤Š¤£¤Ž¥‘ŒŽ‰Œ„L PªS¶S¶U¿WÉzœƒ˜””Ž—‘›•¡—™‡˜x˜x˜{‘€Œ†Œ‡‹ˆ‡‡‰‹†Ž†×ü
+{ûû€û€û ‚‰…ˆ‰‡Š†„–‚”†“‡ˆ‘ˆ“Š–ŒÙ™Õ–ГГԑÖŒ’ŒŽŽ†‚Žš*’177‚2x,ˆƒŠ…‰‡†…‰‚ŒzŒ|~Ž}Ž}Ž|„Ž†ŽˆŒˆŒŽ‡’œy›yšyšxšx›x•z”…“”‘–“˜˜¢¬™«©«ªª†×ˆÓŠÍŠÎÑ–ÔŽž‰–……’}˜ƒŠŽŠŠŒŽŒ¸ŽµŒ²‰²‰µ‡·†›Œ•‘•”†–~˜z™z”{{Ž{‹{‡ü$ûc‹r}qƒnˆnˆnm•ƒƒŠ‰ƒ„‰„†„ƒ‡‰‡”…“†……™h“ikl“i˜h…ŒˆŒŒŒŽ‘Ž™²Š‰ŽŒŽ¨Œ¦Ž¤¤¦¨‘’ŽŽŽˆ†‘…‘‡ˆ‰Œ‹Ž‘šš‘˜‘˜•™™™’”‘ŽŒ‰†“š|–x•x“y‰x}d^‹•–‹Œ•—‘…~xŠz‰|‰{ˆz‡xw‚w†yˆwˆyŠxŠ†‰ŠŽ‰…㈖‰“ŽŒ’˜Œ÷ìù8‹ˆr„rrr|ryqz›u›wšw™yšw”x†Œ‡Š‰ŠŠŠŒˆˆ |Ÿ{zžz›wšuŒ††‚}€€„„"5w~›¨—§˜¥š¥š§œ¨ •–‘‰Œ‡…nˆm€nn|mwnneliililhnhp„„ˆ‰‹‘ŽÄ ¿«¸·¸·µ½°ÂŽŒŽ‰Œ…Ž\‹^‡`ˆ`^{[„}‡‚Š†Š†‚Š|ŒS“ƒŒ…‹‰Œˆ†”€ÍC–}‘ƒŒŠŒŠ’‘˜™Àê¤è†æ‡æ{çn爒’””””“’‘‘¿Î«°™˜}–~–~‘Œ‡Œˆ‹Š‡‰‰Š‡Œ‡øCû‹VƒY„]…^†[…Z…‡…‡‰†Š††–…œƒœˆ›ŒšœŒŠ”’‘Œ‘Œ†ŠqŒrŒtŒt‹rŒp‚‹…Š‰‰†Š€ŒŠxy‹|{Š{‰{‡ˆ†ˆŒ†Œ‡‘„–‚ˆŽˆŽŠŽŠ‹’Ì“”Œ’ŒŒŒ…Š}û0‹…Š‰ˆ†Š€eˆh‰j‰j‰i†g„‚Š†‰Œ†Œ††“…“†’‡‘‡’‰“Š”Žâ”ޑٌٌމâ…š“Œ“Œ”†•€˜„’ƒ‘„Ž„Ž„„ŠeŒgŠj‰jŠhˆf‡€Š…‹‰Œ‰‹–Œ÷.ŸŠŽ‘Œ˜Œ÷—“ŒŽŽ‡ƒ„…††…Š†ˆ"†‰Ž‹ŒŽ™÷”‹“’‰’†’‚’“‚ˆŽŽŒŒ’¦Œ¥Ž¤¤Ž¥¦Ž˜Ž’‘”Š”…’~………„…ŒŠ…÷|ùa‹›`•cggecŒ~‰ƒ‡‰‡‰ƒ‰~‰p†q†tˆs‡r†r†ƒˆˆˆŒ‡Œˆ‡’ˆ¢€¦‰§¨§‘¤ŒŒŒŒŒ‹ˆˆƒsNoRkUkV_QRN†‡‹‹Žºª´°®´®´¨µ¡´Ž’Œˆ‡‹‡ŒˆˆO†S…W…WƒTP‰~‹~Ž~Ž~~’~”~“„’Œ’Œ‘’š’ю͌ɌɊ̊Ί’‹ŽŒ‰”‚®l›x˜ˆ”™•˜Š™™|–}“}Ž~Œˆ—Š™Ž›šŒš™Š”‹ŒŒ‘Œ“Œ—Ž–•Œ•Œ–Ž˜•ŠŠ‘†Ž~€Ž‚ŠŠ‰‡‚Š…ŠˆŠ‰Š‹Œ–ªŒ¨§Ž¥¨’¨’¥†žy–x—x’wŒ‚Œ‡ŠŠ‰Š‰‹‡Œ†øªF‹TW€\‚\‚Y„W‡ˆˆˆˆŠ‡‰‡‹ˆŽˆ•k‘kŒmŒklkŽDŠG†L†L{HpF„€Š~}”˜¥“ިڜ֑Ցىހ–Œ‘ˆ‘ƒ”yš{–}‘}“|Œz‡L†P…T„T„QƒN}‰ŠŠŽ”•í’çŽáŽáŒåˆê•‹‘ŠŠ‘—ŒÄÀ¼‘½‘À•Ã˜–ŽŠ‘Š‘†}}~Œ~‰~†û:ûl~‰†y{‡‹„ž‚–†–‰”Š”–ŒŒ—”Œ…ŠIƒ‹…Š††Š†‰€ˆ}~Š‰†~€‰†ˆ‡Œ‡‘‡”ˆ•„—‰—™——Œ”ŽŒŠŽŒ†I‹„Š‰Š‡…‰‰ûw„‡ˆˆŠŠ‰Ž‡‘†‘‡’‡“†“†“‹“À—¼“ºº¼¿Š’ŽŒ‘‡ƒ’”€‘Ž€ŽŠ€ˆ5Š„…‹‡‡ŠŠŒ“Ï”‹’ŠŠ‘Œ–‰›Œš™™ŒšŽ›˜Ž‰‘ˆ…€~}Œ|ˆ}ˆ~ˆ~ˆƒ‰…ŠˆŠˆŠŠ”ã’’–œŒ›Œ™˜Ž’””Œ•Œ””’Œ•‡’‚ŽŽƒ„„‚Ž„‹…Š…„ˆˆƒø&ù„‹•o’qqsŒpˆn‰û.oƒˆˆˆŽ‡Žˆˆ’ˆ¢‚£ˆ¥¥¤£‘Œ‡‹‚‹‹‡ûM‹ %ˆ‚Š„…†Œ…ˆ€V‚Z…]†\‡[…Y„‚ˆ‡ˆˆˆ‡”ˆ˜„•†•‰“ˆ–‹˜Ž÷M®”ŒŽ‰…„€jRbUZW[VV_Pgmy…‰‰‘Ž’Ž‘ЦͱȾȾ¿È´ÔŽ’Œ‡‡‹‡Œ‡ŠPˆU‡X†WƒU€Q‡~‹€Ž‘’}–z”…”Ž”‘•š‡øŠ’ŒŽŽ‰ŽŠŽ‡Ž†¾Yº[·]·]¾dÅjªŽ©Ž¨§Ž©’ª”Ž“Œ‡Œ€Ž5 8§=¯;®>È?â‘…‰ŽŽŽŠŒ’ŒÂ¾»¼Œ¾‰Â†—’‘†“”rœt“vˆw‰uˆs‡ûFpŠƒ…Š‰‡‹”Œ‘÷QŠ–‹’Œ‘—Œ¦Ž¥Ž¤Ž¥¦§’”Œ†‘’ƒ…Ž†Œ†Œ†‹„‰ût„Š‡‹ˆŠˆŠŒŽ“˜Ý“£‡y–{—x’xŒ†Œ‡‹‡ˆ‡‰‹‡Ž…÷aûw‹„pr{s|syrvp–¤›¢œ¡¡ž£›¤™›’„”„”““ƒ’‚‚‚„‡†‚û÷G‹’x’z”|”{˜|œ{‘ŽŽŽž„›|›|™z”zƒ†ˆŠˆŠ‹ˆŽ„ùŽù$‹œe•fggeŠdŠ<‹AEŽE…A}>v‚‚ƒ„ŒƒŽƒ…†ŒŽ‡†Œˆ’‚šw™w—x–x–w–v“|…Œ’“–™š§”¥££¤Œ¦‡ð‰é‰áâŽç”ì …œ{™}—z•y‘ƒŒ†Š‰‰ˆˆ‰†Šƒü”‡‹zBrFkKlKXHFD®Ÿ¬¢¨¦¨¥¨©¦­Ž‘ŒŒ‰‰‹ˆŒ†’FI†N†MJwF†~Š€ƒŽ’~•“…‘Š‘‘’™”ß‘ÙÔԋ׈ڈ‘ˆˆˆ‡…›¦™£™¢—£˜¢˜¤˜ Œž~›~›z”vŽ†Œ‡ŠŠ‡‰‡Š‡Œ‡÷­û ûY`ˆŠŠ‰ŽˆŽˆŽˆŽŠ‚›‡˜˜Œ›ŽŽ‘Ž‹Š‰Š‰Š†Š„^{avevclbb_ƒ……‡ˆˆ‡ˆŒ˜ŽÉ°”–ŽŠŽŠŽ…Ž€‘€’€‘‚“”–Ž‡Œ’’ŽŒŽŽœˆš˜˜}”zŽˆˆŒˆˆŽ’¶Ëׇ“Œ‹ŠŒ‰Š†ˆ‚~MnO`Q_PSTHV†ˆ‹Š‘ŒŽŒÚ¬Ê¾¸Î¸Î¶Ï³Î˜‡š~›~š}}„{‡|ˆ}‰}‰}‰|Š†ŒŒ“”™“˜‘•ŽŽ”’“‘“ˆ’ˆ‡ˆŽ‡Ž‡ˆŠ–›œ’ž•‘’‡ŽŽ‰†Œ„€‚Œ…„Šƒ‰‡÷U‹“\_ŠaŠb‰`‡^Œ~~~’–€‘‰Ž‘’Œ¼‹¹¶Š¶Ž·ºŒ—ˆ•ƒ“ƒ“’€‚Ž†‹Š‰øõù€ƒ~Œ}‰z‰z‡|„}ûVvƒ‰†‹ˆŽ‰‹Œ“·ˆœ„•~‘~Œ~‡„†‰†ˆˆ‡Ž†”…–~’~€~}ûRn†Š‰‰Šˆ‰ˆˆ•…”†’‡’‡•‹—Ž÷¡–Ž‘ŒŽŠŽŠŽ…Ž›^ƒˆŒŒŽ’Ž“Œ’‘Š’‹‘Œ’Š“Š’‰Ž–ª§¦Ž¦Ž§ŽªŒ•Ž‹‰‰‡Š†Š„mB‰†‹ŠŒŽŽŽœ™—š’™“›”™•š–“šžŒŒž›‹š÷…ŠŽŽ‹†‘ƒ•ƒ”‚“ƒ”‚€†û}‚Œ†‹‰ŠŠŽ”¬¾Š†€„†ŒrˆŽ†Œ„‰„ˆ‡…ŒAûz‰ƒˆv‡v‡u‡w„u‚vw‡9†Š‰‰Œ‰‰Ž‰Šš„˜‰–Œ–Œ˜ŒšŒ’ŒŽŒ‰Š‰‡…ˆw}x}x|yxzv|{„‡€“|“|–‡™’¤”£’¢¡£¤Ž’ŒŒŽŽŒŒ‡€E‡‰‰†Š†‡‹Šˆûuyƒ‰‡‰ˆˆ‡’†›„˜‡”Š•Š˜Œœ÷#¢Œ”‘‹ŽŒ…Šu‹vvwv’u~Ž„’˜’”¦£¡¡Œ£¤ŠŽ‘Š‹Š÷W’ŽŽŠŽˆŽ…Žiœi‘k†j†j‡j†„Œ‡‹‰‰ˆŠŠŽŒ“À¢’Œ˜Š÷•‘‘†€‘xw‹x‡x‡x‡xˆ„Š†‹ˆŠˆŒ“ŽŠ“‹’Ž’Ž’‘Ž‘‰”ƒ“~‘}€„„Š‡ŠˆŠ‡ŠŒ†Ž‚‚‚ŒŒ‚Œ€Œ‡‰‰‡ŠŠˆˆ‹ˆ+}„Š†‹ˆŠ‡“’Ñ÷´’²°Ž°³’´•’ŽŒŒˆ‚ŽŽƒŽ…„Ž„Š‚‡n„o†q†r†p‡pˆƒŒˆŒŽŒŽŽŽ¾Ì‘Œˆ„”€‘Ž€Ž€Œ‚ŠûÿQ‹›zš{˜}˜~›~ž~“”–Œ—˜ƒ˜|˜|•}’||}}Œ‚Œ†ŠŠŠŠˆŽ†¶ûY‹~u‚j„jƒ‚ƒ™‚š†—Š•Œ–Œ˜š”“ŽŒ‰‰Š‹†Œ„ˆ~ˆˆˆ€†~…~‡‡ŠˆŽ‰ŠˆŽ†–z’{}}{zŒƒ‹†‰Šˆ†‰‚ˆ#{†Œ‡Šˆ‡ˆ‰Œ†…–€”„Š‰•™Ù¦œˆœ‰›‰š‰œˆ†¾~¼}¹{¹|»z¾z÷ p²’¯•®–®–¯œ±¡ŽŒŠŠˆ‹ŠˆûûŒ"™!™û¡ûª„‡Š‡Š‘–Ž›‰šˆ™ˆ˜…™ƒ™z ‰¡–£–£œ£–‘ŽŽŒˆŽƒ€”‚’„ŽƒŽ‚‚ø±ùKš_•abc‹aˆ`r„u…v…v‡u†t†€‡†ˆˆŒˆ‡•…˜†•ˆ‘Œ’•Ž™˜Œˆ‰ƒ†€†€‡ˆ‚v\s_pbpbf_^^„†…††‡††Ž‹—°º³±·°·©º¢½ŠŒŽŒŠŒŠŒˆŒ†ŒJ‰MˆRˆQƒMJˆ}‹}~~’}–}–“‡Ž‘“Ž˜ŒÖ‹ÒŠÍŠÍ‰ÐŠÒ˜Œ‘ŒŠŒŠ‘…”€¢i jžkžk¥jªi¬€«„©ˆ©ˆ«­’’ŒŒŒŒˆŽ‚N Q¨T°T°V½YÊ€•„˜ŠšŠš—‘’£¨’¦‘¤Ž¤Ž¦¨”ŽŒ‘†‘ƒƒ‚ŒƒŒ„‹„‰ûp‰€…ŠˆˆŠ‹Œ–ª¨Ž¦Ž¥‘§“¨–¨…Ÿv–v–u’v‡Œˆ‹ˆ‰ˆˆŠˆ‹†‹‹‹ %ûÎU‹˜`’aŽbŽbbŒa}‡û$q€ˆ†ˆˆŒ‡‘†”†‡’‘‰ŽžôŸ”Œ‹ŒŠŒŠ‹…‰€p^m_j`kada]au|„†Š‰ŽŽŒ² °¤¬¦­¦¬­¬´”ŽŽŒ†‡\†_†b†a„_„\Š„~~’„•ˆ“Š‘””Ž“‘‘÷˜Š’‹ŽŒ‰“„´hœv˜†“˜”˜Œ˜„™}˜“€‘€€~ŽŒƒ…Œ‡‡ŠŠŒ”Ï•‹‘Š‘Ž–Ý¡’‰ˆ‡Ž…Œ|’~Œ€ˆ€ˆ~†~†ƒ‡ŒŒŒ‹Œ‘®Œª©§ª¬Ÿ†™|“|”|{„Œ†Š‡‰ˆŠŠ†Ž„ù ùU‹IvN}Q‚S‚NˆLŒªd g”j”j–h—gŒˆ‹ˆˆˆŽŠŒ˜™—”•ŽŽ”—™¶–³’±°³¶’ŽŽ‰Ž‰‡Ž…Ž„Ž…†Œ‡ŒŽ”“•›–š–——™˜˜š™••‘‘ŒŒŒˆ‘ƒ–zœxšs™u—x}„‰Z‹’ŒŽˆƒ…ŠƒŠ„‰‰Š~Šˆ†~ˆ‚‰ƒˆ…ˆ„„‡€ŠûLiŠ„†Š‡†ŒŠŒ’s÷
+Œ‹ŠŽ÷>©•’‘ŒŒ…€’rpŠp„p„p„r†Œ‚†ŠŠŠ‰ŒŒ”ŽžŽœ‘’œ—¥ˆx–x–y‘xŽˆˆ‹Šˆ‰Š‰‰Š‡û üP‹–~™{›z›yšŒ™ž‹ŠŠ‰‰|˜}“~‘~~}‰…Œ‰‰ˆøùm‘™[‘^ˆa‰`‹^Ž\€Œ€€’€·l»}ÀÀŽ»¶­ŽŽŒ‰ŠŽŠŽwóyTwfuytxa…M‘ny–ƒœƒœˆŸŽ¢ Š‘‘˜÷6Ïš’Š‘Šˆ•…˜ƒ˜ƒ”„ƒ‚†~kh{|||‚|‚}‚}„y‚ˆŠ‹Œ–Š¤Œ£Ž¡Ž¡’¢–¢›‹—„‘ƒ’“}’‚ŽŽŽ…†~ûˆ^‹ˆ^}_s`rafeZiv„ƒ€{{zz«š² ¯ž®š®›¯›²š”‘‘Œ’Š©Y€…Š’‘—–š¦‰¤y¡y¢užp›„Ž…Ž‡Ž…ŽŒ‡‘€›c‚…‰ŒŠ†ˆ€‡j‚l‚nƒmmƒl‚…Š†Š‡Š†ŠŽ”“÷1÷H–š•†‘‡‘‚“~•ƒ’ƒƒŽ„Ž„‹„‰¾ûõ{ƒn€tƒy†x†t‹o‰€“hiŠjŠj‰i‡g„v†x‡y†z„x€w‚|ˆ}~}|“|’ƒŽ‡Œ‰ŒŽŽ”’š§–¥“£‘£’¤‘¥Š’‹‘ŒŒŽŒ”‰šŠš‹šŽšŽšš•‰ŽŠ…‚Ž~Ž|Š{†{…|†~ˆ…Š‡‹‰ŒŠŒŒŽ’ŽËŠ“‹‘ŒŽŒŽ‹•‡œŠšŒšššŽœ“Ž‰Ž†Ž„Œz’|{ˆ}ˆ|‡|†„Š‡ŠˆŠ‰Š’ŒˆÑ“–‘œŽ—’ŒÅŒŠŒ‡Œˆ‹ˆˆ”SVYŒZˆW†Tˆ„‹†‡ˆ†‰€‚Œ„‹ƒ…ƒŽ„†Ž†’~’’‚†²T—Š—“–›—š’˜Ž–”ÌŠÇĂĎśƗ†–—•’ŽŽ‚Œ…ŒƒŒ„ˆ‚†÷a^…›NRƒV…U“R£O‘ƒ†‡ˆ‘‡”†¾x¾‚½½Œ½˜¾¤”‘’‘“‘“†•„¤†£ˆŸ‡¡‡¡‡¢‡©m‚\h|t}sj{X‚p†rˆsŒrs’™s~£ƒ¢‰£‰¡‹¢¡÷SÒŽŒŒ‹Ž†„–ƒ–˜˜€‘€Œ†Œ†Š‰‡‡†‰‡Š†t{xx|x|v€v†€ˆ…Š‰ŒŒŠŒ–Œ›šŒš™™’™Œœ‡˜‚—‚•~“z†‡‹Œ††ˆˆ„Šø»ù€ƒ—h’ihŒi‹iŠh…Qkm„o†p†n‡l†‰†‹ŠŽŠŽ‹Œ’¢Œ ŒžŒŸŽ  Ž¤†ž|˜|˜y–t’€Œ„Š††††‹ƒŽ€œ[”^``Š_‡\ˆ>{ClFmFRH8IŒ‹ŽŒŒ‹ŒŒÇ¤¾­´·´¶§¾™Æ”Œ‘ŒŽŽŒ•Š´‰²®‘®±“´”•Œ‹ŒŒŽyŒYŠ\Š^‰^…\ZŠ}Œ~ŽŽ‘~–}˜}–‡’“•Ž˜‘¶Œ²†±‡¯Š²Œ³ŠžŽ›Žš’œ• §‚™€˜|–}–~Ž†\|`bƒaa„^„ƒŒ†‹‰Š‰ŒŽ”¡Ž ŽžŽžŸŒŸ•‹’ŠŽ‘–ŒËȑŔŔȖ̚—”‘’’’…‘}xw‹w†w†x‡x‡ˆ…Šˆ‰Š‹Œ•ª¨Ž§¦“§—¨™²|œz˜x“x“zŽ{‰ø§ù‹”z•t—m–oˆyz„ûwƒ‡‡ˆ‡‰†’†‚œˆœ›žªŽKˆŠ‰ˆŠŠˆ‰Š‰)x‚‰‡ˆ‡‡‡“ˆ›‚šˆ™ššŽœŽ‘ŽŒŒŒŒ†‚Iˆˆ‰†Š†‰‡Š‰Šc‚f†gˆiˆf‡d„‡†‡Š†Š‡†•…”ˆ“ˆˆ‘‡“Œ–Žæ¢àšÜ”Ý”àŒå„œŽ•‘Œ•Œ•„–{˜|”Ž‚Š~‡h„j…k…m‡j„i„ƒŒ†‹ˆŠˆ‰ŠŒ”ËŠŒŒŽŠŠ›ŽšŽšŒšŒš›’ŽŒˆ„€ƒƒŽ…Ž‚‰‚†d„Š†‹†Š†ŠŠ’É÷ª’ŒŒˆ„€’‚……ƒŠ€†EuŠ„‹‰ŠŠ‰‹‘—‘¶¢†›~”}”{xŒ††Š‰‡‡ŠŠ‡Œ„ûêû‹œyzŸ| |Ÿ}Ÿ€ž–”—Œ™š„˜|˜w–x“yxy‹zˆ……‹‰„…‡„–£ûy‹rqqzqƒqƒr‡tŠ‚ˆ…‰‰ˆˆˆ…”€˜‚•†’‰’Š•‹š’›‘š’š’›“•Tûb{ala€Š|’y“y—~œ„‰ŽŒŽŽŽŽ «¡¨¡¥£¦¤¤§¢5l†‡‰ˆ‡ˆˆ‰Œ”Žº‹¶ˆ²‰²–´£¶”˜Ž“ŠŠŽ„’~—’€’}‘€ˆƒ€øDE‹f~i‚l†l†jŒi’€•TVŠZŠZƒV{S„}ˆ||{||ŽŽ‡ŒŒ‘’•˜¨“¥Ž¤Ž£¤‘¦˜‹“ŒŽŒŽ‘‹—ˆŸˆžŠžžŽŸŽ•ŽŒ†€‘Ž„Ž‡Ž†…Š‚‡B}‚‰…Š‡‰ˆŠŠ–À™šœŒ›ŒœœŽ¦”–‘‘‰‘†Ž{”{Œz…{…{…|…r…ÓŠ”‹ŠŒ‹‹”Š÷(“Ž–’ŒŽŽ…ŽSŽVZŽZ‹W‰T…‹†Œ‰‡‡ŠƒŒ‚‹‚ƒƒŽ‚ƒŽ…ˆˆŒ‡“Ó'“~’‡Ž“’”–—“žŸ‹œ‰›„À‡¼Š¸Š¹Œ»½ŽžŒ˜‰”‰”•v—~€Ž€ŽŠ€…øvùg•y–t–t”t”u”t“t}„x…z†|…|‡{…z†ƒ†††ŠˆŠˆ‡”ˆŸ„ž‰œž’Ÿ”’ŽŽŽŽŽŽ‡‚²D‚„ˆˆ‡…€‚iwlzo|n|m}j~}‡—¬©‘¨”§”©˜¬œ›’•‘•…œ|°p­v¬|«}­ƒ°ˆŒ”ŒŒ“Š¤Š£‰¡‰ ˆ¢‡¢Š’Š‘‰‰ŠˆŒ†z†{†}†{…|„z~‰|{‘|‘|}~’€’€€’€“„‰ŒŒŒŒŽ—•–•••”••–––”•“Š‘’ˆ’†”€•ƒ„Œ…Œ†…‡~†‚†„„ƒ€‚}†‰…‘„š„™‡”‰w²™—£”¢”¡–¢•£—¤˜‘ŽŒŒˆ„Ž€Ž€€ˆƒz€|‚|„|…|„|„‚†…‰‰ŒŠŒ‰Š•ˆœˆ›†š†š†›†›ˆ—ˆ“‡†„€ŽƒŽŒ…†Œû©V‘{¢ûû~û û]û ;û ½¸°º¤¼¤¼»–ºŠ’ŒŽŠŠŒˆŒ†“}”}”~”~—}š}ž|˜‰“–”–Œ™„›~œ~™|–}–}”|’Ž‚†ˆˆ‹–Ž˜÷Š”Œ“ŒŒ’–Žðš•““ŠŠ…•€˜€•‡‰„‚‡~„„€ƒ‚„‚~€„…‡‰Š‰‰‹‘Œ—­Œ«Ž¨Ž¨ª“«Ž¡‰™…’„’}’x“„ŽŒ„‡Šûû~‹Žz‘j”[”Zœ€¥¤—¤‹¦~ª~«vŸn”„Ž‡ŒŒˆˆŒ‡Ž†øÞû+‹\€_‚c‚cƒa„`„‚ˆ†‡ŠˆŠ‡‡•†˜„—‰”•—™ŒŽ’ŒŒŒŒ†‚†RxXi^i^\]O^ˆˆˆ‰‰‰‰‰‹‘ŽÉ ¾®´»´¼ª¿¡Ä”Œ‘Ž†š‚–†‘Š‰‘˜ŒÅ’ŽŠˆ„„‹…Œ†Š^‰a‰cˆd”a _¶r¹|»ˆ»ˆ¹‘·œš’˜“–”–“—ˆ›†¤†¢ˆŸ‡¡…¡ƒ¢Š‘ŠŠŠŠ‰ŠˆŒ‡€>t[gvivW‰Hšv›œ††œ‰œ—÷
+Œ•‹“Š’’„’€’–“˜›™ŽŸŽŽŽŽŽˆ‘“€’‚ƒ„Œ‚Š‚ˆøýùG‹v~t‚r‡s‡sŒr‘€Œ„‰ˆˆ‡ˆ‹„Œ€˜v‘uvŠvˆv†v…ln|o}ounnlŒŽŒŽŒŒŽ‹ŒÀ¨¯±žºž¹”¸Œ¸˜Š”Š‘‰’Ž›垎‹Š‰ˆ€j„i‡hˆh—i¨k¥€¦…¨Š¨Š¦¤’š“‘“‰“ˆ’ƒ‘}‚‚„Œƒƒˆ…ƒv‡x‹zz™ƒ¤†¦§•¨•¨ž£¨œ‘ŽŒˆ„‘~–y“u’v’w…yyüUl‹žxžzŸ{zŸ| }ž˜”™™˜…ššu˜v”xxw‹w‡…Š‡Š‰ŠŠŠˆ†¦û†‹qts|ttƒt…r‰ƒˆ…‰ˆŠ‡‰…”—‚”„“‡‘ˆ–‹˜œš’™“š‘š•œ–ŠŠ‹ˆŠ††SŠUŒXX|UjS„‚‹}|”–š„Ž‰Ž“œªŸ© ¥ ¦¦¦ª¦ƒ9l…‰‡‰ˆŠˆŠŒŽŽ“¼Œ¸Š´´–¶¢¸’˜”‰Ž‰Ž„‘”„Ž†…Ž‡Ž…†Œˆ‡Œ‡ŒˆŒˆ‰ˆ†ø4A‹l|oq……rpˆp„Š†‰ˆŠ‰Š‡”…¢¦‡©©¦¤‘”ŽŒŒ‹†Š‚…q„rƒtƒt€r~p„‚‡†ŠŠŠ†–w x yŸzŸxwœ~‘ŠŠƒž}¡vŸwxœxwu€”‘…ŒŒ‰‡…€hjipkyiwixgw†ˆ‰ŠŒŒŒ‹Š´’±–°š¯›±£²¬’‘ŽŽ‘‰’‚÷%û‰±¯Š¬­Œ¯Ž²Ÿ‹Œ…†‡Œ‰P›TXŸXŸT¥R¬†‡Ž…Œ‡‹Ž’ ©›§—¥–¥š¦œ§Œ‘‘’‘ŽŒŽ€œ{št˜t˜y~‚øÊùp‹•qpŒnŒoŒpp…Š‡ˆŠˆŠ‡‰†Šû o‚‰‰‰‰‰ˆ‡œ„ŠžŽžŽ”ŒŽŒŒ†~…;ˆ†…‡€ˆ€‰‚‰„‰„txˆ||Šxu•Ž‚‚ƒ„ƒ‰†ƒ’…‘†ˆŽ‡ŽˆŒ‰™v•w’x’x”v–v‘ƒŽ†ŠŒ‰Œ–Ž˜‘—˜˜Œ˜™ŽŒ‹Œ‡ƒŠ|‰|Š}‰}‡|†|„y‰‰†Ž”o opšo™op„‡Šˆ‹ŠŠŠŠŠ‰¤‚¢¡€¡€¢{£v˜~“‚Žˆˆˆ‚€}lejmiwiuhyh|…ˆŠŠŒ‹ŠŽ²”°—­›®œ¯§±´”˜“Œ“‡˜®o«o§m§nªq®r±Ž®­Ž«¯‘±”ŽŽ‹ŒŒŒŒŠŒ†ŒF›JŸN£N£L­H·‚…‡Ž‡ŽŒ‘“” ‘ŸžŽžŽŸŠ”‹‘Œ–Š÷,ŸŽŽ‰ˆ„‰ŽŽŽŽ–™—˜—–——˜–™”’”ŽŒŒŠˆ…’w›z–‘}‘{Šx„u†v‡x…x‡w†wˆƒŠ…‰‡‰†Š‹–Û÷.²–‘‰†vv‹v…v…v…w†t‡‘À’ª–¬‹¢~—~–v”m‘„Œ‡Šˆˆ‰ˆ‰‡‰…û¹]‹v5m>eHfGTFCF¯ž­¢­¦«¦«¬ª°Ž‘ŒŒ‰‰‹ˆŒ†’B‹F‡I…JFxC‡Œ}‘z‘z•~š‚‰ŽŽ‘ŒšÞ•ØÓÓ֌ي”‰”ˆ’ˆ“†“‚”‚†ŽŒŠŒ’“ž¥›£˜¢™¢˜¢˜¤– ‰||›z•xŒ‡ˆˆ‰„ˆ„‹Œ”ø<û¤‹’Œ—›Œ›’ˆˆ‚{7(vƒŠ†‹‰ŠŠŠ‹’‘ß‘’•šŽ™—Œ–Œûp‹’Š‰t‰t‰{Š€ˆ‡„ˆ‰~Š‚Š†Š]†ˆ“Š˜Š˜ˆ•ˆ’¬—ç—øÊùm‹XuZ|[…\ƒZZ”¥Xš]cc•`œ\ˆŒ‰ŒˆˆŽŽ’‘Ž‘”Š¤‘£¡Ž¡¢Œ£—Œ’‹ŠŠŽ„~‡ŒŒŒŒ’” °š¯“¬“¬˜®œ¯•œ—Šƒ–zš~’~’~‘‹„rX‹”Š”Œ””Ž†ŠŠoˆqˆqˆs…p‚nˆ‚ˆ„‰†‰†„‰€ŒrsŠ‰uv‰t‡r†ƒŠ…Š‡Œ‡Š”Œ‡ÇŠŒ‹Š£¡Ž  Ž ’¡•”ŽŽˆŽŽˆ†…ƒŽ……Œ‡Œ„‰ƒ†{ˆ|ˆˆ}ˆ~‰}‰„Œ…Š‡Š…Š‰Ž”ĉ”Š‘ŠŠŽ‘—Šøû¯‹ûxû
+¶……††ŒŠ‘ŽŸŒ‰š‰›‡œ…­†¥Žž™£¥ª•š‘”Ž…”|˜z–~’‘‚Œƒ‡øWû"—œŽ”‹‰ˆ‹‚Œzˆd‰ˆ~ˆ}p€qƒr‡r†r‡rˆƒŒ…‹ˆŠˆˆ”‰}Ûˆ”‰ŽŽ•Œ¥¤££¥Ž¦Œ÷oùO‹šx›z›zšz{ |˜”“–Œ––Š—ˆ—~ z™w‘u‘xŽzŠƒŠ…ŠˆŒˆŒ‡‚‘øih‹`{ce†f†d‹c}–K’OSS‡PMŠ‚‹ƒ„Ž„Žƒ€•’…ŽŽ’™ŽÊŒÇÉĊƈɔ‹‘‰–Š÷K¨“ŽŒŽŠŽŒ†NŒR‰VVˆR‡PŒŽ|{‘z•~™‚””Ž”Œ“Œ‘ŽËŠÇ†Ã‡Ä“Æ É”šŽ–ˆ‰ƒ•|™z”{’{|{ˆ|‚û
+zûûû ûƒƒˆ†‡Š‡‰‡Ž†”…ž€œƒ™†š†œŠŸ÷¢÷œ÷“÷•÷ ‰÷~š”“”‡•˜tžv˜y’z’sŒm‡øUùm‹˜wœxŸxŸx {¡|¤™–ŽœŒ›„{žv›t•ssuŒvˆ†Œ‰Š‰Œ‰Žˆ‡÷„û‹EvL|T‚TPƒL†Z¢€ƒ‡‰‡‰Š„Œ~û
+ûtûtûRû1û¼«³³ªºª»£¹›¸¡Ê›Å•Á–“đNJ˜‹““Œ™‰ԌЎ˒˒ϗӜ§˜’“‘ŒŽ†€z“|~~Œ€Šƒˆ‘û>‹ŽW…Y|[|[wYrXS*”Ädzâ¿¢¿¦ÁªÃ— ‡xšwšy“zŒ†Œ‡Š‰ˆŠ‡‹‡†ûnO‹•q•q”p•q˜o›nŽŽ¨…¦|¦|¦t lš„ˆŒŠŒŠŒ†ŒƒûF‹‘h”j–k–l›i g‘ŽŽ“®‡¬|¬{«o¨c¦ø;û«ü¡J„ˆ‰‡Žˆˆ‡‘‡¦~’‡•‹–Žì›ç˜à“à•æˆë~ž––Œ–„—{™”€‘ƒ‹€Šù"ùI~‡LxO{SS€Q„NˆZ›‚Œ…‹ˆ‰‡‰‹…Ž€ž+“0‡7†6v1e,}p{q{ryrurosÆ¢¹°¬¼«¼ ¿–Á—ϒˌŌÇÊÌ¢Ž’Œ˜Œ÷–’’ŒŒŒ†Œ€ŽxŽzŒ{zŒzyˆ~ŠƒŒˆ‡„‡|ˆz‰|‰|‰|‰}ˆ}†‚ˆ†ˆŠ†Š‡†•†š„›Šœœ›ŽšŒ“ŽŽŒŒŒ…€*Šƒ‹…ˆŒˆ†ˆ€ˆ |ˆ‡ˆŽˆŽˆ†’†œ‚œ‰ŸŽŽž’‹‰Š‰‹†„Š]‰`‡b†b`“^Šˆ‹‰Œ‰ŒŠŒŽŽž¹–¶Žµ³¶¶Š˜‹“ŠŽŽ’˜Œ÷œ’‰ŽŠŽ‡Ž…‚‘…‡Œˆ…‹„ˆ5ƒ…Š‰‰‡Š‹Ž”ðŠ—‹’ŽŽ‘Œ˜ôš•ŽŠŠ†‚‘„‡Ž‡Œ‰Œ†‹„‰F‚…‰†Š‡‰†Š‹Ž”“Ýœ‰•…Ž†~“„‰ŒŒŒª“¨‘§§©Ž«ŒŒ’‘‹ŽŽ†Ž¡ ™'.‘.‡(~#ˆ„Š†ˆ‡†Œ€Ž7ž†ŽˆˆŒ‡Œ‡’„¡sžsštšs™r˜qŽˆ’Ž–•–•”“‘™¡”ŸžžŒžˆÚˆÔ†Ð‡Ñ‡Ó‡ÖŒ¢Œ žŸ‘ – ¡ªs¢qn–o–rŽv…øQù›‹Šjˆj†l†lj~i‰ûÒdƒˆ‡‡‰‡ˆ’ˆ™‚˜„—ˆ—ˆ˜Š™Ž÷k®“ŒŒŒ‹‡†€f;^?VDVCHD8F{††ŠŠŽŽƬ´¾»¾»·À²ÅŽŒŽŒŽŒ‰Œ„ŽG‹J†O†M~KtF†~‰Œ€~~Ž€†ŠŠ“•–˜¬”©“©‘¨©ªŒ’ŒŽ‹”ˆ¦Œ¤‹¢Œ¢£Ž¤œ—“”‰Š‘yŽû%u„ŠˆŒŽŠŒŽåŠ–‹‘Œ‘‹‰–¤Š¤Š¡Œ¢Œ¤Ž¤’—‰‰…€xxŒx†x†xˆz‰p…Œ…Š‰Š‰Š‹Œ–ØŠ’‹Š•Š¬Œ©¨“¨’©¬Œ”Œ‘‹Š…~Œ—@“EŽIŽHŒEŠAˆƒ‹†‡‰…‰€~Œ€Œ€Œ€ŽŽ„‡‡ˆŽ‡’Ùû ‚‡ŽŽŽ’’ž¦—¥¢‘¢¤Œ¤ŠÐ‰Ë…LJȌʓ̗±|žy™w•w–yŒ{‚d€gj„j„h…f‡{†Š”’Õ÷¤”¤¤Œ£Œ¤¦Ž¾¼ººŒ»‰¾ˆœ”’Œ””ƒ—{™’‘ƒ€‹€ˆJƒNƒSƒTƒPN~‚ŠˆŒ‘¿÷ –žŠ™€’€’~‘}Ž„Ž~Ž‡‡ŽøYùk‹G•LŽQŽQŠN‡K‰„‰‡‰‰Š†‰‰„)}‚Š†‡Š†‰†‘†–†…“‘ˆŒ‘Œ”ŒÂ•ŒˆƒŠPŒRTT}RnRˆ„††Ž„Ž€Ž„…Ž†Ž†„‘„ˆŽŒ’‘Žª¬©ª©¦©¦¬¤¯¢‰Œ„‰„ˆ†‰‰‰û^„ˆ‡‰‰Š‰ŠŠŒ”÷¥Šš“ŒŒ•Œ™Œ“Œ‹ŠŽ†­Zª[¦]¦\²]¼\®…¬‰¬«Œ¬®”ŽŽŒ‰ŒŒ†CŸFªHµI´QÈXÚ‰‰ŠŽ‰Ž”Š÷s®’Ž‰Š‘‡„Ž‘ƒƒ…ƒ‹‚ˆû†_„Š…Š†‰†ŠŠŽŒ”ŠÂ½Ž»¹’¼•¾’£†z—y˜y’x‡ˆ‹‡Š‰Šˆ‡‰†û>g‹u~uvƒv…u…t†ƒˆ†‡Šˆ‰ˆ†•…¡‚¢‰¢‘¢‘¢“¢–‘Ž‹‡Œˆ‹††‰u‰vˆy‰w†wƒuƒs|{tƒtƒvŽv™‚Ž…ˆŠˆŠ‰…€n‰oƒo‚q€o}n†ƒ‡†ˆˆ‡ˆŒ…’’‚‘‚‚‚’Ž”šŒ“‹ŒŽŒŽ‹”ŠŒœ›Œ›ŒœŽ”Œ‹ŒŒ‹†€†f†h…j…ji~f‡ƒˆ„Š…Š†…‹€’Wœ†‡‰ŒˆŒŒˆ„Ï&”~…ŒŒŒ‘’–˜¦ÄœÀ‘½‘½˜¿ Á’–’ˆ‰…’•€”‚’ƒŠ…{‡|ˆ~‡}‰}ˆ}‰Œ‚…‹Š‰Š‹“‘ ‘žœ’ž“ž ”Ÿ‘ŽŸž‘Ÿ’“ŽŽˆ„”ƒ‡‰ŒŒŒ”¡‘ ”ž“ž—ŸœŸ££–•€•“’„Ž†Œ‡„‡‚ø2t‹}aydvfvglebcš®ž¬¢©¨«§ª©¬«£Ÿ‹žssvŽyøùˆ‹–m’oŒqpŠqˆpW|z†zˆzˆ‰‚‡‹ŠŠ‹ŽŒ’Œ˜Œ˜Œ™™‰˜†–„”„‘‚Ž‚ŽƒŽƒ€ŒƒŠ‡ˆˆˆŒ„’~“€‘ŽŽŽ~Œ‚Œ„‡‡…ˆ€‰B‚†Š‡‰‰‰…–„œ€˜‡”Ž•Ž˜Œ›Œ’ŽŠŒ†‚Šû†zŒˆ†ˆ‚ˆh†k‡m†n‡lˆj‰ƒ‰…‹†Œ‡ŒŒ†€’€“ƒ•ƒ•…•Š–ÒŽŽŠ‡‡‹ˆˆrŒr‰rŠrƒq}r…ƒ‰‚Ž€Ž€”‚‰’Ž•’–’”’ŽÄ¡Á—½¾ŒÀŽÃ’ŽŽŽŽŒˆ…Ž€’€Œ€Š^ˆaˆe…d‡bƒ`‚‚‰‡ŠŠŒŠŒ‹Œ’›áŒ’Š”ˆ–ˆ–…’‚„‡ˆ‰Œ•ƘÖÀ–À–—ř’ŽŽ‰ŽŠŽ‡„Œ€Ž‹‚‰‚‰€‰€ˆ‚Š†Š‰Š‰Š‹Œ””÷‚ŒžŒ–ŒŽ•ž”Ž•Ž•”••’Š”‡’„„‘„Œ„‰\‡™šŒ˜——Ž˜˜’§†žx•y–wvŠˆ‰Š‰ŠŠ‰Šˆ‡÷Ú{‹ž<•BŒEŒGŠBˆ?‚‰e…g†j…j‡h„g‚„‡‰‡ˆˆ‡†„•„“…’‡’‡“Œ–¨”¦“¤‘¤“¦‘¨‘”Œ…@‹E‰II‘E™BŠ‡Œ‰Œ‰ŒŒŒŒ™×‘Ó͉όÐÔŠ”‹ŒŒ‘–Š¨¥Ž¤¤Œ¥Œ¨Šš’‘’’„”~•„‘…„„Œ…‹…ˆûqŠ‚…Š‰‰‰‹Œ–ˆÌ‹ÈŽÄŽÄƓɤ‚žv–v—wŒx‚ûû:‹šršw›}š}›~œ™¥Œ¡„›{—z•z’zŽr€Œˆ‰†Ž†‹ˆ”û_f¡ŽE†û\€„|‡yˆyˆ{ˆ}ˆ‰‚Š†ŠˆŠ‰Š‹Œ”Ê’‹‘ŽŽ‹•†˜Œ–‹–Œ——Ž’˜–’‘ˆŽˆŽ„‚P{‚Œ…‹‰‰‡‹”Œ¸˜Š‹’‹’Š—Š–”‹Œ””Œ•–›“‘‘…‡‚Ž~XŒ„†‹ˆˆŠŠŒ“‘Á”‘—˜˜˜–÷rû ‹˜|š}š}š}œ~œ• Ž¥„z–z•y‘wsƒŒ‡Š‰‰Ž‡…ûIûw‹—vv¤t¤s™’Ž¯„Ÿ~šy••w{}‚†Œ‰ˆŠŽ†’€û†‹ƒt‚y‚|‚}}zzx‘œ”›–œ—œ˜š—“’ˆˆ†“„”‚’„Ž…Œ†Œ†‡ˆ÷·ùr‹–|’tik†w|†)|ƒ‰ˆˆ†Ž†ˆ‘‰˜…šŠœŽ›šŽ™Œ’Ž‘ŒŒ‡ŠQˆ‰‰‰ŠŠ‡‰Šˆn†q‡s‰r‰r‰pŠ|†Œ‹‰‘ˆšz–{’{’{”z”z’}‚Ž†Ž†“š”¿Ÿ“‘ŒŽ‰†‚bY`b^k^j^p\u´–·œ·¡¸¢º¬º·”˜‘ŒˆŒˆ‹„€‡zˆ{‰{Š|Žz”z‡Ž“Ž›Œš™Š™‹™ŠšŠ’Š’Œ‘‘Š–„˜ˆ˜‡˜„˜„™ƒ™™•Š•”‰–‚–z™z”zzzŽ|Œ~…ŠŽ‹’Œ–Š–‹’Œ‘—ŒžŒœŽœŽ›Žœ›–Ž––‘–“”—”’“ŒŒ‡€”~”’ƒŽƒŽ€Š~…=x„Š†ŠˆŠ‡ŠŒŽ•´Œ”‹’ŒŽ‘–ŠÝ›”ŽŠŽ†ƒŽ€Œˆ~‰€ˆ€‡|Š‚‰ˆŠˆŠŠ’›’Á• ‰š|”“|||„Š‡ŠŠ‰ŠŠ‹‡Œ„÷Öz‹ˆYZy[{[lZ`Z™‘’‘ŽŽ‘‘Ž“‡––€•‚’…´dzrwwu|u|uu€}†•‰¢¢‘¡’ ’¢˜¢—˜“Ž‰ˆ”…˜€ž{œ{›z›zœ€„¨§ŒŽ¤¤Ž§‘¨–ŽŒŒˆŒŒ„]’`–a—c™`Ÿ_¦ƒ†‡ˆŽŽ’’’œ‘›š‘š‘š”›‘‘ˆ‘†‚“‡ŒŒ”ŸŽžŸŸ’Ÿ’‘‘‰‰‡Ž…ŒƒŒ„Œ‚‰€‡û0`‚ˆ†ŠŠŠ‰Š””ž••›”œ–œ—œ ‹œx™šxz’z†Šˆ‰ŒŠŒŠŠˆŠ†…û[ÖŠzˆ|‰{‡}‡{…{†‚ˆ…ŠˆŠ‰†Ž”N¸|–…’ŽŽ‘’–—’’’Ž’Œ’ˆûQw‹˜‘…†y†z‰|Œ„€‡‚Š‰ˆ€†„Œ‡‹ˆŠˆŠŠŽŒ“Ã’”—Œ—Œ––Œ/t‹Šk‹xŠ…„z…h…jq͈“‰ŠŽŠŽ‹•ŠšŒššŒ›Œš›ŽŒŒŒŒŒ‰„÷¢û†‹^~ab…b„a…`†„†ˆˆˆŽˆ‡’…’ˆ‘ˆ‡‰‘Š“Žç•‰‰ŠŠˆŒˆŽˆlŒmooŒml‰€Š‚†Œ†„‡~Š7ƒ‹‰ˆ‡Š‘šŒ–隉˜˜€˜“}ŽŽ„‹‡ˆˆ‡‹…–o’pqqŠpˆoz†y‡xŠxŠy‰zˆ=„ƒ‰‡ˆ‰‡‡“†“†‘ˆˆ‰‘‹”Œ÷ œ÷—ô‘ô÷‹÷ †“ŒŒŒ‘ˆ‘ƒ‘}–~“‘~Šûy{Š…‹‰‰Œ‹Œ–ÏŠ–‹‘‘‹—Š£¢¡Œ¡¢¢‘•ŽŽŠ‘Š†‚t”sr†q†s…u‚†Šˆ‹ŽŠŒŽŽŒ˜Œ–••‹–‰–ƒ•ˆŽŒŒŽ“÷  —’‘’Š’Š‘…‘€Ž‚Œ‚ŒŒ‚‰‚‡÷Lù‹œxzž|ž{Ÿ{Ÿ|Ÿ˜•™Œ™˜…š~œv–x“xyy‹xˆ†…‹‰…„‡„–øÆJ‹]z`~d‚c‚b‚`„…‡†ˆŽ‡‘‡”‡š†™‰šŒšš›”Œ‘ŽŽŽ†IMŒRŒQ‹M‰JŠ„‹…‡‡†ˆˆC€Œ„Š‡‰‡ŠŠ‘˜‘÷UŒž†š€•€•}‘zŒƒŒ†Šˆ‰ˆˆ‹†Œƒ–w’vttŽuŽt‘!‚‹†Šˆˆ†‰ˆû{…Š†‰†‡‡‡Œ†’„”’…‘‡’ˆ”‹–Žæ£à›Ü“Ý“à‰æ€˜Œ’’’†”€•–€“€€Œ€‰û2|Š€…‹‰‰‹–Œ÷-–Š‹’ŒŒ‘Š–‰¤‰£‹¢Ž¢Ž£¤”’’ŠŽŠŽ…‚‘„…†Œ†Œ†‰„ˆ*t€Š…ŠˆŠˆŠ‹Œ—ˆ¦‹¤Ž¢Ž¢£¤w¨÷'´˜“’’Š“‘„’}’Ž‚Œƒ‚ˆ‚†ü¯ûD‹qqryq‚s‚r…s‰ƒ‰…‰ˆ‰‡Š†”‚£x¤‡§•¥”¥—¤š‘ŽŽŒŠŒŒˆ„ŠˆTŠVŽYW|WjUˆ~{{“}–€’†‡‰‰Ž“ž¬ ª¢§¢©§§ª¦3l†Š‡Š†‰‡ˆ‹Ž“ºŠ¸ŠµŠ´•¶¡·”™“ŠŽŠŽ„’~—’€}‘€ˆƒ€÷Žùk‹˜\“_``_\Š…‹…„„‡ˆƒû%iƒŠ†ˆ‰ˆˆˆŽ…”„•…’‡Š‰’‹–Œë¡˜‘ŒŒˆˆŠ‚‰~nVmYk[j\bYXX{~—¸¦³«°¯°°ª³¥¶ŒŠ‹Œˆ†ˆT‡W…Z†Z…X„TŠ‚Œ€€’”‚”’“‘•“Œ““÷¾Š‘‹Œ‰’ƒÊK•Š’‘‘˜˜Œ–†’œ~—|“}‘}}ƒ†ŠŠ‰‰‹Œ•á•‹’ŠŠ‘–ס•Š†€‘~Œ€ˆ‡€‡~ˆƒ‰‡‹ŒŠŒ‹Œ‘Š³Œ±Ž®Ž®Ž°±ž‡™|”}”|‘|Ž†Œ‡ŒˆŠ‡Šˆ‰Š†÷Ôu‹–l’kmŒklŒlŠƒŠ‚‚‚†…‚‰&s…Šˆ‰‰ŠˆŽ‡†~š…—Š˜›”ž’Ž‘ŽŽŽ‡Šû~ƒz…w‡x†z‡}‡j…„‰‡‰ŒˆŒ‰Žˆ‘†”ˆ‘‰‰‰’Œ”¥”¤“¢£¤¦”‘ŒŽŒ…Š~ˆu†v…w†w€v|u„‚‡†‰ˆˆ‡†Žƒ“~˜˜~––~–~–€–‚‘ƒŒ‚Œ‚‹‚Š‚‰‡Š‰Œ‡†“œ€›š}š}›{x”~’ƒ‡Ž‰‡‚~|hlltm|o|kj€†ŒˆŠŠŠ‰ŠŽŠ‘Š³†°­–®–°£³°’”‘ŒŒŒŒ‘‡”€¤r£t¤v¤v¤y¥z¬Š«Š©ªª“˜¬ŽŽŒŒŒŒŒŠ‹†ŒT™Yœ[Ÿ]žY¤W©‚“„‡Œ†Œ‘’”žªš¨—§–¦ž¨¥¨˜”•€•–•€”„’†ˆŠ‰‡ˆˆ†\{„Œ†‹…Š‡‰Š”銔‹‘‘—Š¤’¤£££“¤˜‘‰Š†Ž„t’s‹t‚t‚t„t…Š„†Š‰ˆ‰ŠŒ“¥Ž£Ž¡Ž¡¢’£”§…Ÿx–x–vuŠˆŒ‡‹ˆ‡ˆ‰‰‡Šˆø>ù†‹–`’bfŽfŒcˆa‰Z„]ˆ_ŠaŠ^\…Œ†‹ˆŒ‡Œ‡ƒ¨UX’[’[˜XVŒ„ˆŽŽ‘ŽŽŒŠ–‹‘ŒŒ‘—Œ÷%™“Œ‹Œ‹Œ†€~ûæ{{Ž|Ž|“{˜{ŒˆŽ—˜“Ž”Ў͉ȊȋˎΉ Œ–Š÷vš˜Œ’ŽŒŒŠ’ˆ•”‚†‰ˆ‘˜”å÷”‘ˆ€z—{•|•}“|”|’bd‚g„g„e‡d‰‚Š…Š‡ŒˆŒŠ”¤Œ£Ž Ž ¢’¢—¦† sšušu’vŒˆŒˆŠˆŠ‡Š‰ˆ†÷–ûŠž˜Œ‘Š‰ŒˆŠ„Š‰pˆr‡sˆs…rƒp‚{…vˆvˆyˆ|†=…Š„‡Š‰‰‹Ž’Œ÷:Š’Œ‘Ž”Š¨¦¥Ž¤§Œ¨Œû}q|û/|Š„ˆŠˆŠƒ‰}Šû€…Š‰‰‰‰‘Š–Š¨‰¦ˆ¤ˆ¤‡¦‡¦ˆ•Š‘ŽŒ‹•Š÷:š÷˜ùO~–H”MPPLˆJbueyg|h}ed€{ˆ„…Œƒ„‘˜~”„’…’ˆ’‡“Ž•”÷B÷ Ž‹‡€ŠX‰[‡^‡^‡\†XŽ||•‚˜†Š””“Œ‰÷‹÷÷÷
+S„o ª
+ä ‹¢’Œ ¤Ž²Œ‘“Ž– ú|ù§
+endstream
+endobj
+293 0 obj
+<</Length 1081>>
+stream
+€
+endstream
+endobj
+295 0 obj
+<</Subtype/CIDFontType0C/Length 4953>>
+stream
+
+p
+h_„ub÷R÷„š¤‹©ªs‹{û¡j„‚kûžy‹t«•“«¦´ÅݸBJ;DO7oK“Âo“’Ÿ¨t›v|m‚d8ßE÷÷îå÷ûyÇ÷AÄÂÇ÷?ÇmǨÅxÐRÐ÷HÐqŇÐQÅ
+
+š¥‹©‹Èø}È÷Ð÷…Ðø|´äŸ‹ ih‹wvFû…ø}Ù¦‹©ªq‹|û6{s‹lm¤‹š°ü}f{s‹lm¤‹šø ¬’”«‹Èø}È÷xÐøg©ªs‹{ûø‘ª…•iû2{r‹lm¥‹™÷ü}û{r‹lm¥‹™÷Ýš¤‹©‹È÷ÉÈTÈÀÃ÷ Ã÷ üø˜©ªv‹g÷†Ÿ‹÷2mb~do­|ojkm}usÜ©‰w‹yk|q‹ml ‹¯ûÉgv‹lm¦‹™ãš¥‹©ªv‹g÷G¼ä´º´¢™zJû}xr‹lm¦‹™Öš¥‹©ªv‹g÷Gä´º´¢™zJû}xr‹lm¦‹™Öš¥‹©‹È÷ÉÈTÈìÐ÷Tиø”©ªr‹{_÷|ðX¶<H^ixxЫ‹šcB{r‹lm¥‹™¸ûÉ_{r‹lm¥‹™÷3™¥‹©ªr‹{_÷E¨ïÕ±¾À™oOûwd{r‹lm¦‹™÷-™¥‹©…È÷ØÈÄÐ÷¤Ðøg÷l÷.îûû.(ûûê,÷÷êë÷F’.M@AAMÖèæÌÌÒÓËJ0‹ÈøÈ÷w÷†ÐøN©ªs‹{0øœ›‹¤mx…†e6W€x‰{Šv‰or†šž´‘±·ü:0{s‹lm¤‹š÷š¤‹©ûrÈ÷/È÷ÏÈTÈìзÐ÷ Ðø|÷l÷2í![^yli™eB{r‹lm¥‹™¸ü§_{r‹lm¥‹™÷3™¥‹©ªr‹{_÷ba´¶‚«÷ìê÷F+EJE=hã»ÔÆÅÀÊÕÅB4‹÷÷\÷÷ÙÉ°m¥kerllf©q«±¤ªª‹È÷ÉÈTÈ÷-Ð÷Ћà0ø{ø Ÿµ8XKyLT­ت…•iû|r‹ml£‹›ÜûÉ:|r‹ml£‹›÷™š¥‹©ªq‹|û÷$éÆë÷ sŒœw¤¡Ÿ›¦€Èø“È¿ÌJкÐ÷ÐeÌløl÷:Ëgµ˜b³p’=:a—e®º¾¼»Ò÷
+š-l‘uŽ–…Ÿ®‹ Ÿ÷›‹¤ms†zmƒ®bU—^û@<6H¹IÞs÷pš§…Þw4W`P<oZ¦ca¦‡µŠœŠŠkh‹vwû{‹r©¡‘™«”m³È{Ë÷Óãä…È÷ØÈÓÈ÷Èø_÷óû kG—nG—²¥«ªêÞ™mqŽzŒzª®‹ ŸÐ›‹¤ms‡}„‰ __‹xû;t9g/ôzç}¼ƒÛ~Vffj0\S–Ùr†‡–qh‹vw*{‹r©”›Œ°—g¼À‰§÷2«Þ»øfù'|œwu„|~…ûÞýF„{Š‹ƒyšzŸ¡’š˜‘÷ÞùF’›Œ‹“…È÷ÏÈ÷-Ð÷2ÐøU÷‹ hjŠvzMŠRt>‹¿¤÷‚÷8š¤‹©ªs‹{û8Ýž‹¡ih‹vw94{r‹lm¤‹šãûˆ+ÏgÔÕܶä‹ÈøˆÈ¿ä÷rÐnЈøl´¥ž‹¡ih‹xoû‚ƾëÖ¶³èÊùËÛ÷ &Öûû
+<96f§€œ ¢œ§—†˜‚’¹šºªÂÝØ]3EZQITûqûN‚ƒ…†}l¤‹›÷笒”«…ÈTÈ÷ÉÈ÷¥÷.FÐF÷.|ø”ª©q‹}^÷ݪ…•iB{r‹lm¥‹™¸ûi¼1:k<‹¬«÷¢ª…•iB{r‹lm¥‹™¸û”+ÐsÔ´´•§°\kŒ ‹Ô›¤‹ªœvø
+È£÷YÝ÷Yøˆø$ªs‹{û |r‹ml£‹›§ûûÖû÷Ö§š¤‹©ªs‹{û {s‹lm¤‹š©÷ûèi—Ÿ‹ ž¢‹¬–÷÷é©š¤‹©‡×÷¾È›÷[é÷[øø%©s‹yûys‹ml¢‹ž¼Yû¾Š‡¥~¹´Êyˆ–hx‹u€ˆ„cû‡wŠW÷¾¼£‹©ªt‹xûys‹ml ‹©ÇûätŽ|³³Ž”Ȥ㌙Ž¡ŒW°û ƒz—‹—°Ž›¡Ç÷ä© ‹ª‹È÷ÉȦ÷ZûT÷ZÀ÷ZûL÷ZØø„©ªq‹|cû÷5÷÷(³™¦‹©ªq‹|û |r‹ml¡‹¦A&?𥡋ª©r‹|û |q‹lm¦‹™³÷
+û(ûû5c¤|q‹lm¦‹™÷ š¤‹©ªv‹lá÷äûou‹lm¤‹š÷ ™¦‹©ûxÈN÷_Èø[È¥÷YûHÝ÷F÷Yøˆø$ªs‹{û |r‹ml£‹›§Cûi~f…y„lŠ†ž‚ „ž.÷„¤š¤‹©ªs‹{û {s‹lm¤‹šª÷"ûù‹ˆ‹‹r7~r„nTg‰|Š‹”˜@¤yr¶pzyqa­c¼ï¸÷–÷/ø[©š¤‹©
+To ‹ È
+Ð ±›‘ŒŒŒŒŒŸ‘ ® ’ŒžŒ•Á¬• ø¡ö
+endstream
+endobj
+297 0 obj
+<</Length 15>>
+stream
+€
+endstream
+endobj
+299 0 obj
+<</Subtype/CIDFontType0C/Length 4067>>
+stream
+
+Z
+Ê & ¨ 1 º 9 ™÷A…ÖFÖ÷ºÖ»Ýpø±¯nŒyn}ŽŽƒ÷aÓUáû&^#ˆ?i£y¦œ¬•¶Œ‹«Ž›ÍºrPŽûA‡û V,€DËGô®Æ’§¹@p¤¸‰°¬£¯ûJïx‹xj|{ia‹ƒTf¨®·Ú©÷…Ö÷½ÖêÖ•Þ‹Ý9Þ÷|Ýdø~÷n÷0í `c}sj÷4¯„—cD0xnŠfg©Šœ¯ü|sŒs´ʪ“™ŸŒk±²ƒ¨÷îë÷93KNJDlÜ·ÒÁÀºÄÏÀG;Ovù™wøid”†–ˆ’û×ù5—†žqsywu‚€Ž„÷×ý5•x¥£Ÿ¡€ÖøwÖ±Þ÷®Þøz÷@²n‹~€p‹hˆ1…Aue6<ð÷!÷ ÛðÞý`@—wŽy®´Œ££÷žŠ¨gx‚‚…‰ˆ‹‰ƒz¤j_\ûûûûJûK÷û÷÷
+âæç…Ö÷ÀÖÑÞ÷+Þkñðøi÷­hŒ„x‰s‚†waK=HÌ߸¥õ÷¾ŠcŒ¡|¦§£ž¬ð×!Ž\ûANû2û ê$÷÷#­òœ…ÖFÖ÷·ÖêÖ÷Þ‹Þ‹Þ~ø–±¯mŒzgø|¯„—cDxnŠfg©Šœ¯û¢lf—eû),ûŽûç)ö¼±Ÿ¤§No‘€²Òž¨Œ°û;÷3®Xb>EIUÍÝäËÇÌÅ·YY…Ö÷ Õ÷Öøg÷­hŒ„u‚‡u‚]wZƒrHH¶Õy÷­¤¡‹·÷Iîûû )&ûûñ%÷÷ºé¥5÷&û…Ê›¿¹É¹Áu4–‹Ö÷²ÖõÖ÷FÝøLø»Ë7y9=[1`1xn‰gg¨Šæû²0ymŠgf©Š÷œ©Œ¯°mŒy0÷²÷œ¨Œ¯°pŒxû±Ê¿¨}˜o«¢¦¬ûsÕ÷-Ò±Õ÷HÕ¦ÓiÝÝáß¡Ó
+xnŠfg©Šœ÷Õ¨Œ¯‹Ö÷²ÖEÖÂÒïÑïÒ¼øž°¬xg÷x ‰÷ .oe€jn¨zpšlnpytÜ¡„xŒylym‰hjž†¯û²gx†jgªŠœà¦Œ¯¬{g÷;¼Û­·±ž”{SûovŠx†kg§ŠœÔ¦Œ¯¬zg÷;Û®·°Ÿ“{SûowŠx†kg§Š›Ô©Œ¯‹Ö÷²ÖEÖèÞ\ÞgÞäÞ²ø•°°oŒxh÷nóV·9SctxsH¤Š„—dDxo‰gg©Š›Яû²hxoŠfg©Š›ˆ÷/¦œ©Œ¯°nŒxh÷9æÏ®¹º–rVûimxnŠfgªŠœ÷)›©Œ¯…Ö÷ÀÖÁÞ÷ŽÞøj÷n÷,îûû,(ûûì+÷÷ìì÷8’5REGGRÑáßÇÇÌÍÆO7ûlÖ÷Ö÷¸ÖEÖèÝ]ÝiÝ÷)Ýø~÷n÷0í `b}rj$¢Š‚–gDxn‰gg©Šœª¯üŠhxnŠfg©Šœ÷/œ©Œ¯Å°nŒxh÷Cj±±„¨÷îë÷93KNJDlÜ·ÒÁÀºÄÏÀG;‹÷÷V÷÷ßÏ´j§hapiic¬n®µ¦­­‹Ö÷ÖeÖEÖ÷(Þ÷4íø}ø ¡¹3[Q|WW™ ¯„—c @yn‰h¨f§ŠžÒû²DynŠgf§Šž÷’©Œ¯°mŒy'÷á¿ã÷
+To ‹ Ö
+Þ º¢ŒŒŒŒŒž‘ ÑŒŒ’ŒŒŒŸ”Œ” ø¡ö
+endstream
+endobj
+301 0 obj
+<</Length 16>>
+stream
+€
+endstream
+endobj
+303 0 obj
+<</Subtype/CIDFontType0C/Length 101548>>
+stream
+
+
+
+
+6
+c
+s
+x
+{
+”
+ * 7 Ë  ] ’ – ¸ Â Æ ä ö  ! & * H L ^ p ” ª Í Ø-5H]^e“¹ÊÕá/5CLTar³Óåøþ"1BG[^iy‹¨µíð 5|ƒ¥­°´ºÁÅÓÕöÿ"13T
+X
+Êž’ƒ}}‡Š}{û&Eû9ûo÷ûS„“‰–š˜‹™š÷ðÑ÷9÷p÷\O÷6%ô«l„Œ}…}}‹„‚‘‡š|÷û®ûHû3ûþûIûx‹ô÷ŽÆ÷TÀ{‘h¿‰$Uf{¥r•Åäë¼ÉWkwsoøݪñ»b´j¬Ü¬÷Y®µ•Œ®÷L´
+Šb‰k‡tjƒƒzƒŠŒ‡ŽyŸl±p¨l«h¬8ø„–v•u•vß”’˜‘˜’—ŒŒŒŒŒŠŒŠŒ˜€™™ŒŠŒ‰‰Œˆ‡‡ƒ…€‚„x‰nû z–‚ŠŠˆˆŠ…Šû}Š~Š}}tŠ‡€…†Ž‡‘†•¢„›‰““ž–ŒŽ÷Š¢‡²‚ÄŽŽŽŒŒ®-Œû7¤¥Ž¤Ž–÷7û´÷ú®÷#¾_±l°÷‚}´ø
+šŒ÷ gv……ˆŠ‹ŠŠdƒn„z……ššš™Â Â¢Â£ ”š““‘’‘’”Ž´a’„Ž†‰Š‡€ˆxˆzˆg€RzŠû¸ª“œ•–ƒ—‚—Žˆ‰Œ‰Š‡ˆ‰…Š}Š}‰}‰pˆo‡p‡Šv‹wwó\–†‘ƒeŠ‰†‡ˆŒ‰‰†’†‘†’x¢yœz–u˜~“‡ˆûKüŠdz‰‡ƒ…ˆŒ‡†•úžü€ †–ŽŽ’‘‘ž¦®úäL:BD7L‡ˆ‡‡‡‡†ˆˆø½øØÀU…†‡ƒ†„‡p‡\~û’~’“~‘‘‘‘®¸¢«—¡°–©Œ¢Œ‘Œ‘¤MŽ„†Œ‡‚†ƒ†ƒ†Šƒ„}} ûžp m¡l¤hœw•„˜€›Ÿƒ ‚«‚¶€Š‡‹†…û8…û÷†~^|e|nvfje\fouq{tˆˆŠŠŽŽ¨ž¦ ¢¡«®¢ª™¦°˜¸”À®­­¬Œ£š¯†°±ŽŽŽû2ûKŽÀO¦g‘‚Ž„…ˆ‡ƒw}gŠŠ‰Š‰‡Œ‰ŒŽ‡˜ˆ—ˆ—€°x¶q¼ûüY–v”{‘”|‘€ƒ¦d¬j³r³r¸y¾€†¬¦ˆ ŒŽŽŒŽŒŒŒ‰’€¸xà™‘ XÏûŽ‡ŒˆŒ‰‡ƒ‰|j~xŒŽttŽuxNœW¢b¨j£n©s®ƒ—„—…—…•€¤|³ŽŽ‘ø´çKˆŽ‰ˆ¯pŸz„ŠŠs‰h‚‰ˆ†‡‡‰Šx«s³_ÀLÎŽŽŽŽû…”ŽŠŒ‹Š²p«s¤v”ƒ„Šˆ‹ˆˆˆ€‰‰€ˆ‡…‡ˆŒ‰†–†•†•x®p°h²ûƒYŸˆtûƒop|rv|‚†…ŒˆŽ’‚²†ŸŠŽ“‘Ÿ™œ™¡”œ“¢“¨Œ’Œ’‘û¼ˆÂ÷Ý»÷w÷,›÷Ȳ
+žÎû$ŽŽÇ²»®®©¯¬­¯ª²¹Ê®Ê¢Êš°–°“°ûMvfˆk†p…y™zšƒ“ŠŽŽ‘¡¢Œ¢Œ÷•Ÿ”‘´¤—ÊŽ»«ŠœŠš˜ŠŽ‡œƒªŽŽŒŽŒÚJ€}…{‰zŠŠ‚‰‚‡q†e…X†k…dƒ^÷—¾‘¶‘®’œŽ˜Ž“’Ž’Ž“Ž¹gŽˆ‰Œˆ†Šˆ‰„ûçm ^g™r–w«R¾-®S¥dšv¤jªt±¦ƒ¨…«‡xûY‡‚ ‚Ÿ‚Ÿû
+Œ”Œ’’û÷µk´÷&Èg´f¨
+÷yeWLFtvvxy|vysxoxbppz}‚‡’ˆˆ÷øâp€p€p«„Œ|y•xÇû¢¹Ÿ¼œ¾œÀ“µŒ«÷G±µ–÷{³ô±ï²÷MùC§G÷±®‘•‘•’•ŽŽŒŽŒŽŠŽŠ‰¬kŽ‰Œ‰Œˆ‰ˆ‡„…€ƒ…}‰wŠýEw†……ˆŒ‚•}…”…’…’4뎎‰«uÈb‰ŒŠŒ“ŒšŒ“‹ŒŒùû±i‰üÒŠyŠyyˆcˆlˆyˆ„Š‰‰Š‰ˆŒ‡‡“xµ‚ ŒŒŒ’—”¤¬´‹‹ŽøR‹‹‹‹ˆÛ‹ %Œ¾üᎎÀê¯Ô¾5÷:ˆŠŠŽŽŽŽŽ†‡†ŒŠˆ‡¥c“€Ž‡‰Ÿhšt•›¶—±”ª£Žš‘“Š”‰•ŽŒŒ¼G||€}…}‡ƒˆ„ˆ…†„~jvNžj¥_žl•x„Š†‹‡Š‡„{†{†{†ˆ‰‰ˆˆŒˆ‰†–†œ…¢z¸§…—ŠŒˆ‘‡˜rxƒ~‚zynrdx‚~…ƒ‡†‡†‡…ø¥ù:ÕIzvƒhŠZˆü­Š(Šv‰y‰}‰~ˆ{†y}„‡„ˆ‰t£¼^DÏ{šŽŠ‰‰÷ D‘Ž– ŽèŽøŠ°Š§‰ˆœ†Ÿ‚¡ŽŽŽŽûû?ÇV††ˆ‡‰†‡‚‰„„‰‚Šû ûu‰s‰}‰†ŠŠ‰Š‰ˆ‡“‡oʼnŒ“˜”Ž—™÷‚ªŠ¡‰™†›‡š†™÷l³k«Ï¹i®­
+÷V«£÷¡úüÉý;…÷Dˆ³ˆ¦ˆ™‡ž„žœŽŽÂa‘ˆˆ‡‰‡‰ˆ‰ˆ††‰€{ŠwŽB‘ûÔ¬ø&öxˆy‰zˆŠ|Š}}‰‰…ˆ‡ˆŽ‰Žš™ƒ™ˆŒ•Ž™‘ˆ´…ׂÀ†§‰ŠŠŽ©P÷+Ÿ””“‘ŽŽŠ‰Ž–‚•‚–Ž‰Œ‰Œˆ‰†ˆˆ‡‰‚‚†„Š‡Š†ˆ‡w|û’…’…“…ˆˆ‡Š‡Š‰ˆŠŠ‚‹‚ŠNƒû*´–¦“˜’©xŠ‡…Š†Š‰ˆŠc†e„hƒûc÷ ÂŒ††Ž†)VRl|m{[oJdT¦†Ž‰‘Ž—÷øŒ÷ ž÷+û*xe÷¾¿÷úw÷¦³÷Ég±
+rŠ‰~†ˆ†‘—ƒp¸„˜‡’—¡’”¢Œ®ô÷vldoirprqlphoIWB^;eˆŠˆŠˆ‰ˆ’ˆ‰ø/ø÷`†h„rƒ€•••‰ŒŠŽŸŸŒžŒ¡Ž¢¢÷û0z‘û÷P ÷6Ÿ¡÷ûLuûÆ“³“ž“–‚–—ŠŒ‰‰‡Š‰‰‡û({²²÷ ¬jµ~±÷λøY›
+œ”Œ¥¸”‘–’•“–’ŽŽŽŽŠ‰‡–€–~˜}…Š†…†~‚„ƒ‰„‡„‰Š}Š‚„5û8¬nŽˆˆ‰ˆŠŠ‰ˆŠ€€Šû"xŠpˆi†àˆ]‰ht„Šˆˆ†…Œ…’…™†”ˆ“ˆ“‚ ‡˜ŒŒŽ‘Ž”—ÐÒ‰÷_ŠØ„ƶ‘»ü>å—ªŽ©¦‘Ÿ÷¹û^p@·i­‹½÷Už÷d¸rwù³
+ã“£ŽŸŽš¦¡‘š‘·j’‡‡‡ˆŠ†‰€~ŠtŠj‰ûV{R‚$W†Š’z‰yˆx†rŸ|˜†‘6ŽŒÛŽX§÷æ²÷ǽ÷O°î°øSùû|Š^…?€j¦z˜ŠŒŽŒ“ŒžŸŒžø
+š’—“–“–ŽŽŽŠŽ‰‡•~–—~Ž‰Œ‰ˆŠˆˆ‡…‡ƒˆ…„‡€ˆˆŠ„‰}ˆo‡`uûR|'{@zZa|€vƒ‡ŠŒu«bÊo¯x¤™ŽŽŽš€¯oÄ\ŽŒ”‘œ–´•µ“¸“Å­–¢÷€û{rû.qûpJvXt_shphgd^b…††††…‡‘‡‡øÜù÷E£–‘•’–ŽŽŽŽŠŽŠ‰•€–—€ˆˆŒ‡Šˆˆ‡…‡}€ƒv‰mxûH‚&Šv¢u–~Œ‡†Œ‡‰ƒ<ˆÀûˆbŠ‚Š‚‚€‰ˆ…††Š†’…™z¯‚žŽ’— ›œœŒ÷•‰â‚㌌÷KüWž÷•÷ ŽûEtûð÷°§÷êw÷DÉe±÷¼i¬ø¶
+ûZ"¨‚®}¶z´É¥¿•¶û*÷I÷—°ô”®¦ŒûLtŽ†•zœmŒ††Ž†—t’~‡Š„Š†‰†€zz{˜ø'ŽŽŽˆ‡††‘†’…”‚”‚•‚Ž‰ˆ†¡tŽˆŒˆ‡Šˆ‹‡Š†…~††~†‡†‰…Œ‡‰•ˆ’‰‘‰’‰“‚ |¬÷Κø³¿k±
+¼÷—°÷†¹c¦
+É5’€’“€ðƒŽ…††‰„‡y]†††‡†ˆŽ‘{ȃ¬Š‘gòŽŽk›÷¤¹÷k¶ø\Æh°
+ê ÷`û¶øz2ÀŠš‹ššˆ¬€§x ŽÐ^ƒ~‡yŠtŒ‹~Œ}÷B—–¤Ž¡žŠ’‹’”ŽÂLz€{…x†‡‡~Å‘±©¡ž›™¸hˆˆˆ†ŠŠˆˆ=ˆcŠˆŠo^ˆ…Ltss¬i|~€}…}lžŽŸžµ’¬£¡ ž‘®p‘‡‡‡Š‰ŠŠŠoˆo‰pˆ*€+kFmUpd‡†‡†‡…†‡Ž‡ŽŽ›¨šª™­™­–¬”ª—´‘§›Š”Š–‰˜ŽŽŽŽˆˆ‡—Áû8u‹uŒv~‰…‡Š4À‰r£2À‚’‰’‘‘Œ“Œ˜œûX‡j‡}‡~•}•|–†ŽˆŽ‰®ŒÎ˜ûŽŽŽŽÂ\…†ˆ‚Š~Š†Šc@‰pŠop‰ˆ…‡ˆŒŠŒŒ€™˜ƒ—†’Š‘Œ‘Ž‹ŒŒ¢Œ­º¨ŠŸ‰—‰”‡™„œ÷£Ë]‡‡‰ˆŠˆ†„‰„…4ÀŠ†ŠfH8Àˆûz‡‡‚†ˆˆŽ‘‡‡ˆˆŸ€†•ŒŒŽŒŽ4À–Ž—™Œ÷Š¦Š¢‰œ‡™†—…–ŽŽŽŽŽ÷uû<‘—š†§€©~«|˜†’‚ŠŠŠ‰}‰p€‰ˆ†‡ŠŒ‰Œ‰Œr¬y¡n¦dª÷®«ôª÷±åÓuœ°Âm®Ø¶l«¹¹t­÷´p¦
+ûƒ„€}|“r‘st”`‘dŽjŽle\Š>†M\ˆ|…x‚v|„†„†ˆŒ‡Ž…’SÎ_¸TÀŽŽäPºl‘ˆ“Œ™§Œ”Œ‘¯·ÀÜ„Õ}Ì„°‚ª€¤†–Ÿ{©‡‘ˆ‘ˆ‘™—†……šxžn fšœ””ŽŒÏÕ­°ŒŒ¢¤¤©¤¬ûê_yˆsˆn†s‡u…xƒW¬ˆŽ‰‰ŽŒŒŒ‘Œ“‘Œ÷š÷’¨»™÷ß³Àv÷µ®÷ŠÆh®už
+ÍŠ´‰š‰ †¡ƒ¡ŽŽŽÑQ€|„|‰|‡}‰ob‰û ŸŽ¦£“Ÿ–˜™€™Œ—“‹’Œ±Ð”ÝæŠÄ‰¢ˆ˜†Ÿ‚¤ŽŽŽÓL}w„wŠwˆ~ŠukŠûšŽ™Ž™ª¨¤‘Ÿ›‘—‘¶pŽ‰Žˆ‡Œˆˆ‰…Šy‰ûZp¨KªLªLžekœq¥d¥r¥¤€ªƒ°†}û7„@÷9;÷FŒü0øŠxŠqjòˆ]~ˆ„…ˆˆŽ‘‡Œ‡’ƒ˜‚š†•ŠŠŠŒŒø†”ˆŽŽ“ô–ž‘§Œ°÷üHû8û).—©¬¥«¡¨¢ª£®¢²¹Ú¬ÐžÈN€†ˆˆ~–•–S…E€w‹wŒx |›€—…“†’‡‘‡±s”†ƒŠƒ‹…‡ˆŠŠˆˆ†ˆˆ‰‰†’‡’‡’p´m®l¦†üŠfŠkŠrˆoƒŠˆ‡‡ˆŒ‰ŒŠ…”†”†“wµ–¡¦ª÷á{h|m}tzovlsifZe_ffù@w°vø³
+û|}}|}{}z€~‚TŸ„Ž†Ž‡ŽŒŒŒ¿¨˜——ž»°×Ä÷÷¦§÷yû{6}h~’““†Ž‡ˆ’Ž™Ù‘÷#Žœ”“‘“ŽŽŒ‘†’‡“‡±jy|ƒƒx‡nvû<¯¦œ™—–©sœ}†ˆ†‡‰†ûû/y·e}|„€ƒb¬Z‘–}šzÁÙ”˜’•“”ž  ŽŒŒ±8x†xyx€€€€‚‚‚‚††‡†‡†ušx—|–~“€’ƒ©g¤o§y©‚”ˆ•ˆ˜‰œ‡žˆžˆ{û;…rµE÷5÷ûäŠlˆu…}„ˆˆˆ‡ˆ‡Ž‘‡v¦zŸ™>ÖŽ’ŽŽ÷EŒø0 †¤¦]…l†|‡z‰w†vƒ€”““‡ŽˆŽ‰ŒŽ’¬²ºŽ—Ž˜Œ™ŒÄ”½’¸û¬û “—¯q”…z¦p“„„…‰†Š†Š‡ˆ‚‡‚‡…‡…ˆŒŠ‰Œ‰…˜†—†˜w´q³Ç÷ysœ~”ˆŽŒŽ’´Ö”¿•¨—¬rˆŽˆˆŠ‡ˆ‰„ŒX…N„oˆn…m÷k°Ë¿¼²÷±×È·²÷û"ŽŽÖÄÅĶķƪҜÝ`t1V|‚{~z|~”••†Žˆ‰ŽŒŽŽŒŒ”Ž‘“Ž‘Œ•™¥ƒ÷„ˆ Š ŠŸÙšŽ¨Y¨œ©¨ž¬££™˜£¢š£’¢ŒŽ‹²A€Šƒ‰„ˆ†Š€…|€„‰†ˆ†‡9\_r…‡€†~ƒ{’ûöª˜«—«—È¥®©Œ¤Œ¢Œ¥¦Áˆ´…¦ˆ˜ˆ˜†™ŽŽŒŒÎN„ƒ‡‚‰‰…‰p‰Zˆ$„>€Z~Xw[o^thjebd`d_i`p‚÷'ùŽŽŽŽ‡‡‡ÁA’„Ž„…ˆ‰…‡‚zk‚…‡‡‰‡Œˆ‰•†žˆ˜‘µ€¯€¨÷ûû™•—Ž‰‰Žˆˆ§vÀfˆŠŠ‘—¢Ž£Ž¢¡÷› ‹žŒûIvüàˆûŠ|‰‚‰†Š‰‰Š‰‡Œ‡‡”{¬¢‡™Ž’š¢ªøàƒ÷˜¯9÷;ž“–“—”—ŒŽŽ‰Ž‰‰¨p†Ž‡ˆ‰†‰ˆˆ‰|€„{Švû)€û3ˆj†m…o‡x†x…zz…†ƒ‡ŠŒ…bº?å÷‹•šžy t¦o™z…Š‡‰‡‰†k€†‡†‰ŒŠŠŒŠwº£Œqº|§‡–÷j›÷§÷­o®÷Y®Î¿i­
+ük÷)› ÷û~Šˆ‰€‡x‰ƒŠƒŠƒ™Ž–“ ™”¦v˜Šˆˆ‰Šˆn‰d†ZƒˆƒŠ…‡ŠˆŠ‡Š†ŠŠŠ‰‰ˆ„‰„…÷û#÷£mµŽŽŽŽŽž~¡{¢z”„†ˆˆ}ˆ}‰}„Š‰ˆ‡Œ‰ŠŒŠ„•…–…˜ŠŽˆ‡‘Eyf‡‰€ˆ|†x‚‰Œv€•Ž•”•“–˜™ž”—‘™ “œ™”Ž”{“{”|~…~~}÷̳÷·ÛÅd°÷Lµ
+D‚Y‚pƒ|–|–}–‰ŒŠŠ“­Èã‘¡‰œˆš‡š„™ŽŽÓJ…‰ˆ€‰ztK÷¢ªŒ¨Ž¦ŠŽŠ¤ºŠ‰˜†Ÿ—”ÏCˆ‡ˆˆˆˆ~|…xtŠvŠuv²ª¢Ÿž’¹mŽ‰ˆ‡Š‡‰‰†Š‚‰v‰lˆûð|üÜ‘Á‘§¢‘‘¼hŽˆŒ‰Œ‰†Š‡ˆƒT‰û`€,…V‡‰G‡9ƒ+n‡l„j^«ˆ‰ŠŽ‘Š‘Ž—÷¤÷û÷zžè™øû‹t!ؒÕ¬˜µpŽ‰Œ‰Œ‰†Šˆˆ„û\t2º±¦¢Ÿš’³lŽˆŒ‰Œ‰Š†‰‰†Š€G…ûû°ü7“‘ªœ« ¬¢Ⱦ·±¤¥¤¥™¤¢ŒŒŒª4x„}…ƒ†F[fqlvr|r{l{h{ƒˆ„‡„‡øQ÷‰–šÇf®u½jÌ^˜‚‘†ŒˆŒŠ‹ŠŒ‰‚Šq‰b‡‰‰‰ˆ‡Œ‡Ž†‘x¡tªk­d¯U»|™yšwšøŠª÷¹¸k™±÷²÷³
+ûxŽŽ›xsžp™y–{”}€v„€†€†€€†‡†ˆ†ˆŽ’‰ˆ ƒ±~µz¸÷d½è™÷i™÷¤÷H÷¤•¯“·’À¨Žª¬ŽªŒ¦¢Š›‰›†šŽÈ[€{…€‰„ˆ‚ˆw‰l|û†n„h‚d÷™ߖ–¥˜€€œŽˆ‰ˆ†Šˆˆ…|Šû€ûkxv^vfwpwrnnelQ^Ca4d‚ˆ„‰„ˆ…™ŒŽœ•«œÈ¬¿­´¬ÎÁ¼ÆªÌûetr‰uˆx‡Šv‡l‚‰Œv›}–…‘ŒŽ‘Œ÷S÷掎¢‚˜…‰²y–†—…—„–†‘‚Š‹~|‚Š‰††ˆŒ‰‰}œp¦c°•„‘ˆŽ„„…÷bü6ŽŸ‚©}²yÖd²x¨{Ÿ~š‚“…‡ŒŠŒ‰Œu`„Šˆˆ‡ŠŒ‹‹Š†Ž…‚”û
+êMº\¬lŸ#ùUŽŽŒ‰¬sÎ\–„‘„‚‰‡Š†Š…†€‡z‡v…ˆˆˆ‡†Œˆ…™‡”‚œ}£cÉ÷Ùû“˜“˜’–ŽŽŽˆˆˆ¬m†Žˆˆˆ†‡ˆ‡ˆx€||zxrxnzjˆ„‡…‡……††½÷ûŒoû|û'y€^kƒyp|~‡‡ˆŽ‘‰ˆ–„ ‡—†“Ž“•“–—–›•ž”Ž“Ž”Ž–¦´™sŒ~Œ~³û…Œ°€›‡Ÿ„¢µy˜†‘ƒ€Š|Š|}„Š‰ˆ‡ˆŒ†‚”t¡q nžm x—‚&÷á¹ø$wªv÷ܼf­
+vi…w…„…†‡‡‰‡Š†ˆ‰s ˆŽ‰Ž‰ŒŽ•ŽŒŒ˜Ž™’™—ž™™™Ã½û}.}uˆw‡z„€”€“€”ˆŽˆŽ‰ŽŒŒÒ‘Ó•ê–÷
+—÷ûùŽÐqjÙ³zˆ‰ˆŒƒŒ„Œ„U€‰‰†ˆŒ‰ŠŒŠ…‘vŸn¦f¬wšf¤T®÷µ÷àv÷¿±n­µ²÷=®±­
+÷Y¬ª§©¡§¬· »•¾–À‘½ºžˆš„˜ŽŽŽŽ½Z…†ˆ†Š…ˆ†Š……‰…‡r…^€DyRrbˆˆ‰ˆŠ‡{uyvwxsxy|âk¯²´¢„£‡¤ˆˆœžŠ ®ŒÂŒ…Œ…„ûKY„X£-´ü÷:e8]?VD‡ˆˆ‡ˆ‡†‡†øø÷¡wŽ‰ˆ‡Šˆ‰‰†Šwb‡ƒLD‚Š…‹…„xˆˆ‚‡‰Œ„…‘…”€œ…•˜ŽššõŒ²ŠÀˆÐˆ­†³ƒºŒŒ²B÷9 •”‘”ŒŽŒŽŠ‰úŒ”‚•‚–‚Ž‰Œ‰‰ŠˆŠˆ‰‰|zƒvˆqû\¡ñŒŽ6§ Ž™Ž˜˜™‘–€––€ˆ‰‰‰‰ûzòŒ6÷!Ÿœ÷Y÷Žq“„“ƒ’ƒ‚„ƒz‚rˆ†zƒt÷›Ž’‘‘ŽŽŽŠŽŠ‰•‚•‚–ŽˆŠ†……‚„†~ˆz‰†…?û)Q††n„ˆ‡•‡‚˜„™„™Ž‘“ ™‘”Œ—Œ™”÷Wøœû_o‰û[øÌmŠn‰pzˆ‡‚…‡Œ‡†“„˜„š„œ‰Œ–Ž˜Žšøœ÷Bø¬Šªˆ±‡¸ŒŒøÌ“v“w”wÊ”™Ž—–”±œŽ››‚Š„‹„Šøœa†vˆŠwˆ|‰ˆø̈‰Œ‰Œw›”ŒŒŒŒŒŒ›©ªÆ‘ã“Ê”³”š“¦u˜Œ‰‡Šˆ‰…M„}ûügŒŠŒ‹Š÷>“†’…‘…ˆŒ…ƒˆxŠyŠy„Š‰ˆ‡ˆˆ“ˆ‰šv§ƒ”„“„“„–p§\ºŽŽŽŽ÷šš÷`vøm²Í÷8ˆ‘ˆŠÝ°Þ¸ßÀ¾¬À´Â¼U­m…w•{’~Š‹Ç”Ž}Ÿz®x¸rÂÀ·À¬¾Z„c…k…7xj¤gbiglmlmgldl€™×ÐÊѼѥ±Ÿ­™©”  ŒŸŽŒŒÃHu{vvxrbV”ŽØ–÷'Ÿœ¤•˜ŠŽ‰Žˆ°kŠˆ‡Š‡ˆˆ…ˆ}„}}}xrjsntrƒƒƒ‚ƒed÷?¼p«z™…¾wÌÚ‡‡‹†Œ…û@nûäû&ìhljqlujtgtcs>`@gApÛû˜ˆˆˆËº½³®­§§Ÿ¢˜œ•›“›‘šŽŒŒŒ¨E‚ˆ‚‡ƒ†„‡‚„~€ruiqbmeofshx÷Ý÷ш҉¥…¤€¢ŽŽŽŽŽÏYx…xx`¡¢Ž¢Ž¯’­”«—˜€™™€Ž‰‰Œˆ‡Š‡‰ƒ$€'~û ŠzŠz‰zˆ‰ˆ‚‚‡ˆ‡‰†Œ‰ŠWÁ‚”o£\²Žã`†”’‰ŽŠŽ‘—ŸŒš÷Wû
+{q†t…x…g§‰Ž‰‰ŽŒ“•–Œ—”ŽÈ’÷—Ú6ŽŽÔh­{ñX•„‘„Ž‚’Iƒ‰‡‡†Œ…‘‚—t¥n¦g¦bª`©^©ù;v÷NÄb¶÷¼g±÷ðº
+‡‰rfü ‰ûˆ=‰p‰u‰zj…„zƒŒ‰ŠŒŠ~šo§b²HÈŽŽŽÝZ€–…“Œ‘Œ˜ž¸ÓŒø«ûÔl(ü~ŠbŠb‰bˆ^‰sŠˆŠŠƒŠ„‚Šˆ†‡ˆŠˆ‡•|®¦…Ÿ‘•œ‘®À÷ÑŽ÷:™®‰¯‡°ŽŽ÷«ûN²q‡ˆ‰Š†ˆ‰„ŠzŠ{‰|‰qˆq‡r‡b…h„n‚€“’’ˆŽ‰Š‘™Ž¦Œ””Œ•Œ÷¡–Ž™œ“û(üJx‰†ˆ‡‘—…y­‡’ˆ‘‰‘”¦Œ÷Š–ˆª‡¼ŽŸX÷’”‘’’’ŽŽŽ‡•‚•–Ž‡ˆ‰Šˆˆˆ…†€‚„}‰y~(–‘„Ž‡‰Š‰ŠŠŠZ‡ƒ3«é—˜÷û}÷.¯­«÷­ÃÜv÷¶¯Ã«÷!ºk­÷+¯
+†‘ˆˆª¤¥   ž¡¢ ¤ž¦™¢“ŸŒŽ‹’w“w”x†ƒ†„‡‚„‚}~vxwzx|)÷Ó—“ÍI’…‰Š‡‰…‡ƒ…}…„†‡‡‰ˆŒˆŽ‰‘vÈ…™Ÿ}¥½÷lŽŽŽŽ˜—€˜–€–€—€“ƒ…‡ŠŠŠ…ˆ„€†€ˆ‚ˆ‡‡‡ˆ‰ˆ‘Š‘Š‘‚©y±p¸÷ þN‡‘ˆ‘‰‘ε»®©¦±¯§¯œ¯¬–¯°ŽŒ¡Œ¥¦Œ£ŸŠ¢‹Š—‰˜ˆ›‡œŽŽÂW|†zŠwˆTˆ_‡k‡q…p‚pvMbTNZotryu}t|s}q}÷¯÷mŽ÷ ?—‚—‚˜‚ˆ‡‘†“…ƒŠ†Š……ˆƒŠ‚ˆˆ‡ˆ‡Šˆ‰‡’ˆˆhºUÁCÈ÷[½õ¶Ðw÷§°÷Ѳ¾êŽŽ£ªŸ¦›¢œ¢ž§žª¸Õ¬ÌžÄvˆz‰}ˆ€Šm†\~””~“ˆŒŠŠŽŒšžŽŒŒÅ‘›Ž››÷®‰¨‡¡ˆ˜‡›„ŸŽŽŽÔK‚~†‰„xˆwvûº®’¢•±nžŒŸŒž¢Ž¨­Ô–¥Ç½–²–°®Œ¬Œ‹¾B~„„ˆ‡†ƒ…†„}ntZƒ}„}…}í› ‘œ˜´mŽˆ‰‰ˆ‰‰†Šˆlˆ…Pûzû Å”¸”ª–³m‰Œ‰‰Š‡‰‰‡ŠƒŒR…"}û§§Ž§ŽÊ’¹•¦—š€š€™‰ˆ‡†‰‰‡aŠz‰jˆZ‡tˆb‡P„û‡ŠpŠqq‰{‰‰†ŠŠ‰Š‰ˆŒˆ†•u´€¢ŠŽŽ–ŽšŒžŒœŒœš÷34„K€b}]©ˆŒŠŒŽŽ¥Ù”÷™÷f†k„pƒv†~””~”ˆŠŠŽŒŒŒ¡Ž¶ã—÷ ‚Š[‚2|^©ûyJ•†•…–… €¡€ šƒ‘€‰}aƒŠˆ‡…††‘—…‰Ž€˜x¡yŸxžxüSˆtŠtŠu‚‰‚‡ƒ‰Š‰Š‰ˆ†‘—…t´€¢ŠŽŽŽ“”šžŽ¡Œœ—÷Ü}t}u}w|tyrvpxq{v}|||zxwv……†…†…‡‡ŽˆŽø^ùè.˜‘‚…Š†Š‡Š‡†‡‡~~††……Š‰Œ‰Œ‚¢¨|¯¢z©v¯ŽŽŽû"Û¾w÷?¸„©÷Ž¯÷¯ò²iµ
+KŽ‘—÷†ž‰‡šû}Š‹€„‹†Š†„‰‰ˆˆˆŒ†…–z¦ƒšˆ‘Œ朎™•ꊉ¾‡ìŠº…´¬™‘®S÷ ˜šŽšŽ™‘¥Ž¢Ÿ–‰”‡’û‘p‰8ˆB‡L†P…QƒPL|TxZz^zg{oxl|s~z|ò††Ž†Ž÷Öø‰÷—Ç’·•¦—«t›Œ‰‡ˆ‰…Šû¯kæ/÷ºª¦÷qûÜhû]ü­‘‘’Ž®¥§¡ ŸžžœŸꤪ›§‘¤Œ‹¨B|…€…ƒ…€ƒz}tx+Hx‚wv}ˆˆ‰øV÷_‘ŽÊmÃo¾qˆˆ‘ˆœ“Œ€Œzyz„€‰‰…ˆ‰Œˆ{œnª{›wtŸn¤g¦`¦¡vøƒ÷ö–|–}–|ˆˆ‡‰‡‰{€€„€> ûû7ø&±[Ý|¢v§r¬ŽŽŽ÷
+ûÏ;—z’€„Š‡„q}Z…ˆ‡ˆ‡‡ˆŽ‘‰‰ŠŠ€¬{®w±ûÙ\m†r†x‡q‚x„‡[±†‰ŽŒ’˜˜—’–•––œŸ ¨¥±Ÿ©™¡Ø÷œ®•ŸŒ‘ûMwzŠ~‰€‰ƒq…^W«…“ŠŽ•Õ‘÷Æ¥÷T³ª ŸŸ‘Ÿ“¼i‰ˆ‡†Œˆˆ…xŠû€û‡v÷f÷ÔÀn‰ˆŒ‡Š†ˆ‰…Šˆt‰jˆû®p\‡fƒpX¬†ŽˆŽŒŽ’Œ”•Œ–בՒžŽŸŒŸŒ¯Ž¬Ž©¦Ž ŽšŽžŸ‘ž“÷a¼Ô¡÷Åw÷‡Åa¶f²ø´
+Æa¶
+¢Ÿ‘›‘µjŽ‰Œ‰‰‡Š‰‰†0‚X…‰©Z„„‰‡†‚‡…‡‡ˆ„‰‡‰ˆ‡‚‡‚‡rbyir¸b­l¤t›{™~’}|ŠŠˆw‰ˆŠ‡Š‡†Šˆˆ‡ˆŒ‰ŒŠ‰‰Ž‰Ž[Û^È`´h]`_ZbSazz€z÷.ùt‡‡†±kžzœ{›{”‚‚‚Š‰Š†‰ƒˆ†Š…Š…‚tˆ‡ˆ‡‰‡‡‰ˆ‰‡ˆ‰‰‰ŠŠ‚¨}«y®¡}¢{¢ŽŽŽŽû‰ü2‡[…g†t†(†Œu…d~––•ŒŽŒŒŒ““‹”Xœ÷È””’–’•’•ŽŽŽŠŠ‰ªoŽˆˆŒ‡ˆ‡†‚…€†‚}zp‚|‡‚ysŠˆŠŠŠˆ‘…—€žw”wxŠt{elV®‡¤‡š‡ãtèsÞxÕ}·„µˆ²Š¯Œ®¬”•Œ–ŒšŒ‡Œ†…DnVvj}}„†q”\š‚:¤û-¶?£P™`Žvz~wŒw‰x‡ˆ„Šy‡p„~˜—~—ˆŒŠH•˜ºŒæŠ”’™––¦‘£žŠ¥¡wˆŽ‰Ž‰ŽŠ–•žCø"ŽŽŽŽŽ€œ”†Œ¸m«už}˜‘‚‚Š†‹‡Š‡fˆ‡Š‡Š‡Šˆ‰ŠˆŠˆŒ‰Œ‰‰‰Ž‰Žy¬u¬q¬š{x ûø˜¯÷År­÷¾±
+÷%š“““ŽŒŒŒŒŠ‰’‡¬uŽ‰Žˆ‡ˆ†ˆˆ‰‰„……‰…‡|‰ðŠv†ûƒû”Ü’Ä”ª—¼g‰‰ˆ†Œ‡‰ƒûHƒüLma‡pˆ‰‰~ˆ}††|•ršˆˆŽ‰ŒŽŒŒŒ•÷’ø÷
+š¹‘©’™“°pŽˆŽˆˆŒˆ„ˆ}‰~Š‹ŠûXxŒ6ò—¼’«‘™‘§xšˆˆ‰‰‡ŠŠ‚‹ƒŠu‰j‡û%{Œ8õ—À’®“œ“«s‰Žˆ‡ˆ‰‰‡Šk‰ûjtŒ'÷Ÿèšø[û²nSºÃ¨÷³÷|w÷o²÷Ä´í²v²
+—÷Qûz[Æ÷F¸“À÷TÁøsl÷û|;{]°ˆŽŽ“¸Ž–ŽÍ‘÷ •÷Zû7z*|j¦z˜ŠŒŒŒ¥¾Ú‘÷[ŸÕ•à›¢¡‘ ‘š€š€™†‡Ž‡Œ‡†‰ŠxŠzŠ{‰†Z‡Bƒ+û[ߔ̗¸™¾dˆˆ‰‡ˆ‰„û„û€‰ûºŽµ¯Ž­Ž©Ž¤Ž¶‘³’®”¾aˆŽ‡‡‡Š‡‰‚1‰X‰~‰ûlû…‰û„1J~tž{™•“Œ¤£Œ£ã÷•µù´î)˜’‚…Š‡Š‡‰‡vX††…‡Œ‰ŠŒŠ†•€¤†›Š“_韄™ˆ“/½øŠ¸éøFŽŽœ€¨}´y‚ˆ‰ˆ’†ˆˆŒƒŒ„…‰{Š{Š{…Œ‰ˆ‡†‰Š†Žˆˆn¯e³\¸üH“šãS™“¢È÷Všµ˜µ—´®÷
+Ñ ‹Á ÅŒ’Œ ú|ù¢
+endstream
+endobj
+304 0 obj
+<</Length 643>>
+stream
+€
+
+endstream
+endobj
+306 0 obj
+<</Subtype/CIDFontType0C/Length 6617>>
+stream
+
+Open Font under Terms of following Free Software Licenses:
+GPL (General Public License) with font-exception and OFL (Open Font License).
+Created with FontForge (http://fontforge.sf.net)
+Sept 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,2012Linux Libertine O SemiboldLinux Libertine O
+îIéû q‹T‡x‡‘¿®¾¦ˆÏ‰¯‹©‹©¾šÐx•N„^ˆY‹h‹b[hû½È¥¬“µ‹½ºP(÷4Š­÷dºøw÷‘÷´yŠŽ”á÷jÞûvû“ûeÄ÷(‘˜ŒŸ‹÷L‹Éû<ˆ‹…‹†|ƒ€zpyƒ‰ƒ‹x“†‹÷
+ø›Ÿ§•‹–‹’ˆŽx‹~‹x‰lˆûù¸\‹Ž•fŽ‡UCƒb²†ءк֋÷k‹‚~„üü±…ƒ‰ƒ‹„†™LÂ÷ý±¯ô.è÷!÷
+€
+€
+eŽ‰‹‰‰‹Š‡^V€[•‡œŠ—‹۴¥Í‹¼°•eNü‹8z†;ˆ……‹u‘…¼Œÿ
+€vŸ ‘
+¡ŽŽŽŽ ÷ ÷’• Œ 
+endstream
+endobj
+308 0 obj
+<</Length 262>>
+stream
+€>
+endstream
+endobj
+310 0 obj
+<</Subtype/CIDFontType0C/Length 5475>>
+stream
+
+]
+Í  h ü D Œ 2 Q ÇSâTç£Wø¡è÷A‹ÈóÈø!wøŽ¬§q‹q”ø£®y‹psv‹j{û“ü¥zp‹ˆ†y„Št‹o§‹šñ›§‹¬§q‹s½ó÷6‰#|q‹‰†~†…}o¥‹›ñœ¦‹¬û ÷Uû÷$÷ÎŒŠ…È÷ÕÈ÷Ïø³÷$Š£ioˆmƒx‡|SwwŠ¢‘“““Ì÷™š‹ŽŸ{˜zw{‚ˆ¯kjxû
+v÷÷÷j÷!÷÷»ÄeŸm]pblvšk³‹ŒŽoW_wnƒ…‰x…vƒ”t¢¸÷Üõ…È÷ÕÈ÷È÷Ïø½÷$Š£ioˆmƒx‡|SwwŠ¢‘“““÷ø^Œ‘‘§o‹~:|p‹jo§‹˜·eû-¯kjxû
+« _ø3¥xšupurtx™u§ ¦©…ÈøƒÈ÷ÖÐKмê ø½÷$Š£ip‡}y†|‡xEf‚u©ØœŠ¦ËX§W™—•ËÎÁÁ§œŒzŠŠˆˆ~‚}ysž{¡½Æ¤¸v­]^ZrIM]Xtxu×÷ÂŒ‘‘§o‹~.~n‹jo§‹˜Äûü‹‡}‹‰‡w›~œ˜—¡‘³÷4¬‰âƒ\ {†ŠsM½i¼í­÷—…ÈøƒÈ÷mÐøs÷$Š£ir†}‡v…wE`…ZŽ­‹Œ™÷øZŒ‘‘§o‹~û~n‹jo§‹˜æ üA‡{‹ƒ…EÒp¿ñ°÷›…ø
+|a…y†|v\©i¸è°÷›€È÷9É÷°È÷+Ð÷¬ÏøÌøJ÷@º<ûûûûU°%÷ÐÄ«ž¥û a#(*s‹˜x’‘”’¢¡}plwsd4÷‹ŸêâÈÔÅî÷“÷,±G4?<"/„Ü™ñïâèÕ˜FZ…È÷ÕÈ÷Ð÷…Ïø÷¦õIÄ@û û
+û!û.ÄEß÷÷ ÷÷&Gû0û?Xt»¿÷ç÷ÖžR`‹Èø ÇóžøW¬§p‹~8÷ø•Œ‘‘ˆ£o|…ƒƒG+T‡o‰x‰ƒy~‘{¦™´Ž®½$ü1+|p‹jo¦‹˜÷š¥‹¬ûrÈ÷/È÷ÕÈ–Ð÷úÐø÷°ã\ÌD\doro¾t^~aroq}xk}V€ƒw©¨—§“¢‘˜Á ŸŒr†ˆ‰Š‡ûü|g~n‹jo§‹˜÷+š¦‹¬§p‹~^»÷W‰Œ«e¿÷
+¼÷È÷ò9Òûû2/û X}“}¥–›‹ ’÷±ò¡³ÎÄcC2=aûRQr^tPM^ZrF{yª–š‹ “«–¢‹”ª¯}¦{²²~´÷Ì÷!­…ÈøwëÄ‹Ä÷ÑÉØø¤ö˜­»÷3Л‹¿dyy{w„…‡”y‹v†\hû†{JvtbfY„±¥¡’¨‘ –¹‹–µœÎ”­Ž™™{t†v‚‰Yû^w†lûTM‹½œª’ ’¥Ô–©‘œ«àLƒlŠj‹ˆŒu¦ˆ“Š•Šnw‡€n‚sƒu…x ƒxi`%×uµ¯©›³¥Z¦¼„¢Ì®ÃÄ¢…È÷ÕÈÜè÷±çø½÷$Š£iq‡~}†Qx[kgkx¢­˜”¯‘£¦÷
+To ‹ È
+Ð ¸šŒŒŒŒŒŒ–“ ÃŒŒŒŒŽŒœ’ ø¡ö
+endstream
+endobj
+312 0 obj
+<</Length 16>>
+stream
+€
+endstream
+endobj
+314 0 obj
+<</Subtype/CIDFontType0C/Length 2364>>
+stream
+
+Open Font under Terms of following Free Software Licenses:
+GPL (General Public License) with font-exception and OFL (Open Font License).
+Created with FontForge (http://fontforge.sf.net)
+Sept 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,2012Linux Biolinum O BoldLinux Biolinum O
+šÿÿÓ€‹ÿÿ³3‹)Tb^‹P‹m¡jÆiŠv<Ž†´hÃê‹b²÷²½÷`´·÷÷A÷÷?÷µÿ
+að÷0Åÿ
+Ä÷>Ä÷.÷÷¤}Ÿ|‡y‡l‹û)‹ûa‘|Žs‹|‹|ˆ_‰|÷’÷“Æ‹b³ø°³´÷-÷ ÷ ÷
+)÷À÷™øÎà[]‹UhorwnœÿÿÖ™šÿ
+µ&û0Qÿÿ‚€
+‹ø¿—øA˜•÷•®˜©•û‚–
+–%ÿ ‘
+½ ÷ ÷ Œ 
+endstream
+endobj
+316 0 obj
+<</Length 4>>
+stream
+€
+endstream
+endobj
+318 0 obj
+<</Subtype/CIDFontType0C/Length 58291>>
+stream
+
+-L/0°2¾4|6+8r:‚:ó;Þ=y?^@AlB^CyE@F•H8IúJzKULKMOO¯PðQÇRBSUVÔWUWÂXBY›ZŸ\
+]²_N` ac dReÛgµi(kmnôqr÷t´vkxjzL}@~Þ€²±‚¶„#…™†x‡Yˆ©‰ü‹*Œ8‰ŽÛ]’W”!–(—È™›Þž š¢j£¤‹¥k§¨ñª¸¬ÿ­Ø¯d°ì²x´ŽµÜ·ª¸®º”¼a½D¿QÁìà ÅÆËÉjÊ¢ËÖÍ­ÎÞÑMÓšÕ ×fÙ“ÙÃÙüÚ2 û ½ùïæY½ï½ùP½¸ïû ù´ú|ý´ø$ü_ûÒø-ùû²üVØ÷Òø-ýÆý0b÷Òø-÷Òü-ý0ùï÷Òü-ûÒü-@ß…šù>§øqΠ°ù³ùlý”oø4ý/y„…uoû!”‹p|Ç„¬‚ ~°›”yŽv÷•™³Áù3ø™••Že­Mº‹ùc©øOÎù½ùý””møý¯—«¢›’ø½öO÷)Â:êd÷Rü%÷÷Zø<›”–Že­Nº‹÷Å©÷œ¨÷?­öÌ÷·Î÷·ÏÜø¦÷ã÷œ÷·ûœý÷œ÷·ûœø÷ãeaû­÷?¥“•™$—ûgû°C­üW•§¦š’Ó÷·ü˜¤¨œ•÷ø÷·8–¡­š‘Œ÷럛“‘“AÞ…›÷á§÷ô¨÷€ÍIÐIÍø=̳3ø-ù#À[Ë9˜IÔSÂ÷9û‹êû û¯¥‹¥¤÷§ø=ûô÷ W÷éš’‘“;Èjcü(=¬ûæq‹r‰rûa“o5÷Xû1cû#ûû ™¹÷;÷¸÷4—÷1ø@ûÒy…„urû•‹s{Á„¨ž€³›€“zŽvó•–¯Á÷Ú÷4™•–lªS¹‹_̓“ë«ø/—ˆ¨­ú0ˆ¬÷óùп]Æ;–KÔUÀ÷8ûãûýM´÷ƒð÷j÷4÷÷5¥••”¬BÏZaý.”nùûû-ûfû7ûX#…s'._OÇ>’’“‡“«»ÀСª•™”™|û çêj÷S÷µl¨›¢ª‘¬˜…û0ŒûûLûë1ùƒ¬÷CÌøµÒD÷
+ÃôëÂÛ£ˆ”•(¼b12û
+*Cø*÷—ØJñûª7âV²÷NûÙ÷ûC÷ú÷WûžûW÷å>÷ž÷3™•–lªXµ‹\PS÷Z£”•Ž™&–ûûW÷[¤“•Ž™'–û‚û"“m÷ûžû:“nù+˜•–lªVµ‹?܃šø4¨ì¨÷ ¨÷ Ê÷¤÷Ì÷¥÷Ë¿À¿À÷áø=¤Ž’’”MºsiO‘nÌo!\ûXU”°¸Ñ¢Ô™B¬D±g‘§™¥“•H¶aÓ~îøsûiDµ\Ô}í¢£Ž’“”L»shInÓo|"XûTU“Ç°½Ð¥Ö›A°C·h‘¦˜¤“‰øÑý‰”nø(û û§E­ýK•¨£›“øô÷®ý•¬¡›øì÷°ü¤|‡…xw)’‹À|¶…£‚š€¿À™‚zŽvç•”«¿øŸ Ž›”’“8Êhbû¦÷ ø#™•–h¬P·‹ëმ÷2˜”˜÷›«¬©™“÷ ÊðÇÃÉîÉM÷|KËÀË…äì÷ ù‹üx‡…o}¬G‘Ž“‘”íµç¶Ë¨xû&@ûûg>”{÷»àÍ÷2÷Y÷¯£“”Ž™*•ûÔvŠv‰x<s?tPzŸìø^ï›÷¦Ñ¡¤ƒ‹“•6ÑYm4a8l•û+«W®:‰LÃRÍ÷ûB÷ ø={½ì³V±4…G½ÔÇOÑ÷-ûP÷÷[÷bibìû\@²ý핪 œù’÷sü|‡…xv'“‹]ì{¸…£‚™ì™xŽu蔕®ÁøŸ›“‘“øO§÷+¨÷+«÷õÓNÖÀèùPøOl*\3K?@ÏRâiõ÷òÒ_`ûÅ—½”¾’½ø™––g¬R·‹XLðü葾¾¼«“”šû ‘‰NˆL…MûÀ”n÷´nû—:û”û]û;˜÷I÷ ê÷E¿÷Pªû»1ËB97!EûZ”|÷&µ÷ÉãØä5÷ P÷"d–¬£ž©–û'¨û¾'ØÚÝÃì²ö¡–Ž““Š¨÷‡¨ø¨÷ÕÍø<Íøø§÷‡ø<û‡¦÷Íebü÷Eë÷÷è÷$¦–“”AÔZ_ûÑ ¨ §œ§¥ˆ“–#¬Bû-û%ûIû &—~ã¼âÓÖض^¾K˜WÍ[½÷ûc桤¡£Ÿ¤÷äûûnû–ûJûÅ&”zî¤æ¬ß°ûä—«¡‘Âø<A•¢«œ‘Œ÷É ›”‘“œ¨÷œ©÷'¨÷~©êËì̾Ê÷ËÆÌëËû@€ù@ù‚û~ûÿ÷~û›÷ÿC• ¬š’Œ÷ÁŸ›“‘“:ÉgcûðEªü%•§¦š‘û6ü÷œ÷iûœ÷ºûZFªüO–¥¦›‘Î÷iD“¡«œŒ÷Þ š“‘“;È÷xûá÷œ÷pûœ¥÷ágdûaFªüR–¦¥š’Ñ÷p=•Ÿ¬š’Œ÷埜“‘“c©÷©÷?û!÷LûH÷Hû1ÿ
+™”–Žh¬Sµ‹ø•©n¨÷‘ÿ
+ü6µ‚’«Àm©Ñ¨Ï¨Ï©¸©³ÿ
+Nû “n÷FA‚L…eˆ 
+µF•Ž“‘—½•ü–¤§™‘™÷GaûYû v‘y÷”÷ªß­¢ƒœŒ‘”DÂ÷æDHEub‘ZRŽ‡z÷rìgÄhÍcåíû©´Œ¡ªš’Œ÷µ›˜’’CÂihüTG©÷
+¤â É›ˆœû%zÉ÷
+”¥§š’ûZ{[z]|~÷J÷™•–Žo¨[³‹bTj÷R¤Ž••™(–ûxû*’m÷#û^DtQyj„«5•Ž”–—²¯­œû¿|††zx4’‹z²†¢„—^˜‚yŽwᔕ«Á÷äÅ©¼¦´ ÷°û‰÷f˜•–Žk©W´‹]P!÷&÷…™••k©X³‹]SüT’n÷ƒûçSŸc³lØ–«•®’±¡Œ••Ž—(}û;Oû0:—~Ú·ÇϲëO^û-ÀÝh÷÷G/^Œ¤–Ÿ¡O^˜ŠVû
+§÷g¨÷1­ødÎÀú1ø
+™––g¬Q·‹WKû§÷g÷Æš”•Žf¬U¶‹XMûS÷1¤“•™%—ûYûYœ­›°˜°¢–“˜$©kûSûN4š‚¾¸»É²Ó÷hûgü2“o÷ò<û'ûû'û2*•|÷Eá÷(÷ê÷'ü*˜¥§œ•ø=ŽÚûG÷!û!÷*?•«£ž¥Ž–û.Ãû:÷1÷'…¨÷…¨÷î¨÷ÿ
+ûJâÕÀ÷£!<T=XiwÂE“‘˜–½Áµ»«°‰ûSUûû:+—}÷bêÊ÷#Œ÷_øG¤“•™,–ø1ýS‚_€T…„†‡‰„Šƒv‹qWo‡’ ÷Öº]¼M›XÐ\¶÷#ûtæèÅ·ÈÁ«®Ÿ…™’”6Áve`GbTåÀ÷¦¤”–Œ˜+—ýÀ\›wËÌ÷©•¦˜…‘u“÷x©Ì¨®ÿ
+÷xo-4û=7û*_’y÷"ª÷.È÷Î+—¢§š‘ç÷`÷
+M¿_‘‰ŠŒd\ú û±®¤”•Ž™%–Aü2”nø)Jû{Eªûr”¤¨˜‘÷"÷‚x/"ûD-û2Y‘z÷*­÷4Ð÷ÙûZ—¤§™“÷lá$÷#@÷%e’¨¡ž¤Œ—û1£ûJÎ1ç÷÷m©ð¨÷©Þ©÷,ÿ
+™~Î×¾à±êüt™¡¦›•ø˜§j¨\•eÅ_Á÷ûGÎøRláUÔC¬[ÆlÃ÷
+û¸æü ûiã³ÜҺĥ––8±kK;,BYø?“pSfX\^_­f´r»’•“”’•÷ƒÎbeûD—œ–œ”š£‰“•-¨f+?û<K—¿ª½µ¶º¢V©_¯d<J$Xûh“z÷¨÷
+÷xkr`|t™…¬¢Å¸ª¥ŸŒ•Œ’’EÐddû“˜…¡pž·¡Ã©« Œ—Œ‘’CÒ`cûç”m÷Ñxvqrxwm›]—IŽƒ~ºwËh¯lûÙ”n÷iQP9S3a”z÷°ò¾ÔÍ?+Ïü'&ûð÷“÷lüK©üƒ•£¤™‘ø3?*˜÷†S{TCZ?+™|Ÿ”•š•ûi”¤šŽ¤÷o“œ¥—‘÷šŽ—‘‘M»?*˜nmûY¡»²›»’»+(Õ>l‘~³¨Ë’ž—ƒzŠ‡…Šˆ‚zxƒˆŽ”ËŒöûè}†…zw2’‹{³†¢ƒ™‚¿+˜ƒŽ{Ž{ß“–¨º÷㟎›”‘“:Ç_©÷h¨÷ ¨à¨Æ¨s©¾’Û“„©©­÷KÈó“ÆȶË÷KÇð*€€ö¾ø°ù{xž~ZyYs]Ž§p¸/ ƒ¨s®]”fš€šŒ•“lQ`VYb–~÷ÙÖ÷±÷¡Œ”’“FÉddûO”m÷
+ü˜÷ ÷¶û ”PŸ©—’Œ÷;Ÿœ“‘“=Æhfû§I¨û”¤¦˜Ÿ÷¶mûÀ~¢c¦NŽZÄVÐ÷û;á÷N÷òûI“n÷˜™”–Žo¦_°‹‡püa˜÷™•–n©Z³‹aSv÷[¥“”Žš)—ûƒû“m÷sû(aû)Fû šÄÒ·Û­âüf˜¡¥š•ø‘¤c¥Y‘cÃ]Á÷û;èøÕü†û®¶¬½¡³ ‰—”—&§VvCuTûó“mø–kªZ²‹“ù6jhbdipy {¢}£®›µ£®£ ƒ”’”DÅpghbnpv¯z°~³z„¸ûKáû÷A’§Ÿ£Œ–K¤Pµ[À±›¼£¯£ž„”’“[©Î©Ö©Ö© Ñm©À©Î¨˜©‘¨Æ©×­÷DÇ÷4ÇyȨ¾Ä¸¦¿¦ÊyÉ÷mP
+ ö­P÷îùLø昖–ŽiªX´‹]Q!€ûG°—“Ûû¨€ƒ¦s¦_g‘‡ˆ‘‰û¿÷†û›ÎEP÷HŸ÷qqû T¤ûN“Ÿ¢—ž÷p“œ¥–’Œô–Ž”ûÜû6÷xø ûxp ^û @û´ÖûHÖ÷´@DÂ÷Ž§£™÷”ŸŽ–’’FÀkgûþD©ûù”H ˜–”ûÊ•ªŸ™¤÷´m–§£™ ÷nŸ•‘’’DÁlfû§H¨“ŽŽ „˜ø uüè÷ˆ÷
+—•–Žn¨\³‹aTr÷\¥“•Ž™*—û„û“m÷uû%bû%Hûš~Ãѵ۫áüg˜ ¥š”ø§cªT•bÃ^À÷ûFáøóüüŸ“møü™•–ŽjªX²‹_©÷+©Æ¨Ä©Å¨­¸ÿ
+ûYø)ûŠ‡r…n‡y›„£ª™¡˜Œ„…‚€—}ôÛ•÷
+Ü¿÷& ûlf’{¸«П˜¢™ƒy‘ˆŒ†‰…Š‡Š€yx€‰Ž•÷P˜’’EÈhgûE«ûÐlGˆAiFVÀhfûÚŠ•‰–ˆ–xftbp}zy“{•y¦˜ž˜›¦Ž±÷5û“n÷Ø”–Žr¤b©‹÷ûžanbmgr÷8šŽ˜’’H¾kkûD«û4}-,<—}÷!Öš÷ ݼ÷#ûN}‡…p|­L‘Ž“‘•ÏÌÌЪ« ÷¨÷mu6g>YFPÊ]Øpæ÷¬Ñ`bûÔn®£û´1ÃBPI@T-`”{ó¯Ý»ËÇ¿QË^×h•¨¡¦Ž•:¦C³O¾ÍÖ¸ã©ë¡•Ž““<Þ„›ø•¨÷‡ÿ
+”‹x{¿…¦‚œ¸›’zŽuð•–®ÂùÍûÚ÷ûA÷@û—«¢ §Ž•û
+Íû
+ì4÷)èÆéÙÃ↔Ž‘•`Æ÷3¡÷óÿ
+¢Ž—‘’”÷@©u¡÷Q©÷E§÷Âø)ͼ¼ø6ùв`¹C—TÐWÄ÷#ûhâûËr·mÁSœ]Õb²÷*ûo«/û†¶pÀY›`Ôc°÷%ûi¤÷¯ÛûBü.‹‹xgxƒ‡Š_|u ‰š‰˜ |‘=~&l–yž­ž¥µŒÜo¹·¤‘ª”¬˜»Þ÷·÷¼øzüaû>÷Q÷‚˜––ŽjªW´‹\Qû÷E÷žš”–k¨Vµ‹[Pû¼¾¾Ê«» ˜“–û¬wKi4lLûÖ“o÷„ûEû“m÷wûQû·“m÷¯û–¬¡›÷x÷ª˜”–ŽkªT¶‹;Úܨӡ÷¨÷X¨ñ©å–÷ Á÷‚Æ÷±Ï`ÉVÈÜ
+÷@¼Û˱ÚáZ÷ 7¸MÔo›÷ ûäȵÌ®®ž…š’”2ÀŠs\R7]Qs“s’o“¥ËŽÓŽÛŸ”•—(”‰û\û!û§(‘JÀV§:ZÀXÂ÷!ûYðœø4½W¥:œ[¿WÃ÷!ûRñûˆÄ¸nÂU]Õb²÷'ûr«9û~¶q»[›aÓc²÷#ûd¡÷¡•ûCû÷‹‹xjw†‹^u¡‰š‰˜¢|>}$j˜z« ¤·tŽÛp»‰¶£’©•§™·ß÷d¶÷ø{û£pbSBYXl¿xŀˌœ‹žŒ¡Ž””˜&•‰ûqŽû5ûÊû•y÷¤ÚÎ÷ž÷"ªû%Ðû ÷=B’­ –©–û·=ÅYÓʮһ¯©Ÿ„š’“BÚ‚”à©Í¡÷©÷Q¢ƒ¨÷#©¢ÿ
+ÛeîL·ZÙu÷û™Á³ ¶¦²¨Ÿƒ›“üsª¯u¶`—hÌeµ÷ûR¢ ÷l÷y¡Œ¢’÷Ù\î?³OÞkš÷6ûÏÒ¢÷™”–k©W³‹\Rû3ᥓ”Žš&–ûû˜“n÷kS/57$N”{÷ºêËÏÚû’L:ûûûK•÷¹÷ßàÔÓ?÷H÷i‘¥›œ§”Ž— žû(½?ǦŠ˜–ù¬­øQÑÝù Ê6ßû¢,ÙN¹÷Hû¬÷ZùW–_41û5,b÷x÷ƒ÷<œ£Ž”•š"—Šü/ û²ü=ûV–yø÷!Ò÷g›÷¨¬ûÅæû]÷˜û •°¥š®–û[×û÷L÷4öÛó÷ÇÙ¢‡“’•øÏÿ
+÷ à÷8Ä÷]¯L³5”IÍQÄ÷'û^÷(—¼—¿•ÂøVû"mMO+REpÜ~ë…÷ ¢Ž“–Ž—#–‰û»”ûoûùû.–z÷Ñ÷Î÷6œ÷\¤ûwÍû.÷R3”®Ÿ˜«Ž—û,Ã7ß[÷ØÃ×Ö¹Á£†”•øF©÷–Ø©øeÓM¯gÓCôð÷ù•Ö[º;¨UÐ` ÷;û}ÑùT=E<U[èl”j’d“ä§ÈÍÑâ¡Ž””˜ä"•‡ûYˆû(ü!•y÷’Â÷Ö¿ã÷8L÷BÇIÏT×÷ûäô˯ÓÀÇà„š‘‘”ýüØVº3¨RÑ[¤÷@ûƒàù£ðhUI8OL_ÀpÇ{Ï¥¥Œ§¡Ž•”˜!•‡ûtˆûGü/û•y÷óåä÷¦÷)³û5èû÷†=’²£™°Œ•û4´#ÂGÑÖºÙǺ¶¢†”Ž’”=ÙwœÜ÷ZDÒm©ï§ð¨÷.¨÷7¥žÌ£Î÷Çÿ
+ᤎ”–˜*–ûû
+Å©¼¥´ †šZz[{]{÷v÷–’Ž‘mPiWfb™€¦Æ·¿ÅµÓähû75û5ûû–~÷-÷ò÷4¼÷JÖlû…*ûrûMû4–~÷s÷+ö÷t·÷™Ì|ûÊlû€^c|‚‡tt:“‘ZŠx¶…»›š‚xw¼Š¶š©­Âǯ÷€™÷à¡Ž—“”÷ݨٖ÷K¨´ú+øùܲb»E–VÍXÄ÷"ûfÜø3ûQý™”nøY<û û1Qƒ†xˆ‹¶3’Ž’’‘–÷ š÷ßšûûû ûûH„q‡‹¸1“““’—÷«÷h«÷)££dœd“gâJ¾÷fûÜ÷;ƒ¹_ÁM³Mûwûmyû„÷W÷
+÷w÷G÷
+÷,˜”–Žm©X²‹_Tû“m÷"û
+û“m÷ûC‚P„gˆùGû§û+àPü4÷+øc÷:ýƒ”m÷›R ûû
+ûQÛ÷rû!õ÷#!úp÷&û#ð÷û&û.ðûõ÷.!û«û0÷ ÷p˜•–l¨Y³‹^Sû ò÷.i• ©™‘Œ÷¡š“‘’?Äifû%á÷‘š”–lªV²‹^Sû*åΓɕ½•¡žŒ•’?Ó%eûV^û3xy،ܑؓ8û““n÷‹5ûI©ü•¥¤™‘¤÷#$ûv“n÷nû ûµ“nøñ—•–Žk©Vµ‹“•÷©÷©÷©©—©÷2´„’÷PÈ÷>ÈN÷SÃÏÆPá÷ÈðÊøùh÷B÷[§õ ‚š‹“’BÏ,hûX^û2t÷öûc·°¸Å¬ÅŸŠ—’–1­tCkAn[û(÷C¨l¯V“bÆb»÷ û>Àû9h¨i®R“^`*Ä`Â÷ û@Ï÷‡ü÷÷ûtJûÙ÷÷ûû÷÷¥ûû÷÷Ùûû÷÷Yû¢÷—Ÿ›“’;Èkdû¹ Ž“”˜1•:ûÉÂI©„n¨a®‹bVQ÷c¶–´–«–¢‚Œ””<ÎKeûT&m‘{·‘»“¸•ûUû)“m÷pû\û!C ™}Èμׯßü#•¨¡š’øuªi®X–eÃbº÷ûHÓ»÷'–“Ž‘ûÐû
+“m÷û€–¥£›’÷i÷Ùû |‡†|x8‘‹{±† „˜€–{ŽxÞ””©½÷Ú™”–Žr©_¶‹—÷b™ã©÷©à¨Š©÷ ¬lÿ
+€øgø¦¤¯÷ðb—¡¤˜‘÷]¦””Œ™+•ûPû)Š
+÷4™“–Žp¨]±‹cVCֶ쥎”•™(•û¶+~×v÷h¢Ž“”˜.”û‘g‡m‰t‰÷¨ü
+ûI×÷ºûdØ`½C¬XÓc—÷;û€¾õ÷gm`UDfc”€ €º©Ñ¹°§ž†”’ü2÷{š­ž·›´÷idû ïûE
+û*÷~†šoœc–e@„C†Y‰äØë÷¾Ùž‡˜’’7Å~nxgscYŠY‹eŒÇÌÎì±Ðž‰—“”/¸u@Jû"VO…†y‡‹®5’Ž“‘‘”µ•µ–­•$
+ÁÛž‡™’“6Ä|luao`VŠY‹dŒÇÌÎì±Ðž‰—“”ø¨8üP“mø¬™”–Žl©Y³‹ûçû¿÷ ÷…û •LŸ©™Œ÷2š™’’EÀjjûxI¨û‘”£§š¤÷…i™
+
+í«øÃùÏ©a¬FŠVÅTÎ÷ûCêûMüû&•·’·¶÷÷6ûõ•û¸·¶÷ümû|óÉûJ÷|ùC3÷X÷8™––kªX³‹^RL÷B÷H™”–Žk¨Wµ‹^PF³ÀµË¦» Š˜“–(«yKn3qLû\‚õ™t£p¢‹eVˆ÷ ž›“’“;ÈhdûÁ”m÷ŠaŠ_ˆ]û6’mí¥÷-ˆ`…_ƒ_û ”nôt `û
+ÞçâËó¶÷¤ˆ•‘–XÈ÷µ©÷Oÿ
+÷’÷[÷÷ˆIûn“m÷¸™”–o¥a«‹ûÉüW¼¯ºÈ¬ÍŸ‰—”•8©u>f@f\©÷Â÷O«f±N‘ZÂZÃ÷ûDÝ–àû¬“n÷'û£”© ˜÷‘÷+™”–o¥`¬‹Ñɱ]µ@QÅWÆ÷ûQò÷–ôq÷£Ž•”™)–ûAûb“n÷ZHü|†‡yy+‘‹|µ…£ƒ™€˜€|vä•–ªÂø÷™“–Žr¨^´‹RÂ÷3ÿ
+¦Œ¢‘”˜‚È÷)™•–Žm¨\±‹aVN‚ÉŸ‘’•–-“˜*ûl’m÷i0ü°†FZOavxy“x4–x¬¤š°¤¼Îxõç÷NɞǪ½®¬}¨|§|RaFeFr”|ߞۮʹ·o­p¢t¾x Ëû
+Ñ£Ÿ¡Ÿœž¢†“‘”:µzornmqq˜k–e—›˜™˜–˜¢†“‘•:´}twssr^—V–P•†z»~¶|µ{ch]j\uø“÷Tû¼2ü¼÷¼ø¼ûÙe•¡«™’Œ÷ÝŸ›“‘“;ÉfcûÒ¢¦Ÿžœ¡ˆ™‘™$«~lv`{m4
+4 µ Æù\
+P
+,÷÷8™”–m¨[±‹_UH÷£••˜(–û-û8“n÷0ûûXä¬m¦h§‹ól^S<÷ ÷'™“–Žn§[°‹cWT÷£••™)–û-û2“n÷*û ûT’mål÷‰ûc‡ûUûû(œ{÷6÷#•÷[÷rÄügˆ†|{B‹|­†Ÿ„—€”‚yŒxו•¯¼øh÷‘Œ‰÷Šû‰ûJû2û™z÷X÷”÷M÷’Îüf~‡†|zB‘‹{¯‡žƒ—€”‚yŒxØ”•°½øg÷˜•–ŽkªV³‹u©u–÷5¨÷©÷©s¨÷§o©÷ªnÿ
+@µàùJù$õn\l]j`~÷ûZûµ ûj÷ûÎ÷*÷jû*ø”@Åоַآ‡•Ž‘–2¸zewfvgµ•àu¡p¢‹j_a÷¡“”˜-•û(û“m÷ ûû!ŠºI o¥j¥‹_S@÷ ÷#˜”–Žo§\²‹bUW÷£”•˜*–û.û9“n÷1û û_“m¹ ÷eŠfŠg5‚*v)nEœƒ¹% ¶Ä¬âžãŒ–’•†û8uû*#û
+šzy ÷6÷!•÷[÷uÑük~‡‡}}K‹|«‡œ„–€“‚ŽzŒyÓ•”®ºøm÷µ ”Š“÷Djbgdgft”krsqsqv}«q¯a¯|†£T¨7Jµ ¯e´¹sÕ¢›¢œ¡›ü•© ›‘¯÷jY”Ÿ©—øŸ›“‘“=ÇheûT}‘º´¸¸µº÷T™”–Žm§\±‹[Ä‘©÷©õ¹¾“àÿ
+
+“¢’£‘£ŸŒ••Ž—
+
+û>³÷§û9˜•–Žl©Y²‹_Tûæ“mÌãûq÷ï™”–Žn§^±‹cVû‹ƒ¼œ¼¢·¤«v§u›w¸~˜¿6Ÿ™œ™œ™ ‡”•B´xuuusxcUGšƒ³yºr¸obl`q`v…_Ÿû$û‰û;Oû$šð÷#÷Y÷û‘ð°óÄÕÊŸ‡”‘”=ºI>.F2\÷Y÷ÃWMAQEd™yÛ§á¹Æ¼Ÿˆ“Œ‘•ŠûV4ûû=ûS”y÷%µ÷Îîò¢‡”’•#û‚ï§÷ÅÇÃœ…•‘”4½\J(A6_÷ë÷=ÀbÑBŸRÓa°÷*û†Òßønu0ûûw÷ü0÷ ÷wû ûw÷Ÿ÷wû ûw÷søJûä“n÷?†eƒ[„kbHªü¸–¦£š’£÷wi”¡©š‘ŒøRœŽ™’‘’AÅifû ¡«¡¹Ÿ³÷Q™•–kªTµ‹©÷¨÷ ©÷Š»m©èŸ÷Ë÷:Ë÷@Ìî€ï€÷ÁŸ÷ø&û÷©û ü&÷ ø©üEªüF–¥¦š’·ø&N•¡«š’Œ÷䎚”‘’=Æ÷U÷v™•–jªV³‹\Rû°÷ è”á—Ò–£‚ž‹“’EÒû#_û¤^ûp{Žw÷÷’•÷ûü2”m÷Þ9 û#û#F•{÷€÷=Ê÷*ëî÷ ûn•ª¢›÷:÷ V÷7*Ï=ï€çqx÷Gü=éª;Ö^Å´˜÷›¨Á“»©˜ÿ
+ùÔ¬f­OZÇVÊ÷ûHÕ
+€K~K„{‡‚…ˆ‰Š~i‹a,d…‘Ÿ÷kï¹÷ ÌÊ¿›„—‘”;¾VP+?6Q÷}¡Ž••Œ™+–ü¡VžzÙó÷-­•©˜†’s“mù=``
+û1û 3—€B
+œ"pVkYeb—~¯ª«¯¦±”e•h˜iZ½a§¡—“ˆžx¸œ÷4}Žƒd}^‚t‚t‰‹ƒ¡~­±„µ¹Ü©ãžÔ¦“‘—
+­v®gšoÈl«÷ûE¨÷6™”–Žm¦\°‹aXFÍ´’±’«’ ›Š””IÊAlû%dû
+zyÅÉÆ“QûT“n÷/`JJP>_–{Ú«Ñ´Á¿büšYQk`u‚|y‘w”t­ˆ§•¸œÁ»€ä÷„@@ši˜Uˆ`½R×õûâ÷9„§j­R“`Ç]Â÷ûBÈ÷G†ÃjÔL¥Y×j¢÷)û‰³
+ -ªðUùùÍ¢lªV“cÇ\É÷û@Ê÷¯ûG™•–Žk©X²‹_TûØ“m€"©w§b®I‘ZÃYÃ÷ û>èüJüŒRpIsrw{ƒt—y™v®“œ¡¤¬›ÑtèÃ…™Y“A€Q¶SÏ÷ ÷Ð@(¡^¤D‰U»XÆ÷û÷àˆª`ªDŒV¾YÅ÷û3ïû{øÂc JŒ\
+[Î÷øO”Ž“‘–í¢ÖžÅšoLKZûg“|
+Ú µ¤ À¥˜ ú|yù€œ«
+Ù «¨Ì Ù–° ú|ûŽ‹F‹µ
+µ µ¦ µ”¥ Œ ú|þà‹ ¸‹©
+© ©“¤ ©¤¥ Œ ú|ö‹‹ø£‹÷q‹È‹±
+Ñ ±šÊ Ñ– ú|ûŽ‹F‹³
+³ ³Û ³Û Œ úçûŽ‹F‹¯
+¯ Œ øˆûŽ‹F‹®
+Æ ®™ ´ Œ øˆûŽ‹F‹Ò
+ ·¦  © Œ øˆyø£÷_œûª‹•‹å‹³
+Ñ ³¢ ¸¤• øˆûŽ‹F‹µ
+À µ˜Ó À”œ øˆyù€œ­
+Ì ­© µ¢– øˆûŽ‹F‹¯
+Í ¯§ Œ úZöûŽ‹F‹©
+È ©¥ §¬ Œ ú|ûŽ‹F‹¬
+¬ ¬«£ ¬š¥ Œ ú|{›ø–™÷^›û¥‹–‹¾‹±‹´
+Ô ª• º¥¤ ù•ù ûŽ‹F‹°
+· °–Ô ·šË øp÷¼}™ùTš´
+Î ´–¢ Ζ ø¯ûŽ‹F‹¬
+¬ ¬ª¥ ¬™¥ Œ ú|
+endstream
+endobj
+319 0 obj
+<</Length 7787>>
+stream
+€
+endstream
+endobj
+13 0 obj
+<</Type/ObjStm/N 200/First 1856/Length 27804>>
+stream
+12 0 18 154 30 296 35 482 38 629 41 776 46 923 49 1060 52 1197 55 1334 57 1481 58 1648 59 1814 61 1945 65 2101 67 2236 69 2343 70 2498 73 2531 72 2789 71 2957 79 3094 82 3338 78 3506 77 3679 86 3813 85 4057 84 4221 92 4355 91 4611 90 4778 98 4914 101 5157 97 5335 96 5507 108 5640 107 5885 106 6073 118 6199 120 6483 123 6516 122 6773 121 6961 129 7087 132 7337 128 7375 127 7548 136 7682 139 7931 135 8016 134 8190 143 8325 142 8562 141 8743 149 8862 152 9109 148 9189 147 9365 157 9502 156 9760 155 9949 164 10076 165 10082 162 10268 169 10399 172 10644 168 10817 167 10992 179 11128 182 11394 178 11432 177 11611 186 11751 189 11998 185 12019 184 12195 193 12332 5 12596 4 12629 200 12672 208 12765 216 12872 224 12970 225 13068 210 13111 211 13139 212 13167 213 13195 218 13223 219 13251 220 13279 221 13307 215 13334 217 13362 204 13390 223 13417 196 13445 198 13473 199 13501 201 13528 202 13556 209 13584 214 13612 222 13640 197 13668 203 13696 194 13724 195 13751 205 13778 206 13805 207 13832 226 13860 228 13879 231 13978 232 14073 233 14181 234 14281 230 14372 236 14487 238 14578 239 14649 240 14733 241 14825 237 14916 235 15027 243 15155 244 15230 242 15306 246 15434 247 15514 248 15611 249 15704 245 15780 250 15901 229 15973 252 16121 253 16265 254 16574 251 16930 227 17038 257 17078 3 17094 31 17173 36 17237 256 17301 39 17366 42 17430 47 17494 258 17558 50 17624 53 17688 260 17752 56 17775 259 17854 262 17920 62 17929 263 18008 68 18017 119 18098 261 18164 255 18231 2 18316 1 18421 275 18527 6 18752 273 18924 8 19168 277 19331 282 19578 10 19733 280 19908 14 20153 284 20313 289 20562 16 20871 287 21045 19 21289 291 21451 296 21697 21 21943 294 22118 300 22363 23 22568 298 22742 25 22991 302 23154 307 23401 27 23568 305 23741 311 23990 32 24241 309 24415 315 24671 43 24717 313 24889 63 25139 317 25311 7 25564 9 25695 11 25813 <</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/URI/URI(https://github.com/liantze/pgfornament-han)>>/Rect[175.971 591.555 436.029 607.515]>>
+<</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/URI/URI(http://ctan.org/pkg/pgfornament)>>/Rect[117.031 519.13 263.505 531.136]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F2 9 0 R/F3 11 0 R/F4 15 0 R/F5 17 0 R/F6 20 0 R/F7 22 0 R/F8 24 0 R/F9 26 0 R/F10 28 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F6 20 0 R/F8 24 0 R/F5 17 0 R/F9 26 0 R/F11 33 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F6 20 0 R/F8 24 0 R/F5 17 0 R/F9 26 0 R/F11 33 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F6 20 0 R/F8 24 0 R/F5 17 0 R/F9 26 0 R/F11 33 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F4 15 0 R/F2 9 0 R/F10 28 0 R/F12 44 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F2 9 0 R/F12 44 0 R/F10 28 0 R/F4 15 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F10 28 0 R/F4 15 0 R/F12 44 0 R/F2 9 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F10 28 0 R/F4 15 0 R/F12 44 0 R/F2 9 0 R/F6 20 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/URI/URI(http://ylbook.com/cms/web/chuantongsecai/chuantongsecai.htm)>>/Rect[313.987 692.821 540 706.807]>>
+<</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/URI/URI(http://ylbook.com/cms/web/chuantongsecai/chuantongsecai.htm)>>/Rect[72 676.441 171.225 690.427]>>
+<</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/URI/URI(https://github.com/heangfat)>>/Rect[135 662.119 156 672.619]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F4 15 0 R/F10 28 0 R/F8 24 0 R/F2 9 0 R/F7 22 0 R/F6 20 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/URI/URI(https://github.com/heangfat)>>/Rect[250.5 721.434 271.5 736.523]>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F13 64 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</Type/Annot/Subtype/Link/Border[0 0 0]/H/I/C[0 1 1]/A<</S/URI/URI(https://ctan.org/pkg/beamertheme-metropolis)>>/Rect[196.435 670.231 242.898 682.201]>>
+<</pgfprgb[/Pattern/DeviceRGB]>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 135/CapHeight 860/XHeight 600/AvgWidth 482/FontBBox[-72 -212 1156 952]/ItalicAngle 0/Flags 4/Style<</Panose<0801020b0800000000000000>>>/FontName/KXEIRA+PingFangHK-Semibold/FontFile3 74 0 R/CIDSet 75 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/KXEIRA+PingFangHK-Semibold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/FontDescriptor 73 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/KXEIRA+PingFangHK-Semibold-Identity-H/Encoding/Identity-H/DescendantFonts[72 0 R]/ToUnicode 76 0 R>>
+<</Type/FontDescriptor/Ascent 935/Descent -265/StemV 92/CapHeight 935/AvgWidth 560/FontBBox[-748 -353 1360 1104]/ItalicAngle 0/Flags 6/Style<</Panose<0000020b0503050000020004>>>/FontName/FPNZXO+FiraSans-Regular/FontFile3 80 0 R/CIDSet 81 0 R>>
+[36[608]155[796]335[544]371[594]380[478]391[598]410[550]478[282]506[512]512[293]530[857]536[586]553[584]596[594]607[386]623[467]638[361]661[582]2127[240]2155[324 324]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/FPNZXO+FiraSans-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 79 0 R/DW 666/W 82 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/FPNZXO+FiraSans-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[78 0 R]/ToUnicode 83 0 R>>
+<</Type/FontDescriptor/Ascent 935/Descent -265/StemV 84/CapHeight 935/AvgWidth 600/FontBBox[-625 -500 1192 1050]/ItalicAngle 0/Flags 7/Style<</Panose<0000020b0509050000020004>>>/FontName/LTRQHE+FiraMono-Regular/FontFile3 87 0 R/CIDSet 88 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/LTRQHE+FiraMono-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 86 0 R/DW 600>>
+<</Type/Font/Subtype/Type0/BaseFont/LTRQHE+FiraMono-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[85 0 R]/ToUnicode 89 0 R>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 860/XHeight 600/AvgWidth 469/FontBBox[-72 -212 1126 952]/ItalicAngle 0/Flags 4/Style<</Panose<0801020b0400000000000000>>>/FontName/QWCLFA+PingFangHK-Regular/FontFile3 93 0 R/CIDSet 94 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/QWCLFA+PingFangHK-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/FontDescriptor 92 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/QWCLFA+PingFangHK-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[91 0 R]/ToUnicode 95 0 R>>
+<</Type/FontDescriptor/Ascent 935/Descent -265/StemV 58/CapHeight 935/AvgWidth 546/FontBBox[-738 -350 1360 1057]/ItalicAngle 0/Flags 6/Style<</Panose<0000020b0403050000020004>>>/FontName/IDDCNL+FiraSans-Light/FontFile3 99 0 R/CIDSet 100 0 R>>
+[2[565]36[598]67[512]144[477]235[539]247[495]301[512]335[536]391[585]410[538]478[270]530[853]553[571]607[373]638[341]661[579]2012[550 413 479 486 518 487]2020[538 518]2116[287]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/IDDCNL+FiraSans-Light/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 98 0 R/DW 666/W 101 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/IDDCNL+FiraSans-Light-Identity-H/Encoding/Identity-H/DescendantFonts[97 0 R]/ToUnicode 102 0 R>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 860/AvgWidth 968/FontBBox[-85 -228 1029 929]/ItalicAngle 0/Flags 6/Style<</Panose<000002010600040101010101>>>/FontName/PCOLSV+STKaitiSC-Regular/CIDSet 109 0 R/FontFile2 110 0 R>>
+<</Type/Font/Subtype/CIDFontType2/BaseFont/PCOLSV+STKaitiSC-Regular/FontDescriptor 108 0 R/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/CIDToGIDMap/Identity>>
+<</Type/Font/Subtype/Type0/BaseFont/PCOLSV+STKaitiSC-Regular/Encoding/Identity-H/DescendantFonts[107 0 R]/ToUnicode 111 0 R>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F4 15 0 R/F10 28 0 R/F8 24 0 R/F2 9 0 R/F7 22 0 R/F6 20 0 R/F5 17 0 R/F9 26 0 R>>/XObject<</Fm0 103 0 R/Fm1 104 0 R/Fm2 105 0 R/Fm3 112 0 R/Fm4 113 0 R/Fm5 114 0 R/Fm6 115 0 R/Fm7 116 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</pgfprgb[/Pattern/DeviceRGB]>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 514/XHeight 434/AvgWidth 436/FontBBox[-24 -305 1024 916]/ItalicAngle 0/Flags 6/Style<</Panose<000002010600040101010101>>>/FontName/IJRJAI+STBaoliSC-Regular/CIDSet 124 0 R/FontFile2 125 0 R>>
+<</Type/Font/Subtype/CIDFontType2/BaseFont/IJRJAI+STBaoliSC-Regular/FontDescriptor 123 0 R/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/CIDToGIDMap/Identity>>
+<</Type/Font/Subtype/Type0/BaseFont/IJRJAI+STBaoliSC-Regular/Encoding/Identity-H/DescendantFonts[122 0 R]/ToUnicode 126 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 109/CapHeight 806/AvgWidth 618/FontBBox[-476 -289 1577 1137]/ItalicAngle 0/Flags 262150/Style<</Panose<000000000800000000000000>>>/FontName/LLLGUO+LMRoman12-Bold/FontFile3 130 0 R/CIDSet 131 0 R>>
+[28[547]34[800]50[513]75[938]96[460]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/LLLGUO+LMRoman12-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 129 0 R/DW 280/W 132 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/LLLGUO+LMRoman12-Bold-Identity-H/Encoding/Identity-H/DescendantFonts[128 0 R]/ToUnicode 133 0 R>>
+<</Type/FontDescriptor/Ascent 783/Descent -217/StemV 83/CapHeight 783/AvgWidth 500/FontBBox[-454 -308 734 1039]/ItalicAngle 0/Flags 262151/Style<</Panose<000000000809000000000000>>>/FontName/ESNRQK+LMMonoLt10-Bold/FontFile3 137 0 R/CIDSet 138 0 R>>
+[28[525]50[525]55[525]59[525]63[525 525]75[525]77[525]81[525]84[525]96[525]105[525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/ESNRQK+LMMonoLt10-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 136 0 R/DW 280/W 139 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/ESNRQK+LMMonoLt10-Bold-Identity-H/Encoding/Identity-H/DescendantFonts[135 0 R]/ToUnicode 140 0 R>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 860/AvgWidth 389/FontBBox[-4 -144 1003 860]/ItalicAngle 0/Flags 6/Style<</Panose<000002010600040101010101>>>/FontName/ABFWKB+STFangsong/CIDSet 144 0 R/FontFile2 145 0 R>>
+<</Type/Font/Subtype/CIDFontType2/BaseFont/ABFWKB+STFangsong/FontDescriptor 143 0 R/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/CIDToGIDMap/Identity>>
+<</Type/Font/Subtype/Type0/BaseFont/ABFWKB+STFangsong/Encoding/Identity-H/DescendantFonts[142 0 R]/ToUnicode 146 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 69/CapHeight 806/AvgWidth 549/FontBBox[-430 -290 1417 1127]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/BMTVZW+LMRoman10-Regular/FontFile3 150 0 R/CIDSet 151 0 R>>
+[47[556]51[500]55[306]59[500]77[556 500]82[500]84[556 389 389]107[500]121[500]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/BMTVZW+LMRoman10-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 149 0 R/DW 280/W 152 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/BMTVZW+LMRoman10-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[148 0 R]/ToUnicode 153 0 R>>
+<</Type/FontDescriptor/Ascent 860/Descent -140/StemV 87/CapHeight 617/XHeight 486/AvgWidth 358/FontBBox[-83 -303 1003 918]/ItalicAngle 0/Flags 6/Style<</Panose<000002010600040101010101>>>/FontName/VYDQHA+STLibianSC-Regular/CIDSet 158 0 R/FontFile2 159 0 R>>
+<</Type/Font/Subtype/CIDFontType2/BaseFont/VYDQHA+STLibianSC-Regular/FontDescriptor 157 0 R/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/CIDToGIDMap/Identity>>
+<</Type/Font/Subtype/Type0/BaseFont/VYDQHA+STLibianSC-Regular/Encoding/Identity-H/DescendantFonts[156 0 R]/ToUnicode 160 0 R>>
+[500]
+<</Type/FontDescriptor/CapHeight 683/Ascent 0/Descent 0/ItalicAngle -14.04/StemV 40/Flags 70/FontBBox[-29 -960 1116 775]/FontFile3 166 0 R/CharSet(/diamondmath)/FontName/YQFIMT+CMSY10>>
+<</Type/Font/Subtype/Type1/ToUnicode 163 0 R/Widths 164 0 R/FirstChar 5/LastChar 5/BaseFont/YQFIMT+CMSY10/FontDescriptor 165 0 R>>
+<</Type/FontDescriptor/Ascent 778/Descent -222/StemV 69/CapHeight 778/AvgWidth 500/FontBBox[-451 -316 731 1016]/ItalicAngle 0/Flags 7/Style<</Panose<000000000509000000000000>>>/FontName/OKBUDR+LMMono10-Regular/FontFile3 170 0 R/CIDSet 171 0 R>>
+[28[525]36[525]38[525 525 525 525]43[525]47[525]50[525]52[525]59[525]63[525]66[525]70[525]72[525]75[525]77[525]81[525]84[525]96[525]98[525]105[525]107[525]109[525]114[525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/OKBUDR+LMMono10-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 169 0 R/DW 280/W 172 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/OKBUDR+LMMono10-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[168 0 R]/ToUnicode 173 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 96/CapHeight 806/AvgWidth 634/FontBBox[-518 -307 1565 1147]/ItalicAngle -14.03619385/Flags 262214/Style<</Panose<000000000800000000000000>>>/FontName/JJQEIC+LMRoman10-BoldItalic/FontFile3 180 0 R/CIDSet 181 0 R>>
+[35[532]43[532]70[532]72[297]81[591]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/JJQEIC+LMRoman10-BoldItalic/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 179 0 R/DW 280/W 182 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/JJQEIC+LMRoman10-BoldItalic-Identity-H/Encoding/Identity-H/DescendantFonts[178 0 R]/ToUnicode 183 0 R>>
+<</Type/FontDescriptor/Ascent 806/Descent -194/StemV 65/CapHeight 806/AvgWidth 537/FontBBox[-422 -280 1394 1127]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/KYGWNF+LMRoman12-Regular/FontFile3 187 0 R/CIDSet 188 0 R>>
+[85[381 381]88[272]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/KYGWNF+LMRoman12-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 186 0 R/DW 280/W 189 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/KYGWNF+LMRoman12-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[185 0 R]/ToUnicode 190 0 R>>
+<</ExtGState 4 0 R/ColorSpace 5 0 R/Font<</F1 7 0 R/F4 15 0 R/F10 28 0 R/F8 24 0 R/F2 9 0 R/F6 20 0 R/F5 17 0 R/F9 26 0 R/F7 22 0 R>>/XObject<</Fm8 154 0 R/Fm9 161 0 R/Fm10 174 0 R/Fm11 175 0 R/Fm12 176 0 R/Fm13 191 0 R>>/ProcSet[/PDF/Text/ImageC/ImageB/ImageI]>>
+<</pgfprgb[/Pattern/DeviceRGB]>>
+<</pgf@ca1.0<</ca 1>>/pgf@CA1.0<</CA 1>>>>
+<</Limits[(0)(13)]/Names[(0)194 0 R(1)195 0 R(10)196 0 R(11)197 0 R(12)198 0 R(13)199 0 R]>>
+<</Limits[(14)(1a)]/Names[(14)201 0 R(15)202 0 R(16)203 0 R(17)204 0 R(18)205 0 R(19)206 0 R(1a)207 0 R]>>
+<</Limits[(2)(8)]/Names[(2)209 0 R(3)210 0 R(4)211 0 R(5)212 0 R(6)213 0 R(7)214 0 R(8)215 0 R]>>
+<</Limits[(9)(f)]/Names[(9)217 0 R(a)218 0 R(b)219 0 R(c)220 0 R(d)221 0 R(e)222 0 R(f)223 0 R]>>
+<</Kids[200 0 R 208 0 R 216 0 R 224 0 R]>>
+[42 0 R/XYZ 72 641.09 null]
+[42 0 R/XYZ 72 457.39 null]
+[42 0 R/XYZ 72 299.17 null]
+[42 0 R/XYZ 72 170.96 null]
+[47 0 R/XYZ 72 417.25 null]
+[47 0 R/XYZ 72 263.55 null]
+[47 0 R/XYZ 72 165.89 null]
+[50 0 R/XYZ 72 734.4 null]
+[47 0 R/XYZ 72 542.39 null]
+[47 0 R/XYZ 72 444.69 null]
+[56 0 R/XYZ 72 734.4 null]
+[50 0 R/XYZ 72 490.91 null]
+[50 0 R/XYZ 72 393.44 null]
+[50 0 R/XYZ 72 255.97 null]
+[53 0 R/XYZ 72 734.4 null]
+[53 0 R/XYZ 72 526.79 null]
+[53 0 R/XYZ 72 426.59 null]
+[42 0 R/XYZ 72 674.89 null]
+[47 0 R/XYZ 72 578.63 null]
+[50 0 R/XYZ 72 527.36 null]
+[50 0 R/XYZ 72 292.15 null]
+[53 0 R/XYZ 72 325.28 null]
+[3 0 R/XYZ 72 473.84 null]
+[42 0 R/XYZ 72 734.4 null]
+[56 0 R/XYZ 72 734.4 null]
+[68 0 R/XYZ 72 734.4 null]
+[119 0 R/XYZ 72 734.4 null]
+<</Dests 225 0 R>>
+<</Title<feff7b2c4e0090e85206002057fa672c75286cd5>/A<</S/GoTo/D(0)>>/Parent 227 0 R/Next 229 0 R>>
+<</Title<feff63a553557ebf768489d270b97b2653f7>/A<</S/GoTo/D(3)>>/Parent 230 0 R/Next 232 0 R>>
+<</Title<feff63a553cc7ebf768489d270b97b2653f7>/A<</S/GoTo/D(4)>>/Parent 230 0 R/Prev 231 0 R/Next 233 0 R>>
+<</Title<feff7b80535589d270b97b2653f7>/A<</S/GoTo/D(5)>>/Parent 230 0 R/Prev 232 0 R/Next 234 0 R>>
+<</Title<feff56de7eb9768489d270b97b2653f7>/A<</S/GoTo/D(6)>>/Parent 230 0 R/Prev 233 0 R>>
+<</Title<feff89d270b97b2653f7>/A<</S/GoTo/D(2)>>/First 231 0 R/Last 234 0 R/Count -4/Parent 229 0 R/Next 235 0 R>>
+<</Title<feff53557ebf300153cc7ebf76f47ebf>/A<</S/GoTo/D(8)>>/Parent 235 0 R/Next 237 0 R>>
+<</Title<feff8fde7eed>/A<</S/GoTo/D(a)>>/Parent 237 0 R/Next 239 0 R>>
+<</Title<feff79bb6563>/A<</S/GoTo/D(b)>>/Parent 237 0 R/Prev 238 0 R/Next 240 0 R>>
+<</Title<feff79bb65638fde63a5>/A<</S/GoTo/D(c)>>/Parent 237 0 R/Prev 239 0 R/Next 241 0 R>>
+<</Title<feff5706546863925e03768456de7eb9>/A<</S/GoTo/D(d)>>/Parent 237 0 R/Prev 240 0 R>>
+<</Title<feff56de5b577eb9>/A<</S/GoTo/D(9)>>/First 238 0 R/Last 241 0 R/Count -4/Parent 235 0 R/Prev 236 0 R>>
+<</Title<feff7ebf578b53555143>/A<</S/GoTo/D(7)>>/First 236 0 R/Last 237 0 R/Count -2/Parent 229 0 R/Prev 230 0 R/Next 242 0 R>>
+<</Title<feff798f5b577eb9>/A<</S/GoTo/D(f)>>/Parent 242 0 R/Next 244 0 R>>
+<</Title<feff5bff5b577eb9>/A<</S/GoTo/D(10)>>/Parent 242 0 R/Prev 243 0 R>>
+<</Title<feff540979657eb98def>/A<</S/GoTo/D(e)>>/First 243 0 R/Last 244 0 R/Count -2/Parent 229 0 R/Prev 235 0 R/Next 245 0 R>>
+<</Title<feff5bf979f07b2653f7>/A<</S/GoTo/D(12)>>/Parent 245 0 R/Next 247 0 R>>
+<</Title<feff5de653f34fa77b2653f7>/A<</S/GoTo/D(13)>>/Parent 245 0 R/Prev 246 0 R/Next 248 0 R>>
+<</Title<feff89d2843d7b2653f7>/A<</S/GoTo/D(14)>>/Parent 245 0 R/Prev 247 0 R/Next 249 0 R>>
+<</Title<feff8fde63a57ebf>/A<</S/GoTo/D(15)>>/Parent 245 0 R/Prev 248 0 R>>
+<</Title<feff4e917eb9>/A<</S/GoTo/D(11)>>/First 246 0 R/Last 249 0 R/Count -4/Parent 229 0 R/Prev 242 0 R/Next 250 0 R>>
+<</Title<feff52a87269>/A<</S/GoTo/D(16)>>/Parent 229 0 R/Prev 245 0 R>>
+<</Title<feff7b2c4e8c90e8520600207eb9683752178868>/A<</S/GoTo/D(1)>>/First 230 0 R/Last 250 0 R/Count -5/Parent 227 0 R/Prev 228 0 R/Next 251 0 R>>
+<</Title<feff4f207edf4e2d56fd989c827200200063006e0063006f006c006f007500720073002e007300740079>/A<</S/GoTo/D(18)>>/Parent 251 0 R/Next 253 0 R>>
+<</Title<feff84275c710020004200650061006d0065007200204e3b98980020005800690061006f007300680061006e0020004200650061006d006500720020005400680065006d00650020006200650061006d00650072007400680065006d0065005800690061006f007300680061006e002e007300740079>/A<</S/GoTo/D(19)>>/Parent 251 0 R/Prev 252 0 R/Next 254 0 R>>
+<</Title<feff795e9a6c6d6e4e910020004200650061006d0065007200204e3b9898002000480065006100760065006e006c007900200043006c006f0075006400730020004200650061006d006500720020005400680065006d00650020006200650061006d00650072007400680065006d006500480065006100760065006e006c00790043006c006f007500640073002e007300740079>/A<</S/GoTo/D(1a)>>/Parent 251 0 R/Prev 253 0 R>>
+<</Title<feff96445f55>/A<</S/GoTo/D(17)>>/First 252 0 R/Last 254 0 R/Count -3/Parent 227 0 R/Prev 229 0 R>>
+<</First 228 0 R/Last 251 0 R/Count 3>>
+[12 0 R 18 0 R]
+<</Resources 30 0 R/Type/Page/Parent 256 0 R/Contents[29 0 R]/Annots 257 0 R>>
+<</Resources 35 0 R/Type/Page/Parent 256 0 R/Contents[34 0 R]>>
+<</Resources 38 0 R/Type/Page/Parent 256 0 R/Contents[37 0 R]>>
+<</Type/Pages/Count 3/Parent 255 0 R/Kids[3 0 R 31 0 R 36 0 R]>>
+<</Resources 41 0 R/Type/Page/Parent 258 0 R/Contents[40 0 R]>>
+<</Resources 46 0 R/Type/Page/Parent 258 0 R/Contents[45 0 R]>>
+<</Resources 49 0 R/Type/Page/Parent 258 0 R/Contents[48 0 R]>>
+<</Type/Pages/Count 3/Parent 255 0 R/Kids[39 0 R 42 0 R 47 0 R]>>
+<</Resources 52 0 R/Type/Page/Parent 259 0 R/Contents[51 0 R]>>
+<</Resources 55 0 R/Type/Page/Parent 259 0 R/Contents[54 0 R]>>
+[57 0 R 58 0 R 59 0 R]
+<</Resources 61 0 R/Type/Page/Parent 259 0 R/Contents[60 0 R]/Annots 260 0 R>>
+<</Type/Pages/Count 3/Parent 255 0 R/Kids[50 0 R 53 0 R 56 0 R]>>
+[65 0 R]
+<</Resources 67 0 R/Type/Page/Parent 261 0 R/Contents[66 0 R]/Annots 262 0 R>>
+[69 0 R]
+<</Resources 118 0 R/Type/Page/Parent 261 0 R/Contents[117 0 R]/Annots 263 0 R>>
+<</Resources 193 0 R/Type/Page/Parent 261 0 R/Contents[192 0 R]>>
+<</Type/Pages/Count 3/Parent 255 0 R/Kids[62 0 R 68 0 R 119 0 R]>>
+<</Type/Pages/Count 12/Kids[256 0 R 258 0 R 259 0 R 261 0 R]/MediaBox[0 0 612 792]>>
+<</Creator(LaTeX with hyperref)/Producer(xdvipdfmx \(20190503\))/CreationDate(D:20190811104450+08'00')>>
+<</OpenAction[3 0 R/Fit]/PageMode/UseOutlines/Names 226 0 R/Outlines 227 0 R/Pages 255 0 R/Type/Catalog>>
+[9[298]12[550]15[220 323 465 465 465 465 465 465 465 465 465 465]30[550]34[695 588 646 701 557]45[528 839]53[597]57[660]59[604]66[457 493 428 506 447 310]74[271]76[512 264 790 542 504 519]83[372 390 316 531]89[490]1766[351]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/ZMFVPC+LinLibertineO/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 273 0 R/DW 500/W 275 0 R>>
+<</Type/FontDescriptor/Ascent 894/Descent -246/StemV 79/CapHeight 894/AvgWidth 566/FontBBox[-1082 -256 6171 1125]/ItalicAngle 0/Flags 6/Style<</Panose<010502000503000000000000>>>/FontName/ZMFVPC+LinLibertineO/FontFile3 274 0 R/CIDSet 276 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/GEKWUC+FandolSong-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(GB1)/Supplement 5>>/DW 1000/FontDescriptor 277 0 R>>
+<</Type/FontDescriptor/Ascent 800/Descent -200/StemV 87/CapHeight 800/AvgWidth 949/FontBBox[-250 -276 1110 978]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/GEKWUC+FandolSong-Regular/FontFile3 278 0 R/CIDSet 279 0 R>>
+[28[515]35[515]43[515 515]50[515]55[515]59[515]63[515 515]66[515]72[515]75[515]77[515]81[515]84[515]88[515]96[515]98[515]102[515]105[515]109[515]120[515]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/ISTZRL+LMMono12-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 280 0 R/DW 280/W 282 0 R>>
+<</Type/FontDescriptor/Ascent 778/Descent -222/StemV 65/CapHeight 778/AvgWidth 490/FontBBox[-444 -311 715 1019]/ItalicAngle 0/Flags 7/Style<</Panose<000000000509000000000000>>>/FontName/ISTZRL+LMMono12-Regular/FontFile3 281 0 R/CIDSet 283 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/WFYHUO+FandolSong-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(GB1)/Supplement 5>>/DW 1000/FontDescriptor 284 0 R>>
+<</Type/FontDescriptor/Ascent 880/Descent -120/StemV 87/CapHeight 880/AvgWidth 948/FontBBox[-308 -308 1110 989]/ItalicAngle 0/Flags 262150/Style<</Panose<000000000500000000000000>>>/FontName/WFYHUO+FandolSong-Bold/FontFile3 285 0 R/CIDSet 286 0 R>>
+[28[525]32[525]34[525 525 525]38[525 525 525 525 525 525 525 525]47[525 525]50[525 525 525]55[525 525 525 525 525]62[525 525 525]66[525]70[525]72[525]74[525 525]77[525 525]81[525 525]84[525 525 525]88[525]95[525 525]98[525 525 525 525 525]105[525 525 525]109[525]112[525]114[525 525 525]118[525]120[525 525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/FLOTYG+LMMono9-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 287 0 R/DW 280/W 289 0 R>>
+<</Type/FontDescriptor/Ascent 778/Descent -222/StemV 74/CapHeight 778/AvgWidth 500/FontBBox[-451 -318 734 1016]/ItalicAngle 0/Flags 7/Style<</Panose<000000000509000000000000>>>/FontName/FLOTYG+LMMono9-Regular/FontFile3 288 0 R/CIDSet 290 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/NSBVBK+FandolKai-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(GB1)/Supplement 5>>/DW 1000/FontDescriptor 291 0 R>>
+<</Type/FontDescriptor/Ascent 880/Descent -120/StemV 87/CapHeight 880/AvgWidth 945/FontBBox[-250 -272 1180 978]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/NSBVBK+FandolKai-Regular/FontFile3 292 0 R/CIDSet 293 0 R>>
+[28[525]34[525 525]38[525 525 525 525 525 525 525 525]47[525]50[525]52[525]54[525 525 525]59[525]63[525]66[525]70[525 525 525]75[525]77[525]81[525 525]84[525]88[525]96[525 525 525]102[525]105[525]107[525]109[525]112[525]114[525]116[525]118[525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/UQVGRY+LMMono10-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 294 0 R/DW 280/W 296 0 R>>
+<</Type/FontDescriptor/Ascent 778/Descent -222/StemV 69/CapHeight 778/AvgWidth 500/FontBBox[-451 -316 731 1016]/ItalicAngle 0/Flags 7/Style<</Panose<000000000509000000000000>>>/FontName/UQVGRY+LMMono10-Regular/FontFile3 295 0 R/CIDSet 297 0 R>>
+[28[525]35[525 525]42[525 525]47[525]50[525]55[525]59[525]62[525 525]66[525 525]69[525 525]72[525]75[525]77[525]81[525]84[525]88[525]96[525]98[525]105[525]109[525]112[525]114[525 525 525]118[525]120[525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/DLGCHB+LMMonoLt10-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 298 0 R/DW 280/W 300 0 R>>
+<</Type/FontDescriptor/Ascent 783/Descent -217/StemV 83/CapHeight 783/AvgWidth 500/FontBBox[-454 -308 734 1039]/ItalicAngle 0/Flags 262151/Style<</Panose<000000000809000000000000>>>/FontName/DLGCHB+LMMonoLt10-Bold/FontFile3 299 0 R/CIDSet 301 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/PEEDIQ+FandolFang-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(GB1)/Supplement 5>>/DW 1000/FontDescriptor 302 0 R>>
+<</Type/FontDescriptor/Ascent 880/Descent -120/StemV 87/CapHeight 880/AvgWidth 944/FontBBox[-263 -272 1127 978]/ItalicAngle 0/Flags 6/Style<</Panose<000000000500000000000000>>>/FontName/PEEDIQ+FandolFang-Regular/FontFile3 303 0 R/CIDSet 304 0 R>>
+[15[244]18[490 490 490 490 490]34[699 620 666]41[723]53[597]57[708]59[624]66[476]69[527 461]73[550 286]76[523 289 801 563 519]83[401 401]86[550 527]90[533]2092[1126]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/DLKYYU+LinLibertineOZ/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 305 0 R/DW 500/W 307 0 R>>
+<</Type/FontDescriptor/Ascent 894/Descent -246/StemV 110/CapHeight 894/AvgWidth 579/FontBBox[-446 -328 6171 900]/ItalicAngle 0/Flags 262150/Style<</Panose<010502000703000000000000>>>/FontName/DLKYYU+LinLibertineOZ/FontFile3 306 0 R/CIDSet 308 0 R>>
+[27[525 525]34[525 525 525]40[525 525]43[525]45[525]47[525]50[525]52[525]55[525 525 525]59[525]63[525]66[525]70[525]72[525]75[525]77[525 525]81[525 525]84[525 525 525 525 525]96[525]98[525]100[525]105[525]107[525]114[525]116[525]118[525]120[525 525]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/YLJAWD+LMMono10-Italic/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 309 0 R/DW 280/W 311 0 R>>
+<</Type/FontDescriptor/Ascent 778/Descent -222/StemV 69/CapHeight 778/AvgWidth 500/FontBBox[-491 -316 834 1016]/ItalicAngle -14.03619385/Flags 71/Style<</Panose<000000000509000000000000>>>/FontName/YLJAWD+LMMono10-Italic/FontFile3 310 0 R/CIDSet 312 0 R>>
+[17[514 514 514 514 514 514 514 514 514 514]]
+<</Type/Font/Subtype/CIDFontType0/BaseFont/BQACRY+LinBiolinumOB/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 313 0 R/DW 500/W 315 0 R>>
+<</Type/FontDescriptor/Ascent 894/Descent -246/StemV 132/CapHeight 894/AvgWidth 587/FontBBox[-1082 -267 6171 1022]/ItalicAngle 0/Flags 262148/Style<</Panose<080202000803000000000000>>>/FontName/BQACRY+LinBiolinumOB/FontFile3 314 0 R/CIDSet 316 0 R>>
+<</Type/Font/Subtype/CIDFontType0/BaseFont/NMPYOS+NotoSerifCJKtc-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/DW 1000/FontDescriptor 317 0 R>>
+<</Type/FontDescriptor/Ascent 880/Descent -120/StemV 87/CapHeight 880/AvgWidth 988/FontBBox[-997 -1049 2929 1809]/ItalicAngle 0/Flags 6/Style<</Panose<000002020400000000000000>>>/FontName/NMPYOS+NotoSerifCJKtc-Regular/FontFile3 318 0 R/CIDSet 319 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/ZMFVPC+LinLibertineO-Identity-H/Encoding/Identity-H/DescendantFonts[6 0 R]/ToUnicode 264 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/GEKWUC+FandolSong-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[8 0 R]>>
+<</Type/Font/Subtype/Type0/BaseFont/ISTZRL+LMMono12-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[10 0 R]/ToUnicode 265 0 R>>
+
+endstream
+endobj
+320 0 obj
+<</Type/ObjStm/N 10/First 70/Length 1366>>
+stream
+15 0 17 116 20 250 22 368 24 503 26 637 28 756 33 889 44 1023 64 1155 <</Type/Font/Subtype/Type0/BaseFont/WFYHUO+FandolSong-Bold-Identity-H/Encoding/Identity-H/DescendantFonts[14 0 R]>>
+<</Type/Font/Subtype/Type0/BaseFont/FLOTYG+LMMono9-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[16 0 R]/ToUnicode 266 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/NSBVBK+FandolKai-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[19 0 R]>>
+<</Type/Font/Subtype/Type0/BaseFont/UQVGRY+LMMono10-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[21 0 R]/ToUnicode 267 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/DLGCHB+LMMonoLt10-Bold-Identity-H/Encoding/Identity-H/DescendantFonts[23 0 R]/ToUnicode 268 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/PEEDIQ+FandolFang-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[25 0 R]>>
+<</Type/Font/Subtype/Type0/BaseFont/DLKYYU+LinLibertineOZ-Identity-H/Encoding/Identity-H/DescendantFonts[27 0 R]/ToUnicode 269 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/YLJAWD+LMMono10-Italic-Identity-H/Encoding/Identity-H/DescendantFonts[32 0 R]/ToUnicode 270 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/BQACRY+LinBiolinumOB-Identity-H/Encoding/Identity-H/DescendantFonts[43 0 R]/ToUnicode 271 0 R>>
+<</Type/Font/Subtype/Type0/BaseFont/NMPYOS+NotoSerifCJKtc-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[63 0 R]/ToUnicode 272 0 R>>
+
+endstream
+endobj
+321 0 obj
+<</Type/XRef/Root 1 0 R/Info 2 0 R/ID[<65fd87853e3abb66b20239ebb21c39a6><65fd87853e3abb66b20239ebb21c39a6>]/Size
+322/W[1 3 2]/Length 1932>>
+stream
+
+Ž
+
+
+endstream
+endobj
+startxref
+3734619
+%%EOF
diff --git a/graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.tex b/graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.tex
new file mode 100644
index 0000000000..f42480947c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/pgfornament-han_manual.tex
@@ -0,0 +1,976 @@
+% !TEX option = --shell-escape
+% !TEX program = xelatex
+\documentclass[fontset=fandol]{ctexart}
+
+\setmainfont{Linux Libertine O}
+\setsansfont{Linux Biolinum O}
+
+\usepackage{ragged2e}
+\usepackage[svgnames]{xcolor}
+\usepackage{pgfornament-han}
+\usetikzlibrary{chains}
+\usetikzlibrary{calc}
+\usetikzlibrary{decorations}
+\usetikzlibrary{decorations.text,decorations.markings}
+
+\usepackage{cncolours}
+
+\usepackage{geometry}
+\geometry{hmargin=1in,vmargin=0.8in,headheight=10pt}
+
+\usepackage{tcolorbox}
+\tcbuselibrary{skins,raster}
+
+
+%%%%%% 这段代ç å¯ä»¥å¿½è§†ï¼Œåªæ˜¯ --shell-escape 时调用 minted ä¸ç„¶å°±ç”¨ listings
+\ifnum\shellescape=1
+ \tcbuselibrary{minted}
+ \setminted{breaksymbolleft={},breakindent=\ccwd}
+ \newminted{latex}{}
+ \newmintinline{latex}{}
+\else
+ \tcbuselibrary{listings}
+ \newcommand{\latexinline}[1]{\lstinline|#1|}
+ \lstnewenvironment{latexcode}{\lstset{language={[LaTeX]TeX}}}{}
+ \lstset{basicstyle=\ttfamily}
+\fi
+%%%%%%%%
+
+
+\tcbset{fonttitle=\kaishu\large\bfseries,colback=铅白!60!white,colbacktitle=绀é’,coltitle=精白,colframe=墨ç°}
+
+\makeatletter
+\newcommand{\getpgfornamenthanDim}[1]{%
+ {\@pgfornamenthanDim{#1}宽:\@pgfornamentX\\高:\@pgfornamentY}%
+}
+\makeatother
+
+\usepackage{fancyhdr}
+\fancyhf{}
+\renewcommand{\headrule}{}
+
+\fancyhead[L]{%
+\newbox{\fortyseven}
+\savebox{\fortyseven}{\pgfornamenthan[scale=0.2,color=鸭åµé’]{47}}
+\tikzset{every node/.append style={inner sep=0pt,鸭åµé’}}
+\begin{tikzpicture}[overlay,remember picture]
+\node[anchor=north west,shift={(14.5pt,-14.5pt)}] at (current page.north west)
+ (nw) {\pgfornamenthan[scale=0.2]{25}};
+\node[anchor=north east,shift={(-14.5pt,-14.5pt)}] at (current page.north east)
+ (ne) {\pgfornamenthan[scale=0.2,symmetry=v]{25}};
+\node[anchor=south west,shift={(14.5pt,14.5pt)}] at (current page.south west)
+ (sw) {\pgfornamenthan[scale=0.2,symmetry=h]{25}};
+\node[anchor=south east,shift={(-14.5pt,14.5pt)}] at (current page.south east)
+ (se) {\pgfornamenthan[scale=0.2,symmetry=c]{25}};
+%
+\begin{scope}[start chain,node distance=0pt]
+\node[anchor=north west,on chain] at (nw.north east) {\usebox{\fortyseven}};
+\foreach \i in {1,...,15} {
+ \node[on chain]{\usebox{\fortyseven}};
+}
+\end{scope}
+%
+\begin{scope}[start chain,node distance=0pt]
+\node[anchor=south west,on chain] at (sw.south east) {\usebox{\fortyseven}};
+\foreach \i in {1,...,6} \node[on chain]{\usebox{\fortyseven}};
+\end{scope}
+%
+\begin{scope}[start chain=going left,node distance=0pt]
+\node[anchor=south east,on chain] at (se.south west) {\usebox{\fortyseven}};
+\foreach \i in {1,...,6} \node[on chain]{\usebox{\fortyseven}};
+\end{scope}
+%
+% åž‚ç›´çš„è¯ chains 比较ä¸å¥½æŽ§åˆ¶ï¼Œæˆ‘懒得折腾了,直接用 \foreach。
+% 自己算一下, (47) 长度 155. 那么 scale = 0.2 çš„è¯â€¦â€¦
+\foreach \i in {0,...,21}
+ \node[anchor=south west,rotate=-90,shift={($\i*(31bp,0)$)}] at (nw.south west)
+ {\usebox{\fortyseven}};
+%
+\foreach \i in {0,...,21}
+ \node[anchor=south east,rotate=90,shift={($\i*(-31bp,0)$)}] at (ne.south east)
+ {\usebox{\fortyseven}};
+%
+%% 严格æ¥è¯´åº”该放在 \fancyfoot å§ï¼Œç®—了一样啦
+\node[yshift=32pt,铜绿] at (current page.south) {\pgfornamenthan[scale=0.1]{51}};
+\node[yshift=32pt,text=black] at (current page.south) {\large\thepage};
+%
+\end{tikzpicture}
+}
+
+\pagestyle{fancy}
+\fancypagestyle{plain}{\pagestyle{fancy}}
+
+\usepackage[colorlinks]{hyperref}
+
+\title{汉风图纹 \texttt{pgfornament-han}}
+\author{林莲æžã€å¼ æ™¨å—}
+\date{2019/08/10\\\url{https://github.com/liantze/pgfornament-han}}
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+利用 \texttt{pgfornament} å®åŒ…å¯ä»¥åœ¨ \LaTeX{} 文件里便æ·åœ°ç”»å‡ºå分典雅漂亮的ã€æ¬§å¼é£Žæ ¼çš„花纹。(详情请自行访问 \url{http://ctan.org/pkg/pgfornament})
+ \texttt{pgfornament-han} å®åŒ…的用æ„,正是为了å°è¯•ç”¨ \texttt{pgfornament} 的已有机制,æ供一些汉风的传统图纹。所有图纹å‡ç”±\emph{张晨å—}以 CAD 程å¼å®šç¨¿ã€TikZ 绘制,å†ç”±\emph{林莲æž}è½¬ä¸ºé€‚åˆ \texttt{pgfornament} 机制使用的å®åŒ…代ç ã€‚
+\end{abstract}
+
+\part{基本用法}
+
+\texttt{n} 为图纹编å·çš„è¯ï¼Œæœ€ç®€å•çš„用法是 \latexinline{\pgfornamenthan[color=red,width=1.5cm]{n}}。
+也å¯ä»¥ç”¨ \texttt{height} 或者 \texttt{scale} 设定大å°ã€‚注æ„图纹比例是ä¸å˜çš„,因此åªæœ‰æœ€åŽç»™å‡ºçš„选项有效。此外 \texttt{symmetry} å‚æ•°å¯ä»¥å®žçŽ°3ç§é•œåƒï¼Œ\texttt{v} (垂直)ã€\texttt{h}(水平)ã€\texttt{c}(中心=åž‚ç›´+水平镜åƒï¼‰ï¼Œç”»è¾¹æ¡†çš„四个角点时很好用。其它TikZ å‚数的应用:
+
+\begin{latexcode}
+\tikzset{pgfornamentstyle/.append style={draw=black,fill=red,line width=1}}
+\pgfornamenthan[scale=2]{n}
+\end{latexcode}
+
+以下是一些范例。也记得翻到文档最åŽçš„附录,有惊喜。
+
+\bigskip
+
+\begin{tcblisting}{title={文本中的使用},listing side text,righthand width=5.5cm}
+å…ˆæ¥ä¸€ä¸ª \pgfornamenthan[color=blue,scale=0.18]{56}
+寿字纹。原本的 \pgfornament[scale=0.2]{56} ä¾ç„¶å¯ç”¨ã€‚
+\end{tcblisting}
+
+\enlargethispage{\baselineskip}
+
+
+\begin{tcblisting}{title={TikZ选项的应用},listing side text,righthand width=3cm}
+\begin{tikzpicture}[baseline={(current bounding box.center)}]
+ \tikzset{pgfornamentstyle/.style={
+ draw=Goldenrod,fill=Red,line width=1pt}}
+ \node[fill=black,circle,draw=Red,line width=2pt,inner sep=-8pt]
+ at (0,0) {\pgfornamenthan[scale=0.38]{56}};
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={简å•çš„边框范例}}
+
+\begin{tikzpicture}[x=1pt,y=1pt]
+ \tikzset{every node/.append style={inner sep=0pt,color=茜色}}
+ \node (nw) {\pgfornamenthan[scale=0.35]{1}};
+ \node[anchor=north west,right=140bp of nw] (ne) {\pgfornamenthan[symmetry=v,scale=0.35]{1}};
+ \node[anchor=north west,below=0pt of nw] (sw) {\pgfornamenthan[symmetry=h,scale=0.35]{1}};
+ \node[anchor=north east,below=0pt of ne] (se) {\pgfornamenthan[symmetry=c,scale=0.35]{1}};
+
+ %% 用 pgfornmanet 自带的 \draw (A) to[ornamenthan=19] (B) 机制的è¯ä¼šå¯¼è‡´çº¿æ¡é«˜åº¦è·Ÿç€å˜åŒ–ï¼åªå¥½æŠ˜è¡·ç”¨tikzçš„ xscale æ¥å®žçŽ°åŠ é•¿äº†ã€‚\pgfornamenthan 本身的 scale 则è¦ç¡®ä¿å’Œè§’点的 scale 一致。
+ \node[anchor=south west,xscale=2] at (sw.south east) {\pgfornamenthan[scale=0.35]{29}};
+
+ %% å¦å¤–一ç§æ–¹æ³•æ˜¯ç”¨ decorations,åŒæ ·éœ€è¦æ³¨æ„一下å„ç§é•¿åº¦å‚æ•°
+ \begin{scope}[decoration={markings,
+ mark=between positions 0 and 0.75 step 70bp with
+ { \node[transform shape,anchor=north west]{\pgfornamenthan[scale=0.35]{29}};}
+ }]
+ \draw[decorate] (nw.north east) -- (ne.north west);
+ \end{scope}
+
+ \node[font=\kaishu,align=center,xshift=70,text=black] at (nw.south east)
+ {给我一片海棠红啊海棠红\\血一样的海棠红\\
+ 沸血的烧痛是乡æ„的烧痛\\给我一片海棠红啊海棠红};
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={å¦ä¸€ä¸ªç®€å•çš„边框范例}}
+\begin{tikzpicture}
+ \tikzset{every node/.append style={铜绿,inner sep=0pt}}
+ \node (nw) {\pgfornamenthan[scale=0.25]{12}};
+ \node[right=50bp of nw] (ne) {\pgfornamenthan[scale=0.25,symmetry=v]{12}};
+ \node[below=50bp of nw] (sw) {\pgfornamenthan[scale=0.25,symmetry=h]{12}};
+ \node[below=50bp of ne] (se) {\pgfornamenthan[scale=0.25,symmetry=c]{12}};
+ % æ¯ä¸ªéƒ¨ä»¶åŽŸå®½åº¦ä¸º200bp,因此绘画时如果以bp作为å•ä½ï¼Œä¼šæ¯”较容易计算xscale的值。这里 scale=0.25 则部件有效宽度为50bp,刚好是两个角点符å·ä¹‹é—´çš„è·ç¦»ï¼Œå› æ­¤ä¸éœ€è¦å†è®¾ xscale。
+ \node[anchor=north west] at (nw.north east) {\pgfornamenthan[scale=0.25]{32}};
+ \node[anchor=south west] at (sw.south east) {\pgfornamenthan[scale=0.25]{32}};
+ \node[anchor=south west,rotate=-90] at (nw.south west) {\pgfornamenthan[scale=0.25]{32}};
+ \node[anchor=south east,rotate=90] at (ne.south east) {\pgfornamenthan[scale=0.25]{32}};
+
+\node[anchor=center,é›è“,shift={(25bp,-25bp)}] at (nw.south east) {\pgfornamenthan[scale=0.5]{57}};
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title=有些部件衔接å¯èƒ½éœ€è¦æ‰‹åŠ¨\texttt{shift}}
+ \begin{tikzpicture}\tikzset{every node/.append style={赤金,inner sep=0pt}}
+ \node (nw) {\pgfornamenthan[scale=0.2]{23}};
+ \node[right=53bp of nw] (ne) {\pgfornamenthan[scale=0.2,symmetry=v]{23}};
+ \node[anchor=north west,xshift=2bp] at (nw.north east) {\pgfornamenthan[scale=0.2]{41}};
+ \node[anchor=north east,xshift=-2bp] at (ne.north west) {\pgfornamenthan[scale=0.2,symmetry=v]{41}};
+ \end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{listing only,title={框ç€æ•´ä¸ªé¡µé¢çš„代ç ã€‚很适åˆæ‹¿æ¥è®¾è®¡å¥–状è¯ä¹¦çš„有木有ï¼}}
+ \newbox{\fortyseven}
+ \savebox{\fortyseven}{\pgfornamenthan[scale=0.2,color=鸭åµé’]{47}}
+ \tikzset{every node/.append style={inner sep=0pt,鸭åµé’}}
+ \begin{tikzpicture}[overlay,remember picture]
+ \node[anchor=north west,shift={(14.5pt,-14.5pt)}] at (current page.north west)
+ (nw) {\pgfornamenthan[scale=0.2]{25}};
+ \node[anchor=north east,shift={(-14.5pt,-14.5pt)}] at (current page.north east)
+ (ne) {\pgfornamenthan[scale=0.2,symmetry=v]{25}};
+ \node[anchor=south west,shift={(14.5pt,14.5pt)}] at (current page.south west)
+ (sw) {\pgfornamenthan[scale=0.2,symmetry=h]{25}};
+ \node[anchor=south east,shift={(-14.5pt,14.5pt)}] at (current page.south east)
+ (se) {\pgfornamenthan[scale=0.2,symmetry=c]{25}};
+ %
+ \begin{scope}[start chain,node distance=0pt]
+ \node[anchor=north west,on chain] at (nw.north east) {\usebox{\fortyseven}};
+ \foreach \i in {1,...,15} {
+ \node[on chain]{\usebox{\fortyseven}};
+ }
+ \end{scope}
+ %
+ \begin{scope}[start chain,node distance=0pt]
+ \node[anchor=south west,on chain] at (sw.south east) {\usebox{\fortyseven}};
+ \foreach \i in {1,...,6} \node[on chain]{\usebox{\fortyseven}};
+ \end{scope}
+ %
+ \begin{scope}[start chain=going left,node distance=0pt]
+ \node[anchor=south east,on chain] at (se.south west) {\usebox{\fortyseven}};
+ \foreach \i in {1,...,6} \node[on chain]{\usebox{\fortyseven}};
+ \end{scope}
+ %
+ % åž‚ç›´çš„è¯ chains 比较ä¸å¥½æŽ§åˆ¶ï¼Œæˆ‘懒得折腾了,直接用 \foreach。
+ % 自己算一下, (47) 长度 155. 那么 scale = 0.2 çš„è¯â€¦â€¦
+ \foreach \i in {0,...,21}
+ \node[anchor=south west,rotate=-90,shift={($\i*(31bp,0)$)}] at (nw.south west)
+ {\usebox{\fortyseven}};
+ %
+ \foreach \i in {0,...,21}
+ \node[anchor=south east,rotate=90,shift={($\i*(-31bp,0)$)}] at (ne.south east)
+ {\usebox{\fortyseven}};
+ %
+ %% 严格æ¥è¯´åº”该放在 \fancyfoot å§ï¼Œç®—了一样啦
+ \node[yshift=32pt,铜绿] at (current page.south) {\pgfornamenthan[scale=0.1]{51}};
+ \node[yshift=32pt,text=black] at (current page.south) {\large\thepage};
+ %
+ \end{tikzpicture}
+\end{tcblisting}
+
+\part{纹样列表}
+
+以下部件的原宽度ã€åŽŸé«˜åº¦çš†ä»¥1bp为å•å…ƒã€‚
+
+
+\setlength{\parindent}{0pt}\raggedright
+
+\section{角点符å·}
+
+\subsection{接å•çº¿çš„角点符å·}
+
+有实心线型与对应的空心线型两ç§ã€‚以下皆åŒã€‚
+
+\bigskip
+
+
+\foreach \n in {1,...,8}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsection{接åŒçº¿çš„角点符å·}
+
+\foreach \n in {9,...,14}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+
+\subsection{简å•è§’点符å·}
+
+和其他角点符å·é…åˆï¼Œåœ¨ä¸€æ¡å¯¹è§’线上使用其他角点符å·ï¼Œå¦ä¸€æ¡å¯¹è§’ 线上使用简å•è§’点符å·ã€‚
+
+\bigskip
+
+\foreach \n in {15,...,18}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsection{回纹的角点符å·}
+
+和连续的回纹é…åˆã€‚
+
+\bigskip
+
+\foreach \n in {19,...,22}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\bigskip\bigskip
+
+和离散的回纹é…åˆã€‚
+
+\bigskip
+
+\foreach \n in {23,...,28}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+
+\section{线型å•å…ƒ}
+
+\subsection{å•çº¿ã€åŒçº¿ç›´çº¿}
+
+\foreach \n in {29,...,32}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsection{回字纹}
+
+\subsubsection{è¿žç»­}
+
+\foreach \n in {33,...,36}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1.1cm) rectangle (1cm,0.9cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,height=0.6cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.9cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1.1cm) rectangle (2.8cm,0.9cm);
+ \end{tikzpicture}\space\space
+}%
+\foreach \n in {37,...,40}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1.1cm) rectangle (1cm,0.9cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,height=1.1cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.9cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1.1cm) rectangle (2.8cm,0.9cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsubsection{离散}
+
+\foreach \n in {41,...,44}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1.1cm) rectangle (1cm,0.9cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,height=0.6cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.9cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1.1cm) rectangle (2.8cm,0.9cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsubsection{离散连接}
+
+\foreach \n in {45,...,48}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1.1cm) rectangle (1cm,0.9cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,height=0.6cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.9cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1.1cm) rectangle (2.8cm,0.9cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsubsection{圆周排布的回纹}
+\foreach \n in {49,...,54}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1.5cm,-1.5cm) rectangle (1.5cm,1.5cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=2.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0,0) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.6cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1.5cm,-1.5cm) rectangle (3.5cm,1.5cm);
+ \end{tikzpicture}\space\space
+}
+
+\section{å‰ç¥¥çº¹è·¯}
+
+\subsection{ç¦å­—纹}
+
+\foreach \n in {55}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsection{寿字纹}
+
+\foreach \n in {56,57}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\section{云纹}
+
+\subsection{对称符å·}
+
+\foreach \n in {58,...,61}{%
+\begin{tikzpicture}
+ \fill[牙色](-1.5cm,-1cm) rectangle (1.5cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=2.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (1.3cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.6cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1.5cm,-1cm) rectangle (3.5cm,1cm);
+\end{tikzpicture}\space\space
+}
+
+
+\subsection{å·¦å³ä¾§ç¬¦å·}
+
+\foreach \n in {62,...,71}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+
+\subsection{角è½ç¬¦å·}
+
+\foreach \n in {72,...,75}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\subsection{连接线}
+
+\foreach \n in {76,...,77}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\section{动物}
+
+\foreach \n in {78,...,78}{%
+ \begin{tikzpicture}
+ \fill[牙色](-1cm,-1cm) rectangle (1cm,1cm);
+ \node[inner sep=0pt] (element) {\pgfornamenthan[color=茜色,width=1.8cm]{\n}};
+ \node[inner sep=0pt,font=\footnotesize\bfseries\sffamily,color=紫檀] at (0.8cm,-0.8cm) {\n};
+ \node[anchor=west,text width=4em,font=\footnotesize] at (1.1cm,0) {\getpgfornamenthanDim{\n}};
+ \draw[color=牙色] (1cm,-1cm) rectangle (2.8cm,1cm);
+ \end{tikzpicture}\space\space
+}
+
+\vfill
+
+\begin{center}
+\begin{tikzpicture}
+ \tikzset{every node/.append style={铜绿,inner sep=0pt,node distance=0pt}}
+ \node (nw) {\pgfornamenthan[scale=0.2]{6}};
+ \node[right=100bp of nw] (ne) {\pgfornamenthan[scale=0.2,symmetry=v]{16}};
+ \node[below=-8bp of nw] (sw) {\pgfornamenthan[scale=0.2,symmetry=h]{16}};
+ \node[below=-8bp of ne] (se) {\pgfornamenthan[scale=0.2,symmetry=c]{6}};
+ \node[anchor=north west,xscale=2.5] at (nw.north east) {\pgfornamenthan[scale=0.2]{30}};
+ \node[anchor=south west,xscale=2.5] at (sw.south east) {\pgfornamenthan[scale=0.2]{30}};
+ \node[font=\kaishu\Large,text=black,shift={(50bp,4bp)}] at (nw.south east) {å¾…ç»­};
+\end{tikzpicture}
+\end{center}
+
+\clearpage
+\appendix
+\setlength{\parindent}{2\ccwd}\justifying
+\ctexset{section/name={附录}}
+\phantomsection\addcontentsline{toc}{part}{附录}
+
+\section{传统中国颜色 \texttt{cncolours.sty}}
+
+\begingroup
+
+
+这是我比较早以å‰åšçš„一个å®åŒ…了,色å¡å–自 \url{http://ylbook.com/cms/web/chuantongsecai/chuantongsecai.htm}。
+
+感谢网å‹\href{https://github.com/heangfat}{\emph{端憲}},加入了三正色,以åŠæä¾›ç¹ä½“中文的颜色å称。
+
+\bigskip
+
+\renewcommand{\baselinestretch}{2}
+\newcommand\showcolour[1]{%
+ \fcolorbox{乌黑}{#1}{\makebox[2em]{\phantom{M}}}~\makebox[5em][l]{#1}%
+}
+
+\begin{RaggedRight}
+\showcolour{粉红}
+\showcolour{妃色}
+\showcolour{å“红}
+\showcolour{桃红}
+\showcolour{海棠红}
+\showcolour{石榴红}
+\showcolour{樱桃色}
+\showcolour{银红}
+\showcolour{大红}
+\showcolour{绛紫}
+\showcolour{绯红}
+\showcolour{胭脂}
+\showcolour{朱红}
+\showcolour{丹}
+\showcolour{彤}
+\showcolour{茜色}
+\showcolour{ç«çº¢}
+\showcolour{赫赤}
+\showcolour{嫣红}
+\showcolour{洋红}
+\showcolour{ç‚Ž}
+\showcolour{赤}
+\showcolour{绾}
+\showcolour{枣红}
+\showcolour{檀}
+\showcolour{殷红}
+\showcolour{酡红}
+\showcolour{酡颜}
+\showcolour{鹅黄}
+\showcolour{鸭黄}
+\showcolour{樱è‰è‰²}
+\showcolour{æ黄}
+\showcolour{æ红}
+\showcolour{橘黄}
+\showcolour{橙黄}
+\showcolour{橘红}
+\showcolour{姜黄}
+\showcolour{缃色}
+\showcolour{橙色}
+\showcolour{茶色}
+\showcolour{驼色}
+\showcolour{æ˜é»„}
+\showcolour{栗色}
+\showcolour{棕色}
+\showcolour{棕绿}
+\showcolour{棕黑}
+\showcolour{棕红}
+\showcolour{棕黄}
+\showcolour{赭色}
+\showcolour{ç¥ç€}
+\showcolour{è¤è‰²}
+\showcolour{枯黄}
+\showcolour{黄栌}
+\showcolour{秋色}
+\showcolour{秋香色}
+\showcolour{嫩绿}
+\showcolour{柳黄}
+\showcolour{柳绿}
+\showcolour{竹é’}
+\showcolour{葱黄}
+\showcolour{葱绿}
+\showcolour{葱é’}
+\showcolour{é’葱}
+\showcolour{油绿}
+\showcolour{绿沉}
+\showcolour{碧色}
+\showcolour{碧绿}
+\showcolour{é’碧}
+\showcolour{翡翠色}
+\showcolour{è‰ç»¿}
+\showcolour{é’色}
+\showcolour{é’ç¿ }
+\showcolour{é’白}
+\showcolour{鸭åµé’}
+\showcolour{蟹壳é’}
+\showcolour{鸦é’}
+\showcolour{绿色}
+\showcolour{豆绿}
+\showcolour{豆é’}
+\showcolour{石é’}
+\showcolour{玉色}
+\showcolour{ç¼¥}
+\showcolour{艾绿}
+\showcolour{æ¾æŸç»¿}
+\showcolour{æ¾èŠ±ç»¿}
+\showcolour{æ¾èŠ±è‰²}
+\showcolour{è“}
+\showcolour{é›é’}
+\showcolour{é›è“}
+\showcolour{碧è“}
+\showcolour{蔚è“}
+\showcolour{å®è“}
+\showcolour{è“ç°è‰²}
+\showcolour{è—é’}
+\showcolour{è—è“}
+\showcolour{é»›}
+\showcolour{黛绿}
+\showcolour{é»›è“}
+\showcolour{黛紫}
+\showcolour{紫色}
+\showcolour{ç´«é…±}
+\showcolour{酱紫}
+\showcolour{紫檀}
+\showcolour{绀é’}
+\showcolour{紫棠}
+\showcolour{é’莲}
+\showcolour{群é’}
+\showcolour{雪é’}
+\showcolour{ä¸é¦™è‰²}
+\showcolour{藕色}
+\showcolour{è—•è·è‰²}
+\showcolour{è‹è‰²}
+\showcolour{è‹é»„}
+\showcolour{è‹é’}
+\showcolour{è‹é»‘}
+\showcolour{è‹ç™½}
+\showcolour{水色}
+\showcolour{水红}
+\showcolour{水绿}
+\showcolour{æ°´è“}
+\showcolour{æ·¡é’}
+\showcolour{æ¹–è“}
+\showcolour{湖绿}
+\showcolour{精白}
+\showcolour{象牙白}
+\showcolour{雪白}
+\showcolour{月白}
+\showcolour{缟}
+\showcolour{ç´ }
+\showcolour{è¼ç™½}
+\showcolour{霜色}
+\showcolour{花白}
+\showcolour{鱼肚白}
+\showcolour{莹白}
+\showcolour{ç°è‰²}
+\showcolour{牙色}
+\showcolour{铅白}
+\showcolour{玄色}
+\showcolour{玄é’}
+\showcolour{乌色}
+\showcolour{乌黑}
+\showcolour{漆黑}
+\showcolour{墨色}
+\showcolour{墨ç°}
+\showcolour{黑色}
+\showcolour{ç¼è‰²}
+\showcolour{煤黑}
+\showcolour{黧}
+\showcolour{黎}
+\showcolour{é»}
+\showcolour{é»é»‘}
+\showcolour{黯}
+\showcolour{赤金}
+\showcolour{金色}
+\showcolour{银白}
+\showcolour{铜绿}
+\showcolour{乌金}
+\showcolour{è€é“¶}
+\showcolour{æ­£é’}
+\showcolour{正赤}
+\showcolour{正黄}
+\end{RaggedRight}
+
+\clearpage
+
+\CJKfontspec{Noto Serif CJK TC}
+以下是ç¹é«”中文字體å稱,由網å‹\href{https://github.com/heangfat}{\emph{端憲}}æ供。姜黃ã€è–‘黃是兩種æ¤ç‰©ã€‚未審此指何種,闕之。
+
+\bigskip
+
+\begin{RaggedRight}
+\showcolour{粉紅}
+\showcolour{妃色}
+\showcolour{å“ç´…}
+\showcolour{桃紅}
+\showcolour{海棠紅}
+\showcolour{石榴紅}
+\showcolour{櫻桃色}
+\showcolour{銀紅}
+\showcolour{大紅}
+\showcolour{絳紫}
+\showcolour{ç·‹ç´…}
+\showcolour{胭脂}
+\showcolour{朱紅}
+\showcolour{丹}
+\showcolour{彤}
+\showcolour{茜色}
+\showcolour{ç«ç´…}
+\showcolour{赫赤}
+\showcolour{嫣紅}
+\showcolour{æ´‹ç´…}
+\showcolour{ç‚Ž}
+\showcolour{赤}
+\showcolour{綰}
+\showcolour{棗紅}
+\showcolour{檀}
+\showcolour{æ®·ç´…}
+\showcolour{é…¡ç´…}
+\showcolour{é…¡é¡}
+\showcolour{éµé»ƒ}
+\showcolour{鴨黃}
+\showcolour{æ«»è‰è‰²}
+\showcolour{æ黃}
+\showcolour{æç´…}
+\showcolour{橘黃}
+\showcolour{橙黃}
+\showcolour{橘紅}
+\showcolour{姜黄}
+\showcolour{緗色}
+\showcolour{橙色}
+\showcolour{茶色}
+\showcolour{é§è‰²}
+\showcolour{æ˜é»ƒ}
+\showcolour{栗色}
+\showcolour{椶色}
+\showcolour{椶綠}
+\showcolour{椶黑}
+\showcolour{椶紅}
+\showcolour{椶黃}
+\showcolour{赭色}
+\showcolour{ç¥ç€}
+\showcolour{è¤è‰²}
+\showcolour{枯黃}
+\showcolour{黃櫨}
+\showcolour{秋色}
+\showcolour{秋香色}
+\showcolour{嫩綠}
+\showcolour{柳黃}
+\showcolour{柳綠}
+\showcolour{竹é’}
+\showcolour{蔥黃}
+\showcolour{蔥綠}
+\showcolour{蔥é’}
+\showcolour{é’蔥}
+\showcolour{油綠}
+\showcolour{綠沉}
+\showcolour{碧色}
+\showcolour{碧綠}
+\showcolour{é’碧}
+\showcolour{翡翠色}
+\showcolour{è‰ç¶ }
+\showcolour{é’色}
+\showcolour{é’ç¿ }
+\showcolour{é’白}
+\showcolour{é´¨åµé’}
+\showcolour{蟹殼é’}
+\showcolour{é´‰é’}
+\showcolour{綠色}
+\showcolour{豆綠}
+\showcolour{豆é’}
+\showcolour{石é’}
+\showcolour{玉色}
+\showcolour{縹}
+\showcolour{艾綠}
+\showcolour{æ¾æŸç¶ }
+\showcolour{æ¾èŠ±ç¶ }
+\showcolour{æ¾èŠ±è‰²}
+\showcolour{è—}
+\showcolour{é›é’}
+\showcolour{é›è—}
+\showcolour{碧è—}
+\showcolour{蔚è—}
+\showcolour{寶è—}
+\showcolour{è—ç°è‰²}
+\showcolour{è—é’}
+\showcolour{è—è—}
+\showcolour{é»›}
+\showcolour{黛綠}
+\showcolour{é»›è—}
+\showcolour{黛紫}
+\showcolour{紫色}
+\showcolour{紫醬}
+\showcolour{醬紫}
+\showcolour{紫檀}
+\showcolour{ç´ºé’}
+\showcolour{紫棠}
+\showcolour{é’è“®}
+\showcolour{群é’}
+\showcolour{雪é’}
+\showcolour{ä¸é¦™è‰²}
+\showcolour{藕色}
+\showcolour{è—•è·è‰²}
+\showcolour{蒼色}
+\showcolour{蒼黃}
+\showcolour{è’¼é’}
+\showcolour{蒼黑}
+\showcolour{蒼白}
+\showcolour{水色}
+\showcolour{æ°´ç´…}
+\showcolour{水綠}
+\showcolour{æ°´è—}
+\showcolour{æ·¡é’}
+\showcolour{æ¹–è—}
+\showcolour{湖綠}
+\showcolour{精白}
+\showcolour{象牙白}
+\showcolour{雪白}
+\showcolour{月白}
+\showcolour{縞}
+\showcolour{ç´ }
+\showcolour{è¼ç™½}
+\showcolour{霜色}
+\showcolour{花白}
+\showcolour{魚肚白}
+\showcolour{瑩白}
+\showcolour{ç°è‰²}
+\showcolour{牙色}
+\showcolour{鉛白}
+\showcolour{玄色}
+\showcolour{玄é’}
+\showcolour{çƒè‰²}
+\showcolour{çƒé»‘}
+\showcolour{漆黑}
+\showcolour{墨色}
+\showcolour{墨ç°}
+\showcolour{黑色}
+\showcolour{緇色}
+\showcolour{煤黑}
+\showcolour{黧}
+\showcolour{黎}
+\showcolour{é»}
+\showcolour{é»é»‘}
+\showcolour{黯}
+\showcolour{赤金}
+\showcolour{金色}
+\showcolour{銀白}
+\showcolour{銅綠}
+\showcolour{çƒé‡‘}
+\showcolour{è€éŠ€}
+\showcolour{æ­£é’}
+\showcolour{正赤}
+\showcolour{正黃}
+\end{RaggedRight}
+
+\endgroup
+
+\clearpage
+
+\section{è§å±± Beamer 主题 Xiaoshan Beamer Theme \texttt{beamerthemeXiaoshan.sty}}
+
+这个Beamer主题是以 \href{https://ctan.org/pkg/beamertheme-metropolis}{Metropolis} 为基础,用 \texttt{cncolours.sty} 调了一下颜色,加入少许汉风纹样。
+
+\bigskip
+
+\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={xiaoshan-sample.pdf}}
+\documentclass{ctexbeamer}
+
+\usetheme{Xiaoshan}
+
+\author{林莲æž}
+\title{è§å±±Beamer主题}
+\subtitle{\texttt{pgfornament-han}附录ç¦åˆ©}
+
+\begin{document}
+
+\begin{frame}
+ \maketitle
+\end{frame}
+
+\section{简介}
+
+\begin{frame}
+ \frametitle{其实是 Metropolis 主题的魔改}
+ \begin{itemize}
+ \item 改了颜色(用了 \texttt{cncolours.sty})
+ \item 加入 \texttt{pgfornament-han} 汉风纹样元素
+ \end{itemize}
+\end{frame}
+......
+\end{document}
+\end{tcblisting}
+
+
+\clearpage
+
+\section{神马浮云 Beamer 主题 Heavenly Clouds Beamer Theme \texttt{beamerthemeHeavenlyClouds.sty}}
+
+这个Beamer主题是我一次病中摸鱼摸出æ¥çš„,脑洞略大。æ¯ä¸€é¡µçš„背景的云彩纹样,ä½ç½®ã€å¤§å°ã€æ·±æµ…都是éšæœºçš„,所以如果内容页数比较多,编译时è¿ç®—å¯èƒ½ä¼šæ¯”较花时间,请自行斟酌使用此主题。
+
+\bigskip
+
+\begin{tcblisting}{listing side comment,title={使用范例},pdf comment={heavenlyclouds-sample.pdf}}
+\documentclass{ctexbeamer}
+\usetheme{HeavenlyClouds}
+
+\author{林莲æž}
+\title{神马浮云\\Beamer主题}
+\subtitle{\texttt{pgfornament-han}附录ç¦åˆ©}
+
+\begin{document}
+
+\begin{frame}[noframenumbering]
+ \maketitle
+\end{frame}
+
+\section{简介一}
+
+\begin{frame}[fragile,allowframebreaks]
+ \frametitle{此主题脑洞略大}
+ ...
+\end{frame}
+...
+\end{document}
+\end{tcblisting}
+
+一些注æ„事项:
+\begin{itemize}
+ \item Mac 或 Linux 系统上,\texttt{ctex}是ä¸æ供隶书\mintinline{latex}{\lishu}的,请自己设定。例:
+
+ \mintinline{latex}{\providecommand{\lishu}{\CJKfontspec{Libian SC}[BoldFont=Baoli SC,Scale=1.2]}}
+
+ \item å¯ä»¥ç”¨ \mintinline{latex}{\simpleprogressmarker} 以简å•åœ†ç‚¹ä»£æ›¿è¿›åº¦æ¡ä¸Šçš„神马。
+
+ \item 标题页的寿字纹,å¯ä»¥ç”¨å„自高校的标志代替。中国高校校徽很多都是圆形的。确ä¿ä¸€ä¸‹èƒŒæ™¯æ˜¯é€æ˜Žè‰²çš„ png 或 pdf 档就å¯ä»¥äº†ã€‚
+
+ \mintinline{latex}{\titlegraphic{\includegraphics[width=2cm]{logo}}}
+
+
+ \item 也å¯ä»¥åœ¨å¯¼è¨€åŒºåŠ ä¸€å¥ \mintinline{latex}{\alttitlecircle},会得到å¦ä¸€ç§æ ‡é¢˜é¡µçš„装饰纹样。效果如下:
+
+ \begin{tikzpicture}%[transform shape,scale=0.5]
+ \newbox{\circleelem}%
+ \savebox{\circleelem}{%
+ \tikzset{pgfornamentstyle/.style={transform shape}}%
+ \pgfornamenthan[width=0.5236cm,
+ color=殷红!80!black,
+ symmetry=h]{74}%
+ }
+ \begin{scope}[decoration={markings, mark=between positions 0 and 1 step 0.5236cm
+ with { \node[transform shape,inner sep=0pt,outer sep=0pt]{\usebox{\circleelem}}; }} ]
+ \path [postaction={decorate}] circle (1cm);
+ \end{scope}%
+ \node {\pgfornamenthan[width=1.25cm,color=殷红]{56}};
+ \end{tikzpicture} \emph{效果有å¯èƒ½æœ‰ç‚¹ç‹‚,请视场åˆæ–Ÿé…Œä½¿ç”¨ã€‚}
+
+\end{itemize}
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdf b/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdf
new file mode 100644
index 0000000000..ac737ddbbb
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.tex b/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.tex
new file mode 100644
index 0000000000..ae40a97587
--- /dev/null
+++ b/graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.tex
@@ -0,0 +1,66 @@
+% !TEX program = xelatex
+\documentclass{ctexbeamer}
+
+\usetheme{Xiaoshan}
+
+\author{林莲æž}
+\title{è§å±±Beamer主题}
+\subtitle{\texttt{pgfornament-han}附录ç¦åˆ©}
+
+\begin{document}
+
+\begin{frame}
+ \maketitle
+\end{frame}
+
+\section{简介}
+
+\begin{frame}
+ \frametitle{其实是 Metropolis 主题的魔改}
+ \begin{itemize}
+ \item 改了颜色(用了 \texttt{cncolours.sty})
+ \item 加入 \texttt{pgfornament-han} 汉风纹样元素
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{为什么å«ã€Œè§å±±ã€ï¼Ÿ}
+ \begin{itemize}
+ \item 以城市å字命å主题,是 Beamer 的一个传统
+ \item 作为\texttt{pgfornament-han}的实战å°è¯•ï¼Œç”¨åœ¨äº† \LaTeX{} Studio 工作室的一次直播活动的æ料上
+ \item 直播在{\kaishu æ­å·žè§å±±åŒº}进行
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[standout]
+作为强调的一个 standout 页é¢
+\end{frame}
+
+\section{充版é¢}
+
+\begin{frame}[allowframebreaks]
+ \frametitle{å„ç§ block}
+
+ \begin{block}{Metropolis èµ°æžç®€é£Ž}
+ 因此「è§å±±ã€ä¸»é¢˜ä¹Ÿèµ°æžç®€é£Žã€‚
+ \end{block}
+
+ \begin{exampleblock}{Metropolis èµ°æžç®€é£Ž}
+ 因此「è§å±±ã€ä¸»é¢˜ä¹Ÿèµ°æžç®€é£Žã€‚
+ \end{exampleblock}
+
+ \begin{alertblock}{Metropolis èµ°æžç®€é£Ž}
+ 因此「è§å±±ã€ä¸»é¢˜ä¹Ÿèµ°æžç®€é£Žã€‚
+ \end{alertblock}
+
+ \begin{theorem}[Metropolis èµ°æžç®€é£Ž]
+ 因此「è§å±±ã€ä¸»é¢˜ä¹Ÿèµ°æžç®€é£Žã€‚
+ \end{theorem}
+
+ \begin{proof}[Metropolis èµ°æžç®€é£Ž]
+ 因此「è§å±±ã€ä¸»é¢˜ä¹Ÿèµ°æžç®€é£Žã€‚
+ \end{proof}
+\end{frame}
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/pgfplots/INSTALL b/graphics/pgf/contrib/pgfplots/INSTALL
new file mode 100644
index 0000000000..27309b546c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/INSTALL
@@ -0,0 +1 @@
+Please search for pgfplots.tds.zip and install that one into a local texmf branch (which is typically simpler). This release is intended to satisfy CTAN package browsing policies.
diff --git a/graphics/pgf/contrib/pgfplots/README b/graphics/pgf/contrib/pgfplots/README
new file mode 100644
index 0000000000..b844603759
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/README
@@ -0,0 +1,402 @@
+pgfplots - Create normal/logarithmic plots in two and three dimensions for LaTeX/TeX/ConTeXt.
+
+pgfplotstable - Loads, rounds, formats and postprocesses numerical tables.
+
+PGFPlots draws high--quality function plots in normal or logarithmic scaling
+with a user-friendly interface directly in TeX. The user supplies axis labels,
+legend entries and the plot coordinates for one or more plots and PGFPlots
+applies axis scaling, computes any logarithms and axis ticks and draws the
+plots. It supports line plots, scatter plots, piecewise constant plots, bar
+plots, area plots, mesh and surface plots, patch plots, contour plots, quiver
+plots, histogram plots, polar axes, ternary diagrams, smith charts and some
+more.
+
+Pgfplots is based on Till Tantau's package PGF/TikZ (pgf).
+
+Pgfplotstable displays numerical tables rounded to desired precision in various
+display formats, for example scientific format, fixed point format or integer,
+using TeX's math facilities for pretty printing. Furthermore, it provides
+methods for table postprocessing.
+
+Please take a look at
+ doc/latex/pgfplots/pgfplots.pdf
+and
+ doc/latex/pgfplots/pgfplotstable.pdf.
+
+Copyright 2007-2017 by Christian Feuersaenger.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+HISTORY:
+1.16:
+- fixed bug #111 [fillbetween] strange behavior when `soft clip` is used and one of the paths touches the axis border
+- fixed bug #183: Nan in the first line of a numeric table was interpreted as column name
+- fixed bug #187 Wrong output from mod in axis
+- fixed bug #109 `visualization depends on` doesn't work with table from pgfplotstable is now fixed for numeric values
+- fixed bug: \pgfplotstablenew was unable to create tables with 0 or 1 rows.
+- fixed bug: 114 fillbetween suffered from inaccuracy (produced invisible segments)
+- fixed bug #139 [fillbetween] numerical issues with dense points
+- fixed bug #153: \begin{tikzpicture}[scale=...] combined with fill between or
+ 'set layers' resulted in a wrong bounding box
+- \addplot gnuplot: autodetected unbounded coordinates
+- new feature: parse tick positions using math parser (tracker #69)
+- new feature: programmatic access to axis coordinates for given canvas coordinates (\pgfplotspointgetcoordinates, tracker 68)
+- new feature: 'x filter/.append expression', a stackable variant of 'x filter/.expression'
+
+1.15: bugfix release
+- fixed regression: fpu caused forest library to fail as soon as one loads pgfplots
+- fixed bug #149 : \edef{...\to...} was wrong and caused \pgfplotstablevertcat to fail
+- usability: added support for \plotnum during \addplot
+- fixed bug 134 [statistics] Histogram with custom `symbolic coords`
+- fixed bug 140 (pgfplotstable read does not process empty rows anymore)
+- fixed bug 150 Usage of \pgfkeysvalueof in xtick leads to 'Dimension too large'
+- fixed bug 105 [manual] `xticklabel pos=upper` is not documented
+ in fact, some of the documented positions for 'xtick pos' where
+ unavailable.
+- fixed bug 155 [groupplots] `scaled ticks` does not recognize `ticklabels at`
+- fixed bug 160 `xticklabels` also used for `extra x tick labels` if they are not given explicitely
+- implemented partial solution for bug 154 [log mode] sampling in 2D and 3D different
+- fixed bug 163 [bar-chart] bars dissapear when values are >xmax/ymax
+- fixed bug 81 cannot use dollar sign as 'comment char'
+- fixed bug 91 Hashes in data
+- fixed bug 165 [minor ticks] minor tick drawn after the last xtick
+- fixed bug 176: 2d plot expression in 3d axis fails for lualatex
+
+1.14
+- new feature: 'contour filled' (compat=1.14)
+- new feature: building colormaps from other colormaps (see "Building Colormaps based on other Colormaps" in the manual)
+- new feature: non-uniform colormaps (compat=1.14)
+- new feature: colormaps defined on position of arbitrary magnitude
+- new feature: colorbar as legend
+- new feature: 'colorbar style={xtick=data}' positions tick labels at colormap positions
+- fixed bug: pgfplots now handles incompatible changes of luatex
+ loading \usepackage{pgfplots} _before_ pgf also allows makes older
+ PGF versions compatible with luatex
+- fixed bug: incompatibility between units + groupplots (bug 119)
+- fixed bug: 'axis line shift' did not respect labels
+- fixed bug: layers for axis lines were not respected
+- fixed bug: two axes with fillbetween in the same picture failed due to clip paths on layers
+- fixed bug: quiver plots with 'every arrow' failed to evaluate arrow tip length arguments
+- fixed bug: \usepgfplotslibrary{colorbrewer}: colormap 'PuOr' was defined in reverse order
+
+1.13:
+- fixed bug: incompatiblity between fillbetween and babel
+- fixed bug: 'compat=1.9' (or newer) failed to work with log bar plots
+- fixed bug: javascript incompatibility between Acrobat reader DC and clickable lib
+- fixed bug in polar axes: repaired default axis label positions
+- fixed bug in polar axes: repaired support for sloped descriptions
+- fixed bug: 'axis line style={draw=none}' had no effect unless one had 2d boxed axes
+- fixed bug: point meta expressions with '=' inside of them which caused compilation errors
+- fixed bug: compat=1.12 combined with interrupted plots (by empty line) failed to work
+- fixed bug: compat=1.12 combined with lualatex evaluated relational operations (<, ==) with the wrong operator precedence
+- fixed bug: fixed floor and ceil functions
+- fixed bug: 'set layers' broke alignment features with different manifestations
+ ('set layers' together with fill between in group plots, together with at={} key, together with anchor)
+- fixed bug: fill between and group plots: fill-between graphics was missing (list of layers was lost)
+- fixed bug: \addplot graphics {\newFile{P.pdf}}; failed to properly expand the file name
+- fixed bug: fill between + error bars resulted in compilation error
+- fixed bug: stacked plots occasionally used a wrong coordinate mapping
+- fixed bug: provided suitable default legends for xbar and xbar stacked
+- fixed bug: 'dateplot' now computes missing 'date ZERO' automatically. 'date ZERO' is managed automatically.
+- new feature: Added support for search paths to find data files (table/search path)
+- new feature: 'xtick distance' allows to define tick positions by distance
+- new feature: "axis line shift=10pt" shifts axis lines together with all their descriptions
+- new feature: 'matrix plot' (alias 'imagesc') which allows cell-based matrix plots
+- new feature: unbounded point meta in mesh plots will be treated like an invisible patch
+- new feature: added high quality colormap 'viridis' (use 'colormap name=viridis' to activate it)
+- new feature: ensured that 'shader=flat' returns the same result for every choice of 'z buffer' (starting with compat=1.13)
+- new feature: utility function \pgfplotsforeachungrouped: added support for \breakforeach
+- new feature: compat=1.13: activates sampling routine with less rounding errors
+- new feature: cycle multiindex list (uses the 'ith' element for every provided sub-list)
+- new feature: 'color of colormap=<value>' or 'color of colormap=<value> of <colormap name>'
+- new feature: 'index of colormap=<value>' or 'index of colormap=<value> of <colormap name>'
+- new feature: cycle list={[of colormap]}
+- new feature: cycle list={[colors of colormap={0,100,500,100} of viridis]}
+- new feature: cycle list={[indices of colormap={0,1,2,3} of hot]}
+- new feature: added support for 'stack negative=on previous|separate' which allows separate plots for '+' and '-' (useful for bar plots)
+- new feature: added support for 'colormap access=direct' combined with 'shader=flat mean' and 'shader=interp':
+ it previously used to interpolate indices instead of colors
+- new feature: \closedcycle now produces useful results for 3d line plots
+- new feature: added \usetikzlibrary{colorbrewer} and \usepgfplotslibrary{colorbrewer}
+- new feature: added 'colormap access=piecewise constant'
+- new feature: added rudimentary support for "Filled Contours" (based on 'colormap access=piecewise constant')
+- new feature: added methods to build colormaps based on other colormaps using
+ "color of colormap", "index of colormap", "colors of colormap", "samples of colormap", and "indices of colormap"
+
+1.12.1: minor bugfix release
+- fixed bug: incompatibility of 1.12 with unicode-math
+- fixed bug: lua backend failed to work with table input and dependency on \coordindex
+- fixed bug: lua backend failed with 'forget plot'
+
+1.12: scalability + performance
+- scalability: reduced TeX memory consumption for huge inline tables
+- scalability: lualatex allows bigger 3d graphics
+- scalability: lualatex now reduces compilation time for huge 3d graphics
+ (requires \pgfplotsset{compat=newest} at the time of this writing)
+ surf shader=faceted: time reduced to 61% of pdflatex
+ (\addplot3[surf,samples=70] {exp(-x^2-y^2 +x*y)})
+
+ surf shader=interp: time reduced to 25% of pdflatex
+ (\addplot3[surf,shader=interp,samples=70] {exp(-x^2-y^2 +x*y)})
+
+ surf shader=interp, parametric: time reduced to 36% of pdflatex
+ (\addplot3[surf,shader=interp,z buffer=sort, samples=50,domain=-1:0,y domain=0:2*pi] ({sqrt(1-x^2) * cos(deg(y))}, {sqrt( 1-x^2 ) * sin(deg(y))}, x);)
+
+ surf shader=faceted, parametric: time reduced to 40% of pdflatex
+ (\addplot3[surf,z buffer=sort, samples=50,domain=-1:0,y domain=0:2*pi] ({sqrt(1-x^2) * cos(deg(y))}, {sqrt( 1-x^2 ) * sin(deg(y))}, x);)
+
+- scalability: lualated now reduces compilation time for boxplots.
+ 10000 input points from table: time reduced to 23% of pdflatex
+- fixed bug: 3d axes where all axes used log scale produced compile failure
+- fixed bug: axis equal did not respect "disabledatascaling"
+- fixed bug: mesh legend was confused by color input=explicit
+- fixed bug: colorbar style did not reset zmin/zmax
+- fixed bug: memory allocation in FPU consumed too much memory
+- fixed bug: boxplots: removed compilation error due to spurious spaces in options list
+- fixed bug: boxplots: now uses standard quantile estimators: has all 9 estimators of R and uses the same as in Excel as default (as of compat=1.12)
+- fixed bug: boxplots: sometimes failed to compute boxplot statistics for special inputs
+- fixed bug: boxplots: now, it sets 'mark=*' for outliers if there is no mark (compat=1.12)
+- fixed regression: compat=1.11 broke arcs inside of axis
+- new feature: ensured that arcs inside of axis make use of 'axis cs' and 'axis direction cs' automatically
+- new feature: ensured that (0:1) is evaluated with axis cs
+- fixed bug: precision of transformation cartesian to polar was too low (added atan2 to fpu)
+- fixed bug: z buffer caused 'mesh legend' to produce a compile error
+- new feature: added 'y filter/.expression={y==3 ? nan : y}' to simplify coordinate filters
+
+1.11: usability + bug fixes.
+- new feature: "hide obscured x ticks=false" to disable the feature which hides ticks
+- simplified UI for symbolic coords: now, it accepts unexpandable
+ dictionary entries including umlauts, undefined macros, math mode, ...
+- simplified UI for symbolic coords: added magic prefix
+ [normalized]<number> to allow something like xmin={[normalized]0.7}
+- simplified UI for custom annotations: one does not need to say "axis cs" any longer;
+ coordinates like (1,2) are now automatically interpreted as (axis cs:1,2)
+- new feature: 'type ticklabels with struts' improves baseline alignment of tick labels
+- new feature: 'trig format plots=rad' allows to use radians in trigonometric evaluations
+- simplified 'external lib': added driver auto-detection for pdflatex, lualatex, xelatex, dvips
+ (\usepgfplotslibrary{external}, or, with the next PGF release, \usetikzlibrary{external})
+- simplified UI for \addplot coordinates: now, it expands macros as it goes.
+- new feature: 'intersection segments' now accepts negative indices to count from the last backwards
+- simplified UI: 'intersection segments' now accepts new syntax with 1-based indices (old 0-based are still supported)
+- fixed bug: fillbetween has had a problem with pins on input paths
+- fixed bug: now, 'stacked ignores zero' is no longer applied to error bars.
+- fixed bug: tick lines were drawn incorrectly for centered axis lines in 3d
+- fixed bug: variable=u failed to work in some contexts
+- fixed bug: fill between implicitly activated layers, but did not install the
+ correct layers for grid lines etc.
+- fixed bug: z grid style was applied to y grid style
+- fixed bug: using 'x=1cm' failed to work in axis descriptions (legends)
+- fixed bug: mesh legend failed to work with 'shader=interp'
+- fixed bug: bounding box of shader=interp was wrong if there were transformations.
+- fixed bug: added support for \addplot graphics in ConTeXt
+- fixed bug: external lib failed to work with dvips (since PGF 3.0.0 I suppose); now it produces correct bounding boxes
+- fixed bug: \pgfplotstablenew can now overwrite existing tables.
+- fixed bug: extra ticks near intersections of axis lines were hidden
+- fixed bug: 'intersection segments' did not work with '--cycle'
+- fixed bug: 'intersection segments' did not update the last tikz point
+- fixed bug: tick lines/grid lines have been clipped when they were near the boundary
+- fixed bug: soft clip decoration failed to apply the transformation matrix
+- fixed bug: polar axes and units library resulted in broken bounding box
+- fixed bug: \addplot[stack plots=false] used to work up to 1.8, but failed until now. Fixed.
+- fixed bug: hist/density was broken since some time
+
+
+1.10:
+- new feature: fill between plots (library fillbetween)
+- new feature: concatenate intersection segments (library fillbetween)
+- fixed bug: xelatex failed to run contour external
+- fixed incompatibility with \label and \usepackage{mcaption}
+- fixed bug: histograms produced wrong point meta
+- fixed bug: histograms reported the wrong 'plot name' and confused shifts of bar plots
+
+1.9:
+- new feature: asymmetric error bars
+- new feature: activated math parser for axis limit arguments, arguments in axis cs, and domain argument in log plots
+- new feature: stacked bar plots place their 'nodes near coords' correctly in the middle and print the increment (compat=1.9)
+- new feature: stacked bar plots suppress empty increments (compat=1.9).
+- new feature: 'scatter/position=relative|absolute' allow to position 'nodes near coords' absolutely.
+ use-case: bar plots + nodes near coords which are at, say, y=0 rather than their y value
+- new feature: integration of smooth shadings & auto-CMYK conversion
+ \usepackage[cmyk]{xcolor} or \selectcolormodel{cmyk} will reconfigure pgfplots to use CMYK (document-wide)
+- new feature (advanced audience only): programmatic access to data coordinates during the visualization phase
+ -> allows much more customization for error bars, stacked plots, nodes near coords.
+- wrote beginner tutorials
+- fixed bug: error bars and point meta did not work together
+- fixed bug: stacked plots did not respect 'visualization depends on'
+- fixed bug: luatex 0.76 is not backwards compatible; added version switch
+- fixed bug: ternary library precision has been improved
+- fixed bug: problem with axis limits very close to 0
+- fixed bug: colormap specification limit case produced out of bounds exception
+
+
+1.8:
+- new feature: tight bounding box even if the axis is no box and bb excludes clip path
+- new feature: mesh/color input=explicit
+- new feature: shader=interp now has drivers for both dvipdfmx and xetex
+- new feature: support for more color spaces in colormap definitions
+- new feature: shader=interp and device-level gray colorspaces
+- new feature: 'contour/contour dir=[xyz]' to draw contours in different directions
+- new feature: statistics library with boxplot handler (both boxplot prepared and automatic computation)
+- fixed bug: 3d centered axis lines and label placement (requires compat=1.8 or higher)
+- fixed bug: axis lines and placement of labels, tick scale labels, and reversed axes
+ (requires compat=1.8 or higher)
+- fixed bug: filtering out coords from a mesh plot failed
+- fixed bug: every legend image post was not respected inside of \ref{plotlabel}
+- fixed bug: high-order patches computed the shader=flat mean in a wrong way.
+- fixed bug: remember picture inside of pgfplots axes failed (due to cell picture)
+- fixed bug: now, the tick scale label will be omitted if there are no ticks
+- fixed bug: axis box path was not closed
+- fixed bug: the bounding box was non-empty even if the axis was hidden.
+- fixed bug: auto-alignment of nodes near coords failed for xbar plots
+- fixed bug: providing bar width / bar shift in terms of axis units did
+ not work with [xy]bar and nodes near coords
+- fixed bug: transformation 'data cs=cart' -> polar is more robust now
+- fixed bug: code did not compile against pgf 2.00
+- fixed bug: patch plot lib and shader=interp,patch type=biquadratic
+- fixed bug: context path searching issue (pgfplots.lua)
+- fixed bug: shader=interp and dvips driver
+- fixed bug: error bars with explicit relative input failed
+
+1.7
+- added feature: 'bar shift' and 'bar width' can now be expressed in terms of axis units (compat=1.7 or higher)
+- fixed incompatibility regression pgfplots 1.6.1 pgf 2.10: layers
+- fixed incompatibility pgfplots and imakeidx
+- added feature: 'enlargelimits={abs=1cm}', i.e. enlarge by dimension rather than unit
+- patchplots lib: added patch type=bicubic
+- patchplots lib: added support for global paths (fillable)
+- patchplots lib: added patch type sampling feature
+- patchplots lib: improved usability (documentation and improvements)
+- fixed path issues in context: moved lua input file to tex/generic
+- fixed bug: \ref{legendimage} inside of legend text was wrong.
+
+1.6.1:
+- fixed incompatibility lualatex,shader=interp, and german package (introduced in 1.6)
+
+1.6:
+- added support for layered graphics (main use case: multiple axes and layers)
+- added support for second colormap in mesh plots (mesh/interior colormap name)
+- added support for scopes inside of axes
+- contour plots: added ability to provide list of discrete labels (mesh/levels)
+- empty lines are interpreted as interruptions in data plots (was undocumented since 1.4)
+- added more scaling options to 'scale mode=scale uniformly' (affects axis equal in 3d
+ and \addplot3 graphics)
+- fixed wrong implementation of 'axis equal' and 'unit vector ratio' in 3d
+ (backwards compatible for 2d, but not for 3d - the 3d implementation was plain wrong)
+- fixed incompatibility of lualatex and shader=interp
+- fixed bugs/added features around \addplot3 graphics
+- fixed bug: colorbar did not support ymode=log
+- fixed a couple of minor bugs
+- fixed bounding box computation for clip=false,axis lines=none
+
+1.5.1:
+- more operations for FPU library (==, !=,<=,>=,?)
+- fixed bug in usage of decorations in \addplot
+- bugfix for contour prepared format=matlab
+- added 'const plot mark mid' and 'jump mark mid' plot handlers
+- nodes on a plot (\addplot ... node[pos=<fraction>] {};)
+- 'trim axis group left' and 'trim axis group right'
+- bugfixes for polar axes and log+stacked plots
+- added style 'log ticks with fixed point'
+- introduced patched tikz paths to simplify circles and ellipses within an axis
+- patchplots lib: patch type=polygon
+- some more bugfixes
+
+1.5:
+ - Contour plots,
+ - Histograms,
+ - Quiver plots,
+ - patch plots (library)
+ - Triangle Meshes
+ - Bilinear Elements
+ - Quadratic Triangles
+ - Biquadratic Quadrilaterals
+ - Coons Patches
+ - Discrete colorbars,
+ - Table sorting,
+ - Linear regression,
+ - Ternary diagrams,
+ - Tieline Plots
+ - Smith Charts
+ - Polar axes,
+ - Empty lines in input files result in interrupted plots,
+ - PDF user defined coordinate mouse popups
+ - CMYK colormaps and shadings,
+ - new markers and cycle lists
+ - access to axis limits,
+ - \addplot3 graphics: pgfplots draws an appropriate axis for a three-dimensional(!) external png graphics
+ - 3D axes: support to provide explicit unit vectors:
+ - explicit unit vectors
+ - explicit unit vectors which are uniformly rescaled to match width/height
+ - 3D axes: improved support for unit vector ratios
+ - improvements of the groupplot styles
+ - preliminary support for (2d) bar plots in 3d axes
+ - new shader 'faceted interp'
+ - table package:
+ - 'every nth row' style
+ - 'comment chars' key to define comment characters in input files
+ - 'skip first n' style
+ - lots of smaller bugfixes (see ChangeLog for details)
+
+
+1.4.1:
+- improved compatibility to gnuplot 4.4
+
+1.4:
+Version 1.4 contains several new features, mostly work on details.
+It fixes many bugs and provides the following improvements:
+- detached legends
+- detached colorbars
+- ybar (and similar plots) can now be mixed with other plot types
+ like line plots.
+- improved legend formatting
+- added 'restrict x to domain*' which cups coordinates outside of a specified domain (same for y and z)
+- Added support for linear regression
+- Inline tables,
+- Lots of bug fixes
+
+The next version will make a greater step when it is stable.
+
+
+1.3.1:
+Version 1.3.1 is a bugfix release containing
+- improved parametric plots with gnuplot
+- improved normalsize, small and footnotesize scale styles and added tiny
+- a lot of bugfixes
+
+1.3:
+- improvements for two dimensional visualization, among them
+ - axis equal,
+ - color bars,
+ - nodes near coords,
+ - jumps in plots,
+ - improved description positioning,
+ - reverseable axis directions,
+ - simpler alignment of adjacent axes,
+ - units and a simplified user interface,
+- new three dimensional line, scatter, mesh and surface plots,
+- a copy of the automatic pdf externalization library,
+- an improved manual enhanced with a lot of pdf cross references.
+
+1.2.2:
+- fixed a problem with the samples key,
+- provides some smaller fixes and some manual improvements.
+- added plot graphics.
+
+1.2:
+- completely rewritten math expression parser with extended data range,
+- colormaps for scatter plots
+- fine tuning for plot parameters.
+- table package has been extended and is now a fully featured table typesetting, computing and postprocessing tool.
+
diff --git a/graphics/pgf/contrib/pgfplots/doc/Makefile b/graphics/pgf/contrib/pgfplots/doc/Makefile
new file mode 100644
index 0000000000..5f9be6c1a5
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/Makefile
@@ -0,0 +1,6 @@
+
+pgfplotsexample-context.pdf: FORCE
+ . ~/context/tex/setuptex && context pgfplotsexample-context
+ @echo "Context MkIV compiled"
+
+FORCE:
diff --git a/graphics/pgf/contrib/pgfplots/doc/TeX-programming-notes.pdf b/graphics/pgf/contrib/pgfplots/doc/TeX-programming-notes.pdf
new file mode 100644
index 0000000000..ce7d1fe4f7
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/TeX-programming-notes.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf b/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf
new file mode 100644
index 0000000000..b8dfc2f043
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.pdf b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.pdf
new file mode 100644
index 0000000000..3847562469
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tex b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tex
new file mode 100644
index 0000000000..85de279325
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tex
@@ -0,0 +1,48 @@
+%% ConTeXt file
+
+\usemodule[pgfplots]
+\pgfplotsset{compat=1.8}% <-- moves axis labels near ticklabels (respects tick label widths)
+
+\starttext
+Using Con{\TeX}t.
+
+\starttikzpicture
+ \startloglogaxis
+ \addplot coordinates {
+ (1,1)
+ (16,16)
+ (32,64)
+ };
+ \stoploglogaxis
+\stoptikzpicture
+
+\starttikzpicture
+ \startloglogaxis[
+ xlabel=Cost,
+ ylabel=Error]
+ \addplot coordinates {
+ (5, 8.31160034e-02)
+ (17, 2.54685628e-02)
+ (49, 7.40715288e-03)
+ (129, 2.10192154e-03)
+ (321, 5.87352989e-04)
+ (769, 1.62269942e-04)
+ (1793, 4.44248889e-05)
+ (4097, 1.20714122e-05)
+ (9217, 3.26101452e-06)
+ };
+ \addplot coordinates {
+ (7, 8.47178381e-02)
+ (31, 3.04409349e-02)
+ (111, 1.02214539e-02)
+ (351, 3.30346265e-03)
+ (1023, 1.03886535e-03)
+ (2815, 3.19646457e-04)
+ (7423, 9.65789766e-05)
+ (18943, 2.87339125e-05)
+ (47103, 8.43749881e-06)
+ };
+ \legend{Case 1,Case 2}
+ \stoploglogaxis
+\stoptikzpicture
+\stoptext
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tuc b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tuc
new file mode 100644
index 0000000000..483f8ab2b8
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.tuc
@@ -0,0 +1,217 @@
+local utilitydata = { }
+
+utilitydata.comment={
+ ["escape"]="[===[ ... ]===]",
+ ["file"]="pgfplotsexample-context",
+ ["format"]="cont-en",
+ ["stamp"]="2017.06.04 16:55",
+ ["version"]=1.3,
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.variables then utilitydata.job.variables = { } end
+
+utilitydata.job.variables.checksums={
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.variables then utilitydata.job.variables = { } end
+
+utilitydata.job.variables.collected={
+ ["macros"]={},
+ ["randomseed"]=0.39339454117855,
+ ["sectionblockorder"]={},
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.structure then utilitydata.job.structure = { } end
+
+utilitydata.job.structure.collected={
+ ["branches"]={},
+ ["name"]="pgfplotsexample-context",
+ ["type"]="text",
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.positions then utilitydata.job.positions = { } end
+
+utilitydata.job.positions.collected={
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.passes then utilitydata.job.passes = { } end
+
+utilitydata.job.passes.collected={
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.datasets then utilitydata.job.datasets = { } end
+
+utilitydata.job.datasets.collected={
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.pagestates then utilitydata.job.pagestates = { } end
+
+utilitydata.job.pagestates.collected={
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.specials then utilitydata.structures.specials = { } end
+
+utilitydata.structures.specials.collected={
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.counters then utilitydata.structures.counters = { } end
+
+utilitydata.structures.counters.collected={
+ ["chemical"]={
+ { 0 },
+ },
+ ["combination"]={
+ { 0 },
+ },
+ ["endnote"]={
+ { 0 },
+ },
+ ["figure"]={
+ { 0 },
+ },
+ ["footnote"]={
+ { 0 },
+ },
+ ["formula"]={
+ { 0 },
+ },
+ ["graphic"]={
+ { 0 },
+ },
+ ["intermezzo"]={
+ { 0 },
+ },
+ ["itemgroup:itemize"]={
+ { 0 },
+ },
+ ["linenote"]={
+ { 0 },
+ },
+ ["paragraph"]={
+ { 0 },
+ },
+ ["realpage"]={
+ { 1 },
+ },
+ ["subpage"]={
+ { 1 },
+ },
+ ["table"]={
+ { 0 },
+ },
+ ["userpage"]={
+ { 1 },
+ },
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.lists then utilitydata.structures.lists = { } end
+
+utilitydata.structures.lists.collected={
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.pages then utilitydata.structures.pages = { } end
+
+utilitydata.structures.pages.collected={
+ {
+ ["block"]="bodypart",
+ ["number"]=1,
+ ["numberdata"]=1,
+ ["prefixdata"]=2,
+ ["state"]="start",
+ },
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.references then utilitydata.structures.references = { } end
+
+utilitydata.structures.references.collected={
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.references then utilitydata.structures.references = { } end
+
+utilitydata.structures.references.referred={
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.objects then utilitydata.job.objects = { } end
+
+utilitydata.job.objects.collected={
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.synonyms then utilitydata.structures.synonyms = { } end
+
+utilitydata.structures.synonyms.collected={
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.registers then utilitydata.structures.registers = { } end
+
+utilitydata.structures.registers.collected={
+}
+
+if not utilitydata.structures then utilitydata.structures = { } end
+if not utilitydata.structures.blocks then utilitydata.structures.blocks = { } end
+
+utilitydata.structures.blocks.collected={
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.files then utilitydata.job.files = { } end
+
+utilitydata.job.files.collected={
+}
+
+if not utilitydata.publications then utilitydata.publications = { } end
+
+utilitydata.publications.collected={
+}
+
+if not utilitydata.job then utilitydata.job = { } end
+if not utilitydata.job.fileobjreferences then utilitydata.job.fileobjreferences = { } end
+
+utilitydata.job.fileobjreferences.collected={
+}
+
+utilitydata.job.packed={
+ ["index"]={
+ {
+ ["conversionset"]="pagenumber",
+ },
+ {
+ ["connector"]="–",
+ ["prefix"]="no",
+ ["set"]="part",
+ },
+ },
+ ["keys"]={
+ ["directives"]=true,
+ ["metadata"]=true,
+ ["numberdata"]=true,
+ ["numbers"]=true,
+ ["pagedata"]=true,
+ ["prefixdata"]=true,
+ ["processors"]=true,
+ ["sectiondata"]=true,
+ ["specification"]=true,
+ },
+ ["skip"]={
+ ["datasets"]=true,
+ ["userdata"]=true,
+ },
+ ["version"]=1.02,
+}
+
+return utilitydata \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.pdf b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.pdf
new file mode 100644
index 0000000000..e0cdc5707e
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.tex b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.tex
new file mode 100644
index 0000000000..3ef5373e11
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-plain.tex
@@ -0,0 +1,49 @@
+%% plain tex file
+
+\def\pgfsysdriver{pgfsys-pdftex.def}
+\input pgfplots.tex
+\pgfplotsset{compat=1.12}% <-- moves axis labels near ticklabels (respects tick label widths)
+
+Using plain-\TeX.
+
+\tikzpicture
+ \loglogaxis
+ \addplot coordinates {
+ (1,1)
+ (16,16)
+ (32,64)
+ };
+ \endloglogaxis
+\endtikzpicture
+
+\tikzpicture
+ \loglogaxis[
+ xlabel=Cost,
+ ylabel=Error]
+ \addplot coordinates {
+ (5, 8.31160034e-02)
+ (17, 2.54685628e-02)
+ (49, 7.40715288e-03)
+ (129, 2.10192154e-03)
+ (321, 5.87352989e-04)
+ (769, 1.62269942e-04)
+ (1793, 4.44248889e-05)
+ (4097, 1.20714122e-05)
+ (9217, 3.26101452e-06)
+ };
+ \addplot coordinates {
+ (7, 8.47178381e-02)
+ (31, 3.04409349e-02)
+ (111, 1.02214539e-02)
+ (351, 3.30346265e-03)
+ (1023, 1.03886535e-03)
+ (2815, 3.19646457e-04)
+ (7423, 9.65789766e-05)
+ (18943, 2.87339125e-05)
+ (47103, 8.43749881e-06)
+ };
+ \legend{Case 1,Case 2}
+ \endloglogaxis
+\endtikzpicture
+
+\bye
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.pdf b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.pdf
new file mode 100644
index 0000000000..97c36f0ca5
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.tex b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.tex
new file mode 100644
index 0000000000..e5ddfa8a4d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotsexample.tex
@@ -0,0 +1,58 @@
+
+\documentclass[a4paper]{article}
+
+% for dvipdfm:
+%\def\pgfsysdriver{pgfsys-dvipdfm.def}
+\usepackage{pgfplots}
+\pgfplotsset{compat=1.8}% <-- moves axis labels near ticklabels (respects tick label widths)
+
+\begin{document}
+\begin{figure}
+ \centering
+ \begin{tikzpicture}
+ \begin{loglogaxis}
+ \addplot coordinates {
+ (1,1)
+ (16,16)
+ (32,64)
+ };
+ \end{loglogaxis}
+ \end{tikzpicture}
+ \caption{A small example}
+\end{figure}
+
+\begin{figure}
+ \centering
+ \begin{tikzpicture}
+ \begin{loglogaxis}[
+ xlabel=Cost,
+ ylabel=Error]
+ \addplot coordinates {
+ (5, 8.31160034e-02)
+ (17, 2.54685628e-02)
+ (49, 7.40715288e-03)
+ (129, 2.10192154e-03)
+ (321, 5.87352989e-04)
+ (769, 1.62269942e-04)
+ (1793, 4.44248889e-05)
+ (4097, 1.20714122e-05)
+ (9217, 3.26101452e-06)
+ };
+ \addplot coordinates {
+ (7, 8.47178381e-02)
+ (31, 3.04409349e-02)
+ (111, 1.02214539e-02)
+ (351, 3.30346265e-03)
+ (1023, 1.03886535e-03)
+ (2815, 3.19646457e-04)
+ (7423, 9.65789766e-05)
+ (18943, 2.87339125e-05)
+ (47103, 8.43749881e-06)
+ };
+ \legend{Case 1,Case 2}
+ \end{loglogaxis}
+ \end{tikzpicture}
+ \caption{A larger example}
+\end{figure}
+
+\end{document}
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotstable.pdf b/graphics/pgf/contrib/pgfplots/doc/pgfplotstable.pdf
new file mode 100644
index 0000000000..15b9e119c2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotstable.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplots/doc/pgfplotstodo.pdf b/graphics/pgf/contrib/pgfplots/doc/pgfplotstodo.pdf
new file mode 100644
index 0000000000..702b0ad34e
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/doc/pgfplotstodo.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.m b/graphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.m
new file mode 100644
index 0000000000..cf9111e9ac
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.m
@@ -0,0 +1,343 @@
+function matlab2pgfplots(varargin )
+% matlab2pgfplots(outfile )
+% matlab2pgfplots( outfile, OPTIONS )
+%
+% Generate LaTeX code for use in package pgfplots to
+% draw line plots.
+%
+% It will use every (2d) line plot in the figure specified by handler fighandle.
+%
+% It understands
+% - axis labels,
+% - legends,
+% - any 2d line plots,
+% - line styles/markers (in case of styles=1),
+% - tick positions, labels and axis limits (in case of axes=1).
+%
+% Linestyles and markers will follow as an option. However, pgfplots has its
+% own line styles which may be appropriate.
+%
+% Although pgfplots can also handle bar and area plots, this script is not yet
+% capable of converting them. Feel free to modify it and send the final version
+% to me!
+%
+% OPTIONS are key value pairs. Known options are
+% - 'fig',HANDLE
+% a figure handle (default is 'gcf').
+% - 'styles',0|1
+% a boolean indicating whether line styles, markers and colors shall be exported (default 1).
+% - 'axes',0|1
+% a boolean indicating whether axis ticks, tick labels and limits shall be exported (default 0).
+% - 'maxpoints',100000
+% an integer denoting the maximum number of points exported to tex. If the actual number is larger,
+% the data will be interpolated to 'maxpoints'. The interpolation assumes
+% parametric plots if x and y are not monotonically increasing.
+%
+% See
+% http://www.ctan.org/pkg/pgfplots
+% for details about pgfplots.
+%
+%
+%
+% Copyright Christian Feuersaenger 2008
+%
+% This script requires Matlab version 7.4 (or above).
+parser = inputParser;
+
+parser.addRequired( 'outfile', @(x) ischar(x) );
+parser.addParamValue( 'fig', gcf, @(x) ishandle(x) );
+parser.addParamValue( 'styles', 1, @(x) x==0 || x==1 );
+parser.addParamValue( 'axes' , 0, @(x) x==0 || x==1 );
+parser.addParamValue( 'maxpoints', 100000, @(x) isnumeric(x) );
+
+parser.parse( varargin{:} );
+
+
+fighandle = parser.Results.fig;
+
+lineobjs = findobj(fighandle, 'Type', 'line' );
+axesobj = findobj( fighandle, 'Type', 'axes' );
+
+% As far as I know, 'scatter' and 'scatter3' produce groups of this class:
+scatterobjs = findobj(fighandle, 'Type', 'hggroup' );
+lineobjs = [ lineobjs scatterobjs ];
+
+legendobj = findobj( fighandle, 'tag', 'legend' );
+if length(legendobj) > 0
+ allchildsoflegend = [ findobj( legendobj ) ];
+ lineobjs = setdiff( lineobjs, allchildsoflegend );
+ axesobj = setdiff( axesobj, allchildsoflegend );
+end
+
+FID=fopen( parser.Results.outfile, 'w' );
+assert( FID >= 0, [ 'could not open file ' parser.Results.outfile ' for writing' ] );
+
+ENDL=sprintf('\n');
+TAB=sprintf('\t');
+fwrite( FID, [ ...
+ '\begin{tikzpicture}%' ENDL ...
+ '\begin{axis}'] );
+
+xislog = 0;
+yislog = 0;
+
+if length(axesobj) > 0
+ axis = axesobj(1);
+ xlabel = get( get(axis, 'XLabel'), 'String');
+ ylabel = get( get(axis, 'YLabel'), 'String');
+ zlabel = get( get(axis, 'ZLabel'), 'String');
+ xscale = get(axis,'XScale');
+ yscale = get(axis,'YScale');
+
+ axisoptions = {};
+ if length(xlabel) > 0
+ axisoptions = [ axisoptions [ 'xlabel={' xlabel '}'] ];
+ end
+ if length(ylabel) > 0
+ axisoptions = [ axisoptions ['ylabel={' ylabel '}'] ];
+ end
+ if strcmp(xscale,'log')
+ xislog=1;
+ axisoptions = [ axisoptions ['xmode=log'] ];
+ end
+ if strcmp(yscale,'log')
+ yislog = 1;
+ axisoptions = [ axisoptions ['ymode=log'] ];
+ end
+ if parser.Results.axes
+ for k = 'xy'
+ L = get(gca, [ k 'Lim'] );
+ axisoptions = [ axisoptions [ k 'min=' num2str(L(1)) ] ];
+ axisoptions = [ axisoptions [ k 'max=' num2str(L(2)) ] ];
+ end
+
+ for k = 'xy'
+ L = get(gca, [ k 'Tick'] );
+ opt = [ k 'tick={' ];
+ for q=1:length(L)
+ if q>1
+ opt = [opt ',' ];
+ end
+ opt = [opt num2str(L(q)) ];
+ end
+ opt = [ opt '}' ];
+ axisoptions = [axisoptions opt ];
+ end
+
+ end
+
+
+ axisoptstr = [];
+ for i = 1:length(axisoptions)
+ if i>1
+ axisoptstr = [axisoptstr ',' ENDL TAB];
+ end
+ axisoptstr = [axisoptstr axisoptions{i}];
+ end
+ if length( axisoptstr )
+ fwrite( FID, [ '[' ENDL TAB axisoptstr ']' ENDL ] );
+ end
+end
+fwrite( FID, ENDL );
+
+if length(legendobj) > 0
+ legentries = get(legendobj, 'String');
+ if length(legentries) > 0
+ legstr = ['\legend{%' ENDL TAB ];
+ for i = 1:length(legentries)
+ legstr = [ legstr legentries{i} '\\%' ENDL ];
+ if i ~= length(legentries)
+ legstr = [ legstr TAB ];
+ end
+ end
+ legstr = [ legstr '}%' ENDL ];
+ fwrite( FID, legstr );
+ end
+end
+
+xpointformat = '%f';
+ypointformat = '%f';
+if xislog
+ xpointformat = '%e';
+end
+if yislog
+ ypointformat = '%e';
+end
+
+for i = 1:length(lineobjs)
+
+ x = get(lineobjs(i), 'XData');
+ y = get(lineobjs(i), 'YData');
+ z = get(lineobjs(i), 'ZData');
+
+ if size(x,1) > 1
+ disp( ['line element ' num2str(i) ' skipped: size ' num2str(size(x)) ' not supported']);
+ end
+ if abs(max(z) > 0)
+ disp( ['line element ' num2str(i) ' skipped: only 2d-plots supported up to now']);
+ end
+
+ if size(x,2) > parser.Results.maxpoints
+ % we need to re-interpolate the data!
+ q = find( diff(x) < 0 );
+ if length(q)
+ % parametric plot x(t), y(t), z(t).
+ % we assume t = 1:size(x,2)
+ X = 1:parser.Results.maxpoints;
+ x = interp1( 1:size(x,2),x, X);
+ y = interp1( 1:size(y,2),y, X);
+ z = interp1( 1:size(z,2),z, X);
+
+ else
+ % a normal plot y(x):
+ X = linspace( min(x), max(x), parser.Results.maxpoints );
+ y = interp1( x,y, X );
+ x = X;
+ end
+ end
+
+ coordstr = [];
+ for j = 1:size(x,2)
+ coordstr = [coordstr sprintf(['\t(' xpointformat ',\t' ypointformat ')\n'], x(j), y(j)) ];
+ end
+
+ addplotoptstr = [];
+ if parser.Results.styles
+ markOpts = {};
+ mark = [];
+ linestyle = [];
+ color = [];
+
+ C = matlabColorToPGFColor( get(lineobjs(i), 'Color') );
+ if length(C)
+ color = [ 'color=' C ];
+ end
+
+ L = get(lineobjs(i), 'LineStyle' );
+ switch L
+ case 'none'
+ linestyle = 'only marks';
+ case '-'
+ linestyle = [];
+ case ':'
+ linestyle = 'densely dotted';
+ case '-:'
+ linestyle = 'dash pattern={on 2pt off 3pt on 1pt off 3pt}';
+ case '--'
+ linestyle = 'densely dashed';
+ end
+
+ M = get(lineobjs(i), 'Marker');
+ switch M
+ case '.'
+ mark = '*';
+ markOpts = [ markOpts 'scale=0.1' ];
+ case 'o'
+ mark = '*';
+ case 'x'
+ mark = 'x';
+ case '+'
+ mark = '+';
+ case '*'
+ mark = 'asterisk';
+ case 'square'
+ mark = 'square*';
+ case 'diamond'
+ mark = 'diamond*';
+ case '^'
+ mark = 'triangle*';
+ case 'v'
+ mark = 'triangle*';
+ markOpts = [ markOpts 'rotate=180' ];
+ case '<'
+ mark = 'triangle*';
+ markOpts = [ markOpts 'rotate=90' ];
+ case '>'
+ mark = 'triangle*';
+ markOpts = [ markOpts 'rotate=270' ];
+ case 'pentagramm'
+ mark = 'pentagon*';
+ case 'hexagram'
+ mark = 'oplus*';
+ end
+
+ M = matlabColorToPGFColor( get(lineobjs(i), 'MarkerFaceColor') );
+ if length(M)
+ markOpts = [ markOpts ['fill=' M] ];
+ end
+
+ M = matlabColorToPGFColor( get(lineobjs(i), 'MarkerEdgeColor') );
+ if length(M)
+ markOpts = [ markOpts ['draw=' M] ];
+ end
+
+ if length(color)
+ if length(addplotoptstr)
+ addplotoptstr = [addplotoptstr ',' ];
+ end
+ addplotoptstr = [ addplotoptstr color ];
+ end
+
+ if length(linestyle)
+ if length(addplotoptstr)
+ addplotoptstr = [addplotoptstr ',' ];
+ end
+ addplotoptstr = [ addplotoptstr linestyle ];
+ end
+
+ if length(mark)
+ if length(addplotoptstr)
+ addplotoptstr = [addplotoptstr ',' ];
+ end
+ addplotoptstr = [ addplotoptstr [ 'mark=' mark ] ];
+
+ if length(markOpts)
+ markOptsStr = 'mark options={';
+ for q = 1:length(markOpts)
+ if q > 1
+ markOptsStr = [markOptsStr ',' ];
+ end
+ markOptsStr = [ markOptsStr markOpts{q} ];
+ end
+ markOptsStr = [ markOptsStr '}' ];
+
+ addplotoptstr = [ addplotoptstr ',' markOptsStr ];
+ end
+ end
+
+
+ if length(addplotoptstr)
+ addplotoptstr = [ '[' addplotoptstr ']' ];
+ end
+
+ end
+ fwrite( FID, [ ...
+ '\addplot' addplotoptstr ' plot coordinates {' ENDL coordstr '};' ENDL ] );
+
+end
+
+
+fwrite( FID, [ ...
+ '\end{axis}' ENDL ...
+ '\end{tikzpicture}%' ENDL ] );
+fclose(FID);
+
+end
+
+function cstr = matlabColorToPGFColor( C )
+
+if length(C) ~= 3 | ischar(C) & strcmp(C,'none'), cstr = [];
+elseif norm( C - [0 0 1 ], 'inf' ) < 1e-10, cstr = 'blue';
+elseif norm( C - [0 1 0 ], 'inf' ) < 1e-10, cstr = 'green';
+elseif norm( C - [1 0 0 ], 'inf' ) < 1e-10, cstr = 'red';
+elseif norm( C - [0 1 1 ], 'inf' ) < 1e-10, cstr = 'cyan';
+elseif norm( C - [1 0 1 ], 'inf' ) < 1e-10, cstr = 'magenta';
+elseif norm( C - [1 1 0 ], 'inf' ) < 1e-10, cstr = 'yellow';
+elseif norm( C - [0 0 0 ], 'inf' ) < 1e-10, cstr = 'black';
+elseif norm( C - [1 1 1 ], 'inf' ) < 1e-10, cstr = 'white';
+else
+ cstr= 'blue'; % FIXME
+% cstr = [ '{rgb:red,' num2str( floor( C(1)*100) ) ';green,' num2str(floor(C(2)*100)) ';blue,' num2str(floor(C(3)*100)) '}' ];
+end
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.sh b/graphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.sh
new file mode 100755
index 0000000000..c821171940
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/scripts/matlab2pgfplots.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+
+CONVERT_STYLES=1
+CONVERT_AXES=1
+OUTFILE=""
+MAXPOINTS=100000
+
+echoHelp()
+{
+ echo "matlab2pgfplots.sh [--maxpoints N] [--styles [0|1] ] [ --axes [0|1] ] [ -o OUTFILE ] INFILE ..."
+ echo "converts Matlab figures (.fig-files) to pgfplots-files (.pgf-files)."
+ echo "This script is a front-end for matlab2pgfplots.m (which needs to be in matlab's search path)"
+ echo "type"
+ echo " >> help matlab2pgfplots"
+ echo "at your matlab prompt for more information."
+ exit 0
+}
+
+LONGOPTS="styles:,axes:,help,maxpoints:"
+SHORTOPTS="o:"
+ARGS=`getopt -l "$LONGOPTS" "$SHORTOPTS" "$@"`
+if [ $? -ne 0 ]; then
+ echo "`basename $0`: Could not process command line arguments. Use the '--help' option for documentation."
+ exit 1
+fi
+
+eval set -- "$ARGS"
+while [ $# -gt 0 ]; do
+ ARG=$1
+ # echo "PROCESSING OPTION '$ARG' (next = $@)"
+ case "$ARG" in
+ --maxpoints) shift; MAXPOINTS=$1; shift;;
+ --styles) shift; CONVERT_STYLES="$1"; shift;;
+ --axes) shift; CONVERT_AXES="$1"; shift;;
+ -o) shift; OUTFILE="$1"; shift;;
+ --help) shift; echoHelp;;
+ --) shift; break;;
+ *) break;
+ esac
+done
+
+if [ $# -eq 0 ]; then
+ echo "No input files specified."
+ exit 1
+fi
+
+HAS_OUTFILE=0
+if [ $# -gt 1 -a -n "$OUTFILE" ]; then
+ HAS_OUTFILE=1
+fi
+
+for A; do
+ INFILE="$A"
+ if [ $HAS_OUTFILE -eq 0 ]; then
+ OUTFILE="${INFILE%%.*}.pgf"
+ fi
+ echo "$INFILE -> $OUTFILE ... "
+
+ M_LOGFILE=`mktemp`
+ matlab -nojvm -nodesktop -nosplash 1>/dev/null 2>&1 -logfile $M_LOGFILE <<-EOF
+ f=hgload( '$INFILE' );
+ matlab2pgfplots( '$OUTFILE', 'fig', f, 'styles', $CONVERT_STYLES, 'axes', $CONVERT_AXES, 'maxpoints', $MAXPOINTS );
+ exit
+ EOF
+ grep -q "Error" $M_LOGFILE
+ CODE=$?
+ if [ $CODE -eq 0 ]; then
+ echo "Matlab output:" 1>&2
+ cat $M_LOGFILE 1>&2
+ CODE=1
+ else
+ CODE=0
+ fi
+ rm -f $M_LOGFILE
+ if [ $CODE -ne 0 ]; then
+ exit $CODE
+ fi
+done
diff --git a/graphics/pgf/contrib/pgfplots/scripts/pgf2pdf.sh b/graphics/pgf/contrib/pgfplots/scripts/pgf2pdf.sh
new file mode 100755
index 0000000000..6549506d48
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/scripts/pgf2pdf.sh
@@ -0,0 +1,287 @@
+#!/bin/sh
+#
+# ATTENTION: this file is more or less deprecated.
+# Please take a look at the 'external' library which has been added to pgf.
+# At the time of this writing, this library is only available for pgf cvs (newer than 2.00).
+
+TEX_FILE=""
+TEX_LOG_FILE=""
+
+TEX_DEFINES=""
+
+OLD_DIR=`pwd`
+
+DRIVER="pdftex"
+
+ALSO_EPS_OUTPUT=0
+WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET=0
+VERBOSE_LEVEL=0
+
+function dumpHelp() {
+ echo -e \
+ "`basename $0` [OPTIONS] [--texdefs <defsfile> | --mainfile <latexmainfile>.tex ] [plot1.pgf plot2.pgf .... plotn.pgf]\n"\
+ "converts each plot*.pgf to plot*.pdf.\n"\
+ "This is done by running \n"\
+ " latex --jobname plot1 latexmainfile\n"\
+ "for each single plot. See the pgfmanual section \"Externalizing graphics\".\n"\
+ "Options:\n"\
+ "--eps\n"\
+ " will also produce eps output files.\n"\
+ "--driver D\n"\
+ " will use either \"dvipdfm\", \"dvips\" or \"pdflatex\"\n"\
+ " please note that only pdflatex works without additional\n"\
+ " work.\n"\
+ "--mainfile FILE\n"\
+ " A tex-file which has been configured for externalized graphics.\n"\
+ " Two conditions must be met to perform the conversion of\n"\
+ " \"plot.pgf\" -> \"plot.pdf\":\n"\
+ " 1. FILE needs the command\n"\
+ " \pgfrealjobname{FILE}\n"\
+ " (see the pgf manual for details)\n"\
+ " 2. It needs to include \"plot.pgf\" somewhere (using \input{plot.pgf})\n"\
+ "\n"\
+ "--warnonly\n"\
+ " Use this flag if the argument of --mainfile does not contain\n"\
+ " \input{TARGET.pgf},\n"\
+ " i.e. if (2.) is not fulfilled. In this case, the conversion for this\n"\
+ " input file will be skipped.\n"\
+ "\n"\
+ "--texdefs FILE\n"\
+ " Generates a temporary tex-file\n"\
+ " \documentclass{article}\n"\
+ " \input{FILE}\n"\
+ " \begin{document}\n"\
+ " \input{plot1.pgf}\n"\
+ " \end{document}\n"\
+ " and converts this one to pdf.\n"\
+ " If FILE is '-', the input step is omitted.\n"
+ "-v\n"\
+ " each -v option increases the verbosity.\n"\
+ ""
+ exit 0;
+}
+
+
+LONGOPTS="mainfile:,eps,driver:,texdefs:,warnonly,help"
+SHORTOPTS="f:t:v"
+ARGS=`getopt -l "$LONGOPTS" "$SHORTOPTS" "$@"`
+if [ $? -ne 0 ]; then
+ echo "`basename $0`: Could not process command line arguments. Use the '--help' option for documentation."
+ exit 1
+fi
+
+eval set -- "$ARGS"
+while [ $# -gt 0 ]; do
+ ARG=$1
+ # echo "PROCESSING OPTION '$ARG' (next = $@)"
+ case "$ARG" in
+ --texdefs|-t) shift; TEX_DEFINES="$1"; shift;;
+ --driver) shift; DRIVER="$1"; shift;;
+ --mainfile|-f) shift; TEX_FILE="$1"; TEX_LOG_FILE="${1%%.tex}.log"; shift;;
+ --eps) shift; ALSO_EPS_OUTPUT=1;;
+ --warnonly) shift; WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET=1;;
+ -v) shift; VERBOSE_LEVEL=$((VERBOSE_LEVEL+1));;
+ --) shift; break;;
+ --help) dumpHelp();;
+ *) break;
+ esac
+done
+if [ -n "${TEX_DEFINES}" ]; then
+ if [ "${TEX_DEFINES:0:1}" != "/" ]; then
+ TEX_DEFINES=`pwd`/${TEX_DEFINES}
+ fi
+fi
+
+
+if [ $# -ne 0 ]; then
+ PGF_FILES=("$@")
+elif [ -n "${TEX_LOG_FILE}" ]; then
+ # search for lines with
+ # (XXXX.pgf
+ PGF_FILES=(`sed -n '{s/.*(\([a-zA-Z0-9._-+^~]\+\.pgf\).*/\1/g;T ende;p};: ende' < $TEX_LOG_FILE`)
+ #PGF_FILES=(./errplot_L2.pgf)
+else
+ echo "No input files." 1>&2
+ exit 1
+fi
+
+for A in "${PGF_FILES[@]}"; do
+ if [ ! -f "$A" ]; then
+ echo "$A not found: no such file" 1>&2
+ exit 1
+ fi
+
+ CONTINUE_ON_ERROR=0
+
+ TARGET_FILE=$(sed -n '{s/.*\\beginpgfgraphicnamed{\(.*\)}.*/\1/g;T ende;p};: ende' < "$A")
+ if [ $? -ne 0 -o -z "$TARGET_FILE" ]; then
+ echo "There is no valid \\beginpgfgraphicnamed{TARGET}...\\endpgfgraphicnamed command in $A. Can't be exported to pdf. Please see the PGF manual for details." 1>&2
+ exit 1
+ fi
+ echo "processing \"$A\"" 1>&2
+
+ CMD="latex"
+ case $DRIVER in
+ pdftex|pdflatex)
+ CMD="pdflatex"
+ ;;
+ esac
+
+ if [ -z "${TEX_DEFINES}" ]; then
+ # LaTeX cannot write into a \jobname in another directory.
+ # But the TEX_FILE and $A may not necessarily be in the same directory!
+ #
+ # So, we have to build a work-around which simulates a \jobname in the directory of TEX_FILE
+ # which does not fool \beginpgfgraphicnamed
+
+ # modify the input file A:
+ ORIGINAL_FILE="$A.orig"
+ mv "$A" "$ORIGINAL_FILE" || exit 1
+ cat - "$ORIGINAL_FILE" >"$A" <<-EOF
+ \let\tmpXXXXXZEUGoldjobname=\jobname
+ \def\jobname{${TARGET_FILE}}%
+ \message{PGF2PDF: TEX HAS ENTERED THE TARGET FILE...}%
+ EOF
+ cat >> "$A" <<-EOF
+ \let\jobname=\tmpXXXXXZEUGoldjobname
+ EOF
+
+ cd `dirname "${TEX_FILE}"`
+
+ # generate a temp \jobname in the current directory:
+ TMP_JOB_FILE=`mktemp ./tmppgf2pdfXXXXXX`
+ if [ $? -ne 0 ]; then exit 1; fi
+ rm -f "$TMP_JOB_FILE"
+
+ $CMD --interaction nonstopmode --jobname "$TMP_JOB_FILE" "${TEX_FILE}" 1>/dev/null
+ CODE=$?
+
+ INTERM_EXTENSION="dvi"
+ case $DRIVER in
+ pdftex|pdflatex)
+ INTERM_EXTENSION="pdf"
+ ;;
+ dvipdfm)
+ INTERM_EXTENSION="dvi"
+ ;;
+ dvips)
+ INTERM_EXTENSION="dvi"
+ ;;
+ esac
+ if [ ! -s "$TMP_JOB_FILE.$INTERM_EXTENSION" ]; then
+ if [ $VERBOSE_LEVEL -ge 1 ]; then
+ if [ $WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET -eq 1 ]; then
+ echo -n "WARNING: ";
+ else
+ echo -n "ERROR: ";
+ fi
+ echo -e "running\n"\
+ " '$CMD --jobname $TMP_JOB_FILE $TEX_FILE'\n"\
+ "resulted in a zero-size file \"$TMP_JOB_FILE.$INTERM_EXTENSION\"!\n"\
+ "Please check\n"\
+ "- if $TEX_FILE contains\n"\
+ " \pgfrealjobname{`basename ${TEX_FILE%%.tex}`}\n"\
+ "- if $TEX_FILE contains\n"\
+ " \input{$A}\n"\
+ "\n"\
+ "You may take a look at\n\t$TARGET_FILE.log\n for more information.\n"\
+ "Maybe `basename $0` --texdefs is more appropriate for this application?\n"\
+ "It doesn't need \input{}...\n"\
+ 1>&2
+ fi
+
+ CODE=1
+ if [ $WARN_ONLY_IF_TEXFILE_DOESNOT_INCLUDE_TARGET -eq 1 ]; then
+ CONTINUE_ON_ERROR=1
+ fi
+ rm -f $TMP_JOB_FILE.{$INTERM_EXTENSION,pdf}
+ fi
+
+
+ # FIXME: this here may clash if A and TARGET_FILE have inconsistent paths!
+ mv "$ORIGINAL_FILE" "$A" || exit 1
+ for QQ in $TMP_JOB_FILE.*; do
+ if [ "$TARGET_FILE.${QQ##*.}" != "$A" ]; then
+ mv "$QQ" "$TARGET_FILE.${QQ##*.}" || exit 1
+ fi
+ done
+
+ cd "$OLD_DIR"
+ else
+ # Die Idee hier ist wie folgt:
+ # - Erstelle ein fast leeres Tex-File
+ # - darin steht NUR
+ # \input $TEX_DEFINES
+ # und
+ # \input $A
+ # - das TeX-file wird mit pgflatex uebersetzt
+ # - die ausgabe wird nach $TARGET_FILE geschrieben
+ # - fertig.
+ #
+ # BUGS:
+ # - TARGET_FILE != A wird nicht funktionieren (nur die endungen natuerlich)
+ DRIVER="pdftex"
+ cd `dirname "$A"`
+ BASE=`basename $TARGET_FILE`
+ TMP_TEX_FILE=`mktemp tmp_${BASE}_XXXXXX`
+ mv "$TMP_TEX_FILE" "${TMP_TEX_FILE}.tex"
+ TMP_TEX_FILE="$TMP_TEX_FILE.tex"
+ rm -f "${BASE}.pdf"
+
+ cat >"$TMP_TEX_FILE" <<-EOF
+ \documentclass{report}
+
+ \input{${TEX_DEFINES}}
+
+ %\def\pgfsysdriver{pgfsys-dvipdfm.def}
+ %\def\pgfsysdriver{pgfsys-pdftex.def}
+ \usepackage{tikz}
+ \pgfrealjobname{${TMP_TEX_FILE%%.tex}}
+ \begin{document}
+ \let\oldjobname=\jobname%
+ % make sure that PGF recognises that jobname==target file name
+ % even if --jobname has a different path.
+ \def\jobname{${TARGET_FILE}}%
+ \input{`basename $A`}%
+ \let\jobname=\oldjobname
+ \end{document}
+ EOF
+ $CMD --interaction nonstopmode --jobname "$BASE" "${TMP_TEX_FILE}" 1>/dev/null
+ CODE=$?
+ if [ $CODE -eq 0 ]; then
+ rm -f "$TMP_TEX_FILE"
+ fi
+ cd $OLD_DIR
+ fi
+
+ if [ $CODE -ne 0 ]; then
+ rm -f "${TARGET_FILE}.pdf"
+ if [ $CONTINUE_ON_ERROR -eq 1 ]; then
+ echo "WARNING: $A SKIPPED [use -v for messages]." 1>&2
+ CODE=0
+ continue
+ else
+ echo -e "FAILED: could not convert\n\t$A\n->\t$TARGET_FILE.pdf" 1>&2;
+ exit 1;
+ fi
+ fi
+ CMD=""
+ case $DRIVER in
+ dvipdfm)
+ dvipdfm -o ${TARGET_FILE}.pdf "${TARGET_FILE}.dvi" || exit 1
+ pdfcrop "${TARGET_FILE}.pdf" "${TARGET_FILE}.pdf" || exit 1
+ ;;
+ dvips)
+ dvipdfm -o ${TARGET_FILE}.ps "${TARGET_FILE}.dvi" || exit 1
+ ;;
+ esac
+
+ if [ $ALSO_EPS_OUTPUT -eq 1 ]; then
+ pdftops -f 1 -l 1 -eps "${TARGET_FILE}.pdf" "${TARGET_FILE}.eps"
+ if [ $? -ne 0 ]; then
+ echo "Conversion pdf -> eps FAILED!" 1>&2
+ exit 1
+ fi
+ fi
+done
+cd $OLD_DIR
diff --git a/graphics/pgf/contrib/pgfplots/scripts/pgfplots.py b/graphics/pgf/contrib/pgfplots/scripts/pgfplots.py
new file mode 100644
index 0000000000..a9ee32c9a8
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/scripts/pgfplots.py
@@ -0,0 +1,95 @@
+"""Module to plot using Pgfplots.
+
+This module provides a means to create and display a graph very quickly.
+
+In this code, the program used to display the created PDF is 'xpdf'. Change
+it to your favorite PDF reader, such as Acrobat Reader (called acroread or
+something similar)
+
+The code used to generate the graph is printed in the command line. Edit
+your graph iteratively, and when you are satisfied with the graph, copy and
+paste the relevant part to your TEX file.
+
+This module requires the numpy module.
+
+For example of usage, see the executable part at the bottom.
+
+
+ATTENTION: this file has been provided by 3rd party users in the hope that it
+may be useful. However, it is not maintained by the pgfplots team as such. Use at your own risk.
+
+See also a related (improved) pgfplots code generation for python on https://github.com/olivierverdier/pygfplots
+
+"""
+import numpy as np
+import subprocess
+import os
+GRAPH_N = 0
+
+class Pgf:
+ def __init__(z, xlabel='', ylabel=''):
+ """Initialize and provide axis labels."""
+ z.buf = []
+ z.options = []
+ z.opt('xlabel={{{0}}}'.format(xlabel))
+ z.opt('ylabel={{{0}}}'.format(ylabel))
+ z.legend = []
+ def opt(z, *args):
+ """Write arguments to the AXIS environment."""
+ for arg in args:
+ z.options.append(arg)
+ def plot(z, x, y, legend=None, *args):
+ """Plot the data contained in the vectors x and y.
+
+ Options to the \addplot command can be provided in *args.
+ """
+ coor = ''.join(['({0}, {1})'. format(u, v) for u, v in zip(x,y)])
+ z.buf.append('\\addplot{0} coordinates {{{1}}};\n'.format(
+ ('[' + ', '.join(args) + ']') if len(args) else '' ,coor))
+ if legend is not None:
+ z.legend.append(legend)
+ def save(z, graph_n=None):
+ """Generate graph.
+
+ If graph_n is None or a number, the graph in a file beginning with
+ zzz. This file is meant to be temporary. If graph_n is a string,
+ that string is used as the file name.
+ """
+ if type(graph_n) is str:
+ file_name = graph_n
+ else:
+ if graph_n is None:
+ global GRAPH_N
+ graph_n = GRAPH_N
+ GRAPH_N += 1
+ elif type(graph_n) is not int:
+ raise Error('graph_n should be a string or an integer')
+ file_name = 'zzz{0}'.format(graph_n)
+ with open(file_name + '.tex', 'w') as f:
+ b = []
+ b.append('\\documentclass{article}\n')
+ b.append('\\usepackage{pgfplots}\n')
+ b.append('\\begin{document}\n')
+ b.append('\\begin{tikzpicture}')
+ b.append('\\begin{axis}[\n')
+ b.append('{0}]'.format(',\n'.join(z.options)))
+ b.extend(z.buf)
+ if z.legend:
+ b.append('\\legend{{' + '}, {'.join(z.legend) + '}}\n')
+ b.append('\\end{axis}\n')
+ b.append('\\end{tikzpicture}\n')
+ b.append('\\end{document}')
+ f.writelines(b)
+ print(''.join(b))
+ os.system('pdflatex {0}.tex'.format(file_name))
+ os.remove(file_name + '.aux')
+ os.remove(file_name + '.log')
+ subprocess.Popen(['xpdf', '{0}.pdf'.format(file_name)])
+if __name__ == '__main__':
+ """Example of usage."""
+ x = np.linspace(0, 2*np.pi)
+ p = Pgf('time', 'Voltage')
+ p.opt('ybar')
+ p.plot(x, np.sin(x), 'sin')
+ p.plot(x, np.cos(x), 'cos')
+ p.save()#'graph_test_pgf_1')
diff --git a/graphics/pgf/contrib/pgfplots/tex/binary.lua b/graphics/pgf/contrib/pgfplots/tex/binary.lua
new file mode 100644
index 0000000000..74c04b7409
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/binary.lua
@@ -0,0 +1,41 @@
+
+-- Attention: functions in this file are part of the backend driver.
+-- They are supposed to work back with Lua 5.1 .
+-- Note that most of the 'lua backend' requires Lua 5.2 (currently)
+
+pgfplotsGetLuaBinaryStringFromCharIndicesChunkSize = 7000;
+
+if unpack == nil then
+ -- LUA 0.76 renamed unpack to table.unpack
+ pgfplotsUnpack = table.unpack;
+else
+ pgfplotsUnpack = unpack;
+end
+
+-- Takes a table containing an arbitrary number of integers in the range 0..255 and converts it
+-- into a binary stream of the corresponding binary chars.
+--
+-- @param charIndices a table containing 0...N arguments; each in the range 0..255
+--
+-- @return a string containing binary content, one byte for each input integer.
+function pgfplotsGetLuaBinaryStringFromCharIndices(charIndices)
+ -- unpack extracts only the indices (we can't provide a table to string.char).
+ -- note that pdf.immediateobj has been designed to avoid sanity checking for invalid UTF strings -
+ -- in other words: it accepts binary strings.
+ --
+ -- unfortunately, this here fails for huge input tables:
+ -- pgfplotsretval=string.char(unpack(charIndices));
+ -- we have to create it incrementally using chunks:
+ local len = #charIndices;
+ local chunkSize = pgfplotsGetLuaBinaryStringFromCharIndicesChunkSize;
+ local buf = {};
+ -- ok, append all full chunks of chunkSize first:
+ local numFullChunks = math.floor(len/chunkSize);
+ for i = 0, numFullChunks-1, 1 do
+ table.insert(buf, string.char(pgfplotsUnpack(charIndices, 1+i*chunkSize, (i+1)*chunkSize)));
+ end
+ -- append the rest:
+ table.insert(buf, string.char(pgfplotsUnpack(charIndices, 1+numFullChunks*chunkSize)));
+ return table.concat(buf);
+end
+
diff --git a/graphics/pgf/contrib/pgfplots/tex/bugtracker.sty b/graphics/pgf/contrib/pgfplots/tex/bugtracker.sty
new file mode 100644
index 0000000000..9de0d1ea4a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/bugtracker.sty
@@ -0,0 +1,429 @@
+%--------------------------------------------------
+% Provides a simple, text-based bug tracker.
+%
+% Idea: simply write a text-todo list into a tex file, and write
+% trivial support macros which allow to provide priorities, status
+% flags and sorting capabilities. Sort key:
+% (section,isactive,priority). Can be processed with pgfplotstable.
+% Could also support the codeexample environment of pgfmanual.
+% -> Advantages:
+% - simple human readable text files (I like that!)
+% - independent of any tool
+% - can be sorted
+% UI:
+% \begin{feature}[<status>][prio=<num>]
+% <text>
+% \end{feature}
+%
+% \begin{bug}[<status>][prio=<num>]
+% <text>
+% \end{bug}
+% Idea: collect *all* entries in one huge array, then sort this array, then
+% typeset the result. Should work reasonably, I guess. If it is too slow,
+% typeset directly.
+%--------------------------------------------------
+%
+\ProvidesPackage{bugtracker}[2010/07/23 Version 0.1]
+
+\RequirePackage{pgfplotstable}
+\RequirePackage{listings}
+\RequirePackage{hyperref}
+
+\ifx\scantokens\@undefined
+ \PackageError{pgfmanual-macros}{You need to use extended latex
+ (elatex) or (pdfelatex) to process this document}{}
+\fi
+
+\def\bugtracker@init@items{%
+}%
+
+{
+\catcode`\[=1
+\catcode`\]=2
+\catcode`\{=12
+\catcode`\}=12
+\gdef\bugtracker@lbrace[{]
+\gdef\bugtracker@rbrace[}]
+]
+{
+\catcode`\|=0
+|catcode`\\=12
+|gdef|bugtracker@bslash{\}
+}
+
+% #1: the environment (item) name
+% #2: the sort order (an integer)
+\def\declarebugtrackeritem#1#2{%
+ \expandafter\def\expandafter\bugtracker@init@items\expandafter{%
+ \bugtracker@init@items
+ \expandafter\gdef\csname c@bugtracker@#1\endcsname{0}%
+ }%
+ \expandafter\edef\csname bugtracker@end@#1\endcsname{\bugtracker@bslash end\bugtracker@lbrace #1\bugtracker@rbrace}%
+ \expandafter\def\csname #1\endcsname{\bugtracker@collect{#1}}%
+ \expandafter\def\csname end#1\endcsname{\relax}%
+ \pgfkeyssetvalue{/bugtracker/sort order/#1}{#2}%
+}%
+
+\newif\ifbugtracker@sort
+
+\newenvironment{bugtracker}{%
+ \let\bugtracker@enqueue=\bugtracker@enqueue@ACTIVE
+ \pgfplotsarraynewemptyglobal\bugtrackeritems
+}{%
+ \ifbugtracker@sort
+ \begingroup
+ \pgfkeyslet{/pgfplots/iflessthan/.@cmd}\bugtracker@iflessthan
+ \pgfkeysdef{/pgfplots/array/unscope pre}{\bugtracker@typeset}%
+ \pgfkeysdef{/pgfplots/array/unscope post}{}%
+ \pgfplotsarraysort\bugtrackeritems
+ \endgroup
+ \else
+ \bugtracker@typeset
+ \fi
+}%
+
+\def\bugtrackerset{\pgfqkeys{/bugtracker}}%
+
+
+\def\bugtracker@collect#1{%
+ \pgfutil@ifnextchar[{%
+ \bugtracker@collect@status{#1}%
+ }{%
+ \bugtracker@collect@status{#1}[open]%
+ }%
+}%
+\def\bugtracker@collect@status#1[#2]{%
+ \pgfutil@ifnextchar[{%
+ \bugtracker@collect@status@opt{#1}[#2]%
+ }{%
+ \bugtracker@collect@status@opt{#1}[#2][]%
+ }%
+}%
+\def\bugtracker@collect@status@opt#1[#2][#3]{%
+ \begingroup
+ \bugtrackerset{#2,#3}%
+ \expandafter\let\expandafter\bugtracker@temp\csname bugtracker@end@#1\endcsname
+ \expandafter\long\expandafter\def\expandafter\bugtracker@collect@until\expandafter##\expandafter1\bugtracker@temp{\bugtracker@enqueue{#1}{##1}}%
+ \bugtracker@prepare@collect
+ \bugtracker@collect@until
+}%
+
+
+\def\bugtracker@prepare@collect{%
+ \def\do##1{\catcode`##1=12 }\dospecials
+ \catcode`\^^M=12
+ \catcode`\^^J=12
+ \catcode`\^^I=12
+}%
+
+\def\bugtracker@restore@catcodes{%
+ \catcode`\^^M=5
+ \catcode`\^^J=10
+ \catcode`\^^I=10
+ % this is important to get \scantokens to work: otherwise, it will
+ % eat up the ^^M chars:
+ \endlinechar=`\^^M
+ \newlinechar=\endlinechar
+}%
+
+\long\def\bugtracker@enqueue#1#2{%
+ \edef\bugtracker@status@order{\pgfkeysvalueof{/bugtracker/status order/\bugtracker@status}}%
+ \ifx\bugtracker@status@order\pgfutil@empty
+ % status order/<status name>={} --> do not display it!
+ \else
+ \toks0={#2}%
+ % some of these values are used during the sort procedure; that's
+ % why they are not simply a list of keys. Perhaps they should
+ % still be a list of keys...
+ \edef\bugtracker@entry{{#1}{\bugtracker@status}{\pgfkeysvalueof{/bugtracker/prio}}{\the\toks0}{\the\inputlineno}{\pgfkeysvalueof{/bugtracker/epic}}}%
+ \expandafter\pgfplotsarraypushbackglobal\expandafter{\bugtracker@entry}\to\bugtrackeritems
+ \fi
+ \endgroup
+ \end{#1}%
+}%
+\let\bugtracker@enqueue@ACTIVE=\bugtracker@enqueue
+\long\def\bugtracker@enqueue#1#2{%
+ \PackageError{bugtracker}{Sorry, bug tracker elements can only be used inside of \string\begin{bugtracker} ... \string\end{bugtracker}. Discarding this element}{}%
+}%
+
+\long\def\bugtracker@unpack#1#2#3#4#5#6{%
+ \bugtrackerset{name={#1},status=#2,prio=#3,source line={#5},epic={#6}}%
+ \def\bugtracker@content{#4}%
+}%
+
+\long\def\bugtracker@unpack@sorting#1#2#3#4#5#6{%
+ \edef\bugtracker@name {\pgfkeysvalueof{/bugtracker/sort order/#1}}%
+ \edef\bugtracker@status{\pgfkeysvalueof{/bugtracker/status order/#2}}%
+ \def\bugtracker@prio{#3}%
+ \def\bugtracker@source{#5}%
+}%
+\def\bugtracker@iflessthan#1#2#3#4\pgfeov{%
+ \expandafter\bugtracker@unpack@sorting#1%
+ \let\bugtracker@nameA=\bugtracker@name
+ \let\bugtracker@statusA=\bugtracker@status
+ \let\bugtracker@prioA=\bugtracker@prio
+ \let\bugtracker@sourceA=\bugtracker@source
+ %
+ \expandafter\bugtracker@unpack@sorting#2%
+ %
+ \def\bugtracker@lt{0}%
+ \ifnum\bugtracker@nameA<\bugtracker@name
+ \def\bugtracker@lt{1}%
+ \else
+ \ifnum\bugtracker@nameA=\bugtracker@name
+ \ifnum\bugtracker@statusA<\bugtracker@status
+ \def\bugtracker@lt{1}%
+ \else
+ \ifnum\bugtracker@statusA=\bugtracker@status
+ \ifnum\bugtracker@prioA>\bugtracker@prio
+ \def\bugtracker@lt{1}%
+ \else
+ \ifnum\bugtracker@prioA=\bugtracker@prio
+ \ifnum\bugtracker@sourceA<\bugtracker@source
+ \def\bugtracker@lt{1}%
+ %\else
+ %\ifnum\bugtracker@sourceA=\bugtracker@source
+ %\fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \if1\bugtracker@lt #3\else #4\fi
+}%
+
+
+\long\def\bugtracker@typeset@#1#2{%
+ \pgfkeysvalueof{/bugtracker/typeset/.@cmd}{#1}{#2}\pgfeov
+}%
+
+\def\bugtracker@typeset{%
+ \let\minimal=\bugtracker@minimal@env
+ \def\endminimal{\relax}%
+ %
+ \pgfkeysvalueof{/bugtracker/font}%
+ \bugtracker@init@items
+ \gdef\bugtracker@isfirst{1}%
+ \pgfplotsarrayforeach\bugtrackeritems\as\entry{%
+ \if1\bugtracker@isfirst
+ \else
+ \vskip\pgfkeysvalueof{/bugtracker/vskip}
+ \fi
+ \expandafter\bugtracker@unpack\entry
+ %
+ \edef\c@bugtracker{\csname c@bugtracker@\pgfkeysvalueof{/bugtracker/name}\endcsname}%
+ \expandafter\pgfplotsutil@advancestringcounter@global\csname c@bugtracker@\pgfkeysvalueof{/bugtracker/name}\endcsname
+ %
+ \message{bugtracker: processing \jobname.tex:\pgfkeysvalueof{/bugtracker/source line}...^^J}%
+ \begingroup
+ \bugtracker@restore@catcodes
+ \expandafter\bugtracker@typeset@\expandafter{\expandafter\scantokens\expandafter{\bugtracker@content}}{\c@bugtracker}%%
+ \endgroup
+ \gdef\bugtracker@isfirst{0}%
+ }%
+}%
+
+\bugtrackerset{
+ sort/.is if=bugtracker@sort,
+ sort=true,
+ name/.initial=,
+ typeset name/.code={%
+ \pgfkeysifdefined{/bugtracker/name text/#1}{%
+ \pgfkeysvalueof{/bugtracker/name text/#1}%
+ }{%
+ #1%
+ }%
+ },
+ prio/.initial=5,
+ epic/.initial=,
+ source line/.initial=,
+ status/.is choice,
+ status/open/.code= {\def\bugtracker@status{open}},
+ status/closed/.code= {\def\bugtracker@status{closed}},
+ status/cancelled/.code= {\def\bugtracker@status{cancelled}},
+ status/partially/.code= {\def\bugtracker@status{partially}},
+ status/-/.style= {/bugtracker/status/open},
+ status/+/.style= {/bugtracker/status/closed},
+ status/X/.style= {/bugtracker/status/cancelled},
+ status=open,
+ % status order/<statusname>/.initial=int . Empty means:
+ % do not display it at all.
+ status order/open/.initial=0,
+ status order/closed/.initial=,%10,
+ status order/cancelled/.initial=7,
+ status order/partially/.initial=1,
+ shell escape/.initial=-shell-escape,
+ prefix/.initial=\jobname-,
+ file ext/.initial=pdf,
+ system call/.initial={pdflatex \bugtracker@checkshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"},
+ vskip/.initial=\baselineskip,
+ font/.initial={%
+ \parindent=0pt
+ \raggedright
+ },
+ % #1: a running index.
+ typeset id/.code={%
+ \begin{minipage}[t]{3cm}%
+ \raggedleft
+ %[\##1]\par
+ {\ttfamily \jobname.tex:\pgfkeysvalueof{/bugtracker/source line}}
+ \end{minipage}
+ },
+ typeset/.code 2 args={%
+ \noindent
+ \paragraph{%
+ \protect\llap{\normalfont\scriptsize \protect\bugtrackerset{/bugtracker/typeset id=#2}\hspace{2em}}%
+ \protect\bugtrackerset{/bugtracker/typeset name={\pgfkeysvalueof{/bugtracker/name}}}
+ % \##2
+ }
+ [\bugtracker@status, Priority \pgfkeysvalueof{/bugtracker/prio}, Epic `\pgfkeysvalueof{/bugtracker/epic}']
+ \vskip4pt
+ {%
+ \noindent
+ \parskip=\baselineskip
+ #1%
+ \par
+ }%
+ %{\scriptsize Entry in {\ttfamily \jobname.tex:\pgfkeysvalueof{/bugtracker/source line}}}%
+ },%
+ typeset minimal/.code={%
+ \ifvmode
+ \noindent
+ \fi
+ \href{file:\bugtracker@minimal@filename@}{[\textcolor{blue}{see \texttt{\filename}}]}%
+ \bugtracker@minimal@typeset@{#1}%
+ },
+ .unknown/.code={%
+ \edef\bugtracker@tempkey{\noexpand\pgfkeysalso{/bugtracker/status=\pgfkeyscurrentname}}%
+ \bugtracker@tempkey
+ },
+}
+
+\declarebugtrackeritem{feature}{10}
+\declarebugtrackeritem{bug}{5}
+\declarebugtrackeritem{doctodo}{0}
+
+\bugtrackerset{
+ name text/feature/.initial=Feature Proposal,
+ name text/bug/.initial=Bug,
+ name text/doctodo/.initial=Documentation Todo,
+}
+
+
+\lstdefinestyle{minimalexample}{
+ basicstyle=\ttfamily\footnotesize,
+ columns=fullflexible,
+}
+
+
+% a
+% \begin{minimal}
+% \end{minimal}
+% environment which is executed automatically :
+\newcount\c@bugtracker@minimal
+\c@bugtracker@minimal=0
+
+\def\bugtracker@minimal@env{%
+ \begingroup
+ \bugtracker@prepare@collect
+ \bugtracker@minimal@collect
+}%
+\expandafter\edef\csname bugtracker@temp\endcsname{\bugtracker@bslash end\bugtracker@lbrace minimal\bugtracker@rbrace}%
+\expandafter\long\expandafter\def\expandafter\bugtracker@minimal@collect\expandafter#\expandafter1\bugtracker@temp{%
+ \endgroup
+ \edef\bugtracker@minimal@filename{\pgfkeysvalueof{/bugtracker/prefix}\the\c@bugtracker@minimal}%
+ \edef\bugtracker@minimal@filename@{\bugtracker@minimal@filename.\pgfkeysvalueof{/bugtracker/file ext}}%
+ \global\advance\c@bugtracker@minimal by1
+ %
+ \IfFileExists{\bugtracker@minimal@filename@}{}{%
+ \bugtracker@minimal@create{#1}%
+ }%
+ \bugtracker@minimal@typeset{#1}%
+ \end{minimal}%
+}%
+\long\def\bugtracker@minimal@typeset#1{%
+ \begingroup
+ \pgfplotscommandtostring\bugtracker@minimal@filename@\filename
+ \bugtracker@restore@catcodes
+ \edef\bugtracker@temp##1{%
+ \bugtracker@bslash begin{lstlisting}[style=minimalexample]%
+ ##1%
+ \bugtracker@bslash end{lstlisting}%
+ }%
+ \def\bugtracker@temp@##1{\pgfkeysvalueof{/bugtracker/typeset minimal/.@cmd}{##1}\pgfeov}%
+ \expandafter\bugtracker@temp@\expandafter{\bugtracker@temp{#1}}%
+ \endgroup
+}%
+\long\def\bugtracker@minimal@typeset@#1{%
+ \scantokens{#1}%
+}%
+\long\def\bugtracker@minimal@create#1{%
+ %
+ \immediate\openout\w@pgf@writea=\bugtracker@minimal@filename\relax
+ \immediate\write\w@pgf@writea{#1}%
+ \immediate\closeout\w@pgf@writea
+ %
+ \bugtracker@assemble@systemcall\bugtracker@minimal@filename\bugtracker@temp
+\message{Issuing system-call^^J$ \bugtracker@temp^^J}%
+ \immediate\write18{\bugtracker@temp}%
+ \IfFileExists{\bugtracker@minimal@filename@}{}{%
+ \PackageError{bugtracker}{Sorry, the system call '\bugtracker@temp' did NOT result in a usable output file '\bugtracker@minimal@filename@' (adjust '/bugtracker/file ext' if needed). Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something like that. Or maybe the command simply failed? Error messages can be found in '\bugtracker@minimal@filename.log'}{}%
+ }%
+}
+
+{
+\catcode`\"=12
+\catcode`\'=12
+\catcode`\;=12
+\catcode`\&=12
+\catcode`\-=12
+\xdef\bugtracker@normal@dq{"}
+\xdef\bugtracker@normal@sq{'}
+\xdef\bugtracker@normal@semic{;}
+\xdef\bugtracker@normal@and{&}
+\xdef\bugtracker@normal@dash{-}
+\catcode`\"=13
+\catcode`\'=13
+\catcode`\;=13
+\catcode`\&=13
+\catcode`\-=13
+\gdef\bugtracker@activate@normal@dq{\let"=\bugtracker@normal@dq}
+\gdef\bugtracker@activate@normal@sq{\let'=\bugtracker@normal@sq}
+\gdef\bugtracker@activate@normal@semic{\let;=\bugtracker@normal@semic}
+\gdef\bugtracker@activate@normal@and{\let&=\bugtracker@normal@and}
+\gdef\bugtracker@activate@normal@dash{\let-=\bugtracker@normal@dash}
+\catcode`\|=0
+\catcode`\\=12
+|xdef|bugtracker@normal@backslash{\}%
+}
+% Creates the '/bugtracker/system call' command as string and
+% returns it into the (global!) macro #2.
+% #1: the output file name
+% #2: the global return value macro
+%
+\def\bugtracker@assemble@systemcall#1#2{%
+ \begingroup
+ \def\image{#1}%
+ \let\texsource=\image
+ \ifnum\the\catcode`\"=13 \bugtracker@activate@normal@dq\fi
+ \ifnum\the\catcode`\'=13 \bugtracker@activate@normal@sq\fi
+ \ifnum\the\catcode`\;=13 \bugtracker@activate@normal@semic\fi
+ \ifnum\the\catcode`\-=13 \bugtracker@activate@normal@dash\fi
+ \let\\=\bugtracker@normal@backslash
+ \xdef#2{\pgfkeysvalueof{/bugtracker/system call}}%
+ \endgroup
+}%
+
+\pgfutil@ifundefined{pdfshellescape}{%
+ \def\bugtracker@checkshellescape{}%
+}{%
+ \ifnum\pdfshellescape=1
+ \def\bugtracker@checkshellescape{\pgfkeysvalueof{/bugtracker/shell escape}\space}%
+ \else
+ \def\bugtracker@checkshellescape{}%
+ \fi
+}%
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/colormap.lua b/graphics/pgf/contrib/pgfplots/tex/colormap.lua
new file mode 100644
index 0000000000..73cbb2c894
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/colormap.lua
@@ -0,0 +1,156 @@
+--
+-- This file contains parts of pgfplotscolormap.code.tex
+--
+
+local math=math
+local pgfplotsmath = pgfplots.pgfplotsmath
+local io=io
+local type=type
+local tostring=tostring
+local error=error
+local table=table
+
+do
+-- all globals will be read from/defined in pgfplots:
+local _ENV = pgfplots
+
+local pgftonumber = pgfluamathfunctions.tonumber
+-----------------------------------
+
+ColorSpace = newClass()
+function ColorSpace:constructor(numComponents)
+ self.numComponents=numComponents
+end
+
+rgb = ColorSpace.new(3)
+cmyk = ColorSpace.new(4)
+gray = ColorSpace.new(1)
+
+
+ColorMap = newClass()
+
+ColorMap.range =1000
+
+-- h: mesh width between adjacent values
+-- colorspace: an instance of ColorSpace
+-- values: an array (1-based table) with color components. Each color component is supposed to be a table with K entries where K is colorspace:numComponents
+-- positions: either an empty array (in which case the colormap is uniform) or one position per value. Positions are in [0,1000]
+-- scaleOrderZ the specific scaling factor used for 'colormap access=const' (or negative or the empty string if this is disabled)
+function ColorMap:constructor( h, colorspace, values, positions, scaleOrderZ)
+ if not h or not colorspace or not positions or not values then error("arguments must not be nil")end
+
+ self.name = name
+ self.h = h
+ self.invh = 1/h
+ self.colorspace = colorspace
+ self.values = values
+ self.pos = positions
+ self:setScaleOrderZ(scaleOrderZ)
+
+ local numComponents = self.colorspace.numComponents
+ for i = 1,#self.values do
+ local value = self.values[i]
+ if #value ~= numComponents then
+ error("Some value has an unexpected number of color components, expected " .. self.colorspace.numComponents .. " but was ".. #value);
+ end
+ end
+end
+
+function ColorMap:isUniform()
+ if #self.pos == 0 then
+ return true
+ else
+ return false
+ end
+end
+
+function ColorMap:setScaleOrderZ(scaleOrderZ)
+ if type(scaleOrderZ) == "number" then
+ self.scaleOrderZ = scaleOrderZ
+ elseif #scaleOrderZ == 0 or type(scaleOrderZ) == "string" and scaleOrderZ == "h" then
+ -- special case which means "h"
+ self.scaleOrderZ = "h"
+ else
+ self.scaleOrderZ = pgftonumber(scaleOrderZ)
+ end
+end
+
+function ColorMap:_transform(inMin, inMax, x)
+ local transformed
+ if inMin == 0 and inMax == ColorMap.range then
+ transformed = x
+ else
+ local scale = ColorMap.range / (inMax - inMin)
+
+ transformed = (x - inMin) * scale
+ end
+ transformed = math.max(0, transformed)
+ transformed = math.min(ColorMap.range, transformed)
+ return transformed
+end
+
+function ColorMap:findPrecomputed(inMin, inMax, x)
+ local transformed = self:_transform(inMin, inMax, x)
+
+ local divh = transformed * self.invh
+ local intervalno = math.floor(divh)
+ local factor = divh - intervalno
+ local factor_two = 1-factor
+
+
+ -- Step 2: interpolate the desired RGB value using vector valued interpolation on the identified interval
+ if intervalno+1 == #self.values then
+ -- ah- we are at the right end!
+ return self.values[#self.values]
+ end
+
+ local left = self.values[intervalno+1]
+ local right = self.values[intervalno+2]
+ if not left or not right then error("Internal error: the color map does not have enough values for interval no " .. intervalno )end
+
+ local result = {}
+ for i = 1,self.colorspace.numComponents do
+ local result_i = factor_two * left[i] + factor * right[i]
+
+ result[i] = result_i
+ end
+
+ return result
+end
+
+function ColorMap:findPiecewiseConst(inMin, inMax, x)
+ -- see docs in \pgfplotscolormapfindpiecewiseconst@precomputed@ for details
+
+ local transformed = self:_transform(inMin, inMax, x)
+ local intervalno =-1
+ if self:isUniform() then
+ if self.scaleOrderZ == "h" then
+ invh = self.invh + 0.001
+ else
+ -- disable the extra interval
+ invh = self.invh
+ end
+
+ local divh = transformed * invh
+ intervalno = math.floor(divh)
+ else
+ -- FIXME : IMPLEMENT
+ end
+
+ if intervalno+1 == #self.values then
+ -- we have artificially increased the "h" (see the comments
+ -- above) -- meaning that this 'if' can happen.
+ -- ->Map the rightmost point to the rightmost interval:
+ return self.values[#self.values]
+ end
+ return self.values[intervalno+1]
+end
+
+-----------------------------------
+
+-- global registry of all colormaps.
+-- Key: colormap name
+-- Value: an instance of ColorMap
+ColorMaps = {}
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/tex/functions.lua b/graphics/pgf/contrib/pgfplots/tex/functions.lua
new file mode 100644
index 0000000000..d8d32997e3
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/functions.lua
@@ -0,0 +1,651 @@
+--------------------------------------------------------------------------------------------------
+------ This file is a copy of some part of PGF/Tikz.
+------ It has been copied here to provide :
+------ - compatibility with older PGF versions
+------ - availability of PGF contributions by Christian Feuersaenger
+------ which are necessary or helpful for pgfplots.
+------
+------ For reasons of simplicity, I have copied the whole file, including own contributions AND
+------ PGF parts. The copyrights are as they appear in PGF.
+------
+------ Note that pgfplots has compatible licenses.
+------
+------ This copy has been modified in the following ways:
+------ - nested \input commands have been updated
+------
+--
+-- Support for the contents of this file will NOT be done by the PGF/TikZ team.
+-- Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+-- with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+-- This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+----------------------------------------------------------------------------------------------------
+-- Date of this copy: Mi 6. Jan 11:32:04 CET 2016 ---
+
+
+
+-- Copyright 2011 by Christophe Jorssen
+--
+-- This file may be distributed and/or modified
+--
+-- 1. under the LaTeX Project Public License and/or
+-- 2. under the GNU Public License.
+--
+-- See the file doc/generic/pgf/licenses/LICENSE for more details.
+--
+-- $Id: functions.lua,v 1.3 2015/05/10 20:34:13 cfeuersaenger Exp $
+--
+
+local pgfluamathfunctions = pgfluamathfunctions or {}
+
+-- Maps function names to their function.
+--
+-- Note that this allows to register functions which are not in pgfluamathfunctions.
+--
+-- Note that the string keys are not necessarily the same as the function
+-- names. In particular, the math expression "not(1,1)" will execute notPGF(1,1)
+--
+-- Note that each function which is added to pgfluamathfunctions will _automatically_ be inserted into this map, see __newindex.
+-- (I fear it will not be erased directly...)
+pgfluamathfunctions.stringToFunctionMap = {}
+
+local newFunctionAllocatedCallback = function(table,key,value)
+ local keyName = tostring(key):gsub("PGF","")
+ if not value then
+ stringToFunctionMap[keyName] = nil
+ elseif type(value) == 'function' then
+ -- remember it, and strip PGF suffix (i.e. remember 'not' instead of 'notPGF')
+ pgfluamathfunctions.stringToFunctionMap[keyName] = value
+ end
+ rawset(table,key,value)
+end
+
+setmetatable(pgfluamathfunctions, { __newindex = newFunctionAllocatedCallback })
+
+local mathabs, mathacos, mathasin = math.abs, math.acos, math.asin
+local mathatan, mathceil = math.atan, math.ceil
+local mathcos, mathdeg = math.cos, math.deg
+local mathexp, mathfloor, mathfmod = math.exp, math.floor, math.fmod
+local mathlog, mathmax = math.log, math.max
+local mathmin, mathpi = math.min, math.pi
+local mathrad, mathrandom = math.rad, math.random
+local mathrandomseed, mathsin = math.randomseed, math.sin
+local mathsqrt = math.sqrt
+local mathtan = math.tan
+
+local trigFormatToRadians = mathrad
+
+local radiansToTrigFormat = mathdeg
+
+pgfluamathfunctions.TrigFormat = { 'deg', 'rad' }
+pgfluamathfunctions.stringToFunctionMap["TrigFormat"] = nil
+
+-- choice is one of the valid choices in TrigFormat.
+function pgfluamathfunctions.setTrigFormat(choice)
+ if choice == 'deg' then
+ trigFormatToRadians = mathrad
+ radiansToTrigFormat = mathdeg
+ elseif choice == 'rad' then
+ local identity = function(x) return x end
+ trigFormatToRadians = identity
+ radiansToTrigFormat = identity
+ else
+ error("The argument '" .. tostring(choice) .. "' is no valid choice for setTrigFormat.")
+ end
+end
+pgfluamathfunctions.stringToFunctionMap["setTrigFormat"] = nil
+
+pgfluamathfunctions.setRandomSeed = mathrandomseed
+pgfluamathfunctions.stringToFunctionMap["setRandomSeed"] = nil
+
+-------------------------------------------
+
+function pgfluamathfunctions.add(x,y)
+ return x+y
+end
+
+function pgfluamathfunctions.subtract(x,y)
+ return x-y
+end
+
+function pgfluamathfunctions.neg(x)
+ return -x
+end
+
+function pgfluamathfunctions.multiply(x,y)
+ return x*y
+end
+
+function pgfluamathfunctions.veclen(x,y)
+ return mathsqrt(x*x+y*y)
+end
+
+function pgfluamathfunctions.divide(x,y)
+ return x/y
+end
+
+function pgfluamathfunctions.div(x,y)
+ return mathfloor(x/y)
+end
+
+function pgfluamathfunctions.pow(x,y)
+ -- do not use math.pow -- it is deprecated as of LUA 5.3
+ return x^y
+end
+
+function pgfluamathfunctions.factorial(x)
+-- TODO: x must be an integer
+ if x == 0 then
+ return 1
+ else
+ return x * pgfluamathfunctions.factorial(x-1)
+ end
+end
+
+function pgfluamathfunctions.ifthenelse(x,y,z)
+ if x~= 0 then
+ return y
+ else
+ return z
+ end
+end
+
+function pgfluamathfunctions.equal(x,y)
+ if x == y then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.greater(x,y)
+ if x > y then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.less(x,y)
+ if x < y then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.min(x,y)
+ return mathmin(x,y)
+end
+
+function pgfluamathfunctions.max(x,y)
+ return mathmax(x,y)
+end
+
+function pgfluamathfunctions.notequal(x,y)
+ if x ~= y then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.notless(x,y)
+ if x >= y then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.notgreater(x,y)
+ if x <= y then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.andPGF(x,y)
+ if (x ~= 0) and (y ~= 0) then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.orPGF(x,y)
+ if (x ~= 0) or (y ~= 0) then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.notPGF(x)
+ if x == 0 then
+ return 1
+ else
+ return 0
+ end
+end
+
+function pgfluamathfunctions.pi()
+ return mathpi
+end
+
+function pgfluamathfunctions.e()
+ return mathexp(1)
+end
+
+function pgfluamathfunctions.abs(x)
+ return mathabs(x)
+end
+
+function pgfluamathfunctions.floor(x)
+ return mathfloor(x)
+end
+
+function pgfluamathfunctions.ceil(x)
+ return mathceil(x)
+end
+
+function pgfluamathfunctions.exp(x)
+ return mathexp(x)
+end
+
+function pgfluamathfunctions.ln(x)
+ return mathlog(x)
+end
+
+local logOf10 = mathlog(10)
+function pgfluamathfunctions.log10(x)
+ return mathlog(x) / logOf10
+end
+
+local logOf2 = mathlog(2)
+function pgfluamathfunctions.log2(x)
+ return mathlog(x) / logOf2
+end
+
+function pgfluamathfunctions.sqrt(x)
+ return mathsqrt(x)
+end
+
+function pgfluamathfunctions.sign(x)
+ if x < 0 then
+ return -1.0
+ elseif x == 0 then
+ return 0.0
+ else
+ return 1.0
+ end
+end
+function pgfluamathfunctions.real(x)
+ -- "ensure that x contains a decimal point" is kind of a no-op here, isn't it!?
+ return x
+end
+
+function pgfluamathfunctions.rnd()
+ return mathrandom()
+end
+
+function pgfluamathfunctions.rand()
+ return -1 + mathrandom() *2
+end
+
+function pgfluamathfunctions.random(x,y)
+ if x == nil and y == nil then
+ return mathrandom()
+ elseif y == nil then
+ return mathrandom(x)
+ else
+ return mathrandom(x,y)
+ end
+end
+
+function pgfluamathfunctions.deg(x)
+ return mathdeg(x)
+end
+
+function pgfluamathfunctions.rad(x)
+ return mathrad(x)
+end
+
+function pgfluamathfunctions.round(x)
+ if x<0 then
+ return -mathfloor(mathabs(x)+0.5)
+ else
+ return mathfloor(x + 0.5)
+ end
+end
+
+function pgfluamathfunctions.gcd(a, b)
+ if b == 0 then
+ return a
+ else
+ return pgfluamathfunctions.gcd(b, a%b)
+ end
+end
+
+function pgfluamathfunctions.isprime(a)
+ local ifisprime = true
+ if a == 1 then
+ ifisprime = false
+ elseif a == 2 then
+ ifisprime = true
+-- if a > 2 then
+ else
+ local i, imax = 2, mathceil(mathsqrt(a)) + 1
+ while ifisprime and (i < imax) do
+ if pgfluamathfunctions.gcd(a,i) ~= 1 then
+ ifisprime = false
+ end
+ i = i + 1
+ end
+ end
+ if ifisprime then
+ return 1
+ else
+ return 0
+ end
+end
+
+
+function pgfluamathfunctions.split_braces_to_explist(s)
+ -- (Thanks to mpg and zappathustra from fctt)
+ -- Make unpack available whatever lua version is used
+ -- (unpack in lua 5.1 table.unpack in lua 5.2)
+ local unpack = table.unpack or unpack
+ local t = {}
+ for i in s:gmatch('%b{}') do
+ table.insert(t, tonumber(i:sub(2, -2)))
+ end
+ return unpack(t)
+end
+
+function pgfluamathfunctions.split_braces_to_table(s)
+ local t = {}
+ for i in s:gmatch('%b{}') do
+ table.insert(t, tonumber(i:sub(2, -2)))
+ end
+ return t
+end
+
+function pgfluamathfunctions.mathtrue()
+ return 1.0
+end
+pgfluamathfunctions.stringToFunctionMap["true"] = pgfluamathfunctions.mathtrue
+
+function pgfluamathfunctions.mathfalse()
+ return 0.0
+end
+pgfluamathfunctions.stringToFunctionMap["false"] = pgfluamathfunctions.mathfalse
+
+function pgfluamathfunctions.frac(a)
+ -- should be positive, apparently
+ return mathabs(a - pgfluamathfunctions.int(a))
+end
+
+function pgfluamathfunctions.int(a)
+ if a < 0 then
+ return -mathfloor(mathabs(a))
+ else
+ return mathfloor(a)
+ end
+end
+
+function pgfluamathfunctions.iseven(a)
+ if (a % 2) == 0 then
+ return 1.0
+ else
+ return 0.0
+ end
+end
+
+function pgfluamathfunctions.isodd(a)
+ if (a % 2) == 0 then
+ return 0.0
+ else
+ return 1.0
+ end
+end
+
+function pgfluamathfunctions.mod(x,y)
+ if x/y < 0 then
+ return -(mathabs(x)%mathabs(y))
+ else
+ return mathabs(x)%mathabs(y)
+ end
+end
+
+function pgfluamathfunctions.Mod(x,y)
+ local tmp = pgfluamathfunctions.mod(x,y)
+ if tmp < 0 then
+ tmp = tmp + y
+ end
+ return tmp
+end
+
+function pgfluamathfunctions.Sin(x)
+ return mathsin(trigFormatToRadians(x))
+end
+pgfluamathfunctions.sin=pgfluamathfunctions.Sin
+
+
+function pgfluamathfunctions.cosh(x)
+ -- math.cosh is deprecated as of LUA 5.3 . reimplement it:
+ return 0.5* (mathexp(x) + mathexp(-x))
+end
+function pgfluamathfunctions.sinh(x)
+ -- math.sinh is deprecated as of LUA 5.3 . reimplement it:
+ return 0.5* (mathexp(x) - mathexp(-x))
+end
+
+local sinh = pgfluamathfunctions.sinh
+local cosh = pgfluamathfunctions.cosh
+function pgfluamathfunctions.tanh(x)
+ -- math.tanh is deprecated as of LUA 5.3 . reimplement it:
+ return sinh(x)/cosh(x)
+end
+
+function pgfluamathfunctions.Cos(x)
+ return mathcos(trigFormatToRadians(x))
+end
+pgfluamathfunctions.cos=pgfluamathfunctions.Cos
+
+function pgfluamathfunctions.Tan(x)
+ return mathtan(trigFormatToRadians(x))
+end
+pgfluamathfunctions.tan=pgfluamathfunctions.Tan
+
+function pgfluamathfunctions.aSin(x)
+ return radiansToTrigFormat(mathasin(x))
+end
+pgfluamathfunctions.asin=pgfluamathfunctions.aSin
+
+function pgfluamathfunctions.aCos(x)
+ return radiansToTrigFormat(mathacos(x))
+end
+pgfluamathfunctions.acos=pgfluamathfunctions.aCos
+
+function pgfluamathfunctions.aTan(x)
+ return radiansToTrigFormat(mathatan(x))
+end
+pgfluamathfunctions.atan=pgfluamathfunctions.aTan
+
+local mathatan2
+if math.atan2 == nil then
+ -- math.atan2 has been deprecated since LUA 5.3
+ mathatan2 = function (y,x) return mathatan(y,x) end
+else
+ mathatan2 = math.atan2
+end
+
+function pgfluamathfunctions.aTan2(y,x)
+ return radiansToTrigFormat(mathatan2(y,x))
+end
+pgfluamathfunctions.atan2=pgfluamathfunctions.aTan2
+pgfluamathfunctions.atantwo=pgfluamathfunctions.aTan2
+
+function pgfluamathfunctions.cot(x)
+ return pgfluamathfunctions.cos(x) / pgfluamathfunctions.sin(x)
+end
+function pgfluamathfunctions.sec(x)
+ return 1 / pgfluamathfunctions.cos(x)
+end
+function pgfluamathfunctions.cosec(x)
+ return 1 / pgfluamathfunctions.sin(x)
+end
+
+function pgfluamathfunctions.pointnormalised (pgfx, pgfy)
+ local pgfx_normalised, pgfy_normalised
+ if pgfx == 0. and pgfy == 0. then
+ -- Orginal pgf macro gives this result
+ tex.dimen['pgf@x'] = "0pt"
+ tex.dimen['pgf@y'] = "1pt"
+ else
+ pgfx_normalised = pgfx/math.sqrt(pgfx^2 + pgfy^2)
+ pgfx_normalised = pgfx_normalised - pgfx_normalised%0.00001
+ pgfy_normalised = pgfy/math.sqrt(pgfx^2 + pgfy^2)
+ pgfy_normalised = pgfy_normalised - pgfy_normalised%0.00001
+ tex.dimen['pgf@x'] = tostring(pgfx_normalised) .. "pt"
+ tex.dimen['pgf@y'] = tostring(pgfy_normalised) .. "pt"
+ end
+ return nil
+end
+
+local isnan = function(x)
+ return x ~= x
+end
+
+pgfluamathfunctions.isnan = isnan
+
+local infty = 1/0
+pgfluamathfunctions.infty = infty
+
+local nan = math.sqrt(-1)
+pgfluamathfunctions.nan = nan
+
+local stringlen = string.len
+local globaltonumber = tonumber
+local stringsub=string.sub
+local stringformat = string.format
+local stringsub = string.sub
+
+-- like tonumber(x), but it also accepts nan, inf, infty, and the TeX FPU format
+function pgfluamathfunctions.tonumber(x)
+ if type(x) == 'number' then return x end
+ if not x then return x end
+
+ local len = stringlen(x)
+ local result = globaltonumber(x)
+ if not result then
+ if len >2 and stringsub(x,2,2) == 'Y' and stringsub(x,len,len) == ']' then
+ -- Ah - some TeX FPU input of the form 1Y1.0e3] . OK. transform it
+ local flag = stringsub(x,1,1)
+ if flag == '0' then
+ -- ah, 0.0
+ result = 0.0
+ elseif flag == '1' then
+ result = globaltonumber(stringsub(x,3, len-1))
+ elseif flag == '2' then
+ result = globaltonumber("-" .. stringsub(x,3, len-1))
+ elseif flag == '3' then
+ result = nan
+ elseif flag == '4' then
+ result = infty
+ elseif flag == '5' then
+ result = -infty
+ end
+ else
+ local lower = x:lower()
+ if lower == 'nan' then
+ result = nan
+ elseif lower == "-nan" then
+ result = nan
+ elseif lower == 'inf' or lower == 'infty' then
+ result = infty
+ elseif lower == '-inf' or lower == '-infty' then
+ result = -infty
+ end
+ end
+ end
+
+ return result
+end
+
+local stringlen = string.len
+local globaltonumber = tonumber
+local stringformat = string.format
+local stringsub = string.sub
+local stringfind = string.find
+local stringbyte = string.byte
+local NULL_CHAR = string.byte("0",1)
+
+local function discardTrailingZeros(x)
+ local result = x
+ -- printf is too stupid: I would like to have
+ -- 1. a fast method
+ -- 2. a reliable method
+ -- 3. full precision of x
+ -- 4. a fixed point representation
+ -- the 'f' modifier has trailing zeros (stupid!)
+ -- the 'g' modified can switch to scientific notation (no-go!)
+ local periodOff = stringfind(result, '.',1,true)
+ if periodOff ~= nil then
+ -- strip trailing zeros
+ local chars = { stringbyte(result,1,#result) };
+ local lastNonZero = #chars
+ for i = #chars, periodOff, -1 do
+ if chars[i] ~= NULL_CHAR then lastNonZero=i; break; end
+ end
+ if lastNonZero ~= #chars then
+ -- Ah: we had at least one trailing zero.
+ -- discard all but the last.
+ lastNonZero = mathmax(periodOff+1,lastNonZero)
+ end
+ result = stringsub(result, 1, lastNonZero)
+ end
+ return result;
+end
+
+local function discardTrailingZerosFromMantissa(x)
+ local mantissaStart = stringfind(x, "e")
+
+ local mantissa = stringsub(x,1,mantissaStart-1)
+ local exponent = stringsub(x,mantissaStart)
+
+ return discardTrailingZeros(mantissa) .. exponent
+end
+
+
+-- a helper function which has no catcode issues when communicating with TeX:
+function pgfluamathfunctions.tostringfixed(x)
+ if x == nil then
+ return ""
+ end
+
+ return discardTrailingZeros(stringformat("%f", x))
+end
+
+-- converts an input number to a string which is accepted by the TeX FPU
+function pgfluamathfunctions.toTeXstring(x)
+ local result = ""
+ if x ~= nil then
+ if x == infty then result = "4Y0.0e0]"
+ elseif x == -infty then result = "5Y0.0e0]"
+ elseif isnan(x) then result = "3Y0.0e0]"
+ elseif x == 0 then result = "0Y0.0e0]"
+ else
+ result = discardTrailingZerosFromMantissa(stringformat("%.10e", x))
+ if x > 0 then
+ result = "1Y" .. result .. "]"
+ else
+ result = "2Y" .. stringsub(result,2) .. "]"
+ end
+ end
+ end
+ return result
+end
+
+return pgfluamathfunctions
diff --git a/graphics/pgf/contrib/pgfplots/tex/meshplothandler.lua b/graphics/pgf/contrib/pgfplots/tex/meshplothandler.lua
new file mode 100644
index 0000000000..dba97aaf35
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/meshplothandler.lua
@@ -0,0 +1,294 @@
+-- This file has dependencies to BOTH, the TeX part of pgfplots and the LUA part.
+-- It is the only LUA component with this property.
+--
+-- Its purpose is to encapsulate the communication between TeX and LUA in a central LUA file
+
+local pgfplotsmath = pgfplots.pgfplotsmath
+local error=error
+local table=table
+local string=string
+local tostring=tostring
+local type=type
+local io=io
+
+do
+-- all globals will be read from/defined in pgfplots:
+local _ENV = pgfplots
+
+
+-------------------------------------------------------
+-- A patch type.
+-- @see \pgfplotsdeclarepatchclass
+
+PatchType = newClass()
+
+function PatchType:constructor(name, numVertices)
+ self.name = name
+ self.numVertices = numVertices
+end
+
+function PatchType:__tostring()
+ return self.name
+end
+
+function PatchType:newPatch(coords)
+ return Patch.new(self,coords)
+end
+
+LinePatchType = newClassExtends(PatchType)
+
+function LinePatchType:constructor()
+ PatchType.constructor(self, "line", 2)
+end
+
+TrianglePatchType = newClassExtends(PatchType)
+
+function TrianglePatchType:constructor()
+ PatchType.constructor(self, "triangle", 3)
+end
+
+
+RectanglePatchType = newClassExtends(PatchType)
+
+function RectanglePatchType:constructor()
+ PatchType.constructor(self, "rectangle", 4)
+end
+
+-------------------------------------------------------
+--
+-- a single patch.
+-- @see \pgfplotsdeclarepatchclass
+
+Patch = newClass()
+
+function Patch:constructor(patchtype, coords)
+ if not patchtype or not coords then error("arguments must not be nil") end
+ if #coords ~= patchtype.numVertices then error("Unexpected number of coordinates provided; expected " .. tostring(patchtype.numVertices) .. " but got " .. tostring(#coords)) end
+
+ self.patchtype = patchtype
+ self.coords = coords
+end
+
+-------------------------------------------------------
+-- Replicates \pgfplotsplothandlermesh (to some extend)
+MeshPlothandler = newClassExtends(Plothandler)
+
+function MeshPlothandler:constructor(axis, pointmetainputhandler)
+ Plothandler.constructor(self,"mesh", axis, pointmetainputhandler)
+end
+
+-- see \pgfplot@apply@zbuffer
+function MeshPlothandler:reverseScanline(scanLineLength)
+ local coords = self.coords
+ local tmp
+ local scanlineOff
+ local numScanLines = #coords / scanLineLength
+ for scanline = 0,numScanLines-1,1 do
+ scanlineOff = scanline * scanLineLength
+ local reverseindex = scanlineOff + scanLineLength
+ for i = 0,scanLineLength/2-1,1 do
+ tmp = coords[1+scanlineOff+i]
+ coords[1+scanlineOff+i] = coords[reverseindex]
+ coords[reverseindex] = tmp
+
+ reverseindex = reverseindex-1
+ end
+ end
+end
+
+-- see \pgfplot@apply@zbuffer
+function MeshPlothandler:reverseTransposed(scanLineLength)
+ local coords = self.coords
+ local tmp
+ local scanlineOff
+ local numScanLines = #coords / scanLineLength
+ local reverseScanline = numScanLines-1
+ for scanline = 0,numScanLines/2-1,1 do
+ scanlineOff = 1+scanline * scanLineLength
+ reverseScanlineOff = 1+reverseScanline * scanLineLength
+ for i = 0,scanLineLength-1 do
+ tmp = coords[scanlineOff+i]
+ coords[scanlineOff+i] = coords[reverseScanlineOff+i]
+ coords[reverseScanlineOff+i] = tmp
+ end
+
+ reverseScanline = reverseScanline-1
+ end
+end
+
+-- see \pgfplot@apply@zbuffer
+function MeshPlothandler:reverseStream()
+ local coords = self.coords
+ local tmp
+ local reverseindex = #coords
+ for i = 1,#coords/2 do
+ tmp = coords[i]
+ coords[i] = coords[reverseindex]
+ coords[reverseindex] = tmp
+ reverseindex = reverseindex-1
+ end
+end
+
+
+
+-------------------------------------------------------
+--
+-- The (LUA!) visualizer for patch plots. It prepares stuff such that TeX only needs to work with lowlevel driver (PGF) streams.
+--
+
+MeshVisualizer = newClassExtends(PlotVisualizer)
+
+local COORDINATE_VALUE_OF_JUMPS = -16000
+local meshVisualizerTagEmptyCoordinates = function(pt)
+ pt.pgfXY= { COORDINATE_VALUE_OF_JUMPS, COORDINATE_VALUE_OF_JUMPS }
+ pt.x = { COORDINATE_VALUE_OF_JUMPS, COORDINATE_VALUE_OF_JUMPS, COORDINATE_VALUE_OF_JUMPS }
+end
+
+function MeshVisualizer:constructor(sourcePlotHandler, patchType, rows, cols, isXVariesOrdering, isMatrixInput, isMatrixOutput, isZBufferSort)
+ PlotVisualizer.constructor(self,sourcePlotHandler)
+ self.patchType = patchType
+ self.isMatrixInput = isMatrixInput
+ self.isMatrixOutput = isMatrixOutput
+ self.isZBufferSort = isZBufferSort
+ self.rows = rows
+ self.cols = cols
+ self.isXVariesOrdering =isXVariesOrdering
+
+ self.isOneDimMode= false
+ self.scanLineLength =-1
+ if isMatrixInput then
+ -- isOneDimMode is ONLY interesting for matrix input
+ if cols <= 1 or rows <=1 then
+ self.isOneDimMode = true
+ self.patchType = LinePatchType.new()
+ -- this is not yet implemented (and cannot happen since the TeX call does catch this)
+ error("UNSUPPORTED OPERATION EXCEPTION")
+ end
+
+ if isXVariesOrdering then
+ -- x varies (=rowwise)
+ self.scanLineLength = cols
+ else
+ -- y varies (=colwise)
+ self.scanLineLength = rows
+ end
+
+ self.notifyJump = meshVisualizerTagEmptyCoordinates
+ else
+ -- disable any special handling
+ self.isXVariesOrdering = true
+ end
+
+ -- log("initialized MeshVisualizer with " .. tostring(sourcePlotHandler) .. ", " .. tostring(patchType) .. ", isMatrixInput = " .. tostring(isMatrixInput) .. ", isMatrixOutput = " .. tostring(isMatrixOutput) .. ", isZBufferSort = " .. tostring(isZBufferSort) .. " rows = " ..tostring(rows) .. " cols = " ..tostring(cols) .. " is x varies=" .. tostring(isXVariesOrdering))
+end
+
+function MeshVisualizer:getVisualizationOutput()
+ local result = PlotVisualizer.getVisualizationOutput(self)
+
+ if self.isMatrixInput and not self.isMatrixOutput then
+ result = self:decodeIntoPatches(result)
+ end
+
+ if self.isZBufferSort then
+ result = self:applyZBufferSort(result)
+ end
+
+ return result
+end
+
+-- @param coords an array of Coord
+function MeshVisualizer:applyZBufferSort(coords)
+ -- in order to sort this thing, we need to compute the sort key (view depth) for each coord.
+ -- furthermore, each list entry must be single patch... that means we need a (huge?) temporary table.
+
+ local patchType = self.patchType
+ local numVertices = patchType.numVertices
+
+ if (#coords % numVertices) ~= 0 then error("Got an unexpected number of input coordinates: each patch has " .. tostring(numVertices) .. " vertices, but the number of coords " .. tostring(#coords) .. " is no multiple of this number") end
+ local numPatches = #coords / numVertices
+
+ -- STEP 1: compute an array of patches.
+ local patches = {}
+ local off=1
+ for i = 1,numPatches do
+ local patchCoords = {}
+ for j = 1,numVertices do
+ local pt = coords[off]
+ off = off+1
+ patchCoords[j] = pt
+ end
+ local patch = patchType:newPatch(patchCoords)
+ patches[i] = patch
+ end
+ if off ~= 1+#coords then error("Internal error: not all coordinates are part of patches (got " .. tostring(off) .. "/" .. tostring(#coords) ..")") end
+
+ -- STEP 2: assign the sort key: the "element depth".
+ --
+ -- the "element depth" is defined to be the MEAN of all
+ -- vertex depths.
+ -- And since the mean is 1/n * sum_{i=1}^n V_i, we can
+ -- directly omit the 1/n --- it is the same for every
+ -- vertex anyway, and we only want to compare the depth
+ -- values.
+ local axis = self.axis
+ local getVertexDepth = axis.getVertexDepth
+ for i=1,numPatches do
+ local patch = patches[i]
+ local patchcoords = patch.coords
+
+ local sumOfVertexDepth = 0
+ for j = 1,numVertices do
+ local vertex = patchcoords[j]
+
+ local vertexDepth = getVertexDepth(axis,vertex)
+
+ sumOfVertexDepth = sumOfVertexDepth + vertexDepth
+ end
+ patch.elementDepth = sumOfVertexDepth
+ end
+
+ -- STEP 3: SORT.
+ local comparator = function(patchA, patchB)
+ return patchA.elementDepth > patchB.elementDepth
+ end
+ table.sort(patches, comparator)
+
+ -- STEP 4: convert back into a list (in-place).
+ local off = 1
+ for i=1,numPatches do
+ local patch = patches[i]
+ local patchcoords = patch.coords
+ for j = 1,numVertices do
+ coords[off] = patchcoords[j]
+ off = off+1
+ end
+ end
+ if off ~= 1+#coords then error("Internal error: not all coordinates are part of patches (got " .. tostring(off) .. "/" .. tostring(#coords) ..")") end
+
+ return coords
+end
+
+function MeshVisualizer:decodeIntoPatches(coords)
+ local result = {}
+
+ local scanLineLength = self.scanLineLength
+ local length = #coords
+
+ local i = scanLineLength
+ while i < length do
+ local im = i-scanLineLength
+
+ for j = 2,scanLineLength do
+ table.insert(result, coords[im+j-1]) -- (i-1,j-1)
+ table.insert(result, coords[im+j]) -- (i-1,j )
+ table.insert(result, coords[i+j]) -- (i ,j )
+ table.insert(result, coords[i+j-1]) -- (i ,j-1)
+ end
+
+ i = i + scanLineLength
+ end
+
+ return result
+end
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/tex/parser.lua b/graphics/pgf/contrib/pgfplots/tex/parser.lua
new file mode 100644
index 0000000000..072ac05854
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/parser.lua
@@ -0,0 +1,504 @@
+--------------------------------------------------------------------------------------------------
+------ This file is a copy of some part of PGF/Tikz.
+------ It has been copied here to provide :
+------ - compatibility with older PGF versions
+------ - availability of PGF contributions by Christian Feuersaenger
+------ which are necessary or helpful for pgfplots.
+------
+------ For reasons of simplicity, I have copied the whole file, including own contributions AND
+------ PGF parts. The copyrights are as they appear in PGF.
+------
+------ Note that pgfplots has compatible licenses.
+------
+------ This copy has been modified in the following ways:
+------ - nested \input commands have been updated
+------
+--
+-- Support for the contents of this file will NOT be done by the PGF/TikZ team.
+-- Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+-- with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+-- This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+----------------------------------------------------------------------------------------------------
+-- Date of this copy: Mi 6. Jan 11:32:04 CET 2016 ---
+
+
+
+-- Copyright 2011 by Christophe Jorssen and Mark Wibrow
+-- Copyright 2014 by Christian Feuersaenger
+--
+-- This file may be distributed and/or modified
+--
+-- 1. under the LaTeX Project Public License and/or
+-- 2. under the GNU Public License.
+--
+-- See the file doc/generic/pgf/licenses/LICENSE for more details.
+--
+-- $Id: parser.lua,v 1.3 2015/11/28 17:20:49 cfeuersaenger Exp $
+--
+-- usage:
+--
+-- pgfluamathparser = require("pgfplotsoldpgfsupp.luamath.parser")
+--
+-- local result = pgfluamathparser.pgfmathparse("1+ 2*4^2")
+--
+-- This LUA class has a direct backend in \pgfuselibrary{luamath}, see the documentation of that TeX package.
+
+local pgfluamathparser = pgfluamathparser or {}
+
+pgfluamathfunctions = require("pgfplotsoldpgfsupp.luamath.functions")
+
+-- lpeg is always present in luatex
+local lpeg = require("lpeg")
+
+local S, P, R = lpeg.S, lpeg.P, lpeg.R
+local C, Cc, Ct = lpeg.C, lpeg.Cc, lpeg.Ct
+local Cf, Cg, Cs = lpeg.Cf, lpeg.Cg, lpeg.Cs
+local V = lpeg.V
+local match = lpeg.match
+
+local space_pattern = S(" \n\r\t")^0
+local tex_unit =
+ P('pt') + P('mm') + P('cm') + P('in') +
+ -- while valid units, the font-depending ones need special attention... move them to the TeX side. For now.
+ -- P('ex') + P('em') +
+ P('bp') + P('pc') +
+ P('dd') + P('cc') + P('sp');
+
+local one_digit_pattern = R("09")
+local positive_integer_pattern = one_digit_pattern^1
+-- FIXME : it might be a better idea to remove '-' from all number_patterns! Instead, rely on the prefix operator 'neg' to implement negative numbers.
+-- Is that wise? It is certainly less efficient...
+local integer_pattern = S("+-")^-1 * positive_integer_pattern
+-- Valid positive decimals are |xxx.xxx|, |.xxx| and |xxx.|
+local positive_integer_or_decimal_pattern = positive_integer_pattern * ( P(".") * one_digit_pattern^0)^-1 +
+ (P(".") * one_digit_pattern^1)
+local integer_or_decimal_pattern = S("+-")^-1 * positive_integer_or_decimal_pattern
+local fpu_pattern = R"05" * P"Y" * positive_integer_or_decimal_pattern * P"e" * S("+-")^-1 * R("09")^1 * P"]"
+local unbounded_pattern = P"inf" + P"INF" + P"nan" + P"NaN" + P"Inf"
+local number_pattern = C(unbounded_pattern + fpu_pattern + integer_or_decimal_pattern * (S"eE" * integer_pattern + C(tex_unit))^-1)
+
+local underscore_pattern = P("_")
+
+local letter_pattern = R("az","AZ")
+local alphanum__pattern = letter_pattern + one_digit_pattern + underscore_pattern
+
+local identifier_pattern = letter_pattern^1 * alphanum__pattern^0
+
+local openparen_pattern = P("(") * space_pattern
+local closeparen_pattern = P(")")
+local opencurlybrace_pattern = P("{")
+local closecurlybrace_pattern = P("}")
+local openbrace_pattern = P("[")
+local closebrace_pattern = P("]")
+
+-- hm. what about '\\' or '\%' ?
+-- accept \pgf@x, \count0, \dimen42, \c@pgf@counta, \wd0, \ht0, \dp 0
+local controlsequence_pattern = P"\\" * C( (R("az","AZ") + P"@")^1) * space_pattern* C( R"09"^0 )
+
+-- local string = P('"') * C((1 - P('"'))^0) * P('"')
+
+local comma_pattern = P(",") * space_pattern
+
+
+----------------
+local TermOp = C(S("+-")) * space_pattern
+local EqualityOp = C( P"==" + P"!=" ) * space_pattern
+local RelationalOp = C( P"<=" + P">=" + P"<" + P">" ) * space_pattern
+local FactorOp = C(S("*/")) * space_pattern
+
+-- Grammar
+local Exp, Term, Factor = V"Exp", V"Term", V"Factor"
+local Prefix = V"Prefix"
+local Postfix = V"Postfix"
+
+
+
+local function eval (v1, op, v2)
+ if (op == "+") then return v1 + v2
+ elseif (op == "-") then return v1 - v2
+ elseif (op == "*") then return v1 * v2
+ elseif (op == "/") then return v1 / v2
+ else
+ error("This function must not be invoked for operator "..op)
+ end
+end
+
+local pgfStringToFunctionMap = pgfluamathfunctions.stringToFunctionMap
+local function function_eval(name, ... )
+ local f = pgfStringToFunctionMap[name]
+ if not f then
+ error("Function '" .. name .. "' is undefined (did not find pgfluamathfunctions."..name .." (looked into pgfluamathfunctions.stringToFunctionMap))")
+ end
+ -- FIXME: validate signature
+ return f(...)
+end
+
+
+local func =
+ (C(identifier_pattern) * space_pattern * openparen_pattern * Exp * (comma_pattern * Exp)^0 * closeparen_pattern) / function_eval;
+
+local functionWithoutArg = identifier_pattern / function_eval
+
+-- this is what can occur as exponent after '^'.
+-- I have the impression that the priorities could be implemented in a better way than this... but it seems to work.
+local pow_exponent =
+ -- allows 2^-4, 2^1e4, 2^2
+ -- FIXME : why not 2^1e2 ?
+ Cg(C(integer_or_decimal_pattern)
+ -- 2^pi, 2^multiply(2,2)
+ + Cg(func+functionWithoutArg)
+ -- 2^(2+2)
+ + openparen_pattern * Exp * closeparen_pattern )
+
+local function prefix_eval(op, x)
+ if op == "-" then
+ return pgfluamathfunctions.neg(x)
+ elseif op == "!" then
+ return pgfluamathfunctions.notPGF(x)
+ else
+ error("This function must not be invoked for operator "..op)
+ end
+end
+
+
+local prefix_operator = C( S"-!" )
+local prefix_operator_pattern = (prefix_operator * space_pattern * Cg(Prefix) ) / prefix_eval
+
+-- apparently, we need to distinghuish between <expr> ! and <expr> != <expr2>:
+local postfix_operator = C( S"r!" - P"!=" ) + C(P"^") * space_pattern * pow_exponent
+
+
+local ternary_eval = pgfluamathfunctions.ifthenelse
+
+local factorial_eval = pgfluamathfunctions.factorial
+local deg = pgfluamathfunctions.deg
+local pow_eval = pgfluamathfunctions.pow
+
+-- @param prefix the argument before the postfix operator.
+-- @param op either nil or the postfix operator
+-- @param arg either nil or the (mandatory) argument for 'op'
+local function postfix_eval(prefix, op, arg)
+ local result
+ if op == nil then
+ result = prefix
+ elseif op == "r" then
+ if arg then error("parser setup error: expected nil argument") end
+ result = deg(prefix)
+ elseif op == "!" then
+ if arg then error("parser setup error: expected nil argument") end
+ result = factorial_eval(prefix)
+ elseif op == "^" then
+ if not arg then error("parser setup error: ^ with its argument") end
+ result = pow_eval(prefix, arg)
+ else
+ error("Parser setup error: " .. tostring(op) .. " unexpected in this context")
+ end
+ return result
+end
+
+local function equality_eval(v1, op, v2)
+ local fct
+ if (op == "==") then fct = pgfluamathfunctions.equal
+ elseif (op == "!=") then fct = pgfluamathfunctions.notequal
+ else
+ error("This function must not be invoked for operator "..op)
+ end
+ return fct(v1,v2)
+end
+local function relational_eval(v1, op, v2)
+ local fct
+ if (op == "<") then fct = pgfluamathfunctions.less
+ elseif (op == ">") then fct = pgfluamathfunctions.greater
+ elseif (op == ">=") then fct = pgfluamathfunctions.notless
+ elseif (op == "<=") then fct = pgfluamathfunctions.notgreater
+ else
+ error("This function must not be invoked for operator "..op)
+ end
+ return fct(v1,v2)
+end
+
+-- @return either the box property or nil
+-- @param cs "wd", "ht", or "dp"
+-- @param intSuffix some integer
+local function get_tex_box(cs, intSuffix)
+ -- assume get_tex_box is only called when a dimension is required.
+ local result
+ pgfluamathparser.units_declared = true
+ local box =tex.box[tonumber(intSuffix)]
+ if not box then error("There is no box " .. intSuffix) end
+ if cs == "wd" then
+ result = box.width / 65536
+ elseif cs == "ht" then
+ result = box.height / 65536
+ elseif cs == "dp" then
+ result = box.depth / 65536
+ else
+ result = nil
+ end
+ return result
+end
+
+
+local function controlsequence_eval(cs, intSuffix)
+ local result
+ if intSuffix and #intSuffix >0 then
+ if cs == "count" then
+ result= pgfluamathparser.get_tex_count(intSuffix)
+ elseif cs == "dimen" then
+ result= pgfluamathparser.get_tex_dimen(intSuffix)
+ else
+ result = get_tex_box(cs,intSuffix)
+ if not result then
+ -- this can happen - we cannot expand \chardef'ed boxes here.
+ -- this will be done by the TeX part
+ error('I do not know/support the TeX register "\\' .. cs .. '"')
+ end
+ end
+ else
+ result = pgfluamathparser.get_tex_register(cs)
+ end
+ return result
+end
+
+pgfluamathparser.units_declared = false
+function pgfluamathparser.get_tex_register(register)
+ -- register is a string which could be a count or a dimen.
+ if pcall(tex.getcount, register) then
+ return tex.count[register]
+ elseif pcall(tex.getdimen, register) then
+ pgfluamathparser.units_declared = true
+ return tex.dimen[register] / 65536 -- return in points.
+ else
+ error('I do not know the TeX register "' .. register .. '"')
+ return nil
+ end
+
+end
+
+function pgfluamathparser.get_tex_count(count)
+ -- count is expected to be a number
+ return tex.count[tonumber(count)]
+end
+
+function pgfluamathparser.get_tex_dimen(dimen)
+ -- dimen is expected to be a number
+ pgfluamathparser.units_declared = true
+ return tex.dimen[tonumber(dimen)] / 65536
+end
+
+function pgfluamathparser.get_tex_sp(dimension)
+ -- dimension should be a string
+ pgfluamathparser.units_declared = true
+ return tex.sp(dimension) / 65536
+end
+
+
+local initialRule = V"initial"
+
+local Summand = V"Summand"
+local Relational = V"Relational"
+local Equality = V"Equality"
+local LogicalOr = V"LogicalOr"
+local LogicalAnd = V"LogicalAnd"
+
+local pgftonumber = pgfluamathfunctions.tonumber
+local tonumber_withunit = pgfluamathparser.get_tex_sp
+local function number_optional_units_eval(x, unit)
+ if not unit then
+ return pgftonumber(x)
+ else
+ return tonumber_withunit(x)
+ end
+end
+
+-- @param scale the number.
+-- @param controlsequence either nil in which case just the number must be returned or a control sequence
+-- @see controlsequence_eval
+local function scaled_controlsequence_eval(scale, controlsequence, intSuffix)
+ if controlsequence==nil then
+ return scale
+ else
+ return scale * controlsequence_eval(controlsequence, intSuffix)
+ end
+end
+
+-- Grammar
+--
+-- for me:
+-- - use '/' to evaluate all expressions which contain a _constant_ number of captures.
+-- - use Cf to evaluate expressions which contain a _dynamic_ number of captures
+--
+-- see unittest_luamathparser.tex for tons of examples
+local G = P{ "initialRule",
+ initialRule = space_pattern* Exp * -1;
+ -- ternary operator (or chained ternary operators):
+ -- FIXME : is this chaining a good idea!?
+ Exp = Cf( LogicalOr * Cg(P"?" * space_pattern * LogicalOr * P":" *space_pattern * LogicalOr )^0, ternary_eval) ;
+ LogicalOr = Cf(LogicalAnd * (P"||" * space_pattern * LogicalAnd)^0, pgfluamathfunctions.orPGF);
+ LogicalAnd = Cf(Equality * (P"&&" * space_pattern * Equality)^0, pgfluamathfunctions.andPGF);
+ Equality = Cf(Relational * Cg(EqualityOp * Relational)^0, equality_eval);
+ Relational = Cf(Summand * Cg(RelationalOp * Summand)^0, relational_eval);
+ Summand = Cf(Term * Cg(TermOp * Term)^0, eval) ;
+ Term = Cf(Prefix * Cg(FactorOp * Prefix)^0, eval);
+ Prefix = prefix_operator_pattern + Postfix;
+ -- this calls 'postfix_eval' with nil arguments if it is no postfix operation.. but that does not hurt (right?)
+ Postfix = Factor * (postfix_operator * space_pattern)^-1 / postfix_eval;
+ Factor =
+ (
+ number_pattern / number_optional_units_eval *
+ -- this construction will evaluate number_pattern with 'number_optional_units_eval' FIRST.
+ -- also accept '0.5 \pgf@x' here:
+ space_pattern *controlsequence_pattern^-1 / scaled_controlsequence_eval
+ + func
+ + functionWithoutArg
+ + openparen_pattern * Exp * closeparen_pattern
+ + controlsequence_pattern / controlsequence_eval
+ ) *space_pattern
+ ;
+}
+
+-- does not reset units_declared.
+local function pgfmathparseinternal(str)
+ local result = match(G,str)
+ if result == nil then
+ error("The string '" .. str .. "' is no valid PGF math expression. Please check for syntax errors.")
+ end
+ return result
+end
+
+
+-- This is the math parser function in this module.
+--
+-- @param str a string like "1+1" which is accepted by the PGF math language
+-- @return the result of the expression.
+--
+-- Throws an error if the string is no valid expression.
+function pgfluamathparser.pgfmathparse(str)
+ pgfluamathparser.units_declared = false
+
+ return pgfmathparseinternal(str)
+end
+
+local pgfmathparse = pgfluamathparser.pgfmathparse
+local tostringfixed = pgfluamathfunctions.tostringfixed
+local tostringfpu = pgfluamathfunctions.toTeXstring
+
+local tmpFunctionArgumentPrefix = "tmpVar"
+local stackOfLocalFunctions = {}
+
+-- This is a backend for PGF's 'declare function'.
+-- \tikzset{declare function={mu(\x,\i)=\x^\i;}}
+-- will boil down to
+-- pgfluamathparser.declareExpressionFunction("mu", 2, "#1^#2")
+--
+-- The local function will be pushed on a stack of known local functions and is
+-- available until popLocalExpressionFunction() is called. TeX will call this using
+-- \aftergroup.
+--
+-- @param name the name of the new function
+-- @param numArgs the number of arguments
+-- @param expression an expression containing #1, ... #n where n is numArgs
+--
+-- ATTENTION: local functions behave DIFFERENTLY in LUA!
+-- In LUA, local variables are not expanded whereas TeX expands them.
+-- The difference is
+--
+-- declare function={mu1(\x,\i)=\x^\i;}
+-- \pgfmathparse{mu1(-5,2)} --> -25
+-- \pgfluamathparse{mu1(-5,2)} --> 25
+--
+-- x = -5
+-- \pgfmathparse{mu1(x,2)} --> 25
+-- \pgfluamathparse{mu1(x,2)} --> 25
+--
+-- In an early prototype, I simulated TeX's expansion to fix the first case (successfully).
+-- BUT: that "simulated expansion" broke the second case because LUA will evaluate "x" and hand -5 to the local function.
+-- I decided to keep it as is. Perhaps we should fix PGF's expansion approach in TeX (which is ugly anyway)
+function pgfluamathparser.pushLocalExpressionFunction(name, numArgs, expression)
+ -- now we have "tmpVar1^tmpVar2" instead of "#1^#2"
+ local normalizedExpr = expression:gsub("#", tmpFunctionArgumentPrefix)
+ local restores = {}
+ local tmpVars = {}
+ for i=1,numArgs do
+ local tmpVar = tmpFunctionArgumentPrefix .. tostring(i)
+ tmpVars[i] = tmpVar
+ end
+
+ local newFunction = function(...)
+ local args = table.pack(...)
+
+ -- define "tmpVar1" ... "tmpVarN" to return args[i].
+ -- Of course, we need to restore "tmpVar<i>" after we return!
+ for i=1,numArgs do
+ local tmpVar = tmpVars[i]
+ local value = args[i]
+ restores[i] = pgfStringToFunctionMap[tmpVar]
+ pgfStringToFunctionMap[tmpVar] = function () return value end
+ end
+
+ -- parse our expression.
+
+ -- FIXME : this here is an attempt to mess around with "units_declared".
+ -- It would be better to call pgfmathparse and introduce some
+ -- semaphore to check if pgfmathparse is a nested call-- in this case, it should
+ -- not reset units_declared. But there is no "finally" block and pcall is crap (looses stack trace).
+ local success,result = pcall(pgfmathparseinternal, normalizedExpr)
+
+ -- remove 'tmpVar1', ... from the function table:
+ for i=1,numArgs do
+ local tmpVar = tmpVars[i]
+ pgfStringToFunctionMap[tmpVar] = restores[i]
+ end
+
+ if success==false then error(result) end
+ return result
+ end
+ table.insert(stackOfLocalFunctions, name)
+ pgfStringToFunctionMap[name] = newFunction
+end
+
+function pgfluamathparser.popLocalExpressionFunction()
+ local name = stackOfLocalFunctions[#stackOfLocalFunctions]
+ pgfStringToFunctionMap[name] = nil
+ -- this removes the last element:
+ table.remove(stackOfLocalFunctions)
+end
+
+
+-- A Utility function which simplifies the interaction with the TeX code
+-- @param expression the input expression (string)
+-- @param outputFormatChoice 0 if the result should be a fixed point number, 1 if it should be in FPU format
+-- @param showErrorMessage (boolean) true if any error should be displayed, false if errors should simply result in an invocation of TeX's parser (the default)
+--
+-- it defines \pgfmathresult and \ifpgfmathunitsdeclared
+function pgfluamathparser.texCallParser(expression, outputFormatChoice, showErrorMessage)
+ local success, result
+ if showErrorMessage then
+ result = pgfmathparse(expression)
+ success = true
+ else
+ success, result = pcall(pgfmathparse, expression)
+ end
+
+ if success and result then
+ local result_str
+ if outputFormatChoice == 0 then
+ -- luamath/output format=fixed
+ result_str = tostringfixed(result)
+ else
+ -- luamath/output format=fixed
+ result_str = tostringfpu(result)
+ end
+ tex.sprint("\\def\\pgfmathresult{" .. result_str .. "}")
+ if pgfluamathparser.units_declared then
+ tex.sprint("\\pgfmathunitsdeclaredtrue")
+ else
+ tex.sprint("\\pgfmathunitsdeclaredfalse")
+ end
+ else
+ tex.sprint("\\def\\pgfmathresult{}")
+ tex.sprint("\\pgfmathunitsdeclaredfalse")
+ end
+end
+
+return pgfluamathparser
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibraryfillbetween.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgflibraryfillbetween.code.tex
new file mode 100644
index 0000000000..d17fff3e2f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibraryfillbetween.code.tex
@@ -0,0 +1,1265 @@
+% Copyright 2013 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+
+\usepgflibrary{intersections}
+
+\pgfutil@IfUndefined{pgf@intersections@version}{%
+ \input pgfplotsoldpgfsupp_pgflibraryintersections.code.tex
+}{%
+}%
+
+% FIXME : ARCHITECTURE VIOLATION: REQUIRES
+% \usetikzlibrary{decorations.softclip}
+%
+%\usepgfmodule{decorations}
+
+\newif\ifpgfpathfillbetween@split
+
+\pgfkeys{%
+ /pgf/fill between/reverse/.is choice,
+ /pgf/fill between/reverse/.default=true,
+ /pgf/fill between/reverse/false/.code=\def\pgfpathfillbetween@reverse@mode{0},%
+ /pgf/fill between/reverse/true/.code=\def\pgfpathfillbetween@reverse@mode{1},%
+ %
+ % checks the coordinates of the first two path instructions as heuristics:
+ /pgf/fill between/reverse/auto/.code=\def\pgfpathfillbetween@reverse@mode{2},%
+ /pgf/fill between/reverse/auto,
+ /pgf/fill between/inner moveto/.is choice,
+ /pgf/fill between/inner moveto/connect/.code=\def\pgfpathfillbetween@inner@moveto{1},
+ /pgf/fill between/inner moveto/keep/.code=\def\pgfpathfillbetween@inner@moveto{2},
+ /pgf/fill between/inner moveto/connect,
+ %
+ % split=true allows to generate individual result paths for every
+ % region induced by the intersection points. Example:
+ % "color positive region in red and negative region in green".
+ % The case split=false results in just one output path
+ % (simpler+faster, but of course less powerful).
+ /pgf/fill between/split/.is if=pgfpathfillbetween@split,
+ /pgf/fill between/split/.default=true,
+ %
+ % Used to report results. This is mainly useful in conjunction
+ % with split=true: each result segment will be streamed.
+ %
+ % Results are reported in the sequence
+ % begin
+ % next ready
+ % next ready
+ % ...
+ % end
+ %
+ % 'begin' has one arguments: the number of following single
+ % streams.
+ /pgf/fill between/result stream/begin/.code=,%
+ %
+ % 'next ready' has macro arguments, but the macro \pgfretval
+ % contains the lowlevel path as result (i.e. you can write
+ % \pgfsetpath\pgfretval to activate it).
+ /pgf/fill between/result stream/next ready/.code={
+ \pgfaddpathandBB{\pgfretval}%
+ },%
+ %
+ % 'end' has no arguments.
+ /pgf/fill between/result stream/end/.code=,%
+ %
+ /pgf/fill between/omit empty segments/.is choice,
+ /pgf/fill between/omit empty segments/.default=true,
+ /pgf/fill between/omit empty segments/false/.code=\def\pgfpathfillbetween@omit@empty@segments{0},%
+ /pgf/fill between/omit empty segments/true/.code=\def\pgfpathfillbetween@omit@empty@segments{1},%
+ /pgf/fill between/omit empty segments/true,
+}%
+
+% \pgfpathfillbetween[<options>]{<first path>}{<second path>}
+%
+% Generates a new path consisting of the "fill between" of the two arguments.
+% #1: optional arguments with /pgf/fill between prefix
+% #2: a macro containing the first path. More precisely, it is supposed to be a return value of \pgfgetpath.
+% #3: a macro containing the second path (in a format understood by \pgfsetpath). It is supposed to be a return value of \pgfgetpath.
+\def\pgfpathfillbetween{\pgfutil@ifnextchar[{\pgfpathfillbetween@opt}{\pgfpathfillbetween@opt[]}}%
+\def\pgfpathfillbetween@opt[#1]#2#3{%
+ \begingroup
+ \pgfqkeys{/pgf/fill between}{#1}%
+ %
+ % remove any special round-corner-tokens:
+ \pgfprocessround{#2}{#2}%
+ \pgfprocessround{#3}{#3}%
+ %
+ \if1\pgfpathfillbetween@inner@moveto
+ % inner moveto=connect:
+ \pgfpathfillbetween@connect@inner@movetos#2%
+ \pgfpathfillbetween@connect@inner@movetos#3%
+ \fi
+ %
+ \if2\pgfpathfillbetween@reverse@mode
+ % reverse=auto
+ \expandafter\pgfpathfillbetween@heuristics@get@direction#2\pgf@stop
+ \let\pgfpath@filled@dir@first=\pgfretval
+ \expandafter\pgfpathfillbetween@heuristics@get@direction#3\pgf@stop
+ \let\pgfpath@filled@dir@second=\pgfretval
+ %
+ \ifx\pgfpath@filled@dir@first\pgfpath@filled@dir@second
+ % Ok, they (seem to) have the same direction. Reverse one of them:
+ \def\pgfpathfillbetween@reverse@mode{1}%
+ \else
+ \def\pgfpathfillbetween@reverse@mode{0}%
+ \fi
+ \fi
+ %
+ % softclip, if configured (no-op otherwise):
+ \pgfpathcomputesoftclippath{#2}{\pgfpathfillbetween@softclip@A}\let#2=\pgfretval%
+ \pgfpathcomputesoftclippath{#3}{\pgfpathfillbetween@softclip@B}\let#3=\pgfretval%
+ %
+ \ifx#2\pgfutil@empty
+ \ifx\pgfpathfillbetween@softclip@A\pgfutil@empty
+ \pgfpathfillbetween@warning{first}%
+ \else
+ \pgfpathfillbetween@warning{soft-clipped first}%
+ \fi
+ \else
+ \ifx#3\pgfutil@empty
+ \ifx\pgfpathfillbetween@softclip@B\pgfutil@empty
+ \pgfpathfillbetween@warning{second}%
+ \else
+ \pgfpathfillbetween@warning{soft-clipped second}%
+ \fi
+ \else
+ %
+ \ifpgfpathfillbetween@split
+ \pgfpathfillbetween@compute@splitted{#2}{#3}%
+ \else
+ \pgfkeys{/pgf/fill between/result stream/begin=1}%
+ \pgfpathfillbetween@compute{#2}{#3}%
+ \pgfpathfillbetween@invoke{result stream/next ready}%
+ \pgfpathfillbetween@invoke{result stream/end}%
+ \fi
+ \fi
+ \fi
+ %
+ %
+ \endgroup
+}%
+
+\def\pgfpathfillbetween@warning#1{%
+ \pgfwarning{fill between skipped: the #1 input path is empty.}%
+}%
+
+% Replaces all 'moveto' operations inside of the soft path '#1' by
+% 'lineto'. This excludes the first moveto.
+%
+% The motivation is that fillbetween should ignore inner movetos.
+%
+% UPDATE: it turned out that replacing inner movetos is necessary, but
+% not sufficient. Now, this macro does more:
+% - it replaces isolated inner movetos by lineto
+% - if two successive inner movetos occur, it throws away the first
+% one replaces the second by lineto
+% - if one or more trailing movetos occur in a path, these will be
+% thrown away.
+\def\pgfpathfillbetween@connect@inner@movetos#1{%
+ \expandafter\pgfpathfillbetween@connect@inner@movetos@#1\pgf@stop%
+ \let#1=\pgfretval
+}
+\def\pgfpathfillbetween@connect@inner@movetos@#1#2\pgf@stop{%
+ \ifx#1\pgfsyssoftpath@movetotoken
+ \pgfpathfillbetween@connect@inner@movetos@@{#2}%
+ \expandafter\def\expandafter\pgfretval\expandafter{\expandafter\pgfsyssoftpath@movetotoken\pgfretval}%
+ \else
+ \pgfpathfillbetween@connect@inner@movetos@@{#1#2}%
+ \fi
+}%
+
+% Substitute all movetotokens by linetotokens.
+%
+% In addition, it should *deduplicate* movetos, i.e.
+% "moveto{<x>}{<y}moveto{<x2>}{<y2>}"
+% -> "moveto{<x2>}{<y2>}"
+%
+% and: trailing movetos should be discarded.
+\def\pgfpathfillbetween@connect@inner@movetos@@#1{%
+ % this implementation is derived from \pgfutilstrreplace - it does
+ % almost the same as
+ % s/\pgfsyssoftpath@movetotoken/pgfsyssoftpath@linetotoken/g
+ % -> but with the extra additions of deduplication and trailing
+ % moveto removal.
+ \def\pgfretval{}%
+ \pgfpathfillbetween@search@and@replace@loop{#1}%
+}
+\def\pgfpathfillbetween@connect@inner@moveto@foundit@#1\pgfsyssoftpath@movetotoken#2#3#4{%
+ \ifx#4\pgf@EOI
+ % ah - a trailing moveto.
+ % In this case, we remember all until the moveto, but we omit
+ % the trailing moveto and its arguments.
+ \expandafter\def\expandafter\pgfretval\expandafter{\pgfretval #1}%
+ %
+ % ... and stop searching.
+ \let\pgf@loc@TMPa\relax
+ \else
+ \ifx#4\pgfsyssoftpath@movetotoken
+ % DEDUPLICATE: we have at least two successive movetos.
+ % silently skip the first moveto and its arguments and go on
+ % with the second moveto.
+ \def\pgf@loc@TMPa{\pgfpathfillbetween@connect@inner@moveto@foundit@#1\pgfsyssoftpath@movetotoken}%
+ \else
+ % substitute it by a lineto.
+ \expandafter\def\expandafter\pgfretval\expandafter{\pgfretval #1\pgfsyssoftpath@linetotoken{#2}{#3}}%
+ %
+ % ... continue the standard loop which skips over paths
+ % until the next moveto. Remember to re-insert '#4':
+ \def\pgf@loc@TMPa{\pgfpathfillbetween@connect@inner@moveto@foundit@@ #4}%
+ \fi
+ \fi
+ \pgf@loc@TMPa
+}%
+\def\pgfpathfillbetween@connect@inner@moveto@foundit@@#1\pgf@EOI{%
+ \pgfpathfillbetween@search@and@replace@loop{#1}%
+}%
+
+\def\pgfpathfillbetween@search@and@replace@loop#1{%
+ \pgfutil@in@{\pgfsyssoftpath@movetotoken}{#1}%
+ \ifpgfutil@in@
+ \def\pgf@loc@TMPa{\pgfpathfillbetween@connect@inner@moveto@foundit@ #1\pgf@EOI}%
+ \else
+ \expandafter\def\expandafter\pgfretval\expandafter{\pgfretval #1}%
+ \let\pgf@loc@TMPa=\relax
+ \fi
+ \pgf@loc@TMPa
+}%
+
+\def\pgfpathfillbetween@invoke#1{\pgfkeysvalueof{/pgf/fill between/#1/.@cmd}\pgfeov}
+
+\def\pgfpathfillbetween@replace@first@moveto#1#2\pgf@stop{%
+ \ifx#1\pgfsyssoftpath@movetotoken
+ \def\pgfretval{\pgfsyssoftpath@linetotoken #2}%
+ \else
+ \def\pgfretval{#1#2}%
+ \fi
+}%
+
+\def\pgfpathfillbetween@compute@splitted#1#2{%
+ % 0. normalize path sequences.
+ % ATTENTION : there are implicit assumptions on the INTERNAL ORDER of the two paths!
+ % This implementation needs to loop over them synchronously, i.e. it processes
+ % the 0.th segment of a and the 0th of b,
+ % the 1.th segment of a and the 1th of b,
+ % and so on. Here, "i th segment" implies a sort order in ascending x direction.
+ % This is, however, a weakness of \pgfintersectionofpaths - it does not really support this kind of sorting.
+ %
+ % I work around this by restricting the implementation to the "common use-cases", i.e. to two plots of functions which do not intersect themselves (i.e. to "functions" in the original sense). This will probably (almost surely) fail for parametric functions or circles.
+ %
+ \if0\pgfpathfillbetween@reverse@mode
+ % reverse=false
+ %
+ % This means one plot is in direction '+' and one in '-', i.e.
+ % a: x ---> x ---> x
+ % b: x <--- x <--- x
+ %
+ % However, we have the implicit assumption that both paths can be processed synchronously, i.e. that they have the SAME direction.
+ % To this end, we have to reverse one of them here (since \pgfintersectionofpaths does not automatically sort results in a suitable way):
+ %
+ \pgf@reverse@path{#2}%
+ \let#2=\pgfretval
+ %
+ % However, we need to re-reverse the individual segments later-on...
+ % So: set 'reverse=true'. Will be respected when assembling the splitted segments...
+ \def\pgfpathfillbetween@reverse@mode{1}%
+ \fi
+ %
+ % 1. compute intersection points:
+ \pgf@intersect@sort@by@second@pathfalse
+ %
+ % FIXME : do we want to sort by time!? That might be needed for curvetos ... ?
+ \pgf@intersect@sortfalse
+ \pgfintersectionofpaths%
+ {%
+ \pgfsetpath#1%
+ }%
+ {%
+ \pgfsetpath#2%
+ }%
+ %
+ % FIXME : computing the intersections is fine... but it would be
+ % even finer to report the resulting points back to tikz!
+ % -> call the *tikz* intersection lib through some sort of callback!?
+ %
+ % 2. split the first involved path into the
+ % segments induced by the intersection points:
+ \pgfcomputeintersectionsegments{1}%
+ \let\pgfpathfilled@a@segments=\pgfretval
+%
+ % 2. split the second involved path into the
+ % segments induced by the intersection points:
+ \pgfcomputeintersectionsegments{2}%
+ \let\pgfpathfilled@b@segments=\pgfretval
+ %
+ \ifnum\pgfpathfilled@a@segments=\pgfpathfilled@b@segments\relax
+ \else
+ \pgferror{Illegal internal state encountered: the number segments induced by the intersection points of the two paths DIFFER between the first and the second path: first path has \pgfpathfilled@a@segments\space whereas the second has \pgfpathfilled@b@segments.}%
+ \fi
+ %
+ % STEP 1: find out if there are empty segments. Numerical
+ % inaccuracies occasionally result in such segments; we silently
+ % skip them.
+ \def\c@pgfpathfilled@nonemptysegments{0}%
+ \def\c@pgfpathfilled@counter{0}%
+ \pgfmathloop
+ \ifnum\c@pgfpathfilled@counter<\pgfpathfilled@a@segments\relax
+ \expandafter\let\expandafter\pgf@loc@path@a\csname pgf@intersect@path@split@a@\c@pgfpathfilled@counter\endcsname
+ \expandafter\let\expandafter\pgf@loc@path@b\csname pgf@intersect@path@split@b@\c@pgfpathfilled@counter\endcsname
+ %
+ \if1\pgfpathfillbetween@omit@empty@segments
+ \pgfpathfillbetween@compute@checkempty{\pgf@loc@path@a}%
+ % A segment is empty if BOTH of its input segments are empty:
+ \if1\pgfretval
+ \pgfpathfillbetween@compute@checkempty{\pgf@loc@path@b}%
+ \if1\pgfretval
+ \pgfutil@IfUndefined{pgfplots@log}{}{%
+ \pgfplots@log4{fillbetween: skipping empty intersection segment no \c@pgfpathfilled@counter}%
+ }%
+ \expandafter\def\csname pgf@interset@path@empty@\c@pgfpathfilled@counter\endcsname{1}%
+ \else
+ \expandafter\def\csname pgf@interset@path@empty@\c@pgfpathfilled@counter\endcsname{0}%
+ \pgfutil@advancestringcounter\c@pgfpathfilled@nonemptysegments
+ \fi
+ \else
+ \expandafter\def\csname pgf@interset@path@empty@\c@pgfpathfilled@counter\endcsname{0}%
+ \pgfutil@advancestringcounter\c@pgfpathfilled@nonemptysegments
+ \fi
+ \else
+ \expandafter\def\csname pgf@interset@path@empty@\c@pgfpathfilled@counter\endcsname{0}%
+ \pgfutil@advancestringcounter\c@pgfpathfilled@nonemptysegments
+ \fi
+ %
+ \pgfutil@advancestringcounter\c@pgfpathfilled@counter
+ \repeatpgfmathloop
+ %
+ \ifnum\c@pgfpathfilled@nonemptysegments=0
+ \else
+ \pgfkeys{/pgf/fill between/result stream/begin=\c@pgfpathfilled@nonemptysegments}%
+ % Recombine the pairs of segments (a_i, b_i), i = 0,..., N-1 in a
+ % filled way:
+ \def\c@pgfpathfilled@counter{0}%
+ \pgfmathloop
+ \ifnum\c@pgfpathfilled@counter<\pgfpathfilled@a@segments\relax
+ \if0\csname pgf@interset@path@empty@\c@pgfpathfilled@counter\endcsname
+ \expandafter\let\expandafter\pgf@loc@path@a\csname pgf@intersect@path@split@a@\c@pgfpathfilled@counter\endcsname
+ \expandafter\let\expandafter\pgf@loc@path@b\csname pgf@intersect@path@split@b@\c@pgfpathfilled@counter\endcsname
+ %
+ \pgfpathfillbetween@compute{\pgf@loc@path@a}{\pgf@loc@path@b}%
+ % report to the result stream. It knows how to deal with it:
+ \pgfpathfillbetween@invoke{result stream/next ready}%
+ %
+ \fi
+ \pgfutil@advancestringcounter\c@pgfpathfilled@counter
+ \repeatpgfmathloop
+ \pgfpathfillbetween@invoke{result stream/end}%
+ \fi
+}
+
+\def\pgflibraryfillbetweenemptysegmenttolerance{1pt}
+
+\def\pgfpathfillbetween@compute@checkempty#1{%
+ \def\pgfretval{0}%
+ \pgf@compute@BB{#1}%
+ \advance\pgf@xb by-\pgf@xa
+ \advance\pgf@yb by-\pgf@ya
+ % if one of the dimensions is empty, the segment is empty:
+ \ifdim\pgf@xb<\pgflibraryfillbetweenemptysegmenttolerance\relax
+ \def\pgfretval{1}%
+ \fi
+ \ifdim\pgf@yb<\pgflibraryfillbetweenemptysegmenttolerance\relax
+ \def\pgfretval{1}%
+ \fi
+}
+
+\def\pgfpathfillbetween@compute#1#2{%
+%\message{Combination of ^^J \meaning#1\space and ^^J \meaning#2...^^J}%
+ %
+ \if1\pgfpathfillbetween@reverse@mode
+ % reverse=true
+ %
+ % Ok, then reverse one of the paths. We choose the second one as that is easier to debug.
+ % FIXME : might make sense to determine which one is shorter...
+ \pgf@reverse@path{#2}%
+ \let#2=\pgfretval
+ \fi
+ %
+ % FIXME: what should I do if I have closed paths!? What is the
+ % expected behavior!? I know that the combination of two closed
+ % paths should probably be used as is, perhaps with even-odd-rule.
+ % This here should do the job.
+ %
+ % NOTE: I believe the 'split' fails to work with closed paths.
+ \pgfpathfillbetween@contains@closepathtoken{#1}%
+ \let\b@pgfpathfillbetween@contains@close@a=\pgfretval
+ \pgfpathfillbetween@contains@closepathtoken{#2}%
+ \let\b@pgfpathfillbetween@contains@close@b=\pgfretval
+ %
+ \def\b@pgfpathfillbetween@contains@close{0}%
+ \if1\b@pgfpathfillbetween@contains@close@b
+ \def\b@pgfpathfillbetween@contains@close{1}%
+ \fi
+ \if1\b@pgfpathfillbetween@contains@close@a
+ \def\b@pgfpathfillbetween@contains@close{1}%
+ \fi
+ %
+ \if0\b@pgfpathfillbetween@contains@close@b
+ \expandafter\pgfpathfillbetween@replace@first@moveto#2\pgf@stop
+ \let#2=\pgfretval
+ \fi
+ %
+ \t@pgf@toka=\expandafter{#1}%
+ \t@pgf@tokb=\expandafter{#2}%
+ %
+ \if0\b@pgfpathfillbetween@contains@close
+ % we need to close the resulting combined path, otherwise decorations will look strange:
+ \expandafter\pgfpathfillbetween@get@first@coord#1\pgf@stop
+ \t@pgf@tokc=\expandafter{\expandafter\pgfsyssoftpath@closepathtoken\pgfretval}%
+ \else
+ \t@pgf@tokc={}%
+ \fi
+ %
+ \edef\pgfretval{\the\t@pgf@toka\the\t@pgf@tokb\the\t@pgf@tokc}%
+ %
+%\message{^^J = \meaning\pgfretval^^J}%
+ % that's it.
+}
+
+% #1 a macro containing a softpath
+% OUTPUT:
+% \pgfretval = 1 if the path contains \pgfsyssoftpath@closepathtoken
+% and 0 otherwise.
+\def\pgfpathfillbetween@contains@closepathtoken#1{%
+ \expandafter\pgfutil@in@\expandafter\pgfsyssoftpath@closepathtoken\expandafter{#1}%
+ \ifpgfutil@in@
+ \def\pgfretval{1}%
+ \else
+ \def\pgfretval{0}%
+ \fi
+}
+
+\def\pgfpathfillbetween@get@first@coord#1#2#3#4\pgf@stop{%
+ \def\pgfretval{{#2}{#3}}%
+}%
+
+% assigns the bounding box of path #1 to
+% (pgf@xa , pgf@ya) = (minx,miny)
+% (pgf@xb , pgf@yb) = (maxx,maxy)
+\def\pgf@compute@BB#1{%
+ \begingroup
+ \dimendef\pgf@pathmaxx=0 %
+ \dimendef\pgf@pathminx=1 %
+ \dimendef\pgf@pathmaxy=2 %
+ \dimendef\pgf@pathminy=3 %
+ \pgf@pathmaxx=-16000pt\relax%
+ \pgf@pathminx=16000pt\relax%
+ \pgf@pathmaxy=-16000pt\relax%
+ \pgf@pathminy=16000pt\relax%
+ \let\pgf@protocolsizes=\pgf@compute@BB@protocol@sizes
+ \expandafter\pgfsetpath@loop#1\pgf@stop
+ \xdef\pgf@marshal{%
+ \pgf@xa=\the\pgf@pathminx\relax
+ \pgf@ya=\the\pgf@pathminy\relax
+ \pgf@xb=\the\pgf@pathmaxx\relax
+ \pgf@yb=\the\pgf@pathmaxy\relax
+ }%
+ \endgroup
+ \pgf@marshal
+}%
+\def\pgf@compute@BB@protocol@sizes#1#2{%
+ \ifdim#1<\pgf@pathminx\pgf@pathminx#1\fi%
+ \ifdim#1>\pgf@pathmaxx\pgf@pathmaxx#1\fi%
+ \ifdim#2<\pgf@pathminy\pgf@pathminy#2\fi%
+ \ifdim#2>\pgf@pathmaxy\pgf@pathmaxy#2\fi%
+}
+
+% A utility function like \pgfsetpath which calls \pgfsetpath *and* protocols
+% the size of each path segment (i.e. compute the bounding box).
+%
+% #1 a macro containing a softpath (i.e. something returned by
+% \pgfgetpath)
+%
+% SIDE--EFFECT: defines \pgfpointlastofsetpath to be the last point of path #1
+\def\pgfsetpathandBB#1{%
+ \let\pgfpointlastofsetpath=\pgfutil@empty
+ \expandafter\pgfsetpath@loop#1\pgf@stop
+ %
+ \pgfsetpath{#1}%
+}%
+
+% Like \pgfsetpathandBB, but this here *appends* to the existing
+% softpath.
+%
+% #1 a macro containing a softpath (i.e. something returned by
+% \pgfgetpath)
+% SIDE--EFFECT: defines \pgfpointlastofsetpath to be the last point of path #1
+\def\pgfaddpathandBB#1{%
+ \let\pgfpointlastofsetpath=\pgfutil@empty
+ \expandafter\pgfsetpath@loop#1\pgf@stop
+ \pgfaddpath#1%
+}
+
+% Like \pgfsetpath, but this here *appends* to the existing
+% softpath.
+%
+% #1 a macro containing a softpath (i.e. something returned by
+% \pgfgetpath)
+\def\pgfaddpath#1{%
+ % append to any previous path elements:
+ \pgfgetpath\pgf@temp
+ \t@pgf@tokc=\expandafter{\pgf@temp}%
+ \t@pgf@toka=\expandafter{#1}%
+ \edef\pgfretval{\the\t@pgf@tokc\the\t@pgf@toka}%
+ \pgfsetpath{\pgfretval}%
+}
+
+% Takes a softpath on input, replaces its first moveto by a lineto,
+% and returns it as softpath.
+% #1: a macro containing a softpath (i.e. the result of \pgfgetpath)
+%
+% On output, \pgfretval contains a modified path.
+\def\pgfpathreplacefirstmoveto#1{%
+ \ifx#1\pgfutil@empty
+ \let\pgfretval=#1%
+ \else
+ \expandafter\pgfpathfillbetween@replace@first@moveto#1\pgf@stop
+ \fi
+}
+
+% Defines \pgfretval to be '+' if the path's direction is "ascending"
+% and "-" otherwise.
+%
+% Here, "ascending" means that its first two coordinates have
+% ascending X coordinates. If the X coordinates are equal, the Y
+% coordinates are used instead.
+\def\pgfpathfillbetween@heuristics@get@direction#1#2#3{%
+ \pgfutil@ifnextchar\pgf@stop{%
+ % wow. it has just one path element... we can do nothing.
+ \def\pgfretval{+}%
+ \pgfutil@gobble
+ }{%
+ \pgfpathfillbetween@heuristics@get@direction@{#1}{#2}{#3}%
+ }%
+}%
+
+% example: \pgfsyssoftpath@movetotoken{#2}{#3}\pgfsyssoftpath@linetotoken{#5}{#6}#7\pgf@stop
+% example:
+% \pgfsyssoftpath@movetotoken{#2}{#3}
+% \pgfsyssoftpath@curvetosupportatoken{<x>}{<y>}
+% \pgfsyssoftpath@curvetosupportbtoken{<x>}{<y>}
+% \pgfsyssoftpath@curvetotoken{<x>}{<y>}\pgf@stop
+\def\pgfpathfillbetween@heuristics@get@direction@#1#2#3#4#5#6#7\pgf@stop{%
+ \def\pgf@temp{#4}%
+ \def\pgf@tempb{\pgfsyssoftpath@curvetosupportatoken}%
+ \ifx\pgf@temp\pgf@tempb
+ % Ah - a curveto! Use the end-point for the heuristics.
+ \pgfpathfillbetween@heuristics@get@direction@curveto #1{#2}{#3}#4{#5}{#6}#7\pgf@stop
+ \else
+ % Ok, assume it is line to (or its variants):
+ \pgfpathfillbetween@heuristics@get@direction@@{#2}{#3}{#5}{#6}%
+ \fi
+}%
+
+\def\pgfpathfillbetween@heuristics@get@direction@curveto#1#2#3\pgfsyssoftpath@curvetosupportatoken#4\pgfsyssoftpath@curvetotoken#5#6#7\pgf@stop{%
+ \pgfpathfillbetween@heuristics@get@direction@@{#2}{#3}{#5}{#6}%
+}%
+
+% #1: x1
+% #2: y1
+% #3: x2
+% #4: y2
+\def\pgfpathfillbetween@heuristics@get@direction@@#1#2#3#4{%
+ \edef\pgfretval{%
+ \ifdim #1<#3\space
+ +%
+ \else
+ \ifdim #1=#3\space
+ \ifdim #2<#4\space
+ +%
+ \else
+ -%
+ \fi
+ \else
+ -%
+ \fi
+ \fi
+ }%
+}
+
+% Accumulates the path's bounding box, the last moveto, and the last
+% coord.
+\def\pgfsetpath@loop#1{%
+ \ifx#1\pgf@stop%
+ \let\pgfsetpathBB@protocolsizesnext=\relax%
+ \else%
+ \ifx#1\pgfsyssoftpath@movetotoken%
+ \let\pgfsetpathBB@protocolsizesnext=\pgfsetpathBB@protocolsizestoken@moveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@linetotoken%
+ \let\pgfsetpathBB@protocolsizesnext=\pgfsetpathBB@protocolsizestoken@simple%
+ \else%
+ \ifx#1\pgfsyssoftpath@closepathtoken%
+ \let\pgfsetpathBB@protocolsizesnext=\pgfsetpathBB@protocolsizestoken@simple%
+ \else%
+ \ifx#1\pgfsyssoftpath@curvetosupportatoken%
+ \let\pgfsetpathBB@protocolsizesnext=\pgfsetpathBB@protocolsizestoken@curveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@rectcornertoken%
+ \let\pgfsetpathBB@protocolsizesnext=\pgfsetpathBB@protocolsizestoken@rect%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfsetpathBB@protocolsizesnext}
+
+\def\pgfsetpathBB@protocol@lastmoveto#1#2{%
+ \gdef\pgfsyssoftpath@lastmoveto{{#1}{#2}}%
+}
+
+\def\pgfsetpathBB@protocolsizestoken@moveto#1#2{%
+ % required for --cycle, among others:
+ \pgfsetpathBB@protocol@lastmoveto{#1}{#2}%
+ \pgfsetpathBB@protocolsizestoken@simple{#1}{#2}%
+}
+\def\pgfsetpathBB@protocolsizestoken@simple#1#2{%
+ \def\pgfpointlastofsetpath{\pgfqpoint{#1}{#2}}%
+ \pgf@protocolsizes{#1}{#2}%
+ \pgfsetpath@loop%
+}
+
+\def\pgfsetpathBB@protocolsizestoken@curveto#1#2\pgfsyssoftpath@curvetosupportbtoken#3#4\pgfsyssoftpath@curvetotoken#5#6{%
+ \def\pgfpointlastofsetpath{\pgfqpoint{#5}{#6}}%
+ \pgf@protocolsizes{#1}{#2}%
+ \pgf@protocolsizes{#3}{#4}%
+ \pgf@protocolsizes{#5}{#6}%
+ \pgfsetpath@loop
+}
+
+\def\pgfsetpathBB@protocolsizestoken@rect#1#2\pgfsyssoftpath@rectsizetoken#3#4{%
+ \pgf@protocolsizes{#1}{#2}%
+ \pgf@xa=#1\relax%
+ \advance\pgf@xa by#3\relax%
+ \pgf@ya=#2\relax%
+ \advance\pgf@ya by#4\relax%
+ \pgf@protocolsizes{\pgf@xa}{\pgf@ya}%
+ \pgfsetpath@loop
+}%
+
+% Defines \pgfretval to be the reversed path of #1.
+%
+% #1 is supposed to be a macro containing a path without rounding specials (i.e. a result
+% of \pgfprocessround)
+\def\pgfcomputereversepath#1{%
+ % unfortunately, this is already used by internal macros...
+ \pgf@reverse@path#1%
+}%
+\def\pgf@reverse@path#1{%
+ % ATTENTION: this here is a special implementation which
+ % operates directly on softpaths. It does not make use of \pgf@decorate@inputsegmentobjects@reverse (reverse path decoration)
+ % because (a) decorations require their own special format and (b)
+ % this implementation is faster (both with respect to runtime asymptotics and runtime constant).
+ \def\pgf@reverse@first@type{}%
+ \def\pgf@reverse@last@pt{}%
+ \def\b@pgf@reversepath@last@is@close{0}%
+ \pgfprependlistnewempty{pgfretval}%
+ \let\pgfreverse@iterate=\pgfreverse@checkfirst@then
+ \expandafter\pgf@reverse@loop#1\pgf@stop
+ %
+ \if 0\b@pgf@reversepath@last@is@close%
+ \expandafter\pgfreverse@prepend@last\expandafter{\pgf@reverse@first@type}{x}{x}%
+ \else
+ % as soon as a closepathtoken is encountered, the associated
+ % moveto is processed right away.
+ %
+ % FIXME : I doubt that the implementation works if more than
+ % one closepathtoken is in here ...
+ \fi
+ \pgfprependlistlet\pgfretval={pgfretval}%
+ %
+}%
+
+\def\pgf@reverse@loop#1{%
+ \ifx#1\pgf@stop%
+ \let\pgfreverse@next=\relax%
+ \else%
+ \def\b@pgf@reversepath@last@is@close{0}%
+ \ifx#1\pgfsyssoftpath@movetotoken%
+ \let\pgfreverse@next=\pgfreverse@token@moveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@linetotoken%
+ \let\pgfreverse@next=\pgfreverse@token@lineto%
+ \else%
+ \ifx#1\pgfsyssoftpath@closepathtoken%
+ \let\pgfreverse@next=\pgfreverse@token@close%
+ \else%
+ \ifx#1\pgfsyssoftpath@curvetosupportatoken%
+ \let\pgfreverse@next=\pgfreverse@token@curveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@rectcornertoken%
+ \let\pgfreverse@next=\pgfreverse@token@rect%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfreverse@next}
+
+\def\pgfreverse@checkfirst@then#1{%
+ \def\pgf@reverse@first@type{#1}%
+ \let\pgfreverse@iterate=\pgfutil@gobble
+}%
+
+\def\pgfreverse@prepend@last#1#2#3{%
+ \ifx\pgf@reverse@last@pt\pgfutil@empty
+ \else
+ \t@pgf@toka={#1}%
+ \t@pgf@tokb=\expandafter{\pgf@reverse@last@pt}%
+ \edef\pgf@marshal{\the\t@pgf@toka\the\t@pgf@tokb}%
+ \expandafter\pgfprependlistpushfront\pgf@marshal\to{pgfretval}%
+ \fi
+ \def\pgf@reverse@last@pt{{#2}{#3}}%
+}%
+
+\def\pgfreverse@token@moveto#1#2{%
+ \pgfreverse@iterate{\pgfsyssoftpath@movetotoken}%
+ \pgfreverse@prepend@last\pgfsyssoftpath@movetotoken{#1}{#2}%
+ \pgf@reverse@loop%
+}
+
+\def\pgfreverse@token@lineto#1#2{%
+ \pgfreverse@iterate{\pgfsyssoftpath@linetotoken}%
+ \pgfreverse@prepend@last\pgfsyssoftpath@linetotoken{#1}{#2}%
+ \pgf@reverse@loop
+}
+\def\pgfreverse@token@close#1#2{%
+ % close tokens are complicated: they always correspond to the most
+ % recent moveto token.
+ %
+ % First: remember that the last encountered token was 'close': if
+ % this is the lastmost token, we must not insert a final moveto.
+ \def\b@pgf@reversepath@last@is@close{1}%
+ %
+ % Second: *append*
+ % \pgfsyssoftpath@closepathtoken{<lastx>}{<lasty>}.
+ %
+ % Appending is unsupported by the prepend-list, so we have to
+ % terminate it, append, and reinitialize it with the result:
+ \pgfprependlistlet\pgfretval={pgfretval}%
+ \t@pgf@toka=\expandafter{\pgfretval}%
+ \t@pgf@tokb={\pgfsyssoftpath@closepathtoken}%
+ \t@pgf@tokc=\expandafter{\pgf@reverse@last@pt}%
+ \edef\pgf@marshal{\the\t@pgf@toka\the\t@pgf@tokb\the\t@pgf@tokc}%
+ %
+ % ... create a new list with the result:
+ \pgfprependlistnewempty{pgfretval}%
+ \expandafter\pgfprependlistpushfront\pgf@marshal\to{pgfretval}%
+ %
+ % and prepend a moveto.
+ \pgfreverse@prepend@last\pgfsyssoftpath@movetotoken{#1}{#2}%
+ %
+ \pgf@reverse@loop
+}
+
+\def\pgfreverse@token@curveto#1#2\pgfsyssoftpath@curvetosupportbtoken#3#4\pgfsyssoftpath@curvetotoken#5#6{%
+ \pgfreverse@iterate{\pgfsyssoftpath@curvetosupportatoken{#1}{#2}\pgfsyssoftpath@curvetosupportbtoken{#3}{#4}\pgfsyssoftpath@curvetotoken}%
+ \pgfreverse@prepend@last{\pgfsyssoftpath@curvetosupportatoken{#3}{#4}\pgfsyssoftpath@curvetosupportbtoken{#1}{#2}\pgfsyssoftpath@curvetotoken}{#5}{#6}%
+ \pgf@reverse@loop
+}
+
+\def\pgfreverse@token@rect#1#2\pgfsyssoftpath@rectsizetoken#3#4{%
+ % FIXME: UNTESTED
+ \pgf@xa=#1\relax%
+ \advance\pgf@xa by#3\relax%
+ \pgf@ya=#2\relax%
+ \advance\pgf@ya by#4\relax%
+ \edef\pgf@marshal{%
+ \noexpand\pgfsyssoftpath@movetotoken
+ {%
+ {#1}{#2}%
+ \noexpand\pgfsyssoftpath@linetotoken{\the\pgf@xa}{#2}%
+ \noexpand\pgfsyssoftpath@linetotoken{\the\pgf@xa}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@linetotoken{#1}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@closepathtoken{#1}{#2}%
+ }%
+ }%
+ \pgfreverse@iterate\pgfsyssoftpath@movetotoken
+ \edef\pgf@reverse@last@pt{{#1}{#2}}%
+ \expandafter\pgf@reverse@loop\pgf@marshal%
+}
+
+% ----------------------------------------
+% Given that some intersections have been computed already (and are in
+% the current scope), this command computes the intersection segments
+% for one of the input arguments.
+%
+% On output, both \pgfretval and \pgfintersectionsegments contain the number of computed segments. The
+% segments as such can be accessed via \pgfgetintersectionsegmentpath.
+%
+% #1 : should be '1' if the FIRST argument of
+% \pgfintersectionofpaths should be used and '2' the SECOND
+% argument of \pgfintersectionofpaths should be used on input.
+%
+% EXAMPLE:
+%
+% \def\inputValue{%
+% \pgfsyssoftpath@movetotoken {56.90549pt}{0.0pt}%
+% \pgfsyssoftpath@linetotoken {85.35823pt}{28.45274pt}%
+% \pgfsyssoftpath@linetotoken {113.81097pt}{0.0pt}%
+% \pgfsyssoftpath@linetotoken {142.26372pt}{28.45274pt}%
+% \pgfsyssoftpath@linetotoken {170.71646pt}{0.0pt}%
+% }
+%
+% \pgfpointintersectionsolution{1}%
+% \pgfplotsassertequalstok{\the\pgf@x, \the\pgf@y}{71.13918pt, 14.2278pt}{solution 1}
+% \pgfpointintersectionsolution{2}%
+% \pgfplotsassertequalstok{\the\pgf@x, \the\pgf@y}{99.59497pt, 14.2278pt}{solution 2}
+% \pgfpointintersectionsolution{3}%
+% \pgfplotsassertequalstok{\the\pgf@x, \the\pgf@y}{128.05057pt, 14.2278pt}{solution 3}
+% \pgfpointintersectionsolution{4}%
+% \pgfplotsassertequalstok{\the\pgf@x, \the\pgf@y}{156.50636pt, 14.2278pt}{solution 4}
+%
+%
+% \pgfcomputeintersectionsegments{1}%
+%
+% \message{OUTPUT: \meaning\pgfretval^^J}%
+% \expandafter\def\csname expected@a@0\endcsname{%
+% \pgfsyssoftpath@movetotoken {56.90549pt}{0.0pt}%
+% \pgfsyssoftpath@linetotoken{71.13918pt}{14.2278pt}%
+% }
+% \expandafter\def\csname expected@a@1\endcsname{%
+% \pgfsyssoftpath@movetotoken{71.13918pt}{14.2278pt}%
+% \pgfsyssoftpath@linetotoken {85.35823pt}{28.45274pt}%
+% \pgfsyssoftpath@linetotoken{99.59497pt}{14.2278pt}%
+% }
+% \expandafter\def\csname expected@a@2\endcsname{%
+% \pgfsyssoftpath@movetotoken{99.59497pt}{14.2278pt}%
+% \pgfsyssoftpath@linetotoken {113.81097pt}{0.0pt}%
+% \pgfsyssoftpath@linetotoken{128.05057pt}{14.2278pt}%
+% }
+% \expandafter\def\csname expected@a@3\endcsname{%
+% \pgfsyssoftpath@movetotoken{128.05057pt}{14.2278pt}%
+% \pgfsyssoftpath@linetotoken {142.26372pt}{28.45274pt}%
+% \pgfsyssoftpath@linetotoken{156.50636pt}{14.2278pt}%
+% }
+% \expandafter\def\csname expected@a@4\endcsname{%
+% \pgfsyssoftpath@movetotoken{156.50636pt}{14.2278pt}%
+% \pgfsyssoftpath@linetotoken {170.71646pt}{0.0pt}%
+% }
+% %
+\def\pgfcomputeintersectionsegments#1{%
+ \pgfcomputeintersectionsegments@set@src{#1}%
+ \ifnum\pgfintersectionsolutions=0 %
+ \pgfutil@namelet{pgf@intersect@path@split@\pgf@insert@intersections@src @0}{pgf@intersect@path@\pgf@insert@intersections@src}%
+ \def\pgfretval{0}%
+ \else
+ %
+ % This algorithm *relies* on an increasing sort order. Sort
+ % them:
+ \pgfintersectionsolutionsortbytime@@%
+ %
+ %
+ \pgfapplistnewempty{pgfretval@tmp}%
+ \def\pgf@insert@cursolution{1}%
+ \def\c@pgf@path@result{0}%
+ \let\c@pgf@path@segment=\c@pgf@countd
+ \let\c@pgf@path@segment@trg=\c@pgf@countc
+ \c@pgf@path@segment=0 %
+ \pgf@fillbetween@get@time@off{\pgf@insert@intersections@src}{\pgf@insert@cursolution}%
+ \c@pgf@path@segment@trg=\pgfretval\relax
+ %
+ \pgfutil@namelet{pgf@loc@TMPa}{pgf@intersect@path@\pgf@insert@intersections@src}%
+ \expandafter\pgf@insert@intersections@loop\pgf@loc@TMPa\pgf@stop
+ %
+ \pgfapplistlet\pgf@loc@TMPa={pgfretval@tmp}%
+ \expandafter\let\csname pgf@intersect@path@split@\pgf@insert@intersections@src @\c@pgf@path@result\endcsname=\pgf@loc@TMPa%
+ \pgfutil@advancestringcounter\c@pgf@path@result%
+ \let\pgfretval=\c@pgf@path@result%
+ \fi
+ \let\pgfintersectionsegments=\pgfretval
+}%
+
+% Defines \pgfretval to contain the desired path segment as softpath.
+%
+% @see \pgfsetpath
+% @see \pgfsetpathandBB
+% @see \pgfaddpathandBB
+%
+% #1: the value '1' if results for the FIRST argument of
+% \pgfintersectionofpaths are requested or '2' if results for the
+% SECOND path are requested (compare \pgfcomputeintersectionsegments).
+% #2: the segment index (a number 0<= #2 < numbersegments).
+% The number of segments is \pgfintersectionsegments
+\def\pgfgetintersectionsegmentpath#1#2{%
+ \pgfcomputeintersectionsegments@set@src{#1}%
+ \pgfmathparse{#2}%
+ \afterassignment\pgfcomputeintersectionsegments@set@src@gobble
+ \c@pgf@countc=\pgfmathresult\relax%
+ \ifnum\c@pgf@countc<0
+ \advance\c@pgf@countc by \pgfintersectionsegments\relax
+ \fi
+ \expandafter\let\expandafter\pgfretval\csname pgf@intersect@path@split@\pgf@insert@intersections@src @\the\c@pgf@countc\endcsname
+ \ifx\pgfretval\relax
+ \pgferror{There is no intersection segment '#2' in path '#1'}%
+ \fi
+}%
+\def\pgfcomputeintersectionsegments@set@src@gobble#1\relax{}
+
+\def\pgfcomputeintersectionsegments@set@src#1{%
+ \ifcase#1\relax
+ % 0
+ \pgferror{illegal argument supplied.}
+ \or
+ \def\pgf@insert@intersections@src{a}%
+ \or
+ \def\pgf@insert@intersections@src{b}%
+ \else
+ \pgferror{illegal argument supplied.}
+ \fi
+}%
+
+\def\pgfintersectionsolutionsortbytime@@{%
+ % this is an O(n^2) sort method. It might suffice provided that
+ % the number of intersections is small... and it is the same
+ % runtime as that of the intersection lib as such (which is, in
+ % fact, worse).
+ %
+ % Note that this bubble-sort-approach has the benefit that if the
+ % input sequence *is* actually sorted, that it will have no effect
+ % at all (linear time).
+ \pgf@intersect@solutions@sortfinishtrue%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter<\pgfintersectionsolutions\relax%
+ \pgfutil@tempcnta=\pgfmathcounter%
+ \advance\pgfutil@tempcnta by1\relax%
+ %
+ % acquire the sort keys...
+ \pgfintersectiongetsolutiontimes{\pgfmathcounter}{\pgf@loc@tmp@A@a}{\pgf@loc@tmp@A@b}%
+ \pgfintersectiongetsolutiontimes{\the\pgfutil@tempcnta}{\pgf@loc@tmp@B@a}{\pgf@loc@tmp@B@b}%
+ %
+ \ifdim\csname pgf@loc@tmp@A@\pgf@insert@intersections@src\endcsname pt>%
+ \csname pgf@loc@tmp@B@\pgf@insert@intersections@src\endcsname pt\relax%
+ \pgf@intersect@solutions@sortfinishfalse%
+ %
+ \pgfintersectionsolutionsortbytime@swap{pgfpoint@intersect@solution@\pgfmathcounter}%
+ {pgfpoint@intersect@solution@\the\pgfutil@tempcnta}%
+ %
+ \pgfintersectionsolutionsortbytime@swap{pgf@intersect@solution@props@\pgfmathcounter}%
+ {pgf@intersect@solution@props@\the\pgfutil@tempcnta}%
+ \fi%
+ \repeatpgfmathloop%
+ \ifpgf@intersect@solutions@sortfinish%
+ \else%
+ \expandafter\pgfintersectionsolutionsortbytime@@%
+ \fi%
+}
+
+
+% #1: either 'a' or 'b', depending on the required part
+% #2: the solution index (starting with 1)
+% Defines \pgfretval to contain the result.
+\def\pgf@fillbetween@get@time@off#1#2{%
+ \pgfintersectiongetsolutionsegmentindices{#2}{\pgf@temp@a}{\pgf@temp@b}%
+ \edef\pgfretval{\csname pgf@temp@#1\endcsname}%
+}%
+
+% ----------------------------------------------------------------------------------
+
+
+% Splits a Bezier curve at a designated time 't'
+% using decasteljau
+%--------------------------------------------------
+% Point lerp(float t, Point A, Point B) {
+% return A*(1-t) + B*t; // + and * overloaded for Points
+% }
+%
+% void split(t, Point P[4], Point L[4], Point R[4]) {
+% Point P01 = lerp(t, P[0], P[1]);
+% Point P12 = lerp(t, P[1], P[2]);
+% Point P23 = lerp(t, P[2], P[3]);
+% Point P012 = lerp(t, P01, P12);
+% Point P123 = lerp(t, P12, P13);
+% Point Q = lerp(t, P012, P123);
+% L[0] = P[0]; L[1] = P01; L[2] = P012; L[3] = Q;
+% R[0] = Q;
+% R[1] = P123; R[2] = P23; R[3] = P[3];
+% }
+%--------------------------------------------------
+% INPUT:
+% #1: a value in the range [0,1] which determines the split point
+% #2,#3,#4,#5: the points of the curve, each of the form {<x>}{<y>}
+%
+% OUTPUT:
+% \pgfretval@L{{<A>}{<B>}{<C>}{<D>}}
+% \pgfretval@R{{<A>}{<B>}{<C>}{<D>}}
+%
+% @see \pgf@split@curveto@softpaths
+\def\pgf@split@curveto#1#2#3#4#5{%
+ \begingroup
+ \pgf@xa=-#1pt %
+ \advance\pgf@xa by1pt %
+ \edef\pgf@split@one@m@t{\pgf@sys@tonumber\pgf@xa}%
+ %
+ \pgf@split@curveto@lerp{#1}{\pgf@split@one@m@t}{#2}{#3}%
+ \pgf@split@curveto@tomacro\pgf@split@curveto@p@AB
+ %
+ \pgf@split@curveto@lerp{#1}{\pgf@split@one@m@t}{#3}{#4}%
+ \pgf@split@curveto@tomacro\pgf@split@curveto@p@BC
+ %
+ \pgf@split@curveto@lerp{#1}{\pgf@split@one@m@t}{#4}{#5}%
+ \pgf@split@curveto@tomacro\pgf@split@curveto@p@CD
+ %
+ \pgf@split@curveto@lerp{#1}{\pgf@split@one@m@t}{\pgf@split@curveto@p@AB}{\pgf@split@curveto@p@BC}%
+ \pgf@split@curveto@tomacro\pgf@split@curveto@p@ABC
+ %
+ \pgf@split@curveto@lerp{#1}{\pgf@split@one@m@t}{\pgf@split@curveto@p@BC}{\pgf@split@curveto@p@CD}%
+ \pgf@split@curveto@tomacro\pgf@split@curveto@p@BCD
+ %
+ \pgf@split@curveto@lerp{#1}{\pgf@split@one@m@t}{\pgf@split@curveto@p@ABC}{\pgf@split@curveto@p@BCD}%
+ \pgf@split@curveto@tomacro\pgf@split@curveto@p@Q
+ %
+ \xdef\pgf@marshal{%
+ \edef\noexpand\pgfretval@L{{#2}{\pgf@split@curveto@p@AB}{\pgf@split@curveto@p@ABC}{\pgf@split@curveto@p@Q}}%
+ \edef\noexpand\pgfretval@R{{\pgf@split@curveto@p@Q}{\pgf@split@curveto@p@BCD}{\pgf@split@curveto@p@CD}{#5}}%
+ }%
+ \endgroup
+ \pgf@marshal
+}
+
+% Splits a Bezier curve at a designated time 't'
+%
+% This variants takes a part of a softpath as input:
+%
+% #1: a curveto- a macro containing a softpath of the form
+% <x><y>\pgfsyssoftpath@curvetosupportatoken<x><y>\pgfsyssoftpath@curvetosupportbtoken<x><y>\pgfsyssoftpath@curvetotoken<x><y>
+% #2: t in [0,1]
+%
+% OUTPUT: \pgfretval@L contains the LEFT segment (in the same softpath format) and \pgfretval@R contains the RIGHT segment (in the softpath format), \pgfretval contains the intersection point (i.e. the point evaluated at 't')
+\def\pgf@split@curveto@softpaths#1#2{%
+ \expandafter\pgf@split@curveto@softpaths@#1{#2}%
+}
+
+\def\pgf@split@curveto@softpaths@#1#2\pgfsyssoftpath@curvetosupportatoken#3#4\pgfsyssoftpath@curvetosupportbtoken#5#6\pgfsyssoftpath@curvetotoken#7#8#9{%
+ \pgf@split@curveto{#9}%
+ {{#1}{#2}}%
+ {{#3}{#4}}%
+ {{#5}{#6}}%
+ {{#7}{#8}}%
+ \expandafter\pgf@split@curveto@softpaths@@\pgfretval@L\pgfretval@L
+ \expandafter\pgf@split@curveto@softpaths@@\pgfretval@R\pgfretval@R
+}%
+
+\def\pgf@split@curveto@softpaths@@#1#2#3#4#5{%
+ % we can silently omit the moveto component.
+ \def#5{\pgfsyssoftpath@curvetosupportatoken#2\pgfsyssoftpath@curvetosupportbtoken#3\pgfsyssoftpath@curvetotoken#4}%
+ \def\pgfretval{#1}%
+}%
+
+% ----------------------------------------------------------------------------------
+
+% defines \pgf@x, \pgf@y to be A*(1-t) + B*t
+% #1: the scalar value 't' in [0,1]
+% #2: the scalar value '1-t' in [0,1]
+% #3: a 2d point 'A' of the form {<x>}{<y>}
+% #4: a 2d point 'B' of the form {<x>}{<y>}
+\def\pgf@split@curveto@lerp#1#2#3#4{%
+ \pgfpointadd
+ {\pgfqpointscale{#2}{\expandafter\pgfqpoint#3}}%
+ {\pgfqpointscale{#1}{\expandafter\pgfqpoint#4}}%
+}%
+
+\def\pgf@split@curveto@tomacro#1{%
+ \edef#1{{\the\pgf@x}{\the\pgf@y}}%
+}
+
+
+\def\pgfcomputeintersectionsegments@@{%
+%\message{processing segment \the\c@pgf@path@segment\space (current solution \pgf@insert@cursolution/\pgfintersectionsolutions; target segment \the\c@pgf@path@segment@trg, currentxy \pgfinsert@intersect@tok@currentxy, lastxy \pgfinsert@intersect@tok@lastxy)^^J}%
+ \pgfmathloop
+ % we need to loop: it is fully acceptable if more than one
+ % solution is on the same segment.
+ \ifnum\c@pgf@path@segment=\c@pgf@path@segment@trg
+ %
+ \pgf@insert@intersections@split@segment
+ \expandafter\pgfapplistpushback\pgfretval\to{pgfretval@tmp}%
+ %
+ %
+ % report the current result segment!
+ \pgfapplistlet\pgf@loc@TMPa={pgfretval@tmp}%
+ \expandafter\let\csname pgf@intersect@path@split@\pgf@insert@intersections@src @\c@pgf@path@result\endcsname=\pgf@loc@TMPa%
+ \pgfutil@advancestringcounter\c@pgf@path@result%
+ % ... and start a new result segment. Keep in mind that it
+ % should start with a moveto:
+ \pgfapplistnewempty{pgfretval@tmp}%
+ \csname pgfpoint@intersect@solution@\pgf@insert@cursolution\endcsname%
+ \edef\pgf@loc@TMPa{\noexpand\pgfsyssoftpath@movetotoken{\the\pgf@x}{\the\pgf@y}}%
+ \expandafter\pgfapplistpushback\pgf@loc@TMPa\to{pgfretval@tmp}%
+ %
+ %
+ % OK, iterate:
+ \ifnum\pgf@insert@cursolution=\pgfintersectionsolutions\relax
+ % collect all remaining ones:
+ \c@pgf@path@segment@trg=10000000 %
+ \else
+ \pgfutil@advancestringcounter\pgf@insert@cursolution
+ \pgf@fillbetween@get@time@off{\pgf@insert@intersections@src}{\pgf@insert@cursolution}%
+ \c@pgf@path@segment@trg=\pgfretval\relax
+ \fi
+ \repeatpgfmathloop
+ \expandafter\pgfapplistpushback\pgfinsert@intersect@tok\to{pgfretval@tmp}%
+ \let\pgfinsert@intersect@tok@lastxy=\pgfinsert@intersect@tok@currentxy
+ \advance\c@pgf@path@segment by1 %
+}%
+
+% INPUT:
+% - \pgfinsert@intersect@tok@type is the current type (one of \pgfsyssoftpath@linetotoken or \pgfsyssoftpath@curvetotoken)
+% - \pgf@insert@cursolution is the current intersection index
+% - \pgfinsert@intersect@tok is the current path segment. On output, it is the *remaining* path segment.
+% - \pgfinsert@intersect@tok@lastxy the (x,y) coordinates of the last seen coordinate.
+%
+% OUTPUT:
+% - \pgfretval the segment which has been splitted off. It will be appended to the result.
+% - \pgfinsert@intersect@tok the remaining path segment which is to be processed
+% - \pgfinsert@intersect@tok@lastxy the (x,y) coordinates of the last seen coordinate which is to be processed.
+\def\pgf@insert@intersections@split@segment{%
+ \ifx\pgfinsert@intersect@tok@type\pgfsyssoftpath@linetotoken
+ \csname pgfpoint@intersect@solution@\pgf@insert@cursolution\endcsname%
+ \edef\pgfretval{\noexpand\pgfsyssoftpath@linetotoken{\the\pgf@x}{\the\pgf@y}}%
+ % ... and keep \pgfinsert@intersect@tok at its current value (it is \pgfsyssoftpath@linetotoken{<next x>}{<next y>})
+ \else
+ \ifx\pgfinsert@intersect@tok@type\pgfsyssoftpath@curvetotoken
+ % Ah; a curveto. That's more involved!
+ % First, get the time offset of the current intersection:
+ %
+ % Get the global time:
+ \pgfintersectiongetsolutiontimes{\pgf@insert@cursolution}{\pgf@split@it@time@a}{\pgf@split@it@time@b}%
+ % Get time at the beginning of the current solution segment:
+ \pgfintersectiongetsolutionsegmentindices{\pgf@insert@cursolution}{\pgf@split@it@timeoff@a}{\pgf@split@it@timeoff@b}%
+ % compute local time within the current solution segment:
+ \pgf@xa=\csname pgf@split@it@time@\pgf@insert@intersections@src\endcsname pt %
+ \advance\pgf@xa by-\csname pgf@split@it@timeoff@\pgf@insert@intersections@src\endcsname pt %
+ \edef\pgf@split@it@time{\pgf@sys@tonumber\pgf@xa}%
+ %
+ \let\pgf@split@it@start=\pgfinsert@intersect@tok@lastxy
+ % we have to insert the last XY coordinates:
+ \t@pgf@toka=\expandafter{\pgf@split@it@start}%
+ \t@pgf@tokb=\expandafter{\pgfinsert@intersect@tok}%
+ \edef\pgf@temp{\the\t@pgf@toka\the\t@pgf@tokb}%
+ % Split into TWO curveto operations!
+ \pgf@split@curveto@softpaths{\pgf@temp}{\pgf@split@it@time}%
+ % ok, the first returned sub-curveto is the result of this method...
+ \let\pgfretval=\pgfretval@L
+ % ... and the second is the "remainder" which is still to be processed.
+ \let\pgfinsert@intersect@tok=\pgfretval@R
+ \else
+ \pgferror{Unsupported path type \meaning\pgfinsert@intersect@tok@type. Cannot process these paths.}%
+ \fi
+ \fi
+ %
+ \csname pgfpoint@intersect@solution@\pgf@insert@cursolution\endcsname%
+ \edef\pgfinsert@intersect@tok@lastxy{{\the\pgf@x}{\the\pgf@y}}%
+}%
+
+\def\pgf@insert@intersections@loop#1{%
+ \ifx#1\pgf@stop%
+ \let\pgfinsert@intersect@tok\pgfutil@empty%
+ \let\pgfinsert@intersect@tok@type\pgfutil@empty
+ \pgfcomputeintersectionsegments@@%
+ \let\pgfinsert@intersect@next=\relax%
+ \else%
+ \ifx#1\pgfsyssoftpath@movetotoken%
+ \let\pgfinsert@intersect@next=\pgfinsert@intersect@token@moveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@linetotoken%
+ \let\pgfinsert@intersect@next=\pgfinsert@intersect@token@lineto%
+ \else%
+ \ifx#1\pgfsyssoftpath@closepathtoken%
+ \let\pgfinsert@intersect@next=\pgfinsert@intersect@token@close%
+ \else%
+ \ifx#1\pgfsyssoftpath@curvetosupportatoken%
+ \let\pgfinsert@intersect@next=\pgfinsert@intersect@token@curveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@rectcornertoken%
+ \let\pgfinsert@intersect@next=\pgfinsert@intersect@token@rect%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfinsert@intersect@next}
+
+\def\pgfinsert@intersect@token@moveto#1#2{%
+ \def\pgfinsert@intersect@tok{\pgfsyssoftpath@movetotoken{#1}{#2}}%
+ \let\pgfinsert@intersect@tok@type\pgfsyssoftpath@movetotoken
+ \def\pgfinsert@intersect@tok@lastxy{{#1}{#2}}%
+ \expandafter\pgfapplistpushback\pgfinsert@intersect@tok\to{pgfretval@tmp}%
+ \pgf@insert@intersections@loop%
+}
+
+\def\pgfinsert@intersect@token@lineto#1#2{%
+ \def\pgfinsert@intersect@tok{\pgfsyssoftpath@linetotoken{#1}{#2}}%
+ \let\pgfinsert@intersect@tok@type\pgfsyssoftpath@linetotoken
+ \def\pgfinsert@intersect@tok@currentxy{{#1}{#2}}%
+ \pgfcomputeintersectionsegments@@%
+ \pgf@insert@intersections@loop
+}
+\def\pgfinsert@intersect@token@close#1#2{%
+ \def\pgfinsert@intersect@tok{\pgfsyssoftpath@closepathtoken{#1}{#2}}%
+ \let\pgfinsert@intersect@tok@type\pgfsyssoftpath@linetotoken
+ \def\pgfinsert@intersect@tok@currentxy{{#1}{#2}}%
+ \pgfcomputeintersectionsegments@@%
+ \pgf@insert@intersections@loop
+}
+
+\def\pgfinsert@intersect@token@curveto#1#2\pgfsyssoftpath@curvetosupportbtoken#3#4\pgfsyssoftpath@curvetotoken#5#6{%
+ \def\pgfinsert@intersect@tok{\pgfsyssoftpath@curvetosupportatoken{#1}{#2}\pgfsyssoftpath@curvetosupportbtoken{#3}{#4}\pgfsyssoftpath@curvetotoken{#5}{#6}}%
+ \let\pgfinsert@intersect@tok@type\pgfsyssoftpath@curvetotoken
+ \def\pgfinsert@intersect@tok@currentxy{{#5}{#6}}%
+ \pgfcomputeintersectionsegments@@%
+ \pgf@insert@intersections@loop
+}
+
+\def\pgfinsert@intersect@token@rect#1#2\pgfsyssoftpath@rectsizetoken#3#4{%
+ \pgf@xa=#1\relax%
+ \advance\pgf@xa by#3\relax%
+ \pgf@ya=#2\relax%
+ \advance\pgf@ya by#4\relax%
+ \edef\pgf@marshal{%
+ \noexpand\pgfsyssoftpath@movetotoken{#1}{#2}%
+ \noexpand\pgfsyssoftpath@linetotoken{#1}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@linetotoken{\the\pgf@xa}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@linetotoken{\the\pgf@xa}{#2}%
+ \noexpand\pgfsyssoftpath@closepathtoken{#1}{#2}%
+ }%
+ \expandafter\pgf@insert@intersections@loop\pgf@marshal%
+}
+
+
+% #1: a macro containing the clip path. More precisely, it is supposed to be a return value of \pgfgetpath.
+\def\pgffillbetweensetsoftclippathfirst#1{%
+ \let\pgfpathfillbetween@softclip@A=#1%
+}%
+
+% #1: a macro containing the clip path. More precisely, it is supposed to be a return value of \pgfgetpath.
+\def\pgffillbetweensetsoftclippathsecond#1{%
+ \let\pgfpathfillbetween@softclip@B=#1%
+}%
+
+% #1: a macro containing the clip path. More precisely, it is supposed to be a return value of \pgfgetpath.
+\def\pgffillbetweensetsoftclippath#1{%
+ \pgffillbetweensetsoftclippathfirst{#1}%
+ \pgffillbetweensetsoftclippathsecond{#1}%
+}
+
+% Default: no clip paths
+\pgffillbetweensetsoftclippathfirst{\pgfutil@empty}
+\pgffillbetweensetsoftclippathsecond{\pgfutil@empty}
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colorbrewer.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colorbrewer.code.tex
new file mode 100644
index 0000000000..11a3547c04
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colorbrewer.code.tex
@@ -0,0 +1,4149 @@
+
+% load all colors for the `colormap's and `cycle list's
+\usetikzlibrary{colorbrewer}
+
+% define `colormap's and `cycle list's
+\pgfplotsset{
+ /pgfplots/@@brewer set cycle list/.code={%
+ \pgfkeysalso{/pgfplots/ensure colormap={/pgfplots/colormap/#1},/pgfplots/cycle list name=#1}%
+ },
+ /pgfplots/colormap/YlGn-3/.style={
+ colormap={YlGn-3}{
+ color=(YlGn-C);
+ color=(YlGn-F);
+ color=(YlGn-I);
+ },
+ cycle list/.define={YlGn-3}{[of colormap=YlGn-3]},
+ },
+ /pgfplots/cycle list/YlGn-3/.style={/pgfplots/@@brewer set cycle list={YlGn-3}},
+ %
+ /pgfplots/colormap/YlGn-4/.style={
+ colormap={YlGn-4}{
+ color=(YlGn-B);
+ color=(YlGn-E);
+ color=(YlGn-G);
+ color=(YlGn-J);
+ },
+ cycle list/.define={YlGn-4}{[of colormap=YlGn-4]},
+ },
+ /pgfplots/cycle list/YlGn-4/.style={/pgfplots/@@brewer set cycle list={YlGn-4}},
+ %
+ /pgfplots/colormap/YlGn-5/.style={
+ colormap={YlGn-5}{
+ color=(YlGn-B);
+ color=(YlGn-E);
+ color=(YlGn-G);
+ color=(YlGn-I);
+ color=(YlGn-K);
+ },
+ cycle list/.define={YlGn-5}{[of colormap=YlGn-5]},
+ },
+ /pgfplots/cycle list/YlGn-5/.style={/pgfplots/@@brewer set cycle list={YlGn-5}},
+ %
+ /pgfplots/colormap/YlGn-6/.style={
+ colormap={YlGn-6}{
+ color=(YlGn-B);
+ color=(YlGn-D);
+ color=(YlGn-F);
+ color=(YlGn-G);
+ color=(YlGn-I);
+ color=(YlGn-K);
+ },
+ cycle list/.define={YlGn-6}{[of colormap=YlGn-6]},
+ },
+ /pgfplots/cycle list/YlGn-6/.style={/pgfplots/@@brewer set cycle list={YlGn-6}},
+ %
+ /pgfplots/colormap/YlGn-7/.style={
+ colormap={YlGn-7}{
+ color=(YlGn-B);
+ color=(YlGn-D);
+ color=(YlGn-F);
+ color=(YlGn-G);
+ color=(YlGn-H);
+ color=(YlGn-J);
+ color=(YlGn-L);
+ },
+ cycle list/.define={YlGn-7}{[of colormap=YlGn-7]},
+ },
+ /pgfplots/cycle list/YlGn-7/.style={/pgfplots/@@brewer set cycle list={YlGn-7}},
+ %
+ /pgfplots/colormap/YlGn-8/.style={
+ colormap={YlGn-8}{
+ color=(YlGn-A);
+ color=(YlGn-C);
+ color=(YlGn-D);
+ color=(YlGn-F);
+ color=(YlGn-G);
+ color=(YlGn-H);
+ color=(YlGn-J);
+ color=(YlGn-L);
+ },
+ cycle list/.define={YlGn-8}{[of colormap=YlGn-8]},
+ },
+ /pgfplots/cycle list/YlGn-8/.style={/pgfplots/@@brewer set cycle list={YlGn-8}},
+ %
+ /pgfplots/colormap/YlGn-9/.style={
+ colormap={YlGn-9}{
+ color=(YlGn-A);
+ color=(YlGn-C);
+ color=(YlGn-D);
+ color=(YlGn-F);
+ color=(YlGn-G);
+ color=(YlGn-H);
+ color=(YlGn-J);
+ color=(YlGn-K);
+ color=(YlGn-M);
+ },
+ cycle list/.define={YlGn-9}{[of colormap=YlGn-9]},
+ },
+ /pgfplots/cycle list/YlGn-9/.style={/pgfplots/@@brewer set cycle list={YlGn-9}},
+ %
+ /pgfplots/colormap/YlGnBu-3/.style={
+ colormap={YlGnBu-3}{
+ color=(YlGnBu-C);
+ color=(YlGnBu-F);
+ color=(YlGnBu-I);
+ },
+ cycle list/.define={YlGnBu-3}{[of colormap=YlGnBu-3]},
+ },
+ /pgfplots/cycle list/YlGnBu-3/.style={/pgfplots/@@brewer set cycle list={YlGnBu-3}},
+ %
+ /pgfplots/colormap/YlGnBu-4/.style={
+ colormap={YlGnBu-4}{
+ color=(YlGnBu-B);
+ color=(YlGnBu-E);
+ color=(YlGnBu-G);
+ color=(YlGnBu-J);
+ },
+ cycle list/.define={YlGnBu-4}{[of colormap=YlGnBu-4]},
+ },
+ /pgfplots/cycle list/YlGnBu-4/.style={/pgfplots/@@brewer set cycle list={YlGnBu-4}},
+ %
+ /pgfplots/colormap/YlGnBu-5/.style={
+ colormap={YlGnBu-5}{
+ color=(YlGnBu-B);
+ color=(YlGnBu-E);
+ color=(YlGnBu-G);
+ color=(YlGnBu-I);
+ color=(YlGnBu-K);
+ },
+ cycle list/.define={YlGnBu-5}{[of colormap=YlGnBu-5]},
+ },
+ /pgfplots/cycle list/YlGnBu-5/.style={/pgfplots/@@brewer set cycle list={YlGnBu-5}},
+ %
+ /pgfplots/colormap/YlGnBu-6/.style={
+ colormap={YlGnBu-6}{
+ color=(YlGnBu-B);
+ color=(YlGnBu-D);
+ color=(YlGnBu-F);
+ color=(YlGnBu-G);
+ color=(YlGnBu-I);
+ color=(YlGnBu-K);
+ },
+ cycle list/.define={YlGnBu-6}{[of colormap=YlGnBu-6]},
+ },
+ /pgfplots/cycle list/YlGnBu-6/.style={/pgfplots/@@brewer set cycle list={YlGnBu-6}},
+ %
+ /pgfplots/colormap/YlGnBu-7/.style={
+ colormap={YlGnBu-7}{
+ color=(YlGnBu-B);
+ color=(YlGnBu-D);
+ color=(YlGnBu-F);
+ color=(YlGnBu-G);
+ color=(YlGnBu-H);
+ color=(YlGnBu-J);
+ color=(YlGnBu-L);
+ },
+ cycle list/.define={YlGnBu-7}{[of colormap=YlGnBu-7]},
+ },
+ /pgfplots/cycle list/YlGnBu-7/.style={/pgfplots/@@brewer set cycle list={YlGnBu-7}},
+ %
+ /pgfplots/colormap/YlGnBu-8/.style={
+ colormap={YlGnBu-8}{
+ color=(YlGnBu-A);
+ color=(YlGnBu-C);
+ color=(YlGnBu-D);
+ color=(YlGnBu-F);
+ color=(YlGnBu-G);
+ color=(YlGnBu-H);
+ color=(YlGnBu-J);
+ color=(YlGnBu-L);
+ },
+ cycle list/.define={YlGnBu-8}{[of colormap=YlGnBu-8]},
+ },
+ /pgfplots/cycle list/YlGnBu-8/.style={/pgfplots/@@brewer set cycle list={YlGnBu-8}},
+ %
+ /pgfplots/colormap/YlGnBu-9/.style={
+ colormap={YlGnBu-9}{
+ color=(YlGnBu-A);
+ color=(YlGnBu-C);
+ color=(YlGnBu-D);
+ color=(YlGnBu-F);
+ color=(YlGnBu-G);
+ color=(YlGnBu-H);
+ color=(YlGnBu-J);
+ color=(YlGnBu-K);
+ color=(YlGnBu-M);
+ },
+ cycle list/.define={YlGnBu-9}{[of colormap=YlGnBu-9]},
+ },
+ /pgfplots/cycle list/YlGnBu-9/.style={/pgfplots/@@brewer set cycle list={YlGnBu-9}},
+ %
+ /pgfplots/colormap/GnBu-3/.style={
+ colormap={GnBu-3}{
+ color=(GnBu-C);
+ color=(GnBu-F);
+ color=(GnBu-I);
+ },
+ cycle list/.define={GnBu-3}{[of colormap=GnBu-3]},
+ },
+ /pgfplots/cycle list/GnBu-3/.style={/pgfplots/@@brewer set cycle list={GnBu-3}},
+ %
+ /pgfplots/colormap/GnBu-4/.style={
+ colormap={GnBu-4}{
+ color=(GnBu-B);
+ color=(GnBu-E);
+ color=(GnBu-G);
+ color=(GnBu-J);
+ },
+ cycle list/.define={GnBu-4}{[of colormap=GnBu-4]},
+ },
+ /pgfplots/cycle list/GnBu-4/.style={/pgfplots/@@brewer set cycle list={GnBu-4}},
+ %
+ /pgfplots/colormap/GnBu-5/.style={
+ colormap={GnBu-5}{
+ color=(GnBu-B);
+ color=(GnBu-E);
+ color=(GnBu-G);
+ color=(GnBu-I);
+ color=(GnBu-K);
+ },
+ cycle list/.define={GnBu-5}{[of colormap=GnBu-5]},
+ },
+ /pgfplots/cycle list/GnBu-5/.style={/pgfplots/@@brewer set cycle list={GnBu-5}},
+ %
+ /pgfplots/colormap/GnBu-6/.style={
+ colormap={GnBu-6}{
+ color=(GnBu-B);
+ color=(GnBu-D);
+ color=(GnBu-F);
+ color=(GnBu-G);
+ color=(GnBu-I);
+ color=(GnBu-K);
+ },
+ cycle list/.define={GnBu-6}{[of colormap=GnBu-6]},
+ },
+ /pgfplots/cycle list/GnBu-6/.style={/pgfplots/@@brewer set cycle list={GnBu-6}},
+ %
+ /pgfplots/colormap/GnBu-7/.style={
+ colormap={GnBu-7}{
+ color=(GnBu-B);
+ color=(GnBu-D);
+ color=(GnBu-F);
+ color=(GnBu-G);
+ color=(GnBu-H);
+ color=(GnBu-J);
+ color=(GnBu-L);
+ },
+ cycle list/.define={GnBu-7}{[of colormap=GnBu-7]},
+ },
+ /pgfplots/cycle list/GnBu-7/.style={/pgfplots/@@brewer set cycle list={GnBu-7}},
+ %
+ /pgfplots/colormap/GnBu-8/.style={
+ colormap={GnBu-8}{
+ color=(GnBu-A);
+ color=(GnBu-C);
+ color=(GnBu-D);
+ color=(GnBu-F);
+ color=(GnBu-G);
+ color=(GnBu-H);
+ color=(GnBu-J);
+ color=(GnBu-L);
+ },
+ cycle list/.define={GnBu-8}{[of colormap=GnBu-8]},
+ },
+ /pgfplots/cycle list/GnBu-8/.style={/pgfplots/@@brewer set cycle list={GnBu-8}},
+ %
+ /pgfplots/colormap/GnBu-9/.style={
+ colormap={GnBu-9}{
+ color=(GnBu-A);
+ color=(GnBu-C);
+ color=(GnBu-D);
+ color=(GnBu-F);
+ color=(GnBu-G);
+ color=(GnBu-H);
+ color=(GnBu-J);
+ color=(GnBu-K);
+ color=(GnBu-M);
+ },
+ cycle list/.define={GnBu-9}{[of colormap=GnBu-9]},
+ },
+ /pgfplots/cycle list/GnBu-9/.style={/pgfplots/@@brewer set cycle list={GnBu-9}},
+ %
+ /pgfplots/colormap/BuGn-3/.style={
+ colormap={BuGn-3}{
+ color=(BuGn-C);
+ color=(BuGn-F);
+ color=(BuGn-I);
+ },
+ cycle list/.define={BuGn-3}{[of colormap=BuGn-3]},
+ },
+ /pgfplots/cycle list/BuGn-3/.style={/pgfplots/@@brewer set cycle list={BuGn-3}},
+ %
+ /pgfplots/colormap/BuGn-4/.style={
+ colormap={BuGn-4}{
+ color=(BuGn-B);
+ color=(BuGn-E);
+ color=(BuGn-G);
+ color=(BuGn-J);
+ },
+ cycle list/.define={BuGn-4}{[of colormap=BuGn-4]},
+ },
+ /pgfplots/cycle list/BuGn-4/.style={/pgfplots/@@brewer set cycle list={BuGn-4}},
+ %
+ /pgfplots/colormap/BuGn-5/.style={
+ colormap={BuGn-5}{
+ color=(BuGn-B);
+ color=(BuGn-E);
+ color=(BuGn-G);
+ color=(BuGn-I);
+ color=(BuGn-K);
+ },
+ cycle list/.define={BuGn-5}{[of colormap=BuGn-5]},
+ },
+ /pgfplots/cycle list/BuGn-5/.style={/pgfplots/@@brewer set cycle list={BuGn-5}},
+ %
+ /pgfplots/colormap/BuGn-6/.style={
+ colormap={BuGn-6}{
+ color=(BuGn-B);
+ color=(BuGn-D);
+ color=(BuGn-F);
+ color=(BuGn-G);
+ color=(BuGn-I);
+ color=(BuGn-K);
+ },
+ cycle list/.define={BuGn-6}{[of colormap=BuGn-6]},
+ },
+ /pgfplots/cycle list/BuGn-6/.style={/pgfplots/@@brewer set cycle list={BuGn-6}},
+ %
+ /pgfplots/colormap/BuGn-7/.style={
+ colormap={BuGn-7}{
+ color=(BuGn-B);
+ color=(BuGn-D);
+ color=(BuGn-F);
+ color=(BuGn-G);
+ color=(BuGn-H);
+ color=(BuGn-J);
+ color=(BuGn-L);
+ },
+ cycle list/.define={BuGn-7}{[of colormap=BuGn-7]},
+ },
+ /pgfplots/cycle list/BuGn-7/.style={/pgfplots/@@brewer set cycle list={BuGn-7}},
+ %
+ /pgfplots/colormap/BuGn-8/.style={
+ colormap={BuGn-8}{
+ color=(BuGn-A);
+ color=(BuGn-C);
+ color=(BuGn-D);
+ color=(BuGn-F);
+ color=(BuGn-G);
+ color=(BuGn-H);
+ color=(BuGn-J);
+ color=(BuGn-L);
+ },
+ cycle list/.define={BuGn-8}{[of colormap=BuGn-8]},
+ },
+ /pgfplots/cycle list/BuGn-8/.style={/pgfplots/@@brewer set cycle list={BuGn-8}},
+ %
+ /pgfplots/colormap/BuGn-9/.style={
+ colormap={BuGn-9}{
+ color=(BuGn-A);
+ color=(BuGn-C);
+ color=(BuGn-D);
+ color=(BuGn-F);
+ color=(BuGn-G);
+ color=(BuGn-H);
+ color=(BuGn-J);
+ color=(BuGn-K);
+ color=(BuGn-M);
+ },
+ cycle list/.define={BuGn-9}{[of colormap=BuGn-9]},
+ },
+ /pgfplots/cycle list/BuGn-9/.style={/pgfplots/@@brewer set cycle list={BuGn-9}},
+ %
+ /pgfplots/colormap/PuBuGn-3/.style={
+ colormap={PuBuGn-3}{
+ color=(PuBuGn-C);
+ color=(PuBuGn-F);
+ color=(PuBuGn-I);
+ },
+ cycle list/.define={PuBuGn-3}{[of colormap=PuBuGn-3]},
+ },
+ /pgfplots/cycle list/PuBuGn-3/.style={/pgfplots/@@brewer set cycle list={PuBuGn-3}},
+ %
+ /pgfplots/colormap/PuBuGn-4/.style={
+ colormap={PuBuGn-4}{
+ color=(PuBuGn-B);
+ color=(PuBuGn-E);
+ color=(PuBuGn-G);
+ color=(PuBuGn-J);
+ },
+ cycle list/.define={PuBuGn-4}{[of colormap=PuBuGn-4]},
+ },
+ /pgfplots/cycle list/PuBuGn-4/.style={/pgfplots/@@brewer set cycle list={PuBuGn-4}},
+ %
+ /pgfplots/colormap/PuBuGn-5/.style={
+ colormap={PuBuGn-5}{
+ color=(PuBuGn-B);
+ color=(PuBuGn-E);
+ color=(PuBuGn-G);
+ color=(PuBuGn-I);
+ color=(PuBuGn-K);
+ },
+ cycle list/.define={PuBuGn-5}{[of colormap=PuBuGn-5]},
+ },
+ /pgfplots/cycle list/PuBuGn-5/.style={/pgfplots/@@brewer set cycle list={PuBuGn-5}},
+ %
+ /pgfplots/colormap/PuBuGn-6/.style={
+ colormap={PuBuGn-6}{
+ color=(PuBuGn-B);
+ color=(PuBuGn-D);
+ color=(PuBuGn-F);
+ color=(PuBuGn-G);
+ color=(PuBuGn-I);
+ color=(PuBuGn-K);
+ },
+ cycle list/.define={PuBuGn-6}{[of colormap=PuBuGn-6]},
+ },
+ /pgfplots/cycle list/PuBuGn-6/.style={/pgfplots/@@brewer set cycle list={PuBuGn-6}},
+ %
+ /pgfplots/colormap/PuBuGn-7/.style={
+ colormap={PuBuGn-7}{
+ color=(PuBuGn-B);
+ color=(PuBuGn-D);
+ color=(PuBuGn-F);
+ color=(PuBuGn-G);
+ color=(PuBuGn-H);
+ color=(PuBuGn-J);
+ color=(PuBuGn-L);
+ },
+ cycle list/.define={PuBuGn-7}{[of colormap=PuBuGn-7]},
+ },
+ /pgfplots/cycle list/PuBuGn-7/.style={/pgfplots/@@brewer set cycle list={PuBuGn-7}},
+ %
+ /pgfplots/colormap/PuBuGn-8/.style={
+ colormap={PuBuGn-8}{
+ color=(PuBuGn-A);
+ color=(PuBuGn-C);
+ color=(PuBuGn-D);
+ color=(PuBuGn-F);
+ color=(PuBuGn-G);
+ color=(PuBuGn-H);
+ color=(PuBuGn-J);
+ color=(PuBuGn-L);
+ },
+ cycle list/.define={PuBuGn-8}{[of colormap=PuBuGn-8]},
+ },
+ /pgfplots/cycle list/PuBuGn-8/.style={/pgfplots/@@brewer set cycle list={PuBuGn-8}},
+ %
+ /pgfplots/colormap/PuBuGn-9/.style={
+ colormap={PuBuGn-9}{
+ color=(PuBuGn-A);
+ color=(PuBuGn-C);
+ color=(PuBuGn-D);
+ color=(PuBuGn-F);
+ color=(PuBuGn-G);
+ color=(PuBuGn-H);
+ color=(PuBuGn-J);
+ color=(PuBuGn-K);
+ color=(PuBuGn-M);
+ },
+ cycle list/.define={PuBuGn-9}{[of colormap=PuBuGn-9]},
+ },
+ /pgfplots/cycle list/PuBuGn-9/.style={/pgfplots/@@brewer set cycle list={PuBuGn-9}},
+ %
+ /pgfplots/colormap/PuBu-3/.style={
+ colormap={PuBu-3}{
+ color=(PuBu-C);
+ color=(PuBu-F);
+ color=(PuBu-I);
+ },
+ cycle list/.define={PuBu-3}{[of colormap=PuBu-3]},
+ },
+ /pgfplots/cycle list/PuBu-3/.style={/pgfplots/@@brewer set cycle list={PuBu-3}},
+ %
+ /pgfplots/colormap/PuBu-4/.style={
+ colormap={PuBu-4}{
+ color=(PuBu-B);
+ color=(PuBu-E);
+ color=(PuBu-G);
+ color=(PuBu-J);
+ },
+ cycle list/.define={PuBu-4}{[of colormap=PuBu-4]},
+ },
+ /pgfplots/cycle list/PuBu-4/.style={/pgfplots/@@brewer set cycle list={PuBu-4}},
+ %
+ /pgfplots/colormap/PuBu-5/.style={
+ colormap={PuBu-5}{
+ color=(PuBu-B);
+ color=(PuBu-E);
+ color=(PuBu-G);
+ color=(PuBu-I);
+ color=(PuBu-K);
+ },
+ cycle list/.define={PuBu-5}{[of colormap=PuBu-5]},
+ },
+ /pgfplots/cycle list/PuBu-5/.style={/pgfplots/@@brewer set cycle list={PuBu-5}},
+ %
+ /pgfplots/colormap/PuBu-6/.style={
+ colormap={PuBu-6}{
+ color=(PuBu-B);
+ color=(PuBu-D);
+ color=(PuBu-F);
+ color=(PuBu-G);
+ color=(PuBu-I);
+ color=(PuBu-K);
+ },
+ cycle list/.define={PuBu-6}{[of colormap=PuBu-6]},
+ },
+ /pgfplots/cycle list/PuBu-6/.style={/pgfplots/@@brewer set cycle list={PuBu-6}},
+ %
+ /pgfplots/colormap/PuBu-7/.style={
+ colormap={PuBu-7}{
+ color=(PuBu-B);
+ color=(PuBu-D);
+ color=(PuBu-F);
+ color=(PuBu-G);
+ color=(PuBu-H);
+ color=(PuBu-J);
+ color=(PuBu-L);
+ },
+ cycle list/.define={PuBu-7}{[of colormap=PuBu-7]},
+ },
+ /pgfplots/cycle list/PuBu-7/.style={/pgfplots/@@brewer set cycle list={PuBu-7}},
+ %
+ /pgfplots/colormap/PuBu-8/.style={
+ colormap={PuBu-8}{
+ color=(PuBu-A);
+ color=(PuBu-C);
+ color=(PuBu-D);
+ color=(PuBu-F);
+ color=(PuBu-G);
+ color=(PuBu-H);
+ color=(PuBu-J);
+ color=(PuBu-L);
+ },
+ cycle list/.define={PuBu-8}{[of colormap=PuBu-8]},
+ },
+ /pgfplots/cycle list/PuBu-8/.style={/pgfplots/@@brewer set cycle list={PuBu-8}},
+ %
+ /pgfplots/colormap/PuBu-9/.style={
+ colormap={PuBu-9}{
+ color=(PuBu-A);
+ color=(PuBu-C);
+ color=(PuBu-D);
+ color=(PuBu-F);
+ color=(PuBu-G);
+ color=(PuBu-H);
+ color=(PuBu-J);
+ color=(PuBu-K);
+ color=(PuBu-M);
+ },
+ cycle list/.define={PuBu-9}{[of colormap=PuBu-9]},
+ },
+ /pgfplots/cycle list/PuBu-9/.style={/pgfplots/@@brewer set cycle list={PuBu-9}},
+ %
+ /pgfplots/colormap/BuPu-3/.style={
+ colormap={BuPu-3}{
+ color=(BuPu-C);
+ color=(BuPu-F);
+ color=(BuPu-I);
+ },
+ cycle list/.define={BuPu-3}{[of colormap=BuPu-3]},
+ },
+ /pgfplots/cycle list/BuPu-3/.style={/pgfplots/@@brewer set cycle list={BuPu-3}},
+ %
+ /pgfplots/colormap/BuPu-4/.style={
+ colormap={BuPu-4}{
+ color=(BuPu-B);
+ color=(BuPu-E);
+ color=(BuPu-G);
+ color=(BuPu-J);
+ },
+ cycle list/.define={BuPu-4}{[of colormap=BuPu-4]},
+ },
+ /pgfplots/cycle list/BuPu-4/.style={/pgfplots/@@brewer set cycle list={BuPu-4}},
+ %
+ /pgfplots/colormap/BuPu-5/.style={
+ colormap={BuPu-5}{
+ color=(BuPu-B);
+ color=(BuPu-E);
+ color=(BuPu-G);
+ color=(BuPu-I);
+ color=(BuPu-K);
+ },
+ cycle list/.define={BuPu-5}{[of colormap=BuPu-5]},
+ },
+ /pgfplots/cycle list/BuPu-5/.style={/pgfplots/@@brewer set cycle list={BuPu-5}},
+ %
+ /pgfplots/colormap/BuPu-6/.style={
+ colormap={BuPu-6}{
+ color=(BuPu-B);
+ color=(BuPu-D);
+ color=(BuPu-F);
+ color=(BuPu-G);
+ color=(BuPu-I);
+ color=(BuPu-K);
+ },
+ cycle list/.define={BuPu-6}{[of colormap=BuPu-6]},
+ },
+ /pgfplots/cycle list/BuPu-6/.style={/pgfplots/@@brewer set cycle list={BuPu-6}},
+ %
+ /pgfplots/colormap/BuPu-7/.style={
+ colormap={BuPu-7}{
+ color=(BuPu-B);
+ color=(BuPu-D);
+ color=(BuPu-F);
+ color=(BuPu-G);
+ color=(BuPu-H);
+ color=(BuPu-J);
+ color=(BuPu-L);
+ },
+ cycle list/.define={BuPu-7}{[of colormap=BuPu-7]},
+ },
+ /pgfplots/cycle list/BuPu-7/.style={/pgfplots/@@brewer set cycle list={BuPu-7}},
+ %
+ /pgfplots/colormap/BuPu-8/.style={
+ colormap={BuPu-8}{
+ color=(BuPu-A);
+ color=(BuPu-C);
+ color=(BuPu-D);
+ color=(BuPu-F);
+ color=(BuPu-G);
+ color=(BuPu-H);
+ color=(BuPu-J);
+ color=(BuPu-L);
+ },
+ cycle list/.define={BuPu-8}{[of colormap=BuPu-8]},
+ },
+ /pgfplots/cycle list/BuPu-8/.style={/pgfplots/@@brewer set cycle list={BuPu-8}},
+ %
+ /pgfplots/colormap/BuPu-9/.style={
+ colormap={BuPu-9}{
+ color=(BuPu-A);
+ color=(BuPu-C);
+ color=(BuPu-D);
+ color=(BuPu-F);
+ color=(BuPu-G);
+ color=(BuPu-H);
+ color=(BuPu-J);
+ color=(BuPu-K);
+ color=(BuPu-M);
+ },
+ cycle list/.define={BuPu-9}{[of colormap=BuPu-9]},
+ },
+ /pgfplots/cycle list/BuPu-9/.style={/pgfplots/@@brewer set cycle list={BuPu-9}},
+ %
+ /pgfplots/colormap/RdPu-3/.style={
+ colormap={RdPu-3}{
+ color=(RdPu-C);
+ color=(RdPu-F);
+ color=(RdPu-I);
+ },
+ cycle list/.define={RdPu-3}{[of colormap=RdPu-3]},
+ },
+ /pgfplots/cycle list/RdPu-3/.style={/pgfplots/@@brewer set cycle list={RdPu-3}},
+ %
+ /pgfplots/colormap/RdPu-4/.style={
+ colormap={RdPu-4}{
+ color=(RdPu-B);
+ color=(RdPu-E);
+ color=(RdPu-G);
+ color=(RdPu-J);
+ },
+ cycle list/.define={RdPu-4}{[of colormap=RdPu-4]},
+ },
+ /pgfplots/cycle list/RdPu-4/.style={/pgfplots/@@brewer set cycle list={RdPu-4}},
+ %
+ /pgfplots/colormap/RdPu-5/.style={
+ colormap={RdPu-5}{
+ color=(RdPu-B);
+ color=(RdPu-E);
+ color=(RdPu-G);
+ color=(RdPu-I);
+ color=(RdPu-K);
+ },
+ cycle list/.define={RdPu-5}{[of colormap=RdPu-5]},
+ },
+ /pgfplots/cycle list/RdPu-5/.style={/pgfplots/@@brewer set cycle list={RdPu-5}},
+ %
+ /pgfplots/colormap/RdPu-6/.style={
+ colormap={RdPu-6}{
+ color=(RdPu-B);
+ color=(RdPu-D);
+ color=(RdPu-F);
+ color=(RdPu-G);
+ color=(RdPu-I);
+ color=(RdPu-K);
+ },
+ cycle list/.define={RdPu-6}{[of colormap=RdPu-6]},
+ },
+ /pgfplots/cycle list/RdPu-6/.style={/pgfplots/@@brewer set cycle list={RdPu-6}},
+ %
+ /pgfplots/colormap/RdPu-7/.style={
+ colormap={RdPu-7}{
+ color=(RdPu-B);
+ color=(RdPu-D);
+ color=(RdPu-F);
+ color=(RdPu-G);
+ color=(RdPu-H);
+ color=(RdPu-J);
+ color=(RdPu-L);
+ },
+ cycle list/.define={RdPu-7}{[of colormap=RdPu-7]},
+ },
+ /pgfplots/cycle list/RdPu-7/.style={/pgfplots/@@brewer set cycle list={RdPu-7}},
+ %
+ /pgfplots/colormap/RdPu-8/.style={
+ colormap={RdPu-8}{
+ color=(RdPu-A);
+ color=(RdPu-C);
+ color=(RdPu-D);
+ color=(RdPu-F);
+ color=(RdPu-G);
+ color=(RdPu-H);
+ color=(RdPu-J);
+ color=(RdPu-L);
+ },
+ cycle list/.define={RdPu-8}{[of colormap=RdPu-8]},
+ },
+ /pgfplots/cycle list/RdPu-8/.style={/pgfplots/@@brewer set cycle list={RdPu-8}},
+ %
+ /pgfplots/colormap/RdPu-9/.style={
+ colormap={RdPu-9}{
+ color=(RdPu-A);
+ color=(RdPu-C);
+ color=(RdPu-D);
+ color=(RdPu-F);
+ color=(RdPu-G);
+ color=(RdPu-H);
+ color=(RdPu-J);
+ color=(RdPu-K);
+ color=(RdPu-M);
+ },
+ cycle list/.define={RdPu-9}{[of colormap=RdPu-9]},
+ },
+ /pgfplots/cycle list/RdPu-9/.style={/pgfplots/@@brewer set cycle list={RdPu-9}},
+ %
+ /pgfplots/colormap/PuRd-3/.style={
+ colormap={PuRd-3}{
+ color=(PuRd-C);
+ color=(PuRd-F);
+ color=(PuRd-I);
+ },
+ cycle list/.define={PuRd-3}{[of colormap=PuRd-3]},
+ },
+ /pgfplots/cycle list/PuRd-3/.style={/pgfplots/@@brewer set cycle list={PuRd-3}},
+ %
+ /pgfplots/colormap/PuRd-4/.style={
+ colormap={PuRd-4}{
+ color=(PuRd-B);
+ color=(PuRd-E);
+ color=(PuRd-G);
+ color=(PuRd-J);
+ },
+ cycle list/.define={PuRd-4}{[of colormap=PuRd-4]},
+ },
+ /pgfplots/cycle list/PuRd-4/.style={/pgfplots/@@brewer set cycle list={PuRd-4}},
+ %
+ /pgfplots/colormap/PuRd-5/.style={
+ colormap={PuRd-5}{
+ color=(PuRd-B);
+ color=(PuRd-E);
+ color=(PuRd-G);
+ color=(PuRd-I);
+ color=(PuRd-K);
+ },
+ cycle list/.define={PuRd-5}{[of colormap=PuRd-5]},
+ },
+ /pgfplots/cycle list/PuRd-5/.style={/pgfplots/@@brewer set cycle list={PuRd-5}},
+ %
+ /pgfplots/colormap/PuRd-6/.style={
+ colormap={PuRd-6}{
+ color=(PuRd-B);
+ color=(PuRd-D);
+ color=(PuRd-F);
+ color=(PuRd-G);
+ color=(PuRd-I);
+ color=(PuRd-K);
+ },
+ cycle list/.define={PuRd-6}{[of colormap=PuRd-6]},
+ },
+ /pgfplots/cycle list/PuRd-6/.style={/pgfplots/@@brewer set cycle list={PuRd-6}},
+ %
+ /pgfplots/colormap/PuRd-7/.style={
+ colormap={PuRd-7}{
+ color=(PuRd-B);
+ color=(PuRd-D);
+ color=(PuRd-F);
+ color=(PuRd-G);
+ color=(PuRd-H);
+ color=(PuRd-J);
+ color=(PuRd-L);
+ },
+ cycle list/.define={PuRd-7}{[of colormap=PuRd-7]},
+ },
+ /pgfplots/cycle list/PuRd-7/.style={/pgfplots/@@brewer set cycle list={PuRd-7}},
+ %
+ /pgfplots/colormap/PuRd-8/.style={
+ colormap={PuRd-8}{
+ color=(PuRd-A);
+ color=(PuRd-C);
+ color=(PuRd-D);
+ color=(PuRd-F);
+ color=(PuRd-G);
+ color=(PuRd-H);
+ color=(PuRd-J);
+ color=(PuRd-L);
+ },
+ cycle list/.define={PuRd-8}{[of colormap=PuRd-8]},
+ },
+ /pgfplots/cycle list/PuRd-8/.style={/pgfplots/@@brewer set cycle list={PuRd-8}},
+ %
+ /pgfplots/colormap/PuRd-9/.style={
+ colormap={PuRd-9}{
+ color=(PuRd-A);
+ color=(PuRd-C);
+ color=(PuRd-D);
+ color=(PuRd-F);
+ color=(PuRd-G);
+ color=(PuRd-H);
+ color=(PuRd-J);
+ color=(PuRd-K);
+ color=(PuRd-M);
+ },
+ cycle list/.define={PuRd-9}{[of colormap=PuRd-9]},
+ },
+ /pgfplots/cycle list/PuRd-9/.style={/pgfplots/@@brewer set cycle list={PuRd-9}},
+ %
+ /pgfplots/colormap/OrRd-3/.style={
+ colormap={OrRd-3}{
+ color=(OrRd-C);
+ color=(OrRd-F);
+ color=(OrRd-I);
+ },
+ cycle list/.define={OrRd-3}{[of colormap=OrRd-3]},
+ },
+ /pgfplots/cycle list/OrRd-3/.style={/pgfplots/@@brewer set cycle list={OrRd-3}},
+ %
+ /pgfplots/colormap/OrRd-4/.style={
+ colormap={OrRd-4}{
+ color=(OrRd-B);
+ color=(OrRd-E);
+ color=(OrRd-G);
+ color=(OrRd-J);
+ },
+ cycle list/.define={OrRd-4}{[of colormap=OrRd-4]},
+ },
+ /pgfplots/cycle list/OrRd-4/.style={/pgfplots/@@brewer set cycle list={OrRd-4}},
+ %
+ /pgfplots/colormap/OrRd-5/.style={
+ colormap={OrRd-5}{
+ color=(OrRd-B);
+ color=(OrRd-E);
+ color=(OrRd-G);
+ color=(OrRd-I);
+ color=(OrRd-K);
+ },
+ cycle list/.define={OrRd-5}{[of colormap=OrRd-5]},
+ },
+ /pgfplots/cycle list/OrRd-5/.style={/pgfplots/@@brewer set cycle list={OrRd-5}},
+ %
+ /pgfplots/colormap/OrRd-6/.style={
+ colormap={OrRd-6}{
+ color=(OrRd-B);
+ color=(OrRd-D);
+ color=(OrRd-F);
+ color=(OrRd-G);
+ color=(OrRd-I);
+ color=(OrRd-K);
+ },
+ cycle list/.define={OrRd-6}{[of colormap=OrRd-6]},
+ },
+ /pgfplots/cycle list/OrRd-6/.style={/pgfplots/@@brewer set cycle list={OrRd-6}},
+ %
+ /pgfplots/colormap/OrRd-7/.style={
+ colormap={OrRd-7}{
+ color=(OrRd-B);
+ color=(OrRd-D);
+ color=(OrRd-F);
+ color=(OrRd-G);
+ color=(OrRd-H);
+ color=(OrRd-J);
+ color=(OrRd-L);
+ },
+ cycle list/.define={OrRd-7}{[of colormap=OrRd-7]},
+ },
+ /pgfplots/cycle list/OrRd-7/.style={/pgfplots/@@brewer set cycle list={OrRd-7}},
+ %
+ /pgfplots/colormap/OrRd-8/.style={
+ colormap={OrRd-8}{
+ color=(OrRd-A);
+ color=(OrRd-C);
+ color=(OrRd-D);
+ color=(OrRd-F);
+ color=(OrRd-G);
+ color=(OrRd-H);
+ color=(OrRd-J);
+ color=(OrRd-L);
+ },
+ cycle list/.define={OrRd-8}{[of colormap=OrRd-8]},
+ },
+ /pgfplots/cycle list/OrRd-8/.style={/pgfplots/@@brewer set cycle list={OrRd-8}},
+ %
+ /pgfplots/colormap/OrRd-9/.style={
+ colormap={OrRd-9}{
+ color=(OrRd-A);
+ color=(OrRd-C);
+ color=(OrRd-D);
+ color=(OrRd-F);
+ color=(OrRd-G);
+ color=(OrRd-H);
+ color=(OrRd-J);
+ color=(OrRd-K);
+ color=(OrRd-M);
+ },
+ cycle list/.define={OrRd-9}{[of colormap=OrRd-9]},
+ },
+ /pgfplots/cycle list/OrRd-9/.style={/pgfplots/@@brewer set cycle list={OrRd-9}},
+ %
+ /pgfplots/colormap/YlOrRd-3/.style={
+ colormap={YlOrRd-3}{
+ color=(YlOrRd-C);
+ color=(YlOrRd-F);
+ color=(YlOrRd-I);
+ },
+ cycle list/.define={YlOrRd-3}{[of colormap=YlOrRd-3]},
+ },
+ /pgfplots/cycle list/YlOrRd-3/.style={/pgfplots/@@brewer set cycle list={YlOrRd-3}},
+ %
+ /pgfplots/colormap/YlOrRd-4/.style={
+ colormap={YlOrRd-4}{
+ color=(YlOrRd-B);
+ color=(YlOrRd-E);
+ color=(YlOrRd-G);
+ color=(YlOrRd-J);
+ },
+ cycle list/.define={YlOrRd-4}{[of colormap=YlOrRd-4]},
+ },
+ /pgfplots/cycle list/YlOrRd-4/.style={/pgfplots/@@brewer set cycle list={YlOrRd-4}},
+ %
+ /pgfplots/colormap/YlOrRd-5/.style={
+ colormap={YlOrRd-5}{
+ color=(YlOrRd-B);
+ color=(YlOrRd-E);
+ color=(YlOrRd-G);
+ color=(YlOrRd-I);
+ color=(YlOrRd-K);
+ },
+ cycle list/.define={YlOrRd-5}{[of colormap=YlOrRd-5]},
+ },
+ /pgfplots/cycle list/YlOrRd-5/.style={/pgfplots/@@brewer set cycle list={YlOrRd-5}},
+ %
+ /pgfplots/colormap/YlOrRd-6/.style={
+ colormap={YlOrRd-6}{
+ color=(YlOrRd-B);
+ color=(YlOrRd-D);
+ color=(YlOrRd-F);
+ color=(YlOrRd-G);
+ color=(YlOrRd-I);
+ color=(YlOrRd-K);
+ },
+ cycle list/.define={YlOrRd-6}{[of colormap=YlOrRd-6]},
+ },
+ /pgfplots/cycle list/YlOrRd-6/.style={/pgfplots/@@brewer set cycle list={YlOrRd-6}},
+ %
+ /pgfplots/colormap/YlOrRd-7/.style={
+ colormap={YlOrRd-7}{
+ color=(YlOrRd-B);
+ color=(YlOrRd-D);
+ color=(YlOrRd-F);
+ color=(YlOrRd-G);
+ color=(YlOrRd-H);
+ color=(YlOrRd-J);
+ color=(YlOrRd-L);
+ },
+ cycle list/.define={YlOrRd-7}{[of colormap=YlOrRd-7]},
+ },
+ /pgfplots/cycle list/YlOrRd-7/.style={/pgfplots/@@brewer set cycle list={YlOrRd-7}},
+ %
+ /pgfplots/colormap/YlOrRd-8/.style={
+ colormap={YlOrRd-8}{
+ color=(YlOrRd-A);
+ color=(YlOrRd-C);
+ color=(YlOrRd-D);
+ color=(YlOrRd-F);
+ color=(YlOrRd-G);
+ color=(YlOrRd-H);
+ color=(YlOrRd-J);
+ color=(YlOrRd-L);
+ },
+ cycle list/.define={YlOrRd-8}{[of colormap=YlOrRd-8]},
+ },
+ /pgfplots/cycle list/YlOrRd-8/.style={/pgfplots/@@brewer set cycle list={YlOrRd-8}},
+ %
+ /pgfplots/colormap/YlOrRd-9/.style={
+ colormap={YlOrRd-9}{
+ color=(YlOrRd-A);
+ color=(YlOrRd-C);
+ color=(YlOrRd-D);
+ color=(YlOrRd-F);
+ color=(YlOrRd-G);
+ color=(YlOrRd-H);
+ color=(YlOrRd-J);
+ color=(YlOrRd-K);
+ color=(YlOrRd-M);
+ },
+ cycle list/.define={YlOrRd-9}{[of colormap=YlOrRd-9]},
+ },
+ /pgfplots/cycle list/YlOrRd-9/.style={/pgfplots/@@brewer set cycle list={YlOrRd-9}},
+ %
+ /pgfplots/colormap/YlOrBr-3/.style={
+ colormap={YlOrBr-3}{
+ color=(YlOrBr-C);
+ color=(YlOrBr-F);
+ color=(YlOrBr-I);
+ },
+ cycle list/.define={YlOrBr-3}{[of colormap=YlOrBr-3]},
+ },
+ /pgfplots/cycle list/YlOrBr-3/.style={/pgfplots/@@brewer set cycle list={YlOrBr-3}},
+ %
+ /pgfplots/colormap/YlOrBr-4/.style={
+ colormap={YlOrBr-4}{
+ color=(YlOrBr-B);
+ color=(YlOrBr-E);
+ color=(YlOrBr-G);
+ color=(YlOrBr-J);
+ },
+ cycle list/.define={YlOrBr-4}{[of colormap=YlOrBr-4]},
+ },
+ /pgfplots/cycle list/YlOrBr-4/.style={/pgfplots/@@brewer set cycle list={YlOrBr-4}},
+ %
+ /pgfplots/colormap/YlOrBr-5/.style={
+ colormap={YlOrBr-5}{
+ color=(YlOrBr-B);
+ color=(YlOrBr-E);
+ color=(YlOrBr-G);
+ color=(YlOrBr-I);
+ color=(YlOrBr-K);
+ },
+ cycle list/.define={YlOrBr-5}{[of colormap=YlOrBr-5]},
+ },
+ /pgfplots/cycle list/YlOrBr-5/.style={/pgfplots/@@brewer set cycle list={YlOrBr-5}},
+ %
+ /pgfplots/colormap/YlOrBr-6/.style={
+ colormap={YlOrBr-6}{
+ color=(YlOrBr-B);
+ color=(YlOrBr-D);
+ color=(YlOrBr-F);
+ color=(YlOrBr-G);
+ color=(YlOrBr-I);
+ color=(YlOrBr-K);
+ },
+ cycle list/.define={YlOrBr-6}{[of colormap=YlOrBr-6]},
+ },
+ /pgfplots/cycle list/YlOrBr-6/.style={/pgfplots/@@brewer set cycle list={YlOrBr-6}},
+ %
+ /pgfplots/colormap/YlOrBr-7/.style={
+ colormap={YlOrBr-7}{
+ color=(YlOrBr-B);
+ color=(YlOrBr-D);
+ color=(YlOrBr-F);
+ color=(YlOrBr-G);
+ color=(YlOrBr-H);
+ color=(YlOrBr-J);
+ color=(YlOrBr-L);
+ },
+ cycle list/.define={YlOrBr-7}{[of colormap=YlOrBr-7]},
+ },
+ /pgfplots/cycle list/YlOrBr-7/.style={/pgfplots/@@brewer set cycle list={YlOrBr-7}},
+ %
+ /pgfplots/colormap/YlOrBr-8/.style={
+ colormap={YlOrBr-8}{
+ color=(YlOrBr-A);
+ color=(YlOrBr-C);
+ color=(YlOrBr-D);
+ color=(YlOrBr-F);
+ color=(YlOrBr-G);
+ color=(YlOrBr-H);
+ color=(YlOrBr-J);
+ color=(YlOrBr-L);
+ },
+ cycle list/.define={YlOrBr-8}{[of colormap=YlOrBr-8]},
+ },
+ /pgfplots/cycle list/YlOrBr-8/.style={/pgfplots/@@brewer set cycle list={YlOrBr-8}},
+ %
+ /pgfplots/colormap/YlOrBr-9/.style={
+ colormap={YlOrBr-9}{
+ color=(YlOrBr-A);
+ color=(YlOrBr-C);
+ color=(YlOrBr-D);
+ color=(YlOrBr-F);
+ color=(YlOrBr-G);
+ color=(YlOrBr-H);
+ color=(YlOrBr-J);
+ color=(YlOrBr-K);
+ color=(YlOrBr-M);
+ },
+ cycle list/.define={YlOrBr-9}{[of colormap=YlOrBr-9]},
+ },
+ /pgfplots/cycle list/YlOrBr-9/.style={/pgfplots/@@brewer set cycle list={YlOrBr-9}},
+ %
+ /pgfplots/colormap/Purples-3/.style={
+ colormap={Purples-3}{
+ color=(Purples-C);
+ color=(Purples-F);
+ color=(Purples-I);
+ },
+ cycle list/.define={Purples-3}{[of colormap=Purples-3]},
+ },
+ /pgfplots/cycle list/Purples-3/.style={/pgfplots/@@brewer set cycle list={Purples-3}},
+ %
+ /pgfplots/colormap/Purples-4/.style={
+ colormap={Purples-4}{
+ color=(Purples-B);
+ color=(Purples-E);
+ color=(Purples-G);
+ color=(Purples-J);
+ },
+ cycle list/.define={Purples-4}{[of colormap=Purples-4]},
+ },
+ /pgfplots/cycle list/Purples-4/.style={/pgfplots/@@brewer set cycle list={Purples-4}},
+ %
+ /pgfplots/colormap/Purples-5/.style={
+ colormap={Purples-5}{
+ color=(Purples-B);
+ color=(Purples-E);
+ color=(Purples-G);
+ color=(Purples-I);
+ color=(Purples-K);
+ },
+ cycle list/.define={Purples-5}{[of colormap=Purples-5]},
+ },
+ /pgfplots/cycle list/Purples-5/.style={/pgfplots/@@brewer set cycle list={Purples-5}},
+ %
+ /pgfplots/colormap/Purples-6/.style={
+ colormap={Purples-6}{
+ color=(Purples-B);
+ color=(Purples-D);
+ color=(Purples-F);
+ color=(Purples-G);
+ color=(Purples-I);
+ color=(Purples-K);
+ },
+ cycle list/.define={Purples-6}{[of colormap=Purples-6]},
+ },
+ /pgfplots/cycle list/Purples-6/.style={/pgfplots/@@brewer set cycle list={Purples-6}},
+ %
+ /pgfplots/colormap/Purples-7/.style={
+ colormap={Purples-7}{
+ color=(Purples-B);
+ color=(Purples-D);
+ color=(Purples-F);
+ color=(Purples-G);
+ color=(Purples-H);
+ color=(Purples-J);
+ color=(Purples-L);
+ },
+ cycle list/.define={Purples-7}{[of colormap=Purples-7]},
+ },
+ /pgfplots/cycle list/Purples-7/.style={/pgfplots/@@brewer set cycle list={Purples-7}},
+ %
+ /pgfplots/colormap/Purples-8/.style={
+ colormap={Purples-8}{
+ color=(Purples-A);
+ color=(Purples-C);
+ color=(Purples-D);
+ color=(Purples-F);
+ color=(Purples-G);
+ color=(Purples-H);
+ color=(Purples-J);
+ color=(Purples-L);
+ },
+ cycle list/.define={Purples-8}{[of colormap=Purples-8]},
+ },
+ /pgfplots/cycle list/Purples-8/.style={/pgfplots/@@brewer set cycle list={Purples-8}},
+ %
+ /pgfplots/colormap/Purples-9/.style={
+ colormap={Purples-9}{
+ color=(Purples-A);
+ color=(Purples-C);
+ color=(Purples-D);
+ color=(Purples-F);
+ color=(Purples-G);
+ color=(Purples-H);
+ color=(Purples-J);
+ color=(Purples-K);
+ color=(Purples-M);
+ },
+ cycle list/.define={Purples-9}{[of colormap=Purples-9]},
+ },
+ /pgfplots/cycle list/Purples-9/.style={/pgfplots/@@brewer set cycle list={Purples-9}},
+ %
+ /pgfplots/colormap/Blues-3/.style={
+ colormap={Blues-3}{
+ color=(Blues-C);
+ color=(Blues-F);
+ color=(Blues-I);
+ },
+ cycle list/.define={Blues-3}{[of colormap=Blues-3]},
+ },
+ /pgfplots/cycle list/Blues-3/.style={/pgfplots/@@brewer set cycle list={Blues-3}},
+ %
+ /pgfplots/colormap/Blues-4/.style={
+ colormap={Blues-4}{
+ color=(Blues-B);
+ color=(Blues-E);
+ color=(Blues-G);
+ color=(Blues-J);
+ },
+ cycle list/.define={Blues-4}{[of colormap=Blues-4]},
+ },
+ /pgfplots/cycle list/Blues-4/.style={/pgfplots/@@brewer set cycle list={Blues-4}},
+ %
+ /pgfplots/colormap/Blues-5/.style={
+ colormap={Blues-5}{
+ color=(Blues-B);
+ color=(Blues-E);
+ color=(Blues-G);
+ color=(Blues-I);
+ color=(Blues-K);
+ },
+ cycle list/.define={Blues-5}{[of colormap=Blues-5]},
+ },
+ /pgfplots/cycle list/Blues-5/.style={/pgfplots/@@brewer set cycle list={Blues-5}},
+ %
+ /pgfplots/colormap/Blues-6/.style={
+ colormap={Blues-6}{
+ color=(Blues-B);
+ color=(Blues-D);
+ color=(Blues-F);
+ color=(Blues-G);
+ color=(Blues-I);
+ color=(Blues-K);
+ },
+ cycle list/.define={Blues-6}{[of colormap=Blues-6]},
+ },
+ /pgfplots/cycle list/Blues-6/.style={/pgfplots/@@brewer set cycle list={Blues-6}},
+ %
+ /pgfplots/colormap/Blues-7/.style={
+ colormap={Blues-7}{
+ color=(Blues-B);
+ color=(Blues-D);
+ color=(Blues-F);
+ color=(Blues-G);
+ color=(Blues-H);
+ color=(Blues-J);
+ color=(Blues-L);
+ },
+ cycle list/.define={Blues-7}{[of colormap=Blues-7]},
+ },
+ /pgfplots/cycle list/Blues-7/.style={/pgfplots/@@brewer set cycle list={Blues-7}},
+ %
+ /pgfplots/colormap/Blues-8/.style={
+ colormap={Blues-8}{
+ color=(Blues-A);
+ color=(Blues-C);
+ color=(Blues-D);
+ color=(Blues-F);
+ color=(Blues-G);
+ color=(Blues-H);
+ color=(Blues-J);
+ color=(Blues-L);
+ },
+ cycle list/.define={Blues-8}{[of colormap=Blues-8]},
+ },
+ /pgfplots/cycle list/Blues-8/.style={/pgfplots/@@brewer set cycle list={Blues-8}},
+ %
+ /pgfplots/colormap/Blues-9/.style={
+ colormap={Blues-9}{
+ color=(Blues-A);
+ color=(Blues-C);
+ color=(Blues-D);
+ color=(Blues-F);
+ color=(Blues-G);
+ color=(Blues-H);
+ color=(Blues-J);
+ color=(Blues-K);
+ color=(Blues-M);
+ },
+ cycle list/.define={Blues-9}{[of colormap=Blues-9]},
+ },
+ /pgfplots/cycle list/Blues-9/.style={/pgfplots/@@brewer set cycle list={Blues-9}},
+ %
+ /pgfplots/colormap/Greens-3/.style={
+ colormap={Greens-3}{
+ color=(Greens-C);
+ color=(Greens-F);
+ color=(Greens-I);
+ },
+ cycle list/.define={Greens-3}{[of colormap=Greens-3]},
+ },
+ /pgfplots/cycle list/Greens-3/.style={/pgfplots/@@brewer set cycle list={Greens-3}},
+ %
+ /pgfplots/colormap/Greens-4/.style={
+ colormap={Greens-4}{
+ color=(Greens-B);
+ color=(Greens-E);
+ color=(Greens-G);
+ color=(Greens-J);
+ },
+ cycle list/.define={Greens-4}{[of colormap=Greens-4]},
+ },
+ /pgfplots/cycle list/Greens-4/.style={/pgfplots/@@brewer set cycle list={Greens-4}},
+ %
+ /pgfplots/colormap/Greens-5/.style={
+ colormap={Greens-5}{
+ color=(Greens-B);
+ color=(Greens-E);
+ color=(Greens-G);
+ color=(Greens-I);
+ color=(Greens-K);
+ },
+ cycle list/.define={Greens-5}{[of colormap=Greens-5]},
+ },
+ /pgfplots/cycle list/Greens-5/.style={/pgfplots/@@brewer set cycle list={Greens-5}},
+ %
+ /pgfplots/colormap/Greens-6/.style={
+ colormap={Greens-6}{
+ color=(Greens-B);
+ color=(Greens-D);
+ color=(Greens-F);
+ color=(Greens-G);
+ color=(Greens-I);
+ color=(Greens-K);
+ },
+ cycle list/.define={Greens-6}{[of colormap=Greens-6]},
+ },
+ /pgfplots/cycle list/Greens-6/.style={/pgfplots/@@brewer set cycle list={Greens-6}},
+ %
+ /pgfplots/colormap/Greens-7/.style={
+ colormap={Greens-7}{
+ color=(Greens-B);
+ color=(Greens-D);
+ color=(Greens-F);
+ color=(Greens-G);
+ color=(Greens-H);
+ color=(Greens-J);
+ color=(Greens-L);
+ },
+ cycle list/.define={Greens-7}{[of colormap=Greens-7]},
+ },
+ /pgfplots/cycle list/Greens-7/.style={/pgfplots/@@brewer set cycle list={Greens-7}},
+ %
+ /pgfplots/colormap/Greens-8/.style={
+ colormap={Greens-8}{
+ color=(Greens-A);
+ color=(Greens-C);
+ color=(Greens-D);
+ color=(Greens-F);
+ color=(Greens-G);
+ color=(Greens-H);
+ color=(Greens-J);
+ color=(Greens-L);
+ },
+ cycle list/.define={Greens-8}{[of colormap=Greens-8]},
+ },
+ /pgfplots/cycle list/Greens-8/.style={/pgfplots/@@brewer set cycle list={Greens-8}},
+ %
+ /pgfplots/colormap/Greens-9/.style={
+ colormap={Greens-9}{
+ color=(Greens-A);
+ color=(Greens-C);
+ color=(Greens-D);
+ color=(Greens-F);
+ color=(Greens-G);
+ color=(Greens-H);
+ color=(Greens-J);
+ color=(Greens-K);
+ color=(Greens-M);
+ },
+ cycle list/.define={Greens-9}{[of colormap=Greens-9]},
+ },
+ /pgfplots/cycle list/Greens-9/.style={/pgfplots/@@brewer set cycle list={Greens-9}},
+ %
+ /pgfplots/colormap/Oranges-3/.style={
+ colormap={Oranges-3}{
+ color=(Oranges-C);
+ color=(Oranges-F);
+ color=(Oranges-I);
+ },
+ cycle list/.define={Oranges-3}{[of colormap=Oranges-3]},
+ },
+ /pgfplots/cycle list/Oranges-3/.style={/pgfplots/@@brewer set cycle list={Oranges-3}},
+ %
+ /pgfplots/colormap/Oranges-4/.style={
+ colormap={Oranges-4}{
+ color=(Oranges-B);
+ color=(Oranges-E);
+ color=(Oranges-G);
+ color=(Oranges-J);
+ },
+ cycle list/.define={Oranges-4}{[of colormap=Oranges-4]},
+ },
+ /pgfplots/cycle list/Oranges-4/.style={/pgfplots/@@brewer set cycle list={Oranges-4}},
+ %
+ /pgfplots/colormap/Oranges-5/.style={
+ colormap={Oranges-5}{
+ color=(Oranges-B);
+ color=(Oranges-E);
+ color=(Oranges-G);
+ color=(Oranges-I);
+ color=(Oranges-K);
+ },
+ cycle list/.define={Oranges-5}{[of colormap=Oranges-5]},
+ },
+ /pgfplots/cycle list/Oranges-5/.style={/pgfplots/@@brewer set cycle list={Oranges-5}},
+ %
+ /pgfplots/colormap/Oranges-6/.style={
+ colormap={Oranges-6}{
+ color=(Oranges-B);
+ color=(Oranges-D);
+ color=(Oranges-F);
+ color=(Oranges-G);
+ color=(Oranges-I);
+ color=(Oranges-K);
+ },
+ cycle list/.define={Oranges-6}{[of colormap=Oranges-6]},
+ },
+ /pgfplots/cycle list/Oranges-6/.style={/pgfplots/@@brewer set cycle list={Oranges-6}},
+ %
+ /pgfplots/colormap/Oranges-7/.style={
+ colormap={Oranges-7}{
+ color=(Oranges-B);
+ color=(Oranges-D);
+ color=(Oranges-F);
+ color=(Oranges-G);
+ color=(Oranges-H);
+ color=(Oranges-J);
+ color=(Oranges-L);
+ },
+ cycle list/.define={Oranges-7}{[of colormap=Oranges-7]},
+ },
+ /pgfplots/cycle list/Oranges-7/.style={/pgfplots/@@brewer set cycle list={Oranges-7}},
+ %
+ /pgfplots/colormap/Oranges-8/.style={
+ colormap={Oranges-8}{
+ color=(Oranges-A);
+ color=(Oranges-C);
+ color=(Oranges-D);
+ color=(Oranges-F);
+ color=(Oranges-G);
+ color=(Oranges-H);
+ color=(Oranges-J);
+ color=(Oranges-L);
+ },
+ cycle list/.define={Oranges-8}{[of colormap=Oranges-8]},
+ },
+ /pgfplots/cycle list/Oranges-8/.style={/pgfplots/@@brewer set cycle list={Oranges-8}},
+ %
+ /pgfplots/colormap/Oranges-9/.style={
+ colormap={Oranges-9}{
+ color=(Oranges-A);
+ color=(Oranges-C);
+ color=(Oranges-D);
+ color=(Oranges-F);
+ color=(Oranges-G);
+ color=(Oranges-H);
+ color=(Oranges-J);
+ color=(Oranges-K);
+ color=(Oranges-M);
+ },
+ cycle list/.define={Oranges-9}{[of colormap=Oranges-9]},
+ },
+ /pgfplots/cycle list/Oranges-9/.style={/pgfplots/@@brewer set cycle list={Oranges-9}},
+ %
+ /pgfplots/colormap/Reds-3/.style={
+ colormap={Reds-3}{
+ color=(Reds-C);
+ color=(Reds-F);
+ color=(Reds-I);
+ },
+ cycle list/.define={Reds-3}{[of colormap=Reds-3]},
+ },
+ /pgfplots/cycle list/Reds-3/.style={/pgfplots/@@brewer set cycle list={Reds-3}},
+ %
+ /pgfplots/colormap/Reds-4/.style={
+ colormap={Reds-4}{
+ color=(Reds-B);
+ color=(Reds-E);
+ color=(Reds-G);
+ color=(Reds-J);
+ },
+ cycle list/.define={Reds-4}{[of colormap=Reds-4]},
+ },
+ /pgfplots/cycle list/Reds-4/.style={/pgfplots/@@brewer set cycle list={Reds-4}},
+ %
+ /pgfplots/colormap/Reds-5/.style={
+ colormap={Reds-5}{
+ color=(Reds-B);
+ color=(Reds-E);
+ color=(Reds-G);
+ color=(Reds-I);
+ color=(Reds-K);
+ },
+ cycle list/.define={Reds-5}{[of colormap=Reds-5]},
+ },
+ /pgfplots/cycle list/Reds-5/.style={/pgfplots/@@brewer set cycle list={Reds-5}},
+ %
+ /pgfplots/colormap/Reds-6/.style={
+ colormap={Reds-6}{
+ color=(Reds-B);
+ color=(Reds-D);
+ color=(Reds-F);
+ color=(Reds-G);
+ color=(Reds-I);
+ color=(Reds-K);
+ },
+ cycle list/.define={Reds-6}{[of colormap=Reds-6]},
+ },
+ /pgfplots/cycle list/Reds-6/.style={/pgfplots/@@brewer set cycle list={Reds-6}},
+ %
+ /pgfplots/colormap/Reds-7/.style={
+ colormap={Reds-7}{
+ color=(Reds-B);
+ color=(Reds-D);
+ color=(Reds-F);
+ color=(Reds-G);
+ color=(Reds-H);
+ color=(Reds-J);
+ color=(Reds-L);
+ },
+ cycle list/.define={Reds-7}{[of colormap=Reds-7]},
+ },
+ /pgfplots/cycle list/Reds-7/.style={/pgfplots/@@brewer set cycle list={Reds-7}},
+ %
+ /pgfplots/colormap/Reds-8/.style={
+ colormap={Reds-8}{
+ color=(Reds-A);
+ color=(Reds-C);
+ color=(Reds-D);
+ color=(Reds-F);
+ color=(Reds-G);
+ color=(Reds-H);
+ color=(Reds-J);
+ color=(Reds-L);
+ },
+ cycle list/.define={Reds-8}{[of colormap=Reds-8]},
+ },
+ /pgfplots/cycle list/Reds-8/.style={/pgfplots/@@brewer set cycle list={Reds-8}},
+ %
+ /pgfplots/colormap/Reds-9/.style={
+ colormap={Reds-9}{
+ color=(Reds-A);
+ color=(Reds-C);
+ color=(Reds-D);
+ color=(Reds-F);
+ color=(Reds-G);
+ color=(Reds-H);
+ color=(Reds-J);
+ color=(Reds-K);
+ color=(Reds-M);
+ },
+ cycle list/.define={Reds-9}{[of colormap=Reds-9]},
+ },
+ /pgfplots/cycle list/Reds-9/.style={/pgfplots/@@brewer set cycle list={Reds-9}},
+ %
+ /pgfplots/colormap/Greys-3/.style={
+ colormap={Greys-3}{
+ color=(Greys-C);
+ color=(Greys-F);
+ color=(Greys-I);
+ },
+ cycle list/.define={Greys-3}{[of colormap=Greys-3]},
+ },
+ /pgfplots/cycle list/Greys-3/.style={/pgfplots/@@brewer set cycle list={Greys-3}},
+ %
+ /pgfplots/colormap/Greys-4/.style={
+ colormap={Greys-4}{
+ color=(Greys-B);
+ color=(Greys-E);
+ color=(Greys-G);
+ color=(Greys-J);
+ },
+ cycle list/.define={Greys-4}{[of colormap=Greys-4]},
+ },
+ /pgfplots/cycle list/Greys-4/.style={/pgfplots/@@brewer set cycle list={Greys-4}},
+ %
+ /pgfplots/colormap/Greys-5/.style={
+ colormap={Greys-5}{
+ color=(Greys-B);
+ color=(Greys-E);
+ color=(Greys-G);
+ color=(Greys-I);
+ color=(Greys-K);
+ },
+ cycle list/.define={Greys-5}{[of colormap=Greys-5]},
+ },
+ /pgfplots/cycle list/Greys-5/.style={/pgfplots/@@brewer set cycle list={Greys-5}},
+ %
+ /pgfplots/colormap/Greys-6/.style={
+ colormap={Greys-6}{
+ color=(Greys-B);
+ color=(Greys-D);
+ color=(Greys-F);
+ color=(Greys-G);
+ color=(Greys-I);
+ color=(Greys-K);
+ },
+ cycle list/.define={Greys-6}{[of colormap=Greys-6]},
+ },
+ /pgfplots/cycle list/Greys-6/.style={/pgfplots/@@brewer set cycle list={Greys-6}},
+ %
+ /pgfplots/colormap/Greys-7/.style={
+ colormap={Greys-7}{
+ color=(Greys-B);
+ color=(Greys-D);
+ color=(Greys-F);
+ color=(Greys-G);
+ color=(Greys-H);
+ color=(Greys-J);
+ color=(Greys-L);
+ },
+ cycle list/.define={Greys-7}{[of colormap=Greys-7]},
+ },
+ /pgfplots/cycle list/Greys-7/.style={/pgfplots/@@brewer set cycle list={Greys-7}},
+ %
+ /pgfplots/colormap/Greys-8/.style={
+ colormap={Greys-8}{
+ color=(Greys-A);
+ color=(Greys-C);
+ color=(Greys-D);
+ color=(Greys-F);
+ color=(Greys-G);
+ color=(Greys-H);
+ color=(Greys-J);
+ color=(Greys-L);
+ },
+ cycle list/.define={Greys-8}{[of colormap=Greys-8]},
+ },
+ /pgfplots/cycle list/Greys-8/.style={/pgfplots/@@brewer set cycle list={Greys-8}},
+ %
+ /pgfplots/colormap/Greys-9/.style={
+ colormap={Greys-9}{
+ color=(Greys-A);
+ color=(Greys-C);
+ color=(Greys-D);
+ color=(Greys-F);
+ color=(Greys-G);
+ color=(Greys-H);
+ color=(Greys-J);
+ color=(Greys-K);
+ color=(Greys-M);
+ },
+ cycle list/.define={Greys-9}{[of colormap=Greys-9]},
+ },
+ /pgfplots/cycle list/Greys-9/.style={/pgfplots/@@brewer set cycle list={Greys-9}},
+ %
+ % ===========================================================================
+ /pgfplots/colormap/PuOr-3/.style={
+ colormap={PuOr-3}{
+ color=(PuOr-E);
+ color=(PuOr-H);
+ color=(PuOr-K);
+ },
+ cycle list/.define={PuOr-3}{[of colormap=PuOr-3]},
+ },
+ /pgfplots/cycle list/PuOr-3/.style={/pgfplots/@@brewer set cycle list={PuOr-3}},
+ %
+ /pgfplots/colormap/PuOr-4/.style={
+ colormap={PuOr-4}{
+ color=(PuOr-C);
+ color=(PuOr-F);
+ color=(PuOr-J);
+ color=(PuOr-M);
+ },
+ cycle list/.define={PuOr-4}{[of colormap=PuOr-4]},
+ },
+ /pgfplots/cycle list/PuOr-4/.style={/pgfplots/@@brewer set cycle list={PuOr-4}},
+ %
+ /pgfplots/colormap/PuOr-5/.style={
+ colormap={PuOr-5}{
+ color=(PuOr-C);
+ color=(PuOr-F);
+ color=(PuOr-H);
+ color=(PuOr-J);
+ color=(PuOr-M);
+ },
+ cycle list/.define={PuOr-5}{[of colormap=PuOr-5]},
+ },
+ /pgfplots/cycle list/PuOr-5/.style={/pgfplots/@@brewer set cycle list={PuOr-5}},
+ %
+ /pgfplots/colormap/PuOr-6/.style={
+ colormap={PuOr-6}{
+ color=(PuOr-B);
+ color=(PuOr-E);
+ color=(PuOr-G);
+ color=(PuOr-I);
+ color=(PuOr-K);
+ color=(PuOr-N);
+ },
+ cycle list/.define={PuOr-6}{[of colormap=PuOr-6]},
+ },
+ /pgfplots/cycle list/PuOr-6/.style={/pgfplots/@@brewer set cycle list={PuOr-6}},
+ %
+ /pgfplots/colormap/PuOr-7/.style={
+ colormap={PuOr-7}{
+ color=(PuOr-B);
+ color=(PuOr-E);
+ color=(PuOr-G);
+ color=(PuOr-H);
+ color=(PuOr-I);
+ color=(PuOr-K);
+ color=(PuOr-N);
+ },
+ cycle list/.define={PuOr-7}{[of colormap=PuOr-7]},
+ },
+ /pgfplots/cycle list/PuOr-7/.style={/pgfplots/@@brewer set cycle list={PuOr-7}},
+ %
+ /pgfplots/colormap/PuOr-8/.style={
+ colormap={PuOr-8}{
+ color=(PuOr-B);
+ color=(PuOr-D);
+ color=(PuOr-F);
+ color=(PuOr-G);
+ color=(PuOr-I);
+ color=(PuOr-J);
+ color=(PuOr-L);
+ color=(PuOr-N);
+ },
+ cycle list/.define={PuOr-8}{[of colormap=PuOr-8]},
+ },
+ /pgfplots/cycle list/PuOr-8/.style={/pgfplots/@@brewer set cycle list={PuOr-8}},
+ %
+ /pgfplots/colormap/PuOr-9/.style={
+ colormap={PuOr-9}{
+ color=(PuOr-B);
+ color=(PuOr-D);
+ color=(PuOr-F);
+ color=(PuOr-G);
+ color=(PuOr-H);
+ color=(PuOr-I);
+ color=(PuOr-J);
+ color=(PuOr-L);
+ color=(PuOr-N);
+ },
+ cycle list/.define={PuOr-9}{[of colormap=PuOr-9]},
+ },
+ /pgfplots/cycle list/PuOr-9/.style={/pgfplots/@@brewer set cycle list={PuOr-9}},
+ %
+ /pgfplots/colormap/PuOr-10/.style={
+ colormap={PuOr-10}{
+ color=(PuOr-A);
+ color=(PuOr-B);
+ color=(PuOr-D);
+ color=(PuOr-F);
+ color=(PuOr-G);
+ color=(PuOr-I);
+ color=(PuOr-J);
+ color=(PuOr-L);
+ color=(PuOr-N);
+ color=(PuOr-O);
+ },
+ cycle list/.define={PuOr-10}{[of colormap=PuOr-10]},
+ },
+ /pgfplots/cycle list/PuOr-10/.style={/pgfplots/@@brewer set cycle list={PuOr-10}},
+ %
+ /pgfplots/colormap/PuOr-11/.style={
+ colormap={PuOr-11}{
+ color=(PuOr-A);
+ color=(PuOr-B);
+ color=(PuOr-D);
+ color=(PuOr-F);
+ color=(PuOr-G);
+ color=(PuOr-H);
+ color=(PuOr-I);
+ color=(PuOr-J);
+ color=(PuOr-L);
+ color=(PuOr-N);
+ color=(PuOr-O);
+ },
+ cycle list/.define={PuOr-11}{[of colormap=PuOr-11]},
+ },
+ /pgfplots/cycle list/PuOr-11/.style={/pgfplots/@@brewer set cycle list={PuOr-11}},
+ %
+ /pgfplots/colormap/BrBG-3/.style={
+ colormap={BrBG-3}{
+ color=(BrBG-E);
+ color=(BrBG-H);
+ color=(BrBG-K);
+ },
+ cycle list/.define={BrBG-3}{[of colormap=BrBG-3]},
+ },
+ /pgfplots/cycle list/BrBG-3/.style={/pgfplots/@@brewer set cycle list={BrBG-3}},
+ %
+ /pgfplots/colormap/BrBG-4/.style={
+ colormap={BrBG-4}{
+ color=(BrBG-C);
+ color=(BrBG-F);
+ color=(BrBG-J);
+ color=(BrBG-M);
+ },
+ cycle list/.define={BrBG-4}{[of colormap=BrBG-4]},
+ },
+ /pgfplots/cycle list/BrBG-4/.style={/pgfplots/@@brewer set cycle list={BrBG-4}},
+ %
+ /pgfplots/colormap/BrBG-5/.style={
+ colormap={BrBG-5}{
+ color=(BrBG-C);
+ color=(BrBG-F);
+ color=(BrBG-H);
+ color=(BrBG-J);
+ color=(BrBG-M);
+ },
+ cycle list/.define={BrBG-5}{[of colormap=BrBG-5]},
+ },
+ /pgfplots/cycle list/BrBG-5/.style={/pgfplots/@@brewer set cycle list={BrBG-5}},
+ %
+ /pgfplots/colormap/BrBG-6/.style={
+ colormap={BrBG-6}{
+ color=(BrBG-B);
+ color=(BrBG-E);
+ color=(BrBG-G);
+ color=(BrBG-I);
+ color=(BrBG-K);
+ color=(BrBG-N);
+ },
+ cycle list/.define={BrBG-6}{[of colormap=BrBG-6]},
+ },
+ /pgfplots/cycle list/BrBG-6/.style={/pgfplots/@@brewer set cycle list={BrBG-6}},
+ %
+ /pgfplots/colormap/BrBG-7/.style={
+ colormap={BrBG-7}{
+ color=(BrBG-B);
+ color=(BrBG-E);
+ color=(BrBG-G);
+ color=(BrBG-H);
+ color=(BrBG-I);
+ color=(BrBG-K);
+ color=(BrBG-N);
+ },
+ cycle list/.define={BrBG-7}{[of colormap=BrBG-7]},
+ },
+ /pgfplots/cycle list/BrBG-7/.style={/pgfplots/@@brewer set cycle list={BrBG-7}},
+ %
+ /pgfplots/colormap/BrBG-8/.style={
+ colormap={BrBG-8}{
+ color=(BrBG-B);
+ color=(BrBG-D);
+ color=(BrBG-F);
+ color=(BrBG-G);
+ color=(BrBG-I);
+ color=(BrBG-J);
+ color=(BrBG-L);
+ color=(BrBG-N);
+ },
+ cycle list/.define={BrBG-8}{[of colormap=BrBG-8]},
+ },
+ /pgfplots/cycle list/BrBG-8/.style={/pgfplots/@@brewer set cycle list={BrBG-8}},
+ %
+ /pgfplots/colormap/BrBG-9/.style={
+ colormap={BrBG-9}{
+ color=(BrBG-B);
+ color=(BrBG-D);
+ color=(BrBG-F);
+ color=(BrBG-G);
+ color=(BrBG-H);
+ color=(BrBG-I);
+ color=(BrBG-J);
+ color=(BrBG-L);
+ color=(BrBG-N);
+ },
+ cycle list/.define={BrBG-9}{[of colormap=BrBG-9]},
+ },
+ /pgfplots/cycle list/BrBG-9/.style={/pgfplots/@@brewer set cycle list={BrBG-9}},
+ %
+ /pgfplots/colormap/BrBG-10/.style={
+ colormap={BrBG-10}{
+ color=(BrBG-A);
+ color=(BrBG-B);
+ color=(BrBG-D);
+ color=(BrBG-F);
+ color=(BrBG-G);
+ color=(BrBG-I);
+ color=(BrBG-J);
+ color=(BrBG-L);
+ color=(BrBG-N);
+ color=(BrBG-O);
+ },
+ cycle list/.define={BrBG-10}{[of colormap=BrBG-10]},
+ },
+ /pgfplots/cycle list/BrBG-10/.style={/pgfplots/@@brewer set cycle list={BrBG-10}},
+ %
+ /pgfplots/colormap/BrBG-11/.style={
+ colormap={BrBG-11}{
+ color=(BrBG-A);
+ color=(BrBG-B);
+ color=(BrBG-D);
+ color=(BrBG-F);
+ color=(BrBG-G);
+ color=(BrBG-H);
+ color=(BrBG-I);
+ color=(BrBG-J);
+ color=(BrBG-L);
+ color=(BrBG-N);
+ color=(BrBG-O);
+ },
+ cycle list/.define={BrBG-11}{[of colormap=BrBG-11]},
+ },
+ /pgfplots/cycle list/BrBG-11/.style={/pgfplots/@@brewer set cycle list={BrBG-11}},
+ %
+ /pgfplots/colormap/PRGn-3/.style={
+ colormap={PRGn-3}{
+ color=(PRGn-E);
+ color=(PRGn-H);
+ color=(PRGn-K);
+ },
+ cycle list/.define={PRGn-3}{[of colormap=PRGn-3]},
+ },
+ /pgfplots/cycle list/PRGn-3/.style={/pgfplots/@@brewer set cycle list={PRGn-3}},
+ %
+ /pgfplots/colormap/PRGn-4/.style={
+ colormap={PRGn-4}{
+ color=(PRGn-C);
+ color=(PRGn-F);
+ color=(PRGn-J);
+ color=(PRGn-M);
+ },
+ cycle list/.define={PRGn-4}{[of colormap=PRGn-4]},
+ },
+ /pgfplots/cycle list/PRGn-4/.style={/pgfplots/@@brewer set cycle list={PRGn-4}},
+ %
+ /pgfplots/colormap/PRGn-5/.style={
+ colormap={PRGn-5}{
+ color=(PRGn-C);
+ color=(PRGn-F);
+ color=(PRGn-H);
+ color=(PRGn-J);
+ color=(PRGn-M);
+ },
+ cycle list/.define={PRGn-5}{[of colormap=PRGn-5]},
+ },
+ /pgfplots/cycle list/PRGn-5/.style={/pgfplots/@@brewer set cycle list={PRGn-5}},
+ %
+ /pgfplots/colormap/PRGn-6/.style={
+ colormap={PRGn-6}{
+ color=(PRGn-B);
+ color=(PRGn-E);
+ color=(PRGn-G);
+ color=(PRGn-I);
+ color=(PRGn-K);
+ color=(PRGn-N);
+ },
+ cycle list/.define={PRGn-6}{[of colormap=PRGn-6]},
+ },
+ /pgfplots/cycle list/PRGn-6/.style={/pgfplots/@@brewer set cycle list={PRGn-6}},
+ %
+ /pgfplots/colormap/PRGn-7/.style={
+ colormap={PRGn-7}{
+ color=(PRGn-B);
+ color=(PRGn-E);
+ color=(PRGn-G);
+ color=(PRGn-H);
+ color=(PRGn-I);
+ color=(PRGn-K);
+ color=(PRGn-N);
+ },
+ cycle list/.define={PRGn-7}{[of colormap=PRGn-7]},
+ },
+ /pgfplots/cycle list/PRGn-7/.style={/pgfplots/@@brewer set cycle list={PRGn-7}},
+ %
+ /pgfplots/colormap/PRGn-8/.style={
+ colormap={PRGn-8}{
+ color=(PRGn-B);
+ color=(PRGn-D);
+ color=(PRGn-F);
+ color=(PRGn-G);
+ color=(PRGn-I);
+ color=(PRGn-J);
+ color=(PRGn-L);
+ color=(PRGn-N);
+ },
+ cycle list/.define={PRGn-8}{[of colormap=PRGn-8]},
+ },
+ /pgfplots/cycle list/PRGn-8/.style={/pgfplots/@@brewer set cycle list={PRGn-8}},
+ %
+ /pgfplots/colormap/PRGn-9/.style={
+ colormap={PRGn-9}{
+ color=(PRGn-B);
+ color=(PRGn-D);
+ color=(PRGn-F);
+ color=(PRGn-G);
+ color=(PRGn-H);
+ color=(PRGn-I);
+ color=(PRGn-J);
+ color=(PRGn-L);
+ color=(PRGn-N);
+ },
+ cycle list/.define={PRGn-9}{[of colormap=PRGn-9]},
+ },
+ /pgfplots/cycle list/PRGn-9/.style={/pgfplots/@@brewer set cycle list={PRGn-9}},
+ %
+ /pgfplots/colormap/PRGn-10/.style={
+ colormap={PRGn-10}{
+ color=(PRGn-A);
+ color=(PRGn-B);
+ color=(PRGn-D);
+ color=(PRGn-F);
+ color=(PRGn-G);
+ color=(PRGn-I);
+ color=(PRGn-J);
+ color=(PRGn-L);
+ color=(PRGn-N);
+ color=(PRGn-O);
+ },
+ cycle list/.define={PRGn-10}{[of colormap=PRGn-10]},
+ },
+ /pgfplots/cycle list/PRGn-10/.style={/pgfplots/@@brewer set cycle list={PRGn-10}},
+ %
+ /pgfplots/colormap/PRGn-11/.style={
+ colormap={PRGn-11}{
+ color=(PRGn-A);
+ color=(PRGn-B);
+ color=(PRGn-D);
+ color=(PRGn-F);
+ color=(PRGn-G);
+ color=(PRGn-H);
+ color=(PRGn-I);
+ color=(PRGn-J);
+ color=(PRGn-L);
+ color=(PRGn-N);
+ color=(PRGn-O);
+ },
+ cycle list/.define={PRGn-11}{[of colormap=PRGn-11]},
+ },
+ /pgfplots/cycle list/PRGn-11/.style={/pgfplots/@@brewer set cycle list={PRGn-11}},
+ %
+ /pgfplots/colormap/PiYG-3/.style={
+ colormap={PiYG-3}{
+ color=(PiYG-E);
+ color=(PiYG-H);
+ color=(PiYG-K);
+ },
+ cycle list/.define={PiYG-3}{[of colormap=PiYG-3]},
+ },
+ /pgfplots/cycle list/PiYG-3/.style={/pgfplots/@@brewer set cycle list={PiYG-3}},
+ %
+ /pgfplots/colormap/PiYG-4/.style={
+ colormap={PiYG-4}{
+ color=(PiYG-C);
+ color=(PiYG-F);
+ color=(PiYG-J);
+ color=(PiYG-M);
+ },
+ cycle list/.define={PiYG-4}{[of colormap=PiYG-4]},
+ },
+ /pgfplots/cycle list/PiYG-4/.style={/pgfplots/@@brewer set cycle list={PiYG-4}},
+ %
+ /pgfplots/colormap/PiYG-5/.style={
+ colormap={PiYG-5}{
+ color=(PiYG-C);
+ color=(PiYG-F);
+ color=(PiYG-H);
+ color=(PiYG-J);
+ color=(PiYG-M);
+ },
+ cycle list/.define={PiYG-5}{[of colormap=PiYG-5]},
+ },
+ /pgfplots/cycle list/PiYG-5/.style={/pgfplots/@@brewer set cycle list={PiYG-5}},
+ %
+ /pgfplots/colormap/PiYG-6/.style={
+ colormap={PiYG-6}{
+ color=(PiYG-B);
+ color=(PiYG-E);
+ color=(PiYG-G);
+ color=(PiYG-I);
+ color=(PiYG-K);
+ color=(PiYG-N);
+ },
+ cycle list/.define={PiYG-6}{[of colormap=PiYG-6]},
+ },
+ /pgfplots/cycle list/PiYG-6/.style={/pgfplots/@@brewer set cycle list={PiYG-6}},
+ %
+ /pgfplots/colormap/PiYG-7/.style={
+ colormap={PiYG-7}{
+ color=(PiYG-B);
+ color=(PiYG-E);
+ color=(PiYG-G);
+ color=(PiYG-H);
+ color=(PiYG-I);
+ color=(PiYG-K);
+ color=(PiYG-N);
+ },
+ cycle list/.define={PiYG-7}{[of colormap=PiYG-7]},
+ },
+ /pgfplots/cycle list/PiYG-7/.style={/pgfplots/@@brewer set cycle list={PiYG-7}},
+ %
+ /pgfplots/colormap/PiYG-8/.style={
+ colormap={PiYG-8}{
+ color=(PiYG-B);
+ color=(PiYG-D);
+ color=(PiYG-F);
+ color=(PiYG-G);
+ color=(PiYG-I);
+ color=(PiYG-J);
+ color=(PiYG-L);
+ color=(PiYG-N);
+ },
+ cycle list/.define={PiYG-8}{[of colormap=PiYG-8]},
+ },
+ /pgfplots/cycle list/PiYG-8/.style={/pgfplots/@@brewer set cycle list={PiYG-8}},
+ %
+ /pgfplots/colormap/PiYG-9/.style={
+ colormap={PiYG-9}{
+ color=(PiYG-B);
+ color=(PiYG-D);
+ color=(PiYG-F);
+ color=(PiYG-G);
+ color=(PiYG-H);
+ color=(PiYG-I);
+ color=(PiYG-J);
+ color=(PiYG-L);
+ color=(PiYG-N);
+ },
+ cycle list/.define={PiYG-9}{[of colormap=PiYG-9]},
+ },
+ /pgfplots/cycle list/PiYG-9/.style={/pgfplots/@@brewer set cycle list={PiYG-9}},
+ %
+ /pgfplots/colormap/PiYG-10/.style={
+ colormap={PiYG-10}{
+ color=(PiYG-A);
+ color=(PiYG-B);
+ color=(PiYG-D);
+ color=(PiYG-F);
+ color=(PiYG-G);
+ color=(PiYG-I);
+ color=(PiYG-J);
+ color=(PiYG-L);
+ color=(PiYG-N);
+ color=(PiYG-O);
+ },
+ cycle list/.define={PiYG-10}{[of colormap=PiYG-10]},
+ },
+ /pgfplots/cycle list/PiYG-10/.style={/pgfplots/@@brewer set cycle list={PiYG-10}},
+ %
+ /pgfplots/colormap/PiYG-11/.style={
+ colormap={PiYG-11}{
+ color=(PiYG-A);
+ color=(PiYG-B);
+ color=(PiYG-D);
+ color=(PiYG-F);
+ color=(PiYG-G);
+ color=(PiYG-H);
+ color=(PiYG-I);
+ color=(PiYG-J);
+ color=(PiYG-L);
+ color=(PiYG-N);
+ color=(PiYG-O);
+ },
+ cycle list/.define={PiYG-11}{[of colormap=PiYG-11]},
+ },
+ /pgfplots/cycle list/PiYG-11/.style={/pgfplots/@@brewer set cycle list={PiYG-11}},
+ %
+ /pgfplots/colormap/RdBu-3/.style={
+ colormap={RdBu-3}{
+ color=(RdBu-E);
+ color=(RdBu-H);
+ color=(RdBu-K);
+ },
+ cycle list/.define={RdBu-3}{[of colormap=RdBu-3]},
+ },
+ /pgfplots/cycle list/RdBu-3/.style={/pgfplots/@@brewer set cycle list={RdBu-3}},
+ %
+ /pgfplots/colormap/RdBu-4/.style={
+ colormap={RdBu-4}{
+ color=(RdBu-C);
+ color=(RdBu-F);
+ color=(RdBu-J);
+ color=(RdBu-M);
+ },
+ cycle list/.define={RdBu-4}{[of colormap=RdBu-4]},
+ },
+ /pgfplots/cycle list/RdBu-4/.style={/pgfplots/@@brewer set cycle list={RdBu-4}},
+ %
+ /pgfplots/colormap/RdBu-5/.style={
+ colormap={RdBu-5}{
+ color=(RdBu-C);
+ color=(RdBu-F);
+ color=(RdBu-H);
+ color=(RdBu-J);
+ color=(RdBu-M);
+ },
+ cycle list/.define={RdBu-5}{[of colormap=RdBu-5]},
+ },
+ /pgfplots/cycle list/RdBu-5/.style={/pgfplots/@@brewer set cycle list={RdBu-5}},
+ %
+ /pgfplots/colormap/RdBu-6/.style={
+ colormap={RdBu-6}{
+ color=(RdBu-B);
+ color=(RdBu-E);
+ color=(RdBu-G);
+ color=(RdBu-I);
+ color=(RdBu-K);
+ color=(RdBu-N);
+ },
+ cycle list/.define={RdBu-6}{[of colormap=RdBu-6]},
+ },
+ /pgfplots/cycle list/RdBu-6/.style={/pgfplots/@@brewer set cycle list={RdBu-6}},
+ %
+ /pgfplots/colormap/RdBu-7/.style={
+ colormap={RdBu-7}{
+ color=(RdBu-B);
+ color=(RdBu-E);
+ color=(RdBu-G);
+ color=(RdBu-H);
+ color=(RdBu-I);
+ color=(RdBu-K);
+ color=(RdBu-N);
+ },
+ cycle list/.define={RdBu-7}{[of colormap=RdBu-7]},
+ },
+ /pgfplots/cycle list/RdBu-7/.style={/pgfplots/@@brewer set cycle list={RdBu-7}},
+ %
+ /pgfplots/colormap/RdBu-8/.style={
+ colormap={RdBu-8}{
+ color=(RdBu-B);
+ color=(RdBu-D);
+ color=(RdBu-F);
+ color=(RdBu-G);
+ color=(RdBu-I);
+ color=(RdBu-J);
+ color=(RdBu-L);
+ color=(RdBu-N);
+ },
+ cycle list/.define={RdBu-8}{[of colormap=RdBu-8]},
+ },
+ /pgfplots/cycle list/RdBu-8/.style={/pgfplots/@@brewer set cycle list={RdBu-8}},
+ %
+ /pgfplots/colormap/RdBu-9/.style={
+ colormap={RdBu-9}{
+ color=(RdBu-B);
+ color=(RdBu-D);
+ color=(RdBu-F);
+ color=(RdBu-G);
+ color=(RdBu-H);
+ color=(RdBu-I);
+ color=(RdBu-J);
+ color=(RdBu-L);
+ color=(RdBu-N);
+ },
+ cycle list/.define={RdBu-9}{[of colormap=RdBu-9]},
+ },
+ /pgfplots/cycle list/RdBu-9/.style={/pgfplots/@@brewer set cycle list={RdBu-9}},
+ %
+ /pgfplots/colormap/RdBu-10/.style={
+ colormap={RdBu-10}{
+ color=(RdBu-A);
+ color=(RdBu-B);
+ color=(RdBu-D);
+ color=(RdBu-F);
+ color=(RdBu-G);
+ color=(RdBu-I);
+ color=(RdBu-J);
+ color=(RdBu-L);
+ color=(RdBu-N);
+ color=(RdBu-O);
+ },
+ cycle list/.define={RdBu-10}{[of colormap=RdBu-10]},
+ },
+ /pgfplots/cycle list/RdBu-10/.style={/pgfplots/@@brewer set cycle list={RdBu-10}},
+ %
+ /pgfplots/colormap/RdBu-11/.style={
+ colormap={RdBu-11}{
+ color=(RdBu-A);
+ color=(RdBu-B);
+ color=(RdBu-D);
+ color=(RdBu-F);
+ color=(RdBu-G);
+ color=(RdBu-H);
+ color=(RdBu-I);
+ color=(RdBu-J);
+ color=(RdBu-L);
+ color=(RdBu-N);
+ color=(RdBu-O);
+ },
+ cycle list/.define={RdBu-11}{[of colormap=RdBu-11]},
+ },
+ /pgfplots/cycle list/RdBu-11/.style={/pgfplots/@@brewer set cycle list={RdBu-11}},
+ %
+ /pgfplots/colormap/RdGy-3/.style={
+ colormap={RdGy-3}{
+ color=(RdGy-E);
+ color=(RdGy-H);
+ color=(RdGy-K);
+ },
+ cycle list/.define={RdGy-3}{[of colormap=RdGy-3]},
+ },
+ /pgfplots/cycle list/RdGy-3/.style={/pgfplots/@@brewer set cycle list={RdGy-3}},
+ %
+ /pgfplots/colormap/RdGy-4/.style={
+ colormap={RdGy-4}{
+ color=(RdGy-C);
+ color=(RdGy-F);
+ color=(RdGy-J);
+ color=(RdGy-M);
+ },
+ cycle list/.define={RdGy-4}{[of colormap=RdGy-4]},
+ },
+ /pgfplots/cycle list/RdGy-4/.style={/pgfplots/@@brewer set cycle list={RdGy-4}},
+ %
+ /pgfplots/colormap/RdGy-5/.style={
+ colormap={RdGy-5}{
+ color=(RdGy-C);
+ color=(RdGy-F);
+ color=(RdGy-H);
+ color=(RdGy-J);
+ color=(RdGy-M);
+ },
+ cycle list/.define={RdGy-5}{[of colormap=RdGy-5]},
+ },
+ /pgfplots/cycle list/RdGy-5/.style={/pgfplots/@@brewer set cycle list={RdGy-5}},
+ %
+ /pgfplots/colormap/RdGy-6/.style={
+ colormap={RdGy-6}{
+ color=(RdGy-B);
+ color=(RdGy-E);
+ color=(RdGy-G);
+ color=(RdGy-I);
+ color=(RdGy-K);
+ color=(RdGy-N);
+ },
+ cycle list/.define={RdGy-6}{[of colormap=RdGy-6]},
+ },
+ /pgfplots/cycle list/RdGy-6/.style={/pgfplots/@@brewer set cycle list={RdGy-6}},
+ %
+ /pgfplots/colormap/RdGy-7/.style={
+ colormap={RdGy-7}{
+ color=(RdGy-B);
+ color=(RdGy-E);
+ color=(RdGy-G);
+ color=(RdGy-H);
+ color=(RdGy-I);
+ color=(RdGy-K);
+ color=(RdGy-N);
+ },
+ cycle list/.define={RdGy-7}{[of colormap=RdGy-7]},
+ },
+ /pgfplots/cycle list/RdGy-7/.style={/pgfplots/@@brewer set cycle list={RdGy-7}},
+ %
+ /pgfplots/colormap/RdGy-8/.style={
+ colormap={RdGy-8}{
+ color=(RdGy-B);
+ color=(RdGy-D);
+ color=(RdGy-F);
+ color=(RdGy-G);
+ color=(RdGy-I);
+ color=(RdGy-J);
+ color=(RdGy-L);
+ color=(RdGy-N);
+ },
+ cycle list/.define={RdGy-8}{[of colormap=RdGy-8]},
+ },
+ /pgfplots/cycle list/RdGy-8/.style={/pgfplots/@@brewer set cycle list={RdGy-8}},
+ %
+ /pgfplots/colormap/RdGy-9/.style={
+ colormap={RdGy-9}{
+ color=(RdGy-B);
+ color=(RdGy-D);
+ color=(RdGy-F);
+ color=(RdGy-G);
+ color=(RdGy-H);
+ color=(RdGy-I);
+ color=(RdGy-J);
+ color=(RdGy-L);
+ color=(RdGy-N);
+ },
+ cycle list/.define={RdGy-9}{[of colormap=RdGy-9]},
+ },
+ /pgfplots/cycle list/RdGy-9/.style={/pgfplots/@@brewer set cycle list={RdGy-9}},
+ %
+ /pgfplots/colormap/RdGy-10/.style={
+ colormap={RdGy-10}{
+ color=(RdGy-A);
+ color=(RdGy-B);
+ color=(RdGy-D);
+ color=(RdGy-F);
+ color=(RdGy-G);
+ color=(RdGy-I);
+ color=(RdGy-J);
+ color=(RdGy-L);
+ color=(RdGy-N);
+ color=(RdGy-O);
+ },
+ cycle list/.define={RdGy-10}{[of colormap=RdGy-10]},
+ },
+ /pgfplots/cycle list/RdGy-10/.style={/pgfplots/@@brewer set cycle list={RdGy-10}},
+ %
+ /pgfplots/colormap/RdGy-11/.style={
+ colormap={RdGy-11}{
+ color=(RdGy-A);
+ color=(RdGy-B);
+ color=(RdGy-D);
+ color=(RdGy-F);
+ color=(RdGy-G);
+ color=(RdGy-H);
+ color=(RdGy-I);
+ color=(RdGy-J);
+ color=(RdGy-L);
+ color=(RdGy-N);
+ color=(RdGy-O);
+ },
+ cycle list/.define={RdGy-11}{[of colormap=RdGy-11]},
+ },
+ /pgfplots/cycle list/RdGy-11/.style={/pgfplots/@@brewer set cycle list={RdGy-11}},
+ %
+ /pgfplots/colormap/RdYlBu-3/.style={
+ colormap={RdYlBu-3}{
+ color=(RdYlBu-E);
+ color=(RdYlBu-H);
+ color=(RdYlBu-K);
+ },
+ cycle list/.define={RdYlBu-3}{[of colormap=RdYlBu-3]},
+ },
+ /pgfplots/cycle list/RdYlBu-3/.style={/pgfplots/@@brewer set cycle list={RdYlBu-3}},
+ %
+ /pgfplots/colormap/RdYlBu-4/.style={
+ colormap={RdYlBu-4}{
+ color=(RdYlBu-C);
+ color=(RdYlBu-F);
+ color=(RdYlBu-J);
+ color=(RdYlBu-M);
+ },
+ cycle list/.define={RdYlBu-4}{[of colormap=RdYlBu-4]},
+ },
+ /pgfplots/cycle list/RdYlBu-4/.style={/pgfplots/@@brewer set cycle list={RdYlBu-4}},
+ %
+ /pgfplots/colormap/RdYlBu-5/.style={
+ colormap={RdYlBu-5}{
+ color=(RdYlBu-C);
+ color=(RdYlBu-F);
+ color=(RdYlBu-H);
+ color=(RdYlBu-J);
+ color=(RdYlBu-M);
+ },
+ cycle list/.define={RdYlBu-5}{[of colormap=RdYlBu-5]},
+ },
+ /pgfplots/cycle list/RdYlBu-5/.style={/pgfplots/@@brewer set cycle list={RdYlBu-5}},
+ %
+ /pgfplots/colormap/RdYlBu-6/.style={
+ colormap={RdYlBu-6}{
+ color=(RdYlBu-B);
+ color=(RdYlBu-E);
+ color=(RdYlBu-G);
+ color=(RdYlBu-I);
+ color=(RdYlBu-K);
+ color=(RdYlBu-N);
+ },
+ cycle list/.define={RdYlBu-6}{[of colormap=RdYlBu-6]},
+ },
+ /pgfplots/cycle list/RdYlBu-6/.style={/pgfplots/@@brewer set cycle list={RdYlBu-6}},
+ %
+ /pgfplots/colormap/RdYlBu-7/.style={
+ colormap={RdYlBu-7}{
+ color=(RdYlBu-B);
+ color=(RdYlBu-E);
+ color=(RdYlBu-G);
+ color=(RdYlBu-H);
+ color=(RdYlBu-I);
+ color=(RdYlBu-K);
+ color=(RdYlBu-N);
+ },
+ cycle list/.define={RdYlBu-7}{[of colormap=RdYlBu-7]},
+ },
+ /pgfplots/cycle list/RdYlBu-7/.style={/pgfplots/@@brewer set cycle list={RdYlBu-7}},
+ %
+ /pgfplots/colormap/RdYlBu-8/.style={
+ colormap={RdYlBu-8}{
+ color=(RdYlBu-B);
+ color=(RdYlBu-D);
+ color=(RdYlBu-F);
+ color=(RdYlBu-G);
+ color=(RdYlBu-I);
+ color=(RdYlBu-J);
+ color=(RdYlBu-L);
+ color=(RdYlBu-N);
+ },
+ cycle list/.define={RdYlBu-8}{[of colormap=RdYlBu-8]},
+ },
+ /pgfplots/cycle list/RdYlBu-8/.style={/pgfplots/@@brewer set cycle list={RdYlBu-8}},
+ %
+ /pgfplots/colormap/RdYlBu-9/.style={
+ colormap={RdYlBu-9}{
+ color=(RdYlBu-B);
+ color=(RdYlBu-D);
+ color=(RdYlBu-F);
+ color=(RdYlBu-G);
+ color=(RdYlBu-H);
+ color=(RdYlBu-I);
+ color=(RdYlBu-J);
+ color=(RdYlBu-L);
+ color=(RdYlBu-N);
+ },
+ cycle list/.define={RdYlBu-9}{[of colormap=RdYlBu-9]},
+ },
+ /pgfplots/cycle list/RdYlBu-9/.style={/pgfplots/@@brewer set cycle list={RdYlBu-9}},
+ %
+ /pgfplots/colormap/RdYlBu-10/.style={
+ colormap={RdYlBu-10}{
+ color=(RdYlBu-A);
+ color=(RdYlBu-B);
+ color=(RdYlBu-D);
+ color=(RdYlBu-F);
+ color=(RdYlBu-G);
+ color=(RdYlBu-I);
+ color=(RdYlBu-J);
+ color=(RdYlBu-L);
+ color=(RdYlBu-N);
+ color=(RdYlBu-O);
+ },
+ cycle list/.define={RdYlBu-10}{[of colormap=RdYlBu-10]},
+ },
+ /pgfplots/cycle list/RdYlBu-10/.style={/pgfplots/@@brewer set cycle list={RdYlBu-10}},
+ %
+ /pgfplots/colormap/RdYlBu-11/.style={
+ colormap={RdYlBu-11}{
+ color=(RdYlBu-A);
+ color=(RdYlBu-B);
+ color=(RdYlBu-D);
+ color=(RdYlBu-F);
+ color=(RdYlBu-G);
+ color=(RdYlBu-H);
+ color=(RdYlBu-I);
+ color=(RdYlBu-J);
+ color=(RdYlBu-L);
+ color=(RdYlBu-N);
+ color=(RdYlBu-O);
+ },
+ cycle list/.define={RdYlBu-11}{[of colormap=RdYlBu-11]},
+ },
+ /pgfplots/cycle list/RdYlBu-11/.style={/pgfplots/@@brewer set cycle list={RdYlBu-11}},
+ %
+ /pgfplots/colormap/Spectral-3/.style={
+ colormap={Spectral-3}{
+ color=(Spectral-E);
+ color=(Spectral-H);
+ color=(Spectral-K);
+ },
+ cycle list/.define={Spectral-3}{[of colormap=Spectral-3]},
+ },
+ /pgfplots/cycle list/Spectral-3/.style={/pgfplots/@@brewer set cycle list={Spectral-3}},
+ %
+ /pgfplots/colormap/Spectral-4/.style={
+ colormap={Spectral-4}{
+ color=(Spectral-C);
+ color=(Spectral-F);
+ color=(Spectral-J);
+ color=(Spectral-M);
+ },
+ cycle list/.define={Spectral-4}{[of colormap=Spectral-4]},
+ },
+ /pgfplots/cycle list/Spectral-4/.style={/pgfplots/@@brewer set cycle list={Spectral-4}},
+ %
+ /pgfplots/colormap/Spectral-5/.style={
+ colormap={Spectral-5}{
+ color=(Spectral-C);
+ color=(Spectral-F);
+ color=(Spectral-H);
+ color=(Spectral-J);
+ color=(Spectral-M);
+ },
+ cycle list/.define={Spectral-5}{[of colormap=Spectral-5]},
+ },
+ /pgfplots/cycle list/Spectral-5/.style={/pgfplots/@@brewer set cycle list={Spectral-5}},
+ %
+ /pgfplots/colormap/Spectral-6/.style={
+ colormap={Spectral-6}{
+ color=(Spectral-B);
+ color=(Spectral-E);
+ color=(Spectral-G);
+ color=(Spectral-I);
+ color=(Spectral-K);
+ color=(Spectral-N);
+ },
+ cycle list/.define={Spectral-6}{[of colormap=Spectral-6]},
+ },
+ /pgfplots/cycle list/Spectral-6/.style={/pgfplots/@@brewer set cycle list={Spectral-6}},
+ %
+ /pgfplots/colormap/Spectral-7/.style={
+ colormap={Spectral-7}{
+ color=(Spectral-B);
+ color=(Spectral-E);
+ color=(Spectral-G);
+ color=(Spectral-H);
+ color=(Spectral-I);
+ color=(Spectral-K);
+ color=(Spectral-N);
+ },
+ cycle list/.define={Spectral-7}{[of colormap=Spectral-7]},
+ },
+ /pgfplots/cycle list/Spectral-7/.style={/pgfplots/@@brewer set cycle list={Spectral-7}},
+ %
+ /pgfplots/colormap/Spectral-8/.style={
+ colormap={Spectral-8}{
+ color=(Spectral-B);
+ color=(Spectral-D);
+ color=(Spectral-F);
+ color=(Spectral-G);
+ color=(Spectral-I);
+ color=(Spectral-J);
+ color=(Spectral-L);
+ color=(Spectral-N);
+ },
+ cycle list/.define={Spectral-8}{[of colormap=Spectral-8]},
+ },
+ /pgfplots/cycle list/Spectral-8/.style={/pgfplots/@@brewer set cycle list={Spectral-8}},
+ %
+ /pgfplots/colormap/Spectral-9/.style={
+ colormap={Spectral-9}{
+ color=(Spectral-B);
+ color=(Spectral-D);
+ color=(Spectral-F);
+ color=(Spectral-G);
+ color=(Spectral-H);
+ color=(Spectral-I);
+ color=(Spectral-J);
+ color=(Spectral-L);
+ color=(Spectral-N);
+ },
+ cycle list/.define={Spectral-9}{[of colormap=Spectral-9]},
+ },
+ /pgfplots/cycle list/Spectral-9/.style={/pgfplots/@@brewer set cycle list={Spectral-9}},
+ %
+ /pgfplots/colormap/Spectral-10/.style={
+ colormap={Spectral-10}{
+ color=(Spectral-A);
+ color=(Spectral-B);
+ color=(Spectral-D);
+ color=(Spectral-F);
+ color=(Spectral-G);
+ color=(Spectral-I);
+ color=(Spectral-J);
+ color=(Spectral-L);
+ color=(Spectral-N);
+ color=(Spectral-O);
+ },
+ cycle list/.define={Spectral-10}{[of colormap=Spectral-10]},
+ },
+ /pgfplots/cycle list/Spectral-10/.style={/pgfplots/@@brewer set cycle list={Spectral-10}},
+ %
+ /pgfplots/colormap/Spectral-11/.style={
+ colormap={Spectral-11}{
+ color=(Spectral-A);
+ color=(Spectral-B);
+ color=(Spectral-D);
+ color=(Spectral-F);
+ color=(Spectral-G);
+ color=(Spectral-H);
+ color=(Spectral-I);
+ color=(Spectral-J);
+ color=(Spectral-L);
+ color=(Spectral-N);
+ color=(Spectral-O);
+ },
+ cycle list/.define={Spectral-11}{[of colormap=Spectral-11]},
+ },
+ /pgfplots/cycle list/Spectral-11/.style={/pgfplots/@@brewer set cycle list={Spectral-11}},
+ %
+ /pgfplots/colormap/RdYlGn-3/.style={
+ colormap={RdYlGn-3}{
+ color=(RdYlGn-E);
+ color=(RdYlGn-H);
+ color=(RdYlGn-K);
+ },
+ cycle list/.define={RdYlGn-3}{[of colormap=RdYlGn-3]},
+ },
+ /pgfplots/cycle list/RdYlGn-3/.style={/pgfplots/@@brewer set cycle list={RdYlGn-3}},
+ %
+ /pgfplots/colormap/RdYlGn-4/.style={
+ colormap={RdYlGn-4}{
+ color=(RdYlGn-C);
+ color=(RdYlGn-F);
+ color=(RdYlGn-J);
+ color=(RdYlGn-M);
+ },
+ cycle list/.define={RdYlGn-4}{[of colormap=RdYlGn-4]},
+ },
+ /pgfplots/cycle list/RdYlGn-4/.style={/pgfplots/@@brewer set cycle list={RdYlGn-4}},
+ %
+ /pgfplots/colormap/RdYlGn-5/.style={
+ colormap={RdYlGn-5}{
+ color=(RdYlGn-C);
+ color=(RdYlGn-F);
+ color=(RdYlGn-H);
+ color=(RdYlGn-J);
+ color=(RdYlGn-M);
+ },
+ cycle list/.define={RdYlGn-5}{[of colormap=RdYlGn-5]},
+ },
+ /pgfplots/cycle list/RdYlGn-5/.style={/pgfplots/@@brewer set cycle list={RdYlGn-5}},
+ %
+ /pgfplots/colormap/RdYlGn-6/.style={
+ colormap={RdYlGn-6}{
+ color=(RdYlGn-B);
+ color=(RdYlGn-E);
+ color=(RdYlGn-G);
+ color=(RdYlGn-I);
+ color=(RdYlGn-K);
+ color=(RdYlGn-N);
+ },
+ cycle list/.define={RdYlGn-6}{[of colormap=RdYlGn-6]},
+ },
+ /pgfplots/cycle list/RdYlGn-6/.style={/pgfplots/@@brewer set cycle list={RdYlGn-6}},
+ %
+ /pgfplots/colormap/RdYlGn-7/.style={
+ colormap={RdYlGn-7}{
+ color=(RdYlGn-B);
+ color=(RdYlGn-E);
+ color=(RdYlGn-G);
+ color=(RdYlGn-H);
+ color=(RdYlGn-I);
+ color=(RdYlGn-K);
+ color=(RdYlGn-N);
+ },
+ cycle list/.define={RdYlGn-7}{[of colormap=RdYlGn-7]},
+ },
+ /pgfplots/cycle list/RdYlGn-7/.style={/pgfplots/@@brewer set cycle list={RdYlGn-7}},
+ %
+ /pgfplots/colormap/RdYlGn-8/.style={
+ colormap={RdYlGn-8}{
+ color=(RdYlGn-B);
+ color=(RdYlGn-D);
+ color=(RdYlGn-F);
+ color=(RdYlGn-G);
+ color=(RdYlGn-I);
+ color=(RdYlGn-J);
+ color=(RdYlGn-L);
+ color=(RdYlGn-N);
+ },
+ cycle list/.define={RdYlGn-8}{[of colormap=RdYlGn-8]},
+ },
+ /pgfplots/cycle list/RdYlGn-8/.style={/pgfplots/@@brewer set cycle list={RdYlGn-8}},
+ %
+ /pgfplots/colormap/RdYlGn-9/.style={
+ colormap={RdYlGn-9}{
+ color=(RdYlGn-B);
+ color=(RdYlGn-D);
+ color=(RdYlGn-F);
+ color=(RdYlGn-G);
+ color=(RdYlGn-H);
+ color=(RdYlGn-I);
+ color=(RdYlGn-J);
+ color=(RdYlGn-L);
+ color=(RdYlGn-N);
+ },
+ cycle list/.define={RdYlGn-9}{[of colormap=RdYlGn-9]},
+ },
+ /pgfplots/cycle list/RdYlGn-9/.style={/pgfplots/@@brewer set cycle list={RdYlGn-9}},
+ %
+ /pgfplots/colormap/RdYlGn-10/.style={
+ colormap={RdYlGn-10}{
+ color=(RdYlGn-A);
+ color=(RdYlGn-B);
+ color=(RdYlGn-D);
+ color=(RdYlGn-F);
+ color=(RdYlGn-G);
+ color=(RdYlGn-I);
+ color=(RdYlGn-J);
+ color=(RdYlGn-L);
+ color=(RdYlGn-N);
+ color=(RdYlGn-O);
+ },
+ cycle list/.define={RdYlGn-10}{[of colormap=RdYlGn-10]},
+ },
+ /pgfplots/cycle list/RdYlGn-10/.style={/pgfplots/@@brewer set cycle list={RdYlGn-10}},
+ %
+ /pgfplots/colormap/RdYlGn-11/.style={
+ colormap={RdYlGn-11}{
+ color=(RdYlGn-A);
+ color=(RdYlGn-B);
+ color=(RdYlGn-D);
+ color=(RdYlGn-F);
+ color=(RdYlGn-G);
+ color=(RdYlGn-H);
+ color=(RdYlGn-I);
+ color=(RdYlGn-J);
+ color=(RdYlGn-L);
+ color=(RdYlGn-N);
+ color=(RdYlGn-O);
+ },
+ cycle list/.define={RdYlGn-11}{[of colormap=RdYlGn-11]},
+ },
+ /pgfplots/cycle list/RdYlGn-11/.style={/pgfplots/@@brewer set cycle list={RdYlGn-11}},
+ %
+ % ===========================================================================
+ /pgfplots/colormap/Set3-3/.style={
+ colormap={Set3-3}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ },
+ cycle list/.define={Set3-3}{[of colormap=Set3-3]},
+ },
+ /pgfplots/cycle list/Set3-3/.style={/pgfplots/@@brewer set cycle list={Set3-3}},
+ %
+ /pgfplots/colormap/Set3-4/.style={
+ colormap={Set3-4}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ },
+ cycle list/.define={Set3-4}{[of colormap=Set3-4]},
+ },
+ /pgfplots/cycle list/Set3-4/.style={/pgfplots/@@brewer set cycle list={Set3-4}},
+ %
+ /pgfplots/colormap/Set3-5/.style={
+ colormap={Set3-5}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ },
+ cycle list/.define={Set3-5}{[of colormap=Set3-5]},
+ },
+ /pgfplots/cycle list/Set3-5/.style={/pgfplots/@@brewer set cycle list={Set3-5}},
+ %
+ /pgfplots/colormap/Set3-6/.style={
+ colormap={Set3-6}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ },
+ cycle list/.define={Set3-6}{[of colormap=Set3-6]},
+ },
+ /pgfplots/cycle list/Set3-6/.style={/pgfplots/@@brewer set cycle list={Set3-6}},
+ %
+ /pgfplots/colormap/Set3-7/.style={
+ colormap={Set3-7}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ color=(Set3-G);
+ },
+ cycle list/.define={Set3-7}{[of colormap=Set3-7]},
+ },
+ /pgfplots/cycle list/Set3-7/.style={/pgfplots/@@brewer set cycle list={Set3-7}},
+ %
+ /pgfplots/colormap/Set3-8/.style={
+ colormap={Set3-8}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ color=(Set3-G);
+ color=(Set3-H);
+ },
+ cycle list/.define={Set3-8}{[of colormap=Set3-8]},
+ },
+ /pgfplots/cycle list/Set3-8/.style={/pgfplots/@@brewer set cycle list={Set3-8}},
+ %
+ /pgfplots/colormap/Set3-9/.style={
+ colormap={Set3-9}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ color=(Set3-G);
+ color=(Set3-H);
+ color=(Set3-I);
+ },
+ cycle list/.define={Set3-9}{[of colormap=Set3-9]},
+ },
+ /pgfplots/cycle list/Set3-9/.style={/pgfplots/@@brewer set cycle list={Set3-9}},
+ %
+ /pgfplots/colormap/Set3-10/.style={
+ colormap={Set3-10}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ color=(Set3-G);
+ color=(Set3-H);
+ color=(Set3-I);
+ color=(Set3-J);
+ },
+ cycle list/.define={Set3-10}{[of colormap=Set3-10]},
+ },
+ /pgfplots/cycle list/Set3-10/.style={/pgfplots/@@brewer set cycle list={Set3-10}},
+ %
+ /pgfplots/colormap/Set3-11/.style={
+ colormap={Set3-11}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ color=(Set3-G);
+ color=(Set3-H);
+ color=(Set3-I);
+ color=(Set3-J);
+ color=(Set3-K);
+ },
+ cycle list/.define={Set3-11}{[of colormap=Set3-11]},
+ },
+ /pgfplots/cycle list/Set3-11/.style={/pgfplots/@@brewer set cycle list={Set3-11}},
+ %
+ /pgfplots/colormap/Set3-12/.style={
+ colormap={Set3-12}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ color=(Set3-G);
+ color=(Set3-H);
+ color=(Set3-I);
+ color=(Set3-J);
+ color=(Set3-K);
+ color=(Set3-L);
+ },
+ cycle list/.define={Set3-12}{[of colormap=Set3-12]},
+ },
+ /pgfplots/cycle list/Set3-12/.style={/pgfplots/@@brewer set cycle list={Set3-12}},
+ %
+ /pgfplots/colormap/Pastel1-3/.style={
+ colormap={Pastel1-3}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ },
+ cycle list/.define={Pastel1-3}{[of colormap=Pastel1-3]},
+ },
+ /pgfplots/cycle list/Pastel1-3/.style={/pgfplots/@@brewer set cycle list={Pastel1-3}},
+ %
+ /pgfplots/colormap/Pastel1-4/.style={
+ colormap={Pastel1-4}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ color=(Pastel1-D);
+ },
+ cycle list/.define={Pastel1-4}{[of colormap=Pastel1-4]},
+ },
+ /pgfplots/cycle list/Pastel1-4/.style={/pgfplots/@@brewer set cycle list={Pastel1-4}},
+ %
+ /pgfplots/colormap/Pastel1-5/.style={
+ colormap={Pastel1-5}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ color=(Pastel1-D);
+ color=(Pastel1-E);
+ },
+ cycle list/.define={Pastel1-5}{[of colormap=Pastel1-5]},
+ },
+ /pgfplots/cycle list/Pastel1-5/.style={/pgfplots/@@brewer set cycle list={Pastel1-5}},
+ %
+ /pgfplots/colormap/Pastel1-6/.style={
+ colormap={Pastel1-6}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ color=(Pastel1-D);
+ color=(Pastel1-E);
+ color=(Pastel1-F);
+ },
+ cycle list/.define={Pastel1-6}{[of colormap=Pastel1-6]},
+ },
+ /pgfplots/cycle list/Pastel1-6/.style={/pgfplots/@@brewer set cycle list={Pastel1-6}},
+ %
+ /pgfplots/colormap/Pastel1-7/.style={
+ colormap={Pastel1-7}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ color=(Pastel1-D);
+ color=(Pastel1-E);
+ color=(Pastel1-F);
+ color=(Pastel1-G);
+ },
+ cycle list/.define={Pastel1-7}{[of colormap=Pastel1-7]},
+ },
+ /pgfplots/cycle list/Pastel1-7/.style={/pgfplots/@@brewer set cycle list={Pastel1-7}},
+ %
+ /pgfplots/colormap/Pastel1-8/.style={
+ colormap={Pastel1-8}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ color=(Pastel1-D);
+ color=(Pastel1-E);
+ color=(Pastel1-F);
+ color=(Pastel1-G);
+ color=(Pastel1-H);
+ },
+ cycle list/.define={Pastel1-8}{[of colormap=Pastel1-8]},
+ },
+ /pgfplots/cycle list/Pastel1-8/.style={/pgfplots/@@brewer set cycle list={Pastel1-8}},
+ %
+ /pgfplots/colormap/Pastel1-9/.style={
+ colormap={Pastel1-9}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ color=(Pastel1-D);
+ color=(Pastel1-E);
+ color=(Pastel1-F);
+ color=(Pastel1-G);
+ color=(Pastel1-H);
+ color=(Pastel1-I);
+ },
+ cycle list/.define={Pastel1-9}{[of colormap=Pastel1-9]},
+ },
+ /pgfplots/cycle list/Pastel1-9/.style={/pgfplots/@@brewer set cycle list={Pastel1-9}},
+ %
+ /pgfplots/colormap/Set1-3/.style={
+ colormap={Set1-3}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ },
+ cycle list/.define={Set1-3}{[of colormap=Set1-3]},
+ },
+ /pgfplots/cycle list/Set1-3/.style={/pgfplots/@@brewer set cycle list={Set1-3}},
+ %
+ /pgfplots/colormap/Set1-4/.style={
+ colormap={Set1-4}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ color=(Set1-D);
+ },
+ cycle list/.define={Set1-4}{[of colormap=Set1-4]},
+ },
+ /pgfplots/cycle list/Set1-4/.style={/pgfplots/@@brewer set cycle list={Set1-4}},
+ %
+ /pgfplots/colormap/Set1-5/.style={
+ colormap={Set1-5}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ color=(Set1-D);
+ color=(Set1-E);
+ },
+ cycle list/.define={Set1-5}{[of colormap=Set1-5]},
+ },
+ /pgfplots/cycle list/Set1-5/.style={/pgfplots/@@brewer set cycle list={Set1-5}},
+ %
+ /pgfplots/colormap/Set1-6/.style={
+ colormap={Set1-6}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ color=(Set1-D);
+ color=(Set1-E);
+ color=(Set1-F);
+ },
+ cycle list/.define={Set1-6}{[of colormap=Set1-6]},
+ },
+ /pgfplots/cycle list/Set1-6/.style={/pgfplots/@@brewer set cycle list={Set1-6}},
+ %
+ /pgfplots/colormap/Set1-7/.style={
+ colormap={Set1-7}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ color=(Set1-D);
+ color=(Set1-E);
+ color=(Set1-F);
+ color=(Set1-G);
+ },
+ cycle list/.define={Set1-7}{[of colormap=Set1-7]},
+ },
+ /pgfplots/cycle list/Set1-7/.style={/pgfplots/@@brewer set cycle list={Set1-7}},
+ %
+ /pgfplots/colormap/Set1-8/.style={
+ colormap={Set1-8}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ color=(Set1-D);
+ color=(Set1-E);
+ color=(Set1-F);
+ color=(Set1-G);
+ color=(Set1-H);
+ },
+ cycle list/.define={Set1-8}{[of colormap=Set1-8]},
+ },
+ /pgfplots/cycle list/Set1-8/.style={/pgfplots/@@brewer set cycle list={Set1-8}},
+ %
+ /pgfplots/colormap/Set1-9/.style={
+ colormap={Set1-9}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ color=(Set1-D);
+ color=(Set1-E);
+ color=(Set1-F);
+ color=(Set1-G);
+ color=(Set1-H);
+ color=(Set1-I);
+ },
+ cycle list/.define={Set1-9}{[of colormap=Set1-9]},
+ },
+ /pgfplots/cycle list/Set1-9/.style={/pgfplots/@@brewer set cycle list={Set1-9}},
+ %
+ /pgfplots/colormap/Pastel2-3/.style={
+ colormap={Pastel2-3}{
+ color=(Pastel2-A);
+ color=(Pastel2-B);
+ color=(Pastel2-C);
+ },
+ cycle list/.define={Pastel2-3}{[of colormap=Pastel2-3]},
+ },
+ /pgfplots/cycle list/Pastel2-3/.style={/pgfplots/@@brewer set cycle list={Pastel2-3}},
+ %
+ /pgfplots/colormap/Pastel2-4/.style={
+ colormap={Pastel2-4}{
+ color=(Pastel2-A);
+ color=(Pastel2-B);
+ color=(Pastel2-C);
+ color=(Pastel2-D);
+ },
+ cycle list/.define={Pastel2-4}{[of colormap=Pastel2-4]},
+ },
+ /pgfplots/cycle list/Pastel2-4/.style={/pgfplots/@@brewer set cycle list={Pastel2-4}},
+ %
+ /pgfplots/colormap/Pastel2-5/.style={
+ colormap={Pastel2-5}{
+ color=(Pastel2-A);
+ color=(Pastel2-B);
+ color=(Pastel2-C);
+ color=(Pastel2-D);
+ color=(Pastel2-E);
+ },
+ cycle list/.define={Pastel2-5}{[of colormap=Pastel2-5]},
+ },
+ /pgfplots/cycle list/Pastel2-5/.style={/pgfplots/@@brewer set cycle list={Pastel2-5}},
+ %
+ /pgfplots/colormap/Pastel2-6/.style={
+ colormap={Pastel2-6}{
+ color=(Pastel2-A);
+ color=(Pastel2-B);
+ color=(Pastel2-C);
+ color=(Pastel2-D);
+ color=(Pastel2-E);
+ color=(Pastel2-F);
+ },
+ cycle list/.define={Pastel2-6}{[of colormap=Pastel2-6]},
+ },
+ /pgfplots/cycle list/Pastel2-6/.style={/pgfplots/@@brewer set cycle list={Pastel2-6}},
+ %
+ /pgfplots/colormap/Pastel2-7/.style={
+ colormap={Pastel2-7}{
+ color=(Pastel2-A);
+ color=(Pastel2-B);
+ color=(Pastel2-C);
+ color=(Pastel2-D);
+ color=(Pastel2-E);
+ color=(Pastel2-F);
+ color=(Pastel2-G);
+ },
+ cycle list/.define={Pastel2-7}{[of colormap=Pastel2-7]},
+ },
+ /pgfplots/cycle list/Pastel2-7/.style={/pgfplots/@@brewer set cycle list={Pastel2-7}},
+ %
+ /pgfplots/colormap/Pastel2-8/.style={
+ colormap={Pastel2-8}{
+ color=(Pastel2-A);
+ color=(Pastel2-B);
+ color=(Pastel2-C);
+ color=(Pastel2-D);
+ color=(Pastel2-E);
+ color=(Pastel2-F);
+ color=(Pastel2-G);
+ color=(Pastel2-H);
+ },
+ cycle list/.define={Pastel2-8}{[of colormap=Pastel2-8]},
+ },
+ /pgfplots/cycle list/Pastel2-8/.style={/pgfplots/@@brewer set cycle list={Pastel2-8}},
+ %
+ /pgfplots/colormap/Set2-3/.style={
+ colormap={Set2-3}{
+ color=(Set2-A);
+ color=(Set2-B);
+ color=(Set2-C);
+ },
+ cycle list/.define={Set2-3}{[of colormap=Set2-3]},
+ },
+ /pgfplots/cycle list/Set2-3/.style={/pgfplots/@@brewer set cycle list={Set2-3}},
+ %
+ /pgfplots/colormap/Set2-4/.style={
+ colormap={Set2-4}{
+ color=(Set2-A);
+ color=(Set2-B);
+ color=(Set2-C);
+ color=(Set2-D);
+ },
+ cycle list/.define={Set2-4}{[of colormap=Set2-4]},
+ },
+ /pgfplots/cycle list/Set2-4/.style={/pgfplots/@@brewer set cycle list={Set2-4}},
+ %
+ /pgfplots/colormap/Set2-5/.style={
+ colormap={Set2-5}{
+ color=(Set2-A);
+ color=(Set2-B);
+ color=(Set2-C);
+ color=(Set2-D);
+ color=(Set2-E);
+ },
+ cycle list/.define={Set2-5}{[of colormap=Set2-5]},
+ },
+ /pgfplots/cycle list/Set2-5/.style={/pgfplots/@@brewer set cycle list={Set2-5}},
+ %
+ /pgfplots/colormap/Set2-6/.style={
+ colormap={Set2-6}{
+ color=(Set2-A);
+ color=(Set2-B);
+ color=(Set2-C);
+ color=(Set2-D);
+ color=(Set2-E);
+ color=(Set2-F);
+ },
+ cycle list/.define={Set2-6}{[of colormap=Set2-6]},
+ },
+ /pgfplots/cycle list/Set2-6/.style={/pgfplots/@@brewer set cycle list={Set2-6}},
+ %
+ /pgfplots/colormap/Set2-7/.style={
+ colormap={Set2-7}{
+ color=(Set2-A);
+ color=(Set2-B);
+ color=(Set2-C);
+ color=(Set2-D);
+ color=(Set2-E);
+ color=(Set2-F);
+ color=(Set2-G);
+ },
+ cycle list/.define={Set2-7}{[of colormap=Set2-7]},
+ },
+ /pgfplots/cycle list/Set2-7/.style={/pgfplots/@@brewer set cycle list={Set2-7}},
+ %
+ /pgfplots/colormap/Set2-8/.style={
+ colormap={Set2-8}{
+ color=(Set2-A);
+ color=(Set2-B);
+ color=(Set2-C);
+ color=(Set2-D);
+ color=(Set2-E);
+ color=(Set2-F);
+ color=(Set2-G);
+ color=(Set2-H);
+ },
+ cycle list/.define={Set2-8}{[of colormap=Set2-8]},
+ },
+ /pgfplots/cycle list/Set2-8/.style={/pgfplots/@@brewer set cycle list={Set2-8}},
+ %
+ /pgfplots/colormap/Dark2-3/.style={
+ colormap={Dark2-3}{
+ color=(Dark2-A);
+ color=(Dark2-B);
+ color=(Dark2-C);
+ },
+ cycle list/.define={Dark2-3}{[of colormap=Dark2-3]},
+ },
+ /pgfplots/cycle list/Dark2-3/.style={/pgfplots/@@brewer set cycle list={Dark2-3}},
+ %
+ /pgfplots/colormap/Dark2-4/.style={
+ colormap={Dark2-4}{
+ color=(Dark2-A);
+ color=(Dark2-B);
+ color=(Dark2-C);
+ color=(Dark2-D);
+ },
+ cycle list/.define={Dark2-4}{[of colormap=Dark2-4]},
+ },
+ /pgfplots/cycle list/Dark2-4/.style={/pgfplots/@@brewer set cycle list={Dark2-4}},
+ %
+ /pgfplots/colormap/Dark2-5/.style={
+ colormap={Dark2-5}{
+ color=(Dark2-A);
+ color=(Dark2-B);
+ color=(Dark2-C);
+ color=(Dark2-D);
+ color=(Dark2-E);
+ },
+ cycle list/.define={Dark2-5}{[of colormap=Dark2-5]},
+ },
+ /pgfplots/cycle list/Dark2-5/.style={/pgfplots/@@brewer set cycle list={Dark2-5}},
+ %
+ /pgfplots/colormap/Dark2-6/.style={
+ colormap={Dark2-6}{
+ color=(Dark2-A);
+ color=(Dark2-B);
+ color=(Dark2-C);
+ color=(Dark2-D);
+ color=(Dark2-E);
+ color=(Dark2-F);
+ },
+ cycle list/.define={Dark2-6}{[of colormap=Dark2-6]},
+ },
+ /pgfplots/cycle list/Dark2-6/.style={/pgfplots/@@brewer set cycle list={Dark2-6}},
+ %
+ /pgfplots/colormap/Dark2-7/.style={
+ colormap={Dark2-7}{
+ color=(Dark2-A);
+ color=(Dark2-B);
+ color=(Dark2-C);
+ color=(Dark2-D);
+ color=(Dark2-E);
+ color=(Dark2-F);
+ color=(Dark2-G);
+ },
+ cycle list/.define={Dark2-7}{[of colormap=Dark2-7]},
+ },
+ /pgfplots/cycle list/Dark2-7/.style={/pgfplots/@@brewer set cycle list={Dark2-7}},
+ %
+ /pgfplots/colormap/Dark2-8/.style={
+ colormap={Dark2-8}{
+ color=(Dark2-A);
+ color=(Dark2-B);
+ color=(Dark2-C);
+ color=(Dark2-D);
+ color=(Dark2-E);
+ color=(Dark2-F);
+ color=(Dark2-G);
+ color=(Dark2-H);
+ },
+ cycle list/.define={Dark2-8}{[of colormap=Dark2-8]},
+ },
+ /pgfplots/cycle list/Dark2-8/.style={/pgfplots/@@brewer set cycle list={Dark2-8}},
+ %
+ /pgfplots/colormap/Paired-3/.style={
+ colormap={Paired-3}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ },
+ cycle list/.define={Paired-3}{[of colormap=Paired-3]},
+ },
+ /pgfplots/cycle list/Paired-3/.style={/pgfplots/@@brewer set cycle list={Paired-3}},
+ %
+ /pgfplots/colormap/Paired-4/.style={
+ colormap={Paired-4}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ },
+ cycle list/.define={Paired-4}{[of colormap=Paired-4]},
+ },
+ /pgfplots/cycle list/Paired-4/.style={/pgfplots/@@brewer set cycle list={Paired-4}},
+ %
+ /pgfplots/colormap/Paired-5/.style={
+ colormap={Paired-5}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ },
+ cycle list/.define={Paired-5}{[of colormap=Paired-5]},
+ },
+ /pgfplots/cycle list/Paired-5/.style={/pgfplots/@@brewer set cycle list={Paired-5}},
+ %
+ /pgfplots/colormap/Paired-6/.style={
+ colormap={Paired-6}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ },
+ cycle list/.define={Paired-6}{[of colormap=Paired-6]},
+ },
+ /pgfplots/cycle list/Paired-6/.style={/pgfplots/@@brewer set cycle list={Paired-6}},
+ %
+ /pgfplots/colormap/Paired-7/.style={
+ colormap={Paired-7}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ color=(Paired-G);
+ },
+ cycle list/.define={Paired-7}{[of colormap=Paired-7]},
+ },
+ /pgfplots/cycle list/Paired-7/.style={/pgfplots/@@brewer set cycle list={Paired-7}},
+ %
+ /pgfplots/colormap/Paired-8/.style={
+ colormap={Paired-8}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ color=(Paired-G);
+ color=(Paired-H);
+ },
+ cycle list/.define={Paired-8}{[of colormap=Paired-8]},
+ },
+ /pgfplots/cycle list/Paired-8/.style={/pgfplots/@@brewer set cycle list={Paired-8}},
+ %
+ /pgfplots/colormap/Paired-9/.style={
+ colormap={Paired-9}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ color=(Paired-G);
+ color=(Paired-H);
+ color=(Paired-I);
+ },
+ cycle list/.define={Paired-9}{[of colormap=Paired-9]},
+ },
+ /pgfplots/cycle list/Paired-9/.style={/pgfplots/@@brewer set cycle list={Paired-9}},
+ %
+ /pgfplots/colormap/Paired-10/.style={
+ colormap={Paired-10}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ color=(Paired-G);
+ color=(Paired-H);
+ color=(Paired-I);
+ color=(Paired-J);
+ },
+ cycle list/.define={Paired-10}{[of colormap=Paired-10]},
+ },
+ /pgfplots/cycle list/Paired-10/.style={/pgfplots/@@brewer set cycle list={Paired-10}},
+ %
+ /pgfplots/colormap/Paired-11/.style={
+ colormap={Paired-11}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ color=(Paired-G);
+ color=(Paired-H);
+ color=(Paired-I);
+ color=(Paired-J);
+ color=(Paired-K);
+ },
+ cycle list/.define={Paired-11}{[of colormap=Paired-11]},
+ },
+ /pgfplots/cycle list/Paired-11/.style={/pgfplots/@@brewer set cycle list={Paired-11}},
+ %
+ /pgfplots/colormap/Paired-12/.style={
+ colormap={Paired-12}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ color=(Paired-G);
+ color=(Paired-H);
+ color=(Paired-I);
+ color=(Paired-J);
+ color=(Paired-K);
+ color=(Paired-L);
+ },
+ cycle list/.define={Paired-12}{[of colormap=Paired-12]},
+ },
+ /pgfplots/cycle list/Paired-12/.style={/pgfplots/@@brewer set cycle list={Paired-12}},
+ %
+ /pgfplots/colormap/Accent-3/.style={
+ colormap={Accent-3}{
+ color=(Accent-A);
+ color=(Accent-B);
+ color=(Accent-C);
+ },
+ cycle list/.define={Accent-3}{[of colormap=Accent-3]},
+ },
+ /pgfplots/cycle list/Accent-3/.style={/pgfplots/@@brewer set cycle list={Accent-3}},
+ %
+ /pgfplots/colormap/Accent-4/.style={
+ colormap={Accent-4}{
+ color=(Accent-A);
+ color=(Accent-B);
+ color=(Accent-C);
+ color=(Accent-D);
+ },
+ cycle list/.define={Accent-4}{[of colormap=Accent-4]},
+ },
+ /pgfplots/cycle list/Accent-4/.style={/pgfplots/@@brewer set cycle list={Accent-4}},
+ %
+ /pgfplots/colormap/Accent-5/.style={
+ colormap={Accent-5}{
+ color=(Accent-A);
+ color=(Accent-B);
+ color=(Accent-C);
+ color=(Accent-D);
+ color=(Accent-E);
+ },
+ cycle list/.define={Accent-5}{[of colormap=Accent-5]},
+ },
+ /pgfplots/cycle list/Accent-5/.style={/pgfplots/@@brewer set cycle list={Accent-5}},
+ %
+ /pgfplots/colormap/Accent-6/.style={
+ colormap={Accent-6}{
+ color=(Accent-A);
+ color=(Accent-B);
+ color=(Accent-C);
+ color=(Accent-D);
+ color=(Accent-E);
+ color=(Accent-F);
+ },
+ cycle list/.define={Accent-6}{[of colormap=Accent-6]},
+ },
+ /pgfplots/cycle list/Accent-6/.style={/pgfplots/@@brewer set cycle list={Accent-6}},
+ %
+ /pgfplots/colormap/Accent-7/.style={
+ colormap={Accent-7}{
+ color=(Accent-A);
+ color=(Accent-B);
+ color=(Accent-C);
+ color=(Accent-D);
+ color=(Accent-E);
+ color=(Accent-F);
+ color=(Accent-G);
+ },
+ cycle list/.define={Accent-7}{[of colormap=Accent-7]},
+ },
+ /pgfplots/cycle list/Accent-7/.style={/pgfplots/@@brewer set cycle list={Accent-7}},
+ %
+ /pgfplots/colormap/Accent-8/.style={
+ colormap={Accent-8}{
+ color=(Accent-A);
+ color=(Accent-B);
+ color=(Accent-C);
+ color=(Accent-D);
+ color=(Accent-E);
+ color=(Accent-F);
+ color=(Accent-G);
+ color=(Accent-H);
+ },
+ cycle list/.define={Accent-8}{[of colormap=Accent-8]},
+ },
+ /pgfplots/cycle list/Accent-8/.style={/pgfplots/@@brewer set cycle list={Accent-8}},
+ %
+}
+
+% define additional colormap styles for "continuous" colorbars
+% (then one doesn't have to guess the maximum number of classes)
+\pgfplotsset{
+ /pgfplots/colormap/YlGn/.style={
+ colormap={YlGn}{
+ color=(YlGn-A);
+ color=(YlGn-C);
+ color=(YlGn-D);
+ color=(YlGn-F);
+ color=(YlGn-G);
+ color=(YlGn-H);
+ color=(YlGn-J);
+ color=(YlGn-K);
+ color=(YlGn-M);
+ },
+ cycle list/.define={YlGn}{[of colormap=YlGn]},
+ },
+ /pgfplots/cycle list/YlGn/.style={/pgfplots/@@brewer set cycle list={YlGn}},
+ %
+ /pgfplots/colormap/YlGnBu/.style={
+ colormap={YlGnBu}{
+ color=(YlGnBu-A);
+ color=(YlGnBu-C);
+ color=(YlGnBu-D);
+ color=(YlGnBu-F);
+ color=(YlGnBu-G);
+ color=(YlGnBu-H);
+ color=(YlGnBu-J);
+ color=(YlGnBu-K);
+ color=(YlGnBu-M);
+ },
+ cycle list/.define={YlGnBu}{[of colormap=YlGnBu]},
+ },
+ /pgfplots/cycle list/YlGnBu/.style={/pgfplots/@@brewer set cycle list={YlGnBu}},
+ %
+ /pgfplots/colormap/GnBu/.style={
+ colormap={GnBu}{
+ color=(GnBu-A);
+ color=(GnBu-C);
+ color=(GnBu-D);
+ color=(GnBu-F);
+ color=(GnBu-G);
+ color=(GnBu-H);
+ color=(GnBu-J);
+ color=(GnBu-K);
+ color=(GnBu-M);
+ },
+ cycle list/.define={GnBu}{[of colormap=GnBu]},
+ },
+ /pgfplots/cycle list/GnBu/.style={/pgfplots/@@brewer set cycle list={GnBu}},
+ %
+ /pgfplots/colormap/BuGn/.style={
+ colormap={BuGn}{
+ color=(BuGn-A);
+ color=(BuGn-C);
+ color=(BuGn-D);
+ color=(BuGn-F);
+ color=(BuGn-G);
+ color=(BuGn-H);
+ color=(BuGn-J);
+ color=(BuGn-K);
+ color=(BuGn-M);
+ },
+ cycle list/.define={BuGn}{[of colormap=BuGn]},
+ },
+ /pgfplots/cycle list/BuGn/.style={/pgfplots/@@brewer set cycle list={BuGn}},
+ %
+ /pgfplots/colormap/PuBuGn/.style={
+ colormap={PuBuGn}{
+ color=(PuBuGn-A);
+ color=(PuBuGn-C);
+ color=(PuBuGn-D);
+ color=(PuBuGn-F);
+ color=(PuBuGn-G);
+ color=(PuBuGn-H);
+ color=(PuBuGn-J);
+ color=(PuBuGn-K);
+ color=(PuBuGn-M);
+ },
+ cycle list/.define={PuBuGn}{[of colormap=PuBuGn]},
+ },
+ /pgfplots/cycle list/PuBuGn/.style={/pgfplots/@@brewer set cycle list={PuBuGn}},
+ %
+ /pgfplots/colormap/PuBu/.style={
+ colormap={PuBu}{
+ color=(PuBu-A);
+ color=(PuBu-C);
+ color=(PuBu-D);
+ color=(PuBu-F);
+ color=(PuBu-G);
+ color=(PuBu-H);
+ color=(PuBu-J);
+ color=(PuBu-K);
+ color=(PuBu-M);
+ },
+ cycle list/.define={PuBu}{[of colormap=PuBu]},
+ },
+ /pgfplots/cycle list/PuBu/.style={/pgfplots/@@brewer set cycle list={PuBu}},
+ %
+ /pgfplots/colormap/BuPu/.style={
+ colormap={BuPu}{
+ color=(BuPu-A);
+ color=(BuPu-C);
+ color=(BuPu-D);
+ color=(BuPu-F);
+ color=(BuPu-G);
+ color=(BuPu-H);
+ color=(BuPu-J);
+ color=(BuPu-K);
+ color=(BuPu-M);
+ },
+ cycle list/.define={BuPu}{[of colormap=BuPu]},
+ },
+ /pgfplots/cycle list/BuPu/.style={/pgfplots/@@brewer set cycle list={BuPu}},
+ %
+ /pgfplots/colormap/RdPu/.style={
+ colormap={RdPu}{
+ color=(RdPu-A);
+ color=(RdPu-C);
+ color=(RdPu-D);
+ color=(RdPu-F);
+ color=(RdPu-G);
+ color=(RdPu-H);
+ color=(RdPu-J);
+ color=(RdPu-K);
+ color=(RdPu-M);
+ },
+ cycle list/.define={RdPu}{[of colormap=RdPu]},
+ },
+ /pgfplots/cycle list/RdPu/.style={/pgfplots/@@brewer set cycle list={RdPu}},
+ %
+ /pgfplots/colormap/PuRd/.style={
+ colormap={PuRd}{
+ color=(PuRd-A);
+ color=(PuRd-C);
+ color=(PuRd-D);
+ color=(PuRd-F);
+ color=(PuRd-G);
+ color=(PuRd-H);
+ color=(PuRd-J);
+ color=(PuRd-K);
+ color=(PuRd-M);
+ },
+ cycle list/.define={PuRd}{[of colormap=PuRd]},
+ },
+ /pgfplots/cycle list/PuRd/.style={/pgfplots/@@brewer set cycle list={PuRd}},
+ %
+ /pgfplots/colormap/OrRd/.style={
+ colormap={OrRd}{
+ color=(OrRd-A);
+ color=(OrRd-C);
+ color=(OrRd-D);
+ color=(OrRd-F);
+ color=(OrRd-G);
+ color=(OrRd-H);
+ color=(OrRd-J);
+ color=(OrRd-K);
+ color=(OrRd-M);
+ },
+ cycle list/.define={OrRd}{[of colormap=OrRd]},
+ },
+ /pgfplots/cycle list/OrRd/.style={/pgfplots/@@brewer set cycle list={OrRd}},
+ %
+ /pgfplots/colormap/YlOrRd/.style={
+ colormap={YlOrRd}{
+ color=(YlOrRd-A);
+ color=(YlOrRd-C);
+ color=(YlOrRd-D);
+ color=(YlOrRd-F);
+ color=(YlOrRd-G);
+ color=(YlOrRd-H);
+ color=(YlOrRd-J);
+ color=(YlOrRd-K);
+ color=(YlOrRd-M);
+ },
+ cycle list/.define={YlOrRd}{[of colormap=YlOrRd]},
+ },
+ /pgfplots/cycle list/YlOrRd/.style={/pgfplots/@@brewer set cycle list={YlOrRd}},
+ %
+ /pgfplots/colormap/YlOrBr/.style={
+ colormap={YlOrBr}{
+ color=(YlOrBr-A);
+ color=(YlOrBr-C);
+ color=(YlOrBr-D);
+ color=(YlOrBr-F);
+ color=(YlOrBr-G);
+ color=(YlOrBr-H);
+ color=(YlOrBr-J);
+ color=(YlOrBr-K);
+ color=(YlOrBr-M);
+ },
+ cycle list/.define={YlOrBr}{[of colormap=YlOrBr]},
+ },
+ /pgfplots/cycle list/YlOrBr/.style={/pgfplots/@@brewer set cycle list={YlOrBr}},
+ %
+ /pgfplots/colormap/Purples/.style={
+ colormap={Purples}{
+ color=(Purples-A);
+ color=(Purples-C);
+ color=(Purples-D);
+ color=(Purples-F);
+ color=(Purples-G);
+ color=(Purples-H);
+ color=(Purples-J);
+ color=(Purples-K);
+ color=(Purples-M);
+ },
+ cycle list/.define={Purples}{[of colormap=Purples]},
+ },
+ /pgfplots/cycle list/Purples/.style={/pgfplots/@@brewer set cycle list={Purples}},
+ %
+ /pgfplots/colormap/Blues/.style={
+ colormap={Blues}{
+ color=(Blues-A);
+ color=(Blues-C);
+ color=(Blues-D);
+ color=(Blues-F);
+ color=(Blues-G);
+ color=(Blues-H);
+ color=(Blues-J);
+ color=(Blues-K);
+ color=(Blues-M);
+ },
+ cycle list/.define={Blues}{[of colormap=Blues]},
+ },
+ /pgfplots/cycle list/Blues/.style={/pgfplots/@@brewer set cycle list={Blues}},
+ %
+ /pgfplots/colormap/Greens/.style={
+ colormap={Greens}{
+ color=(Greens-A);
+ color=(Greens-C);
+ color=(Greens-D);
+ color=(Greens-F);
+ color=(Greens-G);
+ color=(Greens-H);
+ color=(Greens-J);
+ color=(Greens-K);
+ color=(Greens-M);
+ },
+ cycle list/.define={Greens}{[of colormap=Greens]},
+ },
+ /pgfplots/cycle list/Greens/.style={/pgfplots/@@brewer set cycle list={Greens}},
+ %
+ /pgfplots/colormap/Oranges/.style={
+ colormap={Oranges}{
+ color=(Oranges-A);
+ color=(Oranges-C);
+ color=(Oranges-D);
+ color=(Oranges-F);
+ color=(Oranges-G);
+ color=(Oranges-H);
+ color=(Oranges-J);
+ color=(Oranges-K);
+ color=(Oranges-M);
+ },
+ cycle list/.define={Oranges}{[of colormap=Oranges]},
+ },
+ /pgfplots/cycle list/Oranges/.style={/pgfplots/@@brewer set cycle list={Oranges}},
+ %
+ /pgfplots/colormap/Reds/.style={
+ colormap={Reds}{
+ color=(Reds-A);
+ color=(Reds-C);
+ color=(Reds-D);
+ color=(Reds-F);
+ color=(Reds-G);
+ color=(Reds-H);
+ color=(Reds-J);
+ color=(Reds-K);
+ color=(Reds-M);
+ },
+ cycle list/.define={Reds}{[of colormap=Reds]},
+ },
+ /pgfplots/cycle list/Reds/.style={/pgfplots/@@brewer set cycle list={Reds}},
+ %
+ /pgfplots/colormap/Greys/.style={
+ colormap={Greys}{
+ color=(Greys-A);
+ color=(Greys-C);
+ color=(Greys-D);
+ color=(Greys-F);
+ color=(Greys-G);
+ color=(Greys-H);
+ color=(Greys-J);
+ color=(Greys-K);
+ color=(Greys-M);
+ },
+ cycle list/.define={Greys}{[of colormap=Greys]},
+ },
+ /pgfplots/cycle list/Greys/.style={/pgfplots/@@brewer set cycle list={Greys}},
+ %
+ % ===========================================================================
+ /pgfplots/colormap/PuOr/.style={
+ colormap={PuOr}{
+ color=(PuOr-A);
+ color=(PuOr-B);
+ color=(PuOr-D);
+ color=(PuOr-F);
+ color=(PuOr-G);
+ color=(PuOr-H);
+ color=(PuOr-I);
+ color=(PuOr-J);
+ color=(PuOr-L);
+ color=(PuOr-N);
+ color=(PuOr-O);
+ },
+ cycle list/.define={PuOr}{[of colormap=PuOr]},
+ },
+ /pgfplots/cycle list/PuOr/.style={/pgfplots/@@brewer set cycle list={PuOr}},
+ %
+ /pgfplots/colormap/BrBG/.style={
+ colormap={BrBG}{
+ color=(BrBG-A);
+ color=(BrBG-B);
+ color=(BrBG-D);
+ color=(BrBG-F);
+ color=(BrBG-G);
+ color=(BrBG-H);
+ color=(BrBG-I);
+ color=(BrBG-J);
+ color=(BrBG-L);
+ color=(BrBG-N);
+ color=(BrBG-O);
+ },
+ cycle list/.define={BrBG}{[of colormap=BrBG]},
+ },
+ /pgfplots/cycle list/BrBG/.style={/pgfplots/@@brewer set cycle list={BrBG}},
+ %
+ /pgfplots/colormap/PRGn/.style={
+ colormap={PRGn}{
+ color=(PRGn-A);
+ color=(PRGn-B);
+ color=(PRGn-D);
+ color=(PRGn-F);
+ color=(PRGn-G);
+ color=(PRGn-H);
+ color=(PRGn-I);
+ color=(PRGn-J);
+ color=(PRGn-L);
+ color=(PRGn-N);
+ color=(PRGn-O);
+ },
+ cycle list/.define={PRGn}{[of colormap=PRGn]},
+ },
+ /pgfplots/cycle list/PRGn/.style={/pgfplots/@@brewer set cycle list={PRGn}},
+ %
+ /pgfplots/colormap/PiYG/.style={
+ colormap={PiYG}{
+ color=(PiYG-A);
+ color=(PiYG-B);
+ color=(PiYG-D);
+ color=(PiYG-F);
+ color=(PiYG-G);
+ color=(PiYG-H);
+ color=(PiYG-I);
+ color=(PiYG-J);
+ color=(PiYG-L);
+ color=(PiYG-N);
+ color=(PiYG-O);
+ },
+ cycle list/.define={PiYG}{[of colormap=PiYG]},
+ },
+ /pgfplots/cycle list/PiYG/.style={/pgfplots/@@brewer set cycle list={PiYG}},
+ %
+ /pgfplots/colormap/RdBu/.style={
+ colormap={RdBu}{
+ color=(RdBu-A);
+ color=(RdBu-B);
+ color=(RdBu-D);
+ color=(RdBu-F);
+ color=(RdBu-G);
+ color=(RdBu-H);
+ color=(RdBu-I);
+ color=(RdBu-J);
+ color=(RdBu-L);
+ color=(RdBu-N);
+ color=(RdBu-O);
+ },
+ cycle list/.define={RdBu}{[of colormap=RdBu]},
+ },
+ /pgfplots/cycle list/RdBu/.style={/pgfplots/@@brewer set cycle list={RdBu}},
+ %
+ /pgfplots/colormap/RdGy/.style={
+ colormap={RdGy}{
+ color=(RdGy-A);
+ color=(RdGy-B);
+ color=(RdGy-D);
+ color=(RdGy-F);
+ color=(RdGy-G);
+ color=(RdGy-H);
+ color=(RdGy-I);
+ color=(RdGy-J);
+ color=(RdGy-L);
+ color=(RdGy-N);
+ color=(RdGy-O);
+ },
+ cycle list/.define={RdGy}{[of colormap=RdGy]},
+ },
+ /pgfplots/cycle list/RdGy/.style={/pgfplots/@@brewer set cycle list={RdGy}},
+ %
+ /pgfplots/colormap/RdYlBu/.style={
+ colormap={RdYlBu}{
+ color=(RdYlBu-A);
+ color=(RdYlBu-B);
+ color=(RdYlBu-D);
+ color=(RdYlBu-F);
+ color=(RdYlBu-G);
+ color=(RdYlBu-H);
+ color=(RdYlBu-I);
+ color=(RdYlBu-J);
+ color=(RdYlBu-L);
+ color=(RdYlBu-N);
+ color=(RdYlBu-O);
+ },
+ cycle list/.define={RdYlBu}{[of colormap=RdYlBu]},
+ },
+ /pgfplots/cycle list/RdYlBu/.style={/pgfplots/@@brewer set cycle list={RdYlBu}},
+ %
+ /pgfplots/colormap/Spectral/.style={
+ colormap={Spectral}{
+ color=(Spectral-A);
+ color=(Spectral-B);
+ color=(Spectral-D);
+ color=(Spectral-F);
+ color=(Spectral-G);
+ color=(Spectral-H);
+ color=(Spectral-I);
+ color=(Spectral-J);
+ color=(Spectral-L);
+ color=(Spectral-N);
+ color=(Spectral-O);
+ },
+ cycle list/.define={Spectral}{[of colormap=Spectral]},
+ },
+ /pgfplots/cycle list/Spectral/.style={/pgfplots/@@brewer set cycle list={Spectral}},
+ %
+ /pgfplots/colormap/RdYlGn/.style={
+ colormap={RdYlGn}{
+ color=(RdYlGn-A);
+ color=(RdYlGn-B);
+ color=(RdYlGn-D);
+ color=(RdYlGn-F);
+ color=(RdYlGn-G);
+ color=(RdYlGn-H);
+ color=(RdYlGn-I);
+ color=(RdYlGn-J);
+ color=(RdYlGn-L);
+ color=(RdYlGn-N);
+ color=(RdYlGn-O);
+ },
+ cycle list/.define={RdYlGn}{[of colormap=RdYlGn]},
+ },
+ /pgfplots/cycle list/RdYlGn/.style={/pgfplots/@@brewer set cycle list={RdYlGn}},
+ %
+}
+
+% define additional colormap styles for "qualitative" cycle lists
+% (because colors are always the same on the same index and so one doesn't have
+% to choose a number for the cycle lists)
+\pgfplotsset{
+ /pgfplots/colormap/Set3/.style={
+ colormap={Set3}{
+ color=(Set3-A);
+ color=(Set3-B);
+ color=(Set3-C);
+ color=(Set3-D);
+ color=(Set3-E);
+ color=(Set3-F);
+ color=(Set3-G);
+ color=(Set3-H);
+ color=(Set3-I);
+ color=(Set3-J);
+ color=(Set3-K);
+ color=(Set3-L);
+ },
+ cycle list/.define={Set3}{[of colormap=Set3]},
+ },
+ /pgfplots/cycle list/Set3/.style={/pgfplots/@@brewer set cycle list={Set3}},
+ %
+ /pgfplots/colormap/Pastel1/.style={
+ colormap={Pastel1}{
+ color=(Pastel1-A);
+ color=(Pastel1-B);
+ color=(Pastel1-C);
+ color=(Pastel1-D);
+ color=(Pastel1-E);
+ color=(Pastel1-F);
+ color=(Pastel1-G);
+ color=(Pastel1-H);
+ color=(Pastel1-I);
+ },
+ cycle list/.define={Pastel1}{[of colormap=Pastel1]},
+ },
+ /pgfplots/cycle list/Pastel1/.style={/pgfplots/@@brewer set cycle list={Pastel1}},
+ %
+ /pgfplots/colormap/Set1/.style={
+ colormap={Set1}{
+ color=(Set1-A);
+ color=(Set1-B);
+ color=(Set1-C);
+ color=(Set1-D);
+ color=(Set1-E);
+ color=(Set1-F);
+ color=(Set1-G);
+ color=(Set1-H);
+ color=(Set1-I);
+ },
+ cycle list/.define={Set1}{[of colormap=Set1]},
+ },
+ /pgfplots/cycle list/Set1/.style={/pgfplots/@@brewer set cycle list={Set1}},
+ %
+ /pgfplots/colormap/Pastel2/.style={
+ colormap={Pastel2}{
+ color=(Pastel2-A);
+ color=(Pastel2-B);
+ color=(Pastel2-C);
+ color=(Pastel2-D);
+ color=(Pastel2-E);
+ color=(Pastel2-F);
+ color=(Pastel2-G);
+ color=(Pastel2-H);
+ },
+ cycle list/.define={Pastel2}{[of colormap=Pastel2]},
+ },
+ /pgfplots/cycle list/Pastel2/.style={/pgfplots/@@brewer set cycle list={Pastel2}},
+ %
+ /pgfplots/colormap/Set2/.style={
+ colormap={Set2}{
+ color=(Set2-A);
+ color=(Set2-B);
+ color=(Set2-C);
+ color=(Set2-D);
+ color=(Set2-E);
+ color=(Set2-F);
+ color=(Set2-G);
+ color=(Set2-H);
+ },
+ cycle list/.define={Set2}{[of colormap=Set2]},
+ },
+ /pgfplots/cycle list/Set2/.style={/pgfplots/@@brewer set cycle list={Set2}},
+ %
+ /pgfplots/colormap/Dark2/.style={
+ colormap={Dark2}{
+ color=(Dark2-A);
+ color=(Dark2-B);
+ color=(Dark2-C);
+ color=(Dark2-D);
+ color=(Dark2-E);
+ color=(Dark2-F);
+ color=(Dark2-G);
+ color=(Dark2-H);
+ },
+ cycle list/.define={Dark2}{[of colormap=Dark2]},
+ },
+ /pgfplots/cycle list/Dark2/.style={/pgfplots/@@brewer set cycle list={Dark2}},
+ %
+ /pgfplots/colormap/Paired/.style={
+ colormap={Paired}{
+ color=(Paired-A);
+ color=(Paired-B);
+ color=(Paired-C);
+ color=(Paired-D);
+ color=(Paired-E);
+ color=(Paired-F);
+ color=(Paired-G);
+ color=(Paired-H);
+ color=(Paired-I);
+ color=(Paired-J);
+ color=(Paired-K);
+ color=(Paired-L);
+ },
+ cycle list/.define={Paired}{[of colormap=Paired]},
+ },
+ /pgfplots/cycle list/Paired/.style={/pgfplots/@@brewer set cycle list={Paired}},
+ %
+ /pgfplots/colormap/Accent/.style={
+ colormap={Accent}{
+ color=(Accent-A);
+ color=(Accent-B);
+ color=(Accent-C);
+ color=(Accent-D);
+ color=(Accent-E);
+ color=(Accent-F);
+ color=(Accent-G);
+ color=(Accent-H);
+ },
+ cycle list/.define={Accent}{[of colormap=Accent]},
+ },
+ /pgfplots/cycle list/Accent/.style={/pgfplots/@@brewer set cycle list={Accent}},
+ %
+}
+
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colortol.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colortol.code.tex
new file mode 100644
index 0000000000..e83d62a70f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.colortol.code.tex
@@ -0,0 +1,766 @@
+
+% load all colors for the `colormap's and `cycle list's
+\usetikzlibrary{colortol}
+
+% define `colormap's
+\pgfplotsset{
+ /pgfplots/@@colortol set cycle list/.code={%
+ \pgfkeysalso{
+ /pgfplots/ensure colormap={/pgfplots/colormap/#1},
+ /pgfplots/cycle list name=#1,
+ },
+ },
+ % -----------------------------------
+ % define "the" palette I colormap, which is just an alias for
+ % the colormap `colortol-P1-9'
+ /pgfplots/colormap/colortol-P1/.style={
+ colormap={colortol-P1}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-D);
+ color=(colortol-P1-E);
+ color=(colortol-P1-F);
+ color=(colortol-P1-G);
+ color=(colortol-P1-H);
+ color=(colortol-P1-I);
+ color=(colortol-P1-L);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1}{[of colormap=colortol-P1]},
+ },
+ /pgfplots/cycle list/colortol-P1/.style={/pgfplots/@@colortol set cycle list={colortol-P1}},
+ %
+ % -----------------------------------
+ % define (other) palette I colormaps
+ /pgfplots/colormap/colortol-P1-3/.style={
+ colormap={colortol-P1-3}{
+ color=(colortol-P1-B);
+ color=(colortol-P1-H);
+ color=(colortol-P1-J);
+ },
+ cycle list/.define={colortol-P1-3}{[of colormap=colortol-P1-3]},
+ },
+ /pgfplots/cycle list/colortol-P1-3/.style={/pgfplots/@@colortol set cycle list={colortol-P1-3}},
+ %
+ /pgfplots/colormap/colortol-P1-4/.style={
+ colormap={colortol-P1-4}{
+ color=(colortol-P1-B);
+ color=(colortol-P1-F);
+ color=(colortol-P1-H);
+ color=(colortol-P1-J);
+ },
+ cycle list/.define={colortol-P1-4}{[of colormap=colortol-P1-4]},
+ },
+ /pgfplots/cycle list/colortol-P1-4/.style={/pgfplots/@@colortol set cycle list={colortol-P1-4}},
+ %
+ /pgfplots/colormap/colortol-P1-5/.style={
+ colormap={colortol-P1-5}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-D);
+ color=(colortol-P1-F);
+ color=(colortol-P1-H);
+ color=(colortol-P1-J);
+ },
+ cycle list/.define={colortol-P1-5}{[of colormap=colortol-P1-5]},
+ },
+ /pgfplots/cycle list/colortol-P1-5/.style={/pgfplots/@@colortol set cycle list={colortol-P1-5}},
+ %
+ /pgfplots/colormap/colortol-P1-6/.style={
+ colormap={colortol-P1-6}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-D);
+ color=(colortol-P1-F);
+ color=(colortol-P1-H);
+ color=(colortol-P1-J);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1-6}{[of colormap=colortol-P1-6]},
+ },
+ /pgfplots/cycle list/colortol-P1-6/.style={/pgfplots/@@colortol set cycle list={colortol-P1-6}},
+ %
+ /pgfplots/colormap/colortol-P1-7/.style={
+ colormap={colortol-P1-7}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-D);
+ color=(colortol-P1-E);
+ color=(colortol-P1-F);
+ color=(colortol-P1-H);
+ color=(colortol-P1-J);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1-7}{[of colormap=colortol-P1-7]},
+ },
+ /pgfplots/cycle list/colortol-P1-7/.style={/pgfplots/@@colortol set cycle list={colortol-P1-7}},
+ %
+ /pgfplots/colormap/colortol-P1-8/.style={
+ colormap={colortol-P1-8}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-D);
+ color=(colortol-P1-E);
+ color=(colortol-P1-F);
+ color=(colortol-P1-G);
+ color=(colortol-P1-H);
+ color=(colortol-P1-J);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1-8}{[of colormap=colortol-P1-8]},
+ },
+ /pgfplots/cycle list/colortol-P1-8/.style={/pgfplots/@@colortol set cycle list={colortol-P1-8}},
+ %
+ /pgfplots/colormap/colortol-P1-9/.style={
+ colormap={colortol-P1-9}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-D);
+ color=(colortol-P1-E);
+ color=(colortol-P1-F);
+ color=(colortol-P1-G);
+ color=(colortol-P1-H);
+ color=(colortol-P1-J);
+ color=(colortol-P1-L);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1-9}{[of colormap=colortol-P1-9]},
+ },
+ /pgfplots/cycle list/colortol-P1-9/.style={/pgfplots/@@colortol set cycle list={colortol-P1-9}},
+ %
+ /pgfplots/colormap/colortol-P1-10/.style={
+ colormap={colortol-P1-10}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-D);
+ color=(colortol-P1-E);
+ color=(colortol-P1-F);
+ color=(colortol-P1-G);
+ color=(colortol-P1-H);
+ color=(colortol-P1-I);
+ color=(colortol-P1-J);
+ color=(colortol-P1-L);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1-10}{[of colormap=colortol-P1-10]},
+ },
+ /pgfplots/cycle list/colortol-P1-10/.style={/pgfplots/@@colortol set cycle list={colortol-P1-10}},
+ %
+ /pgfplots/colormap/colortol-P1-11/.style={
+ colormap={colortol-P1-11}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-C);
+ color=(colortol-P1-D);
+ color=(colortol-P1-E);
+ color=(colortol-P1-F);
+ color=(colortol-P1-G);
+ color=(colortol-P1-H);
+ color=(colortol-P1-I);
+ color=(colortol-P1-J);
+ color=(colortol-P1-L);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1-11}{[of colormap=colortol-P1-11]},
+ },
+ /pgfplots/cycle list/colortol-P1-11/.style={/pgfplots/@@colortol set cycle list={colortol-P1-11}},
+ %
+ /pgfplots/colormap/colortol-P1-12/.style={
+ colormap={colortol-P1-12}{
+ color=(colortol-P1-A);
+ color=(colortol-P1-C);
+ color=(colortol-P1-D);
+ color=(colortol-P1-E);
+ color=(colortol-P1-F);
+ color=(colortol-P1-G);
+ color=(colortol-P1-H);
+ color=(colortol-P1-I);
+ color=(colortol-P1-J);
+ color=(colortol-P1-K);
+ color=(colortol-P1-L);
+ color=(colortol-P1-M);
+ },
+ cycle list/.define={colortol-P1-12}{[of colormap=colortol-P1-12]},
+ },
+ /pgfplots/cycle list/colortol-P1-12/.style={/pgfplots/@@colortol set cycle list={colortol-P1-12}},
+ %
+ % -----------------------------------
+ % define palette II colormaps
+ /pgfplots/colormap/colortol-P2light/.style={
+ colormap={colortol-P2light}{
+ color=(colortol-P2light-A);
+ color=(colortol-P2light-B);
+ color=(colortol-P2light-C);
+ color=(colortol-P2light-D);
+ color=(colortol-P2light-E);
+ color=(colortol-P2light-F);
+ color=(colortol-P2light-G);
+ },
+ cycle list/.define={colortol-P2light}{[of colormap=colortol-P2light]},
+ },
+ /pgfplots/cycle list/colortol-P2light/.style={/pgfplots/@@colortol set cycle list={colortol-P2light}},
+ %
+ /pgfplots/colormap/colortol-P2/.style={
+ colormap={colortol-P2}{
+ color=(colortol-P2-A);
+ color=(colortol-P2-B);
+ color=(colortol-P2-C);
+ color=(colortol-P2-D);
+ color=(colortol-P2-E);
+ color=(colortol-P2-F);
+ color=(colortol-P2-G);
+ },
+ cycle list/.define={colortol-P2}{[of colormap=colortol-P2]},
+ },
+ /pgfplots/cycle list/colortol-P2/.style={/pgfplots/@@colortol set cycle list={colortol-P2}},
+ %
+ /pgfplots/colormap/colortol-P2dark/.style={
+ colormap={colortol-P2dark}{
+ color=(colortol-P2dark-A);
+ color=(colortol-P2dark-B);
+ color=(colortol-P2dark-C);
+ color=(colortol-P2dark-D);
+ color=(colortol-P2dark-E);
+ color=(colortol-P2dark-F);
+ color=(colortol-P2dark-G);
+ },
+ cycle list/.define={colortol-P2dark}{[of colormap=colortol-P2dark]},
+ },
+ /pgfplots/cycle list/colortol-P2dark/.style={/pgfplots/@@colortol set cycle list={colortol-P2dark}},
+ %
+ % -----------------------------------
+ % define palette III colormap, which is just an alias for
+ % the colormap `colortol-P3-5+'
+ /pgfplots/colormap/colortol-P3/.style={
+ colormap={colortol-P3}{
+ color=(colortol-P3-blue),
+ color=(colortol-P3-cyan),
+ color=(colortol-P3-green),
+ color=(colortol-P3-yellow),
+ color=(colortol-P3-red),
+ color=(colortol-P3-pink),
+ },
+ cycle list/.define={colortol-P3}{[of colormap=colortol-P3]},
+ },
+ /pgfplots/cycle list/colortol-P3/.style={/pgfplots/@@colortol set cycle list={colortol-P3}},
+ %
+ % -----------------------------------
+ % define (other) palette III colormaps
+ /pgfplots/colormap/colortol-P3-4-/.style={
+ colormap={colortol-P3-4-}{
+ color=(colortol-P3-blue),
+ color=(colortol-P3-red),
+ color=(colortol-P3-green),
+ color=(colortol-P3-yellow),
+ },
+ cycle list/.define={colortol-P3-4-}{[of colormap=colortol-P3-4-]},
+ },
+ /pgfplots/cycle list/colortol-P3-4-/.style={/pgfplots/@@colortol set cycle list={colortol-P3-4-}},
+ %
+ /pgfplots/colormap/colortol-P3-5+/.style={
+ colormap={colortol-P3-5+}{
+ color=(colortol-P3-blue),
+ color=(colortol-P3-cyan),
+ color=(colortol-P3-green),
+ color=(colortol-P3-yellow),
+ color=(colortol-P3-red),
+ color=(colortol-P3-pink),
+ },
+ cycle list/.define={colortol-P3-5+}{[of colormap=colortol-P3-5+]},
+ },
+ /pgfplots/cycle list/colortol-P3-5+/.style={/pgfplots/@@colortol set cycle list={colortol-P3-5+}},
+ %
+ % ===================================
+ % define colormaps for sequential data
+ /pgfplots/colormap/colortol-seq-3/.style={
+ colormap={colortol-seq-3}{
+ color=(colortol-seq-C);
+ color=(colortol-seq-F);
+ color=(colortol-seq-I);
+ },
+ cycle list/.define={colortol-seq-3}{[of colormap=colortol-seq-3]},
+ },
+ /pgfplots/cycle list/colortol-seq-3/.style={/pgfplots/@@colortol set cycle list={colortol-seq-3}},
+ %
+ /pgfplots/colormap/colortol-seq-4/.style={
+ colormap={colortol-seq-4}{
+ color=(colortol-seq-B);
+ color=(colortol-seq-E);
+ color=(colortol-seq-G);
+ color=(colortol-seq-J);
+ },
+ cycle list/.define={colortol-seq-4}{[of colormap=colortol-seq-4]},
+ },
+ /pgfplots/cycle list/colortol-seq-4/.style={/pgfplots/@@colortol set cycle list={colortol-seq-4}},
+ %
+ /pgfplots/colormap/colortol-seq-5/.style={
+ colormap={colortol-seq-5}{
+ color=(colortol-seq-B);
+ color=(colortol-seq-E);
+ color=(colortol-seq-G);
+ color=(colortol-seq-I);
+ color=(colortol-seq-K);
+ },
+ cycle list/.define={colortol-seq-5}{[of colormap=colortol-seq-5]},
+ },
+ /pgfplots/cycle list/colortol-seq-5/.style={/pgfplots/@@colortol set cycle list={colortol-seq-5}},
+ %
+ /pgfplots/colormap/colortol-seq-6/.style={
+ colormap={colortol-seq-6}{
+ color=(colortol-seq-B);
+ color=(colortol-seq-D);
+ color=(colortol-seq-F);
+ color=(colortol-seq-G);
+ color=(colortol-seq-I);
+ color=(colortol-seq-K);
+ },
+ cycle list/.define={colortol-seq-6}{[of colormap=colortol-seq-6]},
+ },
+ /pgfplots/cycle list/colortol-seq-6/.style={/pgfplots/@@colortol set cycle list={colortol-seq-6}},
+ %
+ /pgfplots/colormap/colortol-seq-7/.style={
+ colormap={colortol-seq-7}{
+ color=(colortol-seq-B);
+ color=(colortol-seq-D);
+ color=(colortol-seq-F);
+ color=(colortol-seq-G);
+ color=(colortol-seq-H);
+ color=(colortol-seq-J);
+ color=(colortol-seq-L);
+ },
+ cycle list/.define={colortol-seq-7}{[of colormap=colortol-seq-7]},
+ },
+ /pgfplots/cycle list/colortol-seq-7/.style={/pgfplots/@@colortol set cycle list={colortol-seq-7}},
+ %
+ /pgfplots/colormap/colortol-seq-8/.style={
+ colormap={colortol-seq-8}{
+ color=(colortol-seq-A);
+ color=(colortol-seq-C);
+ color=(colortol-seq-D);
+ color=(colortol-seq-F);
+ color=(colortol-seq-G);
+ color=(colortol-seq-H);
+ color=(colortol-seq-J);
+ color=(colortol-seq-L);
+ },
+ cycle list/.define={colortol-seq-8}{[of colormap=colortol-seq-8]},
+ },
+ /pgfplots/cycle list/colortol-seq-8/.style={/pgfplots/@@colortol set cycle list={colortol-seq-8}},
+ %
+ /pgfplots/colormap/colortol-seq-9/.style={
+ colormap={colortol-seq-9}{
+ color=(colortol-seq-A);
+ color=(colortol-seq-C);
+ color=(colortol-seq-D);
+ color=(colortol-seq-F);
+ color=(colortol-seq-G);
+ color=(colortol-seq-H);
+ color=(colortol-seq-J);
+ color=(colortol-seq-K);
+ color=(colortol-seq-M);
+ },
+ cycle list/.define={colortol-seq-9}{[of colormap=colortol-seq-9]},
+ },
+ /pgfplots/cycle list/colortol-seq-9/.style={/pgfplots/@@colortol set cycle list={colortol-seq-9}},
+ %
+ % -----------------------------------
+ % define colormaps for diverging data
+ /pgfplots/colormap/colortol-div-3/.style={
+ colormap={colortol-div-3}{
+ color=(colortol-div-E);
+ color=(colortol-div-H);
+ color=(colortol-div-K);
+ },
+ cycle list/.define={colortol-div-3}{[of colormap=colortol-div-3]},
+ },
+ /pgfplots/cycle list/colortol-div-3/.style={/pgfplots/@@colortol set cycle list={colortol-div-3}},
+ %
+ /pgfplots/colormap/colortol-div-4/.style={
+ colormap={colortol-div-4}{
+ color=(colortol-div-A);
+ color=(colortol-div-F);
+ color=(colortol-div-J);
+ color=(colortol-div-N);
+ },
+ cycle list/.define={colortol-div-4}{[of colormap=colortol-div-4]},
+ },
+ /pgfplots/cycle list/colortol-div-4/.style={/pgfplots/@@colortol set cycle list={colortol-div-4}},
+ %
+ /pgfplots/colormap/colortol-div-5/.style={
+ colormap={colortol-div-5}{
+ color=(colortol-div-A);
+ color=(colortol-div-F);
+ color=(colortol-div-H);
+ color=(colortol-div-J);
+ color=(colortol-div-N);
+ },
+ cycle list/.define={colortol-div-5}{[of colormap=colortol-div-5]},
+ },
+ /pgfplots/cycle list/colortol-div-5/.style={/pgfplots/@@colortol set cycle list={colortol-div-5}},
+ %
+ /pgfplots/colormap/colortol-div-6/.style={
+ colormap={colortol-div-6}{
+ color=(colortol-div-C);
+ color=(colortol-div-E);
+ color=(colortol-div-G);
+ color=(colortol-div-I);
+ color=(colortol-div-K);
+ color=(colortol-div-M);
+ },
+ cycle list/.define={colortol-div-6}{[of colormap=colortol-div-6]},
+ },
+ /pgfplots/cycle list/colortol-div-6/.style={/pgfplots/@@colortol set cycle list={colortol-div-6}},
+ %
+ /pgfplots/colormap/colortol-div-7/.style={
+ colormap={colortol-div-7}{
+ color=(colortol-div-C);
+ color=(colortol-div-E);
+ color=(colortol-div-G);
+ color=(colortol-div-H);
+ color=(colortol-div-I);
+ color=(colortol-div-K);
+ color=(colortol-div-M);
+ },
+ cycle list/.define={colortol-div-7}{[of colormap=colortol-div-7]},
+ },
+ /pgfplots/cycle list/colortol-div-7/.style={/pgfplots/@@colortol set cycle list={colortol-div-7}},
+ %
+ /pgfplots/colormap/colortol-div-8/.style={
+ colormap={colortol-div-8}{
+ color=(colortol-div-C);
+ color=(colortol-div-D);
+ color=(colortol-div-F);
+ color=(colortol-div-G);
+ color=(colortol-div-I);
+ color=(colortol-div-J);
+ color=(colortol-div-L);
+ color=(colortol-div-M);
+ },
+ cycle list/.define={colortol-div-8}{[of colormap=colortol-div-8]},
+ },
+ /pgfplots/cycle list/colortol-div-8/.style={/pgfplots/@@colortol set cycle list={colortol-div-8}},
+ %
+ /pgfplots/colormap/colortol-div-9/.style={
+ colormap={colortol-div-9}{
+ color=(colortol-div-C);
+ color=(colortol-div-D);
+ color=(colortol-div-F);
+ color=(colortol-div-G);
+ color=(colortol-div-H);
+ color=(colortol-div-I);
+ color=(colortol-div-J);
+ color=(colortol-div-L);
+ color=(colortol-div-M);
+ },
+ cycle list/.define={colortol-div-9}{[of colormap=colortol-div-9]},
+ },
+ /pgfplots/cycle list/colortol-div-9/.style={/pgfplots/@@colortol set cycle list={colortol-div-9}},
+ %
+ /pgfplots/colormap/colortol-div-10/.style={
+ colormap={colortol-div-10}{
+ color=(colortol-div-B);
+ color=(colortol-div-C);
+ color=(colortol-div-D);
+ color=(colortol-div-F);
+ color=(colortol-div-G);
+ color=(colortol-div-I);
+ color=(colortol-div-J);
+ color=(colortol-div-L);
+ color=(colortol-div-M);
+ color=(colortol-div-O);
+ },
+ cycle list/.define={colortol-div-10}{[of colormap=colortol-div-10]},
+ },
+ /pgfplots/cycle list/colortol-div-10/.style={/pgfplots/@@colortol set cycle list={colortol-div-10}},
+ %
+ /pgfplots/colormap/colortol-div-11/.style={
+ colormap={colortol-div-11}{
+ color=(colortol-div-B);
+ color=(colortol-div-C);
+ color=(colortol-div-D);
+ color=(colortol-div-F);
+ color=(colortol-div-G);
+ color=(colortol-div-H);
+ color=(colortol-div-I);
+ color=(colortol-div-J);
+ color=(colortol-div-L);
+ color=(colortol-div-M);
+ color=(colortol-div-O);
+ },
+ cycle list/.define={colortol-div-11}{[of colormap=colortol-div-11]},
+ },
+ /pgfplots/cycle list/colortol-div-11/.style={/pgfplots/@@colortol set cycle list={colortol-div-11}},
+ %
+ % -----------------
+ /pgfplots/colormap/colortol-div2/.style={
+ colormap={colortol-div2}{
+ color=(colortol-div2-A);
+ color=(colortol-div2-B);
+ color=(colortol-div2-C);
+ color=(colortol-div2-D);
+ color=(colortol-div2-E);
+ color=(colortol-div2-F);
+ color=(colortol-div2-G);
+ color=(colortol-div2-H);
+ color=(colortol-div2-I);
+ },
+ cycle list/.define={colortol-div2}{[of colormap=colortol-div2]},
+ },
+ /pgfplots/cycle list/colortol-div2/.style={/pgfplots/@@colortol set cycle list={colortol-div2}},
+ %
+ /pgfplots/colormap/colortol-div3/.style={
+ colormap={colortol-div3}{
+ color=(colortol-div3-A);
+ color=(colortol-div3-B);
+ color=(colortol-div3-C);
+ color=(colortol-div3-D);
+ color=(colortol-div3-E);
+ color=(colortol-div3-F);
+ color=(colortol-div3-G);
+ color=(colortol-div3-H);
+ color=(colortol-div3-I);
+ },
+ cycle list/.define={colortol-div3}{[of colormap=colortol-div3]},
+ },
+ /pgfplots/cycle list/colortol-div3/.style={/pgfplots/@@colortol set cycle list={colortol-div3}},
+ %
+ % ===================================
+ % define rainbow colormaps
+ /pgfplots/colormap/colortol-rainbow-4/.style={
+ colormap={colortol-rainbow-4}{
+ color=(colortol-rainbow-F);
+ color=(colortol-rainbow-W);
+ color=(colortol-rainbow-AQ);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-4}{[of colormap=colortol-rainbow-4]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-4/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-4}},
+ %
+ /pgfplots/colormap/colortol-rainbow-5/.style={
+ colormap={colortol-rainbow-5}{
+ color=(colortol-rainbow-F);
+ color=(colortol-rainbow-T);
+ color=(colortol-rainbow-AD);
+ color=(colortol-rainbow-AS);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-5}{[of colormap=colortol-rainbow-5]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-5/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-5}},
+ %
+ /pgfplots/colormap/colortol-rainbow-6/.style={
+ colormap={colortol-rainbow-6}{
+ color=(colortol-rainbow-F);
+ color=(colortol-rainbow-Q);
+ color=(colortol-rainbow-AA);
+ color=(colortol-rainbow-AK);
+ color=(colortol-rainbow-AV);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-6}{[of colormap=colortol-rainbow-6]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-6/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-6}},
+ %
+ /pgfplots/colormap/colortol-rainbow-7/.style={
+ colormap={colortol-rainbow-7}{
+ color=(colortol-rainbow-A);
+ color=(colortol-rainbow-J);
+ color=(colortol-rainbow-U);
+ color=(colortol-rainbow-AB);
+ color=(colortol-rainbow-AM);
+ color=(colortol-rainbow-AW);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-7}{[of colormap=colortol-rainbow-7]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-7/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-7}},
+ %
+ /pgfplots/colormap/colortol-rainbow-8/.style={
+ colormap={colortol-rainbow-8}{
+ color=(colortol-rainbow-A);
+ color=(colortol-rainbow-I);
+ color=(colortol-rainbow-R);
+ color=(colortol-rainbow-Y);
+ color=(colortol-rainbow-AG);
+ color=(colortol-rainbow-AO);
+ color=(colortol-rainbow-AX);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-8}{[of colormap=colortol-rainbow-8]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-8/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-8}},
+ %
+ /pgfplots/colormap/colortol-rainbow-9/.style={
+ colormap={colortol-rainbow-9}{
+ color=(colortol-rainbow-A);
+ color=(colortol-rainbow-H);
+ color=(colortol-rainbow-N);
+ color=(colortol-rainbow-W);
+ color=(colortol-rainbow-AB);
+ color=(colortol-rainbow-AI);
+ color=(colortol-rainbow-AR);
+ color=(colortol-rainbow-AY);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-9}{[of colormap=colortol-rainbow-9]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-9/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-9}},
+ %
+ /pgfplots/colormap/colortol-rainbow-10/.style={
+ colormap={colortol-rainbow-10}{
+ color=(colortol-rainbow-A);
+ color=(colortol-rainbow-G);
+ color=(colortol-rainbow-M);
+ color=(colortol-rainbow-T);
+ color=(colortol-rainbow-Z);
+ color=(colortol-rainbow-AF);
+ color=(colortol-rainbow-AL);
+ color=(colortol-rainbow-AS);
+ color=(colortol-rainbow-AZ);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-10}{[of colormap=colortol-rainbow-10]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-10/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-10}},
+ %
+ /pgfplots/colormap/colortol-rainbow-11/.style={
+ colormap={colortol-rainbow-11}{
+ color=(colortol-rainbow-A);
+ color=(colortol-rainbow-F);
+ color=(colortol-rainbow-L);
+ color=(colortol-rainbow-S);
+ color=(colortol-rainbow-X);
+ color=(colortol-rainbow-AC);
+ color=(colortol-rainbow-AH);
+ color=(colortol-rainbow-AN);
+ color=(colortol-rainbow-AT);
+ color=(colortol-rainbow-BA);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-11}{[of colormap=colortol-rainbow-11]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-11/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-11}},
+ %
+ /pgfplots/colormap/colortol-rainbow-12/.style={
+ colormap={colortol-rainbow-12}{
+ color=(colortol-rainbow-A);
+ color=(colortol-rainbow-E);
+ color=(colortol-rainbow-K);
+ color=(colortol-rainbow-P);
+ color=(colortol-rainbow-V);
+ color=(colortol-rainbow-AA);
+ color=(colortol-rainbow-AE);
+ color=(colortol-rainbow-AJ);
+ color=(colortol-rainbow-AP);
+ color=(colortol-rainbow-AU);
+ color=(colortol-rainbow-AB);
+ color=(colortol-rainbow-AD);
+ },
+ cycle list/.define={colortol-rainbow-12}{[of colormap=colortol-rainbow-12]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-12/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-12}},
+ %
+ /pgfplots/colormap/colortol-rainbow-14/.style={
+ colormap={colortol-rainbow-14}{
+ color=(colortol-rainbow-B);
+ color=(colortol-rainbow-C);
+ color=(colortol-rainbow-D);
+ color=(colortol-rainbow-AF);
+ color=(colortol-rainbow-O);
+ color=(colortol-rainbow-AG);
+ color=(colortol-rainbow-AH);
+ color=(colortol-rainbow-AI);
+ color=(colortol-rainbow-AJ);
+ color=(colortol-rainbow-AK);
+ color=(colortol-rainbow-AL);
+ color=(colortol-rainbow-AM);
+ color=(colortol-rainbow-AC);
+ color=(colortol-rainbow-AE);
+ },
+ cycle list/.define={colortol-rainbow-14}{[of colormap=colortol-rainbow-14]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-14/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-14}},
+ %
+ % -----------------------------------
+ % define continuous rainbow colormap
+ /pgfplots/colormap/colortol-rainbow-cont/.style={
+ colormap={colortol-rainbow-cont}{
+ color=(colortol-rainbow-cont-A);
+ color=(colortol-rainbow-cont-B);
+ color=(colortol-rainbow-cont-C);
+ color=(colortol-rainbow-cont-D);
+ color=(colortol-rainbow-cont-E);
+ color=(colortol-rainbow-cont-F);
+ color=(colortol-rainbow-cont-G);
+ color=(colortol-rainbow-cont-H);
+ color=(colortol-rainbow-cont-I);
+ color=(colortol-rainbow-cont-J);
+ color=(colortol-rainbow-cont-K);
+ color=(colortol-rainbow-cont-L);
+ color=(colortol-rainbow-cont-M);
+ color=(colortol-rainbow-cont-N);
+ color=(colortol-rainbow-cont-O);
+ color=(colortol-rainbow-cont-P);
+ color=(colortol-rainbow-cont-Q);
+ color=(colortol-rainbow-cont-R);
+ color=(colortol-rainbow-cont-S);
+ color=(colortol-rainbow-cont-T);
+ color=(colortol-rainbow-cont-U);
+ color=(colortol-rainbow-cont-V);
+ color=(colortol-rainbow-cont-W);
+ color=(colortol-rainbow-cont-X);
+ color=(colortol-rainbow-cont-Y);
+ },
+ cycle list/.define={colortol-rainbow-cont}{[of colormap=colortol-rainbow-cont]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-cont/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-cont}},
+ %
+ % -----------------
+ /pgfplots/colormap/colortol-rainbow-ext-low/.style={
+ colormap={colortol-rainbow-ext-low}{
+ color=(colortol-rainbow-ext-low-A),
+ color=(colortol-rainbow-ext-low-B),
+ color=(colortol-rainbow-ext-low-C),
+ color=(colortol-rainbow-ext-low-D),
+ color=(colortol-rainbow-ext-low-E),
+ color=(colortol-rainbow-ext-low-F),
+ color=(colortol-rainbow-ext-low-G),
+ color=(colortol-rainbow-ext-low-H),
+ },
+ cycle list/.define={colortol-rainbow-ext-low}{[of colormap=colortol-rainbow-ext-low]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-ext-low/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-ext-low}},
+ %
+ /pgfplots/colormap/colortol-rainbow-cont/.style={
+ colormap={colortol-rainbow-cont}{
+ color=(colortol-rainbow-ext-A),
+ color=(colortol-rainbow-ext-B),
+ color=(colortol-rainbow-ext-C),
+ color=(colortol-rainbow-ext-D),
+ color=(colortol-rainbow-ext-E),
+ color=(colortol-rainbow-ext-F),
+ color=(colortol-rainbow-ext-G),
+ color=(colortol-rainbow-ext-H),
+ color=(colortol-rainbow-ext-I),
+ color=(colortol-rainbow-ext-J),
+ color=(colortol-rainbow-ext-K),
+ color=(colortol-rainbow-ext-L),
+ color=(colortol-rainbow-ext-M),
+ color=(colortol-rainbow-ext-N),
+ color=(colortol-rainbow-ext-O),
+ color=(colortol-rainbow-ext-P),
+ color=(colortol-rainbow-ext-Q),
+ color=(colortol-rainbow-ext-R),
+ color=(colortol-rainbow-ext-S),
+ color=(colortol-rainbow-ext-T),
+ color=(colortol-rainbow-ext-U),
+ color=(colortol-rainbow-ext-V),
+ },
+ cycle list/.define={colortol-rainbow-ext}{[of colormap=colortol-rainbow-ext]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-ext/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-ext}},
+ %
+ /pgfplots/colormap/colortol-rainbow-ext-high/.style={
+ colormap={colortol-rainbow-ext-high}{
+ color=(colortol-rainbow-ext-high-A),
+ color=(colortol-rainbow-ext-high-B),
+ color=(colortol-rainbow-ext-high-C),
+ color=(colortol-rainbow-ext-high-D),
+ },
+ cycle list/.define={colortol-rainbow-ext-high}{[of colormap=colortol-rainbow-ext-high]},
+ },
+ /pgfplots/cycle list/colortol-rainbow-ext-high/.style={/pgfplots/@@colortol set cycle list={colortol-rainbow-ext-high}},
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.code.tex
new file mode 100644
index 0000000000..82fdfd6861
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.code.tex
@@ -0,0 +1,638 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2012 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+%--------------------------------------------------
+% \pgfqkeys{/pgfplots/surf shading}{
+% cols=3,
+% % test colormap 1,
+% }
+% \pgfplotslibrarysurfstreamstart
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{0pt}{10pt}}{0}
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{100pt}{10pt}}{100}
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{180pt}{10pt}}{30}
+% %
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{0pt}{100pt}}{300}
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{110pt}{90pt}}{1000}
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{190pt}{110pt}}{600}
+% %
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{0pt}{200pt}}{0}
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{110pt}{200pt}}{100}
+% \pgfplotslibrarysurfstreamcoord{\pgfqpoint{190pt}{200pt}}{60}
+% \pgfplotslibrarysurfstreamend
+% \fbox{%
+% \pgfplotslibrarysurfdraw
+% }%
+%--------------------------------------------------
+
+
+\newif\ifpgfplotslibrarysurf@updatebb
+\newif\ifpgfplotslibrarysurf@usecolormap
+\pgfplotslibrarysurf@updatebbtrue
+
+\pgfkeys{%
+ /pgfplots/surf shading/anchor/.initial=\pgfpointorigin,%
+ /pgfplots/surf shading/shading type/.initial=5,% triangles in form of lattice
+ %
+ % If this is true, the embedding picture's bounding box will be updated using
+ % the shading's bounding box.
+ % This bounding box may be (highly!) inaccurate for coons shadings and tensor product shadings.
+ % The 'patch' plot handler disables it and takes control over it explicitly (using interpolation
+ % points rather than bezier control points).
+ /pgfplots/surf shading/update BB/.is if=pgfplotslibrarysurf@updatebb,
+ %
+ % can only have values '' (empty) for binary encoding or
+ % ASCIIHexEncode for base 16 encoding. Use this if some driver
+ % cannot produce binary encoding. This is undocumented; for use in
+ % emergency only.
+ /pgfplots/surf shading/pdf stream filter/.initial=,%
+ %
+ /pgfplots/surf shading/precision/.is choice,
+ /pgfplots/surf shading/precision/pdf/.code={%
+ % Lossless coordinate output.
+ \def\pgfplotslibrarysurf@bitspercoordinate{32}%
+ \def\pgfplotslibrarysurf@bytespercoordinate{4}%
+ \def\pgfplotslibrarysurf@filter@encode{}% raw binary.
+ \def\pgfplotslibrarysurf@filter@decode{}%
+ },%
+ /pgfplots/surf shading/precision/ps/.code={%
+ % quantized coordinate output (introduces quantization error).
+ \def\pgfplotslibrarysurf@bitspercoordinate{24}%
+ \def\pgfplotslibrarysurf@bytespercoordinate{3}%
+ % doesn't improve behavior of pdf2ps:
+ %\def\pgfplotslibrarysurf@filter@encode{ASCIIHexEncode}%
+ %\def\pgfplotslibrarysurf@filter@decode{ASCIIHexDecode}%
+ \def\pgfplotslibrarysurf@filter@encode{}% raw binary.
+ \def\pgfplotslibrarysurf@filter@decode{}%
+ },%
+ /pgfplots/surf shading/precision/postscript/.style={%
+ /pgfplots/surf shading/precision/ps},%
+ /pgfplots/surf shading/precision/ps,%
+ % columns:
+ /pgfplots/surf shading/cols/.initial=,%
+ /pgfplots/surf shading/colorspace/.initial=rgb,% rgb or cmyk or gray
+ %
+ % the colormap. If this key is empty, we assume that individual
+ % color components are provided for EVERY vertex for which cdata
+ % is expected.
+ /pgfplots/surf shading/colormap/.initial={%
+ <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 [0 0 1] /C1 [1 0 0] /N 1
+ >>
+ },%
+ /pgfplots/surf shading/test colormap 1/.style={%
+ /pgfplots/surf shading/colormap={
+ <<
+ /FunctionType 3
+ /Domain [0 1]
+ /Functions [
+ <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 [0 0 1] /C1 [1 1 0] /N 1
+ >>
+ <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 [1 1 0] /C1 [1 0.5 0] /N 1
+ >>
+ <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 [1 0.5 0] /C1 [1 0 0] /N 1
+ >>
+ ]
+ /Bounds [ 0.3 0.6 ]
+ /Encode [0 1 0 1 0 1]
+ %/Range [0 1 0 1 0 1] INCOMPATIBLE WITH ACROBAT 6.0
+ >>
+ }%
+ },%
+ /pgfplots/surf shading/debug text/.initial=\the\c@pgfplotslibrarysurf@no,
+ /pgfplots/surf shading/every debug coord/.style={
+ circle,
+ draw,
+ fill=yellow,
+ },
+ /pgfplots/surf shading/debug/.is choice,
+ /pgfplots/surf shading/debug/false/.code={%
+ \let\pgfplotslibrarysurfprocesscoordinate=\pgfplotslibrarysurfprocesscoordinate@orig
+ \let\pgfplotslibrarysurfusepath=\pgfplotslibrarysurfusepath@orig
+ },
+ /pgfplots/surf shading/debug/true/.code={%
+ \let\pgfplotslibrarysurfprocesscoordinate=\pgfplotslibrarysurfprocesscoordinate@debug
+ \def\pgfplotslibrarysurfusepath{\pgfusepath{stroke,fill}}
+ },
+ /pgfplots/surf shading/debug/.default=true,
+}%
+
+\def\pgfplotslibrarysurf@corner@sw{\pgfplots@error{This is unavailable until \string\pgfplotslibrarysurfstreamend}}
+\let\pgfplotslibrarysurf@corner@ne\pgfplotslibrarysurf@corner@sw
+
+% parametric colors (colormap) are always in [0,1000]. I
+% 2 bytes suffice for that range.
+\def\pgfplotslibrarysurf@bytespercomponent{2}%
+\def\pgfplotslibrarysurf@bitspercomponent{16}%
+
+\def\pgfplotslibrarysurf@decode{%
+ -16383.999992 16384 % see the docs of \pgfplotsbinaryencodedimenmaplinearly
+ -16383.999992 16384 %
+ \pgfplotslibrarysurf@decode@colors
+}%
+\def\pgfplotslibrarysurf@decode@colors@colormap{%
+ 0 \pgfplotscolormappdfmax % map [0,2^BitsPerComponent-1] linearly to [0 1] for parametric color data
+}%
+\def\pgfplotslibrarysurf@decode@colors@explicit@one@component{%
+ % this is just one component for explicit color data.
+ % it will be replicated for every color component.
+ 0 1 % the target value for color component values.
+}%
+
+\def\pgfplotslibrarysurf@count{0}%
+\newcount\c@pgfplotslibrarysurf@no
+
+% driver specific:
+\def\pgfplotslibrarysurf@initstream{%
+ \edef\pgfplots@loc@TMPa{\pgfkeysvalueof{/pgfplots/surf shading/pdf stream filter}}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \let\pgfplotslibrarysurf@filter@encode=\pgfplots@loc@TMPa
+ \let\pgfplotslibrarysurf@filter@decode=\pgfplotslibrarysurf@filter@encode
+ \fi
+}
+
+\def\pgfplotslibrarysurf@advancestreamlen#1{}%
+
+\def\pgfplotslibrarysurfstreamstart{%
+ \pgfplotslibrarysurfstreamstart@init@colors
+ \pgfkeysgetvalue{/pgfplots/surf shading/shading type}\pgfplotslibrarysurf@type
+ \pgfplotsapplistXglobalnewempty\pgfplotslibrarysurf@binarystream@accum
+ \pgfplotslibrarysurf@initstream
+ \ifx\pgfplotslibrarysurf@filter@encode\pgfutil@empty
+ \def\pgfplotslibrarysurf@filter@encode{binary encoding}%
+ \fi
+ \pgfkeysalso{/pgfplots/bin/\pgfplotslibrarysurf@filter@encode}%
+ %
+ \pgfplotsbinarysetbytes1%
+ \pgfplotsbinaryencodeunsigned{0}% use this method - it respects any special encodings.
+ \let\pgfplots@loc@TMPa=\pgfplotsbinaryresult
+ \ifcase\pgfplotslibrarysurf@type\relax
+ % 0
+ \pgfplotslibrarysurf@initstream@wrongtype
+ \or% 1
+ \pgfplotslibrarysurf@initstream@wrongtype
+ \or% 2
+ \pgfplotslibrarysurf@initstream@wrongtype
+ \or% 3
+ \or% 4
+ % ok, triangle meshes.
+ \let\pgfplotslibrarysurf@edgeflag=\pgfplots@loc@TMPa
+ \or% 5 triangles in lattice form. disable edge flag:
+ \let\pgfplotslibrarysurf@edgeflag=\pgfutil@empty
+ \or% 6 coons patches:
+ \global\let\pgfplotslibrarysurf@cubicpatch@cdata=\pgfutil@empty
+ \global\c@pgfplotslibrarysurf@no=0
+ \def\pgfplotslibrarysurf@cubicpatch@numverts{12}%
+ \let\pgfplotslibrarysurfstreamcoord=\pgfplotslibrarysurfstreamcoord@cubicpatch
+ \let\pgfplotslibrarysurf@edgeflag=\pgfplots@loc@TMPa
+ \or% 7 full tensor product cubic bezier patches:
+ \global\let\pgfplotslibrarysurf@cubicpatch@cdata=\pgfutil@empty
+ \global\c@pgfplotslibrarysurf@no=0
+ \def\pgfplotslibrarysurf@cubicpatch@numverts{16}%
+ \let\pgfplotslibrarysurfstreamcoord=\pgfplotslibrarysurfstreamcoord@cubicpatch
+ \let\pgfplotslibrarysurf@edgeflag=\pgfplots@loc@TMPa
+ \else
+ \pgfplotslibrarysurf@initstream@wrongtype
+ \fi
+ %
+ %
+ % we want to establish a bounding box for THIS shading only! Otherwise the pdf XFORM might have a larger bounding box than we want. Is that ok here? Or does it hurt somewhere?
+ \pgf@getpathsizes{\pgfplots@loc@TMPa}%
+ \global\let\pgfplotslibrarysurf@pathsizes@before=\pgfplots@loc@TMPa
+}%
+
+
+\def\pgfplotslibrarysurfstreamstart@init@colors{%
+ %
+ \pgfkeysgetvalue{/pgfplots/surf shading/colormap}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfplotslibrarysurf@usecolormapfalse
+ \else
+ \pgfplotslibrarysurf@usecolormaptrue
+ \fi
+ %
+ \ifpgfplotslibrarysurf@usecolormap
+ \let\pgfplotslibrarysurf@decode@colors=\pgfplotslibrarysurf@decode@colors@colormap
+ \else
+ \pgfplotscolorspacegetcomponents{\pgfkeysvalueof{/pgfplots/surf shading/colorspace}}%
+ \c@pgf@counta=0 %
+ \c@pgf@countb=\pgfplotsretval\relax
+ %
+ \def\pgfplotslibrarysurf@decode@colors{}%
+ \pgfplotslibrarysurf@decode@colors@loop
+ \fi
+ %
+ \pgfplotslibrarysurf@translate@colorspace
+ \let\pgfplotslibrarysurf@colorspace=\pgfplotsretval
+}%
+
+\def\pgfplotslibrarysurf@decode@colors@loop{%
+ \ifnum\c@pgf@counta<\c@pgf@countb
+ %
+ \edef\pgfplotslibrarysurf@decode@colors{%
+ \pgfplotslibrarysurf@decode@colors
+ \pgfplotslibrarysurf@decode@colors@explicit@one@component
+ }%
+ \advance\c@pgf@counta by1 %
+ %
+ \expandafter\pgfplotslibrarysurf@decode@colors@loop
+ \fi
+}%
+
+\def\pgfplotslibrarysurf@initstream@wrongtype{%
+ \pgfplots@error{CRITICAL: shader=interp: got unsupported pdf shading type '\pgfplotslibrarysurf@type'. This may corrupt your pdf!}%
+}%
+\def\pgfplotslibrarysurfstreamend{%
+ \pgfplotsapplistXgloballet\pgfplotslibrarysurf@binarystream=\pgfplotslibrarysurf@binarystream@accum
+ \pgfplotsapplistXglobalnewempty\pgfplotslibrarysurf@binarystream@accum
+ %
+ \pgfplotslibrarysurfstreamend@set@BB
+}
+
+\def\pgfplotslibrarysurfdraw{%
+ \ifx\pgfplotslibrarysurf@binarystream\pgfutil@empty
+ \else
+ \pgfplotslibrarysurfdraw@sys
+ \fi
+}%
+
+\def\pgfplotslibrarysurfstreamend@set@BB{%
+ \xdef\pgfplotslibrarysurf@corner@sw{%
+ \global\pgf@x=\the\pgf@pathminx\space
+ \global\pgf@y=\the\pgf@pathminy\space
+ }%
+ \xdef\pgfplotslibrarysurf@corner@ne{%
+ \global\pgf@x=\the\pgf@pathmaxx\space
+ \global\pgf@y=\the\pgf@pathmaxy\space
+ }%
+ \pgf@setpathsizes\pgfplotslibrarysurf@pathsizes@before
+}%
+
+% ATTENTION: see also \pgfplotslibrarysurfstreamcoord@cubicpatch
+% #1: a pgf point.
+% #2: a color coordinate in the range [0,1000]
+\def\pgfplotslibrarysurfstreamcoord#1#2{%
+ \pgfplotsbinarysetbytes\pgfplotslibrarysurf@bytespercoordinate%
+ \pgfplotslibrarysurf@advancestreamlen{\pgfplotslibrarysurf@bytespercoordinate}%
+ \pgfplotslibrarysurf@advancestreamlen{\pgfplotslibrarysurf@bytespercoordinate}%
+ %\pgf@process{#1}% this here causes `{retaining \pgf@x}' messages and pollutes the save stack! Avoid it. See \tracingrestores=2
+ \pgfplotslibrarysurfprocesscoordinate{#1}%
+ % The idea is to map
+ % the low-level point coordinates LINEARLY into [0,2^{8*<bytes>}].
+ %
+ % This is what the pdf standard expects for surface shadings.
+ %
+ % To do that, we simply map
+ % [-16384,16384] linearly into [0,2^{32}]
+ % and write the resulting integer in big endian binary format to
+ % the pdf low level stream.
+ %
+ % The decode procedure tells the pdf viewer how to invert that
+ % stuff.
+ %
+ \pgf@xa=\pgf@x
+ \pgf@sys@bp@correct\pgf@xa%
+ \pgfplotsbinaryencodedimenmaplinearly\pgf@xa
+%\message{POINT \the\c@pgfplots@scanlineindex: ENCODING(x=\the\pgf@x)=\pgfplotsbinaryresult.}\advance\c@pgfplots@scanlineindex by1
+ \t@pgfplots@toka=\expandafter{\pgfplotsbinaryresult}%
+ \pgf@ya=\pgf@y
+ \pgf@sys@bp@correct\pgf@ya%
+ \pgfplotsbinaryencodedimenmaplinearly\pgf@ya
+%\message{ENCODING(y=\the\pgf@y)=\pgfplotsbinaryresult.}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsbinaryresult}%
+ %
+ \pgfplotslibrarysurf@encode@cdata{#2}%
+%\message{\pgfplotsbinaryresult.}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotsbinaryresult}%
+ \ifx\pgfplotslibrarysurf@edgeflag\pgfutil@empty
+ \else
+ % for shading type 4, the edge flag is given for EVERY
+ % coordinate (unlike all other shading types).
+ \pgfplotslibrarysurf@advancestreamlen{1}%
+ \fi
+ \edef\pgfplots@loc@TMPa{\pgfplotslibrarysurf@edgeflag\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \expandafter\pgfplotsapplistXglobalpushback\pgfplots@loc@TMPa\to\pgfplotslibrarysurf@binarystream@accum
+}
+
+% defines \pgfplotsbinaryresult to contain the result of a CDATA
+% entry and advances the stream counters.
+\def\pgfplotslibrarysurf@encode@cdata#1{%
+ \ifpgfplotslibrarysurf@usecolormap
+ \pgfplotslibrarysurf@map@to@FFF@colormap{#1}%
+ \else
+ % oh. No cdata. Ok, then encode stuff individually!
+ % We expect data of the form
+ % {<comma-separated-components>}
+ \edef\pgfplots@loc@TMPa{#1}%
+ \def\pgfplotsretval{}%
+ \expandafter\pgfplotslibrarysurf@encode@cdata@loop\pgfplots@loc@TMPa,,%
+ \global\let\pgfplotsbinaryresult=\pgfplotsretval
+ \fi
+}
+
+\def\pgfplotslibrarysurf@encode@cdata@loop#1,{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ %
+ %
+ \pgfplotslibrarysurf@map@to@FFF@component{#1}%
+ \edef\pgfplotsretval{\pgfplotsretval\pgfplotsbinaryresult}%
+ %
+ %
+ % continue loop:
+ \expandafter\pgfplotslibrarysurf@encode@cdata@loop
+ \fi
+}%
+
+% Defines \pgfplotsbinaryresult
+\def\pgfplotslibrarysurf@map@to@FFF@colormap#1{%
+ \begingroup
+ % read fixed point input (in the range [0,1000]).
+ \pgf@xa=#1pt %
+ % convert to integer (= *65536):
+ \c@pgf@counta=\pgf@xa
+ % provide map [0,1000] -> [0,2^16-1]
+ \divide\c@pgf@counta by1000
+ % now, we have \c@pgf@counta in [0,2^16]. Simply strip it into
+ % the required range, that's ok.
+ \ifnum\c@pgf@counta<0
+ \c@pgf@counta=0
+ \else
+ \ifnum\c@pgf@counta>65535
+ \c@pgf@counta=65535
+ \fi
+ \fi
+ % Now, we have CDATA in the range [0,65535]
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+%\message{ENCODING(C=\pgfplots@glob@TMPa\space for \the\pgf@xa)=}%
+ \endgroup
+ \pgfplotsbinarysetbytes\pgfplotslibrarysurf@bytespercomponent%
+ \pgfplotsbinaryencodeunsigned\pgfplots@glob@TMPa
+ \pgfplotslibrarysurf@advancestreamlen{\pgfplotslibrarysurf@bytespercomponent}%
+}
+
+% Defines \pgfplotsbinaryresult
+\def\pgfplotslibrarysurf@map@to@FFF@component#1{%
+ \begingroup
+ % read fixed point input (in the range [0,1]).
+ \pgf@xa=#1pt %
+ % convert to integer (= *65536):
+ \c@pgf@counta=\pgf@xa
+ % provide map [0,1] -> [0,2^16-1]
+ % well, there is nothing to do! it was in [0,1], we multiplied by 65536 implicitly... that's it.
+ %
+ % now, we have \c@pgf@counta in [0,2^16]. Simply strip it into
+ % the required range, that's ok.
+ \ifnum\c@pgf@counta<0
+ \c@pgf@counta=0
+ \else
+ \ifnum\c@pgf@counta>65535
+ \c@pgf@counta=65535
+ \fi
+ \fi
+ % Now, we have CDATA in the range [0,65535]
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+%\message{ENCODING(C=\pgfplots@glob@TMPa\space for \the\pgf@xa)=}%
+ \endgroup
+ \pgfplotsbinarysetbytes\pgfplotslibrarysurf@bytespercomponent%
+ \pgfplotsbinaryencodeunsigned\pgfplots@glob@TMPa
+ \pgfplotslibrarysurf@advancestreamlen{\pgfplotslibrarysurf@bytespercomponent}%
+}
+
+\def\pgfplotslibrarysurf@translate@colorspace{%
+ \pgfkeysgetvalue{/pgfplots/surf shading/colorspace}\pgfplots@loc@TMPd
+ \edef\pgfplots@loc@TMPd{\pgfplots@loc@TMPd}%
+ \def\pgfplots@loc@TMPa{rgb}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPd
+ \def\pgfplotsretval{RGB}%
+ \else
+ \def\pgfplots@loc@TMPa{cmyk}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPd
+ \def\pgfplotsretval{CMYK}%
+ \else
+ \def\pgfplots@loc@TMPa{cmy}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPd
+ \def\pgfplotsretval{CMY}%
+ \else
+ \def\pgfplots@loc@TMPa{gray}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPd
+ \def\pgfplotsretval{Gray}%
+ \else
+ \pgfplots@error{Sorry, the 'surfshading' lib failed to recognise the choice '/pgfplots/surf shading/colorspace=\pgfplots@loc@TMPd'... maybe you misspelled it?}%
+ \def\pgfplotsretval{RGB}%
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+
+\def\pgfplotslibrarysurfusepath{\pgfusepath{fill}}
+\let\pgfplotslibrarysurfusepath@orig=\pgfplotslibrarysurfusepath
+
+% We DO want to protocol the size of the shading. In fact, we NEED a
+% bounding box which contains the whole shading, otherwise it will be
+% clipped. More precisely, it will be packed into a pdf XForm object
+% and that appears to need a correct bounding box.
+%
+% But we do NOT want to update the picture's bounding box, only that
+% of the pdf XForm. The picture's bounding box will be updated as soon
+% as we *use* the shading anyway (in
+% \pgfplotslibrarysurfdrawinpicture). This here takes care of that detail:
+\def\pgfplotslibrarysurf@protocolsizes@#1#2{%
+ \ifpgf@relevantforpicturesize
+ \pgfplots@loc@tmptrue
+ \else
+ \pgfplots@loc@tmpfalse
+ \fi
+ \pgf@relevantforpicturesizefalse
+ \pgf@protocolsizes{#1}{#2}%
+ \ifpgfplots@loc@tmp
+ \pgf@relevantforpicturesizetrue
+ \fi
+}%
+
+\def\pgfplotslibrarysurfprocesscoordinate#1{%
+ #1\relax%
+ \pgfplotslibrarysurf@protocolsizes@{\pgf@x}{\pgf@y}%
+}%
+\let\pgfplotslibrarysurfprocesscoordinate@orig=\pgfplotslibrarysurfprocesscoordinate%
+
+\def\pgfplotslibrarysurfprocesscoordinate@debug#1{%
+ \pgfinterruptpath
+ \scope
+ \pgftransformshift{#1}%
+ \node[/pgfplots/surf shading/every debug coord] at (0pt,0pt) {\pgfkeysvalueof{/pgfplots/surf shading/debug text}};%
+ \endscope
+ \endpgfinterruptpath
+ #1\relax%
+ \pgfplotslibrarysurf@protocolsizes@{\pgf@x}{\pgf@y}%
+}%
+
+% ATTENTION: see also \pgfplotslibrarysurfstreamcoord
+% special routine for coons type patches and cubic tensor product type
+% patches. It has FIRST all vertices,
+% THEN the cdata. Furthermore, it only has 4 CDATA points, but a total
+% of 12 vertices.
+%
+% #1: a pgf point.
+% #2: a color coordinate in the range [0,1000]
+\def\pgfplotslibrarysurfstreamcoord@cubicpatch#1#2{%
+ \pgfplotsbinarysetbytes\pgfplotslibrarysurf@bytespercoordinate%
+ \pgfplotslibrarysurf@advancestreamlen{\pgfplotslibrarysurf@bytespercoordinate}%
+ \pgfplotslibrarysurf@advancestreamlen{\pgfplotslibrarysurf@bytespercoordinate}%
+ %\pgf@process{#1}% this here causes `{retaining \pgf@x}' messages and pollutes the save stack! Avoid it. See \tracingrestores=2
+ \pgfplotslibrarysurfprocesscoordinate{#1}%
+ % The idea is to map
+ % the low-level point coordinates LINEARLY into [0,2^{8*<bytes>}].
+ %
+ % This is what the pdf standard expects for surface shadings.
+ %
+ % To do that, we simply map
+ % [-16384,16384] linearly into [0,2^{32}]
+ % and write the resulting integer in big endian binary format to
+ % the pdf low level stream.
+ %
+ % The decode procedure tells the pdf viewer how to invert that
+ % stuff.
+ %
+ \pgf@xa=\pgf@x
+ \pgf@sys@bp@correct\pgf@xa%
+ \pgfplotsbinaryencodedimenmaplinearly\pgf@xa
+%\message{POINT \the\c@pgfplots@scanlineindex: ENCODING(x=\the\pgf@x)=\pgfplotsbinaryresult.}\advance\c@pgfplots@scanlineindex by1
+ \t@pgfplots@toka=\expandafter{\pgfplotsbinaryresult}%
+ \pgf@ya=\pgf@y
+ \pgf@sys@bp@correct\pgf@ya%
+ \pgfplotsbinaryencodedimenmaplinearly\pgf@ya
+%\message{ENCODING(y=\the\pgf@y)=\pgfplotsbinaryresult.}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsbinaryresult}%
+ \def\pgfplotslibrarysurf@cubicpatch@hascdata{0}%
+ \ifnum\c@pgfplotslibrarysurf@no=0
+ \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}%
+ % prepend edge flag. it is a new patch.
+ \t@pgfplots@toka=\expandafter{\expandafter\pgfplotslibrarysurf@edgeflag\the\t@pgfplots@toka}%
+ \pgfplotslibrarysurf@advancestreamlen{1}%
+ \else
+ \ifnum\c@pgfplotslibrarysurf@no=3
+ \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}%
+ \else
+ \ifnum\c@pgfplotslibrarysurf@no=6
+ \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}%
+ \else
+ \ifnum\c@pgfplotslibrarysurf@no=9
+ \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \if1\pgfplotslibrarysurf@cubicpatch@hascdata
+ %
+ \pgfplotslibrarysurf@encode@cdata{#2}%
+ %\message{\pgfplotsbinaryresult.}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotslibrarysurf@cubicpatch@cdata}%
+ \xdef\pgfplotslibrarysurf@cubicpatch@cdata{%
+ \the\t@pgfplots@tokc
+ \pgfplotsbinaryresult
+ }%
+ \fi
+ \global\advance\c@pgfplotslibrarysurf@no by1
+ %
+ \ifnum\pgfplotslibrarysurf@cubicpatch@numverts=\c@pgfplotslibrarysurf@no %finalize patch.
+ \t@pgfplots@tokc=\expandafter{\pgfplotslibrarysurf@cubicpatch@cdata}%
+ \global\let\pgfplotslibrarysurf@cubicpatch@cdata=\pgfutil@empty
+ \global\c@pgfplotslibrarysurf@no=0
+ \else
+ \t@pgfplots@tokc={}%
+ \fi
+ % edge flag is already in \t@pgfplots@toka (if this is the first
+ % vertex)
+ \edef\pgfplots@loc@TMPa{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \expandafter\pgfplotsapplistXglobalpushback\pgfplots@loc@TMPa\to\pgfplotslibrarysurf@binarystream@accum
+}
+
+\def\pgfplotslibrarysurfactivateshadefill{%
+ \pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa%
+ \expandafter\pgfutil@addpdfresource@patterns\expandafter{\pgfplots@loc@TMPa}%%
+}
+
+%--------------------------------------------------
+% \def\pgfplotslibrarysurfdraw{%
+% % \pgftext[at=\pgfqpoint{0pt}{0pt}]%
+% {\pgfplotssys@do@surfshading}%
+% }%
+%--------------------------------------------------
+
+\def\pgfplotslibrarysurfdrawinpicture{%
+ \begingroup
+ % this statement will modify both the picture's BB and the path's BB
+ % unless we take control.
+ %
+ % Note that the path's BB will eventually be updated into the
+ % picture's BB as well (meaning that 'overlay' is of no use inside
+ % of this group).
+ %
+ % Implement the 'surf shading/update BB' functionality here:
+ \let\pgfplots@@protocolsizes=\pgf@protocolsizes
+ \ifpgfplotslibrarysurf@updatebb
+ \else
+ % NO update to any BB. this implies 'overlay'
+ % *and* disables updates to the path's BB.
+ \def\pgf@protocolsizes##1##2{\relax}%
+ \fi
+ \pgftext[at=\pgfplotslibrarysurf@corner@sw,left,bottom] {%
+ \begingroup
+ % inside of this box, we *always* need bounding boxes.
+ % restore functionality.
+ \let\pgf@protocolsizes=\pgfplots@@protocolsizes
+ \pgfplotslibrarysurfdraw
+ \endgroup
+% this does NOT work because I can't undo the box' shift:
+%\pgfplotssys@do@surfshading
+ }%
+ \endgroup
+}
+
+\pgfplotsiffileexists{pgflibrarypgfplots.surfshading.\pgfsysdriver}{%
+ \input pgflibrarypgfplots.surfshading.\pgfsysdriver\relax
+ \def\pgflibrarysurfshadingifactive#1#2{#1}%
+}{%
+ \def\pgfplotslibrarysurfdraw@sys{%
+ \pgfplots@error{Sorry, surfshading (shader=interp) is NOT available for the selected driver `\pgfsysdriver'.}%
+ }%
+ \def\pgflibrarysurfshadingifactive#1#2{#2}%
+}
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvipdfmx.def b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvipdfmx.def
new file mode 100644
index 0000000000..4ef45fea3b
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvipdfmx.def
@@ -0,0 +1,179 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2012 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\newcount\c@pgfplotslibrarysurf@streamlen
+
+\def\pgfplotslibrarysurf@initstream{%
+ % binary doesn't work due to limitations of DVI.
+ % We NEED an ASCII encoding.
+ %
+ \def\pgfplotslibrarysurf@filter@encode{ASCIIHexEncode}%
+ \def\pgfplotslibrarysurf@filter@decode{ASCIIHexDecode}%
+ \global\c@pgfplotslibrarysurf@streamlen=0 %
+}%
+
+\def\pgfplotslibrarysurf@advancestreamlen#1{%
+ \global\advance\c@pgfplotslibrarysurf@streamlen by#1\relax
+}%
+
+% The lowlevel call for surface shadings. It uses a pattern type 2
+% dictionary as fill color and has thus several things to do. This is
+% a little bit more complicated than using the '/sh' operator (as
+% other pgf shadings do): the surface shading must be positioned
+% exactly at the requested coordinates, otherwise it is quite useless.
+%
+% Since shadings are *not* affected by changes in the canvas
+% transformation matrix (shifts, rotations etc), it is necessary to
+% pack the shading into a separate xform object which is then rotated
+% and translated correctly.
+%
+% There is just one more transformation necessary: the shift inside of
+% the xform. This shift is done using changes in the canvas
+% transformation matrix and it is UNDONE in the /Matrix argument of
+% the pattern dictionary. This last step can't be done with the /sh
+% operator which is why I am using pattern dictionaries.
+\def\pgfplotslibrarysurfdraw@sys{%
+ \begingroup
+ \setbox\pgfutil@tempboxa=\hbox
+ {%
+ \pgfpicture
+ \pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa%
+ \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
+ \pgfpathrectanglecorners
+ {\pgfplotslibrarysurf@corner@sw}
+ {\pgfplotslibrarysurf@corner@ne}%
+ \pgfplotslibrarysurfusepath
+ \endpgfpicture
+ }%
+ %
+ % NOTE : this code was broken due to some driver in pgf. I fixed
+ % that and brought the fix with pgfplots.
+ %
+ % for some reason, dvipdfmx requires to move the XObject
+ % declaration out of the current stream.
+ % Perhaps I should rephrase and say that for some reason, this appears to be
+ % unnecessary for pdftex.
+ %
+ % FIXME : this might have N^2 time due to "box-append"!
+ \pgfutil@insertatbegincurrentpagefrombox
+ {%
+ \special{pdf: bxobj @pgfplotsX\pgfplotslibrarysurf@count\space
+ width \the\wd\pgfutil@tempboxa\space height \the\ht\pgfutil@tempboxa}%
+ \special{pdf: put @resources
+ % write the pattern resource dictionary of the XObject
+ % (only!):
+ << /Pattern << \pgfplots@glob@TMPa >> >>
+ }%
+ %
+ % no need to add the pattern to the page's resource list!
+ % we do not need this:
+ %\pgfutil@addpdfresource@patterns{\pgfplots@glob@TMPa}%
+ \leavevmode
+ \box\pgfutil@tempboxa
+ \special{pdf: exobj}%
+ }%
+ \endgroup
+ \special{pdf: uxobj @pgfplotsX\pgfplotslibrarysurf@count\space}%
+ \pgfplotsutil@advancestringcounter@global\pgfplotslibrarysurf@count
+}
+
+% To be used inside of a pgfpicture.
+%
+% #1: a macro name. The contents of this macro needs to be written
+% into the pdf pattern dictionary contained in the pdf resources of
+% the current context. The current context is either the current page
+% or an xform object.
+%
+%
+\def\pgfplotssys@do@surfshading@fillpaths#1{%
+ % it contain the BINARY bytes. But it is ASCII encoded, see docs of ASCIIHexEncode.
+ \global\multiply\c@pgfplotslibrarysurf@streamlen by2 %
+ %
+ \def\pgfplots@loc@TMPa{%
+ % stream length will be computed automatically
+ /ShadingType \pgfplotslibrarysurf@type\space
+ /BitsPerCoordinate \pgfplotslibrarysurf@bitspercoordinate\space
+ /BitsPerComponent \pgfplotslibrarysurf@bitspercomponent\space
+ \if5\pgfplotslibrarysurf@type
+ /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols}
+ \else
+ /BitsPerFlag 8
+ \fi
+ /ColorSpace /Device\pgfplotslibrarysurf@colorspace
+ /Decode [\pgfplotslibrarysurf@decode]
+ \ifpgfplotslibrarysurf@usecolormap
+ /Function \pgfkeysvalueof{/pgfplots/surf shading/colormap}
+ \fi
+ \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
+ \else
+ /Filter /\pgfplotslibrarysurf@filter@decode\space
+ \fi
+ /Length \the\c@pgfplotslibrarysurf@streamlen
+ }%
+ %
+ \pgf@process{\pgfpointdiff{\pgfplotslibrarysurf@corner@sw}{\pgfkeysvalueof{/pgfplots/surf shading/anchor}}}%
+ \pgf@sys@bp@correct\pgf@x%
+ \pgf@sys@bp@correct\pgf@y%
+ %
+ %\noexpand\pgfutil@insertatbegincurrentpagefrombox
+ {%
+ \special{pdf: object @pgfplotsShading\pgfplotslibrarysurf@count\space << \pgfplots@loc@TMPa >>
+ stream^^J%
+ \pgfplotslibrarysurf@binarystream
+ endstream
+ }%
+ \special{pdf: close @pgfplotsShading\pgfplotslibrarysurf@count\space }%
+ \special{pdf: object @pgfplotsPattern\pgfplotslibrarysurf@count\space <<
+ /Type /Pattern
+ /PatternType 2
+ % /Matrix [\pgf@pt@aa\space\pgf@pt@ab\space\pgf@pt@ba\space\pgf@pt@bb\space\pgf@sys@tonumber\pgf@pt@x\space\pgf@sys@tonumber\pgf@pt@y]
+ % FIXME: INCORPORATE TIKZ CM
+ /Matrix [1 0 0 1 \pgf@sys@tonumber\pgf@x\space \pgf@sys@tonumber\pgf@y] %226.533 518.141]
+ %--------------------------------------------------
+ % /ExtGState
+ % <<
+ % /LW 2
+ % /OP true
+ % /OPM 1
+ % >>
+ %--------------------------------------------------
+ /Shading @pgfplotsShading\pgfplotslibrarysurf@count
+ >>
+ }%
+ \special{pdf: close @pgfplotsPattern\pgfplotslibrarysurf@count\space }%
+ }%
+ \edef#1{%
+ /pgfplotsSurface\pgfplotslibrarysurf@count\space @pgfplotsPattern\pgfplotslibrarysurf@count
+ }%
+ %
+ % I inlined \pgfsys@setpatterncolored here because it appears to be
+ % natural - and in order to bring this driver to PGF 2.00 (which
+ % would fail otherwise)
+ \pgfsysprotocol@literal{/Pattern cs /pgfplotsSurface\pgfplotslibrarysurf@count\space scn}%
+}
+
+\endinput
+% vi: ft=tex
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvips.def b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvips.def
new file mode 100644
index 0000000000..69db3f9dbe
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-dvips.def
@@ -0,0 +1,114 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+
+\def\pgfplotslibrarysurf@initstream{%
+ \if\pgfplotslibrarysurf@bytespercoordinate4%
+ \pgfplots@warning{************** The generated postscript file may not be compatible with all viewers. Consider using \string\pgfplotsset{surf shading/precision=postscript} for improved compatibility. Or: convert it to pdf, that will work correctly. **************}%
+ \fi
+ % binary doesn't work due to limitations of DVI.
+ % We NEED an ASCII encoding.
+ %
+ \def\pgfplotslibrarysurf@filter@encode{ASCIIHexEncode}%
+ \def\pgfplotslibrarysurf@filter@decode{ASCIIHexDecode}%
+}%
+
+% The lowlevel call for surface shadings. It uses a pattern type 2
+% dictionary as fill color and has thus several things to do.
+%
+% It appears the dvips implementation is simpler than the pdftex
+% implementation - I did not need to adjust the matrix (don't know
+% why).
+\def\pgfplotslibrarysurfdraw@sys{%
+ \pgfpicture
+ \pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa%
+ \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
+ \pgfpathrectanglecorners
+ {\pgfplotslibrarysurf@corner@sw}
+ {\pgfplotslibrarysurf@corner@ne}%
+ \pgfplotslibrarysurfusepath
+ \endpgfpicture
+ \leavevmode% ??
+}
+
+% To be used inside of a pgfpicture.
+%
+% #1: a macro name. The contents of this macro needs to be written
+% into the pdf pattern dictionary contained in the pdf resources of
+% the current context. The current context is either the current page
+% or an xform object.
+%
+%
+\def\pgfplotssys@do@surfshading@fillpaths#1{%
+%http://www.ghostscript.com/pipermail/gs-devel/2002-September/005763.html
+%http://www.tek-tips.com/viewthread.cfm?qid=1183719&page=4
+% \pgf@process{\pgfpointdiff{\pgfplotslibrarysurf@corner@sw}{\pgfkeysvalueof{/pgfplots/surf shading/anchor}}}%
+% \pgf@sys@bp@correct\pgf@x%
+% \pgf@sys@bp@correct\pgf@y%
+ \pgfsys@invoke{%
+ <<
+ %/Type /Pattern
+ /PatternType 2
+ /Shading
+ <<
+ /ShadingType \pgfplotslibrarysurf@type\space
+ /BitsPerCoordinate \pgfplotslibrarysurf@bitspercoordinate\space
+ /BitsPerComponent \pgfplotslibrarysurf@bitspercomponent\space % Note: this here is the reason why I can't use ASCII85Decode
+ \if5\pgfplotslibrarysurf@type
+ /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols}
+ \else
+ /BitsPerFlag 8
+ \fi
+ /ColorSpace /Device\pgfplotslibrarysurf@colorspace
+ /Decode [\pgfplotslibrarysurf@decode]
+ \ifpgfplotslibrarysurf@usecolormap
+ /Function \pgfkeysvalueof{/pgfplots/surf shading/colormap}
+ \fi
+ /DataSource
+ currentfile
+ % direct binary output not possible: DVI
+ % doesn't support it (?)
+ %<< /EODCount \pgfplotslibrarysurf@binarystream@len\space /EODString () >> /SubFileDecode filter
+ % not completely implemented :
+ %/ASCII85Decode filter
+ % works:
+ /ASCIIHexDecode filter
+ /ReusableStreamDecode filter
+ \pgfplotslibrarysurf@binarystream
+ %\csname pgfp@bin@126\endcsname% tilde ~> is end-of-input indicator for ASCII85Decode
+ > % end-of-input indicator for ASCIIHexDecode
+ >>
+ >> [ 1 0 0 1 0 0 ] makepattern setpattern
+ % I don't know why I don't need the shifts here !? But it
+ % appears to work, so never mind.
+% >> [ 1 0 0 1 \pgf@sys@tonumber\pgf@x\space \pgf@sys@tonumber\pgf@y ] makepattern setpattern
+ % 'setpattern' is a shortcut for changing the colorspace and
+ % the color to pattern.
+ }%
+}
+
+\endinput
+% vi: ft=tex
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatex.def b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatex.def
new file mode 100644
index 0000000000..0046daadae
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatex.def
@@ -0,0 +1,168 @@
+%--------------------------------------------
+% $Header: /cvsroot/pgfplots/pgfplots/generic/pgfplots/sys/pgflibrarysurfshading.pgfsys-pdftex.def,v 1.1 2009/06/11 07:14:52 ludewich Exp $
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\ifnum\luatexversion<95
+ \immediate\write-1{luatex driver of pgfplots: detected lua version \the\luatexversion; falling back to old pdftex driver^^J}%
+ \input pgflibrarypgfplots.surfshading.pgfsys-pdftex.def
+ \expandafter\endinput
+\fi
+
+
+% The lowlevel call for surface shadings. It uses a pattern type 2
+% dictionary as fill color and has thus several things to do. This is
+% a little bit more complicated than using the '/sh' operator (as
+% other pgf shadings do): the surface shading must be positioned
+% exactly at the requested coordinates, otherwise it is quite useless.
+%
+% Since shadings are *not* affected by changes in the canvas
+% transformation matrix (shifts, rotations etc), it is necessary to
+% pack the shading into a separate xform object which is then rotated
+% and translated correctly.
+%
+% There is just one more transformation necessary: the shift inside of
+% the xform. This shift is done using changes in the canvas
+% transformation matrix and it is UNDONE in the /Matrix argument of
+% the pattern dictionary. This last step can't be done with the /sh
+% operator which is why I am using pattern dictionaries.
+\def\pgfplotslibrarysurfdraw@sys{%
+ \begingroup
+ %\pgfinterruptpicture% needed?
+ \setbox\pgfutil@tempboxa=\hbox{%
+ \pgfpicture
+ \pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa%
+ \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
+ \pgfpathrectanglecorners
+ {\pgfplotslibrarysurf@corner@sw}
+ {\pgfplotslibrarysurf@corner@ne}%
+ \pgfplotslibrarysurfusepath
+ \endpgfpicture
+ }%
+ \immediate\saveboxresource resources{
+ /Pattern << \pgfplots@glob@TMPa >> % write the pattern resource dictionary
+ }\pgfutil@tempboxa
+ \leavevmode
+ \useboxresource\lastsavedboxresourceindex
+ %\endpgfinterruptpicture
+ \endgroup
+}
+
+% To be used inside of a pgfpicture.
+%
+% #1: a macro name. The contents of this macro needs to be written
+% into the pdf pattern dictionary contained in the pdf resources of
+% the current context. The current context is either the current page
+% or an xform object.
+%
+%
+\def\pgfplotssys@do@surfshading@fillpaths#1{%
+ \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
+ \else
+ % Unfortunately, there is a bug in pdftex/luatex: if we
+ % provide a /Filter as attr, and pdftex compresses the stream,
+ % it overwrites the /Filter argument -- and the viewer cannot
+ % decode the stream. We have to deactivate compression here:
+ \pdfvariable compresslevel=0
+ \fi
+ \def\pgfplots@loc@TMPa{%
+ % stream length will be computed automatically
+ /ShadingType \pgfplotslibrarysurf@type\space
+ /BitsPerCoordinate \pgfplotslibrarysurf@bitspercoordinate\space
+ /BitsPerComponent \pgfplotslibrarysurf@bitspercomponent\space
+ \if5\pgfplotslibrarysurf@type
+ /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols}
+ \else
+ /BitsPerFlag 8
+ \fi
+ /ColorSpace /Device\pgfplotslibrarysurf@colorspace
+ /Decode [\pgfplotslibrarysurf@decode]
+ \ifpgfplotslibrarysurf@usecolormap
+ /Function \pgfkeysvalueof{/pgfplots/surf shading/colormap}
+ \fi
+ \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
+ \else
+ /Filter /\pgfplotslibrarysurf@filter@decode\space
+ \fi
+ }%
+ %
+ % \pgfplots@loc@TMPb := final boolean luaBinaryEncoding;
+ \pgfutil@IfUndefined{directlua}{%
+ \def\pgfplots@loc@TMPb{0}%
+ }{%
+ \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
+ % ah - we have binary encoding (the standard).
+ \def\pgfplots@loc@TMPb{1}%
+ \else
+ % ah - base 16 ASCII encoding:
+ \def\pgfplots@loc@TMPb{0}%
+ \fi
+ }%
+ \if0\pgfplots@loc@TMPb
+ % no lua binary encoding. Use standard pdftex operations:
+ \immediate\pdfextension obj stream attr {%
+ \pgfplots@loc@TMPa
+ } {%
+ \pgfplotslibrarysurf@binarystream
+ }%
+ \edef\pgfplots@loc@TMPa{\the\numexpr\pdffeedback lastobj\relax}%
+ \else
+ % special handling for luatex binary encoding (see docs for \pgfplotsbinarytoluabinary):
+ \pgfplotsbinarytoluabinary{\pgfplotslibrarysurf@binarystream}%
+ \edef\pgfplots@loc@TMPa{%
+ \directlua{%
+ tex.print(pdf.immediateobj(\pgfplotsDQ stream\pgfplotsDQ , pgfplotsretval, \pgfplotsDQ \pgfplots@loc@TMPa\pgfplotsDQ ));
+ pgfplotsretval=nil;
+ }%
+ }%
+ \fi
+ \pgf@process{\pgfpointdiff{\pgfplotslibrarysurf@corner@sw}{\pgfkeysvalueof{/pgfplots/surf shading/anchor}}}%
+ \pgf@sys@bp@correct\pgf@x%
+ \pgf@sys@bp@correct\pgf@y%
+ \immediate\pdfextension obj {<<
+ /Type /Pattern
+ /PatternType 2
+% /Matrix [\pgf@pt@aa\space\pgf@pt@ab\space\pgf@pt@ba\space\pgf@pt@bb\space\pgf@sys@tonumber\pgf@pt@x\space\pgf@sys@tonumber\pgf@pt@y]
+ % FIXME: INCORPORATE TIKZ CM
+ /Matrix [1 0 0 1 \pgf@sys@tonumber\pgf@x\space \pgf@sys@tonumber\pgf@y] %226.533 518.141]
+ %--------------------------------------------------
+ % /ExtGState
+ % <<
+ % /LW 2
+ % /OP true
+ % /OPM 1
+ % >>
+ %--------------------------------------------------
+ /Shading \pgfplots@loc@TMPa\space 0 R
+ >>}%
+ \edef#1{%
+ /pgfpatPlotsurface\pgfplotslibrarysurf@count\space \the\numexpr\pdffeedback lastobj\relax\space 0 R
+ }%
+ \pgfsys@setpatterncolored{Plotsurface\pgfplotslibrarysurf@count}%
+ \pgfplotsutil@advancestringcounter@global\pgfplotslibrarysurf@count
+}
+
+\endinput
+% vi: ft=tex
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatexpatch.def b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatexpatch.def
new file mode 100644
index 0000000000..6c78ddf966
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-luatexpatch.def
@@ -0,0 +1,30 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2012 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\input pgflibrarypgfplots.surfshading.pgfsys-luatex.def
+
+\endinput
+% vi: ft=tex
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def
new file mode 100644
index 0000000000..a56f50ec72
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def
@@ -0,0 +1,162 @@
+%--------------------------------------------
+% $Header: /cvsroot/pgfplots/pgfplots/generic/pgfplots/sys/pgflibrarysurfshading.pgfsys-pdftex.def,v 1.1 2009/06/11 07:14:52 ludewich Exp $
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% The lowlevel call for surface shadings. It uses a pattern type 2
+% dictionary as fill color and has thus several things to do. This is
+% a little bit more complicated than using the '/sh' operator (as
+% other pgf shadings do): the surface shading must be positioned
+% exactly at the requested coordinates, otherwise it is quite useless.
+%
+% Since shadings are *not* affected by changes in the canvas
+% transformation matrix (shifts, rotations etc), it is necessary to
+% pack the shading into a separate xform object which is then rotated
+% and translated correctly.
+%
+% There is just one more transformation necessary: the shift inside of
+% the xform. This shift is done using changes in the canvas
+% transformation matrix and it is UNDONE in the /Matrix argument of
+% the pattern dictionary. This last step can't be done with the /sh
+% operator which is why I am using pattern dictionaries.
+\def\pgfplotslibrarysurfdraw@sys{%
+ \begingroup
+ %\pgfinterruptpicture% needed?
+ \setbox\pgfutil@tempboxa=\hbox{%
+ \pgfpicture
+ \pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa%
+ \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
+ \pgfpathrectanglecorners
+ {\pgfplotslibrarysurf@corner@sw}
+ {\pgfplotslibrarysurf@corner@ne}%
+ \pgfplotslibrarysurfusepath
+ \endpgfpicture
+ }%
+ \immediate\pdfxform resources{
+ /Pattern << \pgfplots@glob@TMPa >> % write the pattern resource dictionary
+ }\pgfutil@tempboxa
+ \leavevmode
+ \pdfrefxform\pdflastxform
+ %\endpgfinterruptpicture
+ \endgroup
+}
+
+% To be used inside of a pgfpicture.
+%
+% #1: a macro name. The contents of this macro needs to be written
+% into the pdf pattern dictionary contained in the pdf resources of
+% the current context. The current context is either the current page
+% or an xform object.
+%
+%
+\def\pgfplotssys@do@surfshading@fillpaths#1{%
+ \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
+ \else
+ % Unfortunately, there is a bug in pdftex/luatex: if we
+ % provide a /Filter as attr, and pdftex compresses the stream,
+ % it overwrites the /Filter argument -- and the viewer cannot
+ % decode the stream. We have to deactivate compression here:
+ \pdfcompresslevel=0
+ \fi
+ \def\pgfplots@loc@TMPa{%
+ % stream length will be computed automatically
+ /ShadingType \pgfplotslibrarysurf@type\space
+ /BitsPerCoordinate \pgfplotslibrarysurf@bitspercoordinate\space
+ /BitsPerComponent \pgfplotslibrarysurf@bitspercomponent\space
+ \if5\pgfplotslibrarysurf@type
+ /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols}
+ \else
+ /BitsPerFlag 8
+ \fi
+ /ColorSpace /Device\pgfplotslibrarysurf@colorspace
+ /Decode [\pgfplotslibrarysurf@decode]
+ \ifpgfplotslibrarysurf@usecolormap
+ /Function \pgfkeysvalueof{/pgfplots/surf shading/colormap}
+ \fi
+ \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
+ \else
+ /Filter /\pgfplotslibrarysurf@filter@decode\space
+ \fi
+ %/AntiAlias \space true
+ }%
+ %
+ % \pgfplots@loc@TMPb := final boolean luaBinaryEncoding;
+ \pgfutil@IfUndefined{directlua}{%
+ \def\pgfplots@loc@TMPb{0}%
+ }{%
+ \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty
+ % ah - we have binary encoding (the standard).
+ \def\pgfplots@loc@TMPb{1}%
+ \else
+ % ah - base 16 ASCII encoding:
+ \def\pgfplots@loc@TMPb{0}%
+ \fi
+ }%
+ \if0\pgfplots@loc@TMPb
+ % no lua binary encoding. Use standard pdftex operations:
+ \immediate\pdfobj stream attr {%
+ \pgfplots@loc@TMPa
+ } {%
+ \pgfplotslibrarysurf@binarystream
+ }%
+ \edef\pgfplots@loc@TMPa{\the\pdflastobj}%
+ \else
+ % special handling for luatex binary encoding (see docs for \pgfplotsbinarytoluabinary):
+ \pgfplotsbinarytoluabinary{\pgfplotslibrarysurf@binarystream}%
+ \edef\pgfplots@loc@TMPa{%
+ \directlua{%
+ tex.print(pdf.immediateobj(\pgfplotsDQ stream\pgfplotsDQ , pgfplotsretval, \pgfplotsDQ \pgfplots@loc@TMPa\pgfplotsDQ ));
+ pgfplotsretval=nil;
+ }%
+ }%
+ \fi
+ \pgf@process{\pgfpointdiff{\pgfplotslibrarysurf@corner@sw}{\pgfkeysvalueof{/pgfplots/surf shading/anchor}}}%
+ \pgf@sys@bp@correct\pgf@x%
+ \pgf@sys@bp@correct\pgf@y%
+ \immediate\pdfobj {<<
+ /Type /Pattern
+ /PatternType 2
+% /Matrix [\pgf@pt@aa\space\pgf@pt@ab\space\pgf@pt@ba\space\pgf@pt@bb\space\pgf@sys@tonumber\pgf@pt@x\space\pgf@sys@tonumber\pgf@pt@y]
+ % FIXME: INCORPORATE TIKZ CM
+ /Matrix [1 0 0 1 \pgf@sys@tonumber\pgf@x\space \pgf@sys@tonumber\pgf@y] %226.533 518.141]
+ %--------------------------------------------------
+ % /ExtGState
+ % <<
+ % /LW 2
+ % /OP true
+ % /OPM 1
+ % >>
+ %--------------------------------------------------
+ /Shading \pgfplots@loc@TMPa\space 0 R
+ >>}%
+ \edef#1{%
+ /pgfpatPlotsurface\pgfplotslibrarysurf@count\space \the\pdflastobj\space 0 R
+ }%
+ \pgfsys@setpatterncolored{Plotsurface\pgfplotslibrarysurf@count}%
+ \pgfplotsutil@advancestringcounter@global\pgfplotslibrarysurf@count
+}
+
+\endinput
+% vi: ft=tex
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-xetex.def b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-xetex.def
new file mode 100644
index 0000000000..1f9245b276
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgflibrarypgfplots.surfshading.pgfsys-xetex.def
@@ -0,0 +1,30 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2012 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\input pgflibrarypgfplots.surfshading.pgfsys-dvipdfmx.def
+
+\endinput
+% vi: ft=tex
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.code.tex
new file mode 100644
index 0000000000..7ca9e48a74
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.code.tex
@@ -0,0 +1,50 @@
+
+% Token-wise equals; will expand arguments with \edef
+% #1: expected
+% #2: actual
+% #3: message
+\def\pgfplotsassertequalstok#1#2#3{%
+ \edef\pgfplots@assert@a{#1}%
+ \edef\pgfplots@assert@b{#2}%
+ \pgfplotscommandtostring\pgfplots@assert@a\pgfplots@assert@a
+ \pgfplotscommandtostring\pgfplots@assert@b\pgfplots@assert@b
+ \ifx\pgfplots@assert@a\pgfplots@assert@b
+ \else
+ \pgfplotsassertfail{#3 ^^Jexpected '#1'^^J but was '#2'}%
+ \fi
+}%
+
+% Token-wise equals of two MACROS; no expansion
+% #1: expected
+% #2: actual
+% #3: message
+\def\pgfplotsassertequalstoknoexpand#1#2#3{%
+ \ifx#1#2%
+ \else
+ \pgfplotsassertfail{#3 expected ^^J '\meaning#1' but was ^^J '\meaning#2'}%
+ \fi
+}%
+
+\def\pgfplotsassertfail#1{%
+ \pgfplots@error{Assertion failed: #1}%
+}%
+
+% Float-equals
+% #1: expected
+% #2: actual
+% #3: message
+\def\pgfplotsassertequalsfloat#1#2#3{%
+ \edef\pgfplots@assert@a{#1}%
+ \edef\pgfplots@assert@b{#2}%
+ %
+ \pgfmathfloatparsenumber{\pgfplots@assert@a}%
+ \let\pgfplots@assert@a\pgfmathresult
+ %
+ \pgfmathfloatparsenumber{\pgfplots@assert@b}%
+ \let\pgfplots@assert@b\pgfmathresult
+ %
+ \pgfmathfloatifapproxequalrel{\pgfplots@assert@a}{\pgfplots@assert@b}{%
+ }{%
+ \pgfplotsassertfail{#3 ^^Jexpected '#1'^^J but was '#2'}%
+ }%
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.sty b/graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.sty
new file mode 100644
index 0000000000..431c582a62
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.assert.sty
@@ -0,0 +1,2 @@
+
+\input pgfplots.assert.code.tex
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.code.tex
new file mode 100644
index 0000000000..f534dc47e8
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.code.tex
@@ -0,0 +1,12647 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2013 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\edef\pgfplots@oldcatcodesemicolon{\the\catcode`\;}%
+\edef\pgfplots@oldcatcodedoublequote{\the\catcode`\"}%
+\catcode`\;=12
+\catcode`\"=12
+
+\input pgfplotscore.code.tex
+\input pgfplotslibrary.code.tex
+\input pgfplotsoldpgfsupp_loader.code.tex
+\input pgfplotsutil.code.tex
+\input pgfplotscolormap.code.tex
+\input pgfplotsstackedplots.code.tex
+\input pgfplotsplothandlers.code.tex
+\input pgfplots.scaling.code.tex
+\input pgfplotscoordprocessing.code.tex
+\input pgfplots.errorbars.code.tex
+\input pgfplots.markers.code.tex
+\input pgfplotsticks.code.tex
+\input pgfplots.paths.code.tex
+
+
+\usetikzlibrary{decorations,decorations.pathmorphing,decorations.pathreplacing}
+
+% FIXME: reduce number of variables!
+
+\newif\ifpgfplots@bb@isactive
+\newif\ifpgfplots@xislinear
+\newif\ifpgfplots@has@label@information
+\newif\ifpgfplots@yislinear
+\newif\ifpgfplots@zislinear
+\newif\ifpgfplots@reverse@legend
+\newif\ifpgfplots@transpose@legend
+\newif\ifpgfplots@allow@reversal@of@rel@axis@cs
+\newif\ifpgfplots@scanline@verbose
+\newif\ifpgfplots@plot@graphics@autoadjustaxis
+\newif\ifpgfplots@scaleuniformly@warning
+\newif\ifpgfplots@hide@obscured@xtick
+\newif\ifpgfplots@hide@obscured@ytick
+\newif\ifpgfplots@hide@obscured@ztick
+\newif\ifpgfplots@enable@tick@line@clipping
+\newcount\pgfplots@numplots
+\newdimen\pgfplots@xmin@reg
+\newdimen\pgfplots@xmax@reg
+\newdimen\pgfplots@ymin@reg
+\newdimen\pgfplots@ymax@reg
+\newdimen\pgfplots@zmin@reg
+\newdimen\pgfplots@zmax@reg
+\newif\ifpgfplots@warn@for@filter@discards
+\newif\ifpgfplots@isuniformtick
+\newif\ifpgfplotsplothandlermesh@patch@type@sampling
+\newif\ifpgfplots@clip@limits@compatmode
+\newif\ifpgfplots@clip@limits@x
+\newif\ifpgfplots@clip@limits@y
+\newif\ifpgfplots@clip@limits@z
+\newif\ifpgfplots@clip
+\newif\ifpgfplots@plot@coords@mathparser
+\pgfplots@plot@coords@mathparsertrue
+\newif\ifpgfplots@enlargelimits
+\newif\ifpgfplots@enlargelimits@respect@figure@size
+\pgfplots@enlargelimits@respect@figure@sizetrue
+\newif\ifpgfplots@enlargelimits@rel@thresh
+\newif\ifpgfplots@enlargelimits@auto
+\newif\ifpgfplots@tickshow
+\newif\ifpgfplots@scatterplotenabled
+\newif\ifpgfplots@xminorticks
+\newif\ifpgfplots@xmajorticks
+\newif\ifpgfplots@yminorticks
+\newif\ifpgfplots@ymajorticks
+\newif\ifpgfplots@zminorticks
+\newif\ifpgfplots@zmajorticks
+\newif\ifpgfplots@xminorgrids
+\newif\ifpgfplots@xmajorgrids
+\newif\ifpgfplots@yminorgrids
+\newif\ifpgfplots@ymajorgrids
+\newif\ifpgfplots@zminorgrids
+\newif\ifpgfplots@zmajorgrids
+\newif\ifpgfplots@clip@marker@paths
+\newif\ifpgfplots@axis@on@top
+\newif\ifpgfplots@separate@axis@lines
+\newif\ifpgfplots@identify@log@minor@tick@pos
+\newif\ifpgfplots@disablelogfilter@x
+\newif\ifpgfplots@disablelogfilter@y
+\newif\ifpgfplots@disablelogfilter@z
+\newif\ifpgfplots@disabledatascaling
+\newif\ifpgfplots@hide@x
+\newif\ifpgfplots@hide@y
+\newif\ifpgfplots@hide@z
+\newif\ifpgfplots@shownothingof@x
+\newif\ifpgfplots@shownothingof@y
+\newif\ifpgfplots@shownothingof@z
+\newif\ifpgfplots@is@old@list@format
+\newif\ifpgfplots@errorbars@enabled
+\newif\ifpgfplots@scale@only@axis
+\newif\ifpgfplots@xticklabel@interval
+\newif\ifpgfplots@yticklabel@interval
+\newif\ifpgfplots@zticklabel@interval
+\newif\ifpgfplots@stacked@reverse
+\newif\ifpgfplots@stacked@plus
+\newif\ifpgfplots@stacked@ignores@zero
+\newif\ifpgfplots@plot@file@skipfirst
+\newif\ifpgfplots@threedim
+\newif\ifpgfplots@curplot@threedim
+\newif\ifpgfplotsthreedim
+\newif\ifpgfplots@curplot@isirrelevant
+\newif\ifpgfplots@colorbar
+\newif\ifpgfplots@deprecated@anchors
+\newif\ifpgfplots@translategnuplot
+\pgfplots@translategnuplottrue
+\let\pgfnodepartimagebox=\pgfnodeparttextbox
+\newif\ifpgfplotsplothandlermesh@internaldepth
+\newif\ifpgfplotsplothandlermesh@hide@refined@edges
+\newif\ifpgfplots@has@cell@picture
+\newif\ifpgfplots@substitute@pgfpoint
+\newif\ifpgfplots@LUA@backend@supported
+\newif\ifpgfplots@threedim@log@sampling
+
+\newif\ifpgfplots@collect@firstplot@astick
+\newif\ifpgfplots@units@use
+
+\def\pgfplots@errorbars@xdirection{0}% pre-init, see below
+\def\pgfplots@errorbars@ydirection{0}%
+\def\pgfplots@errorbars@zdirection{0}%
+
+\def\axisdefaultwidth{240pt}
+\def\axisdefaultheight{207pt}
+
+\def\pgfplotsifaxisthreedim#1#2{\ifpgfplots@threedim #1\else #2\fi}%
+\def\pgfplotsifcurplotthreedim#1#2{\ifpgfplots@curplot@threedim #1\else #2\fi}%
+
+% Invokes '#2' if a cycle list named '#1' exists and '#3' if not.
+\long\def\pgfplotsifcyclelistexists#1#2#3{%
+ \pgfutil@IfUndefined{pgfp@cyclist@\string#1@}{%
+ \pgfkeysifdefined{/pgfplots/cycle list/\string#1/.@cmd}{%
+ \pgfplotsthrow{cycle list instantiation needed}{#1}\pgfeov
+ % note that we cannot instantiate it lazily at this point :-(
+ }{}%
+ #3%
+ }{%
+ #2%
+ }%
+}%
+
+\def\pgfplots@label@upgrade@warning{%
+ \ifpgfplots@threedim
+ \pgfplotswarning{center lines upgrade required}\pgfeov%
+ \global\let\pgfplots@label@upgrade@warning=\relax
+ \fi
+}%
+
+% Creates a named plot cycle list.
+%
+% #1: the name of the final list. Can be used in 'cycle list name'
+% #2: the list entries.
+% It accepts the following formats:
+% \pgfplotscreateplotcyclelist{name}{[of colormap]}%
+% \pgfplotscreateplotcyclelist{name}{[of colormap=<colormap name>]}%
+% \pgfplotscreateplotcyclelist{name}{[colors of colormap={<list> of <colormap name>}]}%
+% \pgfplotscreateplotcyclelist{name}{[indices of colormap={<list> of <colormap name>}]}%
+% \pgfplotscreateplotcyclelist{name}{[* of colormap as it is also available inside of colormap definitions]}
+% \pgfplotscreateplotcyclelist{name}{comma-separated-list}
+% \pgfplotscreateplotcyclelist{name}{'\\'-separated list(requires the last item to be terminated by '\\')}
+\def\pgfplotscreateplotcyclelist#1#2{%
+ \pgfplotscreateplotcyclelist@check@specials{#1}{#2}#2\pgfplots@EOI%
+}%
+
+\def\pgfplotscreateplotcyclelist@check@specials#1#2{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotscreateplotcyclelist@check@specials@{#1}%
+ }{%
+ \pgfplotscreateplotcyclelist@check@specials@@{#1}{#2}%
+ }%
+}%
+\def\pgfplotscreateplotcyclelist@check@specials@#1[#2]{%
+ % the 'of colormap' feature uses the very same functionality as
+ % the related functionality in colormap definitions.
+ % We only replace two routines:
+ %
+ \begingroup
+ \let\pgfplots@createcolormap@special@process@single@define=\pgfplots@createcolormap@special@process@single@define@CYCLE
+ \let\pgfplots@createcolormap@special@process@list@separator=\pgfplots@createcolormap@special@process@list@separator@CYCLE
+ \pgfplots@of@colormap@getresult{#2}%
+ \global\let\pgfplots@glob@TMPa=\pgfplotsretval
+ \endgroup
+ %
+ \t@pgfplots@tokb={#1}%
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPa}%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplotscreateplotcyclelist{\the\t@pgfplots@tokb}{\the\t@pgfplots@toka}}%
+%\message{#2->^^J \meaning\pgfplots@loc@TMPa^^J}%
+ \pgfplots@loc@TMPa
+ %
+ % FIXME implement:
+ %--------------------------------------------------
+ % \ifnum\pgfplots@glob@TMPb>\pgfkeysvalueof{/pgfplots/@cycle/max size} %
+ % % cycle lists have quadratic runtime. Use small ones!
+ % \pgfplotswarning{cycle list size limit reached}\pgfeov
+ % \breakforeach
+ % \fi
+ %--------------------------------------------------
+ %
+ \pgfutil@ifnextchar\pgfplots@EOI{%
+ \pgfplots@gobble@until@EOI
+ }{%
+ \pgfplotscreateplotcyclelist@check@specials@gobble@error{#2}%
+ }%
+}%
+
+\def\pgfplotscreateplotcyclelist@check@specials@gobble@error#1#2\pgfplots@EOI{%
+ \t@pgfplots@tokb={[#1]}%
+ \t@pgfplots@toka={#2}%
+ \pgfplots@error{Encountered unexpected characters '\the\t@pgfplots@toka' after option '\the\t@pgfplots@tokb' in cycle list definition}%
+}%
+\def\pgfplotscreateplotcyclelist@check@specials@@#1#2#3\pgfplots@EOI{%
+ \expandafter\pgfplots@assign@list\csname pgfp@cyclist@\string#1@\endcsname{#2}%
+}
+
+\pgfqkeys{/pgfplots/@cycle}{%
+ max size/.initial=80,
+}
+
+\pgfplotscreateplotcyclelist{black white}{%
+ every mark/.append style={fill=gray},mark=*\\%
+ every mark/.append style={fill=gray},mark=square*\\%
+ every mark/.append style={fill=gray},mark=otimes*\\%
+ mark=star\\%
+ every mark/.append style={fill=gray},mark=diamond*\\%
+ densely dashed,every mark/.append style={solid,fill=gray},mark=*\\%
+ densely dashed,every mark/.append style={solid,fill=gray},mark=square*\\%
+ densely dashed,every mark/.append style={solid,fill=gray},mark=otimes*\\%
+ densely dashed,every mark/.append style={solid},mark=star\\%
+ densely dashed,every mark/.append style={solid,fill=gray},mark=diamond*\\%
+}
+
+\pgfplotscreateplotcyclelist{color}{%
+ blue,every mark/.append style={fill=blue!80!black},mark=*\\%
+ red,every mark/.append style={fill=red!80!black},mark=square*\\%
+ brown!60!black,every mark/.append style={fill=brown!80!black},mark=otimes*\\%
+ black,mark=star\\%
+ blue,every mark/.append style={fill=blue!80!black},mark=diamond*\\%
+ red,densely dashed,every mark/.append style={solid,fill=red!80!black},mark=*\\%
+ brown!60!black,densely dashed,every mark/.append style={solid,fill=brown!80!black},mark=square*\\%
+ black,densely dashed,every mark/.append style={solid,fill=gray},mark=otimes*\\%
+ blue,densely dashed,mark=star,every mark/.append style=solid\\%
+ red,densely dashed,every mark/.append style={solid,fill=red!80!black},mark=diamond*\\%
+}
+\pgfplotscreateplotcyclelist{linestyles}{solid,dashed,dotted}
+\pgfplotscreateplotcyclelist{linestyles*}{solid,dashed,dotted,dashdotted,dashdotdotted}
+\pgfplotscreateplotcyclelist{color list}{red,blue,black,yellow,brown,teal,orange,violet,cyan,green!70!black,magenta,gray}
+\pgfplotscreateplotcyclelist{mark list}{%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=square*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=triangle*\\%
+ every mark/.append style={solid},mark=star\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=diamond*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill!40},mark=otimes*\\%
+ every mark/.append style={solid},mark=|\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=pentagon*\\%
+ every mark/.append style={solid},mark=text,text mark=p\\%
+ every mark/.append style={solid},mark=text,text mark=a\\%
+}
+\pgfplotscreateplotcyclelist{mark list*}{%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=square*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=triangle*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfsquare*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=pentagon*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfcircle*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill,rotate=180},mark=halfdiamond*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill!40},mark=otimes*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=diamond*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfsquare right*\\%
+ every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfsquare left*\\%
+}
+\def\pgfplots@mark@list@fill{\pgfkeysvalueof{/pgfplots/mark list fill}}
+\let\pgfplotsmarklistfill=\pgfplots@mark@list@fill
+\pgfplotscreateplotcyclelist{exotic}{%
+ teal,every mark/.append style={fill=teal!80!black},mark=*\\%
+ orange,every mark/.append style={fill=orange!80!black},mark=square*\\%
+ cyan!60!black,every mark/.append style={fill=cyan!80!black},mark=otimes*\\%
+ red!70!white,mark=star\\%
+ lime!80!black,every mark/.append style={fill=lime},mark=diamond*\\%
+ red,densely dashed,every mark/.append style={solid,fill=red!80!black},mark=*\\%
+ yellow!60!black,densely dashed,every mark/.append style={solid,fill=yellow!80!black},mark=square*\\%
+ black,every mark/.append style={solid,fill=gray},mark=otimes*\\%
+ blue,densely dashed,mark=star,every mark/.append style=solid\\%
+ red,densely dashed,every mark/.append style={solid,fill=red!80!black},mark=diamond*\\%
+}
+
+
+% backwards compatibility:
+\let\pgfcreateplotcyclelist=\pgfplotscreateplotcyclelist
+\pgfplots@letcsname{pgfp@cyclist@\string\blackwhiteplotspeclist @}={pgfp@cyclist@black white@}%
+\pgfplots@letcsname{pgfp@cyclist@\string\coloredplotspeclist @}={pgfp@cyclist@color@}%
+%%%%
+
+\def\pgfplotsdeprecatedstylecheck#1{%
+ \pgfkeysifdefined{#1/.@cmd}{%
+ \begingroup
+ \edef\pgfkeyscurrentkey{#1}%
+ \pgfkeyssplitpath
+ \pgfplots@warning{Loading deprecated style option
+ \pgfkeyscurrentpath/\pgfkeyscurrentname.
+ Please replace '\string\tikzstyle{\pgfkeyscurrentname}'
+ with '\string\pgfplotsset{\pgfkeyscurrentname/.style={}}'
+ (or '\string\pgfplotsset{\pgfkeyscurrentname/.append style={}}').}%
+ \endgroup
+ \pgfkeysvalueof{#1/.@cmd}\pgfeov
+ }{}%
+}%
+
+\def\pgfplots@scaled@ticks@setargs#1#2{%
+ \pgfutil@in@{:}{#2}%
+ \ifpgfutil@in@
+ \pgfplots@scaled@ticks@setargs@{#1}#2\pgfplots@EOI
+ \else
+ \expandafter\pgfutil@in@\expandafter{\pgfplots@activecolon}{#2}%
+ \ifpgfutil@in@
+ \pgfplots@scaled@ticks@setargs@active{#1}#2\pgfplots@EOI
+ \else
+ \pgfkeysalso{/pgfplots/scaled #1 ticks/#2}%
+ \fi
+ \fi
+}%
+\def\pgfplots@scaled@ticks@setargs@#1#2:#3\pgfplots@EOI{%
+ \pgfkeysalso{/pgfplots/scaled #1 ticks/#2=#3}%
+}
+
+{
+ \catcode`\:=\active
+ \gdef\pgfplots@scaled@ticks@setargs@active#1#2:#3\pgfplots@EOI{%
+ \pgfkeysalso{/pgfplots/scaled #1 ticks/#2=#3}%
+ }
+}
+
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@center\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@south west\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@south\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@south east\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@east\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@north east\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@north\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@north west\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@west\endcsname{1}
+\expandafter\def\csname pgfplots@nodesnearcoordsalign@isanchor@baseline\endcsname{1}
+
+% Sets the keys for /pgfplots/[xyz]ticklabel anchor.
+% #1: one of [xyz]
+% #2: the value
+\def\pgfplots@setticklabel@anchor@for#1#2{%
+ \def\pgfplots@loc@TMPa{#2}%
+ \def\pgfplots@loc@TMPb{auto}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \expandafter\def\csname pgfplots@ticklabel@anchor@#1\endcsname{0}%
+ \else
+ \def\pgfplots@loc@TMPb{near ticklabel}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \expandafter\def\csname pgfplots@ticklabel@anchor@#1\endcsname{1}%
+ \else
+ \def\pgfplots@loc@TMPb{tikz}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \expandafter\def\csname pgfplots@ticklabel@anchor@#1\endcsname{2}%
+ \else
+ \pgfplots@error{Sorry, I got an unexpected value for '#1ticklabel anchor': '#2'. Expected one of 'auto', 'near ticklabel' or 'tikz'.}%
+ \fi
+ \fi
+ \fi
+}%
+
+% Does the work for '[xyz]ticklabel pos'.
+%
+% #1: the axis (x,y or z).
+% #2: the key argument. Accepts
+% 'lower',
+% 'upper',
+% 'default' -> depends on 'tick pos'
+% 'left' = 'lower',
+% 'bottom' = 'lower',
+% 'right' = 'upper'
+% 'top' = 'upper'.
+%
+\def\pgfplots@setkey@ticklabelpos#1#2{%
+ \def\pgfplots@loc@TMPa{#2}%
+ \def\pgfplots@loc@TMPb{lower}%
+ \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{l}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % =lower
+ \else
+ \def\pgfplots@loc@TMPb{upper}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % = upper
+ \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{u}%
+ \else
+ \def\pgfplots@loc@TMPb{default}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % = default
+ \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{}%
+ \else
+ \def\pgfplots@loc@TMPb{left}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % = left [ alias for 'lower' ]
+ \else
+ \def\pgfplots@loc@TMPb{right}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % = right [ alias for 'upper' ]
+ \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{u}%
+ \else
+ \def\pgfplots@loc@TMPb{bottom}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % = bottom [ alias for 'lower' ]
+ \else
+ \def\pgfplots@loc@TMPb{top}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % = top [ alias for 'upper' ]
+ \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{u}%
+ \else
+ \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{}%
+ \pgfplots@error{Sorry, the key '#1ticklabel pos' does not know what to do with '#2'... accepted values are 'default, 'lower', 'upper' and some aliases. Maybe you misspelled it?}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+
+% Sets 'x dir={normal,reverse}'
+% #1: an axis
+% #2: the key's value to apply
+\def\pgfplots@setkey@axisdir@for#1#2{%
+ \def\pgfplots@loc@TMPa{#2}%
+ \def\pgfplots@loc@TMPb{normal}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfkeyssetvalue{/pgfplots/#1 dir/value}{n}%
+ \else
+ \def\pgfplots@loc@TMPb{reverse}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfkeyssetvalue{/pgfplots/#1 dir/value}{r}%
+ \else
+ \pgfkeyssetvalue{/pgfplots/#1 dir/value}{n}%
+ \pgfplots@error{Sorry, the key '#1 dir' does not know what to do with '#2'... accepted values are 'normal' or 'reverse'.}%
+ \fi
+ \fi
+}%
+
+
+\def\pgfplots@meshmode{n}% none
+\def\pgfplotsplothandlermesh@flatmode{m}% mean
+
+\def\pgfplots@cycle@multi@list@EOI{\pgfplots@cycle@multi@list@EOI}%
+\def\pgfplots@cycle@multi@list#1{%
+ \def\pgfplots@loc@TMPb{0}%
+ \gdef\pgfplots@cycle@multi@list@finalize@{}%
+ \pgfkeysinterruptkeyfilter
+ \pgfplots@cycle@multi@list@#1\nextlist\pgfplots@cycle@multi@list@EOI
+ \endpgfkeysinterruptkeyfilter
+}%
+\def\pgfplots@cycle@multi@list@#1\nextlist{%
+ \pgfkeys@spdef\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % ignore it if someone provided too many \nextlist commands.
+ \else
+ % parse and store list:
+ \begingroup
+ % this deals with control sequences inside of #1:
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@as@string
+ \expandafter\pgfplots@cycle@multi@list@findnamed\pgfplots@as@string\pgfplots@EOI
+ \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
+ \endgroup
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ % create it:
+ \pgfplotscreateplotcyclelist{/pgfplots/cycle multi list/@list\pgfplots@loc@TMPb}{#1}%
+ \else
+ % ok, take an existing one
+ \expandafter\let\csname pgfp@cyclist@/pgfplots/cycle multi list/@list\pgfplots@loc@TMPb @\endcsname=\pgfplots@glob@TMPa
+ \fi
+ \begingroup
+ \expandafter\pgfplotslistsize\csname pgfp@cyclist@/pgfplots/cycle multi list/@list\pgfplots@loc@TMPb @\endcsname\to\c@pgf@counta
+ \edef\pgfmathresult{\the\c@pgf@counta}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \pgfkeyslet{/pgfplots/cycle multi list/@totalN\pgfplots@loc@TMPb}\pgfmathresult
+ \pgfkeyslet{/pgfplots/cycle multi list/@N\pgfplots@loc@TMPb}\pgfmathresult
+%\def\temp{#1}\message{cycle multi list/@list={\meaning\temp}; /@N\pgfplots@loc@TMPb = \pgfkeysvalueof{/pgfplots/cycle multi list/@N\pgfplots@loc@TMPb}^^J}%
+ \pgfplotsutil@advancestringcounter\pgfplots@loc@TMPb
+ \fi
+ %
+ \pgfutil@ifnextchar{\pgfplots@cycle@multi@list@EOI}{%
+ \pgfplots@cycle@multi@list@finalize
+ }{%
+ \pgfplots@cycle@multi@list@
+ }%
+}%
+
+\def\pgfplots@colormap@catcodemagic{colormap}
+\pgfplots@command@to@string\pgfplots@colormap@catcodemagic\pgfplots@colormap@catcodemagic
+
+% checks for
+% - <known list>
+% - [<elements> of]<known list>
+% POSTCONDITION:
+% 1. pgfplots@loc@TMPa will be \pgfutil@empty if there is no such
+% list.
+% 2. \pgfplots@loc@TMPa will be \let to the list if there is one.
+% 3. \pgfplots@cycle@multi@list@finalize@ will contain any 'partial sublist'
+% commands.
+\def\pgfplots@cycle@multi@list@findnamed{\pgfutil@ifnextchar[{\pgfplots@cycle@multi@list@findnamed@}{\pgfplots@cycle@multi@list@findnamed@[]}}%
+\def\pgfplots@cycle@multi@list@findnamed@[#1]#2\pgfplots@EOI{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \pgfplots@loc@tmptrue
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfutil@in@\expandafter{\pgfplots@colormap@catcodemagic}{#1}%
+ \ifpgfutil@in@
+ % ups! This is actually one of
+ % [of colormap]
+ % [colors of colormap={...}]
+ % [indices of colormap={...}]
+ % which define a single cycle list! This is not what we aim
+ % for. Abort
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \pgfplots@loc@tmpfalse
+ \else
+ \pgfplots@cycle@multi@list@findnamed@@#1 \pgfplots@EOI
+ \fi
+ \fi
+ %
+ \ifpgfplots@loc@tmp
+ \pgfplotsifcyclelistexists{#2}{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@cyclist@\string#2@\endcsname%
+ }{%
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ }%
+ \fi
+}
+% #1: <elements> (an integer)
+\def\pgfplots@cycle@multi@list@findnamed@@#1 {%
+ \pgfutil@ifnextchar o
+ {\pgfplots@cycle@multi@list@findnamed@@@{#1}}%
+ {\pgfplots@cycle@multi@list@findnamed@@@{#1}of}%
+}%
+\def\pgfplots@cycle@multi@list@findnamed@@@#1of#2\pgfplots@EOI{%
+ \begingroup
+ \t@pgfplots@toka=\expandafter{\pgfplots@cycle@multi@list@finalize@}%
+ \t@pgfplots@tokb={#1}%
+ \xdef\pgfplots@cycle@multi@list@finalize@{\the\t@pgfplots@toka
+ \noexpand\pgfkeys{/pgfplots/cycle multi list/partial sublist={\pgfplots@loc@TMPb}{\the\t@pgfplots@tokb}}%
+ }%
+ \endgroup
+}
+
+\def\pgfplots@cycle@multi@list@finalize\pgfplots@cycle@multi@list@EOI{%
+ \pgfkeyslet{/pgfplots/cycle multi list/@dim}\pgfplots@loc@TMPb
+ \pgfplots@cycle@multi@list@finalize@
+ \c@pgf@countd=0 %
+ \c@pgf@counta=0 %
+ \pgfplotsloop{%
+ \ifnum\c@pgf@counta<\pgfplots@loc@TMPb\relax
+ \pgfplotsloopcontinuetrue
+ \else
+ \pgfplotsloopcontinuefalse
+ \fi
+ }{%
+ \pgfkeysgetvalue{/pgfplots/cycle multi list/@N\the\c@pgf@counta}\pgfplots@cycle@N
+ \ifnum\c@pgf@countd<\pgfplots@cycle@N\relax
+ \c@pgf@countd=\pgfplots@cycle@N\relax
+ \fi
+ \advance\c@pgf@counta by1
+ }%
+ \edef\pgfplots@loc@TMPd{\the\c@pgf@countd}%
+ \pgfkeyslet{/pgfplots/cycle multi list/@maxlen}\pgfplots@loc@TMPd
+%\message{cycle multi list/@maxlen=\pgfplots@loc@TMPd^^J}%
+}%
+
+\def\pgfplots@pgfkeys@set@point@meta@value#1{%
+ %
+ \pgfutil@in@{=}{#1}%
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPa##1=##2\pgfplots@EOI{%
+ % remove spaces from ##1 and ##2:
+ \pgfkeys@spdef\pgfplots@loc@TMPa{##1}%
+ \pgfkeys@spdef\pgfplots@loc@TMPb{##2}%
+ %
+ % check if the argument is known:
+ \pgfkeysifdefined{/pgfplots/point meta/\pgfplots@loc@TMPa/.@cmd}{%
+ \def\pgfplots@loc@TMPc{%
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/point meta/\pgfplots@loc@TMPa/.@cmd}%
+ }%
+ \expandafter\pgfplots@loc@TMPc\expandafter{\pgfplots@loc@TMPb}%
+ }{%
+ % oh, then it will be a math expression.
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/point meta/expr/.@cmd}{#1}%
+ }%
+ }%
+ % disassemble key'='value:
+ \pgfplots@loc@TMPa#1\pgfplots@EOI
+ \else
+ % the following code allows
+ % 'point meta=\thisrow{xcol}' even though
+ % \thisrow might be undefined in the context where keys are set.
+ % I convert the argument to a string.
+ \def\pgfplots@loc@TMPa{#1}%
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ %
+ \pgfkeysifdefined{/pgfplots/point meta/\pgfplots@loc@TMPb/.@cmd}{%
+ % ok, use it!
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/point meta/\pgfplots@loc@TMPb/.@cmd}{}%
+ }{%
+ % oh, then it will be a math expression.
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/point meta/expr/.@cmd}{#1}%
+ }%
+ \fi
+ %
+ %
+}%
+
+\def\pgfplots@color@of@colormap@parse#1{%
+ \pgfutil@in@{of }{#1}%
+ \ifpgfutil@in@
+ \pgfplots@color@of@colormap@parse@in#1\pgfplots@EOI
+ \else
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@color@of@colormap@name
+ \edef\pgfplots@color@of@colormap@value{#1}%
+ \fi
+}%
+\def\pgfplots@color@of@colormap@parse@in#1of #2\pgfplots@EOI{%
+ \pgfkeys@spdef\pgfplots@color@of@colormap@value{#1}%
+ \edef\pgfplots@color@of@colormap@value{\pgfplots@color@of@colormap@value}%
+ \pgfkeys@spdef\pgfplots@color@of@colormap@name{#2}%
+}
+% defines
+% - \pgfmathresult to be the resulting color.
+% - \pgfplots@color@of@colormap@name the name of the colormap
+\def\pgfplots@color@of@colormap@define#1{%
+ \pgfplots@color@of@colormap@parse{#1}%
+ %
+ \pgfplotscolormapifdefined{\pgfplots@color@of@colormap@name}{}{%
+ % hm... the colormap does not exist? Perhaps someone used '4 of colormap/cool'. Try to define it!
+ \pgfkeysifdefined{/pgfplots/\pgfplots@color@of@colormap@name/.@cmd}{%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@color@of@colormap@name@old
+ \pgfplotsset{\pgfplots@color@of@colormap@name}%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@color@of@colormap@name
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplots@color@of@colormap@name@old
+ }{%
+ % let it run into an error...
+ }%
+ }%
+ %
+ \if m\pgfplots@color@of@colormap@access
+ % colormap access=map
+ \expandafter\pgfplotscolormapfind\expandafter[\pgfplotspointmetatransformedrange]%
+ {\pgfplots@color@of@colormap@value}%
+ {\pgfplots@color@of@colormap@name}%
+ \else
+ \if c\pgfplots@color@of@colormap@access
+ % colormap access=piecewise constant
+ \expandafter\pgfplotscolormapfindpiecewiseconst\expandafter[\pgfplotspointmetatransformedrange]%
+ {\pgfplots@color@of@colormap@value}%
+ {\pgfplots@color@of@colormap@name}%
+ \else
+ % colormap access=direct
+ \pgfplotscolormapgetindex{\pgfplots@color@of@colormap@value}{\pgfplots@color@of@colormap@name}%
+ \fi
+ \fi
+}%
+
+\def\pgfplots@createcolormap@special@process@list@separator@CYCLE{\\}%
+\def\pgfplots@createcolormap@special@process@single@define@CYCLE{%
+ \edef\pgfplotsretval{%
+ /tikz/color/.define=%
+ {.}%
+ {\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname}%
+ {\pgfmathresult},%
+ /tikz/color=.,%
+ }%
+}%
+\def\pgfplots@color@of@colormap#1{%
+ \begingroup
+ \def\pgfplots@createcolormap@special@process@single@define{%
+ \edef\pgfplotsretval{%
+ \noexpand\pgfutil@definecolor{.}{\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname}{\pgfmathresult}%
+ }%
+ \let\pgfplots@createcolormap@special@process@single@define=\relax
+ }%
+ \pgfplots@of@colormap@getresult{#1}%
+ \global\let\pgfplots@glob@TMPa=\pgfplotsretval
+ \endgroup
+ \pgfplots@glob@TMPa
+ \tikzset{color=.}%
+ %\pgfplots@color@of@colormap@define{#1}%
+ %\def\pgfplots@loc@TMPb{\pgfutil@definecolor{.}{\csname pgfpl@cm@\pgfplots@color@of@colormap@name @colspace\endcsname}}%
+ %\expandafter\pgfplots@loc@TMPb\expandafter{\pgfmathresult}%
+ %\tikzset{color=.}%
+}
+
+\newif\ifpgfplots@stackedmode
+
+\newif\ifpgfplotsplothandlermesh@shownormals
+
+\pgfkeys{%
+ % <key name>/.define layer set={<layer list>}{<style definition>}
+ /handlers/.define layer set/.code 2 args={%
+ \pgfkeyssetvalue{\pgfkeyscurrentpath/list}{#1}%
+ \pgfkeysdef{\pgfkeyscurrentpath}{\pgfkeysalso{#2}}%
+ }%
+}
+
+\newif\ifpgfplots@LUA@fail@on@TeX@fallback
+\def\pgfplots@LUA@loglevel@info{4}
+\def\pgfplots@LUA@loglevel@debug{5}
+
+\pgfkeys{%
+ /pgfplots/search path for tikz/.search also={/tikz,/pgfplots},
+ /pgfplots/.is family,
+ /pgfplots/scale/.is family,
+ /pgfplots/legend/.is family,
+ /pgfplots/tick/.is family,
+ /pgfplots/axis/.is family,
+ /pgfplots/descriptions/.is family,
+ /pgfplots/style commands/.is family,
+ /pgfplots/naming commands/.is family,
+ /pgfplots/shared with tikz/.is family,
+ /pgfplots/error bars/.is family,
+ %
+ % pgfplots uses the following (implicit) layers:
+ % context: & associated layer name: \\
+ % background path & axis background \\
+ % grid lines & axis grid \\
+ % tick lines & axis ticks \\
+ % axis lines & axis lines \\
+ % tick labels & axis tick labels \\
+ % plots & main \\
+ % axis descriptions & axis descriptions \\
+ % plot marks & (see 'mark layer')\\
+ % the 'axis on top' key will change that order by moving all plot- and mark-related paths upwards (they are drawn earlier).
+ % None of these layers is mandatory; each can be omitted.
+ % The magic layer name 'discard' can be used as /dev/null layer.
+ %
+ % the <layer set name> must be defined
+ % set layers={<layer set name>}
+ /pgfplots/set layers/.code={%
+ \def\pgfplots@loc@TMPa{#1}%
+ \def\pgfplots@loc@TMPb{none}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfkeysalso{%
+ /pgfplots/activate layers=false,
+ /pgfplots/set layers*={},
+ }%
+ \else
+ \pgfkeysalso{%
+ /pgfplots/activate layers=true,
+ /pgfplots/set layers*={#1},
+ }%
+ \pgfplotsifinaxis{%
+ \pgfkeysalso{/pgfplots/cell picture=if necessary}%
+ }{%
+ % we wrote it outside of an axis. In this case, we can
+ % assume that it prepares multiple axis - which
+ % REQUIRES to disable cell pictures.
+ \pgfkeysalso{/pgfplots/cell picture=false}%
+ }%
+ \fi
+ },
+ % 'activate layers=false' is the same as 'set layers=none'.
+ % However, 'activate layers=true' does not work unless a 'set layers'
+ % has been installed as well.
+ /pgfplots/activate layers/.is if=pgfplots@layered@graphics,
+ /pgfplots/activate layers/.default=true,
+ /pgfplots/set layers*/.code=\pgfplots@key@set@layers{#1},
+ /pgfplots/set layers*/.default={/pgfplots/layers/standard},
+ /pgfplots/@set layers arg/.initial=,
+ /pgfplots/layers/.search also=/pgfplots,
+ /pgfplots/layers/standard/.define layer set={axis background,axis grid,axis ticks,axis lines,axis tick labels,pre main,main,axis descriptions,axis foreground}{
+ grid style= {/pgfplots/on layer=axis grid},
+ tick style= {/pgfplots/on layer=axis ticks},
+ axis line style= {/pgfplots/on layer=axis lines},
+ label style= {/pgfplots/on layer=axis descriptions},
+ legend style= {/pgfplots/on layer=axis descriptions},
+ title style= {/pgfplots/on layer=axis descriptions},
+ colorbar style= {/pgfplots/on layer=axis descriptions},
+ ticklabel style= {/pgfplots/on layer=axis tick labels},
+ axis background@ style={/pgfplots/on layer=axis background},
+ 3d box foreground style={/pgfplots/on layer=axis foreground},
+ },
+ /pgfplots/layers/axis on top/.define layer set={axis background,pre main,main,axis grid,axis ticks,axis lines,axis tick labels,axis descriptions,axis foreground}{
+ /pgfplots/layers/standard
+ },
+ /pgfplots/on layer/.initial=,
+ % mark layer can be 'auto', 'like plot', or a layer name.
+ /pgfplots/mark layer/.initial=,
+ /pgfplots/lua backend/.is if=pgfplots@LUA@backend@supported,
+ /pgfplots/lua backend/.default=true,
+ %
+ /pgfplots/lua debug/.code={%
+ \pgfqkeys{/pgfplots/lua debug}{#1}%
+ },
+ /pgfplots/lua debug/false/.style={/pgfplots/lua debug/off},%
+ /pgfplots/lua debug/off/.code={%
+ \def\pgfplots@LUA@backend@debugmode{off}%
+ \def\pgfplots@LUA@loglevel@debug{5}%
+ \def\pgfplots@LUA@loglevel@info{4}%
+ \pgfplots@LUA@fail@on@TeX@fallbackfalse
+ },
+ /pgfplots/lua debug/off and silent/.code={%
+ \def\pgfplots@LUA@backend@debugmode{off and silent}%
+ \def\pgfplots@LUA@loglevel@debug{5}%
+ \def\pgfplots@LUA@loglevel@info{5}%
+ \pgfplots@LUA@fail@on@TeX@fallbackfalse
+ },
+ %
+ /pgfplots/lua debug/verbose/.code={%
+ \def\pgfplots@LUA@backend@debugmode{verbose}%
+ \def\pgfplots@LUA@loglevel@debug{4}%
+ \def\pgfplots@LUA@loglevel@info{4}%
+ \pgfplots@LUA@fail@on@TeX@fallbackfalse
+ },
+ /pgfplots/lua debug/trace/.code={%
+ \let\pgfplotsutil@directlua=\pgfplotsutil@directlua@trace
+ },%
+ /pgfplots/lua debug/compileerror/.code={%
+ \def\pgfplots@LUA@backend@debugmode{compileerror}%
+ \def\pgfplots@LUA@loglevel@debug{4}%
+ \def\pgfplots@LUA@loglevel@info{4}%
+ \pgfplots@LUA@fail@on@TeX@fallbacktrue
+ },
+ /pgfplots/lua debug/.default=verbose,
+ /pgfplots/lua debug=off,
+ /pgfplots/every axis/.style={},
+ /pgfplots/every axis/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis}},
+ /pgfplots/every axis/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every axis post/.style={},
+ /pgfplots/every axis post/.belongs to family=/pgfplots/scale,
+ /pgfplots/every semilogx axis/.style={},
+ /pgfplots/every semilogx axis/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every semilogx axis}},
+ /pgfplots/every semilogx axis/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every semilogy axis/.style={},
+ /pgfplots/every semilogy axis/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every semilogy axis}},
+ /pgfplots/every semilogy axis/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every loglog axis/.style={},
+ /pgfplots/every loglog axis/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every loglog axis}},
+ /pgfplots/every loglog axis/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every linear axis/.style={},
+ /pgfplots/every linear axis/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every linear axis}},
+ /pgfplots/every linear axis/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every axis plot/.style={},
+ /pgfplots/every axis plot/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis plot}},
+ /pgfplots/every axis plot/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every axis plot except legend/.style={},
+ /pgfplots/every axis plot except legend/.belongs to family=/pgfplots/style commands,
+ /pgfplots/axis plot except legend style/.style={/pgfplots/every axis plot except legend/.append style={#1}},
+ /pgfplots/every axis plot post/.style={},
+ /pgfplots/every axis plot post/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis plot}},
+ /pgfplots/trig format plots/.is choice,
+ /pgfplots/trig format plots/deg/.code={\def\pgfplots@set@trig@format@plots{\pgfkeys{/pgf/trig format=deg}}},%
+ /pgfplots/trig format plots/rad/.code={\def\pgfplots@set@trig@format@plots{\pgfkeys{/pgf/trig format=rad}}},%
+ /pgfplots/trig format plots/default/.code={\let\pgfplots@set@trig@format@plots=\relax},%
+ /pgfplots/trig format plots/default,
+ /pgfplots/no marks/.style={/pgfplots/no markers},
+ /pgfplots/no markers/.style={/pgfplots/every axis plot post/.append style={mark=none}},
+ /pgfplots/every axis label/.style={},
+ /pgfplots/every axis label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis label}},
+ /pgfplots/every axis label/.belongs to family=/pgfplots/descriptions,
+ /pgfplots/xlabel near ticks/.style={%
+ /pgfplots/every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},%
+ /pgfplots/every x tick scale label/.style={at={(xticklabel cs:0.9,5pt)},anchor=near xticklabel,inner sep=0pt},
+ },%
+ /pgfplots/xlabel absolute/.style={%
+ /pgfplots/every axis x label/.style={at={(0.5,0)},below,yshift=-15pt},%
+ /pgfplots/every x tick scale label/.style={at={(1,0)},yshift=-2em,left,inner sep=0pt},
+ },%
+ /pgfplots/every axis x label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis x label}},
+ /pgfplots/every axis x label/.belongs to family=/pgfplots/descriptions,
+ %
+ /pgfplots/ylabel near ticks/.style={%
+ /pgfplots/every axis y label/.style={at={(ticklabel cs:0.5)},rotate=90,anchor=near ticklabel},%
+ /pgfplots/every y tick scale label/.style={at={(yticklabel* cs:1.03,-0.3em)},/pgfplots/near ticklabel align=outside,anchor=near yticklabel opposite,inner sep=0pt},
+ },%
+ /pgfplots/ylabel absolute/.style={%
+ /pgfplots/every axis y label/.style={at={(0,0.5)},xshift=-35pt,rotate=90},
+ /pgfplots/every y tick scale label/.style={at={(0,1)},above right,inner sep=0pt,yshift=0.3em},
+ },%
+ /pgfplots/every axis y label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis y label}},
+ /pgfplots/every axis y label/.belongs to family=/pgfplots/descriptions,
+ /pgfplots/every axis z label/.style={at={(ticklabel cs:0.5)},rotate=90, anchor=near ticklabel},
+ /pgfplots/every axis z label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis z label}},
+ /pgfplots/every axis z label/.belongs to family=/pgfplots/descriptions,
+ /pgfplots/every 3d description/.style={%
+ /pgfplots/every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},%
+ /pgfplots/every axis y label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},%
+ /pgfplots/every x tick scale label/.style={at={(xticklabel cs:0.95,5pt)},anchor=near xticklabel,inner sep=0pt},
+ /pgfplots/every y tick scale label/.style={at={(yticklabel cs:0.95,5pt)},anchor=near yticklabel,inner sep=0pt},
+ /pgfplots/try min ticks=3,%
+ },%
+ /pgfplots/every 3d view {0}{90}/.style={%
+ /pgfplots/xlabel near ticks,%
+ /pgfplots/ylabel near ticks,%
+ /pgfplots/axis on top=true,%
+ },%
+ % will be defined in \pgfplotspoint@initialisation:
+ %/tikz/sloped like x axis/.code={...},%
+ /pgfplots/title shift/.code={\pgfplots@error{Sorry, there is no 'title shift' option. Consider using 'title style={yshift=...}' (or the low level 'every axis title shift' which works only together with the initial 'every axis title' style)}},%
+ /pgfplots/every axis title shift/.initial=6pt,
+ /pgfplots/every axis title/.style={at={(0.5,1)},above,yshift=\pgfkeysvalueof{/pgfplots/every axis title shift}},
+ /pgfplots/every axis title/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis title}},
+ /pgfplots/every axis title/.belongs to family=/pgfplots/descriptions,
+ /pgfplots/every tick/.style={very thin,gray},
+ /pgfplots/every tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every tick}},
+ /pgfplots/every tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every inner x axis line/.style={},
+ /pgfplots/every inner y axis line/.style={},
+ /pgfplots/every inner z axis line/.style={},
+ /pgfplots/every outer x axis line/.style={},
+ /pgfplots/every outer y axis line/.style={},
+ /pgfplots/every outer z axis line/.style={},
+ /pgfplots/x axis line style/.style={
+ /pgfplots/every outer x axis line/.append style={#1},
+ /pgfplots/every inner x axis line/.append style={#1},
+ },
+ /pgfplots/y axis line style/.style={
+ /pgfplots/every outer y axis line/.append style={#1},
+ /pgfplots/every inner y axis line/.append style={#1},
+ },
+ /pgfplots/z axis line style/.style={
+ /pgfplots/every outer z axis line/.append style={#1},
+ /pgfplots/every inner z axis line/.append style={#1},
+ },
+ /pgfplots/outer axis line style/.style={
+ /pgfplots/every outer x axis line/.append style={#1},
+ /pgfplots/every outer y axis line/.append style={#1},%
+ /pgfplots/every outer z axis line/.append style={#1}%
+ },
+ /pgfplots/inner axis line style/.style={
+ /pgfplots/every inner x axis line/.append style={#1},
+ /pgfplots/every inner y axis line/.append style={#1},%
+ /pgfplots/every inner z axis line/.append style={#1}%
+ },
+ /pgfplots/axis line style/.style={
+ /pgfplots/inner axis line style={#1},
+ /pgfplots/outer axis line style={#1}%
+ },
+ /pgfplots/separate axis lines/.is if=pgfplots@separate@axis@lines,
+ /pgfplots/separate axis lines/.default=true,
+ /pgfplots/every minor tick/.style={},
+ /pgfplots/every minor tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor tick}},
+ /pgfplots/every minor tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major tick/.style={},
+ /pgfplots/every major tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major tick}},
+ /pgfplots/every major tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every x tick/.style={},
+ /pgfplots/every x tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every x tick}},
+ /pgfplots/every x tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every minor x tick/.style={},
+ /pgfplots/every minor x tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor x tick}},
+ /pgfplots/every minor x tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major x tick/.style={},
+ /pgfplots/every major x tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major x tick}},
+ /pgfplots/every major x tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every y tick/.style={},
+ /pgfplots/every y tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every y tick}},
+ /pgfplots/every y tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every minor y tick/.style={},
+ /pgfplots/every minor y tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor y tick}},
+ /pgfplots/every minor y tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major y tick/.style={},
+ /pgfplots/every major y tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major y tick}},
+ /pgfplots/every major y tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every z tick/.style={},
+ /pgfplots/every z tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every z tick}},
+ /pgfplots/every z tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every minor z tick/.style={},
+ /pgfplots/every minor z tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor z tick}},
+ /pgfplots/every minor z tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major z tick/.style={},
+ /pgfplots/every major z tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major z tick}},
+ /pgfplots/every major z tick/.belongs to family=/pgfplots/style commands,
+ %/pgfplots/every axis grid/.style={help lines},
+ /pgfplots/every axis grid/.style={thin,black!25},
+ /pgfplots/every axis grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis grid}},
+ /pgfplots/every axis grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every minor grid/.style={},
+ /pgfplots/every minor grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor grid}},
+ /pgfplots/every minor grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major grid/.style={},
+ /pgfplots/every major grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major grid}},
+ /pgfplots/every major grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every axis x grid/.style={},
+ /pgfplots/every axis x grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis x grid}},
+ /pgfplots/every axis x grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every minor x grid/.style={},
+ /pgfplots/every minor x grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor x grid}},
+ /pgfplots/every minor x grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major x grid/.style={},
+ /pgfplots/every major x grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major x grid}},
+ /pgfplots/every major x grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every axis y grid/.style={},
+ /pgfplots/every axis y grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis y grid}},
+ /pgfplots/every axis y grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every minor y grid/.style={},
+ /pgfplots/every minor y grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor y grid}},
+ /pgfplots/every minor y grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major y grid/.style={},
+ /pgfplots/every major y grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major y grid}},
+ /pgfplots/every major y grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every axis z grid/.style={},
+ /pgfplots/every axis z grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis z grid}},
+ /pgfplots/every axis z grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every minor z grid/.style={},
+ /pgfplots/every minor z grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every minor z grid}},
+ /pgfplots/every minor z grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every major z grid/.style={},
+ /pgfplots/every major z grid/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every major z grid}},
+ /pgfplots/every major z grid/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every tick label/.style={},
+ /pgfplots/every tick label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every tick label}},
+ /pgfplots/every tick label/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every x tick label/.style={},
+ /pgfplots/every x tick label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every x tick label}},
+ /pgfplots/every x tick label/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every extra x tick/.style={
+ /pgfplots/log identify minor tick positions=true,
+ /pgfplots/hide obscured x ticks=false,
+ },
+ /pgfplots/every extra x tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every extra x tick}},
+ /pgfplots/every extra x tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/extra x tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/extra x tick style/.code={%
+ \pgfkeysalso{/pgfplots/every extra x tick/.append style={#1}}%
+ },
+ /pgfplots/extra tick style/.code={%
+ \pgfkeysalso{%
+ /pgfplots/every extra x tick/.append style={#1},%
+ /pgfplots/every extra y tick/.append style={#1},%
+ /pgfplots/every extra z tick/.append style={#1}}%
+ },
+ /pgfplots/every x tick scale label/.initial=,% set by compat/labels=...
+ /pgfplots/every x tick scale label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every x tick scale label}},
+ /pgfplots/every x tick scale label/.belongs to family=/pgfplots/descriptions,
+ /pgfplots/every y tick label/.style={},
+ /pgfplots/every y tick label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every y tick label}},
+ /pgfplots/every y tick label/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every extra y tick/.style={
+ /pgfplots/log identify minor tick positions=true,
+ /pgfplots/hide obscured y ticks=false,
+ },
+ /pgfplots/every extra y tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every extra y tick}},
+ /pgfplots/every extra y tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/extra y tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/extra y tick style/.code={%
+ \pgfkeysalso{/pgfplots/every extra y tick/.append style={#1}}%
+ },
+ /pgfplots/every y tick scale label/.initial=,% set by compat/labels=...
+ /pgfplots/every y tick scale label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every y tick scale label}},
+ /pgfplots/every y tick scale label/.belongs to family=/pgfplots/descriptions,
+ /pgfplots/every z tick label/.style={},
+ /pgfplots/every z tick label/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every z tick label}},
+ /pgfplots/every z tick label/.belongs to family=/pgfplots/style commands,
+ /pgfplots/every extra z tick/.style={
+ /pgfplots/log identify minor tick positions=true,
+ /pgfplots/hide obscured z ticks=false,
+ },
+ /pgfplots/every extra z tick/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every extra z tick}},
+ /pgfplots/every extra z tick/.belongs to family=/pgfplots/style commands,
+ /pgfplots/extra z tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/extra z tick style/.code={%
+ \pgfkeysalso{/pgfplots/every extra z tick/.append style={#1}}%
+ },
+ % FIXME : this is replicated in 'axis z line=box'!
+ /pgfplots/every z tick scale label/.style={at={(zticklabel* cs:1.2,-0.3em)},anchor=near zticklabel,inner sep=0pt},
+ /pgfplots/every z tick scale label/.belongs to family=/pgfplots/descriptions,
+ /pgfplots/every axis legend/.style={%
+ cells={anchor=center},
+ inner xsep=3pt,inner ysep=2pt,nodes={inner sep=2pt,text depth=0.15em},
+ anchor=north east,%
+ shape=rectangle,%
+ fill=white,%
+ draw=black,
+ at={(0.98,0.98)},
+ },
+ /pgfplots/every axis legend/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis legend}},
+ /pgfplots/every axis legend/.belongs to family=/pgfplots/style commands,
+ %
+ % axis type:
+ /pgfplots/axis type/.initial=rectangle,
+ /pgfplots/axis type/.belongs to family=/pgfplots/scale,
+ /pgfplots/@expected axis cs/.initial=cart,
+ /pgfplots/every rectangle axis/.style={},
+ %
+ % see \pgfplotsdefinecstransform{<from>}{<to>}{<code>}
+ /pgfplots/data cs/.initial=cart,% the coordinate system of provided data. Will be transformed to the axis' internal coordinate system (@expected axis cs).
+ %
+ % Colorbar interface:
+ /pgfplots/colorbar/.is if=pgfplots@colorbar,
+ /pgfplots/colorbar/.default=true,
+ /pgfplots/colorbar to label/.style={/pgfplots/colorbar to name={#1}},
+ /pgfplots/colorbar to name/.initial=,
+ /pgfplots/colorbar source/.code={\pgfplots@error{Sorry, you can only set `colorbar source' inside of \string\addplot\space (or a cycle list)}},
+ /pgfplots/colorbar source/.default=true,
+ /pgfplots/colorbar pos*/.initial=,% one of 'rltb' (right, left, top, bottom). for internal use, to handle checks.
+ /pgfplots/every colorbar global/.style={
+ data cs=cart,
+ axis on top,
+ title=,
+ xlabel=,
+ ylabel=,
+ zlabel=,
+ legend entries=,
+ grid=none,
+ enlargelimits=false,
+ scale only axis,
+ xtick=,
+ xticklabel=,
+ ytick=,
+ yticklabel=,
+ zmin=,
+ zmax=,
+ },
+ /pgfplots/colorbar right/.style={%
+ /pgfplots/colorbar=true,
+ /pgfplots/colorbar pos*=r,
+ /pgfplots/colorbar shift/.style={xshift=0.3cm},
+ /pgfplots/every colorbar/.style={%
+ /pgfplots/every colorbar global,
+ at={(parent axis.right of north east)},
+ anchor=north west,
+ xmin=0,
+ xmax=1,
+ ymin=\pgfkeysvalueof{/pgfplots/point meta min},
+ ymax=\pgfkeysvalueof{/pgfplots/point meta max},
+ height=\pgfkeysvalueof{/pgfplots/parent axis height},%
+ width=\pgfkeysvalueof{/pgfplots/colorbar/width},
+ xtick=\empty,
+ yticklabel pos=right,% ATTENTION: I check for this setting in 'colorbar sampled line', see below!
+ colorbar vertical/lowlevel,
+ }%
+ },%
+ /pgfplots/colorbar left/.style={%
+ /pgfplots/colorbar right,
+ /pgfplots/colorbar pos*=l,
+ /pgfplots/colorbar shift/.style={xshift=-0.3cm},
+ /pgfplots/every colorbar/.append style={%
+ at={(parent axis.left of north west)},
+ anchor=north east,
+ yticklabel pos=left,% ATTENTION: I check for this setting in 'colorbar sampled line', see below!
+ }%
+ },%
+ /pgfplots/colorbar horizontal/.style={%
+ /pgfplots/colorbar=true,
+ /pgfplots/colorbar pos*=b,
+ /pgfplots/colorbar shift/.style={yshift=-0.3cm},
+ /pgfplots/every colorbar/.style={%
+ /pgfplots/every colorbar global,
+ at={(parent axis.below south west)},
+ anchor=north west,
+ ymin=0,
+ ymax=1,
+ xmin=\pgfkeysvalueof{/pgfplots/point meta min},
+ xmax=\pgfkeysvalueof{/pgfplots/point meta max},
+ width=\pgfkeysvalueof{/pgfplots/parent axis width},%
+ height=\pgfkeysvalueof{/pgfplots/colorbar/width},
+ xticklabel pos=left,
+ ytick=\empty,
+ colorbar horizontal/lowlevel,
+ }%
+ },%
+ %
+ % this here used to be the default up to (and including) pgfplots 1.13.
+ % But it does not support the following use cases:
+ % * 'colormap access=const',
+ % * 'colorbar style={ytick=data}}'
+ % * CMYK shadings
+ % -> deprecated.
+ /pgfplots/colorbar pgfshading/.style={%
+ /pgfplots/colorbar,
+ /pgfplots/colorbar/draw/.code={%
+ \axis[every colorbar,colorbar shift,colorbar=false]
+ \pgfkeysvalueof{/pgfplots/colorbar addplot}%
+ \endaxis
+ },%
+ % You might wonder why this special treatment with '/lowlevel'
+ % keys is necessary. Well, It turned out that using '##' inside of
+ % styles is incompatible with '.add code' -- and therefor also
+ % with '.append style'. This here is a work-around which works.
+ /pgfplots/colorbar vertical/lowlevel/.style={%
+ /pgfplots/colorbar addplot=\addplot graphics {};,
+ plot graphics/xmin=0,%
+ plot graphics/xmax=1,
+ plot graphics/ymin=\pgfkeysvalueof{/pgfplots/point meta min},
+ plot graphics/ymax=\pgfkeysvalueof{/pgfplots/point meta max},
+ plot graphics/lowlevel draw/.code 2 args={%
+ \if\pgfkeysvalueof{/pgfplots/y dir/value}n%
+ \pgfplotscolormaptoshadingspec{\pgfkeysvalueof{/pgfplots/colormap name}}{####2}\pgfplots@loc@TMPa
+ \else
+ \pgfplotscolormapreversedtoshadingspec{\pgfkeysvalueof{/pgfplots/colormap name}}{####2}\pgfplots@loc@TMPa
+ \fi
+ \def\pgfplots@loc@TMPb{\pgfdeclareverticalshading{tempshading}{\pgfkeysvalueof{/pgfplots/colorbar/width}}}%
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}%
+ \pgfuseshading{tempshading}%
+ },%
+ },
+ /pgfplots/colorbar horizontal/lowlevel/.style={%
+ /pgfplots/colorbar addplot=\addplot graphics {};,
+ plot graphics/ymin=0,%
+ plot graphics/ymax=1,
+ plot graphics/xmin=\pgfkeysvalueof{/pgfplots/point meta min},
+ plot graphics/xmax=\pgfkeysvalueof{/pgfplots/point meta max},
+ plot graphics/lowlevel draw/.code 2 args={%
+ \if\pgfkeysvalueof{/pgfplots/x dir/value}n%
+ \pgfplotscolormaptoshadingspec{\pgfkeysvalueof{/pgfplots/colormap name}}{####1}\pgfplots@loc@TMPa
+ \else
+ \pgfplotscolormapreversedtoshadingspec{\pgfkeysvalueof{/pgfplots/colormap name}}{####1}\pgfplots@loc@TMPa
+ \fi
+ \def\pgfplots@loc@TMPb{\pgfdeclarehorizontalshading{tempshading}{\pgfkeysvalueof{/pgfplots/colorbar/width}}}%
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}%
+ \pgfuseshading{tempshading}%
+ },%
+ },%
+ },
+ /pgfplots/colorbar addplot/.initial=\pgfplots@error{COLORBAR SYSTEM UNDEFINED},
+ /pgfplots/colorbar/draw/.code={\pgfplots@error{COLORBAR SYSTEM UNDEFINED}},
+ % --> the default is now 'colorbar sampled', see below:
+ %
+ % instantiate SOME defaults:
+ /pgfplots/colorbar right,
+ /pgfplots/colorbar=false,
+ %
+ /pgfplots/colorbar style/.style={/pgfplots/every colorbar/.append style={#1}},
+ /pgfplots/colorbar/width/.initial=0.5cm,
+ % see \pgfplotscolorbardrawstandalone
+ /pgfplots/colorbar/standalone draw/.code={%
+ \pgfplots@colorbar@get@rid@of@at@parent@axis
+ \pgfplots@colorbar@draw@
+ },
+ /pgfplots/every colorbar sampled line/.style={help lines},
+ /pgfplots/colorbar sampled line style/.style={/pgfplots/every colorbar sampled line/.append style={#1}},
+ /pgfplots/colorbar sampled line/.style={%
+ colorbar,
+ /pgfplots/colorbar/draw/.code={%
+ \axis[
+ cycle list={#1\\},
+ domain=\pgfkeysvalueof{/pgfplots/point meta min}:\pgfkeysvalueof{/pgfplots/point meta max},
+ every colorbar,colorbar shift,colorbar=false]
+ \pgfkeysvalueof{/pgfplots/colorbar addplot}%
+ \endaxis
+ },%
+ /pgfplots/colorbar horizontal/lowlevel/.code={%
+ \pgfkeysgetvalue{/pgfplots/colorbar pos*}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@loc@TMPa{b}%
+ \fi
+ \if b\pgfplots@loc@TMPa
+ \pgfkeysalso{axis x line*=bottom}% DEFAULT.
+ \else
+ \pgfkeysalso{axis x line*=top}%
+ \fi
+ \pgfkeysalso{%
+ y axis line style={/pgfplots/every colorbar sampled line},
+ /pgfplots/colorbar addplot={\addplot {0.5};},
+ point meta=x,
+ }%
+ },%
+ /pgfplots/colorbar vertical/lowlevel/.code={%
+ \pgfkeysgetvalue{/pgfplots/colorbar pos*}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@loc@TMPa{r}%
+ \fi
+ \if l\pgfplots@loc@TMPa
+ \pgfkeysalso{axis y line*=left}%
+ \else
+ \pgfkeysalso{axis y line*=right}% DEFAULT
+ \fi
+ \pgfkeysalso{%
+ x axis line style={/pgfplots/every colorbar sampled line},
+ /pgfplots/colorbar addplot={\addplot (0.5,x);},
+ point meta=y,
+ }%
+ },%
+ },%
+ /pgfplots/colorbar sampled line/.default={scatter,only marks},
+ %
+ /pgfplots/colorbar as palette/.style={
+ colorbar sampled={
+ surf,
+ colormap access=direct,
+ shader=flat corner,
+ samples=\pgfplotscolormapsizeof
+ {\pgfkeysvalueof{/pgfplots/colormap name}}+1,
+ },
+ colorbar style={
+ point meta min=0,
+ point meta max=\pgfplotscolormapsizeof
+ {\pgfkeysvalueof{/pgfplots/colormap name}},
+ },
+ },
+ %
+ % A style which display exactly 1 tick label for each distinct color. It is similar to 'colorbar as palette'.
+ % It is useful for non-uniform colormaps
+ /pgfplots/colorbar as legend/.style={
+ /pgfplots/colorbar sampled={},%
+ /pgfplots/colorbar style={%
+ % FIXME: these styles could make use of some tuning ...
+ ticklabel style={/pgf/number format/precision=3,/pgf/number format/relative*=3},
+ },
+ /pgfplots/colorbar horizontal/lowlevel/.append code={%
+ \def\pgfplots@colorbar@as@legend@orientation{x}%
+ },
+ /pgfplots/colorbar vertical/lowlevel/.append code={%
+ \def\pgfplots@colorbar@as@legend@orientation{y}%
+ },
+ %
+ % ensure that our values
+ % \pgfplots@colorbar@as@legend@orientation are available while
+ % pgfplots processes the key filtering - otherwise we get
+ % "undefined keys" below
+ /pgfplots/colorbar horizontal/lowlevel/.belongs to family=/pgfplots/scale,
+ /pgfplots/colorbar vertical/lowlevel/.belongs to family=/pgfplots/scale,
+ %
+ /pgfplots/colorbar/draw/.add code={%
+ \begingroup
+ \pgfkeys{/pgf/fpu}%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@CM
+ \begingroup
+ \pgfplotsset{every colorbar}%
+ \pgfmath@smuggleone\pgfplots@colorbar@as@legend@orientation
+ \endgroup
+ \pgfplotscolormapgetpositions[{\pgfkeysvalueof{/pgfplots/point meta min}}:{\pgfkeysvalueof{/pgfplots/point meta max}}]{\pgfplots@CM}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplotsarraynew\noexpand\positions{\pgfplotsretval}%
+ }%
+ \pgfplots@loc@TMPa
+ %
+ \c@pgf@countd=\pgfplotscolormaplastindexof{\pgfplots@CM}\relax
+ \edef\pgfplots@colorcount{\the\c@pgf@countd}%
+ \advance\c@pgf@countd by-1 %
+ % XXX : this here is tailored for use with
+ % * 'colormap access=const' and
+ % * 'sample for=const'
+ % where the last color is redundant and must not be
+ % displayed in 'colorbar as legend' --> make it more
+ % general!
+ \edef\pgfplots@colorcount@minus@one{\the\c@pgf@countd}%
+ %
+ % accumulate a list of formatted positions into this
+ % variable:
+ \def\pgfplots@loc@TMPc{}%
+ \pgfplotsforeachungrouped \x in {0,...,\pgfplots@colorcount} {%
+ \pgfplotsarrayselect{\x}\of\positions\to\pgfplotsretval
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfmathprintnumber{\pgfplotsretval}}
+ \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPc}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}%
+ \edef\pgfplots@loc@TMPc{\the\t@pgfplots@toka \the\t@pgfplots@tokb,}%
+ }%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPc}%
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\pgfplotsset{%
+ % this FORGETS the colormap positions intentionally...
+ colormap={@temp@CM}{indices of colormap={0,...,\pgfplots@colorcount@minus@one of \pgfplots@CM}},
+ % ... and normalizes the number range.
+ point meta min=0,point meta max=1000,
+ colorbar style={
+ surf,shader=interp,
+ colormap access=const,
+ \pgfplots@colorbar@as@legend@orientation tick=data,
+ % here we add the positions back into the
+ % tick label:
+ \pgfplots@colorbar@as@legend@orientation ticklabels={\the\t@pgfplots@tokb},
+ },
+ }%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+ }{%
+ % no 'append' section
+ },%
+ },
+ %
+ /pgfplots/colorbar sampled/.style={%
+ /pgfplots/colorbar,
+ /pgfplots/colorbar/draw/.code={%
+ \axis[
+ view={0}{90},
+ cycle list={#1\\},
+ domain=\pgfkeysvalueof{/pgfplots/point meta min}:\pgfkeysvalueof{/pgfplots/point meta max},
+ samples y=2,
+ domain y=0:1,
+ every colorbar,
+ zmin=0,zmax=1,
+ colorbar shift,colorbar=false]
+ \pgfkeysvalueof{/pgfplots/colorbar addplot}%
+ \endaxis
+ },%
+ /pgfplots/colorbar horizontal/lowlevel/.style={%
+ /pgfplots/colorbar addplot={\addplot3 {0};},
+ point meta=x,
+ },%
+ /pgfplots/colorbar vertical/lowlevel/.style={%
+ /pgfplots/colorbar addplot={\addplot3 (y,x,0);},
+ point meta=y,
+ },%
+ },%
+ /pgfplots/colorbar sampled/.default={surf,mark=none,shader=flat},
+% tick options:
+ /pgfplots/xticklabel/.store in= \pgfplots@xticklabel,
+ /pgfplots/xticklabel/.belongs to family=/pgfplots/tick,
+ /pgfplots/xticklabel=,
+ /pgfplots/xticklabels/.belongs to family=/pgfplots/tick,
+ /pgfplots/xticklabels/.code={%
+ \pgfplotslistnew\pgfplots@xticklabels{#1}%
+ \let\pgfplots@xticklabel=\pgfplots@user@ticklabel@list@x
+ },
+ % #1 table name or macro
+ % #2 column name (or alias or create on use)
+ /pgfplots/xticklabels from table/.code 2 args={%
+ \pgfplotstablegetcolumn{#2}\of{#1}\to\pgfplots@xticklabels
+ \let\pgfplots@xticklabel=\pgfplots@user@ticklabel@list@x
+ },
+ /pgfplots/xticklabels from table/.belongs to family=/pgfplots/tick,
+ /pgfplots/yticklabels/.belongs to family=/pgfplots/tick,
+ /pgfplots/yticklabels/.code={%
+ \pgfplotslistnew\pgfplots@yticklabels{#1}%
+ \let\pgfplots@yticklabel=\pgfplots@user@ticklabel@list@y
+ },
+ % #1 table name or macro
+ % #2 column name (or alias or create on use)
+ /pgfplots/yticklabels from table/.code 2 args={%
+ \pgfplotstablegetcolumn{#2}\of{#1}\to\pgfplots@yticklabels
+ \let\pgfplots@yticklabel=\pgfplots@user@ticklabel@list@y
+ },
+ /pgfplots/yticklabels from table/.belongs to family=/pgfplots/tick,
+ /pgfplots/yticklabel/.store in= \pgfplots@yticklabel,
+ /pgfplots/yticklabel/.belongs to family=/pgfplots/tick,
+ /pgfplots/yticklabel=,
+ /pgfplots/zticklabels/.belongs to family=/pgfplots/tick,
+ /pgfplots/zticklabels/.code={%
+ \pgfplotslistnew\pgfplots@zticklabels{#1}%
+ \let\pgfplots@zticklabel=\pgfplots@user@ticklabel@list@z
+ },
+ % #1 table name or macro
+ % #2 column name (or alias or create on use)
+ /pgfplots/zticklabels from table/.code 2 args={%
+ \pgfplotstablegetcolumn{#2}\of{#1}\to\pgfplots@zticklabels
+ \let\pgfplots@zticklabel=\pgfplots@user@ticklabel@list@z
+ },
+ /pgfplots/zticklabels from table/.belongs to family=/pgfplots/tick,
+ /pgfplots/zticklabel/.store in= \pgfplots@zticklabel,
+ /pgfplots/zticklabel/.belongs to family=/pgfplots/tick,
+ /pgfplots/zticklabel=,
+ /pgfplots/x tick label as interval/.is if=pgfplots@xticklabel@interval,
+ /pgfplots/x tick label as interval/.default=true,
+ /pgfplots/x tick label as interval/.belongs to family=/pgfplots/tick,
+ /pgfplots/y tick label as interval/.is if=pgfplots@yticklabel@interval,
+ /pgfplots/y tick label as interval/.default=true,
+ /pgfplots/y tick label as interval/.belongs to family=/pgfplots/tick,
+ /pgfplots/z tick label as interval/.is if=pgfplots@zticklabel@interval,
+ /pgfplots/z tick label as interval/.default=true,
+ /pgfplots/z tick label as interval/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra x tick label/.store in= \pgfplots@extra@xticklabel,
+ /pgfplots/extra x tick label/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra x tick label=,
+ /pgfplots/extra x tick labels/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra x tick labels/.code={%
+ \pgfplotslistnew\pgfplots@extra@xticklabels{#1}%
+ \let\pgfplots@extra@xticklabel=\pgfplots@user@extra@ticklabel@list@x
+ },
+ /pgfplots/extra y tick labels/.code={%
+ \pgfplotslistnew\pgfplots@extra@yticklabels{#1}%
+ \let\pgfplots@extra@yticklabel=\pgfplots@user@extra@ticklabel@list@y
+ },
+ /pgfplots/extra z tick labels/.code={%
+ \pgfplotslistnew\pgfplots@extra@zticklabels{#1}%
+ \let\pgfplots@extra@zticklabel=\pgfplots@user@extra@ticklabel@list@z
+ },
+ /pgfplots/xtick/.store in= \pgfplots@xtick,
+ /pgfplots/xtick/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick=,
+ /pgfplots/extra x ticks/.store in=\pgfplots@extra@xtick,
+ /pgfplots/extra x ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra x ticks=,
+ /pgfplots/xtickten/.store in= \pgfplots@xtickten,
+ /pgfplots/xtickten/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtickten=,
+ /pgfplots/extra y tick label/.store in= \pgfplots@extra@yticklabel,
+ /pgfplots/extra y tick label/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra y tick label=,
+ /pgfplots/ytick/.store in= \pgfplots@ytick,
+ /pgfplots/ytick/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick=,
+ /pgfplots/extra y ticks/.store in=\pgfplots@extra@ytick,
+ /pgfplots/extra y ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra y ticks=,
+ /pgfplots/ytickten/.store in= \pgfplots@ytickten,
+ /pgfplots/ytickten/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytickten=,
+ /pgfplots/extra z tick label/.store in= \pgfplots@extra@zticklabel,
+ /pgfplots/extra z tick label/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra z tick label=,
+ /pgfplots/ztick/.store in= \pgfplots@ztick,
+ /pgfplots/ztick/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick=,
+ /pgfplots/extra z ticks/.store in=\pgfplots@extra@ztick,
+ /pgfplots/extra z ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/extra z ticks=,
+ /pgfplots/ztickten/.store in= \pgfplots@ztickten,
+ /pgfplots/ztickten/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztickten=,
+ /pgfplots/tick scale binop/.initial=\cdot,
+ /pgfplots/xtick scale label code/.code={$\pgfkeysvalueof{/pgfplots/tick scale binop} 10^{#1}$},
+ /pgfplots/xtick scale label code/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick scale label code/.code={$\pgfkeysvalueof{/pgfplots/tick scale binop} 10^{#1}$},
+ /pgfplots/ytick scale label code/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick scale label code/.code={$\pgfkeysvalueof{/pgfplots/tick scale binop} 10^{#1}$},
+ /pgfplots/ztick scale label code/.belongs to family=/pgfplots/tick,
+ /pgfplots/tick scale label code/.style={%
+ /pgfplots/xtick scale label code={#1},
+ /pgfplots/ytick scale label code={#1}%
+ /pgfplots/ztick scale label code={#1}%
+ },%
+ /pgfplots/scaled x ticks/.code={\pgfplots@scaled@ticks@setargs{x}{#1}},
+ /pgfplots/scaled x ticks/false/.code= {\def\pgfplots@scaled@ticks@x@choice{0}},
+ /pgfplots/scaled x ticks/true/.code= {\def\pgfplots@scaled@ticks@x@choice{1}},
+ /pgfplots/scaled x ticks/base 10/.code= {\def\pgfplots@scaled@ticks@x@choice{2}\def\pgfplots@scaled@ticks@x@arg{#1}},
+ /pgfplots/scaled x ticks/real/.code= {%
+ \def\pgfplots@scaled@ticks@x@choice{3}\def\pgfplots@scaled@ticks@x@arg{#1}%
+ \pgfkeys{/pgfplots/xtick scale label code/.code={$\pgfkeysvalueof{/pgfplots/tick scale binop} \pgfmathprintnumber{#1}$}}},
+ /pgfplots/scaled x ticks/manual/.code 2 args= {%
+ \def\pgfplots@scaled@ticks@x@choice{4}\def\pgfplots@scaled@ticks@x@arg##1{#2}%
+ \pgfkeys{/pgfplots/xtick scale label code/.code={#1}}},
+ /pgfplots/scaled x ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/scaled x ticks=true,
+ /pgfplots/scaled y ticks/.code={\pgfplots@scaled@ticks@setargs{y}{#1}},
+ /pgfplots/scaled y ticks/false/.code= {\def\pgfplots@scaled@ticks@y@choice{0}},
+ /pgfplots/scaled y ticks/true/.code= {\def\pgfplots@scaled@ticks@y@choice{1}},
+ /pgfplots/scaled y ticks/base 10/.code= {\def\pgfplots@scaled@ticks@y@choice{2}\def\pgfplots@scaled@ticks@y@arg{#1}},
+ /pgfplots/scaled y ticks/real/.code= {%
+ \def\pgfplots@scaled@ticks@y@choice{3}\def\pgfplots@scaled@ticks@y@arg{#1}%
+ \pgfkeys{/pgfplots/ytick scale label code/.code={$\pgfkeysvalueof{/pgfplots/tick scale binop} \pgfmathprintnumber{#1}$}}},
+ /pgfplots/scaled y ticks/manual/.code 2 args= {%
+ \def\pgfplots@scaled@ticks@y@choice{4}\def\pgfplots@scaled@ticks@y@arg##1{#2}%
+ \pgfkeys{/pgfplots/ytick scale label code/.code={#1}}},
+ /pgfplots/scaled y ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/scaled y ticks=true,
+ /pgfplots/scaled z ticks/.code={\pgfplots@scaled@ticks@setargs{z}{#1}},
+ /pgfplots/scaled z ticks/false/.code= {\def\pgfplots@scaled@ticks@z@choice{0}},
+ /pgfplots/scaled z ticks/true/.code= {\def\pgfplots@scaled@ticks@z@choice{1}},
+ /pgfplots/scaled z ticks/base 10/.code= {\def\pgfplots@scaled@ticks@z@choice{2}\def\pgfplots@scaled@ticks@z@arg{#1}},
+ /pgfplots/scaled z ticks/real/.code= {%
+ \def\pgfplots@scaled@ticks@z@choice{3}\def\pgfplots@scaled@ticks@z@arg{#1}%
+ \pgfkeys{/pgfplots/ztick scale label code/.code={$\pgfkeysvalueof{/pgfplots/tick scale binop} \pgfmathprintnumber{#1}$}}},
+ /pgfplots/scaled z ticks/manual/.code 2 args= {%
+ \def\pgfplots@scaled@ticks@z@choice{4}\def\pgfplots@scaled@ticks@z@arg##1{#2}%
+ \pgfkeys{/pgfplots/ztick scale label code/.code={#1}}},
+ /pgfplots/scaled z ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/scaled z ticks=true,
+ /pgfplots/scaled ticks/.style={%
+ /pgfplots/scaled x ticks=#1,
+ /pgfplots/scaled y ticks=#1,
+ /pgfplots/scaled z ticks=#1
+ },
+ /pgfplots/scale ticks above exponent/.store in= \pgfplots@scale@ticks@above@exponent,
+ /pgfplots/scale ticks above exponent/.belongs to family=/pgfplots/tick,
+ /pgfplots/scale ticks above exponent=3,
+ /pgfplots/scale ticks below exponent/.store in= \pgfplots@scale@ticks@below@exponent,
+ /pgfplots/scale ticks below exponent/.belongs to family=/pgfplots/tick,
+ /pgfplots/scale ticks below exponent=-1,
+ /pgfplots/minor x tick num/.initial=0,
+ /pgfplots/minor x tick num/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor y tick num/.initial=0,
+ /pgfplots/minor y tick num/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor z tick num/.initial=0,
+ /pgfplots/minor z tick num/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor tick num/.style={
+ /pgfplots/minor x tick num=#1,
+ /pgfplots/minor y tick num=#1,
+ /pgfplots/minor z tick num=#1,
+ },
+ /pgfplots/minor tick num/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor xtick/.initial=,
+ /pgfplots/minor xtick/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor ytick/.initial=,
+ /pgfplots/minor ytick/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor ztick/.initial=,
+ /pgfplots/minor ztick/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor tick/.style={
+ /pgfplots/minor xtick={#1},
+ /pgfplots/minor ytick={#1},
+ /pgfplots/minor ztick={#1},
+ },
+ /pgfplots/minor tick/.belongs to family=/pgfplots/tick,
+ %
+ /pgfplots/subtickwidth/.style= {/pgfplots/minor tick length={#1}},
+ /pgfplots/tickwidth/.style= {/pgfplots/major tick length={#1}},
+ /pgfplots/minor tick length/.belongs to family=/pgfplots/tick,
+ /pgfplots/minor tick length/.initial=0.1cm,
+ /pgfplots/major tick length/.belongs to family=/pgfplots/tick,
+ /pgfplots/major tick length/.initial=0.15cm,
+ %
+ /pgfplots/xtick distance/.initial=,
+ /pgfplots/ytick distance/.initial=,
+ /pgfplots/ztick distance/.initial=,
+ /pgfplots/max space between ticks/.estore in=\axisdefaulttickwidth,
+ /pgfplots/max space between ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/max space between ticks=35,% the maximum space between adjacent ticks (in pt, but don't specify the unit 'pt')
+ /pgfplots/try min ticks/.estore in= \axisdefaulttryminticks,
+ /pgfplots/try min ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/try min ticks=4,
+ /pgfplots/try min ticks log/.estore in= \pgfplots@default@try@minticks@log,
+ /pgfplots/try min ticks log/.belongs to family=/pgfplots/tick,
+ /pgfplots/try min ticks log=3,
+ /pgfplots/log basis x/.initial=,
+ /pgfplots/log basis y/.initial=,
+ /pgfplots/log basis z/.initial=,
+ /pgfplots/log base x/.style={log basis x={#1}},%
+ /pgfplots/log base y/.style={log basis y={#1}},%
+ /pgfplots/log base z/.style={log basis z={#1}},%
+ /pgfplots/log plot exponent style/.style={/pgf/number format/fixed,/pgf/number format/precision=2},
+ /pgfplots/log plot exponent style/.belongs to family=/pgfplots/tick,
+ /pgfplots/log identify minor tick positions/.is if=pgfplots@identify@log@minor@tick@pos,
+ /pgfplots/log identify minor tick positions/.belongs to family=/pgfplots/tick,
+ /pgfplots/log identify minor tick positions=false,
+ /pgfplots/log number format code/.code={%
+ \begingroup
+ \pgfmathlogtologten@{#1}%
+ \ifpgfplots@identify@log@minor@tick@pos
+ \expandafter\pgfplots@is@log@tick@a@minor@tick@pos\pgfmathresult\relax%
+ \else
+ \pgfplots@log@tick@isminor@tick@posfalse
+ \fi
+ \ifpgfplots@log@tick@isminor@tick@pos
+ \pgfmathprintnumber[sci]{\pgfmathresult}%
+ \else
+ \pgfkeysalso{/pgfplots/log plot exponent style,/pgfplots/log base 10 number format code=\pgfmathresult}%
+ \fi
+ \endgroup
+ },
+ /pgfplots/log number format code/.belongs to family=/pgfplots/tick,
+ /pgfplots/log base 10 number format code/.code={{\pgfplots@invoke@pgfkeyscode{/pgfplots/log number format basis/.@cmd}{{10}{#1}}}},
+ /pgfplots/log base 10 number format code/.belongs to family=/pgfplots/tick,
+ % #1 = basis
+ % #2 = exponent
+ /pgfplots/log number format basis/.code 2 args={$#1^{\pgfmathprintnumber{#2}}$},
+ %
+ % #1= number formatting options
+ /pgfplots/log ticks with fixed point/.style={
+ /pgfplots/log number format basis/.code 2 args={
+ \begingroup
+ \edef\pgfplots@exponent{##2}%
+ \pgfkeysalso{/pgf/fpu}%
+ % configure the style to avoid crap like
+ % 10,000.2 or 0.000999937 :
+ \pgfqkeys{/pgf/number format}{%
+ % it is rounded relative to its (individual!) order of
+ % magnitude:
+ fixed relative,
+ % ... and with three digits relative to its order of
+ % magnitude. This should avoid rounding problems
+ % since it is applied to each tick number
+ % individually.
+ precision=3,
+ }%
+ \ifdim##1pt=10pt
+ \def\pgfplots@baselog{2.30258509299405}%
+ \else
+ \pgfmathparse{ln(##1)}%
+ \let\pgfplots@baselog=\pgfmathresult
+ \fi
+ \pgfmathparse{exp(\pgfplots@exponent*\pgfplots@baselog)}%
+ \pgfmathprintnumber[#1]\pgfmathresult
+ \endgroup
+ },
+ },
+ % takes #1 = [xyz]:
+ /pgfplots/log basis ticks/.style={%
+ /pgfplots/every #1 tick label/.append style={%
+ /pgfplots/log number format code/.code={%
+ \begingroup
+ \pgfkeysalso{/pgfplots/log plot exponent style}%
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/log number format basis/.@cmd}{{\pgfkeysvalueof{/pgfplots/log basis #1}}{####1}}%
+ \endgroup
+ }%
+ }%
+ },
+% sets \pgfplots@[xy]tickposnum to
+ /pgfplots/xtick pos/.is choice,
+ /pgfplots/xtick pos/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick pos/left/.code ={\def\pgfplots@xtickposnum{1}},
+ /pgfplots/xtick pos/left/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick pos/right/.code ={\def\pgfplots@xtickposnum{3}},
+ /pgfplots/xtick pos/right/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick pos/both/.code ={\def\pgfplots@xtickposnum{0}},
+ /pgfplots/xtick pos/both/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick pos=both,
+ /pgfplots/ytick pos/.is choice,
+ /pgfplots/ytick pos/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick pos/left/.code ={\def\pgfplots@ytickposnum{1}},
+ /pgfplots/ytick pos/left/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick pos/right/.code ={\def\pgfplots@ytickposnum{3}},
+ /pgfplots/ytick pos/right/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick pos/both/.code ={\def\pgfplots@ytickposnum{0}},
+ /pgfplots/ytick pos/both/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick pos=both,
+ /pgfplots/ztick pos/.is choice,
+ /pgfplots/ztick pos/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick pos/left/.code ={\def\pgfplots@ztickposnum{1}},
+ /pgfplots/ztick pos/left/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick pos/right/.code ={\def\pgfplots@ztickposnum{3}},
+ /pgfplots/ztick pos/right/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick pos/both/.code ={\def\pgfplots@ztickposnum{0}},
+ /pgfplots/ztick pos/both/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick pos=both,
+ /pgfplots/tickpos/.style={
+ /pgfplots/xtick pos={#1},
+ /pgfplots/ytick pos={#1},
+ /pgfplots/ztick pos={#1}
+ },
+ /pgfplots/tickpos/.belongs to family=/pgfplots/tick,
+ /pgfplots/tick pos/.style={/pgfplots/tickpos={#1}},
+% sets the tick LABEL position, \pgfplots@[xy]ticklabel@pos
+% to one of
+% lower (alias left alias bottom) : l
+% upper (alias right alias top) : u
+% default: uses one matches 'tick pos'
+ /pgfplots/xticklabel pos/.code={\pgfplots@setkey@ticklabelpos{x}{#1}},
+ /pgfplots/xticklabel pos/.belongs to family=/pgfplots/tick,
+ /pgfplots/xticklabel pos=default,
+ /pgfplots/yticklabel pos/.code={\pgfplots@setkey@ticklabelpos{y}{#1}},
+ /pgfplots/yticklabel pos/.belongs to family=/pgfplots/tick,
+ /pgfplots/yticklabel pos=default,
+ /pgfplots/zticklabel pos/.code={\pgfplots@setkey@ticklabelpos{z}{#1}},
+ /pgfplots/zticklabel pos/.belongs to family=/pgfplots/tick,
+ /pgfplots/zticklabel pos=default,
+ /pgfplots/ticklabelpos/.style={/pgfplots/ticklabel pos={#1}},
+ /pgfplots/ticklabel pos/.style={
+ /pgfplots/xticklabel pos={#1},
+ /pgfplots/yticklabel pos={#1},
+ /pgfplots/zticklabel pos={#1},
+ },
+ % This feature is more or less deprecated.
+ % The choice 'auto' should always use 'near ticklabel'.
+ %
+ % Choices are
+ % 'auto' (value 0),
+ % 'near ticklabel' (value 1),
+ % 'tikz' (value 2)
+ % with values stored in \pgfplots@ticklabel@anchor@[xyz]
+ /pgfplots/xticklabel anchor/.code={\pgfplots@setticklabel@anchor@for x{#1}},
+ /pgfplots/xticklabel anchor/.belongs to family=/pgfplots/tick,
+ /pgfplots/yticklabel anchor/.code={\pgfplots@setticklabel@anchor@for y{#1}},
+ /pgfplots/yticklabel anchor/.belongs to family=/pgfplots/tick,
+ /pgfplots/zticklabel anchor/.code={\pgfplots@setticklabel@anchor@for z{#1}},
+ /pgfplots/zticklabel anchor/.belongs to family=/pgfplots/tick,
+ /pgfplots/ticklabel anchor/.style={
+ /pgfplots/xticklabel anchor={#1},
+ /pgfplots/yticklabel anchor={#1},
+ /pgfplots/zticklabel anchor={#1}
+ },
+ /pgfplots/ticklabel anchor=auto,
+ /pgfplots/xticklabel shift/.initial=,
+ /pgfplots/yticklabel shift/.initial=,
+ /pgfplots/zticklabel shift/.initial=,
+ /pgfplots/ticklabel shift/.style={
+ /pgfplots/xticklabel shift={#1},
+ /pgfplots/yticklabel shift={#1},
+ /pgfplots/zticklabel shift={#1}
+ },%
+% sets \pgfplots@{x,y}tickalignnum to
+% inside=0
+% outside=1
+% center=2
+ /pgfplots/xtick align/.is choice,
+ /pgfplots/xtick align/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick align/inside/.code ={\def\pgfplots@xtickalignnum{0}},
+ /pgfplots/xtick align/inside/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick align/outside/.code ={\def\pgfplots@xtickalignnum{1}},
+ /pgfplots/xtick align/outside/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick align/center/.code ={\def\pgfplots@xtickalignnum{2}},
+ /pgfplots/xtick align/center/.belongs to family=/pgfplots/tick,
+ /pgfplots/xtick align=inside,
+ /pgfplots/ytick align/.is choice,
+ /pgfplots/ytick align/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick align/inside/.code ={\def\pgfplots@ytickalignnum{0}},
+ /pgfplots/ytick align/inside/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick align/outside/.code ={\def\pgfplots@ytickalignnum{1}},
+ /pgfplots/ytick align/outside/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick align/center/.code ={\def\pgfplots@ytickalignnum{2}},
+ /pgfplots/ytick align/center/.belongs to family=/pgfplots/tick,
+ /pgfplots/ytick align=inside,
+ /pgfplots/ztick align/.is choice,
+ /pgfplots/ztick align/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick align/inside/.code ={\def\pgfplots@ztickalignnum{0}},
+ /pgfplots/ztick align/inside/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick align/outside/.code ={\def\pgfplots@ztickalignnum{1}},
+ /pgfplots/ztick align/outside/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick align/center/.code ={\def\pgfplots@ztickalignnum{2}},
+ /pgfplots/ztick align/center/.belongs to family=/pgfplots/tick,
+ /pgfplots/ztick align=inside,
+ /pgfplots/tick align/.belongs to family=/pgfplots/tick,
+ /pgfplots/tick align/.style={%
+ /pgfplots/xtick align=#1,
+ /pgfplots/ytick align=#1,
+ /pgfplots/ztick align=#1,
+ },%
+% 'axis' options:
+ /pgfplots/anchor/.belongs to family=/pgfplots,
+ /pgfplots/anchor/.store in= \pgfplots@anchorname,
+ /pgfplots/anchor=south west,
+ %
+ % will be evaluated for *every* 'near ticklabel' anchor:
+ /pgfplots/near ticklabel align/.is choice,
+ /pgfplots/near ticklabel align/inside/.code= \def\pgfplots@borderanchor@align{0},
+ /pgfplots/near ticklabel align/center/.code= \def\pgfplots@borderanchor@align{1},
+ /pgfplots/near ticklabel align/outside/.code=\def\pgfplots@borderanchor@align{2},
+ /pgfplots/near ticklabel align/center,
+ %
+ /tikz/near ticklabel at/.style={/pgfplots/near ticklabel at=#1},
+ /pgfplots/near ticklabel at/.initial=,
+ %
+ /pgfplots/cell picture/.is choice,
+ /pgfplots/cell picture/false/.code=\def\pgfplots@cell@picture@mode{0},
+ /pgfplots/cell picture/true/.code=\def\pgfplots@cell@picture@mode{1},
+ /pgfplots/cell picture/if necessary/.code=\def\pgfplots@cell@picture@mode{2},
+ /pgfplots/cell picture/true, % backwards compatibility
+ /pgfplots/log origin x/.is choice,
+ /pgfplots/log origin x/infty/.code={\def\pgfplots@log@origin@choice@x{0}},
+ /pgfplots/log origin x/0/.code={\def\pgfplots@log@origin@choice@x{1}},
+ /pgfplots/log origin y/.is choice,
+ /pgfplots/log origin y/infty/.code={\def\pgfplots@log@origin@choice@y{0}},
+ /pgfplots/log origin y/0/.code={\def\pgfplots@log@origin@choice@y{1}},
+ /pgfplots/log origin z/.is choice,
+ /pgfplots/log origin z/infty/.code={\def\pgfplots@log@origin@choice@z{0}},
+ /pgfplots/log origin z/0/.code={\def\pgfplots@log@origin@choice@z{1}},
+ /pgfplots/log origin/.style={%
+ /pgfplots/log origin x={#1},
+ /pgfplots/log origin y={#1},
+ /pgfplots/log origin z={#1},
+ },
+ /pgfplots/log origin=0,
+% tick options:
+ /pgfplots/ticks/.is choice,
+ /pgfplots/ticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/ticks/none/.belongs to family=/pgfplots/tick,
+ /pgfplots/ticks/none/.code={%
+ \pgfplots@xminorticksfalse
+ \pgfplots@yminorticksfalse
+ \pgfplots@zminorticksfalse
+ \pgfplots@xmajorticksfalse
+ \pgfplots@ymajorticksfalse
+ \pgfplots@zmajorticksfalse
+ },
+ /pgfplots/ticks/major/.belongs to family=/pgfplots/tick,
+ /pgfplots/ticks/major/.code={%
+ \pgfplots@xminorticksfalse
+ \pgfplots@yminorticksfalse
+ \pgfplots@zminorticksfalse
+ \pgfplots@xmajortickstrue
+ \pgfplots@ymajortickstrue
+ \pgfplots@zmajortickstrue
+ },
+ /pgfplots/ticks/minor/.belongs to family=/pgfplots/tick,
+ /pgfplots/ticks/minor/.code={%
+ \pgfplots@xminortickstrue
+ \pgfplots@yminortickstrue
+ \pgfplots@zminortickstrue
+ \pgfplots@xmajorticksfalse
+ \pgfplots@ymajorticksfalse
+ \pgfplots@zmajorticksfalse
+ },
+ /pgfplots/ticks/both/.belongs to family=/pgfplots/tick,
+ /pgfplots/ticks/both/.code={%
+ \pgfplots@xminortickstrue
+ \pgfplots@yminortickstrue
+ \pgfplots@zminortickstrue
+ \pgfplots@xmajortickstrue
+ \pgfplots@ymajortickstrue
+ \pgfplots@zmajortickstrue
+ },
+ /pgfplots/ticks=both,
+ /pgfplots/grid/.is choice,
+ /pgfplots/grid/.belongs to family=/pgfplots/tick,
+ /pgfplots/grid/none/.belongs to family=/pgfplots/tick,
+ /pgfplots/grid/none/.code={%
+ \pgfplots@xminorgridsfalse
+ \pgfplots@yminorgridsfalse
+ \pgfplots@zminorgridsfalse
+ \pgfplots@xmajorgridsfalse
+ \pgfplots@ymajorgridsfalse
+ \pgfplots@zmajorgridsfalse
+ },
+ /pgfplots/grid/major/.belongs to family=/pgfplots/tick,
+ /pgfplots/grid/major/.code={%
+ \pgfplots@xminorgridsfalse
+ \pgfplots@yminorgridsfalse
+ \pgfplots@zminorgridsfalse
+ \pgfplots@xmajorgridstrue
+ \pgfplots@ymajorgridstrue
+ \pgfplots@zmajorgridstrue
+ },
+ /pgfplots/grid/minor/.belongs to family=/pgfplots/tick,
+ /pgfplots/grid/minor/.code={%
+ \pgfplots@xminorgridstrue
+ \pgfplots@yminorgridstrue
+ \pgfplots@zminorgridstrue
+ \pgfplots@xmajorgridsfalse
+ \pgfplots@ymajorgridsfalse
+ \pgfplots@zmajorgridsfalse
+ },
+ /pgfplots/grid/both/.belongs to family=/pgfplots/tick,
+ /pgfplots/grid/both/.code={%
+ \pgfplots@xminorgridstrue
+ \pgfplots@yminorgridstrue
+ \pgfplots@zminorgridstrue
+ \pgfplots@xmajorgridstrue
+ \pgfplots@ymajorgridstrue
+ \pgfplots@zmajorgridstrue
+ },
+ /pgfplots/grid=none,
+ /pgfplots/grid/.default=major,
+ /pgfplots/xminorticks/.is if=pgfplots@xminorticks,
+ /pgfplots/xminorticks/.default=true,
+ /pgfplots/xminorticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/xmajorticks/.is if=pgfplots@xmajorticks,
+ /pgfplots/xmajorticks/.default=true,
+ /pgfplots/xmajorticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/yminorticks/.is if=pgfplots@yminorticks,
+ /pgfplots/yminorticks/.default=true,
+ /pgfplots/yminorticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/ymajorticks/.is if=pgfplots@ymajorticks,
+ /pgfplots/ymajorticks/.default=true,
+ /pgfplots/ymajorticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/zminorticks/.is if=pgfplots@zminorticks,
+ /pgfplots/zminorticks/.default=true,
+ /pgfplots/zminorticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/zmajorticks/.is if=pgfplots@zmajorticks,
+ /pgfplots/zmajorticks/.default=true,
+ /pgfplots/zmajorticks/.belongs to family=/pgfplots/tick,
+ /pgfplots/xminorgrids/.is if=pgfplots@xminorgrids,
+ /pgfplots/xminorgrids/.default=true,
+ /pgfplots/xminorgrids/.belongs to family=/pgfplots/tick,
+ /pgfplots/xmajorgrids/.is if=pgfplots@xmajorgrids,
+ /pgfplots/xmajorgrids/.default=true,
+ /pgfplots/xmajorgrids/.belongs to family=/pgfplots/tick,
+ /pgfplots/yminorgrids/.is if=pgfplots@yminorgrids,
+ /pgfplots/yminorgrids/.default=true,
+ /pgfplots/yminorgrids/.belongs to family=/pgfplots/tick,
+ /pgfplots/ymajorgrids/.is if=pgfplots@ymajorgrids,
+ /pgfplots/ymajorgrids/.default=true,
+ /pgfplots/ymajorgrids/.belongs to family=/pgfplots/tick,
+ /pgfplots/zminorgrids/.is if=pgfplots@zminorgrids,
+ /pgfplots/zminorgrids/.default=true,
+ /pgfplots/zminorgrids/.belongs to family=/pgfplots/tick,
+ /pgfplots/zmajorgrids/.is if=pgfplots@zmajorgrids,
+ /pgfplots/zmajorgrids/.default=true,
+ /pgfplots/zmajorgrids/.belongs to family=/pgfplots/tick,
+% legend options:
+ /pgfplots/legend entries/.initial={},
+ /pgfplots/legend entries/.belongs to family=/pgfplots/legend,
+ /pgfplots/legend to label/.style={/pgfplots/legend to name={#1}},
+ /pgfplots/legend to name/.initial=,%
+ /pgfplots/legend pos/.is choice,
+ /pgfplots/legend pos/south west/.style={/pgfplots/legend style={at={(0.03,0.03)},anchor=south west}},
+ /pgfplots/legend pos/south east/.style={/pgfplots/legend style={at={(0.97,0.03)},anchor=south east}},
+ /pgfplots/legend pos/north west/.style={/pgfplots/legend style={at={(0.03,0.97)},anchor=north west}},
+ /pgfplots/legend pos/north east/.style={/pgfplots/legend style={at={(0.97,0.97)},anchor=north east}},
+ /pgfplots/legend pos/outer north east/.style={/pgfplots/legend style={at={(1.03,1)},anchor=north west}},
+ /pgfplots/legend cell align/.is choice,
+ /pgfplots/legend cell align/left/.style= {/pgfplots/legend style={cells={anchor=west}}},
+ /pgfplots/legend cell align/right/.style= {/pgfplots/legend style={cells={anchor=east}}},
+ /pgfplots/legend cell align/center/.style= {/pgfplots/legend style={cells={anchor=center}}},
+ /pgfplots/legend columns/.store in=\pgfplots@legend@columns,
+ /pgfplots/legend columns/.belongs to family=/pgfplots/legend,
+ /pgfplots/legend columns=1,
+ /pgfplots/legend plot pos/.is choice,
+ /pgfplots/legend plot pos/.belongs to family=/pgfplots/legend,
+ /pgfplots/legend plot pos/left/.code= {\def\pgfplots@legend@plot@pos{0}},
+ /pgfplots/legend plot pos/left/.belongs to family=/pgfplots/legend,
+ /pgfplots/legend plot pos/right/.code= {\def\pgfplots@legend@plot@pos{1}},
+ /pgfplots/legend plot pos/right/.belongs to family=/pgfplots/legend,
+ /pgfplots/legend plot pos/none/.code= {\def\pgfplots@legend@plot@pos{2}},
+ /pgfplots/legend plot pos/none/.belongs to family=/pgfplots/legend,
+ /pgfplots/legend plot pos=left,
+ /pgfplots/every legend image post/.code={},%
+ /pgfplots/legend image post style/.style={/pgfplots/every legend image post/.append style={#1}},
+ /pgfplots/empty legend/.style={/pgfplots/legend image code/.code=},
+ /pgfplots/line legend/.style={%
+ /pgfplots/legend image code/.code={%
+ \draw[%
+ /pgfplots/mesh=false,%
+ % reset bar options. This is to address the strange
+ % backwards compatibility handling implemented by
+ % \pgfplots@install@local@bar@handlers (see its docs).
+ % This should not hurt at all since 'line legend' is
+ % unsuitable for bar plots anyway.
+ bar width=3pt,%
+ bar shift=0pt,%
+ %
+ mark repeat=2,%
+ mark phase=2,##1]
+ plot coordinates {
+ (0cm,0cm)
+ (0.3cm,0cm)
+ (0.6cm,0cm)%
+ };%
+ }%
+ },
+ /pgfplots/line legend/.style/.code={\pgfplots@error{This style is supposed to be constant.}},%
+ /pgfplots/line legend/.append style/.code={\pgfplots@error{This style is supposed to be constant.}},%
+ /pgfplots/line legend,
+ /pgfplots/legend image code/.belongs to family=/pgfplots/legend,
+ /pgfplots/reverse legend/.is if=pgfplots@reverse@legend,
+ /pgfplots/reverse legend/.default=true,
+ /pgfplots/transpose legend/.is if=pgfplots@transpose@legend,
+ /pgfplots/transpose legend/.default=true,
+ /pgfplots/legend transposed/.style={transpose legend=#1},
+ /pgfplots/legend reversed/.style={reverse legend=#1},
+% axis description options:
+ /pgfplots/title/.initial=,
+ /pgfplots/xlabel/.initial=,
+ /pgfplots/ylabel/.initial=,
+ /pgfplots/zlabel/.initial=,
+ /pgfplots/xlabel shift/.initial=0pt,
+ /pgfplots/ylabel shift/.initial=0pt,
+ /pgfplots/zlabel shift/.initial=0pt,
+ /pgfplots/label shift/.style={%
+ /pgfplots/xlabel shift={#1},
+ /pgfplots/ylabel shift={#1},
+ /pgfplots/zlabel shift={#1},
+ },%
+ /pgfplots/extra description/.code=,
+% axis options:
+ /pgfplots/at/.code={%
+ \pgfplots@assert@tikzinternal@exists{tikz@scan@one@point}%
+ \tikz@scan@one@point\pgfplots@set@at#1},
+ /pgfplots/at/.belongs to family=/pgfplots,
+ /pgfplots/trim axis left/.code={%
+ \pgfutil@ifundefined{pgfsettrimleft}{%
+ \pgfplots@error{Sorry, the 'trim axis left' requires a more recent PGF version.}%
+ }{%
+ \pgfkeysalso{/tikz/trim left=(current axis.south west)}%
+ }%
+ },%
+ /tikz/trim axis left/.style={/pgfplots/trim axis left},
+ /pgfplots/trim axis right/.code={%
+ \pgfutil@ifundefined{pgfsettrimleft}{%
+ \pgfplots@error{Sorry, the 'trim axis right' requires a more recent PGF version.}%
+ }{%
+ \pgfkeysalso{/tikz/trim right=(current axis.south east)}%
+ }%
+ },%
+ /tikz/trim axis right/.style={/pgfplots/trim axis right},
+ /pgfplots/clip limits compat/.is if=pgfplots@clip@limits@compatmode,
+ /pgfplots/clip limits if compat/.code={
+ \ifpgfplots@clip@limits@compatmode
+ \else
+ \pgfkeysalso{#1}%
+ \fi
+ },
+ /pgfplots/clip xlimits/.is if=pgfplots@clip@limits@x,
+ /pgfplots/clip xlimits/.default=true,
+ /pgfplots/clip ylimits/.is if=pgfplots@clip@limits@y,
+ /pgfplots/clip ylimits/.default=true,
+ /pgfplots/clip zlimits/.is if=pgfplots@clip@limits@z,
+ /pgfplots/clip zlimits/.default=true,
+ /pgfplots/clip limits/.style={
+ /pgfplots/clip xlimits={#1},%
+ /pgfplots/clip ylimits={#1},%
+ /pgfplots/clip zlimits={#1},%
+ },
+ /pgfplots/clip limits=true,
+ %/pgfplots/clip limits/.belongs to family=/pgfplots,
+ /pgfplots/clip/.is if=pgfplots@clip,
+ /pgfplots/clip/.default=true,
+ /pgfplots/clip=true,
+ /pgfplots/clip mode/.is choice,
+ /pgfplots/clip mode/global/.code= \def\pgfplots@clipmode{1},
+ % this choice is implemented partially only (only for plots, not for
+ % graphical elements):
+ /pgfplots/clip mode/individual/.code= \def\pgfplots@clipmode{2},
+ /pgfplots/clip mode=global,
+ /pgfplots/clip bounding box/.is choice,
+ /pgfplots/clip bounding box/default tikz/.code=\def\pgfplots@clip@BB@mode{0},
+ /pgfplots/clip bounding box/upper bound/.code=\def\pgfplots@clip@BB@mode{1},
+ /pgfplots/clip bounding box=default tikz, % the compat stuff. this is for backw. compat.
+ % will be used if it exists:
+ /pgfplots/axis background/.style={},
+ /pgfplots/axis background style/.style={/pgfplots/axis background/.append style={#1}},
+ %
+ % the 'axis background@' style is an optimization: it will only be
+ % used if 'axis background' is non-empty.
+ % The motivation is that once 'axis background' is non-empty, a
+ % background path will be generated whereas the 'axis background@'
+ % style can be changed at will.
+ /pgfplots/axis background@/.style={},
+ /pgfplots/axis background@ style/.style={/pgfplots/axis background@/.append style={#1}},
+ %
+ % 2d: 'unit vector ratio=2 1 is relative to y axis (x is twice as large as y)
+ % 3d: 'unit vector ratio=2 2 1 is relative to z axis (x and y are both twice as large as z)
+ % missing values are assumed to be 1.
+ /pgfplots/unit vector ratio/.initial=,% empty means 'disable rescale'.
+ /pgfplots/unit vector ratio axis/.initial=,% DEBUG. This is the reference axis which won't be scaled down. This key might vanish.
+ /pgfplots/unit vector ratio*/.style={%
+ /pgfplots/unit vector ratio={#1},
+ /pgfplots/unit rescale keep size=false,
+ },
+ /pgfplots/unit rescale keep size/.is choice,
+ /pgfplots/unit rescale keep size/true/.code={\def\pgfplots@unit@vector@rescale@keep@size{1}},
+ /pgfplots/unit rescale keep size/false/.code={\def\pgfplots@unit@vector@rescale@keep@size{0}},
+ /pgfplots/unit rescale keep size/unless limits declared/.code={\def\pgfplots@unit@vector@rescale@keep@size{2}},
+ /pgfplots/unit rescale keep size/.default=true,
+ /pgfplots/unit rescale keep size=unless limits declared,
+ /pgfplots/axis equal/.is choice,
+ /pgfplots/axis equal/true/.style={
+ /pgfplots/unit vector ratio=1 1 1,
+ /pgfplots/unit rescale keep size=true
+ },
+ /pgfplots/axis equal/false/.style={
+ /pgfplots/unit vector ratio=,
+ },
+ /pgfplots/axis equal/.default=true,
+ /pgfplots/axis equal image/.is choice,
+ /pgfplots/axis equal image/true/.style={%
+ /pgfplots/unit vector ratio=1 1 1,
+ /pgfplots/unit rescale keep size=false
+ },
+ /pgfplots/axis equal image/false/.style={%
+ /pgfplots/unit vector ratio=,
+ },
+ /pgfplots/axis equal image/.default=true,
+ /pgfplots/xmin/.initial=,
+ /pgfplots/xmax/.initial=,
+ /pgfplots/ymin/.initial=,
+ /pgfplots/ymax/.initial=,
+ /pgfplots/zmin/.initial=,
+ /pgfplots/zmax/.initial=,
+ /pgfplots/min/.style={xmin={#1},ymin={#1},zmin={#1}},
+ /pgfplots/max/.style={xmax={#1},ymax={#1},zmax={#1}},
+ /pgfplots/xtickmin/.initial=,
+ /pgfplots/xtickmax/.initial=,
+ /pgfplots/ytickmin/.initial=,
+ /pgfplots/ytickmax/.initial=,
+ /pgfplots/ztickmin/.initial=,
+ /pgfplots/ztickmax/.initial=,
+ /pgfplots/stack plots/.is choice,
+ /pgfplots/stack plots/.belongs to family=/pgfplots,
+ /pgfplots/stack plots/x/.code={\def\pgfplots@stacked@dir{x}\pgfplots@stackedmodetrue},
+ /pgfplots/stack plots/x/.belongs to family=/pgfplots,
+ /pgfplots/stack plots/y/.code={\def\pgfplots@stacked@dir{y}\pgfplots@stackedmodetrue},
+ /pgfplots/stack plots/y/.belongs to family=/pgfplots,
+ /pgfplots/stack plots/z/.code={\def\pgfplots@stacked@dir{z}\pgfplots@stackedmodetrue},
+ /pgfplots/stack plots/z/.belongs to family=/pgfplots,
+ /pgfplots/stack plots/false/.code={\pgfplots@stackedmodefalse},
+ /pgfplots/stack plots/false/.belongs to family=/pgfplots,
+ /pgfplots/stack plots=false,
+ /pgfplots/stack negative/.is choice,
+ /pgfplots/stack negative/on previous/.code={\def\pgfplots@stacked@negative@mode{P}},
+ /pgfplots/stack negative/separate/.code={\def\pgfplots@stacked@negative@mode{S}},
+ /pgfplots/stack negative/on previous,
+ /pgfplots/reverse stacked plots/.is if=pgfplots@stacked@reverse,
+ /pgfplots/reverse stacked plots/.belongs to family=/pgfplots,
+ /pgfplots/reverse stacked plots/.default=true,
+ /pgfplots/reverse stacked plots=true,
+ /pgfplots/stack dir/.is choice,
+ /pgfplots/stack dir/.belongs to family=/pgfplots,
+ /pgfplots/stack dir/plus/.code={\pgfplots@stacked@plustrue},
+ /pgfplots/stack dir/plus/.belongs to family=/pgfplots,
+ /pgfplots/stack dir/minus/.code={\pgfplots@stacked@plusfalse},
+ /pgfplots/stack dir/minus/.belongs to family=/pgfplots,
+ /pgfplots/stack dir=plus,
+ /pgfplots/stacked ignores zero/.is if=pgfplots@stacked@ignores@zero,
+ /pgfplots/stacked ignores zero/.default=true,
+ %
+ % The purpose of the following key is to control the case 'stacked ignores zero=true'
+ % (it has no effect if 'stacked ignores zero=false').
+ % The feature "stacked ignores zero" is active *if and only if*
+ % 1. stacked ignores zero=true and
+ % 2. stacked ignores zero/<phasename>=true
+ % Valid <phasename>s are 'default', 'markers', 'errorbars'.
+ /pgfplots/stacked ignores zero/\pgfplotsaxis@visphase@name@default/.initial=true,
+ /pgfplots/stacked ignores zero/\pgfplotsaxis@visphase@name@markers/.initial=true,
+ /pgfplots/stacked ignores zero/\pgfplotsaxis@visphase@name@errorbars/.initial=false,
+ /pgfplots/filter discard warning/.is if=pgfplots@warn@for@filter@discards,
+ /pgfplots/filter discard warning=true,
+ /pgfplots/pre filter/.code={},
+ /pgfplots/x filter/.code={},
+ /pgfplots/x filter/.belongs to family=/pgfplots,
+ /pgfplots/y filter/.code={},
+ /pgfplots/y filter/.belongs to family=/pgfplots,
+ /pgfplots/z filter/.code={},
+ /pgfplots/z filter/.belongs to family=/pgfplots,
+ /pgfplots/filter point/.code=,
+ /pgfplots/x filter/.expression/.code=\pgfplots@install@filter@expression{x filter}{#1},
+ /pgfplots/y filter/.expression/.code=\pgfplots@install@filter@expression{y filter}{#1},
+ /pgfplots/z filter/.expression/.code=\pgfplots@install@filter@expression{z filter}{#1},
+ /pgfplots/x filter/.append expression/.code=\pgfplots@install@filter@expression@append{x filter}{#1},
+ /pgfplots/y filter/.append expression/.code=\pgfplots@install@filter@expression@append{y filter}{#1},
+ /pgfplots/z filter/.append expression/.code=\pgfplots@install@filter@expression@append{z filter}{#1},
+ /pgfplots/restrict x to domain/.style={/pgfplots/@restrict to domain={x}{}{#1}{0}},%
+ /pgfplots/restrict y to domain/.style={/pgfplots/@restrict to domain={y}{}{#1}{0}},%
+ /pgfplots/restrict z to domain/.style={/pgfplots/@restrict to domain={z}{}{#1}{0}},%
+ /pgfplots/restrict expr to domain/.style 2 args={/pgfplots/@restrict to domain={x}{#1}{#2}{0}},%
+ /pgfplots/restrict x to domain*/.style={/pgfplots/@restrict to domain={x}{}{#1}{1}},%
+ /pgfplots/restrict y to domain*/.style={/pgfplots/@restrict to domain={y}{}{#1}{1}},%
+ /pgfplots/restrict z to domain*/.style={/pgfplots/@restrict to domain={z}{}{#1}{1}},%
+ /pgfplots/restrict expr to domain*/.style 2 args={/pgfplots/@restrict to domain={x}{#1}{#2}{1}},%
+ % '#1': the filter to install (like 'x', 'y', or even 'hist/data')
+ % '#2': a mathematical expression (or empty)
+ % '#3': the interval. must be numeric currently, and of the form min:max
+ % '#4': bAssignLimits=0|1. if #4=1, any coordinate outside of the
+ % allowed domain will take the domain boundary as value. If #4=0,
+ % any coordinate outside of the allowed domain will get 'inf' or
+ % '-inf'.
+ /pgfplots/@restrict to domain/.code args={#1#2#3#4}{%
+ \if0#4%
+ \pgfkeysalso{/pgfplots/unbounded coords=jump}%
+ \fi
+ % when invoked, ##1 and ##2 will be floats:
+ \def\pgfplots@loc@TMPb##1:##2\relax{%
+ \pgfkeysalso{%
+ /pgfplots/#1 filter/.append code={%
+ \pgfplots@warn@if@log@basis@unset{#1}{domain restriction}%
+ \let\pgfplots@restrict@to@domain@orig=\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ % the input value is empty... skip it!
+ \else
+ \def\pgfplots@restrict@to@domain@tmp{#2}%
+ \ifx\pgfplots@restrict@to@domain@tmp\pgfutil@empty
+ % we don't have an expression.
+ \else
+ % evaluate the expression!
+ \pgfmathparse{#2}%
+ \fi
+ \pgfplotscoordmath{default}{parsenumber}{\pgfmathresult}%
+ \let\pgfplots@restrict@to@domain@tmp=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{if less than}
+ {\pgfplots@restrict@to@domain@tmp}{##1}% ##1 is the lower argument
+ {%
+ \edef\pgfmathresult{\if0#4inf\else ##1\fi}%
+ }{%
+ \pgfplotscoordmath{default}{if less than}
+ {##2}{\pgfplots@restrict@to@domain@tmp}
+ {\edef\pgfmathresult{\if0#4-inf\else ##2\fi}}
+ {\let\pgfmathresult=\pgfplots@restrict@to@domain@orig}%
+ }%
+ \fi
+ }%
+ }%
+ }%
+ % when invoked, ##1 and ##2 will be the user-supplied args.
+ \def\pgfplots@loc@TMPc##1:##2\relax{%
+ \pgfplotscoordmath{default}{parsenumber}{##1}%
+ \let\pgfplots@rangea=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{##2}%
+ \edef\pgfplots@loc@TMPc{\pgfplots@rangea:\pgfmathresult}%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPc\relax
+ }%
+ \edef\pgfplots@loc@TMPa{#3}%
+ \expandafter\pgfplots@loc@TMPc\pgfplots@loc@TMPa\relax
+ },%
+ % -> keeps only the nth point, all other ones will get ''.
+ /pgfplots/each nth point/.style={/pgfplots/each nth point*={x}{#1}},%
+ % #1: the filter name: x, y, z, or something exotic like hist/data
+ % #2: the N of 'each nth'
+ /pgfplots/each nth point*/.style 2 args={%
+ /pgfplots/#1 filter/.append code={%
+ \ifnum\coordindex=0
+ \def\c@pgfplots@eachnthpoint@xfilter{0}%
+ \edef\c@pgfplots@eachnthpoint@xfilter@cmp{#2}%
+ \else
+ \pgfplotsutil@advancestringcounter\c@pgfplots@eachnthpoint@xfilter
+ \ifx\c@pgfplots@eachnthpoint@xfilter@cmp\c@pgfplots@eachnthpoint@xfilter
+ \def\c@pgfplots@eachnthpoint@xfilter{0}%
+ \else
+ \let\pgfmathresult\pgfutil@empty
+ \fi
+ \fi
+ }%
+ },
+ /pgfplots/skip coords between index/.style 2 args={/pgfplots/skip coords between index*={x}{#1}{#2}},%
+ % #1: the filter name
+ % #2,#3: from 'skip coords between index'
+ /pgfplots/skip coords between index*/.style n args={3}{%
+ /pgfplots/#1 filter/.append code={%
+ \ifnum\coordindex<#2\relax
+ \else
+ \ifnum\coordindex<#3\relax
+ \let\pgfmathresult=\pgfutil@empty
+ \fi
+ \fi}
+ },
+ /pgfplots/translate gnuplot/.is if=pgfplots@translategnuplot,
+ /pgfplots/gnuplot writes logscale/.is choice,
+ /pgfplots/gnuplot writes logscale/true/.code={\gdef\pgfplots@gnuplot@logscale@writes@log{1}},%
+ /pgfplots/gnuplot writes logscale/false/.code={\gdef\pgfplots@gnuplot@logscale@writes@log{0}},%
+ /pgfplots/parametric/var 2d/.initial={\u,\v},
+ /pgfplots/parametric/var 1d/.initial=\t,
+ /pgfplots/xfilter/.initial=,% DEPRECATED
+ /pgfplots/yfilter/.initial=,% DEPRECATED
+ /pgfplots/zfilter/.initial=,% DEPRECATED
+ % interpretation:
+ % if 'samples at'==empty && 'domain' == empty
+ % use tikz option processing!
+ % else if 'samples at' == empty
+ % use 'domain'
+ % else
+ % use 'samples at'
+ /pgfplots/domain/.initial=,% empty -> use value of /tikz/domain! see \pgfplots@validate@plot@domain@arguments
+ /pgfplots/y domain/.initial=,% means: use the same as 'domain'
+ /pgfplots/domain y/.style={/pgfplots/y domain={#1}},
+ /pgfplots/samples at/.initial=,% empty -> use value of /tikz/samples at!
+ /pgfplots/samples/.initial=,% empty -> use /tikz/samples!
+ /pgfplots/samples y/.initial=,% empty -> use the same as 'samples'. For use in mesh plots.
+ /pgfplots/samples at colormap pos/.code={%
+ \pgfplots@colorbar@positions@to@samplesat
+ },
+ /pgfplots/variable/.code={\pgfkeysalso{/tikz/variable={#1}}},
+ /pgfplots/variable y/.initial=\y,%
+ /pgfplots/sample dim/.initial=auto,
+ % and provide aliases in the '/pgfplots/' tree to avoid
+ % search path problems just for the following options:
+ /pgfplots/name/.code={\pgfkeysalso{/tikz/name={#1}}},
+ /pgfplots/overlay/.code={\pgfkeysalso{/tikz/overlay={#1}}},
+ /pgfplots/alias/.code={\pgfkeysalso{/tikz/alias={#1}}},
+ /pgfplots/id/.code={\pgfkeysalso{/tikz/id={#1}}},
+ /pgfplots/prefix/.code={\pgfkeysalso{/tikz/prefix={#1}}},
+ /pgfplots/raw gnuplot/.code={\pgfkeysalso{/tikz/raw gnuplot={#1}}},
+ /pgfplots/parametric/.code={\pgfkeysalso{/tikz/parametric={#1}}},%
+ %
+ /pgfplots/width/.initial=,%
+ /pgfplots/width/.belongs to family=/pgfplots,
+ /pgfplots/height/.initial=,%
+ /pgfplots/height/.belongs to family=/pgfplots,
+ /pgfplots/execute at begin plot/.initial=,
+ /pgfplots/execute at begin plot visualization/.initial=,
+ /pgfplots/execute at begin plot@@/.initial=,% an internal variant
+ /pgfplots/execute at end plot/.initial=,
+ /pgfplots/execute at end plot visualization/.initial=,
+ /pgfplots/execute at end plot@@/.initial=,% an internal variant
+ /pgfplots/execute at end survey/.initial=,%
+ /pgfplots/execute at begin axis/.initial=,
+ /pgfplots/execute at begin axis@@/.initial=,% an internal variant
+ /pgfplots/execute at end axis/.initial=,
+ /pgfplots/execute at end axis@@/.initial=,% an internal variant
+ /pgfplots/execute for finished point/.initial=,
+ /pgfplots/before end axis/.code=,
+ /pgfplots/after end axis/.code=,
+ /pgfplots/enlarge x limits/.initial=auto,
+ /pgfplots/enlarge x limits/.default=true,
+ /pgfplots/enlarge y limits/.initial=auto,
+ /pgfplots/enlarge y limits/.default=true,
+ /pgfplots/enlarge z limits/.initial=auto,
+ /pgfplots/enlarge z limits/.default=true,
+ /pgfplots/enlargelimits/.style={%
+ /pgfplots/enlarge x limits={#1},%
+ /pgfplots/enlarge y limits={#1},%
+ /pgfplots/enlarge z limits={#1},%
+ },%
+ /pgfplots/enlargelimits/.default=true,
+ /pgfplots/enlargelimits respects figure size/.is if=pgfplots@enlargelimits@respect@figure@size,
+ /pgfplots/update limits/.is if=pgfplots@bb@isactive,
+ /pgfplots/x/.initial=,% is implicitly set by 'width' and/or '\axisdefaultwidth'
+ /pgfplots/x/.belongs to family=/pgfplots,
+ /pgfplots/y/.initial=,% is implicitly set by 'width' and/or '\axisdefaultwidth'
+ /pgfplots/y/.belongs to family=/pgfplots,
+ /pgfplots/z/.initial=,
+ /pgfplots/z/.belongs to family=/pgfplots,
+ /pgfplots/view dir/.initial=,% DEBUG
+ /pgfplots/x dir/.code={\pgfplots@setkey@axisdir@for x{#1}},%
+ /pgfplots/y dir/.code={\pgfplots@setkey@axisdir@for y{#1}},%
+ /pgfplots/z dir/.code={\pgfplots@setkey@axisdir@for z{#1}},%
+ /pgfplots/x dir=normal,%
+ /pgfplots/y dir=normal,%
+ /pgfplots/z dir=normal,%
+ /pgfplots/x post scale/.initial=,
+ /pgfplots/y post scale/.initial=,
+ /pgfplots/z post scale/.initial=,
+ /pgfplots/scale/.style={%
+ /pgfplots/x post scale={#1},%
+ /pgfplots/y post scale={#1},%
+ /pgfplots/z post scale={#1},%
+ },
+ /pgfplots/scale mode/.is choice,
+ /pgfplots/scale mode/auto/.code={\def\pgfplots@scale@mode@choice{0}},
+ /pgfplots/scale mode/none/.code={\def\pgfplots@scale@mode@choice{1}},
+ /pgfplots/scale mode/stretch to fill/.code={\def\pgfplots@scale@mode@choice{2}},
+ /pgfplots/scale mode/scale uniformly/.code={\def\pgfplots@scale@mode@choice{3}},
+ /pgfplots/scale mode/auto,
+ /pgfplots/scale uniformly strategy/.is choice,
+ % chooses one of the other choices depending on the target
+ % width/height:
+ /pgfplots/scale uniformly strategy/auto/.code= {\def\pgfplots@scaleuniformly@choice{0}},
+ % scales units only, but does not compensate limits:
+ /pgfplots/scale uniformly strategy/units only/.code= {\def\pgfplots@scaleuniformly@choice{1}},
+ % changes only vertical limits, no horizontal limits:
+ /pgfplots/scale uniformly strategy/change vertical limits/.code= {\def\pgfplots@scaleuniformly@choice{2}},
+ % changes X and Y limits, but not Z limits - adjusts scale accordingly:
+ /pgfplots/scale uniformly strategy/change horizontal limits/.code= {\def\pgfplots@scaleuniformly@choice{3}},
+ /pgfplots/scale uniformly strategy/auto,
+ /pgfplots/scale uniformly warning/.is if=pgfplots@scaleuniformly@warning,
+ /pgfplots/scale uniformly warning=false,
+ % number of iterations for the nonlinear method involved
+ /pgfplots/scale uniformly strategy iter/.initial=9,
+ /pgfplots/allow reversal of rel axis cs/.is if=pgfplots@allow@reversal@of@rel@axis@cs,%
+ /pgfplots/allow reversal of rel axis cs/.default=true,%
+ /pgfplots/allow reversal of rel axis cs=true,%
+ /pgfplots/plot box ratio/.initial=1 1 1,%
+ /pgfplots/view/az/.initial=25,%
+ /pgfplots/view/h/.code={\pgfkeyssetvalue{/pgfplots/view/az}{#1}},%
+ /pgfplots/view/el/.initial=30,%
+ /pgfplots/view/v/.code={\pgfkeyssetvalue{/pgfplots/view/el}{#1}},%
+ /pgfplots/view/.style 2 args={%
+ /pgfplots/view/az={#1},%
+ /pgfplots/view/el={#2}%
+ },%
+ /pgfplots/cycle list/.define/.code 2 args={%
+ \pgfplotscreateplotcyclelist{#1}{#2}%
+ },
+ /pgfplots/cycle list/.style={%
+ /pgfplots/cycle list/.define={@internal@}{#1},%
+ /pgfplots/cycle list name={@internal@}%
+ },
+ /pgfplots/cycle list/.belongs to family=/pgfplots,
+ /pgfplots/cycle list name/.code={%
+ \pgfplotsifcyclelistexists{#1}{%
+ \expandafter\let\expandafter\autoplotspeclist\csname pgfp@cyclist@\string#1@\endcsname
+ \expandafter\let\csname pgfp@cyclist@auto@\endcsname=\autoplotspeclist
+ \pgfkeyssetvalue{/pgfplots/cycle multi list/@dim}{0}% de-activate.
+ }{%
+ \pgfplots@error{Sorry, there is no such cycle list named \string#1. Maybe you misspelled it?}%
+ }%
+ },
+ /pgfplots/cycle list name/.belongs to family=/pgfplots,
+ /pgfplots/cycle list name=color,
+ /pgfplots/cycle list shift/.initial=,
+ /pgfplots/mark list fill/.initial=.!80!black,
+ % accepts arguments of the form
+ % <first list spec>\nextlist <second list spec>\nextlist ....
+ % where each list spec is EITHER a cycle list name OR a cycle list
+ % argument.
+ /pgfplots/cycle multi list/.code={%
+ \def\pgfplots@cycle@multi@list@sequence{L}% [L]exicographical
+ \pgfplots@cycle@multi@list{#1}%
+ },
+ /pgfplots/cycle multi list/.belongs to family=/pgfplots,
+ /pgfplots/cycle multiindex list/.code={%
+ \def\pgfplots@cycle@multi@list@sequence{M}% [M]ultiindex
+ \def\pgfplots@cycle@multi@list@repeat{A}% [A]ll
+ \pgfplots@cycle@multi@list{#1}%
+ },
+ /pgfplots/cycle multiindex list/.belongs to family=/pgfplots,
+ /pgfplots/cycle multiindex* list/.code={%
+ \def\pgfplots@cycle@multi@list@sequence{M}% [M]ultiindex
+ \def\pgfplots@cycle@multi@list@repeat{S}% [S]ingle
+ \pgfplots@cycle@multi@list{#1}%
+ },
+ /pgfplots/cycle multiindex* list/.belongs to family=/pgfplots,
+ % #1: list index
+ % #2: maximum number of elements to use
+ /pgfplots/cycle multi list/partial sublist/.code 2 args={%
+ \ifnum#1<\pgfkeysvalueof{/pgfplots/cycle multi list/@dim}
+ \ifnum#2<\pgfkeysvalueof{/pgfplots/cycle multi list/@totalN#1}
+ \pgfkeyssetvalue{/pgfplots/cycle multi list/@N#1}{#2}%
+ \fi
+ \else
+ \pgfplots@error{Sorry, the first argument of `cycle multi list/partial sublist=<list index><num elems>' is no valid list index (should be less than \pgfkeysvalueof{/pgfplots/cycle multi list/@dim}).}%
+ \fi
+ },%
+ /pgfplots/cycle multi list/@dim/.initial=0,
+ %/pgfplots/cycle multi list/@maxlen/.initial=0,
+ %/pgfplots/cycle multi list/@list0/.style={},
+ %/pgfplots/cycle multi list/@N0/.initial=0,%
+ %/pgfplots/cycle multi list/@totalN0/.initial=0,%
+ /pgfplots/legend style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/legend style/.code={%
+ \pgfkeysalso{/pgfplots/every axis legend/.append style={#1}}%
+ },
+ /pgfplots/every forget plot/.code={},%
+ /pgfplots/forget plot style/.style={/pgfplots/every forget plot/.append style={#1}},
+ /pgfplots/label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/label style/.style={%
+ /pgfplots/every axis x label/.append style={#1},%
+ /pgfplots/every axis y label/.append style={#1},%
+ /pgfplots/every axis z label/.append style={#1}%
+ },%
+ /pgfplots/x label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/x label style/.code={%
+ \pgfkeysalso{/pgfplots/every axis x label/.append style={#1}}%
+ },
+ /pgfplots/y label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/y label style/.code={%
+ \pgfkeysalso{/pgfplots/every axis y label/.append style={#1}}%
+ },
+ /pgfplots/z label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/z label style/.code={%
+ \pgfkeysalso{/pgfplots/every axis z label/.append style={#1}}%
+ },
+ /pgfplots/title style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/title style/.code={%
+ \pgfkeysalso{/pgfplots/every axis title/.append style={#1}}%
+ },
+ /pgfplots/tick label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/tick label style/.code={%
+ \pgfkeysalso{/pgfplots/every tick label/.append style={#1}}%
+ },
+ /pgfplots/x tick label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/x tick label style/.code={%
+ \pgfkeysalso{/pgfplots/every x tick label/.append style={#1}}%
+ },
+ /pgfplots/y tick label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/y tick label style/.code={%
+ \pgfkeysalso{/pgfplots/every y tick label/.append style={#1}}%
+ },
+ /pgfplots/z tick label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/z tick label style/.code={%
+ \pgfkeysalso{/pgfplots/every z tick label/.append style={#1}}%
+ },
+ /pgfplots/x tick scale label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/x tick scale label style/.code={%
+ \pgfkeysalso{/pgfplots/every x tick scale label/.append style={#1}}%
+ },
+ /pgfplots/y tick scale label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/y tick scale label style/.code={%
+ \pgfkeysalso{/pgfplots/every y tick scale label/.append style={#1}}%
+ },
+ /pgfplots/z tick scale label style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/z tick scale label style/.code={%
+ \pgfkeysalso{/pgfplots/every z tick scale label/.append style={#1}}%
+ },
+ /pgfplots/tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/tick style/.code={%
+ \pgfkeysalso{/pgfplots/every tick/.append style={#1}}%
+ },
+ /pgfplots/minor tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor tick style/.code={%
+ \pgfkeysalso{/pgfplots/every minor tick/.append style={#1}}%
+ },
+ /pgfplots/major tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major tick style/.code={%
+ \pgfkeysalso{/pgfplots/every major tick/.append style={#1}}%
+ },
+ /pgfplots/x tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/x tick style/.code={%
+ \pgfkeysalso{/pgfplots/every x tick/.append style={#1}}%
+ },
+ /pgfplots/minor x tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor x tick style/.code={%
+ \pgfkeysalso{/pgfplots/every minor x tick/.append style={#1}}%
+ },
+ /pgfplots/major x tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major x tick style/.code={%
+ \pgfkeysalso{/pgfplots/every major x tick/.append style={#1}}%
+ },
+ /pgfplots/y tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/y tick style/.code={%
+ \pgfkeysalso{/pgfplots/every y tick/.append style={#1}}%
+ },
+ /pgfplots/minor y tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor y tick style/.code={%
+ \pgfkeysalso{/pgfplots/every minor y tick/.append style={#1}}%
+ },
+ /pgfplots/major y tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major y tick style/.code={%
+ \pgfkeysalso{/pgfplots/every major y tick/.append style={#1}}%
+ },
+ /pgfplots/z tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/z tick style/.code={%
+ \pgfkeysalso{/pgfplots/every z tick/.append style={#1}}%
+ },
+ /pgfplots/minor z tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor z tick style/.code={%
+ \pgfkeysalso{/pgfplots/every minor z tick/.append style={#1}}%
+ },
+ /pgfplots/major z tick style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major z tick style/.code={%
+ \pgfkeysalso{/pgfplots/every major z tick/.append style={#1}}%
+ },
+ /pgfplots/grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/grid style/.code={%
+ \pgfkeysalso{/pgfplots/every axis grid/.append style={#1}}%
+ },
+ /pgfplots/minor grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor grid style/.code={%
+ \pgfkeysalso{/pgfplots/every minor grid/.append style={#1}}%
+ },
+ /pgfplots/major grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major grid style/.code={%
+ \pgfkeysalso{/pgfplots/every major grid/.append style={#1}}%
+ },
+ /pgfplots/x grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/x grid style/.code={%
+ \pgfkeysalso{/pgfplots/every axis x grid/.append style={#1}}%
+ },
+ /pgfplots/minor x grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor x grid style/.code={%
+ \pgfkeysalso{/pgfplots/every minor x grid/.append style={#1}}%
+ },
+ /pgfplots/major x grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major x grid style/.code={%
+ \pgfkeysalso{/pgfplots/every major x grid/.append style={#1}}%
+ },
+ /pgfplots/y grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/y grid style/.code={%
+ \pgfkeysalso{/pgfplots/every axis y grid/.append style={#1}}%
+ },
+ /pgfplots/minor y grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor y grid style/.code={%
+ \pgfkeysalso{/pgfplots/every minor y grid/.append style={#1}}%
+ },
+ /pgfplots/major y grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major y grid style/.code={%
+ \pgfkeysalso{/pgfplots/every major y grid/.append style={#1}}%
+ },
+ /pgfplots/z grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/z grid style/.code={%
+ \pgfkeysalso{/pgfplots/every axis z grid/.append style={#1}}%
+ },
+ /pgfplots/minor z grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/minor z grid style/.code={%
+ \pgfkeysalso{/pgfplots/every minor z grid/.append style={#1}}%
+ },
+ /pgfplots/major z grid style/.belongs to family=/pgfplots/style commands,
+ /pgfplots/major z grid style/.code={%
+ \pgfkeysalso{/pgfplots/every major z grid/.append style={#1}}%
+ },
+ /pgfplots/disablelogfilter x/.is if=pgfplots@disablelogfilter@x,
+ /pgfplots/disablelogfilter x/.default=true,
+ /pgfplots/disablelogfilter y/.is if=pgfplots@disablelogfilter@y,
+ /pgfplots/disablelogfilter y/.default=true,
+ /pgfplots/disablelogfilter z/.is if=pgfplots@disablelogfilter@z,
+ /pgfplots/disablelogfilter z/.default=true,
+ /pgfplots/disablelogfilter/.style={
+ /pgfplots/disablelogfilter x=#1,
+ /pgfplots/disablelogfilter y=#1,
+ /pgfplots/disablelogfilter z=#1,
+ },
+ /pgfplots/disabledatascaling/.is if=pgfplots@disabledatascaling,
+ /pgfplots/disabledatascaling/.default=true,
+ /pgfplots/disabledatascaling/.belongs to family=/pgfplots,
+ /pgfplots/disabledatascaling=false,
+ /pgfplots/hide x axis/.is if=pgfplots@hide@x,
+ /pgfplots/hide x axis/.default=true,
+ /pgfplots/hide x axis=false,
+ /pgfplots/hide y axis/.is if=pgfplots@hide@y,
+ /pgfplots/hide y axis/.default=true,
+ /pgfplots/hide y axis=false,
+ /pgfplots/hide z axis/.is if=pgfplots@hide@z,
+ /pgfplots/hide z axis/.default=true,
+ /pgfplots/hide z axis=false,
+ /pgfplots/hide axis/.style={%
+ /pgfplots/hide x axis=#1,
+ /pgfplots/hide y axis=#1,
+ /pgfplots/hide z axis=#1,
+ },
+ /pgfplots/hide axis/.default=true,
+ /pgfplots/every non boxed x axis/.style={%
+ xtick align=center,
+ enlarge x limits=false,
+ x axis line style={-stealth}
+ },
+ /pgfplots/every non boxed y axis/.style={%
+ ytick align=center,
+ enlarge y limits=false,
+ y axis line style={-stealth}
+ },
+ /pgfplots/every non boxed z axis/.style={%
+ ztick align=center,
+ enlarge z limits=false,
+ z axis line style={-stealth}
+ },
+ /pgfplots/every boxed x axis/.style={},
+ /pgfplots/every boxed y axis/.style={},
+ /pgfplots/every boxed z axis/.style={},
+% /pgfplots/hide axis/.belongs to family=/pgfplots,
+ %
+ /pgfplots/axis x line shift/.initial=,
+ /pgfplots/axis y line shift/.initial=,
+ /pgfplots/axis z line shift/.initial=,
+ /pgfplots/axis line shift/.style={%
+ /pgfplots/axis x line shift={#1},%
+ /pgfplots/axis y line shift={#1},%
+ /pgfplots/axis z line shift={#1},%
+ },%
+ %
+% sets \pgfplots@xaxislinesnum to
+% box=0
+% bottom=1
+% middle=2 ( aliased with center )
+% top=3
+ /pgfplots/axis x line*/.is choice,
+ /pgfplots/axis x line*/box/.code ={\def\pgfplots@xaxislinesnum{0}\def\pgfplots@xtickposnum{0}},
+ /pgfplots/axis x line*/bottom/.code ={\def\pgfplots@xaxislinesnum{1}\def\pgfplots@xtickposnum{1}\let\pgfplots@xticklabel@pos\pgfutil@empty},
+ /pgfplots/axis x line*/left/.style={/pgfplots/axis x line*/bottom},
+ /pgfplots/axis x line*/middle/.code ={\def\pgfplots@xaxislinesnum{2}\def\pgfplots@xtickposnum{2}\let\pgfplots@xticklabel@pos\pgfutil@empty},
+ /pgfplots/axis x line*/center/.style ={/pgfplots/axis x line*/middle},
+ /pgfplots/axis x line*/top/.code ={\def\pgfplots@xaxislinesnum{3}\def\pgfplots@xtickposnum{3}\let\pgfplots@xticklabel@pos\pgfutil@empty},
+ /pgfplots/axis x line*/right/.style={/pgfplots/axis x line*/top},
+ /pgfplots/axis x line*/none/.code ={\def\pgfplots@xaxislinesnum{4}\def\pgfplots@xtickposnum{4}\let\pgfplots@xticklabel@pos\pgfutil@empty},
+ /pgfplots/axis x line*=box,
+ %
+% sets \pgfplots@yaxislinesnum to
+% box=0
+% left=1
+% center=2 ( aliased with middle )
+% right=3
+ /pgfplots/axis y line*/.is choice,
+ /pgfplots/axis y line*/box/.code ={\def\pgfplots@yaxislinesnum{0}\def\pgfplots@ytickposnum{0}},
+ /pgfplots/axis y line*/left/.code ={\def\pgfplots@yaxislinesnum{1}\def\pgfplots@ytickposnum{1}\let\pgfplots@yticklabel@pos\pgfutil@empty},
+ /pgfplots/axis y line*/center/.code ={\def\pgfplots@yaxislinesnum{2}\def\pgfplots@ytickposnum{2}\let\pgfplots@yticklabel@pos\pgfutil@empty},
+ /pgfplots/axis y line*/middle/.style ={/pgfplots/axis y line*/center},
+ /pgfplots/axis y line*/right/.code ={\def\pgfplots@yaxislinesnum{3}\def\pgfplots@ytickposnum{3}\let\pgfplots@yticklabel@pos\pgfutil@empty},
+ /pgfplots/axis y line*/none/.code ={\def\pgfplots@yaxislinesnum{4}\def\pgfplots@ytickposnum{4}\let\pgfplots@yticklabel@pos\pgfutil@empty},
+ /pgfplots/axis y line*=box,
+ %
+%
+% sets \pgfplots@zaxislinesnum to
+% box=0
+% left=1
+% center=2 ( aliased with middle )
+% right=3
+ /pgfplots/axis z line*/.is choice,
+ /pgfplots/axis z line*/box/.code ={\def\pgfplots@zaxislinesnum{0}\def\pgfplots@ztickposnum{0}},
+ /pgfplots/axis z line*/left/.code ={\def\pgfplots@zaxislinesnum{1}\def\pgfplots@ztickposnum{1}\let\pgfplots@zticklabel@pos\pgfutil@empty},
+ /pgfplots/axis z line*/center/.code ={\def\pgfplots@zaxislinesnum{2}\def\pgfplots@ztickposnum{2}\let\pgfplots@zticklabel@pos\pgfutil@empty},
+ /pgfplots/axis z line*/middle/.style ={/pgfplots/axis z line*/center},
+ /pgfplots/axis z line*/right/.code ={\def\pgfplots@zaxislinesnum{3}\def\pgfplots@ztickposnum{3}\let\pgfplots@zticklabel@pos\pgfutil@empty},
+ /pgfplots/axis z line*/none/.code ={\def\pgfplots@zaxislinesnum{4}\def\pgfplots@ztickposnum{4}\let\pgfplots@zticklabel@pos\pgfutil@empty},
+ /pgfplots/axis z line*=box,
+ %
+ /pgfplots/axis x line/.is choice,
+ /pgfplots/axis y line/.is choice,
+ /pgfplots/axis z line/.is choice,
+ /pgfplots/axis lines/.style={%
+ axis x line=#1,%
+ axis y line=#1,%
+ axis z line=#1%
+ },
+ /pgfplots/axis lines*/.style={%
+ axis x line*=#1,%
+ axis y line*=#1,%
+ axis z line*=#1%
+ },
+ /pgfplots/compat/axis line style pre 1.8/.style={%
+ % ALL INSIDE OF THIS STYLE IS DEPRECATED.
+ /pgfplots/axis x line/box/.style ={
+ /pgfplots/axis x line*/box,
+ /pgfplots/every boxed x axis
+ },
+ /pgfplots/axis x line/bottom/.style ={
+ /pgfplots/axis x line*/bottom,
+ /pgfplots/every non boxed x axis
+ },
+ /pgfplots/axis x line/left/.style={/pgfplots/axis x line/bottom},%
+ /pgfplots/axis x line/middle/.code ={%
+ \ifnum\pgfplots@yaxislinesnum=3 % if 'axis y line==right' then
+ \pgfkeysalso{/pgfplots/every axis x label/.style={at={(current axis.left of origin)},anchor=south west}}%
+ \else
+ \pgfkeysalso{/pgfplots/every axis x label/.style={at={(current axis.right of origin)},anchor=south east}}%
+ \fi
+ \pgfkeysalso{/pgfplots/every axis x label/.append code={\pgfplots@label@upgrade@warning}}%
+ \pgfkeysalso{/pgfplots/axis x line*/middle,
+ /pgfplots/every non boxed x axis}%
+ },
+ /pgfplots/axis x line/center/.style ={/pgfplots/axis x line/middle},
+ /pgfplots/axis x line/right/.style={/pgfplots/axis x line/top},%
+ /pgfplots/axis x line/top/.code ={
+ \ifnum\pgfplots@yaxislinesnum=2 % if 'axis y line==center' then
+ \pgfkeysalso{
+ /pgfplots/every axis y label/.style={at={(current axis.below origin)},anchor=south west}}%
+ \fi
+ \pgfkeysalso{%
+ /pgfplots/axis x line*/top,
+ /pgfplots/every axis x label/.style={at={(0.5,1)},anchor=south,yshift=15pt},
+ /pgfplots/every non boxed x axis}%
+ },
+ /pgfplots/axis x line/none/.style ={axis x line*/none,hide x axis},
+ %
+ % Y :
+ /pgfplots/axis y line/box/.style ={
+ /pgfplots/axis y line*/box,
+ /pgfplots/every boxed y axis
+ },
+ /pgfplots/axis y line/left/.style ={
+ /pgfplots/axis y line*/left,
+ /pgfplots/every non boxed y axis
+ },
+ /pgfplots/axis y line/center/.code ={
+ \ifnum\pgfplots@xaxislinesnum=3 % if 'axis x line==top' then
+ \pgfkeysalso{%
+ /pgfplots/every axis y label/.style={at={(current axis.below origin)},anchor=south west}}%
+ \else
+ \pgfkeysalso{%
+ /pgfplots/every axis y label/.style={at={(current axis.above origin)},anchor=north west}}%
+ \fi
+ \pgfkeysalso{/pgfplots/every axis y label/.append code={\pgfplots@label@upgrade@warning}}%
+ \pgfkeysalso{%
+ /pgfplots/axis y line*/center,
+ /pgfplots/every non boxed y axis}%
+ },
+ /pgfplots/axis y line/middle/.style ={/pgfplots/axis y line/center},
+ /pgfplots/axis y line/right/.code ={%
+ \ifnum\pgfplots@xaxislinesnum=2
+ \pgfkeysalso{every axis x label/.style={at={(current axis.left of origin)},anchor=south west}}%
+ \fi
+ \pgfkeysalso{
+ axis y line*/right,
+ %every axis y label/.style={at={(1,1)},anchor=north west,xshift=15pt},
+ % FIXME : DEPRECATED !? USE 'near tick' things ....
+ every axis y label/.style={at={(1,0.5)},xshift=33pt,rotate=90},
+ /pgfplots/every non boxed y axis
+ }%
+ },%
+ /pgfplots/axis y line/none/.style ={axis y line*/none,hide y axis},
+ %
+ %
+ % Z :
+ %
+ /pgfplots/axis z line/box/.style ={
+ /pgfplots/axis z line*/box,
+ /pgfplots/every boxed z axis
+ },
+ /pgfplots/axis z line/left/.style ={
+ /pgfplots/axis z line*/left,
+ /pgfplots/every non boxed z axis
+ },
+ /pgfplots/axis z line/center/.code ={
+ % \ifnum\pgfplots@xaxislinesnum=3 % if 'axis x line==top' then
+ % \pgfkeysalso{%
+ % /pgfplots/every axis z label/.style={at={(current axis.below origin)},anchor=south west}}%
+ % \else
+ \pgfkeysalso{%
+ /pgfplots/every axis z label/.style={at={(current axis.above origin)},anchor=north west}}%
+ % \fi
+ \pgfkeysalso{/pgfplots/every axis z label/.append code={\pgfplots@label@upgrade@warning}}%
+ \pgfkeysalso{%
+ /pgfplots/axis z line*/center,
+ /pgfplots/every non boxed z axis}%
+ },
+ /pgfplots/axis z line/middle/.style ={/pgfplots/axis z line/center},
+ /pgfplots/axis z line/right/.code ={%
+ \ifnum\pgfplots@xaxislinesnum=2
+ \pgfkeysalso{every axis x label/.style={at={(current axis.left of origin)},anchor=south west}}%
+ \fi
+ \pgfkeysalso{
+ axis z line*/right,
+ %every axis y label/.style={at={(1,1)},anchor=north west,xshift=15pt},
+ every axis z label/.style={at={(1,0.5)},xshift=33pt,rotate=90},
+ /pgfplots/every non boxed z axis
+ }%
+ },%
+ /pgfplots/axis z line/none/.style ={axis z line*/none,hide z axis},
+ },
+ /pgfplots/compat/axis line style post 1.8/.style={%
+ /pgfplots/axis x line/box/.style ={
+ /pgfplots/axis x line*/box,
+ /pgfplots/xlabel near ticks,
+ /pgfplots/every boxed x axis
+ },
+ /pgfplots/axis x line/bottom/.style ={
+ /pgfplots/axis x line*/bottom,
+ /pgfplots/every non boxed x axis
+ },
+ /pgfplots/axis x line/left/.style={/pgfplots/axis x line/bottom},%
+ /pgfplots/axis x line/middle/.code ={%
+ \ifnum\pgfplots@yaxislinesnum=3 % if 'axis y line==right' then
+ \pgfkeysalso{/pgfplots/every axis x label/.style={
+ /pgfplots/near ticklabel align=inside,at={(ticklabel* cs:0)},anchor=near ticklabel opposite}}%
+ \else
+ \pgfkeysalso{/pgfplots/every axis x label/.style={
+ /pgfplots/near ticklabel align=inside,at={(ticklabel* cs:1)},anchor=near ticklabel opposite}}%
+ \fi
+ \pgfkeysalso{/pgfplots/axis x line*/middle,
+ /pgfplots/every x tick scale label/.code={%
+ \ifpgfplotsthreedim
+ \pgfkeysalso{at={(xticklabel* cs:1.03)},/pgfplots/near ticklabel align=outside,anchor=near xticklabel}%
+ \else
+ \pgfkeysalso{at={(xticklabel cs:0.9,5pt)},anchor=near xticklabel,inner sep=0pt}%
+ \fi
+ },%
+ /pgfplots/every non boxed x axis}%
+ },
+ /pgfplots/axis x line/center/.style ={/pgfplots/axis x line/middle},
+ /pgfplots/axis x line/right/.style={/pgfplots/axis x line/top},%
+ /pgfplots/axis x line/top/.code ={
+ \ifnum\pgfplots@yaxislinesnum=2 % if 'axis y line==center' then
+ \pgfkeysalso{/pgfplots/every axis y label/.style={
+ /pgfplots/near ticklabel align=inside,at={(ticklabel* cs:0)},anchor=near ticklabel opposite}}%
+ \fi
+ \pgfkeysalso{%
+ /pgfplots/axis x line*/top,
+ /pgfplots/every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},%
+ /pgfplots/every y tick scale label/.style={at={(yticklabel cs:0)},anchor=near yticklabel},
+ /pgfplots/every non boxed x axis}%
+ },
+ /pgfplots/axis x line/none/.style ={axis x line*/none,hide x axis},
+ %
+ % Y :
+ /pgfplots/axis y line/box/.style ={
+ /pgfplots/axis y line*/box,
+ /pgfplots/ylabel near ticks,
+ /pgfplots/every boxed y axis
+ },
+ /pgfplots/axis y line/left/.style ={
+ /pgfplots/axis y line*/left,
+ /pgfplots/every non boxed y axis
+ },
+ /pgfplots/axis y line/center/.code ={
+ \ifnum\pgfplots@xaxislinesnum=3 % if 'axis x line==top' then
+ \pgfkeysalso{%
+ /pgfplots/every axis y label/.style={
+ /pgfplots/near ticklabel align=outside,at={(ticklabel* cs:0)},anchor=near ticklabel opposite}}%
+ \else
+ \pgfkeysalso{%
+ /pgfplots/every axis y label/.style={
+ /pgfplots/near ticklabel align=inside,at={(ticklabel* cs:1)},anchor=near ticklabel opposite}}%
+ \fi
+ \pgfkeysalso{%
+ /pgfplots/axis y line*/center,
+ /pgfplots/every y tick scale label/.code={%
+ \ifpgfplotsthreedim
+ \pgfkeysalso{at={(yticklabel* cs:1.03)},/pgfplots/near ticklabel align=outside,anchor=near yticklabel}%
+ \else
+ \pgfkeysalso{at={(yticklabel* cs:1.03,-0.3em)},/pgfplots/near ticklabel align=outside,anchor=near yticklabel opposite,inner sep=0pt}%
+ \fi
+ },%
+ /pgfplots/every non boxed y axis}%
+ },
+ /pgfplots/axis y line/middle/.style ={/pgfplots/axis y line/center},
+ /pgfplots/axis y line/right/.code ={%
+ \ifnum\pgfplots@xaxislinesnum=2
+ \pgfkeysalso{
+ /pgfplots/every axis x label/.style={
+ /pgfplots/near ticklabel align=outside,at={(ticklabel* cs:0)},anchor=near ticklabel opposite}}%
+ \fi
+ \pgfkeysalso{
+ axis y line*/right,
+ /pgfplots/every axis y label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel,
+ /utils/exec={%
+ \ifpgfplotsthreedim\else \pgfkeysalso{rotate=90}\fi
+ },%
+ },
+ /pgfplots/every y tick scale label/.code={
+ \ifpgfplotsthreedim
+ \pgfkeysalso{at={(yticklabel cs:0)},anchor=near yticklabel}%
+ \else
+ \pgfkeysalso{at={(yticklabel cs:1)},anchor=near yticklabel}%
+ \fi
+ },%
+ /pgfplots/every non boxed y axis
+ }%
+ },%
+ /pgfplots/axis y line/none/.style ={axis y line*/none,hide y axis},
+ %
+ %
+ % Z :
+ %
+ /pgfplots/axis z line/box/.style ={
+ /pgfplots/axis z line*/box,
+ /pgfplots/every axis z label/.style={at={(ticklabel cs:0.5)},rotate=90, anchor=near ticklabel},
+ /pgfplots/every z tick scale label/.style={at={(zticklabel* cs:1.2,-0.3em)},anchor=near zticklabel,inner sep=0pt},
+ /pgfplots/every boxed z axis
+ },
+ /pgfplots/axis z line/left/.style ={
+ /pgfplots/axis z line*/left,
+ /pgfplots/every non boxed z axis
+ },
+ /pgfplots/axis z line/center/.code ={
+ \pgfkeysalso{%
+ /pgfplots/every axis z label/.style={
+ /pgfplots/near ticklabel align=inside,at={(ticklabel* cs:1)},anchor=near ticklabel opposite}}%
+ \pgfkeysalso{%
+ /pgfplots/axis z line*/center,
+ /pgfplots/every non boxed z axis}%
+ },
+ /pgfplots/axis z line/middle/.style ={/pgfplots/axis z line/center},
+ /pgfplots/axis z line/right/.code ={%
+ \ifnum\pgfplots@xaxislinesnum=2
+ \pgfkeysalso{
+ /pgfplots/every axis z label/.style={
+ /pgfplots/near ticklabel align=outside,at={(ticklabel* cs:0)},anchor=near ticklabel opposite}}%
+ \fi
+ \pgfkeysalso{
+ axis z line*/right,
+ every axis z label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel,rotate=90},
+ /pgfplots/every z tick scale label/.style={at={(zticklabel cs:0)},anchor=near zticklabel},
+ /pgfplots/every non boxed z axis
+ }%
+ },%
+ /pgfplots/axis z line/none/.style ={axis z line*/none,hide z axis},
+ },
+ %
+ /pgfplots/hide obscured x ticks/.is if=pgfplots@hide@obscured@xtick,
+ /pgfplots/hide obscured y ticks/.is if=pgfplots@hide@obscured@ytick,
+ /pgfplots/hide obscured z ticks/.is if=pgfplots@hide@obscured@ztick,
+ /pgfplots/hide obscured x ticks=true,
+ /pgfplots/hide obscured y ticks=true,
+ /pgfplots/hide obscured z ticks=true,
+ %
+ /pgfplots/3d box/.is choice,
+ /pgfplots/3d box/background/.code ={\def\pgfplots@threedimbox@choice{0}},%
+ /pgfplots/3d box/complete/.code ={\def\pgfplots@threedimbox@choice{1}},%
+ /pgfplots/3d box/complete*/.code ={\def\pgfplots@threedimbox@choice{2}},%
+ /pgfplots/3d box/.default=complete,%
+ /pgfplots/3d box/background,%
+ /pgfplots/every 3d box foreground/.style={},
+ /pgfplots/3d box foreground style/.style={%
+ /pgfplots/every 3d box foreground/.append style={#1}%
+ },
+% set \pgfplots@xaxisdiscontnum
+% none = 0
+% crunch = 1
+% open = 2
+ /pgfplots/axis x discontinuity/.is choice,
+ /pgfplots/axis x discontinuity/none/.code ={\def\pgfplots@xaxisdiscontnum{0}},
+ /pgfplots/axis x discontinuity/crunch/.code ={\def\pgfplots@xaxisdiscontnum{1}},
+ /pgfplots/axis x discontinuity/parallel/.code ={\def\pgfplots@xaxisdiscontnum{2}},
+ /pgfplots/axis x discontinuity=none,
+% set \pgfplots@yaxisdiscontnum
+% none = 0
+% crunch = 1
+% open = 2
+ /pgfplots/axis y discontinuity/.is choice,
+ /pgfplots/axis y discontinuity/none/.code ={\def\pgfplots@yaxisdiscontnum{0}},
+ /pgfplots/axis y discontinuity/crunch/.code ={\def\pgfplots@yaxisdiscontnum{1}},
+ /pgfplots/axis y discontinuity/parallel/.code ={\def\pgfplots@yaxisdiscontnum{2}},
+ /pgfplots/axis y discontinuity=none,
+% set \pgfplots@yaxisdiscontnum
+% none = 0
+% crunch = 1
+% open = 2
+ /pgfplots/axis z discontinuity/.is choice,
+ /pgfplots/axis z discontinuity/none/.code ={\def\pgfplots@zaxisdiscontnum{0}},
+ /pgfplots/axis z discontinuity/crunch/.code ={\def\pgfplots@zaxisdiscontnum{1}},
+ /pgfplots/axis z discontinuity/parallel/.code ={\def\pgfplots@zaxisdiscontnum{2}},
+ /pgfplots/axis z discontinuity=none,
+ /pgfplots/scale only axis/.is if=pgfplots@scale@only@axis,
+ /pgfplots/scale only axis/.default=true,
+ /pgfplots/scale only axis=false,
+% sets \pgfplots@xislinear to
+% normal=true
+% log=false
+ /pgfplots/xmode/.is choice,
+ /pgfplots/xmode/.belongs to family=/pgfplots/scale,
+ /pgfplots/xmode/normal/.code={\pgfplots@xislineartrue},
+ /pgfplots/xmode/normal/.belongs to family=/pgfplots/scale,
+ /pgfplots/xmode/linear/.code={\pgfplots@xislineartrue},
+ /pgfplots/xmode/linear/.belongs to family=/pgfplots/scale,
+ /pgfplots/xmode/log/.code={\pgfplots@xislinearfalse},
+ /pgfplots/xmode/log/.belongs to family=/pgfplots/scale,
+ /pgfplots/xmode=linear,
+ /pgfplots/ymode/.is choice,
+ /pgfplots/ymode/.belongs to family=/pgfplots/scale,
+ /pgfplots/ymode/normal/.code={\pgfplots@yislineartrue},
+ /pgfplots/ymode/normal/.belongs to family=/pgfplots/scale,
+ /pgfplots/ymode/linear/.code={\pgfplots@yislineartrue},
+ /pgfplots/ymode/linear/.belongs to family=/pgfplots/scale,
+ /pgfplots/ymode/log/.code={\pgfplots@yislinearfalse},
+ /pgfplots/ymode/log/.belongs to family=/pgfplots/scale,
+ /pgfplots/ymode=linear,
+ /pgfplots/zmode/.is choice,
+ /pgfplots/zmode/.belongs to family=/pgfplots/scale,
+ /pgfplots/zmode/normal/.code={\pgfplots@zislineartrue},
+ /pgfplots/zmode/normal/.belongs to family=/pgfplots/scale,
+ /pgfplots/zmode/linear/.code={\pgfplots@zislineartrue},
+ /pgfplots/zmode/linear/.belongs to family=/pgfplots/scale,
+ /pgfplots/zmode/log/.code={\pgfplots@zislinearfalse},
+ /pgfplots/zmode/log/.belongs to family=/pgfplots/scale,
+ /pgfplots/zmode=linear,
+ /pgfplots/error bars/x fixed/.code= \def\pgfplots@errorbars@xfixed{#1}\def\pgfplots@errorbars@xmode{0},
+ /pgfplots/error bars/x fixed relative/.code= \def\pgfplots@errorbars@xrel{#1}\def\pgfplots@errorbars@xmode{1},
+ /pgfplots/error bars/x explicit/.code= \def\pgfplots@errorbars@xmode{2},
+ /pgfplots/error bars/x explicit relative/.code= \def\pgfplots@errorbars@xmode{3},
+ /pgfplots/error bars/x fixed relative=0,
+ /pgfplots/error bars/x fixed=0,
+ /pgfplots/error bars/y fixed/.code= \def\pgfplots@errorbars@yfixed{#1}\def\pgfplots@errorbars@ymode{0},
+ /pgfplots/error bars/y fixed relative/.code= \def\pgfplots@errorbars@yrel{#1}\def\pgfplots@errorbars@ymode{1},
+ /pgfplots/error bars/y explicit/.code= \def\pgfplots@errorbars@ymode{2},
+ /pgfplots/error bars/y explicit relative/.code= \def\pgfplots@errorbars@ymode{3},
+ /pgfplots/error bars/y fixed relative=0,
+ /pgfplots/error bars/y fixed=0,
+ /pgfplots/error bars/z fixed/.code= \def\pgfplots@errorbars@zfixed{#1}\def\pgfplots@errorbars@zmode{0},
+ /pgfplots/error bars/z fixed relative/.code= \def\pgfplots@errorbars@zrel{#1}\def\pgfplots@errorbars@zmode{1},
+ /pgfplots/error bars/z explicit/.code= \def\pgfplots@errorbars@zmode{2},
+ /pgfplots/error bars/z explicit relative/.code= \def\pgfplots@errorbars@zmode{3},
+ /pgfplots/error bars/z fixed relative=0,
+ /pgfplots/error bars/z fixed=0,
+ /pgfplots/error bars/x dir/.is choice,
+ /pgfplots/error bars/x dir/none/.code={%
+ \def\pgfplots@errorbars@xdirection{0}%
+ \ifnum\pgfplots@errorbars@ydirection=0
+ \ifnum\pgfplots@errorbars@zdirection=0
+ \pgfplots@errorbars@enabledfalse
+ \fi
+ \fi
+ },
+ /pgfplots/error bars/x dir/plus/.code= \def\pgfplots@errorbars@xdirection{1}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/x dir/minus/.code= \def\pgfplots@errorbars@xdirection{2}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/x dir/both/.code= \def\pgfplots@errorbars@xdirection{3}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/x dir=none,
+ /pgfplots/error bars/y dir/.is choice,
+ /pgfplots/error bars/y dir/none/.code={%
+ \def\pgfplots@errorbars@ydirection{0}%
+ \ifnum\pgfplots@errorbars@xdirection=0
+ \ifnum\pgfplots@errorbars@zdirection=0
+ \pgfplots@errorbars@enabledfalse
+ \fi
+ \fi
+ },
+ /pgfplots/error bars/y dir/plus/.code= \def\pgfplots@errorbars@ydirection{1}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/y dir/minus/.code= \def\pgfplots@errorbars@ydirection{2}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/y dir/both/.code= \def\pgfplots@errorbars@ydirection{3}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/y dir=none,
+ /pgfplots/error bars/z dir/.is choice,
+ /pgfplots/error bars/z dir/none/.code={%
+ \def\pgfplots@errorbars@zdirection{0}%
+ \ifnum\pgfplots@errorbars@xdirection=0
+ \ifnum\pgfplots@errorbars@ydirection=0
+ \pgfplots@errorbars@enabledfalse
+ \fi
+ \fi
+ },
+ /pgfplots/error bars/z dir/plus/.code= \def\pgfplots@errorbars@zdirection{1}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/z dir/minus/.code= \def\pgfplots@errorbars@zdirection{2}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/z dir/both/.code= \def\pgfplots@errorbars@zdirection{3}\pgfplots@errorbars@enabledtrue,
+ /pgfplots/error bars/z dir=none,
+ /pgfplots/error bars/error mark/.initial={-},
+ /pgfplots/error bars/error mark options/.initial={rotate=90},
+ /pgfplots/error bars/error bar style/.code={%
+ \pgfkeysalso{/pgfplots/every error bar/.append style={#1}}%
+ },
+ /pgfplots/every error bar/.style={thin},
+ /pgfplots/every error bar/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every error bar}},
+ /pgfplots/error bars/allow name path/.is if=pgfplots@error@bars@allow@name@path,
+ /pgfplots/error bars/draw error bar/.code 2 args={%
+%\message{/pgfplots/error bars/draw error bar: working with '#1' -- '#2'.}%
+ \pgfkeysgetvalue{/pgfplots/error bars/error mark}{\pgfplotserrorbarsmark}%
+ \pgfkeysgetvalue{/pgfplots/error bars/error mark options}{\pgfplotserrorbarsmarkopts}%
+ \draw #1 -- #2 node[pos=1,sloped,allow upside down] {%
+ \expandafter\tikz\expandafter[\pgfplotserrorbarsmarkopts]{%
+ \expandafter\pgfuseplotmark\expandafter{\pgfplotserrorbarsmark}%
+ \pgfusepath{stroke}}%
+ };
+ },
+ /pgfplots/every node near coord/.style={},
+ /pgfplots/nodes near coords style/.style={/pgfplots/every node near coord/.append style={#1}},
+ /pgfplots/node near coords style/.style={/pgfplots/every node near coord/.append style={#1}},
+ /pgfplots/node near coord style/.style={/pgfplots/every node near coord/.append style={#1}},
+ %
+ % Replaces the 'nodes near coords' CONFIGURATION by its default
+ % settings. It does NOT activate 'nodes near coords'.
+ /pgfplots/nodes near coords defaults/.style={
+ % values: 'horizontal', 'vertical' or any tikz alignment command
+ % like 'left' or 'anchor=south west' or so.
+ /pgfplots/nodes near coords align/.initial=auto,%
+ %
+ % 'nodes near coords=<content of node>'.
+ % The content is by default \pgfmathprintnumber\pgfplotspointmeta.
+ %
+ % Use 'point meta=y' after 'nodes near coords' to typeset the y coordinates
+ % Use 'point meta=x' to typeset the x coordinates
+ /pgfplots/nodes near coords/.style={%
+ /pgfplots/scatter/@pre marker code/.code={},%
+ /pgfplots/scatter/@post marker code/.code={},%
+ /pgfplots/nodes near coords*={##1},%
+ },%
+ /pgfplots/nodes near coords*/.style={%
+ /pgfplots/scatter/true*,%
+ /pgfplots/set point meta if empty=f(x),%
+ scatter/@post marker code/.append code={%
+ % determine default alignment:
+ \pgfkeysgetvalue{/pgfplots/nodes near coords align}{\pgfplots@nodes@near@coords@align}%
+ \edef\pgfplots@nodes@near@coords@align{\pgfplots@nodes@near@coords@align}%
+ \def\pgfplots@loc@TMPa{auto}%
+ \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa
+ \def\pgfplots@loc@TMPa{x}%
+ \ifx\pgfplotspointmetainputhandler\pgfplots@loc@TMPa%
+ % point meta=x:
+ \def\pgfplots@nodes@near@coords@align{horizontal}%
+ \else
+ \def\pgfplots@nodes@near@coords@align{vertical}%
+ \fi
+ \fi
+ % check for sign-dependand alignment options:
+ \def\pgfplots@loc@TMPa{horizontal}%
+ \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname%
+ \def\pgfplots@nodes@near@coords@align{above}%
+ \else
+ \pgfplotscoordmath{meta}{if is}{\pgfplotspointmeta}{-}{%
+ % \pgfplotspointmeta < 0
+ \def\pgfplots@nodes@near@coords@align{left}%
+ }{%
+ % \pgfplotspointmeta >= 0
+ \def\pgfplots@nodes@near@coords@align{right}%
+ }%
+ \fi
+ \else
+ \def\pgfplots@loc@TMPa{vertical}%
+ \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname%
+ \def\pgfplots@nodes@near@coords@align{above}%
+ \else
+ \pgfplotscoordmath{meta}{if is}{\pgfplotspointmeta}{-}{%
+ % \pgfplotspointmeta < 0
+ \def\pgfplots@nodes@near@coords@align{below}%
+ }{%
+ % \pgfplotspointmeta >= 0
+ \def\pgfplots@nodes@near@coords@align{above}%
+ }%
+ \fi
+ \else
+ \pgfutil@ifundefined{pgfplots@nodesnearcoordsalign@isanchor@\pgfplots@nodes@near@coords@align}
+ {}%
+ {%
+ \t@pgfplots@toka=\expandafter{\pgfplots@nodes@near@coords@align}%
+ \edef\pgfplots@nodes@near@coords@align{anchor=\the\t@pgfplots@toka}%
+ }%
+ \fi
+ \fi
+ % ok, place the node.
+ \expandafter\node\expandafter[\pgfplots@nodes@near@coords@align,%
+ /pgfplots/every node near coord]
+ {%
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname%
+ % point meta=explicit symbolic
+ % do not try to invoke \pgfmathprintnumber on
+ % symbolic data... this check should keep the user
+ % interface simpler.
+ \def\pgfplots@loc@TMPa{\pgfmathprintnumber\pgfplotspointmeta}%
+ \def\pgfplots@loc@TMPb{##1}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfplotspointmeta
+ \else
+ ##1%
+ \fi
+ \else
+ ##1%
+ \fi
+ };
+ },%
+ },%
+ /pgfplots/nodes near coords*/.default={\pgfmathprintnumber\pgfplotspointmeta},
+ },
+ /pgfplots/nodes near coords defaults,
+ %
+ %
+ /pgfplots/nodes near coords bar offset/.initial=0.5,
+ %
+ % Replaces the 'nodes near coords' CONFIGURATION by one suitable
+ % for xbar stacked
+ /pgfplots/nodes near coords xbar stacked configuration/.style={
+ /pgfplots/nodes near coords defaults,
+ /pgfplots/nodes near coords*/.add code={%
+ \pgfkeysalso{
+ /pgfplots/set point meta if empty=rawx,%
+ }%
+ }{%
+ \pgfkeysalso{%
+ /pgfplots/scatter/position/absolute,
+ /pgfplots/scatter/@post marker code/.add code={
+ \pgfplotspointgetnormalizedcoordinates
+ \pgfplotspointgetnormalizedzerolevelcoordinates
+ \pgfkeysgetvalue{/pgfplots/nodes near coords bar offset}\pgfplots@nodes@near@coords@bar@offset
+ \tikzset{
+ every node/.append style={%
+ at={(normalized axis cs:%
+ { (\pgfplots@nodes@near@coords@bar@offset) *\pgfkeysvalueof{/data point/x}
+ +(1-\pgfplots@nodes@near@coords@bar@offset)*\pgfkeysvalueof{/data point/zero/x}},%
+ \pgfkeysvalueof{/data point/y})%
+ }%
+ }
+ }%
+ }{},%
+ }%
+ },
+ /pgfplots/nodes near coords align={%
+ anchor=center,
+ },
+ %
+ % ... just in case someone uses xbar stacked together with
+ % 'bar shift':
+ /pgfplots/every node near coord/.append style={%
+ /pgfplots/every node near coord bar shift=y,
+ /pgfplots/every node near coord bar shift/.code=,
+ },%
+ },
+ %
+ /pgfplots/every node near coord bar shift/.style={#1shift={\pgfplotbarshift}},%
+ %
+ % Replaces the 'nodes near coords' CONFIGURATION by one suitable
+ % for ybar stacked
+ /pgfplots/nodes near coords ybar stacked configuration/.style={
+ /pgfplots/nodes near coords defaults,
+ /pgfplots/nodes near coords*/.add code={%
+ \pgfkeysalso{
+ /pgfplots/set point meta if empty=rawy,%
+ }%
+ }{%
+ \pgfkeysalso{%
+ /pgfplots/scatter/position/absolute,
+ /pgfplots/scatter/@post marker code/.add code={
+ \pgfplotspointgetnormalizedcoordinates
+ \pgfplotspointgetnormalizedzerolevelcoordinates
+ \pgfkeysgetvalue{/pgfplots/nodes near coords bar offset}\pgfplots@nodes@near@coords@bar@offset
+ \tikzset{
+ every node/.append style={%
+ at={(normalized axis cs:%
+ \pgfkeysvalueof{/data point/x},%
+ { (\pgfplots@nodes@near@coords@bar@offset) *\pgfkeysvalueof{/data point/y}
+ +(1-\pgfplots@nodes@near@coords@bar@offset)*\pgfkeysvalueof{/data point/zero/y}})%
+ }%
+ }
+ }%
+ }{},%
+ }%
+ },
+ /pgfplots/nodes near coords align={%
+ anchor=center,
+ },
+ %
+ % ... just in case someone uses ybar stacked together with
+ % 'bar shift':
+ /pgfplots/every node near coord/.append style={%
+ /pgfplots/every node near coord bar shift=x,
+ /pgfplots/every node near coord bar shift/.code=,
+ },%
+ },
+ %
+ %
+ %
+ /pgfplots/scatter explicit color/.style 2 args={%
+ /pgfplots/scatter/@pre marker code/.code=,%
+ /pgfplots/scatter/@post marker code/.code=,%
+ /pgfplots/scatter explicit color*={#1}{#2},%
+ },%
+ /pgfplots/scatter explicit color*/.style 2 args={%
+ /pgfplots/point meta=explicit symbolic,
+ /pgfplots/scatter/true*,%
+ /pgfplots/scatter/@pre marker code/.append code={%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfutil@definecolor{mapped color}{#1}{\pgfplotspointmeta}}%
+ \pgfplots@loc@TMPa
+ \scope[#2]%
+ },%
+ /pgfplots/scatter/@post marker code/.prefix code={%
+ \endscope
+ },%
+ },
+ /pgfplots/scatter rgb/.style={%
+ /pgfplots/scatter/@pre marker code/.code=,%
+ /pgfplots/scatter/@post marker code/.code=,%
+ /pgfplots/scatter rgb*={#1},%
+ },
+ /pgfplots/scatter rgb*/.style={/pgfplots/scatter explicit color*={rgb}{#1}},
+ /pgfplots/scatter rgb*/.default={draw=mapped color!80!black,fill=mapped color},
+ %
+ /pgfplots/scatter cmyk/.style={%
+ /pgfplots/scatter/@pre marker code/.code=,%
+ /pgfplots/scatter/@post marker code/.code=,%
+ /pgfplots/scatter cmyk*={#1},%
+ },
+ /pgfplots/scatter cmyk*/.style={/pgfplots/scatter explicit color*={cmyk}{#1}},
+ /pgfplots/scatter cmyk*/.default={draw=mapped color!80!black,fill=mapped color},
+ %
+ /pgfplots/visualization depends on/list/.initial=,%
+ /pgfplots/visualization depends on/.style={%
+ /pgfplots/visualization depends on/list/.add={}{,{#1}}%
+ },
+ /pgfplots/bar cycle list/.style={/pgfplots/cycle list={%
+ {blue,fill=blue!30!white,mark=none},%
+ {red,fill=red!30!white,mark=none},%
+ {brown!60!black,fill=brown!30!white,mark=none},%
+ {black,fill=gray,mark=none},%
+ {violet!80!black,fill=violet,mark=none},%
+ {green,fill=green!80!black,mark=none}%
+ }
+ },
+ /pgfplots/area cycle list/.style={bar cycle list},
+ /pgfplots/area legend/.style={%
+ /pgfplots/legend image code/.code={%
+ \draw[##1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
+ }%
+ },
+ /pgfplots/area style/.style={%
+ area cycle list,
+ area legend,
+ axis on top,
+ },
+ /pgfplots/ybar legend/.style={
+ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt] plot coordinates {(0cm,0.8em) (2*\pgfplotbarwidth,0.6em)};},
+ },
+ /pgfplots/single ybar legend/.style={
+ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=6pt,yshift=-0.2em,bar shift=0pt] plot coordinates {(0pt,0.8em)};},
+ },
+ %
+ % A style which shifts bars automatically such that they are
+ % adjacent to each other. It applies to bars of the same type
+ % only.
+ % #1: the space between adjacent bars
+ /pgfplots/bar shift auto/.style={%
+ /pgf/bar shift={%
+ % total width = n*w + (n-1)*skip
+ % -> subtract half for centering
+ -0.5*(\numplotsofactualtype*\pgfplotbarwidth + (\numplotsofactualtype-1)*(#1)) +
+ % the '0.5*w' is for centering
+ (.5+\plotnumofactualtype)*\pgfplotbarwidth + \plotnumofactualtype*(#1)},%
+ },
+ /pgfplots/bar shift auto/.default={2pt},%
+ %
+ %
+ % FIXME : never tested so far
+ % #1: width
+ % #2: separation space
+ /pgfplots/plot yshift auto/.style 2 args={/pgfplots/plot shift auto={y}{#1}{#2}},%
+ /pgfplots/plot xshift auto/.style 2 args={/pgfplots/plot shift auto={x}{#1}{#2}},%
+ /pgfplots/plot shift auto/.style args={#1#2#3}{%
+ /pgfplots/axis plot except legend style={%
+ #1shift={%
+ % total width = n*w + (n-1)*skip
+ % -> subtract half for centering
+ -0.5*(\numplotsofactualtype*(#1) + (\numplotsofactualtype-1)*(#2)) +
+ % the '0.5*w' is for centering
+ (.5+\plotnumofactualtype)*(#1) + \plotnumofactualtype*(#2)%
+ },%
+ },
+ },
+ /pgfplots/ybar/.style={
+ bar direction=y,
+ bar cycle list,
+ xtick align=outside,
+ ybar legend,
+ clip limits if compat={clip ylimits=false},
+ /pgfplots/set point meta if empty=f(x),%
+ /pgfplots/bar shift auto={#1},
+ /pgfplots/error bars/draw error bar/.code 2 args={%
+% FIXME: simplify this code! It is just a replication of the default error stuff together with an xshift!
+ \pgfkeysgetvalue{/pgfplots/error bars/error mark}{\pgfplotserrorbarsmark}%
+ \pgfkeysgetvalue{/pgfplots/error bars/error mark options}{\pgfplotserrorbarsmarkopts}%
+ \draw[xshift={\pgfplotbarshift}]
+ ##1 -- ##2 node[pos=1,sloped,allow upside down] {%
+ \expandafter\tikz\expandafter[\pgfplotserrorbarsmarkopts]{%
+ \expandafter\pgfuseplotmark\expandafter{\pgfplotserrorbarsmark}%
+ \pgfusepath{stroke}}%
+ };
+ },%
+ /pgfplots/every node near coord/.append style={%
+ /pgfplots/every node near coord bar shift=x,
+ /pgfplots/every node near coord bar shift/.code=,
+ },%
+ /tikz/ybar,
+ },
+ /pgfplots/ybar/.default=2pt,
+ /pgfplots/xbar legend/.style={
+ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt] plot coordinates {(0.8em,0cm) (0.6em,2*\pgfplotbarwidth)};},
+ },
+ /pgfplots/single xbar legend/.style={
+ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=6pt,yshift=0.2ex,bar shift=0pt] plot coordinates {(0.8em,0pt)};},
+ },
+ /pgfplots/bar direction/.is choice,
+ /pgfplots/bar direction/auto/.code=\def\pgfplots@bar@direction@choice{a},%
+ /pgfplots/bar direction/x/.code=\def\pgfplots@bar@direction@choice{x},%
+ /pgfplots/bar direction/y/.code=\def\pgfplots@bar@direction@choice{y},%
+ /pgfplots/bar direction=auto,
+ %
+ /pgfplots/xbar/.style={
+ bar direction=x,
+ bar cycle list,
+ ytick align=outside,
+ clip limits if compat={clip xlimits=false},
+ /pgfplots/xbar legend,
+ /pgfplots/set point meta if empty=x,%
+ /pgfplots/bar shift auto={#1},
+ /pgfplots/error bars/draw error bar/.code 2 args={%
+% FIXME: simplify this code! It is just a replication of the default error stuff together with an xshift!
+ \pgfkeysgetvalue{/pgfplots/error bars/error mark}{\pgfplotserrorbarsmark}%
+ \pgfkeysgetvalue{/pgfplots/error bars/error mark options}{\pgfplotserrorbarsmarkopts}%
+ \draw[yshift={\pgfplotbarshift}]
+ ##1 -- ##2 node[pos=1,sloped,allow upside down] {%
+ \expandafter\tikz\expandafter[\pgfplotserrorbarsmarkopts]{%
+ \expandafter\pgfuseplotmark\expandafter{\pgfplotserrorbarsmark}%
+ \pgfusepath{stroke}}%
+ };
+ },%
+ /pgfplots/every node near coord/.append style={%
+ /pgfplots/every node near coord bar shift=y,
+ /pgfplots/every node near coord bar shift/.code=,
+ },%
+ /tikz/xbar,
+ },
+ /pgfplots/xbar/.default=2pt,
+ /pgfplots/ybar interval legend/.style={
+ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,yshift=-0.2em,bar interval width=0.7,bar interval shift=0.5] plot coordinates {(0cm,0.8em) (5pt,0.6em) (10pt,0.6em)};},
+ },
+ /pgfplots/ybar interval/.style={%
+ bar direction=y,
+ /pgfplots/set point meta if empty=f(x),%
+ bar cycle list,
+ x tick label as interval,
+ xmajorgrids,
+ clip limits if compat={clip ylimits=false},
+ xtick align=outside,
+ xtick=data,
+ ybar interval legend,
+ bar interval width={#1/\numplotsofactualtype},
+ bar interval shift={(\plotnumofactualtype+0.5)/\numplotsofactualtype},
+ /tikz/ybar interval,
+ },
+ /pgfplots/ybar interval/.default=1,
+ /pgfplots/xbar interval legend/.style={%
+ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,yshift=-0.2em,bar interval width=0.7,bar interval shift=0.5] plot coordinates {(0cm,0.8em) (5pt,0.6em) (10pt,0.6em)};},
+ },
+ /pgfplots/xbar interval/.style={%
+ bar direction=x,
+ /pgfplots/set point meta if empty=x,%
+ bar cycle list,
+ y tick label as interval,
+ ytick=data,
+ ymajorgrids,
+ ytick align=outside,
+ xbar interval legend,
+ clip limits if compat={clip xlimits=false},
+ bar interval width={#1/\numplotsofactualtype},
+ bar interval shift={(\plotnumofactualtype+0.5)/\numplotsofactualtype},
+ /tikz/xbar interval,
+ },
+ /pgfplots/xbar interval/.default=1,
+ /pgfplots/stacked since 1.9/.code={},
+ /pgfplots/stacked since 1.13/.code=,
+ /pgfplots/xbar stacked/.style={
+ bar direction=x,
+ bar cycle list,
+ single xbar legend,
+ clip limits if compat={clip xlimits=false},
+ stack plots=x,
+ stack dir=#1,
+ /tikz/xbar,
+ stacked since 1.9,
+ activate nodes near coords xbar stacked,
+ stacked since 1.13,
+ },
+ /pgfplots/xbar stacked/.default=plus,
+ /pgfplots/ybar stacked/.style={
+ bar direction=y,
+ bar cycle list,
+ single ybar legend,
+ clip limits if compat={clip ylimits=false},
+ stack plots=y,
+ stack dir=#1,
+ /tikz/ybar,
+ stacked since 1.9,
+ activate nodes near coords ybar stacked,
+ stacked since 1.13,
+ },
+ /pgfplots/ybar stacked/.default=plus,
+ /pgfplots/xbar interval stacked/.style={
+ bar direction=x,
+ /pgfplots/set point meta if empty=x,%
+ bar cycle list,
+ clip limits if compat={clip xlimits=false},
+ single xbar legend,
+ stack plots=x,
+ stack dir=#1,
+ /tikz/xbar interval,
+ stacked since 1.13,
+ },
+ /pgfplots/xbar interval stacked/.default=plus,
+ /pgfplots/ybar interval stacked/.style={
+ bar direction=y,
+ /pgfplots/set point meta if empty=f(x),%
+ bar cycle list,
+ single ybar legend,
+ clip limits if compat={clip ylimits=false},
+ stack plots=y,
+ stack dir=#1,
+ /tikz/ybar interval,
+ stacked since 1.13,
+ },
+ /pgfplots/ybar interval stacked/.default=plus,
+ /pgfplots/yticklabel interval boundaries/.style={%
+ y tick label as interval,
+ yticklabel={$\pgfmathprintnumber{\tick}$ -- $\pgfmathprintnumber{\nexttick}$}
+ },
+ /pgfplots/xticklabel interval boundaries/.style={%
+ x tick label as interval,
+ xticklabel={$\pgfmathprintnumber{\tick}$ -- $\pgfmathprintnumber{\nexttick}$}
+ },
+ /pgfplots/plot file/skip first/.is if=pgfplots@plot@file@skipfirst,
+ /pgfplots/plot file/skip first/.default=true,
+ /pgfplots/plot file/ignore first/.style={/pgfplots/plot file/skip first={#1}},
+ /pgfplots/plot file/.search also=/pgfplots,%
+ /pgfplots/plot coordinates/math parser/.is if=pgfplots@plot@coords@mathparser,
+ /pgfplots/plot graphics/.code={\let\tikz@plot@handler=\pgfplotsplothandlergraphics},%
+ /pgfplots/plot graphics/src/.initial=,
+ /pgfplots/plot graphics/includegraphics/.initial=,
+ /pgfplots/plot graphics/includegraphics cmd/.initial=\includegraphics,
+ /pgfplots/plot graphics/xmin/.initial=,
+ /pgfplots/plot graphics/xmax/.initial=,
+ /pgfplots/plot graphics/ymin/.initial=,
+ /pgfplots/plot graphics/ymax/.initial=,
+ /pgfplots/plot graphics/zmin/.initial=,
+ /pgfplots/plot graphics/zmax/.initial=,
+ %
+ % a) to provide a bounding box: points={(0,1) (0,2)}
+ % or b) to squeeze the graphics into internal image coordinates:
+ % points={(0,1,0) => (0,4) (0,0,1) => (40,600)}
+ % or c) both of them.
+ /pgfplots/plot graphics/points/.initial=,
+ /pgfplots/plot graphics/auto adjust axis/.is if=pgfplots@plot@graphics@autoadjustaxis,
+ /pgfplots/plot graphics/auto adjust axis=true,
+ /pgfplots/plot graphics/snap z/.initial=0.02,
+ % possible values: debug=<empty>|false|true|visual
+ /pgfplots/plot graphics/debug/.initial=,
+ /pgfplots/plot graphics/debug/.default=true,
+ /pgfplots/plot graphics/squeeze tol/.initial=2pt,
+ %
+ % this command key should defined \pgfmathresult to be
+ % \pgfmathresult -> {{<wd>}{<ht>}}
+ % where <wd> is the natural width of the input image and
+ % <ht> is the natural height.
+ % The input image file name is available as 'plot graphics/src'.
+ % The default implementation invoked 'lowlevel draw={}{}' and
+ % measures the resulting dimensions.
+ /pgfplots/plot graphics/lowlevel get natural size/.code={%
+ \pgfplots@plot@handler@graphics@getnaturalsize
+ },
+ /pgfplots/plot graphics/lowlevel draw/.code 2 args={%
+ \pgfplots@plot@handler@graphics@DRAW{#1}{#2}%
+ },%
+ /pgfplots/plot graphics/node/.style={
+ transform shape,
+ inner sep=0pt,
+ outer sep=0pt,
+ every node/.style={},
+ anchor=south west,
+ at={(0pt,0pt)},
+ rectangle
+ },
+ /tikz/pos segment/.initial=,
+ % empty line=none|auto|scanline|nan|jump
+ % nan and jump is the same.
+ /pgfplots/empty line/.initial=auto,
+ % 'mesh' plots.
+ % The macro \pgfplots@meshmode is
+ % n if meshmode == false,
+ % m if meshmode == 'mesh',
+ % s if meshmode == 'surf'.
+ %
+ % The type of surface plot can be configured with 'shader'.
+ /pgfplots/mesh/.is choice,
+ /pgfplots/mesh/true/.code={%
+ \def\pgfplots@meshmode{m}%
+ \let\tikz@plot@handler=\pgfplotsplothandlermesh
+ \pgfplots@perpointmeta@expandtrue
+ \pgfkeysalso{/pgfplots/set point meta if empty=f(x),/pgfplots/every mesh,/pgfplots/mesh legend,/tikz/color=mapped color}%
+ },
+ /pgfplots/mesh/false/.code={
+ \def\pgfplots@meshmode{n}%
+ \ifx\tikz@plot@handler\pgfplotsplothandlermesh
+ \let\tikz@plot@handler=\pgfplothandlerlineto
+ \fi},
+ /pgfplots/mesh/.default=true,
+ /pgfplots/surf/.code={%
+ \pgfkeysalso{/pgfplots/mesh=#1}%
+ \def\pgfplots@meshmode{s}%
+ },%
+ /pgfplots/patch/.code={%
+ \pgfkeysalso{/pgfplots/surf=#1,/pgfplots/mesh input=patches,/pgfplots/every patch}%
+ },%
+ %
+ /pgfplots/mesh/color input/.is choice,
+ /pgfplots/mesh/color input/colormap/.code=\def\pgfplotsplothandlermesh@colorinput{0},%
+ /pgfplots/mesh/color input/explicit/.code={%
+ \def\pgfplotsplothandlermesh@colorinput{1}%
+ \def\pgfplotsplothandlermesh@colorinput@mathparse{0}%
+ %
+ \pgfplotsaxisifhaspointmeta{%
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname
+ % ok.
+ \else
+ % oh. the point meta is numeric, i.e. it will be
+ % mapped. Change to symbolic for explicit color input:
+ \pgfkeysalso{/pgfplots/point meta/explicit symbolic}%
+ \fi
+ }{%
+ % there is no point meta. Set it to "reasonable" defaults:
+ \pgfkeysalso{/pgfplots/point meta/explicit symbolic}%
+ }%
+ \pgfplots@perpointmeta@expandtrue
+ },%
+ /pgfplots/mesh/color input/explicit mathparse/.code={%
+ \pgfkeysalso{/pgfplots/mesh/color input/explicit}%
+ \def\pgfplotsplothandlermesh@colorinput@mathparse{1}%
+ \pgfplots@perpointmeta@expandtrue
+ },%
+ /pgfplots/mesh/color input=colormap,
+ %
+ /pgfplots/mesh/colorspace explicit color output/.initial=rgb,
+ /pgfplots/mesh/colorspace explicit color input/.initial=rgb,
+ %
+ /pgfplots/every patch/.style={miter limit=1},
+ /pgfplots/patch table/value/.initial=,
+ /pgfplots/patch table/.code={
+ \pgfkeyssetvalue{/pgfplots/patch table/value}{#1}%
+ \pgfplotsplothandlermesh@patchtable@hascdatafalse
+ },
+ /pgfplots/patch table with point meta/.code={%
+ \pgfkeyssetvalue{/pgfplots/patch table/value}{#1}%
+ \pgfplotsplothandlermesh@patchtable@hascdatatrue
+ \pgfplotsplothandlermesh@patchtable@cdata@individualfalse
+ \pgfkeysalso{/pgfplots/point meta/explicit}%
+ },
+ /pgfplots/patch table with individual point meta/.code={%
+ \pgfkeyssetvalue{/pgfplots/patch table/value}{#1}%
+ \pgfplotsplothandlermesh@patchtable@hascdatatrue
+ \pgfplotsplothandlermesh@patchtable@cdata@individualtrue
+ \pgfkeysalso{/pgfplots/point meta/explicit}%
+ },
+ /pgfplots/patch type/.initial=,
+ /pgfplots/patch type sampling/.is if=pgfplotsplothandlermesh@patch@type@sampling,
+ /pgfplots/patch internal depth/.is if=pgfplotsplothandlermesh@internaldepth,
+ /pgfplots/patch internal depth=true,
+ /pgfplots/patch to triangles/.is choice,
+ /pgfplots/patch to triangles/false/.code= {\def\pgfplotsplothandlermesh@triangulate{0}},
+ /pgfplots/patch to triangles/true/.code= {\def\pgfplotsplothandlermesh@triangulate{1}},
+ /pgfplots/patch to triangles/true with edges/.code= {\def\pgfplotsplothandlermesh@triangulate{2}},
+ /pgfplots/patch to triangles=false,
+ /pgfplots/patch to triangles/.default=true,
+ /pgfplots/mesh input/.is choice,
+ /pgfplots/mesh input/lattice/.code= {\def\pgfplotsplothandlermesh@matrixinput{1}},
+ /pgfplots/mesh input/patches/.code= {\def\pgfplotsplothandlermesh@matrixinput{0}},
+ /pgfplots/mesh input/image/.code= {\def\pgfplotsplothandlermesh@matrixinput{2}},
+ /pgfplots/mesh input/lattice,
+ /pgfplots/patch refines/.initial=0,
+ /pgfplots/hide refined edges/.is if=pgfplotsplothandlermesh@hide@refined@edges,
+ /pgfplots/hide refined edges/.default=true,
+ /pgfplots/mesh/refines/.style={/pgfplots/patch refines={#1}},
+ /pgfplots/mesh/rows/.initial=,
+ /pgfplots/mesh/cols/.initial=,
+ /pgfplots/mesh/scanline verbose/.is if=pgfplots@scanline@verbose,%
+ /pgfplots/mesh/scanline verbose/.default=true,
+ %
+ % this is currently only a debug feature. Perhaps it will never
+ % reach production state because of the lacking z buffering for
+ % this technique.
+ /pgfplots/mesh/show normals/.is if=pgfplotsplothandlermesh@shownormals,
+ /pgfplots/mesh/show normals/.default=true,
+ /pgfplots/mesh/show normals length factor/.initial=50,
+ %
+ /pgfplots/late options/.code={%
+ \pgfplotssetlateoptions{#1}%
+ },
+ %
+ /pgfplots/matrix plot/.style={%
+ /pgfplots/late options={%
+ /pgfplots/y dir=reverse,
+ /pgfplots/axis on top,
+ },
+ %
+ /pgfplots/matrix plot*,
+ },
+ /pgfplots/matrix plot*/.style={%
+ /pgfplots/surf,
+ /pgfplots/mesh input=image,
+ /pgfplots/shader=flat corner,
+ /pgfplots/z buffer=none,
+ },
+ /pgfplots/imagesc/.style={/pgfplots/matrix plot},%
+ /pgfplots/imagesc*/.style={/pgfplots/matrix plot*},%
+ %
+ /pgfplots/every patch normal/.style={-stealth,red},
+ %
+ /pgfplots/mesh/interior colormap/.code 2 args={%
+ \pgfplotscreatecolormap{#1}{#2}%
+ \pgfkeysalso{/pgfplots/mesh/interior colormap name=#1}%
+ },
+ /pgfplots/mesh/interior colormap name/.initial=,
+ /pgfplots/mesh/interior colormap thresh/.initial=0,
+ /pgfplots/mesh/check/.code={%
+ \pgfplotsutilifstringequal{#1}{false}{%
+ \def\pgfplots@mesh@checkmode{0}%
+ }{%
+ \pgfplotsutilifstringequal{#1}{warning}{%
+ \def\pgfplots@mesh@checkmode{1}%
+ }{%
+ \pgfplotsutilifstringequal{#1}{error}{%
+ \def\pgfplots@mesh@checkmode{2}%
+ }{%
+ \pgfplots@error{Invalid value `#1' for /pgfplots/mesh/check. Please use one of false,warning,error}%
+ }%
+ }%
+ }%
+ },%
+ /pgfplots/mesh/check=error,
+ /pgfplots/mesh/ordering/.is choice,
+ /pgfplots/mesh/ordering/x varies/.code={\def\pgfplots@plot@mesh@ordering{0}},
+ /pgfplots/mesh/ordering/y varies/.code={\def\pgfplots@plot@mesh@ordering{1}},
+ /pgfplots/mesh/ordering/rowwise/.style={/pgfplots/mesh/ordering/x varies},
+ /pgfplots/mesh/ordering/colwise/.style={/pgfplots/mesh/ordering/y varies},
+ /pgfplots/mesh/ordering/x varies,
+ /pgfplots/every mesh/.code={%
+ % is slower:
+ %\pgfkeysalso{/pgfplots/unbounded coords=jump}% mesh plots need balanced cols!
+ },%
+ /pgfplots/mesh legend/.style={%
+ /pgfplots/legend image code/.code={%
+ \pgfplotsplothandlermesh@defaultlegend@img{##1}%
+ }%
+ },
+ /pgfplots/mesh/num points/.initial=,%\numcoords,% this is NOT part of the public interface. Don't change it.
+ /pgfplots/z buffer/.is choice,%
+ /pgfplots/z buffer/none/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{0}},%
+ /pgfplots/z buffer/reverse x seq/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{1}},%
+ /pgfplots/z buffer/reverse y seq/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{2}},%
+ /pgfplots/z buffer/reverse xy seq/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{3}},%
+ /pgfplots/z buffer/sort/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{4}},%
+ /pgfplots/z buffer/auto/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{5}},%
+ /pgfplots/z buffer/default/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{6}},%
+ /pgfplots/z buffer/default,%
+ %
+ % Set the shader used for surface plots.
+ % RULES:
+ % 1. meshmode == 'm' (mesh):
+ % This means we use "shader/flat" to determine the colors
+ % and ignore fill colors.
+ % 2. meshmode == 's' (surf):
+ % the shader specifies how colors are used.
+ % 3. Onedimensional mesh/surf plots are treated like 'mesh'
+ % plots.
+ /pgfplots/shader/.is choice,
+ /pgfplots/shader/flat corner/.code={\def\pgfplotsplothandlermesh@shader{0}\def\pgfplotsplothandlermesh@flatmode{c}},
+ /pgfplots/shader/flat mean/.code={\def\pgfplotsplothandlermesh@shader{0}\def\pgfplotsplothandlermesh@flatmode{m}},
+ /pgfplots/shader/flat/.style={/pgfplots/shader/flat mean},%
+ /pgfplots/shader/faceted/.code={\def\pgfplotsplothandlermesh@shader{1}},
+ /pgfplots/shader/interp/.code={\def\pgfplotsplothandlermesh@shader{2}},
+ /pgfplots/shader/faceted interp/.code={\def\pgfplotsplothandlermesh@shader{3}},
+ /pgfplots/shader/faceted,
+ /pgfplots/faceted color/.initial=mapped color!80!black,
+ /pgfplots/marker layer/.initial=auto,
+ /pgfplots/clip marker paths/.is if=pgfplots@clip@marker@paths,
+ /pgfplots/clip marker paths/.default=true,
+ /pgfplots/axis on top/.is if=pgfplots@axis@on@top,
+ /pgfplots/axis on top/.default=true,
+ /pgfplots/invoke before crossref tikzpicture/.initial={%
+ \expandafter\ifx\csname tikzappendtofigurename\endcsname\relax
+ \else
+ \begingroup
+ \tikzappendtofigurename{_crossref}%
+ \fi
+ },
+ /pgfplots/invoke after crossref tikzpicture/.initial={%
+ \expandafter\ifx\csname tikzappendtofigurename\endcsname\relax
+ \else
+ \endgroup
+ \fi
+ },%
+ /pgfplots/every crossref picture/.style={%
+ baseline,yshift=0.3em
+ },
+ /pgfplots/unbounded coords/.code={%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \def\pgfplots@loc@TMPb{discard}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \def\pgfplots@unbounded@handler{d}%
+ \else
+ \def\pgfplots@loc@TMPb{jump}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \def\pgfplots@unbounded@handler{j}%
+ \else
+ \pgfplots@error{Sorry, the choice `#1' is unknown for \pgfkeyscurrentkey. Please use either 'discard' or 'jump'.}%
+ \fi
+ \fi
+ },%
+ /pgfplots/unbounded coords=discard,
+ /pgfplots/x coord trafo/.code={},
+ /pgfplots/x coord inv trafo/.code={},
+ /pgfplots/y coord trafo/.code={},
+ /pgfplots/y coord inv trafo/.code={},
+ /pgfplots/z coord trafo/.code={},
+ /pgfplots/z coord inv trafo/.code={},
+ %
+ /pgfplots/symbolic coords/magic prefix/.initial={[normalized]},
+ % #1 : the coordinate in question. Can be x,y,z, or even hist/data
+ % or similar constructs.
+ % #2 : {<symbol1>,<symbol2>,....<symboln>}
+ /pgfplots/symbolic coords/.code 2 args={%
+ \expandafter\pgfplotsarraynew\csname pgfplots@symbolic@coords@#1@inverse\endcsname{#2}%
+ \expandafter\pgfplotsarrayforeachungrouped\csname pgfplots@symbolic@coords@#1@inverse\endcsname\as\pgfplots@loc@TMPa{%
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@loc@TMPa
+% \message{Defining symb coords \pgfplots@loc@TMPa^^J}%
+ \expandafter\edef\csname pgfp@symb@coords@#1@\pgfplots@loc@TMPa\endcsname{\pgfplotsarrayforeachindex}%
+ }%
+ \pgfkeysgetvalue{/pgfplots/symbolic coords/magic prefix}\pgfplots@symb@magic@prefix
+ \pgfkeysdef{/pgfplots/#1 coord trafo}{%
+ \expandafter\pgfplotsutilifstartswith\expandafter{\pgfplots@symb@magic@prefix}{##1}{%
+ % Ah - something like [normalized]1.5
+ % we need to assign the suffix 1.5:
+ \edef\pgfmathresult{\pgfplotsretval}%
+ }{%
+ % ensure that special (unexpandable) characters are
+ % preserved:
+ \def\pgfplots@loc@TMPa{##1}%
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@loc@TMPa
+ \pgfutil@ifundefined{pgfp@symb@coords@#1@\pgfplots@loc@TMPa}{%
+ \t@pgfplots@toka={##1}%
+ \t@pgfplots@tokb={#2}%
+ \pgfplots@error{Sorry, the input coordinate `\the\t@pgfplots@toka' has not been defined with 'symbolic #1 coords={\the\t@pgfplots@tokb}... Maybe it has been misspelled? Or did you mean something like \pgfplots@symb@magic@prefix\the\t@pgfplots@toka?}%
+ \def\pgfmathresult{0}%
+ }{%
+ \edef\pgfmathresult{\csname pgfp@symb@coords@#1@\pgfplots@loc@TMPa\endcsname}%
+ }%
+ }%
+%\message{#1 coord trafo{\pgfplots@loc@TMPa} --> \pgfmathresult^^J}%
+ }%
+ \pgfkeysdef{/pgfplots/#1 coord inv trafo}{%
+ \begingroup
+ % discard everything up to the period:
+ \pgfmath@basic@round@{##1}%
+ \afterassignment\pgfplots@gobble@until@relax
+ \count0=\pgfmathresult\relax
+ \ifnum\count0<0
+ \count0=0
+ \else
+ \edef\pgfplots@loc@TMPa{\expandafter\pgfplotsarraysizeof\csname pgfplots@symbolic@coords@#1@inverse\endcsname}%
+ \count1=\pgfplots@loc@TMPa\relax
+ \ifnum\count0<\count1
+ \else
+ \count0=\count1
+ \advance\count0 by-1
+ \fi
+ \fi
+ \expandafter\pgfplotsarrayselect\expandafter\count\expandafter0\expandafter\of\csname pgfplots@symbolic@coords@#1@inverse\endcsname\to\pgfmathresult
+%\message{#1 coord inv trafo{##1} -->\the\count0 --> \meaning\pgfmathresult^^J}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ }%
+ \pgfkeysifdefined{/pgfplots/#1ticklabel/.@cmd}{%
+ \pgfkeysalso{%
+ /pgfplots/#1ticklabel={\pgfplots@ticklabel@typeset@arg\tick},%
+ /pgfplots/scaled #1 ticks=false,%
+ /pgfplots/plot coordinates/math parser=false,%
+ }%
+ }{%
+ % OK. The style can be used for other coordinates as well
+ % (like hist/data)
+ }%
+ %
+ \pgfkeysifdefined{/pgfplots/#1 is expr}{%
+ \pgfkeyssetvalue{/pgfplots/#1 is expr}{0}%
+ }{}%
+ %
+ % Allow a callback (optional)
+ \pgfkeysifdefined{/pgfplots/#1/@execute on coord trafo changed/.@cmd}{%
+ \pgfkeysalso {/pgfplots/#1/@execute on coord trafo changed}%
+ }{}%
+ },%
+ /pgfplots/symbolic x coords/.style={symbolic coords={x}{#1}},%
+ /pgfplots/symbolic y coords/.style={symbolic coords={y}{#1}},%
+ /pgfplots/symbolic z coords/.style={symbolic coords={z}{#1}},%
+% Defines the class name \pgfplotspointmetainputhandler:
+ /pgfplots/point meta/.code={%
+ \pgfplots@pgfkeys@set@point@meta@value{#1}%
+ },%
+ /pgfplots/point meta/none/.code ={\pgfplotssetpointmetainput{}{}},%
+ /pgfplots/point meta/x/.code ={\pgfplotssetpointmetainput{x}{}},%
+ /pgfplots/point meta/y/.code ={\pgfplotssetpointmetainput{y}{}},%
+ /pgfplots/point meta/z/.code ={\pgfplotssetpointmetainput{z}{}},%
+ /pgfplots/point meta/expr/.code={\pgfplotssetpointmetainput{expr}{#1}},%
+ /pgfplots/point meta/explicit/.code={\pgfplotssetpointmetainput{explicit}{}},%
+ /pgfplots/point meta/explicit symbolic/.code={\pgfplotssetpointmetainput{explicit symbolic}{}},%
+ /pgfplots/point meta/f(x)/.code={\pgfplotssetpointmetainput{f(x)}{}},%
+ /pgfplots/point meta/TeX code/.code={\pgfplotssetpointmetainput{TeX code}{#1}},%
+ /pgfplots/point meta/TeX code/.value required,
+ /pgfplots/point meta/TeX code symbolic/.code={\pgfplotssetpointmetainput{TeX code symbolic}{#1}},%
+ /pgfplots/point meta/TeX code symbolic/.value required,
+ /pgfplots/point meta/symbolic/.style={/pgfplots/point meta/TeX code symbolic={\edef\pgfplotspointmeta{#1}}},
+ /pgfplots/set point meta if empty/.code={%
+ \ifx\pgfplotspointmetainputhandler\pgfutil@empty
+ \pgfkeysalso{/pgfplots/point meta=#1}%
+ \fi
+ },%
+ /pgfplots/point meta/none,
+ /pgfplots/point meta rel/.is choice,
+ /pgfplots/point meta rel/axis wide/.code={\def\pgfplots@perpointmeta@rel@choice{0}},%
+ /pgfplots/point meta rel/per plot/.code={\def\pgfplots@perpointmeta@rel@choice{1}},%
+ /pgfplots/point meta rel/axis wide,%
+ /pgfplots/point meta min/.initial=,%
+ /pgfplots/point meta max/.initial=,%
+ %
+ /pgfplots/point meta/expand/.is if=pgfplots@perpointmeta@expand,
+ /pgfplots/point meta/expand=false,
+ %
+ /pgfplots/colormap name/.initial=hot,
+ /pgfplots/colormap access/.is choice,
+ /pgfplots/colormap access/direct/.code={\def\pgfplots@colormap@access{d}},%
+ /pgfplots/colormap access/map/.code={\def\pgfplots@colormap@access{m}},%
+ /pgfplots/colormap access/piecewise constant/.code={\def\pgfplots@colormap@access{c}},%
+ /pgfplots/colormap access/piecewise const/.code= {\def\pgfplots@colormap@access{c}},%
+ /pgfplots/colormap access/const/.code= {\def\pgfplots@colormap@access{c}},%
+ /pgfplots/colormap access/piecewise linear/.style={/pgfplots/colormap access/map},
+ /pgfplots/colormap access/map,%
+ %/pgfplots/colormap default colorspace/.initial=auto,% declared in pgfplotscolormap.code.tex
+ /pgfplots/colormap/.code 2 args={%
+ \pgfplotscreatecolormap{#1}{#2}%
+ \pgfkeysalso{/pgfplots/colormap name=#1}%
+ },
+ %
+ % #1: a style name like '/pgfplots/colormap/hot'
+ /pgfplots/ensure colormap/.code={%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@ensure@old@cm
+ \pgfkeysalso{#1}%
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplots@ensure@old@cm
+ },
+ % a backwards compatibility switch:
+ /pgfplots/colormap uniform/.is choice,
+ /pgfplots/colormap uniform/always/.code={\def\pgfplots@colormap@uniform@choice{0}},
+ /pgfplots/colormap uniform/if requested/.code={\def\pgfplots@colormap@uniform@choice{1}},
+ /pgfplots/colormap uniform/always,
+ %
+ % #1: a number X with 0<= x <=0.9 which defines the relative size
+ % of the extra interval used for 'colormap access=piecewise constant'
+ % The value #1=0 disables the extra interval.
+ /pgfplots/colormap access/extra interval width/.code={%
+ \pgfplotscolormapsetadditionalintervalwidth{\pgfkeysvalueof{/pgfplots/colormap name}}{#1}%
+ },
+ %
+ /pgfplots/colormap/hot/.style={
+ % attention: copied from pgfplots.colormap.code.tex:
+ /pgfplots/colormap={hot}{color(0cm)=(blue); color(1cm)=(yellow); color(2cm)=(orange); color(3cm)=(red)}
+ },
+ /pgfplots/colormap/viridis/.style={%
+ /pgfplots/colormap={viridis}{%
+ rgb=(0.267,0.00487,0.32942)
+ rgb=(0.28192,0.08966,0.41241)
+ rgb=(0.28026,0.1657,0.4765)
+ rgb=(0.26366,0.23763,0.51877)
+ rgb=(0.23744,0.3052,0.54192)
+ rgb=(0.20862,0.36775,0.55267)
+ rgb=(0.18225,0.42618,0.55711)
+ rgb=(0.1592,0.48224,0.55807)
+ rgb=(0.13777,0.53749,0.5549)
+ rgb=(0.12115,0.59274,0.54465)
+ rgb=(0.12808,0.64775,0.5235)
+ rgb=(0.18065,0.7014,0.48819)
+ rgb=(0.27415,0.75198,0.4366)
+ rgb=(0.39517,0.79747,0.36775)
+ rgb=(0.53561,0.83578,0.2819)
+ rgb=(0.68895,0.86545,0.18272)
+ rgb=(0.84557,0.88733,0.0997)
+ rgb=(0.99324,0.90616,0.14394)
+ }%
+ },
+ % instantiate viridis such that it is in memory by default:
+ /pgfplots/colormap/viridis,
+ % ... but reuse hot since it is used to be the default since the
+ % beginning:
+ /pgfplots/colormap name=hot,
+ %
+ /pgfplots/colormap/hot2/.style={
+ /pgfplots/colormap={hot2}{[1cm]rgb255(0cm)=(0,0,0) rgb255(3cm)=(255,0,0) rgb255(6cm)=(255,255,0) rgb255(8cm)=(255,255,255)}
+ },
+ /pgfplots/colormap/bluered/.style={
+ /pgfplots/colormap={bluered}{rgb255(0cm)=(0,0,180); rgb255(1cm)=(0,255,255); rgb255(2cm)=(100,255,0); rgb255(3cm)=(255,255,0); rgb255(4cm)=(255,0,0); rgb255(5cm)=(128,0,0)}
+ },
+ /pgfplots/colormap/cool/.style={
+ /pgfplots/colormap={cool}{rgb255(0cm)=(255,255,255); rgb255(1cm)=(0,128,255); rgb255(2cm)=(255,0,255)}
+ },
+ /pgfplots/colormap/greenyellow/.style={
+ /pgfplots/colormap={greenyellow}{rgb255(0cm)=(0,128,0); rgb255(1cm)=(255,255,0)}
+ },
+ /pgfplots/colormap/redyellow/.style={
+ /pgfplots/colormap={redyellow}{rgb255(0cm)=(255,0,0); rgb255(1cm)=(255,255,0)}
+ },
+ /pgfplots/colormap/blackwhite/.style={
+ /pgfplots/colormap={blackwhite}{gray(0cm)=(0); gray(1cm)=(1)}
+ },
+ /pgfplots/colormap/violet/.style={
+ /pgfplots/colormap={violet}{rgb255=(25,25,122) color=(white) rgb255=(238,140,238)}
+ },
+ /pgfplots/colormap/jet/.style={
+ /pgfplots/colormap={jet}{rgb255(0cm)=(0,0,128) rgb255(1cm)=(0,0,255) rgb255(3cm)=(0,255,255) rgb255(5cm)=(255,255,0) rgb255(7cm)=(255,0,0) rgb255(8cm)=(128,0,0)}
+ },
+ %
+ % color of colormap={300}
+ % color of colormap={300 of viridis}
+ /pgfplots/color of colormap/.code={%
+ \pgfplots@color@of@colormap{color of colormap={#1}}%
+ },%
+ /tikz/color of colormap/.style={/pgfplots/color of colormap={#1}},
+ % const color of colormap={300}
+ % const color of colormap={300 of viridis}
+ /pgfplots/const color of colormap/.code={%
+ \pgfplots@color@of@colormap{const color of colormap={#1}}%
+ },%
+ /tikz/color of colormap/.style={/pgfplots/color of colormap={#1}},
+ % index of colormap={4}
+ % index of colormap={4 of viridis}
+ /pgfplots/index of colormap/.code={%
+ \pgfplots@color@of@colormap{index of colormap={#1}}%
+ },%
+ /tikz/index of colormap/.style={/pgfplots/index of colormap={#1}},
+ %
+ % #1: the target color name
+ % #2: the color space (like 'rgb')
+ % #3: the color components
+ /tikz/color/.define/.code args={#1#2#3}{%
+ \pgfutil@definecolor{#1}{#2}{#3}%
+ },
+ %
+ %%
+ /pgfplots/scatter/.is choice,
+ /pgfplots/scatter/false/.code={%
+ \pgfplots@scatterplotenabledfalse
+ },%
+ /pgfplots/scatter/true*/.code={%
+ \pgfplots@scatterplotenabledtrue
+ \pgfkeysalso{/pgfplots/set point meta if empty=f(x)}%
+ },%
+ /pgfplots/scatter/true/.code={%
+ \pgfplots@scatterplotenabledtrue
+ \pgfkeysalso{/pgfplots/set point meta if empty=f(x)}%
+ % make sure there is a mark set!
+ \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}%
+ \def\pgfplots@loc@TMPa{none}%
+ \ifx\tikz@plot@mark\pgfplots@loc@TMPa
+ % this here happens only in older versions of pgf.
+ \pgfqkeys{/tikz}{mark=*}%
+ \else
+ \ifx\tikz@plot@mark\pgfutil@empty
+ \pgfqkeys{/tikz}{mark=*}%
+ \fi
+ \fi
+ },
+ /pgfplots/scatter/.default=true,
+ /pgfplots/scatter src/.style={/pgfplots/point meta={#1}},
+ /tikz/scatter/.style={/pgfplots/scatter=#1},
+ %
+ % ARGUMENTS: the macros
+ % - \pgfplotspointmeta
+ % - \pgfplotspointmetarange
+ % - \pgfplotspointmetatransformed
+ % - \pgfplotspointmetatransformedrange
+ % are set during @pre marker code and @post marker code.
+ % '#1' is empty.
+ /pgfplots/scatter/@pre marker code/.code=,%
+ /pgfplots/scatter/@post marker code/.code=,%
+ /pgfplots/scatter/position/.is choice,
+ /pgfplots/scatter/position/absolute/.code={\def\pgfplots@scatter@position{a}},
+ /pgfplots/scatter/position/relative/.code={\def\pgfplots@scatter@position{r}},
+ /pgfplots/scatter/position=relative,
+ /pgfplots/scatter/use mapped color/.style={%
+ /pgfplots/scatter/@pre marker code/.code=,%
+ /pgfplots/scatter/@post marker code/.code=,%
+ /pgfplots/scatter/use mapped color*={#1},%
+ },%
+ /pgfplots/scatter/use mapped color*/.style={
+ /pgfplots/scatter/@pre marker code/.append code={
+ \pgfplotscolormapdefinemappedcolor\pgfplotspointmetatransformed
+ \scope[#1]%
+ },
+ /pgfplots/scatter/@post marker code/.prefix code={\endscope}
+ },
+ /pgfplots/scatter/use mapped color*/.default={draw=mapped color!80!black,fill=mapped color},
+ /pgfplots/scatter/use mapped color*,
+ % expect '#1 = {<class>=<style>,<class>=<style>,...} where <class>
+ % is expected as SYMBOL, not as number. See 'point meta/explicit symbolic'
+ /pgfplots/scatter/classes/.style={%
+ /pgfplots/scatter/@pre marker code/.code=,%
+ /pgfplots/scatter/@post marker code/.code=,%
+ /pgfplots/scatter/classes*={#1},%
+ },%
+ /pgfplots/scatter/classes*/.code={%
+ % Step 1: remember the per class-styles as
+ % \csname pgfp@scatter@class@<class name>\endcsname
+ % -> this is done locally!
+ \def\pgfplots@loc@TMPa##1=##2\pgfplots@EEOI{%
+ \expandafter\def\csname pgfp@scatter@class@##1\endcsname{##2}%
+ }%
+ \pgfplotsforeachentryinCSV{\pgfplots@loc@TMPb}{#1}{%
+ \expandafter\pgfplots@loc@TMPa\pgfplots@loc@TMPb\pgfplots@EEOI
+ }%
+ %
+ \pgfkeysalso{%
+ /pgfplots/scatter/@pre marker code/.append code={\pgfplots@scatter@classes@pre@marker@code},%
+ /pgfplots/scatter/@post marker code/.prefix code={\endscope}%
+ }%
+ % Now:remember the classes.
+ \pgfkeyssetvalue{/pgfplots/scatter/classes/values}{#1}%
+ %
+ % and generate legend items for every single class,
+ % But ONLY if we really *have* a plot which uses
+ % scatter/classes!
+ \pgfkeys{/pgfplots/execute at begin plot@@/.add={}{%
+ \ifpgfplots@scatterplotenabled
+ \pgfkeysgetvalue{/pgfplots/scatter/@pre marker code/.@cmd}\pgfplots@loc@TMPa
+ \def\pgfplots@loc@TMPb{\pgfutil@in@{\pgfplots@scatter@classes@pre@marker@code}}%
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa\pgfeov}%
+ \ifpgfutil@in@
+ % modify '\pgfplots@rememberplotspec' such
+ % that it generates entries for every class:
+ \let\pgfplots@rememberplotspec@orig=\pgfplots@rememberplotspec
+ \def\pgfplots@rememberplotspec##1{%
+ \def\pgfplots@scatter@loc@TMPa####1=####2\pgfplots@EEOI{%
+ \pgfplots@rememberplotspec@orig{##1,####2}%
+ \pgfplots@rememberplotspec@for@label[####1]{##1,####2}%
+ }%
+ \pgfplotsforeachentryinCSV{\pgfplots@scatter@loc@TMPb}{#1}{%
+ \expandafter\pgfplots@scatter@loc@TMPa\pgfplots@scatter@loc@TMPb\pgfplots@EEOI
+ }%
+ }%
+ \fi
+ \fi
+ }%
+ }%
+ },
+ /pgfplots/refstyle/.code={%
+ \pgfutil@ifundefined{pgfplots@labelstyle@#1}{%
+ \G@refundefinedtrue
+ \@latex@warning{Reference `#1' on page \thepage \space undefined}%
+ }{%
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfplots@labelstyle@#1\endcsname}%
+ \expandafter\pgfkeysalso\expandafter{\the\t@pgfplots@toka}%
+ }%
+ },%
+ /pgfplots/forget plot/.is if=pgfplots@curplot@isirrelevant,
+ /pgfplots/forget plot/.default=true,
+ /pgfplots/normalsize/.style={
+ /pgfplots/width=240pt,
+ /pgfplots/height=207pt,
+ /pgfplots/max space between ticks=35,
+ },
+ /pgfplots/small/.style={
+ width=6.5cm,
+ height=,
+ tick label style={font=\footnotesize},
+ label style={font=\small},
+ max space between ticks=25,
+ },
+ /pgfplots/footnotesize/.style={
+ width=5cm,
+ height=,
+ legend style={font=\footnotesize},
+ tick label style={font=\footnotesize},
+ label style={font=\small},
+ title style={font=\small},
+ every axis title shift=0pt,
+ max space between ticks=15,
+ every mark/.append style={mark size=8},
+ major tick length=0.1cm,
+ minor tick length=0.066cm,
+ },
+ /pgfplots/tiny/.style={
+ width=4cm,
+ height=,
+ legend style={font=\tiny},
+ tick label style={font=\tiny},
+ label style={font=\tiny},
+ title style={font=\footnotesize},
+ every axis title shift=0pt,
+ max space between ticks=12,
+ every mark/.append style={mark size=6},
+ major tick length=0.1cm,
+ minor tick length=0.066cm,
+ every legend image post/.append style={scale=0.8},
+ },
+ /pgfplots/cube/set size/.code 2 args={%
+ \expandafter\def\csname pgfplots@cube@gethalf@#1\endcsname{%
+ \afterassignment\pgfplots@gobble@until@relax
+ \pgfplots@tmpa=#2pt\relax
+ \pgfplotsconvertunittocoordinate #1{0.5\pgfplots@tmpa}%
+ }%
+ },%
+ /pgfplots/cube/size x/.style={/pgfplots/cube/set size=x{#1}},
+ /pgfplots/cube/size y/.style={/pgfplots/cube/set size=y{#1}},
+ /pgfplots/cube/size z/.style={/pgfplots/cube/set size=z{#1}},
+ /pgfplots/cube/size x=\pgfplotmarksize,
+ /pgfplots/cube/size y=\pgfplotmarksize,
+ /pgfplots/cube/size z=\pgfplotmarksize,
+ %
+ /pgfplots/3d log sampling/.is if=pgfplots@threedim@log@sampling,
+ %
+ /pgfplots/trig format/.style={/pgf/trig format={#1}},
+ /pgfplots/xtick placement tolerance/.initial=0.05pt,
+ /pgfplots/ytick placement tolerance/.initial=0.05pt,
+ /pgfplots/ztick placement tolerance/.initial=0.05pt,
+ %
+ /pgfplots/correct polar positioning/.is choice,
+ /pgfplots/correct polar positioning/true/.code={\def\b@pgfplots@polaraxis@fix@positioning{1}},
+ /pgfplots/correct polar positioning/false/.code={\def\b@pgfplots@polaraxis@fix@positioning{0}},
+ %
+ /pgfplots/correct shader flat/.is choice,
+ /pgfplots/correct shader flat/true/.code={\def\b@pgfplots@correct@shader@flat{1}},
+ /pgfplots/correct shader flat/false/.code={\def\b@pgfplots@correct@shader@flat{0}},
+ %
+ /pgfplots/correct sampling/.is choice,
+ /pgfplots/correct sampling/true/.code={\let\pgfplotsforeachungroupeduniform@loop@mathengine=\pgfplotsforeachungroupeduniform@loop@mathengine@precise},
+ /pgfplots/correct sampling/false/.code={\let\pgfplotsforeachungroupeduniform@loop@mathengine=\pgfplotsforeachungroupeduniform@loop@mathengine@legacy},
+ %
+ /pgfplots/compat/anchors/.is choice,
+ /pgfplots/compat/anchors/pre 1.3/.code={%
+ \pgfplots@deprecated@anchorstrue
+ \pgfkeysalso{/pgfplots/correct polar positioning=false}%
+ },
+ /pgfplots/compat/anchors/1.3/.code= {%
+ \pgfplots@deprecated@anchorsfalse
+ \pgfkeysalso{/pgfplots/correct polar positioning=false}%
+ },%
+ /pgfplots/compat/anchors/1.4/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.5/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.5.1/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.6/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.7/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.8/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.9/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.10/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.11/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.12/.style= {/pgfplots/compat/anchors/1.3},%
+ /pgfplots/compat/anchors/1.13/.style= {/pgfplots/compat/anchors/1.3,/pgfplots/correct polar positioning=true},%
+ /pgfplots/compat/anchors/1.14/.style= {/pgfplots/compat/anchors/1.13},%
+ /pgfplots/compat/anchors/1.15/.style= {/pgfplots/compat/anchors/1.13},%
+ /pgfplots/compat/anchors/1.16/.style= {/pgfplots/compat/anchors/1.13},%
+ /pgfplots/compat/anchors/default/.style={/pgfplots/compat/anchors/1.3},%
+ %
+ /pgfplots/compat/empty line/.is choice,
+ /pgfplots/compat/empty line/pre 1.3/.code={\pgfplots@emptyline@compattrue},% FIXME: WAS \global
+ /pgfplots/compat/empty line/1.3/.style= {/pgfplots/compat/empty line/pre 1.3},%
+ /pgfplots/compat/empty line/1.4/.code= {\pgfplots@emptyline@compatfalse},%
+ /pgfplots/compat/empty line/1.5/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.5.1/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.6/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.7/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.8/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.9/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.10/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.11/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.12/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.13/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.14/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.15/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/1.16/.style= {/pgfplots/compat/empty line/1.4},%
+ /pgfplots/compat/empty line/default/.style= {/pgfplots/compat/empty line/1.4},%
+ %
+ /pgfplots/compat/path replacement/.is choice,
+ /pgfplots/compat/path replacement/pre 1.3/.code= {\pgfplots@path@replace@ellipsefalse},
+ /pgfplots/compat/path replacement/1.3/.style= {/pgfplots/compat/path replacement/pre 1.3},%
+ /pgfplots/compat/path replacement/1.4/.style= {/pgfplots/compat/path replacement/pre 1.3},
+ /pgfplots/compat/path replacement/1.5/.style= {/pgfplots/compat/path replacement/pre 1.3},%
+ /pgfplots/compat/path replacement/1.5.1/.code= {\pgfplots@path@replace@ellipsetrue},%
+ /pgfplots/compat/path replacement/1.6/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.7/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.8/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.9/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.10/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.11/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.12/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.13/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.14/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.15/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/1.16/.style= {/pgfplots/compat/path replacement/1.5.1},
+ /pgfplots/compat/path replacement/default/.style= {/pgfplots/compat/path replacement/pre 1.3},%
+ %
+ /pgfplots/compat/pgfpoint substitution/.is choice,
+ /pgfplots/compat/pgfpoint substitution/pre 1.3/.code= {\pgfplots@substitute@pgfpointfalse},
+ /pgfplots/compat/pgfpoint substitution/1.3/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},%
+ /pgfplots/compat/pgfpoint substitution/1.4/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},
+ /pgfplots/compat/pgfpoint substitution/1.5/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},%
+ /pgfplots/compat/pgfpoint substitution/1.5.1/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},%
+ /pgfplots/compat/pgfpoint substitution/1.6/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},
+ /pgfplots/compat/pgfpoint substitution/1.7/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},
+ /pgfplots/compat/pgfpoint substitution/1.8/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},
+ /pgfplots/compat/pgfpoint substitution/1.9/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},
+ /pgfplots/compat/pgfpoint substitution/1.10/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},
+ /pgfplots/compat/pgfpoint substitution/1.11/.code= {\pgfplots@substitute@pgfpointtrue},
+ /pgfplots/compat/pgfpoint substitution/1.12/.style= {/pgfplots/compat/pgfpoint substitution/1.11},
+ /pgfplots/compat/pgfpoint substitution/1.13/.style= {/pgfplots/compat/pgfpoint substitution/1.11},
+ /pgfplots/compat/pgfpoint substitution/1.14/.style= {/pgfplots/compat/pgfpoint substitution/1.11},
+ /pgfplots/compat/pgfpoint substitution/1.15/.style= {/pgfplots/compat/pgfpoint substitution/1.11},
+ /pgfplots/compat/pgfpoint substitution/1.16/.style= {/pgfplots/compat/pgfpoint substitution/1.11},
+ /pgfplots/compat/pgfpoint substitution/default/.style= {/pgfplots/compat/pgfpoint substitution/pre 1.3},%
+ %ellipse/.is if=pgfplots@path@replace@ellipse,
+ %
+ /pgfplots/compat/labels/.is choice,
+ /pgfplots/compat/labels/pre 1.3/.style={%
+ /pgfplots/compat/axis line style pre 1.8,
+ /pgfplots/xlabel absolute,
+ /pgfplots/ylabel absolute},%
+ /pgfplots/compat/labels/1.3/.style={%
+ /pgfplots/compat/axis line style pre 1.8,
+ /pgfplots/xlabel near ticks,
+ /pgfplots/ylabel near ticks},%
+ /pgfplots/compat/labels/1.4/.style= {/pgfplots/compat/labels/1.3},%
+ /pgfplots/compat/labels/1.5/.style= {/pgfplots/compat/labels/1.3},%
+ /pgfplots/compat/labels/1.5.1/.style= {/pgfplots/compat/labels/1.3},%
+ /pgfplots/compat/labels/1.6/.style= {/pgfplots/compat/labels/1.3},%
+ /pgfplots/compat/labels/1.7/.style= {/pgfplots/compat/labels/1.3},%
+ /pgfplots/compat/labels/1.8/.style= {
+ /pgfplots/compat/labels/1.3,
+ /pgfplots/compat/axis line style post 1.8,
+ },%
+ /pgfplots/compat/labels/1.9/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/1.10/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/1.11/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/1.12/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/1.13/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/1.14/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/1.15/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/1.16/.style= {/pgfplots/compat/labels/1.8},%
+ /pgfplots/compat/labels/default/.style= {/pgfplots/compat/labels/pre 1.3},% maintain backwards compatibility
+ %
+ /pgfplots/compat/bar nodes/.is choice,
+ /pgfplots/compat/bar nodes/pre 1.3/.style={%
+ /pgfplots/stacked since 1.9/.style={
+ /pgfplots/stacked ignores zero=false,% backwards compatible.
+ },%
+ /pgfplots/stacked since 1.13/.style={
+ /pgfplots/stack negative=on previous,% backwards compatible.
+ },%
+ %
+ % empty - early versions did not know anything about them.
+ % But people might have arrived at suitable work-arounds; do
+ % not destroy their work.
+ /pgfplots/activate nodes near coords xbar stacked/.style={%
+ /pgfplots/set point meta if empty=f(x),%
+ },%
+ /pgfplots/activate nodes near coords ybar stacked/.code={%
+ /pgfplots/set point meta if empty=f(x),%
+ },%
+ },%
+ /pgfplots/compat/bar nodes/1.3/.style= {/pgfplots/compat/bar nodes/pre 1.3},%
+ /pgfplots/compat/bar nodes/1.4/.style= {/pgfplots/compat/bar nodes/pre 1.3},%
+ /pgfplots/compat/bar nodes/1.5/.style= {/pgfplots/compat/bar nodes/pre 1.3},%
+ /pgfplots/compat/bar nodes/1.5.1/.style= {/pgfplots/compat/bar nodes/pre 1.3},%
+ /pgfplots/compat/bar nodes/1.6/.style= {/pgfplots/compat/bar nodes/pre 1.3},%
+ /pgfplots/compat/bar nodes/1.7/.style= {/pgfplots/compat/bar nodes/pre 1.3},%
+ /pgfplots/compat/bar nodes/1.8/.style= {/pgfplots/compat/bar nodes/pre 1.3},%
+ /pgfplots/compat/bar nodes/1.9/.style= {
+ /pgfplots/stacked since 1.9/.style={
+ /pgfplots/stacked ignores zero=true,%
+ },
+ /pgfplots/stacked since 1.13/.style={
+ /pgfplots/stack negative=on previous,% backwards compatible.
+ },%
+ /pgfplots/activate nodes near coords xbar stacked/.style={
+ /pgfplots/nodes near coords xbar stacked configuration,
+ },
+ /pgfplots/activate nodes near coords ybar stacked/.style={
+ /pgfplots/nodes near coords ybar stacked configuration,
+ },
+ },%
+ /pgfplots/compat/bar nodes/1.10/.style= {/pgfplots/compat/bar nodes/1.9},%
+ /pgfplots/compat/bar nodes/1.11/.style= {/pgfplots/compat/bar nodes/1.9},%
+ /pgfplots/compat/bar nodes/1.12/.style= {/pgfplots/compat/bar nodes/1.9},%
+ /pgfplots/compat/bar nodes/1.13/.style= {
+ /pgfplots/compat/bar nodes/1.9,
+ /pgfplots/stacked since 1.13/.style={
+ /pgfplots/stack negative=separate,
+ },%
+ },%
+ /pgfplots/compat/bar nodes/1.14/.style= {/pgfplots/compat/bar nodes/1.13},%
+ /pgfplots/compat/bar nodes/1.15/.style= {/pgfplots/compat/bar nodes/1.13},%
+ /pgfplots/compat/bar nodes/1.16/.style= {/pgfplots/compat/bar nodes/1.13},%
+ /pgfplots/compat/bar nodes/default/.style= {/pgfplots/compat/bar nodes/pre 1.3},% maintain backwards compatibility
+ /pgfplots/compat/bar nodes/default,
+ %
+ % search for the \pgfplots@compat@scaling@coordmath -- using float
+ % is much more accurate. But it changes the spacing slightly.
+ /pgfplots/compat/scaling/.is choice,
+ /pgfplots/compat/scaling/pre 1.3/.code={%
+ \def\pgfplots@compat@scaling@zunitfix@enable{0}%
+ \def\pgfplots@compat@scaling@coordmath{pgfbasic}%
+ \def\pgfplots@compat@scaling@coordmath@final{pgfbasic}%
+ },
+ /pgfplots/compat/scaling/1.3/.style={/pgfplots/compat/scaling/pre 1.3},
+ /pgfplots/compat/scaling/1.4/.code={%
+ \def\pgfplots@compat@scaling@zunitfix@enable{1}%
+ \def\pgfplots@compat@scaling@coordmath{float}%
+ \def\pgfplots@compat@scaling@coordmath@final{pgfbasic}%
+ },
+ /pgfplots/compat/scaling/1.5/.style={/pgfplots/compat/scaling/1.4},
+ /pgfplots/compat/scaling/1.5.1/.style={/pgfplots/compat/scaling/1.4},
+ /pgfplots/compat/scaling/1.6/.code={%
+ \def\pgfplots@compat@scaling@zunitfix@enable{1}%
+ \def\pgfplots@compat@scaling@coordmath{float}%
+ \def\pgfplots@compat@scaling@coordmath@final{float}%
+ },
+ /pgfplots/compat/scaling/1.7/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.8/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.9/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.10/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.11/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.12/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.13/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.14/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.15/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/1.16/.style={/pgfplots/compat/scaling/1.6},
+ /pgfplots/compat/scaling/default/.style={/pgfplots/compat/scaling/1.4},
+ %
+ /pgfplots/compat/scale mode/.is choice,
+ /pgfplots/compat/scale mode/pre 1.3/.code=\def\pgfplots@compat@scale@mode@compatible@mode{1},%
+ /pgfplots/compat/scale mode/1.3/.style= {/pgfplots/compat/scale mode/pre 1.3},
+ /pgfplots/compat/scale mode/1.4/.style= {/pgfplots/compat/scale mode/pre 1.3},
+ /pgfplots/compat/scale mode/1.5/.style= {/pgfplots/compat/scale mode/pre 1.3},
+ /pgfplots/compat/scale mode/1.5.1/.style= {/pgfplots/compat/scale mode/pre 1.3},
+ /pgfplots/compat/scale mode/1.6/.code=\def\pgfplots@compat@scale@mode@compatible@mode{0},
+ /pgfplots/compat/scale mode/1.7/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.8/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.9/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.10/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.11/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.12/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.13/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.14/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.15/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/1.16/.style={/pgfplots/compat/scale mode/1.6},
+ /pgfplots/compat/scale mode/default/.style={/pgfplots/compat/scale mode/1.5},
+ %
+ %
+ /pgfplots/compat/plot3graphics/.is choice,
+ /pgfplots/compat/plot3graphics/pre 1.3/.style= {/pgfplots/compat/plot3graphics/1.5},
+ /pgfplots/compat/plot3graphics/1.3/.style= {/pgfplots/compat/plot3graphics/1.5},
+ /pgfplots/compat/plot3graphics/1.4/.style= {/pgfplots/compat/plot3graphics/1.5},%
+ /pgfplots/compat/plot3graphics/1.5/.code= {\def\b@pgfplots@compat@plot@graphics@threedim{1}},%
+ /pgfplots/compat/plot3graphics/1.5.1/.style= {/pgfplots/compat/plot3graphics/1.5},%
+ /pgfplots/compat/plot3graphics/1.6/.code= {\def\b@pgfplots@compat@plot@graphics@threedim{2}},%
+ /pgfplots/compat/plot3graphics/1.7/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.8/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.9/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.10/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.11/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.12/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.13/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.14/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.15/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/1.16/.style= {/pgfplots/compat/plot3graphics/1.6},%
+ /pgfplots/compat/plot3graphics/default/.style= {/pgfplots/compat/plot3graphics/1.5},%
+ %
+ % ATTENTION: there is a compatibility issue which slipped through
+ % the quality assurance: if tick labels where generated in scientific notation
+ % (NOT log tick labels; these are special), and the numbers were
+ % negative, the spacing changed as follows:
+ % pre 1.3: - 1*10^5 (binary minus sign)
+ % 1.3: - 1*10^5 (binary minus sign)
+ % 1.4: - 1*10^5 (binary minus sign)
+ % 1.5: -1*10^5 (unary minus sign - correct!)
+ % 1.6: -1*10^5 (unary minus sign - correct!)
+ % This is (was) a bug in the PGF number printer which has been
+ % fixed in the meantime; it occurred only if
+ % $\pgfmathprintnumber{-1e5}$ was used (i.e. with the '$' signs).
+ % Unfortunately, version 1.5 has been released without realizing
+ % the changes; I detected them right before the release of 1.6.
+ % Consequently, I cannot introduce compatibity switches without
+ % loosing compatibility.
+ %
+ % I chose to keep the correct unary minus sign. If you ever want
+ % to revert to the old version in order to keep spacing intact, use
+ %
+ % \pgfkeys{/pgf/compat/number printer=2.10}
+ %
+ % Risk: the size of such tick labels changed and the
+ % figure has been moved somewhat.
+ %
+ % Sorry.
+ %
+ /pgfplots/compat/bar width by units/.is choice,
+ /pgfplots/compat/bar width by units/pre 1.3/.code= {\def\b@pgfplots@compat@bar@width@units{1}},%
+ /pgfplots/compat/bar width by units/1.3/.style= {/pgfplots/compat/bar width by units/pre 1.3},
+ /pgfplots/compat/bar width by units/1.4/.style= {/pgfplots/compat/bar width by units/pre 1.3},%
+ /pgfplots/compat/bar width by units/1.5/.style= {/pgfplots/compat/bar width by units/pre 1.3},%
+ /pgfplots/compat/bar width by units/1.5.1/.style= {/pgfplots/compat/bar width by units/pre 1.3},%
+ /pgfplots/compat/bar width by units/1.6/.style= {/pgfplots/compat/bar width by units/pre 1.3},%
+ /pgfplots/compat/bar width by units/1.7/.code= {\def\b@pgfplots@compat@bar@width@units{0}},%
+ /pgfplots/compat/bar width by units/1.8/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.9/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.10/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.11/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.12/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.13/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.14/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.15/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/1.16/.style= {/pgfplots/compat/bar width by units/1.7},
+ /pgfplots/compat/bar width by units/default/.style={/pgfplots/compat/bar width by units/pre 1.3},
+ %
+ /pgfplots/compat/BB/.is choice,
+ /pgfplots/compat/BB/pre 1.3/.style={/pgfplots/clip bounding box=default tikz},%
+ /pgfplots/compat/BB/1.3/.style= {/pgfplots/compat/BB/pre 1.3},
+ /pgfplots/compat/BB/1.4/.style= {/pgfplots/compat/BB/pre 1.3},%
+ /pgfplots/compat/BB/1.5/.style= {/pgfplots/compat/BB/pre 1.3},%
+ /pgfplots/compat/BB/1.5.1/.style= {/pgfplots/compat/BB/pre 1.3},%
+ /pgfplots/compat/BB/1.6/.style= {/pgfplots/compat/BB/pre 1.3},%
+ /pgfplots/compat/BB/1.7/.style= {/pgfplots/compat/BB/pre 1.3},%
+ /pgfplots/compat/BB/1.8/.style= {/pgfplots/clip bounding box=upper bound},%
+ /pgfplots/compat/BB/1.9/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/1.10/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/1.11/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/1.12/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/1.13/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/1.14/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/1.15/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/1.16/.style= {/pgfplots/compat/BB/1.8},%
+ /pgfplots/compat/BB/default/.style={/pgfplots/compat/BB/pre 1.3},
+ %
+ /pgfplots/compat/general/.is choice,
+ /pgfplots/compat/general/pre 1.3/.style={
+ /pgfplots/log origin=infty,
+ /pgfplots/enable tick line clipping=true,
+ /pgfplots/correct shader flat=false,
+ /pgfplots/correct sampling=false,
+ /pgfplots/lua backend=false,
+ /pgfplots/colormap uniform=always,
+ /pgfplots/compat/library hook={statistics}{/pgfplots/boxplot/estimator=legacy,/pgfplots/boxplot/ensure mark=false},
+ /pgfplots/colorbar pgfshading,
+ /pgfplots/colorbar=false,
+ /pgfplots/3d log sampling=false,
+ /pgfplots/clip limits compat=true,
+ },%
+ /pgfplots/compat/general/1.3/.style= {/pgfplots/compat/general/pre 1.3},
+ /pgfplots/compat/general/1.4/.style= {/pgfplots/compat/general/pre 1.3},%
+ /pgfplots/compat/general/1.5/.style= {
+ /pgfplots/compat/general/pre 1.3,
+ /pgfplots/log origin=0,
+ /pgfplots/enable tick line clipping=true,
+ },%
+ /pgfplots/compat/general/1.5.1/.style= {/pgfplots/compat/general/1.5},%
+ /pgfplots/compat/general/1.6/.style= {/pgfplots/compat/general/1.5},%
+ /pgfplots/compat/general/1.7/.style= {/pgfplots/compat/general/1.5},%
+ /pgfplots/compat/general/1.8/.style= {/pgfplots/compat/general/1.5},%
+ /pgfplots/compat/general/1.9/.style= {/pgfplots/compat/general/1.5},%
+ /pgfplots/compat/general/1.10/.style= {/pgfplots/compat/general/1.5},%
+ /pgfplots/compat/general/1.11/.style= {
+ /pgfplots/compat/general/1.5,
+ /pgfplots/enable tick line clipping=false,
+ },%
+ /pgfplots/compat/general/1.12/.style= {
+ /pgfplots/compat/general/1.11,
+ /pgfplots/lua backend,
+ /pgfplots/compat/library hook={statistics}{/pgfplots/boxplot/estimator=Excel,/pgfplots/boxplot/ensure mark=true},
+ },%
+ /pgfplots/compat/general/1.13/.style= {%
+ /pgfplots/compat/general/1.12,
+ /pgfplots/correct shader flat=true,
+ /pgfplots/correct sampling=true,
+ /pgfplots/colormap uniform=always,
+ },%
+ /pgfplots/compat/general/1.14/.style= {%
+ /pgfplots/compat/general/1.13,
+ /pgfplots/colormap uniform=if requested,
+ % no -- do _not_ activate that here: it is correct and
+ % simplifies the code, but many viewers (pdf.js, evince,
+ % sumatrapdf) are better off with pgfshadings:
+ %/pgfplots/colorbar sampled={surf,shader=interp,samples=2},
+ %/pgfplots/colorbar=false,
+ },%
+ /pgfplots/compat/general/1.15/.style= {%
+ /pgfplots/compat/general/1.14,
+ /pgfplots/3d log sampling=true, % FIXME finish this feature: see unittest_log_sampling_3d
+ /pgfplots/clip limits compat=false,
+ },%
+ /pgfplots/compat/general/1.16/.style= {/pgfplots/compat/general/1.15},%
+ /pgfplots/compat/general/default/.style={/pgfplots/compat/general/1.11},
+ %
+ /pgfplots/enable tick line clipping/.is if=pgfplots@enable@tick@line@clipping,
+ /pgfplots/enable tick line clipping/.default=true,
+ %
+ /pgfplots/default typeset ticklabel/.style={
+ /pgfplots/typeset ticklabel/.code={##1},
+ },
+ /pgfplots/default typeset ticklabel,
+ /pgfplots/typeset ticklabels with strut/.style={
+ /pgfplots/typeset ticklabel/.code={\strut ##1},
+ },
+ %
+ %
+ /pgfplots/compat/show suggested version/.is if=pgfplots@show@suggested@version,
+ /pgfplots/compat/show suggested version=true,
+ /pgfplots/compat/current/.initial=,
+ /pgfplots/compat/mostrecent/.initial=1.16,
+ /utils/exec={%
+ \pgfplotsutilforeachcommasep{%
+ /pgfplots/compat/current,%
+ /pgfplots/compat/anchors,%
+ /pgfplots/compat/labels,%
+ /pgfplots/compat/empty line,%
+ /pgfplots/compat/scaling,%
+ /pgfplots/compat/scale mode,%
+ /pgfplots/compat/general,%
+ /pgfplots/compat/BB,%
+ /pgfplots/compat/path replacement,%
+ /pgfplots/compat/plot3graphics,%
+ /pgfplots/compat/bar width by units,%
+ /pgfplots/compat/bar nodes,%
+ /pgfplots/compat/pgfpoint substitution,%
+ }\as\pgfplots@glob@TMPa{%
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ \else
+ \edef\pgfplots@glob@TMPb{%
+ \noexpand\pgfkeysdef{\pgfplots@glob@TMPa/newest}{%
+ \noexpand\pgfkeysalso{%
+ \pgfplots@glob@TMPa/\pgfkeysvalueof{/pgfplots/compat/mostrecent}%
+ }%
+ }%
+ }%
+ \pgfplots@glob@TMPb
+ \fi
+ }%
+ },
+ /pgfplots/compat/.code={%
+ \def\pgfplots@glob@TMPa{newest}%
+ \edef\pgfplots@glob@TMPb{#1}%
+ \ifx\pgfplots@glob@TMPb\pgfplots@glob@TMPa
+ \edef\pgfplots@glob@TMPa{\noexpand\pgfkeysalso{/pgfplots/compat=\pgfkeysvalueof{/pgfplots/compat/mostrecent}}}%
+ \pgfplots@glob@TMPa
+ \else
+ \pgfkeysifdefined{/pgfplots/compat/general/#1/.@cmd}{%
+ \pgfkeysalso{%
+ % ATTENTION: *every* /pgfplots/compat/ setting needs to accept
+ % the same choices due to this construction:
+ /pgfplots/compat/current=#1,% remember the value
+ /pgfplots/compat/anchors=#1,%
+ /pgfplots/compat/labels=#1,%
+ /pgfplots/compat/empty line=#1,%
+ /pgfplots/compat/scaling=#1,%
+ /pgfplots/compat/scale mode=#1,%
+ /pgfplots/compat/general=#1,%
+ /pgfplots/compat/BB=#1,%
+ /pgfplots/compat/path replacement=#1,%
+ /pgfplots/compat/plot3graphics=#1,%
+ /pgfplots/compat/bar width by units=#1,%
+ /pgfplots/compat/bar nodes=#1,%
+ /pgfplots/compat/pgfpoint substitution=#1,%
+ }%
+ }{%
+ \pgfplots@error{Sorry, 'compat=#1' is unknown in this context. Please use at most 'compat=\pgfkeysvalueof{/pgfplots/compat/mostrecent}'}%
+ }%
+ \fi
+ },%
+ /pgfplots/compat/.default=pre 1.3,% this is used if you type '\pgfplotsset{compat}' without value
+ /pgfplots/compat=default,% this is the initial config.
+ %
+ /pgfplots/show outer normals/.style={%
+ extra description/.append code={
+ \def\length{15}
+ \def\pgfplots@@draw@normal####1####2{%
+ \pgfpathmoveto{####1}
+ \pgfpathlineto{%
+ \pgfpointadd
+ {####1}
+ {\pgfqpointscale{\length}{\pgfplotspointouternormalvectorofticklabelaxis{####2}}}%
+ }%
+ }%
+ \draw[->,blue] \pgfextra{\pgfplots@@draw@normal{#1}{x}};
+ \draw[->,blue] \pgfextra{\pgfplots@@draw@normal{\pgfplotsqpointoutsideofticklabelaxisrel{x}{1}{0}}{x}};
+ \draw[->,red] \pgfextra{\pgfplots@@draw@normal{#1}{y}};
+ \draw[->,red] \pgfextra{\pgfplots@@draw@normal{\pgfplotsqpointoutsideofticklabelaxisrel{y}{1}{0}}{y}};
+ \ifpgfplots@threedim
+ \draw[->,black] \pgfextra{\pgfplots@@draw@normal{#1}{z}};
+ \draw[->,black] \pgfextra{\pgfplots@@draw@normal{\pgfplotsqpointoutsideofticklabelaxisrel{z}{1}{0}}{z}};
+ \fi
+ },
+ },
+ /pgfplots/show outer normals/.default={%
+ \ifpgfplots@threedim
+ \pgfplotspointrelaxisxy{-0.03}{-0.03}%
+ \else
+ \pgfplotspointrelaxisxyz{-0.03}{-0.03}{-0.03}%
+ \fi
+ },
+ /pgfplots/profiler/.code={%
+ \pgfutil@ifundefined{pgfprofilenew}{%
+ \usepgflibrary{profiler}%
+ }{}%
+ \pgfprofilenewforenvironment[all axes]{pgfplots@environment@opt}%
+ \pgfprofilesetrel{all axes}%
+ \pgfprofilenewforcommand[pgfkeys variants]{\pgfkeys}{1}%
+ \pgfprofilenewforcommand[pgfkeys variants]{\pgfqkeys}{2}%
+ \pgfprofilenewforcommand[pgfkeys variants]{\pgfkeysalso}{1}%
+ \pgfprofilenewforcommand[pgfkeys variants]{\pgfkeysfiltered}{1}%
+ \pgfprofilenewforcommand[pgfkeys variants]{\pgfqkeysfiltered}{2}%
+ \pgfprofilenewforcommand[pgfkeys variants]{\pgfkeysalsofiltered}{1}%
+ \pgfprofilenewforcommand[pgfplotsapplistXX handling]{\pgfplotsapplistXXpushback}{1}%
+ \pgfprofilenewforcommand[pgfplotsapplistXX handling]{\pgfplotsapplistXXflushbuffers}{0}%
+ \pgfprofilenewforcommandpattern
+ [pgfplots(app|prepend)listX handling]{\pgfplotsapplistXpushback}{##1\to##2}{{##1}\to{##2}}%
+ \pgfprofilenewforcommand
+ [pgfplots(app|prepend)listX handling]{\pgfplotsapplistXflushbuffers}{1}%
+ \pgfprofilenewforcommandpattern
+ [pgfplots(app|prepend)listX handling]{\pgfplotsprependlistXpushfront}{##1\to##2}{{##1}\to{##2}}%
+ \pgfprofilenewforcommand
+ [pgfplots(app|prepend)listX handling]{\pgfplotsprependlistXflushbuffers}{1}%
+ \pgfprofilenewforcommand
+ [pgfsys buffer]{\pgfsyssoftpath@addtocurrentpath}{1}%
+ \pgfprofilenewforcommand
+ [pgfsys buffer]{\pgfsyssoftpath@flushcurrentpath}{0}%
+ \pgfprofilenewforcommand[math parser (basic)]{\pgfmathparse}{1}%
+ \pgfprofilenewforcommand[math parser (fpu)]{\pgfmathfloatparse@}{1}%
+ \pgfprofilenewforcommand[math: division (basic)]{\pgfmathdivide@}{2}%
+ \pgfprofilenewforcommand[math: division (basic)]{\pgfmath@basic@divide@}{2}%
+ \pgfprofilenewforcommand[near ticklabel anchors]{\pgfplots@borderanchor@for@axis}{3}%
+ \pgfprofilenewforcommand[ticklabel cs]{\pgfplotspointticklabelcs}{2}%
+ % \pgfprofilenewforcommand[binary conversion]{\pgfplotsbinaryencodeunsigned}{1}%
+ % \pgfprofilenewforcommand[binary conversion]{\pgfplotsbinaryencodesignedmaplinearly}{1}%
+ % \pgfprofilenewforcommand[binary conversion]{\pgfplotsbinaryencodedimenmaplinearly}{1}%
+ },%
+}
+
+\def\pgfplots@glob@TMPa#1{%
+ \pgfkeys{%
+ /pgfplots/#1tick pos/lower/.style={/pgfplots/#1tick pos=left},
+ /pgfplots/#1tick pos/bottom/.style={/pgfplots/#1tick pos=left},
+ /pgfplots/#1tick pos/upper/.style={/pgfplots/#1tick pos=right},
+ /pgfplots/#1tick pos/top/.style={/pgfplots/#1tick pos=right},
+ }%
+}%
+\pgfplots@glob@TMPa x%
+\pgfplots@glob@TMPa y%
+\pgfplots@glob@TMPa z%
+
+\def\pgfplots@ticklabel@typeset@arg#1{\pgfkeysvalueof{/pgfplots/typeset ticklabel/.@cmd}{#1}\pgfeov}%
+
+% backwards compatibility:
+\def\pgfplots@tickwidth{\pgfkeysvalueof{/pgfplots/major tick length}}%
+\def\pgfplots@subtickwidth{\pgfkeysvalueof{/pgfplots/minor tick length}}%
+
+\begingroup
+\pgfkeys{/pgfplots/colorbar pgfshading}
+\pgfkeysgetvalue{/pgfplots/colorbar/draw/.@cmd}\pgfplots@loc@TMPa
+\global\let\pgfplots@colorbar@draw@legacyimpl=\pgfplots@loc@TMPa
+\endgroup
+
+% call
+% \pgfkeyslet{.../.@cmd}\pgfplots@cant@set@in@this@context
+% to replace a key with a generic error message.
+\def\pgfplots@cant@set@in@this@context#1\pgfeov{\pgfplots@cant@set@in@this@context@}
+\def\pgfplots@cant@set@in@this@context@{%
+ \pgfplotsthrow{unsupported operation}{Sorry, you can't change `\pgfkeyscurrentkeyRAW' in this context. Maybe you need to provide it as \string\begin{axis}[\pgfkeyscurrentkeyRAW=...] ?}\pgfeov
+}
+
+
+{
+\pgfkeysdef{/empty}{}%
+\pgfkeysgetvalue{/empty/.@cmd}\pgfplots@loc@TMPa
+\global\let\pgfplots@empty@command@key=\pgfplots@loc@TMPa
+%
+\pgfkeys{/empty/.style={}}%
+\pgfkeysgetvalue{/empty/.@cmd}\pgfplots@loc@TMPa
+\global\let\pgfplots@empty@style@key=\pgfplots@loc@TMPa
+}
+
+% Only define if it is undefined. It may be possible that related libraries
+% habe been loaded before pgfplots.
+\pgfkeysifdefined{/pgfplots/@backgroundpath@hook/.@cmd}{\relax}{%
+ \pgfkeysdef{/pgfplots/@backgroundpath@hook}{}%
+}
+
+\def\pgfplots@cmdkey@alias#1=#2;{%
+ \pgfkeysgetvalue{/pgfplots/#2/.@cmd}\pgfplots@glob@TMPa
+ \pgfkeyslet{/pgfplots/#1/.@cmd}\pgfplots@glob@TMPa
+}%
+\pgfplots@cmdkey@alias xlabel style=x label style;
+\pgfplots@cmdkey@alias ylabel style=y label style;
+\pgfplots@cmdkey@alias zlabel style=z label style;
+\pgfplots@cmdkey@alias xticklabel style=x tick label style;
+\pgfplots@cmdkey@alias yticklabel style=y tick label style;
+\pgfplots@cmdkey@alias zticklabel style=z tick label style;
+\pgfplots@cmdkey@alias ticklabel style=tick label style;
+%\pgfplots@cmdkey@alias xtick scale label style=x tick scale label style;
+%\pgfplots@cmdkey@alias ytick scale label style=y tick scale label style;
+\pgfplots@cmdkey@alias xtick style=x tick style;
+\pgfplots@cmdkey@alias ytick style=y tick style;
+\pgfplots@cmdkey@alias ztick style=z tick style;
+
+
+% A backwards compatibility method which works as follows:
+% if any user specified arguments exist for the 'domain' or 'samples
+% at' or 'samples' keys, nothing is done.
+%
+% It these keys are empty, we switch to backwards compatibility mode
+% and acquire the key settings from tikz.
+%
+% This allows something like
+% \begin{tikzpicture}[samples=70,domain=1:5]
+% \begin{axis}
+% \addplot {x^2};
+% \end{axis}
+% \end{tikzpicture}
+%
+% POSTCONDITION:
+% - \pgfplots@plot@domain = value of '/pgfplots/domain',
+% - \pgfplots@plot@samples@at = the value of '/pgfplots/samples at',
+% - \pgfplots@plot@samples = value of '/pgfplots/samples',
+% the values after any backwards compatibility issues will be used.
+\def\pgfplots@validate@plot@domain@arguments{%
+ \pgfkeysgetvalue{/pgfplots/samples}\pgfplots@plot@samples
+ \ifx\pgfplots@plot@samples\pgfutil@empty
+ \pgfplots@gettikzinternal@keyval{samples}{tikz@plot@samples}{25}%
+ \let\pgfplots@plot@samples=\tikz@plot@samples
+ \def\pgfplots@loc@TMPa{0}% <- whether the tikz backw. compatibility shall resample
+ \else
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ %
+ \pgfplotscoordmath{default}{parse int}{\pgfplots@plot@samples}%
+ \let\pgfplots@plot@samples=\pgfmathresult
+ \pgfkeyslet{/pgfplots/samples}{\pgfplots@plot@samples}%
+ %
+ \pgfkeysgetvalue{/pgfplots/domain}\pgfplots@plot@domain
+ \pgfkeysgetvalue{/pgfplots/samples at}\pgfplots@plot@samples@at
+ \ifx\pgfplots@plot@domain\pgfutil@empty
+ % simply acquire /tikz/domain value:
+ \pgfplots@gettikzinternal@keyval{domain}{tikz@plot@domain}{-5:5}%
+ \pgfkeyslet{/pgfplots/domain}{\tikz@plot@domain}%
+ \let\pgfplots@plot@domain=\tikz@plot@domain
+ %
+ \ifx\pgfplots@plot@samples@at\pgfutil@empty
+ \if 1\pgfplots@loc@TMPa
+ % Resample! See above.
+ \tikzset{%
+ /pgf/fpu/output format=fixed,% seems as if /tikz/samples calls register arithmetics.
+ samples=\pgfplots@plot@samples,
+ /pgf/fpu/output format=float,%
+ }%
+ \fi
+ \pgfplots@gettikzinternal@keyval{samples at}{tikz@plot@samplesat}{-5,-4.6,...,5}%
+ %
+ % check if it was a domain. This simplifies LUA code:
+ \pgfplotsforeachtodomain{\tikz@plot@samplesat}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \pgfkeyslet{/pgfplots/samples at}{\tikz@plot@samplesat}%
+ \let\pgfplots@plot@samples@at=\tikz@plot@samplesat
+ \else
+ \let\pgfplots@plot@domain=\pgfplotsretval
+ \let\pgfplots@plot@samples=\pgfplotsretvalb
+ \pgfkeyslet{/pgfplots/samples}{\pgfplots@plot@samples}%
+ \fi
+ \else
+ % routines should use \pgfplots@plot@samples@at.
+ \fi
+ \fi
+ % do that such that any active ':' sign will be expanded - for
+ % french babel support.
+ \edef\pgfplots@plot@domain{\pgfplots@plot@domain}%
+ \pgfkeyslet{/pgfplots/domain}\pgfplots@plot@domain
+}%
+
+\def\pgfplots@set@at#1{\def\pgfplots@at{#1}}%
+
+
+% DEPRECATED
+\long\def\axispreset#1{%
+ \pgfplotsset{every axis/.append style={#1}}%
+}
+% DEPRECATED
+\long\def\legendpreset#1{%
+ \pgfplots@error{Sorry, legendpreset is now deprecated, along with the legend options text width and font. Legends are now TikZ-matrizes which provide better alignment and can be placed horizontally. See the manual for details.}%
+}
+
+% #1: axis (x, y, or z)
+% #2: display name of context information
+\def\pgfplots@warn@if@log@basis@unset#1#2{%
+ \pgfplots@if{pgfplots@#1islinear}{%
+ }{%
+ \pgfplots@warn@if@log@basis@unset@{#1}{#2}%
+ }%
+}%
+\def\pgfplots@warn@if@log@basis@unset@#1#2{%
+ \pgfkeysgetvalue{/pgfplots/log basis #1}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfplotswarning{log basis required}{#1}{#2}\pgfeov
+ \fi
+ \gdef\pgfplots@warn@if@log@basis@unset##1##2{}%
+}%
+
+
+% #1 axis (x or y)
+% #2 the label
+\long\def\pgfplots@show@label#1#2{%
+ \begingroup
+ % Prepare special alignment features here.
+ %
+ % The idea is to:
+ % 1. Declare a local COORDINATE SYSTEM to place labels,
+ % the 'ticklabel cs' for the current axis.
+ % It takes 1-2 arguments where the first is the coordinate on the
+ % ticklabel axis (between 0 and 1). The second is an optional shift orthogonal to
+ % the axis in direction of the outer normal. The minimum shift is
+ % the largest' ticklabels dimension.
+ %
+ % 2. Declare a local ANCHOR to align labels, the 'near ticklabel'
+ % anchor.
+ %
+ % Both things are not necessary - but they *can* be used.
+ \tikzdeclarecoordinatesystem{ticklabel}{\pgfplotspointticklabelcs[\pgfkeysvalueof{/pgfplots/#1label shift}]{#1}{##1}}%
+ \tikzdeclarecoordinatesystem{ticklabel*}{\pgfplotspointticklabelnoshiftcs{#1}{##1}}%
+ \pgfplotsdeclareborderanchorforticklabelaxis{#1}{near ticklabel}%
+ %
+ \pgfkeysgetvalue{/tikz/sloped/.@cmd}\pgfplots@loc@TMPa
+ \pgfkeyslet{/tikz/sloped/orig/.@cmd}\pgfplots@loc@TMPa
+ \pgfkeysdef{/tikz/sloped}{\pgfkeysalso{/tikz/sloped like #1 axis={##1}}}%
+ %
+ \node
+ [/pgfplots/every axis label,%
+ /pgfplots/every axis #1 label]
+ {#2};
+ \endgroup
+}
+
+
+\long\def\pgfplots@show@title#1{%
+ \node%
+ [/pgfplots/every axis title]
+ {#1};
+}
+
+
+% 'inner' means lines which pass through the origin (i.e. lines which
+% are not on the outer bounding box). In other words: this has an
+% effect if and only if 'axis #1 lines=center'
+%
+% #1: the 'a' axis on the oriented surface (the same as \pgfplotspointonorientedsurfaceA)
+% #2: the 'b' axis on the orentied surface (the same as \pgfplotspointonorientedsurfaceB)
+\def\pgfplots@drawaxis@innerlines@onorientedsurf#1#2#3{%
+ \if2\csname pgfplots@#1axislinesnum\endcsname
+ \pgfplotsgetlayerforstyle{%
+ every inner #1 axis line,
+ }%
+ \pgfplotsonlayer{\pgfplotsretval}{inner #1 axis line}%
+ %
+ \draw[/pgfplots/every inner #1 axis line,%
+ decorate,%
+ #1discont,%
+ decoration={%
+ % these keys appears to be checked via an \ifx on
+ % '0pt'. Make sure that this \ifx works by means of
+ % the expand twice construction:
+ pre length/.expand twice=\csname #1disstart\endcsname,%
+ post length/.expand twice=\csname #1disend\endcsname%
+ }]
+ \pgfextra
+ \csname pgfplotspointonorientedsurfaceabsetupforset#3\endcsname{\csname pgfplots@logical@ZERO@#3\endcsname}{2}%
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf v2%
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1min\endcsname}{\csname pgfplots@logical@ZERO@#2\endcsname}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1max\endcsname}{\csname pgfplots@logical@ZERO@#2\endcsname}}%
+ \endpgfextra
+ ;
+ %
+ \endpgfplotsonlayer
+ \fi
+}%
+
+% Draws outer axis lines, i.e. those which are on the bounding box.
+% This has an effect if and only if axis #1 lines!=center.
+%
+%
+% Ok, we don't mind whether edges with thick lines look ugly. We just
+% draw separate lines. This here is necessary if we want arrow heads.
+%
+% #1: the 'a' axis on the oriented surface (the same as \pgfplotspointonorientedsurfaceA)
+% #2: the 'b' axis on the oriented surface (the same as \pgfplotspointonorientedsurfaceB)
+\def\pgfplots@drawaxis@outerlines@separate@onorientedsurf#1#2{%
+ \if2\csname pgfplots@#1axislinesnum\endcsname
+ % centered axis lines handled elsewhere.
+ \else
+ \def\pgfplots@drawaxis@outerlines@separate@onorientedsurf@opts{%
+ /pgfplots/every outer #1 axis line,
+ #1discont,decoration={pre length/.expand twice=\csname #1disstart\endcsname, post length/.expand twice=\csname #1disend\endcsname}%
+ }%
+ \pgfplotsgetlayerforstyle{%
+ every outer #1 axis line,
+ }%
+ \pgfplotsonlayer{\pgfplotsretval}{outer #1 axis line}%
+ %
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{0}{%
+ \expandafter\draw\expandafter[\pgfplots@drawaxis@outerlines@separate@onorientedsurf@opts] decorate {
+ \pgfextra
+ % exchange roles of A <-> B axes:
+ \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}%
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf 0v%
+ \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2min\endcsname}%
+ \endpgfextra
+ };
+ }{}%
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{1}{%
+ \expandafter\draw\expandafter[\pgfplots@drawaxis@outerlines@separate@onorientedsurf@opts] decorate {
+ \pgfextra
+ % exchange roles of A <-> B axes:
+ \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}%
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf 1v%
+ \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2max\endcsname}%
+ \endpgfextra
+ };
+ }{}%
+ %
+ \endpgfplotsonlayer
+ \fi
+}%
+
+% This here is complicated: we try to create good edges and draw a
+% SINGLE path for the partial or complete rectangle
+%
+% -----
+% | |
+% | |
+% -----
+%
+% ATTENTION: this thing is used IF AND ONLY IF d=2 and the axis is
+% drawn as box.
+\def\pgfplots@drawaxis@outerlines@cycledpath{%
+ \pgfplots@loc@tmptrue
+ \ifpgfplots@hide@x
+ \ifpgfplots@hide@y
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+\ifpgfplots@loc@tmp
+ \pgfplotsgetlayerforstyle{%
+ every outer x axis line,
+ every outer y axis line,
+ }%
+ \pgfplotsonlayer{\pgfplotsretval}{boxed axis line}%
+ %
+ \draw[
+ /pgfplots/every outer x axis line, % using these outer styles is only useful in conjunction with 'separate axis lines=true'
+ /pgfplots/every outer y axis line]
+ \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}}\endpgfextra
+\ifpgfplots@hide@y
+ { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}\endpgfextra }
+\else
+ decorate [ydiscont,decoration={pre length=\ydisstart, post length=\ydisend}]
+ % { -- (\pgfplots@xmin, \pgfplots@ymax) }
+ { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}\endpgfextra }
+\fi
+\ifpgfplots@hide@x
+ %{ (\pgfplots@xmax, \pgfplots@ymax) }
+ { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}\endpgfextra }
+\else
+ decorate [xdiscont,decoration={pre length=\xdisstart, post length=\xdisend}]
+ %{ -- (\pgfplots@xmax, \pgfplots@ymax) }
+ { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}\endpgfextra }
+\fi
+\ifpgfplots@hide@y
+ %{ (\pgfplots@xmax, \pgfplots@ymin) }
+ { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}\endpgfextra }
+\else
+ decorate [ydiscont,decoration={pre length=\ydisend, post length=\ydisstart}]
+ %{ -- (\pgfplots@xmax, \pgfplots@ymin) }
+ { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}\endpgfextra }
+\fi
+\ifpgfplots@hide@x
+ %{ (\pgfplots@xmin, \pgfplots@ymin) }
+ { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}}\endpgfextra }
+\else
+ decorate [xdiscont,decoration={pre length=\xdisend, post length=\xdisstart}]
+ %{ -- (\pgfplots@xmin, \pgfplots@ymin) }
+ { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}}\endpgfextra }
+\fi
+ % make sure that we do not have any of the axis discontinuities
+ % here - they should not be closed.
+ \if0\pgfplots@xaxisdiscontnum
+ \if0\pgfplots@yaxisdiscontnum
+ -- cycle
+ \fi
+ \fi
+ ;%
+ %
+ \endpgfplotsonlayer
+\fi
+}%
+
+% Assigns the macros
+% #1disstart
+% #1disend
+% and the key /tikz/#1discont for use in the axis line routines.
+%
+% #1 : either x or y.
+\def\pgfplots@drawaxis@lines@preparediscont@for#1{%
+ \ifnum\csname pgfplots@#1axisdiscontnum\endcsname>0
+ \begingroup
+ % this group employs several temporary dimension registers
+ % and is therefor scoped:
+ \let\disstart=\pgf@ya
+ \let\disend=\pgf@yb
+ \disend=\csname pgfplots@#1max@reg\endcsname
+ \advance\disend by -\csname pgfplots@#1min@reg\endcsname
+ \disend=\csname pgfplots@#1@veclength\endcsname\disend
+ \ifcase\csname pgfplots@#1axisdiscontnum\endcsname\relax
+ % has already been checked above.
+ \or
+ \def\discontstyle{decoration={zigzag,segment length=12pt, amplitude=4pt}}%
+ \advance \disend by -16pt
+ \or
+ \def\discontstyle{decoration={ticks,segment length=4pt, amplitude=8pt}}%
+ \advance \disend by -8pt
+ \fi
+ \pgfplotscoordmath{#1}{datascaletrafo get params}%
+ % if #1max + shift < 0pt (shift is 0 without the scaling trafo)
+ \ifdim\csname pgfplots@#1max@reg\endcsname<-\pgfplotsretvalb pt
+ % swap start and end
+ \disstart=\disend
+ \disend=4pt
+ \else
+ \disstart=4pt
+ \fi
+ % carry local computations outside of group:
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\expandafter\noexpand\csname #1disstart\endcsname{\the\disstart}%
+ \noexpand\def\expandafter\noexpand\csname #1disend\endcsname{\the\disend}%
+ \noexpand\pgfkeysdef{/tikz/#1discont}{\noexpand\pgfkeysalso{\discontstyle}}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+ \else
+ \expandafter\def\csname #1disstart\endcsname{0pt}%
+ \expandafter\def\csname #1disend\endcsname{0pt}%
+ \pgfkeyslet{/tikz/#1discont}=\pgfutil@empty
+ \fi
+}%
+
+\def\pgfplots@rememberplotspec@for@label{\pgfplotsutil@ifnextchar[{\pgfplots@rememberplotspec@for@label@}{\pgfplots@rememberplotspec@for@label@[]}}%
+\def\pgfplots@rememberplotspec@for@label@[#1]#2{%
+ \t@pgfplots@tokc={#2}% this token register stuff allows '#' inside of '#2'
+ \expandafter\xdef\csname pgfplots@last@plot@style@#1\endcsname{\the\t@pgfplots@tokc}%
+ \global\pgfplots@has@label@informationtrue
+}%
+\def\pgfplots@rememberplotspec{\pgfplotsutil@ifnextchar[{\pgfplots@rememberplotspec@opt}{\pgfplots@rememberplotspec@opt[]}}%
+\def\pgfplots@rememberplotspec@opt[#1]#2{%
+ \pgfplots@rememberplotspec@for@label[#1]{#2}%
+ \pgfplotslistpushbackglobal{#2}\to\pgfplots@plotspeclist
+}
+
+\def\pgfplots@getautoplotspec into#1{%
+ \begingroup
+ \let#1=\pgfutil@empty
+ \pgfkeysgetvalue{/pgfplots/cycle multi list/@dim}\pgfplots@cycle@dim
+ %
+ \let\pgfplots@listindex=\pgfplots@numplots
+ \pgfkeysgetvalue{/pgfplots/cycle list shift}\pgfplots@listindex@shift
+ \ifx\pgfplots@listindex@shift\pgfutil@empty
+ \else
+ \c@pgf@counta=\pgfplots@listindex\relax
+ \advance\c@pgf@counta by\pgfplots@listindex@shift\relax
+ \ifnum\c@pgf@counta<0
+ \c@pgf@counta=-\c@pgf@counta
+ \fi
+ \edef\pgfplots@listindex{\the\c@pgf@counta}%
+ \fi
+ \ifnum\pgfplots@cycle@dim>0
+ \if L\pgfplots@cycle@multi@list@sequence
+ % use the 'cycle multi list' feature.
+ %
+ % it employs a scalar -> multiindex map like
+ % void fromScalar( size_t d, size_t scalar, size_t* Iout, const size_t* N )
+ % {
+ % size_t ret=scalar;
+ % for( int i = d-1; i>=0; --i ) {
+ % Iout[i] = ret % N[i];
+ % ret /= N[i];
+ % }
+ % }
+ % to get the different indices into the cycle lists.
+ %--------------------------------------------------
+ \c@pgf@counta=\pgfplots@cycle@dim\relax
+ \c@pgf@countb=\pgfplots@listindex\relax
+ \advance\c@pgf@counta by-1
+ \pgfplotsloop{%
+ \ifnum\c@pgf@counta<0
+ \pgfplotsloopcontinuefalse
+ \else
+ \pgfplotsloopcontinuetrue
+ \fi
+ }{%
+ \pgfkeysgetvalue{/pgfplots/cycle multi list/@N\the\c@pgf@counta}\pgfplots@cycle@N
+ % compute list index:
+ \pgfplotsmathmodint{\c@pgf@countb}{\pgfplots@cycle@N}%
+ \divide\c@pgf@countb by \pgfplots@cycle@N\relax
+ %
+ \expandafter\pgfplots@getautoplotspec@
+ \csname pgfp@cyclist@/pgfplots/cycle multi list/@list\the\c@pgf@counta @\endcsname
+ {\pgfplots@cycle@N}%
+ {\pgfmathresult}%
+ \t@pgfplots@toka=\expandafter{#1,}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretval}%
+ \edef#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \advance\c@pgf@counta by-1
+ }%
+ \else
+ \if M\pgfplots@cycle@multi@list@sequence
+ %
+ % take the i'th element of each sub-list where i
+ % =\pgfplots@listindex
+ \if A\pgfplots@cycle@multi@list@repeat
+ % 'cycle multiindex list'
+ %
+ % ensure that we respect the maxlen of the list:
+ \pgfplotsmathmodint{\pgfplots@listindex}{\pgfkeysvalueof{/pgfplots/cycle multi list/@maxlen}}%
+ \let\pgfplots@listindex=\pgfmathresult
+ \def\pgfplots@cycle@multi@list@cur##1{%
+ \ifnum\pgfplots@listindex<\pgfplots@cycle@N\relax
+ ##1%
+ \fi
+ }%
+ %
+ \else
+ % 'cycle multiindex* list':
+ \def\pgfplots@cycle@multi@list@cur##1{%
+ ##1%
+ }%
+ \fi
+ %
+ \c@pgf@counta=0
+ \pgfplotsloop{%
+ \ifnum\c@pgf@counta<\pgfplots@cycle@dim\relax
+ \pgfplotsloopcontinuetrue
+ \else
+ \pgfplotsloopcontinuefalse
+ \fi
+ }{%
+ \pgfkeysgetvalue{/pgfplots/cycle multi list/@N\the\c@pgf@counta}\pgfplots@cycle@N
+ \pgfplots@cycle@multi@list@cur{%
+ \expandafter\pgfplots@getautoplotspec@
+ \csname pgfp@cyclist@/pgfplots/cycle multi list/@list\the\c@pgf@counta @\endcsname
+ {\pgfplots@cycle@N}%
+ {\pgfplots@listindex}%
+ \t@pgfplots@toka=\expandafter{#1,}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretval}%
+ \edef#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ }%
+ \advance\c@pgf@counta by1
+ }%
+ \else
+ \pgfplots@error{Internal error: expected 'L' or 'M', not '\pgfplots@cycle@multi@list@sequence'}%
+ \fi
+ \fi
+ \else
+ % normal cycle list:
+ \pgfplotslistsize\autoplotspeclist\to\c@pgf@countd
+ \pgfplots@getautoplotspec@{\autoplotspeclist}{\c@pgf@countd}{\pgfplots@listindex}%
+ \let#1=\pgfplotsretval
+ \fi
+%\message{[plot \the\pgfplots@numplots]: Returning options list \meaning#1^^J}%
+ \pgfmath@smuggleone#1%
+ \endgroup
+}
+% #1: list name (macro!)
+% #2: list size (integer register or value)
+% #3: list element index
+%
+% defines \pgfplotsretval
+\def\pgfplots@getautoplotspec@#1#2#3{%
+ \ifnum#2=0
+ \let\pgfplotsretval=\pgfutil@empty
+ \else
+ \pgfplotsmathmodint{#3}{#2}%
+ \pgfplotslistselect\pgfmathresult\of#1\to\pgfplotsretval
+ \fi
+}
+
+
+\long\def\pgfplots@path#1;{%
+ \pgfplots@path@enqueue{#1;}%
+}
+
+% This thing here shall be used to replace any '\path' where \axispath
+% shall be used.
+\long\def\pgfplots@replacement@for@tikz@path#1;{%
+ \axispath\path#1;%
+}
+\def\pgfplots@replacement@for@scope{\pgfutil@ifnextchar[{\pgfplots@replacement@for@scope@}{\pgfplots@replacement@for@scope@[]}}%
+\long\def\pgfplots@replacement@for@scope@[#1]{%
+ \pgfplotsextra{\scope[#1]}%
+ \begingroup
+ % I need to apply anything which might be relevant for \addplot
+ % here.
+ % But I do NOT want \scope since this might already affect the low
+ % level output.
+ %
+ % This here works:
+ % 1. set them to activate plot handlers and parameters like
+ % samples and domain:
+ \tikzset{#1}%
+ %
+ % 2. we need to remember all these options inside of
+ % 'current plot style' -- otherwise, they would not appear
+ % inside of legend images and markers.
+ \pgfplotssurveyphaseaddoptionsbeforesurveybegins{#1}%
+}%
+\def\pgfplots@replacement@for@endscope{%
+ \endgroup
+ \pgfplotsextra{\endscope}%
+}%
+
+\def\pgfplots@replacement@for@onlayer#1{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplots@replacement@for@onlayer@{#1}%
+}
+\def\pgfplots@replacement@for@onlayer@#1{%
+ \pgfplotsextra{\pgfonlayer{#1}}%
+}%
+\def\pgfplots@replacement@for@endonlayer{\pgfplotsextra{\endpgfonlayer}}%
+
+{
+ % A block which handles active semicolons.
+ %
+ % ATTENTION: this block does only work if
+ % \pgfplots@addplotimpl.... changes are reflected here!
+ %
+ \catcode`\;=\active
+ \globaldefs=1
+ % 'AS' == 'active semicolon'
+ \def\pgfplots@path@AS#1;{\pgfplots@path@enqueue{#1;}}%
+ \long\def\pgfplots@replacement@for@tikz@path@AS#1;{%
+ \axispath\path#1;%
+ }%
+ \pgfplots@appendto@activesemicolon@switcher{%
+ \let\pgfplots@path=\pgfplots@path@AS
+ \let\pgfplots@replacement@for@tikz@path=\pgfplots@replacement@for@tikz@path@AS
+ }%
+}
+
+
+% Will be available as \closedcycle command inside of an axis.
+%
+% It closes the current plot by drawing lines to the last "zero
+% level".
+%
+% That means the current plot is connected orthogonally with the
+% x-axis, allowing fill commands.
+%
+% For stacked plots, \closedcycle is special (it connects with the
+% previous \addplot command).
+%
+% Example:
+% \addplot coordinates {(3,0.5) (4,2) (5,1)} \closedcycle;
+\def\pgfplots@path@closed@cycle{%
+ \ifpgfplots@stackedmode
+ \pgfplots@stacked@path@closed@cycle
+ \else
+ \pgfplots@path@closed@cycle@std
+ \fi
+}
+\def\pgfplots@path@closed@cycle@std{%
+ |- (perpendicular cs:
+ vertical line through={(current plot begin)},
+ horizontal line through={(\pgfplots@ZERO@x,\pgfplots@ZERO@y)})
+ -- cycle
+}%
+
+% Remembers the plotting command #2 and '#3=plot coordinates {...} ...';
+% for later postprocessing of the coordinates.
+%
+% #1: pre-commands which should be executed before issueing the plotting
+% command #2 #3.
+% #2: the drawing-command.
+% - If #2 is NOT '\pgfutil@empty', we expect #3 to contain only
+% EXPANDABLE DATA.
+% That's important for postponed floating point arithmetics in #3.
+% - If #2='\pgfutil@empty', we don't make any assumption about #3
+% and process it as-is.
+%
+% #3: the plot data. If #2 is empty, this can be any command.
+%
+% #4: commands which should be executed after '#2 #3'.
+%
+\long\def\pgfplots@path@enqueue@coords#1#2#3#4{%
+ \begingroup
+ \def\pgfplots@loc@TMPa{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@stored@current@precmd{#1}%
+ \def\pgfplots@stored@current@cmd{#2}%
+ \def\pgfplots@stored@current@data{#3}%
+ \def\pgfplots@stored@current@postcmd{#4}%
+ \ifx\pgfplots@stored@current@precmd\pgfutil@empty
+ \else
+ \pgfplots@wrong@plotlist@format@error
+ \fi
+ \ifx\pgfplots@stored@current@postcmd\pgfutil@empty
+ \else
+ \pgfplots@wrong@plotlist@format@error
+ \fi
+ \pgfplotslistpushbackglobal{#1}{#2}{#3}{#4}\to\pgfplots@stored@plotlist
+ \else
+ \pgfkeysgetvalue{/pgfplots/execute at begin plot visualization}\pgfplots@loc@TMPa
+ \pgfkeysgetvalue{/pgfplots/execute at end plot visualization}\pgfplots@loc@TMPb
+ \t@pgfplots@toka={#1}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPb}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfkeyssetvalue{/pgfplots/execute at begin plot visualization}{\the\t@pgfplots@tokb}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/execute at end plot visualization}{\the\t@pgfplots@tokc}%
+ \the\t@pgfplots@toka
+ }%
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplots@loc@TMPa}{#2}{#3}{#4}\to\pgfplots@stored@plotlist
+ \fi
+ \endgroup
+}
+\def\pgfplots@wrong@plotlist@format@error{%
+ \pgfplots@error{Internal logic error: someone used \string \pgfplots@path@enqueue@coords\space in an unexpected way: if the second argument is empty, ONLY the third argument should be non-empty.^^J I found: pre command (1st arg): \meaning\pgfplots@stored@current@precmd;^^J command (2nd arg): \meaning\pgfplots@stored@current@cmd;^^J data (3rd arg): \meaning\pgfplots@stored@current@data^^J; post cmd (4th arg): \meaning\pgfplots@stored@current@postcmd^^J}%
+}%
+
+% this was formerly slightly different than
+% \pgfplots@path@enqueue@coords, but it is now the same.
+\let\pgfplots@addplot@enqueue@coords=\pgfplots@path@enqueue@coords
+
+
+% Remembers the plotting command #1.
+\long\def\pgfplots@path@enqueue#1{%
+ \pgfplots@path@enqueue@coords{}{}{#1}{}%
+}
+% Use
+%\begin{axis}
+% \pgfplotsextra{
+% ... basic level commands or whatever...
+% }
+%\end{axis}
+% to process the special commands by pgfplots.
+% This is the same treatment as for TikZ \path commands:
+% the commands will be processed as soon as the axis is finished- not
+% before.
+%
+% In contrast to \path, \pgfplotsextra can contain any command(s).
+%
+% Syntax: either
+% \pgfplotsextra{<argument>}
+% or
+% \pgfplotsextra <argument> \endpgfplotsextra
+\def\pgfplotsextra{%
+ \pgfutil@ifnextchar\bgroup{\pgfplots@path@enqueue}{\pgfplotsextra@}%
+}%
+\long\def\pgfplotsextra@#1\endpgfplotsextra{\pgfplots@path@enqueue{#1}}%
+
+
+% Assigns a legend.
+% Syntax:
+% \legend{entry 1\\entry2\\entry3}
+\def\pgfplots@command@legend{
+ \pgfutil@ifnextchar[{%
+ \pgfplots@error{Sorry, legend options are now deprecated. Legends are now TikZ-matrizes which provide better alignment and can be placed horizontally. See the manual for details.}%
+ \pgfplots@command@legend@impl
+ }{%
+ \pgfplots@command@legend@impl
+ }%
+}
+
+\def\pgfplots@command@legend@impl#1{%
+ \pgfplots@assign@list\pgfplots@loc@TMPc{#1}%
+ \global\let\pgfplots@legend=\pgfplots@loc@TMPc
+}
+
+\def\pgfplots@reverselegend{%
+ % Reverse \pgfplots@plotspeclist
+ \begingroup
+ \pgfplotslistnewempty\pgfplots@plotspeclist@reversed
+ \pgfplotslistforeachungrouped\pgfplots@plotspeclist\as\pgfplots@plotspeclisttmp{%
+ \expandafter\pgfplotslistpushfront\pgfplots@plotspeclisttmp\to\pgfplots@plotspeclist@reversed
+ }%
+ \global\let\pgfplots@plotspeclist=\pgfplots@plotspeclist@reversed
+ \let\pgfplots@legend@reversed=\relax
+ %
+ % Reverse \pgfplots@legend
+ \pgfplotslistnewempty\pgfplots@legend@reversed
+ \pgfplotslistforeachungrouped\pgfplots@legend\as\pgfplots@legendtmp{%
+ \expandafter\pgfplotslistpushfront\pgfplots@legendtmp\to\pgfplots@legend@reversed
+ }%
+ \global\let\pgfplots@legend=\pgfplots@legend@reversed
+ \endgroup
+}
+
+\def\pgfplots@transposelegend{%
+ \ifnum\pgfplots@legend@columns>1
+ \begingroup
+ \pgfplots@transposelegend@
+ \let\pgfplots@legend@columns=\c@pgfplots@row@end
+ \pgfmath@smuggleone\pgfplots@legend@columns
+ \endgroup
+ \fi
+}
+\def\pgfplots@transposelegend@{%
+ \let\c@pgfplots@row=\c@pgf@countb
+ \let\c@pgfplots@col=\c@pgf@countc
+ \let\c@pgfplots@no=\c@pgf@countd
+ \c@pgfplots@row=0
+ \c@pgfplots@col=0
+ \c@pgfplots@no=0
+ \pgfplotslistforeachungrouped\pgfplots@legend\as\entry{%
+ \expandafter\let\csname m@pgfplots@\the\c@pgfplots@row,\the\c@pgfplots@col\endcsname=\entry
+ \advance\c@pgfplots@col by1
+ \ifnum\pgfplots@legend@columns=\c@pgfplots@col\relax
+ \c@pgfplots@col=0
+ \advance\c@pgfplots@row by1
+ \fi
+ \advance\c@pgfplots@no by1
+ }%
+ \ifnum\c@pgfplots@col=0
+ \else
+ \advance\c@pgfplots@row by1
+ \fi
+ \edef\c@pgfplots@row@end{\the\c@pgfplots@row}%
+ \edef\c@pgfplots@no@leg{\the\c@pgfplots@no}%
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \c@pgfplots@row=0
+ \c@pgfplots@col=0
+ \c@pgfplots@no=0
+ \pgfplotslistforeachungrouped\pgfplots@plotspeclist\as\entry{%
+ \expandafter\let\csname m@pgfplots@img@\the\c@pgfplots@row,\the\c@pgfplots@col\endcsname=\entry
+ \advance\c@pgfplots@col by1
+ \ifnum\pgfplots@legend@columns=\c@pgfplots@col\relax
+ \c@pgfplots@col=0
+ \advance\c@pgfplots@row by1
+ \fi
+ \advance\c@pgfplots@no by1
+ }%
+ \ifnum\c@pgfplots@col=0
+ \else
+ \advance\c@pgfplots@row by1
+ \fi
+ \ifnum\c@pgfplots@row<\c@pgfplots@row@end
+ \edef\c@pgfplots@row@end{\the\c@pgfplots@row}%
+ \fi
+ \ifnum\c@pgfplots@no<\c@pgfplots@no@leg
+ \edef\c@pgfplots@no@leg{\the\c@pgfplots@no}%
+ \fi
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \c@pgfplots@col=0
+ \global\pgfplotslistnewempty\pgfplots@legend%
+ \global\pgfplotslistnewempty\pgfplots@plotspeclist%
+ \pgfplotsloop{%
+ \ifnum\pgfplots@legend@columns=\c@pgfplots@col
+ \pgfplotsloopcontinuefalse
+ \else
+ \pgfplotsloopcontinuetrue
+ \fi
+ }{%
+ \c@pgfplots@row=0
+ \pgfplotsloop{%
+ \ifnum\c@pgfplots@row@end=\c@pgfplots@row
+ \pgfplotsloopcontinuefalse
+ \else
+ \pgfplotsloopcontinuetrue
+ \fi
+ }{%
+ \pgfutil@ifundefined{m@pgfplots@\the\c@pgfplots@row,\the\c@pgfplots@col}{%
+ }{%
+ \pgfutil@ifundefined{m@pgfplots@img@\the\c@pgfplots@row,\the\c@pgfplots@col}{%
+ }{%
+ \expandafter\let\expandafter\pgfplots@legendtmp\csname m@pgfplots@\the\c@pgfplots@row,\the\c@pgfplots@col\endcsname
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplots@legendtmp}\to\pgfplots@legend%
+ %
+ \expandafter\let\expandafter\pgfplots@legendtmp\csname m@pgfplots@img@\the\c@pgfplots@row,\the\c@pgfplots@col\endcsname
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplots@legendtmp}\to\pgfplots@plotspeclist%
+ }%
+ }%
+ \advance\c@pgfplots@row by1
+ }%
+ \advance\c@pgfplots@col by1
+ }%
+}%
+
+
+\def\pgfplots@addlegendentryexpanded{%
+ \pgfutil@ifnextchar[{%
+ \pgfplots@addlegendentryexpanded@opts
+ }{%
+ \pgfplots@addlegendentryexpanded@opts[]%
+ }%
+}
+\long\def\pgfplots@addlegendentryexpanded@opts[#1]#2{%
+ \begingroup
+ \let\protect=\noexpand
+ \long\edef\pgfplots@loc@TMPa{#2}%
+ \def\pgfplots@loc@TMPb{\pgfplots@addlegendentry@opts[#1]}%
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}%
+ \endgroup
+}%
+
+\def\pgfplots@addlegendimage{\pgfutil@ifnextchar[{\pgfplots@addlegendimage@opt}{\pgfplots@addlegendimage@opt[]}}%
+\def\pgfplots@addlegendimage@opt[#1]#2{%
+ \pgfplots@rememberplotspec[#1]{/pgfplots/every axis plot,#2,/pgfplots/.cd,/pgfplots/every axis plot post}%
+}%
+
+% This implements \addlegendentry
+\def\pgfplots@addlegendentry{%
+ \pgfutil@ifnextchar[{%
+ \pgfplots@addlegendentry@opts
+ }{%
+ \pgfplots@addlegendentry@opts[]%
+ }%
+}
+\long\def\pgfplots@addlegendentry@opts[#1]#2{%
+ \pgfplotslistpushbackglobal[#1]#2\to\pgfplots@legend
+}
+
+\def\pgfplots@pop@next@legend{{%
+ \globaldefs=1
+ \pgfplotslistcheckempty\pgfplots@plotspeclist
+ \ifpgfplotslistempty
+ \let\pgfplots@curplotlist=\relax
+ \else
+ \pgfplotslistpopfront\pgfplots@plotspeclist\to\pgfplots@curplotlist
+ \pgfplotslistcheckempty\pgfplots@legend
+ \ifpgfplotslistempty
+ \let\pgfplots@curlegend=\pgfutil@empty
+ \else
+ \pgfplotslistpopfront\pgfplots@legend\to\pgfplots@curlegend
+ \fi
+ \fi
+ %
+}}
+
+\def\pgfplots@try@mirror@plot@handler{%
+ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler
+ % this method assigns '\tikz@plot@handler'.
+ % That's ok and does not introduce incompatibilities.
+ \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerconstantlineto
+ \let\tikz@plot@handler=\pgfplothandlerconstantlinetomarkright
+ \else
+ \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerconstantlinetomarkright
+ \let\tikz@plot@handler=\pgfplothandlerconstantlineto
+ \fi
+ \fi
+}
+
+% #1: DEPRECATED. Unused.
+% #2: plot style
+\long\def\pgfplots@show@small@legendplots#1#2{%
+ \begingroup
+ \pgfplots@define@currentplotstyle@as{#1,#2}%
+ \pgfplots@restore@state@before@legend@style
+ \scope[/tikz/current plot style,/pgfplots/every legend image post]% this scoping construction allows plot styles to change 'legend image code'.
+ \pgfkeysvalueof{/pgfplots/legend image code/.@cmd}\pgfeov
+ \endscope
+ \endgroup
+ %\pgfkeysvalueof{/pgfplots/legend image code/.@cmd}{/pgfplots/.cd,#1,#2}\pgfeov
+}
+
+% A work-around method to undo the 'every axis legend' style.
+%
+% It is called within legend's cell pictures in order to undo global
+% settings like stroke colors or the-like.
+\def\pgfplots@restore@state@before@legend@style{%
+ \pgfsetfillcolor{black}%
+ % disable the transformations of pgfplots. This is only used by
+ % pgfplots-specific plot handlers which work only if used inside
+ % of an axis... disable it.
+ \def\pgfplotsaxisvisphasetransformcoordinate##1##2##3{}%
+}%
+
+\def\pgfplots@split@opts{%
+ \pgfutil@ifnextchar[{%
+ \pgfplots@split@opts@opts
+ }{%
+ \pgfplots@split@opts@opts[]%
+ }%
+}
+\long\def\pgfplots@split@opts@opts[#1]#2\pgfplots@result@to#3#4{%
+ \long\def#3{#2}%
+ \long\def#4{#1}%
+}
+
+% Typesets a legend node.
+%
+% It will either typeset a previously computed legend (which needs to be
+% stored in the macro \pgfplots@already@computed@legend@node)
+%
+% or it creates a legend, stores the commands into the macro named
+% above and typesets it.
+\def\pgfplots@createlegend{%
+ \pgfkeysgetvalue{/pgfplots/legend to name}\pgfplots@createlegend@toname
+ \ifx\pgfplots@already@computed@legend@node\pgfutil@empty
+ \pgfplotslistcheckempty\pgfplots@legend
+ \ifpgfplotslistempty
+ % No legend commands appeared in the document. So,
+ % consider the key:
+ \pgfkeysgetvalue{/pgfplots/legend entries}\pgfplots@legend
+ \expandafter\pgfplots@assign@list\expandafter\pgfplots@legend\expandafter{\pgfplots@legend}%
+ \pgfplotslistcheckempty\pgfplots@legend
+ \fi
+%\message{Legend: \meaning\pgfplots@legend^^J}%
+ \ifpgfplotslistempty
+ \else
+ \ifpgfplots@reverse@legend
+ \pgfplots@reverselegend
+ \fi
+ \ifpgfplots@transpose@legend
+ \pgfplots@transposelegend
+ \fi
+ %
+ %
+ \begingroup
+ \ifx\pgfplots@createlegend@toname\pgfutil@empty
+ % ok, draw legend.
+ \def\pgfplots@createlegend@prepareimage@to##1{%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@curplotlist}%
+ \edef##1{\noexpand\pgfplots@show@small@legendplots{}{\the\t@pgfplots@tokc}}%
+ }%
+ \else
+ % export legend instead of drawing it.
+ \def\pgfplots@createlegend@prepareimage@to##1{%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@curplotlist}%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplots@export@legend@image@to@macro{\the\t@pgfplots@tokc}{}}%
+ \pgfplots@loc@TMPa
+ \let##1=\pgfplotsretval
+ }%
+ \fi
+ % assemble a
+ % \matrix {
+ % small plot & legend1\\
+ % small plot & legend2\\
+ % ...
+ % };
+ % command [and using the 'legend columns' option]
+ %
+ % \t@pgfplots@toka={
+ % small plot & legend1\\
+ % small plot & legend2\\
+ % ...
+ % }
+ % ( I have allocated the token registers in my
+ % liststructure.sty)
+ %
+ % \global\def\pgfplots@glob@TMPa{
+ % \matrix {
+ % \TOKL@TA
+ % };
+ % }
+ % -> finally, \pgfplots@glob@TMPa will contain the complete command.
+ \t@pgfplots@toka={}%
+ \let\curcolumnNum=\c@pgf@counta
+ \let\maxcolumnCount=\c@pgf@countb
+ \let\legendplotpos=\c@pgf@countc
+ \legendplotpos\expandafter=\pgfplots@legend@plot@pos
+ \curcolumnNum=0
+ \maxcolumnCount=\pgfplots@legend@columns\relax
+ %
+ \pgfplotsloop{%
+ \pgfplots@pop@next@legend
+ \ifpgfplotslistempty
+ \pgfplotsloopcontinuefalse
+ \else
+ \pgfplotsloopcontinuetrue
+ \fi
+ }{%
+ \ifx\pgfplots@curlegend\pgfutil@empty
+ \else
+ \advance\curcolumnNum by1
+ \begingroup
+ % \pgfplots@curlegend@opts are any options for
+ % this single legend text, provided as
+ % \addlegendentry[<options>]{<text>}
+ % or
+ % legend entries={...,[<options>]<text>, ....}
+ \expandafter\pgfplots@split@opts\pgfplots@curlegend\pgfplots@result@to{\pgfplots@curlegend}{\pgfplots@curlegend@opts}%
+ \pgfplots@createlegend@prepareimage@to{\pgfplotsretval}%
+ %
+ \t@pgfplots@tokb=\expandafter{\pgfplots@curlegend@opts}%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@curlegend}%
+ %
+ % prepare the \node[<options>] {<text>} into \t@pgfplots@tokc
+ \edef\pgfplots@loc@TMPa{\noexpand\node[\the\t@pgfplots@tokb]{\the\t@pgfplots@tokc};}%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}%
+ %
+ % and the legend image into \t@pgfplots@tokb:
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretval}%
+ % ok. Now, the
+ % - 'b' register contains the IMAGE and
+ % - 'c' register contains the TEXT
+ \ifcase\legendplotpos
+ % legend plot pos=left
+ \edef\pgfplots@matrixentry{%
+ \the\t@pgfplots@tokb
+ \noexpand\pgfmatrixnextcell
+ \the\t@pgfplots@tokc%
+ }%
+ \or
+ % legend plot pos=right
+ \edef\pgfplots@matrixentry{%
+ \the\t@pgfplots@tokc%
+ \noexpand\pgfmatrixnextcell
+ \the\t@pgfplots@tokb
+ }%
+ \or
+ % legend plot pos=none
+ \edef\pgfplots@matrixentry{%
+ \the\t@pgfplots@tokc%
+ }%
+ \fi
+ % copy it back to 'b' register:
+ \t@pgfplots@tokb=\expandafter{\pgfplots@matrixentry}%
+ %
+ \ifnum\curcolumnNum=\maxcolumnCount
+ \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb\\}%
+ \else
+ \pgfplotslistcheckempty\pgfplots@legend
+ \ifpgfplotslistempty
+ \else
+ \pgfplotslistcheckempty\pgfplots@plotspeclist
+ \fi
+ \ifpgfplotslistempty
+ % Ok, either the legend list is empty or
+ % there are no more plot specifications.
+ %
+ % Finalize matrix:
+ \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb\\}%
+ \else
+ \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb\pgfmatrixnextcell}%
+ \fi
+ \fi
+ \xdef\pgfplots@glob@TMPa{%
+ \the\t@pgfplots@toka
+ \the\t@pgfplots@tokb
+ }%
+ \endgroup
+ \ifnum\curcolumnNum=\maxcolumnCount
+ \curcolumnNum=0
+ \fi
+ \expandafter\t@pgfplots@toka\expandafter{\pgfplots@glob@TMPa}%
+ \fi
+ }%
+ \t@pgfplots@tokb={\matrix[/pgfplots/every axis legend]}%
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand\plotnum{0}%
+ \noexpand\def\noexpand\plotnumofactualtype{0}%
+ \the\t@pgfplots@tokb {%
+ \the\t@pgfplots@toka
+ };%
+ }%
+ \endgroup
+ \let\pgfplots@already@computed@legend@node=\pgfplots@glob@TMPa
+ \fi
+ \fi
+ \ifx\pgfplots@createlegend@toname\pgfutil@empty
+ % DRAW:
+ \pgfplotsgetlayerforstyle{every axis legend}%
+ \pgfplotsonlayer\pgfplotsretval{legend style}%
+ \pgfplots@already@computed@legend@node
+ \endpgfplotsonlayer
+ \else
+ % apply the 'legend to name' feature:
+ %
+ % store legend contents:
+ %
+ \t@pgfplots@toka=\expandafter{\pgfplots@already@computed@legend@node}%
+ \pgfkeysgetvalue{/pgfplots/every axis legend/.@cmd}\pgfplots@loc@TMPa
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa\pgfeov}%
+ %
+ \pgfplots@assemble@ref@picture
+ {\pgfplots@legend@to@name}
+ {\tikz[/pgfplots/every legend to name picture/.try]{\pgfplots@legend@to@name}}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotsretval}%
+ %
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/every legend image post/.@cmd}\pgfplots@loc@TMPa
+ % steal \toks0 temporarily. Within this group, it won't be
+ % used by any LaTeX code:
+ \toks0=\expandafter{\pgfplots@loc@TMPa\pgfeov}%
+ %
+ \expandafter\xdef\csname pgfplots@legend@to@name@\pgfplots@createlegend@toname\endcsname{%
+ \noexpand\begingroup
+ \noexpand\def\noexpand\pgfplots@legend@to@name{%
+ \noexpand\pgfkeysdef{/pgfplots/every axis legend}{\the\t@pgfplots@tokb}%
+ \noexpand\pgfkeysdef{/pgfplots/every legend image post}{\the\toks0 }%
+ \noexpand\def\noexpand\numplots{\numplots}%
+ \the\t@pgfplots@toka
+ }%
+ \the\t@pgfplots@tokc
+ \noexpand\endgroup
+ }%
+ \endgroup
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfplots@legend@to@name@\pgfplots@createlegend@toname\endcsname}%
+ \pgfplots@auxwrite{%
+ \noexpand\expandafter
+ \noexpand\gdef
+ \noexpand\csname pgfplots@legend@to@name@\pgfplots@createlegend@toname\noexpand\endcsname%
+ {\the\t@pgfplots@toka}%
+ }%
+ \begingroup
+ %
+ % make sure \ref{<legendname>} works:
+ \pgfplots@label{\pgfplots@createlegend@toname}{pgfplots@legend@to@name@}%
+ \endgroup
+ \fi
+}
+
+\pgfutil@IfUndefined{AtBeginDocument}{}{%
+ \AtBeginDocument{%
+ \let\pgfplots@original@LaTeX@label@loadtime=\label
+ }%
+}
+
+% Defines a new \label{#1}. When \ref{#1} is used, the code
+% \csname #3#2\endcsname
+% will be invoked.
+% \pgfplots@label[<optional prefix>]{<label name>}{<command prefix>}
+% invokes
+% \label<optional prefix>{<label name>}
+\def\pgfplots@label{\pgfutil@ifnextchar[{\pgfplots@label@@}{\pgfplots@label@@[]}}%
+\def\pgfplots@label@@[#1]#2#3{%
+ \begingroup
+ \edef\@currentlabel{%
+ \string\expandafter
+ \string\protect
+ \string\csname\space #3#2\string\endcsname
+ }%
+ \pgfutil@IfUndefined{hyper@makecurrent}{}{%
+ \hyper@makecurrent{pgfplotslink}%
+ \hyper@anchorstart{\@currentHref}{}\hyper@anchorend
+ \pgfplotsutil@advancestringcounter@global\c@pgfplots@label
+ }%
+ %
+ \pgfplots@label@configure@package@workarounds
+ %
+ \pgfutil@IfUndefined{label}{%
+ }{%
+ \def\pgfplots@loc@TMPa{\label #1}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{#2}% the \expandafter is a convenience method; the name should be expandable anyway
+ }%
+ \endgroup
+}%
+\gdef\c@pgfplots@label{0}%
+\def\theHpgfplotslink{\theHsection.\c@pgfplots@label}%
+
+\def\pgfplots@label@configure@package@workarounds{%
+ % this is a work-around to support the memoir class (it overwrites
+ % \label in sub
+ \let\sf@@memsub@label=\pgfplots@original@LaTeX@label@loadtime
+ %
+ \ifx\label\mcaption@label
+ % this is a work-around to support the mcaption class: it
+ % simply remembers the label name and invokes \label later-on.
+ % This appears to be wrong in this context: I want to generate
+ % a pgfplots label.
+ %
+ % If someone writes \label{fig:one}, that label will be
+ % redeclared in the margin - which appears to be correct. And
+ % that will still work.
+ %
+ % This here will activate pgfplots' labels:
+ \let\label=\pgfplots@original@LaTeX@label@loadtime
+ \fi
+}
+
+% this is deprecated. Use \ref{#1} instead.
+\def\pgfplotslegendfromname#1{%
+ \pgfplots@texdist@protect\pgfplotslegendfromname@{#1}%
+}%
+\def\pgfplotslegendfromname@#1{%
+ \pgfutil@IfUndefined{pgfplots@legend@to@name@#1}{%
+ \pgfutil@IfUndefined{ref}{%
+ \pgfplotswarning{no such legend to name}{#1}\pgfeov
+ \string\pgfplotslegendfromname{#1}: ??%
+ }{%
+ \ref{\string\pgfplotslegendfromname{#1}}%
+ }%
+ }{%
+ \csname pgfplots@legend@to@name@#1\endcsname
+ }%
+}%
+% this is deprecated. Use \ref{#1} instead.
+\def\pgfplotscolorbarfromname#1{%
+ \pgfplots@texdist@protect\pgfplotscolorbarfromname@{#1}%
+}%
+\def\pgfplotscolorbarfromname@#1{%
+ \pgfutil@IfUndefined{pgfplots@colorbar@to@name@#1}{%
+ \pgfutil@IfUndefined{ref}{%
+ \pgfplotswarning{no such colorbar to name}{#1}\pgfeov
+ \string\pgfplotscolorbarfromname{#1}: ??%
+ }{%
+ \ref{\string\pgfplotscolorbarfromname{#1}}%
+ }%
+ }{%
+ \csname pgfplots@colorbar@to@name@#1\endcsname
+ }%
+}%
+
+\def\pgfplotsplotfromname#1{%
+ \pgfplots@texdist@protect\pgfplotsplotfromname@{#1}%
+}%
+\def\pgfplotsplotfromname@#1{%
+ \pgfutil@IfUndefined{pgfplots@show@ref@#1}{%
+ \pgfutil@IfUndefined{ref}{%
+ \pgfplotswarning{no such addplot label}{#1}\pgfeov
+ \string\pgfplotsplotfromname{#1}: ??%
+ }{%
+ \ref{\string\pgfplotsplotfromname{#1}}%
+ }%
+ }{%
+ \csname pgfplots@show@ref@#1\endcsname
+ }%
+}%
+
+\def\pgfplots@ifintikzpicture#1#2{%
+ \ifpgfpicture #1\else #2\fi
+}%
+
+% DEPRECATED.
+\def\skipsuffixzero#1.#2|{
+ {%
+ \def\pgfplots@loc@TMPa{#2}%
+ \def\pgfplots@loc@TMPb{0}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \global\def\pgfmathresult{#1}%
+ \else
+ \global\def\pgfmathresult{#1.#2}%
+ \fi
+ }%
+}
+
+\def\pgfmathlogtologten#1{%
+ \pgfmathparse{#1}%
+ \expandafter\pgfmathlogtologten@\expandafter{\pgfmathresult}%
+}
+
+% Simply divides #1 by log(10).
+% ATTENTION: in order to implement per-axis log basis, this will be
+% OVERWRITTEN in pgfplotsticks.code.tex !
+\def\pgfmathlogtologten@#1{%
+ \pgfmathmultiply@{#1}\reciproclogten%
+}%
+
+% DEPRECATED.
+\def\logtologtentomacro#1#2{%
+ \pgfmathlogtologten@{#1}%
+ \expandafter\skipsuffixzero\pgfmathresult|%
+ \let#2=\pgfmathresult
+}
+
+% DEPRECATED.
+\def\logtologten#1{%
+ \pgfmathlogtologten@{#1}%
+ \expandafter\skipsuffixzero\pgfmathresult|%
+ \pgfmathresult
+}
+
+\pgfkeysdef{/pgfplots/@enlargelimits/true}{%
+ \def\bool@pgfplots@loc@enlargelimits@min{1}%
+ \def\bool@pgfplots@loc@enlargelimits@max{1}%
+}%
+\pgfkeysdef{/pgfplots/@enlargelimits/false}{%
+ \def\bool@pgfplots@loc@enlargelimits@min{0}%
+ \def\bool@pgfplots@loc@enlargelimits@max{0}%
+}%
+\pgfkeysdef{/pgfplots/@enlargelimits/upper}{%
+ \def\bool@pgfplots@loc@enlargelimits@min{0}%
+ \def\bool@pgfplots@loc@enlargelimits@max{1}%
+}%
+\pgfkeysdef{/pgfplots/@enlargelimits/lower}{%
+ \def\bool@pgfplots@loc@enlargelimits@min{1}%
+ \def\bool@pgfplots@loc@enlargelimits@max{0}%
+}%
+\pgfkeysdef{/pgfplots/@enlargelimits/auto}{%
+ \def\bool@pgfplots@loc@enlargelimits@min{0}%
+ \def\bool@pgfplots@loc@enlargelimits@max{0}%
+ \def\pgfplots@loc@TMPa{0}%
+ \ifpgfplots@threedim
+ \if\pgfplots@enlargelimits@curaxis z%
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ \else
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ \if1\pgfplots@loc@TMPa
+ \pgfplots@if{pgfplots@autocompute@\pgfplots@enlargelimits@curaxis min}{%
+ \def\bool@pgfplots@loc@enlargelimits@min{1}%
+ }{}%
+ \pgfplots@if{pgfplots@autocompute@\pgfplots@enlargelimits@curaxis max}{%
+ \def\bool@pgfplots@loc@enlargelimits@max{1}%
+ }{}%
+ \fi
+}%
+
+\def\pgfplots@enlargelimits@rel@unitserror#1{%
+ \pgfplots@error{enlarge limits only supports values with units for 'abs=#1' and/or 'abs value=#1'. Ignoring unit}%
+}%
+\pgfkeysdef{/pgfplots/@enlargelimits/value}{%
+ \pgfmathparse{#1}%
+ \ifpgfmathunitsdeclared
+ \pgfplots@enlargelimits@rel@unitserror{#1}%
+ \fi
+ \let\pgfplots@enlargelimits@relthresh=\pgfmathresult
+ \let\pgfplots@enlargelimits@absthresh=\pgfutil@empty
+}%
+\pgfkeysdef{/pgfplots/@enlargelimits/rel}{\pgfkeysalso{true,value={#1}}}%
+\pgfkeysdef{/pgfplots/@enlargelimits/abs value}{%
+ \begingroup
+ \ifpgfplots@usefpu
+ \pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
+ \fi
+ \pgfmathparse{#1}%
+ \xdef\pgfplots@glob@TMPa{%
+ \ifpgfmathunitsdeclared
+ \noexpand\pgfmathunitsdeclaredtrue
+ \else
+ \noexpand\pgfmathunitsdeclaredfalse
+ \fi
+ \noexpand\def\noexpand\pgfmathresult{\pgfmathresult}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+ \ifpgfmathunitsdeclared
+ \edef\pgfplots@enlargelimits@absdimension{\pgfmathresult pt}%
+ \let\pgfplots@enlargelimits@absthresh=\pgfutil@empty
+ \else
+ \let\pgfplots@enlargelimits@absdimension=\pgfutil@empty
+ \csname pgfplotstransformdirection\pgfplots@enlargelimits@curaxis\endcsname{\pgfmathresult}%
+ \let\pgfplots@enlargelimits@absthresh=\pgfmathresult
+ \fi
+ \let\pgfplots@enlargelimits@relthresh=\pgfutil@empty
+}%
+\pgfkeysdef{/pgfplots/@enlargelimits/abs}{\pgfkeysalso{true,abs value={#1}}}%
+\pgfkeysdef{/pgfplots/@enlargelimits/.unknown}{\pgfkeysalso{true,value={\pgfkeyscurrentname}}}%
+
+\def\pgfplots@enlarge@limit@ifconfigured#1{%
+ \begingroup
+ % ATTENTION: this uses similar access patterns as
+ % \pgfplots@enlarge@limit@by@dimension
+ \def\bool@pgfplots@loc@enlargelimits@min{0}%
+ \def\bool@pgfplots@loc@enlargelimits@max{0}%
+ %
+ % we can either enlarge
+ % ... using a relative limit (like 0.1 -> 10%)
+ \def\pgfplots@enlargelimits@relthresh{0.1}% the default
+ % ...or an absolute limit ( like 4 units)
+ \let\pgfplots@enlargelimits@absthresh=\pgfutil@empty
+ % or an absolute dimension (like 1cm).
+ %
+ % Relative and absolute values are relatively simple: we only need to compute and
+ % add the changes to the already existing limits. The value with
+ % an absolute dimension is surprisingly complicated.
+ %
+ % The problem is: enlargelimits has to be computed before the
+ % image has been scaled into its final size. This is not merely a
+ % technical problem; this is how one wants it to be!
+ %
+ % The solution taken here is to communicate such an absolute
+ % dimension to the scaling routines. The scaling routines will
+ % handle the case; we don't change limits here.
+ %
+ \let\pgfplots@enlargelimits@absdimension=\pgfutil@empty
+ \def\pgfplots@enlargelimits@curaxis{#1}%
+ %
+ \pgfkeysgetvalue{/pgfplots/enlarge #1 limits}{\pgfplots@loc@TMPa}%
+ \def\pgfplots@loc@TMPb{\pgfqkeys{/pgfplots/@enlargelimits}}% set the argument keys
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}%
+ %
+ \def\bool@pgfplots@loc@enlargeany{0}%
+ \if1\bool@pgfplots@loc@enlargelimits@min
+ \def\bool@pgfplots@loc@enlargeany{1}%
+ \else
+ \if1\bool@pgfplots@loc@enlargelimits@max
+ \def\bool@pgfplots@loc@enlargeany{1}%
+ \fi
+ \fi
+ \if1\bool@pgfplots@loc@enlargeany
+ \pgfplots@enlarge@limit@for{#1}%
+ \fi
+ \global\let\pgfplots@glob@TMPa=\bool@pgfplots@loc@enlargeany
+ % limits assignments are made globally.
+ \xdef\pgfplots@glob@TMPb{%
+ \noexpand\pgfplots@enlargelimits@remember@abs@dimension{#1}%
+ {\bool@pgfplots@loc@enlargelimits@min}%
+ {\bool@pgfplots@loc@enlargelimits@max}%
+ {\pgfplots@enlargelimits@absdimension}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPb
+ \if1\pgfplots@glob@TMPa
+ \pgfplots@visphase@notify@changeofcanvaslimits{#1}%
+ \fi
+}
+
+% Reconfigures the scaling routines such that following calls to
+% \pgfplots@scaleaxes@to@BB@ will enlarge the limit for a specific
+% axis by an absolute dimension.
+%
+% This enlargement is different from standard limit enlargement:
+% Standart limit enlargement is typically applied (and finished) long
+% before the scaling routines start. In fact, the result of
+% enlargelimits is typically the input argument for the scaling
+% (compare the pgfplots manual (pdf)).
+%
+% This here needs a different treatment because "enlarge x limits={abs=1cm}"
+% has to be applied AFTER the scaling is complete. To this end, it is
+% applied as the very last scaling step. It is applied after any post
+% scales, and it only modifies axis limits.
+%
+% #1: x,y, or z
+% #2: 1 if the lower limit shall be enlarged, 0 if not
+% #3: 1 if the upper limit shall be enlarged, 0 if not
+% #4: some absolute dimension (like 1cm) by which we want to enlarge
+% axis limits.
+\def\pgfplots@enlargelimits@remember@abs@dimension#1#2#3#4{%
+ \expandafter\edef\csname pgfplots@enlargelimits@absdimension@#1\endcsname{#4}%
+ \expandafter\edef\csname pgfplots@enlargelimits@absdimension@#1@minmax\endcsname{{#2}{#3}}%
+}%
+\let\pgfplots@enlargelimits@absdimension@x=\pgfutil@empty
+\let\pgfplots@enlargelimits@absdimension@y=\pgfutil@empty
+\let\pgfplots@enlargelimits@absdimension@z=\pgfutil@empty
+
+% Called as soon as the scaling is completely set up and any
+% "enlarge #1 limits={abs=1cm}"
+% enlargements shall be done, i.e. enlargement by unit.
+%
+% #1: x,y, or z
+\def\pgfplots@scaling@apply@enlargelimits@by@dimension#1{%
+ \expandafter\ifx\csname pgfplots@enlargelimits@absdimension@#1\endcsname\pgfutil@empty
+ \else
+ \pgfplotsconvertunittocoordinate{#1}{\csname pgfplots@enlargelimits@absdimension@#1\endcsname}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplots@enlarge@limit@by@dimension{#1}
+ \csname pgfplots@enlargelimits@absdimension@#1@minmax\endcsname
+ {\pgfmathresult}%
+ }%
+ \pgfplots@loc@TMPa
+ \fi
+}%
+
+
+% PRECONDITION:
+% 1. width/height are set
+% 2. the unit vectors point indicate whether the axis is a standard
+% box or some skewed plot (their precise direction and magnitude is
+% irrelevant)
+% 3. the enlargelimits code has already evaluated the case
+% "enlargelimits={abs=1cm}"
+%
+% POSTCONDITION:
+% width and/or height might be modified
+\def\pgfplots@scaling@changewidthheight@for@enlargelimits@by@dimension{%
+ \ifpgfplots@enlargelimits@respect@figure@size
+ %
+ % decide if we need to do anything at all, i.e. if there IS
+ % some option 'enlarge * limits={abs=1cm}' :
+ \pgfplots@loc@tmpfalse
+ \ifx\pgfplots@enlargelimits@absdimension@x\pgfutil@empty
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifx\pgfplots@enlargelimits@absdimension@y\pgfutil@empty
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifx\pgfplots@enlargelimits@absdimension@z\pgfutil@empty
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ %
+ \ifpgfplots@loc@tmp
+ \def\pgfplotsretval{}%
+ % ok. We encountered an option 'enlarge * limits={abs=1cm}' for at least one axis.
+ % and we WANT to keep 'width', 'height'.
+ %
+ % This is not quite trivial because in order to compute
+ % enlarge-by-dimension, we NEED the unit vectors. But the
+ % unit vectors need the limits - a nonlinear problem.
+ %
+ % Since this here is not really a common use-case, I
+ % decided to implement a heuristics which works in most
+ % common cases: for standard 2d axes. It might fail for
+ % skewed axes and it will probably fail for 3d axes.
+ %
+ % My idea is to change width and/or height BEFORE the unit
+ % vectors have been computed.
+ %
+ % First: check if we HAVE a standard 2d axis.
+ \pgfplots@loc@tmpfalse
+ \ifpgfplots@threedim
+ \else
+ \ifdim\pgf@xx=0sp %
+ \else
+ \ifdim\pgf@xy=0sp %
+ \ifdim\pgf@yx=0sp %
+ \ifdim\pgf@yy=0sp %
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+ \ifpgfplots@loc@tmp
+ \def\pgfplots@loc@TMPc{{1}{1}}%
+ %
+ % ah - we really *have* a standard boxed axis.
+ % Compute
+ % newwidth = width - enlargevalue
+ % newheight = height - enlargevalue
+ %
+ % newwidth will be stored in \pgfplots@loc@TMPa
+ % and newheight in \pgfplots@loc@TMPb
+ \ifx\pgfplots@enlargelimits@absdimension@x\pgfutil@empty
+ \let\pgfplots@loc@TMPa=\pgfplots@width
+ \else
+ \ifx\pgfplots@enlargelimits@absdimension@x@minmax\pgfplots@loc@TMPc
+ \def\pgfmathresult{2}%
+ \else
+ \def\pgfmathresult{1}%
+ \fi
+ \pgfmathparse{\pgfplots@width - \pgfmathresult * \pgfplots@enlargelimits@absdimension@x}%
+ \edef\pgfplots@loc@TMPa{\pgfmathresult pt}%
+ \fi
+ %
+ \ifx\pgfplots@enlargelimits@absdimension@y\pgfutil@empty
+ \let\pgfplots@loc@TMPb=\pgfplots@height
+ \else
+ \ifx\pgfplots@enlargelimits@absdimension@y@minmax\pgfplots@loc@TMPc
+ \def\pgfmathresult{2}%
+ \else
+ \def\pgfmathresult{1}%
+ \fi
+ \pgfmathparse{\pgfplots@height - \pgfmathresult * \pgfplots@enlargelimits@absdimension@y}%
+ \edef\pgfplots@loc@TMPb{\pgfmathresult pt}%
+ \fi
+ %
+ % OK. if( newwidth>0 && newheight>0 ), we can proceed.
+ \pgfplots@loc@tmpfalse
+ \ifdim\pgfplots@loc@TMPa>10pt %
+ \ifdim\pgfplots@loc@TMPb>10pt %
+ \pgfplots@loc@tmptrue
+ \fi
+ \fi
+ \ifpgfplots@loc@tmp
+ % Ah: newheight>0 && newheight>0 . Good.
+ \let\pgfplots@width=\pgfplots@loc@TMPa
+ \let\pgfplots@height=\pgfplots@loc@TMPb
+ \else
+ \def\pgfplotsretval{enlarge value are bigger than old picture size}%
+ \fi
+ \else
+ \def\pgfplotsretval{size adjust is unavailable for non-standard axes}%
+ \fi
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \pgfplotswarning{enlargelimits respects figure size failed}\pgfeov%
+ \fi
+ \fi
+ \fi
+}
+
+% this here applies changes required for 'enlarge #1 limits={abs=1cm}', i.e.
+% for the case of numbers with units.
+%
+% The main difference is that it is applied AFTER the scaling of the
+% axis is complete.
+%
+% #1: x,y,or z
+% #2: 1 if lower limit shall be changed
+% #3: 1 if upper limit shall be changed
+% #4: the absolute value
+\def\pgfplots@enlarge@limit@by@dimension#1#2#3#4{%
+ \begingroup
+ % ATTENTION: this uses similar access patterns as
+ % \pgfplots@enlarge@limit@ifconfigured
+ \def\bool@pgfplots@loc@enlargelimits@min{#2}%
+ \def\bool@pgfplots@loc@enlargelimits@max{#3}%
+ %
+ \let\pgfplots@enlargelimits@relthresh=\pgfutil@empty
+ \def\pgfplots@enlargelimits@absthresh{#4}
+ \def\pgfplots@enlargelimits@curaxis{#1}%
+ %
+ \def\bool@pgfplots@loc@enlargeany{0}%
+ \if1\bool@pgfplots@loc@enlargelimits@min
+ \def\bool@pgfplots@loc@enlargeany{1}%
+ \else
+ \if1\bool@pgfplots@loc@enlargelimits@max
+ \def\bool@pgfplots@loc@enlargeany{1}%
+ \fi
+ \fi
+ \if1\bool@pgfplots@loc@enlargeany
+ \pgfplots@enlarge@limit@for{#1}%
+ \fi
+ \global\let\pgfplots@glob@TMPa=\bool@pgfplots@loc@enlargeany
+ % limits assignments are made globally.
+ \endgroup
+ \if1\pgfplots@glob@TMPa
+ \pgfplots@visphase@notify@changeofcanvaslimits{#1}%
+ \fi
+}
+
+
+% Helper method inside of \pgfplots@enlarge@limit@ifconfigured.
+%
+% It modifies '#1min' and '#1max' (globally!) according to the already prepared
+% booleans.
+\def\pgfplots@enlarge@limit@for#1{%
+ \begingroup
+ \expandafter\let\expandafter\pgfplots@@min\csname pgfplots@#1min\endcsname
+ \expandafter\let\expandafter\pgfplots@@max\csname pgfplots@#1max\endcsname
+ \ifx\pgfplots@enlargelimits@relthresh\pgfutil@empty
+ \ifx\pgfplots@enlargelimits@absthresh\pgfutil@empty
+ % ups. No enlargement!? OK, can happen for 'abs=1cm' ...
+ % numbers with unit are processed later (after the scaling
+ % is set up)
+ \pgf@xb=0pt %
+ \else
+ % we have an absolute enlarge value:
+ \let\enlargeabsolute=\pgfplots@enlargelimits@absthresh
+ \pgf@xb=\pgfplots@enlargelimits@absthresh pt
+ \fi
+ \else
+ % we have a relative enlarge value:
+ \pgfmathsubtract@\pgfplots@@max\pgfplots@@min%
+ \pgf@xa=\pgfmathresult pt
+ \pgf@xb=\pgfplots@enlargelimits@relthresh\pgf@xa
+ \edef\enlargeabsolute{\pgf@sys@tonumber{\pgf@xb}}%
+ \fi
+ \ifdim\pgf@xb>0.001pt
+ % the case with
+ % enlargeabsolute ~= 0
+ % means that \pgfplots@@min ~= \pgfplots@@max.
+ % It is handled in another method.
+ %
+ \if1\bool@pgfplots@loc@enlargelimits@min
+ \pgfmathsubtract@\pgfplots@@min\enlargeabsolute%
+ \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult
+ \fi
+ \if1\bool@pgfplots@loc@enlargelimits@max
+ \pgfmathadd@\pgfplots@@max\enlargeabsolute%
+ \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult
+ \fi
+ \fi
+ \endgroup
+}
+
+
+% Initialises the data scale transformation and applies it to any
+% user specified options.
+%
+% PRECONDITION:
+% - all axis limits are already transformed
+% - \pgfplots@set@default@size@options has been called before
+% - the scaling transformation for direction x is set up
+% (\pgfplots@set@optimal@datatrafo@for@),
+% POSTCONDITION:
+% - any user input (like ticks and tick labels)
+% EXCEPT unit vectors will reflect the changes.
+%
+% Unit vectors will be scaled later.
+% @see \pgfplots@apply@datatrafo@to@axis@limits
+\def\pgfplots@check@and@apply@datatrafo@for#1{%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ % Transform axis limits: ALREADY DONE.
+ %
+ % Transform tick limits (if they are set):
+%\message{#1- display tick limits BEFORE data transformation: [\csname pgfplots@#1tickmin\endcsname:\csname pgfplots@#1tickmax\endcsname]}%
+ \expandafter\ifx\csname pgfplots@#1tickmin\endcsname\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1tickmin\endcsname}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmin\endcsname=\pgfmathresult
+ \fi
+ %
+ \expandafter\ifx\csname pgfplots@#1tickmax\endcsname\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1tickmax\endcsname}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult
+ \fi
+%\message{#1- display tick limits after data transformation: [\csname pgfplots@#1tickmin\endcsname:\csname pgfplots@#1tickmax\endcsname]}%
+ %
+ % Convert any user-specified ticks:
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@#1tick\endcsname}%
+ % this here should also work with 'xtick=\empty', the "No tick" command.
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPb{data}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % we have #1tick = data
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@firstplot@coords@#1\endcsname}%
+ \expandafter\pgfplotsutil@unify@short@csv@list\expandafter{\pgfplots@loc@TMPa}%
+ \let\pgfplots@loc@TMPa=\pgfplotsretval
+ \fi
+%\message{Converting #1tick='\csname pgfplots@#1tick\endcsname'}%
+ \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\expandafter{\pgfplots@loc@TMPa}%
+ {\pgfplotscoordmath{#1}{datascaletrafo}}%
+ \to\pgfplots@loc@TMPc
+ \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplots@loc@TMPc
+ \fi
+ %
+ % Convert any extra-ticks, see above.
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@extra@#1tick\endcsname}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \edef\pgfplots@loc@TMPa{{\csname pgfplots@extra@#1tick\endcsname}}%
+ \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\pgfplots@loc@TMPa
+ {\pgfplotscoordmath{#1}{datascaletrafo}}%
+ \to\pgfplots@loc@TMPc
+ \expandafter\let\csname pgfplots@extra@#1tick\endcsname=\pgfplots@loc@TMPc
+ \fi
+ %
+ % Convert any minor tick lists in the same way.
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPb{data}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % we have #1tick = data
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@firstplot@coords@#1\endcsname}%
+ \expandafter\pgfplotsutil@unify@short@csv@list\expandafter{\pgfplots@loc@TMPa}%
+ \let\pgfplots@loc@TMPa=\pgfplotsretval
+ \fi
+ \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\expandafter{\pgfplots@loc@TMPa}%
+ {\pgfplotscoordmath{#1}{datascaletrafo}}%
+ \to\pgfplots@loc@TMPc
+ \pgfkeyslet{/pgfplots/minor #1tick}\pgfplots@loc@TMPc
+ \fi
+ %
+ % Transform any explicit axis unit scalings: ALREADY DONE
+ }{%
+ % case apply trafo == false:
+ \def\pgfplots@loc@TMPb{data}%
+ \expandafter\ifx\csname pgfplots@#1tick\endcsname\pgfplots@loc@TMPb
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@firstplot@coords@#1\endcsname}%
+ \expandafter\pgfplotsutil@unify@short@csv@list\expandafter{\pgfplots@loc@TMPa}%
+ \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplotsretval%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPb{data}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@firstplot@coords@#1\endcsname}%
+ \expandafter\pgfplotsutil@unify@short@csv@list\expandafter{\pgfplots@loc@TMPa}%
+ \pgfkeyslet{/pgfplots/minor #1tick}\pgfplotsretval
+ \fi
+ \fi
+ }%
+}
+
+\newif\ifpgfplots@determinedefaultvalues@isuniform
+\newif\ifpgfplots@determinedefaultvalues@needs@check@uniformtick
+\newif\ifpgfplots@limits@are@computed
+
+\def\pgfplots@handle@invalid@range@defaultlimits{%
+ \pgfplotscoordmath{x}{parsenumber}{0}%
+ \global\let\pgfplots@xmin=\pgfmathresult
+ \pgfplotscoordmath{x}{parsenumber}{1}%
+ \global\let\pgfplots@xmax=\pgfmathresult
+ \global\let\pgfplots@data@xmin=\pgfplots@xmin
+ \global\let\pgfplots@data@xmax=\pgfplots@xmax
+ %
+ \pgfplotscoordmath{y}{parsenumber}{0}%
+ \global\let\pgfplots@ymin=\pgfmathresult
+ \pgfplotscoordmath{y}{parsenumber}{1}%
+ \global\let\pgfplots@ymax=\pgfmathresult
+ \global\let\pgfplots@data@ymin=\pgfplots@ymin
+ \global\let\pgfplots@data@ymax=\pgfplots@ymax
+}
+\def\pgfplots@handle@invalid@range{%
+ % COMPLETELY EMPTY AXIS:
+ \pgfplotswarning{empty range cleared axis}\pgfplots@loc@TMPa\pgfeov
+ \pgfplots@handle@invalid@range@defaultlimits
+ %
+ \pgfplots@threedimfalse
+ \def\pgfplots@xtick{}%
+ \def\pgfplots@ytick{}%
+ \def\pgfplots@extra@xtick{}%
+ \def\pgfplots@extra@ytick{}%
+ \def\pgfplots@xtickten{}%
+ \def\pgfplots@ytickten{}%
+ % clear all plots!
+ \pgfplots@init@cleared@structures
+}
+\def\pgfplots@check@invalid@range{%
+ \pgfplots@limits@are@computedtrue
+ \def\pgfplots@loc@TMPa{}%
+ \ifx\pgfplots@xmin\pgfplots@invalidrange@xmin
+ \pgfplots@limits@are@computedfalse
+ \edef\pgfplots@loc@TMPa{x}%
+ \fi
+ \ifx\pgfplots@xmax\pgfplots@invalidrange@xmax
+ \pgfplots@limits@are@computedfalse
+ \edef\pgfplots@loc@TMPa{x}%
+ \fi
+ \ifx\pgfplots@ymin\pgfplots@invalidrange@ymin
+ \pgfplots@limits@are@computedfalse
+ \edef\pgfplots@loc@TMPa{y}%
+ \fi
+ \ifx\pgfplots@ymax\pgfplots@invalidrange@ymax
+ \pgfplots@limits@are@computedfalse
+ \edef\pgfplots@loc@TMPa{y}%
+ \fi
+ \ifpgfplots@threedim
+ \ifx\pgfplots@zmin\pgfplots@invalidrange@zmin
+ \pgfplots@limits@are@computedfalse
+ \edef\pgfplots@loc@TMPa{z}%
+ \fi
+ \ifx\pgfplots@zmax\pgfplots@invalidrange@zmax
+ \pgfplots@limits@are@computedfalse
+ \edef\pgfplots@loc@TMPa{z}%
+ \fi
+ \fi
+ \ifpgfplots@limits@are@computed
+ \ifx\pgfplots@data@xmin\pgfplots@invalidrange@xmin
+ \global\let\pgfplots@data@xmin=\pgfplots@xmin
+ \fi
+ \ifx\pgfplots@data@xmin\pgfplots@invalidrange@xmax
+ \global\let\pgfplots@data@xmax=\pgfplots@xmax
+ \fi
+ \ifx\pgfplots@data@ymin\pgfplots@invalidrange@ymin
+ \global\let\pgfplots@data@ymin=\pgfplots@ymin
+ \fi
+ \ifx\pgfplots@data@ymin\pgfplots@invalidrange@ymax
+ \global\let\pgfplots@data@ymax=\pgfplots@ymax
+ \fi
+ \ifx\pgfplots@data@zmin\pgfplots@invalidrange@zmin
+ \global\let\pgfplots@data@zmin=\pgfplots@zmin
+ \fi
+ \ifx\pgfplots@data@zmin\pgfplots@invalidrange@zmax
+ \global\let\pgfplots@data@zmax=\pgfplots@zmax
+ \fi
+ \ifpgfplots@clip@limits@x
+ \else
+ % there is a rare change that min > max.
+ % Handle that ...
+ \pgfplotscoordmath{x}{min}{\pgfplots@xmin}{\pgfplots@xmax}%
+ \global\let\pgfplots@xmin=\pgfmathresult
+ \pgfplotscoordmath{x}{max}{\pgfplots@xmin}{\pgfplots@xmax}%
+ \global\let\pgfplots@xmax=\pgfmathresult
+ \fi
+ \ifpgfplots@clip@limits@y
+ \else
+ %
+ \pgfplotscoordmath{y}{min}{\pgfplots@ymin}{\pgfplots@ymax}%
+ \global\let\pgfplots@ymin=\pgfmathresult
+ \pgfplotscoordmath{y}{max}{\pgfplots@ymin}{\pgfplots@ymax}%
+ \global\let\pgfplots@ymax=\pgfmathresult
+ \fi
+ \ifpgfplots@clip@limits@z
+ \else
+ %
+ \ifpgfplots@threedim
+ \pgfplotscoordmath{z}{min}{\pgfplots@zmin}{\pgfplots@zmax}%
+ \global\let\pgfplots@zmin=\pgfmathresult
+ \pgfplotscoordmath{z}{max}{\pgfplots@zmin}{\pgfplots@zmax}%
+ \global\let\pgfplots@zmax=\pgfmathresult
+ \fi
+ \fi
+ \else
+ \pgfplots@handle@invalid@range
+ \fi
+}%
+
+
+% This method finishes the accumulated information of axis limits and
+% all internal flag fields.
+%
+% PRECONDITION:
+% - all plots are finally finished; axis and data limits are known.
+%
+% POSTCONDITION:
+% - the scaling transformation is set-up and applied to all user
+% inputs and axis limits.
+% - the \pgfplots@[xy][min,max] variables and associated TeX
+% registers are set up and final. They should not be changed
+% afterwards.
+% - any tick lists etc. are final.
+%
+\def\pgfplots@determinedefaultvalues{%
+ \pgfplots@check@invalid@range
+ %
+%\message{untransformed: x = [\pgfplots@xmin:\pgfplots@xmax] y = [\pgfplots@ymin:\pgfplots@ymax]. }%
+ %
+ %
+ \pgfplots@set@default@size@options
+ %
+ \ifpgfplots@threedim
+ \pgfplotsthreedimtrue
+ \else
+ \pgfplotsthreedimfalse
+ \fi
+ %
+ \pgfplots@set@optimal@datatrafos@allaxes
+ %
+ % Now, the data scaling has been set up.
+ % However, it may need to be changed if axis equal and/or unit
+ % vector ratio changes the axis limits considerably. If so, it
+ % will be done in \pgfplots@initsizes
+ \pgfplots@apply@datatrafo@to@axis@limits x%
+ \pgfplots@apply@datatrafo@to@axis@limits y%
+ \ifpgfplots@threedim
+ \pgfplots@apply@datatrafo@to@axis@limits z%
+ \fi
+ %
+ \pgfplots@datascaletrafo@initialisedtrue
+%\message{transformed: x = [\pgfplots@xmin:\pgfplots@xmax] y = [\pgfplots@ymin:\pgfplots@ymax].}%
+ %
+ % From now on, we can always work with pgfmath.
+ % We simply need to apply the data scaling trafo before doing so.
+ \pgfplots@enlarge@limit@ifconfigured x
+ \pgfplots@avoid@empty@axis@range@for x%
+ %
+ \pgfplots@enlarge@limit@ifconfigured y
+ \pgfplots@avoid@empty@axis@range@for y%
+
+ \ifpgfplots@threedim
+ \pgfplots@enlarge@limit@ifconfigured z
+ \pgfplots@avoid@empty@axis@range@for z%
+ \fi
+ %
+ \pgfplots@initsizes
+ %
+ \pgfplots@check@and@apply@datatrafo@for x%
+ \pgfplots@check@and@apply@datatrafo@for y%
+ \ifpgfplots@threedim
+ \pgfplots@check@and@apply@datatrafo@for z%
+ \fi
+ % clear structure:
+ \global\let\pgfplots@firstplot@coords@x=\pgfutil@empty
+ \global\let\pgfplots@firstplot@coords@y=\pgfutil@empty
+ \global\let\pgfplots@firstplot@coords@z=\pgfutil@empty
+ %
+ \pgfplots@limits@ready
+ %
+ \pgfplots@set@options@after@survey1%
+ %
+ \pgfplotspoint@initialisation
+ %
+ %
+ \pgfplots@BEGIN@prepare@description@styles
+ %
+ %
+ \pgfplots@init@ticks@for x%
+ \pgfplots@init@ticks@for y%
+ \ifpgfplots@threedim
+ \pgfplots@init@ticks@for z%
+ \fi
+ \pgfplots@init@ticks@ready
+ %
+ %
+ \pgfplots@prepare@ZERO@coordinates
+ %
+ \pgfplots@decide@which@figure@surfaces@are@drawn
+ \pgfplots@init@ticklabelaxisspec
+ %
+ \pgfplots@define@threedim@marks
+ %
+ \pgfplots@clippath@prepare
+ %
+ \pgfplots@ticklabel@maxtickdimen@reset x%
+ \pgfplots@ticklabel@maxtickdimen@reset y%
+ \pgfplots@ticklabel@maxtickdimen@reset z%
+ %
+ \pgfplots@init@axis@shift
+}
+
+% executes '#2' if 'axis #1 line shift' is set and '#3' if not.
+\def\pgfplots@if@has@axis@shift#1#2#3{%
+ \pgfkeysgetvalue{/pgfplots/axis #1 line shift}\pgfplots@loc@TMPb
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ #3%
+ \else
+ #2%
+ \fi
+}%
+
+\def\pgfplots@init@axis@shift{%
+ \pgfplotsforeachentryinCSV{\pgfplots@loc@TMPa}{x,y,z}{%
+ % check if 'axis #1 line shift' is set and non-zero.
+ \expandafter\pgfplots@if@has@axis@shift\pgfplots@loc@TMPa{%
+ \pgfkeysgetvalue{/pgfplots/axis \pgfplots@loc@TMPa\space line shift}\pgfplots@loc@TMPb
+ \pgfmathparse{\pgfplots@loc@TMPb}%
+ \ifdim\pgfmathresult pt=0pt
+ \def\pgfplots@loc@TMPb{}%
+ \else
+ \ifpgfmathunitsdeclared
+ \else
+ \ifpgfplots@threedim
+ % ... I do not know which axis unit should be
+ % used here.
+ \pgfplots@error{Cannot process 'axis \pgfplots@loc@TMPa\space line shift=\pgfplots@loc@TMPb': please provide a dimension like 10pt. Shifting by axis units is only implemented for 2d axes}%
+ \else
+ % Ah - a shift by axis units.
+ % Ok, then determine the correct axis and
+ % compute the shift.
+ %
+ % This works because the outer normal is the
+ % same as one of the axes.
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \if x\pgfplots@loc@TMPa
+ \pgfplotstransformdirectiony{\pgfplots@loc@TMPb}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotsqpointxy{0}{\pgfplots@loc@TMPb}%
+ \else
+ \pgfplotstransformdirectionx{\pgfplots@loc@TMPb}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotsqpointxy{\pgfplots@loc@TMPb}{0}%
+ \fi
+ \pgfmathveclen@{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}%
+ \ifdim\pgfplots@loc@TMPb pt<0sp
+ % we have lost the sign... restore it.
+ \edef\pgfmathresult{-\pgfmathresult}%
+ \fi
+ \fi
+ \fi
+ %
+ \edef\pgfplots@loc@TMPb{\pgfmathresult}% NO unit here
+ \if z\pgfplots@loc@TMPa
+ \ifpgfplots@threedim
+ \pgfplots@separate@axis@linestrue
+ \fi
+ \else
+ \pgfplots@separate@axis@linestrue
+ \fi
+ \fi
+ %
+ % normalize the value - no need to parse it over and over again:
+ \pgfkeyslet{/pgfplots/axis \pgfplots@loc@TMPa\space line shift}\pgfplots@loc@TMPb
+ }{}%
+ }%
+}%
+
+\def\pgfplots@init@ticks@ready{}%
+\def\pgfplots@init@ticks@for#1{%
+ \pgfplots@isuniformticktrue
+ \pgfplots@determinedefaultvalues@needs@check@uniformticktrue
+ \expandafter\ifx\csname pgfplots@#1tick\endcsname\pgfutil@empty
+ \pgfplots@assign@default@tick@foraxis{#1}%
+ \fi
+ \ifpgfplots@determinedefaultvalues@needs@check@uniformtick
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tick\endcsname
+ \edef\pgfplots@loc@TMPb{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ % there are no ticks left.
+ \pgfplots@isuniformtickfalse
+ \else
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \def\pgfplots@loc@TMPb{\expandafter\pgfplots@checkisuniformLINEARtick\expandafter{\pgfplots@loc@TMPa}}%
+ \expandafter\pgfplots@loc@TMPb\csname pgfplots@tick@distance@#1\endcsname%
+ }{%
+ \expandafter\pgfplots@checkisuniformLOGtick\expandafter{\pgfplots@loc@TMPa}%
+ }%
+ \fi
+ \fi
+ \pgfplots@check@for@minor@ticks{#1}%
+ \ifpgfplots@isuniformtick
+ \else
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPb
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \csname pgfplots@#1minorticksfalse\endcsname
+ \csname pgfplots@#1minorgridsfalse\endcsname
+ \fi
+ \fi
+ %
+ \expandafter\ifx\csname pgfplots@#1ticklabel\endcsname\pgfutil@empty
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \expandafter\def\csname pgfplots@#1ticklabel\endcsname{\axisdefaultticklabel}%
+ }{%
+ \expandafter\def\csname pgfplots@#1ticklabel\endcsname{\axisdefaultticklabellog}%
+ }%
+ \fi
+ \expandafter\ifx\csname pgfplots@extra@#1ticklabel\endcsname\pgfutil@empty
+ \pgfutil@namelet{pgfplots@loc@TMPa}{pgfplots@#1ticklabel}%
+ \pgfutil@namelet{pgfplots@loc@TMPb}{pgfplots@user@ticklabel@list@#1}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % Ah - someone used '#1ticklabels' (or its friends).
+ % these are bound to specific positions and make no sense in this context.
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \expandafter\def\csname pgfplots@extra@#1ticklabel\endcsname{\axisdefaultticklabel}%
+ }{%
+ \expandafter\def\csname pgfplots@extra@#1ticklabel\endcsname{\axisdefaultticklabellog}%
+ }%
+ \else
+ % inherit the global argument of '#1ticklabel' -- it will probably contain generic code to
+ % typeset labels at any positions.
+ % The "probably" is a buest-guess, though...
+ \pgfutil@namelet{pgfplots@extra@#1ticklabel}{pgfplots@#1ticklabel}%
+ \fi
+ \fi
+ %
+ \if0\csname pgfplots@#1axislinesnum\endcsname\else
+ % axis x line* != box
+ \expandafter\let\csname pgfplots@#1ticklabel@pos\endcsname=\pgfutil@empty
+ \fi
+ \expandafter\ifx\csname pgfplots@#1ticklabel@pos\endcsname\pgfutil@empty
+ \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{%
+ \if3\csname pgfplots@#1tickposnum\endcsname% right
+ u%
+ \else
+ l%
+ \fi
+ }%
+ \fi
+}%
+
+\def\pgfplots@check@for@minor@ticks#1{%
+ \pgfkeysgetvalue{/pgfplots/minor #1 tick num}\pgfplots@loc@TMPa
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPb
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \ifnum\pgfplots@loc@TMPa=0\relax
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \csname pgfplots@#1minorticksfalse\endcsname
+ \csname pgfplots@#1minorgridsfalse\endcsname
+ \fi
+ \else
+ \csname pgfplots@#1minortickstrue\endcsname
+ \fi
+ }{%
+ }%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ \csname pgfplots@#1minortickstrue\endcsname
+ \fi
+}
+
+% Invoked as soon as all axis limits are ready and final (in TeX
+% number range, all data scaling is applied at this point).
+\def\pgfplots@limits@ready{%
+ \pgfplots@limits@ready@tostring{x}{min}%
+ \pgfplots@limits@ready@tostring{x}{max}%
+ \pgfplots@limits@ready@tostring{y}{min}%
+ \pgfplots@limits@ready@tostring{y}{max}%
+ \ifpgfplots@threedim
+ \pgfplots@limits@ready@tostring{z}{min}%
+ \pgfplots@limits@ready@tostring{z}{max}%
+ \fi
+}%
+
+% write a limit into /pgfplots/#1#2
+% #1: either x,y or z
+% #2: either 'min' or 'max'
+%
+% \pgfplots@limits@ready@tostring{x}{min}
+\def\pgfplots@limits@ready@tostring#1#2{%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1#2\endcsname}%
+ }{%
+ \edef\pgfmathresult{\csname pgfplots@#1#2\endcsname}%
+ }%
+ \pgfplotscoordmath{#1}{tostring}{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/#1#2}\pgfmathresult
+ % this runs \pgfkeyslet{/pgfplots/xmin}\pgfmathresult
+}%
+
+
+\newif\ifpgfplots@avoid@emptyrange@@range@is@approx@equal
+% Checks whether axis limits in coordinate #1 are approximately equal.
+%
+% If that is the case, force a non-zero width of the range.
+%
+\def\pgfplots@avoid@empty@axis@range@for#1{%
+ % Check if axis limits are empty:
+ \begingroup
+ \expandafter\let\expandafter\if@cur@is@scaled\csname ifpgfplots@apply@datatrafo@#1\endcsname
+ \expandafter\let\expandafter\pgfplots@@min\csname pgfplots@#1min\endcsname
+ \expandafter\let\expandafter\pgfplots@@max\csname pgfplots@#1max\endcsname
+ \let\min@d=\pgf@xa
+ \let\max@d=\pgf@xb
+ \let\diff=\pgf@xc
+ \expandafter\min@d\pgfplots@@min pt %
+ \expandafter\max@d\pgfplots@@max pt %
+ \diff=\max@d
+ \advance\diff by-\min@d
+ % FIXME : I need a RELATIVE check here!
+ % but: real number point division is expensive
+ \if@cur@is@scaled
+ % this here should be sufficient because the axis
+ % has absolute values of order O( 10^3 ) or so.
+ \ifdim\diff<0.0001pt
+ \pgfplots@avoid@emptyrange@@range@is@approx@equaltrue
+ \fi
+ \else
+ % there is no data scaling, so I should be much more defensive
+ % with absolute thresholds...
+ \ifdim\diff<0.0001pt
+ \pgfplots@avoid@emptyrange@@range@is@approx@equaltrue
+ \fi
+ \fi
+ \ifpgfplots@avoid@emptyrange@@range@is@approx@equal
+ \begingroup
+ \pgfplotscoordmath{#1}{datascaletrafo inverse to fixed}{\csname pgfplots@#1min\endcsname}%
+ \let\pgfplots@min=\pgfmathresult
+ \pgfplotscoordmath{#1}{datascaletrafo inverse to fixed}{\csname pgfplots@#1max\endcsname}%
+ \let\pgfplots@max=\pgfmathresult
+ \pgfplotswarning{approx empty range enlarged}{#1}{\pgfplots@min}{\pgfplots@max}\pgfeov
+ \endgroup
+ % the case \pgfplots@@min ~= \pgfplots@@max
+ %
+ % enlarge \pgfplots@@max and shrink \min:
+ \ifdim\max@d<0pt%
+ \ifdim\max@d<-1pt%
+ \max@d=0.8\max@d
+ \min@d=1.2\min@d
+ \else
+ \advance\max@d by-1pt%
+ \advance\min@d by1pt%
+ \fi
+ \else
+ \ifdim\max@d>1pt%
+ \max@d=1.2\max@d
+ \min@d=0.8\min@d
+ \else
+ \ifdim\max@d=0pt%
+ \if@cur@is@scaled
+ \expandafter\let\expandafter\min@unscaled\csname pgfplots@#1min@unscaled@as@float\endcsname
+ \expandafter\let\expandafter\max@unscaled\csname pgfplots@#1max@unscaled@as@float\endcsname
+ % **sigh**. That's really work.
+ %
+ % This here happens ALWAYS if min == max for
+ % linear axis because the scaling
+ % transformation will result in T(min) = T(max) = 0
+ %
+ % -> we need to enlarge limits in floating
+ % point arithmetics.
+ %
+ \pgfplotscoordmath{#1}{parsenumber}{0}%
+ \let\pgfplotsmath@zero=\pgfmathresult
+ %
+ \ifx\max@unscaled\pgfplotsmath@zero
+ % max == 0
+ \pgfplotscoordmath{#1}{parsenumber}{1}%
+ \let\max@unscaled=\pgfmathresult
+ \pgfplotscoordmath{#1}{parsenumber}{-1}%
+ \let\min@unscaled=\pgfmathresult
+ \else
+ %
+ \pgfplotscoordmath{#1}{parsenumber}{1.2}%
+ \let\pgfplotsmath@scalea=\pgfmathresult
+ \pgfplotscoordmath{#1}{parsenumber}{8e-1}%
+ \let\pgfplotsmath@scaleb=\pgfmathresult
+ %
+ \pgfplotscoordmath{#1}{if less than}
+ {\pgfplotsmath@zero}{\max@unscaled}%
+ {%
+ % 0 < max
+ \pgfplotscoordmath{#1}{op}{multiply}
+ {{\max@unscaled}{\pgfplotsmath@scalea}}%
+ \let\max@unscaled=\pgfmathresult
+ \pgfplotscoordmath{#1}{op}{multiply}
+ {{\min@unscaled}{\pgfplotsmath@scaleb}}%
+ \let\min@unscaled=\pgfmathresult
+ }%
+ {%
+ \pgfplotscoordmath{#1}{op}{multiply}
+ {{\max@unscaled}{\pgfplotsmath@scaleb}}%
+ \let\max@unscaled=\pgfmathresult
+ \pgfplotscoordmath{#1}{op}{multiply}
+ {{\min@unscaled}{\pgfplotsmath@scalea}}%
+ \let\min@unscaled=\pgfmathresult
+ }%
+ \fi
+ \pgfplotscoordmath{#1}{datascaletrafo}{\min@unscaled}%
+ \let\pgfplots@@min=\pgfmathresult
+ \pgfplotscoordmath{#1}{datascaletrafo}{\max@unscaled}%
+ \let\pgfplots@@max=\pgfmathresult
+ \min@d=\pgfplots@@min pt
+ \max@d=\pgfplots@@max pt
+ \else
+ \advance\max@d by1pt
+ \advance\min@d by-1pt
+ \fi
+ \else
+ \advance\max@d by1pt
+ \advance\min@d by-1pt
+ \fi
+ \fi
+ \fi
+ \xdef\pgfplots@glob@TMPa{\pgf@sys@tonumber{\min@d}}%
+ \xdef\pgfplots@glob@TMPb{\pgf@sys@tonumber{\max@d}}%
+%\pgfplots@message{ -> #1 = \pgfplots@glob@TMPa : \pgfplots@glob@TMPb;}%
+ \else
+ \global\let\pgfplots@glob@TMPa=\pgfplots@@min%
+ \global\let\pgfplots@glob@TMPb=\pgfplots@@max%
+ \fi
+ \endgroup
+ \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfplots@glob@TMPa
+ \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfplots@glob@TMPb
+}
+
+
+% should be invoked whenever \pgfplots@#1min or \pgfplots@#1max have
+% been changed during the visualization phase (for example, axis equal
+% or enlargelimits)
+\def\pgfplots@visphase@notify@changeofcanvaslimits#1{%
+ \csname pgfplots@#1min@reg\endcsname=\csname pgfplots@#1min\endcsname pt %
+ \csname pgfplots@#1max@reg\endcsname=\csname pgfplots@#1max\endcsname pt %
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1min\endcsname}%
+ \expandafter\let\csname pgfplots@#1min@unscaled@as@float\endcsname=\pgfmathresult
+ \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1max\endcsname}%
+ \expandafter\let\csname pgfplots@#1max@unscaled@as@float\endcsname=\pgfmathresult
+ }{}%
+}%
+
+% Invokes #3 if ||D_#1||_CANVAS < ||D_#2||_CANVAS and #4 if that is not the case.
+% Here D_x = (1,0,0) , D_y = (0,1,0) and D_z=(0,0,1).
+%
+% Due to the data scaling transformation,
+% ||D_a|| = || T(1) * e_a||
+% where e_x, e_y, e_z are the lowlevel, transformed unit vectors.
+% We have
+% ||D_a|| = T(1) * veclen_a.
+% Note that the shift in T is not of interest, we only deal with
+% T_a(x) = 10^{s_a} x.
+%
+% Thus, this routine invokes #3 if
+% ( 10^{s1} * veclen1 < 10^{s2} * veclen2 )
+% <=>
+% ( 10^{s1-s2} * veclen1 < veclen2 ).
+%
+% Here s1/s2 are the respective scales of the data scaling
+% transformation.
+%
+% If the condition is false, '#4' is invoked.
+\def\pgfplots@if@unitveclenlessthan@untransformed#1#2#3#4{%
+ \def\pgfplots@loc@TMPa{0}%
+ \def\pgfplots@loc@TMPb{0}%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplots@letcsname{pgfplots@loc@TMPa}={pgfplots@data@scale@trafo@EXPONENT@#1}%
+ }{}%
+ \pgfplots@if{pgfplots@apply@datatrafo@#2}{%
+ \pgfplots@letcsname{pgfplots@loc@TMPb}={pgfplots@data@scale@trafo@EXPONENT@#2}%
+ }{}%
+ \begingroup
+%\message{[comparison: [#1] < [#2]: 10^\pgfplots@loc@TMPa\space * \csname pgfplots@#1@veclength\endcsname < 10^\pgfplots@loc@TMPb\space * \csname pgfplots@#2@veclength\endcsname]^^J}%
+ \pgf@xb=\csname pgfplots@#2@veclength\endcsname pt
+ %
+ \c@pgf@counta=\pgfplots@loc@TMPa
+ \advance\c@pgf@counta by-\pgfplots@loc@TMPb
+ %
+ \ifnum\c@pgf@counta=0
+ \pgf@xa=\csname pgfplots@#1@veclength\endcsname pt
+ \else
+ \pgfplotsmathmultiplypowten@{\csname pgfplots@#1@veclength\endcsname}{\c@pgf@counta}%
+ \pgf@xa=\pgfmathresult pt
+ \fi
+ %
+ \ifdim\pgf@xa<\pgf@xb
+ \gdef\pgfplots@glob@TMPc{1}%
+ \else
+ \gdef\pgfplots@glob@TMPc{0}%
+ \fi
+ \endgroup
+ \if1\pgfplots@glob@TMPc #3\else #4\fi
+}%
+
+
+\def\pgfplots@low@level@shape@INNER@define{%
+ \anchor{image}{\pgfpointorigin}%
+ %
+ %
+ \anchor{center}{\pgfplotsqpointdescriptionxy{0.5}{0.5}}%
+ \anchor{north}{\pgfplotsqpointdescriptionxy{0.5}{1}}%
+ \anchor{north east}{\pgfplotsqpointdescriptionxy{1}{1}}%
+ \anchor{east}{\pgfplotsqpointdescriptionxy{1}{0.5}}
+ \anchor{south east}{\pgfplotsqpointdescriptionxy{1}{0}}%
+ \anchor{south}{\pgfplotsqpointdescriptionxy{0.5}{0}}%
+ \anchor{south west}{\pgfplotsqpointdescriptionxy{0}{0}}%
+ \anchor{west}{\pgfplotsqpointdescriptionxy{0}{0.5}}%
+ \anchor{north west}{\pgfplotsqpointdescriptionxy{0}{1}}%
+ %%
+ \anchor{origin}{\pgfplotspointaxisorigin}%
+ \anchor{above origin}{%
+ \pgfpointintersectionoflines
+ {\pgfplotspointaxisorigin}
+ {\pgfpointadd
+ {\pgfplotspointaxisorigin}%
+ {\pgfplotspointyaxis
+ \pgfplots@assert@not@zero{\pgf@y}{y axis has eyy=0; cannot compute above origin anchor}%
+ }%
+ }%
+ {\pgfplotsqpointdescriptionxy{0}{1}}
+ {\pgfplotsqpointdescriptionxy{1}{1}}%
+ }%
+ \anchor{left of origin}{%
+ \pgfpointintersectionoflines
+ {\pgfplotspointaxisorigin}
+ {\pgfpointadd{\pgfplotspointaxisorigin}{\pgfplotspointxaxis}}
+ {\pgfplotsqpointdescriptionxy{0}{0}}
+ {\pgfplotsqpointdescriptionxy{0}{1}}%
+ }%
+ \anchor{right of origin}{%
+ \pgfpointintersectionoflines
+ {\pgfplotspointaxisorigin}
+ {\pgfpointadd{\pgfplotspointaxisorigin}{\pgfplotspointxaxis}}
+ {\pgfplotsqpointdescriptionxy{1}{0}}
+ {\pgfplotsqpointdescriptionxy{1}{1}}%
+ }%
+ \anchor{below origin}{%
+ \pgfpointintersectionoflines
+ {\pgfplotspointaxisorigin}
+ {\pgfpointadd{\pgfplotspointaxisorigin}{\pgfplotspointyaxis}}
+ {\pgfplotsqpointdescriptionxy{0}{0}}
+ {\pgfplotsqpointdescriptionxy{1}{0}}%
+ }%
+}
+
+% This here is a low-weight node. It can ONLY be used during axis
+% descriptions and is completely useless otherwise.
+%
+% See pgfplots@low@level@shape below.
+\pgfdeclareshape{pgfplots@low@level@shape@INNER}{%
+ \nodeparts{image}%
+ %%
+ %%
+ \pgfplots@low@level@shape@INNER@define
+ %%
+ %%
+ \anchorborder{}%
+ \backgroundpath{}%
+ \foregroundpath{}%
+ \behindbackgroundpath{}%
+ \beforebackgroundpath{}%
+ \behindforegroundpath{}%
+ \beforeforegroundpath{}%
+}
+
+% This is the main axis shape.
+%
+% It has one node part, which is the complete image. It provides a lot
+% of anchors.
+\pgfdeclareshape{pgfplots@low@level@shape}{%
+ % The '(0,0)' point is the LOWER LEFT OUTER CORNER.
+ \savedanchor\upperrightcorner{%
+ \pgfplotspointupperrightcorner
+ }%
+ \savedanchor\lowerleftinnercorner{%
+ \pgfplotspointlowerleftinnercorner%
+ }%
+ \savedanchor\innerdiagonal{\pgfplotspointbbdiagonal}%
+ \savedanchor\origin{%
+ \pgfplotspointaxisorigin
+ }%
+ %
+ \nodeparts{image}%
+ \anchor{image}{%
+ \global\pgf@x=0pt %
+ \global\pgf@y=0pt %
+ }%
+ %
+ \anchor{center}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointscale
+ {0.5}
+ {\innerdiagonal}}%
+ }%
+ \anchor{north}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}
+ {\innerdiagonal\global\divide\pgf@x by2 }%
+ }%
+ \anchor{north east}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ \innerdiagonal
+ }%
+ \anchor{east}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\divide\pgf@y by2 }%
+ }%
+ \anchor{south east}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@y=0sp }%
+ }%
+ \anchor{south}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\divide\pgf@x by2 \global\pgf@y=0sp }%
+ }%
+ \anchor{south west}{\lowerleftinnercorner}%
+ \anchor{west}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@x=0sp \global\divide\pgf@y by2 }%
+ }
+ \anchor{north west}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@x=0sp }%
+ }%
+ %%
+ \anchor{origin}{%
+ \origin
+ }%
+ \anchor{above origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{%
+ \innerdiagonal\global\pgf@x=0sp
+ \pgfplots@assert@not@zero{\pgf@y}{y axis has eyy=0; cannot compute above origin anchor}%
+ }%
+ }%
+ {\pgfpointadd{\lowerleftinnercorner}{\innerdiagonal\global\pgf@x=0sp }}
+ {\pgfpointadd{\lowerleftinnercorner}{\innerdiagonal}}%
+ }%
+ \anchor{left of origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{\innerdiagonal\global\multiply\pgf@x by-1 \global\pgf@y=0sp }}
+ {\lowerleftinnercorner}
+ {\pgfpointadd{\lowerleftinnercorner}{\innerdiagonal\global\pgf@x=0sp }}%
+ }%
+ \anchor{right of origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{\innerdiagonal\global\pgf@y=0sp }}
+ {\pgfpointadd{\lowerleftinnercorner}{\innerdiagonal\global\pgf@y=0sp }}
+ {\pgfpointadd{\lowerleftinnercorner}{\innerdiagonal}}%
+ }%
+ \anchor{below origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{\innerdiagonal\global\pgf@x=0sp \global\multiply\pgf@y by-1 }}
+ {\lowerleftinnercorner}
+ {\pgfpointadd{\lowerleftinnercorner}{\innerdiagonal\global\pgf@y=0sp }}%
+ }%
+ %
+ %%
+ %
+ \anchor{outer north}{%
+ \upperrightcorner
+ \global\pgf@x=.5\pgf@x
+ }%
+ \anchor{outer north east}{\upperrightcorner}%
+ \anchor{outer east}{%
+ \upperrightcorner
+ \global\pgf@y=.5\pgf@y
+ }%
+ \anchor{outer south east}{%
+ \upperrightcorner
+ \global\pgf@y=0pt
+ }%
+ \anchor{outer south}{%
+ \upperrightcorner
+ \global\pgf@x=.5\pgf@x
+ \global\pgf@y=0pt
+ }%
+ \anchor{outer south west}{%
+ \global\pgf@x=0pt
+ \global\pgf@y=0pt
+ }%
+ \anchor{outer west}{%
+ \upperrightcorner
+ \global\pgf@x=0pt
+ \global\pgf@y=.5\pgf@y
+ }%
+ \anchor{outer north west}{%
+ \upperrightcorner
+ \global\pgf@x=0pt
+ }%
+ \anchor{outer center}{%
+ \upperrightcorner
+ \global\pgf@x=.5\pgf@x
+ \global\pgf@y=.5\pgf@y
+ }%
+ %
+ %
+ %%
+ %%
+ \anchor{above north}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@y
+ \pgfpointadd
+ {\lowerleftinnercorner}
+ {\innerdiagonal\divide\pgf@x by2 }%
+ \global\pgf@y=\pgfutil@tempdima
+ }%
+ \anchor{above north east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@y
+ \pgfpointadd
+ \lowerleftinnercorner
+ \innerdiagonal
+ \global\pgf@y=\pgfutil@tempdima
+ }%
+ \anchor{right of north east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@x
+ \pgfpointadd
+ \lowerleftinnercorner
+ \innerdiagonal
+ \global\pgf@x=\pgfutil@tempdima
+ }%
+ \anchor{right of east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@x
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\divide\pgf@y by2 }%
+ \global\pgf@x=\pgfutil@tempdima
+ }%
+ \anchor{right of south east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@x
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@y=0sp }%
+ \global\pgf@x=\pgfutil@tempdima
+ }%
+ \anchor{below south east}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@y=0sp }%
+ \global\pgf@y=0pt
+ }%
+ \anchor{below south}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\divide\pgf@x by2 \global\pgf@y=0sp }%
+ \pgf@y=0pt
+ }%
+ \anchor{below south west}{%
+ \lowerleftinnercorner
+ \global\pgf@y=0pt
+ }%
+ \anchor{left of south west}{%
+ \lowerleftinnercorner
+ \global\pgf@x=0pt
+ }%
+ \anchor{left of west}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@x=0sp \global\divide\pgf@y by2 }%
+ \global\pgf@x=0pt
+ }%
+ \anchor{left of north west}{%
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@x=0sp }%
+ \global\pgf@x=0pt
+ }%
+ \anchor{above north west}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@y
+ \pgfpointadd
+ \lowerleftinnercorner
+ {\innerdiagonal\global\pgf@x=0sp }%
+ \global\pgf@y=\pgfutil@tempdima
+ }%
+ %%
+ %%
+ \anchorborder{%
+ % remember the input coords:
+ \edef\pgfplots@loc@TMPa{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ %
+ % I want to use \pgfpointborderrectangle which expects that
+ % (0,0) is the CENTER.
+ % Ok, then: shift it:
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointscale
+ {0.5}
+ {\innerdiagonal}}%
+ \edef\pgfplots@loc@center{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ \pgfpointadd{%
+ \pgfpointborderrectangle%
+ {\pgfplots@loc@TMPa}%
+ {\pgfpointscale
+ {0.5}
+ {\innerdiagonal}}%
+ }{%
+ % and add the center to undo the local shift:
+ \pgfplots@loc@center
+ }%
+ }%
+ \backgroundpath{%
+ \pgfkeysvalueof{/pgfplots/@backgroundpath@hook/.@cmd}\pgfeov
+ \pgfpathrectangle{\pgfpointorigin}{\upperrightcorner}%
+ }%
+ \foregroundpath{}%
+ \behindbackgroundpath{}%
+ \beforebackgroundpath{}%
+ \behindforegroundpath{}%
+ \beforeforegroundpath{}%
+}
+
+\def\pgfplots@restore@deprecated@lowlevel@shape{%
+ \pgfutil@ifundefined{pgfplots@low@level@shape@deprecated@isdefined}{%
+ \gdef\pgfplots@low@level@shape@deprecated@isdefined{1}%
+ %
+ % all these assignments are global, so it is save to call this
+ % macro inside of scopes:
+ \pgfdeclareshape{pgfplots@low@level@shape@deprecated}{%
+ % The '(0,0)' point is the LOWER LEFT OUTER CORNER.
+ \savedanchor\upperrightcorner{
+ % FIXME : is this correct?
+ \pgfplotspointupperrightcorner
+ %\global\pgf@x=\wd\pgfnodepartimagebox
+ %\global\pgf@y=\ht\pgfnodepartimagebox
+ }%
+ \savedanchor\lowerleftinnercorner{%
+ \pgfplotspointlowerleftinnercorner%
+ }%
+ \savedanchor\xaxisvec{\pgfplotspointxaxis}%
+ \savedanchor\yaxisvec{\pgfplotspointyaxis}%
+ \savedanchor\origin{%
+ \pgfplotspointaxisorigin
+ }%
+ %
+ \nodeparts{image}%
+ \anchor{image}{%
+ \global\pgf@x=0pt %
+ \global\pgf@y=0pt %
+ }%
+ %
+ %
+ \anchor{center}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointscale{0.5}{\pgfpointadd{\xaxisvec}{\yaxisvec}}}%
+ }%
+ \anchor{north}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointadd{\yaxisvec}{\pgfpointscale{0.5}{\xaxisvec}}}%
+ }%
+ \anchor{north east}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointadd{\yaxisvec}{\xaxisvec}}%
+ }%
+ \anchor{east}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointadd{\xaxisvec}{\pgfpointscale{0.5}{\yaxisvec}}}%
+ }%
+ \anchor{south east}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\xaxisvec}%
+ }%
+ \anchor{south}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointscale{0.5}{\xaxisvec}}%
+ }%
+ \anchor{south west}{\lowerleftinnercorner}%
+ \anchor{west}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointscale{0.5}{\yaxisvec}}%
+ }%
+ \anchor{north west}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\yaxisvec}%
+ }%
+ %%
+ \anchor{origin}{%
+ \origin
+ }%
+ \anchor{above origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{\yaxisvec}}
+ {\pgfpointadd{\lowerleftinnercorner}{\yaxisvec}}
+ {\pgfpointadd{\pgfpointadd{\lowerleftinnercorner}{\yaxisvec}}{\xaxisvec}}%
+ }%
+ \anchor{left of origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{\pgfpointscale{-1}{\xaxisvec}}}
+ {\lowerleftinnercorner}
+ {\pgfpointadd{\lowerleftinnercorner}{\yaxisvec}}%
+ }%
+ \anchor{right of origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{\xaxisvec}}
+ {\pgfpointadd{\lowerleftinnercorner}{\xaxisvec}}
+ {\pgfpointadd{\pgfpointadd{\lowerleftinnercorner}{\xaxisvec}}{\yaxisvec}}%
+ }%
+ \anchor{below origin}{%
+ \pgfpointintersectionoflines
+ {\origin}
+ {\pgfpointadd{\origin}{\pgfpointscale{-1}{\yaxisvec}}}
+ {\lowerleftinnercorner}
+ {\pgfpointadd{\lowerleftinnercorner}{\xaxisvec}}%
+ }%
+ %
+ %%
+ %
+ \anchor{outer north}{%
+ \upperrightcorner
+ \global\pgf@x=.5\pgf@x
+ }%
+ \anchor{outer north east}{\upperrightcorner}%
+ \anchor{outer east}{%
+ \upperrightcorner
+ \global\pgf@y=.5\pgf@y
+ }%
+ \anchor{outer south east}{%
+ \upperrightcorner
+ \global\pgf@y=0pt
+ }%
+ \anchor{outer south}{%
+ \upperrightcorner
+ \global\pgf@x=.5\pgf@x
+ \global\pgf@y=0pt
+ }%
+ \anchor{outer south west}{%
+ \global\pgf@x=0pt
+ \global\pgf@y=0pt
+ }%
+ \anchor{outer west}{%
+ \upperrightcorner
+ \global\pgf@x=0pt
+ \global\pgf@y=.5\pgf@y
+ }%
+ \anchor{outer north west}{%
+ \upperrightcorner
+ \global\pgf@x=0pt
+ }%
+ \anchor{outer center}{%
+ \upperrightcorner
+ \global\pgf@x=.5\pgf@x
+ \global\pgf@y=.5\pgf@y
+ }%
+ %
+ %
+ %%
+ %%
+ \anchor{above north}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@y
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointadd{\yaxisvec}{\pgfpointscale{0.5}{\xaxisvec}}}%
+ \global\pgf@y=\pgfutil@tempdima
+ }%
+ \anchor{above north east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@y
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointadd{\yaxisvec}{\xaxisvec}}%
+ \global\pgf@y=\pgfutil@tempdima
+ }%
+ \anchor{right of north east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@x
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointadd{\yaxisvec}{\xaxisvec}}%
+ \global\pgf@x=\pgfutil@tempdima
+ }%
+ \anchor{right of east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@x
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointadd{\xaxisvec}{\pgfpointscale{0.5}{\yaxisvec}}}%
+ \global\pgf@x=\pgfutil@tempdima
+ }%
+ \anchor{right of south east}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@x
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\xaxisvec}%
+ \global\pgf@x=\pgfutil@tempdima
+ }%
+ \anchor{below south east}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\xaxisvec}%
+ \global\pgf@y=0pt
+ }%
+ \anchor{below south}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointscale{0.5}{\xaxisvec}}%
+ \global\pgf@y=0pt
+ }%
+ \anchor{below south west}{%
+ \lowerleftinnercorner
+ \global\pgf@y=0pt
+ }%
+ \anchor{left of south west}{%
+ \lowerleftinnercorner
+ \global\pgf@x=0pt
+ }%
+ \anchor{left of west}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\pgfpointscale{0.5}{\yaxisvec}}%
+ \global\pgf@x=0pt
+ }%
+ \anchor{left of north west}{%
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\yaxisvec}%
+ \global\pgf@x=0pt
+ }%
+ \anchor{above north west}{%
+ \upperrightcorner
+ \pgfutil@tempdima=\pgf@y
+ \pgfpointadd
+ {\lowerleftinnercorner}%
+ {\yaxisvec}%
+ \global\pgf@y=\pgfutil@tempdima
+ }%
+ %%
+ %%
+ \anchorborder{%
+ % Call a function that computes a border point. Since this
+ % function will modify dimensions like \pgf@x, we must move them to
+ % other dimensions.
+ \pgfutil@tempdima=\pgf@x
+ \pgfutil@tempdimb=\pgf@y
+ \pgfpointborderrectangle%
+ {\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdimb}}%
+ {\upperrightcorner}%
+ }%
+ \backgroundpath{%
+ \pgfkeysvalueof{/pgfplots/@backgroundpath@hook/.@cmd}\pgfeov
+ \pgfpathrectangle{\pgfpointorigin}{\upperrightcorner}%
+ }%
+ \foregroundpath{}%
+ \behindbackgroundpath{}%
+ \beforebackgroundpath{}%
+ \behindforegroundpath{}%
+ \beforeforegroundpath{}%
+ }%
+ }{}%
+}%
+
+
+% Defines a new axis type `#1' with initialization code `#2'.
+%
+% The name #1 will be available as value for 'axis type=#1' and
+% furthermore, an environment '\begin{#1axis}' will be available.
+%
+% For ConTeXt, the \start#1axis and \stop#1axis commands will be
+% available.
+%
+% #1: the axis type name
+% #2: initialization TeX code.
+%
+% OPTIONAL: you can provide the expected axis coordinate system in
+% square brackets.
+%
+% \pgfplotsdefineaxistype{rectangle}{...}
+% \pgfplotsdefineaxistype[polar]{polar}{...}
+\def\pgfplotsdefineaxistype{\pgfutil@ifnextchar[{\pgfplotsdefineaxistype@}{\pgfplotsdefineaxistype@[cart]}}%
+\def\pgfplotsdefineaxistype@[#1]#2#3{%
+ \expandafter\def\csname pgfplots@axistype@#2\endcsname{%
+ \pgfkeyssetvalue{/pgfplots/@expected axis cs}{#1}%
+ #3%
+ }%
+ \expandafter\def\csname pgfplots@environment@#2axis\endcsname{%
+ \pgfutil@ifnextchar[%
+ {\csname pgfplots@environment@#2axis@\endcsname}%
+ {\csname pgfplots@environment@#2axis@\endcsname[]}%
+ }%
+ \expandafter\long\expandafter\def\csname pgfplots@environment@#2axis@\endcsname[##1]{%
+ \begin{axis}[%
+ ##1,%
+ data cs=#1,% assume that coordinates provided by \addplot are in the correct coordsystem
+ axis type=#2% active the correct axis type
+ ]%
+ }%
+ \expandafter\def\csname endpgfplots@environment@#2axis\endcsname{\end{axis}}%
+ \edef\pgfplots@glob@TMPc{\expandafter\noexpand\csname #2axis\endcsname\expandafter\noexpand\csname pgfplots@environment@#2axis\endcsname}%
+ \expandafter
+ \tikzaddtikzonlycommandshortcutlet\pgfplots@glob@TMPc
+ %
+ \edef\pgfplots@glob@TMPc{\expandafter\noexpand\csname end#2axis\endcsname\expandafter\noexpand\csname endpgfplots@environment@#2axis\endcsname}%
+ \expandafter
+ \tikzaddtikzonlycommandshortcutlet\pgfplots@glob@TMPc
+ %
+ % ConTeXt compatibility:
+ \t@pgfplots@toka=\expandafter{\csname #2axis\endcsname}%
+ \t@pgfplots@tokb=\expandafter{\csname end#2axis\endcsname}%
+ \expandafter\edef\csname start#2axis\endcsname{\the\t@pgfplots@toka}%
+ \expandafter\edef\csname stop#2axis\endcsname{\the\t@pgfplots@tokb}%
+}%
+
+\def\pgfplotssetaxistype#1{%
+ \pgfutil@IfUndefined{pgfplots@axistype@#1}{%
+ \pgfplots@error{Sorry, 'axis type=#1' is unknown. Maybe you need to load a proper library first or you misspelled the name? Ignoring it}%
+ }{%
+ \csname pgfplots@axistype@#1\endcsname
+ }%
+}%
+
+% A command which has to be invoked BEFORE \pgfplots@draw@axis to
+% prepare everything.
+\def\pgfplots@draw@axis@pre{%
+ % Preparation for axis lines and discontinuities:
+ \pgfplots@drawaxis@lines@preparediscont@for{x}%
+ \pgfplots@drawaxis@lines@preparediscont@for{y}%
+ \ifpgfplots@threedim
+ \pgfplots@drawaxis@lines@preparediscont@for{z}%
+ \fi
+ \ifpgfplots@threedim
+ \pgfplots@separate@axis@linestrue
+ \else
+ \if\pgfplots@xaxislinesnum0\else
+ \pgfplots@separate@axis@linestrue
+ \fi
+ \if\pgfplots@yaxislinesnum0\else
+ \pgfplots@separate@axis@linestrue
+ \fi
+ \fi
+ % compute tick position lists
+ % \pgfplots@prepared@tick@positions@minor@x
+ % and
+ % \pgfplots@prepared@tick@positions@major@x
+ \ifpgfplots@hide@x\else
+ \expandafter\pgfplots@prepare@tick@coordlists@for\expandafter x\expandafter{\pgfplots@xtick}%
+ \fi
+ \ifpgfplots@hide@y\else
+ \expandafter\pgfplots@prepare@tick@coordlists@for\expandafter y\expandafter{\pgfplots@ytick}%
+ \fi
+ \ifpgfplots@threedim
+ \ifpgfplots@hide@z\else
+ \expandafter\pgfplots@prepare@tick@coordlists@for\expandafter z\expandafter{\pgfplots@ztick}%
+ \fi
+ \fi
+}
+
+\def\pgfplots@draw@axis@is@prepared{}%
+
+% PRECONDITION:
+% \pgfplots@draw@axis@pre has been called.
+\def\pgfplots@draw@axis{%
+ %
+ %
+ %
+%\message{Ok, I am now in pgfplots@draw@axis; ready to do work. Hide flags: hide x = \ifpgfplots@hide@x true\else false\fi; hide y = \ifpgfplots@hide@y true\else false\fi hide z = \ifpgfplots@hide@z true \else false \fi. Vector length: x = \pgfplots@x@veclength (1/x = \pgfplots@x@inverseveclength). y = \pgfplots@y@veclength (1/y = \pgfplots@y@inverseveclength) z = \pgfplots@z@veclength (1/z = \pgfplots@z@inverseveclength)}%
+ \ifpgfplots@threedim
+%\if10
+ \if2\pgfplots@zaxislinesnum
+ % axis z line*=center
+ \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@logical@ZERO@z}{2}%
+ \pgfplots@draw@axis@insurface@symmetric xyz
+ \else
+ % the other cases are handled in
+ % \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn
+ \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@zmin}{0}%
+ \pgfplots@draw@axis@insurface@symmetric xyz
+ %
+ \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@zmax}{1}%
+ \pgfplots@draw@axis@insurface@symmetric xyz
+ \fi
+ %
+%\fi\if10
+ \if2\pgfplots@xaxislinesnum
+ % axis x line*=center
+ \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@logical@ZERO@x}{2}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid yzx
+ \pgfplots@draw@axis@insurface zyx
+ \else
+ \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@xmin}{0}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid yzx
+ \pgfplots@draw@axis@insurface zyx
+ %
+ \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@xmax}{1}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid yzx
+ \pgfplots@draw@axis@insurface zyx
+ \fi
+%\fi\if10
+ %
+ \if2\pgfplots@yaxislinesnum
+ \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@logical@ZERO@y}{2}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid xzy
+ \pgfplots@draw@axis@insurface@onlyticksandgrid zxy
+ \else
+ \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@ymin}{0}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid xzy
+ \pgfplots@draw@axis@insurface@onlyticksandgrid zxy
+ %
+ \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@ymax}{1}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid xzy
+ \pgfplots@draw@axis@insurface@onlyticksandgrid zxy
+ \fi
+%\fi
+ \else
+ % Just use the 2d-point commands (assuming Z=0)
+ \let\pgfplotspointonorientedsurfaceabsetupfor@@xyz=\pgfplotspointonorientedsurfaceabsetupfor@@xy
+ \let\pgfplotspointonorientedsurfaceabsetupfor@@yxz=\pgfplotspointonorientedsurfaceabsetupfor@@yx
+ \pgfplots@draw@axis@insurface@symmetric xyz
+ \fi
+}%
+
+% The complement of \pgfplots@draw@axis which will ALWAYS be drawn on
+% top of every thing else; it complements the rest.
+%
+% This implements only the 3d box=complete feature.
+%
+% PRECONDITION:
+% \pgfplots@draw@axis@pre has been called.
+\def\pgfplots@draw@axis@post{%
+ \ifpgfplots@threedim
+ \if0\pgfplots@threedimbox@choice
+ % 3d box=background
+ \else
+ \if0\pgfplots@xaxislinesnum
+ \else
+ \def\pgfplots@threedimbox@choice{0}%
+ \fi
+ \if0\pgfplots@yaxislinesnum
+ \else
+ \def\pgfplots@threedimbox@choice{0}%
+ \fi
+ \if0\pgfplots@zaxislinesnum
+ \else
+ \def\pgfplots@threedimbox@choice{0}%
+ \fi
+ \if\pgfplots@threedimbox@choice0%
+ \pgfplots@error{Sorry, your choice for '3d box' and 'axis x line' is incompatible.}%
+ \else
+ % 3d box=complete or complete*
+ \pgfplotsgetlayerforstyle{every 3d box foreground}%
+ \pgfplotsonlayer{\pgfplotsretval}{every 3d box foreground}%
+ \begingroup
+ \pgfplots@layered@graphicsfalse% no distinction of layers here.
+ \pgfplotsset{every 3d box foreground}%
+ \let\pgfplots@drawticklabels@onorientedsurf=\relax
+ \if2\pgfplots@threedimbox@choice
+ \def\pgfplots@ifgridlines@onorientedsurf@should@be@drawn##1##2{%
+ ##1%
+ }%
+ \else
+ \let\pgfplots@drawgridlines@onorientedsurf=\relax
+ \fi
+ %
+ \let\pgfplots@drawticklabels@onorientedsurf=\relax
+ %
+ % negate the meaning of this if:
+ \let\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@@ORIG=\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@%
+ \def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@##1##2##3{%
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@@ORIG{##1}{##3}{##2}%
+ }%
+ %
+ % the following code is *almost* the same as if we would
+ % have called
+ % \pgfplots@draw@axis again.
+ % The difference is in the
+ % \pgfplotsifaxissurfaceisforeground checks.
+ % Furthermore, I have removed the case distinctions for
+ % the different axis line combinations.
+ %\if10
+ % axis z line*=box
+ %
+ \pgfplotsifaxissurfaceisforeground{vv0}{%
+ \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@zmin}{0}%
+ \pgfplots@draw@axis@insurface@symmetric xyz
+ }{}%
+ %
+ \pgfplotsifaxissurfaceisforeground{vv1}{%
+ \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@zmax}{1}%
+ \pgfplots@draw@axis@insurface@symmetric xyz
+ }{}%
+ %
+ %\fi\if10
+ % axis x line*=box
+ \pgfplotsifaxissurfaceisforeground{0vv}{%
+ \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@xmin}{0}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid yzx
+ \pgfplots@draw@axis@insurface zyx
+ }{}
+ %
+ \pgfplotsifaxissurfaceisforeground{1vv}{%
+ \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@xmax}{1}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid yzx
+ \pgfplots@draw@axis@insurface zyx
+ }{}
+ %\fi\if11
+ %
+ \pgfplotsifaxissurfaceisforeground{v0v}{%
+ \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@ymin}{0}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid xzy
+ \pgfplots@draw@axis@insurface@onlyticksandgrid zxy
+ }{}%
+ %
+ \pgfplotsifaxissurfaceisforeground{v1v}{%
+ \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@ymax}{1}%
+ \pgfplots@draw@axis@insurface@onlyticksandgrid xzy
+ \pgfplots@draw@axis@insurface@onlyticksandgrid zxy
+ }{}%
+ %\fi
+ \endgroup
+ \endpgfplotsonlayer
+ % end of 3d box=complete
+ \fi
+ \fi
+ \fi
+}%
+
+\def\pgfplots@define@threedim@marks{%
+ \ifpgfplots@threedim
+ % FIXME : there is always the same arithmetics going on here. I could try to optimize it -- for fixed mark size.
+ \pgfdeclareplotmark{cube}
+ {%
+ \pgfplots@cube@gethalf@x
+ \let\pgfplots@cube@halfx=\pgfmathresult
+ \pgfplots@cube@gethalf@y
+ \let\pgfplots@cube@halfy=\pgfmathresult
+ \pgfplots@cube@gethalf@z
+ \let\pgfplots@cube@halfz=\pgfmathresult
+ %
+ \pgfpathmoveto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathclose
+ %
+ \pgfpathmoveto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathclose
+ %
+ \pgfpathmoveto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ %
+ \pgfpathmoveto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ %
+ \pgfpathmoveto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ %
+ \pgfpathmoveto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfusepathqstroke
+ %
+ }%
+ \pgfdeclareplotmark{cube*}
+ {%
+ \pgfplots@cube@gethalf@x
+ \let\pgfplots@cube@halfx=\pgfmathresult
+ \pgfplots@cube@gethalf@y
+ \let\pgfplots@cube@halfy=\pgfmathresult
+ \pgfplots@cube@gethalf@z
+ \let\pgfplots@cube@halfz=\pgfmathresult
+ %
+ \pgfplotsifaxissurfaceisforeground{0vv}{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathclose
+ \pgfusepathqfillstroke
+ }{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathclose
+ \pgfusepathqfillstroke
+ }%
+ \pgfplotsifaxissurfaceisforeground{v0v}{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathclose
+ \pgfusepathqfillstroke
+ }{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathclose
+ \pgfusepathqfillstroke
+ }%
+ \pgfplotsifaxissurfaceisforeground{vv0}{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{-\pgfplots@cube@halfz}}%
+ \pgfpathclose
+ \pgfusepathqfillstroke
+ }{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{-\pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{ \pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{ \pgfplots@cube@halfx}{-\pgfplots@cube@halfy}{ \pgfplots@cube@halfz}}%
+ \pgfpathclose
+ \pgfusepathqfillstroke
+ }%
+ }%
+ \else
+ \pgfdeclareplotmark{cube}{\pgfuseplotmark{square}}%
+ \pgfdeclareplotmark{cube*}{\pgfuseplotmark{square*}}%
+ \fi
+}
+
+% Defines booleans for every surface of the axis cube indicating
+% whether they shall be drawn or not.
+%
+% For 2D, the only available surface is 'vv0' (x=varying; y=varying; z=zmin)
+% For 3D, there are surfaces
+% - 'vv0' 'vv1'
+% - 'v0v' 'v1v'
+% ' '0vv' '1vv'
+%
+% @see \pgfplotspointonorientedsurfaceabmatchaxisline for details
+% about those three-character ids.
+%
+% @PRECONDITION
+%
+% @POSTCONDITION
+% - for every available surface, a macro '\pgfplots@surfviewdepth@CCC'
+% is defined to be either 'f' (foreground) or 'b' (background).
+% Thus, we don't have real TeX booleans, "only" those one-character
+% strings.
+% There are high-level routines to check these flags.
+% - every tick label position will be initialised, i.e. the macros
+% \pgfplots@[xyz]ticklabelaxisspec
+% will be initialised.
+%
+% ABOUT THE ALGORITHM:
+% Given \pgfplots@view@dir@threedim, we know the view direction (in 3D!).
+% Now, we compute the scalar products <n,(1,0,0)'> <n,(0,1,0)'> and
+% <n,(0,0,1)'> between the view direction n and the unit vectors in 3D
+% space. Of course, these scalar products are just specific components
+% of n. Using the sign of the scalar product, we know whether n points
+% roughly into the same or the opposite direction of each unit vector
+% and we can deduce foreground and background side surfaces of the
+% unit cube. The idea is: foreground surfaces won't be drawn, only
+% background surfaces.
+%
+% Given this knowledge, we can also deduce the default axes for tick
+% labels.
+%
+% The operation is relatively fast.
+\def\pgfplots@decide@which@figure@surfaces@are@drawn{%
+ \expandafter\def\csname pgfplots@surfviewdepth@2vv\endcsname{f}%
+ \expandafter\def\csname pgfplots@surfviewdepth@v2v\endcsname{f}%
+ \expandafter\def\csname pgfplots@surfviewdepth@vv2\endcsname{f}%
+ \ifpgfplots@threedim
+ \pgfplotsmathvectortocomponents\pgfplots@view@dir@threedim{pgfplots@loc@}{default}%
+ % respect reversed axes here. If I am not mistaken, it should
+ % be completely sufficient to flip signs here:
+ \pgfplotscoordmath{default}{if is}{\pgfplots@loc@x}{\if\pgfkeysvalueof{/pgfplots/x dir/value}n+\else-\fi}{%
+ \expandafter\def\csname pgfplots@surfviewdepth@0vv\endcsname{f}% foreground
+ \expandafter\def\csname pgfplots@surfviewdepth@1vv\endcsname{b}% background
+ }{%
+ \expandafter\def\csname pgfplots@surfviewdepth@0vv\endcsname{b}%
+ \expandafter\def\csname pgfplots@surfviewdepth@1vv\endcsname{f}%
+ }%
+ \pgfplotscoordmath{default}{if is}{\pgfplots@loc@y}{\if\pgfkeysvalueof{/pgfplots/y dir/value}n+\else-\fi}{%
+ \expandafter\def\csname pgfplots@surfviewdepth@v0v\endcsname{f}% foreground
+ \expandafter\def\csname pgfplots@surfviewdepth@v1v\endcsname{b}% background
+ }{%
+ \expandafter\def\csname pgfplots@surfviewdepth@v0v\endcsname{b}%
+ \expandafter\def\csname pgfplots@surfviewdepth@v1v\endcsname{f}%
+ }%
+ \pgfplotscoordmath{default}{if is}{\pgfplots@loc@z}{\if\pgfkeysvalueof{/pgfplots/z dir/value}n+\else-\fi}{%
+ \expandafter\def\csname pgfplots@surfviewdepth@vv0\endcsname{f}% foreground
+ \expandafter\def\csname pgfplots@surfviewdepth@vv1\endcsname{b}% background
+ }{%
+ \expandafter\def\csname pgfplots@surfviewdepth@vv0\endcsname{b}%
+ \expandafter\def\csname pgfplots@surfviewdepth@vv1\endcsname{f}%
+ }%
+ \else
+ % FIXME : it might be better to implement that stuff here
+ % implicilty using the 3D algorithms.
+ %
+ % this here is the only important one:
+ \expandafter\def\csname pgfplots@surfviewdepth@vv0\endcsname{b}%
+ %
+ \expandafter\def\csname pgfplots@surfviewdepth@0vv\endcsname{b}%
+ \expandafter\def\csname pgfplots@surfviewdepth@1vv\endcsname{f}%
+ \expandafter\def\csname pgfplots@surfviewdepth@v0v\endcsname{b}%
+ \expandafter\def\csname pgfplots@surfviewdepth@v1v\endcsname{f}%
+ \expandafter\def\csname pgfplots@surfviewdepth@vv1\endcsname{f}%
+ \def\pgfplotsifaxislineisonconvexhull##1##2##3{##2}% ALWAYS TRUE
+ \def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@##1##2##3{##2}% ALWAYS TRUE
+ %
+ \fi
+}
+
+% Initialises the 'pgfplots@[xyz]ticklabelaxisspecs' macro according to
+% the foreground/background situation of the axis and the '[xyz]ticklabel pos'
+% keys.
+\def\pgfplots@init@ticklabelaxisspec{%
+ \ifpgfplots@threedim
+ %
+ %
+ % Now, determine which axis line shall get tick labels.
+ % The strategy is as follows:
+ % - only lines on the convex hull of the 2D projected axis
+ % rectangle can get tick labels,
+ % - for each axis, there are two such choices in the general
+ % case,
+ % - for X and Y: prefer the one on the lower side.
+ % - for Z: prefer the one on the left hand side.
+ %
+ \pgfplotspointcenter
+ \edef\pgfplots@tmp@centerx{\the\pgf@x}%
+ \edef\pgfplots@tmp@centery{\the\pgf@y}%
+ %
+ \pgfplots@init@ticklabelaxisspecfor xy%
+ %
+ \pgfplots@init@ticklabelaxisspecfor yy%
+ %
+ \pgfplots@init@ticklabelaxisspecfor zx%
+ \else
+ \pgfplotspointcenter
+ \edef\pgfplots@tmp@centerx{\the\pgf@x}%
+ \edef\pgfplots@tmp@centery{\the\pgf@y}%
+ %
+ \pgfplots@init@ticklabelaxisspec@twodim@for xy%
+ %
+ \pgfplots@init@ticklabelaxisspec@twodim@for yx%
+ \fi
+}%
+
+% A helper method which is to be invoked ONLY inside of
+% \pgfplots@init@ticklabelaxisspec.
+% It does NOT work outside of it.
+%
+% It initialises the 'pgfplots@#1ticklabelaxisspec' macro according to
+% the foreground/background situation of the axis and the '#1ticklabel pos'
+% key.
+%
+% #1: the axis: x,y or z
+% #2: either x or y. It refers to the PROJECTED coordinate which
+% should be used to compare the 'lower' and 'upper' arguments of the
+% |[xyz]ticklabel pos| key.
+%
+% PRECONDITION:
+% \pgfplots@tmp@center[xy] is set.
+%
+% POSTCONDITION:
+% - pgfplots@#1ticklabelaxisspec is set,
+%
+% @see also \pgfplots@init@ticklabelaxisspec@twodim@for
+\def\pgfplots@init@ticklabelaxisspecfor#1#2{%
+ \if#1x%
+ \def\pgfplots@loc@to@threedim##1##2{v##1##2}%
+ \def\pgfplots@loc@axischar@for@first{y}%
+ \else
+ \if#1y%
+ \def\pgfplots@loc@to@threedim##1##2{##1v##2}%
+ \def\pgfplots@loc@axischar@for@first{x}%
+ \else
+ \def\pgfplots@loc@to@threedim##1##2{##1##2v}%
+ \def\pgfplots@loc@axischar@for@first{x}%
+ \fi
+ \fi
+ %
+ % First, compute stuff as if we had a box. Ignore the "center"
+ % styles with a single axis line for now.
+ %
+ \pgfplotsifaxislineisonconvexhull{\pgfplots@loc@to@threedim 00}{%
+ % -> both, v00 or v11 are on CH.
+ %
+ % Decide whether the '{0.5}{0}{0}' point is above or below
+ % the {0.5}{0.5}{0.5}
+ % point. This '<' operation is based on the '#1ticklabel pos'
+ % key, the 2D projection of the axis and the argument '#2'.
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 00}%
+ \pgfqpointscale{0.5}{\csname pgfplotspoint#1axis\endcsname}%
+ \ifdim\csname pgf@#2\endcsname<\csname pgfplots@tmp@center#2\endcsname\relax
+ \if u\csname pgfplots@#1ticklabel@pos\endcsname
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 11}%
+ \fi
+ \else
+ \if l\csname pgfplots@#1ticklabel@pos\endcsname
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 11}%
+ \fi
+ \fi
+ }{%
+ % -> both, v01 or v10 are on CH
+ %--------------------------------------------------
+ % \pgfplotsifaxislineisonconvexhull{\pgfplots@loc@to@threedim 01}{% FIXME : eliminate sanity assertion if possible
+ % }{%
+ % \pgfplots@error{INTERNAL ERROR}%
+ % }%
+ %--------------------------------------------------
+ % Decide whether the '{0.5}{1}{0}' point is above or below
+ % the {0.5}{0.5}{0.5} point. Again, the '<' operation is based
+ % on the '#1ticklabel pos' key, the projection and #2.
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 10}%
+ % compute the middle point on \pgfplots@loc@to@threedim 10
+ \pgfpointadd
+ {\csname pgfplotspoint\pgfplots@loc@axischar@for@first axis\endcsname}
+ {\pgfpointscale{0.5}{\csname pgfplotspoint#1axis\endcsname}}%
+ %
+ \ifdim\csname pgf@#2\endcsname<\csname pgfplots@tmp@center#2\endcsname\relax
+ \if u\csname pgfplots@#1ticklabel@pos\endcsname
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 01}%
+ \fi
+ \else
+ \if l\csname pgfplots@#1ticklabel@pos\endcsname
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 01}%
+ \fi
+ \fi
+ }%
+ %
+ % Now, adapt result to "center" styles:
+ \if2\csname pgfplots@#1axislinesnum\endcsname
+ % axis #1 lines=center .
+ %
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec@box\endcsname{\csname pgfplots@#1ticklabelaxisspec\endcsname}%
+ %
+ % well, for 3d, this implies that all others also have
+ % "center". And since "0" == lower, "1" == upper", "2" ==
+ % center, we have to use center:
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 22}%
+ \fi
+}%
+\def\pgfplots@init@ticklabelaxisspec@twodim@for#1#2{%
+ % First, compute stuff as if we had a box. Ignore the "center"
+ % styles with a single axis line for now.
+ %
+ \if#1x%
+ \def\pgfplots@loc@to@threedim##1{v##10}%
+ \def\pgfplots@loc@axischar@for@first{y}%
+ \else
+ \def\pgfplots@loc@to@threedim##1{##1v0}%
+ \def\pgfplots@loc@axischar@for@first{x}%
+ \fi
+ % Decide whether the '{0.5}{0}' point is above or below
+ % the {0.5}{0.5}
+ % point. This '<' operation is based on the '#1ticklabel pos'
+ % key, the 2D projection of the axis and the argument '#2'.
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 0}%
+ \pgfqpointscale{0.5}{\csname pgfplotspoint#1axis\endcsname}%
+ \ifdim\csname pgf@#2\endcsname<\csname pgfplots@tmp@center#2\endcsname\relax
+ \if u\csname pgfplots@#1ticklabel@pos\endcsname
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 1}%
+ \fi
+ \else
+ %--------------------------------------------------
+ %FIXME : I have the impression that this here is DEPRECATED
+ % \if3\csname pgfplots@#1tickposnum\endcsname % is 'right'
+ % \expandafter\def\csname pgfplots@#1tickposnum\endcsname{1}% set to 'left'
+ % \else
+ % \if1\csname pgfplots@#1tickposnum\endcsname % is 'left'
+ % \expandafter\def\csname pgfplots@#1tickposnum\endcsname{3}% set to 'right'
+ % \fi
+ % \fi
+ %--------------------------------------------------
+ \if l\csname pgfplots@#1ticklabel@pos\endcsname
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 1}%
+ \fi
+ \fi
+ %
+ % Now, adapt result to "center" styles:
+ \if2\csname pgfplots@#1axislinesnum\endcsname
+ % axis #1 lines=center .
+ %
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec@box\endcsname{\csname pgfplots@#1ticklabelaxisspec\endcsname}%
+ %
+ % well, for 3d, this implies that all others also have
+ % "center". And since "0" == lower, "1" == upper", "2" ==
+ % center, we have to use center:
+ \expandafter\edef\csname pgfplots@#1ticklabelaxisspec\endcsname{\pgfplots@loc@to@threedim 2}%
+ \fi
+}%
+
+
+% Processes every tick mark in direction #1 and draws tick lines, tick
+% labels, grid lines, axis lines and extra ticks.
+%
+% #1 : the direction into which tick positions are processed.
+% #2 : the direction in which tick lines and grid lines shall be drawn.
+% #3 : the direction which is currently fixed.
+\def\pgfplots@draw@axis@insurface#1#2#3{%
+ \pgfplots@if{pgfplots@hide@#1}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \pgfplots@drawgridlines@onorientedsurf
+ %
+ \pgfplots@drawticklines@onorientedsurf
+ %
+ \pgfplots@drawaxis@outerlines@separate@onorientedsurf#1#2%
+ \pgfplots@drawaxis@innerlines@onorientedsurf#1#2#3%
+ %
+ \pgfplots@drawticklabels@onorientedsurf
+ %
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+ }%
+}%
+
+% A variant of \pgfplots@draw@axis@insurface which is equivalent to
+% \pgfplots@draw@axis@insurface #1#2#3
+% \pgfplots@draw@axis@insurface #2#1#3
+% with slightly optimized execution sequence.
+\def\pgfplots@draw@axis@insurface@symmetric#1#2#3{%
+ \pgfplots@if{pgfplots@hide@#1}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \pgfplots@drawgridlines@onorientedsurf
+ }%
+ \pgfplots@if{pgfplots@hide@#2}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #2#1#3%
+ \pgfplots@drawgridlines@onorientedsurf
+ }%
+ %
+ \pgfplots@if{pgfplots@hide@#1}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \pgfplots@drawticklines@onorientedsurf
+ }%
+ \pgfplots@if{pgfplots@hide@#2}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #2#1#3%
+ \pgfplots@drawticklines@onorientedsurf
+ }%
+ %
+ \ifpgfplots@separate@axis@lines
+ \pgfplots@if{pgfplots@hide@#1}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \pgfplots@drawaxis@outerlines@separate@onorientedsurf#1#2%
+ \pgfplots@drawaxis@innerlines@onorientedsurf#1#2#3%
+ }%
+ %
+ \pgfplots@if{pgfplots@hide@#2}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #2#1#3%
+ \pgfplots@drawaxis@outerlines@separate@onorientedsurf#2#1%
+ \pgfplots@drawaxis@innerlines@onorientedsurf#2#1#3%
+ }%
+ \else
+ % this happens if and only if d=2 and the axis lines are drawn
+ % as box.
+ \pgfplots@drawaxis@outerlines@cycledpath
+ \fi
+ %
+ \pgfplots@if{pgfplots@hide@#1}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \pgfplots@drawticklabels@onorientedsurf
+ }%
+ \pgfplots@if{pgfplots@hide@#2}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #2#1#3%
+ \pgfplots@drawticklabels@onorientedsurf
+ }%
+ %
+ \pgfplots@if{pgfplots@hide@#1}{\relax}{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+ }%
+ \pgfplots@if{pgfplots@hide@#2}{\relax}{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#2tick\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotspointonorientedsurfaceabsetupfor #2#1#3%
+ \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+ }%
+}%
+
+\def\pgfplots@draw@axis@insurface@onlyticksandgrid#1#2#3{%
+ \pgfplots@if{pgfplots@hide@#1}{\relax}{%
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \pgfplots@drawgridlines@onorientedsurf
+ \pgfplots@drawticklines@onorientedsurf
+ %
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \begingroup
+ \let\pgfplots@drawticklabels@onorientedsurf=\relax
+ \pgfplotspointonorientedsurfaceabsetupfor #1#2#3%
+ \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}%
+ \endgroup
+ \fi
+ }%
+}%
+
+% Handles the 'every 3d description' style.
+%
+% This requires a different type of attention than any other key --
+% because all other keys are set in a context where the dimension of
+% the axis is unknown (it might be 2 or 3 dimensional).
+%
+% The idea is:
+% Call \pgfplots@BEGIN@prepare@description@styles as soon as the
+% dimension is fixed, but before any style changes of the user
+% interface are applied.
+%
+% Example:
+% \begin{axis}[xlabel style={}]
+% will be processed here. The reason: 'every 3d description' will
+% certainly use a different style for axis labels than the default 2d
+% style.
+%
+% Thus, all style changes which are relevant for 'every 3d description'
+% have NOT YET been processed (they have been appended to 'every axis').
+\def\pgfplots@BEGIN@prepare@description@styles{%
+ \ifpgfplots@threedim
+ \pgfplotsset{every 3d description,every 3d view {\pgfkeysvalueof{/pgfplots/view/az}}{\pgfkeysvalueof{/pgfplots/view/el}}/.try}%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/.unknown/.@cmd}\pgfplots@BEGIN@prepare@description@styles@oldhandler
+ \pgfkeysdef{/pgfplots/.unknown}{}% ignore unknown keys here.
+ \pgfkeysactivatefamily{/pgfplots/style commands}%
+ \pgfkeysactivatefamily{/pgfplots/descriptions}%
+%\pgfkeys{/pgfplots/every axis/.show code}%
+ \pgfplots@set@keys@from@tikz@style{every axis}%
+ \pgfkeysdeactivatefamily{/pgfplots/descriptions}%
+ \pgfkeysdeactivatefamily{/pgfplots/style commands}%
+ \pgfkeyslet{/pgfplots/.unknown/.@cmd}\pgfplots@BEGIN@prepare@description@styles@oldhandler
+}%
+
+\newif\ifpgfplots@layered@graphics
+
+
+% Shortcut for '\pgfplotsset{set layers={#1}}'.
+%
+% USAGE:
+% 1. \pgfplotssetlayers{<layer config name>} (one declared with /.define layer set)
+% 2. \pgfplotssetlayers (no braces)
+% 3. \pgfplotssetlayers{<comma-separated-list-of-layers>}
+%
+% This command immediately installs a \pgfsetlayers command. It also prepares following axes.
+% ATTENTION: this might affect tikzpictures as well.
+%
+\def\pgfplotssetlayers{%
+ \pgfutil@ifnextchar\bgroup{\pgfplotssetlayers@}{\pgfplotsset{set layers}}%
+}%
+\def\pgfplotssetlayers@#1{%
+ \pgfplotsset{set layers={#1}}%
+}%
+
+% This method checks if '#1' is a well-known layer set. If that is the case, the layer set is initialized.
+% If there is no such layer set, #1 is assumed to be a comma-separated-list of layer names.
+% These layers are defined if they do not exist already.
+%
+% POSTCONDITION:
+% - a \pgfsetlayers{<list>} is issued (immediately)
+% - '/pgfplots/@set layers arg' is defined such that any following axes can initialized their layers.
+\def\pgfplots@key@set@layers#1{%
+ %
+ % auto detect if '#1' is a defined layer set:
+ \pgfkeysifdefined{#1/list}{%
+ \def\pgfkeyscurrentname{#1}%
+ }{%
+ \pgfkeysifdefined{/pgfplots/layers/#1/list}{%
+ \edef\pgfkeyscurrentname{/pgfplots/layers/#1}%
+ }{%
+ \let\pgfkeyscurrentname\pgfutil@empty
+ }%
+ }%
+ \ifx\pgfkeyscurrentname\pgfutil@empty
+ % OK. The argument is NO layer set configuration.
+ \pgfplots@key@set@layers@{#1}%
+ \pgfkeyslet{/pgfplots/@set layers arg}\pgfutil@empty%
+ \else
+ % OK, The argument is the key name of some '/.define layer set' key.
+ % Remember it for later and initialize the layers:
+ \pgfkeyslet{/pgfplots/@set layers arg}\pgfkeyscurrentname%
+ \pgfkeysgetvalue{\pgfkeyscurrentname/list}\pgfplots@loc@TMPa
+ \expandafter\pgfplots@key@set@layers@\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+}
+% a simple method which (immediately) invokes \pgfsetlayers{#1}.
+%
+% The only difference is that it creates missing layers on-the-fly.
+\def\pgfplots@key@set@layers@#1{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % DEFAULT.
+ \pgfsetlayers{main}%
+ \else
+ \def\pgfplots@loc@TMPb{false}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % "use layers=false"
+ \pgfsetlayers{main}%
+ \else
+ \def\pgfplots@loc@TMPb{main}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % "use layers=main"
+ \pgfsetlayers{main}%
+ \else
+ % declare all layers, and collect the normalised list
+ % into \pgfplots@loc@TMPd
+ \def\pgfplots@loc@TMPd{}%
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplots@loc@TMPa}\as\pgfplots@loc@TMPa{%
+ % normalize argument:
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \expandafter\pgfplotsutil@trim\expandafter{\pgfplots@loc@TMPa}%
+ \let\pgfplots@loc@TMPa=\pgfplotsretval
+ %
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPb{main}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \else
+ \expandafter\pgfdeclarelayer\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+ \edef\pgfplots@loc@TMPd{\ifx\pgfplots@loc@TMPd\pgfutil@empty\else\pgfplots@loc@TMPd,\fi\pgfplots@loc@TMPa}%
+ \fi
+ }%
+ % activate layers:
+ \pgfplots@log3{Setting layers '\pgfplots@loc@TMPd'...}%
+ \expandafter\pgfsetlayers\expandafter{\pgfplots@loc@TMPd}%
+ \fi
+ \fi
+ \fi
+}%
+
+\def\pgfplots@prepare@layered@graphics{%
+ % check if there are no layers at all.
+ \ifpgfplots@layered@graphics
+ \pgfutil@IfUndefined{pgf@layerlist}{%
+ }{%
+ \ifx\pgf@layerlist\pgfutil@empty
+ \pgfplots@layered@graphicsfalse
+ \else
+ \def\pgfplots@loc@TMPa{main}%
+ \ifx\pgf@layerlist\pgfplots@loc@TMPa
+ \pgfplots@layered@graphicsfalse
+ \fi
+ \fi
+ }%
+ \fi
+}%
+
+% #2: context information (for improved error recovery), optional
+\def\pgfplotsonlayer#1{%
+ \pgfutil@ifnextchar\bgroup{\pgfplotsonlayer@{#1}}{\pgfplotsonlayer@{#1}{}}%
+}
+\def\pgfplotsonlayer@#1#2{%
+ \begingroup
+ \def\b@pgfplotsonlayer@started{0}%
+ \ifpgfplots@layered@graphics
+ \edef\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\b@pgfplotsonlayer@started{1}%
+ \pgfonlayer{#1}%
+ \fi
+ \fi
+}%
+\def\endpgfplotsonlayer{%
+ \ifpgfplots@layered@graphics
+ \if1\b@pgfplotsonlayer@started
+ \endpgfonlayer
+ \fi
+ \fi
+ \endgroup
+}%
+
+
+% Searches for the layers of a (set of) style name(s).
+%
+% #1 is a style name like 'every major grid'. It can also be a list of
+% style names.
+%
+% The last "on layer" key found in these styles will be used here.
+%
+% Note that the "on layer" keys have already been extracted in during
+% the key filtering procedure.
+\def\pgfplotsgetlayerforstyle#1{%
+ \let\pgfplotsretval=\pgfutil@empty
+ \ifpgfplots@layered@graphics
+ % this here is the return value:
+ \let\pgfplots@loc@TMPc=\pgfutil@empty
+ %
+ % search list:
+ \pgfplotsutilforeachcommasep{#1}\as\pgfplots@loc@TMPa{%
+ \pgfkeysifdefined{/pgfplots/layers for styles/\pgfplots@loc@TMPa}{%
+ % oh, good: I have already processed the requested
+ % style, and I already know if it has a particular
+ % layer.
+ \pgfkeysgetvalue{/pgfplots/layers for styles/\pgfplots@loc@TMPa}\pgfplots@loc@TMPb
+ }{%
+ % hm. Ok, then process the style. Throw everything
+ % away, keep only the layer.
+ \begingroup
+ \pgfkeyslet{/pgfplots/on layer}\pgfutil@empty
+ \pgfkeysdef{/handlers/.unknown}{}% do nothing
+ \pgfkeysdef{/tikz/.unknown}{}% also, do nothing.
+ \pgfplotsset{#1}% let's hope this works with unknown keys...
+ \pgfkeysgetvalue{/pgfplots/on layer}\pgfplots@loc@TMPb
+ \pgfmath@smuggleone\pgfplots@loc@TMPb
+ \endgroup
+ }%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ % update return value:
+ \let\pgfplots@loc@TMPc=\pgfplots@loc@TMPb
+ \fi
+ }%
+ \let\pgfplotsretval=\pgfplots@loc@TMPc
+%\message{\string\pgfplotsgetlayerforstyle{#1} = '\pgfplotsretval'^^J}%
+ \fi
+}%
+
+% The purpose of this method is to check for the cases where no cell picture is necessary.
+% The idea behind this anchor is to insert the axis DIRECTLY into the embedding tikzpicture, without
+% a posteriori shifting.
+%
+% A posteriori shifting == anchors whose dimensions are not fixed
+% until the complete axis has been "typeset".
+%
+% Disabling the cell picture will still prepare ALL anchors correctly,
+% but it disables many of the anchor choices when it comes to the
+% alignment of the current axis (in other words: other node can align
+% using the anchors of this axis, but this axis cannot be aligned based on its anchors).
+%
+% The motivation for this feature is to implement multi-axis support together with layered graphics.
+%
+% The 'cell picture=false' feature may be interesting for SVG export as
+% well.
+\def\pgfplots@prepare@cell@picture{%
+ \pgfplots@ifcellpicture@required{%
+ \pgfplots@has@cell@picturetrue
+ }{%
+ % cell picture=false or cell picture=if necessary
+ %
+ % anchor processing is special in this case! The standard
+ % anchor processing uses a posteriori shifts. This feature
+ % here REQUIRES a priori shifts.
+ % Prepare special handling for these shifts:
+ \pgfplots@has@cell@picturefalse
+ \edef\pgfplots@anchorname@internal{\pgfplots@anchorname}%
+ %
+ % FIXME : do we need to renormalize this here? apparently
+ % not...
+ %\def\pgfplots@anchorname{image}%
+ %
+ \let\pgfplots@BEGIN@cell@picture=\pgfplots@BEGIN@cell@picture@DISABLED
+ \let\pgfplots@END@cell@picture=\pgfplots@END@cell@picture@DISABLED
+ \def\pgfplots@add@named@child@node##1{}% do nothing here
+ \let\pgfplots@finally@correct@child@node@positions=\relax
+ %
+ % translate the coordinate system before the 'current axis'
+ % node is generated.
+ \expandafter\def\expandafter\pgfplots@beforenode\expandafter{\pgfplots@beforenode
+ \setbox\pgfnodepartimagebox=\hbox{}%
+ }%
+ }%
+}
+
+\long\def\pgfplots@ifcellpicture@required#1#2{%
+ \if1\pgfplots@cell@picture@mode
+ % cell picture=true
+ #1\relax
+ \else
+ % cell picture=false | cell picture=if necessary
+ \edef\pgfplots@shapename{pgfplots@low@level@shape@INNER}%
+ \pgfutil@IfUndefined{pgf@anchor@\pgfplots@shapename @\pgfplots@anchorname}{%
+ % we need to compute the anchor a posteriorily.
+ \if0\pgfplots@cell@picture@mode
+ % cell picture=false is forbidden here...
+ \pgfplots@error{Sorry, 'cell picture=false' is UNSUPPORTED for 'anchor=\pgfplots@anchorname'.}%
+ \fi
+ \if2\pgfplots@cell@picture@mode
+ \pgfplots@log5{'cell picture=if necessary' resulted in 'cell picture=true'}%
+ \fi
+ #1\relax
+ }{%
+ \if2\pgfplots@cell@picture@mode
+ \pgfplots@log5{'cell picture=if necessary' resulted in 'cell picture=false'}%
+ \fi
+ % OK, an a priori anchor is available - we do not really need
+ % a cell picture and this is compatible with the input
+ % options:
+ #2\relax
+ }%
+ \fi
+}%
+
+\def\pgfplots@define@preliminary@current@axis@node{%
+ \begingroup
+ \pgfplots@sys@beforenode
+ % create a leight-weight 'current axis' node for anchor references
+ % (which may happen during both, the axis descriptions or any
+ % path/plot commands).
+ \pgfmultipartnode{pgfplots@low@level@shape@INNER}{image}{current axis}{\pgfusepath{discard}}%
+ \endgroup
+}%
+
+\def\pgfplots@BEGIN@cell@picture[#1]{%
+ %
+ \pgfplots@define@preliminary@current@axis@node
+ %
+ \pgfplotsutil@BEGIN@cell@picture[#1]%
+}%
+\def\pgfplotsutil@BEGIN@cell@picture[#1]{%
+ \setbox\pgfnodepartimagebox=\hbox\bgroup\bgroup
+ \pgfinterruptpicture
+ \tikzpicture[#1]%
+ % set baseline for sub-picture to default value.
+ % the baseline option will be applied to the OUTER picture.
+ \pgfsetbaseline{\pgf@picminy}%
+ \pgfutil@ifundefined{pgfsettrimleft}{}{%
+ \pgfsettrimleft{\pgf@picminx}%
+ \pgfsettrimright{\pgf@picmaxx}%
+ }%
+ \begingroup
+ \pgfgettransformentries\aa\ab\ba\bb\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \xdef\pgfplots@savedtransformshift{%
+ \global\pgf@x=\pgfplots@loc@TMPa\space
+ \global\pgf@y=\pgfplots@loc@TMPb\space
+ }%
+ \xdef\pgfplots@glob@TMPa{{\aa}{\ab}{\ba}{\bb}}%
+ \endgroup
+ \expandafter\pgfsettransformentries\pgfplots@glob@TMPa{0pt}{0pt}%
+}
+
+\def\pgfplotsutil@END@cell@picture#1{%
+ \xdef\pgfplots@cell@picture@remembered{%
+ \ifpgfrememberpicturepositiononpage
+ \noexpand\pgfrememberpicturepositiononpagetrue
+ \else
+ \noexpand\pgfrememberpicturepositiononpagefalse
+ \fi
+ }%
+ \xdef\pgfplots@cell@pictureid{\pgfpictureid}%
+ \endtikzpicture%
+ \begingroup
+ \ifdim\pgf@picmaxx=-16000pt\relax%
+ \pgf@picmaxx=0pt\relax%
+ \pgf@picminx=0pt\relax%
+ \pgf@picmaxy=0pt\relax%
+ \pgf@picminy=0pt\relax%
+ \fi%
+ #1%
+ \endgroup
+ \endpgfinterruptpicture
+ \egroup\egroup% end of pgfnodepartimagebox
+ %
+ % restore any shift transformations provided to an axis.
+ % These would be lost otherwise.
+ \pgftransformshift{\pgfplots@savedtransformshift}%
+ %
+ % allow positioning of colorbars with this hook.
+ % It is \relax unless this here is a color bar axis.
+ % Its intention is to re-define `\pgfplots@at':
+ \pgfplots@colorbar@position@hook%
+ %
+ \pgftransformshift{\pgfplots@at}%
+ %
+}%
+\def\pgfplots@END@cell@picture{%
+ \pgfplotsutil@END@cell@picture{\pgfplots@END@cell@picture@preparepoints}%
+}%
+
+\def\pgfplots@END@cell@picture@preparepoints{%
+ % Protocol sizes for the axis-shape.
+ % That needs to be done globally, do avoid all those
+ % \endgroup's in and after \endpgfinterruptpicture ...
+ %
+ %
+ % \pgfplotspointorigininternal:
+ % used for anchor=<some node inside of the axis> and for
+ % 'cell picture=true' in order to correct remembered node positions:
+ \xdef\pgfplotspointorigininternal{\global\pgf@x=\the\pgf@picminx\space\global\pgf@y=\the\pgf@picminy\space}%
+ %
+ \ifpgfplots@deprecated@anchors
+ \pgfplotspointminminmin
+ \else
+ \pgfplotspointbblowerleft
+ \fi
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@pos@transform\pgf@xa\pgf@ya
+ \advance\pgf@xa by-\pgf@picminx
+ \advance\pgf@ya by-\pgf@picminy
+ \xdef\pgfplotspointlowerleftinnercorner{%
+ \global\pgf@x=\the\pgf@xa\space
+ \global\pgf@y=\the\pgf@ya\space
+ }%
+ %
+ \global\pgf@x=\pgf@picmaxx
+ \global\pgf@y=\pgf@picmaxy
+ \global\advance\pgf@x by-\pgf@picminx
+ \global\advance\pgf@y by-\pgf@picminy
+ \xdef\pgfplotspointupperrightcorner{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ %
+ \pgfplotspointaxisorigin
+ \pgf@pos@transform\pgf@x\pgf@y
+ \global\advance\pgf@x by-\pgf@picminx
+ \global\advance\pgf@y by-\pgf@picminy
+ \xdef\pgfplotspointaxisorigin{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+}
+
+% this here is essentially the same as
+% \pgfpointanchor{current axis}{#1}
+% but it does not need a node.
+\def\pgfplotspointdescriptionbyanchor#1{%
+ \begingroup
+ \edef\pgfplotspointdescriptionbyanchor@{#1}%
+ \gdef\pgfplots@glob@TMPa{0}%
+ % do a linear search through all anchors of
+ % shape pgfplots@low@level@shape@INNER :
+ \def\anchor##1##2{%
+ \def\pgfplots@loc@TMPa{##1}%
+ \ifx\pgfplots@loc@TMPa\pgfplotspointdescriptionbyanchor@
+ \pgf@process{##2}%
+ \gdef\pgfplots@glob@TMPa{1}%
+ \fi
+ }%
+ \pgfplots@low@level@shape@INNER@define
+ \if0\pgfplots@glob@TMPa
+ \pgfplots@error{The anchor '#1' is unsupported in this context.}%
+ \fi
+ \endgroup
+}%
+
+\def\pgfplots@BEGIN@cell@picture@DISABLED[#1]{%
+ \begingroup
+ \pgfinterruptboundingbox
+ %
+ %
+ % allow positioning of colorbars with this hook.
+ % It is \relax unless this here is a color bar axis.
+ % Its intention is to re-define `\pgfplots@at':
+ \pgfplots@colorbar@position@hook%
+ %
+ % prepare a priori anchor transformation (see
+ % \pgfplots@prepare@cell@picture for details):
+ % FIXME : \pgfplotspointdescriptionbyanchor invokes
+ % \pgfplotsqpointdescriptionxy{<x>}{<y>} -- but it is not
+ % merely a direction, it uses an offset. Is that correct!?
+ \pgfqpointscale{-1}{\pgfplotspointdescriptionbyanchor{\pgfplots@anchorname@internal}}%
+ \xdef\pgfplots@anchor@expanded{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ %
+ \scope[%
+ /utils/exec={%
+ % seems that \scope requires this complicated
+ % formulation:
+ \tikz@addtransform{%
+ \pgftransformshift{\pgfplots@cell@picture@DISABLED@shifts}%
+ }%
+ },%
+ #1,%
+ ]%
+ \pgfplots@define@preliminary@current@axis@node
+}%
+\def\pgfplots@END@cell@picture@DISABLED{%
+ \pgfplots@END@cell@picture@preparepoints%
+ \endscope%
+ \endpgfinterruptboundingbox
+ \endgroup
+ \global\let\pgfplots@cell@picture@remembered=\relax
+ \global\let\pgfplots@cell@pictureid=\pgfutil@empty
+ %
+ % we need to re-add these trafos here since the \scope of the
+ % "not-cell-picture" is closed. But not the anchor which has to be
+ % handled by \pgfmultipartnode. See
+ % \pgfplots@cell@picture@DISABLED@shifts
+ \pgftransformshift{\pgfplots@at}%
+}%
+
+\def\pgfplots@cell@picture@DISABLED@shifts{%
+ \pgfpointadd{\pgfplots@at}{\pgfplots@anchor@expanded}%
+}%
+
+\def\pgfplots@BEGIN@init@and@draw@axis{%
+ %
+ %
+ \pgfplots@draw@axis@pre
+ \pgfplots@draw@axis@is@prepared
+ \scope
+ %
+ \pgfkeysgetvalue{/pgfplots/axis background/.@cmd}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@style@key
+ \else
+ \pgfplotsgetlayerforstyle{/pgfplots/axis background,/pgfplots/axis background@}%
+ \pgfplotsonlayer{\pgfplotsretval}{axis background}%
+ \path[/pgfplots/axis background,/pgfplots/axis background@] \pgfextra{\pgfplots@clippath@install{}};%
+ \endpgfplotsonlayer
+ \fi
+ %
+ \ifpgfplots@axis@on@top
+ \else
+ \pgfplots@draw@axis
+ \fi
+ % CLIPPING:
+ \ifpgfplots@clip
+ \if1\pgfplots@clipmode
+ % 'clip=true' and 'clip/mode=global':
+ \pgfplots@clippath@install{\pgfusepath{clip}}%
+ \fi
+ \fi
+ \pgfplotspointbb@assertvaluesexist%
+}
+
+% something which is invoked after a clippath segment is complete.
+% #1 should be something like \pgfusepath{clip}
+\def\pgfplots@clippath@use@#1{%
+ \ifx\pgfplotspoint@bb@@@\relax
+ % remember the axis dimensions:
+ \ifdim\pgf@pathmaxx=-16000pt
+ \else
+ \begingroup
+ \pgf@xa=\pgf@pathmaxx
+ \advance\pgf@xa by-\pgf@pathminx
+ \pgf@ya=\pgf@pathmaxy
+ \advance\pgf@ya by-\pgf@pathminy
+ \xdef\pgfplots@glob@TMPa{{\the\pgf@pathminx}{\the\pgf@pathminy}{\the\pgf@xa}{\the\pgf@ya}}%
+ \endgroup
+ \global\let\pgfplotspoint@bb@@@=\pgfplots@glob@TMPa
+ \fi
+ \fi
+ #1%
+}%
+\def\pgfplots@clippath@prepare@for@axistype{%
+ \ifpgfplots@threedim
+ % FIXME : this can't be done in three dimensions. :-(
+ % -> for 3d, I need to clip at least the 2d projection.
+ %
+ % -> Identify the convex hull of the 2D projection:
+ \pgfplotsifaxissurfaceisforeground{0vv}{%
+ \pgfplotsifaxissurfaceisforeground{v0v}{%
+ \pgfplotsifaxissurfaceisforeground{vv0}{%
+ % ok. Do NOT use the intersection lines
+ % - 00v
+ % - 0v0
+ % - v00
+ % so, use
+ % 010 (01v) 011
+ % 011 (0v1) 001
+ % 001 (v01) 101
+ % 101 (10v) 100
+ % 100 (1v0) 110
+ % 110 (v10) 011 (cycle)
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }{%
+ % foreground surfs: 0vv, v0v, vv1
+ %
+ % ok. Do NOT use the intersection lines
+ % - 00v
+ % - 0v1
+ % - v01
+ % so, use
+ % 010 (01v) 011
+ % 011 (v11) 111
+ % 111 (1v1) 101
+ % 101 (10v) 100
+ % 100 (v00) 000
+ % 000 (0v0) 010 (cycle)
+ \def\pgfplots@clippath@install##1{\relax%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }%
+ }{%
+ \pgfplotsifaxissurfaceisforeground{vv0}{%
+ % foreground surfs: 0vv, v1v, vv0
+ %
+ % ok. Do NOT use the intersection lines
+ % - 01v
+ % - 0v0
+ % - v10
+ % so, use
+ % 000 (00v) 001
+ % 001 (0v1) 011
+ % 011 (v11) 111
+ % 111 (11v) 110
+ % 110 (1v0) 100
+ % 100 (v00) 000 (cycle)
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }{%
+ % foreground surfs: 0vv, v1v, vv1
+ %
+ % ok. Do NOT use the intersection lines
+ % - 01v
+ % - 0v1
+ % - v11
+ % so, use
+ % 000 (00v) 001
+ % 001 (v01) 101
+ % 101 (1v1) 111
+ % 111 (11v) 110
+ % 110 (v10) 010
+ % 010 (0v0) 000 (cycle)
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }%
+ }%
+ }{%
+ \pgfplotsifaxissurfaceisforeground{v0v}{%
+ \pgfplotsifaxissurfaceisforeground{vv0}{%
+ % foreground surfs: 1vv, v0v, vv0.
+ %
+ % Thus: DON'T use the intersection lines
+ % - 10v
+ % - 1v0
+ % - v00
+ % So, use
+ % 110 (11v) 111
+ % 111 (1v1) 101
+ % 101 (v01) 001
+ % 001 (00v) 000
+ % 000 (0v0) 010
+ % 010 (v10) 110 (cycle)
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }{%
+ % foreground surfs: 1vv, v0v, vv1
+ % Thus: DON'T use the intersection lines
+ % - 10v
+ % - 1v1
+ % - v01
+ % So, use
+ % 110 (11v) 111
+ % 111 (v11) 011
+ % 011 (0v1) 001
+ % 001 (00v) 000
+ % 000 (v00) 100
+ % 100 (1v0) 110 (cycle)
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }%
+ }{%
+ \pgfplotsifaxissurfaceisforeground{vv0}{%
+ % foreground surfs: 1vv, v1v, vv0
+ % Thus: DON'T use the intersection lines
+ % - 11v
+ % - 1v0
+ % - v10
+ % So, use
+ % 100 (10v) 101
+ % 101 (1v1) 111
+ % 111 (v11) 011
+ % 011 (01v) 010
+ % 010 (0v0) 000
+ % 000 (v00) 100 (cycle)
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }{%
+ % foreground surfs: 1vv, v1v, vv1
+ % Thus: DON'T use the intersection lines
+ % - 11v
+ % - 1v1
+ % - v11
+ % So, use
+ % 100 (10v) 101
+ % 101 (v01) 001
+ % 001 (0v1) 011
+ % 011 (01v) 010
+ % 010 (v10) 110
+ % 110 (1v0) 100 (cycle)
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmax}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+ }%
+ }%
+ }%
+
+ \else
+ \pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}%
+ \edef\pgfplots@loc@TMPa{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}%
+ \edef\pgfplots@loc@TMPb{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}%
+ \edef\pgfplots@loc@TMPc{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}%
+ \edef\pgfplots@loc@TMPd{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \begingroup
+ \toks0=\expandafter{\pgfplots@loc@TMPa}%
+ \toks1=\expandafter{\pgfplots@loc@TMPb}%
+ \toks2=\expandafter{\pgfplots@loc@TMPc}%
+ \toks3=\expandafter{\pgfplots@loc@TMPd}%
+ \xdef\pgfplots@glob@TMPa##1{%
+ \noexpand\pgfpathmoveto{\the\toks0 }%
+ \noexpand\pgfpathlineto{\the\toks1 }%
+ \noexpand\pgfpathlineto{\the\toks2 }%
+ \noexpand\pgfpathlineto{\the\toks3 }%
+ \noexpand\pgfpathclose
+ \noexpand\pgfplots@clippath@use@{##1}%
+ }%
+ \endgroup
+ \let\pgfplots@clippath@install=\pgfplots@glob@TMPa
+ \fi
+}%
+% Defines \pgfplots@clippath@install.
+% @PRECONDITION the axis limits must be ready.
+\def\pgfplots@clippath@prepare{%
+ \pgfplots@clippath@prepare@for@axistype
+ % now, the \pgfplots@clippath@install routine should be ready.
+ %
+ % it is used to compute the bounding box. prepare that:
+ \global\let\pgfplotspoint@bb@@@=\relax
+ %
+ % Now, I SET the clip path temporarily and record the low level
+ % protocol.
+ % This low level protocol is used to create a highly optimized
+ % clip path routine; it will be used quite often.
+ %
+ \let\pgfplots@clippath@install@pathcmd=\pgfplots@clippath@install
+ \iffalse
+ % FIXME : this was an idea to optimize the installation of the
+ % clip path (cache the protocolled version). FIX IT
+ %
+ \pgf@resetpathsizes% FIXME: this here should not be necessary!
+ \pgfsysprotocol@getcurrentprotocol\pgfplots@loc@TMPa%
+ \begingroup
+ % when I do this work, I can as well compute the bounding
+ % box (done in \pgfplots@clippath@use@)
+ \pgfinterruptboundingbox
+ \pgf@relevantforpicturesizetrue
+ %
+ \pgfsysprotocol@bufferedtrue%
+ \pgfsysprotocol@setcurrentprotocol\pgfutil@empty%
+ % \pgfplots@clippath@install@pathcmd{\pgfusepath{clip}}%
+ \pgfsysprotocol@getcurrentprotocol\pgfplots@loc@TMPa%
+ \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
+ \endpgfinterruptboundingbox
+ \endgroup
+ \let\pgfplots@clippath@install@clip@protocolled=\pgfplots@glob@TMPa
+ \pgfsysprotocol@setcurrentprotocol\pgfplots@loc@TMPa%
+ \fi
+ %
+ % Replace \pgfplots@clippath@install by one which makes use of the
+ % optimized version (if ##1=\pgfusepath{clip})
+ \def\pgfplots@clippath@install##1{%
+ \def\pgfplots@loc@TMPa{##1}%
+ \let\pgfplots@clippath@install@aftergroup=\pgfutil@empty
+ % the 'clip' path has been precomputed because it is often
+ % used: FIXME: unfinished, see above
+ %\expandafter\pgfsys@invoke\expandafter{\pgfplots@clippath@install@clip@protocolled}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@clippath@install@test
+ \if0\pgfplots@clip@BB@mode
+ % clip bounding box=default tikz
+ \else
+ % clip bounding box=upper bound
+ %
+ % do NOT take the clip path into account for the bounding
+ % box! That is very strange when you hide the axis.
+ %
+ % note that we do not need it: the path's BB will be
+ % extracted anyway by this BB code.
+ %
+ % However, we will use the clip path's BB as
+ % *upper bound* - but only after the paths in the
+ % current scope have been completed.
+ % The implementation of this upper bound is hooked
+ % into '\endscope':
+ \edef\pgfplots@clippath@install@aftergroup{%
+ \ifpgf@relevantforpicturesize
+ \noexpand\pgf@relevantforpicturesizetrue
+ \else
+ \noexpand\pgf@relevantforpicturesizefalse
+ \fi
+ \noexpand\pgfplots@clippath@install@BB@upper@bound
+ }%
+ \pgf@relevantforpicturesizefalse
+ %
+ \fi
+ \fi
+ \pgf@resetpathsizes% FIXME: this here should not be necessary!
+ \pgfplots@clippath@install@pathcmd{##1}%
+ \pgfplots@clippath@install@aftergroup
+ }%
+ %
+}%
+\def\pgfplots@clippath@install@test{\pgfusepath{clip}}%
+
+% This is the main part of the implementation for
+% 'clip bounding box=upper bound' : it collects the bounding box of everything inside of
+% the clipped area. Then in the associated \endscope, it clips that bounding box to the expected
+% clip path -- and protocols that size.
+\def\pgfplots@clippath@install@BB@upper@bound{%
+ \tikzset{
+ execute at end scope=\pgfplots@clippath@install@BB@update,
+ %
+ % no special handling for nested scopes:
+ % unnecessary; tikz handles that on its own:
+ %execute at begin scope=\let\pgfplots@clippath@install@BB@update=\relax,
+ }%
+ \pgfinterruptboundingbox
+ % count everything in the current scope into a separate bounding box
+}%
+
+\def\pgfplots@clippath@install@BB@update{%
+ % we are inside of \endscope.
+ %
+ % this here is the BB of the current scope!
+ % More precisely: in *the* scope in which we started the clip
+ % path, not in nested scopes.
+ %
+ \ifdim\pgf@picminx=16000pt %
+ \xdef\pgfplots@glob@TMPa{}%
+ \else
+ \xdef\pgfplots@glob@TMPa{%
+ {\the\pgf@picminx}%
+ {\the\pgf@picminy}%
+ {\the\pgf@picmaxx}%
+ {\the\pgf@picmaxy}%
+ }%
+ \fi
+ \endpgfinterruptboundingbox
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@clippath@install@BB@update@\pgfplots@glob@TMPa
+ \fi
+}%
+
+\def\pgfplots@clippath@install@BB@update@#1#2#3#4{%
+ \pgfqpoint{#1}{#2}%
+ \pgfplots@clip@to@clippath%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+ %
+ \pgfqpoint{#3}{#4}%
+ \pgfplots@clip@to@clippath%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+}%
+
+\def\pgfplots@clip@to@clippath{%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \begingroup\pgf@process{\pgfplotspointbblowerleft\pgf@pos@transform\pgf@x\pgf@y}\endgroup%
+ \ifdim\pgf@xa<\pgf@x \pgf@xa=\pgf@x \fi
+ \ifdim\pgf@ya<\pgf@y \pgf@ya=\pgf@y \fi
+ %
+ \begingroup\pgf@process{\pgfplotspointbbupperright\pgf@pos@transform\pgf@x\pgf@y}\endgroup
+ \ifdim\pgf@xa>\pgf@x \pgf@xa=\pgf@x \fi
+ \ifdim\pgf@ya>\pgf@y \pgf@ya=\pgf@y \fi
+ %
+ \pgfqpoint{\pgf@xa}{\pgf@ya}%
+}%
+
+
+\def\pgfplotspointbb@assertvaluesexist{%
+ \ifx\pgfplotspoint@bb@@@\relax
+ % (RE)COMPUTE:
+ %
+ % Determine tight 2D bounding box for the axis as such:
+ \begingroup
+ % hm. seems as if it is sufficient to set
+ % \pgf@relevantforpicturesizefalse. but it does not hurt; I
+ % will see to it eventually. Perhaps.
+ \pgfinterruptboundingbox
+ \pgf@relevantforpicturesizetrue
+ \pgfplots@clippath@install{\pgfusepath{discard}}
+ \endpgfinterruptboundingbox
+ \endgroup
+ \fi
+}%
+
+% Point commands which expand to the bounding box which contains at
+% least the (projected) visible part of the axis
+\def\pgfplotspointbblowerleft{%
+ \pgfplotspointbb@assertvaluesexist
+ \expandafter\pgfplotspointbblowerleft@\pgfplotspoint@bb@@@
+}%
+\def\pgfplotspointbbupperright{%
+ \pgfpointadd{\pgfplotspointbblowerleft}{\pgfplotspointbbdiagonal}%
+}%
+\def\pgfplotspointbbdiagonal{%
+ \pgfplotspointbb@assertvaluesexist
+ \expandafter\pgfplotspointbbdiagonal@\pgfplotspoint@bb@@@
+}%
+\let\pgfplotspoint@bb@@@=\relax
+\def\pgfplotspointbblowerleft@#1#2#3#4{\global\pgf@x=#1 \global\pgf@y=#2 }%
+\def\pgfplotspointbbdiagonal@#1#2#3#4{\global\pgf@x=#3 \global\pgf@y=#4 }%
+
+% #1: a complete \pgfusepath command what to do with the clip path.
+\def\pgfplots@clippath@install#1{%
+ \pgfplots@error{Can't install a clippath here - the command has not yet been prepared.}%
+}%
+
+
+% Generates a path representing the outline of the axis.
+% Example:
+%
+% \pgfplotspathaxisoutline
+% \pgfusepath{clip}
+\def\pgfplotspathaxisoutline{%
+ \pgfplots@clippath@install{}%
+}%
+
+% This is the counterpart for \pgfplots@BEGIN@init@and@draw@axis
+\def\pgfplots@END@init@and@draw@axis{%
+ \endscope%
+ %
+ \ifpgfplots@axis@on@top
+ \pgfplots@draw@axis
+ \fi
+ \pgfplots@draw@axis@post
+ %
+ \pgfplots@markers@visphase@after@axis
+ \global\pgfplotslistnewempty\pgfplots@stored@plotlist% delete contents.
+ %
+ \begingroup
+ \pgfkeysvalueof{/pgfplots/after end axis/.@cmd}\pgfeov%
+ \endgroup
+ %
+}
+
+% Writes output to \pgfmathresult
+% #1: the tick list (not a macro!)
+% #2: the axis
+\def\pgfplots@filter@input@ticks@with@log#1#2{%
+ \let\pgfplots@glob@TMPa=\pgfutil@empty
+ \foreach \pgfplots@loc@TMPb in {#1} {%
+ \pgfplotscoordmath{float}{parse}{\pgfplots@loc@TMPb}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ %
+ \pgfplotscoordmath{#2}{log}{\pgfplots@loc@TMPb}%
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ \xdef\pgfplots@glob@TMPa{\pgfmathresult}%
+ \else
+ \xdef\pgfplots@glob@TMPa{\pgfplots@glob@TMPa,\pgfmathresult}%
+ \fi
+ }%
+ \let\pgfmathresult=\pgfplots@glob@TMPa
+}
+
+% Writes output to \pgfmathresult
+% #1: the input ticks
+% #2: the transformation command key as macro
+\def\pgfplots@filter@input@ticks@with@highleveltrafo#1#2{%
+ \let\pgfplots@glob@TMPa=\pgfutil@empty
+ \foreach \pgfplots@loc@TMPb in {#1} {%
+ \expandafter#2\expandafter{\pgfplots@loc@TMPb}\pgfeov%
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ \xdef\pgfplots@glob@TMPa{\pgfmathresult}%
+ \else
+ \xdef\pgfplots@glob@TMPa{\pgfplots@glob@TMPa,\pgfmathresult}%
+ \fi
+ }%
+ \let\pgfmathresult=\pgfplots@glob@TMPa
+}
+
+% definition of 'axis cs':
+\tikzdeclarecoordinatesystem{axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface\pgfplots@loc@TMPa,\pgfplots@coord@end}
+\def\pgfplotspointaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface{#1},{#2},\pgfplots@coord@end}%
+\def\pgfplotspointaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface{#1},{#2},{#3},\pgfplots@coord@end}%
+\def\pgfplotsqpointaxisxy#1#2{%
+ \edef\pgfplotspointaxis@restore{%
+ \ifpgfplots@plot@coords@mathparser
+ \noexpand\pgfplots@plot@coords@mathparsertrue
+ \else
+ \noexpand\pgfplots@plot@coords@mathparserfalse
+ \fi
+ }%
+ \pgfplots@plot@coords@mathparserfalse
+ %
+ \pgfplotspointaxisxy{#1}{#2}%
+ %
+ \pgfplotspointaxis@restore
+}
+\def\pgfplotsqpointaxisxyz#1#2#3{%
+ \edef\pgfplotspointaxis@restore{%
+ \ifpgfplots@plot@coords@mathparser
+ \noexpand\pgfplots@plot@coords@mathparsertrue
+ \else
+ \noexpand\pgfplots@plot@coords@mathparserfalse
+ \fi
+ }%
+ \pgfplots@plot@coords@mathparserfalse
+ %
+ \pgfplotspointaxisxyz{#1}{#2}{#3}%
+ %
+ \pgfplotspointaxis@restore
+}
+
+% definition of 'normalized axis cs':
+\tikzdeclarecoordinatesystem{normalized axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface@normalized\pgfplots@loc@TMPa,\pgfplots@coord@end}
+\def\pgfplotspointnormalizedaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface@normalized{#1},{#2},\pgfplots@coord@end}%
+\def\pgfplotspointnormalizedaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface@normalized{#1},{#2},{#3},\pgfplots@coord@end}%
+
+\tikzdeclarecoordinatesystem{axis direction}{%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplots@evalute@tikz@coord@system@interface[ noshift]%
+ #1,\noexpand\pgfplots@coord@end
+ }%
+ \pgfplots@loc@TMPa
+}
+\def\pgfplotspointaxisdirectionxy#1#2{\pgfplots@evalute@tikz@coord@system@interface[ noshift]{#1},{#2},\pgfplots@coord@end}%
+\def\pgfplotspointaxisdirectionxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface[ noshift]{#1},{#2},{#3},\pgfplots@coord@end}%
+
+% rel axis cs:
+\tikzdeclarecoordinatesystem{rel axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface@rel\pgfplots@loc@TMPa,\pgfplots@coord@end}
+\def\pgfplotspointrelaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface@rel{#1},{#2},\pgfplots@coord@end}%
+\def\pgfplotspointrelaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface@rel{#1},{#2},{#3},\pgfplots@coord@end}%
+
+% axis description cs:
+\tikzdeclarecoordinatesystem{axis description}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface@axis@description\pgfplots@loc@TMPa\pgfplots@coord@end}
+\def\pgfplots@evalute@tikz@coord@system@interface@axis@description#1,#2\pgfplots@coord@end{\pgfplotspointdescriptionxy{#1}{#2}}
+
+\def\pgfplotstransformcoordinatex#1{\pgfplots@evalute@tikz@coord@system@interface@for[]{x}{#1}}%
+\def\pgfplotstransformcoordinatey#1{\pgfplots@evalute@tikz@coord@system@interface@for[]{y}{#1}}%
+\def\pgfplotstransformcoordinatez#1{\pgfplots@evalute@tikz@coord@system@interface@for[]{z}{#1}}%
+
+\def\pgfplotstransformdirectionx#1{\pgfplots@evalute@tikz@coord@system@interface@for[ noshift]{x}{#1}}%
+\def\pgfplotstransformdirectiony#1{\pgfplots@evalute@tikz@coord@system@interface@for[ noshift]{y}{#1}}%
+\def\pgfplotstransformdirectionz#1{\pgfplots@evalute@tikz@coord@system@interface@for[ noshift]{z}{#1}}%
+
+\def\pgfplots@declare@mathfunctions{%
+ \pgfmathdeclarefunction{transformdirectionx}{1}{\pgfplotstransformdirectionx{##1}}%
+ \pgfmathdeclarefunction{transformdirectiony}{1}{\pgfplotstransformdirectiony{##1}}%
+ \pgfmathdeclarefunction{transformdirectionz}{1}{\pgfplotstransformdirectionz{##1}}%
+ %
+ \pgfmathdeclarefunction{transformcoordinatex}{1}{\pgfplotstransformcoordinatex{##1}}%
+ \pgfmathdeclarefunction{transformcoordinatey}{1}{\pgfplotstransformcoordinatey{##1}}%
+ \pgfmathdeclarefunction{transformcoordinatez}{1}{\pgfplotstransformcoordinatez{##1}}%
+}%
+
+% Assigns \pgfmathresult := canvas coordinate (#3) for axis #2.
+%
+% A "canvas coordinate" here means an argument for \pgfplotsqpointxyz.
+%
+% #1: a command suffix which will be handed over to the datascale
+% #2: an axis (x,y, or z)
+% #3: the high-level coordinate which should be transformed
+% trafo (typically an empty string)
+\long\def\pgfplots@evalute@tikz@coord@system@interface@for[#1]#2#3{%
+ \pgfkeysgetvalue{/pgfplots/#2 coord trafo/.@cmd}\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key
+ \edef\pgfmathresult{#3}% do not expand it - might contain unexpandable input for coord trafo.
+ \else
+ \pgfplots@loc@TMPc{#3}\pgfeov
+ \fi
+ \ifpgfplots@plot@coords@mathparser
+ \pgfplotscoordmath{default}{parse}{\pgfmathresult}%
+ \fi
+ \let\pgfplots@loc@TMPc=\pgfmathresult% FIXME: is that necessary? I doubt it... but just to make sure...
+ \csname ifpgfplots@#2islinear\endcsname
+ \pgfplotscoordmath{#2}{parsenumber}{\pgfplots@loc@TMPc}%
+ \pgfplots@if{pgfplots@apply@datatrafo@#2}{%
+ \pgfplotscoordmath{#2}{datascaletrafo#1}{\pgfmathresult}%
+ }{}%
+ \else
+ \pgfplotscoordmath{#2}{log}{\pgfplots@loc@TMPc}%
+ \fi
+}
+
+\long\def\pgfplots@evalute@tikz@coord@system@interface@for@normalized[#1]#2#3{%
+ \edef\pgfmathresult{#3}%
+ \pgfplotscoordmath{default}{parse}{\pgfmathresult}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult% FIXME: is that necessary? I doubt it... but just to make sure...
+ \pgfplotscoordmath{#2}{parsenumber}{\pgfplots@loc@TMPc}%
+ \csname ifpgfplots@#2islinear\endcsname
+ \pgfplots@if{pgfplots@apply@datatrafo@#2}{%
+ \pgfplotscoordmath{#2}{datascaletrafo#1}{\pgfmathresult}%
+ }{}%
+ \else
+ % OK, assume it *is* in the normalized format.
+ \fi
+}
+
+\def\pgfplots@evalute@tikz@coord@system@interface{%
+ \begingroup
+ \pgfutil@ifnextchar[%
+ {\pgfplots@evalute@tikz@coord@system@interface@x}%
+ {\pgfplots@evalute@tikz@coord@system@interface@x[]}%
+}
+\def\pgfplots@evalute@tikz@coord@system@interface@x[#1]#2,{%
+ \def\pgfplots@evaluate@tikz@coord@opts{#1}%
+ \def\pgfplots@evaluate@tikz@coord@x{#2}%
+ \pgfplots@evalute@tikz@coord@system@interface@xy%
+}%
+
+\def\pgfplots@evalute@tikz@coord@system@interface@xy#1,{%
+ \def\pgfplots@evaluate@tikz@coord@y{#1}%
+ \pgfutil@ifnextchar\pgfplots@coord@end{%
+ % ah - we have no Z component. ok.
+ \let\pgfplots@evaluate@tikz@coord@z\pgfutil@empty
+ % jump to the end of the state machine:
+ \pgfplots@evalute@tikz@coord@system@interface@@@@@
+ }{%
+ \pgfplots@evalute@tikz@coord@system@interface@xyz
+ }%
+}%
+
+\def\pgfplots@evalute@tikz@coord@system@interface@xyz#1,{%
+ \def\pgfplots@evaluate@tikz@coord@z{#1}%
+ \pgfplots@evalute@tikz@coord@system@interface@@@@@
+}%
+
+% equals only itsself in \ifx:
+\def\pgfplots@coord@end{\pgfplots@coord@end}
+
+\long\def\pgfplots@evalute@tikz@coord@system@interface@@@@@#1\pgfplots@coord@end{%
+ %\begingroup <--- has already been opened at the beginning of the state machine
+ \pgfplots@evalute@tikz@coord@system@interface@tocoords[\pgfplots@evaluate@tikz@coord@opts]%
+ \xdef\pgfplots@glob@TMPa{\pgfplots@evaluate@tikz@coord@x}%
+ \xdef\pgfplots@glob@TMPb{\pgfplots@evaluate@tikz@coord@y}%
+ \xdef\pgfplots@glob@TMPc{\pgfplots@evaluate@tikz@coord@z}%
+ \endgroup
+ \ifx\pgfplots@glob@TMPc\pgfutil@empty
+ \pgfplotsqpointxy{\pgfplots@glob@TMPa}{\pgfplots@glob@TMPb}%
+ \else
+ \pgfplotsqpointxyz{\pgfplots@glob@TMPa}{\pgfplots@glob@TMPb}{\pgfplots@glob@TMPc}%
+ \fi
+}
+
+% Defines \pgfplots@evaluate@tikz@coord@[xyz]
+\def\pgfplots@evalute@tikz@coord@system@interface@tocoords[#1]{%
+ \def\pgfplots@evalute@tikz@coord@@##1##2{%
+ \pgfplots@evalute@tikz@coord@system@interface@for[#1]{##2}{##1}%
+ }%
+ \expandafter\pgfplots@evalute@tikz@coord@@\expandafter{\pgfplots@evaluate@tikz@coord@x}{x}%
+ \let\pgfplots@evaluate@tikz@coord@x=\pgfmathresult
+ \expandafter\pgfplots@evalute@tikz@coord@@\expandafter{\pgfplots@evaluate@tikz@coord@y}{y}%
+ \let\pgfplots@evaluate@tikz@coord@y=\pgfmathresult
+ %
+ \ifx\pgfplots@evaluate@tikz@coord@z\pgfutil@empty
+ \else
+ \expandafter\pgfplots@evalute@tikz@coord@@\expandafter{\pgfplots@evaluate@tikz@coord@z}{z}%
+ \let\pgfplots@evaluate@tikz@coord@z=\pgfmathresult
+ \fi
+}%
+
+\def\pgfplots@evalute@tikz@coord@system@interface@rel{%
+ \begingroup
+ \let\pgfplots@evalute@tikz@coord@system@interface@@@@@=\pgfplots@evalute@tikz@coord@system@interface@@@@@rel
+ \pgfutil@ifnextchar[%
+ {\pgfplots@evalute@tikz@coord@system@interface@x}%
+ {\pgfplots@evalute@tikz@coord@system@interface@x[]}%
+}
+
+\long\def\pgfplots@evalute@tikz@coord@system@interface@@@@@rel#1\pgfplots@coord@end{%
+ %\begingroup <--- has already been opened at the beginning of the state machine
+ \pgfkeys{/pgf/fpu=false}%
+ \pgfmathparse{\pgfplots@evaluate@tikz@coord@x}%
+ \let\pgfplots@evaluate@tikz@coord@x=\pgfmathresult
+ \pgfmathparse{\pgfplots@evaluate@tikz@coord@y}%
+ \let\pgfplots@evaluate@tikz@coord@y=\pgfmathresult
+ \ifx\pgfplots@evaluate@tikz@coord@z\pgfutil@empty
+ \else
+ \pgfmathparse{\pgfplots@evaluate@tikz@coord@z}%
+ \let\pgfplots@evaluate@tikz@coord@z=\pgfmathresult
+ \fi
+ %
+ \pgfplotspointxaxis
+ \pgf@xx=\pgf@x
+ \pgf@xy=\pgf@y
+ %
+ \pgfplotspointyaxis
+ \pgf@yx=\pgf@x
+ \pgf@yy=\pgf@y
+ %
+ \ifpgfplots@allow@reversal@of@rel@axis@cs
+ \if\pgfkeysvalueof{/pgfplots/x dir/value}r%
+ \pgf@xa=-\pgfplots@evaluate@tikz@coord@x pt
+ \advance\pgf@xa by1pt
+ \edef\pgfplots@evaluate@tikz@coord@x{\pgf@sys@tonumber\pgf@xa}%
+ \fi
+ \if\pgfkeysvalueof{/pgfplots/y dir/value}r%
+ \pgf@xa=-\pgfplots@evaluate@tikz@coord@y pt
+ \advance\pgf@xa by1pt
+ \edef\pgfplots@evaluate@tikz@coord@y{\pgf@sys@tonumber\pgf@xa}%
+ \fi
+ \fi
+ %
+ \ifx\pgfplots@evaluate@tikz@coord@z\pgfutil@empty
+ \pgfpointadd
+ {\pgfplotspointminminmin}%
+ {\pgfplotsqpointxy{\pgfplots@evaluate@tikz@coord@x}{\pgfplots@evaluate@tikz@coord@y}}%
+ \else
+ \ifpgfplots@allow@reversal@of@rel@axis@cs
+ \if\pgfkeysvalueof{/pgfplots/z dir/value}r%
+ \pgf@xa=-\pgfplots@evaluate@tikz@coord@z pt
+ \advance\pgf@xa by1pt
+ \edef\pgfplots@evaluate@tikz@coord@z{\pgf@sys@tonumber\pgf@xa}%
+ \fi
+ \fi
+ \pgfplotspointzaxis
+ \pgf@zx=\pgf@x
+ \pgf@zy=\pgf@y
+ \pgfpointadd
+ {\pgfplotspointminminmin}%
+ {\pgfplotsqpointxyz{\pgfplots@evaluate@tikz@coord@x}{\pgfplots@evaluate@tikz@coord@y}{\pgfplots@evaluate@tikz@coord@z}}%
+ \fi
+ \pgf@process{}%
+ \endgroup
+}
+
+\def\pgfplots@evalute@tikz@coord@system@interface@normalized{%
+ \begingroup
+ \let\pgfplots@evalute@tikz@coord@system@interface@for=\pgfplots@evalute@tikz@coord@system@interface@for@normalized
+ \pgfutil@ifnextchar[%
+ {\pgfplots@evalute@tikz@coord@system@interface@x}%
+ {\pgfplots@evalute@tikz@coord@system@interface@x[]}%
+}
+
+% In case of (semi-) logplots, this command will
+% - assign a filter which invokes \pgfmathlog@{} for each coordinate
+% - replace any user-specified coordinate by its log.
+%
+% All subsequent commands will then work with logarithmic coordinates.
+%
+% PRECONDITION:
+% - The user input options have been set correctly,
+% - the options have been set, but are not applied
+%
+% POSTCONDITION:
+% - any user input has been parsed
+% - any user input for log-axis has been replaced by its log if
+% necessary
+% - coordinate filters are prepared
+%
+% See also:
+% \pgfplots@check@and@apply@datatrafo@for
+\def\pgfplots@prepare@coord@filtering@for#1{%
+ \pgfkeysgetvalue{/pgfplots/#1 coord trafo/.@cmd}\pgfplots@loc@TMPc
+ \expandafter\let\csname pgfplots@highlevel@trafo@#1\endcsname=\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key
+ % no high-level external coord trafos.
+ % Simply use identity:
+ \expandafter\def\csname pgfplots@prepare@#1coord\endcsname##1{%
+ \edef\pgfmathresult{##1}%
+ }%
+ \else
+ % Apply external coordinate trafo to all input values:
+ \expandafter\edef\csname pgfplots@prepare@#1coord\endcsname##1{%
+ % do not expand it here - might contain unexpandable
+ % material which is processed by the #1 coord trafo:
+ % FIXME : this might produce an endless loop if ##1 = \pgfmathresult!
+ \noexpand\def\noexpand\pgfmathresult{##1}%
+ % this becomes
+ \expandafter\noexpand\csname pgfplots@highlevel@trafo@#1\endcsname{##1}\noexpand\pgfeov
+ %
+ % ensure that it is expanded.
+ \noexpand\edef\noexpand\pgfmathresult{\noexpand\pgfmathresult}%
+ }%
+ %
+ % The transformation is now \pgfplots@loc@TMPc
+ %
+ % any user-specified axis limits:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1min\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@loc@TMPc\expandafter{\pgfplots@loc@TMPa}\pgfeov%
+ \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult
+ \fi
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1max\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@loc@TMPc\expandafter{\pgfplots@loc@TMPa}\pgfeov%
+ \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult
+ \fi
+ %
+ % any user-specified tick limits:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmin\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@loc@TMPc\expandafter{\pgfplots@loc@TMPa}\pgfeov%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmin\endcsname=\pgfmathresult
+ \fi
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmax\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@loc@TMPc\expandafter{\pgfplots@loc@TMPa}\pgfeov%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult
+ \fi
+ %
+ % any user specified axis ticks:
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@#1tick\endcsname}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPb{data}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % #1tick=data is handled elsewhere...
+ \else
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tick\endcsname
+ \expandafter\pgfplots@filter@input@ticks@with@highleveltrafo\expandafter{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPc}%
+ \expandafter\edef\csname pgfplots@#1tick\endcsname{\pgfmathresult}%
+ \fi
+ \fi
+ %
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@filter@input@ticks@with@highleveltrafo\expandafter{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPc}%
+ \expandafter\edef\csname pgfplots@extra@#1tick\endcsname{\pgfmathresult}%
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@filter@input@ticks@with@highleveltrafo\expandafter{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPc}%
+ \pgfkeyslet{/pgfplots/minor #1tick}\pgfmathresult
+ \fi
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/#1filter}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\let\csname pgfplots@#1filter@backwcompat\endcsname=\pgfplots@loc@TMPa
+ \t@pgfplots@tokc={/pgfplots/#1filter is deprecated. Please use /pgfplots/#1 filter/.code={\def\pgfmathresult{\#1}}}%
+ \pgfplots@warning{\the\t@pgfplots@tokc}%
+ \pgfkeys{/pgfplots/#1 filter/.code={\csname pgfplots@#1filter@backwcompat\endcsname{##1}\to\pgfmathresult}}%
+ \fi
+ \csname ifpgfplots@#1islinear\endcsname
+ \pgfplotssetcoordmathfor{#1}{float}%
+ \csname pgfplots@apply@datatrafo@#1true\endcsname
+ \pgfplots@apply@datatrafotrue
+ \ifpgfplots@apply@datatrafo
+ % Check for any existing axis limits:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1min\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult
+ \fi
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1max\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult
+ \fi
+ % Check for any existing tick limits:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmin\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmin\endcsname=\pgfmathresult
+ \fi
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmax\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult
+ \fi
+ \fi
+ \else
+ \pgfplotssetcoordmathfor{#1}{pgfbasic}%
+ %
+ % This here could be done using a high level coord trafo as
+ % well! However, I don't want to risk accidentally overwritten
+ % keys, so I replicate it here.
+ \pgfplots@if{pgfplots@disablelogfilter@#1}{\relax}{%
+ % Prepare the log to use for axis '#1'.
+ %
+ \pgfkeysgetvalue{/pgfplots/log basis #1}\pgfplots@loc@TMPa%
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \def\pgfplots@loc@TMPb{e}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ % log basis x=e : same as empty value.
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \fi
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % log basis x={} (initial setting:)
+ \else
+ % use a different basis.
+ \pgfplotscoordmath{#1}{set log basis}{\pgfplots@loc@TMPa}%
+ %
+ % generate default ticks in the 'log basis', not base 10:
+ \pgfplotsset{/pgfplots/log basis ticks=#1}%
+ %
+ \ifdim\pgfkeysvalueof{/pgfplots/log basis #1}pt=10pt
+ \else
+ \pgfplots@identify@log@minor@tick@posfalse
+ \csname pgfplots@#1minorticksfalse\endcsname
+ \csname pgfplots@#1minorgridsfalse\endcsname
+ \expandafter\def\csname pgfplots@#1minortickstrue\endcsname{\pgfplots@error{Sorry, minor ticks are not supported for this log basis.}}%
+ \expandafter\def\csname pgfplots@#1minorgridstrue\endcsname{\pgfplots@error{Sorry, minor grid lines are not supported for this log basis.}}%
+ \fi
+ \pgfkeyslet{/pgfplots/log basis #1/.@cmd}\pgfplots@cant@set@in@this@context
+ %%%
+ % Ok, now, I have prepared everything for the new
+ % log basis!
+ \fi
+ %
+ % any user-specified axis limits:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1min\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{default}{parse}{\pgfplots@loc@TMPa}%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{%
+ }{%
+ \pgfplotswarning{illegal user argument in log axis}{#1min}{\csname pgfplots@#1min\endcsname}\pgfeov%
+ }%
+ \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult
+ \fi
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1max\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{default}{parse}{\pgfplots@loc@TMPa}%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{%
+ }{%
+ \pgfplotswarning{illegal user argument in log axis}{#1max}{\csname pgfplots@#1max\endcsname}\pgfeov%
+ }%
+ \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult
+ \fi
+ %
+ % any user-specified tick limits:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmin\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{log}{\pgfplots@loc@TMPa}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmin\endcsname=\pgfmathresult
+ \fi
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmax\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotscoordmath{#1}{log}{\pgfplots@loc@TMPa}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult
+ \fi
+ %
+ % any user specified axis ticks:
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@#1tick\endcsname}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPb{data}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % #1tick=data is handled elsewhere...
+ \else
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tick\endcsname
+ \expandafter\pgfplots@filter@input@ticks@with@log\expandafter{\pgfplots@loc@TMPa}{#1}%
+ \expandafter\edef\csname pgfplots@#1tick\endcsname{\pgfmathresult}%
+ \fi
+ \fi
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@filter@input@ticks@with@log\expandafter{\pgfplots@loc@TMPa}{#1}%
+ \expandafter\edef\csname pgfplots@extra@#1tick\endcsname{\pgfmathresult}%
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@filter@input@ticks@with@log\expandafter{\pgfplots@loc@TMPa}{#1}%
+ \pgfkeyslet{/pgfplots/minor #1tick}\pgfmathresult
+ \fi
+ %
+ % append logarithm to prepare coord.
+ %
+ \t@pgfplots@toka={%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfplots@if{pgfplots@disablelogfilter@#1}{%
+ \pgfplotscoordmath{#1}{parsenumber}{\pgfmathresult}%
+ % FIXME : check for unbounded arguments!
+ }{%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{}{%
+ \def\pgfplots@unbounded@dir{#1}%
+ }%
+ }%
+ \fi
+ }%
+ \pgfkeysgetvalue{/pgfplots/#1 coord trafo/.@cmd}\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key
+ \expandafter\edef\csname pgfplots@prepare@#1coord\endcsname##1{%
+ \noexpand\edef\noexpand\pgfmathresult{##1}%
+ \the\t@pgfplots@toka
+ }%
+ \else
+ % This is a bit complicated... but it works: APPEND
+ % the log stuff to the existing prepare method.
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{%
+ \csname pgfplots@prepare@#1coord\endcsname{##1}%
+ }%
+ \expandafter\edef\csname pgfplots@prepare@#1coord\endcsname##1{%
+ \the\t@pgfplots@tokb
+ \the\t@pgfplots@toka
+ }%
+ \fi
+ }%
+ \fi
+}
+
+\def\pgfplots@create@axis@descriptions{%
+ \begingroup
+ %
+ \pgfplots@change@pgfpoints@to@descriptioncs
+ %
+ \pgfplots@create@axis@descriptions@
+ \endgroup
+}
+
+\def\pgfplots@create@axis@descriptions@{%
+ \begingroup
+ \ifpgfplots@hide@x
+ \else
+ \ifpgfplots@units@use%
+ \pgfplots@show@label{x}{\pgfplots@label@units{x}}%
+ \else%
+ \pgfkeysgetvalue{/pgfplots/xlabel}{\pgfplots@label@}%
+ \ifx\pgfplots@label@\pgfutil@empty
+ \else
+ \pgfplots@show@label{x}{\pgfplots@label@}%
+ \fi
+ \fi
+ \fi
+ \ifpgfplots@hide@y
+ \else
+ \ifpgfplots@units@use%
+ \pgfplots@show@label{y}{\pgfplots@label@units{y}}%
+ \else%
+ \pgfkeysgetvalue{/pgfplots/ylabel}{\pgfplots@label@}%
+ \ifx\pgfplots@label@\pgfutil@empty
+ \else
+ \pgfplots@show@label{y}{\pgfplots@label@}%
+ \fi
+ \fi
+ \fi
+ \ifpgfplots@threedim
+ \ifpgfplots@hide@z
+ \else
+ \ifpgfplots@units@use%
+ \pgfplots@show@label{z}{\pgfplots@label@units{z}}%
+ \else%
+ \pgfkeysgetvalue{/pgfplots/zlabel}{\pgfplots@label@}%
+ \ifx\pgfplots@label@\pgfutil@empty
+ \else
+ \pgfplots@show@label{z}{\pgfplots@label@}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \endgroup
+ %
+ \pgfkeysgetvalue{/pgfplots/title}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@show@title\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+ \pgfplots@createlegend
+ %
+ \pgfkeysvalueof{/pgfplots/extra description/.@cmd}\pgfeov%
+ %
+}
+
+% Invokes '#1' foreach key which should be saved by a color bar.
+%
+% The current key name is available as '##1', the macro under which
+% the key is / should be saved as '##2'.
+\def\pgfplots@colorbar@foreach@saved@key#1{%
+ \def\pgfplots@colorbar@foreach@saved@key@body##1##2{#1}%
+ \pgfplotsutilforeachcommasep{%
+ {/pgfplots/colorbar/draw/.@cmd}\pgfplots@savedstyle@colorbar@draw,%
+ {/pgfplots/every colorbar/.@cmd}\pgfplots@savedstyle@colorbar,%
+ {/pgfplots/colorbar shift/.@cmd}\pgfplots@savedstyle@colorbarshift,%
+ {/pgfplots/colorbar horizontal/lowlevel/.@cmd}\pgfplots@savedstyle@colorbar@horizontal,%
+ {/pgfplots/colorbar vertical/lowlevel/.@cmd}\pgfplots@savedstyle@colorbar@vertical,%
+ {/pgfplots/every tick/.@cmd}\pgfplots@savedstyle@tick,%
+ {/pgfplots/every minor tick/.@cmd}\pgfplots@savedstyle@minortick,%
+ {/pgfplots/every major tick/.@cmd}\pgfplots@savedstyle@majortick,%
+ {/pgfplots/every axis grid/.@cmd}\pgfplots@savedstyle@grid,%
+ {/pgfplots/every minor grid/.@cmd}\pgfplots@savedstyle@minorgrid,%
+ {/pgfplots/every major grid/.@cmd}\pgfplots@savedstyle@majorgrid,%
+ {/pgfplots/every tick label/.@cmd}\pgfplots@savedstyle@ticklabel,%
+ {/pgfplots/every tick label/.@cmd}\pgfplots@savedstyle@ticklabel%
+ }%
+ \as\pgfplots@colorbar@foreach@saved@key@@
+ {%
+ \expandafter\pgfplots@colorbar@foreach@saved@key@body\pgfplots@colorbar@foreach@saved@key@@
+ }%
+}%
+\def\pgfplots@colorbar@restore@saved@keys{%
+ \pgfplots@colorbar@foreach@saved@key{%
+ \pgfkeyslet{##1}##2%
+ }%
+}%
+
+% Defines '#1' to be a macro which, upon execution, draws the color
+% bar for the current axis. It also handles any required style
+% inheritance and option preparation issues.
+%
+% The important thing is: the macro is expected to be invoked after
+% the current TeX group (scope). Thus, the complete state is
+% represented inside of '#1' (and maybe some global variables).
+\def\pgfplots@colorbar@move@outside@scope@with@globalmacro#1{%
+ \pgfplotspointbbdiagonal
+ \edef\pgfplots@loc@TMPa{\the\pgf@x}%
+ \edef\pgfplots@loc@TMPb{\the\pgf@y}%
+ \pgfkeyslet{/pgfplots/parent axis width}{\pgfplots@loc@TMPa}%
+ \pgfkeyslet{/pgfplots/parent axis height}{\pgfplots@loc@TMPb}%
+ %
+ \pgfkeysgetvalue{/pgfplots/colorbar to name}\pgfplots@colorbar@toname
+ %
+ \pgfnodealias{parent axis}{current axis}%
+ %
+ % FIXME :
+ % I would really prefer to find a different way to move these
+ % variables out of the current scope. But expansion leads to
+ % mistakes with '#' characters ... :-(
+ \pgfplots@colorbar@foreach@saved@key{%
+ \pgfkeysgetvalue{##1}\pgfplots@loc@TMPa
+ \global\let##2=\pgfplots@loc@TMPa
+ }%
+ %
+ \toks1={}%
+ \ifx\pgfplots@colorbar@toname\pgfutil@empty
+ \else
+ \toks1={%
+ \pgfplots@colorbar@get@rid@of@at@parent@axis
+ }%
+ \pgfplots@colorbar@foreach@saved@key{%
+ \pgfplots@command@with@args@to@string##2\pgfplots@loc@TMPa
+ \pgfplots@auxwrite{%
+ \noexpand\expandafter
+ \noexpand\long
+ \noexpand\expandafter
+ \noexpand\gdef
+ \noexpand\csname pgfplots@colorbar@\pgfplots@colorbar@toname @\noexpand\string\noexpand##2\noexpand\endcsname%
+ \pgfplots@loc@TMPa
+ }%
+ \edef\pgfplots@loc@TMPa{%
+ \the\toks1
+ \noexpand\expandafter
+ \noexpand\let
+ \noexpand\expandafter
+ \noexpand##2%
+ \noexpand\csname pgfplots@colorbar@\pgfplots@colorbar@toname @\noexpand\string\noexpand##2\noexpand\endcsname%
+ }%
+ \toks1=\expandafter{\pgfplots@loc@TMPa}%
+ }%
+ \fi
+ % %
+ % we have to do a lot of work to move *some* of the current
+ % settings out of the current TeX group:
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@loc@TMPa
+ \expandafter\pgfplotscolormapserializetomacro\expandafter{\pgfplots@loc@TMPa}{\pgfplots@serializedcolormap}%
+ \toks0=\expandafter{\pgfplots@serializedcolormap}%
+ %
+ \pgfkeysgetvalue{/pgfplots/colorbar addplot}\pgfplots@loc@TMPa
+ \toks2=\expandafter{\pgfplots@loc@TMPa}%
+ %
+ \ifx\pgfplots@colorbar@src@metamin\pgfutil@empty
+ \global\let\pgfplots@colorbar@src@metamin=\pgfplots@axiswide@metamin
+ \global\let\pgfplots@colorbar@src@metamax=\pgfplots@axiswide@metamax
+ \fi
+ %
+ \ifx\pgfplots@colorbar@src@metamax\pgfplots@invalidrange@metamax
+ \pgfplotswarning{colorbar uninitialised}\pgfeov
+ \pgfmathfloatparsenumber{0}%
+ \global\let\pgfplots@colorbar@src@metamin=\pgfmathresult
+ \pgfmathfloatparsenumber{1}%
+ \global\let\pgfplots@colorbar@src@metamax=\pgfmathresult
+ \fi
+ %
+ % normalize format:
+ \pgfplotscoordmath{meta}{tostring}{\pgfplots@colorbar@src@metamin}%
+ \global\let\pgfplots@colorbar@src@metamin=\pgfmathresult
+ \pgfplotscoordmath{meta}{tostring}{\pgfplots@colorbar@src@metamax}%
+ \global\let\pgfplots@colorbar@src@metamax=\pgfmathresult
+ %
+ \pgfplots@assemble@ref@picture
+ {\pgfplots@colorbar@draw}
+ {\tikz[/pgfplots/every colorbar to name picture/.try]{\pgfplots@colorbar@draw}}%
+ \toks3=\expandafter{\pgfplotsretval}%
+ %
+ \xdef#1{%
+ \noexpand\begingroup
+ \noexpand\def\noexpand\pgfplots@colorbar@draw{%
+ \the\toks0 % restore colormap definition
+ \noexpand\def\noexpand\pgfplots@colorbar@toname{\pgfplots@colorbar@toname}%
+ \the\toks1 % definitions for 'colorbar to name'
+ %
+ % restore relevant styles and variables:
+ \noexpand\pgfplots@colorbar@restore@saved@keys
+ \noexpand\pgfkeyssetvalue{/pgfplots/point meta min}{\pgfplots@colorbar@src@metamin}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/point meta max}{\pgfplots@colorbar@src@metamax}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/colormap name}{\pgfkeysvalueof{/pgfplots/colormap name}}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/parent axis width}{\pgfkeysvalueof{/pgfplots/parent axis width}}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/parent axis height}{\pgfkeysvalueof{/pgfplots/parent axis height}}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/colorbar/width}{\pgfkeysvalueof{/pgfplots/colorbar/width}}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/colorbar addplot}{\the\toks2 }%
+ \noexpand\def\noexpand\pgfplots@colormap@access{\pgfplots@colormap@access}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/colorbar pos*}{\pgfkeysvalueof{/pgfplots/colorbar pos*}}%
+ % just to make sure that colorbar sampled respects it:
+ \noexpand\pgfkeyssetvalue{/pgfplots/mark list fill}{\pgfkeysvalueof{/pgfplots/mark list fill}}%
+ \noexpand\pgfplots@colorbar@define@hook%
+ \noexpand\pgfplots@colorbar@draw@
+ \ifx\pgfplots@colorbar@toname\pgfutil@empty
+ \noexpand\pgfnodealias{current colorbar axis}{current axis}%
+ \noexpand\pgfnodealias{current axis}{parent axis}%
+ \fi
+ }%
+ \the\toks3
+ \noexpand\endgroup
+ }%
+ \ifx\pgfplots@colorbar@toname\pgfutil@empty
+ \else
+ % finalize the 'colorbar to name' feature
+ \toks0=\expandafter{#1}%
+ \pgfplots@auxwrite{%
+ \noexpand\expandafter
+ \noexpand\gdef\noexpand\csname pgfplots@colorbar@to@name@\pgfplots@colorbar@toname\endcsname{\the\toks0}}%
+ \xdef#1{}% NOP.
+ %
+ % make sure \ref{<colorbarname>} works:
+ \pgfplots@label{\pgfplots@colorbar@toname}{pgfplots@colorbar@to@name@}%
+ \fi
+}%
+
+\newif\ifpgfplotscolorbarCMYKworkaround
+\pgfplotscolorbarCMYKworkaroundtrue
+
+\def\pgfplots@colorbar@draw@reconfigure@if@needed@legacy{%
+ \pgfkeysgetvalue{/pgfplots/colorbar/draw/.@cmd}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@colorbar@draw@legacyimpl
+ \begingroup
+ \pgfkeysalso{/pgfplots/.search also=/tikz}%
+ % we need to activate this style because the decision
+ % below may depend on it (and will, for example for
+ % contour filled)
+ \pgfplotsset{every colorbar}%
+ \pgfplots@init@collect@firstplotastick%
+ %
+ % Ah-- the default colorbar implementation is active! We may need to substitute it by a better one.
+ % Check that:
+ \def\b@pgfplots@colorbar@fallback@to@sampled{0}%
+ %
+ \ifpgfplots@collect@firstplot@astick
+ % xtick={data} requires samples:
+ % see also call hierarchy of \pgfplots@colorbar@positions@to@samplesat
+ \def\b@pgfplots@colorbar@fallback@to@sampled{1}%
+ \fi
+ %
+ \ifpgfplotscolorbarCMYKworkaround
+ % the default implementation for colorbars is based on
+ % \pgfplotscolormaptoshadingspec.
+ % This, in turn, does NOT work for CMYK.
+ %
+ % This here detects that case and switches to the (visually)
+ % equivalent 'colorbar sampled={surf,shader=interp}' style.
+ \if1\pgfplotscolormaptoshadingspectorgb
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@loc@TMPb
+ \pgfplotscolormapgetcolorspace{\pgfplots@loc@TMPb}%
+ \def\pgfplots@loc@TMPa{cmyk}%
+ \ifx\pgfplots@loc@TMPa\pgfplotsretval
+ \pgfutil@ifundefined{pgfplots@colorbar@CMYK@\pgfplots@loc@TMPb}{%
+ \pgfplotswarning{colorbar CMYK unsupported}{\pgfplots@loc@TMPb}\pgfeov%
+ \expandafter\gdef\csname pgfplots@colorbar@CMYK@\pgfplots@loc@TMPb\endcsname{1}%
+ }{}%
+ \def\b@pgfplots@colorbar@fallback@to@sampled{1}%
+ \fi
+ \fi
+ \fi
+ %
+ \if c\pgfplots@colormap@access
+ % colormap access=piecewise constant
+ % In this case, we want a sampled colorbar.
+ \def\b@pgfplots@colorbar@fallback@to@sampled{1}%
+ %
+ \fi
+ \pgfmath@smuggleone\b@pgfplots@colorbar@fallback@to@sampled
+ \endgroup
+ %
+ \if 1\b@pgfplots@colorbar@fallback@to@sampled
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplotsset{%
+ colorbar sampled={%
+ surf,%
+ shader=interp,%
+ % 2x2 samples are enough since "shader=interp"
+ % automatically handles the correct interpolation scheme:
+ samples=2,%
+ }%
+ }%
+ }%
+ \pgfplots@loc@TMPa
+ \fi
+ \fi
+}%
+
+\def\pgfplots@colorbar@draw@reconfigure@if@needed{%
+ \pgfplots@colorbar@draw@reconfigure@if@needed@legacy
+ \pgfplotsset{%
+ /pgfplots/every axis plot post/.append code={%
+ \ifpgfplots@collect@firstplot@astick
+ % Oh! Someone wrote 'ytick=data. We want the precise positions.
+ %
+ % Note that this check needs to be done late: it must
+ % be after \begin{axis} -- and since many colorbar
+ % styles overwrite 'samples', we even have to run it
+ % after cycle list options!
+ %
+ % That's why it is in 'every axis plot post':
+ \pgfplots@colorbar@positions@to@samplesat
+ \fi
+ }%
+ }%
+}%
+
+% Defines and sets 'samples at' such that it resembles the colormap
+% positions.
+\def\pgfplots@colorbar@positions@to@samplesat{%
+ \pgfplots@colorbar@positions@to@samplesat@
+ \edef\pgfplots@loc@TMPa{samples at={\pgfplotsretval}}%
+ \expandafter\pgfplotsset\expandafter{\pgfplots@loc@TMPa}%
+}
+% Sets \pgfplotsretval such that it contains an argument for 'samples at'
+\def\pgfplots@colorbar@positions@to@samplesat@{%
+ \pgfkeysgetvalue{/pgfplots/point meta min}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfplots@error{Please define 'point meta min' and 'point meta max' before using 'samples at colormap pos'}%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/point meta max}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfplots@error{Please define 'point meta min' and 'point meta max' before using 'samples at colormap pos'}%
+ \fi
+ %
+ \edef\pgfplots@loc@TMPb{%
+ \noexpand\pgfplotscolormapgetpositions
+ [{\pgfkeysvalueof{/pgfplots/point meta min}}:{\pgfkeysvalueof{/pgfplots/point meta max}}]%
+ {\pgfkeysvalueof{/pgfplots/colormap name}}%
+ }%
+ \pgfplots@loc@TMPb
+}%
+
+% A utility method which draws a standalone colorbar for visualization
+% purposes.
+%
+% Example:
+% \pgfplotscolorbardrawstandalone[colorbar horizontal,colormap access=const]
+%
+% \pgfplotscolorbardrawstandalone[colorbar horizontal,point meta max=1000]
+%
+\def\pgfplotscolorbardrawstandalone{%
+ \pgfutil@ifnextchar[{\pgfplotscolorbardrawstandalone@opt}{\pgfplotscolorbardrawstandalone@opt[]}%
+}%
+\def\pgfplotscolorbardrawstandalone@opt[#1]{%
+ \pgfplots@ifintikzpicture{%
+ \pgfplotscolorbardrawstandalone@opt@[#1]%
+ }{%
+ \begin{tikzpicture}%
+ \pgfplotscolorbardrawstandalone@opt@[#1]%
+ \end{tikzpicture}%
+ }%
+}
+\def\pgfplotscolorbardrawstandalone@opt@[#1]{%
+ \coordinate (parent axis) at (0,0);
+ \pgfplotsset{%
+ point meta min=0,%
+ point meta max=1000,%
+ parent axis width/.initial=6cm,%
+ parent axis height/.initial=6cm,%
+ #1,%
+ colorbar/standalone draw,%
+ }%
+}%
+
+
+\def\pgfplots@colorbar@draw@{%
+ \pgfplots@colorbar@draw@reconfigure@if@needed
+ %
+ % FIXME : the semicolon after ';' has a fixed catcode, namely
+ % the one assigned while pgfplots.code.tex has been read.
+ %
+ % The \pgfplots@checkandpreparefor@active@semicolon gets
+ % confused if the catcodes change... this here is a
+ % work-around for babel support.
+ \let\pgfplots@checkandpreparefor@active@semicolon\relax
+ %
+ % make sure that 'every colorbar' is checked by the key-filtering
+ % stuff: we want to find 'ymode=log' inside of it.
+ % Note that we have to change it here because only the colorbar
+ % should expand 'every colorbar' that early in the processing:
+ \pgfkeys{/pgfplots/every colorbar/.belongs to family=/pgfplots/scale}%
+ %
+ \pgfkeysvalueof{/pgfplots/colorbar/draw/.@cmd}\pgfeov
+}
+
+\def\pgfplotsifnodeexists#1#2#3{%
+ \pgfutil@IfUndefined{pgf@sh@ns@#1}{#3}{#2}%
+}%
+
+\def\pgfplots@colorbar@get@rid@of@at@parent@axis{%
+ \pgfkeysgetvalue{/pgfplots/at/.@cmd}\pgfplots@at@orig
+ \pgfkeyslet{/pgfplots/at/orig/.@cmd}\pgfplots@at@orig
+ %
+ \pgfkeysgetvalue{/pgfplots/colorbar to name/at/.@cmd}\pgfplots@colorbar@toname@at
+ \pgfkeyslet{/pgfplots/at/.@cmd}\pgfplots@colorbar@toname@at
+ %
+ \let\pgfplots@colorbar@get@rid@of@at@parent@axis=\relax% already applied in this scope.
+}%
+\pgfkeysdef{/pgfplots/colorbar to name/at}{%
+ % automatically search-and-replace 'parent axis' which
+ % is not defined for a detached colorbar:
+ \pgfutil@in@{parent axis}{#1}%
+ \ifpgfutil@in@
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/at/orig/.@cmd}{(0pt,0pt)}%
+ \else
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/at/orig/.@cmd}{#1}%
+ \fi
+}%
+\let\pgfplots@colorbar@position@hook\relax
+\def\pgfplots@colorbar@define@hook{%
+ \ifx\pgfplots@colorbar@toname\pgfutil@empty
+ \def\pgfplots@colorbar@position@hook{%
+ % I patch \pgfplots@at...
+ \let\pgfplots@at@orig=\pgfplots@at
+ %
+ % ... and I patch \pgfplotspointdescriptionxy (but only INSIDE
+ % of \pgfplots@at) ...
+ \let\pgfplotspointdescriptionxy@orig=\pgfplotspointdescriptionxy
+ \let\pgfplotsqpointdescriptionxy@orig=\pgfplotsqpointdescriptionxy
+ \def\pgfplots@colorbar@position@prepare@CS{%
+ % ... which needs to set up ONLY \pgfplotspoint@bb@@@,
+ % nothing more.
+ \pgfpointanchor{parent axis}{south west}%
+ \edef\pgfplotspoint@bb@@@{%
+ {\the\pgf@x}%
+ {\the\pgf@y}%
+ {\pgfkeysvalueof{/pgfplots/parent axis width}}%
+ {\pgfkeysvalueof{/pgfplots/parent axis height}}%
+ }%
+ }%
+ %
+ % Install replacements:
+ \def\pgfplots@at{%
+ \begingroup
+ \def\pgfplotspointdescriptionxy########1########2{%
+ \pgfplots@colorbar@position@prepare@CS
+ \pgfplotspointdescriptionxy@orig{########1}{########2}%
+ }%
+ \def\pgfplotsqpointdescriptionxy########1########2{%
+ \pgfplots@colorbar@position@prepare@CS
+ \pgfplotsqpointdescriptionxy@orig{########1}{########2}%
+ }%
+ \pgfplots@deprecated@anchorsfalse
+ \pgfplots@change@pgfpoints@to@descriptioncs
+ \pgf@process{\pgfplots@at@orig}%
+ \endgroup
+ }%
+ }%
+ \else
+ % nothing to do for colorbar to name:
+ \let\pgfplots@colorbar@position@hook=\relax
+ \fi
+}%
+
+% Parses all options in #1 which are known in the currently active families.
+%
+% The result will be stored back into the TikZ-style named #1 without
+% further processing.
+%
+% Example:
+% \tikzstyle{every axis}=[xmin=0,xmax=1,line width=1pt
+% \pgfplots@set@keys@from@tikz@style\tmpmacro{every axis}{/pgfplots}
+%
+% - sets axis options 'xmin' and 'xmax'
+% - calls \tikzstyle{every axis}={line width=1pt}
+%
+% I assume that this method is called within local TeX groups so
+% nothing will be destroyed outside.
+%
+% #1: A style name.
+\def\pgfplots@set@keys@from@tikz@style#1{%
+ \let\pgfplots@rmopts=\pgfutil@empty
+ \pgfqkeysfiltered{/pgfplots}{/pgfplots/#1}%
+ \pgfplots@set@keymacro@to@style\pgfplots@rmopts{#1}%
+}
+
+% Invokes \pgfplots@set@keys@from@tikz@style and handles the "on
+% layer" key.
+%
+% More precisely, it stores any "on layer" value found in style "#1"
+% in
+% /pgfplots/layers for styles/#1.
+%
+% If there is no such value, it will store the empty string (main
+% layer)
+\def\pgfplots@set@keys@from@tikz@style@and@handle@layer#1{%
+ \pgfkeyslet{/pgfplots/on layer}\pgfutil@empty
+ \pgfplots@set@keys@from@tikz@style{#1}%
+ \pgfkeysgetvalue{/pgfplots/on layer}\pgfplots@loc@TMPa
+ \pgfkeyslet{/pgfplots/layers for styles/#1}\pgfplots@loc@TMPa
+}%
+
+% The same as \pgfplots@set@keys@from@tikz@style but this one appends
+% unmatched options to style #2.
+%
+% #1: A style name.
+% #2: A style name which will be filled with unprocessed options.
+\def\pgfplots@set@keys@from@tikz@style@append@to#1#2{%
+ \let\pgfplots@rmopts=\pgfutil@empty
+ \pgfqkeysfiltered{/pgfplots}{/pgfplots/#1}%
+ \pgfplots@append@keymacro@to@style\pgfplots@rmopts{#2}%
+}
+
+% #1: A sequence of options.
+% #2: A style name which will be filled with unprocessed options.
+\def\pgfplots@set@keys@and@append@remaining@to@style#1#2{%
+ \let\pgfplots@rmopts=\pgfutil@empty
+ \pgfqkeysfiltered{/pgfplots}{#1}%
+ \pgfplots@append@keymacro@to@style\pgfplots@rmopts{#2}%
+}%
+
+% #1: input macro
+\def\pgfplots@setkeys@from@macro#1{%
+ \let\pgfplots@rmopts=\pgfutil@empty
+ \def\pgfplots@loc@TMPa{\pgfqkeysfiltered{/pgfplots}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{#1}%
+}
+
+% #1: macro
+% #2: style name
+\long\def\pgfplots@append@keymacro@to@style#1#2{%
+ \ifx#1\pgfutil@empty
+ \else
+ \t@pgfplots@toka={#2/.append style=}%
+ \t@pgfplots@tokb=\expandafter{#1}%
+ \edef\pgfplots@setkeys@TMP{\the\t@pgfplots@toka{\the\t@pgfplots@tokb}}%
+ \expandafter\pgfplotsset\expandafter{\pgfplots@setkeys@TMP}%
+ \fi
+%\pgfplots@message{tikzstyle{#2}+=[#1]}%
+}
+
+% #1: macro
+% #2: style name
+\long\def\pgfplots@set@keymacro@to@style#1#2{%
+ \ifx#1\pgfutil@empty
+ \pgfplotsset{#2/.code={{}}}%
+ \else
+ \t@pgfplots@toka={#2/.style=}%
+ \t@pgfplots@tokb=\expandafter{#1}%
+ \edef\pgfplots@setkeys@TMP{\the\t@pgfplots@toka{\the\t@pgfplots@tokb}}%
+ \expandafter\pgfplotsset\expandafter{\pgfplots@setkeys@TMP}%
+ \fi
+%\pgfplots@message{tikzstyle{#2}=[#1]}%
+}
+
+% backwards compatibility:
+\let\prettyprintnumber=\pgfmathprintnumber%
+
+
+\def\pgfplots@set@options@sanitizemode{%
+ \pgfkeyslet{/pgfplots/xmode/.@cmd}\pgfplots@cant@set@in@this@context@
+ \pgfkeyslet{/pgfplots/ymode/.@cmd}\pgfplots@cant@set@in@this@context@
+ \pgfkeyslet{/pgfplots/zmode/.@cmd}\pgfplots@cant@set@in@this@context@
+}
+\def\pgfplots@set@options@sanitize{%
+ \pgfkeyslet{/pgfplots/xmin/.@cmd}\pgfplots@cant@set@in@this@context
+ \pgfkeyslet{/pgfplots/ymin/.@cmd}\pgfplots@cant@set@in@this@context
+ \pgfkeyslet{/pgfplots/zmin/.@cmd}\pgfplots@cant@set@in@this@context
+ \pgfkeyslet{/pgfplots/xmax/.@cmd}\pgfplots@cant@set@in@this@context
+ \pgfkeyslet{/pgfplots/ymax/.@cmd}\pgfplots@cant@set@in@this@context
+ \pgfkeyslet{/pgfplots/zmax/.@cmd}\pgfplots@cant@set@in@this@context
+}%
+
+% This here is the main key filter for pgfplots.
+%
+% It sets keys if
+% ( they have an active key family)
+% OR
+% ( they have /pgfplots/ key prefix )
+% OR
+% ( they are a command key which contains \tikz@plot@handler ).
+%
+% In all other cases, the key filter will postpone the key.
+%
+% Note that \tikz@plot@handler should be defined before the survey
+% phase starts.
+\pgfkeysdef{/pgfplots/@@key filter}{%
+ \if\pgfkeyscasenumber0%
+ \pgfkeysfiltercontinuefalse
+ \else
+ \if\pgfkeyscasenumber3%
+ \pgfkeysgetfamily\pgfkeyscurrentpath\pgfkeyspred@TMP
+ \else
+ \pgfkeysgetfamily\pgfkeyscurrentkey\pgfkeyspred@TMP
+ \fi
+ \ifpgfkeyssuccess
+ % it has a family. Check it!
+ \pgfkeysisfamilyactive{\pgfkeyspred@TMP}%
+ \else% Ok, it does not belong to any family.
+ % Check if it has /pgfplots/ prefix:
+ \expandafter\pgfplots@key@filter@isdescendantof\pgfkeyscurrentkey/pgfplots/\pgf@@eov
+ \fi
+ \fi
+}
+\def\pgfplots@key@filter@isdescendantof#1/pgfplots/#2\pgf@@eov{%
+ \def\pgfkeyspred@TMP{#1}%
+ \ifx\pgfkeyspred@TMP\pgfkeys@empty
+ % Ah -- it *has* /pgfplots/ prefix. Use it!
+ \pgfkeysfiltercontinuetrue
+ \else
+ % Hm. Probably a /tikz/ key, but who knows.
+ \if1\pgfkeyscasenumber
+ % It is a command key.
+ % Check if the *body* of the command key contains
+ % \tikz@plot@handler.
+ \pgfkeysgetvalue{\pgfkeyscurrentkey/.@cmd}\pgfkeyspred@TMP%
+ \expandafter\pgfplots@key@filter@isplothandler\pgfkeyspred@TMP 123456789\pgfeov\tikz@plot@handler\pgfplots@EOI
+ \else
+ % Ok, it's no command key. Skip it directly.
+ \pgfkeysfiltercontinuefalse
+ \fi
+ \fi
+}%
+\def\pgfplots@key@filter@isplothandler#1\tikz@plot@handler#2\pgfplots@EOI{%
+ \def\pgfkeyspred@TMP{#2}%
+ \ifx\pgfkeyspred@TMP\pgfkeys@empty
+ % I didn't find '\tikz@plot@handler' in the key's body. Ok.
+ % key won't be processed.
+ \pgfkeysfiltercontinuefalse
+ \else
+ % Aaah -- it is something like /tikz/ybar! process it.
+ \pgfkeysfiltercontinuetrue
+ \fi
+}%
+
+\def\pgfplots@set@options#1{%
+ \pgfplots@check@global@colorspace@overrides
+ \pgfplots@bb@isactivetrue
+ \pgfplots@curplot@threedimfalse
+ \global\pgfplots@threedimfalse
+ \pgfutil@ifundefined{tikz@lastx}{%
+ % no warning. Its not that important anyway, I think.
+ \def\pgfplots@at{\pgfpointorigin}%
+ }{%
+ \edef\pgfplots@at{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
+ }%
+ %
+ % Temporarily assign families to 'name' and 'alias' options.
+ % This allows to get the names - they should not be appended to
+ % 'every axis'!
+ \pgfkeyssetfamily{/tikz/name}{/pgfplots/naming commands}%
+ \pgfkeyssetfamily{/tikz/alias}{/pgfplots/naming commands}%
+ \pgfkeyssetfamily{/tikz/overlay}{/pgfplots/shared with tikz}%
+ \pgfkeyssetfamily{/tikz/variable}{/pgfplots}%
+ %
+ \pgfkeysdef{/pgfplots/declare function}{\pgfkeysalso{/pgf/declare function={##1}}}%
+ \pgfkeyssetfamily{/pgf/declare function}{/pgfplots}%
+ %
+ % ... we need to set these options during the survey phase
+ % (because it might be interesting for enlarge limits to depend
+ % upon their value):
+ \pgfkeysdef{/pgfplots/bar width}{\pgfkeysalso{/pgf/bar width={##1}}}%
+ \pgfkeysdef{/pgfplots/bar shift}{\pgfkeysalso{/pgf/bar shift={##1}}}%
+ \pgfkeyssetfamily{/pgf/bar width}{/pgfplots}%
+ \pgfkeyssetfamily{/pgf/bar shift}{/pgfplots}%
+ %
+ \pgfkeyssetfamily{/pgf/trig format}{/pgfplots}%
+ \pgfkeyssetfamily{/pgf/trig format/deg}{/pgfplots}%
+ \pgfkeyssetfamily{/pgf/trig format/rad}{/pgfplots}%
+ %
+ \pgfkeysinstallkeyfilterhandler{/pgf/key filter handlers/append filtered to}{\pgfplots@rmopts}%
+ %
+ \let\tikz@alias=\pgfutil@empty
+ \let\tikz@fig@name=\pgfutil@empty
+ %
+ % Step 1: acquire ONLY 'xmode' and 'ymode' (necessary to decide
+ % which axis style shall be loaded):
+ \let\pgfplots@rmopts=\pgfutil@empty
+ \pgfkeysinstallkeyfilter{/pgf/key filters/active families and known}{}%
+ %
+ \pgfqkeysactivatesinglefamilyandfilteroptions{/pgfplots/scale}%
+ {/pgfplots}
+ {#1,/pgfplots/every axis post}%
+ \let\pgfplots@remaining@input=\pgfplots@rmopts
+ %
+ \pgfplotssetaxistype{\pgfkeysvalueof{/pgfplots/axis type}}%
+ %
+ % Step 2: parse any pgfplots options out of styles.
+ \pgfkeysactivatefamily{/pgfplots/style commands}%
+ %\pgfkeysinstallkeyfilter{/pgf/key filters/active families or descendants of}{/pgfplots}
+ \pgfkeysinstallkeyfilter{/pgfplots/@@key filter}{}%
+ %
+ \pgfkeysactivatefamilies
+ {/pgfplots,/pgfplots/naming commands,/pgfplots/tick,/pgfplots/legend,/pgfplots/scale}%/pgfplots/descriptions,}
+ {\pgfplots@deactivefamiliescmd}%
+ \pgfplots@set@keys@from@tikz@style{every axis}%
+ \pgfkeysdeactivatefamily{/pgfplots/scale}%
+ %
+ \pgfplots@set@keys@from@tikz@style@append@to{every \pgfkeysvalueof{/pgfplots/axis type} axis}{every axis}%
+ %
+ \ifpgfplots@xislinear
+ \ifpgfplots@yislinear
+ \pgfplots@set@keys@from@tikz@style@append@to{every linear axis}{every axis}%
+ \else
+ \pgfplots@set@keys@from@tikz@style@append@to{every semilogy axis}{every axis}%
+ \fi
+ \else
+ \ifpgfplots@yislinear
+ \pgfplots@set@keys@from@tikz@style@append@to{every semilogx axis}{every axis}%
+ \else
+ \pgfplots@set@keys@from@tikz@style@append@to{every loglog axis}{every axis}%
+ \fi
+ \fi
+ \pgfplots@deactivefamiliescmd
+ \pgfplots@set@options@sanitizemode
+ %
+ % Acquire style commands and nameing commands from direct input
+ % options '#1' BEFORE the 'every' styles are processed:
+ \pgfkeysactivatefamily{/pgfplots/naming commands}%
+ \pgfkeysactivatefamily{/pgfplots/shared with tikz}%
+ \pgfplots@setkeys@from@macro\pgfplots@remaining@input%
+ \let\pgfplots@remaining@input=\pgfplots@rmopts
+ \pgfkeysdeactivatefamily{/pgfplots/naming commands}%
+ \pgfkeysdeactivatefamily{/pgfplots/shared with tikz}%
+ %
+ \pgfplots@set@options@of@layered@graphics
+ %
+ % Now, any 'name' and 'alias' options have been processed.
+ %
+ % Remember their current meaning and reset the tikz options!
+ \let\pgfplots@fig@name=\tikz@fig@name
+ \let\pgfplots@fig@alias=\tikz@alias
+ \let\tikz@alias=\pgfutil@empty
+ \let\tikz@fig@name=\pgfutil@empty
+ %
+ % And protocol all named sub-nodes! Their positions need to be
+ % updated later.
+ \global\let\pgfplots@named@child@node@list=\pgfutil@empty
+ \pgfutil@ifundefined{pgfplots@old@name@impl}{%
+ \pgfkeysgetvalue{/tikz/name/.@cmd}\pgfplots@old@name@impl
+ \pgfkeysgetvalue{/tikz/alias/.@cmd}\pgfplots@old@alias@impl
+ }{}%
+ \pgfkeysdef{/tikz/name}{%
+ \pgfplots@add@named@child@node{##1}%
+ \pgfplots@old@name@impl##1\pgfeov
+ }%
+ \pgfkeysdef{/tikz/alias}{%
+ \pgfplots@add@named@child@node{##1}%
+ \pgfplots@old@alias@impl##1\pgfeov
+ }%
+ %
+ % Now, continue to process the 'every' styles. Please note that
+ % options like 'legend style={}' have already been processed;
+ % their values are already inside of the associated 'every'
+ % styles.
+ %
+ % What I am doing here is: set every pgfplots-option directly, and
+ % discard it from the every-style. Any non-pgfplots-option will
+ % be set in its context.
+ %
+ \pgfkeysactivatefamily{/pgfplots/legend}%
+ % this special treatmeant allows the (otherwise unsupported) construction
+ % 'legend style={legend pos=outer north east}':
+ \pgfkeysdef{/pgfplots/every axis legend/.append style}{\pgfkeysalso{##1}}%
+ %
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every axis legend}%
+ %
+ % restore:
+ \pgfkeysdef{/pgfplots/every axis legend/.append style}{%
+ \pgfkeysalso{/pgfplots/every axis legend/.add code={}{\pgfkeysalso{##1}}}%
+ }%
+ \pgfkeysdeactivatefamily{/pgfplots/legend}%
+ %
+ % FIXME : VERIFY!
+ % If I am not mistaken, these statements are only useful to allow
+ % 'xlabel style={xlabel=$x$}' --- which is not intuitive anyway.
+ %\pgfkeysactivatefamily{/pgfplots/descriptions}%
+ % \pgfplots@set@keys@from@tikz@style{every axis label}%
+ % \pgfplots@set@keys@from@tikz@style{every axis x label}%
+ % \pgfplots@set@keys@from@tikz@style{every axis y label}%
+ % \pgfplots@set@keys@from@tikz@style{every axis title}%
+ %\pgfkeysdeactivatefamily{/pgfplots/descriptions}%
+ %
+ \pgfkeysactivatefamily{/pgfplots/tick}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every tick}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every minor tick}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every major tick}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every axis grid}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every minor grid}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every major grid}%
+ \pgfkeysdeactivatefamily{/pgfplots/tick}%
+ %
+ %--------------------------------------------------
+ % \pgfkeysactivatefamily{/pgfplots}%
+ % \pgfplots@set@keys@from@tikz@style{every axis plot}%
+ % \pgfkeysdeactivatefamily{/pgfplots}%
+ %--------------------------------------------------
+ %
+ % Attention: do NOT set the description styles here! Setting them
+ % must be postponed until |every 3d description| has been set (to
+ % ensure that \axis[<options>] take higher precedence).
+ %\pgfkeysactivatefamily{/pgfplots/descriptions}%
+ \pgfkeysactivatefamily{/pgfplots/tick}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every x tick label}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every y tick label}%
+ \pgfplots@set@keys@from@tikz@style@and@handle@layer{every tick label}%
+ \pgfkeysdeactivatefamily{/pgfplots/tick}%
+ %\pgfkeysdeactivatefamily{/pgfplots/descriptions}%
+ %
+ % Step 3: Set all remaining options of '#1'. They should have
+ % highest precedence.
+ \pgfkeysactivatefamilies
+ {/pgfplots,/pgfplots/tick,/pgfplots/legend}%,/pgfplots/descriptions}%
+ {\pgfplots@deactivefamiliescmd}%
+ \expandafter
+ \pgfplots@set@keys@and@append@remaining@to@style
+ \expandafter
+ {\pgfplots@remaining@input}%
+ {every axis}%
+ \pgfplots@deactivefamiliescmd
+%\pgfkeysgetvalue{/pgfplots/every axis/.@cmd}\pgfplots@loc@TMPa
+%\message{every axis is now '\meaning\pgfplots@loc@TMPa'}%
+ %
+ \pgfkeysdeactivatefamily{/pgfplots/style commands}%
+ \global\pgfkeysgetvalue{/pgfplots/xmin}{\pgfplots@xmin}%
+ \global\pgfkeysgetvalue{/pgfplots/xmax}{\pgfplots@xmax}%
+ \global\pgfkeysgetvalue{/pgfplots/ymin}{\pgfplots@ymin}%
+ \global\pgfkeysgetvalue{/pgfplots/ymax}{\pgfplots@ymax}%
+ \global\pgfkeysgetvalue{/pgfplots/zmin}{\pgfplots@zmin}%
+ \global\pgfkeysgetvalue{/pgfplots/zmax}{\pgfplots@zmax}%
+ \pgfkeysgetvalue{/pgfplots/xtickmin}{\pgfplots@xtickmin}%
+ \pgfkeysgetvalue{/pgfplots/xtickmax}{\pgfplots@xtickmax}%
+ \pgfkeysgetvalue{/pgfplots/ytickmin}{\pgfplots@ytickmin}%
+ \pgfkeysgetvalue{/pgfplots/ytickmax}{\pgfplots@ytickmax}%
+ \pgfkeysgetvalue{/pgfplots/ztickmin}{\pgfplots@ztickmin}%
+ \pgfkeysgetvalue{/pgfplots/ztickmax}{\pgfplots@ztickmax}%
+ %
+ \pgfplots@init@collect@firstplotastick
+ \global\let\pgfplots@firstplot@coords@x=\pgfutil@empty
+ \global\let\pgfplots@firstplot@coords@y=\pgfutil@empty
+ \global\let\pgfplots@firstplot@coords@z=\pgfutil@empty
+ \pgfkeysalso{/pgfplots/.search also=/tikz}%
+ %
+ \pgfkeysifdefined{/tikz/on layer}{}{%
+ % make sure assignments 'on layer' in the /tikz/ prefix
+ % doesn't hurt.
+ % this may happen, for example with
+ % 'x grid style={on layer=...}'
+ % because 'x grid style' is not processed by the key filtering
+ % above (it is extracted later).
+ \pgfkeyslet{/tikz/on layer}\pgfutil@empty%
+ }%
+ %
+ \pgfplots@set@patched@options
+ %
+ \pgfplots@set@options@sanitize
+ \pgfplots@notify@options@are@set
+}
+
+\def\pgfplots@init@collect@firstplotastick{%
+ \def\pgfplots@loc@TMPa{data}%
+ \pgfplots@collect@firstplot@astickfalse
+ \ifx\pgfplots@xtick\pgfplots@loc@TMPa
+ \pgfplots@collect@firstplot@asticktrue
+ \fi
+ \ifx\pgfplots@ytick\pgfplots@loc@TMPa
+ \pgfplots@collect@firstplot@asticktrue
+ \fi
+ \ifx\pgfplots@ztick\pgfplots@loc@TMPa
+ \pgfplots@collect@firstplot@asticktrue
+ \fi
+ \pgfkeysgetvalue{/pgfplots/minor xtick}\pgfplots@loc@TMPb
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \pgfplots@collect@firstplot@asticktrue
+ \fi
+ \pgfkeysgetvalue{/pgfplots/minor ytick}\pgfplots@loc@TMPb
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \pgfplots@collect@firstplot@asticktrue
+ \fi
+ \pgfkeysgetvalue{/pgfplots/minor ztick}\pgfplots@loc@TMPb
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \pgfplots@collect@firstplot@asticktrue
+ \fi
+}%
+
+\def\pgfplots@set@options@of@layered@graphics{%
+ \ifpgfplots@axis@on@top
+ \ifpgfplots@layered@graphics
+ \pgfplots@log3{the combination of 'axis on top' and 'activate layers' implies 'set layers=axis on top'. Deactivate 'axis on top' if you want other layers.}%
+ \pgfplotsset{set layers=axis on top}%
+ \fi
+ \fi
+ % retrieve layer configurations (the one set with 'set layers*').
+ \pgfkeysgetvalue{/pgfplots/@set layers arg}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ % ah, yes: then set its style:
+ \pgfqkeys{/pgfplots/layers}{\pgfplots@loc@TMPa}% note that this here should not need key filtering; it adjusts only styles (hopefully ;) )
+ \fi
+}%
+
+\def\pgfplots@set@patched@options{%
+ \pgfkeysdef{/pgfplots/@@@tmp}{%
+ \let\tikz@intersect@def=\gdef
+ \pgfkeys{/tikz/name path={##1}}%
+ }%
+ \pgfkeysgetvalue{/pgfplots/@@@tmp/.@cmd}\pgfplots@name@path@global@cmd@pgf@two@ten
+ %
+ \pgfkeysifdefined{/tikz/name path/.@cmd}{%
+ % 'name path' does not work inside of a pgfplots axis because
+ % pgfplots unnecessarily introduces extra \scopes around each path :-/
+ % it needs to be 'name path global'.
+ % PATCH IT:
+ \pgfkeysgetvalue{/tikz/name path global/.@cmd}\pgfplots@loc@TMPa%
+ \ifx\pgfplots@loc@TMPa\pgfplots@name@path@global@cmd@pgf@two@ten
+ % ah - we operate against PGF 2.10 . In this case, we must
+ % not indirect from 'name path' to 'name path global' - would lead to
+ % an indefinite loop.
+ % Patch absolutely:
+ \pgfkeysgetvalue{/tikz/name path/.@cmd}\pgfplots@name@path@cmd@pgf@two@ten%
+ \pgfkeysdef{/tikz/name path}{%
+ % see the value of
+ % \pgfplots@name@path@global@cmd@pgf@two@ten to verify
+ % this patch:
+ \let\tikz@intersect@def=\gdef
+ \pgfplots@name@path@cmd@pgf@two@ten{##1}\pgfeov
+ }%
+ \else
+ \pgfkeysdef{/tikz/name path}{\pgfkeysalso{/tikz/name path global={##1}}}%
+ \fi
+ }{%
+ \pgfkeysdef{/tikz/name path}{\pgfplots@error{'name path' is undefined. Please load \string\usetikzlibrary{intersections} or \string\usepgfplotslibrary{fillbetween}}}%
+ }%
+}
+
+% EMPTY. This will be overridden by tex-engine specific code.
+% At the time of this writing, the latex driver will check for xcolor
+% configuration options and will override
+% mesh/colorspace explicit color output
+% and
+% colormap default colorspace
+% if needed.
+\def\pgfplots@check@global@colorspace@overrides{%
+}%
+
+\def\pgfplots@add@named@child@node#1{%
+ \xdef\pgfplots@named@child@node@list{\pgfplots@named@child@node@list,{#1}}%
+}%
+
+\def\pgfplots@notify@options@are@set{}%
+
+\def\pgfplots@install@abbrev@commands{
+ \let\pgfplots@orig@path=\path
+ \let\pgfplots@orig@plot=\plot
+ %
+ \let\axispath=\pgfplots@path
+ \let\pgfplotsinterruptdatabb=\pgfplots@interruptdatabb
+ \let\endpgfplotsinterruptdatabb=\endpgfplots@interruptdatabb
+ %
+ \let\addplot=\pgfplots@addplot
+ \let\plot=\addplot
+ %
+ %
+ \def\logten{2.3025851}%
+ \def\reciproclogten{0.434294}%
+ %
+ \def\logi##1{%
+ \ifcase##1
+ \or0
+ \or0.693147
+ \or1.098612
+ \or1.386294
+ \or1.60943791
+ \or1.7917594
+ \or1.94591014
+ \or2.07944154
+ \or2.197224
+ \fi
+ }%
+ \def\axisdefaultticklabel{\pgfplots@ticklabel@typeset@arg{\pgfmathprintnumber{\tick}}}%
+ \def\axisdefaultticklabellog{%
+ \pgfplots@ticklabel@typeset@arg{%
+ \pgfkeysgetvalue{/pgfplots/log number format code/.@cmd}\pgfplots@log@label@style
+ \expandafter\pgfplots@log@label@style\tick\pgfeov
+ }%
+ }%
+ %
+ \let\legend=\pgfplots@command@legend
+ \let\addlegendimage=\pgfplots@addlegendimage
+ \let\addlegendentry=\pgfplots@addlegendentry
+ \let\addlegendentryexpanded=\pgfplots@addlegendentryexpanded
+}
+
+\let\pgfplots@late@options=\pgfutil@empty
+\def\pgfplotssetlateoptions#1{%
+ \pgfplotsset{#1}%
+}%
+\def\pgfplotssetlateoptions@late#1{%
+ \t@pgfplots@toka=\expandafter{\pgfplots@late@options}%
+ \t@pgfplots@tokb={#1}%
+ \xdef\pgfplots@late@options{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}%
+}%
+
+\def\pgfplots@environment{%
+ \pgfutil@ifnextchar[{%
+ \pgfplots@environment@opt
+ }{%
+ \pgfplots@environment@opt[]%
+ }%
+}%
+
+% temporary (local) variables inside of axis
+\newif\ifpgfplots@autocompute@all@limits
+\newif\ifpgfplots@autocompute@xmin
+\newif\ifpgfplots@autocompute@xmax
+\newif\ifpgfplots@autocompute@ymin
+\newif\ifpgfplots@autocompute@ymax
+\newif\ifpgfplots@autocompute@zmin
+\newif\ifpgfplots@autocompute@zmax
+\newif\ifpgfplots@apply@datatrafo@x
+\newif\ifpgfplots@apply@datatrafo@y
+\newif\ifpgfplots@apply@datatrafo@z
+\newif\ifpgfplots@apply@datatrafo
+\newif\ifpgfplots@datascaletrafo@initialised
+
+% Extracts single components of an entry of
+% \pgfplots@stored@plotlist
+%
+% They are defined as
+% \pgfplots@stored@current@precmd
+% \pgfplots@stored@current@cmd
+% \pgfplots@stored@current@data
+% \pgfplots@stored@current@postcmd
+\long\def\pgfplots@stored@plotlist@EXTRACTENTRY#1#2#3#4{%
+ % the token register stuff allows '#' inside of arguments.
+ \t@pgfplots@tokc={#1}%
+ \edef\pgfplots@stored@current@precmd{\the\t@pgfplots@tokc}%
+ %
+ \t@pgfplots@tokc={#2}%
+ \edef\pgfplots@stored@current@cmd{\the\t@pgfplots@tokc}%
+ %
+ \def\pgfplots@stored@current@data{#3}%
+ %
+ \t@pgfplots@tokc={#4}%
+ \edef\pgfplots@stored@current@postcmd{\the\t@pgfplots@tokc}%
+ %
+}
+
+\def\pgfplots@init@cleared@structures{%
+ \global\pgfplotslistnewempty\pgfplots@plotspeclist
+ \global\pgfplotslistnewempty\pgfplots@legend
+ \global\pgfplotslistnewempty\pgfplots@stored@plotlist
+ \global\pgfplots@numplots=0
+ \let\pgfplots@already@computed@legend@node=\pgfutil@empty
+}
+
+% Takes a plot style and exports it to a self-contained drawing
+% command which can be used outside of the current context.
+%
+% This macro is used inside for \label{} / \ref{}; it tries to be
+% reasonable smart about restoring relevant flags stored in a pgfplots
+% axis. If it forgets something... well, it is not too smart.
+%
+% #1: the style to export.
+% #2: either empty or the fully qualified name of a code key. If #2 is not empty,
+% the current value of the code key is remembered. It will be restored
+% just before the exported \tikz statement is invoked, and \tikz[#2]
+% will be called. The code key should not rely on any arguments (it
+% won't be given any)
+%
+% The exported routine autodetects whether the result is used inside of
+% a picture. In that case, the '#2' style will be set inside of a
+% scope instead of \tikz[#2].
+%
+% Assembles a macro \pgfplotsretval which, upon execution, draws the
+% plot style.
+%
+% As a side effect, it returns the resulting plot style (nothing else) into
+% \pgfplotsretvalb
+\def\pgfplots@export@legend@image@to@macro#1#2{%
+ \begingroup
+ % I'd like to get all options which are INDEPENDENT of
+ % pgfplots. Idea: expand all /pgfplots-keys and collect
+ % everything which belongs NOT to /pgfplots. This is the
+ % completely expanded rest. At least, I hope so and it appears
+ % to work.
+ %
+ % FIXME : this was a good approach before. Now, there ARE
+ % /pgfplots keys which should be maintained. How shall I do that?
+ % I can't handle every option separately... !?
+ \pgfkeysinstallkeyfilter
+ {/pgf/key filters/and}
+ {{/pgf/key filters/is descendant of=/pgfplots}%
+ {/pgf/key filters/defined}}%
+ \def\pgfplots@label@tikzopts{}%
+ \pgfkeysinstallkeyfilterhandler{/pgf/key filter handlers/append filtered to}{\pgfplots@label@tikzopts}%
+ % FIXME : this fails if 'error bars/.cd,/pgfplots/.cd' is used inside of #1 --
+ % the second /pgfplots/.cd will be applied, but the error bars
+ % command not
+ \pgfqkeysfiltered{/tikz}{#1}%
+ %
+ \pgfkeysgetvalue{/pgfplots/legend image code/.@cmd}{\pgfplots@curlegendcode}%
+ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler
+ \toks0=\expandafter{\pgfplots@curlegendcode\pgfeov}%
+ \toks1=\expandafter{\pgfplots@label@tikzopts}%
+ \toks3=\expandafter{\pgfplots@basiclevel@plothandler}%
+ \def\pgfplots@stylekey{#2}%
+ \ifx\pgfplots@stylekey\pgfutil@empty
+ \else
+ \pgfkeysgetvalue{\pgfplots@stylekey/.@cmd}{\pgfplots@stylekey@}%
+ \toks4=\expandafter{\pgfplots@stylekey@\pgfeov}%
+ \fi
+ \edef\pgfplots@loc@TMPa{%
+ {%
+ \ifx\pgfplots@stylekey\pgfutil@empty
+ \else
+ \noexpand\scope[#2]%
+ \fi
+ %
+ \noexpand\pgfplots@draw@image
+ %
+ \ifx\pgfplots@stylekey\pgfutil@empty
+ \else
+ \noexpand\endscope%
+ \fi
+ }{%
+ \noexpand\tikz[#2]{%
+ \noexpand\pgfplots@draw@image
+ }%
+ }%
+ }%
+ \expandafter\pgfplots@assemble@ref@picture\pgfplots@loc@TMPa
+ \toks5=\expandafter{\pgfplotsretval}%
+ \pgfkeysgetvalue{/pgfplots/every legend image post/.@cmd}\pgfplots@legend@image@post
+ \toks6=\expandafter{\pgfplots@legend@image@post\pgfeov}%
+ %
+ \edef\pgfplotsretval{%
+ \noexpand\begingroup
+ \noexpand\def\noexpand\pgfplots@draw@image{%
+ \noexpand\def\noexpand\tikz@plot@handler{\the\toks3}%
+ \noexpand\pgfkeysdef{/pgfplots/legend image code}{\the\toks0}%
+ \noexpand\pgfkeysdef{/pgfplots/every legend image post}{\the\toks6 }%
+ \noexpand\pgfkeyssetvalue{/pgfplots/mark list fill}{\pgfkeysvalueof{/pgfplots/mark list fill}}%
+ \ifx\pgfplots@stylekey\pgfutil@empty
+ \else
+ \noexpand\pgfkeysdef{#2}{\the\toks4}%
+ \fi
+ \noexpand\pgfplots@show@small@legendplots{\the\toks1}{}%
+ }%
+ \the\toks5
+ \noexpand\endgroup%
+ }%
+ \xdef\pgfplots@glob@TMPa{\the\toks1}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ \let\pgfplotsretvalb=\pgfplots@glob@TMPa
+}%
+
+% The implementation for \label{foo} after \addplot. It allows to
+% \ref{foo} (it inserts the 'legend image code').
+%
+% With
+% \addplot[scatter/classes={a={}}] ... ;
+% \label[a]{my label}
+% you can reference scatter/classes labels.
+%
+% I only need to overwrite '\label'; the rest is done by LaTeX.
+%
+% THIS IS INCOMPATIBLE WITH plain TeX and ConTeXt! Don't use it, it
+% doesn't hurt.
+\def\pgfplots@plot@label{%
+ \pgfutil@ifnextchar<{%
+ \pgfplots@plot@label@beamer@mode
+ }{%
+ \pgfutil@ifnextchar[{\pgfplots@plot@label@{}}{\pgfplots@plot@label@{}[]}%
+ }%
+}%
+\def\pgfplots@plot@label@beamer@mode<#1>{
+ \pgfutil@ifnextchar[{\pgfplots@plot@label@{<#1>}}{\pgfplots@plot@label@{<#1>}[]}%
+}
+% #1: optional prefix options, used to support
+% \label<...>{<name>} of beamer package
+\def\pgfplots@plot@label@#1[#2]#3{%
+ \ifpgfplots@has@label@information
+ \begingroup
+ \expandafter\let\expandafter\pgfplots@loc@TMPb\csname pgfplots@last@plot@style@#2\endcsname
+ \expandafter\pgfplots@export@legend@image@to@macro\expandafter{\pgfplots@loc@TMPb}{/pgfplots/every crossref picture}%
+ %
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretvalb}%
+ % 1. prepare /pgfplots/refstyle={#3}:
+ \pgfplots@auxwrite{%
+ \noexpand\expandafter\noexpand\gdef
+ \noexpand\csname pgfplots@labelstyle@#3\noexpand\endcsname{\the\t@pgfplots@tokb}%
+ }%
+ % 2. prepare \ref{#3} and \pageref{#3}:
+ %
+ % There are several nasty things to consider:
+ % a) macro expansion. Use \string to allow a safe \write
+ % operation.
+ %
+ % b) \protect . If the resulting \ref{} command occurs within
+ % a "moving argument" like \caption or so, we need to use
+ % proper '\protect'ion.
+ %
+ % this here is the low-level implementation of \ref{#3}. Write it into
+ % the .aux file:
+ \pgfplots@auxwrite{%
+ \noexpand\expandafter\noexpand\gdef
+ \noexpand\csname pgfplots@show@ref@#3\noexpand\endcsname{%
+ \the\t@pgfplots@toka
+ }%
+ }%
+ % create the \label command:
+ \let\label=\pgfplots@original@LaTeX@label
+ \pgfplots@label[#1]{#3}{pgfplots@show@ref@}%
+ \endgroup
+ \else
+ \pgfplots@error{Can't create \string\label{#3}: it needs to be called after \string\addplot.}%
+ \fi
+}%
+
+
+\def\pgfplots@interruptdatabb{\pgfplots@bb@isactivefalse}
+\def\endpgfplots@interruptdatabb{\pgfplots@bb@isactivetrue}
+
+\def\pgfplots@search@also@tikz{%
+ % make sure the search path is set.
+ % Inside of an axis, this is already ok.
+ \pgfkeysifdefined{/pgfplots/.unknown/.@cmd}%
+ {\relax}% search path in /pgfplots is already set
+ {%
+%\message{DEBUG: re-initializing /pgfplots/.search also=/tikz in current plot style!}%
+ \pgfkeysalso{/pgfplots/.search also=/tikz}%
+ }%
+}%
+
+% A helper method which defines
+% `/tikz/current plot style' to be {#1} --- with properly set key
+% search paths.
+\def\pgfplots@define@currentplotstyle@as#1{%
+ \pgfkeysdef{/tikz/current plot style}{%
+ \pgfplots@search@also@tikz
+ %
+ % Make sure that
+ % \addplot[every mark/.append style={...}]
+ % or something like that is interpreted as /tikz/ key:
+ \pgfplots@invoke@pgfkeyscode{/handler config/full or existing/.@cmd}{}% restrict
+ %
+ \pgfkeysdef{/pgfplots/colorbar source}{}% make it NO-OP here. It has already been processed.
+ %
+ \pgfplots@install@local@bar@handlers% see its docs.
+ %
+ % set both, pgfplots and tikz keys:
+ % the draw is important since \addplot visualizes its stuff
+ % with \path coordinates ...
+ % -> we need to activate draw mode here.
+ \pgfplotsset{/tikz/draw,#1}%
+ \pgfplots@invoke@pgfkeyscode{/handler config/all/.@cmd}{}% unrestrict
+ %
+ % the final plot processing uses
+ % foreach stored \addplot command :
+ % \scope[current plot style]
+ % <finalize coord stream>
+ % \draw <finalized coord stream>
+ % \endscope
+ % -> the problem: \draw reset the modes 'draw,fill' etc which
+ % have been set in \scope!
+ % -> ad-hoc-solution:
+ % restore the modes manually.
+ \pgfplots@every@addplot@path@prepare%
+ %
+ \pgfplots@markers@check@for@default@plot@mark%
+ %
+ %
+ % This is done here. The \pgfplots@drawmodes is ONLY set
+ % inside of this scope, so we can check for that particular
+ % case:
+ \pgfkeys{/tikz/every path/.append code={%
+ % FIXME : is that portable!?
+ \pgfplots@every@addplot@path
+ \pgfplots@every@addplot@firstpath
+ \let\pgfplots@every@addplot@firstpath=\pgfutil@empty
+ }%
+ }%
+ }%
+}%
+
+\def\pgfplots@every@addplot@path{}
+\def\pgfplots@every@addplot@firstpath{}
+
+\def\pgfplots@every@addplot@path@prepare{%
+ \let\pgfplots@every@addplot@path=\pgfutil@empty
+ \let\pgfplots@every@addplot@firstpath=\pgfutil@empty
+ %
+ % remember these technical things: they will be
+ % reset in \path (see below!), so we will need to re-activate
+ % them.
+ % The re-activation is done in 'every path'.
+ \pgfplots@assert@tikzinternal@exists{tikz@options}%
+ \pgfplots@assert@tikzinternal@exists{tikz@mode}%
+ \let\pgfplots@drawoptions=\tikz@options
+ \let\pgfplots@drawmodes=\tikz@mode
+ \pgfplots@everypath@prepare@append{\pgfplots@every@addplot@path}{\pgfplots@restore@drawmodes}%
+ %
+ \iftikz@decoratepath
+ \pgfplots@everypath@prepare@append{\pgfplots@every@addplot@firstpath}{\tikz@decoratepathtrue}%
+ \fi
+ \pgfplots@everypath@prepare@append@macrorestore{\pgfplots@every@addplot@firstpath}\tikz@preactions
+ \pgfplots@everypath@prepare@append@macrorestore{\pgfplots@every@addplot@firstpath}\tikz@postactions
+}%
+\long\def\pgfplots@everypath@prepare@append#1#2{%
+ \t@pgfplots@toka=\expandafter{#1}%
+ \t@pgfplots@tokb={#2}%
+ \edef#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+}%
+\long\def\pgfplots@everypath@prepare@append@macrorestore#1#2{%
+ \t@pgfplots@toka=\expandafter{#1}%
+ \t@pgfplots@tokb=\expandafter{#2}%
+ \edef#1{%
+ \the\t@pgfplots@toka
+ \noexpand\def\noexpand#2{\the\t@pgfplots@tokb}%
+ }%
+}%
+
+
+\newif\ifpgfplots@drawmodes@append
+
+\def\pgfplots@restore@drawmodes{%
+ \pgfutil@ifundefined{pgfplots@drawmodes}%
+ {\relax}%
+ {%
+ \ifpgfplots@drawmodes@append
+ \t@pgfplots@toka=\expandafter{\tikz@mode}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@drawmodes}%
+ \edef\tikz@mode{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+ \else
+ \let\tikz@mode=\pgfplots@drawmodes
+ \fi
+% \let\tikz@options=\pgfplots@drawoptions
+ }%
+}%
+
+% Callback if the LUA backend does not support a sub-operation. The
+% reason will be logged.
+\def\pgfplots@LUA@backend@failed{%
+ \ifpgfplots@LUA@fail@on@TeX@fallback
+ \pgfplots@error{lua backend has been deactivated since some input option is unsupported and 'lua debug=compileerror' is active. Please see the most recent message in your .log file for details}%
+ \fi
+}%
+
+\def\pgfplots@LUA@visualizationlog@deactivation#1{%
+ \pgfplots@log{\pgfplots@LUA@loglevel@info}{Using 'lua backend=false' for axis: #1.}%
+ \pgfplots@LUA@backend@failed
+}%
+\def\pgfplots@prepare@LUA@api{%
+ \ifpgfplots@LUA@backend@supported
+ \ifpgfplots@LUA@supported
+ \else
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ %
+ \ifpgfplots@stackedmode
+ \pgfplots@LUA@visualizationlog@deactivation{stacked plots unsupported (yet)}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ %
+ \ifpgfplots@xislinear\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@visualizationlog@deactivation{xmode=log unsupported (yet)}\fi
+ \ifpgfplots@yislinear\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@visualizationlog@deactivation{ymode=log unsupported (yet)}\fi
+ \ifpgfplots@zislinear\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@visualizationlog@deactivation{zmode=log unsupported (yet)}\fi
+ %
+ \pgfkeysgetvalue{/pgfplots/x coord trafo/.@cmd}\pgfplots@loc@TMPc\ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@visualizationlog@deactivation{x coord trafo unsupported}\fi
+ \pgfkeysgetvalue{/pgfplots/y coord trafo/.@cmd}\pgfplots@loc@TMPc\ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@visualizationlog@deactivation{x coord trafo unsupported}\fi
+ \pgfkeysgetvalue{/pgfplots/z coord trafo/.@cmd}\pgfplots@loc@TMPc\ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@visualizationlog@deactivation{x coord trafo unsupported}\fi
+ %
+ % FIXME: collect all remaining items
+ %
+ \ifpgfplots@LUA@backend@supported
+ \pgfplots@log{\pgfplots@LUA@loglevel@debug}{lua backend=true: Activating LUA backend for axis.}%
+ \pgfplotsutil@directlua{%
+ pgfplots.gca = pgfplots.Axis.new();
+ pgfplots.gca.is3d = \pgfplots@boolval{pgfplots@threedim};
+ pgfplots.gca.clipLimits = {
+ \pgfplots@boolval{pgfplots@clip@limits@x},
+ \pgfplots@boolval{pgfplots@clip@limits@y},
+ \pgfplots@boolval{pgfplots@clip@limits@z} };
+ pgfplots.gca.autocomputeAllLimits = \pgfplots@boolval{pgfplots@autocompute@all@limits};
+ pgfplots.gca.autocomputeMin = {
+ \pgfplots@boolval{pgfplots@autocompute@xmin},
+ \pgfplots@boolval{pgfplots@autocompute@ymin},
+ \pgfplots@boolval{pgfplots@autocompute@zmin} };
+ pgfplots.gca.autocomputeMax = {
+ \pgfplots@boolval{pgfplots@autocompute@xmax},
+ \pgfplots@boolval{pgfplots@autocompute@ymax},
+ \pgfplots@boolval{pgfplots@autocompute@zmax} };
+ % attention: min/max is (also) handed over in \pgfplots@LUA@survey@start
+ }%
+ \fi
+ \fi
+}%
+
+\long\def\pgfplotsifissurveyphase#1#2{%
+ \if\pgfplots@phase@name s%
+ #1\relax
+ \else
+ #2\relax
+ \fi
+}%
+\long\def\pgfplotsifisvisualizationphase#1#2{\pgfplotsifissurveyphase{#2}{#1}}
+\def\pgfplots@phase@name{X}
+
+% Invokes #1 if the statement occurs within \begin{axis}...\end{axis}
+% and #2 if not.
+\long\def\pgfplotsifinaxis#1#2{%
+ \pgfutil@ifundefined{pgfplots@is@in@axis}{#2}{#1}%
+}%
+
+%
+% \begin{axis}[#1] :
+%
+% This command prepares the axis for collection. NOTHING will be drawn
+% until \end{axis}. During the collect phase, axis limits will be
+% computed.
+%
+% The following variables are accummulated between
+% \begin{axis}
+% and
+% \end{axis}:
+%
+% - \pgfplots@[xyz]min
+% \pgfplots@[xyz]max
+% - These denote the axis limits.
+% - They are always assigned globally.
+% - For linear axes, they will be computed in floating point.
+% - For log axes, they will be computed using pgf math engine.
+% - \pgfplots@[xyz]min@reg
+% - A register containing the value of macro \pgfplots@[xyz]min
+% in pt. It is only valid during \end{axis}.
+% - \pgfplots@[xyz]max@reg
+% - The same for 'max'.
+% - \pgfplots@invalidrange@[xyz]min
+% \pgfplots@invalidrange@[xyz]max
+% \pgfplots@invalidrange@meta[max,min]
+% A value which is used for the axis limits before the
+% limit computation starts.
+% - \pgfplots@data@[xyz]min
+% \pgfplots@data@[xyz]max
+% - DATA limits. These limits are not affected by limit
+% restrictions
+% - They are used to initialise the data scaling trafo.
+% - They WON'T be assigned for log axes.
+% - Assigned globally.
+% - \pgfplots@[xyz]min@unscaled@as@float
+% - Assigned during \end{axis} (local variables).
+% - Contain the value of axis limits as floating point numbers
+% in the original data range.
+% - \pgfplots@metamin
+% \pgfplots@metamax
+% \pgfplots@axiswide@metamin
+% \pgfplots@axiswide@metamax
+% - if meta data is active, these macros will contain the upper
+% and lower bound for meta data, the first two on a per-plot
+% basis the latter to globally for the complete axis.
+% - will be assigned globally.
+% - meta data is ALWAYS collected in floating point.
+% - \pgfplots@colorbar@src@metamin
+% - \pgfplots@colorbar@src@metamax
+% - these keys are usually empty, unless one provides the
+% 'colorbar source' key for an \addplot command. In that case,
+% they will be filled (globally) with the point meta min/max
+% ranges of that particular plot. The colorbar will use the
+% result for its ranges.
+% - \pgfplots@numplots
+% - A count register indexing the current plot counter. Assigned
+% globally.
+% - \ifpgfplots@apply@datatrafo
+% A boolean which indicates whether any scaling trafo is
+% active.
+% - \ifpgfplots@apply@datatrafo@[xyz]
+% Booleans indicating whether for which axes the scaling trafo
+% is active.
+% - \pgfplots@stored@plotlist
+% - An instance of pgfplotslist.
+% - It is assigned globally.
+% - Every \addplot or tikz path command is collected into this
+% structure.
+% - The element type is a compound object containing everything
+% needed to process the plot during \end{axis}.
+% - \pgfplots@plotspeclist
+% - instance of pgfplotslist
+% - collects every line specification for \addplot.
+% - Used to assemble legends.
+% - Assigned globally.
+% - \pgfplots@legend
+% - instance of pgfplotslist
+% - collects every legend entry.
+% - Used to assemble legends.
+% - Assigned globally.
+% - \pgfplots@data@scale@trafo@SHIFT@[xyz]
+% \pgfplots@data@scale@trafo@EXPONENT@[xyz]
+% - For any direction for which the scaling trafo is active,
+% these macros contain the two parameters for the affine scaling
+% trafo.
+% - \pgfplots@firstplot@coords@[xyz]
+% - A macro containing a comma separated list
+% - It is collected if and only if [xyz]tick = 'data'.
+% - Contains a list of coordinates in floating point
+% representation if the axis is linear.
+% - The coordinates are in pgf math notation for log axes.
+% - Assigned globally.
+% - \pgfplots@[xyz]@veclength
+% - A macro containing the vector length of the [xyz] unit
+% vector.
+% - Assigned in \end{axis}
+% - \pgfplots@[xyz]@inverseveclength
+% - A macro containing the INVERSE vector length of the [xyz]
+% unit vector.
+% - Assigned in \end{axis}
+% - \pgfplotspoint[xyz]axis
+% - A macro which sets 'pgf@x' and 'pgf@y' to the [xyz] axis.
+% - \pgfplotspoint[xyz]axislength
+% - A macro containing the vector length of the [xyz] axis
+% (including the 'pt' suffix).
+%
+% - \ifpgfplots@curplot@threedim
+% - valid during an '\addplot' preparation step.
+% - \ifpgfplots@threedim
+% - whether the axis shall be threedimensional.
+%
+% - \pgfplots@currentplot@firstcoord@[xyz]
+% - \pgfplots@currentplot@lastcoord@[xyz]
+% - contains the first/last coordinate of the current plot.
+% - assigned globally.
+% - \ifpgfplots@coord@stream@isfirst
+% - assigned globally during \addplot.
+% - \pgfplotssurveyphase@setactiveplothandlers
+% A macro which is used to implement '\numplotsofactualtype'
+% see \pgfplots@countplots@advance for details.
+%
+%
+%
+\def\pgfplots@environment@opt[#1]{%
+ \begingroup
+ \pgfplots@define@dummies@for@pseudoconstants
+ \pgfplotsifinaxis{%
+ \pgfplots@error{%
+ Sorry, nested axis environments are not supported.
+ Please move the inner axis environment below \string\end{axis} and
+ use alignment options (for example named nodes, see manual) to place it at the desired
+ position}%
+ }{}%
+ \def\pgfplots@is@in@axis{1}%
+ \pgfplots@environment@opt@@setup@pgfpoint@restores
+ %
+ \pgfplots@checkandpreparefor@active@semicolon
+ %
+ \pgfplots@install@abbrev@commands
+ \pgfplots@stacked@initialise
+ \pgfplotsplothandlers@init
+ %
+ %
+ % The explicit specification of 'x' and 'y' as 1pt is to avoid
+ % numeric overflow/underflow during scale computations:
+ %
+ % The scaling (i.e. proper values for 'x' and 'y') will be
+ % determined later-on, dependend on the axis limits. Since axis
+ % limits are implicitly in units of 1pt, it is reasonable to use
+ % '1pt' here as well.
+ \pgfsetxvec{\pgfqpoint{1pt}{0pt}}%
+ \pgfsetyvec{\pgfqpoint{0pt}{1pt}}%
+ \pgfsetzvec{\pgfqpoint{0pt}{0pt}}%
+ %
+ \pgfplots@set@options{#1}%
+ \global\let\pgfplots@late@options=\pgfutil@empty
+ \let\pgfplotssetlateoptions=\pgfplotssetlateoptions@late
+ %
+ %
+ %
+ % --------------------
+ % Allocations:
+ % --------------------
+ \pgfplots@init@cleared@structures
+ %
+ % --------------------
+ % Option preprocessing
+ % --------------------
+ \pgfplots@prepare@coord@filtering@for x%
+ \pgfplots@prepare@coord@filtering@for y%
+ \pgfplots@prepare@coord@filtering@for z%
+ \ifpgfplots@apply@datatrafo
+ \pgfplots@datascaletrafo@initialisedfalse
+ \else
+ \pgfplots@datascaletrafo@initialisedtrue% there is no trafo.
+ \fi
+ %
+ \pgfplotsutilforeachcommasep{x,y,z}\as\pgfplots@loc@TMPa{%
+ \pgfplotscoordmath \pgfplots@loc@TMPa{min limit}%
+ \expandafter\let\csname pgfplots@invalidrange@\pgfplots@loc@TMPa max\endcsname=\pgfmathresult
+ \pgfplotscoordmath \pgfplots@loc@TMPa{max limit}%
+ \expandafter\let\csname pgfplots@invalidrange@\pgfplots@loc@TMPa min\endcsname=\pgfmathresult
+ }%
+ %
+ \pgfplotscoordmath{meta}{max limit}%
+ \let\pgfplots@invalidrange@metamin=\pgfmathresult
+ \pgfplotscoordmath{meta}{min limit}%
+ \let\pgfplots@invalidrange@metamax=\pgfmathresult
+ %
+ % These numbers will ONLY be filled for linear axis!
+ \global\let\pgfplots@data@xmin=\pgfplots@invalidrange@xmin
+ \global\let\pgfplots@data@xmax=\pgfplots@invalidrange@xmax
+ \global\let\pgfplots@data@ymin=\pgfplots@invalidrange@ymin
+ \global\let\pgfplots@data@ymax=\pgfplots@invalidrange@ymax
+ \global\let\pgfplots@data@zmin=\pgfplots@invalidrange@zmin
+ \global\let\pgfplots@data@zmax=\pgfplots@invalidrange@zmax
+ \global\let\pgfplots@axiswide@metamin=\pgfplots@invalidrange@metamin
+ \global\let\pgfplots@axiswide@metamax=\pgfplots@invalidrange@metamax
+ \global\let\pgfplots@colorbar@src@metamin=\pgfutil@empty
+ \global\let\pgfplots@colorbar@src@metamax=\pgfutil@empty
+ %
+ \pgfplots@autocompute@all@limitstrue
+ \ifx\pgfplots@xmin\pgfutil@empty
+ \pgfplots@autocompute@xmintrue
+ \global\let\pgfplots@xmin=\pgfplots@invalidrange@xmin
+ \else
+ \pgfplots@autocompute@all@limitsfalse
+ \fi
+ \ifx\pgfplots@xmax\pgfutil@empty
+ \pgfplots@autocompute@xmaxtrue
+ \global\let\pgfplots@xmax=\pgfplots@invalidrange@xmax
+ \else
+ \pgfplots@autocompute@all@limitsfalse
+ \fi
+ \ifx\pgfplots@ymin\pgfutil@empty
+ \pgfplots@autocompute@ymintrue
+ \global\let\pgfplots@ymin=\pgfplots@invalidrange@ymin
+ \else
+ \pgfplots@autocompute@all@limitsfalse
+ \fi
+ \ifx\pgfplots@ymax\pgfutil@empty
+ \pgfplots@autocompute@ymaxtrue
+ \global\let\pgfplots@ymax=\pgfplots@invalidrange@ymax
+ \else
+ \pgfplots@autocompute@all@limitsfalse
+ \fi
+ \ifx\pgfplots@zmin\pgfutil@empty
+ \pgfplots@autocompute@zmintrue
+ \global\let\pgfplots@zmin=\pgfplots@invalidrange@zmin
+ \else
+ \global\pgfplots@threedimtrue
+ \pgfplots@autocompute@all@limitsfalse
+ \fi
+ \ifx\pgfplots@zmax\pgfutil@empty
+ \pgfplots@autocompute@zmaxtrue
+ \global\let\pgfplots@zmax=\pgfplots@invalidrange@zmax
+ \else
+ \global\pgfplots@threedimtrue
+ \pgfplots@autocompute@all@limitsfalse
+ \fi
+ %
+ \pgfutil@IfUndefined{pgfmathdeclarefunction}{%
+ % SKIP: \pgfmathdeclarefunction is unavailable in pgf 2.00 .
+ % UPGRADE TO PGF 2.10 to use these math functions.
+ }{%
+ \pgfplots@declare@mathfunctions
+ }%
+ %
+ % check for axis-wide 'point meta min' :
+ \pgfkeysgetvalue{/pgfplots/point meta min}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@axiswide@metamin@autocompute{1}%
+ \else
+ \def\pgfplots@axiswide@metamin@autocompute{0}%
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@loc@TMPa}%
+ \global\let\pgfplots@axiswide@metamin=\pgfmathresult
+ \fi
+ \pgfkeysgetvalue{/pgfplots/point meta max}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@axiswide@metamax@autocompute{1}%
+ \else
+ \def\pgfplots@axiswide@metamax@autocompute{0}%
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@loc@TMPa}%
+ \global\let\pgfplots@axiswide@metamax=\pgfmathresult
+ \fi
+ %
+ % --------------------
+ % Start axis:
+ % start survey phase!
+ % --------------------
+ %
+ \ifpgfplots@stackedmode
+ \else
+ % we have no stacked plots and thus no reversing.
+ \pgfplots@stacked@reversefalse
+ \fi
+ %
+ \pgfutil@IfUndefined{label}{\relax}{%
+ \let\pgfplots@original@LaTeX@label=\label
+ \let\label=\pgfplots@plot@label
+ }%
+ %
+ \global\pgfplots@has@label@informationfalse
+ %
+ \def\numplots{\the\pgfplots@numplots}%
+ \global\let\pgfplotssurveyphase@setactiveplothandlers=\pgfutil@empty
+ \let\numplotsofactualtype=\pgfplots@numplotsofactualtype
+ %
+ % any \path command is invalid inside of an axis.
+ % Use \axispath instead:
+ \let\path=\pgfplots@replacement@for@tikz@path
+ \let\closedcycle=\pgfplots@path@closed@cycle
+ %
+ % defines \pgfplotsaxisupdatelimitsforcoordinate etc.
+ \pgfplots@prepare@axis@API
+ \pgfplots@prepare@LUA@api
+ \pgfkeysvalueof{/pgfplots/execute at begin axis}%
+ \pgfkeysvalueof{/pgfplots/execute at begin axis@@}%
+ \def\pgfplots@phase@name{s}%
+ %
+ \pgfplots@replace@path@commands
+ %
+ % allow layer changes within the environment; reset:
+ \pgfkeyslet{/pgfplots/on layer}\pgfutil@empty
+}
+
+% #1 if and only if the limits are already ready (sanitized to bounded
+% values and transformed)
+\def\pgfplots@set@options@after@survey#1{%
+ \def\pgfplots@set@options@after@survey@@##1{%
+ \edef\pgfmathresult{\csname pgfplots@##1min\endcsname}%
+ \if1#1%
+ \pgfplotscoordmath{##1}{datascaletrafo inverse}{\pgfmathresult}%
+ \pgfplotscoordmath{##1}{tofixed}{\pgfmathresult}%
+ \else
+ % might be unbounded...
+ \pgfplotscoordmath{##1}{tostring}{\pgfmathresult}%
+ \fi
+ \pgfkeyslet{/pgfplots/##1min}\pgfmathresult
+ %
+ \edef\pgfmathresult{\csname pgfplots@##1max\endcsname}%
+ \if1#1%
+ \pgfplotscoordmath{##1}{datascaletrafo inverse}{\pgfmathresult}%
+ \pgfplotscoordmath{##1}{tofixed}{\pgfmathresult}%
+ \else
+ % might be unbounded...
+ \pgfplotscoordmath{##1}{tostring}{\pgfmathresult}%
+ \fi
+ \pgfkeyslet{/pgfplots/##1max}\pgfmathresult
+ }%
+ \pgfplots@set@options@after@survey@@ x%
+ \pgfplots@set@options@after@survey@@ y%
+ \ifpgfplots@threedim
+ \pgfplots@set@options@after@survey@@ z%
+ \fi
+ %
+ \pgfkeyslet{/pgfplots/point meta min}{\pgfplots@axiswide@metamin}%
+ \pgfkeyslet{/pgfplots/point meta max}{\pgfplots@axiswide@metamax}%
+}%
+
+% \end{axis} :
+%
+% This command actually takes all collected (global) variables,
+% creates an axis and performs all postponed drawing operations.
+\def\endpgfplots@environment@opt{%
+ \def\pgfplots@phase@name{v}%
+ \pgfutil@IfUndefined{label}{\relax}{%
+ % restore.
+ \let\label=\pgfplots@original@LaTeX@label
+ }%
+ \xdef\numplots{\the\pgfplots@numplots}%
+ \pgfkeysvalueof{/pgfplots/before end axis/.@cmd}\pgfeov%
+ \pgfkeysvalueof{/pgfplots/execute at end axis}%
+ \pgfkeysvalueof{/pgfplots/execute at end axis@@}%
+ %
+ \pgfplots@restore@path@commands
+ %
+ \pgfplotssurveyphase@setactiveplothandlers
+ %
+ \pgfplots@set@options@after@survey0%
+ \expandafter\pgfplotsset\expandafter{\pgfplots@late@options}%
+ %
+ \pgfplots@prepare@layered@graphics
+ %
+ \pgfplots@prepare@cell@picture
+ %
+ %\end{axis}:
+ %
+ % --------------------
+ % All plotting commands have been read.
+ % -> apply postponed drawing commands!
+ % --------------------
+ \pgfplots@determinedefaultvalues
+ \pgfplots@BEGIN@cell@picture[/pgfplots/every axis]%
+ \pgfplots@BEGIN@init@and@draw@axis
+ %
+ % replace some of tikz's paths (like ellipse and path): make them
+ % aware of any transformations:
+ \pgfplots@install@path@replacements
+ %
+ \pgfplots@stacked@initialise
+ \pgfplots@markers@visphase@after@axis@prepare
+ \ifpgfplots@stacked@reverse
+ % This here applies any scaling trafos and assembles a
+ % NEW \pgfplots@stored@plotlist!
+ \pgfplots@stacked@finalize@stored@plots
+ \fi
+ %
+ % ensure that (1,2) is automatically converted to (axis cs:1,2) :
+ \pgfplots@change@pgfpoints@to@axiscs
+ %
+ \ifpgfplots@LUA@backend@supported
+ \pgfplots@LUA@visualization@update@axis
+ \fi
+ %
+ % make it ungrouped: we must not destroy group nesting of tikz
+ % path instructions at this point.
+ \pgfplotslistforeachungrouped\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{%
+ \expandafter\pgfplots@stored@plotlist@EXTRACTENTRY\pgfplots@loc@TMPa
+%\message{^^JProcessing stored plot with precommand '\meaning\pgfplots@stored@current@precmd';^^J pgfplots@plotcmd '\meaning\pgfplots@stored@current@cmd'^^J postcommand '\meaning\pgfplots@stored@current@postcmd'^^J}%
+%\message{DATA: '\meaning\pgfplots@stored@current@data';^^J}%
+ % The precmd sets all required variables needed to
+ % finalize a plot.
+ % @see the stream preparation routines.
+ \pgfplots@stored@current@precmd
+ \ifx\pgfplots@stored@current@cmd\pgfutil@empty
+ % Ah: some \pgfplotsextra command like \draw,\path,
+ % \node or even \scope or \endscope.
+ %
+ % do NOT call \pgfplotsonlayer here! We MUST NOT
+ % destroy grouping levels here.
+ \pgfplots@stored@current@data%
+ \else
+ %
+ % this code here means we REALLY have a plotting
+ % command!
+ % This is the heart component of the visualization
+ % phase.
+ \pgfplots@stored@plotlist@visualize@selected@phases{\pgfplots@visphase@names}%
+ \fi
+ \pgfplots@stored@current@postcmd
+ }%
+ \pgfplots@restorepgfpoint
+ %
+ %
+ \pgfplots@END@init@and@draw@axis
+ %
+ \pgfplots@create@axis@descriptions
+ %
+ % this here does \endtikzpicture\endpgfinterruptpicture
+ % (and stores sizes):
+ \pgfplots@END@cell@picture
+ %
+ \let\tikz@fig@name=\pgfplots@fig@name
+ \tikz@fig@mustbenamed
+ %
+ \edef\pgfplots@shapename{pgfplots@low@level@shape\ifpgfplots@deprecated@anchors @deprecated\fi}%
+ \pgfutil@IfUndefined{pgf@anchor@\pgfplots@shapename @\pgfplots@anchorname}{%
+ % Oh. Well, suppose \pgfplots@anchorname is associated to an
+ % INNER node.
+ \def\pgfplots@loc@TMPa##1{%
+ \pgftransformshift{%
+ % So far, the inner node's position has not been
+ % corrected (that happens in
+ % \pgfplots@finally@correct@child@node@positions).
+ % Do that here with \pgfplots@saveddimen@picminx:
+ \pgfpointdiff
+ {\pgfplotspointorigininternal}
+ {##1}%
+ \global\pgf@x=-\pgf@x \global\pgf@y=-\pgf@y
+ }%
+ }%
+ \expandafter\tikz@scan@one@point\expandafter\pgfplots@loc@TMPa\expandafter(\pgfplots@anchorname)%
+ \def\pgfplots@anchorname{image}% that means: no shift!
+ }{}%
+ %
+ \begingroup
+ \pgfplots@beforenode
+ %
+ \ifpgfplots@has@cell@picture
+ \else
+ % the transformations have already been applied to the
+ % coordinates which are used to setup the node. Reset them:
+ \pgftransformresetnontranslations
+ \fi
+ %
+ \ifpgfplots@deprecated@anchors
+ \pgfplots@restore@deprecated@lowlevel@shape
+ \pgfmultipartnode{\pgfplots@shapename}{\pgfplots@anchorname}{\tikz@fig@name}{\pgfusepath{discard}}%
+ \else
+ \pgfmultipartnode{\pgfplots@shapename}{\pgfplots@anchorname}{\tikz@fig@name}{\pgfusepath{discard}}%
+ \fi
+ \endgroup
+ \pgfplots@fig@alias
+ \pgfnodealias{current axis}{\tikz@fig@name}%
+ %
+ \pgfplots@finally@correct@child@node@positions
+ \pgfplots@stacked@finalize
+ %
+ \pgfplots@LUA@cleanup
+ %
+ \ifpgfplots@colorbar
+ \pgfplots@colorbar@move@outside@scope@with@globalmacro{\pgfplots@glob@TMPa}%
+ \else
+ \global\let\pgfplots@glob@TMPa=\relax
+ \fi
+ %
+ % transport the current layer config - but only if nessary!
+ \def\pgfplots@loc@TMPa{0}%
+ \ifpgfplots@has@cell@picture
+ % layers are used for the cell picture only- no need to
+ % communicate them.
+ \else
+ \ifpgfplots@layered@graphics
+ \def\pgfplots@loc@TMPa{1}%
+ \else
+ % there are no layers.
+ \fi
+ \fi
+ \if1\pgfplots@loc@TMPa
+ % Ah - we need to transport the current layer config!
+ \pgf@remember@layerlist@globally
+ \aftergroup\pgf@restore@layerlist@from@global
+ \else
+ % Hm. No layers to transport. Make sure that the second
+ % \aftergroup does not hurt:
+ \aftergroup\pgf@remember@layerlist@globally
+ \fi
+ \endgroup
+ \pgfplots@glob@TMPa
+ %
+ % once more again - just to be sure that it works with LaTeX which
+ % introduces a further grouping level:
+ \aftergroup\pgf@restore@layerlist@from@global
+ %
+ \pgfplots@cell@picture@remembered
+ \aftergroup\pgfplots@cell@picture@remembered
+}
+
+\def\pgfplots@LUA@visualization@update@axis{%
+ \ifpgfplots@threedim
+ \pgfplotsmathvectortocomponents\pgfplots@view@dir@threedim{pgfplots@loc@}{default}%
+ \fi
+ %
+ \let\pgfplots@loc@TMPa\pgfutil@empty%
+ \pgfplotscoordmath{x}{datascaletrafo get params}%
+ \edef\pgfplots@loc@TMPa{%
+ \pgfplots@loc@TMPa
+ local datascaleTrafoX = pgfplots.DatascaleTrafo.new(\pgfplotsretval,\pgfplotsretvalb);^^J
+ }%
+ \pgfplotscoordmath{y}{datascaletrafo get params}%
+ \edef\pgfplots@loc@TMPa{%
+ \pgfplots@loc@TMPa
+ local datascaleTrafoY = pgfplots.DatascaleTrafo.new(\pgfplotsretval,\pgfplotsretvalb);^^J
+ }%
+ \pgfplotscoordmath{z}{datascaletrafo get params}%
+ \edef\pgfplots@loc@TMPa{%
+ \pgfplots@loc@TMPa
+ local datascaleTrafoZ = pgfplots.DatascaleTrafo.new(\pgfplotsretval,\pgfplotsretvalb);^^J
+ }%
+ %
+ \edef\pgfplots@loc@TMPa{%
+ \pgfplots@loc@TMPa
+ local axis = pgfplots.gca;^^J%
+ % FIXME : what about datamin/max?
+ axis.axiswidemetamin = pgfplots.pgftonumber("\pgfplots@axiswide@metamin"); ^^J%
+ axis.axiswidemetamax = pgfplots.pgftonumber("\pgfplots@axiswide@metamax"); ^^J%
+ axis.datascaleTrafo = { datascaleTrafoX, datascaleTrafoY, datascaleTrafoZ };^^J%
+ axis:setunitvectors({ %
+ { \pgf@sys@tonumber\pgf@xx, \pgf@sys@tonumber\pgf@xy },
+ { \pgf@sys@tonumber\pgf@yx, \pgf@sys@tonumber\pgf@yy },
+ { \pgf@sys@tonumber\pgf@zx, \pgf@sys@tonumber\pgf@zy } });^^J%
+ \ifpgfplots@threedim
+ axis.viewdir = {
+ pgfplots.pgftonumber("\pgfplots@loc@x"),
+ pgfplots.pgftonumber("\pgfplots@loc@y"),
+ pgfplots.pgftonumber("\pgfplots@loc@z") };^^J%
+ \fi
+ }%
+%\message{Executing \pgfplots@loc@TMPa}%
+ \pgfplotsutil@directlua{\pgfplots@loc@TMPa}
+}%
+
+\def\pgfplots@LUA@cleanup{%
+ \ifpgfplots@LUA@backend@supported
+ \pgfplotsutil@directlua{pgfplots.gca=nil}%
+ \fi
+}%
+
+%
+% This is part of \ifpgfplots@substitute@pgfpoint:
+\def\pgfplots@environment@opt@@setup@pgfpoint@restores{%
+ % There are places in pgfplots where the default coordinate system
+ % (i.e. the one used whenever one writes (1,2)) needs to be
+ % replaced:
+ % - during axis descriptions (see \pgfplots@change@pgfpoints@to@descriptioncs)
+ % - during the visualization phase (where it is substituted by
+ % (axis cs:1,2), compare XXXX)
+ %
+ % However, as soon as someone writes \pgfsetxvec (or its y/z
+ % variants), we want to *restore* the original PGF functionality.
+ %
+ % Prepare that here:
+ \let\pgfpointxy@orig=\pgfpointxy
+ \let\pgfqpointxy@orig=\pgfqpointxy
+ \let\pgfpointxyz@orig=\pgfpointxyz
+ \let\pgfqpointxyz@orig=\pgfqpointxyz
+ \let\pgfsetxvec@orig=\pgfsetxvec
+ \let\pgfsetyvec@orig=\pgfsetyvec
+ \let\pgfsetzvec@orig=\pgfsetzvec
+ \let\tikz@checkunit@orig=\tikz@checkunit
+ \let\pgfpatharcaxes@orig=\pgfpatharcaxes
+ \let\pgfpointpolarxy@orig=\pgfpointpolarxy
+ \let\tikz@do@arc@orig=\tikz@do@arc
+ %
+ \let\pgfsetxvec=\pgfplots@setxvec@restorepgfpoint
+ \let\pgfsetyvec=\pgfplots@setyvec@restorepgfpoint
+ \let\pgfsetzvec=\pgfplots@setzvec@restorepgfpoint
+}%
+
+\def\pgfplots@restorepgfpoint{%
+ \let\pgfpointxy=\pgfpointxy@orig
+ \let\pgfqpointxy=\pgfqpointxy@orig
+ \let\pgfpointxyz=\pgfpointxyz@orig
+ \let\pgfqpointxyz=\pgfqpointxyz@orig
+ \let\tikz@checkunit=\tikz@checkunit@orig
+ \let\pgfpointpolarxy=\pgfpointpolarxy@orig
+ \let\pgfpatharcaxes=\pgfpatharcaxes@orig
+ \let\tikz@do@arc=\tikz@do@arc@orig
+}%
+
+\def\pgfplots@setxvec@restorepgfpoint#1{%
+ \pgfsetxvec@orig{#1}%
+ \pgfplots@restorepgfpoint
+}%
+\def\pgfplots@setyvec@restorepgfpoint#1{%
+ \pgfsetyvec@orig{#1}%
+ \pgfplots@restorepgfpoint
+}%
+\def\pgfplots@setzvec@restorepgfpoint#1{%
+ \pgfsetzvec@orig{#1}%
+ \pgfplots@restorepgfpoint
+}%
+
+
+\def\pgfplots@replace@path@commands{%
+ \let\pgfplots@orig@scope=\scope
+ \let\pgfplots@orig@endscope=\endscope
+ \let\scope=\pgfplots@replacement@for@scope
+ \let\endscope=\pgfplots@replacement@for@endscope
+ %
+ \let\pgfplots@orig@pgfonlayer=\pgfonlayer
+ \let\pgfplots@orig@endpgfonlayer=\endpgfonlayer
+ \let\pgfonlayer=\pgfplots@replacement@for@onlayer
+ \let\endpgfonlayer=\pgfplots@replacement@for@endonlayer
+ %
+ \let\pgfplots@orig@pgfplotsonlayer=\pgfplotsonlayer
+ \let\pgfplots@orig@endpgfplotsonlayer=\endpgfplotsonlayer
+ \let\pgfplotsonlayer=\pgfplots@replacement@for@onlayer
+ \let\endpgfplotsonlayer=\pgfplots@replacement@for@endonlayer
+}%
+
+\def\pgfplots@restore@path@commands{%
+ % restore old \path command:
+ \let\path=\pgfplots@orig@path
+ \let\plot=\pgfplots@orig@plot
+ \let\scope=\pgfplots@orig@scope
+ \let\endscope=\pgfplots@orig@endscope
+ \let\pgfonlayer=\pgfplots@orig@pgfonlayer
+ \let\endpgfonlayer=\pgfplots@orig@endpgfonlayer
+ \let\pgfplotsonlayer=\pgfplots@orig@pgfplotsonlayer
+ \let\endpgfplotsonlayer=\pgfplots@orig@endpgfplotsonlayer
+}
+
+% visualizes selected phases.
+%
+% #1 a comma-separated list of selected phases. May be empty.
+% This is typically \pgfplots@visphase@names. The content will be
+% expanded, i.e. it can be a macro.
+\def\pgfplots@stored@plotlist@visualize@selected@phases#1{%
+ \begingroup
+ \def\pgfplotsaxisplotphase{V}%
+ \pgfplotsonlayer{\pgfkeysvalueof{/pgfplots/on layer}}{a plot or graphical element (or inherited from the axis)}%
+ \pgfkeysvalueof{/pgfplots/execute at begin plot visualization}%
+ \ifpgfplots@threedim
+ \else
+ % axis = 2d and plot=3d is forbidden here.
+ \pgfplots@curplot@threedimfalse
+ \fi
+ %
+ %
+ \pgfplots@LUA@visualization@init
+ % SIDE-effect: \ifpgfplots@LUA@backend@supported might have
+ % been switched to false here.
+ %
+ %
+ \pgfplots@execute@at@begin@plot@visualization@internal
+ %
+ \pgfplots@markers@prepare@layered@graphics@marks
+ %
+ \edef\pgfplots@current@phases{#1}%
+ %
+ % "boolean shouldExecuteClippedPart = \ifpgfplots@loc@tmp"
+ \pgfplots@loc@tmptrue
+ \ifx\pgfplots@current@phases\pgfutil@empty
+ \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@afterpath@clipped
+ % some special handling.... ok; start phase.
+ \else
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+ \ifpgfplots@loc@tmp
+ \expandafter\pgfplots@stored@plotlist@visualize@clippedpart\expandafter{\pgfplots@current@phases}%
+ \fi
+ %
+ \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@afterpath@unclipped
+ \scope[current plot style]%
+ \pgfplots@visphase@markers
+ \endscope
+ \fi
+ \pgfplots@execute@at@end@plot@visualization@internal
+ \pgfkeysvalueof{/pgfplots/execute at end plot visualization}%
+ \endpgfplotsonlayer
+ \endgroup
+}
+
+% #1: the list of phases to execute. This excludes marker phases.
+\def\pgfplots@stored@plotlist@visualize@clippedpart#1{%
+ \scope[current plot style] % this does set BOTH pgfplots and tikz options.
+ %
+ % do this here after options are set.
+ \pgfplots@initzerolevelhandler
+ %
+ % FIXME : what, precisely, was the motivation to use a
+ % scope here? It causes a lot of problems and
+ % work-arounds. Is it worth the effort!?
+ \ifpgfplots@clip
+ \if2\pgfplots@clipmode
+ % clip=true and 'clip mode=individual'
+ \pgfplots@clippath@install{\pgfusepath{clip}}%
+ \fi
+ \fi
+ %
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % skip. there is a case in which this can happen and makes
+ % sense: if
+ % \pgfplots@markers@visphase@name=\pgfplots@markers@visphase@name@afterpath@clipped
+ \else
+ % Standard visualization phases. See
+ % \pgfplotssurveyphase@set@visphase@names for a discussion about
+ % their intented use-case.
+ \pgfplotsutilforeachcommasep{#1}\as\pgfplots@visphase@name{%
+ \begingroup
+ \pgfutil@ifundefined{pgfplots@visphase@\pgfplots@visphase@name}{%
+ \pgfplots@error{Illegal state encountered: unknown visualization phase \pgfplots@visphase@name}%
+ }{%
+ \csname pgfplots@visphase@\pgfplots@visphase@name\endcsname
+ }%
+ \endgroup
+ }%
+ \fi
+ %
+ % marker visualization phase (one of the available ones):
+ \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@afterpath@clipped
+ \pgfplots@visphase@markers
+ \fi
+ %
+ \endscope
+}%
+
+\def\pgfplots@visphase@markers{%
+ \begingroup
+ \pgfplots@change@pgfpoints@to@axiscs
+ \pgfplots@markers@install@plotmark@handler
+ \let\pgfplots@visphase@name=\pgfplotsaxis@visphase@name@markers
+ \pgfplots@coord@stream@finalize@storedcoords@START
+ \endgroup
+}%
+
+% Inside of an axis, the default coordinate system for any draw
+% command should be (axis cs:1,2) instead of (1,2). Install that here:
+%
+% see \pgfplots@restorepgfpoint
+\def\pgfplots@change@pgfpoints@to@axiscs{%
+ %
+ \ifpgfplots@substitute@pgfpoint
+ \let\pgfpointxy=\pgfplotspointaxisxy
+ \let\pgfpointxyz=\pgfplotspointaxisxyz
+ \let\pgfqpointxy=\pgfplotsqpointaxisxy
+ \let\pgfqpointxyz=\pgfplotsqpointaxisxyz
+ \let\pgfpatharcaxes=\pgfplots@patharcaxes
+ \let\pgfpointpolarxy=\pgfplots@pointpolarxy
+ \let\tikz@do@arc=\pgfplots@tikz@do@arc
+ %
+ % tikz checks for units before it calls \pgfpointxy . This must
+ % not suffer from TeX's math restrictions, so we have to use the
+ % FPU for this task. Patch the command as well:
+ \let\tikz@checkunit=\pgfplots@checkunit@fpu
+ \fi
+}%
+
+\def\pgfplots@disable@directionmath{%
+ \def\pgfplotstransformdirectionx##1{\def\pgfmathresult{##1}}%
+ \let\pgfplotstransformdirectiony=\pgfplotstransformdirectionx
+ \let\pgfplotstransformdirectionz=\pgfplotstransformdirectionx
+}%
+
+% As of compat=1.11, pgfplots has to accept the following syntax elements:
+%
+% \draw[green,thick,->] (0,-1) arc[radius=1, start angle= -90, end angle=-180];
+% \draw[green,thick,->] (0,-1) arc[radius=1cm, start angle= -90, end angle=-180];
+% \draw[green,thick,->] (0,-1) arc[radius={transformdirectionx(1)}, start angle= -90, end angle=-180];
+%
+% all of them should work. The last one (transformdirectionx) is due
+% to legacy compatibility. Since the 1.11 code handles these syntaxes
+% automatically, 'transformdirectionx' will be ignored silently.
+\def\pgfplots@tikz@do@arc#1#2#3#4{%
+ \begingroup
+ % strip 'transformdirectionx' if it occurs in the angles:
+ \pgfplots@disable@directionmath
+ \pgfmathparse{#3}%
+ \t@pgfplots@toka={\tikz@do@arc@orig{#1}{#2}}%
+ \edef\pgfplots@arc@x{%
+ \pgfmathresult
+ \ifpgfmathunitsdeclared pt\fi
+ }%
+ \pgfmathparse{#4}%
+ \xdef\pgfplots@arc@y{%
+ \pgfmathresult
+ \ifpgfmathunitsdeclared pt\fi
+ }%
+ % ok, invoke the TikZ command with the expanded args:
+ \xdef\pgfplots@glob@TMPa{\the\t@pgfplots@toka{\pgfplots@arc@x}{\pgfplots@arc@y}}%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+\def\pgfplots@polarxy@#1and #2\@@{%
+ \edef\pgfplots@polarxy@X{#1}%
+ \edef\pgfplots@polarxy@Y{#2}%
+}
+\def\pgfplots@pointpolarxy#1#2{%
+ \pgfutil@in@{and }{#2}%
+ \ifpgfutil@in@%
+ \pgfplots@polarxy@#2\@@%
+ \else%
+ \pgfplots@polarxy@#2and #2\@@%
+ \fi%
+ \pgfmathparse{#1}%
+ \let\pgfpoint@angle=\pgfmathresult%
+ \pgfmathcos@{\pgfpoint@angle}%
+ \let\pgfpoint@cos=\pgfmathresult
+ \pgfmathsin@{\pgfpoint@angle}%
+ \let\pgfpoint@sin=\pgfmathresult
+ %
+ \begingroup
+ \pgfplots@plot@coords@mathparsertrue
+ \pgf@process{%
+ \pgfplotspointaxisxyz{\pgfplots@polarxy@X*\pgfpoint@cos}{\pgfplots@polarxy@Y*\pgfpoint@sin}{0}%
+ }%
+ \endgroup
+}%
+
+% #1 = angle of first point
+% #2 = angle of second point
+% #3 = first axis
+% #4 = second axis
+\def\pgfplots@patharcaxes#1#2#3#4{%
+ {%
+ % see docs of \pgfplots@tikz@do@arc for a motivation:
+ \pgfplots@disable@directionmath
+ %
+ % ok, now, evaluate the arcs. Since this implements
+ % 'substitute pgfpoint', we have to evaluate the angles via
+ % 'axis direction cs' ...
+ \let\pgfpointxy=\pgfplotspointaxisdirectionxy
+ \let\pgfpointxyz=\pgfplotspointaxisdirectionxyz
+ %
+ \pgftransformtriangle{\pgfpointorigin}{#3}{#4}%
+ %
+ % ... and the coordinates as such using 'axis cs':
+ \let\pgfpointxy=\pgfplotspointaxisxy
+ \let\pgfpointxyz=\pgfplotspointaxisxyz
+ %
+ \pgfpatharc{#1}{#2}{1pt}%
+ }%
+}%
+
+\def\pgfplots@checkunit@fpu#1{%
+ \ifpgfplots@usefpu
+ \begingroup
+ \pgfkeys{/pgf/fpu, /pgf/fpu/output format/float}%
+ \tikz@checkunit@orig{#1}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \xdef\pgfplots@glob@TMPd{%
+ \iftikz@isdimension
+ \noexpand\tikz@isdimensiontrue
+ \else
+ \noexpand\tikz@isdimensionfalse
+ \fi
+ \noexpand\def\noexpand\pgfmathresult{\pgfmathresult}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPd
+ \else
+ \tikz@checkunit@orig{#1}%
+ \fi
+}%
+
+\def\pgfplots@execute@at@end@plot@visualization@internal{%
+}%
+
+\def\pgfplots@beforenode{%
+ \pgfplots@sys@beforenode
+}%
+
+% Now, we need to process all named nodes inside of our
+% axis-image.
+%
+% The situation at this point is as follows:
+% 1. the complete axis image has been "typeset" into a box. That
+% means its coordinate system is LOST up to those variables
+% which have been saved explicitly.
+%
+% 2. the \pgfmultipartnode above knows about all axis anchors and
+% saved dimensions.
+%
+% 3. All sub-nodes don't know about their position any more. Any
+% saved anchors are wrong.
+%
+% The approach:
+% 1. we shift each named node's saved anchors such that it's
+% coordinate is valid inside of the TeX box.
+%
+% 2. we also shift each named node's saved anchors to reflect the
+% axis' anchor.
+%
+% Afterwards, everything should be fine.
+\def\pgfplots@finally@correct@child@node@positions{%
+ \ifx\pgfplots@named@child@node@list\pgfutil@empty%
+ \else%
+ \begingroup
+ \pgftransformreset% FIXME: what's that for!? Copied from matrix code...
+ %
+ % Use the 'image' anchor here - the internal anchor
+ % transformation matrix already has the shift for
+ % \pgfplots@anchorname.
+ \pgfpointanchor{\tikz@fig@name}{image}%
+ \pgf@xa=\pgf@x
+ \pgf@xb=\pgf@y
+ \pgf@process{\pgfplotspointorigininternal}%
+ \advance\pgf@xa by-\pgf@x
+ \advance\pgf@xb by-\pgf@y
+ \global\pgf@x=\pgf@xa
+ \global\pgf@y=\pgf@xb
+ \edef\pgfplots@offset{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \pgfplots@finally@correct@remembered@picture@positions
+ %
+ \pgfutil@for\pgfplots@child@node@name:=\pgfplots@named@child@node@list\do{%
+ \ifx\pgfplots@child@node@name\pgfutil@empty
+ \else
+%\message{Attempting to correct '\pgfplots@child@node@name' position by \meaning\pgfplots@offset\space (the node is inside of an axis).}%
+ \expandafter\ifx\csname pgfplots@child@node@visited@\pgfplots@child@node@name\endcsname\relax%
+ \pgfutil@IfUndefined{pgf@sh@nt@\pgfplots@child@node@name}{%
+ \pgfplots@warning{could not adjust coordinates of named node '\pgfplots@child@node@name' for reasons I do not understand! After finishing the image, it did no longer exist!? Sorry.}%
+ }{%
+ \pgf@shift@node{\pgfplots@child@node@name}{\pgfplots@offset}%
+ \expandafter\let\csname pgfplots@child@node@visited@\pgfplots@child@node@name\endcsname=\pgfutil@empty%
+ }%
+ \fi
+ \fi
+ }%
+ \endgroup
+ \fi%
+}%
+
+% The feature 'remember picture' relies on the global position of
+% pgfpictures.
+%
+% If we have 'remember picture=true' and 'cell picture=true', that
+% global position has been shifted as well. We have to correct it.
+%
+% This, in turn, requires to patch the .aux file.
+%
+% PRECONDITION: takes the offset \pgf@x,\pgf@y.
+\def\pgfplots@finally@correct@remembered@picture@positions{%
+ % Note that the cell picture is already closed - but
+ % fortunately, we have saved its picture id.
+ \ifx\pgfplots@cell@pictureid\pgfutil@empty
+ % ah - no cell picture. OK; nothing to do.
+ \else
+ % ah - there WAS a cell picture ...
+ \pgfplots@cell@picture@remembered
+ \ifpgfrememberpicturepositiononpage
+ % ... AND it had its "remember picture" flag activated.
+ %
+ % It is task of
+ % \pgfplots@finally@correct@child@node@positions to
+ % express ALL node locations in terms of \pgfpictureid.
+ %
+ % So, we can simply replace the (already written) pdfmark
+ % of \pgfplots@cell@pictureid by that of \pgfpictureid
+ % (which, however, is NOT written because the picture is
+ % not finished).
+ %
+ % It will be written eventually because the outer picture
+ % will implicitly inherit
+ % \pgfrememberpicturepositiononpagetrue
+ % -> see all usages of \pgfplots@cell@picture@remembered
+ \begingroup
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\noexpand
+ \noexpand\pgfplotsreplacepdfmark
+ {\pgfplots@cell@pictureid}{\pgfpictureid}%
+ }%
+ \expandafter\write\expandafter\pgfutil@auxout\expandafter{\pgfplots@loc@TMPa}%
+ \endgroup
+ \fi
+ \fi
+}%
+
+% Replaces the pdfmark for #1 by that of #2.
+%
+% Note that when this macro is executed (it resides in the .aux file),
+% the pdfmark for #2 is typically UNDEFINED.
+%
+% #1: the pgfpictureid to modify
+% #2: the pgfpictureid which contains the correct values
+\def\pgfplotsreplacepdfmark#1#2{%
+ \pgfsys@getposition{#1}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\relax
+ % hm. strange. Perhaps the driver does not support it?
+ \else
+ % Ok, make a "lazy replace":
+ \expandafter\let\expandafter\pgfplots@glob@TMPa\csname pgf@sys@pdf@mark@pos@#1\endcsname
+ \expandafter\global\expandafter\let\csname pgf@sys@pdf@mark@pos@#1@old\endcsname=\pgfplots@loc@TMPa%
+ %
+ \expandafter\gdef\csname pgf@sys@pdf@mark@pos@#1\endcsname{%
+ % this is the lazy replace, assuming knowledge about how
+ % pgf calls its internal structures :-/
+ %
+ % If pgf changes its name, this macro will never be
+ % called and we do not hurt someone.
+ \pgfsys@getposition{#2}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\relax
+ % oh - the picture if for #2 has no remembered name!?
+ % Perhaps something failed?
+ % try a fall-back. This will most fail (most
+ % probably). Issue a warning?
+ \csname pgf@sys@pdf@mark@pos@#1@old\endcsname
+ \else
+ % use #2:
+ \pgfplots@loc@TMPa
+ \fi
+ }%
+ \fi
+}%
+
+\def\pgfplots@environment@axis{%
+ \pgfutil@ifnextchar[{\pgfplots@@environment@axis}{\pgfplots@@environment@axis[]}%
+}
+\def\endpgfplots@environment@axis{\endpgfplots@environment@opt}
+\def\pgfplots@@environment@axis[#1]{%
+ \pgfplots@environment@opt[/pgfplots/xmode=linear,/pgfplots/ymode=linear,#1]%
+}
+
+\def\pgfplots@environment@semilogxaxis{%
+ \pgfutil@ifnextchar[{\pgfplots@@environment@semilogxaxis}{\pgfplots@@environment@semilogxaxis[]}%
+}
+\def\endpgfplots@environment@semilogxaxis{\endpgfplots@environment@opt}
+\def\pgfplots@@environment@semilogxaxis[#1]{%
+ \pgfplots@environment@opt[/pgfplots/xmode=log,/pgfplots/ymode=linear,#1]%
+}
+
+\def\pgfplots@environment@semilogyaxis{%
+ \pgfutil@ifnextchar[{\pgfplots@@environment@semilogyaxis}{\pgfplots@@environment@semilogyaxis[]}%
+}
+\def\endpgfplots@environment@semilogyaxis{\endpgfplots@environment@opt}
+\def\pgfplots@@environment@semilogyaxis[#1]{%
+ \pgfplots@environment@opt[/pgfplots/xmode=linear,/pgfplots/ymode=log,#1]%
+}
+
+\def\pgfplots@environment@loglogaxis{%
+ \pgfutil@ifnextchar[{\pgfplots@@environment@loglogaxis}{\pgfplots@@environment@loglogaxis[]}%
+}
+\def\endpgfplots@environment@loglogaxis{\endpgfplots@environment@opt}
+\def\pgfplots@@environment@loglogaxis[#1]{%
+ \pgfplots@environment@opt[/pgfplots/xmode=log,/pgfplots/ymode=log,#1]%
+}
+
+
+\pgfutil@IfUndefined{tikzaddtikzonlycommandshortcutlet}{%
+ \def\tikzaddtikzonlycommandshortcutlet#1#2{%
+ \expandafter\def\expandafter\tikz@installcommands\expandafter{\tikz@installcommands
+ \let#1=#2%
+ }%
+ }%
+}{}
+
+\tikzaddtikzonlycommandshortcutlet\axis\pgfplots@environment@axis
+\tikzaddtikzonlycommandshortcutlet\endaxis\endpgfplots@environment@axis
+
+\tikzaddtikzonlycommandshortcutlet\semilogxaxis\pgfplots@environment@semilogxaxis
+\tikzaddtikzonlycommandshortcutlet\endsemilogxaxis\endpgfplots@environment@semilogxaxis
+
+\tikzaddtikzonlycommandshortcutlet\semilogyaxis\pgfplots@environment@semilogyaxis
+\tikzaddtikzonlycommandshortcutlet\endsemilogyaxis\endpgfplots@environment@semilogyaxis
+
+\tikzaddtikzonlycommandshortcutlet\loglogaxis\pgfplots@environment@loglogaxis
+\tikzaddtikzonlycommandshortcutlet\endloglogaxis\endpgfplots@environment@loglogaxis
+
+%\input pgfplots.multiaxis.code.tex
+
+\pgfplotsdefineaxistype{rectangle}{%
+ % do nothing, this is the default anyway.
+}%
+
+\catcode`\;=\pgfplots@oldcatcodesemicolon
+\catcode`\"=\pgfplots@oldcatcodedoublequote
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.errorbars.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.errorbars.code.tex
new file mode 100644
index 0000000000..8e2a96a905
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.errorbars.code.tex
@@ -0,0 +1,608 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2013 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+
+% the \addplot commands assign
+% \pgfplots@current@point@error@x@plus
+% \pgfplots@current@point@error@x@minus
+% \pgfplots@current@point@error@y@plus
+% \pgfplots@current@point@error@y@minus
+% \pgfplots@current@point@error@z@plus
+% \pgfplots@current@point@error@z@minus
+%
+% the error bar processing takes these values as input, adds them to
+% the current coordinates where applicable and according the the error
+% bar configuration and overwrites these macros.
+%
+% Then, these values are registered as "visualization depends on",
+% i.e. they will be available for every visualization phase.
+%
+% The visualization phase, in turn, expects these values. More
+% precisely, a separate visualization phase called
+% \pgfplotsaxis@visphase@name@errorbars is started. This installs the
+% plot handler \pgfplots@errorbars@plot@handler and does the same job
+% as it would for normal plot handlers.
+%
+\def\pgfplots@errorbars@survey@begin{%
+ %
+ \pgfplots@errorbars@prepare@value@serialization
+ %
+ % Now, prepare the coordinate processing for errorbars:
+ \pgfplots@PREPARE@errorbar@processing@in@dir x%
+ \pgfplots@PREPARE@errorbar@processing@in@dir y%
+ \ifpgfplots@curplot@threedim
+ \pgfplots@PREPARE@errorbar@processing@in@dir z%
+ \else
+ \let\pgfplots@PREPARE@errorbar@process@z=\relax
+ \fi
+}
+
+\def\pgfplots@errorbars@survey@end{%
+ \pgfplots@streamerrorbarend
+}%
+
+\def\pgfplots@errorbars@survey@point{%
+ % This thing gets the 'current@point@...' context,
+ % that means
+ % \pgfplots@current@point@[xy]
+ % \pgfplots@current@point@[xy]@error
+ % \pgfplots@current@point@[xy]@unfiltered
+ \pgfplots@PREPARE@errorbar@process@x%
+ \pgfplots@PREPARE@errorbar@process@y%
+ \pgfplots@PREPARE@errorbar@process@z%
+}
+
+\def\pgfplots@errorbars@visphase@begin{%
+ \pgfplots@errorbars@prepare@value@serialization
+}
+
+\def\pgfplots@errorbars@visphase@end{%
+}%
+
+\def\pgfplots@errorbars@visphase@point{%
+}%
+
+\def\pgfplots@errorbars@prepare@value@serialization{%
+ \if0\pgfplots@errorbars@xdirection
+ \else
+ \pgfplotsset{%
+ visualization depends on=value \pgfplots@current@point@error@x@plus\as\pgfplots@current@point@error@x@plus,
+ visualization depends on=value \pgfplots@current@point@error@x@minus\as\pgfplots@current@point@error@x@minus,
+ }%
+ \fi
+ \if0\pgfplots@errorbars@ydirection
+ \else
+ \pgfplotsset{%
+ visualization depends on=value \pgfplots@current@point@error@y@plus\as\pgfplots@current@point@error@y@plus,
+ visualization depends on=value \pgfplots@current@point@error@y@minus\as\pgfplots@current@point@error@y@minus,
+ }%
+ \fi
+ \ifpgfplots@curplot@threedim
+ \if0\pgfplots@errorbars@zdirection
+ \else
+ \pgfplotsset{%
+ visualization depends on=value \pgfplots@current@point@error@z@plus\as\pgfplots@current@point@error@z@plus,
+ visualization depends on=value \pgfplots@current@point@error@z@minus\as\pgfplots@current@point@error@z@minus,
+ }%
+ \fi
+ \fi
+}%
+
+% Prepares a macro \pgfplots@PREPARE@process@errorbar@for@dir##1
+% which can then be used to process error bars. The macro will be
+% \relax if error bars are disabled for #1.
+%
+% #1: either x, y or z.
+%
+% POSTCONDITION:
+% the macro \pgfplots@PREPARE@errorbar@process@#1 will be defined.
+% It is supposed to be used inside of the pgfplots streaming methods
+% and depends on the arguments
+% \pgfplots@current@point@[xyz]
+% \pgfplots@current@point@[xyz]@unfiltered
+% \pgfplots@current@point@[xyz]@error
+% The '@unfilterered' arguments are needed for log plots. I do not
+% want to compute exp(current@point@[xyz]) again.
+\def\pgfplots@PREPARE@errorbar@processing@in@dir#1{%
+ \pgfplots@PREPARE@errorbar@processing@in@dir@reset#1%
+ %
+ \if0\csname pgfplots@errorbars@#1direction\endcsname
+ % no error bars. Ok. Do nothing here.
+ \expandafter\let\csname pgfplots@PREPARE@errorbar@process@#1\endcsname=\relax
+ \else
+ %
+ % The routine which is invoked for every reported input
+ % coordinate is \pgfplots@process@errorbar@for.
+ %
+ % This here prepares its helper macros for direction '#1':
+ %
+ % More precisely, it prepared
+ %
+ % ##1 is either '+' or '-':
+ % \pgfplots@PREPARE@errorbar@process@x@##1
+ % \pgfplots@PREPARE@errorbar@process@y@##1
+ % \pgfplots@PREPARE@errorbar@process@z@##1
+ %
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \ifcase\csname pgfplots@errorbars@#1mode\endcsname\relax
+ % fixed absolute error.
+ \pgfplotscoordmath{#1}{parsenumber}{\csname pgfplots@errorbars@#1fixed\endcsname}%
+ \expandafter\let\csname pgfplots@error@coord@#1\endcsname=\pgfmathresult
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \if +##1%
+ \def\pgfplots@loc@TMPb{add}%
+ \else
+ \def\pgfplots@loc@TMPb{subtract}%
+ \fi
+ \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{%
+ {\csname pgfplots@current@point@#1\endcsname}%
+ {\csname pgfplots@error@coord@#1\endcsname}%
+ }%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ }%
+ \or% fixed relative error:
+ \pgfplotscoordmath{#1}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ %
+ % +1:
+ \pgfplotscoordmath{#1}{parsenumber}{1}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ %
+ % Prepare '1 + err':
+ \pgfplotscoordmath{#1}{op}{add}{%
+ {\pgfplots@loc@TMPa}%
+ {\pgfplots@loc@TMPb}%
+ }%
+ \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult
+ %
+ % Prepare '1 - err':
+ \pgfplotscoordmath{#1}{op}{subtract}{%
+ {\pgfplots@loc@TMPa}%
+ {\pgfplots@loc@TMPb}%
+ }%
+ \expandafter\let\csname pgfplots@error@coord@#1@-\endcsname=\pgfmathresult
+ %
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \pgfplotscoordmath{#1}{op}{multiply}{%
+ {\csname pgfplots@current@point@#1\endcsname}
+ {\csname pgfplots@error@coord@#1@##1\endcsname}%
+ }%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ }%
+ \or% explicit absolute:
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}%
+ \ifx\pgfplots@error@coord\pgfutil@empty
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ \else
+ \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@error@coord}%
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{%
+ \let\pgfplots@error@coord=\pgfmathresult
+ % remember result here - will be used in case
+ % of '+' AND '-' error bars:
+ %\expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname=\pgfmathresult
+ \if +##1%
+ \def\pgfplots@loc@TMPb{add}%
+ \else
+ \def\pgfplots@loc@TMPb{subtract}%
+ \fi
+ \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{%
+ {\csname pgfplots@current@point@#1\endcsname}%
+ {\pgfplots@error@coord}%
+ }%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ }{%
+ % input is unbounded. Skip it.
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ }%
+ \fi
+ }%
+ \or% explicit relative:
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}%
+ \ifx\pgfplots@error@coord\pgfutil@empty
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ \else
+ \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@error@coord}%
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{%
+ \let\pgfplots@error@coord=\pgfmathresult
+ % compute ' 1 + value' or '1-value':
+ \pgfplotscoordmath{#1}{one}%
+ \if +##1%
+ \def\pgfplots@loc@TMPb{add}%
+ \else
+ \def\pgfplots@loc@TMPb{subtract}%
+ \fi
+ \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{%
+ {\pgfmathresult}%
+ {\pgfplots@error@coord}%
+ }%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplotscoordmath{#1}{op}{multiply}{%
+ {\csname pgfplots@current@point@#1\endcsname}
+ {\pgfplots@error@coord}%
+ }%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ }{%
+ % input is unbounded. Skip it.
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ }%
+ \fi
+ }%
+ \fi
+ }{%
+ % LOGARITHMIC scaling. All errors are interpreted as
+ % log(x +- e_x)
+ % or
+ % log( x*(1+-e_x) )
+ %
+ % That means any input argument is
+ % given in log base e and in fixed point.
+ % Furthermore, we expect the '@unfiltered' keys to be
+ % present (I don't want to apply 'exp' again!).
+ %
+ \ifcase\csname pgfplots@errorbars@#1mode\endcsname
+ % fixed absolute, log( x +- e_x )
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@errorbars@#1fixed\endcsname}%
+ \expandafter\let\csname pgfplots@error@coord@#1\endcsname=\pgfmathresult
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \if +##1%
+ \def\pgfplots@loc@op{add}%
+ \else
+ \def\pgfplots@loc@op{subtract}%
+ \fi
+ \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{%
+ {\pgfplots@loc@TMPa}%
+ {\csname pgfplots@error@coord@#1\endcsname}%
+ }%
+ \pgfplotscoordmath{default}{tostring}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ }%
+ \or% fixed relative, log( x ( 1+-e_x ) ) = log(x) + log(1+-e_x)
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ %
+ % +1:
+ \pgfplotscoordmath{default}{one}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ %
+ % Prepare '1 + err':
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}}%
+ \pgfplotscoordmath{default}{tostring}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{%
+ }{%
+ % 1 + err <= 0 and log(1+err) is undefined:
+ \pgfplotscoordmath{default}{tostring}{\pgfplots@loc@TMPb}%
+ \pgfplots@error{Sorry, log(1 + \pgfmathresult) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}%
+ \let\pgfmathresult=\pgfutil@empty
+ }%
+ \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult
+ %
+ % Prepare '1 - err':
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}}%
+ \pgfplotscoordmath{default}{tostring}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{%
+ }{%
+ % 1 - err <= 0 and log(1+err) is undefined:
+ \pgfplotscoordmath{default}{tostring}{\pgfplots@loc@TMPb}%
+ \pgfplots@error{Sorry, log(1 - \pgfmathresult) (\pgfplots@loc@TMPa - \pgfplots@loc@TMPb) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}%
+ \let\pgfmathresult=\pgfutil@empty
+ }%
+ \expandafter\let\csname pgfplots@error@coord@#1@-\endcsname=\pgfmathresult
+ %
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \expandafter\ifx\csname pgfplots@current@point@#1@##1\endcsname\pgfutil@empty
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ \else
+ \pgfmath@basic@add@
+ {\csname pgfplots@current@point@#1\endcsname}
+ {\csname pgfplots@error@coord@#1@##1\endcsname}%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ \fi
+ }%
+ \or% explicit absolute
+ % log( x +- e_x )
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}%
+ \ifx\pgfplots@error@coord\pgfutil@empty
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ \else
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}%
+ \pgfplotscoordmath{default}{if is bounded}{\pgfmathresult}{%
+ \let\pgfplots@error@coord=\pgfmathresult
+ % remember result here - will be used in case
+ % of '+' AND '-' error bars:
+ %\expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \if +##1%
+ \def\pgfplots@loc@op{add}%
+ \else
+ \def\pgfplots@loc@op{subtract}%
+ \fi
+ \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{%
+ {\pgfplots@loc@TMPa}%
+ {\pgfplots@error@coord}%
+ }%
+ \pgfplotscoordmath{default}{tostring}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ }{%
+ % input is unbounded. Skip it.
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ }%
+ \fi
+ }%
+ %
+ \or% explicit relative:
+ % log( x ( 1+-e_x ) ) = log(x) + log(1+-e_x)
+ \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{%
+ \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}%
+ \ifx\pgfplots@error@coord\pgfutil@empty
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ \else
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}%
+ \pgfplotscoordmath{default}{if is bounded}{\pgfmathresult}{%
+ \let\pgfplots@error@coord=\pgfmathresult
+ % remember result here - will be used in case
+ % of '+' AND '-' error bars:
+ %\expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{one}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \if +##1%
+ \def\pgfplots@loc@op{add}%
+ \else
+ \def\pgfplots@loc@op{subtract}%
+ \fi
+ \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{%
+ {\pgfplots@loc@TMPa}%
+ {\pgfplots@error@coord}%
+ }%
+ \pgfplotscoordmath{default}{tostring}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{%
+ \pgfplotscoordmath{#1}{op}{add}{%
+ {\csname pgfplots@current@point@#1\endcsname}
+ {\pgfplots@error@coord}%
+ }%
+ \let\pgfplots@error@coord=\pgfmathresult
+ \pgfplots@PREPARE@errorbar@stream@it@#1##1%
+ }{%
+ % -> log( <= 0 ) -> do nothing.
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ }%
+ }{%
+ % input is unbounded - do nothing.
+ \pgfplots@PREPARE@errorbar@stream@it@empty#1##1%
+ }%
+ \fi
+ }%
+ %
+ \fi
+ }%
+ \ifcase\csname pgfplots@errorbars@#1direction\endcsname
+ % none
+ \or
+ % plus
+ \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{%
+ \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname+%
+ }%
+ \or
+ % minus
+ \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{%
+ \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname-%
+ }%
+ \or
+ % both
+ \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{%
+ \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname+%
+ \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname-%
+ }%
+ \fi
+ \fi
+}
+
+\def\pgfplots@PREPARE@errorbar@processing@in@dir@reset#1{%
+ \expandafter\let\csname pgfplots@current@point@error@#1@plus\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfplots@current@point@error@#1@minus\endcsname=\pgfutil@empty
+}%
+
+% #1: one of x,y, or z
+% #2: either '+' or '-', denotes the direction of the error
+% bar
+%
+% PRECONDITION: \pgfplots@error@coord contains the value which is to
+% be stored as \pgfplots@current@point@error@#1@plus or
+% \pgfplots@current@point@error@#1@minus
+%
+% POSTCONDITION: limits updated and
+% \pgfplots@current@point@error@#1@plus or
+% \pgfplots@current@point@error@#1@minus
+% is defined.
+\def\pgfplots@PREPARE@errorbar@stream@it@#1#2{%
+ \ifx\pgfplots@error@coord\pgfutil@empty
+ \else
+ \expandafter\let\expandafter\pgfplots@current@point@@old\csname pgfplots@current@point@#1\endcsname
+ \expandafter\let\csname pgfplots@current@point@#1\endcsname=\pgfplots@error@coord
+ \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z
+ \expandafter\let\csname pgfplots@current@point@#1\endcsname=\pgfplots@current@point@@old
+ \fi
+ %
+ % ... and remember what we need! This value will be stored as
+ % "visualization depends on"
+ \expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus#2\endcsname=\pgfplots@error@coord
+}%
+
+\def\pgfplots@PREPARE@errorbar@stream@it@empty#1#2{%
+ % ... and remember what we need! This value will be stored as
+ % "visualization depends on"
+ \expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus#2\endcsname=\pgfutil@empty
+}
+
+\def\pgfplots@errorbars@plusminus#1{%
+ \if#1+%
+ plus%
+ \else
+ minus%
+ \fi
+}%
+
+% A dummy plot handler which is used in a special visualization phase
+% for error bars.
+\def\pgfplots@errorbars@plot@handler{%
+ \gdef\pgf@plotstreamstart{%
+ \pgfplots@streamerrorbar@directdraw
+ \global\let\pgf@plotstreampoint=\pgfplots@errorbars@plot@handler@point
+ \global\let\pgf@plotstreamspecial=\relax
+ \global\let\pgf@plotstreamend=\pgfplots@streamerrorbarend
+ \pgfplots@streamerrorbarstart
+ }%
+}%
+
+\def\pgfplots@errorbars@plot@handler@point#1{%
+ \pgf@process{#1}%
+ \edef\pgfplots@errorbars@src{(\the\pgf@x,\the\pgf@y)}%
+ %
+ % we want to allow scatter plots to vary depending on 'point
+ % meta'. This here does not hurt:
+ \pgfplotsaxisvisphasetransformpointmetaifany
+ %
+ \pgfplots@errorbars@plot@handler@point@dir x%
+ \pgfplots@errorbars@plot@handler@point@dir y%
+ \ifpgfplots@curplot@threedim
+ \pgfplots@errorbars@plot@handler@point@dir z%
+ \fi
+}
+
+% #1: one of x,y, or z
+% #2: the error bar value in dir #1
+% output: \pgfplots@errorbars@trg in the form (<x>,<y>,<z>)
+\def\pgfplots@errorbars@to@pt#1#2{%
+ \begingroup
+ \expandafter\let\csname pgfplots@current@point@#1\endcsname=#2%
+ \ifpgfplots@curplot@threedim
+ \edef\pgfplotsretval{(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)}%
+ \else
+ \edef\pgfplotsretval{(\pgfplots@current@point@x,\pgfplots@current@point@y)}%
+ \fi
+ \global\let\pgfplots@errorbars@trg=\pgfplotsretval
+ \endgroup
+}%
+
+% #1: a <\macro> containing the value
+% #2: either x,y, or z
+\def\pgfplots@errorbars@plot@handler@point@dir@@#1#2{%
+ \ifx#1\pgfutil@empty
+ \else
+ \pgfplotsaxisvisphasetransformcoordinateentry{#2}{#1}%
+ \pgfplots@errorbars@to@pt{#2}{\pgfmathresult}%
+ \pgfplots@streamerrorbarcoords{\pgfplots@errorbars@src}{\pgfplots@errorbars@trg}%
+ \fi
+}%
+
+\def\pgfplots@errorbars@plot@handler@point@dir#1{%
+ \ifcase\csname pgfplots@errorbars@#1direction\endcsname
+ % none
+ \or
+ % plus
+ \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@plus\endcsname#1%
+ \or
+ % minus
+ \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@minus\endcsname#1%
+ \or
+ % both
+ \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@plus\endcsname#1%
+ \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@minus\endcsname#1%
+ \fi
+}%
+
+\def\pgfplots@streamerrorbarstart{%
+}%
+\def\pgfplots@streamerrorbarend{%
+}%
+\def\pgfplots@streamerrorbarcoords#1#2{%
+}%
+
+\def\pgfplots@streamerrorbar@directdraw{%
+ \def\pgfplots@streamerrorbarstart{}%
+ \def\pgfplots@streamerrorbarend{}%
+ \def\pgfplots@streamerrorbarcoords##1##2{%
+ \pgfplots@errorbar@draw{##1}{##2}%
+ }%
+}
+
+\newif\ifpgfplots@error@bars@allow@name@path
+
+
+% This thing here shall draw all error bar commands listed in '#2'.
+%
+% It will be invoked when any plotting commands take effect (that
+% means all limits are computed; the axis has been drawn,
+% transformations are set up...)
+\def\pgfplots@errorbars@finishwithstyleoptions[#1]#2{%
+ \scope[/pgfplots/.cd,#1,/pgfplots/every error bar]% it uses the /pgfplots/.unknown handler
+ \ifpgfplots@error@bars@allow@name@path
+ \else
+ % 'name path=xxx' should NOT include errors bars! Only the
+ % main path.
+ \def\tikz@intersect@addto@path@names##1##2{}%
+ \fi
+ #2%
+ \endscope
+}
+
+\def\pgfplots@errorbar@draw#1#2{%
+ \begingroup
+ \pgfplots@restorepgfpoint
+ \pgfkeysvalueof{/pgfplots/error bars/draw error bar/.@cmd}{#1}{#2}\pgfeov%
+ \endgroup
+}%
+
+\def\pgfplotsaxis@visphase@name@errorbars{errorbars}
+
+\expandafter\def\csname pgfplots@visphase@\pgfplotsaxis@visphase@name@errorbars\endcsname{%
+ \pgfplots@errorbars@finishwithstyleoptions[]{%
+ \let\tikz@plot@handler=\pgfplots@errorbars@plot@handler
+ \pgfplots@coord@stream@finalize@storedcoords@START
+ }%
+}%
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.lua b/graphics/pgf/contrib/pgfplots/tex/pgfplots.lua
new file mode 100644
index 0000000000..23aeaab2a8
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.lua
@@ -0,0 +1,45 @@
+
+require("pgfplots.binary")
+
+-- all classes/globals will be added to this table:
+pgfplots = {}
+
+-- will be set by TeX:
+pgfplots.pgfplotsversion = nil
+
+if _VERSION == "Lua 5.1" or _VERSION == "Lua 5.0" then
+ texio.write("pgfplots: setting 'lua support=false': the lua version on this system is " .. _VERSION .. "; expected at least 'Lua 5.2'. Use a more recent TeX distribution to benefit from LUA in pgfplots.\n")
+
+ -- the entire lua backend will be switched off if this is false:
+ tex.sprint("\\pgfplotsset{lua support=false}")
+ return
+else
+ -- well, 5.2 is what this stuff has been written for.
+ -- Is there a good reason why it shouldn't work on 5.1 !? No, I guess not. Except that it took me a long time
+ -- to figure out that 5.2 broke compatibility in lots of ways - and it was difficult enough to get it up and running.
+ -- If someone wants (and needs) to run it in 5.1 - I would accept patches.
+end
+
+require("pgfplots.pgfplotsutil")
+
+-- see pgfrcs.code.tex -- all versions after 3.0.0 (excluding 3.0.0) will set this version:
+if not pgf or not pgf.pgfversion then
+ pgfplots.log("log", "pgfplots.lua: loading complementary lua code for your pgf version...\n")
+ pgfplots.pgfluamathfunctions = require("pgfplotsoldpgfsupp.luamath.functions")
+ pgfplots.pgfluamathparser = require("pgfplotsoldpgfsupp.luamath.parser")
+else
+ pgfplots.pgfluamathparser = require("pgf.luamath.parser")
+ pgfplots.pgfluamathfunctions = require("pgf.luamath.functions")
+end
+pgfplots.pgftonumber = pgfplots.pgfluamathfunctions.tonumber
+pgfplots.tostringfixed = pgfplots.pgfluamathfunctions.tostringfixed
+pgfplots.toTeXstring = pgfplots.pgfluamathfunctions.toTeXstring
+
+
+require("pgfplots.plothandler")
+require("pgfplots.meshplothandler")
+require("pgfplots.colormap")
+require("pgfplots.streamer")
+
+-- hm. perhaps this here should become a separate module:
+require("pgfplots.pgfplotstexio")
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.markers.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.markers.code.tex
new file mode 100644
index 0000000000..c836e1ea9e
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.markers.code.tex
@@ -0,0 +1,367 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2013 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\def\pgfplots@markers@visphase@name@none{none}%
+\def\pgfplots@markers@visphase@name@afterpath@clipped{afterpath@clipped}%
+\def\pgfplots@markers@visphase@name@afterpath@unclipped{afterpath@unclipped}%
+\def\pgfplots@markers@visphase@name@endaxis@unclipped{endaxis@unclipped}%
+
+% defines \pgfplotsretval to contain the visualization phase used by
+% the current plot.
+\def\pgfplots@markers@survey@set@visphasename{%
+ \begingroup
+ %
+ % this validates+normalizes \tikz@plot@mark:
+ \pgfplots@markers@check@for@default@plot@mark
+ \ifx\tikz@plot@mark\pgfutil@empty
+ \ifpgfplots@scatterplotenabled
+ \def\b@pgfplots@has@plot@mark{1}%
+ \else
+ \def\b@pgfplots@has@plot@mark{0}%
+ \fi
+ \else
+ \def\b@pgfplots@has@plot@mark{1}%
+ \fi
+ %
+ % this sets \ifpgfplots@clip@marker@paths:
+ \pgfplots@markers@prepare@layered@graphics@marks
+ %
+ \if0\b@pgfplots@has@plot@mark
+ % no markers. Ok, we do not need a visualization phase for
+ % markers.
+ \let\pgfplotsretval=\pgfplots@markers@visphase@name@none
+ \else
+ \ifpgfplots@clip@marker@paths
+ \let\pgfplotsretval=\pgfplots@markers@visphase@name@afterpath@clipped
+ \else
+ \if2\pgfplots@clipmode
+ % clip mode=individual:
+ \let\pgfplotsretval=\pgfplots@markers@visphase@name@afterpath@unclipped
+ \else
+ % clip mode=global
+ \let\pgfplotsretval=\pgfplots@markers@visphase@name@endaxis@unclipped
+ \fi
+ \fi
+ \fi
+ %
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+\def\pgfplots@markers@visphase@after@axis@prepare{%
+ \global\pgfplotslistnewempty\pgfplots@stored@markerlist
+}
+
+% Draw any markers for which drawing has been postponed.
+%
+% The motivation here is that markers should be drawn on top of
+% their plots, and AFTER the clip path.
+%
+\def\pgfplots@markers@visphase@after@axis{%
+ \begingroup
+ \pgfplotslistforeach\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{%
+ \expandafter\pgfplots@stored@plotlist@EXTRACTENTRY\pgfplots@loc@TMPa
+%\message{^^JProcessing stored plot with precommand '\meaning\pgfplots@stored@current@precmd';^^J pgfplots@plotcmd '\meaning\pgfplots@stored@current@cmd'^^J postcommand '\meaning\pgfplots@stored@current@postcmd'^^J}%
+%\message{DATA: '\meaning\pgfplots@stored@current@data';^^J}%
+ % The precmd sets all required variables needed to
+ % finalize a plot.
+ % @see the stream preparation routines.
+ \pgfplots@stored@current@precmd
+ \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@endaxis@unclipped
+ \ifx\pgfplots@stored@current@cmd\pgfutil@empty
+ % Ah: some \pgfplotsextra command like \draw,\path,
+ % \node or even \scope or \endscope.
+ % Has been done earlier.
+ \else
+ \begingroup
+ % reconfigure...
+ \pgfkeyssetvalue{/pgfplots/on layer}{\pgfkeysvalueof{/pgfplots/mark layer}}%
+ %
+ % choose the one that is necessary for us here:
+ \let\pgfplots@markers@visphase@name=\pgfplots@markers@visphase@name@afterpath@unclipped
+ %
+ % provide an empty list of phase names here in order
+ % to turn off standard visualization phases: they
+ % have been applied already.
+ \pgfplots@stored@plotlist@visualize@selected@phases{}%
+ \endgroup
+ \fi
+ \pgfplots@stored@current@postcmd
+ \fi
+ }%
+ \endgroup
+}
+
+\def\pgfplots@execute@at@begin@plot@visualization@internal{%
+ \global\let\pgfplots@stored@markerlist@last=\relax
+}%
+
+\def\pgfplots@markers@install@plotmark@handler{%
+ % note: I can't check on tikz@transform because it can be '\relax'.
+ \pgfplots@gettikzinternal@keyval{mark indices}{tikz@mark@list}{}%
+ \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}%
+ %
+ %
+ % do not reset \tikz@options: draw color may be acquired
+ % from 'current plot style'
+ %\let\tikz@options=\pgfutil@empty%
+ \let\tikz@transform=\pgfutil@empty%
+ \tikzset{every plot/.try,every mark}%
+ %
+ % This sets colors:
+ \tikz@options
+ %
+ % This sets the \iftikz@mode@draw etc:
+ %\tikz@mode
+ % FIXME: using 'color=blue' will NOT activate filltrue!
+ % So: if 'tikz@mode' *contains* 'fillfalse', I know what to do...
+ % but all other cases are not clear
+ %--------------------------------------------------
+ % \iftikz@mode@draw
+ % \else
+ % % Override the marker codes: force 'draw=none'
+ % % even if the markers likes to be stroked:
+ % \let\pgfusepathqfillstroke=\pgfusepathqfill
+ % \fi
+ % \iftikz@mode@fill
+ % \else
+ % % Override the marker codes: force 'fill=none'
+ % % even if the markers likes to be filled:
+ % \let\pgfusepathqfillstroke=\pgfusepathqstroke
+ % \fi
+ %--------------------------------------------------
+ %
+ % this here is the MAIN marker code.
+ % It may be modified if scatter plot is enabled, see below.
+ \def\pgfplots@loc@TMPa{%
+ % the transformation has been reset before processing plot
+ % marks.
+ % Consequently, it applies only transformation options in "every mark".
+ \tikz@transform
+ \pgfuseplotmark{\tikz@plot@mark}%
+ }%
+ \ifpgfplots@scatterplotenabled
+ % Scatter plots work like this:
+ %
+ % <compute per-point meta info>
+ % /pgfplots/scatter/@pre marker code
+ % <marker code, lowlevel>
+ % /pgfplots/scatter/@post marker code
+ %
+ % -> that's all. The Rest is configurable with style which
+ % (re)define '@pre marker code' and '@post marker code' (see
+ % the docs for details).
+ %
+ % Prepare arguments for '@pre/@post' macros:
+ \t@pgfplots@toka={%
+ \begingroup
+ % prepare programmatic access to '/data point/x' etc:
+ \pgfplotspointgetcoordinates
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfkeysvalueof{/pgfplots/scatter/@pre marker code/.@cmd}\pgfeov
+ }%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}%
+ \t@pgfplots@tokc={%
+ \pgfkeysvalueof{/pgfplots/scatter/@post marker code/.@cmd}\pgfeov
+ \endgroup
+ }%
+ \edef\pgfplots@loc@TMPa{%
+ \the\t@pgfplots@toka
+ \the\t@pgfplots@tokb
+ \the\t@pgfplots@tokc
+ }%
+ \if r\pgfplots@scatter@position
+ % scatter/position=relative
+ %
+ % tikz transforms the coordinate system such that "(0,0)"
+ % is the point where the mark should be placed.
+ \else
+ % scatter/position=absolute
+ %
+ % ah - we do not want tikz's transformation.
+ %
+ % Disable it by means of \aftergroup hackery:
+ \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}%
+ \xdef\pgfplots@scatter@plot@mark{%
+ \noexpand\begingroup
+ \the\t@pgfplots@tokc
+ \noexpand\endgroup
+ }%
+ \def\pgfplots@loc@TMPa{\aftergroup\pgfplots@scatter@plot@mark}%
+ \fi
+ \fi
+ \def\pgfplots@loc@TMPb##1{%
+ \ifx\tikz@mark@list\pgfutil@empty%
+ \pgfplothandlermark{##1}%
+ \else
+ \pgfplothandlermarklisted{##1}{\tikz@mark@list}%
+ \fi
+ }%
+ \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}}%
+ \edef\pgfplots@basiclevel@plothandler{\the\t@pgfplots@tokc}%
+ \expandafter\def\expandafter\pgfplots@basiclevel@plothandler\expandafter{%
+ \pgfplots@basiclevel@plothandler
+ \global\let\pgfplots@markers@plotstreamstart=\pgf@plotstreamstart
+ \def\pgf@plotstreamstart{%
+ \pgfplots@markers@plotstreamstart
+ \global\let\pgfplots@markers@mark@handler@@=\pgf@plotstreampoint
+ \global\let\pgf@plotstreampoint=\pgfplots@markers@mark@handler
+ }%
+ }%
+ \let\tikz@plot@handler=\pgfplots@basiclevel@plothandler
+ %
+ \pgfplots@basiclevel@plothandler
+ %
+}%
+
+\def\pgfplots@markers@mark@handler#1{%
+ \ifpgfplots@clip
+ % check for clip marker paths:
+ \pgfplotsaxisifcontainspoint{\pgfplots@markers@mark@handler@@{#1}}{}%
+ \else
+ \pgfplots@markers@mark@handler@@{#1}%
+ \fi
+}%
+
+\def\pgfplots@if@has@plot@marks#1#2{%
+ % make sure there is a mark set!
+ \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}%
+ \def\pgfplots@loc@TMPa{none}%
+ \ifx\tikz@plot@mark\pgfplots@loc@TMPa
+ % this here happens only in older versions of pgf.
+ \let\tikz@plot@mark\pgfutil@empty
+ \fi
+ \ifx\tikz@plot@mark\pgfutil@empty
+ #2\relax
+ \else
+ #1\relax
+ \fi
+}%
+
+\def\pgfplots@markers@check@for@default@plot@mark{%
+ \pgfplots@if@has@plot@marks{}{%
+ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler
+ \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard
+ % oh, the "only marks" plot handler-- and no plot mark!?
+ % what's that!?
+ \ifpgfplots@scatterplotenabled
+ % scatter handles this in /pgfplots/scatter/true
+ % automatically.
+ \else
+ % that appears to be nonsense...
+ \def\tikz@plot@mark{*}%
+ \fi
+ \fi
+ }%
+}%
+
+
+% Used inside of /pgfplots/scatter/classes :
+\def\pgfplots@scatter@classes@pre@marker@code{%
+ \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{%
+ \let\pgfplots@loc@TMPa=\pgfplotspointmeta
+ %
+ % ups - no styles available? Maybe something went
+ % wrong with the 'scatter src' key. Check whether it
+ % was accidentally a numerical style:
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname
+ \else
+ % ok, be fault tolerant and round to an integer:
+ \pgfplotscoordmath{meta}{tofixed}{\pgfplotspointmeta}%
+ \begingroup
+ \pgfkeys{/pgf/number format/precision=0}%
+ \expandafter\pgfmathroundto\expandafter{\pgfmathresult}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let\pgfplotspointmeta=\pgfmathresult
+ \fi
+ % now, check again:
+ \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{%
+ % still not possible? Then, try truncating the
+ % number to an integer.
+ \expandafter\pgfutil@in@\expandafter.\expandafter{\pgfplotspointmeta}%
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPb##1.##2\relax{\def\pgfplotspointmeta{##1}}%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\relax
+ \fi
+ % now, check again:
+ \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{%
+ \pgfutil@ifundefined{pgfp@scatter@WARNING@\pgfplotspointmeta}{%
+ \pgfplotswarning{scatter classes no such class}\pgfplotspointmeta\pgfeov%
+ \expandafter\gdef\csname pgfp@scatter@WARNING@\pgfplotspointmeta\endcsname{ALREADY CHECKED}%
+ }{}%
+ \def\pgfplots@loc@TMPa{}%
+ }{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname
+ }%
+ }{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname
+ }%
+ }{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname
+ }%
+ \expandafter\scope\expandafter[\pgfplots@loc@TMPa]%
+}%
+
+% validates 'mark layer' such that it can be queried afterwards.
+\def\pgfplots@markers@prepare@layered@graphics@marks{%
+ \ifpgfplots@layered@graphics
+ \pgfkeysgetvalue{/pgfplots/mark layer}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@loc@TMPa{auto}%
+ \fi
+ \def\pgfplots@loc@TMPb{auto}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % COMBINATION: 'activate layers,mark layer=auto' --> keep
+ % backwards compatibility with 'clip marker paths'
+ % -> nothing to do.
+ \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty%
+ \else
+ % mark layer=like plot
+ \def\pgfplots@loc@TMPb{like plot}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % draw markers together with their plot (no matter
+ % on which layer):
+ \pgfplots@clip@marker@pathstrue
+ \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty%
+ \else
+ \edef\pgfplots@loc@TMPb{\pgfkeysvalueof{/pgfplots/on layer}}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % nothing to do; they are on the same layer
+ % anyway: (this is the same as 'like plot'
+ \pgfplots@clip@marker@pathstrue
+ \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty%
+ \else
+ % OK, marks will be plotted on their own layer.
+ \fi
+ \fi
+ \fi
+ \else
+ % reset its value:
+ \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty%
+ \fi
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.paths.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.paths.code.tex
new file mode 100644
index 0000000000..077a3a2b95
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.paths.code.tex
@@ -0,0 +1,71 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2012 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+%
+
+\newif\ifpgfplots@path@replace@ellipse
+
+\def\pgfplots@install@path@replacements{%
+ \ifpgfplots@path@replace@ellipse
+ \let\tikz@do@circle=\pgfplots@path@@tikz@do@circle
+ \expandafter\def\expandafter\pgfinterruptpicture\expandafter{\pgfinterruptpicture
+ \let\tikz@do@circle=\pgfplots@path@@tikz@do@circle@orig
+ }%
+ \fi
+}%
+
+\let\pgfplots@path@@tikz@do@circle@orig=\tikz@do@circle
+
+% This is a replacement for \tikz@do@circle which replaces the "xy"
+% coordinate system by one which is compatible with pgfplots.
+\def\pgfplots@path@@tikz@do@circle#1#2{%
+ \begingroup
+ \ifpgfplots@usefpu
+ \pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
+ \fi
+ \pgfmathparse{#1}%
+ \let\tikz@ellipse@x=\pgfmathresult%
+ \ifpgfmathunitsdeclared%
+ \pgfmathparse{#2}%
+ \let\tikz@ellipse@y=\pgfmathresult%
+ \ifpgfmathunitsdeclared%
+ \pgfpathellipse{\pgfpointorigin}{%
+ \pgfqpoint{\tikz@ellipse@x pt}{0pt}}{\pgfpoint{0pt}{\tikz@ellipse@y pt}}%
+ \else%
+ \PackageError{tikz}{You cannot mix dimensions and dimensionless values in an ellipse}{}%
+ \fi%
+ \else%
+ \pgfmathparse{#2}%
+ \let\tikz@ellipse@y=\pgfmathresult%
+ \ifpgfmathunitsdeclared%
+ \PackageError{tikz}{You cannot mix dimensions and dimensionless values in an ellipse}{}%
+ \else%
+ \pgfpathellipse{\pgfpointorigin}
+ {\pgfplotspointaxisdirectionxy{\tikz@ellipse@x}{0}}
+ {\pgfplotspointaxisdirectionxy{0}{\tikz@ellipse@y}}%
+ \fi%
+ \fi%
+ \endgroup
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.revision.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.revision.tex
new file mode 100644
index 0000000000..6dbe7ab108
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.revision.tex
@@ -0,0 +1,15 @@
+\begingroup
+\catcode`\-=12
+\catcode`\/=12
+\catcode`\.=12
+\catcode`\:=12
+\catcode`\+=12
+\catcode`\-=12
+\gdef\pgfplotsrevision{1.16}
+\gdef\pgfplotsversion{1.16}
+\gdef\pgfplotsversiondatetime{2018-03-28 20:42:04 +0200}
+\gdef\pgfplotsrevisiondatetime{2018-03-28 20:42:04 +0200}
+\gdef\pgfplots@glob@TMPa#1-#2-#3 #4\relax{#1/#2/#3}
+\xdef\pgfplotsversiondate{\expandafter\pgfplots@glob@TMPa\pgfplotsversiondatetime\relax}
+\xdef\pgfplotsrevisiondate{\expandafter\pgfplots@glob@TMPa\pgfplotsrevisiondatetime\relax}
+\endgroup
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.scaling.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.scaling.code.tex
new file mode 100644
index 0000000000..d5d045ddfb
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.scaling.code.tex
@@ -0,0 +1,3399 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2012 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% PRECONDITION:
+% - final axis limits are given in transformed range
+% - \pgfplots@set@default@size@options has been invoked before
+% POSTCONDITION:
+% - the current x,y and z unit vectors are defined properly;
+% - the fast-access registers are initialised for the axis limits,
+% - the following macros are assigned:
+% \pgfplots@[xyz]@veclength
+% \pgfplots@[xyz]@inverseveclength
+% \pgfplotspointxaxis
+% \pgfplotspointyaxis
+% \pgfplotspointzaxis
+% \pgfplotspointcenter
+% \pgfplotspointminminmin
+%
+\def\pgfplots@initsizes{%
+ % INIT.
+ %
+ %
+ \pgfplots@xmin@reg=\pgfplots@xmin pt %
+ \pgfplots@xmax@reg=\pgfplots@xmax pt %
+ \pgfplots@ymin@reg=\pgfplots@ymin pt %
+ \pgfplots@ymax@reg=\pgfplots@ymax pt %
+ \ifpgfplots@threedim
+ \pgfplots@zmin@reg=\pgfplots@zmin pt %
+ \pgfplots@zmax@reg=\pgfplots@zmax pt %
+ \fi
+ %
+ %-----------------------------------------
+ % PROCESS THE 'width' and 'height' options
+ %-----------------------------------------
+ %
+ %
+ \pgfkeysgetvalue{/pgfplots/view/az}{\pgfplots@view@az}%
+ \pgfkeysgetvalue{/pgfplots/view/el}{\pgfplots@view@el}%
+ \ifpgfplots@threedim
+ \else
+ \let\pgfplots@view@el=\pgfutil@empty
+ \let\pgfplots@view@az=\pgfutil@empty
+ \fi
+ \ifx\pgfplots@view@az\pgfutil@empty
+ % Note that in presence of "x,y,z" options, the
+ % \pgfplots@set@default@size@options RESETS /pgfplots/view/az.
+ %
+ %\let\pgfplots@rectangle@width=\pgfutil@empty
+ %\let\pgfplots@rectangle@height=\pgfutil@empty
+ \pgfplotsmathvectorfromstring{0,0,1}{default}%
+ \let\pgfplots@view@dir@threedim=\pgfplotsretval
+ %
+ \ifx\pgfplots@x\pgfutil@empty
+ \ifx\pgfplots@width\pgfutil@empty
+ \pgfplots@error{INTERNAL LOGIC ERROR! WIDTH NOT SET}%
+ \fi
+ \fi
+ %
+ \ifx\pgfplots@y\pgfutil@empty
+ \ifx\pgfplots@height\pgfutil@empty
+ \pgfplots@error{INTERNAL LOGIC ERROR! HEIGHT NOT SET}%
+ \fi
+ \fi
+ \ifpgfplots@threedim
+ \def\pgfplots@tmp@Zscale{1}%
+ \else
+ \def\pgfplots@tmp@Zscale{0}%
+ \fi
+ %
+ \pgfplots@initsizes@setunitvector{x}{0}{1}{\pgfplots@tmp@xisaxisparallel}%
+ \pgfplots@initsizes@setunitvector{y}{1}{1}{\pgfplots@tmp@yisaxisparallel}%
+ \pgfplots@initsizes@setunitvector{z}{2}{\pgfplots@tmp@Zscale}{\pgfplots@loc@TMPc}%
+ %
+ \pgfplots@scaling@changewidthheight@for@enlargelimits@by@dimension%
+ %
+ \pgfplots@scale@plotbox@to@widthheight
+ \else
+ % 3D case by `view':
+ \let\pgfplots@x=\pgfutil@empty
+ \let\pgfplots@y=\pgfutil@empty
+ \let\pgfplots@z=\pgfutil@empty
+ \pgfplotssetaxesfromazel{\pgfplots@view@az}{\pgfplots@view@el}{\pgfplots@tmp@xisaxisparallel}%
+ %
+ \pgfplots@scaling@changewidthheight@for@enlargelimits@by@dimension%
+ %
+ \pgfplots@scale@plotbox@to@widthheight
+ \if1\pgfplots@tmp@xisaxisparallel%
+ \def\pgfplots@tmp@yisaxisparallel{1}%
+ \fi
+ \fi
+ \pgfplots@computeunitvectorlengths
+ %
+ \pgfplots@scaling@apply@enlargelimits@by@dimension{x}%
+ \pgfplots@scaling@apply@enlargelimits@by@dimension{y}%
+ \ifpgfplots@threedim
+ \pgfplots@scaling@apply@enlargelimits@by@dimension{z}%
+ \fi
+ %
+ \ifpgfplots@threedim
+ \pgfplotsgetnormalforcurrentview
+ \fi
+%\message{Pgfplots debug: initialised unit vectors to x=(\the\pgf@xx,\the\pgf@xy), y=(\the\pgf@yx,\the\pgf@yy), z=(\the\pgf@zx,\the\pgf@zy), n = (\pgfplots@view@dir@threedim). Limits are x=\pgfplots@xmin:\pgfplots@xmax, y=\pgfplots@ymin:\pgfplots@ymax^^J }%
+ %
+ \let\pgfplotsmathfloatviewdepthxyz@=\pgfplotsmathfloatviewdepthxyz@infigure
+ \let\pgfplotsmathviewdepthxyz@=\pgfplotsmathviewdepthxyz@infigure
+ %
+ \pgfplotsmath@ifzero{\pgfplots@x@veclength}{\pgfplots@hide@xtrue\pgfplots@shownothingof@xtrue}{}%
+ \pgfplotsmath@ifzero{\pgfplots@y@veclength}{\pgfplots@hide@ytrue\pgfplots@shownothingof@ytrue}{}%
+ \ifpgfplots@threedim
+ \pgfplotsmath@ifzero{\pgfplots@z@veclength}{\pgfplots@hide@ztrue\pgfplots@shownothingof@ztrue}{}%
+ \else
+ \if1\pgfplots@tmp@xisaxisparallel%
+ \if1\pgfplots@tmp@yisaxisparallel%
+ % Optimize for axis-parallel case!
+ % puh. Did not make any measureable difference!? Ok...
+ \let\pgfplotsqpointxy=\pgfplotsqpointxy@orthogonal
+ \fi
+ \fi
+ \fi
+}
+
+% Defines \pgfmathresult to be the desired width without axis labels.
+%
+\def\pgfplots@initsizes@get@width@withoutlabels{%
+ \pgfplots@initsizes@handle@label@const{\pgfplots@width}{45pt}{width}%
+}
+
+% Defines \pgfmathresult to be the desired height without axis labels.
+\def\pgfplots@initsizes@get@height@withoutlabels{%
+ \pgfplots@initsizes@handle@label@const{\pgfplots@height}{45pt}{height}%
+}
+
+\def\pgfplots@initsizes@handle@label@const#1#2#3{%
+ \begingroup
+ \pgf@xa=#1\relax
+ % EXPECTED WIDTH = X = \pgfplots@width
+ % ACTUAL WIDTH = c + x * (xmax-xmin)
+ % where c is a CONSTANT (for the axis labels/tick labels).
+ % -> \pgfplots@tmpXscale = (X - c) / (x *(xmax-xmin))
+ %
+ % \pgf@xa := X-c:
+ \ifpgfplots@scale@only@axis
+ \else
+ \advance\pgf@xa by-#2 % FIXME determine 'c' correctly!
+ \fi
+ \ifdim\pgf@xa<0pt
+ \pgfplots@error{Error: Plot #3 `#1' is too small. This cannot be implemented while maintaining constant size for labels. Sorry, label sizes are only approximate. You will need to adjust your #3.}%
+ \pgf@xa=0pt
+ \fi
+ \edef\pgfmathresult{\the\pgf@xa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% #1: axis
+\def\pgfplots@axis@apply@post@scale#1{%
+ %
+ \pgfkeysgetvalue{/pgfplots/#1 post scale}\pgfplots@loc@TMPd
+ \ifx\pgfplots@loc@TMPd\pgfutil@empty
+ \else
+ \pgfmathparse{\csname pgfplots@target@unit@scale@#1x\endcsname*\pgfplots@loc@TMPd}%
+ \expandafter\let\csname pgfplots@target@unit@scale@#1x\endcsname=\pgfmathresult
+ %
+ \pgfmathparse{\csname pgfplots@target@unit@scale@#1y\endcsname*\pgfplots@loc@TMPd}%
+ \expandafter\let\csname pgfplots@target@unit@scale@#1y\endcsname=\pgfmathresult
+ \fi
+}
+
+% Takes azimuth (horizontal angle) '#1' and elongation (vertical
+% angle) '#2' (both in degrees) and computes
+% x,y and z vectors which define the view in the direction
+% defined by '#1' and '#2'.
+%
+% 'azimuth' means a rotation around the viewport's x axis. 'elongation' means
+% a rotation around the original coordinate system's z axis.
+%
+% The method works by computing
+% Az = [ cos(azimuth) -sin(azimuth) 0; ...
+% sin(azimuth) cos(azimuth) 0; ...
+% 0 0 1 ];
+%
+%
+% Ax = [ 1 0 0; ...
+% 0 cos(elevation) -sin(elevation) ;...
+% 0 sin(elevation) cos(elevation) ];
+%
+% v= Ax * Az;
+% = [ ...
+% cosaz -sinaz cosel sinaz sinel; ...
+% sinaz cosaz cosel -sinel cosaz; ...
+% 0 sinel cosel ];
+%
+% Then, we use the rotated XZ plane as viewport, that means
+% xvec = v * [1 0 0]' = <first column of v>
+% zvec = v * [0 0 1]' = <third column of v>
+% and we define the projection onto the twodimensional surface
+% spanned by 'xvec' and 'zvec' as
+% P( q ) = [ q^T xvec, q^T zvec ]'
+% for q in R^3.
+% As a consequence, we compute the three unit vectors as
+% x = P( [1 0 0] )
+% = [ cosaz, sinaz sinel ]'
+% y = P( [0 1 0] )
+% = [ sinaz, -sinel cosaz ]'
+% z = P( [0 0 1] )
+% = [ 0, cosel]'
+%
+% Furthermore, the 3D view vector which points into the direction of the view
+% is
+% n = v * [0 1 0 ]' = <second column of v> = [-sinaz cosel, cosaz cosel, sinel]'
+% because the normal view point was the XZ plane with y as its normal
+% vector.
+% The 3D vector n is returned by this routine as well - it is
+% necessary for some kind of z buffering (determining what is
+% foreground and what is background).
+%
+% INPUT:
+% - #1 : azimuth ("yaw")
+% - #2 : elevation ("pitch")
+% OUTPUT:
+% - #3 : a macro which will be set to '1' if and only if
+% the viewport is the standard XY axis (i.e. azimuth=0, elevation=90).
+% - [xyz] vectors,
+% \pgfplots@view@dir@threedim will contain the three components
+% of 'n' (without the suffix 'pt', but in units of 'pt') (see
+% \pgfplotsmathvectorfromstring).
+\def\pgfplotssetaxesfromazel#1#2#3{%
+ \begingroup
+ \pgfmathparse{#1}%
+ \let\pgfplots@az=\pgfmathresult
+ \pgfmathparse{#2}%
+ \edef\pgfplots@el{-\pgfmathresult}%
+ \pgfmathsin@{\pgfplots@az}%
+ \let\sinaz=\pgfmathresult
+ \pgfmathcos@{\pgfplots@az}%
+ \let\cosaz=\pgfmathresult
+ \pgfmathsin@{\pgfplots@el}%
+ \let\sinel=\pgfmathresult
+ \pgfmathcos@{\pgfplots@el}%
+ \let\cosel=\pgfmathresult
+ % x:
+ \pgfmathmultiply@{\sinaz}{\sinel}%
+ \xdef\pgfplots@glob@TMPa{\noexpand\pgfqpoint{\cosaz pt}{\pgfmathresult pt}}%
+ % y:
+ \pgfmathmultiply@{-\sinel}{\cosaz}%
+ \xdef\pgfplots@glob@TMPb{\noexpand\pgfqpoint{\sinaz pt}{\pgfmathresult pt}}%
+ % z:
+ \xdef\pgfplots@glob@TMPc{\noexpand\pgfqpoint{0pt}{\cosel pt}}%
+ %
+ \pgfkeysgetvalue{/pgfplots/x dir/value}\pgfplots@loc@dirvalue@x
+ \pgfkeysgetvalue{/pgfplots/y dir/value}\pgfplots@loc@dirvalue@y
+ \pgfkeysgetvalue{/pgfplots/z dir/value}\pgfplots@loc@dirvalue@z
+ \if r\pgfplots@loc@dirvalue@x
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPa}%
+ \xdef\pgfplots@glob@TMPa{\noexpand\pgfqpointscale{-1}{\the\t@pgfplots@toka}}%
+ \fi
+ \if r\pgfplots@loc@dirvalue@y
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPb}%
+ \xdef\pgfplots@glob@TMPb{\noexpand\pgfqpointscale{-1}{\the\t@pgfplots@toka}}%
+ \fi
+ \if r\pgfplots@loc@dirvalue@z
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPc}%
+ \xdef\pgfplots@glob@TMPc{\noexpand\pgfqpointscale{-1}{\the\t@pgfplots@toka}}%
+ \fi
+ %
+ % Process 'plot box ratio':
+ \def\pgfplots@extract@plot@box@ratio##1##2##3##4\pgfplots@EOI{%
+ \pgfmathparse{##1}\let\pgfplots@plotboxratio@x=\pgfmathresult
+ \pgfmathparse{##2}\let\pgfplots@plotboxratio@y=\pgfmathresult
+ \pgfmathparse{##3}\let\pgfplots@plotboxratio@z=\pgfmathresult
+ }%
+ \def\pgfplots@extract@plot@box@ratio@spaces##1 ##2 ##3 ##4\pgfplots@EOI{%
+ \pgfplots@extract@plot@box@ratio{##1}{##2}{##3}{##4}\pgfplots@EOI
+ }%
+ \pgfkeysgetvalue{/pgfplots/plot box ratio}\pgfplots@loc@TMPa
+ % Auto-determine input format which is either '{x}{y}{z}' or 'x y z'
+ \def\pgfplots@loc@TMPb{%
+ \pgfutil@ifnextchar\bgroup{%
+ \pgfplots@loc@tmptrue
+ \pgfplots@gobble@until@EOI
+ }{%
+ \pgfplots@loc@tmpfalse
+ \pgfplots@gobble@until@EOI
+ }%
+ }%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfplots@EOI
+ \ifpgfplots@loc@tmp
+ % Ah- braces format.
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa{1}{1}{1}}%
+ \expandafter\pgfplots@extract@plot@box@ratio\pgfplots@loc@TMPa\pgfplots@EOI
+ \else
+ % Ah- space-separated
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa\space 1 1 1}%
+ \expandafter\pgfplots@extract@plot@box@ratio@spaces\pgfplots@loc@TMPa\pgfplots@EOI
+ \fi
+ %
+ % process it:
+ \ifdim\pgfplots@plotboxratio@x pt=1pt
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPa}%
+ \xdef\pgfplots@glob@TMPa{\noexpand\pgfqpointscale{\pgfplots@plotboxratio@x}{\the\t@pgfplots@toka}}%
+ \fi
+ \ifdim\pgfplots@plotboxratio@y pt=1pt
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPb}%
+ \xdef\pgfplots@glob@TMPb{\noexpand\pgfqpointscale{\pgfplots@plotboxratio@y}{\the\t@pgfplots@toka}}%
+ \fi
+ \ifdim\pgfplots@plotboxratio@z pt=1pt
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPc}%
+ \xdef\pgfplots@glob@TMPc{\noexpand\pgfqpointscale{\pgfplots@plotboxratio@z}{\the\t@pgfplots@toka}}%
+ \fi
+ %
+ % n (3D!)
+ \pgfmathmultiply@{-\sinaz}{\cosel}%
+ \let\pgfmathresultNx=\pgfmathresult
+ \pgfmathmultiply@{\cosaz}{\cosel}%
+ \xdef\pgfplots@glob@TMPd{{\pgfmathresultNx}{\pgfmathresult}{\sinel}}%
+ \endgroup
+%\message{Setting x,y and z from {#1}{#2} to^^J x = \meaning\pgfplots@glob@TMPa,^^J y = \meaning\pgfplots@glob@TMPb,^^J z = \meaning\pgfplots@glob@TMPc,^^J n = \pgfplots@glob@TMPd.^^J}%
+ \pgfsetxvec{\pgfplots@glob@TMPa}%
+ \pgfsetyvec{\pgfplots@glob@TMPb}%
+ \pgfsetzvec{\pgfplots@glob@TMPc}%
+ \def\pgfplots@loc@TMPa##1##2##3{%
+ \pgfplotsmathvectorfromstring{##1,##2,##3}{default}%
+ \let\pgfplots@view@dir@threedim=\pgfplotsretval
+ }%
+ \expandafter\pgfplots@loc@TMPa\pgfplots@glob@TMPd\relax
+ \def#3{0}%
+}%
+
+% Takes the current plot box, defined by the actual PGF x,y and z unit
+% vectors, and re-scales it such that it fits into the
+% width and height of the axis (as they have been provided by the
+% user).
+%
+% @see \pgfplots@scale@axisbox@to@widthheight
+% @see\pgfplots@scaleaxes@to@BB
+\def\pgfplots@scale@plotbox@to@widthheight{%
+ \pgfplots@initsizes@get@width@withoutlabels
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplots@initsizes@get@height@withoutlabels
+ %
+ \edef\pgfplots@loc@TMPa{{\pgfplots@loc@TMPa}{\pgfmathresult}}%
+ \expandafter\pgfplots@scaleaxes@to@BB\pgfplots@loc@TMPa
+}
+
+
+% Takes the current PGF x,y and z unit vectors and scales them such
+% that the bounding box of the final image has width #1 and height #2.
+%
+% The relative length of the input vectors is important for the 3D case: it
+% will be scaled as-is.
+%
+% PRECONDITION
+% - the x, y and z unit vectors have been set to the proper
+% DIRECTIONS. Their relative vector lengths are set-up properly
+% (i.e. y is twice as large as x and half as large as z or so).
+% - the \ifpgfplots@threedim boolean is set.
+% - the data limits have been initialised and transformed according
+% to the data transformation.
+% - the data transformation has ONLY been applied to the axis limits
+% (not other axis inputs). It may be changed by this method.
+%
+% POSTCONDITION
+% - the unit vectors have been re-scaled such that the final plot
+% has the desired dimensions.
+% - the @veclength and @inverseveclength have been initialized
+\def\pgfplots@scaleaxes@to@BB#1#2{%
+ \if0\pgfplots@scale@mode@choice
+ % scale mode=auto
+ \def\pgfplots@scale@mode@choice{2}% stretch to fill
+ \fi
+ \pgfplots@scaleaxes@to@BB@{#1}{#2}%
+ % NOTE: we have not yet computed the lengths of unit vectors. In
+ % addition, we have not yet updated the normal vector.
+}%
+
+% DEPRECATED:
+\def\pgfplots@rescale@view@dir{%
+ \expandafter\ifx\csname pgfplots@view@dir@threedim\endcsname\relax
+ \else
+ % At this point, we ALREADY HAVE a normal vector. However, it
+ % might be skewed due to the scaling.
+ %
+ % -> recompute normal vector. In earlier versions, I tried to
+ % rescale it - but that was too complicated (for me). This
+ % here produces correct results, and it is a correct approach
+ % anyway.
+ \pgfplotsgetnormalforcurrentview
+ \fi
+}%
+
+% \pgfplots@BB@for@plotbox@get@unit@scales@for@limits{#1}{#2}{#3}:
+% a helper tool which computes individual unit vector scales in order
+% to respect the limits.
+%
+% This method ignores width/height; its purpose is only to make sure
+% that [xmin,xmax] fits into the CURRENT plot box.
+%
+% In this context, each unit vector is supposed to be scaled such that
+% width/height fit if xmin=0 and xmax=1.
+%
+% #1 [output] a macro name which will contain the INVERSE scale for x
+% #2 [output] a macro name which will contain the INVERSE scale for y
+% #3 [output] a macro name which will contain the INVERSE scale for z
+%
+\def\pgfplots@BB@for@plotbox@get@unit@scales@for@limits#1#2#3{%
+ \if1\b@pgfplots@plotbox@xisunit
+ % Consequently, we have to multiply with 1/(max-min):
+ % compute 1/(xmax - xmin) in float for more recent versions (see /pgfplots/compat/scaling).
+ % I observed that it is much more accurate
+ \pgfmathsubtract@{\pgfplots@xmax}{\pgfplots@xmin}%
+ \else
+ \def\pgfmathresult{1}%
+ \fi
+ \let#1=\pgfmathresult
+ %
+ \if1\b@pgfplots@plotbox@yisunit
+ \pgfmathsubtract@{\pgfplots@ymax}{\pgfplots@ymin}%
+ \else
+ \def\pgfmathresult{1}%
+ \fi
+ \let#2=\pgfmathresult
+ %
+ \ifpgfplots@threedim
+ \if1\b@pgfplots@plotbox@zisunit
+ \pgfmathsubtract@{\pgfplots@zmax}{\pgfplots@zmin}%
+ \else
+ \def\pgfmathresult{1}%
+ \fi
+ \else
+ \def\pgfmathresult{1}%
+ \fi
+ \let#3=\pgfmathresult
+}%
+\def\pgfplots@BB@for@plotbox{%
+ \ifpgfplots@threedim
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmin\pgfplots@plotbox@ymin\pgfplots@plotbox@zmin}%
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmin\pgfplots@plotbox@ymin\pgfplots@plotbox@zmax}%
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmin\pgfplots@plotbox@ymax\pgfplots@plotbox@zmin}%
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmin\pgfplots@plotbox@ymax\pgfplots@plotbox@zmax}%
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmax\pgfplots@plotbox@ymin\pgfplots@plotbox@zmin}%
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmax\pgfplots@plotbox@ymin\pgfplots@plotbox@zmax}%
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmax\pgfplots@plotbox@ymax\pgfplots@plotbox@zmin}%
+ \pgfpathmoveto{\pgfqpointxyz\pgfplots@plotbox@xmax\pgfplots@plotbox@ymax\pgfplots@plotbox@zmax}%
+ \else
+ \pgfpathmoveto{\pgfqpointxy\pgfplots@plotbox@xmin\pgfplots@plotbox@ymin}%
+ \pgfpathmoveto{\pgfqpointxy\pgfplots@plotbox@xmin\pgfplots@plotbox@ymax}%
+ \pgfpathmoveto{\pgfqpointxy\pgfplots@plotbox@xmax\pgfplots@plotbox@ymin}%
+ \pgfpathmoveto{\pgfqpointxy\pgfplots@plotbox@xmax\pgfplots@plotbox@ymax}%
+ \fi
+}%
+
+
+
+% Returns width and height of the current plot box
+% (the path produced by \pgfplots@BB@for@plotbox).
+%
+% PRECONDITION: \pgfplots@BB@for@plotbox is defined to produce a path
+% for the plot box
+%
+% POSTCONDITION: \pgfplotsretval contains the with and
+% \pgfplotsretvalb contains the height
+\def\pgfplots@get@dimension@of@BB{%
+ \begingroup
+ \pgfinterruptboundingbox
+ %
+ % the result of this call will be used to scale to target
+ % dimensions. If we omit \pgftransformreset here, we might
+ % accidentally UNDO the PGF transformation matrix (compare by
+ % writing \tikzpicture[scale=0.5] before the axis).
+ \pgftransformreset
+ %
+ % STEP 1: compute the bounding box for the plot box.
+ \pgfplots@BB@for@plotbox
+ %
+ % TMPa = width
+ \pgf@xa=\pgf@pathmaxx
+ \advance\pgf@xa by-\pgf@pathminx
+ % TMPb = height
+ \pgf@xb=\pgf@pathmaxy
+ \advance\pgf@xb by-\pgf@pathminy
+ \xdef\pgfplots@glob@TMPa{%
+ \def\noexpand\pgfplotsretval{\the\pgf@xa}%
+ \def\noexpand\pgfplotsretvalb{\the\pgf@xb}%
+ }%
+ \pgfusepath{discard}%
+ \endpgfinterruptboundingbox
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+\def\pgfplots@scaleaxes@to@BB@prepare@plotbox@limits{%
+ \def\b@pgfplots@rescale@x{1}%
+ \def\b@pgfplots@rescale@y{1}%
+ \def\b@pgfplots@rescale@z{1}%
+ %
+ \pgfplots@scaleaxes@to@BB@prepare@plotbox@limits@ x%
+ \pgfplots@scaleaxes@to@BB@prepare@plotbox@limits@ y%
+ \pgfplots@scaleaxes@to@BB@prepare@plotbox@limits@ z%
+}%
+
+\def\pgfplots@scaleaxes@to@BB@prepare@plotbox@limits@#1{%
+ \expandafter\ifx\csname pgfplots@#1\endcsname\pgfutil@empty
+ % Ah - we have no unit vector in this direction.
+ \expandafter\def\csname pgfplots@plotbox@#1min\endcsname{0}%
+ \expandafter\def\csname pgfplots@plotbox@#1max\endcsname{1}%
+ \expandafter\def\csname b@pgfplots@plotbox@#1isunit\endcsname{1}%
+ \else
+ % we have a unit vector... prepare for limits. Note that the
+ % unit vector has been prepared for data scaling already.
+ \pgfutil@namelet{pgfplots@plotbox@#1min}{pgfplots@#1min}%
+ \pgfutil@namelet{pgfplots@plotbox@#1max}{pgfplots@#1max}%
+ \expandafter\def\csname b@pgfplots@plotbox@#1isunit\endcsname{0}%
+ \if2\pgfplots@scale@mode@choice
+ % scale mode=stretch to fill
+ % do NOT rescale unit vectors for stretch to fill :
+ \expandafter\def\csname b@pgfplots@rescale@#1\endcsname{0}%
+ \fi
+ \fi
+ \expandafter\def\csname b@pgfplots@unitvec@is@zero@#1\endcsname{0}%
+ \ifdim\csname pgf@#1x\endcsname=0pt %
+ \ifdim\csname pgf@#1y\endcsname=0pt %
+ \expandafter\def\csname b@pgfplots@unitvec@is@zero@#1\endcsname{1}%
+ \fi
+ \fi
+}
+
+
+\def\pgfplots@scaleaxes@to@BB@#1#2{%
+ \begingroup
+%\message{SCALING: scale mode choice = \pgfplots@scale@mode@choice^^J}%
+ %
+ \pgfplots@scaleaxes@to@BB@prepare@plotbox@limits
+ \def\pgfplots@target@limitrescale@x{1}%
+ \def\pgfplots@target@limitrescale@y{1}%
+ \def\pgfplots@target@limitrescale@z{1}%
+ \if1\pgfplots@scale@mode@choice
+ % scale mode=none
+ \def\xscale{1}%
+ \def\yscale{1}%
+ \def\pgfplots@target@unit@scale@inv@x{1}%
+ \def\pgfplots@target@unit@scale@inv@y{1}%
+ \def\pgfplots@target@unit@scale@inv@z{1}%
+ \else
+ %
+ % This here CAN cause anisotropic (different) scaling factors.
+ \pgfplots@BB@for@plotbox@get@unit@scales@for@limits
+ {\pgfplots@target@unit@scale@inv@x}
+ {\pgfplots@target@unit@scale@inv@y}
+ {\pgfplots@target@unit@scale@inv@z}%
+ %
+%\message{got scales to fit limits into BB: x=1/\pgfplots@target@unit@scale@inv@x, y=1/\pgfplots@target@unit@scale@inv@y, z=1/\pgfplots@target@unit@scale@inv@z^^J}%
+ %
+ \if3\pgfplots@scale@mode@choice
+ % scale mode=scale uniformly
+ %
+ % We need to recompensate in case the previous method chose
+ % different unit scaling scalings:
+ \pgfplots@BB@for@plotbox@get@unit@scales@compensated@axis@limits
+ {\pgfplots@target@unit@scale@inv@x}
+ {\pgfplots@target@unit@scale@inv@y}
+ {\pgfplots@target@unit@scale@inv@z}
+ {\pgfplots@target@limitrescale@x}{\pgfplots@target@limitrescale@y}{\pgfplots@target@limitrescale@z}%
+ %
+ %\pgfplots@BB@update@cumulative@limit@compensations
+ \fi
+%\message{adjusted scales for 'scale mode': x=1/\pgfplots@target@unit@scale@inv@x, y=1/\pgfplots@target@unit@scale@inv@y, z=1/\pgfplots@target@unit@scale@inv@z; ^^J axis limit componsation scales x=\pgfplots@target@limitrescale@x, y=\pgfplots@target@limitrescale@y, z=\pgfplots@target@limitrescale@z^^J}%
+ %
+ % ATTENTION: this MODIFIES \pgfplots@target@limitrescale@x and its
+ % variants directly - and it needs the input values.
+ \pgfplots@get@scale@horiz@and@vert
+ {#1}%
+ {#2}%
+ {\xscale}%
+ {\yscale}% yscale
+ {\pgfplots@target@limitrescale@x}%
+ {\pgfplots@target@limitrescale@y}%
+ {\pgfplots@target@limitrescale@z}%
+%\message{Got W/H scale for all x components: \xscale; for all y components: \xscale; ^^J axis limit componsation scales x=1/\pgfplots@target@limitrescale@x, y=1/\pgfplots@target@limitrescale@y, z=1/\pgfplots@target@limitrescale@z^^J}%
+ % Ok, we know the W,H scalings now.
+ %
+ %
+ %
+ \pgfplots@apply@unit@ratio
+ {\pgfplots@target@unit@scale@inv@x}
+ {\pgfplots@target@unit@scale@inv@y}
+ {\pgfplots@target@unit@scale@inv@z}
+ {\pgfplots@target@limitrescale@x@}{\pgfplots@target@limitrescale@y@}{\pgfplots@target@limitrescale@z@}%
+ \pgfplots@BB@update@cumulative@limit@compensations
+ %
+%\message{adjusted scales for 'unit vector ratio': x=1/\pgfplots@target@unit@scale@inv@x, y=1/\pgfplots@target@unit@scale@inv@y, z=1/\pgfplots@target@unit@scale@inv@z; ^^J axis limit componsation scales x=\pgfplots@target@limitrescale@x, y=\pgfplots@target@limitrescale@y, z=\pgfplots@target@limitrescale@z^^J}%
+ \fi
+ %
+ %
+ \pgfplots@scaling@minimize@limitrescale%
+ %
+ %
+ \pgfplots@scaling@adjust@datascaling%
+%\message{adjusted scales for data scale trafo: x=1/\pgfplots@target@unit@scale@inv@x, y=1/\pgfplots@target@unit@scale@inv@y, z=1/\pgfplots@target@unit@scale@inv@z; ^^J axis limit componsation scales x=\pgfplots@target@limitrescale@x, y=\pgfplots@target@limitrescale@y, z=\pgfplots@target@limitrescale@z;^^J data scale trafo exponents x=\pgfplots@target@datascaletrafo@x@exponent@old -> \pgfplots@target@datascaletrafo@x@exponent, y=\pgfplots@target@datascaletrafo@y@exponent@old -> \pgfplots@target@datascaletrafo@y@exponent, z=\pgfplots@target@datascaletrafo@z@exponent@old -> \pgfplots@target@datascaletrafo@z@exponent^^J}%
+ %
+ \pgfplots@scaling@compute@final@scales%
+ {\xscale}{\yscale}%
+ {\pgfplots@target@unit@scale@inv@x}%
+ {\pgfplots@target@unit@scale@inv@y}%
+ {\pgfplots@target@unit@scale@inv@z}%
+ %
+ \pgfplots@axis@apply@post@scale{x}%
+ \pgfplots@axis@apply@post@scale{y}%
+ \ifpgfplots@threedim
+ \pgfplots@axis@apply@post@scale{z}%
+ \fi
+ %
+ % and finally, resize limits appropriately and add all cumulative limit compensations:
+ \xdef\pgfplots@glob@TMPa{%
+ %
+ \pgf@xx=\pgfplots@target@unit@scale@xx\pgf@xx
+ \pgf@xy=\pgfplots@target@unit@scale@xy\pgf@xy
+ %
+ \pgf@yx=\pgfplots@target@unit@scale@yx\pgf@yx
+ \pgf@yy=\pgfplots@target@unit@scale@yy\pgf@yy
+ %
+ \ifpgfplots@threedim
+ \pgf@zx=\pgfplots@target@unit@scale@zx\pgf@zx
+ \pgf@zy=\pgfplots@target@unit@scale@zy\pgf@zy
+ \fi
+ %
+ \noexpand\pgfplots@apply@datascaletrafo@change@{x}{\pgfplots@target@datascaletrafo@x@exponent}%
+ \noexpand\pgfplots@apply@datascaletrafo@change@{y}{\pgfplots@target@datascaletrafo@y@exponent}%
+ \noexpand\pgfplots@apply@datascaletrafo@change@{z}{\pgfplots@target@datascaletrafo@z@exponent}%
+ %
+ \noexpand\pgfplots@apply@unit@vector@rescale@keep@size{x}{\pgfplots@target@limitrescale@x}%
+ \noexpand\pgfplots@apply@unit@vector@rescale@keep@size{y}{\pgfplots@target@limitrescale@y}%
+ \noexpand\pgfplots@apply@unit@vector@rescale@keep@size{z}{\pgfplots@target@limitrescale@z}%
+ %
+ \noexpand\pgfplots@notify@final@scalings{%
+ x unit scale=\pgfplots@target@unit@scale@x,%
+ y unit scale=\pgfplots@target@unit@scale@y,%
+ z unit scale=\pgfplots@target@unit@scale@z,%
+ x datatrafo exponent=\pgfplots@target@datascaletrafo@x@exponent,%
+ y datatrafo exponent=\pgfplots@target@datascaletrafo@y@exponent,%
+ z datatrafo exponent=\pgfplots@target@datascaletrafo@z@exponent,%
+ x limit rescale=\pgfplots@target@limitrescale@x,%
+ y limit rescale=\pgfplots@target@limitrescale@y,%
+ z limit rescale=\pgfplots@target@limitrescale@z,%
+ }%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+% Checks for the case the ALL (visible) limit compensation scales are
+% bigger than one (for example x = 1.22, y = 2). In such a case, we
+% want to MINIMIZE the rescaling. This can happen if unit vector ratio
+% is active.
+%
+% In our example, we want to use limit rescaling factors x = 1, y = 2/1.22
+% and, consequently, unit rescaling factors x *= 1.22, y *= 1.22 .
+%
+% This method checks for the case and applies the rescaling if
+% necessary.
+%
+\def\pgfplots@scaling@minimize@limitrescale{%
+ % boolean allLimitScalesAreBiggerThanOne;
+ \pgfplots@loc@tmptrue
+ \if0\b@pgfplots@unitvec@is@zero@x
+ \ifdim\pgfplots@target@limitrescale@x pt<1.002pt %
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+ \if0\b@pgfplots@unitvec@is@zero@y
+ \ifdim\pgfplots@target@limitrescale@y pt<1.002pt %
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+ \if0\b@pgfplots@unitvec@is@zero@z
+ \ifdim\pgfplots@target@limitrescale@z pt<1.002pt %
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+ %
+ \ifpgfplots@loc@tmp
+ \begingroup
+ % Ah -- all non-vanishing limit rescaling factors are BIGGER
+ % THAN ONE.
+ % In this case, we can save some rescalings!
+ %
+ % Search for the smallest rescaling factor.
+ \let\pgfplots@smallest=\pgf@x
+ \pgfplots@smallest=16000pt %
+ \def\pgfplots@smallest@arg{}%
+ \if0\b@pgfplots@unitvec@is@zero@x
+ \pgf@xa=\pgfplots@target@limitrescale@x pt %
+ \ifdim\pgf@xa<\pgfplots@smallest%
+ \pgfplots@smallest=\pgf@xa
+ \def\pgfplots@smallest@arg{x}%
+ \fi
+ \fi
+ \if0\b@pgfplots@unitvec@is@zero@y
+ \pgf@xa=\pgfplots@target@limitrescale@y pt %
+ \ifdim\pgf@xa<\pgfplots@smallest%
+ \pgfplots@smallest=\pgf@xa
+ \def\pgfplots@smallest@arg{y}%
+ \fi
+ \fi
+ \if0\b@pgfplots@unitvec@is@zero@z
+ \pgf@xa=\pgfplots@target@limitrescale@z pt %
+ \ifdim\pgf@xa<\pgfplots@smallest%
+ \pgfplots@smallest=\pgf@xa
+ \def\pgfplots@smallest@arg{z}%
+ \fi
+ \fi
+ %
+ % OK. We have the smallest scaling factor. It is > 1.
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@target@limitrescale@x}%
+ \let\pgfplots@target@limitrescale@x=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@target@limitrescale@y}%
+ \let\pgfplots@target@limitrescale@y=\pgfmathresult
+ %
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@target@unit@scale@inv@x}%
+ \let\pgfplots@target@unit@scale@inv@x=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@target@unit@scale@inv@y}%
+ \let\pgfplots@target@unit@scale@inv@y=\pgfmathresult
+ %
+ \if0\b@pgfplots@unitvec@is@zero@z
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@target@limitrescale@z}%
+ \let\pgfplots@target@limitrescale@z=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@target@unit@scale@inv@z}%
+ \let\pgfplots@target@unit@scale@inv@z=\pgfmathresult
+ \fi
+ %
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\csname pgfplots@target@limitrescale@\pgfplots@smallest@arg\endcsname}}%
+ \let\scale=\pgfmathresult
+ %
+ \pgfplotsforeachentryinCSV\value{%
+ \pgfplots@target@unit@scale@inv@x,%
+ \pgfplots@target@unit@scale@inv@y,%
+ \pgfplots@target@limitrescale@x,%
+ \pgfplots@target@limitrescale@y%
+ }{%
+ \pgfplotscoordmath{default}{op}{multiply}{{\scale}{\value}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \expandafter\let\value=\pgfmathresult
+ }%
+ \if0\b@pgfplots@unitvec@is@zero@z
+ \pgfplotsforeachentryinCSV\value{%
+ \pgfplots@target@unit@scale@inv@z,%
+ \pgfplots@target@limitrescale@z%
+ }{%
+ \pgfplotscoordmath{default}{op}{multiply}{{\scale}{\value}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \expandafter\let\value=\pgfmathresult
+ }%
+ \fi
+ %
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand\pgfplots@target@unit@scale@inv@x{\pgfplots@target@unit@scale@inv@x}%
+ \noexpand\def\noexpand\pgfplots@target@unit@scale@inv@y{\pgfplots@target@unit@scale@inv@y}%
+ \noexpand\def\noexpand\pgfplots@target@unit@scale@inv@z{\pgfplots@target@unit@scale@inv@z}%
+ \noexpand\def\noexpand\pgfplots@target@limitrescale@x{\pgfplots@target@limitrescale@x}%
+ \noexpand\def\noexpand\pgfplots@target@limitrescale@y{\pgfplots@target@limitrescale@y}%
+ \noexpand\def\noexpand\pgfplots@target@limitrescale@z{\pgfplots@target@limitrescale@z}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+%
+%\message{adjusted scales by minimizing common scaling factors: x=1/\pgfplots@target@unit@scale@inv@x, y=1/\pgfplots@target@unit@scale@inv@y, z=1/\pgfplots@target@unit@scale@inv@z; ^^J axis limit componsation scales x=\pgfplots@target@limitrescale@x, y=\pgfplots@target@limitrescale@y, z=\pgfplots@target@limitrescale@z;^^J}%
+ \fi
+}%
+
+% Defines
+% \pgfplots@target@unit@scale@xx
+% \pgfplots@target@unit@scale@xy
+% \pgfplots@target@unit@scale@yx
+% \pgfplots@target@unit@scale@yy
+% \pgfplots@target@unit@scale@zx
+% \pgfplots@target@unit@scale@zy
+% %
+% \pgfplots@target@unit@scale@x
+% \pgfplots@target@unit@scale@y
+% \pgfplots@target@unit@scale@z
+% by combining the input args.
+%
+% #1: the scale to be applied to ALL x components
+% #2: the scale to be applied to ALL y components
+% #3: the scale to be applied to x unit
+% #4: the scale to be applied to y unit
+% #5: the scale to be applied to z unit
+\def\pgfplots@scaling@compute@final@scales#1#2#3#4#5{%
+ % ##1: the axis (x,y,or z)
+ % ##2: the horizontal scale
+ % ##3: the vertical scale
+ % ##4: the inverse unit scale for this axis
+ \def\pgfplots@loc@TMPa##1##2##3##4{%
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{##2}%
+ \let\xscale@@=\pgfmathresult
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{##3}%
+ \let\yscale@@=\pgfmathresult
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{##4}%
+ \let\unitscale@inv@@=\pgfmathresult
+ %
+ % NOTE : it *would* be more efficient to use
+ % 1/\unitscale@inv@@ in the routines above. BUT THAT IS NOT BACKWARDS COMPATIBLE.
+ % Leave it this way!
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{op}{reciprocal}{{\unitscale@inv@@}}%
+ \let\unitscale@@=\pgfmathresult
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{tofixed}{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@target@unit@scale@##1\endcsname=\pgfmathresult
+ %
+ %
+ \ifx\pgfplots@compat@scaling@coordmath@final\pgfplots@compat@scaling@coordmath
+ \else
+ % backwards compatibility is such a burden.... :-(
+ %
+ % earlier versions relied on TeX's dimen arithmetics to
+ % multiply the final scales. Make sure we do the same -
+ % rounding errors on unit vectors are instable, i.e. the
+ % errors add up considerably.
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{parsenumber}{\xscale@@}%
+ \let\xscale@@=\pgfmathresult
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{parsenumber}{\yscale@@}%
+ \let\yscale@@=\pgfmathresult
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{parsenumber}{\unitscale@@}%
+ \let\unitscale@@=\pgfmathresult
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{parsenumber}{\unitscale@inv@@}%
+ \let\unitscale@inv@@=\pgfmathresult
+ \fi
+ %
+ \ifpgfplots@threedim
+ % backw. compatibility: this is how it used to be in 3d
+ % axes:
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{op}{multiply}{{\xscale@@}{\unitscale@@}}%
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{tofixed}{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@target@unit@scale@##1x\endcsname=\pgfmathresult
+ %
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{op}{multiply}{{\yscale@@}{\unitscale@@}}%
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{tofixed}{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@target@unit@scale@##1y\endcsname=\pgfmathresult
+ \else
+ % backw. compatibility: 2d axes used divide in earlier
+ % versions, not reciprocal. Believe it or not; for
+ % \pgfplots@compat@scaling@coordmath=pgfbasic, it makes a
+ % visible difference of about 2-3pt in the complete figure
+ % size.
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{op}{divide}{{\xscale@@}{\unitscale@inv@@}}%
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{tofixed}{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@target@unit@scale@##1x\endcsname=\pgfmathresult
+ %
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{op}{divide}{{\yscale@@}{\unitscale@inv@@}}%
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath@final}{tofixed}{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@target@unit@scale@##1y\endcsname=\pgfmathresult
+ \fi
+ %
+ }%
+ \if1\b@pgfplots@rescale@x
+ \pgfplots@loc@TMPa{x}{\xscale}{\yscale}{#3}%
+ \else
+ \pgfplots@loc@TMPa{x}{1}{1}{#3}%
+ \fi
+ %
+ \if1\b@pgfplots@rescale@y
+ \pgfplots@loc@TMPa{y}{\xscale}{\yscale}{#4}%
+ \else
+ \pgfplots@loc@TMPa{y}{1}{1}{#4}%
+ \fi
+ %
+ \ifpgfplots@threedim
+ \if1\b@pgfplots@rescale@z
+ \pgfplots@loc@TMPa{z}{\xscale}{\yscale}{#5}%
+ \else
+ \pgfplots@loc@TMPa{z}{1}{1}{#5}%
+ \fi
+ \else
+ \def\pgfplots@target@unit@scale@z{0}%
+ \def\pgfplots@target@unit@scale@zx{0}%
+ \def\pgfplots@target@unit@scale@zy{0}%
+ \def\pgfplots@target@unit@scale@inv@z{inf}%
+ \fi
+ %
+}%
+
+\def\pgfplots@notify@final@scalings#1{%
+ \pgfkeys{/pgfplots/scaling/.cd,
+ .unknown/.code={%
+%\message{setting key '\pgfkeyscurrentkey' to {##1}^^J}
+ \pgfkeyssetvalue{\pgfkeyscurrentkey}{##1}%
+ },
+ #1%
+ }%
+}%
+
+% #1: either x,y, or z
+% #2: the new exponent
+\def\pgfplots@apply@datascaletrafo@change@#1#2{%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{#1}{datascaletrafo get params}%
+ \edef\pgfplots@loc@TMPa{\expandafter\pgfutil@firstoftwo\pgfmathresult}%
+ \edef\pgfplots@loc@TMPb{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % ok; the data scale trafo did not change at all - we
+ % still have the same exponent.
+ \else
+ % Ah - we have a new data scale trafo!
+ \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1min\endcsname}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1max\endcsname}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ %
+ % first: determine the optimal shift (which is the
+ % transformed lower limit):
+ \pgfplotscoordmath{#1}{datascaletrafo set params}{#2}{0}%
+ \pgfplotscoordmath{#1}{datascaletrafo}{\pgfplots@loc@TMPa}%
+ %
+ % ok, finalize the data trafo:
+ \pgfplotscoordmath{#1}{datascaletrafo set params}{#2}{\pgfmathresult}%
+ %
+ % ... and recompute axis limits:
+ \pgfplotscoordmath{#1}{datascaletrafo}{\pgfplots@loc@TMPa}%
+ \expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult
+ \pgfplotscoordmath{#1}{datascaletrafo}{\pgfplots@loc@TMPb}%
+ \expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult
+ \fi
+ }{}%
+}%
+
+% Inspects the limit enlargement factors and reinitializes the data
+% scale transformations.
+%
+% The purpose of this method is to avoid "dimension too large" if the
+% factors exceed certain limits.
+%
+% INPUT:
+% \pgfplots@target@limitrescale@x and its variants for y and z
+% \pgfplots@target@unit@scale@inv@x and its variants for y and z
+%
+% OUTPUT:
+% \pgfplots@target@datascaletrafo@x@exponent and its variants for y and z
+% -> contains NEW datascaletrafo exponents
+% \pgfplots@target@datascaletrafo@x@exponent@old and its variants for y and z
+% -> contains OLD datascaletrafo exponents
+% \pgfplots@target@unit@scale@inv@x and its variants for y and z
+% -> contains (modified) unit vector scales
+\def\pgfplots@scaling@adjust@datascaling{%
+ \pgfplots@scaling@adjust@datascaling@for x%
+ \pgfplots@scaling@adjust@datascaling@for y%
+ \pgfplots@scaling@adjust@datascaling@for z%
+}
+\def\pgfplots@scaling@adjust@datascaling@for#1{%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{#1}{datascaletrafo get params}%
+ \def\pgfplots@loc@TMPa##1##2{%
+ \expandafter\def\csname pgfplots@target@datascaletrafo@#1@exponent\endcsname{##1}%
+ \expandafter\def\csname pgfplots@target@datascaletrafo@#1@exponent@old\endcsname{##1}%
+ }%
+ \expandafter\pgfplots@loc@TMPa\pgfmathresult
+ \pgf@xa=\csname pgfplots@target@limitrescale@#1\endcsname pt
+ \ifdim\pgf@xa>5pt %
+ % We want to enlarge axis limits considerably!
+ %
+ \pgfplots@scaling@adjust@datascaling@for@get@compensation{\pgf@xa}%
+ %
+ % Ok, make sure that we do not get "dimension too large"
+ % by adjusting the data scale trafo.
+ %
+ % Note that the data scale trafo has (only) been applied
+ % to axis limits, so we have to reapply it before these
+ % changes can take effect:
+ \pgf@xa=\csname pgfplots@target@unit@scale@inv@#1\endcsname pt
+ \divide\pgf@xa by\pgfplotsretval\relax %
+ \expandafter\edef\csname pgfplots@target@unit@scale@inv@#1\endcsname{\pgf@sys@tonumber\pgf@xa}%
+ %
+ \c@pgf@countd=\csname pgfplots@target@datascaletrafo@#1@exponent\endcsname\relax
+ \advance\c@pgf@countd by-\pgfplotsretvalb\relax %
+ \expandafter\edef\csname pgfplots@target@datascaletrafo@#1@exponent\endcsname{\the\c@pgf@countd}%
+ \fi
+ }{%
+ \expandafter\def\csname pgfplots@target@datascaletrafo@#1@exponent\endcsname{0}%
+ \expandafter\def\csname pgfplots@target@datascaletrafo@#1@exponent@old\endcsname{0}%
+ }%
+}
+
+% Returns
+% \pgfplotsretval -> the absolute scaling
+% \pgfplotsretvalb -> the log10 of the scaling
+\def\pgfplots@scaling@adjust@datascaling@for@get@compensation#1{
+ \ifdim#1<100pt %
+ \def\pgfplotsretval{10}%
+ \def\pgfplotsretvalb{1}%
+ \else
+ \ifdim#1<1000pt %
+ \def\pgfplotsretval{100}%
+ \def\pgfplotsretvalb{2}%
+ \else
+ \ifdim#1<10000pt %
+ \def\pgfplotsretval{1000}%
+ \def\pgfplotsretvalb{3}%
+ \else
+ % too much for this approach anyway... and probably no
+ % use-case at all.
+ \def\pgfplotsretval{1000}%
+ \def\pgfplotsretvalb{3}%
+ \fi
+ \fi
+ \fi
+}%
+
+% Computes the initial scale from a plot box of unit size to the
+% desired with and height.
+%
+% #1 the desired width
+% #2 the desired height
+% #3 [output] a macro which will contain the horizontal (x) scale
+% #4 [output] a macro which will contain the vertical (y) scale
+% #5 [input/output] a macro which, on input, contains the x axis limit compensation scale
+% which is required to select a single unit vector scale without
+% reducing the plots dimension (without actually respecting the
+% final dimension). On output, the input has been multiplied by
+% some additional x limit componensation scale (selected by scale
+% uniformly strategy).
+% #6 [input/output] a macro which will contain a y axis limit
+% compensation scale; it works in the same way as #5
+% #7 [input/output] a macro which will contain a z axis limit
+% compensation scale; it works in the same way as #5
+\def\pgfplots@get@scale@horiz@and@vert#1#2#3#4#5#6#7{%
+ \begingroup
+ \edef\pgfplots@target@limitrescale@x{#5}%
+ \edef\pgfplots@target@limitrescale@y{#6}%
+ \edef\pgfplots@target@limitrescale@z{#7}%
+ \pgfplots@get@dimension@of@BB
+ \pgf@xa=\pgfplotsretval\relax
+ \pgf@xb=\pgfplotsretvalb\relax
+ \pgf@ya=#1\relax
+ \pgf@yb=#2\relax
+ \edef\w{\pgf@sys@tonumber\pgf@xa}%
+ \edef\h{\pgf@sys@tonumber\pgf@xb}%
+ \edef\W{\pgf@sys@tonumber\pgf@ya}%
+ \edef\H{\pgf@sys@tonumber\pgf@yb}%
+%\message{PGFPLOTS: the current unit vectors result in a UNIT BB of (\the\pgf@xa,\the\pgf@xb). Scaling it to (\the\pgf@ya,\the\pgf@yb)...^^J}%
+ \ifcase\pgfplots@scale@mode@choice
+ % scale mode=auto does not happen here
+ \or
+ % scale mode=none does not happen here
+ \or
+ % scale mode=stretch to fill
+ %
+ % This is very simple:
+ %
+ % Compute individual scaling factors for X and Y
+ % such that the UNIT-BB will have size #1,#2. Keep limits.
+ \pgfmathdivide@{\W}{\w}%
+ \let\scalex=\pgfmathresult
+ %
+ \pgfmathdivide@{\H}{\h}%
+ \let\scaley=\pgfmathresult
+ %
+ % no changes to the axis limits - we only rescale units.
+ \def\pgfplots@target@limitrescale@x@{1}%
+ \def\pgfplots@target@limitrescale@y@{1}%
+ \def\pgfplots@target@limitrescale@z@{1}%
+ \pgfplots@BB@update@cumulative@limit@compensations
+ \or
+ % scale mode=scale uniformly
+ % compute ONE common scale for both, X and Y - and satisfy
+ % width/height constraints by adjusting the axis limits.
+ %
+ % The idea is as follows:
+ % we WANT to have width W and height H.
+ % The constraint is that each unit vector must get the same
+ % scale -- but the axis limits can receive individual
+ % compensation scales. But it should "look reasonable well".
+ %
+ % currently, we have
+ % w = r_x e_xx + r_y e_yx + rz e_zx (with e_zx = 0 typically)
+ % h = r_x e_xy + r_y e_yy + rz e_zy
+ %
+ % where r_x, r_y, r_z are the maximal range of the data in
+ % x,y,z respectively. Depending on the context of this method,
+ % they are either 1 (relative coords) or
+ % (xmax-xmin) (absolute coords).
+ %
+ % Now, search for a set of real numbers
+ % Rx, Ry, Rz, s
+ % such that
+ % W = (Rx r_x) (s e_xx) + (Ry r_y) (s e_yx) + (Rz r_z) (s e_zx)
+ % H = (Rx r_x) (s e_xy) + (Ry r_y) (s e_yy) + (Rz r_z) (s e_zy)
+ %
+ % clearly, the solution is not unique.
+ % ONE choice is to employ the fact that e_zx = 0 (or, for 2d
+ % plots, e_zx=0, e_zy=0 and e_yx=0):
+ %
+ % in that case, we can compute s such that the equation for W
+ % is satisfied and compensate only the limit r_z, i.e. to
+ % choose
+ % s := W / w, (scale to satisfy width constraint)
+ % Rx := Ry := 1 (keep limits in X and Y)
+ % Rz = ( H - s (w - r_z e_zy) ) / (s r_z e_zy) (adjust z limit to satisfy height constraint)
+ %
+ % This approach works well if W < H . If W > H, it will look
+ % bad: Rz will be less than 1, causing the limit to become
+ % smaller. This, in turn, will clip away parts of the image.
+ %
+ %
+ %
+ % Another solution is to make it the other way: to keep the
+ % limit r_z, but to reduce the size and enlarge the other
+ % limits to satisfy the size constraints. This solution is
+ % considerably more involved; it requires to solve a nonlinear
+ % set of equations.
+ %
+ % Formally, this second solution uses
+ % Rz := 1 (no limit componensation scale for z -- keep z limit)
+ % R:= Rx := Ry (same limit componensation scale for both X and Y)
+ % R and s still need to be determined from the two equations for W
+ % and H.
+ %
+ % Substituting the given choices into the equations for W and H, we find
+ %
+ % R = W / (s w)
+ %
+ % s = H * (R * (h-r_z e_zy) + r_z e_zy)^-1
+ %
+ % Here, we employed the definition of 'h', see above. The
+ % equations are non-linear.
+ %
+ % ATTENTION: we assume that the datascaletrafo set params
+ % method has been called with THE SAME SCALE IN EACH
+ % DIRECTION.
+ \if0\pgfplots@scaleuniformly@choice
+ % scale uniformly strategy=auto
+ \pgfplots@get@scale@horiz@and@vert@scaleuniformly@of@optimal@strategy
+ \else
+ \pgfplots@get@scale@horiz@and@vert@scaleuniformly
+ \pgfplots@BB@update@cumulative@limit@compensations
+ \fi
+ \fi
+ %
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand#3{\scalex}%
+ \noexpand\def\noexpand#4{\scaley}%
+ \noexpand\def\noexpand#5{\pgfplots@target@limitrescale@x}%
+ \noexpand\def\noexpand#6{\pgfplots@target@limitrescale@y}%
+ \noexpand\def\noexpand#7{\pgfplots@target@limitrescale@z}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+% This is the implementation for 'scale uniformly strategy=auto'.
+%
+% It works by finding the strategy which involves the minimal scaling
+% overhead.
+%
+% To this end, it computes the result for each 'scale uniformly
+% strategy', and computes a cost function. The one with optimal cost
+% function wins, and its results are returned.
+%
+% The cost function is the overal scaling which is applied to AXIS
+% LIMITS. It works as follows:
+% 1. if a choice requires to REDUCE the axis limits in order to
+% fulfill all constraints, it is neglected (using maximal cost 16000).
+% Reducing axis limits may clip away information.
+%
+% 2. if a choice requires to ENLARGE some axis limits, its cost is the
+% sum of the individual scaling factors (even if they are are one -
+% who cares).
+%
+% Note that this method *is* relevant and the optimization appears to
+% be necessary.
+% Examples are
+% unittest_scalemode_2d_standard_1.tex
+% and perhaps
+% unittest_scalemode_2d_standard_0.tex
+% and more involved 3d examples are also available.
+%
+% My first guess was that it is sufficient to decide the optimal
+% strategy in advance by comparing the target width and the target
+% height - but that proved to be insufficient: it leads to correct
+% results, but wastes too much space (i.e. enlarges limits too much).
+%
+% ATTENTION: the cost function INCLUDES RESULTS OF
+% \pgfplots@BB@for@plotbox@get@unit@scales@for@limits and its
+% corrector
+% \pgfplots@BB@for@plotbox@get@unit@scales@compensated@axis@limits.
+%
+% More precisely, it relies on already computes limit compensation
+% factors which do not depend on the target width/target height: both
+% \pgfplots@BB@for@plotbox@get@unit@scales@compensated@axis@limits and
+% this implementation of 'scale uniformly strategy' can be used to compute
+% the cost of a strategy.
+%
+\def\pgfplots@get@scale@horiz@and@vert@scaleuniformly@of@optimal@strategy{%
+ \begingroup
+ \def\mathclass{default}%
+ \pgfplotscoordmath{\mathclass}{max limit}%
+ \let\pgfplots@cost@for@choice@superhigh=\pgfmathresult%
+ %
+ % private helpers to compute the cost.
+ \def\pgfplots@scalestrategy@compute@cost{%
+ \begingroup
+ % ATTENTION: this call changes
+ % '\pgfplots@target@limitrescale@x' and its variants.
+ % Restore its value after the iteration:
+ \pgfplots@BB@update@cumulative@limit@compensations
+ \pgfplotscoordmath{\mathclass}{one}%
+ \let\ONE=\pgfmathresult
+ \pgfplotscoordmath{\mathclass}{parsenumber}{\pgfplots@target@limitrescale@x}%
+ \let\X=\pgfmathresult
+ \pgfplotscoordmath{\mathclass}{parsenumber}{\pgfplots@target@limitrescale@y}%
+ \let\Y=\pgfmathresult
+ \ifpgfplots@threedim
+ \pgfplotscoordmath{\mathclass}{parsenumber}{\pgfplots@target@limitrescale@z}%
+ \let\Z=\pgfmathresult
+ \else
+ \let\Z=\pgfplots@target@limitrescale@z
+ \fi
+ %
+ % If one of the resulting limit compensation scales is
+ % less than 1, we can immediately skip it - we do not want
+ % to risk to clip away image content.
+ \pgfplotscoordmath{\mathclass}{if less than}{\X}{\ONE}{%
+ \let\pgfplots@cost@for@choice=\pgfplots@cost@for@choice@superhigh
+ }{%
+ \pgfplotscoordmath{\mathclass}{if less than}{\Y}{\ONE}{%
+ \let\pgfplots@cost@for@choice=\pgfplots@cost@for@choice@superhigh
+ }{%
+ \ifpgfplots@threedim
+ \pgfplotscoordmath{\mathclass}{if less than}{\Z}{\ONE}{%
+ \let\pgfplots@cost@for@choice=\pgfplots@cost@for@choice@superhigh
+ }{%
+ % ah - 3 limit scales >= 1. Good, assign cost:
+ \pgfplots@scalestrategy@compute@cost@
+ }%
+ \else
+ % ah - all limit scales >=1. Good, assign cost:
+ \pgfplots@scalestrategy@compute@cost@
+ \fi
+ }%
+ }%
+%\message{scale uniformly strategy=auto: '\pgfplots@tostring@scaleuniformlystrategy{\pgfplots@scaleuniformly@choice}' has cost \pgfplots@cost@for@choice\space(limit rescaling factors x=\X, y=\Y, z=\Z)^^J}%
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand\pgfplots@scaleuniformly@choice{\pgfplots@scaleuniformly@choice}%
+ \noexpand\def\noexpand\scalex{\scalex}%
+ \noexpand\def\noexpand\scaley{\scaley}%
+ \noexpand\def\noexpand\pgfplots@target@limitrescale@x{\pgfplots@target@limitrescale@x}%
+ \noexpand\def\noexpand\pgfplots@target@limitrescale@y{\pgfplots@target@limitrescale@y}%
+ \noexpand\def\noexpand\pgfplots@target@limitrescale@z{\pgfplots@target@limitrescale@z}%
+ }%
+ \pgfmath@smuggleone\pgfplots@cost@for@choice
+ % keep in mind that this scope IS NECESSARY: we have
+ % changed the target quantities
+ % \pgfplots@target@limitrescale@x and its variants!
+ \endgroup
+ \let\pgfplots@scalestrategy@values=\pgfplots@glob@TMPa
+ }%
+ \def\pgfplots@scalestrategy@compute@cost@{%
+ \pgfplotscoordmath{\mathclass}{op}{add}{{\X}{\Y}}%
+ \ifpgfplots@threedim
+ \pgfplotscoordmath{\mathclass}{op}{add}{{\pgfmathresult}{\Z}}%
+ \fi
+ \let\pgfplots@cost@for@choice=\pgfmathresult
+ }%
+ %
+ % compute initial cost:
+ \def\pgfplots@scaleuniformly@choice{3}% change horizontal limits
+ \pgfplots@get@scale@horiz@and@vert@scaleuniformly
+ \pgfplots@scalestrategy@compute@cost
+ %
+ % init minimum:
+ \let\pgfplots@cost@for@choice@arg=\pgfplots@scalestrategy@values
+ \let\pgfplots@cost@for@choice@sofar=\pgfplots@cost@for@choice%
+ %
+ % compute cost of next strategy:
+ \def\pgfplots@scaleuniformly@choice{2}% change vertical limits
+ \pgfplots@get@scale@horiz@and@vert@scaleuniformly
+ \pgfplots@scalestrategy@compute@cost
+ %
+ % update minimum:
+ \pgfplotscoordmath{\mathclass}{if less than}{\pgfplots@cost@for@choice}{\pgfplots@cost@for@choice@sofar}{%
+ \let\pgfplots@cost@for@choice@arg=\pgfplots@scalestrategy@values
+ \let\pgfplots@cost@for@choice@sofar=\pgfplots@cost@for@choice%
+ }{%
+ }%
+ %
+ \ifx\pgfplots@cost@for@choice@sofar\pgfplots@cost@for@choice@superhigh
+ % the algorithm discarded every available strategy.
+ \def\pgfplots@scaleuniformly@choice{1}% fall back to 'units only'
+ \pgfplots@get@scale@horiz@and@vert@scaleuniformly
+ \pgfplots@scalestrategy@compute@cost
+ \let\pgfplots@cost@for@choice@arg=\pgfplots@scalestrategy@values
+ \let\pgfplots@cost@for@choice@sofar=\pgfplots@cost@for@choice%
+ \fi
+ %
+ %
+ \global\let\pgfplots@glob@TMPa=\pgfplots@cost@for@choice@arg
+ \endgroup
+ \pgfplots@glob@TMPa
+%\message{scale uniformly strategy=auto: choosing '\pgfplots@tostring@scaleuniformlystrategy{\pgfplots@scaleuniformly@choice}'^^J}%
+}
+
+\def\pgfplots@tostring@scaleuniformlystrategy#1{%
+ % scale uniformly strategy:
+ \ifcase#1\relax
+ auto
+ \or
+ units only
+ \or
+ change vertical limits
+ \or
+ change horizontal limits
+ \fi
+}
+% Does the work for 'scale mode=scale uniformly' inside of
+% \pgfplots@get@scale@horiz@and@vert.
+%
+% It returns its result into \pgfplots@target@limitrescale@x@ (i.e.
+% with an extra '@')
+\def\pgfplots@get@scale@horiz@and@vert@scaleuniformly{%
+ \ifcase\pgfplots@scaleuniformly@choice\relax
+ % scale uniformly strategy=auto does not happen here.
+ \or
+ % scale uniformly strategy=units only
+ \pgfplots@scaleuniformly@onlyunits
+ \or
+ % scale uniformly strategy=change vertical limits
+ %
+ % first, scale to the width ...
+ \pgfplots@scaleuniformly@onlyunits@{\w}{\W}%
+ % ... and change (only) vertical limits to get the "correct"
+ % height:
+ \ifdim\pgf@zy=0pt
+ \ifdim\pgf@yx=0pt
+ \pgfplots@prepare@vertical@rescaling@for@scale@uniformly@in@dir{y}\returninto\pgfplots@target@limitrescale@y@
+ \else
+ \pgfplots@scale@uniformly@fallback
+ \fi
+ \else
+ \ifdim\pgf@zx=0pt
+ \pgfplots@prepare@vertical@rescaling@for@scale@uniformly@in@dir{z}\returninto\pgfplots@target@limitrescale@z@
+ \else
+ \pgfplots@scale@uniformly@fallback
+ \fi
+ \fi
+ \or
+ % scale uniformly strategy=change horizontal limits
+ \ifdim\pgf@zy=0pt
+ \ifdim\pgf@yx=0pt
+ \ifdim\pgf@xy=0pt
+ % special 2d routine with explicit solution
+ \pgfplots@scaleuniformly@change@horizontal@limits@twodim
+ {\scalex}
+ {\pgfplots@target@limitrescale@x@}
+ {\pgfplots@target@limitrescale@y@}
+ {\pgfplots@target@limitrescale@z@}%
+ \else
+ \pgfplots@scale@uniformly@fallback
+ \fi
+ \else
+ \pgfplots@scale@uniformly@fallback
+ \fi
+ \else
+ \ifdim\pgf@zx=0pt
+ \pgfplots@scaleuniformly@change@horizontal@limits
+ {\scalex}
+ {\pgfplots@target@limitrescale@x@}
+ {\pgfplots@target@limitrescale@y@}
+ {\pgfplots@target@limitrescale@z@}%
+ \else
+ \pgfplots@scale@uniformly@fallback
+ \fi
+ \fi
+ \let\scaley=\scalex
+ \fi
+}
+
+\def\pgfplots@scaleuniformly@onlyunits{%
+ % scale to the smaller target dimension:
+ \ifdim\W pt<\H pt %
+ \pgfplots@scaleuniformly@onlyunits@{\w}{\W}%
+ \else
+ \pgfplots@scaleuniformly@onlyunits@{\h}{\H}%
+ \fi
+}%
+
+% #1 : the actual dimension
+% #2 : the target dimension
+\def\pgfplots@scaleuniformly@onlyunits@#1#2{%
+ \def\pgfplots@target@limitrescale@x@{1}%
+ \def\pgfplots@target@limitrescale@y@{1}%
+ \def\pgfplots@target@limitrescale@z@{1}%
+ \pgfmathdivide@{#2}{#1}%
+ \let\scalex=\pgfmathresult
+ \let\scaley=\scalex % we *need* the same unit scale.
+}%
+
+% Computes 'scale uniformly strategy=change horizontal limits'.
+% This is a complicated solution, see the documentation in the
+% implementation for
+% 'scale mode=scale uniformly'
+%
+% #1 [output] a macro which will contain the (uniform) scale for the
+% unit vectors
+% #2 [output] a macro which will contain a x axis limit compensation scale
+% #3 [output] a macro which will contain a x axis limit compensation scale
+% #4 [output] a macro which will contain a x axis limit compensation scale
+\def\pgfplots@scaleuniformly@change@horizontal@limits#1#2#3#4{%
+ \begingroup
+ %
+ \pgfplots@BB@for@plotbox@getunitheight{\pgf@xc}{z}%
+ %
+ % compute the rest in floating point - intermediate results may
+ % become too huge for TeX.
+ \pgfplotscoordmath{default}{parsenumber}{\expandafter\pgf@sys@tonumber\csname pgf@xc\endcsname}%
+ \let\M=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\w}%
+ \let\w=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\W}%
+ \let\W=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\h}%
+ \let\h=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\H}%
+ \let\H=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{divide}{{\W}{\w}}%
+ \let\Wwinv=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{subtract}{{\h}{\M}}%
+ \let\hminusM=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{one}%
+ \let\S=\pgfmathresult%
+ \let\R=\pgfmathresult%
+ \let\Rx=\pgfmathresult
+ \def\Rz{1}%
+ %
+ \def\pgfplots@hold@S@get@R{%
+ \pgfplotscoordmath{default}{op}{divide}{{\Wwinv}{\S}}%
+ \let\R=\pgfmathresult
+%\message{updated R = \R\space ( S = \S ) ^^J}%
+ }%
+ \def\pgfplots@hold@R@get@S{%
+ \pgfplotscoordmath{default}{op}{multiply}{{\R}{\hminusM}}%
+ \pgfplotscoordmath{default}{op}{add}{{\pgfmathresult}{\M}}%
+ \pgfplotscoordmath{default}{op}{divide}{{\H}{\pgfmathresult}}%
+ \let\S=\pgfmathresult
+%\message{updated S = \S\space ( R = \R ) ^^J}%
+ }%
+ %
+ % This is the (most stupid) nonlinear method which is at hand:
+ % fix point iteration.
+ % choose R arbitrarily (R=1 seems adequate), solve for s.
+ % Then, fix s and solve for R. Then, fix R and
+ % solve for s until convergence.
+ \c@pgf@countc=0
+ \pgfplotsloop{%
+ \ifnum\c@pgf@countc<\pgfkeysvalueof{/pgfplots/scale uniformly strategy iter} %
+ \pgfplotsloopcontinuetrue
+ \else
+ \pgfplotsloopcontinuefalse
+ \fi
+ }{%
+ \pgfplots@hold@R@get@S \pgfplots@hold@S@get@R
+ \advance\c@pgf@countc by1 %
+ }%
+ %
+ \pgfplotscoordmath{default}{tofixed}{\R}\let\R=\pgfmathresult
+ \pgfplotscoordmath{default}{tofixed}{\S}\let\S=\pgfmathresult
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand#1{\S}%
+ \noexpand\def\noexpand#2{\R}%
+ \noexpand\def\noexpand#3{\R}%
+ \noexpand\def\noexpand#4{\Rz}%
+ }%
+ \endgroup
+ %
+ \pgfplots@glob@TMPa
+}%
+
+% Computes 'scale uniformly strategy=change horizontal limits'.
+%
+% This is a simplified closed solution assuming that e_xy=0 and e_yx = 0
+%
+% #1 [output] a macro which will contain the (uniform) scale for the
+% unit vectors
+% #2 [output] a macro which will contain a x axis limit compensation scale
+% #3 [output] a macro which will contain a x axis limit compensation scale
+% #4 [output] a macro which will contain a x axis limit compensation scale
+\def\pgfplots@scaleuniformly@change@horizontal@limits@twodim#1#2#3#4{%
+ \begingroup
+ % Assuming that we have a standard 2d axis, i.e.
+ % e_zx = e_zy = 0, e_xy = 0, and e_yx =0,
+ % we can immediately compute a solution.
+ %
+ % In this case, we have the actual width
+ % w = r_x e_xx + r_y e_yx + rz e_zx
+ % = r_x e_xx
+ % and actual height
+ % h = r_x e_xy + r_y e_yy + rz e_zy
+ % = r_y e_yy
+ % and, consequently, desired width
+ % W = (Rx r_x) (s e_xx) + (Ry r_y) (s e_yx) + (Rz r_z) (s e_zx)
+ % = (Rx r_x) (s e_xx)
+ % and desired height
+ % H = (Rx r_x) (s e_xy) + (Ry r_y) (s e_yy) + (Rz r_z) (s e_zy)
+ % = (Ry r_y) (s e_yy).
+ % since this strategy changes horizontal limits (only), we have
+ % Ry := 1.
+ % We find
+ % s : = H/h
+ % and
+ % Rx : = W/w /s .
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\w}%
+ \let\w=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\W}%
+ \let\W=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\h}%
+ \let\h=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\H}%
+ \let\H=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{divide}{{\H}{\h}}%
+ \let\S=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{divide}{{\W}{\w}}%
+ \pgfplotscoordmath{default}{op}{divide}{{\pgfmathresult}{\S}}%
+ \let\Rx=\pgfmathresult
+ \def\Ry{1}%
+ \def\Rz{1}%
+ %
+ \pgfplotscoordmath{default}{tofixed}{\Rx}\let\Rx=\pgfmathresult
+ \pgfplotscoordmath{default}{tofixed}{\S}\let\S=\pgfmathresult
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand#1{\S}%
+ \noexpand\def\noexpand#2{\Rx}%
+ \noexpand\def\noexpand#3{\Ry}%
+ \noexpand\def\noexpand#4{\Rz}%
+ }%
+ \endgroup
+ %
+ \pgfplots@glob@TMPa
+}%
+
+\def\pgfplots@BB@update@cumulative@limit@compensations{%
+%\message{ -> additional limit componensation scales x=\pgfplots@target@limitrescale@x@, y=\pgfplots@target@limitrescale@y@, z=\pgfplots@target@limitrescale@z@^^J}%
+ % add limit compensation to what we have from earlier
+ % operations:
+ \pgfplotscoordmath{pgfbasic}{op}{multiply}{{\pgfplots@target@limitrescale@x@}{\pgfplots@target@limitrescale@x}}%
+ \let\pgfplots@target@limitrescale@x=\pgfmathresult
+ \pgfplotscoordmath{pgfbasic}{op}{multiply}{{\pgfplots@target@limitrescale@y@}{\pgfplots@target@limitrescale@y}}%
+ \let\pgfplots@target@limitrescale@y=\pgfmathresult
+ \pgfplotscoordmath{pgfbasic}{op}{multiply}{{\pgfplots@target@limitrescale@z@}{\pgfplots@target@limitrescale@z}}%
+ \let\pgfplots@target@limitrescale@z=\pgfmathresult
+}%
+
+\def\pgfplots@scale@uniformly@fallback{%
+ \ifpgfplots@scaleuniformly@warning
+ \pgfplotswarning{scale uniformly unsupported}\pgfeov%
+ \fi
+ \pgfplots@scaleuniformly@onlyunits
+}%
+
+% This is part of the implementation of 'scale mode=scale uniformly'.
+%
+% Its purpose it to set up the initial scaling such that
+% 1. each unit vector gets the same scale
+% 2. the axis limits are resized (enlarged) to keep the plot box ratio
+% (as far as possible)
+%
+% It repairs the outcome of
+% \pgfplots@BB@for@plotbox@get@unit@scales@for@limits .
+%
+% The assumption is that on input #1, #2, and #3 are the factors which
+% would be used by stretch-to-fill in order to squeze the axis limits
+% into the plot box defined by e_x, e_y, and e_z (the unit vectors).
+%
+% On output, #1, #2, and #3 will be modified such that *each has the
+% same value*. The value will be chosen with care. More precisely, it
+% is the *minimum* of {#1,#2,#3}.
+%
+% Clearly, 'scale mode=scale uniformly' has less freedom than
+% strech-to-fill. In order to keep the plot box ratio intact (as far
+% as possible), the axis limits will be rescaled to componsate for the
+% ignored scaling factors. More precisely, if direction i is not the
+% extremal value (as discussed in the last paragraph), the axis limits
+% will be rescaled by #i/extremum .
+%
+%
+%
+% #1: on input, it contains the x unit scale which would be taken without the
+% compensation. On output, it contains the x unit scale which *will* be
+% used.
+% #2: same as #1, but for y
+% #3: same as #1, but for z
+% #4: [output] a scale for use as argument of \pgfplots@apply@unit@vector@rescale@keep@size{x}{<arg>}
+% #5: [output] a scale for use as argument of \pgfplots@apply@unit@vector@rescale@keep@size{y}{<arg>}
+% #6: [output] a scale for use as argument of \pgfplots@apply@unit@vector@rescale@keep@size{z}{<arg>}
+%
+% The output arguments need to be applied before they take effect.
+\def\pgfplots@BB@for@plotbox@get@unit@scales@compensated@axis@limits#1#2#3#4#5#6{%
+ \begingroup
+ % ATTENTION : this code ASSUMES that the datascaling trafo is
+ % initialized with THE SAME SCALE IN EACH DIRECTION.
+ % The data scaling also leads to (potentially non-uniform) scaling per component.
+ %
+ % Note that we could handle the datascaling here -- but we would
+ % leave the supported number range easily. That's why that part of
+ % the 'scale mode=scale uniformly' implementation has been moved
+ % to \pgfplots@set@optimal@datatrafos@allaxes
+ %
+ % This here handles the limits only.
+ \edef\pgfplots@scale@unitx{#1}%
+ \edef\pgfplots@scale@unity{#2}%
+ \edef\pgfplots@scale@unitz{#3}%
+ %
+ % compute extreme + arg extreme of these scales:
+ \def\pgfplots@extreme@scale{-16300}%
+ \def\pgfplots@extreme@scale@arg{NONE}%
+ %
+ \if0\b@pgfplots@unitvec@is@zero@x
+ \ifdim\pgfplots@extreme@scale pt<\pgfplots@scale@unitx pt
+ \let\pgfplots@extreme@scale=\pgfplots@scale@unitx
+ \def\pgfplots@extreme@scale@arg{x}%
+ \fi
+ \fi
+ \if0\b@pgfplots@unitvec@is@zero@y
+ \ifdim\pgfplots@extreme@scale pt<\pgfplots@scale@unity pt
+ \let\pgfplots@extreme@scale=\pgfplots@scale@unity
+ \def\pgfplots@extreme@scale@arg{y}%
+ \fi
+ \fi
+ \if0\b@pgfplots@unitvec@is@zero@z
+ \ifdim\pgfplots@extreme@scale pt<\pgfplots@scale@unitz pt
+ \let\pgfplots@extreme@scale=\pgfplots@scale@unitz
+ \def\pgfplots@extreme@scale@arg{z}%
+ \fi
+ \fi
+ %
+ % Now, adjust axis limits to compensate for the effect: we still
+ % want to have a plot box which is as close as possible to the
+ % target plot box.
+ \def\pgfplots@loc@TMPa##1##2{%
+ \if0\csname b@pgfplots@unitvec@is@zero@##1\endcsname
+ \if1\pgfplots@scaleuniformly@choice % FIXME : this appears to be too much. Disable this!?
+ % ok, nothing to do for this direction.
+ \pgfplotscoordmath{pgfbasic}{one}%
+ \let##2=\pgfmathresult
+ \else
+ \if\pgfplots@extreme@scale@arg ##1%
+ % ok, nothing to do for this direction.
+ \pgfplotscoordmath{pgfbasic}{one}%
+ \let##2=\pgfmathresult
+ \else
+ \pgfplotscoordmath{pgfbasic}{op}{divide}{{\pgfplots@extreme@scale}{\csname pgfplots@scale@unit##1\endcsname}}%
+ % do not call apply@unit@rescale immediately because the
+ % unit vectors may not be in their final state. Postpone until
+ % they are final.
+ \edef##2{\pgfmathresult}%
+ \fi
+ \fi
+ \else
+ \def##2{1}%
+ \fi
+ }%
+ \pgfplots@loc@TMPa{x}{#4}%
+ \pgfplots@loc@TMPa{y}{#5}%
+ \pgfplots@loc@TMPa{z}{#6}%
+ %
+ \toks0=\expandafter{#4}%
+ \toks1=\expandafter{#5}%
+ \toks2=\expandafter{#6}%
+ \xdef\pgfplots@glob@TMPa{%
+ % same scale in each dir:
+ \def\noexpand#1{\pgfplots@extreme@scale}%
+ \def\noexpand#2{\pgfplots@extreme@scale}%
+ \def\noexpand#3{\pgfplots@extreme@scale}%
+ \def\noexpand#4{\the\toks0}%
+ \def\noexpand#5{\the\toks1}%
+ \def\noexpand#6{\the\toks2}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+}
+
+% #1 : a dimen register
+% #2 : x, y, or z
+\def\pgfplots@BB@for@plotbox@getunitheight#1#2{%
+ #1=\csname pgfplots@plotbox@#2max\endcsname\csname pgf@#2y\endcsname
+ \advance#1 by -\csname pgfplots@plotbox@#2min\endcsname\csname pgf@#2y\endcsname
+ \ifdim#1<0pt %
+ % we want to return a height. It is also bigger than 0.
+ % the difference above may be negative if the unit points
+ % downward (special combinations of view/h and view/v)
+ #1=-#1\relax
+ \fi
+}%
+
+
+% Modifies the AXIS LIMITS to ensure that a suitable width/height is
+% achieved.
+%
+% This does NOT introduce a further scale to the unit vectors.
+%
+% #1: a direction (x,y, or z)
+% #2: a macro name. It will be assigned globally. It will contain
+% EXECUTABLE instructions which will modify the axis limits to fit the
+% scaling.
+%
+% PRECONDITION:
+% - \pgfplots@glob@TMPa contains the already computed
+% scaling factor for 'scale uniformly'
+% - \pgf@xb is the actual height and \pgf@yb is the desired height
+% (set as in the scaling routine)
+%
+% POSTCONDITION:
+% #2 will contain the argument <arg> for \pgfplots@apply@unit@vector@rescale@keep@size{#1}{<arg>}
+\def\pgfplots@prepare@vertical@rescaling@for@scale@uniformly@in@dir#1\returninto#2{%
+ % The strategy is as follows:
+ % 1. I want to fit the axis into width #1 (\pgf@ya) and
+ % height #1 (\pgf@yb).
+ % 2. I want to MAINTAIN the unit vector ratio.
+ % 3. I want to MAINTAIN the unit vector directions.
+ %
+ % I already know the scaling factor to fit the width (it
+ % is stored in \scalex = \scaley).
+ % Let's call it "s".
+ %
+ % Consequently, a uniform scaling by "s" leads to the image
+ % height
+ % h = s* (r_x * e_xy + r_y * e_yy + r_z * e_zy)
+ % where r_i = (imax - imin). This here is essentially the
+ % same as the bounding box computation above (at least for
+ % standart orthographic 3D axes).
+ %
+ % What I want now is to enlarge the limits such that I
+ % have BOTH, width #1 AND height #2, without obscuring the
+ % unit vector ratio. Recall that width #1 is already
+ % given.
+ %
+ % This strategy achieves this goal by
+ % modifying axis limits for an axis whose unit vector is
+ % parallel to the canvas y axis, i.e. e_i = (0,*).
+ %
+ % That means I have to introduce a SECOND scale s_z which
+ % applies only to the Z unit vector (since e_z = (0,*) ).
+ % If H = #2 is the desired height, I find the target
+ % equation for s_z,
+ %
+ % H = s* r_x e_xy + s * r_y e_yy + s_z * s * r_z * e_zy
+ % =>
+ % s_z = ( H- s*r_x e_xy - s*r_y e_yy) / ( s * r_z * e_zy).
+ %
+ % Remember that
+ % s = \scalex
+ % H = \H
+ % h = r_x * e_xy + r_y * e_yy + r_z * e_zy = \h
+ % =>
+ % s_z = ( H- s*( h - r_z * e_zy) ) / ( s * r_z * e_zy).
+ %
+ \begingroup
+ \pgfplots@BB@for@plotbox@getunitheight{\pgf@xc}{#1}%
+ %
+ % compute the rest in floating point - intermediate results may
+ % become too huge for TeX.
+ \pgfplotscoordmath{default}{parsenumber}{\expandafter\pgf@sys@tonumber\csname pgf@xc\endcsname}%
+ \let\pgfplots@diff=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\scalex}%
+ \let\pgfplots@s=\pgfmathresult
+ %
+ % this is a precondition of this method:
+ \pgfplotscoordmath{default}{parsenumber}{\h}%
+ \let\h=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\H}%
+ \let\H=\pgfmathresult
+ %
+ % compute counter := H - s * (h - (max-min))
+ \pgfplotscoordmath{default}{op}{subtract}{{\h}{\pgfplots@diff}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@s}{\pgfmathresult}}%
+ \pgfplotscoordmath{default}{op}{subtract}{{\H}{\pgfmathresult}}%
+ \let\pgfplots@counter=\pgfmathresult
+ %
+ % computer denom := s * (max-min)
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@s}{\pgfplots@diff}}%
+ \let\pgfplots@denom=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{divide}{{\pgfplots@counter}{\pgfplots@denom}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ %
+ % Now, s_z = \pgfmathresult .
+ %
+ % Now, adjust the z limits.
+ % Note that \pgfplots@apply@unit@vector@rescale@keep@size
+ % has a slightly different context; it assumes that the
+ % unit vector has been rescaled, not the axis limits.
+ % Consequently, the inverse of the scaling factor enters.
+ % Since \pgfplots@apply@unit@vector@rescale@keep@size
+ % expects the inverse of the scale, we can provide
+ % \pgfmathresult:
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let#2=\pgfmathresult
+}
+
+\def\pgfplots@computeunitvectorlengths{%
+ \pgfplotsutil@edef@invoke\pgfmathveclen@{%
+ {\pgf@sys@tonumber\pgf@xx}%
+ {\pgf@sys@tonumber\pgf@xy}%
+ }%
+ \let\pgfplots@x@veclength=\pgfmathresult
+ \pgfplotsmath@ifzero{\pgfplots@x@veclength}{%
+ \def\pgfmathresult{infty}%
+ % this case will be caught in \pgfplots@initsizes
+ }{%
+ \expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}%
+ }%
+ \let\pgfplots@x@inverseveclength=\pgfmathresult
+ %
+ \pgfplotsutil@edef@invoke\pgfmathveclen@{%
+ {\pgf@sys@tonumber\pgf@yx}%
+ {\pgf@sys@tonumber\pgf@yy}%
+ }%
+ \let\pgfplots@y@veclength=\pgfmathresult
+ \pgfplotsmath@ifzero{\pgfplots@y@veclength}{%
+ \def\pgfmathresult{infty}%
+ % this case will be caught in \pgfplots@initsizes
+ }{%
+ \expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}%
+ }%
+ \let\pgfplots@y@inverseveclength=\pgfmathresult
+ %
+ \ifpgfplots@threedim
+ \pgfplotsutil@edef@invoke\pgfmathveclen@{%
+ {\pgf@sys@tonumber\pgf@zx}%
+ {\pgf@sys@tonumber\pgf@zy}%
+ }%
+ \let\pgfplots@z@veclength=\pgfmathresult
+ \pgfplotsmath@ifzero{\pgfplots@z@veclength}{%
+ \def\pgfmathresult{infty}%
+ % this case will be caught in \pgfplots@initsizes
+ }{%
+ \expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}%
+ }%
+ \let\pgfplots@z@inverseveclength=\pgfmathresult
+ \else
+ \def\pgfplots@z@veclength{0}%
+ \def\pgfplots@z@inverseveclength{infty}%
+ \fi
+}%
+
+% Defines \pgfplots@view@dir@threedim according to the actual
+% configuration of x,y,z (2d) unit vectors, assuming the associated
+% unit vectors form a right-handed-system.
+%
+% The algorithm works for standard three dimensional axes. It works as
+% follows:
+%
+% First, observe that we have a normal direction N if all its
+% multiples are mapped onto the same point in 2D canvas
+% coordinates. In other words: all 3D coordinates which are mapped
+% onto an arbitrary point in 2D canvas coordinates (take, for example,
+% the origin (0,0) ) are on a line in direction of N.
+%
+% We use this observation to compute the normal axis, i.e. we search
+% for all points which are mapped onto the 2D canvas coordinate (0,0):
+% N_x e_xx + N_y e_yx + N_z e_zx = 0
+% N_x e_xy + N_y e_yy + N_z e_zy = 0.
+% All solutions make up a linear space of dimension 1 (up to special
+% cases). In the general case, we can chose an arbitrary N_z != 0
+% and reduce the linear system to
+% N_x e_xx + N_y e_yx = - N_z e_zx
+% N_x e_xy + N_y e_yy = - N_z e_zy.
+% Choosing *any* N_z != 0, say, N_z=-1 (which corresponds to view
+% from above) will lead to a vector parallel to the normal direction.
+% But it might have the wrong sign.
+%
+% FIXME : this fails if one of e_x or e_y is zero.
+%
+% To find the correct sign for N, I have made several case
+% distinctions to identify the cases when we have to multiply with -1.
+% The key idea is to assume a right-handed-system of unit vectors;
+% this is the condition which allows to determine the sign.
+%
+% Furthermore, I assume that e_z points to the top, i.e. that e_zy >0.
+% Then, there are (mainly) four conditions on the signs of e_x and e_y
+% which indicate that we are viewing from below and should switch the
+% sign of N (keep in mind that our initial choice was N_z =-1, see above).
+%
+% The conditions can be identified by drawing a 3D box and
+% identifying the corner which represents the lower left 3D limits.
+%
+% You can visualize these cases using
+%--------------------------------------------------
+% \pgfplotsset{
+% separate axis lines,
+% every outer x axis line/.append style= {-stealth},
+% every outer y axis line/.append style= {-stealth},
+% every outer z axis line/.append style= {-stealth},
+% samples=2,shader=interp,title={view=\h,\v},
+% domain=0:1,
+% enlargelimits=false,
+% view=\h\v,xlabel=x,ylabel=y,
+% extra description/.code={%
+% \node[draw,fill=white] at (axis cs:0,0,0) {};
+% },
+% }
+%
+% \def\v{30}
+% \foreach \h in {30,120,210,300} {
+% \message{VIEW={\h}{\v}^^J}
+% \begin{tikzpicture}
+% \begin{axis}
+% \addplot3[surf] {x};
+% \end{axis}
+% \end{tikzpicture}
+%
+% }
+%
+% \def\v{-30}
+% \foreach \h in {30,120,210,300} {
+% \message{VIEW={\h}{\v}^^J}
+% \begin{tikzpicture}
+% \begin{axis}
+% \addplot3[surf] {x};
+% \end{axis}
+% \end{tikzpicture}
+%
+% }
+%--------------------------------------------------
+% The precise formulas can be found below in the source code.
+%
+% You can override this function by the /pgfplots/view dir key.
+\def\pgfplotsgetnormalforcurrentview{%
+ \pgfkeysgetvalue{/pgfplots/view dir}\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \begingroup
+ % temporarily undo the effects of reversed axes -- we *really*
+ % need a right-handed-coordinate system here:
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}%
+ \pgf@xx=-\pgf@xx
+ \pgf@xy=-\pgf@xy
+ \fi
+ \if r\pgfkeysvalueof{/pgfplots/y dir/value}%
+ \pgf@yx=-\pgf@yx
+ \pgf@yy=-\pgf@yy
+ \fi
+ \if r\pgfkeysvalueof{/pgfplots/z dir/value}%
+ \pgf@zx=-\pgf@zx
+ \pgf@zy=-\pgf@zy
+ \fi
+ % FIRST: check for special cases.
+ \let\pgfplots@view@dir@threedim=\pgfutil@empty%
+ % Special case:
+ % e_xx = e_xy = 0
+ %
+ % i.e.:
+ %
+ % ^
+ % | |---|
+ % z | |
+ % |---|
+ % y->
+ %
+ % In this case, N must be the x axis.
+ \ifdim\pgf@xx=0pt %
+ \ifdim\pgf@xy=0pt %
+ \def\pgfplots@view@dir@threedim{-1,0,0}%
+ \fi
+ \fi
+ % Special case:
+ % e_yx = e_yy = 0
+ %
+ % i.e.:
+ %
+ % ^
+ % | |---|
+ % z | |
+ % |---|
+ % x->
+ %
+ % In this case, N must be the y axis.
+ \ifdim\pgf@yx=0pt %
+ \ifdim\pgf@yy=0pt %
+ \def\pgfplots@view@dir@threedim{0,1,0}%
+ \fi
+ \fi
+ % Special case:
+ % e_xy = e_yy = 0 (i.e. one row)
+ %
+ % that is hard to draw, use view={30}{0} to see it.
+ %
+ % In this case, N_z must be 0 and we have a different system.
+ \ifdim\pgf@xy=0pt %
+ \ifdim\pgf@yy=0pt %
+ \ifx\pgfplots@view@dir@threedim\pgfutil@empty
+ % we have N_x e_xx + N_y e_yx = 0
+ % Note that e_xx != 0 and e_yx != 0 (otherwise one
+ % of our other special cases above would have
+ % caught the case)
+ % -> we have N_x = -N_y e_yx / e_xx and N_y
+ % arbitrary. only the sign needs to be fixed.
+ \def\pgfplots@view@dir@threedim@z{0}%
+ \def\pgfplots@view@dir@threedim@y{1}% fix it somehow. We correct the sign later.
+ \edef\pgfplots@loc@TMPa{-(\pgfplots@view@dir@threedim@y) * \pgf@sys@tonumber\pgf@yx / (\pgf@sys@tonumber\pgf@xx)}%
+ \pgfmathparse{\pgfplots@loc@TMPa}%
+ \let\pgfplots@view@dir@threedim@x=\pgfmathresult
+ %
+ \def\pgfplots@scale{1}%
+ % I identified these cases by comparing the
+ % results with \pgfplots@scale{1} with those of
+ % the view dir generated by
+ % \pgfplotssetaxesfromazel (which has the correct quality of solution)
+ \ifdim\pgf@zy>0pt %
+ \ifdim\pgf@xx<0pt %
+ \def\pgfplots@scale{-1}%
+ \fi
+ \else
+ \ifdim\pgf@xx>0pt %
+ \def\pgfplots@scale{-1}%
+ \fi
+ \fi
+ \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@x}%
+ \let\pgfplots@view@dir@threedim@x\pgfmathresult
+ \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@y}%
+ \let\pgfplots@view@dir@threedim@y\pgfmathresult
+ \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@z}%
+ \let\pgfplots@view@dir@threedim@z\pgfmathresult
+ %
+ \edef\pgfplots@view@dir@threedim{\pgfplots@view@dir@threedim@x,\pgfplots@view@dir@threedim@y,\pgfplots@view@dir@threedim@z}%
+ \else
+ % Ah - we already caught that special case above.
+ \fi
+ \fi
+ \fi
+ %
+ % NOTE : the case e_xx = e_yx = 0 IS NO USE-CASE (would
+ % require a rotated z axis which is forbidden currently)
+ %
+ \ifx\pgfplots@view@dir@threedim\pgfutil@empty
+ \def\pgfplots@view@dir@threedim@z{-1}% hold it at some arbitrary value
+ \pgf@xa=-\pgfplots@view@dir@threedim@z\pgf@zx
+ \pgf@ya=-\pgfplots@view@dir@threedim@z\pgf@zy
+ \edef\pgfplots@loc@TMPa{%
+ {%
+ {\pgf@sys@tonumber\pgf@xx}{\pgf@sys@tonumber\pgf@yx}%
+ {\pgf@sys@tonumber\pgf@xy}{\pgf@sys@tonumber\pgf@yy}%
+ }%
+ {%
+ {\pgf@sys@tonumber\pgf@xa}{\pgf@sys@tonumber\pgf@ya}%
+ }%
+ }%
+ \expandafter\pgfutilsolvetwotwoleq\pgfplots@loc@TMPa
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfplots@error{Singular matrix encountered during view computation. Please choose different input values.}%
+ \def\pgfmathresult{{0}{0}}%
+ \fi
+ \def\pgfplots@loc@TMPb##1##2{%
+ \def\pgfplots@view@dir@threedim@x{##1}%
+ \def\pgfplots@view@dir@threedim@y{##2}%
+ }%
+ \expandafter\pgfplots@loc@TMPb\pgfmathresult
+ %
+ % Identify if we need to switch the sign.
+ % To verify that these cases are useful, I suggest visualizing
+ % that stuff using the TeX code from above...
+ %
+ % I guess it is correct up to collapsing views (as you see, I
+ % did not properly identify the cases with "=0" )
+ \def\pgfplots@scale{1}%
+ \ifdim\pgf@xx>0pt
+ \ifdim\pgf@yx<0pt
+ \else
+ %
+ \ifdim\pgf@xy<0pt
+ \else
+ \ifdim\pgf@yy<0pt
+ \def\pgfplots@scale{-1}%
+ \fi
+ \fi
+ %
+ \fi
+ \else
+ \ifdim\pgf@xx<0pt
+ \ifdim\pgf@yx>0pt
+ \else
+ %
+ \ifdim\pgf@xy>0pt
+ \else
+ \ifdim\pgf@yy>0pt
+ \def\pgfplots@scale{-1}%
+ \fi
+ \fi
+ %
+ \fi
+ \fi
+ \fi
+ \ifdim\pgf@xy>0pt
+ \ifdim\pgf@yy<0pt
+ \else
+ %
+ \ifdim\pgf@xx>0pt
+ \else
+ \ifdim\pgf@yx>0pt
+ \def\pgfplots@scale{-1}%
+ \fi
+ \fi
+ %
+ \fi
+ \else
+ \ifdim\pgf@xy<0pt
+ \ifdim\pgf@yy>0pt
+ \else
+ %
+ \ifdim\pgf@xx<0pt
+ \else
+ \ifdim\pgf@yx<0pt
+ \def\pgfplots@scale{-1}%
+ \fi
+ \fi
+ %
+ \fi
+ \fi
+ \fi
+ \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@x}%
+ \let\pgfplots@view@dir@threedim@x\pgfmathresult
+ \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@y}%
+ \let\pgfplots@view@dir@threedim@y\pgfmathresult
+ \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@z}%
+ \let\pgfplots@view@dir@threedim@z\pgfmathresult
+ %
+ \pgfplotsmathvectorfromstring{\pgfplots@view@dir@threedim@x,\pgfplots@view@dir@threedim@y,\pgfplots@view@dir@threedim@z}{default}%
+ \let\pgfplots@view@dir@threedim=\pgfplotsretval
+ % normalize. This is not absolutely required -- but it is used
+ % to accumulate point depth (for the mesh handler) in pgfmath
+ % arithmetics. At least \pgfplotsmathviewdepthxyz should use
+ % a properly scaled view dir.
+ \pgfplotsmathvectorlength{\pgfplotsretval}{default}%
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplotsretval}}%
+ \pgfplotsmathvectorscale{\pgfplots@view@dir@threedim}{\pgfmathresult}{default}%
+ \else
+ \pgfplotsmathvectorfromstring{\pgfplots@view@dir@threedim}{default}%
+ \fi
+ %
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ \let\pgfplots@view@dir@threedim=\pgfplotsretval
+ \else
+ \def\pgfplots@loc@TMPb##1##2##3{%
+ \pgfplotsmathvectorfromstring{##1,##2,##3}{default}%
+ \let\pgfplots@view@dir@threedim=\pgfplotsretval
+ }%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPc
+ \fi
+}%
+
+% PRECONDITION:
+% none
+% POSTCONDITION:
+% \pgfplots@default@aspect@ratio is set.
+\def\pgfplots@compute@default@aspect@ratio{%
+ \expandafter\pgfmath@x\axisdefaultwidth
+ \expandafter\pgfmath@y\axisdefaultheight
+ \pgfmathlog@invoke@expanded\pgfmathdivide@{%
+ {\pgf@sys@tonumber{\pgfmath@x}}%
+ {\pgf@sys@tonumber{\pgfmath@y}}%
+ }%
+ \let\pgfplots@default@aspect@ratio=\pgfmathresult
+}
+
+\def\pgfplots@ifneeds@one@uniform@datascale#1#2{%
+ \if3\pgfplots@scale@mode@choice
+ % scale mode=scale uniformly
+ \def\pgfplots@loc@TMPa{1}%
+ %
+ % if we have at least one unit vector given explicitly, the
+ % meaning changes: in that case, we can (and probably should)
+ % use different data scale factors in each direction.
+ \ifx\pgfplots@x\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \ifx\pgfplots@y\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \ifx\pgfplots@z\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \else
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \if1\pgfplots@loc@TMPa
+ #1%
+ \else
+ #2%
+ \fi
+}%
+
+\def\pgfplots@set@default@size@options{%
+ % The axes 'x' and 'y' vectors will be scaled such that the total
+ % size is (\axisdefaultwidth, \axisdefaultheight).
+ %
+ % If the user specifies ONE of width OR height,
+ % the plot will be resized; keeping the aspect ratio.
+ %
+ \let\pgfplots@default@aspect@ratio=\pgfutil@empty
+ \pgfkeysgetvalue{/pgfplots/x}{\pgfplots@x}%
+ \pgfkeysgetvalue{/pgfplots/y}{\pgfplots@y}%
+ \pgfkeysgetvalue{/pgfplots/z}{\pgfplots@z}%
+ %\pgfkeysgetvalue{/pgfplots/viewdir}{\pgfplots@viewdir}%
+ \pgfkeysgetvalue{/pgfplots/width}{\pgfplots@width}%
+ \pgfkeysgetvalue{/pgfplots/height}{\pgfplots@height}%
+ \ifx\pgfplots@width\pgfutil@empty
+ \def\pgfplots@user@provided@width{0}%
+ \else
+ \def\pgfplots@user@provided@width{1}%
+ \pgfmathparse{\pgfplots@width}%
+ \edef\pgfplots@width{\pgfmathresult pt}%
+ \fi
+ \ifx\pgfplots@height\pgfutil@empty
+ \def\pgfplots@user@provided@height{0}%
+ \else
+ \def\pgfplots@user@provided@height{1}%
+ \pgfmathparse{\pgfplots@height}%
+ \edef\pgfplots@height{\pgfmathresult pt}%
+ \fi
+ %
+ % CASES:
+ % W := 'width' option non-empty
+ % H := 'height' option non-empty
+ %
+ % W H
+ % 0 0 -> \axisdefaultwidth
+ % 0 1 -> determine width out of H and the default aspect ratio
+ % 1 X -> ok, use the user parameter.
+ % -> KEEP ASPECT RATIO if just one W, or H is given!
+ \ifx\pgfplots@width\pgfutil@empty
+ \ifx\pgfplots@height\pgfutil@empty
+ % The case W=0 H=0:
+ \let\pgfplots@width=\axisdefaultwidth
+ \let\pgfplots@height=\axisdefaultheight
+ \else
+ % The case W=0 H=1:
+ \pgfplots@compute@default@aspect@ratio
+ \expandafter\pgfmath@y\pgfplots@height
+ \pgfmathlog@invoke@expanded\pgfmathmultiply@{%
+ {\pgf@sys@tonumber{\pgfmath@y}}%
+ {\pgfplots@default@aspect@ratio}%
+ }%
+ \edef\pgfplots@width{\pgfmathresult pt}%
+ \fi
+ \else
+ \ifx\pgfplots@height\pgfutil@empty
+ % The case W=1 H=0:
+ \pgfplots@compute@default@aspect@ratio
+ \expandafter\pgfmath@x\pgfplots@width
+ \pgfmathlog@invoke@expanded\pgfmathdivide@{%
+ {\pgf@sys@tonumber{\pgfmath@x}}%
+ {\pgfplots@default@aspect@ratio}%
+ }%
+ \edef\pgfplots@height{\pgfmathresult pt}%
+ \else
+ % The case W=1 H=1:
+ \fi
+ \fi
+ \pgfkeyslet{/pgfplots/width}{\pgfplots@width}%
+ \pgfkeyslet{/pgfplots/height}{\pgfplots@height}%
+ %
+ \ifpgfplots@threedim
+ \pgfplots@set@default@size@options@threedim
+ \fi
+ %
+ \pgfplots@set@scale@mode
+}
+
+% This method must be called BEFORE THE DATASCALING is initialized.
+\def\pgfplots@set@scale@mode{%
+ \pgfkeysgetvalue{/pgfplots/unit vector ratio}\pgfplots@loc@TMPb
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ \ifcase\pgfplots@scale@mode@choice
+ % 'scale mode'=auto
+ \def\pgfplots@scale@mode@choice{3}% set to 'scale uniformly'
+ %
+ \if1\pgfplots@compat@scale@mode@compatible@mode
+ % backwards compatibility mode...
+ \ifpgfplots@threedim
+ % ... for 3d: there is no backwards compatibility
+ % mode here; it was plain wrong for 3d axes:
+ % neither lengths nor angles have been correct.
+ \pgfplots@compat@scale@mode@compatible@mode@warning
+ \fi
+ \fi
+ \or
+ % scale mode=none: keep it this way.
+ \immediate\write-1{PGFPlots: scale mode=none and unit vector ratio is incompatible. Ignoring unit vector ratio.^^J}%
+ \or
+ % scale mode=stretch to fill
+ \immediate\write-1{PGFPlots: scale mode=stretch to fill and unit vector ratio might produce unexpected results. Consider using scale mode=auto^^J}%
+ \fi
+ \fi
+ %
+}
+
+\def\pgfplots@compat@scale@mode@compatible@mode@warning{%
+ \pgfplotswarning{axis equal incompatible change}\pgfeov%
+}%
+
+\def\pgfplots@set@default@size@options@threedim{%
+ \pgfplots@loc@tmpfalse
+ \ifx\pgfplots@x\pgfutil@empty
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifx\pgfplots@y\pgfutil@empty
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifx\pgfplots@z\pgfutil@empty
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifpgfplots@loc@tmp
+ % oh - we have at least one of the [xyz] unit vectors!
+ % make sure all of them are there
+ \ifx\pgfplots@x\pgfutil@empty
+ \pgfplots@set@default@size@options@threedim@{x}{(1pt,0pt)}%
+ \fi
+ \ifx\pgfplots@y\pgfutil@empty
+ \pgfplots@set@default@size@options@threedim@{y}{(0pt,1pt)}%
+ \fi
+ \ifx\pgfplots@z\pgfutil@empty
+ \pgfplots@set@default@size@options@threedim@{z}{(0pt,1pt)}%
+ \fi
+ \pgfkeyslet{/pgfplots/view/az}\pgfutil@empty
+ \pgfkeyslet{/pgfplots/view/el}\pgfutil@empty
+ \fi
+}
+\def\pgfplots@set@default@size@options@threedim@#1#2{%
+ \pgfplots@error{Sorry, a 3D axis needs either NONE or ALL of "x,y,z". I found partial information, but (at least) '#1' is lacking... please add '#1'}%
+ \expandafter\def\csname pgfplots@#1\endcsname{#2}%
+}
+
+% A helper method for \pgfplots@initsizes which
+% - applies the data scaling trafo to user arguments
+% - sets calls pgfset#1vec
+%
+% #1: the vector to set (either 'x' or 'y')
+% #2: the index of the vector to set (either 0 or 1)
+% #3: the already precomputed temporary scale (see pgfplots@initsizes)
+% #4: an output argument. It is a macro name which will be defined to
+% '1' if and only if the finally set vector is parallel to the #1 axis
+% of PGF, that means (x,0) for #1=x and (0,y) for #2=y.
+\def\pgfplots@initsizes@setunitvector#1#2#3#4{%
+ \pgfkeysgetvalue{/pgfplots/#1 dir/value}\pgfplots@loc@dirvalue
+ \expandafter\let\expandafter\pgfplots@loc@TMPb\csname pgfplots@#1\endcsname
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \def#4{1}% we have (#1,0) or (0,#1)
+ %
+%\message{Setting unitvector(#1) to auto-computed multiple of e_#2 ...}%
+ \edef\pgfplots@loc@TMPa{#3}%
+ \if r\pgfplots@loc@dirvalue
+ \edef\pgfplots@loc@TMPa{-#3}%
+ \fi
+ \ifcase#2\relax
+ \pgfsetxvec{\pgfqpoint{\pgfplots@loc@TMPa pt}{0pt}}%
+ \or
+ \pgfsetyvec{\pgfqpoint{0pt}{\pgfplots@loc@TMPa pt}}%
+ \or
+ \pgfsetzvec{\pgfqpoint{\pgfplots@loc@TMPa pt}{\pgfplots@loc@TMPa pt}}%
+ \fi
+ \else
+ % Ok, we have a user-defined unit vector.
+ %
+ % That means we also need to apply the scaling trafo!
+ %
+ % 1. Check whether we have a complete vector of type (x,y):
+ \expandafter\pgfutil@in@\expandafter(\expandafter{\pgfplots@loc@TMPb}%
+ \ifpgfutil@in@
+ % YES: we have (x,y):
+ %
+ \def#4{0}% we DON'T have (#1,0) or (0,#1). At least I think so.
+ %
+%\message{Setting unitvector(#1) to non-standard \csname pgfplots@#1\endcsname ...}%
+ \def\pgfplots@loc@TMPa(##1,##2){%
+ \pgfplotscoordmath{default}{parse}{##1}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{default}{parse}{##2}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ %
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{#1}{datascaletrafo noshift inverse to fixed}{\pgfplots@loc@TMPb}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{#1}{datascaletrafo noshift inverse to fixed}{\pgfplots@loc@TMPc}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ }{}%
+ \csname pgfset#1vec\endcsname{%
+ \pgfqpoint
+ {\if r\pgfplots@loc@dirvalue -\fi\pgfplots@loc@TMPb pt}
+ {\if r\pgfplots@loc@dirvalue -\fi\pgfplots@loc@TMPc pt}}%
+ }%
+ \expandafter\pgfplots@loc@TMPa\pgfplots@loc@TMPb%
+ %
+ \else
+ % NO we simply have a scalar value.
+ \def#4{1}% we have (#1,0) or (0,#1)
+%\message{Setting unitvector(#1) to \csname pgfplots@#1\endcsname * e_{#2}...}%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{default}{parse}{\csname pgfplots@#1\endcsname}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \pgfplotscoordmath{#1}{datascaletrafo noshift inverse to fixed}{\pgfmathresult}%
+ \edef\pgfplots@loc@TMPb{\pgfmathresult pt}%
+ }{\relax}%
+ \edef\pgfplots@loc@TMPb{\if r\pgfplots@loc@dirvalue -\fi\pgfplots@loc@TMPb}%
+ \begingroup
+ \pgf@xa=\pgfplots@loc@TMPb\relax
+ \xdef\pgfplots@glob@TMPb{\pgf@sys@tonumber{\pgf@xa}}%
+ \endgroup
+ \ifcase#2\relax
+ \pgfsetxvec{\pgfqpoint{\pgfplots@loc@TMPb}{0pt}}%
+ \or
+ \pgfsetyvec{\pgfqpoint{0pt}{\pgfplots@loc@TMPb}}%
+ \or
+ \pgfsetzvec{\pgfqpoint{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPb}}%
+ \fi
+ \fi
+ \fi
+%\message{-> got unitvector(#1) = (\the\csname pgf@#1x\endcsname, \the\csname pgf@#1y\endcsname).^^J}%
+}%
+
+% Applies the 'axis equal' feature.
+%
+% PRECONDITION:
+% - #1, #2, #3 contains the current scaling
+% factors in x,y, z, resp. which are to be applied to unit vectors
+% - neither unit vectors nor limits are in their final shape
+% - \pgfplots@set@default@size@options has been invoked before
+%
+% POSTCONDITION:
+% - #1, #2, #3 have been changed to accomodate unit vector ratio
+% - #4, #5, #6 [output] contain axis limit compensation scales
+%
+% There is just one algorithmic difficulty: the data scaling
+% transformation. All unit vector length above are only meaningful in
+% the UNTRANSFORMED range, so we have to mingle with the scaling
+% transformation.
+\def\pgfplots@apply@unit@ratio#1#2#3#4#5#6{%
+ \begingroup
+ \edef\pgfplots@target@unit@scale@inv@x{#1}%
+ \edef\pgfplots@target@unit@scale@inv@y{#2}%
+ \edef\pgfplots@target@unit@scale@inv@z{#3}%
+ \def\pgfplots@target@limitrescale@x@{1}%
+ \def\pgfplots@target@limitrescale@y@{1}%
+ \def\pgfplots@target@limitrescale@z@{1}%
+ %
+ \pgfkeysgetvalue{/pgfplots/unit vector ratio}\pgfplots@unit@vector@ratio
+ \ifx\pgfplots@unit@vector@ratio\pgfutil@empty
+ \else
+ \edef\pgfplots@unit@vector@ratio{\pgfplots@unit@vector@ratio\space1 1 }%
+ %
+ \expandafter\pgfplots@unit@vector@ratio@check@nop\pgfplots@unit@vector@ratio\pgfplots@EOI
+ \ifpgfplots@loc@tmp
+ %
+ % Step 1: compute the unit vector which STAYS CONSTANT.
+ %
+ \pgfkeysgetvalue{/pgfplots/unit vector ratio axis}\pgfplots@apply@unit@ratio@reference
+ \ifx\pgfplots@apply@unit@ratio@reference\pgfutil@empty
+ \pgfplots@apply@unit@ratio@find@reference%
+ \fi
+ %
+ % FIXME : I could spent some attention here to save work:
+ % both, unit ratios and the resulting scales are computed at
+ % least twice (once in \pgfplots@apply@unit@ratio@find@reference and once in the
+ % following).
+ \expandafter\pgfplots@apply@unit@ratio@prepareratios\pgfplots@unit@vector@ratio\pgfplots@EOI
+ %
+%\message{USING REFERENCE UNIT VECTOR FROM \pgfplots@apply@unit@ratio@reference; ratio \pgfplots@unit@ratio@x\space \pgfplots@unit@ratio@y\space \pgfplots@unit@ratio@z.^^J}%
+ %
+ % Step 2: apply the scaling:
+ \pgfplots@rescale@unit@vector@reltoreference{x}{\pgfplots@unit@ratio@x}%
+ \pgfplots@rescale@unit@vector@reltoreference{y}{\pgfplots@unit@ratio@y}%
+ \ifpgfplots@threedim
+ \pgfplots@rescale@unit@vector@reltoreference{z}{\pgfplots@unit@ratio@z}%
+ \fi
+ %
+ \else
+%\message{Skipped application of 'unit vector ratio=\pgfkeysvalueof{/pgfplots/unit vector ratio}': it is already done by 'scale uniformly'.^^J}%
+ \fi
+ \fi
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand#1{\pgfplots@target@unit@scale@inv@x}%
+ \noexpand\def\noexpand#2{\pgfplots@target@unit@scale@inv@y}%
+ \noexpand\def\noexpand#3{\pgfplots@target@unit@scale@inv@z}%
+ \noexpand\def\noexpand#4{\pgfplots@target@limitrescale@x@}%
+ \noexpand\def\noexpand#5{\pgfplots@target@limitrescale@y@}%
+ \noexpand\def\noexpand#6{\pgfplots@target@limitrescale@z@}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+\def\pgfplots@appy@unit@ratio@reciprocal#1{%
+ \pgfplotscoordmath{default}{parsenumber}{#1}%
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfmathresult}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+}%
+
+% Defines \ifpgfplots@loc@tmp := need to modify scaling factors
+\def\pgfplots@unit@vector@ratio@check@nop#1 #2 #3 #4\pgfplots@EOI{%
+ \pgfplots@loc@tmptrue
+ \if3\pgfplots@scale@mode@choice
+ % scale mode=scale uniformly
+ \ifpgfplots@threedim
+ \ifdim#1pt=#2pt
+ \ifdim#1pt=#3pt
+ % 'axis equal' is implicitly done by 'scale mode=scale
+ % uniformly' anyway
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+ \else
+ \ifdim#1pt=#2pt
+ % 'axis equal' is implicitly done by 'scale mode=scale
+ % uniformly' anyway
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+ \fi
+ % activate the following line to deactivate optimization: [FIXME]
+ %\pgfplots@loc@tmpfalse
+}%
+
+% This macro determines the reference axis for unit vector rescaling.
+% The reference axis remains unscaled (it gets scaling factor 1 if you
+% want it this way).
+%
+% The other axes are scaled such that the desired unit vector ratios
+% are fulfilled.
+%
+% The idea to select a reference axis is as follows:
+% 1. Every unit vector scaling factor s should fulfill s <= 1.
+% 2. Choose the reference axis such that the minimal amount of scaling
+% is performed.
+%
+% The motivation for (1) is: if all involved scaling factors are at
+% most 1, the resulting picture will only become *smaller*.
+% Consequently, we can simply enlarge axis limits to restore the
+% original width/height!
+%
+% The motivation for (2) is: a huge amount of scaling might reduce the
+% size of the image too much. Of course, the figure will be enlarged
+% to fit the original width/height, but most of it will be empty. So,
+% use the smallest scaling.
+%
+% @POSTCONDITION The reference axis is stored in
+% \pgfplots@apply@unit@ratio@reference .
+%
+% @see the key 'unit vector ratio axis=y' which allows to manually
+% select the reference axis. This will illustrate what happens here.
+\def\pgfplots@apply@unit@ratio@find@reference{%
+ %
+ \begingroup
+ \let\pgfplots@ONE=\pgf@x
+ \global\pgfplots@ONE=1.002pt
+ %
+ \def\pgfplots@optimum@sofar@axis{}%
+ \let\pgfplots@optimum@sofar@value=\pgf@y
+ \global\pgfplots@optimum@sofar@value=16000pt
+ %
+ %\pgfplots@apply@unit@ratio@find@reference@checkexplicitlimits
+ %
+ \ifx\pgfplots@optimum@sofar@axis\pgfutil@empty
+ % set \pgfplots@loc@TMPa := 1 if and only if the axis is 3d
+ \def\pgfplots@loc@TMPa{0}%
+ \if0\b@pgfplots@unitvec@is@zero@z
+ % ah, it IS 3d!
+ \def\pgfplots@loc@TMPa{1}%
+ \else
+ % ok, 2d mode (includes view={0}{90})
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \if1\pgfplots@loc@TMPa
+ % 3D is more complicated than 2D:
+ % for every fixed reference axis, we have to check *two*
+ % scaling factors.
+ %
+ % Furthermore, the optimality condition (2) needs to be
+ % performed on the maximum max{1-s_a, 1-s_b} provided both of
+ % these numbers are positive.
+ %
+ \def\pgfplots@check@##1##2{%
+ % PRECONDITION: \pgfplots@apply@unit@ratio@reference is defined.
+ %
+ % renormalize \pgfplots@unit@[xyz] :
+ \expandafter\pgfplots@apply@unit@ratio@prepareratios\pgfplots@unit@vector@ratio\pgfplots@EOI
+ %
+ % compute s_a :
+ \pgfplots@getscale@unit@vector@reltoreference ##1{\csname pgfplots@unit@ratio@##1\endcsname}%
+ \let\pgfplots@scale@a=\pgfmathresult
+ %
+ % compute s_b :
+ \pgfplots@getscale@unit@vector@reltoreference ##2{\csname pgfplots@unit@ratio@##2\endcsname}%
+ \let\pgfplots@scale@b=\pgfmathresult
+ %
+ % check if the actual choice of
+ % \pgfplots@apply@unit@ratio@reference is FEASIBLE.
+ % That is the case if s_a <= 1 && s_b <= 1.
+ % We check
+ % (1 - s_a >= 0 ) && ( 1 - s_b >= 0 )
+ % instead, since I need the value
+ % max( 1-s_a, 1-s_b )
+ % anyway.
+ \def\pgfplots@ref@is@feasible{1}%
+ \pgf@xa=\pgfplots@ONE \advance\pgf@xa by-\pgfplots@scale@a pt
+ \ifdim\pgf@xa<0sp
+ \def\pgfplots@ref@is@feasible{0}%
+ \else
+ \pgf@xb=\pgfplots@ONE \advance\pgf@xb by-\pgfplots@scale@b pt
+ \ifdim\pgf@xb<0sp
+ \def\pgfplots@ref@is@feasible{0}%
+ \fi
+ \fi
+ % compute max(1-s_a,1-s_b) into \pgf@xa:
+ % pgf@xa= max(pgf@xa,pgf@xb):
+ \ifdim\pgf@xb>\pgf@xa \pgf@xa=\pgf@xb \fi
+ \if1\pgfplots@ref@is@feasible
+ \ifdim\pgf@xa<\pgfplots@optimum@sofar@value
+ % Ah, ok. The actual choice is BETTER as it
+ % involves less scaling.
+ %
+ % Remember it!
+ \let\pgfplots@optimum@sofar@axis=\pgfplots@apply@unit@ratio@reference
+ \global\pgfplots@optimum@sofar@value=\pgf@xa
+ \fi
+ \fi
+%\message{^^Junit vector ratio 3D searching reference: checking \pgfplots@apply@unit@ratio@reference. feasable=\pgfplots@ref@is@feasible. \if1\pgfplots@ref@is@feasible max=\the\pgf@xa. \fi Optimum so far: value =\the\pgfplots@optimum@sofar@value\space for axis \pgfplots@optimum@sofar@axis.^^J}%
+ }%
+ %
+ % Check 'x' as reference :
+ \def\pgfplots@apply@unit@ratio@reference{x}%
+ \pgfplots@check@ yz%
+ %
+ % Check 'y' as reference :
+ \def\pgfplots@apply@unit@ratio@reference{y}%
+ \pgfplots@check@ xz%
+ %
+ % Check 'z' as reference :
+ \def\pgfplots@apply@unit@ratio@reference{z}%
+ \pgfplots@check@ xy%
+ %
+ \else
+ % 2D is much simpler: find the scale s which fulfills s <= 1.
+ % One of them MUST fulfill it.
+ %
+ % try 'x' axis as reference:
+ \def\pgfplots@apply@unit@ratio@reference{x}%
+ %
+ % renormalize:
+ \expandafter\pgfplots@apply@unit@ratio@prepareratios\pgfplots@unit@vector@ratio\pgfplots@EOI
+ %
+ % compute scaling factor:
+ \pgfplots@getscale@unit@vector@reltoreference y\pgfplots@unit@ratio@y%
+ %
+%\message{^^Junit vector ratio 2D searching reference: checking \pgfplots@apply@unit@ratio@reference. feasable=\pgfmathresult < 1: \ifdim\pgfmathresult pt <\pgfplots@ONE YES-> use x\else NO->use y\fi^^J}%
+ % and check (1). The condition (2) is irrelevant; it is met
+ % anyway.
+ \ifdim\pgfmathresult pt<\pgfplots@ONE
+ \def\pgfplots@optimum@sofar@axis{x}%
+ \else
+ \def\pgfplots@optimum@sofar@axis{y}%
+ \fi
+ \fi
+ \else
+%\message{^^Junit vector ratio chose \pgfplots@optimum@sofar@axis\space to fulfill explicitly provided limits (at least partially).^^J}%
+ \fi
+ %
+ \ifx\pgfplots@optimum@sofar@axis\pgfutil@empty
+ \if1\b@pgfplots@unitvec@is@zero@z
+ \def\pgfplots@optimum@sofar@axis{y}%
+ \else
+ \def\pgfplots@optimum@sofar@axis{z}%
+ \fi
+ \pgfplotswarning{unit vector ratio axis undetermined}{\pgfplots@optimum@sofar@axis}\pgfeov%
+ \fi
+ \let\pgfplots@apply@unit@ratio@reference=\pgfplots@optimum@sofar@axis
+ \pgfmath@smuggleone\pgfplots@apply@unit@ratio@reference
+ \endgroup
+}%
+\def\pgfplots@apply@unit@ratio@find@reference@checkexplicitlimits{%
+ \ifpgfplots@autocompute@ymax \else \def\pgfplots@optimum@sofar@axis{y}\fi
+ \ifpgfplots@autocompute@ymin \else \def\pgfplots@optimum@sofar@axis{y}\fi
+ \ifpgfplots@autocompute@xmax \else \def\pgfplots@optimum@sofar@axis{x}\fi
+ \ifpgfplots@autocompute@xmin \else \def\pgfplots@optimum@sofar@axis{x}\fi
+ \ifpgfplots@threedim
+ \ifpgfplots@autocompute@zmax \else \def\pgfplots@optimum@sofar@axis{z}\fi
+ \ifpgfplots@autocompute@zmin \else \def\pgfplots@optimum@sofar@axis{z}\fi
+ \fi
+}%
+
+% This is ONLY applied to the value of 'unit vector ratio'. It does
+% not touch the current axis scaling factors.
+\def\pgfplots@apply@unit@ratio@prepareratios#1 #2 #3 #4\pgfplots@EOI{%
+ \def\pgfplots@unit@ratio@x{#1}%
+ \def\pgfplots@unit@ratio@y{#2}%
+ \def\pgfplots@unit@ratio@z{#3}%
+ %
+ % 'unit vector ratio' is measured relative to the y axis for 2d
+ % and relative to the z axis for 3d plots.
+ % renormalize such that it is relative to
+ % \pgfplots@apply@unit@ratio@reference.
+ %
+ % Furthermore, renormalize such that
+ % unit@ratio@\pgfplots@apply@unit@ratio@reference is 1.
+ \pgfmathreciprocal@{\csname pgfplots@unit@ratio@\pgfplots@apply@unit@ratio@reference\endcsname}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \ifpgfplots@threedim
+ \if z\pgfplots@apply@unit@ratio@reference
+ \else
+ \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@z}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \fi
+ %
+ \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@x}%
+ \let\pgfplots@unit@ratio@x=\pgfmathresult
+ %
+ \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@y}%
+ \let\pgfplots@unit@ratio@y=\pgfmathresult
+ %
+ \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@z}%
+ \let\pgfplots@unit@ratio@z=\pgfmathresult
+ \else
+ \if y\pgfplots@apply@unit@ratio@reference
+ \else
+ \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@y}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \fi
+ %
+ \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@x}%
+ \let\pgfplots@unit@ratio@x=\pgfmathresult
+ %
+ \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@y}%
+ \let\pgfplots@unit@ratio@y=\pgfmathresult
+ %
+ \def\pgfplots@unit@ratio@z{<unused>}%
+ \fi
+ %
+}%
+
+
+% Computes a new unit vector E_#1 for direction #1 such that
+% ||E_#1|| = #2 * ||e_reference||.
+% Here, #2 is a scaling factor and e_reference is a reference axis.
+% The reference axis is stored in
+% \pgfplots@apply@unit@ratio@reference, the macro contains one of
+% {x,y,z}.
+%
+% The data limits for '#1' will be enlarged as well (for 'unit rescale
+% keep size').
+%
+% #1 is the axis which should be scaled (i.e. #1 in {x,y,z}).
+% It is allowed if #1 = \pgfplots@apply@unit@ratio@reference. In this
+% case, you can provide a scale '#2' to rescale the axis.
+%
+% #2 is a desired scale, relative to
+% \pgfplots@apply@unit@ratio@reference. #2 should be a number without
+% unit.
+%
+% The parameter \pgfplots@apply@unit@ratio@reference is also one of
+% {x,y,z}.
+%
+\def\pgfplots@rescale@unit@vector@reltoreference#1#2{%
+ \def\pgfplots@loc@TMPa{0}%
+ \if#1\pgfplots@apply@unit@ratio@reference
+ \pgfplotsmath@ifapproxequal@dim{#2pt}{1pt}{0.0002pt}{%
+ }{%
+ \def\pgfplots@loc@TMPa{1}%
+ }%
+ \else
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ \if1\csname b@pgfplots@unitvec@is@zero@#1\endcsname
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \if1\pgfplots@loc@TMPa
+ %
+ \pgfplots@getscale@unit@vector@reltoreference{#1}{#2}%
+ \global\let\pgfplots@glob@TMPa=\pgfmathresult
+ %
+%\message{Rescaling '#1' by \pgfplots@glob@TMPa.^^J}%
+ %
+ \pgfmathdivide@{\csname pgfplots@target@unit@scale@inv@#1\endcsname}{\pgfplots@glob@TMPa}%
+ \expandafter\let\csname pgfplots@target@unit@scale@inv@#1\endcsname=\pgfmathresult
+ %
+ \pgfmathreciprocal@\pgfplots@glob@TMPa
+ \expandafter\let\csname pgfplots@target@limitrescale@#1@\endcsname=\pgfmathresult
+ %
+ \fi
+}
+
+% Updates the #1 axis limits such that the axis' dimensions
+% stay the same after scaling the #1 unit vector by a scale 's'.
+%
+% PRECONDITION:
+% - the #1 unit vector has been rescaled by a factor s.
+% For example, e_xnew := e_x * 0.5 .
+%
+% POSTCONDITION:
+% - the axis limits are enlarged by a factor 1/s such that
+% 1/s (#1max - #1min) * e_xnew = (#1max- #1min) * e_x.
+%
+% In other words, the unit vector rescale is componensated by
+% modifying the axis limits: we want to add an absolute component 'd'
+% to the range:
+% 1/s (xmax - xmin ) = xmax - xmin +d
+% =>
+% d = (1/s - 1) * (xmax - xmin)
+%
+% The only remaining thing to do is to distribute 'd' to 'xmax' and
+% 'xmin'. Typically, 50% to each will be fine, I guess...
+%
+% #1: either x, y or z. It denotes the direction which has been
+% modified.
+% #2: the INVERSE of the scaling factor, #2 = 1/s .
+%
+\def\pgfplots@apply@unit@vector@rescale@keep@size#1#2{%
+ \ifdim#2pt=1pt
+ \else
+ \if0\pgfplots@unit@vector@rescale@keep@size
+ % unit rescale keep size=false : do nothing. Ignore the
+ % scaling request.
+ \else
+ % unit rescale keep size=true|unless limits declared
+ %
+%\message{'unit rescale keep size': Resizing data range for #1 by #2: from \csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname\ to}%
+ \pgfmathsubtract@{\csname pgfplots@#1max\endcsname}{\csname pgfplots@#1min\endcsname}%
+ \begingroup
+ \pgf@xa=\pgfmathresult pt
+ \pgfmathsubtract@{#2}{1.0}%
+ \pgf@xa=\pgfmathresult \pgf@xa% this is 'd'
+ %
+ % \pgfplots@glob@TMPb : will be subtracted from #1min
+ % \pgfplots@glob@TMPc : will be added to #1max
+ \pgfplots@if{pgfplots@autocompute@#1min}{%
+ \pgfplots@if{pgfplots@autocompute@#1max}{%
+ \pgf@xa=0.5 \pgf@xa
+ \xdef\pgfplots@glob@TMPb{\pgf@sys@tonumber{\pgf@xa}}%
+ \xdef\pgfplots@glob@TMPc{\pgfplots@glob@TMPb}%
+ }{%
+ \xdef\pgfplots@glob@TMPb{\pgf@sys@tonumber{\pgf@xa}}%
+ \xdef\pgfplots@glob@TMPc{0.0}%
+ }%
+ }{%
+ \pgfplots@if{pgfplots@autocompute@#1max}{%
+ \xdef\pgfplots@glob@TMPb{0.0}%
+ \xdef\pgfplots@glob@TMPc{\pgf@sys@tonumber{\pgf@xa}}%
+ }{%
+ \if1\pgfplots@unit@vector@rescale@keep@size
+ % unit rescale keep size=true : FORCE
+ % enlargement!
+ \pgf@xa=0.5 \pgf@xa
+ \xdef\pgfplots@glob@TMPb{\pgf@sys@tonumber{\pgf@xa}}%
+ \xdef\pgfplots@glob@TMPc{\pgfplots@glob@TMPb}%
+ \else
+ % unit rescale keep size=unless limits declared:
+ % do not scale - all limits are declared
+ % explicitly
+ \xdef\pgfplots@glob@TMPb{0.0}%
+ \xdef\pgfplots@glob@TMPc{0.0}%
+ \fi
+ }%
+ }%
+ \endgroup
+ \pgfmathsubtract@{\csname pgfplots@#1min\endcsname}{\pgfplots@glob@TMPb}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult
+ \pgfmathadd@{\csname pgfplots@#1max\endcsname}{\pgfplots@glob@TMPc}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult
+%\message{\csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname. [- \pgfplots@glob@TMPb; + \pgfplots@glob@TMPc]^^J}%
+ %
+ % Update auxiliary data members:
+ \pgfplots@visphase@notify@changeofcanvaslimits{#1}%
+ \fi
+ \fi
+}%
+
+% #1: an axis which should be scaled
+% #2: the desired final ratio ||e_#1||/||e_ref||
+\def\pgfplots@getscale@unit@vector@reltoreference#1#2{%
+ %
+ % If the datascaling transformation is active (which is almost
+ % everytime the case here), we have a transformation
+ % T^{-1}(x)= 10^scale * x
+ % with different scales for every axis.
+ %
+ % If the datascaling transformation is NOT active, scale is 0
+ % and T^{-1} = Identity.
+ %
+ % Note that the datascaling transformation also has
+ % translations (shifts). These are not important here.
+ %
+ % Goal:
+ % compute E_#1 such that
+ % #2* || T^{-1} e_ref || = || T^{-1} E_#1 ||
+ % where T^{-1} is the data scaling transformation and e_ref the
+ % reference unit vector. Keep in mind that there are
+ % *different* data scaling transformations for each axis.
+ %
+ % We are given e_ref and e_#1 and the desired aspect ratio
+ % between e_ref and E_#1, which is available as #2.
+ %
+ % So: T^{-1} E_#1 := s* T^{-1} e_#1 where
+ % s = #2 * ||T^{-1} e_ref|| / || T^{-1} e_#1 ||
+ % = |10^{scale_ref}| / |10^{scale_#1}| * #2 * || e_ref|| / ||e_#1||.
+ %
+ % Then, E_#1 = T ( T^{-1} E_#1 ) = s * e_#1.
+ %
+ % -> compute 's'!
+ %
+ % Part 1: compute
+ % #2 * ||e_ref|| / ||e_#1||.
+ %
+ \def\pgfplots@loc@TMPa{1}%
+ \if1\csname b@pgfplots@unitvec@is@zero@#1\endcsname
+ \def\pgfplots@loc@TMPa{0}%
+ \else
+ \if1\csname b@pgfplots@unitvec@is@zero@\pgfplots@apply@unit@ratio@reference\endcsname
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \fi
+ \if0\pgfplots@loc@TMPa
+ \def\pgfmathresult{16001}%
+ \else
+ % note that x^{-1} / y^{-1} == ( x/y )^{-1} == y/x .
+ % consequently, we can use our @inv@[xyz] values here:
+ \pgfmathdivide@
+ {\csname pgfplots@target@unit@scale@inv@#1\endcsname}%
+ {\csname pgfplots@target@unit@scale@inv@\pgfplots@apply@unit@ratio@reference\endcsname}
+ \pgfmathmultiply@
+ {\pgfmathresult}%
+ {#2}%
+ \global\let\pgfplots@glob@TMPa=\pgfmathresult
+ %
+ % also compute 1/s, required as temporary value:
+ %\pgfmathmultiply@
+ % {\csname pgfplots@\pgfplots@apply@unit@ratio@reference @inverseveclength\endcsname}
+ % {\csname pgfplots@target@unit@scale@#1\endcsname}%
+ %\ifdim#2pt=1pt
+ %\else
+ % \pgfmathdivide@{\pgfmathresult}{#2}%
+ %\fi
+ %\global\let\pgfplots@glob@TMPb=\pgfmathresult
+ %
+ % Part 2: handle data scaling trafo scales:
+ \begingroup
+ \def\pgfplots@tmp@exponentref{0}%
+ \def\pgfplots@tmp@exponentK{0}%
+ \pgfplots@if{pgfplots@apply@datatrafo@\pgfplots@apply@unit@ratio@reference }{%
+ \pgfplots@letcsname{pgfplots@tmp@exponentref}={pgfplots@data@scale@trafo@EXPONENT@\pgfplots@apply@unit@ratio@reference }%
+ }{}%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplots@letcsname{pgfplots@tmp@exponentK}={pgfplots@data@scale@trafo@EXPONENT@#1}%
+ }{}%
+ \c@pgf@counta=\pgfplots@tmp@exponentref\relax
+ \advance\c@pgf@counta by-\pgfplots@tmp@exponentK\relax
+ \ifnum\c@pgf@counta=0
+ \else
+ \pgfplotsmathmultiplypowten@{\pgfplots@glob@TMPa}{\c@pgf@counta}%
+ \global\let\pgfplots@glob@TMPa=\pgfmathresult
+ % \pgfplotsmathmultiplypowten@{\pgfplots@glob@TMPb}{-\c@pgf@counta}%
+ % \global\let\pgfplots@glob@TMPb=\pgfmathresult
+ \fi
+ \xdef\pgfplots@glob@TMPc{\the\c@pgf@counta}%
+ \endgroup
+ \let\pgfmathresult=\pgfplots@glob@TMPa
+ \fi
+%\message{\string\pgfplots@getscale@unit@vector@reltoreference{#1}{#2} (reference \pgfplots@apply@unit@ratio@reference) = \pgfmathresult.^^J}%
+}
+
+% helper for \pgfplots@check@and@apply@datatrafo@for.
+\def\pgfplots@compute@number@order@for@trafo@isdimen#1\tocount#2{%
+ \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber{#1}}%
+ \pgfmathfloatparsenumber{\pgfplots@loc@TMPa}%
+ \expandafter\pgfmathfloat@decompose@E\pgfmathresult\relax#2
+ \advance#2 by1\relax
+}
+
+% helper for \pgfplots@check@and@apply@datatrafo@for.
+%
+\def\pgfplots@compute@number@order@for@trafo@isfloat#1\tocount#2{%
+ \pgfmathfloatparsenumber{#1}%
+ \expandafter\pgfmathfloat@decompose@E\pgfmathresult\relax#2\relax
+ \advance#2 by1
+}
+
+\def\pgfplots@if@is@float@zero#1#2#3{%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloatgetflags{\pgfmathresult}{\c@pgf@countd}%
+ \ifnum\c@pgf@countd=0 %
+ % ah - it *is* 0.0:
+ #2%
+ \else
+ #3%
+ \fi
+}
+
+% Initialises the data scale transformation such that it is optimal
+% for direction #1 (using its axis limits and the target scaling size).
+%
+% Note that it will not be applied in any way; and it may still be
+% modified.
+%
+% PRECONDITION:
+% - all axis limits are available in float representation
+% - \pgfplots@set@default@size@options has been called before
+% POSTCONDITION:
+% - the scaling transformation is set up,
+\def\pgfplots@set@optimal@datatrafo@for@#1{%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ % initialise data scale transformation
+ % T(x) = 10^{q-m} * x
+ %
+ \ifpgfplots@disabledatascaling
+ % this here is a waste of time, because the NO-OP trafo
+ % will be applied to all coordinates. One could really
+ % safe a lot of CPU time when disabledatascaling is enabled...
+ % but it requires so much extra cases; I really don't want
+ % that!
+ \gdef\pgfplots@glob@TMPa{0}%
+ \gdef\pgfplots@glob@TMPb{0}%
+ \else
+ \begingroup
+ \let\data@max@order=\c@pgf@counta
+ \let\data@cur@order=\c@pgf@countb
+ \let\data@dimen=\pgf@xa
+ \let\data@tmp=\pgf@xb
+ \let\data@dimen@order=\c@pgf@countc
+ \let\data@EXPONENT=\c@pgf@countd
+ \expandafter\let\expandafter\pgfplots@display@min@float\csname pgfplots@#1min\endcsname
+ \expandafter\let\expandafter\pgfplots@display@max@float\csname pgfplots@#1max\endcsname
+ \expandafter\let\expandafter\pgfplots@data@min@float\csname pgfplots@data@#1min\endcsname
+ \expandafter\let\expandafter\pgfplots@data@max@float\csname pgfplots@data@#1max\endcsname
+ \ifpgfplots@autocompute@all@limits
+ \else
+ \pgfplotscoordmath{#1}{max}{\pgfplots@display@max@float}{\pgfplots@data@max@float}%
+ \let\pgfplots@data@max@float=\pgfmathresult
+ \pgfplotscoordmath{#1}{min}{\pgfplots@display@min@float}{\pgfplots@data@min@float}%
+ \let\pgfplots@data@min@float=\pgfmathresult
+ \fi
+ %
+%\message{minmax = [\pgfplots@data@min@float,\pgfplots@data@max@float]^^J}%
+ % Step 1: compute 'm', the data order
+ \pgfplots@if@is@float@zero{\pgfplots@data@min@float}{%
+ \pgfplots@if@is@float@zero{\pgfplots@data@max@float}{%
+ \data@max@order=1 % both are zero. ok.
+ % Note that this is '1' due to backwards
+ % compatibility.
+ }{%
+ % one of them is zero. Take the other one!
+ \pgfplots@compute@number@order@for@trafo@isfloat
+ \pgfplots@data@max@float
+ \tocount\data@cur@order
+ \data@max@order=\data@cur@order
+ }%
+ }{%
+ \pgfplots@if@is@float@zero{\pgfplots@data@max@float}{%
+ % one of them is zero. Take the other one!
+ \pgfplots@compute@number@order@for@trafo@isfloat
+ \pgfplots@data@min@float
+ \tocount\data@cur@order
+ \data@max@order=\data@cur@order
+ }{%
+ % none of them is zero. Compute MAX:
+ \pgfplots@compute@number@order@for@trafo@isfloat
+ \pgfplots@data@min@float
+ \tocount\data@cur@order
+ \data@max@order=\data@cur@order
+ \pgfplots@compute@number@order@for@trafo@isfloat
+ \pgfplots@data@max@float
+ \tocount\data@cur@order
+ \ifnum\data@cur@order>\data@max@order
+ \data@max@order=\data@cur@order
+ \fi
+ }%
+ }%
+ %
+ %
+ %
+ % Step 2: compute 'q', the #1-size of the axis.
+ %\expandafter\ifx\csname pgfplots@#1\endcsname\pgfutil@empty
+ % We have 'width' or 'height' (I always have them).
+ %
+ % Use the order of these parameters.
+ \def\pgfplots@loc@TMPa{#1}%
+ \def\pgfplots@loc@TMPb{x}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \data@dimen=\pgfplots@width\relax
+ \else
+ \if1\pgfplots@compat@scaling@zunitfix@enable
+ \data@dimen=\pgfplots@height\relax
+ \else
+ % this code here belongs to versions up to
+ % 1.3.1.
+ % It is now deprecated and produces small
+ % pixel differences.
+ \def\pgfplots@loc@TMPb{y}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \data@dimen=\pgfplots@height\relax
+ \else
+ \data@dimen=42pt % this is actually different from 1.3.1: there, it was UNDEFINED.
+ \fi
+ \fi
+ \fi
+ \pgfplots@compute@number@order@for@trafo@isdimen
+ \data@dimen
+ \tocount\data@dimen@order
+ % This here is to avoid inaccuracies in the final
+ % axis rectangle size, see \pgfplots@initsizes:
+ %\advance\data@dimen@order by-1
+ %\else
+ % FIXME:
+ % we have either the 'x=1cm' or 'y=1cm' option!
+ % How should I initialise the trafo!?
+ % \data@dimen@order=3
+ %\fi
+ %
+%\message{Direction #1: data max order=\the\data@max@order; data dimen order=\the\data@dimen@order. ^^J}%
+ \data@EXPONENT=\data@dimen@order
+ \advance\data@EXPONENT by-\data@max@order
+ % Now, I introduce a loop which shall avoid cancellation of
+ % significant digits.
+ %
+ % Harmless Example:
+ % if we have data shift = -3 and
+ % max = 2e6, min = 1e6, then max-min = 1e6; T(max)-T(min) = 1e3 which is ok.
+ % In this case, the loop won't change anything.
+ %
+ % Critical Example:
+ % if we have data shift = -3 and
+ % max = 1980, min = 1930 then
+ % T(max) = 1.98 and T(min) = 1.93
+ % and thus T(max)-T(min) = 0.05 .
+ % Considering that this is the axis range
+ % in which tick labels and plot points need to be computed, we
+ % only have two or three digits left! That happens because the
+ % prefix '19' is common and is cancelled in the subtraction.
+ % Idea: while T(max)-T(min) < O(10^2) -> increase shift by +1
+ % (and make sure that T(max) < MAX_VALID_TEX_NUMBER).
+ %
+ \def\pgfplotscoordmathnotifydatascalesetfor##1{}% disable temporarily. We are just testing it.
+ \pgfplots@loop@CONTINUEtrue
+ \pgfutil@loop
+ \pgfplotscoordmath{#1}{datascaletrafo set params}{\the\data@EXPONENT}{0}%
+ \pgfplotscoordmath{#1}{datascaletrafo}{\pgfplots@data@min@float}%
+ \let\pgfplots@min@fixed=\pgfmathresult
+ \ifpgfplots@loop@CONTINUE
+ \pgfplotscoordmath{#1}{datascaletrafo}{\pgfplots@data@max@float}%
+ \let\pgfplots@max@fixed=\pgfmathresult
+ \data@tmp=\pgfplots@max@fixed pt
+%\message{Current trafo EXPONENT for #1 direction: \the\data@EXPONENT; original #1 data limits: [\pgfplots@data@min@float:\pgfplots@data@max@float]; current transformed #1 limits: [\pgfplots@min@fixed:\pgfplots@max@fixed]; cancellation check max-min running...^^J}%
+ \ifdim\data@tmp<0pt
+ % I need absolute values here:
+ \multiply\data@tmp by-1\relax
+ \fi
+ \pgfmathsubtract@{\pgfplots@max@fixed}{\pgfplots@min@fixed}%
+ \data@dimen=\pgfmathresult pt
+ \pgfplots@loop@CONTINUEfalse
+ \ifdim\data@tmp<1500pt % a multiplication with '10' results in max = 15000 which is the upper limit.
+ \ifdim\data@dimen<100pt % I guess if max-min = O(100), we have quite good accuracy
+ \ifdim\data@dimen<0.0001pt
+ \else
+ \advance\data@EXPONENT by1
+ \pgfplots@loop@CONTINUEtrue
+ \fi
+ \fi
+ \fi
+ %--------------------------------------------------
+ % \ifdim\data@dimen>1200pt% FIXME : is this here ok!? CHECK IT!
+ % \ifdim\data@dimen>7999pt
+ % \advance\data@EXPONENT by-2
+ % \else
+ % \advance\data@EXPONENT by-1
+ % \fi
+ % \pgfplots@loop@CONTINUEfalse
+ % \fi
+ %--------------------------------------------------
+ \pgfutil@repeat
+ \xdef\pgfplots@glob@TMPa{\the\data@EXPONENT}%
+ \xdef\pgfplots@glob@TMPb{\pgfplots@min@fixed}%
+ \endgroup
+ \fi
+ % COMPLETE INITIALISATION:
+%\message{Initialising the data scale transformation in direction #1 to 10^\pgfplots@glob@TMPa*#1 - \pgfplots@glob@TMPb...^^J}%
+ \pgfplotscoordmath{#1}{datascaletrafo set params}{\pgfplots@glob@TMPa}{\pgfplots@glob@TMPb}%
+ }{%
+ % case apply trafo == false:
+ \pgfplotscoordmath{#1}{datascaletrafo set params}{0}{0}%
+ }%
+}
+
+
+\def\pgfplots@set@optimal@datatrafos@allaxes{%
+ \pgfplots@letcsname pgfplots@xmin@unscaled@as@float={pgfplots@xmin}%
+ \pgfplots@letcsname pgfplots@xmax@unscaled@as@float={pgfplots@xmax}%
+ %
+ \pgfplots@letcsname pgfplots@ymin@unscaled@as@float={pgfplots@ymin}%
+ \pgfplots@letcsname pgfplots@ymax@unscaled@as@float={pgfplots@ymax}%
+ %
+ \pgfplots@letcsname pgfplots@zmin@unscaled@as@float={pgfplots@zmin}%
+ \pgfplots@letcsname pgfplots@zmax@unscaled@as@float={pgfplots@zmax}%
+ %
+ \pgfplots@ifneeds@one@uniform@datascale{%
+ % Ah - we have to ensure that there is ONE common scale for
+ % each unit (x, y, and z have the same).
+ %
+ % In this case, we need to choose one of the transformations
+ % and apply it to all axes -- such that each axis gets the
+ % same scale.
+ %
+ % this mode is used for axis equal and its variants.
+ %
+ % The strategy to fix the transformation is as follows:
+ % 1. we assume that axis limits will be enlarged in order to
+ % satisfy 'scale uniformly'.
+ % 2. we assume that the LARGEST axis limit dominates the
+ % others.
+ % 3. if one of the axes does not have datascaling (i.e. is
+ % log scale), we disable all other datascalings.
+ %
+ % Consequently, we search for the axis with the largest limit
+ % - and copy its data scaling to all other axes. If one of the
+ % axes is log, that one overrules it and all data scaling
+ % effects are disabled..
+ \ifpgfplots@disabledatascaling
+ \def\pgfplots@loc@TMPd##1{%
+ \pgfplotscoordmath{##1}{datascaletrafo set params}{0}{0}%
+ }%
+ \else
+ \begingroup
+ \let\pgfplots@data@scale@trafo@EXPONENT@common=\pgfutil@empty
+ \ifpgfplots@disabledatascaling
+ \def\pgfplots@data@scale@trafo@EXPONENT@common{{0}{0}}% disable scaling!
+ \fi
+ \def\pgfplots@data@scale@trafo@EXPONENT@common@arg{-}% this should not match anything in this context.
+ \pgfplots@if{pgfplots@apply@datatrafo@x}{%
+ }{%
+ \def\pgfplots@data@scale@trafo@EXPONENT@common{{0}{0}}% disable scaling!
+ }%
+ \pgfplots@if{pgfplots@apply@datatrafo@y}{%
+ }{%
+ \def\pgfplots@data@scale@trafo@EXPONENT@common{{0}{0}}% disable scaling!
+ }%
+ \ifpgfplots@threedim
+ \pgfplots@if{pgfplots@apply@datatrafo@z}{%
+ }{%
+ \def\pgfplots@data@scale@trafo@EXPONENT@common{{0}{0}}% disable scaling!
+ }%
+ \fi
+ \ifx\pgfplots@data@scale@trafo@EXPONENT@common\pgfutil@empty
+ % ah - we still need to compute one. ok, search for the
+ % largest limit.
+ %
+ \pgfplots@get@axis@with@largest@limits
+ \let\pgfplots@data@scale@trafo@EXPONENT@common@arg=\pgfplotsretval
+ %
+ % ok, compute data scaling transformation for the target axis:
+ \expandafter\pgfplots@set@optimal@datatrafo@for@\pgfplots@data@scale@trafo@EXPONENT@common@arg%
+ %
+ \pgfplotscoordmath{\pgfplots@data@scale@trafo@EXPONENT@common@arg}{datascaletrafo get params}%
+ \let\pgfplots@data@scale@trafo@EXPONENT@common=\pgfmathresult%
+ \else
+ % hm. early-out - we already have the scaling trafo.
+ % return it.
+ \fi
+ \global\let\pgfplots@glob@TMPa=\pgfplots@data@scale@trafo@EXPONENT@common
+ \global\let\pgfplots@glob@TMPb=\pgfplots@data@scale@trafo@EXPONENT@common@arg
+ \endgroup
+ %
+ \xdef\pgfplots@glob@TMPc{\expandafter\pgfutil@firstoftwo\pgfplots@glob@TMPa}%
+ %
+ \def\pgfplots@loc@TMPd##1{%
+ \if ##1\pgfplots@glob@TMPb
+ % we need to set the scaling trafo for the target direction
+ % (was lost after \endgroup)
+ \def\pgfplots@loc@TMPa{\pgfplotscoordmath{##1}{datascaletrafo set params}}%
+ \expandafter\pgfplots@loc@TMPa\pgfplots@glob@TMPa%
+ \else
+ \pgfplotscoordmath{##1}{datascaletrafo set params}{\pgfplots@glob@TMPc}{0}%
+ \pgfplotscoordmath{##1}{datascaletrafo}{\csname pgfplots@##1min\endcsname}%
+ \pgfplotscoordmath{##1}{datascaletrafo set params}{\pgfplots@glob@TMPc}{\pgfmathresult}%
+ \fi
+ }%
+ \fi
+ \pgfplots@loc@TMPd x%
+ \pgfplots@loc@TMPd y%
+ \ifpgfplots@threedim
+ \pgfplots@loc@TMPd z%
+ \fi
+ }{%
+ % optimize individually:
+ \pgfplots@set@optimal@datatrafo@for@ x%
+ \pgfplots@set@optimal@datatrafo@for@ y%
+ \ifpgfplots@threedim
+ \pgfplots@set@optimal@datatrafo@for@ z%
+ \fi
+ }%
+ %
+}%
+
+% Defines \pgfplotsretval to be one of x, y, or z, such that the
+% return value indicates the axis with largest untransformed axis
+% limits.
+\def\pgfplots@get@axis@with@largest@limits{%
+ \begingroup
+ \let\pgfplotsretval@extreme=\pgfutil@empty
+ \let\pgfplotsretval@extreme@arg=\pgfutil@empty
+ \def\pgfplots@@##1{%
+ % compute axis range for axis ##1 ...
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@##1min\endcsname}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@##1max\endcsname}%
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfmathresult}{\pgfplots@loc@TMPa}}%
+ % ... ok, it is in \pgfmathresult.
+ \let\candidate=\pgfmathresult
+ \ifx\pgfplotsretval@extreme@arg\pgfutil@empty
+ % ah: no extreme value so far. use ours.
+ \def\pgfplotsretval@extreme@arg{##1}%
+ \let\pgfplotsretval@extreme=\candidate
+ \else
+ \pgfplotscoordmath{default}{if less than}{\pgfplotsretval@extreme}{\candidate}{%
+ % update extreme value:
+ \def\pgfplotsretval@extreme@arg{##1}%
+ \let\pgfplotsretval@extreme=\candidate
+ }{%
+ }%
+ \fi
+ }%
+ \pgfplots@@ x%
+ \pgfplots@@ y%
+ \ifpgfplots@threedim
+ \pgfplots@@ z%
+ \fi
+ \let\pgfplotsretval=\pgfplotsretval@extreme@arg
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Initialises the data scale transformation and applies it to any
+% user specified options.
+%
+% PRECONDITION:
+% - all axis limits are available in float representation
+% - \pgfplots@set@default@size@options has been called before
+% - the scaling transformation for direction x is set up
+% (\pgfplots@set@optimal@datatrafo@for@),
+% POSTCONDITION:
+% - all axis limits are transformed, but no other axis inputs.
+%
+% Unit vectors and other axis input parameters will be scaled later.
+%
+% @see \pgfplots@check@and@apply@datatrafo@for
+\def\pgfplots@apply@datatrafo@to@axis@limits#1{%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ % Transform axis limits:
+%\message{#1- display limits BEFORE data transformation: [\csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname]^^J}%
+ \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1min\endcsname}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult
+ %
+ \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1max\endcsname}%
+ \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult
+%\message{#1- display limits after data transformation: [\csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname]^^J}%
+ }{%
+ % case apply trafo == false:
+ \expandafter\let\csname pgfplots@#1min@unscaled@as@float\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfplots@#1max@unscaled@as@float\endcsname=\pgfutil@empty
+ }%
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.sty b/graphics/pgf/contrib/pgfplots/tex/pgfplots.sty
new file mode 100644
index 0000000000..ffcbc45cf1
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.sty
@@ -0,0 +1,155 @@
+%--------------------------------------------
+%
+% Package pgfplots.sty
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2013 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+\IfFileExists{pgfplots.revision.tex}{\input pgfplots.revision.tex } {%
+ \def\pgfplotsrevision{0}%
+ \def\pgfplotsversion{0.0}%
+ \def\pgfplotsversiondatetime{2014-07-01 00:00:00 +100}%
+ \def\pgfplotsrevisiondatetime{2014-07-01 00:00:00 +100}%
+ \def\pgfplotsversiondate{2014/07/01}%
+ \def\pgfplotsrevisiondate{2014/07/01}%
+}
+\ProvidesPackage{pgfplots}[\pgfplotsversiondate\space v\pgfplotsversion\space Data Visualization (\pgfplotsrevision)]
+
+\RequirePackage{graphicx}
+
+% ATTENTION:
+% you MAY need one of
+% \def\pgfsysdriver{pgfsys-dvipdfm.def}
+% \def\pgfsysdriver{pgfsys-pdftex.def}
+% \def\pgfsysdriver{pgfsys-dvips.def}
+%
+% BEFORE the first \usepackage{pgf}, \usepackage{tikz} or
+% \usepackage{pgfplots}.
+% Default is
+% 'dvips' for 'latex'
+% 'pdftex' for 'pdflatex'
+% -> dvipdfm needs special attention.
+
+\IfFileExists{pgfsys-luatex.def}{%
+ % OK, proceed as usual
+}{%
+ % hm. check if we need it:
+ \def\pgfplots@glob@TMPa{luatex.def}%
+ \edef\pgfplots@glob@TMPb{\Gin@driver}%
+ \ifx\pgfplots@glob@TMPb\pgfplots@glob@TMPa
+ % hm. probably
+ \@ifundefined{pgfsysdriver}{%
+ % use a patch shipped with pgfplots:
+ \def\pgfsysdriver{pgfsys-luatexpatch.def}%
+ \immediate\write16{Package pgfplots external lib: activating patch for pgfsys-luatex.def driver (PGF is too old)}
+ }{%
+ \def\pgfplots@glob@TMPa{pgfsys-luatex.def}%
+ \ifx\pgfsysdriver\pgfplots@glob@TMPa
+ % use a patch shipped with pgfplots:
+ \def\pgfsysdriver{pgfsys-luatexpatch.def}%
+ \immediate\write16{Package pgfplots external lib: activating patch for pgfsys-luatex.def driver (PGF is too old)}
+ \fi
+ }%
+ \fi
+}
+
+\RequirePackage{tikz}
+
+% This is *identical* to \pgfutil@IfUndefined . I copied it here
+% because pgf up to and including version 2.10 does not contain it.
+\def\pgfplotsutil@IfUndefined#1{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\pgfutil@firstoftwo
+ \else
+ \expandafter\pgfutil@secondoftwo
+ \fi
+}
+
+\gdef\pgfplots@glob@TMPa{}%
+\pgfplotsutil@IfUndefined{directlua}{}{%
+ \pgfplotsutil@IfUndefined{newcatcodetable}{%
+ % I need \newcatcodetable
+ \gdef\pgfplots@glob@TMPa{\RequirePackage{luatexbase}}%
+ }
+}%
+
+\ifx\pgfplots@glob@TMPa\pgfutil@empty
+\else
+ \expandafter\pgfplots@glob@TMPa
+\fi
+
+\def\pgfplots@texdist@protect{\protect}%
+
+\input pgfplots.code.tex
+
+
+% checks for xcolor configuration options and will override
+% mesh/colorspace explicit color output
+% and
+% colormap default colorspace
+% if needed.
+\def\pgfplots@check@global@colorspace@overrides{%
+ % "bOverridesColorspace"
+ \pgfplots@loc@tmpfalse
+ \ifconvertcolorsD
+ % xcolor converts at *definition* time:
+ \pgfplots@loc@tmptrue
+ \else
+ \ifconvertcolorsU
+ % xcolor converts at *usage* time:
+ \pgfplots@loc@tmptrue
+ \fi
+ \fi
+ %
+ \ifpgfplots@loc@tmp
+ \let\pgfplots@loc@TMPb=\pgfutil@empty%
+ \ifx\XC@tgt@mod\pgfplots@XC@tgt@mod@rgb \def\pgfplots@loc@TMPb{rgb}\fi
+ \ifx\XC@tgt@mod\pgfplots@XC@tgt@mod@RGB \def\pgfplots@loc@TMPb{rgb}\fi
+ \ifx\XC@tgt@mod\pgfplots@XC@tgt@mod@cmyk\def\pgfplots@loc@TMPb{cmyk}\fi
+ \ifx\XC@tgt@mod\pgfplots@XC@tgt@mod@cmy \def\pgfplots@loc@TMPb{cmyk}\fi
+ \ifx\XC@tgt@mod\pgfplots@XC@tgt@mod@gray \def\pgfplots@loc@TMPb{gray}\fi
+ \ifx\XC@tgt@mod\pgfplots@XC@tgt@mod@Gray \def\pgfplots@loc@TMPb{gray}\fi
+ %
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ \edef\pgfplots@loc@TMPa{%
+ mesh/colorspace explicit color output=\pgfplots@loc@TMPb,%
+ colormap default colorspace=\pgfplots@loc@TMPb,%
+ }%
+ \pgfplots@log3{Overriding colorspace to \pgfplots@loc@TMPb\space due to xcolor configuration.}%
+ \expandafter\pgfplotsset\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+ \fi
+}%
+
+\def\pgfplots@XC@tgt@mod@rgb#1{rgb}
+\def\pgfplots@XC@tgt@mod@RGB#1{rgb}
+\def\pgfplots@XC@tgt@mod@cmyk#1{cmyk}
+\def\pgfplots@XC@tgt@mod@cmy#1{cmy}
+\def\pgfplots@XC@tgt@mod@gray#1{gray}
+\def\pgfplots@XC@tgt@mod@Gray#1{gray}
+
+\usetikzlibrary{plotmarks}
+
+
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplots.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplots.tex
new file mode 100644
index 0000000000..c4711be164
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplots.tex
@@ -0,0 +1,50 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+% ATTENTION:
+% you MAY need one of
+% \def\pgfsysdriver{pgfsys-dvipdfm.def}
+% \def\pgfsysdriver{pgfsys-pdftex.def}
+% \def\pgfsysdriver{pgfsys-dvips.def}
+%
+% BEFORE the first \input pgf.tex, \input tikz.tex or
+% \input pgfplots.tex
+% Default is
+% 'dvips' for 'tex'
+% 'pdftex' for 'pdftex'
+% -> dvipdfm needs special attention.
+%
+\input tikz.tex%
+%
+\edef\pgfplotscatcode{\the\catcode`\@}%
+\catcode`\@=11
+%
+\input pgfplots.revision.tex
+\input pgfplots.code.tex%
+\usetikzlibrary{plotmarks}%
+%
+\catcode`\@=\pgfplotscatcode
+%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsarray.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsarray.code.tex
new file mode 100644
index 0000000000..3bf006f31f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsarray.code.tex
@@ -0,0 +1,733 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is a helper package with an elementary array datastructure,
+% featuring O(1) index access and O(N) creation, deletion, copy.
+%
+% The following macros are supplied:
+%
+% \pgfplotsarraynewempty
+% \pgfplotsarraynew
+% \pgfplotsarrayresize
+% \pgfplotsarraycopy
+% \pgfplotsarraypushback
+% \pgfplotsarraysize
+% \pgfplotsarrayselect
+% \pgfplotsarrayset
+% \pgfplotsarrayletentry
+% \pgfplotsarraycheckempty
+% \pgfplotsarrayforeach
+% \pgfplotsarraysort
+% \pgfplotsarraybinarysearch
+%
+% and a subset also for global arrays:
+% \pgfplotsarraynewemptyglobal
+% \pgfplotsarrayresizeglobal
+% \pgfplotsarraysetglobal
+% \pgfplotsarrayletentryglobal
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcount\c@pgfplotsarray@tmp
+\newif\ifpgfplotsarrayempty
+
+% Creates a new, empty array.
+\def\pgfplotsarraynewempty#1{%
+ \pgfplotsarray@@def{#1@size}{0}%
+}
+\def\pgfplotsarraynewemptyglobal#1{%
+ \expandafter\gdef\csname\string#1@size\endcsname{0}%
+}
+
+% resizes (truncates) array #1 to size #2
+%
+% the elements won't be initialised. Use 'set' for each element.
+\def\pgfplotsarrayresize#1#2{%
+ \c@pgfplotsarray@tmp=#2
+ \pgfplotsarray@@edef{#1@size}{\the\c@pgfplotsarray@tmp}%
+}
+\def\pgfplotsarrayresizeglobal#1#2{%
+ \c@pgfplotsarray@tmp=#2
+ \expandafter\xdef\csname\string#1@size\endcsname{\the\c@pgfplotsarray@tmp}%
+}
+
+% Invokes code '#2' if the array named '#1' exists and '#3' if it does
+% not exist.
+\def\pgfplotsarrayifdefined#1#2#3{%
+ \pgfutil@ifundefined{#1@size}{#3}{#2}%
+}%
+
+% Creates a new array with an abirtrary number of elements.
+% Arguments:
+% #1: the array's name (a macro name)
+% #2: the elements in one of the following forms
+% a) a '\\' terminated list:
+% first\\second\\third\\ ...\\
+% like in tabular with one column. The final '\\' necessary!
+% b) a comma-separated list:
+% first,second,third,5,10,last
+% ATTENTION: arrays do not support the '...' syntax of tikz!
+%
+% Example:
+% \pgfplotsarraynew\fooarray{First Element\\Second Element\\Third Element\\}
+% \pgfplotsarraynew\fooarray{First Element,Second Element,Third Element}
+% \pgfplotsarraynew\fooarray{0,1,2,...,10}
+%
+%
+\long\def\pgfplotsarraynew#1#2{%
+ \pgfplots@check@backwards@compatible@list@format #2\\\pgfplots@EOI
+ \ifpgfplots@is@old@list@format
+ \pgfplotsarraynew@backslash{#1}{#2}%
+ \else
+ \pgfplotsarraynew@commasep{#1}{#2}%
+ \fi
+}
+
+% #1 the array's name (a macro name
+% #2 a list created by \pgfplotslistnew
+\def\pgfplotsarrayfrompgfplotslist#1#2{%
+ \pgfplotsarraynewempty#1%
+ \pgfplotslistforeachungrouped#2\as\pgfplotsarray@TMPa{%
+ \expandafter\pgfplotsarraypushback\expandafter{\pgfplotsarray@TMPa}\to#1%
+ }%
+}%
+
+\def\pgfplotsarraynew@backslash#1#2{%
+ \pgfplotsarraynewempty{#1}%
+ \long\def\pgfplotsarraynew@impl@rest{#2}%
+ \pgfutil@loop
+ \ifx\pgfplotsarraynew@impl@rest\pgfutil@empty
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ \pgfplots@loop@CONTINUEtrue
+ \fi
+ \ifpgfplots@loop@CONTINUE
+ \expandafter\pgfplotsarraynew@impl\pgfplotsarraynew@impl@rest\toarray#1\relax
+ \pgfutil@repeat
+}%
+
+% converts a comma-separated list (PGF foreach) to my internal list
+% structure.
+\long\def\pgfplotsarraynew@commasep#1#2{%
+ \pgfplotsarraynewempty{#1}%
+ \pgfplotsutilforeachcommasep{#2}\as\pgfplotsarraynew@elem{%
+ \expandafter\pgfplotsarraypushback\expandafter{\pgfplotsarraynew@elem}\to#1%
+ }%
+}
+% helper macro for \pgfplotsarraynew
+\long\def\pgfplotsarraynew@impl#1\\#2\toarray#3{%
+ \pgfplotsarraypushback#1\to#3\relax%
+ \def\pgfplotsarraynew@impl@rest{#2}%
+}
+
+
+\def\pgfplotsarray@@let#1=#2{%
+ \def\pgfplotsarray@TMP@@{\expandafter\let\csname\string#1\endcsname}%
+ \expandafter\pgfplotsarray@TMP@@\csname\string#2\endcsname
+}%
+
+\def\pgfplotsarray@@#1#2{%
+ \expandafter#1\csname\string#2\endcsname
+}%
+\def\pgfplotsarray@@def#1{%
+ \expandafter\def\csname\string#1\endcsname
+}%
+\def\pgfplotsarray@@edef#1{%
+ \expandafter\edef\csname\string#1\endcsname
+}%
+
+\def\pgfplotsarray@@getsizeto#1#2{%
+ \pgfplotsarraysize{#1}\to\c@pgfplotsarray@tmp
+ \edef#2{\the\c@pgfplotsarray@tmp}%
+}%
+
+% Copies array #1 to array #2.
+\def\pgfplotsarraycopy#1\to#2{%
+ \pgfplotsarray@@let{#2@size}={#1@size}%
+ \pgfplotsarray@@getsizeto{#1}{\pgfplotsarray@TMP}%
+ \c@pgfplotsarray@tmp=0
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarray@tmp<\pgfplotsarray@TMP
+ \pgfplotsarray@@let{#2@\the\c@pgfplotsarray@tmp}={#1@\the\c@pgfplotsarray@tmp}%
+ \advance\c@pgfplotsarray@tmp by1
+ \pgfutil@repeat
+}
+
+
+
+% #1: the item to append
+% #2: the array as macro name
+% Example:
+% \pgfplotsarraypushback Next last element\to\fooarray
+\long\def\pgfplotsarraypushback#1\to#2{%
+ \pgfplotsarraysize{#2}\to\c@pgfplotsarray@tmp
+ \pgfplotsarray@@def{#2@\the\c@pgfplotsarray@tmp}{#1}%
+ \advance\c@pgfplotsarray@tmp by1
+ \pgfplotsarray@@edef{#2@size}{\the\c@pgfplotsarray@tmp}%
+}
+\long\def\pgfplotsarraypushbackglobal#1\to#2{%
+ \pgfplotsarraysize{#2}\to\c@pgfplotsarray@tmp
+ \pgfplotsarray@@\gdef{#2@\the\c@pgfplotsarray@tmp}{#1}%
+ \advance\c@pgfplotsarray@tmp by1
+ \pgfplotsarray@@\xdef{#2@size}{\the\c@pgfplotsarray@tmp}%
+}
+
+\long\def\pgfplotsarraypushbackglobal#1\to#2{%
+ \pgfplotsarraysize{#2}\to\c@pgfplotsarray@tmp
+ \pgfplotsarray@@\gdef{#2@\the\c@pgfplotsarray@tmp}{#1}%
+ \advance\c@pgfplotsarray@tmp by1
+ \pgfplotsarray@@\xdef{#2@size}{\the\c@pgfplotsarray@tmp}%
+}
+
+% Counts the number of elements in array #1, storing it into the count
+% register #2.
+% Example:
+% \pgfplotsarraysize\foo\to{\count0}%
+% \the\count0
+\long\def\pgfplotsarraysize#1\to#2{%
+ #2=\csname\string#1@size\endcsname\relax
+}
+\long\def\pgfplotsarraysizetomacro#1\to#2{%
+ \expandafter\let\expandafter#2\csname\string#1@size\endcsname
+}
+
+% expands to the size of array #1.
+\def\pgfplotsarraysizeof#1{\csname\string#1@size\endcsname}%
+
+
+% Returns the #1th element of array #2 into macro #3
+% Arguments:
+% #1: a count 0,...,N-1 where N is the array size.
+% You may specify a number of a count.
+% #2: a array
+% #3: a macro name
+% Example:
+% Element 0:
+% \pgfplotsarrayselect0\of\foo\to\elem
+% \elem
+% Element \count1:
+% \pgfplotsarrayselect\count1\of\foo\to\elem
+\def\pgfplotsarrayselect#1\of#2\to#3{%
+ \c@pgfplotsarray@tmp=#1\relax
+ \expandafter\let\expandafter#3\csname\string#2@\the\c@pgfplotsarray@tmp\endcsname%
+ \ifx#3\relax
+ \pgfplotsthrow{no such element}{#1}{No such element: \string\pgfplotsarrayselect\the\c@pgfplotsarray@tmp\string\of{\string#2}}\pgfeov%
+ \fi
+}
+
+% Expands to the value at index #1 of array #2.
+% #1: a number (not a register)
+% #2: an array
+\def\pgfplotsarrayvalueofelem#1\of#2{\csname\string#2@#1\endcsname}%
+
+% Sets element '#1' of array '#2' to '#3'.
+\def\pgfplotsarrayset#1\of#2\to#3{%
+ \c@pgfplotsarray@tmp=#1\relax
+ \pgfutil@namedef{\string#2@\the\c@pgfplotsarray@tmp}{#3}%
+}
+\def\pgfplotsarraysetglobal#1\of#2\to#3{%
+ \c@pgfplotsarray@tmp=#1\relax
+ \expandafter\gdef\csname\string#2@\the\c@pgfplotsarray@tmp\endcsname{#3}%
+}
+\long\def\pgfplotsarrayletentry#1\of#2=#3{%
+ \c@pgfplotsarray@tmp=#1\relax
+ \expandafter\let\csname\string#2@\the\c@pgfplotsarray@tmp\endcsname=#3\relax
+}
+\long\def\pgfplotsarrayletentryglobal#1\of#2=#3{%
+ \c@pgfplotsarray@tmp=#1\relax
+ \expandafter\global\expandafter\let\csname\string#2@\the\c@pgfplotsarray@tmp\endcsname=#3\relax
+}
+
+% Defines \pgfplotsretval to be a text-representation of the array.
+% It will contain \t to separate cells.
+%
+\def\pgfplotsarraytotext#1{%
+ \begingroup
+ \pgfplotsapplistXnewempty\pgfplotsretval@
+ \pgfplotsarrayforeachungrouped#1\as\entry{%
+ \pgfmathfloatparsenumber\entry
+ \pgfmathfloattosci\pgfmathresult
+ \edef\entry{\pgfmathresult\noexpand\t}%
+ \expandafter\pgfplotsapplistXpushback\entry\to\pgfplotsretval@
+ }%
+ \pgfplotsapplistXlet\pgfplotsretval=\pgfplotsretval@
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}
+
+% Sets the boolean \ifpgfplotsarrayempty depending on whether array #1 is empty
+% or not.
+% Example:
+%
+% \pgfplotsarraycheckempty\fooarray
+% \ifpgfplotsarrayempty
+% List fooarray is empty!
+% \else
+% List is not empty.
+% \fi
+\def\pgfplotsarraycheckempty#1{%
+ \ifnum\csname\string#1@size\endcsname=0
+ \pgfplotsarrayemptytrue
+ \else
+ \pgfplotsarrayemptyfalse
+ \fi
+}
+
+
+% Iterates through each array element, names it #2 and calls code #3.
+% Example:
+% \pgfplotsarraynew\fooarray{Eins\\Zwei\\Drei\\}%
+% \pgfplotsarrayforeach\fooarray\as\foo{Element \foo\par}%
+% results in
+% Element Eins
+% Element Zwei
+% Element Drei
+% Each single element will be grouped with TeX groups.
+%
+% During the loop, \pgfplotsarrayforeachindex expands to the current index.
+\long\def\pgfplotsarrayforeach#1\as#2#3{%
+ % FIXME : add support for \breakforeach
+ \pgfplotsarray@@getsizeto{#1}{\pgfplotsarray@TMP}%
+ \c@pgfplotsarray@tmp=0\relax
+ \def\pgfplotsarrayforeachindex{\the\c@pgfplotsarray@tmp}%
+ \long\def\pgfplotsarray@TMPb{#3}%
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarray@tmp<\pgfplotsarray@TMP\relax
+ \begingroup
+ \expandafter\let\expandafter#2\expandafter=\csname\string#1@\the\c@pgfplotsarray@tmp\endcsname%
+ \pgfplotsarray@TMPb
+ \endgroup
+ \advance\c@pgfplotsarray@tmp by1
+ \pgfutil@repeat
+ \let\pgfplotsarrayforeachindex=\relax%
+}
+
+% The same but without groups around #3.
+\long\def\pgfplotsarrayforeachungrouped#1\as#2#3{%
+ \pgfplotsarray@@getsizeto{#1}{\pgfplotsarray@TMP}%
+ \c@pgfplotsarray@tmp=0\relax
+ \def\pgfplotsarrayforeachindex{\the\c@pgfplotsarray@tmp}%
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarray@tmp<\pgfplotsarray@TMP\relax
+ \expandafter\let\expandafter#2\expandafter=\csname\string#1@\the\c@pgfplotsarray@tmp\endcsname%
+ \begingroup
+ \toks0={#3}%
+ \xdef\pgfplotsarray@glob@TMP{%
+ \the\toks0 %
+ % restore loop state:
+ \c@pgfplotsarray@tmp=\the\c@pgfplotsarray@tmp\space
+ \noexpand\def\noexpand\pgfplotsarray@TMP{\pgfplotsarray@TMP}%
+ }%
+ \endgroup
+ \pgfplotsarray@glob@TMP
+ \advance\c@pgfplotsarray@tmp by1
+ \pgfutil@repeat
+ \let\pgfplotsarrayforeachindex=\relax%
+}
+
+\long\def\pgfplotsarrayforeachreversed#1\as#2#3{%
+ \pgfplotsarray@@getsizeto{#1}{\pgfplotsarray@TMP}%
+ \c@pgfplotsarray@tmp=\pgfplotsarray@TMP\relax
+ \def\pgfplotsarrayforeachindex{\the\c@pgfplotsarray@tmp}%
+ \long\def\pgfplotsarray@TMPb{#3}%
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarray@tmp>0 %
+ \advance\c@pgfplotsarray@tmp by-1
+ \begingroup
+ \expandafter\let\expandafter#2\expandafter=\csname\string#1@\the\c@pgfplotsarray@tmp\endcsname%
+ \pgfplotsarray@TMPb
+ \endgroup
+ \pgfutil@repeat
+ \let\pgfplotsarrayforeachindex=\relax%
+}
+
+\long\def\pgfplotsarrayforeachreversedungrouped#1\as#2#3{%
+ \pgfplotsarray@@getsizeto{#1}{\pgfplotsarray@TMP}%
+ \c@pgfplotsarray@tmp=\pgfplotsarray@TMP\relax
+ \def\pgfplotsarrayforeachindex{\the\c@pgfplotsarray@tmp}%
+ \long\def\pgfplotsarray@TMPb{#3}%
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarray@tmp>0 %
+ \advance\c@pgfplotsarray@tmp by-1
+ \expandafter\let\expandafter#2\expandafter=\csname\string#1@\the\c@pgfplotsarray@tmp\endcsname%
+ \pgfplotsarray@TMPb
+ \pgfutil@repeat
+ \let\pgfplotsarrayforeachindex=\relax%
+}
+
+\pgfkeys{%
+ /pgfplots/array/unscope pre/.code={%
+ % That's more or less efficient (although some runtime factors
+ % could be saved).
+ \c@pgfplotsarraysort@i=0
+ \c@pgfplotsarray@tmp=\pgfplotsarraysizeof{#1}\relax
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarraysort@i<\c@pgfplotsarray@tmp
+ \pgfplotsarrayselect{\c@pgfplotsarraysort@i}\of{#1}\to\pgfplots@loc@TMPa
+ \pgfplotsarrayletentryglobal\c@pgfplotsarraysort@i\of{pgfparraytmp}=\pgfplots@loc@TMPa
+ \advance\c@pgfplotsarraysort@i by1
+ \pgfutil@repeat
+ },%
+ /pgfplots/array/unscope post/.code={%
+ % copy from global temp -> #1
+ \c@pgfplotsarray@tmp=0
+ \pgfplotsarraysizetomacro{#1}\to\pgfplots@loc@TMPb
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarray@tmp<\pgfplots@loc@TMPb
+ \pgfplotsarrayselect{\c@pgfplotsarray@tmp}\of{pgfparraytmp}\to\pgfplots@loc@TMPa
+ \pgfplotsarrayletentry\c@pgfplotsarray@tmp\of{#1}=\pgfplots@loc@TMPa
+ \advance\c@pgfplotsarray@tmp by1
+ \pgfutil@repeat
+ },%
+}%
+
+% Sorts array '#1' using N log N time.
+%
+% The sort key is provided as argument in
+% /pgfplots/iflessthan/.code args={#1#2#3#4}, see docs in
+% pgfplotsutil.code.tex.
+%
+% Remarks:
+% - the sorting algorithm is a sub-optimal mergesort currently -
+% but it has runtime N log N.
+% - As usual, it is very difficult to move the final result out of the
+% current scope. The initial configuration allocates a *global* copy of #1
+% to carry results out of one TeX group. This means that memory will NEVER be freed.
+% I don't see a general N log N alternative for doing so (short of discarding
+% the scopes for local groups).
+% BUT:
+% you can redefine the code key pair
+% |/pgfplots/array/unscope pre|
+% and
+% |/pgfplots/array/unscope post|
+% to define your own routine which may benefit from special needs of
+% your application. The |... pre| command is invoked JUST before the
+% \endgroup and the |... post| JUST after the |\endgroup|.
+%
+%
+% EXAMPLE:
+%--------------------------------------------------
+% \pgfplotsarraynewempty\testarray
+% \pgfplotsarraypushback503\to\testarray
+% \pgfplotsarraypushback087\to\testarray
+% \pgfplotsarraypushback512\to\testarray
+% \pgfplotsarraypushback061\to\testarray
+% \pgfplotsarraypushback908\to\testarray
+% \pgfplotsarraypushback170\to\testarray
+% \pgfplotsarraypushback897\to\testarray
+% \pgfplotsarraypushback275\to\testarray
+% \pgfplotsarraypushback653\to\testarray
+% \pgfplotsarraypushback426\to\testarray
+% \pgfplotsarraypushback154\to\testarray
+% \pgfplotsarraypushback509\to\testarray
+% \pgfplotsarraypushback612\to\testarray
+% \pgfplotsarraypushback677\to\testarray
+% \pgfplotsarraypushback765\to\testarray
+% \pgfplotsarraypushback703\to\testarray
+%
+% Unsorted:
+%
+% [\pgfplotsarrayforeach\testarray\as\elem{\elem\space}]
+%
+% \pgfplotsarraysort\testarray
+%
+% sorted:
+%
+% [\pgfplotsarrayforeach\testarray\as\elem{\elem\space}]
+%
+%--------------------------------------------------
+%
+% @see \pgfplotsutilsortthree
+% @see \pgfplotsutilsortfour
+\def\pgfplotsarraysort{%
+ \pgfutil@ifnextchar[{\pgfplotsarraysort@opt}{\pgfplotsarraysort@opt[]}%
+}%
+\def\pgfplotsarraysort@opt[#1]#2{%
+ % I admit, the implementation is more-or less copy-paste of an
+ % experiment I had done at university. It does its job, but it is
+ % certainly not optimal (that means: it is slow).
+ \begingroup
+ \pgfqkeys{/pgfplots/array}{#1}%
+ \pgfkeysifdefined{/pgfplots/array/iflessthan/.@cmd}{%
+ \pgfplots@warning{Warning: /pgfplots/array/iflessthan/.@cmd is deprecated. Please use /pgfplots/iflessthan/.@cmd instead.}%
+ \pgfkeysgetvalue{/pgfplots/array/iflessthan/.@cmd}\pgfplotsarraysort@iflt
+ }{%
+ \pgfkeysgetvalue{/pgfplots/iflessthan/.@cmd}\pgfplotsarraysort@iflt
+ }%
+ \pgfplotsarraysize{#2}\to\c@pgfplotsarray@tmp
+ \pgfplotsarrayresizeglobal{pgfparraytmp}{\the\c@pgfplotsarray@tmp}%
+ \countdef\c@pgfplotsarraysort@m=0
+ \countdef\c@pgfplotsarraysort@k=1
+ \countdef\c@pgfplotsarraysort@i=2
+ \countdef\c@pgfplotsarraysort@l=3
+ \countdef\c@pgfplotsarraysort@j=4
+ \countdef\c@pgfplotsarraysort@q=5
+ \def\pgfplotsarray@mergesort@{\pgfplotsarray@mergesort{#2}}%
+ \def\pgfplotsarray@mergesort@recurse@{\pgfplotsarray@mergesort@recurse{#2}}%
+ \edef\pgfplotsarray@mergesort@@{{0}{\the\c@pgfplotsarray@tmp}}%
+ \expandafter\pgfplotsarray@mergesort@\pgfplotsarray@mergesort@@
+ %
+ % copy the complete, sorted result outside of the current scope.
+ \pgfkeysvalueof{/pgfplots/array/unscope pre/.@cmd}#2\pgfeov
+ \endgroup
+ \pgfkeysvalueof{/pgfplots/array/unscope post/.@cmd}#2\pgfeov
+}%
+
+% #1: array name,
+% #2: start offset (as string number)
+% #3: number of elems (as string number)
+\def\pgfplotsarray@mergesort#1#2#3{%
+ \ifnum#3<2
+ % ready!
+ \else
+ \c@pgfplotsarraysort@m=#3\relax
+ \divide\c@pgfplotsarraysort@m by2
+ \c@pgfplotsarraysort@q=#3\relax
+ \advance\c@pgfplotsarraysort@q by-\c@pgfplotsarraysort@m
+ \c@pgfplotsarraysort@i=\c@pgfplotsarraysort@m
+ \advance\c@pgfplotsarraysort@i by#2\relax
+ \edef\pgfplotsarray@mergesort@@{%
+ {#2}{\the\c@pgfplotsarraysort@m}% start1, N_1
+ {\the\c@pgfplotsarraysort@i}{\the\c@pgfplotsarraysort@q}% start2, N_2
+ }%
+ \expandafter\pgfplotsarray@mergesort@recurse@\pgfplotsarray@mergesort@@
+ %
+ % Merge:
+ % restore 'm':
+ \c@pgfplotsarraysort@m=#3\relax
+ \divide\c@pgfplotsarraysort@m by2
+ \c@pgfplotsarraysort@q=#3
+ \advance\c@pgfplotsarraysort@q by-\c@pgfplotsarraysort@m
+ \c@pgfplotsarraysort@k=0
+ \c@pgfplotsarraysort@l=0
+ \c@pgfplotsarraysort@i=0
+ %
+ % direct comparisons for merge:
+ \pgfutil@loop
+ \pgfplots@loop@CONTINUEtrue
+ \ifnum\c@pgfplotsarraysort@k<\c@pgfplotsarraysort@m
+ \ifnum\c@pgfplotsarraysort@l<\c@pgfplotsarraysort@q
+ \else
+ \pgfplots@loop@CONTINUEfalse
+ \fi
+ \else
+ \pgfplots@loop@CONTINUEfalse
+ \fi
+ \ifpgfplots@loop@CONTINUE
+ \c@pgfplotsarraysort@j=\c@pgfplotsarraysort@m
+ \advance\c@pgfplotsarraysort@j by\c@pgfplotsarraysort@l
+ \advance\c@pgfplotsarraysort@j by#2
+ \pgfplotsarrayselect{\c@pgfplotsarraysort@j}\of{#1}\to\pgfplotsarray@x@mpl
+ \c@pgfplotsarraysort@j=\c@pgfplotsarraysort@k
+ \advance\c@pgfplotsarraysort@j by#2
+ \pgfplotsarrayselect{\c@pgfplotsarraysort@j}\of{#1}\to\pgfplotsarray@x@k
+ \begingroup
+ \pgfplotsarraysort@iflt
+ {\pgfplotsarray@x@mpl}%
+ {\pgfplotsarray@x@k}%
+ {% x[m+l] < x[k]
+ \aftergroup\pgfplots@loc@tmptrue
+ }%
+ {% x[k] <= x[m+l]
+ \aftergroup\pgfplots@loc@tmpfalse
+ }%
+ \pgfeov
+ \endgroup
+ \ifpgfplots@loc@tmp
+ \pgfplotsarrayletentryglobal\c@pgfplotsarraysort@i\of{pgfparraytmp}=\pgfplotsarray@x@mpl
+ \advance\c@pgfplotsarraysort@i by1
+ \advance\c@pgfplotsarraysort@l by1
+ \else
+ \pgfplotsarrayletentryglobal\c@pgfplotsarraysort@i\of{pgfparraytmp}=\pgfplotsarray@x@k
+ \advance\c@pgfplotsarraysort@i by1
+ \advance\c@pgfplotsarraysort@k by1
+ \fi
+ \pgfutil@repeat
+ %
+ % append:
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarraysort@k<\c@pgfplotsarraysort@m
+ \c@pgfplotsarraysort@j=\c@pgfplotsarraysort@k
+ \advance\c@pgfplotsarraysort@j by#2
+ \pgfplotsarrayselect{\c@pgfplotsarraysort@j}\of{#1}\to\pgfplots@loc@TMPa
+ \pgfplotsarrayletentryglobal\c@pgfplotsarraysort@i\of{pgfparraytmp}=\pgfplots@loc@TMPa
+ \advance\c@pgfplotsarraysort@i by1
+ \advance\c@pgfplotsarraysort@k by1
+ \pgfutil@repeat
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarraysort@l<\c@pgfplotsarraysort@q
+ \c@pgfplotsarraysort@j=\c@pgfplotsarraysort@m
+ \advance\c@pgfplotsarraysort@j by\c@pgfplotsarraysort@l
+ \advance\c@pgfplotsarraysort@j by#2
+ \pgfplotsarrayselect{\c@pgfplotsarraysort@j}\of{#1}\to\pgfplots@loc@TMPa
+ \pgfplotsarrayletentryglobal\c@pgfplotsarraysort@i\of{pgfparraytmp}=\pgfplots@loc@TMPa
+ \advance\c@pgfplotsarraysort@i by1
+ \advance\c@pgfplotsarraysort@l by1
+ \pgfutil@repeat
+ %
+ % copy back from temporary to '#1'
+ \c@pgfplotsarraysort@i=0
+ \c@pgfplotsarraysort@k=#3
+ \pgfutil@loop
+ \ifnum\c@pgfplotsarraysort@i<\c@pgfplotsarraysort@k
+ \c@pgfplotsarraysort@j=\c@pgfplotsarraysort@i
+ \advance\c@pgfplotsarraysort@j by#2
+ \pgfplotsarrayselect{\c@pgfplotsarraysort@i}\of{pgfparraytmp}\to\pgfplots@loc@TMPa
+ \pgfplotsarrayletentry\c@pgfplotsarraysort@j\of{#1}=\pgfplots@loc@TMPa
+ \advance\c@pgfplotsarraysort@i by1
+ \pgfutil@repeat
+%\pgfplotsarraysort@DEBUGTEST{#1}{after mergesort(start=#2,n=#3):}%
+ \fi
+}%
+\long\def\pgfplotsarraysort@DEBUGTEST#1#2{%
+ \par#2\par
+ [\pgfplotsarrayforeach{#1}\as\elem{\elem\space}]\par%
+}
+% #1: array name
+% #2: start1
+% #3: N1
+% #4: start2
+% #5: N2
+\def\pgfplotsarray@mergesort@recurse#1#2#3#4#5{%
+ \pgfplotsarray@mergesort{#1}{#2}{#3}%
+ \pgfplotsarray@mergesort{#1}{#4}{#5}%
+}
+
+
+% A simple, ungrouped insert sort algorithm for small arrays.
+%
+% for i := 1; i < N; ++i do
+% begin
+% value := A[i];
+% j := i - 1;
+% done := false;
+% repeat
+% if A[j] > value then
+% begin
+% A[j + 1] := A[j];
+% j := j - 1;
+% if j < 0 then
+% done := true;
+% end
+% else
+% done := true;
+% until done;
+% A[j + 1] := value;
+% end;
+\def\pgfplotsarrayinsertionsort#1{%
+ \pgfkeysgetvalue{/pgfplots/iflessthan/.@cmd}\pgfplotsarraysort@iflt
+ \pgfplotsarraysizetomacro#1\to\pgfplotsarrayinsertionsort@N
+ \c@pgf@countd=1
+ \pgfplotsarrayinsertionsort@{#1}%
+}%
+\def\pgfplotsarrayinsertionsort@#1{%
+ \ifnum\c@pgf@countd<\pgfplotsarrayinsertionsort@N\relax
+ \pgfplotsarrayselect\c@pgf@countd\of#1\to\pgfplotsarrayinsertionsort@v
+ %
+ \c@pgf@countb=\c@pgf@countd
+ \advance\c@pgf@countb by-1
+ %
+ \pgfplotsarrayinsertionsort@@{#1}%
+ \advance\c@pgf@countb by1
+ \pgfplotsarrayletentry\c@pgf@countb\of#1=\pgfplotsarrayinsertionsort@v
+ %
+ \advance\c@pgf@countd by1
+ \expandafter\pgfplotsarrayinsertionsort@\expandafter#1%
+ \fi
+}
+\def\pgfplotsarrayinsertionsort@@#1{%
+ \pgfplotsarrayselect\c@pgf@countb\of#1\to\pgfplotsarrayinsertionsort@j
+ \pgfplotsarraysort@iflt{\pgfplotsarrayinsertionsort@v}{\pgfplotsarrayinsertionsort@j}
+ {%
+ \advance\c@pgf@countb by1
+ \pgfplotsarrayletentry\c@pgf@countb\of#1=\pgfplotsarrayinsertionsort@j
+ \advance\c@pgf@countb by-2
+ \ifnum\c@pgf@countb<0
+ \let\pgfplotsarrayinsertionsort@@next\relax%
+ \else
+ \def\pgfplotsarrayinsertionsort@@next{\pgfplotsarrayinsertionsort@@#1}%
+ \fi
+ }{%
+ \let\pgfplotsarrayinsertionsort@@next\relax%
+ }\pgfeov%
+ \pgfplotsarrayinsertionsort@@next
+}%
+
+% applies a binary seach for value '#2' on array '#1', starting with
+% index '#3' (inclusive) and ending in index '#4' (exclusive).
+%
+% Returns: \pgfplotsretval, the index of the search key, if it is
+% contained in the array; otherwise, (-(insertion point) - 1). The
+% insertion point is defined as the point at which the key would be
+% inserted into the array: the index of the first element greater than
+% the key, or a.length if all elements in the array are less than the
+% specified key. Note that this guarantees that the return value will
+% be >= 0 if and only if the key is found.
+%
+\def\pgfplotsarraybinarysearch#1#2#3#4{%
+ \begingroup
+ \edef\targetvalue{#2}%
+ \pgfkeysgetvalue{/pgfplots/iflessthan/.@cmd}\pgfplotsarray@iflt
+ \let\mid=\c@pgf@counta
+ \let\left=\c@pgf@countb
+ \let\right=\c@pgf@countc
+ \left=#3\relax
+ \right=#4\relax
+ \advance\right by-1 % make it inclusive
+ \let\pgfplotsretval\pgfutil@empty
+ %
+ \pgfutil@loop
+ \ifnum\left>\right
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ \pgfplots@loop@CONTINUEtrue
+ \fi
+ \ifpgfplots@loop@CONTINUE
+ \mid=\right
+ \advance\mid by -\left
+ \divide\mid by2 %
+ \advance\mid by\left
+ %
+ \pgfplotsarrayselect\mid\of#1\to\midvalue
+ \pgfplotsarray@iflt{\targetvalue}{\midvalue}{%
+ \right=\mid
+ \advance\right by-1 %
+ }{%
+ \pgfplotsarray@iflt{\midvalue}{\targetvalue}{%
+ \left=\mid
+ \advance\left by1 %
+ }{%
+ % found it! abort loop!
+ \left=\right
+ \advance\left by1 %
+ \edef\pgfplotsretval{\the\mid}%
+ }%
+ \pgfeov%
+ }%
+ \pgfeov%
+ \pgfutil@repeat
+ %
+ \ifx\pgfplotsretval\pgfutil@empty
+ \advance\left by1 %
+ \left=-\left
+ \edef\pgfplotsretval{\the\left}%
+ \fi
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.code.tex
new file mode 100644
index 0000000000..42c4cb1aae
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.code.tex
@@ -0,0 +1,603 @@
+%--------------------------------------------
+% $Header: /cvsroot/pgfplots/pgfplots/generic/pgfplots/util/pgfplotsbinary.code.tex,v 1.13 2009/07/21 18:18:48 ludewich Exp $
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% This file provides a self-contained package which does only need
+% pgfkeys.
+%
+% It provides a method to convert TeX numbers (integers and
+% dimensions) into binary format (macros with catcode 11 or 12).
+%
+
+\edef\pgfplotsbinaryatcode{\the\catcode`\@ }
+\catcode`\@=11
+
+
+% Returns a single character, which has the
+% binary ASCII code '#1', with catcode 11.
+%
+% #1 (expands to) a number between 0 and 255 (inclusive).
+%
+% @see \pgfplotsgetchar Note that \pgfplotsgetchar is more powerful,
+% but can't be used inside of \edef (it is not expandable) whereas
+% \pgfplotscharno is.
+\def\pgfplotscharno#1{\csname pgfp@bin@#1\endcsname}%
+\let\pgfplotscharno@bincatcode=\pgfplotscharno
+
+\def\pgfplotscharno@lualatex#1{#1,}
+
+\input pgfplotsbinary.data.code.tex
+
+% Defines the LUA (!) value pgfplotsretval to be a binary string
+% containing the pgfplots binary value #1.
+%
+% #1 a pgfplots binary value collected with \pgfplotscharno.
+% More precisely, it should be a comma-separated sequence of numbers
+% of the form '0,255,2,128,' (can be terminated by comma). It will be
+% converted to the respective binary numbers 0x0, 0xff, 0x02,..
+%
+% example:
+% \pgfplotsbinarytoluabinary{0, 255,2,128}
+% \directlua{
+% pdf.immediateobj{"stream", pgfplotsretval,"/DataWithBinaryStream"}
+% }
+\def\pgfplotsbinarytoluabinary#1{%
+ % lualatex does not support binary chars as pdftex does - so we have to resort to LUA
+ % methods. The idea is to use
+ % string.char(1,2,3) which results in a binary string with chars 0x01, 0x02, 0x03 etc.
+ % I only need to get the integer numbers. To this end, I patch \pgfplotscharno
+ % and create the binary string here:
+ \pgfplotsutil@directlua{%
+ pgfplotsretval = pgfplotsGetLuaBinaryStringFromCharIndices({#1});
+ }%
+}%
+
+% Defines \pgfplotsretval to be the ASCII character for #1, with
+% catcode 11.
+%
+% #1: either a number between 0 and 255 (inclusive) or a description
+% of the character.
+%
+% Examples:
+% \pgfplotsgetchar{35}
+% \pgfplotsgetchar{`\#} % code for '#'
+% \pgfplotsgetchar{`\^^M} % Newline
+% \pgfplotsgetchar{`\^^ff}% 255
+%
+% @see \pgfplotscharno
+\def\pgfplotsgetchar#1{%
+ \begingroup
+ \count0=#1\relax
+ \edef\pgfplotsretval{\pgfplotscharno{\the\count0 }}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+\def\pgfplotsbinary@apphighorderbytes@BIGENDIAN#1{\xdef\pgfplotsbinaryresult{#1\pgfplotsbinaryresult}}%
+\def\pgfplotsbinary@apphighorderbytes@LITTLEENDIAN#1{\xdef\pgfplotsbinaryresult{\pgfplotsbinaryresult#1}}%
+
+\def\pgfplotsbinaryencode@badic@unsigned@PAD@LITTLEENDIAN{%
+ % pad with zeros:
+ \ifcase\c@pgfplotsbin@byteno
+ % ok.
+ \or
+ % one byte missing.
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ % two bytes missing.
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO@HIGHEST}%
+ \else
+ \pgfplots@error{Sorry, I can't process byte no \the\c@pgfplotsbin@byteno... you may need to change bytes=\pgfplotsbinary@bytes.}%
+ \fi
+}%
+\def\pgfplotsbinaryencode@badic@unsigned@PAD@BIGENDIAN{%
+ % pad with zeros:
+ \ifcase\c@pgfplotsbin@byteno
+ % ok.
+ \or
+ % one byte missing.
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST}%
+ \or
+ % two bytes missing.
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST\pgfplotsbinary@ZERO}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO}%
+ \or
+ \pgfplotsbinary@apphighorderbytes{\pgfplotsbinary@ZERO@HIGHEST\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO}%
+ \else
+ \pgfplots@error{Sorry, I can't process byte no \the\c@pgfplotsbin@byteno... you may need to change bytes=\pgfplotsbinary@bytes.}%
+ \fi
+}%
+
+\expandafter\def\csname pgfplotsbinarysetbytes@1\endcsname{%
+ \def\pgfplotsbinary@add@signed@largest@absolute{\advance\c@pgfplotsbin@input by 127 }%
+ \def\pgfplotsbinaryencodesignedmaplinearly@prepare{%
+ % warning: \pgfplotsbinary@bytes is NOT necessarily 1 (ASCII
+ % encoding features)
+ \c@pgfplotsbin@byteno=\pgfplotsbinary@bytes\relax
+ \c@pgfplotsbin@basis=\pgfplotsbinary@basis\relax
+ \divide\c@pgfplotsbin@input by16909320 % ~= (2^31-1) / (2^(8*1-1) -1)
+ }%
+}%
+\expandafter\def\csname pgfplotsbinarysetbytes@2\endcsname{%
+ \def\pgfplotsbinary@add@signed@largest@absolute{\advance\c@pgfplotsbin@input by 32767 }%
+ \def\pgfplotsbinaryencodesignedmaplinearly@prepare{%
+ \c@pgfplotsbin@byteno=\pgfplotsbinary@bytes\relax
+ \c@pgfplotsbin@basis=\pgfplotsbinary@basis\relax
+ \divide\c@pgfplotsbin@input by65538 % ~= (2^31-1) / (2^(8*2-1) -1)
+ }%
+}%
+\expandafter\def\csname pgfplotsbinarysetbytes@3\endcsname{%
+ \def\pgfplotsbinary@add@signed@largest@absolute{\advance\c@pgfplotsbin@input by 8388607 }%
+ \def\pgfplotsbinaryencodesignedmaplinearly@prepare{%
+ \c@pgfplotsbin@byteno=\pgfplotsbinary@bytes\relax
+ \c@pgfplotsbin@basis=\pgfplotsbinary@basis\relax
+ \divide\c@pgfplotsbin@input by256 % ~= (2^31-1) / (2^(8*3-1) -1)
+ }%
+}%
+\expandafter\def\csname pgfplotsbinarysetbytes@4\endcsname{%
+ \def\pgfplotsbinary@add@signed@largest@absolute{%
+ \advance\c@pgfplotsbin@input by 2147483647 % this is the *absolute* largest int that TeX can handle.
+ }%
+ \def\pgfplotsbinaryencodesignedmaplinearly@prepare{%
+ \c@pgfplotsbin@byteno=\pgfplotsbinary@bytes\relax
+ \c@pgfplotsbin@basis=\pgfplotsbinary@basis\relax
+ }%
+}%
+\def\pgfplotsbinarysetbytes@@{%
+ \def\pgfplotsbinaryencodesignedmaplinearly@prepare{%
+ \c@pgfplotsbin@byteno=\pgfplotsbinary@bytes\relax
+ \c@pgfplotsbin@basis=\pgfplotsbinary@basis\relax
+ \pgfplots@error{Sorry, but I can't perform \string\pgfplotsbinaryencodesignedmaplinearly\space for bytes=\pgfplotsbinary@bytes\space yet... bytes=4 is the maximum.}%
+ }%
+ \def\pgfplotsbinary@add@signed@largest@absolute{
+ \advance\c@pgfplotsbin@input by 2147483647
+ }%
+}%
+\expandafter\let\csname pgfplotsbinary@bytes@5\endcsname=\pgfplotsbinarysetbytes@@
+\expandafter\let\csname pgfplotsbinary@bytes@6\endcsname=\pgfplotsbinarysetbytes@@
+\expandafter\let\csname pgfplotsbinary@bytes@7\endcsname=\pgfplotsbinarysetbytes@@
+\expandafter\let\csname pgfplotsbinary@bytes@8\endcsname=\pgfplotsbinarysetbytes@@
+
+\pgfqkeys{/pgfplots/bin}{%
+ % ordering not yet implemented; uses always BIG ENDIAN.
+ ordering/.is choice,%
+ ordering/big endian/.code={%
+ \def\pgfplotsbinary@byteorder{0}%
+ \let\pgfplotsbinary@apphighorderbytes=\pgfplotsbinary@apphighorderbytes@BIGENDIAN
+ \let\pgfplotsbinaryencode@badic@unsigned@PAD=\pgfplotsbinaryencode@badic@unsigned@PAD@BIGENDIAN
+ },%
+ ordering/net/.style={/pgfplots/bin/ordering/big endian},%
+ ordering/little endian/.code={%
+ \def\pgfplotsbinary@byteorder{1}%
+ \let\pgfplotsbinary@apphighorderbytes=\pgfplotsbinary@apphighorderbytes@LITTLEENDIAN
+ \let\pgfplotsbinaryencode@badic@unsigned@PAD=\pgfplotsbinaryencode@badic@unsigned@PAD@LITTLEENDIAN
+ },
+ ordering/big endian,%
+ %
+ % The standard method - it results in binary encoded numbers.
+ binary encoding/.code={%
+ \pgfutil@IfUndefined{directlua}{%
+ \let\pgfplotscharno=\pgfplotscharno@bincatcode
+ }{%
+ % Ah - we use LuaTeX!
+ % At the time of this writing, LUA does not allow binary output which has been
+ % created by means of catcode modifications & TeX string concatenation.
+ % binary output in LUA needs to be (re)implemented in LUA (see inline code
+ % comments below).
+ %
+ % There are two possible work-arounds:
+ % (a) Base64 encoding
+ % (b) binary encoding using special LUA handling.
+ % This is what I do. Set the 'encode filter' such that it reinitializes the encoder:
+ % we patch \pgfplotscharno with a special routine which collects
+ % only the integer indices:
+ \let\pgfplotscharno=\pgfplotscharno@lualatex
+ % later, the user has to convert this list into a binary lua
+ % string before he can use it. See \pgfplotsbinarytoluabinary
+ }%
+ \edef\pgfplotsbinary@ZERO{\pgfplotscharno0}%
+ \edef\pgfplotsbinary@ZERO@LINEARMAP{\pgfplotscharno{128}}%
+ \let\pgfplotsbinary@ZERO@HIGHEST=\pgfplotsbinary@ZERO
+ \def\pgfplotsbinary@basis{256}%
+ \let\pgfplotsbinary@hook=\relax
+ \def\pgfplotsbinary@hook@signed@linearmap{%
+ \ifnum\c@pgfplotsbin@byteno=0
+ \advance\c@pgfplotsbin@input by128
+ \ifnum\c@pgfplotsbin@input>255
+ \pgfplotsbinary@hook@signed@linearmap@error
+ \fi
+ \fi
+ }%
+ \def\pgfplotsbinarysetbytes##1{%
+ \pgfutil@ifundefined{pgfplotsbinarysetbytes@##1}{%
+ \pgfplots@error{Sorry, I can't write binary output with '##1' bytes yet...}%
+ }{%
+ \edef\pgfplotsbinary@bytes{##1}%
+ \csname pgfplotsbinarysetbytes@##1\endcsname
+ }%
+ }%
+ },%
+ %
+ % This applies 'binary encoding' and encodes the resulting bytes
+ % in Hex. It corresponds to the ASCIIHexEncode in postscript or
+ % pdf.
+ % Please note that 'bytes' sets the number of binary bytes - the
+ % actual encoding length is exactly twice as large.
+ ASCIIHexEncode/.code={%
+ \let\pgfplotscharno=\pgfplotscharno@bincatcode
+ \edef\pgfplotsbinary@ZERO{\pgfplotscharno{48}}%
+ \edef\pgfplotsbinary@ZERO@LINEARMAP{\pgfplotscharno{56}}%
+ \let\pgfplotsbinary@ZERO@HIGHEST=\pgfplotsbinary@ZERO
+ \pgfkeysalso{/pgfplots/bin/ordering/big endian}%
+ \def\pgfplotsbinary@basis{16}%
+ \def\pgfplotsbinary@hook@hex{%
+ \ifnum\c@pgfplotsbin@input<10
+ \advance\c@pgfplotsbin@input by48
+ \else
+ \advance\c@pgfplotsbin@input by55
+ \fi
+ }%
+ \let\pgfplotsbinary@hook=\pgfplotsbinary@hook@hex
+ \def\pgfplotsbinary@hook@signed@linearmap{%
+ \ifnum\c@pgfplotsbin@byteno=0
+ \advance\c@pgfplotsbin@input by8
+ \ifnum\c@pgfplotsbin@input>16
+ \pgfplotsbinary@hook@signed@linearmap@error
+ \fi
+ \fi
+ \pgfplotsbinary@hook@hex
+ }%
+ \def\pgfplotsbinarysetbytes##1{%
+ \pgfutil@ifundefined{pgfplotsbinarysetbytes@##1}{%
+ \pgfplots@error{Sorry, I can't write binary output with '##1' bytes yet...}%
+ }{%
+ \csname pgfplotsbinarysetbytes@##1\endcsname
+ \begingroup
+ \count0=##1\relax
+ \multiply\count0 by2
+ \xdef\pgfplotsbinary@glob@TMP{\the\count0 }%
+ \endgroup
+ \let\pgfplotsbinary@bytes=\pgfplotsbinary@glob@TMP
+ }%
+ }%
+ },%
+ %
+ %
+ % This applies 'binary encoding' and encodes the resulting bytes
+ % using a base 85 encoding. It corresponds to the ASCII85Encode in postscript or
+ % pdf.
+ % Handle this method with care - it works just for ONE number, not for a stream of
+ % numbers as in pdf. Therefore, it might not be useful at all.
+ % Please note that 'bytes' will be ignored; ASCII85Encode assumes
+ % 4 binary bytes and uses 5 bytes to encode them.
+ %
+ % @ATTENTION bytes is ALWAYS 4, regardless of the setting of
+ % 'bytes'!
+ ASCII85Encode/.code={%
+ \let\pgfplotscharno=\pgfplotscharno@bincatcode
+ \edef\pgfplotsbinary@ZERO{\pgfplotscharno{33}}%
+ \edef\pgfplotsbinary@ZERO@LINEARMAP{\pgfplotscharno{42}}%
+ \let\pgfplotsbinary@ZERO@HIGHEST=\pgfplotsbinary@ZERO
+ \pgfkeysalso{/pgfplots/bin/ordering/big endian}%
+ \edef\pgfplotsbinary@ASCII@specialzero{\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO\pgfplotsbinary@ZERO}%
+ \expandafter\def\expandafter\pgfplotsbinaryencode@badic@unsigned@PAD\expandafter{%
+ \pgfplotsbinaryencode@badic@unsigned@PAD
+ \ifx\pgfplotsbinaryresult\pgfplotsbinary@ASCII@specialzero
+ % PDF standard: 0 is encoded as 'z':
+ \gdef\pgfplotsbinaryresult{z}%
+ \fi
+ }%
+ \def\pgfplotsbinary@basis{85}%
+ \def\pgfplotsbinary@hook{%
+ \advance\c@pgfplotsbin@input by33
+ }%
+ \def\pgfplotsbinary@hook@signed@linearmap{%
+ \advance\c@pgfplotsbin@input by33
+ \ifnum\c@pgfplotsbin@byteno=0
+ \advance\c@pgfplotsbin@input by42
+ \ifnum\c@pgfplotsbin@input>85
+ \pgfplotsbinary@hook@signed@linearmap@error
+ \fi
+ \fi
+ }%
+ % I know, that does only work efficiently if bytes=4 for every
+ % encoded number.
+ \def\pgfplotsbinarysetbytes##1{%
+ \def\pgfplotsbinary@bytes{5}%
+ \csname pgfplotsbinarysetbytes@4\endcsname
+ }%
+ \pgfplotsbinarysetbytes4%
+ },%
+ binary encoding,%
+ %
+ bytes/.code={\pgfplotsbinarysetbytes{#1}},%
+ bytes=4,
+ %
+ % Irreversibly change to VERBATIM output for debugging:
+ debug mode/.code={%
+ \let\pgfplotsbinary@apphighorderbytes@ORIG=\pgfplotsbinary@apphighorderbytes
+ \def\pgfplotsbinary@ZERO{[Pad-0]}%
+ \let\pgfplotsbinary@ZERO@HIGHEST=\pgfplotsbinary@ZERO
+ \def\pgfplotsbinary@ZERO@LINEARMAP{[Pad-128]}%
+ \def\pgfplotsbinary@apphighorderbytes##1{%
+ \pgfutil@ifnextchar\pgfplotscharno{%
+ \pgfplotsbinary@apphighorderbytes@DEBUG@csname
+ }{%
+ \pgfplotsbinary@apphighorderbytes@DEBUG@normal
+ }%
+ ##1\relax
+ }%
+ },%
+ % Write pdf objects in binary form. This does only work with
+ % pdftex, and its output is only useful in conjunction with
+ % \pdfcompresslevel=0
+ % and a text editor.
+ % Usage:
+ % \pgfkeys{/pgfplots/bin/debug to pdf={\pgfplotsbinaryencodeunsigned}{1,2,3,...,16}}
+ %
+ % works only with pdftex
+ debug to pdf/.code 2 args={%
+ \foreach \num in {#2} {%
+ #1{\num}%
+ \immediate \pdfobj stream attr {
+ /Decimal \num\space
+ /Routine (\string#1)
+ } {%
+ \pgfplotsbinaryresult
+ }%
+ }%
+ },%
+}
+
+
+\def\pgfplotsbinary@hook@signed@linearmap@error{%
+ \pgfplots@error{Sorry, there are not enough bytes to store the current number. I tried to write \the\c@pgfplotsbin@input...}%
+}%
+
+\def\pgfplotsbinary@apphighorderbytes@DEBUG@csname\pgfplotscharno#1\relax{%
+ \pgfplotsbinary@apphighorderbytes@ORIG{[#1]}%
+}%
+\def\pgfplotsbinary@apphighorderbytes@DEBUG@normal#1\relax{%
+ \pgfplotsbinary@apphighorderbytes@ORIG{#1}%
+}%
+
+%\pgfkeys{/pgfplots/bin/debug mode}
+
+
+\countdef\c@pgfplotsbin@input=0
+\countdef\c@pgfplotsbin@tmpa=1
+\countdef\c@pgfplotsbin@tmpb=2
+\countdef\c@pgfplotsbin@byteno=3
+\countdef\c@pgfplotsbin@basis=4
+\def\pgfplotsbinaryempty{}
+
+%--------------------------------------------------
+% input: unsigned int x, b, n;
+% output: unsigned int y[n];
+% for (i=0; i<n; i++) y[i] = 0;
+% i=0;
+% while (x > 0)
+% { y[i] = x % b; /* entspricht x mod b */
+% x = x / b; /* ganzzahlige Division */
+% i++;
+% }
+%--------------------------------------------------
+% with x = #1
+% b = basis
+% will store stuff into \pgfplotsbinaryresult in binary format
+%
+% PRECONDITION:
+% - \pgfplotsbinaryresult= empty!
+% - \c@pgfplotsbin@byteno=\pgfplotsbinary@bytes
+\def\pgfplotsbinaryencode@badic@unsigned@{%
+ \ifnum\c@pgfplotsbin@input>0
+ \c@pgfplotsbin@tmpa=\c@pgfplotsbin@input
+ \divide\c@pgfplotsbin@tmpa by\c@pgfplotsbin@basis\relax
+ \c@pgfplotsbin@tmpb=\c@pgfplotsbin@tmpa\relax
+ \multiply\c@pgfplotsbin@tmpa by\c@pgfplotsbin@basis\relax
+ \advance\c@pgfplotsbin@input by -\c@pgfplotsbin@tmpa\relax
+ \advance\c@pgfplotsbin@byteno by-1
+ \pgfplotsbinary@hook% hooks for modifications.
+ \pgfplotsbinary@apphighorderbytes{\pgfplotscharno{\the\c@pgfplotsbin@input}}%
+ \c@pgfplotsbin@input=\c@pgfplotsbin@tmpb
+%\message{RESULT SO FAR byte no \the\c@pgfplotsbin@byteno: \pgfplotsbinaryresult}%
+ \expandafter\pgfplotsbinaryencode@badic@unsigned@
+ \else
+ \pgfplotsbinaryencode@badic@unsigned@PAD
+%\message{RESULT SO FAR byte no \the\c@pgfplotsbin@byteno: \pgfplotsbinaryresult}%
+ \fi
+}%
+
+
+% Defines \pgfplotsbinaryresult to be the binary representation of an
+% unsigned integer.
+%
+% The representation will use unsigned dual number representation.
+%
+% The assignment to \pgfplotsbinaryresult will be globally.
+% #1: an unsigned integer. It won't be transformed in any way, so make
+% sure it fits into the configured number of bytes. It is an error if
+% the number is too large or too small. Please note that only unsigned
+% numbers are supported with this method.
+%
+% FIXME : fix > 2^30
+\def\pgfplotsbinaryencodeunsigned#1{%
+ \begingroup
+ \global\let\pgfplotsbinaryresult=\pgfplotsbinaryempty
+ \c@pgfplotsbin@input=#1 %
+ \c@pgfplotsbin@byteno=\pgfplotsbinary@bytes\relax
+ \c@pgfplotsbin@basis=\pgfplotsbinary@basis\relax
+ \pgfplotsbinaryencode@badic@unsigned@%
+ \endgroup
+}%
+
+% An implementation for signed integers which maps the signed integer linearly into
+% the unsigned data range before it proceeds.
+%
+% The idea is thus, to first introduce a linear mapping
+%
+% phi : [- smallest_possible, +largest_possible ] -> [0, 256^bytes-1 ]
+%
+% A signed integer in TeX is in [ - (2^31-1), 2^31-1 ].
+% Thus, we should map
+%
+% phi : [ -(2^31-1), 2^31-1 ] -> [ 0, 2^32-1 ].
+%
+% A simpler case is to employ the symmetry in TeX's registers and
+% leave one out, i.e. to map to 2^32-2:
+%
+% phi : [ -(2^31-1), 2^31-1 ] -> [ 0, 2^32-2 ].
+%
+% Then,
+%
+% phi(x) = ( x + 2^31 -1 ) / (2^31-1 + 2^31-1) * (2^32-2) = x+ 2^31-1.
+%
+% The same map phi(x) = x + 2^31 -1 with target space [0, 2^32-1 ]
+% could be realized with the input space [- (2^31-1), 2^31 ].
+%
+% I am using this encoding procedure, phi(x) = x + 2^31 -1.
+%
+% As a consequence, the binary pattern FF FF FF FF does never occur as
+% result of the mapping.
+%
+% To invert the mapping (i.e. to decode the result), set up the unique
+% linear map
+%
+% psi : [ 0, 2^32-1 ] -> [ -(2^31-1), 2^31 ].
+%
+% Then, psi( phi(x) ) = x and the decoding procedure is correct.
+%
+% This doesn't need TeX register arithmetics on the whole range.
+%
+% REMARK: the whole operation does also work if bytes<4 (i.e. we have
+% less than 32 bits in the target range). In this case, the mapping is
+% phi : [ -(2^31-1), 2^31-1 ] -> [ 0, 2^{8*bytes}-1 ]
+% and a further, *lossy* quantization still will be applied. The
+% quantization step is an integer division performed in signed number
+% arithmetics (i.e. it is symmetric around 0).
+\def\pgfplotsbinaryencodesignedmaplinearly#1{%
+ \begingroup
+ \global\let\pgfplotsbinaryresult=\pgfplotsbinaryempty
+ \c@pgfplotsbin@input=#1\relax%
+ \pgfplotsbinaryencodesignedmaplinearly@prepare
+ \ifnum\c@pgfplotsbin@input<0 %
+ % compute + 2^31 - 1
+ \pgfplotsbinary@add@signed@largest@absolute
+ \else
+ % change zero padding such that positive numbers
+ % get the EFFECT of + 2^31.
+ \let\pgfplotsbinary@ZERO@HIGHEST=\pgfplotsbinary@ZERO@LINEARMAP
+ \let\pgfplotsbinary@hook=\pgfplotsbinary@hook@signed@linearmap
+ % and compute the -1 explicitly here:
+ \advance\c@pgfplotsbin@input by-1 %
+ \fi
+ \pgfplotsbinaryencode@badic@unsigned@%
+ \endgroup
+}%
+
+% Encodes a dimen (like 1pt or \dimen0) in binary form.
+%
+% The encoding works by mapping #1 linearly into the allowed integer
+% range using a quantization technique to respect the (possibly)
+% restricted number of bytes.
+%
+% The implementation is fast and uses only integer arithmetics.
+% It relies on \pgfplotsbinaryencodesignedmaplinearly and a scale.
+%
+% So, what we do is to setup a linear map into binary range with k
+% bytes. The range of a TeX dimen is precisely (in units of pt)
+% [ -(2^30-1) / 2^16, (2^30 -1) / 2^16 ] = [-16383.99998, 16383.99998]
+%
+% Thus, for an input dimen x, we set up the mapping
+% phi(x) = 2^16 * x * 2
+% which maps
+% phi: [ -(2^30-1) / 2^16, (2^30-1) / 2^16 ] -> [-(2^31 -2), 2^31-2].
+%
+% I simply use the \pgfplotsbinaryencodesignedmaplinearly to process
+% this further. To simplify the computation, I simply compute
+% phi_signed( phi(x) ),
+% where phi_signed denotes an application of
+% \pgfplotsbinaryencodesignedmaplinearly:
+% phi_signed( y ) = y +2^31 -1,
+% phi_signed( phi(x) ) = 2^16 * 2 * x + 2^31 - 1.
+% This is NOT a linear map to [0,2^32-1] as promised.
+% But, we can setup an inverse transformation PHI (which is linear) anyway
+% such that
+% PHI( phi_signed(phi(x)) ) = x
+% and that's all I want. Do do that, we use the unique linear decoder map
+% PHI : [ 0,2^32-1 ] -> [ -16383.999992, 16384 ].
+%
+% This is not exacty the input range of before, but using it results
+% in a proper decoder. The difference is due to the non-unique zero
+% representation in TeX's arithmetics.
+%
+%
+% REMARK: the whole operation does also work if bytes<4 (i.e. we have
+% less than 32 bits in the target range). In this case, a further
+% *lossy* quantization step is applied in phi_signed. The inverse
+% transformations are the same, however. See
+% \pgfplotsbinaryencodesignedmaplinearly for details about the
+% quantization step (or try it out).
+%
+ %
+ %% DEBUG NOTE: This mapping appears to work correctly according to
+ %% my tests.
+ %% For bc -l test codes:
+ %% ibase=16;
+ %% -4000 + 809658FA. / (2^20) * 8000
+\def\pgfplotsbinaryencodedimenmaplinearly#1{%
+ \begingroup
+ \dimen0=#1\relax
+ \c@pgfplotsbin@input=\dimen0
+ \multiply\c@pgfplotsbin@input by2
+%\message{LOWLEVEL ENCODING '\the\c@pgfplotsbin@input' with linear map}%
+ \pgfplotsbinaryencodesignedmaplinearly\c@pgfplotsbin@input
+ \endgroup
+}%
+
+\catcode`\@=\pgfplotsbinaryatcode
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.data.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.data.code.tex
new file mode 100644
index 0000000000..6483daf68f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsbinary.data.code.tex
@@ -0,0 +1,291 @@
+\begingroup
+% prepare ONE-BYTE conversion [0-255] -> binary character:
+\count0=0
+\countdef\counter=0
+\catcode`\^^00=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^00}\advance\counter by1
+\catcode`\^^01=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^01}\advance\counter by1
+\catcode`\^^02=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^02}\advance\counter by1
+\catcode`\^^03=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^03}\advance\counter by1
+\catcode`\^^04=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^04}\advance\counter by1
+\catcode`\^^05=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^05}\advance\counter by1
+\catcode`\^^06=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^06}\advance\counter by1
+\catcode`\^^07=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^07}\advance\counter by1
+\catcode`\^^08=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^08}\advance\counter by1
+\begingroup
+\catcode`\^^09=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^09}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^0a=11\expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^0a}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^0b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^0b}\endgroup\advance\counter by1
+\catcode`\^^0c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^0c}\advance\counter by1
+\begingroup
+\catcode`\^^0d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^0d}\endgroup\advance\counter by1
+\catcode`\^^0e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^0e}\advance\counter by1
+\catcode`\^^0f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^0f}\advance\counter by1
+\catcode`\^^10=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^10}\advance\counter by1
+\catcode`\^^11=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^11}\advance\counter by1
+\catcode`\^^12=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^12}\advance\counter by1
+\catcode`\^^13=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^13}\advance\counter by1
+\catcode`\^^14=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^14}\advance\counter by1
+\catcode`\^^15=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^15}\advance\counter by1
+\catcode`\^^16=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^16}\advance\counter by1
+\catcode`\^^17=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^17}\advance\counter by1
+\catcode`\^^18=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^18}\advance\counter by1
+\catcode`\^^19=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^19}\advance\counter by1
+\catcode`\^^1a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^1a}\advance\counter by1
+\catcode`\^^1b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^1b}\advance\counter by1
+\catcode`\^^1c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^1c}\advance\counter by1
+\catcode`\^^1d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^1d}\advance\counter by1
+\catcode`\^^1e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^1e}\advance\counter by1
+\catcode`\^^1f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^1f}\advance\counter by1
+\begingroup
+\catcode`\^^20=11^^I\expandafter\xdef\csname^^Ipgfp@bin@\the\counter^^I\endcsname{^^20}\endgroup\advance\counter by1
+\catcode`\^^21=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^21}\advance\counter by1
+\catcode`\^^22=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^22}\advance\counter by1
+\catcode`\^^23=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^23}\advance\counter by1
+\catcode`\^^24=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^24}\advance\counter by1
+\catcode`\^^25=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^25}\advance\counter by1
+\catcode`\^^26=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^26}\advance\counter by1
+\catcode`\^^27=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^27}\advance\counter by1
+\catcode`\^^28=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^28}\advance\counter by1
+\catcode`\^^29=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^29}\advance\counter by1
+\catcode`\^^2a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^2a}\advance\counter by1
+\catcode`\^^2b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^2b}\advance\counter by1
+\catcode`\^^2c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^2c}\advance\counter by1
+\catcode`\^^2d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^2d}\advance\counter by1
+\catcode`\^^2e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^2e}\advance\counter by1
+\catcode`\^^2f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^2f}\advance\counter by1
+\begingroup
+\catcode`\^^30=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^30}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^31=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^31}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^32=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^32}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^33=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^33}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^34=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^34}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^35=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^35}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^36=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^36}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^37=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^37}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^38=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^38}\endgroup\advance\counter by1
+\begingroup
+\catcode`\^^39=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^39}\endgroup\advance\counter by1
+\catcode`\^^3a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^3a}\advance\counter by1
+\catcode`\^^3b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^3b}\advance\counter by1
+\catcode`\^^3c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^3c}\advance\counter by1
+\begingroup
+\catcode`\^^3d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^3d}\endgroup\advance\counter by1
+\catcode`\^^3e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^3e}\advance\counter by1
+\catcode`\^^3f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^3f}\advance\counter by1
+\catcode`\^^40=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^40}\advance\counter by1
+\catcode`\^^41=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^41}\advance\counter by1
+\catcode`\^^42=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^42}\advance\counter by1
+\catcode`\^^43=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^43}\advance\counter by1
+\catcode`\^^44=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^44}\advance\counter by1
+\catcode`\^^45=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^45}\advance\counter by1
+\catcode`\^^46=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^46}\advance\counter by1
+\catcode`\^^47=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^47}\advance\counter by1
+\catcode`\^^48=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^48}\advance\counter by1
+\catcode`\^^49=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^49}\advance\counter by1
+\catcode`\^^4a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^4a}\advance\counter by1
+\catcode`\^^4b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^4b}\advance\counter by1
+\catcode`\^^4c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^4c}\advance\counter by1
+\catcode`\^^4d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^4d}\advance\counter by1
+\catcode`\^^4e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^4e}\advance\counter by1
+\catcode`\^^4f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^4f}\advance\counter by1
+\catcode`\^^50=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^50}\advance\counter by1
+\catcode`\^^51=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^51}\advance\counter by1
+\catcode`\^^52=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^52}\advance\counter by1
+\catcode`\^^53=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^53}\advance\counter by1
+\catcode`\^^54=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^54}\advance\counter by1
+\catcode`\^^55=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^55}\advance\counter by1
+\catcode`\^^56=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^56}\advance\counter by1
+\catcode`\^^57=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^57}\advance\counter by1
+\catcode`\^^58=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^58}\advance\counter by1
+\catcode`\^^59=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^59}\advance\counter by1
+\catcode`\^^5a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^5a}\advance\counter by1
+\catcode`\^^5b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^5b}\advance\counter by1
+\begingroup
+\catcode`\|=0
+\catcode`\\=11 |expandafter|xdef|csname pgfp@bin@|the|counter|endcsname{^^5c}|endgroup \advance\counter by1
+\catcode`\^^5d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^5d}\advance\counter by1
+\begingroup
+\catcode`\^^5e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^}\endgroup\advance\counter by1
+\catcode`\^^5f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^5f}\advance\counter by1
+\begingroup
+\catcode`\^^60=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^60}\endgroup\advance\counter by1
+\catcode`\^^61=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^61}\advance\counter by1
+\catcode`\^^62=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^62}\advance\counter by1
+\catcode`\^^63=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^63}\advance\counter by1
+\catcode`\^^64=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^64}\advance\counter by1
+\catcode`\^^65=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^65}\advance\counter by1
+\catcode`\^^66=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^66}\advance\counter by1
+\catcode`\^^67=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^67}\advance\counter by1
+\catcode`\^^68=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^68}\advance\counter by1
+\catcode`\^^69=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^69}\advance\counter by1
+\catcode`\^^6a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^6a}\advance\counter by1
+\catcode`\^^6b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^6b}\advance\counter by1
+\catcode`\^^6c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^6c}\advance\counter by1
+\catcode`\^^6d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^6d}\advance\counter by1
+\catcode`\^^6e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^6e}\advance\counter by1
+\catcode`\^^6f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^6f}\advance\counter by1
+\catcode`\^^70=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^70}\advance\counter by1
+\catcode`\^^71=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^71}\advance\counter by1
+\catcode`\^^72=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^72}\advance\counter by1
+\catcode`\^^73=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^73}\advance\counter by1
+\catcode`\^^74=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^74}\advance\counter by1
+\catcode`\^^75=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^75}\advance\counter by1
+\catcode`\^^76=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^76}\advance\counter by1
+\catcode`\^^77=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^77}\advance\counter by1
+\catcode`\^^78=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^78}\advance\counter by1
+\catcode`\^^79=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^79}\advance\counter by1
+\catcode`\^^7a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^7a}\advance\counter by1
+\begingroup
+\catcode`\q=1
+\catcode`\^^7b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname q^^7b}\endgroup\advance\counter by1
+\catcode`\^^7c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^7c}\advance\counter by1
+\begingroup
+\catcode`\q=2
+\catcode`\^^7d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^7dq\endgroup\advance\counter by1
+\catcode`\^^7e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^7e}\advance\counter by1
+\catcode`\^^7f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^7f}\advance\counter by1
+\catcode`\^^80=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^80}\advance\counter by1
+\catcode`\^^81=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^81}\advance\counter by1
+\catcode`\^^82=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^82}\advance\counter by1
+\catcode`\^^83=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^83}\advance\counter by1
+\catcode`\^^84=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^84}\advance\counter by1
+\catcode`\^^85=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^85}\advance\counter by1
+\catcode`\^^86=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^86}\advance\counter by1
+\catcode`\^^87=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^87}\advance\counter by1
+\catcode`\^^88=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^88}\advance\counter by1
+\catcode`\^^89=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^89}\advance\counter by1
+\catcode`\^^8a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^8a}\advance\counter by1
+\catcode`\^^8b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^8b}\advance\counter by1
+\catcode`\^^8c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^8c}\advance\counter by1
+\catcode`\^^8d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^8d}\advance\counter by1
+\catcode`\^^8e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^8e}\advance\counter by1
+\catcode`\^^8f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^8f}\advance\counter by1
+\catcode`\^^90=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^90}\advance\counter by1
+\catcode`\^^91=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^91}\advance\counter by1
+\catcode`\^^92=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^92}\advance\counter by1
+\catcode`\^^93=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^93}\advance\counter by1
+\catcode`\^^94=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^94}\advance\counter by1
+\catcode`\^^95=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^95}\advance\counter by1
+\catcode`\^^96=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^96}\advance\counter by1
+\catcode`\^^97=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^97}\advance\counter by1
+\catcode`\^^98=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^98}\advance\counter by1
+\catcode`\^^99=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^99}\advance\counter by1
+\catcode`\^^9a=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^9a}\advance\counter by1
+\catcode`\^^9b=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^9b}\advance\counter by1
+\catcode`\^^9c=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^9c}\advance\counter by1
+\catcode`\^^9d=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^9d}\advance\counter by1
+\catcode`\^^9e=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^9e}\advance\counter by1
+\catcode`\^^9f=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^9f}\advance\counter by1
+\catcode`\^^a0=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a0}\advance\counter by1
+\catcode`\^^a1=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a1}\advance\counter by1
+\catcode`\^^a2=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a2}\advance\counter by1
+\catcode`\^^a3=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a3}\advance\counter by1
+\catcode`\^^a4=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a4}\advance\counter by1
+\catcode`\^^a5=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a5}\advance\counter by1
+\catcode`\^^a6=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a6}\advance\counter by1
+\catcode`\^^a7=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a7}\advance\counter by1
+\catcode`\^^a8=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a8}\advance\counter by1
+\catcode`\^^a9=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^a9}\advance\counter by1
+\catcode`\^^aa=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^aa}\advance\counter by1
+\catcode`\^^ab=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ab}\advance\counter by1
+\catcode`\^^ac=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ac}\advance\counter by1
+\catcode`\^^ad=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ad}\advance\counter by1
+\catcode`\^^ae=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ae}\advance\counter by1
+\catcode`\^^af=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^af}\advance\counter by1
+\catcode`\^^b0=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b0}\advance\counter by1
+\catcode`\^^b1=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b1}\advance\counter by1
+\catcode`\^^b2=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b2}\advance\counter by1
+\catcode`\^^b3=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b3}\advance\counter by1
+\catcode`\^^b4=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b4}\advance\counter by1
+\catcode`\^^b5=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b5}\advance\counter by1
+\catcode`\^^b6=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b6}\advance\counter by1
+\catcode`\^^b7=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b7}\advance\counter by1
+\catcode`\^^b8=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b8}\advance\counter by1
+\catcode`\^^b9=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^b9}\advance\counter by1
+\catcode`\^^ba=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ba}\advance\counter by1
+\catcode`\^^bb=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^bb}\advance\counter by1
+\catcode`\^^bc=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^bc}\advance\counter by1
+\catcode`\^^bd=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^bd}\advance\counter by1
+\catcode`\^^be=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^be}\advance\counter by1
+\catcode`\^^bf=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^bf}\advance\counter by1
+\catcode`\^^c0=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c0}\advance\counter by1
+\catcode`\^^c1=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c1}\advance\counter by1
+\catcode`\^^c2=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c2}\advance\counter by1
+\catcode`\^^c3=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c3}\advance\counter by1
+\catcode`\^^c4=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c4}\advance\counter by1
+\catcode`\^^c5=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c5}\advance\counter by1
+\catcode`\^^c6=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c6}\advance\counter by1
+\catcode`\^^c7=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c7}\advance\counter by1
+\catcode`\^^c8=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c8}\advance\counter by1
+\catcode`\^^c9=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^c9}\advance\counter by1
+\catcode`\^^ca=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ca}\advance\counter by1
+\catcode`\^^cb=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^cb}\advance\counter by1
+\catcode`\^^cc=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^cc}\advance\counter by1
+\catcode`\^^cd=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^cd}\advance\counter by1
+\catcode`\^^ce=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ce}\advance\counter by1
+\catcode`\^^cf=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^cf}\advance\counter by1
+\catcode`\^^d0=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d0}\advance\counter by1
+\catcode`\^^d1=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d1}\advance\counter by1
+\catcode`\^^d2=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d2}\advance\counter by1
+\catcode`\^^d3=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d3}\advance\counter by1
+\catcode`\^^d4=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d4}\advance\counter by1
+\catcode`\^^d5=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d5}\advance\counter by1
+\catcode`\^^d6=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d6}\advance\counter by1
+\catcode`\^^d7=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d7}\advance\counter by1
+\catcode`\^^d8=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d8}\advance\counter by1
+\catcode`\^^d9=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^d9}\advance\counter by1
+\catcode`\^^da=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^da}\advance\counter by1
+\catcode`\^^db=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^db}\advance\counter by1
+\catcode`\^^dc=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^dc}\advance\counter by1
+\catcode`\^^dd=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^dd}\advance\counter by1
+\catcode`\^^de=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^de}\advance\counter by1
+\catcode`\^^df=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^df}\advance\counter by1
+\catcode`\^^e0=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e0}\advance\counter by1
+\catcode`\^^e1=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e1}\advance\counter by1
+\catcode`\^^e2=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e2}\advance\counter by1
+\catcode`\^^e3=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e3}\advance\counter by1
+\catcode`\^^e4=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e4}\advance\counter by1
+\catcode`\^^e5=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e5}\advance\counter by1
+\catcode`\^^e6=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e6}\advance\counter by1
+\catcode`\^^e7=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e7}\advance\counter by1
+\catcode`\^^e8=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e8}\advance\counter by1
+\catcode`\^^e9=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^e9}\advance\counter by1
+\catcode`\^^ea=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ea}\advance\counter by1
+\catcode`\^^eb=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^eb}\advance\counter by1
+\catcode`\^^ec=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ec}\advance\counter by1
+\catcode`\^^ed=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ed}\advance\counter by1
+\catcode`\^^ee=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ee}\advance\counter by1
+\catcode`\^^ef=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ef}\advance\counter by1
+\catcode`\^^f0=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f0}\advance\counter by1
+\catcode`\^^f1=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f1}\advance\counter by1
+\catcode`\^^f2=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f2}\advance\counter by1
+\catcode`\^^f3=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f3}\advance\counter by1
+\catcode`\^^f4=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f4}\advance\counter by1
+\catcode`\^^f5=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f5}\advance\counter by1
+\catcode`\^^f6=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f6}\advance\counter by1
+\catcode`\^^f7=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f7}\advance\counter by1
+\catcode`\^^f8=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f8}\advance\counter by1
+\catcode`\^^f9=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^f9}\advance\counter by1
+\catcode`\^^fa=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^fa}\advance\counter by1
+\catcode`\^^fb=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^fb}\advance\counter by1
+\catcode`\^^fc=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^fc}\advance\counter by1
+\catcode`\^^fd=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^fd}\advance\counter by1
+\catcode`\^^fe=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^fe}\advance\counter by1
+\catcode`\^^ff=11 \expandafter\xdef\csname pgfp@bin@\the\counter \endcsname{^^ff}\advance\counter by1
+\ifnum\counter=256
+\else
+ \pgfplots@error{Internal logic Error: initialisation failed. I have only \the\counter\space bytes initialised.}
+\fi
+\endgroup
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotscolor.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotscolor.code.tex
new file mode 100644
index 0000000000..f0145d7f78
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotscolor.code.tex
@@ -0,0 +1,630 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2013 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\pgfkeys{
+ /pgfplots/color sequence/reset/.style={
+ /pgfplots/color sequence/colorspace,
+ /pgfplots/color sequence/default input colorspace,
+ /pgfplots/color sequence/every input component/.code=,
+ /pgfplots/color sequence/context message,
+ },
+ /pgfplots/color sequence/colorspace/.initial=auto,
+ /pgfplots/color sequence/colorspace/.default=auto,
+ /pgfplots/color sequence/default input colorspace/.initial=,
+ /pgfplots/color sequence/default input colorspace/.default=\pgfkeysvalueof{/pgfplots/color sequence/colorspace},
+ % applied to every INPUT component, i.e. before transforming it to some target color space.
+ /pgfplots/color sequence/every input component/.code=,
+ /pgfplots/color sequence/context message/.code={\def\pgfplotscolornormalizesequence@context@message{#1}},
+ /pgfplots/color sequence/context message/.default=\pgfplotscolornormalizesequence@context@message@default,
+ /pgfplots/color sequence/reset,
+}
+
+\newif\ifpgfplotscolor@colorspaceknown
+
+% the beginning of a normalized color sequence.
+%
+% It is to be used like
+% \pgfplotscolornormalizesequence[colorspace=rgb]
+%
+% \pgfplotscolornormalizesequencenext{1,1,1}
+% -> \pgfplotsretval = {1,1,1} % uses default colorspace
+% \pgfplotscolornormalizesequencenext{color=red}
+% -> \pgfplotsretval = {1,0,0}
+% \pgfplotscolornormalizesequencenext{color=blue}
+% -> \pgfplotsretval = {0,0,1}
+% \pgfplotscolornormalizesequencenext{rgb=1,0,0}
+% -> \pgfplotsretval = {1,0,0}
+% \pgfplotscolornormalizesequencenext{cmyk=1,0,0,1}
+% -> \pgfplotsretval = {<converted value>}
+%
+% \endpgfplotscolornormalizesequence
+%
+% Every color provided in the sequence will be normalized by
+% transforming it to the common color space and by computing the
+% separate components representing the color in that space.
+%
+% These components are available for use in interpolation routines.
+%
+% #1 : keys in the /pgfplots/color sequence path
+\def\pgfplotscolornormalizesequence[#1]{%
+ \pgfqkeys{/pgfplots/color sequence}{%
+ #1,%
+ }%
+ \pgfkeysgetvalue{/pgfplots/color sequence/colorspace}\pgfplots@loc@TMPa
+ \pgfkeysgetvalue{/pgfplots/color sequence/default input colorspace}\pgfplotscolornormalizesequence@colspace@input
+ \edef\pgfplotscolornormalizesequence@colspace@input{\pgfplotscolornormalizesequence@colspace@input}%
+ \pgfkeysgetvalue{/pgfplots/color sequence/every input component/.@cmd}\pgfplotscolornormalizesequencenext@every@component
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \def\pgfplots@loc@TMPb{auto}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ % colorspace=auto: same as empty.
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \fi
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % colorspace=auto:
+ \def\pgfplotscolornormalizesequence@colspace{}%
+ \else
+ \def\pgfplots@loc@TMPb{rgb}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ % colorspace=rgb:
+ \def\pgfplotscolornormalizesequence@colspace{rgb}%
+ \else
+ \def\pgfplots@loc@TMPb{cmyk}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ % colorspace=cmyk:
+ \def\pgfplotscolornormalizesequence@colspace{cmyk}%
+ \else
+ \def\pgfplots@loc@TMPb{gray}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ % colorspace=gray:
+ \def\pgfplotscolornormalizesequence@colspace{gray}%
+ \else
+ \pgfplots@error{Sorry, the choice colorspace=\pgfplots@loc@TMPa\space is unsupported as interpolation colorspace in pgfplots, please use one of 'auto,rgb,cmyk,gray'}%
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+
+% ends a normalized color sequence and returns the final colorspace
+% and its number of components into \pgfplotsretval and
+% \pgfplotsretvalb, respectively
+\def\endpgfplotscolornormalizesequence{%
+ \let\pgfplotsretval=\pgfplotscolornormalizesequence@colspace
+ \pgfplotscolor@get@num@components{\pgfplotsretval}{\pgfplotsretvalb}%
+ \pgfqkeys{/pgfplots/color sequence}{reset}%
+}%
+
+% accepts the next color in a sequence of colors. The color will be
+% normalized and the normalized result written to \pgfplotsretval.
+%
+% SEE \pgfplotscolornormalizesequencenext -- it is MUCH more powerful!
+%
+% #1 the color space of the color.
+% #2 the components of the color, separated by comma.
+%
+% POSTCONDITION:
+% \pgfplotsretval contains '{<color space>}{<comma-separated-components>}'
+% -> including the curly braces.
+%
+% \pgfplotsretvalb contains the number of input components in
+% \pgfplotsretval
+\def\pgfplotscolornormalizesequencenextbycomponents#1#2{%
+ \edef\pgfplotscolornormalizesequence@cur@colspace{#1}%
+ \pgfplotscolornormalizesequencenextbycomponents@normalize@components{#2}%
+ %
+ \ifx\pgfplotscolornormalizesequence@cur@colspace\pgfplotscolornormalizesequence@colspace
+ \else
+ \ifx\pgfplotscolornormalizesequence@colspace\pgfutil@empty
+ \pgfplotscolornormalizesequencenextbycomponents@assign@auto@colspace
+ \fi
+ %
+ \ifx\pgfplotscolornormalizesequence@colspace\pgfplotscolornormalizesequence@cur@colspace
+ % Ah, ok - the colorspace is NOW the correct one (because
+ % we chose it as the colorspace for this complete color
+ % sequence.
+ \else
+ % Oh. We need to convert the color space!
+ \edef\pgfplots@loc@TMPa{{\pgfplotscolornormalizesequence@cur@colspace}{\pgfplotsretval}}%
+ \expandafter\pgfutil@convertcolorspec\pgfplots@loc@TMPa
+ {\pgfplotscolornormalizesequence@colspace}% target color spaces
+ {\pgfplotsretval}% target macro
+ \fi
+ \fi
+ \edef\pgfplotsretval{\pgfplotsretval}%
+ \pgfplotscolor@get@num@components{\pgfplotscolornormalizesequence@colspace}{\pgfplotsretvalb}%
+}
+
+\def\pgfplotscolornormalizesequencenextbycomponents@assign@auto@colspace{%
+ % Ah; we have '/pgfplots/color sequence/colorspace=auto'.
+ % Well, check if the current colorspace (stored in
+ % \pgfplotscolornormalizesequence@cur@colspace) is suitable.
+ %
+ % It is suitable if it is rgb or cmyk. In all other cases,
+ % we choose either rgb or cmyk. More precisely. 'cmy' is
+ % mapped to cmyk. All other cases are treated as rgb.
+ %
+ \def\pgfplots@loc@TMPa{cmyk}%
+ \ifx\pgfplotscolornormalizesequence@cur@colspace\pgfplots@loc@TMPa
+ \let\pgfplotscolornormalizesequence@colspace=\pgfplotscolornormalizesequence@cur@colspace
+ \else
+ \def\pgfplots@loc@TMPa{cmy}%
+ \ifx\pgfplotscolornormalizesequence@cur@colspace\pgfplots@loc@TMPa
+ \def\pgfplotscolornormalizesequence@colspace{cmyk}%
+ \else
+ % rgb appears to be the best choice: (1) it is backwards
+ % compatible and (2) gray or something like that might fit
+ % badly to any other colors in the sequence.
+ \def\pgfplotscolornormalizesequence@colspace{rgb}%
+ \fi
+ \fi
+}
+
+% #1: color components
+%
+% PRECONDITION: \pgfplotscolornormalizesequence@cur@colspace is the
+% current color space
+%
+% POSTCONDITION: \pgfplotsretval contains the normalized color
+% components
+\def\pgfplotscolornormalizesequencenextbycomponents@normalize@components#1{%
+ \pgfutil@ifundefined{pgfplots@colspace@name@\pgfplotscolornormalizesequence@cur@colspace}{%
+ \pgfplotscolor@colorspaceknownfalse
+ }{%
+ \pgfplotscolor@colorspaceknowntrue
+ }%
+ \edef\pgfplots@loc@TMPb{#1}%
+ \def\pgfplotsretval{}%
+ \c@pgf@counta=0 %
+ \expandafter\pgfplotscolornormalizesequencenext@prepare@loop\pgfplots@loc@TMPb,\pgfplots@EOI,%
+}%
+
+% assigns the number of color components for the given colorspace to
+% \pgfplotsretval
+\def\pgfplotscolorspacegetcomponents#1{%
+ \pgfplotscolor@get@num@components{#1}{\pgfplotsretval}%
+}%
+
+% Defines \pgfplotsretval to contain the number of components in the
+% color space.
+\def\pgfplotscolornormalizesequencegetnumcomponents{%
+ \ifx\pgfplotscolornormalizesequence@colspace\pgfutil@empty
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Cannot create color with zero components: no colorspace set for the normalized color sequence.}\pgfeov%
+ \fi
+ \pgfplotscolorspacegetcomponents{\pgfplotscolornormalizesequence@colspace}%
+}%
+
+\def\pgfplotscolor@get@num@components#1#2{%
+ \pgfutil@ifundefined{pgfplots@colspace@numcomp@#1}{%
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{The input color has an unsupported color space '#1'}\pgfeov%
+ }{%
+ \edef#2{\csname pgfplots@colspace@numcomp@#1\endcsname}%
+ }%
+}%
+
+
+\def\pgfplots@colspace@numcomp@gray{1}%
+\def\pgfplots@colspace@name@gray{gray}%
+
+\def\pgfplots@colspace@numcomp@rgb{3}%
+\def\pgfplots@colspace@name@rgb{rgb}%
+
+\def\pgfplots@colspace@numcomp@cmyk{4}%
+\def\pgfplots@colspace@name@cmyk{cmyk}%
+
+\def\pgfplots@colspace@numcomp@cmy{3}%
+\def\pgfplots@colspace@name@cmy{cmy}%
+
+\def\pgfplots@colspace@numcomp@wave{1}%
+\def\pgfplots@colspace@name@wave{wave}%
+\pgfutil@namedef{pgfplots@colspace@minaccept@wave@0}{362.998}%
+\pgfutil@namedef{pgfplots@colspace@min@wave@0}{363}%
+\pgfutil@namedef{pgfplots@colspace@maxaccept@wave@0}{814.001}%
+\pgfutil@namedef{pgfplots@colspace@max@wave@0}{814}%
+
+\def\pgfplots@colspace@numcomp@Hsb{3}%
+\def\pgfplots@colspace@name@Hsb{Hsb}%
+\pgfutil@namedef{pgfplots@colspace@minaccept@Hsb@0}{-0.001}%
+\pgfutil@namedef{pgfplots@colspace@min@Hsb@0}{0}%
+\pgfutil@namedef{pgfplots@colspace@maxaccept@Hsb@0}{\rangeHsb}%
+\pgfutil@namedef{pgfplots@colspace@max@Hsb@0}{\rangeHsb}%
+
+\def\pgfplotscolornormalizesequencenext@prepare@loop#1,{%
+ \def\pgfmathresult{#1}%
+ \ifx\pgfmathresult\pgfplots@EOI
+ \else
+ \begingroup
+ \pgfkeyslet{/pgf/fpu/handlers/invalid number/.@cmd}\pgfplotscolornormalizesequencenextbycomponents@parsenumber@error
+ \expandafter\pgfplotscolornormalizesequencenext@every@component\expandafter{\pgfmathresult}\pgfeov%
+ \ifpgfplotscolor@colorspaceknown
+ \expandafter\pgfplotscolornormalizesequencenextbycomponents@parsenumber\expandafter{\pgfmathresult}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \ifpgfplotscolor@colorspaceknown
+ \expandafter\pgfplotscolornormalizesequencenextbycomponents@sanitize\expandafter{\pgfmathresult}%
+ \fi
+ \ifx\pgfplotsretval\pgfutil@empty
+ \edef\pgfplotsretval{\pgfmathresult}%
+ \else
+ \edef\pgfplotsretval{\pgfplotsretval,\pgfmathresult}%
+ \fi
+ \advance\c@pgf@counta by1 %
+ \expandafter\pgfplotscolornormalizesequencenext@prepare@loop
+ \fi
+}
+
+\def\pgfplotscolornormalizesequencenextbycomponents@parsenumber#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloattofixed\pgfmathresult
+}
+
+\def\pgfplotscolornormalizesequencenextbycomponents@parsenumber@error#1#2\pgfeov{%
+ \pgfplotsthrow{invalid color component}{\pgfmathresult}{Sorry, the color component value '#1' is no number. Did you mean 'color=#1'? The error occured near `\pgfplotscolornormalizesequence@context@message'}\pgfeov%
+ \pgfmathfloatcreate{0}{0.0}{0}%
+}%
+
+% #1 the color component value
+\def\pgfplotscolornormalizesequencenextbycomponents@sanitize#1{%
+ \pgf@xa=#1pt %
+ %
+ % check if we have something like
+ % \csname pgfplots@colspace@minaccept@<colorspace name>@2\endcsname where 2 is component index:
+ \edef\pgfplots@loc@TMPc{@\pgfplotscolornormalizesequence@cur@colspace @\the\c@pgf@counta}%
+ \pgfutil@ifundefined{pgfplots@colspace@minaccept\pgfplots@loc@TMPc}{%
+ % NO - implicitly defined to [0,1]
+ \def\pgfplots@colspace@minaccept@@{-0.001}%
+ \def\pgfplots@colspace@min@@{-0.001}%
+ \def\pgfplots@colspace@maxaccept@@{1.001}%
+ \def\pgfplots@colspace@max@@{1}%
+ }{%
+ % YES - expect all four values:
+ \edef\pgfplots@colspace@minaccept@@{\csname pgfplots@colspace@minaccept\pgfplots@loc@TMPc\endcsname}%
+ \edef\pgfplots@colspace@min@@{\csname pgfplots@colspace@min\pgfplots@loc@TMPc\endcsname}%
+ \edef\pgfplots@colspace@maxaccept@@{\csname pgfplots@colspace@maxaccept\pgfplots@loc@TMPc\endcsname}%
+ \edef\pgfplots@colspace@max@@{\csname pgfplots@colspace@max\pgfplots@loc@TMPc\endcsname}%
+ }%
+ \ifdim\pgf@xa<\pgfplots@colspace@minaccept@@ pt %
+ \edef\pgfmathresult{\pgfplots@colspace@min@@}%
+ \pgfplotscolor@rangeexception{#1}%
+ \else
+ \ifdim\pgf@xa>\pgfplots@colspace@maxaccept@@ pt %
+ \edef\pgfmathresult{\pgfplots@colspace@max@@}%
+ \pgfplotscolor@rangeexception{#1}%
+ \else
+ % Ah - the common case!
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xa}% normalize number (strip trailing zeros etc).
+ \fi
+ \fi
+}
+
+\def\pgfplotscolor@rangeexception#1{%
+ \pgfplotsthrow{invalid color component}{\pgfmathresult}{Sorry, the color component value #1 (no. \the\c@pgf@counta) is out of range. The allowed range is 0 <= value <= 1. The error occured near `\pgfplotscolornormalizesequence@context@message'}\pgfeov%
+}
+
+
+% Same as \pgfplotscolornormalizesequencenextbycomponents but with
+% more freedom in the input.
+%
+% #1 some color.
+% Accepted formats:
+% 'color=<xcolor value>'
+% <xcolor value> is any valid expression of the xcolor package.
+%
+% 'rgb=R,G,B'
+% R,G,B are numbers in [0,1]
+%
+% 'rgb255=R,G,B'
+% R,G,B are numbers in [0,255]
+%
+% 'cmyk=C,M,Y,K'
+% C, M, Y, and K are numbers in [0,1]
+%
+% 'cmyk255=C,M,Y,K'
+% C, M, Y, and K are numbers in [0,255]
+%
+% 'gray=G'
+% G is a gray scale number in [0,1]
+%
+% 'C1,C2,C3'
+% any number of Ci can folow, each is interpreted in the default
+% colorspace (i.e. the one set before at the beginning of the
+% sequence)
+%
+%
+% Example:
+% \pgfplotscolornormalizesequencenext{color=blue}
+% \pgfplotscolornormalizesequencenext{rgb=1,0,0}
+% \pgfplotscolornormalizesequencenext{cmyk=1,0,0,1}
+% \pgfplotscolornormalizesequencenext{1,0,0} (interpreted in the
+% colorspace set at \pgfplotscolornormalizesequence)
+%
+% POSTCONDITION: see \pgfplotscolornormalizesequencenextbycomponents
+\def\pgfplotscolornormalizesequencenext#1{%
+ \edef\pgfplotscolornormalizesequence@context@message@default{#1}%
+ \expandafter\pgfplotscolornormalizesequencenext@\pgfplotscolornormalizesequence@context@message@default\pgfplots@EOI
+}
+\def\pgfplotscolornormalizesequencenext@{%
+ \pgfutil@ifnextchar c{%
+ \pgfplotscolornormalizesequencenext@c
+ }{%
+ \pgfutil@ifnextchar r{%
+ \pgfplotscolornormalizesequencenext@rgb
+ }{%
+ \pgfutil@ifnextchar g{%
+ \pgfplotscolornormalizesequencenext@gray
+ }{%
+ \pgfplotscolornormalizesequencenext@defaultcolspace
+ }%
+ }%
+ }%
+}
+
+\def\pgfplotscolornormalizesequencenext@gray gray=#1\pgfplots@EOI{%
+ % FIXME : we might be better off with real support for a gray
+ % colorspace!
+ \pgfplotscolornormalizesequencenextbycomponents{rgb}{#1,#1,#1}%
+}
+
+\def\pgfplotscolornormalizesequencenext@defaultcolspace#1\pgfplots@EOI{%
+ \edef\pgfplotsretval{#1}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ % hm. Ok, simply return the empty input.
+ %
+ % ... and the number of components.
+ \pgfplotscolor@get@num@components{\pgfplotscolornormalizesequence@colspace}{\pgfplotsretvalb}%
+ %
+ \else
+ \expandafter\pgfutil@in@\expandafter=\expandafter{\pgfplotsretval}%
+ \ifpgfutil@in@
+ \expandafter\pgfplotscolornormalizesequencenext@unknown@colspace\pgfplotsretval\pgfplots@EOI
+ \else
+ \ifx\pgfplotscolornormalizesequence@colspace@input\pgfutil@empty
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{The input color #1 cannot be interpreted; please assign a default color space first}\pgfeov%
+ \fi
+ \pgfplotscolornormalizesequencenextbycomponents{\pgfplotscolornormalizesequence@colspace@input}{#1}%
+ \fi
+ \fi
+}
+
+\def\pgfplotscolornormalizesequencenext@unknown@colspace#1=#2\pgfplots@EOI{%
+ \pgfplotscolornormalizesequencenextbycomponents{#1}{#2}%
+}
+
+\def\pgfplotscolornormalizesequencenext@rgb rgb{%
+ \pgfutil@ifnextchar2{%
+ \pgfplotscolornormalizesequencenext@rgb@two@five@five
+ }{%
+ \pgfplotscolornormalizesequencenext@rgb@plain
+ }%
+}
+\def\pgfplotscolornormalizesequencenext@rgb@plain=#1\pgfplots@EOI{%
+ \pgfplotscolornormalizesequencenextbycomponents{rgb}{#1}%
+}
+
+\def\pgfplotscolorsequence@two@five@five@rescale#1{%
+ \pgfmath@basic@multiply@{0.003921568}{#1}%
+}%
+\def\pgfplotscolornormalizesequencenext@rgb@two@five@five255=#1,#2,#3\pgfplots@EOI{%
+ \pgfplotscolorsequence@two@five@five@rescale{#1}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscolorsequence@two@five@five@rescale{#2}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscolorsequence@two@five@five@rescale{#3}%
+ \edef\pgfplots@loc@TMPc{{rgb}{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfmathresult}}%
+ \expandafter\pgfplotscolornormalizesequencenextbycomponents\pgfplots@loc@TMPc%
+}
+
+\def\pgfplotscolornormalizesequencenext@c c{%
+ \pgfutil@ifnextchar m{%
+ \pgfplotscolornormalizesequencenext@cmyk
+ }{%
+ \pgfplotscolornormalizesequencenext@color
+ }%
+}%
+
+\def\pgfplotscolornormalizesequencenext@cmyk myk{%
+ \pgfutil@ifnextchar2{%
+ \pgfplotscolornormalizesequencenext@cmyk@two@five@five
+ }{%
+ \pgfplotscolornormalizesequencenext@cmyk@plain
+ }%
+}%
+
+\def\pgfplotscolornormalizesequencenext@cmyk@plain=#1\pgfplots@EOI{%
+ \pgfplotscolornormalizesequencenextbycomponents{cmyk}{#1}%
+}%
+\def\pgfplotscolornormalizesequencenext@cmyk@two@five@five255=#1,#2,#3,#4\pgfplots@EOI{%
+ \pgfplotscolorsequence@two@five@five@rescale{#1}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscolorsequence@two@five@five@rescale{#2}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscolorsequence@two@five@five@rescale{#3}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ \pgfplotscolorsequence@two@five@five@rescale{#4}%
+ \edef\pgfplots@loc@TMPc{{cmyk}{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc,\pgfmathresult}}%
+ \expandafter\pgfplotscolornormalizesequencenextbycomponents\pgfplots@loc@TMPc%
+}
+
+% The implementation of \pgfutil@extractcolorspec for plain tex and
+% context is ... strange. I prefer one which does the same as the
+% xcolor version (which is also what pgf does for latex):
+\def\pgfplotsutil@extractcolorspec@xcolor@substitute#1#2{%
+ \begingroup
+ % this here relies on PGF's emulation of color in plain tex and
+ % context. Let's hope it works in the future...
+ \def\xcolor@##1##2##3##4{%
+ \edef#2{{##3}{##4}}%
+ }%
+ \csname\string\color@#1\endcsname
+ \global\let\pgfutil@extractcolorspec@@temp=#2%
+ \endgroup
+ \let#2=\pgfutil@extractcolorspec@@temp
+}%
+
+\def\pgfplots@glob@TMPa#1#2{%
+ \def#2{{#1}}%
+}%
+
+\pgfutil@IfUndefined{extractcolorspec}{%
+ % Ah. We do not have a suitable implementation of
+ % \extractcolorspec -- \pgfutil@extractcolorspec does not yield
+ % the colorspec on context and plain tex.
+ \def\pgfplotsutil@extractcolorspec{\pgfplotsutil@extractcolorspec@xcolor@substitute}%
+}{%
+ \ifx\extractcolorspec\pgfplots@glob@TMPa
+ % Same problem as above: pgfutil-plain.def says
+ % \let\extractcolorspec=\pgfutil@extractcolorspec and that one
+ % is broken.
+ % Use my substitute:
+ \def\pgfplotsutil@extractcolorspec{\pgfplotsutil@extractcolorspec@xcolor@substitute}%
+ \else
+ \def\pgfplotsutil@extractcolorspec{\extractcolorspec}%
+ \fi
+}%
+
+\def\pgfplotscolornormalizesequencenext@color olor=#1\pgfplots@EOI{%
+ \pgfutil@colorlet{pgf@tempcol}{#1}%
+ \pgfplotsutil@extractcolorspec{pgf@tempcol}{\pgf@tempcolor}%
+ \edef\pgfplots@loc@TMPa{\expandafter\pgfutil@firstoftwo\pgf@tempcolor}%
+ \edef\pgfplots@loc@TMPb{\expandafter\pgfutil@secondoftwo\pgf@tempcolor}%
+ %
+ % I expect that \pgf@tempcolor is of the form
+ % {<colorspace>}{<comma-separated components>}
+ %
+ % unfortunately, the <colorspace> has strange catcodes such that
+ % we cannot easily compare it by means of \ifx. I normalize it
+ % here:
+ \pgfutil@ifundefined{pgfplots@colspace@name@\pgfplots@loc@TMPa}{%
+ % ohoh. we cannot normalize the name. Let's hope that works out.
+ % note that we cannot throw an exception here as we might very well be able
+ % to convert the color to some suitable color space!
+ }{%
+ \edef\pgfplots@loc@TMPa{%
+ \csname pgfplots@colspace@name@\pgfplots@loc@TMPa\endcsname%
+ }%
+ }%
+ \edef\pgf@tempcolor{%
+ {\pgfplots@loc@TMPa}%
+ {\pgfplots@loc@TMPb}%
+ }%
+ \expandafter\pgfplotscolornormalizesequencenextbycomponents\pgf@tempcolor%
+ %
+}%
+
+% Defines \pgfplotsretval to be a "neutral" color, i.e. one in which
+% all components are zero.
+% @see \pgfplotscolorzero
+% @see \pgfplotscoloraddweighted
+\def\pgfplotscolornormalizesequencezero{%
+ \pgfplotscolornormalizesequencegetnumcomponents
+ \pgfplotscolorzero{\pgfplotsretval}%
+}
+
+% Defines \pgfplotsretval to be a "neutral" color, i.e. one in which
+% all components are zero.
+%
+% #1: the number of color components to be used (like 3 for rgb)
+% @see \pgfplotscoloraddweighted
+\def\pgfplotscolorzero#1{%
+ \csname pgfplotscolorzero@num@#1\endcsname
+}%
+
+\expandafter\def\csname pgfplotscolorzero@num@1\endcsname{\def\pgfplotsretval{0}}
+\expandafter\def\csname pgfplotscolorzero@num@2\endcsname{\def\pgfplotsretval{0,0}}
+\expandafter\def\csname pgfplotscolorzero@num@3\endcsname{\def\pgfplotsretval{0,0,0}}
+\expandafter\def\csname pgfplotscolorzero@num@4\endcsname{\def\pgfplotsretval{0,0,0,0}}
+
+% Defines \pgfplotsretval to be the interpolated color #1 + #2*#3.
+% #1 the first color (like 0,0,0)
+% #2 a scaling factor (like 4)
+% #3 the second color (like 1,0,0.5)
+%
+% POSTCONDITION: \pgfplotsretval contains the result
+%
+% @see \pgfplotscolorzero
+% @see \pgfplotscoloraddweighted
+\def\pgfplotscolornormalizesequenceaddweighted#1#2#3{%
+ \begingroup
+ \pgfplotscolornormalizesequencegetnumcomponents
+ \global\let\pgfplots@glob@TMPd\pgfplotsretval
+ \endgroup
+ \pgfplotscoloraddweighted{\pgfplots@glob@TMPd}{#1}{#2}{#3}%
+}
+
+% Defines \pgfplotsretval to be the interpolated color #2 + #3*#4.
+% #1 the number of color components to be used (3 for rgb)
+% #2 the first color (like 0,0,0)
+% #3 a scaling factor (like 4)
+% #4 the second color (like 1,0,0.5)
+%
+% POSTCONDITION: \pgfplotsretval contains the result
+%
+% @see \pgfplotscolorzero
+\def\pgfplotscoloraddweighted#1#2#3#4{%
+ \pgfplots@ifempty{#4}{%
+ \pgfplots@error{Illegal input argument encountered while computing colors:
+ one color argument is missing (was empty). Please ensure that you have explicit color values in your input}%
+ }{%
+ \expandafter\let
+ \expandafter\pgfplots@loc@TMPb\csname pgfplotscolornormalizesequencegetnumcomponents@#1\endcsname
+ \edef\pgfplots@loc@TMPa{#2:#4\noexpand\relax{#3}}%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa%
+ }%
+}%
+
+\def\pgfplotscolornormalizesequenceaddweighted@single#1#2#3{%
+ \pgf@xa=#1pt %
+ \pgf@xb=#3pt %
+ \advance\pgf@xa by#2\pgf@xb
+ \edef\pgfplotsretval{\pgf@sys@tonumber\pgf@xa}%
+}%
+
+\expandafter\def\csname pgfplotscolornormalizesequencegetnumcomponents@1\endcsname#1:#2\relax#3{%
+ \pgfplotscolornormalizesequenceaddweighted@single{#1}{#3}{#2}%
+}%
+\expandafter\def\csname pgfplotscolornormalizesequencegetnumcomponents@3\endcsname#1,#2,#3:#4,#5,#6\relax#7{%
+ \pgfplotscolornormalizesequenceaddweighted@single{#1}{#7}{#4}%
+ \let\pgfplots@loc@TMPa=\pgfplotsretval
+ \pgfplotscolornormalizesequenceaddweighted@single{#2}{#7}{#5}%
+ \let\pgfplots@loc@TMPb=\pgfplotsretval
+ \pgfplotscolornormalizesequenceaddweighted@single{#3}{#7}{#6}%
+ \let\pgfplots@loc@TMPc=\pgfplotsretval
+ \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc}%
+}%
+\expandafter\def\csname pgfplotscolornormalizesequencegetnumcomponents@4\endcsname#1,#2,#3,#4:#5,#6,#7,#8\relax#9{%
+ \pgfplotscolornormalizesequenceaddweighted@single{#1}{#9}{#5}%
+ \let\pgfplots@loc@TMPa=\pgfplotsretval
+ \pgfplotscolornormalizesequenceaddweighted@single{#2}{#9}{#6}%
+ \let\pgfplots@loc@TMPb=\pgfplotsretval
+ \pgfplotscolornormalizesequenceaddweighted@single{#3}{#9}{#7}%
+ \let\pgfplots@loc@TMPc=\pgfplotsretval
+ \pgfplotscolornormalizesequenceaddweighted@single{#4}{#9}{#8}%
+ \let\pgfplots@loc@TMPd=\pgfplotsretval
+ \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc,\pgfplots@loc@TMPd}%
+}%
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotscolormap.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotscolormap.code.tex
new file mode 100644
index 0000000000..464f05359f
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotscolormap.code.tex
@@ -0,0 +1,2500 @@
+%--------------------------------------------
+% $Header: /cvsroot/pgfplots/pgfplots/generic/pgfplots/util/pgfplotscolormap.code.tex,v 1.15 2009/07/21 18:18:48 ludewich Exp $
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2013 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\input pgfplotscolor.code.tex
+
+\pgfkeyssetvalue{/pgfplots/colormap default colorspace}{auto}
+
+% preset for '/pgfplots/colormap uniform=always
+% This is only used for the colormap predefined in this very file.
+\def\pgfplots@colormap@uniform@choice{0}%
+
+% This package relies on pgfplots temporary registers and its array
+% data structure.
+
+% Internal structure:
+% the colormap data structure consists of
+% - an array 'pgfpl@cm@#1' of RGB color triples,
+% - numbers 'pgfpl@cm@#1@h' and 'pgfpl@cm@#1@invh' for the mesh width
+% and inverse mesh width.
+
+% Creates a new colormap.
+%
+% #1 : the name of the color map as string (not as macro).
+% #2 : a <color specification> as is expected for a shading spec of
+% pgf. However, the format allows a little bit more freedom:
+% - it supports 'rgb255' in addition to pgf,
+% - the length is not required (defaults to 1cm for the first and to
+% the last length+h for all others).
+% - the semicolons can be omitted.
+%
+% Example:
+% \pgfplotscreatecolormap{my map}{rgb(0cm)=(1,0,0); rgb(1cm)=(0,1,0); rgb255(1.5cm)=(128,5,255); rgb(2cm)=(0,0,1); gray(3cm)=(3); color(4cm)=(green); }
+% \pgfplotscreatecolormap{my map}{color=(green); color=(red); color=(blue); color=(yellow)}
+\def\pgfplotscreatecolormap#{\pgfplots@createcolormap}%
+\def\pgfplots@createcolormap#1#2{%
+ \pgfkeysinterruptkeyfilter
+ \edef\pgfplots@createcolormap@name{pgfpl@cm@#1}%
+ \expandafter\pgfplotsarraynewempty\expandafter{\pgfplots@createcolormap@name}%
+ \pgfplotsapplistXnewempty\pgfplots@createcolormap@X
+ %
+ % '0' = is not uniform
+ % '1' = is uniform
+ % '2' = is FORCED to be uniform, i.e. will be reinterpolated
+ \ifcase\pgfplots@colormap@uniform@choice\relax
+ % colormap uniform=always (due to compatibility requirements)
+ \def\b@pgfplotscreatecolormap@isuniform{2}%
+ \or
+ % colormap uniform=if requested
+ \def\b@pgfplotscreatecolormap@isuniform{1}%
+ \fi
+ \def\pgfplots@createcolormap@MIN{}% To be computed.
+ \def\pgfplots@createcolormap@MAX{}% To be computed.
+ \def\b@pgfplots@createcolormap@pos@mode{a}% [a]uto or [m]anual
+ \pgfplots@createcolormap@initcolorspace
+ \let\pgfplots@createcolormap@LAST=\pgfplots@createcolormap@MIN
+ % PARSE IT:
+ \let\pgfplots@createcolormap@context=\pgfutil@empty
+ %%%%%%%%%%%%%%%%%%
+ % this does also init @H:
+ \pgflibraryfpuifactive{%
+ \def\pgfplots@createcolormap@restore@fpu{}%
+ }{%
+ \def\pgfplots@createcolormap@restore@fpu{\pgfkeys{/pgf/fpu=false}}%
+ \pgfkeys{/pgf/fpu=true}%
+ }%
+ %\edef\pgfplots@loc@TMPa{#2}% XXX this fails for active chars and
+ %if key/value options are too special
+ \def\pgfplots@loc@TMPa{#2}%
+ \expandafter\pgfplots@createcolormap@startloop\pgfplots@loc@TMPa\pgfplots@EOI
+ %
+ \pgfplots@createcolormap@restore@fpu
+ %
+ %%%%%%%%%%%%%%%%%%
+ %
+ \expandafter\pgfplotsarraycheckempty\expandafter{\pgfplots@createcolormap@name}%
+ % sanity checking:
+ \expandafter\pgfplotsarraysizetomacro\expandafter{\pgfplots@createcolormap@name}\to\pgfplots@loc@TMPa
+ \ifcase\pgfplots@loc@TMPa\relax
+ \pgfplots@error{Sorry, you need to provide at least two points of a colormap.}%
+ \or
+ \pgfplots@error{Sorry, you need to provide at least two points of a colormap.}%
+ \fi
+ % Map the input range [MIN,MAX] linearly to [0,1000]
+ \pgfmathfloatsubtract@{\pgfplots@createcolormap@MAX}{\pgfplots@createcolormap@MIN}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfmathfloatdivide@{\pgfplotscolormaprange@float}{\pgfplots@loc@TMPb}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfplots@loc@TMPb}{\pgfplots@createcolormap@H}%
+ \let\pgfplots@loc@TMPd=\pgfmathresult
+ \pgfplots@createcolormap@normalize{\pgfmathresult}%
+ \expandafter\let\csname\pgfplots@createcolormap@name @h\endcsname=\pgfmathresult
+ %
+ \pgfmathfloatreciprocal@{\pgfplots@loc@TMPd}%
+ \pgfplots@createcolormap@normalize{\pgfmathresult}%
+ \expandafter\let\csname\pgfplots@createcolormap@name @invh\endcsname=\pgfmathresult
+ %
+ % ... and set up the X coordinates if the grid is not uniform:
+ \expandafter\pgfplotsarraynewempty\expandafter{\pgfplots@createcolormap@name @X}%
+ \if0\b@pgfplotscreatecolormap@isuniform
+ % Uncomment the '\iftrue' for testing purposes (to see if a uniform map changes if
+ % processed as non-uniform):
+% \iftrue
+ \pgfplotsapplistXlet\pgfplots@loc@TMPc=\pgfplots@createcolormap@X
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplots@loc@TMPc}\as\pgfplots@loc@TMPc{%
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \else
+ % apply the trafo [MIN,MAX] -> [0,1000] here as well:
+ \pgfmathfloatsubtract@{\pgfplots@loc@TMPc}{\pgfplots@createcolormap@MIN}%
+ \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfplots@loc@TMPb}%
+ \pgfplots@createcolormap@normalize{\pgfmathresult}%
+ \expandafter\pgfplotsarraypushback\expandafter{\pgfmathresult}\to{pgfpl@cm@#1@X}%
+ \fi
+ }%
+ %
+ \pgfplotscolormapsetadditionalintervalwidth@{#1}%
+ \else
+ \expandafter\let\csname\pgfplots@createcolormap@name @X@scale@order@z\endcsname=\pgfutil@empty
+ \fi
+ % clear temporary list:
+ \pgfplotsapplistXnewempty\pgfplots@createcolormap@X
+ %
+ \if m\b@pgfplots@createcolormap@pos@mode
+ % Ah - we have manually provided positions!
+ % DISABLE the extra interval. You have to enable it explicitly
+ % by means of 'colormap access/extra interval width=0.1'
+ \expandafter\def\csname\pgfplots@createcolormap@name @X@scale@order@z\endcsname{0}%
+ \fi
+ %
+ \endpgfplotscolornormalizesequence%
+ \expandafter\let\csname\pgfplots@createcolormap@name @colspace\endcsname=\pgfplotsretval
+ \expandafter\let\csname\pgfplots@createcolormap@name @col@comps\endcsname=\pgfplotsretvalb
+ \c@pgf@counta=\expandafter\pgfplotsarraysizeof\expandafter{\pgfplots@createcolormap@name}\relax
+ \advance\c@pgf@counta by-1 %
+ \expandafter\edef\csname\pgfplots@createcolormap@name @lastindex\endcsname{\the\c@pgf@counta}%
+%\pgfplots@colormap@showdebuginfofor{#1}%
+ \pgfplots@colormap@LUA@new{#1}%
+ \endpgfkeysinterruptkeyfilter
+}
+
+\def\pgfplots@createcolormap@normalize#1{%
+ \pgfmathfloattofixed{#1}%
+ \pgf@xa=\pgfmathresult pt %
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xa}% normalize number.
+}%
+
+% Allows to customize the width of the additional interval used for
+% 'colormap access=piecewise constant'.
+%
+% #1 colormap name
+% #2 the additional interval width for this colormap. Use '0' to disable the additional
+% interval. The value is relative to the total width and must be in
+% the range 0<=#2<=0.9
+\def\pgfplotscolormapsetadditionalintervalwidth#1#2{%
+ \edef\pgfplots@loc@TMPd{#2}%
+ \def\pgfplots@loc@TMPc{h}%
+ \ifx\pgfplots@loc@TMPd\pgfplots@loc@TMPc
+ % 'h' means: mesh width:
+ \pgfplotscolormapifisuniform{#1}{%
+ \expandafter\let\csname pgfpl@cm@#1@X@scale@order@z\endcsname\pgfutil@empty%
+ }{%
+ \pgfplotscolormapsetadditionalintervalwidth@{#1}%
+ }%
+ \else
+ \pgfmathparse{#2}%
+ \pgfplotscolormapifisuniform{#1}{%
+ \ifdim\pgfmathresult pt>0pt
+ \pgfplots@error{Uniform colormaps support no configuration of the additional interval width for a colormap (although you can use 0 to turn it off). Please use a non-uniform colormap.}%
+ \else
+ % DISABLE the extra interval!
+ \expandafter\def\csname pgfpl@cm@#1@X@scale@order@z\endcsname{0}%
+ \fi
+ }{%
+ \ifdim\pgfmathresult pt>0pt
+ \ifdim\pgfmathresult pt>0.9pt
+ \pgfplots@error{Expected a number 0< X <= 0.9, not \pgfmathresult}%
+ \else
+ % compute the 'h'.
+ %
+ % Note that 's:=#2' is a fraction 0<x<1 of the RESULTING
+ % range, i.e. s * 1000 = H where 0<=H<=1000.
+ % but H = 1000/(1000+h) * 1000, and we need the 'h'.
+ %
+ % -> h = 1000/s - 1000.
+ % regarding the '1-#2': I did some mistake in my
+ % computation and that fixed it :-/
+ \pgfmathparse{1000/(1-#2)-1000}%
+ \expandafter\let\csname pgfpl@cm@#1@h\endcsname=\pgfmathresult
+ \expandafter\let\csname pgfpl@cm@#1@invh\endcsname=\pgfutil@empty% unused!
+ \pgfplotscolormapsetadditionalintervalwidth@{#1}%
+ \fi
+ \else
+ % DISABLE the extra interval!
+ \expandafter\def\csname pgfpl@cm@#1@X@scale@order@z\endcsname{0}%
+ \fi
+ }%
+ \fi
+ %
+ \ifpgfplots@LUA@supported
+ \pgfplotsutil@directlua{%
+ pgfplots.texColorMapSetScaleOrderZ("#1", "\csname pgfpl@cm@#1@X@scale@order@z\endcsname")
+ }%
+ \fi
+}%
+
+% see \pgfplotscolormapsetadditionalintervalwidth
+\def\pgfplotscolormapsetadditionalintervalwidth@#1{%
+ % 'colormap access=piecewise constant' (order 0) requires a
+ % special scaling factor. See its consumers for details +
+ % documentation
+ \pgfmathparse{1000/(1000+\csname pgfpl@cm@#1@h\endcsname)}%
+ \expandafter\let\csname pgfpl@cm@#1@X@scale@order@z\endcsname=\pgfmathresult
+}%
+
+\def\pgfplots@createcolormap@initcolorspace{%
+ \pgfplotscolornormalizesequence[
+ colorspace=\pgfkeysvalueof{/pgfplots/colormap default colorspace},
+ context message=\pgfplots@createcolormap@context\pgfplots@createcolormap@trace,
+ ]%
+}%
+\def\pgfplots@createcolormap@seth[#1]{%
+ \def\pgfplots@createcolormap@context{[#1]}%
+ \pgfmathparse{#1}%
+ \let\pgfplots@createcolormap@H=\pgfmathresult
+ % request for a uniform colormap:
+ \def\b@pgfplotscreatecolormap@isuniform{3}%
+ \pgfplots@createcolormap@
+}%
+
+\def\pgfplots@createcolormap@startloop{%
+ \pgfutil@ifnextchar[%
+ {\pgfplots@createcolormap@seth}%
+ {%
+ \let\pgfplots@createcolormap@H=\pgfutil@empty
+ \pgfplots@createcolormap@
+ }%
+}%
+\def\pgfplots@createcolormap@{%
+ \pgfutil@ifnextchar\pgfplots@EOI{\pgfutil@gobble}%done!
+ {%
+ \pgfutil@ifnextchar;{\pgfplots@createcolormap@grabsemicolon}%
+ {%
+ \pgfutil@ifnextchar,{\pgfplots@createcolormap@grabcomma}%
+ {%
+ \expandafter\pgfutil@ifnextchar\pgfplots@activesemicolon{\pgfplots@createcolormap@grabsemicolon@active}%
+ {%
+ \pgfplots@createcolormap@grabnext
+ }%
+ }%
+ }%
+ }%
+}
+
+% Executes '#1' if there are more tokens and '#2' if not.
+\def\pgfplots@createcolormap@ifhasmorecolors#1#2{%
+ \pgfutil@ifnextchar\pgfplots@EOI{%
+ #2% no more tokens.
+ }{%
+ \pgfutil@ifnextchar;{\pgfplots@createcolormap@grabsemicolon@hasnext{#1}{#2}}%
+ {%
+ \pgfutil@ifnextchar,{\pgfplots@createcolormap@grabcomma@hasnext{#1}{#2}}%
+ {%
+ \expandafter\pgfutil@ifnextchar\pgfplots@activesemicolon{\pgfplots@createcolormap@grabsemicolon@active@hasnext{#1}{#2}}%
+ {%
+ #1% has more.
+ }%
+ }%
+ }%
+ }%
+}%
+
+\def\pgfplots@createcolormap@error#1#2\pgfplots@EOI{%
+ {%
+ \t@pgfplots@toka={#1#2}%
+ \t@pgfplots@tokb={#1}%
+ \pgfplots@error{Illformed colormap specification: I could not read the substring `\the\t@pgfplots@toka' starting at `\the\t@pgfplots@tokb'\pgfplots@createcolormap@trace}%
+ }%
+}%
+
+\def\pgfplots@createcolormap@trace{%
+ \space(color no \expandafter\pgfplotsarraysizeof\expandafter{\pgfplots@createcolormap@name})
+}
+
+\def\pgfplots@createcolormap@grabnext#1={%
+ \pgfutil@ifnextchar({\pgfplots@createcolormap@grabnext@round{#1}=}{%
+ \pgfutil@ifnextchar\bgroup{\pgfplots@createcolormap@grabnext@curly{#1}=}{%
+ \pgfplots@createcolormap@error#1=%
+ }%
+ }%
+}
+\def\pgfplots@createcolormap@grabnext@round#1=(#2){%
+ \pgfplots@createcolormap@grabnext@@{#1}={#2}%
+}%
+\def\pgfplots@createcolormap@grabnext@curly#1=#2{%
+ \pgfplots@createcolormap@grabnext@@{#1}={#2}%
+}%
+\def\pgfplots@createcolormap@grabnext@@#1=#2{%
+ \pgfutil@in@({#1}%
+ \ifpgfutil@in@
+ % Ah. We have something like 'color(1cm)' before the equal sign.
+ \pgfplots@createcolormap@grabnext@read@pos#1\pgfplots@EOI%
+ % now:
+ %\pgfplots@loc@TMPa = colorspace
+ %\pgfplots@loc@TMPb = position
+ %
+ \else
+ % Ah. we do not have a position, i.e. we have
+ % color=(green)
+ % or something like this.
+ %
+ % this here defines \pgfplots@loc@TMPa to contain the
+ % colorspace:
+ \pgfkeys@spdef\pgfplots@loc@TMPa{#1}%
+ %
+ \pgfplots@createcolormap@grabnext@computenextposition
+ \let\pgfplots@loc@TMPb=\pgfmathresult% position
+ \fi
+ \def\pgfplots@loc@TMPc{#2}%
+ \pgfplots@createcolormap@grabnext@complete
+}%
+
+\def\pgfplots@createcolormap@grabnext@read@pos#1({%
+ \pgfkeys@spdef\pgfplots@loc@TMPa{#1}% colorspace
+ \pgfplots@createcolormap@grabnext@read@pos@
+}%
+\def\pgfplots@createcolormap@grabnext@read@pos@#1){%
+ \def\pgfplots@loc@TMPb{#1}% position
+ \def\b@pgfplots@createcolormap@pos@mode{m}% [m]anual
+ \pgfutil@ifnextchar\pgfplots@EOI{%
+ % OK
+ \pgfplots@gobble@until@EOI
+ }{%
+ \pgfplots@createcolormap@error#1)%
+ }%
+}%
+
+%%%%%%%%%%
+
+% Splits '<argument> of <source name>*' into (\pgfplotsretval,
+% \pgfplotsretvalb).
+%
+% The 'of' part is optional. If it is missing, '\pgfplotsretval'
+% contains the entire argument and '\pgfplotsretvalb' is the current
+% colormap.
+%
+% Note that '<source name>*' is typically just a colormap name (i.e. without
+% '*'), but it _may_ contain key-value lists! They will be returned as-is.
+% #1: the string to split
+% #2: '1' if '#1' may contain ',' and '0' otherwise
+\def\pgfplots@createcolormap@special@split#1#2{%
+ \pgfutil@in@{of }{#1}%
+ \ifpgfutil@in@
+ \pgfplots@createcolormap@special@split@#1\pgfplots@EOI
+ \else
+ \if1#2\relax
+ % do not check it -- commas are allowed here!
+ \pgfutil@in@false
+ \else
+ \pgfutil@in@{,}{#1}%
+ \fi
+ \ifpgfutil@in@
+ % ah - might be something like '5, target pos={1,2,3}'.
+ % -> define \pgfplotsretval='5' and
+ % \pgfplotsretvalb='<colormap name>, target pos={1,2,3}':
+ %
+ \pgfplots@createcolormap@special@split@command#1\pgfplots@EOI
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretvalb}%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplotsretvalb
+ \edef\pgfplotsretvalb{\pgfplotsretvalb,\the\t@pgfplots@tokb}%
+ \else
+ \pgfkeys@spdef\pgfplotsretval{#1}%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplotsretvalb
+ \fi
+ \fi
+%\message{Split (#1) --> '\pgfplotsretval', '\pgfplotsretvalb'^^J}%
+}%
+\def\pgfplots@createcolormap@special@split@#1of #2\pgfplots@EOI{%
+ \pgfkeys@spdef\pgfplotsretval{#1}%
+ \pgfkeys@spdef\pgfplotsretvalb{#2}%
+}
+\def\pgfplots@createcolormap@special@split@command#1,#2\pgfplots@EOI{%
+ \pgfkeys@spdef\pgfplotsretval{#1}%
+ \pgfkeys@spdef\pgfplotsretvalb{#2}%
+}
+
+% Output: \pgfplotsretval will be populated with the resulting
+% colormap name.
+\def\pgfplots@createcolormap@special@ensure@source@cm#1{%
+ \edef\pgfplotsretval{#1}%
+ \pgfplotscolormapifdefined{#1}{}{%
+ % hm... the colormap does not exist? Perhaps someone used
+ % style 'colormap/cool'. Try to define it!
+ \pgfkeysifdefined{/pgfplots/#1/.@cmd}{%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@color@of@colormap@name@old
+ \pgfplotsset{#1}%
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplotsretval
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplots@color@of@colormap@name@old
+ }{%
+ \pgfplots@error{The argument '#1' is no valid colormap.}%
+ }%
+ }%
+}%
+
+\newif\ifpgfplots@createcolormap@target@pos@includes@limits@min
+\newif\ifpgfplots@createcolormap@target@pos@includes@limits@max
+
+% these keys are only evaluated inside of
+% \pgfplots@of@colormap@getresult :
+\pgfqkeys{/pgfplots/of colormap}{%
+ source name/.initial=,
+ target pos/.initial=,
+ target pos min/.initial=,
+ target pos min/insert/.is if=pgfplots@createcolormap@target@pos@includes@limits@min,
+ target pos min*/.style={%
+ /pgfplots/of colormap/target pos min={#1},
+ /pgfplots/of colormap/target pos min/insert=true,
+ },%
+ target pos max/.initial=,
+ target pos max*/.style={%
+ /pgfplots/of colormap/target pos max={#1},
+ /pgfplots/of colormap/target pos max/insert=true,
+ },%
+ target pos max/insert/.is if=pgfplots@createcolormap@target@pos@includes@limits@max,
+ source pos/.initial=,
+ source pos/.set if not empty/.code={%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfkeyslet{/pgfplots/of colormap/source pos}\pgfplots@loc@TMPa
+ \fi
+ },
+ %
+ @define/.code={%
+ \pgfplots@error{Please write 'single color' or 'color list' such that pgfplots knows how to interprete values}%
+ \let\pgfplotsretval=\pgfutil@empty
+ },
+ single color/.style={%
+ /pgfplots/of colormap/@define/.code={%
+ \pgfplots@createcolormap@special@process@single
+ },
+ },
+ color list/.style={%
+ /pgfplots/of colormap/@define/.code={%
+ \pgfplots@createcolormap@special@process@list%
+ },
+ },
+ color list,
+ %
+ of colormap/.style={#1},
+ %
+ % 'color of colormap={#1}' is a style which boils down to
+ % '@delegate to@ of colormap={color}{#1}'.
+ % The same is true for
+ % colors of colormap
+ % index of colormap
+ % indices of colormap
+ % samples of colormap
+ %
+ % All use this implementation:
+ % #1: how to interprete results. /pgfplots/of colormap/#1 must be
+ % a valid key (like 'color').
+ % #2: the argument which can be '<source pos> of <source name>' or '<source pos>'.
+ % #3: '1' if the source pos may contain ',' and '0' otherwise
+ @delegate to@ of colormap/.code args={#1#2#3}{%
+ % Convert 'color of colormap={...}' and its variants into
+ % 'of colormap={<list of keys>}':
+ \pgfplots@createcolormap@special@split{#2}{#3}%
+ \edef\pgfplots@loc@TMPa{%
+ #1,%
+ source pos={\pgfplotsretval},%
+ % \pgfplotsretvalb will contain the colormap name
+ % --- but it _can_ also contain further key-value pairs!
+ % Do not add braces here such that further key-value pairs
+ % can be found:
+ source name=\pgfplotsretvalb,%
+ }%
+ \expandafter\pgfkeysalso\expandafter{\pgfplots@loc@TMPa}%
+ },
+ %
+ color/.style={%
+ /pgfplots/of colormap/colormap access=map,
+ /pgfplots/of colormap/single color,
+ /pgfplots/of colormap/source pos/.set if not empty={#1},
+ },
+ const color/.style={%
+ /pgfplots/of colormap/colormap access=piecewise constant,
+ /pgfplots/of colormap/single color,
+ /pgfplots/of colormap/source pos/.set if not empty={#1},
+ },
+ index/.style={%
+ /pgfplots/of colormap/colormap access=direct,
+ /pgfplots/of colormap/single color,
+ /pgfplots/of colormap/source pos/.set if not empty={#1},
+ },
+ colors/.style={%
+ /pgfplots/of colormap/colormap access=map,
+ /pgfplots/of colormap/color list,
+ /pgfplots/of colormap/source pos/.set if not empty={#1},
+ },
+ samples/.style={%
+ /pgfplots/of colormap/colormap access=map,% can be overridden if needed.
+ /pgfplots/of colormap/@define/.code={%
+ \pgfplots@createcolormap@special@process@list@sampled%
+ },
+ /pgfplots/of colormap/source pos/.set if not empty={#1},
+ },%
+ %
+ const colors/.style={%
+ /pgfplots/of colormap/colormap access=piecewise constant,
+ /pgfplots/of colormap/color list,
+ /pgfplots/of colormap/source pos/.set if not empty={#1},
+ },
+ indices/.style={%
+ /pgfplots/of colormap/colormap access=direct,
+ /pgfplots/of colormap/color list,
+ /pgfplots/of colormap/source pos/.set if not empty={#1},
+ },
+ colormap access/.style={/pgfplots/colormap access={#1}},
+ source range/.initial=0:1000,
+ %
+ sample for/.is choice,
+ sample for/default/.code={\def\pgfplots@ofcolorbar@sample@for@choice{m}},
+ sample for/const/.code={\def\pgfplots@ofcolorbar@sample@for@choice{c}},
+ sample for=default,
+ %
+ /pgfplots/of colormap/.unknown/.code={%
+ \pgfplotsutilifstringequal{#1}{\pgfkeysnovalue}{%
+ % This here allows to write 'of colormap={initial}'
+ \pgfplotscolormapifdefined{\pgfkeyscurrentname}{%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfkeysalso{%
+ /pgfplots/of colormap/source name={\pgfkeyscurrentname},
+ }%
+ }%
+ \pgfplots@loc@TMPa
+ }{%
+ \pgfplots@error{Unknown key '\pgfkeyscurrentname'. Is this a colormap name? Maybe you need to write \string\pgfplotsset{\pgfkeyscurrentname} first?}%
+ }%
+ }{%
+ \pgfkeysgetvalue{/handlers/.unknown/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov%
+ }%
+ },
+ %
+ % allow something like 'of colormap={colormap/PuBuGn}':
+ /pgfplots/of colormap/colormap/.unknown/.code={%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplotsset{colormap/\pgfkeyscurrentname}}%
+ \pgfplots@loc@TMPa
+ },%
+}
+\pgfplotsinvokeforeach{%
+ color,% defines 'color of colormap'
+ index,% defines 'index of colormap'
+ const color,% defines 'const color of colormap'
+ samples,% defines 'samples of colormap'
+}{%
+ \def\pgfplots@glob@TMPa{#1}%
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ \else
+ \pgfkeysdef{/pgfplots/of colormap/#1 of colormap}{%
+ \pgfkeysalso{/pgfplots/of colormap/@delegate to@ of colormap={#1}{##1}{0}}%
+ }%
+ \fi
+}%
+\pgfplotsinvokeforeach{%
+ indices,% defines 'indices of colormap'
+ colors,% defines 'colors of colormap'
+ const colors,% defines 'const colors of colormap'
+}{%
+ \def\pgfplots@glob@TMPa{#1}%
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ \else
+ \pgfkeysdef{/pgfplots/of colormap/#1 of colormap}{%
+ \pgfkeysalso{/pgfplots/of colormap/@delegate to@ of colormap={#1}{##1}{1}}%
+ }%
+ \fi
+}%
+
+% This is the main implementation of 'of colormap'. It is shared by
+% both cycle lists and colormaps.
+%
+\def\pgfplots@of@colormap@getresult#1{%
+ \pgfkeysinterruptkeyfilter
+ \pgfqkeys{/pgfplots/of colormap}{%
+ % ensure that this here is not inherited from the axis'
+ % configuration -- reset it:
+ colormap access=map,%
+ #1}%
+ \pgfkeysgetvalue{/pgfplots/of colormap/source name}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplots@loc@TMPa
+ \fi
+ \pgfplots@createcolormap@special@ensure@source@cm{\pgfkeysvalueof{/pgfplots/colormap name}}%
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplotsretval
+ %
+ \pgfqkeys{/pgfplots/of colormap}{@define}%
+ \endpgfkeysinterruptkeyfilter
+}%
+
+
+\def\pgfplots@createcolormap@special@process@single@error{%
+ \pgfplots@error{Did not find a suitable input source pos in a 'of colormap' specification. Did you forget the 'source pos'? It can be given as 'colors of colormap=(source pos of name)' or 'of colormap=(source pos=...,..)'}%
+ \pgfkeyssetvalue{/pgfplots/of colormap/source pos}{0}%
+}%
+\def\pgfplots@createcolormap@special@process@single@error@comma{%
+ \pgfplots@error{Found an unexpected comma in 'source pos=\pgfkeysvalueof{/pgfplots/of colormap/source pos}'. Please use one of the styles 'colors', 'indices', or 'const colors' in order to process more than one position}%
+ \pgfkeyssetvalue{/pgfplots/of colormap/source pos}{0}%
+}%
+\def\pgfplots@createcolormap@special@process@single{%
+ \begingroup
+ \let\pgfplots@color@of@colormap@access=\pgfplots@colormap@access
+ \pgfkeysgetvalue{/pgfplots/of colormap/source range}\pgfplotspointmetatransformedrange
+ \ifx\pgfplotspointmetatransformedrange\pgfutil@empty
+ % evaluated by \pgfplots@color@of@colormap@define...
+ \let\pgfplotspointmetatransformedrange=\pgfplotscolormaprange
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/of colormap/source pos}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfplots@createcolormap@special@process@single@error
+ \else
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfutil@in@{,}{\pgfplots@loc@TMPa}%
+ }%
+ \pgfplots@loc@TMPa
+ \ifpgfutil@in@
+ \pgfplots@createcolormap@special@process@single@error@comma
+ \else
+ \pgfmathparse{\pgfkeysvalueof{/pgfplots/of colormap/source pos}}%
+ \pgfkeyslet{/pgfplots/of colormap/source pos}\pgfmathresult
+ \fi
+ \fi
+ %
+ \pgflibraryfpuifactive{\pgfkeys{/pgf/fpu=false}}{}%
+ %
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplots@color@of@colormap@define{\pgfkeysvalueof{/pgfplots/of colormap/source pos}}%
+ }%
+ \pgfplots@loc@TMPa
+ %
+ \pgfplots@createcolormap@special@process@single@define
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+\def\pgfplots@createcolormap@special@process@single@define{%
+ \pgfkeysgetvalue{/pgfplots/of colormap/target pos}\pgfplots@temp@pos
+ \ifx\pgfplots@temp@pos\pgfutil@empty
+ \else
+ \edef\pgfplots@temp@pos{(\pgfplots@temp@pos)}%
+ \fi
+ %
+ \edef\pgfplotsretval{%
+ \csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname\pgfplots@temp@pos=(\pgfmathresult)%
+ }%
+}%
+\let\pgfplots@createcolormap@special@process@single@define@CM=\pgfplots@createcolormap@special@process@single@define%
+
+\def\pgfplots@createcolormap@special@process@list@sanitize@selection{%
+ \pgfkeysgetvalue{/pgfplots/of colormap/source pos}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % default to a suitable source pos.
+ \ifnum\pgfplots@pos@size<2
+ % We have either 0 positions or 1 position.
+ % This is clearly insufficient and we assume that this
+ % position argument merely gives the start point for the
+ % list.
+ %
+ % Select all of the input colormap:
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfkeysalso{%
+ /pgfplots/of colormap/source pos={0,...,\pgfplotscolormaplastindexof{\pgfkeysvalueof{/pgfplots/colormap name}}},%
+ /pgfplots/of colormap/indices,
+ }%
+ }%
+ \pgfplots@loc@TMPa
+ \else
+ % hm... we have no source pos, but we have positions! In
+ % this case, we _sample_ source pos uniformly with one
+ % sample for each position!
+ \pgfkeyslet{/pgfplots/of colormap/source pos}\pgfplots@pos@size
+ \pgfplots@createcolormap@special@process@list@sampled@define{P}%
+ \fi
+ \fi
+}
+\def\pgfplots@createcolormap@special@process@list@limits{%
+ \begingroup
+ %
+ \pgfkeysgetvalue{/pgfplots/of colormap/target pos}\pgfplots@target
+ \ifx\pgfplots@target\pgfutil@empty
+ \else
+ \pgfkeys{/pgf/fpu=true}%
+ \pgfkeysgetvalue{/pgfplots/of colormap/target pos min}\pgfplots@target@min
+ \pgfkeysgetvalue{/pgfplots/of colormap/target pos max}\pgfplots@target@max
+ \pgfplots@loc@tmpfalse
+ \ifx\pgfplots@target@min\pgfutil@empty
+ \else
+ \pgfmathparse\pgfplots@target@min
+ \let\pgfplots@target@min=\pgfmathresult
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifx\pgfplots@target@max\pgfutil@empty
+ \else
+ \pgfmathparse\pgfplots@target@max
+ \let\pgfplots@target@max=\pgfmathresult
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifpgfplots@loc@tmp
+ % Ah - we _have_ limit constraints! Enforce them:
+ \def\b@pgfplots@isfirst{1}%
+ \pgfmathfloatcreate{1}{1.0}{324}%
+ \let\pgfplots@firstpos\pgfmathresult%
+ \let\pgfplots@lastpos\pgfmathresult%
+ \pgfplotsapplistXnewempty\pgfplots@createcolormap@trg@accum
+ \def\pgfplots@loc@TMPa{\pgfplotsforeachungrouped \x in}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@target}{%
+ \ifx\x\pgfutil@empty
+ \else
+ \pgfmathparse{\x}%
+ \let\x=\pgfmathresult
+ \ifx\pgfplots@target@min\pgfutil@empty
+ \else
+ \pgfmathfloatlessthan{\x}{\pgfplots@target@min}%
+ \ifpgfmathfloatcomparison
+ \let\x=\pgfutil@empty
+ \fi
+ \fi
+ \ifx\pgfplots@target@max\pgfutil@empty
+ \else
+ \ifx\x\pgfutil@empty
+ \else
+ \pgfmathfloatlessthan{\pgfplots@target@max}{\x}%
+ \ifpgfmathfloatcomparison
+ \let\x=\pgfutil@empty
+ \fi
+ \fi
+ \fi
+ %
+ \ifx\x\pgfutil@empty
+ \else
+ \let\pgfplots@lastpos=\x
+ \if1\b@pgfplots@isfirst
+ \let\pgfplots@firstpos=\x
+ \def\b@pgfplots@isfirst{0}%
+ \else
+ \edef\x{,\x}%
+ \fi
+ \expandafter\pgfplotsapplistXpushback\expandafter{\x}\to\pgfplots@createcolormap@trg@accum
+ \fi
+ \fi
+ }%
+ %
+ \ifpgfplots@createcolormap@target@pos@includes@limits@max
+ \ifx\pgfplots@target@max\pgfutil@empty
+ \else
+ \pgfmathfloatifapproxequalrel{\pgfplots@lastpos}{\pgfplots@target@max}{%
+ }{%
+ \let\x=\pgfplots@target@max
+ \if1\b@pgfplots@isfirst
+ \def\b@pgfplots@isfirst{0}%
+ \else
+ \edef\x{,\x}%
+ \fi
+ \expandafter\pgfplotsapplistXpushback\expandafter{\x}\to\pgfplots@createcolormap@trg@accum
+ }%
+ \fi
+ \fi
+ %
+ \pgfplotsapplistXlet\pgfplots@target=\pgfplots@createcolormap@trg@accum
+ %
+ \ifpgfplots@createcolormap@target@pos@includes@limits@min
+ \ifx\pgfplots@target@min\pgfutil@empty
+ \else
+ \pgfmathfloatifapproxequalrel{\pgfplots@firstpos}{\pgfplots@target@min}{%
+ }{%
+ \let\x=\pgfplots@target@min
+ \if1\b@pgfplots@isfirst
+ \let\pgfplots@target=\x
+ \else
+ \edef\pgfplots@target{\x,\pgfplots@target}%
+ \fi
+ }%
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+ \global\let\pgfplots@glob@TMPb=\pgfplots@target
+ \endgroup
+%\message{limit application: \pgfkeysvalueof{/pgfplots/of colormap/target pos} ^^J -->\pgfplots@glob@TMPb^^J}%
+ \pgfkeyslet{/pgfplots/of colormap/target pos}\pgfplots@glob@TMPb
+}%
+
+\def\pgfplots@createcolormap@special@process@list@define@target@array{%
+ \pgfplots@createcolormap@special@process@list@limits%
+ %
+ \pgfkeysgetvalue{/pgfplots/of colormap/target pos}\pgfplots@loc@TMP
+ \expandafter\pgfplotsarraynew\expandafter\pgfplots@pos@array\expandafter{\pgfplots@loc@TMP}%
+ %
+ \pgfplotsarraysizetomacro\pgfplots@pos@array\to\pgfplots@pos@size
+}%
+
+% PRECONDITION: Must be invoked within \pgfplots@of@colormap@getresult
+\def\pgfplots@createcolormap@special@process@list{%
+ \begingroup
+ \pgfkeys{/pgf/fpu=true}%
+ \pgfplots@createcolormap@special@process@list@define@target@array
+ %
+ \pgfplotsapplistXnewempty\pgfplots@createcolormap@special@process@result
+ %
+ \gdef\c@pgfplots@elem{0}%
+ %
+ \def\pgfplots@createcolormap@special@process@list@append{%
+ \pgfplots@createcolormap@special@process@single
+ %
+ % append separator
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@createcolormap@special@process@list@separator}%
+ \edef\pgfplotsretval{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ %
+ \expandafter\pgfplotsapplistXpushback\pgfplotsretval\to\pgfplots@createcolormap@special@process@result
+ }%
+ %
+ \pgfplots@createcolormap@special@process@list@sanitize@selection
+ %
+ \pgfkeysgetvalue{/pgfplots/of colormap/source pos}\pgfplots@source
+ %
+ \def\pgfplots@loc@TMPa{\pgfplotsforeachungrouped \x in }%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@source}{%
+ %
+ \pgfkeyslet{/pgfplots/of colormap/source pos}\x
+ %
+ \ifnum\c@pgfplots@elem<\pgfplots@pos@size\relax
+ \pgfplotsarrayselect\c@pgfplots@elem\of\pgfplots@pos@array\to\pgfplots@loc@TMPa
+ \pgfkeyslet{/pgfplots/of colormap/target pos}\pgfplots@loc@TMPa
+ \else
+ % auto-position:
+ \pgfkeyslet{/pgfplots/of colormap/target pos}\pgfutil@empty
+ \fi
+ %
+ \pgfplots@createcolormap@special@process@list@append
+ %
+ \pgfplotsutil@advancestringcounter@global\c@pgfplots@elem
+ }%
+ %
+ \pgfutil@loop
+ \ifnum\c@pgfplots@elem<\pgfplots@pos@size\relax
+ \pgfplotsarrayselect\c@pgfplots@elem\of\pgfplots@pos@array\to\pgfplots@loc@TMPa
+ \pgfkeysgetvalue{/pgfplots/of colormap/source pos}\x
+ \pgfplotswarning{too many colormap positions}{index \c@pgfplots@elem\space (value \pgfplots@loc@TMPa)}\pgfeov%
+ \pgfplotsutil@advancestringcounter@global\c@pgfplots@elem
+ %
+ \pgfutil@repeat
+ %
+ \pgfplotsapplistXlet\pgfplotsretval=\pgfplots@createcolormap@special@process@result
+ \global\let\pgfplots@glob@TMPa=\pgfplotsretval
+ \endgroup
+ \let\pgfplotsretval=\pgfplots@glob@TMPa
+%\message{of colormap with list functionality results in \meaning\pgfplotsretval^^J}%
+}%
+\def\pgfplots@createcolormap@special@process@list@sampled{%
+ \begingroup
+ \pgfkeys{/pgf/fpu=true}%
+ \pgfplots@createcolormap@special@process@list@define@target@array
+ %
+ % no need to reapply it in \pgfplots@createcolormap@special@process@list:
+ \let\pgfplots@createcolormap@special@process@list@define@target@array=\relax
+ %
+ \pgfplots@createcolormap@special@process@list@sampled@define{S}%
+ \pgfplots@createcolormap@special@process@list
+ \global\let\pgfplots@glob@TMPa=\pgfplotsretval
+ \endgroup
+ \let\pgfplotsretval=\pgfplots@glob@TMPa
+}
+
+% Defines
+% * 'source range',
+% * 'source pos',
+% in a way such that it implements 'samples of colormap'
+% #1: 'S' if it _must_ satisfy the number of samples and 'P' if it
+% _must_ satisfy the positions
+\def\pgfplots@createcolormap@special@process@list@sampled@define#1{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/of colormap/source pos}\pgfplots@source
+ %
+ \def\b@pgfplots@special@interval{0}%
+ \def\b@pgfplots@special@interval@additional{0}%
+ \if c\pgfplots@ofcolorbar@sample@for@choice%
+ % or colormap/sample for=const:
+ % sample one less and replicate the last color. This
+ % is to compensate for 'colormap access/extra interval width=0'
+ % (which is the default for colormaps with positions)
+ \ifnum\pgfplots@pos@size>1
+ % ah - we have at least 2 positions and 'extra interval width=0' applies!
+ \if S#1%
+ \c@pgf@counta=\pgfplots@source\relax
+ \advance\c@pgf@counta by1 %
+ \ifnum\pgfplots@pos@size=\c@pgf@counta
+ \else
+ \pgfplotsthrow{too few colormap positions}{\pgfplots@pos@size}{There is an unexpected number of arguments to 'target pos' for 'samples of colormap=(\pgfplots@source)'. Please provide \the\c@pgf@counta\space positions, not \pgfplots@pos@size}\pgfeov%
+ \fi
+ \fi
+ \if S#1%
+ % this is the case
+ % samples of colormap={5, target pos={<6 positions>}}
+ % -> we need to replicate the last color such that we see the rightmost color of the input map
+ \def\b@pgfplots@special@interval{1}%
+ % -> we also need one more sample point (one for each position):
+ \def\b@pgfplots@special@interval@additional{1}%
+ \else
+ % we have pgfplots@pos@size=pgfplots@source.
+ \if1\b@pgfplots@createcolormap@found@more@colors
+ % there are more positions/colors!? Ok, no need to
+ % apply it here:
+ \def\b@pgfplots@special@interval{0}%
+ \else
+ \def\b@pgfplots@special@interval{1}%
+ \fi
+ \fi
+ \else
+ \def\b@pgfplots@special@interval{0}%
+ \fi
+ \else
+ \def\b@pgfplots@special@interval{0}%
+ \ifnum\pgfplots@pos@size>1
+ % ah - we have at least 2 positions
+ \if S#1%
+ \ifnum\pgfplots@pos@size=\pgfplots@source
+ \else
+ \pgfplotsthrow{too few colormap positions}{\pgfplots@pos@size}{There is an unexpected number of arguments to 'target pos' for 'samples of colormap=(\pgfplots@source)'. Please provide \pgfplots@source\space positions, not \pgfplots@pos@size}\pgfeov%
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+ \if1\b@pgfplots@special@interval@additional
+ \c@pgf@counta=\pgfplots@source\relax
+ \advance\c@pgf@counta by+1
+ \edef\pgfplots@source{\the\c@pgf@counta}%
+ \fi
+ \if1\b@pgfplots@special@interval
+ \begingroup
+ \c@pgf@counta=\pgfplots@source\relax
+ \advance\c@pgf@counta by-1
+ %
+ \pgfplotsapplistXnewempty\pgfplots@createcolormap@trg@accum
+ \ifnum\c@pgf@counta<2
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfmathresult,}\to\pgfplots@createcolormap@trg@accum
+ \else
+ \edef\pgfplots@source{\the\c@pgf@counta}%
+ \pgfplots@domain@to@foreach 0:1000\relax{\pgfplots@source}%
+ %
+ \def\pgfplots@loc@TMPa{\pgfplotsforeachungrouped \x in}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotsretval}{%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\x,}\to\pgfplots@createcolormap@trg@accum
+ }%
+ \fi
+ %
+ \pgfmathfloatcreate{1}{1.0}{3}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfmathresult}\to\pgfplots@createcolormap@trg@accum
+ %
+ \pgfplotsapplistXlet\pgfplots@target=\pgfplots@createcolormap@trg@accum
+ \global\let\pgfplots@glob@TMPa=\pgfplots@target
+ \endgroup
+ %
+ \let\pgfplotsretval=\pgfplots@glob@TMPa
+ \else
+ \pgfplots@domain@to@foreach 0:1000\relax{\pgfplots@source}%
+ \fi
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ \pgfkeyslet{/pgfplots/of colormap/source pos}\pgfplotsretval
+ \pgfqkeys{/pgfplots/of colormap}{%
+ source range=0:1000,%
+ }%
+%\message{define sample positions(#1) = \pgfplotsretval^^J}%
+}%
+
+
+\def\pgfplots@createcolormap@special@process@list@separator@CM{ }%
+\let\pgfplots@createcolormap@special@process@list@separator=\pgfplots@createcolormap@special@process@list@separator@CM
+%%%%%%%%%%
+
+\def\b@pgfplots@createcolormap@found@more@colors{0}%
+
+\def\pgfplots@createcolormap@grabnext@complete{%
+ \edef\pgfplots@loc@TMPd{%
+ \noexpand\pgfutil@in@{of color}{\pgfplots@loc@TMPa}%
+ }%
+ \pgfplots@loc@TMPd
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPd{%
+ \pgfplots@createcolormap@ifhasmorecolors{%
+ \def\b@pgfplots@createcolormap@found@more@colors{1}%
+ \pgfplots@createcolormap@grabnext@complete@of@colormap
+ }{%
+ \def\b@pgfplots@createcolormap@found@more@colors{0}%
+ \pgfplots@createcolormap@grabnext@complete@of@colormap
+ }%
+ }%
+ \else
+ % ok, this is a 'normal' color specification with position,
+ % colorspace, and color data.
+ %
+ \edef\pgfplots@loc@TMPa{%
+ {\pgfplots@loc@TMPb}% position
+ {%
+ \pgfplots@loc@TMPa% colorspace
+ =\pgfplots@loc@TMPc% color data
+ }%
+ }%
+ \expandafter\pgfplots@createcolormap@nextcolor\pgfplots@loc@TMPa
+ %
+ % continue loop:
+ \def\pgfplots@loc@TMPd{\pgfplots@createcolormap@}%
+ \fi
+ %
+ %
+ % continue loop:
+ \pgfplots@loc@TMPd
+}%
+
+\def\pgfplots@createcolormap@grabnext@complete@of@colormap{%
+ % ah - a special one based on another colormap!
+ % convert it into the standard format:
+ \begingroup
+ \let\pgfplotscolormap@at=\pgfplots@loc@TMPb
+ \let\pgfplotscolormap@argument=\pgfplots@loc@TMPc
+ \let\pgfplotscolormap@key=\pgfplots@loc@TMPa
+ %
+ \pgfplots@createcolormap@grabnext@complete@ofcolormap
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ %
+ \expandafter\pgfplots@createcolormap@\pgfplotsretval
+}%
+
+% INPUT:
+% \pgfplotscolormap@at
+% \pgfplotscolormap@argument
+% \pgfplotscolormap@key
+% OUTPUT:
+% The result of /pgfplots/of colormap/@define.
+% For the normal colormap definition, it populates
+% \pgfplotsretval with the color specifications as they should
+% be processed by the colormap definition code.
+\def\pgfplots@createcolormap@grabnext@complete@ofcolormap{%
+ \t@pgfplots@tokb=\expandafter{\pgfplotscolormap@argument}%
+ \edef\pgfplotscolormap@keyvalue{%
+ \if m\b@pgfplots@createcolormap@pos@mode
+ % ah - we have had manually provided positions before.
+ % Well, keep them. Otherwise, we will stay at the default
+ % placement.
+ target pos={\pgfplotscolormap@at},%
+ \fi
+ % ... but can be overriden here:
+ \pgfplotscolormap@key={\the\t@pgfplots@tokb},%
+ }%
+ %
+ \let\pgfplots@createcolormap@special@process@single@define=\pgfplots@createcolormap@special@process@single@define@CM
+ \let\pgfplots@createcolormap@special@process@list@separator=\pgfplots@createcolormap@special@process@list@separator@CM
+ %
+ % finally, process the keys:
+ \expandafter\pgfplots@of@colormap@getresult\expandafter{%
+ \pgfplotscolormap@keyvalue,
+ }%
+%\message{\pgfplotscolormap@key={\pgfplotscolormap@argument} -> '\pgfplotscolormap@keyvalue' -> \pgfplotsretval^^J}%
+}%
+
+\def\pgfplots@createcolormap@grabnext@computenextposition{%
+ % determine next step size automatically:
+ \expandafter\pgfplotsarraycheckempty\expandafter{\pgfplots@createcolormap@name}%
+ \ifpgfplotsarrayempty
+ % first: just use 0.
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \else
+ % not first:
+ \ifx\pgfplots@createcolormap@H\pgfutil@empty
+ % ah; we really have to deduce something. We are at the
+ % second node:
+ %\def\pgfmathresult{1cm}%
+ \pgfmathfloatcreate{1}{2.845274}{1}% 1cm=28.45274pt . Backw compat
+ \else
+ \pgfmathfloatadd@\pgfplots@createcolormap@LAST\pgfplots@createcolormap@H
+ \fi
+ \fi
+}%
+
+\def\pgfplots@createcolormap@grabsemicolon;{\pgfplots@createcolormap@}%
+\def\pgfplots@createcolormap@grabcomma,{\pgfplots@createcolormap@}%
+
+\def\pgfplots@createcolormap@grabsemicolon@hasnext#1#2;{\pgfplots@createcolormap@ifhasmorecolors{#1}{#2}}%
+\def\pgfplots@createcolormap@grabcomma@hasnext#1#2,{\pgfplots@createcolormap@ifhasmorecolors{#1}{#2}}%
+
+{
+ \catcode`\;=13
+ \gdef\pgfplots@createcolormap@grabsemicolon@active;{\pgfplots@createcolormap@}%
+ \gdef\pgfplots@createcolormap@grabsemicolon@active@hasnext#1#2;{\pgfplots@createcolormap@ifhasmorecolors{#1}{#2}}%
+}
+
+\def\pgfplots@createcolormap@nextcolor@tostring#1=#2\pgfplots@EOI#3{%
+ #1(#3)=(#2)%
+}%
+
+% #1: h
+% #2: a compound element of the form
+% '<colorspace>=<comma-separated-color-components>'
+% The format is chosen such that it can be forwarded directly to
+% \pgfplotscolornormalizesequencenext
+%
+% see \pgfplotscolornormalizesequencenext for details
+\def\pgfplots@createcolormap@nextcolor#1#2{%
+ \def\pgfplots@createcolormap@context{\pgfplots@createcolormap@nextcolor@tostring#2\pgfplots@EOI{#1}\pgfplots@createcolormap@trace}%
+ %
+ \pgfplotscolornormalizesequencenext{#2}%
+ \let\pgfplots@createcolormap@col@comps=\pgfplotsretvalb
+ %
+ \edef\pgfplots@loc@TMPa{{#1}{\pgfplotsretval}}%
+ \expandafter\pgfplots@createcolormap@nextcolor@\pgfplots@loc@TMPa%
+}%
+\def\pgfplots@createcolormap@nextcolor@#1#2{%
+%\message{processing color #1=(#2)^^J}%
+ % compute 'h':
+ \pgfmathparse{#1}%
+ \let\pgfplots@createcolormap@MAX=\pgfmathresult
+ %
+ \ifx\pgfplots@createcolormap@MIN\pgfutil@empty
+ % it is the first.
+ \let\pgfplots@createcolormap@MIN=\pgfmathresult
+ \let\pgfplots@createcolormap@LAST=\pgfmathresult
+ \fi
+ %
+ \expandafter\pgfmathfloatsubtract@\expandafter{\pgfmathresult}{\pgfplots@createcolormap@LAST}%
+ \let\pgfplots@createcolormap@H@cur=\pgfmathresult
+ \pgfplots@createcolormap@check@increasing@mesh@width
+ \let\pgfplots@createcolormap@LAST=\pgfplots@createcolormap@MAX
+ \ifx\pgfplots@createcolormap@H\pgfutil@empty
+ \expandafter\pgfplotsarraycheckempty\expandafter{\pgfplots@createcolormap@name}%
+ \ifpgfplotsarrayempty
+ \else
+ \let\pgfplots@createcolormap@H=\pgfplots@createcolormap@H@cur
+ \fi
+ \else
+ \pgfplots@createcolormap@compute@equalto{\pgfplots@createcolormap@H}{\pgfplots@createcolormap@H@cur}%
+ \ifpgfmathfloatcomparison
+ \else
+ \ifnum\b@pgfplotscreatecolormap@isuniform>1
+ % force reinterpolation:
+ \pgfplotscreatecolormap@reinterpolate{#2}%
+ \else
+ % it is NOT uniform!
+ \def\b@pgfplotscreatecolormap@isuniform{0}%
+ %
+ \pgfmathfloatmintwo{\pgfplots@createcolormap@H@cur}{\pgfplots@createcolormap@H}%
+ \let\pgfplots@createcolormap@H=\pgfmathresult
+ \fi
+ \fi
+ \fi
+ %\message{found current H@cur = \pgfplots@createcolormap@H@cur\space (\pgfplots@createcolormap@LAST) -> H=\pgfplots@createcolormap@H^^J}%
+ %
+ % remember positions:
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@createcolormap@MAX,}\to\pgfplots@createcolormap@X
+ %
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplotsarraypushback{#2}\noexpand\to}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@createcolormap@name}%
+ \edef\pgfplots@createcolormap@last{#2}%
+}%
+
+\def\pgfplots@createcolormap@check@increasing@mesh@width{%
+ \expandafter\pgfplotsarraycheckempty\expandafter{\pgfplots@createcolormap@name}%
+ \ifpgfplotsarrayempty
+ \else
+ \pgfmathfloatifflags{\pgfplots@createcolormap@H@cur}{1}{%
+ % ok, H>0
+ }{%
+ \pgfmathfloattofixed{\pgfplots@createcolormap@H@cur}%
+ \pgfplots@error{Colormaps must have increasing positions. The provided colormap has mesh width '\pgfmathresult' at \pgfplots@createcolormap@context. Please assign increasing positions}%
+ }%
+ \fi
+}%
+\def\pgfplots@createcolormap@compute@equalto#1#2{%
+ %\begingroup
+ %\pgfmathfloatcreate{1}{1.0}{-4}%
+ %\let\pgfmathfloat@relthresh=\pgfmathresult
+ \pgfmathfloatequalto@{#1}{#2}%
+ %\xdef\pgfplots@glob@TMPa{%
+ % \noexpand\def\noexpand\pgfmathresult{\pgfmathresult}%
+ % \ifpgfmathfloatcomparison
+ % \noexpand\pgfmathfloatcomparisontrue
+ % \else
+ % \noexpand\pgfmathfloatcomparisonfalse
+ % \fi
+ %}%
+ %\endgroup
+ %\pgfplots@glob@TMPa
+ %\message{equalto (#1,#2) = \pgfmathresult^^J}%
+}%
+\def\pgfplotscreatecolormap@reinterpolate#1{%
+ \pgfmathfloatdivide@{\pgfplots@createcolormap@H@cur}{\pgfplots@createcolormap@H}%
+ % after this group, \pgfmathresult is
+ % - empty if no reinterpolation is possible,
+ % - non-empty if reinterpolation IS possible. In this
+ % case, it contains the integer multiple of H.
+ \begingroup
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \afterassignment\pgfplots@createcolormap@nextRGB@consider@reinterpolation
+ \c@pgf@counta=\pgfmathresult\relax
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \ifx\pgfmathresult\pgfutil@empty
+ % I can't do that yet.
+ \else
+ \let\pgfplots@createcolormap@loop@end=\pgfmathresult
+ % interpolate missing values using the already fixed H.
+ % This interpolation procedure is stupid because it works
+ % only in forward direction - but it works at least.
+ % For the backwards direction, you can provide the
+ % meshwidth explicitly at
+ % \pgfplotscreatecolormap{}{[1pt]}
+ \pgfplotsforeachungrouped \c@pgfplots@createcolormap in {1,2,...,\pgfplots@createcolormap@loop@end} {%
+ \pgfmathfloatequalto@{\c@pgfplots@createcolormap}{\pgfplots@createcolormap@loop@end}%
+ \ifpgfmathfloatcomparison
+ % omit the last.
+ \else
+ \pgfmathparse{\c@pgfplots@createcolormap/\pgfplots@createcolormap@loop@end}%
+ \let\pgfplots@createcolormap@scale@current=\pgfmathresult
+ \pgfmathparse{1-\pgfplots@createcolormap@scale@current}%
+ \let\pgfplots@createcolormap@scale@last=\pgfmathresult
+ %
+ \pgfmathfloattofixed\pgfplots@createcolormap@scale@current
+ \let\pgfplots@createcolormap@scale@current=\pgfmathresult
+ \pgfmathfloattofixed\pgfplots@createcolormap@scale@last
+ \let\pgfplots@createcolormap@scale@last=\pgfmathresult
+ %
+ \pgfplotscolornormalizesequencezero
+ \pgfplotscolornormalizesequenceaddweighted
+ {\pgfplotsretval}%
+ {\pgfplots@createcolormap@scale@current}%
+ {#1}%
+ \pgfplotscolornormalizesequenceaddweighted
+ {\pgfplotsretval}%
+ {\pgfplots@createcolormap@scale@last}%
+ {\pgfplots@createcolormap@last}%
+ %
+%\message{interpolation step \c@pgfplots@createcolormap = \pgfplotsretval^^J}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplotsarraypushback{\pgfplotsretval}%
+ \noexpand\to}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@createcolormap@name}%
+ \fi
+ }%
+ \fi
+}%
+\def\pgfplots@createcolormap@nextRGB@consider@reinterpolation#1\relax{%
+ \pgf@xa=#1pt
+ \ifdim\pgf@xa>0.5pt % we have something like 99.995 or so.
+ % round up and compute 1 - #1:
+ \advance\c@pgf@counta by1
+ \pgf@xa=1pt \advance\pgf@xa by-#1pt
+ \fi
+ %
+ % compute relative error:
+ \pgf@xb=\the\c@pgf@counta pt
+ \divide\pgf@xb by10000
+%\message{Checking H/h = \pgfplots@createcolormap@H@cur pt/\pgfplots@createcolormap@H pt = \the\c@pgf@counta+-\pgf@sys@tonumber\pgf@xa\space: \the\pgf@xa > \the\pgf@xb\space (relative to \the\c@pgf@counta)?}%
+ %
+ \ifdim\pgf@xa>\pgf@xb
+ \begingroup
+ \if2\b@pgfplotscreatecolormap@isuniform
+ \pgfplots@error{Non-uniform colormaps are only supported if you write 'compat=1.14' (or higher). Please adopt the compatibility level and retry. The error occured near '\pgfplots@createcolormap@context'}%
+ \else
+ \pgfmathfloattofixed{\pgfplots@createcolormap@H}%
+ \let\pgfplots@createcolormap@H=\pgfmathresult
+ \pgfmathfloattofixed{\pgfplots@createcolormap@H@cur}%
+ \let\pgfplots@createcolormap@H@cur=\pgfmathresult
+ \pgfplots@error{The provided colormap positions are not multiples of the prescribed mesh width h=\pgfplots@createcolormap@H\space (found one with H/h = \pgfplots@createcolormap@H@cur/\pgfplots@createcolormap@H = \the\c@pgf@counta+-\pgf@sys@tonumber\pgf@xa\space which is no integer). The error occured near `\pgfplots@createcolormap@context'}%
+ \fi
+ \endgroup
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ \ifnum\c@pgf@counta=0
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ \edef\pgfmathresult{\the\c@pgf@counta}%
+ \fi
+ \fi
+}%
+
+\def\pgfplots@colormap@LUA@new#1{%
+ \ifpgfplots@LUA@supported
+ \begingroup
+ \pgfplotscolormapserializecomponentstomacro{#1}\pgfplots@values
+ \pgfplotscolormapserializeXtomacro{#1}\pgfplots@pos
+ \pgfplotsutil@directlua{%
+ local colorspace =^^J%
+ pgfplots.\csname pgfpl@cm@#1@colspace\endcsname;^^J%
+ if colorspace then^^J%
+ pgfplots.ColorMaps["#1"] = pgfplots.ColorMap.new(^^J%
+ \csname pgfpl@cm@#1@h\endcsname,^^J%
+ colorspace,^^J%
+ { \pgfplots@values },^^J
+ { \pgfplots@pos },^^J
+ "\csname pgfpl@cm@#1@X@scale@order@z\endcsname"^^J
+ );^^J%
+ else^^J%
+ io.write("There is no LUA colorspace for '\csname pgfpl@cm@#1@colspace\endcsname' - skipping LUA color map definition of #1\string\n");^^J%
+ end^^J%
+ }%
+ \endgroup
+ \fi
+}%
+
+% Executes '#2' if the colormap named '#1' has a uniform grid and '#3'
+% if not.
+\def\pgfplotscolormapifisuniform#1#2#3{%
+ \ifnum0=\pgfplotsarraysizeof{pgfpl@cm@#1@X}\relax
+ #2\relax
+ \else
+ #3\relax
+ \fi
+}%
+
+% Shows debug info about colormap #1 into the console.
+\def\pgfplots@colormap@showdebuginfofor#1{%
+ \message{Debug info for color map '#1':^^J}%
+ \message{(Transformed) Range: [0:\pgfplotscolormaprange]; ^^J}%
+ \message{H: \csname pgfpl@cm@#1@h\endcsname; ^^J}%
+ \message{H:^{-1}: \csname pgfpl@cm@#1@invh\endcsname; ^^J}%
+ \pgfplotsarraysizetomacro{pgfpl@cm@#1}\to\pgfplots@loc@TMPa
+ \message{Size: \pgfplots@loc@TMPa; ^^J}%
+ \message{Colorspace: \csname pgfpl@cm@#1@colspace\endcsname^^JValues (\csname pgfpl@cm@#1@col@comps\endcsname\space components each): ^^J}%
+ \begingroup
+ \c@pgf@counta=0
+ \pgfplotscolormapifisuniform{#1}{%
+ \pgfplotsarrayforeachungrouped{pgfpl@cm@#1}\as\elem{%
+ \pgfmath@basic@multiply@{\the\c@pgf@counta}{\csname pgfpl@cm@#1@h\endcsname}%
+ \message{\#\the\c@pgf@counta=(\pgfmathresult)=(\elem);^^J}%
+ \advance\c@pgf@counta by1 %
+ }%
+ }{%
+ \pgfplotsarrayforeachungrouped{pgfpl@cm@#1}\as\elem{%
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#1@X}\to\pgfmathresult
+ \message{\#\the\c@pgf@counta=(\pgfmathresult)=(\elem);^^J}%
+ \advance\c@pgf@counta by1 %
+ }%
+ }%
+ \message{^^J}%
+ \endgroup
+}
+
+% #1: comma-separated list of values for the current entry
+% #2: color map name
+% #3: the current index into the colormap
+% #4: the "x coordinate", i.e. the offset within the colormap
+%
+% Defines \pgfplotsretval
+%
+% Example:
+% \pgfplotscolormaptodatafile[
+% output each nth=1,
+% output format=csv,
+% ]{viridis}
+% {viridis.dat}
+\def\pgfplotscolormaptodatafile@elem#1#2#3#4{%
+ \let\pgfplotsretval=\pgfutil@empty
+}%
+
+\begingroup
+\catcode`\[=1
+\catcode`\]=2
+\catcode`\{=12
+\catcode`\}=12
+\xdef\pgfplots@lbrace[{]%
+\xdef\pgfplots@rbrace[}]%
+\endgroup
+
+
+\pgfkeys{
+ /pgfplots/colormap/output each nth/.initial=1,
+ /pgfplots/colormap/output format/.is choice,
+ /pgfplots/colormap/output format/csv/.code={%
+ \def\pgfplotscolormaptodatafile@head##1{%
+ \let\pgfplotsretval=\pgfutil@empty
+ }%
+ \def\pgfplotscolormaptodatafile@elem##1##2##3##4{%
+ \edef\pgfplotsretval{##4,##1}%
+ }%
+ \def\pgfplotscolormaptodatafile@foot##1{%
+ \let\pgfplotsretval=\pgfutil@empty
+ }%
+ },
+ /pgfplots/colormap/output format/native/.code={%
+ \def\pgfplotscolormaptodatafile@head##1{%
+ \edef\pgfplotsretval{\string\pgfplotsset\pgfplots@lbrace colormap={##1}\pgfplots@lbrace}%
+ }%
+ \def\pgfplotscolormaptodatafile@elem##1##2##3##4{%
+ \edef\pgfplotsretval{\csname pgfpl@cm@##2@colspace\endcsname=(##1)}%
+ }%
+ \def\pgfplotscolormaptodatafile@foot##1{%
+ \edef\pgfplotsretval{\pgfplots@rbrace\pgfplots@rbrace}%
+ }%
+ },
+ /pgfplots/colormap/output format=csv,
+}
+
+
+% An export of a color map.
+% #1: options. Can use 'output each nth=2' and 'output format=csv|native'
+% #2: a color map
+% #3: a data file
+\def\pgfplotscolormaptodatafile{\pgfutil@ifnextchar[{\pgfplotscolormaptodatafile@}{\pgfplotscolormaptodatafile@[]}}%
+\def\pgfplotscolormaptodatafile@[#1]#2#3{%
+ \begingroup
+ \pgfqkeys{/pgfplots/colormap}{#1}%
+ \pgfkeysgetvalue{/pgfplots/colormap/output each nth}{\pgfplots@eachnth}%
+ \immediate\openout\w@pgf@writea=#3\relax
+ \pgfplotscolormaptodatafile@head{#2}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \immediate\write\w@pgf@writea{%
+ \pgfplotsretval
+ }%
+ \fi
+ \gdef\pgfplots@eachnth@cur{0}%
+ \pgfplotsarrayforeach{pgfpl@cm@#2}\as\elem{%
+ \ifnum\pgfplots@eachnth@cur=0\relax
+ \gdef\pgfplots@eachnth@cur{0}%
+ \pgfplotscolormapifisuniform{#2}{%
+ \pgfmath@basic@multiply@{\pgfplotsarrayforeachindex}{\csname pgfpl@cm@#2@h\endcsname}%
+ }{%
+ \pgfplotsarrayselect\pgfplotsarrayforeachindex\of{pgfpl@cm@#1@X}\to\pgfmathresult
+ }%
+ \edef\pgfplots@loc@TMPa{{\elem}{#2}{\pgfplotsarrayforeachindex}{\pgfmathresult}}%
+ \expandafter\pgfplotscolormaptodatafile@elem\pgfplots@loc@TMPa
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \immediate\write\w@pgf@writea{%
+ \pgfplotsretval
+ }%
+ \fi
+ \fi
+ \pgfplotsutil@advancestringcounter@global\pgfplots@eachnth@cur%
+ \ifnum\pgfplots@eachnth@cur=\pgfplots@eachnth\relax
+ \gdef\pgfplots@eachnth@cur{0}%
+ \fi
+ }%
+ \pgfplotscolormaptodatafile@foot{#2}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \immediate\write\w@pgf@writea{%
+ \pgfplotsretval
+ }%
+ \fi
+ \immediate\closeout\w@pgf@writea
+ \endgroup
+}
+
+% Defines \pgfplotsretval to contain the mesh width of colormap #1.
+% If the color map has a non-uniform grid, it returns the SMALLEST
+% encountered mesh width.
+\def\pgfplotscolormapgetmeshwidth#1{%
+ \expandafter\let\expandafter\pgfplotsretval\csname pgfpl@cm@#1@h\endcsname%
+}%
+
+% defines macro #2 to contain a serialized variant of the color
+% components (only the color components!)
+\def\pgfplotscolormapserializecomponentstomacro#1#2{%
+ \pgfplotscolormapserialize@to@macro{pgfpl@cm@#1}{#2}%
+}
+\def\pgfplotscolormapserialize@to@macro#1#2{%
+ \pgfplotsapplistXnewempty\pgfplots@serialize@list@
+ \pgfplots@loc@tmptrue
+ \expandafter\pgfplotsarrayforeachungrouped\expandafter{#1}\as\elem{%
+ \ifpgfplots@loc@tmp
+ \expandafter\pgfplotsapplistXpushback\expandafter{\expandafter{\elem}}\to\pgfplots@serialize@list@
+ \pgfplots@loc@tmpfalse
+ \else
+ \expandafter\pgfplotsapplistXpushback\expandafter,\expandafter{\elem}\to\pgfplots@serialize@list@
+ \fi
+ }%
+ \pgfplotsapplistXlet#2=\pgfplots@serialize@list@
+}%
+
+\def\pgfplotscolormapserialize@to@macro@nobraces#1#2{%
+ \pgfplotsapplistXnewempty\pgfplots@serialize@list@
+ \pgfplots@loc@tmptrue
+ \expandafter\pgfplotsarrayforeachungrouped\expandafter{#1}\as\elem{%
+ \ifpgfplots@loc@tmp
+ \expandafter\pgfplotsapplistXpushback\elem\to\pgfplots@serialize@list@
+ \pgfplots@loc@tmpfalse
+ \else
+ \expandafter\pgfplotsapplistXpushback\expandafter,\elem\to\pgfplots@serialize@list@
+ \fi
+ }%
+ \pgfplotsapplistXlet#2=\pgfplots@serialize@list@
+}%
+\def\pgfplotscolormapserializeXtomacro#1#2{%
+ \pgfplotscolormapserialize@to@macro@nobraces{pgfpl@cm@#1@X}{#2}%
+}%
+
+% Copies the contents of the colormap named '#1' into a macro '#2'.
+% Invocation of the macro will then re-create the colormap.
+%
+% #1: color map name
+% #2: a macro name
+\def\pgfplotscolormapserializetomacro#1#2{%
+ \begingroup
+ \pgfplotscolormapserializecomponentstomacro{#1}\pgfplots@serialize@list
+ \pgfplotscolormapserializeXtomacro{#1}\pgfplots@serialize@list@X
+ \toks0={\expandafter\def\csname pgfpl@cm@#1@h\endcsname}%
+ \toks1={\expandafter\def\csname pgfpl@cm@#1@invh\endcsname}%
+ \toks2={%
+ \pgfplotsarraynewempty{pgfpl@cm@#1}%
+ \expandafter\pgfplotsutilforeachcommasep\pgfplots@loc@TMPa\as\pgfplots@loc@TMPb{%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPb\to{pgfpl@cm@#1}%
+ \fi
+ }%
+ }%
+ \toks3=\expandafter{\pgfplots@serialize@list}%
+ \toks4=\expandafter{\expandafter\def\csname pgfpl@cm@#1@colspace\endcsname}%
+ \toks5=\expandafter{\expandafter\def\csname pgfpl@cm@#1@col@comps\endcsname}%
+ \toks6=\expandafter{\expandafter\def\csname pgfpl@cm@#1@lastindex\endcsname}%
+ \toks7={%
+ \pgfplotsarraynewempty{pgfpl@cm@#1@X}%
+ \expandafter\pgfplotsutilforeachcommasep\pgfplots@loc@TMPa\as\pgfplots@loc@TMPb{%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPb\to{pgfpl@cm@#1@X}%
+ \fi
+ }%
+ }%
+ \toks8=\expandafter{\pgfplots@serialize@list@X}%
+ \xdef\pgfplots@glob@TMPa{%
+ \the\toks0 {\csname pgfpl@cm@#1@h\endcsname}%
+ \the\toks1 {\csname pgfpl@cm@#1@invh\endcsname}%
+ \noexpand\def\noexpand\pgfplots@loc@TMPa{\the\toks3 }%
+ \the\toks2
+ \the\toks4 {\csname pgfpl@cm@#1@colspace\endcsname}%
+ \the\toks5 {\csname pgfpl@cm@#1@col@comps\endcsname}%
+ \the\toks6 {\csname pgfpl@cm@#1@lastindex\endcsname}%
+ \noexpand\def\noexpand\pgfplots@loc@TMPa{\the\toks8 }%
+ \the\toks7
+ \def\expandafter\noexpand\csname pgfpl@cm@#1@X@scale@order@z\endcsname{\csname pgfpl@cm@#1@X@scale@order@z\endcsname}%
+ }%
+ \endgroup
+ \let#2=\pgfplots@glob@TMPa
+}%
+
+% Defines \pgfplotsretval to contain an argument for use in \foreachlist
+% which results in all the positions.
+%
+% [#1:#2] : the desired output domain. The smallest position will be
+% mapped to #1, the largest to #2, and all in-between will be mapped
+% accordingly.
+% #3: the colormap name.
+%
+% Note that this switch depends on the current value of 'colormap
+% access': piecewise constant may use different positions.
+%
+% On output, \pgfplotsretval will contain the result.
+\def\pgfplotscolormapgetpositions[#1:#2]#3{%
+ \begingroup
+ \if d\pgfplots@colormap@access
+ \edef\pgfplotsretval{0,1,...,\pgfplotscolormaplastindexof{#3}}%
+ \else
+ \if m\pgfplots@colormap@access
+ \def\b@pgfplots@extra@interval{0}%
+ \edef\pgfplots@H{\csname pgfpl@cm@#3@h\endcsname}%
+ \else
+ \if c\pgfplots@colormap@access
+ \pgfplotscolormap@piecewiseconst@prepare@scale{#3}%
+ \edef\pgfplots@H{\pgf@sys@tonumber\pgf@x}%
+ \fi
+ \fi
+ %
+ \pgfkeys{/pgf/fpu}%
+ \pgfplotsapplistXnewempty\pgfplots@resultaccum
+ \pgfplotscolormapifisuniform{#3}{%
+ \pgfmathparse{#1 + (#2-#1) * \pgfplots@H/1000}%
+ \let\next=\pgfmathresult
+ \pgfmathparse{#2}% + (#2-#1)/1000}%
+ %
+ \def\b@pgfplots@isfirst{1}%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplotsforeachungrouped\noexpand \x in {#1,\next,...,\pgfmathresult}}%
+ \pgfplots@loc@TMPa{%
+ \if0\b@pgfplots@isfirst
+ \pgfplotsapplistXpushback,\to\pgfplots@resultaccum
+ \fi
+ \expandafter\pgfplotsapplistXpushback\expandafter{\x}\to\pgfplots@resultaccum
+ \def\b@pgfplots@isfirst{0}%
+ }%
+ }{%
+ \pgfmathparse{(#2-#1)/1000}%
+ \let\pgfplots@scale=\pgfmathresult
+ \pgfplotsarrayforeachungrouped{pgfpl@cm@#3@X}\as\pgfplots@loc@TMPc{%
+ \if m\pgfplots@colormap@access
+ % colormap access=map
+ \pgfmathparse{#1 + \pgfplots@loc@TMPc * \pgfplots@scale}%
+ \else
+ \if1\b@pgfplots@extra@interval
+ \pgfmathparse{#1 + \pgfplots@loc@TMPc * \pgfplots@H* \pgfplots@scale}%
+ \else
+ % DISABLE additional interval!
+ % Means: use the input position as usual:
+ \pgfmathparse{#1 + \pgfplots@loc@TMPc * \pgfplots@scale}%
+ \fi
+ \fi
+ \ifnum\pgfplotsarrayforeachindex>0
+ \pgfplotsapplistXpushback,\to\pgfplots@resultaccum
+ \fi
+ \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfmathresult}\to\pgfplots@resultaccum
+ }%
+ \if1\b@pgfplots@extra@interval
+ \pgfmathparse{#2}%
+ \pgfplotsapplistXpushback,\to\pgfplots@resultaccum
+ \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfmathresult}\to\pgfplots@resultaccum
+ \fi
+ }%
+ \pgfplotsapplistXlet\pgfplotsretval=\pgfplots@resultaccum
+ \fi
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% this is a CONSTANT! Do NOT change it!
+% Just read it -- just in case \pgfplotscolormaptopdffunction will use
+% a different upper bound in the future.
+\def\pgfplotscolormappdfmax{1000}%
+\def\pgfplotscolormappdfmax@inv{1}%
+
+% Expands to the size of colormap #1 .
+\def\pgfplotscolormapsizeof#1{%
+ \pgfplotscolormapifdefined{#1}{%
+ \pgfplotsarraysizeof{pgfpl@cm@#1}%
+ }{%
+ 0%
+ }%
+}%
+
+% Defines \pgfplotsretval to contain the color of color map '#1' at
+% index '#2'
+\def\pgfplotscolormapgetcolor#1#2{%
+ \pgfplotsarrayselect{#2}\of{pgfpl@cm@#1}\to\pgfplotsretval
+}%
+
+% Expands to the last index of colormap #1 (or -1)
+\def\pgfplotscolormaplastindexof#1{%
+ \pgfplotscolormapifdefined{#1}{%
+ \csname pgfpl@cm@#1@lastindex\endcsname%
+ }{%
+ -1%
+ }%
+}%
+
+% POSTCONDITION:
+% 1. for uniform #1:
+% \pgf@x contains the MODIFIED mesh width
+% \b@pgfplots@extra@interval is 1 if and only if an extra interval
+% should be added
+% 2. for non-uniform #1:
+% \pgf@x is a scaling factor to map input positions to MODIFIED
+% positions
+% \b@pgfplots@extra@interval is 1 if and only if an extra interval
+\def\pgfplotscolormap@piecewiseconst@prepare@scale#1{%
+ % advance the number of intervals by 1.
+ \pgfplotscolormapifisuniform{#1}{%
+ % To this end, we have to compute
+ % N = n+1
+ % and
+ % H = 1000 / (N-1) = 1000/n.
+ % Store H in \pgf@x:
+ \expandafter\ifx\csname pgfpl@cm@#1@X@scale@order@z\endcsname\pgfutil@empty%
+ \c@pgf@countd=\pgfplotscolormapsizeof{#1}\relax
+ %
+ \global\pgf@x=1000pt %
+ \global\divide\pgf@x by\c@pgf@countd
+ \def\b@pgfplots@extra@interval{1}%
+ \else
+ % DISABLE the extra interval!
+ \global\pgf@x=\csname pgfpl@cm@#1@h\endcsname pt %
+ \def\b@pgfplots@extra@interval{0}%
+ \fi
+ }{%
+ % the very same idea as for uniform colormaps applies
+ % for non-uniform maps as well: we create an
+ % artificial interval at the rightmost end.
+ % The idea is to think of a temporary map in the range
+ % [0,1000+ h] where h is the current colormap's
+ % mesh width.
+ % Since the domain is [0,1000], we map [0,1000+h]
+ % linearly into [0,1000].
+ %
+ % This here is the scaling factor:
+ \global\pgf@x=\csname pgfpl@cm@#1@X@scale@order@z\endcsname pt %
+ % see also
+ % \pgfplotscolormapfindpiecewiseconst@precomputed for
+ % comments
+ \ifdim\pgf@x>0sp %
+ \def\b@pgfplots@extra@interval{1}%
+ \else
+ % disable it
+ \def\b@pgfplots@extra@interval{0}%
+ \fi
+ }%
+}%
+
+% #1: colormap name
+% #2: yes code
+% #3: no code
+\def\pgfplotscolormapifrequiresextrainterval#1#2#3{%
+ \if c\pgfplots@colormap@access
+ \pgfplotscolormapifisuniform{#1}{%
+ \expandafter\ifx\csname pgfpl@cm@#1@X@scale@order@z\endcsname\pgfutil@empty%
+ % no...
+ #3\relax%
+ \else
+ % yes:
+ #2\relax%
+ \fi
+ }{%
+ \ifdim\csname pgfpl@cm@#1@X@scale@order@z\endcsname pt>0pt
+ % yes:
+ #2\relax%
+ \else
+ % no:
+ #3\relax%
+ \fi
+ }%
+ \else
+ % no:
+ #3\relax%
+ \fi
+}%
+% #1: colormap name
+% #2: yes code
+% #3: no code
+\def\pgfplotscolormapifdrawslastcolor#1#2#3{%
+ \pgfplotscolormapifrequiresextrainterval{#1}{%
+ #2\relax%
+ }{%
+ \if c\pgfplots@colormap@access
+ #3\relax%
+ \else
+ #2\relax%
+ \fi
+ }%
+}%
+
+% Writes a PDF function of /FunctionType 3 to \pgfplotsretval
+%
+% The /Domain argument will be set to [ 0 \pgfplotscolormappdfmax ] and bounds will be
+% computed accordingly.
+%
+% Note that the value depends on 'colormap access'
+%
+% #1: the colormap
+\def\pgfplotscolormaptopdffunction#1{%
+ \begingroup
+ \pgfplotscolormapassertexists{#1}%
+ \pgfplotsapplistXnewempty\pgfplots@resultaccum
+ \pgfplotsapplistXpushback{
+ <<
+ /FunctionType 3
+ /Domain [0 \pgfplotscolormappdfmax]
+ /Functions [
+ }\to\pgfplots@resultaccum%
+ \c@pgf@counta=0
+ \c@pgf@countb=\pgfplotsarraysizeof{pgfpl@cm@#1} %
+ \advance\c@pgf@countb by-1
+ \def\pgfplots@loc@TMPa{}%
+ \pgfplotsapplistXnewempty\pgfplots@bounds@accum%
+ \pgfplotsapplistXnewempty\pgfplots@encode@accum
+ \ifnum\csname pgfpl@cm@#1@col@comps\endcsname>4
+ \pgfplots@error{Sorry, processing more than 4 color components (as required for color map #1) is unsupported in this context}%
+ \fi
+ %
+ \def\b@pgfplots@extra@interval{0}%
+ \if m\pgfplots@colormap@access
+ % colormap access=map
+ \def\pgfplots@order{1}%
+ \global\pgf@x=\csname pgfpl@cm@#1@h\endcsname pt %
+ \def\pgfplots@C@left{C0}%
+ \def\pgfplots@C@right{C1}%
+ \else
+ \if c\pgfplots@colormap@access
+ % colormap access=piecewise constant
+ % This has a dedicated special interval at the rightmost
+ % end.
+ % See comments in pgfplotscolormapfindpiecewiseconst@precomputed@
+ \def\pgfplots@order{0}%
+ %
+ \pgfplotscolormap@piecewiseconst@prepare@scale{#1}%
+ %
+ % interchange the sequence in the PDF function as it is
+ % defined as
+ % y = C0 + x^0 * (C1 - C0) = C1
+ % -> we want the left interval boundary.
+ \def\pgfplots@C@left{C1}%
+ \def\pgfplots@C@right{C0}%
+ \else
+ % colormap access=direct
+ \pgfplots@error{This should never happen}%
+ % ?
+ \def\pgfplots@order{0}%
+ \global\pgf@x=\csname pgfpl@cm@#1@h\endcsname pt %
+ \def\pgfplots@C@left{C0}%
+ \def\pgfplots@C@right{C1}%
+ \fi
+ \fi
+ %
+ \pgfplotsarrayforeachungrouped{pgfpl@cm@#1}\as\cdata{%
+ \edef\cdata{%
+ \expandafter
+ \expandafter
+ \csname pgfplotscolormaptopdffunction@convertcdata@\csname pgfpl@cm@#1@col@comps\endcsname\endcsname
+ \cdata\relax
+ }%
+ \ifnum\c@pgf@counta>0
+ \edef\pgfplots@loc@TMPd{%
+ <<
+ /FunctionType 2
+ /Domain [0 \pgfplotscolormappdfmax]
+ /\pgfplots@C@left\space [\pgfplots@loc@TMPa] /\pgfplots@C@right\space [\cdata]
+ /N \pgfplots@order
+ >>
+ }%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPd}\to\pgfplots@resultaccum
+ \ifnum\c@pgf@counta<\c@pgf@countb\relax
+ \pgfplotscolormapifisuniform{#1}{%
+ \pgf@xa=\pgf@x
+ \multiply\pgf@xa by\c@pgf@counta\relax
+ }{%
+ \pgfplotsarrayselect{\c@pgf@counta}\of{pgfpl@cm@#1@X}\to\pgfplots@loc@TMPc
+ \if m\pgfplots@colormap@access
+ % colormap access=map
+ \pgf@xa=\pgfplots@loc@TMPc pt %
+ \else
+ \if1\b@pgfplots@extra@interval
+ \pgf@xa=\pgfplots@loc@TMPc\pgf@x%
+ \else
+ % DISABLE additional interval!
+ % Means: use the input position as usual:
+ \pgf@xa=\pgfplots@loc@TMPc pt %
+ \fi
+ \fi
+ }%
+ \divide\pgf@xa by\pgfplotscolormappdfmax@inv\relax% we want [ 0 1 ] not [0 1000] as domain XXX : why!?
+ \edef\pgfplots@loc@TMPc{ \pgf@sys@tonumber\pgf@xa}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPc}\to\pgfplots@bounds@accum%
+ \fi
+ \pgfplotsapplistXpushback{ 0 1}\to\pgfplots@encode@accum%
+ \fi
+ \let\pgfplots@loc@TMPa=\cdata
+ \advance\c@pgf@counta by1
+ }%
+ \if1\b@pgfplots@extra@interval
+ % add an artificial interval.
+ \edef\pgfplots@loc@TMPd{%
+ <<
+ /FunctionType 2
+ /Domain [0 \pgfplotscolormappdfmax]
+ /\pgfplots@C@left\space [\cdata] /\pgfplots@C@right\space [\cdata]
+ /N \pgfplots@order
+ >>
+ }%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPd}\to\pgfplots@resultaccum
+ \advance\c@pgf@counta by-1 %
+ \pgfplotscolormapifisuniform{#1}{%
+ \pgf@xa=\pgf@x
+ \multiply\pgf@xa by\c@pgf@counta\relax
+ }{%
+ \pgfplotsarrayselect{\c@pgf@counta}\of{pgfpl@cm@#1@X}\to\pgfplots@loc@TMPc
+ \pgf@xa=\pgfplots@loc@TMPc\pgf@x%
+ }%
+ \divide\pgf@xa by\pgfplotscolormappdfmax@inv\relax% we want [ 0 1 ] not [0 1000] as domain XXX : why!?
+ \edef\pgfplots@loc@TMPc{ \pgf@sys@tonumber\pgf@xa}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPc}\to\pgfplots@bounds@accum%
+ \pgfplotsapplistXpushback{ 0 1}\to\pgfplots@encode@accum%
+ \fi
+ \pgfplotsapplistXlet\pgfplotsretval=\pgfplots@resultaccum
+ \pgfplotsapplistXlet\pgfplotsbounds=\pgfplots@bounds@accum
+ \pgfplotsapplistXlet\pgfplotsencode=\pgfplots@encode@accum
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsbounds}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotsencode}%
+ \xdef\pgfplots@glob@TMPa{%
+ \the\t@pgfplots@toka
+ ]
+ /Bounds [\the\t@pgfplots@tokb]
+ /Encode [\the\t@pgfplots@tokc]
+ >>
+ }%
+ \endgroup
+ \let\pgfplotsretval=\pgfplots@glob@TMPa
+}%
+\expandafter\def\csname pgfplotscolormaptopdffunction@convertcdata@1\endcsname#1\relax{#1}%
+\expandafter\def\csname pgfplotscolormaptopdffunction@convertcdata@2\endcsname#1,#2\relax{#1 #2}%
+\expandafter\def\csname pgfplotscolormaptopdffunction@convertcdata@3\endcsname#1,#2,#3\relax{#1 #2 #3}%
+\expandafter\def\csname pgfplotscolormaptopdffunction@convertcdata@4\endcsname#1,#2,#3,#4\relax{#1 #2 #3 #4}%
+
+% Invokes '#2' if a color map named '#1' exists and '#3' if no such color map exists.
+\def\pgfplotscolormapifdefined#1#2#3{\pgfplotsarrayifdefined{pgfpl@cm@#1}{#2}{#3}}%
+
+\def\pgfplotscolormapassertexists#1{%
+ \pgfplotscolormapifdefined{#1}{}{%
+ \pgfutil@ifundefined{pgfplotscolormap@errorissued@#1}{%
+ \pgfplots@error{The colormap `#1' is undefined! Maybe you misspelled it?}%
+ }{}%
+ \expandafter\gdef\csname pgfplotscolormap@errorissued@#1\endcsname{1}%
+ \pgfplotscreatecolormap{#1}{color(0cm)=(blue); color(1cm)=(yellow)}%
+ }%
+}
+
+% Convert a colormap into a PGF shading's color specification for use
+% in \pgfdeclare*shading.
+%
+% #1: the colormap's name.
+% #2: the PGF "size" of the shading. It is used to set the right end
+% of the color specification.
+% #3: a macro which will be filled with the result.
+%
+% Example:
+% \pgfplotscolormaptoshadingspec{my colormap}{4cm}{\output}
+% \def\tempb{\pgfdeclarehorizontalshading{myshadingA}{1cm}}
+% \expandafter\tempb\expandafter{\temp}
+%
+% \pgfuseshading{myshadingA}
+\def\pgfplotscolormaptoshadingspec#1#2#3{%
+ \pgfplotscolormapassertexists{#1}%
+ \begingroup
+ \def\pgfplots@rgb{rgb}%
+ \pgfmathparse{#2}%
+ \expandafter\pgfmathdivide@\expandafter{\pgfmathresult}{\pgfplotscolormaprange}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfmathmultiply@{\csname pgfpl@cm@#1@h\endcsname}{\pgfplots@loc@TMPb}%
+ \pgf@ya=\pgfmathresult pt
+ \c@pgf@counta=0
+ \let#3=\pgfutil@empty
+ \pgfplotsarrayforeachungrouped{pgfpl@cm@#1}\as\pgfplotscolormaptoshadingspec@TMP{%
+ \pgfplotscolormapifisuniform{#1}{%
+ \pgf@yb=\c@pgf@counta\pgf@ya
+ }{%
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#1@X}\to\pgfplots@loc@TMPd
+ \pgfmathmultiply@{\pgfplots@loc@TMPd}{\pgfplots@loc@TMPb}%
+ \pgf@yb=\pgfmathresult pt %
+ }%
+ \edef\pgfplots@colspace{\csname pgfpl@cm@#1@colspace\endcsname}%
+ % FIXME : PGF shadings accept only RGB!
+ \if1\pgfplotscolormaptoshadingspectorgb
+ \ifx\pgfplots@colspace\pgfplots@rgb
+ \else
+ \pgfutil@ifundefined{pgfpl@cm@#1@warned}{%
+ \expandafter\gdef\csname pgfpl@cm@#1@warned\endcsname{1}%
+ \pgfplotswarning{lossy colormap rgb conversion}{#1}{\pgfplots@colspace}\pgfeov%
+ }{%
+ }%
+ \edef\pgf@tempcolor{{\pgfplots@colspace}{\pgfplotscolormaptoshadingspec@TMP}}%
+ \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{rgb}{\pgfplotscolormaptoshadingspec@TMP}%
+ \def\pgfplots@colspace{rgb}%
+ \fi
+ \fi
+ \edef\pgfplots@loc@TMPc{\pgfplots@colspace(\the\pgf@yb)=(\pgfplotscolormaptoshadingspec@TMP)}%
+ \ifx#3\pgfutil@empty
+ \t@pgfplots@toka={}%
+ \else
+ \t@pgfplots@toka=\expandafter{#3; }%
+ \fi
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPc}%
+ \edef#3{\the\t@pgfplots@toka \the\t@pgfplots@tokb }%
+ \advance\c@pgf@counta by1
+ }%
+ \pgfmath@smuggleone#3%
+ \endgroup
+}%
+\def\pgfplotscolormaptoshadingspectorgb{1}%
+
+% The same as \pgfplotscolormaptoshadingspec, but this here yields the
+% *reversed* sequence.
+\def\pgfplotscolormapreversedtoshadingspec#1#2#3{%
+ \begingroup
+ \let\pgfplotsarrayforeachungrouped=\pgfplotsarrayforeachreversedungrouped
+ \pgfplotscolormaptoshadingspec{#1}{#2}{#3}%
+ \pgfmath@smuggleone#3%
+ \endgroup
+}%
+
+
+% Expands to the transformed range's right end of every colormap. The left
+% end is fixed to '0'.
+\def\pgfplotscolormaprange{1000}
+\pgfmathfloatcreate{1}{1.0}{3}%
+\let\pgfplotscolormaprange@float=\pgfmathresult
+
+\def\pgfplotscolormapgetcolorspace#1{%
+ \edef\pgfplotsretval{\csname pgfpl@cm@#1@colspace\endcsname}%
+}%
+\def\pgfplotscolormapgetcolorcomps#1{%
+ \edef\pgfplotsretval{\csname pgfpl@cm@#1@col@comps\endcsname}%
+}%
+\def\pgfplotscolormapcolorspaceof#1{%
+ \csname pgfpl@cm@#1@colspace\endcsname%
+}%
+\def\pgfplotscolormapcolorcompsof#1{%
+ \csname pgfpl@cm@#1@col@comps\endcsname%
+}%
+
+
+% Linearly maps the number #4 into the colormap #5 and returns the
+% interpolated colors into \pgfmathresult. The result will be a triple
+% for an RGB colormap and it will contain four numbers for CMYK. The
+% components of the result will be in the range [0:1].
+%
+% [#1:#2] the number range of the data source (i.e. of #4). This is required to
+% map into the colormap.
+% [#3] (optional) the quantity
+% s := \pgfplotscolormaprange / (#2-#1).
+% Precomputing this quantity may save a lot of time because
+% divisions are expensive in TeX. You can omit [#3] or
+% provide an empty string here.
+% #4 the number to map.
+% #5 the colormap's name. Must be defined with
+% \pgfplotscreatecolormap before.
+%
+% Example:
+% \pgfplotscolormapfind[-1:1]{0.2}{my colormap}
+\def\pgfplotscolormapfind[#1:#2]{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotscolormapfind@precomputed[#1:#2]%
+ }{%
+ \pgfplotscolormapfind@precomputed[#1:#2][]%
+ }%
+}%
+\def\pgfplotscolormapfind@precomputed[#1:#2][#3]#4#5{%
+ \ifpgfplots@LUA@supported
+ \pgfplotscolormapifisuniform{#5}{%
+ \edef\pgfmathresult{%
+ \pgfplotsutil@directlua{%
+ pgfplots.texColorMapPrecomputed("#5", "#1","#2","#4")
+ }%
+ }%
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfplotscolormapfind@precomputed@warn@LUA{#5}%
+ \pgfplotscolormapfind@precomputed@[#1:#2][#3]{#4}{#5}%
+ \else
+ %\message{LUA colormapfind[#1:#2](#4)(#5) = \pgfmathresult^^J}%
+ \fi
+ }{%
+ % FIXME : implement LUA for non-uniform colormaps
+ \pgfplotscolormapfind@precomputed@[#1:#2][#3]{#4}{#5}%
+ }%
+ \else
+ \pgfplotscolormapfind@precomputed@[#1:#2][#3]{#4}{#5}%
+ \fi
+}
+
+\def\pgfplotscolormapfind@precomputed@warn@LUA#1{%
+ \expandafter\ifx\csname pgfplotscolormapfind@precomputed@warn@LUA@#1\endcsname\relax
+ \pgfplotswarning{lua colormap unavailable}{#1}\pgfeov%
+ \expandafter\gdef\csname pgfplotscolormapfind@precomputed@warn@LUA@#1\endcsname{1}%
+ \fi
+}%
+\def\pgfplotscolormapfind@transform[#1:#2][#3]#4#5{%
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \edef\pgfplots@loc@samerange{0:\pgfplotscolormaprange}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@samerange
+ % we have phi(#4) = #4 because #4 in [0:1000].
+ \pgfmathfloatparsenumber{#4}%
+ \pgfmathfloattofixed\pgfmathresult
+ \else
+ % Step 0: compute #3 if it is missing and write it into \pgfplots@loc@TMPa.
+%\message{mapping '#4' into colormap '#5' with range [#1:#2] ... ^^J}%
+ \pgfmathfloatparsenumber{#1}%
+ \let\pgfplots@L=\pgfmathresult
+ %
+ \def\pgfplots@loc@TMPa{#3}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfmathfloatparsenumber{#2}%
+ \let\pgfplots@R=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfplots@R}{\pgfplots@L}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfmathfloatdivide@{\pgfplotscolormaprange@float}{\pgfplots@loc@TMPb}%
+ \else
+ \pgfmathfloatparsenumber{#3}%
+ \fi
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ %
+ % Step 1: perform lookup. Map #4 into the colormap's range
+ % using the linear trafo
+ % phi(#4) = ( #4 - #1 ) / (#2-#1) * colormaprange(#5).
+ % This, determine the INTERVAL number into which #4 falls.
+ \pgfmathfloatparsenumber{#4}%
+ \let\pgfplots@V=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfplots@V}{\pgfplots@L}%
+ \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfplots@loc@TMPa}%
+ \pgfmathfloattofixed\pgfmathresult
+ \fi
+ \ifdim\pgfmathresult pt<0pt %
+ \def\pgfmathresult{0}%
+ \else
+ \ifdim\pgfmathresult pt>1000pt %
+ \def\pgfmathresult{1000}%
+ \fi
+ \fi
+}%
+\def\pgfplotscolormapfind@precomputed@[#1:#2][#3]#4#5{%
+ \pgfplotscolormapassertexists{#5}%
+ \begingroup
+ \pgfplotscolormapfind@transform[#1:#2][#3]{#4}{#5}%
+ \let\pgfplotscolormapfind@transformedx=\pgfmathresult
+ %
+ % Now, we have it in [0,1000]. Find the correct interval:
+ \pgfplotscolormapifisuniform{#5}{%
+ \pgfmathmultiply@{\pgfplotscolormapfind@transformedx}{\csname pgfpl@cm@#5@invh\endcsname}%
+ \let\pgfplotscolormapfind@transformedx@divh=\pgfmathresult
+ % assign \pgfplotscolormapfind@intervalno := \pgfmathresult
+ % without '.0' suffix:
+ \expandafter\pgfplotscolormap@floor@unforgiving\pgfmathresult\relax
+ % Step 2: interpolate the desired RGB value using vector valued
+ % interpolation on the identified interval.
+ \c@pgf@counta=\pgfplotscolormapfind@intervalno\relax
+ % color^m(x) = ( (x-x_i)/(x_{i+1} - x_i) ) * (c_{i+1}^m - c_i^m ) + c_i^m
+ % = ( x/h - i ) * ( c_{i+1}^m - c_{i}^m ) + c_i^m
+ % = s * c_{i+1}^m + S * c_i^m
+ %
+ % s= x_h / h -i
+ \pgfmathsubtract@{\pgfplotscolormapfind@transformedx@divh}{\pgfplotscolormapfind@intervalno}%
+ \let\pgfplots@loc@factor=\pgfmathresult
+ }{%
+ \pgfplotsarraybinarysearch{pgfpl@cm@#5@X}{\pgfplotscolormapfind@transformedx}{0}{\pgfplotscolormapsizeof{#5}}%
+ \c@pgf@counta=\pgfplotsretval\relax
+ \ifnum\c@pgf@counta<0
+ % as per definition of \pgfplotsarraybinarysearch, a
+ % negative result indicates the "insertion point" ...
+ \c@pgf@counta=-\c@pgf@counta
+ % ... plus one.
+ \advance\c@pgf@counta by-1
+ %
+ % But we do not WANT the insertion point! We want the LEFT
+ % interval boundary!
+ \advance\c@pgf@counta by-1
+ \fi
+ %
+ % color^m(x) = ( (x-x_i)/(x_{i+1} - x_i) ) * (c_{i+1}^m - c_i^m ) + c_i^m
+ % = s * c_{i+1}^m + S * c_i^m
+ %
+ % s = (x - x_i) / (x_{i+1} - x_i)
+ \begingroup
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5@X}\to\pgfplotscolormapfind@rgb@X@left
+ \advance\c@pgf@counta by1
+ \ifnum\c@pgf@counta<\pgfplotsarraysizeof{pgfpl@cm@#5} %
+ % ok, we really have an interval
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5@X}\to\pgfplotscolormapfind@rgb@X@right
+ %
+ \pgfmathsubtract@{\pgfplotscolormapfind@rgb@X@right}{\pgfplotscolormapfind@rgb@X@left}%
+ \let\pgfplotscolormapfind@h=\pgfmathresult
+ \pgfmathsubtract@{\pgfplotscolormapfind@transformedx}{\pgfplotscolormapfind@rgb@X@left}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfmathdivide@{\pgfplots@loc@TMPa}{\pgfplotscolormapfind@h}%
+ \let\pgfplots@loc@factor=\pgfmathresult
+ \else
+ % irrelevant (not used)
+ \def\pgfplots@loc@factor{1}%
+ \fi
+ \pgfmath@smuggleone\pgfplots@loc@factor
+ \endgroup
+ }%
+ % POSTCONDITION: \c@pgf@counta is the index of the LEFT interval
+ % and \pgfplots@loc@factor is the factor for the linear interpolation.
+ %
+%\message{mapping [#1,#2] -> [0,\pgfplotscolormaprange] yielded phi(#4) = \pgfplotscolormapfind@transformedx, situated in interval no \the\c@pgf@counta.^^J}%
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5}\to\pgfplotscolormapfind@rgb@LEFT
+ %
+ % do the stuff which is specific to linear interpolation:
+ %
+ % S = 1 - s
+ \pgfmathsubtract@{1}{\pgfplots@loc@factor}%
+ \let\pgfplots@loc@factor@two=\pgfmathresult
+ %
+ \advance\c@pgf@counta by1 %
+ \ifnum\c@pgf@counta<\pgfplotsarraysizeof{pgfpl@cm@#5} %
+ % Ah: (selected index < length) . That means: we have an interval.
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5}\to\pgfplotscolormapfind@rgb@RIGHT
+%\message{After lookup: the corresponding RGB interval boundaries are [\pgfplotscolormapfind@rgb@LEFT: \pgfplotscolormapfind@rgb@RIGHT].^^J}%
+ %
+ %
+ \pgfplotscolorzero{\csname pgfpl@cm@#5@col@comps\endcsname}%
+ \pgfplotscoloraddweighted
+ {\csname pgfpl@cm@#5@col@comps\endcsname}%
+ {\pgfplotsretval}%
+ {\pgfplots@loc@factor@two}%
+ {\pgfplotscolormapfind@rgb@LEFT}%
+ \pgfplotscoloraddweighted
+ {\csname pgfpl@cm@#5@col@comps\endcsname}%
+ {\pgfplotsretval}%
+ {\pgfplots@loc@factor}%
+ {\pgfplotscolormapfind@rgb@RIGHT}%
+ \let\pgfmathresult=\pgfplotsretval
+ \else
+ % Ah: selected index = last index. Use the rightmost color!
+ \let\pgfmathresult=\pgfplotscolormapfind@rgb@LEFT
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+%\message{-> got finally mapping(#4, #5) = RGB'\pgfmathresult'.}%
+}%
+
+
+% Maps the number #4 into the colormap #5 using piecewise constant
+% interpolation. It returns the interpolated colors into \pgfmathresult. The result will be a triple
+% for an RGB colormap and it will contain four numbers for CMYK. The
+% components of the result will be in the range [0:1].
+%
+% [#1:#2] the number range of the data source (i.e. of #4). This is required to
+% map into the colormap.
+% [#3] (optional) the quantity
+% s := \pgfplotscolormaprange / (#2-#1).
+% Precomputing this quantity may save a lot of time because
+% divisions are expensive in TeX. You can omit [#3] or
+% provide an empty string here.
+% #4 the number to map.
+% #5 the colormap's name. Must be defined with
+% \pgfplotscreatecolormap before.
+%
+% Example:
+% \pgfplotscolormapfindpiecewiseconst[-1:1]{0.2}{my colormap}
+\def\pgfplotscolormapfindpiecewiseconst[#1:#2]{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotscolormapfindpiecewiseconst@precomputed[#1:#2]%
+ }{%
+ \pgfplotscolormapfindpiecewiseconst@precomputed[#1:#2][]%
+ }%
+}%
+\def\pgfplotscolormapfindpiecewiseconst@precomputed[#1:#2][#3]#4#5{%
+ \ifpgfplots@LUA@supported
+ \pgfplotscolormapifisuniform{#5}{%
+ \edef\pgfmathresult{%
+ \pgfplotsutil@directlua{%
+ pgfplots.texColorMapFindPiecewiseConst("#5", #1,#2,#4)
+ }%
+ }%
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfplotscolormapfindpiecewiseconst@precomputed@warn@LUA{#5}%
+ \pgfplotscolormapfindpiecewiseconst@precomputed@[#1:#2][#3]{#4}{#5}%
+ \else
+ %\message{LUA colormapfindpiecewiseconst[#1:#2](#4)(#5) = \pgfmathresult^^J}%
+ \fi
+ }{%
+ % FIXME : implement LUA for non-uniform colormaps
+ \pgfplotscolormapfindpiecewiseconst@precomputed@[#1:#2][#3]{#4}{#5}%
+ }%
+ \else
+ \pgfplotscolormapfindpiecewiseconst@precomputed@[#1:#2][#3]{#4}{#5}%
+ \fi
+}
+
+\def\pgfplotscolormapfindpiecewiseconst@precomputed@warn@LUA#1{%
+ \expandafter\ifx\csname pgfplotscolormapfindpiecewiseconst@precomputed@warn@LUA@#1\endcsname\relax
+ \pgfplotswarning{lua colormap unavailable}{#1}\pgfeov%
+ \expandafter\gdef\csname pgfplotscolormapfindpiecewiseconst@precomputed@warn@LUA@#1\endcsname{1}%
+ \fi
+}%
+
+\def\pgfplotscolormapfindpiecewiseconst@precomputed@[#1:#2][#3]#4#5{%
+ \pgfplotscolormapassertexists{#5}%
+ \begingroup
+ \pgfplotscolormapfind@transform[#1:#2][#3]{#4}{#5}%
+ \let\pgfplotscolormapfind@transformedx=\pgfmathresult
+ %
+ % Now, we have it in [0,1000]. Find the correct interval:
+ % In principle, we could easily find the correct interval. But the
+ % native approach has one distinct disadvantage: we will never
+ % assign the rightmost color unless #4=1000! That means that our
+ % colormap is not used entirely.
+ %
+ % I decided to enlarge the colormap artificially such that the
+ % rightmost color receives its own interval.
+ %
+ % To this end, I recompute the coordinates at which colors "live".
+ % The operations sounds more involved than it is: I simply need a NEW mesh width locally
+ % inside of this function. The new mesh width H can be computed as
+ % follows, assuming that the OLD colormap has mesh width h.
+ %
+ % H := 1000/ (N-1)
+ %
+ % N := n+1
+ % n := 1000/h + 1 = \pgfplotscolormapsizeof{#5}
+ %
+ % what I really need is:
+ % 1/H = N/1000 = (1000 h^{-1} +1)/ 1000 = h^{-1} + 1/1000
+ %
+ \pgfplotscolormapifisuniform{#5}{%
+ %
+ \expandafter\ifx\csname pgfpl@cm@#5@X@scale@order@z\endcsname\pgfutil@empty%
+ % compute 1/H here:
+ \pgfmathadd@{\csname pgfpl@cm@#5@invh\endcsname}{0.001}%
+ \let\pgfplots@piecewiseconst@invh=\pgfmathresult%
+ \else
+ % disable the extra interval
+ \expandafter\let\expandafter\pgfplots@piecewiseconst@invh\csname pgfpl@cm@#5@invh\endcsname
+ \fi
+ \pgfmathmultiply@{\pgfplotscolormapfind@transformedx}{\pgfplots@piecewiseconst@invh}%
+ \let\pgfplotscolormapfind@transformedx@divh=\pgfmathresult
+ % assign \pgfplotscolormapfind@intervalno := \pgfmathresult
+ % without '.0' suffix:
+ \expandafter\pgfplotscolormap@floor\pgfmathresult\relax
+ % Step 2: interpolate the desired RGB value using vector valued
+ % interpolation on the identified interval.
+ \c@pgf@counta=\pgfplotscolormapfind@intervalno\relax
+ }{%
+ % the same idea can also be applied to non-uniform grids.
+ % However, it is more involved here.
+ %
+ % My idea is that I add an extra interval of length 'h' at the right end of
+ % the domain, i.e. I enlarge the domain to [0,1000+h].
+ %
+ % To this end, I map the input number linearly from
+ % [0,1000] -> [0,1000+h]
+ % using k(t) = (1000+h)/1000 * t
+ %
+ % Note that k(t) = 1/ pgfpl@cm@#5@X@scale@order@z
+ %
+ % and search in the existing X coordinates of the colormap.
+ % Note that these X coordinates actually do not contain the
+ % artifical rightmost boundary point at 1000+h. But that is
+ % ok, we plan to assign COLOR(1000+h) := COLOR(1000) anyway.
+ %
+ % Naturally, some values 'k(t)' will be BEYOND '1000'. In this
+ % case, we simply use the rightmost interval and are done with
+ % it.
+ %
+ % compute k(t):
+ \ifdim\csname pgfpl@cm@#5@X@scale@order@z\endcsname pt>0pt
+ \pgfmathadd@{1000}{\csname pgfpl@cm@#5@h\endcsname}%
+ \pgf@xa=\pgfmathresult pt %
+ \divide\pgf@xa by1000 %
+ \edef\pgfplotscolormapfind@map@to@extra@interval{\pgf@sys@tonumber\pgf@xa}%
+ %
+ \pgfmathmultiply@{\pgfplotscolormapfind@transformedx}{\pgfplotscolormapfind@map@to@extra@interval}%
+ \let\pgfplotscolormapfind@transformedx@=\pgfmathresult
+ \else
+ % disable the extra interval
+ \let\pgfplotscolormapfind@transformedx@=\pgfplotscolormapfind@transformedx
+ \fi
+ %
+ % search k(t) in the original X values.
+ \pgfplotsarraybinarysearch{pgfpl@cm@#5@X}{\pgfplotscolormapfind@transformedx@}{0}{\pgfplotscolormapsizeof{#5}}%
+ \c@pgf@counta=\pgfplotsretval\relax
+ \ifnum\c@pgf@counta<0
+ % as per definition of \pgfplotsarraybinarysearch, a
+ % negative result indicates the "insertion point" ...
+ \c@pgf@counta=-\c@pgf@counta
+ % ... plus one.
+ \advance\c@pgf@counta by-1
+ %
+ % But we do not WANT the insertion point! We want the LEFT
+ % interval boundary!
+ \advance\c@pgf@counta by-1
+ \fi
+%\pgfplotscolormapserializeXtomacro{#5}\XXX
+%\message{k(\pgfplotscolormapfind@transformedx) = \pgfplotscolormapfind@transformedx@. Searching for value in X=(\XXX) resulted in \pgfplotsretval, and the index to use is \the\c@pgf@counta.^^J}%
+ }%
+ %
+ \ifnum\c@pgf@counta=\pgfplotscolormapsizeof{#5}\relax
+ % we have artificially increased the "h" (see the comments
+ % above) -- meaning that this 'if' can happen.
+ % ->Map the rightmost point to the rightmost interval:
+ \advance\c@pgf@counta by-1
+ \fi
+ %
+%\message{mapping [#1,#2] -> [0,\pgfplotscolormaprange] yielded phi = \pgfplotscolormapfind@transformedx, situated in interval no \the\c@pgf@counta/\pgfplotsarraysizeof{pgfpl@cm@#5}.^^J}%
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5}\to\pgfplotscolormapfind@rgb@LEFT
+ \let\pgfmathresult=\pgfplotscolormapfind@rgb@LEFT
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+\def\pgfplotscolormap@floor#1.#2\relax{%
+ \ifdim0.#2pt>0.999pt
+ % ok, it is ALMOST one more! Take this as rounding inaccuracy
+ \c@pgf@counta=#1\relax
+ \advance\c@pgf@counta by1
+ \edef\pgfplotscolormapfind@intervalno{\the\c@pgf@counta}%
+ \else
+ \def\pgfplotscolormapfind@intervalno{#1}%
+ \fi
+}%
+
+\def\pgfplotscolormap@floor@unforgiving#1.#2\relax{%
+ \def\pgfplotscolormapfind@intervalno{#1}%
+}%
+
+% Performs a direct color access into color map '#2' using an index
+% '#1'.
+%
+% #1: an index in the range 0 ... len(#2)-1.
+% If it does not match, it will be pruned. If #1 is a real number, it
+% will be truncated.
+% #2: a color map name.
+%
+% The resulting RGB value will be written to \pgfmathresult.
+\def\pgfplotscolormapgetindex#1#2{%
+ \pgfplotscolormapassertexists{#2}%
+ \begingroup
+ \pgfmathfloatparsenumber{#1}%
+ \expandafter\pgfmathfloattoint\expandafter{\pgfmathresult}%
+ %\afterassignment\pgfplots@gobble@until@relax
+ \c@pgf@counta=\pgfmathresult\relax
+ \ifnum\c@pgf@counta<0
+ \c@pgf@counta=0
+ \else
+ \pgfplotsarraysizetomacro{pgfpl@cm@#2}\to\pgfplotscolormapgetindex@
+ \ifnum\c@pgf@counta<\pgfplotscolormapgetindex@\relax
+ \else
+ \c@pgf@counta=\pgfplotscolormapgetindex@\relax
+ \advance\c@pgf@counta by-1
+ \fi
+ \fi
+ \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#2}\to\pgfmathresult
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+% Invokes one of \pgfplotscolormapfind,
+% \pgfplotscolormapfindpiecewiseconst, or \pgfplotscolormapgetindex,
+% depending on the value of '/pgfplots/colormap access'.
+\def\pgfplotscolormapaccess[#1:#2]{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotscolormapaccess@precomputed[#1:#2]%
+ }{%
+ \pgfplotscolormapaccess@precomputed[#1:#2][]%
+ }%
+}
+\def\pgfplotscolormapaccess@precomputed[#1:#2][#3]#4#5{%
+ \if m\pgfplots@colormap@access
+ % colormap access=map
+ \pgfplotscolormapfind@precomputed[#1:#2][#3]{#4}{#5}%
+ \else
+ \if c\pgfplots@colormap@access
+ % colormap access=piecewise constant
+ \pgfplotscolormapfindpiecewiseconst@precomputed[#1:#2][#3]{#4}{#5}%
+ \else
+ % colormap access=direct
+ \pgfplotscolormapgetindex{#4}{#5}%
+ \fi
+ \fi
+}%
+
+\pgfutil@definecolor{mapped color}{rgb}{0,0,0}% make sure this color exists. It will be overwritten if needed.
+% ATTENTION: replicated in pgfplots.code.tex :
+\pgfplotscreatecolormap{hot}{color(0cm)=(blue); color(1cm)=(yellow); color(2cm)=(orange); color(3cm)=(red)}
+
+
+\def\pgfplotspointmetatransformedrange{0:1000}
+
+% Defines the 'mapped color' on the basis of
+% the current color map.
+%
+% #1: is the value which should be mapped into the color map; it
+% is expected in the range [0,1000] (like point meta).
+\def\pgfplotscolormapdefinemappedcolor#1{%
+ \expandafter\pgfplotscolormapaccess\expandafter[\pgfplotspointmetatransformedrange]%
+ [1.0]%
+ {#1}%
+ {\pgfkeysvalueof{/pgfplots/colormap name}}%
+%\message{Color for current point is RGB '\pgfmathresult' (determined using meta 'phi(\pgfplotspointmeta) = \pgfplotspointmetatransformed')^^J}%
+ \def\pgfplots@loc@TMPb{\pgfutil@definecolor{mapped color}{\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname}}%
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfmathresult}%
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotscoordprocessing.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotscoordprocessing.code.tex
new file mode 100644
index 0000000000..92cb99709c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotscoordprocessing.code.tex
@@ -0,0 +1,9721 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2010 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% This file contains the code to process coordinates
+% - coordinate input: \addplot and its variants,
+% - coordinate loops,
+% - single coordinate processing
+%
+% -> see \pgfplots@addplot
+
+
+% To be called inside of an axis as soon as the axis is ready and all
+% point commands can be invoked.
+\def\pgfplotspoint@initialisation{%
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@v00\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@v01\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@v10\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@v11\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@0v0\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@0v1\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@1v0\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@1v1\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@00v\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@01v\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@10v\endcsname\relax
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@11v\endcsname\relax
+ %
+ % Installs e_x, e_y and e_z such that (0,0) is the 'south west'
+ % anchor of the axis and (1,1) the 'north east'.
+ % It is used inside of descriptions.
+ \def\pgfplots@install@description@xyzvec{%
+ % this here is also used in color bars!
+ \ifpgfplots@deprecated@anchors
+ \pgfpointadd{\pgfplotspointxaxis}{\pgfplotspointyaxis}%
+ \else
+ \pgfplotspointbbdiagonal
+ \fi
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ % do not use \pgfqpoint here - it may have been replaced
+ % (compare \pgfplots@change@pgfpoints@to@descriptioncs)
+ \pgfsetxvec{\global\pgf@x=\pgf@xa \global\pgf@y=0pt }%
+ \pgfsetyvec{\global\pgf@x=0pt \global\pgf@y=\pgf@ya}%
+ \pgfsetzvec{\global\pgf@x=0pt \global\pgf@y=0pt }%
+ }%
+ %
+ % The \pgfplotsqpointxyz method (or its 2d counterpart) are THE
+ % point method. If you override them, all other coordinate systems
+ % should inherit the changes as well.
+ \edef\pgfplotsplothandlerpointxyz##1##2##3{%
+ \ifpgfplots@curplot@threedim
+ \noexpand\pgfplotsqpointxyz{##1}{##2}{##3}%
+ \else
+ \noexpand\pgfplotsqpointxy{##1}{##2}%
+ \fi
+ }%
+ %
+ % A point command such that (0,0) is the 'south west' and (1,1)
+ % the 'north east' point of an axis.
+ \def\pgfplotspointdescriptionxy##1##2{%
+ \pgf@process{%
+ \pgfplots@install@description@xyzvec
+ \pgfpointadd
+ {\ifpgfplots@deprecated@anchors
+ \pgfplotspointminminmin
+ \else
+ \pgfplotspointbblowerleft
+ \fi}%
+ {\pgfpointxy@orig{##1}{##2}}%
+ %I use the '@orig' variant here because descriptions may
+ %\let\pgfpointxy=\pgfplotspointdescriptionxy
+ }%
+ }%
+ % the 'q' variant:
+ \def\pgfplotsqpointdescriptionxy##1##2{%
+ \pgf@process{%
+ \pgfplots@install@description@xyzvec
+ \pgfpointadd
+ {\ifpgfplots@deprecated@anchors
+ \pgfplotspointminminmin
+ \else
+ \pgfplotspointbblowerleft
+ \fi}%
+ {\pgfqpointxy@orig{##1}{##2}}%
+ }%
+ }%
+ \pgfplotspoint@initialisation@axes
+ \pgfplotspoint@initialisation@units
+ \pgfplotspoint@initialisation@center
+ %
+ % declare the '[xyz]ticklabel cs'
+ \tikzdeclarecoordinatesystem{xticklabel}{\pgfplotspointticklabelcs{x}{##1}}%
+ \tikzdeclarecoordinatesystem{yticklabel}{\pgfplotspointticklabelcs{y}{##1}}%
+ \tikzdeclarecoordinatesystem{zticklabel}{\pgfplotspointticklabelcs{z}{##1}}%
+ \tikzdeclarecoordinatesystem{xticklabel*}{\pgfplotspointticklabelnoshiftcs{x}{##1}}%
+ \tikzdeclarecoordinatesystem{yticklabel*}{\pgfplotspointticklabelnoshiftcs{y}{##1}}%
+ \tikzdeclarecoordinatesystem{zticklabel*}{\pgfplotspointticklabelnoshiftcs{z}{##1}}%
+ %
+ % does also declare the 'near xticklabel*' variants.
+ \pgfplotsdeclareborderanchorforticklabelaxis{x}{near xticklabel}%
+ \pgfplotsdeclareborderanchorforticklabelaxis{y}{near yticklabel}%
+ \pgfplotsdeclareborderanchorforticklabelaxis{z}{near zticklabel}%
+ %
+ \pgfkeysdef{/tikz/sloped like x axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection[##1]{x}}}%
+ \pgfkeysdef{/tikz/sloped like y axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection[##1]{y}}}%
+ \pgfkeysdef{/tikz/sloped like z axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection[##1]{z}}}%
+ %
+}%
+
+% Determine final axes this does also fix the axis' dimension.
+% There are the following cases:
+% 1. the user really wants a fixed dimension,
+% i.e. he used 'scale only axis'.
+% Then, we have to work to get the correct dimension!
+%
+% Up to now, the scaling mechanism looses to many significant
+% digits such that the final width/height differs by 1-2 pt.
+%
+% If I am not mistaken, this does ONLY affect the final size,
+% not the relative plot precision.
+%
+% FIXME : really compute the plot precision!
+%
+% 2. The use specified width and/or height, but not 'scale only
+% axis'. Accept inaccurate final widths/heights (see above).
+%
+% 3. The user supplied 'x' and or 'y'. Simply use them, its
+% accurate.
+% POSTCONDITION: the macros
+% \pgfplotspointminminmin
+% \pgfplotspoint[xyz]axis
+% \pgfplotspoint[xyz]axislength
+% are defined (globally).
+%
+\def\pgfplotspoint@initialisation@axes{%
+ \begingroup
+ \ifpgfplots@threedim
+ \def\pgfplotspointmaxminmin{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}%
+ \def\pgfplotspointminmaxmin{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}%
+ \pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}%
+ \else
+ \def\pgfplotspointmaxminmin{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}%
+ \def\pgfplotspointminmaxmin{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}%
+ \pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}%
+ \fi
+ \xdef\pgfplotspointminminmin{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ % ATTENTION: I re-use registers here! Make sure they won't be
+ % overwritten! \pgfpointdiff and \pgfplotsqpointxy are ok in this respect.
+ \let\pgfplots@xcoordminTEX=\pgf@xb
+ \let\pgfplots@ycoordminTEX=\pgf@yb
+ \pgfplots@xcoordminTEX=\pgf@x
+ \pgfplots@ycoordminTEX=\pgf@y
+ %
+ %--------------------------------------------------
+ % FIXME : WHAT IS THIS HERE FOR?
+ % \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}%
+ % \ifx\pgfplots@rectangle@width\pgfutil@empty
+ % \def\pgfplots@tmp@xmax@ymin{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}%
+ % \else
+ % % this 'if' here should only make a difference of about
+ % % 1-2pt, not more.
+ % %
+ % % and I am quite sure that this inaccuracy (and this
+ % % work-around) only affects the
+ % % final size, not the relative plot accuracy.
+ % \pgf@x=\pgfplots@xcoordminTEX
+ % \advance\pgf@x by\pgfplots@width
+ % \edef\pgfplots@tmp@xmax@ymin{\noexpand\pgfqpoint{\the\pgf@x}{\noexpand\pgfplots@ycoordminTEX}}%
+ % \fi
+ % \ifx\pgfplots@rectangle@height\pgfutil@empty
+ % \def\pgfplots@tmp@xmin@ymax{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}%
+ % \else
+ % \pgf@x=\pgfplots@ycoordminTEX
+ % \advance\pgf@x\pgfplots@height
+ % \edef\pgfplots@tmp@xmin@ymax{\noexpand\pgfqpoint{\noexpand\pgfplots@xcoordminTEX}{\the\pgf@x}}%
+ % \fi
+ %--------------------------------------------------
+ \pgfpointdiff
+ {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}}
+ {\pgfplotspointmaxminmin}%
+ \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \xdef\pgfplotspointxaxislength{\pgfmathresult pt}%
+ %
+ \pgfpointdiff
+ {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}}
+ {\pgfplotspointminmaxmin}%
+ \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \xdef\pgfplotspointyaxislength{\pgfmathresult pt}%
+ %
+ \ifpgfplots@threedim
+ \pgfpointdiff
+ {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}}
+ {\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}%
+ \xdef\pgfplotspointzaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \xdef\pgfplotspointzaxislength{\pgfmathresult pt}%
+ \else
+ \global\let\pgfplotspointzaxis=\pgfpointorigin
+ \gdef\pgfplotspointzaxislength{0pt}%
+ \fi
+ \endgroup
+ %
+}
+
+% PRECONDITION: called after \pgfplotspoint@initialisation@axes
+% POSTCONDITION:
+% \pgfplotspointcenter is defined.
+\def\pgfplotspoint@initialisation@center{%
+ \begingroup
+ %
+ %
+ \ifpgfplots@threedim
+ %
+ \pgfpointscale
+ {0.5}%
+ {\pgfplotspointxaxis
+ \pgf@xa=\pgf@x
+ \pgf@xb=\pgf@y
+ \pgfplotspointyaxis%
+ \advance\pgf@xa by\pgf@x
+ \advance\pgf@xb by\pgf@y
+ \pgfplotspointzaxis%
+ \advance\pgf@xa by\pgf@x
+ \advance\pgf@xb by\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@xb
+ }%
+ \xdef\pgfplotspointcenter{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \else
+ \pgfpointscale
+ {0.5}%
+ {\pgfpointadd
+ \pgfplotspointxaxis%
+ \pgfplotspointyaxis%
+ }%
+ \xdef\pgfplotspointcenter{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \fi
+ \endgroup
+}
+
+% PRECONDITION:
+% the unit vectors are set up
+%
+% POSTCONDITION:
+% \pgfplotspointunit[xyz]
+% \pgfplotspointunit[xyz]length
+% \pgfplotspointunit[xyz]invlength
+% are all set up.
+\def\pgfplotspoint@initialisation@units{%
+ \edef\pgfplotspointunitx{\pgf@x=\the\pgf@xx\space\pgf@y=\the\pgf@xy\space}%
+ \edef\pgfplotspointunity{\pgf@x=\the\pgf@yx\space\pgf@y=\the\pgf@yy\space}%
+ \let\pgfplotsunitxlength=\pgfplots@x@veclength
+ \let\pgfplotsunitylength=\pgfplots@y@veclength
+ \let\pgfplotsunitxinvlength=\pgfplots@x@inverseveclength
+ \let\pgfplotsunityinvlength=\pgfplots@y@inverseveclength
+ \ifpgfplots@threedim
+ \edef\pgfplotspointunitz{\pgf@x=\the\pgf@zx\space\pgf@y=\the\pgf@zy\space}%
+ \let\pgfplotsunitzlength=\pgfplots@z@veclength
+ \let\pgfplotsunitzinvlength=\pgfplots@z@inverseveclength
+ \fi
+}%
+
+% The idea here is the following:
+%
+% 1. A point coordinate (<x>,<y>) without units should use
+% relative axis coordinate system.
+%
+% 2. Any other point coordinate should not be altered.
+%
+% Former versions installed a shift and changed e_x, e_y and
+% e_z. However, that was misleading as it disabled point 2).
+% So, my idea here is to replace \pgfpointxy and \pgfqpointxy
+% such that they install the correct coordinate system before
+% doing anything else.
+\def\pgfplots@change@pgfpoints@to@descriptioncs{%
+ %
+ \let\pgfpointxy=\pgfplotspointdescriptionxy
+ \let\pgfqpointxy=\pgfplotsqpointdescriptionxy
+ % e_z is zero, so the xyz variants ignore z:
+ \def\pgfpointxyz##1##2##3{\pgfpointxy{##1}{##2}}%
+ \def\pgfqpointxyz##1##2##3{\pgfqpointxy{##1}{##2}}%
+ %
+}%
+
+% \pgfplotspointticklabelcs{<axis>}{<coordinate>}
+% or
+% \pgfplotspointticklabelcs[<default shift>]{<axis>}{<coordinate>}
+%
+% Yields a point in the '<axis>ticklabel cs'.
+%
+% The 'xticklabel cs' is a coordinate system which expects either one
+% or two coordinates. The first is the coordinate on the axis where
+% x tick label will be placed (or would be placed). The first
+% coordinate '0' means the lower aixs site and the value '1' the upper
+% range. The second (optional) coordinate of 'xticklabel cs' is a
+% shift in direction of the outer normal vector of the axis. The
+% minimum shift is the largest' tick labels dimensions. If the second
+% argument is omitted, the <default shift> will be used (0pt if this
+% argument has been omitted as well).
+%
+% \pgfplotspointticklabelcs#1#2:
+% #1 is the axis (either x,y or z)
+% #2 is the coordinate (either <relative coord> or <relative coord>,<shift>)
+%
+% @see \pgfplotsvalueoflargesttickdimen
+%
+% This command actually boils down to a
+% \pgfplotsqpointoutsideofticklabelaxisrel
+% invocation which. Thus, you *can* get the *same* effect by using
+% basic level commands -- and you are not restricted to the tick label
+% axis.
+% @see \pgfplotsqpointoutsideofaxisrel
+\def\pgfplotspointticklabelcs{\pgfutil@ifnextchar[%
+ {\pgfplotspointticklabelcs@opt}%
+ {\pgfplotspointticklabelcs@opt[0pt]}%
+}%
+\def\pgfplotspointticklabelcs@opt[#1]#2#3{%
+ \pgfutil@in@{,}{#3}%
+ \ifpgfutil@in@
+ \edef\pgfplots@loc@TMPa{#3}%
+ \else
+ \edef\pgfplots@loc@TMPa{#3,#1}%
+ \fi
+ \def\pgfplots@loc@TMPb##1,##2\relax{%
+ % invoke
+ % \pgfplotsqpointoutsideofticklabelaxisrel{#2}{##1}{ticklabel dimen + ##2}:
+ \begingroup
+ \pgfmathparse{##2}%
+ \pgf@xa=\pgfmathresult pt\relax
+ \advance\pgf@xa by\pgfplotsvalueoflargesttickdimen{#2} %<- keep this space!
+ \xdef\pgfplots@glob@TMPa{\pgf@sys@tonumber\pgf@xa}%
+ \endgroup
+ \def\pgfplots@loc@TMPa{\pgfplotsqpointoutsideofticklabelaxisrel{#2}{##1}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@glob@TMPa}%
+ }%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\relax
+}%
+
+\def\pgfplotspointticklabelnoshiftcs#1#2{%
+ \pgfutil@in@{,}{#2}%
+ \ifpgfutil@in@
+ \edef\pgfplots@loc@TMPa{#2}%
+ \else
+ \edef\pgfplots@loc@TMPa{#2,0}%
+ \fi
+ \def\pgfplots@loc@TMPb##1,##2\relax{%
+ % invoke
+ % \pgfplotsqpointoutsideofticklabelaxisrel{#2}{##1}{##2}:
+ \pgfmathparse{##2}%
+ \def\pgfplots@loc@TMPa{\pgfplotsqpointoutsideofticklabelaxisrel{#1}{##1}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+ }%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\relax
+}%
+
+
+% Converts a dimen (with unit!) to a corresponding x, y or z
+% coordinate.
+% The result will be written to \pgfmathresult (without units).
+%
+% It is possible to use the result within the \pointxyz command(s).
+%
+% #1: the axis (x,y or z)
+% #2: the dimen
+%
+% example:
+% \pgfplotsconvertunittocoordinate{x}{5pt}
+\def\pgfplotsconvertunittocoordinate#1#2{%
+ \begingroup
+ \pgf@xa=#2\relax
+ \pgf@xa=\csname pgfplots@#1@inverseveclength\endcsname\pgf@xa
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% This is the same as using \pgfplotsconvertunittocoordinate for each
+% component #1, #2 and #3. The results are directly communicated to
+% \pgfplotsqpointxyz.
+%
+% Expects #1, #2 and #3 to be numbers with units and issues a \pgfplotsqpointxyz
+\def\pgfplotsqpointxyzabsolutesize#1#2#3{%
+ \begingroup
+ \pgf@xa=#1\relax
+ \pgf@xa=\pgfplots@x@inverseveclength\pgf@xa
+ \pgf@xb=#2\relax
+ \pgf@xb=\pgfplots@y@inverseveclength\pgf@xb
+ \pgf@ya=#3\relax
+ \pgf@ya=\pgfplots@z@inverseveclength\pgf@ya
+ \xdef\pgfplots@glob@TMPa{{\pgf@sys@tonumber\pgf@xa}{\pgf@sys@tonumber\pgf@xb}{\pgf@sys@tonumber\pgf@ya}}%
+ \endgroup
+ \expandafter\pgfplotsqpointxyz\pgfplots@glob@TMPa
+}%
+
+% Denotes a point in a twodimensional hyperplane. The hyperplane is
+% one of the six planes of the threedimensional axis cube.
+%
+% The meaning of coordinates #1 and #2 will be redefined depending on
+% which surface we are currently processing. You can get the axis
+% names for '#1' (a) and '#2' (b) using the macros
+% \pgfplotspointonorientedsurfaceA (one of the characters x,y or z)
+% and
+% \pgfplotspointonorientedsurfaceB.
+% The surface normal direction is
+% \pgfplotspointonorientedsurfaceN.
+%
+% Example:
+% \pgfplotspointonorientedsurfaceabsetupfor xyz
+% \pgfplotspointonorientedsurfaceabsetupforsetz{<lower z limit>}{0}
+%
+% ->
+% \pgfplotspointonorientedsurfaceA = x
+% \pgfplotspointonorientedsurfaceB = y
+% \pgfplotspointonorientedsurfaceN = z
+% \pgfplotspointonorientedsurfacespec = {ab0}
+% \pgfplotspointonorientedsurfacespecunordered = {vv0}
+% \pgfplotspointonorientedsurfaceab{3}{4} =\pgfqpointxyz{3}{4}{<lower z limit>}
+%
+% \pgfplotspointonorientedsurfaceabsetupfor yxz
+% \pgfplotspointonorientedsurfaceabsetupforsetz{<lower z limit>}{0}
+% ->
+% \pgfplotspointonorientedsurfaceA = y
+% \pgfplotspointonorientedsurfaceB = x
+% \pgfplotspointonorientedsurfaceN = z
+% \pgfplotspointonorientedsurfacespec = {ba0}
+% \pgfplotspointonorientedsurfacespecunordered = {vv0}
+% \pgfplotspointonorientedsurfaceab{3}{4} =\pgfqpointxyz{4}{3}{<lower z limit>}
+%
+% @see \pgfplotspointonorientedsurfaceabsetupfor xyz
+\def\pgfplotspointonorientedsurfaceab#1#2{%
+ \pgfplots@error{Internal logic error: \string\pgfplotspointonorientedsurfaceab\ used although surface has not been declared! You need to call \string\pgfplotspointonorientedsurfaceabsetupfor xyz\ or its friends to do so.}%
+}%
+
+% This is a shortcut for
+% \pgfpointadd
+% {\pgfplotspointonorientedsurfaceab{#1}{#2}}
+% {<shift in B direction of #3>}
+%
+% where #3 is a dimension (a number with unit).
+\def\pgfplotspointonorientedsurfaceabwithbshift#1#2#3{%
+ \begingroup
+ \pgf@xa=#3\relax
+ \ifdim\pgf@xa=0pt
+ \else
+ \pgf@xa=\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname\pgf@xa
+ \fi
+ \advance\pgf@xa by#2pt
+ \edef\pgfplots@loc@b{\pgf@sys@tonumber\pgf@xa}%
+ \pgf@process{\pgfplotspointonorientedsurfaceab{#1}{\pgfplots@loc@b}}%
+ \endgroup
+}
+
+\pgfkeyssetvalue{/pgfplots/oriented surf installed}{}
+
+% This macro will be defined after
+% \pgfplotspointonorientedsurfaceabsetupfor...
+% routines. It expands to a three-character string
+% where the first character contains information about the x axis,
+% the second about the y axis and the third about the z axis.
+%
+% The single characters can be one of
+% - 'a' - the corresponding axis is the PRIMARY direction of the
+% oriented surface.
+% - 'b' - the corresponding axis is the SECONDARY direction of the
+% oriented surface.
+% - anything else - the characters provides as second argument for
+% \pgfplotspointonorientedsurfaceabsetupforsetz{}{}, for example.
+% Common choices are '0' for lower limit, '1' for upper limit and
+% '2' for other.
+\def\pgfplotspointonorientedsurfacespec{}%
+
+% Similar to \pgfplotspointonorientedsurfacespec, this macro encodes
+% the currently active oriented surface.
+% However, it only contains the characters 'v', '0' and '1' and '2'.
+% The distinction 'v in {a,b}' is eliminated.
+\def\pgfplotspointonorientedsurfacespecunordered{}%
+
+% As \pgfplotspointonorientedsurfacespec, this macro contains
+% information about the current oriented surface: it contains the
+% fixed symbol '0', '1' or '2' describing the only direction which is
+% fixed.
+\def\pgfplotspointonorientedsurfacespecsymbol{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}
+
+\def\pgfplotspointonorientedsurfaceabsetupfor#1#2#3{%
+ \pgfutil@ifundefined{pgfplotspointonorientedsurfaceabsetupfor@@#1#2#3}{%
+ \pgfplots@error{Sorry, \string\pgfplotspointonorientedsurfaceabsetupfor\space#1#2#3 is not yet implemented.}%
+ }{
+ \csname pgfplotspointonorientedsurfaceabsetupfor@@#1#2#3\endcsname
+ }%
+}%
+%
+% Initialises \pgfplotspointonorientedsurfaceab such that 'a' is the x
+% axis and 'b' is the y axis and the z coordinate has been fixed with
+% \pgfplotspointonorientedsurfaceabsetupforsetz{}.
+%
+% The Z value needs to be fixed with
+% \pgfplotspointonorientedsurfaceabsetupforsetz .
+\def\pgfplotspointonorientedsurfaceabsetupfor@@xyz{%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##1}{##2}{\pgfplotspointonorientedsurfaceabsetupfor@fixedz}}%
+ \def\pgfplotspointonorientedsurfaceA{x}%
+ \def\pgfplotspointonorientedsurfaceB{y}%
+ \def\pgfplotspointonorientedsurfaceN{z}%
+ \edef\pgfplotspointonorientedsurfacespec{ab\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupfor@@yxz{%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##2}{##1}{\pgfplotspointonorientedsurfaceabsetupfor@fixedz}}%
+ \def\pgfplotspointonorientedsurfaceA{y}%
+ \def\pgfplotspointonorientedsurfaceB{x}%
+ \def\pgfplotspointonorientedsurfaceN{z}%
+ \edef\pgfplotspointonorientedsurfacespec{ba\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupfor@@xzy{%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##1}{\pgfplotspointonorientedsurfaceabsetupfor@fixedy}{##2}}%
+ \def\pgfplotspointonorientedsurfaceA{x}%
+ \def\pgfplotspointonorientedsurfaceB{z}%
+ \def\pgfplotspointonorientedsurfaceN{y}%
+ \edef\pgfplotspointonorientedsurfacespec{a\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol b}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{v\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol v}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupfor@@zxy{%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##2}{\pgfplotspointonorientedsurfaceabsetupfor@fixedy}{##1}}%
+ \def\pgfplotspointonorientedsurfaceA{z}%
+ \def\pgfplotspointonorientedsurfaceB{x}%
+ \def\pgfplotspointonorientedsurfaceN{y}%
+ \edef\pgfplotspointonorientedsurfacespec{b\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol a}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{v\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol v}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupfor@@yzx{%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{\pgfplotspointonorientedsurfaceabsetupfor@fixedx}{##1}{##2}}%
+ \def\pgfplotspointonorientedsurfaceA{y}%
+ \def\pgfplotspointonorientedsurfaceB{z}%
+ \def\pgfplotspointonorientedsurfaceN{x}%
+ \edef\pgfplotspointonorientedsurfacespec{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol ab}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol vv}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupfor@@zyx{%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{\pgfplotspointonorientedsurfaceabsetupfor@fixedx}{##2}{##1}}%
+ \def\pgfplotspointonorientedsurfaceA{z}%
+ \def\pgfplotspointonorientedsurfaceB{y}%
+ \def\pgfplotspointonorientedsurfaceN{x}%
+ \edef\pgfplotspointonorientedsurfacespec{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol ba}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol vv}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+
+% Fixes 'x' to #1 for use in
+% \pgfplotspointonorientedsurfaceabsetupfor zyx and
+% \pgfplotspointonorientedsurfaceabsetupfor yzx.
+%
+% #1: The fixed value for 'x' (a coordinate in transformed range).
+% #2: a one-character symbol describing 'x'.
+% Command characters are
+% 0 : x is the lower x-axis range.
+% 1 : x is the upper x-axis range.
+% 2 : other.
+\def\pgfplotspointonorientedsurfaceabsetupforsetx#1#2{%
+ \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedx{#1}%
+ \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{#2}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupforsety#1#2{%
+ \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedy{#1}%
+ \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{#2}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupforsetz#1#2{%
+ \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedz{#1}%
+ \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{#2}%
+}%
+
+% Helper methods which should be used if no Z component exists (pure
+% 2d plots).
+\def\pgfplotspointonorientedsurfaceabsetupfor@@xy{%
+ \def\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{0}%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxy{##1}{##2}}%
+ \def\pgfplotspointonorientedsurfaceA{x}%
+ \def\pgfplotspointonorientedsurfaceB{y}%
+ \def\pgfplotspointonorientedsurfaceN{z}%
+ \edef\pgfplotspointonorientedsurfacespec{ab\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+\def\pgfplotspointonorientedsurfaceabsetupfor@@yx{%
+ \def\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{0}%
+ \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxy{##2}{##1}}%
+ \def\pgfplotspointonorientedsurfaceA{y}%
+ \def\pgfplotspointonorientedsurfaceB{x}%
+ \def\pgfplotspointonorientedsurfaceN{z}%
+ \edef\pgfplotspointonorientedsurfacespec{ba\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}%
+ \pgfkeysvalueof{/pgfplots/oriented surf installed}%
+}%
+
+
+% Assuming we have an oriented surface installed, this command defines
+% \pgfplotsretval to be the three-char-string such that the 'a' axis
+% if the oriented surface takes value '#1', the 'b' axis of the
+% oriented surface takes '#2' and the remaining axis has its fixed
+% symbol anyway.
+\def\pgfplotspointonorientedsurfaceabtolinespec#1#2{%
+ \expandafter\pgfplotspointonorientedsurfaceabtolinespec@a\pgfplotspointonorientedsurfacespec\relax#1%
+ \expandafter\pgfplotspointonorientedsurfaceabtolinespec@b\pgfplotsretval\relax#2%
+}%
+\def\pgfplotspointonorientedsurfaceabtolinespec@a#1a#2\relax#3{\edef\pgfplotsretval{#1#3#2}}
+\def\pgfplotspointonorientedsurfaceabtolinespec@b#1b#2\relax#3{\edef\pgfplotsretval{#1#3#2}}
+
+% Assuming that an oriented surface has been initialised, say 'a0b',
+% we have the following possible axis lines which can be drawn:
+% - b=0: 'v00'
+% - b=1: 'v01'
+% - b=2: 'v02'
+%
+% To check which of them should be drawn, this macro here converts 'a'
+% to 'v' and 'b' to '#1'. The remaining possible character will be
+% copied as-is.
+%
+% The resulting three-character-string is written into '#2'.
+%
+% #1 : the replacement value which will be inserted instead of 'b' in
+% the currently active oriented surface.
+% #2 : the macro which will contain the output axis line specification
+% (three-char-string).
+%
+% Example:
+% \pgfplotspointonorientedsurfaceabsetupfor xyz
+% \pgfplotspointonorientedsurfaceabsetupforsetz{<lower z limit>}{0}
+% -> the oriented surface is 'ab0'
+% ...
+% \pgfplotspointonorientedsurfaceabgetcontainedaxisline{0}\pgfplotsretval
+% -> \pgfplotsretval = 'v00'
+% \pgfplotspointonorientedsurfaceabgetcontainedaxisline{1}\pgfplotsretval
+% -> \pgfplotsretval = 'v10'
+% \pgfplotspointonorientedsurfaceabgetcontainedaxisline{2}\pgfplotsretval
+% -> \pgfplotsretval = 'v20'
+\def\pgfplotspointonorientedsurfaceabgetcontainedaxisline#1#2{%
+ \expandafter\pgfplotspointonorientedsurfaceabgetcontainedaxisline@\pgfplotspointonorientedsurfacespec\relax{#1}%
+ \let#2=\pgfplots@loc@TMPa
+}%
+% writes into \pgfplots@loc@TMPa:
+\def\pgfplotspointonorientedsurfaceabgetcontainedaxisline@#1#2#3\relax#4{%
+ \pgfplotspointonorientedsurfaceabgetcontainedaxisline@single{#1}{#4}\to\pgfplots@loc@TMPa
+ \pgfplotspointonorientedsurfaceabgetcontainedaxisline@single{#2}{#4}\to\pgfplots@loc@TMPb
+ \pgfplotspointonorientedsurfaceabgetcontainedaxisline@single{#3}{#4}\to\pgfplots@loc@TMPc
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa\pgfplots@loc@TMPb\pgfplots@loc@TMPc}%
+}%
+\def\pgfplotspointonorientedsurfaceabgetcontainedaxisline@single#1#2\to#3{%
+ \if#1a%
+ \def#3{v}%
+ \else
+ \if#1b%
+ \def#3{#2}%
+ \else
+ \def#3{#1}%
+ \fi
+ \fi
+}%
+
+
+% Finds the two surfaces which are adjacent to an axis line encoded as
+% three-character-string.
+%
+% There are the following possibilities:
+% #1 = 'v**' where '*' is not 'v'.
+% -> #2 = 'vv*' and #3 = 'v*v'
+%
+% #1 = '*v*'
+% -> #2 = 'vv*' and #3 = '*vv'
+%
+% #1 = '**v'
+% -> #2 = 'v*v' and #3 = '*vv'
+\def\pgfplotsgetadjacentsurfsforaxisline#1\to#2#3{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsgetadjacentsurfsforaxisline@\pgfplots@loc@TMPa\relax{#2}{#3}%
+}%
+\def\pgfplotsgetadjacentsurfsforaxisline@#1#2#3\relax#4#5{%
+ \if#1v%
+ \def#4{vv#3}%
+ \def#5{v#2v}%
+ \else
+ \if#2v%
+ \def#4{vv#3}%
+ \def#5{#1vv}%
+ \else
+ \def#4{v#2v}%
+ \def#5{#1vv}%
+ \fi
+ \fi
+}%
+
+% Executes code '#2' if the axis surface denoted by the
+% three-character-string '#1' is a foreground surface and code '#3' if
+% the surface '#1' is a background surface.
+%
+% #1: a three-char-string with the keys
+% 'v' = 'varying',
+% '0' = 'lower axis limit',
+% '1' = 'upper axis limit'.
+% The string 'v0v' means that x and z are varying in that surface
+% and 'y' is fixed to the lower axis limit.
+% #2: code to execute if '#1' is foreground.
+% #3: code to execute if '#1' is background.
+\def\pgfplotsifaxissurfaceisforeground#1#2#3{%
+ \pgfutil@ifundefined{pgfplots@surfviewdepth@#1}{%
+ \pgfplots@error{\string\pgfplotsifaxissurfaceisforeground{#1}: undefined three-character-string '#1' provided.}%
+ #3%
+ }{%
+ \if f\csname pgfplots@surfviewdepth@#1\endcsname #2\else #3\fi
+ }%
+}%
+
+% As \pgfplotsifaxissurfaceisforeground, but for axis lines.
+%
+% #1: a three-character string with the same keys as in
+% \pgfplotsifaxissurfaceisforeground. However, there should be only
+% one varying direction as we are dealing with an axis line.
+% #2: code to execute if '#1' is foreground.
+% #3: code to execute if '#1' is background.
+%
+\def\pgfplotsifaxislineisforeground#1#2#3{%
+ \pgfplotsgetadjacentsurfsforaxisline#1\to\pgfplots@loc@TMPb\pgfplots@loc@TMPc
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPb}{%
+ #2%
+ }{%
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPc}{%
+ #2%
+ }{%
+ #3%
+ }%
+ }%
+}%
+% Executes code '#2' if the axis surface denoted by the
+% three-char-string '#1' is on the convex hull of the projected axis
+% cube or code '#3' if that is not the case.
+%
+% The arguments are the same as for \pgfplotsifaxislineisforeground:
+% #1: a three-character string with the same keys as in
+% \pgfplotsifaxissurfaceisforeground. However, there should be only
+% one varying direction as we are dealing with an axis line.
+% #2: code to execute if '#1' is foreground.
+% #3: code to execute if '#1' is background.
+\def\pgfplotsifaxislineisonconvexhull#1#2#3{%
+ \pgfplotsgetadjacentsurfsforaxisline#1\to\pgfplots@loc@TMPb\pgfplots@loc@TMPc
+ % '#1' is on the convex hull if ONE of the adjacent surfs is
+ % foreground and the other one is background.
+ \pgfplots@loc@tmpfalse
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPb}{%
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPc}{%
+ }{%
+ \pgfplots@loc@tmptrue
+ }%
+ }{%
+ }%
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPb}{%
+ }{%
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPc}{%
+ \pgfplots@loc@tmptrue
+ }{%
+ }%
+ }%
+ \ifpgfplots@loc@tmp #2\else #3\fi
+}%
+
+% Executes code '#2' if the axis line with 'b=#1' on the current
+% oriented surface shall be drawn.
+% If that is not the case, the code '#3' will be executed.
+%
+% Example:
+% Let's assume the current oriented surface is 'b0a'.
+% Then,
+% \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{0}{draw it!}{\relax}
+% will check whether the line '00v' shall be drawn while
+% \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{1}{draw it!}{\relax}
+% will check whether the line '10v' shall be drawn.
+%
+% The check is based on
+% 1. foreground/background flags
+% 2. the current configuration of the axis lines key(s)
+%
+% @see \pgfplotspointonorientedsurfaceabgetcontainedaxisline
+\def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn#1#2#3{%
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@{#1}{%
+ \edef\pgfplots@loc@TMPe{\csname pgfplots@\pgfplotspointonorientedsurfaceA axislinesnum\endcsname}%
+ \if0\pgfplots@loc@TMPe
+ % boxed axis lines
+ #2%
+ \else
+ \if2\pgfplots@loc@TMPe
+ % centered axis lines
+ #2%
+ \else
+ % either the 'left' or 'right' positioned cases.
+ % These have exactly one line which is the one where
+ % tick labels will be placed. And this, in turn, is
+ % already known, even for 3D. Check if we have it:
+ \pgfplotspointonorientedsurfaceabtolinespec v#1%
+ \edef\pgfplots@loc@TMPe{\csname pgfplots@\pgfplotspointonorientedsurfaceA ticklabelaxisspec\endcsname}%
+ \ifx\pgfplots@loc@TMPe\pgfplotsretval
+ #2%
+ \else
+ #3%
+ \fi
+ \fi
+ \fi
+ }{%
+ #3%
+ }%
+}%
+\def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@allaxislinevariations#1#2#3{%
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@{#1}{%
+ #2%
+ }{%
+ #3%
+ }%
+}%
+
+% A sub-part of \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn
+% which is /only/ based on foreground/background flags.
+%
+% @ATTENTION : this command will be always true for the 2D case. (it
+% will be overwritten, see \pgfplots@decide@which@figure@surfaces@are@drawn)
+\def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@#1#2#3{%
+ \pgfplotspointonorientedsurfaceabgetcontainedaxisline#1\pgfplots@loc@TMPc
+ \pgfplotsgetadjacentsurfsforaxisline\pgfplots@loc@TMPc\to\pgfplots@loc@TMPb\pgfplots@loc@TMPc
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPb}{%
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@loc@TMPc}{%
+ #3%
+ }{%
+ #2%
+ }%
+ }{%
+ #2%
+ }%
+}%
+
+% Similar to \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn,
+% this thing here execute '#1' if grid lines on the currently
+% initialised oriented surfaces shall be drawn and '#2' if not.
+%
+% This does only handle foreground/background issues; it has NOTHING
+% to do with the actual checks if grid lines are active or not.
+\def\pgfplots@ifgridlines@onorientedsurf@should@be@drawn#1#2{%
+ % grid lines shall be drawn
+ % if and only if BOTH adjacent axis lines shall be drawn:
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@allaxislinevariations{0}{%
+ % remark: this is ALWAYS true for 2D plots.
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@allaxislinevariations{1}{%
+ #1%
+ }{%
+ #2%
+ }%
+ }{%
+ #2%
+ }%
+}%
+
+% Checks whether the line specified by a three-character-string '#1'
+% is inside of the currently set-up oriented surface.
+%
+% The return value is encoded as integer into the macro #2 as
+% described below.
+%
+% #1 : a three-character string uniquely identifing an axis line.
+% Each of the three characters can be 'v', '0' or '1'.
+% The value '0' denotes the lower axis range while '1' denotes
+% the upper axis range. The character 'v' stands for 'varying'
+% and indicates the direction in which the line varies. The first
+% character contains the values for the 'x' axis, the second
+% character for the 'y' axis and the third character for the 'z'
+% axis.
+% Example:
+% 'v01' is the axis line with 'y=lower y limit' and 'z=upper z limit'
+% '10v' is the axis line with 'x=upper x limit' and 'y=lower y limit'
+% The 'v' character indicates the varying component. There may be
+% only one 'v'.
+% #2 : a macro name. It will be empty if the line is NOT on the
+% current surface. If will be non-empty if it IS on the current
+% surface.
+% To be more precise, If the line IS on the current surface, '#2' will be set to
+% the character in '#1' which belongs to the second oriented
+% surface axis (which is called the 'b' axis).
+% Thus, the following values for '#2' can be expected:
+% - '' (empty) if the line is not on the surface,
+% - 'v' if the line IS on the surface, and '#1' contains a 'v'
+% in direction of the surface's 'b' axis.
+% - '0' if the line IS on the surface and '#1' contains a '0' in
+% direction of the surface's 'b' axis,
+% - '1' if the line IS on the surface and '#1' contains a '1' in
+% direction of the surface's 'b' axis.
+% No other values are possible.
+%
+% Example:
+% \pgfplotspointonorientedsurfaceabsetupforsetz{\zmax}{1}
+% \pgfplotspointonorientedsurfaceabsetupfor yxz
+% \pgfplotspointonorientedsurfaceabmatchaxisline{v01}{\result}
+% -> \result will be 'v' because 'x=v' in '{v01}
+%
+% \pgfplotspointonorientedsurfaceabsetupforsety{\ymin}{0}
+% \pgfplotspointonorientedsurfaceabsetupfor xzy
+% \pgfplotspointonorientedsurfaceabmatchaxisline{v01}{\result}
+% -> \result will be '1' because 'z=1' in '{v01}
+%
+% \pgfplotspointonorientedsurfaceabsetupforsety{\ymax}{1}
+% \pgfplotspointonorientedsurfaceabsetupfor xzy
+% \pgfplotspointonorientedsurfaceabmatchaxisline{v01}{\result}
+% -> \result will be empty because 'y=0' in '{v01}
+%
+% \pgfplotspointonorientedsurfaceabsetupforsetx{\xmax}{1}
+% \pgfplotspointonorientedsurfaceabsetupfor yzx
+% \pgfplotspointonorientedsurfaceabmatchaxisline{10v}{\result}
+% -> \result will be 'v' because 'z=v' in '{10v}
+\def\pgfplotspointonorientedsurfaceabmatchaxisline#1#2{%
+ \pgfplotsmatchcubeparts{#1}{\pgfplotspointonorientedsurfacespec}{#2}%
+}%
+
+% Checks whether the line or surface specified by a three-character-string '#1'
+% is inside of the surface designated by the three-character-string '#2'.
+%
+%
+% Arguments:
+% #1 a cube-part (axis line or surface) encoded as three character
+% string. Can be '0v1' or 'vv0' or so (see above).
+% #2 a surface, also encoded as three character string. Maybe
+% oriented.
+% #3 The return value is encoded as char into the macro #3 as
+% described in \pgfplotspointonorientedsurfaceabmatchaxisline:
+% '#3' will be EMPTY if '#1' is NOT in '#2'.
+% '#3' will be NON-EMPTY if '#1' IS in '#2'.
+\def\pgfplotsmatchcubeparts#1#2#3{%
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \expandafter\pgfplotspointonorientedsurfaceabmatchaxisline@\pgfplots@loc@TMPa\pgfplots@EOI
+ \let#3=\pgfplots@loc@TMPa
+}%
+
+% IMPLEMENTATION:
+% The return value is 'yes, #1#2#3 is on the oriented surface #4#5#6'
+% if and only if for all three character pairs, the following single
+% relations hold.
+% Input char oriented surface char
+% 'v' : is either a or b or v
+% '0' : is either 0, a, b, v or 2 (i.e. NOT 1) FIXME : is the '2' correct here!?
+% '1' : is either 1, a, b, v or 2 (i.e. NOT 0)
+% '2' : is either 2, a, b, v (i.e. NOT 0 or 1)
+% That's all.
+%
+% If the 'oriented surface char' is 'v', then we actually don't have
+% an oriented surface but just a surface.
+% So, 'a0b' is the same surface as 'v0v', but the first choice has
+% designated orientations.
+%
+% @POST \pgfplots@loc@TMPa contains the return value macro.
+% More precisely, \pgfplots@loc@TMPa will be EMPTY is #1#2#3 is NOT
+% on #4#5#6 . It will contain the value on the surface if it IS on
+% the surface
+\def\pgfplotspointonorientedsurfaceabmatchaxisline@#1#2#3:#4#5#6\pgfplots@EOI{%
+ % Search for the 'b' character:
+ \if#4b%
+ \def\pgfplots@loc@TMPa{#1}%
+ \else
+ \if#5b%
+ \def\pgfplots@loc@TMPa{#2}%
+ \else
+ \if#6b%
+ \def\pgfplots@loc@TMPa{#3}%
+ \else
+ \def\pgfplots@loc@TMPa{v}% FALLBACK solution.
+ \fi
+ \fi
+ \fi
+ % Now, check whether we need to clear the return value (i.e.
+ % return false)
+ \pgfplotspointonorientedsurfaceabmatchaxisline@single{#1}{#4}%
+ \pgfplotspointonorientedsurfaceabmatchaxisline@single{#2}{#5}%
+ \pgfplotspointonorientedsurfaceabmatchaxisline@single{#3}{#6}%
+%\message{\string\pgfplotspointonorientedsurfaceabmatchaxisline@#1#2#3:#4#5#6 = '\pgfplots@loc@TMPa'.^^J}%
+}
+\def\pgfplotspointonorientedsurfaceabmatchaxisline@single#1#2{%
+ \if#1v%
+ \if#2a%
+ \else
+ \if#2b%
+ \else
+ \if#2v%
+ \else
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \fi
+ \fi
+ \fi
+ \else
+ \if0#1%
+ \if1#2%
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \fi
+ \else
+ \if1#1%
+ \if0#2%
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \fi
+ \else
+ \if2#1%
+ \if0#2%
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \fi
+ \if1#2%
+ \let\pgfplots@loc@TMPa=\pgfutil@empty
+ \fi
+ \else
+ % return TRUE.
+ % I admit I am not sure at all if this works in all
+ % cases
+ \pgfplotspointonorientedsurfaceabmatchaxisline@warn{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+\def\pgfplotspointonorientedsurfaceabmatchaxisline@warn#1{%
+ \pgfplots@warning{The internal implementation is suspicious that something is wrong: \string\pgfplotspointonorientedsurfaceabmatchaxisline@warn: the character '#1' in a three-character axis line or surface description might not be fully supported...}%
+}%
+
+% Provides a point on an arbitrary axis (identified by a
+% three-character-string) which can take any value on that axis and
+% which is shifted in the direction of the outer normal vector.
+%
+% #1: a three-character-string denoting the desired axis
+% #2: the coordinate on that axis (the coordinate for the 'v'
+% direction in '#1'). It needs to be given as it would be supplied to
+% an \addplot or 'axis cs' coordinate; any logs or data
+% transformations will be applied.
+% #3: the distance (a dimension) describing how much we should move
+% away from that axis. This points to the outside normal vector of the
+% axis cube.
+%
+% @see \pgfplotsqpointoutsideofticklabelaxis
+%
+% If, in addition, the boolean \ifpgfslopedattime is true, the same
+% transformations which would have been applied by
+% \pgftransformlineattime will be applied, that means the 'sloped'
+% feature of tikz is applied. FIXME : is that up-to-date!?
+%
+% @see \pgftransformlineattime -- it is quite similar.
+\def\pgfplotsqpointoutsideofaxis#1#2#3{%
+ \begingroup
+ \def\pgfplotspointoutsideofaxis@plug@trafo##1##2{\csname pgfplotstransformcoordinate##1\endcsname{##2}}%
+ \let\pgfplotspointoutsideofaxis@plug@getlimit=\pgfplotspointoutsideofaxis@getlimit@
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotspointoutsideofaxis@\pgfplots@loc@TMPa\relax{#2}{#3}%
+}%
+
+% A variant of \pgfplotsqpointoutsideofaxis with relative values for
+% #2.
+% That means
+% '#2 = 0' === lower axis limit
+% and
+% '#2 = 1' === upper axis limit.
+\def\pgfplotsqpointoutsideofaxisrel#1#2#3{%
+ \begingroup
+ \def\pgfplotspointoutsideofaxis@plug@trafo##1##2{%
+ \begingroup
+ % compute ##1min + ##2 * (##1max - ##1min) :
+ %
+ \afterassignment\pgfplots@gobble@until@relax
+ \pgf@xa=##2pt\relax
+ \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\pgf@xa}%
+ %
+ \pgf@xa=\csname pgfplots@##1min\endcsname pt %
+ \pgf@xb=\csname pgfplots@##1max\endcsname pt %
+ \pgf@xc=\pgf@xb
+ \ifpgfplots@allow@reversal@of@rel@axis@cs
+ \if\pgfkeysvalueof{/pgfplots/##1 dir/value}r%
+ % reverse: exchange min and max.
+ \pgf@xb=\pgf@xa
+ \pgf@xa=\pgf@xc
+ \pgf@xc=\pgf@xb
+ \fi
+ \fi
+ \advance\pgf@xc by-\pgf@xa
+ \pgf@xc=\pgfplots@loc@TMPa\pgf@xc
+ \advance\pgf@xc by\pgf@xa
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xc}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ }%
+ \let\pgfplotspointoutsideofaxis@plug@getlimit=\pgfplotspointoutsideofaxis@getlimit@
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotspointoutsideofaxis@\pgfplots@loc@TMPa\relax{#2}{#3}%
+}%
+
+% A variant of \pgfplotsqpointoutsideofaxis which accepts transformed
+% values for '#2' (i.e. any data transformations and logs are already
+% applied).
+\def\pgfplotsqpointoutsideofaxistransformed#1#2#3{%
+ \begingroup
+ \def\pgfplotspointoutsideofaxis@plug@trafo##1##2{\def\pgfmathresult{##2}}%
+ \let\pgfplotspointoutsideofaxis@plug@getlimit=\pgfplotspointoutsideofaxis@getlimit@
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotspointoutsideofaxis@\pgfplots@loc@TMPa\relax{#2}{#3}%
+}%
+
+% Computes the unit outer normal vector of the axis identified by a
+% three-character-string '#1'.
+%
+% This is the same normal vector which is used inside of
+% \pgfplotsqpointoutsideofaxis and its variants.
+%
+% The output of this command will be cached and re-used during the
+% lifetime of an axis.
+%
+% The returned normal vector has length 1 (computed with
+% \pgfpointnormalised).
+%
+% NOTE: some specialized axis types support non-linear axes (for
+% example, polar axes). In that case, the outer normal vector *varies*
+% along the `v' direction (of the three-character-string `#1').
+% The value of `v' can be set using
+% \pgfplotspointouternormalvectorofaxissetv{<axis three char string>}{<transformed coordinate>}
+\def\pgfplotspointouternormalvectorofaxis#1{%
+ \pgfplotspointouternormalvectorofaxis@ifdependson@v{#1}{%
+ \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@#1\endcsname\relax
+ }{%
+ }%
+ \expandafter\ifx\csname pgfplotspointouternormalvectorofaxis@cache@#1\endcsname\relax
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotspointouternormalvectorofaxis@\pgfplots@loc@TMPa\relax%
+ % \endgroup in \pgfplotspointouternormalvectorofaxis@.
+ \expandafter\xdef\csname pgfplotspointouternormalvectorofaxis@cache@#1\endcsname{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \else
+ \csname pgfplotspointouternormalvectorofaxis@cache@#1\endcsname
+ \fi
+}%
+
+% Fixes the "v" value for successive calls to
+% \pgfplotspointouternormalvectorofaxis{#1}.
+%
+% #1 the three-character-string of an axis or the empty string.
+% If #1 is empty, the actual configuration of oriented surfaces may be
+% used to check which normal vector is intented.
+%
+% #2 the "v" value to store. It should be a transformed coordinate.
+\def\pgfplotspointouternormalvectorofaxissetv#1#2{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \expandafter\edef\csname pgfplotspointouternormalvectorofaxis@v@\pgfplotspointonorientedsurfaceA\endcsname{#2}%
+ \else
+ \expandafter\edef\csname pgfplotspointouternormalvectorofaxis@v@#1\endcsname{#2}%
+ \fi
+}%
+
+% Defines \pgfplotsretval to contain the 'v' value for an outer normal
+% vector (if there is one known). If there is no such value,
+% \pgfplotsretval will be empty.
+% #1 a three-character-string
+%
+% see \pgfplotspointouternormalvectorofaxissetv
+\def\pgfplotspointouternormalvectorofaxisgetv#1{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotspointouternormalvectorofaxisgetv@\pgfplots@loc@TMPa\relax\relax\relax\relax
+}
+\def\pgfplotspointouternormalvectorofaxisgetv@#1#2#3\relax{%
+ \pgfutil@ifundefined{pgfplotspointouternormalvectorofaxis@v@#1#2#3}{%
+ % no value found so far.
+ \if#1v%
+ \def\pgfplotsretval{x}%
+ \else
+ \if#2v%
+ \def\pgfplotsretval{y}%
+ \else
+ \def\pgfplotsretval{z}%
+ \fi
+ \fi
+ \pgfutil@ifundefined{pgfplotspointouternormalvectorofaxis@v@\pgfplotsretval}{%
+ \let\pgfplotsretval\pgfutil@empty
+ }{%
+ \edef\pgfplotsretval{\csname pgfplotspointouternormalvectorofaxis@v@\pgfplotsretval\endcsname}%
+ }%
+ }{%
+ \edef\pgfplotsretval{\csname pgfplotspointouternormalvectorofaxis@v@#1#2#3\endcsname}%
+ }%
+}%
+
+% invokes #2 if the outer normal for the axis #1 (identified by a
+% three-character-string) depends on a coordinate on that axis and #3
+% otherwise.
+%
+% Overwrite in subclasses if necessary.
+\def\pgfplotspointouternormalvectorofaxis@ifdependson@v#1#2#3{#3}
+
+\def\pgfplotspointouternormalvectorofaxis@#1#2#3\relax{%
+ \if v#1%
+ \def\pgfplots@loc@point@orthogonal@to@v##1##2{%
+ \pgfplotsqpointxyz{0}{##1}{##2}%
+ }%
+ \def\pgfplots@loc@char@for@baxis{#2}%
+ \def\pgfplots@loc@char@for@naxis{#3}%
+ \def\pgfplots@loc@vaxis{x}%
+ \def\pgfplots@loc@baxis{y}%
+ \def\pgfplots@loc@naxis{z}%
+ \else
+ \if v#2%
+ \def\pgfplots@loc@point@orthogonal@to@v##1##2{%
+ \pgfplotsqpointxyz{##1}{0}{##2}%
+ }%
+ \def\pgfplots@loc@char@for@baxis{#1}%
+ \def\pgfplots@loc@char@for@naxis{#3}%
+ \def\pgfplots@loc@vaxis{y}%
+ \def\pgfplots@loc@baxis{x}%
+ \def\pgfplots@loc@naxis{z}%
+ \else
+ \def\pgfplots@loc@point@orthogonal@to@v##1##2{%
+ \pgfplotsqpointxyz{##1}{##2}{0}%
+ }%
+ \def\pgfplots@loc@char@for@baxis{#1}%
+ \def\pgfplots@loc@char@for@naxis{#2}%
+ \def\pgfplots@loc@vaxis{z}%
+ \def\pgfplots@loc@baxis{x}%
+ \def\pgfplots@loc@naxis{y}%
+ \fi
+ \fi
+ %
+ \pgfplotspointouternormalvectorofaxis@get@otheraxis@sign{\pgfplots@loc@vaxis}{\pgfplots@loc@baxis}{\pgfplots@loc@char@for@baxis}%
+ \let\pgfplots@loc@baxissign=\pgfplotsretval
+ %
+ \pgfplotspointouternormalvectorofaxis@get@otheraxis@sign{\pgfplots@loc@vaxis}{\pgfplots@loc@naxis}{\pgfplots@loc@char@for@naxis}%
+ \let\pgfplots@loc@naxissign=\pgfplotsretval
+ %
+ %
+ % ok, compute vector scales:
+ \pgfplotsmath@ifzero{\csname pgfplots@\pgfplots@loc@baxis @veclength\endcsname}{%
+ \def\pgfplots@loc@baxissign{0}%
+ \def\pgfplots@loc@baxisscale{0}%
+ }{%
+ \edef\pgfplots@loc@baxisscale{\pgfplots@loc@baxissign\csname pgfplots@\pgfplots@loc@baxis @inverseveclength\endcsname}%
+ }%
+ \pgfplotsmath@ifzero{\csname pgfplots@\pgfplots@loc@naxis @veclength\endcsname}{%
+ \def\pgfplots@loc@naxissign{0}%
+ \def\pgfplots@loc@naxisscale{0}%
+ }{%
+ \edef\pgfplots@loc@naxisscale{\pgfplots@loc@naxissign\csname pgfplots@\pgfplots@loc@naxis @inverseveclength\endcsname}%
+ }%
+ %
+ % Ok, compute and normalize the vector:
+ \pgf@process{%
+ \pgfpointnormalised
+ {\pgfplots@loc@point@orthogonal@to@v{\pgfplots@loc@baxisscale}{\pgfplots@loc@naxisscale}}%
+ }%
+ \endgroup
+}%
+
+% #1: the axis for which we want the "outer normal".
+% #2: the "other axis" for which we seek the sign.
+% #3: the entry in the three-char-identifier which corresponds to
+% "other axis".
+\def\pgfplotspointouternormalvectorofaxis@get@otheraxis@sign#1#2#3{%
+ \ifcase#3\relax%
+ % case 0:
+ % this means : the '##1' direction of the surface
+ % orthogonal to the 'v' vector is on the lower axis
+ % limit. Since I need a vector pointing to the OUTSIDE of
+ % the axis, I need sign = -1
+ \def\pgfplotsretval{-}%
+ \or
+ % case 1:
+ % in this case, the OUTSIDE area requires a plus sign - the b
+ % axis already points to the inside.
+ \def\pgfplotsretval{+}%
+ \or
+ % case 2: we have the 'axis lines=centered' case.
+ %
+ % This case is complicated. The problem is that we do not know
+ % if we are at the top or bottom limit.
+ %
+ % BUT: we know what we would have done if this would be a
+ % normal boxed axis!
+ %
+ % The idea is to return the same normal vector as if this would be a boxed axis.
+ % To this end, we have to access the "ticklabel axis spec"
+ % which would have been used in this case.
+ %
+ % We computed it at startup. Might be a hack ... :-(
+ \edef\pgfplots@loc@TMPb{\csname pgfplots@#1ticklabelaxisspec@box\endcsname}%
+ %
+ % decode it: we have to replace '#3' by the value that it has
+ % in that boxed ticklabel axis spec!
+ \def\pgfplots@loc@TMPa##1##2##3{%
+ % search for the correct entry.
+ \if x#2\def\pgfplotsretval{##1}\fi
+ \if y#2\def\pgfplotsretval{##2}\fi
+ \if z#2\def\pgfplotsretval{##3}\fi
+ }%
+ \expandafter\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ %
+ \if 2\pgfplotsretval
+ \pgfplots@error{internal assertion failed.}%
+ \fi
+ %
+ % invoke it again!
+ \pgfplotspointouternormalvectorofaxis@get@otheraxis@sign{#1}{#2}{\pgfplotsretval}%
+ \fi
+}
+
+% very-low-level internal routine. Never invoke it directly.
+% @PRECONDITION:
+% an \begingroup has been opened.
+% @POSTCONDITION
+% an \endgroup has been closed and \pgf@x and \pgf@y are assigned.
+%
+% This grouping stuff has the intention to keep the "plug" things
+% local.
+%
+% #1#2#3 are the three characters for the line, delimited by \relax.
+% #4: the argument supplied as coordinate on that axis.
+% #5: the shift along the outer unit normal.
+\def\pgfplotspointoutsideofaxis@#1#2#3\relax#4#5{%
+ %
+ \def\pgfplotspointoutsideofaxis@lineshift{}%
+ %
+ \if v#1%
+ \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@loc@TMPa}{#2}%
+ \def\pgfplotspointoutsideofaxis@lineshift{x}%
+ %
+ \pgfplotspointonorientedsurfaceabsetupfor xzy%
+ \pgfplotspointoutsideofaxis@plug@trafo{x}{#4}\let\pgfplots@loc@A=\pgfmathresult
+ \ifpgfplots@threedim
+ \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@B=\pgfmathresult
+ \else
+ \def\pgfplots@loc@B{0}%
+ \fi
+ \else
+ \if v#2%
+ \ifpgfplots@threedim
+ \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \else
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@loc@TMPa}{#3}%
+ %
+ \pgfplotspointonorientedsurfaceabsetupfor yxz%
+ \pgfplotspointoutsideofaxis@plug@trafo{y}{#4}\let\pgfplots@loc@A=\pgfmathresult
+ \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@B=\pgfmathresult
+ \def\pgfplotspointoutsideofaxis@lineshift{y}%
+ \else
+ \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@loc@TMPa}{#1}%
+ %
+ \pgfplotspointonorientedsurfaceabsetupfor zyx%
+ \ifpgfplots@threedim
+ \pgfplotspointoutsideofaxis@plug@trafo{z}{#4}\let\pgfplots@loc@A=\pgfmathresult
+ \else
+ \def\pgfplots@loc@A{0}%
+ \fi
+ \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@B=\pgfmathresult
+ \def\pgfplotspointoutsideofaxis@lineshift{z}%
+ \fi
+ \fi
+ %
+ % read dimen argument #5:
+ \afterassignment\pgfplots@gobble@until@relax
+ \pgf@xa=#5pt\relax
+ %
+ \pgfkeysgetvalue{/pgfplots/axis \pgfplotspointoutsideofaxis@lineshift\space line shift}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \advance\pgf@xa by \pgfmathresult pt %
+ \fi
+ %
+ \edef\pgfplots@loc@distalong@normal{\pgf@sys@tonumber\pgf@xa}%
+ %
+%\message{pgfplotspointoutsideofaxis{#1#2#3}{#4}{#5}: A = \pgfplots@loc@A, B = \pgfplots@loc@B.^^J}%
+ %
+ \pgf@process{%
+ \pgfpointadd
+ {\pgfplotspointonorientedsurfaceab{\pgfplots@loc@A}{\pgfplots@loc@B}}
+ {%
+ \pgfplotspointouternormalvectorofaxissetv{#1#2#3}{\pgfplots@loc@A}%
+ \pgfqpointscale
+ {\pgfplots@loc@distalong@normal}%
+ {\pgfplotspointouternormalvectorofaxis{#1#2#3}}%
+ }%
+ }%
+ \endgroup
+}%
+%--------------------------------------------------
+% \def\pgfplotspointoutsideofaxis@#1#2#3\relax#4#5{%
+% \if v#1%
+% \def\pgfplots@loc@point@orthogonal@to@v{%
+% \pgfplotspointoutsideofaxis@plug@trafo{x}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult
+% \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPb=\pgfmathresult
+% \ifpgfplots@threedim
+% \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPc=\pgfmathresult
+% \else
+% \def\pgfplots@loc@TMPc{0}%
+% \fi
+% \pgfplotsqpointxyz{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}%
+% }%
+% \else
+% \if v#2%
+% \def\pgfplots@loc@point@orthogonal@to@v{%
+% \pgfplotspointoutsideofaxis@plug@trafo{y}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult
+% \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPb=\pgfmathresult
+% \ifpgfplots@threedim
+% \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPc=\pgfmathresult
+% \else
+% \def\pgfplots@loc@TMPc{0}%
+% \fi
+% \pgfplotsqpointxyz{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPc}%
+% }%
+% \else
+% \def\pgfplots@loc@point@orthogonal@to@v{%
+% \ifpgfplots@threedim
+% \pgfplotspointoutsideofaxis@plug@trafo{z}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult
+% \else
+% \def\pgfplots@loc@TMPa{0}%
+% \fi
+% \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPb=\pgfmathresult
+% \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPc=\pgfmathresult
+% \pgfplotsqpointxyz{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}{\pgfplots@loc@TMPa}%
+% }%
+% \fi
+% \fi
+% %
+% % read dimen argument #5:
+% \afterassignment\pgfplots@gobble@until@relax
+% \pgf@xa=#5pt\relax
+% \edef\pgfplots@loc@distalong@normal{\pgf@sys@tonumber\pgf@xa}%
+% %
+% %
+% \pgf@process{%
+% \pgfpointadd
+% {\pgfplots@loc@point@orthogonal@to@v}
+% {%
+% \pgfqpointscale
+% {\pgfplots@loc@distalong@normal}%
+% {\pgfplotspointouternormalvectorofaxis{#1#2#3}}%
+% }%
+% }%
+% \endgroup
+% }%
+%--------------------------------------------------
+
+% Helper method for \pgfplotsqpointoutsideofaxis and its variants.
+% #1: an axis (x,y or z)
+% #2: o(\pgfplots@loc@TMPa - \pgfplots@loc@TMPb) ne of '0', '1' or '2' where
+% 0 == add lower #1 axis limit,
+% 1 == add upper #1 axis limit,
+% 2 == add nothing.
+% #3: the value to add.
+\def\pgfplotspointoutsideofaxis@getlimit@#1#2{%
+ \if#20%
+ \expandafter\let\expandafter\pgfmathresult\csname pgfplots@#1min\endcsname
+ \else
+ \if#21%
+ \expandafter\let\expandafter\pgfmathresult\csname pgfplots@#1max\endcsname
+ \else
+ \expandafter\let\expandafter\pgfmathresult\csname pgfplots@logical@ZERO@#1\endcsname
+ \fi
+ \fi
+}%
+
+\newif\ifpgfplots@sloped
+\pgfplots@slopedtrue % its only purpose is to *DEACTIVATE* the sloped transformation after it has been activated.
+\newif\ifpgfplots@sloped@resets@nontranslations
+\newif\ifpgfplots@sloped@allowupsidedown
+\pgfkeys{
+ /pgfplots/sloped/true/.code={\pgfplots@slopedtrue},
+ /pgfplots/sloped/false/.code={\pgfplots@slopedfalse},
+ /pgfplots/sloped/allow upside down/.is if=pgfplots@sloped@allowupsidedown,
+ /pgfplots/sloped/allow upside down/.default=true,
+ /pgfplots/sloped/execute for upside down/.initial=,
+ /pgfplots/sloped/reset nontranslations/.is if=pgfplots@sloped@resets@nontranslations,
+ /pgfplots/sloped/reset nontranslations/.default=true,
+ %
+ % only used by polar axes at the time of this writing:
+ /pgfplots/sloped/at position/.initial=,
+}
+% Installs a rotation transformation matrix such that labels or
+% whatever are aligned precisely in direction of one of the two/three
+% coordinate directions.
+%
+% \pgfplotstransformtoaxisdirection[<options>]{<axis char>}
+%
+% <axis char>: the coordinate direction (one of x,y or z)
+%
+% The code is pretty much the same as \pgftransformlineattime, except
+% that the computation is considerably simpler as axis directions are
+% a well known quantity.
+%
+% This command uses \ifpgfplots@sloped@allowupsidedown (=false) and
+% \ifpgfplots@sloped@resets@nontranslations (= true). The default
+% setting is reinitialised before options are processed
+\def\pgfplotstransformtoaxisdirection{%
+ \pgfutil@ifnextchar[{\pgfplotstransformtoaxisdirection@}{\pgfplotstransformtoaxisdirection@[]}%
+}%
+\def\pgfplotstransformtoaxisdirection@[#1]#2{%
+ \pgfplots@sloped@allowupsidedownfalse
+ \pgfplots@sloped@resets@nontranslationstrue
+ %
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfqkeys{/pgfplots/sloped}{#1}%
+ \fi
+ \ifpgfplots@sloped
+ %
+ \ifpgfplots@sloped@resets@nontranslations
+ \pgftransformresetnontranslations
+ \fi
+ %
+ % compute unit length vector pointing into the direction of
+ % '#1#2#3':
+ \pgfqpointscale{\csname pgfplotsunit#2invlength\endcsname}{\csname pgfplotspointunit#2\endcsname}%
+ %
+ \ifdim\pgf@x<0pt%
+ % oh. upside down.
+ \pgfkeysvalueof{/pgfplots/sloped/execute for upside down}%
+ \ifpgfplots@sloped@allowupsidedown
+ \else
+ % do not allow upside down labels:
+ \global\pgf@x=-\pgf@x%
+ \global\pgf@y=-\pgf@y%
+ \fi
+ \fi%
+ %
+ \pgf@ya=-\pgf@y%
+ % set up rotation matrix
+ % [ cos(alpha) sin(alpha);
+ % -sin(alpha) cos(alpha) ]
+ % where cos(alpha) = n_x and sin(alpha) = n_y:
+ \pgftransformcm%
+ {\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}%
+ {\pgf@sys@tonumber{\pgf@ya}}{\pgf@sys@tonumber{\pgf@x}}{\pgfpointorigin}%
+ \fi
+}
+
+
+% Adds a further, temporary anchor to every node which will be
+% processed. The anchor will be named '#3'. It is placed such that
+% 1. the node's center is on a line in direction of the inwards normal
+% vector of the axis line denoted by '#2' and the 'at' position of the node,
+% 2. the node does not intrude the axis.
+%
+% #1: either x,y or z the direction which varies
+% #2: a three-char-string uniquely identifying the axis line.
+% The parameter '#1' is redundand: it is the same as the 'v'
+% character in '#2'.
+% #3: the newly defined achor name.
+%
+% @see \pgfplotsdeclareborderanchorforticklabelaxis
+\def\pgfplotsdeclareborderanchorforaxis#1#2#3{%
+ %
+ %
+ \pgfdeclaregenericanchor{#3}{\pgfplots@borderanchor@for@axis{#1}{#2}{##1}}%
+ \pgfdeclaregenericanchor{#3 opposite}{\pgfplots@borderanchor@for@axis@{#1}{#2}{##1}{+1}}%
+ %
+ % This variant will ALWAYS be placed on the boundary of the node.
+ % It is deprecated, I am keeping it for some time....
+ \pgfdeclaregenericanchor{#3*}{%
+ \csname pgf@anchor@##1@border\endcsname{%
+ \pgf@process{%
+ %
+ % I want to rotate the node FIRST, then
+ % I'd like to get the boundary anchor!
+ %
+ % My idea: apply the INVERSE transformation
+ % matrix, then compute the boundary anchor.
+ %
+ % As soon as pgf draws the node, the
+ % transformation matrix will be applied and
+ % everything is fine.
+ \pgfutil@ifundefined{pgfreferencednodename}{%
+ % use given transformation matrix.
+ }{%
+ \ifx\pgfreferencednodename\pgfutil@empty
+ % just use the given transformation matrix - we are
+ % typesetting an unlabeled node.
+ \else
+ \pgfsettransform{\csname pgf@sh@nt@\pgfreferencednodename\endcsname}%
+ \fi
+ }%
+ \pgftransforminvert
+ %
+ % This here is the anchor as such.
+ \pgfqpointscale{-1}{\pgfplotspointouternormalvectorofaxis{#2}}%
+ %
+ \pgf@pos@transform\pgf@x\pgf@y
+ }%
+ }%
+ }%
+}%
+
+% this does the work for \pgfplotsdeclareborderanchorforaxis.
+%
+% It depends on \pgfplotspointunit[xyz] and
+% \pgfplotspointouternormalvectorofaxis
+%
+% #1: either x,y or z the direction which varies
+% #2: a three-char-string uniquely identifying the axis line.
+% The parameter '#1' is redundand: it is the same as the 'v'
+% character in '#2'.
+% #3: the shape, provided as argument by the pgf routine invoking the
+% anchor.
+\def\pgfplots@borderanchor@for@axis#1#2#3{%
+ \pgfplots@borderanchor@for@axis@{#1}{#2}{#3}{-1}%
+}
+% same as \pgfplots@borderanchor@for@axis{#1}{#2}{3} except that #4 is
+% the SIGN for the outer normal.
+%
+% #4: the sign for the outer normal. #4=-1 means "use inner normal"
+% and +1 means "use outer normal"
+\def\pgfplots@borderanchor@for@axis@#1#2#3#4{%
+ \begingroup
+ \pgfutil@ifundefined{pgfreferencednodename}{%
+ % use given transformation matrix.
+ }{%
+ \ifx\pgfreferencednodename\pgfutil@empty
+ % just use the given transformation matrix - we are
+ % typesetting an unlabeled node.
+ \else
+ \pgfsettransform{\csname pgf@sh@nt@\pgfreferencednodename\endcsname}%
+ \fi
+ }%
+ % I only need to apply the trafo matrix to direction vectors. Eliminate
+ % shifts.
+ \pgf@pt@x=0pt %
+ \pgf@pt@y=0pt %
+ %
+ % I'll apply the inverse transformation matrix to direction
+ % vectors. To ensure the relative position of these vectors
+ % and the anchors of the node, I have to invert the matrix:
+ \pgftransforminvert
+ %
+ \pgfplotspointouternormalvectorofaxisgetv{#2}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \pgfkeysgetvalue{/pgfplots/near ticklabel at}\pgfplotsretval
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ % ah - we have one!
+ \csname pgfplotstransformcoordinate#1\endcsname{\pgfplotsretval}%
+ \pgfplotspointouternormalvectorofaxissetv{#2}{\pgfmathresult}%
+ \fi
+ \fi
+ %
+ % This here is the normal direction (points to the axis)
+ \pgfqpointscale{#4}{\pgfplotspointouternormalvectorofaxis{#2}}%
+ %
+ % we apply the inverse CM onto it here:
+ \pgf@pos@transform\pgf@x\pgf@y
+ \edef\pgfplots@tmp@normaldir{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ %
+ \pgfplots@borderanchor@snap@to@nearest@anchor{}% takes \pgf@x and \pgf@y
+ \let\pgfplots@anchor=\pgfplotsretval
+ %
+ % Now, I'd like the 'center' of the node on one line with the
+ % 'at={}' coordinate at which it shall be placed!
+ % This can be done as follows:
+ %
+ % Compute two lines:
+ % 1. a line parallel to the #1 axis which goes
+ % through our recently identified anchor,
+ % { x = x_a + r_1 * (#1 axis direction)
+ % 2. a line from center in direction of the normal,
+ % { x = x_c + r_2 n, r in R }
+ %
+ % Calculate the intersection point and return it! This
+ % involves a lot of arithmetics :-(
+ %
+ % UPDATE: I realized that using the 'center' anchor might be too
+ % restrictive. See the 'near ticklabel align' key.
+ %
+ % Note that this is actually too much work for the 2d case - I
+ % guess it would be more efficient without it. But for 3d, it
+ % really rocks.
+ %
+ % compute (unit#1 - normal):
+ \pgfplots@tmp@normaldir
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ %
+ % and the axis direction (in fact, I use -axis dir. But that
+ % doesn't matter for the intersection of two lines).
+ % Scale unit vector to length 1 to improve conditioning:
+ \pgfqpointscale
+ {\csname pgfplotsunit#1invlength\endcsname}
+ {\csname pgfplotspointunit#1\endcsname}%
+ % FIXME : shouldn't the values be copied AFTER the CM!?
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@pos@transform\pgf@xa\pgf@ya
+ %
+ \ifcase\pgfplots@borderanchor@align\relax
+ % near ticklabel align=inside:
+ % make sure that we are close to the beginning of the axis
+ % direction vector.
+ \pgfplots@borderanchor@snap@to@nearest@anchor{%
+ \if\pgfkeysvalueof{/pgfplots/#1 dir/value}n%
+ % simply take \pgf@x and \pgf@y as-is.
+ \else
+ \global\pgf@x=-\pgf@x
+ \global\pgf@y=-\pgf@y
+ \fi
+ }%
+ \or
+ % near ticklabel align=center:
+ \def\pgfplotsretval{center}% Ah. simple.
+ \or
+ % near ticklabel align=outside:
+ % make sure that we are far away from the beginning of the
+ % axis direction vector.
+ \pgfplots@borderanchor@snap@to@nearest@anchor{%
+ \if\pgfkeysvalueof{/pgfplots/#1 dir/value}n%
+ \global\pgf@x=-\pgf@x
+ \global\pgf@y=-\pgf@y
+ \else
+ % simply take \pgf@x and \pgf@y as-is.
+ \fi
+ }%
+ \fi
+ \let\pgfplots@anchor@inner=\pgfplotsretval
+ %
+ %
+ % verify that |n^T d |
+ \pgf@xc=\pgf@sys@tonumber\pgf@xa\pgf@xb
+ \advance\pgf@xc by\pgf@sys@tonumber\pgf@ya\pgf@yb
+ \ifdim\pgf@xc<0pt \pgf@xc=-\pgf@xc \fi
+ \ifdim\pgf@xc<0.8pt
+ % ok. 'n' and 'd' are not parallel.
+ %
+ \edef\pgfplots@LEQ{%
+ % solve linear system
+ % a11 a12
+ % a21 a22
+ {\pgf@sys@tonumber\pgf@xb}{\pgf@sys@tonumber\pgf@xa}%
+ {\pgf@sys@tonumber\pgf@yb}{\pgf@sys@tonumber\pgf@ya}%
+ }%
+ %
+ % This here controls the anchor! Changing it might be more
+ % useful than I thought in the first place...
+ \pgf@sh@reanchor{#3}{\pgfplots@anchor@inner}%
+ \edef\pgfplots@loc@center{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ %
+ % apply inverse matrix to right-hand-side (and compute RHS):
+ \pgfpointdiff% {<start>}{<end>} -> computes <end> - <start>
+ {\pgfplots@loc@center}%
+ {\pgf@sh@reanchor{#3}{\pgfplots@anchor}}%
+ \edef\pgfplots@RHS{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
+ %
+ \pgfutilsolvetwotwoleq{\pgfplots@LEQ}{\pgfplots@RHS}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfplots@error{Singular matrix encountered while computing boundary anchor. Please choose different values.}%
+ \def\pgfmathresult{0}{0}%
+ \fi
+ \def\pgfplots@extract##1##2{%
+ \def\pgfplots@r{##1}%
+ }%
+ \expandafter\pgfplots@extract\pgfmathresult
+ % GOT IT!
+ %
+ % compute x_c + r*n:
+ \pgfpointadd
+ {\pgfplots@loc@center}%
+ {\pgfqpointscale{\pgfplots@r}{\pgfplots@tmp@normaldir}}%
+ \else
+ \pgfplotswarning{ticklabel anchor undetermined}{#1}{\the\pgf@xb,\the\pgf@yb}{\the\pgf@xa,\the\pgf@ya}{\the\pgf@xc}\pgfeov
+ % Something went awry: normal and unit#1 are almost parallel!?
+ % just use the determined anchor.
+ \def\pgfplots@r{0}%
+ \pgf@sh@reanchor{#3}{\pgfplots@anchor}%
+ \fi
+%\message{==========>>>>>>>>>> I got finally (\the\pgf@x,\the\pgf@y). <<<<<<<<<===================}%
+ \pgf@process{}% <- transport outside of group
+ \endgroup
+}%
+
+% #1: a direction vector.
+%
+% assigns the resulting anchor to \pgfplotsretval
+\def\pgfplots@borderanchor@snap@to@nearest@anchor#1{%
+ \begingroup
+ #1%
+ % Now:
+ % auto-determine the canonical (north, north east etc) anchor
+ % at which the node touches the axis (remember: the axis is to
+ % be found in direction of the normal vector).
+ %
+ % This is kind of a snap-to-nearest-existing-anchor feature. But
+ % it tends to move the node too far away. It is used as starting
+ % point; we will refine it in the next step.
+ %
+ % This is a heuristicial procedure.
+ %
+ % Note that it does not hurt if there are "multiple best matches"
+ % (for example because they lie on the same line).
+ % The code below will move the final anchor point.
+ %
+ \def\pgfplots@thresh{0.17pt }% 80 degrees
+ %\def\pgfplots@thresh{0.3pt }%
+ %\def\pgfplots@thresh{0.707pt }% 45 degrees
+ \ifdim\pgf@y>0pt
+ \ifdim\pgf@y>\pgfplots@thresh
+ % only north anchor
+ \def\pgfplots@ycomp{north}%
+ \else
+ \def\pgfplots@ycomp{}%
+ \fi
+ \else
+ \ifdim\pgf@y<-\pgfplots@thresh
+ \def\pgfplots@ycomp{south}%
+ % south anchor
+ \else
+ \def\pgfplots@ycomp{}%
+ \fi
+ \fi
+ \ifdim\pgf@x>0pt
+ \ifdim\pgf@x>\pgfplots@thresh
+ \def\pgfplots@xcomp{east}%
+ \else
+ \def\pgfplots@xcomp{}%
+ \fi
+ \else
+ \ifdim\pgf@x<-\pgfplots@thresh
+ \def\pgfplots@xcomp{west}%
+ \else
+ \def\pgfplots@xcomp{}%
+ \fi
+ \fi
+ \edef\pgfplotsretval{%
+ \pgfplots@ycomp
+ \ifx\pgfplots@ycomp\pgfutil@empty
+ \else
+ \ifx\pgfplots@xcomp\pgfutil@empty
+ \else
+ \space
+ \fi
+ \fi
+ \pgfplots@xcomp
+ }%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}
+
+\def\pgfplotspointviewdir{%
+ %\pgfplotsmathvectordatascaletrafoinverse{\pgfplots@view@dir@threedim}{default}%
+ \let\pgfplotsretval=\pgfplots@view@dir@threedim
+ \pgfplotspointfromcsvvector{\pgfplotsretval}{default}%
+}%
+
+\def\message@pgfplots@units{%
+ \begingroup
+ \pgfmathparse{veclen(\pgf@zx,\pgf@zy)}\let\Z=\pgfmathresult
+ \ifdim\Z pt=0pt
+ \def\Z{1}%
+ \fi
+ \pgfmathparse{veclen(\pgf@xx,\pgf@xy)/\Z}\let\X=\pgfmathresult
+ \pgfmathparse{veclen(\pgf@yx,\pgf@yy)/\Z}\let\Y=\pgfmathresult
+ \expandafter\ifx\csname pgfplots@view@dir@threedim\endcsname\relax
+ \def\normal{view = (---),^^J}%
+ \else
+ \pgfplotsmathvectortostring{\pgfplots@view@dir@threedim}{default}%
+ \edef\normal{view = (\pgfplotsretval),^^J}%
+ \fi
+ \message{^^J
+ x = (\the\pgf@xx,\the\pgf@xy),^^J
+ y =(\the\pgf@yx,\the\pgf@yy),^^J
+ z = (\the\pgf@zx,\the\pgf@zy),^^J
+ \normal
+ unit vector ratio=[\X\space\Y\space 1],^^J}%
+ \endgroup
+}%
+
+
+% ==================================================================================
+%
+% COORDINATE MATH.
+%
+% ==================================================================================
+
+% Declares a new "subclass" to perform coordinate math.
+%
+% Coordinate math usually needs a more powerful number format than the pgf
+% basic layer, or at least a powerful mapping into the pgf basic
+% layer. Both cases are realized by the coordinate math class.
+%
+% Different coordinates can use different instances, and it is also
+% possible to use yet a further instance for point meta (or whatever).
+%
+% Coordinate math is used to compute axis limits and to map the range
+% into the pgf number format.
+%
+% It is *not* necessarily used for \pgfmathparse, since switching
+% the number format of \pgfmathparse is quite involved (at the time of
+% this writing). Instead, it is used for *single* operations (like
+% max, min, multiply, add).
+%
+% #1: the name of the coord math class
+% #2: methods to override the default.
+%
+% The available methods are documented and shown below in the
+% \pgfqkeys listing.
+%
+% @see the predefined examples, also shown below.
+\def\pgfplotsdeclarecoordmath#1#2{%
+ \edef\pgfplotsdeclarecoordmath@{@#1@}%
+ \pgfqkeys{/pgfplots/@declare coord math}{%
+ initialise=,
+ parse=\edef\pgfmathresult{##1}\expandafter\pgfmathparse\expandafter{\pgfmathresult},
+ parse int={%
+ \begingroup
+ \pgfplotscoordmath{\pgfplotscoordmathid}{parse}{##1}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{tofixed}{\pgfmathresult}%
+ \afterassignment\pgfplots@gobble@until@relax
+ \c@pgf@countd=\pgfmathresult\relax
+ \edef\pgfmathresult{\the\c@pgf@countd}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ },
+ parsenumber=\pgfmathfloatparsenumber{##1}\pgfmathfloattofixed{##1},%
+ zero= \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{0},
+ one= \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{1},
+ -one= \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{-1},
+ log e= \pgfmathlog@{##1},%
+ log to display log=\pgfmath@basic@multiply@{##1}{2.3025851},% * log(10)
+ log from display log=\pgfmath@basic@multiply@{##1}{0.434294},% / log(10)
+ log unsigned int={%
+ \edef\pgfmathresult{%
+ \ifcase##1
+ \or0
+ \or0.693147
+ \or1.098612
+ \or1.386294
+ \or1.60943791
+ \or1.7917594
+ \or1.94591014
+ \or2.07944154
+ \or2.197224
+ \fi
+ }%
+ },
+ set log basis=\edef\pgfmathresult{{#1}{##1}}\expandafter\pgfplotscoordmath@log@set@basis\pgfmathresult,
+ exp e={%
+ % make sure the exponential can be represented, i.e. use
+ % 'float' in the default repr:
+ \pgfmathfloatparsenumber{##1}%
+ \pgfmathfloatexp@\pgfmathresult%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{\pgfmathresult}%
+ },
+ tofixed= \edef\pgfmathresult{##1},%
+ tostring= \edef\pgfmathresult{##1},%
+ max= \pgfplotsmathmax{##1}{##2},%
+ min= \pgfplotsmathmin{##1}{##2},%
+ min limit= \def\pgfmathresult{-16300},%
+ max limit= \def\pgfmathresult{16300},%
+ if less than= {\pgfplotsmathlessthan{##1}{##2}\ifpgfmathfloatcomparison ##3\else ##4\fi},
+ if is= {%
+ \if##20%
+ \ifdim##1pt=0pt ##3\else ##4\fi
+ \else
+ \if##2+\ifdim##1pt>0pt ##3\else ##4\fi
+ \else
+ \if##2-\ifdim##1pt<0pt ##3\else ##4\fi
+ \else
+ \def\pgfplots@loc@TMPd{##1}\ifx\pgfplots@loc@TMPd\pgfutil@empty ##3\else ##4\fi
+ \fi
+ \fi
+ \fi
+ },%
+ if is bounded=\edef\pgfplotsretval{##1}\ifx\pgfplotsretval\pgfutil@empty ##3\else ##2\fi,
+ suffix= #1,%
+ datascaletrafo set params=,
+ datascaletrafo get params= \def\pgfmathresult{{0}{0}}\def\pgfplotsretval{0}\def\pgfplotsretvalb{0},
+ datascaletrafo= \edef\pgfmathresult{##1},
+ datascaletrafo inverse= \edef\pgfmathresult{##1},
+ datascaletrafo noshift inverse= \edef\pgfmathresult{##1},
+ datascaletrafo inverse to fixed= \edef\pgfmathresult{##1},
+ datascaletrafo noshift inverse to fixed= \edef\pgfmathresult{##1},
+ datascaletrafo noshift= \edef\pgfmathresult{##1},
+ datascaletrafo undo shift= \edef\pgfmathresult{##1},
+ datascaletrafo redo shift= \edef\pgfmathresult{##1},
+ #2%
+ }%
+ \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ op\endcsname##1##2{%
+ \noexpand\edef\noexpand\pgfplotscoordmath@{##2}%
+ \noexpand\expandafter\noexpand\expandafter\noexpand\csname pgfmath\csname pgfpmth@#1@suffix\endcsname ##1@\noexpand\endcsname\noexpand\pgfplotscoordmath@
+ }%
+ %
+ %
+ % these log function depend on the first argument of
+ % \pgfplotscoordmath{}, which is available as
+ % \pgfplotscoordmathid.
+ \pgfplotsutilforeachcommasep{%
+ exp,%
+ log,%
+ log to display log,%
+ log from display log,%
+ log to log 10,%
+ log unsigned int}\as\pgfplots@loc@TMPa
+ {%
+ \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@\pgfplots@loc@TMPa\endcsname{%
+ % invoke \pgfpmth@#1@@<name>@<function>
+ % for example
+ % \pgfpmth@pgfbasic@@y@log
+ \noexpand\csname pgfpmth\pgfplotsdeclarecoordmath@ @\noexpand\pgfplotscoordmathid @\pgfplots@loc@TMPa\noexpand\endcsname
+ }%
+ }%
+ %
+ \pgfutil@ifundefined{pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log}{%
+ \pgfutil@namelet
+ {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log}
+ {pgfpmth\pgfplotsdeclarecoordmath@ log e}%
+ }{}%
+ \pgfutil@ifundefined{pgfpmth\pgfplotsdeclarecoordmath@ tmpl@exp}{%
+ \pgfutil@namelet
+ {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@exp}
+ {pgfpmth\pgfplotsdeclarecoordmath@ exp e}%
+ }{}%
+ \pgfplotscoordmath@def@log@to@log@ten{#1}{}{tmpl}% empty arg
+ %
+}%
+\pgfqkeys{/pgfplots/@declare coord math}{%
+ initialise/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ initialise\endcsname{#1%
+ \pgfplotscoordmath@initialise@logs
+ }},%
+ % takes a number literal as input and defines \pgfmathresult to be
+ % the parsed result.
+ parsenumber/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ parsenumber\endcsname##1{#1}},%
+ %
+ zero/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ zero\endcsname{#1}},%
+ one/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ one\endcsname{#1}},%
+ -one/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ -one\endcsname{#1}},%
+ %
+ % Calls pgfmathparse. Note that this might need to switch to the
+ % required math library (which is not necessarily cheap)
+ parse/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ parse\endcsname##1{#1}},%
+ parse int/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ parse int\endcsname##1{#1}},%
+ %
+ % takes a parsed number and returns a fixed point number:
+ tofixed/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tofixed\endcsname##1{#1}},%
+ %
+ % chooses a human readable string (which can be processed by parsenumber):
+ tostring/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tostring\endcsname##1{#1}},%
+ %
+ % defines a max routine which returns the max of *exactly* two numbers:
+ max/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ max\endcsname##1##2{#1}},%
+ %
+ % counterpart for max:
+ min/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ min\endcsname##1##2{#1}},%
+ %
+ % defines \pgfmathresult to be the largest supported number.
+ max limit/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ max limit\endcsname{#1}},%
+ %
+ % defines \pgfmathresult to be the smallest supported number.
+ min limit/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ min limit\endcsname{#1}},%
+ %
+ % computes ##1 < ##2 and invokes ##3 in the true case and ##4 in
+ % the false case.
+ if less than/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ if less than\endcsname##1##2##3##4{#1}},%
+ % checks if ##1 is 0, positive, negative or unbounded
+ % ##1: the number to check
+ % ##2: either 0 or + or - or u (u = unbounded)
+ % ##3: true code
+ % ##4: false code
+ if is/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ if is\endcsname##1##2##3##4{#1}},%
+ %
+ % Checks if the argument ##1 is bounded and invokes ##2 in that
+ % case. IF the argument is unbounded, it invokes #3.
+ if is bounded/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ if is bounded\endcsname##1##2##3{#1}},%
+ %
+ % applies the natural logarithm. If the log is not defined, the
+ % argument is "unbounded", see 'if is bounded'
+ %
+ % 'log' is special in that it accepts a number literal which may
+ % be OUTSIDE of the accepted number format. The result, however, is
+ % then in the accepted number format.
+ log e/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ log e\endcsname##1{#1}},%
+ %
+ % Similar, but the log basis can be set with 'set log basis'.
+ % This allows \pgfplotscoordmath{x}{log}{} to use a different log
+ % basis thatn \pgfplotscoordmath{y}{log}{} (with special handling)
+ log/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log\endcsname##1{#1}},%
+ % applies a *scale* from the actual log basis to the actual
+ % *display* log basis. The display log basis is usually 10, unless
+ % the log basis has been changed.
+ log to display log/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log to display log\endcsname##1{#1}},%
+ % applies a *scale* from the displau log basis to the actual
+ % log basis (the inverse of `log to display log').
+ log from display log/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log from display log\endcsname##1{#1}},%
+ log to log 10/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log to log 10\endcsname##1{#1}},%
+ % returns log(i) where i \in {1,2,3,...,basis-1}
+ % currently, it is only invoked for log basis 10
+ log unsigned int/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log unsigned int\endcsname##1{#1}},%
+ % sets (changes) the actual log basis.
+ set log basis/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ set log basis\endcsname##1{#1}},%
+ %
+ % The inverse to 'log e '.
+ exp e/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ exp e\endcsname##1{#1}},%
+ %
+ % The inverse to 'log'. It also uses the correct log basis.
+ exp/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@exp\endcsname##1{#1}},%
+ %
+ % A macro taking two parameters:
+ % #1: the EXPONENT (as integer)
+ % #2: the SHIFT (as fixed point number)
+ %
+ % After any change, \pgfplotscoordmathnotifydatascalesetfor{<id>} will be
+ % invoked where <id> is the argument to
+ % \pgfplotscoordmath{<id>}...
+ datascaletrafo set params/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo set params\endcsname##1##2{%
+ #1\relax\pgfplotscoordmathnotifydatascalesetfor{\pgfplotscoordmathid}%
+ }},%
+ datascaletrafo set shift/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo set shift\endcsname##1{%
+ #1\relax\pgfplotscoordmathnotifydatascalesetfor{\pgfplotscoordmathid}%
+ }},%
+ %
+ % Defines \pgfmathresult to contain the two parameters in the form
+ % {#1}{#2} required for 'datascaletrafo set params':
+ % #1: the EXPONENT (as integer)
+ % #2: the SHIFT (as fixed point number)
+ % AND \pgfplotsretval as the EXPONENT and \pgfplotsretvalb as the SHIFT
+ datascaletrafo get params/.code={%
+ \expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo get params\endcsname{#1}%
+ },%
+ datascaletrafo/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo\endcsname##1{#1}},%
+ datascaletrafo inverse/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo inverse\endcsname##1{#1}},%
+ datascaletrafo noshift inverse/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift inverse\endcsname##1{#1}},%
+ datascaletrafo inverse to fixed/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo inverse to fixed\endcsname##1{#1}},%
+ datascaletrafo noshift inverse to fixed/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift inverse to fixed\endcsname##1{#1}},%
+ datascaletrafo noshift/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift\endcsname##1{#1}},%
+ datascaletrafo noshift/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift\endcsname##1{#1}},%
+ datascaletrafo undo shift/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo undo shift\endcsname##1{#1}},%
+ datascaletrafo redo shift/.code=
+ {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo redo shift\endcsname##1{#1}},%
+ %
+ % defines a suffix such that
+ % \csname pgfmath<suffix><op>@\endcsname
+ % exists. Example: <suffix>=float --> \pgfmathfloatmultiply@ for <op>=multiply
+ suffix/.code=
+ {\expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ suffix\endcsname{#1}},%
+}%
+
+\def\pgfplotscoordmath@initialise@logs{%
+ \edef\pgfplotsdeclarecoordmath@{@\pgfplotscoordmathclassfor{\pgfplotscoordmathid}@}%
+ \pgfutil@ifundefined{pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log}{%
+ \pgfplotsutilforeachcommasep{%
+ exp,%
+ log,%
+ log to display log,%
+ log from display log,%
+ log to log 10,%
+ log unsigned int}\as\pgfplots@loc@TMPa
+ {%
+ \pgfutil@namelet
+ {pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @\pgfplots@loc@TMPa}
+ {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@\pgfplots@loc@TMPa}%
+ }%
+ }{}%
+}%
+
+% shared implementation for 'set log basis' It works for every
+% subclass.
+\def\pgfplotscoordmath@log@set@basis#1#2{%
+ \edef\pgfplotsdeclarecoordmath@{@#1@}%
+ %
+ \pgfplotscoordmath{\pgfplotscoordmathid}{log e}{#2}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult% TMPa = log_e(#2)
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{reciprocal}{{\pgfmathresult}}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult% TMPb = 1/log_e(#2)
+ %
+ % log_a(x) = log_e(x) / log_e(a)
+ \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log\endcsname##1{%
+ \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{log e}{##1}%
+ \noexpand\ifx\noexpand\pgfmathresult\noexpand\pgfutil@empty
+ \noexpand\else
+ \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{%
+ {\noexpand\pgfmathresult}%
+ {\pgfplots@loc@TMPb}%
+ }%
+ \noexpand\fi
+ }%
+ %
+ % a^x = exp(log_e(a^x)) = exp(x*log_e(a))
+ \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @exp\endcsname##1{%
+ \noexpand\edef\noexpand\pgfmathresult{##1}%
+ \noexpand\ifx\noexpand\pgfmathresult\noexpand\pgfutil@empty
+ \noexpand\else
+ \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{%
+ {\noexpand\pgfmathresult}%
+ {\pgfplots@loc@TMPa}%
+ }%
+ \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{exp e}{\noexpand\pgfmathresult}%
+ \noexpand\fi
+ }%
+ \expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log to display log\endcsname##1{\edef\pgfmathresult{##1}}%
+ \expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log from display log\endcsname##1{\edef\pgfmathresult{##1}}%
+ %
+ % compute 'log unsigned int' for the new basis.
+ %
+ % Idea: re-scale the old implementation (of basis e for i = 1,...,9)
+ % and re-compute i>=10 :
+ \begingroup
+ \expandafter\let\expandafter\logi\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log unsigned int\endcsname
+ \let\logscale=\pgfplots@loc@TMPb
+ %
+ \logi{1}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@1\endcsname=\pgfmathresult
+ %
+ \logi{2}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@2\endcsname=\pgfmathresult
+ %
+ \logi{3}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@3\endcsname=\pgfmathresult
+ %
+ \logi{4}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@4\endcsname=\pgfmathresult
+ %
+ \logi{5}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@5\endcsname=\pgfmathresult
+ %
+ \logi{6}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@6\endcsname=\pgfmathresult
+ %
+ \logi{7}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@7\endcsname=\pgfmathresult
+ %
+ \logi{8}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@8\endcsname=\pgfmathresult
+ %
+ \logi{9}%
+ \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}%
+ \expandafter\let\csname logi@@9\endcsname=\pgfmathresult
+ %
+ \xdef\pgfplots@glob@TMPa##1{%
+ \noexpand\ifcase##1
+ \noexpand\def\noexpand\pgfmathresult{}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@1\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@2\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@3\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@4\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@5\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@6\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@7\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@8\endcsname}%
+ \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@9\endcsname}%
+ \noexpand\else
+ \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{log}{##1}%
+ \noexpand\fi
+ }%
+ \endgroup
+ \expandafter\let\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log unsigned int\endcsname=\pgfplots@glob@TMPa
+ \pgfplotscoordmath@def@log@to@log@ten{#1}\pgfplots@loc@TMPa{\pgfplotscoordmathid}%
+ %
+ \pgfutil@namelet
+ {pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log to log 10}
+ {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log to log 10}%
+}%
+% #1: the coord math class
+% #2: either empty (basis e) or 1/ln(basis)
+% #3: either 'tmpl' or '\pgfplotscoordmathid. It defines the target
+% macro name (see the source code)
+\def\pgfplotscoordmath@def@log@to@log@ten#1#2#3{%
+ \csname pgfpmth@#1@parsenumber\endcsname{0.434294}%
+ \edef\pgfplots@loc@TMPa{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % log basis e ---> log basis 10
+ % log_10 x = log x / log(10)
+ \else
+ % log basis a ---> log basis 10
+ %
+ % log_a x = log x / log a
+ % log_10 x = log_a x * log a / log(10) = log x / log(10) [OK]
+ \csname pgfpmth@#1@op\endcsname{multiply}{{#2}{\pgfmathresult}}%
+ \fi
+ \expandafter\edef\csname pgfpmth@#1@#3@log to log 10\endcsname##1{%
+ \noexpand\pgfplotscoordmath{\noexpand\pgfplotscoordmathid}{op}{multiply}{{##1}{\pgfmathresult}}%
+ }%
+}%
+
+% Assumes that #2 is a macro, parses it as number with "coord math choice" #1, and overwrites it with the result.
+\def\pgfplotscoordmathparsemacro#1#2{%
+ \pgfplotscoordmath{#1}{parsenumber}{#2}\let#2=\pgfmathresult
+}%
+
+
+\pgfplotsdeclarecoordmath{pgfbasic}{%
+ parsenumber={%
+ \pgfmathfloatparsenumber{#1}%
+ \expandafter\pgfmathfloatgetflagstomacro\expandafter{\pgfmathresult}\pgfplotsretval
+ \ifnum\pgfplotsretval>2
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ \pgfmathfloattofixed\pgfmathresult
+ \fi
+ },
+ suffix=@basic@,
+ zero=\def\pgfmathresult{0},
+ one=\def\pgfmathresult{1},
+ -one=\def\pgfmathresult{-1},
+}
+\pgfplotsdeclarecoordmath{float}{%
+ initialise=
+ \pgfutil@ifundefined{pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid}{%
+ \expandafter\edef\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname{0}%
+ \expandafter\edef\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname{0}%
+ }{},
+ parsenumber=\pgfmathfloatparsenumber{#1},
+ parse={%
+ \begingroup
+ \pgfkeys{/pgf/fpu,%
+ /pgf/fpu/output format=float,%
+ }%
+ \edef\pgfmathresult{#1}%
+ \expandafter\pgfmathparse\expandafter{\pgfmathresult}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ },
+ zero=\pgfmathfloatcreate{0}{0.0}{0},%
+ one=\pgfmathfloatcreate{1}{1.0}{0},%
+ -one=\pgfmathfloatcreate{2}{1.0}{0},%
+ tofixed=\pgfmathfloattofixed{#1},
+ tostring=\pgfmathfloattosci{#1},
+ max=\pgfplotsmathfloatmax{#1}{#2},%
+ min=\pgfplotsmathfloatmin{#1}{#2},%
+ max limit=\pgfmathfloatcreate{1}{1.0}{2147483645},%
+ min limit=\pgfmathfloatcreate{2}{1.0}{2147483645},%
+ log e=\pgfmathfloatparsenumber{#1}\pgfmathfloatln@{\pgfmathresult},%
+ if less than=\pgfmathfloatlessthan@{#1}{#2}\ifpgfmathfloatcomparison #3\else #4\fi,
+ if is bounded=%
+ \expandafter\pgfmathfloatgetflagstomacro\expandafter{#1}\pgfplotsretval
+ \ifnum\pgfplotsretval>2 #3\else #2\fi,
+ if is=%
+ \pgfmathfloatifflags{#1}{#2}{#3}{#4},
+ log=\pgfmathlog@float{#1},%
+ datascaletrafo set params={%
+ \expandafter\edef\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname{#1}%
+ \expandafter\edef\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname{#2}%
+ },%
+ datascaletrafo set shift={%
+ \expandafter\edef\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname{#1}%
+ },%
+ datascaletrafo get params={%
+ \edef\pgfplotsretval{\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}%
+ \edef\pgfplotsretvalb{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname}%
+ \edef\pgfmathresult{%
+ {\pgfplotsretval}%
+ {\pgfplotsretvalb}%
+ }%
+ },%
+ datascaletrafo={%
+ \edef\pgfmathresult{#1}%
+ \pgfmathfloatshift@\pgfmathresult{\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}%
+ \pgfmathfloattofixed\pgfmathresult
+ \expandafter\pgfmath@basic@subtract@\expandafter{\pgfmathresult}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname}%
+ },%
+ datascaletrafo noshift={%
+ \edef\pgfmathresult{#1}%
+ \pgfmathfloatshift@\pgfmathresult{\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ },%
+ datascaletrafo undo shift=
+ \pgfmath@basic@subtract@{#1}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname},%
+ datascaletrafo redo shift=\pgfmath@basic@add@{#1}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname},%
+ datascaletrafo inverse={%
+ \pgfplotscoordmath@float@datascaletrafo@inverse{#1}%
+ },%
+ datascaletrafo inverse to fixed={%
+ \pgfplotscoordmath@float@datascaletrafo@inverse{#1}%
+ \pgfmathfloattofixed\pgfmathresult
+ },%
+ datascaletrafo noshift inverse={%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloatshift@{\pgfmathresult}{-\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}%
+ },%
+ datascaletrafo noshift inverse to fixed={%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloatshift@{\pgfmathresult}{-\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}%
+ \pgfmathfloattofixed\pgfmathresult
+ },%
+}
+
+\def\pgfplotscoordmath@float@datascaletrafo@inverse#1{%
+ \pgfmath@basic@add@{#1}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname}%
+ \let\pgfplots@inverse@datascaletrafo@@shifted=\pgfmathresult
+ \pgfmathapproxequalto@{\pgfplots@inverse@datascaletrafo@@shifted}{0.0}%
+ \ifpgfmathcomparison
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \else
+ \pgfmathfloatparsenumber{\pgfplots@inverse@datascaletrafo@@shifted}%
+ \pgfmathfloatshift@{\pgfmathresult}{-\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}%
+ \fi
+}%
+
+% Invokes a coordinate math routine.
+%
+% #1: the axis (x,y or z)
+% #2: a method name declared by \pgfplotsdeclarecoordmath (one of
+% 'op', 'parsenumber', 'tofixed' etc)
+% #3-#9: any further arguments required to perform the call to '#2'.
+%
+% \pgfplotscoordmath {x}{op}{multiply}{{<a>}{<b>}}
+% \pgfplotscoordmath {x}{parsenumber}{<a>}
+\def\pgfplotscoordmath#1#2{%
+ \edef\pgfplotscoordmathid{#1}%
+ \csname pgfpmth@\csname pgfcrdmth@#1\endcsname @#2\endcsname}%
+
+\def\pgfplotscoordmathclassfor#1{\csname pgfcrdmth@#1\endcsname}%
+
+\def\pgfplotscoordmathnotifydatascalesetfor#1{}%
+
+% Enables a particular coordinate math class for the label `#1'.
+%
+% #1 a label (usually x,y or z)
+% #2 the coordinate math class (one prepare by
+% \pgfplotsdeclarecoordmath)
+%
+% From this point on, any call to \pgfplotscoordmath{#1}{...}
+% will use the selected math class.
+\def\pgfplotssetcoordmathfor#1#2{%
+ \pgfutil@ifundefined{pgfpmth@#2@initialise}{%
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, \string\pgfplotssetcoordmathfor{#1}{#2} failed since `#2' is unknown. Maybe you misspelled it?}\pgfeov%
+ }{%
+ \expandafter\edef\csname pgfcrdmth@#1\endcsname{#2}%
+ \pgfplotscoordmath{#1}{initialise}%
+ }%
+}%
+
+% Defines \pgfplotsretval to be the coordmath id for #1
+\def\pgfplotsgetcoordmathfor#1{%
+ \pgfutil@ifundefined{pgfcrdmth@#1}{%
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, \string\pgfplotsgetcoordmathfor{#1} failed since `#1' is unknown. Maybe you misspelled it?}\pgfeov%
+ }{%
+ \pgfutil@namelet{pgfplotsretval}{pgfcrdmth@#1}%
+ }%
+}%
+\pgfplotssetcoordmathfor{pgfbasic}{pgfbasic}%
+\pgfplotssetcoordmathfor{float}{float}%
+\pgfplotssetcoordmathfor{meta}{float}%
+\pgfplotssetcoordmathfor{default}{float}%
+
+
+
+% ==================================================================================
+
+
+
+% #1 the name of an input method for point meta. It must have been
+% declared by \pgfplotsdeclarepointmetasource first.
+% #2 any arguments supplied by the user (maybe empty).
+\def\pgfplotssetpointmetainput#1#2{%
+ \csname pgfpmeta@#1@initfor\endcsname{#2}%
+ %
+ \edef\pgfplotspointmetainputhandler{#1}%
+}%
+
+% Expands to the current value of 'point meta'.
+\def\pgfplotspointmetainputhandler{}
+
+\def\pgfplotsaxisifhaspointmeta#1#2{%
+ \ifx\pgfplotspointmetainputhandler\pgfutil@empty #2\else #1\fi
+}%
+
+\newif\ifpgfplots@perpointmeta@expand
+
+% Executes code '#2' if the point meta data #1 is bounded
+% and '#3' otherwise
+%
+% If the point meta is symbolic, it will always return true if and
+% only if the input is non-empty.
+\def\pgfplotsifpointmetaisbounded#1#2#3{%
+ \ifpgfplots@perpointmeta@expand
+ \edef\pgfplots@loc@TMPc{#1}%
+ \else
+ % symbolic point meta may have expansion issues -- but support one
+ % level as we usually invoke it with a macro name:
+ \expandafter\def\expandafter\pgfplots@loc@TMPc\expandafter{#1}%
+ \fi
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ % an empty meta data is _never_ bounded.
+ #3\relax
+ \else
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname
+ % a (non-empty, see above) symbolic meta data is "bounded"
+ #2\relax
+ \else
+ % check the number:
+ \pgfplotscoordmath{meta}{if is bounded}{\pgfplots@loc@TMPc}{#2}{#3}%
+ \fi
+ \fi
+}%
+
+% Invokes '#1' if the axis contains the coordinate designated by
+% \pgfplots@current@point@[xyz] and '#2' if not.
+\def\pgfplotsaxisifcontainspoint#1#2{%
+ \pgf@xa=\pgfplots@current@point@x pt % FIXME : SCOPE REGISTERS!?
+ \pgf@ya=\pgfplots@current@point@y pt %
+ \ifpgfplots@curplot@threedim
+ \pgf@yb=\pgfplots@current@point@z pt %
+ \fi
+ \def\pgfplots@loc@TMPa{#2}%
+ %
+ % I assume that \pgfplots@[xyz]min@reg and min@reg are registers
+ % containing the limits.
+ \ifdim\pgf@xa<\pgfplots@xmin@reg
+ \else
+ \ifdim\pgf@xa>\pgfplots@xmax@reg
+ \else
+ \ifdim\pgf@ya<\pgfplots@ymin@reg
+ \else
+ \ifdim\pgf@ya>\pgfplots@ymax@reg
+ \else
+ \ifpgfplots@curplot@threedim
+ \ifdim\pgf@yb<\pgfplots@zmin@reg
+ \else
+ \ifdim\pgf@yb>\pgfplots@zmax@reg
+ \else
+ \def\pgfplots@loc@TMPa{#1}%
+ \fi
+ \fi
+ \else
+ \def\pgfplots@loc@TMPa{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfplots@loc@TMPa%
+}
+
+% Declares a routine which can be used to get point meta input.
+%
+% Such a routine is invoked in a context where point coordinates are
+% processed, i.e. during 'plot coordinates', 'plot table' or the like.
+%
+% The routine is called `#1'. It consists of several methods, which
+% are described below, in the key definitions.
+%
+% #1: the name of the input routine.
+% #2: a sequence of key-value pairs which can be used to overwrite
+% 'assign', 'initfor' or the other components.
+% See the definitions below for examples.
+\def\pgfplotsdeclarepointmetasource#1#2{%
+ \expandafter\def\csname pgfpmeta@#1@assign\endcsname{\let\pgfplots@current@point@meta=\pgfutil@empty}%
+ \expandafter\def\csname pgfpmeta@#1@initfor\endcsname##1{%
+ \pgfplots@pointmeta@set@expand{#1}%
+ }%
+ \expandafter\def\csname pgfpmeta@#1@issymbolic\endcsname{0}%
+ \expandafter\def\csname pgfpmeta@#1@explicitinput\endcsname{0}%
+ \expandafter\def\csname pgfpmeta@#1@activate\endcsname{}%
+ \expandafter\def\csname pgfpmeta@#1@LUA class\endcsname{}%
+ \expandafter\def\csname pgfpmeta@#1@tostring\endcsname{#1}%
+ \edef\pgfplotsdeclarepointmetasource@{#1}%
+ \pgfqkeys{/pgfplots/@declare point meta src}{#2}%
+}%
+
+\def\pgfplots@pointmeta@set@expand#1{%
+ \if1\csname pgfpmeta@#1@explicitinput\endcsname
+ \pgfplots@perpointmeta@expandfalse
+ \else
+ \pgfplots@perpointmeta@expandtrue
+ \fi
+}%
+
+\pgfqkeys{/pgfplots/@declare point meta src}{%
+ %
+ % a macro used to initialise the point meta source when it is
+ % selected.
+ % This macro body is invoked by pgfplots when someone types
+ % 'point meta=x' -> will invoke 'pgfpmeta@x@initfor{}'.
+ % The first argument to initfor can be supplied by the user.
+ % PRECONDITION for 'initfor':
+ % - it will be invoked just before
+ % '\pgfplotspointmetainputhandler' will be changed.
+ % Default is to do nothing.
+ initfor/.code=
+ {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @initfor\endcsname##1{#1}},%
+ %
+ % Called during the survey phase before the first 'assign' call.
+ % It is usually empty.
+ activate/.code=
+ {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @activate\endcsname{#1}},%
+ %
+ % During the survey phase, this macro is expected to assign
+ % \pgfplots@current@point@meta
+ % if it is a numeric input method, it should return a
+ % floating point number.
+ % It is allowed to return an empty string to say "there is no point
+ % meta".
+ % PRECONDITION for '@assign':
+ % - the coordinate input method has already assigned its
+ % '\pgfplots@current@point@meta' (probably as raw input string).
+ % - the other input coordinates are already read.
+ % POSTCONDITION for '@assign':
+ % - \pgfplots@current@point@meta is ready for use:
+ % - EITHER a parsed floating point number
+ % - OR an empty string,
+ % - OR a symbolic string (if the issymbolic boolean is true)
+ % The default implementation is
+ % \let\pgfplots@current@point@meta=\pgfutil@empty
+ %
+ assign/.code=
+ {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @assign\endcsname{#1}},%
+ %
+ % expands to either '1' or '0'
+ % A numeric source will be processed numerically in float
+ % arithmetics. Thus, the output of the @assign routine should be
+ % a macro \pgfplots@current@point@meta in float format.
+ %
+ % The output of a numeric point meta source will result in meta
+ % limit updates and the final map to [0,1000] will be
+ % initialised automatically.
+ %
+ % A symbolic input routine won't be processed.
+ % Default is '0'
+ %
+ issymbolic/.code=
+ {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @issymbolic\endcsname{#1}},%
+ %
+ % expands to either
+ % '1' or '0'. In case '1', it expects explicit input from the
+ % coordinate input routines. For example, 'plot file' will look for
+ % further input after the x,y,z coordinates.
+ % Default is '0'
+ %
+ explicitinput/.code=
+ {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @explicitinput\endcsname{#1}},%
+ %
+ % the associated LUA class name (if any). Use an empty string if
+ % there is none.
+ LUA class/.code=
+ {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @LUA class\endcsname{#1}},%
+ %
+ tostring/.code=
+ {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @tostring\endcsname{#1}},%
+}%
+
+% An empty one. This is simple to check with
+% \ifx\pgfplotspointmetainputhandler\pgfutil@empty:
+\pgfplotsdeclarepointmetasource{}{}
+\pgfplotsdeclarepointmetasource{x}{assign={%
+ \let\pgfplots@current@point@meta=\pgfplots@current@point@x
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ },
+ LUA class=pgfplots.XcoordAssignmentPointMetaHandler}
+\pgfplotsdeclarepointmetasource{y}{assign={%
+ \let\pgfplots@current@point@meta=\pgfplots@current@point@y
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ },
+ LUA class=pgfplots.YcoordAssignmentPointMetaHandler}
+\pgfplotsdeclarepointmetasource{z}{assign={%
+ \let\pgfplots@current@point@meta=\pgfplots@current@point@z
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ },
+ LUA class=pgfplots.ZcoordAssignmentPointMetaHandler}
+
+\pgfplotsdeclarepointmetasource{explicit}{%
+ assign={%
+ \ifx\pgfplots@current@point@meta\pgfutil@empty
+ \else
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ \fi
+ },
+ explicitinput=1,%
+ LUA class=pgfplots.ExplicitPointMetaHandler.new(),
+}%
+\pgfplotsdeclarepointmetasource{explicit symbolic}{%
+ assign={},% no math, simply collect.
+ explicitinput=1,%
+ issymbolic=1%
+}%
+
+\pgfplotsdeclarepointmetasource{expr}{%
+ assign={%
+ \csname pgfpmeta@\pgfpmeta@expr@origchoice @assign\endcsname
+ %
+ \pgfkeysgetvalue{/pgfplots/point meta/expr}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfmathparse{\pgfplots@loc@TMPa}%
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfmathresult}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ \fi
+ },%
+ initfor={%
+ \pgfkeyssetvalue{/pgfplots/point meta/expr}{#1}%
+ \def\pgfplots@loc@TMPa{expr}%
+ \ifx\pgfplots@loc@TMPa\pgfplotspointmetainputhandler
+ \else
+ \let\pgfpmeta@expr@origchoice\pgfplotspointmetainputhandler
+ \fi
+ \ifx\pgfpmeta@expr@origchoice\pgfplots@loc@TMPa
+ \let\pgfpmeta@expr@origchoice\pgfutil@empty
+ \fi
+ %
+ \pgfplotsutilifcontainsmacro{#1}{%
+ % oh. The point meta expression contains a backslash - it
+ % depends on a macro. This means: it depends on \thisrow
+ % or similar TeX stuff - which must be evaluated by TeX.
+ %
+ % LUA cannot be used for this point meta handler.
+ \let\pgfpmeta@expr@LUA@class\pgfutil@empty
+ }{%
+ \def\pgfpmeta@expr@LUA@class{pgfplots.ExpressionPointMetaHandler.new("#1")}%
+ }%
+ \pgfplots@perpointmeta@expandtrue
+ },
+ LUA class=\pgfpmeta@expr@LUA@class,
+}%
+\pgfkeyssetvalue{/pgfplots/point meta/expr}{}%
+
+\pgfplotsdeclarepointmetasource{f(x)}{%
+ activate={%
+ \ifpgfplots@curplot@threedim
+ \def\pgfplotspointmetainputhandler{z}%
+ \else
+ \def\pgfplotspointmetainputhandler{y}%
+ \fi
+ \csname pgfpmeta@\pgfplotspointmetainputhandler @activate\endcsname
+ },
+}%
+
+\pgfplotsdeclarepointmetasource{TeX code}{%
+ assign={%
+ \begingroup
+ \let\pgfplotspointmeta=\pgfutil@empty
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/point meta/code/.@cmd}{}%
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplotspointmeta}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ \pgfmath@smuggleone\pgfplots@current@point@meta
+ \endgroup
+ },%
+ initfor={%
+ \pgfkeysdef{/pgfplots/point meta/code}{#1}%
+ \pgfplots@perpointmeta@expandtrue
+ },
+}%
+\pgfplotsdeclarepointmetasource{TeX code symbolic}{%
+ assign={%
+ \begingroup
+ \let\pgfplotspointmeta=\pgfutil@empty
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/point meta/code/.@cmd}{}%
+ \let\pgfplots@current@point@meta=\pgfplotspointmeta
+ \pgfmath@smuggleone\pgfplots@current@point@meta
+ \endgroup
+ },%
+ initfor={%
+ \pgfkeysdef{/pgfplots/point meta/code}{#1}%
+ \pgfplots@perpointmeta@expandfalse
+ },
+ issymbolic=1%
+}%
+\pgfkeysdef{/pgfplots/point meta/code}{}%
+
+% Internal stream methods.
+%
+% Please overwrite
+% - \pgfplots@coord@stream@start@,
+% - \pgfplots@coord@stream@end@ and
+% - \pgfplots@coord@stream@coord@
+% if you implement streams.
+%
+% REMARK:
+% - the stream methods automatically collect first and last
+% coordinates.
+% - I have experimented with global \addplot accumulation to reduce
+% copy operations. That experiment was not successfull (it was not
+% faster :-( ). However, the streaming methods still assign their
+% things globally...
+\def\pgfplots@coord@stream@start{%
+ \let\pgfplots@current@point@x=\pgfutil@empty
+ \let\pgfplots@current@point@y=\pgfutil@empty
+ \let\pgfplots@current@point@z=\pgfutil@empty
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \let\pgfplots@current@point@error@x@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@x@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@minus=\pgfutil@empty
+ \pgfplots@coord@stream@start@}%
+\def\pgfplots@coord@stream@end{\pgfplots@coord@stream@end@}
+
+% Will be invoked for every point coordinate.
+%
+% It invokes \pgfplots@coord@stream@coord@.
+%
+% Arguments:
+% \pgfplots@current@point@[xyz]
+% \pgfplots@current@point@[xyz]@error (if in argument list)
+% \pgfplots@current@point@meta
+\def\pgfplots@coord@stream@coord{%
+ \pgfplots@coord@stream@coord@%
+}%
+\def\pgfplotscoordstream@firstlast@init{%
+ \global\let\pgfplots@currentplot@firstcoord@x=\pgfutil@empty
+ \global\let\pgfplots@currentplot@firstcoord@y=\pgfutil@empty
+ \global\let\pgfplots@currentplot@firstcoord@z=\pgfutil@empty
+ \global\let\pgfplots@currentplot@lastcoord@x=\pgfutil@empty
+ \global\let\pgfplots@currentplot@lastcoord@y=\pgfutil@empty
+ \global\let\pgfplots@currentplot@lastcoord@z=\pgfutil@empty
+}%
+\def\pgfplotscoordstream@firstlast@update{%
+ \ifx\pgfplots@current@point@x\pgfutil@empty
+ % only one \if is enough as ONE empty coordinate causes all
+ % others to be reset as well.
+ \else
+ \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty
+ \global\let\pgfplots@currentplot@firstcoord@x=\pgfplots@current@point@x
+ \global\let\pgfplots@currentplot@firstcoord@y=\pgfplots@current@point@y
+ \global\let\pgfplots@currentplot@firstcoord@z=\pgfplots@current@point@z
+ \fi
+ \global\let\pgfplots@currentplot@lastcoord@x=\pgfplots@current@point@x
+ \global\let\pgfplots@currentplot@lastcoord@y=\pgfplots@current@point@y
+ \global\let\pgfplots@currentplot@lastcoord@z=\pgfplots@current@point@z
+ \fi
+}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Scanline management. The idea is to handle complete sequences of
+% input coordinates, which are usually separated by a blank line.
+%
+% This allows a simple syntax to provide matrix input - by means of scanlines.
+% Furthermore, 2d plots can use it to interrupt the display.
+%
+% An empty line in 'addplot coordinates {}' indicates the end of a
+% scan line. Similarly, an empty line in 'addplot file' or 'table'
+% also indicates the end of a scan line.
+%
+% The steps taken whenever a scan line is complete depend on the
+% configuration of the /pgfplots/empty line choice key (queried in
+% \pgfplotsscanlinelengthinitzero).
+%
+%
+% The following methods constitute the scanline interface.
+%
+% Usage:
+%
+% \pgfplotsscanlinelengthinitzero
+%
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinecomplete
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinecomplete
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinelengthincrease
+% <process point>
+% \pgfplotsscanlinecomplete
+%
+% \pgfplotsscanlinelengthcleanup
+%
+% In other words, the \pgfplotsscanlinelengthincrease routine is
+% invoked *before* the point is processed. That's important.
+%
+% Now, \pgfplotsscanlinelength expands to either
+% a) a negative number in which case there is no
+% unique scanline length.
+% More precisely, -1 means "there was no end-of-scanline marker"
+% -2 means "there where end-of-scanline markers, but the scanlines
+% had different lengths.
+% b) the scanline length.
+\def\pgfplotsscanlinelengthinitzero{%
+ \def\pgfplotsscanlinelength{-1}%
+ \pgfkeysgetvalue{/pgfplots/empty line}\pgfplots@loc@TMPa%
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \def\pgfplots@loc@TMPb{auto}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfplotsdetermineemptylinehandler
+ \pgfkeysgetvalue{/pgfplots/empty line}\pgfplots@loc@TMPa%
+ \fi
+ \def\pgfplots@loc@TMPb{jump}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \def\pgfplots@loc@TMPa{nan}% alias for jump
+ \fi
+ \def\pgfplots@loc@TMPb{no op}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \def\pgfplots@loc@TMPa{none}% alias for no op
+ \fi
+ \pgfutil@ifundefined{pgfplotsscanlinelength@\pgfplots@loc@TMPa @initzero}{%
+ \pgfplots@error{Sorry, the choice `empty line=\pgfkeysvalueof{/pgfplots/empty line}' is unknown. Maybe you misspelled it}%
+ }{}%
+ \expandafter\let\expandafter\pgfplotsscanlinelength@initzero \csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @initzero\endcsname
+ \expandafter\let\expandafter\pgfplotsscanlinelengthincrease \csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @increase\endcsname
+ \edef\pgfplotsscanlinecomplete{%
+ \expandafter\noexpand\csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @complete\endcsname
+ }%
+ \expandafter\let\expandafter\pgfplotsscanlinelengthcleanup \csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @cleanup\endcsname
+ \pgfplotsscanlinelength@initzero
+}%
+
+\newif\ifpgfplots@emptyline@compat
+
+% Invoked for 'empty line=auto'.
+%
+% @POSTCONDITION: '/pgfplots/empty line' is set to something useful
+% (not auto)
+\def\pgfplotsdetermineemptylinehandler{%
+ \if n\pgfplots@meshmode
+ % no mesh/surf plot:
+ \pgfkeyssetvalue{/pgfplots/empty line}{jump}%
+ \ifpgfplots@emptyline@compat
+ \pgfkeyssetvalue{/pgfplots/empty line}{none}% do nothing for backwards compatibility with 2D processing.
+ \fi
+ \else
+ % it is a mesh or surf plot; use scanline:
+ \pgfkeyssetvalue{/pgfplots/empty line}{scanline}%
+ \fi
+}%
+\def\pgfplotsscanlinedisablechanges{%
+ \let\pgfplotsscanlinecomplete=\relax
+ \let\pgfplotsscanlinelengthincrease=\relax
+ \let\pgfplotsscanlinelengthcleanup=\relax
+ \let\pgfplotsscanlinelengthinitzero=\relax
+ \let\pgfplotsscanlineendofinput=\relax
+}%
+
+% -------------------------------------------------------------------------------
+% empty line=scanline
+% class:
+\def\pgfplotsscanlinelength@scanline@initzero{%
+ \c@pgfplots@scanlineindex=0 % the index _inside_ of the current scanline
+ \def\pgfplotsscanlinecurrentlength{\the\c@pgfplots@scanlineindex}%
+ \def\pgfplotsscanlineindex{0}% 0 is the first scanline, 1 the second, and so on
+ \def\pgfplots@scanlinelength{-1}%
+}
+\def\pgfplotsscanlinelength@scanline@increase{%
+ \advance\c@pgfplots@scanlineindex by1
+}
+\def\pgfplotsscanlinelength@scanline@complete{%
+ \ifnum\pgfplots@scanlinelength>0
+ \ifnum\c@pgfplots@scanlineindex=0
+ %
+ % \pgfplotsscanlinecomplete
+ % \pgfplotsscanlinecomplete
+ % \pgfplotsscanlinecomplete
+ % should have the same effect as a single statement. Do
+ % nothing here.
+ \else
+ \ifnum\pgfplots@scanlinelength=\c@pgfplots@scanlineindex\relax
+ \else
+%\message{Found inconsistent scan line length: \pgfplots@scanlinelength\space vs. \the\c@pgfplots@scanlineindex\space near line \pgfplotstablelineno.}%
+ % special marker which means 'inconsistent scan line length found'
+ \def\pgfplots@scanlinelength{-2}%
+ \fi
+ \pgfplotsplothandlernotifyscanlinecomplete
+ \fi
+ \else
+ \ifnum\pgfplots@scanlinelength=-2
+ \else
+ \edef\pgfplots@scanlinelength{\the\c@pgfplots@scanlineindex}%
+ \fi
+ %
+ \ifnum\c@pgfplots@scanlineindex>0
+ \pgfplotsplothandlernotifyscanlinecomplete
+ \fi
+ \fi
+ \c@pgfplots@scanlineindex=0
+ \pgfplotsutil@advancestringcounter\pgfplotsscanlineindex%
+}
+\def\pgfplotsscanlinelength@scanline@cleanup{%
+ \ifnum\c@pgfplots@scanlineindex=0
+ % I assume the last scan line is already complete.
+ \else
+ \pgfplotsscanlinecomplete
+ \fi
+ \let\pgfplotsscanlinelength=\pgfplots@scanlinelength
+}
+% -------------------------------------------------------------------------------
+%
+% empty line=none class:
+%
+\let\pgfplotsscanlinelength@none@initzero=\pgfutil@empty
+\let\pgfplotsscanlinelength@none@increase=\relax
+\let\pgfplotsscanlinelength@none@complete=\relax
+\let\pgfplotsscanlinelength@none@cleanup=\relax
+% -------------------------------------------------------------------------------
+%
+% empty line=nan class:
+\def\pgfplotsscanlinelength@nan@initzero{%
+ \def\pgfplotsscanlinelength@nan@isfirst{1}%
+ \let\pgfplotsscanlinelength@nan@pendingwork=\relax
+ \pgfplotsifinplot{}{%
+ \let\pgfplotsaxisserializedatapoint=\relax
+ }%
+}%
+\def\pgfplotsscanlinelength@nan@increase{%
+ \def\pgfplotsscanlinelength@nan@isfirst{0}%
+ \pgfplotsscanlinelength@nan@pendingwork
+}%
+\def\pgfplotsscanlinelength@nan@complete{%
+ \if1\pgfplotsscanlinelength@nan@isfirst
+ \else
+ \pgfplotsifinplot{%
+ \let\pgfplotsscanlinelength@nan@pendingwork=\pgfplotsscanlinelength@nan@pendingwork@PREPARED
+ }{%
+ \let\pgfplotsscanlinelength@nan@pendingwork=\relax
+ }%
+ \fi
+ \def\pgfplotsscanlinelength@nan@isfirst{1}%
+}%
+\let\pgfplotsscanlinelength@nan@cleanup=\relax
+\def\pgfplotsscanlinelength@nan@pendingwork@PREPARED{%
+ \pgfplotsplothandlerappendjumpmarker`
+ %
+ \let\pgfplotsscanlinelength@nan@pendingwork=\relax
+}%
+
+\def\pgfplotsplothandlerappendjumpmarker{%
+ \ifpgfplots@LUA@backend@supported
+ \pgfplotsutil@directlua{pgfplots.texSurveyAddJump()}%
+ \else
+ % this will be executed when the next point has been
+ % found.
+ \def\pgfplots@current@point@x{}%
+ \def\pgfplots@current@point@y{}%
+ \def\pgfplots@current@point@z{}%
+ % simply serialize an empty point. That works -- the
+ % visualization phase checks if the coordinates are empty and
+ % visualizes them as "jump"
+ %
+ % Note that \pgfplotsplothandlersurveypoint is not a good
+ % choice here unless one employs its 'unbounded coords=jump'
+ % feature
+ \def\pgfplotsaxisplothasjumps{1}%
+ \pgfplotsaxisserializedatapoint
+ \fi
+}%
+%
+% -------------------------------------------------------------------------------
+
+
+\def\pgfplotsaxisfilteredcoordsaway{0}%
+\def\pgfplotsaxisplothasjumps{0}%
+\def\pgfplotsaxisplothasunboundedpointmeta{0}%
+\newif\ifpgfplotsaxisparsecoordinateok
+
+% Possibly values:
+% N = none, is not in \addplot
+% S = survey
+% V = visualization
+\def\pgfplotsaxisplotphase{N}
+
+\def\pgfplotsifinplot#1#2{%
+ \if\pgfplotsaxisplotphase N%
+ #2%
+ \else
+ #1%
+ \fi
+}%
+
+% Initialises
+% \pgfplots@coord@stream@start
+% \pgfplots@coord@stream@coord
+% \pgfplots@coord@stream@end
+% such that a following coordinate stream is processed properly. The
+% following coordinate stream may come from different input methods.
+%
+% This coordinate stream is the first time a coordinate will be
+% reported and processed by pgfplots. The task of this first pass is
+% to
+% - compute and update any axis limits,
+% - collect and prepare ranges for color data,
+% - handle stacked plots and error bars,
+% - store the complete state of the plot's preprocessing in an
+% internal datastructure for later completion.
+% This involves a serialization of all processed points (i.e. the
+% generation of a long coordinate list)
+%
+% Any \addplot command should issue \pgfplots@PREPARE@COORD@STREAM
+% eventually.
+%
+% Arguments:
+% #1: any trailing path commands after the 'plot' command as such,
+% for example \addplot plot coordinates {...} -- (0,0);
+% would yield #1 =' -- (0,0)'
+%
+% PRECONDITION:
+% - needs to be called inside of \addplot.
+% - \pgfplots@addplot@survey@@optionlist contains the <options>
+% provided to \addplot (all of them, including automatically
+% determined ones)
+%
+% REMARK:
+% The following code is permissable:
+% \pgfplots@PREPARE@COORD@STREAM{...}
+% \pgfplots@coord@stream@start
+% ...
+% \pgfplots@coord@stream@coord
+% ..
+% \pgfplots@coord@stream@coord
+% ..
+% \pgfplots@coord@stream@end
+% -> All need to be the SAME LEVEL OF SCOPING! The '@coord' commands
+% may not be scoped deeper than 'begin' and 'end'!
+% - I had a version which allowed that. it was actually slower!
+% - For now, the following things are global / local:
+% - point coordinate list: local
+% - meta data limits: global,
+% - what about stacked plot stuff: appears to be a combination
+% of local/global.
+% - all that will be serialized and written into
+% \pgfplots@stored@plotlist in \pgfplots@coord@stream@end.
+% This list is global, so, if I am not mistaken, the scoping
+% level of the complete stream operation from setup to @end can
+% be as deep as necessary - as long as all operations have the
+% same level of scoping.
+%
+% @see the detailed documentation in pgfplotsplothandlers.code.tex
+\long\def\pgfplots@PREPARE@COORD@STREAM#1{%
+ \ifpgfplots@curplot@threedim
+ \global\pgfplots@threedimtrue
+ \fi
+ \def\pgfplotsaxisfilteredcoordsaway{0}%
+ \def\pgfplotsaxisplothasjumps{0}%
+ \def\pgfplotsaxisplothasunboundedpointmeta{0}%
+ %
+ % FIXME : these macros should not be redefined! They are defined
+ % in \pgfplots@prepare@axis@API right during \begin{axis}... they
+ % probably shouldn't be changed.
+ \ifpgfplots@curplot@threedim
+ \let\pgfplotsaxisupdatelimitsforcoordinate=\pgfplotsaxisupdatelimitsforcoordinatethreedim
+ \let\pgfplotsaxisparsecoordinate=\pgfplotsaxisparsecoordinatethreedim
+ \else
+ \let\pgfplotsaxisupdatelimitsforcoordinate=\pgfplotsaxisupdatelimitsforcoordinatetwodim
+ \let\pgfplotsaxisparsecoordinate=\pgfplotsaxisparsecoordinatetwodim
+ \fi
+ \begingroup
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \let\E=\noexpand
+ %
+%\message{Assembled update-limits \ifpgfplots@curplot@threedim 3D\else 2D\fi macro to {\meaning\pgfplotsaxisupdatelimitsforcoordinate}}%
+ \ifpgfplots@bb@isactive
+ \else
+ % we are inside of
+ % \pgfplotsinterruptdatabb
+ % ..
+ % \endpgfinterruptboundingbox
+ % -> don't change data limits!
+ \gdef\pgfplotsaxisupdatelimitsforcoordinate##1##2##3{}%
+ \fi
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ %
+ % Takes a coordinate which is already parsed and applies steps
+ % such that it becomes its final values.
+ %
+ % This implements the stacked plot feature currently.
+ %
+ % PRECONDITION:
+ % \pgfplotsaxisparsecoordinate has already been called.
+ %
+ % POSTCONDITION:
+ % the point has its final coordinates; the axis won't change it
+ % anymore.
+ \xdef\pgfplotsaxispreparecoordinate{%
+ \E\ifpgfplotsaxisparsecoordinateok
+ % All following routines (limit updating/stacking/error
+ % bars) will use float numerics if necessary (controlled
+ % by ifs).
+ \E\pgfplotsaxistransformfromdatacs
+ \ifpgfplots@stackedmode
+ \E\pgfplots@stacked@preparepoint@inmacro%
+ \fi
+ \E\fi
+ }%
+ %
+ % A macro which should be called once for every data point during the
+ % survey phase.
+ %
+ % The caller is the plot handler's point survey routine.
+ %
+ % A data point might be a complicated thing which contains
+ % multiple coordinates. You need to invoke
+ % \pgfplotsaxisparsecoordinate and
+ % \pgfplotsaxispreparecoordinate for each of them. But
+ % \pgfplotsaxisdatapointsurveyed is invoked once for the complete
+ % set.
+ %
+ % @PRECONDITION
+ % - \pgfplots@current@point@[xyz] contain final coordinates
+ % (i.e. output of \pgfplotsaxispreparecoordinate)
+ %
+ % @POSTCONDITION
+ % - stacked plot things,
+ % - error bars,
+ % - xtick=data
+ % are all processed.
+ %
+ \xdef\pgfplotsaxisdatapointsurveyed{%
+ \E\ifpgfplotsaxisparsecoordinateok
+ % All following routines (limit updating/stacking/error
+ % bars) will use float numerics if necessary (controlled
+ % by ifs).
+ %
+ % Prepare \pgfplots@current@point@meta (see the preparation
+ % routine above):
+ \E\pgfplotsaxissurveysetpointmeta
+ %
+ \ifpgfplots@errorbars@enabled
+ \E\pgfplots@errorbars@survey@point
+ \fi
+ %
+ \ifpgfplots@collect@firstplot@astick
+ \ifnum\pgfplots@numplots=0
+ \E\ifx\E\pgfplots@firstplot@coords@x\E\pgfutil@empty
+ \E\t@pgfplots@tokc={}%
+ \E\else
+ \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@x,}%
+ \E\fi
+ \E\xdef\E\pgfplots@firstplot@coords@x{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@x}%
+ \E\ifx\E\pgfplots@firstplot@coords@y\E\pgfutil@empty
+ \E\t@pgfplots@tokc={}%
+ \E\else
+ \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@y,}%
+ \E\fi
+ \E\xdef\E\pgfplots@firstplot@coords@y{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@y}%
+ %
+ \ifpgfplots@curplot@threedim
+ \E\ifx\E\pgfplots@firstplot@coords@z\E\pgfutil@empty
+ \E\t@pgfplots@tokc={}%
+ \E\else
+ \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@z,}%
+ \E\fi
+ \E\xdef\E\pgfplots@firstplot@coords@z{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@z}%
+ \fi
+ \fi
+ \fi
+ \E\pgfplotscoordstream@firstlast@update
+ \E\pgfplotsaxisserializedatapoint
+ \E\else
+ % COORDINATE HAS BEEN FILTERED AWAY:
+ %
+ % make ALL empty to simplify special case checking:
+ \E\let\E\pgfplots@current@point@x=\E\pgfutil@empty
+ \E\let\E\pgfplots@current@point@y=\E\pgfutil@empty
+ \E\let\E\pgfplots@current@point@z=\E\pgfutil@empty
+ % check whether we have UNBOUNDED or just unfiltered
+ % coords:
+ \if\pgfplots@unbounded@handler d% unbounded coords=discard
+ \E\def\E\pgfplotsaxisfilteredcoordsaway{1}%
+ \ifpgfplots@warn@for@filter@discards
+ \E\pgfplots@message{%
+ NOTE: coordinate (\E\pgfplots@current@point@x@unfiltered,\E\pgfplots@current@point@y@unfiltered\ifpgfplots@curplot@threedim,\E\pgfplots@current@point@z@unfiltered\fi)
+ has been dropped because
+ \E\ifx\E\pgfplots@unbounded@dir\E\pgfutil@empty
+ of a coordinate filter.
+ \E\else
+ it is unbounded (in \E\pgfplots@unbounded@dir).
+ \E\fi
+ (see also unbounded coords=jump).
+ }%
+ \fi
+ \else
+ % unbounded coords=jump
+ \E\ifx\E\pgfplots@unbounded@dir\E\pgfutil@empty
+ \E\def\E\pgfplotsaxisfilteredcoordsaway{1}%
+ \ifpgfplots@warn@for@filter@discards
+ \E\pgfplots@message{%
+ NOTE: coordinate (\E\pgfplots@current@point@x@unfiltered,\E\pgfplots@current@point@y@unfiltered\ifpgfplots@curplot@threedim,\E\pgfplots@current@point@z@unfiltered\fi)
+ has been dropped because of a coordinate filter.
+ }%
+ \fi
+ \E\else
+ \E\def\E\pgfplotsaxisplothasjumps{1}%
+ \E\pgfplotsaxisserializedatapoint
+ \E\fi
+ \fi
+ \E\fi
+ %
+ % increase \pgfplots@current@point@coordindex:
+ \E\advance\E\c@pgfplots@coordindex by1
+ }%
+ %
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \endgroup
+ %
+ \def\pgfplotsaxissurveysetpointmeta{%
+ \pgfplotsplothandlersurveybeforesetpointmeta
+ \pgfplots@set@perpointmeta
+ \pgfplotsplothandlersurveyaftersetpointmeta
+ }%
+ %
+%\message{Prepared macro \string\pgfplots@update@limits@for@one@point: {\meaning\pgfplotsaxisupdatelimitsforcoordinate}}%
+%\message{Prepared macro \string\pgfplots@process@one@point: {\meaning\pgfplots@process@one@point}}%
+ %
+ \let\pgfplots@coord@stream@start@=\pgfplots@PREPARE@COORD@STREAM@start@
+ \def\pgfplots@coord@stream@coord@{%
+ \def\pgfplots@set@perpointmeta@done{0}%
+ % NOTE: this might call LUA (if supported):
+ \pgfplotsplothandlersurveypoint
+ }%
+ \def\pgfplots@coord@stream@end@{\pgfplots@PREPARE@COORD@STREAM@end@{#1}}%
+}%
+
+% The \pgfplots@coord@stream@start@ routine used inside of
+% \pgfplots@PREPARE@COORD@STREAM.
+%
+% It prepares everything for the first pass through all input
+% coordinates.
+\def\pgfplots@PREPARE@COORD@STREAM@start@{%
+ % The current implementation of pgfplots stores the preprocessed
+ % coordinate stream into a long list of coordinates.
+ % Since macro append is an expensive operation, it uses the highly
+ % optimized 'applistXX' structure:
+ \pgfplotsapplistXXnewempty
+ %
+ \edef\plotnumofactualtype{\numplotsofactualtype}%
+ \csname pgfpmeta@\pgfplotspointmetainputhandler @activate\endcsname
+ \pgfplots@LUA@survey@start
+ \pgfplotsplothandlersurveystart
+ \pgfplotscoordstream@firstlast@init
+ %
+ \pgfkeyssetvalue{/data point/x}{\pgfplots@current@point@x}%
+ \pgfkeyssetvalue{/data point/y}{\pgfplots@current@point@y}%
+ \pgfkeyssetvalue{/data point/z}{\pgfplots@current@point@z}%
+ \pgfkeyssetvalue{/data point/meta}{\pgfplots@current@point@meta}%
+ %
+ \ifpgfplots@stackedmode
+ \pgfplots@stacked@beginplot
+ \fi
+ \ifpgfplots@errorbars@enabled
+ % prepare error bar processing.
+ \pgfplots@errorbars@survey@begin
+ \fi
+ %
+ %
+ \pgfplots@prepare@visualization@dependencies
+ %
+ % Inside of math expressions, 'x', 'y' and 'z' expand to the
+ % current x,y and z coords respectively. Introduce these (and some
+ % more) shortcuts:
+ % FIXME : defining the resulting x/y coordinates as 'x' and 'y' constants was a really really bad idea in the first place :-(
+ \pgfplotsmathdeclarepseudoconstant{x}{\let\pgfmathresult=\pgfplots@current@point@x}%
+ \pgfplotsmathdeclarepseudoconstant{y}{\let\pgfmathresult=\pgfplots@current@point@y}%
+ \pgfplotsmathdeclarepseudoconstant{z}{\let\pgfmathresult=\pgfplots@current@point@z}%
+ \pgfplotsmathdeclarepseudoconstant{rawx}{\let\pgfmathresult=\pgfplots@current@point@x@unfiltered}%
+ \pgfplotsmathdeclarepseudoconstant{rawy}{\let\pgfmathresult=\pgfplots@current@point@y@unfiltered}%
+ \pgfplotsmathdeclarepseudoconstant{rawz}{\let\pgfmathresult=\pgfplots@current@point@z@unfiltered}%
+ \pgfplotsmathdeclarepseudoconstant{meta}{%
+ \let\pgfmathresult=\pgfplots@current@point@meta
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfplotscoordmath{meta}{parsenumber}{0}%
+ \fi
+ }%
+ \pgfmathredeclarefunction{thisrow}{%
+ \getthisrow{##1}\pgfmathresult
+ % XXX : this does NOT allow to return string values,
+ % unfortunately! the fpu makes garbage out of it.
+ % I already tried to parse it here and return special string
+ % markers, but that approach requires much more effort...
+ }%
+ \pgfmathredeclarefunction{thisrowno}{%
+ \getthisrowno{##1}\pgfmathresult
+ }%
+ %
+ % %%%%%%%%%%%%%%
+ %
+ % Define \pgfplots@set@perpointmeta properly:
+ \def\pgfplots@set@perpointmeta{%
+ \if0\pgfplots@set@perpointmeta@done
+ \csname pgfpmeta@\pgfplotspointmetainputhandler @assign\endcsname
+ \def\pgfplots@set@perpointmeta@done{1}%
+ \pgfplots@set@perpointmeta@limits
+ \fi
+ }%
+ % append limit updating to \pgfplots@set@perpointmeta :
+ \if0\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname
+ % We need to work with per point meta data.
+ % So, also compute the data range on a per-plot basis!
+ % These limits are important later.
+ \pgfkeysgetvalue{/pgfplots/point meta min}\pgfplots@metamin
+ \t@pgfplots@tokb={}%
+ \ifx\pgfplots@metamin\pgfutil@empty
+ \global\let\pgfplots@metamin=\pgfplots@invalidrange@metamin
+ \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb
+ \pgfplotscoordmath{meta}{min}{\pgfplots@metamin}{\pgfplots@current@point@meta}%
+ \global\let\pgfplots@metamin=\pgfmathresult
+ }%
+ \else
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@metamin}%
+ \global\let\pgfplots@metamin=\pgfmathresult
+ \fi
+ \pgfkeysgetvalue{/pgfplots/point meta max}\pgfplots@metamax
+ \ifx\pgfplots@metamax\pgfutil@empty
+ \global\let\pgfplots@metamax=\pgfplots@invalidrange@metamax
+ \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb
+ \pgfplotscoordmath{meta}{max}{\pgfplots@metamax}{\pgfplots@current@point@meta}%
+ \global\let\pgfplots@metamax=\pgfmathresult
+ }%
+ \else
+ \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@metamax}%
+ \global\let\pgfplots@metamax=\pgfmathresult
+ \fi
+ %
+ \edef\pgfplots@set@perpointmeta@limits{%
+ \noexpand\pgfplotsifpointmetaisbounded{\noexpand\pgfplots@current@point@meta}{%
+ \the\t@pgfplots@tokb
+ }{%
+ \noexpand\def\noexpand\pgfplotsaxisplothasunboundedpointmeta{1}%
+ }%
+ }%
+ \else
+ % there is no point meta:
+ \global\let\pgfplots@metamin=\pgfutil@empty
+ \global\let\pgfplots@metamax=\pgfutil@empty
+ \def\pgfplots@set@perpointmeta@limits{%
+ \pgfplotsifpointmetaisbounded{\pgfplots@current@point@meta}{%
+ }{%
+ \def\pgfplotsaxisplothasunboundedpointmeta{1}%
+ }%
+ }%
+ \fi
+}%
+
+\def\pgfplots@define@dummies@for@pseudoconstants{%
+ \pgfmathdeclarefunction{thisrow}{1}{%
+ \pgfplots@error{You cannot use 'thisrow' in the current context.}%
+ }%
+ \pgfmathdeclarefunction{thisrowno}{1}{%
+ \pgfplots@error{You cannot use 'thisrowno' in the current context.}%
+ }%
+}%
+\def\pgfplotsaxisupdatelimitsforpointmeta#1{%
+ \begingroup
+ \def\pgfplots@current@point@meta{#1}%
+ \pgfplots@set@perpointmeta@limits
+ \endgroup
+}%
+% This is the \pgfplots@coord@stream@end@ routine which is invoked by
+% \pgfplots@PREPARE@COORD@STREAM.
+%
+% It finalizes the first pass through the input coordinates and
+% remembers the preprocessed \addplot command.
+%
+% Technical note: The parameters provided to
+% \pgfplots@PREPARE@COORD@STREAM
+% are needed here. This doesn't fit directly into the framework of
+% coordinate streams, see \pgfplots@PREPARE@COORD@STREAM how this
+% invocation works.
+%
+% #1,#2: see \pgfplots@PREPARE@COORD@STREAM
+\def\pgfplots@PREPARE@COORD@STREAM@end@#1{%
+ \pgfkeysvalueof{/pgfplots/execute at end survey}%
+ \ifpgfplots@LUA@backend@supported
+ \pgfplots@LUA@survey@end
+ \fi
+ % FIXME : move this the \pgfplotsplothandlersurveyend of mesh plot
+ % handler:
+ \pgfkeyssetvalue{/pgfplots/mesh/num points}{\pgfplots@current@point@coordindex}%
+ %
+ \pgfplotsplothandlersurveyend
+ \ifx\pgfplots@metamin\pgfutil@empty
+ \else
+ \if\pgfplots@axiswide@metamin@autocompute1%
+ \pgfplotscoordmath{meta}{min}{\pgfplots@axiswide@metamin}{\pgfplots@metamin}%
+ \global\let\pgfplots@axiswide@metamin=\pgfmathresult
+ \fi
+ \if\pgfplots@axiswide@metamax@autocompute1%
+ \pgfplotscoordmath{meta}{max}{\pgfplots@axiswide@metamax}{\pgfplots@metamax}%
+ \global\let\pgfplots@axiswide@metamax=\pgfmathresult
+ \fi
+ \fi
+ \if1\pgfplots@colorbar@set@src% this 0|1 switch is set in \pgfplots@start@plot@with@behavioroptions
+ \ifx\pgfplots@metamin\pgfutil@empty
+ \pgfplotsthrow{no such element}{\pgfplots@loc@TMPa}{Sorry, `colorbar source' can't be processed: the current \string\addplot\space command doesn't have point meta. Ignoring it.}\pgfeov%
+ \else
+ \global\let\pgfplots@colorbar@src@metamin=\pgfplots@metamin
+ \global\let\pgfplots@colorbar@src@metamax=\pgfplots@metamax
+ \fi
+ \fi
+ \ifpgfplots@autocompute@all@limits
+ \global\let\pgfplots@data@xmin=\pgfplots@xmin
+ \global\let\pgfplots@data@xmax=\pgfplots@xmax
+ \global\let\pgfplots@data@ymin=\pgfplots@ymin
+ \global\let\pgfplots@data@ymax=\pgfplots@ymax
+ \global\let\pgfplots@data@zmin=\pgfplots@zmin
+ \global\let\pgfplots@data@zmax=\pgfplots@zmax
+ \fi
+ \ifpgfplots@errorbars@enabled
+ \pgfplots@errorbars@survey@end
+ \fi
+ \ifpgfplots@stackedmode
+ \pgfplots@stacked@survey@endplot
+ \fi
+ \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty
+ \pgfplotswarning{plot without coordinates}\pgfeov%
+ \else
+ % Idea: use
+ % \scope[plot specification]
+ % <any paths for error bars>
+ % \endscope
+ % \draw plot coordinates {...};
+ % to share plot specifications between error bars and plot
+ % coordinates. Unfortunately, it is NOT sufficient to use
+ % \tikzset
+ %
+ %% FIXME : why is this here and not in the mesh plot handler!?
+ \pgfplotspreparemeshkeydefaults%
+ \pgfplots@PREPARE@COORD@STREAM@end@determinecoordsorting x%
+ \pgfplots@PREPARE@COORD@STREAM@end@determinecoordsorting y%
+ %
+ \pgfplots@remember@survey@option@list
+ %
+ % warning: rememberplotspec calls list macros which
+ % overwrite \t@pgfplots@toka
+ \t@pgfplots@toka=\expandafter{\pgfplots@addplot@survey@@optionlist}%
+ % ATTENTION: do NOT call list macros from here on!
+ %
+ \pgfplotsplothandlerserializestateto\pgfplots@loc@TMPa
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}%
+ %
+ \pgfplots@markers@survey@set@visphasename
+ \let\pgfplots@markers@visphase@name=\pgfplotsretval
+ %
+ \pgfplotssurveyphase@set@visphase@names{#1}%
+ \let\pgfplots@visphase@names=\pgfplotsretval
+ %
+ \t@pgfplots@tokc={#1}%
+ %
+ % SERIALIZE RESULT:
+ %
+ % everything which has been accumulated so far (including the
+ % preprocessed coordinates) will be serialized into the
+ % structure \pgfplots@stored@plotlist (globally).
+ %
+ % assemble a \pgfplots@addplot@enqueue@coords command ...
+ % BEGIN HERE ...
+ % vvvvvvvvvv
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\pgfplots@addplot@enqueue@coords
+ {% precommand(s):
+ \expandafter\noexpand\csname pgfplots@curplot@threedim\ifpgfplots@curplot@threedim true\else false\fi\endcsname
+ %
+ % Did we prepare the data within LUA? remember that!
+ \ifpgfplots@LUA@backend@supported
+ \noexpand\pgfplots@LUA@backend@supportedtrue
+ \pgfplots@LUA@backend@serialized@commands
+ \else
+ \noexpand\pgfplots@LUA@backend@supportedfalse
+ \fi
+ \noexpand\def\noexpand\plotnum{\plotnum}%
+ %
+ % store \plotnumofactualtype
+ \noexpand\def\noexpand\plotnumofactualtype{\plotnumofactualtype}%
+ % ... and make sure that it
+ % remains the same type even if some plot handler uses
+ % other plot handlers internally:
+ \noexpand\def\noexpand\pgfplotsplothandlername@actual{\pgfplotsplothandlername@actual}%
+ \noexpand\let\noexpand\numplotsofactualtype\noexpand\pgfplots@numplotsofactualtype@duringplot
+ %
+ \noexpand\def\noexpand\numcoords{\pgfplots@current@point@coordindex}%
+ % \pgfplots@current@point@coordindex will always contain the current index.
+ % Maybe overwritten if not provided using \c@pgfplots@coordindex.
+ \noexpand\def\noexpand\pgfplots@current@point@coordindex{\noexpand\the\noexpand\c@pgfplots@coordindex}%
+ \noexpand\def\noexpand\coordindex{\noexpand\pgfplots@current@point@coordindex}% valid inside of \addplot
+ %
+ \ifpgfplots@stackedmode
+ \pgfplots@stacked@serialized@commands
+ \fi
+ %
+ % save the possibly prepare/adjusted plot
+ % variables [FIXME: move after \pgfplots@define@currentplotstyle@as ?]:
+ \noexpand\pgfkeyssetvalue{/pgfplots/samples}{\pgfplots@plot@samples}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/domain}{\pgfplots@plot@domain}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/samples at}{\pgfplots@plot@samples@at}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/mesh/rows}{\pgfkeysvalueof{/pgfplots/mesh/rows}}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/mesh/cols}{\pgfkeysvalueof{/pgfplots/mesh/cols}}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/mesh/num points}{\pgfkeysvalueof{/pgfplots/mesh/num points}}%
+ % either '+' or '-' :
+ \noexpand\pgfkeyssetvalue{/pgfplots/x coord sorting}{\pgfkeysvalueof{/pgfplots/x coord sorting}}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/y coord sorting}{\pgfkeysvalueof{/pgfplots/y coord sorting}}%
+ %
+ % remember 'current plot style':
+ \noexpand\pgfplots@define@currentplotstyle@as{%
+ \the\t@pgfplots@toka
+ }%
+ % per-point meta data ranges which apply only to
+ % this plot:
+ \noexpand\xdef\noexpand\pgfplots@metamin{\pgfplots@metamin}%
+ \noexpand\xdef\noexpand\pgfplots@metamax{\pgfplots@metamax}%
+ \noexpand\def\noexpand\pgfplotspointmetainputhandler{\pgfplotspointmetainputhandler}%
+ \noexpand\def\noexpand\pgfplots@serialized@state@plothandler{\the\t@pgfplots@tokb}%
+ \noexpand\def\noexpand\pgfplots@markers@visphase@name{\pgfplots@markers@visphase@name}%
+ \noexpand\def\noexpand\pgfplots@visphase@names{\pgfplots@visphase@names}%
+ \noexpand\def\noexpand\pgfplotsaxisfilteredcoordsaway{\pgfplotsaxisfilteredcoordsaway}%
+ \noexpand\def\noexpand\pgfplotsaxisplothasjumps{\pgfplotsaxisplothasjumps}%
+ \noexpand\def\noexpand\pgfplotsaxisplothasunboundedpointmeta{\pgfplotsaxisplothasunboundedpointmeta}%
+ \noexpand\pgfkeyssetvalue{/pgfplots/on layer}{\pgfkeysvalueof{/pgfplots/on layer}}%
+ \noexpand\def\noexpand\pgfplots@serialized@afterpath{\the\t@pgfplots@tokc}%
+ \noexpand\def\noexpand\pgfplots@addplot@point@meta@description@of@explicit@value{\pgfplots@addplot@point@meta@description@of@explicit@value}%
+ }%
+ {% draw command:
+ \noexpand\path%
+ }%
+ }%
+ \pgfplotsapplistXXlet\pgfplots@coord@stream@recorded
+ \pgfplotsapplistXXclear
+ \t@pgfplots@tokc=\expandafter{\pgfplots@coord@stream@recorded}%
+ \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPa}%
+ \xdef\pgfplots@glob@TMPa{%
+ \the\t@pgfplots@toka
+ {% coordinates which need to be processed in \endaxis.
+ % See
+ % \pgfplots@coord@stream@finalize@storedcoords@START
+ % (will become available as \pgfplots@stored@current@data)
+ \the\t@pgfplots@tokc
+ }%
+ }%
+ %
+ \pgfplots@glob@TMPa
+ {%
+ % Post commands are empty here.
+ }%
+ %^^^^^^^^^^^^ ... END of \pgfplots@addplot@enqueue@coords HERE
+ \fi
+ \pgfplots@end@plot
+}%
+
+\def\pgfplots@remember@survey@option@list{%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@addplot@survey@@optionlist,%
+ /pgfplots/.cd,/pgfplots/every axis plot post}%
+ \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc}%
+ \edef\pgfplots@loc@TMPa{/pgfplots/every axis plot except legend/.code=,\the\t@pgfplots@tokc}%
+ \ifpgfplots@curplot@isirrelevant
+ % for \label commands:
+ \expandafter\pgfplots@rememberplotspec@for@label\expandafter{\pgfplots@addplot@survey@@optionlist}%
+ \else
+ \expandafter\pgfplots@rememberplotspec\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+}%
+
+\def\pgfplots@LUA@survey@log@deactivation#1{%
+ \pgfplots@log{\pgfplots@LUA@loglevel@info}{Using 'lua backend=false' for plot \the\pgfplots@numplots\space (type '\pgfplotsplothandlername'): #1.}%
+ \pgfplots@LUA@backend@failed
+}%
+
+\def\pgfplots@LUA@survey@get@filter#1{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/#1 filter/.@cmd}\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key
+ \let\pgfplotsretval=\pgfutil@empty
+ \else
+ \pgfplots@ifisfilterexpression{#1 filter}{%
+ \pgfkeysgetvalue{/pgfplots/#1 filter/@expressionvalue}\pgfplotsretval
+ \expandafter\pgfplotsutilifcontainsmacro\expandafter{\pgfplotsretval}{%
+ \aftergroup\pgfplots@LUA@backend@supportedfalse
+ \pgfplots@command@to@string\pgfplotsretval\pgfplots@loc@TMPa
+ \pgfplots@LUA@survey@log@deactivation{#1 filter/.expression='\pgfplots@loc@TMPa' contains a TeX macro}%
+ \let\pgfplotsretval=\pgfutil@empty
+ }{%
+ }%
+ }{%
+ \aftergroup\pgfplots@LUA@backend@supportedfalse
+ \pgfplots@LUA@survey@log@deactivation{LUA does not support #1 filter (yet)}%
+ \let\pgfplotsretval=\pgfutil@empty
+ }%
+ \fi
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+\def\pgfplots@LUA@survey@start{%
+ \ifpgfplots@LUA@backend@supported
+ \ifx\pgfplotsplothandlerLUAfactory\pgfutil@empty
+ \pgfplots@LUA@survey@log@deactivation{plot handler does not support LUA}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ %
+ \ifx\pgfplotspointmetainputhandler\pgfutil@empty
+ \def\pgfplots@loc@TMPa{nil}%
+ \else
+ \edef\pgfplots@loc@TMPa{%
+ \csname pgfpmeta@\pgfplotspointmetainputhandler @LUA class\endcsname}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfplots@LUA@survey@log@deactivation{point meta choice does not support LUA}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ \fi
+ \ifpgfplots@stackedmode
+ \pgfplots@LUA@survey@log@deactivation{LUA does not support stacked plots (yet)}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ \ifpgfplots@errorbars@enabled
+ \pgfplots@LUA@survey@log@deactivation{LUA does not support error bars (yet)}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ \ifpgfplots@collect@firstplot@astick
+ \pgfplots@LUA@survey@log@deactivation{LUA does not support xtick=data (yet)}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ \pgfkeysgetvalue{/pgfplots/pre filter/.@cmd}\pgfplots@loc@TMPc\ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@survey@log@deactivation{LUA does not support filter (yet)}\fi
+ \pgfplots@LUA@survey@get@filter x%
+ \let\pgfplots@loc@filter@x=\pgfplotsretval
+ \pgfplots@LUA@survey@get@filter y%
+ \let\pgfplots@loc@filter@y=\pgfplotsretval
+ \pgfplots@LUA@survey@get@filter z%
+ \let\pgfplots@loc@filter@z=\pgfplotsretval
+ \pgfkeysgetvalue{/pgfplots/filter point/.@cmd}\pgfplots@loc@TMPc\ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@survey@log@deactivation{LUA does not support filter (yet)}\fi
+ %
+ \pgfkeysgetvalue{/pgfplots/execute for finished point}\pgfplots@loc@TMPc\ifx\pgfplots@loc@TMPc\pgfutil@empty\else \pgfplots@LUA@backend@supportedfalse\fi
+ %
+ \pgfkeysgetvalue{/pgfplots/visualization depends on/list}\pgfplots@loc@TMPc \ifx\pgfplots@loc@TMPc\pgfutil@empty\else \pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@survey@log@deactivation{LUA does not support 'visualization depends on' (yet)} \fi
+ %
+ %
+ \edef\pgfplots@loc@TMPc{\pgfkeysvalueof{/pgfplots/data cs}}%
+ \edef\pgfplots@loc@TMPd{\pgfkeysvalueof{/pgfplots/@expected axis cs}}%
+ \ifx\pgfplots@loc@TMPc\pgfplots@loc@TMPd\else\pgfplots@LUA@backend@supportedfalse\pgfplots@LUA@survey@log@deactivation{LUA does not support 'data cs' (yet)}\fi
+ %
+ % hm. There are various cases which are supported during a
+ % SURVEY -- but not during a visualization. Check that here:
+ \if m\pgfplots@colormap@access
+ \else
+ \if c\pgfplots@colormap@access
+ \else
+ \pgfplots@LUA@survey@log@deactivation{color map access=direct not supported (yet)}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ \fi
+ \pgfplotscolormapifisuniform{\pgfkeysvalueof{/pgfplots/colormap name}}{%
+ }{%
+ % FIXME : implement LUA for non-uniform colormaps
+ \pgfplots@LUA@survey@log@deactivation{non-uniform color maps unsupported currently}%
+ \pgfplots@LUA@backend@supportedfalse
+ }%
+ %
+ \ifpgfplots@curplot@threedim
+ \else
+ \ifpgfplots@threedim
+ \pgfplots@LUA@survey@log@deactivation{2d plots in 3d axis currently unsupported}%
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ \fi
+ %
+ \ifpgfplots@LUA@backend@supported
+ \edef\pgfplots@LUA@backend@plotnum{\pgfutil@directlua{tex.sprint(\pgfplotsHASH pgfplots.gca.plothandlers)}}%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/point meta min}\pgfplots@loc@metamin
+ \pgfkeysgetvalue{/pgfplots/point meta max}\pgfplots@loc@metamax
+ \pgfplots@log{\pgfplots@LUA@loglevel@debug}{lua backend=true: Activating LUA backend for plot \the\pgfplots@numplots\space (lua \pgfplots@LUA@backend@plotnum, type '\pgfplotsplothandlername').}%
+ \edef\pgfplots@loc@TMPa{%
+ local gca = pgfplots.gca;^^J%
+ gca.min = {^^J%
+ pgfplots.pgftonumber("\pgfplots@xmin"), ^^J%
+ pgfplots.pgftonumber("\pgfplots@ymin"), ^^J%
+ pgfplots.pgftonumber("\pgfplots@zmin")}; ^^J%
+ gca.max = {^^J%
+ pgfplots.pgftonumber("\pgfplots@xmax"), ^^J%
+ pgfplots.pgftonumber("\pgfplots@ymax"), ^^J%
+ pgfplots.pgftonumber("\pgfplots@zmax")}; ^^J%
+ % FIXME : what about datamin/datamax!?
+ local plothandlerFactory = \pgfplotsplothandlerLUAfactory; ^^J%
+ local plothandler = plothandlerFactory(gca, \pgfplots@loc@TMPa);^^J% second arg: point meta handler
+ \ifx\pgfplots@loc@metamin\pgfutil@empty
+ \else
+ plothandler.autocomputeMetaMin = false;^^J%
+ plothandler.metamin = pgfplots.pgftonumber("\pgfplots@loc@metamin");^^J%
+ \fi
+ \ifx\pgfplots@loc@metamax\pgfutil@empty
+ \else
+ plothandler.autocomputeMetaMax = false;^^J%
+ plothandler.metamax = pgfplots.pgftonumber("\pgfplots@loc@metamax");^^J%
+ \fi
+ local config = plothandler.config;^^J%
+ config.unboundedCoords = "\pgfplots@unbounded@handler";^^J%
+ config.warnForfilterDiscards = \pgfplots@boolval{pgfplots@warn@for@filter@discards};^^J%
+ config.pointmetarel = \pgfplots@perpointmeta@rel@choice;^^J%
+ config.updateLimits = \ifpgfplots@bb@isactive true\else false\fi;^^J%
+ config.filterExpressionByDir = {^^J%
+ "\pgfplots@loc@filter@x",^^J%
+ "\pgfplots@loc@filter@y",^^J%
+ "\pgfplots@loc@filter@z"};^^J%
+ gca.plothandlers[\pgfplots@LUA@backend@plotnum+1]= plothandler;^^J%
+ gca.currentPlotHandler = plothandler;^^J%
+ plothandler:surveystart();^^J%
+ }%
+%\message{Executing ^^J\pgfplots@loc@TMPa^^J^^J}%
+ \pgfplotsutil@directlua{\pgfplots@loc@TMPa}%
+ \endgroup
+ \def\pgfplots@LUA@backend@serialized@commands{%
+ \noexpand\def\noexpand\pgfplots@LUA@backend@plotnum{\pgfplots@LUA@backend@plotnum}%
+ }%
+ \def\pgfplotsapplistXXpushback##1{%
+ \pgfplots@error{Illegal internal state encountered: lua backend should have been invoked at this point}%
+ }%
+ \fi
+ \fi
+}%
+
+\let\pgfplotsapplistXXpushback@orig=\pgfplotsapplistXXpushback
+
+\def\pgfplots@LUA@survey@point{%
+ \edef\pgfplots@loc@TMPa{pgfplots.texSurveyPoint("\pgfplots@current@point@x","\pgfplots@current@point@y","\pgfplots@current@point@z","\pgfplots@current@point@meta")}%
+ \pgfplotsutil@directlua{\pgfplots@loc@TMPa}%
+ % increase \pgfplots@current@point@coordindex:
+ \advance\c@pgfplots@coordindex by1
+}%
+
+\def\pgfplots@LUA@survey@end{%
+ % LUA defines a couple of TeX macros here...
+ \pgfplotsutil@directlua{pgfplots.texSurveyEnd()}%
+ %
+ \let\pgfplotsapplistXXpushback=\pgfplotsapplistXXpushback@orig
+ \pgfplotsapplistXXpushback{--- acquire from LUA! --}%
+}%
+
+% this appears to be necessary for the mesh legend...
+\def\b@pgfplots@LUA@visualization@enabled{0}%
+
+% PRECONDITION : \pgfplots@LUA@visualization@init has already been
+% executed.
+\def\pgfplots@LUA@visualization@of@current@plot{%
+ \def\b@pgfplots@LUA@visualization@enabled{0}%
+ \ifpgfplots@LUA@backend@supported
+ \pgfkeysgetvalue{/pgfplots/axis type}\pgfplots@loc@TMPa
+ \def\pgfplots@loc@TMPb{rectangle}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \else
+ % disable visualizer - we cannot do this right now.
+ \pgfplots@LUA@backend@failed
+ \let\pgfplotsplothandlerLUAvisualizerfactory=\pgfutil@empty
+ \fi
+ %
+ \ifx\pgfplotsplothandlerLUAvisualizerfactory\pgfutil@empty
+ % hm. This plot cannot be visualized in LUA - BUT it has a
+ % LUA survey! Ok, then: acquire the survey results.
+ % Otherwise we would have nothing here.
+ % FIXME : what about \pgfplots@LUA@backend@failed in this context!?
+ \pgfplots@log{\pgfplots@LUA@loglevel@info}{Using 'lua backend=false' for visualization of plot \the\pgfplots@numplots\space (type '\pgfplotsplothandlername'): it has no LUA visualizer.}%
+ % NOTE:
+ % I use two levels of \expandafter here because 'lua debug =trace'
+ % introduces another level of expansion. And I do not
+ % want to use \edef... silly, perhaps..?
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\pgfplots@stored@current@data
+ \expandafter\expandafter\expandafter{%
+ \pgfplotsutil@directlua{pgfplots.texGetSurveyedCoordsToPgfplots()}%
+ }%
+ \else
+ % visualize using LUA! ... and acquire the coordinates.
+ % NOTE:
+ % I use two levels of \expandafter here because 'lua debug =trace'
+ % introduces another level of expansion. And I do not
+ % want to use \edef... silly, perhaps..?
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\pgfplots@stored@current@data
+ \expandafter\expandafter\expandafter{%
+ \pgfplotsutil@directlua{pgfplots.texVisualizePlot(\pgfplotsplothandlerLUAvisualizerfactory)}%
+ }%
+%\message{plot \plotnum: LUA backend returned \meaning\pgfplots@stored@current@data^^J}%
+ %
+ % ... and ensure that the resulting
+ % \pgfplots@stored@current@data can be deserialized. It
+ % contains the fully mapped X/Y coordinates as first item.
+ \let\pgfplotsaxisdeserializedatapointfrom@private@nonLUA=\pgfplotsaxisdeserializedatapointfrom@private
+ \def\pgfplotsaxisdeserializedatapointfrom@private##1{%
+ \pgfplotsaxisdeserializedatapointfrom@private@LUA##1%
+ }%
+ \def\pgfplotsaxisdeserializedatapointfrom@private@LUA##1##2##3{%
+ \global\pgf@x=##1pt %
+ \global\pgf@y=##2pt %
+ \pgfplotsaxisdeserializedatapointfrom@private@nonLUA{##3}%
+ }%
+ % FIXME : do I need to adopt the serializer as well!?
+ %
+ \def\b@pgfplots@LUA@visualization@enabled{1}%
+ \fi
+ \fi
+}%
+
+% Defines \pgfplotsretval to contain a comma-separated-list of
+% visualization phase names. May be empty.
+%
+% These names will be stored as \pgfplots@visphase@names during the
+% visualization phase.
+%
+% The role of "visualization phases" is to call the plot
+% handler, and perhaps further visualization phases.
+%
+% This is entirely *independent* of plot marks which have their own,
+% very special visualization phase.
+%
+% It is allowed if a plot has an empty list of visualization phases
+% (common for 'only marks').
+%
+% #1: any tikz path instructions after the \addplot command but before
+% the semicolon.
+\def\pgfplotssurveyphase@set@visphase@names#1{%
+ % 1. check if we need the 'default' visualization phase:
+ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler
+ \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard
+ % Ah - "only marks". In this case, we rely on the (special)
+ % marker visualization phase - there is no need for a further
+ % phase.
+ \pgfplotsutil@trim{#1}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ % OK, we do not have after-path instructions.
+ % No need for this phase.
+ \let\pgfplotsretval=\pgfutil@empty
+ \else
+ % Hm. We found after-path instructions! These *need* to be
+ % done during the standard visualization phase. Ok, then
+ % do it, even if it has no uses otherwise!
+ \let\pgfplotsretval=\pgfplotsaxis@visphase@name@default
+ \fi
+ \else
+ \let\pgfplotsretval=\pgfplotsaxis@visphase@name@default
+ \fi
+ %
+ % 2. error bar phase:
+ \ifpgfplots@errorbars@enabled
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \edef\pgfplotsretval{\pgfplotsretval,}%
+ \fi
+ %
+ \edef\pgfplotsretval{\pgfplotsretval \pgfplotsaxis@visphase@name@errorbars}%
+ \fi
+ %
+ % markers have the special phase \pgfplots@markers@visphase@name .
+}%
+
+\def\pgfplotsaxis@visphase@name@default{default}
+\def\pgfplotsaxis@visphase@name@markers{markers}
+
+% This defines \pgfplots@visphase@default:
+\expandafter\def\csname pgfplots@visphase@\pgfplotsaxis@visphase@name@default\endcsname{%
+ \pgfplots@coord@stream@finalize@storedcoords@START
+}%
+
+% A routine which transforms the current set of
+% \pgfplots@current@point@[xyz] values to the coordinate system
+% accepted by the actual axis.
+\def\pgfplotsaxistransformfromdatacs{%
+ \pgfkeyslet{/data point/x}\pgfplots@current@point@x
+ \pgfkeyslet{/data point/y}\pgfplots@current@point@y
+ \pgfkeyslet{/data point/z}\pgfplots@current@point@z
+ \pgfplotsaxistransformcs
+ {\pgfkeysvalueof{/pgfplots/data cs}}
+ {\pgfkeysvalueof{/pgfplots/@expected axis cs}}%
+ \pgfkeysgetvalue{/data point/x}\pgfplots@current@point@x
+ \pgfkeysgetvalue{/data point/y}\pgfplots@current@point@y
+ \pgfkeysgetvalue{/data point/z}\pgfplots@current@point@z
+}%
+
+% Changes '/data point/[xyz]' to the new coordinate system
+% (cs) designated by '#2'.
+%
+% #1: the actual coordinate system's name
+% #2: the desired coordinate system's name
+%
+% PRECONDITION: '/data point/[xyz]' contain the current
+% point's coordinates in the '#1' system. The z coordinate is ignored for 2d plots (or
+% for coordinate systems which are inherently two-dimensional).
+%
+% POSTCONDITION: 'data point/[xyz]' contain same point as
+% before, but represented in the '#2' system.
+%
+% The coordinate system transformations must be defined,
+% see \pgfplotsdefinecstransform.
+%
+% Example:
+% \pgfkeyssetvalue{/data point/x}{90}
+% \pgfkeyssetvalue{/data point/y}{1}
+% \pgfplotsaxistransformcs{polar}{cart}
+% -->
+% \pgfkeysvalueof{/data point/x}= 0
+% \pgfkeysvalueof{/data point/y}= 1
+\def\pgfplotsaxistransformcs#1#2{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \edef\pgfplots@loc@TMPb{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % nothing to do
+ \else
+ \pgfutil@ifundefined{pgfp@transform@\pgfplots@loc@TMPa @to@\pgfplots@loc@TMPb}{%
+ \pgfutil@ifundefined{pgfp@transform@\pgfplots@loc@TMPa @to@cart}{%
+ \pgfplotsaxistransformcs@error
+ }{%
+ \pgfplotsaxistransformcs{#1}{cart}%
+ \pgfplotsaxistransformcs{cart}{#2}%
+ }%
+ }{%
+ \csname pgfp@transform@\pgfplots@loc@TMPa @to@\pgfplots@loc@TMPb\endcsname
+ }%
+ \fi
+}%
+
+% Defines a new coordinate transformation for use in
+% \pgfplotsaxistransformcs.
+% #1: the source coordinate system
+% #2: the target coordinate system
+% #3: the transformation code.
+%
+% @see \pgfplotsaxistransformcs for what #3 should do.
+%
+% This does also declare a coordinate system for use in 'data cs'.
+% The minimal requirements are to define the transformations from and
+% to "cart" (cartesian coordinates).
+%
+\def\pgfplotsdefinecstransform#1#2#3{%
+ \expandafter\def\csname pgfp@transform@#1@to@#2\endcsname{#3}%
+}%
+
+\pgfplotsdefinecstransform{polar}{cart}{%
+ \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}%
+ \let\pgfplots@current@point@x=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/y}}%
+ \let\pgfplots@current@point@y=\pgfmathresult
+ \pgfplotsmathpoltocart\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@x@\pgfplots@current@point@y@
+ \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x@}%
+ \pgfkeyslet{/data point/x}\pgfmathresult
+ \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y@}%
+ \pgfkeyslet{/data point/y}\pgfmathresult
+}%
+\pgfplotsdefinecstransform{cart}{polar}{%
+ \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}%
+ \let\pgfplots@current@point@x=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/y}}%
+ \let\pgfplots@current@point@y=\pgfmathresult
+ \pgfplotsmathcarttopol\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@x@\pgfplots@current@point@y@
+ \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x@}%
+ \pgfkeyslet{/data point/x}\pgfmathresult
+ \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y@}%
+ \pgfkeyslet{/data point/y}\pgfmathresult
+}%
+
+\pgfplotsdefinecstransform{polarrad}{polar}{%
+ \pgfplotsgetcoordmathfor{default}\let\pgfplots@coordmath@id=\pgfplotsretval
+ \pgfutil@ifundefined{pgfp@polarradscale@\pgfplots@coordmath@id}{%
+ \pgfplotscoordmath{default}{parsenumber}{57.2957795130823}%
+ \expandafter\global\expandafter\let\csname pgfp@polarradscale@\pgfplots@coordmath@id\endcsname=\pgfmathresult
+ }{}%
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\csname pgfp@polarradscale@\pgfplots@coordmath@id\endcsname}}%
+ \pgfkeyslet{/data point/x}\pgfmathresult
+}%
+\pgfplotsdefinecstransform{polar}{polarrad}{%
+ \pgfplotsgetcoordmathfor{default}\let\pgfplots@coordmath@id=\pgfplotsretval
+ \pgfutil@ifundefined{pgfp@polarradiscale@\pgfplots@coordmath@id}{%
+ \pgfplotscoordmath{default}{parsenumber}{0.0174532925199433}%
+ \expandafter\global\expandafter\let\csname pgfp@polarradiscale@\pgfplots@coordmath@id\endcsname=\pgfmathresult
+ }{}%
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\csname pgfp@polarradiscale@\pgfplots@coordmath@id\endcsname}}%
+}%
+\pgfplotsdefinecstransform{polarrad}{cart}{%
+ \pgfplotsaxistransformcs{polarrad}{polar}%
+ \pgfplotsaxistransformcs{polar}{cart}%
+}%
+\pgfplotsdefinecstransform{cart}{polarrad}{%
+ \pgfplotsaxistransformcs{cart}{polar}%
+ \pgfplotsaxistransformcs{polar}{polarrad}%
+}%
+
+\def\pgfplotsaxistransformcs@error{%
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, I do not know how to transform the coordinate system '\pgfplots@loc@TMPa' to '\pgfplots@loc@TMPb'. Maybe you misspelled the 'data cs'? Or perhaps the feature is not yet implemented?}\pgfeov%
+}%
+
+% Takes the current point and serializes it into \pgfplotsretval.
+%
+% The serialization includes the coordinates (as returned by the
+% current plot handler), the point meta, and any "visualization
+% depends on" keys.
+%
+% See \pgfplotsaxisdeserializedatapointfrom
+%
+% POSTCONDITION:
+% \pgfplotsretval contains everything that is needed to restore the
+% current coordinate. This includes
+% - the coordinate values for x,y, and z
+% - any special coordinate values reported by the plot handler
+% (like u,v,w for quiver plots)
+% - the point meta
+% - any 'visualization depends on' value
+% - anything which is needed for other purposes (stacked plots have
+% a plugin).
+%
+% The result has an EXTRA SET OF BRACES which needs to be dealt with.
+%
+% Example:
+% \pgfplotsaxisserializedatapointtostring
+%
+% \expandafter\pgfplotsaxisdeserializedatapointfrom\pgfplotsretval
+%
+% -> note the absence of extra braces for the deserialization!
+\def\pgfplotsaxisserializedatapointtostring{%
+ \pgfplotsplothandlerserializepointto\pgfplotsaxisserializedatapoint@val
+ \let\pgfplots@oldprotect=\protect
+ \let\protect=\noexpand
+ \pgfplotsaxisserializedatapoint@private
+ \let\protect=\pgfplots@oldprotect
+ \t@pgfplots@toka=\expandafter{\pgfplotsaxisserializedatapoint@val}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretval}%
+ \edef\pgfplotsretval{{\the\t@pgfplots@tokb;\the\t@pgfplots@toka}}%
+}%
+
+\def\pgfplotsaxisserializedatapoint{%
+ \pgfplotsaxisserializedatapointtostring
+ \expandafter\pgfplotsapplistXXpushback\expandafter{\pgfplotsretval}%
+}%
+\def\pgfplotsaxisserializedatapoint@private{%
+ \let\pgfplotsretval=\pgfplots@current@point@meta
+}%
+\def\pgfplotsaxisdeserializedatapointfrom@private#1{%
+ \def\pgfplots@current@point@meta{#1}%
+}%
+% Restores the variables serialized in '#1'.
+%
+% As a side--effect, the macro
+% \pgfplotsaxisdeserializedatapointfrom@private@lastvalue will contain
+% the serialized part which is specific to pgfplots (i.e. the private
+% parts which can be read with
+% \pgfplotsaxisdeserializedatapointfrom@private)
+\def\pgfplotsaxisdeserializedatapointfrom#1{%
+ \expandafter\pgfplotsaxisdeserializedatapointfrom@#1\pgfplots@EOI
+}%
+\def\pgfplotsaxisdeserializedatapointfrom@#1;#2\pgfplots@EOI{%
+ \def\pgfplotsaxisdeserializedatapointfrom@private@lastvalue{#1}%
+ \pgfplotsaxisdeserializedatapointfrom@private{#1}%
+ \pgfplotsplothandlerdeserializepointfrom{#2}%
+}%
+
+% Handle User-defined parts which should be serialized as well.
+% This preparation tool should be called at the start of both, survey
+% and visualization phase.
+%
+% @PRECONDITION
+% - the macros
+% \pgfplotsaxisserializedatapoint@private
+% \pgfplotsaxisdeserializedatapointfrom@private
+% are known and valid.
+% - '/pgfplots/visualization depends on' contains its correct value.
+%
+% @POSTCONDITION
+% Both,
+% \pgfplotsaxisserializedatapoint@private
+% and
+% \pgfplotsaxisdeserializedatapointfrom@private
+% have been patched to incorporate the '/pgfplots/visualization
+% depends on' feature.
+%
+\def\pgfplots@prepare@visualization@dependencies{%
+ \pgfkeysgetvalue{/pgfplots/visualization depends on/list}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ % SERIALIZATION format:
+ % visualization depends on={{value1}\as \macro1, {<value2>}\as \macro2,...}
+ % ->
+ % {<original private data>}<\macro1>{<value1>}<\macro2>{<value2>}...<\macroN>{<valueN>}
+ %
+ % prepare
+ % \t@pgfplots@tokb={<\macro1>{<value1>}<\macro2>{<value2>}...<\macroN>{<valueN>}}
+ \t@pgfplots@tokb={}%
+ %
+ % prepare
+ % \t@pgfplots@tokc={<\macro1><\macro2><\macro3>...}
+ \t@pgfplots@tokc={}%
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplots@loc@TMPa}\as\pgfplots@loc@TMPa{%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@prepare@visualization@depends@on\pgfplots@loc@TMPa\pgfplots@EOI%
+ \fi
+ }%
+ % Step 1: modify the SERIALIZATION method:
+ \t@pgfplots@toka=\expandafter{\pgfplotsaxisserializedatapoint@private}%
+ \edef\pgfplotsaxisserializedatapoint@private{%
+ \the\t@pgfplots@tokc
+ \the\t@pgfplots@toka
+ % nothing is expanded here, only \t@pgfplots@tokb
+ \noexpand\t@pgfplots@toka=\noexpand\expandafter{\noexpand\pgfplotsretval}%
+ \noexpand\edef\noexpand\pgfplotsretval{{\noexpand\the\t@pgfplots@toka},\the\t@pgfplots@tokb}%
+ }%
+ % Step 2: modify the DESERIALIZATION method:
+ \let\pgfplotsaxisdeserializedatapointfrom@private@orig=\pgfplotsaxisdeserializedatapointfrom@private
+ \let\pgfplotsaxisdeserializedatapointfrom@private=\pgfplotsaxisdeserializedatapointfrom@private@withdeplist
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/execute for finished point}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\def\expandafter\pgfplotsaxisserializedatapoint@private\expandafter{%
+ \pgfplotsaxisserializedatapoint@private
+ \pgfkeysvalueof{/pgfplots/execute for finished point}%
+ }%
+ \fi
+}%
+\def\pgfplots@prepare@visualization@depends@on#1\pgfplots@EOI{%
+ \pgfutil@in@\as{#1}%
+ \ifpgfutil@in@
+ % ok, we have the '<content>\as<\macro>' syntax:
+ \pgfplots@prepare@visualization@depends@on@#1\pgfplots@EOI
+ \else
+ \pgfplots@prepare@visualization@depends@on@preparetype@checkvalue#1value\pgfplots@EOI
+ \ifpgfutil@in@
+ % ok, then it should be 'value <\macro>'.
+ % extract the <\macro>:
+ \def\pgfplots@loc@TMPa value{\pgfplots@loc@TMPb}%
+ \def\pgfplots@loc@TMPb##1{\pgfplots@loc@TMPc ##1}% this step should remove leading white spaces
+ \def\pgfplots@loc@TMPc##1\pgfplots@EOI{%
+ % sanitize: check if ##1 is a defined macro:
+ \begingroup
+ \escapechar=-1
+ \xdef\pgfplots@glob@TMPa{\string##1}%
+ \endgroup
+ \pgfutil@ifundefined{\pgfplots@glob@TMPa}{%
+ \begingroup
+ \t@pgfplots@toka={##1}%
+ \pgfplotsthrow{invalid argument}
+ {\pgfplots@loc@TMPa}%
+ {Sorry, `visualization depends on=value <\string\macro>' expected a defined control sequence name instead of `\the\t@pgfplots@toka'. Please make sure `\the\t@pgfplots@toka' is a properly defined macro or use the `visualization depends on=value <content> \string\as <\string\macro>' syntax instead}%
+ \pgfeov
+ \endgroup
+ }{%
+ \def\pgfplots@loc@TMPa{%
+ \pgfplots@prepare@visualization@depends@on@ value}%
+ \expandafter\pgfplots@loc@TMPa##1\as##1\pgfplots@EOI
+ }%
+ }%
+ \pgfplots@loc@TMPa#1\pgfplots@EOI
+ \else
+ % then, I expect '<\macro>'.
+ % sanitize: check if #1 is a defined macro:
+ \begingroup
+ \escapechar=-1
+ \xdef\pgfplots@glob@TMPa{\string#1}%
+ \endgroup
+ \pgfutil@ifundefined{\pgfplots@glob@TMPa}{%
+ \begingroup
+ \t@pgfplots@toka={#1}%
+ \pgfplotsthrow{invalid argument}
+ {\pgfplots@loc@TMPa}%
+ {Sorry, `visualization depends on' expected a defined control sequence name instead of `\the\t@pgfplots@toka'. Please make sure `\the\t@pgfplots@toka' is a properly defined macro or use the `visualization depends on=<expression> \string\as <\string\macro>' syntax instead}%
+ \pgfeov
+ \endgroup
+ }{%
+ \expandafter\pgfplots@prepare@visualization@depends@on@#1\as#1\pgfplots@EOI
+ }%
+ \fi
+ \fi
+}%
+\def\pgfplots@prepare@visualization@depends@on@#1\as#2\pgfplots@EOI{%
+ \pgfplots@prepare@visualization@depends@on@preparetype{#1}\as{#2}%
+ % prepare the serialization:
+ \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb\noexpand#2{\csname\string#2@value\endcsname}}%
+ \t@pgfplots@tokc=\expandafter{\the\t@pgfplots@tokc\csname assign@\string#2\endcsname}%
+}%
+
+% task: define a macro '\csname assign@\string#2\endcsname' which, when executed,
+% defines \csname\string#2@value\endcsname such that it expands
+% to a the correct value.
+\def\pgfplots@prepare@visualization@depends@on@preparetype#1\as#2{%
+ \pgfplots@prepare@visualization@depends@on@preparetype@checkvalue#1value\pgfplots@EOI
+ \ifpgfutil@in@
+ \pgfplots@prepare@visualization@depends@on@preparetype@value#1\as{#2}% no braces here.
+ \else
+ \pgfplots@prepare@visualization@depends@on@preparetype@expr{#1}\as{#2}%
+ \fi
+}%
+\def\pgfplots@prepare@visualization@depends@on@preparetype@expr#1\as#2{%
+ \pgflibraryfpuifactive{%
+ \expandafter\def\csname assign@\string#2\endcsname{%
+ \pgfmathparse{#1}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \expandafter\let\csname \string#2@value\endcsname=\pgfmathresult
+ }%
+ }{%
+ \expandafter\def\csname assign@\string#2\endcsname{%
+ \pgfmathparse{#1}%
+ \expandafter\let\csname \string#2@value\endcsname=\pgfmathresult
+ }%
+ }%
+}
+\def\pgfplots@prepare@visualization@depends@on@preparetype@checkvalue#1value#2\pgfplots@EOI{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfutil@in@true
+ \else
+ \pgfutil@in@false
+ \fi
+}%
+\def\pgfplots@prepare@visualization@depends@on@preparetype@value value#1\as#2{%
+ % remove spaces from #1:
+ \pgfkeys@spdef\pgfplots@loc@TMPa{#1}%
+ %
+ % ok, prepare the value.
+ \def\pgfplots@loc@TMPb{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ % oh - a special case! We have value\macro\as\macro.
+ \expandafter\def\csname\string#2@value\endcsname{#2}%
+ %
+ % this is special; we do not need to EXECUTE assign@\string#2 to arrive at its value.
+ % But we need to define #2@value as that will be stored.
+ \expandafter\let\csname assign@\string#2\endcsname=\relax
+ \else
+ \begingroup
+ \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}%
+ \t@pgfplots@tokb=\expandafter{\csname\string#2@value\endcsname}%
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\the\t@pgfplots@tokb{\the\t@pgfplots@toka}%
+ }%
+ \endgroup
+ \expandafter\let\csname assign@\string#2\endcsname=\pgfplots@glob@TMPa
+ \fi
+}
+
+\def\pgfplotsaxisdeserializedatapointfrom@private@withdeplist#1{%
+ \pgfplotsaxisdeserializedatapointfrom@private@withdeplist@#1\pgfplots@EOI
+}%
+\def\pgfplotsaxisdeserializedatapointfrom@private@withdeplist@#1,{%
+ \pgfplotsaxisdeserializedatapointfrom@private@orig{#1}%
+ \pgfplotsaxisdeserializedatapointfrom@private@withdeplist@@
+}%
+\def\pgfplotsaxisdeserializedatapointfrom@private@withdeplist@@#1{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@EOI
+ \else
+ \afterassignment\pgfplotsaxisdeserializedatapointfrom@private@withdeplist@@
+ \expandafter\def\expandafter#1%
+ \fi
+}%
+
+% PRECONDITION: must be called inside of
+% \pgfplots@PREPARE@COORD@STREAM@end@.
+%
+% POSTCONDITION:
+% assigns '/pgfplots/#1 coord sorting=[+-]'
+% i.e. whether #1 (x or y or z) coordinates are in ascending (+) ordering or in
+% descending order (-).
+\def\pgfplots@PREPARE@COORD@STREAM@end@determinecoordsorting#1{%
+ \pgfplotscoordmath{#1}{if less than}
+ {\csname pgfplots@currentplot@firstcoord@#1\endcsname}%
+ {\csname pgfplots@currentplot@lastcoord@#1\endcsname}%
+ {\pgfkeyssetvalue{/pgfplots/#1 coord sorting}{+}}%
+ {\pgfkeyssetvalue{/pgfplots/#1 coord sorting}{-}}%
+}%
+
+% Defines the linear transformation macro \pgfplots@perpointmeta@trafo,
+%
+% phi : [meta_min,meta,max] -> [0,10^k]
+%
+% which operates on the per-point meta data (if any).
+% The trafo will be skipped if there is no such data.
+%
+% The trafo is expected to prepare meta information before it is used
+% as input to \pgfplotscolormapaccess (or
+% \pgfplotscolormapdefinemappedcolor). Thus, the 10^k is chosen to be
+% the same as \pgfplotscolormaprange (which is 1000 per default).
+%
+% If there is no data range (for example because meta information is
+% not available or is not of numeric type), the trafo will simply
+% copy the input argument symbolically.
+%
+% Note: it does not hurt to call it multiple times. It checks automatically whether it already is up-to-date.
+\def\pgfplots@perpointmeta@preparetrafo{%
+ \def\pgfplotspointmetarangeexponent{1}% pre-fill
+ \pgfutil@ifundefined{pgfplots@perpointmeta@trafo}{%
+ \edef\pgfplots@loc@TMPa{\pgfplotscolormaprange}%
+ \ifnum\pgfplots@loc@TMPa=1000
+ \else
+ \pgfplots@error{LOGIC ERROR: sorry, I have hard-coded the assumption \string\pgfplotscolormaprange = 1000, but now it is \pgfplots@loc@TMPa.}%
+ \fi
+ %
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \pgfutil@ifundefined{pgfplots@metamax}{\let\pgfplots@metamax=\pgfutil@empty}{}
+ \ifpgfplots@warn@for@filter@discards
+ \global\let\pgfplots@perpointmeta@unboundedwarning@stop=\relax
+ \def\pgfplots@perpointmeta@unboundedwarning##1{%
+ \ifx\pgfplots@perpointmeta@unboundedwarning@stop\relax
+ \begingroup
+ \pgfplotscoordmath{meta}{tostring}{##1}%
+ \pgfplotswarning{point meta unbounded}{\pgfmathresult}{##1}\pgfeov
+ \endgroup
+ \gdef\pgfplots@perpointmeta@unboundedwarning@stop{1}%
+ \fi
+ }%
+ \else
+ \def\pgfplots@perpointmeta@unboundedwarning##1{}%
+ \fi
+ \if d\pgfplots@colormap@access
+ % colormap access=direct
+ \def\pgfplots@perpointmeta@trafo##1{%
+ \pgfplotscoordmath{meta}{if is}{##1}{u}{%
+ \pgfplotscolorzero{\pgfplotscolormapcolorcompsof{\pgfkeysvalueof{/pgfplots/colormap name}}}%
+ \pgfplots@perpointmeta@unboundedwarning{##1}%
+ }{%
+ \pgfplotscoordmath{meta}{tofixed}{##1}%
+ \pgfplotscolormapgetindex{\pgfmathresult}{\pgfkeysvalueof{/pgfplots/colormap name}}%
+ }%
+ }%
+ \def\pgfplots@perpointmeta@traforange{0:0}%
+ \edef\pgfplotspointmetarange{\pgfplots@metamin:\pgfplots@metamax}%
+ \else
+ % colormap access=map|piecewise constant
+ \ifx\pgfplots@metamax\pgfutil@empty
+ \def\pgfplots@perpointmeta@trafo##1{%
+ \pgfplotscoordmath{meta}{if is}{##1}{u}
+ {%
+ \def\pgfmathresult{0}%
+ \pgfplots@perpointmeta@unboundedwarning{##1}%
+ }{%
+ \pgfplotscoordmath{meta}{tofixed}{##1}%
+ }%
+ }%
+ \def\pgfplots@perpointmeta@traforange{0:1000}%
+ \edef\pgfplotspointmetarange{0:1000}%
+ \else
+ % The transformation is
+ %
+ % phi(m) = ( m- meta_min) * 1000/ (meta_max-meta_min).
+ %
+ % -> precompute the scaling factor!
+ \if\pgfplots@perpointmeta@rel@choice0%
+ % point meta rel=axis wide:
+ \pgfplots@perpointmeta@preparetrafo@initfrom{pgfplots@axiswide@}%
+ \else
+ \pgfplots@perpointmeta@preparetrafo@initfrom{pgfplots@}%
+ \fi
+ \fi
+ \fi
+ \edef\pgfplotspointmetatransformedrange{\pgfplots@perpointmeta@traforange}%
+ }{}%
+}%
+
+% Employs \csname #1metamin\endcsname and its metamax counterpart to
+% initialize the trafo.
+%
+% This unifies the approaches for \pgfplots@axiswide@metamax and
+% \pgfplots@metamax.
+\def\pgfplots@perpointmeta@preparetrafo@initfrom#1{%
+ \edef\pgfplotspointmetarange{\csname #1metamin\endcsname:\csname #1metamax\endcsname}%
+ % Now, prepare the trafo as such.
+ % It assigns \pgfmathresult (in fixed point).
+ \ifpgfplots@LUA@backend@supported
+ \def\pgfplots@perpointmeta@trafo##1{%
+ \edef\pgfmathresult{%
+ \pgfplotsutil@directlua{%
+ pgfplots.texPerpointMetaTrafo("\pgfplots@current@point@meta")
+ }%
+ }%
+ }%
+ \else
+ \def\pgfplots@perpointmeta@trafo##1{%
+ \pgfplotscoordmath{meta}{if is}{##1}{u}{%
+ \def\pgfmathresult{0}%
+ \pgfplots@perpointmeta@unboundedwarning{##1}%
+ }{%
+ \pgfplotscoordmath{meta}{op}{subtract}{{##1}{\csname #1metamin\endcsname}}%
+ \pgfplotscoordmath{meta}{op}{multiply}{{\pgfmathresult}{\pgfplots@perpointmeta@trafo@factor}}%
+ \pgfplots@perpointmeta@trafo@clipresult
+ \pgfplotscoordmath{meta}{tofixed}{\pgfmathresult}%
+ }%
+ }%
+ \pgfplotscoordmath{meta}{op}{subtract}{{\csname #1metamax\endcsname}{\csname #1metamin\endcsname}}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{meta}{zero}%
+ \let\pgfplots@perpointmeta@lowerrange=\pgfmathresult
+ \pgfplotscoordmath{meta}{parsenumber}{1000}%
+ \let\pgfplots@perpointmeta@upperrange=\pgfmathresult
+ \pgfplotscoordmath{meta}{op}{divide}{{\pgfmathresult}{\pgfplots@loc@TMPa}}%
+ \let\pgfplots@perpointmeta@trafo@factor=\pgfmathresult
+ \fi
+ %
+ % Expands to the transformation range as 'a:b':
+ \def\pgfplots@perpointmeta@traforange{0:1000}%
+ %
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname #1metamax\endcsname
+ \pgfplotscoordmath{meta}{tostring}{\pgfplots@loc@TMPa}%
+ \pgfmathfloatparsenumber\pgfmathresult
+ \pgfmathfloatgetexponent\pgfmathresult\c@pgf@countd
+ \edef\pgfplotspointmetarangeexponent{\the\c@pgf@countd}%
+}
+
+\def\pgfplots@perpointmeta@trafo@clipresult{%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{meta}{if less than}{\pgfplots@loc@TMPa}{\pgfplots@perpointmeta@upperrange}{%
+ \pgfplotscoordmath{meta}{if less than}{\pgfplots@loc@TMPa}{\pgfplots@perpointmeta@lowerrange}{%
+ \let\pgfmathresult=\pgfplots@perpointmeta@lowerrange
+ }{%
+ \let\pgfmathresult=\pgfplots@loc@TMPa
+ }%
+ }{%
+ \let\pgfmathresult=\pgfplots@perpointmeta@upperrange
+ }%
+}%
+
+% define it globally - this simplifies some mesh plots.
+\pgfplotscoordmath{meta}{one}%
+\let\pgfplotspointmeta=\pgfmathresult
+\def\pgfplotspointmetatransformed{1000}% use the maximum because it is usually divided by 1000
+
+% A command which is readily available during the visualization phase of each plot.
+%
+% It takes existing point meta data and transforms it, i.e. it defines
+% \pgfplotspointmetatransformed.
+%
+% The command won't be invoked automatically, it is task of a plot
+% handler to decide if it is needed. It's application is relatively
+% fast, however.
+%
+% PRECONDITION:
+% - point meta has been set up during the survey phase (i.e. the
+% /pgfplots/point meta!=none),
+% - there *is* point meta data for the current data point.
+%
+% POSTCONDITION:
+% - the macros \pgfplotspointmeta and \pgfplotspointmetatransformed
+% are defined.
+%
+% @see also \pgfplotsaxisifhaspointmeta
+\def\pgfplotsaxisvisphasetransformpointmeta{%
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname
+ % symbolic point meta may be empty.
+ \let\pgfplotspointmeta=\pgfplots@current@point@meta
+ \let\pgfplotspointmetatransformed=\pgfplotspointmeta
+ \else
+ % numeric point meta may NOT be empty.
+ \ifx\pgfplots@current@point@meta\pgfutil@empty%
+ \pgfplots@error{%
+ could not access the 'point meta=\csname pgfpmeta@\pgfplotspointmetainputhandler @tostring\endcsname' for coordinate \the\c@pgfplots@coordindex: %
+ its value is empty. %
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @explicitinput\endcsname%
+ \pgfplots@addplot@point@meta@description@of@explicit@value
+ \else
+ Please ensure that the value exists and is not empty
+ \fi
+ }%
+ \pgfplotscoordmath{meta}{one}%
+ \let\pgfplotspointmeta=\pgfmathresult
+ \def\pgfplotspointmetatransformed{1.0}%
+ \else
+ % prepare arguments:
+ \let\pgfplotspointmeta=\pgfplots@current@point@meta
+ \pgfplots@perpointmeta@trafo{\pgfplotspointmeta}%
+ \let\pgfplotspointmetatransformed=\pgfmathresult
+ \fi
+ \fi
+}%
+\def\pgfplots@addplot@point@meta@description@of@explicit@value{%
+ Please use an input stream which provides 'explicit point meta' like \string\addplot\space table or \string\addplot\space coordinates
+}
+
+\def\pgfplotsaxisvisphasetransformpointmetaifany{%
+ \pgfplotsaxisifhaspointmeta{\pgfplotsaxisvisphasetransformpointmeta}{}%
+}
+
+% A looping method which applies
+% \pgfplots@coord@stream@start
+% for each coordinate '(x,y)' or '(x,y) +- (ex,ey)',
+% assign \pgfplots@current@point@[xyz]
+% assign \pgfplots@current@point@[xyz]@error (if in argument list)
+% assign \pgfplots@current@point@meta
+% call \pgfplots@coord@stream@coord
+% \pgfplots@coord@stream@end
+%
+% #1 a sequence of coordinates of the form
+% '(x,y)' or '(x,y,z)'
+% or
+% '(x,y[,z]) +- (ex,ey)'
+% or
+% '(x,y[,z]) += (ex+,ey+) -= (ex-,ey-)'
+% or
+% '(x,y) [meta]'
+% or
+% '(x,y) +- (ex,ey) [meta]'
+% separated by white-space.
+%
+\long\def\pgfplots@coord@stream@foreach#1{%
+ \pgfplots@coord@stream@start
+ \pgfplotsscanlinelengthinitzero
+ \pgfplots@foreach@plot@coord@ITERATE#1\pgfplots@EOI%
+ \pgfplotsscanlinelengthcleanup
+ \pgfplots@coord@stream@end
+}%
+
+\begingroup
+\def\\{\global\let\pgfplots@let@space@token= } \\ % now, \pgfplots@let@space@token is a space token
+\endgroup
+
+
+% A looping command to loop through plot coordinates.
+% For every point, \pgfplots@coord@stream@coord will be invoked.
+%
+% No scoping is used during this operation, so you can access outer
+% variables.
+\def\pgfplots@foreach@plot@coord@ITERATE{%
+ \futurelet\pgfplots@foreach@plot@coord@ITERATE@tok\pgfplots@foreach@plot@coord@ITERATE@
+}%
+\long\def\pgfplots@foreach@plot@coord@ITERATE@#1{%
+ \ifx\pgfplots@foreach@plot@coord@ITERATE@tok(%
+ \pgfplotsscanlinelengthincrease
+ \let\pgfplots@loop@next=\pgfplots@foreach@plot@coord@NEXT%
+ \else
+ \ifx\pgfplots@foreach@plot@coord@ITERATE@tok\pgfplots@let@space@token
+ \def\pgfplots@loop@next{\pgfplots@foreach@plot@coord@ITERATE#1}%
+ \else
+ \ifx\pgfplots@foreach@plot@coord@ITERATE@tok\pgfplots@EOI
+ % ok, do nothing more
+ \let\pgfplots@loop@next=\relax
+ \else
+ \ifx\pgfplots@foreach@plot@coord@ITERATE@tok\par
+ \pgfplotsscanlinecomplete
+ \let\pgfplots@loop@next=\pgfplots@foreach@plot@coord@ITERATE
+ \else
+ \if\noexpand\pgfplots@foreach@plot@coord@ITERATE@tok\noexpand\anymacro
+ % Ah. #1 has the same character (!) code as \anymacro,
+ % that means it is a macro! Expand it:
+ \def\pgfplots@loop@next{\expandafter\pgfplots@foreach@plot@coord@ITERATE#1}%
+ \else
+ \def\pgfplots@loop@next{\pgfplots@foreach@plot@coord@error#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfplots@loop@next
+}
+
+\long\def\pgfplots@foreach@plot@coord@error#1\pgfplots@EOI{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@loc@TMPa
+ \pgfplots@error{Sorry, I could not read the plot coordinates near '\pgfplots@loc@TMPa'. Please check for format mistakes}%
+}%
+\def\pgfplots@foreach@plot@coord@NEXT#1,#2){%
+ \ifpgfplots@plot@coords@mathparser
+ \pgfmathparse{#1}\let\pgfplots@current@point@x=\pgfmathresult
+ \pgfmathparse{#2}\let\pgfplots@current@point@y=\pgfmathresult
+ \else
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \fi
+ \let\pgfplots@current@point@error@x@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@x@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@minus=\pgfutil@empty
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \pgfplots@foreach@plot@coord@NEXT@cont
+}
+\def\pgfplots@foreach@plot@coord@NEXT@cont{%
+ \pgfutil@ifnextchar+{%
+ \pgfplots@foreach@plot@coord@NEXT@plus%
+ }{%
+ \pgfutil@ifnextchar-{%
+ \pgfplots@foreach@plot@coord@NEXT@minus%
+ }{%
+ \pgfutil@ifnextchar[{%
+ \pgfplots@foreach@plot@coord@NEXT@meta
+ }{%
+ \pgfplots@coord@stream@coord
+ \pgfplots@foreach@plot@coord@ITERATE
+ }%
+ }%
+ }%
+}
+\def\pgfplots@foreach@plot@coord@NEXT@meta[#1]{%
+ \def\pgfplots@current@point@meta{#1}%
+ \pgfplots@coord@stream@coord
+ \pgfplots@foreach@plot@coord@ITERATE
+}%
+\def\pgfplots@foreach@plot@coord@NEXT@plus+{%
+ \pgfutil@ifnextchar={%
+ \pgfplots@foreach@plot@coord@NEXT@pluseq%
+ }{%
+ \pgfplots@foreach@plot@coord@NEXT@plusminus%
+ }%
+}
+\def\pgfplots@foreach@plot@coord@NEXT@minus-=#1({%
+ \def\pgfplots@foreach@plot@coord@state{-}%
+ \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@
+}
+\def\pgfplots@foreach@plot@coord@NEXT@pluseq=#1({%
+ \def\pgfplots@foreach@plot@coord@state{+}%
+ \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@
+}
+\def\pgfplots@foreach@plot@coord@NEXT@plusminus-#1({%
+ \def\pgfplots@foreach@plot@coord@state{B}%
+ \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@
+}
+
+% processing something like '(x,y) +- (error_x,error_y)'
+\def\pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@#1,#2){%
+ \ifpgfplots@plot@coords@mathparser
+ \pgfmathparse{#1}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfmathparse{#2}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ \else
+ \def\pgfplots@loc@TMPb{#1}%
+ \def\pgfplots@loc@TMPc{#2}%
+ \fi
+ %
+ \if +\pgfplots@foreach@plot@coord@state
+ % ah, it was a "+=" item:
+ \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc
+ \else
+ \if -\pgfplots@foreach@plot@coord@state
+ % ah, it was a "-=" item:
+ \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc
+ \else
+ % ah, it was a "+-" item:
+ \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc
+ \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc
+ \fi
+ \fi
+ %
+ \pgfplots@foreach@plot@coord@NEXT@cont
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+% The same for three dim coords:
+\long\def\pgfplots@coord@stream@foreach@threedim#1{%
+ \pgfplots@coord@stream@start
+ \pgfplotsscanlinelengthinitzero
+ \pgfplots@foreach@plot@coord@threedim@ITERATE#1\pgfplots@EOI%
+ \pgfplotsscanlinelengthcleanup
+ \pgfplots@coord@stream@end
+}%
+\def\pgfplots@foreach@plot@coord@threedim@ITERATE{%
+ \futurelet\pgfplots@foreach@plot@coord@threedim@ITERATE@tok\pgfplots@foreach@plot@coord@threedim@ITERATE@
+}%
+\long\def\pgfplots@foreach@plot@coord@threedim@ITERATE@#1{%
+ \ifx\pgfplots@foreach@plot@coord@threedim@ITERATE@tok(%
+ \pgfplotsscanlinelengthincrease
+ \let\pgfplots@loop@next=\pgfplots@foreach@plot@coord@threedim@NEXT%
+ \else
+ \ifx\pgfplots@foreach@plot@coord@threedim@ITERATE@tok\pgfplots@let@space@token
+ \def\pgfplots@loop@next{\pgfplots@foreach@plot@coord@threedim@ITERATE#1}%
+ \else
+ \ifx\pgfplots@foreach@plot@coord@threedim@ITERATE@tok\pgfplots@EOI
+ % ok, do nothing more
+ \let\pgfplots@loop@next=\relax
+ \else
+ \ifx\pgfplots@foreach@plot@coord@threedim@ITERATE@tok\par
+ \pgfplotsscanlinecomplete
+ \let\pgfplots@loop@next=\pgfplots@foreach@plot@coord@threedim@ITERATE
+ \else
+ \if\noexpand\pgfplots@foreach@plot@coord@threedim@ITERATE@tok\noexpand\anymacro
+ % Ah. #1 has the same character (!) code as \anymacro,
+ % that means it is a macro! Expand it:
+ \def\pgfplots@loop@next{\expandafter\pgfplots@foreach@plot@coord@threedim@ITERATE#1}%
+ \else
+ \def\pgfplots@loop@next{\pgfplots@foreach@plot@coord@error#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfplots@loop@next
+}
+\def\pgfplots@foreach@plot@coord@threedim@NEXT#1,#2,#3){
+ \ifpgfplots@plot@coords@mathparser
+ \pgfmathparse{#1}\let\pgfplots@current@point@x=\pgfmathresult
+ \pgfmathparse{#2}\let\pgfplots@current@point@y=\pgfmathresult
+ \pgfmathparse{#3}\let\pgfplots@current@point@z=\pgfmathresult
+ \else
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+ \fi
+ \let\pgfplots@current@point@error@x@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@x@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@minus=\pgfutil@empty
+ %
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ %
+ \pgfplots@foreach@plot@coord@threedim@NEXT@cont
+}
+\def\pgfplots@foreach@plot@coord@threedim@NEXT@cont{%
+ \pgfutil@ifnextchar+{%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@plus%
+ }{%
+ \pgfutil@ifnextchar-{%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@minus%
+ }{%
+ \pgfutil@ifnextchar[{%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@meta
+ }{%
+ \pgfplots@coord@stream@coord
+ \pgfplots@foreach@plot@coord@threedim@ITERATE
+ }%
+ }%
+ }%
+}
+\def\pgfplots@foreach@plot@coord@threedim@NEXT@meta[#1]{%
+ \def\pgfplots@current@point@meta{#1}%
+ \pgfplots@coord@stream@coord
+ \pgfplots@foreach@plot@coord@threedim@ITERATE
+}%
+
+\def\pgfplots@foreach@plot@coord@threedim@NEXT@plus+{%
+ \pgfutil@ifnextchar={%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@pluseq%
+ }{%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@plusminus%
+ }%
+}
+\def\pgfplots@foreach@plot@coord@threedim@NEXT@minus-=#1({%
+ \def\pgfplots@foreach@plot@coord@state{-}%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@
+}
+\def\pgfplots@foreach@plot@coord@threedim@NEXT@pluseq=#1({%
+ \def\pgfplots@foreach@plot@coord@state{+}%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@
+}
+\def\pgfplots@foreach@plot@coord@threedim@NEXT@plusminus-#1({%
+ \def\pgfplots@foreach@plot@coord@state{B}%
+ \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@
+}
+% processing something like '(x,y) +- (error_x,error_y)'
+\def\pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@#1,#2,#3){%
+ \ifpgfplots@plot@coords@mathparser
+ \pgfmathparse{#1}\let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfmathparse{#2}\let\pgfplots@loc@TMPc=\pgfmathresult
+ \pgfmathparse{#3}\let\pgfplots@loc@TMPd=\pgfmathresult
+ \else
+ \def\pgfplots@loc@TMPb{#1}%
+ \def\pgfplots@loc@TMPc{#2}%
+ \def\pgfplots@loc@TMPd{#3}%
+ \fi
+ %
+ \if +\pgfplots@foreach@plot@coord@state
+ % ah, it was a "+=" item:
+ \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc
+ \let\pgfplots@current@point@error@z@plus=\pgfplots@loc@TMPd
+ \else
+ \if -\pgfplots@foreach@plot@coord@state
+ % ah, it was a "-=" item:
+ \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc
+ \let\pgfplots@current@point@error@z@minus=\pgfplots@loc@TMPd
+ \else
+ % ah, it was a "+-" item:
+ \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb
+ \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc
+ \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc
+ \let\pgfplots@current@point@error@z@plus=\pgfplots@loc@TMPd
+ \let\pgfplots@current@point@error@z@minus=\pgfplots@loc@TMPd
+ \fi
+ \fi
+ %
+ \pgfplots@foreach@plot@coord@threedim@NEXT@cont
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%
+% A coordinate stream which works like this:
+%
+% -------------
+% \pgfplots@coord@stream@start
+%
+% foreach encoded coordinate:
+% \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded{<encoded data>}%
+% \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced{{<encoded data>}}% note the extra braces.
+% \pgfplotsaxisdeserializedatapointfrom{<encoded data>}
+% \pgfplots@coord@stream@coord
+%
+% \pgfplots@coord@stream@end
+% -------------
+%
+% The format of #1 is
+% {<datapoint>}{<datapoint>}...{<datapoint>}
+% Each data point is decoded with
+% \pgfplotsaxisserializedatapoint
+% and then, \pgfplots@coord@stream@coord will be called.
+\long\def\pgfplots@coord@stream@foreach@NORMALIZED#1{%
+ \pgfplots@coord@stream@start
+ \pgfplotscoordstream@firstlast@init
+ \pgfplots@foreach@plot@coord@NORMALIZED@ITERATE#1\pgfplots@EOI%
+ \pgfplots@coord@stream@end
+}%
+% No scoping is used during this operation, so you can access outer
+% variables.
+\def\pgfplots@foreach@plot@coord@NORMALIZED@ITERATE#1{%
+ \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded{#1}%
+ \ifx\pgfplots@coord@stream@foreach@NORMALIZED@curencoded\pgfplots@EOI
+ \else
+ \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced{{#1}}%
+ \pgfplotsaxisdeserializedatapointfrom{#1}%
+ \pgfplots@coord@stream@coord
+ \pgfplotsplothandlerifcurrentpointcanbefirstlast{%
+ \pgfplotscoordstream@firstlast@update
+ }{}%
+ \expandafter\pgfplots@foreach@plot@coord@NORMALIZED@ITERATE
+ \fi
+}
+
+% A common routine which resets internal data structures for the
+% survey phase, i.e. it is the shared implementation for all \addplot
+% variations.
+%
+% It takes all options which are provided to \addplot, sets them (at
+% least partially) and remembers them for the command serialization.
+%
+% #1: arguments to \addplot plot[#1]
+% -> these are called 'behavior' options in the manual; they are set
+% immediately.
+%
+% PRECONDITION:
+% \pgfplots@addplotimpl@plot@withoptions has already been invoked
+%
+% POSTCONDITION:
+% - internal datastructures are initialised (coordinate indexing, fpu)
+% - all keys which are required for the current plot are determined
+% (and set if necessary).
+% They are stored into
+% \pgfplots@addplot@survey@@optionlist.
+%
+\def\pgfplots@start@plot@with@behavioroptions#1{%
+ %\begingroup%<-- has been moved to \pgfplots@addplotimpl@plot@withoptions
+ \def\pgfplotsaxisplotphase{S}% "in survey"
+ \c@pgfplots@coordindex=0
+ \def\pgfplots@current@point@coordindex{\the\c@pgfplots@coordindex}% can be used inside of coordinate filters.
+ \def\coordindex{\pgfplots@current@point@coordindex}% valid inside of \addplot
+ \def\pgfplots@addplot@running{1}%
+ %
+ \def\pgfplots@colorbar@set@src{0}%
+ \pgfkeysdef{/pgfplots/colorbar source}{%
+ \pgfplotsutilifstringequal{##1}{true}{%
+ \def\pgfplots@colorbar@set@src{1}%
+ }{%
+ \pgfplotsutilifstringequal{##1}{false}{%
+ \def\pgfplots@colorbar@set@src{0}%
+ }{%
+ \pgfplots@error{Sorry, I don't know the value `colorbar source={##1}' and I am going to ignore it. Maybe you misspelled it?}%
+ }%
+ }%
+ }%
+ %
+ \pgfplots@start@plot@with@behavioroptions@setkeys{#1}%
+ %
+ % enable FPU after any \pgfplotsset operations. Otherwise things like
+ % linewidth=... which use the math parser might fail.
+ \ifpgfplots@usefpu
+ \pgfkeys{/pgf/fpu=true,%
+ /pgf/fpu/output format=float,%
+ }%
+ \fi
+ %
+ % make sure it is reset, just in case it is not supported by the
+ % input method.
+ \pgfplotsscanlinelengthinitzero
+ %
+ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler
+ \pgfplotsresetplothandler
+ \pgfplots@basiclevel@plothandler
+ %
+ \pgfplots@countplots@init
+ %
+ % hooks:
+ \pgfkeysvalueof{/pgfplots/execute at begin plot@@}%
+ \pgfkeysvalueof{/pgfplots/execute at begin plot}%
+ %
+ \if1\pgfplots@colorbar@set@src
+ \t@pgfplots@tokc={/pgfplots/point meta rel=per plot}%
+ \t@pgfplots@toka=\expandafter{\pgfplots@addplot@survey@@optionlist}%
+ \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc,\the\t@pgfplots@toka}%
+ \fi
+ %
+ %
+ \pgfplots@validate@plot@domain@arguments
+}
+
+\def\pgfplots@disable@non@survey@keys{%
+ %
+ % this here would try to compute something. DON'T DO THIS DURING
+ % SURVEY!
+ \pgfkeysdef{/tikz/name intersections}{}%
+ \pgfkeysdef{/tikz/intersection segments}{}%
+ %
+}%
+
+\def\pgfplots@start@plot@with@behavioroptions@setkeys#1{%
+ % these styles may contain behavior options (error bars,
+ % samples,... ) activate them!
+ %
+ % As of february 20, 2009, #1 will contain BOTH, /pgfplots
+ % and /tikz options. The /tikz ones are primarily for drawing
+ % and are UNIMPORTANT at this stage of processing.
+ % In fact, transparency etc. will only confuse everything.
+ %
+ % So: ignore them and set only /pgfplots keys here:
+ % This may actually redefine styles, for example
+ % \addplot[every mark/.append style={}] will use
+ % /pgfplots/every mark/.append style.
+ % But that doesn't hurt here.
+ %
+ % there are some exceptions like /tikz/id etc. These
+ % exceptions need special styles in the /pgfplots root - or I
+ % need to change the .unknown handler. See the available
+ % compatibility styles!
+ %
+% \pgfkeysdef{/pgfplots/.unknown}{%
+%\message{In \string\addplot[#1]: I am silently ignoring key `\pgfkeyscurrentkeyRAW' during the preparation phase.}%
+% }%
+ % ATTENTION:
+ % as of january 30, 2010, I will set /tikz keys as well. This won't hurt
+ % too much, I hope... there are no graphics operations anyway. But it *is*
+ % necessary since I *need* the plot handler for the new version. And the plot
+ % handler is, most likely, a /tikz key.
+ %
+ % it is possible that '#1' contains 'forget plot'. So, we need to
+ % set the options before checking \ifpgfplots@curplot@isirrelevant:
+ \pgfplots@disable@non@survey@keys
+ \pgfplotsset{/pgfplots/every axis plot,#1}%
+ %
+ \ifpgfplots@curplot@isirrelevant
+ \def\pgfplots@addplot@survey@@optionlist{/pgfplots/every axis plot,/pgfplots/every forget plot}%
+ \pgfplotsset{/pgfplots/every forget plot,/pgfplots/every axis plot post}%
+ \else
+ \edef\pgfplots@addplot@survey@@optionlist{%
+ /pgfplots/every axis plot,%
+ /pgfplots/every axis plot except legend,%
+ /pgfplots/every axis plot no \the\pgfplots@numplots/.try}%
+ \pgfplotsset{%
+ /pgfplots/every axis plot except legend,
+ /pgfplots/every axis plot no \the\pgfplots@numplots/.try,%
+ /pgfplots/every axis plot post}%
+ \fi
+ %
+ \t@pgfplots@tokc=\expandafter{\pgfplots@addplot@survey@@optionlist,#1}% this allows '#' inside of '#1'
+ \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc}%
+ %
+ \pgfplots@set@trig@format@plots
+}
+
+\long\def\pgfplotssurveyphaseaddoptionsbeforesurveybegins#1{%
+ \pgfplotsset{%
+ /pgfplots/execute at end survey/.add={}{%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@addplot@survey@@optionlist,#1}% this allows '#' inside of '#1'
+ \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc}%
+ },%
+ #1%
+ }%
+}%
+\long\def\pgfplotsplothandlersurveyaddoptions#1{%
+ \t@pgfplots@tokc=\expandafter{\pgfplots@addplot@survey@@optionlist,#1}% this allows '#' inside of '#1'
+ \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc}%
+ \pgfplotsset{#1}%
+}%
+
+
+% The main interface to draw a plot into an axis.
+%
+% Usage:
+% \addplot
+% plot coordinates {
+% (0,0)
+% (1,1)
+% };
+%
+% or
+%
+% \addplot[color=blue,mark=*]
+% plot coordinates {
+% (0,0)
+% (1,1)
+% };
+%
+% or one of the other input types.
+%
+% The first syntax will use the next plot specification in the list
+% \autoplotspeclist
+% and the first will use blue color and * markers.
+%
+% \addplot [<style options>] plot[<behavior options>] <input type and args> <post plot path> ;
+% \addplot3[<style options>] plot[<behavior options>] <input type and args> <post plot path> ;
+%
+% The complete accumulation is done GLOBALLY. It should be safe to put
+% '\addplot' into local groups.
+%
+%
+% The linespec. will be used in the legend.
+%
+% Low-level implementation:
+%
+% \pgfplots@addplot
+% \pgfplots@addplotimpl
+% \pgfplots@start@plot@with@behavioroptions <--- \begingroup
+% ...
+% ... remember options GLOBALLY
+% ... update limits GLOBALLY
+% ... \pgfplots@addplot@enqueue@coords GLOBALLY
+% ...
+% \pgfplots@end@plot <--- \endgroup
+\def\pgfplots@addplot{%
+ \pgfutil@ifnextchar3{%
+ \pgfplots@curplot@threedimtrue
+ \pgfplots@addplot@three
+ }{%
+ \pgfplots@curplot@threedimfalse
+ \pgfplots@addplot@
+ }%
+}
+\def\pgfplots@addplot@three3{\pgfplots@addplot@}%
+\def\pgfplots@addplot@{%
+ \pgfutil@ifnextchar+{%
+ \pgfplots@getautoplotspec into\nextplotspec
+ \pgfplots@addplotimplAPPEND
+ }{%
+ \pgfutil@ifnextchar[{%
+ \pgfplots@addplotimpl%
+ }{%
+ \pgfplots@getautoplotspec into\nextplotspec
+ % the space after ']' is required here:
+ % FIXME:
+ % - \addplot[]plot coordinates is NOT allowed!?
+ \expandafter\pgfplots@addplotimpl\expandafter[\nextplotspec]%
+ }%
+ }%
+}
+
+\def\pgfplots@addplotimplAPPEND+{\pgfutil@ifnextchar[{\pgfplots@addplotimplAPPEND@}{\pgfplots@addplotimplAPPEND@[]}}% this allows to gobble spaces and to skip the '[]'
+\def\pgfplots@addplotimplAPPEND@[{%
+ \expandafter\pgfplots@addplotimpl\expandafter[\nextplotspec,%
+}
+
+\long\def\pgfplots@addplotimpl[#1]{%
+ \pgfplotsutil@ifnextchar p{%
+ \pgfplots@addplotimpl@plot{#1}%
+ }{%
+ \pgfplots@addplotimpl@plot{#1}plot
+ }%
+}
+
+\long\def\pgfplots@addplotimpl@plot#1plot{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@plot@withoptions{#1}%
+ }{%
+ \pgfplots@addplotimpl@plot@withoptions{#1}[]%
+ }%
+}
+
+\long\def\pgfplots@addplotimpl@plot@withoptions#1[#2]{
+ \begingroup% <-- This groups ends in \pgfplots@end@plot
+ %
+ \pgfplotsutil@ifnextchar c{%
+ \pgfplots@addplotimpl@coordinates{#1}{#2}plot
+ }{%
+ \pgfplotsutil@ifnextchar f{%
+ \pgfplots@addplotimpl@f{#1}{#2}%
+ }{%
+ \pgfplotsutil@ifnextchar t{%
+ \def\pgfplotssurveyphaseinputclass{table}%
+ \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2}%
+ \pgfplots@addplotimpl@table{#1,#2}%
+ }{%
+ \pgfplotsutil@ifnextchar ({%
+ \pgfplots@addplotimpl@expression{#1}{#2}%
+ }{%
+ \pgfplotsutil@ifnextchar\bgroup{%
+ \pgfplots@addplotimpl@expression@curly{#1}{#2}%
+ }{%
+ \pgfplotsutil@ifnextchar e{%
+ \pgfplots@addplotimpl@expression@e{#1}{#2}%
+ }{%
+ \pgfplotsutil@ifnextchar g{%
+ \pgfplots@addplotimpl@g{#1}{#2}%
+ }{%
+ \pgfplotsutil@ifnextchar s{%
+ \pgfplots@addplotimpl@shell{#1}{#2}%
+ }{%
+
+ \pgfplots@error{Sorry, the supplied plot command is unknown or unsupported by pgfplots! Ignoring it.}%
+ \pgfplots@gobble@until@semicolon
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+\long\def\pgfplots@addplotimpl@f#1#2f{%
+ \pgfplotsutil@ifnextchar i{%
+ \pgfplots@addplotimpl@fil{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@function{#1}{#2}%
+ }%
+}%
+
+\long\def\pgfplots@addplotimpl@fil#1#2il{%
+ \pgfplotsutil@ifnextchar e{%
+ \pgfplots@addplotimpl@file{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@fillbetween{#1}{#2}%
+ }%
+}%
+
+\def\pgfplots@addplotimpl@fillbetween#1#2l between{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@fillbetween@opt{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@fillbetween@opt{#1}{#2}[]%
+ }%
+}
+% \addplot[#1] [#2] fill between[#3] #4;
+\long\def\pgfplots@addplotimpl@fillbetween@opt#1#2[#3]#4;{\pgfplots@addplotimpl@fillbetween@opt@{#1}{#2}{#3}{#4}}%
+
+\long\def\pgfplots@addplotimpl@fillbetween@opt@#1#2#3#4{%
+ \pgfkeysifdefined{/tikz/fill between/of/.@cmd}{%
+ \pgfplotslibraryfillbetween@addplot{#1,#2}{#3}{#4}%
+ }{%
+ \pgfplotsthrow{invalid argument}
+ {\pgfplots@loc@TMPa}%
+ {Please load \string\usepgfplotslibrary{fillbetween} in order to use `\string\addplot\space fill between'.}%
+ \pgfeov
+ }%
+ %
+ \pgfplots@end@plot%
+}%
+
+\def\pgfplots@gobble@until@semicolon#1;{}
+
+% PRECONDITION:
+% the key-value sets have all been set in the current scope.
+%
+% POSTCONDITION:
+% 1. the following macros are initialised and sanitized:
+% \pgfplots@plot@domain
+% \pgfplots@plot@ydomain (will be set to \pgfplots@plot@domain if empty)
+% \pgfplots@plot@samples@at
+% \pgfplots@plot@samples@y (will be set to the x variant if empty)
+% \tikz@plot@var (will become a macro like '\x')
+% \pgfplots@plot@var@nonmacro (the same as \tikz@plot@var, but without backslash)
+% \pgfplots@plot@var@y (like \tikz@plot@var, but for y)
+% \pgfplots@plot@var@y@nonmacro (like \pgfplots@plot@var@nonmacro, but for y)
+% 2. the following key-value things are set:
+% /pgfplots/mesh/rows
+% /pgfplots/mesh/cols
+% /pgfplots/samples y (will contain a value )
+% 3. the macro
+% \b@pgfplots@should@sample@LINE
+% will be
+% \def\b@pgfplots@should@sample@LINE{1}
+% if the expression plotter should sample a line
+% and
+% \def\b@pgfplots@should@sample@LINE{0}
+% if it should sample a mesh.
+\def\pgfplots@plot@expression@preparekeys{%
+ \pgfkeysgetvalue{/pgfplots/domain}\pgfplots@plot@domain
+ \pgfkeysgetvalue{/pgfplots/samples y}\pgfplots@plot@samples@y
+ \pgfkeysgetvalue{/pgfplots/samples at}\pgfplots@plot@samples@at
+ \pgfkeysgetvalue{/pgfplots/variable y}\pgfplots@plot@var@y
+ %
+ \ifx\pgfplots@plot@samples@y\pgfutil@empty
+ \else
+ \pgfplotscoordmath{default}{parse int}{\pgfplots@plot@samples@y}%
+ \let\pgfplots@plot@samples@y=\pgfmathresult
+ \pgfkeyslet{/pgfplots/samples y}{\pgfplots@plot@samples@y}%
+ \fi
+ %
+ % \tikz@plot@var is '\x' be default:
+ \pgfplots@gettikzinternal@keyval{variable}{tikz@plot@var}{\x}%
+ %
+ \begingroup
+ \escapechar=-1
+ \xdef\pgfplots@glob@TMPa{\expandafter\string\tikz@plot@var}%
+ \xdef\pgfplots@glob@TMPb{\expandafter\string\pgfplots@plot@var@y}%
+ \endgroup
+ % \pgfplots@plot@var@nonmacro is the value '\tikz@plot@var'
+ % without the '\', i.e. 'x' by default:
+ \let\pgfplots@plot@var@nonmacro=\pgfplots@glob@TMPa
+ \let\pgfplots@plot@var@y@nonmacro=\pgfplots@glob@TMPb
+ %
+ % make sure the 'plot vars' have a backslash (as it was in tikz
+ % plot expression):
+ \edef\pgfplots@loc@TMPa{\expandafter\string\tikz@plot@var}%
+ \ifx\pgfplots@plot@var@nonmacro\pgfplots@loc@TMPa
+ \edef\tikz@plot@var{\expandafter\noexpand\csname \tikz@plot@var\endcsname}%
+ \fi
+ %
+ \edef\pgfplots@loc@TMPa{\expandafter\string\pgfplots@plot@var@y}%
+ \ifx\pgfplots@plot@var@y@nonmacro\pgfplots@loc@TMPa
+ \edef\pgfplots@plot@var@y{\expandafter\noexpand\csname \pgfplots@plot@var@y\endcsname}%
+ \fi
+ %
+ % Check if we have to sample a line or a matrix.
+ %
+ \pgfkeysgetvalue{/pgfplots/sample dim}\pgfplots@loc@TMPa
+ \def\pgfplots@loc@TMPb{auto}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \ifpgfplots@curplot@threedim
+ \def\b@pgfplots@should@sample@LINE{0}%
+ \else
+ \def\b@pgfplots@should@sample@LINE{1}%
+ \fi
+ \else
+ \ifcase\pgfplots@loc@TMPa\relax
+ % sample dim=0 not useful!?
+ \def\b@pgfplots@should@sample@LINE{1}%
+ \or
+ \def\b@pgfplots@should@sample@LINE{1}%
+ \or
+ \def\b@pgfplots@should@sample@LINE{0}%
+ \else
+ \pgfplots@error{Sorry, sample dim=\pgfplots@loc@TMPa\space is unsupported (use either 1 or 2)}%
+ \fi
+ \fi
+ %
+ \if0\b@pgfplots@should@sample@LINE
+ % sample a matrix. Check the keys; if they are one
+ % dimensional, switch back to line sampling:
+ \pgfkeysgetvalue{/pgfplots/y domain}{\pgfplots@plot@ydomain}%
+ \edef\pgfplots@plot@ydomain{\pgfplots@plot@ydomain}%
+ \def\pgfplots@loc@TMPa{0:0}%
+ \ifx\pgfplots@plot@ydomain\pgfplots@loc@TMPa
+ \def\b@pgfplots@should@sample@LINE{1}%
+ \fi
+ \ifx\pgfplots@plot@ydomain\pgfutil@empty
+ \let\pgfplots@plot@ydomain=\pgfplots@plot@domain
+ \pgfkeyssetvalue{/pgfplots/y domain}{\pgfkeysvalueof{/pgfplots/domain}}%
+ \fi
+ \ifx\pgfplots@plot@samples@y\pgfutil@empty
+ \else
+ \ifnum\pgfplots@plot@samples@y<2
+ \def\b@pgfplots@should@sample@LINE{1}%
+ \fi
+ \fi
+ \else
+ \def\b@pgfplots@should@sample@LINE{1}%
+ \fi
+ \ifx\pgfplots@plot@samples@y\pgfutil@empty
+ \pgfkeyssetvalue{/pgfplots/samples y}{\pgfkeysvalueof{/pgfplots/samples}}%
+ \pgfkeysgetvalue{/pgfplots/samples y}\pgfplots@plot@samples@y
+ \fi
+ %
+ \iftikz@plot@raw@gnuplot
+ % FIXME : verify this case
+ \else
+ \pgfkeyssetvalue{/pgfplots/mesh/rows}{\pgfkeysvalueof{/pgfplots/samples y}}%
+ \ifx\pgfplots@plot@samples@at\pgfutil@empty
+ \pgfkeyssetvalue{/pgfplots/mesh/cols}{\pgfkeysvalueof{/pgfplots/samples}}%
+ \else
+ % FIXME : count number of samples in 'samples at'!
+ \fi
+ \fi
+ \if1\b@pgfplots@should@sample@LINE
+ \pgfkeyssetvalue{/pgfplots/sample dim}{1}%
+ \pgfkeyslet{/pgfplots/mesh/rows}\pgfplots@plot@samples
+ \pgfkeyssetvalue{/pgfplots/mesh/cols}{1}%
+ \else
+ \pgfkeyssetvalue{/pgfplots/sample dim}{2}%
+ \fi
+ %
+}%
+
+% Plot expression. It invokes the pgf math parser and a customized
+% pgfplots point sampling routine. Combined with the 'fixed point
+% library' of pgf, it results in highly accurate plots.
+%
+%
+\long\def\pgfplots@addplotimpl@expression#1#2(#3,#4)#5;{\pgfplots@addplotimpl@expression@{#1}{#2}{#3}{#4}{#5}}%
+% \addplot[#1] [#2] (#3,#4) #5;
+\long\def\pgfplots@addplotimpl@expression@#1#2#3#4#5{%
+ \pgfplots@addplotimpl@expression@set@options{#1}{#2}%
+ \pgfplots@addplotimpl@expression@@{#3}{#4}{#5}%
+}
+
+\long\def\pgfplots@addplotimpl@expression@set@options#1#2{%
+ \def\pgfplotssurveyphaseinputclass{expression}%
+ \pgfplots@start@plot@with@behavioroptions{%
+ #1,%
+ /pgfplots/.cd,%
+ #2,%
+ /utils/exec={%
+ \if0\pgfplotsplothandlermesh@matrixinput
+ % mesh input=patches unsupported in this context.
+ \pgfkeysalso{/pgfplots/mesh input=lattice}%
+ \fi
+ },%
+ /pgfplots/mesh/ordering/x varies%
+ }%
+ \pgfplots@plot@expression@preparekeys
+}%
+
+% \addplot (#1,#2) #3;
+\long\def\pgfplots@addplotimpl@expression@@#1#2#3{%
+ %
+ \pgfplots@PREPARE@COORD@STREAM{#3}%
+ %
+ \def\pgfplots@addplotimpl@expression@xEXPR{#1}%
+ %
+ % Determine whether the x range is parameterized or uniform and
+ % prepare a macro which assigns \pgfplots@current@point@x:
+ \def\pgfplots@addplotimpl@expression@prepare@x{%
+ \pgfmathparse{#1}%
+ \let\pgfplots@current@point@x=\pgfmathresult
+ }%
+ \def\pgfplots@addplotimpl@expression@prepare@y{%
+ \pgfmathparse{\pgfplots@addplotimpl@expression@yEXPR}%
+ \let\pgfplots@current@point@y=\pgfmathresult
+ }%
+ \def\pgfplots@addplotimpl@expression@hasuniform@x{0}%
+ % do we have '\x' as x coordinate?
+ \expandafter\def\expandafter\pgfplots@loc@TMPb\expandafter{\tikz@plot@var}%
+ \ifx\pgfplots@addplotimpl@expression@xEXPR\pgfplots@loc@TMPb
+ \def\pgfplots@addplotimpl@expression@hasuniform@x{1}%
+ \else
+ \edef\pgfplots@loc@TMPb{\pgfplots@plot@var@nonmacro}%
+ % do we have 'x' as x coordinate?
+ \ifx\pgfplots@addplotimpl@expression@xEXPR\pgfplots@loc@TMPb
+ \def\pgfplots@addplotimpl@expression@hasuniform@x{1}%
+ \fi
+ \fi
+ \if\pgfplots@addplotimpl@expression@hasuniform@x1%
+ % if '#1' is '\x' or 'x', we don't need the math parser -
+ % we can simply take \tikz@plot@var.
+ \def\pgfplots@addplotimpl@expression@prepare@x{%
+ \edef\pgfplots@current@point@x{\tikz@plot@var}%
+ }%
+ \fi
+ %
+ \def\pgfplots@addplotimpl@expression@hasuniform@y{0}%
+ %
+ %
+ %
+ % if(
+ % x is logarithmic &&
+ % #1 == '\x' &&
+ % the 'samples at' key has not been used )
+ % -> sample logarithmically!
+ \def\pgfplots@samples@logarithmically@x{0}%
+ \ifpgfplots@xislinear
+ \else
+ \if\pgfplots@addplotimpl@expression@hasuniform@x1%
+ \ifx\pgfplots@plot@samples@at\pgfutil@empty
+ % we don't have 'samples at' -> use domain!
+ \def\pgfplots@samples@logarithmically@x{1}%
+ \fi
+ \fi
+ \fi
+ %
+ \def\pgfplots@samples@logarithmically@y{0}%
+ %
+ % Now, prepare the loops.
+ %
+ % I am using \pgfplotsforeachungrouped in favor of
+ % \foreach because \foreach does NOT allow extended
+ % precision. Besides, \pgfplotsforeachungrouped avoids
+ % scoping problems.
+ \let\pgfplots@plot@data@notify@next@x=\relax
+ \let\pgfplots@plot@data@notify@next@y=\relax
+ %
+ \ifpgfplots@curplot@threedim
+ \def\pgfplots@addplotimpl@expression@split@yz##1,##2\pgfplots@EOI{%
+ \def\pgfplots@addplotimpl@expression@yEXPR{##1}%
+ \def\pgfplots@addplotimpl@expression@zEXPR{##2}%
+ }%
+ \pgfplots@addplotimpl@expression@split@yz#2\pgfplots@EOI%
+ %
+ % do we have '\y' as y coordinate?
+ \expandafter\def\expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@plot@var@y}%
+ \ifx\pgfplots@addplotimpl@expression@yEXPR\pgfplots@loc@TMPb
+ \def\pgfplots@addplotimpl@expression@hasuniform@y{1}%
+ \def\pgfplots@addplotimpl@expression@prepare@y{%
+ \edef\pgfplots@current@point@y{\pgfplots@plot@var@y}%
+ }%
+ \else
+ \edef\pgfplots@loc@TMPb{\pgfplots@plot@var@y@nonmacro}%
+ % do we have 'y' as y coordinate?
+ \ifx\addplotimpl@expression@yEXPR\pgfplots@loc@TMPb
+ \def\pgfplots@addplotimpl@expression@hasuniform@y{1}%
+ \def\pgfplots@addplotimpl@expression@prepare@y{%
+ \edef\pgfplots@current@point@y{\pgfplots@plot@var@y}%
+ }%
+ \fi
+ \fi
+ %
+ \ifpgfplots@yislinear
+ \else
+ \if\pgfplots@addplotimpl@expression@hasuniform@y1%
+ \def\pgfplots@samples@logarithmically@y{1}%
+ \fi
+ \fi
+ %
+ \ifpgfplots@threedim@log@sampling
+ \else
+ \def\pgfplots@samples@logarithmically@x{0}%
+ \def\pgfplots@samples@logarithmically@y{0}%
+ \fi
+ %
+ \if\pgfplots@samples@logarithmically@x1%
+ \else
+ \ifx\pgfplots@plot@samples@at\pgfutil@empty
+ % we don't have 'samples at' -> use domain!
+ \expandafter\pgfplots@domain@to@foreach\pgfplots@plot@domain\relax{\pgfplots@plot@samples}%
+ \let\pgfplots@expression@xdomain=\pgfplotsretval
+ \else
+ % use 'samples at':
+ \let\pgfplots@expression@xdomain=\pgfplots@plot@samples@at
+ \fi
+ \fi
+ %
+ \if\pgfplots@samples@logarithmically@x1%
+ \if\pgfplots@samples@logarithmically@y1%
+ \pgfplots@warning{Sorry, 3d log sampling in BOTH x and y is not implemented yet}%
+ \def\pgfplots@samples@logarithmically@y{0}%
+ \fi
+ \fi
+ %
+ \if0\b@pgfplots@should@sample@LINE
+ % Samples twodimensionally (a lattice):
+ \if\pgfplots@samples@logarithmically@y0%
+ \expandafter\pgfplots@domain@to@foreach\pgfplots@plot@ydomain\relax{\pgfplots@plot@samples@y}%
+ \let\pgfplots@expression@ydomain=\pgfplotsretval
+ \fi
+ %
+ % Assemble a
+ % \pgfplots@plot@data##1 ->
+ % \foreach \y in {-5,-4.6,...,5} {##1};
+ % \foreach \x in {-5,-4.6,...,5}
+ % macro:
+ \if\pgfplots@samples@logarithmically@x0%
+ \if\pgfplots@samples@logarithmically@y0%
+ % standard case: no log sampling.
+ \edef\pgfplots@plot@data##1{%
+ \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\pgfplots@plot@var@y in {\pgfplots@expression@ydomain}
+ {%
+ \pgfplots@plot@data@notify@next@y
+ \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\tikz@plot@var in {\pgfplots@expression@xdomain} {%
+ \pgfplots@plot@data@notify@next@x
+ ##1%
+ }%
+ \noexpand\pgfplotsplothandlernotifyscanlinecomplete
+ }%
+ }%
+ \fi
+ \fi
+ \if\pgfplots@samples@logarithmically@x1%
+ \if\pgfplots@samples@logarithmically@y0%
+ % sample logarithmically in X:
+ \edef\pgfplots@plot@data##1{%
+ \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\pgfplots@plot@var@y in {\pgfplots@expression@ydomain}
+ {%
+ \pgfplots@plot@data@notify@next@y
+ %
+ \noexpand\pgfplotsforeachlogarithmicungrouped[\pgfplots@plot@samples][x]
+ \expandafter\noexpand\tikz@plot@var/\noexpand\pgfplots@current@point@x@log
+ in {\pgfplots@plot@domain}%
+ {%
+ \pgfplots@plot@data@notify@next@x
+ ##1%
+ }%
+ \noexpand\pgfplotsplothandlernotifyscanlinecomplete
+ }%
+ }%
+ \fi
+ \fi
+ \if\pgfplots@samples@logarithmically@x0%
+ \if\pgfplots@samples@logarithmically@y1%
+ % sample logarithmically in Y:
+ \edef\pgfplots@plot@data##1{%
+ \noexpand\pgfplotsforeachlogarithmicungrouped[\pgfplots@plot@samples@y][y]
+ \expandafter\noexpand\pgfplots@plot@var@y/\noexpand\pgfplots@current@point@y@log
+ in {\pgfplots@plot@ydomain}%
+ {%
+ \pgfplots@plot@data@notify@next@y
+ \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\tikz@plot@var in {\pgfplots@expression@xdomain} {%
+ \pgfplots@plot@data@notify@next@x
+ ##1%
+ }%
+ \noexpand\pgfplotsplothandlernotifyscanlinecomplete
+ }%
+ }%
+ \fi
+ \fi
+ \if\pgfplots@samples@logarithmically@x1%
+ \if\pgfplots@samples@logarithmically@y1%
+ % sample logarithmically in X and Y:
+ % FIXME : IMPLEMENT!
+ % FIXME : implementation UNFINISHED: also support log
+ % sampling in BOTH 'x' 'y'!
+ % requires to solve FIXME in \pgfplotsforeachlogarithmicungrouped)
+ % -> also adopt unittest_log_sampling_3d.tex
+ %
+ \fi
+ \fi
+ \else
+ % sample a line:
+ \def\pgfplots@plot@ydomain{0:0}%
+ \if\pgfplots@samples@logarithmically@x1%
+ % sample logarithmically:
+ \edef\pgfplots@plot@data##1{%
+ \noexpand\pgfplotsforeachlogarithmicungrouped[\pgfplots@plot@samples][x]
+ \expandafter\noexpand\tikz@plot@var/\noexpand\pgfplots@current@point@x@log
+ in {\pgfplots@plot@domain}%
+ {%
+ \pgfplots@plot@data@notify@next@x
+ ##1%
+ }%
+ }%
+ \else
+ \edef\pgfplots@plot@data##1{%
+ \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\tikz@plot@var in {\pgfplots@expression@xdomain} {%
+ \pgfplots@plot@data@notify@next@x
+ ##1%
+ }%
+ }%
+ \fi
+ %
+ % If we have (\x,\y,f(x)), use (\x,0,f(x)) instead and
+ % suppress the error message which would occur for \y.
+ \if1\pgfplots@addplotimpl@expression@hasuniform@y
+ \def\pgfplots@addplotimpl@expression@yEXPR{0}%
+ \def\pgfplots@plot@var@y{0}%
+ \else
+ \expandafter\edef\pgfplots@plot@var@y{\pgfplots@plot@var@y@nonmacro}% this provides an error message, see above.
+ \fi
+ \fi
+ \else
+ % Assemble a
+ % \pgfplots@plot@data##1 -> \foreach \x in {-5,-4.6,...,5} {##1} macro:
+ \if\pgfplots@samples@logarithmically@x1%
+ % sample logarithmically:
+ \edef\pgfplots@plot@data##1{%
+ \noexpand\pgfplotsforeachlogarithmicungrouped[\pgfplots@plot@samples][x]
+ \expandafter\noexpand\tikz@plot@var/\noexpand\pgfplots@current@point@x@log
+ in {\pgfplots@plot@domain}%
+ {%
+ \pgfplots@plot@data@notify@next@x
+ ##1%
+ }%
+ }%
+ \else
+ \ifx\pgfplots@plot@samples@at\pgfutil@empty
+ % we don't have 'samples at' -> use domain!
+ \expandafter\pgfplots@domain@to@foreach\pgfplots@plot@domain\relax{\pgfplots@plot@samples}%
+ \let\pgfplots@loc@TMPa=\pgfplotsretval
+ \else
+ % use 'samples at':
+ \let\pgfplots@loc@TMPa=\pgfplots@plot@samples@at
+ \fi
+ \edef\pgfplots@plot@data##1{%
+ \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\tikz@plot@var in {\pgfplots@loc@TMPa}%
+ {%
+ \pgfplots@plot@data@notify@next@x
+ ##1%
+ }%
+ }%
+ \fi
+ \expandafter\def\pgfplots@plot@var@y{0}%
+ \def\pgfplots@addplotimpl@expression@yEXPR{#2}%
+ \def\pgfplots@addplotimpl@expression@zEXPR{}%
+ \def\pgfplots@current@point@z{}%
+ \fi
+ %
+ %
+ \if\pgfplots@samples@logarithmically@x1%
+ % we have a logarithmic sampling sequence,
+ % \pgfplots@current@point@x@log is already available
+ % logarithmic! We can safe time and accuracy for the x
+ % coordinate by using that one instead of computing
+ % log(exp(\x)) numerically:
+ \pgfplots@disablelogfilter@xtrue
+ \def\pgfplots@addplotimpl@expression@prepare@x{%
+ \let\pgfplots@current@point@x=\pgfplots@current@point@x@log
+ }%
+ \pgflibraryfpuifactive
+ {\relax}
+ {%
+ % ok, if the FPU is NOT active, we should return
+ % results as fixed points.
+ % We need to configure that for
+ % \pgfplotsforeachlogarithmicungrouped manually:
+ \pgfplotsforeachlogarithmicformatresultwith{%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ }%
+ }%
+ \fi
+ \if\pgfplots@samples@logarithmically@y1%
+ % we have a logarithmic sampling sequence,
+ % \pgfplots@current@point@y@log is already available
+ % logarithmic! We can safe time and accuracy for the y
+ % coordinate by using that one instead of computing
+ % log(exp(\y)) numerically:
+ \pgfplots@disablelogfilter@ytrue
+ \def\pgfplots@addplotimpl@expression@prepare@y{%
+ \let\pgfplots@current@point@y=\pgfplots@current@point@y@log
+ }%
+ \pgflibraryfpuifactive
+ {\relax}
+ {%
+ % ok, if the FPU is NOT active, we should return
+ % results as fixed points.
+ % We need to configure that for
+ % \pgfplotsforeachlogarithmicungrouped manually:
+ \pgfplotsforeachlogarithmicformatresultwith{%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ }%
+ }%
+ \fi
+ % START:
+ % (NOTE: this does also define 'x', 'y', and 'z' math
+ % expressions!)
+ \pgfplots@coord@stream@start
+ %
+ \pgfplots@addplotimpl@expression@check@LUA
+ \if1\pgfplotsretval
+ \pgfplots@log{\pgfplots@LUA@loglevel@debug}{lua backend=true: Activating LUA version of plot expression for plot \the\pgfplots@numplots\space (type '\pgfplotsplothandlername').}%
+ \begingroup
+ \expandafter\def\tikz@plot@var{\pgfplots@plot@var@nonmacro}%
+ \expandafter\def\pgfplots@plot@var@y{\pgfplots@plot@var@y@nonmacro}%
+ \expandafter\pgfplots@parse@domain\pgfplots@plot@domain\relax{pgfplots@plot@domain}%
+ %
+ \if0\b@pgfplots@should@sample@LINE
+ \expandafter\pgfplots@parse@domain\pgfplots@plot@ydomain\relax{pgfplots@plot@ydomain}%
+ \else
+ \def\pgfplots@plot@ydomain@min{0}%
+ \def\pgfplots@plot@ydomain@max{0}%
+ \def\pgfplots@plot@samples@y{1}%
+ \fi
+ %
+ % FIXME : there are some cases in which this here might be a
+ % bad idea:
+ % - if someone has redefined math functions on TeX
+ % - if someone has defined his own math functions (only in
+ % TeX)
+ % - if a plot expression contains directlua -- the expansion will play
+ % funny tricks in this case
+ \xdef\pgfplotsglobalretval{%
+ \pgfplotsutil@directlua{%
+ pgfplots.texAddplotExpressionCoordinateGenerator(^^J%
+ \ifpgfplots@curplot@threedim true \else false\fi,^^J%
+ "#1", ^^J%
+ "\pgfplots@addplotimpl@expression@yEXPR",^^J%
+ "\pgfplots@addplotimpl@expression@zEXPR",^^J%
+ \b@pgfplots@should@sample@LINE,^^J%
+ "\pgfplots@plot@domain@min", "\pgfplots@plot@domain@max",^^J%
+ "\pgfplots@plot@ydomain@min", "\pgfplots@plot@ydomain@max",^^J%
+ "\pgfplots@plot@samples",^^J%
+ "\pgfplots@plot@samples@y",^^J%
+ "\pgfplots@plot@var@nonmacro",^^J%
+ "\pgfplots@plot@var@y@nonmacro",
+ "\pgfplots@plot@samples@at",
+ "\pgfplots@LUA@backend@debugmode")^^J%
+ }%
+ }%
+ \endgroup
+ \if0\pgfplotsglobalretval
+ \pgfplots@log{\pgfplots@LUA@loglevel@info}{lua backend=true: LUA version of plot expression failed. Using TeX version. (plot \the\pgfplots@numplots).}%
+ \pgfplots@LUA@backend@failed
+ \pgfplots@addplotimpl@expression@streamall
+ \else
+ \fi
+ \else
+ \pgfplots@addplotimpl@expression@streamall
+ \fi
+ %
+ \pgfplots@coord@stream@end
+}%
+
+% Defines \pgfplotsretval to be '1' if the pure LUA version of
+% \addplot expression is enabled. It defines \pgfplotsretval to be 0
+% if not.
+\def\pgfplots@addplotimpl@expression@check@LUA{%
+ \def\pgfplotsretval{0}%
+ \ifpgfplots@LUA@backend@supported
+ \def\pgfplotsretval{1}%
+ \ifpgfplotsplothandlermesh@patch@type@sampling
+ \def\pgfplotsretval{0}%
+ \pgfplots@LUA@plotexpression@log@deactivation{patch type sampling unsupported (yet)}%
+ \fi
+ %
+ \if1\pgfplots@addplotimpl@expression@hasuniform@x
+ \else
+ \expandafter\pgfplotsutilifcontainsmacro\expandafter{\pgfplots@addplotimpl@expression@xEXPR}{%
+ \def\pgfplotsretval{0}%
+ \pgfplots@command@to@string\pgfplots@addplotimpl@expression@xEXPR\pgfplots@loc@TMPa
+ \pgfplots@LUA@plotexpression@log@deactivation{x expression '\pgfplots@loc@TMPa' contains a TeX macro}%
+ }{%
+ }%
+ \fi
+ %
+ \ifx\pgfplots@plot@samples@at\pgfutil@empty
+ \else
+ \def\pgfplotsretval{0}%
+ \pgfplots@LUA@plotexpression@log@deactivation{samples at unsupported (yet)}%
+ \fi
+ %
+ \if1\pgfplots@addplotimpl@expression@hasuniform@y
+ \else
+ \expandafter\pgfplotsutilifcontainsmacro\expandafter{\pgfplots@addplotimpl@expression@yEXPR}{%
+ \def\pgfplotsretval{0}%
+ \pgfplots@command@to@string\pgfplots@addplotimpl@expression@yEXPR\pgfplots@loc@TMPa
+ \pgfplots@LUA@plotexpression@log@deactivation{y expression '\pgfplots@loc@TMPa' contains a TeX macro}%
+ }{%
+ }%
+ \fi
+ %
+ \ifpgfplots@curplot@threedim
+ \expandafter\pgfplotsutilifcontainsmacro\expandafter{\pgfplots@addplotimpl@expression@zEXPR}{%
+ \def\pgfplotsretval{0}%
+ \pgfplots@command@to@string\pgfplots@addplotimpl@expression@zEXPR\pgfplots@loc@TMPa
+ \pgfplots@LUA@plotexpression@log@deactivation{z expression '\pgfplots@loc@TMPa' contains a TeX macro}%
+ }{%
+ }%
+ \fi
+ \fi
+}%
+
+\def\pgfplots@LUA@plotexpression@log@deactivation#1{%
+ \pgfplots@log{\pgfplots@LUA@loglevel@info}{Deactivating LUA version of plot expression for plot \the\pgfplots@numplots\space (type '\pgfplotsplothandlername'): #1.}%
+ \pgfplots@LUA@backend@failed
+}
+\def\pgfplots@parse@domain#1:#2\relax#3{%
+ \pgfmathparse{#1}%
+ \expandafter\let\csname #3@min\endcsname=\pgfmathresult%
+ \pgfmathparse{#2}%
+ \expandafter\let\csname #3@max\endcsname=\pgfmathresult%
+}%
+\def\pgfplots@addplotimpl@expression@streamall{%
+ % create a backup of the 'x' and 'y' math expressions which
+ % have been defined in \pgfplots@coord@stream@start:
+ \let\pgfplots@addplotimpl@expression@pseudoconst@old@x=\pgfmathx@
+ \let\pgfplots@addplotimpl@expression@pseudoconst@old@y=\pgfmathy@
+ %
+ % Prepare 'x' and 'y' as pseudo constants in expressions:
+ \gdef\pgfplots@noy@error{%
+ \pgfplots@error{Sorry, you can't use 'y' in this context. PGFPlots expected to sample a line, not a mesh. Please use the [mesh] option combined with [samples y>0] and [domain y!=0:0] to indicate a twodimensional input domain}%
+ \global\let\pgfplots@noy@error=\relax
+ }%
+ % Define a "function" x which sets \pgfmathresult := \x :
+ \pgfplotsmathdeclarepseudoconstant{\pgfplots@plot@var@nonmacro}{\edef\pgfmathresult{\tikz@plot@var}}%
+ \if0\b@pgfplots@should@sample@LINE
+ % surface:
+ \pgfplotsmathdeclarepseudoconstant{\pgfplots@plot@var@y@nonmacro}{\edef\pgfmathresult{\pgfplots@plot@var@y}}%
+ \else
+ \pgfplotsmathdeclarepseudoconstant{\pgfplots@plot@var@y@nonmacro}{\pgfplots@noy@error\def\pgfmathresult{0.0}}%
+ \fi
+ % remember them here:
+ \let\pgfplots@addplotimpl@expression@pseudoconst@x=\pgfmathx@
+ \let\pgfplots@addplotimpl@expression@pseudoconst@y=\pgfmathy@
+ %
+% \if n\pgfplots@meshmode
+ % mesh=false : ignore patch type sampling.
+% \else
+ \ifpgfplotsplothandlermesh@patch@type@sampling
+ \pgfplots@plot@expression@prepare@patch@type@sampling
+ \fi
+% \fi
+ %
+ % Warning for use fpu=false: evaluation '\x^3' might be different from 'x^3' for
+ % negative arguments:
+ % \x^3 ---> -0.2^3 but x^3 = (-0.2)^3 .
+ % This does not happen for use fpu=true.
+ %
+ \pgfplots@plot@data{%
+ \let\pgfmathx@=\pgfplots@addplotimpl@expression@pseudoconst@x
+ \let\pgfmathy@=\pgfplots@addplotimpl@expression@pseudoconst@y
+ % eval expressions:
+ \pgfplots@addplotimpl@expression@prepare@x%
+ \pgfplots@addplotimpl@expression@prepare@y%
+ \ifpgfplots@curplot@threedim
+ \pgfmathparse{\pgfplots@addplotimpl@expression@zEXPR}%
+ \let\pgfplots@current@point@z=\pgfmathresult
+ \fi
+ % restore 'x' and 'y':
+ \let\pgfmathx@=\pgfplots@addplotimpl@expression@pseudoconst@old@x
+ \let\pgfmathy@=\pgfplots@addplotimpl@expression@pseudoconst@old@y
+ %
+ %\pgfplots@expression@normalize@floats
+ %
+ % process coords as usual:
+ \pgfplots@coord@stream@coord
+ }%
+}
+
+% Typically, the FPU will generate stuff like '1Y1.0e5'. Since such
+% internal representations will be available to API users (especially
+% 'x filter' and its variants, we want to simplify its output - by
+% normalizing it.
+%
+% This routine will convert any floats to scientific format, i.e.
+% 1.0e5 instead of 1Y1.0e5 (1Y means 'positive float', compare
+% pgfmathfloat.code.tex).
+\def\pgfplots@expression@normalize@floats{%
+ \pgflibraryfpuifactive{%
+ \ifx\pgfplots@current@point@x\pgfutil@empty\else
+ \pgfmathfloattosci{\pgfplots@current@point@x}\let\pgfplots@current@point@x=\pgfmathresult
+ \fi%
+ \ifx\pgfplots@current@point@y\pgfutil@empty\else
+ \pgfmathfloattosci{\pgfplots@current@point@y}\let\pgfplots@current@point@y=\pgfmathresult
+ \fi%
+ \ifx\pgfplots@current@point@z\pgfutil@empty\else
+ \pgfmathfloattosci{\pgfplots@current@point@z}\let\pgfplots@current@point@z=\pgfmathresult
+ \fi%
+ }{%
+ }%
+}%
+
+% \addplot[#1] [#2] {#3} #4;
+\long\def\pgfplots@addplotimpl@expression@curly#1#2#3#4;{\pgfplots@addplotimpl@expression@curly@{#1}{#2}{#3}{#4}}%
+\long\def\pgfplots@addplotimpl@expression@curly@#1#2#3#4{%
+ \pgfplots@addplotimpl@expression@set@options{#1}{#2}%
+ \ifpgfplots@curplot@threedim
+ \t@pgfplots@toka={,#3}%
+ % the \pgfplots@plot@var@y will expand to the current value of
+ % '/pgfplots/variable y'.
+ % Keep it this way, \pgfplots@addplotimpl@expression@ checks
+ % for that special string.
+ \edef\pgfplots@loc@TMPb{%
+ {\expandafter\noexpand\tikz@plot@var}%
+ {\expandafter\noexpand\pgfplots@plot@var@y\the\t@pgfplots@toka}%
+ }%
+ \expandafter\pgfplots@addplotimpl@expression@@\pgfplots@loc@TMPb{#4}%
+ \else
+ \expandafter\pgfplots@addplotimpl@expression@@\expandafter{\tikz@plot@var}{#3}{#4}%
+ \fi
+}%
+% \addplot[#1] [#2] expression[#3] {#4} #5;
+\def\pgfplots@addplotimpl@expression@e#1#2expression{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@expression@e@{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@expression@e@{#1}{#2}[]%
+ }%
+}%
+\def\pgfplots@addplotimpl@expression@e@#1#2[#3]{%
+ \pgfplots@addplotimpl@expression@curly{#1}{#2,#3}%
+}%
+
+
+% This prepares the implementation for 'patch type sampling':
+\def\pgfplots@plot@expression@prepare@patch@type@sampling{%
+ \pgfplotssurveyphaseaddoptionsbeforesurveybegins{
+ mesh input=patches,%
+ }%
+ %
+ \pgfkeysgetvalue{/pgfplots/patch type}\pgfplotsplothandlermesh@patchclass
+ %
+ \let\pgfplots@plot@data@@=\pgfplots@plot@data
+ \let\pgfplots@plot@data@curx=\pgfutil@empty
+ \let\pgfplots@plot@data@cury=\pgfutil@empty
+ \let\pgfplots@plot@data@lastx=\pgfutil@empty
+ \let\pgfplots@plot@data@lasty=\pgfutil@empty
+ \let\pgfplots@plot@data@first@x=\pgfutil@empty
+ \let\pgfplots@plot@data@first@y=\pgfutil@empty
+ %
+ \def\pgfplots@plot@data@notify@next@x{%
+ \ifx\pgfplots@plot@data@first@x\pgfutil@empty
+ \edef\pgfplots@plot@data@first@x{\tikz@plot@var}%
+ \fi
+ \let\pgfplots@plot@data@lastx=\pgfplots@plot@data@curx
+ \edef\pgfplots@plot@data@curx{\tikz@plot@var}%
+ }%
+ \def\pgfplots@plot@data@notify@next@y{%
+ \ifx\pgfplots@plot@data@first@y\pgfutil@empty
+ \edef\pgfplots@plot@data@first@y{\pgfplots@plot@var@y}%
+ \fi
+ \let\pgfplots@plot@data@lasty=\pgfplots@plot@data@cury
+ \edef\pgfplots@plot@data@cury{\pgfplots@plot@var@y}%
+ }%
+ \def\pgfplots@plot@data##1{%
+ %
+ \pgfplots@plot@data@@{%
+ \let\tikz@plot@var@old=\tikz@plot@var
+ \let\pgfplots@plot@var@y@old=\pgfplots@plot@var@y
+ %
+ %
+ %
+ % boolean 'if is first row || is first cell':
+ \pgfplots@loc@tmpfalse
+ \ifx\pgfplots@plot@data@curx\pgfplots@plot@data@first@x
+ % ah - we have the first row.
+ \pgfplots@loc@tmptrue
+ \fi
+ \if0\b@pgfplots@should@sample@LINE
+ \ifx\pgfplots@plot@data@cury\pgfplots@plot@data@first@y
+ % ah - we have the first cell.
+ \pgfplots@loc@tmptrue
+ \fi
+ \fi
+ %
+ \ifpgfplots@loc@tmp
+ \else
+ \pgfmathparse{\pgfplots@plot@data@curx-\pgfplots@plot@data@lastx}%
+ \let\pgfplots@plot@data@hx=\pgfmathresult
+ %
+ \if0\b@pgfplots@should@sample@LINE
+ \pgfmathparse{\pgfplots@plot@data@cury-\pgfplots@plot@data@lasty}%
+ \let\pgfplots@plot@data@hy=\pgfmathresult
+ \fi
+ %
+ \def\pgfplotspatchready{\pgfplotsscanlinecomplete}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{sample in unit cube}{%
+ \pgfmathparse{\pgfplots@plot@data@lastx + \pgfplotspatchclassx*\pgfplots@plot@data@hx}%
+ \let\tikz@plot@var=\pgfmathresult
+ %
+ \if0\b@pgfplots@should@sample@LINE
+ \pgfmathparse{\pgfplots@plot@data@lasty + \pgfplotspatchclassy*\pgfplots@plot@data@hy}%
+ \let\pgfplots@plot@var@y=\pgfmathresult
+ \fi
+ %
+ ##1%
+ %
+ \let\tikz@plot@var=\tikz@plot@var@old
+ \let\pgfplots@plot@var@y=\pgfplots@plot@var@y@old
+ }%
+ \fi
+ }%
+ }%
+}%
+
+\let\pgfplots@backupof@pgfplotxyfile=\pgfplotxyfile
+
+% the following code
+% results finally in
+%
+% set format "%.7e";; set samples <...>; plot ...
+%
+% The windows port of gnuplot doesn't run without the second semicolon
+% - for whatever reason.
+{
+ \catcode`\%=12
+ \catcode`\"=12
+ \catcode`\;=12
+ \xdef\pgfplots@gnuplot@format{set format "%.7e";}
+}
+\def\pgfplots@addplotimpl@g#1#2g{%
+ \pgfplotsutil@ifnextchar r{%
+ \pgfplots@addplotimpl@graphics{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@gnuplot{#1}{#2}%
+ }%
+}%
+
+% |\addplot gnuplot| is an alias to |\addplot function|
+\def\pgfplots@addplotimpl@gnuplot#1#2nuplot{\pgfplots@addplotimpl@function{#1}{#2}unction}%
+
+% \addplot[#1] plot[#2] function[#3] {#4} #5;
+\def\pgfplots@addplotimpl@function#1#2unction{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@function@opt{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@function@opt{#1}{#2}[]%
+ }%
+}%
+\def\pgfplots@addplotimpl@function@opt#1#2[#3]#4#5;{\pgfplots@addplotimpl@function@opt@{#1}{#2}{#3}{#4}{#5}}%
+% \addplot[#1] [#2] function[#3] {#4} #5;
+\def\pgfplots@addplotimpl@function@opt@#1#2#3#4#5{%
+ % FIXME : what about the key search paths if the user changes
+ % them!?
+ \def\pgfplotssurveyphaseinputclass{gnuplot}%
+ \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2,/pgfplots/.cd,#3,/pgfplots/mesh/ordering/x varies}%
+ %
+ \pgfplots@gettikzinternal@keyval{prefix}{tikz@plot@prefix}{\jobname.}%
+ \pgfplots@gettikzinternal@keyval{id}{tikz@plot@id}{pgf-plot}%
+ \pgfplots@gettikzinternal@keyval{raw gnuplot}{iftikz@plot@raw@gnuplot}{\iffalse}%
+ \pgfplots@gettikzinternal@keyval{parametric}{iftikz@plot@parametric}{\iffalse}%
+ %
+ % determine dummy variables:
+ \iftikz@plot@parametric
+ \ifpgfplots@curplot@threedim
+ \pgfkeysgetvalue{/pgfplots/parametric/var 2d}\pgfplots@gnuplot@dummy%
+ \else
+ \pgfkeysgetvalue{/pgfplots/parametric/var 1d}\pgfplots@gnuplot@dummy%
+ \fi
+ \ifx\pgfplots@gnuplot@dummy\pgfutil@empty
+ \else
+ \expandafter\pgfutil@in@\expandafter,\expandafter{\pgfplots@gnuplot@dummy}%
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPa##1,##2\pgfeov{\pgfplotsset{variable={##1},variable y={##2}}}%
+ \else
+ \def\pgfplots@loc@TMPa##1\pgfeov{\pgfplotsset{variable={##1}}}%
+ \fi
+ \expandafter\pgfplots@loc@TMPa\pgfplots@gnuplot@dummy\pgfeov
+ \fi
+ \fi
+ %
+ % prepare domain and samples, normalize dummy variables:
+ \pgfplots@plot@expression@preparekeys
+ %
+ % FIXME: what with 'samples at'!?
+ \edef\pgfplots@plot@filename{\tikz@plot@prefix\tikz@plot@id}%
+ %
+ \def\pgfplots@addplotimpl@gnuplotresult@isthreedim@withtwocoords{0}%
+ %
+ \edef\pgfplots@gnuplotcode{#4}%
+ \ifpgfplots@translategnuplot
+ \def\pgfplots@loc@TMPa{\pgfplotsutilstrreplace{^}{**}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@gnuplotcode}%
+ \let\pgfplots@gnuplotcode=\pgfplotsretval
+ \fi
+ %
+ %
+ \iftikz@plot@raw@gnuplot%
+ \def\pgfplots@plot@data{\pgfplotgnuplot[\pgfplots@plot@filename]{\pgfplots@gnuplot@format;\pgfplots@gnuplotcode}}%
+ \else%
+ % collect logs:
+ \def\pgfplots@gnuplot@logdirs{}%
+ \ifpgfplots@xislinear
+ \else
+ \pgfplots@identify@gnuplot@logbehavior x%
+ \expandafter\def\expandafter\pgfplots@gnuplot@logdirs\expandafter{\pgfplots@gnuplot@logdirs x}%
+ \fi
+ \ifpgfplots@yislinear
+ \else
+ \pgfplots@identify@gnuplot@logbehavior y%
+ \expandafter\def\expandafter\pgfplots@gnuplot@logdirs\expandafter{\pgfplots@gnuplot@logdirs y}%
+ \fi
+ \ifpgfplots@curplot@threedim
+ \ifpgfplots@zislinear
+ \else
+ \pgfplots@identify@gnuplot@logbehavior z%
+ \expandafter\def\expandafter\pgfplots@gnuplot@logdirs\expandafter{\pgfplots@gnuplot@logdirs z}%
+ \fi
+ \fi
+ %
+ \ifpgfplots@curplot@threedim
+ \if1\b@pgfplots@should@sample@LINE
+ \pgfplots@error{Sorry, I do not know how to sample 3D LINE plots with gnuplot... I only know 2D line and 3D mesh. You may want to help the author of pgfplots to improve this feature.}%
+ \fi
+ \fi
+ \def\pgfplots@gnuplot@x{\pgfplots@plot@var@nonmacro}%
+ \def\pgfplots@gnuplot@y{\pgfplots@plot@var@y@nonmacro}%
+ \def\pgfplots@plot@data{\pgfplotgnuplot[\pgfplots@plot@filename]{%
+ \pgfplots@gnuplot@format;
+ set samples \pgfkeysvalueof{/pgfplots/samples}\if0\b@pgfplots@should@sample@LINE, \pgfkeysvalueof{/pgfplots/samples y}\fi;
+ set dummy \pgfplots@gnuplot@x\if0\b@pgfplots@should@sample@LINE,\pgfplots@gnuplot@y\fi;
+ \ifx\pgfplots@gnuplot@logdirs\pgfutil@empty
+ \else
+ set logscale \pgfplots@gnuplot@logdirs\space 2.71828182845905;
+ \fi
+ \iftikz@plot@parametric set parametric;\fi
+ \ifpgfplots@curplot@threedim
+ \if0\b@pgfplots@should@sample@LINE
+ % Samples twodimensionally (a lattice):
+ % and the isosamples thing confuses me.
+ set isosamples \pgfkeysvalueof{/pgfplots/samples}\if0\b@pgfplots@should@sample@LINE, \pgfkeysvalueof{/pgfplots/samples y}\fi;
+ splot [\pgfplots@gnuplot@x=\pgfplots@plot@domain] [\pgfplots@gnuplot@y=\pgfplots@plot@ydomain] \pgfplots@gnuplotcode;%
+ \else
+ % *should* sample a line, but I don't know how.
+ splot [\pgfplots@gnuplot@x=\pgfplots@plot@domain] \pgfplots@gnuplotcode;%
+ \fi
+ \else
+ plot [\pgfplots@gnuplot@x=\pgfplots@plot@domain] \pgfplots@gnuplotcode;%
+ \fi
+ }}%
+ \fi%
+ \def\pgfplotxyfile{\pgfplots@addplotimpl@gnuplotresult{#5}}%
+ \pgfplots@plot@data
+ \let\pgfplotxyfile=\pgfplots@backupof@pgfplotxyfile
+}%
+
+\def\pgfplots@identify@gnuplot@logbehavior#1{%
+ \pgfutil@ifundefined{pgfplots@gnuplot@logscale@writes@log}{%
+ \pgfplots@identify@gnuplot@logbehavior@checkversion%
+ }{}%
+ \if1\pgfplots@gnuplot@logscale@writes@log
+ \csname pgfplots@disablelogfilter@#1true\endcsname
+ \fi
+}%
+\def\pgfplots@identify@gnuplot@logbehavior@checkversion{%
+ \begingroup
+ \pgfplots@shellescape{gnuplot -V >\pgfplots@plot@filename.vrs}%
+ \openin\r@pgfplots@reada=\pgfplots@plot@filename.vrs\relax
+ \ifeof\r@pgfplots@reada
+ \pgfplotswarning{gnuplot -V impossible}\pgfeov
+ \gdef\pgfplots@gnuplot@logscale@writes@log{1}% something doesn't work. set it somehow.
+ \else
+ \read\r@pgfplots@reada to\pgfplots@loc@TMPa
+ \gdef\pgfplots@gnuplot@logscale@writes@log{1}%
+ \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}%
+ \immediate\write-1{Package pgfplots: checking gnuplot -V : `\the\t@pgfplots@toka' (if this fails, set `/pgfplots/gnuplot writes logscale=true|false')}%
+ \expandafter\pgfplots@identify@gnuplot@logbehavior@checkversion@\pgfplots@loc@TMPa 0 0.0 0\relax
+ \if0\pgfplots@gnuplot@logscale@writes@log
+ \immediate\write-1{Package pgfplots: I found gnuplot version >= 4.4. This one doesn't write log() coordinates. I will apply log() manually.}%
+ \else
+ \immediate\write-1{Package pgfplots: I found gnuplot version < 4.4. This one writes log() coordinates. I'll handle it accordingly.}%
+ \fi
+ \closein\r@pgfplots@reada
+ \fi
+ \endgroup
+}%
+\long\def\pgfplots@identify@gnuplot@logbehavior@checkversion@{%
+ \pgfutil@ifnextchar\par{%
+ \pgfplotswarning{gnuplot -V format unknown}\pgfeov%
+ \gdef\pgfplots@gnuplot@logscale@writes@log{1}%
+ \pgfplots@identify@gnuplot@logbehavior@checkversion@@@
+ }{%
+ \pgfplots@identify@gnuplot@logbehavior@checkversion@@
+ }%
+}%
+\long\def\pgfplots@identify@gnuplot@logbehavior@checkversion@@@#1\relax{%
+}%
+\long\def\pgfplots@identify@gnuplot@logbehavior@checkversion@@#1 #2.#3 #4\relax{%
+ % starting with gnuplot 4.4, output files are no longer in
+ % logarithmic scale for log plots.
+ \ifnum#2<4
+ % version 3.X
+ \gdef\pgfplots@gnuplot@logscale@writes@log{1}%
+ \else
+ \ifnum#2>4
+ % version 5.X
+ \gdef\pgfplots@gnuplot@logscale@writes@log{0}%
+ \else
+ \ifnum#3<4
+ % version 4.2 :
+ \gdef\pgfplots@gnuplot@logscale@writes@log{1}%
+ \else
+ % version 4.4 or later :
+ \gdef\pgfplots@gnuplot@logscale@writes@log{0}%
+ \fi
+ \fi
+ \fi
+}%
+
+\def\pgfplots@addplotimpl@gnuplotresult#1#2{%
+ \begingroup
+ \openin\r@pgfplots@reada=#2
+ \ifeof\r@pgfplots@reada
+ \pgfplots@error{Sorry, the gnuplot-result file '#2' could not be found. Maybe you need to enable the shell-escape feature? For pdflatex, this is '>> pdflatex -shell-escape'. You can also invoke '>> gnuplot <file>.gnuplot' manually on the respective gnuplot file.}%
+ \aftergroup\pgfplots@loop@CONTINUEfalse
+ \else
+ \aftergroup\pgfplots@loop@CONTINUEtrue
+ \fi
+ \closein\r@pgfplots@reada
+ \endgroup
+ \ifpgfplots@loop@CONTINUE
+ % Now, invoke 'plot file'.
+ %
+ % I invoke the private '@opt@' method because the semicolon ';'
+ % character may cause problems due to catcode mismatches.
+ % *sigh*.
+ \let\pgfplots@addplotimpl@file@parsesingle@twodim=\pgfplots@addplotimpl@file@parsesingle@twodim@gnuplotformat
+ \let\pgfplots@addplotimpl@file@parsesingle@threedim=\pgfplots@addplotimpl@file@parsesingle@threedim@gnuplotformat
+ \pgfplots@addplotimpl@file@opt@@{}{}{#2}{#1}% this does not invoke the \pgfplots@start@plot@with@behavioroptions method.
+ \else
+ \expandafter\pgfplots@end@plot
+ \fi
+}
+
+% \addplot[#1] plot[#2] shell[#3] {#4} #5;
+\def\pgfplots@addplotimpl@shell#1#2shell{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@shell@opt{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@shell@opt{#1}{#2}[]%
+ }%
+}%
+\def\pgfplots@addplotimpl@shell@opt#1#2[#3]#4#5;{\pgfplots@addplotimpl@shell@opt@{#1}{#2}{#3}{#4}{#5}}%
+% \addplot[#1] [#2] shell[#3] {#4} #5;
+\def\pgfplots@addplotimpl@shell@opt@#1#2#3#4#5{%
+ \def\pgfplotssurveyphaseinputclass{shell}%
+ \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2,/pgfplots/.cd,#3}%
+ \pgfplots@gettikzinternal@keyval{prefix}{tikz@plot@prefix}{\jobname.}%
+ \pgfplots@gettikzinternal@keyval{id}{tikz@plot@id}{pgf-shell}%
+ %
+ \def\pgfplots@plot@filename{\tikz@plot@prefix\tikz@plot@id}%
+ \def\pgfplots@plot@data{\pgfshell[\pgfplots@plot@filename]{#4}\pgfplotxyfile{\pgfplots@plot@filename.out}}%
+ \def\pgfplotxyfile{\pgfplots@addplotimpl@shellresult{#5}}%
+ \pgfplots@plot@data
+ \let\pgfplotxyfile=\pgfplots@backupof@pgfplotxyfile
+}%
+
+\def\pgfplots@addplotimpl@shellresult#1#2{%
+ \begingroup
+ \openin\r@pgfplots@reada=#2
+ \ifeof\r@pgfplots@reada
+ \pgfplots@error{Sorry, the shell-result file '#2' could not be found. Maybe you need to enable the shell-escape feature? For pdflatex, this is '>> pdflatex -shell-escape'. You can also invoke '>> sh <file>.sh > <file>.out' manually on the respective shell file.}%
+ \aftergroup\pgfplots@loop@CONTINUEfalse
+ \else
+ \aftergroup\pgfplots@loop@CONTINUEtrue
+ \fi
+ \closein\r@pgfplots@reada
+ \endgroup
+ \ifpgfplots@loop@CONTINUE
+ % Now, invoke 'plot file'.
+ %
+ % I invoke the private '@opt@' method because the semicolon ';'
+ % character may cause problems due to catcode mismatches.
+ % *sigh*.
+ \pgfplots@addplotimpl@file@opt@@{}{}{#2}{#1}%
+ \else
+ \expandafter\pgfplots@end@plot
+ \fi
+}
+
+% \addplot[#1] [#2] file{#3} #4;
+\def\pgfplots@addplotimpl@file#1#2e{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@file@opt{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@file@opt{#1}{#2}[]%
+ }%
+}
+
+% \addplot[#1] [#2] file[#3] {#4} #5;
+\def\pgfplots@addplotimpl@file@opt#1#2[#3]#4#5;{\pgfplots@addplotimpl@file@opt@{#1}{#2}{#3}{#4}{#5}}%
+\def\pgfplots@addplotimpl@file@opt@#1#2#3#4#5{%
+ % invoke this here - allows to share the 'plot file' impl with
+ % 'plot gnuplot'.
+ \def\pgfplotssurveyphaseinputclass{file}%
+ \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2}%
+ \pgfplots@addplotimpl@file@opt@@{#1,#2}{#3}{#4}{#5}%
+}
+\def\pgfplots@addplotimpl@file@opt@@#1#2#3#4{%
+ \begingroup
+ \def\pgfplots@loc@TMPa{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfqkeys{/pgfplots/plot file}{#2}%
+ \fi
+ \pgfplots@PREPARE@COORD@STREAM{#4}%
+ \pgfplots@addplotimpl@file@streamit{#3}%
+ \endgroup
+}%
+% #1: the file name
+\def\pgfplots@addplotimpl@file@streamit#1{%
+ \pgfplots@coord@stream@start
+ \pgfplotsscanlinelengthinitzero
+ \openin\r@pgfplots@reada=#1
+ \ifeof\r@pgfplots@reada
+ \pgfplots@error{sorry, plot file{#1} could not be opened}%
+ \else
+ \pgfplots@logfileopen{#1}%
+ \let\pgfplots@current@point@error@x@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@x@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@minus=\pgfutil@empty
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \ifpgfplots@curplot@threedim
+ \let\pgfplots@addplotimpl@file@parsesingle=\pgfplots@addplotimpl@file@parsesingle@threedim
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @explicitinput\endcsname
+ \let\pgfplots@addplotimpl@file@parsesingle=\pgfplots@addplotimpl@file@parsesingle@threedim@andmeta
+ \fi
+ \else
+ \let\pgfplots@addplotimpl@file@parsesingle=\pgfplots@addplotimpl@file@parsesingle@twodim
+ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @explicitinput\endcsname
+ \let\pgfplots@addplotimpl@file@parsesingle=\pgfplots@addplotimpl@file@parsesingle@twodim@andmeta
+ \fi
+ \fi
+ \pgfplotstableinstallignorechars%
+ \pgfplots@addplotimpl@file@readall
+ \fi
+ \pgfplotsscanlinelengthcleanup
+ \pgfplots@coord@stream@end
+}%
+\def\pgfplots@addplotimpl@file@readall{%
+ \read\r@pgfplots@reada to\pgfplots@file@LINE
+ \expandafter\pgfplotstableread@checkspecial@line\pgfplots@file@LINE\pgfplotstable@EOI
+ \ifpgfplotstableread@skipline
+ \else
+ \ifpgfplots@plot@file@skipfirst
+ % Silently skip first data row, assuming it is a header.
+ \pgfplots@plot@file@skipfirstfalse
+ \else
+ \pgfplotsscanlinelengthincrease
+ \expandafter\pgfplots@addplotimpl@file@parsesingle\pgfplots@file@LINE 0 0 0 0 0\pgfplots@EOI
+ \fi
+ \fi
+ \ifeof\r@pgfplots@reada
+ \else
+ \expandafter
+ \pgfplots@addplotimpl@file@readall
+ \fi
+}%
+
+\def\pgfplots@gnuplot@unbounded{u}%
+\def\pgfplots@gnuplot@unbounded@handler@jump{jump}%
+\def\pgfplots@gnuplot@handle@unbounded{%
+ \pgfkeysgetvalue{/pgfplots/empty line}\pgfplots@loc@TMPa%
+ \ifx\pgfplots@loc@TMPa\pgfplots@gnuplot@unbounded@handler@jump
+ \pgfplotsplothandlerappendjumpmarker
+ \else
+ \ifpgfplots@curplot@threedim
+ \def\pgfplots@current@point@z{nan}%
+ \else
+ \def\pgfplots@current@point@y{nan}%
+ \fi
+ \pgfplots@coord@stream@coord%
+ \fi
+}
+\def\pgfplots@addplotimpl@file@parsesingle@threedim@gnuplotformat#1 #2 #3 #4 #5\pgfplots@EOI{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+ \def\pgfplots@loc@TMPa{#4}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@gnuplot@unbounded%
+ % a special gnuplot "unbounded" marker
+ \pgfplots@gnuplot@handle@unbounded
+ \else
+ \pgfplots@coord@stream@coord%
+ \fi
+}%
+\def\pgfplots@addplotimpl@file@parsesingle@twodim@gnuplotformat#1 #2 #3 #4\pgfplots@EOI{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@loc@TMPa{#3}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@gnuplot@unbounded
+ % a special gnuplot "unbounded" marker
+ \pgfplots@gnuplot@handle@unbounded
+ \else
+ \pgfplots@coord@stream@coord%
+ \fi
+}%
+\def\pgfplots@addplotimpl@file@parsesingle@threedim#1 #2 #3 #4\pgfplots@EOI{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+ \pgfplots@coord@stream@coord%
+}%
+\def\pgfplots@addplotimpl@file@parsesingle@twodim#1 #2 #3\pgfplots@EOI{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \pgfplots@coord@stream@coord%
+}%
+\def\pgfplots@addplotimpl@file@parsesingle@threedim@andmeta#1 #2 #3 #4 #5\pgfplots@EOI{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+ \def\pgfplots@current@point@meta{#4}%
+ \pgfplots@coord@stream@coord%
+}%
+\def\pgfplots@addplotimpl@file@parsesingle@twodim@andmeta#1 #2 #3 #4\pgfplots@EOI{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@meta{#3}%
+ \pgfplots@coord@stream@coord%
+}%
+
+
+\def\pgfplots@addplotimpl@graphics#1#2raphics{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@graphics@{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@graphics@{#1}{#2}[]%
+ }%
+}%
+% \addplot[#1] plot[#2] graphics[#3] {#4} #5;
+\long\def\pgfplots@addplotimpl@graphics@#1#2[#3]#4#5;{\pgfplots@addplotimpl@graphics@@{#1}{#2}{#3}{#4}{#5}}%
+\long\def\pgfplots@addplotimpl@graphics@@#1#2#3#4#5{%
+ \def\pgfplotssurveyphaseinputclass{graphics}%
+ \pgfplots@start@plot@with@behavioroptions{%
+ /pgfplots/filter discard warning=false,
+ /pgfplots/mesh/rows=2,% allow \addplot[surf] graphics ... --> yields a good legend.
+ /pgfplots/mesh/cols=2,
+ /pgfplots/mesh/check=false,%
+ #1,/pgfplots/.cd,#2,%
+ /pgfplots/plot graphics/@prepare legend,
+ /pgfplots/plot graphics,%
+ /pgfplots/plot graphics/.cd,%
+ #3,%
+ /pgfplots/plot graphics/src={#4},%
+ /tikz/mark=}%
+ \pgfplots@PREPARE@COORD@STREAM{#5}%
+ \pgfplots@coord@stream@start
+ %
+ \pgfkeysgetvalue{/pgfplots/plot graphics/points}{\pgfplots@current@point@points}%
+ \ifx\pgfplots@current@point@points\pgfutil@empty
+ \else
+ \let\pgfplotsplothandlergraphicspointmappoint=\pgfplotsplothandlergraphics@survey@pointmappoint
+ \expandafter\pgfplots@plot@handler@graphics@parsepointmap\expandafter{\pgfplots@current@point@points}%
+ \ifpgfplots@plot@graphics@autoadjustaxis
+ \pgfplotsplothandlergraphicspointmapcomputerequiredview
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \expandafter\pgfplotssetlateoptions\expandafter{\pgfplotsretval}%
+ \fi
+ \fi
+ %
+ \def\pgfplots@addplotimpl@graphics@@error##1{}%
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/plot graphics/xmin}{\pgfplots@current@point@x}%
+ \pgfkeysgetvalue{/pgfplots/plot graphics/ymin}{\pgfplots@current@point@y}%
+ %
+ % these sanity checks do nothing of the 'plot graphics/points' feature has been used:
+ \ifx\pgfplots@current@point@x\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{xmin}\fi
+ \ifx\pgfplots@current@point@y\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{ymin}\fi
+ \ifpgfplots@curplot@threedim
+ \pgfkeysgetvalue{/pgfplots/plot graphics/zmin}{\pgfplots@current@point@z}%
+ \ifx\pgfplots@current@point@z\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{zmin}\fi
+ \fi
+ \pgfplots@coord@stream@coord
+ %
+ \pgfkeysgetvalue{/pgfplots/plot graphics/xmax}{\pgfplots@current@point@x}%
+ \pgfkeysgetvalue{/pgfplots/plot graphics/ymax}{\pgfplots@current@point@y}%
+ \ifx\pgfplots@current@point@x\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{xmax}\fi
+ \ifx\pgfplots@current@point@y\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{ymax}\fi
+ \ifpgfplots@curplot@threedim
+ \pgfkeysgetvalue{/pgfplots/plot graphics/zmax}{\pgfplots@current@point@z}%
+ \ifx\pgfplots@current@point@z\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{zmax}\fi
+ \fi
+ \pgfplots@coord@stream@coord
+ %
+ \pgfplots@coord@stream@end
+}%
+\def\pgfplots@addplotimpl@graphics@@error#1{%
+ \begingroup
+ \pgfplots@error{Sorry, but 'plot graphics' can't determine where to place the graphics file - (at least) the key '#1' is missing. Please verify that you provided all required limits, for example 'plot graphics[xmin=0,xmax=1,ymin=0,ymax=1] {<graphics>}'.}%
+ \endgroup
+}%
+
+
+
+
+% \addplot[#1] table[#2] [from] {<\macro>} #4;
+% or
+% \addplot[#1] table[#2] {<filename>} #4;
+%
+% The distinction between <\macro> and <filename> is done
+% automatically.
+%
+% Input options can be provided in '#2' using
+% - column names,
+% for example '/pgfplots/table/x=firstcol' or just 'x=firstcol'
+%
+% - column indices,
+% for example '/pgfplots/table/x index=3' or just 'x index=3'
+%
+% - expressions involving any of the table's data cells in the
+% currently processed cell,
+% for example '/pgfplots/table/x expr={\columnx * \columny + \thisrow{columnxxx}/2}'
+% During expr, the following (non-exhaustive) list of macros is
+% available:
+% - \columnx, \columny, \columnz, \columnmeta, \columnerrorx,
+% \columnerrory, \columnerrorz
+% Provide access to the cell content which would be used without
+% 'expr'.
+% The first three access the input coordinate columns, \meta the meta column
+% (if any) and the last three the error data (if any).
+%
+% That means it is allowed to provide both, 'x' and 'x expr':
+% 'x expr' can use the (old) value stored in 'x'. the final x
+% coordinate will be that returned of 'x expr'.
+%
+% - \coordindex
+%
+% - \lineno (physical line numbers including comments etc)
+%
+% - \thisrow{<colname>}
+% allows access to any columns.
+%
+% - \getthisrow{<colname>}{<\macro>}
+% this is a fragile command! Don't use it directly inside of
+% a math expression, prefer \thisrow.
+%
+% The FPU will be used to evaluate any expressions.
+%
+% @REMARKS the implementation for '* expr' differs for the '<\macro>'
+% and '<filename>' input types:
+% - for '{<filename>}', only the current row is available.
+% - for '{<\macro>}', the `create on use' framework of the table
+% package is used - with all its features, including comfortable
+% access to the previous and next row and accumulation features.
+\def\pgfplots@addplotimpl@table#1table{%
+ \pgfplotsutil@ifnextchar[{%
+ \pgfplots@addplotimpl@table@getopts{#1}%
+ }{%
+ \pgfplots@addplotimpl@table@getopts{#1}[]%
+ }%
+}%
+
+\def\pgfplots@addplotimpl@table@getopts#1[#2]{%
+ % set options outside of the following group.
+ % They may contain behavior options.
+ \pgfplots@addplotimpl@table@installkeypath
+ \pgfplotstableset{#2}%
+ %
+ \pgfplotsutil@ifnextchar s{%
+ \pgfplots@addplotimpl@table@fromshell{#1}{#2}%
+ }{%
+ \pgfplotsutil@ifnextchar f{%
+ \pgfplots@addplotimpl@table@fromstructure@gobble@space{#1}{#2}%
+ }{%
+ \pgfplots@addplotimpl@table@fromfile@gobble@space{#1}{#2}%
+ }%
+ }%
+}
+
+% this macro simply invokes the "correct" table processing routine.
+% The distinction between 'table from {<\macro>}' and 'table
+% {<filename>}' is deprecated; it is done automatically now.
+%
+% \addplot[#1] table[#2] [from] {#3} #4;
+\def\pgfplots@addplotimpl@table@startprocessing#1#2#3#4{%
+ \pgfplotstable@isloadedtable{#3}{%
+ \pgfplots@addplotimpl@table@fromstructure@{#1}{#2}{#3}{#4}%
+ }{%
+ \pgfplots@addplotimpl@table@fromfile@{#1}{#2}{#3}{#4}%
+ }%
+}%
+
+% \addplot[#1] table[#2] from {#3} #4;
+%
+% #1: arguments to \addplot[...]
+% #2: arguments to table[...] (already processed!)
+% #3: the argument of plot table{...}
+% #4: trailing path arguments after plot table{...}#4;
+\long\def\pgfplots@addplotimpl@table@fromstructure@gobble@space#1#2from{%
+ \pgfplotstablecollectoneargwithpreparecatcodes{%
+ \pgfplots@addplotimpl@table@fromstructure{#1}{#2}from%
+ }%
+}%
+
+\def\pgfplots@addplot@table@fromstructure@preparecolname#1#2#3#4{%
+ \pgfkeysgetvalue{/pgfplots/table/#1}{\pgfplots@loc@TMPa}%
+ %
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfkeysgetvalue{/pgfplots/table/#1 index}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotstablegetcolumnnamebyindex\pgfplots@loc@TMPa\of#2\to\pgfplots@loc@TMPa
+ \fi
+ \fi
+ \let#3=\pgfplots@loc@TMPa
+ %
+ % modify \pgfplots@plot@tbl@{x,y,z,meta} if there are
+ % corresponding '#1 expr' statements:
+ \pgfplots@addplotimpl@table@fromstructure@prepareexpr@for{#1}{#3}{#4}%
+}
+
+% Invokes `#1' if the command is invoked within
+% \addplot table {<\macro>};
+% and `#2' if not.
+\def\pgfplotsifinaddplottablestruct#1#2{%
+ \pgfutil@ifundefined{pgfplots@plot@tbl@meta}{#2}{#1}%
+}%
+
+\long\def\pgfplots@addplotimpl@table@fromstructure#1#2from#3#4;{\pgfplots@addplotimpl@table@startprocessing{#1}{#2}{#3}{#4}}%
+% \addplot[#1] table[#2] from {#3} #4 ;
+\long\def\pgfplots@addplotimpl@table@fromstructure@#1#2#3#4{%
+ \begingroup
+ \def\pgfplotstablename{#3}% store the name of the currently processed table.
+ \pgfplotstablegetscanlinelength{#3}{\pgfplotsscanlinelength}%
+ % FIXME : this thing here has runtime O(N^2) !
+ % I fear it is faster to simply reload the data .... !?
+ %
+ % well, for a lot of columns which are used in different contexts
+ % and few rows, this here IS more efficient.
+ %
+ \pgfplots@addplot@table@fromstructure@preparecolname{x}{#3}\pgfplots@plot@tbl@x\columnx
+ \pgfplots@addplot@table@fromstructure@preparecolname{y}{#3}\pgfplots@plot@tbl@y\columny
+ \ifpgfplots@curplot@threedim
+ \pgfplots@addplot@table@fromstructure@preparecolname{z}{#3}\pgfplots@plot@tbl@z\columnz
+ \fi
+ \pgfplots@addplot@table@fromstructure@preparecolname{meta}{#3}\pgfplots@plot@tbl@meta\columnmeta
+ %
+ %
+ % high level user interface functions:
+ \let\pgfplotstable@coordindex@old=\coordindex
+ \def\coordindex{\pgfplotstablerow}%
+ \def\lineno{\coordindex}% is the same here
+ % The normal implementation of \thisrow is not accessable here. And the
+ % worst is: error messages are impossible either because they are
+ % not executed... we resort to the associated math functions:
+ \def\thisrow##1{thisrow("##1")}% let us hope that math parsing is active!
+ \def\thisrowno##1{thisrowno(##1)}%
+ % this should work.
+ \def\getthisrow##1##2{\pgfplotstablegetelem{\coordindex}{##1}\of{#3}\let##2=\pgfplotsretval}%
+ \def\getthisrowno##1##2{\pgfplotstablegetelem{\coordindex}{[index]##1}\of{#3}\let##2=\pgfplotsretval}%
+ %
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@x}\of#3\to\addplot@tbl@x
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@y}\of#3\to\addplot@tbl@y
+ \ifpgfplots@curplot@threedim
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@z}\of#3\to\addplot@tbl@z
+ \fi
+ %
+ \let\addplot@tbl@meta=\pgfutil@empty
+ \ifx\pgfplots@plot@tbl@meta\pgfutil@empty
+ \else
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@meta}\of#3\to\addplot@tbl@meta
+ \fi
+ %
+ %
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init x{#3}{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init x{#3}{minus}%
+ %
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init y{#3}{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init y{#3}{minus}%
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init z{#3}{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init z{#3}{minus}%
+ \fi
+ %
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load x{#3}{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load x{#3}{minus}%
+ %
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load y{#3}{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load y{#3}{minus}%
+ \ifpgfplots@curplot@threedim
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load z{#3}{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load z{#3}{minus}%
+ \fi
+ %
+ \let\coordindex=\pgfplotstable@coordindex@old
+ %
+ \pgfplots@PREPARE@COORD@STREAM{#4}%
+ \pgfplots@coord@stream@start
+ \pgfutil@loop
+ \pgfplotslistcheckempty\addplot@tbl@x
+ \ifpgfplotslistempty
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ % This here is just for sanity checking: if the 'y' column is
+ % - for whatever reasons - invalid; provide good error
+ % recovery.
+ \pgfplotslistcheckempty\addplot@tbl@y
+ \ifpgfplotslistempty
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ \pgfplots@loop@CONTINUEtrue
+ \fi
+ \fi
+ \ifpgfplots@loop@CONTINUE
+ \pgfplotslistpopfront\addplot@tbl@x\to\pgfplots@current@point@x
+ \pgfplotslistpopfront\addplot@tbl@y\to\pgfplots@current@point@y
+ \ifpgfplots@curplot@threedim
+ \pgfplotslistpopfront\addplot@tbl@z\to\pgfplots@current@point@z
+ \fi
+ \ifx\addplot@tbl@meta\pgfutil@empty
+ \else
+ \pgfplotslistpopfront\addplot@tbl@meta\to\pgfplots@current@point@meta
+ \fi
+ \ifpgfplots@errorbars@enabled
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext x{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext x{minus}%
+ %
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext y{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext y{minus}%
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext z{plus}%
+ \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext z{minus}%
+ \fi
+ \fi
+ \pgfplots@coord@stream@coord
+ \pgfutil@repeat
+ \pgfplots@coord@stream@end
+ \pgfmath@smuggleone\pgfplotsscanlinelength
+ \endgroup
+}
+
+% #1: x, y, or z
+% #2: the table name
+% #3: either "plus" or "minus"
+\def\pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init#1#2#3{%
+ \expandafter\let\csname addplot@tbl@error@#1@#3\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfplots@current@point@error@#1@#3\endcsname=\pgfutil@empty
+ \ifpgfplots@errorbars@enabled
+ % prepare with suitable expansion:
+ \def\pgfplots@loc@TMPa{%
+ \pgfplots@addplot@table@fromstructure@preparecolname{#1 error #3}{#2}}%
+ \edef\pgfplots@loc@TMPb{%
+ \expandafter\noexpand\csname pgfplots@plot@tbl@error@#1@#3\endcsname
+ % FIXME : these macros are UNDOCUMENTED! I suppose they are dead code...
+ \expandafter\noexpand\csname columnerror#1\endcsname
+ }%
+ % execute prepared statement:
+ % = \pgfplots@addplot@table@fromstructure@preparecolname
+ % {x error plus}{#2}{\pgfplots@plot@tbl@error@x@plus}{\columnerrorx}
+ \expandafter\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ %
+ \fi
+}%
+
+% #1: x, y, or z
+% #2: the table name
+% #3: either "plus" or "minus"
+\def\pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load#1#2#3{%
+ \ifpgfplots@errorbars@enabled
+ \expandafter\ifx\csname pgfplots@plot@tbl@error@#1@#3\endcsname\pgfutil@empty
+ % ok, we do not have this error kind.
+ \else
+ % assemble the statement
+ % \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@error@x@plus}\of#2\to\addplot@tbl@error@x@plus
+ % -> but with suitable expansion restrictions.
+ \edef\pgfplots@loc@TMPa{\expandafter\noexpand\csname pgfplots@plot@tbl@error@#1@#3\endcsname}%
+ %
+ \def\pgfplots@loc@TMPb{%
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@loc@TMPa}\of#2\to
+ }%
+ \expandafter\pgfplots@loc@TMPb\csname addplot@tbl@error@#1@#3\endcsname
+ \fi
+ \fi
+}%
+
+% #1: x, y, or z
+% #2: either "plus" or "minus"
+\def\pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext#1#2{%
+ \expandafter\ifx\csname addplot@tbl@error@#1@#2\endcsname\pgfutil@empty
+ \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfutil@empty
+ \else
+ \expandafter\pgfplotslistpopfront\csname addplot@tbl@error@#1@#2\endcsname\to\pgfplots@loc@TMPa
+ \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfplots@loc@TMPa
+ \fi
+}%
+
+% A private helper macro which initialises the '#1 expr' keys for plot
+% table from structure.
+%
+% PRECONDITION:
+% \pgfplots@plot@tbl@#1 contains the column name which would be used
+% if '#1 expr' is empty.
+%
+% POSTCONDITION:
+% \pgfplots@plot@tbl@#1 will be CHANGED to use the 'expr' column (a
+% temporary name).
+% The old value of \pgfplots@plot@tbl@#1 is available as column
+% alias.
+% the high level user interface command '#3' will be set correctly.
+%
+% #1: the key name of the current entity, for example 'x' for
+% '/pgfplots/table/x'
+% #2: the low level column name representing the data which is already
+% defined somehow
+% #3: a high level user interface command
+\def\pgfplots@addplotimpl@table@fromstructure@prepareexpr@for#1#2#3{%
+ % get old column name into a register:
+ \t@pgfplots@tokb=\expandafter{#2}%
+ %
+ % high level user interface command:
+ \edef#3{\noexpand\thisrow{\the\t@pgfplots@tokb}}%
+ %
+ \pgfkeysgetvalue{/pgfplots/table/#1 expr}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ % get expression into register:
+ \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}%
+ %
+ %
+ % assemble pgfkeys statement which expands the names above
+ % just one time:
+ \edef\pgfplots@loc@TMPa{%
+ /pgfplots/table/create on use/#1expr@tempcol/.style={%
+ /pgfplots/table/create col/expr={\the\t@pgfplots@toka}%
+ },%
+ /pgfplots/table/alias/#1/.initial={\the\t@pgfplots@tokb}%
+ }%
+ \expandafter\pgfkeysalso\expandafter{\pgfplots@loc@TMPa}%
+ %
+ % tell `plot table' which column should be used for '#1': the
+ % temporary column.
+ \def#2{#1expr@tempcol}%
+ \fi
+}%
+
+
+% \addplot[#1] table[#2] {#3} #4;
+%
+% This here is the (probably) faster input method from tables.
+%
+% It has linear complexity in the number of rows (as long as the
+% number of rows is less than about 110000).
+%
+% #1: arguments to \addplot[...]
+% #2: arguments to table[...] (already processed!)
+% #3: the argument of plot table{...}
+% #4: trailing path arguments after plot table{...}#4;
+%
+\long\def\pgfplots@addplotimpl@table@fromfile@gobble@space#1#2{%
+ \pgfplotstablecollectoneargwithpreparecatcodes{%
+ \pgfplots@addplotimpl@table@fromfile{#1}{#2}%
+ }%
+}%
+\long\def\pgfplots@addplotimpl@table@fromfile#1#2#3#4;{\pgfplots@addplotimpl@table@startprocessing{#1}{#2}{#3}{#4}}%
+% \addplot[#1] table[#2] {#3} {#4};
+\long\def\pgfplots@addplotimpl@table@fromfile@#1#2#3#4{%
+ \if1\pgfplots@addplotimpl@readcompletely@auto
+ \pgfplots@addplotimpl@table@check@createonuse@for{x}%
+ \pgfplots@addplotimpl@table@check@createonuse@for{y}%
+ \ifpgfplots@curplot@threedim
+ \pgfplots@addplotimpl@table@check@createonuse@for{z}%
+ \fi
+ \pgfplots@addplotimpl@table@check@createonuse@for{x error plus}%
+ \pgfplots@addplotimpl@table@check@createonuse@for{x error minus}%
+ \pgfplots@addplotimpl@table@check@createonuse@for{y error plus}%
+ \pgfplots@addplotimpl@table@check@createonuse@for{y error minus}%
+ \ifpgfplots@curplot@threedim
+ \pgfplots@addplotimpl@table@check@createonuse@for{z error plus}%
+ \pgfplots@addplotimpl@table@check@createonuse@for{z error minus}%
+ \fi
+ \pgfplots@addplotimpl@table@check@createonuse@for{meta}%
+ \fi
+ %
+ \let\pgfplots@addplot@point@meta@description@of@explicit@value=\pgfplots@addplot@point@meta@description@of@explicit@value@table%
+ %
+ \ifpgfplots@addplotimpl@readcompletely
+ \pgfplotstableread{#3}\pgfplots@table
+ \pgfplots@addplotimpl@table@fromstructure@{#1}{}{\pgfplots@table}{#4}%
+ \else
+ \pgfplotsapplistXXglobalnewempty
+ %
+ % these data pointers will be prepared to allow fast access
+ % into the current row while we read rows succesively from
+ % disk.
+ % Note: their initialisation must be postponed until
+ % \pgfplotstableread is running - otherwise, we can't query
+ % pointers into the table. See below.
+ \let\pgfplots@table@PTR@x=\pgfutil@empty
+ \let\pgfplots@table@PTR@y=\pgfutil@empty
+ \let\pgfplots@table@PTR@z=\pgfutil@empty
+ \let\pgfplots@table@PTR@meta=\pgfutil@empty
+ %
+ %
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \let\pgfplots@current@point@z=\pgfutil@empty
+ %
+ % high level user interface functions:
+ \def\lineno{\pgfplotstablelineno}%
+ \def\columnx{\pgfplotstablereadvalueofptr{\pgfplots@table@PTR@x}}%
+ \def\columny{\pgfplotstablereadvalueofptr{\pgfplots@table@PTR@y}}%
+ \def\columnz{\pgfplotstablereadvalueofptr{\pgfplots@table@PTR@z}}%
+ \def\columnmeta{\pgfplotstablereadvalueofptr{\pgfplots@table@PTR@meta}}%
+ %
+ \pgfplots@PREPARE@COORD@STREAM{#4}%
+ \pgfplots@coord@stream@start
+ \ifpgfplots@errorbars@enabled
+ % more fast-access pointers for error data:
+ \let\pgfplots@table@ERRPTR@x=\pgfutil@empty
+ \let\pgfplots@table@ERRPTR@y=\pgfutil@empty
+ \let\pgfplots@table@ERRPTR@z=\pgfutil@empty
+ %
+ % prepare:
+ \let\pgfplots@current@point@error@x@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@x@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@y@minus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@plus=\pgfutil@empty
+ \let\pgfplots@current@point@error@z@minus=\pgfutil@empty
+ %
+ % high level user interface functions:
+ % FIXME : these macros are UNDOCUMENTED! I suppose they are dead code...
+ \def\columnerrorx{\pgfplotstablereadvalueofptr{\pgfplots@table@ERRPTR@x}}%
+ \def\columnerrory{\pgfplotstablereadvalueofptr{\pgfplots@table@ERRPTR@y}}%
+ \def\columnerrorz{\pgfplotstablereadvalueofptr{\pgfplots@table@ERRPTR@z}}%
+ %
+ \pgfplotstableread*{#3} to listener\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL
+ \else
+ \pgfplotstableread*{#3} to listener\pgfplots@addplotimpl@table@fromfile@listener@COLLECTNORMALIZED
+ \fi
+ \pgfplots@coord@stream@end
+ \fi
+}
+\def\pgfplots@addplot@point@meta@description@of@explicit@value@table{%
+ Please add a non-empty value for \string\addplot\space table[meta=...]
+}%
+\def\pgfplots@addplotimpl@table@check@createonuse@for#1{%
+ \pgfkeysgetvalue{/pgfplots/table/#1}\pgfplots@addplotimpl@table@check@createonuse@for@
+ \expandafter\pgfplotstableifiscreateonuse\expandafter{\pgfplots@addplotimpl@table@check@createonuse@for@}{%
+ \pgfplots@addplotimpl@readcompletelytrue
+ }{%
+ }%
+}%
+\def\pgfplots@addplotimpl@table@fromfile@listener@COLLECTNORMALIZED{%
+ \pgfplots@addplotimpl@table@fromfile@listener@
+ \pgfplots@coord@stream@coord
+}
+\def\pgfplots@addplotimpl@table@fromfile@listener@PREPARE{%
+ % this here is only evaluated ONCE.
+ \pgfkeysgetvalue{/pgfplots/table/x}{\pgfplots@plot@tbl@x}%
+ \pgfkeysgetvalue{/pgfplots/table/x index}{\pgfplots@plot@tbl@xindex}%
+ \pgfkeysgetvalue{/pgfplots/table/y}{\pgfplots@plot@tbl@y}%
+ \pgfkeysgetvalue{/pgfplots/table/y index}{\pgfplots@plot@tbl@yindex}%
+ \pgfkeysgetvalue{/pgfplots/table/z}{\pgfplots@plot@tbl@z}%
+ \pgfkeysgetvalue{/pgfplots/table/z index}{\pgfplots@plot@tbl@zindex}%
+ \pgfkeysgetvalue{/pgfplots/table/meta}{\pgfplots@plot@tbl@meta}%
+ \pgfkeysgetvalue{/pgfplots/table/meta index}{\pgfplots@plot@tbl@metaindex}%
+ %
+ \pgfkeysgetvalue{/pgfplots/table/x expr}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@dereferencepointer@and@ASSIGN@x{%
+ \pgfplotstablereadevalptr\pgfplots@table@PTR@x\pgfplots@current@point@x
+ }%
+ \else
+ \def\pgfplots@dereferencepointer@and@ASSIGN@x{%
+ \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/x expr}}%
+ \let\pgfplots@current@point@x=\pgfmathresult
+ }%
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/table/y expr}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@dereferencepointer@and@ASSIGN@y{%
+ \pgfplotstablereadevalptr\pgfplots@table@PTR@y\pgfplots@current@point@y
+ }%
+ \else
+ \def\pgfplots@dereferencepointer@and@ASSIGN@y{%
+ \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/y expr}}%
+ \let\pgfplots@current@point@y=\pgfmathresult
+ }%
+ \fi
+ %
+ \ifx\pgfplots@plot@tbl@x\pgfutil@empty
+ \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@xindex}{\pgfplots@table@PTR@x}%
+ \else
+ \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@x}{\pgfplots@table@PTR@x}%
+ \fi
+ \ifx\pgfplots@plot@tbl@y\pgfutil@empty
+ \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@yindex}{\pgfplots@table@PTR@y}%
+ \else
+ \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@y}{\pgfplots@table@PTR@y}%
+ \fi
+ \ifpgfplots@curplot@threedim
+ %
+ \pgfkeysgetvalue{/pgfplots/table/z expr}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@dereferencepointer@and@ASSIGN@z{%
+ \pgfplotstablereadevalptr\pgfplots@table@PTR@z\pgfplots@current@point@z
+ }%
+ \else
+ \def\pgfplots@dereferencepointer@and@ASSIGN@z{%
+ \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/z expr}}%
+ \let\pgfplots@current@point@z=\pgfmathresult
+ }%
+ \fi
+ \ifx\pgfplots@plot@tbl@z\pgfutil@empty
+ \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@zindex}{\pgfplots@table@PTR@z}%
+ \else
+ \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@z}{\pgfplots@table@PTR@z}%
+ \fi
+ \else
+ \let\pgfplots@dereferencepointer@and@ASSIGN@z=\relax
+ \fi
+ %
+ %
+ \def\pgfplots@dereferencepointer@and@ASSIGN@meta{%
+ \pgfplotstablereadevalptr\pgfplots@table@PTR@meta\pgfplots@current@point@meta
+ }%
+ \ifx\pgfplots@plot@tbl@meta\pgfutil@empty
+ \ifx\pgfplots@plot@tbl@metaindex\pgfutil@empty
+ \let\pgfplots@dereferencepointer@and@ASSIGN@meta=\relax
+ \else
+ \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@metaindex}{\pgfplots@table@PTR@meta}%
+ \fi
+ \else
+ \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@meta}{\pgfplots@table@PTR@meta}%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/meta expr}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \def\pgfplots@dereferencepointer@and@ASSIGN@meta{%
+ \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/meta expr}}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ }%
+ \fi
+ \let\pgfplots@addplotimpl@table@fromfile@listener@PREPARE=\relax
+}%
+\def\pgfplots@addplotimpl@table@fromfile@listener@{%
+ \pgfplots@addplotimpl@table@fromfile@listener@PREPARE
+ \pgfplots@dereferencepointer@and@ASSIGN@x
+ \pgfplots@dereferencepointer@and@ASSIGN@y
+ \pgfplots@dereferencepointer@and@ASSIGN@z
+ \pgfplots@dereferencepointer@and@ASSIGN@meta
+}%
+
+% #1: x, y, or z
+% #2: either "plus" or "minus"
+\def\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@#1#2{%
+ \pgfkeysgetvalue{/pgfplots/table/#1 error #2 index}\pgfplots@plot@tbl@error@index
+ \pgfkeysgetvalue{/pgfplots/table/#1 error #2}\pgfplots@plot@tbl@error
+ %
+ \expandafter\def\csname pgfplots@table@ERRPTR@#1@#2\endcsname{#1 error #2}%
+ %
+ \expandafter\def\csname pgfplots@dereferencepointer@and@ASSIGN@error@#1@#2\endcsname{%
+ \expandafter\pgfplotstablereadevalptr\csname pgfplots@table@ERRPTR@#1@#2\endcsname\pgfmathresult
+ \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfmathresult
+ }%
+ %
+ \ifx\pgfplots@plot@tbl@error\pgfutil@empty
+ \ifx\pgfplots@plot@tbl@error@index\pgfutil@empty
+ \let\pgfplotsretval=\relax
+ \expandafter\let\csname pgfplots@dereferencepointer@and@ASSIGN@error@#1@#2\endcsname=\relax
+ \else
+ \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@error@index}{\pgfplotsretval}%
+ \fi
+ \else
+ \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@error}{\pgfplotsretval}%
+ \fi
+ \expandafter\let\csname pgfplots@table@ERRPTR@#1@#2\endcsname=\pgfplotsretval
+ %
+ \pgfkeysgetvalue{/pgfplots/table/#1 error #2 expr}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\def\csname pgfplots@dereferencepointer@and@ASSIGN@error@#1@#2\endcsname{%
+ \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/#1 error #2 expr}}%
+ \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfmathresult
+ }%
+ \fi
+}%
+
+\def\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare{%
+ % this here is only evaluated ONCE.
+ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ x{plus}%
+ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ x{minus}%
+ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ y{plus}%
+ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ y{minus}%
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ z{plus}%
+ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ z{minus}%
+ \else
+ \let\pgfplots@dereferencepointer@and@ASSIGN@error@z@plus=\relax
+ \let\pgfplots@dereferencepointer@and@ASSIGN@error@z@minus=\relax
+ \fi
+ \let\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare=\relax
+}
+\def\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL{%
+ \pgfplots@addplotimpl@table@fromfile@listener@
+ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare
+ %
+ \pgfplots@dereferencepointer@and@ASSIGN@error@x@plus
+ \pgfplots@dereferencepointer@and@ASSIGN@error@x@minus
+ %
+ \pgfplots@dereferencepointer@and@ASSIGN@error@y@plus
+ \pgfplots@dereferencepointer@and@ASSIGN@error@y@minus
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplots@dereferencepointer@and@ASSIGN@error@z@plus
+ \pgfplots@dereferencepointer@and@ASSIGN@error@z@minus
+ \fi
+ \pgfplots@coord@stream@coord
+}%
+\def\pgfplots@addplotimpl@table@installkeypath{%
+ \pgfkeysdef{/pgfplots/table/.unknown}{%
+ \let\pgfplots@table@curkeyname=\pgfkeyscurrentname
+ \pgfqkeys{/pgfplots}{\pgfplots@table@curkeyname=##1}%
+ }%
+}%
+
+% \addplot[#1] table[#2] shell{#3} #4;
+%
+% #1: arguments to \addplot[...]
+% #2: arguments to table[...]
+% #3: the argument of plot table shell{...}
+% #4: trailing path arguments after plot table shell{...}#4;
+\long\def\pgfplots@addplotimpl@table@fromshell#1#2shell#3#4;{%
+ \pgfplots@gettikzinternal@keyval{prefix}{tikz@plot@prefix}{\jobname.}%
+ \pgfplots@gettikzinternal@keyval{id}{tikz@plot@id}{pgf-shell}%
+ %
+ \def\pgfplots@plot@filename{\tikz@plot@prefix\tikz@plot@id}%
+ \pgfshell[\pgfplots@plot@filename]{#3}\pgfplots@addplotimpl@table@fromfile{#1}{#2}{\pgfplots@plot@filename.out}#4;%
+}%
+
+% This is a backwards-compatibility method to ensure that
+% \axis[ybar]
+% and
+% \addplot[ybar]
+% work as documented.
+%
+% The problem: earlier versions used /pgfplots/ybar for the global
+% setting and /tikz/ybar for the local one. Now, both contexts yield
+% /pgfplots/ybar in contradiction to the manual.
+%
+% So, this macro install special handlers to restore the old setting.
+\def\pgfplots@install@local@bar@handlers{%
+ \pgfkeysgetvalue{/pgfplots/xbar/.@cmd}\pgfplotskeys@orig@xbar
+ \pgfkeysgetvalue{/pgfplots/ybar/.@cmd}\pgfplotskeys@orig@ybar
+ \pgfkeysgetvalue{/pgfplots/xbar interval/.@cmd}\pgfplotskeys@orig@xbari
+ \pgfkeysgetvalue{/pgfplots/ybar interval/.@cmd}\pgfplotskeys@orig@ybari
+ \pgfkeysdef{/pgfplots/xbar}{%
+ \ifpgfkeysaddeddefaultpath
+ \pgfkeysalso{/tikz/xbar}%
+ \else
+ \pgfplotskeys@orig@xbar##1\pgfeov
+ \fi
+ }%
+ \pgfkeysdef{/pgfplots/ybar}{%
+ \ifpgfkeysaddeddefaultpath
+ \pgfkeysalso{/tikz/ybar}%
+ \else
+ \pgfplotskeys@orig@ybar##1\pgfeov
+ \fi
+ }%
+ \pgfkeysdef{/pgfplots/xbar interval}{%
+ \ifpgfkeysaddeddefaultpath
+ \pgfkeysalso{/tikz/xbar interval}%
+ \else
+ \pgfplotskeys@orig@xbari##1\pgfeov
+ \fi
+ }%
+ \pgfkeysdef{/pgfplots/ybar interval}{%
+ \ifpgfkeysaddeddefaultpath
+ \pgfkeysalso{/tikz/ybar interval}%
+ \else
+ \pgfplotskeys@orig@ybari##1\pgfeov
+ \fi
+ }%
+}%
+
+\def\pgfplots@end@plot{%
+ \ifpgfplots@curplot@isirrelevant
+ \else
+ \pgfplots@countplots@advance
+ \fi
+ \pgfkeysvalueof{/pgfplots/execute at end plot@@}%
+ \pgfkeysvalueof{/pgfplots/execute at end plot}%
+ \endgroup%<-- close the \begingroup of \pgfplots@addplotimpl@plot@withoptions
+}
+
+% \numplotsofactualtype
+% Expands to the number of plots which have been seen in the current
+% axis and which have the same type as the actual plot handler.
+%
+% See also \plotnumofactualtype
+\def\pgfplots@numplotsofactualtype{%
+ \pgfutil@ifundefined{pgfplotssurveyphase@setactiveplothandlers@\pgfplotsplothandlername}{%
+ 0%
+ }{%
+ \csname c@pgfplots@numplotsofactualtype@\pgfplotsplothandlername\endcsname
+ }%
+}%
+% use this only inside of \addplot or during the visualization phase
+% of a plot.
+\def\pgfplots@numplotsofactualtype@duringplot{%
+ \pgfutil@ifundefined{pgfplotssurveyphase@setactiveplothandlers@\pgfplotsplothandlername@actual}{%
+ 0%
+ }{%
+ \csname c@pgfplots@numplotsofactualtype@\pgfplotsplothandlername@actual\endcsname
+ }%
+}%
+%
+%
+\def\pgfplots@countplots@init{%
+%
+ %
+ \pgfplotssurveyphase@setactiveplothandlers
+ %
+ \def\plotnum{\the\pgfplots@numplots}%
+ \let\numplotsofactualtype=\pgfplots@numplotsofactualtype@duringplot
+ %
+ % Store this name during the \addplot command. Thus, even if the
+ % plot handler changes, we will keep this one.
+ \edef\pgfplotsplothandlername@actual{\pgfplotsplothandlername}%
+ %
+ \pgfutil@ifundefined{pgfplotssurveyphase@setactiveplothandlers@\pgfplotsplothandlername@actual}{%
+ % oh. This is the first time \pgfplotsplothandlername was used
+ % in this axis. Set its counter to 0 and remember that it has
+ % been initialised.
+ \expandafter\xdef\csname c@pgfplots@numplotsofactualtype@\pgfplotsplothandlername@actual\endcsname{0}%
+ \t@pgfplots@toka=\expandafter{\pgfplotssurveyphase@setactiveplothandlers}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsplothandlername@actual}%
+ \xdef\pgfplotssurveyphase@setactiveplothandlers{%
+ \the\t@pgfplots@toka
+ \noexpand\expandafter\noexpand\def\noexpand\csname pgfplotssurveyphase@setactiveplothandlers@\the\t@pgfplots@tokb\noexpand\endcsname{1}%
+ }%
+ \expandafter\def\csname pgfplotssurveyphase@setactiveplothandlers@\the\t@pgfplots@tokb\endcsname{1}%
+ }{%
+ % ok. do nothing.
+ }%
+ %
+}%
+\def\pgfplots@countplots@advance{%
+ \global\advance\pgfplots@numplots by1\relax%
+ %
+ \expandafter\pgfplotsutil@advancestringcounter@global\csname c@pgfplots@numplotsofactualtype@\pgfplotsplothandlername@actual\endcsname
+}%
+
+% \addplot[#1] [#2] {#3} #4;
+\long\def\pgfplots@addplotimpl@coordinates#1#2plot coordinates#3#4;{\pgfplots@addplotimpl@coordinates@{#1}{#2}{#3}{#4}}%
+% \addplot[#1] [#2] coordinates {#3} #4;
+\long\def\pgfplots@addplotimpl@coordinates@#1#2#3#4{%
+ \def\pgfplotssurveyphaseinputclass{coordinates}%
+ \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2}%
+ \pgfplots@PREPARE@COORD@STREAM{#4}%
+ \ifpgfplots@curplot@threedim
+ \let\pgfplots@addplot@point@meta@description@of@explicit@value=\pgfplots@addplot@point@meta@description@of@explicit@value@coordinates@threedim
+ \pgfplots@coord@stream@foreach@threedim{#3}%
+ \else
+ \let\pgfplots@addplot@point@meta@description@of@explicit@value=\pgfplots@addplot@point@meta@description@of@explicit@value@coordinates@twodim
+ \pgfplots@coord@stream@foreach{#3}%
+ \fi
+}%
+
+\def\pgfplots@addplot@point@meta@description@of@explicit@value@coordinates@twodim{%
+ Please add suffixes for every coordinate in order to specify explicit point meta. The suffixes must have the form '(x,y) [meta]'
+}%
+\def\pgfplots@addplot@point@meta@description@of@explicit@value@coordinates@threedim{%
+ Please add suffixes for every coordinate in order to specify explicit point meta. The suffixes must have the form '(x,y,z) [meta]'
+}%
+
+{
+ % A block which handles active semicolons.
+ %
+ % ATTENTION: this block does only work if
+ % \pgfplots@addplotimpl.... changes are reflected here!
+ %
+ \catcode`\;=\active
+ \globaldefs=1
+ % 'AS' == 'active semicolon'
+ % 'IS' == 'inactive semicolon'
+ \let\pgfplots@gobble@until@semicolon@IS=\pgfplots@gobble@until@semicolon
+ \let\pgfplots@addplotimpl@expression@IS=\pgfplots@addplotimpl@expression
+ \let\pgfplots@addplotimpl@expression@curly@IS=\pgfplots@addplotimpl@expression@curly
+ \let\pgfplots@addplotimpl@function@opt@IS=\pgfplots@addplotimpl@function@opt
+ \let\pgfplots@addplotimpl@file@opt@IS=\pgfplots@addplotimpl@file@opt
+ \let\pgfplots@addplotimpl@fillbetween@opt@IS=\pgfplots@addplotimpl@fillbetween@opt
+ \let\pgfplots@addplotimpl@table@fromstructure@IS=\pgfplots@addplotimpl@table@fromstructure
+ \let\pgfplots@addplotimpl@table@fromfile@IS=\pgfplots@addplotimpl@table@fromfile
+ \let\pgfplots@addplotimpl@graphics@IS=\pgfplots@addplotimpl@graphics@
+ \let\pgfplots@addplotimpl@coordinates@IS=\pgfplots@addplotimpl@coordinates
+ %
+ \def\pgfplots@gobble@until@semicolon@AS#1;{}
+ \long\def\pgfplots@addplotimpl@expression@AS#1#2(#3,#4)#5;{\pgfplots@addplotimpl@expression@{#1}{#2}{#3}{#4}{#5}}%
+ \long\def\pgfplots@addplotimpl@expression@curly@AS#1#2#3#4;{\pgfplots@addplotimpl@expression@curly@{#1}{#2}{#3}{#4}}%
+ \def\pgfplots@addplotimpl@function@opt@AS#1#2[#3]#4#5;{\pgfplots@addplotimpl@function@opt@{#1}{#2}{#3}{#4}{#5}}%
+ \def\pgfplots@addplotimpl@file@opt@AS#1#2[#3]#4#5;{\pgfplots@addplotimpl@file@opt@{#1}{#2}{#3}{#4}{#5}}%
+ \long\def\pgfplots@addplotimpl@fillbetween@opt@AS#1#2[#3]#4;{\pgfplots@addplotimpl@fillbetween@opt@{#1}{#2}{#3}{#4}}%
+ \long\def\pgfplots@addplotimpl@table@fromstructure@AS#1#2from#3#4;{\pgfplots@addplotimpl@table@startprocessing{#1}{#2}{#3}{#4}}%
+ \long\def\pgfplots@addplotimpl@table@fromfile@AS#1#2#3#4;{\pgfplots@addplotimpl@table@startprocessing{#1}{#2}{#3}{#4}}%
+ \long\def\pgfplots@addplotimpl@coordinates@AS#1#2plot coordinates#3#4;{\pgfplots@addplotimpl@coordinates@{#1}{#2}{#3}{#4}}%
+ \long\def\pgfplots@addplotimpl@graphics@AS#1#2[#3]#4#5;{\pgfplots@addplotimpl@graphics@@{#1}{#2}{#3}{#4}{#5}}%
+ %
+ % Checks whether ';' is an active character and, if that is the
+ % case, modifies all public macros for it.
+ \pgfplots@appendto@activesemicolon@switcher{%
+ \let\pgfplots@gobble@until@semicolon=\pgfplots@gobble@until@semicolon@AS
+ \let\pgfplots@addplotimpl@expression=\pgfplots@addplotimpl@expression@AS
+ \let\pgfplots@addplotimpl@expression@curly=\pgfplots@addplotimpl@expression@curly@AS
+ \let\pgfplots@addplotimpl@function@opt=\pgfplots@addplotimpl@function@opt@AS
+ \let\pgfplots@addplotimpl@file@opt=\pgfplots@addplotimpl@file@opt@AS
+ \let\pgfplots@addplotimpl@fillbetween@opt=\pgfplots@addplotimpl@fillbetween@opt@AS
+ \let\pgfplots@addplotimpl@table@fromstructure=\pgfplots@addplotimpl@table@fromstructure@AS
+ \let\pgfplots@addplotimpl@table@fromfile=\pgfplots@addplotimpl@table@fromfile@AS
+ \let\pgfplots@addplotimpl@coordinates=\pgfplots@addplotimpl@coordinates@AS
+ \let\pgfplots@addplotimpl@graphics@=\pgfplots@addplotimpl@graphics@AS
+ }%
+}
+
+\newif\ifpgfplots@update@limits@for@one@point@ISCLIPPED
+\def\pgfplots@math@ONE{1.0}%
+
+\def\pgfplots@invoke@prefilter{%
+ \pgfkeysvalueof{/pgfplots/pre filter/.@cmd}\pgfeov%
+}%
+\def\pgfplots@invoke@filter#1#2{%
+ \pgfkeysvalueof{/pgfplots/#2 filter/.@cmd}#1\pgfeov%
+}%
+\def\pgfplots@invoke@filter@xyz{%
+ \pgfkeysgetvalue{/pgfplots/filter point/.@cmd}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key
+ \else
+ \pgfkeyslet{/data point/x}\pgfplots@current@point@x
+ \pgfkeyslet{/data point/y}\pgfplots@current@point@y
+ \pgfkeyslet{/data point/z}\pgfplots@current@point@z
+ \pgfplots@loc@TMPa\pgfeov%
+ \pgfkeysgetvalue{/data point/x}\pgfplots@current@point@x
+ \pgfkeysgetvalue{/data point/y}\pgfplots@current@point@y
+ \pgfkeysgetvalue{/data point/z}\pgfplots@current@point@z
+ \fi%
+}%
+
+% #1 the target which will contain the filter
+% #2 a math expression.
+\def\pgfplots@install@filter@expression#1#2{%
+ \pgfkeysdef{/pgfplots/#1}{%
+ % DO NOT MODIFY THIS VALUE without also modifying
+ % \pgfplots@ifisfilterexpression!
+ \pgfplots@filter@expression{#1}%
+ }%
+ %
+ % remember for lua backend:
+ \pgfkeyssetvalue{/pgfplots/#1/@expressionvalue}{#2}%
+}%
+% #1 the target which will contain the filter
+% #2 a math expression.
+\def\pgfplots@install@filter@expression@append#1#2{%
+ \pgfkeysgetvalue{/pgfplots/#1/.@cmd}\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key
+ % ok, this is the first filter. Make sure it can also be
+ % processed by the lua backend
+ \pgfplots@install@filter@expression{#1}{#2}%
+ \else
+ % there is a subtle difference to /.expression: this here CANNOT
+ % be processed by the lua backend!
+ \pgfkeysalso{/pgfplots/#1/.append code={\pgfplots@filter@expression@{#1}{#2}}}%
+ \fi
+}%
+
+% Executes #2 if the filter key was defined by
+% \pgfplots@install@filter@expression.
+%
+% #1 the target which will contain the filter (like 'x filter')
+% #2: true code
+% #3: false code
+\def\pgfplots@ifisfilterexpression#1#2#3{%
+ \pgfkeysgetvalue{/pgfplots/#1/.@cmd}\pgfplots@loc@TMPc
+ \long\def\pgfplots@loc@TMPd##1\pgfeov{\pgfplots@filter@expression{#1}}%
+ \ifx\pgfplots@loc@TMPc\pgfplots@loc@TMPd
+ #2\relax
+ \else
+ #3\relax
+ \fi
+}%
+
+% #1 the key name (example: 'x filter')
+\def\pgfplots@filter@expression#1{%
+ \pgfplots@filter@expression@{#1}{\pgfkeysvalueof{/pgfplots/#1/@expressionvalue}}%
+}%
+% #1 the key name (example: 'x filter')
+% #2 the expression
+\def\pgfplots@filter@expression@#1#2{%
+ \begingroup
+ \pgfkeys{/pgf/fpu=true,%
+ /pgf/fpu/output format=float,%
+ }%
+ \pgfmathparse{#2}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% this is a convenience macro to save storage in the long coordinate
+% lists.
+\def\pgfplots@stream#1#2{\pgfplotstreampoint{\pgfqpoint{#1}{#2}}}
+\def\pgfplots@stream@#1#2#3{\def\pgfplots@current@point@coordindex{#1}\pgfplots@stream{#2}{#3}}
+\def\pgfplots@stream@withmeta#1#2#3{\def\pgfplots@current@point@meta{#3}\pgfplotstreampoint{\pgfqpoint{#1}{#2}}}
+\def\pgfplots@stream@withmeta@#1#2#3#4{\def\pgfplots@current@point@coordindex{#1}\pgfplots@stream@withmeta{#2}{#3}{#4}}
+
+\def\pgfplots@stream@decode@and@apply#1#2#3#4{%
+ \def\pgfplots@current@point@coordindex{#1}%
+ \pgfplotsaxisdeserializedatapointfrom@private{#2}%
+ \pgfplotstreampoint{\pgfqpoint{#3}{#4}}%
+}
+
+% Takes a sequence of PREPARED coordinates which are given in floating
+% point representation and applies the data scaling trafo (if
+% necessary).
+%
+% Any coordinate will be plotted with the selected PGF plot handler.
+%
+% This stream is designed to be done at the end of an axis.
+% See \pgfplots@coord@stream@finalize@storedcoords@START
+%
+\def\pgfplots@coord@stream@INIT@finalize@storedcoords{%
+ %
+ % Init the plot handlers:
+ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler
+ \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}%
+ %
+ \ifpgfplots@threedim
+ \pgfplots@apply@zbuffer
+ \fi
+ %
+ \pgfplots@perpointmeta@preparetrafo
+ %
+ \ifpgfplots@stackedmode
+ \pgfplots@stacked@visphase@beginplot
+ \fi
+ \ifpgfplots@errorbars@enabled
+ \pgfplots@errorbars@visphase@begin
+ \fi
+ \pgfplots@prepare@visualization@dependencies
+ %
+ \def\pgfplots@loc@TMPa{0}% <-- if (collectmark positions)
+ \ifpgfplots@scatterplotenabled
+ \def\pgfplots@loc@TMPa{1}% collect mark positions even if 'mark=none'! scatter might not even use markers.
+ \fi
+ \ifx\tikz@plot@mark\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ %
+ % OK, initialize the plot handler.
+ \pgfplotsresetplothandler
+ \pgfplots@basiclevel@plothandler
+ \expandafter\pgfplotsplothandlerdeserializestatefrom\expandafter{\pgfplots@serialized@state@plothandler}%
+ %
+ \pgfplots@LUA@visualization@of@current@plot
+ %
+ \pgfplotstreamstart
+ %
+ % Now, set up coordinate streams.
+ \def\pgfplots@coord@stream@start@{%
+ \let\pgfplots@data@scaletrafo@result=\pgfutil@empty
+ \c@pgfplots@coordindex=0
+ }%
+ \def\pgfplots@coord@stream@end@{%
+ \ifpgfplots@stackedmode
+ \pgfplots@stacked@visphase@endplot
+ \fi
+ \ifpgfplots@errorbars@enabled
+ \pgfplots@errorbars@visphase@end
+ \fi
+ \pgfplots@addplot@get@named@startendpoints@command\pgfplots@loc@TMPa
+ \pgfplots@loc@TMPa
+ \pgfplotstreamend
+ }%
+ \begingroup
+ \let\E=\noexpand
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \pgfplots@coord@stream@INIT@finalize@storedcoords@prepare@scaletrafomacro
+ %
+ % Will be inserted in one of two possible places below (to collect
+ % marker positions)
+ % This finalize command maps the logical coordinate into PGF's
+ % point space. Furthermore, it collects marker coordinates
+ % (properly clipped by position) if markers are required (see
+ % above).
+ %
+ % It is prepared here to eliminate if's.
+ \gdef\pgfplots@coord@stream@finalize@currentpt{%
+ %
+ % NOTE: this here INVALIDATES \pgfplotlastpoint. However, we assign a correct value
+ % for that macro after all coordinates have been assigned - and we do it in a way
+ % which respects the special coordinates of 'patch plots'.
+ %
+ \pgfplotstreampoint{}% it will simply take \pgf@x and \pgf@y!
+ %
+ \advance\c@pgfplots@coordindex by1
+ }%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \endgroup
+%
+%\message{Prepared macro \string \pgfplotsaxisvisphasetransformcoordinate {\meaning\pgfplotsaxisvisphasetransformcoordinate}}%
+%\message{Prepared macro \string \pgfplots@coord@stream@finalize@currentpt {\meaning\pgfplots@coord@stream@finalize@currentpt}}%
+ \if1\b@pgfplots@LUA@visualization@enabled
+ \def\pgfplots@coord@stream@coord@{%
+ \ifx\pgfplots@current@point@x\pgfutil@empty% this implements `unbounded coords=jump', for example
+ \pgfplotsplothandlervisualizejump
+ \else
+ \pgfplotscoordmath{x}{tofixed}{\pgfplots@current@point@x}\let\pgfplots@current@point@x=\pgfmathresult
+ \pgfplotscoordmath{y}{tofixed}{\pgfplots@current@point@y}\let\pgfplots@current@point@y=\pgfmathresult
+ \ifpgfplots@curplot@threedim
+ \pgfplotscoordmath{z}{tofixed}{\pgfplots@current@point@z}\let\pgfplots@current@point@z=\pgfmathresult
+ \fi
+ % no need to call this here -- we got them from LUA:
+ % \pgfplotsaxis@toPGF@coords
+ \pgfplots@coord@stream@finalize@currentpt
+ \fi
+ }%
+ \else
+ \def\pgfplots@coord@stream@coord@{%
+ \ifpgfplots@stackedmode
+ \pgfplots@stacked@visphase@stream@coord@
+ \fi
+ \ifx\pgfplots@current@point@x\pgfutil@empty% this implements `unbounded coords=jump', for example
+ \pgfplotsplothandlervisualizejump
+ \else
+ \pgfplotsaxisvisphasegetpoint
+ \pgfplots@coord@stream@finalize@currentpt
+ \fi
+ }%
+ \fi
+}
+
+\def\pgfplots@LUA@visualization@init{%
+ \ifpgfplots@LUA@backend@supported
+ \edef\pgfplots@loc@TMPa{%
+ \pgfplotsutil@directlua{pgfplots.texVisualizationInit(\pgfplots@LUA@backend@plotnum, \ifpgfplots@curplot@threedim true\else false\fi)}%
+ }%
+ \if1\pgfplots@loc@TMPa
+ \pgfplots@log{\pgfplots@LUA@loglevel@debug}{lua backend=true: Activating partial LUA backend for visualization of plot \plotnum\space (lua: \pgfplots@LUA@backend@plotnum).}%
+ \else
+ \pgfplots@LUA@backend@supportedfalse
+ \fi
+ \fi
+}%
+
+% Takes the current point (defined by a set of macros) as input and defines \pgf@x and \pgf@y
+% as the output point. It also defines
+% \pgfplots@current@point@x and its variants to contain the
+% transformed canvas coords (those which can be given to
+% \pgfplotsqpointxyz).
+%
+\def\pgfplotsaxisvisphasegetpoint{%
+ \pgfplotsaxisvisphasetransformcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z%
+ \pgfplotsaxisvisphasepreparedatapoint
+ \pgfplotsaxis@toPGF@coords
+}%
+
+\def\pgfplotsaxis@toPGF@coords{%
+ \ifpgfplots@curplot@threedim
+ \pgfplotsqpointxyz{\pgfplots@current@point@x}{\pgfplots@current@point@y}{\pgfplots@current@point@z}%
+ \else
+ \pgfplotsqpointxy{\pgfplots@current@point@x}{\pgfplots@current@point@y}%
+ \fi
+}%
+
+% A command which returns high-level (logical) coordinates into the keys
+% /data point/x
+% /data point/y
+% /data point/z
+% /data point/meta
+% /data point/index
+%
+% The command has two modes:
+%
+% 1. without arguments. In this case, it reads the "current" point
+% from the plot handler.
+%
+% 2. with an argument in curly braces. In this case, it expects one of
+% the following:
+% a) a \pgfpoint instruction (i.e. some code which assigns \pgf@x and
+% \pgf@y) and returns the associated logical (high-level) coordinates.
+% b) a TikZ point starting with '('.
+%
+% Examples:
+% * \pgfplotspointgetcoordinates
+% -> useful for nodes near coords
+% * \pgfplotspointgetcoordinates{\pgfpoint{200pt}{100pt}}
+% * \pgfplotspointgetcoordinates{(5,3)}
+%
+%
+% This works for 2D axes only.
+%
+\def\pgfplotspointgetcoordinates{%
+ \pgfutil@ifnextchar\bgroup{%
+ \pgfplotspointgetcoordinates@frompgfpoint
+ }{%
+ \pgfplotspointgetcoordinates@currentpoint
+ }%
+}%
+\def\pgfplotspointgetcoordinates@frompgfpoint#1{%
+ \pgfplotspointgetnormalizedcoordinates{#1}%
+ \pgfplotspointgetcoordinatesfromnormalized
+}%
+\def\pgfplotspointgetcoordinates@currentpoint{%
+ \pgfplotspointgetnormalizedcoordinates
+ \pgfplotspointgetcoordinatesfromnormalized
+}%
+
+\def\pgfplotspointgetnormalizedcoordinates@@@x{undefined}
+\def\pgfplotspointgetnormalizedcoordinates@@@y{undefined}
+\def\pgfplotspointgetnormalizedcoordinates@@@z{undefined}
+\let\pgfplotspointgetnormalizedcoordinates@@@index=\pgfutil@empty
+\let\pgfplotspointgetnormalizedcoordinates@@@meta=\pgfutil@empty
+
+% PRECONDITION: \pgfplots@current@point@x and its variants is given in
+% TRANSFORMED format, i.e. we assume that we are in the visualization
+% phase after the coordinates have been prepared.
+% POSTCONDITION: the untransformed #1 coordinate is assigned to
+% \pgfplotsretval
+\def\pgfplotspointgetnormalizedcoordinates@#1{%
+ % XXX : this is slower than it used to be - in 1.11, I simply
+ % remembered 'x untransformed'! I switched it to this lazy
+ % computation due to the LUA backend in which case remembering it
+ % leads to extensive (=expensive?) communication between lua and
+ % TeX. Does it hurt here? Scatter plots compute this stuff...
+ \expandafter\let\expandafter\pgfplotsretval\csname pgfplotspointgetnormalizedcoordinates@@@#1\endcsname
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{#1}{datascaletrafo inverse}{\pgfplotsretval}%
+ \let\pgfplotsretval=\pgfmathresult
+ }{}%
+ \fi
+}%
+
+% Same as \pgfplotspointgetcoordinates, but the resulting values are
+% for use in 'normalized axis cs'.
+\def\pgfplotspointgetnormalizedcoordinates{%
+ \pgfutil@ifnextchar\bgroup{%
+ \pgfplotspointgetnormalizedcoordinates@frompgfpoint
+ }{%
+ \pgfplotspointgetnormalizedcoordinates@currentpoint
+ }%
+}
+\def\pgfplotspointgetnormalizedcoordinates@frompgfpoint#1{%
+ \pgfplotspointgetnormalizedcoordinates@frompgfpoint@#1\pgfplots@EOI
+}
+\def\pgfplotspointgetnormalizedcoordinates@frompgfpoint@{%
+ \pgfutil@ifnextchar({\pgfplotspointgetnormalizedcoordinates@frompgfpoint@tikz}{\pgfplotspointgetnormalizedcoordinates@frompgfpoint@@}%
+}%
+\def\pgfplotspointgetnormalizedcoordinates@frompgfpoint@tikz#1\pgfplots@EOI{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \def\pgfplots@loc@TMPb{(.)}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfplotspointgetnormalizedcoordinates@frompgfpoint@@\tikz@last@position\pgfplots@EOI
+ \else
+ \tikz@scan@one@point\pgfplotspointgetnormalizedcoordinates@frompgfpoint@@@#1\relax
+ \fi
+}%
+\def\pgfplotspointgetnormalizedcoordinates@frompgfpoint@@@#1{%
+ \pgfplotspointgetnormalizedcoordinates@frompgfpoint@@#1\pgfplots@EOI
+}
+\def\pgfplotspointgetnormalizedcoordinates@frompgfpoint@@#1\pgfplots@EOI{%
+ \pgf@process{#1}%
+ \pgfplotsconvertunittocoordinate{x}{\pgf@x}%
+ \let\pgfplotspointgetnormalizedcoordinates@@@x=\pgfmathresult
+ \pgfplotsconvertunittocoordinate{y}{\pgf@y}%
+ \let\pgfplotspointgetnormalizedcoordinates@@@y=\pgfmathresult
+ \let\pgfplotspointgetnormalizedcoordinates@@@z=\pgfutil@empty
+ \let\pgfplotspointgetnormalizedcoordinates@@@index=\pgfutil@empty
+ \let\pgfplotspointgetnormalizedcoordinates@@@meta=\pgfutil@empty
+ %
+ \pgfplotspointgetnormalizedcoordinates@internal%
+}%
+
+\def\pgfplotspointgetnormalizedcoordinates@currentpoint{%
+ \let\pgfplotspointgetnormalizedcoordinates@@@x=\pgfplots@current@point@x
+ \let\pgfplotspointgetnormalizedcoordinates@@@y=\pgfplots@current@point@y
+ \let\pgfplotspointgetnormalizedcoordinates@@@z=\pgfplots@current@point@z
+ \let\pgfplotspointgetnormalizedcoordinates@@@meta=\pgfplots@current@point@meta
+ \let\pgfplotspointgetnormalizedcoordinates@@@index=\pgfplots@current@point@coordindex
+ \pgfplotspointgetnormalizedcoordinates@internal
+}
+\def\pgfplotspointgetnormalizedcoordinates@internal{%
+ \pgfplotspointgetnormalizedcoordinates@ x%
+ \pgfkeyslet{/data point/x}\pgfplotsretval
+ %
+ \pgfplotspointgetnormalizedcoordinates@ y%
+ \pgfkeyslet{/data point/y}\pgfplotsretval
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplotspointgetnormalizedcoordinates@ z%
+ \pgfkeyslet{/data point/z}\pgfplotsretval
+ \else
+ \pgfkeyslet{/data point/z}\pgfutil@empty
+ \fi
+ %
+ \pgfkeyslet{/data point/meta}\pgfplotspointgetnormalizedcoordinates@@@meta
+ \edef\pgfplots@loc@TMPa{\pgfplotspointgetnormalizedcoordinates@@@index}%
+ \pgfkeyslet{/data point/index}\pgfplots@loc@TMPa
+}%
+
+% Assumes that we are given normalized coordinates (i.e. those for use
+% in 'normalized axis cs') and transforms them into those which are
+% for use in 'axis cs'.
+%
+% Accepts an optional argument in square brackets, namely one or more
+% options in the /pgfplots/coords key path (see below).
+\def\pgfplotspointgetcoordinatesfromnormalized{%
+ \pgfutil@ifnextchar[{\pgfplotspointgetcoordinatesfromnormalized@opt}{\pgfplotspointgetcoordinatesfromnormalized@opt[]}%
+}%
+
+% Defines where to expect INPUT coordinates
+% \pgfplotspointgetcoordinatesfromnormalized[path=/data point/
+% would expect input coordinates
+% /data point/x
+% /data point/y
+% /data point/z
+\pgfkeyssetvalue{/pgfplots/coords/path}{/data point}
+
+% \pgfplotspointgetcoordinatesfromnormalized[target path=/data point/zero/
+% would write output coordinates
+% /data point/zero/x
+% /data point/zero/y
+% /data point/zero/z
+\pgfkeyssetvalue{/pgfplots/coords/target path}{\pgfkeysvalueof{/pgfplots/coords/path}}
+
+\def\pgfplotspointgetcoordinatesfromnormalized@opt[#1]{%
+ \begingroup
+ \pgfqkeys{/pgfplots/coords}{#1}%
+ \pgfkeysgetvalue{/pgfplots/coords/path}\pgfplots@path
+ \pgfkeysgetvalue{/pgfplots/coords/target path}\pgfplots@path@trg
+ \pgfkeysifdefined{\pgfplots@path/x}{}{%
+ \pgfplots@error{Illegal argument: '\pgfplots@path' is no valid data point path (\pgfplots@path/x does not exist)}%
+ }%
+ \pgfkeysgetvalue{\pgfplots@path/x}\pgfplots@loc@x
+ \pgfkeysgetvalue{\pgfplots@path/y}\pgfplots@loc@y
+ \pgfkeysgetvalue{\pgfplots@path/z}\pgfplots@loc@z
+ %
+ \pgfplotspointgetcoordinatesfromnormalized@transform x\pgfplots@loc@x%
+ \pgfplotspointgetcoordinatesfromnormalized@transform y\pgfplots@loc@y%
+ \ifpgfplots@threedim
+ \pgfplotspointgetcoordinatesfromnormalized@transform z\pgfplots@loc@z%
+ \fi
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\pgfkeyssetvalue{\pgfplots@path@trg/x}{\pgfplots@loc@x}%
+ \noexpand\pgfkeyssetvalue{\pgfplots@path@trg/y}{\pgfplots@loc@y}%
+ \noexpand\pgfkeyssetvalue{\pgfplots@path@trg/z}{\pgfplots@loc@z}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+\def\pgfplotspointgetcoordinatesfromnormalized@transform#1#2{%
+ \edef\pgfplots@loc@TMPa{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \pgfplotscoordmath{#1}{tofixed}{#2}%
+ }{%
+ \pgfplotscoordmath{#1}{exp}{#2}%
+ }%
+ \let#2=\pgfmathresult
+ \pgfplots@coord@inv@trafo@apply{#1}{#2}%
+ \let#2=\pgfmathresult
+ \fi
+}%
+
+% Defines an optimized and matching \pgfplotsaxisvisphasetransformcoordinate
+% during the coordinate finalization step in \end{axis}.
+\def\pgfplots@coord@stream@INIT@finalize@storedcoords@prepare@scaletrafomacro{%
+ \begingroup
+ \let\E=\noexpand
+ %
+ % \pgfplotsaxisvisphasetransformcoordinate
+ % Maps a point to the low level xyz coordinate system by applying
+ % data scaling transformations.
+ %
+ % This method should be invoked for every coordinate before it can
+ % be drawn.
+ %
+ % It is prepared here to eliminate if's.
+ %
+ % Arguments:
+ % #1 : a MACRO containing the x value
+ % #2 : a MACRO containing the y value
+ % #3 : a MACRO containing the z value
+ %
+ % PRECONDITION:
+ % - the visualization phase is running.
+ % - #1,#2,#3 are defined and contain
+ % values resulting from the survey phase.
+ %
+ % POSTCONDITION
+ % - #1,#2,#3 will be redefined to contain data which is
+ % readily usable by low level pgf plot handlers for
+ % visualization.
+ %
+ % @see \pgfplotsaxisvisphasepreparedatapoint
+ \xdef\pgfplotsaxisvisphasetransformcoordinate##1##2##3{%
+ \ifpgfplots@apply@datatrafo@x
+ \E\pgfplotscoordmath{x}{datascaletrafo}{##1}%
+ \E\let##1=\E\pgfmathresult
+ \fi
+ \ifpgfplots@apply@datatrafo@y
+ \E\pgfplotscoordmath{y}{datascaletrafo}{##2}%
+ \E\let##2=\E\pgfmathresult
+ \fi
+ \ifpgfplots@curplot@threedim
+ \ifpgfplots@apply@datatrafo@z
+ \E\pgfplotscoordmath{z}{datascaletrafo}{##3}%
+ \E\let##3=\E\pgfmathresult
+ \fi
+ \fi
+ % \t@pgfplots@tokc=\expandafter{\pgfplots@data@scaletrafo@result}%
+ % \edef\pgfplots@data@scaletrafo@result{\the\t@pgfplots@tokc(\pgfplots@current@point@x,\pgfplots@current@point@y)}%
+ }%
+ %
+ % Just before the visualization phase can call the low level
+ % interface, this method is called to handle final changes.
+ % It is currently only used by the stacked plot interface.
+ \xdef\pgfplotsaxisvisphasepreparedatapoint{%
+ \ifpgfplots@stackedmode
+ % all these calls work with pgfmath; no more floating point
+ % arithmetics are applied.
+ \E\pgfplots@stacked@visphasepreparedatapoint%
+ \fi
+ }%
+ %
+ \endgroup
+}
+
+% Defines \pgfmathresult to contain the transformed coordinate entry
+% #1: one of x,y ,or z
+% #2: the input value
+\def\pgfplotsaxisvisphasetransformcoordinateentry#1#2{%
+ \pgfplots@if{pgfplots@apply@datatrafo@#1}{%
+ \pgfplotscoordmath{#1}{datascaletrafo}{#2}%
+ }{%
+ \edef\pgfmathresult{#2}%
+ }%
+}%
+
+\def\pgfplots@addplot@define@plot@cycle@threedim{%
+ \def\pgfplots@path@closed@cycle@std{%
+ \pgfextra{%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@currentplot@lastcoord@x}{\pgfplots@currentplot@lastcoord@y}{\pgfplots@logical@ZERO@z}}%
+ \pgfpathlineto{\pgfplotsqpointxyz{\pgfplots@currentplot@firstcoord@x}{\pgfplots@currentplot@firstcoord@y}{\pgfplots@logical@ZERO@z}}%
+ }%
+ -- cycle
+ }%
+}%
+\def\pgfplots@addplot@get@named@startendpoints@command#1{%
+ \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty
+ % empty plot.
+ \def#1{%
+ \pgfcoordinate{current plot begin}{\pgfplotspointaxisorigin}%
+ \pgfcoordinate{current plot end}{\pgfplotspointaxisorigin}%
+ }%
+ \else
+ \ifpgfplots@curplot@threedim
+ \edef#1{%
+ \noexpand\pgfcoordinate{current plot begin}{\noexpand\pgfplotsqpointxyz{\pgfplots@currentplot@firstcoord@x}{\pgfplots@currentplot@firstcoord@y}{\pgfplots@currentplot@firstcoord@z}}%
+ \noexpand\pgfcoordinate{current plot end}{\noexpand\pgfplotsqpointxyz{\pgfplots@currentplot@lastcoord@x}{\pgfplots@currentplot@lastcoord@y}{\pgfplots@currentplot@lastcoord@z}}%
+ }%
+ % FIXME : wouldn't this be a good idea for 2d axes as
+ % well!?
+ \pgfplots@addplot@define@plot@cycle@threedim
+ \else
+ \edef#1{%
+ \noexpand\pgfcoordinate{current plot begin}{\noexpand\pgfplotsqpointxy{\pgfplots@currentplot@firstcoord@x}{\pgfplots@currentplot@firstcoord@y}}%
+ \noexpand\pgfcoordinate{current plot end}{\noexpand\pgfplotsqpointxy{\pgfplots@currentplot@lastcoord@x}{\pgfplots@currentplot@lastcoord@y}}%
+ }%
+ \fi
+ \fi
+}%
+
+% This is the pgfplots implementation for 'node[pos=<fraction>]'.
+% Besides modifications of the transformation matrix, it also defines the COORDINATES of the point to
+% /data point/x
+% /data point/y
+% /data point/z
+% (or more keys which depend on the plot handler).
+\def\pgfplots@plot@timer{%
+ \pgfplotstransformplotattime{\tikz@time}%
+}
+
+% Installs a transformation matrix such that (0,0) is the point of the
+% current plot with fraction #1.
+%
+% This does actually nothing more than using
+% \pgfplotspointplotattime{#1} as shift and using the slope of the
+% curve at that point to set up the 'sloped' rotation (if enabled).
+\def\pgfplotstransformplotattime#1{%
+ \pgftransformshift{\pgfplotspointplotattime{#1}}%
+ \ifpgfresetnontranslationattime%
+ \pgftransformresetnontranslations%
+ \fi%
+ \ifpgfslopedattime%
+ \pgfplotsplothandlertransformslopedattime{#1}{\pgfplotspointplotattimefirst}{\pgfplotspointplotattimesecond}%
+ \fi%
+}
+
+\def\pgfplotspointplotattimeclearcache{%
+ \global\let\pgfplotspointplotattime@cache=\pgfutil@empty
+ \gdef\pgfplotspointplotattime@cachesize{0}%
+}%
+\pgfplotspointplotattimeclearcache
+\def\pgfplotspointplotattime@cachesize@max{20}
+
+% Checks if the cache for \pgfplotspointplotattime has a cached entry for '#1'.
+% POSTCONDITION:
+% if \ifpgfplots@loc@tmp is true, the value(s) from the cache have been retrieved successfully.
+% if \ifpgfplots@loc@tmp is false, there is not hit.
+\def\pgfplotspointplotattimegetfromcache#1{%
+ \pgf@xa=#1pt %
+ \pgfplotspointplotattime@cache
+ \pgfkeysifdefined{/data point/@pos \the\pgf@xa/segment \pgfkeysvalueof{/tikz/pos segment}}{%
+ \pgfkeysvalueof{/data point/@pos \the\pgf@xa/segment \pgfkeysvalueof{/tikz/pos segment}}%
+ \pgfplots@loc@tmptrue
+ }{%
+ \pgfplots@loc@tmpfalse
+ }%
+}%
+\def\pgfplotspointplotattimeaddtocache#1{%
+ \pgfplotsutil@advancestringcounter@global\pgfplotspointplotattime@cachesize
+ \ifnum\pgfplotspointplotattime@cachesize=\pgfplotspointplotattime@cachesize@max
+ \pgfplotspointplotattimeclearcache
+ \fi
+ \pgf@xa=#1pt %
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\gdef\noexpand\pgfplotspointplotattimefirst{\pgfplotspointplotattimefirst}%
+ \noexpand\gdef\noexpand\pgfplotspointplotattimesecond{\pgfplotspointplotattimesecond}%
+ \noexpand\gdef\noexpand\pgfplotspointplotattimecoords{\pgfplotspointplotattimecoords}%
+ \noexpand\pgf@x=\the\pgf@x\space% attempt to fix bugs/94/ aka q/271792/.
+ \noexpand\pgf@y=\the\pgf@y\space% sometimes there are \noexpand sometimes there are not.
+ }%
+ \t@pgfplots@toka=\expandafter{\pgfplotspointplotattime@cache}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}%
+ \xdef\pgfplotspointplotattime@cache{%
+ \the\t@pgfplots@toka
+ \noexpand\pgfkeyssetvalue{/data point/@pos \the\pgf@xa/segment \pgfkeysvalueof{/tikz/pos segment}}{\the\t@pgfplots@tokb}%
+ }%
+}
+
+% Sets (\pgf@x,\pgf@y) to the point of the current plot with fraction #1.
+% For #1 = 0, this is the first point.
+% For #1 = 1, this is the last point.
+% For #1 = 0.5, it is the middle of the plot.
+% The argument '#1' is optional: if you leave it away, the current value of the 'pos' key will be used.
+% This method will work for most plot handlers, although some of them might be unsupported.
+%
+% As a side-effect, it defines the (global) macros
+% - \pgfplotspointplotattimefirst the start coordinate of the line segment containing #1
+% - \pgfplotspointplotattimesecond the end coordinate of the line segment containing #1
+% - \pgfplotspointplotattimecoords the coordinates of #1
+% The first two are interesting in order to allow the computation of gradients.
+% \pgfplotsplothandlerpointtokeys{/data point}%
+% for the \pgfplotspointplotattimecoords point
+%
+% Any of these macros can be decoded using
+% \pgfplotsplothandlerdeserializepointfrom\pgfplotspointplotattimesecond
+% \pgfplotsaxisvisphasegetpoint
+%
+% @see \pgfplotsplothandlerpointtokeys
+\def\pgfplotspointplotattime{%
+ \pgfutil@ifnextchar\bgroup{\pgfplotspointplotattime@}{\pgfplotspointplotattime@{\tikz@time}}%
+}
+\def\pgfplotspointplotattime@#1{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfplots@error{Sorry, the provided fraction of the plot is empty (maybe the argument of 'pos' has been cleared by the tikz node processing). Please provide a valid 'pos' argument}%
+ \else
+ \pgfplotspointplotattimegetfromcache{#1}%
+ \ifpgfplots@loc@tmp
+ % CACHE HIT!
+%\message{CACHE HIT for \string\pgfplotspointplotattime{#1}^^J}%
+ \else
+%\message{NO cache hit for \string\pgfplotspointplotattime{#1}^^J}%
+ \begingroup
+ %
+ \if1\b@pgfplots@LUA@visualization@enabled
+ \ifx\pgfplots@plot@timer@args\relax
+ \expandafter\gdef\expandafter\pgfplots@plot@timer@args\expandafter{%
+ \pgfplotsutil@directlua{pgfplots.texGetSurveyedCoordsToPgfplots()}%
+ }%
+ \fi
+ \let\pgfplotsaxisdeserializedatapointfrom@private=\pgfplotsaxisdeserializedatapointfrom@private@nonLUA
+ \else
+ \global\let\pgfplots@plot@timer@args=\pgfplots@stored@current@data
+ \fi
+ %
+ %
+ \edef\pgfplots@time{#1}%
+ \pgfplotscoordmathparsemacro{default}{\pgfplots@time}%
+ \pgfkeysgetvalue{/tikz/pos segment}\pgfplots@pos@segment
+ %
+\iffalse
+ % this here is a simple experiment which finds x or y
+ % values. IMPLEMENT IT!
+ \def\pgfplotspointattime@do@set@current@value{%
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@current@point@y}%
+ \let\pgfplotspointattime@value@current=\pgfmathresult
+ }%
+ \def\pgfplotspointattime@do@set@target@value{%
+ \let\pgfplotspointattime@value@target=\pgfplots@time
+ }%
+ \def\pgfplots@ifpointattime@do@set@current@value@accumulates##1##2{##2}%
+\fi
+ %
+ \let\pgfplotspointattime@do=\relax
+ \let\pgfplots@coord@stream@start@=\pgfplots@coord@stream@start@plot@at@time
+ \let\pgfplots@coord@stream@coord@=\pgfplots@coord@stream@coord@plot@at@time
+ \def\pgfplots@coord@stream@end@{}%
+ \pgfplots@ifpointattime@do@set@current@value@accumulates{%
+ % 1. compute the total length of the plot (by integrating along a linear spline)
+ %
+ % we need to compute the TOTAL length in order to set the
+ % target values.
+ \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@plot@timer@args}%
+ }{}%
+ %
+ \pgfplotspointattime@do@set@target@value
+ %
+ \pgfplotscoordmath{default}{zero}%
+ \let\pgfplots@len@last=\pgfmathresult
+ \let\pgfplots@len@last@last=\pgfplots@len@last
+%\message{plot at time (#1, segment \pgfplots@pos@segment): total length=\pgfplotspointattime@value@current; target len \pgfplotspointattime@value@target\space (#1)^^J}%
+ %
+ \def\pgfplots@HIT{0}%
+ \let\pgfplots@last@last=\pgfutil@empty
+ \let\pgfplots@coord@stream@coord@=\pgfplots@coord@stream@coord@plot@at@time
+ \let\pgfplotspointattime@do=\pgfplotspointattime@do@find@target@value
+ \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@plot@timer@args}%
+ \if\pgfplots@HIT0%
+ \let\pgfplots@last@processed=\pgfplots@last@last
+ \let\pgfplots@len@last=\pgfplots@len@last@last
+ \pgfplotspointattime@pointbetween@two
+ \fi
+ \endgroup
+ \pgfplotspointplotattimeaddtocache{#1}%
+ \fi
+ \pgfplotsplothandlerdeserializepointfrom\pgfplotspointplotattimecoords
+ \pgfplotscoordmath{x}{tofixed}{\pgfplots@current@point@x}%
+ \pgfplots@coord@inv@trafo@apply{x}{\pgfmathresult}%
+ \let\pgfplots@current@point@x=\pgfmathresult
+ \pgfplotscoordmath{y}{tofixed}{\pgfplots@current@point@y}%
+ \pgfplots@coord@inv@trafo@apply{y}{\pgfmathresult}%
+ \let\pgfplots@current@point@y=\pgfmathresult
+ \ifpgfplots@curplot@threedim
+ \pgfplotscoordmath{z}{tofixed}{\pgfplots@current@point@z}%
+ \pgfplots@coord@inv@trafo@apply{z}{\pgfmathresult}%
+ \let\pgfplots@current@point@z=\pgfmathresult
+ \fi
+ \pgfplotsplothandlerpointtokeys{/data point}%
+ \fi
+}
+
+% coordinate streaming method for use in
+% \pgfplotspointplotattime
+\def\pgfplots@coord@stream@start@plot@at@time{%
+ \ifx\pgfplots@pos@segment\pgfutil@empty
+ \let\c@pgfplots@segments=\pgfutil@empty
+ \else
+ \def\c@pgfplots@segments{0}%
+ \c@pgf@countd=\pgfplots@pos@segment\relax
+ \edef\pgfplots@pos@segment{\the\c@pgf@countd}%
+ \fi
+ \pgfplotscoordmath{default}{zero}%
+ \let\pgfplotspointattime@value@current=\pgfmathresult
+ \let\pgfplots@last@processed=\pgfutil@empty
+ \def\pgfplots@last@was@empty{1}%
+}%
+
+
+% coordinate streaming method for use in
+% \pgfplotspointplotattime
+%
+% It invokes \pgfplotspointattime@do{} whenever is has found a line
+% segment.
+\def\pgfplots@coord@stream@coord@plot@at@time{%
+%\message{plot at time (#1, segment \pgfplots@pos@segment): processing (\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)^^J}%
+ \ifx\pgfplots@current@point@x\pgfutil@empty
+ \if1\pgfplots@last@was@empty
+ \else
+ % oh. a jump... start new length segment
+ \ifx\c@pgfplots@segments\pgfutil@empty
+ \else
+ \ifx\pgfplots@pos@segment\c@pgfplots@segments
+ \let\pgfplots@coord@stream@coord@=\relax
+ \fi
+ \pgfplotsutil@advancestringcounter\c@pgfplots@segments
+ \fi
+ \fi
+ \let\pgfplots@last@processed=\pgfutil@empty
+ \def\pgfplots@last@was@empty{1}%
+ \else
+ \ifx\pgfplots@pos@segment\c@pgfplots@segments
+ \pgfplotsplothandlerserializepointto{\pgfplots@cur}%
+ \pgfplotspointattime@do@set@current@value
+ %
+ \ifx\pgfplots@last@processed\pgfutil@empty
+ \else
+ \pgfplotspointattime@do
+ \fi
+ %
+ \let\pgfplots@len@last@last=\pgfplots@len@last
+ \let\pgfplots@len@last=\pgfplotspointattime@value@current
+ \let\pgfplots@last@last=\pgfplots@last@processed
+ \let\pgfplots@last@processed=\pgfplots@cur
+ \fi
+ \def\pgfplots@last@was@empty{0}%
+ \fi
+}%
+
+% A macro which is invoked whenever \pgfplotspointplotattime found a
+% line segment.
+%
+% INPUT:
+% - \pgfplots@cur : serialized current point. This current point's
+% properties are available in the macros
+% \pgfplots@current@point@[xyz] etc.
+% - \pgfplots@last@processed : serialized last point
+% - \pgfplotspointattime@value@current : the accumulated length so far
+%
+\def\pgfplotspointattime@do{}
+
+% \pgfplots@ifpointattime@do@set@current@value@accumulates{<true code>}{<false code>}
+%
+% is invokes to test if \pgfplotspointattime@do@set@current@value
+% accumulates stuff. If so, it will invoke <true code>. If it does NOT
+% accumulate stuff, it will invoke <false code>
+\def\pgfplots@ifpointattime@do@set@current@value@accumulates#1#2{%
+ % the default "time fraction" implementation accumulates:
+ #1\relax
+}
+
+\def\pgfplotspointattime@do@set@current@value{%
+ \ifx\pgfplots@last@processed\pgfutil@empty
+ \else
+ \pgfplotsplothandlersurveydifflen{\pgfplots@last@processed}{\pgfplots@cur}%
+ \pgfplotscoordmath{default}{op}{add}{{\pgfmathresult}{\pgfplotspointattime@value@current}}%
+ \let\pgfplotspointattime@value@current=\pgfmathresult
+ \fi
+%\message{plot at time (#1, segment \pgfplots@pos@segment): length \pgfplotspointattime@value@current^^J}%
+}%
+
+% Needs to define \pgfplotspointattime@value@target .
+%
+% This value is the search target: once the loop realizes that it
+% passed \pgfplotspointattime@value@target, it will report a hit in the current
+% interval.
+\def\pgfplotspointattime@do@set@target@value{%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@time}{\pgfplotspointattime@value@current}}%
+ \let\pgfplotspointattime@value@target=\pgfmathresult
+}%
+
+\def\pgfplotspointattime@do@find@target@value{%
+ % compare \pgfplotspointattime@value@target and \pgfplotspointattime@value@current to see if
+ % we passed the target interval:
+ \pgfplotscoordmath{default}{if less than}
+ {\pgfplotspointattime@value@target}
+ {\pgfplotspointattime@value@current}
+ {% HIT!
+ \def\pgfplots@HIT{1}%
+ \pgfplotspointattime@pointbetween@two
+ %
+ % we cannot stop the loop; what we can turn it into no-op:
+ \let\pgfplots@coord@stream@coord@=\relax
+ }{%
+ }%
+}%
+
+\def\pgfplotspointattime@pointbetween@two{%
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotspointattime@value@target}{\pgfplots@len@last}}%
+ \let\pgfplots@tmp=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotspointattime@value@current}{\pgfplots@len@last}}%
+ \pgfplotscoordmath{default}{op}{divide}{{\pgfplots@tmp}{\pgfmathresult}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@time@between@two=\pgfmathresult
+%\message{HIT of \pgfplotspointattime@value@target\space between \pgfplots@len@last\space and \pgfplotspointattime@value@current\space (\pgfplots@time@between@two)^^J}%
+ \ifx\pgfplots@last@processed\pgfutil@empty
+ \pgfplotsplothandlerserializepointto{\pgfplots@cur}%
+ \else
+ \pgfplotsplothandlersurveypointattime{\pgfplots@time@between@two}{\pgfplots@last@processed}{\pgfplots@cur}%
+ \fi
+ \pgfplotsplothandlerserializepointto\pgfplots@loc@TMPa
+ \global\let\pgfplotspointplotattimecoords=\pgfplots@loc@TMPa
+ \pgfplotsaxisvisphasegetpoint
+ \global\let\pgfplotspointplotattimefirst=\pgfplots@last@processed
+ \global\let\pgfplotspointplotattimesecond=\pgfplots@cur
+}%
+
+
+% #1 : either x,y, or z
+% #2 : the argument on which the inv trafo shall be applied. It has to
+% be a fixed point number.
+\def\pgfplots@coord@inv@trafo@apply#1#2{%
+ \edef\pgfmathresult{#2}%
+ \pgfkeysgetvalue{/pgfplots/#1 coord inv trafo/.@cmd}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key
+ \else
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov
+ \fi
+}%
+
+% INPUT:
+% either floating point or fixed point coordinates (depending on the
+% state of the \ifpgfplots@apply@datatrafo boolean)
+%
+\long\def\pgfplots@coord@stream@finalize@storedcoords@START{%
+ % de-activate the FPU here! I fear its number
+ % format may cause errors when used in low-level
+ % routines.
+ \pgfkeys{/pgf/fpu=false}%
+ %
+ \pgfplots@assert@tikzinternal@exists{tikz@make@last@position}%
+ %
+ \ifpgfplots@clip
+ \else
+ % "clip marker paths=true" actually doesn't checks anything --
+ % it leaves the checks to the clip path. But since there is no
+ % clip path, it is adequate to use it here:
+ \pgfplots@clip@marker@pathstrue
+ \fi
+ %
+ \pgfplots@stored@current@cmd%[current plot style] <--- options are already set
+ \pgfextra
+ %
+ \tikzset{every plot/.try}%
+ \pgfplots@coord@stream@INIT@finalize@storedcoords%
+ %
+ \iffalse
+ %\ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard
+ % discard!? Well, no need to loop through the elements.
+ % But there may be a good reason that we entered the phase!
+ % keep it.
+ % FIXME : this does not work, although it might be desirable.
+ % It fails because we need the named start/end points.
+ \pgfplots@coord@stream@start
+ \pgfplots@coord@stream@end
+ \else
+ \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@stored@current@data}%
+ \fi
+ %
+ % This here ensures that the LAST position of the path is the last plotted point.
+ % However, the "last plotted point" is not necessarily the LAST in the sequence.
+ % This here is the last plotted point:
+ \xdef\pgfplotlastpoint{\noexpand\pgfpointanchor{current plot end}{center}}%
+ \tikz@make@last@position{\pgfplotlastpoint}%
+ %
+ % the coordinate stream will be assigned as soon as it is needed:
+ \global\let\pgfplots@plot@timer@args=\relax
+ \pgfplotspointplotattimeclearcache
+ \let\tikz@timer=\pgfplots@plot@timer%
+ \pgfplotsaxisvisphase@get@afterpath%
+ \expandafter
+ \endpgfextra
+ \pgfplotsretval
+ ;%
+ %
+ \pgfplotspointplotattimeclearcache
+ \global\let\pgfplots@plot@timer@args=\relax
+ %
+}%
+
+% Defines \pgfplotsretval to contain the "after path", i.e. the
+% standard tikz instructions which are to be carried out after the
+% plot path. This depends on the current visualization phase and the
+% available visualization phases.
+\def\pgfplotsaxisvisphase@get@afterpath{%
+ \ifx\pgfplots@visphase@name\pgfplotsaxis@visphase@name@default
+ % ah - we have the standard visualization phase. Draw them
+ % here.
+ %
+ % Note that the existance of (nontrivial) after path
+ % instructions ALWAYS implies the existance of a standard
+ % visualization phase (compare \pgfplotssurveyphase@set@visphase@names)
+ \let\pgfplotsretval=\pgfplots@serialized@afterpath%
+ \else
+ \let\pgfplotsretval=\pgfutil@empty
+ \fi
+}%
+
+
+% This routine is called at the begin of every plot.
+% It initialises a zero level stream.
+%
+% The default is to use '0' as zero level streams.
+%
+% This method is called as "precommand"; before any Tikz drawing
+% commands have been started.
+\def\pgfplots@initzerolevelhandler{%
+ \ifpgfplots@stackedmode
+ % ATTENTION: this thing here says:
+ % "draw zero level coordinates from list XYZ."
+ % But at the time of this initialisation, the list will be EMPTY!
+ %
+ % It will be filled later. That's ok, because
+ % \pgfplots@initzerolevelhandler will be
+ % used as 'precommand', that means before Tikz sees any
+ % coordinates.
+ \pgfplots@stacked@initzerolevelhandler
+ \else
+ \ifpgfplots@threedim
+ \def\pgfplotxzerolevelstreamstart{}%
+ \def\pgfplotxzerolevelstreamend{}%
+ \def\pgfplotxzerolevelstreamnext{%
+ \begingroup
+ \pgf@xa=\pgf@y
+ \pgfplotsqpointxyz{\pgfplots@logical@ZERO@x}{\pgfplots@current@point@y}{\ifpgfplots@curplot@threedim\pgfplots@current@point@z\else\pgfplots@logical@ZERO@z\fi}%
+ \global\pgf@x=\pgf@x
+ \global\pgf@y=\pgf@xa
+ \endgroup
+ }%
+ %
+ \def\pgfplotyzerolevelstreamstart{}%
+ \def\pgfplotyzerolevelstreamend{}%
+ \def\pgfplotyzerolevelstreamnext{%
+ \begingroup
+ \pgf@xa=\pgf@y
+ \pgfplotsqpointxyz{\pgfplots@current@point@x}{\pgfplots@current@point@y}{\pgfplots@logical@ZERO@z}%
+ \global\pgf@x=\pgf@y
+ \global\pgf@y=\pgf@xa
+ \endgroup
+ }%
+ \else
+ \pgfplotspointaxisorigin
+ \expandafter\pgfplotxzerolevelstreamconstant\expandafter{\the\pgf@x}%
+ \expandafter\pgfplotyzerolevelstreamconstant\expandafter{\the\pgf@y}%
+ \fi
+ \fi
+}
+
+% This code is mainly interesting for bar plots.
+%
+% It precomputes x = 0 and y = 0 - which is not necessarily
+% trivial in case of data scaling. Furthermore, it applies
+% coordinate clipping to the resulting values and multiplies them
+% with x- and y scale vectors.
+\def\pgfplots@prepare@ZERO@coordinates{%
+ \ifpgfplots@xislinear
+ \ifpgfplots@apply@datatrafo@x
+ \pgfplotscoordmath{x}{parsenumber}{0}%
+ \pgfplotscoordmath{x}{datascaletrafo}{\pgfmathresult}%
+ \global\let\pgfplots@logical@ZERO@x=\pgfmathresult
+ \else
+ \gdef\pgfplots@logical@ZERO@x{0}%
+ \fi
+ % this works in standard fixed pt math:
+ \pgfplotsmathmax{\pgfplots@logical@ZERO@x}{\pgfplots@xmin}%
+ \global\let\pgfplots@logical@ZERO@x=\pgfmathresult
+ \pgfplotsmathmin{\pgfplots@logical@ZERO@x}{\pgfplots@xmax}%
+ \global\let\pgfplots@logical@ZERO@x=\pgfmathresult
+ \else
+ \if\pgfplots@log@origin@choice@x0%
+ \global\let\pgfplots@logical@ZERO@x=\pgfplots@xmin%
+ \else
+ \gdef\pgfplots@logical@ZERO@x{0}%
+ \fi
+ \fi
+ %
+ \ifpgfplots@yislinear
+ \ifpgfplots@apply@datatrafo@y
+ \pgfplotscoordmath{y}{parsenumber}{0}%
+ \pgfplotscoordmath{y}{datascaletrafo}{\pgfmathresult}%
+ \global\let\pgfplots@logical@ZERO@y=\pgfmathresult
+ \else
+ \gdef\pgfplots@logical@ZERO@y{0}%
+ \fi
+ \pgfplotsmathmax{\pgfplots@logical@ZERO@y}{\pgfplots@ymin}%
+ \global\let\pgfplots@logical@ZERO@y=\pgfmathresult
+ \pgfplotsmathmin{\pgfplots@logical@ZERO@y}{\pgfplots@ymax}%
+ \global\let\pgfplots@logical@ZERO@y=\pgfmathresult
+ \else
+ \if\pgfplots@log@origin@choice@y0%
+ \global\let\pgfplots@logical@ZERO@y=\pgfplots@ymin%
+ \else
+ \gdef\pgfplots@logical@ZERO@y{0}%
+ \fi
+ \fi
+ %
+ \ifpgfplots@threedim
+ \ifpgfplots@zislinear
+ \ifpgfplots@apply@datatrafo@z
+ \pgfplotscoordmath{z}{parsenumber}{0}%
+ \pgfplotscoordmath{z}{datascaletrafo}{\pgfmathresult}%
+ \global\let\pgfplots@logical@ZERO@z=\pgfmathresult
+ \else
+ \gdef\pgfplots@logical@ZERO@z{0}%
+ \fi
+ \pgfplotsmathmax{\pgfplots@logical@ZERO@z}{\pgfplots@zmin}%
+ \global\let\pgfplots@logical@ZERO@z=\pgfmathresult
+ \pgfplotsmathmin{\pgfplots@logical@ZERO@z}{\pgfplots@zmax}%
+ \global\let\pgfplots@logical@ZERO@z=\pgfmathresult
+ \else
+ \if\pgfplots@log@origin@choice@z0%
+ \global\let\pgfplots@logical@ZERO@z=\pgfplots@zmin%
+ \else
+ \gdef\pgfplots@logical@ZERO@z{0}%
+ \fi
+ \fi
+ \fi
+ %
+ %
+ \ifpgfplots@threedim
+ \pgfplotsqpointxyz{\pgfplots@logical@ZERO@x}{\pgfplots@logical@ZERO@y}{\pgfplots@logical@ZERO@z}%
+ \else
+ \pgfplotsqpointxy{\pgfplots@logical@ZERO@x}{\pgfplots@logical@ZERO@y}%
+ \fi
+ \xdef\pgfplots@ZERO@x{\the\pgf@x}%
+ \xdef\pgfplots@ZERO@y{\the\pgf@y}%
+ \xdef\pgfplotspointaxisorigin{\noexpand\global\pgf@x=\pgfplots@ZERO@x\space\noexpand\global\pgf@y=\pgfplots@ZERO@y\space}%
+ %
+ %
+ %--------------------------------------------------
+ % \pgfkeyslet{/pgfplots/axis/zero/x}\pgfplots@logical@ZERO@x
+ % \pgfkeyslet{/pgfplots/axis/zero/y}\pgfplots@logical@ZERO@y
+ % \ifpgfplots@threedim
+ % \pgfkeyslet{/pgfplots/axis/zero/z}\pgfplots@logical@ZERO@z
+ % \fi
+ %--------------------------------------------------
+}%
+
+
+
+% the low-level Tikz command which implements 'plot graphics'.
+%
+% It's current state is described by some pgfkeys options and two
+% coordinates.
+\def\pgfplotsplothandlergraphics{%
+ \def\pgf@plotstreamstart{%
+ \gdef\pgfplots@plot@handler@graphics@bb@first{\pgf@x=16000pt \pgf@y=16000pt }%
+ \gdef\pgfplots@plot@handler@graphics@bb@second{\pgf@x=-16000pt \pgf@y=-16000pt }%
+ \global\let\pgf@plotstreampoint=\pgfplots@plot@handler@graphics@collectbb%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplots@plot@handler@graphics@finish%
+ \def\pgfplotsplothandlervisualizejump{%
+ \pgfplots@error{Sorry, plot graphics does not support 'unbounded coords=jump'.}%
+ }%
+ }%
+ \def\pgfplotsplothandlername{graphics}%
+}%
+\def\pgfplots@plot@handler@graphics@collectbb#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfplots@plot@handler@graphics@bb@first
+ \ifdim\pgf@xa<\pgf@x \pgf@x=\pgf@xa\fi
+ \ifdim\pgf@ya<\pgf@y \pgf@y=\pgf@ya\fi
+ \xdef\pgfplots@plot@handler@graphics@bb@first{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ %
+ \pgfplots@plot@handler@graphics@bb@second
+ \ifdim\pgf@xa>\pgf@x \pgf@x=\pgf@xa\fi
+ \ifdim\pgf@ya>\pgf@y \pgf@y=\pgf@ya\fi
+ \xdef\pgfplots@plot@handler@graphics@bb@second{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ %
+}%
+\def\pgfplots@plot@handler@graphics@finish{%
+ \let\pgfplots@plot@handler@graphics@pointmap@B@canvas\pgfutil@empty
+ %
+ % check if we have a pointmap. If so, the pointmap should be used
+ % to place the graphics.
+ \pgfkeysgetvalue{/pgfplots/plot graphics/points}\pgfplots@plot@handler@graphics@pointmap
+ \ifx\pgfplots@plot@handler@graphics@pointmap\pgfutil@empty
+ \else
+ \let\pgfplots@plot@handler@graphics@parsepointmap@error=\relax
+ \expandafter\pgfplots@plot@handler@graphics@parsepointmap\expandafter{\pgfplots@plot@handler@graphics@pointmap}%
+ \fi
+ %
+ %
+ \ifx\pgfplots@plot@handler@graphics@pointmap@B@canvas\pgfutil@empty
+ % no pointmap. Good; then squeze graphics into the bounding
+ % box:
+ \pgfplots@plot@handler@graphics@usebb
+ \else
+ % oh, a pointmap! Process it.
+ \pgfplots@plot@handler@graphics@process@pointmap
+ \fi
+}%
+
+% Parses the argument of '/pgfplots/plot graphics/points'.
+%
+% #1: the argument of the key above.
+\def\pgfplots@plot@handler@graphics@parsepointmap#1{%
+ \let\pgfplots@plot@handler@graphics@pointmap@A@canvas\pgfutil@empty
+ \let\pgfplots@plot@handler@graphics@pointmap@A@img\pgfutil@empty
+ \let\pgfplots@plot@handler@graphics@pointmap@B@canvas\pgfutil@empty
+ \let\pgfplots@plot@handler@graphics@pointmap@B@img\pgfutil@empty
+ \let\pgfplots@plot@handler@graphics@pointmap@C@canvas\pgfutil@empty
+ \let\pgfplots@plot@handler@graphics@pointmap@C@img\pgfutil@empty
+ \let\pgfplots@plot@handler@graphics@pointmap@D@canvas\pgfutil@empty
+ \let\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty
+ \pgfplots@plot@handler@graphics@parsepointmap@loop#1\pgfplots@EOI
+ \ifpgfplots@plot@graphics@autoadjustaxis
+ \ifx\pgfplots@plot@handler@graphics@pointmap@A@img\pgfutil@empty
+ \else
+ \ifx\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty
+ \def\pgfplots@loc@TMPa{#1}%
+ \pgfplots@plot@handler@graphics@parsepointmap@error
+ \fi
+ \fi
+ \fi
+}%
+\def\pgfplots@plot@handler@graphics@parsepointmap@error{%
+ \pgfplots@error{plot graphics/points={\pgfplots@loc@TMPa} cannot be processed: I need at least *four* inner anchor points to automatically adjust the axis, i.e. 4 points of the form (x,y,z) => (imgx,imgy). Use 'plot graphics/auto adjust axis=false' to disable this feature}%
+}%
+\def\pgfplots@plot@handler@graphics@parsepointmap@loop{%
+ \pgfutil@ifnextchar\pgfplots@EOI{%
+ \pgfplots@gobble@until@EOI
+ }{%
+ \pgfplots@plot@handler@graphics@parsepointmap@loop@
+ }%
+}%
+\def\pgfplots@plot@handler@graphics@parsepointmap@loop@(#1,#2){%
+ \pgfutil@ifnextchar={%
+ \pgfplots@plot@handler@graphics@parsepointmap@loop@@(#1,#2)%
+ }{%
+ \pgfplots@plot@handler@graphics@parsepointmap@loop@@(#1,#2)=>(,)%
+ }%
+}%
+\def\pgfplots@plot@handler@graphics@parsepointmap@loop@@(#1,#2)=>{%
+ \pgfutil@ifnextchar({%
+ \pgfplots@plot@handler@graphics@parsepointmap@loop@@@(#1,#2)%
+ }{%
+ \pgfplots@error{Syntax error for plot graphics/pointmap: expected '(#1,#2) => (...,...)'}%
+ \pgfplots@gobble@until@EOI
+ }%
+}
+\def\pgfplots@plot@handler@graphics@parsepointmap@loop@@@(#1,#2)(#3,#4){%
+ \def\pgfplotsplothandlergraphicspointmappointindex{}%
+ \def\pgfplots@loc@TMPc{#4}%
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \else
+ \ifx\pgfplots@plot@handler@graphics@pointmap@A@img\pgfutil@empty
+ \def\pgfplotsplothandlergraphicspointmappointindex{A}%
+ \else
+ \ifx\pgfplots@plot@handler@graphics@pointmap@B@img\pgfutil@empty
+ \def\pgfplotsplothandlergraphicspointmappointindex{B}%
+ \else
+ \ifx\pgfplots@plot@handler@graphics@pointmap@C@img\pgfutil@empty
+ \def\pgfplotsplothandlergraphicspointmappointindex{C}%
+ \else
+ \ifx\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty
+ \def\pgfplotsplothandlergraphicspointmappointindex{D}%
+ \else
+ \def\pgfplotsplothandlergraphicspointmappointindex{*}%
+ %\pgfplots@error{Sorry, the argument '(#1,#2) => (#3,#4)' of plot graphics/pointmap is superfluos; ignoring it.}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmathparse{#3}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ %
+ \pgfmathparse{#4}%
+ \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @img\endcsname{{\pgfplots@loc@TMPb}{\pgfmathresult}}%
+ \fi
+ %
+ %
+ \pgfutil@in@,{#2}%
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPa##1,##2\relax{%
+ \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @logical\endcsname{{#1}{##1}{##2}}%
+ %
+ \pgfplotsplothandlergraphicspointmappoint(#1,##1,##2)(#3,#4)
+ }%
+ \pgfplots@loc@TMPa#2\relax
+ \else
+ \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @logical\endcsname{{#1}{#2}{}}%
+ \pgfplotsplothandlergraphicspointmappoint(#1,#2,)(#3,#4)
+ \fi
+ \pgfplots@plot@handler@graphics@parsepointmap@loop
+}
+
+\def\pgfplotsplothandlergraphics@survey@pointmappoint(#1,#2,#3)(#4,#5){%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+ \pgfplots@coord@stream@coord
+}%
+
+% PRECONDITION:
+% \pgfplotsplothandlergraphicspointmappointindex is
+% empty if and only if (#4,#5) is empty
+% or it is an index among all points with non--empty (#4,#5) image
+% coordinates.
+\def\pgfplotsplothandlergraphicspointmappoint(#1,#2,#3)(#4,#5){%
+ \ifx\pgfplotsplothandlergraphicspointmappointindex\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPc{#3}%
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \pgfplotspointaxisxy{#1}{#2}%
+ \else
+ \pgfplotspointaxisxyz{#1}{#2}{#3}%
+ \fi
+ \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @canvas\endcsname{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ \fi
+}%
+
+% Computes view-related keys which should be communicated to the axis
+% in order to render the plot graphics correctly.
+%
+% @POSTCONDITION: \pgfplotsretval contains any required keys.
+\def\pgfplotsplothandlergraphicspointmapcomputerequiredview{%
+ \begingroup
+ \let\pgfplotsretval=\pgfutil@empty
+ \ifx\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty
+ \else
+ \pgfkeysgetvalue{/pgfplots/plot graphics/debug}\pgfplots@loc@TMPa
+ \def\pgfplots@loc@TMPb{false}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \let\pgfplots@loc@TMPa=\pgfplots@loc@TMPb
+ \fi
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \def\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug{0}%
+ \else
+ \def\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug{1}%
+ \fi
+ % The following implementation computes the 'unit vector
+ % ratio' of the IMAGE.
+ %
+ % It then tells PGFPlots to use the very same unit vector
+ % ratio for its axis.
+ %
+ %
+ % The actual implementation is dumb; it requires 4 (!) points for
+ % which BOTH, the 3D coordinates and the projected 2D
+ % coordinates relative to the image's lower left corner are
+ % available.
+ %
+ % Since the 2D projected coordinates are generated by the map
+ %
+ % T(x,y,z) = o + x e_x + y e_y + z e_z in R^2
+ % with o,e_x,e_y,e_z in R^2,
+ %
+ % I have 8 degrees of freedom (two for each of the four
+ % involved vectors). Thus, a simple approach is to provide 4
+ % linearly independend points to get 8 equations.
+ %
+ % Then, I solve for o,e_x,e_y,e_z
+ %
+ \pgfplotsmatrixnewempty\pgfplotsmatrix
+ \pgfplotsmatrixresize\pgfplotsmatrix88%
+ %
+ \pgfplotsarraynewempty\pgfplotsE
+ \pgfplotsarrayresize\pgfplotsE8%
+ %
+ \def\pgfplots@extractimg##1##2{%
+ \def\pgfplots@img@x{##1}%
+ \def\pgfplots@img@y{##2}%
+ }%
+ \def\pgfplots@extractlogical##1##2##3{%
+ \def\pgfplots@logical@x{##1}%
+ \def\pgfplots@logical@y{##2}%
+ \def\pgfplots@logical@z{##3}%
+ }%
+ % Assemble the linear system such that
+ % x = [
+ % exx
+ % exy
+ % eyx
+ % eyy
+ % ezx
+ % ezy
+ % ox
+ % oy]
+ % are the degrees of freedom.
+ \c@pgfplots@coordindex=0
+ \pgfplotsutilforeachcommasep{A,B,C,D}\as\pgfplots@loc@TMPa{%
+ \expandafter\expandafter\expandafter\pgfplots@extractimg\csname pgfplots@plot@handler@graphics@pointmap@\pgfplots@loc@TMPa @img\endcsname
+ \expandafter\expandafter\expandafter\pgfplots@extractlogical\csname pgfplots@plot@handler@graphics@pointmap@\pgfplots@loc@TMPa @logical\endcsname
+ \ifx\pgfplots@logical@z\pgfutil@empty
+ \else
+ %
+ \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,0\of\pgfplotsmatrix=\pgfplots@logical@x%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,1\of\pgfplotsmatrix\to{0}%
+ \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,2\of\pgfplotsmatrix=\pgfplots@logical@y%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,3\of\pgfplotsmatrix\to{0}%
+ \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,4\of\pgfplotsmatrix=\pgfplots@logical@z%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,5\of\pgfplotsmatrix\to{0}%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,6\of\pgfplotsmatrix\to{1}%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,7\of\pgfplotsmatrix\to{0}%
+ %
+ \pgfplotsarrayletentry\c@pgfplots@coordindex\of\pgfplotsE=\pgfplots@img@x
+ %
+ \advance\c@pgfplots@coordindex by1
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,0\of\pgfplotsmatrix\to{0}%
+ \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,1\of\pgfplotsmatrix=\pgfplots@logical@x%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,2\of\pgfplotsmatrix\to{0}%
+ \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,3\of\pgfplotsmatrix=\pgfplots@logical@y%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,4\of\pgfplotsmatrix\to{0}%
+ \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,5\of\pgfplotsmatrix=\pgfplots@logical@z%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,6\of\pgfplotsmatrix\to{0}%
+ \pgfplotsmatrixset \the\c@pgfplots@coordindex,7\of\pgfplotsmatrix\to{1}%
+ %
+ \pgfplotsarrayletentry\c@pgfplots@coordindex\of\pgfplotsE=\pgfplots@img@y
+ %
+ \advance\c@pgfplots@coordindex by1
+ \fi
+ }%
+ \ifx\pgfplots@logical@z\pgfutil@empty
+ \else
+ \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug
+ \pgfplotsplothandlergraphics@debug@matrix@to@string
+ \fi
+ %
+ %
+ \pgfplotsmatrixsolveLEQS\pgfplotsmatrix=\pgfplotsE
+ %
+ \edef\pgfmathresult{\pgfplotsarrayvalueofelem0\of\pgfplotsE}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@xx=\pgfmathresult
+ \edef\pgfmathresult{\pgfplotsarrayvalueofelem1\of\pgfplotsE}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@xy=\pgfmathresult
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}%
+ % they will be reversed again during the final
+ % processing:
+ \edef\pgfplots@xx{-\pgfplots@xx}%
+ \edef\pgfplots@xy{-\pgfplots@xy}%
+ \fi
+ %
+ \edef\pgfmathresult{\pgfplotsarrayvalueofelem2\of\pgfplotsE}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@yx=\pgfmathresult
+ \edef\pgfmathresult{\pgfplotsarrayvalueofelem3\of\pgfplotsE}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@yy=\pgfmathresult
+ \if r\pgfkeysvalueof{/pgfplots/y dir/value}%
+ % they will be reversed again during the final
+ % processing:
+ \edef\pgfplots@yx{-\pgfplots@yx}%
+ \edef\pgfplots@yy{-\pgfplots@yy}%
+ \fi
+ %
+ \edef\pgfmathresult{\pgfplotsarrayvalueofelem4\of\pgfplotsE}%
+ \pgfkeysgetvalue{/pgfplots/plot graphics/snap z}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \let\pgfplots@zx=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{veclen}{%
+ {\pgfplotsarrayvalueofelem4\of\pgfplotsE}%
+ {\pgfplotsarrayvalueofelem5\of\pgfplotsE}%
+ }%
+ \let\pgfplotszlen=\pgfmathresult
+ %
+ % compute 'snap z' relative to
+ % '\pgfplotszlen'
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@loc@TMPa}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplotszlen}}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{abs}{{\pgfplots@zx}}%
+ \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplots@loc@TMPa}{%
+ \pgfplotscoordmath{default}{zero}%
+ }{%
+ \let\pgfmathresult=\pgfplots@zx
+ }%
+ \fi
+ \pgfplotscoordmath{default}{tofixed}\pgfmathresult%
+ \let\pgfplots@zx=\pgfmathresult
+ %
+ \edef\pgfmathresult{\pgfplotsarrayvalueofelem5\of\pgfplotsE}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@zy=\pgfmathresult
+ \if r\pgfkeysvalueof{/pgfplots/z dir/value}%
+ % they will be reversed again during the final
+ % processing:
+ \edef\pgfplots@zx{-\pgfplots@zx}%
+ \edef\pgfplots@zy{-\pgfplots@zy}%
+ \fi
+ %
+ %
+ \if1\b@pgfplots@compat@plot@graphics@threedim
+ \pgfplotswarning{plot3 graphics compatibility mode}\pgfeov%
+ \else
+ \fi
+ %
+ \edef\pgfplotsretval{%
+ x={(\pgfplots@xx,\pgfplots@xy)},%
+ y={(\pgfplots@yx,\pgfplots@yy)},%
+ z={(\pgfplots@zx,\pgfplots@zy)},%
+ scale mode=scale uniformly,%
+ \if1\b@pgfplots@compat@plot@graphics@threedim
+ % this is the only strategy pre 1.6
+ scale uniformly strategy=change vertical limits,%
+ \fi
+ }%
+ %
+ \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug
+ \pgfplotsplothandlergraphicspointmapcomputerequiredview@debug@output
+ \fi
+ %
+ \ifx\pgfplotsretval\pgfutil@empty
+ \pgfplots@error{plot graphics failed to perform the 'auto adjust axis' feature \csname on@line\endcsname\space\space (compare 'plot graphics[debug]). The graphics might be scaled incorrectly. Perhaps the provided 'points' are not linearly independent?}%
+ \else
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/plot graphics/src}\pgfplots@loc@TMPa
+ \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}%
+ \immediate\write
+ \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug 16\else -1\fi
+ {PGFPlots plot graphics[auto adjust axis=true] {\the\t@pgfplots@tokc} \csname on@line\endcsname: determined options '\pgfplotsretval'.
+ \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug
+ See \the\t@pgfplots@tokc.dat for debug output.
+ \else
+ Use 'plot graphics[debug]' or 'plot graphics[debug=visual]' to generate debug output files.
+ \fi
+ ^^J}%
+ \endgroup
+ \fi
+ %
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsplothandlergraphics@debug@matrix@to@string{%
+ \pgfplotsmatrixtotext\pgfplotsmatrix
+ \let\pgfplotsmatrix@text=\pgfplotsretval
+ \pgfplotsarraytotext\pgfplotsE
+ \let\pgfplotsrhs@text=\pgfplotsretval
+}%
+\def\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug@output{%
+ \begingroup
+ \immediate\openout\w@pgf@writea=\pgfkeysvalueof{/pgfplots/plot graphics/src}.dat
+ \pgfplotsarrayselect0\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotsarrayselect1\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult
+ \immediate\write\w@pgf@writea{img x unit=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb\if r\pgfkeysvalueof{/pgfplots/x dir/value}(reversed due to x dir=reverse)\fi,}%
+ \pgfplotsarrayselect2\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotsarrayselect3\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult
+ \immediate\write\w@pgf@writea{img y unit=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb\if r\pgfkeysvalueof{/pgfplots/y dir/value}(reversed due to y dir=reverse)\fi,}%
+ \pgfplotsarrayselect4\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotsarrayselect5\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult
+ \immediate\write\w@pgf@writea{img z unit=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb,}%
+ \pgfplotsarrayselect6\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotsarrayselect7\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult
+ \immediate\write\w@pgf@writea{img origin=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb\if r\pgfkeysvalueof{/pgfplots/z dir/value}(reversed due to z dir=reverse)\fi,}%
+ \def\n{^^J}%
+ \def\t{^^I}%
+ \immediate\write\w@pgf@writea{canvasmapmatrix=[\pgfplotsmatrix@text];^^Jcanvasmaprhs = [\pgfplotsrhs@text];^^J}%
+ %
+ \immediate\write\w@pgf@writea{key configuration = \pgfplotsretval;^^J}%
+ \immediate\write\w@pgf@writea{use debug=visual to see the mapped keys.^^J}%
+ \immediate\closeout\w@pgf@writea
+ \endgroup
+}%
+
+\def\pgfplots@plot@handler@graphics@process@pointmap{%
+ \begingroup
+ % determine natural size:
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/plot graphics/lowlevel get natural size/.@cmd}{}%
+ \def\pgfplots@loc@TMPa##1##2{%
+ \global\pgf@x=##1
+ \global\pgf@y=##2
+ }%
+ \expandafter\pgfplots@loc@TMPa\pgfmathresult
+ \edef\pgfplots@W{\pgf@sys@tonumber\pgf@x}% natural WIDTH
+ \edef\pgfplots@H{\pgf@sys@tonumber\pgf@y}% natural HEIGHT
+ %
+ \def\pgfplots@extractimg##1##2{%
+ \def\pgfplots@img@x{##1}%
+ \def\pgfplots@img@y{##2}%
+ }%
+ \def\pgfplots@extractimgaspoint##1##2{%
+ \pgfqpoint{##1pt}{##2pt}%
+ }%
+ \expandafter\pgfplots@extractimg\pgfplots@plot@handler@graphics@pointmap@A@img% anchor 1 in image
+ \let\pgfplots@Ax=\pgfplots@img@x
+ \let\pgfplots@Ay=\pgfplots@img@y
+ %
+ \pgfplots@plot@handler@graphics@pointmap@A@canvas% the canvas coordinate corresponding to 'A'
+ \edef\pgfplots@ax{\pgf@sys@tonumber\pgf@x}% call it 'a'
+ \edef\pgfplots@ay{\pgf@sys@tonumber\pgf@y}%
+ %
+ % compute the CANVAS diagonal between the two anchors points a,b,
+ % dd := b-a
+ \pgfpointdiff
+ \pgfplots@plot@handler@graphics@pointmap@A@canvas
+ \pgfplots@plot@handler@graphics@pointmap@B@canvas
+ \edef\pgfplots@ddx{\pgf@sys@tonumber\pgf@x}%
+ \edef\pgfplots@ddy{\pgf@sys@tonumber\pgf@y}%
+ %
+ % compute the IMAGE diagonal between the two image anchor points A,B,
+ % DD := B - A
+ \pgfpointdiff
+ {\expandafter\pgfplots@extractimgaspoint\pgfplots@plot@handler@graphics@pointmap@A@img}
+ {\expandafter\pgfplots@extractimgaspoint\pgfplots@plot@handler@graphics@pointmap@B@img}%
+ \pgfplots@loop@CONTINUEtrue
+ \ifdim\pgf@x=0pt \pgfplots@loop@CONTINUEfalse \fi
+ \ifdim\pgf@y=0pt \pgfplots@loop@CONTINUEfalse \fi
+ \ifpgfplots@loop@CONTINUE
+ \else
+ \pgfplots@error{Sorry, the first two points with '=>' in plot graphics[points={}] are expected to have different image Y coordinates. Please reorder the sequence.}%
+ \fi
+ \edef\pgfplots@DDx{\pgf@sys@tonumber\pgf@x}%
+ \edef\pgfplots@DDy{\pgf@sys@tonumber\pgf@y}%
+ %
+ % What I need now is a shift and the CANVAS dimensions of the
+ % image. Both can be computed using the relative sizes dd/DD.
+ %
+ % The shift is needed to compute the lower left corner of the
+ % CANVAS image. thus, the lower left CANVAS image corresponds to
+ % the (0,0) coordinate in the IMAGE.
+ %
+ % Remember that 'A' is the anchor 1 in IMAGE coordinates. It is a
+ % vector from (0,0) --> (A_x,A_y) in IMAGE coordinates.
+ %
+ % Now, I want a vector (v_x,v_y) such that q + v = a in CANVAS
+ % coordinates. Here, 'q' is the lower left corner; it corresponds
+ % to the (0,0) in IMAGE coordinates. Thus, we have
+ % v = (a-q). Taking the relative sizes of dd and DD, we find
+ %
+ % DD_x / A_x = dd_x / v_x
+ % DD_y / A_y = dd_y / v_y
+ %
+ % and finally q = a-v is the lower left CANVAS coordinate.
+ \pgfmath@basic@divide@{\pgfplots@ddx}{\pgfplots@DDx}%
+ \let\pgfplots@x@rel=\pgfmathresult
+ %
+ \pgfmath@basic@divide@{\pgfplots@ddy}{\pgfplots@DDy}%
+ \let\pgfplots@y@rel=\pgfmathresult
+ %
+ \pgfmath@basic@multiply@{\pgfplots@Ax}{\pgfplots@x@rel}%
+ \let\pgfplots@vx=\pgfmathresult
+ %
+ \pgfmath@basic@multiply@{\pgfplots@Ay}{\pgfplots@y@rel}%
+ \let\pgfplots@vy=\pgfmathresult
+ %
+ %
+ %
+ %
+ % now, the canvas width. It is even simpler because it holds
+ %
+ % DD_x / dd_x = W / w
+ % DD_y / dd_y = H / h
+ %
+ % where (W,H) is the natural size (i.e. in IMAGE coordinates) of the picture and
+ % (w,h) is the size the picture will occupy in CANVAS coordinates.
+ %
+ \pgfmath@basic@multiply@{\pgfplots@x@rel}{\pgfplots@W}%
+ \let\pgfplots@w=\pgfmathresult
+ %
+ \pgfmath@basic@multiply@{\pgfplots@y@rel}{\pgfplots@H}%
+ \let\pgfplots@h=\pgfmathresult
+ %
+ \edef\pgfplots@plot@handler@graphics@DRAW@{%
+ \noexpand\pgfplots@invoke@pgfkeyscode{/pgfplots/plot graphics/lowlevel draw/.@cmd}{%
+ {\pgfplots@w pt}% width
+ {\pgfplots@h pt}% height
+ }%
+ }%
+ \pgfpointadd
+ {\pgfplots@plot@handler@graphics@pointmap@A@canvas}% the canvas coordinate corresponding to 'A'
+ {\pgfqpointscale{-1}
+ {\pgfqpoint{\pgfplots@vx pt}{\pgfplots@vy pt}}%
+ }%
+ \edef\pgfplots@plot@handler@graphics@pointmap@lowerleft@canvas{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+%
+ %
+ %
+ \begingroup
+ \pgftransformshift{}% simply take \pgf@x and \pgf@y
+ %
+ \node[/pgfplots/plot graphics/node] {%
+ \pgfplots@plot@handler@graphics@DRAW@
+ };%
+ \endgroup
+ %
+ %
+ \pgfkeysgetvalue{/pgfplots/plot graphics/debug}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPb{visual}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ % debug = visual: "sanitize" also triggers the visualization.
+ \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling{A}%
+ \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling{B}%
+ \fi
+ %
+ %
+ \ifx\pgfplots@plot@handler@graphics@pointmap@C@canvas\pgfutil@empty
+ \ifpgfplots@threedim
+ \pgfplotswarning{plot3 graphics too few inner anchors}\pgfeov%
+ \fi
+ \else
+ \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling{C}%
+ \ifx\pgfplots@plot@handler@graphics@pointmap@D@canvas\pgfutil@empty
+ \else
+ \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling{D}%
+ \fi
+ \fi
+ \endgroup
+}%
+
+% Checks if the logical and canvas coordinates of the point identified
+% by #1 are correct.
+%
+% #1: a character in {A,B,C...}.
+%
+\def\pgfplots@plot@handler@graphics@pointmap@sanitize@scaling#1{%
+ \begingroup
+ \expandafter\let\expandafter\pgfplots@point@img\csname pgfplots@plot@handler@graphics@pointmap@#1@img\endcsname
+ \expandafter\let\expandafter\pgfplots@point@canvas\csname pgfplots@plot@handler@graphics@pointmap@#1@canvas\endcsname
+ \expandafter\let\expandafter\pgfplots@point@logical\csname pgfplots@plot@handler@graphics@pointmap@#1@logical\endcsname
+ \expandafter\pgfplots@extractimgaspoint\pgfplots@point@img% anchor 3 in image
+ \edef\pgfplots@Cx{\pgf@sys@tonumber\pgf@x}%
+ \edef\pgfplots@Cy{\pgf@sys@tonumber\pgf@y}%
+ %
+ \pgfmath@basic@multiply@{\pgfplots@Cx}{\pgfplots@x@rel}%
+ \let\pgfplots@Cx=\pgfmathresult
+ %
+ \pgfmath@basic@multiply@{\pgfplots@Cy}{\pgfplots@y@rel}%
+ \let\pgfplots@Cy=\pgfmathresult
+ \pgfpointadd
+ {\pgfplots@plot@handler@graphics@pointmap@lowerleft@canvas}%
+ {\pgfpoint\pgfplots@Cx\pgfplots@Cy}%
+ \edef\pgfplots@point@canvas@check{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ \pgfpointdiff
+ {\pgfplots@point@canvas@check}%
+ {\pgfplots@point@canvas}%
+ \ifdim\pgf@x<0pt \pgf@x=-\pgf@x\fi
+ \ifdim\pgf@y<0pt \pgf@y=-\pgf@y\fi
+ \def\pgfplots@is@the@same@point{1}%
+ \ifdim\pgf@x>\pgfkeysvalueof{/pgfplots/plot graphics/squeeze tol}
+ \def\pgfplots@is@the@same@point{0}%
+ \else
+ \ifdim\pgf@y>\pgfkeysvalueof{/pgfplots/plot graphics/squeeze tol}
+ \def\pgfplots@is@the@same@point{0}%
+ \fi
+ \fi
+ \if0\pgfplots@is@the@same@point
+ %
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/plot graphics/src}\pgfplots@loc@TMPa
+ \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}%
+ \def\pgfplots@extractcoord##1##2##3{##1,##2,##3}%
+ \pgfplots@error{sorry, I can't fix the scaling of 'plot graphics {\the\t@pgfplots@tokc}'.
+ The points (\expandafter\pgfplots@extractcoord\pgfplots@plot@handler@graphics@pointmap@A@logical) and (\expandafter\pgfplots@extractcoord\pgfplots@plot@handler@graphics@pointmap@B@logical) are correct, but the point (\expandafter\pgfplots@extractcoord\pgfplots@point@logical) is wrong (its position vector has an error of (\the\pgf@x,\the\pgf@y) which is larger than 'squeeze tol=\pgfkeysvalueof{/pgfplots/plot graphics/squeeze tol}'). This is probably caused by improper relations between the axis' unit vectors because the view is incorrect.^^J
+ - Is the 'view' argument correct (matlab: [h,v] = view)? ^^J
+ - Does your image have a non-trivial 'plot box ratio' (matlab: ratio = pbaspect)?^^J
+ Please refer to the pgfplots manual for details. If you continue now, I'll show the points in the image}%
+ \endgroup
+ %
+ \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling@draw
+ %
+ \fi
+ \pgfkeysgetvalue{/pgfplots/plot graphics/debug}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPb{visual}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling@draw
+ \fi
+ \endgroup
+}
+
+\def\pgfplots@plot@handler@graphics@pointmap@sanitize@scaling@draw{%
+ \scope
+ \pgfsetstrokecolor{black}%
+ \pgfsetfillcolor{red}%
+ \pgfpathcircle{\pgfplots@point@canvas@check}{2pt}%
+ \pgfusepath{stroke,fill}%
+ \pgfsetfillcolor{green}%
+ \pgfpathcircle{\pgfplots@point@canvas}{2pt}%
+ \pgfusepath{stroke,fill}%
+ \draw[->,red]
+ \pgfextra{
+ \pgfpathmoveto{\pgfplots@point@canvas@check}%
+ \pgfpathlineto{\pgfplots@point@canvas}};
+ \endscope
+}%
+
+\def\pgfplots@plot@handler@graphics@usebb{%
+ \pgfpointdiff{\pgfplots@plot@handler@graphics@bb@first}{\pgfplots@plot@handler@graphics@bb@second}%
+ \def\pgfplots@plot@handler@graphics@finish@ok{1}%
+ \ifdim\pgf@x=0pt
+ \def\pgfplots@plot@handler@graphics@finish@ok{0}%
+ \else
+ \ifdim\pgf@y=0pt
+ \def\pgfplots@plot@handler@graphics@finish@ok{0}%
+ \fi
+ \fi
+ \if0\pgfplots@plot@handler@graphics@finish@ok
+ \pgfplots@error{Error using 'plot graphics': I got too few coordinates! I expected the lower left and upper right corners!}%
+ \xdef\pgfplots@plot@handler@graphics@bb@first{\noexpand\pgfqpoint{0pt}{0pt}}%
+ \xdef\pgfplots@plot@handler@graphics@bb@first{\noexpand\pgfqpoint{0pt}{0pt}}%
+
+ \fi
+ \begingroup
+ % determine the lower left / upper right corners.
+ \pgfplots@plot@handler@graphics@bb@first
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgfplots@plot@handler@graphics@bb@second
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ %
+ % xc,yc = lower left corner
+ % x,y = upper right
+ \ifdim\pgf@xa<\pgf@xb
+ \pgf@xc=\pgf@xa
+ \pgf@x=\pgf@xb
+ \else
+ \pgf@xc=\pgf@xb
+ \pgf@x=\pgf@xa
+ \fi
+ \ifdim\pgf@ya<\pgf@yb
+ \pgf@yc=\pgf@ya
+ \pgf@y=\pgf@yb
+ \else
+ \pgf@yc=\pgf@yb
+ \pgf@y=\pgf@ya
+ \fi
+ \advance\pgf@x by-\pgf@xc
+ \advance\pgf@y by-\pgf@yc
+ \edef\pgfplots@plot@handler@graphics@DRAW@{%
+ \noexpand\pgfplots@invoke@pgfkeyscode{/pgfplots/plot graphics/lowlevel draw/.@cmd}{%
+ {\the\pgf@x}% width
+ {\the\pgf@y}% height
+ }%
+ }%
+ \pgf@x=\pgf@xc
+ \pgf@y=\pgf@yc
+ \pgftransformshift{}%
+ \node[/pgfplots/plot graphics/node] {%
+ \pgfplots@plot@handler@graphics@DRAW@
+ };%
+ \endgroup
+}%
+% initial value for /pgfplots/plots graphics/lowlevel draw:
+\def\pgfplots@plot@handler@graphics@DRAW#1#2{%
+ \pgfkeysgetvalue{/pgfplots/plot graphics/includegraphics}{\pgfplots@loc@TMPc}%
+ \pgfkeysgetvalue{/pgfplots/plot graphics/src}{\pgfplots@loc@TMPd}%
+ \ifx\pgfplots@loc@TMPd\pgfutil@empty
+ \pgfplots@error{Error using 'plot graphics': I don't have a graphics file name! Please set the '/pgfplots/plot graphics/src' key to the image file name. Skipping this plot.}%
+ \else
+ \begingroup
+ \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPc}%
+ %
+ \def\pgfplots@loc@TMPa{#1}%
+ \def\pgfplots@loc@TMPb{#2}%
+ %
+ \edef\pgfplots@loc@TMPc{%
+ \the\t@pgfplots@toka,%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty\else width=#1,\fi
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty\else height=#2,\fi
+ }%
+ \pgfmath@smuggleone\pgfplots@loc@TMPc
+ \endgroup
+ %
+ \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPc}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPd}%
+ \edef\pgfplots@loc@TMPc{%
+ \noexpand\pgfkeysvalueof{/pgfplots/plot graphics/includegraphics cmd}%
+ [\the\t@pgfplots@toka]
+ {\the\t@pgfplots@tokb}}%
+ \pgfplots@loc@TMPc
+ \fi
+}%
+
+\def\pgfplots@plot@handler@graphics@getnaturalsize{%
+ \begingroup
+ \setbox0=\hbox{%
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/plot graphics/lowlevel draw/.@cmd}{{}{}}%
+ }%
+ \pgf@x=\wd0
+ \pgf@y=\ht0
+ \ifdim\dp0>0pt
+ \advance\pgf@y by\dp0
+ \else
+ \ifdim\dp0<0pt
+ \advance\pgf@y by-\dp0
+ \fi
+ \fi
+ \xdef\pgfplots@glob@TMPb{{\the\pgf@x}{\the\pgf@y}}%
+ \endgroup
+ \let\pgfmathresult=\pgfplots@glob@TMPb
+}%
+
+% legends for plot graphics should not use 'plot graphics' themselfes
+% (for obvious reasons).
+% This key handles that. Furthermore, it remembers the plot mark for
+% the legend -- although no plot mark is allowed for plot graphics as
+% such.
+\pgfkeysdef{/pgfplots/plot graphics/@prepare legend}{%
+ \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}%
+ %
+ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler
+ \t@pgfplots@tokc=\expandafter{\pgfplots@basiclevel@plothandler}%
+ %
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfkeys{/pgfplots/every legend image post/.append code={%
+ \noexpand\def\noexpand\tikz@plot@handler{\the\t@pgfplots@tokc}%
+ \ifx\tikz@plot@mark\pgfutil@empty
+ \else
+ \noexpand\pgfkeysalso{/tikz/mark=\tikz@plot@mark}%
+ \fi
+ }%
+ }%
+ }%
+ \pgfplots@loc@TMPa
+}
+
+
+
+% Input : \pgfplots@stored@current@data contains the coordinate stream
+% Output: \pgfplots@stored@current@data contains the (modified)
+% coordinate stream
+\def\pgfplots@apply@zbuffer{%
+ \ifcase\pgfplotsplothandlermesh@zbuffer@choice\relax
+ % none.
+ \or
+ % reverse x seq: only for 'mesh'
+ \if\pgfplots@meshmode n%
+ \pgfplots@error{Sorry, `/pgfplots/z buffer=reverse x seq' can only be used for mesh/surf plots.}%
+ \else
+ \pgfplotsautocompletemeshkeys
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = rowwise -> scanline is cols!
+ \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsscanlinelength
+ \pgfplots@apply@zbuffer@reversescanline%
+ \else
+ % ordering = colwise: scanline is rows!
+ \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsscanlinelength
+ \pgfplots@apply@zbuffer@reversetransposed%
+ \fi
+ \fi
+ \or
+ % reverse y seq: only for 'mesh'
+ \if\pgfplots@meshmode n%
+ \pgfplots@error{Sorry, `/pgfplots/z buffer=reverse y seq' can only be used for mesh/surf plots.}%
+ \else
+ \pgfplotsautocompletemeshkeys
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = rowwise -> scanline is cols!
+ \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsscanlinelength
+ \pgfplots@apply@zbuffer@reversetransposed%
+ \else
+ % ordering = colwise: scanline is rows!
+ \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsscanlinelength
+ \pgfplots@apply@zbuffer@reversescanline%
+ \fi
+ \fi
+ \or
+ % reverse xy seq:
+ \ifpgfplots@LUA@backend@supported
+ \pgfplotsutil@directlua{pgfplots.texApplyZBufferReverseStream()}%
+ \else
+ \begingroup
+ \def\pgfplots@coord@stream@start{%
+ \pgfplotsprependlistXnewempty{reversed}%
+ }%
+ \def\pgfplots@coord@stream@coord{%
+ \expandafter\pgfplotsprependlistXpushfront\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced}\to{reversed}%
+ }%
+ \def\pgfplots@coord@stream@end{%
+ \pgfplotsprependlistXlet\pgfplots@loc@TMPa={reversed}%
+ \pgfplotsprependlistXnewempty{reversed}% clear it
+ \global\let\pgfplotsglobalretval=\pgfplots@loc@TMPa
+ }%
+ \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@stored@current@data}%
+ \endgroup
+ \let\pgfplots@stored@current@data=\pgfplotsglobalretval
+ \global\let\pgfplotsglobalretval=\pgfutil@empty
+ \fi
+ \or
+ % sort.
+ \if\pgfplots@meshmode n%
+ \ifpgfplots@LUA@backend@supported
+ \pgfplotsutil@directlua{pgfplots.texApplyZBufferSort()}%
+ \else
+ \pgfplots@apply@zbuffer@sort@coordinates
+ \fi
+ \else
+ % meshmode handles sort separately!
+ \fi
+ \or
+ % z buffer=auto
+ %
+ % I can decide for each axis if coordinate reversal is
+ % necessary.
+ % Idea: check if axis side planes are on foreground or not (a
+ % very simple task)! I
+ % only need to know whether [xy] coordinates are sorted
+ % ascending or descending. This information is already ready.
+ %
+ \ifcase\pgfplotsplothandlermesh@matrixinput
+ % mesh input=patches
+ \ifpgfplots@threedim
+ \if\pgfplots@meshmode n%
+ \else
+ \pgfkeys{/pgfplots/z buffer=sort}%
+ \fi
+ \else
+ \pgfkeys{/pgfplots/z buffer=none}%
+ \fi
+ \else
+ % mesh input=lattice|image
+ \begingroup
+ \if+\pgfkeysvalueof{/pgfplots/x coord sorting}%
+ \def\pgfplots@minmaxvalue@x{0}%
+ \else
+ \def\pgfplots@minmaxvalue@x{0}%
+ \fi
+ \if+\pgfkeysvalueof{/pgfplots/y coord sorting}%
+ \def\pgfplots@minmaxvalue@y{0}%
+ \else
+ \def\pgfplots@minmaxvalue@y{1}%
+ \fi
+ \pgfplotsifaxissurfaceisforeground{\pgfplots@minmaxvalue@x vv}{%
+ \def\pgfplots@reverse@x{1}%
+ }{%
+ \def\pgfplots@reverse@x{0}%
+ }%
+ \pgfplotsifaxissurfaceisforeground{v\pgfplots@minmaxvalue@y v}{%
+ \def\pgfplots@reverse@y{1}%
+ }{%
+ \def\pgfplots@reverse@y{0}%
+ }%
+ \if1\pgfplots@reverse@x
+ \if1\pgfplots@reverse@y
+ \pgfkeys{/pgfplots/z buffer=reverse xy seq}%
+ \else
+ \pgfkeys{/pgfplots/z buffer=reverse x seq}%
+ \fi
+ \else
+ \if1\pgfplots@reverse@y
+ \pgfkeys{/pgfplots/z buffer=reverse y seq}%
+ \else
+ \pgfkeys{/pgfplots/z buffer=none}%
+ \fi
+ \fi
+%\message{z buffer=auto mode chose z buffer= \ifcase\pgfplotsplothandlermesh@zbuffer@choice NONE \or reverse x seq \or reverse y seq \or reverse xy seq \or sort\or default \fi. mesh ordering = \ifcase\pgfplots@plot@mesh@ordering x varies/rowwise\or y varies/colwise\fi}%
+ \pgfmath@smuggleone\pgfplotsplothandlermesh@zbuffer@choice
+ \endgroup
+ % 'z buffer' is no longer 'auto' now:
+ \pgfplots@apply@zbuffer
+ \fi
+ \or
+ % z buffer=default.
+ \if\pgfplots@meshmode n%
+ % mesh mode deactivated!
+ \else
+ % mesh=true
+ \if2\pgfplotsplothandlermesh@matrixinput
+ % mesh input=image
+ % we do not want z buffering by default because it
+ % leads to undefined color associations.
+ % Use 'z buffer=auto' to re-enable it
+ \pgfkeys{/pgfplots/z buffer=none}%
+ \else
+ \pgfkeysalso{/pgfplots/z buffer=auto}%
+ \fi
+ \pgfplots@apply@zbuffer%
+ \fi
+ \fi
+}%
+
+\def\pgfplots@apply@zbuffer@sort@coordinates{%
+ \begingroup
+ \def\pgfplots@coord@stream@start{%
+ \pgfplotsarraynewempty\pgfplots@zbuffer@local
+ \pgfplotsarrayresize\pgfplots@zbuffer@local{\numcoords}%
+ \c@pgfplots@scanlineindex=0
+ \def\pgfplots@zbuffer@local@SETCUR####1{%
+ \expandafter\pgfplotsarrayset\c@pgfplots@scanlineindex\of\pgfplots@zbuffer@local\to{####1}%
+ }%
+ }%
+ \def\pgfplots@coord@stream@coord{%
+ \expandafter\pgfplots@zbuffer@local@SETCUR\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded}%
+ \advance\c@pgfplots@scanlineindex by1
+ }%
+ \def\pgfplots@coord@stream@end{%
+ \ifnum\c@pgfplots@scanlineindex=\numcoords
+ \else
+ \pgfplotsarrayresize\pgfplots@zbuffer@local{\c@pgfplots@scanlineindex}%
+ \fi
+ \pgfkeyslet{/pgfplots/iflessthan/.@cmd}\pgfplots@apply@zbuffer@SORT@iflessthan
+ \pgfkeysdef{/pgfplots/array/unscope pre}{%
+ \pgfplotsapplistXnewempty{\pgfp@sortedlist}%
+ \pgfplotsarrayforeachungrouped\pgfplots@zbuffer@local\as\curelem{%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\expandafter{\curelem}}\to{\pgfp@sortedlist}%
+ }%
+ \pgfplotsapplistXlet\pgfplots@loc@TMPa={\pgfp@sortedlist}%
+ \global\let\pgfplotsglobalretval=\pgfplots@loc@TMPa
+ }%
+ \pgfkeysdef{/pgfplots/array/unscope post}{}%
+ \pgfplotsarraysort\pgfplots@zbuffer@local
+ }%
+ \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@stored@current@data}%
+ \endgroup
+ \let\pgfplots@stored@current@data=\pgfplotsglobalretval
+ \global\let\pgfplotsglobalretval=\pgfutil@empty
+}%
+% Defines \pgfplotsglobalretval (globally) to be a partial reversion of the
+% (normalized) 2d coordinate sequence '#1'.
+%
+% In other words, the normalized coordinate sequence '#1' is visited
+% linearly and while we go, each scanline is reversed. The result is
+% collected into \pgfplotsglobalretval.
+%
+% This implements the 'z buffer=reverse x seq' feature for
+% ordering=y varies.
+%
+% PRECONDITION:
+% \pgfplotsscanlinelength contains the scanline length
+% POSTCONDITION:
+% \pgfplotsglobalretval contains the partial reversion.
+\def\pgfplots@apply@zbuffer@reversescanline{%
+ \ifpgfplots@LUA@backend@supported
+ \pgfplotsutil@directlua{pgfplots.texApplyZBufferReverseScanline(\pgfplotsscanlinelength)}%
+ \else
+ \begingroup
+ \def\pgfplots@coord@stream@start{%
+ \pgfplotsprependlistXnewempty{reversedscanline}%
+ \c@pgfplots@scanlineindex=0
+ \pgfplotsapplistXnewempty{\resultlist}%
+ }%
+ \def\pgfplots@coord@stream@coord{%
+ \expandafter\pgfplotsprependlistXpushfront\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced}\to{reversedscanline}%
+ \advance\c@pgfplots@scanlineindex by1
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsscanlinelength\relax
+ \pgfplotsprependlistXlet\pgfplots@loc@TMPa={reversedscanline}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPa}\to\resultlist
+ \pgfplotsprependlistXnewempty{reversedscanline}%
+ \c@pgfplots@scanlineindex=0
+ \fi
+ }%
+ \def\pgfplots@coord@stream@end{%
+ \pgfplotsprependlistXlet\pgfplots@loc@TMPa={reversedscanline}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplots@zbuffer@error
+ \fi
+ \pgfplotsapplistXlet\pgfplots@loc@TMPa={\resultlist}%
+ \global\let\pgfplotsglobalretval=\pgfplots@loc@TMPa
+ }%
+ \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@stored@current@data}%
+ \endgroup
+ \let\pgfplots@stored@current@data=\pgfplotsglobalretval
+ \global\let\pgfplotsglobalretval=\pgfutil@empty
+ \fi
+%\message{I have performed partial reversion of '#1' and got '\pgfplotsglobalretval'!}%
+}%
+
+% A very similar method of \pgfplots@apply@zbuffer@reversescanline,
+% but this one keeps everything inside of each scanline in the
+% original ordering, and reverses the ordering in which whole
+% scanlines occur.
+\def\pgfplots@apply@zbuffer@reversetransposed{%
+ \ifpgfplots@LUA@backend@supported
+ \pgfplotsutil@directlua{pgfplots.texApplyZBufferReverseTransposed(\pgfplotsscanlinelength)}%
+ \else
+ \begingroup
+ \def\pgfplots@coord@stream@start{%
+ \pgfplotsapplistXnewempty{\scanline}%
+ \c@pgfplots@scanlineindex=0
+ \pgfplotsprependlistXnewempty{resultlist}%
+ }%
+ \def\pgfplots@coord@stream@coord{%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced}\to{\scanline}%
+ \advance\c@pgfplots@scanlineindex by1
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsscanlinelength\relax
+ \pgfplotsapplistXlet\pgfplots@loc@TMPa={\scanline}%
+ \expandafter\pgfplotsprependlistXpushfront\expandafter{\pgfplots@loc@TMPa}\to{resultlist}
+ \pgfplotsapplistXnewempty{\scanline}%
+ \c@pgfplots@scanlineindex=0
+ \fi
+ }%
+ \def\pgfplots@coord@stream@end{%
+ \pgfplotsapplistXlet\pgfplots@loc@TMPa={\scanline}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplots@zbuffer@error
+ \fi
+ \pgfplotsprependlistXlet\pgfplots@loc@TMPa={resultlist}%
+ \global\let\pgfplotsglobalretval=\pgfplots@loc@TMPa
+ }%
+ \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@stored@current@data}%
+ \endgroup
+ \let\pgfplots@stored@current@data=\pgfplotsglobalretval
+ \global\let\pgfplotsglobalretval=\pgfutil@empty
+ \fi
+%\message{I have performed partial reversion (reverse transposed) of '#1' and got '\pgfplotsglobalretval'!}%
+}%
+\def\pgfplots@zbuffer@error{%
+ \pgfplots@error{An internal error occured during z buffer reorderings: the rows/cols where not balanced! I have rows= \pgfkeysvalueof{/pgfplots/mesh/rows}, cols=\pgfkeysvalueof{/pgfplots/mesh/cols}. If this happens to be wrong, you might want to provide rows and cols manually.}%
+}
+
+% A special '<' operation which returns true if the point coordinate
+% '#1' is BEHIND #2 with respect to the current 3D view.
+\def\pgfplots@apply@zbuffer@SORT@iflessthan#1#2#3#4\pgfeov{%
+ \pgfplotsaxisdeserializedatapointfrom{#1}%
+ \pgfplotsmathvectorfromstring{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z}{default}%
+ \pgfplotsmathvectorscalarproduct{\pgfplots@view@dir@threedim}{\pgfplotsretval}{default}%
+ \let\pgfplots@apply@zbuffer@SORT@iflessthan@a=\pgfplotsretval
+ %
+ \pgfplotsaxisdeserializedatapointfrom{#2}%
+ \pgfplotsmathvectorfromstring{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z}{default}%
+ \pgfplotsmathvectorscalarproduct{\pgfplots@view@dir@threedim}{\pgfplotsretval}{default}%
+ \let\pgfplots@apply@zbuffer@SORT@iflessthan@b=\pgfplotsretval
+ %
+ \pgfplotscoordmath{default}{if less than}{\pgfplots@apply@zbuffer@SORT@iflessthan@b}{\pgfplots@apply@zbuffer@SORT@iflessthan@a}{%
+ #3\relax
+ }{%
+ #4\relax
+ }%
+}%
+
+
+% Defines \pgfmathresult to be the view depth of a three component
+% vector. The third component will be used if and only if the boolean
+% \ifpgfplots@curplot@threedim is true.
+% The return value will be assigned in floating point.
+%
+% The arguments need to be numbers (will be parsed with
+% \pgfmathfloatparsenumber).
+% @see \pgfplotsmathviewdepthxyz
+% DEPRECATED use \pgfplotsmathvectorviewdepth instead!
+\def\pgfplotsmathfloatviewdepthxyz#1#2#3{%
+ \begingroup
+ \pgfmathfloatparsenumber{#1}\let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfmathfloatparsenumber{#2}\let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfmathfloatparsenumber{#3}\let\pgfplots@loc@TMPc=\pgfmathresult
+ \edef\pgfplots@loc@TMPa{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}}%
+ \expandafter\pgfplotsmathfloatviewdepthxyz@\pgfplots@loc@TMPa
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% #1: a 3d vector of the form x,y,z in 'default' coordmath format
+% defines \pgfplotsretval to the view depth
+% of the point
+%
+% Use \pgfplotsmathvectorfromstring{x,y,z}{default} to transform a
+% vector into the requested format.
+%
+% Use \pgfplotscoordmath{default}{tofixed}{\pgfplotsretval} to
+% transform the result into fixed point representation.
+\def\pgfplotsmathvectorviewdepth#1{%
+ \pgfplotsmathvectorscalarproduct{#1}{\pgfplots@view@dir@threedim}{default}%
+}%
+
+\def\pgfplotsmathfloatviewdepthxyz@#1#2#3{%
+ \pgfplots@error{Sorry, you can't use \string\pgfplotsmathfloatviewdepthxyz\space in this context.}%
+}%
+\def\pgfplotsmathfloatviewdepthxyz@infigure#1#2#3{%
+ \pgfplotsmathvectorfromstring{\pgfplots@view@dir@threedim}{float}%
+ \pgfplotsmathvectorscalarproduct{#1,#2,#3}{\pgfplotsretval}{float}% FIXME : \pgfplots@view@dir@threedim might have a different math format!
+ \let\pgfmathresult=\pgfplotsretval
+}%
+
+% Similar to \pgfplotsmathfloatviewdepthxyz, but this always relies on
+% fixed point arithmetics.
+% DEPRECATED use \pgfplotsmathvectorviewdepth instead
+\def\pgfplotsmathviewdepthxyz#1#2#3{\pgfplotsmathviewdepthxyz@{#1}{#2}{#3}}
+\def\pgfplotsmathviewdepthxyz@#1#2#3{%
+ \pgfplots@error{Sorry, you can't use \string\pgfplotsmathviewdepthxyz\space in this context.}%
+}
+\def\pgfplotsmathviewdepthxyz@infigure#1#2#3{%
+ \pgfplotsmathvectorfromstring{\pgfplots@view@dir@threedim@unitlength}{pgfbasic}%
+ \pgfplotsmathvectorscalarproduct{#1,#2,#3}{\pgfplotsretval}{pgfbasic}% FIXME : \pgfplots@view@dir@threedim might have a different math format!
+ \let\pgfmathresult=\pgfplotsretval
+}%
+
+
+% Evaluate shell commands.
+%
+% #1 = filename prefix for .sh and .out files (optional,
+% default is \jobname)
+% #2 = shell command text
+%
+% Description:
+%
+% This command will write the command text to a file called
+% #1.sh. Then it calls sh (using the \write18 mechanism) to
+% execute the file and redirect the output to a file called
+% #1.out.
+% In contrast to pgfplotgnuplot the result has to be read
+% from #1.out later using \pgfplotxyfile. (This allows
+% using the function from within the plot table functions
+% as well.)
+%
+% Example:
+%
+% \pgfplothandlerlineto
+% \pgfshell[\jobname]{cat table.dat}
+% \pgfplotxyfile{\jobname.out}
+
+\pgfutil@IfUndefined{w@pgf@writea}{%
+ \csname newwrite\endcsname\pgf@shellwrite
+}{%
+ \let\pgf@shellwrite=\w@pgf@writea
+}
+\newif\ifpgf@resample@shell
+
+\def\pgfshell{\pgfutil@ifnextchar[{\pgf@shell}{\pgf@shell[\jobname]}}%}
+\def\pgf@shell[#1]#2{%
+ \pgf@resample@shelltrue%
+ % Check, whether it is up-to-date
+ \openin\pgfutil@inputcheck=#1.sh
+ \ifeof\pgfutil@inputcheck%
+ \else%
+ \read\pgfutil@inputcheck to\pgf@shell@line%
+ \edef\pgf@plot@code{#2\space}%
+ \ifx\pgf@plot@code\pgf@shell@line%
+ \openin\pgfutil@inputcheck=#1.out
+ \ifeof\pgfutil@inputcheck%
+ \else%
+ \pgf@resample@shellfalse
+ \fi%
+ \fi%
+ \fi
+ \ifpgf@resample@shell%
+ \immediate\openout\pgf@shellwrite=#1.sh
+ \immediate\write\pgf@shellwrite{#2}%
+ \immediate\closeout\pgf@shellwrite%
+ \pgfplots@shellescape{sh #1.sh > #1.out}
+ \fi%
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotscore.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotscore.code.tex
new file mode 100644
index 0000000000..bc37418c68
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotscore.code.tex
@@ -0,0 +1,465 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2014 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\def\pgfplotsset#{\pgfqkeys{/pgfplots}}
+
+% This is *identical* to \pgfutil@IfUndefined . I copied it here
+% because pgf up to and including version 2.10 does not contain it.
+\def\pgfplotsutil@IfUndefined#1{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname#1\endcsname\relax
+ \expandafter\pgfutil@firstoftwo
+ \else
+ \expandafter\pgfutil@secondoftwo
+ \fi
+}
+\pgfplotsutil@IfUndefined{pgfutil@IfUndefined}{\let\pgfutil@IfUndefined=\pgfplotsutil@IfUndefined}{}
+
+\def\pgfplotsloglevel{4}%
+
+\def\pgfplots@log#1#2{%
+ \ifnum#1>\pgfplotsloglevel\relax
+ \else
+ \ifnum\inputlineno=1
+ \pgfutil@IfUndefined{@currenvline}{%
+ \def\pgfplots@log@tmp{}%
+ }{%
+ \let\pgfplots@log@tmp=\@currenvline
+ }%
+ \else
+ \def\pgfplots@log@tmp{ on input line \the\inputlineno}%
+ \fi
+ \immediate\write-1{Package pgfplots info\pgfplots@log@tmp: #2}%
+ \fi
+}%
+
+\newif\ifpgfplots@LUA@supported
+\pgfkeys{
+ /pgfplots/lua support/.is choice,
+ /pgfplots/lua support/true/.code={\pgfplots@LUA@supportedtrue},%
+ /pgfplots/lua support/false/.code={\pgfplots@LUA@supportedfalse},%
+ /pgfplots/lua support/auto/.code={%
+ \pgfutil@IfUndefined{directlua}{%
+ \pgfplots@LUA@supportedfalse
+ }{%
+ \pgfplots@LUA@supportedtrue
+ }%
+ },%
+ /pgfplots/lua support/auto,% this is the default anyway
+}
+
+% this is an emergency key which allows to switch off LUA support in
+% pgfplots early at boot time.
+%
+% use \def\pgfplotsenablelua{0} to switch it off. '1' switches it on
+% (or uncommenting the line).
+\pgfutil@IfUndefined{pgfplotsenablelua}{}{%
+ \ifpgfplots@LUA@supported
+ \def\pgfplots@glob@TMPc{1}%
+ \ifx\pgfplots@glob@TMPc\pgfplotsenablelua
+ \message{Pgfplots: found emergency control flag \string\pgfplotsenablelua=1. Keeping LUA active.^^J}%
+ \else
+ \message{Pgfplots: found emergency control flag \string\pgfplotsenablelua!=1. Disabling LUA support.^^J}%
+ \pgfplots@LUA@supportedfalse
+ \fi
+ \fi
+}%
+
+\def\pgfplots@alloc@catcodetable{%
+ % it is task of the TeX format to load this.
+ % context comes with it out-of-the box, and pgfplots.sty loads luatexbase.sty
+ \pgfutil@IfUndefined{newcatcodetable}{%
+ % Oh. The TeX format does not have support for
+ % \newcatcodetable and the associated pgfplots module did not
+ % load an addon-package!?
+ %
+ % We _need_ the catcodes which are active when pgfplots starts.
+ % And there is no central mechanism to allocate catcodes. I will
+ % take one for me now and hope that it will not be used (soon).
+ \def\pgfplotsglobalretval{41}%
+ }{%
+ % the macro \pgfplots@luabackend@table is never used by TeX
+ % code.
+ % I only need the value inside of the .lua files: whenever
+ % they print something, they need to use it.
+ \newcatcodetable\pgfplots@luabackend@table
+ \let\pgfplotsglobalretval=\pgfplots@luabackend@table
+ }%
+}%
+
+\ifpgfplots@LUA@supported
+ \let\pgfplotsutil@directlua=\directlua
+ \let\pgfplotsutil@directlua@std=\pgfplotsutil@directlua
+ \pgfplotsutil@directlua{
+ tex.enableprimitives("pgfplotsutil@",{ "savecatcodetable", "luaescapestring"})}%
+ \def\pgfplotsutil@directlua@trace#1{%
+ \directlua{%
+ texio.write_nl("CALLING\string\n\pgfplotsutil@luaescapestring{#1}");
+ #1%
+ }%
+ }%
+ \pgfplots@log3{Initializing with LUA version \pgfplotsutil@directlua{tex.print(_VERSION)}}%
+ % attention: this can set 'lua support=false' as a side-effect:
+ \pgfplotsutil@directlua{require("pgfplots"); pgfplots.pgfplotsversion = "\pgfplotsversion";}%
+ %
+ \pgfplots@alloc@catcodetable
+ \c@pgf@counta=\pgfplotsglobalretval
+ \pgfplotsutil@savecatcodetable\c@pgf@counta
+ \pgfplotsutil@directlua{pgfplots.LOAD_TIME_CATCODETABLE = \the\c@pgf@counta}%
+\fi
+
+
+\def\pgfplots@error#1{\PackageError{pgfplots}{#1}{}}%
+\def\pgfplotstable@error@pkg#1{\PackageError{pgfplotstable}{#1}{}}%
+% DO NOT USE THIS METHOD DIRECTLY: use \pgfplotswarning{<warning name>}<args>\pgfeov
+\pgfplotsutil@IfUndefined{PackageWarning}{%
+ \def\pgfplots@warning#1{\pgfplots@message{! Package pgfplots Warning:
+#1}}%
+}{%
+ \def\pgfplots@warning#1{\PackageWarning{pgfplots}{#1}{}}%
+}%
+
+\def\pgfplots@message#1{%
+ \immediate\write16{#1}%
+}%
+
+\pgfutil@IfUndefined{pgfkeys}{%
+ \pgfplots@error{It seems your version of PGF/Tikz is older than 2.00. Unfortunately, pgfplots requires at least version 2.00 ... you may need to update your TeX-Distribution or install PGF manually, sorry}%
+}{\relax}
+
+% Throws exception `#1' with arguments `#2'.
+%
+% #1 : the exception name
+% #2: all what comes after the exception name is considered to be argument
+% (or arguments) for the exception '#1'.
+% the \pgfeov is IMPORTANT as it delimits the argument.
+%
+% Note that all standard pgfplots exceptions provide a feature to
+% exchange the error message text: define \pgfplotsexceptionmsg
+% set a replacement.
+\def\pgfplotsthrow#1#2\pgfeov{%
+ \def\pgfkeyscurrentkey{/pgfplots/exception/#1}%
+ \pgfkeysvalueof{/pgfplots/exception/#1/.@cmd}#2\pgfeov
+}%
+\let\pgfplotsthrow@orig=\pgfplotsthrow
+
+% Generates warning `#1' with argument(s) `#2'.
+%
+% It works in exactly the same way as \pgfplotsthrow.
+\def\pgfplotswarning#1#2\pgfeov{%
+ \def\pgfkeyscurrentkey{/pgfplots/warning/#1}%
+ \pgfkeysvalueof{/pgfplots/warning/#1/.@cmd}#2\pgfeov
+}%
+
+\def\pgfplotsthrow@warning#1{%
+ \pgfplots@warning{#1}%
+ \immediate\write-1{ [warning \pgfkeyscurrentkey]}%
+}%
+
+\def\pgfplots@assert@not@zero#1#2{%
+ \ifdim#1=0sp %
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{#2}\pgfeov
+ \fi
+}%
+
+% A primitive try #1 catch #2 end block.
+%
+% It tries code #1. If any exception occurs within, it suppresses the
+% exception and tries to continue. It then invokes #2 as soon as it
+% can.
+%
+% You can use \pgfplotsrethrow in #2.
+%
+% ATTENTION: this is a simple attempt to simulate error control. Don't
+% rely on it too heavily! In the moment, I am not even sure if it can
+% be nested (perhaps you need to introduce extra scopes since
+% \pgfplotstry doesn't).
+\long\def\pgfplotstry#1\catch#2\endpgfplotstry{%
+ \global\let\pgfplotstry@exception\pgfutil@empty
+ \def\pgfplotsthrow##1##2\pgfeov{\gdef\pgfplotstry@exception{{##1}{##2}}}%
+ #1\relax%
+ \let\pgfplotsthrow=\pgfplotsthrow@orig
+ \ifx\pgfplotstry@exception\pgfutil@empty
+ \else
+ #2%
+ \fi
+ \global\let\pgfplotstry@exception\pgfutil@empty
+}%
+\def\pgfplotsrethrow{\expandafter\pgfplotsthrow\pgfplotstry@exception\pgfeov}%
+
+\pgfkeys{
+ % #1: the argument which should have been assigned.
+ % #2: an error message.
+ /pgfplots/exception/invalid argument/.code 2 args={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#2}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ \let#1=\pgfutil@empty
+ },%
+ % #1 : the layer name
+ % #2 : additional context information (message)
+ /pgfplots/exception/inactive layer/.code 2 args={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{Sorry, the layer '#1' has not been activated but it is referenced in #2. Perhaps you misspelled it? Each referenced layer must be activated (expect for layer 'discard').}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ },%
+ % #1: the argument which should have been assigned.
+ % #2: an error message.
+ /pgfplots/exception/no such element/.code 2 args={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#2}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ \let#1=\pgfutil@empty
+ },%
+ /pgfplots/exception/invalid color component/.code 2 args={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#2}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ \let#1=\pgfutil@empty
+ },%
+ /pgfplots/exception/cycle list instantiation needed/.code={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{Please invoke \string\pgfplotsset{cycle list/#1} before using cycle list '#1'}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ },%
+ % #1: an error message
+ /pgfplots/exception/unsupported operation/.code={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#1}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ },%
+ % #1: the argument which should have been assigned.
+ % #2: the file name
+ % #3: the error message
+ /pgfplots/exception/no such table file/.code args={#1#2#3}{%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#3}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ \let#1=\relax
+ },
+ /pgfplots/exception/too few colormap positions/.code args={#1#2}{%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#2}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ \let#1=\relax
+ },
+ /pgfplots/exception/dimension too small in ticks/.code args={#1}{%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{The argument(s) for #1tick resulted in a tick distance which is too small. Please reconfigure the xtick argument(s)}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ },
+ %
+ %
+ %
+ %
+ % Generated if you say 'ymin=0' in a log axis.
+ % #1: the user argument ('ymin')
+ % #2: the offending value.
+ /pgfplots/warning/illegal user argument in log axis/.code args={#1#2}{%
+ \pgfplotsthrow@warning{Ignoring illegal input argument #1=#2: cannot apply log.}%
+ },
+ /pgfplots/warning/too many colormap positions/.code={%
+ \pgfplotsthrow@warning{the colormap has too many positions; ignoring position #1}%
+ },
+ /pgfplots/warning/plot without coordinates/.code={%
+ \pgfplotsthrow@warning{the current plot has no coordinates (or all have been filtered away)}%
+ },
+ /pgfplots/warning/log basis required/.code 2 args={%
+ \pgfplotsthrow@warning{Some input argument (#2) explicitly relies on the log basis of #1 (which is e). Please verify that this is intended and set 'log basis #1=10' otherwise. This warning will be shown only once per document.}%
+ },
+ /pgfplots/warning/no such legend to name/.code={%
+ \pgfplotsthrow@warning{There is no `legend to name=#1', sorry. I am skipping it}%
+ },
+ /pgfplots/warning/no such colorbar to name/.code={%
+ \pgfplotsthrow@warning{There is no `colorbar to name=#1', sorry. I am skipping it}%
+ },
+ /pgfplots/warning/no such addplot label/.code={%
+ \pgfplotsthrow@warning{There is no \string\addplot\space label `#1', sorry. I am skipping it}%
+ },
+ /pgfplots/warning/missing near ticklabel at/.code={%
+ \pgfplotsthrow@warning{The anchor 'near ticklabel' cannot be computed correctly because the position is missing. Please add 'near ticklabel at=coordinate' with a suitable coordinate}%
+ },
+ /pgfplots/warning/enlargelimits respects figure size failed/.code={%
+ \pgfplotsthrow@warning{enlargelimits respects figure size=true: could not respect the prescribed width/height (\pgfplotsretval). The size and/or aspect ratio of your image will be different than expected. You can try to modify BOTH width and height.}%
+ },
+ % #1: the axis
+ /pgfplots/warning/empty range cleared axis/.code={%
+ \pgfplotsthrow@warning{You have an axis with empty range (in direction #1). Replacing it with a default range and clearing all plots.}%
+ },
+ /pgfplots/warning/approx empty range enlarged/.code args={#1#2#3}{%
+ \pgfplotsthrow@warning{Axis range for axis #1 is approximately empty; enlarging it (it is [#2:#3])}%
+ },
+ /pgfplots/warning/dimension too large in ticks/.code args={#1#2#3}{%
+ \pgfplotsthrow@warning{The argument for #1tick distance=#2 was capped to #3 in order to avoid 'dimension too large'}%
+ },
+ /pgfplots/warning/lossy colormap rgb conversion/.code 2 args={%
+ \pgfplotsthrow@warning{I am about to convert colormap '#1' from #2\space to rgb (which might be lossy). Perhaps the choice 'colorbar sampled={surf,shader=interp}' yields better results since it supports #2.}%
+ },
+ /pgfplots/warning/cycle list size limit reached/.code={%
+ \pgfplotsthrow@warning{Reached /pgfplots/@cycle/max size=\pgfkeysvalueof{/pgfplots/@cycle/max size}. Omitting all following entries.}%
+ },
+ /pgfplots/warning/colorbar uninitialised/.code={%
+ \pgfplotsthrow@warning{Sorry, the colorbar is uninitialised - your axis has no color data. Consider using 'point meta=f(x)' or something like that. I am using a color range of [0,1] for the colorbar.}%
+ },
+ /pgfplots/warning/colorbar CMYK unsupported/.code={%
+ \pgfplotsthrow@warning{colorbar remark: The colormap '#1' has a CMYK colorspace which is not (yet) supported by PGF. I switched colorbar styles automatically to the visually equivalent 'colorbar sampled={surf,shader=interp}' to generate a proper CMYK colorbar. This has less support in some previewers. Use \string\pgfplotscolorbarCMYKworkaroundfalse\space to disable this improvement. [This message won't be replicated for '#1']}%
+ },
+ /pgfplots/warning/ticklabel anchor undetermined/.code args={#1#2#3#4}{%
+ \pgfplotsthrow@warning{the ticklabel anchor cannot be determined, the normal vector -(#2) and the unit #1 vector (#3) are almost parallel (abs(cos(angle)) = #4)!}%
+ },
+ /pgfplots/warning/point meta unbounded/.code 2 args={%
+ \pgfplotsthrow@warning{The per point meta data `#1' (#2) (and probably others as well) is unbounded - using the minimum value instead.}%
+ },
+ /pgfplots/warning/gnuplot -V impossible/.code={%
+ \pgfplotsthrow@warning{Sorry, I could not determine 'gnuplot -V' to check whether gnuplot and logscale writes results in log() or not. Please set `/pgfplots/gnuplot writes logscale=true|false' manually.}%
+ },
+ /pgfplots/warning/gnuplot -V format unknown/.code={%
+ \pgfplotsthrow@warning{Sorry, I can't reliably check which version of gnuplot is available. I guess it is gnuplot < 4.4. Please set `/pgfplots/gnuplot writes logscale=true|false' manually if anything fails.}%
+ },
+ /pgfplots/warning/plot3 graphics compatibility mode/.code={%
+ \pgfplotsthrow@warning{plot3 graphics is running in backwards compatibility mode. %
+ Use \string\pgfplotsset{compat=1.6} or higher to benefit from upgraded scaling capabilites.}%
+ },
+ /pgfplots/warning/plot3 graphics too few inner anchors/.code={%
+ \pgfplotsthrow@warning{plot graphics in 3D axis has just two inner anchors (those with '(x,y,z)=>(imgx,imgy)'). You should provide a third one such that I can check for correct scaling.}%
+ },
+ /pgfplots/warning/scatter classes no such class/.code={%
+ \pgfplotsthrow@warning{scatter/classes: can't find class for '#1'!? Please make sure you have specified 'scatter src=explicit symbolic'. Ignoring class '#1' (this message will not come again).}%
+ },
+ /pgfplots/warning/lua colormap unavailable/.code={%
+ \pgfplotsthrow@warning{there is no LUA colormap representation for #1. Using TeX arithmetics.}%
+ },
+ /pgfplots/warning/interior colormap inefficient/.code={%
+ \pgfplotsthrow@warning{the combination 'shader=interp,interior colormap name' is inefficient (it uses 'shader=faceted interp,faceted color=none') and may slow down the *display* of your document}%
+ },
+ /pgfplots/warning/matrix delinearize uses sqrt/.code args={#1#2#3#4}{%
+ \pgfplotsthrow@warning{%
+ mesh processing did not find '[mesh/rows=<N>]' or '[mesh/cols=<N>]'.
+ Assuming [mesh/rows=#1,mesh/cols=#2]
+ as sqrt(num points) = sqrt(#3) [ = #4].}%
+ },
+ /pgfplots/warning/matrix check/.code args={#1#2#3#4#5}{%
+ #1{the arguments of [mesh/rows=#2,mesh/cols=#3] assume #5\space points, but I actually got N = #4\space points! The data matrix appears to be incomplete or overcomplete!? [Use mesh/check=false to disable this message]}%
+ },
+ /pgfplots/warning/imagesc limits incomplete/.code args={#1}{%
+ \pgfkeysgetvalue{/pgfplots/empty line}\pgfplots@loc@TMPa%
+ \def\pgfplots@loc@TMPb{scanline}
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \pgfplotsthrow@warning{Automatic computation of axis limits for 'matrix plot' is INACCURATE. Please add the key '#1'. You can also ignore this warning and deal with axis limits manually}%
+ \else
+ \pgfplotsthrow@warning{Automatic computation of axis limits for 'matrix plot' is INACCURATE. Please add the keys '#1,empty line=scanline' (current value is empty line=\pgfplots@loc@TMPa). You can also ignore this warning and deal with axis limits manually}%
+ \fi
+ },
+ /pgfplots/warning/tick computation failed/.code 2 args={%
+ \pgfplotsthrow@warning{Tick computation for direction #1 failed; there are always too few tick labels (try min ticks has already been advanced to #2)}%
+ },
+ /pgfplots/warning/scale uniformly unsupported/.code={%
+ \pgfplotsthrow@warning{Sorry, 'scale uniformly' failed because its actual implementation works only if y_x = 0 and x_y = 0 (for 2d axes) or if z_x = 0 (for 3d axes). The result will not fill the prescribed dimensions. Falling back to 'scale uniformly strategy=units only. (use scale uniformly warning=false to disable this warning)}%
+ },
+ /pgfplots/warning/axis equal incompatible change/.code={%
+ \pgfplotsthrow@warning{the content of your 3d axis has changed compared to previous versions of pgfplots. please review it. ^^J %
+ [continued] explanation: you have a 3d axis with 'axis equal' and/or 'unit vector ratio' which has (probably) been optimized for an older version of pgfplots. any version older than 1.6 produced wrong output.^^J %
+ [continued] to remove this warning, write \string\pgfplotsset{compat=1.6} (or newer) in your preamble (may change all figures in your document) or by adding that to the affected axis.}%
+ },
+ /pgfplots/warning/unit vector ratio axis undetermined/.code={%
+ \pgfplotsthrow@warning{The algorithm to implement 'unit vector ratio' failed! It could not determine the axis which shall be scaled and decided to use 'unit vector ratio axis=#1'.}%
+ },
+ /pgfplots/warning/linear system singular/.code={%
+ \pgfplotsthrow@warning{Linear system is singular up to machine precision! Continuing with small threshold.}%
+ },
+ /pgfplots/warning/center lines upgrade required/.code={%
+ \pgfplotsthrow@warning{Please use '\string\pgfplotsset{compat=1.8}' to enable correct label placement for 3d axes (at least compat/labels=1.8).}%
+ },
+ /pgfplots/warning/empty column name/.code 2 args={%
+ \pgfplotsthrow@warning{Table '#1' has an empty column name; replacing it by '#2'}%
+ },
+}
+\let\pgfplotsexceptionmsg=\relax
+
+\def\pgfplots@EOI{\pgfplots@EOI}%
+
+\newif\ifpgfplots@loc@tmp
+\newtoks\t@pgfplots@toka
+\newtoks\t@pgfplots@tokb
+\newtoks\t@pgfplots@tokc
+\newdimen\pgfplots@tmpa
+\newcount\c@pgfplots@coordindex
+\newcount\c@pgfplots@scanlineindex
+\pgfutil@IfUndefined{r@pgf@reada}{%
+ \csname newread\endcsname\r@pgfplots@reada
+}{%
+ \let\r@pgfplots@reada=\r@pgf@reada
+}
+
+% use these macros for GLOBAL temporary assignments.
+% you can NEVER rely on their values unless you know exactly what you are doing.
+\gdef\pgfplots@glob@TMPa{}%
+\gdef\pgfplots@glob@TMPb{}%
+\gdef\pgfplots@glob@TMPc{}%
+
+% use these macros for LOCAL temporary assigments.
+% you can NEVER rely on their values unless you know exactly what you are doing.
+\def\pgfplots@loc@TMPa{}%
+\def\pgfplots@loc@TMPb{}%
+\def\pgfplots@loc@TMPc{}%
+
+
+% Invokes code #2 if file '#1' exists and #3 if not.
+\long\def\pgfplots@iffileexists#1#2#3{%
+ \openin\r@pgfplots@reada=#1
+ \ifeof\r@pgfplots@reada
+ #3\relax
+ \else
+ \closein\r@pgfplots@reada
+ #2\relax
+ \fi
+}
+\let\pgfplotsiffileexists=\pgfplots@iffileexists
+
+\pgfutil@ifundefined{pgfplots@texdist@protect}{%
+ \def\pgfplots@texdist@protect{}%
+}{}
+
+\input pgfplotssysgeneric.code.tex
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsdeque.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsdeque.code.tex
new file mode 100644
index 0000000000..7a524f1ee6
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsdeque.code.tex
@@ -0,0 +1,125 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is a helper package with an elementary double-ended-queue
+% (deque) datastructure,
+% featuring O(1) index access and O(N) creation, deletion, copy.
+%
+% The following macros are supplied:
+%
+% \pgfplotsdequenewempty
+% \pgfplotsdequecopy
+% \pgfplotsdequepushback
+% \pgfplotsdequepopfront
+% \pgfplotsdequecheckempty
+% \pgfplotsdequeforeach
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% IMPLEMENTATION NOTES:
+% I allocate an array which provides storage capacity and two pointers
+% (indices) into that array.
+%
+% The deque is stored as
+% - an array: \csname pgfpldq@<name>\endcsname
+% - the pointers:
+% \csname pgfpldq@<name>@beg\endcsname
+% \csname pgfpldq@<name>@end\endcsname (one after the end)
+%
+% ATTENTION: <name> may NOT be a control sequence!
+% this is in contrast to my other container structures.
+
+
+% Allocates a new, empty deque #1.
+%
+% #1 the name of a deque (NO control sequence!)
+% #2 is an integer denoting the maximum capacity. For now, this
+% capacity is fixed afterwards and denotes the maximum number of
+% entries.
+\def\pgfplotsdequenewempty#1{%
+ \pgfutil@ifnextchar\capacity{%
+ \pgfplotsdequenewempty@{#1}%
+ }{%
+ \pgfplots@error{Expected \string\capacity\{the capacity\} after \string\pgfplotsdequenewempty...}%
+ \pgfplotsdequenewempty@{#1}\capacity{100}%
+ }%
+}%
+\def\pgfplotsdequenewempty@#1\capacity#2{%
+ \pgfplotsarrayresize{pgfpldq@#1}{#2}%
+ \pgfutil@namedef{pgfpldq@#1@beg}{0}%
+ \pgfutil@namedef{pgfpldq@#1@end}{0}%
+}%
+
+\def\pgfplotsdequecopy#1\to#2{%
+ \pgfutil@namelet{pgfpldq@#1@beg}{pgfpldq@#2@beg}%
+ \pgfutil@namelet{pgfpldq@#1@end}{pgfpldq@#2@end}%
+ \pgfplotsarraycopy{pgfpldq@#1}\to{pgfpldq@#2}%
+}%
+
+\def\pgfplotsdequepushback#1\to#2{%
+ \pgfplotsarrayset{\csname pgfpldq@#2@end\endcsname}\of{pgfpldq@#2}\to{#1}%
+ \c@pgfplotsarray@tmp=\csname pgfpldq@#2@end\endcsname
+ \advance\c@pgfplotsarray@tmp by1
+ \ifnum\c@pgfplotsarray@tmp=\pgfplotsarraysizeof{pgfpldq@#2}
+ \c@pgfplotsarray@tmp=0
+ \fi
+ \expandafter\edef\csname pgfpldq@#2@end\endcsname{\the\c@pgfplotsarray@tmp}%
+ \pgfplotsdequeifempty{#2}{\pgfplots@error{Error: \string\pgfplotsdeque\space capacity has been reached - it was too small. Sorry, I didn't write auto-enlargement...}}{}%
+}%
+
+\def\pgfplotsdequepopfront#1\to#2{%
+ \pgfplotsarrayselect{\csname pgfpldq@#1@beg\endcsname}\of{pgfpldq@#1}\to{#2}%
+ \c@pgfplotsarray@tmp=\csname pgfpldq@#1@beg\endcsname
+ \advance\c@pgfplotsarray@tmp by1
+ \ifnum\c@pgfplotsarray@tmp=\pgfplotsarraysizeof{pgfpldq@#1}
+ \c@pgfplotsarray@tmp=0
+ \fi
+ \expandafter\edef\csname pgfpldq@#1@beg\endcsname{\the\c@pgfplotsarray@tmp}%
+}%
+
+% invokes #2 if deque '#1' is empty and '#3' if it is not empty.
+\def\pgfplotsdequeifempty#1#2#3{%
+ \ifnum\csname pgfpldq@#1@beg\endcsname=\csname pgfpldq@#1@end\endcsname\relax
+ #2%
+ \else
+ #3%
+ \fi
+}%
+
+
+\long\def\pgfplotsdequeforeach#1\as#2#3{%
+ \c@pgfplotsarray@tmp=\csname pgfpldq@#1@beg\endcsname
+ \long\def\pgfplotsdequeforeach@next{\pgfplotsdequeforeach@iter{#1}{#2}{#3}}%
+ \pgfplotsdequeforeach@next
+}%
+\long\def\pgfplotsdequeforeach@iter#1#2#3{%
+ \ifnum\c@pgfplotsarray@tmp=\csname pgfpldq@#1@end\endcsname
+ \def\pgfplotsdequeforeach@next{}%
+ \else
+ \pgfplotsarrayselect\c@pgfplotsarray@tmp\of pgfpldq@#1\to#2%
+ \edef\pgfplotsdequeforeach@{\the\c@pgfplotsarray@tmp}%
+ #3\relax
+ \c@pgfplotsarray@tmp=\pgfplotsdequeforeach@
+ \advance\c@pgfplotsarray@tmp by1
+ \ifnum\c@pgfplotsarray@tmp=\pgfplotsarraysizeof{pgfpldq@#1}
+ \c@pgfplotsarray@tmp=0
+ \fi
+ \fi
+ \pgfplotsdequeforeach@next
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotslibrary.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotslibrary.code.tex
new file mode 100644
index 0000000000..7ab01a3b03
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotslibrary.code.tex
@@ -0,0 +1,94 @@
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+% Comment: This file has been modified to utilize libraries in the pgfplots package.
+% Edited by Nick Papior Andersen
+
+
+
+% Loading further libraries
+
+% Include a library file.
+%
+% #1 = List of names of library file.
+%
+% Description:
+%
+% This command includes a list of pgfplots library files. For each file X in the
+% list, the file tikzlibrarypgfplots.X.code.tex is included, provided this has
+% not been done earlier.
+%
+% For the convenience of Context users, both round and square brackets
+% are possible for the argument.
+%
+% Example:
+%
+% \usepgfplotslibrary{units}
+% \usepgfplotslibrary[units,dateplot]
+
+\def\usepgfplotslibrary{\pgfutil@ifnextchar[{\use@pgfplotslibrary}{\use@@pgfplotslibrary}}%}
+\def\use@pgfplotslibrary[#1]{\use@@pgfplotslibrary{#1}}
+\def\use@@pgfplotslibrary#1{%
+ \edef\pgf@list{#1}%
+ \pgfutil@for\pgf@temp:=\pgf@list\do{%
+ \expandafter\pgfkeys@spdef\expandafter\pgf@temp\expandafter{\pgf@temp}%
+ \ifx\pgf@temp\pgfutil@empty
+ \else
+ \pgfplotsiflibraryloaded{\pgf@temp}{}{%
+ \expandafter\global\expandafter\let\csname pgfp@library@\pgf@temp @loaded\endcsname=\pgfutil@empty%
+ \expandafter\edef\csname tikz@library@#1@atcode\endcsname{\the\catcode`\@}
+ \expandafter\edef\csname tikz@library@#1@barcode\endcsname{\the\catcode`\|}
+ \catcode`\@=11
+ \catcode`\|=12
+ \pgfplots@iffileexists{tikzlibrarypgfplots.\pgf@temp.code.tex}{%
+ \input tikzlibrarypgfplots.\pgf@temp.code.tex}{%
+ \input pgflibrarypgfplots.\pgf@temp.code.tex}%
+ \catcode`\@=\csname tikz@library@#1@atcode\endcsname
+ \catcode`\|=\csname tikz@library@#1@barcode\endcsname
+ \expandafter\ifx\csname pgfp@library@#1@loadoptions\endcsname\relax
+ \else
+ \expandafter\let\expandafter\pgfplots@glob@TMPa\csname pgfp@library@\pgf@temp @loadoptions\endcsname
+ \expandafter\pgfplotsset\expandafter{\pgfplots@glob@TMPa}%
+ \fi
+ }%
+ \fi
+ }%
+}
+
+\pgfkeys{
+ % #1: library name
+ % #2: compatiblity presets which are controlled by the
+ % compatibility system but which belong to the library.
+ %
+ % FIXME : now as I wrote it, it might have been better to reverse
+ % the dependency... !?
+ /pgfplots/compat/library hook/.code 2 args={%
+ \pgfplotsiflibraryloaded{#1}{%
+ \pgfkeysalso{#2}%
+ }{%
+ \expandafter\ifx\csname pgfp@library@#1@loadoptions\endcsname\relax
+ \expandafter\def\csname pgfp@library@#1@loadoptions\endcsname{#2}%
+ \else
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfp@library@#1@loadoptions\endcsname}%
+ \t@pgfplots@tokb={#2}%
+ \expandafter\edef\csname pgfp@library@#1@loadoptions\endcsname{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}%
+ \fi
+ }%
+ },
+}
+
+\def\pgfplotsiflibraryloaded#1#2#3{%
+ \expandafter\ifx\csname pgfp@library@#1@loaded\endcsname\relax%
+ #3\relax
+ \else
+ #2\relax
+ \fi%
+}%
+
+% Default loaded libraries:
+% Currently none
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructure.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructure.code.tex
new file mode 100644
index 0000000000..a30a28e48a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructure.code.tex
@@ -0,0 +1,440 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is a helper package with an elementary list datastructure.
+%
+% Its implementation is based on Knuth's list macros in "The TeXbook".
+%
+% It features a convenient set of list macros, but it is not fast.
+% In fact, every elementary operation requires time O(N), so working
+% with this list easily leads to O(N^2) runtime.
+%
+% The following macros are supplied:
+%
+% \pgfplotslistnewempty
+% \pgfplotslistnew
+% \pgfplotslistcopy
+% \pgfplotslistpopfront
+% \pgfplotslistfront
+% \pgfplotslistpushback
+% \pgfplotslistpushfront
+% \pgfplotslistsize
+% \pgfplotslistselect
+% \pgfplotslistset
+% \pgfplotslistcheckempty
+% \pgfplotslistforeach
+%
+% @see \pgfplotsapplist a "real" list with O(1) pushback, but limited application.
+% @see \pgfplotsapplistX a preasymptotical fast list to accumulate elements.
+% @see \pgfplotsapplistXX an optimized version of \pgfplotsapplistX.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newif\ifpgfplotslistempty
+
+% Low-level IMPLEMENTATION NOTE
+% the list is stored in the form
+% '\pgfpl@@{<first>}\pgfpl@@{<second>}\pgfpl@@{<third>}....\pgfpl@@{<last>}'
+
+\newif\ifpgfplots@loop@CONTINUE
+\newif\ifpgfplotslist@is@backslash@terminated
+
+% Creates a new, empty list.
+\long\def\pgfplotslistnewempty#1{\let#1=\pgfutil@empty}
+
+% Creates a new list with an abirtrary number of elements.
+% Arguments:
+% #1: the list's name (a macro name)
+% #2: the elements in the form
+% first\\second\\third\\ ...\\
+% like in tabular with one column.
+% You can also use comma-separated lists
+% first,second,third
+%
+% Example:
+% 1.
+% \pgfplotslistnew\foolist{First Element\\Second Element\\Third Element\\}
+% WARNING: do NOT forget the final '\\'!
+%
+% 2.
+% \pgfplotslistnew\foolist{First Element,Second Element,Third Element}
+%
+% Use braces '{}' to use '\\' or ',' as arguments.
+%
+\long\def\pgfplotslistnew#1#2{%
+ \pgfkeys@spdef\pgfplotslist@loc@TMPa{#2}%
+ \def\pgfplotslist@loc@TMPb{\pgfplotslistnew@{#1}}%
+ \expandafter\pgfplotslist@loc@TMPb\expandafter{\pgfplotslist@loc@TMPa}%
+}
+\long\def\pgfplotslistnew@#1#2{%
+ \pgfplotslist@check@backslash@list #2\\\pgfplotslist@EOI
+ \ifpgfplotslist@is@backslash@terminated
+ \pgfplotslistnew@backslash@{#1}{#2}%
+ \else
+ \pgfplots@foreach@to@list{#2}\to#1%
+ \fi
+}
+% Is this here *ever* used!? I guess not.
+\long\def\pgfplotslistnew@backslash#1#2{%
+ \pgfplotslistnewempty{#1}%
+ \pgfplotslist@check@backslash@list #2\\\pgfplotslist@EOI
+ \ifpgfplotslist@is@backslash@terminated
+ \long\def\pgfplotslistnew@impl@rest{#2\pgfplotslist@EOI\\}%
+ \def\pgfplotslistnew@backslash@loop{\pgfplotslistnew@impl{#1}}%
+ \else
+ \def\pgfplotslistnew@backslash@loop{\pgfplotslistnew@impl@comma{#1}}%
+ \long\def\pgfplotslistnew@impl@rest{#2\pgfplotslist@EOI,}%
+ \fi
+ \expandafter\pgfplotslistnew@backslash@loop\pgfplotslistnew@impl@rest
+}%
+\long\def\pgfplotslistnew@backslash@#1#2{%
+ \pgfplotslistnewempty{#1}%
+ \def\pgfplotslistnew@backslash@loop{\pgfplotslistnew@impl{#1}}%
+ \pgfplotslistnew@backslash@loop#2\pgfplotslist@EOI\\%
+}%
+
+% helper macro for \pgfplotslistnew
+\long\def\pgfplotslistnew@impl#1#2\\{%
+ \def\pgfplotslist@loc@TMPa{#2}%
+ \ifx\pgfplotslist@loc@TMPa\pgfplotslist@EOI
+ \else
+ \pgfplotslistpushback{#2}\to#1\relax%
+ \expandafter\pgfplotslistnew@backslash@loop
+ \fi
+}
+\long\def\pgfplotslistnew@impl@comma#1#2,{%
+ \def\pgfplotslist@loc@TMPa{#2}%
+ \ifx\pgfplotslist@loc@TMPa\pgfplotslist@EOI
+ \else
+ \pgfplotslistpushback{#2}\to#1\relax%
+ \expandafter\pgfplotslistnew@backslash@loop
+ \fi
+}
+\def\pgfplotslist@EOI{\pgfplotslist@EOI}
+\def\pgfplotslist@backslashsep{\\}
+
+\long\def\pgfplotslist@check@backslash@list#1\\#2\pgfplotslist@EOI{%
+ \def\pgfplotslist@loc@TMPx{#2}%
+ \ifx\pgfplotslist@loc@TMPx\pgfutil@empty
+ \pgfplotslist@is@backslash@terminatedfalse
+ \let\pgfplotslist@check@backslash@list@next=\relax
+ \else
+ \def\pgfplotslist@loc@TMPy{ }%
+ \ifx\pgfplotslist@loc@TMPx\pgfplotslist@loc@TMPy
+ \pgfplotslist@is@backslash@terminatedfalse
+ \let\pgfplotslist@check@backslash@list@next=\relax
+ \else
+ \ifx\pgfplotslist@loc@TMPx\pgfplotslist@backslashsep
+ % ok. The list is something like 'a\\b\\' so the
+ % complete input is
+ % 'a\\b\\ \\ \EOI'
+ % we have iterated long enough to find only the '\\'
+ % right before the \EOI. It is thus backslash
+ % terminated.
+ \pgfplotslist@is@backslash@terminatedtrue
+ \let\pgfplotslist@check@backslash@list@next=\relax
+ \else
+ % Iterate. We want to check the last list element.
+ \long\def\pgfplotslist@check@backslash@list@next{\pgfplotslist@check@backslash@list#2\pgfplotslist@EOI}%
+ \fi
+ \fi
+ \fi
+ \pgfplotslist@check@backslash@list@next
+}%
+
+% Copies list #1 to list #2.
+\def\pgfplotslistcopy#1\to#2{\let#2=#1}
+
+
+
+
+% #1: the item to prepend
+% #2: the list as macro name
+% Example:
+% \pgfplotslistpushfront Next first Element\to\foolist
+\long\def\pgfplotslistpushfront#1\to#2{%
+ \t@pgfplots@toka={\pgfpl@@{#1}}%
+ \t@pgfplots@tokb=\expandafter{#2}%
+ \edef#2{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+}
+\long\def\pgfplotslistpushfrontglobal#1\to#2{%
+ \t@pgfplots@toka={\pgfpl@@{#1}}%
+ \t@pgfplots@tokb=\expandafter{#2}%
+ \xdef#2{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+}
+
+% Assembles a low-level list item representation into the token
+% register #2.
+\long\def\pgfplotslist@assembleentry#1\into#2{%
+ #2={\pgfpl@@{#1}}%
+}
+
+% #1: the item to append
+% #2: the list as macro name
+% Example:
+% \pgfplotslistpushback Next last element\to\foolist
+\long\def\pgfplotslistpushback#1\to#2{%
+ \t@pgfplots@toka={\pgfpl@@{#1}}%
+ \ifx#2\pgfutil@empty
+ \t@pgfplots@tokb={}%
+ \else
+ \t@pgfplots@tokb=\expandafter{#2}%
+ \fi
+ \edef#2{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+}
+% Adds '#1' to the GLOBAL list '#2'.
+\long\def\pgfplotslistpushbackglobal#1\to#2{%
+ \t@pgfplots@toka={\pgfpl@@{#1}}%
+ \ifx#2\pgfutil@empty
+ \t@pgfplots@tokb={}%
+ \else
+ \t@pgfplots@tokb=\expandafter{#2}%
+ \fi
+ \xdef#2{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+}
+
+% Concatenates two lists #2 and #3 into #1
+% Example:
+% \pgfplotslistconcat\result=\foolist&\bar
+\long\def\pgfplotslistconcat#1=#2&#3{%
+ \t@pgfplots@toka=\expandafter{#2}%
+ \t@pgfplots@tokb=\expandafter{#3}%
+ \edef#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+}
+
+% implements #2 := pop_front(#1)
+% Example:
+% \pgfplotslistpopfront\foolist\to\poppedfirstelem
+\long\def\pgfplotslistpopfront#1\to#2{%
+ \pgfplotslistcheckempty#1\relax
+ \ifpgfplotslistempty
+ \pgfplotsthrow{no such element}{#1}{\string\pgfplotslistpopfront\ from \string#1\ although list is EMPTY}\pgfeov%
+ \else
+ \expandafter\pgfplotslistpopfront@impl#1\pgfplotslistpopfront@macronames#1#2%
+ \fi
+}
+\long\def\pgfplotslistfront#1\to#2{%
+ \pgfplotslistcheckempty#1\relax
+ \ifpgfplotslistempty
+ \pgfplotsthrow{no such element}{#2}{\string\pgfplotslistfront\ from \string#1\ although list is EMPTY}\pgfeov%
+ \else
+ \expandafter\pgfplotslistfront@impl#1\pgfplotslistpopfront@macronames#2%
+ \fi
+}
+
+% implementation helper for listpopfront
+\long\def\pgfplotslistpopfront@impl\pgfpl@@#1#2\pgfplotslistpopfront@macronames#3#4{%
+ \def#4{#1}%
+ \def#3{#2}%
+}
+\long\def\pgfplotslistfront@impl\pgfpl@@#1#2\pgfplotslistpopfront@macronames#3{%
+ \def#3{#1}%
+}
+
+% Counts the number of elements in list #1, storing it into the count
+% register #2.
+% Example:
+% \pgfplotslistsize\foo\to{\count0}%
+% \the\count0
+\long\def\pgfplotslistsize#1\to#2{%
+ #2=0%
+ \long\def\pgfpl@@##1{\advance#2 by 1 }%
+ #1%
+}
+
+% Returns the #1th element of list #2 into macro #3
+% Arguments:
+% #1: a count 0,...,N-1 where N is the list size.
+% You may specify a number of a count.
+% #2: a list
+% #3: a macro name
+% Example:
+% Element 0:
+% \pgfplotslistselect0\of\foo\to\elem
+% \elem
+% Element \count1:
+% \pgfplotslistselect\count1\of\foo\to\elem
+\long\def\pgfplotslistselect#1\of#2\to#3{%
+ \global\def\pgfplotslistselect@tmp{\pgfplotsthrow{no such element}{#3}{The requested list entry with index #1 of \string#2 is too large; this list has not enough elements.}\pgfeov}%
+ \pgfplotslistselect@{#1}\of{#2}\to{#3}%
+}
+\long\def\pgfplotslistselect@#1\of#2\to#3{%
+ \begingroup
+ \count0=#1\relax
+ \long\def\pgfpl@@##1{%
+ \advance\count0 by-1\relax
+ \ifnum\count0=-1\relax
+ \global\def\pgfplotslistselect@tmp{\def#3{##1}}%
+ \fi%
+ }%
+ #2%
+ \endgroup
+ \pgfplotslistselect@tmp
+}
+
+% Selects a list entry. If it does not exist, '#' will be empty.
+\long\def\pgfplotslistselectorempty#1\of#2\to#3{%
+ \global\def\pgfplotslistselect@tmp{\def#3{}}%
+ \pgfplotslistselect@{#1}\of{#2}\to{#3}%
+}
+
+% Changes the element at index '#1' of list '#2' to the content '#3'.
+%
+% This operation has quadratic (!) time in the worst case.
+\long\def\pgfplotslistset#1\of#2\to#3{%
+ \ifcase#1\relax
+ % change first:
+ \def\pgfplotslistset@\pgfpl@@##1##2\relax{\def#2{\pgfpl@@{#3}##2}}%
+ \expandafter\pgfplotslistset@#2\relax
+ \or
+ % change second:
+ \def\pgfplotslistset@\pgfpl@@##1\pgfpl@@##2##3\relax{\def#2{\pgfpl@@{##1}\pgfpl@@{#3}##2}}%
+ \expandafter\pgfplotslistset@#2\relax
+ \or
+ \def\pgfplotslistset@\pgfpl@@##1\pgfpl@@##2\pgfpl@@##3##4\relax{\def#2{\pgfpl@@{##1}\pgfpl@@{##2}\pgfpl@@{#3}##3}}%
+ \expandafter\pgfplotslistset@#2\relax
+ \or
+ \def\pgfplotslistset@\pgfpl@@##1\pgfpl@@##2\pgfpl@@##3\pgfpl@@##4##5\relax{\def#2{\pgfpl@@{##1}\pgfpl@@{##2}\pgfpl@@{##3}\pgfpl@@{#3}##4}}%
+ \expandafter\pgfplotslistset@#2\relax
+ \else
+ \begingroup
+ \global\pgfplotslistnewempty\pgfplotslistnewempty\pgfplotslist@glob@TMPa
+ \let\pgfpl@@=\pgfutil@empty % make sure it is not \relax.
+ \count0=#1\relax
+ \count1=0
+ \def\pgfplotslistset@newelem{#3}%
+ \expandafter\pgfplotslistset@loop#2\relax
+ \ifnum\count1 =\count0
+ \else
+ \pgfplotsthrow{no such element}{\pgfplots@loc@TMPa}{\string\pgfplotslistset{\the\count0} failed because there are only \the\count1\space elements in the list. Use pushback to resize it.}\pgfeov%
+ \global\let\pgfplotslist@glob@TMPa=\pgfplots@loc@TMPa
+ \fi
+ \endgroup
+ \let#3=\pgfplotslist@glob@TMPa
+ \global\let\pgfplotslist@glob@TMPa=\relax
+ \fi
+}%
+
+\def\pgfplotslistset@loop{%
+ \pgfutil@ifnextchar\relax{%
+ \pgfplotslistset@loop@break
+ }{%
+ \pgfplotslistset@loop@next
+ }%
+}
+\def\pgfplotslistset@loop@break#1\relax{%
+ % re-append remaining elements:
+ \expandafter\gdef\expandafter\pgfplotslist@glob@TMPa\expandafter{\pgfplotslist@glob@TMPa#1}
+}%
+\def\pgfplotslistset@loop@next\pgfpl@@#1{%
+ \ifnum\count1 =\count0
+ % Ah - we found the element to replace!
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotslistset@newelem}\to\pgfplotslist@glob@TMPa
+ \expandafter\pgfplotslistset@loop@break
+ \else
+ \pgfplotslistpushbackglobal{#1}\to\pgfplotslist@glob@TMPa
+ \advance\count1 by1
+ \expandafter\pgfplotslistset@loop
+ \fi
+}%
+
+% Sets the boolean \ifpgfplotslistempty depending on whether list #1 is empty
+% or not.
+% Example:
+%
+% \pgfplotslistcheckempty\foolist
+% \ifpgfplotslistempty
+% List foolist is empty!
+% \else
+% List is not empty.
+% \fi
+\def\pgfplotslistcheckempty#1{%
+ \ifx#1\pgfutil@empty
+ \pgfplotslistemptytrue
+ \else
+ \ifx#1\relax
+ \pgfplots@warning{WARNING: possible logic error in script code: the command \string\pgfplotslistcheckempty{\string#1} encountered an undefined argument.}%
+ \pgfplotslistemptytrue
+ \else
+ \pgfplotslistemptyfalse
+ \fi
+ \fi
+}
+
+
+% Iterates through each list element, names it #2 and calls code #3.
+% Example:
+% \pgfplotslistnew\foolist{Eins\\Zwei\\Drei\\}%
+% \pgfplotslistforeach\foolist\as\foo{Element \foo\par}%
+% results in
+% Element Eins
+% Element Zwei
+% Element Drei
+% Each single element will be grouped with TeX groups.
+\long\def\pgfplotslistforeach#1\as#2#3{%
+ \begingroup
+ \long\def\pgfpl@@##1{%
+ \t@pgfplots@tokc={##1}% this allows '#' inside of '##1'
+ \edef#2{\the\t@pgfplots@tokc}%
+ \begingroup #3\endgroup}%
+ #1\relax
+ \endgroup
+}
+
+% The same but without groups around #3.
+%
+% The list can be nested.
+\long\def\pgfplotslistforeachungrouped#1\as#2#3{%
+ \t@pgfplots@tokb={{#2}{#3}}%
+ \t@pgfplots@tokc=\expandafter{#1}%
+ \edef\pgfplotslist@loc@TMPa{%
+ \noexpand\pgfplotslistforeachungrouped@
+ \the\t@pgfplots@tokb%
+ \the\t@pgfplots@tokc
+ \noexpand\pgfpl@@\noexpand\pgfplotslistforeachungrouped@EOI
+ }%
+ \pgfplotslist@loc@TMPa
+}%
+
+% Technical helper method which performs the loop.
+% ASSUMPTION:
+% \pgfplotslistforeachungrouped@
+% {<macro name>}
+% {<code to execute>}
+% \pgfpl@@{<list elem>}\pgfpl@@{<list elem>}\pgfpl@@{<list elem>}\pgfpl@@\pgfplotslistforeachungrouped@EOI
+%
+% -> iterate through argument until \pgfplotslistforeachungrouped@EOI
+% comes.
+\long\def\pgfplotslistforeachungrouped@#1#2\pgfpl@@#3{%
+ \t@pgfplots@tokc={#3}% this allows '#' inside of '#3'
+ \edef\pgfplotslist@loc@TMPa{\the\t@pgfplots@tokc}%
+ \ifx\pgfplotslist@loc@TMPa\pgfplotslistforeachungrouped@EOI
+ % ok, terminate loop.
+ \let\pgfplotslistforeachungrouped@next=\relax
+ \else
+ % perform loop iteration ...
+ \let#1=\pgfplotslist@loc@TMPa
+ #2\relax
+ % and continue iterating.
+ \def\pgfplotslistforeachungrouped@next{\pgfplotslistforeachungrouped@{#1}{#2}}%
+ \fi
+ \pgfplotslistforeachungrouped@next
+}%
+\def\pgfplotslistforeachungrouped@EOI{\pgfplotslistforeachungrouped@EOI}% equals only itself in \ifx
+
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructureext.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructureext.code.tex
new file mode 100644
index 0000000000..990b796ce5
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsliststructureext.code.tex
@@ -0,0 +1,615 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is a helper package with an elementary list datastructure.
+% In contrast to \pgfplotslist, this one features fast append and fast
+% copy-to-macro.
+%
+% The 'pgfplotsapplist' is a list which has ONLY the features
+%
+% \pgfplotsapplistnewempty
+% \pgfplotsapplistpushback O(1)
+% \pgfplotsapplistedefcontenttomacro (N)
+% \pgfplotsapplistxdefcontenttomacro (N)
+%
+% It has been designed to accumulate macro content in O(N) (in
+% contrast to TeX's macro append routines which lead to O(N^2)
+% runtime).
+%
+% Furthermore, there is the
+%
+% \pgfplotsapplistXnewempty
+% \pgfplotsapplistXpushback
+% \pgfplotsapplistXedefcontenttomacro (N)
+% \pgfplotsapplistXxdefcontenttomacro (N)
+% \pgfplotsapplistXlet (N)
+%
+% structure which features **preasymptotical** constant runtime for
+% pushback. That means, as long as N < 80000, the runtime is linear.
+% It is only slightly slower than \pgfplotsapplist, and that only due
+% to its generality. It could easily be adopted to be FASTER than
+% \pgfplotsapplist.
+%
+% Credits for \pgfplotsapplist go to Till Tantau: he developped it for
+% the PGF kernel.
+%
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% the applist defines one macro for each element, like
+%
+% \def\element<i>{<content>\element<i+1>}
+% \def\element<i+1>{<content>\element<i+2>}
+% \def\element<i+2>{}
+%
+% The '<i>' value belongs to the private interface and is part of the
+% macro name.
+%
+% It features:
+% - real O(1) pushback
+% - O(N) edef to macro
+% - O(N) execute
+% - it requires O(N) different macros.
+% - it ***can't*** be copied outside of the current TeX group!
+%
+% I have never used it (besides early tests)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Time: O(1), number of macros: 3
+\def\pgfplotsapplistnewempty#1{%
+ \expandafter\def\csname\string#1@endno\endcsname{0}%
+ \edef#1{\expandafter\noexpand\csname\string#1@0\endcsname}%
+ \expandafter\def\csname\string#1@0\endcsname{}%
+}%
+
+% Time: O(1), number of macros per list: about N
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfplotsapplistpushback#1\to#2{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname\string#2@endno\endcsname
+ \begingroup
+ \c@pgf@counta=\pgfplots@loc@TMPa\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname\string#2@endno\endcsname=\pgfplots@glob@TMPa%
+ \t@pgfplots@toka={#1}%
+ \t@pgfplots@tokb=\expandafter{\csname\string#2@\pgfplots@glob@TMPa\endcsname}%
+ \expandafter\edef\csname\string#2@\pgfplots@loc@TMPa\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \expandafter\let\the\t@pgfplots@tokb=\pgfutil@empty
+}%
+
+% time O(N)
+% Expands the complete content of list #1 as-is into the macro #2.
+\def\pgfplotsapplistedefcontenttomacro#1\to#2{\edef#2{#1}}
+\def\pgfplotsapplistxdefcontenttomacro#1\to#2{\xdef#2{#1}}
+
+% Foreach list element, the stored value will simply be processed by
+% TeX. Characters will be printed and commands will be executed.
+% time O(N)
+\def\pgfplotsapplistexecute#1{#1}%
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%
+% This list here is a general re-implementation of the list used in
+% the PGF system layer.
+% It employs two collect-buffers to reduce the runtime.
+%
+% - It has preasymptotical runtime O(N), but is O(N^2) asymptotically.
+% - It requires only 5 macros per list.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Usage:
+% \pgfplotsapplistXnewempty\macro
+% \pgfplotsapplistXnewempty[to global]\macro
+%
+% The 'to global' flag will configure the list such that all
+% assignments to \macro are global. The list accumulation is
+% LOCAL, however: 'to global' is to be used inside of a local
+% group such that the final result, when all buffers are flushed,
+% is assigned globally.
+%
+% ATTENTION: maybe that [to global] thing is useless.
+% Consider using the \pgfplotsapplistXglobal list (see below)
+\def\pgfplotsapplistXnewempty{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotsapplistXnewempty@opt
+ }{%
+ \pgfplotsapplistXnewempty@opt[]%
+ }%
+}
+
+\def\pgfplotsapplistXnewempty@opt@TOGLOBAL{to global}
+
+\def\pgfplotsapplistXnewempty@opt[#1]#2{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \expandafter\let\csname\string#2@let\endcsname=\let%
+ \expandafter\let\csname\string#2@edef\endcsname=\edef
+ \else
+ \ifx\pgfplots@loc@TMPa\pgfplotsapplistXnewempty@opt@TOGLOBAL
+ \expandafter\def\csname\string#2@let\endcsname{\global\let}%
+ \expandafter\let\csname\string#2@edef\endcsname=\xdef
+ \else
+ \pgfplots@error{Sorry, the argument '#1' to \string\pgfplotsapplistXnewempty\ is unknown. Accepted is 'to global' or empty.}%
+ \fi
+ \fi
+ \pgfplotsapplistXnewempty@{#2}%
+}%
+
+\def\pgfplotsapplistXnewempty@#1{%
+ \csname\string#1@let\endcsname#1=\pgfutil@empty
+ \expandafter\let\csname\string#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\let\csname\string#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname\string#1@smallbuf@c\endcsname{0}%
+ \expandafter\def\csname\string#1@bigbuf@c\endcsname{0}%
+}%
+
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfplotsapplistXpushback#1\to#2{%
+ \begingroup
+ \c@pgf@counta=\csname\string#2@smallbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname\string#2@smallbuf@c\endcsname=\pgfplots@glob@TMPa
+ \ifnum\csname\string#2@smallbuf@c\endcsname<40
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
+ \expandafter\edef\csname\string#2@smallbuf\endcsname{\the\t@pgfplots@toka}%
+ \else
+ \pgfplotsapplistXpushback@smallbufoverfl{#1}{#2}%
+ \fi
+}%
+\long\def\pgfplotsapplistXpushback@smallbufoverfl#1#2{%
+ \begingroup
+ \c@pgf@counta=\csname\string#2@bigbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname\string#2@bigbuf@c\endcsname=\pgfplots@glob@TMPa
+ %
+ \ifnum\csname\string#2@bigbuf@c\endcsname<30
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
+ \expandafter\edef\csname\string#2@bigbuf\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \expandafter\let\csname\string#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname\string#2@smallbuf@c\endcsname{0}%
+ \else%
+ \t@pgfplots@toka=\expandafter{#2}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
+ \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
+ \csname\string#2@edef\endcsname#2{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \expandafter\let\csname\string#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname\string#2@smallbuf@c\endcsname{0}%
+ \expandafter\let\csname\string#2@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname\string#2@bigbuf@c\endcsname{0}%
+ \fi%
+}%
+\def\pgfplotsapplistXflushbuffers#1{%
+ \t@pgfplots@toka=\expandafter{#1}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#1@bigbuf\endcsname}%
+ \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#1@smallbuf\endcsname}%
+ \csname\string#1@edef\endcsname#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \expandafter\let\csname\string#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname\string#1@smallbuf@c\endcsname{0}%
+ \expandafter\let\csname\string#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname\string#1@bigbuf@c\endcsname{0}%
+}%
+
+
+% Expands the complete content of list #1 as-is into the macro #2.
+\def\pgfplotsapplistXedefcontenttomacro#1\to#2{%
+ \pgfplotsapplistXflushbuffers#1%
+ \edef#2{#1}}
+\def\pgfplotsapplistXxdefcontenttomacro#1\to#2{%
+ \pgfplotsapplistXflushbuffers#1%
+ \xdef#2{#1}}
+\def\pgfplotsapplistXlet#1=#2{%
+ \pgfplotsapplistXflushbuffers#2%
+ \let#1=#2}
+
+% Foreach list element, the stored value will simply be processed by
+% TeX. Characters will be printed and commands will be executed.
+\def\pgfplotsapplistXexecute#1{%
+ \pgfplotsapplistXflushbuffers#1%
+ #1}%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% A variant of applist which has the same runtime requirements, but
+% does PUSH FRONT only.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Usage:
+% \pgfplotsprependlistXnewempty{liste}
+\def\pgfplotsprependlistXnewempty#1{%
+ \expandafter\let\csname pgfpPRP@#1\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfpPRP@#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfpPRP@#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#1@smallbuf@c\endcsname{0}%
+ \expandafter\def\csname pgfpPRP@#1@bigbuf@c\endcsname{0}%
+}%
+
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfplotsprependlistXpushfront#1\to#2{%
+ \begingroup
+ \c@pgf@counta=\csname pgfpPRP@#2@smallbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname pgfpPRP@#2@smallbuf@c\endcsname=\pgfplots@glob@TMPa
+ \ifnum\csname pgfpPRP@#2@smallbuf@c\endcsname<40
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@smallbuf\endcsname}%
+ \t@pgfplots@tokb={#1}%
+ \expandafter\edef\csname pgfpPRP@#2@smallbuf\endcsname{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+ \else
+ \pgfplotsprependlistXpushfront@smallbufoverfl{#1}{#2}%
+ \fi
+}%
+\long\def\pgfplotsprependlistXpushfront@smallbufoverfl#1#2{%
+ \begingroup
+ \c@pgf@counta=\csname pgfpPRP@#2@bigbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname pgfpPRP@#2@bigbuf@c\endcsname=\pgfplots@glob@TMPa
+ %
+ \ifnum\csname pgfpPRP@#2@bigbuf@c\endcsname<30
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@bigbuf\endcsname}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@smallbuf\endcsname}%
+ \t@pgfplots@tokc={#1}%
+ \expandafter\edef\csname pgfpPRP@#2@bigbuf\endcsname{\the\t@pgfplots@tokc\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+ \expandafter\let\csname pgfpPRP@#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#2@smallbuf@c\endcsname{0}%
+ \else%
+ \pgfplotsprependlistXflushbuffers{#2}%
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2\endcsname}%
+ \t@pgfplots@tokb={#1}%
+ \expandafter\edef\csname pgfpPRP@#2\endcsname{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+ \fi%
+}%
+\def\pgfplotsprependlistXflushbuffers#1{%
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1\endcsname}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1@bigbuf\endcsname}%
+ \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1@smallbuf\endcsname}%
+ \expandafter\edef\csname pgfpPRP@#1\endcsname{\the\t@pgfplots@tokc\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+ \expandafter\let\csname pgfpPRP@#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#1@smallbuf@c\endcsname{0}%
+ \expandafter\let\csname pgfpPRP@#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#1@bigbuf@c\endcsname{0}%
+}%
+
+\def\pgfplotsprependlistXlet#1=#2{%
+ \pgfplotsprependlistXflushbuffers{#2}%
+ \expandafter\let\expandafter#1\csname pgfpPRP@#2\endcsname}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%
+% This list \pgfplotsapplistXX here is essentially the SAME as \pgfplotslistX.
+%
+% But there can only be one such list at a time, so it is faster than
+% \pgfplotslistX.
+%
+% This here is probably the fastest list.
+%
+% It is nothing else but a copy of Till Tantau's pgf kernel list.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+
+
+
+% WARNING: call \pgfplotsapplistclear if there is another list active.
+\def\pgfplotsapplistXXnewempty{%
+ \pgfutil@ifundefined{pgfplotsapplistXX}{}{%
+ \ifx\pgfplotsapplistXX\pgfutil@empty
+ \else
+ \pgfplots@error{\string\pgfplotsapplistXXnewempty: there is already another list which is *not* empty. It currently contains '\meaning\pgfplotsapplistXX'. Please call '\string\pgfplotsapplistXXclear' before using a new list to ensure clean separations.}%
+ \fi
+ }%
+ \let\pgfplotsapplistXX=\pgfutil@empty
+ \let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
+ \let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
+ \def\pgfplotsapplistXX@smallbuf@c{0}%
+ \def\pgfplotsapplistXX@bigbuf@c{0}%
+}%
+
+
+\def\pgfplotsapplistXXclear{%
+ \pgfutil@ifundefined{pgfplotsapplistXX}{}{%
+ \let\pgfplotsapplistXX=\pgfutil@empty
+ \let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
+ \let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
+ \def\pgfplotsapplistXX@smallbuf@c{0}%
+ \def\pgfplotsapplistXX@bigbuf@c{0}%
+ }%
+}%
+
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfplotsapplistXXpushback#1{%
+ \begingroup
+ \c@pgf@counta=\pgfplotsapplistXX@smallbuf@c\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \let\pgfplotsapplistXX@smallbuf@c=\pgfplots@glob@TMPa
+ \ifnum\pgfplotsapplistXX@smallbuf@c<40
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXX@smallbuf#1}%
+ \edef\pgfplotsapplistXX@smallbuf{\the\t@pgfplots@toka}%
+ \else
+ \pgfplotsapplistXXpushback@smallbufoverfl{#1}%
+ \fi
+}%
+\long\def\pgfplotsapplistXXpushback@smallbufoverfl#1{%
+ \begingroup
+ \c@pgf@counta=\pgfplotsapplistXX@bigbuf@c\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \let\pgfplotsapplistXX@bigbuf@c=\pgfplots@glob@TMPa
+ %
+ \ifnum\pgfplotsapplistXX@bigbuf@c<30
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXX@bigbuf}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsapplistXX@smallbuf#1}%
+ \edef\pgfplotsapplistXX@bigbuf{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
+ \def\pgfplotsapplistXX@smallbuf@c{0}%
+ \else%
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXX}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsapplistXX@bigbuf}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotsapplistXX@smallbuf#1}%
+ \edef\pgfplotsapplistXX{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
+ \def\pgfplotsapplistXX@smallbuf@c{0}%
+ \let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
+ \def\pgfplotsapplistXX@bigbuf@c{0}%
+ \fi%
+}%
+\def\pgfplotsapplistXXflushbuffers{%
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXX}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsapplistXX@bigbuf}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotsapplistXX@smallbuf}%
+ \edef\pgfplotsapplistXX{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \let\pgfplotsapplistXX@smallbuf=\pgfutil@empty
+ \def\pgfplotsapplistXX@smallbuf@c{0}%
+ \let\pgfplotsapplistXX@bigbuf=\pgfutil@empty
+ \def\pgfplotsapplistXX@bigbuf@c{0}%
+}%
+
+
+% Expands the complete content of list #1 as-is into the macro #2.
+\def\pgfplotsapplistXXedefcontenttomacro#1{%
+ \pgfplotsapplistXXflushbuffers
+ \edef#1{\pgfplotsapplistXX}}
+\def\pgfplotsapplistXXxdefcontenttomacro#1{%
+ \pgfplotsapplistXXflushbuffers%
+ \xdef#1{\pgfplotsapplistXX}}
+\def\pgfplotsapplistXXlet#1{%
+ \pgfplotsapplistXXflushbuffers%
+ \let#1=\pgfplotsapplistXX}
+
+% Foreach list element, the stored value will simply be processed by
+% TeX. Characters will be printed and commands will be executed.
+\def\pgfplotsapplistXXexecute#1{%
+ \pgfplotsapplistXXflushbuffers
+ #1}%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%
+% \pgfplotslistXXglobal assigns to a global list.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+\def\pgfplotsapplistXXglobalnewempty{%
+ \pgfutil@ifundefined{pgfplotsapplistXXglobal}{}{%
+ \ifx\pgfplotsapplistXXglobal\pgfutil@empty
+ \else
+ \pgfplots@error{\string\pgfplotsapplistXXglobalnewempty: there is already another list which is *not* empty. It currently contains '\meaning\pgfplotsapplistXXglobal'. Please call '\string\pgfplotsapplistXXglobalclear' before using a new list to ensure clean separations.}%
+ \fi
+ }%
+ \global\let\pgfplotsapplistXXglobal=\pgfutil@empty
+ \global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
+ \global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
+ \gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
+ \gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
+}%
+
+
+\def\pgfplotsapplistXXglobalclear{%
+ \pgfutil@ifundefined{pgfplotsapplistXXglobal}{}{%
+ \global\let\pgfplotsapplistXXglobal=\pgfutil@empty
+ \global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
+ \global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
+ \gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
+ \gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
+ }%
+}%
+
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfplotsapplistXXglobalpushback#1{%
+ \begingroup
+ \c@pgf@counta=\pgfplotsapplistXXglobal@smallbuf@c\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \global\let\pgfplotsapplistXXglobal@smallbuf@c=\pgfplots@glob@TMPa
+ \ifnum\pgfplotsapplistXXglobal@smallbuf@c<40
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal@smallbuf#1}%
+ \xdef\pgfplotsapplistXXglobal@smallbuf{\the\t@pgfplots@toka}%
+ \else
+ \pgfplotsapplistXXglobalpushback@smallbufoverfl{#1}%
+ \fi
+}%
+\long\def\pgfplotsapplistXXglobalpushback@smallbufoverfl#1{%
+ \begingroup
+ \c@pgf@counta=\pgfplotsapplistXXglobal@bigbuf@c\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \global\let\pgfplotsapplistXXglobal@bigbuf@c=\pgfplots@glob@TMPa
+ %
+ \ifnum\pgfplotsapplistXXglobal@bigbuf@c<30
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal@bigbuf}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsapplistXXglobal@smallbuf#1}%
+ \xdef\pgfplotsapplistXXglobal@bigbuf{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
+ \gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
+ \else%
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsapplistXXglobal@bigbuf}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotsapplistXXglobal@smallbuf#1}%
+ \xdef\pgfplotsapplistXXglobal{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
+ \gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
+ \global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
+ \gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
+ \fi%
+}%
+\def\pgfplotsapplistXXglobalflushbuffers{%
+ \t@pgfplots@toka=\expandafter{\pgfplotsapplistXXglobal}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsapplistXXglobal@bigbuf}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotsapplistXXglobal@smallbuf}%
+ \xdef\pgfplotsapplistXXglobal{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \global\let\pgfplotsapplistXXglobal@smallbuf=\pgfutil@empty
+ \gdef\pgfplotsapplistXXglobal@smallbuf@c{0}%
+ \global\let\pgfplotsapplistXXglobal@bigbuf=\pgfutil@empty
+ \gdef\pgfplotsapplistXXglobal@bigbuf@c{0}%
+}%
+
+
+% Expands the complete content of list #1 as-is into the macro #2.
+%
+% this assigns locally into #1.
+\def\pgfplotsapplistXXglobaledefcontenttomacro#1{%
+ \pgfplotsapplistXXglobalflushbuffers
+ \edef#1{\pgfplotsapplistXXglobal}}
+% this assigns locally into #1.
+\def\pgfplotsapplistXXglobalxdefcontenttomacro#1{%
+ \pgfplotsapplistXXglobalflushbuffers%
+ \xdef#1{\pgfplotsapplistXXglobal}}
+% this assigns locally into #1.
+\def\pgfplotsapplistXXgloballet#1{%
+ \pgfplotsapplistXXglobalflushbuffers%
+ \let#1=\pgfplotsapplistXXglobal}
+
+% Foreach list element, the stored value will simply be processed by
+% TeX. Characters will be printed and commands will be executed.
+% this assigns locally into #1.
+\def\pgfplotsapplistXXglobalexecute#1{%
+ \pgfplotsapplistXXglobalflushbuffers
+ #1}%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \pgfplotsapplistXglobalnewempty --> same as \pgfplotsapplistX, but
+% it always assigns everything *globally*.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\pgfplotsgloballet{\global\let}%
+
+% Usage:
+% \pgfplotsapplistXglobalnewempty\macro
+% \pgfplotsapplistXglobalnewempty[to global]\macro
+%
+% The 'to global' flag will configure the list such that all
+% assignments to \macro are global. The list accumulation is
+% LOCAL, however: 'to global' is to be used inside of a local
+% group such that the final result, when all buffers are flushed,
+% is assigned globally.
+\def\pgfplotsapplistXglobalnewempty#1{%
+ \pgfplotsgloballet#1=\pgfutil@empty
+ \expandafter\pgfplotsgloballet\csname\string#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\pgfplotsgloballet\csname\string#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\gdef\csname\string#1@smallbuf@c\endcsname{0}%
+ \expandafter\gdef\csname\string#1@bigbuf@c\endcsname{0}%
+}%
+
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfplotsapplistXglobalpushback#1\to#2{%
+ \begingroup
+ \c@pgf@counta=\csname\string#2@smallbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \expandafter\xdef\csname\string#2@smallbuf@c\endcsname{\the\c@pgf@counta}%
+ \endgroup
+ \ifnum\csname\string#2@smallbuf@c\endcsname<40
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
+ \expandafter\xdef\csname\string#2@smallbuf\endcsname{\the\t@pgfplots@toka}%
+ \else
+ \pgfplotsapplistXglobalpushback@smallbufoverfl{#1}{#2}%
+ \fi
+}%
+\long\def\pgfplotsapplistXglobalpushback@smallbufoverfl#1#2{%
+ \begingroup
+ \c@pgf@counta=\csname\string#2@bigbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \expandafter\xdef\csname\string#2@bigbuf@c\endcsname{\the\c@pgf@counta}%
+ \endgroup
+ %
+ \ifnum\csname\string#2@bigbuf@c\endcsname<30
+ \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
+ \expandafter\xdef\csname\string#2@bigbuf\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \expandafter\pgfplotsgloballet\csname\string#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\gdef\csname\string#2@smallbuf@c\endcsname{0}%
+ \else%
+ \t@pgfplots@toka=\expandafter{#2}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}%
+ \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}%
+ \xdef#2{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \expandafter\pgfplotsgloballet\csname\string#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\gdef\csname\string#2@smallbuf@c\endcsname{0}%
+ \expandafter\pgfplotsgloballet\csname\string#2@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\gdef\csname\string#2@bigbuf@c\endcsname{0}%
+ \fi%
+}%
+\def\pgfplotsapplistXglobalflushbuffers#1{%
+ \t@pgfplots@toka=\expandafter{#1}%
+ \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#1@bigbuf\endcsname}%
+ \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#1@smallbuf\endcsname}%
+ \xdef#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}%
+ \expandafter\pgfplotsgloballet\csname\string#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\gdef\csname\string#1@smallbuf@c\endcsname{0}%
+ \expandafter\pgfplotsgloballet\csname\string#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\gdef\csname\string#1@bigbuf@c\endcsname{0}%
+}%
+
+
+\def\pgfplotsapplistXgloballet#1=#2{%
+ \pgfplotsapplistXglobalflushbuffers#2%
+ \let#1=#2}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsmatrix.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsmatrix.code.tex
new file mode 100644
index 0000000000..ddaf323e7d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsmatrix.code.tex
@@ -0,0 +1,544 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is a helper package with an elementary (full) matrix datastructure,
+% featuring O(1) index access and O(N) creation, deletion, copy.
+%
+% The following macros are supplied:
+%
+% \pgfplotsmatrixnewempty
+% \pgfplotsmatrixresize
+% \pgfplotsmatrixsize
+% \pgfplotsmatrixselect
+% \pgfplotsmatrixset
+% \pgfplotsmatrixletentry
+% \pgfplotsmatrixforeach
+% \pgfplotsmatrixLUdecomp
+% \pgfplotsmatrixLUsolve
+%
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Creates a new, empty matrix.
+\def\pgfplotsmatrixnewempty#1{%
+ \pgfplotsarray@@def{#1@rows}{0}%
+ \pgfplotsarray@@def{#1@cols}{1}%
+}
+
+% resizes (truncates) matrix #1 to #2 rows and #3 cols.
+%
+% the elements won't be initialised. Use 'set' for each element.
+\def\pgfplotsmatrixresize#1#2#3{%
+ \pgfplotsarray@@edef{#1@rows}{#2}%
+ \pgfplotsarray@@edef{#1@cols}{#3}%
+}
+
+% Invokes code '#2' if the matrix named '#1' exists and '#3' if it does
+% not exist.
+\def\pgfplotsmatrixifdefined#1#2#3{%
+ \pgfutil@ifundefined{#1@rows}{#3}{#2}%
+}%
+
+
+
+% Counts the number of rows/cols in matrix #1, storing it into the count
+% registers #2, #3.
+% Example:
+% \pgfplotsmatrixsize\foo\to{\count0}{\count1}%
+% \the\count0, \the\count1
+\long\def\pgfplotsmatrixsize#1\to#2#3{%
+ #2=\csname\string#1@rows\endcsname\relax
+ #3=\csname\string#1@cols\endcsname\relax
+}
+
+\long\def\pgfplotsmatrixsizetomacro#1\to#2#3{%
+ \expandafter\let\expandafter#2\csname\string#1@rows\endcsname
+ \expandafter\let\expandafter#3\csname\string#1@cols\endcsname
+}
+
+
+% Returns the (#1,#2) element of matrix #3 into macro #4
+% Arguments:
+% #1: a row index 0,...,N-1 where N is rowcount.
+% #1 must expand to an integer.
+% #2: a col index 0,...,N-1 where N is colcount.
+% #2 must expand to an integer.
+% #3: a matrix
+% #4: a macro name
+% Example:
+% Element 0:
+% \pgfplotsmatrixselect0,1\of\foo\to\elem
+% \elem
+% Element \count1:
+% \pgfplotsmatrixselect\count1,2\of\foo\to\elem
+\def\pgfplotsmatrixselect#1,#2\of#3\to#4{%
+ \expandafter\let\expandafter#4\csname\string#3@#1,#2\endcsname%
+ \ifx#4\relax
+ \pgfplotsthrow{no such element}{#1,#2}{No such element: \string\pgfplotsmatrixselect#1,#2\string\of{\string#3}}\pgfeov%
+ \fi
+}
+
+% Expands to the value (#1,#2) of matrix #3.
+% #1: a row index (not a register)
+% #2: a col index
+% #3: a matrix
+\def\pgfplotsmatrixvalueofelem#1,#2\of#3{\csname\string#3@#1,#2\endcsname}%
+
+% Sets element '#1,#2' of matrix '#3' to '#4'.
+\def\pgfplotsmatrixset#1,#2\of#3\to#4{%
+ \pgfutil@namedef{\string#3@#1,#2}{#4}%
+}
+\long\def\pgfplotsmatrixletentry#1,#2\of#3=#4{%
+ \expandafter\let\csname\string#3@#1,#2\endcsname=#4\relax
+}
+
+% During the loop, \pgfplotsmatrixforeachrowindex expands to the
+% current row index and \pgfplotsmatrixforeachcolindex to the actual
+% col index. It invokes \pgfplotsmatrixforeachrowend after each
+% complete row.
+%
+% This macro uses
+% \c@pgf@counta,\c@pgf@countb,\c@pgf@countc,\c@pgf@countd
+\long\def\pgfplotsmatrixforeach#1\as#2#3{%
+ \pgfplotsmatrixsize#1\to\c@pgf@countc\c@pgf@countd
+ \long\def\pgfplotsmatrixforeach@{#3}%
+ \def\pgfplotsmatrixforeach@assign##1{\def#2{##1}}%
+ \def\pgfplotsmat@select##1,##2\to{\pgfplotsmatrixselect##1,##2\of#1\to}%
+ \def\pgfplotsmatrixforeachrowindex{\the\c@pgf@counta}%
+ \def\pgfplotsmatrixforeachcolindex{\the\c@pgf@countb}%
+ \c@pgf@counta=0
+ \pgfplotsmatrixforeach@loop
+ \let\pgfplotsmatrixforeachcolindex\relax
+ \let\pgfplotsmatrixforeachrowindex\relax%
+}%
+\let\pgfplotsmatrixforeachrowend=\relax
+\def\pgfplotsmatrixforeach@loop{%
+ \ifnum\c@pgf@counta<\c@pgf@countc
+ \c@pgf@countb=0
+ \pgfplotsmatrixforeach@loop@
+ %
+ \pgfplotsmatrixforeachrowend
+ %
+ \advance\c@pgf@counta by1
+ \expandafter\pgfplotsmatrixforeach@loop
+ \fi
+}%
+\def\pgfplotsmatrixforeach@loop@{%
+ \ifnum\c@pgf@countb<\c@pgf@countd
+ \pgfplotsmat@select\the\c@pgf@counta,\the\c@pgf@countb\to\pgfplotsmat@Aij
+ \expandafter\pgfplotsmatrixforeach@assign\expandafter{\pgfplotsmat@Aij}%
+ \pgfplotsmatrixforeach@
+ %
+ \advance\c@pgf@countb by1
+ \expandafter\pgfplotsmatrixforeach@loop@
+ \fi
+}%
+
+% Defines \pgfplotsretval to be a text-representation of the matrix.
+% It will contain '\n' as newline macro and \t to separate cells.
+%
+\def\pgfplotsmatrixtotext#1{%
+ \begingroup
+ \pgfplotsapplistXnewempty\pgfplotsretval@
+ \def\pgfplotsmatrixforeachrowend{%
+ \pgfplotsapplistXpushback\n\to\pgfplotsretval@
+ }%
+ \pgfplotsmatrixforeach#1\as\entry{%
+ \pgfmathfloatparsenumber\entry
+ \pgfmathfloattosci\pgfmathresult
+ \edef\entry{\pgfmathresult\noexpand\t}%
+ \expandafter\pgfplotsapplistXpushback\entry\to\pgfplotsretval@
+ }%
+ \pgfplotsapplistXlet\pgfplotsretval=\pgfplotsretval@
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}
+
+% Takes a matrix #1 and replaces it by its LU decomposition.
+% The LU decomposition uses implicit pivoting; the pivoting
+% information is stored in a permutation array #2 and a sign macro #3.
+%
+% It is to be used together with \pgfplotsmatrixsolveLEQS.
+%
+% #1: the input matrix (square size)
+% #2: a macro name; will be used to store the permutation array for
+% the pivoting.
+% #3: a macro name, will contain the sign of the permutation (either
+% +1 or -1).
+%
+% The algorithm has been converted from Numerical Recipes in C (I did
+% not copy the comments, though). You find the complete reference in
+% Chapter 2 of Numerical Recipes.
+%
+% If the matrix is singular, an exception will be raised.
+% If the matrix is singular up to working precision,
+% \pgfplotsmatrixLUdecompwarnsingular will be invoked and the
+% algorithm continues with a small threshold.
+%
+% All arithmetics is computed with \pgfplotscoordmath{default} (which
+% is float in the initial configuration). Use
+% \pgfplotssetcoordmathfor{default}{pgfbasic} to switch it to standard
+% pgf arithmetics.
+%
+% ATTENTION. This routine re-uses the four counters
+% \c@pgf@counta,...\c@pgf@countd.
+% Furthermore, it does not free any memory.
+% Make sure you use it inside of local scopes.
+\def\pgfplotsmatrixLUdecomp#1\perm#2\sign#3{%
+ \let\pgfplotsmat@i=\c@pgf@counta
+ \let\pgfplotsmat@imax=\c@pgf@countb
+ \let\pgfplotsmat@j=\c@pgf@countc
+ \let\pgfplotsmat@k=\c@pgf@countd
+ \countdef\pgfplotsmat@n=0
+ \let\pgfplotsmat@big=\pgfutil@empty
+ \let\pgfplotsmat@dum=\pgfutil@empty
+ \let\pgfplotsmat@sum=\pgfutil@empty
+ \let\pgfplotsmat@temp=\pgfutil@empty
+ \pgfplotsmatrixsize#1\to\pgfplotsmat@n\c@pgf@countd
+ \ifnum\c@pgf@countd=\pgfplotsmat@n
+ \else
+ \pgfplots@error{Sorry, \string\pgfplotsmatrixLUdecomp\space expected an n x n matrix, but got \the\pgfplotsmat@n\space x \the\c@pgf@countd.}%
+ \fi
+ \pgfplotsarraynewempty\pgfplotsmat@vv
+ \pgfplotsarrayresize\pgfplotsmat@vv\pgfplotsmat@n
+ \pgfplotsarrayresize#2\pgfplotsmat@n
+ \def\pgfplotsmat@parity{1}%
+ \def\pgfplotsmat@select##1,##2\to{\pgfplotsmatrixselect##1,##2\of#1\to}%
+ \def\pgfplotsmat@letentry##1,##2={\pgfplotsmatrixletentry##1,##2\of#1=}%
+ \def\pgfplotsmat@letpermentry##1={\pgfplotsarrayletentry##1\of#2=}%
+ %
+ \pgfplotsmat@i=0
+ \pgfplotsmatrixLUdecomp@scalingloop
+ %
+ \ifnum\pgfplotsmat@n>0 % this is used for error recovery.
+ %
+ \pgfplotsmat@j=0
+ \pgfplotsmatrixLUdecomp@mainloop@j
+ %
+ \let#3=\pgfplotsmat@parity
+ \fi
+}%
+\def\pgfplotsmatrixLUdecomp@scalingloop{%
+ \ifnum\pgfplotsmat@i<\pgfplotsmat@n
+ \pgfplotscoordmath{default}{zero}%
+ \let\pgfplotsmat@big=\pgfmathresult
+ %
+ \pgfplotsmat@j=0
+ \pgfplotsmatrixLUdecomp@scalingloop@
+ %
+ \pgfplotscoordmath{default}{if is}{\pgfplotsmat@big}{0}{%
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Singular matrix in \string\pgfplotsmatrixLUdecomp}\pgfeov%
+ \pgfplotsmat@n=-1
+ }{%
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplotsmat@big}}%
+ \pgfplotsarrayletentry\pgfplotsmat@i\of\pgfplotsmat@vv=\pgfmathresult
+ }%
+ %
+ \advance\pgfplotsmat@i by1
+ \expandafter\pgfplotsmatrixLUdecomp@scalingloop
+ \fi
+}%
+\def\pgfplotsmatrixLUdecomp@scalingloop@{%
+ \ifnum\pgfplotsmat@j<\pgfplotsmat@n
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplotsmat@Aij}%
+ \let\pgfplotsmat@Aij=\pgfmathresult
+ \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfplotsmat@Aij
+ %
+ \pgfplotscoordmath{default}{op}{abs}{{\pgfplotsmat@Aij}}%
+ \let\pgfplotsmat@temp=\pgfmathresult
+ \pgfplotscoordmath{default}{max}{\pgfplotsmat@temp}{\pgfplotsmat@big}%
+ \let\pgfplotsmat@big=\pgfmathresult
+ %
+ \advance\pgfplotsmat@j by1
+ \expandafter\pgfplotsmatrixLUdecomp@scalingloop@
+ \fi
+}%
+
+\def\pgfplotsmatrixLUdecomp@mainloop@j{%
+ \ifnum\pgfplotsmat@j<\pgfplotsmat@n
+ %
+ \pgfplotsmat@i=0
+ \pgfplotsmatrixLUdecomp@mainloop@j@i
+ %
+ \pgfplotscoordmath{default}{zero}%
+ \let\pgfplotsmat@big=\pgfmathresult
+ %
+ \pgfplotsmat@i=\pgfplotsmat@j
+ \pgfplotsmatrixLUdecomp@mainloop@j@i@second
+ %
+ \ifnum\pgfplotsmat@j=\pgfplotsmat@imax
+ \else
+ % interchange rows...
+ \pgfplotsmat@k=0
+ \pgfplotsmatrixLUdecomp@mainloop@j@k
+ %
+ \c@pgfplotsarray@tmp=-\pgfplotsmat@parity\relax%
+ \edef\pgfplotsmat@parity{\the\c@pgfplotsarray@tmp}%
+ %
+ % FIXME : this here is DIFFERENT. Seems there is something
+ % missing in Numerical Recipes book
+ \pgfplotsarrayselect\pgfplotsmat@j\of\pgfplotsmat@vv\to\pgfplotsmat@dum
+ %\pgfplotsarrayselect\pgfplotsmat@imax\of\pgfplotsmat@vv\to\pgfplotsmat@temp
+ %\pgfplotsarrayletentry\pgfplotsmat@j\of\pgfplotsmat@vv=\pgfplotsmat@temp
+ \pgfplotsarrayletentry\pgfplotsmat@imax\of\pgfplotsmat@vv=\pgfplotsmat@dum
+ \fi
+ %
+ \edef\pgfplotsmat@dum{\the\pgfplotsmat@imax}%
+ \pgfplotsmat@letpermentry\pgfplotsmat@j=\pgfplotsmat@dum
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@j,\the\pgfplotsmat@j\to\pgfplotsmat@Ajj
+ \pgfplotscoordmath{default}{if is}{\pgfplotsmat@Ajj}{0}{%
+ \pgfplotscoordmath{default}{parsenumber}{1e-15}%
+ \pgfplotsmatrixLUdecompwarnsingular
+ \pgfplotsmat@letentry\the\pgfplotsmat@j,\the\pgfplotsmat@j=\pgfmathresult
+ }{%
+ }%
+ %
+ %
+ \advance\pgfplotsmat@j by1
+ \ifnum\pgfplotsmat@j=\pgfplotsmat@n
+ \advance\pgfplotsmat@j by-1
+ \else
+ \advance\pgfplotsmat@j by-1
+ \pgfplotsmat@select\the\pgfplotsmat@j,\the\pgfplotsmat@j\to\pgfplotsmat@Ajj
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplotsmat@Ajj}}%
+ \let\pgfplotsmat@dum=\pgfmathresult
+ \pgfplotsmat@i=\pgfplotsmat@j
+ \advance\pgfplotsmat@i by1
+ \pgfplotsmatrixLUdecomp@mainloop@j@i@final
+ \fi
+ \advance\pgfplotsmat@j by1
+ \expandafter\pgfplotsmatrixLUdecomp@mainloop@j
+ \fi
+}%
+\def\pgfplotsmatrixLUdecompwarnsingular{%
+ \pgfplotswarning{linear system singular}\pgfeov%
+}%
+\def\pgfplotsmatrixLUdecomp@mainloop@j@i{%
+ \ifnum\pgfplotsmat@i<\pgfplotsmat@j
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@sum
+ \pgfplotsmat@k=0
+ \pgfplotsmatrixLUdecomp@mainloop@j@i@k
+ \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfplotsmat@sum
+ %
+ \advance\pgfplotsmat@i by1
+ \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i
+ \fi
+}%
+\def\pgfplotsmatrixLUdecomp@mainloop@j@i@k{%
+ \ifnum\pgfplotsmat@k<\pgfplotsmat@i
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@k\to\pgfplotsmat@Aik
+ \pgfplotsmat@select\the\pgfplotsmat@k,\the\pgfplotsmat@j\to\pgfplotsmat@Akj
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@Aik}{\pgfplotsmat@Akj}}%
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}%
+ \let\pgfplotsmat@sum=\pgfmathresult
+ %
+ \advance\pgfplotsmat@k by1
+ \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@k
+ \fi
+}
+\def\pgfplotsmatrixLUdecomp@mainloop@j@i@second{%
+ \ifnum\pgfplotsmat@i<\pgfplotsmat@n
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@sum
+ %
+ \pgfplotsmat@k=0
+ \pgfplotsmatrixLUdecomp@mainloop@j@i@second@k
+ \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfplotsmat@sum
+ %
+ \pgfplotscoordmath{default}{op}{abs}{{\pgfplotsmat@sum}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplotsarrayvalueofelem\the\pgfplotsmat@i\of\pgfplotsmat@vv}}%
+ \let\pgfplotsmat@dum=\pgfmathresult
+ \pgfplotscoordmath{default}{if less than}{\pgfplotsmat@dum}{\pgfplotsmat@big}{%
+ }{%
+ \let\pgfplotsmat@big=\pgfplotsmat@dum
+ \pgfplotsmat@imax=\pgfplotsmat@i
+ }%
+ %
+ \advance\pgfplotsmat@i by1
+ \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@second
+ \fi
+}%
+\def\pgfplotsmatrixLUdecomp@mainloop@j@i@second@k{%
+ \ifnum\pgfplotsmat@k<\pgfplotsmat@j
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@k\to\pgfplotsmat@Aik
+ \pgfplotsmat@select\the\pgfplotsmat@k,\the\pgfplotsmat@j\to\pgfplotsmat@Akj
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@Aik}{\pgfplotsmat@Akj}}%
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}%
+ \let\pgfplotsmat@sum=\pgfmathresult
+ %
+ \advance\pgfplotsmat@k by1
+ \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@second@k
+ \fi
+}%
+
+\def\pgfplotsmatrixLUdecomp@mainloop@j@k{%
+ \ifnum\pgfplotsmat@k<\pgfplotsmat@n
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@imax,\the\pgfplotsmat@k\to\pgfplotsmat@dum
+ \pgfplotsmat@select\the\pgfplotsmat@j,\the\pgfplotsmat@k\to\pgfplotsmat@Ajk
+ \pgfplotsmat@letentry\the\pgfplotsmat@imax,\the\pgfplotsmat@k=\pgfplotsmat@Ajk
+ \pgfplotsmat@letentry\the\pgfplotsmat@j,\the\pgfplotsmat@k=\pgfplotsmat@dum
+ %
+ \advance\pgfplotsmat@k by1
+ \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@k
+ \fi
+}
+\def\pgfplotsmatrixLUdecomp@mainloop@j@i@final{%
+ \ifnum\pgfplotsmat@i<\pgfplotsmat@n
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@Aij}{\pgfplotsmat@dum}}%
+ \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfmathresult
+ %
+ \advance\pgfplotsmat@i by1
+ \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@final
+ \fi
+}
+
+
+
+% Solves the set of n linear equations Ax = b where A = LU is given in
+% (#1,#2) and b = #3.
+%
+% #1: is a result of \pgfplotsmatrixLUdecomp
+% #2: is the permutation vector returned by \pgfplotsmatrixLUdecomp
+% #3: the right hand side. On output, it will be *overwritten* with
+% the solution.
+%
+% The algorithm has been converted from Numerical Recipes in C (I did
+% not copy the comments, though). You find the complete reference in
+% Chapter 2 of Numerical Recipes.
+\def\pgfplotsmatrixLUbacksubst#1\perm#2\inout#3{%
+ \let\pgfplotsmat@i=\c@pgf@counta
+ \let\pgfplotsmat@ii=\c@pgf@countb
+ \let\pgfplotsmat@j=\c@pgf@countc
+ \let\pgfplotsmat@n=\c@pgf@countd
+ \let\pgfplotsmat@sum=\pgfutil@empty
+ \pgfplotsmatrixsize#1\to\pgfplotsmat@n\c@pgf@counta
+ \pgfplotsarraysize#3\to\c@pgf@counta
+ \ifnum\c@pgf@counta=\pgfplotsmat@n
+ \def\pgfplotsmat@select##1,##2\to{\pgfplotsmatrixselect##1,##2\of#1\to}%
+ \def\pgfplotsmat@selectperm##1\to{\pgfplotsarrayselect##1\of#2\to}%
+ \def\pgfplotsmat@selectb##1\to{\pgfplotsarrayselect##1\of#3\to}%
+ \def\pgfplotsmat@letresult##1={\pgfplotsarrayletentry##1\of#3=}%
+ %
+ \pgfplotsmat@ii=-1
+ \pgfplotsmat@i=0
+ \pgfplotsmatrixLUbacksubst@loop@i
+ %
+ \pgfplotsmat@i=\pgfplotsmat@n
+ \advance\pgfplotsmat@i by-1
+ \pgfplotsmatrixLUbacksubst@loop@i@backw
+ \else
+ \pgfplots@error{Sorry, \string\pgfplotsmatrixLUbacksubst\space expected a vector of length \the\pgfplotsmat@n\space, not \the\c@pgf@counta}%
+ \fi
+}%
+\def\pgfplotsmatrixLUbacksubst@loop@i{%
+ \ifnum\pgfplotsmat@i<\pgfplotsmat@n
+ %
+ \pgfplotsmat@selectperm\pgfplotsmat@i\to\pgfplotsmat@ip
+ \pgfplotsmat@selectb\pgfplotsmat@ip\to\pgfplotsmat@sum
+ \pgfplotsmat@selectb\pgfplotsmat@i\to\pgfplotsmat@temp
+ %
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplotsmat@sum}%
+ \let\pgfplotsmat@sum=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplotsmat@temp}%
+ \let\pgfplotsmat@temp=\pgfmathresult
+ %
+ \pgfplotsmat@letresult\pgfplotsmat@ip=\pgfplotsmat@temp
+ %
+ \ifnum\pgfplotsmat@ii<0
+ \pgfplotscoordmath{default}{if is}{\pgfplotsmat@sum}{0}{%
+ }{%
+ \pgfplotsmat@ii=\pgfplotsmat@i
+ }%
+ \else
+ \pgfplotsmat@j=\pgfplotsmat@ii
+ \pgfplotsmatrixLUbacksubst@loop@i@j
+ \fi
+ \pgfplotsmat@letresult\pgfplotsmat@i=\pgfplotsmat@sum
+ %
+ \advance\pgfplotsmat@i by1
+ \expandafter\pgfplotsmatrixLUbacksubst@loop@i
+ \fi
+}%
+\def\pgfplotsmatrixLUbacksubst@loop@i@j{%
+ \ifnum\pgfplotsmat@j<\pgfplotsmat@i
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij
+ \pgfplotsmat@selectb\pgfplotsmat@j\to\pgfplotsmat@temp
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@temp}{\pgfplotsmat@Aij}}%
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}%
+ \let\pgfplotsmat@sum=\pgfmathresult
+ %
+ \advance\pgfplotsmat@j by1
+ \expandafter\pgfplotsmatrixLUbacksubst@loop@i@j
+ \fi
+}%
+
+\def\pgfplotsmatrixLUbacksubst@loop@i@backw{%
+ \ifnum\pgfplotsmat@i<0
+ \else
+ %
+ \pgfplotsmat@selectb\pgfplotsmat@i\to\pgfplotsmat@sum
+ \pgfplotsmat@j=\pgfplotsmat@i
+ \advance\pgfplotsmat@j by1
+ \pgfplotsmatrixLUbacksubst@loop@i@backw@j
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@i\to\pgfplotsmat@Aii
+ \pgfplotscoordmath{default}{op}{divide}{{\pgfplotsmat@sum}{\pgfplotsmat@Aii}}%
+ \pgfplotsmat@letresult\pgfplotsmat@i=\pgfmathresult
+ %
+ \advance\pgfplotsmat@i by-1
+ \expandafter\pgfplotsmatrixLUbacksubst@loop@i@backw
+ \fi
+}%
+\def\pgfplotsmatrixLUbacksubst@loop@i@backw@j{%
+ \ifnum\pgfplotsmat@j<\pgfplotsmat@n
+ %
+ \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij
+ \pgfplotsmat@selectb\pgfplotsmat@j\to\pgfplotsmat@temp
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@temp}{\pgfplotsmat@Aij}}%
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}%
+ \let\pgfplotsmat@sum=\pgfmathresult
+ %
+ \advance\pgfplotsmat@j by1
+ \expandafter\pgfplotsmatrixLUbacksubst@loop@i@backw@j
+ \fi
+}%
+
+% Solves the linear equation system Ax = b.
+% #1: the matrix A
+% #2: the right-hand-side b. On output, #2 will contain the solution
+% and A will be overwritten.
+%
+% ATTENTION. This routine re-uses the four counters
+% \c@pgf@counta,...\c@pgf@countd.
+% Furthermore, it does not free any memory.
+% Make sure you use it inside of local scopes.
+\def\pgfplotsmatrixsolveLEQS#1=#2{%
+ \pgfplotsmatrixLUdecomp#1\perm\pgfplotsmatrix@perm\sign\pgfplotsmatrix@sign
+ \pgfplotsmatrixLUbacksubst#1\perm\pgfplotsmatrix@perm\inout#2%
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplothandler.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplothandler.code.tex
new file mode 100644
index 0000000000..60d6274eb5
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplothandler.code.tex
@@ -0,0 +1,3528 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2015 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% The low-level tikz plot handler for 3D mesh and surface plots.
+%
+% It expects
+% a) a coordinate stream which is a linearized matrix, iterated either
+% rowwise or column wise,
+% b) the current set of options in /pgfplots/mesh/.
+%
+%
+% ATTENTION:
+% this handler is NOT as general as the others. In particular, it
+% can't be interrupted by TeX groups: every single statement,
+% starting with streamstart and ending with stream end, must be in
+% the same scope!
+%
+% As a consequence, you can't use this handler inside of (all) TikZ
+% input streams. Try it out. It will work in pgfplots, however.
+%
+% Furthermore, it relies on a couple of pgfplots macros. This may
+% change in future versions.
+% It relies on:
+% - \ifpgfplots@curplot@threedim
+% - \pgfplots@current@point@meta
+% -> it also invokes \pgfplots@perpointmeta@preparetrafo and its
+% @APPLY counterpart which checks for
+% - \pgfplots@metamax
+% If you use it outside of pgfplots, use
+% \global\let\pgfplots@metamax=\pgfutil@empty
+% This is can be used without an initialised
+% pgfplots axes - as long as \pgfplots@current@point@meta is in
+% the range [0,1000].
+% - for the case 'shader=interp', a bounding box must be established
+% before the plot is finished. This must be done using
+% \def\pgfplotspointbbupperright{\pgfqpointxyz{2}{2}{0.9}}
+% \def\pgfplotspointbblowerleft {\pgfqpointxyz{0}{0}{0.1}}
+% or something like that.
+%
+% Besides these internals, it also relies on all public /pgfplots
+% configuration keys related to mesh/surface plots.
+%
+% Please note that the 'z buffer' feature will not work without
+% pgfplots (especially the z buffer=sort feature).
+%
+% Here is an example which compiles without a pgfplots axes:
+% ----------------------------------------------------------
+% \begin{tikzpicture}
+% \scope[
+% /pgfplots/.cd,
+% surf,
+% shader=faceted,
+% mesh/rows=4,
+% mesh/cols=4,
+% mesh/num points=,
+% /tikz/x={(0.44237cm,-0.07439cm)},
+% /tikz/y={(0.30942cm,0.23932cm)},
+% /tikz/z={(0.0cm,1.5cm)},
+% ]
+% \makeatletter
+%
+% \global\let\pgfplots@metamax=\pgfutil@empty
+% \pgfplots@curplot@threedimtrue
+%
+% \pgfplotsplothandlermesh
+% \pgfplotstreamstart
+%
+% \def\rangea{0.21}%
+% \def\rangeb{0.9}%
+%
+% \pgfmathparse{1000/(\rangeb-\rangea)}
+% \let\factor=\pgfmathresult
+%
+% \def\simplecoordinate(#1,#2,#3){%
+% \pgfmathparse{\factor*(#3 - \rangea)}%
+% \let\pgfplots@current@point@meta=\pgfmathresult
+% \pgfplotstreampoint{\pgfqpointxyz{#1}{#2}{#3}}%
+% }%
+% % for the case 'shaer=interp':
+% \def\pgfplotspointbbupperright{\pgfqpointxyz{2}{2}{0.9}}
+% \def\pgfplotspointbblowerleft {\pgfqpointxyz{0}{0}{0.1}}
+%
+% \simplecoordinate(0,3,0.7)
+% \simplecoordinate(1,3,0.5)
+% \simplecoordinate(2,3,0.58)
+% \simplecoordinate(3,3,0.9)
+%
+% \simplecoordinate(0,2,0.68)
+% \simplecoordinate(1,2,0.22)
+% \simplecoordinate(2,2,0.25)
+% \simplecoordinate(3,2,0.4)
+%
+% \simplecoordinate(0,1,0.6)
+% \simplecoordinate(1,1,0.3)
+% \simplecoordinate(2,1,0.21)
+% \simplecoordinate(3,1,0.3)
+%
+% \simplecoordinate(0,0,0.8)
+% \simplecoordinate(1,0,0.56)
+% \simplecoordinate(2,0,0.5)
+% \simplecoordinate(3,0,0.75)
+%
+%
+% \pgfplotstreamend
+% \pgfusepath{stroke}
+%
+% \endscope
+% \end{tikzpicture}
+% ----------------------------------------------------------
+% END OF EXAMPLE
+% -> see also the legend image for mesh plots.
+%
+
+\input pgfplotsmeshplotimage.code.tex
+
+\def\pgfplotsplothandlermesh{%
+ \def\pgfplotsplothandlername{mesh}%
+ %
+ % acquire values as they are known right now. Note that these values may change during the survey phase, so they will be updated later.
+ \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsplothandlermesh@rows
+ \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsplothandlermesh@cols
+ \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplotsplothandlermesh@numpoints
+ \edef\pgfplotsplothandlermesh@numpoints{\pgfplotsplothandlermesh@numpoints}%
+ \edef\pgfplotsplothandlermesh@cols{\pgfplotsplothandlermesh@cols}%
+ \edef\pgfplotsplothandlermesh@rows{\pgfplotsplothandlermesh@rows}%
+ %
+ \pgfkeysgetvalue{/pgfplots/patch type}\pgfplotsplothandlermesh@patchclass
+ \ifx\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@defaulttext
+ \let\pgfplotsplothandlermesh@patchclass=\pgfutil@empty
+ \fi
+ \ifx\pgfplotsplothandlermesh@patchclass\pgfutil@empty
+ % assign default patch class.
+ \if0\pgfplotsplothandlermesh@matrixinput
+ \def\pgfplotsplothandlermesh@patchclass{triangle}%
+ \else
+ \def\pgfplotsplothandlermesh@patchclass{rectangle}%
+ \fi
+ \pgfkeyslet{/pgfplots/patch type}\pgfplotsplothandlermesh@patchclass
+ \fi
+ %
+ \if0\pgfplotsplothandlermesh@matrixinput
+ % mesh input=patches: simply skip empty input lines:
+ \pgfkeyssetvalue{/pgfplots/empty line}{none}%
+ \fi
+ %
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@mesh
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@mesh
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@mesh
+ \let\pgfplotsplothandlersurveyaftersetpointmeta=\pgfplotsplothandlersurveyaftersetpointmeta@mesh@cdatanormalize
+ \let\pgfplotsplothandlernotifyscanlinecomplete=\pgfplotsplothandlersurvey@mesh@scanlinecomplete
+ %
+ \def\pgfplotsplothandlerLUAfactory{pgfplots.MeshPlothandler.new}%
+ \if2\pgfplotsplothandlermesh@matrixinput
+ % mesh input=image
+ % this is currently unsupported in LUA:
+ \let\pgfplotsplothandlerLUAfactory=\pgfutil@empty
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/patch table/value}\pgfplotsplothandlermesh@patchtable
+ \ifx\pgfplotsplothandlermesh@patchtable\pgfutil@empty
+ \else
+ \def\pgfplotsplothandlermesh@matrixinput{0}% implies 'patch input=patches'
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@mesh@patchtable
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@mesh@patchtable
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@mesh@patchtable
+ %
+ % this is currently unsupported in LUA:
+ \let\pgfplotsplothandlerLUAfactory=\pgfutil@empty
+ \fi
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \else
+ % mesh/color input=explicit
+ \if0\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, color input!=colormap requires 'point meta=symbolic' or 'explicit symbolic'. Please adjust the format of your input point meta data}\pgfeov%
+ \fi
+ \fi
+ %
+ %
+ \pgfplotsifisvisualizationphase{%
+ \pgfplotsplothandlermesh@init@variables
+ }{}%
+ %
+ %
+ \def\pgf@plotstreamstart{%
+% \scope
+ %
+ % this shouldn't be necessary, but it doesn't hurt either.
+ \pgfplots@perpointmeta@preparetrafo
+ %
+ %
+ \pgfplotsplothandlermesh@init@DECODE
+ \pgfplotsplothandlermesh@init@REFINE
+ %
+ \pgfutil@IfUndefined{pgfplots@drawmodes}{%
+ \let\pgfplots@drawmodes=\tikz@mode
+ \let\pgfplots@drawoptions=\tikz@options
+ }{}%
+ %
+ %
+ % Prepare color data source:
+ \ifx\pgfplotspointmetainputhandler\pgfutil@empty%
+ % oh. There is no color data!?
+ \pgfplotsplothandlermesh@init@path@without@point@meta
+ %
+ \else
+ \pgfplotsplothandlermesh@init@cdata
+ \pgfplotsplothandlermesh@init@shader
+ \pgfplotsplothandlermesh@init@flat@color
+ \fi
+ % PREPARE THE STREAM PROCESSING:
+ % handling of jumps.
+ \pgfplotsplothandlermesh@init@jumphandling
+ %
+ \ifpgfplotsplothandlermesh@shownormals
+ \let\pgfplotsplothandlermesh@show@normals@if@configured=\pgfplotsplothandlermesh@show@normals
+ % actually store 3d coordinates:
+ \let\pgfplotsplothandlermesh@serialize@logical@coords=\pgfplotsplothandlermesh@serialize@logical@coords@doit
+ \fi
+ %
+ % z buffering:
+ \pgfplotsplothandlermesh@init@zbuffer
+ %
+ \pgfplotsplothandlermesh@init@mesh@stream
+ %
+ \c@pgfplots@scanlineindex=0
+ }%
+ %
+ \let\pgfplotsplothandlerifcurrentpointcanbefirstlast=\pgfplotsplothandlerifcurrentpointcanbefirstlast@mesh
+}%
+
+\def\pgfplotsplothandlermesh@init@variables{%
+ % Check if the current shader needs to be reset.
+ % Do this early as some processing steps depend on it:
+ \if\pgfplots@meshmode m% mesh
+ % this is processed by the 'shader=flat' code below.
+ \def\pgfplotsplothandlermesh@shader{0}% 'flat'
+ \fi
+ \ifnum\pgfplotsplothandlermesh@shader>1% 'shader=interp' and 'shader=faceted interp'
+ \pgflibrarysurfshadingifactive
+ {}%
+ {%
+ \pgfutil@ifundefined{pgfplotsplothandlermesh@shader@warning}{%
+ \pgfplots@error{Sorry, surface shading (shader=interp) is NOT available for the selected driver `\pgfsysdriver'. I will use 'shader=flat' if you continue now}%
+ \gdef\pgfplotsplothandlermesh@shader@warning{x}%
+ }{}%
+ \def\pgfplotsplothandlermesh@shader{0}%
+ }%
+ \fi
+ %
+ \def\pgfplotsplothandlermesh@ONEDIMMODE{0}%
+ \pgfplotsplothandlermesh@init@meshkeys
+ %
+ %
+ \let\pgfplotsplothandlermesh@patchclass@input=\pgfplotsplothandlermesh@patchclass
+ \let\pgfplotsplothandlermesh@patchclass@output=\pgfplotsplothandlermesh@patchclass@input
+ \if0\pgfplotsplothandlermesh@triangulate
+ \else
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@input}{triangulate class}%
+ \let\pgfplotsplothandlermesh@patchclass@output=\pgfplotsretval
+ \fi
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@input}{init}%
+ \ifx\pgfplotsplothandlermesh@patchclass@input\pgfplotsplothandlermesh@patchclass@output
+ \else
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{init}%
+ \fi
+ %
+ % assign boolean:
+ \ifcase\pgfplotsplothandlermesh@matrixinput
+ % mesh input=patches
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \or
+ % mesh input=lattice
+ \def\b@pgfplotsplothandlermesh@matrixoutput{1}%
+ \or
+ % mesh input=image
+ % while it _could_ potentially provide matrix output, the
+ % implementation is quite involved. We don't have it.
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{allow matrix}%
+ \if0\pgfplotsretval
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ \ifnum\pgfkeysvalueof{/pgfplots/patch refines}>0
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ \if1\pgfplotsaxisplothasjumps
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ \if1\pgfplotsaxisplothasunboundedpointmeta
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ \if\pgfplotsplothandlermesh@zbuffer@choice4% 'z buffer=sort':
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ %
+ \if2\pgfplotsplothandlermesh@shader
+ % shader=interp
+ %
+ \pgfkeysgetvalue{/pgfplots/mesh/interior colormap name}\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \else
+ \pgfplotswarning{interior colormap inefficient}\pgfeov%
+ \pgfplotsset{shader=faceted interp,faceted color=none}%
+ \fi
+ \fi
+ \if2\pgfplotsplothandlermesh@shader
+ % shader=interp
+ \if0\pgfplotsplothandlermesh@triangulate
+ % patch to triangles=false
+ \else
+ % no matrix output possible:
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ \else
+ % 'shader!=interp'
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{get pdf shading type}%
+ \if5\pgfplotsretval
+ \else
+ \def\b@pgfplotsplothandlermesh@matrixoutput{0}%
+ \fi
+ %
+ % special handling: check if Type=5 shadings need to be
+ % converted to Type=4
+ \if0\b@pgfplotsplothandlermesh@matrixoutput
+ % no matrix output possible
+ \if5\pgfplotsretval
+ % pdf shading type=5 (matrix output)
+ \if2\pgfplotsplothandlermesh@shader
+ % shader=interp
+ %
+ % FIXME : I am unsure if this here is still
+ % necessary as of 3fc734d7ac3020600c06258b1bc80b22da53edf3
+ % -> perhaps the check can be skipped entirely.
+ %
+ % oh. shading type=5 is *essentially* the same as
+ % matrix output, but matrix output is forbidden.
+ % In that case, triangulate the matrix and shade the
+ % triangles:
+ \def\pgfplotsplothandlermesh@triangulate{1}%
+ \def\pgfplotsplothandlermesh@patchclass@output{triangle}%
+ % Note shader=faceted interp can be written as
+ % matrix -- it shades individual elements anyway;
+ % and one single patch can be written as matrix.
+ \fi
+ \fi
+ \fi
+ %
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{LUA class}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \let\pgfplotsplothandlerLUAvisualizerfactory=\pgfutil@empty
+ \else
+ \edef\pgfplotsplothandlerLUAvisualizerfactory{
+ function(plothandler) return pgfplots.MeshVisualizer.new(
+ plothandler,
+ \pgfplotsretval(),
+ pgfplots.pgftonumber("\pgfkeysvalueof{/pgfplots/mesh/rows}"),
+ pgfplots.pgftonumber("\pgfkeysvalueof{/pgfplots/mesh/cols}"),
+ \if0\pgfplots@plot@mesh@ordering true\else false\fi,
+ \if1\pgfplotsplothandlermesh@matrixinput true\else false\fi,
+ \if1\b@pgfplotsplothandlermesh@matrixoutput true\else false\fi,
+ \if4\pgfplotsplothandlermesh@zbuffer@choice true\else false\fi)% 'z buffer=sort'
+ end
+ }%
+ \fi
+}%
+
+\def\pgfplotsplothandlerifcurrentpointcanbefirstlast@mesh#1#2{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{if current point can be first last}{#1}{#2}%
+}%
+
+% Assigns default values to 'rows' and 'cols' in case
+% their values are empty.
+%
+% PRECONDITION:
+% The values of
+% - '/pgfplots/mesh/rows'
+% - '/pgfplots/mesh/cols'
+% - '/pgfplots/mesh/num points'
+% - \pgfplotsscanlinelength
+% - '/pgfplots/mesh/ordering'
+% are assigned properly.
+%
+% POSTCONDITION:
+% 'rows' and 'cols' now incorporates \pgfplotsscanlinelength if
+% their values had been empty. However, there may still be empty
+% values.
+%
+% @see \pgfplotsautocompletemeshkeys
+\def\pgfplotspreparemeshkeydefaults{%
+ \pgfplots@autocomplete@meshkeys0%
+}%
+
+% Completes and sanitizes 'mesh/rows' and 'mesh/cols' such that they
+% have useful integer values afterwards.
+%
+% This method works similarly to \pgfplotspreparemeshkeydefaults.
+% However, it really completes values and issues error messages if
+% that proves to be impossible.
+%
+% PRECONDITION:
+% The values of
+% - '/pgfplots/mesh/rows'
+% - '/pgfplots/mesh/cols'
+% - '/pgfplots/mesh/num points'
+% - '/pgfplots/mesh/ordering'
+% are assigned properly.
+% If
+% - \pgfplotsscanlinelength
+% exists and is positive, it may also be used.
+%
+% POSTCONDITION:
+% 'rows' and 'cols' have useful integer values.
+\def\pgfplotsautocompletemeshkeys{%
+ \pgfplots@autocomplete@meshkeys1%
+}%
+\def\pgfplots@autocomplete@meshkeys#1{%
+ % For #1 = 0, the values are only partially completed (which is
+ % also compatible with patch plots)
+ %
+ % get (potentially) updated values:
+ \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsplothandlermesh@rows
+ \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsplothandlermesh@cols
+ \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplotsplothandlermesh@numpoints
+ \edef\pgfplotsplothandlermesh@numpoints{\pgfplotsplothandlermesh@numpoints}%
+ \edef\pgfplotsplothandlermesh@cols{\pgfplotsplothandlermesh@cols}%
+ \edef\pgfplotsplothandlermesh@rows{\pgfplotsplothandlermesh@rows}%
+ %
+ \def\pgfplots@loc@TMPa{0}%
+ \ifpgfplots@curplot@threedim
+ \def\pgfplots@loc@TMPa{1}%
+ \else
+ \if s\pgfplots@meshmode
+ % we have a 'surf' plot. That doesn't make sense unless
+ % one has a matrix, even for a two--dimensional plot. Try it.
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ \fi
+ \if1\pgfplots@loc@TMPa
+ \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty
+ \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty
+ \pgfutil@ifundefined{pgfplotsscanlinelength}{\def\pgfplotsscanlinelength{-1}}{}%
+ \ifpgfplots@scanline@verbose
+ \ifnum\pgfplotsscanlinelength>0
+ % we have scanlinelength set! Use it:
+ \message{PGFPlots: Scanline length is \pgfplotsscanlinelength.}%
+ \else
+ \ifnum\pgfplotsscanlinelength=-2
+ \message{PGFPlots: Scanline length could not be determined since multiple, different scan line lengths have been found.}%
+ \else
+ \message{PGFPlots: No end-of-scanline marker found in input stream.}%
+ \fi
+ \fi
+ \fi
+ \ifnum\pgfplotsscanlinelength>0
+ % we have scanlinelength set! Use it:
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = x varies= rowwise -> scanline is cols!
+ \edef\pgfplotsplothandlermesh@cols{\pgfplotsscanlinelength}%
+ \else
+ % ordering = y varies = colwise: scanline is rows!
+ \edef\pgfplotsplothandlermesh@rows{\pgfplotsscanlinelength}%
+ \fi
+ \else
+ \if1#1%
+ % try to get reasonable values:
+ \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty
+ \pgfplots@error{Sorry, a mesh needs either '[mesh/rows=<N>]' or '[mesh/cols=<N>]' set - or at least '[mesh/num points=<N>]'. But it did not find any of them...}%
+ \def\pgfplotsplothandlermesh@cols{5}%
+ \def\pgfplotsplothandlermesh@rows{5}%
+ \else
+ % We don't have rows/cols. Well, try using
+ % sqrt(num points) for both of them!
+ \ifnum\pgfplotsplothandlermesh@numpoints<16380
+ \pgfmath@basic@sqrt@{\pgfplotsplothandlermesh@numpoints}%
+ \else
+ \pgfmathfloatparsenumber{\pgfplotsplothandlermesh@numpoints}%
+ \pgfmathfloatsqrt@{\pgfmathresult}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \fi
+ \begingroup
+ % Try whether this rows*rows yields numpoints:
+ \afterassignment\pgfplots@gobble@until@relax
+ \c@pgf@counta=\pgfmathresult\relax
+ \c@pgf@countb=\c@pgf@counta
+ \multiply\c@pgf@counta by\c@pgf@counta
+ \def\pgfplotsretval{1}%
+ \ifnum\c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax
+ % ok, rows*rows = numpoints.
+ \edef\pgfplotsplothandlermesh@rows{\the\c@pgf@countb}%
+ \else
+ % oh. Did not work. Check for rounding errors:
+ \c@pgf@counta=\c@pgf@countb
+ \advance\c@pgf@counta by1
+ \c@pgf@countb=\c@pgf@counta
+ \multiply\c@pgf@counta by\c@pgf@counta
+ \ifnum\c@pgf@counta=\pgfplotsplothandlermesh@numpoints
+ % ok, (rows+1)*(rows+1) = numpoints.
+ \edef\pgfplotsplothandlermesh@rows{\the\c@pgf@countb}%
+ \else
+ % no... did not work. num points doesn't
+ % appear to be a squared number.
+ \def\pgfplotsretval{0}%
+ \edef\pgfplotsplothandlermesh@rows{5}%
+ \fi
+ \fi
+ \if\pgfplotsretval1
+ \pgfplotswarning{matrix delinearize uses sqrt}{\pgfplotsplothandlermesh@rows}{\pgfplotsplothandlermesh@cols}{\pgfplotsplothandlermesh@numpoints}{\pgfmathresult}\pgfeov%
+ \else
+ \pgfplots@error{Sorry, 'plot mesh' needs either '[mesh/rows=<N>]' or '[mesh/cols=<N>]' set,
+ but it did not find any of them.
+ I also tried rows = sqrt(num points) = sqrt(\pgfplotsplothandlermesh@numpoints) = \pgfmathresult\space without success.}%
+ \fi
+ \pgfmath@smuggleone\pgfplotsplothandlermesh@rows
+ \endgroup
+ \let\pgfplotsplothandlermesh@cols=\pgfplotsplothandlermesh@rows
+ \fi
+ \else
+ % #1=0 -> leave them empty.
+ \fi
+ \fi
+ \fi
+ \fi
+ \if1#1%
+ \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty
+ \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty
+ \else
+ % Compute 'rows' out of 'num points' and 'cols':
+ \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty
+ \pgfplots@error{Sorry, matrix input needs a valid '[mesh/num points=<N>]' variable if only one of '[mesh/rows=<N>]' or '[mesh/cols=<N>]' is given.}%
+ \def\pgfplotsplothandlermesh@numpoints{100}%
+ \fi
+ \begingroup
+ \c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax
+ \divide\c@pgf@counta by\pgfplotsplothandlermesh@cols\relax
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \let\pgfplotsplothandlermesh@rows=\pgfplots@glob@TMPa
+ \fi
+ \else
+ \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty
+ % Compute 'cols' out of 'num points' and 'rows':
+ \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty
+ \pgfplots@error{Sorry, matrix input needs a valid '[mesh/num points=<N>]' variable if only one of '[mesh/cols=<N>]' or '[mesh/rows=<N>]' is given.}%
+ \def\pgfplotsplothandlermesh@numpoints{100}%
+ \fi
+ \begingroup
+ \c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax
+ \divide\c@pgf@counta by\pgfplotsplothandlermesh@rows\relax
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \let\pgfplotsplothandlermesh@cols=\pgfplots@glob@TMPa
+ \fi
+ \fi
+ \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty
+ \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@rows\relax
+ \multiply\c@pgfplots@scanlineindex by \pgfplotsplothandlermesh@cols\relax
+ \edef\pgfplotsplothandlermesh@numpoints{\the\c@pgfplots@scanlineindex}%
+ \fi
+ %
+ \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@rows\relax
+ \multiply\c@pgfplots@scanlineindex by\pgfplotsplothandlermesh@cols\relax
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@numpoints\relax
+ \else
+ \ifcase\pgfplots@mesh@checkmode\relax
+ % mesh/check=false
+ \def\pgfplots@loc@TMPa##1{}%
+ \or
+ % mesh/check=warning
+ \def\pgfplots@loc@TMPa##1{\pgfplotsthrow@warning{##1}}%
+ \or
+ % mesh/check=error
+ \def\pgfplots@loc@TMPa##1{\pgfplots@error{##1}}%
+ \fi
+ \pgfplotswarning{matrix check}{\pgfplots@loc@TMPa}{\pgfplotsplothandlermesh@rows}{\pgfplotsplothandlermesh@cols}{\pgfplotsplothandlermesh@numpoints}{\the\c@pgfplots@scanlineindex}\pgfeov%
+ \fi
+ \fi
+ \else
+ % 2d visualization has no mesh:
+ \edef\pgfplotsplothandlermesh@rows{\pgfplotsplothandlermesh@numpoints}%
+ \def\pgfplotsplothandlermesh@cols{1}%
+ \fi
+ %
+ \def\pgfplots@loc@TMPa{\pgfkeyssetvalue{/pgfplots/mesh/rows}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotsplothandlermesh@rows}%
+ \def\pgfplots@loc@TMPa{\pgfkeyssetvalue{/pgfplots/mesh/cols}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotsplothandlermesh@cols}%
+}%
+
+%%
+%% Helper structs for patch plots (surfaces)
+
+% #1: the canvas x coordinate
+% #2: the canvas y coordinate
+% #3: the point meta data (cdata)
+% #4: the vertex'es depth (if required)
+% #5: the 3d coordinates of the vertex (will only be stored if it is deemed necessary)
+\def\pgfplotspatchvertex#1#2#3#4:#5\endvertex{%
+ \def\pgfplotspatchvertexstruct{{#1}{#2}{#3}#4:#5}%
+ \def\pgfplotspatchvertexx{#1}%
+ \def\pgfplotspatchvertexy{#2}%
+ \def\pgfplotspatchvertexmeta{#3}%
+ \def\pgfplotspatchvertexdepth{#4}%
+ \def\pgfplotspatchvertexcoords{#5}%
+}%
+
+% Assumes that #1 expands to an argument of \pgfplotspatchvertex and
+% that #2 is a macro containing another patch vertex.
+%
+% It then replaces #2 by a new vector which is equal to #2 except for
+% the point meta which is taken from #1.
+\def\pgfplotspatchvertexcopymeta#1\to#2{%
+ \begingroup
+ \expandafter\pgfplotspatchvertex#1\endvertex
+ \let\pgfplots@loc@TMPa=\pgfplotspatchvertexmeta
+ \expandafter\pgfplotspatchvertex#2\endvertex
+ \xdef\pgfplots@glob@TMPc{%
+ {\pgfplotspatchvertexx}%
+ {\pgfplotspatchvertexy}%
+ {\pgfplots@loc@TMPa}%
+ \pgfplotspatchvertexdepth:\pgfplotspatchvertexcoords
+ }%
+ \endgroup
+ \let#2=\pgfplots@glob@TMPc
+}%
+
+% Same as \pgfplotspatchvertexcopymeta but it becomes a no-op if the
+% point meta in #1 is bounded (according to
+% \pgfplotsifpointmetaisbounded)
+\def\pgfplotspatchvertexcopymetaifbounded#1\to#2{%
+ \begingroup
+ \expandafter\pgfplotspatchvertex#1\endvertex
+ \let\pgfplots@loc@TMPa=\pgfplotspatchvertexmeta
+ \pgfplotsifpointmetaisbounded{\pgfplots@loc@TMPa}{%
+ \expandafter\pgfplotspatchvertex#2\endvertex
+ \xdef\pgfplots@glob@TMPc{%
+ {\pgfplotspatchvertexx}%
+ {\pgfplotspatchvertexy}%
+ {\pgfplots@loc@TMPa}%
+ \pgfplotspatchvertexdepth:\pgfplotspatchvertexcoords
+ }%
+ }{%
+ \global\let\pgfplots@glob@TMPc=#2%
+ }%
+ \endgroup
+ \let#2=\pgfplots@glob@TMPc
+}%
+
+\def\pgfplotspointpatchvertex#1#2#3#4:#5\endvertex{%
+ \global\pgf@x=#1
+ \global\pgf@y=#2
+}%
+
+% Allows to combined different vertices in the form
+% \pgfplotspatchvertexaccumstart
+% \expandafter\pgfplotspatchvertexadd\vertexA\times{0.25}%
+% \expandafter\pgfplotspatchvertexadd\vertexB\times{0.5}%
+% \expandafter\pgfplotspatchvertexadd\vertexC\times{0.75}%
+% \pgfplotspatchvertexfinish\finalvertex
+% --> now, \finalvertex contains the result vertex, 0.25*A + 0.5*B + 0.75*C .
+%
+% THERE MUST NOT BE MATH INBETWEEN.
+% More precisely, this overwrites the macros
+% \pgf@x,\pgf@y, \pgf@xa,\pgf@ya, \pgf@yb, \pgfmathresult and \pgfplotspatchvertexdepth
+\def\pgfplotspatchvertexaccumstart{%
+ \pgf@xa=0pt
+ \pgf@ya=0pt
+ \pgf@yb=0pt
+ \def\b@pgfplotspatchvertexaccum@ignore@unbounded@metadata{0}%
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ %\if m\pgfplots@colormap@access
+ \iftrue
+ % colormap access=map
+ \pgfplotscoordmath{meta}{zero}%
+ \else
+ % colormap access=direct
+ % FIXME : this causes lots of problems because the result is
+ % of an unexpected format at consumer side:
+ \begingroup
+ \pgfplotscolorzero{\pgfplotsplothandlermesh@explicit@color@num@comps}%
+ \let\pgfmathresult=\pgfplotsretval
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \fi
+ \else
+ % mesh/color input=explicit
+ \begingroup
+ \pgfplotscolorzero{\pgfplotsplothandlermesh@explicit@color@num@comps}%
+ \let\pgfmathresult=\pgfplotsretval
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \fi
+}%
+
+% if this is called, all following accumulation commands will replace unbounded point meta by the fixed zero value.
+\def\pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata{%
+ \def\b@pgfplotspatchvertexaccum@ignore@unbounded@metadata{1}%
+}%
+
+% #1 scale
+% #2 meta
+\def\pgfplotspatchvertexaddscaledmeta@if@applicable@colormap#1#2{%
+ \let\pgfmathresult@=\pgfmathresult
+ \if1\b@pgfplotspatchvertexaccum@ignore@unbounded@metadata
+ \pgfplotsifpointmetaisbounded{#2}{\pgfplots@loc@tmptrue}{\pgfplots@loc@tmpfalse}%
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifpgfplots@loc@tmp
+ %\if m\pgfplots@colormap@access
+ \iftrue
+ % colormap access=map
+ \pgfplotscoordmath{meta}{parsenumber}{#1}%
+ \pgfplotscoordmath{meta}{op}{multiply}{{#2}{\pgfmathresult}}%
+ \pgfplotscoordmath{meta}{op}{add}{{\pgfmathresult@}{\pgfmathresult}}%
+ \else
+ % colormap access=direct
+ % FIXME : this causes lots of problems because the result is
+ % of an unexpected format at consumer side:
+ % colormap access=direct
+ % interpolate colors, not their indices:
+ \begingroup
+ \pgfplotscoordmath{meta}{parsenumber}{#1}%
+ \pgfplotscoordmath{meta}{tofixed}{\pgfmathresult}%
+ \pgfplotscolormapgetindex{\pgfmathresult}{\pgfplotsplothandlermesh@colormapname}%
+ \global\let\pgfplots@glob@TMPc=\pgfmathresult
+ \endgroup
+ \pgfplotspatchvertexaddscaledmeta@if@applicable@explicit{#1}{\pgfplots@glob@TMPc}%
+ \fi
+ \else
+ \pgfplotscoordmath{meta}{op}{multiply}{{\pgfplots@metamin}{\pgfmathresult}}%
+ \pgfplotscoordmath{meta}{op}{add}{{\pgfmathresult@}{\pgfmathresult}}%
+ \fi
+}%
+
+% #1 scale
+% #2 meta
+\def\pgfplotspatchvertexaddscaledmeta@if@applicable@explicit#1#2{%
+ \if1\b@pgfplotspatchvertexaccum@ignore@unbounded@metadata
+ \edef\pgfmathresult@{#2}%
+ \ifx\pgfmathresult@\pgfutil@empty
+ \pgfplots@loc@tmpfalse
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \else
+ \pgfplots@loc@tmptrue
+ \fi
+ \let\pgfmathresult@=\pgfmathresult
+ \ifpgfplots@loc@tmp
+ \begingroup
+ \pgfplotscoloraddweighted{\pgfplotsplothandlermesh@explicit@color@num@comps}
+ {\pgfmathresult@}{#1}{#2}%
+ \let\pgfmathresult=\pgfplotsretval
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \fi
+}
+
+% #1: the patch's x coordinate
+% #2: the patch's y coordinate
+% #3: the patch's point meta value
+% #4: depth (if required)
+% #5: 3d coordinate of the vertex
+\def\pgfplotspatchvertexadd#1#2#3#4:#5\times#6{%
+ \global\pgf@x=#1 %
+ \global\pgf@y=#2 %
+ \advance\pgf@xa by#6\pgf@x
+ \advance\pgf@ya by#6\pgf@y
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \pgfplotspatchvertexaddscaledmeta@if@applicable@colormap{#6}{#3}%
+ \else
+ % mesh/color input=explicit
+ \pgfplotspatchvertexaddscaledmeta@if@applicable@explicit{#6}{#3}%
+ \fi
+ \def\pgfplotspatchvertexdepth{#4}%
+ \ifx\pgfplotspatchvertexdepth\pgfutil@empty
+ \else
+ \global\pgf@y=#4pt %
+ \advance\pgf@yb by#6\pgf@y
+ \fi
+}%
+\def\pgfplotspatchvertexfinish#1{%
+ \edef#1{%
+ {\the\pgf@xa}%
+ {\the\pgf@ya}%
+ {\pgfmathresult}%
+ \ifx\pgfplotspatchvertexdepth\pgfutil@empty\else\pgf@sys@tonumber\pgf@yb\fi%
+ :%
+ }%
+}
+% Same as \pgfplotspatchvertexadd, but it only adds the X and Y
+% coordinates (ignoring the rest).
+\def\pgfplotspatchvertexaddXY#1#2#3#4:#5\times#6{%
+ \global\pgf@x=#1
+ \global\pgf@y=#2
+ \advance\pgf@xa by#6\pgf@x
+ \advance\pgf@ya by#6\pgf@y
+}%
+% Same as \pgfplotspatchvertexfinish, but it only saves X and Y.
+\def\pgfplotspatchvertexfinishXY#1{%
+ \edef#1{{\the\pgf@xa}{\the\pgf@ya}{}:}%
+}
+
+% #1 class name
+% #2 method
+% <any method arguments follow>
+\def\pgfplotspatchclass#1#2{%
+ \pgfutil@ifundefined{pgfpptch@#1@#2}{%
+ \pgfplotspatchclasserror{#1}{#2}%
+ }{%
+ \edef\pgfplotspatchclassname{#1}%
+ \csname pgfpptch@#1@#2\endcsname
+ }%
+}%
+\def\pgfplotspatchclasserror#1#2{%
+ \pgfutil@ifundefined{pgfpptch@#1@}{%
+ \pgfplots@error{Sorry, the 'patch type=#1' is not defined. Maybe you misspelled it? Or perhaps you need to load \string\usepgfplotslibrary{patchplots}?}%
+ }{%
+ \pgfplots@error{Sorry, the patch class '#1' has no method '#2' (or it is not yet implemented)}%
+ }%
+}%
+
+% #1: will be expanded with \edef
+\def\pgfplotsplothandlermesh@setnextvertex#1{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set next vertex}{#1}%
+}%
+
+% Declares a new patch class named #1.
+%
+% #1: a string name.
+% #2: methods defining the class, provided as key values. See the
+% predefined classes to adjust your own ones. Documentation about the
+% available methods and their arguments can be found below in this
+% file.
+%
+% @see \usepgfplotslibrary{patchplots}
+\def\pgfplotsdeclarepatchclass#1#2{%
+ \edef\pgfplotsdeclarepatchclass@{@#1@}%
+ \pgfutil@ifundefined{pgfpptch@#1@}{%
+ % Ok. This is the FIRST declaration of this patch class.
+ % Define some default algorithms.
+ %
+ \expandafter\def\csname pgfpptch@#1@\endcsname{#1}%
+ \pgfqkeys{/pgfplots/@declare patch}{%
+ init=,
+ allow matrix=\def\pgfplotsretval{0},
+ init pdf shading=,
+ stream to shader={%
+%\message{\pgfplotspatchclassname: stream to shader: Starting ^^J}%
+ \pgfplotspatchclass{\pgfplotspatchclassname}{foreach vertex}{%
+%\message{vertex (\pgfplotspatchvertexx,\pgfplotspatchvertexy[\pgfplotspatchvertexmeta]. ^^J}%
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{%
+ \global\pgf@x=\pgfplotspatchvertexx\space
+ \global\pgf@y=\pgfplotspatchvertexy\space
+ }{\pgfplotspointmetatransformed}%
+ }%
+ },%
+ fill path={%
+ \def\b@pgfplotsmeshplothandler@fillpath@default@isfirst{1}%
+ \pgfplotspatchclass{\pgfplotspatchclassname}{foreach vertex}{%
+%\message{vertex (\pgfplotspatchvertexx,\pgfplotspatchvertexy[\pgfplotspatchvertexmeta]. ^^J}%
+ \if1\b@pgfplotsmeshplothandler@fillpath@default@isfirst
+ \expandafter\pgfpathmoveto
+ \else
+ \expandafter\pgfpathlineto
+ \fi
+ {\global\pgf@x=\pgfplotspatchvertexx\space\global\pgf@y=\pgfplotspatchvertexy\space}%
+ \def\b@pgfplotsmeshplothandler@fillpath@default@isfirst{0}%
+ }%
+ \pgfpathclose
+ },
+ get num cdata vertices=\pgfplotspatchclass{\pgfplotspatchclassname}{get num vertices},
+ get dimension=\def\pgfplotsretval{2},
+ supports global path=\def\pgfplotsretval{0},
+ set edge visible=\expandafter\edef\csname pgfppatchedge@##1\endcsname{##2},
+ uses view depth=\def\pgfplotsretval{0},
+ if current point can be first last=##1,
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,
+ deserialize except vertices=##1,
+ serialize={%
+ % the default serialization is not necessarily the fastest
+ % possible. But it should work.
+ \pgfplotspatchclass{\pgfplotspatchclassname}{serialize except vertices}%
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval
+ \let\pgfplotspatchready@defaultserialize=\pgfplotspatchready
+ \let\pgfplotspatchready=\relax
+ }%
+ \edef\pgfplotsretval{%
+ \noexpand\pgfplotspatchclass{\pgfplotspatchclassname}{new}%
+ \the\t@pgfplots@toka
+ }%
+ \pgfplotspatchclass{\pgfplotspatchclassname}{foreach vertex}{%
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \edef\pgfplotsretval{\the\t@pgfplots@toka
+ \noexpand\pgfplotspatchclass{\pgfplotspatchclassname}{set next vertex}{\pgfplotspatchvertexstruct}%
+ }%
+ }%
+ \expandafter\def\expandafter\pgfplotsretval\expandafter{\pgfplotsretval
+ \let\pgfplotspatchready=\pgfplotspatchready@defaultserialize
+ }%
+ },
+ deserialize=##1,
+ triangulate class=\def\pgfplotsretval{triangle},
+ triangulate={%
+ \pgfplots@error{triangulate: not yet implemented for \pgfplotspatchclassname}%
+ },%
+ refine={%
+ \let\pgfplotsrefinedpatchready=\pgfplotspatchready
+ \pgfplotspatchclass@recursiverefine{##1}%
+ },%
+ recursive refine@={%
+ \pgfplots@error{refine: not yet implemented for \pgfplotspatchclassname}%
+ },%
+ compute normal={%
+ \pgfplotsplothandlermesh@compute@normal@default
+ },%
+ sample in unit cube={%
+ \pgfplots@error{sample in unit cube: not implemented for \pgfplotspatchclassname}%
+ },
+ LUA class=,
+ }%
+ }{}%
+ %
+ %
+ \pgfqkeys{/pgfplots/@declare patch}{#2}%
+ %
+ %
+ \pgfutil@ifundefined{pgfpptch\pgfplotsdeclarepatchclass@ foreach cdata vertex}{%
+ \pgfutil@namelet
+ {pgfpptch\pgfplotsdeclarepatchclass@ foreach cdata vertex}
+ {pgfpptch\pgfplotsdeclarepatchclass@ foreach vertex}%
+ }{%
+ }%
+ \pgfutil@ifundefined{pgfpptch\pgfplotsdeclarepatchclass@ stroke path}{%
+ \pgfutil@namelet
+ {pgfpptch\pgfplotsdeclarepatchclass@ stroke path}
+ {pgfpptch\pgfplotsdeclarepatchclass@ fill path}%
+ }{%
+ }%
+}%
+\pgfqkeys{/pgfplots/@declare patch}{%
+ % may do any more or less global preparations. It is some sort (!)
+ % of constructor.
+ init/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ init\endcsname{#1}},%
+ allow matrix/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ allow matrix\endcsname{#1}},%
+ %
+ % FIXME : this is NOT properly used in higher order patches!?
+ % Uses view depth defines \pgfplotsretval to '1' if and only if it
+ % does ALWAYS needs the view depth. Note that 'z buffer=sort' will
+ % automatically provide the view depth. Use this key if view depth
+ % is necessary even for 'z buffer!=sort'.
+ uses view depth/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ uses view depth\endcsname{#1}},%
+ %
+ % creates a new patch. The vertices need to be added by 'set next
+ % vertex'
+ new/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ new\endcsname{#1}},%
+ %
+ % sets the next vertex value of the patch.
+ %
+ % if the patch has all expected vertices, \pgfplotspatchready is
+ % invoked and the next call to 'set next vertex' will start a new
+ % patch.
+ %
+ % #1: encodes the current vertex such that
+ % \pgfplotspatchvertex#1\endvertex
+ % is accepted.
+ set next vertex/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ set next vertex\endcsname##1{#1}},%
+ %
+ %
+ % Creates a new patch by means of sampling. The sampling is
+ % applied in the unit cube [0,1]x[0,1] (unit interval if this is an 1d patch
+ % type).
+ %
+ % 'sample in unit cube={<code to invoke for each sampled point>}'
+ %
+ % It will invoke <code to invoke for each sampled point> once for
+ % every sampled vertex. The complete unit cube will be covered.
+ % Depending on the patch type, either one or more patches are
+ % required to fill the unit cube. As soon as one patch is ready,
+ % \pgfplotspatchready will be invoked.
+ %
+ %
+ % PRECONDITION:
+ % -\pgfplotspatchready is defined.
+ %
+ % Arguments:
+ % #1: code which will be invoked whenever a new coordinate is
+ % ready. Inside of #1, the macros \pgfplotspatchclassx and
+ % \pgfplotspatchclassy result in the x and y coordinate (inside
+ % of the unit cube), in fixed point representation.
+ %
+ % Example:
+ % \def\pgfplotspatchready{}
+ % \pgfplotspatchclass{biquadratic}{sample in unit cube}{%
+ % point ready at (\pgfplotspatchclassx, \pgfplotspatchclassy)
+ % }
+ sample in unit cube/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ sample in unit cube\endcsname##1{#1}},%
+ %
+ % declares whether a single edge is visible or not.
+ % #1: an integer denoting the edge, either 0,1,2,...,N-1 where N = num verts
+ % #2: 0 if the edge is not to be stroked and 1 if it is stroked.
+ %
+ % This command doesn't need to be called; but if it is, it needs
+ % to be called for every edge.
+ %
+ % ATTENTION: this is *only* used by 'stroke path'. You will never
+ % need 'stroke path' unless some edges are invisible. If all edges
+ % are visible, 'stroke path' and 'fill path' are the same.
+ %
+ % This is currently *only* used for triangle triangulations!
+ set edge visible/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ set edge visible\endcsname##1##2{#1}},%
+ %
+ % Defines \pgfplotsretval to be a serialized representation of
+ % this patch.
+ serialize/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ serialize\endcsname{#1}},%
+ % Defines \pgfplotsretval to be a serialized representation of
+ % this patches extra data fields, excluding vertices.
+ % This is often a NO-OP (unless 'set edge visible' has been used)
+ serialize except vertices/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ serialize except vertices\endcsname{#1}},%
+ %
+ % Restores a serialized representation from #1.
+ deserialize/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ deserialize\endcsname##1{#1}},%
+ % Restores a serialized representation from #1. Only vertices are
+ % not stored here.
+ deserialize except vertices/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ deserialize except vertices\endcsname##1{#1}},%
+ %
+ % issues \pgfplotspatchvertex{...}\endvertex for the first vertex.
+ first vertex/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ first vertex\endcsname{#1}},%
+ % issues \pgfplotspatchvertex{...}\endvertex for the vertex which
+ % was the first BEFORE any z buffer reorderings changed the
+ % sequence (i.e. it undoes the effect of z buffer for the patch).
+ first vertex before z buffer/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ first vertex before z buffer\endcsname{#1}},%
+ %
+ % invokes
+ % \pgfplotspatchvertex...\endvertex
+ % #1
+ % for the every vertex.
+ foreach vertex/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ foreach vertex\endcsname##1{#1}},%
+ %
+ % invokes
+ % \pgfplotspatchvertex...\endvertex
+ % #1
+ % for every colored vertex.
+ % See 'get num cdata vertices'
+ foreach cdata vertex/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ foreach cdata vertex\endcsname##1{#1}},%
+ %
+ % generates a pgf path which is readily usable for filling.
+ fill path/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ fill path\endcsname{#1}},%
+ %
+ % Similar to 'fill path', this here paints the edges. It is only
+ % useful if 'set edge visible' is in use. In all other cases, it
+ % is the same as 'fill path'
+ %
+ % This is currently *only* used for triangle triangulations!
+ stroke path/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ stroke path\endcsname{#1}},%
+ %
+ init pdf shading/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ init pdf shading\endcsname{#1}},%
+ stream to shader/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ stream to shader\endcsname{#1}},%
+ %
+ % defines \pgfplotsretval to contain the number of vertices.
+ get num vertices/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ get num vertices\endcsname{#1}},%
+ %
+ % defines \pgfplotsretval to contain the number of vertices which have color data
+ % attached. This is usually the same as 'get num vertices' (but
+ % see coons patches).
+ get num cdata vertices/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ get num cdata vertices\endcsname{#1}},%
+ %
+ % defines \pgfplotsretval to contain the dimension of this patch
+ % (either 1 for lines or 2 for patches).
+ get dimension/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ get dimension\endcsname{#1}},%
+ %
+ % defines \pgfplotsretval to be 1 if and only if the patch class
+ % supports global paths.
+ % A global path is one which is drawn as one huge, uninterrupted
+ % PGF path (except for jumps perhaps). Its area can be filled,
+ % i.e. it behaves exactly like the 'sharp' plot handler. This is
+ % used implicitly if 'point meta=none' (if there is point meta
+ % data, we always want individual path segments and \pgfusepath
+ % them after each segment).
+ supports global path/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ supports global path\endcsname{#1}},%
+ %
+ % Approximates the given patch by at least one triangle.
+ % For every finished triangle, \pgfplotspatchready will be invoked
+ % and \pgfplotsplothandlermesh@patchclass will be set to triangle.
+ % More precisely, it is expected to be set to the return value of
+ % 'triangulate class'.
+ triangulate/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ triangulate\endcsname{#1}},%
+ % Defines \pgfplotsretval to be the classname returned by
+ % 'triangulate'. This is usually 'triangle'
+ triangulate class/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ triangulate class\endcsname{#1}},%
+ %
+ % Refines the given patch #1 times.
+ % For every finished patch, \pgfplotspatchready will be invoked.
+ refine/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ refine\endcsname##1{#1}},%
+ %
+ % shared helper method which can be invoked recursively by refine.
+ % the default implementation of 'refine' will invoke this one.
+ %
+ % #1: a serialized representation of the given patch. Use it to
+ % restore the current patch in intermediate steps. Note that you
+ % may not use \begingroup/\endgroup in this method; otherwise the
+ % 'z buffer' algorithm will need to be done with \global (and I
+ % don't want that. You probably neither).
+ %
+ % The refinement loop as such will be controlled by the default
+ % implementation of 'refine'. This macro is ONLY to be called by the
+ % default implementation of 'refine'! Overwriting it should
+ % automatically yield refinement facilities.
+ %
+ % the macro \pgfplotspatchready should be called for each refined
+ % element (happens automatically if you use 'set next vertex').
+ %
+ % POSTCONDITION:
+ % the element has been refined once.
+ recursive refine@/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ recursive refine@\endcsname##1{#1}},%
+ %
+ get pdf shading type/.style={get pdf shading type*={\def\pgfplotsretval{#1}}},
+ get pdf shading type*/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ get pdf shading type\endcsname{#1}},%
+ %
+ % A method which defines \pgfplotsretval to be the normal of the current segment.
+ % The values will be given in a format understood by
+ % \pgfplotsmathvectortostring{\pgfplotsretval}{default}
+ %
+ % This method REQUIRES that 3d coordinates are stored (see \pgfplotsplothandlermesh@serialize@logical@coords).
+ compute normal/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ compute normal\endcsname{#1}},%
+ %
+ % executes '##1' if the current point can be the first or last
+ % point of the patch. Executes ##2 if that is not the case.
+ if current point can be first last/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ if current point can be first last\endcsname##1##2{#1}},%
+ %
+ % Defines \pgfplotsretval to contain LUA code which returns a
+ % factory method (with no arguments) which returns an instance of the
+ % associated LUA pgfplots.PatchType
+ %
+ % If the returned \pgfplotsretval is empty: there is no LUA implementation.
+ LUA class/.code=
+ {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ LUA class\endcsname{\def\pgfplotsretval{#1}}},%
+}
+
+% This implements 'compute normal' :
+\def\pgfplotsplothandlermesh@compute@normal@default{%
+ \begingroup
+ \c@pgf@countd=0
+ \pgfplotspatchclass{\pgfplotspatchclassname}{foreach vertex}{%
+ \ifx\pgfplotspatchvertexcoords\pgfutil@empty
+ \pgfplotsplothandlermesh@compute@normal@error
+ \fi
+ \pgfplotsmathvectorfromstring{\pgfplotspatchvertexcoords}{default}%
+ \expandafter\let\csname point\the\c@pgf@countd\endcsname=\pgfplotsretval
+ \let\pointlast=\pgfplotsretval
+ \advance\c@pgf@countd by1 %
+ }%
+ \pgfplotsmathvectorsubtract{\csname point1\endcsname}{\csname point0\endcsname}{default}%
+ \let\diffA=\pgfplotsretval
+ % Hm. usually, I would use \point2 here... but it turned out that
+ % the result looks ugly for rectangular patches -- so I used the
+ % last point instead (which is, at least, consistent with the
+ % patch boundaries)
+ \pgfplotsmathvectorsubtract{\csname pointlast\endcsname}{\csname point0\endcsname}{default}%
+ \let\diffB=\pgfplotsretval
+ \pgfplotsmathvectorcrossprod{\diffA}{\diffB}{default}%
+ \let\crossAB=\pgfplotsretval
+ % this here is an experiment to use the MEAN of two normal
+ % vectors for rectangular patches... but it did not work as good
+ % as expected:
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{get num vertices}%
+ % \ifnum\pgfplotsretval=4
+ % \pgfplotsmathvectorsubtract{\csname point3\endcsname}{\csname point0\endcsname}{default}%
+ % \let\diffC=\pgfplotsretval
+ % \pgfplotsmathvectorcrossprod{\diffB}{\diffC}{default}%
+ % \let\crossBC=\pgfplotsretval
+ % \pgfplotsmathvectoradd{\crossAB}{\crossBC}{default}%
+ % \pgfplotscoordmath{default}{parsenumber}{0.5}%
+ % \pgfplotsmathvectorscale{\pgfplotsretval}{\pgfmathresult}{default}%
+ % \let\normal=\pgfplotsretval
+ % \else
+ \let\normal=\crossAB
+ %\fi
+ %
+ % specific choices of z buffering change the sequence of points.
+ % If the number of reversals is off, we need to switch the
+ % normal's sign:
+ \def\pgfplots@switch@normal@dir{0}%
+ \if1\pgfplotsplothandlermesh@zbuffer@choice
+ % z buffer=reverse x seq
+ \def\pgfplots@switch@normal@dir{1}%
+ \else
+ \if2\pgfplotsplothandlermesh@zbuffer@choice
+ % z buffer=reverse y seq
+ \def\pgfplots@switch@normal@dir{1}%
+ \fi
+ \fi
+ \if1\pgfplots@switch@normal@dir
+ \pgfplotscoordmath{default}{parsenumber}{-1}%
+ \pgfplotsmathvectorscale{\normal}{\pgfmathresult}{default}%
+ \fi
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsplothandlermesh@compute@normal@error{%
+ \pgfplots@error{Cannot compute normal vectors: due to some reason, only canvas coordinates of the involved patch are available in this context, but the original input coordinates are required. This indicates an incompatible combination of variables (sorry). Please report this as a bug}%
+}%
+
+\def\pgfplotspatchclass@recursiverefine#1{%
+ \c@pgf@counta=#1
+ \ifnum\c@pgf@counta=1
+ \let\pgfplotspatchready=\pgfplotsrefinedpatchready
+ \else
+ \advance\c@pgf@counta by-1
+ \edef\pgfplotspatchready{\noexpand\pgfplotspatchclass@recursiverefine{\the\c@pgf@counta}}%
+ \fi
+ %
+ \pgfplotspatchclass{\pgfplotspatchclassname}{serialize}%
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotspatchready}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplotspatchclass{\pgfplotspatchclassname}{deserialize}{\the\t@pgfplots@toka}%
+ \noexpand\def\noexpand\pgfplotspatchready{\the\t@pgfplots@tokc}%
+ \noexpand\def\noexpand\pgfplotspatchclassname{\pgfplotspatchclassname}% % FIXME: is that correct?
+ }%
+ \expandafter\pgfplotspatchclass@recursiverefine@\expandafter{\pgfplots@loc@TMPa}%
+}%
+\def\pgfplotspatchclass@recursiverefine@{%
+ \pgfplotspatchclass{\pgfplotspatchclassname}{recursive refine@}%
+}%
+
+
+% sequence macros preferred over integer indices.
+% using characters avoids the extensive use of \csname ...\endcsname
+% and \expandafter which would be necessary for integer indices.
+\def\pgfpptchindexnext@A{B}% 0->1
+\def\pgfpptchindexnext@B{C}% 1->2
+\def\pgfpptchindexnext@C{D}% 2->3
+\def\pgfpptchindexnext@D{E}% 3->4
+\def\pgfpptchindexnext@E{F}% 4->5
+\def\pgfpptchindexnext@F{G}% 5->6
+\def\pgfpptchindexnext@G{H}% 6->7
+\def\pgfpptchindexnext@H{I}% 7->8
+\def\pgfpptchindexnext@I{J}% 8->9
+\def\pgfpptchindexnext@J{K}% 9->10
+\def\pgfpptchindexnext@K{L}% 10->11
+\def\pgfpptchindexnext@L{M}% 11->12
+\def\pgfpptchindexnext@M{N}% 12->13
+\def\pgfpptchindexnext@N{O}% 13->14
+\def\pgfpptchindexnext@O{P}% 14->15
+\def\pgfpptchindexnext@P{Q}% 15->16
+\def\pgfpptchindexnext@Q{R}% 16->17
+
+\pgfplotsdeclarepatchclass{line}{%
+ allow matrix=\def\pgfplotsretval{0},
+ new=\def\pgfplotspatchclass@line@no{0},
+ set next vertex={%
+ \if0\pgfplotspatchclass@line@no\relax
+ \edef\pgfplotspatchclass@line@A{#1}%
+ \def\pgfplotspatchclass@line@no{1}%
+ \else
+ \edef\pgfplotspatchclass@line@B{#1}%
+ \def\pgfplotspatchclass@line@no{0}%
+ \pgfplotspatchready%
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \pgfplotspatchready
+ },%
+ get dimension=\def\pgfplotsretval{1},
+ supports global path=\def\pgfplotsretval{1},
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@line@A\endvertex,
+ first vertex before z buffer=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@line@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@line@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@line@B\endvertex #1%
+ },
+ fill path={%
+ \pgfplotsplothandlermesh@pathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@line@A\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@line@B\endvertex}%
+ \pgfplotsplothandlermesh@setlastpoint{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@line@B\endvertex}%
+ },
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,%
+ deserialize except vertices=,
+ get num vertices=\def\pgfplotsretval{2},
+ get pdf shading type=0,
+}%
+
+\def\pgfplotsplothandlermesh@last@x{-16000pt}
+\def\pgfplotsplothandlermesh@last@y{-16000pt}
+
+\def\pgfplotsplothandlermesh@pathmoveto#1{%
+ \pgf@process{#1}%
+ \pgfpathmoveto{}%
+}
+\def\pgfplotsplothandlermesh@setlastpoint#1{%
+}
+
+% Applies a moveto to #1 - but only if #1 is NOT the last used path
+% segment.
+\def\pgfplotsplothandlermesh@pathmoveto@globalpath#1{%
+ \pgf@process{#1}%
+ \pgfplots@loc@tmptrue
+ \ifdim\pgf@x=\pgfplotsplothandlermesh@last@x\relax
+ \ifdim\pgf@y=\pgfplotsplothandlermesh@last@y\relax
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+ \ifpgfplots@loc@tmp
+ \pgfpathmoveto{}%
+ \fi
+}%
+
+\def\pgfplotsplothandlermesh@setlastpoint@globalpath#1{%
+ \pgf@process{#1}%
+ \xdef\pgfplotsplothandlermesh@last@x{\the\pgf@x}%
+ \xdef\pgfplotsplothandlermesh@last@y{\the\pgf@y}%
+}%
+
+\pgfplotsdeclarepatchclass{triangle}{%
+ allow matrix=\def\pgfplotsretval{0},
+ new=\def\pgfplotspatchclass@tri@no{0}\let\pgfplotspatchclass@trie@AB\relax,
+ set next vertex={%
+ \ifcase\pgfplotspatchclass@tri@no\relax
+ \edef\pgfplotspatchclass@tri@A{#1}%
+ \def\pgfplotspatchclass@tri@no{1}%
+ \or
+ \edef\pgfplotspatchclass@tri@B{#1}%
+ \def\pgfplotspatchclass@tri@no{2}%
+ \or
+ \edef\pgfplotspatchclass@tri@C{#1}%
+ \def\pgfplotspatchclass@tri@no{0}%
+ \pgfplotspatchready%
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \pgfplotspatchready
+ %
+ %
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@C\endvertex #1%
+ },
+ fill path={%
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}%
+ \pgfpathclose
+ },
+ stroke path={%
+ \ifx\pgfplotspatchclass@trie@AB\relax
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}%
+ \pgfpathclose
+ \else
+ \if1\pgfplotspatchclass@trie@AB
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}%
+ \fi
+ \if1\pgfplotspatchclass@trie@BC
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}%
+ \fi
+ \if1\pgfplotspatchclass@trie@CA
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}%
+ \fi
+ \fi
+ },
+ triangulate=\pgfplotspatchready,
+ set edge visible={%
+ \ifcase#1
+ \edef\pgfplotspatchclass@trie@AB{#2}%
+ \or
+ \edef\pgfplotspatchclass@trie@BC{#2}%
+ \or
+ \edef\pgfplotspatchclass@trie@CA{#2}%
+ \fi
+ },
+ serialize except vertices={%
+ \ifx\pgfplotspatchclass@trie@AB\relax
+ \let\pgfplotsretval\pgfutil@empty%
+ \else
+ \edef\pgfplotsretval{%
+ \noexpand\def\noexpand\pgfplotspatchclass@trie@AB{\pgfplotspatchclass@trie@AB}%
+ \noexpand\def\noexpand\pgfplotspatchclass@trie@BC{\pgfplotspatchclass@trie@BC}%
+ \noexpand\def\noexpand\pgfplotspatchclass@trie@CA{\pgfplotspatchclass@trie@CA}%
+ }%
+ \fi
+ },%
+ recursive refine@={%
+ %
+ \pgfplotspatchclass{\pgfplotspatchclassname}{new}%
+ %
+ % Perform longest edge bisection.
+ \pgfpointdiff
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}%
+ \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
+ \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa
+ \pgf@xa=\pgfmathresult pt
+ \pgf@yc=\pgf@xa % "max so far"
+ \def\pgfplotspatch@tri@longestedgestart{A}%
+ %
+ \pgfpointdiff
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}%
+ \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
+ \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa
+ \pgf@xa=\pgfmathresult pt
+ \ifdim\pgf@xa>\pgf@yc
+ \pgf@yc=\pgf@xa
+ \def\pgfplotspatch@tri@longestedgestart{B}%
+ \fi
+ %
+ \pgfpointdiff
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}%
+ \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
+ \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa
+ \pgf@xa=\pgfmathresult pt
+ \ifdim\pgf@xa>\pgf@yc
+ \def\pgfplotspatch@tri@longestedgestart{C}%
+ \fi
+ % The ordering is not arbitrary
+ % (unless z buffer=sort is in effect). Let's assume that the
+ % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then
+ % this sequence here should have approximately the same depth
+ % ordering:
+ %
+ \pgfplotspatchvertexaccumstart
+ \if A\pgfplotspatch@tri@longestedgestart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@A\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@B\times{0.5}%
+ \def\pgfplots@loc@TMPa{ACM,BCM}%
+ \else
+ \if B\pgfplotspatch@tri@longestedgestart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@B\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@C\times{0.5}%
+ \def\pgfplots@loc@TMPa{ABM,ACM}%
+ \else
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@C\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@A\times{0.5}%
+ \def\pgfplots@loc@TMPa{ABM,BCM}%
+ \fi
+ \fi
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@tri@M
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa;\pgfplotspatchclass@tri@M}%
+ %
+ % invoke helper method such that I don't need to restore or
+ % recompute \pgfplotspatchclass@tri@M during recursion.
+ \expandafter\pgfplotspatchclass@tri@recursiverefine@@\pgfplots@loc@TMPa\relax{#1}%
+ },
+ deserialize except vertices=%
+ \let\pgfplotspatchclass@trie@AB\relax
+ #1,
+ get pdf shading type=4,
+ get num vertices=\def\pgfplotsretval{3},
+ LUA class=pgfplots.TrianglePatchType.new,
+}%
+\def\pgfplotspatchclass@tri@recursiverefine@@#1#2M,#3#4M;#5\relax#6{%
+ \expandafter\let\expandafter\pgfplotspatchclass@tri@A@\csname pgfplotspatchclass@tri@#1\endcsname
+ \expandafter\let\expandafter\pgfplotspatchclass@tri@B@\csname pgfplotspatchclass@tri@#2\endcsname
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@A@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@B@}%
+ \pgfplotsplothandlermesh@setnextvertex{#5}%
+ #6%
+ %
+ \expandafter\let\expandafter\pgfplotspatchclass@tri@A@\csname pgfplotspatchclass@tri@#3\endcsname
+ \expandafter\let\expandafter\pgfplotspatchclass@tri@B@\csname pgfplotspatchclass@tri@#4\endcsname
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@A@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@B@}%
+ \pgfplotsplothandlermesh@setnextvertex{#5}%
+ #6%
+}%
+
+% implements 'first vertex before z buffer' for rectangle
+% Note that 'mesh input=lattice' generates the rectangle patch as
+% follows: if the input matrix has the form
+%
+% (i-1,j-1) (i,j-1)
+%
+% (i-1,j) (i,j)
+%
+% it generates the rectangle
+%
+% A B
+%
+% D C
+%
+% (if you try to map this to a plot, ensure that you have 'y dir=reverse')
+\def\pgfplotspatchclass@rect@first@before@z@buffer{%
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = rowwise -> scanline is cols!
+ \ifcase\pgfplotsplothandlermesh@zbuffer@choice\relax
+ % none
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@A
+ \or
+ % reverse x seq
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@B
+ \or
+ % reverse y seq
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@D
+ \or
+ % reverse xy seq
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@C
+ \or
+ % sort
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@A
+ \else
+ % the choices 'default' or 'auto' should have been expanded already. Nothing to do here:
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@A
+ \fi
+ \else
+ % ordering = colwise: scanline is rows!
+ \ifcase\pgfplotsplothandlermesh@zbuffer@choice\relax
+ % none
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@A
+ \or
+ % reverse x seq
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@D
+ \or
+ % reverse y seq
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@B
+ \or
+ % reverse xy seq
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@C
+ \or
+ % sort
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@A
+ \else
+ % the choices 'default' or 'auto' should have been expanded already. Nothing to do here:
+ \let\pgfplots@loc@TMPa\pgfplotspatchclass@rect@A
+ \fi
+ \fi
+ \expandafter\pgfplotspatchvertex\pgfplots@loc@TMPa\endvertex
+}%
+
+% A rectangle specified in the sequence
+% D <-- C
+% | ^
+% v |
+% A --> B
+%
+\pgfplotsdeclarepatchclass{rectangle}{%
+ allow matrix=\def\pgfplotsretval{1},
+ new=\def\pgfplotspatchclass@rect@no{0},
+ set next vertex={%
+ \ifcase\pgfplotspatchclass@rect@no\relax
+ \edef\pgfplotspatchclass@rect@A{#1}%
+ \def\pgfplotspatchclass@rect@no{1}%
+ \or
+ \edef\pgfplotspatchclass@rect@B{#1}%
+ \def\pgfplotspatchclass@rect@no{2}%
+ \or
+ \edef\pgfplotspatchclass@rect@C{#1}%
+ \def\pgfplotspatchclass@rect@no{3}%
+ \or
+ \edef\pgfplotspatchclass@rect@D{#1}%
+ \def\pgfplotspatchclass@rect@no{0}%
+ \pgfplotspatchready%
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex,
+ first vertex before z buffer=\pgfplotspatchclass@rect@first@before@z@buffer,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex #1%
+ },
+ stream to shader={%
+ % a 'foreach vertex' with slightly different sequence:
+ \def\pgfplots@foreachvertex@@{%
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{%
+ \global\pgf@x=\pgfplotspatchvertexx\space
+ \global\pgf@y=\pgfplotspatchvertexy\space
+ }{\pgfplotspointmetatransformed}%
+ }%
+ \if1\b@pgfplotsplothandlermesh@matrixoutput
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex\pgfplots@foreachvertex@@%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex\pgfplots@foreachvertex@@%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex\pgfplots@foreachvertex@@% EXCHANGED SEQUENCE
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex\pgfplots@foreachvertex@@%
+ \else
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex\pgfplots@foreachvertex@@%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex\pgfplots@foreachvertex@@%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex\pgfplots@foreachvertex@@%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex\pgfplots@foreachvertex@@%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex\pgfplots@foreachvertex@@%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex\pgfplots@foreachvertex@@%
+ \fi
+ },%
+ fill path={%
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@A\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@B\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@C\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@D\endvertex}%
+ \pgfpathclose
+ },
+ init pdf shading={%
+ \if0\b@pgfplotsplothandlermesh@matrixoutput
+ \ifnum\pgfkeysvalueof{/pgfplots/surf shading/cols}=2
+ \else
+ \pgfplots@error{Sorry, (patch type=rectangle) and (rectangular patch shadings with more than one rectangle) is not supported (got \pgfkeysvalueof{/pgfplots/surf shading/cols} x * input points).
+ It is supported if z buffer!=sort. Consider using 'patch to triangles=true' to combine it with z buffer=sort}%
+ \fi
+ \fi
+ },
+ recursive refine@={%
+ \pgfplots@error{Please use \string\usepgfplotslibrary{patchplots} in order to use 'refine,patch type=\pgfplotspatchclassname'}%
+ },
+ triangulate={%
+ \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass
+ \def\pgfplotsplothandlermesh@patchclass{triangle}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}21%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}%
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}11%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@
+ },%
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,%
+ deserialize except vertices=,
+ get pdf shading type=5,
+ get num vertices=\def\pgfplotsretval{4},
+ LUA class=pgfplots.RectanglePatchType.new,
+}%
+
+\def\pgfplots@rect@next@A{B}
+\def\pgfplots@rect@next@B{C}
+\def\pgfplots@rect@next@C{D}
+\def\pgfplots@rect@next@D{A}
+
+\def\pgfplots@rect@rnext@A{D}
+\def\pgfplots@rect@rnext@B{A}
+\def\pgfplots@rect@rnext@C{B}
+\def\pgfplots@rect@rnext@D{C}
+
+% Ideas: make sure that the foreground edge is the 'v=1'
+% edge of the coons patch, i.e. that it is drawn on top of
+% the rest.
+%
+% Furthermore, for fixed v, the 'u=1' point should belong
+% to the foreground (as it is drawn on top of u=0).
+%
+% In other words, if the coons patch looks like
+%
+% BB-------CC <--v=1
+% | |
+% | |
+% | |
+% AA-------DD <--v=0
+% | |
+% u=0 u=1
+%
+% where the AA,BB,CC,DD are the corners of the coons
+% patch, The FOREGROUND POINT of our visualization here should be CC,
+% the second most foreground point BB (assuming that
+% foreground point and second most foreground point are
+% adjacent).
+%
+% Thus, if 'CC' is behind of 'BB' in the A,B,C,D ordering:
+% start the coons patch with AA := BB-1 in forward
+% direction.
+% else
+% start the coons patch with AA := BB+1 in reverse
+% direction.
+%
+% #1: the vertex prefix for the rectangular shape.
+% Thus, \csname #1A\endcsname is the first vertex, \csname #1B\endcsname the second
+% and #1C, #1D the third and fourth.
+%
+% [output] #2: A macro name which will be filled with the FIRST point
+% to stream to the shader. It will be defined to be either A,B,C or D.
+% [output] #3: A macro name which indicates whether the stream shall
+% be forward or backward. It will be defined to be either empty or 'r'. If
+% it is empty, the coons patch shall be in the sequence
+% #2,next(#2),next(next(#2),....
+% If it is 'r', the coons patch shall be in the sequence
+% #2,prev(#2),prev(prev(#2),...
+%
+% Note that this method works also for biquadratic patches since these
+% patches also have #1A, #1B, #1C and #1D as their corners.
+%
+\def\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth#1#2#3{%
+ \def#2{A}%
+ \def#3{}%
+ %
+ \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1A\endcsname\endvertex
+ \ifx\pgfplotspatchvertexdepth\pgfutil@empty
+ \else
+ % aaah -- we have z buffer information. Then we will use it!
+ \edef\PA{\pgfplotspatchvertexdepth pt A}%
+ \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1B\endcsname\endvertex
+ \edef\PB{\pgfplotspatchvertexdepth pt B}%
+ \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1C\endcsname\endvertex
+ \edef\PC{\pgfplotspatchvertexdepth pt C}%
+ \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1D\endcsname\endvertex
+ \edef\PD{\pgfplotspatchvertexdepth pt D}%
+ \pgfplotsutilsortfour\PA\PB\PC\PD
+ \def\toCHAR##1pt ##2{##2}% get original index
+ %
+ %
+ \edef\PA{\expandafter\toCHAR\PA}%%
+ \edef#2{\expandafter\toCHAR\PB}%%
+ \edef\Pnext{\csname pgfplots@rect@next@#2\endcsname}% this here uses only A,B,C and D (also for biquadratic patches!)
+ \if\Pnext\PA
+ % ok, next(BB) = CC.
+ % that means we have to advance forward.
+ \def#3{}%
+ \edef#2{\csname pgfplots@rect@rnext@#2\endcsname}%
+ \else
+ \edef#2{\csname pgfplots@rect@next@#2\endcsname}%
+ \def#3{r}%
+ \fi
+%\message{^^JDEPTH SEQUENCE for rectangle: \PA, \PB, \PC, \PD^^J}%
+%\message{COONS PATH ORDERING: starts with #2, direction: \ifx#3\pgfutil@empty forward\else backward\fi^^J}%
+ \fi
+}%
+
+\def\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth@no@op#1#2#3{%
+ \def#2{A}%
+ \def#3{}%
+}
+
+\def\pgfplotsplothandlermesh@patchclass@defaulttext{default}%
+
+% This is a VERY special case. The idea is to switch to
+% "normal" path mode:
+% \pgfpathmoveto \pgfpathlineto \pgfpathlineto
+% \pgfpathlineto \pgfusepath.
+%
+% Note that the mesh handler's default is to issue
+% \pgfusepath after *each* elementary patch.
+%
+% This special use-case might not cover all aspects of the
+% mesh/surf/patch plot handler.
+\def\pgfplotsplothandlermesh@init@path@without@point@meta{%
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{supports global path}%
+ \ifnum\pgfplotsretval=1 %
+ \def\pgfplotsplothandlermesh@definecolor{%
+ % no-op
+ }%
+ % FIXME : this does not handle separate edges, i.e.
+ % \pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke
+ \def\pgfplotsplothandlermesh@VISUALIZE{\pgfplotsplothandlermesh@VISUALIZE@globalpath@fill@andor@stroke}%
+ \let\pgfplotsplothandlermesh@pathmoveto=\pgfplotsplothandlermesh@pathmoveto@globalpath
+ \let\pgfplotsplothandlermesh@setlastpoint=\pgfplotsplothandlermesh@setlastpoint@globalpath
+ %
+ % This activates tikz colors:
+ %\tikz@options
+ \pgfplots@drawoptions
+ % Acquire the values for \tikz@mode@* [used for faceted]
+ \pgfplots@drawmodes
+ \else
+ \pgfplots@error{Please provide 'point meta' for your plot. Omitting point meta is only supported for 1d patch types.}%
+ \fi
+}
+
+% implements 'show normals'. Keep in mind that this is more-or-less a
+% debugging helper, not productive code.
+\def\pgfplotsplothandlermesh@show@normals{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{compute normal}%
+ \let\pgfplots@normal@vector=\pgfplotsretval
+%\pgfplotsmathvectortostring\pgfplots@normal@vector{default}%
+%\message{got normal \pgfplotsretval^^J}%
+ \pgfplotsmathvectorlength{\pgfplots@normal@vector}{default}%
+ \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/pgfplots/mesh/show normals length factor}}% FIXME
+ \pgfplotscoordmath{default}{op}{divide}{{\pgfmathresult}{\pgfplotsretval}}%
+ \pgfplotsmathvectorscale{\pgfplots@normal@vector}{\pgfmathresult}{default}%
+ %\pgfplotsmathvectoradd{\pgfplotspatchvertexcoords}{\pgfplotsretval}{default}%
+ \let\pgfplots@normal@vector=\pgfplotsretval
+ %
+ \draw[/pgfplots/every patch normal]
+ \pgfextra{%
+ \pgfpathmoveto
+ {%
+ \pgf@process{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{get num vertices}%
+ \pgfmath@basic@reciprocal@{\pgfplotsretval}%
+ \let\scale=\pgfmathresult
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchclass{\pgfplotspatchclassname}{foreach vertex}{%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchvertexstruct\times{\scale}%
+ }%
+ \pgfplotspatchvertexfinishXY{\pgfplots@loc@TMPa}%
+ \expandafter\pgfplotspointpatchvertex\pgfplots@loc@TMPa\endvertex%
+ }%
+ }%
+ \edef\pgfplots@loc@TMPa{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ %
+ \pgfpathlineto{%
+ \pgfpointadd
+ {\pgfplots@loc@TMPa}
+ {\pgfplotspointfromcsvvector\pgfplots@normal@vector{default}}%
+ }%
+ }%
+ ;
+}%
+
+% Defines \pgfplotsretval to be either empty or the current point's
+% depth according to z buffer information.
+\def\pgfplotsplothandlermesh@compute@vertex@depth{\let\pgfplotsretval\pgfutil@empty}%
+
+% If \pgfplotsplothandlermesh@compute@vertex@depth is set to this
+% particular implementation, the \pgfplotspatchvertexdepth macro will
+% contain the view depth.
+%
+\def\pgfplotsplothandlermesh@compute@vertex@depth@doit{%
+ \ifx\pgfplots@current@point@x\pgfutil@empty
+ \let\pgfplotsretval\pgfutil@empty
+ \else
+ \pgfplotsmathvectorfromstring{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z}{default}%
+ \pgfplotsmathvectorviewdepth{\pgfplotsretval}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfplotsretval}%
+ \edef\pgfplotsretval{\pgfmathresult}%
+ \fi
+}%
+
+% A command which defines \pgfplotsretval to be either empty or to
+% the (x,y,z) 3d coordinates of the data point. Usually, the data
+% scaling transformation will already be applied to these points.
+%
+% Note that this is unnecessary for most applications of mesh plots.
+%
+% The resulting value will be available as \pgfplotspatchvertexcoords
+\def\pgfplotsplothandlermesh@serialize@logical@coords{%
+ % empty by default
+ \let\pgfplotsretval=\pgfutil@empty
+}%
+\def\pgfplotsplothandlermesh@serialize@logical@coords@doit{%
+ \ifx\pgfplots@current@point@x\pgfutil@empty
+ \let\pgfplotsretval=\pgfutil@empty
+ \else
+ % note that these points are the result of the data scaling
+ % trafo. That is OK because the view normal is also in the
+ % same coordinate space.
+ \pgfplotsmathvectorfromstring{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z}{default}%
+ \fi
+}
+
+% the inverse for \pgfplotsplothandlermesh@serialize@logical@coords: it defines \pgfplots@current@point@[xyz].
+% You should only call it if you know that there IS something to deserialize.
+\def\pgfplotsplothandlermesh@deserialize@logical@coords#1{%
+ \expandafter\pgfplotsplothandlermesh@deserialize@logical@coords@#1\relax
+}%
+\def\pgfplotsplothandlermesh@deserialize@logical@coords@#1,#2,#3\relax{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+}%
+
+% The patch visualization works like a PIPELINE:
+%
+% DECODE -> CHECK JUMP -> REFINE -> FINISH
+%
+% where FINISH is usually nothing but VISUALIZE; but it can also mean
+% to collect patches, sort them according to view depth and visualize
+% the result.
+%
+% Each single PIPE element can be exchanged by a separate "subclass".
+% For example, DECODE can either DECODE from a matrix (a lattice) or a
+% sequence of patch coords.
+%
+\def\pgfplotsplothandlermesh@stream#1{%
+ \pgfplotsplothandlermesh@PIPE@DECODE{#1}%
+}%
+
+% accumulates a patch vertex-by-vertex.
+% #1 the next vertex of a patch (#1 defines canvas coordinates \pgf@x
+% and \pgf@y).
+%
+% @PRECONDITION \pgfplots@current@point@[xyz] and \pgfplots@current@point@meta
+% need to be defined.
+\def\pgfplotsplothandlermesh@PIPE@DECODE#1{%
+ \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input
+ \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval
+ \let\pgfplots@view@depth=\pgfplotsretval
+ \pgf@process{#1}%
+ % calls \pgfplotspatchready when ready
+ \pgfplotsplothandlermesh@serialize@logical@coords
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set next vertex}{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplots@view@depth:\pgfplotsretval}%%
+}%
+\def\pgfplotspatchready{%
+ \pgfplotsplothandlermesh@PIPE@CHECKJUMP
+}%
+\let\pgfplotspatchready@orig=\pgfplotspatchready
+\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP{%
+ \pgfplots@loc@tmptrue
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{foreach vertex}{%
+ \pgfplotsplothandlermesh@check@unbounded%
+ }%
+ %
+ \ifpgfplots@loc@tmp
+ \pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta
+ \fi
+ %
+ \ifpgfplots@loc@tmp
+ \expandafter\pgfplotsplothandlermesh@PIPE@REFINE
+ \fi
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@noop{%
+}
+
+\let\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta=\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@noop
+
+\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@everyvertex{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{foreach cdata vertex}{%
+ \pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@check
+ }%
+}%
+\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@firstvertex{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{first vertex before z buffer}%
+ \pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@check
+}%
+\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@firstvertex@legacy{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{first vertex}%
+ \pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@check
+}%
+\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@check{%
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \pgfplotsifpointmetaisbounded{\pgfplotspatchvertexmeta}{}{%
+ \pgfplots@loc@tmpfalse
+ }%
+ \else
+ % mesh/color input=explicit
+ \ifx\pgfplotspatchvertexmeta\pgfutil@empty
+ \pgfplots@loc@tmpfalse
+ \fi
+ \fi
+}
+
+\def\pgfplotsplothandlermesh@PIPE@REFINE@no@op{%
+ \pgfplotsplothandlermesh@PIPE@FINISH
+}%
+\let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@no@op
+
+% invoked when a patch is completely processed.
+% This might be replaced by the z buffering algorithm
+\def\pgfplotsplothandlermesh@PIPE@FINISH{%
+ \pgfplotsplothandlermesh@PIPE@interior@exterior@styles
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@interior@exterior@styles{%
+ \pgfplotsplothandlermesh@interior@exterior@hook
+ \pgfplotsplothandlermesh@VISUALIZE
+}%
+
+% Standard implementation for VISUALIZE
+\def\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{fill path}%
+ \pgfplotsplothandlermesh@definecolor
+ \pgfplotsplothandlermesh@usepath
+ \pgfplotsplothandlermesh@show@normals@if@configured
+}%
+
+% a special VISUALIZE implementation which allows to draw a CONTINUOS
+% global path, i.e. one which is not "\pgfusepath"ed after each patch
+% segment. This is only used if 'point meta=none'
+\def\pgfplotsplothandlermesh@VISUALIZE@globalpath@fill@andor@stroke{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{fill path}%
+}%
+
+\def\pgfplotsplothandlermesh@VISUALIZE@std{\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke}
+
+\def\pgfplotsplothandlermesh@VISUALIZE{\pgfplotsplothandlermesh@VISUALIZE@std}
+
+\let\pgfplotsplothandlermesh@show@normals@if@configured\relax
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\pgfplotsplothandlermesh@init@DECODE{%
+ \if0\pgfplotsplothandlermesh@matrixinput
+%\message{initialised DECODE for patch output (from patch).^^J}%
+ \else
+ % mesh input=lattice|image
+ % Init memory:
+ %
+ % And now finally: initialise the conversion from
+ % LINEARIZED COORD STREAM -> DATA MATRIX:
+ \if\pgfplots@plot@mesh@ordering0%
+ % x varies (=rowwise):
+ \let\pgfplotsplothandlermesh@scanlinelength=\pgfplotsplothandlermesh@cols
+ \let\pgfplotsplothandlermesh@numscanlines=\pgfplotsplothandlermesh@rows
+ \else
+ % y varies (=colwise):
+ \let\pgfplotsplothandlermesh@scanlinelength=\pgfplotsplothandlermesh@rows
+ \let\pgfplotsplothandlermesh@numscanlines=\pgfplotsplothandlermesh@cols
+ \fi
+ %
+ \if1\pgfplotsplothandlermesh@ONEDIMMODE
+%\message{initialised DECODE for 1d mode.^^J}%
+ % FIXME : needs LUA support...
+ \if2\pgfplotsplothandlermesh@matrixinput
+ % mesh input=image
+ \pgfplots@error{'matrix input=image' is unsupported for line plots (or matrix plots with just 1 row or 1 column). Please provide at least 2 rows and 2 cols for 'matrix input=image'}%
+ \fi
+ \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@matrix@ONEDIMMODE
+ \else
+ \if0\b@pgfplotsplothandlermesh@matrixoutput
+ \if1\b@pgfplots@LUA@visualization@enabled
+%\message{initialised DECODE for patch output (from matrix which has already been decoded in LUA).^^J}%
+ \else
+ % in fact, this does only remember the maximum capacity;
+ % it doesn't fill the memory.
+ \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax
+ \advance\c@pgfplots@scanlineindex by1
+ \pgfplotsdequenewempty{lastscanline}\capacity{\the\c@pgfplots@scanlineindex}%
+ \if1\pgfplotsplothandlermesh@matrixinput
+ % mesh input=lattice
+ \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@matrix@fillscanline
+%\message{initialised DECODE for patch output (from matrix).^^J}%
+ \else
+ % mesh input=image
+ % lastinterpscanline contains a line of
+ % interpolated points, and there is one more than points. Preallocate it:
+ \advance\c@pgfplots@scanlineindex by1
+ \pgfplotsdequenewempty{lastinterpscanline}\capacity{\the\c@pgfplots@scanlineindex}%
+ % NOTE: implementation is in a separate file.
+ \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@image@fillscanline
+%\message{initialised DECODE for IMAGE output (from matrix).^^J}%
+ \fi
+ \fi
+ \else
+ % SPECIAL HANDLING!
+ \if1\pgfplotsplothandlermesh@matrixinput
+ % mesh input=lattice
+ \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@to@shader
+ \else
+ % mesh input=image
+ % this should never happen because matrix output
+ % is off for mesh input=image
+ \pgfplots@error{Illegal internal state encountered}%
+ \fi
+%\message{initialised DECODE for direct matrix output (from matrix).^^J}%
+ \fi
+ \fi
+ \fi
+}%
+
+
+\def\pgfplotsplothandlermesh@PIPE@REFINE@triangulate{%
+ \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@FINISH
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{triangulate}%
+ \let\pgfplotspatchready\pgfplotspatchready@orig
+}%
+\def\pgfplotsplothandlermesh@PIPE@REFINE@recursively{%
+ \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@FINISH
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{refine}{\pgfplotsplothandlermesh@refinecount}%
+ \let\pgfplotspatchready\pgfplotspatchready@orig
+}%
+\def\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively{%
+ \let\pgfplotspatchready=\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively@patchready
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{refine}{\pgfplotsplothandlermesh@refinecount}%
+ \let\pgfplotspatchready\pgfplotspatchready@orig
+}%
+\def\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively@patchready{%
+ \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@FINISH
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{triangulate}%
+ \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively@patchready
+}%
+\def\pgfplotsplothandlermesh@init@REFINE{%
+ \pgfkeysgetvalue{/pgfplots/patch refines}\pgfplotsplothandlermesh@refinecount
+ \if0\pgfplotsplothandlermesh@triangulate
+ \ifnum\pgfplotsplothandlermesh@refinecount>0
+%\message{initiased REFINE to REFINE.}%
+ \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@recursively
+ \else
+%\message{initiased REFINE to NOP.}%
+ \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@no@op
+ \fi
+ \else
+%\message{initiased REFINE to triangulate.}%
+ \ifnum\pgfplotsplothandlermesh@refinecount>0
+ \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively
+ \else
+ \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@triangulate
+ \fi
+ \fi
+}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% MESH SURVEY
+\def\pgfplotsplothandlersurveystart@mesh{%
+ \pgfplotsplothandlersurveystart@default
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \else
+ % mesh/color input=explicit
+ \if1\pgfplotsplothandlermesh@colorinput@mathparse
+ \pgfkeysdef{/pgfplots/color sequence/every input component}{%
+ \expandafter\pgfmathparse\expandafter{\pgfmathresult}%
+ \ifpgfplots@usefpu
+ \pgfmathfloattofixed\pgfmathresult
+ \fi
+ }%
+ \else
+ \pgfkeysdef{/pgfplots/color sequence/every input component}{}%
+ \fi
+ \pgfplotscolornormalizesequence[
+ colorspace=\pgfkeysvalueof{/pgfplots/mesh/colorspace explicit color output},
+ default input colorspace=\pgfkeysvalueof{/pgfplots/mesh/colorspace explicit color input},
+ context message={point meta '\pgfplots@current@point@meta' of coord no \the\c@pgfplots@coordindex\space (\pgfplots@current@point@x,\pgfplots@current@point@y\ifpgfplots@curplot@threedim,\pgfplots@current@point@z\fi)},
+ ]%
+ \fi
+ %
+ \if2\pgfplotsplothandlermesh@matrixinput
+ % mesh input=image
+ \pgfplotsplothandlersurveystart@mesh@image
+ \pgfplotsplothandlermesh@needs@scanlinecomplete@notificationstrue
+ \fi
+ %
+ \pgfplotsplothandlersurveypoint@mesh@check@scanline@length@init
+}%
+
+\def\pgfplotsplothandlersurveypoint@mesh{%
+ \pgfplotsplothandlersurveypoint@default
+ %
+ \pgfplotsplothandlersurveypoint@mesh@common
+}
+
+\def\pgfplotsplothandlersurveypoint@mesh@common{%
+ \if2\pgfplotsplothandlermesh@matrixinput
+ \pgfplotsplothandlersurveypoint@mesh@image
+ \fi
+ %
+ \ifcase\pgfplotsplothandlermesh@matrixinput
+ \else
+ % mesh input=lattice|image
+ \pgfplotsplothandlersurveypoint@mesh@check@scanline@length
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveypoint@pseudoconstant@row@index{%
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = x varies= rowwise -> scanline is cols!
+ \else
+ % ordering = y varies = colwise: scanline is rows!
+ \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty
+ \fi
+}%
+
+% initializes \pgfplotsplothandlersurveypoint@mesh@check@scanline@length, see its comments.
+\def\pgfplotsplothandlersurveypoint@mesh@check@scanline@length@init{%
+ \pgfkeysgetvalue{/pgfplots/empty line}\pgfplots@loc@TMPa%
+ \def\pgfplots@loc@TMPb{scanline}
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \else
+ % without end-of-scanline markers, the notification
+ % \pgfplotsscanlinecomplete does not make sense anyway in this
+ % context. Disable it:
+ \let\pgfplotsplothandlersurveypoint@mesh@check@scanline@length=\relax
+ \fi
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = x varies= rowwise -> scanline is cols!
+ \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty
+ % ... and without columns, we cannot generate the notification.
+ \let\pgfplotsplothandlersurveypoint@mesh@check@scanline@length=\relax
+ \fi
+ \else
+ % ordering = y varies = colwise: scanline is rows!
+ \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty
+ % ... and without rows, we cannot generate the notification.
+ \let\pgfplotsplothandlersurveypoint@mesh@check@scanline@length=\relax
+ \fi
+ \fi
+}
+
+% Invokes \pgfplotsscanlinecomplete if the scanline is complete according to the keys 'mesh/rows' and/or 'mesh/cols'
+%
+% This routine improves the precision of the scanline computation, but not much.
+% At the time of this writing, its only purpose is to help 'matrix input=image'
+% as that requires information about the current scanline in order to update its
+% axis limits.
+%
+% Note that this macro is unnecessary in many cases: if the user input _contains_ end-of-scanline markers, it is redundant.
+%
+% Limitations of this routine:
+% 1. it requires 'empty line=scanline'.
+% 2. if mesh/ordering=x varies, it requires that mesh/cols is set.
+% if mesh/ordering=y varies, it requires that mesh/rows is set.
+%
+% In all other cases, it simply becomes a no-op without further notice (i.e. it will be \let to \relax)
+\def\pgfplotsplothandlersurveypoint@mesh@check@scanline@length{%
+%\message{checking scanline length for \the\c@pgfplots@scanlineindex. cols=\pgfplotsplothandlermesh@cols, rows=\pgfplotsplothandlermesh@rows. ordering = \pgfplots@plot@mesh@ordering^^J}%
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = x varies= rowwise -> scanline is cols!
+ \ifnum\pgfplotsplothandlermesh@cols=\c@pgfplots@scanlineindex\relax
+ % it does not hurt to invoke this here multiple times -- it has to handle that case anyway:
+ \pgfplotsscanlinecomplete
+ \fi
+ \else
+ % ordering = y varies = colwise: scanline is rows!
+ \ifnum\pgfplotsplothandlermesh@rows=\c@pgfplots@scanlineindex\relax
+ % it does not hurt to invoke this here multiple times -- it has to handle that case anyway:
+ \pgfplotsscanlinecomplete
+ \fi
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveypoint@mesh@noreset@of@pointmeta{%
+ \pgfplotsplothandlersurveypoint@default@noreset@of@pointmeta
+ \pgfplotsplothandlersurveypoint@mesh@common
+}%
+
+\newif\ifpgfplotsplothandlermesh@needs@scanlinecomplete@notifications
+
+\def\pgfplotsplothandlersurveyend@mesh{%
+ \pgfplotsplothandlersurveyend@default
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \else
+ % mesh/color input=explicit
+ \endpgfplotscolornormalizesequence
+ \fi
+ %
+ \if2\pgfplotsplothandlermesh@matrixinput
+ % mesh input=image
+ \pgfplotsplothandlersurveyend@mesh@image
+ \fi
+ %
+ \ifpgfplotsplothandlermesh@needs@scanlinecomplete@notifications
+ %
+ % OK, we EXPECT that the code generated
+ % notifications of sorts \pgfplotsscanlinecomplete.
+ %
+ % If this turns out to be NOT the case, we generate a
+ % warning/error.
+ %
+ % This, in turn, is restricted to the following cases:
+ % 1. there have been end-of-scanline markers in the input
+ % stream (that's why we can only decide it here, after the
+ % input has been surveyed)
+ % 2. OR \pgfplotsscanlinecomplete has been called due to scan
+ % line length comparison with mesh/cols or mesh/rows. In this
+ % case, the required argument must have been set, see
+ % \pgfplotsplothandlersurveypoint@mesh@check@scanline@length@init
+ %
+ \ifnum\c@pgfplotsplothandlermesh@image@numscanlines<2
+ \pgfplotsautocompletemeshkeys%
+ \ifx\pgfplotsplothandlersurveypoint@mesh@check@scanline@length\relax
+ % ah -- this routine has been cleared because the keys are
+ % missing.
+ %
+ % Please see the comments on
+ % \pgfplotsplothandlersurveypoint@mesh@check@scanline@length
+ % for details.
+ %
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = x varies= rowwise -> scanline is cols!
+ \pgfplotswarning{imagesc limits incomplete}{mesh/cols=\pgfplotsplothandlermesh@cols}\pgfeov%
+ \else
+ % ordering = y varies = colwise: scanline is rows!
+ \pgfplotswarning{imagesc limits incomplete}{mesh/rows=\pgfplotsplothandlermesh@rows}\pgfeov%
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+}
+
+\def\pgfplotsplothandlersurvey@mesh@scanlinecomplete{%
+ %
+ %
+ \if2\pgfplotsplothandlermesh@matrixinput
+ % mesh input=image
+ \pgfplotsplothandlersurveyend@mesh@image@scanlinecomplete
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveyaftersetpointmeta@mesh@cdatanormalize{%
+ \pgfplotsplothandlersurveyaftersetpointmeta@default
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \else
+ % mesh/color input=explicit
+ \pgfplotscolornormalizesequencenext{\pgfplots@current@point@meta}%
+ \let\pgfplots@current@point@meta=\pgfplotsretval
+ \fi
+}%
+
+\newif\ifpgfplotsplothandlermesh@patchtable@hascdata
+\newif\ifpgfplotsplothandlermesh@patchtable@cdata@individual
+\def\pgfplotsplothandlersurveystart@mesh@patchtable{%
+ \pgfplotsplothandlersurveystart@mesh
+ \pgfplotsarraynewempty\pgfplots@verts
+}%
+\def\pgfplotsplothandlersurveypoint@mesh@patchtable{%
+ \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x}%
+ \let\pgfplots@current@point@x=\pgfmathresult
+ %
+ \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y}%
+ \let\pgfplots@current@point@y=\pgfmathresult
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplotscoordmath{z}{parsenumber}{\pgfplots@current@point@z}%
+ \let\pgfplots@current@point@z=\pgfmathresult
+ \fi
+ %
+ \ifpgfplotsplothandlermesh@patchtable@hascdata
+ % will be handled later, using data from within 'patch table':
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \else
+ \pgfplotsaxissurveysetpointmeta
+ \fi
+ %
+ \def\pgfplots@loc@TMPa{1}%
+ \ifx\pgfplots@current@point@x\pgfutil@empty
+ \def\pgfplots@loc@TMPa{0}%
+ \else
+ \ifx\pgfplots@current@point@y\pgfutil@empty
+ \def\pgfplots@loc@TMPa{0}%
+ \else
+ \ifx\pgfplots@current@point@z\pgfutil@empty
+ \ifpgfplots@curplot@threedim
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \if1\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z;\pgfplots@current@point@meta;}%
+ \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPa\to\pgfplots@verts
+ \fi
+}%
+\def\pgfplotsplothandlersurveyend@mesh@patchtable{%
+ \pgfplotsplothandlersurveyend@mesh
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@default
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@default
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@mesh@noreset@of@pointmeta
+ \pgfplotsplothandlersurveystart
+ \expandafter\pgfplotstable@isloadedtable\expandafter{\pgfplotsplothandlermesh@patchtable}{%
+ \pgfplots@error{Sorry, 'patch table={<loaded table>}' has not been implemented; it would probably be too slow :-(. Please provide a file name or inline table data}%
+ }{%
+ \expandafter\pgfplotstableread\expandafter*\expandafter{\pgfplotsplothandlermesh@patchtable} to listener\pgfplotsplothandlermesh@patchtable@rowlistener
+ }%
+ \pgfplotsplothandlersurveyend
+}%
+
+\def\pgfplotsplothandlermesh@patchtable@init{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{get num vertices}%
+ \let\pgfplotsplothandlermesh@patchtable@numverts=\pgfplotsretval
+ %
+ \ifpgfplotsplothandlermesh@patchtable@hascdata
+ \ifpgfplotsplothandlermesh@patchtable@cdata@individual
+ \else
+ \ifnum\pgfplotsplothandlermesh@patchtable@numverts<\pgfplotstablecols\relax
+ % prepare a pointer to data column: use the column
+ % after the last vertex index.
+ % this thing constitutes the "default" cdata source for
+ % 'point meta=explicit'.
+ \pgfplotstablereadgetptrtocolindex
+ {\pgfplotsplothandlermesh@patchtable@numverts}
+ {\pgfplots@table@PTR@CDATA}%
+ \else
+ \let\pgfplots@table@PTR@CDATA=\relax
+ \fi
+ \fi
+ \else
+ \pgfplotsplothandlermesh@patchtable@cdata@individualfalse
+ \fi
+ %
+ \c@pgf@countb=0
+ \pgfutil@loop
+ \ifnum\c@pgf@countb<\pgfplotsplothandlermesh@patchtable@numverts\relax
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplotstablereadgetptrtocolindex{\the\c@pgf@countb}{\expandafter\noexpand\csname pgfplots@table@PTR@\the\c@pgf@countb\endcsname}%
+ }%
+ \pgfplots@loc@TMPa
+ \advance\c@pgf@countb by1
+ \pgfutil@repeat
+ \let\pgfplotsplothandlermesh@patchtable@init=\relax
+}%
+\def\pgfplotsplothandlermesh@patchtable@rowlistener@exceptionmsg{%
+ patch table \pgfplotsplothandlermesh@patchtable\space line \pgfplotstablelineno: could not read column no \the\c@pgf@countb: expected '\pgfplots@current@vertexindex' to be a valid index into the vertex arrays (the \pgfplotsarraysizeof\pgfplots@verts\space input coordinates)%
+}%
+\def\pgfplotsplothandlermesh@patchtable@rowlistener{%
+ \pgfplotsplothandlermesh@patchtable@init%
+ %
+ \ifpgfplotsplothandlermesh@patchtable@hascdata
+ \ifpgfplotsplothandlermesh@patchtable@cdata@individual
+ \else
+ \ifx\pgfplots@table@PTR@CDATA\relax
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \else
+ \pgfplotstablereadevalptr\pgfplots@table@PTR@CDATA\pgfplots@current@point@meta
+ \fi
+ \fi
+ \fi
+ %
+ \c@pgf@countb=0
+ \pgfutil@loop
+ \ifnum\c@pgf@countb<\pgfplotsplothandlermesh@patchtable@numverts\relax
+ \expandafter\pgfplotstablereadevalptr\csname pgfplots@table@PTR@\the\c@pgf@countb\endcsname\pgfplots@current@vertexindex%
+ %
+ \ifx\pgfplots@current@vertexindex\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfplots@current@vertexindex}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\pgfplots@current@vertexindex=\pgfmathresult
+ %
+ \let\pgfplotsexceptionmsg=\pgfplotsplothandlermesh@patchtable@rowlistener@exceptionmsg
+ \pgfplotsarrayselect\pgfplots@current@vertexindex\of\pgfplots@verts\to\pgfplots@stored@pt
+ \let\pgfplotsexceptionmsg=\relax
+ %
+ \ifpgfplotsplothandlermesh@patchtable@cdata@individual
+ \c@pgf@countc=\c@pgf@countb\relax
+ \advance\c@pgf@countc by\pgfplotsplothandlermesh@patchtable@numverts\relax
+ \expandafter\getthisrowno\expandafter{\the\c@pgf@countc}\pgfplots@current@point@meta
+ \fi
+ %
+ \expandafter\pgfplotsplothandlermesh@patchtable@stream\pgfplots@stored@pt
+ \fi
+ \advance\c@pgf@countb by1
+ \pgfutil@repeat
+}
+\def\pgfplotsplothandlermesh@patchtable@stream#1,#2,#3;#4;{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+ \ifpgfplotsplothandlermesh@patchtable@hascdata
+ \def\pgfplots@set@perpointmeta@done{0}%
+ \pgfplotsaxissurveysetpointmeta
+ \else
+ \def\pgfplots@current@point@meta{#4}%
+ \fi
+ \pgfplotsplothandlersurveypoint
+}%
+% MESH SURVEY
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\pgfplotsplothandlermesh@init@meshkeys{%
+ \ifcase\pgfplotsplothandlermesh@matrixinput\relax
+ % mesh input=patches
+ \pgfkeys{/pgfplots/mesh/ordering/x varies}% disable any special handling.
+ \else
+ % mesh input=lattice|image
+ \pgfplotsautocompletemeshkeys%
+ \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsplothandlermesh@rows
+ \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsplothandlermesh@cols
+ \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplotsplothandlermesh@numpoints
+ %
+ % the \pgfplotsplothandlermesh@ONEDIMMODE macro is ONLY
+ % interesting for matrix input.
+ \ifnum\pgfplotsplothandlermesh@cols>1
+ \else
+ \def\pgfplotsplothandlermesh@ONEDIMMODE{1}%
+ \fi
+ \ifnum\pgfplotsplothandlermesh@rows>1
+ \else
+ \def\pgfplotsplothandlermesh@ONEDIMMODE{1}%
+ \fi
+ \if1\pgfplotsplothandlermesh@ONEDIMMODE
+ \def\pgfplotsplothandlermesh@patchclass{line}%
+ \pgfkeyslet{/pgfplots/patch type}\pgfplotsplothandlermesh@patchclass
+ \fi
+ \fi
+ %
+ \pgfplotspatchclass{\pgfkeysvalueof{/pgfplots/patch type}}{get dimension}%
+ \ifnum\pgfplotsretval=1 %
+ \def\pgfplots@meshmode{m}% mesh.
+ \fi
+ %
+}%
+
+\let\pgfplotsplothandlermesh@interior@exterior@hook=\relax
+\def\pgfplotsplothandlermesh@interior@exterior@hook@active@zerothresh{%
+ \begingroup
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{compute normal}%
+% \let\pgfplots@normal=\pgfplotsretval
+% \pgfplotsmathvectorlength{\pgfplotsretval}{default}%
+% \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplotsretval}}%
+% \pgfplotsmathvectorscale{\pgfplots@normal}{\pgfmathresult}{default}%
+ %
+ \pgfplotsmathvectorscalarproduct{\pgfplots@view@dir@threedim}{\pgfplotsretval}{default}%
+ \pgfplotscoordmath{default}{if is}{\pgfplotsretval}{-}{%
+ % <0:
+ \global\let\pgfplots@glob@TMPc\pgfplotsplothandlermesh@is@interior
+ }{%
+ % >=0:
+ \global\let\pgfplots@glob@TMPc\pgfplotsplothandlermesh@is@exterior
+ }%
+ \endgroup
+ \pgfplots@glob@TMPc
+}%
+
+\def\pgfplotsplothandlermesh@interior@exterior@hook@active{%
+ \begingroup
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{compute normal}%
+ \let\pgfplots@normal=\pgfplotsretval
+ \pgfplotsmathvectorlength{\pgfplotsretval}{default}%
+ \let\pgfplots@normal@len=\pgfplotsretval
+ %
+ \pgfplotsmathvectorscalarproduct{\pgfplots@view@dir@threedim}{\pgfplots@normal}{default}%
+ \let\pgfplots@dot=\pgfplotsretval
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@view@dir@threedim@len}{\pgfplots@normal@len}}%
+ \pgfplotscoordmath{default}{op}{divide}{{\pgfplots@dot}{\pgfmathresult}}%
+
+ \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplotsplothandlermesh@interior@thresh}{%
+ % <0:
+ \global\let\pgfplots@glob@TMPc\pgfplotsplothandlermesh@is@interior
+ }{%
+ % >=0:
+ \global\let\pgfplots@glob@TMPc\pgfplotsplothandlermesh@is@exterior
+ }%
+ \endgroup
+ \pgfplots@glob@TMPc
+}%
+
+
+% only used if
+% \pgfplotsplothandlermesh@interior@exterior@hook@active is
+% active
+\def\pgfplotsplothandlermesh@is@interior{%
+%\def\pgfplotsplothandlermesh@usepath{\pgfusepath{discard}}%
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplotsplothandlermesh@colormapname@interior
+ \pgfkeyslet{/pgfplots/surf shading/colormap}\pgfplotsplothandlermesh@shader@colormap@interior
+}%
+\def\pgfplotsplothandlermesh@is@exterior{%
+%\let\pgfplotsplothandlermesh@usepath=\pgfplotsplothandlermeshusepathfillstroke
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplotsplothandlermesh@colormapname
+ \pgfkeyslet{/pgfplots/surf shading/colormap}\pgfplotsplothandlermesh@shader@colormap
+}%
+
+\def\pgfplotsplothandlermesh@init@cdata{%
+ % Ok, we have color data.
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplotsplothandlermesh@colormapname
+ %
+ %
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \pgfplotscolormapgetcolorcomps{\pgfplotsplothandlermesh@colormapname}%
+ \let\pgfplotsplothandlermesh@explicit@color@num@comps=\pgfplotsretval
+ \else
+ % mesh/color input=explicit
+ \pgfkeysgetvalue{/pgfplots/mesh/colorspace explicit color output}\pgfplots@loc@TMPa
+ \pgfplotscolorspacegetcomponents{\pgfplots@loc@TMPa}%
+ \let\pgfplotsplothandlermesh@explicit@color@num@comps=\pgfplotsretval
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/mesh/interior colormap name}\pgfplotsplothandlermesh@colormapname@interior
+ \ifx\pgfplotsplothandlermesh@colormapname@interior\pgfutil@empty
+ \else
+ \pgfkeysgetvalue{/pgfplots/mesh/interior colormap thresh}\pgfplotsplothandlermesh@interior@thresh
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplotsplothandlermesh@interior@thresh}%
+ \let\pgfplotsplothandlermesh@interior@thresh=\pgfmathresult
+ \pgfplotscoordmath{default}{if is}{\pgfplotsplothandlermesh@interior@thresh}{0}{%
+ \let\pgfplotsplothandlermesh@interior@exterior@hook=\pgfplotsplothandlermesh@interior@exterior@hook@active@zerothresh
+ }{%
+ \pgfplotsmathvectorlength{\pgfplots@view@dir@threedim}{default}% should be 1, but never mind
+ \let\pgfplots@view@dir@threedim@len=\pgfplotsretval
+ \let\pgfplotsplothandlermesh@interior@exterior@hook=\pgfplotsplothandlermesh@interior@exterior@hook@active
+ }%
+ % actually store 3d coordinates:
+ \let\pgfplotsplothandlermesh@serialize@logical@coords=\pgfplotsplothandlermesh@serialize@logical@coords@doit
+ \fi
+ %
+ % Prepare:
+ \def\pgfplotsplothandlermesh@definecolor{%
+ % FIXME : use lua backend to improve this here! it is
+ % _extremely_ slow!
+ \pgfplotsplothandlermesh@get@flat@color
+ \pgfplotsplothandlermesh@definemappedcolor{\pgfplotsretval}%
+ \pgfplots@drawoptions
+ }%
+ %
+ % Acquire the values for \tikz@mode@* [used for faceted]
+ \pgfplots@drawmodes
+}
+
+\def\pgfplotsplothandlermesh@definemappedcolor#1{%
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \if d\pgfplots@colormap@access
+ % colormap access=direct
+ % we assume that the color *is* already normalized,
+ % i.e. it is {<comma-separate-components>} and to be
+ % interpreted in the correct color space.
+ \edef\pgfplots@loc@TMPb{%
+ \noexpand\pgfutil@definecolor{mapped color}
+ {\pgfplotscolormapcolorspaceof{\pgfplotsplothandlermesh@colormapname}}%
+ {#1}%
+ }%
+ \pgfplots@loc@TMPb
+ \else
+ % colormap access=map|piecewise constant
+ \pgfplotscolormapdefinemappedcolor{#1}%
+ \fi
+ \else
+ % mesh/color input=explicit
+ %
+ % we assume that the color *is* already normalized,
+ % i.e. it is {<comma-separate-components>} and to be
+ % interpreted in the correct color space.
+ \edef\pgfplots@loc@TMPb{%
+ \noexpand\pgfutil@definecolor{mapped color}
+ {\pgfkeysvalueof{/pgfplots/mesh/colorspace explicit color output}}
+ {#1}%
+ }%
+ \pgfplots@loc@TMPb
+ \fi
+}%
+
+\let\pgfsetstrokecolor@orig=\pgfsetstrokecolor
+\def\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke@setstrokecolor#1{%
+ \pgfsetstrokecolor@orig{.}%
+}%
+\def\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke{%
+ \pgfplotsplothandlermesh@get@flat@color
+ \pgfplotsplothandlermesh@definemappedcolor{\pgfplotsretval}%
+ %
+ \ifx\pgfplotsplothandlermesh@usepathfill\relax
+ \else
+ \let\pgfsetstrokecolor=\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke@setstrokecolor
+ \pgfplots@drawoptions
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{fill path}%
+ \pgfplotsplothandlermesh@usepathfill
+ \fi
+ \ifx\pgfplotsplothandlermesh@usepathstroke\relax
+ \else
+ \let\pgfsetstrokecolor=\pgfsetstrokecolor@orig
+ \pgfplots@drawoptions
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{stroke path}%
+ \pgfplotsplothandlermesh@usepathstroke
+ \fi
+}%
+
+% This is one of two places where shadings are served with
+% coordinates; the other one uses matrix output (which does not work
+% with 'stream to shader')
+\def\pgfplotsplothandlermesh@VISUALIZE@interp{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{stream to shader}%
+ \ifpgf@relevantforpicturesize
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{foreach vertex}{%
+ \global\pgf@x=\pgfplotspatchvertexx\space
+ \global\pgf@y=\pgfplotspatchvertexy\space
+ % compute the bounding box using the vertices:
+ \pgfpointtransformed{}%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+ }%
+ \fi
+}%
+
+\def\pgfplotsplothandlermesh@VISUALIZE@faceted@interp{%
+ \pgfplotslibrarysurfstreamstart
+ \pgfplotsplothandlermesh@VISUALIZE@interp
+ \pgfplotslibrarysurfstreamend
+ \pgfplotslibrarysurfdrawinpicture
+ %
+ \pgfplotsplothandlermesh@VISUALIZE@std
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP@disable{%
+ \def\pgfplotsplothandlermesh@PIPE@CHECKJUMP{\pgfplotsplothandlermesh@PIPE@REFINE}%
+}%
+
+\def\pgfplotsplothandlermesh@init@shader{%
+ %
+ \ifnum\pgfplotsplothandlermesh@shader>1
+ % 'shader=2': 'interp':
+ % very simple: defer work to surf library. Only
+ % provide the mapped colordata.
+ %
+ % 'shader=3': 'faceted interp':
+ % a mix of 'faceted' and 'interp'. (might be inefficient in
+ % terms of pdf memory and rendering times)
+ %
+ % This won't be used for mesh plots, neither in one
+ % nor in two dimensions.
+ \pgfkeyssetvalue{/pgfplots/surf shading/anchor}{\pgfpointorigin}%
+ %
+ % do NOT update the picture's BB using the streamed low-level coordinates
+ % (which are bezier control points in most cases).
+ % We do that on our own using the input vertices.
+ \pgfkeys{/pgfplots/surf shading/update BB=false}%
+ \if1\b@pgfplotsplothandlermesh@matrixoutput
+ % this *implies* a compatible patch class, see the
+ % definition of \b@pgfplotsplothandlermesh@matrixoutput
+ \def\pgfplotsretval{5}%
+ \else
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{get pdf shading type}%
+ \if5\pgfplotsretval
+ % we have no matrix output->
+ % downgrade lattice triangular grid to individual
+ % triangles:
+ \def\pgfplotsretval{4}%
+ \fi
+ \fi
+ \pgfkeyslet{/pgfplots/surf shading/shading type}\pgfplotsretval%
+ %
+ \pgfplotsplothandlermesh@set@shader@colormap
+ \pgfkeysgetvalue{/pgfplots/mesh/interior colormap name}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \let\pgfplotsplothandlermesh@shader@colormap=\pgfplotsretval
+ \begingroup
+ \pgfkeyslet{/pgfplots/colormap name}\pgfplots@loc@TMPa
+ \pgfplotsplothandlermesh@set@shader@colormap
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ \let\pgfplotsplothandlermesh@shader@colormap@interior=\pgfplotsretval
+ \fi
+ %
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@loc@TMPa
+ \pgfplotscolormapgetcolorspace\pgfplots@loc@TMPa
+ \pgfkeyslet{/pgfplots/surf shading/colorspace}\pgfplotsretval
+ \else
+ % mesh/color input=explicit
+ \pgfkeysgetvalue{/pgfplots/mesh/colorspace explicit color output}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \pgfkeyslet{/pgfplots/surf shading/colorspace}\pgfplots@loc@TMPa
+ \fi
+ \if2\pgfplotsplothandlermesh@shader
+ % shader=interp
+ \let\pgfplotsplothandlermesh@definecolor=\relax
+ \let\pgfplotsplothandlermesh@VISUALIZE=\pgfplotsplothandlermesh@VISUALIZE@interp%
+ \pgfkeyslet{/pgfplots/surf shading/cols}\pgfplotsplothandlermesh@scanlinelength
+ %\if1\b@pgfplotsplothandlermesh@matrixoutput
+ \iffalse% FIXME : is this special handling necessary!?
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering=x varies:
+ % nothing special to do
+ \else
+ % FIXME
+ % [this happens only for mesh input=lattice]
+ % colwise:
+ %
+ % The low level shader NEEDS rowwise ordering. So, we need to transpose the data matrix.
+ % As usual in TeX, we should save macros as much as possible. I guess we NEED at least one macro for each matrix row.
+ % Idea:
+ % while we iterate colwise through the input data, accumulate row vectors.
+ % Then, process the row vectors.
+ % Since vectors are expensive (in terms of number of macros), we use fast "append" lists instead of vectors.
+ \let\pgfplotsplothandlermesh@shader@interp=\pgfplotsplothandlermesh@shader@interp@incremental@transpose
+ %
+ % init all required row vectors:
+ \c@pgfplots@scanlineindex=0
+ \pgfutil@loop
+ \ifnum\c@pgfplots@scanlineindex<\pgfplotsplothandlermesh@rows\relax
+ \expandafter\pgfplotsapplistXnewempty\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname%
+ \advance\c@pgfplots@scanlineindex by1
+ \pgfutil@repeat
+ %\pgfkeyslet{/pgfplots/surf shading/cols}\pgfplotsplothandlermesh@rows
+ %\pgfplots@error{Sorry, the 'shader=interp' does not yet support 'mesh/ordering=colwise'... You can continue now, but the plot will be transposed.}%
+ \fi
+ \fi
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{init pdf shading}%
+ \pgfplotslibrarysurfstreamstart
+ \else
+ % shader='faceted interp'
+ \def\pgfplotsplothandlermesh@VISUALIZE{\pgfplotsplothandlermesh@VISUALIZE@faceted@interp}%
+ \pgfkeyssetvalue{/pgfplots/surf shading/cols}{2}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{init pdf shading}%
+ \fi
+ \else
+ \def\pgfplotsplothandlermesh@VISUALIZE{\pgfplotsplothandlermesh@VISUALIZE@std}%
+ \fi
+ %
+ %%
+ \ifpgfplotsplothandlermesh@internaldepth
+ \else
+ % disable internal sorting.
+ \let\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth=\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth@no@op%
+ \let\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth=\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth@no@op
+ \fi
+}%
+
+\def\pgfplotsplothandlermesh@init@flat@color{%
+ \ifcase\pgfplotsplothandlermesh@shader
+ % 0 == 'flat'
+ \def\pgfplotsplothandlermesh@needs@flat@color{1}%
+ \or
+ % 1 == 'faceted'
+ \def\pgfplotsplothandlermesh@needs@flat@color{1}%
+ \or
+ % 2 == 'interp'
+ \def\pgfplotsplothandlermesh@needs@flat@color{0}%
+ \or
+ % 3 == 'faceted interp'
+ \def\pgfplotsplothandlermesh@needs@flat@color{1}%
+ \fi
+ \if1\pgfplotsplothandlermesh@needs@flat@color
+ \pgfplotsplothandlermesh@init@flat@color@getter
+ %
+ \pgfplotsplothandlermesh@init@flat@color@usepath
+ %
+ %
+ \pgfplotsplothandlermesh@init@flat@color@visualize@pipe@step
+ \fi
+}%
+
+\def\pgfplotsplothandlermeshusepathstroke{\pgfusepathqstroke}%
+\def\pgfplotsplothandlermeshusepathfill{\pgfusepathqfill}%
+\def\pgfplotsplothandlermeshusepathfillstroke{\pgfusepathqfillstroke}%
+
+\def\pgfplotsplothandlermesh@init@flat@color@visualize@pipe@step{%
+ \ifx\pgfplotsplothandlermesh@PIPE@REFINE\pgfplotsplothandlermesh@PIPE@REFINE@no@op
+ \let\pgfplotsplothandlermesh@VISUALIZE@std=\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke
+ \else
+ \ifpgfplotsplothandlermesh@hide@refined@edges
+ % this is (at most) partially implemented.
+ \let\pgfplotsplothandlermesh@VISUALIZE@std=\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke
+ \else
+ \let\pgfplotsplothandlermesh@VISUALIZE@std=\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke
+ \fi
+ %
+ % FIXME : that doesn't work.
+ % filling *always* seems to need a stroke operation,
+ % otherwise there will be translucent edges.
+ % I need to adjust the stroke color :-(
+ %
+ % FIXME : even that doesn't work correctly. The problem
+ % is: drawing adjacent patches on top of each other
+ % OVERDRAWS edges: once with the correct stroke color;
+ % once with the fill color.
+ %
+ \ifx\pgfplotsplothandlermesh@usepath\pgfplotsplothandlermeshusepathstroke
+ \let\pgfplotsplothandlermesh@usepathfill=\relax
+ \let\pgfplotsplothandlermesh@usepathstroke=\plotsplothandlermeshusepathstroke
+ \else
+ \ifx\pgfplotsplothandlermesh@usepath\pgfplotsplothandlermeshusepathfillstroke
+ \let\pgfplotsplothandlermesh@usepathfill=\pgfplotsplothandlermeshusepathfillstroke
+ \let\pgfplotsplothandlermesh@usepathstroke=\pgfplotsplothandlermeshusepathstroke
+ \else
+ \let\pgfplotsplothandlermesh@usepathfill=\relax
+ \let\pgfplotsplothandlermesh@usepathstroke=\relax
+ \fi
+ \fi
+ \fi
+}%
+
+\def\pgfplotsplothandlermesh@init@flat@color@usepath{%
+ \if\pgfplots@meshmode m%
+ % 'mesh' plot: stroke only and use the 'flat' code
+ % here just to define the color for each mesh
+ % segment.
+ \let\pgfplotsplothandlermesh@usepath=\pgfplotsplothandlermeshusepathstroke
+ \else
+ % 'surf' plot:
+ \let\pgfplotsplothandlermesh@usepath=\pgfplotsplothandlermeshusepathfillstroke
+ \if\pgfplotsplothandlermesh@shader3% faceted interp
+ % it has an extra fill command (shading)
+ \let\pgfplotsplothandlermesh@usepath=\pgfplotsplothandlermeshusepathstroke
+ \fi
+ %
+ % the distinction between 'faceted' and 'flat' is
+ % technical: it is just the default draw color.
+ %
+ % 'flat,draw=black' is the same as 'faceted'.
+ \pgfkeysgetvalue{/pgfplots/faceted color}\pgfplots@loc@TMPb
+ \def\pgfplots@loc@TMPc{none}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPc
+ \pgfkeyslet{/pgfplots/faceted color}\pgfutil@empty
+ \def\pgfplots@loc@TMPb{}%
+ \fi
+ %
+ \def\pgfplots@loc@TMPa{0}%
+ \if\pgfplotsplothandlermesh@shader1% faceted
+ \def\pgfplots@loc@TMPa{1}%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ % oh. no faceted color. Then: fill only, use
+ % whatever color is available.
+ \def\pgfplots@loc@TMPa{0}%
+ %\let\pgfplotsplothandlermesh@usepath=\pgfplotsplothandlermeshusepathfill
+ \fi
+ \fi
+ \if\pgfplotsplothandlermesh@shader3% faceted interp
+ \def\pgfplots@loc@TMPa{1}%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ % oh. no faceted color. Then: no-op!
+ % This is the same as interp with more overhead
+ % (but allows z buffering).
+ \def\pgfplots@loc@TMPa{0}%
+ \def\pgfplotsplothandlermesh@usepath{\pgfusepath{discard}}%
+ \fi
+ \fi
+ \if1\pgfplots@loc@TMPa
+ % make sure there is a the correct color.
+ \expandafter\def\expandafter\pgfplots@drawoptions\expandafter{%
+ \pgfplots@drawoptions
+ \pgfsetstrokecolor{\pgfkeysvalueof{/pgfplots/faceted color}}%
+ }%
+ \fi
+ %
+ \fi
+}
+
+\def\pgfplotsplothandlermesh@init@flat@color@getter{%
+ \if\pgfplotsplothandlermesh@flatmode c% 'flat corner':
+ %
+ % use colordata of ONE corner point. That's easy, not
+ % much to do.
+ \if1\b@pgfplots@correct@shader@flat
+ \def\pgfplotsplothandlermesh@get@flat@color{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{first vertex before z buffer}%
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \let\pgfplotsretval=\pgfplotspointmetatransformed%
+ }%
+ \else
+ \def\pgfplotsplothandlermesh@get@flat@color{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{first vertex}%
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \let\pgfplotsretval=\pgfplotspointmetatransformed%
+ }%
+ \fi
+ \else
+ % 'flat mean':
+ %
+ % use colordata as mean of all corners for shading.
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \if d\pgfplots@colormap@access
+ % colormap access=direct
+ % interpolate adjacent colors, not their indices:
+ \pgfplotsplothandlermesh@get@flat@color@explicit@prepare
+ \def\pgfplotsplothandlermesh@get@flat@color{%
+ \pgfplotsplothandlermesh@get@flat@color@explicit@accum{%
+ \begingroup
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \let\pgfplotspatchvertexmeta=\pgfplotspointmetatransformed
+ \pgfmath@smuggleone\pgfplotspatchvertexmeta
+ \endgroup
+ }%
+ }%
+ \else
+ % colormap access=map|piecewise constant
+ \def\pgfplotsplothandlermesh@get@flat@color{%
+ \global\pgfplots@tmpa=0pt
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{foreach cdata vertex}{%
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \global\advance\pgfplots@tmpa by\pgfplotspointmetatransformed pt
+ }%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{get num cdata vertices}%
+ \global\divide\pgfplots@tmpa by\pgfplotsretval\relax
+ \edef\pgfplotsretval{\pgf@sys@tonumber\pgfplots@tmpa}%
+ \global\pgfplots@tmpa=0pt
+ }%
+ \fi
+ \else
+ % mesh/color input=explicit
+ \pgfplotsplothandlermesh@get@flat@color@explicit@prepare
+ %
+ \def\pgfplotsplothandlermesh@get@flat@color{%
+ \pgfplotsplothandlermesh@get@flat@color@explicit@accum{}%
+ \pgfplotsaxisvisphasetransformpointmeta
+ }%
+ \fi
+ \fi
+}%
+
+\def\pgfplotsplothandlermesh@get@flat@color@explicit@prepare{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{get num cdata vertices}%
+ \pgf@xa=1pt %
+ \divide\pgf@xa by\pgfplotsretval\relax
+ \edef\pgfplotsplothandlermesh@get@flat@color@@{\pgf@sys@tonumber\pgf@xa}%
+}%
+\def\pgfplotsplothandlermesh@get@flat@color@explicit@accum#1{%
+ \pgfplotscolorzero{\pgfplotsplothandlermesh@explicit@color@num@comps}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{foreach cdata vertex}{%
+ #1%
+ \pgfplotscoloraddweighted
+ {\pgfplotsplothandlermesh@explicit@color@num@comps}%
+ {\pgfplotsretval}
+ {\pgfplotsplothandlermesh@get@flat@color@@}%
+ {\pgfplotspatchvertexmeta}%
+ }%
+ % FIXME : this here sounds wrong: !? what is this good for:
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+}%
+
+\def\pgfplotsplothandlermesh@init@jumphandling{%
+ % For matrix input, a "jump" should result in something
+ % visible although it must not destroy the matrix structure.
+ %
+ % try this here:
+ \def\pgfplotsplothandlervisualizejump{%
+ \pgfplotstreampoint{\global\pgf@x=-16000.0pt \global\pgf@y=-16000.0pt }%
+ }%
+ %
+ % Prepare jumps according to point meta:
+ \ifx\pgfplotspointmetainputhandler\pgfutil@empty%
+ % oh. No point meta!?
+ \let\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta=\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@noop
+ \else
+ % we have point meta. This is the standard case.
+ %
+ % prepare the routine for "jump on unbounded point meta":
+ \ifcase\pgfplotsplothandlermesh@shader
+ % 0 == 'flat'
+ \def\pgfplots@loc@TMPa{1}%
+ \or
+ % 1 == 'faceted'
+ \def\pgfplots@loc@TMPa{1}%
+ \else
+ \def\pgfplots@loc@TMPa{0}%
+ \fi
+ %
+ \if 1\pgfplots@loc@TMPa
+ % ok, this uses (only) 'shader=flat'
+ \if c\pgfplotsplothandlermesh@flatmode
+ % 'flat corner':
+ \if1\b@pgfplots@correct@shader@flat
+ \let\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta=\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@firstvertex
+ \else
+ \let\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta=\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@firstvertex@legacy
+ \fi
+ \else
+ % 'flat mean':
+ \let\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta=\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@everyvertex
+ \fi
+ \else
+ \let\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta=\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@everyvertex
+ \fi
+ \fi
+ %
+ \if0\pgfplotsaxisplothasunboundedpointmeta
+ \let\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta=\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@noop
+ \fi
+ \if0\pgfplotsaxisplothasjumps
+ \ifx\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta\pgfplotsplothandlermesh@PIPE@CHECKJUMP@meta@noop
+ \pgfplotsplothandlermesh@PIPE@CHECKJUMP@disable
+ \fi
+ \fi
+}%
+
+
+\def\pgfplotsplothandlermesh@init@zbuffer{%
+ \ifpgfplots@curplot@threedim
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{uses view depth}%
+ \if1\pgfplotsretval
+ \let\pgfplotsplothandlermesh@compute@vertex@depth=\pgfplotsplothandlermesh@compute@vertex@depth@doit%
+ \fi
+ %
+ \if\pgfplotsplothandlermesh@zbuffer@choice4%
+ \def\pgfplotsplothandlermesh@zbuffer@sort@in@TeX{1}%
+ \else
+ \def\pgfplotsplothandlermesh@zbuffer@sort@in@TeX{0}%
+ \fi
+ \if1\b@pgfplots@LUA@visualization@enabled
+ % set it to 'z buffer=none' -- LUA did the job already.
+ \def\pgfplotsplothandlermesh@zbuffer@sort@in@TeX{0}%
+ \fi
+ %
+ \if\pgfplotsplothandlermesh@zbuffer@sort@in@TeX1%
+ % z buffer=sort:
+ % create a z buffer:
+ % the z buffer contains elements {<view depth>}{{<pt1>}{<pt2>}{<pt3>}{<pt4>}}
+ \pgfplotsarraynewempty\pgfplots@zbuffer@local
+ %
+ \let\pgfplotsplothandlermesh@compute@vertex@depth=\pgfplotsplothandlermesh@compute@vertex@depth@doit%
+ %
+ % the "element depth" is defined to be the MEAN of all
+ % vertex depths.
+ % And since the mean is 1/n * sum_{i=1}^n V_i, we can
+ % directly omit the 1/n --- it is the same for every
+ % vertex anyway, and we only want to compare the depth
+ % values.
+ \let\pgfplotsplothandlermesh@accum@element@depth=\pgfmath@basic@add@
+ %
+ % and collect each point into the z buffer
+ % (instead of drawing it):
+ \def\pgfplotsplothandlermesh@PIPE@FINISH{%
+ %
+ % compute DEPTH(lattice element):= min{DEPTH(A),DEPTH(B),DEPTH(C),DEPTH(D)}
+ \def\pgfmathresult{0}%
+ \def\pgfplotsplothandlermesh@zbuffer@tmp{}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{foreach vertex}{%
+ \pgfplotsplothandlermesh@accum@element@depth\pgfplotspatchvertexdepth\pgfmathresult
+ \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@zbuffer@tmp}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotspatchvertexstruct}%
+ \edef\pgfplotsplothandlermesh@zbuffer@tmp{%
+ \the\t@pgfplots@toka
+ {\the\t@pgfplots@tokb}%
+ }%
+ }%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{serialize except vertices}%
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsplothandlermesh@zbuffer@tmp}%
+ \edef\pgfplotsplothandlermesh@zbuffer@tmp{%
+ {\the\t@pgfplots@toka}% first argument is meta data, then follow the vertices
+ \the\t@pgfplots@tokb%
+ }%
+ %
+ % assemble array element:
+ \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@zbuffer@tmp}%
+ \edef\pgfplots@loc@TMPa{%
+ {\pgfmathresult}%
+ {%
+ \the\t@pgfplots@toka
+ }%
+ }%
+ \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPa\to\pgfplots@zbuffer@local
+ }%
+ \fi
+ \else
+ \def\pgfplotsplothandlermesh@zbuffer@sort@in@TeX{0}%
+ \fi
+}%
+\def\pgfplotsplothandlermesh@init@mesh@stream{%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplotsplothandlermesh@finish%
+ \global\let\pgf@plotstreampoint=\pgfplotsplothandlermesh@stream
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+}
+
+\def\pgfplotsplothandlermesh@set@shader@colormap{%
+ \if0\pgfplotsplothandlermesh@colorinput
+ % mesh/color input=colormap
+ \if d\pgfplots@colormap@access
+ % colormap access=direct
+ % tell it to expect explicit colors:
+ \pgfkeyslet{/pgfplots/surf shading/colormap}\pgfutil@empty
+ \else
+ % colormap access=map|piecewise constant
+ \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@loc@TMPa
+ \expandafter\pgfplotscolormaptopdffunction\expandafter{\pgfplots@loc@TMPa}%
+ \pgfkeyslet{/pgfplots/surf shading/colormap}\pgfplotsretval
+ \fi
+ \else
+ % mesh/color input=explicit
+ %
+ % tell it to expect explicit colors:
+ \pgfkeyslet{/pgfplots/surf shading/colormap}\pgfutil@empty
+ \fi
+}%
+
+\def\pgfplotsplothandlermesh@check@unbounded@value{-16000.0pt}%
+{
+\dimen0=\pgfplotsplothandlermesh@check@unbounded@value
+\xdef\pgfplotsplothandlermesh@check@unbounded@text{\the\dimen0}%
+}
+
+\def\pgfplotsplothandlermesh@check@unbounded{%
+ \ifx\pgfplotspatchvertexx\pgfplotsplothandlermesh@check@unbounded@text
+ \pgfplots@loc@tmpfalse
+ \fi
+}%
+
+\long\def\pgfplotsplothandlermesh@defaultlegend@img#1{%
+ \scope[%
+ #1,
+ /pgfplots/mesh/rows=3,
+ /pgfplots/mesh/cols=3,
+ /pgfplots/mesh/num points=,
+ /pgfplots/mesh input=lattice,
+ /pgfplots/patch type=rectangle,
+ /pgfplots/z buffer=default,
+ /tikz/x={(0.44237cm,-0.07439cm)},
+ /tikz/y={(0.30942cm,0.23932cm)},
+ /tikz/z={(0.0cm,1.5cm)},
+ scale=0.4,
+ yshift=-0.7cm,
+ /pgfplots/point meta=explicit,
+ /pgfplots/mesh/color input=colormap,
+ ]
+ \let\pgfplots@metamax=\pgfutil@empty
+ \pgfplots@curplot@threedimtrue
+
+ \pgfplotsplothandlermesh
+ \pgfplotstreamstart
+
+ \def\rangea{0.21}%
+ \def\rangeb{0.7}%
+
+ \pgfmathparse{1000/(\rangeb-\rangea)}
+ \let\factor=\pgfmathresult
+
+ \def\simplecoordinate(##1,##2,##3){%
+ \pgfmathparse{\factor*(##3 - \rangea)}%
+ \pgfmathfloatparsenumber\pgfmathresult
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ \pgfplotstreampoint{\pgfqpointxyz{##1}{##2}{##3}}%
+ }%
+ % for the case 'shader=interp':
+ %\def\pgfplotspointbbupperright{\pgfqpointxyz{2}{2}{0.9}}
+ %\def\pgfplotspointbblowerleft {\pgfqpointxyz{0}{0}{0.1}}
+
+ \simplecoordinate(0,2,0.7)
+ \simplecoordinate(1,2,0.5)
+ \simplecoordinate(2,2,0.43)
+
+ \simplecoordinate(0,1,0.68)
+ \simplecoordinate(1,1,0.4)
+ \simplecoordinate(2,1,0.25)
+
+ \simplecoordinate(0,0,0.6)
+ \simplecoordinate(1,0,0.35)
+ \simplecoordinate(2,0,0.21)
+
+ \pgfplotstreamend
+ \pgfusepath{stroke}
+ \endscope
+}%
+
+\def\pgfplotsplothandlermesh@finish{%
+ \if\pgfplotsplothandlermesh@zbuffer@sort@in@TeX1%
+ % z buffer=sort:
+ % process the z buffer:
+ \pgfkeyslet{/pgfplots/iflessthan/.@cmd}\pgfplotsplothandlermesh@zbuffer@sort@iflessthen
+ \pgfkeysdef{/pgfplots/array/unscope pre}{%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@output
+ \def\pgfplotspatchready{\pgfplotsplothandlermesh@PIPE@interior@exterior@styles}%
+ \pgfplotsarrayforeachungrouped\pgfplots@zbuffer@local\as\curelem{%
+ \expandafter\pgfplotsplothandlermesh@draw@zbufferelement\curelem%
+ }%
+ }%
+ \pgfkeysdef{/pgfplots/array/unscope post}{}%
+ \pgfplotsarraysort\pgfplots@zbuffer@local
+ \fi
+ %
+ \if2\pgfplotsplothandlermesh@shader
+ % shader=interp:
+ % FIXME : broken!
+ %\ifx\pgfplotsplothandlermesh@shader@interp\pgfplotsplothandlermesh@shader@interp@incremental@transpose%
+ % This is the case for 'mesh/ordering=colwise'. We need to finish the transpose procedure:
+ % \pgfplotsplothandlermesh@shader@interp@transpose@finish
+ %\fi
+ \pgfplotslibrarysurfstreamend
+ \pgfplotslibrarysurfdrawinpicture
+ \fi
+}%
+
+
+% This is one of two places where the shader is served with
+% coordinates: it handles the special matrix-form shading which is
+% incompatible with the patch-wise sequence of coordinates
+\def\pgfplotsplothandlermesh@PIPE@DECODE@to@shader#1{%
+ \pgfplotsaxisvisphasetransformpointmeta
+ \ifpgf@relevantforpicturesize
+ \pgfpointtransformed{#1}%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+ \fi
+ \pgfplotslibrarysurfstreamcoord
+ {#1}%
+ {\pgfplotspointmetatransformed}%
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix@ONEDIMMODE#1{%
+ \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input
+ \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval
+ \let\pgfplots@view@depth=\pgfplotsretval
+ \pgf@process{#1}%
+ \pgfplotsplothandlermesh@serialize@logical@coords
+ \edef\pgfplotsplothandlermesh@i{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplots@view@depth:\pgfplotsretval}%
+ \ifnum\c@pgfplots@scanlineindex>0
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@im}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@i}%
+ \else
+ \advance\c@pgfplots@scanlineindex by1
+ \fi
+ \let\pgfplotsplothandlermesh@im=\pgfplotsplothandlermesh@i
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix@fillscanline@common#1{%
+ \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval
+ \let\pgfplots@view@depth=\pgfplotsretval
+ \pgf@process{#1}%
+ \pgfplotsplothandlermesh@serialize@logical@coords
+ \edef\pgfplots@loc@TMPa{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplots@view@depth:\pgfplotsretval}%
+ \expandafter\pgfplotsdequepushback\pgfplots@loc@TMPa\to{lastscanline}%
+ \advance\c@pgfplots@scanlineindex by1
+}%
+
+% the pgf@plotstreampoint routine for the first scan line:
+\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix@fillscanline#1{%
+ \pgfplotsplothandlermesh@PIPE@DECODE@matrix@fillscanline@common{#1}%
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax
+ % second line!
+ \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@matrix%%
+ \c@pgfplots@scanlineindex=0
+ \fi
+}%
+
+% This is the pgf@plotstreampoint for all scan lines starting with the
+% second.
+%
+% We perform
+% // i == y
+% // j == x
+% for i = 1 to rows (note the 1! 0 would be the first row)
+% for j = 0 to cols
+% get (i-1, j) from front of deque // remember: i: rows, j : cols. We iterate rowwise.
+% push (i,j) to back of deque
+% if j > 0
+% draw
+% (i-1,j-1) [from last iteration] -- (i-1,j ) [from deque]
+% -- ( i,j ) [from last iteration] -- (i ,j-1) [from #1]
+% -- cycle
+% endif
+% let (i-1,j-1) := (i-1,j) // for next iteration
+% let ( i,j-1) := ( i,j) // for next iteration
+% end
+% end
+%
+% This is a SWEEP through the data matrix.
+% #1: the current point of the linearized data matrix
+% #2: a callback (TeX code) which will be executed for each point with j>0
+% #3: a callback (TeX code) which will be executed if the scanline is completed, i.e. j=cols
+\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix@collect@and@callback#1#2#3{%
+ % NOTATION:
+ % 'im == (i-1)'
+ % 'jm == (j-1)'
+ \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval
+ \let\pgfplots@view@depth=\pgfplotsretval
+ \pgf@process{#1}%
+ \pgfplotsplothandlermesh@serialize@logical@coords
+ \edef\pgfplotsplothandlermesh@i@j{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplots@view@depth:\pgfplotsretval}% FIXME relies on pgfplots macros
+%\message{##\the\c@pgfplots@scanlineindex: prepare rectangle with corner \meaning\pgfplotsplothandlermesh@i@j.}%
+ \pgfplotsdequepopfront{lastscanline}\to\pgfplotsplothandlermesh@im@j
+ \expandafter\pgfplotsdequepushback\pgfplotsplothandlermesh@i@j\to{lastscanline}%
+ \ifnum\c@pgfplots@scanlineindex>0
+ #2%
+ \fi
+ \let\pgfplotsplothandlermesh@im@jm=\pgfplotsplothandlermesh@im@j
+ \let\pgfplotsplothandlermesh@i@jm=\pgfplotsplothandlermesh@i@j
+ \advance\c@pgfplots@scanlineindex by1
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax
+ #3%
+ \fi
+}%
+\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix#1{%
+ \pgfplotsplothandlermesh@PIPE@DECODE@matrix@collect@and@callback{#1}{%
+ \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@im@jm}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@im@j}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@i@j}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@i@jm}%
+ }{%
+ % if scan line is completed, start the next one:
+ \c@pgfplots@scanlineindex=0
+ }%
+}%
+
+
+\def\pgfplotsplothandlermesh@shader@interp@incremental@transpose#1{%
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgf@process{#1}%
+ \edef\pgfplotsplothandlermesh@i{\noexpand\pgfplotsplothandlermesh@shader@interp@next{\the\pgf@x}{\the\pgf@y}{\pgfplotspointmetatransformed}}%
+ %
+ % Store the postprocessed point into the appropriate row vector:
+ \def\pgfplots@loc@TMPa{\expandafter\pgfplotsapplistXpushback\expandafter{\pgfplotsplothandlermesh@i}\to}
+ \expandafter\pgfplots@loc@TMPa\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname%
+ %
+ \advance\c@pgfplots@scanlineindex by1
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax
+ \c@pgfplots@scanlineindex=0
+ \fi
+}%
+\def\pgfplotsplothandlermesh@shader@interp@transpose@finish{%
+ % Now, "execute" each row vector:
+ \def\pgfplotsplothandlermesh@shader@interp@next##1##2##3{%
+ \pgfplotslibrarysurfstreamcoord{\global\pgf@x=##1 \global\pgf@y=##2 }{##3}%
+ }%
+ \c@pgfplots@scanlineindex=0
+ \pgfutil@loop
+ \ifnum\c@pgfplots@scanlineindex<\pgfplotsplothandlermesh@rows\relax
+ \expandafter\pgfplotsapplistXlet\expandafter\pgfplots@loc@TMPd\expandafter=\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname%
+ \expandafter\pgfplotsapplistXnewempty\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% clear
+ % execute the row:
+ \pgfplots@loc@TMPd
+ \advance\c@pgfplots@scanlineindex by1
+ \pgfutil@repeat
+ \let\pgfplots@loc@TMPd=\relax
+}%
+
+\def\pgfplotsplothandlermesh@draw@zbufferelement#1#2{%
+ \pgfplotsplothandlermesh@draw@zbufferelement@#2\pgfplots@EOI
+}
+\def\pgfplotsplothandlermesh@draw@zbufferelement@#1{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{deserialize except vertices}{#1}%
+ \pgfplotsplothandlermesh@draw@zbufferelement@@
+}
+\def\pgfplotsplothandlermesh@draw@zbufferelement@@#1{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@EOI
+ \else
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{set next vertex}{#1}%
+ \expandafter\pgfplotsplothandlermesh@draw@zbufferelement@@
+ \fi
+}%
+
+
+\def\pgfplotsplothandlermesh@zbuffer@sort@iflessthen#1#2#3#4\pgfeov{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@\pgfplots@loc@TMPa\relax
+ \let\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@a=\pgfmathresult
+ \edef\pgfplots@loc@TMPb{#2}%
+ \expandafter\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@\pgfplots@loc@TMPb\relax
+ \let\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@b=\pgfmathresult
+ \ifdim\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@b pt<\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@a pt%
+ #3\relax
+ \else
+ #4\relax
+ \fi
+}%
+\def\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@#1#2{%
+ \def\pgfmathresult{#1}%
+}%
+\def\pgfplotsplothandlermesh@unpack@zbuffer@pointdepth#1{%
+ \expandafter\pgfplotsplothandlermesh@unpack@zbuffer@pointdepth@#1%
+}%
+\def\pgfplotsplothandlermesh@unpack@zbuffer@pointdepth@#1#2#3#4{%
+ \def\pgfplotsretval{#4}%
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplotimage.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplotimage.code.tex
new file mode 100644
index 0000000000..b5a51cd3b2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsmeshplotimage.code.tex
@@ -0,0 +1,545 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2015 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% This file essentially belongs to the 'mesh' plot handler.
+% It implements the (rather involved) feature 'mesh input=image'.
+%
+% 'mesh input=image' is implemented during the visualization phase
+% and, partially, during the survey phase. The survey phase merely
+% updates the data limits. The visualization phase has the complete
+% knowledge about the input matrix size and can compute the cells.
+
+\def\pgfplotsplothandlersurveystart@mesh@image{%
+ \let\pgfplotsplothandlermesh@image@lastA=\pgfutil@empty
+ \let\pgfplotsplothandlermesh@image@lastlastA=\pgfutil@empty
+ \let\pgfplotsplothandlermesh@image@lastB=\pgfutil@empty
+ \def\b@pgfplotsplothandlermesh@image@updatedlimits@A@next{1}%
+ \def\b@pgfplotsplothandlermesh@image@updatedlimits@B@next{0}%
+ \def\c@pgfplotsplothandlermesh@image@numscanlines{0}%
+ %
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = x varies= rowwise -> scanline is cols!
+ \def\pgfplotsplothandlermesh@image@A@dir{x}%
+ \def\pgfplotsplothandlermesh@image@B@dir{y}%
+ \def\pgfplotsplothandlermesh@image@updatelimits@AB##1##2##3{%
+ \pgfplotsaxisupdatelimitsforcoordinate{##1}{##2}{##3}%
+ }%
+ \else
+ % ordering = y varies = colwise: scanline is rows!
+ \def\pgfplotsplothandlermesh@image@A@dir{y}%
+ \def\pgfplotsplothandlermesh@image@B@dir{x}%
+ \def\pgfplotsplothandlermesh@image@updatelimits@AB##1##2##3{%
+ \pgfplotsaxisupdatelimitsforcoordinate{##2}{##1}{##3}%
+ }%
+ \fi
+}%
+\def\pgfplotsplothandlersurveyend@mesh@image{%
+ \if1\pgfplotsaxisplothasjumps
+ % the approach to interpolate cell corners using the adjacent cell midpoints becomes extremely complicated once
+ % we allow all kinds of holes in the input matrix.
+ % If you want to make invisible cells, you can add "nan" as color data
+ \pgfplots@error{Sorry, 'matrix plot' supports no holes (jumps) in the input data. Please implement jumps using an unbounded point meta value (i.e. inf or nan)}%
+ \fi
+ %
+}%
+\def\pgfplotsplothandlersurveypoint@mesh@image{%
+ % already called:
+ %\pgfplotsplothandlersurveypoint@default
+ %
+ % The 'update limits' routine for 'mesh input=image' is a
+ % HEURISTICS.
+ %
+ % It works well for "real" image plots, i.e. for those which are
+ % not skewed or changed parametrically.
+ %
+ % The main challenge is that we have to update the matrix limits
+ % while we pass through the scanlines.
+ %
+ % The idea is:
+ % - update cell midpoint limits using the standard PGFPlots
+ % methods. We would like to have the cell limits instead,
+ % though... to this end:
+ % - update the lower x cell limit for the first encountered X in every
+ % scanline
+ % - update the upper x cell limit for the last encountered X in every
+ % scanline
+ % - update the lower AND upper y cell limit for the first encountered Y
+ % in every scanline.
+ %
+ % That means:
+ % - we do NOT update X limits for mid points
+ % - we do NOT update Y limits for the second, third, ..., nth
+ % point on scanlines. Only for the first.
+ %
+ % For parametric image plots, these limits will be inaccurate. I
+ % suppose these are rather exotic anyway, so I accept that to
+ % simplify the implementation.
+ %
+ \expandafter\let\expandafter\pgfplotsplothandlermesh@cur\csname pgfplots@current@point@\pgfplotsplothandlermesh@image@A@dir\endcsname
+ \expandafter\let\expandafter\pgfplotsplothandlermesh@cur@B\csname pgfplots@current@point@\pgfplotsplothandlermesh@image@B@dir\endcsname
+ %
+ \if1\b@pgfplotsplothandlermesh@image@updatedlimits@A@next
+ \ifx\pgfplotsplothandlermesh@cur\pgfutil@empty
+ \else
+ \ifx\pgfplotsplothandlermesh@image@lastA\pgfutil@empty
+ \else
+ \pgfplotscoordmath{x}{parse}{\pgfplotsplothandlermesh@image@lastA - 0.5*(\pgfplotsplothandlermesh@cur - \pgfplotsplothandlermesh@image@lastA)}%
+ \let\pgfplots@current@point@xh=\pgfmathresult
+ \pgfplotsplothandlermesh@image@updatelimits@AB\pgfplots@current@point@xh\pgfplotsplothandlermesh@cur@B\pgfplots@current@point@z
+ %
+ \def\b@pgfplotsplothandlermesh@image@updatedlimits@A@next{0}%
+ \fi
+ \fi
+ \fi
+ %
+ \if1\b@pgfplotsplothandlermesh@image@updatedlimits@B@next
+ \ifx\pgfplotsplothandlermesh@cur@B\pgfutil@empty
+ \else
+ \ifx\pgfplotsplothandlermesh@image@lastB\pgfutil@empty
+ \else
+ \pgfplotscoordmath{y}{parse}{\pgfplotsplothandlermesh@image@lastB - 0.5*(\pgfplotsplothandlermesh@cur@B - \pgfplotsplothandlermesh@image@lastB)}%
+ \let\pgfplots@current@point@yh=\pgfmathresult
+ \pgfplotsplothandlermesh@image@updatelimits@AB\pgfplotsplothandlermesh@cur\pgfplots@current@point@yh\pgfplots@current@point@z
+ %
+ %
+ \pgfplotscoordmath{y}{parse}{\pgfplotsplothandlermesh@cur@B + 0.5*(\pgfplotsplothandlermesh@cur@B - \pgfplotsplothandlermesh@image@lastB)}%
+ \let\pgfplots@current@point@yh=\pgfmathresult
+ \pgfplotsplothandlermesh@image@updatelimits@AB\pgfplotsplothandlermesh@cur\pgfplots@current@point@yh\pgfplots@current@point@z
+ %
+ \def\b@pgfplotsplothandlermesh@image@updatedlimits@B@next{0}%
+ \fi
+ \fi
+ \fi
+ \let\pgfplotsplothandlermesh@image@lastlastA=\pgfplotsplothandlermesh@image@lastA
+ \let\pgfplotsplothandlermesh@image@lastA=\pgfplotsplothandlermesh@cur
+ %
+ \let\pgfplotsplothandlermesh@image@lastB=\pgfplotsplothandlermesh@cur@B
+}%
+
+\def\pgfplotsplothandlersurveyend@mesh@image@scanlinecomplete{%
+ \ifx\pgfplotsplothandlermesh@image@lastlastA\pgfutil@empty
+ \else
+ \ifx\pgfplotsplothandlermesh@image@lastA\pgfutil@empty
+ \else
+ \expandafter\let\expandafter\pgfplotsplothandlermesh@cur@B\csname pgfplots@current@point@\pgfplotsplothandlermesh@image@B@dir\endcsname
+ \pgfplotscoordmath{x}{parse}{\pgfplotsplothandlermesh@image@lastA + 0.5*(\pgfplotsplothandlermesh@image@lastA - \pgfplotsplothandlermesh@image@lastlastA)}%
+ \let\pgfplots@current@point@xh=\pgfmathresult
+ \pgfplotsplothandlermesh@image@updatelimits@AB\pgfplots@current@point@xh\pgfplotsplothandlermesh@cur@B\pgfplots@current@point@z
+ \fi
+ \fi
+ %
+ \def\b@pgfplotsplothandlermesh@image@updatedlimits@B@next{1}%
+ %
+ \let\pgfplotsplothandlermesh@image@lastlastA=\pgfutil@empty
+ \let\pgfplotsplothandlermesh@image@lastA=\pgfutil@empty
+ \def\b@pgfplotsplothandlermesh@image@updatedlimits@A@next{1}%
+ %
+ \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlermesh@image@numscanlines
+}%
+
+%
+% The 'mesh' plot handler has a "visualization pipeline" as part of
+% its visualization:
+%
+% if it is active, the coordinate stream used for the visualization
+% (\pgfplotsplothandlermesh@stream) invokes
+% \pgfplotsplothandlermesh@PIPE@DECODE as first item. This, in turn,
+% fires other elements of the mesh plot pipeline, but its most
+% important task is to assemble patches while it goes.
+%
+% That's where 'mesh input=image' hooks in: it simply generates special patches.
+
+% this is part of the implementation of mesh input=image
+% the pgf@plotstreampoint routine for the first scan line:
+\def\pgfplotsplothandlermesh@PIPE@DECODE@image@fillscanline#1{%
+ \pgfplotsplothandlermesh@PIPE@DECODE@matrix@fillscanline@common{#1}%
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax
+ % second line!
+ \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@image@secondscanline%%
+ \c@pgfplots@scanlineindex=0
+ \def\c@pgfplotsplothandlermesh@image@nextrownum{2}%
+ \fi
+}%
+
+% IDEA:
+%
+% 1. The first scanline is merely buffered and collected into the deque 'lastscanline' (just as any mesh plot).
+% 2. The second scanline
+% - generates cells for the first scanline _and_
+% - appends the computed intermediate vertices to the deque 'lastinterpscanline'.
+% - during the sweep, a single cell of the first scanline is
+% generated
+% - only the _last_ element of the scanline generates two cells
+% 3. All scanlines after the second
+% - pop the intermediate vertices from the deque
+% - use them to construct cells for the previous scanline
+% - append their computed intermediate vertices to the deque 'lastinterpscanline'.
+% - during the sweep, a single cell of the first scanline is
+% generated
+% - only the _last_ element of the scanline generates two cells (just as in step 2)
+% 4. the last scanline is special in that it generates cells for the
+% previous scanline _and_ the last scanline.
+%
+% The "computed intermediate vertices" are mean values and
+% extrapolation points. My idea is to make this special cell-based
+% mesh more flexible than a simple imagesc, hoping that this pays off.
+\def\pgfplotsplothandlermesh@PIPE@DECODE@image@secondscanline#1{%
+ \pgfplotsplothandlermesh@PIPE@DECODE@matrix@collect@and@callback{#1}{%
+ %
+ % create cell:
+ \pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell{1}%
+ %
+ \advance\c@pgfplots@scanlineindex by1
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax
+ % ok, we have to extrapolate the last column.
+ \pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell@lastcolumn{1}%
+ \fi
+ \advance\c@pgfplots@scanlineindex by-1
+ }{%
+ % if scanline is completed, switch states:
+ \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@image@after@second%%
+ \c@pgfplots@scanlineindex=0
+ \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlermesh@image@nextrownum
+ }%
+}%
+\def\pgfplotsplothandlermesh@PIPE@DECODE@image@after@second#1{%
+ \pgfplotsplothandlermesh@PIPE@DECODE@matrix@collect@and@callback{#1}{%
+ \pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell{0}%
+ %
+ \advance\c@pgfplots@scanlineindex by1
+ \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax
+ % ok, we have to extrapolate the last column.
+ \pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell@lastcolumn{0}%
+ \fi
+ \advance\c@pgfplots@scanlineindex by-1
+ }{%
+ % if scanline is completed: advance to next
+ \c@pgfplots@scanlineindex=0
+ \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlermesh@image@nextrownum
+ }%
+}%
+
+% To be used within the DECODE "loop" only! It assembles temporary
+% variables for the next iteration (and consumes it).
+%
+% #1: '1' if topmost row is to be extrapolated, '0' if it should be
+% acquired from the datastructure 'lastinterpscanline'
+\def\pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell#1{%
+ \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input
+ %
+ % we have to compute the four corners by means of
+ % averaging/extrapolation.
+ %
+ % We place the rectangle around (i-1,j-1), i.e. imjm
+ % Notation: the four corners are aa, ab, ba, and bb.
+ % aa ----- ab
+ % | |
+ % | |
+ % | imjm |
+ % | |
+ % | |
+ % ba ------ bb
+ %
+ % bb is the average of the four cell mid points of our
+ % scanline, the others are acquired from previous iterations
+ % or from extrapolation schemes.
+ %
+ % compute bb:
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@im@jm\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@im@j\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@i@j\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@i@jm\times{0.25}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@bb
+ \pgfplotspatchvertexcopymetaifbounded\pgfplotsplothandlermesh@i@j\to\pgfplotsplothandlermesh@bb
+ %
+ %
+ \if1#1%
+ % Ah -- this here is the very first row! That means we
+ % have to extrapolate the topmost coordinates.
+ %
+ % Apply extrapolation for ab:
+ %
+ % compute ab = bb + 2* ( 1/2 (imj + imjm) - bb)
+ % which resolves to the following:
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@bb\times{-1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@im@j\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@im@jm\times{1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@ab
+ \pgfplotspatchvertexcopymetaifbounded\pgfplotsplothandlermesh@im@j\to\pgfplotsplothandlermesh@ab
+ \else
+ \ifnum\c@pgfplots@scanlineindex=1
+ \pgfplotsdequepopfront{lastinterpscanline}\to\pgfplotsplothandlermesh@aa
+ \fi
+ \pgfplotsdequepopfront{lastinterpscanline}\to\pgfplotsplothandlermesh@ab
+ \fi
+ %
+ \ifnum\c@pgfplots@scanlineindex=1
+ % ah, we have to apply special treatment for the leftmost
+ % cell.
+ %
+ %
+ % compute ba = bb + 2* ( 1/2 (imjm + ijm) - bb)
+ % which resolves to the following:
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@bb\times{-1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@i@jm\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@im@jm\times{1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@ba
+ \pgfplotspatchvertexcopymetaifbounded\pgfplotsplothandlermesh@i@jm\to\pgfplotsplothandlermesh@ba
+ %
+ \if1#1%
+ % ok, extrapolate 'aa' as well:
+ %
+ % compute aa = ba + (ab - bb)
+ % which resolves to the following:
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@bb\times{-1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@ba\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@ab\times{1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@aa
+ \pgfplotspatchvertexcopymetaifbounded\pgfplotsplothandlermesh@im@jm\to\pgfplotsplothandlermesh@aa
+ \else
+ % in this case, 'aa' has been fetched from the deque
+ % (from the previous scanline)
+ \fi
+ %
+ % as soon as we process the next scanline, we need to know the
+ % interpolated values -- they will become the top row of the
+ % next scanline's cells.
+ \expandafter\pgfplotsdequepushback\pgfplotsplothandlermesh@ba\to{lastinterpscanline}%
+ \else
+ % ok, we take the left edge (ba and aa) from the previous
+ % iteration (see the end of this code where the previous
+ % loop iteration prepared them).
+ \fi
+ %
+ \pgfplotsplothandlermesh@image@set@first@color@to\pgfplotsplothandlermesh@im@jm\to\pgfplotsplothandlermesh@aa
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsretval}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@ab}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@bb}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@ba}%
+ %
+ % ... and communicate this as well to the next scanline (see
+ % \pgfplotsplothandlermesh@PIPE@DECODE@image@after@second)
+ \expandafter\pgfplotsdequepushback\pgfplotsplothandlermesh@bb\to{lastinterpscanline}%
+ %
+ \ifnum\c@pgfplotsplothandlermesh@image@nextrownum=\pgfplotsplothandlermesh@numscanlines\relax
+ \pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell@lastrow
+ \fi
+ %
+ % merely shift the current points such that the next loop
+ % iteration can use them without modifications:
+ \let\pgfplotsplothandlermesh@ba=\pgfplotsplothandlermesh@bb
+ \let\pgfplotsplothandlermesh@aa=\pgfplotsplothandlermesh@ab
+ %
+}%
+
+% The color handling of 'matrix input=image' is quite involved.
+% There are the following requirements:
+% 1. the point meta of the cell's first vertex _must_ be equal to the point meta of the cell mid point, i.e. equal to the user input.
+% 2. All other vertices should be interpolated "as smart as possible". This interpolation scheme should work even if adjacent cell midpoints have _no_ bounded meta data!
+% 3. The routines which glue adjacent cells together have to ensure that they do not accidentally intermix (1) and (2). This is complicated since the sweep loop intermingles both responsibilities (sigh).
+%
+% This helper function ensures (1): it copies the point meta of the \pgfplotspatchvertex #1 to the values of of #2 and assigns the result to \pgfplotsretval.
+% #1 a valid \pgfplotspatchvertex
+% #2 a valid \pgfplotspatchvertex
+%
+% POSTCONDITION: \pgfplotsretval contains the result, i.e. a copy of '#2' which contains the point meta of '#1'.
+\def\pgfplotsplothandlermesh@image@set@first@color@to#1\to#2{%
+ \let\pgfplotsretval=#2%
+ \pgfplotspatchvertexcopymeta#1\to\pgfplotsretval
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell@lastrow{%
+ %
+ \let\pgfplotsplothandlermesh@last@aa=\pgfplotsplothandlermesh@ba
+ \let\pgfplotsplothandlermesh@last@ab=\pgfplotsplothandlermesh@bb
+ %
+ % ASSUMPTION: we want to compute Laa, Lab, Lba and Lbb in the following setup:
+ %
+ % aa ----- ab
+ % | |
+ % | |
+ % | imjm |
+ % | |
+ % | |
+ % ba ------ bb
+ % =Laa =Lab
+ % | |
+ % | |
+ % | ijm |
+ % | |
+ % | |
+ % Lba------ Lbb
+ %
+ % compute Lbb = bb + 2 * (1/2 ( ijm + ij) - bb ). We assume that
+ % we can still access 'bb', the coordinate of the current point.
+ % This resolves to the following:
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@bb\times{-1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@i@jm\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@i@j\times{1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@last@bb
+ % FIXME : which is the correctly extrapolated cdata!?
+ %\pgfplotspatchvertexcopymetaifbounded\pgfplotsplothandlermesh@i@j\to\pgfplotsplothandlermesh@last@bb
+ %
+ \ifnum\c@pgfplots@scanlineindex=1
+ % compute Lba = Lbb + Laa - Lab
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@last@bb\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@last@aa\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@last@ab\times{-1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@last@ba
+ % FIXME : which is the correctly extrapolated cdata!?
+ %\pgfplotspatchvertexcopymetaifbounded\pgfplotsplothandlermesh@i@jm\to\pgfplotsplothandlermesh@last@ba
+ \else
+ % transported from previous iteration.
+ \fi
+ %
+ \pgfplotsplothandlermesh@image@set@first@color@to\pgfplotsplothandlermesh@i@jm\to\pgfplotsplothandlermesh@last@aa
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsretval}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@last@ab}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@last@bb}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@last@ba}%
+ %
+ \let\pgfplotsplothandlermesh@last@ba=\pgfplotsplothandlermesh@last@bb
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell@lastrow@lastcol{%
+ %
+ % ASSUMPTION: we want to compute Laa, Lab, Lba and Lbb in the following setup:
+ %
+ % aa ----- ab
+ % | |
+ % | |
+ % | imj |
+ % | |
+ % | |
+ % ba ------ bb
+ % =Laa =Lab
+ % | |
+ % | |
+ % | ij |
+ % | |
+ % | |
+ % Lba------ Lbb
+ \let\pgfplotsplothandlermesh@last@aa=\pgfplotsplothandlermesh@ba
+ \let\pgfplotsplothandlermesh@last@ab=\pgfplotsplothandlermesh@bb
+ %
+ % I mirrored the formula for lastrow.
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@last@bb\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@last@aa\times{-1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@last@ab\times{1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@last@bb
+ \pgfplotspatchvertexcopymetaifbounded\pgfplotsplothandlermesh@i@j\to\pgfplotsplothandlermesh@last@bb
+ %
+ \pgfplotsplothandlermesh@image@set@first@color@to\pgfplotsplothandlermesh@i@j\to\pgfplotsplothandlermesh@last@aa
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsretval}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@last@ab}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@last@bb}%
+ % this value is transported from previous iteration:
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@last@ba}%
+}%
+
+\def\pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell@lastcolumn#1{%
+ \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input
+ %
+ % we have to compute the four corners by means of
+ % averaging/extrapolation.
+ %
+ % We place the rectangle around (i-1,j), i.e. imj.
+ % This is in contrast to
+ % \pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell
+ % where we placed the rectange around (i-1,j-1).
+ %
+ % Notation: the four corners are aa, ab, ba, and bb.
+ % aa ----- ab
+ % | |
+ % | |
+ % | imj |
+ % | |
+ % | |
+ % ba ------ bb
+ %
+ % We can simply copy aa and ba from the previous cell (as in
+ % the standard case). Note that this has already been prepared
+ % for us, i.e. the variables have already been set by the
+ % previous iteration.
+ %
+ % compute ab and bb by means of extrapolation:
+ %
+ % compute bb:
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@ba\times{-1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@im@j\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@i@j\times{1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@bb
+ % FIXME : which is the correctly extrapolated cdata!?
+ %
+ %
+ \if1#1%
+ % Ah -- this here is the very first row! That means we
+ % have to extrapolate the topmost coordinates.
+ %
+ % Apply extrapolation for ab:
+ %
+ % compute ab = bb + (aa - ba)
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaccum@configure@ignore@unboundedmetadata
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@bb\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@aa\times{1.0}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotsplothandlermesh@ba\times{-1.0}%
+ \pgfplotspatchvertexfinish\pgfplotsplothandlermesh@ab
+ % FIXME : which is the correctly extrapolated cdata!?
+ \else
+ \pgfplotsdequepopfront{lastinterpscanline}\to\pgfplotsplothandlermesh@ab
+ \fi
+ %
+ \pgfplotsplothandlermesh@image@set@first@color@to\pgfplotsplothandlermesh@im@j\to\pgfplotsplothandlermesh@aa
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsretval}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@ab}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@bb}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@ba}%
+ %
+ % ... and communicate this as well to the next scanline (see
+ % \pgfplotsplothandlermesh@PIPE@DECODE@image@after@second)
+ \expandafter\pgfplotsdequepushback\pgfplotsplothandlermesh@bb\to{lastinterpscanline}%
+ %
+ \ifnum\c@pgfplotsplothandlermesh@image@nextrownum=\pgfplotsplothandlermesh@numscanlines\relax
+ \pgfplotsplothandlermesh@PIPE@DECODE@image@sweep@create@cell@lastrow@lastcol
+ \fi
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_leq.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_leq.code.tex
new file mode 100644
index 0000000000..8be16c806a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_leq.code.tex
@@ -0,0 +1,279 @@
+% ======================================================
+% compatibility with PGF 3.0.1a
+% ======================================================
+%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% It contains a couple of patches such that selected changes which
+%%% are also part of PGF/TikZ (and can be found in the development
+%%% version of PGF/TikZ) are available within pgfplots.
+%%%
+%%% this file contains solvers which have been written by Christian Feuersaenger (primarily, but not only, for pgfplots)
+
+% Solves a linear equation system of size 2x2 using gauss elimination.
+%
+% It employs TeX register arithmetics to do so.
+% #1: should contain 4 sets of braces with matrix entries,
+% {<a11>}{<a12>}
+% {<a21>}{<a22>}
+% where each entry should be a number without unit.
+% It is acceptable if '#1' is a macro which expands to the expected
+% format.
+% #2: should contain 2 sets of braces with the right-hand-side,
+% {<r1>}{<r2>}
+% where each entry should be a number without unit.
+% It is acceptable if '#2' is a macro which expands to the expected
+% format.
+%
+% It will assign \pgfmathresult to contain two sets of braces with the
+% result.
+%
+% Example:
+% \pgfutilsolvetwotwoleq{
+% {0.24}{1}
+% {-0.97}{0}
+% }{
+% {-7}
+% {18}
+% }
+% -> yields \pgfmathresult={−18.55618}{−2.54642}
+%
+% The algorithm employs column pivotisation.
+%
+% If the matrix is singular, the routine will return {}.
+\def\pgfutilsolvetwotwoleq#1#2{%
+ \begingroup
+ \dimendef\aa=0
+ \dimendef\ab=1
+ \dimendef\ba=2
+ \dimendef\bb=3
+ \dimendef\ra=4
+ \dimendef\rb=5
+ \dimendef\tmpa=6
+ \dimendef\tmpb=7
+ \edef\pgf@temp{#1}%
+ \expandafter\pgfutilsolvetwotwoleq@A\pgf@temp
+ \edef\pgf@temp{#2}%
+ \expandafter\pgfutilsolvetwotwoleq@r\pgf@temp
+ %
+ \pgfutilsolvetwotwoleq@ifislarger\aa\ba{%
+ % identity "permutation":
+ \def\Pa{a}%
+ \def\Pb{b}%
+ }{%
+ % permutation matrix: switch rows!
+ \def\Pa{b}%
+ \def\Pb{a}%
+ }%
+ % \pivot := 1/aa
+ \tmpa=\csname m\Pa a\endcsname pt %
+ \ifdim\tmpa<0pt \tmpa=-\tmpa\fi
+ \ifdim\tmpa<0.0001pt
+ % singular matrix!
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ \pgfmathreciprocal@
+ {\csname m\Pa a\endcsname}%
+ \let\pivot=\pgfmathresult
+ %
+ % \factor := 1/aa * ba
+ \csname \Pb a\endcsname=\pivot\csname \Pb a\endcsname
+ \edef\factor{\expandafter\pgf@sys@tonumber\csname \Pb a\endcsname}%
+ %
+ % bb -= ba/aa * ab
+ \tmpa=-\factor\csname \Pa b\endcsname
+ \advance\csname \Pb b\endcsname by\tmpa
+ %
+ % rb -= ba/aa * ra
+ \tmpa=-\factor\csname r\Pa\endcsname
+ \advance\csname r\Pb\endcsname by\tmpa
+ %
+ \tmpa=\csname \Pb b\endcsname%
+ \ifdim\tmpa<0pt \tmpa=-\tmpa\fi
+ \ifdim\tmpa<0.0001pt
+ % singular matrix!
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ % xb := rb / bb (the modified rb and modified bb!)
+ \pgfmathdivide@
+ {\expandafter\pgf@sys@tonumber\csname r\Pb\endcsname}
+ {\expandafter\pgf@sys@tonumber\csname \Pb b\endcsname}%
+ \expandafter\let\csname pgfmathresult\Pb\endcsname=\pgfmathresult
+ %
+ % ra := ra - xb * ab
+ \tmpa=\csname pgfmathresult\Pb\endcsname\csname \Pa b\endcsname
+ \advance\csname r\Pa\endcsname by-\tmpa
+ %
+ % xa := 1/aa * ra (the modified ra!)
+ \tmpa=\pivot\csname r\Pa\endcsname
+ \expandafter\edef\csname pgfmathresult\Pa\endcsname{\pgf@sys@tonumber\tmpa}%
+ %
+ \edef\pgfmathresult{%
+ {\csname pgfmathresult\Pa\endcsname}%
+ {\csname pgfmathresult\Pb\endcsname}%
+ }%
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+\def\pgfutilsolvetwotwoleq@ifislarger#1#2#3#4{%
+ \tmpa=#1
+ \ifdim\tmpa<0pt
+ \multiply\tmpa by-1
+ \fi
+ \tmpb=#2
+ \ifdim\tmpb<0pt
+ \multiply\tmpb by-1
+ \fi
+ \ifdim\tmpa>\tmpb
+ #3%
+ \else
+ #4%
+ \fi
+}%
+
+\def\pgfutilsolvetwotwoleqfloat@ifislarger#1#2#3#4{%
+ \pgfmathfloatabs@{#1}\let\tmpa=\pgfmathresult
+ \pgfmathfloatabs@{#2}\let\tmpb=\pgfmathresult
+ \pgfmathfloatlessthan@{\tmpb}{\tmpa}%
+ \ifpgfmathfloatcomparison
+ #3%
+ \else
+ #4%
+ \fi
+}%
+\def\pgfutilsolvetwotwoleq@A#1#2#3#4{%
+ \def\maa{#1}\def\mab{#2}%
+ \def\mba{#3}\def\mbb{#3}%
+ \aa=#1pt \ab=#2pt
+ \ba=#3pt \bb=#4pt
+}
+\def\pgfutilsolvetwotwoleq@r#1#2{%
+ \ra=#1pt \rb=#2pt
+}%
+\def\pgfutilsolvetwotwoleqfloat@A#1#2#3#4{%
+ \pgfmathfloatparsenumber{#1}\let\maa=\pgfmathresult
+ \pgfmathfloatparsenumber{#2}\let\mab=\pgfmathresult
+ \pgfmathfloatparsenumber{#3}\let\mba=\pgfmathresult
+ \pgfmathfloatparsenumber{#4}\let\mbb=\pgfmathresult
+}
+\def\pgfutilsolvetwotwoleqfloat@r#1#2{%
+ \pgfmathfloatparsenumber{#1}\let\ra=\pgfmathresult
+ \pgfmathfloatparsenumber{#2}\let\rb=\pgfmathresult
+}%
+
+% Same as \pgfutilsolvetwotwoleq, but using floating point
+% arithmetics. The return value is still in fixed point.
+\def\pgfutilsolvetwotwoleqfloat#1#2{%
+ \begingroup
+ \pgfmathfloatcreate{1}{1.0}{-4}% FIXME : use a smaller threshold for FPU?
+ \let\thresh=\pgfmathresult
+ %
+ \edef\pgf@temp{#1}%
+ \expandafter\pgfutilsolvetwotwoleqfloat@A\pgf@temp
+ \edef\pgf@temp{#2}%
+ \expandafter\pgfutilsolvetwotwoleqfloat@r\pgf@temp
+ %
+ \pgfutilsolvetwotwoleqfloat@ifislarger\maa\mba{%
+ % identity "permutation":
+ \def\Pa{a}%
+ \def\Pb{b}%
+ }{%
+ % permutation matrix: switch rows!
+ \def\Pa{b}%
+ \def\Pb{a}%
+ }%
+ % \pivot := 1/aa
+ \expandafter\pgfmathfloatabs@\expandafter{\csname m\Pa a\endcsname}%
+ \let\tmpa=\pgfmathresult
+ \pgfmathfloatlessthan@{\tmpa}{\thresh}%
+ \ifpgfmathfloatcomparison
+ % singular matrix!
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ \expandafter\pgfmathfloatreciprocal@\expandafter{\csname m\Pa a\endcsname}%
+ \let\pivot=\pgfmathresult
+ %
+ % \factor := 1/aa * ba
+ \expandafter\pgfmathfloatmultiply@\expandafter{\csname m\Pb a\endcsname}{\pivot}%
+ \let\factor=\pgfmathresult
+ \expandafter\let\csname m\Pb a\endcsname=\factor
+ %
+ % bb -= ba/aa * ab
+ \expandafter\pgfmathfloatmultiply@\expandafter{\csname m\Pa b\endcsname}{\factor}%
+ \let\tmpa=\pgfmathresult
+ \expandafter\pgfmathfloatsubtract@\expandafter{\csname m\Pb b\endcsname}{\tmpa}%
+ \expandafter\let\csname m\Pb b\endcsname=\pgfmathresult
+ %
+ % rb -= ba/aa * ra
+ \expandafter\pgfmathfloatmultiply@\expandafter{\csname r\Pa\endcsname}{\factor}%
+ \let\tmpa=\pgfmathresult
+ \expandafter\pgfmathfloatsubtract@\expandafter{\csname r\Pb\endcsname}{\tmpa}%
+ \expandafter\let\csname r\Pb\endcsname=\pgfmathresult
+ %
+ \expandafter\pgfmathfloatabs@\expandafter{\csname m\Pb b\endcsname}%
+ \let\tmpa=\pgfmathresult
+ \pgfmathfloatlessthan@{\tmpa}{\thresh}%
+ \ifpgfmathfloatcomparison
+ % singular matrix!
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ % xb := rb / bb (the modified rb and modified bb!)
+ \edef\pgf@marshal{
+ \noexpand\pgfmathfloatdivide@
+ {\csname r\Pb\endcsname}
+ {\csname m\Pb b\endcsname}%
+ }%
+ \pgf@marshal
+ \expandafter\let\csname pgfmathresult\Pb\endcsname=\pgfmathresult
+ \let\tmpa=\pgfmathresult
+ %
+ % ra := ra - xb * ab
+ \expandafter\pgfmathfloatmultiply@\expandafter{\csname m\Pa b\endcsname}{\tmpa}%
+ \let\tmpa=\pgfmathresult
+ \expandafter\pgfmathfloatsubtract@\expandafter{\csname r\Pa\endcsname}{\tmpa}%
+ \expandafter\let\csname r\Pa\endcsname=\pgfmathresult
+ %
+ % xa := 1/aa * ra (the modified ra!)
+ \expandafter\pgfmathfloatmultiply@\expandafter{\csname r\Pa\endcsname}{\pivot}%
+ \expandafter\let\csname pgfmathresult\Pa\endcsname=\pgfmathresult
+ %
+ \edef\pgfmathresult{%
+ {\csname pgfmathresult\Pa\endcsname}%
+ {\csname pgfmathresult\Pb\endcsname}%
+ }%
+ \expandafter\pgfutilsolvetwotwoleqfloat@to@pgf@range\pgfmathresult
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+
+\def\pgfutilsolvetwotwoleqfloat@to@pgf@range#1#2{%
+ \pgfmathfloatcreate{1}{1.6}{4}\let\pgfutilsolvetwotwoleqfloat@to@pgf@range@max=\pgfmathresult
+ \pgfmathfloatabs@{#1}%
+ \expandafter\pgfmathfloatlessthan@\expandafter{\pgfmathresult}{\pgfutilsolvetwotwoleqfloat@to@pgf@range@max}%
+ \ifpgfmathfloatcomparison
+ \pgfmathfloatabs@{#2}%
+ \expandafter\pgfmathfloatlessthan@\expandafter{\pgfmathresult}{\pgfutilsolvetwotwoleqfloat@to@pgf@range@max}%
+ \ifpgfmathfloatcomparison
+ % ok.
+ \pgfmathfloattofixed{#1}\let\tmpa=\pgfmathresult
+ \pgfmathfloattofixed{#2}%
+ \edef\pgfmathresult{{\tmpa}{\pgfmathresult}}%
+ \else
+ % singular (because PGF cannot represent its result
+ \let\pgfmathresult=\pgfutil@empty
+ \fi
+ \else
+ % singular (because PGF cannot represent its result
+ \let\pgfmathresult=\pgfutil@empty
+ \fi
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_loader.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_loader.code.tex
new file mode 100644
index 0000000000..b68c50eac2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_loader.code.tex
@@ -0,0 +1,361 @@
+
+%\input pgfplotsoldpgfsupp_pgfmathparse.opt.code.tex
+%\beginpgfmathparsecheckfornumber
+
+\pgfutil@ifundefined{pgfmathlessthan@}{%
+ \let\pgfmathlessthan@=\pgfmathless@
+ \let\pgfmathgreaterthan@=\pgfmathgreater@
+}{}%
+
+
+\def\pgfplotsusecompatibilityfile#1{%
+ \pgfutil@IfUndefined{pgfplotsusecompatibilityfile@loaded@#1}{%
+ \expandafter\gdef\csname pgfplotsusecompatibilityfile@loaded@#1\endcsname{1}%
+ \input pgfplotsoldpgfsupp_#1
+ }{%
+ % already loaded.
+ }%
+}%
+
+
+\def\pgfmathfloatrounddisplaystyle@shared@impl@WRONG#1#2{%
+ {\toks0={#1}%
+ \toks1=\expandafter{\pgfmathfloatrounddisplaystyle@e@mark #2}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 }%
+ }%
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+}%
+
+% check whether we need to load supplementary code.
+% The development of pgfplots and pgf is intermingled, so pgfplots
+% always uses up-to-date pgf CVS versions - the relevant complements between
+% PGF 2.10 and PGF CVS are loaded here:
+%
+% #1: for backwards compatibility
+% #2: for normal processing.
+\def\pgfplots@ifneedspgfcompabitibilitycode@has@pgf@one@zero@zero#1#2{%
+ %\pgfkeysifdefined{/pgf/number format/sci precision/.@cmd}{#2}{#1}%
+ \pgfutil@ifundefined{pgfmathprintnumber@RELATIVE@choice@roundtofixed}{#1}{#2}%
+}%
+
+\let\pgfplots@ifneedspgfcompabitibilitycode=\pgfplots@ifneedspgfcompabitibilitycode@has@pgf@one@zero@zero
+
+\pgfplots@ifneedspgfcompabitibilitycode
+ {%
+ \immediate\write16{Package pgfplots: loading complementary code for your PGF version...}
+ \input pgfplotsoldpgfsupp_misc.code.tex
+ \let\pgfkeysloaded=\undefined
+ \input pgfplotsoldpgfsupp_pgfkeys.code.tex
+ \input pgfplotsoldpgfsupp_pgfmathfloat.code.tex
+ \input pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex
+ \input pgfplotsoldpgfsupp_pgflibraryfpu.code.tex
+ \input pgfplotsoldpgfsupp_pgfcorescopes.code.tex
+ \input pgfplotsoldpgfsupp_pgfcorelayers.code.tex
+ }%
+ {%
+ \pgfplots@iffileexists{pgflibraryfpu.code.tex}{%
+ \usepgflibrary{fpu}%
+ }{%
+ \immediate\write16{Package pgfplots: loading FPU library which doesn't appear to exist in your PGF version...}
+ \input pgfplotsoldpgfsupp_pgflibraryfpu.code.tex
+ }%
+ }%
+
+\gdef\pgfplots@glob@TMPa{0}%
+
+\def\pgfmathfloatfloor@broken#1{%
+ \edef\pgfmathfloat@loc@TMPa{#1}%
+ \pgfmathfloatcreate{2}{5.0}{-1}% -0.5
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \pgfmathfloatadd@{\pgfmathfloat@loc@TMPa}{\pgfmathfloat@loc@TMPb}%
+ \expandafter\pgfmathfloatround@\expandafter{\pgfmathresult}%
+}
+\ifx\pgfmathfloatfloor\pgfmathfloatfloor@broken
+ \gdef\pgfplots@glob@TMPa{1}%
+\fi
+
+\def\pgfmathfloor@broken#1{%
+ \begingroup%
+ \expandafter\pgfmath@x#1pt\relax%
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgfmath@counta\the\pgfmath@x\relax\pgfmath@%
+ \expandafter\pgfmath@x#1pt\relax%
+ \ifdim\pgfmath@x<0pt\relax%
+ \advance\c@pgfmath@counta by -1\relax%
+ \fi%
+ \pgfmath@x\c@pgfmath@counta pt\relax%
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}%
+\ifx\pgfmathfloor@\pgfmathfloor@broken
+ \def\pgfmathfloor@#1{%
+ \begingroup%
+ \expandafter\pgfmath@x#1pt\relax%
+ \afterassignment\pgfmathfloor@collect@remainder%
+ \expandafter\c@pgfmath@counta\the\pgfmath@x\pgfmath@%
+ \expandafter\pgfmath@x#1pt\relax%
+ \ifdim\pgfmath@x<0pt\relax%
+ \ifdim\pgfmathfloor@remainder>0pt
+ \advance\c@pgfmath@counta by -1\relax%
+ \else
+ % ok, we stripped only '0'.
+ \fi
+ \fi%
+ \pgfmath@x\c@pgfmath@counta pt\relax%
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+ }%
+ \def\pgfmathfloor@collect@remainder#1\pgfmath@{%
+ \def\pgfmathfloor@remainder{#1}%
+ \ifx\pgfmathfloor@remainder\pgfutil@empty
+ \def\pgfmathfloor@remainder{0}%
+ \fi
+ }%
+\fi
+
+
+\pgfutil@ifundefined{pgfmathfloat@stack@push@operand@single@str}{
+ \gdef\pgfplots@glob@TMPa{1}%
+}
+{}%
+
+\if1\pgfplots@glob@TMPa
+ \immediate\write16{Package pgfplots: loading complementary arithmetics for your pgf version...}
+ \input pgfplotsoldpgfsupp_pgflibraryfpu.code.tex
+ \input pgfplotsoldpgfsupp_pgfmathfloat.code.tex
+\fi
+
+\pgfutil@IfUndefined{pgfmathdeclarefunction}{
+ \pgfplots@warning{Parts of pgfplots require PGF 2.10; you have PGF 2.00 . Consider upgrading if you experience problems.}%
+}{%
+}%
+
+\pgfutil@IfUndefined{pgfutilifcontainsmacro}{%
+ \gdef\pgfplots@glob@TMPa{1}%
+}{%
+ \gdef\pgfplots@glob@TMPa{0}%
+}%
+\if1\pgfplots@glob@TMPa
+ \begingroup
+ \catcode`\|=0
+ \catcode`\\=12
+ |gdef|pgfutil@backslash@as@other{\}%
+ |endgroup
+ \def\pgfutil@command@to@string#1#2{%
+ \expandafter\pgfutil@command@to@string@@\meaning#1\pgfutil@EOI{#2}%
+ }%
+ \xdef\pgfutil@glob@TMPa{\meaning\pgfutil@empty}%
+ \expandafter\def\expandafter\pgfutil@command@to@string@@\pgfutil@glob@TMPa#1\pgfutil@EOI#2{%
+ \def#2{#1}%
+ }%
+ \def\pgfutilifcontainsmacro#1#2#3{%
+ \def\pgf@marshal{#1}%
+ \pgfutil@command@to@string\pgf@marshal\pgf@marshal
+ \edef\pgf@marshal{\noexpand\pgfutil@in@{\pgfutil@backslash@as@other}{\pgf@marshal}}%
+ \pgf@marshal
+ \ifpgfutil@in@
+ \def\pgf@marshal{#2}%
+ \else
+ \def\pgf@marshal{#3}%
+ \fi
+ \pgf@marshal
+ }%
+\fi
+
+\pgfutil@IfUndefined{pgfapplistnewempty}{%
+ \immediate\write16{Package pgfplots: loading complementary utilities for your pgf version...}
+ \csname newtoks\endcsname\t@pgf@toka
+ \csname newtoks\endcsname\t@pgf@tokb
+ \csname newtoks\endcsname\t@pgf@tokc
+ \gdef\pgfutil@advancestringcounter{\pgfplotsutil@advancestringcounter}%
+ \input pgfplotsoldpgfsupp_pgfutil-common-lists.tex
+}{}%
+
+\pgfutil@IfUndefined{pgfmathiftrigonometricusesdeg}{%
+ \pgfutil@ifundefined{pgfmathdeclarefunction}{%
+ % PGF 2.00 !? Well, trig format won't work here.
+ }{%
+ \input pgfplotsoldpgfsupp_trig_format.code.tex
+ }%
+}{}%
+
+\def\pgfmathfloat@install@unimplemented@broken#1{%
+ \expandafter\pgfmathfloat@prepareuninstallcmd\csname pgfmath@#1@\endcsname%
+ \expandafter\def\csname pgfmath#1@\endcsname##1{\pgfmathfloat@notimplemented{#1}}%
+}
+
+\ifx\pgfmathfloat@install@unimplemented\pgfmathfloat@install@unimplemented@broken
+ \def\pgfmathfloat@install@unimplemented#1{%
+ \expandafter\pgfmathfloat@prepareuninstallcmd\csname pgfmath#1@\endcsname%
+ \expandafter\def\csname pgfmath#1@\endcsname##1{\pgfmathfloat@notimplemented{#1}}%
+ }%
+\fi
+
+
+\ifpgfplots@LUA@supported
+ \def\PATCH@pgfmath@local@function@body#1;{%
+ \def\pgfmath@local@body{#1}%
+ \begingroup%
+ \c@pgf@counta=0\relax%
+ \ifx\pgfmath@local@args\pgfmath@empty%
+ \expandafter\pgfmath@toks\expandafter=\expandafter{\pgfmath@local@body}%
+ \else%
+ \pgfmath@toks={}%
+ \expandafter\pgfmath@local@function@@body\pgfmath@local@args,,%
+ \fi%
+ \xdef\pgfmath@local@temp{%
+ \noexpand\pgfmathnotifynewdeclarefunction{\pgfmath@local@name}{\the\c@pgf@counta}%
+ {\the\pgfmath@toks}%
+ }%
+ \endgroup%
+ \pgfmath@local@temp%
+ }
+ % #1: the name
+ % #2: the number of arguments <n>
+ % #3: a math expression containing '#1', '#2', ... ,'#'<n>
+ % This callback is overwritten by pgflibraryluamath.
+ \def\PATCH@pgfmathnotifynewdeclarefunction#1#2#3{%
+ \pgfmathdeclarefunction{#1}{#2}{\pgfmathparse{#3}}%
+ }%
+ %
+ % currently, pgfplots does NOT call directly call any TeX macros
+ % from this library - but it relies on the fact that "trig
+ % format", \pgfmathsetseed and other configuration macros also
+ % mirror their values in LUA.
+ % And this mirroring is done in library luamath:
+ \def\pgfplots@glob@TMPa{3.0.0}%
+ \ifx\pgfversion\pgfplots@glob@TMPa
+ % 3.0.0 does not have the (correct) luamath library.
+ \let\pgfmathnotifynewdeclarefunction=\PATCH@pgfmathnotifynewdeclarefunction
+ \let\pgfmath@local@function@body=\PATCH@pgfmath@local@function@body
+ \pgfplotsusecompatibilityfile{pgflibraryluamath.code.tex}
+ \else
+ \let\PATCH@pgfmathnotifynewdeclarefunction@orig=\pgfmathnotifynewdeclarefunction
+ \let\PATCH@pgfmathsetseed@pgfbasic = \pgfmathsetseed
+ \pgfutil@IfFileExists{pgflibraryluamath.code.tex}{%
+ % ah - we have a very recent version of PGF.
+ % Well, it will hopefully come with a suitable version of the
+ % luamath library! Use it.
+ \usepgflibrary{luamath}%
+ }{%
+ % hm. PGF 2.10 ?
+ %
+ % FIXME
+ %\pgfplots@LUA@supportedfalse
+ }%
+ %
+ \gdef\pgfplots@glob@TMPa{1}% "is up to date = 1"
+ \def\pgfplots@glob@TMPa{3.0.1}%
+ \ifx\pgfversion\pgfplots@glob@TMPa
+ \gdef\pgfplots@glob@TMPa{0}% "is up to date = 0"
+ \else
+ \def\pgfplots@glob@TMPa{3.0.1a}%
+ \ifx\pgfversion\pgfplots@glob@TMPa
+ \gdef\pgfplots@glob@TMPa{0}% "is up to date = 0"
+ \fi
+ \fi
+ \if0\pgfplots@glob@TMPa
+ % 3.0.1 does not have the (correct) luamath library.
+ \pgfutil@directlua{%
+ package.loaded["pgf.luamath.functions"]=nil;
+ package.loaded["pgf.luamath.parser"]=nil;
+ pgfluamathfunctions = nil;
+ pgfluamathparser = nil}
+ \pgfplotsusecompatibilityfile{pgflibraryluamath.code.tex}
+ % ATTENTION: see 'pgfplots.lua' which ALSO loads these items
+ % FIXME : some .lua files reference outdated
+ % tonumber/tostring functions!
+ \pgfutil@directlua{%
+ pgfplots.pgfluamathfunctions = pgfluamathfunctions;
+ pgfplots.pgfluamathparser = pgfluamathparser}%
+ \let\pgfmathnotifynewdeclarefunction@orig=\PATCH@pgfmathnotifynewdeclarefunction@orig
+ \let\pgfmathsetseed@pgfbasic=\PATCH@pgfmathsetseed@pgfbasic
+ \pgfplots@log4{luamath library shipped with pgf \pgfversion\space is outdated; using a substitute shipped with pgfplots}%
+ \else
+ \pgfplots@log4{luamath library shipped with pgf \pgfversion\space is up-to-date}%
+ \fi
+ \fi
+\fi
+
+\def\pgf@plotgnuplot@luatex@eight@seven[#1]#2{%
+ \pgf@resample@plottrue%
+ \pgfutilpreparefilename{#1.gnuplot}%
+ \let\pgf@plotgnuplotfile=\pgfretval
+ \pgfutilpreparefilename{#1.table}%
+ \let\pgf@plottablefile=\pgfretval
+ \let\pgf@plottablefile@quoted=\pgfretvalquoted
+ % Check, whether it is up-to-date
+ \openin\pgfutil@inputcheck=\pgf@plotgnuplotfile\relax
+ \ifeof\pgfutil@inputcheck%
+ \else%
+ \pgfutil@read\pgfutil@inputcheck to\pgf@temp% ignored
+ \pgfutil@read\pgfutil@inputcheck to\pgf@plot@line%
+ \closein\pgfutil@inputcheck
+ \edef\pgf@plot@code{#2\space}%
+ \ifx\pgf@plot@code\pgf@plot@line%
+ \openin\pgfutil@inputcheck=\pgfretval\relax
+ \ifeof\pgfutil@inputcheck%
+ \else%
+ \closein\pgfutil@inputcheck
+ \pgf@resample@plotfalse%
+ \fi%
+ \fi%
+ \fi
+ \ifpgf@resample@plot%
+ \immediate\openout\pgf@plotwrite=\pgf@plotgnuplotfile\relax
+ \immediate\pgfutil@write\pgf@plotwrite{\pgf@gnuplot@head}%
+ \immediate\pgfutil@write\pgf@plotwrite{#2}%
+ \immediate\closeout\pgf@plotwrite%
+ \pgfutil@shellescape{%
+ \pgfkeysvalueof{/pgf/plot/gnuplot call} \pgf@plotgnuplotfile}%
+ \fi%
+% \let\pgf@savedparsexyline=\pgf@parsexyline%
+% \let\pgf@parsexyline=\pgf@parsegnuplotxyline%
+ \pgfplotxyfile{\pgf@plottablefile}%
+% \let\pgf@parsexyline=\pgf@savedparsexyline%
+}
+
+\pgfutil@IfUndefined{pgfutil@shellescape}{%
+ \def\pgfutil@shellescape{\pgfplots@shellescape}%
+ \let\pgf@plotgnuplot=\pgf@plotgnuplot@luatex@eight@seven
+}{%
+ % ok, plot function is up-to-date
+}%
+
+\def\pgfmathfloatmod@broken#1#2{%
+ \begingroup
+ \pgfmathfloatdivide@{#1}{#2}%
+ \pgfmathfloatint@{\pgfmathresult}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfmathfloat@loc@TMPa}{#2}%
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \pgfmathfloatsubtract@{#1}{\pgfmathfloat@loc@TMPb}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+\ifx\pgfmathfloatmod@\pgfmathfloatmod@broken
+ \def\pgfmathfloatmod@#1#2{%
+ \begingroup
+ \pgfmathfloattoint{#1}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloattoint{#2}%
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \c@pgfmath@counta=\pgfmathfloat@loc@TMPa\relax
+ \divide\c@pgfmath@counta by\pgfmathfloat@loc@TMPb\relax
+ \expandafter\pgfmathfloatparsenumber\expandafter{\the\c@pgfmath@counta}%
+ %
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfmathfloat@loc@TMPa}{#2}%
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \pgfmathfloatsubtract@{#1}{\pgfmathfloat@loc@TMPb}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ }
+\fi
+
+\pgfutil@IfUndefined{pgfutilsolvetwotwoleqfloat}{%
+ \input pgfplotsoldpgfsupp_leq.code.tex
+}{}%
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_misc.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_misc.code.tex
new file mode 100644
index 0000000000..5d1188e856
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_misc.code.tex
@@ -0,0 +1,885 @@
+% ======================================================
+% compatibility with PGF 2.10
+% ======================================================
+%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% It contains a couple of patches such that selected changes which
+%%% are also part of PGF/TikZ (and can be found in the development
+%%% version of PGF/TikZ) are available within pgfplots.
+%%%
+%%% Typically, these modifications have been done by the pgfplots team
+%%% as contribution to PGf/TIKZ
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+\def\pgfdeclarelayer#1{%
+ \pgfutil@ifundefined{pgf@layerbox@#1}{%
+ \expandafter\expandafter\csname pgf@newbox\endcsname\csname pgf@layerbox@#1\endcsname%
+ \expandafter\expandafter\csname pgf@newbox\endcsname\csname pgf@layerboxsaved@#1\endcsname%
+ }{}%
+}
+
+\def\tikz@key@name@path@wrong#1#2{%
+ \tikz@addmode{%
+ \pgfsyssoftpath@getcurrentpath\tikz@intersect@temppath@round%
+ \pgfprocessround\tikz@intersect@temppath@round\tikz@intersect@temppath%
+ \ifx\tikz@intersect@namedpaths\pgfutil@empty%
+ \else%
+ \tikz@intersect@namedpaths%
+ \pgfutil@ifundefined{tikz@intersect@path@name@#1}{}%
+ {%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tikz@intersect@@temppath%
+ \expandafter\expandafter\expandafter{\csname tikz@intersect@path@name@#1\endcsname}%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tikz@intersect@temppath%
+ \expandafter\expandafter\expandafter{\expandafter\tikz@intersect@temppath\tikz@intersect@temppath}%
+ }%
+ \fi%
+ \tikz@intersect@addto@path@names{#1}{#2}%
+ }%
+}%
+
+\def\tikz@key@name@path@new#1#2{%
+ \tikz@addmode{%
+ \pgfsyssoftpath@getcurrentpath\tikz@intersect@temppath@round%
+ \pgfprocessround\tikz@intersect@temppath@round\tikz@intersect@temppath%
+ \ifx\tikz@intersect@namedpaths\pgfutil@empty%
+ \else%
+ \tikz@intersect@namedpaths%
+ \fi%
+ \tikz@intersect@addto@path@names{#1}{#2}%
+ }%
+}%
+
+\ifx\tikz@key@name@path@wrong\tikz@key@name@path
+ \let\tikz@key@name@path=\tikz@key@name@path@new
+\fi
+
+\def\pgfutil@insertatbegincurrentpagefrombox@WRONG#1{%
+ \global\setbox\pgfutil@abb\hbox{\unhbox\pgfutil@abb#1}%
+}
+
+% needed for dvipdfmx and shader=interp
+\def\pgfutil@insertatbegincurrentpagefrombox@FIXED#1{%
+ \edef\pgf@temp{\the\wd\pgfutil@abb}%
+ \global\setbox\pgfutil@abb\hbox{%
+ \unhbox\pgfutil@abb
+ %
+ % the order in which \pgfutil@insertatbegincurrentpagefrombox
+ % matters unless we make the following -shift!
+ % To see this, consider writing two such statements. The second
+ % one will (naturally) be placed more to the right, although there
+ % is no apparent reason why it should.
+ %
+ % CF observed problems when placing patterns in XObjects without
+ % this skip (dvipdfmx driver for pgfplots shader=interp)
+ \hskip-\pgf@temp\relax
+ #1%
+ }%
+}
+\expandafter\ifx\csname pgfutil@insertatbegincurrentpagefrombox\endcsname\pgfutil@insertatbegincurrentpagefrombox@WRONG
+ \let\pgfutil@insertatbegincurrentpagefrombox=\pgfutil@insertatbegincurrentpagefrombox@FIXED
+\fi
+
+% check if \endtikzpicture deals with layerlist:
+\expandafter\pgfutil@in@\expandafter\pgf@remember@layerlist@globally\expandafter{\endtikzpicture}%
+\ifpgfutil@in@
+\else
+ \def\endtikzpicture{%
+ \tikz@atend@picture%
+ \global\let\pgf@shift@baseline@smuggle=\pgf@baseline%
+ \global\let\pgf@trimleft@final@smuggle=\pgf@trimleft%
+ \global\let\pgf@trimright@final@smuggle=\pgf@trimright%
+ \global\let\pgf@remember@smuggle=\ifpgfrememberpicturepositiononpage%
+ \pgf@remember@layerlist@globally
+ \endscope%
+ \let\pgf@baseline=\pgf@shift@baseline@smuggle%
+ \let\pgf@trimleft=\pgf@trimleft@final@smuggle%
+ \let\pgf@trimright=\pgf@trimright@final@smuggle%
+ \let\ifpgfrememberpicturepositiononpage=\pgf@remember@smuggle%
+ \pgf@restore@layerlist@from@global
+ \endpgfpicture}
+\fi
+
+% ======================================================
+% compatibility with PGF 2.0
+% ======================================================
+\def\pgfutil@gobble@until@relax#1\relax{}
+
+\expandafter\ifx\csname w@pgf@writea\endcsname\relax
+\csname newwrite\endcsname\w@pgf@writea
+\fi
+
+\expandafter\ifx\csname r@pgf@reada\endcsname\relax
+\csname newread\endcsname\r@pgf@reada
+\fi
+\let\pgfutil@inputcheck=\r@pgf@reada
+
+\pgfutil@ifundefined{pgf@texdist@protect}{%
+ \def\pgf@texdist@protect{}%
+}{}
+
+% from pgfutil-common.tex:
+
+% Usage:
+% \pgfutilstrreplace{<token>}{<replacement>}{<string>}
+%
+% -> will assign the modified string into \pgfretval.
+%
+% #1: the string to search (one or more tokens)
+% #2: zero, one or more tokens which will be inserted instead of '#1'.
+% #3: the string to search in
+\long\def\pgfutilstrreplace#1#2#3{%
+ \def\pgfretval{}%
+ \long\def\pgfutil@search@and@replace@@##1#1##2\pgf@EOI{%
+ \expandafter\def\expandafter\pgfretval\expandafter{\pgfretval ##1#2}%
+ \pgfutil@search@and@replace@loop{#1}{##2}%
+ }%
+ \pgfutil@search@and@replace@loop{#1}{#3}%
+}
+\long\def\pgfutil@search@and@replace@loop#1#2{%
+ \pgfutil@in@{#1}{#2}%
+ \ifpgfutil@in@
+ \def\pgf@loc@TMPa{\pgfutil@search@and@replace@@ #2\pgf@EOI}%
+ \else
+ \expandafter\def\expandafter\pgfretval\expandafter{\pgfretval #2}%
+ \let\pgf@loc@TMPa=\relax
+ \fi
+ \pgf@loc@TMPa
+}%
+% Solves a linear equation system of size 2x2 using gauss elimination.
+%
+% It employs TeX register arithmetics to do so.
+% #1: should contain 4 sets of braces with matrix entries,
+% {<a11>}{<a12>}
+% {<a21>}{<a22>}
+% where each entry should be a number without unit.
+% #2: should contain 2 sets of braces with the right-hand-side,
+% {<r1>}{<r2>}
+% where each entry should be a number without unit.
+%
+% It will assign \pgfmathresult to contain two sets of braces with the
+% result.
+%
+% Example:
+% \pgfutilsolvetwotwoleq{
+% {0.24}{1}
+% {-0.97}{0}
+% }{
+% {-7}
+% {18}
+% }
+% -> yields \pgfmathresult={−18.55618}{−2.54642}
+%
+% The algorithm employs column pivotisation.
+\def\pgfutilsolvetwotwoleq#1#2{%
+ \begingroup
+ \dimendef\aa=0
+ \dimendef\ab=1
+ \dimendef\ba=2
+ \dimendef\bb=3
+ \dimendef\ra=4
+ \dimendef\rb=5
+ \dimendef\tmpa=6
+ \dimendef\tmpb=7
+ \edef\pgf@temp{#1}%
+ \expandafter\pgfutilsolvetwotwoleq@A\pgf@temp
+ \edef\pgf@temp{#2}%
+ \expandafter\pgfutilsolvetwotwoleq@r\pgf@temp
+ %
+ \pgfutilsolvetwotwoleq@ifislarger\aa\ba{%
+ % identity "permutation":
+ \def\Pa{a}%
+ \def\Pb{b}%
+ }{%
+ % permutation matrix: switch rows!
+ \def\Pa{b}%
+ \def\Pb{a}%
+ }%
+ % \pivot := 1/aa
+ \pgfmathreciprocal@
+ {\csname m\Pa a\endcsname}%
+ \let\pivot=\pgfmathresult
+ %
+ % \factor := 1/aa * ba
+ \csname \Pb a\endcsname=\pivot\csname \Pb a\endcsname
+ \edef\factor{\expandafter\pgf@sys@tonumber\csname \Pb a\endcsname}%
+ %
+ % bb -= ba/aa * ab
+ \tmpa=-\factor\csname \Pa b\endcsname
+ \advance\csname \Pb b\endcsname by\tmpa
+ %
+ % rb -= ba/aa * ra
+ \tmpa=-\factor\csname r\Pa\endcsname
+ \advance\csname r\Pb\endcsname by\tmpa
+ %
+ % xb := rb / bb (the modified rb and modified bb!)
+ \pgfmathdivide@
+ {\expandafter\pgf@sys@tonumber\csname r\Pb\endcsname}
+ {\expandafter\pgf@sys@tonumber\csname \Pb b\endcsname}%
+ \expandafter\let\csname pgfmathresult\Pb\endcsname=\pgfmathresult
+ %
+ % ra -= xb * ab
+ \tmpa=\csname pgfmathresult\Pb\endcsname\csname \Pa b\endcsname
+ \advance\csname r\Pa\endcsname by-\tmpa
+ %
+ % xa := 1/aa * ra (the modified ra!)
+ \tmpa=\pivot\csname r\Pa\endcsname
+ \expandafter\edef\csname pgfmathresult\Pa\endcsname{\pgf@sys@tonumber\tmpa}%
+ %
+ \edef\pgfmathresult{%
+ {\csname pgfmathresult\Pa\endcsname}%
+ {\csname pgfmathresult\Pb\endcsname}%
+ }%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\def\pgfutilsolvetwotwoleq@ifislarger#1#2#3#4{%
+ \tmpa=#1
+ \ifdim\tmpa<0pt
+ \multiply\tmpa by-1
+ \fi
+ \tmpb=#2
+ \ifdim\tmpb<0pt
+ \multiply\tmpb by-1
+ \fi
+ \ifdim\tmpa>\tmpb
+ #3%
+ \else
+ #4%
+ \fi
+}%
+\def\pgfutilsolvetwotwoleq@A#1#2#3#4{%
+ \def\maa{#1}\def\mab{#2}%
+ \def\mba{#3}\def\mbb{#3}%
+ \aa=#1pt \ab=#2pt
+ \ba=#3pt \bb=#4pt
+}
+\def\pgfutilsolvetwotwoleq@r#1#2{%
+ \ra=#1pt \rb=#2pt
+}%
+
+
+%%%%%%%
+%%%%%%%
+
+% from pgfmoduleshapes.code.tex:
+% Invoke an anchor
+\def\pgf@sh@reanchor#1#2{%
+ \pgfutil@ifundefined{pgf@anchor@#1@#2}%
+ {%
+ \pgfutil@ifundefined{pgf@anchor@generic@#2}{%
+ \pgfmathsetcounter{pgf@counta}{#2}%
+ \csname pgf@anchor@#1@border\endcsname{\pgfqpointpolar{\c@pgf@counta}{1pt}}%
+ }{%
+ \csname pgf@anchor@generic@#2\endcsname{#1}%
+ }%
+ }%
+ {\csname pgf@anchor@#1@#2\endcsname}%
+}
+
+% Defines a generic anchor, i.e. one which gets the associated shape
+% as first argument.
+%
+% #1: the anchor name.
+% #2: the code of the anchor. It may depend upon '##1', the shape's
+% name.
+%
+% The anchor will be defined locally in the current TeX scope.
+\def\pgfdeclaregenericanchor#1#2{%
+ \expandafter\def\csname pgf@anchor@generic@#1\endcsname##1{#2}%
+}%
+
+% from pgfcoretransformations.code.tex :
+\def\pgfgettransformentries#1#2#3#4#5#6{%
+ \edef#1{\pgf@pt@aa}%
+ \edef#2{\pgf@pt@ab}%
+ \edef#3{\pgf@pt@ba}%
+ \edef#4{\pgf@pt@bb}%
+ \edef#5{\the\pgf@pt@x}%
+ \edef#6{\the\pgf@pt@y}%
+}%
+\def\pgfsettransformentries#1#2#3#4#5#6{%
+ \pgfsettransform{{#1}{#2}{#3}{#4}{#5}{#6}}%
+}%
+
+% pgfutil@loop (from plain.tex)
+
+\def\pgfutil@loop#1\pgfutil@repeat{\def\pgfutil@body{#1}\pgfutil@iterate}
+\def\pgfutil@iterate{\pgfutil@body \let\pgfutil@next\pgfutil@iterate \else\let\pgfutil@next\relax\fi \pgfutil@next}
+\let\pgfutil@repeat=\fi % this makes \loop...\if...\repeat skippable
+
+\def\pgfqpointxy#1#2{%
+ \pgf@x=#1\pgf@xx%
+ \advance\pgf@x by #2\pgf@yx%
+ \pgf@y=#1\pgf@xy%
+ \advance\pgf@y by #2\pgf@yy}
+\def\pgfqpointxyz#1#2#3{%
+ \pgf@x=#1\pgf@xx%
+ \advance\pgf@x by #2\pgf@yx%
+ \advance\pgf@x by #3\pgf@zx%
+ \pgf@y=#1\pgf@xy%
+ \advance\pgf@y by #2\pgf@yy%
+ \advance\pgf@y by #3\pgf@zy}
+\def\pgfcoordinate#1#2{%
+ \edef\pgf@temp{#1}%
+ \ifx\pgf@temp\pgfutil@empty% do nothing
+ \else%
+ \pgf@process{\pgfpointtransformed{#2}}%
+ \expandafter\gdef\csname pgf@sh@ns@#1\endcsname{coordinate}%
+ \expandafter\xdef\csname pgf@sh@np@#1\endcsname{%
+ \noexpand\def\noexpand\centerpoint{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ }
+ \expandafter\gdef\csname pgf@sh@nt@#1\endcsname{{1}{0}{0}{1}{0pt}{0pt}}%
+ \expandafter\global\expandafter\let\csname pgf@sh@ma@#1\endcsname\pgfutil@empty%
+ \expandafter\gdef\csname pgf@sh@pi@#1\endcsname{\pgfpictureid}%
+ \fi%
+}
+% A "quick" variant of \pgfpointscale which doesn't invoke the math parser for '#1'.
+% #1 must be a number without units, no registers are accepted.
+\def\pgfqpointscale#1#2{%
+ \pgf@process{#2}%
+ \pgf@x=#1\pgf@x%
+ \pgf@y=#1\pgf@y%
+}
+% ======================================================
+
+\def\pgfutilensuremath#1{%
+ \ifmmode#1\else$#1$\fi
+}
+\def\tikzifinpicture#1#2{%
+ \pgfutil@ifundefined{filldraw}{#2}{#1}%
+}%
+
+\def\tikz@fig@scan@name(#1){%
+ \pgfkeysvalueof{/tikz/name/.@cmd}#1\pgfeov% CF : this is now ALWAYS consistent with 'name=' option; allows overrides.
+ \tikz@@scan@fig}%
+
+\tikzoption{ybar}[]{\let\tikz@plot@handler=\pgfplothandlerybar}
+\tikzoption{xbar}[]{\let\tikz@plot@handler=\pgfplothandlerxbar}
+\tikzoption{ybar interval}[]{\let\tikz@plot@handler=\pgfplothandlerybarinterval}
+\tikzoption{xbar interval}[]{\let\tikz@plot@handler=\pgfplothandlerxbarinterval}
+\tikzoption{const plot}[]{\let\tikz@plot@handler=\pgfplothandlerconstantlineto}
+\tikzoption{const plot mark left}[]{\let\tikz@plot@handler=\pgfplothandlerconstantlineto}
+\tikzoption{const plot mark right}[]{\let\tikz@plot@handler=\pgfplothandlerconstantlinetomarkright}
+\tikzoption{const plot mark mid}[]{\let\tikz@plot@handler=\pgfplothandlerconstantlinetomarkmid}
+\tikzoption{jump mark right}[]{\let\tikz@plot@handler=\pgfplothandlerjumpmarkright}
+\tikzoption{jump mark left}[]{\let\tikz@plot@handler=\pgfplothandlerjumpmarkleft}
+\tikzoption{jump mark mid}[]{\let\tikz@plot@handler=\pgfplothandlerjumpmarkmid}
+
+\def\tikz@plot@samples{25}
+\def\tikz@plot@domain{-5:5}
+\def\tikz@plot@var{\x}
+\def\tikz@plot@samplesat{-5,-4.5833333,...,5}
+
+\tikzoption{mark}{
+ \def\tikz@plot@mark{#1}%
+ \def\tikz@temp{none}% this check is relatively new
+ \ifx\tikz@temp\tikz@plot@mark
+ \let\tikz@plot@mark=\pgfutil@empty
+ \fi
+}
+
+% the 'pt' suffix is new:
+\pgfdeclareplotmark{ball}
+{%
+ \def\tikz@shading{ball}%
+ \shade (0pt,0pt) circle (\pgfplotmarksize);%
+}
+
+% the 'every mark' style is new:
+\tikzset{
+ no marks/.style={mark=none},%
+ every mark/.style={},
+ mark options/.style={%
+ every mark/.style={#1}%
+ }}
+\def\tikz@@@plot{%
+ \def\pgfplotlastpoint{\pgfpointorigin}%
+ \tikz@plot@handler%
+ \tikz@plot@data%
+ \global\let\tikz@@@temp=\pgfplotlastpoint%
+ \ifx\tikz@plot@mark\pgfutil@empty%
+ \else%
+ % Marks are drawn after the path.
+ \setbox\tikz@figbox=\hbox{%
+ \unhbox\tikz@figbox%
+ \hbox{{%
+ \pgfinterruptpath%
+ \pgfscope%
+ \let\tikz@options=\pgfutil@empty%
+ \let\tikz@transform=\pgfutil@empty%
+ \tikzset{every mark}%
+ \tikz@options%
+ \ifx\tikz@mark@list\pgfutil@empty%
+ \pgfplothandlermark{\tikz@transform\pgfuseplotmark{\tikz@plot@mark}}%
+ \else
+ \pgfplothandlermarklisted{\tikz@transform\pgfuseplotmark{\tikz@plot@mark}}{\tikz@mark@list}%
+ \fi
+ \tikz@plot@data%
+ \endpgfscope
+ \endpgfinterruptpath%
+ }}%
+ }%
+ \fi%
+ \global\setbox\tikz@tempbox=\copy\tikz@figbox%
+ %\global\let\tikz@after@path@smuggle=\tikz@after@path
+ \endgroup%
+ \setbox\tikz@figbox=\box\tikz@tempbox%
+ \tikz@make@last@position{\tikz@@@temp}%
+ %\expandafter\tikz@scan@next@command\tikz@after@path@smuggle%
+ \tikz@scan@next@command%
+}
+
+
+
+
+% ======================================================
+
+
+\newif\ifpgfmathcomparison
+
+% Assigns \pgfmathresult to 1.0 if #1 ~= #1.
+%
+% It will also set the boolean \ifpgfmathcomparison accordingly
+% (globally).
+\def\pgfmathapproxequalto#1#2{%
+ \edef\pgfmath@marshal{%
+ \noexpand\pgfmathparse{#2}
+ \noexpand\let\noexpand\pgfmath@arg\noexpand\pgfmathresult%
+ \noexpand\pgfmathparse{#1}%
+ }%
+ \pgfmath@marshal%
+ \pgfmathapproxequalto@{\pgfmathresult}{\pgfmath@arg}}
+\def\pgfmathapproxequalto@#1#2{%
+ \begingroup%
+ \pgfmath@x#1pt%
+ \pgfmath@y#2pt%
+ \advance\pgfmath@x-\pgfmath@y%
+ \ifdim\pgfmath@x<0pt
+ \multiply\pgfmath@x by-1
+ \fi
+ \ifdim\pgfmath@x<0.0001pt\relax%
+ \def\pgfmathresult{1.0}%
+ \global\pgfmathcomparisontrue
+ \else%
+ \def\pgfmathresult{0.0}%
+ \global\pgfmathcomparisonfalse
+ \fi%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup%
+}
+
+\newif\ifpgfmarktext@usetikznode
+\pgfkeys{
+ /pgf/text mark/.initial=p,
+ /pgf/text mark style/.initial=,
+ /pgf/text mark as node/.is if=pgfmarktext@usetikznode,
+ /pgf/text mark as node/.default=true,
+ %
+ % backw. compat: the extra search path confuses the '.unknown'
+ % handlers, so this here is deprecated:
+ /pgf/text mark/style/.style={/pgf/text mark style={#1}},%
+ /pgf/text mark/as node/.style={/pgf/text mark as node=#1},%
+}%
+
+\pgfdeclareplotmark{text}
+{
+ \pgfkeysgetvalue{/pgf/text mark style}\pgfmarktext@style
+ \pgfkeysgetvalue{/pgf/text mark}\pgfmarktext@
+ \ifpgfmarktext@usetikznode
+ \expandafter\node\expandafter[\pgfmarktext@style]{\pgfmarktext@};
+ \else
+ \expandafter\pgftext\expandafter[\pgfmarktext@style]{\pgfmarktext@}%
+ \fi
+}
+
+% A fix for the overlay option and matrices:
+\def\pgf@matrix@startcell{%
+ %
+ % Step 1: Init the list of nodes for this cell
+ %
+ \let\pgf@nodecallback=\pgf@matrix@nodecallback%
+ %
+ % Step 2: Setup the bounding box
+ %
+ \pgfinterruptboundingbox%
+ %
+ % Step 3: Reset the transformation matrix
+ %
+ \pgftransformreset%
+ %
+ % Step 4: Collect everything in a cell box
+ %
+ \setbox\pgf@matrix@cell=\hbox\bgroup\bgroup%
+ % make sure that cell pictures are not affected if matrizes have
+ % 'overlay' option on:
+ \pgf@relevantforpicturesizetrue
+ \pgfsys@beginpicture%
+ \normalbaselines%
+ % Find out whether the cell is empty:
+ \pgfutil@ifnextchar\let%
+ {% ok, candidate, check following symbol
+ \afterassignment\pgf@matrix@empty@check\let\pgf@matrix@temp=% get rid of \let
+ }%
+ {% no, not empty
+ \pgf@matrix@empty@cell@false%
+ \pgfmatrixbegincode%
+ }%
+}
+
+% From pgfmoduleplot.code.tex:
+{
+ \catcode`\%=12
+ \catcode`\"=12
+ \xdef\pgf@gnuplot@head@pgf@two@oo#1{set terminal table; set output "#1.table"; set format "%.5f"}
+ \ifx\pgf@gnuplot@head\pgf@gnuplot@head@pgf@two@oo
+ \xdef\pgf@gnuplot@head#1{set table "#1.table"; set format "%.5f"}
+ \else
+ \xdef\pgf@gnuplot@head{set table \noexpand\pgf@plottablefile@quoted; set format "%.5f"}
+ \fi
+}
+
+% From pgfcorescopes.code.tex:
+\def\pgfresetboundingbox{%
+ \global\pgf@picmaxx=-16000pt\relax%
+ \global\pgf@picminx=16000pt\relax%
+ \global\pgf@picmaxy=-16000pt\relax%
+ \global\pgf@picminy=16000pt\relax%
+}%
+
+% from pgfcorepathconstruct.code.tex:
+
+
+\def\pgfpatharctomaxstepsize{45}
+
+% A specialized arc operation for an arc on an (axis--parallel) ellipse.
+%
+% In contrast to \pgfpatharc, it explicitly interpolates start- and end points.
+%
+% In contrast to \pgfpatharcto, this routine is numerically stable and
+% quite fast since it relies on a lot of precomputed information.
+%
+% #1 center of ellipse
+% #2 angle of last path position inside of the ellipse
+% #3 end angle
+% #4 end point (a \pgfpoint)
+% #5 xradius
+% #6 yradius
+% #7 the ratio xradius/yradius of the ellipse
+% #8 the ratio yradius/xradius of the ellipse
+% Example:
+% \def\cx{1cm}% center x
+% \def\cy{1cm}% center y
+% \def\startangle{0}%
+% \def\endangle{45}%
+% \def\a{5cm}% xradius
+% \def\b{10cm}% yradius
+% \pgfmathparse{\a/\b}\let\abratio=\pgfmathresult
+% \pgfmathparse{\b/\a}\let\baratio=\pgfmathresult
+%
+% \pgfpathmoveto{\pgfpoint{\cx+\a*cos(\startangle)}{\cy+\b*sin(\startangle)}}%
+% \pgfpatharctoprecomputed
+% {\pgfpoint{\cx}{\cy}}
+% {\startangle}
+% {\endangle}
+% {\pgfpoint{\cx+\a*cos(\endangle)}{\cy+\b*sin(\endangle)}}%
+% {\a}
+% {\b}
+% {\abratio}
+% {\baratio}
+%
+\def\pgfpatharctoprecomputed#1#2#3#4#5#6#7#8{%
+ \begingroup
+ % Implementation idea:
+ %
+ % let
+ % m = center (#1)
+ % \gamma_0 = start angle
+ % \gamma_1 = end angle
+ % a = x radius
+ % b = y radius
+ %
+ % an axis parallel ellipse is parameterized by
+ % C(\gamma) = m + ( a cos(\gamma), b sin(\gamma) ), \gamma in [0,360].
+ %
+ % Now, consider the segment \gamma(t),
+ % \gamma:[0,1] -> [\gamma_0,\gamma_1],
+ % t -> \gamma_0 + t(\gamma_1 - \gamma_0)
+ % and
+ % C(\gamma(t)) which is defined on [0,1].
+ %
+ % I'd like to approximate the arc by one or more cubic bezier
+ % splines which interpolate through the last and first provided
+ % points.
+ %
+ % In general, a Bezier spline C:[0,1] -> \R of order n fulfills
+ % C'(0) = n ( P_1 - P_0 ),
+ % C'(1) = n ( P_n - P_{n-1} ).
+ % For n=3 and given P_0 and P_3, I can directly compute P_1 and P_2 once I know
+ % the derivatives at t=0 and t=1.
+ %
+ % The derivatives in our case are
+ % ( C \circ \gamma )'(t) = C'[\gamma(t)] * \gamma'(t)
+ % = ( -a pi/180 sin(\gamma(t)), b pi/180 cos(\gamma(t)) ) * (\gamma_1 - \gamma_0).
+ % The pi/180 comes into play since we are working with degrees.
+ %
+ % Expression (C\circ\gamma)'(0) using P_0 and (C \circ \gamma)'(1)
+ % using P_3 yields the expressions
+ % (C \circ \gamma)'(0) =
+ % pi/180 * (\gamma_1 - \gamma_0)* [ - a/b(P_0^y - my), b/a (P_0^x - mx) ]
+ % (C \circ \gamma)'(1) =
+ % pi/180 * (\gamma_1 - \gamma_0)* [ - a/b(P_3^y - my), b/a (P_3^x - mx) ]
+ %
+ % defining
+ % scaleA = a/b * pi / (3*180) * (\gamma_1 - \gamma_0)
+ % and
+ % scaleB = b/a * pi / (3*180) * (\gamma_1 - \gamma_0)
+ % yields the direct expressions for the intermediate bezier
+ % control points
+ %
+ % P_1 = [
+ % P_0^x - scaleA* ( P_0^y -my),
+ % P_0^y + scaleB* ( P_0^x -mx) ]
+ % and
+ % P_2 = [
+ % P_3^x + scaleA* ( P_3^y -my),
+ % P_3^y - scaleB* ( P_3^x -mx) ].
+ %
+ % This works fast, with few operations, if
+ % - a/b and b/a are known in advance
+ % - P_0 and P_3 are known in advance
+ % - \gamma_0 and \gamma_1 are known.
+ %
+ % It is also reliable if (\gamma_1 - \gamma_0) is small
+ %
+ \pgf@process{#1}%
+ \edef\pgfpath@center@x{\the\pgf@x}%
+ \edef\pgfpath@center@y{\the\pgf@y}%
+ \def\pgfpath@completearcend{#4}%
+ % compute scale (#3-#2) * pi/(3*180) = (#3 - #2) * pi/27 * 1/20
+ % splitting pi/(3*180) into two scales has higher TeX accuracy
+ \pgf@xa=#2pt
+ \pgf@xb=#3pt
+ \edef\pgfpath@startangle{#2pt}%
+ \edef\pgfpath@endangle{\pgf@sys@tonumber\pgf@xb}%
+ %
+ \pgf@ya=\pgf@xb
+ \advance\pgf@ya by-\pgf@xa
+ %
+ \ifx\pgfpatharctomaxstepsize\pgfutil@empty
+ \def\pgfpath@N{1}%
+ \pgf@xc=\pgf@ya
+ \else
+ \pgf@xc=\pgf@ya% compute N = floor((gamma_1 - gamma_0) / max) +1
+ \ifdim\pgf@xc<0pt
+ \multiply\pgf@xc by-1
+ \fi
+ \divide\pgf@xc by\pgfpatharctomaxstepsize\relax
+ \afterassignment\pgfutil@gobble@until@relax
+ \c@pgf@counta=\the\pgf@xc\relax
+ \advance\c@pgf@counta by1
+ \edef\pgfpath@N{\the\c@pgf@counta}%
+ %
+ \pgf@xc=\pgf@ya
+ \divide\pgf@xc by\c@pgf@counta
+ \fi
+ %
+ \edef\pgfpath@h{\pgf@sys@tonumber\pgf@xc}%
+ %
+%\message{pgfpathellipse: using N =\pgfpath@N\space spline points y0 = \pgfpath@startangle, y0+i*h, yN=\pgfpath@endangle, i=1,...,(\pgfpath@N-1), with h=\pgfpath@h\space mesh width (total arc angle \pgf@sys@tonumber\pgf@ya).}%
+ %
+ %
+ \pgf@xc=0.116355283466289\pgf@xc % pi/27
+ \divide\pgf@xc by20
+ \pgf@xa=#7\pgf@xc
+ \edef\pgfpath@scale@A{\pgf@sys@tonumber\pgf@xa}%
+ \pgf@xa=#8\pgf@xc
+ \edef\pgfpath@scale@B{\pgf@sys@tonumber\pgf@xa}%
+ %
+ % compute intermediate spline segments for
+ % i = 1,...,N-1
+ % this is a no-op for N=1.
+ \c@pgf@countd=1
+ \pgfutil@loop
+ \ifnum\c@pgf@countd<\pgfpath@N\relax
+ %
+ \pgf@xa=\pgfpath@startangle % compute \pgf@xa = y_0 + i*h
+ \pgf@xb=\pgfpath@h pt
+ \multiply\pgf@xb by\c@pgf@countd
+ \advance\pgf@xa by\pgf@xb
+ \edef\pgfpath@angle@i{\pgf@sys@tonumber\pgf@xa}%
+%\message{angle \the\c@pgf@countd: \pgfpath@angle@i...}%
+ %
+ \pgfpatharcofellipse@{%
+ \pgfpoint
+ {\pgfpath@center@x + #5*cos(\pgfpath@angle@i)}
+ {\pgfpath@center@y + #6*sin(\pgfpath@angle@i)}
+ }%
+ %
+ \advance\c@pgf@countd by1
+ \pgfutil@repeat
+ %
+ % compute final spline segment. It only differs insofar as the
+ % final point is already known explicitly and should be
+ % interpolated without additional math error.
+%\message{angle \pgfpath@N: \pgfpath@endangle...}%
+ \pgfpatharcofellipse@{\pgfpath@completearcend}%
+ \endgroup
+}%
+\def\pgfpatharcofellipse@#1{%
+ \begingroup
+ \pgf@process{#1}%
+ \edef\pgfpath@endpt{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ %
+ \pgfpathcurveto{
+ \begingroup
+ \global\pgf@x=\pgf@path@lastx
+ \global\pgf@y=\pgf@path@lasty
+ \pgf@xa=\pgf@x \advance\pgf@xa by-\pgfpath@center@x
+ \pgf@ya=\pgf@y \advance\pgf@ya by-\pgfpath@center@y
+ \global\advance\pgf@x by-\pgfpath@scale@A\pgf@ya
+ \global\advance\pgf@y by \pgfpath@scale@B\pgf@xa
+ \endgroup
+ }{%
+ \begingroup
+ \pgfpath@endpt
+ \pgf@xa=\pgf@x \advance\pgf@xa by-\pgfpath@center@x
+ \pgf@ya=\pgf@y \advance\pgf@ya by-\pgfpath@center@y
+ \global\advance\pgf@x by \pgfpath@scale@A\pgf@ya
+ \global\advance\pgf@y by-\pgfpath@scale@B\pgf@xa
+ \endgroup
+ }{%
+ \pgfpath@endpt
+ }%
+ \endgroup
+}
+
+% bugfix for pgf 2.10, pgfmathfunctions.basic.code.tex :
+%
+\newif\ifpgfmath@divide@period
+\def\pgfmathdivide@#1#2{%
+ \begingroup%
+ \pgfmath@x=#1pt\relax%
+ \pgfmath@y=#2pt\relax%
+ \let\pgfmath@sign=\pgfmath@empty%
+ \ifdim0pt=\pgfmath@y%
+ \pgfmath@error{You've asked me to divide `#1' by `#2', %
+ but I cannot divide any number by `#2'}%
+ \fi%
+ \afterassignment\pgfmath@xa%
+ \c@pgfmath@counta\the\pgfmath@y\relax%
+ \ifdim0pt=\pgfmath@xa%
+ \divide\pgfmath@x by\c@pgfmath@counta%
+ \else%
+ \ifdim0pt>\pgfmath@x%
+ \def\pgfmath@sign{-}%
+ \pgfmath@x=-\pgfmath@x%
+ \fi%
+ \ifdim0pt>\pgfmath@y%
+ \expandafter\def\expandafter\pgfmath@sign\expandafter{\pgfmath@sign-}%
+ \pgfmath@y=-\pgfmath@y%
+ \fi%
+ \ifdim1pt>\pgfmath@y%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgfmath@y}}%
+ \pgfmath@x=\pgfmath@sign\pgfmathresult\pgfmath@x%
+ \else%
+ \def\pgfmathresult{0}%
+ \pgfmath@divide@periodtrue%
+ \c@pgfmath@counta=0\relax%
+ \pgfmathdivide@@%
+ \pgfmath@x=\pgfmath@sign\pgfmathresult pt\relax%
+ \fi%
+ \fi%
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}
+\def\pgfmath@small@number{0.00002}
+\def\pgfmathdivide@@{%
+ \let\pgfmath@next=\relax%
+ \ifdim\pgfmath@small@number pt<\pgfmath@x%
+ \ifdim\pgfmath@small@number pt<\pgfmath@y%
+ \ifdim\pgfmath@y>\pgfmath@x%
+ \ifpgfmath@divide@period%
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult.}%
+ \pgfmath@divide@periodfalse%
+ \fi%
+ \pgfmathdivide@dimenbyten\pgfmath@y%
+ \ifdim\pgfmath@y>\pgfmath@x%
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult0}%
+ \fi%
+ \else%
+ \c@pgfmath@counta=\pgfmath@x%
+ \c@pgfmath@countb=\pgfmath@y%
+ \divide\c@pgfmath@counta by\c@pgfmath@countb%
+ \pgfmath@ya=\c@pgfmath@counta\pgfmath@y%
+ \advance\pgfmath@x by-\pgfmath@ya%
+ \def\pgfmath@next{%
+ \toks0=\expandafter{\pgfmathresult}%
+ \edef\pgfmathresult{\the\toks0 \the\c@pgfmath@counta}%
+ }%
+ \ifpgfmath@divide@period
+ \else
+ % we are behind the period. It may happen that the
+ % result is more than one digit - in that case,
+ % introduce special handling:
+ \ifnum\c@pgfmath@counta>9 %
+ \expandafter\pgfmathdivide@advance@last@digit\pgfmathresult CCCCC\@@
+ \advance\c@pgfmath@counta by-10 %
+ \ifnum\c@pgfmath@counta=0
+ \let\pgfmath@next=\relax
+ \fi
+ \fi
+ \fi
+ \pgfmath@next
+ \fi%
+ \let\pgfmath@next=\pgfmathdivide@@%
+ \fi%
+ \fi%
+ \pgfmath@next%
+}
+
+% advances the last digit found in the number. Any missing digits are
+% supposed to be filled with 'C'.
+\def\pgfmathdivide@advance@last@digit#1.#2#3#4#5#6#7\@@{%
+ \pgfmath@ya=\pgfmathresult pt %
+ \if#2C%
+ \pgfmath@xa=1pt %
+ \else
+ \if#3C%
+ \pgfmath@xa=0.1pt %
+ \else
+ \if#4C%
+ \pgfmath@xa=0.01pt %
+ \else
+ \if#5C%
+ \pgfmath@xa=0.001pt %
+ \else
+ \if#6C%
+ \pgfmath@xa=0.0001pt %
+ \else
+ \pgfmath@xa=0.00001pt %
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \advance\pgfmath@ya by\pgfmath@xa
+ \edef\pgfmathresult{\pgfmath@tonumber@notrailingzero\pgfmath@ya}%
+}%
+
+{
+\catcode`\p=12
+\catcode`\t=12
+\gdef\Pgf@geT@NO@TRAILING@ZERO#1.#2pt{%
+ #1.%
+ \ifnum#2=0 \else #2\fi
+}
+}
+\def\pgfmath@tonumber@notrailingzero#1{\expandafter\Pgf@geT@NO@TRAILING@ZERO\the#1}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex
new file mode 100644
index 0000000000..dc36ce9277
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex
@@ -0,0 +1,567 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Do 31. Dez 19:01:21 CET 2015 %%%
+
+
+
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/basiclayer/pgfcoreexternal.code.tex,v 1.22 2015/08/29 10:15:21 cfeuersaenger Exp $
+
+
+
+\newif\ifpgfexternal@aux@in@dpth
+\newif\ifpgfexternal@info
+
+\pgfkeys{
+ /pgf/images/include external/.code={\pgfimage{#1}},
+ /pgf/images/aux in dpth/.is if=pgfexternal@aux@in@dpth,
+ /pgf/images/aux in dpth/.default=true,
+ /pgf/images/trim external/.code n args={4}{%
+ \def\pgf@external@kern@left{#1}%
+ \def\pgf@external@kern@bottom{#2}%
+ \def\pgf@external@kern@right{#3}%
+ \def\pgf@external@kern@top{#4}%
+ \ifx\pgf@external@kern@left\pgfutil@empty\def\pgf@external@kern@left{0sp}\fi%
+ \ifx\pgf@external@kern@bottom\pgfutil@empty\def\pgf@external@kern@bottom{0sp}\fi%
+ \ifx\pgf@external@kern@right\pgfutil@empty\def\pgf@external@kern@right{0sp}\fi%
+ \ifx\pgf@external@kern@top\pgfutil@empty\def\pgf@external@kern@top{0sp}\fi%
+ },
+ /pgf/images/trim external={1truein}{1truein}{1truein}{1truein},
+ /pgf/images/external info/.is if=pgfexternal@info,
+ /pgf/images/external info/.default=true,
+}
+
+% The external read/write mechanism is used as follows:
+%
+% In your document, you put a number or all of your pgfpicture (or
+% tikzpicture) environments inside a pair of \beginpgfexternal and
+% \endpgfexternal. The \beginpgfexternal gets one parameter called the
+% graphics name.
+%
+% Once this is done, the next step is to declare the names of your
+% graphics in the document at the beginning using the
+% \pgfdeclaregraphicname command.
+%
+% Now, when you typeset your document, each time a \beginpgfexternal
+% command is encountered, it will be checked whether the corresponding
+% graphics file exists. If this is the case, it will be included and
+% the code between \beginpgfexternal and \endpgfexternal is
+% ignored. Otherwise, the code is executed normally.
+%
+% Things change when you run tex on your file with the \jobname set to
+% the name of a decalred graphics name. In this case, only your
+% graphic will be typeset, the rest of the document will be "thrown away".
+% To be more precise, everything is gobbled up to the beginning
+% of the first \beginpgfexternal with the given graphics name. Then,
+% the content of the "environment" is put in a box (this "environment"
+% need not contain a graphics, it may contain anything that can be put
+% in a box). Then a single page is output whose size is exactly the
+% size of the picture.
+%
+% So, once you have run tex repeatedly, each time with the jobname set
+% to each of the graphics, you can then run tex on the whole document
+% and this will cause all graphics to be included rather than begin
+% typeset.
+%
+% Finally, once all the graphics have been created, you can also say
+% \input pgfexternal.tex instead of including pgf/TikZ.
+
+
+\newif\ifpgfexternalreadmainaux
+\pgfexternalreadmainauxtrue
+
+% Tells pgf which jobname is the name of the real file
+%
+% #1 = name
+%
+% Description:
+%
+% This command is used to tell pgf that the file named #1 should be
+% typeset normally. If \jobname is not equal to #1, only
+% the graphic called \jobname will be typeset.
+%
+% Example:
+%
+% \pgfrealjobname{survey}
+%
+% Note that afterwards, \jobname will be set to the argument. In our
+% example, \jobname will be 'survey'. This is to accomplish
+% compatibility with aux-file generation.
+
+\def\pgfrealjobname#1{%
+ \global\let\pgfactualjobname=\jobname
+ \edef\pgf@tempa{\expandafter\string\csname #1\endcsname}%
+ \edef\pgf@tempb{\expandafter\string\csname\jobname\endcsname}%
+ \ifx\pgf@tempa\pgf@tempb%
+ \else%
+ \pgf@external@grabshipouttrue%
+ \pgfexternal@nofiles% see also \pgf@external@init@aux@in@dpth
+ \ifpgfexternalreadmainaux
+ % and reset the jobname. This should allow to handle any
+ % \label/\ref constructions which are stored in \jobname.aux (and
+ % which won't be found otherwise)
+ \gdef\jobname{#1}%
+ \fi
+ \ifpgfexternal@aux@in@dpth
+ \csname newwrite\endcsname\w@pgfexternal@auxout
+ \fi
+ \pgfexternal@geometry@compatibility
+ \fi%
+ \gdef\pgfrealjobname##1{}% avoid multiple calls.
+}
+
+\def\pgfexternal@geometry@compatibility{%
+ % check if \usepackage{geometry} is loaded:
+ \pgfutil@ifundefined{geometry}{%
+ }{%
+ % The geometry package hooks into \begin{document}, evaluates
+ % its driver -- and generates \special instructions to set the
+ % paper size.
+ %
+ % Unfortunately, this confuses dvips utterly - and perhaps
+ % other drivers as well.
+ %
+ % Thus, if we currently about to generate some external
+ % graphics, we WANT to disable geometry (it has no purpose in
+ % this context anyway).
+ %
+ % This here works well:
+ \immediate\write16{Package TikZ externalization: calling \string\geometry{driver=none} during externalization.^^J}%
+ \geometry{driver=none}%
+ }%
+}%
+
+\def\pgfexternal@nofiles{%
+ % replace \relax. The \nofiles macros does
+ % \let\makeglossary=\relax
+ % but the glossary.sty calls \renewcommand\makeglossary (which
+ % will fail if \makeglossary=\relax). Stupid, but it works.
+ \let\pgfexternal@nofiles@=\relax
+ \def\relax{\relax}%
+ %
+ % suppress generation of LaTeX .aux, .toc etc files.
+ % generation of these files is not thread-safe.
+ % the \csname \endcsname yields \relax if \nofiles doesn't exist.
+ \csname nofiles\endcsname
+ %
+ \let\relax=\pgfexternal@nofiles@
+}%
+
+\newif\ifpgf@external@grabshipout
+\newbox\pgfexternal@startupbox
+
+\pgfutil@ifundefined{AtBeginDocument}{}{%
+ \AtBeginDocument{%
+ \ifpgf@external@grabshipout%
+ \global\let\pgfexternal@originalshipout=\shipout%
+ \global\def\shipout{\setbox\pgfpic=}%
+ \maxdeadcycles=10000%
+ % Ok, gather everything we have seen up to now in a box. This box
+ % will contain any specials that have been used.
+ {%
+ \output{\global\setbox\pgfexternal@startupbox=\vbox{\csname @begindvi\endcsname\unvbox255}}%
+ \hbox{}\eject%
+ }%
+ \fi%
+ }
+}%
+
+\pgfutil@ifundefined{AtEndDocument}{}{%
+ \AtEndDocument{%
+ \ifpgf@external@grabshipout
+ \pgfutil@ifundefined{pgfexternal@did@a@shipout}{%
+ \pgfexternal@error@no@shipout
+ }{}%
+ \fi
+ }%
+}
+
+% This will be overwritten by the tikz external lib if it is loaded.
+\def\pgfexternal@error@no@shipout{%
+ \pgferror{Sorry, image externalization failed: the resulting image was EMPTY. I tried to externalize '\pgfactualjobname'. Perhaps there was a typo somewhere? Please check that your document contains '\string\beginpgfgraphicnamed{\pgfactualjobname} ... \string\endpgfgraphicnamed'}%
+}%
+
+
+% "Environment" for an external graphic.
+%
+% #1 = graphic name
+%
+% Example:
+%
+% \beginpgfgraphicnamed{main-graphic2}
+% \begin{tikzpicture}
+% ...
+% \end{tikzpicture}
+% \endpgfgraphicnamed
+
+\def\pgf@externalbegin#1{%
+ % First, check whether we wish to grab this graphic:
+ \let\pgf@next=\pgf@external@normal%
+ \ifpgf@external@grabshipout%
+ \edef\pgf@tempa{\expandafter\string\csname #1\endcsname}%
+ \edef\pgf@tempb{\expandafter\string\csname\pgfactualjobname\endcsname}%
+ \ifx\pgf@tempa\pgf@tempb%
+ \let\pgf@next=\pgf@external@grab%
+ \fi%
+ \fi%
+ \pgf@next{#1}%
+}
+
+
+\AtBeginDocument{
+ \let\beginpgfgraphicnamed=\pgf@externalbegin% overwrite definition of pgfexternal.tex if necessary
+ \let\endpgfgraphicnamed=\unskip
+}
+
+
+% Normal operation: Include an external graphic instead of the
+% picture, if such an external picture exists.
+\def\pgf@external@normal#1{%
+ \let\pgf@filename=\pgfutil@empty%
+ \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#1}%
+ \ifx\pgf@filename\pgfutil@empty%
+ % Ok, no such image... Just typeset the picture normally.
+ \let\pgf@next=\relax%
+ \else%
+ \let\pgf@next=\pgf@replacepicturebygraphic%
+ \fi%
+ \pgf@next%
+}
+
+\long\def\pgf@replacepicturebygraphic#1\endpgfgraphicnamed{%
+ \expandafter\pgfincludeexternalgraphics\expandafter{\pgf@filename}\unskip
+}
+
+% This is almost the same as \includegraphics{#1}, but it checks
+% whether '#1.dpth' exists. In such case, it restores the boxes depth
+% stored in #1.dpth.
+%
+% Furthermore, the .dpth file may contain .aux related information
+% collected for the external graphics (references). They start after
+% the first line (if any).
+\def\pgfincludeexternalgraphics#1{%
+ \begingroup
+ \pgfexternalreaddpth{#1}%
+ \pgfkeysifdefined{/pgf/images/include external/#1/.@cmd}{%
+ \pgfkeysgetvalue{/pgf/images/include external/#1/.@cmd}\pgf@tempa
+ \pgfkeyslet{/pgf/images/include external/.@cmd}\pgf@tempa
+ }{}%
+ \setbox1=\hbox{\pgfkeysvalueof{/pgf/images/include external/.@cmd}{#1}\pgfeov}%
+ \ifdim\pgfexternaltrimleft=0sp \else \kern\pgfexternaltrimleft\relax \fi
+ \ifdim\pgfexternaldepth=0pt
+ \box1
+ \else
+ \dimen0=\pgfexternaldepth\relax
+ \hbox{\lower\dimen0 \box1 }%
+ \fi
+ \ifdim\pgfexternaltrimright=0sp \else \kern\pgfexternaltrimright\relax \fi
+ \endgroup
+}
+
+% Reads the .dpth file which contains meta data of the external
+% picture.
+%
+% This command handles the following stuff:
+% - it defines \pgfexternaldepth . The macro contains the contents of
+% a line which does not start with a control sequence (for example a
+% line containing '50pt')
+% - it defines \pgfexternaltrimleft and \pgfexternaltrimright
+% - it checks if the .dpth file contains content stored by means of
+% \pgfexternalstorecommand. If so, the argument of
+% \pgfexternalstorecommand will be restored.
+% - anything else will be appended to the main .aux file, assuming that
+% it contains \label or \ref information (only if the LaTeX switch
+% \if@filesw is \iftrue).
+%
+%
+% #1: the image file name (such that #1.dpth exists)
+\def\pgfexternalreaddpth#1{%
+ % no \begingroup. Handle that manually:
+ \edef\pgfexternalreaddpth@restore{%
+ \noexpand\endlinechar=\the\endlinechar\space
+ \noexpand\catcode`\noexpand\@=\the\catcode`\@\space
+ }%
+ %
+ \def\pgfexternaldepth{0sp}%
+ \def\pgfexternaltrimleft{0sp}%
+ \def\pgfexternaltrimright{0sp}%
+ \endlinechar=-1 % suppress white space at end
+ \catcode`\@=11
+ \openin\r@pgf@reada=#1.dpth
+ \pgfincludeexternalgraphics@read@dpth
+ %
+ \pgfexternalreaddpth@restore
+}%
+%
+% The .dpth consists of 0-N lines, where each is either a single
+% dimension (the box' depth) or something which belongs to the .aux
+% file (such lines will always start with a macro).
+\def\pgfincludeexternalgraphics@read@dpth{%
+ \ifeof\r@pgf@reada
+ \closein\r@pgf@reada
+ \else
+ \read\r@pgf@reada to\pgfincludeexternalgraphics@auxline
+ \ifx\pgfincludeexternalgraphics@auxline\pgfutil@empty
+ \else
+ \expandafter\pgfincludeexternalgraphics@read@dpth@line\pgfincludeexternalgraphics@auxline\pgfincludeexternalgraphics@read@dpth@line@EOI
+ \fi
+ \expandafter\pgfincludeexternalgraphics@read@dpth
+ \fi
+}%
+
+\def\pgfexternal@restore#1{#1}%
+
+\long\def\pgfincludeexternalgraphics@read@dpth@line@getfirst#1#2\pgfincludeexternalgraphics@read@dpth@line@EOI{%
+ \def\pgf@first{#1}%
+}%
+\long\def\pgfincludeexternalgraphics@read@dpth@line#1\pgfincludeexternalgraphics@read@dpth@line@EOI{%
+ \pgfincludeexternalgraphics@read@dpth@line@getfirst#1\pgfincludeexternalgraphics@read@dpth@line@EOI
+ \expandafter\ifcat\expandafter\noexpand\pgf@first\relax
+ % Ah -- the first token is a control sequence. It belongs to
+ % the .aux file.
+ %
+ \expandafter\ifx\pgf@first\pgfexternal@restore
+ % if the first line in the .dpth file starts with the
+ % magic string \pgfexternal@restore, the complete line
+ % will be executed as-is. Example:
+ % \pgfexternal@restore{\def\somevalue{1}}
+ #1%
+ \else
+ % do NOT execute #1! many LaTeX commands don't support it (\label for example)
+ \pgfutil@ifundefined{if@filesw}{%
+ % sorry, .aux file support only for latex
+ }{%
+ % append to main .aux file (for forward references)
+ \if@filesw
+ {%
+ \toks0={#1}%
+ % believe it or not, but the
+ % \def\dpthimport{...}\dpthimport *makes* a
+ % difference! In ensures any occuring `##' characters are properly expanded to `#'.
+ \immediate\write\@auxout{%
+ \noexpand\def\noexpand\dpthimport{\the\toks0}\noexpand\dpthimport}%
+ }%
+ \fi
+ }%
+ \fi
+ \else% it is the depth (which is simply a number for backwards compatibility)
+ \def\pgfexternaldepth{#1}%
+ \fi
+}%
+
+% Stores '#1' (expanded!) into the .dpth file of the currently
+% exported image.
+%
+% This command has only an effect if an image is being exported.
+%
+% The stored contents will be read in the context where
+% /pgf/images/include external is active (i.e. by
+% \pgfexternalreaddpth).
+%
+\def\pgfexternalstorecommand#1{%
+}%
+\def\pgfexternalstorecommand@isexporting#1{%
+ \immediate\write\w@pgfexternal@auxout{\noexpand\pgfexternal@restore{#1}}%
+}%
+
+
+
+% Grab operation: If jobname matches the graphic name, typeset this
+% picture normall.
+% REMARK:
+% this method is also invoked from within the tikz external library.
+\def\pgf@external@grab#1{%
+ \def\pgf@filename{#1}%
+ \ifpgfexternal@aux@in@dpth
+ \begingroup
+ \pgf@external@init@aux@in@dpth
+ \let\G@refundefinedtrue=\pgf@external@grab@refundefinedtrue
+ \fi
+ \gdef\pgf@trimleft@final{0sp}%
+ \gdef\pgf@trimright@final{0sp}%
+ \setbox\pgfpic=\hbox\bgroup\bgroup%
+ \let\endpgfgraphicnamed=\pgf@externalend%
+}
+
+{\catcode`\^=12 \gdef\pgfexternal@hat{^}}
+
+\expandafter\let\expandafter\pgf@external@grab@refundefinedtrue@orig\csname G@refundefinedtrue\endcsname
+
+\def\pgf@external@grab@refundefinedtrue{%
+ \pgf@external@grab@refundefinedtrue@orig
+ \begingroup
+ \def\n{\pgfexternal@hat\pgfexternal@hat J}%
+ \pgfexternalstorecommand{%
+ \pgf@external@grab@refundefinedtrue@code
+ \noexpand\immediate\noexpand\write16{\pgf@external@grab@refundefinedtrue@warning}%
+ \noexpand\G@refundefinedtrue
+ }%
+ \endgroup
+}%
+
+% A hook. will be overwritten by \usetikzlibrary{external}
+\def\pgf@external@grab@refundefinedtrue@code{}
+
+\def\pgf@external@grab@refundefinedtrue@warning{%
+ LaTeX Warning: External picture `\pgfactualjobname' contains undefined references\noexpand\on@line.\n
+}%
+
+\let\pgf@external@@protected@write@orig=\protected@write
+\long\def\pgf@external@@protected@write@immediate#1#2#3{%
+ \begingroup
+ \let\pgf@write@=\write
+ \def\write{\noexpand\immediate\pgf@write@}%
+ \pgf@external@@protected@write@orig{#1}{#2}{#3}%
+ \endgroup
+}%
+
+\def\pgf@external@init@aux@in@dpth{%
+ \let\pgfexternalstorecommand=\pgfexternalstorecommand@isexporting
+ %
+ % tell LaTeX to write aux files...
+ \csname @fileswtrue\endcsname
+ % ... but redirect output to the .dpth file!
+ \immediate\openout\w@pgfexternal@auxout=\pgf@filename.dpth
+ \let\@auxout=\w@pgfexternal@auxout
+ % ... and disable the correct page numbers. I can't get that
+ % (because the correct page number is only available in the
+ % shipout routine). Use immediate output:
+ \let\protected@write=\pgf@external@@protected@write@immediate
+}%
+
+\def\pgf@externalend@storeshifts#1{%
+ \immediate\write#1{\the\dp\pgfpic}% store the depth simply as number for backw. compat.
+ \ifx\pgf@trimleft@final\pgfutil@empty\else
+ \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternaltrimleft{\pgf@trimleft@final}}}%
+ \fi
+ \ifx\pgf@trimright@final\pgfutil@empty\else
+ \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternaltrimright{\pgf@trimright@final}}}%
+ \fi
+ \ifpgfexternal@info
+ \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternalwidth{\the\wd\pgfpic}}}%
+ \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternalheight{\the\dimen0}}}%
+ \fi
+}
+% REMARK:
+% this method is also invoked from within the tikz external library.
+\def\pgf@externalend{%
+ \unskip\egroup\egroup%
+ {%
+ \def\pgf@external@trim{0}%
+ \def\pgf@external@store@dpth{0}%
+ %
+ \ifpgf@trim@lowlevel
+ \gdef\pgf@trimleft@final{}%
+ \gdef\pgf@trimright@final{}%
+ \else
+ \ifdim\pgf@trimleft@final=0sp \gdef\pgf@trimleft@final{} \else\def\pgf@external@trim{1}\fi
+ \ifdim\pgf@trimright@final=0sp \gdef\pgf@trimright@final{} \else\def\pgf@external@trim{1}\fi
+ \if1\pgf@external@trim
+ % UNDO the trimming! export to pdf doesn't supported trimmed
+ % bounding boxes (has to do with the mediabox/trimbox etc).
+ % I'll keep the bounding box intact and store the trim information
+ % into the .dpth file.
+ \setbox\pgfpic=\hbox{%
+ \ifx\pgf@trimleft@final\pgfutil@empty\else\kern-\pgf@trimleft@final\fi
+ \box\pgfpic
+ \ifx\pgf@trimright@final\pgfutil@empty\else\kern-\pgf@trimright@final\fi
+ }%
+ \def\pgf@external@store@dpth{1}%
+ \fi
+ \fi
+ %
+ \parindent0pt % leave the space
+% \leftmargin0pt%
+% \rightmargin0pt%
+ \hoffset=0pt % reset to default
+ \voffset=0pt
+ \dimen0\ht\pgfpic%
+ \advance\dimen0\dp\pgfpic%
+ \ifdim\dp\pgfpic=0pt\relax
+ \else% store the picture's depth. Otherwise, it would be lost.
+ \def\pgf@external@store@dpth{1}%
+ \fi
+ \ifpgfexternal@info
+ \def\pgf@external@store@dpth{1}%
+ \fi
+ %
+ \if1\pgf@external@store@dpth
+ \ifpgfexternal@aux@in@dpth
+ \pgf@externalend@storeshifts\@auxout
+ \immediate\closeout\@auxout
+ \else
+ \immediate\openout\pgf@plotwrite=\pgf@filename.dpth
+ \pgf@externalend@storeshifts\pgf@plotwrite
+ \immediate\closeout\pgf@plotwrite
+ \fi
+ \fi
+ \pgfsys@prepare@papersize{\the\wd\pgfpic}{\the\dimen0}%
+ %
+ \setbox0=\vbox{%
+ % I admit that I don't know why there is this kerning:
+ \kern -\pgf@external@kern@top\relax%
+ \hbox{%
+ \kern -\pgf@external@kern@left\relax%
+ \hbox to0pt{%
+ \wd\pgfexternal@startupbox=0pt %
+ \ht\pgfexternal@startupbox=0pt %
+ \dp\pgfexternal@startupbox=0pt %
+ \box\pgfexternal@startupbox%
+ \pgfsys@atbegindocument\hss}%
+ \box\pgfpic%
+ \kern\pgf@external@kern@right\relax%
+ }%
+ \kern\pgf@external@kern@bottom\relax%
+ }%
+ %
+ % compatibility with eso-pic package: \nointerlineskip is not
+ % allowed here, but the eso-pic package uses \nointerlineskip in
+ % its shipout routine.
+ \let\pgfexternal@nointerlineskip@orig=\nointerlineskip
+ \let\nointerlineskip=\pgfexternal@nointerlineskip
+ %
+ \pgfexternal@originalshipout\box0 %
+ \gdef\pgfexternal@did@a@shipout{1}%
+ }%
+ \ifpgfexternal@aux@in@dpth
+ \endgroup
+ \fi
+}
+
+\def\pgfexternal@nointerlineskip{%
+ \ifvmode
+ \pgfexternal@nointerlineskip@orig
+ \else
+ \relax% \nointerlineskip in horizontal mode not allowed. Silently ignore the error message.
+ \fi
+}%
+
+\endinput
+% vi: tabstop=4 shiftwidth=2 expandtab
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreimage.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreimage.code.tex
new file mode 100644
index 0000000000..1079776c07
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcoreimage.code.tex
@@ -0,0 +1,584 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Mon Mar 22 16:42:03 CET 2010 %%%
+
+
+
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/basiclayer/pgfcoreimage.code.tex,v 1.14 2010/03/19 09:50:32 ludewich Exp $
+
+
+
+% Declare an image
+%
+% #1 = optional argument: width, height, page specification
+% #2 = name of the image for later use
+% #4 = filename without extension, automatic extensions are .pdf,
+% .jpg, and .png for PDF and .ps, .eps, .epsi for postscript.
+%
+% Description:
+%
+% This command declares an image file for later use. Even if the image
+% is used several times in the document, in PDF it will only be stored
+% once.
+%
+% Example:
+%
+% \pgfdeclareimage[width=2cm,page=2]{myimage}{imagefilename}
+
+\def\pgfdeclareimage{\pgfutil@ifnextchar[{\pgf@declareimage}{\pgf@declareimage[]}}
+\def\pgf@declareimage[#1]#2#3{%
+ \pgfqkeys{/pgf/images}{height=,width=,page=,interpolate=false,mask=,#1}%
+ % Try to find the file
+ \gdef\pgf@filename{}%
+ % If page= parameter is not empty, try that file first:
+ \ifx\pgf@imagepage\pgfutil@empty%
+ \else%
+ \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#3.page\pgf@imagepage}%
+ \fi%
+ \ifx\pgf@filename\pgfutil@empty%
+ \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#3}%
+ \else%
+ \pgfkeys{/pgf/images/page=}% make page empty
+ \fi%
+ \ifx\pgf@filename\pgfutil@empty%
+ \PackageWarning{pgf}%
+ {File "#3" not found when defining image "#2".\MessageBreak
+ Tried all extensions in "\pgfsys@imagesuffixlist"}%
+ \pgf@declaredraftimage{#2}{#3}%
+ \else%
+ \ifpgf@draftmode%
+ \pgf@declaredraftimage{#2}{#3}%
+ \else%
+ \pgfsys@defineimage%
+ \fi%
+ \fi%
+ \expandafter\global\expandafter\let\csname pgf@image@#2!\endcsname=\pgf@image%
+}
+
+\newif\ifpgfexternal@allow@aux
+
+\pgfkeys{
+ /pgf/images/include external/.code={\pgfimage{#1}},
+ /pgf/images/aux in dpth/.is if=pgfexternal@allow@aux,
+ /pgf/images/aux in dpth/.default=true,
+ /pgf/images/draft/.is if=pgf@draftmode,
+ /pgf/images/draft/.default=true}
+\pgfkeys{/pgf/images/width/.estore in=\pgf@imagewidth}
+\pgfkeys{/pgf/images/height/.estore in=\pgf@imageheight}
+\pgfkeys{/pgf/images/page/.estore in=\pgf@imagepage}
+\pgfkeys{/pgf/images/interpolate/.cd,.code=\edef\pgf@imageinterpolate{#1},.default=true}
+\pgfkeys{/pgf/images/mask/.code=%
+ {%
+ \edef\pgf@imagemask{#1}%
+ \ifx\pgf@imagemask\pgfutil@empty%
+ \else%
+ \pgfutil@ifundefined{pgf@mask@#1}%
+ {\PackageError{pgf}{Undefined mask "#1".}{}%
+ \edef\pgf@imagemask{}}%
+ {\edef\pgf@imagemask{\csname pgf@mask@#1\endcsname}%
+ }%
+ \fi%
+ }}
+
+
+\def\pgf@findfile#1:#2+#3{%
+ \pgfutil@IfFileExists{#3#1}%
+ {\xdef\pgf@filename{#3#1}}%
+ {\def\pgf@mightbeempty{#2}%
+ \ifx\pgf@mightbeempty\pgfutil@empty\else%
+ \pgf@findfile#2+{#3}%
+ \fi}}
+
+% #1: image name
+% #2: file name
+\def\pgf@declaredraftimage#1#2{%
+ \ifx\pgf@imagewidth\pgfutil@empty%
+ \PackageWarning{pgf}{Missing width for image "#1" ("#2") in draft mode.\MessageBreak Using 1cm instead}%
+ \edef\pgf@imagewidth{1cm}%
+ \fi%
+ \ifx\pgf@imageheight\pgfutil@empty%
+ \PackageWarning{pgf}{Missing height for image "#1" ("#2") in draft mode.\MessageBreak Using 1cm instead}%
+ \edef\pgf@imageheight{1cm}%
+ \fi%
+ \ifx\pgf@imagepage\pgfutil@empty\else\edef\pgf@imagepagetext{ page \pgf@imagepage}\fi%
+ \edef\pgf@image{%
+ \hbox to \pgf@imagewidth{%
+ \vrule\kern-0.4pt%
+ \vbox to \pgf@imageheight{%
+ \hrule\vfil%
+ \hbox to \pgf@imagewidth{\hskip-10cm\hfil\noexpand\tiny#2\pgf@imagepage\hfil\hskip-10cm}%
+ \vfil\hrule}%
+ \kern-0.4pt\vrule}%
+ }%
+}
+
+
+
+% Declare a soft mask
+%
+% #1 = optional argument: matte specification. default matte is
+% white.
+% #2 = name of the mask for later use
+% #3 = filename without extension, automatic extensions are .pdf,
+% .jpg, and .png for PDF. Postscript is not supported.
+%
+% Description:
+%
+% This command declares a soft mask for later masking an image. The
+% declared mask should be used together with an image of exactly the
+% same height/width if matte is defined. Matte should be the
+% preblended background color (see pdf spec for details).
+%
+% Example:
+%
+% \pgfdeclaremask[matte=white]{maskname}{maskfilename}
+% \pgfdeclareimage[mask=maskname]{image}{imagefilename}
+
+\def\pgfdeclaremask{\pgfutil@ifnextchar[\pgf@declaremask{\pgf@declaremask[]}}
+\def\pgf@declaremask[#1]#2#3{%
+ \pgfqkeys{/pgf/images/mask}{matte={1 1 1},#1}% defaults
+ \def\pgf@mask{}%
+ % Try to find the file
+ \gdef\pgf@filename{}%
+ \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#3}%
+ \ifx\pgf@filename\pgfutil@empty%
+ \PackageWarning{pgf}%
+ {File "#3" not found when defining mask "#2".\MessageBreak
+ Tried all extensions in "\pgfsys@imagesuffixlist"}%
+ \else%
+ \pgfsys@definemask{#2}%
+ \fi%
+ \expandafter\global\expandafter\let\csname pgf@mask@#2\endcsname=\pgf@mask%
+}
+
+\pgfkeys{/pgf/images/mask/matte/.cd,.estore in=\pgf@maskmatte,.value required}
+
+
+
+% Create an alias name for an image
+%
+% #1 = name of the alias
+% #2 = name of the original
+%
+% Example:
+%
+% \pgfdeclareimage{image}{1cm}{1cm}{filename
+% \pgfaliasimage{alias}{image}
+% \pgfuseimage{alias}
+
+\def\pgfaliasimage#1#2{%
+ \expandafter\global\expandafter\let\expandafter\pgf@temp\expandafter=\csname pgf@image@#2!\endcsname%
+ \expandafter\global\expandafter\let\csname pgf@image@#1!\endcsname=\pgf@temp%
+ }
+
+
+% Use an image
+%
+% #1 = name of a previously declared image
+%
+% Example:
+%
+% \pgfputat{\pgforigin}{\pgfbox[left,base]{\pgfuseimage{myimage}}}
+
+\def\pgfuseimage#1{%
+ \def\pgf@imagename{pgf@image@#1}%
+ \pgf@tryextensions{\pgf@imagename}{\pgfalternateextension}%
+ \expandafter\pgfutil@ifundefined\expandafter{\pgf@imagename}%
+ {\PackageError{pgf}{Undefined image "#1"}{}}%
+ {{\leavevmode\csname\pgf@imagename\endcsname}}}
+
+\def\pgf@tryextensions#1#2{%
+ \edef\pgf@args{[#2!]}\expandafter\pgf@@tryextensions\pgf@args{#1}}
+\def\pgf@@tryextensions[#1!#2]#3{%
+ \expandafter\pgfutil@ifundefined\expandafter{#3#1!#2}%
+ {\def\pgf@temp{#2}%
+ \ifx\pgf@temp\pgfutil@empty%
+ \edef#3{#3!}%
+ \else%
+ \pgf@@tryextensions[#2]{#3}%
+ \fi}%
+ {\edef#3{#3#1!#2}}}
+
+
+% Alternate image
+%
+% Description:
+%
+% When an image is used, pgf first attempts to use the image with the
+% alternate extension added. If this fails, the original image is
+% used. If the alternate extension contains ``!'', then the text up to
+% the ! is successively removed and the remainder is tried as an
+% alternate extension.
+%
+% Example:
+%
+% \def\pgfalternateextension{20!white}
+
+\def\pgfalternateextension{}
+
+
+
+% Directly insert an image
+%
+% #1 = optional argument: width, height, page specification
+% #2 = file name
+%
+% Description:
+%
+% Directly inserts an image without declaration. You can, however,
+% still access this image using the name pgflastimage. By using
+% pgfaliasimage, you can also save this image for later.
+%
+% Example:
+%
+% \pgfimage[height=2cm]{filename}
+
+\def\pgfimage{\pgfutil@ifnextchar[\pgf@imagecom{\pgf@imagecom[]}}
+\def\pgf@imagecom[#1]#2{%
+ \pgfdeclareimage[#1]{pgflastimage}{#2}%
+ \pgfuseimage{pgflastimage}}
+
+
+
+
+
+
+
+
+% The external read/write mechanism is used as follows:
+%
+% In your document, you put a number or all of your pgfpicture (or
+% tikzpicture) environments inside a pair of \beginpgfexternal and
+% \endpgfexternal. The \beginpgfexternal gets one parameter called the
+% graphics name.
+%
+% Once this is done, the next step is to declare the names of your
+% graphics in the document at the beginning using the
+% \pgfdeclaregraphicname command.
+%
+% Now, when you typeset your document, each time a \beginpgfexternal
+% command is encountered, it will be checked whether the corresponding
+% graphics file exists. If this is the case, it will be included and
+% the code between \beginpgfexternal and \endpgfexternal is
+% ignored. Otherwise, the code is executed normally.
+%
+% Things change when you run tex on your file with the \jobname set to
+% the name of a decalred graphics name. In this case, only your
+% graphic will be typeset, the rest of the document will be "thrown away".
+% To be more precise, everything is gobbled up to the beginning
+% of the first \beginpgfexternal with the given graphics name. Then,
+% the content of the "environment" is put in a box (this "environment"
+% need not contain a graphics, it may contain anything that can be put
+% in a box). Then a single page is output whose size is exactly the
+% size of the picture.
+%
+% So, once you have run tex repeatedly, each time with the jobname set
+% to each of the graphics, you can then run tex on the whole document
+% and this will cause all graphics to be included rather than begin
+% typeset.
+%
+% Finally, once all the graphics have been created, you can also say
+% \input pgfexternal.tex instead of including pgf/TikZ.
+
+
+\newif\ifpgfexternalreadmainaux
+\pgfexternalreadmainauxtrue
+
+% Tells pgf which jobname is the name of the real file
+%
+% #1 = name
+%
+% Description:
+%
+% This command is used to tell pgf that the file named #1 should be
+% typeset normally. If \jobname is not equal to #1, only
+% the graphic called \jobname will be typeset.
+%
+% Example:
+%
+% \pgfrealjobname{survey}
+%
+% Note that afterwards, \jobname will be set to the argument. In our
+% example, \jobname will be 'survey'. This is to accomplish
+% compatibility with aux-file generation.
+
+\def\pgfrealjobname#1{%
+ \global\let\pgfactualjobname=\jobname
+ \edef\pgf@tempa{\expandafter\string\csname #1\endcsname}%
+ \edef\pgf@tempb{\expandafter\string\csname\jobname\endcsname}%
+ \ifx\pgf@tempa\pgf@tempb%
+ \else%
+ \pgf@external@grabshipouttrue%
+ \pgfexternal@nofiles
+ \ifpgfexternalreadmainaux
+ % and reset the jobname. This should allow to handle any
+ % \label/\ref constructions which are stored in \jobname.aux (and
+ % which won't be found otherwise)
+ \gdef\jobname{#1}%
+ \fi
+ \ifpgfexternal@allow@aux
+ \csname newwrite\endcsname\w@pgfexternal@auxout
+ \fi
+ \fi%
+ \gdef\pgfrealjobname##1{}% avoid multiple calls.
+}
+
+\def\pgfexternal@nofiles{%
+ % replace \relax. The \nofiles macros does
+ % \let\makeglossary=\relax
+ % but the glossary.sty calls \renewcommand\makeglossary (which
+ % will fail if \makeglossary=\relax). Stupid, but it works.
+ \let\pgfexternal@nofiles@=\relax
+ \def\relax{\relax}%
+ %
+ % suppress generation of LaTeX .aux, .toc etc files.
+ % generation of these files is not thread-safe.
+ % the \csname \endcsname yields \relax if \nofiles doesn't exist.
+ \csname nofiles\endcsname
+ %
+ \let\relax=\pgfexternal@nofiles@
+}%
+
+\newif\ifpgf@external@grabshipout
+\newbox\pgfexternal@startupbox
+
+\AtBeginDocument{%
+ \ifpgf@external@grabshipout%
+ \global\let\pgfexternal@originalshipout=\shipout%
+ \global\def\shipout{\setbox\pgfpic=}%
+ \maxdeadcycles=10000%
+ % Ok, gather everything we have seen up to now in a box. This box
+ % will contain any specials that have been used.
+ {%
+ \output{\global\setbox\pgfexternal@startupbox=\vbox{\csname @begindvi\endcsname\unvbox255}}%
+ \hbox{}\eject%
+ }%
+ \fi%
+}
+
+
+% "Environment" for an external graphic.
+%
+% #1 = graphic name
+%
+% Example:
+%
+% \beginpgfgraphicnamed{main-graphic2}
+% \begin{tikzpicture}
+% ...
+% \end{tikzpicture}
+% \endpgfgraphicnamed
+
+\def\pgf@externalbegin#1{%
+ % First, check whether we wish to grab this graphic:
+ \let\pgf@next=\pgf@external@normal%
+ \ifpgf@external@grabshipout%
+ \edef\pgf@tempa{\expandafter\string\csname #1\endcsname}%
+ \edef\pgf@tempb{\expandafter\string\csname\pgfactualjobname\endcsname}%
+ \ifx\pgf@tempa\pgf@tempb%
+ \let\pgf@next=\pgf@external@grab%
+ \fi%
+ \fi%
+ \pgf@next{#1}%
+}
+
+
+\AtBeginDocument{
+ \let\beginpgfgraphicnamed=\pgf@externalbegin% overwrite definition of pgfexternal.tex if necessary
+ \let\endpgfgraphicnamed=\unskip
+}
+
+
+% Normal operation: Include an external graphic instead of the
+% picture, if such an external picture exists.
+\def\pgf@external@normal#1{%
+ \let\pgf@filename=\pgfutil@empty%
+ \expandafter\pgf@findfile\pgfsys@imagesuffixlist:+{#1}%
+ \ifx\pgf@filename\pgfutil@empty%
+ % Ok, no such image... Just typeset the picture normally.
+ \let\pgf@next=\relax%
+ \else%
+ \let\pgf@next=\pgf@replacepicturebygraphic%
+ \fi%
+ \pgf@next%
+}
+
+\long\def\pgf@replacepicturebygraphic#1\endpgfgraphicnamed{%
+ \expandafter\pgfincludeexternalgraphics\expandafter{\pgf@filename}\unskip
+}
+
+% This is almost the same as \includegraphics{#1}, but it checks
+% whether '#1.dpth' exists. In such case, it restores the boxes depth
+% stored in #1.dpth.
+%
+% Furthermore, the .dpth file may contain .aux related information
+% collected for the external graphics (references). They start after
+% the first line (if any).
+\def\pgfincludeexternalgraphics#1{%
+ \begingroup
+ \setbox1=\hbox{\pgfkeysvalueof{/pgf/images/include external/.@cmd}{#1}\pgfeov}%
+ %
+ \let\pgfincludeexternalgraphics@dp=\pgfutil@empty
+ \endlinechar=-1 % suppress white space at end
+ \catcode`\@=11
+ \openin\r@pgf@reada=#1.dpth
+ \pgfincludeexternalgraphics@read@dpth
+ \ifx\pgfincludeexternalgraphics@dp\pgfutil@empty
+ \box1
+ \else
+ \dimen0=\pgfincludeexternalgraphics@dp\relax
+ \hbox{\lower\dimen0 \box1 }%
+ \fi
+ \endgroup
+}
+%
+% The .dpth consists of 0-N lines, where each is either a single
+% dimension (the box' depth) or something which belongs to the .aux
+% file (such lines will always start with a macro).
+\def\pgfincludeexternalgraphics@read@dpth{%
+ \ifeof\r@pgf@reada
+ \closein\r@pgf@reada
+ \else
+ \read\r@pgf@reada to\pgfincludeexternalgraphics@auxline
+ \ifx\pgfincludeexternalgraphics@auxline\pgfutil@empty
+ \else
+ \expandafter\pgfincludeexternalgraphics@read@dpth@line\pgfincludeexternalgraphics@auxline\pgfincludeexternalgraphics@read@dpth@line@EOI
+ \fi
+ \expandafter\pgfincludeexternalgraphics@read@dpth
+ \fi
+}%
+\long\def\pgfincludeexternalgraphics@read@dpth@line#1#2\pgfincludeexternalgraphics@read@dpth@line@EOI{%
+ \ifcat\noexpand#1\relax
+ % Ah -- the first token is a control sequence. It belongs to
+ % the .aux file.
+ %
+ % #1#2\relax% do NOT set the information! many LaTeX commands don't support it (\label for example)
+ \pgfutil@ifundefined{if@filesw}{%
+ % sorry, .aux file support only for latex
+ }{%
+ % append to main .aux file (for forward references)
+ \if@filesw
+ {%
+ \toks0={#1#2}%
+ % believe it or not, but the
+ % \def\dpthimport{...}\dpthimport *makes* a
+ % difference! In ensures any occuring `##' characters
+ % are properly expanded to `#'.
+ \immediate\write\@auxout{\noexpand\def\noexpand\dpthimport{\the\toks0 }\noexpand\dpthimport }%
+ }%
+ \fi
+ }%
+ \else
+ \def\pgfincludeexternalgraphics@dp{#1#2}%
+ \fi
+}%
+
+
+
+% Grab operation: If jobname matches the graphic name, typeset this
+% picture normall.
+% REMARK:
+% this method is also invoked from within the tikz external library.
+\def\pgf@external@grab#1{%
+ \def\pgf@filename{#1}%
+ \ifpgfexternal@allow@aux
+ \begingroup
+ \pgf@external@init@aux@in@dpth
+ \fi
+ \setbox\pgfpic=\hbox\bgroup\bgroup%
+ \let\endpgfgraphicnamed=\pgf@externalend%
+}
+
+\let\pgf@external@@protected@write@orig=\protected@write
+\long\def\pgf@external@@protected@write@immediate#1#2#3{%
+ \begingroup
+ \let\pgf@write@=\write
+ \def\write{\noexpand\immediate\pgf@write@}%
+ \pgf@external@@protected@write@orig{#1}{#2}{#3}%
+ \endgroup
+}%
+
+\def\pgf@external@init@aux@in@dpth{%
+ % tell LaTeX to write aux files...
+ \csname @fileswtrue\endcsname
+ % ... but redirect output to the .dpth file!
+ \immediate\openout\w@pgfexternal@auxout=\pgf@filename.dpth
+ \let\@auxout=\w@pgfexternal@auxout
+ % ... and disable the correct page numbers. I can't get that
+ % (because the correct page number is only available in the
+ % shipout routine). Use immediate output:
+ \let\protected@write=\pgf@external@@protected@write@immediate
+}%
+
+% REMARK:
+% this method is also invoked from within the tikz external library.
+\def\pgf@externalend{%
+ \unskip\egroup\egroup%
+ {%
+ \parindent0pt % leave the space
+% \leftmargin0pt%
+% \rightmargin0pt%
+ \dimen0\ht\pgfpic%
+ \advance\dimen0\dp\pgfpic%
+ \ifdim\dp\pgfpic=0pt\relax
+ \else% store the picture's depth. Otherwise, it would be lost.
+ \ifpgfexternal@allow@aux
+ \immediate\write\@auxout{\the\dp\pgfpic}%
+ \immediate\closeout\@auxout
+ \else
+ \immediate\openout\pgf@plotwrite=\pgf@filename.dpth
+ \immediate\write\pgf@plotwrite{\the\dp\pgfpic}%
+ \immediate\closeout\pgf@plotwrite
+ \fi
+ \fi
+ \pgfsys@papersize{\the\wd\pgfpic}{\the\dimen0}%
+ \setbox0=\vbox{%
+ \kern -1truein %
+ \hbox{%
+ \kern -1truein %
+ \hbox to0pt{%
+ \wd\pgfexternal@startupbox=0pt %
+ \ht\pgfexternal@startupbox=0pt %
+ \dp\pgfexternal@startupbox=0pt %
+ \box\pgfexternal@startupbox%
+ \pgfsys@atbegindocument\hss}%
+ \box\pgfpic%
+ \kern 1truein }%
+ \kern1truein }%
+ \pgfexternal@originalshipout\box0 %
+ }%
+ \ifpgfexternal@allow@aux
+ \endgroup
+ \fi
+}
+
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorelayers.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorelayers.code.tex
new file mode 100644
index 0000000000..7665a76afb
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorelayers.code.tex
@@ -0,0 +1,217 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 25. Dez 18:14:20 CET 2012 %%%
+
+
+
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/basiclayer/pgfcorelayers.code.tex,v 1.5 2012/11/07 19:23:16 ludewich Exp $
+
+
+% Creates a new pgf layer
+%
+% #1 = layer name
+%
+% Declares a new layer for pgf.
+%
+% Example:
+%
+% \pgfdeclarelayer{background}
+
+\def\pgfdeclarelayer#1{%
+ \pgfutil@ifundefined{pgf@layerbox@#1}{%
+ \expandafter\expandafter\csname pgf@newbox\endcsname\csname pgf@layerbox@#1\endcsname%
+ \expandafter\expandafter\csname pgf@newbox\endcsname\csname pgf@layerboxsaved@#1\endcsname%
+ }{}%
+}
+\let\pgf@newbox=\newbox % avoid plain TeX outer problem
+
+% Sets the layers that compose the picture
+%
+% #1 = List of layers
+%
+% Description:
+%
+% Sets the list of layers that make up the picture. The layers will be
+% put on top of each other in the order given.
+%
+% This command can also be given inside of a picture in which case it
+% applies only to that very picture.
+%
+% Example:
+%
+% \pgfsetlayers{background,main}
+
+\def\pgfsetlayers#1{\edef\pgf@layerlist{#1}}
+\pgfsetlayers{main}
+
+% Adds code to a layer
+%
+% #1 = layer name
+%
+% Note:
+%
+% You cannot add anything to the ``main'' layer using this command.
+%
+% Example:
+%
+% \begin{pgfonlayer}{background}
+% \fill[red] (0,0) -- (1,1);
+% \end{pgfonlayer}
+
+\def\pgfonlayer@name{main}
+
+\def\pgfonlayer#1{%
+ \pgfutil@ifundefined{pgf@layerbox@#1}{%
+ \PackageError{pgf}{Sorry, the requested layer '#1' could not be found. Maybe you misspelled it?}{}%
+ \bgroup
+ \begingroup
+ }{%
+ \begingroup
+ \edef\pgf@temp{#1}%
+ \ifx\pgf@temp\pgfonlayer@name
+ % we are already on this layer.
+ \def\pgf@temp{%
+ \bgroup
+ \begingroup
+ }%
+ \else
+ \let\pgfonlayer@name=\pgf@temp
+ \pgfonlayer@assert@is@active
+ \def\pgf@temp{%
+ \expandafter\global\expandafter%
+ \setbox\csname pgf@layerbox@#1\endcsname=\hbox to 0pt%
+ \bgroup%
+ \expandafter\box\csname pgf@layerbox@#1\endcsname%
+ \begingroup%
+ }%
+ \fi
+ \pgf@temp
+ }%
+}
+\def\endpgfonlayer{%
+ \endgroup%
+ \hss
+ \egroup%
+ \endgroup
+}
+
+\let\startpgfonlayer=\pgfonlayer
+\let\stoppgfonlayer=\endpgfonlayer
+
+\def\pgfdiscardlayername{discard}
+
+\def\pgfonlayer@assert@is@active{%
+ \ifx\pgfonlayer@name\pgfdiscardlayername
+ % this special layer name can be used as /dev/null without
+ % warning.
+ \else
+ \begingroup
+ \def\pgfonlayer@isactive{0}%
+ \expandafter\pgf@assert@layer@is@active@loop\pgf@layerlist,,\relax%
+ \if0\pgfonlayer@isactive
+ \pgfonlayer@assert@fail
+ \fi
+ \endgroup
+ \fi
+}%
+\def\pgfonlayer@assert@fail{%
+ \PackageError{pgf}{Sorry, the requested layer '\pgfonlayer@name' is not
+ part of the layer list. Please verify that you provided
+ \string\pgfsetlayers\space and that '\pgfonlayer@name' is part of this list}{}%
+}%
+\def\pgf@assert@layer@is@active@loop#1,#2,\relax{%
+ \edef\pgf@test{#1}%
+ \ifx\pgf@test\pgfonlayer@name
+ \def\pgfonlayer@isactive{1}%
+ \else
+ \def\pgf@test{#2}%
+ \ifx\pgf@test\pgfutil@empty%
+ \else%
+ \pgf@assert@layer@is@active@loop#2,\relax%
+ \fi%
+ \fi
+}
+
+% Hooks into the scoping:
+
+\def\pgf@insertlayers{%
+ \expandafter\pgf@dolayer\pgf@layerlist,,\relax%
+}
+\def\pgf@maintext{main}%
+\def\pgf@dolayer#1,#2,\relax{%
+ \def\pgf@test{#1}%
+ \ifx\pgf@test\pgf@maintext%
+ \box\pgf@layerbox@main%
+ \else%
+ \pgfsys@beginscope%
+ \expandafter\box\csname pgf@layerbox@#1\endcsname%
+ \pgfsys@endscope%
+ \fi%
+ \def\pgf@test{#2}%
+ \ifx\pgf@test\pgfutil@empty%
+ \else%
+ \pgf@dolayer#2,\relax%
+ \fi%
+}
+
+\def\pgf@savelayers{%
+ \expandafter\pgf@dosavelayer\pgf@layerlist,,\relax%
+}
+\def\pgf@dosavelayer#1,#2,\relax{%
+ \def\pgf@test{#1}%
+ \ifx\pgf@test\pgf@maintext%
+ \else%
+ \setbox\csname pgf@layerboxsaved@#1\endcsname=\box\csname pgf@layerbox@#1\endcsname%
+ \fi%
+ \def\pgf@test{#2}%
+ \ifx\pgf@test\pgfutil@empty%
+ \else%
+ \pgf@dosavelayer#2,\relax%
+ \fi%
+}
+
+\def\pgf@restorelayers{%
+ \expandafter\pgf@dorestorelayer\pgf@layerlist,,\relax%
+}
+\def\pgf@dorestorelayer#1,#2,\relax{%
+ \def\pgf@test{#1}%
+ \ifx\pgf@test\pgf@maintext%
+ \else%
+ \global\setbox\csname pgf@layerbox@#1\endcsname=\box\csname pgf@layerboxsaved@#1\endcsname%
+ \fi%
+ \def\pgf@test{#2}%
+ \ifx\pgf@test\pgfutil@empty%
+ \else%
+ \pgf@dorestorelayer#2,\relax%
+ \fi%
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorescopes.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorescopes.code.tex
new file mode 100644
index 0000000000..69ef0d9318
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfcorescopes.code.tex
@@ -0,0 +1,607 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 25. Dez 18:14:20 CET 2012 %%%
+
+
+
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/basiclayer/pgfcorescopes.code.tex,v 1.38 2012/11/30 12:00:51 tantau Exp $
+
+% Globals
+
+\newbox\pgfpic
+\newbox\pgf@hbox
+
+\newbox\pgf@layerbox@main
+
+\newcount\pgf@picture@serial@count
+
+
+
+% This if decides whether the position of pictures on the page is
+% protocolled or not. Normally,
+% this is switched off as it works only with certain drivers and it
+% causes external files to be written. When switched on, the position
+% of pgfpictures are protocolled and can be referenced using
+% \pgfsys@getposition{XXX} where XXX is the value of \pgfpictureid
+% inside the picture.
+\newif\ifpgfrememberpicturepositiononpage
+
+
+
+
+% Scopes
+
+
+% Pgf scope environment. All changes of the graphic state are local to
+% the scope.
+%
+% Example:
+%
+% \begin{pgfscope}
+% \pgfsetlinewidth{3pt}
+% \pgfline{\pgfxy(0,0)}{\pgfxy(3,3)}
+% \end{pgfscope}
+
+\def\pgfscope{%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
+ \pgfsys@beginscope%
+ \pgf@resetpathsizes%
+ \edef\pgfscope@linewidth{\the\pgflinewidth}%
+ \begingroup}
+\def\endpgfscope{%
+ \endgroup%
+ \global\pgflinewidth=\pgfscope@linewidth%
+ \pgfsys@endscope}
+
+
+
+
+% Quickly insert a box can contain normal TeX text at the origin.
+%
+% #1 = box of width/height and depth 0pt
+%
+% Example:
+%
+% \pgfqbox{\mybox}
+
+\def\pgfqbox#1{%
+ \pgfsys@hbox#1%
+}
+
+
+% Insert a box that can contain normal TeX text at the origin, but
+% with the current coordinate transformation matrix synced with the
+% low-level transformation matrix.
+%
+% #1 = box of width/height and depth 0pt
+%
+% In essence, this command does the same as if you first said
+% \pgflowlevelsynccm and then \pgfqbox. However, pgf will use a
+% ``TeX-translation'' for the translation part of the transformation
+% cm. This will ensure that hyperlinks ``survive'' at least
+% translations.
+%
+% Example:
+%
+% \pgfqboxsynced{\mybox}
+
+\def\pgfqboxsynced#1{%
+ \pgfsys@hboxsynced#1%
+}
+
+
+% Puts some text in a box and inserts it with the current
+% transformations applied.
+%
+% #1 = List of optional positioning. Possible values are ``left'', ``right'',
+% ``top'', ``bottom'' and ``base''.
+% #2 = TeX text. May contain verbatims.
+%
+% Example:
+%
+% \pgftransformshift{\pgfpoint{1cm}{0cm}}
+% \pgftext{Hello World!}
+
+\def\pgftext{\pgfutil@ifnextchar[\pgf@text{\pgf@text[]}}%
+\def\pgf@text[#1]{%
+ \def\pgf@text@options{#1}%
+ \pgf@maketext\pgf@after@text}
+\def\pgf@after@text{%
+ {%
+ \def\pgf@text@hshift{center}%
+ \def\pgf@text@vshift{center}%
+ \expandafter\pgf@text@setkeys\expandafter{\pgf@text@options}%
+ \csname pgf@halign\pgf@text@hshift\endcsname%
+ \csname pgf@valign\pgf@text@vshift\endcsname%
+ % Protocol sizes:
+ \pgf@process{\pgfpointtransformed{\pgfqpoint{0pt}{\dp\pgf@hbox}}}%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+ \pgf@process{\pgfpointtransformed{\pgfqpoint{\wd\pgf@hbox}{\dp\pgf@hbox}}}%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+ \pgf@process{\pgfpointtransformed{\pgfqpoint{0pt}{\ht\pgf@hbox}}}%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+ \pgf@process{\pgfpointtransformed{\pgfqpoint{\wd\pgf@hbox}{\ht\pgf@hbox}}}%
+ \pgf@protocolsizes{\pgf@x}{\pgf@y}%
+ \pgfqboxsynced{\pgf@hbox}%
+ }%
+}
+\def\pgf@text@setkeys{\pgfqkeys{/pgf/text}}%
+
+\pgfkeys{/pgf/text/left/.code=\def\pgf@text@hshift{left}}
+\pgfkeys{/pgf/text/center/.code=}
+\pgfkeys{/pgf/text/right/.code=\def\pgf@text@hshift{right}}
+\pgfkeys{/pgf/text/top/.code=\def\pgf@text@vshift{top}}
+\pgfkeys{/pgf/text/bottom/.code=\def\pgf@text@vshift{bottom}}
+\pgfkeys{/pgf/text/base/.code=\def\pgf@text@vshift{base}}
+\pgfkeys{/pgf/text/at/.cd,.code=\pgftransformshift{#1},.value required}
+\pgfkeys{/pgf/text/x/.cd,.code=\pgftransformxshift{#1},.value required}
+\pgfkeys{/pgf/text/y/.cd,.code=\pgftransformyshift{#1},.value required}
+\pgfkeys{/pgf/text/rotate/.cd,.code=\pgftransformrotate{#1},.value required}
+
+\def\pgf@halignleft{}% do nothing
+\def\pgf@haligncenter{\pgftransformxshift{+-.5\wd\pgf@hbox}}
+\def\pgf@halignright{\pgftransformxshift{+-\wd\pgf@hbox}}%
+\def\pgf@valignbase{}% do nothing
+\def\pgf@valignbottom{\pgftransformyshift{+\dp\pgf@hbox}}%
+\def\pgf@valigncenter{\pgftransformyshift{+.5\dp\pgf@hbox}\pgftransformyshift{+-.5\ht\pgf@hbox}}%
+\def\pgf@valigntop{\pgftransformyshift{+-\ht\pgf@hbox}}%
+
+
+% Internal function for creating a hbox.
+\def\pgf@maketext#1{%
+ \def\pgf@@maketextafter{#1}%
+ \setbox\pgf@hbox=\hbox\bgroup%
+ \pgfinterruptpicture%
+ \bgroup%
+ \aftergroup\pgf@collectresetcolor%
+ \let\next=%
+}
+\def\pgf@collectresetcolor{%
+ \pgfutil@ifnextchar\reset@color%
+ {\reset@color\afterassignment\pgf@collectresetcolor\let\pgf@temp=}%
+ {\pgf@textdone}%
+}
+\def\pgf@textdone{%
+ \endpgfinterruptpicture%
+ \egroup%
+ \pgf@@maketextafter%
+}
+
+\long\def\pgf@makehbox#1{%
+ \setbox\pgf@hbox=\hbox{{%
+ \pgfinterruptpicture%
+ #1%
+ \endpgfinterruptpicture%
+ }}}
+
+
+
+% Picture environment
+%
+% Example:
+%
+% \begin{pgfpicture}
+% \pgfsetendarrow{\pgfarrowto}
+% \pgfpathmoveto{\pgfpointxy{-0.9}{0.2}}
+% \pgfpathlineto{\pgfpointxy{0.9}{0.4}}
+% \pgfusepath{stroke}
+% \end{pgfpicture}
+
+\newif\ifpgfpicture
+
+\def\pgfresetboundingbox{%
+ \global\pgf@picmaxx=-16000pt\relax%
+ \global\pgf@picminx=16000pt\relax%
+ \global\pgf@picmaxy=-16000pt\relax%
+ \global\pgf@picminy=16000pt\relax%
+}%
+
+\def\pgfpicture{%
+ \begingroup%
+ \pgfpicturetrue%
+ \global\advance\pgf@picture@serial@count by1\relax%
+ \edef\pgfpictureid{pgfid\the\pgf@picture@serial@count}%
+ \let\pgf@nodecallback=\pgfutil@gobble%
+ \pgf@picmaxx=-16000pt\relax%
+ \pgf@picminx=16000pt\relax%
+ \pgf@picmaxy=-16000pt\relax%
+ \pgf@picminy=16000pt\relax%
+ \pgf@relevantforpicturesizetrue%
+ \pgf@resetpathsizes%
+ \pgfutil@ifnextchar\bgroup\pgf@oldpicture\pgf@picture}
+\def\pgf@oldpicture#1#2#3#4{%
+ \pgfmathsetlength\pgf@picminx{#1}%
+ \pgfmathsetlength\pgf@picminy{#2}%
+ \pgfmathsetlength\pgf@picmaxx{#3}%
+ \pgfmathsetlength\pgf@picmaxy{#4}%
+ \pgf@relevantforpicturesizefalse%
+ \pgf@picture}
+
+\def\pgf@picture{%
+ \setbox\pgfpic\hbox to0pt\bgroup%
+ \begingroup%
+ \pgfsys@beginpicture%
+ \pgfsys@beginscope%
+ \begingroup%
+ \pgfsetcolor{.}%
+ \pgfsetlinewidth{0.4pt}%
+ \pgftransformreset%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
+ \begingroup%
+ \let\pgf@setlengthorig=\setlength%
+ \let\pgf@addtolengthorig=\addtolength%
+ \let\pgf@selectfontorig=\selectfont%
+ \let\setlength=\pgf@setlength%
+ \let\addtolength=\pgf@addtolength%
+ \let\selectfont=\pgf@selectfont%
+ \nullfont\spaceskip0pt\xspaceskip0pt%
+ \setbox\pgf@layerbox@main\hbox to0pt\bgroup%
+ \begingroup%
+ }
+\def\endpgfpicture{%
+ \ifpgfrememberpicturepositiononpage%
+ \hbox to0pt{\pgfsys@markposition{\pgfpictureid}}%
+ \fi%
+ % ok, now let's position the box
+ \ifdim\pgf@picmaxx=-16000pt\relax%
+ % empty picture. make size 0.
+ \global\pgf@picmaxx=0pt\relax%
+ \global\pgf@picminx=0pt\relax%
+ \global\pgf@picmaxy=0pt\relax%
+ \global\pgf@picminy=0pt\relax%
+ \fi%
+ % Shift baseline outside:
+ \pgf@relevantforpicturesizefalse%
+ \pgf@process{\pgf@baseline}%
+ \xdef\pgf@shift@baseline{\the\pgf@y}%
+ %
+ \pgf@process{\pgf@trimleft}%
+ \global\advance\pgf@x by-\pgf@picminx
+ % prepare \hskip\pgf@trimleft@final.
+ % note that \pgf@trimleft@final is also queried
+ % by the pgf image externalization.
+ \xdef\pgf@trimleft@final{-\the\pgf@x}%
+ %
+ \pgf@process{\pgf@trimright}%
+ \global\advance\pgf@x by-\pgf@picmaxx
+ % prepare \hskip\pgf@trimright@final.
+ % note that \pgf@trimright@final is also queried
+ % by the pgf image externalization.
+ \xdef\pgf@trimright@final{\the\pgf@x}%
+ %
+ \pgf@remember@layerlist@globally
+ \endgroup%
+ \hss%
+ \egroup%
+ \pgf@restore@layerlist@from@global
+ \pgf@insertlayers%
+ \endgroup%
+ \pgfsys@discardpath%
+ \endgroup%
+ \pgfsys@endscope%
+ \pgfsys@endpicture%
+ \endgroup%
+ \hss
+ \egroup%
+ \pgfsys@typesetpicturebox\pgfpic%
+ \endgroup%
+}
+
+\def\pgf@remember@layerlist@globally{%
+ \global\let\pgf@layerlist@=\pgf@layerlist
+}%
+\def\pgf@restore@layerlist@from@global{%
+ \let\pgf@layerlist=\pgf@layerlist@
+}%
+\def\pgf@insertlayers{%
+ \box\pgf@layerbox@main%
+}
+
+\def\pgf@selectfont{\pgf@selectfontorig\nullfont}
+
+\def\pgf@setlength#1#2{% these will be used only when \nullfont is active
+ \begingroup% keep font setting local
+ \pgfutil@selectfont% restore font
+ \pgf@setlengthorig#1{#2}% calculate dimension (possibly using calc)
+ \expandafter%
+ \endgroup%
+ \expandafter#1\expandafter=\the#1\relax}
+\def\pgf@addtolength#1#2{%
+ \begingroup% keep font setting local
+ \pgfutil@selectfont% restore font
+ \pgf@addtolengthorig#1{#2}% calculate dimension (possibly using calc)
+ \expandafter%
+ \endgroup%
+ \expandafter#1\expandafter=\the#1\relax}
+
+
+% Sets the baseline at the y-coordinate of a given point
+%
+% #1 = point
+%
+% Sets the baseline of the picture to the y-coordinate of a given
+% point. However, the point will be evaluated *at the end of the
+% picture*.
+%
+% Example:
+%
+% \pgfsetbaselinepointlater{\pgfpointanchor{mynode}{base}}
+
+\def\pgfsetbaselinepointlater#1{\def\pgf@baseline{#1}}
+
+
+% Sets the baseline at the y-coordinate of a given point, now
+%
+% #1 = point
+%
+% Sets the baseline of the picture to the y-coordinate of a given
+% point.
+%
+% Example:
+%
+% \pgfsetbaselinepointnow{\pgfpoint{1cm}{2pt}}
+
+\def\pgfsetbaselinepointnow#1{%
+ \pgf@process{#1}%
+ \edef\pgf@setter@baseline{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ \pgfsetbaselinepointlater{\pgf@setter@baseline}%
+}
+
+\def\pgf@default@text{default}%
+
+% Sets the baseline
+%
+% #1 = baseline
+%
+% Sets the baseline of the picture. Default is the lower border, which
+% is the same as \pgf@picminy
+%
+% Example:
+%
+% \pgfsetbaseline{1cm+2pt}
+% \pgfsetbaseline{default}% resets to default value
+
+\def\pgfsetbaseline#1{%
+ \def\pgf@temp{#1}%
+ \ifx\pgf@temp\pgf@default@text
+ \pgfsetbaseline{\pgf@picminy}%
+ \else
+ \pgfsetbaselinepointlater{\pgfpoint{0pt}{#1}}%
+ \fi
+}
+\pgfsetbaseline{\pgf@picminy}
+
+% controls how the image externalization implements trim:
+\newif\ifpgf@trim@lowlevel
+\pgfkeys{
+ /pgf/trim lowlevel/.is if=pgf@trim@lowlevel,
+ /pgf/trim lowlevel/.default=true,
+}
+
+% Same as the y-baseline for horizontal alignment.
+% The effect is different, though: it is some kind of trimming which
+% leaves the bounding box intact.
+\def\pgfsettrimleftpointlater#1{\def\pgf@trimleft{#1}}
+\def\pgfsettrimleftpointnow#1{%
+ \pgf@process{#1}%
+ \edef\pgf@setter@baseline{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ \pgfsettrimleftpointlater{\pgf@setter@baseline}%
+}
+% \pgfsettrimleft{<x coord>}
+% or
+% \pgfsettrimleft{default}
+\def\pgfsettrimleft#1{%
+ \def\pgf@temp{#1}%
+ \ifx\pgf@temp\pgf@default@text
+ \pgfsettrimleft{\pgf@picminx}
+ \else
+ \pgfsettrimleftpointlater{\pgfpoint{#1}{0pt}}%
+ \fi
+}
+\pgfsettrimleft{\pgf@picminx}
+
+\def\pgfsettrimrightpointlater#1{\def\pgf@trimright{#1}}
+\def\pgfsettrimrightpointnow#1{%
+ \pgf@process{#1}%
+ \edef\pgf@setter@baseline{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ \pgfsettrimrightpointlater{\pgf@setter@baseline}%
+}
+% \pgfsettrimright{<x coord>}
+% or
+% \pgfsettrimright{default}
+\def\pgfsettrimright#1{%
+ \def\pgf@temp{#1}%
+ \ifx\pgf@temp\pgf@default@text
+ \pgfsettrimright{\pgf@picmaxx}%
+ \else
+ \pgfsettrimrightpointlater{\pgfpoint{#1}{0pt}}%
+ \fi
+}
+\pgfsettrimright{\pgf@picmaxx}
+
+
+% Interrupt path
+%
+% Description:
+%
+% The environment can be used to insert some drawing commands while
+% constructing a path. The drawing commands inside the environment
+% will not interfere with the path being constructed ``outside.''
+% However, you must ward against graphic state changes using a scope.
+%
+% Example: Draw two parallel lines
+%
+% \pgfmoveto{\pgfpoint{0cm}{0cm}}
+% \begin{pgfinterruptpath}
+% \pgfmoveto{\pgfpoint{1cm}{0cm}}
+% \pgfmoveto{\pgfpoint{1cm}{1cm}}
+% \pgfusepath{stroke}
+% \end{pgfinterruptpath}
+% \pgflineto{\pgfpoint{0cm}{1cm}}
+% \pgfusepath{stroke}
+
+\def\pgfinterruptpath
+{%
+ \begingroup%
+ % save all sorts of things...
+ \edef\pgf@interrupt@savex{\the\pgf@path@lastx}%
+ \edef\pgf@interrupt@savey{\the\pgf@path@lasty}%
+ \pgf@getpathsizes\pgf@interrupt@pathsizes%
+ \pgfsyssoftpath@getcurrentpath\pgf@interrupt@path%
+ \pgfsyssoftpath@setcurrentpath\pgfutil@empty%
+ \edef\pgfscope@linewidth{\the\pgflinewidth}%
+ \let\pgf@interrupt@lastmoveto=\pgfsyssoftpath@lastmoveto%
+ \begingroup%
+}
+\def\endpgfinterruptpath
+{%
+ \endgroup%
+ \global\pgflinewidth=\pgfscope@linewidth%
+ \pgfsyssoftpath@setcurrentpath\pgf@interrupt@path%
+ \pgf@setpathsizes\pgf@interrupt@pathsizes%
+ \global\pgf@path@lastx=\pgf@interrupt@savex%
+ \global\pgf@path@lasty=\pgf@interrupt@savey%
+ \global\let\pgfsyssoftpath@lastmoveto=\pgf@interrupt@lastmoveto%
+ \endgroup%
+}
+
+
+
+% Interrupt bounding box
+%
+% Description:
+%
+% The environment can be used to temporarily setup a new bounding box
+% computation. The bounding box will be made empty at the beginning of
+% the environment and will be reset to its old value after the
+% environment.
+%
+% Example:
+%
+% \begin{pgfinterruptboundinbox}
+% \pgfmoveto{\pgfpoint{1cm}{0cm}}
+% \pgfmoveto{\pgfpoint{1cm}{1cm}}
+% \pgfusepath{stroke}
+% \end{pgfinterruptboundinbox}
+
+\def\pgfinterruptboundingbox
+{%
+ \begingroup%
+ \edef\pgf@interrupt@savemaxx{\the\pgf@picmaxx}%
+ \edef\pgf@interrupt@saveminx{\the\pgf@picminx}%
+ \edef\pgf@interrupt@savemaxy{\the\pgf@picmaxy}%
+ \edef\pgf@interrupt@saveminy{\the\pgf@picminy}%
+ \pgf@picmaxx=-16000pt\relax%
+ \pgf@picminx=16000pt\relax%
+ \pgf@picmaxy=-16000pt\relax%
+ \pgf@picminy=16000pt\relax%
+ \pgf@size@hookedfalse%
+ \let\pgf@path@size@hook=\pgfutil@empty%
+}
+\def\endpgfinterruptboundingbox
+{%
+ \global\pgf@picmaxx=\pgf@interrupt@savemaxx%
+ \global\pgf@picmaxy=\pgf@interrupt@savemaxy%
+ \global\pgf@picminx=\pgf@interrupt@saveminx%
+ \global\pgf@picminy=\pgf@interrupt@saveminy%
+ \endgroup%
+}
+
+
+
+
+
+% Interrupts a picture
+%
+% Description:
+%
+% This environment interrupts a picture and temporarily returns to
+% normal TeX mode. All sorts of things are saved and restored by this
+% environment.
+%
+% WARNING: Using this environment in conjuction with low level
+% transformations can *strongly* upset the typesetting. Typically, the
+% contents of this environment should have size/height/depth 0pt in
+% the end.
+%
+% WARNING: This environment should only be used inside typesetting a
+% box and this box must in turn be inserted using \pgfqbox.
+%
+% Example: Draw two parallel lines
+%
+% \pgfmoveto{\pgfpoint{0cm}{0cm}}
+% \setbox\mybox=\hbox{
+% \begin{pgfinterruptpicture}
+% This is normal text.
+% \begin{pgfpicture} % a subpicture
+% \pgfmoveto{\pgfpoint{1cm}{0cm}}
+% \pgfmoveto{\pgfpoint{1cm}{1cm}}
+% \pgfusepath{stroke}
+% \end{pgfpicture}
+% More text.
+% \end{pgfinterruptpicture}
+% }
+% \ht\mybox=0pt
+% \wd\mybox=0pt
+% \dp\mybox=0pt
+% \pgfqbox{\mybox}%
+% \pgfpathlineto{\pgfpoint{0cm}{1cm}}
+% \pgfusepath{stroke}
+
+\def\pgfinterruptpicture
+{%
+ \begingroup%
+ \pgfinterruptboundingbox%
+ \pgftransformreset%
+ \pgfinterruptpath%
+ \ifx\pgf@selectfontorig\@undefined%
+ \else%
+ \let\setlength\pgf@setlengthorig%
+ \let\addtolength\pgf@addtolengthorig%
+ \let\selectfont\pgf@selectfontorig%
+ \fi%
+ \pgfutil@selectfont%
+ \pgfpicturefalse%
+ \let\pgf@positionnodelater@macro\relax%
+ \pgf@savelayers%
+}
+\def\endpgfinterruptpicture
+{%
+ \pgf@restorelayers%
+ \endpgfinterruptpath%
+ \endpgfinterruptboundingbox%
+ \endgroup%
+}
+
+\let\pgf@savelayers=\relax
+\let\pgf@restorelayers=\relax
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeys.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeys.code.tex
new file mode 100644
index 0000000000..c2edfccaea
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeys.code.tex
@@ -0,0 +1,1067 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 25. Dez 18:14:20 CET 2012 %%%
+
+
+
+% Copyright 2007 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+
+% The files pgfkeys.code.tex and pgfkeysfiltered.code.tex are
+% perfectly self-contained, except that the catcode of @
+% should be made a letter.
+
+
+% Guard against reading twice
+\ifx\pgfkeysloaded\undefined
+ \let\pgfkeysloaded=\relax
+\else
+ \expandafter\endinput
+\fi
+
+% The purpose of this file is to provide a general settings engine that
+% works with all TeX formats and has no save-stack impact
+
+
+% This is useful:
+
+\def\pgfkeys@ifcsname#1\endcsname#2\else#3\fi{\expandafter\ifx\csname#1\endcsname\relax#3\else#2\fi}%
+\ifx\eTeXrevision\undefined%
+\else%
+ \expandafter\let\expandafter\pgfkeys@ifcsname\csname ifcsname\endcsname%
+\fi
+
+\def\pgfkeys@empty{}
+
+% This also:
+
+\ifx\PackageError\undefined
+ \def\pgfkeys@error#1{\immediate\write-1{Package pgfkeys: Error! #1.}}%
+\else
+ \def\pgfkeys@error#1{\PackageError{pgfkeys}{#1}{}}%
+\fi
+
+% Set a key to a value
+%
+% #1 = key
+% #2 = tokens
+%
+% Description:
+%
+% This command sets the key to the given tokens. The tokens are stored as
+% is and can even contain things like #9.
+%
+% Keys are organized hierarchically using something similar to Unix
+% paths. Thus, a typically key might be called "/tikz/length" or
+% "/tikz/length dimension/.@cmd". Some keys starting with a dot are
+% special, so they should not be used as normal key names (they are
+% similar to Unix files starting with a dot -- you can use them, but
+% be careful).
+%
+% Keys are always local to the current TeX group.
+%
+% Example:
+%
+% \pgfkeyssetvalue{/tikz/length}{2cm-3cm}
+% \pgfkeyssetvalue{/algo/swap}{{#2}{#1}}
+
+\long\def\pgfkeyssetvalue#1#2{%
+ \pgfkeys@temptoks{#2}\expandafter\edef\csname pgfk@#1\endcsname{\the\pgfkeys@temptoks}%
+}
+
+
+
+% Add text to a key at the end
+%
+% #1 = key
+% #2 = a value to be added at the beginning
+% #3 = a value to be added at the end
+%
+% Description:
+%
+% This command adds #2 to the definition of the key. The key should
+% have been set previously using \pgfkeyssetvalue.
+%
+% Example:
+%
+% \pgfkeysaddvalue{/tikz/length}{}{-3cm}
+
+\long\def\pgfkeysaddvalue#1#2#3{%
+ {%
+ \toks0{#2}%
+ \pgfkeysifdefined{#1}
+ {\pgfkeys@temptoks\expandafter\expandafter\expandafter{\csname pgfk@#1\endcsname}}%
+ {\pgfkeys@temptoks{}}%
+ \toks1{#3}%
+ \xdef\pgfkeys@global@temp{\the\toks0 \the\pgfkeys@temptoks \the\toks1}% believe or don't: the spaces are important
+ }%
+ \pgfkeyslet{#1}\pgfkeys@global@temp%
+}
+
+
+
+% Makes a key equal a given code
+%
+% #1 = key
+% #2 = a code name
+%
+% Description:
+%
+% This command executes a \let command so that a key gets the same
+% value as the parameter #2.
+%
+% Keys are always local to the current TeX group.
+%
+% Example:
+%
+% \pgfkeyslet{/algo/swap}{\myswap}
+
+\def\pgfkeyslet#1#2{%
+ \expandafter\let\csname pgfk@#1\endcsname#2%
+}
+
+
+% Retrieve the code stored in a key into a code
+%
+% #1 = key
+% #2 = code
+%
+% Description:
+%
+% This command will set #2 to "point" to the value stored in the key.
+%
+% Example:
+%
+% \pgfkeysgetvalue{/tikz/swap}{\myswap}
+
+\def\pgfkeysgetvalue#1#2{\expandafter\let\expandafter#2\csname pgfk@#1\endcsname}
+
+
+
+% Retrieve the value stored in a key
+%
+% #1 = key
+%
+% Description:
+%
+% This command will expand to the value stored in the key. The key
+% should previously have been set using \pgfkeyasetkey or \pgfkeyslet.
+%
+% Example:
+%
+% The length is \pgfkeysvalue{/tikz/length}.
+
+\def\pgfkeysvalueof#1{\csname pgfk@#1\endcsname}
+
+
+
+% If for testing whether a key exists
+%
+% #1 = key
+% #2 = if-case
+% #3 = else-case
+%
+% Description:
+%
+% This if will be executed if the key exists. In eTeX mode this works
+% like a normal if, in normal TeX mode you need to provide an \else.
+%
+% Example:
+%
+% \pgfkeysifdefined{/tikz/length}{key exists}{does not exist}
+
+\long\def\pgfkeysifdefined#1#2#3{\pgfkeys@ifcsname pgfk@#1\endcsname#2\else#3\fi}
+
+% Tests whether a key is assignable. For standard keys which just
+% store their value, this is identical to \pgfkeysifdefined.
+%
+% But \pgfkeysifassignable is true for command keys as well (but not
+% for handled keys).
+\long\def\pgfkeysifassignable#1#2#3{%
+ \pgfkeysifdefined{#1}%
+ {#2}
+ {\pgfkeysifdefined{#1/.@cmd}%
+ {#2}%
+ {#3}}%
+}%
+
+
+
+% Execute settings
+%
+% #1 = list of settings
+%
+% Description:
+%
+% The list of settings should contain comma-separated settings. Each
+% setting has the following form:
+%
+% /path/key=value
+%
+% The parts "/path/" and "=value" are optional. When the path is not
+% specified, the value of the token register "\pgfkeypath" is used. If
+% "=value" is missing, the value of the setting "/path/key/.@def" is used
+% instead. If this key is set to "\pgfvaluerequired", the key
+% "/errors/value required/.@cmd" is executed. Theis error handler,
+% like all other error handlers, will get the current key as its first
+% parameter (unexpanded) and the current value as its second value
+% (also unexpanded).
+%
+% Any spaces at the beginning and at the end and around the
+% equals-sign are removed. The key with the complete path is set to
+% the code \pgfcurrentkey.
+%
+% The setting is then processed according to the following rules:
+%
+% 1) If the key /path/key/.@cmd" is present, its code is executed
+% with the value computed above, followed by \pgfeov (end of
+% value). So, to handle
+%
+% "/stuff/height= 1.5 ,"
+%
+% /stuff/height/.@cmd should be set to some code, that can
+% handle the parameter
+%
+% "1.5\pgfeov"
+%
+% For instance, saying
+%
+% \pgfkeys{/stuff/height/.@cmd}{#1\pgfeov}{\def\myheight{#1}}
+%
+% will do nicely.
+%
+% 2) Otherwise, if the key /path/key is present, this key is
+% set to the value computed above.
+%
+% 3) Otherwise, if the key /handlers/key/.@cmd is present, it is executed
+% with the same parameters as in 1). Additionally, the
+% token register \pgfcurrentkeypath will be set to "/path/" and the
+% macor \pgfcurrentkeywithoutpath to "key". So, in the above
+% example if neither "/stuff/height/.@cmd" nor
+% "/stuff/height" is present, but "/handlers/height" is,
+% then "/handlers/height" is executed with the parameters:
+%
+% "1.5\pgfeov"
+%
+% and \pgfcurrentkey is set to "/stuff/height" and \pgfcurrentkeypath
+% is set to "/stuff/" and \pgfcurrentkeywithoutpath to "height".
+%
+% 4) Otherwise, if the key "/path/.unknown/.@cmd" is present, its code is
+% executed with the same parameters as in 3).
+%
+% 5) Otherwise, the key "/handlers/.unknown/.@cmd" is executed with the same
+% parameters as in 1).
+%
+% After all settings have been processed, the value of the token
+% register \pgfdefaultkeypath is set to its original value. Thus, any local
+% change of this token register has no effect outside the call.
+%
+% Example:
+%
+% \pgfkeys{/tikz/.is family}
+% \pgfkeys{/tikz/line width/.cd,
+% .def=\pgfsetlinewidth{##1},
+% .set default=.4pt}
+% \pgfkeys{tikz,line width=1pt}
+
+\newtoks\pgfkeys@pathtoks
+\def\pgfkeyscurrentpath{\the\pgfkeys@pathtoks}
+\newtoks\pgfkeys@temptoks
+
+\def\pgfkeys@root{/}
+\let\pgfkeysdefaultpath\pgfkeys@root
+
+\def\pgfkeys{\expandafter\pgfkeys@@set\expandafter{\pgfkeysdefaultpath}}%
+\long\def\pgfkeys@@set#1#2{%
+ \let\pgfkeysdefaultpath\pgfkeys@root%
+ \pgfkeys@parse#2,\pgfkeys@mainstop%
+ \def\pgfkeysdefaultpath{#1}}
+
+\def\pgfkeys@parse{\futurelet\pgfkeys@possiblerelax\pgfkeys@parse@main}
+\def\pgfkeys@parse@main{%
+ \ifx\pgfkeys@possiblerelax\pgfkeys@mainstop%
+ \expandafter\pgfkeys@cleanup%
+ \else%
+ \expandafter\pgfkeys@normal%
+ \fi%
+}
+\newif\ifpgfkeys@syntax@handlers
+\def\pgfkeys@normal{%
+ \ifpgfkeys@syntax@handlers%
+ \expandafter\pgfkeys@syntax@handlers%
+ \else%
+ \expandafter\pgfkeys@@normal%
+ \fi%
+}
+\def\pgfkeys@syntax@handlers{\pgfutil@ifnextchar\relax\pgfkeys@syntax@@handlers\pgfkeys@syntax@@handlers}%get rid of spaces
+\def\pgfkeys@syntax@@handlers{\futurelet\pgfkeys@first@char\pgfkeys@syntax@handlers@test}
+\def\pgfkeys@syntax@handlers@test{%
+ \pgfkeysgetvalue{/handlers/first char syntax/\meaning\pgfkeys@first@char}\pgfkeys@the@handler%
+ \ifx\pgfkeys@the@handler\relax%
+ \expandafter\pgfkeys@@normal%
+ \else%
+ \expandafter\pgfkeys@use@handler%
+ \fi%
+}
+\long\def\pgfkeys@use@handler#1,{%
+ \pgfkeys@the@handler{#1}%
+ \pgfkeys@parse%
+}
+
+\long\def\pgfkeys@@normal#1,{%
+ \pgfkeys@unpack#1=\pgfkeysnovalue=\pgfkeys@stop%
+ \pgfkeys@parse%
+}
+\def\pgfkeys@cleanup\pgfkeys@mainstop{}
+
+\def\pgfkeys@mainstop{\pgfkeys@mainstop} % equals only itself
+\def\pgfkeys@novalue{} % equals only itself
+\def\pgfkeysnovalue{\pgfkeys@novalue} % equals only itself
+\def\pgfkeysnovalue@text{\pgfkeysnovalue}
+\def\pgfkeysvaluerequired{\pgfkeysvaluerequired} % equals only itself
+
+\long\def\pgfkeys@unpack#1=#2=#3\pgfkeys@stop{%
+ \pgfkeys@spdef\pgfkeyscurrentkey{#1}%
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentkey}%
+ \ifx\pgfkeyscurrentkey\pgfkeys@empty%
+ % Skip
+ \else%
+ \pgfkeys@add@path@as@needed%
+ \pgfkeys@spdef\pgfkeyscurrentvalue{#2}%
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text% Hmm... no value
+ \pgfkeysifdefined{\pgfkeyscurrentkey/.@def}%
+ {\pgfkeysgetvalue{\pgfkeyscurrentkey/.@def}{\pgfkeyscurrentvalue}}
+ {}% no default, so leave it
+ \fi%
+ \ifx\pgfkeyscurrentvalue\pgfkeysvaluerequired%
+ \pgfkeysvalueof{/errors/value required/.@cmd}\pgfkeyscurrentkey\pgfkeyscurrentvalue\pgfeov%
+ \else%
+ \pgfkeys@case@one%
+ \fi%
+ \fi}
+
+\def\pgfkeys@case@one{%
+ \pgfkeysifdefined{\pgfkeyscurrentkey/.@cmd}%
+ {\pgfkeysgetvalue{\pgfkeyscurrentkey/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov}
+ {\pgfkeys@case@two}%
+}
+
+\def\pgfkeys@case@two{%
+ \pgfkeysifdefined{\pgfkeyscurrentkey}%
+ {\pgfkeys@case@two@extern}%
+ {\pgfkeys@case@three}%
+}
+
+\def\pgfkeys@case@two@extern{%
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text%
+ \pgfkeysvalueof{\pgfkeyscurrentkey}%
+ \else%
+ \pgfkeyslet{\pgfkeyscurrentkey}\pgfkeyscurrentvalue%
+ \fi%
+}
+
+
+% either handled key or unknown.
+%
+% This macro will be replaced by the /handler config/handle only existing
+% configuration, see below.
+\def\pgfkeys@case@three{%
+ \pgfkeys@split@path%
+ \pgfkeysifdefined{/handlers/\pgfkeyscurrentname/.@cmd}%
+ {\pgfkeysgetvalue{/handlers/\pgfkeyscurrentname/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov}
+ {\pgfkeys@unknown}%
+}
+\let\pgfkeys@case@three@handleall=\pgfkeys@case@three
+\def\pgfkeys@case@three@handle@restricted{%
+ \pgfkeys@split@path%
+ \pgfkeysifdefined{/handlers/\pgfkeyscurrentname/.@cmd}{%
+ \pgfkeys@ifexecutehandler{%
+ \pgfkeysgetvalue{/handlers/\pgfkeyscurrentname/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov
+ }{%
+ % this here is necessary: /my search path/key/.code
+ % won't be called, so \pgfkeyscurrentpath == '/my search path/key'
+ % -> it should be one directory higher! We want to invoke the
+ % .unknown handler in
+ % '/my search path'
+ %
+ % Idea:
+ % set
+ % - path := '/my search path'
+ % - name := 'key/.code'
+ % - key = '/my search path/key/.code'
+ \let\pgfkeys@temp=\pgfkeyscurrentkey
+ \let\pgfkeys@tempb=\pgfkeyscurrentname
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentpath}%
+ \pgfkeys@split@path%
+ \let\pgfkeyscurrentkey=\pgfkeys@temp
+ \edef\pgfkeyscurrentname{\pgfkeyscurrentname/\pgfkeys@tempb}%
+ \pgfkeys@unknown
+ }%
+ }{%
+ \pgfkeys@unknown
+ }%
+}
+
+% this macro is to implement the |handly only existing| key in key filtering:
+% #1: the code to invoke IF the key handler shall be executed
+% #2: the code to invoke if it shall not run.
+\def\pgfkeys@ifexecutehandler#1#2{#1}%
+\let\pgfkeys@ifexecutehandler@handleall=\pgfkeys@ifexecutehandler
+\def\pgfkeys@ifexecutehandler@handleonlyexisting#1#2{%
+ \pgfkeys@ifcsname pgfk@excpt@\pgfkeyscurrentname\endcsname%
+ #1% ok, this particular key handler is known and should be processed in any case (for example .try)
+ \else
+ % implement the 'only existing' feature here:
+ \pgfkeysifdefined{\pgfkeyscurrentpath}{#1}{%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@cmd}{#1}{#2}%
+ }{}%
+ \fi%
+}%
+\def\pgfkeys@ifexecutehandler@handlefullorexisting#1#2{%
+ \ifpgfkeysaddeddefaultpath
+ \pgfkeys@ifcsname pgfk@excpt@\pgfkeyscurrentname\endcsname%
+%\message{ifexecutehandler(\pgfkeyscurrentkeyRAW, path \pgfkeysdefaultpath): '\pgfkeyscurrentname' is an exception; processing it (on \pgfkeyscurrentpath).}%
+ #1% ok, this particular key handler is known and be processed in any case (for example .try)
+ \else
+ % implement the 'only existing' feature here:
+ \pgfkeysifdefined{\pgfkeyscurrentpath}{%
+%\message{ifexecutehandler(\pgfkeyscurrentkeyRAW, path \pgfkeysdefaultpath): '\pgfkeyscurrentpath' does exist. Executing '\pgfkeyscurrentname'.}%
+ #1%
+ }{%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@cmd}{%
+%\message{ifexecutehandler(\pgfkeyscurrentkeyRAW, path \pgfkeysdefaultpath): '\pgfkeyscurrentpath/.@cmd' does exist. Executing '\pgfkeyscurrentname'.}%
+ #1%
+ }{%
+%\message{ifexecutehandler(\pgfkeyscurrentkeyRAW, path \pgfkeysdefaultpath): '\pgfkeyscurrentpath' does NOT exist. Skipping '\pgfkeyscurrentname'.}%
+ #2%
+ }%
+ }%
+ \fi%
+ \else
+%\message{ifexecutehandler(\pgfkeyscurrentkeyRAW, path \pgfkeysdefaultpath): Fully qualified key provided. Executing '\pgfkeyscurrentname'.}%
+ #1% ok, always true if the USER explicitly provided the full key path.
+ \fi
+}%
+\def\pgfkeysaddhandleonlyexistingexception#1{\expandafter\def\csname pgfk@excpt@#1\endcsname{1}}%
+
+\def\pgfkeys@unknown{%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.unknown/.@cmd}%
+ {%
+ \pgfkeysgetvalue{\pgfkeyscurrentpath/.unknown/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov}
+ {%
+ \pgfkeysgetvalue{/handlers/.unknown/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov%
+ }%
+}
+
+
+\long\def\pgfkey@argumentisspace#1{%
+ \long\def\pgfkeys@spdef##1##2{%
+ \futurelet\pgfkeys@possiblespace\pgfkeys@sp@a##2\pgfkeys@stop\pgfkeys@stop#1\pgfkeys@stop\relax##1}%
+ \def\pgfkeys@sp@a{%
+ \ifx\pgfkeys@possiblespace\pgfkeys@sptoken%
+ \expandafter\pgfkeys@sp@b%
+ \else%
+ \expandafter\pgfkeys@sp@b\expandafter#1%
+ \fi}%
+ \long\def\pgfkeys@sp@b#1##1 \pgfkeys@stop{\pgfkeys@sp@c##1}%
+}
+\pgfkey@argumentisspace{ }
+\long\def\pgfkeys@sp@c#1\pgfkeys@stop#2\relax#3{\pgfkeys@temptoks{#1}\edef#3{\the\pgfkeys@temptoks}}
+{\def\:{\global\let\pgfkeys@sptoken= } \: }
+
+
+
+\def\pgfkeys@add@path@as@needed{% Should add the path if the
+ % \pgfkeyscurrentkey does not start with /
+ \expandafter\futurelet\expandafter\pgfkeys@possibleslash\expandafter\pgfkeys@check@slash\pgfkeyscurrentkey\relax%
+}
+\newif\ifpgfkeysaddeddefaultpath
+\def\pgfkeys@check@slash{%
+ \ifx\pgfkeys@possibleslash/%
+ \expandafter\pgfkeys@nevermind%
+ \else%
+ \expandafter\pgfkeys@addpath%
+ \fi%
+}
+
+\def\pgfkeys@nevermind#1\relax{%
+ \pgfkeysaddeddefaultpathfalse
+ \let\pgfkeyscurrentkeyRAW\pgfkeyscurrentkey
+}
+\def\pgfkeys@addpath#1\relax{%
+ \pgfkeysaddeddefaultpathtrue
+ \def\pgfkeyscurrentkeyRAW{#1}%
+ \edef\pgfkeyscurrentkey{\pgfkeysdefaultpath#1}%
+}
+
+
+\def\pgfkeys@split@path{% Should assign the two codes
+ % \pgfkeyscurrentname and \pgfcurrentlkeypath
+ \pgfkeys@pathtoks{}%
+ \expandafter\pgfkeys@splitter\pgfkeyscurrentkey//%
+}
+\def\pgfkeys@splitter#1/#2/{%
+ \def\pgfkeys@temp{#2}%
+ \ifx\pgfkeys@temp\pgfkeys@empty%
+ % Ah. done
+ \def\pgfkeyscurrentname{#1}%
+ \expandafter\pgfkeys@gobbletoslash%
+ \else%
+ \expandafter\pgfkeys@pathtoks\expandafter{\the\pgfkeys@pathtoks#1/}%
+ \fi%
+ \pgfkeys@splitter#2/%
+}
+\def\pgfkeys@gobbletoslash\pgfkeys@splitter/{\expandafter\pgfkeys@remove@slash\the\pgfkeys@pathtoks\relax}%
+\def\pgfkeys@remove@slash#1/\relax{\pgfkeys@pathtoks{#1}}
+
+
+
+% Quickly set keys
+%
+% #1 = default path
+% #2 = key-value pairs
+%
+% Desscription:
+%
+% This command starts the execution with the default path set to
+% #1. This command should only be used when speed is important (like
+% in a heavily used macro like \tikzset). Normally, keys should be
+% used to set the path. Note that if #1 equals /, then \pgfkeys will
+% actually be quicker!
+%
+% Example:
+%
+% \pgfqkeys{/tikz}{myother length/.code=\def\myotherlength{#1}\pgfkeysalso{length=#1}}
+
+\def\pgfqkeys{\expandafter\pgfkeys@@qset\expandafter{\pgfkeysdefaultpath}}%
+\long\def\pgfkeys@@qset#1#2#3{\def\pgfkeysdefaultpath{#2/}\pgfkeys@parse#3,\pgfkeys@mainstop\def\pgfkeysdefaultpath{#1}}
+
+
+% Sets keys while setting keys
+%
+% #1 = key-value pairs
+%
+% Desscription:
+%
+% This code may only be called inside the code that is executed for a
+% key. The #1 should be a list of settings pairs. They will be executed
+% as if they had been given as the argument to the \pgfkeys command.
+%
+% Example:
+%
+% \pgfkeys{tikz,myother length/.code=\def\myotherlength{#1}\pgfkeysalso{length=#1}}
+
+\long\def\pgfkeysalso#1{\pgfkeys@parse#1,\pgfkeys@mainstop}
+
+
+
+% Quickly sets keys while setting keys
+%
+% #1 = default path
+% #2 = key-value pairs
+%
+% Desscription:
+%
+% This command executes #2 with the default path set to #1. This
+% command will cause chaos if used incorrectly. The only safe
+% place to use it instead of \pgfkeys is at the beginning of a TeX group.
+%
+% Example:
+%
+% \begingroup
+% \pgfqkeysalso{/tikz}{myother length/.code=\def\myotherlength{#1}\pgfkeysalso{length=#1}}
+
+\long\def\pgfqkeysalso#1#2{\def\pgfkeysdefaultpath{#1/}\pgfkeys@parse#2,\pgfkeys@mainstop}
+
+
+
+
+% Now setup the default handelers and keys:
+
+% Define a key macro with one argument (\def or \edef)
+%
+% #1 = key
+% #2 = code
+%
+% Description:
+%
+% This command will setup things so the key/.@cmd contains a macro
+% that takes one parameter and has #2 as its code.
+%
+% Example:
+%
+% \pgfkeysdef{/my key}{\show#1}
+
+\long\def\pgfkeysdef#1#2{%
+ \long\def\pgfkeys@temp##1\pgfeov{#2}%
+ \pgfkeyslet{#1/.@cmd}{\pgfkeys@temp}%
+}
+\long\def\pgfkeysedef#1#2{%
+ \long\edef\pgfkeys@temp##1\pgfeov{#2}%
+ \pgfkeyslet{#1/.@cmd}{\pgfkeys@temp}%
+}
+
+
+% Define a key macro with mutliple arguments (\def or \edef)
+%
+% #1 = key
+% #2 = argument pattern
+% #2 = code
+%
+% Description:
+%
+% This command will setup things so the key/.@cmd contains a macro
+% that takes #2 as its parameter pattern and has #3 as its code.
+%
+% Example:
+%
+% \pgfkeysdefargs{/swap}{#1#2}{#2#1}
+
+\long\def\pgfkeysdefargs#1#2#3{%
+ \long\def\pgfkeys@temp#2\pgfeov{#3}%
+ \pgfkeyslet{#1/.@cmd}{\pgfkeys@temp}%
+ \pgfkeyssetvalue{#1/.@args}{#2\pgfeov}%
+ \pgfkeyssetvalue{#1/.@body}{#3}%
+}
+\long\def\pgfkeysedefargs#1#2#3{%
+ \long\edef\pgfkeys@temp#2\pgfeov{#3}%
+ \pgfkeyslet{#1/.@cmd}{\pgfkeys@temp}%
+ \pgfkeyssetvalue{#1/.@args}{#2\pgfeov}%
+ \pgfkeyssetvalue{#1/.@body}{#3}%
+}
+
+% Like \pgfkeysdefargs, but `#2' is an integer denoting the expected
+% *number* of arguments.
+%
+% There is a subtle difference between the 'args' command, when it
+% comes to spaces:
+% a key defined with defargs{#1#2} must not have spaces between the
+% arguments when it is used.
+%
+% See this:
+%
+%--------------------------------------------------
+% % defnargs:
+% \pgfkeysdefnargs{/a}{2}{1=`#1', 2=`#2'}
+% \pgfkeys{
+% /a=
+% {1}
+% {2}
+% }
+% ->defnargs: 1=`1', 2=`2'
+%
+% defargs:
+% \pgfkeysdefargs{/b}{#1#2}{1=`#1', 2=`#2'}
+% \pgfkeys{
+% /b=
+% {1}
+% {2}
+% }
+% ->defargs: 1=`1', 2=` 2' (note the space!)
+%
+% defargs:
+% \pgfkeysdefargs{/b}{#1#2}{1=`#1', 2=`#2'}
+% \pgfkeys{
+% /b=
+% {1}%
+% {2}
+% }
+% ->defargs: 1=`1', 2=`2'
+%--------------------------------------------------
+\long\def\pgfkeysdefnargs#1#2#3{\pgfkeysdefnargs@{#1}{#2}{#3}{\def}}%
+\long\def\pgfkeysedefnargs#1#2#3{\pgfkeysdefnargs@{#1}{#2}{#3}{\edef}}%
+\long\def\pgfkeysdefnargs@#1#2#3#4{%
+ \ifcase#2\relax
+ \pgfkeyssetvalue{#1/.@args}{}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2##3}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2##3##4}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2##3##4##5}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2##3##4##5##6}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2##3##4##5##6##7}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2##3##4##5##6##7##8}%
+ \or
+ \pgfkeyssetvalue{#1/.@args}{##1##2##3##4##5##6##7##8##9}%
+ \else
+ \pgfkeys@error{\string\pgfkeysdefnargs: expected <= 9 arguments, got #2}%
+ \fi
+ \pgfkeysgetvalue{#1/.@args}\pgfkeys@tempargs
+ \def\pgfkeys@temp{\expandafter#4\csname pgfk@#1/.@@body\endcsname}%
+ \expandafter\pgfkeys@temp\pgfkeys@tempargs{#3}%
+ % eliminate the \pgfeov at the end such that TeX gobbles spaces
+ % by using
+ % \pgfkeysdef{#1}{\pgfkeysvalueof{#1/.@@body}##1}
+ % (with expansion of '#1'):
+ \edef\pgfkeys@tempargs{\noexpand\pgfkeysvalueof{#1/.@@body}}%
+ \def\pgfkeys@temp{\pgfkeysdef{#1}}%
+ \expandafter\pgfkeys@temp\expandafter{\pgfkeys@tempargs##1}%
+ \pgfkeyssetvalue{#1/.@body}{#3}%
+}
+
+
+
+% Defining a key command
+
+\pgfkeysdef{/handlers/.code}{\pgfkeysdef{\pgfkeyscurrentpath}{#1}}
+\pgfkeysdef{/handlers/.code 2 args}{\pgfkeysdefargs{\pgfkeyscurrentpath}{##1##2}{#1}}
+\pgfkeysdef{/handlers/.ecode}{\pgfkeysedef{\pgfkeyscurrentpath}{#1}}
+\pgfkeysdef{/handlers/.ecode 2 args}{\pgfkeysedefargs{\pgfkeyscurrentpath}{##1##2}{#1}}
+\pgfkeysdefnargs{/handlers/.code args}{2}{\pgfkeysdefargs{\pgfkeyscurrentpath}{#1}{#2}}
+\pgfkeysdefnargs{/handlers/.ecode args}{2}{\pgfkeysedefargs{\pgfkeyscurrentpath}{#1}{#2}}
+\pgfkeysdefnargs{/handlers/.code n args}{2}{\pgfkeysdefnargs{\pgfkeyscurrentpath}{#1}{#2}}
+\pgfkeysdefnargs{/handlers/.ecode n args}{2}{\pgfkeysedefnargs{\pgfkeyscurrentpath}{#1}{#2}}
+
+% Adding to a key command
+
+\pgfkeys{/handlers/.add code/.code 2 args=%
+ % Find out, whether with args or not.
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@args}%
+ {% Yes, so add to body and reuse args
+ \pgfkeysaddvalue{\pgfkeyscurrentpath/.@body}{#1}{#2}%
+ % Redefine code
+ {%
+ \pgfkeysgetvalue{\pgfkeyscurrentpath/.@args}{\pgfkeys@tempargs}%
+ \pgfkeysgetvalue{\pgfkeyscurrentpath/.@body}{\pgfkeys@tempbody}%
+ \def\pgfkeys@marshal{\expandafter\gdef\expandafter\pgfkeys@global@temp\pgfkeys@tempargs}%
+ \expandafter\pgfkeys@marshal\expandafter{\pgfkeys@tempbody}%
+ }%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@@body}{%
+ % support for \pgfkeysndefargs:
+ \pgfkeyslet{\pgfkeyscurrentpath/.@@body}{\pgfkeys@global@temp}%
+ }{%
+ % support for \pgfkeysdefargs:
+ \pgfkeyslet{\pgfkeyscurrentpath/.@cmd}{\pgfkeys@global@temp}%
+ }%
+ }%
+ {%
+ % No, so single argument (simple \pgfkeysdef). Redefine accordingly.
+ {%
+ \toks0{#1}%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@cmd}%
+ {\pgfkeys@temptoks\expandafter\expandafter\expandafter{\csname pgfk@\pgfkeyscurrentpath/.@cmd\endcsname##1\pgfeov}}%
+ {\pgfkeys@temptoks{}}%
+ \toks1{#2}%
+ \xdef\pgfkeys@global@temp{\the\toks0 \the\pgfkeys@temptoks \the\toks1 }%
+ }%
+ \expandafter\def\expandafter\pgfkeys@temp\expandafter##\expandafter1\expandafter\pgfeov\expandafter{\pgfkeys@global@temp}%
+ \pgfkeyslet{\pgfkeyscurrentpath/.@cmd}\pgfkeys@temp%
+ }%
+}
+\pgfkeys{/handlers/.prefix code/.code=\pgfkeys{\pgfkeyscurrentpath/.add code={#1}{}}}%
+\pgfkeys{/handlers/.append code/.code=\pgfkeys{\pgfkeyscurrentpath/.add code={}{#1}}}%
+
+
+% Defining a style
+
+\pgfkeys{/handlers/.style/.code=\pgfkeys{\pgfkeyscurrentpath/.code=\pgfkeysalso{#1}}}
+\pgfkeys{/handlers/.estyle/.code=\pgfkeys{\pgfkeyscurrentpath/.ecode=\noexpand\pgfkeysalso{#1}}}
+\pgfkeys{/handlers/.style args/.code 2 args=\pgfkeys{\pgfkeyscurrentpath/.code args={#1}{\pgfkeysalso{#2}}}}
+\pgfkeys{/handlers/.estyle args/.code 2 args=\pgfkeys{\pgfkeyscurrentpath/.ecode args={#1}{\noexpand\pgfkeysalso{#2}}}}
+\pgfkeys{/handlers/.style 2 args/.code=\pgfkeys{\pgfkeyscurrentpath/.code 2 args=\pgfkeysalso{#1}}}
+\pgfkeys{/handlers/.style n args/.code 2 args=\pgfkeys{\pgfkeyscurrentpath/.code n args={#1}{\pgfkeysalso{#2}}}}
+
+% Adding to a style
+
+\pgfkeys{/handlers/.add style/.code 2 args=\pgfkeys{\pgfkeyscurrentpath/.add code={\pgfkeysalso{#1}}{\pgfkeysalso{#2}}}}%
+\pgfkeys{/handlers/.prefix style/.code=\pgfkeys{\pgfkeyscurrentpath/.add code={\pgfkeysalso{#1}}{}}}%
+\pgfkeys{/handlers/.append style/.code=\pgfkeys{\pgfkeyscurrentpath/.add code={}{\pgfkeysalso{#1}}}}%
+
+
+% Defining a value
+
+\pgfkeys{/handlers/.initial/.code=\pgfkeyssetvalue{\pgfkeyscurrentpath}{#1}}
+\pgfkeys{/handlers/.add/.code 2 args=\pgfkeysaddvalue{\pgfkeyscurrentpath}{#1}{#2}}
+\pgfkeys{/handlers/.prefix/.code=\pgfkeysaddvalue{\pgfkeyscurrentpath}{#1}{}}
+\pgfkeys{/handlers/.append/.code=\pgfkeysaddvalue{\pgfkeyscurrentpath}{}{#1}}
+\pgfkeys{/handlers/.get/.code=\pgfkeysgetvalue{\pgfkeyscurrentpath}{#1}}
+\pgfkeys{/handlers/.link/.code=\pgfkeyssetvalue{\pgfkeyscurrentpath}{\pgfkeysvalueof{#1}}}
+
+
+% Defining a default
+
+\pgfkeys{/handlers/.default/.code=\pgfkeyssetvalue{\pgfkeyscurrentpath/.@def}{#1}}
+\pgfkeys{/handlers/.value required/.code=\pgfkeyssetvalue{\pgfkeyscurrentpath/.@def}{\pgfkeysvaluerequired}}
+\pgfkeys{/handlers/.value forbidden/.code=\pgfkeys{\pgfkeyscurrentpath/.add code=%
+{%
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text%
+ \else%
+ \pgfkeysvalueof{/errors/value forbidden/.@cmd}\pgfkeyscurrentkey\pgfkeyscurrentvalue\pgfeov%
+ \fi%
+}{}}}
+
+
+% High-level cmds
+
+\pgfkeys{/handlers/.store in/.code=\pgfkeysalso{\pgfkeyscurrentpath/.code=\def#1{##1}}}
+\pgfkeys{/handlers/.estore in/.code=\pgfkeysalso{\pgfkeyscurrentpath/.code=\edef#1{##1}}}
+
+\pgfkeys{/handlers/.is if/.code=\pgfkeysalso{%
+ \pgfkeyscurrentpath/.code=\pgfkeys@handle@boolean{#1}{##1},
+ \pgfkeyscurrentpath/.default=true%
+ }%
+}
+\def\pgfkeys@handle@boolean#1#2{%
+ \pgfkeys@ifcsname#1#2\endcsname%
+ \csname#1#2\endcsname%
+ \else%
+ \pgfkeysvalueof{/errors/boolean expected/.@cmd}\pgfkeyscurrentkey{#2}\pgfeov%
+ \fi
+}
+
+\pgfkeys{/handlers/.is choice/.code=%
+ \pgfkeys{%
+ \pgfkeyscurrentpath/.cd,%
+ .code=\expandafter\pgfkeysalso\expandafter{\pgfkeyscurrentkey/##1},
+ .unknown/.style={/errors/unknown choice value=\pgfkeyscurrentkey\pgfkeyscurrentvalue}}}
+
+
+% Repeatedly setting a key
+
+\pgfkeys{/handlers/.list/.code=%
+ {%
+ % Use foreach to unfold the list
+ \let\pgf@keys@temp=\pgfutil@empty%
+ \foreach \pgf@keys@key in{#1}%
+ {\expandafter\expandafter\expandafter\gdef%
+ \expandafter\expandafter\expandafter\pgf@keys@temp%
+ \expandafter\expandafter\expandafter{\expandafter\pgf@keys@temp\expandafter{\pgf@keys@key}}}%
+ \edef\pgf@keys@list@path{\pgfkeyscurrentpath}%
+ \expandafter\expandafter\expandafter\pgf@keys@do@list%
+ \expandafter\expandafter\expandafter{\expandafter\pgf@keys@list@path\expandafter}\pgf@keys@temp\pgf@stop%
+ }%
+}
+\def\pgf@keys@do@list#1{\pgfutil@ifnextchar\bgroup{\pgf@keys@do@list@item{#1}}\pgfutil@gobble}
+\def\pgf@keys@do@list@item#1#2{\pgfkeysalso{#1={#2}}\pgf@keys@do@list{#1}}
+
+
+% Forwarding
+
+\pgfkeys{/handlers/.forward to/.code=%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@cmd}{}{\pgfkeysdef{\pgfkeyscurrentpath}{}}
+ \pgfkeys{\pgfkeyscurrentpath/.add code={}{\pgfkeys{#1={##1}}}}
+}
+
+
+% Inspection handlers
+
+\pgfkeys{/handlers/.show value/.code=\pgfkeysgetvalue{\pgfkeyscurrentpath}{\pgfkeysshower}\show\pgfkeysshower} % inspect the value
+\pgfkeys{/handlers/.show code/.code=\pgfkeysgetvalue{\pgfkeyscurrentpath/.@cmd}{\pgfkeysshower}\show\pgfkeysshower} % inspect the body of the command
+
+
+% First char syntax handlers
+\pgfkeys{/handlers/first char syntax/.is if=pgfkeys@syntax@handlers}
+
+% Path handling
+
+% Prepares the .unknown handler used by '.search also'.
+% It will be stored into \pgfkeys@global@temp.
+\def\pgfkeys@searchalso@prepare@unknown@handler#1{%
+ \global\def\pgfkeys@global@temp##1\pgfeov{}%
+ \pgfkeys@searchalso@parse#1,\pgfkeys@mainstop
+ {%
+ \toks0=\expandafter{\pgfkeys@global@temp##1\pgfeov}%
+ \toks1={\def\pgfutilnext{\pgfkeysvalueof{/handlers/.unknown/.@cmd}##1\pgfeov}\pgfutilnext}%
+ \xdef\pgfkeys@global@temp{%
+ \noexpand\ifpgfkeysaddeddefaultpath
+ \noexpand\pgfkeyssuccessfalse
+ \noexpand\let\noexpand\pgfkeys@searchalso@name=\noexpand\pgfkeyscurrentkeyRAW
+ \the\toks0 % one or more /.try things; one for each path. The last element won't have a /.try
+ %\noexpand\ifpgfkeyssuccess
+ %\noexpand\else
+ % \the\toks1 % invoke /handlers/.unknown handler
+ %\noexpand\fi
+ \noexpand\else
+ \the\toks1 % invoke /handlers/.unknown handler
+ \noexpand\fi
+ }%
+ \expandafter\gdef\expandafter\pgfkeys@global@temp\expandafter##\expandafter1\expandafter\pgfeov\expandafter{\pgfkeys@global@temp}%
+ }%
+}%
+
+\def\pgfkeys@searchalso@parse{\futurelet\pgfkeys@possiblerelax\pgfkeys@searchalso@parse@main}
+\def\pgfkeys@searchalso@parse@main{%
+ \ifx\pgfkeys@possiblerelax\pgfkeys@mainstop%
+ \expandafter\pgfkeys@cleanup%
+ \else%
+ \expandafter\pgfkeys@searchalso@appendentry%
+ \fi%
+}
+\def\pgfkeys@searchalso@appendentry#1,#2{%
+ \def\pgfkeys@searchalso@nexttok{#2}%
+ \pgfkeys@spdef\pgfkeys@temp{#1}%
+ {%
+ \toks0=\expandafter{\pgfkeys@global@temp##1\pgfeov}%
+ \toks1=\expandafter{\pgfkeys@temp}%
+ \toks2={##1}%
+ \xdef\pgfkeys@global@temp{%
+ \the\toks0 % the space is important!
+ \noexpand\ifpgfkeyssuccess\noexpand\else
+ \noexpand\pgfqkeys{\the\toks1 }{\noexpand\pgfkeys@searchalso@name
+ \ifx\pgfkeys@searchalso@nexttok\pgfkeys@mainstop\else/.try\fi={\the\toks2 }}%
+ \noexpand\fi}%
+ \expandafter\gdef\expandafter\pgfkeys@global@temp\expandafter##\expandafter1\expandafter\pgfeov\expandafter{\pgfkeys@global@temp}%
+ }%
+ \pgfkeys@searchalso@parse#2%
+}
+\pgfkeys{%
+ /handlers/.is family/.code=\pgfkeys{\pgfkeyscurrentpath/.ecode=\edef\noexpand\pgfkeysdefaultpath{\pgfkeyscurrentpath/}},%
+ /handlers/.cd/.code=\edef\pgfkeysdefaultpath{\pgfkeyscurrentpath/},%
+ /handlers/.search also/.code={%
+ \pgfkeys@searchalso@prepare@unknown@handler{#1}%
+%\message{I prepared the '\pgfkeyscurrentpath/.unknown' handler \meaning\pgfkeys@global@temp\space for '#1'.}%
+ \pgfkeyslet{\pgfkeyscurrentpath/.unknown/.@cmd}{\pgfkeys@global@temp}%
+ }
+}%
+
+
+% Value expansion
+
+\pgfkeys{/handlers/.expand once/.code=\expandafter\pgfkeys@exp@call\expandafter{#1}}
+\pgfkeys{/handlers/.expand twice/.code=\expandafter\expandafter\expandafter\pgfkeys@exp@call\expandafter\expandafter\expandafter{#1}}
+\pgfkeys{/handlers/.expanded/.code=\edef\pgfkeys@temp{#1}\expandafter\pgfkeys@exp@call\expandafter{\pgfkeys@temp}}
+
+\long\def\pgfkeys@exp@call#1{\pgfkeysalso{\pgfkeyscurrentpath={#1}}}
+
+% Try to set a key and do nothing if not define
+
+\newif\ifpgfkeyssuccess
+\pgfkeys{/handlers/.try/.code=\pgfkeys@try}
+\pgfkeys{/handlers/.retry/.code=\ifpgfkeyssuccess\else\pgfkeys@try\fi}
+\def\pgfkeys@try{%
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentpath}% make sure that \pgfkeys@code doesn't know about 'try'. Important for .is choice
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text% Hmm... no value
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@def}%
+ {\pgfkeysgetvalue{\pgfkeyscurrentpath/.@def}{\pgfkeyscurrentvalue}}
+ {}% no default, so leave it
+ \fi%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@cmd}%
+ {%
+ \pgfkeysgetvalue{\pgfkeyscurrentpath/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov%
+ \pgfkeyssuccesstrue%
+ }%
+ {%
+ \pgfkeysifdefined{\pgfkeyscurrentpath}%
+ {%
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text%
+ \pgfkeysvalueof{\pgfkeyscurrentpath}%
+ \else%
+ \pgfkeyslet{\pgfkeyscurrentpath}\pgfkeyscurrentvalue%
+ \fi%
+ \pgfkeyssuccesstrue%
+ }%
+ {%
+ \pgfkeys@split@path%
+ \pgfkeysifdefined{/handlers/\pgfkeyscurrentname/.@cmd}{%
+ % in the standard configuration, this check here is redundand
+ % because pgfkeys@ifexecutehandler === true.
+ % It is only interesting for 'handle only existing'.
+ \pgfkeys@ifexecutehandler{%
+ \pgfkeysgetvalue{/handlers/\pgfkeyscurrentname/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov
+ \pgfkeyssuccesstrue%
+ }{%
+ \pgfkeyssuccessfalse
+ }%
+ }{%
+ \pgfkeyssuccessfalse
+ }%
+ }%
+ }%
+}
+
+% Utilities
+
+\pgfkeys{/utils/exec/.code=#1} % simply execute the given code directly.
+
+
+% Errors
+
+\pgfkeys{/errors/boolean expected/.code 2 args=\pgfkeys@error{%
+ Boolean parameter of key '#1' must be 'true' or 'false', not
+ '#2'. I am going to ignore it}}
+\pgfkeys{/errors/value required/.code 2 args=\pgfkeys@error{%
+ The key '#1' requires a value. I am going to ignore this key}{}}
+\pgfkeys{/errors/value forbidden/.code 2 args=\pgfkeys@error{%
+ You may not specify a value for the key '#1'. I am going to ignore
+ the value '#2' that you provided}}
+\pgfkeys{/errors/unknown choice value/.code 2 args=\pgfkeys@error{%
+ Choice '\pgfkeyscurrentname' unknown in key
+ '\pgfkeyscurrentpath'. I am going to ignore this key}}
+\pgfkeys{/errors/unknown key/.code 2 args=\pgfkeys@error{%
+ I do not know the key '#1' and I am going to ignore it. Perhaps
+ you misspelled it}}
+
+\pgfkeys{/handlers/.unknown/.code=%
+ {%
+ \let\pgfkeys@orig@key=\pgfkeyscurrentkey%
+ \pgfkeysalso{/errors/unknown key=\pgfkeys@orig@key{}}%
+ }
+}
+
+\pgfkeys{
+ /handler config/.is choice,
+ /handler config/all/.code={%
+ \let\pgfkeys@case@three=\pgfkeys@case@three@handleall
+ \let\pgfkeys@ifexecutehandler=\pgfkeys@ifexecutehandler@handleall
+ },
+ /handler config/only existing/.code={%
+ \let\pgfkeys@case@three=\pgfkeys@case@three@handle@restricted
+ \let\pgfkeys@ifexecutehandler=\pgfkeys@ifexecutehandler@handleonlyexisting
+ },
+ /handler config/full or existing/.code={%
+ \let\pgfkeys@case@three=\pgfkeys@case@three@handle@restricted
+ \let\pgfkeys@ifexecutehandler=\pgfkeys@ifexecutehandler@handlefullorexisting
+ },
+ /handler config/only existing/add exception/.code={\pgfkeysaddhandleonlyexistingexception{#1}},
+}%
+\pgfkeysaddhandleonlyexistingexception{.cd}%
+\pgfkeysaddhandleonlyexistingexception{.try}%
+\pgfkeysaddhandleonlyexistingexception{.retry}%
+\pgfkeysaddhandleonlyexistingexception{.lastretry}%
+\pgfkeysaddhandleonlyexistingexception{.unknown}%
+
+
+\input pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex
new file mode 100644
index 0000000000..b40528c43a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex
@@ -0,0 +1,1041 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 25. Dez 18:14:20 CET 2012 %%%
+
+
+
+% Copyright 2008 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+%
+% This file contains additions to pgfkeys.code.tex (loaded
+% automatically at the end of pgfkeys.code.tex)
+%
+% Improvements:
+%
+% - option filtering
+% you provide
+% - a boolean predicate
+% - a "filter handler" which will be invoked for non-matching options,
+% - a key=value list as usual.
+% The filter sets only matching options and invokes the handler for
+% unmatching ones.
+%
+% - Fast family support as in xkeyval.
+% - A key like /my tree/my option can be associated with /my family
+% - You can efficiently set keys which belong to a set of "active"
+% families.
+% Remaining options can be collected into a macro.
+
+% WARNING:
+% this file overwrites
+% \pgfkeys@addpath
+% \pgfkeys@nevermind
+%
+% all other features are 'additive'
+
+
+% these implementations will be switched dynamically with their
+% filtered versions (in \pgfkeys@install@filter@and@invoke)
+\let\pgfkeys@orig@case@one=\pgfkeys@case@one
+\let\pgfkeys@orig@@set=\pgfkeys@@set
+\let\pgfkeys@orig@@qset=\pgfkeys@@qset
+\let\pgfkeys@orig@try=\pgfkeys@try
+\let\pgfkeys@orig@unknown=\pgfkeys@unknown
+
+\newif\ifpgfkeysfilteringisactive
+\newif\ifpgfkeysfiltercontinue
+\let\pgfkeys@key@predicate=\pgfkeys@empty
+\let\pgfkeys@filtered@handler=\pgfkeys@empty
+\newtoks\pgfkeys@tmptoks
+
+% Performs 'filtered' key settings.
+%
+% For every option for which the path prefixing has already been done,
+% the current key filter predicate will be invoked. If the predicate
+% returns true, pgfkeys will process this key in the normal manner.
+% If not, a key filter handler will be invoked.
+%
+% The *predicate* and *handler* semantics are as follows:
+% PRECONDITION:
+% 1. The variables
+% \pgfkeyscurrentkey (full path including name)
+% \pgfkeyscurrentkeyRAW (the current key as it has been
+% found in the key=value list
+% without path modification)
+% \pgfkeyscurrentvalue
+% are all set. If the current key is a handler variable,
+% \pgfkeyscurrentname
+% and
+% \pgfkeyscurrentpath
+% are also set.
+% 2. The type of option has already been checked, that means
+% case (1) whether '.@cmd' exists
+% case (2) whether the key as such has its value
+% case (3) it is a handler like '.code', '.cd' or whatever.
+% case (0) it is unknown.
+% The actual case number (0-3) will be provided as contents
+% of the macro
+% \pgfkeyscasenumber.
+% It is always a one-character token, so it may be compared
+% with both, \ifnum or \if.
+% Please note that unknown options will be processed with
+% the usual '.unknown' handlers unless the key filter takes
+% control over unknown options as well.
+%
+% POSTCONDITION:
+% the predicate sets
+% \pgfkeysfiltercontinuetrue
+% or
+% \pgfkeysfiltercontinuefalse
+% (the boolean \ifpgfkeysfiltercontinue).
+% Depending on this 'if', option processing will be continued or
+% skipped.
+%
+% The handler can do anything with the option, for example collect
+% unmatched ones.
+%
+% ATTENTION: \pgfkeysfiltered can't be nested (yet). Use the
+% \pgfkeyspredicateAND if you need multiple predicates at once.
+% Nesting would produce unexpected results because the current filter
+% state can't be stored/restored without TeX-groups, therefor it is
+% disabled.
+%
+% ATTENTION: you can't filter error messages.
+%
+% REMARK: In case (3), the macros \pgfkeyscurrentpath and
+% \pgfkeyscurrentname have already been computed, you do not need to
+% invoke \pgfkeyssplitpath. In any other case, neither path nor name
+% are required for the options processing - if you need them for
+% predicates/handlers, you need to compute them by hand.
+%
+%
+% Example:
+% \def\unmatched{}
+% \pgfkeys{/pgf/key filters/is descendant of/.install key filter=/my group}
+% \pgfkeys{/pgf/key filter handlers/append filtered to/.install key filter handler=\unmatched}
+% \pgfkeysfiltered%
+% {/my group/option 1=value 1,/tikz/option 2=value 2}
+% ->
+% will set '/my group/option 1' as usual, but '/tikz/option 2' will not
+% be set. Instead, it will be appended to '\unmatched' such that
+% \unmatched = {/tikz/option 2=value2}
+% after the operation.
+%
+% Arguments:
+% #1: key-value list.
+\def\pgfkeysfiltered{%
+ % produce
+ % '{<default path>}'
+ % each expanded exactly one time into the register:
+ \expandafter\pgfkeysfiltered@@install\expandafter{\pgfkeysdefaultpath}%
+}
+
+% #1: old value of default path.
+% #2: key-value-list.
+\def\pgfkeysfiltered@@install#1#2{%
+ \pgfkeys@install@filter@and@invoke{%
+ \let\pgfkeysdefaultpath\pgfkeys@root%
+ \pgfkeys@parse#2,\pgfkeys@mainstop%
+ \def\pgfkeysdefaultpath{#1}%
+ }%
+}
+
+% Assuming that macro #1 contains a key=value list, this command
+% performs an \pgfkeysalso command for the content of macro #1.
+%
+% It can be used in conjunction with
+% - \pgfkeysfiltered and
+% - \pgfkeysappendfilterednamestomacro:
+% the first pass fill only process options matching the filter, then,
+% a \pgfkeysalsofrom can be used at a later time to set the remaining
+% options.
+%
+% Example:
+% \pgfkeys{/my group/.cd,/utils/exec=\pgfkeysalsofrom\filtered}
+\long\def\pgfkeysalsofrom#1{%
+ \expandafter\pgfkeysalso\expandafter{#1}%
+}
+
+% The same as \pgfkeysalsofrom, but it invokes \pgfkeysalsofiltered.
+\long\def\pgfkeysalsofilteredfrom#1{%
+ \expandafter\pgfkeysalsofiltered\expandafter{#1}%
+}
+
+% #1 = options
+\long\long\def\pgfkeysalsofiltered#1{%
+ \pgfkeys@install@filter@and@invoke{\pgfkeysalso{#1}}%
+}%
+
+% The same like \pgfkeysfiltered, but with quick search path setting.
+%
+% #1: default path
+% #2: key-value-pairs
+\long\def\pgfqkeysfiltered#1{%
+ \expandafter\pgfqkeysfiltered@@install\expandafter{\pgfkeysdefaultpath}{#1}%
+}
+
+% #1: old value of default path.
+% #2: default path
+% #3: key-value-list.
+\long\def\pgfqkeysfiltered@@install#1#2#3{%
+ \pgfkeys@install@filter@and@invoke{%
+ \def\pgfkeysdefaultpath{#2/}\pgfkeys@parse#3,\pgfkeys@mainstop\def\pgfkeysdefaultpath{#1}%
+ }%
+}
+
+% Family management
+%
+% The family code provides the following features:
+% 1. every key can be associated with 0 or 1 'family'.
+% 2. Families are a loose association which are independend of the key
+% hierarchy.
+% For example, /my tree/key1 can belong to family /tikz.
+%
+% 3. It is possible to "activate" or "deactivate" single families.
+% Furthermore, it is possible to set only keys which belong to
+% active families (using \pgfkeysfiltered).
+% 4. Runtime complexities:
+% If you have N options and you only want to process K active
+% families, the runtime is O( N + K ):
+% - activate every family O(K)
+% - use \pgfkeyshasactivefamily as filter predicate O(N)
+% - deactivate every family O(K)
+
+
+% Activates family #1.
+%
+% #1 maybe a macro.
+\def\pgfkeysactivatefamily#1{%
+ \pgfkeysiffamilydefined
+ {#1}%
+ {\csname pgfk@#1/familyactivetrue\endcsname}%
+ {\pgfkeysvalueof{/errors/family unknown/.@cmd}{#1}\pgfeov}%
+%\message{[ACTIVATING FAMILY #1]}%
+}
+
+% Deactivates family #1.
+%
+% #1 maybe a macro.
+\def\pgfkeysdeactivatefamily#1{%
+ \pgfkeysiffamilydefined
+ {#1}%
+ {\csname pgfk@#1/familyactivefalse\endcsname}%
+ {\pgfkeysvalueof{/errors/family unknown/.@cmd}{#1}\pgfeov}%
+%\message{[DEACTIVATING FAMILY #1]}%
+}
+
+% Activates all families in the comma separated list #1.
+%
+% It will also generate code for deactivation of all those families
+% into the command #2.
+%
+% #1: a comma-separated list of fully qualified family names.
+% #2: a command which will be filled with a deactivate-all command.
+\def\pgfkeysactivatefamilies#1#2{%
+ \pgfkeyssavekeyfilterstateto\pgfkeys@cur@state
+ \expandafter\pgfkeysactivatefamilies@impl\expandafter{\pgfkeys@cur@state}{#1}{#2}%
+}
+% #1: commands needed to restore the old filtering state
+% #2: family name list
+% #3: macro name for de-activate command
+\def\pgfkeysactivatefamilies@impl#1#2#3{%
+ \pgfkeysinstallkeyfilter{/pgf/key filters/false}{}%
+ \let#3=\pgfkeys@empty%
+ \def\pgfkeys@filtered@handler{\pgfkeys@family@activate@handler{#3}}%
+ \pgfkeysalsofiltered{#2}%
+ #1%
+}
+
+\def\pgfkeys@family@activate@handler#1{%
+ \pgfkeysactivatefamily{\pgfkeyscurrentkey}%
+ % produce
+ % <old list> '\pgfkeysdeactivatefamily{' <current key> '}'
+ \pgfkeys@tmptoks=\expandafter\expandafter\expandafter{\expandafter#1\expandafter\pgfkeysdeactivatefamily\expandafter{\pgfkeyscurrentkey}}%
+ \edef#1{\the\pgfkeys@tmptoks}%
+}
+
+% If for testing whether a family exists.
+%
+% #1 = fully qualified family name
+% #2 = if-case
+% #3 = else-case
+%
+% Description:
+%
+% If the family exists, #2 will be executed. Otherwise, #3 will be
+% called.
+\long\def\pgfkeysiffamilydefined#1#2#3{\pgfkeys@ifcsname ifpgfk@#1/familyactive\endcsname#2\else#3\fi}
+
+% Sets the TeX boolean
+% \ifpgfkeysfiltercontinue := ( family #1 is active )
+%
+% Argument:
+% #1 the family name. Maybe a macro.
+\def\pgfkeysisfamilyactive#1{%
+ \pgfkeysiffamilydefined{#1}{%
+ \expandafter\let\expandafter\ifpgfkeysfiltercontinue\csname ifpgfk@#1/familyactive\endcsname
+ }{%
+ \pgfkeysvalueof{/errors/family unknown/.@cmd}{#1}\pgfeov%
+ \expandafter\expandafter\expandafter\let\csname ifpgfkeysfiltercontinue\endcsname\csname iffalse\endcsname
+ }%
+}%
+
+% Retrieve the family of full key #1 into macro #2.
+%
+% Will set the TeX boolean \ifpgfkeyssuccess to whether the full key
+% really has a family.
+%
+% The family for any key is stored in the sub-key #1/family.
+%
+% Parameters:
+% #1: the full key name for which the family is requested. Maybe a
+% macro.
+% #2: a macro name which will be filled with the result.
+\def\pgfkeysgetfamily#1#2{%
+ \pgfkeysifdefined{#1/family}{\pgfkeysgetvalue{#1/family}{#2}\pgfkeyssuccesstrue}{\pgfkeyssuccessfalse}%
+}
+
+% Equivalent to \pgfkeys{#1/.belongs to family=#2}
+\def\pgfkeyssetfamily#1#2{%
+ \pgfkeysiffamilydefined{#2}{%
+ \pgfkeyssetvalue{#1/family}{#2}%
+ }{%
+ \pgfkeysalso{/errors/family unknown=#2}%
+ }%
+}%
+
+
+% Sets \ifpgfkeysfiltercontinue to true iff the current key belongs to
+% the /errors tree.
+\long\def\pgfkeys@cur@is@descendant@of@errors{%
+ \expandafter\pgfkeys@cur@is@descendant@of@errors@impl\pgfkeyscurrentkey/errors\pgf@@eov
+}%
+\long\def\pgfkeys@cur@is@descendant@of@errors@impl#1/errors#2\pgf@@eov{%
+ \def\pgfkeyspred@TMP{#1}%
+ \ifx\pgfkeyspred@TMP\pgfkeys@empty
+%\message{[SPECIAL CHECK] '\pgfkeyscurrentkey' is descendant of '/errors': TRUE.}%
+ \pgfkeysfiltercontinuetrue
+ \else
+%\message{[SPECIAL CHECK] '\pgfkeyscurrentkey' is descendant of '/errors': FALSE.}%
+ \pgfkeysfiltercontinuefalse
+ \fi
+}%
+
+% \pgfkeysinterruptkeyfilter
+% ...
+% \endpgfkeysinterruptkeyfilter
+% temporarily interrupts key filtering and enables it in
+% \endpgfkeysinterruptkeyfilter.
+%
+% If key filtering it not active, this has no effect at all.
+%
+% REMARK:
+% \pgfkeysinterruptkeyfilter...\endpgfkeysinterruptkeyfilter does NOT
+% introduce a \TeX-group.
+\def\pgfkeysinterruptkeyfilter{%
+ \ifpgfkeysfilteringisactive
+ \let\pgfkeys@case@one=\pgfkeys@orig@case@one
+ \let\pgfkeys@try=\pgfkeys@orig@try
+ \let\pgfkeys@unknown=\pgfkeys@orig@unknown
+ \fi
+}
+
+\def\endpgfkeysinterruptkeyfilter{%
+ \ifpgfkeysfilteringisactive
+ \let\pgfkeys@case@one=\pgfkeys@case@one@filtered
+ \let\pgfkeys@try=\pgfkeys@try@filtered
+ \let\pgfkeys@unknown=\pgfkeys@unknown@filtered
+ \fi
+}
+
+% Activates families #1, calls \pgfkeysfiltered and deactivates the
+% families afterwards.
+%
+% REMARK: you need to install a family-based key filter predicate
+% manually to benefit from the activated families!
+%
+% #1: comma separated family list
+% #2: key-value pairs
+%
+% @see \pgfkeysactivatefamiliesandfilteroptions
+\def\pgfkeysactivatefamiliesandfilteroptions#1#2{%
+ \pgfkeysactivatefamilies{#1}{\pgfkeys@family@deactivation}%
+ \pgfkeysfiltered{#2}%
+ \pgfkeys@family@deactivation
+}
+
+% The "quick" variant of \pgfkeysactivatefamiliesandfilteroptions: it
+% also assigns a default path.
+%
+% #1: comma separated family list
+% #2: default path
+% #3: key-value pairs
+\def\pgfqkeysactivatefamiliesandfilteroptions#1#2#3{%
+ \pgfkeysactivatefamilies{#1}{\pgfkeys@family@deactivation}%
+ \pgfqkeysfiltered{#2}{#3}%
+ \pgfkeys@family@deactivation
+}
+
+% Public version of split path:
+\def\pgfkeyssplitpath{\pgfkeys@split@path}%
+
+
+% The same as \pgfkeysactivatefamiliesandfilteroptions but just for
+% ONE family.
+%
+% #1: family (maybe a macro)
+% #2: key-value pairs
+\def\pgfkeysactivatesinglefamilyandfilteroptions#1#2{%
+ \pgfkeysactivatefamily{#1}%
+ \pgfkeysfiltered{#2}%
+ \pgfkeysdeactivatefamily{#1}%
+}
+
+% The "quick" variant of \pgfkeysactivatesinglefamilyandfilteroptions
+%
+% #1: family (maybe a macro)
+% #2: default path
+% #3: key-value pairs
+\def\pgfqkeysactivatesinglefamilyandfilteroptions#1#2#3{%
+ \pgfkeysactivatefamily{#1}%
+ \pgfqkeysfiltered{#2}{#3}%
+ \pgfkeysdeactivatefamily{#1}%
+}
+
+% Installs the key filter '#1' with argument '#2'.
+% This is equivalent to
+% \pgfkeys{#1/.install key filter=#2}
+%
+% The current values of the key filter handler is stored into the public
+% macros
+% \pgfkeyscurrentkeyfilter
+% and
+% \pgfkeyscurrentkeyfilterargs
+%
+% #1: a full key name; may be a macro
+% #2: optional arguments for the key. If the key expects more than one
+% argument, supply '{{first}{second}}'
+\def\pgfkeysinstallkeyfilter#1#2{%
+ \pgfkeysifdefined{#1/.@cmd}{%
+ \edef\pgfkeyscurrentkeyfilter{#1}%
+ \def\pgfkeyscurrentkeyfilterargs{#2}%
+ \pgfkeysgetvalue{#1/.@cmd}{\pgfkeys@key@predicate@}%
+ \def\pgfkeys@key@predicate{\pgfkeys@key@predicate@#2\pgfeov}%
+ }{%
+ \pgfkeysvalueof{/errors/no such key filter/.@cmd}{#1}{#2}\pgfeov%
+ }%
+}
+
+% Installs the key filter handler '#1' with argument '#2'.
+% This is equivalent to
+% \pgfkeys{#1/.install key filter handler=#2}
+%
+% The current values of the key filter handler is stored into the public
+% macros
+% \pgfkeyscurrentkeyfilterhandler
+% and
+% \pgfkeyscurrentkeyfilterhandlerargs
+%
+% #1: a full key name; may be a macro
+% #2: optional arguments for the handler. If the handler expects more than one
+% argument, supply '{{first}{second}}'
+\def\pgfkeysinstallkeyfilterhandler#1#2{%
+ \pgfkeysifdefined{#1/.@cmd}{%
+ \edef\pgfkeyscurrentkeyfilterhandler{#1}%
+ \def\pgfkeyscurrentkeyfilterhandlerargs{#2}%
+ \pgfkeysgetvalue{#1/.@cmd}{\pgfkeys@filtered@handler@}%
+ \def\pgfkeys@filtered@handler{\pgfkeys@filtered@handler@#2\pgfeov}%
+ }{%
+ \pgfkeysvalueof{/errors/no such key filter handler/.@cmd}{#1}{#2}\pgfeov%
+ }%
+}
+
+% Creates a macro which contains commands to re-activate the current
+% key filter and key filter handler. It can be used to temporarily
+% switch the key filter.
+\def\pgfkeyssavekeyfilterstateto#1{%
+ % produce the string
+ % \pgfkeysinstallkeyfilter{...}{...}
+ % \pgfkeysinstallkeyfilterhandler{...}{...}
+ % where each argument is expanded once
+ % FIXME: Do the same with less overhead!
+ \pgfkeys@tmptoks={\pgfkeysinstallkeyfilter}%
+ \pgfkeys@tmptoks=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\pgfkeys@tmptoks\expandafter{\pgfkeyscurrentkeyfilter}}%
+ \pgfkeys@tmptoks=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\pgfkeys@tmptoks\expandafter{\pgfkeyscurrentkeyfilterargs}\pgfkeysinstallkeyfilterhandler}%
+ \pgfkeys@tmptoks=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\pgfkeys@tmptoks\expandafter{\pgfkeyscurrentkeyfilterhandler}}%
+ \pgfkeys@tmptoks=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\pgfkeys@tmptoks\expandafter{\pgfkeyscurrentkeyfilterhandlerargs}}%
+ \edef#1{%
+ \the\pgfkeys@tmptoks
+ }%
+}
+
+
+\pgfkeys{%
+ /errors/family unknown/.code=\pgfkeys@error{%
+ Sorry, I do not know family '#1' and can't work with any assoicated family handling. Perhaps you misspelled it?},
+ /errors/no such key filter/.code 2 args=\pgfkeys@error{Sorry, there is no such key filter '#1'.},
+ /errors/no such key filter handler/.code 2 args=\pgfkeys@error{Sorry, there is no such key filter handler '#1'.},
+ % HANDLERS:
+ %
+ % .is family should
+ % 1. '.cd' into the families' path,
+ % 2. define booleans to activate/deactive the family
+ % (see \pgfkeysisfamilyactive)
+ % 3. make sure that \pgfkeyshasactivefamily returns true for
+ % the family itsself.
+ /handlers/.is family/.append code={%
+ %\newif is an \outer macro in plain tex, so this here is not portable:
+ %\expandafter\newif\csname if\pgfkeyscurrentpath/familyactive\endcsname
+ \edef\pgfkeyspred@TMP{pgfk@\pgfkeyscurrentpath/familyactive}%
+ \expandafter\pgfkeys@non@outer@newif\expandafter{\pgfkeyspred@TMP}%
+ \edef\pgfkeyspred@TMP{\pgfkeyscurrentpath/.belongs to family=\pgfkeyscurrentpath}%
+ \expandafter\pgfkeysalso\expandafter{\pgfkeyspred@TMP}%
+ },%
+ /handlers/.activate family/.code=\pgfkeysactivatefamily{\pgfkeyscurrentpath},
+ /handlers/.deactivate family/.code=\pgfkeysdeactivatefamily{\pgfkeyscurrentpath},
+ /handlers/.belongs to family/.code={\pgfkeyssetfamily{\pgfkeyscurrentpath}{#1}},%
+ %
+ %
+ % An addition to the '.try' and '.retry' handlers:
+ %
+ % It is the same as '.retry', but if the option is still unknown, the
+ % usual handlers for unknown keys will be invoked.
+ /handlers/.lastretry/.code={%
+ \ifpgfkeyssuccess\else
+ \pgfkeys@try
+ \ifpgfkeyssuccess\else
+ % discard the '.lastretry' suffix:
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentpath}%
+ \pgfkeys@split@path%
+ \pgfkeys@unknown
+ \fi
+ \fi
+ },
+ %
+ %
+ /handlers/.install key filter/.code={%
+ \pgfkeysinstallkeyfilter{\pgfkeyscurrentpath}{#1}%
+ },%
+ /handlers/.install key filter handler/.code={%
+ \pgfkeysinstallkeyfilterhandler{\pgfkeyscurrentpath}{#1}%
+ },%
+ %
+ %
+ % KEY FILTER HANDLERS:
+ %
+ /pgf/key filter handlers/append filtered to/.code={%
+ % Produce
+ % <orig key> '={' <value> '}'
+ % where both, the key and the value are expanded just ONCE:
+ \pgfkeys@tmptoks=\expandafter\expandafter\expandafter{\expandafter\pgfkeyscurrentkeyRAW\expandafter=\expandafter{\pgfkeyscurrentvalue}}%
+ \ifx#1\pgfkeys@empty
+ \else
+ % Produce <old list> ',' <orig key> '={' <value> '}'
+ \pgfkeys@tmptoks=\expandafter\expandafter\expandafter{\expandafter#1\expandafter,\the\pgfkeys@tmptoks}%
+ \fi
+ \edef#1{\the\pgfkeys@tmptoks}%
+ },%
+ /pgf/key filter handlers/ignore/.code={},
+ /pgf/key filter handlers/ignore/.install key filter handler,
+ /pgf/key filter handlers/log/.code={%
+ \immediate\write16{LOG: the option '\pgfkeyscurrentkey' (was originally '\pgfkeyscurrentkeyRAW') (case \pgfkeyscasenumber) has not been processed due to pgfkeysfiltered.}%
+ },
+ %
+ %
+ % KEY FILTER PREDICATES:
+ %
+ % Returns true iff the currently processed key belongs to an active family.
+ % A family is active if it has been activated before.
+ /pgf/key filters/active families/.code={%
+ \if\pgfkeyscasenumber0%
+ % unknown options shall be processed with the
+ % unknown-handlers.
+ \pgfkeysfiltercontinuetrue
+ \else
+ \if\pgfkeyscasenumber3%
+ \pgfkeysgetfamily\pgfkeyscurrentpath\pgfkeyspred@TMP
+ \else
+ \pgfkeysgetfamily\pgfkeyscurrentkey\pgfkeyspred@TMP
+ \fi
+ \ifpgfkeyssuccess
+ \pgfkeysisfamilyactive{\pgfkeyspred@TMP}%
+ \else% Ok, it does not belong to any family.
+ \pgfkeysfiltercontinuefalse
+ \fi
+ \fi
+ },%
+ %
+ %
+ %
+ % This filter works as follows:
+ % 1. if the current key belongs to a family:
+ % return whether its family is active,
+ % 2. if the current key does NOT belong to a family:
+ % return the result of criterion '#1',
+ % 3. the current key is unknown:
+ % return the result of criterion '#2'.
+ %
+ % Arguments:
+ % #1: the predicate which will be invoked in case 2.
+ % It will be invoked with the current case number as argument.
+ % #2: the predicate which will be invoked in case 3 with
+ % the current case number as argument.
+ /pgf/key filters/active families or no family/.code 2 args={%
+ \if\pgfkeyscasenumber0%
+ \pgfkeysevalkeyfilterwith{#2}%
+ \else
+ \if\pgfkeyscasenumber3%
+ \pgfkeysgetfamily\pgfkeyscurrentpath\pgfkeyspred@TMP
+ \else
+ \pgfkeysgetfamily\pgfkeyscurrentkey\pgfkeyspred@TMP
+ \fi
+ \ifpgfkeyssuccess
+ \pgfkeysisfamilyactive{\pgfkeyspred@TMP}%
+ \else% Ok, it does not belong to any family.
+ \pgfkeysevalkeyfilterwith{#1}%
+ \fi
+ \fi
+ },
+ /pgf/key filters/active families or no family DEBUG/.code 2 args={%
+ \if\pgfkeyscasenumber0%
+ \immediate\write16{[pgfkeyshasactivefamilyornofamily(\pgfkeyscurrentkey, \pgfkeyscasenumber) invoking unknown handler '#2']}%
+ \pgfkeysevalkeyfilterwith{#2}%
+ \else
+ \if\pgfkeyscasenumber3%
+ \pgfkeysgetfamily\pgfkeyscurrentpath\pgfkeyspred@TMP
+ \else
+ \pgfkeysgetfamily\pgfkeyscurrentkey\pgfkeyspred@TMP
+ \fi
+ \ifpgfkeyssuccess
+ \pgfkeysisfamilyactive{\pgfkeyspred@TMP}%
+ \ifpgfkeysfiltercontinue
+ \immediate\write16{[pgfkeyshasactivefamilyornofamily(\pgfkeyscurrentkey, \pgfkeyscasenumber) family is ACTIVE]}%
+ \else
+ \immediate\write16{[pgfkeyshasactivefamilyornofamily(\pgfkeyscurrentkey, \pgfkeyscasenumber) family is NOT active.]}%
+ \fi
+ \else% Ok, it does not belong to any family.
+ \immediate\write16{[pgfkeyshasactivefamilyornofamily(\pgfkeyscurrentkey, \pgfkeyscasenumber) invoking has-no-family-handler '#1']}%
+ \pgfkeysevalkeyfilterwith{#1}%
+ \fi
+ \fi
+ },
+ %
+ % A (faster) shortcut for
+ % /pgf/key filters/active families or no family=
+ % {/pgf/keys filters/false}
+ % {/pgf/keys filters/false}
+ /pgf/key filters/active families and known/.code={%
+ \if\pgfkeyscasenumber0%
+ \pgfkeysfiltercontinuefalse
+ \else
+ \if\pgfkeyscasenumber3%
+ \pgfkeysgetfamily\pgfkeyscurrentpath\pgfkeyspred@TMP
+ \else
+ \pgfkeysgetfamily\pgfkeyscurrentkey\pgfkeyspred@TMP
+ \fi
+ \ifpgfkeyssuccess
+ \pgfkeysisfamilyactive{\pgfkeyspred@TMP}%
+ \else% Ok, it does not belong to any family.
+ \pgfkeysfiltercontinuefalse
+ \fi
+ \fi
+ },
+ % A (faster) shortcut for
+ % /pgf/key filters/active families or no family=
+ % {/pgf/key filters/is descendant of=#1}% for keys without family
+ % {/pgf/keys filters/false}
+ /pgf/key filters/active families or descendants of/.code={%
+ \if\pgfkeyscasenumber0%
+ \pgfkeysfiltercontinuefalse
+ \else
+ \if\pgfkeyscasenumber3%
+ \pgfkeysgetfamily\pgfkeyscurrentpath\pgfkeyspred@TMP
+ \else
+ \pgfkeysgetfamily\pgfkeyscurrentkey\pgfkeyspred@TMP
+ \fi
+ \ifpgfkeyssuccess
+ \pgfkeysisfamilyactive{\pgfkeyspred@TMP}%
+ \else% Ok, it does not belong to any family.
+ % the 'is descendendant of' implementation has been
+ % COPY PASTED here:
+ %
+ % string prefix comparison:
+ \def\pgfkeysisdescendantof@impl##1#1##2\pgf@@eov{%
+ \def\pgfkeyspred@TMP{##1}%
+ \ifx\pgfkeyspred@TMP\pgfkeys@empty
+ \pgfkeysfiltercontinuetrue
+ \else
+ \pgfkeysfiltercontinuefalse
+ \fi
+ }%
+ \expandafter\pgfkeysisdescendantof@impl\pgfkeyscurrentkey#1\pgf@@eov
+ \fi
+ \fi
+ },
+ %
+ % Processes only options which are childs of #1.
+ % Example:
+ % is descendant of/.install key filter=/foo
+ % will be true for
+ % /foo/bar/x=y
+ % /foo/.cd
+ % /foo/bar/.style=...
+ % but not for
+ % /bar/foo/...
+ /pgf/key filters/is descendant of/.code={%
+ \if\pgfkeyscasenumber0%
+%\message{'\pgfkeyscurrentkey' (case \pgfkeyscasenumber) is UNKNOWN. Calling unknown handler.}%
+ % unknown options shall be processed with the
+ % unknown-handlers.
+ \pgfkeysfiltercontinuetrue
+ \else
+ % string prefix comparison:
+ % [ note : this has been COPY-PASTED to
+ % |active families or descendants of| ]
+ \def\pgfkeysisdescendantof@impl##1#1##2\pgf@@eov{%
+ \def\pgfkeyspred@TMP{##1}%
+ \ifx\pgfkeyspred@TMP\pgfkeys@empty
+%\message{'\pgfkeyscurrentkey' (case \pgfkeyscasenumber) is descendant of '#1': TRUE.}%
+ \pgfkeysfiltercontinuetrue
+ \else
+%\message{'\pgfkeyscurrentkey' (case \pgfkeyscasenumber) is descendant of '#1': FALSE.}%
+ \pgfkeysfiltercontinuefalse
+ \fi
+ }%
+ \expandafter\pgfkeysisdescendantof@impl\pgfkeyscurrentkey#1\pgf@@eov
+ \fi
+ },%
+ %
+ %
+ %
+ % Returns true if the currently processed full key equals #2.
+ /pgf/key filters/equals/.code={%
+ \if\pgfkeyscasenumber0%
+ % Unknown option:
+ \pgfkeysfiltercontinuetrue
+ \else
+ \def\pgfkeyspred@TMP{#1}%
+ \ifx\pgfkeyscurrentkey\pgfkeyspred@TMP
+ \pgfkeysfiltercontinuetrue
+ \else
+ \pgfkeysfiltercontinuefalse
+ \fi
+ \fi
+ },%
+ %
+ %
+ % Argument #1 can be any other (evaluated) filter predicate, its logical return
+ % value will be inverted.
+ % Example:
+ % not/.install key filter={is descendend of=/tikz}
+ % will install a key filter which evaluates 'is descendant of' with argument '/tikz' and returns the logical negation of the result.
+ %
+ /pgf/key filters/not/.code={%
+ \pgfkeysevalkeyfilterwith{#1}%
+ \ifpgfkeysfiltercontinue
+ \pgfkeysfiltercontinuefalse
+ \else
+ \pgfkeysfiltercontinuetrue
+ \fi
+ },%
+ /pgf/key filters/and/.code 2 args={%
+ \pgfkeysevalkeyfilterwith{#1}%
+ \ifpgfkeysfiltercontinue
+ \pgfkeysevalkeyfilterwith{#2}%
+ \fi
+ },%
+ /pgf/key filters/or/.code 2 args={%
+ \pgfkeysevalkeyfilterwith{#1}%
+ \ifpgfkeysfiltercontinue
+ \else
+ \pgfkeysevalkeyfilterwith{#2}%
+ \fi
+ },%
+ /pgf/key filters/true/.code={\pgfkeysfiltercontinuetrue},%
+ /pgf/key filters/true/.install key filter,
+ /pgf/key filters/false/.code={%
+ \pgfkeysfiltercontinuefalse
+ },%
+ %
+ % Returns false if the current key is unknown, which avoids calling
+ % the unknown handlers.
+ /pgf/key filters/defined/.code={%
+ \if\pgfkeyscasenumber0%
+ \pgfkeysfiltercontinuefalse
+ \else
+ \pgfkeysfiltercontinuetrue
+ \fi
+ },
+}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Private IMPLEMENTATION
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% This command does THE SAME work as \pgfkeys@case@one,
+% but it applies filtering whenever it identified the type of an
+% option.
+\def\pgfkeys@case@one@filtered{%
+ \pgfkeys@cur@is@descendant@of@errors
+ \ifpgfkeysfiltercontinue
+ \pgfkeys@orig@case@one
+ \else
+ \pgfkeysfiltercontinuetrue
+ \pgfkeysifdefined{\pgfkeyscurrentkey/.@cmd}{%
+ % CASE ONE: a command option
+ \def\pgfkeyscasenumber{1}%
+ \pgfkeys@key@predicate%
+ \ifpgfkeysfiltercontinue
+%\message{PROCESSING KEY \pgfkeyscurrentkey!}%
+ \pgfkeysgetvalue{\pgfkeyscurrentkey/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov
+ \else
+%\message{FILTERED OUT KEY \pgfkeyscurrentkey!}%
+ \pgfkeys@filtered@handler%
+ \fi
+ }{%
+ % CASE TWO: a normal value option
+ \pgfkeysifdefined{\pgfkeyscurrentkey}{%
+ \def\pgfkeyscasenumber{2}%
+ \pgfkeys@key@predicate%
+ \ifpgfkeysfiltercontinue
+%\message{PROCESSING KEY \pgfkeyscurrentkey!}%
+ \pgfkeys@case@two@extern
+ \else
+%\message{FILTEReD OUT KEY \pgfkeyscurrentkey!}%
+ \pgfkeys@filtered@handler%
+ \fi
+ }{%
+ \pgfkeys@split@path
+ % CASE THREE: a handler
+ \pgfkeysifdefined{/handlers/\pgfkeyscurrentname/.@cmd}{%
+ \pgfkeys@ifexecutehandler{%
+ \def\pgfkeyscasenumber{3}%
+ \pgfkeys@key@predicate%
+ \ifpgfkeysfiltercontinue
+%\message{PROCESSING KEY \pgfkeyscurrentkey!}%
+ \pgfkeysgetvalue{/handlers/\pgfkeyscurrentname/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov
+ \else
+%\message{FILTERED OUT KEY \pgfkeyscurrentkey!}%
+ \pgfkeys@filtered@handler%
+ \fi
+ }{%
+ \pgfkeys@unknown
+ }%
+ }{%
+ \pgfkeys@unknown
+ }%
+ }%
+ }%
+ \fi
+}%
+
+\def\pgfkeys@unknown@filtered{%
+ % CASE ZERO: an unknown option.
+ \def\pgfkeyscasenumber{0}%
+ \pgfkeys@key@predicate%
+ \ifpgfkeysfiltercontinue
+%\message{PROCESSING KEY \pgfkeyscurrentkey!}%
+ % start normal 'unknown' handlers:
+ \pgfkeys@orig@unknown
+ \else
+%\message{FILTEReD OUT KEY \pgfkeyscurrentkey!}%
+ \pgfkeys@filtered@handler%
+ \fi
+}
+
+% Does the same as \pgfkeys@try, but it also invokes the key filters.
+\def\pgfkeys@try@filtered{%
+ \ifpgfkeysfiltercontinue
+ \pgfkeys@orig@try
+ \else
+ \pgfkeysfiltercontinuetrue
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentpath}% make sure that \pgfkeys@code doesn't know about 'try'. Important for .is choice
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text% Hmm... no value
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@def}%
+ {\pgfkeysgetvalue{\pgfkeyscurrentpath/.@def}{\pgfkeyscurrentvalue}}
+ {}% no default, so leave it
+ \fi%
+ \pgfkeysifdefined{\pgfkeyscurrentpath/.@cmd}%
+ {%
+ % CASE ONE: a command option
+ \def\pgfkeyscasenumber{1}%
+ \pgfkeys@key@predicate%
+ \ifpgfkeysfiltercontinue
+ \pgfkeysgetvalue{\pgfkeyscurrentkey/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov%
+ \else
+ \pgfkeys@filtered@handler%
+ \fi
+ \pgfkeyssuccesstrue%
+ }%
+ {%
+ \pgfkeysifdefined{\pgfkeyscurrentpath}%
+ {% CASE TWO: a normal value option
+ \def\pgfkeyscasenumber{2}%
+ \pgfkeys@key@predicate%
+ \ifpgfkeysfiltercontinue
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text%
+ \pgfkeysvalueof{\pgfkeyscurrentpath}%
+ \else%
+ \pgfkeyslet{\pgfkeyscurrentpath}\pgfkeyscurrentvalue%
+ \fi%
+ \else
+ \pgfkeys@filtered@handler%
+ \fi
+ \pgfkeyssuccesstrue%
+ }%
+ {%
+ \pgfkeys@split@path%
+ \pgfkeysifdefined{/handlers/\pgfkeyscurrentname/.@cmd}{%
+ % CASE THREE: a handled key
+ %
+ % in the standard configuration, this check here is redundand
+ % because pgfkeys@ifexecutehandler === true.
+ % It is only interesting for 'handle only existing'.
+ \pgfkeys@ifexecutehandler{%
+ \def\pgfkeyscasenumber{3}%
+ \pgfkeys@key@predicate%
+ \ifpgfkeysfiltercontinue
+%\message{PROCESSING KEY \pgfkeyscurrentkey!}%
+ \pgfkeysgetvalue{/handlers/\pgfkeyscurrentname/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov
+ \else
+%\message{FILTERED OUT KEY \pgfkeyscurrentkey!}%
+ \pgfkeys@filtered@handler%
+ \fi
+ \pgfkeyssuccesstrue%
+ }{%
+ \pgfkeyssuccessfalse
+ }%
+ }{%
+ \pgfkeyssuccessfalse
+ }%
+ }%
+ }%
+ \fi
+}
+
+
+% #1 the code to invoke after init and before cleanup
+\def\pgfkeys@install@filter@and@invoke#1{%
+ \ifpgfkeysfilteringisactive
+ \pgfkeys@error{Sorry, nested calls to key filtering routines are not allowed. (reason: It is not possible to properly restore the previous filtering state after returning from the nested call)}%
+ \fi
+ \pgfkeysfilteringisactivetrue
+ \let\pgfkeys@case@one=\pgfkeys@case@one@filtered
+ \let\pgfkeys@try=\pgfkeys@try@filtered
+ \let\pgfkeys@unknown=\pgfkeys@unknown@filtered
+ #1%
+ \let\pgfkeys@case@one=\pgfkeys@orig@case@one
+ \let\pgfkeys@try=\pgfkeys@orig@try
+ \let\pgfkeys@unknown=\pgfkeys@orig@unknown
+ \pgfkeysfilteringisactivefalse
+}
+
+
+%--------------------------------------------------
+% \def\pgfkeys@eval@key@filter@subroutine@case@one{%
+% \pgfkeysifdefined{\pgfkeyscurrentkey/.@cmd}{%
+% \pgfkeysgetvalue{\pgfkeyscurrentkey/.@cmd}{\pgfkeys@code}%
+% \let\pgfkeyspred@TMP=\pgfkeyscurrentvalue
+% \pgfkeys@eval@key@filter@subroutine@restorestate
+% \expandafter\pgfkeys@code\pgfkeyspred@TMP\pgfeov
+% }{%
+% \pgfkeysvalueof{/errors/no such key filter/.@cmd}\pgfkeyscurrentkey\pgfkeyscurrentvalue\pgfeov%
+% }%
+% }
+% % THIS VERSION IS TOO SLOW. See below.
+% \def\pgfkeysevalkeyfilterwith#1{%
+% \edef\pgfkeys@eval@key@filter@subroutine@restorestate{%
+% \noexpand\def\noexpand\pgfkeyscurrentkey{\pgfkeyscurrentkey}%
+% \noexpand\def\noexpand\pgfkeyscurrentkeyRAW{\pgfkeyscurrentkeyRAW}%
+% \noexpand\def\noexpand\pgfkeyscurrentname{\pgfkeyscurrentname}%
+% \noexpand\def\noexpand\pgfkeyscurrentvalue{\pgfkeyscurrentvalue}%
+% \noexpand\pgfkeys@pathtoks={\pgfkeyscurrentpath}%
+% }%
+% \pgfkeysinterruptkeyfilter
+% \let\pgfkeys@case@one=\pgfkeys@eval@key@filter@subroutine@case@one
+% \pgfkeysalso{#1}%
+% \endpgfkeysinterruptkeyfilter% this here also restored \pgfkeys@case@one.
+% \pgfkeys@eval@key@filter@subroutine@restorestate
+% }%
+%--------------------------------------------------
+
+
+% Evaluates a key filter '#1'. Example:
+% \pgfkeysevalkeyfilterwith{/pgf/key filters/equals=/tikz}
+%
+% \pgfkeysevalkeyfilterwith works only if key filtering is
+% active.
+%
+% The argument '#1' MUST be a FULL KEY.
+%
+% The implementation employs a subset of the \pgfkeysalso code.
+\long\def\pgfkeysevalkeyfilterwith#1{%
+ \pgfkeys@eval@key@filter@subroutine@unpack#1=\pgfkeysnovalue=\pgfkeys@stop
+}%
+\long\def\pgfkeys@eval@key@filter@subroutine@unpack#1=#2=#3\pgfkeys@stop{%
+ \pgfkeys@spdef\pgfkeyspred@TMP{#1}%
+ \edef\pgfkeyspred@TMP{\pgfkeyspred@TMP}%
+ \pgfkeys@spdef\pgfkeyspred@TMPB{#2}% TMPB=value
+ \ifx\pgfkeyspred@TMPB\pgfkeysnovalue@text% Hmm... no value
+ \pgfkeysifdefined{\pgfkeyspred@TMP/.@def}%
+ {\pgfkeysgetvalue{\pgfkeyspred@TMP/.@def}{\pgfkeyspred@TMPB}}
+ {}% no default, so leave it
+ \fi%
+ \ifx\pgfkeyspred@TMPB\pgfkeysvaluerequired%
+ \pgfkeysvalueof{/errors/value required/.@cmd}\pgfkeyspred@TMP\pgfkeyspred@TMPB\pgfeov%
+ \else%
+ \pgfkeysifdefined{\pgfkeyspred@TMP/.@cmd}{%
+ \pgfkeysgetvalue{\pgfkeyspred@TMP/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyspred@TMPB\pgfeov
+ }{%
+ \pgfkeysvalueof{/errors/no such key filter/.@cmd}\pgfkeyspred@TMP\pgfkeyspred@TMPB\pgfeov%
+ }%
+ \fi%
+}
+
+
+\def\pgfkeys@non@outer@newif@#1#2{%
+ \expandafter\edef\csname #2true\endcsname{\noexpand\let\noexpand#1=\noexpand\iftrue}%
+ \expandafter\edef\csname #2false\endcsname{\noexpand\let\noexpand#1=\noexpand\iffalse}%
+ \csname #2false\endcsname
+}%
+
+% For latex and context, this here has the same effect as a \newif
+% applied to 'if#1'. For plain tex, it has also the same effect, but
+% it is not an \outer macro as the plain-tex \newif.
+\def\pgfkeys@non@outer@newif#1{%
+ \expandafter\pgfkeys@non@outer@newif@\csname if#1\endcsname{#1}%
+}
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex
new file mode 100644
index 0000000000..1c9cfe742d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex
@@ -0,0 +1,2326 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Fr 10. Nov 17:18:26 CET 2017 %%%
+
+
+
+% Copyright 2008/2009 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU General Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\newif\ifpgfmathfloatparseactive
+\newif\ifpgfmathfloat@scaleactive
+
+% public macro which invokes '#1' if the fpu is installed and ready and '#2'
+% otherwise.
+\def\pgflibraryfpuifactive#1#2{%
+ \ifpgfmathfloatparseactive
+ #1%
+ \else
+ #2%
+ \fi
+}%
+
+\pgfqkeys{/pgf}{
+ % enable the FPU parser if it is not yet active
+ %
+ % It will be deactivated after the current TeX group
+ fpu/.is choice,
+ fpu/true/.code={%
+ \ifpgfmathfloatparseactive
+ \else
+ \pgfutil@ifundefined{pgfmathdeclarefunction}{%
+ % Ohoh - we are running on a TeX distribution with
+ % PGF 2.00 which doesn't have the new math engine.
+ % I can provide special treatment here, provided that
+ % all float commands are still able to run (that means
+ % more information needs to be copied from the pgf cvs
+ % to pgf 2.00 - for example pgfmathfloat.code.tex).
+ %
+ % I employ this to work with pgfplots and pgf 2.00
+ % using all new features.
+ \pgfmathfloat@parser@install@pgf@two@null@null%
+ }{%
+ \pgfmathfloat@parser@install%
+ }%
+ \pgfmathfloatparseactivetrue
+ % improve compatibility with Marks FP library:
+ \pgfkeysalso{/pgf/fixed point arithmetic/.prefix style={/pgf/fpu=false}}%
+ \fi
+ },%
+ fpu/false/.code={%
+ \ifpgfmathfloatparseactive
+ \pgfmathfloat@uninstall%
+ \pgfmathfloatparseactivefalse
+ \fi
+ },%
+ fpu/.default=true,
+ % Use this to introduce a result scaling.
+ % Every expression in which the prefix '*' occurs
+ % will be multiplied with the result and converted to fixed point
+ % representation.
+ fpu/scale results/.code={%
+ \ifpgfmathfloatparseactive
+ \pgfmathparse{#1}%
+ \else
+ \pgfmathfloatparsenumber{#1}%
+ \fi
+ \let\pgfmathfloatscale=\pgfmathresult%
+ },%
+ % determines the output format of each complete expression parsing
+ % process. If 'scale results' is active, 'fixed' is assumed
+ % automatically.
+ fpu/output format/.is choice,
+ fpu/output format/float/.code= {\let\pgfmathfloatparse@output=\relax},
+ fpu/output format/sci/.code= {\def\pgfmathfloatparse@output{\pgfmathfloattosci@{\pgfmathresult}}},
+ fpu/output format/fixed/.code= {\def\pgfmathfloatparse@output{\pgfmathfloattofixed@{\pgfmathresult}}},
+ fpu/output format/float,
+ fpu/rel thresh/.code={%
+ \pgfmathfloatparsenumber{#1}%
+ \let\pgfmathfloat@relthresh=\pgfmathresult
+ },
+ fpu/rel thresh=1e-4,
+}
+
+\pgfmathfloatcreate{1}{1.0}{0}\let\pgfmathfloatscale=\pgfmathresult
+
+% This is the replacement parser invocation.
+% It does two things which are different to \pgfmathparse:
+% 1. it disables any dimension dependand scalings,
+% 2. it implements the 'scale results' feature.
+\def\pgfmathfloatparse{%
+ \begingroup%
+ % disable any dimension-dependant scalings:
+ \let\pgfmathpostparse=\relax%
+ \pgfmath@catcodes%
+ \pgfmath@quickparsefalse%
+ \pgfmathfloatparse@}
+
+% for pgf 2.00 :
+\def\pgfmathfloatparse@pgf@two@null@null{%
+ \pgfmath@quickparsefalse%
+ \pgfmathfloatparse@}
+
+\def\pgfmathfloatparse@#1{%
+ \edef\pgfmathfloat@expression{#1}%
+ \expandafter\pgfmathfloatparse@@\pgfmathfloat@expression\pgfmathfloat@
+ \ifpgfmathfloat@scaleactive
+ \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfmathfloatscale}
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \else
+ \pgfmathfloatparse@output
+ \fi
+}
+
+\def\pgfmathfloat@char@asterisk{*}
+\def\pgfmathfloatparse@@#1#2\pgfmathfloat@{%
+ \def\pgfmathfloat@test{#1}%
+ \ifx\pgfmathfloat@test\pgfmathfloat@char@asterisk%
+ \def\pgfmathfloat@expression{#2}%
+ \pgfmathfloat@scaleactivetrue
+ \fi%
+ \expandafter\pgfmathparse@\expandafter{\pgfmathfloat@expression}%
+ % \endgroup provided by \pgfpathmarse@end
+}
+
+% Crude handling of file plots
+%
+\pgfkeys{/pgf/fpu/.cd,
+ scale file plot x/.code=\pgfmathfloatparse{#1}\edef\pgfmathfloatplotscalex{\pgfmathresult*},
+ scale file plot y/.code=\pgfmathfloatparse{#1}\edef\pgfmathfloatplotscaley{\pgfmathresult*},
+ scale file plot z/.code=\pgfmathfloatparse{#1}\edef\pgfmathfloatplotscalez{\pgfmathresult*}
+}
+
+\def\pgfmathfloat@uninstall@appendcmd#1{%
+ \expandafter\gdef\expandafter\pgfmathfloat@uninstall\expandafter{\pgfmathfloat@uninstall #1}%
+}%
+
+% If the uninstall command is already assembled, it will skip the
+% uninstall assemblation.
+\def\pgfmathfloat@plots@checkuninstallcmd{%
+ \pgfutil@ifundefined{pgfmathfloat@uninstall}{%
+ \global\let\pgfmathfloat@uninstall=\pgfutil@empty
+ }{%
+ % We already HAVE an uninstall command (prepared globally).
+ % So: don't waste time assembling one!
+ \def\pgfmathfloat@uninstall@appendcmd##1{}%
+ \def\pgfmathfloat@prepareuninstallcmd##1{}%
+ }%
+}%
+
+% This assembles an uninstall command globally ON FIRST USAGE.
+% See \pgfmathfloat@plots@checkuninstallcmd
+\def\pgfmathfloat@prepareuninstallcmd#1{%
+ % and store backup information (globally - I don't want to do that
+ % all the time when the FPU is used!):
+ \expandafter\global\expandafter\let\csname pgfmathfloat@backup@\string#1\endcsname=#1%
+ \expandafter\gdef\expandafter\pgfmathfloat@uninstall\expandafter{\pgfmathfloat@uninstall
+ \expandafter\let\expandafter#1\csname pgfmathfloat@backup@\string#1\endcsname%
+ }%
+}
+
+\def\pgfmathfloat@install#1=#2{%
+ \pgfmathfloat@prepareuninstallcmd{#1}%
+ \let#1=#2%
+}
+\def\pgfmathfloat@install@csname#1#2{%
+ \expandafter\pgfmathfloat@prepareuninstallcmd\csname #1\endcsname%
+ \pgfutil@namelet{#1}{#2}%
+}
+\def\pgfmathfloat@install@unimplemented#1{%
+ \expandafter\pgfmathfloat@prepareuninstallcmd\csname pgfmath#1@\endcsname%
+ \expandafter\def\csname pgfmath#1@\endcsname##1{\pgfmathfloat@notimplemented{#1}}%
+}
+\def\pgfmathfloat@plots@install{%
+ \let\pgfmathfloatplotscalex=\pgfutil@empty
+ \let\pgfmathfloatplotscaley=\pgfutil@empty
+ \let\pgfmathfloatplotscalez=\pgfutil@empty
+ \pgfmathfloat@install\pgf@parsexyline=\pgfmathfloat@parsexyline%
+ \pgfmathfloat@install\pgf@parsexyzline=\pgfmathfloat@parsexyzline%
+}
+\def\pgfmathfloat@parsexyline#1 #2 #3\pgf@stop{%
+ \edef\pgfmathfloat@marshal{%
+ \noexpand\pgfplotstreampoint{\noexpand\pgfpointxy{\pgfmathfloatplotscalex#1}{\pgfmathfloatplotscaley#2}}%
+ }%
+ \pgfmathfloat@marshal%
+}
+\def\pgfmathfloat@parsexyzline#1 #2 #3 #4\pgf@stop{%
+ \edef\pgfmathfloat@marshal{%
+ \noexpand\pgfplotstreampoint{%
+ \noexpand\pgfpointxyz{\pgfmathfloatplotscalex#1}{\pgfmathfloatplotscaley#2}{\pgfmathfloatplotscalez#3}%
+ }%
+ }%
+ \pgfmathfloat@marshal%
+}
+
+%
+\def\pgfmathfloat@parser@install@functions{%
+ % Install float commands...
+ %
+ \pgfmathfloat@install\pgfmathadd@=\pgfmathfloatadd@%
+ \pgfmathfloat@install\pgfmathsubtract@=\pgfmathfloatsubtract@%
+ \pgfmathfloat@install\pgfmathneg@=\pgfmathfloatneg@%
+ \pgfmathfloat@install\pgfmathmultiply@=\pgfmathfloatmultiply@%
+ \pgfmathfloat@install\pgfmathdivide@=\pgfmathfloatdivide@%
+ \pgfmathfloat@install\pgfmathabs@=\pgfmathfloatabs@%
+ \pgfmathfloat@install\pgfmathsign@=\pgfmathfloatsign@%
+ \pgfmathfloat@install\pgfmathround@=\pgfmathfloatround@%
+ \pgfmathfloat@install\pgfmathfloor@=\pgfmathfloatfloor@%
+ \pgfmathfloat@install\pgfmathceil@=\pgfmathfloatceil@
+ \pgfmathfloat@install\pgfmathint@=\pgfmathfloatint@
+ \pgfmathfloat@install\pgfmathmod@=\pgfmathfloatmod@%
+ \pgfmathfloat@install\pgfmathmax@=\pgfmathfloatmax@%
+ \pgfmathfloat@install\pgfmathmin@=\pgfmathfloatmin@%
+ \pgfmathfloat@install\pgfmathsin@=\pgfmathfloatsin@%
+ \pgfmathfloat@install\pgfmathcos@=\pgfmathfloatcos@%
+ \pgfmathfloat@install\pgfmathtan@=\pgfmathfloattan@%
+ \pgfmathfloat@install\pgfmathdeg@=\pgfmathfloatdeg@%
+ \pgfmathfloat@install\pgfmathrad@=\pgfmathfloatrad@%
+ \pgfmathfloat@install\pgfmathatan@=\pgfmathfloatatan@%
+ \pgfmathfloat@install\pgfmathasin@=\pgfmathfloatasin@%
+ \pgfmathfloat@install\pgfmathacos@=\pgfmathfloatacos@%
+ \pgfmathfloat@install\pgfmathcot@=\pgfmathfloatcot@%
+ \pgfmathfloat@install\pgfmathsec@=\pgfmathfloatsec@%
+ \pgfmathfloat@install\pgfmathcosec@=\pgfmathfloatcosec@%
+ \pgfmathfloat@install\pgfmathexp@=\pgfmathfloatexp@%
+ \pgfmathfloat@install\pgfmathln@=\pgfmathfloatln@%
+ \pgfmathfloat@install@csname{pgfmathlog10@}{pgfmathfloatlog10@}%
+ \pgfmathfloat@install@csname{pgfmathlog2@}{pgfmathfloatlog2@}%
+ \pgfmathfloat@install\pgfmathsqrt@=\pgfmathfloatsqrt@%
+ \pgfmathfloat@install\pgfmath@pi=\pgfmathfloatpi@%
+ \pgfmathfloat@install\pgfmathpi=\pgfmathfloatpi@%
+ \pgfmathfloat@install\pgfmathe@=\pgfmathfloate@%
+ \pgfmathfloat@install\pgfmathe=\pgfmathfloate@%
+ \pgfmathfloat@install\pgfmathlessthan@=\pgfmathfloatlessthan@%
+ \pgfmathfloat@install\pgfmathnotless@=\pgfmathfloatnotless@%
+ \pgfmathfloat@install\pgfmathnotgreater@=\pgfmathfloatnotgreater@%
+ \pgfmathfloat@install\pgfmathless@=\pgfmathfloatlessthan@%
+ \pgfmathfloat@install\pgfmathgreaterthan@=\pgfmathfloatgreaterthan@%
+ \pgfmathfloat@install\pgfmathgreater@=\pgfmathfloatgreaterthan@%
+ \pgfmathfloat@install\pgfmathifthenelse@=\pgfmathfloatifthenelse@%
+ \pgfmathfloat@install\pgfmathequal@=\pgfmathfloatequal@%
+ \pgfmathfloat@install\pgfmathequalto@=\pgfmathfloatequal@%
+ \pgfmathfloat@install\pgfmathnotequal@=\pgfmathfloatnotequal@%
+ \pgfmathfloat@install\pgfmathnotequalto@=\pgfmathfloatnotequal@%
+ \pgfmathfloat@install\pgfmathpow@=\pgfmathfloatpow@
+ \pgfmathfloat@install\pgfmathrand@=\pgfmathfloatrand@
+ \pgfmathfloat@install\pgfmathrand=\pgfmathfloatrand@
+ \pgfmathfloat@install\pgfmathrnd@=\pgfmathfloatrnd@
+ \pgfmathfloat@install\pgfmathrnd=\pgfmathfloatrnd@
+ \pgfmathfloat@install\pgfmathtrue@=\pgfmathfloattrue@
+ \pgfmathfloat@install\pgfmathfalse@=\pgfmathfloatfalse@
+ \pgfmathfloat@install\pgfmathnot@=\pgfmathfloatnot@
+ \pgfmathfloat@install\pgfmathhex@=\pgfmathfloathex@
+ \pgfmathfloat@install\pgfmathHex@=\pgfmathfloatHex@
+ \pgfmathfloat@install\pgfmathoct@=\pgfmathfloatoct@
+ \pgfmathfloat@install\pgfmathbin@=\pgfmathfloatbin@
+ \pgfmathfloat@install\pgfmathand@=\pgfmathfloatand@
+ \pgfmathfloat@install\pgfmathor@=\pgfmathfloator@
+ \pgfmathfloat@install\pgfmathfactorial@=\pgfmathfloatfactorial@
+ \pgfmathfloat@install\pgfmathveclen@=\pgfmathfloatveclen@
+ \pgfmathfloat@install\pgfmathcosh@=\pgfmathfloatcosh@
+ \pgfmathfloat@install\pgfmathsinh@=\pgfmathfloatsinh@
+ \pgfmathfloat@install\pgfmathtanh@=\pgfmathfloattanh@
+ \expandafter\pgfmathfloat@install\csname pgfmathatan2@\endcsname=\pgfmathfloatatantwo@
+ \pgfmathfloat@install@unimplemented{isprime}%
+ \pgfmathfloat@install@unimplemented{iseven}%
+ \pgfmathfloat@install@unimplemented{isodd}%
+ \pgfmathfloat@install@unimplemented{gcd}%
+ \pgfmathfloat@install@unimplemented{frac}%
+ \pgfmathfloat@install@unimplemented{random}%
+ \pgfmathfloat@install@unimplemented{setseed}%
+ \pgfmathfloat@install@unimplemented{Mod}%
+ \pgfmathfloat@install@unimplemented{div}%
+ \pgfmathfloat@install@unimplemented{real}%
+% \pgfmathfloat@install@unimplemented{height}%
+ %
+ %
+ \pgfmathfloat@install\pgfmathscientific=\pgfmathfloatscientific%
+}
+
+\def\pgfmathfloat@parser@install{%
+ \pgfmathfloat@plots@checkuninstallcmd
+ \pgfmathfloat@plots@install%
+ \pgfmathfloat@parser@install@functions
+ %
+ %
+ %
+ % The following methods actually enable the parser to work with
+ % the internal floating point number representation.
+ %
+ % The idea is as follows:
+ % 1. Every operand must be given in internal float representation.
+ % 2. The internal float repr can be distinguished by a normal
+ % number. This is accomplished by introducing a new "exponent"
+ % token.
+ % 3. The stack-push-operation checks whether the argument is a
+ % float. If not, it is parsed properly before pushing it.
+ \pgfmath@tokens@make{exponent}{\pgfmathfloat@POSTFLAGSCHAR}%
+ \pgfmathfloat@uninstall@appendcmd{%
+ \expandafter\let\csname pgfmath@token@exponent@\pgfmathfloat@POSTFLAGSCHAR\endcsname=\relax
+ }%
+ \let\pgfmath@basic@parse@exponent=\pgfmath@parse@exponent%
+ \let\pgfmath@basic@stack@push@operand=\pgfmath@stack@push@operand
+ \pgfmathfloat@install\pgfmath@stack@push@operand=\pgfmathfloat@stack@push@operand
+ \pgfmathfloat@install\pgfmath@parse@operand@quote=\pgfmathfloat@parse@operand@quote
+ \pgfmathfloat@install\pgfmath@parse@exponent=\pgfmathfloat@parse@float@or@exponent
+ %
+ \pgfmathfloat@install\pgfmathparse=\pgfmathfloatparse%
+ %\pgfmathfloat@install\pgfmathparse@trynumber@token=\pgfmathfloat@parse@trynumber@token
+ \pgfmathfloat@install\pgfmathparse@expression@is@number=\pgfmathfloat@parse@expression@is@number
+}%
+
+% This here might bring speed improvements... if implemented
+% correctly.
+% However, this heuristics might fail in cases like "1+1" vs "1e+1" ...
+%\def\pgfmathfloat@parse@trynumber@token{numericfpu}
+%\pgfmath@tokens@make{numericfpu}{eE+-Y.0123456789}
+
+\def\pgfmathfloat@parse@expression@is@number{%
+ \pgfmathfloatparsenumber{\pgfmath@expression}%
+ \pgfmath@smuggleone\pgfmathresult%
+ \endgroup
+ \ignorespaces
+}%
+
+\def\pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG#1{%
+ \edef\pgfmathfloat@loc@TMPa{%
+ \noexpand\def\expandafter\noexpand\csname pgfmath@parsefunction@#1\endcsname{%
+ \noexpand\let\noexpand\pgfmath@parsepostgroup\expandafter\noexpand\csname pgfmath@parsefunction@#1@\endcsname%
+ \noexpand\expandafter\noexpand\pgfmath@parse@}%
+ \noexpand\def\expandafter\noexpand\csname pgfmath@parsefunction@#1@\endcsname{%
+ \noexpand\expandafter\expandafter\noexpand\csname pgfmath#1@\endcsname\noexpand\expandafter{\noexpand\pgfmathresult}%
+ \noexpand\pgfmath@postfunction%
+ }%
+ }%
+ \pgfmathfloat@loc@TMPa
+}%
+\def\pgfmathfloat@parser@install@pgf@two@null@null{%
+ \pgfmathfloat@plots@checkuninstallcmd
+ \pgfmathfloat@plots@install%
+ \pgfmathfloat@parser@install@functions
+ \let\pgfmathrand@=\pgfmath@basic@rand@
+ \let\pgfmathrnd@=\pgfmath@basic@rnd@
+ \pgfmathfloat@install\pgfmathmax@=\pgfmathfloatmaxtwo%
+ \pgfmathfloat@install\pgfmathmin@=\pgfmathfloatmintwo%
+ \pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG{factorial}%
+ \pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG{hex}%
+ \pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG{bin}%
+ \pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG{oct}%
+ \pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG{tanh}%
+ \pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG{sinh}%
+ \pgfmathfloat@defineadapter@for@pgf@two@null@null@ONEARG{cosh}%
+ %
+ % The following methods actually enable the parser to work with
+ % the internal floating point number representation.
+ %
+ % The idea is as follows:
+ % 1. Every operand must be given in internal float representation.
+ % 2. The internal float repr can be distinguished by a normal
+ % number. This is accomplished by introducing a new "exponent"
+ % token.
+ % 3. The stack-push-operation checks whether the argument is a
+ % float. If not, it is parsed properly before pushing it.
+ \let\pgfmath@basic@parsedecimalpoint=\pgfmath@parsedecimalpoint%
+ \let\pgfmath@basic@stack@push@operand=\pgfmath@stackpushoperand
+ \pgfmathfloat@install\pgfmath@stackpushoperand=\pgfmathfloat@stack@push@operand
+ \pgfmathfloat@install\pgfmath@parsedecimalpoint=\pgfmathfloat@parsedecimalpoint@pgf@two@null@null
+ \pgfmathfloat@install\pgfmath@endparse=\pgfmathfloat@endparse@pgf@two@null@null
+ \pgfmathfloat@install\pgfmath@endparsegroup=\pgfmathfloat@endparsegroup@pgf@two@null@null
+ \pgfmathfloat@install\pgfmath@postfunction=\pgfmathfloat@postfunction@pgf@two@null@null
+ \pgfmathfloat@install\pgfmath@@parseoperandgroup=\pgfmathfloat@@parseoperandgroup
+ %
+ \pgfmathfloat@install\pgfmathparse=\pgfmathfloatparse@pgf@two@null@null%
+}%
+
+\pgfutil@ifundefined{pgfmathdeclarefunction}{%
+ % BACKWARDS COMPATIBILITY: We have PGF 2.00 :
+ \def\pgfmathdeclarepseudoconstant#1#2{%
+ \begingroup
+ \toks0=\expandafter{\csname pgfmath#1@\endcsname}%
+ \toks1={\pgfmath@postfunction}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 }%
+ \xdef\pgfmathfloat@glob@TMPb{\the\toks0 }%
+ \endgroup
+ \expandafter\let\csname pgfmath@parsefunction@#1\endcsname=\pgfmathfloat@glob@TMP
+ \expandafter\let\csname pgfmath#1\endcsname=\pgfmathfloat@glob@TMPb
+ \expandafter\def\csname pgfmath#1@\endcsname{#2}%
+ }%
+ \let\pgfmathredeclarepseudoconstant=\pgfmathdeclarepseudoconstant
+}{%
+ \pgfutil@ifundefined{pgfmathdeclarepseudoconstant}{%
+ \def\pgfmathdeclarepseudoconstant#1#2{\pgfmathdeclarefunction*{#1}{0}{#2}}
+ }{}%
+}%
+
+\pgfmathdeclarepseudoconstant{inf}{\def\pgfmathresult{inf}}
+\pgfmathdeclarepseudoconstant{INF}{\def\pgfmathresult{inf}}
+\pgfmathdeclarepseudoconstant{Inf}{\def\pgfmathresult{inf}}
+\pgfmathdeclarepseudoconstant{infty}{\def\pgfmathresult{inf}}
+\pgfmathdeclarepseudoconstant{nan}{\def\pgfmathresult{nan}}
+\pgfmathdeclarepseudoconstant{NaN}{\def\pgfmathresult{nan}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Hacks to the basic level pgf math engine:
+%
+% WARNING: These methods rely heavily on the internal float representation!
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% for pgf2.00 :
+\def\pgfmathfloat@parsedecimalpoint@pgf@two@null@null#1{%
+ \expandafter\ifx\pgfmathfloat@POSTFLAGSCHAR#1% check whether it is a float
+ \let\pgfmath@next=\pgfmathfloat@return@float@pgf@two@null@null%
+ \else
+ \def\pgfmath@next{\pgfmath@basic@parsedecimalpoint#1}%
+ \fi
+ \pgfmath@next
+}
+% for pgf2.00:
+\def\pgfmathfloat@return@float@pgf@two@null@null#1]{%
+ \edef\pgfmathresult{\the\c@pgfmath@parsecounta\pgfmathfloat@POSTFLAGSCHAR#1]}%
+ \let\pgfmath@resulttemp=\pgfmathresult
+ \pgfmath@parseoperator%
+}%
+% for pgf2.00:
+\def\pgfmathfloat@endparse@pgf@two@null@null#1\pgfmath@empty{%
+ \pgfmath@processalloperations%
+ \pgfmath@stackpop{\pgfmathresult}%
+ % delete the final unit scalings
+ \pgfmath@smuggleone{\pgfmathresult}%
+ \endgroup%
+ \ignorespaces%
+}
+% for pgf2.00:
+\def\pgfmathfloat@endparsegroup@pgf@two@null@null{%
+ \pgfmath@processalloperations%
+ \pgfmath@stackpop{\pgfmathresult}%
+ % eliminated register usage here...
+ \pgfmath@smuggleone{\pgfmathresult}%
+ \endgroup%
+ \pgfmath@parsepostgroup%
+}
+% for pgf2.00:
+\def\pgfmathfloat@postfunction@pgf@two@null@null{%
+ \let\pgfmath@parsepostgroup\pgfmath@parseoperator%
+ \ifnum\pgfmath@sign1<0
+ \pgfmathfloatneg@{\pgfmathresult}%
+ \let\pgfmath@sign\pgfutil@empty
+ \fi
+ \pgfmath@parseoperator}
+% for pgf2.00:
+\def\pgfmathfloat@@parseoperandgroup{%
+ \let\pgfmath@postparsegroup\pgfmath@parseoperator%
+ \ifnum\pgfmath@sign1<0
+ \pgfmathfloatneg@{\pgfmathresult}%
+ \let\pgfmath@sign\pgfutil@empty
+ \fi
+ \pgfmath@parseoperator%
+}
+
+
+
+
+
+
+% PRECONDITION:
+% either
+% <number>e
+% ^
+% -> read the exponent.
+% or
+% <sign>\pgfmathfloat@POSTFLAGSCHAR
+% ^
+% -> we have a parsed floating point number -> read it.
+\def\pgfmathfloat@parse@float@or@exponent{%
+ \if\pgfmath@token \pgfmathfloat@POSTFLAGSCHAR%
+ % Ok, we actually HAVE a pre-parsed floating point number!
+ % Return it.
+ \expandafter\pgfmathfloat@return@float\expandafter\pgfmath@token@next
+ \else
+ % We have a standard number in scientific format. Parse it.
+ \expandafter\pgfmath@basic@parse@exponent
+ \fi
+}%
+\def\pgfmathfloat@return@float#1]{%
+ \edef\pgfmathresult{\pgfmath@number \pgfmathfloat@POSTFLAGSCHAR#1]}%
+ \expandafter\pgfmath@basic@stack@push@operand\expandafter{\pgfmathresult}%
+ \pgfmath@parse@@operator%
+}%
+
+\def\pgfmathfloat@parse@operand@quote#1"{%
+ \edef\pgfmathresult{\pgfmath@fpu@stringmarker #1}%
+ \expandafter\pgfmath@basic@stack@push@operand\expandafter{\pgfmathresult}%
+ \pgfmath@parse@@operator%
+}
+
+\def\pgfmath@fpu@stringmarker{@@str@@:}%
+
+% This extends the functionality of the basic level operand stack: it
+% assures every element on the stack is a float.
+\def\pgfmathfloat@stack@push@operand#1{%
+ \pgfutil@ifnextchar\bgroup{%
+ \let\pgfmathfloat@stack@push@operand@list@=\pgfutil@empty
+ \pgfmathfloat@stack@push@operand@list
+ }{%
+ \pgfmathfloat@stack@push@operand@single
+ }%
+ #1\relax
+}%
+\def\pgfmathfloat@stack@push@operand@single#1\relax{%
+ \expandafter\pgfutil@in@\pgfmathfloat@POSTFLAGSCHAR{#1}%
+ \ifpgfutil@in@
+ \pgfmath@basic@stack@push@operand{#1}%
+ \else
+ \expandafter\pgfutil@in@\expandafter{\pgfmath@fpu@stringmarker}{#1}%
+ \ifpgfutil@in@
+ \pgfmathfloat@stack@push@operand@single@str#1\relax
+ \else
+ \pgfmathfloatparsenumber{#1}%
+ \expandafter\pgfmath@basic@stack@push@operand\expandafter{\pgfmathresult}%
+ \fi
+ \fi
+}%
+
+\expandafter\def\expandafter\pgfmathfloat@stack@push@operand@single@str\pgfmath@fpu@stringmarker #1\relax{%
+ \pgfmath@basic@stack@push@operand{#1}%
+}%
+\def\pgfmathfloat@stack@push@operand@GOBBLE#1\relax{}%
+\def\pgfmathfloat@stack@push@operand@list#1{%
+ \expandafter\pgfutil@in@ \pgfmathfloat@POSTFLAGSCHAR{#1}%
+ \ifpgfutil@in@
+ \expandafter\def\expandafter\pgfmathfloat@stack@push@operand@list@\expandafter{%
+ \pgfmathfloat@stack@push@operand@list@{#1}%
+ }%
+ \else
+ \pgfmathfloatparsenumber{#1}%
+ \begingroup
+ \toks0=\expandafter{\pgfmathfloat@stack@push@operand@list@}%
+ \toks1=\expandafter{\pgfmathresult}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 {\the\toks1}}%
+ \endgroup
+ \let\pgfmathfloat@stack@push@operand@list@=\pgfmathfloat@glob@TMP
+ \fi
+ \pgfutil@ifnextchar\relax{%
+ \expandafter\pgfmath@basic@stack@push@operand\expandafter{\pgfmathfloat@stack@push@operand@list@}%
+ \pgfmathfloat@stack@push@operand@GOBBLE
+ }{%
+ \pgfmathfloat@stack@push@operand@list
+ }%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --- END --- Hacks to the basic level pgf math engine
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Here starts the implementation of the floating point
+% routines.
+%
+% They can be used even if the FPU parser is not active.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Remember the basic math commands. They will be invoked as subroutines in floating point routines.
+\let\pgfmath@basic@add@=\pgfmathadd@
+\let\pgfmath@basic@subtract@=\pgfmathsubtract@
+\let\pgfmath@basic@multiply@=\pgfmathmultiply@
+\let\pgfmath@basic@divide@=\pgfmathdivide@
+\let\pgfmath@basic@reciprocal@=\pgfmathreciprocal@
+\let\pgfmath@basic@abs@=\pgfmathabs@
+\let\pgfmath@basic@round@=\pgfmathround@
+\let\pgfmath@basic@rand@=\pgfmathrand@
+\let\pgfmath@basic@rnd@=\pgfmathrnd@
+\let\pgfmath@basic@setseed@=\pgfmathsetseed@
+\let\pgfmath@basic@random@=\pgfmathrandom@
+\let\pgfmath@basic@floor@=\pgfmathfloor@
+\let\pgfmath@basic@ceil@=\pgfmathceil@
+\let\pgfmath@basic@mod@=\pgfmathmod@
+\let\pgfmath@basic@max@=\pgfmathmax@
+\let\pgfmath@basic@min@=\pgfmathmin@
+\let\pgfmath@basic@sin@=\pgfmathsin@
+\let\pgfmath@basic@cos@=\pgfmathcos@
+\let\pgfmath@basic@tan@=\pgfmathtan@
+\let\pgfmath@basic@deg@=\pgfmathdeg@
+\let\pgfmath@basic@rad@=\pgfmathrad@
+\let\pgfmath@basic@atan@=\pgfmathatan@
+\let\pgfmath@basic@asin@=\pgfmathasin@
+\let\pgfmath@basic@acos@=\pgfmathacos@
+\let\pgfmath@basic@cot@=\pgfmathcot@
+\let\pgfmath@basic@sec@=\pgfmathsec@
+\let\pgfmath@basic@cosec@=\pgfmathcosec@
+\let\pgfmath@basic@pow@=\pgfmathpow@
+\let\pgfmath@basic@exp@=\pgfmathexp@
+\let\pgfmath@basic@ln@=\pgfmathln@
+\let\pgfmath@basic@sqrt@=\pgfmathsqrt@
+\let\pgfmath@basic@@pi=\pgfmath@pi
+\let\pgfmath@basic@veclen@=\pgfmathveclen@
+\let\pgfmath@basic@e@=\pgfmathe@
+\let\pgfmath@basic@lessthan@=\pgfmathlessthan@
+\let\pgfmath@basic@greaterthan@=\pgfmathgreaterthan@
+\let\pgfmath@basic@equalto@=\pgfmathequalto@
+\let\pgfmath@basic@equal@=\pgfmathequal@
+\let\pgfmath@basic@true@=\pgfmathtrue@
+\let\pgfmath@basic@false@=\pgfmathfalse@
+
+\def\pgfmathfloatscientific#1#2{%
+ \edef\pgfmathresult{#1e#2}%
+ \expandafter\pgfmathfloatparsenumber\expandafter{\pgfmathresult}%
+}
+% Compares #1 with #2 and sets \pgfmathresult either to 1.0 or 0.0.
+%
+% It also sets the boolean \ifpgfmathfloatcomparison (globally).
+\def\pgfmathfloatlessthan@#1#2{%
+%\def\pgfmathfloatlessthan#1#2#3\and#4#5#6{%
+ \global\pgfmathfloatcomparisonfalse
+ \begingroup
+ \edef\pgfmathfloat@loc@TMPa{#1}%
+ \edef\pgfmathfloat@loc@TMPb{#2}%
+ \expandafter\pgfmathfloat@decompose\pgfmathfloat@loc@TMPa\relax\pgfmathfloat@a@S\pgfmathfloat@a@M\pgfmathfloat@a@E
+ \expandafter\pgfmathfloat@decompose\pgfmathfloat@loc@TMPb\relax\pgfmathfloat@b@S\pgfmathfloat@b@M\pgfmathfloat@b@E
+ \ifcase\pgfmathfloat@a@S
+ % x = 0 -> (x<y <=> y >0)
+ \ifcase\pgfmathfloat@b@S
+ % y = 0
+ \or% y > 0
+ \global\pgfmathfloatcomparisontrue
+ \or% y < 0
+ \or% y = nan
+ \or% y = + infty
+ \global\pgfmathfloatcomparisontrue
+ \or% y = -infty
+ \fi
+ \or
+ % x > 0 -> (x<y <=> ( y > 0 && |x| < |y|) )
+ \ifcase\pgfmathfloat@b@S
+ % y = 0
+ \or% y>0:
+ \pgfmathfloatlessthan@positive
+ \or% y < 0
+ \or% y = nan
+ \or% y = + infty
+ \global\pgfmathfloatcomparisontrue
+ \or% y = -infty
+ \fi
+ \or
+ % x < 0 -> (x<y <=> (y >= 0 || |x| > |y|) )
+ \ifcase\pgfmathfloat@b@S
+ % y = 0
+ \global\pgfmathfloatcomparisontrue
+ \or%y > 0
+ \global\pgfmathfloatcomparisontrue
+ \or% 'y<0':
+ \pgfmathfloatgreaterthan@positive
+ \or% y = nan
+ \or% y = + infty
+ \global\pgfmathfloatcomparisontrue
+ \or% y = -infty
+ \fi
+ \or
+ % x = nan.
+ \or
+ % x = +infty
+ \or
+ % x = -infty
+ \ifnum\pgfmathfloat@b@S=3
+ \else
+ \global\pgfmathfloatcomparisontrue
+ \fi
+ \fi
+ \endgroup
+ \ifpgfmathfloatcomparison
+ \def\pgfmathresult{1.0}%
+ \else
+ \def\pgfmathresult{0.0}%
+ \fi
+}
+\let\pgfmathfloatlessthan=\pgfmathfloatlessthan@
+\let\pgfmathfloatless@=\pgfmathfloatlessthan@
+
+% ! (#1 < #2) <=> (#1 >= #2)
+\def\pgfmathfloatnotless@#1#2{%
+ \pgfmathfloatless@{#1}{#2}%
+ \ifpgfmathfloatcomparison
+ \def\pgfmathresult{0.0}%
+ \else
+ \def\pgfmathresult{1.0}%
+ \fi
+}%
+% ! (#1 > #2) <=> (#1 <= #2)
+\def\pgfmathfloatnotgreater@#1#2{%
+ \pgfmathfloatless@{#2}{#1}%
+ \ifpgfmathfloatcomparison
+ \def\pgfmathresult{0.0}%
+ \else
+ \def\pgfmathresult{1.0}%
+ \fi
+}%
+
+% compares \pgfmathfloat@a@[SME] < \pgfmathfloat@b@[SME]
+\def\pgfmathfloatlessthan@positive{%
+ \ifnum\pgfmathfloat@a@E<\pgfmathfloat@b@E
+ \global\pgfmathfloatcomparisontrue
+ \else
+ \ifnum\pgfmathfloat@a@E=\pgfmathfloat@b@E
+ \ifdim\pgfmathfloat@a@M<\pgfmathfloat@b@M
+ \global\pgfmathfloatcomparisontrue
+ \fi
+ \fi
+ \fi
+}
+
+% compares \pgfmathfloat@a@[SME] > \pgfmathfloat@b@[SME]
+\def\pgfmathfloatgreaterthan@positive{%
+ \ifnum\pgfmathfloat@a@E>\pgfmathfloat@b@E
+ \global\pgfmathfloatcomparisontrue
+ \else
+ \ifnum\pgfmathfloat@a@E=\pgfmathfloat@b@E
+ \ifdim\pgfmathfloat@a@M>\pgfmathfloat@b@M
+ \global\pgfmathfloatcomparisontrue
+ \fi
+ \fi
+ \fi
+}
+
+
+\def\pgfmathfloatgreaterthan@#1#2{\pgfmathfloatlessthan@{#2}{#1}}
+\let\pgfmathfloatgreaterthan=\pgfmathfloatgreaterthan@
+\let\pgfmathfloatgreater@=\pgfmathfloatgreaterthan@
+
+\def\pgfmathfloatmax@#1{%
+ \begingroup
+ \pgfmathfloatcreate{2}{1.0}{2147483644}%
+ \let\pgfmathmaxsofar=\pgfmathresult
+ \pgfmathfloatmax@@#1{}%
+}%
+\def\pgfmathfloatmax@@#1{%
+ \def\pgfmath@temp{#1}%
+ \ifx\pgfmath@temp\pgfmath@empty%
+ \expandafter\pgfmathfloatmax@@@%
+ \else%
+ \pgfmathfloatlessthan{\pgfmathmaxsofar}{#1}%
+ \ifpgfmathfloatcomparison
+ \edef\pgfmathmaxsofar{#1}%
+ \fi
+ \expandafter\pgfmathfloatmax@@%
+ \fi%
+}%
+\def\pgfmathfloatmax@@@{%
+ \let\pgfmathresult=\pgfmathmaxsofar
+ \pgfmath@smuggleone{\pgfmathresult}%
+ \endgroup
+}%
+\def\pgfmathfloatmin@#1{%
+ \begingroup
+ \pgfmathfloatcreate{1}{1.0}{2147483644}%
+ \let\pgfmathminsofar=\pgfmathresult
+ \pgfmathfloatmin@@#1{}%
+}%
+\def\pgfmathfloatmin@@#1{%
+ \def\pgfmath@temp{#1}%
+ \ifx\pgfmath@temp\pgfmath@empty%
+ \expandafter\pgfmathfloatmin@@@%
+ \else%
+ \pgfmathfloatlessthan{#1}{\pgfmathminsofar}%
+ \ifpgfmathfloatcomparison
+ \edef\pgfmathminsofar{#1}%
+ \fi
+ \expandafter\pgfmathfloatmin@@%
+ \fi%
+}%
+\def\pgfmathfloatmin@@@{%
+ \let\pgfmathresult=\pgfmathminsofar
+ \pgfmath@smuggleone{\pgfmathresult}%
+ \endgroup
+}%
+
+\def\pgfmathfloatmaxtwo#1#2{%
+ \pgfmathfloatlessthan{#1}{#2}%
+ \ifpgfmathfloatcomparison
+ \edef\pgfmathresult{#2}%
+ \else
+ \edef\pgfmathresult{#1}%
+ \fi
+}
+\let\pgfmathfloatmax=\pgfmathfloatmaxtwo
+
+\def\pgfmathfloatmintwo#1#2{%
+ \pgfmathfloatlessthan{#1}{#2}%
+ \ifpgfmathfloatcomparison
+ \edef\pgfmathresult{#1}%
+ \else
+ \edef\pgfmathresult{#2}%
+ \fi
+}
+\let\pgfmathfloatmin=\pgfmathfloatmintwo
+
+% Renormalizes #1 to extended precision mantisse, meaning
+% 100 <= m < 1000
+% instead of 1 <= m < 10.
+%
+% The 'extended precision' means we have higher accuracy when we apply pgfmath operations to mantissas.
+%
+% The input argument is expected to be a normalized floating point number; the output argument is a non-normalized floating point number (well, normalized to extended precision).
+%
+% The operation is supposed to be very fast.
+%
+% @see \pgfmathfloatsetextprecision
+%
+% There is a routine for internal usage,
+% \pgfmathfloattoextentedprecision@a. It also provides exponent and
+% sign of #1 in output arguments and may be used to increase speed.
+\def\pgfmathfloattoextentedprecision#1{%
+ \begingroup
+ \pgfmathfloattoextentedprecision@a{#1}%
+ \pgfmathfloatcreate{\pgfmathfloat@a@S}{\pgfmathresult}{\pgfmathfloat@a@E}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+\def\pgfmathfloattoextentedprecision@@zero#1\pgfmathfloat@EOI{%
+ \edef\pgfmathresult{#1}%
+}%
+\def\pgfmathfloattoextentedprecision@@one#1.#2#3\pgfmathfloat@EOI{%
+ \edef\pgfmathresult{#1#2.#3}%
+}%
+\def\pgfmathfloattoextentedprecision@@two#1.#2#3#4\pgfmathfloat@EOI{%
+ \edef\pgfmathresult{#1#2#3.#4}%
+}%
+\def\pgfmathfloattoextentedprecision@@three#1.#2#3#4#5\pgfmathfloat@EOI{%
+ \edef\pgfmathresult{#1#2#3#4.#5}%
+}%
+
+% Sets extended precision to 10^#1.
+%
+% The different choices are
+%
+% - 0: normalization 0 <= m < 1 (disable extended precision)
+% - 1: normalization 10 <= m < 100
+% - 2: normalization 100 <= m < 1000 (default)
+% - 3: normalization 1000 <= m < 10000
+%
+% #1 is the exponent, #1 = 0,1,2 or 3.
+%
+% This setting applies to \pgfmathfloattoextentedprecision and friends.
+\def\pgfmathfloatsetextprecision#1{%
+ \ifcase#1\relax
+ \let\pgfmathfloattoextentedprecision@@=\pgfmathfloattoextentedprecision@@zero
+ \def\pgfmathfloatextprec@shift{0}%
+ \or
+ \let\pgfmathfloattoextentedprecision@@=\pgfmathfloattoextentedprecision@@one
+ \def\pgfmathfloatextprec@shift{1}%
+ \or
+ \let\pgfmathfloattoextentedprecision@@=\pgfmathfloattoextentedprecision@@two
+ \def\pgfmathfloatextprec@shift{2}%
+ \else
+ \let\pgfmathfloattoextentedprecision@@=\pgfmathfloattoextentedprecision@@three
+ \def\pgfmathfloatextprec@shift{3}%
+ \fi
+}%
+\pgfmathfloatsetextprecision{2}%
+
+% Does the "hard" work for \pgfmathfloattoextentedprecision. It
+% provides additional outputs.
+%
+% INPUT:
+% #1 normalized floating point number. Maybe a macro (it will be expanded ONCE)
+%
+% OUTPUT:
+% - \pgfmathresult : the mantisse in extended precision
+% - \pgfmathfloat@a@S : the sign of #1
+% - \pgfmathfloat@a@E : the exponent of #1, adjusted for extended precision
+% - \pgfmathfloat@a@Mtok : undefined (its contents will be destroyed.
+%
+\def\pgfmathfloattoextentedprecision@a#1{%
+ \edef\pgfmathresult{#1}%
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifnum\pgfmathfloat@a@S<3
+ \advance\pgfmathfloat@a@E by-\pgfmathfloatextprec@shift\relax% compensate for shift
+ \expandafter\pgfmathfloattoextentedprecision@@\the\pgfmathfloat@a@Mtok 000\pgfmathfloat@EOI
+ \fi
+}%
+
+
+% Similar to \pgfmathfloattoextentedprecision@a, this one here fills the '@b' registers.
+\def\pgfmathfloattoextentedprecision@b#1{%
+ \edef\pgfmathresult{#1}%
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@b@S\pgfmathfloat@a@Mtok\pgfmathfloat@b@E
+ \ifnum\pgfmathfloat@b@S<3
+ \advance\pgfmathfloat@b@E by-\pgfmathfloatextprec@shift\relax
+ \expandafter\pgfmathfloattoextentedprecision@@\the\pgfmathfloat@a@Mtok 00\pgfmathfloat@EOI
+ \fi
+}%
+
+% Addition of two floating point numbers using 8 significant digits.
+\def\pgfmathfloatadd@#1#2{%
+ \begingroup
+ %
+ % renormalize argument to 100 <= m < 1000 for extended accuracy:
+ \pgfmathfloattoextentedprecision@a{#1}%
+ \let\pgfmathfloat@arga=\pgfmathresult
+ %
+ \pgfmathfloattoextentedprecision@b{#2}%
+ \let\pgfmathfloat@argb=\pgfmathresult
+ %
+ \pgfmathfloatcomparisontrue% re-use this boolean here to handle special cases.
+ \ifcase\pgfmathfloat@a@S
+ \edef\pgfmathresult{#2}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \or
+ \edef\pgfmathfloat@arga{-\pgfmathfloat@arga}%
+ \else
+ \pgfmathfloatcomparisonfalse
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{0.0}{0}%
+ \fi
+ \ifcase\pgfmathfloat@b@S
+ \edef\pgfmathresult{#1}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \or
+ \edef\pgfmathfloat@argb{-\pgfmathfloat@argb}%
+ \else
+ \pgfmathfloatcomparisonfalse
+ \pgfmathfloatcreate{\the\pgfmathfloat@b@S}{0.0}{0}%
+ \fi
+ \ifpgfmathfloatcomparison
+ % Shift lesser mantisse to fit the larger one:
+ \ifnum\pgfmathfloat@a@E<\pgfmathfloat@b@E
+ \pgfmathfloatadd@shift{\pgfmathfloat@arga}{\pgfmathfloat@a@E}{\pgfmathfloat@b@E}%
+ \else
+ \pgfmathfloatadd@shift{\pgfmathfloat@argb}{\pgfmathfloat@b@E}{\pgfmathfloat@a@E}%
+ \fi
+ % add them!
+ \pgfmath@basic@add@{\pgfmathfloat@arga}{\pgfmathfloat@argb}%
+ % renormalize sum. This is the only part were an expensive routine comes into play:
+ \edef\pgfmathresult{\pgfmathresult e\the\pgfmathfloat@a@E}%
+ \expandafter\pgfmathfloatqparsenumber\expandafter{\pgfmathresult}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% #1= floating point number
+% #2= TeX code to execute if #1 == 0
+% #3= TeX code to execute if #1 != 0
+\def\pgfmathfloatifzero#1#2#3{%
+ \pgfmathfloatgetflagstomacro{#1}\pgfmathfloat@loc@TMPa
+ \if\pgfmathfloat@loc@TMPa0 #2\else#3\fi
+}%
+
+\def\pgfmathfloatiffinite#1#2#3{%
+ \pgfmathfloatgetflagstomacro{#1}\pgfmathfloatiffinite@
+ \ifnum\pgfmathfloatiffinite@>2 #3\else #2\fi
+}%
+
+\def\pgfmathfloatifthenelse@#1#2#3{%
+ \pgfmathfloatifflags{#1}{0}{%
+ \edef\pgfmathresult{#3}%%
+ }{%
+ \edef\pgfmathresult{#2}%
+ }%
+}
+\def\pgfmathfloatequal@#1#2{%
+ \pgfmathfloatifapproxequalrel{#1}{#2}{%
+ \def\pgfmathresult{1}%
+ \pgfmathfloatcomparisontrue
+ }{%
+ \def\pgfmathresult{0}%
+ \pgfmathfloatcomparisonfalse
+ }%
+}
+\let\pgfmathfloatequalto@=\pgfmathfloatequal@
+
+\def\pgfmathfloatnotequal@#1#2{%
+ \pgfmathfloatifapproxequalrel{#1}{#2}{%
+ \def\pgfmathresult{0}%
+ \pgfmathfloatcomparisonfalse
+ }{%
+ \def\pgfmathresult{1}%
+ \pgfmathfloatcomparisontrue
+ }%
+}
+\let\pgfmathfloatnotequalto@=\pgfmathfloatnotequal@
+
+% Computes the relative error between #1 and #2 (assuming #2 != 0) and
+% invokes #3 if the relative error is below `/pgf/fpu/rel thresh' and
+% #4 if that is not the case.
+\long\def\pgfmathfloatifapproxequalrel#1#2#3#4{%
+ \begingroup
+ \pgfmathfloatparsenumber{#1}%
+ \let\pgfmathfloatarga=\pgfmathresult
+ \pgfmathfloatparsenumber{#2}%
+ \let\pgfmathfloatargb=\pgfmathresult
+ \pgfmathfloatrelerror@\pgfmathfloatarga\pgfmathfloatargb
+ \let\pgfmathfloatarga=\pgfmathresult
+ \pgfmathfloatlessthan@\pgfmathfloatarga\pgfmathfloat@relthresh
+ \ifpgfmathfloatcomparison
+ \def\pgfmathfloat@loc@TMPa{#3}%
+ \else
+ \def\pgfmathfloat@loc@TMPa{#4}%
+ \fi
+ \expandafter\endgroup
+ \pgfmathfloat@loc@TMPa
+}%
+
+% Invokes code '#3' if the flags of the floating point number '#1'
+% match the flag provided in '#2'.
+%
+% \pgfmathfloatcreate{1}{1.0}{2}
+% \pgfmathfloatifflags{\pgfmathresult}{0}{It's zero!}{It's not zero!}%
+% \pgfmathfloatifflags{\pgfmathresult}{1}{It's positive!}{It's not positive!}%
+% \pgfmathfloatifflags{\pgfmathresult}{2}{It's negative!}{It's not negative!}%
+% or, equivalently
+% \pgfmathfloatifflags{\pgfmathresult}{+}{It's positive!}{It's not positive!}%
+% \pgfmathfloatifflags{\pgfmathresult}{-}{It's negative!}{It's not negative!}%
+% it also supports #2=u which means 'unbounded'
+\def\pgfmathfloatifflags#1#2#3#4{%
+ \if#2-%
+ \pgfmathfloatifflags{#1}{2}{#3}{#4}%
+ \else
+ \if#2+%
+ \pgfmathfloatifflags{#1}{1}{#3}{#4}%
+ \else
+ \pgfmathfloatgetflagstomacro{#1}\pgfmathfloat@loc@TMPa
+ \if#2u%
+ \ifnum\pgfmathfloat@loc@TMPa>2
+ #3\relax
+ \else
+ #4\relax
+ \fi
+ \else
+ \if\pgfmathfloat@loc@TMPa#2%
+ #3\relax
+ \else
+ #4\relax
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+
+% #1=mantisse which needs to be shifted (with smaller exponent)
+% #2=smaller exponent
+% #3=larger exponent
+%
+% ATTENTION: this helper method DESTROYS contents of \pgfmathfloat@a@S.
+\def\pgfmathfloatadd@shift#1#2#3{%
+ \pgf@xa=#1 pt%
+ \pgfmathfloat@a@S=#3\relax
+ \advance\pgfmathfloat@a@S by-#2\relax
+ \ifcase\pgfmathfloat@a@S
+ \or
+ \divide\pgf@xa by10\relax
+ \or
+ \divide\pgf@xa by100\relax
+ \or
+ \divide\pgf@xa by1000\relax
+ \or
+ \divide\pgf@xa by10000\relax
+ \or
+ \divide\pgf@xa by10000\relax
+ \divide\pgf@xa by10\relax
+ \or
+ \divide\pgf@xa by10000\relax
+ \divide\pgf@xa by100\relax
+ \or
+ \divide\pgf@xa by10000\relax
+ \divide\pgf@xa by1000\relax
+ \or
+ \divide\pgf@xa by10000\relax
+ \divide\pgf@xa by10000\relax
+ \else
+ \pgf@xa=0pt%
+ \fi
+ #2=#3\relax
+ \edef#1{\pgf@sys@tonumber\pgf@xa}%
+}
+
+\let\pgfmathfloatadd=\pgfmathfloatadd@
+
+
+% Subtracts two floating point numbers.
+\def\pgfmathfloatsubtract@#1#2{%
+ \begingroup
+ \edef\pgfmathresult{#2}%
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@b@S\pgfmathfloat@a@Mtok\pgfmathfloat@b@E
+ \ifcase\pgfmathfloat@b@S
+ \edef\pgfmathresult{#1}%
+ \or
+ \pgfmathfloatcreate{2}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@b@E}%
+ \let\pgfmathfloatsub@arg=\pgfmathresult
+ \pgfmathfloatadd@{#1}{\pgfmathfloatsub@arg}%
+ \or
+ \pgfmathfloatcreate{1}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@b@E}%
+ \let\pgfmathfloatsub@arg=\pgfmathresult
+ \pgfmathfloatadd@{#1}{\pgfmathfloatsub@arg}%
+ \else
+ \pgfmathfloatcreate{\the\pgfmathfloat@b@S}{0.0}{0}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+\let\pgfmathfloatsubtract=\pgfmathfloatsubtract@
+
+% Scales a floating point number #1 with a fixed point number #2 using pgfmathmultiply.
+%
+% Use this method if #2 is small number.
+\def\pgfmathfloatmultiplyfixed@#1#2{%
+ \begingroup
+ %
+ % renormalize argument to 100 <= m < 1000 for extended accuracy:
+ \pgfmathfloattoextentedprecision@a{#1}%
+ \let\pgfmathfloat@arga=\pgfmathresult
+ %
+ \pgfmathfloatcomparisontrue% re-use this boolean here to handle special cases.
+ \ifcase\pgfmathfloat@a@S
+ \edef\pgfmathresult{#1}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \or
+ \edef\pgfmathfloat@arga{-\pgfmathfloat@arga}%
+ \else
+ \pgfmathfloatcomparisonfalse
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{0.0}{0}%
+ \fi
+ \ifpgfmathfloatcomparison
+ \pgfmath@basic@multiply@{\pgfmathfloat@arga}{#2}%
+ % renormalize product. This is the only part were an expensive routine comes into play:
+ \edef\pgfmathresult{\pgfmathresult e\the\pgfmathfloat@a@E}%
+ \expandafter\pgfmathfloatqparsenumber\expandafter{\pgfmathresult}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+\let\pgfmathfloatmultiplyfixed=\pgfmathfloatmultiplyfixed@
+
+
+\def\pgfmathfloatmultiply@#1#2{%
+ \begingroup
+ \pgfmathfloatsetextprecision{1}%
+ \pgfmathfloattoextentedprecision@a{#1}%
+ \let\pgfmathfloat@arga=\pgfmathresult
+ %
+ \pgfmathfloattoextentedprecision@b{#2}%
+ \let\pgfmathfloat@argb=\pgfmathresult
+ %
+ \pgfmathfloatcomparisontrue% re-use this boolean here to handle special cases.
+ \ifcase\pgfmathfloat@a@S
+ % 0
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or% +
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \def\pgfmathresult@S{1}%
+ \or
+ \def\pgfmathresult@S{2}%
+ \else
+ \expandafter\pgfmathfloatcreate\the\pgfmathfloat@b@S{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \or% -
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \def\pgfmathresult@S{2}%
+ \or
+ \def\pgfmathresult@S{1}%
+ \or
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \or% nan
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or% +infty
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \or% -infty
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \fi
+ \ifpgfmathfloatcomparison
+ \pgfmath@basic@multiply@{\pgfmathfloat@arga}{\pgfmathfloat@argb}%
+ \advance\pgfmathfloat@a@E by\pgfmathfloat@b@E
+ % renormalize sum. This is the only part were an expensive routine comes into play:
+ \edef\pgfmathresult{\pgfmathresult e\the\pgfmathfloat@a@E}%
+ \expandafter\pgfmathfloatqparsenumber\expandafter{\pgfmathresult}%
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \pgfmathfloatcreate{\pgfmathresult@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\let\pgfmathfloatmultiply=\pgfmathfloatmultiply@
+
+% Defines \pgfmathresult to be #1 / #2 for two floating point numbers.
+%
+% It employs the basic math engine internally to divide mantissas.
+\def\pgfmathfloatdivide@#1#2{%
+ \begingroup
+ \pgfmathfloatsetextprecision{1}% is not too important, I think. After all, 0.1 <= #1/#2 < 10 or so due to normalization (no matter, which)
+ \edef\pgfmathfloat@arga{#1}%
+ \pgfmathfloattoextentedprecision@a{\pgfmathfloat@arga}%
+ \let\pgfmathfloat@arga=\pgfmathresult
+ %
+ \edef\pgfmathfloat@argb{#2}%
+ \pgfmathfloattoextentedprecision@b{\pgfmathfloat@argb}%
+ \let\pgfmathfloat@argb=\pgfmathresult
+ %
+ \pgfmathfloatcomparisontrue% re-use this boolean here to handle special cases.
+ \ifcase\pgfmathfloat@a@S
+ % 0
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or% +
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \def\pgfmathresult@S{1}%
+ \or
+ \def\pgfmathresult@S{2}%
+ \or
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \else
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \or% -
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \def\pgfmathresult@S{2}%
+ \or
+ \def\pgfmathresult@S{1}%
+ \or
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \else
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \or% nan
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or% +infty
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}% what is inf/inf ?
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}% or inf/-inf ?
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \or% -infty
+ \ifcase\pgfmathfloat@b@S
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{5}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \or
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \pgfmathfloatcomparisonfalse
+ \fi
+ \fi
+ \ifpgfmathfloatcomparison
+ \pgfmath@basic@divide@{\pgfmathfloat@arga}{\pgfmathfloat@argb}%
+ \advance\pgfmathfloat@a@E by-\pgfmathfloat@b@E
+ % renormalize. This is the only part were an expensive float routine comes into play:
+ \edef\pgfmathresult{\pgfmathresult e\the\pgfmathfloat@a@E}%
+ \expandafter\pgfmathfloatqparsenumber\expandafter{\pgfmathresult}%
+ % And re-insert the proper sign:
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \pgfmathfloatcreate{\pgfmathresult@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\let\pgfmathfloatdivide=\pgfmathfloatdivide@
+
+\def\pgfmathfloatreciprocal@#1{%
+ \begingroup
+ % FIXME optimize
+ \edef\pgfmathfloat@loc@TMPa{#1}%
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \pgfmathfloatdivide@{\pgfmathresult}{\pgfmathfloat@loc@TMPa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% Computes sqrt(#1) in floating point arithmetics.
+%
+% It employs sqrt( m * 10^e ) = sqrt(m) * sqrt(10^e).
+\def\pgfmathfloatsqrt@#1{%
+ \begingroup
+ \pgfmathfloatsetextprecision{3}%
+ \edef\pgfmathfloat@arga{#1}%
+ \pgfmathfloattoextentedprecision@a{\pgfmathfloat@arga}%
+ \let\pgfmathfloat@arga=\pgfmathresult
+ %
+ \ifcase\pgfmathfloat@a@S
+ % 0
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \or% +
+ \pgfmath@basic@sqrt@{\pgfmathfloat@arga}%
+ \ifodd\pgfmathfloat@a@E
+ \ifnum\pgfmathfloat@a@E>0
+ \expandafter\pgfmath@basic@multiply@\expandafter{\pgfmathresult}{3.16227766}% * sqrt(10)
+ \else
+ \expandafter\pgfmath@basic@multiply@\expandafter{\pgfmathresult}{0.316227766}% * sqrt(0.1)
+ \fi
+ \fi
+ \divide\pgfmathfloat@a@E by2 % sqrt(10^e) = 10^{e/2} (see above for odd e)
+ % renormalize sum. This is the only part were an expensive routine comes into play:
+ \edef\pgfmathfloat@arga{\pgfmathresult e\the\pgfmathfloat@a@E}%
+ \pgfmathfloatqparsenumber{\pgfmathfloat@arga}%
+ \or% -
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \or% nan
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \or% +infty
+ \pgfmathfloatcreate{4}{0.0}{0}%
+ \or% -infty
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\let\pgfmathfloatsqrt=\pgfmathfloatsqrt@
+
+% Returns the integer part of the floating point number #1.
+%
+% The result is returned as floating point as well.
+%
+% This operation is not limited to TeX's range of count registers (it
+% works symbolly)
+%
+% @see \pgfmathfloattoint
+% POSTCONDITION: \pgfmathresult contains the result and
+% \pgfmathfloatintwasnoop=1 if there was nothing to do
+% \pgfmathfloatintwasnoop=0 if there where non-zero digits after the period
+% \pgfmathfloatintwasnoop=2 if there where digits after the period. The digits will be stored in \pgfmathfloatintremainder in this case.
+\def\pgfmathfloatint@#1{%
+ \begingroup
+ \edef\pgfmathfloatint@input{#1}%
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathfloatint@input\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \gdef\pgfmathfloatintwasnoop{1}%
+ \gdef\pgfmathfloatintremainder{}%
+ \ifcase\pgfmathfloat@a@S
+ % 0: nothing to do.
+ \or% +
+ \expandafter\pgfmathfloatint@@\the\pgfmathfloat@a@Mtok\pgfmathfloat@EOI
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \or% -
+ \expandafter\pgfmathfloatint@@\the\pgfmathfloat@a@Mtok\pgfmathfloat@EOI
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \else
+ % nothing to do
+ \fi
+ %\message{ XXXXX int(\pgfmathfloatint@input) = \pgfmathresult -> was no op = \pgfmathfloatintwasnoop\space (remainder \pgfmathfloatintremainder)^^J}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\def\pgfmathfloatint@@#1.{%
+ \ifnum\pgfmathfloat@a@E<0
+ \pgfmathfloat@a@S=0
+ \pgfmathfloat@a@Mtok={0.0}%
+ \pgfmathfloat@a@E=0
+ \gdef\pgfmathfloatintwasnoop{0}%
+ \expandafter\pgfmathfloatint@@loop@gobble
+ \else
+ \pgfmathfloat@a@Mtok={#1.}%
+ \pgfmathfloat@b@E=\pgfmathfloat@a@E
+ \expandafter\pgfmathfloatint@@loop
+ \fi
+}%
+\def\pgfmathfloatint@@loop#1{%
+ \def\pgfmathfloatint@@loop@{#1}%
+ \ifx\pgfmathfloatint@@loop@\pgfmathfloat@EOI
+ \gdef\pgfmathfloatintwasnoop{1}%
+ \let\pgfmathfloatint@@loop@next=\relax
+ \else
+ \ifnum\pgfmathfloat@b@E=0
+ \def\pgfmathfloatint@@loop@next{\pgfmathfloatint@@loop@gobble#1}%
+ \else
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok#1}%
+ \advance\pgfmathfloat@b@E by-1
+ \let\pgfmathfloatint@@loop@next=\pgfmathfloatint@@loop
+ \fi
+ \fi
+ \pgfmathfloatint@@loop@next
+}%
+\def\pgfmathfloatint@@loop@gobble#1\pgfmathfloat@EOI{%
+ \if0\pgfmathfloatintwasnoop
+ \else
+ \gdef\pgfmathfloatintwasnoop{2}%
+ \gdef\pgfmathfloatintremainder{#1}%
+ \fi
+}%
+\let\pgfmathfloatint=\pgfmathfloatint@
+
+\def\pgfmathfloatfloor#1{%
+ \edef\pgfmath@orig{#1}%
+ \pgfmathfloatint@{#1}%
+ \pgfmathfloatifflags{\pgfmath@orig}{2}{%
+ \let\pgfmath@trunc=\pgfmathresult
+ \ifcase\pgfmathfloatintwasnoop\relax
+ % ah - we stripped something! Round DOWN
+ \pgfmathfloatcreate{2}{1.0}{0}% -1
+ \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfmath@trunc}%
+ \or
+ % was no-op
+ \let\pgfmathresult=\pgfmath@trunc
+ \else
+ % ok, we have to inspect the remainder:
+ \pgfmathfloatparsenumber{0.\pgfmathfloatintremainder}%
+ \pgfmathfloatifflags{\pgfmathresult}{1}{%
+ % ah - we stripped a non-zero remainder! Round DOWN
+ \pgfmathfloatcreate{2}{1.0}{0}% -1
+ \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfmath@trunc}%
+ }{%
+ % was no-op
+ \let\pgfmathresult=\pgfmath@trunc
+ }%
+ \fi
+ }{}%
+}
+\let\pgfmathfloatfloor@=\pgfmathfloatfloor
+
+\def\pgfmathfloatceil#1{%
+ \edef\pgfmath@orig{#1}%
+ \pgfmathfloatint@{#1}%
+ \pgfmathfloatifflags{\pgfmath@orig}{1}{%
+ \let\pgfmath@trunc=\pgfmathresult
+ \ifcase\pgfmathfloatintwasnoop\relax
+ % ah - we stripped something! Round UP
+ \pgfmathfloatcreate{1}{1.0}{0}% +1
+ \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfmath@trunc}%
+ \or
+ % was no-op
+ \let\pgfmathresult=\pgfmath@trunc
+ \else
+ % ok, we have to inspect the remainder:
+ \pgfmathfloatparsenumber{0.\pgfmathfloatintremainder}%
+ \pgfmathfloatifflags{\pgfmathresult}{1}{%
+ % ah - we stripped a non-zero remainder! Round UP
+ \pgfmathfloatcreate{1}{1.0}{0}% +1
+ \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfmath@trunc}%
+ }{%
+ % was no-op
+ \let\pgfmathresult=\pgfmath@trunc
+ }%
+ \fi
+ }{}%
+}
+\let\pgfmathfloatceil@=\pgfmathfloatceil
+
+\def\pgfmathfloat@notimplemented#1{%
+ \pgfmath@error{Sorry, the operation '#1' has not yet been implemented in the floating point unit}{}%
+ \pgfmathfloatcreate{0}{0.0}{0}%
+}%
+
+% Divides or multiplies the input number by 10^#4 using an arithmetic
+% left/right shift.
+%
+% Input:
+% #1 a normalised floating point number.
+% #2 a positive or negative integer number denoting the shift.
+%
+% Example:
+% \pgfmathfloatshift{11e3}{4}%
+% -> pgfmathresult = 11e7
+\def\pgfmathfloatshift@#1#2{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \advance\pgfmathfloat@a@E by#2\relax
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+\let\pgfmathfloatshift=\pgfmathfloatshift@
+
+% Defines \pgfmathresult to be |#1|, the absolute value of the
+% normalized floating point number #1.
+\def\pgfmathfloatabs@#1{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifcase\pgfmathfloat@a@S
+ % 0: do nothing.
+ \or
+ % +: ok, is positive.
+ \or
+ % -: multiply with -1:
+ \pgfmathfloat@a@S=1
+ \or
+ % nan: do nothing.
+ \or
+ % +infty: ok.
+ \or
+ % -infty: multiply with -1:
+ \pgfmathfloat@a@S=4
+ \fi
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+%
+% Defines \pgfmathresult to be sign(#1)
+\def\pgfmathfloatsign@#1{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifcase\pgfmathfloat@a@S
+ % 0:
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \or
+ % +: ok, is positive.
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \or
+ % -:
+ \pgfmathfloatcreate{2}{1.0}{0}%
+ \or
+ % nan: do nothing.
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \or
+ % +infty:.
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \or
+ % -infty:
+ \pgfmathfloatcreate{2}{1.0}{0}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\let\pgfmathfloatsign=\pgfmathfloatsign@
+
+% Computes the absolute error |#1 - #2| into \pgfmathresult.
+\def\pgfmathfloatabserror@#1#2{%
+ \pgfmathfloatsubtract@{#1}{#2}%
+ \pgfmathfloatabs@{\pgfmathresult}%
+}%
+\let\pgfmathfloatabserror=\pgfmathfloatabserror@
+
+% Computes the relative error |#1 - #2|/|#2| into \pgfmathresult,
+% assuming #2 != 0.
+\def\pgfmathfloatrelerror@#1#2{%
+ \pgfmathfloatsubtract@{#1}{#2}%
+ \let\pgfmathfloat@subtract=\pgfmathresult
+ \pgfmathfloatifflags{#2}{0}{%
+ \let\pgfmathresult=\pgfmathfloat@subtract
+ }{%
+ \pgfmathfloatdivide@{\pgfmathfloat@subtract}{#2}%
+ }%
+ \pgfmathfloatabs@{\pgfmathresult}%
+}%
+\let\pgfmathfloatrelerror=\pgfmathfloatrelerror@
+
+% Computes \pgfmathresult = #1 mod #2 using truncated division.
+%
+\def\pgfmathfloatmod@#1#2{%
+ \begingroup
+ \pgfmathfloattoint{#1}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloattoint{#2}%
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \c@pgfmath@counta=\pgfmathfloat@loc@TMPa\relax
+ \divide\c@pgfmath@counta by\pgfmathfloat@loc@TMPb\relax
+ \expandafter\pgfmathfloatparsenumber\expandafter{\the\c@pgfmath@counta}%
+ %
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfmathfloat@loc@TMPa}{#2}%
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \pgfmathfloatsubtract@{#1}{\pgfmathfloat@loc@TMPb}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+\let\pgfmathfloatmod=\pgfmathfloatmod@
+
+
+% A modification of \pgfmathfloatmod@ where #3 = 1/#2 is already
+% known. This may be faster.
+\def\pgfmathfloatmodknowsinverse@#1#2#3{%
+ \pgfmathfloatmod@{#1}{#2}%
+ %--------------------------------------------------
+ % \begingroup
+ % % FIXME : is this function correct? \pgfmathfloatmod had a
+ % % rounding flaw...
+ % \pgfmathfloatmultiply@{#1}{#3}%
+ % \pgfmathfloatint@{\pgfmathresult}%
+ % \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ % \pgfmathfloatmultiply@{\pgfmathfloat@loc@TMPa}{#2}%
+ % \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ % \pgfmathfloatsubtract@{#1}{\pgfmathfloat@loc@TMPb}%
+ % \pgfmath@smuggleone\pgfmathresult
+ % \endgroup
+ %--------------------------------------------------
+}
+\let\pgfmathfloatmodknowsinverse=\pgfmathfloatmodknowsinverse@
+
+\def\pgfmathfloatpi@{%
+ \pgfmathfloatcreate{1}{3.14159265358979}{0}%
+}%
+\let\pgfmathfloatpi=\pgfmathfloatpi@
+
+\def\pgfmathfloate@{%
+ \pgfmathfloatcreate{1}{2.71828182845905}{0}%
+}
+\let\pgfmathfloate=\pgfmathfloate@
+
+% Converts #1 from radians to degrees.
+\def\pgfmathfloatdeg@#1{%
+ \expandafter\ifx\csname pgfmfltdeg@factor\endcsname\relax
+ % Lazy evaluation:
+ \pgfmathfloatcreate{1}{5.72957795130823}{1}%
+ \global\let\pgfmfltdeg@factor=\pgfmathresult
+ \fi
+ \pgfmathfloatmultiply@{#1}\pgfmfltdeg@factor%
+}
+\let\pgfmathfloatdeg=\pgfmathfloatdeg@
+
+% Converts #1 from degree to radians.
+\def\pgfmathfloatrad@#1{%
+ \expandafter\ifx\csname pgfmfltrad@factor\endcsname\relax
+ % Lazy evaluation:
+ \pgfmathfloatcreate{1}{1.74532925199433}{-2}%
+ \global\let\pgfmfltrad@factor=\pgfmathresult
+ \fi
+ \pgfmathfloatmultiply@{#1}\pgfmfltrad@factor%
+}
+\let\pgfmathfloatrad=\pgfmathfloatrad@
+
+% Computes #1(#2) where #1 is a trigonometric function, i.e.
+% #1(#2) = #1( #2 + r*360 )
+%
+% #1 is a one-argument macro which assigns \pgfmathresult.
+\def\pgfmathfloatTRIG@#1#2{%
+ \if0\pgfmath@trig@format@choice
+ % trig format=deg
+ \expandafter\ifx\csname pgfmathfloatTRIG@NUM\endcsname\relax%
+ % Lazy evaluation:
+ \pgfmathfloatcreate{1}{3.6}{2}%
+ \global\let\pgfmathfloatTRIG@NUM=\pgfmathresult
+ \pgfmathfloatcreate{1}{2.77777777777778}{-3}%
+ \global\let\pgfmathfloatTRIG@NUM@INV=\pgfmathresult
+ \fi
+ \pgfmathfloatmodknowsinverse@{#2}{\pgfmathfloatTRIG@NUM}{\pgfmathfloatTRIG@NUM@INV}%
+ \else
+ % trig format=rad
+ \expandafter\ifx\csname pgfmathfloatTRIG@rad@NUM\endcsname\relax%
+ % Lazy evaluation:
+ \pgfmathfloatcreate{1}{6.28318530717959}{0}%
+ \global\let\pgfmathfloatTRIG@rad@NUM=\pgfmathresult
+ \pgfmathfloatcreate{1}{1.59154943091895}{-1}%
+ \global\let\pgfmathfloatTRIG@rad@NUM@INV=\pgfmathresult
+ \fi
+ \pgfmathfloatmodknowsinverse@{#2}{\pgfmathfloatTRIG@rad@NUM}{\pgfmathfloatTRIG@rad@NUM@INV}%
+ \fi
+ \pgfmathfloattofixed@{\pgfmathresult}%
+ \expandafter#1\expandafter{\pgfmathresult}%
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+}%
+
+\def\pgfmathfloatsin@#1{\pgfmathfloatTRIG@\pgfmath@basic@sin@{#1}}
+\let\pgfmathfloatsin=\pgfmathfloatsin@
+\def\pgfmathfloatcos@#1{\pgfmathfloatTRIG@\pgfmath@basic@cos@{#1}}
+\let\pgfmathfloatcos=\pgfmathfloatcos@
+\def\pgfmathfloattan@#1{%
+ % compute sin(#1) / cos(#1)
+ \begingroup
+ \pgfmathfloatcos@{#1}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatsin@{#1}%
+ \expandafter\pgfmathfloatdivide@\expandafter{\pgfmathresult}{\pgfmathfloat@loc@TMPa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+\let\pgfmathfloattan=\pgfmathfloattan@
+
+\def\pgfmathfloatcot@#1{%
+ % compute cos(#1) / sin(#1)
+ \begingroup
+ \pgfmathfloatsin@{#1}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatcos@{#1}%
+ \expandafter\pgfmathfloatdivide@\expandafter{\pgfmathresult}{\pgfmathfloat@loc@TMPa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\let\pgfmathfloatcot=\pgfmathfloatcot@
+
+\def\pgfmathfloatatan@#1{%
+ \begingroup
+ \expandafter\ifx\csname pgfmathfloatatan@TMP\endcsname\relax%
+ \pgfmathfloatcreate{1}{1.6}{4}%
+ \global\let\pgfmathfloatatan@TMP=\pgfmathresult
+ \pgfmathfloatcreate{2}{1.6}{4}%
+ \global\let\pgfmathfloatatan@TMPB=\pgfmathresult
+ \fi
+ \pgfmathfloatgreaterthan@{#1}{\pgfmathfloatatan@TMP}%
+ \ifpgfmathfloatcomparison
+ \pgfmathiftrigonometricusesdeg{%
+ \pgfmathfloatcreate{1}{9.0}{1}%
+ }{%
+ \pgfmathfloatcreate{1}{1.570796326794}{0}%
+ }%
+ \else
+ \pgfmathfloatlessthan{#1}{\pgfmathfloatatan@TMPB}%
+ \ifpgfmathfloatcomparison
+ \pgfmathiftrigonometricusesdeg{%
+ \pgfmathfloatcreate{2}{9.0}{1}%
+ }{%
+ \pgfmathfloatcreate{2}{1.570796326794}{0}%
+ }%
+ \else
+ \pgfmathfloattofixed@{#1}%
+ \expandafter\pgfmath@basic@atan@\expandafter{\pgfmathresult}%
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\let\pgfmathfloatatan=\pgfmathfloatatan@
+
+\def\pgfmathfloatatantwo#1#2{%
+ % Note: first parameter is y (!), second is x (!)
+ \begingroup%
+ \let\pgfmath@trig@format@choice@@=\pgfmath@trig@format@choice
+ \def\pgfmath@trig@format@choice{0}%
+ %
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \expandafter\pgfmathfloat@decompose#2\relax\pgfmathfloat@b@S\pgfmathfloat@b@M\pgfmathfloat@b@E
+ \ifnum\pgfmathfloat@a@S=0
+ % ok, #1 = 0. Substitute by 1e-16 such that the next \ifnum catches it:
+ \pgfmathfloat@a@E=-16 %
+ \fi
+ %
+ \ifnum\pgfmathfloat@a@E<-3 %
+ \ifnum\pgfmathfloat@b@S=2 %
+ % #2 < 0
+ \pgfmathfloatcreate{1}{1.8}{2}% +180
+ \else
+ \ifnum\pgfmathfloat@b@S=1 %
+ % #2 >0
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \else
+ % + or - 90, just use the sign of #1:
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{9.0}{1}%
+ \fi
+ \fi
+ \else%
+ \pgfmathfloatabs@{#1}\let\pgfmath@tempa\pgfmathresult%
+ \pgfmathfloatabs@{#2}\let\pgfmath@tempb\pgfmathresult%
+ \pgfmathfloatgreaterthan@{\pgfmath@tempa}{\pgfmath@tempb}%
+ \ifpgfmathfloatcomparison
+ \pgfmathfloatdivide@{#2}{\pgfmath@tempa}%
+ \expandafter\pgfmathfloatatan@\expandafter{\pgfmathresult}%
+ \let\pgfmath@tempa=\pgfmathresult
+ \pgfmathfloatcreate{1}{9.0}{1}%
+ \let\pgfmath@tempb=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfmath@tempb}{\pgfmath@tempa}%
+ \else%
+ \pgfmathfloatdivide@{\pgfmath@tempa}{#2}%
+ \expandafter\pgfmathfloatatan@\expandafter{\pgfmathresult}%
+ \expandafter\pgfmathfloatifflags\expandafter{\pgfmathresult}{2}{%
+ \let\pgfmath@tempa=\pgfmathresult
+ \pgfmathfloatcreate{1}{1.8}{2}%
+ \let\pgfmath@tempb=\pgfmathresult
+ \pgfmathfloatadd@{\pgfmath@tempa}{\pgfmath@tempb}%
+ }{}%
+ \fi%
+ %
+ \pgfmathfloatifflags{#1}{-}{%
+ % #1 < 0:
+ \pgfmathfloatmultiplyfixed@{\pgfmathresult}{-1}%
+ }{}%
+ \fi%
+ \if1\pgfmath@trig@format@choice@@
+ % trig format=rad
+ \pgfmathfloat@scale@deg@to@rad\pgfmathresult
+ \fi
+ \pgfmath@smuggleone\pgfmathresult%
+ \endgroup%
+}%
+\let\pgfmathfloatatantwo@=\pgfmathfloatatantwo
+\expandafter\let\csname pgfmathfloatatan2\endcsname=\pgfmathfloatatantwo
+\expandafter\let\csname pgfmathfloatatan2@\endcsname=\pgfmathfloatatantwo@
+
+\def\pgfmathfloat@scale@deg@to@rad#1{%
+ \edef\pgfmathfloat@loc@TMPb{#1}%
+ \pgfmathfloatcreate{1}{1.74532925199433}{-2}% = pi / 180
+ \pgfmathfloatmultiply@{\pgfmathresult}{\pgfmathfloat@loc@TMPb}%
+}%
+
+\def\pgfmathfloatsec@#1{\pgfmathfloatTRIG@\pgfmath@basic@cos@{#1}\pgfmathfloatreciprocal@{\pgfmathresult}}
+\let\pgfmathfloatsec=\pgfmathfloatsec@
+\def\pgfmathfloatcosec@#1{\pgfmathfloatTRIG@\pgfmath@basic@sin@{#1}\pgfmathfloatreciprocal@{\pgfmathresult}}
+\let\pgfmathfloatcosec=\pgfmathfloatcosec@
+
+% Expands #2 using \edef and invokes #1 with the resulting string.
+%
+% DEPRECATED
+% Example:
+% \pgfmath@y=7.9pt
+% \pgfmathlog@invoke@expanded\pgfmathexp@{{\pgf@sys@tonumber{\pgfmath@y}}}%
+% will invoke
+% \pgfmathexp@{7.9}
+\def\pgfmathlog@invoke@expanded#1#2{%
+ \edef\pgfmath@resulttemp{#2}%
+ \expandafter#1\pgfmath@resulttemp
+}
+
+\def\pgfmathfloatln@#1{%
+ \pgfmathlog@float{#1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \fi
+}
+\let\pgfmathfloatln=\pgfmathfloatln@
+
+\expandafter\def\csname pgfmathfloatlog10@\endcsname#1{%
+ \pgfmathfloatln@{#1}%
+ \let\pgfmathfloat@log@e=\pgfmathresult
+ \pgfmathfloatcreate{1}{4.34294481903252}{-1}% 1/ln(10)
+ \pgfmathfloatmultiply@{\pgfmathresult}{\pgfmathfloat@log@e}%
+}%
+\pgfutil@namelet{pgfmathfloatlog10}{pgfmathfloatlog10@}%
+
+\expandafter\def\csname pgfmathfloatlog2@\endcsname#1{%
+ \pgfmathfloatln@{#1}%
+ \let\pgfmathfloat@log@e=\pgfmathresult
+ \pgfmathfloatcreate{1}{1.44269504088896}{0}% 1/ln(2)
+ \pgfmathfloatmultiply@{\pgfmathresult}{\pgfmathfloat@log@e}%
+}%
+\pgfutil@namelet{pgfmathfloatlog2}{pgfmathfloatlog2@}%
+
+\expandafter\let\expandafter\pgfmathfloatlogtwo\csname pgfmathfloatlog2\endcsname
+\expandafter\let\expandafter\pgfmathfloatlogtwo@\csname pgfmathfloatlog2@\endcsname
+\expandafter\let\expandafter\pgfmathfloatlogten\csname pgfmathfloatlog10\endcsname
+\expandafter\let\expandafter\pgfmathfloatlogten@\csname pgfmathfloatlog10@\endcsname
+
+% Computes log(x) into \pgfmathresult.
+%
+% This allows numbers such at 10000000 or 5.23e-10 to be represented
+% properly, although TeX-registers would produce overflow/underflow
+% errors in these cases.
+%
+% The natural logarithm is computed using log(X*10^Y) = log(X) + log(10)*Y
+%
+% FIXME This routine is only kept for backwards compatibility!
+% It does not work as expected because
+% 1. it calls \pgfmathfloatparsenumber
+% 2. it returns the result as fixed point number
+% Use \pgfmathln@ instead!
+\def\pgfmathlog@#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathlog@float{\pgfmathresult}%
+}
+\let\pgfmathlog=\pgfmathlog@
+\def\pgfmathlog@float#1{%
+ \begingroup%
+ % compute #1 = M*10^E with normalised mantisse M = [+-]*[1-9].XXXXX
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifnum\pgfmathfloat@a@S=1
+ % Now, compute log(#1) = log(M) + E*log(10)
+ \expandafter\pgfmath@basic@ln@\expandafter{\the\pgfmathfloat@a@Mtok}%
+ \pgfmathfloat@b@M=\pgfmathresult pt%
+ \pgfmathfloat@a@M=2.302585pt% = log(10)
+ \multiply\pgfmathfloat@a@M by\pgfmathfloat@a@E\relax
+ \advance\pgfmathfloat@b@M by\pgfmathfloat@a@M
+ \edef\pgfmathresult{\pgf@sys@tonumber{\pgfmathfloat@b@M}}%
+ \else
+ \let\pgfmathresult=\pgfutil@empty%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup%
+}
+
+
+% Computes exp(#1) in floating point.
+%
+% The algorithm employs the identity
+% exp(x) = exp(x - log(10^k) + log(10^k)
+% = 10^k exp( x - k*log 10 )
+% with k choosen such that exp( x - k*log10) can be computed with the
+% basic level math engine.
+%
+% The precision (relative error) is between 10^{-4} and 10^{-6}. For
+% #1 = 700, it is even 10^{-3}. I will need to improve that someday.
+\def\pgfmathfloatexp@#1{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifcase\pgfmathfloat@a@S
+ % #1 = 0:
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \or% #1 > 0
+ \pgfmathfloatexp@@{#1}%
+ \or% #1 < 0
+ \pgfmathfloatexp@@{#1}%
+ \else
+ \edef\pgfmathresult{#1}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\def\pgfmathfloatexp@@#1{%
+ % Employ the identity
+ % exp(x) = exp(x - log(10^k) + log(10^k)) = 10^k exp( x - k *log(10))
+ %
+ % I'd like to have x - k*log(10) <= 1
+ % => compute k := int( (x - 1) * 1/log(10) )
+ % that should suffice since \pgfmathexp@ should be
+ % accurate enough for those numbers.
+ %
+ % please note that we can do all this in TeX registers.
+ % exp(700) is almost the maximum of double precision
+ % anyway, and exp(16000) is certainly the largest we will
+ % ever need.
+ \pgfmathfloattofixed@{#1}%
+ \pgf@xa=\pgfmathresult pt
+ \pgf@xa=0.434294481\pgf@xa\relax
+ \edef\pgfmathfloat@loc@TMPa{\pgf@sys@tonumber{\pgf@xa}}%
+ \expandafter\pgfmathfloatexp@@toint\pgfmathfloat@loc@TMPa\relax
+ \pgf@xa=2.302585092pt
+ \multiply\pgf@xa by-\pgfmathfloat@k\relax
+ \advance\pgf@xa by\pgfmathresult pt
+ \edef\pgfmathfloat@loc@TMPa{\pgf@sys@tonumber{\pgf@xa}}%
+%\message{computing exp(\pgfmathresult) = 10^\pgfmathfloat@k * exp(\pgfmathfloat@loc@TMPa)...}%
+ \pgfmath@basic@exp@{\pgfmathfloat@loc@TMPa}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatparsenumber{\pgfmathfloat@loc@TMPa}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatshift@{\pgfmathfloat@loc@TMPa}{\pgfmathfloat@k}%
+}
+% determine 'k'. This is a heuristics. The exponential series
+% converges best for |x| <= 1. However, the fixed point arithmetics
+% for tex results in best results for large |x|. Well, I'll need to
+% tune this here.
+\def\pgfmathfloatexp@@toint#1.#2\relax{%
+ \c@pgf@counta=#1\relax
+ \ifnum\c@pgf@counta<0
+\advance\c@pgf@counta by-1 % FIXME . this is a test for optimizations.
+ \c@pgf@countb=#2\relax
+ \ifnum\c@pgf@countb>0
+ \advance\c@pgf@counta by-1
+ \fi
+ \fi
+ \edef\pgfmathfloat@k{\the\c@pgf@counta}%
+}%
+\let\pgfmathfloatexp=\pgfmathfloatexp@
+
+\def\pgfmathfloatround@#1{%
+ \begingroup
+ \pgfkeysvalueof{/pgf/number format/precision/.@cmd}0\pgfeov
+ \pgfmathfloattofixed{#1}%
+ \pgfmathroundto{\pgfmathresult}%
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+
+\def\pgfmathfloatneg@#1{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifcase\pgfmathfloat@a@S\relax
+ % 0:
+ \edef\pgfmathresult{#1}%
+ \or
+ % +:
+ \pgfmathfloatcreate{2}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \or
+ % -:
+ \pgfmathfloatcreate{1}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \or
+ % nan:
+ \edef\pgfmathresult{#1}%
+ \or
+ % +infty:
+ \pgfmathfloatcreate{5}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \or
+ % -infty:
+ \pgfmathfloatcreate{4}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+
+\def\pgfmathfloatpow@#1#2{%
+ \begingroup%
+ \expandafter\pgfmathfloat@decompose@tok#2\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifcase\pgfmathfloat@a@S\relax
+ % #1 ^ 0 = 1
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \or
+ % #2 > 0
+ \pgfmathfloatpow@@{#1}{#2}%
+ \or
+ % #2 < 0
+ \pgfmathfloatpow@@{#1}{#2}%
+ \or
+ % #2 = nan
+ \edef\pgfmathresult{#2}%
+ \or
+ % #2 = inf
+ \edef\pgfmathresult{#2}%
+ \or
+ % #2 = -inf
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% computes #1^#2
+% PRECONDITIONS
+% - #2 is positive.
+\def\pgfmathfloatpow@@#1#2{%
+ \pgfmathfloattofixed@{#2}%
+ \afterassignment\pgfmath@x%
+ \expandafter\c@pgfmath@counta\pgfmathresult pt\relax%
+ \ifdim\pgfmath@x=0pt %
+ % loop "manually"; we have an integer exponent!
+ \ifnum\c@pgfmath@counta<0
+ \pgfmathfloatreciprocal@{#1}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \c@pgfmath@counta=-\c@pgfmath@counta
+ \else
+ \edef\pgfmathfloat@loc@TMPa{#1}%
+ \fi
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \pgfmathloop
+ \ifnum\c@pgfmath@counta>0\relax%
+ \ifodd\c@pgfmath@counta%
+ \pgfmathfloatmultiply@{\pgfmathfloat@loc@TMPb}{\pgfmathfloat@loc@TMPa}%
+ \let\pgfmathfloat@loc@TMPb=\pgfmathresult
+ \fi
+ \ifnum\c@pgfmath@counta>1\relax%
+ \pgfmathfloatmultiply@{\pgfmathfloat@loc@TMPa}{\pgfmathfloat@loc@TMPa}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \fi%
+ \divide\c@pgfmath@counta by2\relax%
+ \repeatpgfmathloop%
+ \else
+ \pgfmathfloatgetflags{#1}\c@pgfmath@counta
+ \ifnum0=\c@pgfmath@counta
+ % ah: 0^x
+ \pgfmathfloatgetflags{#2}\c@pgfmath@counta
+ \ifnum0=\c@pgfmath@counta
+ % ah: 0^0
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \else
+ % ah: 0^x with x!=0:
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \fi
+ \else
+ % employ #1^#2 = exp( #2 * ln(#1) )
+ \pgfmathfloatln@{#1}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \edef\pgfmathfloat@loc@TMPb{#2}%
+ \pgfmathfloatmultiply@{\pgfmathfloat@loc@TMPa}{\pgfmathfloat@loc@TMPb}%
+ \pgfmathfloatexp@{\pgfmathresult}%
+ \fi
+ \fi
+}
+
+\def\pgfmathfloat@definemethodfrombasic@NOARG#1{%
+ \pgfutil@ifundefined{pgfmath@basic@#1@}{%
+ \pgfutil@namelet{pgfmath@basic@#1@}{pgfmath#1@}%
+ }{}%
+ \edef\pgfmathfloat@glob@TMP{%
+ \expandafter\noexpand\csname pgfmath@basic@#1@\endcsname
+ \noexpand\pgfmathfloatparsenumber{\noexpand\pgfmathresult}%
+ }%
+ \expandafter\let\csname pgfmathfloat#1@\endcsname=\pgfmathfloat@glob@TMP%
+ \expandafter\let\csname pgfmathfloat#1\endcsname=\pgfmathfloat@glob@TMP%
+}%
+\def\pgfmathfloat@definemethodfrombasic@ONEARG#1{%
+ \pgfutil@ifundefined{pgfmath@basic@#1@}{%
+ \pgfutil@namelet{pgfmath@basic@#1@}{pgfmath#1@}%
+ }{}%
+ \edef\pgfmathfloat@glob@TMP##1{%
+ \noexpand\pgfmathfloattofixed{##1}%
+ \noexpand\expandafter
+ \expandafter\noexpand\csname pgfmath@basic@#1@\endcsname\noexpand\expandafter%
+ {\noexpand\pgfmathresult}%
+ \noexpand\pgfmathfloatparsenumber{\noexpand\pgfmathresult}%
+ }%
+ \expandafter\let\csname pgfmathfloat#1@\endcsname=\pgfmathfloat@glob@TMP%
+ \expandafter\let\csname pgfmathfloat#1\endcsname=\pgfmathfloat@glob@TMP%
+}%
+\def\pgfmathfloat@definemethodfrombasic@TWOARGS#1{%
+ \pgfutil@ifundefined{pgfmath@basic@#1@}{%
+ \pgfutil@namelet{pgfmath@basic@#1@}{pgfmath#1@}%
+ }{}%
+ \edef\pgfmathfloat@glob@TMP##1##2{%
+ \noexpand\pgfmathfloattofixed{##2}%
+ \noexpand\let\noexpand\pgfmathfloat@loc@TMPa=\noexpand\pgfmathresult
+ \noexpand\pgfmathfloattofixed{##1}%
+ \noexpand\expandafter
+ \expandafter\noexpand\csname pgfmath@basic@#1@\endcsname\noexpand\expandafter%
+ {\noexpand\pgfmathresult}{\noexpand\pgfmathfloat@loc@TMPa}%
+ \noexpand\pgfmathfloatparsenumber{\noexpand\pgfmathresult}%
+ }%
+ \expandafter\let\csname pgfmathfloat#1@\endcsname=\pgfmathfloat@glob@TMP%
+ \expandafter\let\csname pgfmathfloat#1\endcsname=\pgfmathfloat@glob@TMP%
+}%
+\pgfmathfloat@definemethodfrombasic@NOARG{rand}
+\pgfmathfloat@definemethodfrombasic@NOARG{rnd}
+\pgfmathfloat@definemethodfrombasic@NOARG{false}
+\pgfmathfloat@definemethodfrombasic@NOARG{true}
+% arcsin, arccos
+\pgfmathfloat@definemethodfrombasic@ONEARG{asin}
+\pgfmathfloat@definemethodfrombasic@ONEARG{acos}
+\pgfmathfloat@definemethodfrombasic@ONEARG{not}
+\pgfmathfloat@definemethodfrombasic@ONEARG{hex}
+\pgfmathfloat@definemethodfrombasic@ONEARG{Hex}
+\pgfmathfloat@definemethodfrombasic@ONEARG{oct}
+\pgfmathfloat@definemethodfrombasic@ONEARG{bin}
+\pgfmathfloat@definemethodfrombasic@TWOARGS{and}
+\pgfmathfloat@definemethodfrombasic@TWOARGS{or}
+
+\pgfutil@ifundefined{pgfmathdeclarefunction}{%
+ % special treatment: \pgfmathrand@ was not properly defined for pgf 2.00:
+ \let\pgfmath@basic@rand=\pgfmathrand
+ \let\pgfmath@basic@rand@=\pgfmathrand@
+ \def\pgfmathfloatrand@{%
+ \pgfmath@basic@rand
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ }%
+ \let\pgfmathfloatrand=\pgfmathfloatrand@%
+ %
+ % special treatment: \pgfmathrnd@ was not properly defined for pgf 2.00:
+ \let\pgfmath@basic@rnd=\pgfmathrnd
+ \let\pgfmath@basic@rnd@=\pgfmathrnd@
+ \def\pgfmathfloatrnd@{%
+ \pgfmath@basic@rnd
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ }%
+ \let\pgfmathfloatrnd=\pgfmathfloatrnd@%
+}{}
+
+% Implements the factorial of '#1'.
+% This does only work if '#1 < 2^32'.
+\def\pgfmathfloatfactorial@#1{%
+ \begingroup
+ \pgfmathfloattofixed{#1}%
+ % collect integer part into a 32 bit register:
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgfmath@counta\pgfmathresult\relax\pgfmath@%
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathloop
+ \ifnum\c@pgfmath@counta<2 %
+ \else
+ \expandafter\pgfmathfloatparsenumber\expandafter{\the\c@pgfmath@counta}%
+ \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfmathfloat@loc@TMPa}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \advance\c@pgfmath@counta by-1\relax%
+ \repeatpgfmathloop
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% Implements the vector length of a 2D vector.
+%
+% ATTENTION: this does NOT use the improved code of the basic layer!
+% It simply computed sqrt( #1^2 + #2^2 )!
+\def\pgfmathfloatveclen@#1#2{%
+ \begingroup
+ \edef\pgfmathfloat@@a{#1}%
+ \pgfmathfloatmultiply@{\pgfmathfloat@@a}{\pgfmathfloat@@a}%
+ \let\pgfmathfloat@@a=\pgfmathresult
+ %
+ \edef\pgfmathfloat@@b{#2}%
+ \pgfmathfloatmultiply@{\pgfmathfloat@@b}{\pgfmathfloat@@b}%
+ \let\pgfmathfloat@@b=\pgfmathresult
+ %
+ \pgfmathfloatadd@{\pgfmathfloat@@a}{\pgfmathfloat@@b}%
+ \pgfmathfloatsqrt@{\pgfmathresult}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+\def\pgfmathfloatcosh@#1{%
+ \begingroup
+ \pgfmathfloatexp@{#1}%
+ \let\pgfmathfloat@@a=\pgfmathresult
+ %
+ \pgfmathfloatneg@{#1}%
+ \pgfmathfloatexp@{\pgfmathresult}%
+ %
+ \pgfmathfloatadd@{\pgfmathresult}{\pgfmathfloat@@a}%
+ \expandafter\pgfmathfloatmultiplyfixed@\expandafter{\pgfmathresult}{0.5}%
+ %
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\def\pgfmathfloatsinh@#1{%
+ \begingroup
+ \pgfmathfloatexp@{#1}%
+ \let\pgfmathfloat@@a=\pgfmathresult
+ %
+ \pgfmathfloatneg@{#1}%
+ \pgfmathfloatexp@{\pgfmathresult}%
+ %
+ \pgfmathfloatsubtract@{\pgfmathfloat@@a}{\pgfmathresult}%
+ \expandafter\pgfmathfloatmultiplyfixed@\expandafter{\pgfmathresult}{0.5}%
+ %
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\def\pgfmathfloattanh@#1{%
+ \begingroup
+ \pgfmathfloatsinh@{#1}%
+ \let\pgfmathfloat@@a=\pgfmathresult
+ %
+ \pgfmathfloatcosh@{#1}%
+ \let\pgfmathfloat@@b=\pgfmathresult
+ %
+ \pgfmathfloatdivide@{\pgfmathfloat@@a}{\pgfmathfloat@@b}%
+ %
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryintersections.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryintersections.code.tex
new file mode 100644
index 0000000000..e6cb9e3bca
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryintersections.code.tex
@@ -0,0 +1,1190 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 14. Nov 22:41:45 CET 2017 %%%
+
+
+
+% Copyright 2008 by Mark Wibrow
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+% Note: at the time of this writing, the library has quadratic runtime.
+% Experimentally, it performed well while computing ~12 intersections of two
+% plots, each with 600 samples. It failed when the number of samples exceeded 700.
+
+\usepgflibrary{fpu}
+
+\newcount\pgf@intersect@solutions
+
+\newif\ifpgf@intersect@sort
+\newif\ifpgf@intersect@sort@by@second@path
+
+\def\pgfintersectionsortbyfirstpath{%
+ \pgf@intersect@sorttrue%
+ \pgf@intersect@sort@by@second@pathfalse%
+}
+
+\def\pgfintersectionsortbysecondpath{%
+ \pgf@intersect@sorttrue%
+ \pgf@intersect@sort@by@second@pathtrue%
+}
+
+% #1: the index. It starts at 1 and ends with \pgfintersectionsolutions (inclusive).
+% Invalid values will implicitly result in the origin.
+\def\pgfpointintersectionsolution#1{%
+ \ifnum#1<1\relax%
+ \pgfpoint@intersect@solution@orgin%
+ \else%
+ \ifnum#1>\pgfintersectionsolutions\relax%
+ \pgfpoint@intersect@solution@orgin%
+ \else%
+ \csname pgfpoint@intersect@solution@#1\endcsname%
+ \fi%
+ \fi%
+}
+
+% Gets the segment indices of solution #1.
+%
+% #1: the solution index (i.e. the same argument as in \pgfpointintersectionsolution)
+% #2: [output] a macro name which will contain the segment index of the first path which contains the solution
+% #3: [output] a macro name which will contain the segment index of the second path which contains the solution
+%
+% Example: \pgfintersectiongetsolutionsegmentindices{0}{\first}{\second}
+%
+% -> \first may be 0 if point #0 is in the 0'th segment
+% -> \second may be 42 if point #0 is in the 42'th segment
+%
+% The "segment index" is actually close to the "time" of the solution.
+% If a solution is at "time" 42.2, it will have segment index 42.
+\def\pgfintersectiongetsolutionsegmentindices#1#2#3{%
+ \ifnum#1<1\relax%
+ \let#2=\pgfutil@empty
+ \let#3=\pgfutil@empty
+ \else%
+ \ifnum#1>\pgfintersectionsolutions\relax%
+ \let#2=\pgfutil@empty
+ \let#3=\pgfutil@empty
+ \else%
+ \def\pgf@temp##1##2##3##4{%
+ \edef#2{##1}%
+ \edef#3{##2}%
+ }%
+ \expandafter\let\expandafter\pgf@tempb\csname pgf@intersect@solution@props@#1\endcsname
+ \expandafter\pgf@temp\pgf@tempb
+ \fi%
+ \fi%
+}%
+
+% Gets the time indices of solution #1.
+%
+% #1: the solution index (i.e. the same argument as in \pgfpointintersectionsolution)
+% #2: [output] a macro name which will contain the time of the first path which contains the solution
+% It will never be empty.
+% #3: [output] a macro name which will contain the time of the second path which contains the solution
+% It will never be empty.
+%
+% Example: \pgfintersectiongetsolutiontimes{0}{\first}{\second}
+%
+% -> \first may be 0.5 if point #0 is in just in the middle of the path
+% -> \second may be 42.8 if point #0 is in the 42'th segment (compare
+% \pgfintersectiongetsolutionsegmentindices) and is at 80% of the
+% 42'th segment
+%
+% Note that the precise time inside of a segment may be unavailable
+% (currently, it is only computed for curveto paths and not
+% necessarily for lineto). If the precise time is unavailable, this
+% call will return the value of
+% \pgfintersectiongetsolutionsegmentindices (which is a
+% "coarse-grained" time).
+\def\pgfintersectiongetsolutiontimes#1#2#3{%
+ \ifnum#1<1\relax%
+ \let#2=\pgfutil@empty
+ \let#3=\pgfutil@empty
+ \else%
+ \ifnum#1>\pgfintersectionsolutions\relax%
+ \let#2=\pgfutil@empty
+ \let#3=\pgfutil@empty
+ \else%
+ \def\pgf@temp##1##2##3##4{%
+ \edef#2{##3}%
+ \edef#3{##4}%
+ %
+ % check for fallback to segment indices:
+ \ifx#2\pgfutil@empty \edef#2{##1}\fi
+ \ifx#3\pgfutil@empty \edef#3{##2}\fi
+ }%
+ \expandafter\let\expandafter\pgf@tempb\csname pgf@intersect@solution@props@#1\endcsname
+ \expandafter\pgf@temp\pgf@tempb
+ \fi%
+ \fi%
+}%
+
+\def\pgfpoint@intersect@solution@orgin{%
+ \begingroup%
+ \pgftransforminvert%
+ \pgfpointorigin%
+ \pgf@pos@transform@glob
+ \global\pgf@x=\pgf@x%
+ \global\pgf@y=\pgf@y%
+ \endgroup%
+}
+
+% #1 code which assigns the first path using \pgfsetpath.
+% #2 code which assigns the second path using \pgfsetpath.
+%
+% On output, the points, their properties, and the number of points are set.
+% Use \pgfintersectionsolutions which expands to the number of intersections
+\long\def\pgfintersectionofpaths#1#2{%
+ \begingroup%
+ \pgfinterruptpath%
+ #1%
+ \pgfgetpath\pgf@intersect@path@a%
+ \global\let\pgf@intersect@path@temp=\pgf@intersect@path@a%
+ \endpgfinterruptpath%
+ \endgroup%
+ \let\pgf@intersect@path@a=\pgf@intersect@path@temp%
+ %
+ \begingroup%
+ \pgfinterruptpath%
+ #2%
+ \pgfgetpath\pgf@intersect@path@b%
+ \global\let\pgf@intersect@path@temp=\pgf@intersect@path@b%
+ \endpgfinterruptpath%
+ \endgroup%
+ \let\pgf@intersect@path@b=\pgf@intersect@path@temp%
+ %
+ \pgf@intersect@solutions=0\relax%
+ \pgf@intersect@path@reset@a
+ %
+ \ifpgf@intersect@sort@by@second@path%
+ \let\pgf@intersect@temp=\pgf@intersect@path@a%
+ \let\pgf@intersect@path@a=\pgf@intersect@path@b%
+ \let\pgf@intersect@path@b=\pgf@intersect@temp%
+ \fi%
+ %
+ \pgfprocessround\pgf@intersect@path@a\pgf@intersect@path@a%
+ \pgfprocessround\pgf@intersect@path@b\pgf@intersect@path@b%
+ %
+ \let\pgf@intersect@token@after=\pgf@intersect@path@process@a%
+ \expandafter\pgf@intersectionofpaths\pgf@intersect@path@a\pgf@stop%
+ \edef\pgfintersectionsolutions{\the\pgf@intersect@solutions}%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgfintersectionsolutions\relax%
+ \else%
+ \pgfutil@namelet{pgfpoint@intersect@solution@\pgfmathcounter}%
+ {pgfpoint@g@intersect@solution@\pgfmathcounter}%
+ \edef\pgf@marshal{\noexpand\pgf@intersection@set@properties{\csname pgfpoint@g@intersect@solution@\pgfmathcounter @props\endcsname}}%
+ \pgf@marshal
+ \ifpgf@intersect@sort%
+ \pgfutil@namelet{pgf@intersect@solution@\pgfmathcounter @time@a}%
+ {pgf@g@intersect@solution@\pgfmathcounter @time@a}%
+ \fi%
+ \repeatpgfmathloop%
+ \ifpgf@intersect@sort%
+ \pgfintersectionsolutionsortbytime%
+ \fi%
+}
+
+\def\pgf@intersection@set@properties#1{%
+ \pgfutil@namedef{pgf@intersect@solution@props@\pgfmathcounter}{#1}%
+}%
+
+% #1 a global name prefix to store properties.
+\def\pgf@intersection@store@properties#1{%
+ % we store the time offsets as well and make them available programmatically:
+ % note that \pgf@intersect@time@a and \pgf@intersect@time@b may be empty.
+ %
+ % However, \pgf@intersect@time@offset and
+ % \pgf@intersect@time@offset@b are *always* valid. In fact,they
+ % resemble a part of the time: it holds
+ % 0 <= \pgf@intersect@time@a < 1
+ % and \pgf@intersect@time@offset > 0.
+ %
+ % If we have an intersection in segment 42 of path A,
+ % \pgf@intersect@time@offset will be 42. The time inside of that
+ % segment is given as number in the interval [0,1]. If it is 0.3,
+ % the total time will be 42.3 and that number will be stored as
+ % \pgf@intersect@time@a.
+ %
+ \expandafter\xdef\csname #1@props\endcsname{{\pgf@intersect@time@offset}{\pgf@intersect@time@offset@b}{\pgf@intersect@time@a}{\pgf@intersect@time@b}}%
+}
+
+\def\pgf@intersectionofpaths#1{%
+ \ifx#1\pgf@stop%
+ \let\pgf@intersect@next=\relax%
+ \else%
+ \ifx#1\pgfsyssoftpath@movetotoken%
+ \let\pgf@intersect@next=\pgf@intersect@token@moveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@linetotoken%
+ \let\pgf@intersect@next=\pgf@intersect@token@lineto%
+ \else%
+ \ifx#1\pgfsyssoftpath@closepathtoken%
+ \let\pgf@intersect@next=\pgf@intersect@token@lineto%
+ \else%
+ \ifx#1\pgfsyssoftpath@curvetosupportatoken%
+ \let\pgf@intersect@next=\pgf@intersect@token@curveto%
+ \else%
+ \ifx#1\pgfsyssoftpath@rectcornertoken%
+ \let\pgf@intersect@next=\pgf@intersect@token@rect%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgf@intersect@next}
+
+\def\pgf@intersect@token@moveto#1#2{%
+ \def\pgfpoint@intersect@start{\pgfqpoint{#1}{#2}}%
+ \pgf@intersectionofpaths%
+}
+
+\def\pgf@intersect@token@lineto#1#2{%
+ \def\pgfpoint@intersect@end{\pgfqpoint{#1}{#2}}%
+ \def\pgf@intersect@type{line}%
+ \pgf@intersect@token@after%
+}
+\def\pgf@intersect@token@curveto#1#2\pgfsyssoftpath@curvetosupportbtoken#3#4\pgfsyssoftpath@curvetotoken#5#6{%
+ \def\pgfpoint@intersect@firstsupport{\pgfqpoint{#1}{#2}}%
+ \def\pgfpoint@intersect@secondsupport{\pgfqpoint{#3}{#4}}%
+ \def\pgfpoint@intersect@end{\pgfqpoint{#5}{#6}}%
+ \def\pgf@intersect@type{curve}%
+ \pgf@intersect@token@after%
+}
+
+\def\pgf@intersect@token@rect#1#2\pgfsyssoftpath@rectsizetoken#3#4{%
+ \pgf@xa=#1\relax%
+ \advance\pgf@xa by#3\relax%
+ \pgf@ya=#2\relax%
+ \advance\pgf@ya by#4\relax%
+ \edef\pgf@marshal{%
+ \noexpand\pgfsyssoftpath@movetotoken{#1}{#2}%
+ \noexpand\pgfsyssoftpath@linetotoken{#1}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@linetotoken{\the\pgf@xa}{\the\pgf@ya}%
+ \noexpand\pgfsyssoftpath@linetotoken{\the\pgf@xa}{#2}%
+ \noexpand\pgfsyssoftpath@closepathtoken{#1}{#2}%
+ }%
+ \expandafter\pgf@intersectionofpaths\pgf@marshal%
+}
+
+\def\pgf@intersect@path@process@a{%
+ \pgf@intersect@path@getpoints@a%
+ \let\pgf@intersect@token@after=\pgf@intersect@path@process@b%
+ \pgf@intersect@path@reset@b
+ \expandafter\pgf@intersectionofpaths\pgf@intersect@path@b\pgf@stop%
+ \let\pgfpoint@intersect@start=\pgfpoint@intersect@end@a%
+ \let\pgf@intersect@token@after=\pgf@intersect@path@process@a%
+ \c@pgf@counta=\pgf@intersect@time@offset\relax%
+ \advance\c@pgf@counta by1\relax%
+ \edef\pgf@intersect@time@offset{\the\c@pgf@counta}%
+ \pgf@intersectionofpaths%
+}
+
+\def\pgf@intersect@path@reset@a{%
+ \def\pgf@intersect@time@offset{0}%
+ \def\pgf@intersect@time@a{}%
+}%
+
+\def\pgf@intersect@path@reset@b{%
+ \def\pgf@intersect@time@offset@b{0}%
+ \def\pgf@intersect@time@b{}%
+}%
+
+\def\pgf@intersect@path@getpoints@a{%
+ \let\pgfpoint@intersect@start@a=\pgfpoint@intersect@start%
+ \let\pgfpoint@intersect@end@a=\pgfpoint@intersect@end%
+ \let\pgfpoint@intersect@firstsupport@a=\pgfpoint@intersect@firstsupport%
+ \let\pgfpoint@intersect@secondsupport@a=\pgfpoint@intersect@secondsupport%
+ \let\pgf@intersect@type@a=\pgf@intersect@type%
+}
+
+\def\pgf@intersect@path@process@b{%
+ \pgf@intersect@path@getpoints@b%
+ \csname pgf@intersect@\pgf@intersect@type@a @and@\pgf@intersect@type@b\endcsname%
+ \let\pgfpoint@intersect@start=\pgfpoint@intersect@end@b%
+ \c@pgf@counta=\pgf@intersect@time@offset@b\relax%
+ \advance\c@pgf@counta by1\relax%
+ \edef\pgf@intersect@time@offset@b{\the\c@pgf@counta}%
+ \pgf@intersectionofpaths}
+
+\def\pgf@intersect@path@getpoints@b{%
+ \let\pgfpoint@intersect@start@b=\pgfpoint@intersect@start%
+ \let\pgfpoint@intersect@end@b=\pgfpoint@intersect@end%
+ \let\pgfpoint@intersect@firstsupport@b=\pgfpoint@intersect@firstsupport%
+ \let\pgfpoint@intersect@secondsupport@b=\pgfpoint@intersect@secondsupport%
+ \let\pgf@intersect@type@b=\pgf@intersect@type%
+}
+
+\def\pgf@intersect@line@and@line{%
+ \pgf@intersectionoflines{\pgfpoint@intersect@start@a}{\pgfpoint@intersect@end@a}%
+ {\pgfpoint@intersect@start@b}{\pgfpoint@intersect@end@b}%
+}%
+
+\def\pgf@intersect@line@and@curve{%
+ \pgf@intersectionoflineandcurve%
+ {\pgf@process{\pgfpoint@intersect@start@a}}{\pgf@process{\pgfpoint@intersect@end@a}}%
+ {\pgf@process{\pgfpoint@intersect@start@b}}{\pgf@process{\pgfpoint@intersect@firstsupport@b}}%
+ {\pgf@process{\pgfpoint@intersect@secondsupport@b}}{\pgf@process{\pgfpoint@intersect@end@b}}%
+}
+
+\def\pgf@intersect@curve@and@line{%
+ \pgf@intersectionofcurveandline%
+ {\pgf@process{\pgfpoint@intersect@start@a}}{\pgf@process{\pgfpoint@intersect@firstsupport@a}}%
+ {\pgf@process{\pgfpoint@intersect@secondsupport@a}}{\pgf@process{\pgfpoint@intersect@end@a}}%
+ {\pgf@process{\pgfpoint@intersect@start@b}}{\pgf@process{\pgfpoint@intersect@end@b}}%
+}
+
+\def\pgf@intersect@curve@and@curve{%
+ \pgf@intersectionofcurves%
+ {\pgf@process{\pgfpoint@intersect@start@a}}{\pgf@process{\pgfpoint@intersect@firstsupport@a}}%
+ {\pgf@process{\pgfpoint@intersect@secondsupport@a}}{\pgf@process{\pgfpoint@intersect@end@a}}%
+ {\pgf@process{\pgfpoint@intersect@start@b}}{\pgf@process{\pgfpoint@intersect@firstsupport@b}}%
+ {\pgf@process{\pgfpoint@intersect@secondsupport@b}}{\pgf@process{\pgfpoint@intersect@end@b}}%
+}
+
+
+\def\pgfintersectionoflines#1#2#3#4{%
+ \pgf@intersect@solutions=0\relax%
+ \pgf@intersectionoflines{#1}{#2}{#3}{#4}%
+}
+
+\def\pgf@intersectionoflines#1#2#3#4{%
+ \pgf@iflinesintersect{#1}{#2}{#3}{#4}%
+ {%
+ \pgfextract@process\pgf@intersect@solution@candidate{%
+ % pgf@x and pgf@y are already assigned by \pgf@iflinesintersect
+ }%
+ \pgf@ifsolution@duplicate{\pgf@intersect@solution@candidate}{%
+ % ah - we a duplicate. Apparently, we have a hit on an
+ % endpoint.
+ }{%
+ \global\advance\pgf@intersect@solutions by1\relax%
+ \expandafter\global\expandafter\let\csname pgfpoint@g@intersect@solution@\the\pgf@intersect@solutions\endcsname=\pgf@intersect@solution@candidate
+ \ifpgf@intersect@sort%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\pgfpointdiff{\pgfpoint@intersect@start@a}{\pgfpoint@intersect@end@a}}%
+ \edef\pgf@marshal{%
+ \noexpand\pgfmathveclen@{\pgfmath@tonumber{\pgf@xa}}{\pgfmath@tonumber{\pgf@ya}}%
+ }%
+ \pgf@marshal%
+ \let\pgf@intersect@length@a=\pgfmathresult%
+ \pgf@process{\pgfpointdiff{\pgfpoint@intersect@start@a}{\pgfqpoint{\pgf@xc}{\pgf@yc}}}%
+ \edef\pgf@marshal{%
+ \noexpand\pgfmathveclen@{\pgfmath@tonumber{\pgf@x}}{\pgfmath@tonumber{\pgf@y}}%
+ }%
+ \pgf@marshal%
+ \pgfmathdivide@{\pgfmathresult}{\pgf@intersect@length@a}%
+ \pgf@x=\pgfmathresult pt\relax%
+ \advance\pgf@x by\pgf@intersect@time@offset pt\relax%
+ \edef\pgf@intersect@time@a{\pgfmath@tonumber{\pgf@x}}%
+ \expandafter\global\expandafter\let\csname pgf@g@intersect@solution@\the\pgf@intersect@solutions @time@a\endcsname=
+ \pgf@intersect@time@a
+ \else
+ \let\pgf@intersect@time@a=\pgfutil@empty
+ \fi%
+ \let\pgf@intersect@time@b=\pgfutil@empty
+ \pgf@intersection@store@properties{pgfpoint@g@intersect@solution@\the\pgf@intersect@solutions}%
+ }%
+ %
+ }{%
+ }%
+}
+
+% Test if two lines L1 and L2 intersect.
+%
+% #1 - first point P1 on L1.
+% #2 - second point P2 on L1.
+% #3 - first point P3 on L2.
+% #2 - second point P4 on L2.
+% #5 - code executed if intersection occurs.
+% #6 - code executed if intersection does no occur.
+%
+% Let L1 be represented by P1+(P2-P1)s where 0<=s<=1
+% Let L2 be represented by P3+(P4-P3)t where 0<=t<=1
+%
+% Then L1 and L2 intersect at
+%
+% s = |x2-x1 x3-x1| / |x4-x3 x2-x1|
+% |y2-y1 y3-y1| |y4-y3 y2-y1|
+%
+% t = |x4-x3 x3-x1| / |x4-x3 x2-x1|
+% |y4-y3 y3-y1| |y4-y3 y2-y1|
+%
+% with 0<=s,t<=1
+%
+% s and t do not need to be calculated:
+%
+% Let s = A / C and t = B / C
+%
+% Then 0<=s<=1 if !(C=0) && ((A=0) || ((A>0) && !(C<A)) || ((A<0) && !(C>A)))
+% 0<=t<=1 if !(C=0) && ((B=0) || ((B>0) && !(C<B)) || ((B<0) && !(C>B)))
+%
+\newif\ifpgf@s
+\newif\ifpgf@t
+\def\pgfiflinesintersect#1#2#3#4{%
+ \begingroup%
+ \pgf@iflinesintersect{\pgf@process{#1}}{\pgf@process{#2}}{\pgf@process{#3}}{\pgf@process{#4}}%
+ {\aftergroup\pgfutil@firstoftwo}{\aftergroup\pgfutil@secondoftwo}%
+ \endgroup%
+}
+
+% queried by pgfplots. Do not delete, only increase.
+\def\pgf@intersections@version{2}%
+
+% #1,#2: line 1
+% #3,#4: line 2
+\def\pgf@iflinesintersect#1#2#3#4{%
+ % first: check bounding boxes -- but somewhat increased such that we do not
+ % exclude "visible" hits due to rounding issues (i.e. use an upper bound):
+ \pgf@intersect@boundingbox@reset%
+ \pgf@intersect@boundingbox@update{#1}%
+ \pgf@intersect@boundingbox@update{#2}%
+ \pgf@intersect@boundingbox@assign@b%
+ %
+ \pgf@intersect@boundingbox@reset%
+ \pgf@intersect@boundingbox@update{#3}%
+ \pgf@intersect@boundingbox@update{#4}%
+ \pgf@intersect@boundingbox@assign@a%
+ %
+ \pgf@intersect@boundingbox@a%
+ \pgf@intersect@boundingbox@b%
+ %
+ \pgf@intersect@boundingbox@ifoverlap@upperbound{%
+ \pgf@iflinesintersect@{#1}{#2}{#3}{#4}%
+ }{%
+ \let\pgf@intersect@next=\pgfutil@secondoftwo%
+ }%
+ \pgf@intersect@next%
+}%
+
+% a helper routine which simply defines \pgf@intersect@next.
+%
+% In principle, this routine is capable of computing the entire intersection... but we only invoke it after checking for bounding box overlaps. This has two reasons:
+% 1. robustness. almost-parallel lines could cause "dimension too large" when solving the linear equation system
+% XXX : I still needed to replace the linear solver by one using the FPU. Perhaps I do not need the BB check anymore?
+% 2. performance. I hope it is faster to first check for BB (but this is not sure in TeX)
+%
+% #1,#2: line 1
+% #3,#4: line 2
+\def\pgf@iflinesintersect@#1#2#3#4{%
+ % we have two lines of sorts
+ % l_1(s) := #1 + s * (#2 - #1), 0<= s <= 1
+ % and
+ % l_2(t) := #3 + t * (#4 - #3), 0<= t <= 1
+ % ->
+ % set up LGS
+ % ( #2 - #1 ) *s + (#3-#4) * t = #3-#1
+ % we have a hit if 0<= s,t <= 1 .
+ #1\relax%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ #2\relax%
+ \pgf@xb=\pgf@x%
+ \pgf@yb=\pgf@y%
+ #3\relax%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ #4\relax%
+ %
+ % will be overwritten, remember it:
+ \edef\pgf@intersect@A{%
+ \pgf@xa=\the\pgf@xa\space
+ \pgf@ya=\the\pgf@ya\space
+ }%
+ %
+ % B := (2-1)
+ \advance\pgf@xb by-\pgf@xa
+ \advance\pgf@yb by-\pgf@ya
+ %
+ % A := (3-1)
+ \advance\pgf@xa by-\pgf@xc
+ \advance\pgf@ya by-\pgf@yc
+ \pgf@xa=-\pgf@xa
+ \pgf@ya=-\pgf@ya
+ %
+ % C := (3-4)
+ \advance\pgf@xc by-\pgf@x
+ \advance\pgf@yc by-\pgf@y
+ %
+ \begingroup
+ % compute the |.|_1 norm of each of lines. We need to compute
+ % tolerance factors in order to decide if we have an intersection.
+ % line 1: compute |#2 - #1|_1 :
+ \ifdim\pgf@xb<0sp \pgf@xb=-\pgf@xb\fi
+ \ifdim\pgf@yb<0sp \pgf@yb=-\pgf@yb\fi
+ \advance\pgf@xb by\pgf@yb
+ \xdef\pgf@intersect@len@a{\pgf@sys@tonumber\pgf@xb}%
+ %
+ % line 2: compute |#3 - #4|_1 :
+ \ifdim\pgf@xc<0sp \pgf@xc=-\pgf@xc\fi
+ \ifdim\pgf@yc<0sp \pgf@yc=-\pgf@yc\fi
+ \advance\pgf@xc by\pgf@yc
+ \xdef\pgf@intersect@len@b{\pgf@sys@tonumber\pgf@xc}%
+ \endgroup
+ %
+ \edef\pgf@marshal{%
+ \noexpand\pgfutilsolvetwotwoleqfloat{%
+ {\pgf@sys@tonumber\pgf@xb}{\pgf@sys@tonumber\pgf@xc}%
+ {\pgf@sys@tonumber\pgf@yb}{\pgf@sys@tonumber\pgf@yc}%
+ }{%
+ {\pgf@sys@tonumber\pgf@xa}%
+ {\pgf@sys@tonumber\pgf@ya}%
+ }%
+ }%
+ \pgf@marshal
+ %
+ \let\pgf@intersect@next=\pgfutil@secondoftwo%
+ \ifx\pgfmathresult\pgfutil@empty
+ % matrix was singular.
+ \else
+ \def\pgf@marshal##1##2{%
+ \global\pgf@x=##1pt %
+ \global\pgf@y=##2pt %
+ }%
+ \expandafter\pgf@marshal\pgfmathresult
+ %
+ \def\pgf@marshal{XXXX}% this should never be read
+ % FIRST: check line 1:
+ \ifdim\pgf@x<0sp
+ % let it count as hit if
+ % || l_1(s) - l_1(0) || < eps
+ % <=> |s| * ||#2 - #1|| < eps
+ % and, since s< 0 here:
+ % <=> -s * ||#2 - #1|| < eps
+ \pgf@xa=-\pgf@intersect@len@a\pgf@x
+ \ifdim\pgf@xa<\pgfintersectiontolerance\relax
+ % close enough to first endpoint of line 1:
+ \def\pgf@marshal{1}%
+ \else
+ \def\pgf@marshal{0}%
+ \fi
+ \else
+ \ifdim\pgf@x>1pt
+ % let it count as hit if
+ % || l_1(s) - l_1(1) || < eps
+ % <=> |s-1| * ||#2 - #1|| < eps
+ % and, since s > 1 here:
+ % <=> s * ||#2 - #1|| - ||#2 - #1|| < eps
+ \pgf@xa=\pgf@intersect@len@a\pgf@x
+ \advance\pgf@xa by-\pgf@intersect@len@a pt %
+ \ifdim\pgf@xa<\pgfintersectiontolerance\relax
+ % close enough to second endpoint of line 1:
+ \def\pgf@marshal{1}%
+ \else
+ \def\pgf@marshal{0}%
+ \fi
+ \else
+ % 0<= s <= 1: we have an intersection within line 1.
+ \def\pgf@marshal{1}%
+ \fi
+ \fi
+ %
+ % SECOND: check line 2:
+ \if1\pgf@marshal
+ \ifdim\pgf@y<0sp
+ % see remarks for line 1. same applies here.
+ \pgf@xa=-\pgf@intersect@len@b\pgf@y
+ \ifdim\pgf@xa<\pgfintersectiontolerance\relax
+ % close enough to first endpoint of line 2:
+ \def\pgf@marshal{1}%
+ \else
+ \def\pgf@marshal{0}%
+ \fi
+ \else
+ \ifdim\pgf@y>1pt
+ % see remarks for line 1. same applies here.
+ \pgf@xa=\pgf@intersect@len@b\pgf@y
+ \advance\pgf@xa by-\pgf@intersect@len@b pt %
+ \ifdim\pgf@xa<\pgfintersectiontolerance\relax
+ % close enough to second endpoint of line 2:
+ \def\pgf@marshal{1}%
+ \else
+ \def\pgf@marshal{0}%
+ \fi
+ \else
+ % 0<= t <= 1: we have an intersection within line 2.
+ \def\pgf@marshal{1}%
+ \fi
+ \fi
+ \fi
+ %
+ \if1\pgf@marshal
+ % Ok, compute the intersection point and return it:
+ % we use (x,y) = A + s * (B-A)
+ % keep in mind that (s,t) == (\pgf@x,\pgf@y)
+ \pgf@intersect@A
+ \pgf@yc=\pgf@x
+ \global\pgf@x=\pgf@sys@tonumber\pgf@xb\pgf@yc
+ \global\pgf@y=\pgf@sys@tonumber\pgf@yb\pgf@yc
+ \global\advance\pgf@x by \pgf@xa
+ \global\advance\pgf@y by \pgf@ya
+ \let\pgf@intersect@next=\pgfutil@firstoftwo%
+ \fi
+ \fi
+}
+
+
+
+
+\def\pgfintersectionoflineandcurve#1#2#3#4#5#6{%
+ \pgf@intersect@solutions=0\relax%
+ \pgf@intersectionoflineandcurve{#1}{#2}{#3}{#4}{#5}{#6}%
+}
+
+\def\pgf@intersectionoflineandcurve#1#2#3#4#5#6{%
+ \pgf@intersectionofcurves%
+ {\pgf@process{#1}}%
+ {%
+ \pgf@process{%
+ \pgfpointadd{#1\relax\pgf@x=0.666666\pgf@x\pgf@y=0.666666\pgf@y}%
+ {#2\relax\pgf@x=0.333333\pgf@x\pgf@y=0.333333\pgf@y}%
+ }%
+ }%
+ {%
+ \pgf@process{%
+ \pgfpointadd{#1\relax\pgf@x=0.333333\pgf@x\pgf@y=0.333333\pgf@y}%
+ {#2\relax\pgf@x=0.666666\pgf@x\pgf@y=0.666666\pgf@y}%
+ }%
+ }%
+ {\pgf@process{#2}}%
+ {\pgf@process{#3}}%
+ {\pgf@process{#4}}%
+ {\pgf@process{#5}}%
+ {\pgf@process{#6}}%
+}%
+
+\def\pgf@intersectionofcurveandline#1#2#3#4#5#6{%
+ \pgf@intersectionofcurves%
+ {\pgf@process{#1}}%
+ {\pgf@process{#2}}%
+ {\pgf@process{#3}}%
+ {\pgf@process{#4}}%
+ {\pgf@process{#5}}%
+ {%
+ \pgf@process{%
+ \pgfpointadd{#5\relax\pgf@x=0.666666\pgf@x\pgf@y=0.666666\pgf@y}%
+ {#6\relax\pgf@x=0.333333\pgf@x\pgf@y=0.333333\pgf@y}%
+ }%
+ }%
+ {%
+ \pgf@process{%
+ \pgfpointadd{#5\relax\pgf@x=0.333333\pgf@x\pgf@y=0.333333\pgf@y}%
+ {#6\relax\pgf@x=0.666666\pgf@x\pgf@y=0.666666\pgf@y}%
+ }%
+ }%
+ {\pgf@process{#6}}%
+}%
+
+
+
+
+\def\pgfintersectiontolerance{0.1pt}
+\def\pgfintersectiontoleranceupperbound{1pt}
+\def\pgfintersectiontolerancefactor{0.1}
+
+
+
+% Find the intersections of two bezier curves.
+%
+% #1 - #4 = curve 1.
+% #5 - #8 = curve 2.
+% #9 = the solution number.
+%
+% There is no guarantee of ordering of solutions. If there are
+% no solutions, the origin is returned.
+%
+\def\pgfpointintersectionofcurves#1#2#3#4#5#6#7#8#9{%
+ \pgf@intersect@solutions=0\relax%
+ \pgf@intersectionofcurves%
+ {\pgf@process{#1}}{\pgf@process{#2}}{\pgf@process{#3}}{\pgf@process{#4}}%
+ {\pgf@process{#5}}{\pgf@process{#6}}{\pgf@process{#7}}{\pgf@process{#8}}%
+ \pgfpointintersectionsolution{#9}%
+}
+
+% Return any intersection points of two curves C1 and C2.
+% No order can be guaranteed for the solutions.
+%
+% #1, #2, #3, #4 - the points on C1
+% #5, #6, #7, #8 - the points on C2
+%
+% Returns:
+%
+% \pgf@intersect@solutions - the number of solutions.
+% \pgfpointintersectionsolution{<S>} - the point for soultion S.
+%
+% (Sort of) use:
+%
+% intersection(C1,C2)
+% S = {};
+% intersection'(C1,C2);
+% return S;
+%
+% intersection'(C1,C2)
+% B1 = boundingbox(C1);
+% B2 = boundingbox(C2);
+% if intersect(B1,B2)
+% if (B1.width < q) and (B1.height < q) and
+% (B2.width < q) and (B2.height < q)
+% S = S + {average_of_all_points(B1,B2)}; \\ is there a better choice?
+% else
+% Q = subdivideLeft(C1);
+% R = subdivideRight(C1);
+% intersection'(C2,Q);
+% intersection'(C2,R);
+%
+% where q is a small value (tolerance).
+%
+\def\pgfintersectionofcurves#1#2#3#4#5#6#7#8{%
+ \pgf@intersect@solutions=0\relax%
+ \pgf@intersectionofcurves%
+ {\pgf@process{#1}}{\pgf@process{#2}}{\pgf@process{#3}}{\pgf@process{#4}}%
+ {\pgf@process{#5}}{\pgf@process{#6}}{\pgf@process{#7}}{\pgf@process{#8}}%
+}%
+\def\pgf@intersectionofcurves#1#2#3#4#5#6#7#8{%
+ \begingroup%
+ \dimendef\pgf@time@a=2\relax%
+ \dimendef\pgf@time@aa=4\relax%
+ \dimendef\pgf@time@b=6\relax%
+ \dimendef\pgf@time@bb=8\relax%
+ \pgf@time@a=0pt\relax%
+ \pgf@time@aa=1pt\relax%
+ \pgf@time@b=0pt\relax%
+ \pgf@time@bb=1pt\relax%
+ \let\pgf@intersect@subdivide@curve=\pgf@intersect@subdivide@curve@b%
+ \let\pgf@curve@subdivde@after=\pgf@@intersectionofcurves%
+ \pgf@@intersectionofcurves{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+ \endgroup%
+}
+
+\def\pgf@intersect@boundingbox@assign@a{%
+ \edef\pgf@intersect@boundingbox@a{%
+ % lower left:
+ \noexpand\pgf@xb=\the\pgf@xa\space%
+ \noexpand\pgf@yb=\the\pgf@ya\space%
+ % upper right:
+ \noexpand\pgf@xc=\the\pgf@xb\space%
+ \noexpand\pgf@yc=\the\pgf@yb\space%
+ }%
+}
+\def\pgf@intersect@boundingbox@assign@b{%
+ \edef\pgf@intersect@boundingbox@b{%
+ % lower left:
+ \noexpand\global\noexpand\pgf@x=\the\pgf@xa\space%
+ \noexpand\global\noexpand\pgf@y=\the\pgf@ya\space%
+ % upper right:
+ \noexpand\pgf@xa=\the\pgf@xb\space%
+ \noexpand\pgf@ya=\the\pgf@yb\space%
+ }%
+}
+
+% see \pgf@intersect@boundingbox@assign@a and \pgf@intersect@boundingbox@assign@b for the naming conventions
+\def\pgf@intersect@boundingbox@ifoverlap{%
+ \def\pgf@intersect@next{\pgfutil@secondoftwo}%
+ %
+ \ifdim\pgf@xa<\pgf@xb%
+ \else%
+ \ifdim\pgf@x>\pgf@xc%
+ \else%
+ \ifdim\pgf@ya<\pgf@yb%
+ \else%
+ \ifdim\pgf@y>\pgf@yc%
+ \else%
+ \def\pgf@intersect@next{\pgfutil@firstoftwo}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgf@intersect@next
+}%
+\def\pgf@intersect@boundingbox@ifoverlap@upperbound{%
+ \begingroup
+ \def\pgf@intersect@next{\pgfutil@secondoftwo}%
+ %
+ \advance\pgf@xa by+\pgfintersectiontolerance\relax
+ \ifdim\pgf@xa<\pgf@xb%
+ \else%
+ \global\advance\pgf@x by-\pgfintersectiontolerance\relax
+ \ifdim\pgf@x>\pgf@xc%
+ \else%
+ \advance\pgf@ya by\pgfintersectiontolerance\relax
+ \ifdim\pgf@ya<\pgf@yb%
+ \else%
+ \global\advance\pgf@y by-\pgfintersectiontolerance\relax
+ \ifdim\pgf@y>\pgf@yc%
+ \else%
+ \def\pgf@intersect@next{\pgfutil@firstoftwo}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \expandafter
+ \endgroup
+ \pgf@intersect@next
+}%
+\def\pgf@intersect@boundingbox@ifoverlap@UNUSED{%
+ \let\pgf@intersect@next=\pgfutil@secondoftwo%
+ \ifdim\pgf@xa<\pgf@xb%
+ \else%
+ \ifdim\pgf@x>\pgf@xc%
+ \else%
+ \ifdim\pgf@ya<\pgf@yb%
+ \else%
+ \ifdim\pgf@y>\pgf@yc%
+ \else%
+ \let\pgf@intersect@next=\pgfutil@firstoftwo%
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgf@intersect@next
+}%
+\def\pgf@@intersectionofcurves#1#2#3#4#5#6#7#8{%
+ \pgf@intersect@boundingbox@reset%
+ \pgf@intersect@boundingbox@update{#1}%
+ \pgf@intersect@boundingbox@update{#2}%
+ \pgf@intersect@boundingbox@update{#3}%
+ \pgf@intersect@boundingbox@update{#4}%
+ \pgf@intersect@boundingbox@assign@b%
+ %
+ \pgf@intersect@boundingbox@reset%
+ \pgf@intersect@boundingbox@update{#5}%
+ \pgf@intersect@boundingbox@update{#6}%
+ \pgf@intersect@boundingbox@update{#7}%
+ \pgf@intersect@boundingbox@update{#8}%
+ \pgf@intersect@boundingbox@assign@a%
+ %
+ \pgf@intersect@boundingbox@a%
+ \pgf@intersect@boundingbox@b%
+ %
+ \pgf@intersect@boundingbox@ifoverlap{%
+ \pgf@@@intersectionofcurves{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+ }{%
+ % no overlap -- no intersection.
+ }%
+}
+
+\def\pgf@@@intersectionofcurves#1#2#3#4#5#6#7#8{%
+ % compute DIFFERENCE vectors:
+ \advance\pgf@xc by-\pgf@xb%
+ \advance\pgf@yc by-\pgf@yb%
+ \advance\pgf@xa by-\pgf@x%
+ \advance\pgf@ya by-\pgf@y%
+ \let\pgf@intersect@subdivde=\relax%
+ % check if both difference vectors are point wise
+ % less than tolerance (i.e. |v|_infty < eps ).
+ % That means that both bounding boxes are "small enough"
+ \ifdim\pgf@xc<\pgfintersectiontolerance\relax%
+ \ifdim\pgf@xa<\pgfintersectiontolerance\relax%
+ \ifdim\pgf@yc<\pgfintersectiontolerance\relax%
+ \ifdim\pgf@ya<\pgfintersectiontolerance\relax%
+ \pgfextract@process\pgf@intersect@solution@candidate{%
+ % set (x,y) = mean(the 4 points of the two bounding boxes):
+ \pgf@intersect@boundingbox@a%
+ \pgf@intersect@boundingbox@b%
+ \pgf@x=0.25\pgf@x%
+ \advance\pgf@x by0.25\pgf@xa%
+ \advance\pgf@x by0.25\pgf@xb%
+ \advance\pgf@x by0.25\pgf@xc%
+ \pgf@y=0.25\pgf@y%
+ \advance\pgf@y by0.25\pgf@ya%
+ \advance\pgf@y by0.25\pgf@yb%
+ \advance\pgf@y by0.25\pgf@yc%
+ }%
+ % We must avoid duplicate solutions.
+ \let\pgf@intersect@subdivde=\pgf@stop%
+ \pgf@ifsolution@duplicate\pgf@intersect@solution@candidate{}%
+ {%
+ \global\advance\pgf@intersect@solutions by1\relax%
+ \begingroup
+ \advance\pgf@time@a by\pgf@time@aa%
+ \divide\pgf@time@a by2\relax%
+ \advance\pgf@time@a by\pgf@intersect@time@offset pt\relax%
+ \edef\pgf@intersect@time@a{\pgfmath@tonumber{\pgf@time@a}}%
+ %
+ \advance\pgf@time@b by\pgf@time@bb%
+ \divide\pgf@time@b by2\relax%
+ \advance\pgf@time@b by\pgf@intersect@time@offset@b pt\relax%
+ \edef\pgf@intersect@time@b{\pgfmath@tonumber{\pgf@time@b}}%
+ %
+ \pgf@intersection@store@properties{pgfpoint@g@intersect@solution@\the\pgf@intersect@solutions}%
+ \expandafter\global\expandafter\let%
+ \csname pgfpoint@g@intersect@solution@\the\pgf@intersect@solutions\endcsname=%
+ \pgf@intersect@solution@candidate%
+ \ifpgf@intersect@sort%
+ \expandafter\xdef%
+ \csname pgf@g@intersect@solution@\the\pgf@intersect@solutions @time@a\endcsname%
+ {\pgf@intersect@time@a}%
+ \fi%
+ \endgroup
+ }%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \ifx\pgf@intersect@subdivde\pgf@stop%
+ \else%
+ \pgf@intersect@subdivide@curve{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+ \fi%
+}
+
+\def\pgf@intersect@subdivide@curve@b#1#2#3#4#5#6#7#8{%
+ \begingroup%
+ \advance\pgf@time@bb by\pgf@time@b\relax%
+ \divide\pgf@time@bb by2\relax%
+ \let\pgf@intersect@subdivide@curve=\pgf@intersect@subdivide@curve@a%
+ \pgf@curve@subdivide@left{#5}{#6}{#7}{#8}{#1}{#2}{#3}{#4}%
+ \endgroup%
+ \begingroup%
+ \advance\pgf@time@b by\pgf@time@bb\relax%
+ \divide\pgf@time@b by2\relax%
+ \let\pgf@intersect@subdivide@curve=\pgf@intersect@subdivide@curve@a%
+ \pgf@curve@subdivide@right{#5}{#6}{#7}{#8}{#1}{#2}{#3}{#4}%
+ \endgroup%
+}
+
+\def\pgf@intersect@subdivide@curve@a#1#2#3#4#5#6#7#8{%
+ \begingroup%
+ \advance\pgf@time@aa by\pgf@time@a\relax%
+ \divide\pgf@time@aa by2\relax%
+ \let\pgf@intersect@subdivide@curve=\pgf@intersect@subdivide@curve@b%
+ \pgf@curve@subdivide@left{#5}{#6}{#7}{#8}{#1}{#2}{#3}{#4}%
+ \endgroup%
+ \begingroup%
+ \advance\pgf@time@a by\pgf@time@aa\relax%
+ \divide\pgf@time@a by2\relax%
+ \let\pgf@intersect@subdivide@curve=\pgf@intersect@subdivide@curve@b%
+ \pgf@curve@subdivide@right{#5}{#6}{#7}{#8}{#1}{#2}{#3}{#4}%
+ \endgroup%
+}
+
+\def\pgf@intersect@boundingbox@reset{%
+ \pgf@xa=16000pt\relax%
+ \pgf@ya=16000pt\relax%
+ \pgf@xb=-16000pt\relax%
+ \pgf@yb=-16000pt\relax%
+}
+
+\def\pgf@intersect@boundingbox@update#1{%
+ #1\relax%
+ \ifdim\pgf@x<\pgf@xa\pgf@xa=\pgf@x\fi%
+ \ifdim\pgf@y<\pgf@ya\pgf@ya=\pgf@y\fi%
+ \ifdim\pgf@x>\pgf@xb\pgf@xb=\pgf@x\fi%
+ \ifdim\pgf@y>\pgf@yb\pgf@yb=\pgf@y\fi%
+}
+
+% The following subroutines are part of a conversion from pgfbasic
+% math to FPU. This transition is necessary due to the restricted
+% accuracy of pgfbasic. In order to limit the error rate of the
+% transition pgfbasic -> FPU, I chose to
+% keep the old "pattern" of sorts \advance\pgf@xa by0.5\pgf@y etc and
+% simply adapt to some FPU call.
+%
+% The following routines constitute the "adapter":
+
+\def\pgf@float@adapter@setxy{%
+ \pgfmathfloatparsenumber{\pgf@sys@tonumber\pgf@x}\let\pgf@fpu@x=\pgfmathresult
+ \pgfmathfloatparsenumber{\pgf@sys@tonumber\pgf@y}\let\pgf@fpu@y=\pgfmathresult
+}%
+\def\pgf@float@adapter@mult#1=#2*#3{%
+ \pgfmathfloatmultiplyfixed@{#3}{#2}%
+ \let#1=\pgfmathresult
+}%
+\def\pgf@float@adapter@advance#1by#2*#3{%
+ \pgfmathfloatmultiplyfixed@{#3}{#2}%
+ \let\pgfutil@temp=\pgfmathresult
+ \pgfmathfloatadd@{#1}{\pgfutil@temp}%
+ \let#1=\pgfmathresult
+}%
+
+\def\pgf@float@adapter@tostring#1{%
+ \pgfmathfloattofixed{#1}\edef#1{\pgfmathresult pt }%
+}%
+
+\def\pgf@curve@subdivide@left#1#2#3#4{%
+ %
+ % The left curve (from t=0 to t=.5)
+ %
+ \begingroup
+ #1\relax%
+ \pgfutil@tempdima=\pgf@x%
+ \pgfutil@tempdimb=\pgf@y%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@mult\pgf@fpu@xa=.5*\pgf@fpu@x \pgf@float@adapter@mult\pgf@fpu@ya=.5*\pgf@fpu@y%
+ \pgf@float@adapter@mult\pgf@fpu@xb=.25*\pgf@fpu@x \pgf@float@adapter@mult\pgf@fpu@yb=.25*\pgf@fpu@y%
+ \pgf@float@adapter@mult\pgf@fpu@xc=.125*\pgf@fpu@x\pgf@float@adapter@mult\pgf@fpu@yc=.125*\pgf@fpu@y%
+ #2\relax%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@advance\pgf@fpu@xa by.5*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@ya by.5*\pgf@fpu@y%
+ \pgf@float@adapter@advance\pgf@fpu@xb by.5*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@yb by.5*\pgf@fpu@y%
+ \pgf@float@adapter@advance\pgf@fpu@xc by.375*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@yc by.375*\pgf@fpu@y%
+ #3\relax%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@advance\pgf@fpu@xb by.25*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@yb by.25*\pgf@fpu@y%
+ \pgf@float@adapter@advance\pgf@fpu@xc by.375*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@yc by.375*\pgf@fpu@y%
+ #4\relax%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@advance\pgf@fpu@xc by.125*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@yc by.125*\pgf@fpu@y%
+ %
+ \pgf@float@adapter@tostring\pgf@fpu@xa
+ \pgf@float@adapter@tostring\pgf@fpu@ya
+ \pgf@float@adapter@tostring\pgf@fpu@xb
+ \pgf@float@adapter@tostring\pgf@fpu@yb
+ \pgf@float@adapter@tostring\pgf@fpu@xc
+ \pgf@float@adapter@tostring\pgf@fpu@yc
+ \edef\pgf@marshal{%
+ \noexpand\pgf@curve@subdivde@after%
+ {\noexpand\pgf@x=\the\pgfutil@tempdima\noexpand\pgf@y=\the\pgfutil@tempdimb}%
+ {\noexpand\pgf@x=\pgf@fpu@xa\noexpand\pgf@y=\pgf@fpu@ya}%
+ {\noexpand\pgf@x=\pgf@fpu@xb\noexpand\pgf@y=\pgf@fpu@yb}
+ {\noexpand\pgf@x=\pgf@fpu@xc\noexpand\pgf@y=\pgf@fpu@yc}%
+ }%
+ \expandafter
+ \endgroup
+ \pgf@marshal%
+}
+
+\def\pgf@curve@subdivide@right#1#2#3#4{%
+ %
+ % The right curve (from t=0.5 to t=1)
+ %
+ \begingroup
+ #1\relax%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@mult\pgf@float@tmpa=.125*\pgf@fpu@x\pgf@float@adapter@mult\pgf@float@tmpb=.125*\pgf@fpu@y%
+ #2\relax%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@advance\pgf@float@tmpa by.375*\pgf@fpu@x\pgf@float@adapter@advance\pgf@float@tmpb by.375*\pgf@fpu@y%
+ \pgf@float@adapter@mult\pgf@fpu@xa=.25*\pgf@fpu@x\pgf@float@adapter@mult\pgf@fpu@ya=.25*\pgf@fpu@y%
+ #3\relax%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@advance\pgf@float@tmpa by.375*\pgf@fpu@x\pgf@float@adapter@advance\pgf@float@tmpb by.375*\pgf@fpu@y%
+ \pgf@float@adapter@advance\pgf@fpu@xa by.5*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@ya by.5*\pgf@fpu@y%
+ \pgf@float@adapter@mult\pgf@fpu@xb=.5*\pgf@fpu@x\pgf@float@adapter@mult\pgf@fpu@yb=.5*\pgf@fpu@y%
+ #4\relax%
+ \pgf@float@adapter@setxy
+ \pgf@float@adapter@advance\pgf@float@tmpa by.125*\pgf@fpu@x\pgf@float@adapter@advance\pgf@float@tmpb by.125*\pgf@fpu@y%
+ \pgf@float@adapter@advance\pgf@fpu@xa by.25*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@ya by.25*\pgf@fpu@y%
+ \pgf@float@adapter@advance\pgf@fpu@xb by.5*\pgf@fpu@x\pgf@float@adapter@advance\pgf@fpu@yb by.5*\pgf@fpu@y%
+ \let\pgf@fpu@xc=\pgf@fpu@x\let\pgf@fpu@yc=\pgf@fpu@y%
+ %
+ \pgf@float@adapter@tostring\pgf@float@tmpa
+ \pgf@float@adapter@tostring\pgf@float@tmpb
+ \pgf@float@adapter@tostring\pgf@fpu@xa
+ \pgf@float@adapter@tostring\pgf@fpu@ya
+ \pgf@float@adapter@tostring\pgf@fpu@xb
+ \pgf@float@adapter@tostring\pgf@fpu@yb
+ \pgf@float@adapter@tostring\pgf@fpu@xc
+ \pgf@float@adapter@tostring\pgf@fpu@yc
+ \edef\pgf@marshal{%
+ \noexpand\pgf@curve@subdivde@after%
+ {\noexpand\pgf@x=\pgf@float@tmpa\noexpand\pgf@y=\pgf@float@tmpb}%
+ {\noexpand\pgf@x=\pgf@fpu@xa\noexpand\pgf@y=\pgf@fpu@ya}
+ {\noexpand\pgf@x=\pgf@fpu@xb\noexpand\pgf@y=\pgf@fpu@yb}
+ {\noexpand\pgf@x=\pgf@fpu@xc\noexpand\pgf@y=\pgf@fpu@yc}%
+ }%
+ \expandafter
+ \endgroup
+ \pgf@marshal%
+}
+
+
+% A solution S1 is considered a duplicate of S2, if
+%
+% |x1 - x2|f < q and |y1 - y2|f < q
+%
+% where q is a small value (tolerance).
+%
+% #1 - the solution.
+%
+\def\pgf@ifsolution@duplicate#1{%
+ #1%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \let\pgf@intersect@next=\pgfutil@secondoftwo%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@intersect@solutions\relax%
+ \else%
+ \pgf@ifsolution@duplicate@{\pgfmathcounter}%
+ \repeatpgfmathloop%
+ \pgf@intersect@next%
+}
+
+\def\pgf@ifsolution@duplicate@#1{%
+ \pgf@process{\csname pgfpoint@g@intersect@solution@#1\endcsname}%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \ifdim\pgf@x<0pt\relax\pgf@x=-\pgf@x\fi%
+ \ifdim\pgf@y<0pt\relax\pgf@y=-\pgf@y\fi%
+ %
+ \pgf@x=\pgfintersectiontolerancefactor\pgf@x%
+ \pgf@y=\pgfintersectiontolerancefactor\pgf@y%
+ \ifdim\pgf@x<\pgfintersectiontolerance\relax%
+ \ifdim\pgf@y<\pgfintersectiontolerance\relax%
+ \let\pgf@intersect@next=\pgfutil@firstoftwo%
+ \fi%
+ \fi%
+}%
+
+\newif\ifpgf@intersect@solutions@sortfinish
+
+% Sort solutions according to their time index.
+%
+\def\pgfintersectionsolutionsortbytime{%
+ \pgf@intersect@solutions@sortfinishtrue%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter<\pgfintersectionsolutions\relax%
+ \pgfutil@tempcnta=\pgfmathcounter%
+ \advance\pgfutil@tempcnta by1\relax%
+ \ifdim\csname pgf@intersect@solution@\pgfmathcounter @time@a\endcsname pt>%
+ \csname pgf@intersect@solution@\the\pgfutil@tempcnta @time@a\endcsname pt\relax%
+ \pgf@intersect@solutions@sortfinishfalse%
+ %
+ \pgfintersectionsolutionsortbytime@swap{pgfpoint@intersect@solution@\pgfmathcounter}%
+ {pgfpoint@intersect@solution@\the\pgfutil@tempcnta}%
+ %
+ \pgfintersectionsolutionsortbytime@swap{pgf@intersect@solution@\pgfmathcounter @time@a}%
+ {pgf@intersect@solution@\the\pgfutil@tempcnta @time@a}%
+ %
+ \pgfintersectionsolutionsortbytime@swap{pgf@intersect@solution@props@\pgfmathcounter}%
+ {pgf@intersect@solution@props@\the\pgfutil@tempcnta}%
+ \fi%
+ \repeatpgfmathloop%
+ \ifpgf@intersect@solutions@sortfinish%
+ \else%
+ \expandafter\pgfintersectionsolutionsortbytime%
+ \fi%
+}
+
+\def\pgfintersectionsolutionsortbytime@swap#1#2{%
+ \pgfutil@namelet{pgf@intersect@temp}{#1}%
+ \pgfutil@namelet{#1}{#2}%
+ \pgfutil@namelet{#2}{pgf@intersect@temp}%
+}%
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryluamath.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryluamath.code.tex
new file mode 100644
index 0000000000..fe86ba6f4a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryluamath.code.tex
@@ -0,0 +1,559 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Mi 8. Feb 20:49:06 CET 2017 %%%
+
+
+
+% Copyright 2011 by Christophe Jorssen and Mark Wibrow
+% Copyright 2014 by Christian Feuersänger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+%
+% $Id: pgflibraryluamath.code.tex,v 1.20 2015/06/05 06:23:21 cfeuersaenger Exp $
+%
+%
+% This is a library for a LUA math parser and LUA math operations.
+% Advantage compared to its TeX pendant: it is FASTER and has HIGHER
+% ACCURACY.
+% Disadvantage: any function declared by means of
+% \pgfmathdeclarefunction is NOT automatically transported to the LUA
+% side (at the time of this writing).
+% LUA functions need to be defined by means of LUA code
+%
+% function pgfluamathfunctions.myoperation(a,b)
+% return a*2*b
+% end
+%
+% this will automatically set up 'myoperation' for use in
+% \pgfluamathparse{myoperation(4,2)}
+%
+% The library has TWO use-cases which are more or less distinct: one
+% is to use LUA for all math function, but not for math expression
+% parsing -- this was still under control of the TeX math parser.
+% This approach works like the 'fpu' library.
+%
+% The second approach is to use LUA to parse all math expressions -
+% but if someone calls \pgfmathadd@{1}{2}, it would use the TeX
+% command. This approach is relatively lightweight because it does not
+% need to substitute all \pgfmath* macros.
+%
+% One can mix both modes.
+
+% *******************************************************************
+% Some luatex stuff. Should be put elsewhere (e.g. in
+% pgfutil-luatex-engine).
+
+\edef\pgfliblua@oldcatcodedoublequote{\the\catcode`\"}%
+\catcode`\"=12
+
+% We assume luatex version > 0.39:
+% - \directlua <general text> will work
+% - \directlua is the only luatex primitive that we can assume
+% accessible without being prefixed by the format via
+% tex.enableprimitives.
+% Ideas taken from the ifluatex package (Heiko Oberdiek)
+\let\pgfutil@ifluatex\iffalse
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname directlua\endcsname\relax
+\else
+ \expandafter\let\csname pgfutil@ifluatex\expandafter\endcsname
+ \csname iftrue\endcsname
+\fi
+
+\pgfutil@ifluatex
+ \let\pgfutil@directlua\directlua
+ \pgfutil@directlua{%
+ tex.enableprimitives('pgfutil@',{'luaescapestring'})}
+\else
+ \def\pgfutil@directlua#1{}
+ \def\pgfutil@luaescapestring#1{}
+\fi
+
+\pgfutil@directlua{%
+ pgfluamathfunctions = require("pgfplotsoldpgfsupp.luamath.functions")
+ pgfluamathparser = require("pgfplotsoldpgfsupp.luamath.parser")}
+
+
+% Patch some configuration macros such that the modifications are
+% available in LUA as well:
+\pgfkeys{
+ /pgf/trig format/deg/.add code={}{\directlua{pgfluamathfunctions.setTrigFormat("deg")}\aftergroup\pgfmath@settrigformat},
+ /pgf/trig format/rad/.add code={}{\directlua{pgfluamathfunctions.setTrigFormat("rad")}\aftergroup\pgfmath@settrigformat},
+}
+% ... and reactivate the key:
+\pgfmathiftrigonometricusesdeg{%
+ \pgfkeys{/pgf/trig format/deg}%
+}{%
+ \pgfkeys{/pgf/trig format/rad}%
+}%
+
+% re-activates the current trig format. This is important after a TeX
+% group has been closed.
+\def\pgfmath@settrigformat{%
+ \pgfmathiftrigonometricusesdeg{%
+ \directlua{pgfluamathfunctions.setTrigFormat("deg")}%
+ }{%
+ \directlua{pgfluamathfunctions.setTrigFormat("rad")}%
+ }%
+}%
+
+\let\pgfmathsetseed@pgfbasic = \pgfmathsetseed
+\def\pgfmathsetseed#1{%
+ \pgfmathsetseed@pgfbasic{#1}%
+ \directlua{pgfluamathfunctions.setRandomSeed(pgfluamathfunctions.tonumber("\pgfmathresult"))}%
+}%
+
+% Patch 'declare function' such that it communicates the function
+% directly to LUA.
+\let\pgfmathnotifynewdeclarefunction@orig=\pgfmathnotifynewdeclarefunction
+\def\pgfmathnotifynewdeclarefunction#1#2#3{%
+ \pgfmathnotifynewdeclarefunction@orig{#1}{#2}{#3}%
+ %
+ % we have to check if '#3' contains control sequences.
+ % this is highly tricky as it may contain '#1'...
+ \begingroup
+ \toks0={#3}%
+ \xdef\pgf@marshal@glob{\the\toks0 }%
+ \endgroup
+ \pgfutil@command@to@string\pgf@marshal@glob\pgf@marshal
+ \expandafter\pgfutilifcontainsmacro\expandafter{\pgf@marshal}{%
+ \def\pgf@temp{1}%
+ }{%
+ \def\pgf@temp{0}%
+ }%
+ \if1\pgf@temp
+ % let lua produce an error when evaluating this function -- we cannot possibly expand the macro to its current state:
+ \directlua{pgfluamathparser.pushLocalExpressionFunction(%
+ "\pgfutil@luaescapestring{#1}",%
+ #2,%
+ "functionMustBeEvaluatedInTeX")}%
+ \else
+ \directlua{pgfluamathparser.pushLocalExpressionFunction(%
+ "\pgfutil@luaescapestring{#1}",%
+ #2,%
+ "\pgfutil@luaescapestring{#3}")}%
+ \fi
+ %
+ % ensure that the local function is removed at the end of the
+ % scope. To this end, we maintain a stack on the LUA side.
+ \aftergroup\pgfluamathparse@pop@local@function
+}%
+
+\def\pgfluamathparse@pop@local@function{%
+ \directlua{pgfluamathparser.popLocalExpressionFunction()}%
+}%
+
+% End of luatex stuff
+% *******************************************************************
+
+% Loading part: based on fpu library
+
+
+% if LUA failed to evaluate the expression, it will be evaluated in
+% TeX as fallback. This boolean defines if the error message shall be
+% shown or suppressed. The default is to suppress it and show any
+% resulting TeX errors.
+%
+% If LUA fails \pgfmathresult will be empty.
+%
+% This is actually only for debugging; it will be set implicitly when
+% activating/deactivating TeX fallback.
+\newif\ifpgfluamathshowerrormessage
+
+% Defines what happens if LUA failed to evaluate the expression: if
+% this is true, the TeX parser will be invoked as fallback.
+%
+% This happens
+% - for \chardef'ed boxes for which LUA lacks evaluation capabilities
+% - if the expression includes some function which is unavailable in
+% LUA (defined only in TeX)
+% - some special cases which simply haven't been added to the LUA
+% parser (yet).
+% At the time of this writing, this includes
+% -- arrays created via '{}' and indexed with '[]'
+% -- strings with "<str>"
+% -- 'scalar' function
+% -- hex/octal/binary input
+\newif\ifpgfluamathenableTeXfallback
+
+\newif\ifpgfluamathcomputationactive
+\newif\ifpgfluamathparseractive
+
+\def\pgfluamath@makecomputationactive{%
+ \ifpgfluamathcomputationactive
+ \else
+ \pgfluamath@checkuninstallcmd%
+ \pgfluamath@install%
+ \pgfluamathcomputationactivetrue
+ \fi}
+
+\def\pgfluamath@makecomputationinactive{%
+ \ifpgfluamathcomputationactive
+ \pgfluamath@uninstall%
+ \pgfluamathcomputationactivefalse
+ \fi}
+
+\let\pgfluamath@pgfmathparse\pgfmathparse
+\def\pgfluamath@makeparseractive{%
+ \ifpgfluamathparseractive
+ \else
+ \let\pgfluamath@pgfmathparse\pgfmathparse
+ \let\pgfmathparse\pgfluamathparse
+ \pgfluamathparseractivetrue
+ \fi}
+
+\def\pgfluamath@makeparserinactive{%
+ \ifpgfluamathparseractive
+ \let\pgfmathparse\pgfluamath@pgfmathparse
+ \pgfluamathparseractivefalse
+ \fi}
+
+\pgfqkeys{/pgf}{%
+ % Enable lua-side computation of \pgfmathresult
+ % (will be deactivated after the current TeX group)
+ luamath/.is choice,
+ luamath/only computation/.code={%
+ \pgfutil@ifluatex
+ \pgfluamath@makecomputationactive
+ \pgfluamath@makeparserinactive
+ \else
+ \pgfmath@error{Sorry, you need the luaTeX engine to use the
+ luamath library}%
+ \fi},
+ luamath/parser and computation/.code={%
+ \pgfutil@ifluatex
+ \pgfluamath@makecomputationactive
+ \pgfluamath@makeparseractive
+ \else
+ \pgfmath@error{Sorry, you need the luaTeX engine to use the
+ luamath library}%
+ \fi},
+ luamath/off/.code={%
+ \pgfluamath@makecomputationinactive
+ \pgfluamath@makeparserinactive},
+ luamath/.default=only computation,
+ %
+ % activates ONLY the parser. This is fast and does not replace the
+ % \pgfmath* functions.
+ % @see |parser and computation| which also allows to write
+ % \pgfmathadd{1}{2} to call LUA
+ luamath/parser/.code={%
+ \pgfutil@ifluatex
+ \pgfluamath@makeparseractive
+ \else
+ \pgfmath@error{Sorry, you need the luaTeX engine to use the
+ luamath library}%
+ \fi
+ },
+ luamath/output format/.is choice,
+ luamath/output format/fixed/.code= {\def\pgfluamath@outputformat@choice{0}},
+ % returns results for use in the FPU
+ luamath/output format/float/.code= {\def\pgfluamath@outputformat@choice{1}},
+ luamath/output format/fixed,
+ % this is merely useful for debugging purposes, I guess.
+ luamath/show error message/.is if=pgfluamathshowerrormessage,
+ luamath/enable TeX fallback/.is choice,
+ luamath/enable TeX fallback/true/.code={\pgfluamathenableTeXfallbacktrue\pgfluamathshowerrormessagefalse},
+ luamath/enable TeX fallback/false/.code={\pgfluamathenableTeXfallbackfalse\pgfluamathshowerrormessagetrue},
+ luamath/enable TeX fallback/.default=true,
+ luamath/enable TeX fallback=true,
+}
+
+\def\pgfluamath@uninstall@appendcmd#1{%
+ \expandafter\gdef\expandafter\pgfluamath@uninstall\expandafter{%
+ \pgfluamath@uninstall #1}}
+
+% If the uninstall command is already assembled, it will skip the
+% uninstall assemblation.
+\def\pgfluamath@checkuninstallcmd{%
+ \pgfutil@ifundefined{pgfluamath@uninstall}{%
+ \global\let\pgfluamath@uninstall=\pgfutil@empty
+ }{%
+ % We already HAVE an uninstall command (prepared globally).
+ % So: don't waste time assembling one!
+ \def\pgfluamath@uninstall@appendcmd##1{}%
+ \def\pgfluamath@prepareuninstallcmd##1{}%
+ }%
+}
+
+% This assembles an uninstall command globally ON FIRST USAGE.
+% See \pgfmathfloat@plots@checkuninstallcmd
+\def\pgfluamath@prepareuninstallcmd#1{%
+ \expandafter\global\expandafter\let
+ \csname pgfluamath@backup@\string#1\endcsname=#1%
+ \expandafter\gdef\expandafter\pgfluamath@uninstall\expandafter{%
+ \pgfluamath@uninstall
+ \expandafter\let\expandafter#1\csname pgfluamath@backup@\string#1\endcsname}%
+}
+
+\def\pgfluamath@install@function#1=#2{%
+ \pgfluamath@prepareuninstallcmd{#1}%
+ \let#1=#2%
+}
+
+\def\pgfluamath@install{%
+ \pgfluamath@install@function\pgfmathadd@=\pgfluamathadd@%
+ \pgfluamath@install@function\pgfmathsubtract@=\pgfluamathsubtract@%
+ \pgfluamath@install@function\pgfmathneg@=\pgfluamathneg@%
+ \pgfluamath@install@function\pgfmathmultiply@=\pgfluamathmultiply@%
+ \pgfluamath@install@function\pgfmathdivide@=\pgfluamathdivide@%
+ % \pgfluamath@install@function\pgfmathdiv@=\pgfluamathdiv@%
+ \pgfluamath@install@function\pgfmathfactorial@=\pgfluamathfactorial@%
+ \pgfluamath@install@function\pgfmathsqrt@=\pgfluamathsqrt@%
+ % \pgfluamath@install@function\pgfmathpow@=\pgfluamathpow@%
+ \pgfluamath@install@function\pgfmathe@=\pgfluamathe@%
+ \pgfluamath@install@function\pgfmathexp@=\pgfluamathexp@%
+ \pgfluamath@install@function\pgfmathln@=\pgfluamathln@%
+ \pgfluamath@install@function\pgfmathlogten@=\pgfluamathlogten@%
+ % \pgfluamath@install@function\pgfmathlogtwo@=\pgfluamathlogtwo@%
+ \pgfluamath@install@function\pgfmathabs@=\pgfluamathabs@%
+ \pgfluamath@install@function\pgfmathmod@=\pgfluamathmod@%
+ \pgfluamath@install@function\pgfmathMod@=\pgfluamathMod@%
+ \pgfluamath@install@function\pgfmathround@=\pgfluamathround@%
+ \pgfluamath@install@function\pgfmathfloor@=\pgfluamathfloor@%
+ \pgfluamath@install@function\pgfmathceil@=\pgfluamathceil@%
+ % \pgfluamath@install@function\pgfmathint@=\pgfluamathint@%
+ % \pgfluamath@install@function\pgfmathfrac@=\pgfluamathfrac@%
+ % \pgfluamath@install@function\pgfmathreal@=\pgfluamathreal@%
+ \pgfluamath@install@function\pgfmathgcd@=\pgfluamathgcd@%
+ \pgfluamath@install@function\pgfmathisprime@=\pgfluamathisprime@%
+ \pgfluamath@install@function\pgfmathpi@=\pgfluamathpi@%
+ \pgfluamath@install@function\pgfmathrad@=\pgfluamathrad@%
+ \pgfluamath@install@function\pgfmathdeg@=\pgfluamathdeg@%
+ \pgfluamath@install@function\pgfmathsin@=\pgfluamathsin@%
+ \pgfluamath@install@function\pgfmathcos@=\pgfluamathcos@%
+ \pgfluamath@install@function\pgfmathtan@=\pgfluamathtan@%
+ \pgfluamath@install@function\pgfmathsec@=\pgfluamathsec@%
+ \pgfluamath@install@function\pgfmathcosec@=\pgfluamathcosec@%
+ \pgfluamath@install@function\pgfmathcot@=\pgfluamathcot@%
+ \pgfluamath@install@function\pgfmathasin@=\pgfluamathasin@%
+ \pgfluamath@install@function\pgfmathacos@=\pgfluamathacos@%
+ \pgfluamath@install@function\pgfmathatan@=\pgfluamathatan@%
+ \pgfluamath@install@function\pgfmathatantwo@=\pgfluamathatantwo@%
+ \pgfluamath@install@function\pgfmathmax@=\pgfluamathmax@%
+ \pgfluamath@install@function\pgfmathmin@=\pgfluamathmin@%
+ % \pgfluamath@install@function\pgfmath@pi=\pgfluamathpi@%
+ % \pgfluamath@install@function\pgfmathpi=\pgfluamathpi@%
+ % \pgfluamath@install@function\pgfmathe@=\pgfluamathe@%
+ % \pgfluamath@install@function\pgfmathe=\pgfluamathe@%
+ % \pgfluamath@install@function\pgfmathlessthan@=\pgfluamathlessthan@%
+ % \pgfluamath@install@function\pgfmathless@=\pgfluamathlessthan@%
+ % \pgfluamath@install@function\pgfmathgreaterthan@=\pgfluamathgreaterthan@%
+ % \pgfluamath@install@function\pgfmathgreater@=\pgfluamathgreaterthan@%
+ % \pgfluamath@install@function\pgfmathpow@=\pgfluamathpow@
+ \pgfluamath@install@function\pgfmathrand@=\pgfluamathrand@
+ \pgfluamath@install@function\pgfmathrand=\pgfluamathrand@
+ \pgfluamath@install@function\pgfmathrnd@=\pgfluamathrnd@
+ \pgfluamath@install@function\pgfmathrnd=\pgfluamathrnd@
+ % \pgfluamath@install@function\pgfmathtrue@=\pgfluamathtrue@
+ % \pgfluamath@install@function\pgfmathfalse@=\pgfluamathfalse@
+ % \pgfluamath@install@function\pgfmathnot@=\pgfluamathnot@
+ % \pgfluamath@install@function\pgfmathhex@=\pgfluamathhex@
+ % \pgfluamath@install@function\pgfmathHex@=\pgfluamathHex@
+ % \pgfluamath@install@function\pgfmathoct@=\pgfluamathoct@
+ % \pgfluamath@install@function\pgfmathbin@=\pgfluamathbin@
+ % \pgfluamath@install@function\pgfmathand@=\pgfluamathand@
+ % \pgfluamath@install@function\pgfmathor@=\pgfluamathor@
+ % \pgfluamath@install@function\pgfmathfactorial@=\pgfluamathfactorial@
+ % \pgfluamath@install@function\pgfmathveclen@=\pgfluamathveclen@
+ % \pgfluamath@install@function\pgfmathcosh@=\pgfluamathcosh@
+ % \pgfluamath@install@function\pgfmathsinh@=\pgfluamathsinh@
+ % \pgfluamath@install@function\pgfmathtanh@=\pgfluamathtanh@
+ % \pgfluamath@install@function@unimplemented{ceil}%
+ % \pgfluamath@install@function@unimplemented{frac}%
+ % \pgfluamath@install@function@unimplemented{log2}%
+ % \pgfluamath@install@function@unimplemented{log10}%
+ % \pgfluamath@install@function@unimplemented{equalto}%
+ % \pgfluamath@install@function@unimplemented{random}%
+ % \pgfluamath@install@function@unimplemented{setseed}%
+ % \pgfluamath@install@function@unimplemented{Mod}%
+ % \pgfluamath@install@function@unimplemented{real}%
+ % \pgfluamath@install@function@unimplemented{notequal}%
+ \pgfluamath@install@function\pgfmathreciprocal=\pgfluamathreciprocal%
+ \pgfluamath@install@function\pgfpointnormalised=\pgfluamathpointnormalised
+}
+
+\def\pgfluamathgetresult#1{%
+ \edef\pgfmathresult{\pgfutil@directlua{tex.print(-1,#1)}}}
+
+\def\pgfluamathpi@{%
+ \pgfluamathgetresult{pgfluamathfunctions.pi()}}
+\def\pgfluamathe@{%
+ \pgfluamathgetresult{pgfluamathfunctions.e()}}
+\def\pgfluamathadd@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.add(#1,#2)}}
+\def\pgfluamathsubtract@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.substract(#1,#2)}}
+\def\pgfluamathneg@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.neg(#1)}}
+\def\pgfluamathmultiply@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.multiply(#1,#2)}}
+\def\pgfluamathdivide@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.divide(#1,#2)}}
+\def\pgfluamathabs@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.abs(#1)}}
+\def\pgfluamathround@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.round(#1)}}
+\def\pgfluamathfloor@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.floor(#1)}}
+\def\pgfluamathceil@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.ceil(#1)}}
+\def\pgfluamathgcd@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.gcd(#1,#2)}}
+\def\pgfluamathisprime@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.isprime(#1)}}
+\def\pgfluamathmax@#1{%
+ \pgfluamathgetresult{%
+ math.max(pgfluamathfunctions.split_braces_to_explist("#1"))}}
+\def\pgfluamathmin@#1{%
+ \pgfluamathgetresult{%
+ math.min(pgfluamathfunctions.split_braces_to_explist("#1"))}}
+\def\pgfluamathsin@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.Sin(#1)}}
+\def\pgfluamathcos@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.Cos(#1)}}
+\def\pgfluamathtan@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.Tan(#1)}}
+\def\pgfluamathmod@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.mod(#1,#2)}}
+\def\pgfluamathMod@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.Mod(#1,#2)}}
+\def\pgfluamathrad@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.rad(#1)}}
+\def\pgfluamathdeg@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.deg(#1)}}
+\def\pgfluamathatan@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.aTan(#1)}}
+\def\pgfluamathatantwo@#1#2{%
+ \pgfluamathgetresult{pgfluamathfunctions.aTan2(#1,#2)}}
+\def\pgfluamathasin@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.aSin(#1)}}
+\def\pgfluamathacos@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.aCos(#1)}}
+\def\pgfluamathcot@#1{%
+ \pgfluamathgetresult{1/pgfluamathfunctions.Tan(#1)}}
+\def\pgfluamathsec@#1{%
+ \pgfluamathgetresult{1/pgfluamathfunctions.Cos(#1)}}
+\def\pgfluamathcosec@#1{%
+ \pgfluamathgetresult{1/pgfluamathfunctions.Sin(#1)}}
+\def\pgfluamathexp@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.exp(#1)}}
+\def\pgfluamathln@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.log(#1)}}
+\def\pgfluamathlogten@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.log10(#1)}}
+\def\pgfluamathsqrt@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.sqrt(#1)}}
+\def\pgfluamathrnd@{%
+ \pgfluamathgetresult{pgfluamathfunctions.rnd()}}
+\def\pgfluamathrand@{%
+ \pgfluamathgetresult{pgfluamathfunctions.rand(-1,1)}}
+\def\pgfluamathfactorial@#1{%
+ \pgfluamathgetresult{pgfluamathfunctions.factorial(#1)}}
+\def\pgfluamathreciprocal#1{%
+ \pgfluamathgetresult{1/#1}}
+% \pgfluamath@install@function\pgfmath@pi=\pgfluamathpi@%
+% \pgfluamath@install@function\pgfmathpi=\pgfluamathpi@%
+% \pgfluamath@install@function\pgfmathe@=\pgfluamathe@%
+% \pgfluamath@install@function\pgfmathe=\pgfluamathe@%
+% \pgfluamath@install@function\pgfmathlessthan@=\pgfluamathlessthan@%
+% \pgfluamath@install@function\pgfmathless@=\pgfluamathlessthan@%
+% \pgfluamath@install@function\pgfmathgreaterthan@=\pgfluamathgreaterthan@%
+% \pgfluamath@install@function\pgfmathgreater@=\pgfluamathgreaterthan@%
+% \pgfluamath@install@function\pgfmathpow@=\pgfluamathpow@
+% \pgfluamath@install@function\pgfmathrand@=\pgfluamathrand@
+% \pgfluamath@install@function\pgfmathrand=\pgfluamathrand@
+% \pgfluamath@install@function\pgfmathrnd@=\pgfluamathrnd@
+% \pgfluamath@install@function\pgfmathrnd=\pgfluamathrnd@
+% \pgfluamath@install@function\pgfmathtrue@=\pgfluamathtrue@
+% \pgfluamath@install@function\pgfmathfalse@=\pgfluamathfalse@
+% \pgfluamath@install@function\pgfmathnot@=\pgfluamathnot@
+% \pgfluamath@install@function\pgfmathhex@=\pgfluamathhex@
+% \pgfluamath@install@function\pgfmathHex@=\pgfluamathHex@
+% \pgfluamath@install@function\pgfmathoct@=\pgfluamathoct@
+% \pgfluamath@install@function\pgfmathbin@=\pgfluamathbin@
+% \pgfluamath@install@function\pgfmathand@=\pgfluamathand@
+% \pgfluamath@install@function\pgfmathor@=\pgfluamathor@
+% \pgfluamath@install@function\pgfmathfactorial@=\pgfluamathfactorial@
+% \pgfluamath@install@function\pgfmathveclen@=\pgfluamathveclen@
+% \pgfluamath@install@function\pgfmathcosh@=\pgfluamathcosh@
+% \pgfluamath@install@function\pgfmathsinh@=\pgfluamathsinh@
+% \pgfluamath@install@function\pgfmathtanh@=\pgfluamathtanh@
+
+\def\pgfluamathpointnormalised#1{%
+ \pgf@process{#1}%
+ \pgfutil@directlua{%
+ pgfluamathfunctions.pointnormalised(%
+ \pgf@sys@tonumber{\pgf@x},\pgf@sys@tonumber{\pgf@y})}%
+ \ignorespaces}
+
+% Parser
+
+\newif\ifpgfluamathunitsdeclared
+
+% true if and only if LUA failed to evaluate the expression and the
+% expression was evaluated by means of the TeX parser as fallback.
+%
+% This happens
+% - for \chardef'ed boxes for which LUA lacks evaluation capabilities
+% - if the expression includes some function which is unavailable in
+% LUA (defined only in TeX)
+% - some special cases which simply haven't been added to the LUA
+% parser (yet).
+% At the time of this writing, this includes
+% -- arrays created via '{}' and indexed with '[]'
+% -- strings with "<str>"
+% -- 'scalar' function
+% -- hex/octal/binary input
+\newif\ifpgfluamathusedTeXfallback
+
+% Parses the math expression and defines \pgfmathresult and
+% \ifpgfmathunitsdeclared to contain the result.
+%
+% If \ifpgfluamathparseractive then the result is also assigned to
+% \pgfmathresult. Furthermore, if the expression cannot be evaluated (because LUA does not support
+% it), it will be evaluated by mean of TeX as fallback.
+%
+% @see \ifpgfluamathusedTeXfallback
+% @see \ifpgfluamathshowerrormessage
+\def\pgfluamathparse#1{%
+ \pgfluamathusedTeXfallbackfalse
+ \pgfutil@directlua{pgfluamathparser.texCallParser(
+ "\pgfutil@luaescapestring{#1}",
+ \pgfluamath@outputformat@choice,
+ \ifpgfluamathshowerrormessage true\else false\fi)%
+ }%
+ \ifx\pgfmathresult\pgfutil@empty
+ \ifpgfluamathenableTeXfallback
+ \pgfluamathusedTeXfallbacktrue
+ \pgfluamath@pgfmathparse{#1}%
+ \fi
+ \fi
+}
+
+\catcode`\"=\pgfliblua@oldcatcodedoublequote
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex
new file mode 100644
index 0000000000..aa3c0e8f36
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex
@@ -0,0 +1,1141 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 25. Dez 18:14:20 CET 2012 %%%
+
+
+
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/libraries/pgflibraryplothandlers.code.tex,v 1.17 2012/09/11 20:03:46 ludewich Exp $
+
+\newif\ifpgf@plot@started
+
+
+% This handler converts each plot stream command into a curveto
+% command, except for the first, which is converted to the previously
+% specified action.
+%
+% Example:
+%
+% \pgfpathmoveto{\pgfpointorigin}
+% \pgfsetlinetofirstplotpoint
+% \pgfplothandlercurveto
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlercurveto{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@curveto@handler@initial%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgf@plot@curveto@handler@finish%
+ \global\pgf@plot@startedfalse%
+ }%
+}
+
+\def\pgf@plot@curveto@handler@initial#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@plot@first@action{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \xdef\pgf@plot@curveto@first{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \global\let\pgf@plot@curveto@first@support=\pgf@plot@curveto@first%
+ \global\let\pgf@plotstreampoint=\pgf@plot@curveto@handler@second%
+}
+
+\def\pgf@plot@curveto@handler@second#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@curveto@second{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@curveto@handler@third%
+ \global\pgf@plot@startedtrue%
+}
+
+\def\pgf@plot@curveto@handler@third#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@curveto@current{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ % compute difference vector:
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgf@plot@curveto@first}
+ \advance\pgf@xa by-\pgf@x%
+ \advance\pgf@ya by-\pgf@y%
+ % compute support directions:
+ \pgf@xa=\pgf@plottension\pgf@xa%
+ \pgf@ya=\pgf@plottension\pgf@ya%
+ % first marshal:
+ \pgf@process{\pgf@plot@curveto@second}%
+ \pgf@xb=\pgf@x%
+ \pgf@yb=\pgf@y%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \advance\pgf@xb by-\pgf@xa%
+ \advance\pgf@yb by-\pgf@ya%
+ \advance\pgf@xc by\pgf@xa%
+ \advance\pgf@yc by\pgf@ya%
+ \edef\pgf@marshal{\noexpand\pgfpathcurveto{\noexpand\pgf@plot@curveto@first@support}%
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}{\noexpand\pgf@plot@curveto@second}}%
+ {\pgf@marshal}%
+ % Prepare next:
+ \global\let\pgf@plot@curveto@first=\pgf@plot@curveto@second%
+ \global\let\pgf@plot@curveto@second=\pgf@plot@curveto@current%
+ \xdef\pgf@plot@curveto@first@support{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
+}
+
+\def\pgf@plot@curveto@handler@finish{%
+ \ifpgf@plot@started%
+ \pgfpathcurveto{\pgf@plot@curveto@first@support}{\pgf@plot@curveto@second}{\pgf@plot@curveto@second}%
+ \fi%
+}
+
+
+% This commands sets the tension for smoothing of plots.
+%
+% #1 = tension of curves. A value of 1 will yield a circle when the
+% control points are at quarters of a circle. A smaller value
+% will result in a tighter curve. Default is 0.5.
+%
+% Example:
+%
+% \pgfsetplottension{0.2}
+
+\def\pgfsetplottension#1{%
+ \pgf@x=#1pt\relax%
+ \pgf@x=0.2775\pgf@x\relax%
+ \edef\pgf@plottension{\pgf@sys@tonumber\pgf@x}}
+\pgfsetplottension{0.5}
+
+
+% This handler converts the plot stream command into a curveto
+% command that is closed using a closepath.
+%
+% Example:
+%
+% \pgfpathmoveto{\pgfpointorigin}
+% \pgfplothandlerclosedcurve
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlerclosedcurve{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@closedcurve@handler@initial%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgf@plot@closedcurve@handler@finish%
+ }%
+}
+
+\def\pgf@plot@closedcurve@handler@initial#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \xdef\pgf@plot@closedcurve@initial{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@closedcurve@handler@second%
+ \global\pgf@plot@startedfalse%
+}
+
+\def\pgf@plot@closedcurve@handler@second#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@closedcurve@after@initial{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ {\pgfpathmoveto{}}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@closedcurve@handler@third%
+}
+
+\def\pgf@plot@closedcurve@handler@third#1{%
+ \global\pgf@plot@startedtrue%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@closedcurve@current{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ % compute difference vector:
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgf@plot@closedcurve@initial}
+ \advance\pgf@xa by-\pgf@x%
+ \advance\pgf@ya by-\pgf@y%
+ % compute support directions:
+ \pgf@xa=\pgf@plottension\pgf@xa%
+ \pgf@ya=\pgf@plottension\pgf@ya%
+ % first marshal:
+ \pgf@process{\pgf@plot@closedcurve@after@initial}%
+ \pgf@xb=\pgf@x%
+ \pgf@yb=\pgf@y%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \advance\pgf@xb by-\pgf@xa%
+ \advance\pgf@yb by-\pgf@ya%
+ \advance\pgf@xc by\pgf@xa%
+ \advance\pgf@yc by\pgf@ya%
+ \global\let\pgf@plot@closedcurve@first=\pgf@plot@closedcurve@after@initial%
+ \global\let\pgf@plot@closedcurve@second=\pgf@plot@closedcurve@current%
+ \xdef\pgf@plot@closedcurve@after@initial@presupport{\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}%
+ \xdef\pgf@plot@closedcurve@first@support{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@closedcurve@handler@fourth%
+}
+
+\def\pgf@plot@closedcurve@handler@fourth#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@closedcurve@current{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ % compute difference vector:
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgf@plot@closedcurve@first}
+ \advance\pgf@xa by-\pgf@x%
+ \advance\pgf@ya by-\pgf@y%
+ % compute support directions:
+ \pgf@xa=\pgf@plottension\pgf@xa%
+ \pgf@ya=\pgf@plottension\pgf@ya%
+ % first marshal:
+ \pgf@process{\pgf@plot@closedcurve@second}%
+ \pgf@xb=\pgf@x%
+ \pgf@yb=\pgf@y%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \advance\pgf@xb by-\pgf@xa%
+ \advance\pgf@yb by-\pgf@ya%
+ \advance\pgf@xc by\pgf@xa%
+ \advance\pgf@yc by\pgf@ya%
+ \edef\pgf@marshal{\noexpand\pgfpathcurveto{\noexpand\pgf@plot@closedcurve@first@support}%
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}{\noexpand\pgf@plot@closedcurve@second}}%
+ {\pgf@marshal}%
+ % Prepare next:
+ \global\let\pgf@plot@closedcurve@first=\pgf@plot@closedcurve@second%
+ \global\let\pgf@plot@closedcurve@second=\pgf@plot@closedcurve@current%
+ \xdef\pgf@plot@closedcurve@first@support{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
+}
+
+\def\pgf@plot@closedcurve@handler@finish{%
+ \ifpgf@plot@started
+ %
+ % first, draw line from 2nd last to last:
+ %
+ \pgf@process{\pgf@plot@closedcurve@initial}%
+ % compute difference vector:
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgf@plot@closedcurve@first}%
+ \advance\pgf@xa by-\pgf@x%
+ \advance\pgf@ya by-\pgf@y%
+ % compute support directions:
+ \pgf@xa=\pgf@plottension\pgf@xa%
+ \pgf@ya=\pgf@plottension\pgf@ya%
+ % first marshal:
+ \pgf@process{\pgf@plot@closedcurve@second}%
+ \pgf@xb=\pgf@x%
+ \pgf@yb=\pgf@y%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \advance\pgf@xb by-\pgf@xa%
+ \advance\pgf@yb by-\pgf@ya%
+ \advance\pgf@xc by\pgf@xa%
+ \advance\pgf@yc by\pgf@ya%
+ \edef\pgf@marshal{\noexpand\pgfpathcurveto{\noexpand\pgf@plot@closedcurve@first@support}%
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}{\noexpand\pgf@plot@closedcurve@second}}%
+ {\pgf@marshal}%
+ \xdef\pgf@plot@closedcurve@first@support{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
+ %
+ % second, draw line from last point to start:
+ %
+ \pgf@process{\pgf@plot@closedcurve@after@initial}%
+ % compute difference vector:
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgf@plot@closedcurve@second}%
+ \advance\pgf@xa by-\pgf@x%
+ \advance\pgf@ya by-\pgf@y%
+ % compute support directions:
+ \pgf@xa=\pgf@plottension\pgf@xa%
+ \pgf@ya=\pgf@plottension\pgf@ya%
+ % first marshal:
+ \pgf@process{\pgf@plot@closedcurve@initial}%
+ \pgf@xb=\pgf@x%
+ \pgf@yb=\pgf@y%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \advance\pgf@xb by-\pgf@xa%
+ \advance\pgf@yb by-\pgf@ya%
+ \advance\pgf@xc by\pgf@xa%
+ \advance\pgf@yc by\pgf@ya%
+ \edef\pgf@marshal{\noexpand\pgfpathcurveto{\noexpand\pgf@plot@closedcurve@first@support}%
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}{\noexpand\pgf@plot@closedcurve@initial}}%
+ {\pgf@marshal}%
+ %
+ % third, draw line from first to second point:
+ %
+ \edef\pgf@marshal{\noexpand\pgfpathcurveto{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
+ {\noexpand\pgf@plot@closedcurve@after@initial@presupport}{\noexpand\pgf@plot@closedcurve@after@initial}}%
+ {\pgf@marshal}%
+ \pgfpathclose%
+ \fi%
+}
+
+
+
+
+
+% This handler converts each point in a stream into a line from the
+% $y$-axis to the given points coordinate, resulting in a
+% ``comb.''
+%
+% Example:
+%
+% \pgfplothandlerxcomb
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlerxcomb{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@xcomb@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplotxzerolevelstreamend%
+ \pgfplotxzerolevelstreamstart
+ }%
+}
+
+\def\pgf@plot@xcomb@handler#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \begingroup
+ \pgfplotxzerolevelstreamnext
+ \endgroup
+ \pgf@yb=\pgf@x
+ \pgfpathmoveto{\pgfqpoint{\pgf@yb}{\pgf@ya}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+}
+
+
+% This handler converts each point in a stream into a line from the
+% $x$-axis straight up to the given points coordinate, resulting in a
+% ``comb.''
+%
+% Example:
+%
+% \pgfplothandlerycomb
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlerycomb{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@ycomb@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplotyzerolevelstreamend%
+ \pgfplotyzerolevelstreamstart
+ }%
+}
+
+\def\pgf@plot@ycomb@handler#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \begingroup
+ \pgfplotyzerolevelstreamnext
+ \endgroup
+ \pgf@yb=\pgf@x
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+}
+
+% PGF Bar or comb plots usually draw something from zero to the current plot's coordinate.
+%
+% The 'zero' offset can be changed using an input stream.
+%
+% There are two such streams which can be configured independently.
+% The first one returns "zeros" for coordinate x, the second one
+% returns "zeros" for coordinate y.
+%
+% \pgfplotxzerolevelstreamstart
+% \pgfplotxzerolevelstreamnext % assigns \pgf@x globally
+% \pgfplotxzerolevelstreamnext
+% \pgfplotxzerolevelstreamnext
+% \pgfplotxzerolevelstreamend
+%
+% and
+% \pgfplotyzerolevelstreamstart
+% \pgfplotyzerolevelstreamnext % assigns \pgf@x globally
+% \pgfplotyzerolevelstreamend
+%
+\def\pgfplotxzerolevelstreamstart{\pgf@plotxzerolevelstreamstart}%
+\def\pgfplotxzerolevelstreamend{\pgf@plotxzerolevelstreamend}%
+\def\pgfplotxzerolevelstreamnext{\pgf@plotxzerolevelstreamnext}
+\def\pgfplotyzerolevelstreamstart{\pgf@plotyzerolevelstreamstart}%
+\def\pgfplotyzerolevelstreamend{\pgf@plotyzerolevelstreamend}%
+\def\pgfplotyzerolevelstreamnext{\pgf@plotyzerolevelstreamnext}
+
+% This zero level stream always returns '#1' (a dimension).
+\def\pgfplotxzerolevelstreamconstant#1{%
+ \edef\pgfplotxzerolevelstreamconstant@val{#1}%
+ \def\pgf@plotxzerolevelstreamstart{%
+ \global\let\pgf@plotxzerolevelstreamend=\relax
+ \gdef\pgf@plotxzerolevelstreamnext{\global\pgf@x=\pgfplotxzerolevelstreamconstant@val\relax}%
+ }%
+}%
+\pgfplotxzerolevelstreamconstant{0pt}%
+
+% This zero level stream always returns '#1'.
+\def\pgfplotyzerolevelstreamconstant#1{%
+ \edef\pgfplotyzerolevelstreamconstant@val{#1}%
+ \def\pgf@plotyzerolevelstreamstart{%
+ \global\let\pgf@plotyzerolevelstreamend=\relax
+ \gdef\pgf@plotyzerolevelstreamnext{\global\pgf@x=\pgfplotyzerolevelstreamconstant@val\relax}%
+ }%
+}%
+\pgfplotyzerolevelstreamconstant{0pt}%
+
+\def\pgfplotbarwidth{\pgfkeysvalueof{/pgf/bar width}}
+\def\pgfplotbarshift{\pgfkeysvalueof{/pgf/bar shift}}
+
+\pgfqkeys{/pgf}{%
+ bar width/.initial=10pt,
+ bar shift/.initial=0pt,
+ bar interval width/.initial=1,
+ bar interval shift/.initial=0.5,
+ %
+ % hook which is executed right before a new bar is begun.
+ at begin bar/.initial=,
+ % hook which is executed right after a bar path has been finished.
+ % In this context, the bar's path has not been used.
+ at end bar/.initial=,
+}
+
+% This handler places a rectangle at each point in the plot stream, a
+% rectangle which touches the x-axis at one end and the current point
+% at the other end:
+% --(X)--
+% | |
+% | |
+% | |
+% --(0)--
+% Example:
+%
+% \pgfplothandlerybar
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerybar{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@ybar@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplotyzerolevelstreamend%
+ \pgfmathparse{\pgfplotbarwidth}%
+ \xdef\pgfplotbarwidth@{\pgfmathresult pt}%
+ \pgfmathparse{\pgfplotbarshift}%
+ \xdef\pgfplotbarshift@{\pgfmathresult pt}%
+ \pgfplotyzerolevelstreamstart
+ }%
+}
+
+\def\pgf@plot@ybar@handler#1{%
+ \pgfkeysvalueof{/pgf/at begin bar}%
+ \pgf@process{#1}%
+ \pgf@ya=\pgf@y
+ \expandafter\pgf@xb\pgfplotbarwidth@\relax
+ \pgf@xc=\pgf@x
+ \advance\pgf@xc by-.5\pgf@xb
+ \advance\pgf@xc by\pgfplotbarshift@\relax
+ \begingroup
+ \pgfplotyzerolevelstreamnext
+ \endgroup
+ \pgf@yb=\pgf@x
+ \advance\pgf@ya by-\pgf@yb
+ \pgfpathrectangle
+ {\pgfqpoint{\pgf@xc}{\pgf@yb}}%
+ {\pgfqpoint{\pgf@xb}{\pgf@ya}}%
+ \pgfkeysvalueof{/pgf/at end bar}%
+}
+
+% This handler places a rectangle at each point in the plot stream, a
+% rectangle which touches the y-axis at one end and the current point
+% at the other end:
+% ---------
+% | |
+% (0) (X)
+% | |
+% ---------
+% Example:
+%
+% \pgfplothandlerxbar
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerxbar{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@xbar@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplotxzerolevelstreamend%
+ \pgfmathparse{\pgfplotbarwidth}%
+ \xdef\pgfplotbarwidth@{\pgfmathresult pt}%
+ \pgfmathparse{\pgfplotbarshift}%
+ \xdef\pgfplotbarshift@{\pgfmathresult pt}%
+ \pgfplotxzerolevelstreamstart
+ }%
+}
+
+\def\pgf@plot@xbar@handler#1{%
+ \pgfkeysvalueof{/pgf/at begin bar}%
+ \pgf@process{#1}%
+ \pgf@ya=\pgf@x
+ \expandafter\pgf@xb\pgfplotbarwidth@\relax
+ \pgf@xc=\pgf@y
+ \advance\pgf@xc by-.5\pgf@xb
+ \advance\pgf@xc by\pgfplotbarshift@\relax
+ \begingroup
+ \pgfplotxzerolevelstreamnext
+ \endgroup
+ \pgf@yb=\pgf@x
+ \advance\pgf@ya by-\pgf@yb
+ \pgfpathrectangle
+ {\pgfqpoint{\pgf@yb}{\pgf@xc}}%
+ {\pgfqpoint{\pgf@ya}{\pgf@xb}}%
+ \pgfkeysvalueof{/pgf/at end bar}%
+}
+
+% This handler is a variant of \pgfplothandlerybar which works with
+% intervals instead of points.
+%
+% Bars are drawn between successive input coordinates and the width is
+% determined relatively to the interval length.
+%
+% It looks like this:
+%
+% |---| |-----|
+% | | | |
+% | | | |
+% | | | |
+% (X)------(X)-----------(X)
+%
+% where (X) denotes the x-axis offsets of input coordinates.
+%
+% In more detail, if (x_i,y_i) and (x_{i+1},y_{i+1}) denote successive
+% input coordinates, the bar will be placed above the
+% interval [x_i,x_{i+1}], centered at
+%
+% x_i + \pgfkeysvalueof{/pgf/bar interval shift} * (x_{i+1} - x_i)
+%
+% with width
+%
+% \pgfkeysvalueof{/pgf/bar interval width} * (x_{i+1} - x_i).
+%
+% If you have N+1 input points, you will get N bars (one for each
+% interval). The y_i value of the last bar will be ignored.
+%
+% Example:
+%
+% \pgfplothandlerybarinterval
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerybarinterval{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@ybarinterval@handler@first%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplotyzerolevelstreamend%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/bar interval width}}%
+ \xdef\pgfplotbarintervalwidth@{\pgfmathresult}%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/bar interval shift}}%
+ \xdef\pgfplotbarintervalshift@{\pgfmathresult}%
+ \pgfplotyzerolevelstreamstart
+ }%
+}
+
+\def\pgf@plot@ybarinterval@handler@first#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@barinterval@intervalstart{\the\pgf@x}%
+ \xdef\pgf@plot@barinterval@bar{\the\pgf@y}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@ybarinterval@handler%
+}
+\def\pgf@plot@ybarinterval@handler#1{%
+ \pgfkeysvalueof{/pgf/at begin bar}%
+ \pgf@process{#1}%
+ \pgf@ya=\pgf@plot@barinterval@bar
+ \xdef\pgf@plot@barinterval@bar{\the\pgf@y}%
+ \pgf@xc=\pgf@plot@barinterval@intervalstart\relax
+ \xdef\pgf@plot@barinterval@intervalstart{\the\pgf@x}%
+ \pgf@xb=\pgf@x
+ \advance\pgf@xb by-\pgf@xc
+ \advance\pgf@xc by\pgfplotbarintervalshift@\pgf@xb
+ \pgf@xb=\pgfplotbarintervalwidth@\pgf@xb
+ \advance\pgf@xc by-.5\pgf@xb% center
+ \begingroup
+ \pgfplotyzerolevelstreamnext
+ \endgroup
+ \pgf@yb=\pgf@x
+ \advance\pgf@ya by-\pgf@yb
+ \pgfpathrectangle
+ {\pgfqpoint{\pgf@xc}{\pgf@yb}}%
+ {\pgfqpoint{\pgf@xb}{\pgf@ya}}%
+ \pgfkeysvalueof{/pgf/at end bar}%
+}
+
+% Like \pgfplothandlerybarinterval but for xbar.
+\def\pgfplothandlerxbarinterval{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@xbarinterval@handler@first%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgfplotxzerolevelstreamend%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/bar interval width}}%
+ \xdef\pgfplotbarintervalwidth@{\pgfmathresult}%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/bar interval shift}}%
+ \xdef\pgfplotbarintervalshift@{\pgfmathresult}%
+ \pgfplotxzerolevelstreamstart
+ }%
+}
+
+\def\pgf@plot@xbarinterval@handler@first#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@barinterval@intervalstart{\the\pgf@y}%
+ \xdef\pgf@plot@barinterval@bar{\the\pgf@x}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@xbarinterval@handler%
+}
+\def\pgf@plot@xbarinterval@handler#1{%
+ \pgfkeysvalueof{/pgf/at begin bar}%
+ \pgf@process{#1}%
+ \pgf@ya=\pgf@plot@barinterval@bar
+ \xdef\pgf@plot@barinterval@bar{\the\pgf@x}%
+ \pgf@xc=\pgf@plot@barinterval@intervalstart\relax
+ \xdef\pgf@plot@barinterval@intervalstart{\the\pgf@y}%
+ \pgf@xb=\pgf@y
+ \advance\pgf@xb by-\pgf@xc
+ \advance\pgf@xc by\pgfplotbarintervalshift@\pgf@xb
+ \pgf@xb=\pgfplotbarintervalwidth@\pgf@xb
+ \advance\pgf@xc by-.5\pgf@xb% center
+ \begingroup
+ \pgfplotxzerolevelstreamnext
+ \endgroup
+ \pgf@yb=\pgf@x
+ \advance\pgf@ya by-\pgf@yb
+ \pgfpathrectangle
+ {\pgfqpoint{\pgf@yb}{\pgf@xc}}%
+ {\pgfqpoint{\pgf@ya}{\pgf@xb}}%
+ \pgfkeysvalueof{/pgf/at end bar}%
+}
+
+
+% This handler is very similar to \pgfplothandlerlineto, but it
+% produces CONSTANT connected pieces of the form
+%
+% x
+% |
+% x--- |
+% | x----
+% x-|
+%
+% Example:
+%
+% \pgfplothandlerconstantlineto
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerconstantlineto{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@const@line@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+\def\pgf@plot@const@line@handler#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@y}%
+ \pgf@plot@first@action{}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@const@line@handler@@%
+}
+\def\pgf@plot@const@line@handler@@#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@yb\pgf@plot@const@line@handler@last\relax
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@ya}%
+}
+
+% A variant of \pgfplothandlerconstantlineto which places its mark on
+% the right line ends.
+%
+% |---x
+% ---x |
+% |--x
+% x
+%
+% Example:
+%
+% \pgfplothandlerconstantlinetomarkright
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerconstantlinetomarkright{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@const@line@mark@right@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+\def\pgf@plot@const@line@mark@right@handler#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@x}%
+ \pgf@plot@first@action{}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@const@line@mark@right@handler@@%
+}
+\def\pgf@plot@const@line@mark@right@handler@@#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@yb\pgf@plot@const@line@handler@last\relax
+ \pgfpathlineto{\pgfqpoint{\pgf@yb}{\pgf@ya}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@xa}%
+}
+
+% A variant of \pgfplothandlerconstantlineto which places its mark on
+% the middle of the line segment.
+%
+% ----x
+% |
+% --x--- |
+% | |--x----
+% x--
+%
+% Example:
+%
+% \pgfplothandlerconstantlinetomarkmid
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerconstantlinetomarkmid{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@const@line@mark@mid@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+\def\pgf@plot@const@line@mark@mid@handler#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@const@line@handler@last{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \pgf@plot@first@action{}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@const@line@mark@mid@handler@@%
+}
+\def\pgf@plot@const@line@mark@mid@handler@@#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@plot@const@line@handler@last
+ \pgf@xc=.5\pgf@xa
+ \advance\pgf@xc by.5\pgf@x
+ \pgfpathlineto{\pgfqpoint{\pgf@xc}{\pgf@y}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xc}{\pgf@ya}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \xdef\pgf@plot@const@line@handler@last{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+}
+
+% This handler is in fact a variant of \pgfplothandlerconstantlineto,
+% but it does not draw vertical lines. It produces a sequence of
+% line-to and move-to operations such that plot marks are placed at
+% each right end:
+%
+% ---x
+% ---x
+% ---x
+% --x
+%
+% Example:
+%
+% \pgfplothandlerjumpmarkright
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerjumpmarkright{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@jumpmarkright@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+\def\pgf@plot@jumpmarkright@handler#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@x}%
+ \pgf@plot@first@action{}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@jumpmarkright@handler@@%
+}
+\def\pgf@plot@jumpmarkright@handler@@#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@yb\pgf@plot@const@line@handler@last\relax
+ \pgfpathmoveto{\pgfqpoint{\pgf@yb}{\pgf@ya}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@xa}%
+}
+
+% This handler is in fact a variant of \pgfplothandlerconstantlineto,
+% but it does not draw vertical lines. It produces a sequence of
+% line-to and move-to operations such that plot marks are placed at
+% each left end:
+%
+% x---
+% x---
+% x---
+% x--
+%
+% Example:
+%
+% \pgfplothandlerjumpmarkleft
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerjumpmarkleft{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@jumpmarkleft@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+\def\pgf@plot@jumpmarkleft@handler#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@y}%
+ \pgf@plot@first@action{}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@jumpmarkleft@handler@@%
+}
+\def\pgf@plot@jumpmarkleft@handler@@#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@yb\pgf@plot@const@line@handler@last\relax
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}%
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \xdef\pgf@plot@const@line@handler@last{\the\pgf@ya}%
+}
+
+% This handler is in fact a variant of
+% \pgfplothandlerconstantlinetomarkmid,
+% but it does not draw vertical lines. It produces a sequence of
+% line-to and move-to operations such that plot marks are placed like
+%
+% ----x
+%
+% --x--
+% --x----
+% x--
+%
+% Example:
+%
+% \pgfplothandlerjumpmarkmid
+% \pgfplotxyfile{mytable}
+\def\pgfplothandlerjumpmarkmid{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@jump@mark@mid@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+\def\pgf@plot@jump@mark@mid@handler#1{%
+ \pgf@process{#1}%
+ \xdef\pgf@plot@const@line@handler@last{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \pgf@plot@first@action{}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@jump@mark@mid@handler@@%
+}
+\def\pgf@plot@jump@mark@mid@handler@@#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@plot@const@line@handler@last
+ \pgf@xc=.5\pgf@xa
+ \advance\pgf@xc by.5\pgf@x
+ \pgfpathlineto{\pgfqpoint{\pgf@xc}{\pgf@y}}%
+ \pgfpathmoveto{\pgfqpoint{\pgf@xc}{\pgf@ya}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \xdef\pgf@plot@const@line@handler@last{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+}
+
+
+% This handler converts each point in a stream into a line from the
+% origin to the point's coordinate, resulting in a ``star''.
+%
+% Example:
+%
+% \pgfplothandlerpolarcomb
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlerpolarcomb{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@polarcomb@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+
+\def\pgf@plot@polarcomb@handler#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgfpathmoveto{\pgfpointorigin}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+}
+
+
+
+
+% This handler draws a given mark at each point.
+%
+% #1 = some code to be executed at each point (with the coordinate
+% system translated to that point).
+% Typically, this code will be \pgfuseplotmark{whatever}.
+%
+% Example:
+%
+% \pgfplothandlermark{\pgfuseplotmark{*}}
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlermark#1{%
+ \pgf@plothandlermark{%
+ \ifnum\pgf@plot@mark@count<\pgf@plot@mark@repeat\relax%
+ \else%
+ \global\pgf@plot@mark@count=0\relax%
+ #1%
+ \fi%
+ }%
+}
+
+\newcount\pgf@plot@mark@count
+\def\pgf@plot@mark@phase{0}
+
+\def\pgf@plothandlermark#1{%
+ \def\pgf@plot@mark{#1}%
+ \def\pgf@plotstreamstart{%
+ \global\pgf@plot@mark@count=\pgf@plot@mark@repeat\relax%
+ \global\advance\pgf@plot@mark@count by-\pgf@plot@mark@phase\relax%
+ \global\let\pgf@plotstreampoint=\pgf@plot@mark@handler%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+
+\def\pgf@plot@mark@handler#1{%
+ \global\advance\pgf@plot@mark@count by1\relax%
+ {\pgftransformshift{#1}\pgf@plot@mark}%
+}
+
+
+% Set the repeat count for marks. For example, if 3 is given as a
+% value, only every third point will get a mark.
+%
+% #1 = repeat count
+%
+% Example:
+%
+% \pgfsetplotmarkrepeat{2}
+
+\def\pgfsetplotmarkrepeat#1{\def\pgf@plot@mark@repeat{#1}}
+\pgfsetplotmarkrepeat{1}
+
+
+% Set the phase for marks. For example, if 3 is the repeat and 3 is
+% the phase, already the first point will be marked.
+%
+% #1 = the index of the first point that should be marked.
+%
+% Example:
+%
+% \pgfsetplotmarkphase{3}
+
+\def\pgfsetplotmarkphase#1{\def\pgf@plot@mark@phase{#1}}
+\pgfsetplotmarkphase{1}
+
+
+
+% This handler draws a given mark at those points whose number is
+% given in the (pgffor-like) list.
+%
+% #1 = some code to be executed at each point (with the coordinate
+% system translated to that point).
+% Typically, this code will be \pgfuseplotmark{whatever}.
+% #2 = list of positions like "1,2,4,...,9,10"
+%
+% Example:
+%
+% \pgfplothandlermarklisted{\pgfuseplotmark{*}}{1,2,4,...,9}
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlermarklisted#1#2{%
+ \let\pgf@plot@mark@list=\pgfutil@empty%
+ \edef\pgf@marshal{\noexpand\foreach\noexpand\pgf@temp in{#2}}
+ \pgf@marshal{\xdef\pgf@plot@mark@list{\pgf@plot@mark@list(\pgf@temp)}}%
+ \pgf@plothandlermark{%
+ \edef\pgf@marshal{\noexpand\pgfutil@in@{(\the\pgf@plot@mark@count)}{\pgf@plot@mark@list}}%
+ \pgf@marshal%
+ \ifpgfutil@in@#1\fi}%
+}
+
+
+% Define a new plot mark for use with \pgfplotmark.
+%
+% #1 = a plot mark mnemonic
+% #2 = code for drawing the mark
+%
+% Example:
+%
+% \pgfdeclareplotmark{*}{\pgfpathcircle{\pgfpointorigin}{2pt}\pgfusepathqfill}
+
+\def\pgfdeclareplotmark#1#2{\expandafter\def\csname pgf@plot@mark@#1\endcsname{#2}}
+
+
+% Set the size of plot marks. For circles, this will be the radius,
+% for other shapes it should be about half the width/height.
+%
+% Example:
+%
+% \pgfsetplotmarksize{1pt}
+
+\def\pgfsetplotmarksize#1{\pgfmathsetlength\pgfplotmarksize{#1}}
+
+\newdimen\pgfplotmarksize
+\pgfplotmarksize=2pt
+
+
+% Insert a plot mark's code at the origin.
+%
+% #1 = plot mark mnemonic
+%
+% Example:
+%
+% \pgfuseplotmark{*}
+
+\def\pgfuseplotmark#1{\csname pgf@plot@mark@#1\endcsname}
+
+
+% A stroke-filled circle mark
+
+\pgfdeclareplotmark{*}
+{%
+ \pgfpathcircle{\pgfpointorigin}{\pgfplotmarksize}
+ \pgfusepathqfillstroke
+}
+
+
+% A plus-sign like mark
+
+\pgfdeclareplotmark{+}
+{%
+ \pgfpathmoveto{\pgfqpoint{-\pgfplotmarksize}{0pt}}
+ \pgfpathlineto{\pgfqpoint{\pgfplotmarksize}{0pt}}
+ \pgfpathmoveto{\pgfqpoint{0pt}{\pgfplotmarksize}}
+ \pgfpathlineto{\pgfqpoint{0pt}{-\pgfplotmarksize}}
+ \pgfusepathqstroke
+}
+
+
+% An x-shaped mark
+
+\pgfdeclareplotmark{x}
+{%
+ \pgfpathmoveto{\pgfqpoint{-.70710678\pgfplotmarksize}{-.70710678\pgfplotmarksize}}
+ \pgfpathlineto{\pgfqpoint{.70710678\pgfplotmarksize}{.70710678\pgfplotmarksize}}
+ \pgfpathmoveto{\pgfqpoint{-.70710678\pgfplotmarksize}{.70710678\pgfplotmarksize}}
+ \pgfpathlineto{\pgfqpoint{.70710678\pgfplotmarksize}{-.70710678\pgfplotmarksize}}
+ \pgfusepathqstroke
+}
+
+% See pgflibraryplotmarks for more plot marks
+
+
+
+
+% This handler turns creates a series of straight line segements
+% between consecutive points, but leaving /pgf/gap around stream point
+% space.
+%
+% Example:
+%
+% \pgfplothandlergaplineto
+% \pgfplotxyfile{mytable}
+
+\pgfkeys{/pgf/gap around stream point/.initial=1.5pt}
+
+\def\pgfplothandlergaplineto{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@gap@lineto@handler@initial%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax%
+ }%
+}
+
+\def\pgf@plot@gap@lineto@handler@initial#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \xdef\pgf@plot@gap@lineto@last{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \global\let\pgf@plotstreampoint=\pgf@plot@gap@lineto@handler%
+}
+
+\def\pgf@plot@gap@lineto@handler#1{%
+ % Ok, compute normalized line vector
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \xdef\pgf@plot@gap@lineto@next{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \pgf@process{\pgfpointnormalised{\pgfpointdiff{\pgf@plot@gap@lineto@last}{\pgf@plot@gap@lineto@next}}}%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgfpathmoveto{\pgfpointadd{\pgfpointscale{\pgfkeysvalueof{/pgf/gap
+ around stream point}}{\pgfqpoint{\pgf@xc}{\pgf@yc}}}{\pgf@plot@gap@lineto@last}}%
+ \pgfpathlineto{\pgfpointadd{\pgfpointscale{\pgfkeysvalueof{/pgf/gap
+ around stream point}}{\pgfqpoint{-\pgf@xc}{-\pgf@yc}}}{\pgf@plot@gap@lineto@next}}%
+ \global\let\pgf@plot@gap@lineto@last=\pgf@plot@gap@lineto@next%
+}
+
+
+
+
+% This handler works like \pgfplothandlergaplineto, only the last
+% point is connected to the first point, creating a closed curve
+% space.
+%
+% Example:
+%
+% \pgfplothandlergapcycle
+% \pgfplotxyfile{mytable}
+
+\def\pgfplothandlergapcycle{%
+ \def\pgf@plotstreamstart{%
+ \global\let\pgf@plotstreampoint=\pgf@plot@gap@cycle@handler@initial%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\pgf@plot@gap@cycle@handler@finish%
+ \global\let\pgf@plot@gap@cycle@first=\relax%
+ }%
+}
+
+\def\pgf@plot@gap@cycle@handler@initial#1{%
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \xdef\pgf@plot@gap@cycle@last{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \global\let\pgf@plot@gap@cycle@first=\pgf@plot@gap@cycle@last%
+ \global\let\pgf@plotstreampoint=\pgf@plot@gap@cycle@handler%
+}
+
+\def\pgf@plot@gap@cycle@handler#1{%
+ % Ok, compute normalized line vector
+ \pgf@process{#1}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \xdef\pgf@plot@gap@cycle@next{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \pgf@process{\pgfpointnormalised{\pgfpointdiff{\pgf@plot@gap@cycle@last}{\pgf@plot@gap@cycle@next}}}%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgfpathmoveto{\pgfpointadd{\pgfpointscale{\pgfkeysvalueof{/pgf/gap
+ around stream point}}{\pgfqpoint{\pgf@xc}{\pgf@yc}}}{\pgf@plot@gap@cycle@last}}%
+ \pgfpathlineto{\pgfpointadd{\pgfpointscale{\pgfkeysvalueof{/pgf/gap
+ around stream point}}{\pgfqpoint{-\pgf@xc}{-\pgf@yc}}}{\pgf@plot@gap@cycle@next}}%
+ \global\let\pgf@plot@gap@cycle@last=\pgf@plot@gap@cycle@next%
+}
+
+\def\pgf@plot@gap@cycle@handler@finish{%
+ \ifx\pgf@plot@gap@cycle@first\relax%
+ \else
+ \pgf@plot@gap@cycle@handler{\pgf@plot@gap@cycle@first}%
+ \fi
+}
+
+
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.code.tex
new file mode 100644
index 0000000000..8a3f3228d4
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.code.tex
@@ -0,0 +1,90 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Sa 7. Dez 20:58:23 CET 2013 %%%
+
+
+
+% Copyright 2009 by Till Tantau and Christian Feuersänger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\input pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex
+\input pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex
+
+% TODO for auto xrefs:
+% 1. check the already identified labels, preferrably using
+% /pdflinks/show labels=true
+% and the image externalization debug mode (see pgfmanual-en-main.tex)
+% (to strip almost all images away)
+%
+% 2. Insert '\declareandlabel' in the document whenever something has been
+% defined in the text, so it should get a pdf anchor (see
+% pgfmanual.pdflinks.code.tex )
+%
+% 2.1 perhaps insert \pgfmanualpdflabel{<label>}{} where needed.
+%
+% 3. Verify that the |...| commands occuring in situations where catcodes can't
+% be changed (footnotes or macro arguments) work as expected.
+%
+% 4. Consider telling the pretty printer that several control sequences
+% have arguments which are options (see below for the predefined list).
+% This may apply to \pgfpageslogicalpageoptions or so.
+%
+% 5. @Christian: consider extensions of the parser such that it identifies path commands (at least partially)
+%
+%
+
+\def\pgfmanual@warning#1{\immediate\write16{! Package pgfmanual Warning: #1}}%
+
+
+\pgfkeys{
+ % set this to 'false' to disable auto reference generation.
+ % However, a little bit runtime overhead will still remain
+ % (and the \pgfmanualpdflabel commands will still be used)
+ /pdflinks/codeexample links=true,
+ %
+ /codeexample/prettyprint/cs arguments/tikzset/.initial=1,
+ /codeexample/prettyprint/cs/tikzset/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualprettyprintpgfkeys{#2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/usetikzlibrary/.initial=1,
+ /codeexample/prettyprint/cs/usetikzlibrary/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualpdfref{#2}{#2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/usepgflibrary/.initial=1,
+ /codeexample/prettyprint/cs/usepgflibrary/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualpdfref{#2}{#2}\pgfmanualclosebrace},
+ %
+ %
+ %
+ % whenever an unqualified key is found, the following key prefix
+ % list is tried to find a match.
+ /pdflinks/search key prefixes in={/tikz/,/pgf/},
+ %
+ % the link prefix written to the pdf file:
+ /pdflinks/internal link prefix=pgf,
+ %
+ /pdflinks/warnings=false,
+ % for debugging:
+ /pdflinks/show labels=false,
+}%
+
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex
new file mode 100644
index 0000000000..a572afc552
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex
@@ -0,0 +1,450 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Sa 7. Dez 20:58:23 CET 2013 %%%
+
+
+
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008/2009 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% This file provides an interface to the
+% pgfmanual.prettyprint.code.tex thing -- it allows to
+% *generate pdf crossrefs inside of codeexamples automatically*
+% without any user input.
+%
+% Thus, you write
+% \begin{codeexample}[]
+% \begin{tikzpicture}[options]
+% \end{tikzpicture}
+% \end{codeexample}
+% and pdf cross references to the definitions of 'tikzpicture'
+% and any options will be generated automatically.
+%
+% Furthermore, pdf cross references will be generated for everything
+% within vertical bars, |....|.
+%
+%
+%
+%
+%
+% The only necessary thing is that \pgfmanualpdflabel has been called
+% for every (fully qualified) key, control sequence, environment or
+% whatever.
+
+\newif\ifpgfmanualpdfwarnings
+\pgfmanualpdfwarningstrue
+
+\newif\ifpgfmanualshowlabels
+
+\pgfkeys{%
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualprettyprintpgfkeys{#2}\pgfmanualclosebrace},
+ %
+ /codeexample/prettyprint/autolinks/.style={%
+ /codeexample/prettyprint/key name/.code={\pgfmanualpdfref{##1}{##1}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\pgfmanualpdfref{##1}{##1}/\pgfmanualpdfref{/handlers/##2}{##2}},
+ /codeexample/prettyprint/key value display only/.code={\pgfmanualprettyprintcode{##1}},
+ /codeexample/prettyprint/cs/.code={\pgfmanualpdfref{##1}{##1}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\pgfmanualpdfref{##1}{##1}\{\pgfmanualprettyprintcode{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\pgfmanualpdfref{##1}{##1}\{\pgfmanualprettyprintpgfkeys{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={##1\{\pgfmanualpdfref{##2}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={##1\{\pgfmanualpdfref{##2}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\begingroup\pgfkeyssetvalue{/pdflinks/search key prefixes in}{}\pgfmanualpdfref{##1}{##1}\endgroup},
+ /codeexample/prettyprint/point/.code={##1},%
+ /codeexample/prettyprint/point with cs/.code 2 args={(\pgfmanualpdfref{##1}{##1}:##2},%
+ },%
+ /codeexample/prettyprint/autolinks,
+}%
+
+\pgfkeys{
+ %
+ % Enables or disables the parsing of codeexamples.
+ /pdflinks/codeexample links/.is if=pgfmanualprettyenabled,
+ /pdflinks/codeexample links/.default=true,
+ %
+ % whenever an unqualified key is found, the following key prefix
+ % list is tried to find a match.
+ /pdflinks/search key prefixes in/.initial={/tikz/,/pgf/},
+ %
+ % Enables or disables warnings for failed auto links:
+ /pdflinks/warnings/.is if=pgfmanualpdfwarnings,
+ /pdflinks/warnings/.default=true,
+ %
+ % Shows the autogenerated labels. This is useful to check if the
+ % 'search key prefixes in' worked as it ought to.
+ /pdflinks/show labels/.is if=pgfmanualshowlabels,
+ /pdflinks/show labels/.default=true,
+ /pdflinks/show labels=false,
+ % will be invoked with '#1' set to the generated label.
+ /pdflinks/show labels code/.code={
+ \hbox to 0pt{%
+ \vbox to 0pt{\hsize=0pt
+ \vskip-\baselineskip
+ \hbox to \hsize{%
+ \hss
+ {\footnotesize\ttfamily\textcolor{red}{#1}}%
+ \hss
+ }%
+ \vss
+ }%
+ \vbox to 0pt{\hsize=0pt
+ \vss
+ \hbox to \hsize{%
+ \hss
+ {\footnotesize\ttfamily\textcolor{red}{$\vert$}}%
+ \hss
+ }%
+ }%
+ \vsize=0pt
+ }%
+ },
+ %
+ % the link prefix written to the pdf file:
+ /pdflinks/internal link prefix/.initial=pgf,
+}
+
+\begingroup
+ \catcode`\_=12
+ \gdef\pgfmanualpdf@underscore{_}%
+ \catcode`\ =13\relax\gdef\pgfmanualpdf@install@active@space{\def {\space}}%
+\endgroup
+
+\gdef\pgfmanualpdf@installreplacements{%
+ \def\marg##1{{##1}}%
+ \def\oarg##1{[##1]}%
+ \def\meta##1{<##1>}%
+ \def\x{x}%
+ \def\textbackslash{<CS>}%
+ \def\\{\textbackslash}%
+ \def\space{:}%
+ \edef\ {\space}%
+ \edef\SPACE{\` \relax}%
+ \ifnum\the\catcode`\ =13 %
+ \pgfmanualpdf@install@active@space
+ \fi
+ \edef\#{}%
+ \def\printanat{@}%
+ \def\protect{}%
+ \def\textasciicircum{o}%
+ \def\_{\pgfmanualpdf@underscore}%
+ \expandafter\edef\pgfmanual@verb@activebar{\pgfmanual@verb@bar}%
+}%
+
+% Defines a new pdf cross ref label for use with \pgfmanualpdfref.
+%
+% Usage:
+% \pgfmanualpdflabel{<label>}{<text>}
+% #1: the label.
+% The text #2 will be shown in the resulting pdf (if it is not empty).
+%
+% There is also support for catcode changes if <label> contains
+% something which shouldn't be written as-is into .aux files:
+% \pgfmanualpdflabel[\catcode`\|=12 ]{|-}{}
+% -> this will write
+% \begingroup \catcode `\|=12
+% <code to deal with the label |- >
+% \endgroup
+% into the .aux file.
+%
+\def\pgfmanualpdflabel{\pgfutil@ifnextchar[{\pgfmanualpdflabel@opt}{\pgfmanualpdflabel@opt[]}}%
+\def\pgfmanualpdflabel@opt[#1]#2#3{%
+ \begingroup
+ %
+ \def\pgfmanualpdf@catcode{#1}%
+ \pgfmanualpdf@catcode
+ %
+ \pgfmanualpdflabel@generate{#2}{#3}%
+ %
+ % this is pgfplots-specific: pgfplots supports generic styles which
+ % contain '\x' where '\x' iterates through 'x,y,z'.
+ \pgfutil@in@\x{#2}%
+ \ifpgfutil@in@
+ \def\x{y}%
+ \pgfmanualpdflabel@generate{#2}{#3}%
+ \def\x{z}%
+ \pgfmanualpdflabel@generate{#2}{#3}%
+ \fi
+ \endgroup
+}%
+\def\pgfmanualpdflabel@generate#1#2{%
+ \pgfmanual@handlespeciallabeltokens@in{#1}%
+ %
+ \def\pgfmanualpdflabel@generateone{0}%
+ \pgfutil@ifundefined{pgfd@lbl@\pgfmanualpdflabel@@}{%
+ % ok, no such label is known.
+ \def\pgfmanualpdflabel@generateone{1}%
+ }{%
+ \if\csname pgfd@lbl@\pgfmanualpdflabel@@\endcsname a% "a"ux
+ % ah, it is "just" known from a previous run, but there is
+ % no code in the pdf! Write it!
+ \def\pgfmanualpdflabel@generateone{1}%
+ \else
+ % ok, we already wrote one before. Skip.
+ \fi
+ }%
+ \if\pgfmanualpdflabel@generateone1%
+ \ifpgfmanualshowlabels
+ \pgfkeysvalueof{/pdflinks/show labels code/.@cmd}{\pgfmanualpdflabel@@}\pgfeov
+ \fi
+ %
+ \if@filesw
+ \ifx\pgfmanualpdf@catcode\pgfutil@empty
+ \else
+ \toks0=\expandafter{\pgfmanualpdf@catcode}%
+ \immediate\write\@auxout{%
+ \noexpand\begingroup
+ \the\toks0
+ }%
+ \fi
+ \immediate\write\@auxout{%
+ \noexpand\expandafter\noexpand\gdef
+ \noexpand\csname pgfd@lbl@\pgfmanualpdflabel@@\noexpand\endcsname{a}% a = known in "a"ux file
+ }%
+ \ifx\pgfmanualpdf@catcode\pgfutil@empty
+ \else
+ \immediate\write\@auxout{\noexpand\endgroup}%
+ \fi
+ \fi
+ \expandafter\gdef\csname pgfd@lbl@\pgfmanualpdflabel@@\endcsname{w}% 1. remember the label AND remember that we "w"rote it into the pdf.
+ \edef\pgfmanualpdflabel@@{\pgfkeysvalueof{/pdflinks/internal link prefix}.\pgfmanualpdflabel@@}%
+ \expandafter\hypertarget\expandafter{\pgfmanualpdflabel@@}{#2}%
+ \else
+ #2%
+ \fi
+}%
+
+% A pdf reference to label `#1' with (TeX) text `#2'.
+% @see also \verbpdfref.
+\def\pgfmanualpdfref#1#2{%
+ \begingroup
+ \pgfmanual@handlespeciallabeltokens@in{#1}%
+ %
+ \ifcsname pgfd@lbl@\pgfmanualpdflabel@@\endcsname
+ \else
+ \global\let\pgfmanual@glob=\pgfmanualpdflabel@@
+ \def\pgfmanual@tempa{\foreach \prefix in }%
+ \pgfkeysgetvalue{/pdflinks/search key prefixes in}\pgfmanual@tempb
+ \expandafter\pgfmanual@tempa\expandafter{\pgfmanual@tempb}{%
+ \edef\pgfmanualpdflabel@@{\prefix\pgfmanualpdflabel@@}%
+ \expandafter\pgfmanual@handlespeciallabeltokens@in\expandafter{\pgfmanualpdflabel@@}%
+ \ifcsname pgfd@lbl@\pgfmanualpdflabel@@\endcsname
+ \xdef\pgfmanual@glob{\pgfmanualpdflabel@@}%
+ \breakforeach
+ \fi
+ }%
+ \let\pgfmanualpdflabel@@=\pgfmanual@glob
+ \ifcsname pgfd@lbl@\pgfmanualpdflabel@@\endcsname
+ \else
+ \ifpgfmanualpdfwarnings
+ \begingroup
+ \toks0={#1}%
+ \pgfmanual@warning{pgfmanualpdfref{\the\toks0 }: target label does not exist.}%
+ \endgroup
+ \fi
+ #2%
+ \let\pgfmanualpdflabel@@=\pgfutil@empty
+ \fi
+ \fi
+ \ifx\pgfmanualpdflabel@@\pgfutil@empty
+ \else
+ \expandafter\pgfmanualpdfref@\expandafter{\pgfmanualpdflabel@@}{#2}%
+ \fi
+ \endgroup
+}%
+\def\pgfmanualpdfref@#1#2{%
+ \pgfkeysgetvalue{/pdflinks/internal link prefix}\pgfmanual@temp
+ \expandafter\hyperlink\expandafter{\pgfmanual@temp.#1}{#2}%
+ \ifpgfmanualshowlabels
+ \pgfkeysvalueof{/pdflinks/show labels code/.@cmd}{#1}\pgfeov
+ \fi
+}%
+
+% Handles special tokens in a pdf label which should be treated with
+% care.
+%
+% For example, backslashes might produce problems.
+% This occurs quite frequently with automatically generated hyperrefs
+% inside of codeexamples where \pgfmanualpdfref will be invoked -
+% there, we get the catcode 12 backslashes.
+% Check for them!
+%
+% #1: a token list which shall be used either as cross ref or as
+% label.
+%
+% On output, the macro \pgfmanualpdflabel@@ will be '\edef'ed to the
+% new, possibly modified value.
+\def\pgfmanual@handlespeciallabeltokens@in#1{%
+ \begingroup
+ \pgfmanualpdf@installreplacements
+ \expandafter\pgfutil@in@\pgfmanual@pretty@backslash{#1}%
+ \ifpgfutil@in@
+ % assume the backslash is the first char and substitute it:
+ \pgfmanualpdfref@substitute@backslash#1\relax
+ \else
+ \edef\pgfmanualpdflabel@@{#1}%
+ \fi
+ \def\pgfmanual@tmp{\pgfutilstrreplace{ }{\space}}%
+ \expandafter\pgfmanual@tmp\expandafter{\pgfmanualpdflabel@@}%
+ \edef\pgfmanualpdflabel@@{\pgfretval}%
+ \pgfmath@smuggleone\pgfmanualpdflabel@@
+ \endgroup
+}%
+
+\expandafter\def\expandafter\pgfmanualpdfref@substitute@backslash\expandafter#\expandafter1\pgfmanual@pretty@backslash#2\relax{%
+ \edef\pgfmanualpdflabel@@{#1\textbackslash #2}%
+}%
+
+% Typesets '#1' in red,\texttt like every declaration. It will also
+% generate a pdf cross ref anchor for #1.
+%
+% WARNING: this changes catcodes! In case this is not acceptable in
+% your context, you will need to generate a \pgfmanualpdflabel
+% manually.
+%
+% \declareandlabel{\controlsequence} can be used as |\controlsequence|
+\def\declareandlabel{%
+ \begingroup
+ \pgfmanual@verb@preparecatcodes@
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{%
+ \pgfmanualpdflabel##1{\texttt{\declare##1}}% mark: '##1' contains already braces.
+ \endgroup
+ }%
+ \pgfmanualprettyprintercollectargcount1{\relax}%
+}
+
+%
+% \verbpdfref{\controlsequence more stuff}
+% is the same as writing |\controlsequence more stuff|, but the
+% *complete* argument is supposed to be one label.
+%
+% The difference to \pgfmanualpdfref{...}{} is that the argument is
+% supposed to be verbatim text.
+\def\verbpdfref{%
+ \begingroup
+ \pgfmanual@verb@preparecatcodes@
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{%
+ \pgfmanualpdfref##1{\texttt{##1}}% mark: '##1' contains already braces.
+ \endgroup
+ }%
+ \pgfmanualprettyprintercollectargcount1{\relax}%
+}
+
+% Prepare active vertical bars, |....| for auto-pretty cross
+% referencing.
+%
+% Example:
+% |\pgfkeys| -> will generate a hyperref!
+{
+ \catcode`\|=12
+ \gdef\pgfmanual@verb@bar{|}%
+% \gdef\pgfmanual@verb@collect#1|{%
+% % this command will also handle control sequences.
+% \texttt{\pgfmanualprettyprintpgfkeys{#1}}%
+% \endgroup
+% }%
+ \catcode`\|=13
+ \gdef\pgfmanual@verb@activebar{|}%
+}
+\def\pgfmanual@verb{%
+ \begingroup
+ \pgfmanual@verb@preparecatcodes@
+ \toksdef\t@pgfmanual@verb=0
+ \t@pgfmanual@verb={}%
+ \pgfmanual@verb@collect
+}
+% this version of \pgfmanual@verb@collect is less efficient than the
+% one uncommented above. BUT: it can auto-detect the case when
+% |...| has been provided somewhere where I can't change catcodes!
+% The other one would simply fail to compile.
+\def\pgfmanual@verb@collect#1{%
+ \def\pgfmanual@temp{#1}%
+ \ifx\pgfmanual@temp\pgfmanual@verb@bar
+ % ok, finish:
+ \edef\pgfmanual@verb@collect@next{%
+ % this command will also handle control sequences.
+ \noexpand\endgroup
+ \noexpand\texttt{\noexpand\pgfmanualprettyprintpgfkeys{\the\t@pgfmanual@verb}}%
+ }%
+ \else
+ \ifx\pgfmanual@temp\pgfmanual@verb@activebar
+ % ohoh... that should not happen! It means someone invoked
+ % |...| within an argument; I couln't change catcodes.
+ % Ok, resort to a simple fallback solution.
+ % FIXME : I have just realized that THIS DOESN'T PRESERVE SPACES
+ \edef\pgfmanual@verb@collect@next{%
+ \noexpand\endgroup
+ \noexpand\texttt{\the\t@pgfmanual@verb}%
+ }%
+ \else
+ \t@pgfmanual@verb=\expandafter{\the\t@pgfmanual@verb #1}%
+ \let\pgfmanual@verb@collect@next=\pgfmanual@verb@collect
+ \fi
+ \fi
+ \pgfmanual@verb@collect@next
+}%
+
+\AtBeginDocument{%
+ \ifpgfmanualprettyenabled
+ \catcode`\|=13
+ \expandafter\let\pgfmanual@verb@activebar=\pgfmanual@verb
+ \fi
+}%
+
+\def\pgfmanual@verb@preparecatcodes@{%
+ \let\do\@makeother%
+ \dospecials%
+ \catcode`\%=12 % THATS IMPORTANT! Do *not* handle comments!
+ % these catcodes are expected by the pretty printer...
+ %\catcode`\^^M=13
+ \catcode`\ =13
+ \catcode`\^^I=13
+ \expandafter\def\pgfmanual@pretty@activespace{\space}%
+ \expandafter\def\pgfmanual@pretty@activetab{\space\space\space\space}%
+}%
+\endinput
+% vi: ts=4 sw=4
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex
new file mode 100644
index 0000000000..07bfe1e424
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex
@@ -0,0 +1,1119 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Sa 7. Dez 20:58:23 CET 2013 %%%
+
+
+
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008/2009 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% this is some kind of "plug-in" for pgfmanual-en-macros.tex which
+% provides pretty printing of the code lines in 'codeexample'.
+%
+% It requires to be invoked with \pgfmanualprettyprintcode{#1} at the
+% right place.
+%
+% ATTENTION:
+% this is NOT a sophisticated syntax highlighter like lstlistings!
+% It has rather strict assumptions about how to use it (the input must
+% have been read verbatim, for example).
+
+% Special code for syntax highlighting:
+%
+%
+% USER INTERFACE
+\pgfkeys{%
+ % this is the public hook into
+ % \begin{codeexample}...\end{codeexample} which triggers pretty
+ % printing:
+ /codeexample/typeset listing/.code= {\pgfmanualprettyprintcode{#1}},
+ %
+ % this key will be invoked whenever a key in key-value context has been identified.
+ %
+ % It won't be invoked for handled keys like |my style/.style=....|, see below.
+ %
+ % #1 will be the keys name.
+ /codeexample/prettyprint/key name/.code={#1},
+ %
+ % A variant which will be used instead of |key name| if the key
+ % has a key handler. For example, when the pretty printer finds
+ % |my style/.style|, it will call
+ % |key name with handler={my style}{.style}.
+ /codeexample/prettyprint/key name with handler/.code 2 args={#1/#2},
+ %
+ % Will be invoked whenever the value of a key has been found.
+ % It will be invoked AFTER 'key name' and not at all if there was
+ % no value.
+ %
+ % #1: the key's name
+ % #2: the key's value.
+ %
+ % The default implementation checks if there is a special handler
+ % for the key name '#1', in
+ % /codeexample/prettyprint/key value/#1.
+ % For example:
+ % /codeexample/prettyprint/key value/my key/.code 2 args={name=#1, value =#2}
+ % If such a key exists, it will be invoked with {#1}{#2} as
+ % arguments. Otherwise, the generic method
+ % /codeexample/prettyprint/key value with style detection={#1}{#2}
+ % will be invoked.
+ /codeexample/prettyprint/key value/.code 2 args={%
+ \pgfkeysifdefined{/codeexample/prettyprint/key value/#1}{%
+ \pgfkeysalso{/codeexample/prettyprint/key value/#1={#1}{#2}}%
+ }{%
+ \pgfkeysalso{/codeexample/prettyprint/key value with style detection={#1}{#2}}%
+ }%
+ },
+ % A helper macro for the default 'key value' implementation.
+ /codeexample/prettyprint/key value with style detection/.code 2 args={%
+ \pgfutil@in@{style}{#1}%
+ \ifpgfutil@in@
+ \pgfmanualprettyprintpgfkeys{#2}%
+ \else
+ \pgfkeysalso{/codeexample/prettyprint/key value display only={#2}}%
+ \fi
+ },%
+ %
+ % Will be invoked by the default 'key value' implementation to
+ % typeset the value as such.
+ /codeexample/prettyprint/key value display only/.code={#1},
+ %
+ % Used to typeset a single word. A word is something which has not
+ % been identified in any other context; a maximal sequence of
+ % non-white-space tokens.
+ /codeexample/prettyprint/word/.code={#1},
+ %
+ % A two-argument code key which invokes '#1' if spaces shall
+ % delimit words and '#2' if not.
+ % This may be useless. Handle with care!
+ /codeexample/prettyprint/if space is word delim/.code 2 args={%
+ #1%
+ },%
+ %
+ % A three-argument code key which should invoke '#2' if the single
+ % token '#1' is a word delimiter and '#3' if that is not the case.
+ % Note that '#1' doesn't have the usual catcodes (see the
+ % \pgfmanual@pretty@** macros)!
+ % Furthermore, white spaces are treated separately.
+ /codeexample/prettyprint/if is word delim/.code args={#1#2#3}{%
+ \edef\pgfmanual@check{,;().;\pgfmanual@pretty@lbrace\pgfmanual@pretty@rbrace}%
+ \def\pgfmanual@check@{\pgfutil@in@{#1}}%
+ \expandafter\pgfmanual@check@\expandafter{\pgfmanual@check}%
+ \ifpgfutil@in@ #2\else #3\fi
+ },%
+ %
+ % Used to typeset a single control sequence.
+ % #1 is the control sequence's name as a sequence of catcode 12
+ % tokens.
+ /codeexample/prettyprint/cs/.code={#1},
+ %
+ % Used to typeset a single control sequence together with one or
+ % more arguments.
+ %
+ % #1 is the control sequence's name (including the backslash as
+ % literal string) and
+ % #2,#3,...,#9 are the arguments. The number of arguments depends
+ % on the 'cs arguments/<CS NAME>' key; it contains the integer
+ % number.
+ %
+ % For example, if
+ % |cs arguments/pgfkeys/.initial=1|,
+ % the pretty printer invokes
+ % |cs with args={\pgfkeys}{<argument>}.
+ %
+ % If
+ % |cs arguments/mycommand/.initial=2|,
+ % the pretty printer invokes
+ % |cs with args={\pgfkeys}{<argument1>}{<argument2>}.
+ % In this case, 'cs with args' needs to be defined in a way which
+ % allows to deal with 3 arguments.
+ %
+ % Please note that the value do not contain braces! The braces
+ % need to be inserted manually.
+ %
+ % Special cases:
+ % 1. If end-of-input is encountered BEFORE the expected number of
+ % arguments has been found, the following happens:
+ % - if not even one (partial) argument has been found, the
+ % /codeexample/prettyprint/cs/.@cmd key will be used instead.
+ % - the \ifpgfmanualprettyprinterarghasunmatchedbraces boolean
+ % indicates if the trailing brace is missing.
+ /codeexample/prettyprint/cs with args/.code 2 args={#1\{#2\pgfmanualclosebrace},
+ %
+ % For every identified control sequence, the key
+ % /codeexample/prettyprint/cs arguments/<CSNAME>
+ % will be checked. If it exists, it contains an integer with the
+ % number of arguments it takes.
+ % The <CSNAME> must not contain the '\'.
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ %
+ % For every identified control sequence, the key
+ % /codeexample/prettyprint/cs/<CSNAME>/.@cmd
+ % will be checked. If it exists, it will be used instead of
+ % 'cs with args' (with the same special case restrictions for
+ % early end-of-input).
+ %
+ % The <CSNAME> must not contain the '\'.
+ %
+ % This allows special treatment for special
+ % commands like \pgfkeys:
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={#1\{\pgfmanualprettyprintpgfkeys{#2}\pgfmanualclosebrace},
+ %
+ % recognise environments:
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={#1\{#2\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={#1\{#2\pgfmanualclosebrace},
+ %
+ % a point coordinate (#1)
+ % Note that '#1' will contain the braces (if there was one),
+ /codeexample/prettyprint/point/.code={#1},%
+ %
+ % a point coordinate with explicit coordinate system: (#1:#2)
+ % Note that '#2' will contain the terminating brace (if there was one)
+ % #1: the coordinate system name (*without* the leading brace).
+ % The leading brace must be re-inserted by this style.
+ /codeexample/prettyprint/point with cs/.code 2 args={(#1:#2},%
+ % the same with specialised code:
+ %/codeexample/prettyprint/point with cs/<CS NAME>/.code 2 args={(#1:#2},%
+ %
+ %
+ % A predefined style which colors every identified token. It's
+ % purpose is only debugging.
+ /codeexample/prettyprint/colored/.style={%
+ /codeexample/prettyprint/key name/.code={\textcolor{red!75!black}{##1}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\textcolor{red!75!black}{##1}/\textcolor{red!90!black}{##2}},
+ /codeexample/prettyprint/key value display only/.code={\textcolor{yellow}{##1}},
+ /codeexample/prettyprint/cs/.code={\textcolor{green}{##1}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\textcolor{green}{##1}\{\pgfmanualprettyprintpgfkeys{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\textcolor{brown}{##1}},
+ /codeexample/prettyprint/point/.code={\textcolor{red}{##1}},%
+ /codeexample/prettyprint/point with cs/.code 2 args={(\textcolor{green}{##1}:\textcolor{red}{##2}},%
+ },%
+ % A further debuggin helper.
+ /codeexample/prettyprint/colored and verbose/.style={%
+ /codeexample/prettyprint/colored,
+ /codeexample/prettyprint/key name/.code={\message{[key name=##1]}\textcolor{red!75!black}{##1}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\message{[key name with handler=##1/##2]}\textcolor{red!75!black}{##1}/\textcolor{red!90!black}{##2}},
+ /codeexample/prettyprint/key value display only/.code={\def\temp{##1}\message{[key value=\meaning\temp]}\textcolor{yellow}{##1}},
+ /codeexample/prettyprint/cs/.code={\message{[cs=##1]}\textcolor{green}{##1}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\def\temp{##2}\message{[cs with args={##1}{\meaning\temp}]}\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\message{[word=##1]}\textcolor{brown}{##1}},
+ /codeexample/prettyprint/point/.code={\message{[point=##1]}\textcolor{red}{##1}},%
+ /codeexample/prettyprint/point with cs/.code 2 args={\message{[point with cs={##1}{##2}]}(\textcolor{green}{##1}:\textcolor{red}{##2}},%
+ },%
+ %/codeexample/prettyprint/colored,
+ %/codeexample/prettyprint/colored and verbose,
+}%
+
+\newif\ifpgfmanualprettyenabled
+\pgfmanualprettyenabledtrue
+
+% User interface command to handle unmatched braces:
+%
+% It expands to '\}' unless the preceding argument had unmatched braces.
+\def\pgfmanualclosebrace{%
+ \ifpgfmanualprettyprinterarghasunmatchedbraces
+ \else
+ \}%
+ \fi
+}%
+
+
+% Typesets '#1', possibly using some sort of pretty printer.
+%
+% The argument '#1' is expected to be a long token list in which
+% 1. all characters have catcode 11 or 12 (normal letters),
+% 2. white spaces, tabs and newlines have catcode 13 (are active).
+%
+% @see \pgfmanualprettyprintpgfkeys
+\long\def\pgfmanualprettyprintcode#1{%
+%\def\temp{#1}\message{STARTING PRETTY PRINTING for \meaning\temp}%
+ \ifpgfmanualprettyenabled
+ \begingroup
+ \pgfmanualprettyprintstyles
+ \pgfmanual@pretty@mainloop#1\pgfmanual@EOI
+ \endgroup
+ \else
+ #1%
+ \fi
+}%
+% DISABLE:
+%\long\def\pgfmanualprettyprintcode#1{#1}%
+
+\def\pgfmanualprettyprintstyles{%
+%\tracingmacros=2 \tracingcommands=2 \message{PRETTYPRINT INIT}%
+ \def\{{\pgfmanual@pretty@lbrace}%
+ \def\}{\pgfmanual@pretty@rbrace}%
+ \pgfmanual@pretty@installcommenthandler
+ \let\pgfmanualprettyprintstyles=\relax
+}%
+
+
+\newif\ifpgfmanualprettycommentactive
+
+% we can't use the \@typeset@till@return method for comments because
+% the pretty printer needs full control over the token list.
+%
+% We try a replacement here.
+%
+% FIXME
+% THIS INTRODUCES A NEW GROUP! Does that hurt the pretty printer??
+%
+\def\pgfmanual@pretty@installcommenthandler{%
+ \expandafter\def\pgfmanual@pretty@activepercent{%
+ \begingroup
+ \pgfmanualprettycommentactivetrue
+ \expandafter\let\pgfmanual@pretty@activenl=\pgfmanual@pretty@recoveraftercomment
+ \expandafter\def\pgfmanual@pretty@activepercent{\%}%
+ %\tt
+ \% %
+ }%
+}%
+\def\pgfmanual@pretty@recoveraftercomment{%
+ \endgroup
+ \pgfmanual@pretty@activenl
+}%
+
+\def\pgfmanual@EOI{\pgfmanual@EOI}%
+
+{
+ \catcode`\[=0
+ \catcode`\\=12
+ [gdef[pgfmanual@pretty@backslash{\}%
+}
+\begingroup
+ \catcode`\:=12
+ \catcode`\(=12
+ \catcode`\)=12
+ \gdef\pgfmanual@pretty@colon{:}%
+ \gdef\pgfmanual@pretty@lroundbrace{(}%
+ \gdef\pgfmanual@pretty@rroundbrace{)}%
+ \catcode`\[=1
+ \catcode`\]=2
+ \catcode`\{=12
+ \catcode`\}=12
+ \gdef\pgfmanual@pretty@lbrace[{]%
+ \gdef\pgfmanual@pretty@rbrace[}]%
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\[=12
+ \catcode`\]=12
+ \catcode`\,=12
+ \catcode`\ =10\relax\gdef\pgfmanual@pretty@space{ }%
+ \gdef\pgfmanual@pretty@lbracket{[}%
+ \gdef\pgfmanual@pretty@rbracket{]}%
+ \gdef\pgfmanual@pretty@comma{,}%
+ \catcode`\==12
+ \gdef\pgfmanual@pretty@eq{=}%
+\endgroup
+\begingroup
+ \catcode`\%=12
+ \gdef\pgfmanual@pretty@percent{%}
+ \catcode`\%=13
+ \gdef\pgfmanual@pretty@activepercent{%}
+ \catcode`\^^M=13
+ \gdef\pgfmanual@pretty@activenl{^^M}\endgroup
+\begingroup
+\catcode`\^^I=13\relax\gdef\pgfmanual@pretty@activetab{^^I}%
+\catcode`\ =13\relax\gdef\pgfmanual@pretty@activespace{ }\endgroup
+
+% loops through all tokens.
+% #1 is a single token.
+\def\pgfmanual@pretty@mainloop{%
+ \def\pgfmanual@pretty@mainloop@currentword{}%
+ \pgfmanual@pretty@mainloop@
+}%
+\long\def\pgfmanual@pretty@mainloop@#1{%
+ \def\pgfmanual@loc@TMPa{#1}%
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@mainloop@
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@EOI
+ % stop iteration.
+ \pgfmanual@pretty@mainloop@finishword
+ \let\pgfmanual@pretty@mainloop@NEXT=\relax
+ \else
+ \ifpgfmanualprettycommentactive
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@lbracket%
+ % we found the start of OPTIONS '[ ... ]'.
+ \pgfmanual@pretty@mainloop@finishword
+ % Attempt syntax highlighting for pgfkeys:
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@pgfkeys
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@backslash
+ % we found the start of a control sequence '\command'
+ \pgfmanual@pretty@mainloop@finishword
+ %
+ % collect the control sequence name into
+ % \pgfmanual@loc@TMPa, but without the backslash:
+ \let\pgfmanual@loc@TMPa=\pgfutil@empty
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@collectcs@loop
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@lroundbrace%
+ \pgfmanual@pretty@mainloop@finishword
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@collectpoint
+ \else
+ \def\pgfmanual@isspace{0}%
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL) or comment
+ \def\pgfmanual@isspace{1}%
+ \else
+ \ifnum10=\catcode`#1
+ \def\pgfmanual@isspace{1}%
+ \fi
+ \fi
+ \if\pgfmanual@isspace1%
+ \pgfkeysvalueof{/codeexample/prettyprint/if space is word delim/.@cmd}{%
+ \pgfmanual@pretty@mainloop@finishword
+ #1% ok, show it.
+ }{%
+ % collect the word.
+ \expandafter\def\expandafter\pgfmanual@pretty@mainloop@currentword\expandafter{\pgfmanual@pretty@mainloop@currentword #1}%
+ }%
+ \else
+ \pgfkeysvalueof{/codeexample/prettyprint/if is word delim/.@cmd}{#1}{%
+ \pgfmanual@pretty@mainloop@finishword
+ #1% ok, show the delimiter.
+ }{%
+ % collect the word.
+ \expandafter\def\expandafter\pgfmanual@pretty@mainloop@currentword\expandafter{\pgfmanual@pretty@mainloop@currentword #1}%
+ }\pgfeov%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@mainloop@NEXT
+}%
+
+\def\pgfmanual@pretty@mainloop@finishword{%
+ \ifx\pgfmanual@pretty@mainloop@currentword\pgfutil@empty
+ \else
+ \def\pgfmanual@loc@TMPa{\pgfkeysvalueof{/codeexample/prettyprint/word/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPa\pgfmanual@pretty@mainloop@currentword\pgfeov
+ \let\pgfmanual@pretty@mainloop@currentword=\pgfutil@empty
+ \fi
+}%
+
+\def\pgfmanual@pretty@collectpoint{%
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@collectargs@finish@collectpoint
+ \expandafter\pgfmanualprettyprintercollectupto\pgfmanual@pretty@rroundbrace
+ {\afterpgfmanual@pretty@collectpoint}%
+}
+
+{
+\catcode`\:=12
+\gdef\pgfmanual@pretty@collectargs@finish@collectpoint#1{%
+ \expandafter\pgfutil@in@\pgfmanual@pretty@colon{#1}%
+ \ifpgfutil@in@
+ \def\pgfmanual@pretty@collectpoint@getcoordsystem##1:##2\relax{%
+ \begingroup
+ \pgfmanual@pretty@restorespaces
+ % remove active spaces from ##1:
+ \xdef\pgfmanual@pretty@glob@TMPa{##1}%
+ \endgroup
+ \pgfkeysifdefined{/codeexample/prettyprint/point with cs/\pgfmanual@pretty@glob@TMPa/.@cmd}{%
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/point with cs/\pgfmanual@pretty@glob@TMPa/.@cmd}}%
+ }{%
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/point with cs/.@cmd}}%
+ }%
+ \expandafter\def\expandafter\pgfmanual@loc@TMPa\expandafter{\expandafter{\pgfmanual@pretty@glob@TMPa}{##2}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa\pgfeov
+ }%
+ \ifpgfmanualprettyprinterfoundterminator
+ \pgfmanual@pretty@collectpoint@getcoordsystem#1)\relax
+ \else
+ \pgfmanual@pretty@collectpoint@getcoordsystem#1\relax
+ \fi
+ \else
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/point/.@cmd}}%
+ \ifpgfmanualprettyprinterfoundterminator
+ \pgfmanual@loc@TMPb(#1)\pgfeov
+ \else
+ \pgfmanual@loc@TMPb(#1\pgfeov
+ \fi
+ \fi
+}%
+}
+\def\afterpgfmanual@pretty@collectpoint{\pgfmanual@pretty@mainloop}%
+
+% loops through all tokens, assembling the cs name as it goes.
+% #1 is a single token.
+\def\pgfmanual@pretty@collectcs@loop#1{%
+ \let\pgfmanual@pretty@collectcs@loop@NEXT=\pgfmanual@pretty@collectcs@loop
+ \def\pgfmanual@loc@TMPb{#1}%
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@EOI
+ \def\pgfmanual@pretty@collectcs@loop@NEXT{\pgfmanual@pretty@collectcs@loop@END #1}%
+ \else
+ % a csname may only use letters. And: only letters have a
+ % positive lcccode!
+ \ifnum\lccode`#1=0
+ \ifx\pgfmanual@loc@TMPb @%
+ % ok, we may also accept an `@':
+ \edef\pgfmanual@loc@TMPa{\pgfmanual@loc@TMPa #1}%
+ \else
+ % This here is the first non-letter.
+ \def\pgfmanual@pretty@collectcs@loop@NEXT{\pgfmanual@pretty@collectcs@loop@END #1}%
+ \fi
+ \else
+ % continue iterating and assemble the csname...
+ \edef\pgfmanual@loc@TMPa{\pgfmanual@loc@TMPa #1}%
+ \fi
+ \fi
+ \pgfmanual@pretty@collectcs@loop@NEXT
+}%
+\def\afterpgfmanual@pretty@cs{\pgfmanual@pretty@mainloop}%
+
+\def\pgfmanual@pretty@collectcs@loop@END{%
+ \pgfkeysifdefined{/codeexample/prettyprint/cs arguments/\pgfmanual@loc@TMPa}{%
+ % oh. The collected control sequence expects arguments. That
+ % means a lot of work since there are no nestable braces in
+ % the token list! All of them have catcode 12... we need to do
+ % that manually.
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@collectargs@finish@cs
+ \def\pgfmanual@pretty@collectcs@loop@END@next{%
+ \pgfmanualprettyprintercollectargcount
+ {\pgfkeysvalueof{/codeexample/prettyprint/cs arguments/\pgfmanual@loc@TMPa}}%
+ {\afterpgfmanual@pretty@cs}%
+ }%
+ }{%
+ % re-insert the backslash:
+ \edef\pgfmanual@loc@TMPa{\pgfmanual@pretty@backslash \pgfmanual@loc@TMPa}%
+ % ok, report the macro and continue with the main loop.
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/cs/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa\pgfeov
+ \let\pgfmanual@pretty@collectcs@loop@END@next=\afterpgfmanual@pretty@cs
+ }%
+ \pgfmanual@pretty@collectcs@loop@END@next
+}%
+
+\newif\ifpgfmanualprettyprinterarghasunmatchedbraces
+
+% Collects arguments inside of a token list, dealing with nested
+% catcode-12-braces.
+%
+% #1: is the NUMBER of arguments to collect.
+% #2: is TeX code which shall be invoked after
+% \pgfmanualprettyprinterhandlecollectedargs has been invoked (see
+% below).
+%
+% PRECONDITION:
+% there is a large token list following
+% \pgfmanualprettyprintercollectargcount with balanced braces. The braces
+% have \catcode 12.
+% POSTCONDITION:
+% 1. the arguments will be collected as
+% '<result> := {<first arg>}{<second arg>}',
+% 2.1 the macro \pgfmanualprettyprinternumcollectedargs will contain
+% the *actual* number of *completely* collected arguments,
+% 2.2 the if \ifpgfmanualprettyprinterarghasunmatchedbraces will be
+% set to \c true if the last found argument had an unmatched brace,
+% 3. then, \pgfmanualprettyprinterhandlecollectedargs{<result>} will be
+% invoked. Just define \pgfmanualprettyprinterhandlecollectedargs
+% properly.
+% Afterwards, #2 will be invoked to recover from the argument
+% collection.
+%
+%
+% Example:
+% \pgfmanualprettyprintercollectargcount{2}{\donnextstep}
+% {_12 first argument }_12 {_12 second argument }_12 next tokens%
+%
+% will result in the expansion
+% \pgfmanualprettyprinterhandlecollectedargs{{_1 first argument }_2 {_1 second argument }_2 }
+% \donnextstep
+% next tokens
+%
+%
+%
+% ATTENTION:
+% \pgfmanualprettyprinterhandlecollectedargs will be invoked with a SINGLE
+% argument. The argument as such will contain extra braces, one pair
+% of braces for each of the #1 arguments. These braces will have
+% catcode 1 and 2, i.e. they can *really* be used in TeX. Thus, the
+% finish routine will be invoked with
+% \pgfmanualprettyprinterhandlecollectedargs{{<arg>}}
+% for one argument and with
+% \pgfmanualprettyprinterhandlecollectedargs{{<first arg>}{<second arg>}}
+% for two and more arguments. Note the extra set of braces for one
+% arg.
+% It might happen that not all arguments have been found if
+% end-of-input occured before. The
+% \pgfmanualprettyprinterhandlecollectedargs routine has to check
+% this using the macro \pgfmanualprettyprinternumcollectedargs which
+% contains the actual number of collected args.
+%
+% @remark This macro checks for the end-of-input indicator, \pgfmanual@EOI. In case it encounters
+% \pgfmanual@EOI, it
+% 1. stops collecting, leaving the \pgfmanual@EOI as next token to be read,
+% 2. sets \ifpgfmanualprettyprinterarghasunmatchedbraces to \iftrue if necessary,
+% 3. assigns \pgfmanualprettyprinternumcollectedargs
+% 4. invokes the finish routine.
+% The \pgfmanual@EOI needs to be collected by following routines in
+% this case. You can also use \pgfutil@ifnextchar\pgfmanual@EOI{}{} in
+% following routines to check for \pgfmanual@EOI.
+\def\pgfmanualprettyprintercollectargcount#1#2{%
+ \pgfmanualprettyprinterarghasunmatchedbracesfalse
+ \begingroup
+ \edef\pgfmanual@loc@csargcount{#1}%
+ \toksdef\t@afterpgfmanualprettyprinterhandlecollected=10
+ \t@afterpgfmanualprettyprinterhandlecollected={#2}%
+ \let\c@pgfmanual@pretty@openbracecount=\c@pgf@counta
+ \let\c@pgfmanual@pretty@curargcount=\c@pgf@countb
+ % I will track open braces and the number of completely
+ % collected arguments here:
+ \c@pgfmanual@pretty@openbracecount=0
+ \c@pgfmanual@pretty@curargcount=0
+ %
+ % and I will accumulate the argument token lists as such here:
+ \toksdef\t@pgfmanual@currentarg=0
+ \toksdef\t@pgfmanual@allargs=1
+ \t@pgfmanual@currentarg={}%
+ \t@pgfmanual@allargs={}%
+ %
+ \pgfmanual@pretty@collectargs@loop
+}%
+
+% loops through all tokens, collecting the required number of
+% arguments. This involves to track nested braces manually.
+% #1 is a single token.
+\def\pgfmanual@pretty@collectargs@loop#1{%
+ \let\pgfmanual@pretty@collectargs@loop@NEXT=\pgfmanual@pretty@collectargs@loop
+ \def\pgfmanual@loc@TMPc{#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@EOI
+ \ifnum\c@pgfmanual@pretty@openbracecount>0
+ \ifpgfmanualpdfwarnings
+ \pgfplots@warning{The pretty printer did not found the closing curly brace!? This will potentially lead to display errors}%
+ \fi
+ \fi
+ \edef\pgfmanual@pretty@collectargs@loop@NEXT{%
+ \noexpand\endgroup
+ \ifnum\c@pgfmanual@pretty@openbracecount>0
+ \noexpand\pgfmanualprettyprinterarghasunmatchedbracestrue
+ \fi
+ \noexpand\def\noexpand\pgfmanualprettyprinternumcollectedargs{\the\c@pgfmanual@pretty@curargcount}%
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@allargs\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ \noexpand\pgfmanual@EOI% <- put this token back into token list!
+ }%
+ \else
+ \ifpgfmanualprettycommentactive
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activenl
+ \pgfmanualprettycommentactivefalse
+ \fi
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activepercent
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \pgfmanualprettycommentactivetrue
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@lbrace
+ \advance\c@pgfmanual@pretty@openbracecount by1
+ \ifnum\c@pgfmanual@pretty@openbracecount>1
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@rbrace
+ \advance\c@pgfmanual@pretty@openbracecount by-1
+ \ifnum\c@pgfmanual@pretty@openbracecount=0
+ % we have one complete argument ready!
+ % append it -- with REAL braces if needed:
+ \edef\pgfmanual@loc@TMPc{\the\t@pgfmanual@allargs{\the\t@pgfmanual@currentarg}}%
+ \t@pgfmanual@allargs=\expandafter{\pgfmanual@loc@TMPc}%
+ \t@pgfmanual@currentarg={}%
+ %
+ % check it we need more arguments:
+ \advance\c@pgfmanual@pretty@curargcount by1
+ \ifnum\c@pgfmanual@pretty@curargcount=\pgfmanual@loc@csargcount\relax
+ \edef\pgfmanual@pretty@collectargs@loop@NEXT{%
+ \noexpand\endgroup
+ \noexpand\def\noexpand\pgfmanualprettyprinternumcollectedargs{\the\c@pgfmanual@pretty@curargcount}%
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@allargs}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ }%
+ \fi
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \else
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL) or comment
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifnum10=\catcode`#1
+ % we found a white space (space, TAB
+ % or NL) with unexpected catcode
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifnum\c@pgfmanual@pretty@openbracecount=0
+ \ifpgfmanualpdfwarnings
+ \begingroup
+ \toks4{#1}%
+ \pgfplots@warning{The pretty printer did not find the expected \pgfmanual@loc@csargcount\space arguments (only token \the\toks4 )}%
+ \endgroup
+ \fi
+ \edef\pgfmanual@pretty@collectargs@loop@NEXT{%
+ \noexpand\endgroup
+ \noexpand\def\noexpand\pgfmanualprettyprinternumcollectedargs{\the\c@pgfmanual@pretty@curargcount}%
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@allargs\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ \noexpand#1% <- put this token back into token list!
+ }%
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@collectargs@loop@NEXT
+}%
+
+\newif\ifpgfmanualprettyprinterfoundterminator
+
+% Collects tokens inside of a token list up to a single delimiting token, dealing with nested
+% catcode-12-braces.
+%
+% #1: is the end token, the delimiter. It won't be collected.
+% #2: is code to invoke after
+% \pgfmanualprettyprinterhandlecollectedargs has been invoked.
+%
+% PRECONDITION:
+% there is a large token list following
+% \pgfmanualprettyprintercollectargcount with balanced braces. The braces
+% have \catcode 12.
+% POSTCONDITION:
+% - the arguments will be collected as
+% '<result> := <token list>'
+% and then, \pgfmanualprettyprinterhandlecollectedargs{<result>} will be
+% invoked. Just define \pgfmanualprettyprinterhandlecollectedargs
+% properly.
+% Then, #2 will be invoked.
+% - The boolean \ifpgfmanualprettyprinterfoundterminator will be set to true if and only if '#1' has been found.
+%
+% @see \pgfmanualprettyprintercollectargcount for more details.
+%
+\def\pgfmanualprettyprintercollectupto#1#2{%
+ \pgfmanualprettyprinterarghasunmatchedbracesfalse
+ \pgfmanualprettyprinterfoundterminatortrue
+ \begingroup
+ \def\pgfmanual@loc@delimittoken{#1}%
+ \toksdef\t@afterpgfmanualprettyprinterhandlecollected=10
+ \t@afterpgfmanualprettyprinterhandlecollected={#2}%
+ %
+ \let\c@pgfmanual@pretty@openbracecount=\c@pgf@counta
+ % I will track open braces here:
+ \c@pgfmanual@pretty@openbracecount=0
+ %
+ % and I will accumulate the argument token lists as such here:
+ \toksdef\t@pgfmanual@currentarg=0
+ \t@pgfmanual@currentarg={}%
+ %
+ \pgfmanual@pretty@collectupto@loop
+}%
+
+% loops through all tokens, collecting the required number of
+% arguments. This involves to track nested braces manually.
+% #1 is a single token.
+\def\pgfmanual@pretty@collectupto@loop#1{%
+ \let\pgfmanual@pretty@collectupto@loop@NEXT=\pgfmanual@pretty@collectupto@loop
+ \def\pgfmanual@loc@TMPc{#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@EOI
+ \edef\pgfmanual@pretty@collectupto@loop@NEXT{%
+ \noexpand\endgroup
+ \ifnum\c@pgfmanual@pretty@openbracecount>0
+ \noexpand\pgfmanualprettyprinterarghasunmatchedbracestrue
+ \fi
+ \noexpand\pgfmanualprettyprinterfoundterminatorfalse
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ \noexpand\pgfmanual@EOI% <- put this token back into token list!
+ }%
+ \else
+ \ifpgfmanualprettycommentactive
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activenl
+ \pgfmanualprettycommentactivefalse
+ \fi
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activepercent
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \pgfmanualprettycommentactivetrue
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@lbrace
+ \advance\c@pgfmanual@pretty@openbracecount by1
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@rbrace
+ \advance\c@pgfmanual@pretty@openbracecount by-1
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@loc@delimittoken
+ \ifnum\c@pgfmanual@pretty@openbracecount=0
+ % do NOT include the delimit token.
+ \edef\pgfmanual@pretty@collectupto@loop@NEXT{%
+ \noexpand\endgroup
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ }%
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@collectupto@loop@NEXT
+}%
+
+\def\pgfmanual@pretty@collectargs@finish@cs#1{%
+ \def\pgfmanual@pretty@collectargs@finish@cs@hasargs{1}%
+ \ifnum\pgfmanualprettyprinternumcollectedargs=0
+ \ifpgfmanualprettyprinterarghasunmatchedbraces
+ \else
+ \def\pgfmanual@pretty@collectargs@finish@cs@hasargs{0}%
+ \fi
+ \fi
+ \if\pgfmanual@pretty@collectargs@finish@cs@hasargs1%
+ % report the macro and its arguments:
+ \pgfkeysifdefined{/codeexample/prettyprint/cs/\pgfmanual@loc@TMPa/.@cmd}{%
+ % oh, we have a separate routine for this macro! Ok, use it:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/cs/\pgfmanual@loc@TMPa/.@cmd}}%
+ }{%
+ % use the generic routine:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/cs with args/.@cmd}}%
+ }%
+ % re-insert the backslash:
+ \edef\pgfmanual@loc@TMPa{{\pgfmanual@pretty@backslash\pgfmanual@loc@TMPa}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa #1\pgfeov
+ \else
+ % Oh. We probably got |\pgfkeys| instead of |\pgfkeys{arg}|
+ % re-insert the backslash:
+ \edef\pgfmanual@loc@TMPa{{\pgfmanual@pretty@backslash\pgfmanual@loc@TMPa}}%
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/cs/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa\pgfeov
+ #1\relax% simply typeset any encountered tokens after the control sequence.
+ \fi
+}%
+
+% A user macro which pretty prints a set of keys.
+%
+% If '#1' is NOT an argument for \pgfkeys,
+% \pgfmanualprettyprintpgfkeys will try to recognise at least control
+% sequences (in the same way as usual). Thus, you can even use this
+% method if there *could* be pgfkeys arguments in an automated pretty
+% printing environment.
+%
+% However, '#1' should only have catcode 12 characters with the
+% exception of catcode 13 for newlines, spaces and comments.
+\long\def\pgfmanualprettyprintpgfkeys#1{%
+ \ifpgfmanualprettyenabled
+ \begingroup
+ \pgfmanualprettyprintstyles
+ \pgfmanual@pretty@pgfkeys@loop#1\pgfmanual@EOI
+ \endgroup
+ \else
+ #1%
+ \fi
+}
+
+\def\pgfmanual@pretty@pgfkeys{%
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@pgfkeys@start
+ \pgfmanualprettyprintercollectupto]{\pgfmanual@pretty@mainloop}%%
+}%
+\long\def\pgfmanual@pretty@pgfkeys@start#1{%
+ [%
+ \pgfmanual@pretty@pgfkeys@loop#1\pgfmanual@EOI
+ ]%
+}%
+% iterates through single tokens, detecting key names and values while
+% it goes.
+\long\def\pgfmanual@pretty@pgfkeys@loop#1{%
+ \def\pgfmanual@loc@TMPa{#1}%
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@EOI
+ \def\pgfmanual@pretty@pgfkeys@loop@NEXT{\relax}%
+ \else
+ \def\pgfmanual@pretty@pgfkeys@loop@NEXT{\pgfmanual@pretty@pgfkeys@loop}%
+ \ifpgfmanualprettycommentactive
+ #1%
+ \else
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL) or comment
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@comma%
+ %\let\pgfmanual@pretty@pgfkeys@loop@NEXT=\pgfmanual@pretty@pgfkeys@checkforEOI
+ ,%
+ \else
+ \ifnum10=\catcode`#1
+ % another white space... I thought they'd have
+ % catcode 13. doesn't matter.
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@lbrace
+ % braces may not occur in the first place -
+ % but there are circumstances where it is
+ % convenient to deal with them here (when
+ % processing arguments of styles)
+ % Do it.
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@rbrace
+ #1%
+ \else
+ % found the beginning of a key!
+ % We will collect the key name into
+ % \toks0.
+ \toks0={}%
+ %
+ % Handle it:
+ % FIXME what if we found an opening brace!?
+ \def\pgfmanual@pretty@pgfkeys@loop@NEXT{\pgfmanual@pretty@pgfkeys@collectkey #1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@pgfkeys@loop@NEXT
+}%
+\def\pgfmanual@pretty@pgfkeys@collectkey#1{%
+ \def\pgfmanual@loc@TMPb{#1}%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@collectkey}%
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@EOI
+ % finish key name.
+ \edef\pgfmanual@loc@TMPb{\the\toks0 }%
+ \ifx\pgfmanual@loc@TMPb\pgfutil@empty
+ \else
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ \fi
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\relax}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@eq
+ % finish key name.
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ % now, we do the same with the value - we collect it into
+ % \toks0.
+ \toks0={}%
+ \def\pgfmanual@pretty@pgfkeys@collectvalue@hasconsumedspaces{0}%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@collectvalue}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@comma
+ % finish key name.
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@loop}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@activenl
+ % finish key name before newline. This is not
+ % necessarily as in TeX, but its simpler here
+ % because we don't need special cases for comments
+ % and we don't need to gobble following white
+ % spaces.
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@loop}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@backslash
+ % This is confusing. I simply try to invoke
+ % the control sequence code and recover as
+ % good as possible. Let's see if that's
+ % useful.
+ \edef\pgfmanual@loc@TMPb{\the\toks0 }%
+ \ifx\pgfmanual@loc@TMPb\pgfutil@empty
+ \else
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ \fi
+ %
+ % we found the start of a control sequence '\command':
+ %
+ % collect the control sequence name into
+ % \pgfmanual@loc@TMPa, but without the backslash:
+ \begingroup
+ \let\pgfmanual@loc@TMPa=\pgfutil@empty
+ \def\afterpgfmanual@pretty@cs{%
+ \endgroup
+ \pgfmanual@pretty@pgfkeys@loop
+ }%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@collectcs@loop}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@lbrace
+ % Braces in key names are allowed (if they
+ % are not the first character of a key
+ % name)
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{%
+ \toks1={##1}%
+ \edef\pgfmanual@loc@TMPc{%
+ \the\toks0 \pgfmanual@pretty@lbrace \the\toks1
+ \ifpgfmanualprettyprinterarghasunmatchedbraces
+ \else
+ \pgfmanual@pretty@rbrace
+ \fi
+ }%
+ \toks0=\expandafter{\pgfmanual@loc@TMPc}%
+ }%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{%
+ \pgfmanualprettyprintercollectargcount{1}{\pgfmanual@pretty@pgfkeys@collectkey}%
+ #1%
+ }%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@rbrace
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@loop}%
+ \else
+ \toks0=\expandafter{\the\toks0 #1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@pgfkeys@collectkey@next
+}%
+\def\pgfmanual@pretty@pgfkeys@collectvalue#1{%
+ \def\pgfmanual@loc@TMPb{#1}%
+ \let\pgfmanual@pretty@pgfkeys@collectvalue@next=\pgfmanual@pretty@pgfkeys@collectvalue
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@EOI
+ % the key value is empty.
+ %\expandafter\pgfmanual@pretty@pgfkeys@processvalue\expandafter{\the\toks0 }%
+ \let\pgfmanual@pretty@pgfkeys@collectvalue@next=\relax
+ \else
+ \def\pgfmanual@pretty@isconsumed{0}%
+ \if\pgfmanual@pretty@pgfkeys@collectvalue@hasconsumedspaces0%
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL)
+ #1%
+ \def\pgfmanual@pretty@isconsumed{1}%
+ \else
+ \ifnum10=\catcode`#1
+ % another white space... I thought they'd have
+ % catcode 13. doesn't matter.
+ \def\pgfmanual@pretty@isconsumed{1}%
+ #1%
+ \fi
+ \fi
+ \fi
+ \if\pgfmanual@pretty@isconsumed0%
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{\pgfmanual@pretty@pgfkeys@processvalue{##1}}% the braces will be handled separately.
+ \def\pgfmanual@pretty@pgfkeys@collectvalue@next{%
+ \pgfmanualprettyprintercollectupto,{\afterpgfmanual@pretty@collectargs@finish@value}#1%
+ }%
+ \fi
+ \fi
+ \pgfmanual@pretty@pgfkeys@collectvalue@next
+}%
+\def\afterpgfmanual@pretty@collectargs@finish@value{%
+ \pgfutil@ifnextchar\pgfmanual@EOI{%
+ \pgfmanual@pretty@pgfkeys@loop
+ }{%
+ \pgfmanual@pretty@pgfkeys@loop,% re-insert the gobbled comma here!
+ }%
+}%
+
+{\catcode`\^^M=13 \catcode`\ =13\relax\catcode`\%=13\relax\gdef\pgfmanual@pretty@restorespaces{\def%{\pgfmanual@pretty@percent}\def^^M{\pgfmanual@pretty@space}\def {\pgfmanual@pretty@space}}}
+
+% #1: the key's name
+\def\pgfmanual@pretty@pgfkeys@processkey#1{%
+ \begingroup
+ \pgfmanual@pretty@restorespaces
+ % remember this key name! It is used when we are dealing with
+ % its value later... (if it has a value)
+ \xdef\pgfmanual@pretty@pgfkeys@collectkey@keyname{#1}%
+ \endgroup
+ %
+ % check if it is a handled key. FIXME: this could be done in a
+ % rigorous way! This here assumes that all key handlers start with
+ % '.' and the '.' occurs never right after a '/' otherwise:
+ \def\pgfmanual@loc@TMPa{\pgfutil@in@{/.}}%
+ \expandafter\pgfmanual@loc@TMPa\expandafter{\pgfmanual@pretty@pgfkeys@collectkey@keyname}%
+ \ifpgfutil@in@
+ % split into key name and handler name...
+ \def\pgfmanual@pretty@splitit##1/.##2\relax{%
+ \def\pgfmanual@loc@TMPb{{##1}{.##2}}%
+ }%
+ \expandafter\pgfmanual@pretty@splitit\pgfmanual@pretty@pgfkeys@collectkey@keyname\relax
+ %
+ % report key name AND handler:
+ \def\pgfmanual@loc@TMPa{\pgfkeysvalueof{/codeexample/prettyprint/key name with handler/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPa\pgfmanual@loc@TMPb\pgfeov
+ \else
+ % report key name ...
+ \def\pgfmanual@loc@TMPa{\pgfkeysvalueof{/codeexample/prettyprint/key name/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPa\pgfmanual@pretty@pgfkeys@collectkey@keyname\pgfeov
+ \fi
+}
+\def\pgfmanual@pretty@pgfkeys@processvalue#1{%
+ % report or process the value, depending on the keyname.
+ % After all, it *may* be a style which needs to be pretty printed
+ % as well.
+ \pgfkeysifdefined{/codeexample/prettyprint/key value/\pgfmanual@pretty@pgfkeys@collectkey@keyname/.@cmd}{%
+ % oh, we have a separate routine for this macro! Ok, use it:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/key value/\pgfmanual@pretty@pgfkeys@collectkey@keyname/.@cmd}}%
+ }{%
+ % use the generic routine:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/key value/.@cmd}}%
+ }%
+ \edef\pgfmanual@loc@TMPa{{\pgfmanual@pretty@pgfkeys@collectkey@keyname}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa{#1}\pgfeov
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmathfloat.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmathfloat.code.tex
new file mode 100644
index 0000000000..5ba17bc2d0
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfmathfloat.code.tex
@@ -0,0 +1,2665 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Fr 10. Nov 17:18:26 CET 2017 %%%
+
+
+
+% Copyright 2008 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+%
+% This file contains methods for basic floating point arithmetics, rounding
+% to arbitrary precision and number pretty printing.
+%
+
+
+\pgfkeys{
+ % The bug 3430171 (wrong minus sign spacing in pgfmathprintnumber)
+ % has been fixed in 2.10 CVS. Since it changes the spacing, its
+ % effects can be undone with this compatibility switch.
+ /pgf/compat/number printer/.is choice,
+ /pgf/compat/number printer/2.10/.code={%
+ \def\pgfmathprintnumber@begingroup{\bgroup}%
+ \def\pgfmathprintnumber@endgroup{\egroup}%
+ },
+ % I do not know the version number of the next release at this
+ % time. Please be so kind and KEEP THIS NAME INTACT. Add an alias
+ % if needed.
+ /pgf/compat/number printer/next after 2.10/.code={%
+ \def\pgfmathprintnumber@begingroup{\begingroup}%
+ \def\pgfmathprintnumber@endgroup{\endgroup}%
+ },
+ % activate the fix by default.
+ /pgf/compat/number printer/next after 2.10,%
+}
+
+
+\global\newif\ifpgfmathfloatcomparison
+\newif\ifpgfmathfloatroundhasperiod
+\newif\ifpgfmathprintnumberskipzeroperiod
+
+
+% used internally in grouped macros:
+\toksdef\pgfmathfloat@tmptoks=1
+\newif\ifpgfmathfloat@fixed@digits@after@period
+\newif\ifpgfmathfloatroundmayneedrenormalize
+\toksdef\pgfmathfloat@a@Mtok=0
+
+%% WARNING: avoid conflicting register names!
+\let\pgfmathfloat@a@S=\c@pgf@counta
+\let\pgfmathfloat@a@M=\pgf@xa
+\let\pgfmathfloat@a@E=\c@pgf@countb
+\let\pgfmathfloat@b@S=\c@pgf@countc
+\let\pgfmathfloat@b@M=\pgf@xb
+\let\pgfmathfloat@b@E=\c@pgf@countd
+
+% can be changed with options.
+\def\pgfmathfloat@round@precision{2}
+
+% I introduced this to acces the "original" precision in case a
+% formatted changes it locally... in this case, the formatter may
+% overwrite \pgfmathfloat@round@precision@orig to provide the original
+% one.
+% The default implementation here does nothing:
+\def\pgfmathfloat@round@precision@orig{\pgfmathfloat@round@precision}%
+
+\gdef\pgfmathfloat@glob@TMP{}
+
+
+% Computes a normalised floating point representation for #1 of the
+% form
+% [FLAGS] MANTISSE EXPONENT
+% meaning
+% [+-]X.XXXXXXX*10^C
+% where
+% X.XXXXXX is a mantissa with first number != 0, C is an integer and
+% FLAGS contains the sign and some other special cases.
+%
+% This method does NOT use TeX Registers to represent the numbers! The
+% computation is COMPLETELY STRING BASED.
+% This allows numbers such at 10000000 or 5.23e-10 to be represented
+% properly, although TeX-registers would produce overflow/underflow
+% errors in these cases.
+%
+% It is to be used to compute logs, because log(X*10^Y) = log(X) + log(10)*Y
+%
+% Arguments:
+% #1: an arbitrary number which shall be parsed. Maybe a macro.
+% Examples:
+% [+-]XXXXX.XXXXXX
+% [+-]XXXXX.XXXXXXeXXXX
+% [+-]0.0000XXXXXX
+% [+-]0.0000XXXXXXeXXXX
+% [+-]inf
+% nan
+% Maybe a macro containing such a number.
+%
+% Return value:
+% \pgfmathresult will be \def'ed to
+% FLAGS MANTISSE 'e' EXPONENT
+% where
+% FLAGS is a number in [0-5] where
+% 0 == '0' (the number is +- 0.0),
+% 1 == '+',
+% 2 == '-',
+% 3 == 'not a number'
+% 4 == '+ infinity'
+% 5 == '- infinity'
+%
+% MANTISSE is a normalised number 1 <= M < 10. It always contains a
+% period and at least one digit after the period.
+%
+% EXPONENT is an integer value.
+%
+% Example:
+% \pgfmathfloatparsenumber{1}
+% -> \pgfmathresult = 11.0e0
+% \pgfmathfloatparsenumber{141.212}
+% -> \pgfmathresult = 11.41212e2
+\def\pgfmathfloatparsenumber#1{%
+ \begingroup
+ \edef\pgfmathresult{#1}%
+ \expandafter\pgfflt@impl\pgfmathresult\pgfflt@EOI
+ \ifpgfmathfloatparsenumberpendingperiod
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok.0}%
+ \fi
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+% The same as \pgfmathfloatparsenumber, but does not perform sanity checking.
+% FIXME: there is no longer any difference here.
+\let\pgfmathfloatqparsenumber=\pgfmathfloatparsenumber
+
+% Takes a floating point number #1 as input and writes flags to count
+% register #2, mantissa to dimen register #3 and exponent to count
+% register #4.
+\def\pgfmathfloattoregisters#1#2#3#4{%
+ \expandafter\pgfmathfloat@decompose#1\relax{#2}{#3}{#4}%
+}
+
+% the same, but writes the mantissa into a token register.
+\def\pgfmathfloattoregisterstok#1#2#3#4{%
+ \expandafter\pgfmathfloat@decompose@tok#1\relax{#2}{#3}{#4}%
+}
+
+% Extracts the flags of #1 into the count register #2.
+\def\pgfmathfloatgetflags#1#2{%
+ \expandafter\pgfmathfloat@decompose@F#1\relax{#2}%
+}
+% Extracts the flags of #1 into the macro #2.
+\def\pgfmathfloatgetflagstomacro#1#2{%
+ \expandafter\pgfmathfloat@decompose@Fmacro#1\relax{#2}%
+}%
+
+% Extracts the mantissa of #1 into the dimen register #2.
+\def\pgfmathfloatgetmantissa#1#2{%
+ \expandafter\pgfmathfloat@decompose@M#1\relax{#2}%
+}
+\let\pgfmathfloatgetmantisse=\pgfmathfloatgetmantissa
+% Extracts the mantissa of #1 into the token register #2.
+\def\pgfmathfloatgetmantissatok#1#2{%
+ \expandafter\pgfmathfloat@decompose@Mtok#1\relax{#2}%
+}
+\let\pgfmathfloatgetmantissetok=\pgfmathfloatgetmantissatok
+% Extracts the exponent of #1 into the count register #2.
+\def\pgfmathfloatgetexponent#1#2{%
+ \expandafter\pgfmathfloat@decompose@E#1\relax{#2}%
+}
+
+
+% Assigns \pgfmathresult to be a float encoded as
+% <FLAGS><MANTISSE>e<EXPONENT>
+%
+% example:
+% \pgfmathfloatcreate{1}{2.0}{10}
+% \pgfmathfloat@to@FMeE@style\pgfmathresult
+% ->
+% \pgfmathresult is now '12.0e10' regardless of the internal float
+% format.
+\def\pgfmathfloat@to@FMeE@style#1{\expandafter\pgfmathfloat@to@FMeE@style@#1\relax\relax}%
+\def\pgfmathfloat@to@FMeE@style@#1#2{%
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@to@FMeE@style@@%
+ \else
+ \expandafter\pgfmathfloat@to@FMeE@style@error%
+ \fi
+ #1#2%
+}%
+\def\pgfmathfloat@to@FMeE@style@@#1Y#2e#3]\relax\relax{\def\pgfmathresult{#1#2e#3}}%
+\def\pgfmathfloat@to@FMeE@style@error#1\relax\relax{%
+ \begingroup
+ \pgfmathfloatparsenumber@handleerror{wrong lowlevel format}{#1}{#1}%
+ \xdef\pgfmathfloat@decompose@TMP{%
+ \noexpand\pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ }%
+ \endgroup
+ \pgfmathfloat@decompose@TMP
+}%
+
+
+% decomposes a lowlevel floating point representation into flags,
+% mantissa and exponent.
+%
+% #4: integer register for the flags.
+% #5: dimen registers for the mantissa.
+% #6: integer register for the exponent.
+%
+% \expandafter\pgfmathfloat@decompose\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@M\pgfmathfloat@a@E
+% -> the three temp registers contain flags, mantissa and exponent
+\def\pgfmathfloat@decompose#1#2{% sanitize!
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@decompose@%
+ \else
+ \expandafter\pgfmathfloat@decompose@error%
+ \fi
+ #1#2%
+}
+\def\pgfmathfloat@decompose@#1Y#2e#3]\relax#4#5#6{%
+ #4=#1\relax
+ #5=#2pt % keep space here.
+ #6=#3\relax%
+}
+
+% overloaded, #5 needs to be a token register for the mantissa.
+% @see also \pgfmathfloatvalueof which does also employ the load
+% level repr.
+% \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+% -> the three temp registers contain flags, mantissa and exponent
+\def\pgfmathfloat@decompose@tok#1#2{%
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@decompose@tok@%
+ \else
+ \expandafter\pgfmathfloat@decompose@tok@error%
+ \fi
+ #1#2%
+}%
+\def\pgfmathfloat@decompose@tok@#1Y#2e#3]\relax#4#5#6{%
+ #4=#1\relax
+ #5={#2}%
+ #6=#3\relax%
+}
+% overloaded, returns only ONE of the three components into #4:
+% \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@a@S
+% -> \pgfmathfloat@a@S contains the flags field.
+\def\pgfmathfloat@decompose@F#1#2{%
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@decompose@F@%
+ \else
+ \expandafter\pgfmathfloat@decompose@F@error%
+ \fi
+ #1#2%
+}%
+\def\pgfmathfloat@decompose@Fmacro#1#2{%
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@decompose@Fmacro@%
+ \else
+ \expandafter\pgfmathfloat@decompose@F@error%
+ \fi
+ #1#2%
+}%
+\def\pgfmathfloat@decompose@M#1#2{%
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@decompose@M@%
+ \else
+ \expandafter\pgfmathfloat@decompose@M@error%
+ \fi
+ #1#2%
+}%
+\def\pgfmathfloat@decompose@E#1#2{%
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@decompose@E@%
+ \else
+ \expandafter\pgfmathfloat@decompose@E@error%
+ \fi
+ #1#2%
+}%
+\def\pgfmathfloat@decompose@Mtok#1#2{%
+ \ifx#2Y%
+ \expandafter\pgfmathfloat@decompose@Mtok@%
+ \else
+ \expandafter\pgfmathfloat@decompose@Mtok@error%
+ \fi
+ #1#2%
+}%
+\def\pgfmathfloat@decompose@F@#1Y#2e#3]\relax#4{#4=#1\relax}%
+\def\pgfmathfloat@decompose@Fmacro@#1Y#2e#3]\relax#4{\def#4{#1}}%
+\def\pgfmathfloat@decompose@M@#1Y#2e#3]\relax#4{#4=#2pt}%
+\def\pgfmathfloat@decompose@Mtok@#1Y#2e#3]\relax#4{#4={#2}}%
+\def\pgfmathfloat@decompose@E@#1Y#2e#3]\relax#4{#4=#3\relax}%
+
+\def\pgfmathfloat@decompose@error#1\relax#2#3#4{%
+ \begingroup
+ \pgfmathfloatparsenumber@handleerror{wrong lowlevel format}{#1}{#1}%
+ \xdef\pgfmathfloat@decompose@TMP{%
+ \noexpand#2=\the\pgfmathfloat@a@S\space
+ \noexpand#3=\the\pgfmathfloat@a@Mtok pt
+ \noexpand#4=\the\pgfmathfloat@a@E\space
+ }%
+ \endgroup
+ \pgfmathfloat@decompose@TMP
+}%
+\def\pgfmathfloat@decompose@tok@error#1\relax#2#3#4{%
+ \begingroup
+ \pgfmathfloatparsenumber@handleerror{wrong lowlevel format}{#1}{#1}%
+ \xdef\pgfmathfloat@decompose@TMP{%
+ \noexpand#2=\the\pgfmathfloat@a@S\space
+ \noexpand#3={\the\pgfmathfloat@a@Mtok}%
+ \noexpand#4=\the\pgfmathfloat@a@E\space
+ }%
+ \endgroup
+ \pgfmathfloat@decompose@TMP
+}%
+\def\pgfmathfloat@decompose@F@error#1\relax#2{%
+ \begingroup
+ \pgfmathfloatparsenumber@handleerror{wrong lowlevel format}{#1}{#1}%
+ \xdef\pgfmathfloat@decompose@TMP{\noexpand#2=\the\pgfmathfloat@a@S\space}%
+ \endgroup
+ \pgfmathfloat@decompose@TMP
+}%
+\def\pgfmathfloat@decompose@M@error#1\relax#2{%
+ \begingroup
+ \pgfmathfloatparsenumber@handleerror{wrong lowlevel format}{#1}{#1}%
+ \xdef\pgfmathfloat@decompose@TMP{\noexpand#2=\the\pgfmathfloat@a@Mtok pt }%
+ \endgroup
+ \pgfmathfloat@decompose@TMP
+}%
+\def\pgfmathfloat@decompose@Mtok@error#1\relax#2{%
+ \begingroup
+ \pgfmathfloatparsenumber@handleerror{wrong lowlevel format}{#1}{#1}%
+ \xdef\pgfmathfloat@decompose@TMP{\noexpand#2={\the\pgfmathfloat@a@Mtok}}%
+ \endgroup
+ \pgfmathfloat@decompose@TMP
+}%
+\def\pgfmathfloat@decompose@E@error#1\relax#2{%
+ \begingroup
+ \pgfmathfloatparsenumber@handleerror{wrong lowlevel format}{#1}{#1}%
+ \xdef\pgfmathfloat@decompose@TMP{\noexpand#2=\the\pgfmathfloat@a@E\space}%
+ \endgroup
+ \pgfmathfloat@decompose@TMP
+}%
+% Takes a floating point number #1 as input and writes flags to macro
+% #2, mantissa to macro #3 and exponent to macro #4.
+\def\pgfmathfloattomacro#1#2#3#4{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \xdef\pgfmathfloat@glob@TMP{%
+ \noexpand\def\noexpand#2{\the\pgfmathfloat@a@S}%
+ \noexpand\def\noexpand#3{\the\pgfmathfloat@a@Mtok}%
+ \noexpand\def\noexpand#4{\the\pgfmathfloat@a@E}%
+ }%
+ \endgroup
+ \pgfmathfloat@glob@TMP
+}
+
+
+% Defines \pgfmathresult as the floating point number encoded by
+% the flags #1, mantissa #2 and exponent #3.
+%
+% All arguments are characters and will be expanded using '\edef'.
+\def\pgfmathfloatcreate#1#2#3{%
+ \edef\pgfmathresult{#1Y#2e#3]}%
+}%
+% This is the character present in any low-level floating point
+% number. It is assumed to be the SECOND character of a float (after
+% the flags integer).
+\def\pgfmathfloat@POSTFLAGSCHAR{Y}
+
+
+
+% Converts a composed floating point representation to fixed point.
+%
+% Example:
+% \pgfmathfloattofixed{142e1}
+% -> \pgfmathresult = 42.0
+\def\pgfmathfloattofixed@#1{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifcase\pgfmathfloat@a@S
+ \def\pgfmathresult{0.0}%
+ \or
+ \expandafter\pgfmathfloattofixed@impl\the\pgfmathfloat@a@Mtok\relax
+ \or
+ \expandafter\pgfmathfloattofixed@impl\the\pgfmathfloat@a@Mtok\relax
+ \pgfmathfloat@a@Mtok=\expandafter{\pgfmathresult}%
+ \edef\pgfmathresult{-\the\pgfmathfloat@a@Mtok}%
+ \or\def\pgfmathresult{nan}%
+ \or\def\pgfmathresult{inf}%
+ \or\def\pgfmathresult{-inf}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+\let\pgfmathfloattofixed=\pgfmathfloattofixed@
+
+% Converts a float to an integer (in integer format).
+%
+% @see \pgfmathfloatint
+\def\pgfmathfloattoint#1{%
+ \pgfmathfloattofixed{#1}%
+ \expandafter\pgfmathfloattoint@@\pgfmathresult\relax
+}%
+\def\pgfmathfloattoint@@#1.#2\relax{%
+ \def\pgfmathresult{#1}%
+}%
+
+% Converts a floating point number to scientific format 1.234e5.
+%
+% This operation is very fast.
+\def\pgfmathfloattosci@#1{%
+ \begingroup
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifcase\pgfmathfloat@a@S
+ \def\pgfmathresult{0.0e0}%
+ \or
+ \edef\pgfmathresult{\the\pgfmathfloat@a@Mtok e\the\pgfmathfloat@a@E}%
+ \or
+ \edef\pgfmathresult{-\the\pgfmathfloat@a@Mtok e\the\pgfmathfloat@a@E}%
+ \or\def\pgfmathresult{nan}%
+ \or\def\pgfmathresult{inf}%
+ \or\def\pgfmathresult{-inf}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\let\pgfmathfloattosci=\pgfmathfloattosci@
+
+% Expands a floating point number to scientific format 1.234e5.
+%
+% This operation is very fast.
+\def\pgfmathfloatvalueof#1{\expandafter\pgfmathfloatvalueof@@#1@@}%
+
+% Make it fool proof such that the following arguments work:
+% \pgfmathfloatvalueof{1Y1.0e1} -> 1.0e1
+% \pgfmathfloatvalueof{2Y1.0e1} -> -1.0e1
+% and wrong arguments as well:
+% \pgfmathfloatvalueof{1} -> 1
+% \pgfmathfloatvalueof{1e2} -> 1e2
+\def\pgfmathfloatvalueof@@#1#2{%
+ \if#2Y%
+ % keep in mind that \pgfmathfloatvalueof should be expandable!
+ % We must not use \let here. Let's hope that #1 and #2 are
+ % single tokens (not something which was enclosed by curly
+ % braces...)
+ \expandafter\pgfmathfloatvalueof@@@\expandafter#1\expandafter#2%
+ \else
+ % Oh - no float!? Ok, we cannot report errors in this context.
+ % So: make it a feature and return the input argument as-is.
+ % Might be useful, in fact...
+ \expandafter\pgfmathfloatvalueof@abort\expandafter#1\expandafter#2%
+ \fi
+}
+\def\pgfmathfloatvalueof@@@#1Y#2e#3]@@{%
+ \ifcase#1 %
+ 0.0e0%
+ \or
+ #2e#3%
+ \or
+ -#2e#3%
+ \or nan%
+ \or inf%
+ \or -inf%
+ \fi
+}%
+\def\pgfmathfloatvalueof@abort#1@@{#1}%
+
+
+
+% Rounds a fixed point number #1 to \pgfmathfloat@round@precision digits precision and returns
+% the result into \pgfmathresult.
+%
+% Any trailing zeros after the period are discarded.
+% See \pgfmathroundtozerofill if you want trailing zeros and fixed
+% width.
+%
+% This method is PURELY text based and can work with arbirtrary
+% precision (well, limited to TeX's stack size and integer size).
+%
+% Examples:
+% \pgfmathroundto{1}
+% -> \pgfmathresult = '1'
+%
+% \pgfmathroundto{19999.9996}
+% -> \pgfmathresult = '20000'
+%
+% Arguments:
+% #1 may be either a number or a macro (\pgfmathresult is allowed) expanding to a number.
+%
+% SIDE EFFECT: the global variable \ifpgfmathfloatroundhasperiod will be set.
+\def\pgfmathroundto#1{%
+ \pgfmathfloatroundhasperiodtrue
+ \begingroup
+ \pgfmathfloat@fixed@digits@after@periodfalse
+ \pgfmathroundto@impl{#1}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+
+% Overloaded method.
+%
+% This variant always uses a FIXED number behind the period and fills
+% in zeros if necessary.
+% Examples:
+% \pgfmathroundtozerofill{1}
+% -> \pgfmathresult = '1.00'
+%
+% \pgfmathroundtozerofill{19999.9996}
+% -> \pgfmathresult = '20000.00'
+%
+% SIDE EFFECT: the global variable \ifpgfmathfloatroundhasperiod will be set.
+\def\pgfmathroundtozerofill#1{%
+ \pgfmathfloatroundhasperiodtrue
+ \begingroup
+ \pgfmathfloat@fixed@digits@after@periodtrue
+ \pgfmathroundto@impl{#1}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+% see \pgfmathprintnumber@fixed@style for docs
+\def\pgfmathprintnumber@fixed@styleDEFAULT#1#2#3e#4\relax{%
+ \begingroup
+ \pgfkeysgetvalue{/pgf/number format/set decimal separator}\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP
+ \pgfkeysgetvalue{/pgf/number format/@dec sep mark}\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK
+ \pgfkeysgetvalue{/pgf/number format/set thousands separator}\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP
+ \c@pgf@counta=#4\relax % it is the exponent here.
+ \ifnum#2=0
+ \c@pgf@counta=0
+ \fi
+ \def\pgfmathresult{}%
+ \ifpgfmathfloatroundhasperiod
+ \expandafter\pgfmathprintnumber@fixed@styleDEFAULT@impl@period#1\pgfmathfloat@EOI
+ \else
+ \expandafter\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI%
+ \begingroup
+ \toks0=\expandafter{\pgfmathresult}%
+ \toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 }%
+ \endgroup
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@period#1.#2\pgfmathfloat@EOI{%
+ \ifpgfmathprintnumberskipzeroperiod
+ \def\pgfmathfloat@loc@TMPb{#1}%
+ \ifx\pgfmathfloatparsenumber@tok@ZERO\pgfmathfloat@loc@TMPb
+ \else
+ \def\pgfmathfloat@loc@TMPc{-0}%
+ \ifx\pgfmathfloat@loc@TMPc\pgfmathfloat@loc@TMPb
+ \def\pgfmathresult{-}%
+ \else
+ \def\pgfmathfloat@loc@TMPc{+0}%
+ \ifx\pgfmathfloat@loc@TMPc\pgfmathfloat@loc@TMPb
+ \def\pgfmathresult{+}%
+ \else
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI
+ \fi
+ \fi
+ \fi
+ \else
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI
+ \fi
+ \ifpgfmathprintnumber@thousand@sep@in@fractional
+ \let\pgfmathresultfractional\pgfutil@empty%
+ \pgfmathprintnumber@thousand@sep@in@fractional#2MMMM\@@
+ \else
+ \def\pgfmathresultfractional{#2}%
+ \fi
+ \begingroup
+ \toks0=\expandafter{\pgfmathresult}%
+ \toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK}%
+ \toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP}%
+ \toks3=\expandafter{\pgfmathresultfractional}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 \the\toks3 }%
+ \endgroup
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+}%
+
+% assigns \pgfmathresult such that it contains the formatted result.
+% It assumes that none of the following tokens contains a period.
+\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod{%
+ \ifx\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP\pgfutil@empty
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall}%
+ \else
+ \ifnum\c@pgf@counta<0\relax % exponent of the number in this context
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall}%
+ \else
+ \ifnum\c@pgf@counta<\pgfkeysvalueof{/pgf/number format/min exponent for 1000 sep}\relax
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall}%
+ \else
+ \advance\c@pgf@counta by1 % counta:= total number of digits, N.
+ \c@pgf@countb=\c@pgf@counta
+ \divide\c@pgf@countb by3 % countb := N DIV 3
+ \c@pgf@countc=\c@pgf@countb
+ \multiply\c@pgf@countc by3
+ \advance\c@pgf@counta by-\c@pgf@countc% now counta := N MOD 3
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printsign
+ }%
+ \fi
+ \fi
+ \fi
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT
+}
+\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printsign#1{%
+ \def\pgfmathfloat@loc@TMPb{#1}%
+ \ifx\pgfmathfloat@loc@TMPb\pgfmathfloatparsenumber@tok@MINUS
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult #1}%
+ \let\pgfmathfloat@loc@TMPb=\pgfutil@empty
+ \else
+ \ifx\pgfmathfloat@loc@TMPb\pgfmathfloatparsenumber@tok@PLUS
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult #1}%
+ \let\pgfmathfloat@loc@TMPb=\pgfutil@empty
+ \else
+ \ifpgfmathprintnumber@showpositive
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult +}%
+ \fi
+ \fi
+ \fi
+ \ifnum\c@pgf@counta>0 % \c@pgf@counta = N MOD 3 in this context
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \expandafter\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printtrailingdigits\pgfmathfloat@loc@TMPb
+ }%
+ \else
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \expandafter\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@counteverythird\pgfmathfloat@loc@TMPb
+ }%
+ \fi
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT
+}
+\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printtrailingdigits#1#2{%
+ \ifcase\c@pgf@counta % = N MOD 3 in this context
+ % does not happen per construction
+ \or
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult #1}%
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@counteverythird#2%
+ }%
+ \or
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult #1#2}%
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@counteverythird%
+ }%
+ \fi
+ \ifnum\c@pgf@countb>0\relax % \c@pgf@countb = N DIV 3 in this context
+ \begingroup
+ \toks0=\expandafter{\pgfmathresult}%
+ \toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 }%
+ \endgroup
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+ \fi
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT
+}
+\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@counteverythird#1#2#3{%
+ \ifnum\c@pgf@countb>0\relax
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult #1#2#3}%
+ \advance\c@pgf@countb by-1
+ \ifnum\c@pgf@countb>0\relax
+ \begingroup
+ \toks0=\expandafter{\pgfmathresult}%
+ \toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 }%
+ \endgroup
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+ \fi
+ \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{%
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@counteverythird%
+ }%
+ \else
+ % in thise case, #1#2#3 are expected to be
+ % \pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI
+ %--------------------------------------------------
+ % \def\pgfmathfloat@loc@TMPb{\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI}%
+ % \def\pgfmathfloat@loc@TMPc{#1#2#3}%
+ % \ifx\pgfmathfloat@loc@TMPc\pgfmathfloat@loc@TMPb
+ % \else
+ % \pgfmath@error{INTERNAL ERROR in fixed style - The input sequence did not terminate as expected; which indicates a wrong exponent argument provided to \string\pgfmathprintnumber@fixed@style}{}%
+ % \fi
+ %--------------------------------------------------
+ \let\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT=\relax
+ \fi
+ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT
+}
+
+% \pgfmathprintnumber@thousand@sep@in@fractional 01234525MMMM\@@
+% ->
+% 012<sep>345<sep>25
+\def\pgfmathprintnumber@thousand@sep@in@fractional#1#2#3#4{%
+ \if#4M%
+ % Ok, no further separator
+ \def\pgfmathprint@next{\pgfmathprintnumber@thousand@sep@in@fractional@finish#1#2#3#4}%
+ \else
+ \begingroup
+ \toks0=\expandafter{\pgfmathresultfractional}%
+ \toks1={#1#2#3}%
+ \toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 }%
+ \endgroup
+ \let\pgfmathresultfractional=\pgfmathfloat@glob@TMP
+ \def\pgfmathprint@next{\pgfmathprintnumber@thousand@sep@in@fractional#4}%
+ \fi
+ \pgfmathprint@next
+}%
+\def\pgfmathprintnumber@thousand@sep@in@fractional@finish#1M{%
+ \expandafter\def\expandafter\pgfmathresultfractional\expandafter{\pgfmathresultfractional #1}%
+ \pgfmathprintnumber@thousand@sep@in@fractional@finish@
+}%
+\def\pgfmathprintnumber@thousand@sep@in@fractional@finish@#1\@@{}%
+
+\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall#1{%
+ \def\pgfmathfloat@loc@TMPb{#1}%
+ \let\pgfmathfloat@loc@TMPc=\pgfutil@empty
+ \ifx\pgfmathfloat@loc@TMPb\pgfmathfloatparsenumber@tok@MINUS
+ \else
+ \ifx\pgfmathfloat@loc@TMPb\pgfmathfloatparsenumber@tok@PLUS
+ \else
+ \ifpgfmathprintnumber@showpositive
+ \def\pgfmathfloat@loc@TMPc{+}%
+ \fi
+ \fi
+ \fi
+ \expandafter\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall@\pgfmathfloat@loc@TMPc#1%
+}
+\def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall@#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI{%
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult #1}%
+}%
+
+% @deprecated. It has been replaced by \pgfmathprintnumber@fixed@styleDEFAULT
+% #1 maybe a macro
+\def\pgfmathprintnumber@fixed@stylePERIOD#1#2#3e#4\relax{%
+ \def\pgfmathresult{#1}%
+}
+
+% @deprecated. It has been replaced by \pgfmathprintnumber@fixed@styleDEFAULT
+% #1 maybe a macro
+\def\pgfmathprintnumber@fixed@styleCOMMA#1#2#3e#4\relax{%
+ \ifpgfmathfloatroundhasperiod
+ \expandafter\pgfmathprintnumber@fixed@styleCOMMA@impl#1\pgfmathfloat@EOI
+ \else
+ \def\pgfmathresult{#1}%
+ \fi
+}
+\def\pgfmathprintnumber@fixed@styleCOMMA@impl#1.#2\pgfmathfloat@EOI{\def\pgfmathresult{#1{,}#2}}
+
+% The default style to display fixed point numbers.
+%
+% It does not apply numerics, but it is responsable for typesetting the
+% rounded number.
+% It can access the \ifpgfmathfloatroundhasperiod boolean.
+%
+% Arguments:
+% #1#2#3e#4\relax
+
+% Input:
+% #1 the fixed point number to be displayed (maybe a macro).
+% #2#3e#4: the (possibly unformatted) floating point representation
+% which belongs to #1. This format is returned (only!) by
+% \pgfmathfloat@to@FMeE@style.
+% It is used to determine sign and exponent.
+\let\pgfmathprintnumber@fixed@style=\pgfmathprintnumber@fixed@styleDEFAULT
+
+
+% Rounds a normalized floating point number to \pgfmathfloat@round@precision
+% digits precision and writes the result to \pgfmathresult.
+%
+% This method uses \pgfmathroundto for the mantissa.
+%
+% @see pgfmathfloatroundzerofill
+%
+% SIDE EFFECT: the global variable \ifpgfmathfloatroundhasperiod will be set to
+% whether the final mantissa #5 has a period or not.
+\def\pgfmathfloatround#1{%
+ \pgfmathfloatroundhasperiodtrue
+ \begingroup
+ \pgfmathfloat@fixed@digits@after@periodfalse
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \pgfmathfloatround@impl
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+% Overload.
+%
+% This method uses a fixed width for the mantissa and fills in zeros
+% if necessary.
+%
+% This method uses \pgfmathroundtozerofill for the mantissa.
+%
+% SIDE EFFECT: the global variable \ifpgfmathfloatroundhasperiod will be set to
+% whether the final mantissa #5 has a period or not.
+\def\pgfmathfloatroundzerofill#1{%
+ \pgfmathfloatroundhasperiodtrue
+ \begingroup
+ \pgfmathfloat@fixed@digits@after@periodtrue
+ \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \pgfmathfloatround@impl
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+\newif\ifpgfmathfloatround@allow@empty@mantissa
+\def\pgfmathfloatround@mantissa@ONE{1.0}%
+
+% #1: sign
+% #2: mantissa
+% #3: exponent
+% #4: CODE to display if the mantissa is drawn.
+% This code will be shown just before the exponent.
+% Example: #4=\cdot
+% #5: CODE to display if the mantissa is NOT draw. (unused currently)
+% Might be used to display '10^1' instead of '1*10^1'.
+% #6: CODE to display the exponent.
+\def\pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax#4#5#6{%
+ \pgfkeysgetvalue{/pgf/number format/@sci exponent mark}\pgfmathfloatrounddisplaystyle@e@mark
+ \ifcase#1\relax
+ \pgfmathprintnumber@fixed@style{#2}#1#2e0\relax%
+ \expandafter\pgfmathfloatrounddisplaystyle@shared@impl@\expandafter{\pgfmathresult}{#4#6}%
+ \or\pgfmathprintnumber@fixed@style{#2}#1#2e0\relax%
+ \expandafter\pgfmathfloatrounddisplaystyle@shared@impl@\expandafter{\pgfmathresult}{#4#6}%
+ \or\pgfmathprintnumber@fixed@style{-#2}#1#2e0\relax%
+ \expandafter\pgfmathfloatrounddisplaystyle@shared@impl@\expandafter{\pgfmathresult}{#4#6}%
+ \or
+ \pgfmathfloatrounddisplaystyle@shared@impl@@{\hbox{NaN}}{}%
+ \or
+ \ifpgfmathprintnumber@showpositive
+ \pgfmathfloatrounddisplaystyle@shared@impl@@{+\infty}{}%
+ \else
+ \pgfmathfloatrounddisplaystyle@shared@impl@@{\infty}{}%
+ \fi
+ \or
+ \pgfmathfloatrounddisplaystyle@shared@impl@@{-\infty}{}%
+ \fi
+}
+
+% #1: the part before the exponent code
+% #2: the part for the exponent code.
+\def\pgfmathfloatrounddisplaystyle@shared@impl@#1#2{%
+ \pgfmathprintnumber@begingroup
+ \toks0={#1}%
+ \toks1=\expandafter{\pgfmathfloatrounddisplaystyle@e@mark #2}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 }%
+ \pgfmathprintnumber@endgroup
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+}%
+% Same as \pgfmathfloatrounddisplaystyle@shared@impl@, but it also
+% inserts the '@dec sep mark' at the end.
+\def\pgfmathfloatrounddisplaystyle@shared@impl@@#1#2{%
+ \pgfmathprintnumber@begingroup
+ \toks0={#1}%
+ \toks1=\expandafter{\pgfmathfloatrounddisplaystyle@e@mark #2}%
+ \pgfkeysgetvalue{/pgf/number format/@dec sep mark}\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK
+ \toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK}%
+ \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 }%
+ \pgfmathprintnumber@endgroup
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+}
+
+\def\pgfmathfloatrounddisplaystyle@std#1#2e#3\relax{%
+ \pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax{\cdot}{}{10^{#3}}%
+}
+\def\pgfmathfloatrounddisplaystyle@subscript#1#2e#3\relax{%
+ \pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax{}{1}{_{#3}}%
+}
+\def\pgfmathfloatrounddisplaystyle@superscript#1#2e#3\relax{%
+ \pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax{}{1}{^{#3}}%
+}
+\def\pgfmathfloatrounddisplaystyle@e#1#2e#3\relax{%
+ \ifnum#3<0\relax
+ \pgfmathprintnumber@begingroup
+ \count0=#3\relax
+ \multiply\count0 by-1
+ \xdef\pgfmathfloat@glob@TMP{e{-}\the\count0}%
+ \pgfmathprintnumber@endgroup%
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+ \else
+ \def\pgfmathresult{e{+}#3}%
+ \fi
+ \def\pgfmathfloat@loc@TMPb{\pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax{}{1}}%
+ \expandafter\pgfmathfloat@loc@TMPb\expandafter{\pgfmathresult}%
+}
+\def\pgfmathfloatrounddisplaystyle@E#1#2e#3\relax{%
+ \ifnum#3<0\relax
+ \pgfmathprintnumber@begingroup
+ \count0=#3\relax
+ \multiply\count0 by-1
+ \xdef\pgfmathfloat@glob@TMP{E{-}\the\count0}%
+ \pgfmathprintnumber@endgroup%
+ \let\pgfmathresult=\pgfmathfloat@glob@TMP
+ \else
+ \def\pgfmathresult{E{+}#3}%
+ \fi
+ \def\pgfmathfloat@loc@TMPb{\pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax{}{1}}%
+ \expandafter\pgfmathfloat@loc@TMPb\expandafter{\pgfmathresult}%
+}
+
+\def\pgfmathfloatrounddisplaystyle@generic#1#2e#3\relax{%
+ \begingroup
+ \pgfkeysvalueof {/pgf/number format/sci generic/@/.@cmd}{#3}{#1}{#2}\pgfeov
+ \pgfkeysgetvalue{/pgf/number format/sci generic/mantissa sep}\pgfmathdisplay@aftermantissa
+ \pgfkeysgetvalue{/pgf/number format/sci generic/empty mantissa sep}\pgfmathdisplay@nomantissa
+ \pgfkeysgetvalue{/pgf/number format/sci generic/exponent}\pgfmathdisplay@e
+ \toks0=\expandafter{\pgfmathdisplay@aftermantissa}%
+ \toks1=\expandafter{\pgfmathdisplay@nomantissa}%
+ \toks2=\expandafter{\pgfmathdisplay@e}%
+ \xdef\pgfmathfloat@glob@TMP{\noexpand\pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\noexpand\relax{\the\toks0}{\the\toks1}{\the\toks2}}%
+ \endgroup
+ \pgfmathfloat@glob@TMP
+}
+
+% A macro which takes the argument '<SIGN><MANTISSE>e<EXPONENT>' and
+% expands to the final TeX-representation for that floating point
+% number.
+%
+% PRECONDITION:
+% the floating point number has already been rounded properly and
+% the mantissa has been rounded correcty.
+%
+% The argument needs to be in the format returned by
+% \pgfmathfloat@to@FMeE@style and terminated by '\relax'.
+\let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@std
+\newif\ifpgfmathfloat@usezerofill@sci
+\newif\ifpgfmathfloat@usezerofill@fixed
+\newif\ifpgfmathprintnumber@assumemathmode
+\newif\ifpgfmathprintnumber@showpositive
+\newif\ifpgfmathprintnumber@frac@warn
+\newif\ifpgfmathprintnumber@frac@whole
+\newif\ifpgfmathparsenumber@comma@as@period
+
+\long\def\pgfmathfloatfrac@verbatim#1#2{#1/#2}%
+
+\let\pgfmathround@@orig=\pgfmathround@
+
+% 2 = compatible
+% 0 = no
+% 1 = yes
+\def\pgfmathprintnumber@RELATIVE@choice@roundtofixed{2}%
+
+\newif\ifpgfmathprintnumber@thousand@sep@in@fractional
+\pgfkeys{%
+ /pgf/number format/.is family,
+ /pgf/number format,
+ fixed/.code= \pgfmath@set@number@printer{pgfmathprintnumber@FIXED},
+ sci/.code= \pgfmath@set@number@printer{pgfmathprintnumber@SCI},
+ std/.code= {\pgfmath@set@number@printer{pgfmathprintnumber@STD}\pgfmathprintnumber@STD@setparam{#1}},
+ std/.default=,%
+ relative round mode/.is choice,
+ relative round mode/fixed/.code={\def\pgfmathprintnumber@RELATIVE@choice@roundtofixed{1}},
+ relative round mode/mantissa/.code={\def\pgfmathprintnumber@RELATIVE@choice@roundtofixed{0}},
+ relative round mode/compatible/.code={\def\pgfmathprintnumber@RELATIVE@choice@roundtofixed{2}},
+ % relative={<exponent base 10>}
+ relative/.code= {%
+ \pgfmath@set@number@printer{pgfmathprintnumber@RELATIVE}%
+ \pgfmathround@@orig{#1}%
+ \expandafter\pgfmathfloattoint@@\pgfmathresult\relax
+ \let\pgfmathprintnumber@RELATIVE@param=\pgfmathresult
+ },%
+ relative/.value required,
+ relative*/.style={/pgf/number format/relative={#1},/pgf/number format/relative round mode=fixed},
+ every relative/.style=std,
+ relative style/.style={/pgf/number format/every relative/.append style={#1}},
+ fixed relative/.code= \pgfmath@set@number@printer{pgfmathprintnumber@FIXED@RELATIVE},
+ int detect/.code= \pgfmath@set@number@printer{pgfmathprintnumber@INT@DETECT},
+ int trunc/.code= \pgfmath@set@number@printer{pgfmathprintnumber@INT@TRUNC},
+ frac/.code= \pgfmath@set@number@printer{pgfmathprintnumber@frac},%
+ frac TeX/.initial=\frac,
+ frac whole format/.code={\def\pgfmathresult{#1}},
+ frac denom/.initial=,
+ frac whole/.is if=pgfmathprintnumber@frac@whole,
+ frac whole=true,
+ frac shift/.initial=4,
+ frac warning/.is if=pgfmathprintnumber@frac@warn,
+ frac warning=true,
+ assume math mode/.is if=pgfmathprintnumber@assumemathmode,
+ assume math mode/.default=true,
+ fixed zerofill/.is if= pgfmathfloat@usezerofill@fixed,
+ fixed zerofill/.default=true,
+ sci zerofill/.is if= pgfmathfloat@usezerofill@sci,
+ sci zerofill/.default=true,
+ zerofill/.style= {/pgf/number format/fixed zerofill=#1,/pgf/number format/sci zerofill=#1},
+ zerofill/.default= true,
+ precision/.store in= \pgfmathfloat@round@precision,
+ sci precision/.code={%
+ \edef\pgfmathfloat@loc@TMPa{#1}%
+ \ifx\pgfmathfloat@loc@TMPa\pgfutil@empty
+ \def\pgfmathprintnumber@sci@precision{\pgfmathfloat@round@precision}%
+ \else
+ \let\pgfmathprintnumber@sci@precision=\pgfmathfloat@loc@TMPa
+ \fi
+ },%
+ sci precision/.default=,
+ sci precision=,
+ fixed default/.code= {\let\pgfmathprintnumber@fixed@style=\pgfmathprintnumber@fixed@styleDEFAULT},
+ set decimal separator/.initial=,
+ dec sep/.style={/pgf/number format/set decimal separator={#1}},
+ @dec sep mark/.initial=,
+ @sci exponent mark/.initial=,
+ set thousands separator/.initial=,
+ 1000 sep in fractionals/.is if=pgfmathprintnumber@thousand@sep@in@fractional,
+ 1000 sep in fractionals/.default=true,
+ 1000 sep/.style={/pgf/number format/set thousands separator={#1}},
+ min exponent for 1000 sep/.initial=0,
+ use period/.style= {/pgf/number format/set decimal separator={.},/pgf/number format/set thousands separator={{{,}}}},
+ use comma/.style= {/pgf/number format/set decimal separator={{{,}}},/pgf/number format/set thousands separator={.}},
+ showpos/.is if=pgfmathprintnumber@showpositive,
+ showpos/.default=true,
+ print sign/.is if=pgfmathprintnumber@showpositive,
+ print sign/.default=true,
+ read comma as period/.is if=pgfmathparsenumber@comma@as@period,
+ read comma as period/.default=true,
+ skip 0./.is if=pgfmathprintnumberskipzeroperiod,
+ skip 0./.default=true,
+ skip 0.= false,
+ use period,
+ sci 10^e/.code= {\let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@std},
+ sci 10e/.code= {\let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@std},
+ sci e/.code= {\let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@e},
+ sci E/.code= {\let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@E},
+ sci subscript/.code= {\let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@subscript},
+ sci superscript/.code= {\let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@superscript},
+ sci generic/.code= {%
+ \let\pgfmathfloatrounddisplaystyle=\pgfmathfloatrounddisplaystyle@generic
+ \pgfkeysdefargs{/pgf/number format/sci generic/@}%
+ {##1##2##3}%
+ {\pgfqkeys{/pgf/number format/sci generic}{#1}}%
+ },
+ sci generic/mantissa sep/.initial=,%
+ sci generic/empty mantissa sep/.initial=,%
+ sci generic/mantisse sep/.style={/pgf/number format/sci generic/mantissa sep={#1}},%
+ sci generic/empty mantisse sep/.style={/pgf/number format/sci generic/empty mantissa sep={#1}},%
+ sci generic/exponent/.initial=,%
+ sci generic/.value required,
+ verbatim/.code={%
+ \pgfqkeys{/pgf/number format}{%
+ sci generic={mantissa sep=,exponent={e##1}},
+ 1000 sep=,
+ skip 0.=false,
+ print sign=false,
+ dec sep=.,
+ assume math mode,
+ frac TeX=\pgfmathfloatfrac@verbatim,
+ frac whole format/.code={\def\pgfmathresult{##1 }},
+ @dec sep mark=,
+ @sci exponent mark=,
+ }%
+ },
+% sci may skip mantissa/.is if=pgfmathfloatround@allow@empty@mantissa,
+% sci may skip mantissa/.default=true,
+}
+
+
+
+\def\pgfmathprintnumber@STD#1{%
+ % parse the input:
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathprintnumber@STD@issci\pgfmathresult\relax
+}
+
+\def\pgfmathprintnumber@STD@setparam#1{%
+ \edef\pgfmathfloat@loc@TMPb{#1}%
+ \ifx\pgfmathfloat@loc@TMPb\pgfutil@empty
+ % DEFAULT for lower and upper bound.
+ \def\pgfmathprintnumber@STD@getlowerbound{%
+ \c@pgf@counta=\pgfmathfloat@round@precision@orig\relax
+ \divide\c@pgf@counta by-2\relax
+ }%
+ \def\pgfmathprintnumber@STD@upperbound{4}%
+ \else
+ \expandafter\pgfutil@in@\expandafter:\expandafter{\pgfmathfloat@loc@TMPb}%
+ \ifpgfutil@in@
+ % we have -4:5 or something like that.
+ % parse both values:
+ \def\pgfmathfloat@loc@TMPa##1:##2\relax{%
+ \edef\pgfmathprintnumber@STD@getlowerbound{%
+ \noexpand\c@pgf@counta=##1\space
+ }%
+ \edef\pgfmathprintnumber@STD@upperbound{##2}%
+ }%
+ \expandafter\pgfmathfloat@loc@TMPa\pgfmathfloat@loc@TMPb\relax
+ \else
+ % we have just the lower bound:
+ \def\pgfmathprintnumber@STD@upperbound{4}%
+ \edef\pgfmathprintnumber@STD@getlowerbound{%
+ \noexpand\c@pgf@counta=\pgfmathfloat@loc@TMPb\space
+ }%
+ \fi
+ \fi
+}%
+
+\def\pgfmathprintnumber@STD@issci#1#2e#3\relax{%
+ \expandafter\ifnum#1<3
+ \expandafter\ifnum#3>\pgfmathprintnumber@STD@upperbound\relax
+ \pgfmathprintnumber@SCI@issci#1#2e#3\relax%
+ \else
+ \begingroup
+ \pgfmathprintnumber@STD@getlowerbound
+ \ifnum#3<\c@pgf@counta
+ \pgfmathprintnumber@SCI@issci#1#2e#3\relax%
+ \else
+ \pgfmathprintnumber@FIXED@issci#1#2e#3\relax%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \fi
+ \else% nan or inf:
+ \pgfmathfloatrounddisplaystyle#1#2e#3\relax%
+ \fi
+}
+
+\def\pgfmathprintnumber@RELATIVE#1{%
+ % parse the input:
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathprintnumber@RELATIVE@issci\pgfmathresult\relax
+}
+
+\def\pgfmathprintnumber@RELATIVE@choice@roundtofixed@warn{%
+ \immediate\write16{! Package pgf warning: the use of /pgf/number format/relative is discouraged (buggy). Please use 'relative*' instead or type \string\pgfkeys{/pgf/number format/relative round mode=fixed} into your preamble.}%
+ \global\let\pgfmathprintnumber@RELATIVE@choice@roundtofixed@warn=\relax
+}
+
+\def\pgfmathprintnumber@RELATIVE@issci#1#2e#3\relax{%
+ \begingroup
+ % format X / 10^{relative}:
+ \c@pgf@counta=#3\relax
+ \advance\c@pgf@counta by-\pgfmathprintnumber@RELATIVE@param\relax
+ \pgfmathfloatcreate{#1}{#2}{\the\c@pgf@counta}%
+ % OK, round it to the desired precision:
+ \if0\pgfmathprintnumber@RELATIVE@choice@roundtofixed
+ % relative round mode=mantissa
+ \def\b@round@fixed{0}%
+ \else
+ \if1\pgfmathprintnumber@RELATIVE@choice@roundtofixed
+ % relative round mode=fixed
+ \def\b@round@fixed{1}%
+ \else
+ \pgfmathprintnumber@RELATIVE@choice@roundtofixed@warn
+ % relative round mode=compatible
+ \ifnum\c@pgf@counta>0
+ % hm. for positive exponents, we should round the
+ % mantissa rather than only the fractional part.
+ \def\b@round@fixed{0}%
+ \else
+ % negative exponent -> round fixed representation:
+ \def\b@round@fixed{1}%
+ \fi
+ \fi
+ \fi
+ \if1\b@round@fixed
+ % round fixed representation:
+ \pgfmathfloattofixed\pgfmathresult
+ \expandafter\pgfmathroundto\expandafter{\pgfmathresult}%
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \pgfmathfloatroundhasperiodtrue% make sure the code below works:
+ \else
+ % round the mantissa:
+ \expandafter\pgfmathfloatround\expandafter{\pgfmathresult}%
+ \fi
+ % Now, compute result * 10^{relative} and format the result:
+ \pgfmathfloattoregisterstok\pgfmathresult\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifnum\pgfmathfloat@a@S=0
+ \pgfmathfloat@a@E=\pgfmathfloat@a@S % avoid 0 * 10^8
+ \else
+ \advance\pgfmathfloat@a@E by+\pgfmathprintnumber@RELATIVE@param\relax
+ \fi
+ \edef\pgfmathresultX{%
+ \the\pgfmathfloat@a@S
+ \the\pgfmathfloat@a@Mtok
+ \ifpgfmathfloatroundhasperiod\else.0\fi
+ e\the\pgfmathfloat@a@E}%
+ % call another formatter for the result (but avoid rounding inside of it):
+ \pgfqkeys{/pgf/number format}{/pgf/number format/every relative,
+ fixed zerofill=false,% useless here!
+ sci zerofill=false}%
+ \ifx\pgfmathprintnumber@issci\pgfmathprintnumber@RELATIVE@issci
+ \pgfmath@error{The '/pgf/number format/every relative' style should set a valid display style}%
+ \fi
+ \let\pgfmathfloat@round@precision@orig=\pgfmathfloat@round@precision
+ \def\pgfmathfloat@round@precision{9999}%
+ \expandafter\pgfmathprintnumber@issci\pgfmathresultX\relax%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+\def\pgfmathprintnumber@FIXED@RELATIVE#1{%
+ % parse the input:
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathprintnumber@FIXED@RELATIVE@issci\pgfmathresult\relax
+}
+
+\def\pgfmathprintnumber@FIXED@RELATIVE@issci#1#2e#3\relax{%
+ \begingroup
+ \pgfmathfloatcreate{#1}{#2}{#3}%
+ % we want the first <precision> digits - not the first
+ % <precision>+1 digits:
+ \c@pgf@counta=\pgfmathfloat@round@precision\relax
+ \advance\c@pgf@counta by-1
+ \edef\pgfmathfloat@round@precision{\the\c@pgf@counta}%
+ \pgfmathfloatround{\pgfmathresult}%
+ \pgfmathfloattoregisterstok\pgfmathresult\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \ifnum\pgfmathfloat@a@S=0
+ \pgfmathfloat@a@E=\pgfmathfloat@a@S % avoid 0 * 10^8
+ \fi
+ \edef\pgfmathresultX{%
+ \the\pgfmathfloat@a@S
+ \the\pgfmathfloat@a@Mtok
+ \ifpgfmathfloatroundhasperiod\else.0\fi
+ e\the\pgfmathfloat@a@E}%
+ \let\pgfmathfloat@round@precision@orig=\pgfmathfloat@round@precision
+ \pgfmathfloat@usezerofill@fixedfalse
+ \def\pgfmathfloat@round@precision{9999}% typeset all remaining digits!
+ \expandafter\pgfmathprintnumber@FIXED@issci\pgfmathresultX\relax%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+\def\pgfmathprintnumber@frac#1{%
+ % parse the input:
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloatgetfrac{\pgfmathresult}%
+ \expandafter\pgfmathprintnumber@frac@formatresult\pgfmathresult
+}
+\def\pgfmathprintnumber@frac@issci#1#2e#3\relax{%
+ \pgfmathfloatcreate{#1}{#2}{#3}%
+ \pgfmathfloatgetfrac{\pgfmathresult}%
+ \expandafter\pgfmathprintnumber@frac@formatresult\pgfmathresult
+}
+\def\pgfmathprintnumber@frac@formatresult#1#2#3{%
+ \begingroup
+ \pgfkeysgetvalue{/pgf/number format/frac TeX}\pgfmathresult
+ \toks0=\expandafter{\pgfmathresult}%
+ \def\pgfmathfloat@loc@TMPa{#1}%
+ \ifx\pgfmathfloat@loc@TMPa\pgfutil@empty
+ \ifpgfmathprintnumber@showpositive
+ \def\pgfmathfloat@loc@TMPa{+}%
+ \fi
+ \else
+ \ifx\pgfmathfloat@loc@TMPa-%
+ \else
+ \ifx\pgfmathfloat@loc@TMPa+%
+ \else
+ \ifpgfmathprintnumber@showpositive
+ \edef\pgfmathfloat@loc@TMPa{+\pgfmathfloat@loc@TMPa}%
+ \fi
+ \def\pgfmathfloat@loc@TMPb{\pgfkeysvalueof{/pgf/number format/frac whole format/.@cmd}}%
+ \expandafter\pgfmathfloat@loc@TMPb\pgfmathfloat@loc@TMPa\pgfeov
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \fi
+ \fi
+ \fi
+ \toks1=\expandafter{\pgfmathfloat@loc@TMPa}%
+ \edef\pgfmathresult{%
+ \the\toks1 \ifnum#2=0 \else\the\toks0 {#2}{#3}\fi%
+ }%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% Defines \pgfmathresult to contain three sets of braces containing
+% the sign (optionally containing any components >1), the numerator and the denominator for #1.
+%
+% \pgfmathfloatgetfrac{0.5} -> \pgfmathresult contains {}{1}{2}
+% \pgfmathfloatgetfrac{-0.5} -> \pgfmathresult contains {-}{1}{2}
+% \pgfmathfloatgetfrac{1.5} -> \pgfmathresult contains {1}{1}{2}
+%
+% special cases:
+% \pgfmathfloatgetfrac{0} -> \pgfmathresult contains {0}{0}{1}
+% \pgfmathfloatgetfrac{1} -> \pgfmathresult contains {1}{0}{1}
+%
+% The numerator and denominator is always a number (not empty)
+\def\pgfmathfloatgetfrac#1{%
+ \pgfutil@ifundefined{pgfmathfloatmultiply@}{%
+ \pgfmath@PackageError{Sorry, the number format 'frac' requires '\string\usetikzlibrary{fpu}' (and, optionally, \string\usepackage{fp}) in order to work correctly}%
+ \edef\pgfmathresult{{#1}{0}{1}}%
+ }{%
+ \pgfmathfloatgetfrac@{#1}%
+ }%
+}%
+\def\pgfmathfloatgetfrac@#1{%
+ \begingroup
+ \edef\pgfmathfloat@arg{#1}%
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathfloat@arg\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \def\pgfmathfloat@loc@TMPa{0}%
+ \ifcase\pgfmathfloat@a@S
+ % #1 = 0:
+ \def\pgfmathresult{{0}{0}{1}}%
+ \or% #1 > 0
+ \pgfmathfloat@a@S=1
+ \def\pgfmathfloat@loc@TMPa{1}%
+ \or% #1 < 0
+ \pgfmathfloat@a@S=-1
+ \def\pgfmathfloat@loc@TMPa{1}%
+ \or
+ \edef\pgfmathresult{{}{NaN}{1}}%
+ \or
+ \edef\pgfmathresult{{}{\infty}{1}}%
+ \or
+ \edef\pgfmathresult{{-}{\infty}{1}}%
+ \fi
+ \if1\pgfmathfloat@loc@TMPa
+ \ifnum\pgfmathfloat@a@E<0
+ \def\pgfmathfloat@wholenumber{}%
+ \else
+ \pgfmathfloatcreate{1}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \pgfmathfloattofixed\pgfmathresult%
+ \def\pgfmathfloat@loc@TMPa##1.##2\relax{%
+ \def\pgfmathfloat@wholenumber{##1}%
+ \pgfmathfloatparsenumber{0.##2}%
+ }%
+ \expandafter\pgfmathfloat@loc@TMPa\pgfmathresult\relax
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@b@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \fi
+ %
+ \def\pgfmathfloat@loc@TMPa##1.##2\relax{%
+ \def\pgfmathfloat@mantissa@first{##1}%
+ \def\pgfmathfloat@mantissa@ltone{0.##2}%
+ }%
+ \expandafter\pgfmathfloat@loc@TMPa\the\pgfmathfloat@a@Mtok\relax
+ %
+ \def\pgfmathfloat@loc@@to@int##1.##2\relax##3{%
+ ##3=##1
+ \ifdim0.##2pt>0.5pt
+ \advance##3 by1
+ \fi
+ }%
+ %
+ % alias registers names:
+ \let\pgfmathresultnumerator=\pgfmathfloat@b@S
+ \let\pgfmathresultdenom=\pgfmathfloat@b@E
+ %
+ \pgfkeysgetvalue{/pgf/number format/frac denom}\pgfmath@target@denominator
+ \ifx\pgfmath@target@denominator\pgfutil@empty
+ %
+ \pgfmathfloat@a@E=-\pgfmathfloat@a@E
+ \ifdim\pgfmathfloat@mantissa@ltone pt=0pt
+ \def\pgfmathfloat@factor{1}%
+ \edef\pgfmathfloat@scaled@numerator{\the\pgfmathfloat@a@Mtok}%
+ \else
+ % FIXME : this here is numerically instable.
+ %
+ % The errors of 1/r are magnified by 10^k which
+ % doesn't work.
+ \pgfutil@ifundefined{FPdiv}{%
+ \pgfmathfloatparsenumber{\pgfmathfloat@mantissa@ltone}%
+ \pgfmathfloatreciprocal@{\pgfmathresult}%
+ }{%
+ % \usepackage{fp}.
+ % yields higher absolute precision.
+ \FPmessagesfalse%
+ \FPdebugfalse%
+ \FPdiv\pgfmathresult{1}{\pgfmathfloat@mantissa@ltone}%
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ }%
+ \let\pgfmathfloat@inv=\pgfmathresult
+ \pgfmathfloatcreate{1}{1.0}{\pgfkeysvalueof{/pgf/number format/frac shift}}%
+ \let\pgfmathfloat@scalebaseten=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfmathfloat@inv}{\pgfmathfloat@scalebaseten}%
+ \let\pgfmathfloat@factor=\pgfmathresult
+ %
+ \expandafter\pgfmathfloatparsenumber\expandafter{\the\pgfmathfloat@a@Mtok}%
+ \let\pgfmathfloat@loc@TMPa=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfmathfloat@factor}{\pgfmathfloat@loc@TMPa}%
+ \pgfmathfloattofixed\pgfmathresult
+ \let\pgfmathfloat@scaled@numerator=\pgfmathresult
+ %
+ \pgfmathfloattofixed\pgfmathfloat@factor
+ \expandafter\pgfmathfloat@loc@@to@int\pgfmathresult\relax{\pgfmathfloat@b@S}%
+ \edef\pgfmathfloat@factor{\the\pgfmathfloat@b@S}%
+ \fi
+ %
+ %
+ \pgfmathresultdenom=\pgfmathfloat@factor\relax
+ \pgfmathfloat@multiply@ten@to@the@E\pgfmathresultdenom
+ %
+ \expandafter\pgfmathfloat@loc@@to@int\pgfmathfloat@scaled@numerator\relax{\pgfmathresultnumerator}%
+ %\message{scale = \pgfmathfloat@factor; Z = \the\pgfmathresultnumerator\space ( von \pgfmathfloat@scaled@numerator), N = \the\pgfmathresultdenom.}%
+ %
+ \pgfmathgreatestcommondivisor{\pgfmathresultnumerator}{\pgfmathresultdenom}%
+ \divide\pgfmathresultnumerator by\pgfmathresult\relax
+ \divide\pgfmathresultdenom by\pgfmathresult\relax
+ \ifpgfmathprintnumber@frac@warn
+ \ifnum\pgfmathresultdenom>1000
+ \pgfutil@ifundefined{FPdiv}{%
+ \pgfmathfloattosci@\pgfmathfloat@arg
+ \immediate\write16{! Package pgf /pgf/number format/frac warning=true: /pgf/number format/frac of `\pgfmathresult' = \the\pgfmathresultnumerator\space / \the\pgfmathresultdenom\space might be large due to instabilities. Try \string\usepackage{fp} to improve accuracy.}%
+ }{}%
+ \fi
+ \fi
+ \else
+ % use target denominator:
+ \pgfmathresultdenom=\pgfmath@target@denominator\relax
+ \pgfmathfloatcreate{1}{\the\pgfmathfloat@a@Mtok}{\the\pgfmathfloat@a@E}%
+ \pgfmathfloattofixed\pgfmathresult
+ \pgf@xa=\pgfmathresult pt
+ \multiply\pgf@xa by\pgfmathresultdenom
+ \edef\pgfmathfloat@scaled@numerator{\pgf@sys@tonumber\pgf@xa}%
+ \expandafter\pgfmathfloat@loc@@to@int\pgfmathfloat@scaled@numerator\relax{\pgfmathresultnumerator}%
+ \fi
+ \ifpgfmathprintnumber@frac@whole
+ \else
+ \ifx\pgfmathfloat@wholenumber\pgfutil@empty
+ \else
+ \count0=\pgfmathfloat@wholenumber\relax
+ \multiply\count0 by\pgfmathresultdenom
+ \advance\pgfmathresultnumerator by\count0
+ \def\pgfmathfloat@wholenumber{}%
+ \fi
+ \fi
+ \ifnum\pgfmathfloat@a@S<0
+ \edef\pgfmathresult{{-\pgfmathfloat@wholenumber}{\the\pgfmathresultnumerator}{\the\pgfmathresultdenom}}%
+ \else
+ \edef\pgfmathresult{{\pgfmathfloat@wholenumber}{\the\pgfmathresultnumerator}{\the\pgfmathresultdenom}}%
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\def\pgfmathfloat@gobble@until@relax#1\relax{}
+
+% computes the greatest common divisor of two integer numbers (in
+% integer arithmetics).
+\def\pgfmathgreatestcommondivisor#1#2{%
+ \begingroup
+ \count0=#1\relax
+ \count1=#2\relax
+ \ifnum\count0=0
+ \edef\pgfmathresult{\the\count1}%
+ \else
+ \pgfmathgreatestcommondivisor@loop
+ \edef\pgfmathresult{\the\count0}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+\def\pgfmathgreatestcommondivisor@loop{%
+ \ifnum\count1=0
+ \else
+ \ifnum\count0>\count1
+ \advance\count0 by-\count1
+ \else
+ \advance\count1 by-\count0
+ \fi
+ \expandafter\pgfmathgreatestcommondivisor@loop
+ \fi
+}%
+
+% multiplies a TeX register by 10^E where E is stored in the register
+% \pgfmathfloat@a@E (and it should be positive!)%
+%
+% #1 a TeX register
+\def\pgfmathfloat@multiply@ten@to@the@E#1{%
+ \ifnum\pgfmathfloat@a@E>0
+ \multiply#1 by10
+ \advance\pgfmathfloat@a@E by-1
+ \def\pgfmathfloat@multiply@ten@to@the@E@next{\pgfmathfloat@multiply@ten@to@the@E{#1}}%
+ \else
+ \let\pgfmathfloat@multiply@ten@to@the@E@next=\relax%
+ \fi
+ \pgfmathfloat@multiply@ten@to@the@E@next
+}%
+
+\def\pgfmathprintnumber@INT@TRUNC#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathprintnumber@INT@TRUNC@issci\pgfmathresult\relax
+}
+
+\def\pgfmathprintnumber@INT@TRUNC@impl#1.#2\relax#3#4e#5\relax{%
+ \pgfmathfloatroundhasperiodfalse
+ \pgfmathprintnumber@fixed@style{#1}#3#4e#5\relax%
+}
+\def\pgfmathprintnumber@INT@TRUNC@issci#1#2e#3\relax{%
+ \ifnum#1<3\relax
+ \pgfmathfloatcreate{#1}{#2}{#3}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \expandafter\pgfmathprintnumber@INT@TRUNC@impl\pgfmathresult\relax#1#2e#3\relax
+ \else
+ \pgfmathfloatrounddisplaystyle#1#2e#3\relax%
+ \fi
+}
+
+% Invokes '#2' if '#1' is actually an integer or '#3' if not.
+%
+% As a side--effect, \pgfretval will be set to the integer value if it
+% actually *is* an integer. Otherwise, \pgfretval will contain the
+% parsed floating point number.
+%
+% #1 a number constant (not necessarily a parsed float).
+\def\pgfmathifisint#1#2#3{%
+ \gdef\pgfmathfloatisint@@{0}%
+ \begingroup
+ \pgfmathfloatparsenumber{#1}%
+ \let\pgfretval\pgfmathresult
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathfloatisint@\pgfmathresult\relax
+ \pgfmath@smuggleone\pgfretval
+ \endgroup
+ \if1\pgfmathfloatisint@@ #2\else #3\fi
+}%
+\def\pgfmathfloatisint@#1#2e#3\relax{%
+ \ifnum#1<3\relax
+ \pgfmathfloatcreate{#1}{#2}{#3}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \def\pgfmathfloat@round@precision{6}%
+ \expandafter\pgfmathroundto\expandafter{\pgfmathresult}%
+ \ifpgfmathfloatroundhasperiod
+ \else
+ \let\pgfretval\pgfmathresult%
+ \gdef\pgfmathfloatisint@@{1}%
+ \fi
+ \fi
+}
+
+\def\pgfmathprintnumber@INT@DETECT#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathprintnumber@INT@DETECT@issci\pgfmathresult\relax
+}
+
+\def\pgfmathprintnumber@INT@DETECT@issci#1#2e#3\relax{%
+ \begingroup
+ \ifnum#1<3\relax
+ \pgfmathfloatcreate{#1}{#2}{#3}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \let\pgfmathfloat@round@precision@=\pgfmathfloat@round@precision
+ \def\pgfmathfloat@round@precision{6}%
+ \expandafter\pgfmathroundto\expandafter{\pgfmathresult}%
+ \let\pgfmathfloat@round@precision=\pgfmathfloat@round@precision@
+ \ifpgfmathfloatroundhasperiod
+ \pgfmathprintnumber@SCI@issci#1#2e#3\relax
+ \else
+ \expandafter\pgfmathprintnumber@fixed@style\expandafter{\pgfmathresult}#1#2e#3\relax
+ \fi
+ \else
+ \pgfmathfloatrounddisplaystyle#1#2e#3\relax%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+\def\pgfmathprintnumber@FIXED#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathprintnumber@FIXED@issci\pgfmathresult\relax
+}
+
+\def\pgfmathprintnumber@FIXED@issci#1#2e#3\relax{%
+ \begingroup
+ \ifnum#1<3
+ \pgfmathfloatcreate{#1}{#2}{#3}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \ifpgfmathfloat@usezerofill@fixed
+ \expandafter\pgfmathroundtozerofill\expandafter{\pgfmathresult}%
+ \else
+ \expandafter\pgfmathroundto\expandafter{\pgfmathresult}%
+ \fi
+ \ifpgfmathfloatroundmayneedrenormalize
+ \pgfmathfloat@a@E=#3\relax
+ \advance\pgfmathfloat@a@E by1
+ \edef\pgfmathfloat@loc@TMPb{\noexpand\pgfmathprintnumber@fixed@style{\pgfmathresult}#1#2e\the\pgfmathfloat@a@E}%
+ \pgfmathfloat@loc@TMPb\relax%
+ \else
+ \expandafter\pgfmathprintnumber@fixed@style\expandafter{\pgfmathresult}#1#2e#3\relax%
+ \fi
+ \else% nan or inf:
+ \pgfmathfloatrounddisplaystyle#1#2e#3\relax%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+
+\def\pgfmathprintnumber@SCI#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathprintnumber@SCI@issci\pgfmathresult\relax
+}
+
+\def\pgfmathprintnumber@SCI@issci#1#2e#3\relax{%
+ \begingroup
+ \pgfmathfloatcreate{#1}{#2}{#3}%
+ \edef\pgfmathfloat@round@precision{\pgfmathprintnumber@sci@precision}%
+ \ifpgfmathfloat@usezerofill@sci
+ \pgfmathfloatroundzerofill{\pgfmathresult}%
+ \else
+ \pgfmathfloatround{\pgfmathresult}%
+ \fi
+ \pgfmathfloat@to@FMeE@style\pgfmathresult
+ \expandafter\pgfmathfloatrounddisplaystyle\pgfmathresult\relax
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+% Prints argument #1 using the current pretty printer environment (all
+% variables in /pgf/number format).
+%
+% You may specify optional arguments with \pgfmathprintnumber[...].
+\def\pgfmathprintnumber{%
+ % \protect allows to supply \pgfmathprintnumber inside of latex
+ % captions. The \csname yields \relax in case protect is undefined.
+ \pgf@texdist@protect\pgfmathprintnumber@protected
+}%
+\def\pgfmathprintnumber@protected{%
+ \pgfutil@ifnextchar[%
+ {\pgfmathprintnumber@OPT}%
+ {\pgfmathprintnumber@noopt}%
+}
+
+\def\pgfmathprintnumber@noopt#1{%
+ \pgfmathprintnumber@{#1}%
+ \ifpgfmathprintnumber@assumemathmode
+ \pgfmathresult
+ \else
+ \pgfutilensuremath{\pgfmathresult}%
+ \fi
+}%
+\def\pgfmathprintnumber@OPT[#1]#2{%
+ \begingroup
+ \pgfqkeys{/pgf/number format}{#1}%
+ \pgfmathprintnumber@{#2}%
+ \ifpgfmathprintnumber@assumemathmode
+ \pgfmathresult
+ \else
+ \pgfutilensuremath{\pgfmathresult}%
+ \fi
+ \endgroup
+}%
+
+% As \pgfmathprintnumber, but it produces its output into the second
+% argument.
+\def\pgfmathprintnumberto{%
+ \pgfutil@ifnextchar[%
+ {\pgfmathprintnumberto@OPT}%
+ {\pgfmathprintnumberto@noopt}%
+}
+
+\def\pgfmathprintnumberto@noopt#1#2{%
+ \begingroup
+ \pgfmathprintnumber@{#1}%
+ \ifpgfmathprintnumber@assumemathmode
+ \global\let\pgfmathfloat@glob@TMP=\pgfmathresult
+ \else
+ \toks0=\expandafter{\pgfmathresult}%
+ \xdef\pgfmathfloat@glob@TMP{\noexpand\pgfutilensuremath{\the\toks0 }}%
+ \fi
+ \endgroup
+ \let#2=\pgfmathfloat@glob@TMP
+}%
+\def\pgfmathprintnumberto@OPT[#1]#2#3{%
+ \begingroup
+ \pgfqkeys{/pgf/number format}{#1}%
+ \pgfmathprintnumber@{#2}%
+ \ifpgfmathprintnumber@assumemathmode
+ \global\let\pgfmathfloat@glob@TMP=\pgfmathresult
+ \else
+ \toks0=\expandafter{\pgfmathresult}%
+ \xdef\pgfmathfloat@glob@TMP{\noexpand\pgfutilensuremath{\the\toks0 }}%
+ \fi
+ \endgroup
+ \let#3=\pgfmathfloat@glob@TMP
+}%
+
+
+% Changes the current number pretty printer to #1.
+%
+% #1 is the macro base name for the pretty print routine, without the
+% leading '\'.
+\def\pgfmath@set@number@printer#1{%
+ \expandafter\let\expandafter\pgfmathprintnumber@\csname #1\endcsname
+ \expandafter\let\expandafter\pgfmathprintnumber@issci\csname #1@issci\endcsname
+}
+
+\pgfkeys{/pgf/number format/std}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IMPL
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% equals only itsself when compared with \ifx:
+\def\pgfmathfloat@EOI{\pgfmathfloat@EOI}%
+
+% Re-use counters internally.
+%
+% They are always grouped and only used inside of the rounding
+% routines.
+\let\c@pgfmathroundto@prec=\pgfmathfloat@b@S% ATTENTION: DOUBLE-USED REGISTERS!
+\let\c@pgfmathroundto@offsetbehindperiod=\pgfmathfloat@b@E
+\newcount\c@pgfmathroundto@lastzeros
+
+\newif\ifpgfmathround@impl@PREPERIOD@is@negative@zero
+
+% PRECONDITION:
+% \ifpgfmathfloatroundhasperiod=\iftrue holds outside of the
+% current TeX group.
+%
+% POSTCONDITION:
+% \ifpgfmathfloatroundhasperiod will be set correctly AFTER the
+% current TeX group.
+% \ifpgfmathfloatroundmayneedrenormalize will be set globally
+\def\pgfmathroundto@impl#1{%
+ \edef\pgfmathround@input{#1}%
+ \global\pgfmathfloatroundmayneedrenormalizefalse
+ \pgfmathfloat@tmptoks={}%
+ \let\pgfmathround@next=\pgfutil@empty
+ \let\pgfmathround@cur=\pgfutil@empty
+ \let\pgfmathresult=\pgfutil@empty
+ \expandafter\c@pgfmathroundto@prec\pgfmathfloat@round@precision\relax
+ \c@pgfmathroundto@lastzeros=0
+ \c@pgfmathroundto@offsetbehindperiod=-1 % means: no period found so far
+ \pgfmathround@impl@PREPERIOD@is@negative@zerotrue
+ \expandafter\pgfmathroundto@impl@ITERATE@NODOT@firstcall\pgfmathround@input\pgfmathfloat@EOI
+}
+
+% \pgfmathroundto implementation in WORDS:
+%
+% coarse idea:
+% 1. collect all digits/sign BEFORE the first period in REVERSE order
+% 2. then, collect UP TO \prec digits after the period in REVERSE order
+% Steps 1. and 2. lead to the digit [sign] sequence
+% "x_{-p} x_{-p+1} ... x_{-2} x_{-1} '.' x_0 ... x_r"
+% where 'r' is the total number of digits. The integer 'p' denotes the
+% ACTUALLY collected number of digits behind the period.
+%
+% Let 'k' be the desired precision.
+%
+% Please note that pgfmathroundto rounds the mantissa, that means |abs(x)|.
+%
+% There are exactly TWO cases:
+% 1. The case with p<=k and x_{-p-1} = end of input.
+% 2. The case with p=k and x_{-p-1} is a further, next character.
+%
+% Then, for case 1.):
+% discard any unused zeros at the tail of our number (possibly
+% including the period)
+%
+% and in case 2.)
+% if NEXT DIGIT < 5:
+% do exactly the same as in case 1.) above and discard any
+% following digits.
+% else
+% let q := -p
+% while(x_q = 9 and q<=r )
+% if q>=0
+% set x_q = '0'
+% else
+% discard digit x_q='9'
+% fi
+% ++q
+% if q=0
+% discard the period
+% fi
+% end while
+% if q = r+1
+% insert a '1'
+% else
+% set x_q = x_q + 1
+% fi
+% fi
+%
+% All these loops have been implemented in spaghetti-code below.
+% Sorry, I fear its hard to understand. In principle, everything is
+% realised using more or less finite state machines (with some number
+% counting logic).
+%
+% Some comments:
+% - The token register \pgfmathfloat@tmptoks is used to accumulate the REVERSED input number.
+% - \pgfmathfloat@EOI always denotes 'END OF INPUT'.
+% - in the second stage, we need to reverse \pgfmathfloat@tmptoks.
+% This is -again- done with \pgfmathfloat@tmptoks.
+
+\def\pgfmathroundto@impl@discard@period#1.#2\pgfmathfloat@EOI{%
+ \pgfmathfloatroundhasperiodfalse
+ \aftergroup\pgfmathfloatroundhasperiodfalse
+ \def\pgfmathresult{#1}%
+}
+
+\def\pgfmathroundto@impl@gobble@rest@and@start#1\pgfmathfloat@EOI{%
+ \pgfmathroundto@impl@start
+}
+\def\pgfmathroundto@impl@gobble@and@start\pgfmathfloat@EOI{%
+ \pgfmathroundto@impl@start
+}
+\def\pgfmathroundto@impl@gobble\pgfmathfloat@EOI{}%
+\def\pgfmathroundto@impl@gobble@rest#1\pgfmathfloat@EOI{}%
+
+% This method will be invoked as soon as the first step, the reverse
+% collection of up to PREC digits after the period, has finished.
+\def\pgfmathroundto@impl@start{%
+ \ifx\pgfmathround@next\pgfutil@empty
+ \ifnum\c@pgfmathroundto@offsetbehindperiod<0
+ % no period found.
+ \ifpgfmathfloat@fixed@digits@after@period
+ \ifnum\c@pgfmathroundto@prec=0\relax
+ \pgfmathfloatroundhasperiodfalse
+ \aftergroup\pgfmathfloatroundhasperiodfalse
+ \edef\pgfmathresult{\pgfmathround@input}%
+ \else
+ \pgfmathfloat@tmptoks=\expandafter{\pgfmathround@input.}%
+ \c@pgfmathroundto@offsetbehindperiod=\c@pgfmathroundto@prec
+ \pgfmathroundto@impl@append@zeros
+ \edef\pgfmathresult{\the\pgfmathfloat@tmptoks}%
+ \fi
+ \else
+ \pgfmathfloatroundhasperiodfalse
+ \aftergroup\pgfmathfloatroundhasperiodfalse
+ \edef\pgfmathresult{\pgfmathround@input}%
+ \fi
+ \else
+ %\ifnum\c@pgfmathroundto@offsetbehindperiod>\c@pgfmathroundto@prec
+ % \pgfmath@error{Internal logic error in pgfmathroundto at [I] - should not have happened!?}{}%
+ %\fi
+ \pgfmathroundto@impl@finish@with@truncation
+ \fi
+ \else
+ %\ifnum\c@pgfmathroundto@offsetbehindperiod=\c@pgfmathroundto@prec
+ %\else
+ % \pgfmath@error{Internal logic error in pgfmathroundto at [II] - should not have happened!? I have offsetbehindperiod=\the\c@pgfmathroundto@offsetbehindperiod and prec = \the\c@pgfmathroundto@prec}{}%
+ %\fi
+ \expandafter\ifnum\pgfmathround@next<5\relax
+ \pgfmathroundto@impl@finish@with@truncation
+ \else
+ \multiply\c@pgfmathroundto@offsetbehindperiod by-1
+ \expandafter\pgfmathroundto@impl@ADD@ONE\the\pgfmathfloat@tmptoks\pgfmathfloat@EOI
+ \fi
+ \fi
+}
+
+% takes the current input and decides whether trailing zeros shall be
+% discarded or more zeros need to be filled in.
+\def\pgfmathroundto@impl@finish@with@truncation{%
+ \ifpgfmathfloat@fixed@digits@after@period
+ \expandafter\pgfmathroundto@impl@REVERSE\the\pgfmathfloat@tmptoks\pgfmathfloat@EOI
+ \ifnum\c@pgfmathroundto@lastzeros=\c@pgfmathroundto@offsetbehindperiod
+ \ifpgfmathround@impl@PREPERIOD@is@negative@zero
+ % write '0.0000' instead of '-0.0000':
+ \expandafter\pgfmathroundto@impl@discard@minus\the\pgfmathfloat@tmptoks\pgfmathfloat@EOI
+ \fi
+ \fi
+ \ifnum\c@pgfmathroundto@prec=0\relax
+ \expandafter\pgfmathroundto@impl@discard@period\the\pgfmathfloat@tmptoks\pgfmathfloat@EOI
+ \else
+ \advance\c@pgfmathroundto@prec by-\c@pgfmathroundto@offsetbehindperiod
+ \c@pgfmathroundto@offsetbehindperiod=\c@pgfmathroundto@prec
+ \pgfmathroundto@impl@append@zeros
+ \edef\pgfmathresult{\the\pgfmathfloat@tmptoks}%
+ \fi
+ \else
+ \pgfmathroundto@impl@discard@suffix@zeros
+ \fi
+}
+
+\def\pgfmathroundto@impl@discard@minus-#1\pgfmathfloat@EOI{\pgfmathfloat@tmptoks={#1}}%
+
+% appends \c@pgfmathroundto@offsetbehindperiod zeros at the end of \pgfmathfloat@tmptoks.
+\def\pgfmathroundto@impl@append@zeros{%
+ \ifnum\c@pgfmathroundto@offsetbehindperiod>0
+ \pgfmathfloat@tmptoks=\expandafter{\the\pgfmathfloat@tmptoks0}%
+ \advance\c@pgfmathroundto@offsetbehindperiod by-1
+ \pgfmathroundto@impl@append@zeros
+ \fi
+}
+
+\def\pgfmathroundto@impl@ADD@ONE{%
+ \pgfmathfloat@tmptoks={}% no longer needed because its old value will be read from input
+ \pgfmathroundto@impl@ADD@ONE@ITERATE
+}
+\def\pgfmathroundto@impl@ADD@ONE@ITERATE{%
+ \pgfutil@ifnextchar\pgfmathfloat@EOI{%
+ \global\pgfmathfloatroundmayneedrenormalizetrue
+ \edef\pgfmathresult{1\the\pgfmathfloat@tmptoks}%
+ \pgfmathroundto@impl@gobble
+ }{%
+ \pgfutil@ifnextchar.{%
+ \ifnum\c@pgfmathroundto@prec=0
+ % silently discard period in special case precision=0
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ADD@ONE@ITERATE@gobble@dot}%
+ \else
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ADD@ONE@NEXT@COLLECT}%
+ \fi
+ \pgfmathround@nextcmd
+ }{%
+ \pgfutil@ifnextchar+{%
+ \global\pgfmathfloatroundmayneedrenormalizetrue
+ \edef\pgfmathresult{1\the\pgfmathfloat@tmptoks}%
+ \pgfmathroundto@impl@gobble@rest
+ }{%
+ \pgfutil@ifnextchar-{%
+ \global\pgfmathfloatroundmayneedrenormalizetrue
+ \edef\pgfmathresult{-1\the\pgfmathfloat@tmptoks}%
+ \pgfmathroundto@impl@gobble@rest
+ }{%
+ \pgfmathroundto@impl@ADD@ONE@NEXT
+ }%
+ }%
+ }%
+ }%
+}
+
+\def\pgfmathroundto@impl@ADD@ONE@ITERATE@gobble@dot.{%
+ \pgfmathfloatroundhasperiodfalse
+ \aftergroup\pgfmathfloatroundhasperiodfalse
+ \pgfmathroundto@impl@ADD@ONE@ITERATE
+}
+
+\def\pgfmathroundto@impl@ADD@ONE@NEXT@COLLECT#1{%
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter#1\the\pgfmathfloat@tmptoks}%
+ \pgfmathroundto@impl@ADD@ONE@ITERATE
+}
+\def\pgfmathroundto@impl@ADD@ONE@NEXT#1{%
+ \ifnum#1=9
+ \ifnum\c@pgfmathroundto@offsetbehindperiod<0
+ \ifpgfmathfloat@fixed@digits@after@period
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter0\the\pgfmathfloat@tmptoks}%
+ \else
+ % silently DROP digit
+ \fi
+ \else
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter0\the\pgfmathfloat@tmptoks}%
+ \fi
+ \advance\c@pgfmathroundto@offsetbehindperiod by1
+ \ifnum\c@pgfmathroundto@offsetbehindperiod=0
+ \ifpgfmathfloat@fixed@digits@after@period
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ADD@ONE@ITERATE}%
+ \else
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ADD@ONE@ITERATE@gobble@dot}%
+ \fi
+ \else
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ADD@ONE@ITERATE}%
+ \fi
+ \else
+ % re-use this counter:
+ \c@pgfmathroundto@lastzeros=#1
+ \advance\c@pgfmathroundto@lastzeros by1
+ \edef\pgfmathresult{\the\c@pgfmathroundto@lastzeros\the\pgfmathfloat@tmptoks}%
+ \pgfmathfloat@tmptoks=\expandafter{\pgfmathresult}%
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@REVERSE@ITERATE}%
+ \fi
+ \pgfmathround@nextcmd
+}
+
+
+\def\pgfmathroundto@impl@discard@suffix@zeros{%
+ \ifnum\c@pgfmathroundto@lastzeros=\c@pgfmathroundto@offsetbehindperiod
+ \ifpgfmathround@impl@PREPERIOD@is@negative@zero
+ \pgfmathfloatroundhasperiodfalse
+ \aftergroup\pgfmathfloatroundhasperiodfalse
+ \def\pgfmathresult{0}% write '0' instead of '-0'
+ \else
+ \expandafter\pgfmathroundto@impl@discard@period\pgfmathround@input\pgfmathfloat@EOI
+ \fi
+ \else
+ \ifnum\c@pgfmathroundto@lastzeros=0
+ \expandafter\pgfmathroundto@impl@REVERSE\the\pgfmathfloat@tmptoks\pgfmathfloat@EOI
+ \else
+ \expandafter\pgfmathroundto@impl@discard@suffix@zeros@ITERATE\the\pgfmathfloat@tmptoks\pgfmathfloat@EOI
+ \fi
+ \fi
+}
+
+% PRECONDITION:
+% \c@pgfmathroundto@lastzeros > 0
+\def\pgfmathroundto@impl@discard@suffix@zeros@ITERATE#1{%
+ \advance\c@pgfmathroundto@lastzeros by-1
+ \ifnum\c@pgfmathroundto@lastzeros=0
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@REVERSE}%
+ \else
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@discard@suffix@zeros@ITERATE}%
+ \fi
+ \pgfmathround@nextcmd
+}
+
+% Usage:
+% \pgfmathroundto@impl@REVERSE#1\pgfmathfloat@EOI
+% -> writes #1 reversed into \pgfmathfloat@tmptoks
+\def\pgfmathroundto@impl@REVERSE{%
+ \pgfmathfloat@tmptoks={}%
+ \pgfmathroundto@impl@REVERSE@ITERATE
+}
+
+\def\pgfmathroundto@impl@REVERSE@ITERATE{%
+ \pgfutil@ifnextchar\pgfmathfloat@EOI{%
+ \edef\pgfmathresult{\the\pgfmathfloat@tmptoks}%
+ \pgfmathroundto@impl@gobble
+ }{%
+ \pgfmathroundto@impl@REVERSE@NEXT
+ }%
+}
+
+\def\pgfmathroundto@impl@REVERSE@NEXT#1{%
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter#1\the\pgfmathfloat@tmptoks}%
+ \pgfmathroundto@impl@REVERSE@ITERATE
+}
+
+\def\pgfmathroundto@impl@BEGIN@DOT.{%
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter.\the\pgfmathfloat@tmptoks}%
+ \c@pgfmathroundto@offsetbehindperiod=0
+ \pgfmathroundto@impl@ITERATE@DOT
+}
+\def\pgfmathroundto@impl@ITERATE@DOT{%
+ \pgfutil@ifnextchar\pgfmathfloat@EOI{%
+ % finished.
+ \pgfmathroundto@impl@gobble@and@start
+ }{%
+ \pgfmathroundto@impl@NEXT@DOT
+ }%
+}
+\def\pgfmathroundto@impl@NEXT@DOT#1{%
+ \ifnum\c@pgfmathroundto@offsetbehindperiod=\c@pgfmathroundto@prec
+ \def\pgfmathround@next{#1}%
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@gobble@rest@and@start}%
+ \else
+ \advance\c@pgfmathroundto@offsetbehindperiod by1
+ \ifnum#1=0
+ \advance\c@pgfmathroundto@lastzeros by1
+ \else
+ \c@pgfmathroundto@lastzeros=0
+ \fi
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter#1\the\pgfmathfloat@tmptoks}%
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ITERATE@DOT}%
+ \fi
+ \pgfmathround@nextcmd
+}%
+
+% in contrast to pgfmathroundto@impl@ITERATE@NODOT, this method here
+% checks also for signs
+\def\pgfmathroundto@impl@ITERATE@NODOT@firstcall#1{%
+ \def\pgfmathround@cur{#1}%
+ \ifx\pgfmathround@cur\pgfmathfloat@EOI
+ \pgfmathround@impl@PREPERIOD@is@negative@zerofalse
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@start}%
+ \else
+ \ifx\pgfmathround@cur\pgfmathfloatparsenumber@tok@PERIOD
+ \pgfmathround@impl@PREPERIOD@is@negative@zerofalse
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@BEGIN@DOT.}%
+ \else
+ \ifx\pgfmathround@cur\pgfmathfloatparsenumber@tok@MINUS
+ \else
+ \pgfmathround@impl@PREPERIOD@is@negative@zerofalse
+ \fi
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter#1\the\pgfmathfloat@tmptoks}%
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ITERATE@NODOT}%
+ \fi
+ \fi
+ \pgfmathround@nextcmd
+}
+
+\def\pgfmathroundto@impl@ITERATE@NODOT#1{%
+ \def\pgfmathround@cur{#1}%
+ \ifx\pgfmathround@cur\pgfmathfloat@EOI
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@start}%
+ \else
+ \ifx\pgfmathround@cur\pgfmathfloatparsenumber@tok@PERIOD
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@BEGIN@DOT.}%
+ \else
+ \ifx\pgfmathround@cur\pgfmathfloatparsenumber@tok@ZERO
+ \else
+ \pgfmathround@impl@PREPERIOD@is@negative@zerofalse
+ \fi
+ \pgfmathfloat@tmptoks=\expandafter{\expandafter#1\the\pgfmathfloat@tmptoks}%
+ \def\pgfmathround@nextcmd{\pgfmathroundto@impl@ITERATE@NODOT}%
+ \fi
+ \fi
+ \pgfmathround@nextcmd
+}
+
+%--------------------------------------------
+% END of pgfmathroundto implementation.
+%--------------------------------------------
+
+
+% flags, mantissa and exponent has already been stored into
+% \pgfmathfloat@a@* [using ...@Mtok]
+%
+% PRECONDITION:
+% \ifpgfmathfloatroundhasperiod = \iftrue outside of the current
+% group
+%
+% POSTCONDITION:
+% \ifpgfmathfloatroundhasperiod will be set after the current TeX
+% group.
+\def\pgfmathfloatround@impl{%
+ \expandafter\pgfmathroundto@impl\expandafter{\the\pgfmathfloat@a@Mtok}%
+ \ifpgfmathfloatroundmayneedrenormalize
+ \ifpgfmathfloatroundhasperiod
+ \expandafter\pgfmathfloatround@impl@renormalize\pgfmathresult\pgfmathfloat@EOI%
+ \else
+ \expandafter\pgfmathfloatround@impl@renormalize\pgfmathresult.\pgfmathfloat@EOI%
+ \fi
+ \advance\pgfmathfloat@a@E by1
+ \fi
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\pgfmathresult}{\the\pgfmathfloat@a@E}%
+}
+
+\def\pgfmathfloatround@impl@renormalize#1#2.#3\pgfmathfloat@EOI{%
+ \pgfmathroundto@impl{#1.#2#3}%
+}
+
+
+
+
+
+% ATTENTION: this thing REQUIRES a period in the mantissa!
+% collects everything into \pgfmathresult
+\def\pgfmathfloattofixed@impl#1.#2\relax{%
+ \ifnum\pgfmathfloat@a@E<0
+ \ifcase-\pgfmathfloat@a@E
+ \or%e-1
+ \pgfmathfloat@a@Mtok={0.}%
+ \or%e-2
+ \pgfmathfloat@a@Mtok={0.0}%
+ \or%e-3
+ \pgfmathfloat@a@Mtok={0.00}%
+ \or%e-4
+ \pgfmathfloat@a@Mtok={0.000}%
+ \or%e-5
+ \pgfmathfloat@a@Mtok={0.0000}%
+ \or%e-6
+ \pgfmathfloat@a@Mtok={0.00000}%
+ \or%e-7
+ \pgfmathfloat@a@Mtok={0.000000}%
+ \or%e-8
+ \pgfmathfloat@a@Mtok={0.0000000}%
+ \or%e-9
+ \pgfmathfloat@a@Mtok={0.00000000}%
+ \or%e-10
+ \pgfmathfloat@a@Mtok={0.000000000}%
+ \else%<= -11
+ \pgfmathfloat@a@Mtok={0.0000000000}%
+ \advance\pgfmathfloat@a@E by10
+ \pgfutil@loop
+ \ifnum\pgfmathfloat@a@E<-1
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok 0}%
+ \advance\pgfmathfloat@a@E by1
+ \pgfutil@repeat
+ \fi
+ \def\pgfmathfloat@loc@TMPb{#2}%
+ \def\pgfmathfloat@loc@TMPc{0}%
+ \ifx\pgfmathfloat@loc@TMPb\pgfmathfloat@loc@TMPc
+ \edef\pgfmathresult{\the\pgfmathfloat@a@Mtok #1}%
+ \else
+ \edef\pgfmathresult{\the\pgfmathfloat@a@Mtok #1#2}%
+ \fi
+ \else
+ %--------------------------------------------------
+ % \ifnum\pgfmathfloat@a@E=0%
+ % \edef\pgfmathresult{#1.#2}%
+ % \else
+ % \pgfmathfloat@a@Mtok={#1}%
+ % \pgfmathfloattofixed@impl@collectmantissa#2\count\pgfmathfloat@a@E
+ % \edef\pgfmathresult{\the\pgfmathfloat@a@Mtok}%
+ % \fi
+ %--------------------------------------------------
+ \pgfmathfloat@a@Mtok{#1}%
+ \pgfmathfloattofixed@impl@pos#2000000000\pgfmathfloat@EOI
+ \edef\pgfmathresult{\the\pgfmathfloat@a@Mtok}%
+ \fi
+}
+
+% FIXME: this implementation here is very fast, but it introduces trailing zeros. Is that acceptable?
+\def\pgfmathfloattofixed@impl@pos#1#2#3#4#5#6#7#8#9\pgfmathfloat@EOI{%
+ \ifcase\pgfmathfloat@a@E
+ % e+0
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok .#1#2#3#4#5#6#7#8#9}%
+ \or%e+1
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1.#2#3#4#5#6#7#8#9}%
+ \or%e+2
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2.#3#4#5#6#7#8#9}%
+ \or%e+3
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3.#4#5#6#7#8#9}%
+ \or%e+4
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3#4.#5#6#7#8#9}%
+ \or%e+5
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3#4#5.#6#7#8#9}%
+ \or%e+6
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3#4#5#6.#7#8#9}%
+ \or%e+7
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3#4#5#6#7.#8#9}%
+ \or%e+8
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3#4#5#6#7#8.#9}%
+ \else%>=9
+ \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3#4#5#6#7#8}%
+ \advance\pgfmathfloat@a@E by-8
+ \pgfmathfloattofixed@impl@collectmantissa#9\count\pgfmathfloat@a@E
+ \fi
+}%
+
+\def\pgfmathfloattofixed@impl@collectmantissa#1#2\count#3{%
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok #1}%
+ \advance\pgfmathfloat@a@E by-1%
+ \def\pgfmathfloat@loc@TMPb{#2}%
+ \ifx\pgfmathfloat@loc@TMPb\pgfutil@empty
+ \pgfutil@loop
+ \ifnum\pgfmathfloat@a@E>0%
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok 0}%
+ \advance\pgfmathfloat@a@E by-1%
+ \pgfutil@repeat
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok .0}%
+ \else
+ \ifnum\pgfmathfloat@a@E=0
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok .#2}%
+ \else
+ \pgfmathfloattofixed@impl@collectmantissa#2\count#3%
+ \fi
+ \fi
+}
+
+
+% ============================================
+%
+%
+% \pgfmathfloatparsenumber implementation
+%
+%
+% ============================================
+
+% accepted parser tokens:
+\def\pgfmathfloatparsenumber@tok@ZERO{0}
+\def\pgfmathfloatparsenumber@tok@PLUS{+}
+\def\pgfmathfloatparsenumber@tok@MINUS{-}
+\def\pgfmathfloatparsenumber@tok@PERIOD{.}
+
+\newif\ifpgfmathfloatparsenumberpendingperiod
+
+\def\pgfflt@EOI{p@EOI}%
+\def\pgfflt@EOI@unexpanded{\pgfflt@EOI}%
+
+% Starts a finite-start-machine parser to read a number.
+%
+% The machine's state is represented by the macro which is currently
+% processed; state transitions are realised using \csname...#1\endcsname
+% constructions.
+%
+% It assigns \pgfmathfloat@a@S, \pgfmathfloat@a@Mtok, \pgfmathfloat@a@E.
+\def\pgfflt@impl#1{%
+ \pgfmathfloatparsenumberpendingperiodfalse
+ \pgfmathfloat@tmptoks={}% this register is used to collect PENDING ZEROS
+ \pgfmathfloat@a@E=0
+ % start parsing: check for sign:
+ \expandafter\ifx\csname pgfflt@#1\endcsname\relax
+ \pgfmathfloat@a@S=1
+ \expandafter\pgfflt@init\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgfflt@#1\endcsname
+ \fi
+}
+% State transitions:
+\expandafter\def\csname pgfflt@+\endcsname{%
+ \pgfmathfloat@a@S=1 %
+ \pgfflt@init}%
+\expandafter\def\csname pgfflt@-\endcsname{%
+ \pgfmathfloat@a@S=2 %
+ \pgfflt@init}%
+\expandafter\def\csname pgfflt@\pgfflt@EOI\endcsname{%
+ \pgfmathfloatparsenumber@handleerror{empty number}{}{}}%
+
+\pgfkeys{
+ /pgf/fpu/handlers/empty number/.style 2 args={%
+ /pgf/fpu/handlers/invalid number={#1}{#2}%
+ },
+ /pgf/fpu/empty number is zero/.style={%
+ /pgf/fpu/handlers/empty number/.code 2 args={%
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ }%
+ },%
+ /pgf/fpu/handlers/invalid separator/.code 2 args={%
+ \pgfmath@error{Could not parse input '#1' as a floating point number, sorry. The unreadable part was near the decimal separator '#2'. Do you need the option 'read comma as period'?}{}%
+ },
+ /pgf/fpu/handlers/invalid number/.code 2 args={%
+ \pgfmath@error{Could not parse input '#1' as a floating point number, sorry. The unreadable part was near '#2'.}{}%
+ },
+ /pgf/fpu/handlers/wrong lowlevel format/.code 2 args={%
+ \pgfmath@error{Sorry, an internal routine of the floating point unit got an ill-formatted floating point number `#1'. The unreadable part was near '#2'.}{}%
+ \let\pgfmathresult=\pgfutil@empty
+ },
+}
+
+% #1 the error handler
+% #2 the number which was invalid.
+% #3 the part which produced the error
+%
+% POSTCONDITION: the three registers
+% \pgfmathfloat@a@S
+% \pgfmathfloat@a@Mtok
+% \pgfmathfloat@a@E
+% will contain the number which results from the error handler.
+\def\pgfmathfloatparsenumber@handleerror#1#2#3{%
+ \let\pgfmathresult=\pgfutil@empty
+ \pgfmathfloatparsenumberpendingperiodfalse
+ \pgfkeys{/pgf/fpu/handlers/#1={#2}{#3}}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfmathfloat@a@S=3
+ \pgfmathfloat@a@Mtok={0.0}%
+ \pgfmathfloat@a@E=0
+ \else
+ \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E
+ \fi
+}
+\def\pgfflt@error#1\pgfflt@EOI{%
+ \begingroup
+ \pgfmathfloat@a@Mtok={#1}%
+ \xdef\pgfmathfloat@glob@TMP{%
+ \noexpand\pgfmathfloatparsenumber@handleerror
+ {invalid number}{\pgfmathresult}{\the\pgfmathfloat@a@Mtok}}%
+ \endgroup
+ \pgfmathfloat@glob@TMP
+}%
+
+
+
+% FROM: checksign.
+%
+\def\pgfflt@init#1{%
+ \expandafter\ifx\csname pgffltA@#1\endcsname\relax
+ \expandafter\pgfflt@error\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgffltA@#1\endcsname
+ \fi}
+% state transitions:
+\expandafter\def\csname pgffltA@0\endcsname{\pgfflt@leadingzero}% FIXME: inline optimization!
+\expandafter\def\csname pgffltA@1\endcsname{\pgfflt@nonzerodigit1}%
+\expandafter\def\csname pgffltA@2\endcsname{\pgfflt@nonzerodigit2}%
+\expandafter\def\csname pgffltA@3\endcsname{\pgfflt@nonzerodigit3}%
+\expandafter\def\csname pgffltA@4\endcsname{\pgfflt@nonzerodigit4}%
+\expandafter\def\csname pgffltA@5\endcsname{\pgfflt@nonzerodigit5}%
+\expandafter\def\csname pgffltA@6\endcsname{\pgfflt@nonzerodigit6}%
+\expandafter\def\csname pgffltA@7\endcsname{\pgfflt@nonzerodigit7}%
+\expandafter\def\csname pgffltA@8\endcsname{\pgfflt@nonzerodigit8}%
+\expandafter\def\csname pgffltA@9\endcsname{\pgfflt@nonzerodigit9}%
+\def\pgfflt@nonzerodigit#1{%
+ \pgfmathfloat@a@Mtok={#1}%
+ \pgfmathfloatparsenumberpendingperiodtrue
+ \pgfflt@positiveexp}%
+\expandafter\def\csname pgffltA@n\endcsname{\pgfflt@readnan}% FIXME: inlining?
+\expandafter\def\csname pgffltA@N\endcsname{\pgfflt@readnan}% FIXME: inlining?
+\expandafter\def\csname pgffltA@i\endcsname{\pgfflt@readinf}% FIXME: inlining?
+\expandafter\def\csname pgffltA@I\endcsname{\pgfflt@readinf}% FIXME: inlining?
+\expandafter\def\csname pgffltA@.\endcsname{% read '.9' like '0.9'
+ \pgfmathfloat@a@E=-1
+ \pgfflt@leadingzero@foundperiod}%
+\expandafter\def\csname pgffltA@,\endcsname{% read ',9' like '0,9'
+ \pgfmathfloat@frenchinput{%
+ \pgfmathfloat@a@E=-1
+ \pgfflt@leadingzero@foundperiod
+ }%
+}%
+
+\def\pgfmathfloat@frenchinput#1{%
+ \ifpgfmathparsenumber@comma@as@period
+ \def\pgf@marshal{#1}%
+ \expandafter\pgf@marshal
+ \else
+ \expandafter\pgfflt@error@separator\expandafter,%
+ \fi
+}%
+\def\pgfflt@error@separator#1\pgfflt@EOI{%
+ \begingroup
+ \pgfmathfloat@a@Mtok={#1}%
+ \xdef\pgfmathfloat@glob@TMP{%
+ \noexpand\pgfmathfloatparsenumber@handleerror
+ {invalid separator}{\pgfmathresult}{\the\pgfmathfloat@a@Mtok}}%
+ \endgroup
+ \pgfmathfloat@glob@TMP
+}%
+
+\def\pgfflt@finish#1\pgfflt@EOI{}
+
+\def\pgfflt@readnan #1#2{%
+ \def\pgfflt@readnan@ok{1}%
+ \if#1a\else\if#1A\else\def\pgfflt@readnan@ok{0}\fi\fi
+ \if#2n\else\if#2N\else\def\pgfflt@readnan@ok{0}\fi\fi
+ \if\pgfflt@readnan@ok1%
+ \pgfmathfloat@a@S=3\relax%
+ \pgfmathfloat@a@Mtok={0.0}%
+ \pgfmathfloat@a@E=0%
+ \expandafter\pgfflt@finish
+ \else
+ \def\pgfflt@readnan@{\pgfflt@error #1#2}%
+ \expandafter\pgfflt@readnan@
+ \fi
+}
+\def\pgfflt@readinf #1#2{%
+ \def\pgfflt@readinf@ok{1}%
+ \if#1n\else\if#1N\else\def\pgfflt@readinf@ok{0}\fi\fi
+ \if#2f\else\if#2F\else\def\pgfflt@readinf@ok{0}\fi\fi
+ \if\pgfflt@readinf@ok1%
+ \ifnum\pgfmathfloat@a@S=1 %
+ \pgfmathfloat@a@S=4 %
+ \pgfmathfloat@a@Mtok={0.0}%
+ \else
+ \pgfmathfloat@a@S=5 %
+ \pgfmathfloat@a@Mtok={0.0}%
+ \fi
+ \pgfmathfloat@a@E=0 %
+ \expandafter\pgfflt@finish
+ \else
+ \def\pgfflt@readinf@{\pgfflt@error #1#2}%
+ \expandafter\pgfflt@readinf@
+ \fi
+}
+\def\pgfflt@leadingzero#1{%
+ \expandafter\ifx\csname pgffltB@#1\endcsname\relax
+ \expandafter\pgfflt@error\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgffltB@#1\endcsname
+ \fi}
+% State transitions:
+\expandafter\def\csname pgffltB@0\endcsname{\pgfflt@leadingzero}%
+\expandafter\def\csname pgffltB@1\endcsname{\pgfmathfloat@a@Mtok={1}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@2\endcsname{\pgfmathfloat@a@Mtok={2}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@3\endcsname{\pgfmathfloat@a@Mtok={3}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@4\endcsname{\pgfmathfloat@a@Mtok={4}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@5\endcsname{\pgfmathfloat@a@Mtok={5}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@6\endcsname{\pgfmathfloat@a@Mtok={6}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@7\endcsname{\pgfmathfloat@a@Mtok={7}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@8\endcsname{\pgfmathfloat@a@Mtok={8}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@9\endcsname{\pgfmathfloat@a@Mtok={9}\pgfmathfloatparsenumberpendingperiodtrue \pgfflt@positiveexp}
+\expandafter\def\csname pgffltB@\pgfmathfloat@POSTFLAGSCHAR\endcsname{\pgfmathfloat@a@Mtok={0}\pgfflt@readlowlevelfloat}%
+\expandafter\def\csname pgffltB@.\endcsname{%
+ \pgfmathfloat@a@E=-1
+ \pgfflt@leadingzero@foundperiod}%
+\expandafter\def\csname pgffltB@,\endcsname{%
+ \pgfmathfloat@frenchinput{%
+ \pgfmathfloat@a@E=-1
+ \pgfflt@leadingzero@foundperiod
+ }%
+}%
+\expandafter\def\csname pgffltB@e\endcsname{%
+ \pgfmathfloat@a@S=0\relax%
+ \pgfmathfloat@a@Mtok={0.0}%
+ \pgfmathfloat@a@E=0%
+ \pgfflt@readexponent}%
+\let\pgffltB@E=\pgffltB@e
+\expandafter\def\csname pgffltB@\pgfflt@EOI\endcsname{%
+ \pgfmathfloat@a@S=0\relax%
+ \pgfmathfloat@a@Mtok={0.0}%
+ \pgfmathfloat@a@E=0}%
+
+\def\pgfflt@leadingzero@foundperiod#1{%
+ \expandafter\ifx\csname pgffltC@#1\endcsname\relax
+ \expandafter\pgfflt@error\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgffltC@#1\endcsname
+ \fi}
+% State transitions:
+\expandafter\def\csname pgffltC@0\endcsname{%
+ \advance\pgfmathfloat@a@E by-1
+ \pgfflt@leadingzero@foundperiod}%
+\expandafter\def\csname pgffltC@1\endcsname{\pgfmathfloat@a@Mtok={1}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@2\endcsname{\pgfmathfloat@a@Mtok={2}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@3\endcsname{\pgfmathfloat@a@Mtok={3}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@4\endcsname{\pgfmathfloat@a@Mtok={4}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@5\endcsname{\pgfmathfloat@a@Mtok={5}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@6\endcsname{\pgfmathfloat@a@Mtok={6}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@7\endcsname{\pgfmathfloat@a@Mtok={7}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@8\endcsname{\pgfmathfloat@a@Mtok={8}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@9\endcsname{\pgfmathfloat@a@Mtok={9}\pgfmathfloatparsenumberpendingperiodtrue\pgfflt@finish@number@after@period}%
+\expandafter\def\csname pgffltC@e\endcsname{%
+ \pgfmathfloat@a@S=0\relax%
+ \pgfmathfloat@a@Mtok={0.0}%
+ \pgfmathfloat@a@E=0%
+ \pgfflt@readexponent}%
+\let\pgffltC@E=\pgffltC@e
+\expandafter\def\csname pgffltC@\pgfflt@EOI\endcsname{%
+ \pgfmathfloat@a@S=0\relax%
+ \pgfmathfloat@a@Mtok={0.0}%
+ \pgfmathfloat@a@E=0}%
+
+
+\def\pgfflt@positiveexp#1{%
+ \expandafter\ifx\csname pgffltD@#1\endcsname\relax
+ \expandafter\pgfflt@error\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgffltD@#1\endcsname
+ \fi}
+% State transitions:
+\expandafter\def\csname pgffltD@0\endcsname{%
+ \advance\pgfmathfloat@a@E by1
+ \pgfmathfloat@tmptoks=\expandafter{\the\pgfmathfloat@tmptoks0}%
+ \pgfflt@pendingzeros@positiveexp}%
+\expandafter\def\csname pgffltD@1\endcsname{\pgffltD@nonzerodigit1}%
+\expandafter\def\csname pgffltD@2\endcsname{\pgffltD@nonzerodigit2}%
+\expandafter\def\csname pgffltD@3\endcsname{\pgffltD@nonzerodigit3}%
+\expandafter\def\csname pgffltD@4\endcsname{\pgffltD@nonzerodigit4}%
+\expandafter\def\csname pgffltD@5\endcsname{\pgffltD@nonzerodigit5}%
+\expandafter\def\csname pgffltD@6\endcsname{\pgffltD@nonzerodigit6}%
+\expandafter\def\csname pgffltD@7\endcsname{\pgffltD@nonzerodigit7}%
+\expandafter\def\csname pgffltD@8\endcsname{\pgffltD@nonzerodigit8}%
+\expandafter\def\csname pgffltD@9\endcsname{\pgffltD@nonzerodigit9}%
+\expandafter\def\csname pgffltD@\pgfmathfloat@POSTFLAGSCHAR\endcsname{\pgfflt@readlowlevelfloat}%
+\expandafter\def\csname pgffltD@.\endcsname{\pgfflt@finish@number@after@period}% FIXME : inlining?
+\expandafter\def\csname pgffltD@,\endcsname{\pgfmathfloat@frenchinput{\pgfflt@finish@number@after@period}}%
+\expandafter\def\csname pgffltD@e\endcsname{\pgfflt@readexponent}% FIXME : inlining?
+\let\pgffltD@E=\pgffltD@e
+\expandafter\def\csname pgffltD@\pgfflt@EOI\endcsname{}% NOP
+\def\pgffltD@nonzerodigit#1{%
+ \advance\pgfmathfloat@a@E by1
+ \ifpgfmathfloatparsenumberpendingperiod
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok.}%
+ \pgfmathfloatparsenumberpendingperiodfalse
+ \fi
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok#1}%
+ \pgfflt@positiveexp}%
+
+% Read a low-level floating point.
+% Since we are in the second state, \pgfmathfloat@a@Mtok contains the
+% FLAGS. The post-flags-char has also been read.
+\def\pgfflt@readlowlevelfloat#1e#2]\pgfflt@EOI{%
+ \pgfmathfloatparsenumberpendingperiodfalse
+ \pgfmathfloat@a@S=\the\pgfmathfloat@a@Mtok\relax
+ \pgfmathfloat@a@Mtok={#1}%
+ \pgfmathfloat@a@E=#2
+}%
+
+\def\pgfflt@readexponent#1\pgfflt@EOI{%
+ \afterassignment\pgfflt@readexponent@
+ \pgfmathfloat@b@E=#1 \pgfflt@EOI% the white space is important, otherwise \pgfflt@EOI will be expanded.
+}
+\def\pgfflt@readexponent@#1{%
+ \advance\pgfmathfloat@a@E by\pgfmathfloat@b@E\relax
+ %
+ % sanity checking:
+ \def\pgfmathfloat@loc@TMPb{#1}%
+ \ifx\pgfmathfloat@loc@TMPb\pgfflt@EOI@unexpanded
+ \else
+ \def\pgfmathfloat@loc@TMPb{\pgfflt@error#1}%
+ \expandafter\pgfmathfloat@loc@TMPb
+ \fi
+}
+
+\def\pgfflt@pendingzeros@positiveexp#1{%
+ \expandafter\ifx\csname pgffltE@#1\endcsname\relax
+ \expandafter\pgfflt@error\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgffltE@#1\endcsname
+ \fi}
+% State transitions:
+\expandafter\def\csname pgffltE@0\endcsname{%
+ \pgfmathfloat@tmptoks=\expandafter{\the\pgfmathfloat@tmptoks0}%
+ \advance\pgfmathfloat@a@E by1
+ \pgfflt@pendingzeros@positiveexp}%
+\expandafter\def\csname pgffltE@1\endcsname{\pgffltE@nonzerodigit1}%
+\expandafter\def\csname pgffltE@2\endcsname{\pgffltE@nonzerodigit2}%
+\expandafter\def\csname pgffltE@3\endcsname{\pgffltE@nonzerodigit3}%
+\expandafter\def\csname pgffltE@4\endcsname{\pgffltE@nonzerodigit4}%
+\expandafter\def\csname pgffltE@5\endcsname{\pgffltE@nonzerodigit5}%
+\expandafter\def\csname pgffltE@6\endcsname{\pgffltE@nonzerodigit6}%
+\expandafter\def\csname pgffltE@7\endcsname{\pgffltE@nonzerodigit7}%
+\expandafter\def\csname pgffltE@8\endcsname{\pgffltE@nonzerodigit8}%
+\expandafter\def\csname pgffltE@9\endcsname{\pgffltE@nonzerodigit9}%
+\expandafter\def\csname pgffltE@.\endcsname{\pgfflt@finish@number@after@period}% FIXME : inlining?
+\expandafter\def\csname pgffltE@,\endcsname{\pgfmathfloat@frenchinput{\pgfflt@finish@number@after@period}}% FIXME : inlining?
+\def\pgffltE@e{\pgfflt@readexponent}% FIXME : inlining?
+\let\pgffltE@E=\pgffltE@e
+\expandafter\def\csname pgffltE@\pgfflt@EOI\endcsname{}% NOP
+\def\pgffltE@nonzerodigit#1{%
+ \advance\pgfmathfloat@a@E by1
+ \ifpgfmathfloatparsenumberpendingperiod
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok.}%
+ \pgfmathfloatparsenumberpendingperiodfalse
+ \fi
+ \pgfmathfloat@a@Mtok=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\pgfmathfloat@a@Mtok\the\pgfmathfloat@tmptoks}%
+ \pgfmathfloat@tmptoks={}%
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok#1}%
+ \pgfflt@positiveexp}%
+
+\def\pgfflt@finish@number@after@period#1{%
+ \expandafter\ifx\csname pgffltF@#1\endcsname\relax
+ \expandafter\pgfflt@error\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgffltF@#1\endcsname
+ \fi}
+% State transitions:
+\expandafter\def\csname pgffltF@0\endcsname{%
+ \pgfmathfloat@tmptoks=\expandafter{\the\pgfmathfloat@tmptoks0}%
+ \pgfflt@pendingzeros}%
+\expandafter\def\csname pgffltF@1\endcsname{\pgffltF@nonzerodigit1}%
+\expandafter\def\csname pgffltF@2\endcsname{\pgffltF@nonzerodigit2}%
+\expandafter\def\csname pgffltF@3\endcsname{\pgffltF@nonzerodigit3}%
+\expandafter\def\csname pgffltF@4\endcsname{\pgffltF@nonzerodigit4}%
+\expandafter\def\csname pgffltF@5\endcsname{\pgffltF@nonzerodigit5}%
+\expandafter\def\csname pgffltF@6\endcsname{\pgffltF@nonzerodigit6}%
+\expandafter\def\csname pgffltF@7\endcsname{\pgffltF@nonzerodigit7}%
+\expandafter\def\csname pgffltF@8\endcsname{\pgffltF@nonzerodigit8}%
+\expandafter\def\csname pgffltF@9\endcsname{\pgffltF@nonzerodigit9}%
+\def\pgffltF@e{\pgfflt@readexponent}%
+\let\pgffltF@E=\pgffltF@e
+\expandafter\def\csname pgffltF@\pgfflt@EOI\endcsname{}% NOP
+\def\pgffltF@nonzerodigit#1{%
+ \ifpgfmathfloatparsenumberpendingperiod
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok.}%
+ \pgfmathfloatparsenumberpendingperiodfalse
+ \fi
+ \pgfmathfloat@a@Mtok=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\pgfmathfloat@a@Mtok\the\pgfmathfloat@tmptoks}%
+ \pgfmathfloat@tmptoks={}%
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok#1}%
+ \pgfflt@finish@number@after@period}%
+
+
+\def\pgfflt@pendingzeros#1{%
+ \expandafter\ifx\csname pgffltG@#1\endcsname\relax
+ \expandafter\pgfflt@error\expandafter#1%
+ \else
+ \expandafter\expandafter\csname pgffltG@#1\endcsname
+ \fi}
+% State transitions:
+\expandafter\def\csname pgffltG@0\endcsname{%
+ \pgfmathfloat@tmptoks=\expandafter{\the\pgfmathfloat@tmptoks0}%
+ \pgfflt@pendingzeros}%
+\expandafter\def\csname pgffltG@1\endcsname{\pgffltG@nonzerodigit1}%
+\expandafter\def\csname pgffltG@2\endcsname{\pgffltG@nonzerodigit2}%
+\expandafter\def\csname pgffltG@3\endcsname{\pgffltG@nonzerodigit3}%
+\expandafter\def\csname pgffltG@4\endcsname{\pgffltG@nonzerodigit4}%
+\expandafter\def\csname pgffltG@5\endcsname{\pgffltG@nonzerodigit5}%
+\expandafter\def\csname pgffltG@6\endcsname{\pgffltG@nonzerodigit6}%
+\expandafter\def\csname pgffltG@7\endcsname{\pgffltG@nonzerodigit7}%
+\expandafter\def\csname pgffltG@8\endcsname{\pgffltG@nonzerodigit8}%
+\expandafter\def\csname pgffltG@9\endcsname{\pgffltG@nonzerodigit9}%
+\def\pgffltG@e{\pgfflt@readexponent}% FIXME: inlining?
+\let\pgffltG@E=\pgffltG@e
+\expandafter\def\csname pgffltG@\pgfflt@EOI\endcsname{}% NOP
+\def\pgffltG@nonzerodigit#1{%
+ \ifpgfmathfloatparsenumberpendingperiod
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok.}%
+ \pgfmathfloatparsenumberpendingperiodfalse
+ \fi
+ \pgfmathfloat@a@Mtok=\expandafter\expandafter\expandafter{\expandafter\the\expandafter\pgfmathfloat@a@Mtok\the\pgfmathfloat@tmptoks}%
+ \pgfmathfloat@tmptoks={}%
+ \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok#1}%
+ \pgfflt@finish@number@after@period}%
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfutil-common-lists.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfutil-common-lists.tex
new file mode 100644
index 0000000000..fb09a855e6
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_pgfutil-common-lists.tex
@@ -0,0 +1,184 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Sa 7. Dez 20:58:23 CET 2013 %%%
+
+
+
+% Copyright 2013 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%
+% This list here is a general re-implementation of the list used in
+% the PGF system layer.
+% It employs two collect-buffers to reduce the runtime.
+%
+% - It has preasymptotical runtime O(N), but is O(N^2) asymptotically.
+% - It requires only 5 macros per list.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Usage:
+% \pgfapplistnewempty\macro
+\def\pgfapplistnewempty#1{%
+ \expandafter\let\csname pgfapp@#1\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfapp@#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfapp@#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfapp@#1@smallbuf@c\endcsname{0}%
+ \expandafter\def\csname pgfapp@#1@bigbuf@c\endcsname{0}%
+}%
+
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfapplistpushback#1\to#2{%
+ \begingroup
+ \c@pgf@counta=\csname pgfapp@#2@smallbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgf@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname pgfapp@#2@smallbuf@c\endcsname=\pgf@glob@TMPa
+ \ifnum\csname pgfapp@#2@smallbuf@c\endcsname<40
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfapp@#2@smallbuf\endcsname#1}%
+ \expandafter\edef\csname pgfapp@#2@smallbuf\endcsname{\the\t@pgf@toka}%
+ \else
+ \pgfapplistpushback@smallbufoverfl{#1}{#2}%
+ \fi
+}%
+\long\def\pgfapplistpushback@smallbufoverfl#1#2{%
+ \begingroup
+ \c@pgf@counta=\csname pgfapp@#2@bigbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgf@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname pgfapp@#2@bigbuf@c\endcsname=\pgf@glob@TMPa
+ %
+ \ifnum\csname pgfapp@#2@bigbuf@c\endcsname<30
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfapp@#2@bigbuf\endcsname}%
+ \t@pgf@tokb=\expandafter\expandafter\expandafter{\csname pgfapp@#2@smallbuf\endcsname#1}%
+ \expandafter\edef\csname pgfapp@#2@bigbuf\endcsname{\the\t@pgf@toka\the\t@pgf@tokb}%
+ \expandafter\let\csname pgfapp@#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfapp@#2@smallbuf@c\endcsname{0}%
+ \else%
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfapp@#2\endcsname}%
+ \t@pgf@tokb=\expandafter\expandafter\expandafter{\csname pgfapp@#2@bigbuf\endcsname}%
+ \t@pgf@tokc=\expandafter\expandafter\expandafter{\csname pgfapp@#2@smallbuf\endcsname#1}%
+ \expandafter\edef\csname pgfapp@#2\endcsname{\the\t@pgf@toka\the\t@pgf@tokb\the\t@pgf@tokc}%
+ \expandafter\let\csname pgfapp@#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfapp@#2@smallbuf@c\endcsname{0}%
+ \expandafter\let\csname pgfapp@#2@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfapp@#2@bigbuf@c\endcsname{0}%
+ \fi%
+}%
+\def\pgfapplist@flushbuffers#1{%
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfapp@#1\endcsname}%
+ \t@pgf@tokb=\expandafter\expandafter\expandafter{\csname pgfapp@#1@bigbuf\endcsname}%
+ \t@pgf@tokc=\expandafter\expandafter\expandafter{\csname pgfapp@#1@smallbuf\endcsname}%
+ \expandafter\edef\csname pgfapp@#1\endcsname{\the\t@pgf@toka\the\t@pgf@tokb\the\t@pgf@tokc}%
+ \expandafter\let\csname pgfapp@#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfapp@#1@smallbuf@c\endcsname{0}%
+ \expandafter\let\csname pgfapp@#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfapp@#1@bigbuf@c\endcsname{0}%
+}%
+
+\def\pgfapplistlet#1=#2{%
+ \pgfapplist@flushbuffers{#2}%
+ \expandafter\let\expandafter#1\csname pgfapp@#2\endcsname
+}%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% A variant of applist which has the same runtime requirements, but
+% does PUSH FRONT only.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Usage:
+% \pgfprependlistnewempty{list}
+\def\pgfprependlistnewempty#1{%
+ \expandafter\let\csname pgfpPRP@#1\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfpPRP@#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\let\csname pgfpPRP@#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#1@smallbuf@c\endcsname{0}%
+ \expandafter\def\csname pgfpPRP@#1@bigbuf@c\endcsname{0}%
+}%
+
+% #1: the item to append
+% #2: the list as macro name
+\long\def\pgfprependlistpushfront#1\to#2{%
+ \begingroup
+ \c@pgf@counta=\csname pgfpPRP@#2@smallbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgf@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname pgfpPRP@#2@smallbuf@c\endcsname=\pgf@glob@TMPa
+ \ifnum\csname pgfpPRP@#2@smallbuf@c\endcsname<40
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@smallbuf\endcsname}%
+ \t@pgf@tokb={#1}%
+ \expandafter\edef\csname pgfpPRP@#2@smallbuf\endcsname{\the\t@pgf@tokb\the\t@pgf@toka}%
+ \else
+ \pgfprependlistpushfront@smallbufoverfl{#1}{#2}%
+ \fi
+}%
+\long\def\pgfprependlistpushfront@smallbufoverfl#1#2{%
+ \begingroup
+ \c@pgf@counta=\csname pgfpPRP@#2@bigbuf@c\endcsname\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgf@glob@TMPa{\the\c@pgf@counta}%
+ \endgroup
+ \expandafter\let\csname pgfpPRP@#2@bigbuf@c\endcsname=\pgf@glob@TMPa
+ %
+ \ifnum\csname pgfpPRP@#2@bigbuf@c\endcsname<30
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@bigbuf\endcsname}%
+ \t@pgf@tokb=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2@smallbuf\endcsname}%
+ \t@pgf@tokc={#1}%
+ \expandafter\edef\csname pgfpPRP@#2@bigbuf\endcsname{\the\t@pgf@tokc\the\t@pgf@tokb\the\t@pgf@toka}%
+ \expandafter\let\csname pgfpPRP@#2@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#2@smallbuf@c\endcsname{0}%
+ \else%
+ \pgfprependlist@flushbuffers{#2}%
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#2\endcsname}%
+ \t@pgf@tokb={#1}%
+ \expandafter\edef\csname pgfpPRP@#2\endcsname{\the\t@pgf@tokb\the\t@pgf@toka}%
+ \fi%
+}%
+\def\pgfprependlist@flushbuffers#1{%
+ \t@pgf@toka=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1\endcsname}%
+ \t@pgf@tokb=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1@bigbuf\endcsname}%
+ \t@pgf@tokc=\expandafter\expandafter\expandafter{\csname pgfpPRP@#1@smallbuf\endcsname}%
+ \expandafter\edef\csname pgfpPRP@#1\endcsname{\the\t@pgf@tokc\the\t@pgf@tokb\the\t@pgf@toka}%
+ \expandafter\let\csname pgfpPRP@#1@smallbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#1@smallbuf@c\endcsname{0}%
+ \expandafter\let\csname pgfpPRP@#1@bigbuf\endcsname=\pgfutil@empty
+ \expandafter\def\csname pgfpPRP@#1@bigbuf@c\endcsname{0}%
+}%
+\def\pgfprependlistlet#1=#2{%
+ \pgfprependlist@flushbuffers{#2}%
+ \expandafter\let\expandafter#1\csname pgfpPRP@#2\endcsname
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternal.sty b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternal.sty
new file mode 100644
index 0000000000..55e56d8fdd
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternal.sty
@@ -0,0 +1,163 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 25. Dez 18:14:20 CET 2012 %%%
+
+
+
+% Copyright 2008 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+%
+% In addition to the above licenses, this particular file may also be
+% directly inlined into other documents and this copyright notice may
+% be removed. Additionally, when you inline this file, you may modify
+% it as needed and you may remove comments.
+%
+% This file is intended to be distributed or even inlined into a file
+% when a document needs to be typeset on a system that does not have
+% pgf/TikZ installed.
+%
+% It replaces \tikzpicture/ \endtikzpicture and \tikz and invokes the
+% \includegraphics with the correct file name instead.
+
+\RequirePackage{graphicx}
+
+\toksdef\t@tikzexternal@tmpa=0
+\toksdef\t@tikzexternal@tmpb=1
+
+\def\tikzexternalize{\@ifnextchar[{\tikzexternalize@opt}{\tikzexternalize@opt[]}}%
+\def\tikzexternalize@opt[#1]{\@ifnextchar\bgroup{\def\tikzexternal@realjob}{\let\tikzexternal@realjob=\jobname}}%
+
+\def\tikzsetnextfilename#1{\gdef\tikzexternal@nextfile{#1}}
+\def\tikzsetexternalprefix#1{\def\tikzexternal@filenameprefix{#1}}
+\def\tikzsetfigurename#1{\def\tikzexternal@figurename{#1}}%
+\def\tikzappendtofigurename#1{\expandafter\def\expandafter\tikzexternal@figurename\expandafter{\tikzexternal@figurename #1}}%
+\tikzsetnextfilename{}
+\tikzsetexternalprefix{}
+\tikzsetfigurename{\tikzexternal@realjob-figure}%
+
+\long\def\tikzpicture#1\end#2{% collect every thing up to \end{tikzpicture}
+ \def\tikzexternal@laTeX@collectpicture@@{#2}%
+ \ifx\tikzexternal@laTeX@collectpicture@@\tikzexternal@laTeX@tikzpicturestring
+ \tikzexternal@image
+ \end{tikzpicture}%
+ \else
+ \expandafter
+ \tikzpicture
+ \fi
+}%
+\def\endtikzpicture{}
+\def\tikzexternal@laTeX@tikzpicturestring{tikzpicture}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Replacement for \tikz short command:
+\def\tikz{\@ifnextchar[{\tikz@opt}{\tikz@opt[]}}
+\def\tikz@opt[#1]{\@ifnextchar\bgroup{\tikz@opt@{#1}}{\tikz@opt@@{#1}}}
+\def\tikz@opt@#1#2{\tikz@opt@process{#1}{#2}}
+\def\tikz@opt@@#1{%
+ \def\tikz@next{\tikz@collectnormalsemicolon{#1}}%
+ \ifnum\the\catcode`\;=\active\relax%
+ \def\tikz@next{\tikz@collectactivesemicolon{#1}}%
+ \fi%
+ \tikz@next}
+\def\tikz@collectnormalsemicolon#1#2;{\tikz@opt@process{#1}{#2;}}
+{
+ \catcode`\;=\active
+ \gdef\tikz@collectactivesemicolon#1#2;{%
+ \tikz@opt@process{#1}{#2;}%
+ }
+}
+\def\tikz@opt@process#1#2{\tikzexternal@image}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\tikzexternal@image{%
+ \leavevmode
+ \begingroup
+ \t@tikzexternal@tmpa=\expandafter{\tikzexternal@filenameprefix}%
+ \ifx\tikzexternal@nextfile\empty
+ \expandafter\ifx\csname c@tikzext@no@\tikzexternal@figurename\endcsname\relax
+ \expandafter\gdef\csname c@tikzext@no@\tikzexternal@figurename\endcsname{0}%
+ \fi
+ \t@tikzexternal@tmpb=\expandafter{\tikzexternal@figurename}%
+ \count0=\csname c@tikzext@no@\tikzexternal@figurename\endcsname
+ \xdef\tikzexternal@curfilename{\the\t@tikzexternal@tmpa\the\t@tikzexternal@tmpb\the\count0 }%
+ \advance\count0 by1\relax
+ \expandafter\xdef\csname c@tikzext@no@\tikzexternal@figurename\endcsname{\the\count0 }%
+ \else
+ \t@tikzexternal@tmpb=\expandafter{\tikzexternal@nextfile}%
+ \xdef\tikzexternal@curfilename{\the\t@tikzexternal@tmpa\the\t@tikzexternal@tmpb}%
+ \fi
+ \endgroup
+ \global\let\tikzexternal@nextfile=\empty
+ \pgfincludeexternalgraphics\tikzexternal@curfilename
+}%
+\def\tikzset#1{}\def\pgfkeys#1{}\def\pgfqkeys#1#2{}
+\long\def\beginpgfgraphicnamed#1#2\endpgfgraphicnamed{\pgfincludeexternalgraphics{#1}}
+\def\tikzifinpicture#1#2{#2}
+\def\pgfincludeexternalgraphics#1{%
+ \begingroup
+ \pgfexternalreaddpth{#1}%
+ \setbox1=\hbox{\includegraphics{#1}}%
+ \ifdim\pgfretval=0pt
+ \box1
+ \else
+ \dimen0=\pgfretval\relax
+ \hbox{\lower\dimen0 \box1 }%
+ \fi
+ \endgroup
+}
+\newread\r@pgf@reada
+\def\pgfexternalreaddpth#1{%
+ \edef\pgfexternalreaddpth@restore{%
+ \noexpand\endlinechar=\the\endlinechar\space
+ \noexpand\catcode`\noexpand\@=\the\catcode`\@\space
+ }%
+ \def\pgfretval{0pt}%
+ \endlinechar=-1 % suppress white space at end
+ \catcode`\@=11
+ \openin\r@pgf@reada=#1.dpth
+ \pgfincludeexternalgraphics@read@dpth
+ \pgfexternalreaddpth@restore
+}%
+\def\pgfincludeexternalgraphics@read@dpth{%
+ \ifeof\r@pgf@reada
+ \closein\r@pgf@reada
+ \else
+ \read\r@pgf@reada to\pgfincludeexternalgraphics@auxline
+ \ifx\pgfincludeexternalgraphics@auxline\empty
+ \else
+ \expandafter\pgfincludeexternalgraphics@read@dpth@line\pgfincludeexternalgraphics@auxline\pgfincludeexternalgraphics@read@dpth@line@EOI
+ \fi
+ \expandafter\pgfincludeexternalgraphics@read@dpth
+ \fi
+}%
+\long\def\pgfincludeexternalgraphics@read@dpth@line#1#2\pgfincludeexternalgraphics@read@dpth@line@EOI{%
+ \ifcat\noexpand#1\relax
+ \if@filesw
+ {\toks0={#1#2}%
+ \immediate\write\@auxout{\noexpand\def\noexpand\dpthimport{\the\toks0 }\noexpand\dpthimport }%
+ }%
+ \fi
+ \else%
+ \def\pgfretval{#1#2}%
+ \fi
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternalshared.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternalshared.code.tex
new file mode 100644
index 0000000000..ed1a6ff4fb
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzexternalshared.code.tex
@@ -0,0 +1,1732 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Di 12. Jul 21:02:29 CEST 2016 %%%
+
+
+
+% Copyright 2008-2010 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+%
+% ******************************
+% This here is the shared implementation of TeX-dialect specific files
+% tikzlibraryexternal.code.tex
+% ******************************
+%
+%
+% This file provides a high-level automatic export feature for tikz pictures.
+% It allows to export EACH SINGLE FIGURE into a separate PDF.
+%
+% The simplest way is to use the 'convert with system call' option; it simply converts every figure using the write18 method. If that is not possible, a list of figure file names is generated and you need to generate these figures manually (or with a script).
+%
+%
+% It replaces \tikzpicture/ \endtikzpicture and \tikz and invokes \beginpgfgraphicnamed ... \endpgfgraphicnamed
+% commands if necessary.
+
+% handle with extreme care and only in small, local groups:
+\toksdef\t@tikzexternal@tmpa=0
+\toksdef\t@tikzexternal@tmpb=1
+
+\newif\iftikzexternal@nestedflag
+\newif\iftikzexternal@verboseuptodate
+\newif\iftikzexternal@verboseio
+\newif\iftikzexternal@genfigurelist
+\newif\iftikzexternal@onlynamed
+\newif\iftikzexternal@file@isuptodate
+\newif\iftikzexternal@force@remake
+\newif\iftikzexternal@optimize
+\newif\iftikzexternal@export@enabled
+\tikzexternal@export@enabledtrue
+
+% must be numeric!
+\gdef\c@tikzexternal@version{2}
+
+% This 'if' can be used as part of the public user interface.
+%
+% It is set by the 'remake next' key.
+%
+% It disables any up-to-date checks for the *next* picture, forcing a
+% remake of it.
+%
+% It applies only to *one* picture.
+\newif\iftikzexternalremakenext
+\newif\iftikzexternal@verbose@optimize
+\tikzexternal@verbose@optimizetrue
+
+% A global boolean which can be used to skip single figures.
+\newif\iftikzexternalexportnext
+\tikzexternalexportnexttrue
+
+% Invokes '#1' if the external lib is currently externalizing
+% something and '#2' if not.
+%
+% This command must be called *after* \tikzexternalize.
+\def\tikzifexternalizing#1#2{%
+ \ifpgf@external@grabshipout #1\else #2\fi
+}%
+% Invokes '#1' if the external lib is currently externalizing the NEXT FOLLOWING
+% tikzpicture. It invokes '#2' if that is not the case.
+\def\tikzifexternalizingnext#1#2{%
+ \ifpgf@external@grabshipout
+ \tikzexternalgetnextfilename\tikzexternal@temp
+ \tikzifexternaljobnamematches\tikzexternal@temp{#1}{#2}%
+ \else
+ #2%
+ \fi
+}%
+% Invokes '#1' if the external lib is currently externalizing the
+% current picture. It invokes '#2' if that is not the case.
+%
+% If the command is invoked outside of a picture, '#2' will be
+% invoked.
+\def\tikzifexternalizingcurrent#1#2{%
+ \ifpgf@external@grabshipout
+ \tikzexternalgetcurrentfilename\tikzexternal@temp
+ \ifx\tikzexternal@temp\pgfutil@empty
+ #2%
+ \else
+ \tikzifexternaljobnamematches\tikzexternal@temp{#1}{#2}%
+ \fi
+ \else
+ #2%
+ \fi
+}%
+
+% Invokes '#2' if \jobname equals '#1' and '#3' if not.
+% I suppose that '#1' is a macro containing the file name.
+%
+\def\tikzifexternaljobnamematches#1#2#3{%
+ \edef\pgf@tempa{\expandafter\string\csname#1\endcsname}%
+ \edef\pgf@tempb{\expandafter\string\csname\pgfactualjobname\endcsname}%
+ \ifx\pgf@tempa\pgf@tempb #2\else#3 \fi%
+}%
+
+
+\pgfutil@IfUndefined{pdfshellescape}{%
+ % let's hope that \usepackage{pdftexcmds} has been used...
+ \pgfutil@IfUndefined{pdf@shellescape}{%
+ \def\tikzexternalcheckshellescape{0}%
+ }{%
+ \let\tikzexternalcheckshellescape=\pdf@shellescape
+ }%
+}{%
+ \let\tikzexternalcheckshellescape=\pdfshellescape
+}%
+\ifnum\tikzexternalcheckshellescape=1
+ \def\tikzexternalcheckshellescape{\pgfkeysvalueof{/tikz/external/shell escape}\space}%
+\else
+ \def\tikzexternalcheckshellescape{}%
+\fi
+
+\newif\iftikzexternal@auto@detect@jobname
+
+\pgfqkeys{/tikz/external}{
+ figure list/.is if=tikzexternal@genfigurelist,
+ aux in dpth/.style={/pgf/images/aux in dpth=#1},%
+ disable dependency files/.code={%
+ \let\tikzexternalfiledependsonfile@ACTIVE=\tikzexternalfiledependsonfile
+ },
+ % 'mode' applies only if \jobname==real job name.
+ mode/.is choice,
+ mode/only graphics/.code = {%
+ \def\tikzexternal@opmode{0}%
+ \pgfkeysalso{/pgf/images/aux in dpth=true}%
+ },
+ mode/no graphics/.code = {\def\tikzexternal@opmode{1}},
+ % an alias for 'no graphics:'
+ mode/only pictures/.code = {\def\tikzexternal@opmode{1}},
+ mode/graphics if exists/.code= {%
+ \def\tikzexternal@opmode{2}%
+ \pgfkeysalso{/pgf/images/aux in dpth=true}%
+ },
+ mode/list only/.code = {\def\tikzexternal@opmode{3}\tikzexternal@genfigurelisttrue},
+ mode/convert with system call/.code={%
+ \def\tikzexternal@opmode{4}%
+ \pgfkeysalso{/tikz/external/figure list=false,/pgf/images/aux in dpth=true}%
+ },
+ mode/list and make/.code = {%
+ \def\tikzexternal@opmode{5}%
+ \pgfkeysalso{/tikz/external/figure list=true,/pgf/images/aux in dpth=true}%
+ },
+ mode=convert with system call,
+ force remake/.is if=tikzexternal@force@remake,
+ force remake/.default=true,
+ %
+ % DEPRECATED: this here will work out-of-the box (provided that
+ % 'aux in dpth' is active):
+ failed ref warnings for/.initial={\ref,\cite,\pageref},
+ export next/.is if=tikzexternalexportnext,
+ export/.is if=tikzexternal@export@enabled,
+ remake next/.is if=tikzexternalremakenext,
+ remake next/.default=true,
+ verbose IO/.is if=tikzexternal@verboseio,
+ verbose IO/.default=true,
+ verbose IO=true,
+ verbose optimize/.is if=tikzexternal@verbose@optimize,
+ verbose up to date/.is if=tikzexternal@verboseuptodate,
+ verbose/.style={
+ verbose IO=#1,
+ verbose optimize=#1,
+ verbose up to date=#1,
+ },
+ shell escape/.initial=-shell-escape,
+ read main aux/.is if=pgfexternalreadmainaux,
+ image discarded text/.initial={%
+ [[ \textsc{Image Discarded Due To} \texttt{`/tikz/external/%
+ \ifcase\tikzexternal@opmode\relax
+ mode=only graphics%
+ \or
+ mode=no graphics%
+ \or
+ mode=graphics if exists%
+ \or
+ mode=list only%
+ \or
+ mode=convert with system call%
+ \or
+ mode=list and make%
+ \fi
+ '}~]]%
+ \pgfutil@ifundefined{tikzexternal@warning@at@end}{%
+ \pgfutil@ifundefined{AtEndDocument}{}{%
+ \AtEndDocument{%
+ \message{! Package tikz Warning: Some images are not up-to-date and need to be generated. }%
+ }%
+ }%
+ \gdef\tikzexternal@warning@at@end{1}%
+ }{}%
+ },
+ optimize/.is choice,
+ optimize/true/.code={%
+ \tikzexternal@optimizetrue
+ \iftikzexternal@optimize
+ \ifpgf@external@grabshipout
+ % we have already started the externalization! Install
+ % optimization commands to activate the new one:
+ \tikzexternal@optimize@REPLACE
+ \fi
+ \fi
+ },
+ optimize/false/.code={%
+ \tikzexternal@optimizefalse%
+ \tikzexternal@optimize@RESTORE
+ },%
+ optimize=true,
+ optimize away text/.code={[ \textsc{\string#1\ optimized away because it does not contribute to exported PDF}]},
+ optimize/install/.code={},%
+ optimize/restore/.code={},%
+ % Expects two arguments, the command name and (optionally) a count
+ % of expected arguments.
+ % Example:
+ % 'optimize command away=\includegraphics'
+ % 'optimize command away={\mycommand}{3}'
+ %
+ % It accepts commands which have '[]' arguments and whose first
+ % argument always begins with '{'.
+ %
+ % #1: the command name
+ % #2: either empty or a number of EXPECTED arguments. It will be checked
+ % for one optional argument in square brackets as well.
+ optimize command away/.code 2 args={%
+ \expandafter\global\expandafter\let\csname\string#1@ORIG\endcsname=#1%
+ \pgfkeysalso{%
+ /tikz/external/optimize/install/.append code={%
+ \def#1{\tikzexternal@optimize@away@cmd{#1}{#2}}%
+ },
+ /tikz/external/optimize/restore/.append code={%
+ \expandafter\let\expandafter#1\csname\string#1@ORIG\endcsname
+ }
+ }%
+ \iftikzexternal@optimize
+ \ifpgf@external@grabshipout
+ % we have already started the externalization! Install
+ % optimization commands to activate the new one:
+ \tikzexternal@optimize@REPLACE
+ \fi
+ \fi
+ },
+ optimize command away=\includegraphics,
+ optimize command away=\pgfincludeexternalgraphics,
+ % EXPERIMENTAL (UNTESTED):
+ optimize latex env away/.code={%
+ \expandafter\let\expandafter\pgf@tempa\csname #1\endcsname
+ \expandafter\global\expandafter\let\csname #1@ORIG\endcsname=\pgf@tempa%
+ \pgfkeysalso{%
+ /tikz/external/optimize/install/.append code={%
+ \pgfutil@namedef{#1}{\tikzexternal@optimize@away@latex@env{#1}}%
+ },
+ /tikz/external/optimize/restore/.append code={%
+ \pgfutil@namelet{#1}{#1@ORIG}%
+ }%
+ }%
+ },
+ only named/.is if=tikzexternal@onlynamed,
+ only named/.default=true,
+ figure name/.initial=\tikzexternal@realjob-figure,
+ reset counter/.code={%
+ \expandafter\gdef\csname c@tikzext@no@#1\endcsname{0}%
+ },%
+ prefix/.code={\tikzsetexternalprefix{#1}},
+ up to date check/.is choice,
+ up to date check/simple/.code={\def\tikzexternal@uptodate@mode{0}},
+ % md5 relies on \pdfmdfivesum of pdftex. It uses 'diff' as fallback if we do not have that command.
+ up to date check/md5/.code={\def\tikzexternal@uptodate@mode{1}},
+ up to date check/diff/.code={\def\tikzexternal@uptodate@mode{2}},
+ up to date check=md5,
+}
+
+\expandafter\def\csname tikzexternal@driver@pgfsys-pdftex.def\endcsname{%
+ \pgfutil@IfUndefined{directlua}{%
+ \pgfkeyssetvalue{/tikz/external/system call}{%
+ pdflatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+ }%
+ }{%
+ \pgfkeyssetvalue{/tikz/external/system call}{%
+ lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+ }%
+ }%
+}%
+%--------------------------------------------------
+% \expandafter\def\csname tikzexternal@driver@pgfsys-dvipdfm.def\endcsname{%
+% \pgfkeyssetvalue{/tikz/external/system call}{%
+% latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+% && dvipdfm "\image".dvi %
+% }%
+% }%
+%--------------------------------------------------
+\expandafter\def\csname tikzexternal@driver@pgfsys-xetex.def\endcsname{%
+ \pgfkeyssetvalue{/tikz/external/system call}{%
+ xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+ }%
+}%
+\expandafter\def\csname tikzexternal@driver@pgfsys-dvips.def\endcsname{%
+ \pgfkeyssetvalue{/tikz/external/system call}{%
+ latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" %
+ && dvips -o "\image".ps "\image".dvi %
+ }%
+}%
+
+% Auto-select a suitable default value fo 'system call':
+\pgfutil@ifundefined{tikzexternal@driver@\pgfsysdriver}{%
+ % fallback. We do not know the driver here.
+ \csname tikzexternal@driver@pgfsys-pdftex.def\endcsname
+}{%
+ \csname tikzexternal@driver@\pgfsysdriver\endcsname
+}%
+
+
+\def\tikzsetfigurename#1{\pgfkeyssetvalue{/tikz/external/figure name}{#1}}%
+\def\tikzappendtofigurename#1{\pgfkeys{/tikz/external/figure name/.add={}{#1}}}
+
+% This method sets the file name prefix used for every import/export.
+%
+% It is invoked by the '/tikz/external/prefix' key.
+\def\tikzsetexternalprefix#1{\def\tikzexternal@filenameprefix{#1}}
+\tikzsetexternalprefix{}
+
+% This method initialises automatic externalization.
+%
+% The command does need any argument, but it has two optional ones:
+%
+% 1. \tikzexternalize[<options>]
+%
+% 2. \tikzexternalize{<real job's name>}
+%
+% 3. \tikzexternalize[<options>]{<real job's name>}
+%
+% The <real job's name> is the job's file name, without the suffix
+% .tex .
+% If the <real job's name> is omitted, it will be deduced
+% automatically.
+%
+% The effect is:
+% 1. automatically surround EVERY tikzpicture by \beginpgfgraphicnamed % sections.
+% 2. in case that the job's real name and the current \jobname differ,
+% it will process ONLY the matching tikzpicture.
+\def\tikzexternalize{%
+ \pgfutil@ifnextchar[{%
+ \tikzexternalize@opt
+ }{%
+ \tikzexternalize@opt[]%
+ }%
+}%
+\def\tikzexternalize@opt[#1]{%
+ \pgfutil@ifnextchar\bgroup{%
+ \tikzexternal@auto@detect@jobnamefalse
+ \tikzexternalize@opt@withname[#1]%
+ }{%
+ \tikzexternal@auto@detect@jobnametrue
+ \pgfutil@ifundefined{tikzexternalrealjob}{%
+ % ok, \tikzexternalrealjob is not known.
+ % Assume we are currently *not* externalizing.
+ \let\tikzexternalrealjob=\jobname
+ }{}%
+ \def\pgf@tempa{\tikzexternalize@opt@withname[#1]}%
+ \expandafter\pgf@tempa\expandafter{\tikzexternalrealjob}%
+ }%
+}%
+\def\tikzexternalize@opt@withname[#1]#2{%
+ \gdef\tikzexternalrealjob{#2}%
+ \if1\tikzexternalize@hasbeencalled
+ \else
+ \pgfqkeys{/tikz/external}{#1}%
+ \def\tikzexternal@realjob{#2}%
+ \tikzexternalauxlock@init
+ \pgfrealjobname{#2}%
+ \def\tikzexternalize@hasbeencalled{1}%
+ \tikzexternalenable
+ \def\tikzexternal@determineimgextension##1:##2\relax{\gdef\tikzexternalimgextension{##1}}%
+ \xdef\pgf@tempa{\pgfsys@imagesuffixlist}%
+ \expandafter\tikzexternal@determineimgextension\pgf@tempa:\relax
+ \pgfutil@ifundefined{includegraphics}{%
+ \let\tikzexternal@orig@includegraphics=\relax
+ }{%
+ \let\tikzexternal@orig@includegraphics=\includegraphics
+ }%
+ \let\tikzexternalfiledependsonfile=\tikzexternalfiledependsonfile@ACTIVE
+ \let\tikzpicturedependsonfile=\tikzpicturedependsonfile@ACTIVE
+ \fi
+}
+\def\tikzexternalize@hasbeencalled{0}%
+
+\def\tikzifexternalizehasbeencalled#1#2{%
+ \if1\tikzexternalize@hasbeencalled
+ #1%
+ \else
+ #2%
+ \fi
+}%
+
+% If mode=`convert with system call', the boolean \ifpgfexternalreadmainaux
+% will be set depending on the current lock file.
+%
+% The idea is as follows: Suppose
+% pdflatex -shell-escape mainjob.tex
+% is running.
+%
+% While it runs,
+% a) it modifies its mainjob.aux file,
+% b) it issues pdflatex -jobname mainjob-figure0 mainjob.tex .
+%
+% The call (b) will try to read mainjob.aux in order to resolve \ref
+% commands. This may fail since the aux
+% file is not complete; it may be subject to output buffering. To
+% avoid such failure, a locking mechanism is established.
+%
+% The locking mechanisms causes (a) to write a lock command into
+% mainjob.auxlock
+% just before (b) is called. Then, (b) will check it. After (b) has
+% completed, the lock will be reset.
+%
+% Thus: mode=convert with system call does NOT support \ref commands
+% inside of images. You will need to call the externalization command
+% manually. In this case, it should work.
+%
+% The lock file allows to detect automatically whether an image is created by
+% 'convert with system call' or if the user issued the required command manually.
+%
+% @PRECONDITION : this command must be invoked AFTER
+% \tikzexternal@realjob has been defined but BEFORE \pgfrealjobname is
+% called.
+%
+% @POSTCONDITION : If \ifpgfexternalreadmainaux=\iffalse, we won't do
+% anything. Otherwise, it will be changed depending for 'mode=convert
+% with system call' if necessary.
+\def\tikzexternalauxlock@init{%
+ \if4\tikzexternal@opmode
+ % mode=convert with system call
+ \ifpgfexternalreadmainaux
+ % ohoh. This case needs care because the main.aux might
+ % not be ready at this time!
+ % check.
+ %
+ \edef\pgf@tempa{\expandafter\string\csname\tikzexternal@realjob\endcsname}%
+ \edef\pgf@tempb{\expandafter\string\csname\jobname\endcsname}%
+ \ifx\pgf@tempa\pgf@tempb
+ % we are *not* externalizing. Set lock into its
+ % initial "unlocked" state.
+ \tikzexternalauxlock@setlock{0}%
+ \else
+ % we are externalizing. Query the lock's value:
+ \tikzexternalauxlock@getlockvalue
+ \if1\tikzexternallocked
+ \pgfexternalreadmainauxfalse
+ % the main .aux file won't be read right now.
+ \else
+ \pgfexternalreadmainauxtrue
+ \fi
+ \fi
+ \else
+ % NO-OP. We won't read the main aux file anyway.
+ \def\tikzexternalauxlock@setlock##1{}%
+ \fi
+ \fi
+}
+% defines \tikzexternallocked to be either 0 or 1, depending on the
+% lock file.
+\def\tikzexternalauxlock@getlockvalue{%
+ \openin\r@pgf@reada=\tikzexternal@realjob.auxlock
+ \ifeof\r@pgf@reada
+ % no lock file. Unlock.
+ \def\tikzexternallocked{0}%
+ \else
+ % read first line...
+ \read\r@pgf@reada to\pgf@tempa
+ % ... and execute it.
+ \pgf@tempa
+ % it should contain a definition of \tikzexternallocked. If
+ % not, lock it anyway.
+ \pgfutil@ifundefined
+ {tikzexternallocked}
+ {\def\tikzexternallocked{1}}%
+ {}%
+ \fi
+ \closein\r@pgf@reada
+}%
+\def\tikzexternalauxlock@setlock#1{%
+ \immediate\openout\w@pgf@writea=\tikzexternal@realjob.auxlock
+ \immediate\write\w@pgf@writea{\noexpand\def\noexpand\tikzexternallocked{#1}}%
+ \immediate\closeout\w@pgf@writea
+}
+
+
+% this is a hook into pgfcoreexternal.code.tex:
+\def\pgf@external@grab@refundefinedtrue@code{%
+ \gdef\noexpand\tikzexternal@systemcall@reschedule@to@end@document{1}%
+}%
+
+% Expands to the default image extension (it is set by
+% \tikzexternalize).
+%
+% This image extension may not resemble the correct one; you may need
+% to overwrite this macro *after* \tikzexternalize in this case.
+%
+% The default setting uses the first registered image extension.
+\def\tikzexternalimgextension{}%
+
+% can be used to (temporarily) disable the externalization.
+\def\tikzexternaldisable{%
+ \let\tikz=\tikzexternal@origtikz
+ \tikzexternal@TEXDIALECT@restore@picture
+ \pgfutil@ifundefined{tikzexternal@orig@tikzfadingfrompicture}
+ {}% NOP
+ {%
+ \let\tikzfadingfrompicture=\tikzexternal@orig@tikzfadingfrompicture
+ \let\endtikzfadingfrompicture=\tikzexternal@orig@endtikzfadingfrompicture
+ \let\tikzfading=\tikzexternal@orig@tikzfading
+ }%
+ \iftikzexternal@optimize
+ \ifpgf@external@grabshipout
+ \tikzexternal@optimize@RESTORE
+ \fi
+ \fi
+}%
+% re-enables externalization after a \tikzexternalizedisable.
+\def\tikzexternalenable{%
+ \if\tikzexternalize@hasbeencalled1%
+ \let\tikz=\tikzexternal@tikz@replacement
+ \tikzexternal@TEXDIALECT@installreplacement@picture
+ \pgfutil@ifundefined{tikzfadingfrompicture}%
+ {}% no special handling for 'fading lib'
+ {%
+ % oh, ok -- patch fading lib!
+ \pgfutil@ifundefined{tikzexternal@orig@tikzfadingfrompicture}{%
+ \let\tikzexternal@orig@tikzfadingfrompicture=\tikzfadingfrompicture
+ \let\tikzexternal@orig@endtikzfadingfrompicture=\endtikzfadingfrompicture
+ \let\tikzexternal@orig@tikzfading=\tikzfading
+ }{}%
+ \def\tikzfadingfrompicture{%
+ \begingroup
+ \tikzexternaldisable
+ \tikzexternal@orig@tikzfadingfrompicture}%
+ \def\endtikzfadingfrompicture{%
+ \tikzexternal@orig@endtikzfadingfrompicture
+ \endgroup}%
+ \def\tikzfading[##1]{%
+ \begingroup
+ \tikzexternaldisable
+ \tikzexternal@orig@tikzfading[##1]%
+ \endgroup}%
+ }%
+ \iftikzexternal@optimize
+ \ifpgf@external@grabshipout
+ \tikzexternal@optimize@REPLACE
+ \fi
+ \fi
+ \fi
+}%
+
+% Sets the filename for the next tikzpicture or \tikz shortcommand.
+%
+% It will *only* be used for the next picture.
+%
+% If you don't call \tikzsetnextfilename for a picture, a file name
+% will be assembled automatically.
+%
+% Please note that the global file prefix will be prepended anyway.
+\def\tikzsetnextfilename#1{\gdef\tikzexternal@nextfile{#1}}
+\tikzsetnextfilename{}
+
+
+% These are few TeX dialect-specific commands which need to be overriden when used with
+% something different than plain TeX:
+%
+% 1. this command collects a complete image into a macro, up to (but not including) the
+% final TeX-dialect specific end-image command.
+% This is really difficult for LaTeX because \end{tikzpicture} either involves dirty
+% catcode-hacks to parse the braces or an ugly loop which loops until it
+% finds \end followed by {tikzpicture}.
+%
+% #1: a macro which will be called with the collected environment contents.
+% all following tokens: the environment contents.
+\long\gdef\tikzexternal@TEXDIALECT@collectpicture#1#2\endtikzpicture{#1{#2}}
+%
+% 2. the following commands should expand to the TeX-dialect specific begin and end image command, i.e.
+% \tikzpicture / \endtikzpicture
+% or
+% \begin{tikzpicture} / \end{tikzpicture}
+% or
+% \starttikzpicture / \stoptikzpicture
+\def\tikzexternal@TEXDIALECT@begpicture{\tikzpicture}
+\def\tikzexternal@TEXDIALECT@endpicture{\endtikzpicture}%
+%
+% 3. This installs the replacement macros:
+\def\tikzexternal@TEXDIALECT@installreplacement@picture{%
+ \let\tikzpicture=\tikzexternal@tikzpicture@replacement
+}%
+\def\tikzexternal@TEXDIALECT@restore@picture{%
+ \let\tikzpicture=\tikzexternal@origpicture
+}%
+
+
+
+
+\let\tikzexternal@origtikz=\tikz
+\let\tikzexternal@origpicture=\tikzpicture
+\let\tikzexternal@origendpicture=\endtikzpicture
+\let\tikzexternal@curfilename=\relax
+
+% Replacement for '\tikzpicture'.
+%
+% There are two different states in which this method is applied:
+% - normal typesetting. Then, the 'mode' key controls its behavior.
+% - externalize mode (i.e. jobname != real job name). Then, it will
+% externalize the picture selected by 'jobname' (and only this picture).
+\def\tikzexternal@tikzpicture@replacement{%
+ \leavevmode
+ \global\tikzexternal@file@isuptodatetrue% may be set to false during checks.
+ \tikzexternal@getnextfilename\tikzexternal@curfilename
+ \ifx\tikzexternal@curfilename\pgfutil@empty
+ \ifpgf@external@grabshipout
+ % This picture won't be externalized.
+ % But maybe we can optimize it away:
+ \iftikzexternal@optimize
+ % -> it won't be shipped out anyway, so save typesetting time!
+ \let\tikzexternal@next=\tikzexternal@skipfigure
+ \else
+ % include this graphics into the output (even if
+ % it will be discarded anyway).
+ \let\tikzexternal@next=\tikzexternal@normalpicture@nographics
+ \fi
+ \else
+ \let\tikzexternal@next=\tikzexternal@normalpicture@nographics
+ \fi
+ \else
+ \ifpgf@external@grabshipout
+ \tikzifexternaljobnamematches\tikzexternal@curfilename{%
+ % ok, this here IS the picture for which
+ % pdflatex --jobname <my name>
+ % has been invoked.
+ \let\tikzexternal@next=\tikzexternal@externalizefig
+ }{%
+ \iftikzexternal@optimize
+ % No, another picture should be exported. Simply skip this one
+ % -> it won't be shipped out anyway, so save typesetting time!
+ \let\tikzexternal@next=\tikzexternal@skipfigure
+ \else
+ % include this graphics into the output (even it
+ % it will be discarded anyway).
+ \let\tikzexternal@next=\tikzexternal@normalpicture@nographics
+ \fi
+ }%
+ \else
+ \ifcase\tikzexternal@opmode\relax
+ % 'mode=only graphics'
+ \let\tikzexternal@next=\tikzexternal@forcegraphics
+ \or
+ % 'mode=no graphics'
+ \let\tikzexternal@next=\tikzexternal@normalpicture@nographics
+ \or
+ % 'mode=graphics if exists'
+ \let\tikzexternal@next=\tikzexternal@externalizefig
+ \or
+ % 'mode=list only'
+ \let\tikzexternal@next=\tikzexternal@listmodepicture
+ \or
+ % 'mode=convert with system call'
+ \let\tikzexternal@next=\tikzexternal@externalizefig@systemcall
+ \or
+ % 'mode=list and make'
+ \let\tikzexternal@next=\tikzexternal@list@and@makefile@mode@picture
+ \fi
+ \fi
+ \fi
+ \tikzexternal@next
+}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Replacement for \tikz short command:
+\def\tikzexternal@tikz@replacement{%
+ \pgfutil@ifnextchar[{\tikzexternal@tikz@replacement@opt}{\tikzexternal@tikz@replacement@opt[]}%
+}%
+\def\tikzexternal@tikz@replacement@opt[#1]{%
+ \pgfutil@ifnextchar\bgroup{\tikzexternal@tikz@replacement@opt@{#1}}{\tikzexternal@tikz@replacement@opt@@{#1}}%
+}
+\long\def\tikzexternal@tikz@replacement@opt@#1#2{%
+ \tikzexternal@tikz@replacement@opt@process{#1}{#2}%
+}%
+\def\tikzexternal@tikz@replacement@opt@@#1{%
+ \def\tikz@next{\tikzexternal@tikz@replacement@collectnormalsemicolon{#1}}%
+ \ifnum\the\catcode`\;=\active\relax%
+ \def\tikz@next{\tikzexternal@tikz@replacement@collectactivesemicolon{#1}}%
+ \fi%
+ \tikz@next}
+\long\def\tikzexternal@tikz@replacement@collectnormalsemicolon#1#2;{%
+ \tikzexternal@tikz@replacement@opt@process{#1}{#2;}%
+}%
+{
+ \catcode`\;=\active
+ \long\gdef\tikzexternal@tikz@replacement@collectactivesemicolon#1#2;{%
+ \tikzexternal@tikz@replacement@opt@process{#1}{#2;}%
+ }
+}
+\long\def\tikzexternal@tikz@replacement@opt@process#1#2{%
+ \begingroup
+ \t@tikzexternal@tmpa=\expandafter{\tikzexternal@TEXDIALECT@begpicture[#1]#2}%
+ \t@tikzexternal@tmpb=\expandafter{\tikzexternal@TEXDIALECT@endpicture}%
+ \xdef\pgf@tempa{\the\t@tikzexternal@tmpa\the\t@tikzexternal@tmpb}%
+ \endgroup
+ \pgf@tempa
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\tikzexternal@getnextfilename@advancecount{%
+ \begingroup
+ \c@pgf@counta=\csname c@tikzext@no@\tikzexternal@figurename\endcsname\relax
+ \advance\c@pgf@counta by1
+ \expandafter\xdef\csname c@tikzext@no@\tikzexternal@figurename\endcsname{\the\c@pgf@counta}%
+ \endgroup
+}%
+
+% Returns the file name which will be used for the next tikzpicture (based on the currently available information only, of course).
+\def\tikzexternalgetnextfilename#1{%
+ \begingroup
+ \let\tikzexternal@getnextfilename@advancecount\relax% NOP
+ \let\tikzexternal@getnextfilename@resetglobals=\relax% NOP
+ \def\tikzexternal@protocol@to@file##1{}% NOP
+ \tikzexternal@getnextfilename#1%
+ \pgfmath@smuggleone#1%
+ \endgroup
+}%
+
+% Returns the file name of the current picture.
+%
+% It returns the empty string in case the command is invoked outside
+% of a picture.
+% #1 the macro which will contain the file name.
+% @see \tikzexternalgetnextfilename
+\def\tikzexternalgetcurrentfilename#1{%
+ \ifx\tikzexternal@curfilename\relax
+ % we are outside of a picture.
+ \let#1=\pgfutil@empty
+ \else
+ % we are inside of a picture.
+ \let#1=\tikzexternal@curfilename
+ \fi
+}
+
+% Fills #1 with a filename for the current picture.
+%
+% The filename will be generated automatically by appending '-figure<number>' to the real jobname.
+%
+% This method deals with
+% - \tikzsetnextfilename
+% - \tikzexternalexportnextfalse
+%
+% It returns #1={} if the current figure shall NOT be exported.
+%
+% Please note that both, \tikzsetnextfilename and \tikzexternalexportnextfalse
+% affect only ONE picture. They will be reset afterwards.
+\def\tikzexternal@getnextfilename#1{%
+ \let#1=\pgfutil@empty
+ % determine next file name:
+ \iftikzexternal@export@enabled
+ \iftikzexternalexportnext
+ \begingroup
+ \t@tikzexternal@tmpa=\expandafter{\tikzexternal@filenameprefix}%
+ \ifx\tikzexternal@nextfile\pgfutil@empty
+ \iftikzexternal@onlynamed
+ \xdef\pgf@tempa{}%
+ \else
+ \pgfkeysgetvalue{/tikz/external/figure name}\tikzexternal@figurename
+ \pgfutil@ifundefined{c@tikzext@no@\tikzexternal@figurename}{%
+ % initialise on first usage:
+ \expandafter\gdef\csname c@tikzext@no@\tikzexternal@figurename\endcsname{0}%
+ }{}%
+ \t@tikzexternal@tmpb=\expandafter{\tikzexternal@figurename}%
+ \xdef\pgf@tempa{\the\t@tikzexternal@tmpa\the\t@tikzexternal@tmpb\csname c@tikzext@no@\tikzexternal@figurename\endcsname}%
+ % advance the counter for 'figure name':
+ \tikzexternal@getnextfilename@advancecount
+ \fi
+ \else
+ \t@tikzexternal@tmpb=\expandafter{\tikzexternal@nextfile}%
+ \xdef\pgf@tempa{\the\t@tikzexternal@tmpa\the\t@tikzexternal@tmpb}%
+ \fi
+ \endgroup
+ \let#1=\pgf@tempa
+ \fi
+ \fi
+ %
+ \tikzexternal@getnextfilename@resetglobals%
+ %
+ \tikzexternal@protocol@to@file#1%
+}%
+
+\def\tikzexternal@getnextfilename@resetglobals{%
+ % Reset global flags:
+ \global\let\tikzexternal@nextfile=\pgfutil@empty
+ \global\tikzexternalexportnexttrue
+}%
+
+% #1: the image file name which should be protocolled. (can be a
+% macro)
+\def\tikzexternal@protocol@to@file#1{%
+ \ifpgf@external@grabshipout%
+ \else
+ \iftikzexternal@genfigurelist
+ \edef\tikzexternal@temp{#1}%
+ \ifx\tikzexternal@temp\pgfutil@empty
+ \else
+ \pgfutil@ifundefined{tikzexternal@listmode@openedfile}{%
+ \message{Opening '\tikzexternal@realjob.figlist' for writing.}%
+ \begingroup
+ \globaldefs=1
+ % this gets round '\outer\newwrite' in plain TeX:
+ \csname newwrite\endcsname\tikzexternal@outfile
+ \endgroup
+ \immediate\openout\tikzexternal@outfile=\tikzexternal@realjob.figlist\relax
+ \gdef\tikzexternal@listmode@openedfile{1}%
+ \if\tikzexternal@opmode5% mode='list and make'
+ \tikzexternal@list@and@make@prepare
+ \fi
+ }{}%
+ \iftikzexternal@verboseio
+ \immediate\write16{Writing '#1' to '\tikzexternal@realjob.figlist'.}%
+ \fi
+ \immediate\write\tikzexternal@outfile{#1}%
+ \if\tikzexternal@opmode5% mode='list and make'
+ \tikzexternal@list@and@make@gentarget{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+
+\def\tikzexternal@list@and@make@gentarget#1{%
+ \tikzexternal@assemble@systemcall{#1}{\pgf@tempa}%
+ \def\tikzexternal@tempb{\pgfutilstrreplace{^^J}{^^J\tikzexternal@TABchar}}%
+ \expandafter\tikzexternal@tempb\expandafter{\pgf@tempa}%
+ \let\pgf@tempa=\pgfretval
+ \iftikzexternal@verboseio
+ \immediate\write16{Writing '#1' to '\tikzexternal@realjob.makefile'.}%
+ \fi
+ \global\tikzexternal@file@isuptodatetrue% only check for force remake:
+ \tikzexternal@checkforceremake%
+ \immediate\write\tikzexternal@outmakefile{#1\tikzexternalimgextension: \iftikzexternal@file@isuptodate\else FORCEREMAKE\fi}%
+ \immediate\write\tikzexternal@outmakefile{\tikzexternal@TABchar\pgf@tempa}%
+ \immediate\write\tikzexternal@outmakefile{}%
+}
+
+\def\tikzexternal@list@and@make@prepare{%
+ \iftikzexternal@verboseio
+ \immediate\write16{Opening '\tikzexternal@realjob.makefile' for writing.}%
+ \fi
+ \begingroup
+ % this makes \tikzexternal@outmakefile global:
+ \globaldefs=1
+ % this gets round '\outer\newwrite' in plain TeX:
+ \csname newwrite\endcsname\tikzexternal@outmakefile
+ \endgroup
+ \immediate\openout\tikzexternal@outmakefile=\tikzexternal@realjob.makefile\relax
+ \immediate\write\tikzexternal@outmakefile{ALL_FIGURE_NAMES=\tikzexternal@DOLLARchar(shell cat \tikzexternal@realjob.figlist)}%
+ \immediate\write\tikzexternal@outmakefile{ALL_FIGURES=\tikzexternal@DOLLARchar(ALL_FIGURE_NAMES:\tikzexternal@PERCENTchar=\tikzexternal@PERCENTchar\tikzexternalimgextension)}%
+ \immediate\write\tikzexternal@outmakefile{}%
+ \immediate\write\tikzexternal@outmakefile{allimages: \tikzexternal@DOLLARchar(ALL_FIGURES)}%
+ \immediate\write\tikzexternal@outmakefile{\tikzexternal@TABchar @echo All images exist now. Use make -B to re-generate them.}%
+ \immediate\write\tikzexternal@outmakefile{}%
+ \immediate\write\tikzexternal@outmakefile{FORCEREMAKE:}%
+ \immediate\write\tikzexternal@outmakefile{}%
+ %
+ % support for .dep files and auto-dependencies:
+ \immediate\write\tikzexternal@outmakefile{include $(ALL_FIGURE_NAMES:\tikzexternal@PERCENTchar=\tikzexternal@PERCENTchar.\tikzexternaldepext)}%
+ \immediate\write\tikzexternal@outmakefile{}%
+ \tikzexternalmakefiledefaultdeprule
+ \immediate\write\tikzexternal@outmakefile{}%
+ \tikzexternal@outmakefile@pendingcommands
+ \pgfutil@ifundefined{AtEndDocument}{}{%
+ \AtEndDocument{\immediate\write16{===== mode=`list and make': Use 'make -f \tikzexternal@realjob.makefile' to generate all images. Then, re-run (pdf)latex \tikzexternal@realjob. =====}}%
+ }%
+}%
+\def\tikzexternaldepext{dep}
+
+\def\tikzexternalmakefiledefaultdeprule{%
+ \immediate\write\tikzexternal@outmakefile{\tikzexternal@PERCENTchar.\tikzexternaldepext:}%
+ \immediate\write\tikzexternal@outmakefile{\tikzexternal@TABchar mkdir -p \tikzexternal@normal@dq $(dir $@)\tikzexternal@normal@dq}%
+ \immediate\write\tikzexternal@outmakefile{\tikzexternal@TABchar touch \tikzexternal@normal@dq $@\tikzexternal@normal@dq\space \tikzexternal@HASHchar\space will be filled later.}%
+}%
+
+% Invokes '#1' if a makefile is to be written and '#2' if not.
+\def\tikzexternalifwritesmakefile#1#2{%
+ \if5\tikzexternal@opmode #1\else #2\fi
+}%
+\def\tikzexternal@outmakefile@pendingcommands{}%
+
+% Will write something to the make file. If the makefile is not yet
+% opened, #1 will be written as soon as it *is* opened.
+\def\tikzexternalwritetomakefile#1{%
+ \if\tikzexternal@opmode5% mode='list and make'
+ \pgfutil@ifundefined{tikzexternal@outmakefile}{%
+ \expandafter\gdef\expandafter\tikzexternal@outmakefile@pendingcommands\expandafter{%
+ \tikzexternal@outmakefile@pendingcommands
+ \immediate\write\tikzexternal@outmakefile{#1}%
+ }%
+ }{%
+ \immediate\write\tikzexternal@outmakefile{#1}%
+ }%
+ \fi
+}%
+
+\def\tikzexternal@dep@file@name{}
+
+% Adds a dependency for the externalized picture file name `#1',
+% namely another file `#2'.
+%
+% #1: the fully qualified path name (without image extension) of the
+% external graphics for which we are adding a dependency.
+% #2: a file name. If this file gets changed, #1 shall be remade.
+%
+% This command will be actived as soons as \tikzexternalize has been
+% called.
+\def\tikzexternalfiledependsonfile@ACTIVE#1#2{%
+ \begingroup
+ \def\tikzpicturedependsonfile@name{#1}%
+ \ifx\tikzpicturedependsonfile@name\pgfutil@empty
+ % could be auto-generated: empty file name means "picture
+ % won't be externalized". Skip it.
+ \else
+ % if we encounter any dependencies while we externalize a
+ % picture, we have to write these things into the image's .dep
+ % file.
+ \tikzifexternalizingcurrent
+ {\tikzexternalfiledependsonfile@append@to@dep@file{#1}{#2}}%
+ {\tikzexternalfiledependsonfile@append@to@makefile{#1}{#2}}%
+ \fi
+ \endgroup
+}%
+\def\tikzexternalfiledependsonfile#1#2{}% NO-OP until \tikzexternalize has been called.
+
+% sub-routine of \tikzexternalfiledependsonfile which appends stuff to
+% the pictures .dep file.
+%
+% The file #1.dep is generated during the externalization of #1. If
+% you change and/or overwrite it in any other context, its information
+% might get lost (because #1 won't be regenerated).
+%
+% Consequently, this here has to be called if and only if #1 is about
+% to be externalized.
+\def\tikzexternalfiledependsonfile@append@to@dep@file#1#2{%
+ % write every dependency which is defined *INSIDE* of the current
+ % picture into the .dep file of the current picture:
+ \tikzexternalgetcurrentfilename\tikzpicturedependsonfile@name
+ \edef\tikzpicturedependsonfile@name{\tikzpicturedependsonfile@name.\tikzexternaldepext}%
+ %\edef\tikzpicturedependsonfile@name{#1.\tikzexternaldepext}%
+ \ifx\tikzexternal@dep@file@name\tikzpicturedependsonfile@name
+ % file is open and ready.
+ \else
+ % create new output file.
+ \pgfutil@ifundefined{tikzexternal@dep@file}{%
+ \begingroup
+ % this makes \tikzexternal@dep@file global:
+ \globaldefs=1
+ % this gets round '\outer\newwrite' in plain TeX:
+ \csname newwrite\endcsname\tikzexternal@dep@file
+ \endgroup
+ }{}%
+ \ifx\tikzexternal@dep@file@name\pgfutil@empty
+ \else
+ % it is already open. Close it.
+ \immediate\closeout\tikzexternal@dep@file
+ \fi
+ \global\let\tikzexternal@dep@file@name=\tikzpicturedependsonfile@name
+ \immediate\openout\tikzexternal@dep@file=\tikzexternal@dep@file@name\relax
+ \fi
+ \immediate\write\tikzexternal@dep@file{#1\tikzexternalimgextension: #2}%
+}
+
+% sub-routine of \tikzexternalfiledependsonfile which appends stuff to
+% the makefile of the current \jobname .
+%
+% This is used for dependencies which are recomputed by every run of
+% tex; we must not write them into #1.dep (for reasons explained in
+% the documentation of
+% \tikzexternalfiledependsonfile@append@to@dep@file)
+\def\tikzexternalfiledependsonfile@append@to@makefile#1#2{%
+ \edef\tikzexternal@temp{#1\tikzexternalimgextension: #2}%
+ \expandafter\tikzexternalwritetomakefile\expandafter{\tikzexternal@temp}%
+}
+
+% Adds a dependency for the NEXT picture which is about to be
+% externalized. If we are currently inside of a picture, the
+% dependency is added for this current picture.
+%
+% #1: a file name. If this file gets changed, the tikzpicture's
+% externalized graphics shall be remade.
+%
+% This command will be actived as soons as \tikzexternalize has been
+% called.
+\def\tikzpicturedependsonfile@ACTIVE#1{%
+ \begingroup
+ \tikzexternalgetcurrentfilename\tikzpicturedependsonfile@name
+ \ifx\tikzpicturedependsonfile@name\pgfutil@empty
+ \tikzexternalgetnextfilename\tikzpicturedependsonfile@name
+ \fi
+ \expandafter\tikzexternalfiledependsonfile\expandafter{\tikzpicturedependsonfile@name}{#1}%
+ \endgroup
+}%
+\def\tikzpicturedependsonfile#1{}% NO-OP until \tikzexternalize has been called.
+
+
+% This command is invoked
+% if and only if ( (grab mode && --jobname matches) || 'mode=graphics if exists' )
+%
+% It converts the current tikzpicture into an image in grab mode
+% or processes the 'graphics if exist' mode.
+\def\tikzexternal@externalizefig{%
+ \ifpgf@external@grabshipout%
+ % In this case, we already KNOW that the filename matches.
+ \expandafter\tikzexternal@externalizefig@GRAB%
+ \else
+ \expandafter\tikzexternal@externalizefig@mode@graphics@if@exists
+ \fi%
+}
+\def\tikzexternal@externalizefig@mode@graphics@if@exists{%
+ % check if there is already a file.
+ % In that case, use it. If not, typeset the picture normally.
+ \gdef\pgf@filename{}%
+ \xdef\pgf@tempa{\noexpand\pgf@findfile\pgfsys@imagesuffixlist:+{\tikzexternal@curfilename}}%
+ \pgf@tempa
+ \ifx\pgf@filename\pgfutil@empty%
+ % Note: since we have no 'GRAB' mode, we do not have to deal with optimization.
+ % there is no graphics.
+ \expandafter\tikzexternal@normalpicture@nographics
+ \else
+ \expandafter\tikzexternal@forcegraphics
+ \fi
+}%
+
+
+% Used by the optimization code.
+% It will be called if GRAB mode is on.
+% See the 'optimize command away' key.
+\def\tikzexternal@optimize@away@cmd#1#2{%
+ \pgfutil@ifnextchar[{%
+ \tikzexternal@optimize@away@cmd@{#1}{#2}%
+ }{%
+ \tikzexternal@optimize@away@cmd@{#1}{#2}[]%
+ }%
+}%
+\def\tikzexternal@optimize@away@cmd@#1#2[#3]{%
+ \def\tikz@temp{#2}%
+ \ifx\tikz@temp\pgfutil@empty
+ \def\tikz@temp{\tikzexternal@optimize@away@cmd@auto{#1}{#3}}%
+ \else
+ \ifcase#2\relax
+ \def\tikzexternal@optimize@away@cmd@manual{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2##3{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}{##3}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2##3##4{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2##3##4##5{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2##3##4##5##6{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2##3##4##5##6##7{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2##3##4##5##6##7##8{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}%
+ }%
+ \or
+ \def\tikzexternal@optimize@away@cmd@manual##1##2##3##4##5##6##7##8##9{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}%
+ }%
+ \fi
+ \def\tikz@temp{\tikzexternal@optimize@away@cmd@manual}%
+ \fi
+ \tikz@temp
+}%
+\def\tikzexternal@optimize@away@cmd@auto#1#2{%
+ \pgfutil@ifnextchar\bgroup{%
+ \tikzexternal@optimize@away@cmd@auto@{#1}{#2}%
+ }{%
+ \tikzexternal@optimize@away@cmd@auto@{#1}{#2}{<no argument in curly braces>}% give empty argument.
+ }
+}%
+
+\def\tikzexternal@optimize@away@cmd@auto@#1#2#3{%
+ \tikzexternal@optimize@away@cmd@@@{#1}{#2}{{#3}}% <-- provide braces
+}%
+\def\tikzexternal@optimize@away@cmd@@@#1#2#3{%
+ \begingroup
+ \toks0={#1[#2]#3}%
+ \iftikzexternal@verbose@optimize
+ \immediate\write16{The command '\the\toks0' has been optimized away. Use '/tikz/external/optimize=false' to disable this.}%
+ \fi
+ \endgroup
+ \begingroup
+ \pgfkeysvalueof{/tikz/external/optimize away text/.@cmd}#1\pgfeov%
+ \endgroup
+}%
+
+\def\tikzexternal@optimize@away@latex@env#1{%
+ \def\tikzexternal@optimize@away@latex@env@{#1}%
+ \begingroup
+ \def\tikzexternal@laTeX@collect@until@end@tikzpicturetikzpicturestring{#1}%
+ \tikzexternal@TEXDIALECT@collectpicture\tikzexternal@optimize@away@latex@env@close
+}%
+\long\def\tikzexternal@optimize@away@latex@env@close#1{%
+ \iftikzexternal@verbose@optimize
+ \immediate\write16{The complete contents of \string\begin{tikzexternal@optimize@away@latex@env@} up to the next \end{tikzexternal@optimize@away@latex@env@} has been optimized away because it does not contribute to the exported PDF. Use '/tikz/external/optimize=false' to disable this.}%
+ \fi
+ \endgroup
+ % we still need to invoke \end{<name>} in latex because \begin{<name>}
+ % starts a local group - that must be closed properly. Make sure then \end<name> does nothing:
+ \expandafter\let\csname end\tikzexternal@optimize@away@latex@env@\endcsname=\relax
+ \expandafter\end\expandafter{\tikzexternal@optimize@away@latex@env@}%
+}%
+
+\def\tikzexternal@optimize@REPLACE{%
+ \pgfkeysvalueof{/tikz/external/optimize/install/.@cmd}\pgfeov
+}%
+
+\def\tikzexternal@optimize@RESTORE{%
+ \pgfkeysvalueof{/tikz/external/optimize/restore/.@cmd}\pgfeov
+}%
+
+% Closes one 'tikzpicture' environment. This is only used for LaTeX,
+% because the '\end{tikzpicture}' command would raise an exception otherwise.
+% It does *not* call \endtikzpicture.
+\def\tikzexternal@closeenvironments{%
+ \let\endtikzpicture=\relax
+ \tikzexternal@TEXDIALECT@endpicture
+ \let\endtikzpicture=\tikzexternal@origendpicture
+ \let\tikzexternal@curfilename=\relax
+}
+
+% Throws a tikzpicture away - without further notice.
+% Used if we are currently converting *another* picture. No need to waste time
+% with expensive pictures if they are not shipped out anyway.
+%
+% See the 'optimize' key to disable this.
+\def\tikzexternal@skipfigure{%
+ \tikzexternal@TEXDIALECT@collectpicture\tikzexternal@skipfigure@@
+}
+\long\def\tikzexternal@skipfigure@@#1{%
+ \iftikzexternal@verbose@optimize
+ \immediate\write16{A tikzpicture has been optimized away. Use '/tikz/external/optimize=false' to disable this.}%
+ \fi
+ \tikzexternal@closeenvironments
+ \pgfkeysvalueof{/tikz/external/optimize away text/.@cmd}tikzpicture\pgfeov%
+}
+
+% Processes tikzpicture normally; without any externalization.
+%
+% We need to do further work here to deal with NESTED tikzpicture environments
+% because all of them shall also be typeset normally.
+%
+% Idea:
+% 1. restore the original \tikzpicture macro
+% 2. install the replacement \tikzpicture in \end{tikzpicture}.
+% and keep track of nesting.
+%
+% FIXME: could it be possible that nested tikzpictures use other code anyway?
+\def\tikzexternal@normalpicture@nographics{%
+ \tikzexternal@nestedflagfalse
+ \let\tikzpicture=\tikzexternal@normalpicture@begreplace
+ \let\endtikzpicture=\tikzexternal@normalpicture@endreplace
+ \tikzpicture
+}
+\def\tikzexternal@normalpicture@begreplace{%
+ \begingroup
+ \tikzexternal@nestedflagtrue
+ \tikzexternal@origpicture
+}
+\def\tikzexternal@normalpicture@endreplace{%
+ \tikzexternal@origendpicture
+ \endgroup
+ \iftikzexternal@nestedflag
+ \else
+ \let\tikzpicture=\tikzexternal@tikzpicture@replacement
+ \let\endtikzpicture=\tikzexternal@origendpicture
+ \fi
+}%
+
+% Assumes there is an image on disk and reads it. The tikzpicture is thrown away.
+\def\tikzexternal@forcegraphics{%
+ \tikzexternal@TEXDIALECT@collectpicture\tikzexternal@forcegraphics@@
+}
+\long\def\tikzexternal@forcegraphics@@#1{\tikzexternal@forcegraphics@@@}%
+\def\tikzexternal@forcegraphics@@@{%
+ \if5\tikzexternal@opmode
+ \let\tikz@refundefinedtrue@@=\G@refundefinedtrue
+ \gdef\G@refundefinedtrue{%
+ \tikz@refundefinedtrue@@
+ \tikzexternal@forceremake@undefined@reference@handler
+ }%
+ \fi
+ \expandafter\pgfincludeexternalgraphics\expandafter{\tikzexternal@curfilename}%
+ \if5\tikzexternal@opmode
+ \global\let\G@refundefinedtrue=\tikz@refundefinedtrue@@
+ \fi
+ \tikzexternal@closeenvironments
+}
+
+\def\tikzexternal@forceremake@undefined@reference@handler{%
+ \immediate\write16{===== 'mode=list and make': encountered undefined reference in current picture. Adding dependency to FORCEREMAKE. Rerun make to update the picture.' ========^^J}%
+ \tikzpicturedependsonfile{FORCEREMAKE}%
+}%
+
+% Simply replaces the complete picture by some placeholder text.
+% It is used by 'mode=list only' to reduce runtime.
+\def\tikzexternal@listmodepicture{%
+ \tikzexternal@TEXDIALECT@collectpicture\tikzexternal@listmodepicture@@
+}
+\long\def\tikzexternal@listmodepicture@@#1{\tikzexternal@listmodepicture@@@}
+\def\tikzexternal@listmodepicture@@@{%
+ \pgfkeysvalueof{/tikz/external/image discarded text}%
+ \tikzexternal@closeenvironments
+}
+
+% check if there is already a file.
+% In that case, use it. If not, skip it.
+\def\tikzexternal@list@and@makefile@mode@picture{%
+ \tikzexternal@TEXDIALECT@collectpicture\tikzexternal@list@and@makefile@mode@picture@
+}%
+\long\def\tikzexternal@list@and@makefile@mode@picture@#1{%
+ %
+ \tikzexternal@check@uptodate@mode{#1}%
+ %
+ \gdef\pgf@filename{}%
+ \xdef\pgf@tempa{\noexpand\pgf@findfile\pgfsys@imagesuffixlist:+{\tikzexternal@curfilename}}%
+ \pgf@tempa
+ \ifx\pgf@filename\pgfutil@empty%
+ % Note: since we have no 'GRAB' mode, we do not have to deal with optimization.
+ % there is no graphics.
+ \expandafter\tikzexternal@listmodepicture@@@
+ \else
+ \expandafter\tikzexternal@forcegraphics@@@
+ \fi
+}%
+
+\def\tikzexternal@externalizefig@before@grab{%
+ \pgfutil@IfUndefined{TP@holdbox}{%
+ }{%
+ % \usepackage[absolute]{textpos}
+ % populates this box -- and would inject unwanted material into our images. Reset it:
+ \global\setbox\TP@holdbox\vbox{}%
+ }%
+}%
+
+\def\tikzexternal@externalizefig@GRAB{%
+ \ifpgf@external@grabshipout
+ \iftikzexternal@optimize
+ \tikzexternal@optimize@RESTORE
+ \fi
+ \tikzexternal@externalizefig@before@grab
+ \fi
+ \def\tikzpicture{%
+ \def\tikzpicture{% make sure that nested \tikzpicture are processed normally.
+ \begingroup
+ \def\endtikzpicture{%
+ \tikzexternal@origendpicture
+ \endgroup
+ }%
+ \tikzexternal@origpicture
+ }%
+ \pgf@external@grab{\tikzexternal@curfilename}%
+ \tikzexternal@origpicture
+ }%
+ \def\endtikzpicture{%
+ \tikzexternal@origendpicture
+ \pgf@externalend
+ %
+ \tikzexternal@ensure@nonempty@floats
+ %
+ \let\tikzpicture=\tikzexternal@tikzpicture@replacement
+ \let\endtikzpicture=\tikzexternal@origendpicture
+ \iftikzexternal@optimize
+ \ifpgf@external@grabshipout
+ \tikzexternal@optimize@REPLACE
+ \fi
+ \fi
+ }%
+ \tikzpicture
+}%
+
+% If a sequence of floats containing JUST tikzpictures is
+% externalized, this results in EMPTY floats. Empty floats, in turn,
+% can confuse latex; it thinks it did something wrong.
+%
+% Solution: Avoid empty floats by writing junk into it.
+%
+% Note that this method is only invoked if \ifpgf@external@grabshipout
+% is true and if the text is OUTSIDE of the original shipout routine.
+% In other words: this text is being thrown away.
+%
+% see
+% http://tex.stackexchange.com/questions/54625/why-is-fixltx2e-incompatible-with-tikzexternalize
+\def\tikzexternal@ensure@nonempty@floats{%
+ tikzexternal: picture has been externalized. This text is required to avoid empty floats.
+}%
+
+% 1. Discards the current picture in this document.
+% 2. Checks whether an image exists already. If that is the case: acquire it.
+% 3. If no image exists: call '/tikz/external/system call'. This will
+% process \tikzexternal@externalizefig.
+% 4. Assert that finally an image exists and use it.
+\def\tikzexternal@externalizefig@systemcall{%
+ \tikzexternal@TEXDIALECT@collectpicture\tikzexternal@externalizefig@systemcall@@
+}
+
+{
+\catcode`\"=12
+\catcode`\'=12
+\catcode`\;=12
+\catcode`\&=12
+\catcode`\-=12
+\xdef\tikzexternal@normal@dq{"}
+\xdef\tikzexternal@normal@sq{'}
+\xdef\tikzexternal@normal@semic{;}
+\xdef\tikzexternal@normal@and{&}
+\xdef\tikzexternal@normal@dash{-}
+\catcode`\"=13
+\catcode`\'=13
+\catcode`\;=13
+\catcode`\&=13
+\catcode`\-=13
+\gdef\tikzexternal@activate@normal@dq{\let"=\tikzexternal@normal@dq}
+\gdef\tikzexternal@activate@normal@sq{\let'=\tikzexternal@normal@sq}
+\gdef\tikzexternal@activate@normal@semic{\let;=\tikzexternal@normal@semic}
+\gdef\tikzexternal@activate@normal@and{\let&=\tikzexternal@normal@and}
+\gdef\tikzexternal@activate@normal@dash{\let-=\tikzexternal@normal@dash}
+\catcode`\|=0
+\catcode`\\=12
+|xdef|tikzexternal@normal@backslash{\}%
+}
+{
+\catcode`\^^I=12
+\catcode`\$=12
+\catcode`\%=12
+\catcode`\#=12
+\gdef\tikzexternal@HASHchar{#}
+\gdef\tikzexternal@TABchar{^^I}\gdef\tikzexternal@PERCENTchar{%}\xdef\tikzexternal@DOLLARchar{$}}
+
+% Creates the '/tikz/external/system call' command as string and
+% returns it into the (global!) macro #2.
+% #1: the image file name (as returned by
+% \tikzexternalgetnextfilename)
+% #2: the global return value macro
+%
+\def\tikzexternal@assemble@systemcall#1#2{%
+ \begingroup
+ \def\image{#1}%
+ \iftikzexternal@auto@detect@jobname
+ \edef\texsource{\string\def\string\tikzexternalrealjob{\tikzexternal@realjob}\string\input{\tikzexternal@realjob}}%
+ \else
+ \let\texsource=\tikzexternal@realjob
+ \fi
+ \ifnum\the\catcode`\"=13 \tikzexternal@activate@normal@dq\fi
+ \ifnum\the\catcode`\'=13 \tikzexternal@activate@normal@sq\fi
+ \ifnum\the\catcode`\;=13 \tikzexternal@activate@normal@semic\fi
+ \ifnum\the\catcode`\-=13 \tikzexternal@activate@normal@dash\fi
+ \let\\=\tikzexternal@normal@backslash
+ \xdef#2{\pgfkeysvalueof{/tikz/external/system call}}%
+ \endgroup
+}%
+\long\def\tikzexternal@externalizefig@systemcall@@#1{%
+ \tikzexternal@externalizefig@systemcall@uptodatecheck{#1}%
+ \tikzexternal@assemble@systemcall{\tikzexternal@curfilename}{\pgf@tempa}%
+ \global\let\tikzexternal@cursyscall=\pgf@tempa
+ \gdef\tikzexternal@typeset@picture@on@failure{1}%
+ \iftikzexternal@file@isuptodate
+ \iftikzexternal@verboseio
+ \immediate\write16{===== Image '\tikzexternal@curfilename' is up-to-date. ======}%
+ \fi
+ \let\pgf@filename=\tikzexternal@curfilename
+ \else
+ \begingroup
+ % no such image. Generate it!
+ %
+ \tikzexternalauxlock@setlock1%
+ \tikzexternal@externalizefig@systemcall@call{\tikzexternal@cursyscall}%
+ \tikzexternalauxlock@setlock0%
+ \expandafter\tikzexternal@externalizefig@systemcall@assertsuccess\expandafter{\tikzexternal@cursyscall}%
+ \pgfmath@smuggleone\pgf@filename
+ \endgroup
+ \fi
+ \ifx\pgf@filename\pgfutil@empty
+ \if1\tikzexternal@typeset@picture@on@failure
+ % error recovery: something did not work! Try to load it
+ % anyway. Perhaps it was just that shell-escape wasn't
+ % enabled.
+ \begingroup
+ \toks0={%
+ \tikzexternaldisable
+ \pgfutil@ifundefined{scantokens}{\long\def\scantokens##1{##1}}{}%
+ }%
+ % FIXME : THIS WILL FAIL IF THERE IS '##' INSIDE OF '#1'!
+ % for example something like /.style={#1} in the picture environment *will* fail.
+ \toks1={%
+ \tikzpicture
+ #1%
+ }%
+ \toks2={%
+ \tikzexternal@TEXDIALECT@endpicture
+ \tikzexternalenable
+ }%
+ \xdef\tikzexternal@externalizefig@systemcall@next{%
+ \the\toks0
+ % try reading them again as if they were in the input file.
+ \noexpand\scantokens{\the\toks1 }%
+ \the\toks2
+ }%
+ \endgroup
+ \else
+ % Ah -- this picture failed, but the failure has already
+ % been handled somehow. Do not typeset it again!
+ %
+ % A use-case is that the picture has been rescheduled for
+ % \end{document}.
+ \gdef\tikzexternal@externalizefig@systemcall@next{\tikzexternal@closeenvironments}%
+ \fi
+ \else
+ % ok, take the image!
+ \gdef\tikzexternal@systemcall@reschedule@to@end@document{0}%
+ \expandafter\pgfincludeexternalgraphics\expandafter{\tikzexternal@curfilename}%
+ \if1\tikzexternal@systemcall@reschedule@to@end@document
+ \pgfutil@IfUndefined{AtVeryEndDocument}{%
+ }{%
+ \immediate\write16{===== The previous system call resulted in undefined references inside of the output file. Rescheduling it for \string\end{document}. ========}%
+ \expandafter\tikzexternal@externalizefig@systemcall@reschedule\expandafter{\tikzexternal@cursyscall}%
+ }%
+ \fi
+ \gdef\tikzexternal@externalizefig@systemcall@next{\tikzexternal@closeenvironments}%
+ \fi
+ \tikzexternal@externalizefig@systemcall@next
+}%
+
+\def\tikzexternal@externalizefig@systemcall@call#1{%
+ \iftikzexternal@verboseio
+ \immediate\write16{===== 'mode=convert with system call': Invoking '#1' ========}%
+ \fi
+ \pgfutil@shellescape{#1}%
+}%
+
+% Sets \iftikzexternal@file@isuptodate to false if one of the "force
+% remake" things is active.
+\def\tikzexternal@checkforceremake{%
+ \iftikzexternal@force@remake
+ \global\tikzexternal@file@isuptodatefalse
+ \else
+ \iftikzexternalremakenext
+ \global\tikzexternal@file@isuptodatefalse
+ \global\tikzexternalremakenextfalse
+ \fi
+ \fi
+}
+
+\pgfutil@IfUndefined{pdfmdfivesum}{%
+}{%
+ % predefine to this value. This does only make sense for pdftex.
+ % note that the latex library for 'external' loads \usepackage{pdftexcmds} which \let's this to \pdf@mdfivesum:
+ \let\tikzexternal@mdfivesum=\pdfmdfivesum
+}%
+
+\long\def\tikzexternal@computemdfivesum#1{%
+ \t@tikzexternal@tmpb={#1}%
+ \edef\tikzexternal@temp{\the\t@tikzexternal@tmpb}%
+ % \meaning results in a string of catcode 12 - which is expandable.
+ \edef\pgfretval{\tikzexternal@mdfivesum{\meaning\tikzexternal@temp}}%
+}
+\long\def\tikzexternal@computemdfivesum@diff@fallback#1{%
+ \t@tikzexternal@tmpb={#1}%
+ \edef\tikzexternal@temp{\the\t@tikzexternal@tmpb}%
+ % \meaning results in a string of catcode 12 - which is expandable.
+ \edef\pgfretval{\meaning\tikzexternal@temp}%
+}
+
+% Will be set dynamically, depending on 'up to date check'.
+%
+% It expands to code such that \tikzexternallastkey contains the
+% serialized version of '#1'.
+%
+% It is used as argument for \write{..}
+%
+% #1 the hash key to serialize.
+% \def\tikzexternal@hashfct@serialize
+\long\def\tikzexternal@hashfct@serialize@std#1{%
+ \noexpand\def\noexpand\tikzexternallastkey{#1}%
+}%
+
+% serializes using temporary token registers. Necessary if #1 contains
+% executable code.
+\long\def\tikzexternal@hashfct@serialize@tok#1{%
+ \noexpand\begingroup
+ % in order to allow '#' inside of the body, we have to use token registers:
+ \noexpand\toks0={#1}%
+ \noexpand\xdef\noexpand\tikzexternallastkey{\noexpand\the\noexpand\toks0 }%
+ \noexpand\endgroup
+}%
+
+\def\tikzexternal@check@uptodate@ext{.md5}
+
+\def\tikzexternal@check@uptodate@mode@warn@fallback{%
+ \message{! Package tikz Warning: The key 'up to date check=md5' is impossible, there is no macro to compute MD5. Falling back to 'up to date check=diff'.}%
+ %
+ % warn only once:
+ \global\let\tikzexternal@check@uptodate@mode@warn@fallback=\relax
+}%
+
+% assigns the boolean \iftikzexternal@file@isuptodate
+\long\def\tikzexternal@check@uptodate@mode#1{%
+ \if1\tikzexternal@uptodate@mode
+ % up to date check=md5:
+ % check if we CAN compute MD5 sums:
+ \pgfutil@IfUndefined{tikzexternal@mdfivesum}{%
+ % we cannot compute md5 sums - fallback to diff.
+ \tikzexternal@check@uptodate@mode@warn@fallback
+ \def\tikzexternal@uptodate@mode{2}%
+ }{}%
+ \fi
+ %
+ \ifcase\tikzexternal@uptodate@mode
+ % up to date check=simple
+ % nothing to do -- file existance is checked anyway.
+ \let\tikzexternal@hashfct=\pgfutil@empty
+ \let\tikzexternal@hashfct@serialize=\pgfutil@empty
+ \or
+ % up to date check=md5
+ \let\tikzexternal@hashfct=\tikzexternal@computemdfivesum
+ \let\tikzexternal@hashfct@serialize=\tikzexternal@hashfct@serialize@std
+ \or
+ \let\tikzexternal@hashfct=\tikzexternal@computemdfivesum@diff@fallback
+ \let\tikzexternal@hashfct@serialize=\tikzexternal@hashfct@serialize@tok
+ \fi
+ \ifx\tikzexternal@hashfct\pgfutil@empty
+ \else
+ \tikzpicturedependsonfile{\tikzexternal@curfilename\tikzexternal@check@uptodate@ext}%
+ \tikzexternal@hashfct{#1}%
+ \let\tikzexternal@lastkey@new=\pgfretval
+ \begingroup
+ % no '@' token in this macro: avoid messing up the catcodes in input files:
+ \global\let\tikzexternallastkey=\pgfutil@empty
+ \openin\r@pgf@reada=\tikzexternal@curfilename\tikzexternal@check@uptodate@ext\relax %
+ \ifeof\r@pgf@reada
+ \else
+ % read first line...
+ \endlinechar=-1 % older versions did not have a '%' at the end-of-line. Avoid spurious spaces.
+ \read\r@pgf@reada to\pgf@tempa
+ % ... and execute it.
+ \pgf@tempa
+ % it should contain a definition of \tikzexternallastkey.
+ \fi
+ \closein\r@pgf@reada
+ %
+ \let\tikzexternal@lastkey=\tikzexternallastkey
+ \pgfmath@smuggleone\tikzexternal@lastkey
+ \endgroup
+ % normalize catcodes. Unfortunately, they cannot be expected to be the same.
+ % \meaning will use catcode 12 for each token:
+ \edef\tikzexternal@lastkey@normalized{\meaning\tikzexternal@lastkey}%
+ \edef\tikzexternal@lastkey@new@normalized{\meaning\tikzexternal@lastkey@new}%
+ \iftikzexternal@verboseuptodate
+ \immediate\write16{Up-to-date check of \tikzexternal@curfilename: new \tikzexternal@lastkey@new@normalized; old \tikzexternal@lastkey@normalized.^^J}%
+ \fi
+ \ifx\tikzexternal@lastkey@normalized\tikzexternal@lastkey@new@normalized
+ \tikzexternal@file@isuptodatetrue
+ \else
+ \tikzexternal@file@isuptodatefalse
+ \immediate\openout\w@pgf@writea=\tikzexternal@curfilename\tikzexternal@check@uptodate@ext\relax%
+ \immediate\write\w@pgf@writea{\tikzexternal@hashfct@serialize{\tikzexternal@lastkey@new}\tikzexternal@PERCENTchar}%
+ \immediate\closeout\w@pgf@writea
+ \fi
+ \fi
+}
+
+% Checks whether the current picture needs to be externalized.
+%
+% This is the case if
+% a) there is no external image yet,
+% b) the picture has been invalidated manually.
+%
+% It returns \iftikzexternal@file@isuptodate accordingly.
+% #1: the picture-content
+\long\def\tikzexternal@externalizefig@systemcall@uptodatecheck#1{%
+ \tikzexternal@check@uptodate@mode{#1}%
+ \tikzexternal@checkforceremake
+ \iftikzexternal@file@isuptodate
+ % check if there is already a file.
+ % In that case, use it. If that is not the case, generate it and include it afterwards.
+ \gdef\pgf@filename{}%
+ \xdef\pgf@tempa{\noexpand\pgf@findfile\pgfsys@imagesuffixlist:+{\tikzexternal@curfilename}}%
+ \pgf@tempa
+ \ifx\pgf@filename\pgfutil@empty%
+ \global\tikzexternal@file@isuptodatefalse
+ \fi
+ \fi
+}%
+
+% \pgf@filename will be empty if the assertion failed.
+\def\tikzexternal@externalizefig@systemcall@assertsuccess#1{%
+ % check if there is a file now and raise an error message if not.
+ \gdef\pgf@filename{}%
+ \xdef\pgf@tempa{\noexpand\pgf@findfile\pgfsys@imagesuffixlist:+{\tikzexternal@curfilename}}%
+ \pgf@tempa
+ \ifx\pgf@filename\pgfutil@empty%
+ \tikzexternal@externalizefig@systemcall@handleexception{#1}%
+ \fi
+}%
+\def\tikzexternal@externalizefig@systemcall@handleexception@msg#1{%
+ \tikzerror{Sorry, the system call '#1' did NOT result in a usable output file '\tikzexternal@curfilename' (expected one of \pgfsys@imagesuffixlist). Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something like that. Or maybe the command simply failed? Error messages can be found in '\tikzexternal@curfilename.log'. If you continue now, I'll try to typeset the picture}{}%
+}
+\def\tikzexternal@externalizefig@systemcall@handleexception@retry@later#1{%
+ \gdef\tikzexternal@systemcall@reschedule@to@end@document{0}%
+ \expandafter\pgfexternalreaddpth\expandafter{\tikzexternal@curfilename}%
+ \if1\tikzexternal@systemcall@reschedule@to@end@document
+ \pgfutil@IfUndefined{AtVeryEndDocument}{%
+ \tikzexternal@externalizefig@systemcall@handleexception@msg{#1}%
+ }{%
+ \immediate\write16{===== The last system call resulted in an EMPTY output file. Maybe it is part of \string\ref. Rescheduling it for \string\end{document}. ========}%
+ \gdef\tikzexternal@typeset@picture@on@failure{0}%
+ \tikzexternal@externalizefig@systemcall@reschedule{#1}%
+ }%
+ \else
+ \tikzexternal@externalizefig@systemcall@handleexception@msg{#1}%
+ \fi
+}
+
+% reschedules the externalization of the current file to
+% \AtVeryEndDocument.
+%
+% This hook allows to execute code AFTER the main .aux file is
+% finished; it will even re-read the main aux file.
+\def\tikzexternal@externalizefig@systemcall@reschedule#1{%
+ \t@tikzexternal@tmpb={%
+ \global\let\tikzexternal@externalizefig@systemcall@handleexception=\tikzexternal@externalizefig@systemcall@handleexception@msg%
+ % ... no auxlocks!
+ \tikzexternal@externalizefig@systemcall@call{#1}%
+ \tikzexternal@externalizefig@systemcall@assertsuccess{#1}%
+ }%
+ \xdef\pgfutil@tempa{%
+ \noexpand\def\noexpand\tikzexternal@curfilename{\tikzexternal@curfilename}%
+ \the\t@tikzexternal@tmpb
+ }%
+ \expandafter\AtVeryEndDocument\expandafter{\pgfutil@tempa}%
+ \gdef\tikzexternal@has@rescheduled@something{1}%
+}%
+\let\tikzexternal@externalizefig@systemcall@handleexception=\tikzexternal@externalizefig@systemcall@handleexception@retry@later%
+
+\def\tikzexternal@has@rescheduled@something{0}%
+\pgfutil@IfUndefined{AtVeryEndDocument}{}{%
+ \AtVeryEndDocument{%
+ \if1\tikzexternal@has@rescheduled@something
+ \immediate\write16{===== tikzexternal: \string\end{document} reached. Working on rescheduled images to resolve references... ========}%
+ \fi
+ }%
+}
+
+% Overwrite error message of pgf.
+% This happens if the generated image was empty, i.e. if there was no \shipout.
+\def\pgfexternal@error@no@shipout{%
+ \begingroup
+ \begingroup
+ % overwrite .dpth file in order to flag the file as "need to be scheduled
+ % for \AtVeryEndDocument" :
+ \immediate\openout\pgf@plotwrite=\pgfactualjobname.dpth
+ \let\w@pgfexternal@auxout=\pgf@plotwrite
+ \pgfexternalstorecommand@isexporting{\gdef\noexpand\tikzexternal@systemcall@reschedule@to@end@document{1}}%
+ \immediate\closeout\pgf@plotwrite
+ \endgroup
+ \tikzexternal@assemble@systemcall{\pgfactualjobname}{\pgf@tempa}%
+ \toks0=\expandafter{\pgf@tempa}%
+ \tikzerror{Sorry, image externalization failed: the resulting image was EMPTY. I tried to externalize '\pgfactualjobname', but it seems there is no such image in the document!?
+ \if\tikzexternal@opmode4 ^^J
+\space\space You are currently using 'mode=convert with system call'. This problem can happen if the image (or one of the images preceeding it) was declared inside of a \string\label{} (i.e. in the .aux file): 'convert with system call' has no access to the main aux file.^^J
+\space\space Possible solutions in this case:^^J
+\space\space (a) Try using 'mode=list and make',^^J
+\space\space (b) Issue the externalization command '\the\toks0' *manually* (also check the preceeding externalized images, perhaps the file name sequence is not correct).^^J
+\space\space Repeat: the resulting image was EMPTY, your attention is required
+\else
+ \if\tikzexternal@opmode5 ^^J
+\space\space You are currently using 'mode=list and make'. Possible solutions:^^J
+\space\space (a) Try to delete `\tikzexternal@realjob.makefile'. Perhaps it is not up-to-date.^^J
+\space\space (b) Perhaps pictures are declared inside of \string\label{} and the .aux file is not up-to-date. Re-run latex, perhaps re-generate the graphics as well.^^J
+\space\space Repeat: the resulting image was EMPTY, your attention is required
+ \fi
+\fi}%
+ \endgroup
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex
new file mode 100644
index 0000000000..e4ef015455
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex
@@ -0,0 +1,133 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% For reasons of simplicity, I have copied the whole file, including own contributions AND
+%%% PGF parts. The copyrights are as they appear in PGF.
+%%%
+%%% Note that pgfplots has compatible licenses.
+%%%
+%%% This copy has been modified in the following ways:
+%%% - nested \input commands have been updated
+%%%
+%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Date of this copy: Do 31. Dez 19:01:21 CET 2015 %%%
+
+
+
+% Copyright 2008 by Christian Feuersaenger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+%
+%
+% This file provides a high-level automatic export feature for tikz pictures.
+% It allows to export EACH SINGLE FIGURE into a separate PDF.
+%
+% The simplest way is to use
+%
+% \tikzexternalize{myarticle}
+%
+% it simply converts every figure using the write18 method. If that is not possible,
+% you need to reconfigure \tikzexternalize: it can generate a list of figure file names
+% and you need to generate these figures manually (or with a script).
+%
+% It replaces \tikzpicture/ \endtikzpicture and \tikz and invokes \beginpgfgraphicnamed ... \endpgfgraphicnamed
+% commands if necessary.
+
+% load this package in order to get \pdf@mdfivesum .
+% \pdf@mdfivesum is available for pdftex and lualatex and computes the
+% md5 sum. Note that pdftex has \pdfmdfivesum, but lualatex does not
+% have it.
+%
+% ... also used for \pdf@shellescape.
+\usepackage{pdftexcmds}
+\pgfutil@IfFileExists{atveryend.sty}{%
+ \usepackage{atveryend}%
+}{%
+ \message{! Package tikz Warning: \string\usepackage{atveryend} impossible. Automatic resolving of references within external files impossible.}%
+}%
+
+% source generic implementation:
+\input pgfplotsoldpgfsupp_tikzexternalshared.code.tex
+
+\pgfutil@IfUndefined{pdf@mdfivesum}{}{%
+ \let\tikzexternal@mdfivesum=\pdf@mdfivesum
+}%
+
+\def\tikzexternal@TEXDIALECT@begpicture{\begin{tikzpicture}}
+\def\tikzexternal@TEXDIALECT@endpicture{\end{tikzpicture}}%
+
+% this latex specific this assumes it starts at the beginning of an
+% environment. The environment is named
+% '\tikzexternal@laTeX@collect@until@end@tikzpicturetikzpicturestring'.
+%
+% Everything up to \end{<name>} will be collected and passed as
+% argument to the macro '#1'.
+%
+% This does also work if <name> is NOT tikzpicture!
+\def\tikzexternal@TEXDIALECT@collectpicture#1{%
+ \begingroup
+ \t@tikzexternal@tmpa={}%
+ \tikzexternal@laTeX@collect@until@end@tikzpicture{#1}%
+}
+
+% Loop until we find '\end{tikzpicture}'. We have to make sure that
+% even strings like '#1' are allowed inside of the collected argument.
+\long\def\tikzexternal@laTeX@collect@until@end@tikzpicture#1#2\end#3{%
+ \def\tikzexternal@laTeX@collect@until@end@tikzpicture@{#3}%
+ \ifx\tikzexternal@laTeX@collect@until@end@tikzpicture@\tikzexternal@laTeX@collect@until@end@tikzpicturetikzpicturestring
+ \t@tikzexternal@tmpa=\expandafter{\the\t@tikzexternal@tmpa #2}%
+ \edef\tikzexternal@TEXDIALECT@collectpicture@next{%
+ \noexpand\endgroup
+ \noexpand#1{\the\t@tikzexternal@tmpa}%
+ }%
+ \t@tikzexternal@tmpa={}% release memory.
+ \else
+ \t@tikzexternal@tmpa=\expandafter{\the\t@tikzexternal@tmpa #2\end{#3}}%
+ \def\tikzexternal@TEXDIALECT@collectpicture@next{%
+ \tikzexternal@laTeX@collect@until@end@tikzpicture{#1}}%
+ \fi
+ \tikzexternal@TEXDIALECT@collectpicture@next
+}%
+\def\tikzexternal@laTeX@collect@until@end@tikzpicturetikzpicturestring{tikzpicture}%
+
+\def\tikzexternal@handle@landscape{%
+ \ltx@ifpackageloaded{pdflscape}{%
+ % Work around a bug in conjunction with pdflscape and
+ % external: without this optimize-away-instruction, the
+ % externalized image would be rotated - and it will be rotated
+ % once more again when it is included.
+ %
+ % if we "optimize it away", the landscape stuff will be
+ % omitted. I hope this is enough... might not be entirely
+ % fool-proof; perhaps we need to set it to \relax. For now, it
+ % will probably do the job
+ \tikzset{
+ external/.cd,
+ optimize command away=\landscape,
+ optimize command away=\endlandscape
+ }%
+ }{%
+ }%
+}%
+
+\AtBeginDocument{%
+ \pgfutil@ifundefined{tikzexternalrealjob}{%
+ \global\let\tikzexternalrealjob=\jobname
+ }{}%
+ \tikzexternal@handle@landscape
+}%
+
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_trig_format.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_trig_format.code.tex
new file mode 100644
index 0000000000..4ebb95439e
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsoldpgfsupp_trig_format.code.tex
@@ -0,0 +1,380 @@
+% This file contains patches to support 'trig format'
+%
+%%% This file is a copy of some part of PGF/Tikz.
+%%% It has been copied here to provide :
+%%% - compatibility with older PGF versions
+%%% - availability of PGF contributions by Christian Feuersaenger
+%%% which are necessary or helpful for pgfplots.
+%%%
+%%% This file contains just the functionality for trig format (written by Christian Feuersaenger).
+%%%
+% Support for the contents of this file will NOT be done by the PGF/TikZ team.
+% Please contact the author and/or maintainer of pgfplots (Christian Feuersaenger) if you need assistance in conjunction
+% with the deployment of this patch or partial content of PGF. Note that the author and/or maintainer of pgfplots has no obligation to fix anything:
+% This file comes without any warranty as the rest of pgfplots; there is no obligation for help.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfkeys{
+ /pgf/trig format/.is choice,
+ /pgf/trig format/deg/.code={\def\pgfmath@trig@format@choice{0}},
+ /pgf/trig format/rad/.code={\def\pgfmath@trig@format@choice{1}},
+ /pgf/trig format/deg,
+}
+
+% Executes #1 if 'trig format=deg' and #2 otherwise.
+\def\pgfmathiftrigonometricusesdeg#1#2{%
+ \if0\pgfmath@trig@format@choice
+ #1%
+ \else
+ #2%
+ \fi
+}%
+
+\pgfutil@ifundefined{pgfmath@multiply@thousand}{%
+ % Oh - we are working against PGF 2.10 . Apply more patches:
+ %
+ \def\pgfmath@multiply@thousand#1.#2#3#4#5\relax{%
+ \edef\pgfmathresult{#1#2#3#4.#5}%
+ }%
+ % Defines \pgfmath@x to be the result of the table lookup for value
+ % '#1' in table '#2'
+ %
+ % #1: a value for which lookup should be performed
+ % #2: the table's prefix name
+ % #3: the table's size
+ \def\pgfmath@table@lookup#1#2#3{%
+ \pgfmath@x=#1\relax
+ \expandafter\pgfmath@table@lookup@\the\pgfmath@x\relax{#2}{#3}%
+ }
+ \def\pgfmath@table@lookup@#1.#2\relax#3#4{%
+ \edef\pgf@temp{\Pgf@geT#2}% strip 'pt' suffix.
+ %
+ % prepare constant interpolant (i.e. the value at node '#1'):
+ \pgfmath@x=\csname #3#1\endcsname pt %
+ %
+ \c@pgfmath@countc=#1 %
+ \advance\c@pgfmath@countc by1 %
+ \ifnum\c@pgfmath@countc<#4 %
+ % Ah - we have enough elements in the table.
+ %
+ % perform linear interpolation:
+ \pgfmath@ya=\csname #3\the\c@pgfmath@countc\endcsname pt %
+ \advance\pgfmath@ya by-\pgfmath@x %
+ \advance\pgfmath@x by0.\pgf@temp\pgfmath@ya
+ \fi
+ }%
+}{}%
+
+
+
+\def\pgfmath@scale@rad@to@deg#1{%
+ #1=57.29577#1\relax% 57.29577 = 360/(2*pi)
+}%
+\def\pgfmath@scale@deg@to@rad#1{%
+ #1=3.14159#1%
+ \divide#1180\relax%
+}%
+
+\def\pgfmathsin@#1{%
+ % Let #1 = a.b
+ % Then sin(#1) \approx (1-b)*sin(a) + b*sin(a+1)
+ %
+ \begingroup%
+ \expandafter\pgfmath@x#1pt\relax%
+ \if1\pgfmath@trig@format@choice
+ % trig format=rad
+ \pgfmath@scale@rad@to@deg\pgfmath@x
+ \fi
+ \advance\pgfmath@x-90pt\relax%
+ \afterassignment\pgfmath@gobbletilpgfmath@
+ \expandafter\c@pgfmath@counta\the\pgfmath@x\relax\pgfmath@
+ \divide\c@pgfmath@counta360\relax%
+ \multiply\c@pgfmath@counta-360\relax%
+ \advance\pgfmath@x\c@pgfmath@counta pt\relax%
+ \ifdim\pgfmath@x<0pt\relax\pgfmath@x-\pgfmath@x\fi%
+ \ifdim\pgfmath@x<180pt\relax%
+ \else
+ \pgfmath@x-\pgfmath@x%
+ \advance\pgfmath@x360pt\relax%
+ \fi%
+ % Now 0 <= x < 179. So split x into integer and decimal...
+ %
+ \afterassignment\pgfmath@xa%
+ \expandafter\c@pgfmath@counta\the\pgfmath@x\relax%
+ %
+ % ...if #1 is an integer, don't do anything fancy.
+ \ifdim\pgfmath@xa=0pt%
+ \expandafter\pgfmath@x\csname pgfmath@cos@\the\c@pgfmath@counta\endcsname pt\relax%
+ \else%
+ \pgfmath@x-\pgfmath@xa%
+ \advance\pgfmath@x1pt\relax%
+ \expandafter\pgfmath@x\csname pgfmath@cos@\the\c@pgfmath@counta\endcsname\pgfmath@x%
+ \advance\c@pgfmath@counta1\relax%
+ \ifnum\c@pgfmath@counta=181\relax\c@pgfmath@counta179\relax\fi%
+ \expandafter\advance\expandafter\pgfmath@x\csname pgfmath@cos@\the\c@pgfmath@counta\endcsname\pgfmath@xa%
+ \fi%
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup
+}
+
+% \pgfmathcos
+%
+% Calculate the cosine of #1 (in degrees).
+%
+\def\pgfmathcos@#1{%
+ % Let x = a.b
+ % Then cos(x) \approx (1-b)*cos(a) + b*cos(a+1)
+ %
+ \begingroup%
+ \expandafter\pgfmath@x#1pt\relax%
+ \if1\pgfmath@trig@format@choice
+ % trig format=rad
+ \pgfmath@scale@rad@to@deg\pgfmath@x
+ \fi
+ \afterassignment\pgfmath@gobbletilpgfmath@%
+ \expandafter\c@pgfmath@counta\the\pgfmath@x\relax\pgfmath@%
+ \divide\c@pgfmath@counta360\relax%
+ \multiply\c@pgfmath@counta-360\relax%
+ \advance\pgfmath@x\c@pgfmath@counta pt\relax%
+ \ifdim\pgfmath@x<0pt\relax\pgfmath@x-\pgfmath@x\fi%
+ \ifdim\pgfmath@x<180pt\relax%
+ \else%
+ \pgfmath@x-\pgfmath@x%
+ \advance\pgfmath@x360pt\relax%
+ \fi%
+ % Now 0 <= x < 179. So split x into integer and decimal...
+ %
+ \afterassignment\pgfmath@xa%
+ \expandafter\c@pgfmath@counta\the\pgfmath@x\relax%
+ %
+ % ...if #1 is an integer, don't do anything fancy.
+ \ifdim\pgfmath@xa=0pt%
+ \expandafter\pgfmath@x\csname pgfmath@cos@\the\c@pgfmath@counta\endcsname pt%
+ \else%
+ \pgfmath@x-\pgfmath@xa%
+ \advance\pgfmath@x1pt\relax%
+ \expandafter\pgfmath@x\csname pgfmath@cos@\the\c@pgfmath@counta\endcsname\pgfmath@x%
+ \advance\c@pgfmath@counta1\relax%
+ \ifnum\c@pgfmath@counta=181\relax\c@pgfmath@counta179\relax\fi%
+ \expandafter\advance\expandafter\pgfmath@x\csname pgfmath@cos@\the\c@pgfmath@counta\endcsname\pgfmath@xa%
+ \fi%
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}
+
+\def\pgfmathasin@#1{%
+ \begingroup%
+ \pgfmath@x=#1pt %
+ \pgfmath@xa\pgfmath@x%
+ \edef\pgf@temp{\pgf@sys@tonumber\pgfmath@x}%
+ % compute lossless '*1000' operation:
+ \expandafter\pgfmath@multiply@thousand\pgf@temp 000\relax
+ \pgfmath@x=\pgfmathresult pt %
+ \ifdim\pgfmath@x<0pt\relax%
+ \pgfmath@x-\pgfmath@x%
+ \fi%
+ \pgfmath@table@lookup{\pgfmath@x}{pgfmath@acos@}{1001}%
+ \pgfmath@x=-\pgfmath@x
+ \advance\pgfmath@x90pt\relax%
+ \ifdim\pgfmath@xa<0pt\relax%
+ \pgfmath@x-\pgfmath@x%
+ \fi%
+ \if1\pgfmath@trig@format@choice
+ % trig format=rad
+ \pgfmath@scale@deg@to@rad\pgfmath@x
+ \fi
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}
+\def\pgfmathacos@#1{%
+ \begingroup%
+ \pgfmath@x#1pt\relax%
+ \pgfmath@xa\pgfmath@x%
+ \edef\pgf@temp{\pgf@sys@tonumber\pgfmath@x}%
+ % compute lossless '*1000' operation:
+ \expandafter\pgfmath@multiply@thousand\pgf@temp 000\relax
+ \pgfmath@x=\pgfmathresult pt %
+ \ifdim\pgfmath@x<0pt\relax%
+ \pgfmath@x-\pgfmath@x%
+ \fi%
+ \pgfmath@table@lookup{\pgfmath@x}{pgfmath@acos@}{1001}%
+ \ifdim\pgfmath@xa<0pt\relax%
+ \pgfmath@x-\pgfmath@x%
+ \advance\pgfmath@x by180pt\relax%
+ \fi%
+ \if1\pgfmath@trig@format@choice
+ % trig format=rad
+ \pgfmath@scale@deg@to@rad\pgfmath@x
+ \fi
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}
+
+\def\pgfmathatan@#1{%
+ \begingroup%
+ \expandafter\pgfmath@x#1pt\relax%
+ \pgfmath@xa\pgfmath@x%
+ \ifdim\pgfmath@x<0pt\relax%
+ \pgfmath@x-\pgfmath@x%
+ \fi%
+ \pgfmath@xb\pgfmath@x%
+ \ifdim\pgfmath@x>1pt\relax%
+ \edef\pgfmath@temp{\pgfmath@tonumber{\pgfmath@x}}%
+ \pgfmathreciprocal@{\pgfmath@temp}%
+ \pgfmath@x\pgfmathresult pt\relax%
+ \fi%
+ % compute lossless '*1000' operation:
+ \edef\pgf@temp{\pgf@sys@tonumber\pgfmath@x}%
+ \expandafter\pgfmath@multiply@thousand\pgf@temp 000\relax
+ \pgfmath@x=\pgfmathresult pt %
+ \pgfmath@table@lookup{\pgfmath@x}{pgfmath@atan@}{1001}%xxx
+ \ifdim\pgfmath@xb>1pt\relax%
+ \pgfmath@x=-\pgfmath@x%
+ \advance\pgfmath@x90pt%
+ \fi%
+ \ifdim\pgfmath@xa<0pt\relax%
+ \pgfmath@x-\pgfmath@x%
+ \fi%
+ \if1\pgfmath@trig@format@choice
+ % trig format=rad
+ \pgfmath@scale@deg@to@rad\pgfmath@x
+ \fi
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}
+
+\expandafter\def\csname pgfmathatan2@\endcsname#1#2{%
+ % Note: first parameter is y (!), second is x (!)
+ \begingroup%
+ \pgfmath@y=#1pt\relax%
+ \ifdim\pgfmath@y<0pt\relax%
+ \pgfmath@y=-\pgfmath@y%
+ \fi%
+ \ifdim\pgfmath@y<0.001pt\relax%
+ \ifdim#2pt<0pt\relax%
+ \pgfmath@x=-180pt\relax%
+ \else%
+ \ifdim#2pt>0pt\relax%
+ \pgfmath@x=0pt\relax%
+ \else%
+ \ifdim#1pt<0pt%
+ \pgfmath@x=-90pt\relax%
+ \else%
+ \pgfmath@x=90pt\relax%
+ \fi%
+ \fi%
+ \fi%
+ \else%
+ \pgfmathabs@{#1}\let\pgfmath@tempa\pgfmathresult%
+ \pgfmathabs@{#2}\let\pgfmath@tempb\pgfmathresult%
+ \ifdim\pgfmath@tempa pt>\pgfmath@tempb pt%
+ \pgfmathdivide@{#2}{\pgfmath@tempa}%
+ \expandafter\pgfmathatan@\expandafter{\pgfmathresult}%
+ \pgfmath@x=90pt%
+ \advance\pgfmath@x by-\pgfmathresult pt\relax%
+ \else%
+ \pgfmathdivide@{\pgfmath@tempa}{#2}%
+ \expandafter\pgfmathatan@\expandafter{\pgfmathresult}%
+ \pgfmath@x=\pgfmathresult pt\relax%
+ \ifdim#2pt<0pt%
+ \advance\pgfmath@x by180pt\relax%
+ \fi%
+ \fi%
+ \ifdim#1pt<0pt\relax%
+ \pgfmath@x=-\pgfmath@x%
+ \fi%
+ \fi%
+ \if1\pgfmath@trig@format@choice
+ % trig format=rad
+ \pgfmath@scale@deg@to@rad\pgfmath@x
+ \fi
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}
+
+% FPU:
+
+
+\let\pgfmath@basic@sin@=\pgfmathsin@
+\let\pgfmath@basic@cos@=\pgfmathcos@
+\let\pgfmath@basic@tan@=\pgfmathtan@
+\let\pgfmath@basic@atan@=\pgfmathatan@
+\let\pgfmath@basic@asin@=\pgfmathasin@
+\let\pgfmath@basic@acos@=\pgfmathacos@
+\let\pgfmath@basic@cot@=\pgfmathcot@
+\let\pgfmath@basic@sec@=\pgfmathsec@
+\let\pgfmath@basic@cosec@=\pgfmathcosec@
+
+% Computes #1(#2) where #1 is a trigonometric function, i.e.
+% #1(#2) = #1( #2 + r*360 )
+%
+% #1 is a one-argument macro which assigns \pgfmathresult.
+\def\pgfmathfloatTRIG@#1#2{%
+ \if0\pgfmath@trig@format@choice
+ % trig format=deg
+ \expandafter\ifx\csname pgfmathfloatTRIG@NUM\endcsname\relax%
+ % Lazy evaluation:
+ \pgfmathfloatcreate{1}{3.6}{2}%
+ \global\let\pgfmathfloatTRIG@NUM=\pgfmathresult
+ \pgfmathfloatcreate{1}{2.77777777777778}{-3}%
+ \global\let\pgfmathfloatTRIG@NUM@INV=\pgfmathresult
+ \fi
+ \pgfmathfloatmodknowsinverse@{#2}{\pgfmathfloatTRIG@NUM}{\pgfmathfloatTRIG@NUM@INV}%
+ \else
+ % trig format=rad
+ \expandafter\ifx\csname pgfmathfloatTRIG@rad@NUM\endcsname\relax%
+ % Lazy evaluation:
+ \pgfmathfloatcreate{1}{6.28318530717959}{0}%
+ \global\let\pgfmathfloatTRIG@rad@NUM=\pgfmathresult
+ \pgfmathfloatcreate{1}{1.59154943091895}{-1}%
+ \global\let\pgfmathfloatTRIG@rad@NUM@INV=\pgfmathresult
+ \fi
+ \pgfmathfloatmodknowsinverse@{#2}{\pgfmathfloatTRIG@rad@NUM}{\pgfmathfloatTRIG@rad@NUM@INV}%
+ \fi
+ \pgfmathfloattofixed@{\pgfmathresult}%
+ \expandafter#1\expandafter{\pgfmathresult}%
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+}%
+
+\def\pgfmathfloatsin@#1{\pgfmathfloatTRIG@\pgfmath@basic@sin@{#1}}
+\let\pgfmathfloatsin=\pgfmathfloatsin@
+\def\pgfmathfloatcos@#1{\pgfmathfloatTRIG@\pgfmath@basic@cos@{#1}}
+\let\pgfmathfloatcos=\pgfmathfloatcos@
+\def\pgfmathfloatsec@#1{\pgfmathfloatTRIG@\pgfmath@basic@cos@{#1}\pgfmathfloatreciprocal@{\pgfmathresult}}
+\let\pgfmathfloatsec=\pgfmathfloatsec@
+\def\pgfmathfloatcosec@#1{\pgfmathfloatTRIG@\pgfmath@basic@sin@{#1}\pgfmathfloatreciprocal@{\pgfmathresult}}
+\let\pgfmathfloatcosec=\pgfmathfloatcosec@
+
+\def\pgfmathfloatatan@#1{%
+ \begingroup
+ \expandafter\ifx\csname pgfmathfloatatan@TMP\endcsname\relax%
+ \pgfmathfloatcreate{1}{1.6}{4}%
+ \global\let\pgfmathfloatatan@TMP=\pgfmathresult
+ \pgfmathfloatcreate{2}{1.6}{4}%
+ \global\let\pgfmathfloatatan@TMPB=\pgfmathresult
+ \fi
+ \pgfmathfloatgreaterthan@{#1}{\pgfmathfloatatan@TMP}%
+ \ifpgfmathfloatcomparison
+ \pgfmathiftrigonometricusesdeg{%
+ \pgfmathfloatcreate{1}{9.0}{1}%
+ }{%
+ \pgfmathfloatcreate{1}{1.570796326794}{0}%
+ }%
+ \else
+ \pgfmathfloatlessthan{#1}{\pgfmathfloatatan@TMPB}%
+ \ifpgfmathfloatcomparison
+ \pgfmathiftrigonometricusesdeg{%
+ \pgfmathfloatcreate{2}{9.0}{1}%
+ }{%
+ \pgfmathfloatcreate{2}{1.570796326794}{0}%
+ }%
+ \else
+ \pgfmathfloattofixed@{#1}%
+ \expandafter\pgfmath@basic@atan@\expandafter{\pgfmathresult}%
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex
new file mode 100644
index 0000000000..f10082afb3
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsplothandlers.code.tex
@@ -0,0 +1,3083 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2010 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% 1. OVERVIEW
+%
+% Plot handlers are extended versions of the plot handlers of PGF with
+% backwards compatibility.
+%
+% To remind ourselfes: PGF plot handlers work like this
+% \pgfplotstreamstart
+% \pgfplotstreampoint{...}
+% \pgfplotstreampoint{...}
+% \pgfplotstreampoint{...}
+% \pgfplotstreampoint{...}
+% \pgfplotstreamend
+%
+% and that's it.
+%
+% PGFPlots plot handlers also contain these three macros. The tasks
+% are (of course) the same. In addition, they support a set of further
+% macros for every plot handler:
+%
+% \pgfplotsplothandlersurveystart
+% \pgfplotsplothandlersurveypoint
+% \pgfplotsplothandlersurveyend
+%
+% and serialization methods
+% \pgfplotsplothandlerserializepointto
+% \pgfplotsplothandlerdeserializepointfrom
+% \pgfplotsplothandlerserializestateto
+% \pgfplotsplothandlerdeserializepointfrom
+%
+% in addition, there are utility macros
+% \pgfplotsplothandlersurveydifflen#1#2
+% \pgfplotsplothandlersurveypointattime#1#2#3
+%
+% The idea is as follows:
+% During \addplot, PGFPLots performs a survey phase. Survey means:
+% nothing will be drawn, only stats will be collected. In this phase,
+% the \pgfplotsplothandlersurvey* methods will be invoked; followed by
+% a serialization.
+%
+% Then, when every plot has been surveyed, PGFPlots calls
+% \pgfplotsplothandlerdeserializestatefrom{<serialized state>}
+% \pgfplotstreamstart
+% foreach <serizalized point> {
+% \pgfplotsplothandlerdeserializepointfrom{<serialized point>}
+% apply data transformations
+% handle plot marks
+% \pgfplotstreampoint{\pgfplotsqpointxy{<x>}{<y}}
+% }
+% \pgfplotstreamend
+%
+% See below for details about the survey phase and the visualization
+% phase and the API of an axis.
+%
+% Thus, the PGF basic level streams can (but don't need to) make use
+% of the macros assigned by the
+% \pgfplotsplothandlerdeserializepointfrom and
+% \pgfplotsplothandlerdeserializestatefrom.
+%
+% Furthermore, a plot handler *can* redefine any of the survey and/or
+% serialization methods to add further functionality. But it doesn't
+% need to, it's ok if it only relies on x,y as standard pgf plot
+% handlers do.
+%
+% If it overwrites something, it should do so in its main method, the
+% one in which it also defines the \pgf@plotstreamstart etc. methods
+% (see pgfmoduleplot.code.tex for example). BUT: do NOT overwrite
+% these methods globally!
+%
+% 2. A Description of the two phases:
+%
+% THE SURVEY PHASE:
+% The survey phase works as follows.
+% PRECONDITION:
+% - we are `inside' of an axis.
+% - \addplot starts the survey phase.
+%
+% The following happens:
+% - the plot handler is determined and activated such that its
+% methods are usable ("class is instantiated")
+% - \pgfplots@PREPARE@COORD@STREAM is the internal, low level
+% entry point where pgfplots controls the survey phase.
+% - the coordinate input routine is initialised. It issues a
+% series of commands (all within the *same* TeX scope):
+% \pgfplots@coord@stream@start
+% \pgfplots@coord@stream@coord
+% \pgfplots@coord@stream@coord
+% \pgfplots@coord@stream@coord
+% \pgfplots@coord@stream@coord
+% \pgfplots@coord@stream@coord
+% \pgfplots@coord@stream@coord
+% ...
+% \pgfplots@coord@stream@end
+% - \pgfplotsplothandlersurveystart is called in
+% \pgfplots@coord@stream@start.
+% - \pgfplots@coord@stream@coord calls
+% \pgfplotsplothandlersurveypoint
+% - \pgfplots@coord@stream@end calls
+% \pgfplotsplothandlersurveyend
+% \pgfplotsplothandlerserializestateto<\macro>
+% Furthermore, it remembers the <\macro> such that it can be
+% deserialized later.
+% Then, the survey phase ends. The main point of interest is the
+% \pgfplotsplothandlersurveypoint routine, especially its
+% communication with the axis. It is described below.
+%
+% POSTCONDITION:
+% - the state of the axis is now aware of the new plot (limits,
+% stacking, ...).
+% - The plot's survey state is stored using its serialized
+% representation.
+%
+% THE VISUALIZATION PHASE:
+% FIXME
+%
+% 2.1 The API of an axis
+%
+% As described above, the coordinate input routine fires a lot of
+% \pgfplots@coord@stream@coord commands, which, in turn, invoke
+% \pgfplotsplothandlersurveypoint. Somehow this should update the
+% axis' state to reflect each point. But the 'data point' is a rather
+% abstract thing. Usually, it will contain at least (x,y) (or maybe z)
+% coordinates. But it may be more complex.
+%
+% So, the coordinate input routine provides whatever the user has
+% chosen. Let's assume, we are using \addplot table. Then, we can
+% access every cell in the current row (using \thisrow{<colname>} for
+% example). The plot handler knows how to extract its information from
+% this state. In general, the following steps are taken:
+% - the plot handler assembles coordinates.
+% - every assembled coordinate should be reported to the axis by
+% defining \pgfplots@current@point@[xyz] to its coordinates and
+% calling
+% \pgfplotsaxisparsecoordinate{}
+% This will apply coordinate filters, parse the single coordinates
+% and apply high level transformations and any logarithms.
+% It is some sort of advanced coordinate parser which works only for
+% (x,y) or for (x,y,z).
+% It yields (x,y,z). But the axis might need to change its
+% components! Thus, you also need to call
+% \pgfplotsaxispreparecoordinate{}.
+% This will, for example, apply the "stack plots" feature or the
+% 'data cs' feature.
+%
+% If necessary, the plot handler calls
+% \pgfplotsaxisparsecoordinate{} and
+% \pgfplotsaxispreparecoordinate{} multiple times, once for each
+% encountered coordinate.
+%
+% It might occasionally be too much to call
+% \pgfplotsaxispreparecoordinate.
+%
+% It might happen that a coordinate filter discards a coordinate.
+% This is returned in the \ifpgfplotsaxisparsecoordinateok boolean
+% and has to be checked by the plot handler.
+%
+% - the plot handler knows which of the coordinates contribute to the
+% final plot. It invokes
+% \ifpgfplotsaxisparsecoordinateok
+% \pgfplotsaxisupdatelimitsforcoordinate{<x>}{<y>}{<z>}
+% \fi
+% for each of these coordinates. This has to be done for final
+% coordinates only, i.e. after \pgfplotsaxispreparecoordinate.
+%
+% - eventually, the plot handler is satisfied and considers a data
+% point as "readily surveyed". It is allowed if this does *not*
+% happen inside of \pgfplotsplothandlersurveypoint, but it must
+% happen before \pgfplotsplothandlersurveyend is finished.
+%
+% The plot handler invokes \pgfplotsaxisdatapointsurveyed.
+% This tells the axis that it can perform its own surveying tasks
+% (see below) and furthermore, that it can serialize the data point.
+% Consequently, it will invoke
+% \pgfplotsplothandlerserializepointto{<\macro>}
+% and it will remember that \macro internally. This serialization is
+% employed to place plot marks and to apply z buffering techniques
+% (that's why it is done by the axis and not by the plot handler on
+% its own).
+%
+% The axis does its own surveying task, initiated by
+% \pgfplotsaxisdatapointsurveyed (which is, turn, invoked by the
+% plot handler). This command handles the |point meta| feature, that
+% is: it queries the |point meta| input source and updates the meta
+% limits. Furthermore, the error bar feature is processed at this
+% point (using the final data point's (x,y,z) coordinates as basis).
+% The |xtick=data| feature is also prepared at this stage.
+%
+% - Later, the coordinate input routine invokes
+% \pgfplots@coord@stream@end indicating the end-of-input. This will
+% finalize the survey phase.
+%
+% A simple example looks like this:
+% \pgfplotsplothandlersurveystart: does nothing in the simple example.
+% \pgfplotsplothandlersurveypoint:
+% parses the input format somehow to get (x,y,z) in raw, symbolic format
+% calls \pgfplotsaxisparsecoordinate
+% calls \pgfplotsaxispreparecoordinate
+% calls \ifpgfplotsaxisparsecoordinateok \pgfplotsaxisupdatelimitsforcoordinate{<x>}{<y>}{<z} \fi
+% calls \pgfplotsaxisdatapointsurveyed
+% \pgfplotsplothandlersurveyend: does nothing in the simple example.
+%
+% In fact, this is more or less the initial configuration used for
+% lineto or similar plot handlers.
+%
+% 2.2 Further Survey Phase API functions
+% \pgfplotssurveyphaseinputclass
+% expands to the actual name of the input method (like
+% 'coordinates', 'expression' or 'table')
+%
+% \pgfplotsplothandlernotifyscanlinecomplete
+% Called whenever an end-of-scanline marker has been processed, i.e.
+% whenever the 'empty line' key has been triggered. The default is to
+% do nothing.
+%
+% \pgfplotsaxissurveysetpointmeta
+% processes the 'point meta' key, i.e. it assigns
+% \pgfplots@current@point@meta. This macro can only be called once for
+% each coordinate (it will be deactivated afterwards). PGFPlots calls
+% it in \pgfplotsaxisdatapointsurveyed .
+%
+% \pgfplotsplothandlersurveyaddoptions{<options>}
+% which allows to change the current plot style from within API
+% functions. It sets <options> and remembers them for the
+% visualization phase.
+%
+% \pgfplotsaxisupdatelimitsforpointmeta{<meta>},
+% provided there is a point meta input handler (which is numeric).
+% Otherwise, the command is equal to \relax.
+%
+%
+% 3. Details about the VISUALIZATION phase
+%
+% The visualization phase consists of
+% <installation of the plot handler>
+% \pgfplotstreamstart
+% foreach serialized coordinate {
+% pgfplots calls \pgfplotsplothandlerdeserializestatefrom{<serialized repr>}
+% if coordinate is empty ("unbounded")
+% pgfplots call \pgfplotsplothandlervisualizejump
+% else
+% pgfplots calls \pgfplotsaxisvisphasetransformcoordinate
+% pgfplots calls \pgfplotsaxisvisphasepreparedatapoint
+% pgfplots calls either \pgfplotsqpointxyz or \pgfplotsqpointxy
+% fi
+% \pgfplotstreampoint
+% }
+% \pgfplotstreamend
+%
+% User defined plot handlers might need to invoke
+% \pgfplotsaxisvisphasetransformcoordinate on their own.
+%
+% During the visualization phase, the following macros can be used:
+%
+% - \pgfplotsaxisvisphasetransformpointmeta to set up point meta.
+% Use this only if there *is* point meta, see
+% \pgfplotsaxisifhaspointmeta{<true code>}{<false code>}.
+%
+% - \pgfplotsaxisvisphasegetpoint
+% does not take arguments. It takes the current point as input and
+% sets \pgf@x, \pgf@y to the final result.
+%
+% 4. API Functions of pgfplots to work with the visualization phases
+%
+% \pgfplotsifissurveyphase{<true code>}{<false code>}
+% \pgfplotsifisvisualizationphase{<true code>}{<false code>}
+%
+% \pgfplotsaxisfilteredcoordsaway
+% This macro expands to '1' if all points have been surveyed
+% successfully. It expands to '0' if at least one point has been
+% filtered away (for whatever reasons). This does not apply to
+% jumps.
+% \pgfplotsaxisplothasjumps
+% This macro expands to '1' if the current plot has jumps and '0'
+% if not.During the visualization phase, a jump is usually indicated
+% by an empty coordinate.
+% \pgfplotsaxisplothasunboundedpointmeta
+% This macro expands to '1' if the current plot has a point with
+% unbounded point meta and '0'
+% if not. Currently used by some plot handlers as synomym for
+% "visualize a jump"
+
+\def\pgfplotssurveyphaseinputclass{direct}
+
+\def\pgfplotsplothandlers@tikz@with@snap@to@nearest{%
+ \pgfplothandlerdiscard,%
+ \pgfplothandlermark,%
+ \pgfplothandlermarklisted,%
+ \pgfplothandlerxbar,%
+ \pgfplothandlerybar,%
+ \pgfplothandlerxbarinterval,%
+ \pgfplothandlerybarinterval%
+}%
+
+\def\pgfplotsplothandlers@tikz@std{%
+ \pgfplothandlerdiscard,%
+ \pgfplothandlermark,%
+ \pgfplothandlermarklisted,%
+ \pgfplothandlerxbar,%
+ \pgfplothandlerybar,%
+ \pgfplothandlerxbarinterval,%
+ \pgfplothandlerybarinterval,%
+ \pgfplothandlerlineto,%
+ \pgfplothandlercurveto,%
+ \pgfplothandlerconstantlineto,%
+ \pgfplothandlerconstantlinetomarkright,%
+ \pgfplothandlerconstantlinetomarkmid,%
+ \pgfplothandlerpolarcomb,%
+ \pgfplothandlerjumpmarkmid,%
+ \pgfplothandlerjumpmarkleft,%
+ \pgfplothandlerjumpmarkright%
+}%
+
+% Defines \pgfplotsretval to be the csname for the BACKUP of plot
+% handler #1.
+%
+% For example:
+% \pgfplotsplothandlers@get@tikz@backup@name{\pgfplothandlerlineto}
+% will return \pgfplotsretval={\\pgfplothandlerlineto@tikz}
+% (up to \escapechar)
+\def\pgfplotsplothandlers@get@tikz@backup@name#1{%
+ \begingroup
+ %\escapechar=-1 % drop the leading backslash
+ \expandafter\gdef\expandafter\pgfplotsretval\expandafter{\csname \string#1@tikz\endcsname}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Takes the CURRENT \tikz@plot@handler and checks if it is an UNPATCHED tikz plot
+% handler. If so, it replaced it with the correct patched version.
+%
+% The motivation is that uf \tikz@plot@handler has been set outside of
+% an axis, it will not reflect the most recent changes (which are only
+% applied within an axis).
+\def\pgfplotsplothandlers@init@map@to@patched@versions{%
+ % iterate through all tikz plot handlers...
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplotsplothandlers@tikz@std}%
+ \as\pgfplots@loc@TMPa{%
+ % ... get the name of the backup (see \pgfplotsplothandlers@init)
+ \expandafter\pgfplotsplothandlers@get@tikz@backup@name\pgfplots@loc@TMPa
+ \expandafter\ifx\pgfplotsretval\tikz@plot@handler
+ % AH! \tikz@plot@handler is the same as some backup name!
+ % Replace it:
+ \expandafter\let\expandafter\tikz@plot@handler\pgfplots@loc@TMPa
+ \fi
+ }%
+}%
+
+\def\pgfplotsplothandlers@init{%
+ \def\pgfplotsplothandlers@init@##1{%
+ \pgfplotsutil@add@to@macro##1{%
+ \let\pgfplotsplothandlersurveydifflen=\pgfplotsplothandlersurveydifflen@snaptonearest
+ \let\pgfplotsplothandlersurveypointattime=\pgfplotsplothandlersurveypointattime@snaptonearest
+ }%
+ }%
+ \def\pgfplotsplothandlers@init@@##1{%
+ % create backup:
+ %
+ % if ##1 = \pgfplothandlerlineto, this defines
+ % \pgfplothandlerlineto@tikz as backup.
+ \pgfplotsplothandlers@get@tikz@backup@name{##1}%
+ \expandafter\let\pgfplotsretval=##1%
+ %
+ %
+ % assign more suitable names:
+ \pgfplotsutil@add@to@macro##1{%
+ \begingroup
+ \escapechar=-1 % drop the leading backslash
+ \edef\pgfplotsplothandlername{\string##1}%
+ \pgfmath@smuggleone\pgfplotsplothandlername
+ \endgroup
+ %
+ \def\pgfplotsplothandlerLUAfactory{function(axis, pointmetainputhandler) return pgfplots.GenericPlothandler.new("\pgfplotsplothandlername", axis,pointmetainputhandler) end}%
+ \def\pgfplotsplothandlerLUAvisualizerfactory{pgfplots.defaultPlotVisualizerFactory}%
+ }%
+ }%
+ % Patch all TikZ plot handlers:
+ % this here also creates backups
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplotsplothandlers@tikz@std}%
+ \as\pgfplots@loc@TMPa{%
+ \expandafter\pgfplotsplothandlers@init@@\expandafter{\pgfplots@loc@TMPa}%
+ }%
+ %
+ % Patch only selected ones:
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplotsplothandlers@tikz@with@snap@to@nearest}%
+ \as\pgfplots@loc@TMPa{%
+ \expandafter\pgfplotsplothandlers@init@\expandafter{\pgfplots@loc@TMPa}%
+ }%
+ %
+ \if1\b@pgfplots@compat@bar@width@units
+ \else
+ \def\pgfplotbarwidth{\pgfplots@bar@width@not@in@context}%
+ \def\pgfplotbarshift{\pgfplots@bar@shift@not@in@context}%
+ \pgfplotsutil@add@to@macro\pgfplothandlerxbar{%
+ \def\pgfplotbarwidth{\pgfplots@xbar@width}%
+ \def\pgfplotbarshift{\pgfplots@xbar@shift}%
+ }%
+ \pgfplotsutil@add@to@macro\pgfplothandlerybar{%
+ \def\pgfplotbarwidth{\pgfplots@ybar@width}%
+ \def\pgfplotbarshift{\pgfplots@ybar@shift}%
+ }%
+ \fi
+ %
+ \pgfplotsplothandlers@init@map@to@patched@versions
+ %
+}%
+
+\def\pgfplots@xbar@width{pgfplotsxbarwidth}
+\def\pgfplots@ybar@width{pgfplotsybarwidth}
+\def\pgfplots@xbar@shift{pgfplotsxbarshift}
+\def\pgfplots@ybar@shift{pgfplotsybarshift}
+\def\pgfplots@bar@width@not@in@context{pgfplotsbarwidthgeneric}
+\def\pgfplots@bar@shift@not@in@context{pgfplotsbarshiftgeneric}
+
+\pgfplotsmathdeclarepseudoconstant{pgfplotsxbarwidth}{\pgfplots@bar@mathparse@{y}{bar width}}%
+\pgfplotsmathdeclarepseudoconstant{pgfplotsybarwidth}{\pgfplots@bar@mathparse@{x}{bar width}}%
+\pgfplotsmathdeclarepseudoconstant{pgfplotsxbarshift}{\pgfplots@bar@mathparse@{y}{bar shift}}%
+\pgfplotsmathdeclarepseudoconstant{pgfplotsybarshift}{\pgfplots@bar@mathparse@{x}{bar shift}}%
+\pgfplotsmathdeclarepseudoconstant{pgfplotsbarwidthgeneric}{\pgfplots@bar@mathparse@{N}{bar width}}%
+\pgfplotsmathdeclarepseudoconstant{pgfplotsbarshiftgeneric}{\pgfplots@bar@mathparse@{N}{bar shift}}%
+
+\def\pgfplots@bar@mathparse@#1#2{%
+ \pgfmathparse{\pgfkeysvalueof{/pgf/#2}}%
+ \ifpgfmathunitsdeclared
+ \else
+ \edef\pgfplots@bar@direction@choice@{#1}%
+ \if N\pgfplots@bar@direction@choice@%
+ \if a\pgfplots@bar@direction@choice
+ \else
+ \if x\pgfplots@bar@direction@choice
+ \def\pgfplots@bar@direction@choice@{y}%
+ \else
+ \if y\pgfplots@bar@direction@choice
+ \def\pgfplots@bar@direction@choice@{x}%
+ \else
+ \pgfplotsthrow{invalid argument}{\pgfplots@bar@direction@choice@}{Sorry, the value of 'bar direction' is invalid}\pgfeov%
+ \fi
+ \fi
+ \fi
+ \fi
+ \if N\pgfplots@bar@direction@choice@%
+ \pgfplots@bar@mathparse@error{#1}{#2}%
+ \else
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \csname pgfplotstransformdirection\pgfplots@bar@direction@choice@\endcsname{\pgfplots@loc@TMPa}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \if\pgfplots@bar@direction@choice@ x%
+ \pgfqpointxy@orig{\pgfplots@loc@TMPa}{0}%
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@x}%
+ \else
+ \pgfqpointxy@orig{0}{\pgfplots@loc@TMPa}%
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@y}%
+ \fi
+ %\edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
+ %\expandafter\pgfmathveclen@\pgfplots@loc@TMPa
+ \fi
+ \fi
+}%
+
+\def\pgfplots@bar@mathparse@error#1#2{%
+ \pgfplotsthrow{invalid argument}{\pgfplots@bar@direction@choice@}{Sorry, the value '#2=\pgfkeysvalueof{/pgf/#2}' is given in terms of a unit -- but I do not know which axis! Next steps: either (a) set one of 'xbar' or 'ybar' before evaluating the value of '#2' or (b) define 'bar direction=x or y'}\pgfeov%
+}%
+
+% Resets the plot handler routines.
+%
+% This is necessary before installing a new plot handler!
+\def\pgfplotsresetplothandler{%
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@default
+ \let\pgfplotsplothandlerLUAfactory=\pgfplotsplothandlerLUAfactory@default
+ \let\pgfplotsplothandlerLUAvisualizerfactory=\pgfplotsplothandlerLUAvisualizerfactory@default
+ \let\pgfplotsplothandlername=\pgfplotsplothandlername@default
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@default
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@default
+ \let\pgfplotsplothandlerpointtokeys=\pgfplotsplothandlerpointtokeys@default
+ \let\pgfplotsplothandlerserializepointto=\pgfplotsplothandlerserializepointto@default
+ \let\pgfplotsplothandlerdeserializepointfrom=\pgfplotsplothandlerdeserializepointfrom@default
+ \let\pgfplotsplothandlerserializestateto=\pgfplotsplothandlerserializestateto@default
+ \let\pgfplotsplothandlerdeserializestatefrom=\pgfplotsplothandlerdeserializestatefrom@default
+ \let\pgfplotsplothandlervisualizejump=\pgfplotsplothandlervisualizejump@default
+ \let\pgfplotsplothandlernotifyscanlinecomplete=\relax
+ \let\pgfplotsplothandlersurveydifflen=\pgfplotsplothandlersurveydifflen@default
+ \let\pgfplotsplothandlersurveypointattime=\pgfplotsplothandlersurveypointattime@default
+ \let\pgfplotsplothandlertransformslopedattime=\pgfplotsplothandlertransformslopedattime@default
+ \let\pgfplotsplothandlerifcurrentpointcanbefirstlast=\pgfplotsplothandlerifcurrentpointcanbefirstlast@default
+ %
+ \let\pgfplotsplothandlersurveybeforesetpointmeta=\pgfplotsplothandlersurveybeforesetpointmeta@default
+ \let\pgfplotsplothandlersurveyaftersetpointmeta=\pgfplotsplothandlersurveyaftersetpointmeta@default
+}%
+
+\def\pgfplotsplothandlersurveybeforesetpointmeta@default{}
+\def\pgfplotsplothandlersurveyaftersetpointmeta@default{}
+
+% \pgfplotsplothandlersurveystart
+\def\pgfplotsplothandlersurveystart@default{}%
+
+% \pgfplotsplothandlername
+\def\pgfplotsplothandlername@default{%
+ [tikz@plot@handler: \meaning\pgf@plotstreamstart]%
+}%
+
+% This should expand to a LUA function which takes the axis and the point
+% meta handler.
+% Use empty if there is none.
+\def\pgfplotsplothandlerLUAfactory@default{}%
+
+% This should expand to a LUA function which takes an instance of
+% Plothandler and which should return a PlotVisualizer.
+% Use empty if there is none.
+%
+% @see LUA: pgfplots.PlotVisualizer
+\def\pgfplotsplothandlerLUAvisualizerfactory@default{}%
+
+% \pgfplotsplothandlerifcurrentpointcanbefirstlast : can be used to
+% check if the current point of a plot handler can be the global first
+% or last segment.
+% It will execute #1 if that is the case and #2 if not.
+\def\pgfplotsplothandlerifcurrentpointcanbefirstlast@default#1#2{#1}%
+
+
+% \pgfplotsplothandlersurveyend
+% Called at the end of each survey phase.
+\def\pgfplotsplothandlersurveyend@default{}
+
+% A callback which will be called as soon as a scanline is complete.
+%
+% The callback can differ from plot handler to plot handler; its
+% purpose is to update data structures.
+%
+% Implementational note for those who _call_ the callback: the
+% The callback will be triggered by the 'empty line' handling, see
+% \pgfplotsscanlinelengthinitzero. However, a coordinate generator can
+% safely invoke it directly. It must not be invoked twice for the same
+% scanline.
+%
+% FIXME: only 'empty line=scanline' currently calls this callback!
+\let\pgfplotsplothandlernotifyscanlinecomplete=\relax%
+
+% \pgfplotsplothandlersurveypoint is called for each encountered data
+% point.
+%
+% The data point as such is available using the current state of any
+% macros which are assigned during the survey phase (during \addplot).
+% This includes any table macros etc.
+% PGFPlots stores the x,y and z coordinates into \pgfplots@current@point@[xyz].
+% The point meta coordinate is in \pgfplots@current@point@meta.
+%
+% Note that since any currently assigned macro can be used here, the
+% new DV engine of PGF is also valid (and will be supported
+% eventually). This DV engine stores data point entries in keys,
+% namely those in the key path /data point. See the pgf manual.
+\def\pgfplotsplothandlersurveypoint@default{%
+ \ifpgfplots@LUA@backend@supported
+ \pgfplots@LUA@survey@point
+ \else
+ \pgfplotsplothandlersurveypoint@default@
+ \fi
+}%
+\def\pgfplotsplothandlersurveypoint@default@{%
+ % reset it. NOTE: this migh be done multiple times. But better one
+ % too much than one too few...
+ \def\pgfplots@set@perpointmeta@done{0}%
+ %
+ \pgfplotsplothandlersurveypoint@default@noreset@of@pointmeta
+}%
+\def\pgfplotsplothandlersurveypoint@default@noreset@of@pointmeta{%
+ \pgfplotsaxisparsecoordinate
+ \pgfplotsaxispreparecoordinate
+ \ifpgfplotsaxisparsecoordinateok
+ \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z
+ \fi
+ \pgfplotsaxisdatapointsurveyed
+}%
+
+% \pgfplotsplothandlerserializepointto{<\macro>}
+% should save a complete data point to <\macro> such that it can be
+% de-serialized later.
+%
+% #1: a macro name. Will be filled with (expandable) data.
+% The format can be arbitrary, but you should be able to extra it.
+%
+% @PRECONDITION
+% this macro will be invoked in a context where the current data
+% point has been processed completely, including any preparations.
+% The required data which should be saved depends on the plot
+% handler. Usually, all plot handlers require
+% \pgfplots@current@point@[xyz] and \pgfplots@current@point@meta.
+% This macro should only assign keys which have been defined or
+% validated by any of the plot handler relevant methods (including
+% the de-serialization or survey methods).
+\def\pgfplotsplothandlerserializepointto@default#1{%
+ % Store normalized point for list:
+ % We need
+ % xi,yi,zi;
+ % where zi may be empty.
+ %
+ % Note that per-point meta information is stored in
+ % \pgfplotsaxisserializedatapoint .
+ \edef#1{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z}%
+}%
+
+% \pgfplotsplothandlerdeserializepointfrom{<\macro>}
+% the counterpart for \pgfplotsplothandlerserializepointto.
+% It restores the state as it was before the serialization.
+%
+% #1: the serialized information.
+\def\pgfplotsplothandlerdeserializepointfrom@default#1{%
+ \expandafter\pgfplotsplothandlerdeserializepointfrom@default@#1\relax
+}%
+
+% \pgfplotsplothandlerpointtokeys{<key prefix>}
+%
+% Takes the current point and copies its values to a set of keys.
+%
+% For example, if the current point has the three coordinates x=1,
+% y=2, z=3,
+% \pgfplotsplothandlerpointtokeys{/data point/first/}
+% will define the keys
+% /data point/first/x/.initial=1
+% /data point/first/y/.initial=2
+% /data point/first/z/.initial=3
+%
+\def\pgfplotsplothandlerpointtokeys@default#1{%
+ \pgfkeyslet{#1/x}\pgfplots@current@point@x
+ \pgfkeyslet{#1/y}\pgfplots@current@point@y
+ \pgfkeyslet{#1/z}\pgfplots@current@point@z
+}%
+
+\def\pgfplotsplothandlerdeserializepointfrom@default@#1,#2,#3\relax{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+}%
+% \pgfplotsplothandlerserializestateto{<\macro>}
+% should save the state of the current plot handler such that it can
+% be de-serialized later.
+%
+% The state does usually NOT contain a coordinate stream, this is
+% accomplished by \pgfplotsplothandlerserializepointto.
+%
+% #1: a macro name. Can be filled with anything, including
+% non-expandable macro invocations.
+\def\pgfplotsplothandlerserializestateto@default#1{%
+ \def#1{}%
+}%
+
+%
+\def\pgfplotsplothandlerdeserializestatefrom@default#1{%
+ #1%
+}%
+
+\def\pgfplotsplothandlervisualizejump@default{%
+ \pgfplotstreamend
+ \pgfplotstreamstart
+}%
+
+% \pgfplotsplothandlersurveypointattime#1#2#3
+%
+% sets the current environment to a point which is between points #2
+% and #3, using the fraction #1.
+%
+% #1 a fraction (a number between 0 and 1) in the format of
+% \pgfplotscoordmath{default}
+% #2 a serialized point denoting the start
+% #3 a serialized point denoting the end
+%
+% In other words: #1 = 0.0 should result in #2 and #1 = 1.0 should
+% result in #3.
+%
+% POSTCONDITION: the current point will be set to the point
+% in-between. The current point is set in terms of logical coordinates
+% (i.e. \pgfplots@current@point@x and its variants)
+\def\pgfplotsplothandlersurveypointattime@default#1#2#3{%
+ \begingroup
+ \pgfplotsplothandlerdeserializepointfrom{#2}%
+ \let\pgfplots@last@x=\pgfplots@current@point@x
+ \let\pgfplots@last@y=\pgfplots@current@point@y
+ \let\pgfplots@last@z=\pgfplots@current@point@z
+ \pgfplotsplothandlerdeserializepointfrom{#3}%
+ %
+ \def\pgfplots@loc@TMPa##1{%
+ \pgfplotscoordmath{##1}{op}{subtract}{{\csname pgfplots@current@point@##1\endcsname}{\csname pgfplots@last@##1\endcsname}}%
+ \let\pgfplots@diff=\pgfmathresult
+ \pgfplotscoordmath{##1}{parsenumber}{#1}%
+ \pgfplotscoordmath{##1}{op}{multiply}{{\pgfmathresult}{\pgfplots@diff}}%
+ \pgfplotscoordmath{##1}{op}{add}{{\csname pgfplots@last@##1\endcsname}{\pgfmathresult}}%
+ \expandafter\let\csname pgfplots@current@point@##1\endcsname=\pgfmathresult
+ }%
+ \pgfplots@loc@TMPa x%
+ \pgfplots@loc@TMPa y%
+ \ifpgfplots@curplot@threedim
+ \pgfplots@loc@TMPa z%
+ \fi
+ \xdef\pgfplots@glob@TMPb{%
+ \noexpand\def\noexpand\pgfplots@current@point@x{\pgfplots@current@point@x}%
+ \noexpand\def\noexpand\pgfplots@current@point@y{\pgfplots@current@point@y}%
+ \noexpand\def\noexpand\pgfplots@current@point@z{\pgfplots@current@point@z}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPb
+}%
+
+% \pgfplotsplothandlersurveydifflen#1#2
+%
+% computes the length between two points which are given in logical
+% coordinates.
+% #1 a serialized point
+% #2 a serialized point
+%
+% The return value is assigned to \pgfmathresult in
+% \pgfplotscoordmath{default} format.
+\def\pgfplotsplothandlersurveydifflen@default#1#2{%
+ \begingroup
+ \pgfplotsplothandlerdeserializepointfrom{#1}%
+ \let\pgfplots@last@x=\pgfplots@current@point@x
+ \let\pgfplots@last@y=\pgfplots@current@point@y
+ \let\pgfplots@last@z=\pgfplots@current@point@z
+ \pgfplotsplothandlerdeserializepointfrom{#2}%
+ \pgfplotscoordmathparsemacro{default}\pgfplots@last@x
+ \pgfplotscoordmathparsemacro{default}\pgfplots@last@y
+ \pgfplotscoordmathparsemacro{default}\pgfplots@current@point@x
+ \pgfplotscoordmathparsemacro{default}\pgfplots@current@point@y
+ \ifpgfplots@curplot@threedim
+ \pgfplotscoordmathparsemacro{default}\pgfplots@last@z
+ \pgfplotscoordmathparsemacro{default}\pgfplots@current@point@z
+ \fi
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@current@point@x}{\pgfplots@last@x}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfmathresult}}%
+ \let\pgfplots@diff@x=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@current@point@y}{\pgfplots@last@y}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfmathresult}}%
+ \let\pgfplots@diff@y=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@diff@x}{\pgfplots@diff@y}}%
+ \let\pgfplots@len=\pgfmathresult
+ \ifpgfplots@curplot@threedim
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@current@point@z}{\pgfplots@last@z}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfmathresult}}%
+ \let\pgfplots@diff@z=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@len}{\pgfplots@diff@z}}%
+ \let\pgfplots@len=\pgfmathresult
+ \fi
+ \pgfplotscoordmath{default}{op}{sqrt}{{\pgfplots@len}}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% \pgfplotsplothandlertransformslopedattime{<time fraction>}{<start>}{<end>}
+%
+% Installs a PGF rotation matrix such that it fits the gradient of the
+% current plot segment between <start> and <end>.
+%
+% #1: a fraction such that 0.0 is <start> and 1.0 is <end>
+% #2: the <start> point (a macro containing the result of \pgfplotsplothandlerserializepointto)
+% #3: the <end> point (a macro containing the result of \pgfplotsplothandlerserializepointto)
+%
+\def\pgfplotsplothandlertransformslopedattime@default#1#2#3{%
+ \pgf@process{%
+ \pgfplotsplothandlerdeserializepointfrom{#2}%
+ \pgfplotsaxisvisphasegetpoint
+ }%
+ \pgf@xa=\pgf@x% xb/yb = start point
+ \pgf@ya=\pgf@y%
+ \pgf@process{%
+ \pgfplotsplothandlerdeserializepointfrom{#3}%
+ \pgfplotsaxisvisphasegetpoint
+ }%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \ifpgfallowupsidedownattime%
+ \else%
+ \ifdim\pgf@x<0pt%
+ \pgf@x=-\pgf@x%
+ \pgf@y=-\pgf@y%
+ \fi%
+ \fi%
+ \pgfpointnormalised{}% x/y = normalised vector
+ \pgf@ya=-\pgf@y%
+ \pgftransformcm%
+ {\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}%
+ {\pgf@sys@tonumber{\pgf@ya}}{\pgf@sys@tonumber{\pgf@x}}{\pgfpointorigin}%
+}%
+
+
+
+\pgfplotsresetplothandler
+
+% The following two methods constitutes implementations for
+% 'node[pos=<faction>]' which do not interpolate. They only snap to
+% the nearest coordinate.
+%
+% For example, \addplot[scatter] ... node[pos=0.5] {} should use a
+% unit distance and should not interpolate between scatter points.
+\def\pgfplotsplothandlersurveydifflen@snaptonearest#1#2{%
+ % FIXME : this implies that #1 and #2 are "adjacent" in the
+ % coordinate stream!
+ \pgfplotscoordmath{default}{one}%
+}%
+\def\pgfplotsplothandlersurveypointattime@snaptonearest#1#2#3{%
+ \pgfplotscoordmath{default}{parsenumber}{0.5}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{#1}%
+ \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplots@loc@TMPa}{%
+ \pgfplotsplothandlerdeserializepointfrom{#2}%
+ }{%
+ \pgfplotsplothandlerdeserializepointfrom{#3}%
+ }%
+}%
+% ==================================
+
+% Defines
+% - a generic update limits routine,
+% \pgfplotsaxisupdatelimitsforcoordinate#1#2#3
+% if #3 is empty, it will assume a 2d point, otherwise a 3d point
+% and the axis will be three dimensional as well.
+% During \addplot, this auto-detection will be disabled in favor of
+% the '\addplot3' versus' \addplot' syntax.
+%
+\def\pgfplots@prepare@axis@API{%
+ \pgfplots@curplot@threedimtrue
+ \pgfplots@prepare@axis@API@
+ \let\pgfplotsaxisupdatelimitsforcoordinatethreedim=\pgfplotsaxisupdatelimitsforcoordinate@
+ \let\pgfplotsaxisparsecoordinatethreedim=\pgfplotsaxisparsecoordinate@
+ %
+ \pgfplots@curplot@threedimfalse
+ \pgfplots@prepare@axis@API@
+ \let\pgfplotsaxisupdatelimitsforcoordinatetwodim=\pgfplotsaxisupdatelimitsforcoordinate@
+ \let\pgfplotsaxisparsecoordinatetwodim=\pgfplotsaxisparsecoordinate@
+ %
+ \def\pgfplotsaxisupdatelimitsforcoordinate##1##2##3{%
+ \pgfplots@ifempty{##3}{%
+ \pgfplotsaxisupdatelimitsforcoordinatetwodim{##1}{##2}{}%
+ }{%
+ \global\pgfplots@threedimtrue
+ \pgfplotsaxisupdatelimitsforcoordinatethreedim{##1}{##2}{##3}%
+ }%
+ }%
+ \def\pgfplotsaxisparsecoordinate{%
+ \ifx\pgfplots@current@point@z\pgfutil@empty
+ \pgfplotsaxisparsecoordinatetwodim
+ \else
+ \global\pgfplots@threedimtrue
+ \pgfplotsaxisparsecoordinatethreedim%
+ \fi
+ }%
+}%
+\def\pgfplots@prepare@axis@API@{%
+ \begingroup
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \let\E=\noexpand
+ % Setup Just-In-Time-Macro Compilation:
+ % I compile a set of macros which is highly optimized for this
+ % particular axis configuration.
+ %
+ % \pgfplotsaxisupdatelimitsforcoordinate
+ % Updates the current x and y limits for point (#1,#2).
+ %
+ % To eliminate all those case distinctions, it is created with
+ % 'edef' and a lot of '\noexpand' calls here:
+ %
+ %
+ % The point coordinates are given in floating point format (FIXME)
+ %
+ % Please note that if user specified limits are given, automatic
+ % limits are only applied to points which fall into the user specified
+ % clipping region.
+ %
+ % PRECONDITIONS:
+ % - the input coordinates have been parsed correctly (floating point
+ % format for linear axis, log applied for logarithmic ones)
+ %
+ % Arguments:
+ % #1,#2,#3 the x,y and z coordinate. z is ignored for 2d plots.
+ \xdef\pgfplotsaxisupdatelimitsforcoordinate@##1##2##3{%
+%\E\tracingmacros=2\E\tracingcommands=2
+%\E\pgfplots@message{Updating limits for (##1,##2) ...}%
+ %
+ % VIM SEARCH PATTERN:
+ % [^E]\zs\\\ze[^E]
+ % -> this finds '\' which is neither '\E' nor is it prefixed
+ % by 'E'.
+ %
+ %
+ %
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDfalse
+ % check whether we need to clip limits:
+ \ifpgfplots@clip@limits@x
+ \ifpgfplots@autocompute@xmin
+ \else
+ \ifpgfplots@xislinear
+ \E\pgfmathfloatlessthan@{##1}{\E\pgfplots@xmin}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \else
+ \E\pgfplotsmathlessthan{##1}{\E\pgfplots@xmin}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \fi
+ \fi
+ \ifpgfplots@autocompute@xmax
+ \else
+ \ifpgfplots@xislinear
+ \E\pgfmathfloatlessthan@{\E\pgfplots@xmax}{##1}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \else
+ \E\pgfplotsmathlessthan{\E\pgfplots@xmax}{##1}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \fi
+ \fi
+ \fi
+ \ifpgfplots@clip@limits@y
+ \ifpgfplots@autocompute@ymin
+ \else
+ \ifpgfplots@yislinear
+ \E\pgfmathfloatlessthan@{##2}{\E\pgfplots@ymin}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \else
+ \E\pgfplotsmathlessthan{##2}{\E\pgfplots@ymin}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \fi
+ \fi
+ \ifpgfplots@autocompute@ymax
+ \else
+ \ifpgfplots@yislinear
+ \E\pgfmathfloatlessthan@{\E\pgfplots@ymax}{##2}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \else
+ \E\pgfplotsmathlessthan{\E\pgfplots@ymax}{##2}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \fi
+ \fi
+ \fi
+ \ifpgfplots@clip@limits@z
+ \ifpgfplots@curplot@threedim
+ \ifpgfplots@autocompute@zmin
+ \else
+ \ifpgfplots@zislinear
+ \E\pgfmathfloatlessthan@{##3}{\E\pgfplots@zmin}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \else
+ \E\pgfplotsmathlessthan{##3}{\E\pgfplots@zmin}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \fi
+ \fi
+ \ifpgfplots@autocompute@zmax
+ \else
+ \ifpgfplots@zislinear
+ \E\pgfmathfloatlessthan@{\E\pgfplots@zmax}{##3}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \else
+ \E\pgfplotsmathlessthan{\E\pgfplots@zmax}{##3}%
+ \E\ifpgfmathfloatcomparison
+ \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue
+ \E\fi
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+ %
+ %
+ % Update limits:
+ \E\ifpgfplots@update@limits@for@one@point@ISCLIPPED
+ \E\else
+ \ifpgfplots@autocompute@xmin
+ \ifpgfplots@xislinear
+ \E\pgfplotsmathfloatmin{\E\pgfplots@xmin}{##1}%
+ \E\global\E\let\E\pgfplots@xmin=\E\pgfmathresult
+ \else
+ \E\pgfplotsmathmin{\E\pgfplots@xmin}{##1}%
+ \E\global\E\let\E\pgfplots@xmin=\E\pgfmathresult
+ \fi
+ \fi
+ \ifpgfplots@autocompute@xmax
+ \ifpgfplots@xislinear
+ \E\pgfplotsmathfloatmax{\E\pgfplots@xmax}{##1}%
+ \E\global\E\let\E\pgfplots@xmax=\E\pgfmathresult
+ \else
+ \E\pgfplotsmathmax{\E\pgfplots@xmax}{##1}%
+ \E\global\E\let\E\pgfplots@xmax=\E\pgfmathresult
+ \fi
+ \fi
+ \ifpgfplots@autocompute@ymin
+ \ifpgfplots@yislinear
+ \E\pgfplotsmathfloatmin{\E\pgfplots@ymin}{##2}%
+ \E\global\E\let\E\pgfplots@ymin=\E\pgfmathresult
+ \else
+ \E\pgfplotsmathmin{\E\pgfplots@ymin}{##2}%
+ \E\global\E\let\E\pgfplots@ymin=\E\pgfmathresult
+ \fi
+ \fi
+ \ifpgfplots@autocompute@ymax
+ \ifpgfplots@yislinear
+ \E\pgfplotsmathfloatmax{\E\pgfplots@ymax}{##2}%
+ \E\global\E\let\E\pgfplots@ymax=\E\pgfmathresult
+ \else
+ \E\pgfplotsmathmax{\E\pgfplots@ymax}{##2}%
+ \E\global\E\let\E\pgfplots@ymax=\E\pgfmathresult
+ \fi
+ \fi
+ \ifpgfplots@curplot@threedim
+ \ifpgfplots@autocompute@zmin
+ \ifpgfplots@zislinear
+ \E\pgfplotsmathfloatmin{\E\pgfplots@zmin}{##3}%
+ \E\global\E\let\E\pgfplots@zmin=\E\pgfmathresult
+ \else
+ \E\pgfplotsmathmin{\E\pgfplots@zmin}{##3}%
+ \E\global\E\let\E\pgfplots@zmin=\E\pgfmathresult
+ \fi
+ \fi
+ \ifpgfplots@autocompute@zmax
+ \ifpgfplots@zislinear
+ \E\pgfplotsmathfloatmax{\E\pgfplots@zmax}{##3}%
+ \E\global\E\let\E\pgfplots@zmax=\E\pgfmathresult
+ \else
+ \E\pgfplotsmathmax{\E\pgfplots@zmax}{##3}%
+ \E\global\E\let\E\pgfplots@zmax=\E\pgfmathresult
+ \fi
+ \fi
+ \fi
+ \E\fi
+ %
+ % Compute data range:
+ \ifpgfplots@autocompute@all@limits
+ % the data range will be acquired simply from the axis
+ % range, see below!
+ \else
+ % Attention: it is only done for linear axis!
+ \ifpgfplots@xislinear
+ \E\pgfplotsmathfloatmin{\E\pgfplots@data@xmin}{##1}%
+ \E\global\E\let\E\pgfplots@data@xmin=\E\pgfmathresult
+ \E\pgfplotsmathfloatmax{\E\pgfplots@data@xmax}{##1}%
+ \E\global\E\let\E\pgfplots@data@xmax=\E\pgfmathresult
+ \fi
+ \ifpgfplots@yislinear
+ \E\pgfplotsmathfloatmin{\E\pgfplots@data@ymin}{##2}%
+ \E\global\E\let\E\pgfplots@data@ymin=\E\pgfmathresult
+ \E\pgfplotsmathfloatmax{\E\pgfplots@data@ymax}{##2}%
+ \E\global\E\let\E\pgfplots@data@ymax=\E\pgfmathresult
+ \fi
+ \ifpgfplots@curplot@threedim
+ \ifpgfplots@zislinear
+ \E\pgfplotsmathfloatmin{\E\pgfplots@data@zmin}{##3}%
+ \E\global\E\let\E\pgfplots@data@zmin=\E\pgfmathresult
+ \E\pgfplotsmathfloatmax{\E\pgfplots@data@zmax}{##3}%
+ \E\global\E\let\E\pgfplots@data@zmax=\E\pgfmathresult
+ \fi
+ \fi
+ \fi
+%\E\pgfplots@message{Updated limits: (\E\pgfplots@xmin,\E\pgfplots@ymin) rectangle (\E\pgfplots@xmax,\E\pgfplots@ymax).}%
+%
+%\E\tracingmacros=0\E\tracingcommands=0
+ }%
+ %
+ % A routine which parses a coordinate.
+ % Here, 'coordinate' means (x,y) for a two dimensional plot and
+ % '(x,y,z)' for a three dimensional one.
+ %
+ % The preparation consists of
+ % - filtering.
+ % - coordinate parsing and high level transformations.
+ % - logs.
+ %
+ % It might happen that \pgfplotsaxisparsecoordinate is called
+ % multiple times for a single data "point" (for example, a quiver
+ % point might call it for the point where the vector starts and
+ % where the vector ends).
+ %
+ % @PRECONDITION
+ % - the plot's survey phase is running (has already been started)
+ % - \pgfplots@current@point@[xyz] contains the coordinates of the
+ % point. I assume they are unparsed.
+ %
+ %
+ % @POSTCONDITION
+ % - the axis' state will be updated.
+ % - the \pgfplots@current@point@[xyz] macros will contain parsed data.
+ % - \ifpgfplotsaxisparsecoordinateok will be true if and only
+ % if the data point has not been filtered away. If it has been
+ % filtered away, \pgfplots@current@point@[xyz] will be empty.
+ % - \pgfplots@current@point@[xyz]@unfiltered contain unparsed
+ % data.
+ %
+ % @see \pgfplotsaxispreparecoordinate
+ % @see \pgfplotsaxisdatapointsurveyed
+ \xdef\pgfplotsaxisparsecoordinate@{%
+ % These things are necessary for error bars and are available
+ % as public results in math parser invocations (for meta and
+ % filters)
+ \E\let\E\pgfplots@current@point@x@unfiltered=\E\pgfplots@current@point@x
+ \E\let\E\pgfplots@current@point@y@unfiltered=\E\pgfplots@current@point@y
+ \E\let\E\pgfplots@current@point@z@unfiltered=\E\pgfplots@current@point@z
+ \E\def\E\pgfplots@unbounded@dir{}%
+ %
+ \E\pgfplots@invoke@prefilter
+ %
+ \E\expandafter\E\pgfplots@prepare@xcoord\E\expandafter{\E\pgfplots@current@point@x}%
+ \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfmathresult}{x}%
+ \E\let\E\pgfplots@current@point@x=\E\pgfmathresult
+ %
+ \E\expandafter\E\pgfplots@prepare@ycoord\E\expandafter{\E\pgfplots@current@point@y}%
+ \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfplots@current@point@y}{y}%
+ \E\let\E\pgfplots@current@point@y=\E\pgfmathresult
+ %
+ \ifpgfplots@curplot@threedim
+ \E\expandafter\E\pgfplots@prepare@zcoord\E\expandafter{\E\pgfplots@current@point@z}%
+ \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfplots@current@point@z}{z}%
+ \E\let\E\pgfplots@current@point@z=\E\pgfmathresult
+ \fi
+ %
+ \E\pgfplots@invoke@filter@xyz
+ %
+ \E\ifx\E\pgfplots@current@point@x\E\pgfutil@empty
+ \E\else
+ % parse for numbers. Note that this might cause
+ % unnecessary overhead of logs (which are already
+ % normalized unless someone provided filters). But do it
+ % anyway to ensure that filters produce valid output.
+ \E\pgfplotscoordmath{x}{parsenumber}{\E\pgfplots@current@point@x}%
+ \E\let\E\pgfplots@current@point@x=\E\pgfmathresult
+ \E\pgfplotscoordmath{x}{if is bounded}{\E\pgfplots@current@point@x}%
+ {}%
+ {% this clears nan, inf and -inf points.
+ \E\let\E\pgfplots@current@point@x=\E\pgfutil@empty
+ \E\def\E\pgfplots@unbounded@dir{x}%
+ }%
+ \E\fi
+ %
+ \E\ifx\E\pgfplots@current@point@y\E\pgfutil@empty
+ \E\else
+ \E\pgfplotscoordmath{y}{parsenumber}{\E\pgfplots@current@point@y}%
+ \E\let\E\pgfplots@current@point@y=\E\pgfmathresult
+ \E\pgfplotscoordmath{y}{if is bounded}{\E\pgfplots@current@point@y}%
+ {}%
+ {% this clears nan, inf and -inf points.
+ \E\let\E\pgfplots@current@point@y=\E\pgfutil@empty
+ \E\def\E\pgfplots@unbounded@dir{y}%
+ }%
+ \E\fi
+ %
+ \ifpgfplots@curplot@threedim
+ %
+ \E\ifx\E\pgfplots@current@point@z\E\pgfutil@empty
+ \E\else
+ \E\pgfplotscoordmath{z}{parsenumber}{\E\pgfplots@current@point@z}%
+ \E\let\E\pgfplots@current@point@z=\E\pgfmathresult
+ \E\pgfplotscoordmath{z}{if is bounded}{\E\pgfplots@current@point@z}%
+ {}%
+ {% this clears nan, inf and -inf points.
+ \E\let\E\pgfplots@current@point@z=\E\pgfutil@empty
+ \E\def\E\pgfplots@unbounded@dir{z}%
+ }%
+ \E\fi
+ \fi
+ %
+ % check if coordinates are bounded:
+ \E\pgfplotsaxisparsecoordinateoktrue
+ \E\ifx\E\pgfplots@current@point@x\E\pgfutil@empty
+ \E\pgfplotsaxisparsecoordinateokfalse
+ \E\else
+ \E\ifx\E\pgfplots@current@point@y\E\pgfutil@empty
+ \E\pgfplotsaxisparsecoordinateokfalse
+ \E\else
+ \ifpgfplots@curplot@threedim
+ \E\ifx\E\pgfplots@current@point@z\E\pgfutil@empty
+ \E\pgfplotsaxisparsecoordinateokfalse
+ \E\fi
+ \fi
+ \E\fi
+ \E\fi
+ %
+ }%
+ %
+ \endgroup
+}%
+
+% ==================================
+% The quiver plot handler.
+% It draws a lot of arrows.
+% Its input is (x_i,y_i); (u_i,v_i) for data point i and it draws a
+% vector in direction (u_i,v_i) starting from (x_i,y_i) .
+% It also supports 3D arrows (involving z_i and w_i).
+
+\newif\ifpgfplots@quiver@usetikz
+\newif\ifpgfplots@quiver@updatelimits
+
+\pgfplotsset{
+ % The 'quiver' plot handler for two- and three dimensional plots.
+ %
+ % User Interface:
+ % use /pgfplots/quiver to enable the plot handler.
+ % Then, provide `quiver/u value' or `quiver/u' to
+ % tell where to find the 'x' coordinates of the vectors, and similarly
+ % for 'v' and 'w' instead of 'u'.
+ quiver/.code={%
+ \let\tikz@plot@handler=\pgfplotsplothandlerquiver
+ \pgfqkeys{/pgfplots/quiver}{quiver legend,#1}%
+ },%
+ quiver/u value*/.initial=0,
+ quiver/v value*/.initial=0,
+ quiver/w value*/.initial=0,
+ quiver/u value is expr/.initial=0,
+ quiver/v value is expr/.initial=0,
+ quiver/w value is expr/.initial=0,
+ quiver/quiver legend/.style={
+ /pgfplots/legend image code/.code={%
+ \draw[x=0.6cm,y=0cm,z=0pt,##1,
+ /pgfplots/quiver/before arrow/.add code={}{
+ % quiver is a pgfplots-specific plot-handler. We need to
+ % fix the additional input data somehow.
+ %
+ % this is an *absolute* coordinate, interpreted
+ % relative to 'x', 'y', 'z'
+ \def\pgfplots@quiver@u{1}%
+ \def\pgfplots@quiver@v{1}%
+ \def\pgfplots@quiver@w{1}%
+ },%
+ ]
+ plot coordinates {
+ (0cm,0cm)
+ };%
+ }%
+ },
+ quiver/u filter/.code=,
+ quiver/v filter/.code=,
+ quiver/w filter/.code=,
+ quiver/u filter/.expression/.code=\pgfplots@install@filter@expression{quiver/u filter}{#1},
+ quiver/v filter/.expression/.code=\pgfplots@install@filter@expression{quiver/v filter}{#1},
+ quiver/w filter/.expression/.code=\pgfplots@install@filter@expression{quiver/w filter}{#1},
+ quiver/u value/.code =\pgfplots@set@source@for{quiver/u}{#1}{0},%
+ quiver/u/.code =\pgfplots@set@source@for{quiver/u}{#1}{1},%
+ quiver/v value/.code =\pgfplots@set@source@for{quiver/v}{#1}{0},%
+ quiver/v/.code =\pgfplots@set@source@for{quiver/v}{#1}{1},%
+ quiver/w value/.code =\pgfplots@set@source@for{quiver/w}{#1}{0},%
+ quiver/w/.code =\pgfplots@set@source@for{quiver/w}{#1}{1},%
+ quiver/before arrow/.code=,
+ quiver/after arrow/.code=,
+ quiver/every arrow/.style={},
+ quiver/arrow color/.initial=,
+ quiver/scale arrows/.initial=1,
+ quiver/update limits/.is if=pgfplots@quiver@updatelimits,
+ quiver/update limits=true,
+ quiver/colored/.code={%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfkeyslet{/pgfplots/quiver/arrow color}\pgfplots@loc@TMPa
+ \pgfkeysalso{/pgfplots/set point meta if empty=f(x)}%
+ \fi
+ },%
+ quiver/colored/.default=mapped color,
+}%
+
+\def\pgfplots@set@source@for#1#2#3{%
+ \pgfkeyssetvalue{/pgfplots/#1 value*}{#2}%
+ \pgfkeyssetvalue{/pgfplots/#1 is expr}{#3}%
+}%
+% To be used to create a simple parser for keys initialised by
+% \pgfplots@set@source@for:
+%
+% #1: the key path (relative to /pgfplots/) of the data.
+% Can be empty in which case /pgfplots/#2 is used to access data.
+% #2: the key name of the data
+% #3: a macro name which be will defined to be a parser for the data.
+%
+% The parser will check whether the '#2 is expr' key is set.
+% Furthermore, it defines /data point/#2 to be the result.
+%
+% Example:
+% \pgfplots@set@source@for{hist/data}{...}
+%
+% ->
+% \pgfplots@prepare@source@parser@for{hist/}{data}\parser
+%
+% then, invoking \parser
+% will define \pgfmathresult to be the argument provided to
+% \pgfplots@set@source@for.
+\def\pgfplots@prepare@source@parser@for#1#2#3{%
+ \pgfkeyslet{/data point/#1#2}\pgfutil@empty%
+ %
+ \pgfkeysgetvalue{/pgfplots/#1#2 value*}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % assume the '/data point/#1#2' is set by some input
+ % routine.
+ % Invoke math parser in this case.
+ \pgfkeyssetvalue{/pgfplots/#1#2 is expr}{1}%
+ \else
+ \pgfkeyslet{/data point/#1#2}\pgfplots@loc@TMPa
+ \fi
+ \def#3{%
+ \edef\pgfmathresult{\pgfkeysvalueof{/data point/#1#2}}%
+%\message{parse coordinate #1#2 (\pgfmathresult) ...^^J}%
+ }%
+ %
+ %
+ \pgfkeysifdefined{/pgfplots/#1#2 coord trafo/.@cmd}{%
+ \pgfkeysgetvalue{/pgfplots/#1#2 coord trafo/.@cmd}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key
+ \else
+ \t@pgfplots@toka=\expandafter{#3}%
+ \t@pgfplots@tokb={%
+ \def\pgfplots@loc@TMPa{\pgfkeysvalueof{/pgfplots/#1#2 coord trafo/.@cmd}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov%
+ }%
+ \t@pgfplots@tokc={%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \fi
+ }%
+ \edef#3{%
+ \the\t@pgfplots@toka
+ \the\t@pgfplots@tokb
+ \the\t@pgfplots@tokc
+ }%
+ \fi
+ }{}%
+ %
+ \t@pgfplots@toka=\expandafter{#3}%
+ \if1\pgfkeysvalueof{/pgfplots/#1#2 is expr}%
+ \t@pgfplots@tokc={%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathparse{\pgfmathresult}%
+ \fi
+ }%
+ \else
+ \t@pgfplots@tokc={%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \fi
+ }%
+ \fi
+ \edef#3{%
+ \the\t@pgfplots@toka
+ \the\t@pgfplots@tokc
+ }%
+ %
+ \pgfkeysgetvalue{/pgfplots/#1#2 filter/.@cmd}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key
+ \else
+ \t@pgfplots@toka=\expandafter{#3}%
+ \t@pgfplots@tokb={%
+ \def\pgfplots@loc@TMPa{\pgfkeysvalueof{/pgfplots/#1#2 filter/.@cmd}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov%
+ }%
+ \t@pgfplots@tokc={%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \fi
+ }%
+ \edef#3{%
+ \the\t@pgfplots@toka
+ \the\t@pgfplots@tokb
+ \the\t@pgfplots@tokc
+ }%
+ \fi
+ %
+ \iftrue
+ \t@pgfplots@toka=\expandafter{#3}%
+ \t@pgfplots@tokc={%
+%\message{parse coordinate (#1#2) = \pgfmathresult.^^J}%
+ }%
+ \edef#3{%
+ \the\t@pgfplots@toka
+ \the\t@pgfplots@tokc
+ }%
+ \fi
+}%
+
+% Invokes /pgfplots/#1 coord inv trafo on \pgfmathresult if that key
+% exists.
+% #1 the argument is in float (will become the 'default' coordmath
+% eventually).
+%
+% On output, it should either '#1' if there was no coord inv trafo or
+% the result of the trafo.
+\def\pgfplots@coord@trafo@inv@for#1{%
+ \def\pgfplots@loc@TMPb{/pgfplots/#1 coord inv trafo/.@cmd}%
+ \pgfkeysifdefined{\pgfplots@loc@TMPb}{%
+ \pgfkeysgetvalue{\pgfplots@loc@TMPb}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key
+ \else
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov
+ \fi
+ }{}%
+}
+% Like \pgfplots@coord@trafo@inv@for, but for the normal trafo
+% direction
+\def\pgfplots@coord@trafo@for#1{%
+ \def\pgfplots@loc@TMPb{/pgfplots/#1 coord trafo/.@cmd}%
+ \pgfkeysifdefined{\pgfplots@loc@TMPb}{%
+ \pgfkeysgetvalue{\pgfplots@loc@TMPb}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key
+ \else
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov
+ \fi
+ }{}%
+}
+\def\pgfplotsplothandlerquiver{%
+ \pgfplotsresetplothandler
+ \let\pgf@plotstreamstart=\pgfplotsplothandlervisbegin@quiver
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@quiver
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@quiver
+ \let\pgfplotsplothandlerserializepointto=\pgfplotsplothandlerserializepointto@quiver
+ \let\pgfplotsplothandlerdeserializepointfrom=\pgfplotsplothandlerdeserializepointfrom@quiver
+ \let\pgfplotsplothandlerpointtokeys=\pgfplotsplothandlerpointtokeys@quiver
+ \let\pgfplotsplothandlerquiver@vis@hook=\pgfutil@empty
+ \def\pgfplotsplothandlername{quiver}%
+ %
+ \ifpgfplots@xislinear \else \pgfplotsplothandlerquivererror \fi
+ \ifpgfplots@yislinear \else \pgfplotsplothandlerquivererror\fi
+ \pgfplotsifcurplotthreedim{%
+ \ifpgfplots@zislinear \else \pgfplotsplothandlerquivererror \fi
+ }{}%
+}%
+\def\pgfplotsplothandlerquivererror{\pgfplots@error{Sorry, quiver plots for logarithmic axes are not yet implemented. In fact, the implementation does something -- but it will probably change in future releases. Contact the mailing list if you have questions}}%
+
+\def\pgfplotsplothandlersurveystart@quiver{%
+ \pgfkeysgetvalue{/pgfplots/quiver/scale arrows}\pgfplots@quiver@scale
+ \ifx\pgfplots@quiver@scale\pgfutil@empty
+ \else
+ \def\pgfplots@loc@TMPa{1}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@quiver@scale
+ \let\pgfplots@quiver@scale=\pgfutil@empty
+ \else
+ \pgfmathparse{\pgfplots@quiver@scale}%
+ \pgfmathfloatparsenumber\pgfplots@quiver@scale
+ \let\pgfplots@quiver@scale=\pgfmathresult
+ \fi
+ \fi
+ %
+ \pgfplots@prepare@source@parser@for@quiver u\pgfplots@quiver@prepare@u%
+ \pgfplots@prepare@source@parser@for@quiver v\pgfplots@quiver@prepare@v%
+ \pgfplots@prepare@source@parser@for@quiver w\pgfplots@quiver@prepare@w%
+}%
+
+\def\pgfplots@prepare@source@parser@for@quiver#1#2{%
+ \pgfplots@prepare@source@parser@for{quiver/}{#1}{#2}%
+ \t@pgfplots@toka=\expandafter{#2}%
+ \t@pgfplots@tokb=\expandafter{\csname pgfplots@quiver@#1\endcsname}%
+ \edef#2{%
+ \the\t@pgfplots@toka
+ \noexpand\let\the\t@pgfplots@tokb=\noexpand\pgfmathresult
+ \ifx\pgfplots@quiver@scale\pgfutil@empty
+ \else
+ \noexpand\pgfmathfloatmultiply@{\pgfplots@quiver@scale}{\the\t@pgfplots@tokb}%
+ \noexpand\let\the\t@pgfplots@tokb=\noexpand\pgfmathresult
+ \fi
+ }%
+}%
+
+\def\pgfplotsplothandlersurveypoint@quiver{%
+ \pgfplots@quiver@prepare@u
+ \pgfplots@quiver@prepare@v
+ \pgfplotsifcurplotthreedim{%
+ \pgfplots@quiver@prepare@w
+ }{%
+ \let\pgfplots@quiver@w=\pgfutil@empty
+ }%
+ \pgfplotsaxisparsecoordinate
+ \pgfplotsaxispreparecoordinate
+ \ifpgfplotsaxisparsecoordinateok
+ \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z
+ %
+ \pgfmathadd@{\pgfplots@quiver@u}{\pgfplots@current@point@x}%
+ \let\pgfplots@quiver@u=\pgfmathresult
+ \pgfmathadd@{\pgfplots@quiver@v}{\pgfplots@current@point@y}%
+ \let\pgfplots@quiver@v=\pgfmathresult
+ \pgfplotsifcurplotthreedim{%
+ \pgfmathadd@{\pgfplots@quiver@w}{\pgfplots@current@point@z}%
+ \let\pgfplots@quiver@w=\pgfmathresult
+ }{}%
+ \ifpgfplots@quiver@updatelimits
+ \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w
+ \fi
+ \fi
+ \pgfplotsaxisdatapointsurveyed
+}%
+\def\pgfplotsplothandlerserializepointto@quiver#1{%
+ \edef#1{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z>\pgfplots@quiver@u,\pgfplots@quiver@v,\pgfplots@quiver@w}%
+}%
+\def\pgfplotsplothandlerdeserializepointfrom@quiver#1{%
+ \expandafter\pgfplotsplothandlerdeserializepointfrom@quiver@#1\relax
+}%
+\def\pgfplotsplothandlerdeserializepointfrom@quiver@#1,#2,#3>#4,#5,#6\relax{%
+ \def\pgfplots@current@point@x{#1}%
+ \def\pgfplots@current@point@y{#2}%
+ \def\pgfplots@current@point@z{#3}%
+ \def\pgfplots@quiver@u{#4}%
+ \def\pgfplots@quiver@v{#5}%
+ \def\pgfplots@quiver@w{#6}%
+}%
+\def\pgfplotsplothandlerpointtokeys@quiver#1{%
+ \pgfplotsplothandlerpointtokeys@default
+ \pgfkeyslet{#1/u}\pgfplots@quiver@u
+ \pgfkeyslet{#1/v}\pgfplots@quiver@v
+ \pgfkeyslet{#1/w}\pgfplots@quiver@w
+}%
+\def\pgfplotsplothandlervisbegin@quiver{%
+ \def\pgfplots@quiver@has@handled@point@meta{0}%
+ \pgfkeysgetvalue{/pgfplots/quiver/arrow color}\pgfplots@quiver@color
+ \ifx\pgfplots@quiver@color\pgfutil@empty
+ \else
+ % prepare the color data and define 'mapped color':
+ \def\pgfplots@quiver@has@handled@point@meta{1}%
+ \expandafter\def\expandafter\pgfplotsplothandlerquiver@vis@hook\expandafter{%
+ \pgfplotsplothandlerquiver@vis@hook
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}%
+ }%
+ % SEE BELOW AS WELL FOR HOW TO ENABLE THE COLOR.
+ \fi
+ %
+ %
+ \pgfkeysgetvalue{/pgfplots/quiver/every arrow/.@cmd}\pgfplots@quiver@everyarrow
+ \ifx\pgfplots@quiver@everyarrow\pgfplots@empty@style@key
+ % use PGF basic level methods to set the 'arrow color':
+ \ifx\pgfplots@quiver@color\pgfutil@empty
+ \else
+ \expandafter\def\expandafter\pgfplotsplothandlerquiver@vis@hook\expandafter{%
+ \pgfplotsplothandlerquiver@vis@hook
+ \pgfsetstrokecolor{\pgfkeysvalueof{/pgfplots/quiver/arrow color}}%
+ % for arrow heads:
+ \pgfsetfillcolor{\pgfkeysvalueof{/pgfplots/quiver/arrow color}}%
+ }%
+ \fi
+ \else
+ % 'every arrow' should provide a high level user interface.
+ % Use tikz instead of pgf. This is slower, but more powerful.
+ \pgfplots@quiver@usetikztrue
+ \pgfplotsaxisifhaspointmeta{%
+ % ASSERT(mapped color is available)
+ \if0\pgfplots@quiver@has@handled@point@meta%
+ % -> define mapped color
+ \expandafter\def\expandafter\pgfplotsplothandlerquiver@vis@hook\expandafter{%
+ \pgfplotsplothandlerquiver@vis@hook
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}%
+ }%
+ \def\pgfplots@quiver@has@handled@point@meta{1}%
+ \fi
+ }{}%
+ % use tikz methods to set the 'arrow color':
+ \ifx\pgfplots@quiver@color\pgfutil@empty
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplots@quiver@color}%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfkeysalso{/pgfplots/quiver/every arrow/.prefix style={\the\t@pgfplots@toka}}}%
+ \pgfplots@loc@TMPa
+ \fi
+ \fi
+ %
+ \global\let\pgf@plotstreampoint=\pgfplotsplothandlerquiver@vis%
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax
+}%
+
+\def\pgfplotsplothandlerquiver@vis#1{%
+ \pgfkeysvalueof{/pgfplots/quiver/before arrow/.@cmd}\pgfeov
+ \pgfplotsplothandlerquiver@vis@hook
+ \ifpgfplots@quiver@usetikz
+ \edef\pgfplotsplothandler@quiver@point{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ \draw[/pgfplots/quiver/every arrow] \pgfextra{\pgfplotsplothandlerquiver@vis@path{\pgfplotsplothandler@quiver@point}};
+ \else
+ \pgfplotsplothandlerquiver@vis@path{#1}%
+ \pgfusepath{stroke}%
+ \fi
+ \pgfkeysvalueof{/pgfplots/quiver/after arrow/.@cmd}\pgfeov
+}%
+\def\pgfplotsplothandlerquiver@vis@path#1{%
+ \pgfpathmoveto{#1}%
+ \pgfplotsaxisvisphasetransformcoordinate\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w
+ \pgfpathlineto{%
+ \pgfplotsifcurplotthreedim{%
+ \pgfplotsqpointxyz\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w
+ }{%
+ \pgfplotsqpointxy\pgfplots@quiver@u\pgfplots@quiver@v
+ }%
+ }%
+}%
+
+\newif\ifpgfplotsplothandlerhistogram@intervals
+\newif\ifpgfplotsplothandlerhistogram@cumulative
+\newif\ifpgfplotsplothandlerhistogram@density
+\pgfplotsset{
+ hist/.code={%
+ \let\tikz@plot@handler=\pgfplotsplothandlerhistogram
+ \pgfqkeys{/pgfplots/hist}{#1}%
+ },
+ hist/data value/.code =\pgfplots@set@source@for{hist/data}{#1}{0},%
+ hist/data/.code =\pgfplots@set@source@for{hist/data}{#1}{1},%
+ hist/data filter/.code=,
+ hist/data filter/.expression/.code=\pgfplots@install@filter@expression{hist/data filter}{#1},
+ hist/data value=\pgfkeysvalueof{/data point/y},
+% hist/data=y,
+ hist/data min/.initial=\pgfkeysvalueof{/pgfplots/xmin},
+ hist/data max/.initial=\pgfkeysvalueof{/pgfplots/xmax},
+ hist/bins/.initial=10,
+ hist/intervals/.is if=pgfplotsplothandlerhistogram@intervals,
+ hist/intervals/.default=true,
+ hist/intervals=true,
+ hist/cumulative/.is if=pgfplotsplothandlerhistogram@cumulative,
+ hist/cumulative/.default=true,
+ hist/density/.is if=pgfplotsplothandlerhistogram@density,
+ hist/density/.default=true,
+ hist/density=false,
+ hist/handler/.style={/tikz/ybar interval},
+ hist/symbolic coords/.style={%
+ /pgfplots/symbolic coords={hist/data}{#1},
+ /pgfplots/symbolic coords={x}{#1},
+ },%
+}%
+\def\pgfplotsplothandlerhistogram{%
+ \pgfplotsresetplothandler
+ \def\pgf@plotstreamstart{%
+ \pgfplotsset{/pgfplots/hist/handler}%
+ \pgfplotsresetplothandler
+ \tikz@plot@handler
+ \pgf@plotstreamstart
+ }%
+ %
+ % let \pgfplotsplothandlername to the one of the handler.
+ % Note that \pgfplotsplothandlername is the *visualization* layer
+ \begingroup
+ \pgfplotsset{/pgfplots/hist/handler}%
+ \pgfplotsresetplothandler
+ \tikz@plot@handler
+ \xdef\pgfplots@glob@TMPa{\pgfplotsplothandlername}%
+ \endgroup
+ \let\pgfplotsplothandlername=\pgfplots@glob@TMPa%
+ %
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@hist
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@hist
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@hist
+}%
+\def\pgfplotsplothandlersurveystart@hist{%
+ \pgfplots@prepare@source@parser@for{hist/}{data}{\pgfplotsplothandlerhistogram@parse}%
+ %
+ \pgfkeysgetvalue{/pgfplots/hist/data min}\pgfmathresult
+ \edef\pgfmathresult{\pgfmathresult}%
+ \ifx\pgfmathresult\pgfutil@empty\else
+ \pgfplots@coord@trafo@for{hist/data}%
+ \fi
+ \edef\pgfplotsplothandlerhistogram@datamin{\pgfmathresult}%
+ %
+ \pgfkeysgetvalue{/pgfplots/hist/data max}\pgfmathresult
+ \edef\pgfmathresult{\pgfmathresult}%
+ \ifx\pgfmathresult\pgfutil@empty\else
+ \pgfplots@coord@trafo@for{hist/data}%
+ \fi
+ \edef\pgfplotsplothandlerhistogram@datamax{\pgfmathresult}%
+ %
+ \ifx\pgfplotsplothandlerhistogram@datamin\pgfutil@empty
+ \pgfmathfloatcreate{1}{1.0}{2147483645}%
+ \let\pgfplotsplothandlerhistogram@datamin=\pgfmathresult
+ \def\pgfplotsplothandlerhistogram@datamin@autocompute{1}%
+ \else
+ \pgfmathfloatparsenumber{\pgfplotsplothandlerhistogram@datamin}%
+ \let\pgfplotsplothandlerhistogram@datamin=\pgfmathresult
+ \def\pgfplotsplothandlerhistogram@datamin@autocompute{0}%
+ \fi
+ \ifx\pgfplotsplothandlerhistogram@datamax\pgfutil@empty
+ \pgfmathfloatcreate{2}{1.0}{2147483645}%
+ \let\pgfplotsplothandlerhistogram@datamax=\pgfmathresult
+ \def\pgfplotsplothandlerhistogram@datamax@autocompute{1}%
+ \else
+ \pgfmathfloatparsenumber{\pgfplotsplothandlerhistogram@datamax}%
+ \let\pgfplotsplothandlerhistogram@datamax=\pgfmathresult
+ \def\pgfplotsplothandlerhistogram@datamax@autocompute{0}%
+ \fi
+ %
+ \edef\pgfplotsplothandlerhistogram@Nfixed{\pgfkeysvalueof{/pgfplots/hist/bins}}%
+ \c@pgf@counta=\pgfplotsplothandlerhistogram@Nfixed\relax
+ \advance\c@pgf@counta by-1
+ \edef\pgfplotsplothandlerhistogram@Nmax{\the\c@pgf@counta}%
+ %
+ \pgfmathfloatparsenumber{\pgfplotsplothandlerhistogram@Nfixed}%
+ \let\pgfplotsplothandlerhistogram@N=\pgfmathresult
+ %
+ \pgfplotsapplistXnewempty\pgfp@hist@@
+ \def\c@pgfplotsplothandlerhistogram@num{0}%
+ \c@pgfplots@coordindex=0
+}%
+
+\def\pgfplotsplothandlersurveypoint@hist@limits{%
+ \if1\pgfplotsplothandlerhistogram@datamin@autocompute
+ \pgfplotsmathfloatmin{\pgfplots@current@point@data}{\pgfplotsplothandlerhistogram@datamin}%
+ \let\pgfplotsplothandlerhistogram@datamin=\pgfmathresult
+ \fi
+ %
+ \if1\pgfplotsplothandlerhistogram@datamax@autocompute
+ \pgfplotsmathfloatmax{\pgfplots@current@point@data}{\pgfplotsplothandlerhistogram@datamax}%
+ \let\pgfplotsplothandlerhistogram@datamax=\pgfmathresult
+ \fi
+}%
+\def\pgfplotsplothandlersurveypoint@hist{%
+ % Note that at this point, the coordinate filtering does NOT
+ % apply. Perhaps it should...
+ \pgfplotsplothandlerhistogram@parse
+ \let\pgfplots@current@point@data=\pgfmathresult
+ %
+ \ifx\pgfplots@current@point@data\pgfutil@empty
+ \else
+ \pgfmathfloatiffinite\pgfplots@current@point@data{%
+ \pgfplotsplothandlersurveypoint@hist@limits
+ %
+ \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlerhistogram@num
+ %
+ % store parsed result.
+ \edef\pgfmathresult{{\pgfplots@current@point@data}}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfmathresult}\to\pgfp@hist@@
+ }{%
+ }%
+ \fi
+ \advance\c@pgfplots@coordindex by1
+}%
+\def\pgfplotsplothandlersurveyend@hist{%
+ \ifnum\c@pgfplotsplothandlerhistogram@num>0
+ \expandafter\pgfplotsplothandlersurveyend@hist@
+ \fi
+}%
+\def\pgfplotsplothandlersurveyend@hist@{%
+ \pgfmathfloatsubtract@{\pgfplotsplothandlerhistogram@datamax}{\pgfplotsplothandlerhistogram@datamin}%
+ \let\pgfplotsplothandlerhistogram@range=\pgfmathresult
+ \pgfmathfloatdivide@{\pgfplotsplothandlerhistogram@range}{\pgfplotsplothandlerhistogram@N}%
+ \let\pgfplotsplothandlerhistogram@h=\pgfmathresult
+ \pgfmathfloatreciprocal@{\pgfplotsplothandlerhistogram@h}%
+ \let\pgfplotsplothandlerhistogram@invh=\pgfmathresult
+ %
+ \pgfplotsarraynewempty{pgfp@hist}%
+ \pgfplotsarrayresize{pgfp@hist}{\pgfplotsplothandlerhistogram@Nfixed}%
+ \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{%
+ \pgfplotsarrayset{\pgfplotsarrayforeachindex}\of{pgfp@hist}\to{0}%
+ }%
+ %
+ \pgfplotsapplistXlet\pgfplots@hist@data=\pgfp@hist@@
+ \pgfplotsapplistXnewempty\pgfp@hist@@
+ \expandafter\pgfplotsplothandlersurveyend@hist@loop\pgfplots@hist@data\pgfplots@EOI
+ \let\pgfplots@hist@data=\relax
+ %
+
+ % Calculate total count
+ \c@pgf@counta=0
+ \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{%
+ \advance\c@pgf@counta by\pgfplots@hist@count\relax
+ \def\pgfplots@loc@TMPa{\pgfplotsarrayset{\pgfplotsarrayforeachindex}\of{pgfp@hist}\to}%
+ }%
+ \pgfmathfloatparsenumber{\the\c@pgf@counta}%
+ \let\pgfp@hist@totalcount=\pgfmathresult
+ \pgfmathfloatreciprocal@{\pgfp@hist@totalcount}%
+ \let\pgfp@hist@totalcount@inv=\pgfmathresult
+ %
+ \ifpgfplotsplothandlerhistogram@cumulative
+ \c@pgf@counta=0
+ \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{%
+ \advance\c@pgf@counta by\pgfplots@hist@count\relax
+ \def\pgfplots@loc@TMPa{\pgfplotsarrayset{\pgfplotsarrayforeachindex}\of{pgfp@hist}\to}%
+ \ifpgfplotsplothandlerhistogram@density
+ \pgfmathfloatparsenumber{\the\c@pgf@counta}%
+ \pgfmathfloatmultiply@{\pgfmathresult}{\pgfp@hist@totalcount@inv}%
+ \pgfmathfloattosci@{\pgfmathresult}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+ \else
+ \expandafter\pgfplots@loc@TMPa\expandafter{\the\c@pgf@counta}%
+ \fi
+ }%
+ \fi%
+ %
+ %% Density histogram
+ % Divide count in each bin by (totalcount*range/bins)
+ \ifpgfplotsplothandlerhistogram@density
+ \ifpgfplotsplothandlerhistogram@cumulative
+ \else
+ \pgfmathfloatmultiply@{\pgfp@hist@totalcount@inv}{\pgfplotsplothandlerhistogram@invh}%
+ \let\pgfp@hist@totalcount@times@h@inv=\pgfmathresult
+% FIXME : this here is a patch suggestion for
+% https://sourceforge.net/tracker/?func=detail&atid=1060656&aid=3609245&group_id=224188
+%
+% FIXME : this line would actually compute relative frequencies...
+% might not be too bad at all, but is no density
+%\let\pgfp@hist@totalcount@times@h@inv=\pgfp@hist@totalcount@inv
+ \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{%
+ \pgfmathfloatparsenumber{\pgfplots@hist@count}%
+ \pgfmathfloatmultiply@{\pgfmathresult}{\pgfp@hist@totalcount@times@h@inv}%
+ \pgfmathfloattosci@{\pgfmathresult}%
+ \def\pgfplots@loc@TMPa{\pgfplotsarrayset{\pgfplotsarrayforeachindex}\of{pgfp@hist}\to}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+ }%
+ \fi
+ \fi
+ %
+ %% End density histogram
+ \pgfplots@curplot@threedimfalse
+ %
+ \pgfplotsset{/pgfplots/hist/handler}%
+ \pgfplotsresetplothandler
+ \tikz@plot@handler
+ %
+ \pgfplotsplothandlersurveystart
+ %
+ \let\pgfplots@current@point@z=\pgfutil@empty
+ \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{%
+ \pgfplotsplothandlerhistgetintervalstartfor\pgfplotsarrayforeachindex
+ \pgfplotsplothandlerhist@invtrafo
+ \let\pgfplots@current@point@x\pgfmathresult%
+ \let\pgfplots@current@point@y\pgfplots@hist@count%
+%\message{Survey point (\pgfplots@current@point@x,\pgfplots@current@point@y)^^J}%
+ \pgfplotsplothandlersurveypoint
+ }%
+ \ifpgfplotsplothandlerhistogram@intervals
+ % replicate last count.
+ \let\pgfmathresult\pgfplotsplothandlerhistogram@datamax%
+ \pgfplotsplothandlerhist@invtrafo
+ \let\pgfplots@current@point@x\pgfmathresult%
+ \let\pgfplots@current@point@y\pgfplots@hist@count%
+%\message{Survey point (\pgfplots@current@point@x,\pgfplots@current@point@y)^^J}%
+ \pgfplotsplothandlersurveypoint
+ \fi
+ %
+ \pgfplotsplothandlersurveyend
+}
+\def\pgfplotsplothandlerhist@invtrafo{%
+ % This here might be inefficient, because
+ % there needs to be a compatible "x coord trafo" as well -- and
+ % that transformation will (most likely) do the very same thing as
+ % the hist/data coord trafo.
+ %
+ % But I did not find a way to combine the transformations
+ % automatically without resorting to hackery.
+ %
+ % And: the performance impact might (hopefully) be small...
+ \pgfplots@coord@trafo@inv@for{hist/data}%
+}%
+\def\pgfplotsplothandlersurveyend@hist@loop#1{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@EOI
+ \else
+ \pgfplotsplothandlerhistgetbinfor@{#1}%
+ \expandafter\pgfplotsplothandlerhistadvancebin\expandafter{\pgfmathresult}%
+ %
+ \expandafter\pgfplotsplothandlersurveyend@hist@loop
+ \fi
+}%
+\def\pgfplotsplothandlerhistadvancebin#1{%
+ \pgfplotsarrayselect{#1}\of{pgfp@hist}\to\pgfplots@loc@TMPa%
+ \pgfplotsutil@advancestringcounter\pgfplots@loc@TMPa
+ \pgfplotsarrayletentry{#1}\of{pgfp@hist}=\pgfplots@loc@TMPa
+}%
+\def\pgfplotsplothandlerhistgetintervalstartfor#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \expandafter\pgfplotsplothandlerhistgetintervalstartfor@\expandafter{\pgfmathresult}%
+}%
+\def\pgfplotsplothandlerhistgetintervalstartfor@#1{%
+ \pgfmathfloatmultiply@{\pgfplotsplothandlerhistogram@h}{#1}%
+ \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfplotsplothandlerhistogram@datamin}%
+}%
+\def\pgfplotsplothandlerhistgetbinfor#1{%
+ \pgfmathfloatparsenumber{#1}%
+ \expandafter\pgfplotsplothandlerhistgetbinfor@\expandafter{\pgfmathresult}%
+}%
+
+\def\pgfplotsplothandlerhistsettol#1{%
+ \begingroup
+ \pgfmathfloatparsenumber{#1}%
+ \global\let\pgfplotsplothandlerhisttol@parsed=\pgfmathresult
+ \endgroup
+}%
+\pgfplotsplothandlerhistsettol{1e-4}%
+
+\def\pgfplotsplothandlerhistgetbinfor@#1{%
+ \pgfmathfloatsubtract@{#1}{\pgfplotsplothandlerhistogram@datamin}%
+ \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfplotsplothandlerhistogram@invh}%
+ \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfplotsplothandlerhisttol@parsed}%
+ \pgfmathfloattofixed{\pgfmathresult}%
+ \afterassignment\pgfplots@gobble@until@relax
+ \c@pgf@counta=\pgfmathresult\relax
+ \ifnum\pgfplotsplothandlerhistogram@Nfixed>\c@pgf@counta
+ \ifnum\c@pgf@counta<0
+ \def\pgfmathresult{0}%
+ \else
+ \def\pgfmathresult{\the\c@pgf@counta}%
+ \fi
+ \else
+ \let\pgfmathresult=\pgfplotsplothandlerhistogram@Nmax
+ \fi
+}%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+%
+% Contour plots
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+
+\newif\ifpgfplotsplothandlercontour@labels
+\newif\ifpgfplotsplothandlercontour@filled
+
+\def\pgfplotsplothandlercontour@axis@set@inverse#1#2#3#4{%
+ \pgfplotsutilifstringequal{#1}{#4}{%
+ \expandafter\def\csname pgfplotsplothandlercontour@axis@inv@#4\endcsname{x}%
+ }{%
+ \pgfplotsutilifstringequal{#2}{#4}{%
+ \expandafter\def\csname pgfplotsplothandlercontour@axis@inv@#4\endcsname{y}%
+ }{%
+ \pgfplotsutilifstringequal{#3}{#4}{%
+ \expandafter\def\csname pgfplotsplothandlercontour@axis@inv@#4\endcsname{z}%
+ }{%
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, the choice axes={#1}{#2}{#3} is illegal. Please use only values x, y, and z and ensure that there is a 1:1 correspondence}\pgfeov%
+ }%
+ }%
+ }%
+}
+
+\pgfplotsset{
+ contour prepared/.code={%
+ \let\tikz@plot@handler=\pgfplotsplothandlercontourprepared
+ \pgfqkeys{/pgfplots/contour}{%
+ every contour plot,%
+ #1,%
+ }%
+ },
+ contour prepared filled/.style={%
+ /pgfplots/contour prepared={draw color=mapped color!80!black,labels=false,filled=true},
+ },
+ contour filled/.code={%
+ \pgfqkeys{/pgfplots/contour}{%
+ every filled contour plot,%
+ /pgfplots/surf,%
+ /pgfplots/shader=interp,%
+ /pgfplots/colormap access=const,%
+ #1,%
+ }%
+ \let\tikz@plot@handler=\pgfplotsplothandlercontourfilled
+ },
+ % FIXME : should use \tikz@plot@handler instead of just the
+ % visualization thing!
+ contour/handler/.style={/tikz/sharp plot},
+ contour prepared format/.is choice,
+ contour prepared format/standard/.code= {\def\pgfplotsplothandlercontourprepared@format{s}},
+ contour prepared format/matlab/.code= {\def\pgfplotsplothandlercontourprepared@format{m}},
+ contour prepared format/standard,
+ contour/draw color/.initial=mapped color,
+ contour/fill color/.initial=mapped color,
+ contour/label distance/.initial=70pt,
+ contour/label node code/.code={%
+ \node {\pgfmathprintnumber{#1}};
+ },%
+ contour/labels/.is if=pgfplotsplothandlercontour@labels,
+ contour/labels=true,
+ %
+ % XXX : this here is dead code... it has been superseded by
+ % \pgfplotsplothandlercontourfilled:
+ contour/filled/.is if=pgfplotsplothandlercontour@filled,
+ contour/filled/.default=true,
+ % EXPERIMENTAL: WILL CHANGE EVENTUALLY!
+ % this is (only) used for contour filled:
+ % data limits={(xmin,ymin,zmin,cmin) (xmax,ymax,ymax,cmax}
+ contour/data limits/.initial=,% FIXME EXPERIMENTAL
+ contour/every filled contour plot/.style={
+ /pgfplots/area legend,
+ },
+ contour/every contour plot/.style={
+ /pgfplots/legend image post style={sharp plot},
+ },
+ contour/every contour label/.style={%
+ sloped,%
+ transform shape,%
+ inner sep=2pt,
+ font=\scriptsize,
+ every node/.style={mapped color!50!black,fill=white},%
+ /pgf/number format/relative*={\pgfplotspointmetarangeexponent},%
+ %every node/.style={yshift=10pt},%
+ },
+ contour/labels over line/.style={
+ /pgfplots/contour/every contour label/.append style={%
+ every node/.append style={%
+ fill=none,
+ anchor=base,
+ yshift=1pt,
+ },
+ },
+ },
+ contour/contour label style/.style={
+ /pgfplots/contour/every contour label/.append style={#1}},
+ %
+ %
+ % Styles to actually *compute* the contour.
+ % These are mostly placeholders here: As long as the
+ % algorithm is not ready, we have to resort to external tools.
+ %
+ % Shared parameters:
+ contour/number/.initial=5,
+ contour/levels/.initial=,
+ contour/levels from colormap/.initial=,
+ %
+ %
+ contour/contour dir/.is choice,
+ contour/contour dir/x/.style={/pgfplots/contour/axes={y}{z}{x}},
+ contour/contour dir/y/.style={/pgfplots/contour/axes={x}{z}{y}},
+ contour/contour dir/z/.style={/pgfplots/contour/axes={x}{y}{z}},
+ contour/axes/.code args={#1#2#3}{%
+ \edef\pgfplotsplothandlercontour@axis@x{#1}%
+ \edef\pgfplotsplothandlercontour@axis@y{#2}%
+ \edef\pgfplotsplothandlercontour@axis@z{#3}%
+ %
+ \edef\pgfplots@loc@TMPa{{\pgfplotsplothandlercontour@axis@x}{\pgfplotsplothandlercontour@axis@y}{\pgfplotsplothandlercontour@axis@z}}%
+ %
+ \expandafter\pgfplotsplothandlercontour@axis@set@inverse\pgfplots@loc@TMPa{x}%
+ \expandafter\pgfplotsplothandlercontour@axis@set@inverse\pgfplots@loc@TMPa{y}%
+ \expandafter\pgfplotsplothandlercontour@axis@set@inverse\pgfplots@loc@TMPa{z}%
+ %
+ },%
+ contour/contour dir=z,
+ %
+ %
+ % Interface to external tools:
+ contour external/.code={%
+ \edef\tikz@plot@handler{\noexpand\pgfplotsplothandlercontourexternal}%
+ \pgfqkeys{/pgfplots/contour external}{%
+ every contour plot,%
+ #1%
+ }%
+ },
+ contour external/scanline marks/.is choice,
+ contour external/scanline marks/false/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{0}},
+ contour external/scanline marks/if in input/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{1}},
+ contour external/scanline marks/required/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{2}},
+ contour external/scanline marks/true/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{2}},
+ contour external/scanline marks/if in input,
+ contour external/output point meta/.initial=,
+ contour external/file/.initial=,% auto-generate
+ contour external/script extension/.initial=script,
+ contour external/script/.initial=,% not yet initialised
+ contour external/cmd/.initial=,% not yet initialised
+ contour external/.search also=/pgfplots/contour,
+ contour gnuplot/.style={
+ contour external={%
+ scanline marks=required,
+ script={
+ unset surface;
+ \ifx\thecontourlevels\empty
+ set cntrparam levels \thecontournumber;
+ \else
+ set cntrparam levels discrete \thecontourlevels;
+ \fi
+ set contour;
+ set table \"\outfile\";
+ splot \"\infile\";
+ },
+ cmd={gnuplot \"\script\"},%
+ #1,%
+ },
+ },
+}%
+
+\def\pgfplotsplothandlercontourprepared{%
+ \pgfplotsresetplothandler
+ \pgfplotsset{empty line=jump}%
+ \let\pgf@plotstreamstart=\pgfplotsplothandlervisstart@contour
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@contour
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@contour
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@contour
+ \if m\pgfplotsplothandlercontourprepared@format
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@contourmatlabformat
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@contourmatlabformat
+ \pgfplotsaxisifhaspointmeta{}{%
+ \pgfplotsset{/pgfplots/point meta=explicit}%
+ }%
+ \fi
+ \pgfplotsplothandlercontour@prepare@point@meta
+ \def\pgfplotsplothandlersurveybeforesetpointmeta{%
+ % ensure that 'point meta=z' respects 'axes={y}{z}{x}' -- it
+ % should assign the 'x' coordinate as point meta!
+ % To this end, we have to convert to reordered axes
+ % temporarily.
+ \pgfplotsplothandlersurveypoint@contour@axes@std@to@reordered
+ \pgfplotsplothandlersurveybeforesetpointmeta@default
+ }%
+ \def\pgfplotsplothandlersurveyaftersetpointmeta{%
+ \pgfplotsplothandlersurveyaftersetpointmeta@default
+ % ... and undo the reordering after point meta has been set:
+ \pgfplotsplothandlersurveypoint@contour@axes@reordered@to@std
+ }%
+ \def\pgfplotsplothandlername{contour prepared}%
+}%
+
+\def\pgfplotsplothandlersurveystart@contour{%
+ \pgfplotsplothandlersurveystart@default
+ %
+ \pgfplotsplothandlersurveypoint@contour@prepare@axes x%
+ \pgfplotsplothandlersurveypoint@contour@prepare@axes y%
+ \pgfplotsplothandlersurveypoint@contour@prepare@axes z%
+}%
+
+\def\pgfplotsplothandlercontour@prepare@point@meta{%
+ \ifpgfplots@curplot@threedim
+ \pgfplotsset{/pgfplots/set point meta if empty=z}%
+ \else
+ \pgfplotsaxisifhaspointmeta{}{%
+ \pgfkeysgetvalue{/pgfplots/table/meta index}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+% FIXME : this here is reasonable, but it should be sanity checked!
+ \pgfkeyssetvalue{/pgfplots/table/meta index}{2}%
+ \fi
+ \pgfplotsset{/pgfplots/set point meta if empty=explicit}%
+ }%
+ %\pgfplots@error{Sorry, 'contour external' requires \string\addplot3 (or a non-empty `point meta' used as label data)}%
+ \fi
+ \def\pgfplotsplothandlercontour@empty@pointmeta@error@@{0}%
+}%
+\def\pgfplotsplothandlercontour@empty@pointmeta@error{%
+ \if0\pgfplotsplothandlercontour@empty@pointmeta@error@@
+ \def\pgfplotsplothandlercontour@empty@pointmeta@error@@{1}%
+ \def\pgfplots@current@point@meta{0}%
+ \pgfplotsthrow{invalid argument}{\pgfplots@current@point@meta}{Sorry, contour plots require non--empty `point meta'. Please use '\string\addplot3[contour ...] together with 'view={0}{90}' or provide a valid 'point meta=<value>' (for example `<value>=z'?)}\pgfeov%
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveystart@contourmatlabformat{%
+ \def\c@pgfplotsplothandlercontourprepared@matlabformat@cur{0}%
+ \def\c@pgfplotsplothandlercontourprepared@matlabformat@count{0}%
+ \pgfmathfloatparsenumber{nan}%
+ \let\pgfplotsplothandlercontourprepared@matlabformat@meta=\pgfmathresult
+ %
+ \pgfplotsplothandlersurveystart@contour
+}
+\def\pgfplotsplothandlersurveypoint@contourmatlabformat{%
+ \ifnum\c@pgfplotsplothandlercontourprepared@matlabformat@cur=\c@pgfplotsplothandlercontourprepared@matlabformat@count\relax
+ \pgfmathfloatparsenumber{\pgfplots@current@point@y}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\c@pgfplotsplothandlercontourprepared@matlabformat@count=\pgfmathresult
+ \def\c@pgfplotsplothandlercontourprepared@matlabformat@cur{0}%
+ %
+ \pgfmathfloatparsenumber{\pgfplots@current@point@x}%
+ \let\pgfplots@loc@TMPa=\pgfplotsplothandlercontourprepared@matlabformat@meta
+ \let\pgfplotsplothandlercontourprepared@matlabformat@meta=\pgfmathresult
+ %
+ \ifx\pgfplots@loc@TMPa\pgfplotsplothandlercontourprepared@matlabformat@meta
+ % oh. We have two successive segments of the SAME contour
+ % level. Call the jump handler:
+ \pgfplotsscanlinecomplete
+ \fi
+ %
+ \else
+ \let\pgfplots@current@point@z=\pgfplotsplothandlercontourprepared@matlabformat@meta
+ \let\pgfplots@current@point@meta=\pgfplotsplothandlercontourprepared@matlabformat@meta
+ \pgfplotsplothandlersurveypoint@contour
+ \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlercontourprepared@matlabformat@cur
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveypoint@contour{%
+ %
+ \pgfplotsplothandlersurveypoint@contour@axes@reordered@to@std
+ %
+ \pgfplotsplothandlersurveypoint@default
+}
+
+\def\pgfplotsplothandlersurveyend@contour{%
+ \pgfplotsplothandlercontour@init@limits
+ \ifx\pgfplotsplothandlercontour@limits@low@meta\pgfutil@empty
+ \else
+ \pgfplotsaxisupdatelimitsforpointmeta\pgfplotsplothandlercontour@limits@low@meta
+ \fi
+}%
+
+\def\pgfplotsplothandlervisstart@contour{%
+ %
+ \ifpgfplotsplothandlercontour@labels
+ \pgfkeysgetvalue{/pgfplots/contour/label distance}\pgfplotsplothandlercontour@labeldist
+ \pgfmathparse{\pgfplotsplothandlercontour@labeldist}%
+ \edef\pgfplotsplothandlercontour@labeldist{\pgfmathresult pt}%
+ %
+ \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@storedlabels
+ \let\pgfplotsplothandlercontour@handlesplinesegment=\pgfplotsplothandlercontour@handlesplinesegment@forlabels
+ \else
+ \def\pgfplotsplothandlercontour@handlesplinesegment##1##2##3{}%
+ \fi
+ %
+ \ifpgfplotsplothandlercontour@filled
+ \pgfseteorule
+ \let\pgfplotsplothandlercontour@sequence@sort@cmp=\pgfutil@empty
+ \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@stored@lastcontourpath
+ \pgfplotsplothandlercontour@init@limits
+ \fi
+ %
+ \pgfplotsresetplothandler
+ \pgfplotsset{/pgfplots/contour/handler}%
+ \tikz@plot@handler
+ %
+ \def\pgfplotsplothandlercontour@haspendingjump{0}%
+ \let\pgfplotsplothandlervisualizejump=\pgfplotsplothandlercontour@jump
+ %
+ \let\pgfplotsplothandlercontour@handler@start=\pgf@plotstreamstart
+ \let\pgfplotsplothandlercontour@lastcontour=\pgfutil@empty
+ \global\let\pgf@plotstreampoint=\pgfplotsplothandlercontour@streampoint
+ \global\let\pgf@plotstreamend=\pgfplotsplothandlercontour@streamend
+}%
+
+\def\pgfplotsplothandlercontour@jump{%
+ \def\pgfplotsplothandlercontour@haspendingjump{1}%
+}%
+
+\def\pgfplotsplothandlercontour@streamend{%
+ \ifx\pgfplotsplothandlercontour@lastcontour\pgfutil@empty
+ \else
+ %
+ \def\pgfplotsplothandlercontour@haspendingjump{0}% important! (this is a different case than a jump)
+ \pgfplotsplothandlercontour@finishcontourline
+ %
+ \ifpgfplotsplothandlercontour@filled
+ \if0\pgfplotsplothandlercontour@processed@outer
+ \pgfplotsplothandlercontour@stream@bbcontour
+ \pgfplotsplothandlercontour@finishcontourline
+ \fi
+ \fi
+ %
+ \ifpgfplotsplothandlercontour@labels
+ \scope[/pgfplots/contour/every contour label]
+ \let\pgfplots@restore@drawmodes=\relax% FIXME : necessary?
+ \pgfplotsapplistXlet\pgfplotsplothandlercontour@storedlabels@=\pgfplotsplothandlercontour@storedlabels
+ \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@storedlabels
+ \expandafter\pgfplotsplothandlercontourplacelabels\pgfplotsplothandlercontour@storedlabels@\pgfplots@EOI
+ \endscope
+ \fi
+ \fi
+}%
+\def\pgfplotsplothandlercontour@check@bbcontour{%
+ \ifpgfplotsplothandlercontour@filled
+ \if0\pgfplotsplothandlercontour@processed@outer
+ \pgfplotscoordmath{meta}{if less than}
+ {\pgfplotsplothandlercontour@act@contour}
+ {\pgfplotsplothandlercontour@limits@low@meta}
+ {%
+ % TRUE!
+ \pgfplotsplothandlercontour@stream@bbcontour@inbetween
+ }{}%
+ \fi
+ \fi
+}%
+\def\pgfplotsplothandlercontour@stream@bbcontour@inbetween{%
+ \def\pgfplotsplothandlercontour@processed@outer{1}%
+}%
+
+\def\pgfplotsplothandlercontour@stream@bbcontour{%
+%\message{contour: processing OUTER data limit contour...}%
+ \def\pgfplotsplothandlercontour@haspendingjump{0}% important
+ %
+ % forbid labels:
+ \let\pgfplotsplothandlercontour@stream@bbcontour@oldlabelsetting=\pgfplotsplothandlercontour@handlesplinesegment
+ \def\pgfplotsplothandlercontour@handlesplinesegment##1##2##3{}%
+ %
+ \let\pgfplots@current@point@meta=\pgfplotsplothandlercontour@limits@low@meta
+ \pgfplotsplothandlercontour@streampoint{%
+ \pgfplotsplothandlerpointxyz
+ \pgfplotsplothandlercontour@limits@low@x
+ \pgfplotsplothandlercontour@limits@low@y
+ \pgfplotsplothandlercontour@limits@low@z
+ }%
+ \pgfplotsplothandlercontour@streampoint{%
+ \pgfplotsplothandlerpointxyz
+ \pgfplotsplothandlercontour@limits@high@x
+ \pgfplotsplothandlercontour@limits@low@y
+ \pgfplotsplothandlercontour@limits@low@z
+ }%
+ \pgfplotsplothandlercontour@streampoint{%
+ \pgfplotsplothandlerpointxyz
+ \pgfplotsplothandlercontour@limits@high@x
+ \pgfplotsplothandlercontour@limits@high@y
+ \pgfplotsplothandlercontour@limits@low@z
+ }%
+ \pgfplotsplothandlercontour@streampoint{%
+ \pgfplotsplothandlerpointxyz
+ \pgfplotsplothandlercontour@limits@low@x
+ \pgfplotsplothandlercontour@limits@high@y
+ \pgfplotsplothandlercontour@limits@low@z
+ }%
+ \pgfplotsplothandlercontour@streampoint{%
+ \pgfplotsplothandlerpointxyz
+ \pgfplotsplothandlercontour@limits@low@x
+ \pgfplotsplothandlercontour@limits@low@y
+ \pgfplotsplothandlercontour@limits@low@z
+ }%
+ \def\pgfplotsplothandlercontour@processed@outer{1}%
+ %
+ % restore labels:
+ \let\pgfplotsplothandlercontour@handlesplinesegment=\pgfplotsplothandlercontour@stream@bbcontour@oldlabelsetting
+}%
+\def\pgfplotsplothandlercontourplacelabels#1{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@EOI
+ \else
+ %
+ \pgfplotsplothandlercontourplacelabels@act#1\relax
+ %
+ \expandafter\pgfplotsplothandlercontourplacelabels
+ \fi
+}%
+\def\pgfplotsplothandlercontourplacelabels@act#1,#2;#3,#4;#5\relax{%
+ \begingroup
+ \def\pgfplots@current@point@meta{#5}%
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}%
+ %
+ \pgftransformlineattime{0.5}{\pgfqpoint{#1}{#2}}{\pgfqpoint{#3}{#4}}%
+ \pgfkeysvalueof{/pgfplots/contour/label node code/.@cmd}#5\pgfeov
+ \endgroup
+}%
+
+\def\pgfplotsplothandlercontour@streampoint#1{%
+ \pgf@process{#1}%
+ % remember point:
+ \edef\pgfplotsplothandlercontour@act@canvas{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ %
+ \let\pgfplotsplothandlercontour@act@contour=\pgfplots@current@point@meta
+ \ifx\pgfplotsplothandlercontour@act@contour\pgfutil@empty
+ % oh. No Z data!? That should not happen!
+ \pgfplotsplothandlercontour@empty@pointmeta@error
+ \fi
+ \ifx\pgfplotsplothandlercontour@lastcontour\pgfutil@empty
+ % oh. its the very first point.
+ \def\pgfplotsplothandlercontour@haspendingjump{0}% important! (this is a different case than a jump)
+ \pgfplotsplothandlercontour@preparenewcontourline
+ \else
+ \ifx\pgfplotsplothandlercontour@lastcontour\pgfplotsplothandlercontour@act@contour
+ % belongs to the same contour.
+ \if1\pgfplotsplothandlercontour@haspendingjump
+ \pgfplotsplothandlercontour@finishcontourline
+ \pgfplotsplothandlercontour@preparenewcontourline
+ \fi
+ \else
+ % oh, a new contour line.
+ \def\pgfplotsplothandlercontour@haspendingjump{0}% important! (this is a different case than a jump)
+ \pgfplotsplothandlercontour@finishcontourline
+ \pgfplotsplothandlercontour@check@bbcontour
+ \pgfplotsplothandlercontour@preparenewcontourline
+ \fi
+ \fi
+ %
+ %
+ % handle difference vector for label placement:
+ \ifx\pgfplotsplothandlercontour@lastcanvas\pgfutil@empty
+ \else
+ \pgfplotsplothandlercontour@handlesplinesegment
+ {\pgfplotsplothandlercontour@lastcanvas}
+ {\pgfplotsplothandlercontour@act@canvas}%
+ {\pgfplotsplothandlercontour@act@contour}%
+ \fi
+ %
+ \pgfplotsplothandlercontour@handler@streampoint{\pgfplotsplothandlercontour@act@canvas}%
+ \let\pgfplotsplothandlercontour@lastlastcanvas=\pgfplotsplothandlercontour@lastcanvas
+ \let\pgfplotsplothandlercontour@lastcanvas=\pgfplotsplothandlercontour@act@canvas
+ \let\pgfplotsplothandlercontour@lastcontour=\pgfplotsplothandlercontour@act@contour
+ %
+ \ifpgfplotsplothandlercontour@filled
+ \t@pgfplots@toka=\expandafter{\expandafter{\pgfplotsplothandlercontour@act@canvas}}%
+ \expandafter\pgfplotsapplistXpushback\expandafter\pgf@plotstreampoint\the\t@pgfplots@toka
+ \to\pgfplotsplothandlercontour@stored@lastcontourpath
+ \fi
+ %
+ \ifx\pgf@plotstreampoint\pgfplotsplothandlercontour@streampoint
+ \else
+ \let\pgfplotsplothandlercontour@handler@streampoint=\pgf@plotstreampoint
+ \fi
+ \global\let\pgf@plotstreampoint=\pgfplotsplothandlercontour@streampoint
+ \global\let\pgf@plotstreamend=\pgfplotsplothandlercontour@streamend
+ % ATTENTION : if the low level plot handler introduces extra
+ % levels of scopes, this *will* fail!
+}%
+
+%
+% #1 : source
+% #2 : target
+% #3 : contour value
+\def\pgfplotsplothandlercontour@handlesplinesegment@forlabels#1#2#3{%
+ #2%
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ #1%
+ \pgf@xc=\pgf@x
+ \pgf@yc=\pgf@y
+ \pgfpointdiff
+ {\pgf@x=\pgf@xc \pgf@y=\pgf@yc}
+ {\pgf@x=\pgf@xb \pgf@y=\pgf@yb}%
+ \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
+ \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa
+ \pgf@xa=\pgfmathresult pt
+ %
+ \advance\pgf@xa by\pgfplotsplothandlercontour@len\relax
+ \edef\pgfplotsplothandlercontour@len{\the\pgf@xa}%
+%\message{contour(\pgfplotsplothandlercontour@act@contour): cur len=\pgfplotsplothandlercontour@len > \pgfplotsplothandlercontour@labeldist ? [segment from #1--#2];}%
+ \ifdim\pgf@xa>\pgfplotsplothandlercontour@labeldist\relax
+ \def\pgfplotsplothandlercontour@haslabel{1}%
+ \edef\pgfplots@loc@TMPa{{\the\pgf@xc,\the\pgf@yc;\the\pgf@xb,\the\pgf@yb;{#3}}}%
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPa}\to\pgfplotsplothandlercontour@storedlabels
+ \advance\pgf@xa by-\pgfplotsplothandlercontour@labeldist\relax
+ \edef\pgfplotsplothandlercontour@len{\the\pgf@xa\relax}%
+ \fi
+}%
+
+% #1: the transformed point meta of the last contour.
+\def\pgfplotsplothandlercontour@filled@assert@is@sorted#1{%
+ \ifx\pgfplotsplothandlercontour@lastcontour\pgfutil@empty
+ \else
+ \ifx\pgfplotsplothandlercontour@sequence@sort@cmp\pgfutil@empty
+ % we need to determine the sorting:
+ \pgfplotscoordmath{float}{if less than}{\pgfplotsplothandlercontour@lastcontour}{\pgfplots@current@point@meta}{%
+ \def\pgfplotsplothandlercontour@sequence@sort@cmp{+}%
+ }{%
+ \pgfplotscoordmath{float}{if less than}{\pgfplots@current@point@meta}{\pgfplotsplothandlercontour@lastcontour}{%
+ \def\pgfplotsplothandlercontour@sequence@sort@cmp{-}%
+ }{%
+ % undecided - the contours have the same label.
+ }%
+ }%
+ \else
+ \if +\pgfplotsplothandlercontour@sequence@sort@cmp
+ \pgfplotscoordmath{float}{if less than}{\pgfplots@current@point@meta}{\pgfplotsplothandlercontour@lastcontour}{%
+ \pgfplotsplothandlercontour@filled@assert@is@sorted@fail{ASCENDING}%
+ }{%
+ }%
+ \else
+ \pgfplotscoordmath{float}{if less than}{\pgfplotsplothandlercontour@lastcontour}{\pgfplots@current@point@meta}{%
+ \pgfplotsplothandlercontour@filled@assert@is@sorted@fail{DESCENDING}%
+ }{%
+ }%
+ \fi
+ \fi
+ \fi
+}%
+\def\pgfplotsplothandlercontour@filled@assert@is@sorted@fail#1{%
+ \begingroup
+ \pgfplotscoordmath{float}{tostring}{\pgfplots@current@point@meta}%
+ \let\offending=\pgfmathresult
+ \pgfplotscoordmath{float}{tostring}{\pgfplotsplothandlercontour@lastcontour}%
+ \let\lastcontour=\pgfmathresult
+ \pgfplots@error{Sorry, filled contours implicitly assume that the contour levels are SORTED (in the given case, they appear to be sorted in #1 order). Please make sure your input data has sorted contour levels. The offending level is \offending; the previous contour level is \lastcontour}%
+ \endgroup
+}
+\def\pgfplotsplothandlercontour@preparenewcontourline{%
+ \if0\pgfplotsplothandlercontour@haspendingjump
+%\message{PREPARE NEW CONTOUR LEVEL (\pgfplots@current@point@meta).}%
+ % a completely new level has been
+ % started, not due to jumps inside of one level.
+ %
+ \let\pgfplotspointmetatransformed@lastcontour=\pgfplotspointmetatransformed
+ % thus, we need to compute 'mapped color':
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}%
+ \pgfsetstrokecolor{\pgfkeysvalueof{/pgfplots/contour/draw color}}%
+ \ifpgfplotsplothandlercontour@filled
+ \pgfplotsplothandlercontour@filled@assert@is@sorted{\pgfplotspointmetatransformed@lastcontour}%
+ \pgfsetfillcolor{\pgfkeysvalueof{/pgfplots/contour/fill color}}%
+ \fi
+ %
+ % furthermore, we need to handle the 'filled' style:
+ \ifpgfplotsplothandlercontour@filled
+ \pgfplotsapplistXlet\pgfplotsplothandlercontour@stored@lastcontourpath@=\pgfplotsplothandlercontour@stored@lastcontourpath
+ % flush:
+ \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@stored@lastcontourpath
+ %
+ % process it:
+ \ifx\pgfplotsplothandlercontour@stored@lastcontourpath@\pgfutil@empty
+ % oh. This here is the very first contour. Nothing to do!
+ \else
+ % ok. This here is the i'th contour level, i>0.
+ % Thus, we have the 'i-1'th contour stored.
+ % REPLICATE its path to fill the space between the (i-1)'th contour and the i'th one!
+ \let\pgf@plotstreamstart=\pgfplotsplothandlercontour@handler@start
+ \pgf@plotstreamstart
+ \pgfplotsplothandlercontour@stored@lastcontourpath@
+ \pgf@plotstreamend
+ \fi
+ \fi
+ \else
+%\message{PREPARE NEW CONTOUR for the already begun level \pgfplots@current@point@meta.}%
+ \ifpgfplotsplothandlercontour@filled
+ \pgfplotsapplistXpushback\pgf@plotstreamstart\to\pgfplotsplothandlercontour@stored@lastcontourpath
+ \fi
+ \fi
+ %
+ \let\pgfplotsplothandlercontour@lastcanvas=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@lastlastcanvas=\pgfutil@empty
+ \ifpgfplotsplothandlercontour@labels
+ \def\pgfplotsplothandlercontour@haslabel{0}%
+ %
+ % this here means that 20% of labeldist are already there.
+ % it moves the first label nearer to its start.
+ \pgf@xa=\pgfplotsplothandlercontour@labeldist\relax
+ \pgf@xa=0.2\pgf@xa
+ \edef\pgfplotsplothandlercontour@len{\the\pgf@xa}%
+ \fi
+ \def\pgfplotsplothandlercontour@haspendingjump{0}%
+ %
+ \pgfplotsplothandlercontour@handler@start
+ \let\pgfplotsplothandlercontour@handler@end=\pgf@plotstreamend
+ \let\pgfplotsplothandlercontour@handler@streampoint=\pgf@plotstreampoint
+}%
+\def\pgfplotsplothandlercontour@finishcontourline{%
+ \ifpgfplotsplothandlercontour@labels
+ \if0\pgfplotsplothandlercontour@haslabel
+ \ifx\pgfplotsplothandlercontour@lastlastcanvas\pgfutil@empty
+ \else
+ % force a label:
+%\message{FORCING A LABEL for contour \pgfplotsplothandlercontour@lastcontour\space from (\pgfplotsplothandlercontour@lastlastcanvas --\pgfplotsplothandlercontour@lastcanvas)}%
+ \edef\pgfplotsplothandlercontour@len{\pgfplotsplothandlercontour@labeldist}%
+ \pgfplotsplothandlercontour@handlesplinesegment
+ {\pgfplotsplothandlercontour@lastlastcanvas}
+ {\pgfplotsplothandlercontour@lastcanvas}%
+ {\pgfplotsplothandlercontour@lastcontour}%
+ \fi
+ \fi
+ \fi
+ \pgfplotsplothandlercontour@handler@end
+ %
+% \ifpgfplotsplothandlercontour@filled
+% \pgfpathclose % FIXME this is, in general, not good enough.
+% \fi
+ \if0\pgfplotsplothandlercontour@haspendingjump
+%\message{usepath{} to finalize level \pgfplotsplothandlercontour@lastcontour.}%
+ % flush paths if the complete contour level is ready.
+ % do *not* flush paths if we have just a new part of the
+ % existing contour level.
+ %
+ % This makes a difference for the filled contour.
+ \ifpgfplotsplothandlercontour@filled
+ \pgfusepath{fill,stroke}%
+ \else
+ \pgfusepath{stroke}%
+ \fi
+ \else
+%\message{usepath{} for level \pgfplotsplothandlercontour@lastcontour.}%
+ \ifpgfplotsplothandlercontour@filled
+ \pgfplotsapplistXpushback\pgf@plotstreamend\to\pgfplotsplothandlercontour@stored@lastcontourpath
+ \fi
+ \fi
+}%
+
+\def\pgfplotsplothandlercontour@init@limits{%
+ \def\pgfplotsplothandlercontour@processed@outer{0}%
+ \let\pgfplotsplothandlercontour@limits@low@meta=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@limits@low@x=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@limits@low@y=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@limits@low@z=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@limits@high@meta=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@limits@high@x=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@limits@high@y=\pgfutil@empty
+ \let\pgfplotsplothandlercontour@limits@high@z=\pgfutil@empty
+ %
+ \pgfkeysgetvalue{/pgfplots/contour/data limits}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplotsplothandlercontour@processed@outer{1}%
+ \else
+ \expandafter\pgfplotsplothandlercontour@init@limits@getboundingboxlow\pgfplots@loc@TMPa\pgfplots@EOI
+ \fi
+%\message{contour: I processed data limits to MIN = (\pgfplotsplothandlercontour@limits@low@x,\pgfplotsplothandlercontour@limits@low@y,\pgfplotsplothandlercontour@limits@low@z;\pgfplotsplothandlercontour@limits@low@meta) and MAX = (\pgfplotsplothandlercontour@limits@high@x,\pgfplotsplothandlercontour@limits@high@y,\pgfplotsplothandlercontour@limits@high@z;\pgfplotsplothandlercontour@limits@high@meta).}%
+}%
+\def\pgfplotsplothandlercontour@init@limits@getboundingboxlow(#1,#2,#3,#4){%
+ \def\pgfplotsplothandlercontour@init@limits@cur{low}%
+ \pgfplotsplothandlercontour@init@limits@read(#1,#2,#3,#4)%
+ \pgfutil@ifnextchar(%
+ \pgfplotsplothandlercontour@init@limits@getboundingboxhigh
+ {\pgfplots@error{Sorry, 'data limits=(xmin,ymin,zmin,contourmin) (xmax,ymax,zmax,contourmax)' has been expected, not \pgfkeysvalueof{/pgfplots/contour/data limits}}\pgfplots@gobble@until@EOI}%
+}%
+\def\pgfplotsplothandlercontour@init@limits@getboundingboxhigh(#1,#2,#3,#4){%
+ \def\pgfplotsplothandlercontour@init@limits@cur{high}%
+ \pgfplotsplothandlercontour@init@limits@read(#1,#2,#3,#4)%
+ \pgfutil@gobble
+}%
+\def\pgfplotsplothandlercontour@init@limits@read(#1,#2,#3,#4){%
+ % FIXME : logs and trafos and user interface!
+ \pgfplotscoordmath{x}{parsenumber}{#1}%
+ \pgfplotscoordmath{x}{datascaletrafo}\pgfmathresult
+ \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @x\endcsname=\pgfmathresult
+ %
+ \pgfplotscoordmath{y}{parsenumber}{#2}%
+ \pgfplotscoordmath{y}{datascaletrafo}\pgfmathresult
+ \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @y\endcsname=\pgfmathresult
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplotscoordmath{z}{parsenumber}{#3}%
+ \pgfplotscoordmath{z}{datascaletrafo}\pgfmathresult
+ \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @z\endcsname=\pgfmathresult
+ \fi
+ %
+ \pgfplotscoordmath{meta}{parsenumber}{#4}%
+ \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @meta\endcsname=\pgfmathresult
+}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% contour external implementation
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\pgfplotsplothandlercontourexternal{%
+ \pgfplotsresetplothandler
+ \def\pgfplotsplothandlername{contour external}%
+ %
+ \pgfplotsplothandlercontour@prepare@point@meta
+ %
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@contourexternal
+ \def\pgf@plotstreamstart{%
+ \pgfplotsplothandlercontourprepared
+ \pgf@plotstreamstart
+ }%
+}%
+\gdef\c@pgfplotsplothandlersurveystart@contourexternal@fileno{0}%
+\def\pgfplotsplothandlersurveystart@contourexternal{%
+ %
+ \pgfkeysgetvalue{/pgfplots/contour external/file}\pgfplotsplothandlercontourexternal@file
+ %
+ \ifx\pgfplotsplothandlercontourexternal@file\pgfutil@empty
+ \pgfutil@ifundefined{pgfactualjobname}{%
+ \let\pgfplots@loc@TMPa=\jobname
+ }{%
+ % be compatible with external lib:
+ \let\pgfplots@loc@TMPa=\pgfactualjobname
+ }%
+ \edef\pgfplotsplothandlercontourexternal@file{\pgfplots@loc@TMPa_contourtmp\c@pgfplotsplothandlersurveystart@contourexternal@fileno}%
+ \pgfplotsutil@advancestringcounter@global\c@pgfplotsplothandlersurveystart@contourexternal@fileno
+ \fi
+ %
+ \if0\pgfplotsplothandlercontourexternal@scanlinemode
+ \pgfplotsset{plot to file/scanline marks/false}%
+ \else
+ \pgfplotsset{plot to file/scanline marks/if in input}% the choice 'always' is unaware of existing end-of-scanline marks
+ \fi
+ \pgfplotsplothandlertofile{\pgfplotsplothandlercontourexternal@file.dat}%
+ \pgfplotsplothandlersurveystart
+ \let\pgfplotsplothandlersurveypoint@tofile=\pgfplotsplothandlersurveypoint
+ \let\pgfplotsplothandlersurveyend@tofile=\pgfplotsplothandlersurveyend
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@contourexternal
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@contourexternal
+ %
+ \pgfplotsplothandlersurveypoint@contour@prepare@axes x%
+ \pgfplotsplothandlersurveypoint@contour@prepare@axes y%
+ \pgfplotsplothandlersurveypoint@contour@prepare@axes z%
+}%
+
+% #1: either x, y, or z
+% POSTCONDITION:
+% The following three macros are defined:
+% \pgfplotsplothandlersurveypoint@contour@set@axes@x
+% \pgfplotsplothandlersurveypoint@contour@set@axes@y
+% \pgfplotsplothandlersurveypoint@contour@set@axes@z
+% they take no arguments and assign their result to \pgfmathresult.
+\def\pgfplotsplothandlersurveypoint@contour@prepare@axes#1{%
+ \expandafter\edef\csname pgfplotsplothandlersurveypoint@contour@set@axes@#1\endcsname{%
+ \noexpand\let\noexpand\pgfmathresult=\expandafter\noexpand\csname pgfplots@current@point@\csname pgfplotsplothandlercontour@axis@#1\endcsname\endcsname
+ }%
+ \expandafter\edef\csname pgfplotsplothandlersurveypoint@contour@set@axes@@#1\endcsname{%
+ \noexpand\let\noexpand\pgfmathresult=\expandafter\noexpand\csname pgfplots@current@point@\csname pgfplotsplothandlercontour@axis@inv@#1\endcsname\endcsname
+ }%
+ %
+%\message{axes #1: STD -> \expandafter\meaning\csname pgfplotsplothandlersurveypoint@contour@set@axes@#1\endcsname^^J}%
+%\message{axes #1: INV -> \expandafter\meaning\csname pgfplotsplothandlersurveypoint@contour@set@axes@@#1\endcsname^^J}%
+}
+
+\def\pgfplotsplothandlersurveypoint@contour@axes@reordered@to@std{%
+ \pgfplotsplothandlersurveypoint@contour@set@axes@@x
+ \let\pgfplotsplothandlersurveypoint@contour@set@axes@x@=\pgfmathresult
+ %
+ \pgfplotsplothandlersurveypoint@contour@set@axes@@y
+ \let\pgfplotsplothandlersurveypoint@contour@set@axes@y@=\pgfmathresult
+ %
+ \pgfplotsplothandlersurveypoint@contour@set@axes@@z
+ \let\pgfplotsplothandlersurveypoint@contour@set@axes@z@=\pgfmathresult
+ %
+ \let\pgfplots@current@point@x=\pgfplotsplothandlersurveypoint@contour@set@axes@x@
+ \let\pgfplots@current@point@y=\pgfplotsplothandlersurveypoint@contour@set@axes@y@
+ \let\pgfplots@current@point@z=\pgfplotsplothandlersurveypoint@contour@set@axes@z@
+}%
+\def\pgfplotsplothandlersurveypoint@contour@axes@std@to@reordered{%
+ \pgfplotsplothandlersurveypoint@contour@set@axes@x
+ \let\pgfplotsplothandlersurveypoint@contour@set@axes@x@=\pgfmathresult
+ %
+ \pgfplotsplothandlersurveypoint@contour@set@axes@y
+ \let\pgfplotsplothandlersurveypoint@contour@set@axes@y@=\pgfmathresult
+ %
+ \pgfplotsplothandlersurveypoint@contour@set@axes@z
+ \let\pgfplotsplothandlersurveypoint@contour@set@axes@z@=\pgfmathresult
+ %
+ \let\pgfplots@current@point@x=\pgfplotsplothandlersurveypoint@contour@set@axes@x@
+ \let\pgfplots@current@point@y=\pgfplotsplothandlersurveypoint@contour@set@axes@y@
+ \let\pgfplots@current@point@z=\pgfplotsplothandlersurveypoint@contour@set@axes@z@
+}%
+
+\def\pgfplotsplothandlersurveypoint@contourexternal{%
+ % temporarily disable updates to point meta limits. They should be
+ % updated during the contour prepared processing.
+ \let\pgfplotsplothandlercontourexternal@orig@perpointlimits@limits=\pgfplots@set@perpointmeta@limits
+ \let\pgfplots@set@perpointmeta@limits=\relax
+ %
+ \pgfplotsaxissurveysetpointmeta
+ \let\pgfplots@current@point@z=\pgfplots@current@point@meta
+ %
+ \let\pgfplots@set@perpointmeta@limits=\pgfplotsplothandlercontourexternal@orig@perpointlimits@limits
+ %
+ \pgfplotsplothandlersurveypoint@contour@axes@std@to@reordered
+ %
+%\message{contour gnuplot: collecting point (\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z) [\pgfplots@current@point@meta]...}%
+ \pgfplotsplothandlersurveypoint@tofile
+}%
+
+{
+\catcode`\`=12
+\catcode`\'=12
+\catcode`\"=12
+\catcode`\|=12
+\catcode`\;=12
+\catcode`\:=12
+\catcode`\#=12
+\gdef\pgfplotsplothandlersurveyend@contourexternal{%
+ \pgfplotsplothandlersurveyend@tofile
+ \if2\pgfplotsplothandlercontourexternal@scanlinemode
+ \if0\pgfplotsplothandlertofilegeneratedscanlinemarks
+ \pgfplots@error{Sorry, processing the input stream did not lead to end-of-scanline markers; the generated temporary file for 'contour external' does not contain any of them (indicating that matrix structure is lost). To fix this, you have the following options:^^J - Insert end-of-scanline markers into your input data (i.e. empty lines),^^J - provide two of the three options 'mesh/rows=<num matrix rows>, mesh/cols=<num matrix cols>, mesh/num points=<total number points>'}%
+ \fi
+ \fi
+ %
+ \begingroup
+ \let\numcoords=\pgfplots@current@point@coordindex%
+ \pgfplotsautocompletemeshkeys
+ \def\"{"}%
+ \def\|{|}%
+ \def\;{;}%
+ \def\:{:}%
+ \def\#{#}%
+ \def\'{'}%
+ \def\`{`}%
+ \edef\ordering{\pgfplots@plot@mesh@ordering}%
+ \edef\infile{\pgfplotsplothandlercontourexternal@file.dat}%
+ \edef\outfile{\pgfplotsplothandlercontourexternal@file.table}%
+ \edef\script{\pgfplotsplothandlercontourexternal@file.\pgfkeysvalueof{/pgfplots/contour external/script extension}}%
+ \edef\thecontourlevels{\pgfkeysvalueof{/pgfplots/contour/levels}}%
+ \edef\thecontournumber{\pgfkeysvalueof{/pgfplots/contour/number}}%
+ \immediate\openout\w@pgf@writea=\script
+ \immediate\write\w@pgf@writea{\pgfkeysvalueof{/pgfplots/contour external/script}}%
+ \immediate\closeout\w@pgf@writea
+ %
+ \pgfplots@shellescape{\pgfkeysvalueof{/pgfplots/contour external/cmd}}%
+ \endgroup
+ %
+ %
+ \pgfplotsplothandlercontourprepared
+ % the PREPARE steps in the coord stream start/end have already
+ % been done. we only need to init the plot handler survey
+ % start/end:
+ \def\pgfplots@coord@stream@start{\pgfplotsplothandlersurveystart}%
+ \def\pgfplots@coord@stream@end{\pgfplotsplothandlersurveyend}%
+ \pgfkeysgetvalue{/pgfplots/contour external/output point meta}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \ifpgfplots@curplot@threedim
+ \pgfplotssetpointmetainput{z}{}%
+ \else
+ \pgfplotssetpointmetainput{explicit}{}%
+ \fi
+ \else
+ \expandafter\pgfplots@pgfkeys@set@point@meta@value\expandafter{\pgfplots@loc@TMPa}%
+ \fi
+ \pgfplots@addplotimpl@file@streamit{\pgfplotsplothandlercontourexternal@file.table}%
+ \closein\r@pgfplots@reada
+}%
+}
+
+
+
+
+
+% the `plot unprocessed to file' plot handler simply copies the input data
+% UNPROCESSED to an output file.
+%
+% I use it as helper tool for `contour gnuplot'.
+%
+% this cannot be combined with other plot handlers unless the other
+% plot handlers controls that explicitly
+%
+% Immediately after the survey ends, this plot handler will set
+% \pgfplotsplothandlertofilegeneratedscanlinemarks to '1' or '0'.
+\pgfplotsset{
+ plot unprocessed to file/.code={
+ \edef\tikz@plot@handler{\noexpand\pgfplotsplothandlertofile{#1}}%
+ },
+ plot to file/scanline marks/.is choice,
+ plot to file/scanline marks/false/.code={\def\pgfplotsplothandlertofile@scanlinemarks{0}},
+ plot to file/scanline marks/if in input/.code={\def\pgfplotsplothandlertofile@scanlinemarks{1}},
+ plot to file/scanline marks/always/.code={\def\pgfplotsplothandlertofile@scanlinemarks{2}},
+ plot to file/scanline marks/true/.code={\def\pgfplotsplothandlertofile@scanlinemarks{2}},
+ plot to file/scanline marks/if in input,
+ plot to file/col sep/.initial=\pgfplots@SPACE,
+ plot to file/end-of-scanline content/.initial=,
+}
+
+\def\pgfplotsplothandlertofile#1{%
+ \edef\pgfplotsplothandlertofile@name{#1}%
+ \pgfplotsresetplothandler
+ \pgfplotsset{empty line=scanline}%
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@tofile
+ \def\pgfplotsplothandlername{plot to file}%
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@tofile
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@tofile
+ \let\pgfplotsplothandlernotifyscanlinecomplete=\pgfplotsplothandlernotifyscanlinecomplete@tofile
+ %
+ \if1\pgfplotsplothandlertofile@scanlinemarks
+ % plot to file/scanline marks=if in input
+ % check if we have mesh input:
+ \def\pgfplots@loc@TMP@has@mesh@information{0}%
+ \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplots@loc@TMPa
+ \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplots@loc@TMPb
+ \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplots@loc@TMPc
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \else
+ % has rows and num points:
+ \def\pgfplots@loc@TMP@has@mesh@information{1}%
+ \fi
+ \else
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \else
+ % has cols and num points:
+ \def\pgfplots@loc@TMP@has@mesh@information{1}%
+ \fi
+ \else
+ % has rows,cols:
+ \def\pgfplots@loc@TMP@has@mesh@information{1}%
+ \fi
+ \fi
+ \if1\pgfplots@loc@TMP@has@mesh@information
+ % activate 'plot to file/scanline marks=always
+ % --> we have the required information!
+ \def\pgfplotsplothandlertofile@scanlinemarks{2}%
+ \fi
+ \fi
+ % NO \else here!
+ \if2\pgfplotsplothandlertofile@scanlinemarks
+ % plot to file/scanline marks=always
+ \pgfplotsautocompletemeshkeys%
+ \def\c@pgfplotsplothandlertofile@scanlinelength{0}%
+ \if\pgfplots@plot@mesh@ordering0%
+ % ordering = x varies= rowwise -> scanline is cols!
+ \pgfkeysgetvalue{/pgfplots/mesh/cols}\c@pgfplotsplothandlertofile@expectedscanline
+ \else
+ % ordering = y varies = colwise: scanline is rows!
+ \pgfkeysgetvalue{/pgfplots/mesh/rows}\c@pgfplotsplothandlertofile@expectedscanline
+ \fi
+ \fi
+ \pgfplotsplothandlertofile@scanlinependingfalse
+ \pgfkeysgetvalue{/pgfplots/plot to file/col sep}\pgfplotsplothandlertofile@colsep
+ \pgfkeysgetvalue{/pgfplots/plot to file/end-of-scanline content}\pgfplotsplothandlertofile@scanlinemark
+ %
+ %
+ \def\pgfplotsplothandlertofilegeneratedscanlinemarks{0}%
+}%
+\def\pgfplotsplothandlertofile@scanlinemarks@check{%
+ \if2\pgfplotsplothandlertofile@scanlinemarks
+ % plot to file/scanline marks=always
+ \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlertofile@scanlinelength
+ \ifnum\c@pgfplotsplothandlertofile@scanlinelength=\c@pgfplotsplothandlertofile@expectedscanline
+ \def\c@pgfplotsplothandlertofile@scanlinelength{0}%
+ \pgfplotsplothandlernotifyscanlinecomplete@tofile
+ \fi
+ \fi
+}%
+\newif\ifpgfplotsplothandlertofile@scanlinepending
+\def\pgfplotsplothandlernotifyscanlinecomplete@tofile{%
+ \if0\pgfplotsplothandlertofile@scanlinemarks
+ \else
+ \pgfplotsplothandlertofile@scanlinependingtrue
+ \fi
+}%
+\def\pgfplotsplothandlersurveypoint@tofile{%
+ \ifpgfplotsplothandlertofile@scanlinepending
+ \def\pgfplotsplothandlertofilegeneratedscanlinemarks{1}%
+ \immediate\write\w@pgf@writea{\pgfplotsplothandlertofile@scanlinemark}% end-of-scanline
+ \pgfplotsplothandlertofile@scanlinependingfalse
+ \fi
+ \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x}%
+ \pgfplotscoordmath{x}{tostring}{\pgfmathresult}%
+ \let\pgfplots@current@point@x=\pgfmathresult
+ %
+ \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y}%
+ \pgfplotscoordmath{y}{tostring}{\pgfmathresult}%
+ \let\pgfplots@current@point@y=\pgfmathresult
+ %
+ \ifpgfplots@curplot@threedim
+ \pgfplotscoordmath{z}{parsenumber}{\pgfplots@current@point@z}%
+ \pgfplotscoordmath{z}{tostring}{\pgfmathresult}%
+ \let\pgfplots@current@point@z=\pgfmathresult
+ \fi
+ %
+ \pgfplotsaxissurveysetpointmeta
+ \pgfplotsaxisifhaspointmeta{%
+ \pgfplotscoordmath{meta}{tostring}{\pgfplots@current@point@meta}%
+ \let\pgfplots@current@point@meta=\pgfmathresult
+ }{}%
+ %
+ \immediate\write\w@pgf@writea{%
+ \pgfplots@current@point@x\pgfplotsplothandlertofile@colsep
+ \pgfplots@current@point@y\pgfplotsplothandlertofile@colsep
+ \ifpgfplots@curplot@threedim\pgfplots@current@point@z\pgfplotsplothandlertofile@colsep\fi
+ \pgfplots@current@point@meta
+ }%
+ \advance\c@pgfplots@coordindex by1
+ \pgfplotsplothandlertofile@scanlinemarks@check
+}%
+\def\pgfplotsplothandlersurveyend@tofile{%
+ \immediate\closeout\w@pgf@writea
+}%
+\def\pgfplotsplothandlersurveystart@tofile{%
+ \immediate\openout\w@pgf@writea=\pgfplotsplothandlertofile@name\relax
+}%
+
+
+\input pgfplotsmeshplothandler.code.tex
+%
+%--------------------------------------------
+
+
+% Implementation of 'contour filled': it is actually just a small
+% wrapper around 'surf,shader=interp,colormap access=const' -- with
+% dedicated color map definitions.
+\def\pgfplotsplothandlercontourfilled{%
+ \pgfplotsplothandlermesh
+ \let\pgfplotsplothandlersurveyend@contourfilled@orig=\pgfplotsplothandlersurveyend
+ \def\pgfplotsplothandlersurveyend{%
+ \pgfplotsplothandlersurveyend@contourfilled@orig
+ \pgfplotsplothandlersurveyend@contourfilled
+ }%
+}%
+
+\def\pgfplotscontourfilledcolormap{internal:contourfilled}
+\pgfplotscreatecolormap{\pgfplotscontourfilledcolormap}{color=(black) color=(black)}
+
+\def\pgfplotsplothandlersurveyend@contourfilled{%
+ \pgfplotsplothandlersurveyaddoptions{
+ % ensure that the point meta of the contour makes its way into
+ % the colorbar and the associated color mapping.
+ %
+ % FIXME: that fails if there are more than one contours in the
+ % same axis (or someone else uses 'colorbar source')
+ colorbar source,%
+ %
+ % ensure that other plots to not "corrupt" our mapping:
+ point meta rel=per plot,%
+ }%
+ \def\pgfplots@contour@cm@options{%
+ colorbar style={%
+ /pgfplots/colormap access=const,
+ },%
+ }%
+ %
+ \pgfkeysgetvalue{/pgfplots/contour/levels}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % no levels.
+ % Ok, check the other keys in the order of precedence:
+ \pgfkeysgetvalue{/pgfplots/contour/levels from colormap}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % no 'levels from colormap'.
+ % Ok, check the other keys in the order of precedence:
+ \pgfkeysgetvalue{/pgfplots/contour/number}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % not sure if this is a use-case...
+ \pgfplots@log3{contour plot: skipping definition of suitable colormap (none of 'number', levels', 'levels from colormap' is set)}%
+ \t@pgfplots@toka=\expandafter{\pgfplots@contour@cm@options}%
+ \edef\pgfplots@contour@cm@options{%
+ \the\t@pgfplots@toka%
+ % just copy the current colormap to ensure that it
+ % has the correct name:
+ colormap={\pgfplotscontourfilledcolormap}{of colormap={}},%
+ }%
+ \else
+ % Ah -- we have a number of samples!
+ \t@pgfplots@toka=\expandafter{\pgfplots@contour@cm@options}%
+ \edef\pgfplots@contour@cm@options{%
+ \the\t@pgfplots@toka%
+ colormap={\pgfplotscontourfilledcolormap}{samples of colormap={\pgfplots@loc@TMPa}},%
+ }%
+ \fi
+ \else
+ % Ah - we want to take levels from a colormap definition!
+ % We only need to ensure that the colormap definition fits
+ % into the range [metamin:metamax]. Do that here:
+ \t@pgfplots@toka=\expandafter{\pgfplots@contour@cm@options}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}%
+ \edef\pgfplots@contour@cm@options{%
+ \the\t@pgfplots@toka%
+ /utils/exec={%
+ \noexpand\edef\noexpand\pgfplots@targetpos@restore{%
+ of colormap/target pos min=\pgfkeysvalueof{/pgfplots/of colormap/target pos min},%
+ of colormap/target pos max=\pgfkeysvalueof{/pgfplots/of colormap/target pos max},%
+ of colormap/target pos min/insert=\ifpgfplots@createcolormap@target@pos@includes@limits@min true\else false\fi,%
+ of colormap/target pos max/insert=\ifpgfplots@createcolormap@target@pos@includes@limits@max true\else false\fi,%
+ \if c\pgfplots@ofcolorbar@sample@for@choice
+ of colormap/sample for=const,%
+ \else
+ of colormap/sample for=default,%
+ \fi
+ }%
+ },%
+ of colormap/target pos min*=\pgfplots@metamin,%
+ of colormap/target pos max*=\pgfplots@metamax,%
+ of colormap/sample for=const,%
+ colormap={\pgfplotscontourfilledcolormap}{%
+ \the\t@pgfplots@tokb
+ },%
+ /utils/exec={%
+ \noexpand\expandafter
+ \noexpand\pgfkeysalso
+ \noexpand\expandafter{\noexpand\pgfplots@targetpos@restore}%
+ },%
+ }%
+ \fi
+ \else
+ % Ah - we have a list of positions for the contours!
+ \t@pgfplots@toka=\expandafter{\pgfplots@contour@cm@options}%
+ \edef\pgfplots@contour@cm@options{%
+ \the\t@pgfplots@toka%
+ colormap={\pgfplotscontourfilledcolormap}{%
+ of colormap={%
+ target pos min*=\pgfplots@metamin,
+ target pos max*=\pgfplots@metamax,
+ sample for=const,%
+ target pos={\pgfplots@loc@TMPa},
+ }%
+ },%
+ }%
+ \fi
+ %
+ \ifx\pgfplots@contour@cm@options\pgfutil@empty
+ \else
+ % move to "late options" such that we carry them outside of
+ % any \begingroup...\endgroup constructions:
+ \expandafter\pgfplotssetlateoptions\expandafter{\pgfplots@contour@cm@options}%
+%\message{contour filled: assembled options \meaning\pgfplots@contour@cm@options^^J}%
+ \fi
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsstackedplots.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsstackedplots.code.tex
new file mode 100644
index 0000000000..7f45bfb5be
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsstackedplots.code.tex
@@ -0,0 +1,688 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007-2013 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+%
+% This file contains the implementation for stacked plots.
+%
+% Stacked plots always keep record of the last plotted coordinates.
+% Any new plot will be ADDED on top of the last plotted coordinates.
+%
+% Terminology: "last plotted coordinates" are called "zero levels"
+% because they actually work like shifts.
+%
+% Programming Structure:
+%
+% 1. We keep TWO lists of coordinates: a list of CURRENT zero level
+% coordinates and a list of NEXT zero level coordinates.
+%
+% The first one will be queried whenever a zero level coordinate is
+% requested.
+%
+% The second one will be used to form zero levels for the next plot.
+%
+% 2. At the beginning and end of the survey phase of each plot, the lists in 1.) are
+% initialised properly.
+%
+% 3.1 While plot coordinates are processed during the survey phase, the following methods
+% interact with the stacked API:
+% \pgfplots@stacked@preparepoint@inmacro
+% -> compute the 'stacked' sum.
+% This may need to be done with floating point arithmetics because
+% the data scaling trafo is not yet initialised
+% \pgfplots@stacked@rememberzerolevelpoint@for@next@plot
+% \pgfplots@stacked@getnextzerolevelpoint
+%
+%
+% 3.2 during the final visualization phase, we have
+% \pgfplots@stacked@visphasepreparedatapoint
+% -> takes coordinates as they will be given to Tikz. This method is
+% used to
+% - communicate zero level coordinates to Tikz
+% - implement the 'closed paths' option (allows filled stacked plots).
+%
+% 4. Zero levels are communicated to Tikz by
+% \pgfplots@stacked@initzerolevelhandler. This routine initialises an
+% input stream for Tikz plot handlers which produces a sequence of
+% zero levels. It is used by [xy]comb and [xy]bar.
+%
+%
+
+\let\pgfplots@stacked@zerolevelpoint@x=\pgfutil@empty
+\let\pgfplots@stacked@zerolevelpoint@y=\pgfutil@empty
+
+% this value is populated during the survey phase. It will be copied
+% to the visualization phase, i.e. it will be serialized along with
+% the survey'ed state:
+\newif\ifpgfplots@stacked@isfirstplot
+\newif\ifpgfplots@stacked@isinitialised
+
+% Pre-initialisation.
+% Needs to be called before the first call to
+% \pgfplots@stacked@beginplot.
+\def\pgfplots@stacked@initialise{%
+ \gdef\pgfplots@stacked@coordcount{-1}%
+ \pgfplots@stacked@isfirstplottrue
+ \pgfplots@stacked@isinitialisedtrue
+}%
+
+% Cleanup method. Truncates any global variables to reduce string
+% space.
+\def\pgfplots@stacked@finalize{%
+ \global\pgfplotslistnewempty\pgfplots@stacked@zerolevellist
+ \global\pgfplotslistnewempty\pgfplots@stacked@zerolevellist@neg
+ \global\pgfplotslistnewempty\pgfplots@stacked@nextzerolevellist@pos
+ \global\pgfplotslistnewempty\pgfplots@stacked@nextzerolevellist@neg
+ \pgfplots@stacked@isinitialisedfalse
+}%
+
+% (Re)defines the macro \pgfplots@stacked@getnextzerolevelpoint
+% at the beginning of each plot.
+%
+% The macro \pgfplots@stacked@getnextzerolevelpoint fills
+% \pgfplots@stacked@zerolevelpoint@[xy].
+%
+% ATTENTION: call \pgfplots@stacked@initialise before the first call
+% of beginplot!
+%
+% ATTENTION: install this before 'visualization depends on' - it
+% modifies \pgfplotsaxisserializedatapoint@private
+\def\pgfplots@stacked@beginplot{%
+%\message{pgfplots@stacked@beginplot: PLOT STARTED.}%
+ \ifpgfplots@stacked@isinitialised
+ \else
+ \pgfplots@error{LOGIC ERROR: please call \string\pgfplots@stacked@initialise.}%
+ \fi
+ \def\pgfplots@stacked@zerolevel@current{}%
+ \def\pgfplots@stacked@zerolevel@current@pos{}%
+ \def\pgfplots@stacked@zerolevel@current@neg{}%
+ \pgfplots@stacked@prepare@value@serialization
+ % accumulate this command here for \closedcycle:
+ \ifpgfplots@stacked@isfirstplot
+ \global\pgfplotslistnewempty\pgfplots@stacked@zerolevellist
+ \global\pgfplotslistnewempty\pgfplots@stacked@zerolevellist@neg
+ % only work with float if its really necessary - for
+ % example if the scaling trafo which maps to pgfmath is
+ % not yet initialised.
+ \pgfplots@stacked@zerolevel@fallback x%
+ \pgfplots@stacked@zerolevel@fallback y%
+ \pgfplots@stacked@zerolevel@fallback z%
+ %
+ \def\pgfplots@stacked@getnextzerolevelpoint{%
+ % keep \pgfplots@stacked@zerolevel@current = {}
+ % there is special handling in place which will use the
+ % '0' level in this case
+ %
+ % omit this:
+ %\pgfplots@stacked@ensure{}%
+ %\let\pgfplots@stacked@zerolevel@current=\pgfplotsretval
+ }%
+ \else
+ {\globaldefs=1
+ \pgfplotslistcopy\pgfplots@stacked@nextzerolevellist@pos\to\pgfplots@stacked@zerolevellist
+ \pgfplotslistcopy\pgfplots@stacked@nextzerolevellist@neg\to\pgfplots@stacked@zerolevellist@neg
+ }%
+ \def\pgfplots@stacked@getnextzerolevelpoint{%
+ %
+ \pgfplots@stacked@getnextzerolevelpoint@pos
+ %
+ \if P\pgfplots@stacked@negative@mode
+ % stack negative=on previous:
+ % just use one list in order to remember the
+ % zerolevel:
+ \expandafter\pgfplots@stacked@parsezerolevelpoint\expandafter{\pgfplots@stacked@zerolevel@current@pos}%
+ \else
+ % stack negative=separate:
+ % use two levels, one for '+' and one for '-':
+ \pgfplots@stacked@getnextzerolevelpoint@neg
+ %
+ \if+\pgfplots@stacked@sign
+ \expandafter\pgfplots@stacked@parsezerolevelpoint\expandafter{\pgfplots@stacked@zerolevel@current@pos}%
+ \else
+ \expandafter\pgfplots@stacked@parsezerolevelpoint\expandafter{\pgfplots@stacked@zerolevel@current@neg}%
+ \fi
+ \fi
+ }%
+ \fi
+ \global\pgfplotslistnewempty\pgfplots@stacked@nextzerolevellist@pos
+ \global\pgfplotslistnewempty\pgfplots@stacked@nextzerolevellist@neg
+}%
+
+\def\pgfplots@stacked@getnextzerolevelpoint@pos{%
+ \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist
+ \ifpgfplotslistempty
+ \pgfplots@stacked@wrong@count@error
+ \else
+ {\globaldefs=1
+ \pgfplotslistpopfront\pgfplots@stacked@zerolevellist\to\pgfplots@stacked@zerolevel@current@pos
+ }%
+ \fi
+}%
+\def\pgfplots@stacked@getnextzerolevelpoint@neg{%
+ \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist@neg
+ \ifpgfplotslistempty
+ \pgfplots@stacked@wrong@count@error
+ \else
+ {\globaldefs=1
+ \pgfplotslistpopfront\pgfplots@stacked@zerolevellist@neg\to\pgfplots@stacked@zerolevel@current@neg
+ }%
+ \fi
+}
+
+\def\pgfplots@stacked@zerolevel@fallback#1{%
+ \pgfplots@stacked@zerolevel@fallback@{#1}%
+ \expandafter\let\csname pgfplots@stacked@zerolevelpoint@#1\endcsname=\pgfmathresult%
+}%
+\def\pgfplots@stacked@zerolevel@fallback@#1{%
+ \ifpgfplots@datascaletrafo@initialised % FIXME : should be '!ifsurvey'
+ \def\pgfmathresult{0}%
+ \else
+ % note that log plots are special: their "stacked zero" is
+ % computed with \pgfplotscoordmath{default}
+ %
+ \pgfplots@if{pgfplots@#1islinear}{\pgfplotscoordmath{#1}{zero}}{\pgfplotscoordmath{default}{zero}}%
+ \fi
+}%
+
+% ATTENTION: install this before 'visualization depends on' - it
+% modifies \pgfplotsaxisserializedatapoint@private
+\def\pgfplots@stacked@visphase@beginplot{%
+%\message{pgfplots@stacked@beginplot: VISUALIZATION OF PLOT STARTED (phase = \pgfplots@visphase@name).^^J}%
+ \let\pgfplots@stacked@closedcycle@impl=\pgfutil@empty
+ \pgfplots@stacked@prepare@value@serialization
+}%
+
+\def\pgfplots@stacked@prepare@value@serialization{%
+ % This here is SIMILAR to 'visualization depends on'.
+ %
+ % The only difference is that 'visualization depends on' expands
+ % its arguments whereas this one here does not.
+ %
+ \pgfplotsset{%
+ visualization depends on=value \pgfplots@stacked@diff\as\pgfplots@stacked@diff
+ }%
+ %
+ %
+ % Modify the axis private parts such that a data point is
+ % serialized to the form
+ % {Z{<stacked zerolevel value>}{<point meta>};<x coordinate>,<y coordinate>,<z coordinate>}
+ %
+ % for example, a 2d data pont (0,1) without point meta is serialized to
+ % {Z{}{};0Y0.0e0],1Y1.0e0],}
+ %
+ % The deserialization looks for the magic token 'Z'. The next
+ % parameter is the zero level of the data point, the following one
+ % the "old" private serialization stuff (typically just point
+ % meta).
+ %
+ % Note that the zero level of a data point might have its own zero
+ % level (grand father) ... this would be part here as well, even
+ % if it is useless (?). This causes recursive references to all
+ % zero levels... and more memory for stacked plots.
+ %
+ % The zero'th level has an empty zero level point.
+ \expandafter\def\expandafter\pgfplotsaxisserializedatapoint@private\expandafter{%
+ \pgfplotsaxisserializedatapoint@private
+ % at deserialization time, this will become \pgfplots@stacked@zerolevel :
+ \t@pgfplots@toka=\expandafter{\pgfplots@stacked@zerolevel@current}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretval}%
+ \edef\pgfplotsretval{%
+ Z{\the\t@pgfplots@toka}%
+ {\the\t@pgfplots@tokb}%
+ }%
+ }%
+ %
+ \pgfutil@ifundefined{pgfplotsaxisdeserializedatapointfrom@private@backup@}{}{%
+ \pgfplots@error{Illegal internal state encountered: the stacked plots serialization preparation has been invoked twice}%
+ }%
+ \let\pgfplotsaxisdeserializedatapointfrom@private@backup@=\pgfplotsaxisdeserializedatapointfrom@private
+ \def\pgfplotsaxisdeserializedatapointfrom@private##1{%
+ \pgfplotsaxisdeserializedatapointfrom@private@stacked@##1%
+ }%
+}%
+
+\def\pgfplotsaxisdeserializedatapointfrom@private@stacked@ Z#1#2{%
+ \def\pgfplots@stacked@zerolevel{#1}%
+ \pgfplotsaxisdeserializedatapointfrom@private@backup@{#2}%
+}%
+
+% #1: the result of \pgfplotsaxisserializedatapointtostring
+\def\pgfplots@stacked@parsezerolevelpoint#1{%
+ \begingroup
+ \pgfplotsaxisdeserializedatapointfrom#1% no braces here!
+% \pgfplotsplothandlerdeserializepointfrom{#1}%
+ \pgfplots@stacked@smuggle
+ \endgroup
+ % the value of \pgfplots@stacked@zerolevel@current will be configured as
+ % "visualization depends on".
+ % In other words: it is available later-on.
+ \def\pgfplots@stacked@zerolevel@current{#1}%
+}
+
+\def\pgfplots@stacked@smuggle\endgroup{%
+ \xdef\pgfplots@glob@TMPb{%
+ \noexpand\def\noexpand\pgfplots@stacked@zerolevelpoint@x{\pgfplots@current@point@x}%
+ \noexpand\def\noexpand\pgfplots@stacked@zerolevelpoint@y{\pgfplots@current@point@y}%
+ \noexpand\def\noexpand\pgfplots@stacked@zerolevelpoint@z{\pgfplots@current@point@z}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPb
+}%
+
+\def\pgfplots@stacked@wrong@count@error{%
+ \pgfplots@error{Sorry, pgfplots expects stacked plots to have exactly the same number of coordinates. Unfortunately, I encountered at plot with DIFFERENT NUMBERS OF COORDINATES. Please verify that 1. no point has been dropped by coordinate filters (for example log(0) or so) and 2. all plots have the same number of coordinates.}%
+}%
+
+\def\pgfplots@stacked@survey@endplot{%
+%\message{Stacked plot survey phase end: isfirst = \ifpgfplots@stacked@isfirstplot true \else false\fi^^J}%
+ \ifpgfplots@stacked@isfirstplot
+ \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist
+ \ifpgfplotslistempty
+ \else
+ \pgfplots@stacked@wrong@count@error
+ \fi
+ \if P\pgfplots@stacked@negative@mode
+ % stack negative=on previous:
+ \else
+ % stack negative=separate:
+ \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist@neg
+ \ifpgfplotslistempty
+ \else
+ \pgfplots@stacked@wrong@count@error
+ \fi
+ \fi
+ \fi
+ \ifpgfplots@stacked@isfirstplot
+ \def\pgfplots@stacked@serialized@commands{\noexpand\pgfplots@stacked@isfirstplottrue}%
+ \else
+ \def\pgfplots@stacked@serialized@commands{\noexpand\pgfplots@stacked@isfirstplotfalse}%
+ \fi
+ \global\pgfplots@stacked@isfirstplotfalse
+}%
+
+\def\pgfplots@stacked@visphase@endplot{%
+%\message{Stacked plot vis phase end: isfirst = \ifpgfplots@stacked@isfirstplot true \else false\fi^^J}%
+ \ifpgfplots@stacked@isfirstplot
+ \let\pgfplots@stacked@closedcycle@impl=\pgfplots@path@closed@cycle@std
+ \else
+ \t@pgfplots@tokc=\expandafter{\pgfplots@stacked@closedcycle@impl}%
+ \edef\pgfplots@stacked@closedcycle@impl{%
+ [mark=none,/utils/exec=\noexpand\pgfplots@try@mirror@plot@handler]
+ --plot coordinates{\the\t@pgfplots@tokc}
+ --cycle
+ }%
+ \fi
+ \global\pgfplots@stacked@isfirstplotfalse
+}%
+
+% WARNING: when this method is called, NEITHER
+% \ifpgfplots@stacked@isfirstplot NOR the zero level lists are
+% initialised!
+\def\pgfplots@stacked@initzerolevelhandler{%
+ \if\pgfplots@stacked@dir x
+ \pgfplotxzerolevelstream@@list
+ \pgfplotyzerolevelstreamconstant{\pgfplots@ZERO@y}%
+ \else
+ \pgfplotxzerolevelstreamconstant{\pgfplots@ZERO@x}%
+ \pgfplotyzerolevelstream@@list
+ \fi
+}%
+
+% Provides public access to zero levels into some key-value pairs.
+% Returns the values into a set of keys in the /data point/ prefix.
+%
+% The values can be used in 'axis cs'.
+\def\pgfplotspointgetzerolevelcoordinates{%
+ \pgfplotspointgetnormalizedzerolevelcoordinates
+ \pgfplotspointgetcoordinatesfromnormalized[path=/data point/zero]%
+ \pgfplotspointgetcoordinatesfromnormalized[path=/data point/diff]%
+}
+
+% Same as \pgfplotsgetzerolevelcoordinates, but the resulting values
+% are for use in 'normalized axis cs'.
+%
+% This works for both stacked plots and normal plots.
+\def\pgfplotspointgetnormalizedzerolevelcoordinates{%
+ \begingroup
+ \ifpgfplots@stackedmode
+ % STATE:
+ % * \pgfplots@stacked@diff is the diff of the CURRENT point.
+ % * \pgfplots@stacked@zerolevel is the ENTIRE point of the
+ % zerolevel (consisting of its recursive zerolevel, its own diff, and its x,y coords)
+ % -> we need both
+ \let\pgfplots@stacked@diff@cur=\pgfplots@stacked@diff
+ \ifx\pgfplots@stacked@zerolevel\pgfutil@empty
+ \pgfplotspointgetnormalizedcoordinates%
+ \pgfplotsutilforeachcommasep{x,y,z}\as\pgfplots@loc@TMPa{%
+ \pgfkeysgetvalue{/data point/\pgfplots@loc@TMPa}\pgfplots@loc@TMPb
+ \expandafter\let\csname pgfplots@current@point@\pgfplots@loc@TMPa\endcsname=\pgfplots@loc@TMPb
+ }%
+ \pgfplotscoordmath{\pgfplots@stacked@dir}{zero}%
+ \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname\pgfmathresult%
+ %
+ \let\pgfplots@current@point@meta=\pgfutil@empty
+ \pgfkeyssetvalue{/data point/zero/auto}{1}%
+ \else
+ %
+ \expandafter\pgfplotsaxisdeserializedatapointfrom\pgfplots@stacked@zerolevel%
+ \pgfkeyssetvalue{/data point/zero/auto}{0}%
+ \fi
+ %
+ \pgfplotscoordmath{x}{zero}\let\pgfplots@stacked@diff@x=\pgfmathresult%
+ \pgfplotscoordmath{y}{zero}\let\pgfplots@stacked@diff@y=\pgfmathresult%
+ \pgfplotscoordmath{z}{zero}\let\pgfplots@stacked@diff@z=\pgfmathresult%
+ \pgfutil@namelet{pgfplots@stacked@diff@\pgfplots@stacked@dir}{pgfplots@stacked@diff@cur}%
+ \else
+ % Ah - no stacked plot!? Well, than do "something useful":
+ % ... note that we have to use 'pgfbasic' here as that is the
+ % "transformed" format.
+ \pgfplotscoordmath{pgfbasic}{zero}\let\pgfplots@current@point@x=\pgfmathresult%
+ \pgfplotscoordmath{pgfbasic}{zero}\let\pgfplots@current@point@y=\pgfmathresult%
+ \pgfplotscoordmath{pgfbasic}{zero}\let\pgfplots@current@point@z=\pgfmathresult%
+ %
+ \pgfplotspointgetnormalizedcoordinates%
+ \pgfplotsutilforeachcommasep{x,y,z}\as\pgfplots@loc@TMPa{%
+ \pgfkeysgetvalue{/data point/\pgfplots@loc@TMPa}\pgfplots@loc@TMPb
+ \expandafter\let\csname pgfplots@stacked@diff@\pgfplots@loc@TMPa\endcsname=\pgfplots@loc@TMPb
+ }%
+ \pgfkeyssetvalue{/data point/zero/auto}{1}%
+ \fi
+ %
+ \xdef\pgfplots@glob@TMPd{%
+ \noexpand\pgfkeyssetvalue{/data point/zero/x}{\pgfplots@current@point@x}%
+ \noexpand\pgfkeyssetvalue{/data point/zero/y}{\pgfplots@current@point@y}%
+ \noexpand\pgfkeyssetvalue{/data point/zero/z}{\pgfplots@current@point@z}%
+ \noexpand\pgfkeyssetvalue{/data point/zero/meta}{\pgfplots@current@point@meta}%
+ \noexpand\pgfkeyssetvalue{/data point/zero/auto}{\pgfkeysvalueof{/data point/zero/auto}}%
+ \noexpand\pgfkeyssetvalue{/data point/diff/x}{\pgfplots@stacked@diff@x}%
+ \noexpand\pgfkeyssetvalue{/data point/diff/y}{\pgfplots@stacked@diff@y}%
+ \noexpand\pgfkeyssetvalue{/data point/diff/z}{\pgfplots@stacked@diff@z}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPd
+%
+%\message{pgfplotsgetzerolevelcoordinates returned x=\pgfkeysvalueof{/data point/zero/x}, y=\pgfkeysvalueof{/data point/zero/y}, diffx=\pgfkeysvalueof{/data point/diff/x}; diffy=\pgfkeysvalueof{/data point/diff/y}, diff=\pgfkeysvalueof{/data point/diff}^^J}%
+}%
+
+% PRECONDITION:
+% Is in invoked inside of a coord preparation routine, that means
+% - \pgfplots@current@point@[xyz]
+% - \ifpgfplots@curplot@threedim
+% are all set properly.
+%
+% POSTCONDITION:
+% - the zero level macro is set (for use in the visualizer)
+% - the closed cycle impl is updated
+% - the points as such are NOT touched
+\def\pgfplots@stacked@visphasepreparedatapoint{%
+ \ifx\pgfplots@stacked@zerolevel\pgfutil@empty
+ % this here is the case if we have the first encountered plot,
+ % i.e. the one on which others are stacked.
+ %
+ % Note that it is not necessarily the first one which is
+ % processed (compare reverse stacked plots).
+ \begingroup
+ % FIXME : eliminate this special handling by recording the
+ % correct '0' values during the survey phase!
+ \pgfutil@namelet{pgfplots@current@point@\pgfplots@stacked@dir}{pgfplots@logical@ZERO@\pgfplots@stacked@dir}%
+ \pgfplotsaxis@toPGF@coords
+ \if\pgfplots@stacked@dir x
+ \edef\pgfplots@stacked@PGF@zerolevel{\the\pgf@x}%
+ \else
+ \edef\pgfplots@stacked@PGF@zerolevel{\the\pgf@y}%
+ \fi
+ \pgfmath@smuggleone\pgfplots@stacked@PGF@zerolevel
+ \endgroup
+ %
+ \else
+ \begingroup
+ %\expandafter\pgfplotsplothandlerdeserializepointfrom\expandafter{\pgfplots@stacked@zerolevel}%
+ \expandafter\pgfplotsaxisdeserializedatapointfrom\pgfplots@stacked@zerolevel%
+ %
+ \pgfplots@stacked@logarithm@if@needed
+ %
+ % avoid endless recursion:
+ \let\pgfplots@stacked@visphasepreparedatapoint=\relax
+ \pgfplotsaxisvisphasegetpoint
+ \edef\pgfplots@current@point@x{\the\pgf@x}%
+ \edef\pgfplots@current@point@y{\the\pgf@y}%
+ % this here merely communicates
+ % \pgfplots@stacked@zerolevelpoint@x and @y outside of the
+ % group:
+ \pgfplots@stacked@smuggle
+ \endgroup
+ %
+ \if\pgfplots@stacked@dir x
+ \let\pgfplots@stacked@PGF@zerolevel=\pgfplots@stacked@zerolevelpoint@x%
+ \else
+ \let\pgfplots@stacked@PGF@zerolevel=\pgfplots@stacked@zerolevelpoint@y%
+ \fi
+ \t@pgfplots@toka=\expandafter{\pgfplots@stacked@closedcycle@impl}%
+ \edef\pgfplots@stacked@closedcycle@impl{%
+ (\pgfplots@stacked@zerolevelpoint@x,\pgfplots@stacked@zerolevelpoint@y)%
+ \the\t@pgfplots@toka}%
+ \fi
+}%
+
+% A special hook which is executed early in the visualization phase.
+% It will be invoked *before*
+% \pgfplots@stacked@visphasepreparedatapoint!
+%
+% Its purpose is to clear the data if necessary, i.e. it implements
+% /pgfplots/stacked ignores zero
+\def\pgfplots@stacked@visphase@stream@coord@{%
+ \ifpgfplots@stacked@ignores@zero
+ \edef\pgfplots@loc@TMPa{\pgfkeysvalueof{/pgfplots/stacked ignores zero/\pgfplots@visphase@name}}%
+ \def\pgfplots@loc@TMPb{true}%
+ % apply this feature only if it is active for the current
+ % visualization phase:
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \ifx\pgfplots@current@point@x\pgfutil@empty% this implements `unbounded coords=jump', for example
+ \else
+ \pgfplotscoordmath{\pgfplots@stacked@dir}{if is}{\pgfplots@stacked@diff}{0}{%
+ \let\pgfplots@current@point@x=\pgfutil@empty
+ \let\pgfplots@current@point@y=\pgfutil@empty
+ \let\pgfplots@current@point@z=\pgfutil@empty
+ }{%
+ }%
+ \fi
+ \fi
+ \fi
+}%
+
+% PRECONDITION:
+% Is in invoked inside of a coord preparation routine, that means
+% - \pgfplots@current@point@[xyz]
+% - \ifpgfplots@curplot@threedim
+% are all set properly.
+%
+% POSTCONDITION:
+% - \pgfplots@current@point@[xyz] are adjusted.
+\def\pgfplots@stacked@preparepoint@inmacro{%
+ \ifpgfplots@stacked@plus
+ \def\pgfplots@stacked@op{add}%
+ \else
+ \def\pgfplots@stacked@op{subtract}%
+ \fi
+ %
+ \pgfutil@namelet{pgfplots@stacked@diff}{pgfplots@current@point@\pgfplots@stacked@dir}%
+ %
+ \pgfmathfloatparsenumber{\pgfplots@stacked@diff}%
+ \expandafter\pgfmathfloatifflags\expandafter{\pgfmathresult}{2}{%
+ \def\pgfplots@stacked@sign{-}%
+ }{%
+ \def\pgfplots@stacked@sign{+}%
+ }%
+ \pgfplots@stacked@getnextzerolevelpoint
+ %
+ %
+ \pgfplots@if{pgfplots@\pgfplots@stacked@dir islinear}{%
+ \pgfplotscoordmath{\pgfplots@stacked@dir}{op}{\pgfplots@stacked@op}{%
+ {\csname pgfplots@stacked@zerolevelpoint@\pgfplots@stacked@dir\endcsname}%
+ {\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}}%
+ }{%
+ % LOG. we need to compute log(zerolevel + current):
+ % FIXME : this might work, but is is hackery - because the
+ % coordmath framework handles log bases in a very stupid way.
+ % improve it somehow!
+ \edef\pgfmathresult{\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}%
+ \pgfplotscoordmath{\pgfplots@stacked@dir}{exp}{\pgfmathresult}%
+ \pgfplotscoordmath{default}{parsenumber}{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{\pgfplots@stacked@op}{%
+ {\csname pgfplots@stacked@zerolevelpoint@\pgfplots@stacked@dir\endcsname}%
+ {\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}%
+ }%
+ }%
+ %
+ % for logs, I remember just zerolevel+current; not its log.
+ \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult
+ %
+ % this here would also be ok, but it would only store the coords
+ % of the zero level...
+ %\pgfplotsplothandlerserializepointto\pgfplotsretval
+ %
+ \begingroup
+ %
+ % without this line, the "zerolevel" would also know all its zero
+ % levels recursively:
+ \pgfplots@stacked@strip@parents@zerolevel
+ %
+ \pgfplotsaxisserializedatapointtostring
+ %
+%\message{Current value is '\pgfplots@stacked@sign'. Serializing: \meaning\pgfplotsretval^^J}%
+ \if P\pgfplots@stacked@negative@mode
+ % stack negative=on previous:
+ % just track one list
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotsretval}\to\pgfplots@stacked@nextzerolevellist@pos
+ \else
+ % stack negative=separate:
+ % keep track of both separate zerolevel lists:
+ \if+\pgfplots@stacked@sign
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotsretval}\to\pgfplots@stacked@nextzerolevellist@pos
+ %
+ \pgfplots@stacked@ensure\pgfplots@stacked@zerolevel@current@neg
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotsretval}\to\pgfplots@stacked@nextzerolevellist@neg
+ \else
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotsretval}\to\pgfplots@stacked@nextzerolevellist@neg
+ %
+ \pgfplots@stacked@ensure\pgfplots@stacked@zerolevel@current@pos
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotsretval}\to\pgfplots@stacked@nextzerolevellist@pos
+ \fi
+ \fi
+ %
+ \endgroup
+ %
+ %
+ %
+ \pgfplots@stacked@logarithm@if@needed
+}
+
+\def\pgfplots@stacked@ensure#1{%
+ \ifx#1\pgfutil@empty
+ \pgfplots@stacked@zerolevel@fallback@{\pgfplots@stacked@dir}%
+ \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult
+ \else
+ \expandafter\pgfplotsaxisdeserializedatapointfrom#1% no braces
+ \fi
+ \pgfplotsaxisserializedatapointtostring
+%\message{UNUSED value serialized as \meaning\pgfplotsretval^^J}%
+}%
+
+%
+% We store the normal values for zero levels. Consequently, we may
+% need to (re)apply the log if we have a log axis.
+%
+% I am unsure of whether log+stacked is useful at all.
+\def\pgfplots@stacked@logarithm@if@needed{%
+ \pgfplots@if{pgfplots@\pgfplots@stacked@dir islinear}{%
+ }{%
+ \pgfplotscoordmath{\pgfplots@stacked@dir}{log}{\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}%
+ \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult
+ }%
+}%
+
+% you can \let this here to \relax if you want to gain access to all
+% zero levels recursively:
+\def\pgfplots@stacked@strip@parents@zerolevel{%
+ \def\pgfplots@stacked@zerolevel@current{}%
+}
+
+% This here is a re-implementation of the stored plot processing.
+%
+% The idea is simple, although it requires quite some work:
+%
+% If we stack plots on top of each other, early drawing commands
+% (early plots) will be OVERDRAWN by later drawing commands (later
+% plots). This is especially unfortunate if we use filled bar plots
+% or comb plots.
+%
+% IDEA: draw plots in REVERSE order. The positioning, styles and
+% whatever must not be affected, only the sequence of drawing commands
+% shall change.
+%
+% So, this command here reverses the list.
+\def\pgfplots@stacked@finalize@stored@plots{%
+ \pgfplotslistnewempty\pgfplots@stored@plotlist@reversed
+ \begingroup
+ \pgfplotslistforeachungrouped\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{%
+ % Reverse sequence:
+ \expandafter\pgfplotslistpushfront\pgfplots@loc@TMPa\to\pgfplots@stored@plotlist@reversed
+ }%
+ % Now, overwrite the original list:
+ \global\let\pgfplots@stored@plotlist=\pgfplots@stored@plotlist@reversed
+ \global\let\pgfplots@stored@plotlist@reversed=\relax
+ \endgroup
+}%
+
+\def\pgfplots@stacked@path@closed@cycle{%
+ \pgfplots@stacked@closedcycle@impl
+}
+
+% PGF interfaces:
+%
+% these are relatively simple right now: assuming that the zero-level
+% streams are advanced if and only if the coordinate streams are
+% advanced, we can simply inject the *currect* zero level rather than
+% providing all at once.
+\def\pgfplotxzerolevelstream@@list{%
+ \def\pgf@plotxzerolevelstreamstart{%
+ \gdef\pgf@plotxzerolevelstreamnext{%
+ \global\pgf@x=\pgfplots@stacked@PGF@zerolevel\relax
+ }%
+ }%
+ \def\pgf@plotxzerolevelstreamend{%
+ }%
+}%
+
+\def\pgfplotyzerolevelstream@@list{%
+ \def\pgf@plotyzerolevelstreamstart{%
+ \gdef\pgf@plotyzerolevelstreamnext{%
+ \global\pgf@x=\pgfplots@stacked@PGF@zerolevel\relax
+ }%
+ }%
+ \def\pgf@plotyzerolevelstreamend{%
+ }%
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotssysgeneric.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotssysgeneric.code.tex
new file mode 100644
index 0000000000..155e05d9ae
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotssysgeneric.code.tex
@@ -0,0 +1,84 @@
+%--------------------------------------------
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% NOTE: tex4ht support is lousy. For example, \tikz \node {$10^{-6}$};
+% will already break -- because SVG does not support the html tag
+% &minus; produced by tex4ht (and TikZ apparently does not know how to
+% escape it somehow).
+\def\pgfplots@sys@beforenode{%
+ \pgfkeysifdefined{/tikz/tex4ht node/escape/.@cmd}{%
+ \ifpgfplots@has@cell@picture
+ \tikzset{tex4ht node/escape=true}%
+ \pgfplots@warning{ATTENTION: you may want to use '\string\pgfplotsset{cell picture=false}' in your preamble. Otherwise, tex4ht will produce TWO SVG files per plot.^^J}%
+ \fi
+ }{}%
+}%
+
+% see compat/show suggested version
+\newif\ifpgfplots@show@suggested@version
+\pgfplots@show@suggested@versiontrue
+
+\def\pgfplots@show@suggested@compat@value{%
+ \ifpgfplots@show@suggested@version
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/compat/current}\current
+ \pgfkeysgetvalue{/pgfplots/compat/mostrecent}\mostrecent
+ %
+ \def\b@isnewest{0}%
+ \def\b@shouldupgrade{0}%
+ \ifx\current\mostrecent
+ \def\b@isnewest{1}%
+ \else
+ \def\pgfplots@loc@TMPa{newest}%
+ \ifx\current\pgfplots@loc@TMPa
+ \def\b@isnewest{1}%
+ \else
+ \expandafter\pgfplotsutilifstringequal\expandafter{\current}{pre 1.3}{%
+ \def\b@shouldupgrade{1}%
+ }{}%
+ \expandafter\pgfplotsutilifstringequal\expandafter{\current}{default}{%
+ \def\b@shouldupgrade{1}%
+ }{}%
+ \fi
+ \fi
+ \if1\b@isnewest
+ \pgfplots@message{Package pgfplots notification 'compat/show suggested version=true': document has been generated with the most recent feature set (\string\pgfplotsset{compat=\mostrecent}).^^J}%
+ \else
+ \if1\b@shouldupgrade
+ \pgfplots@warning{running in backwards compatibility mode (unsuitable tick labels; missing features). Consider writing \string\pgfplotsset{compat=\mostrecent} into your preamble.^^J}%
+ \else
+ \pgfplots@message{Package pgfplots notification 'compat/show suggested version=true': you might benefit from \string\pgfplotsset{compat=\mostrecent} (current compat level: \current).^^J}%
+ \fi
+ \fi
+ \endgroup
+ \fi
+}
+
+\pgfutil@IfUndefined{AtBeginDocument}{%
+}{%
+ \AtBeginDocument{%
+ \pgfplots@show@suggested@compat@value
+ }%
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.code.tex
new file mode 100644
index 0000000000..4e33bacd63
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.code.tex
@@ -0,0 +1,3014 @@
+%--------------------------------------------
+%
+% Package pgfplotstable
+%
+% Provides support to read and work with abstract numeric tables of the
+% form
+%
+% COLUMN1 COLUMN2 COLUMN3
+% 1 2 3
+% 4 4 552
+% 1e124 0.00001 1.2345e-12
+% ...
+%
+% Copyright 2007-2010 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+
+% This file provides a high-level table manipulation and typesetting
+% package.
+%
+% see pgfplotstableshared.code.tex for the low level routines.
+
+
+\newif\ifpgfplotstabletypesetdebug
+\newif\ifpgfplotstable@sort
+\newif\ifpgfplotstabletypesetskipcoltypes
+\newif\ifpgfplotstabletypesetresult
+\newif\ifpgfplotstableuserow
+\newif\ifpgfplotstabletypeset@includeoutfiles
+\newif\ifpgfplotstabletypeset@force@remake
+\newif\ifpgfplotstable@disable@rowcolstyles
+
+\let\pgfplotstable@outfile=\w@pgf@writea
+
+\input pgfplotstable.coltype.code.tex
+
+% #1= floating point number
+% #2= TeX code to execute if #1 == 0
+% #3= TeX code to execute if #1 != 0
+\def\pgfplots@ifzero#1#2#3{%
+ \expandafter\pgfmathfloat@decompose@F#1\relax\pgfmathfloat@a@S
+ \ifnum\pgfmathfloat@a@S=0 #2\else#3\fi
+}%
+
+% just make sure no-one complaints if manual example are used without
+% booktabs loaded:
+\pgfutil@IfUndefined{toprule}{%
+ \def\toprule{\pgfplots@assert@LaTeX@package@loaded{booktabs}{\string\toprule}}%
+ \def\midrule{\pgfplots@assert@LaTeX@package@loaded{booktabs}{\string\midrule}}%
+ \def\bottomrule{\pgfplots@assert@LaTeX@package@loaded{booktabs}{\string\bottomrule}}%
+}{\relax}%
+
+% keys which are NOT predefined:
+% /pgfplots/table/alias/<col alias>/.initial={<real col>}
+% /pgfplots/table/columns/<col name>/.style={}
+% /pgfplots/table/display columns/<col index>/.style={}
+% /pgfplots/table/create on use/<col name>/.style={create options}
+\pgfkeys{%
+ /pgfplots/table/disable rowcol styles/.is if=pgfplotstable@disable@rowcolstyles,
+ /pgfplots/table/disable rowcol styles/.default=true,
+ /pgfplots/table/row predicate/.code={},
+ /pgfplots/table/skip rows between index/.style 2 args={%
+ /pgfplots/table/row predicate/.append code={%
+ \ifnum##1<#1\relax
+ \else
+ \ifnum##1<#2\relax
+ \pgfplotstableuserowfalse
+ \fi
+ \fi}
+ },
+ /pgfplots/table/select equal part entry of/.style 2 args={%
+ /pgfplots/table/row predicate/.code={%
+ \pgfplotstableuserowtrue
+ \begingroup
+ % this group re-uses counters as temporary variables.
+ \c@pgfplotstable@colindex=\pgfplotstablerows\relax
+ \divide\c@pgfplotstable@colindex by#2\relax
+ \edef\pgfplotstablepartsize{\the\c@pgfplotstable@colindex}%
+ % This here should create empty cells such that
+ % remaining entries are distributed equally:
+ \c@pgfplotstable@rowindex=\c@pgfplotstable@colindex
+ \multiply\c@pgfplotstable@rowindex by#2\relax
+ \ifnum\c@pgfplotstable@rowindex<\pgfplotstablerows\relax
+ \c@pgfplotstable@colindex=\pgfplotstablerows\relax
+ \advance\c@pgfplotstable@colindex by-\c@pgfplotstable@rowindex
+ \advance\c@pgfplotstable@colindex by\pgfplotstablepartsize
+ \edef\pgfplotstablepartsize{\the\c@pgfplotstable@colindex}%
+ \fi
+ %
+ \multiply\c@pgfplotstable@colindex by#1\relax
+ \ifnum##1<\c@pgfplotstable@colindex\relax
+ \aftergroup\pgfplotstableuserowfalse
+ \else
+ \advance\c@pgfplotstable@colindex by\pgfplotstablepartsize\relax
+ \ifnum##1<\c@pgfplotstable@colindex\relax
+ \else
+ \aftergroup\pgfplotstableuserowfalse
+ \fi
+ \fi
+ \endgroup
+ }%
+ },
+ % #1: colname
+ /pgfplots/table/unique/.code={%
+ \pgfkeys{/pgfplots/table/row predicate/.append code={%
+ \ifnum\pgfplotstablerow=0
+ \ifnum\pgfplotstablecol=0
+ \pgfutil@ifundefined{pgfplotstable@unique@bitlist@backup}{%
+ }{%
+ \pgfplots@error{It seems there are *multiple* 'unique' keys running on one table. That doesn't work correctly, I guess. Consider using '\string\pgfplotstableset{row predicate/.code={}}' to reset it.}%
+ }%
+ % PREPARE ONCE! Assemble the boolean results into
+ % a list which is used for the complete table:
+ \def\pgfplotstable@loc@TMPd{\pgfplotstablegetcolumnfromstruct{#1}\of}%
+ \expandafter\pgfplotstable@loc@TMPd\pgfplotstablename\to\pgfplotstable@unique@col
+ \pgfplotslistnewempty\pgfplotstable@unique@bitlist
+ \let\pgfplotstable@unique@LAST=\pgfutil@empty
+ \pgfplotslistforeachungrouped\pgfplotstable@unique@col\as\pgfplotstable@unique@cur{%
+ \def\pgfplotstable@unique@bit{1}%
+ \ifx\pgfplotstable@unique@LAST\pgfutil@empty
+ \else
+ \ifx\pgfplotstable@unique@LAST\pgfplotstable@unique@cur
+ \def\pgfplotstable@unique@bit{0}%
+ \fi
+ \fi
+ \ifpgfplotstabletypesetdebug
+ \pgfplots@message{unique={#1}: cur == last <=> ( \pgfplotstable@unique@cur\space == \pgfplotstable@unique@LAST ) = \pgfplotstable@unique@bit.}%
+ \fi
+ \expandafter\pgfplotslistpushback\pgfplotstable@unique@bit\to\pgfplotstable@unique@bitlist
+ \let\pgfplotstable@unique@LAST=\pgfplotstable@unique@cur
+ }%
+ \global\let\pgfplotstable@unique@bitlist@backup=\pgfplotstable@unique@bitlist
+ \else
+ \pgfutil@ifundefined{pgfplotstable@unique@bitlist@backup}{%
+ % this sanity checking is NOT fool proof: it
+ % fails if there are different occurances of
+ % unique in the same file
+ \pgfplotsthrow{invalid argument}{Sorry, the row predicate /pgfplots/table/unique={#1} has been used in the wrong context: it needs to be invoked for the very first processed column, not column no \pgfplotstablecol. Please provide it as argument to \string\pgfplotstabletypeset[unique={#1}] and not inside of column-specific styles}\pgfeov%
+ }{}%
+ \fi
+ % acquire the assembled list here: we'll do a lot of
+ % popfronts with it.
+ \let\pgfplotstable@unique@bitlist=\pgfplotstable@unique@bitlist@backup
+ \fi
+ \pgfplotslistcheckempty\pgfplotstable@unique@bitlist
+ \ifpgfplotslistempty
+ % should not happen!
+ \pgfplotstableuserowfalse
+ \else
+ \pgfplotslistpopfront\pgfplotstable@unique@bitlist\to\pgfplots@loc@TMPa
+ \if\pgfplots@loc@TMPa0%
+ \pgfplotstableuserowfalse
+ \fi
+ \fi
+ % cleanup:
+ {%
+ \count0=\pgfplotstablecol\relax \advance\count0 by1
+ \ifnum\count0=\pgfplotstablecols\relax
+ \count0=\pgfplotstablerow\relax \advance\count0 by1
+ \ifnum\count0=\pgfplotstablerows\relax
+ \global\let\pgfplotstable@unique@bitlist@backup=\relax
+ \fi
+ \fi
+ }%
+ }}%
+ },%
+ % columns={name1,name2}
+ % or
+ % columns={[index]2,name2,name3,[index]5}
+ /pgfplots/table/columns/.initial=,
+ %
+ % this choice allows
+ % \pgfplotstableset{
+ % column name={}, % means: the column's display name is an empty string!
+ % column name=\pgfkeysnovalue, % means: no value specified. In this case,
+ % the column's display name will default to column's name.
+ % }
+ /pgfplots/table/column name/.initial=\pgfkeysnovalue,
+ %
+ % this thing here allows to MODIFY 'column name'.
+ %
+ % Argument #1 is the current column name, that means after
+ % evaluating 'column name'. If this key changes anything, it
+ % should write its result back into 'column name'.
+ %
+ % That means you can use 'column name' to assign the name as such
+ % and 'assign column name' to generate final TeX code (for example
+ % to insert \multicolumn{1}{c}{#1} or so).
+ % default is empty which means no change.
+ %/pgfplots/table/assign column name/.code={
+ % \pgfkeyssetvalue{/pgfplots/table/column name}{#1}%
+ %},
+ %
+ %
+ %
+ % A style which inserts \multicolumn{1}{#1}{<column name>} for
+ % each column name.
+ % The column name as such can be set with the 'column name' option.
+ /pgfplots/table/multicolumn names/.style={%
+ /pgfplots/table/assign column name/.code={%
+ \pgfkeyssetvalue{/pgfplots/table/column name}{\multicolumn{1}{#1}{##1}}%
+ }%
+ },
+ /pgfplots/table/multicolumn names/.default=c,
+ /pgfplots/table/dec sep align/.code={%
+ \pgfplots@assert@LaTeX@package@loaded{array}{dec sep align}%
+ \def\pgfplotstable@scisepalign@headeralign{#1}%
+ \pgfkeysalso{%
+ /pgf/number format/assume math mode,
+ /pgf/number format/@dec sep mark={$&$},
+ /pgfplots/table/assign column name/.code={%
+ \pgfkeyssetvalue{/pgfplots/table/column name}{\multicolumn{2}{#1}{##1}}%
+ },%
+ /pgfplots/table/column type={%
+ r<{\pgfplotstableresetcolortbloverhangright}%
+ @{}%
+ l<{\pgfplotstableresetcolortbloverhangleft}%
+ },
+ /pgfplots/table/assign cell content/.code={%
+ \def\pgfmathresult{##1}%
+ \let\continue=\pgfutil@empty
+ % allow special handling:
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/table/dec sep align/process/.@cmd}{##1}%
+ \ifx\continue\pgfutil@empty
+ % nothing has changed. Processed as usual:
+ \ifx\pgfmathresult\pgfutil@empty
+ \def\pgfmathresult{&}%
+ \else
+ % -6.90000001e-01 -> \meaning\pgfmathresult = macro:->-0$&$.69
+ \pgfmathprintnumberto{\pgfmathresult}\pgfmathresult%
+ % now make sure we have math mode for the single
+ % columns:
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\expandafter$\pgfmathresult$}%
+ \fi
+ \fi
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+ },
+ }%
+ },
+ /pgfplots/table/dec sep align/.default=c,
+ %
+ % A part of dec sep align which can be used to process special
+ % cases.
+ %
+ % #1: the unprocessed input argument.
+ % PRECONDITION:
+ % \pgfmathresult contains '#1', not more.
+ % \continue is empty.
+ %
+ % POSTCONDITION:
+ % If \continue is empty, `dec sep align' will continue just as
+ % if the 'process' key hadn't been invoked.
+ % It will, however, use the current value of \pgfmathresult.
+ %
+ % If \continue is NOT empty, for example \def\continue{0},
+ % `dec sep align' assumes that \pgfmathresult contains the
+ % completely typeset cell, including any alignment material.
+ /pgfplots/table/dec sep align/process/.code=,%
+ /pgfplots/table/dec sep align/no unbounded/.style={%
+ % FIXME : this thing doesn't work as intended! It looks ugly!
+ /pgfplots/table/dec sep align/process/.code={%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber\pgfmathresult
+ \pgfmathfloatiffinite{\pgfmathresult}{%
+ % do nothing, just communicate the parsed
+ % \pgfmathresult
+ }{%
+ \begingroup
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@scisepalign@headeralign}%
+ \t@pgfplots@tokb={\pgfkeyslet{/pgf/number format/@dec sep mark}\pgfutil@empty\pgfmathprintnumber}%
+ \t@pgfplots@tokc=\expandafter{\pgfmathresult}%
+ \xdef\pgfplotstable@glob@TMPc{%
+ \noexpand\multicolumn{2}{\the\t@pgfplots@toka}%
+ {\the\t@pgfplots@tokb{\the\t@pgfplots@tokc}}%
+ }%
+ \endgroup
+ \let\pgfmathresult=\pgfplotstable@glob@TMPc
+ \def\continue{0}%
+ }%
+ \fi
+ },%
+ },%
+ /pgfplots/table/sci sep align/.code={%
+ \pgfplots@assert@LaTeX@package@loaded{array}{sci sep align}%
+ \pgfkeysalso{%
+ /pgf/number format/assume math mode,
+ /pgf/number format/@sci exponent mark={$&$},
+ /pgfplots/table/assign column name/.code={%
+ \pgfkeyssetvalue{/pgfplots/table/column name}{\multicolumn{2}{#1}{##1}}%
+ },%
+ /pgfplots/table/column type={%
+ r<{\pgfplotstableresetcolortbloverhangright}%
+ @{}%
+ l<{\pgfplotstableresetcolortbloverhangleft}%
+ },
+ /pgfplots/table/assign cell content/.code={%
+ \def\pgfmathresult{##1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \def\pgfmathresult{&}%
+ \else
+ \pgfmathprintnumberto{##1}\pgfmathresult%
+ \expandafter\pgfutil@in@\expandafter&\expandafter{\pgfmathresult}%
+ % now make sure we have math mode for the single
+ % columns:
+ \ifpgfutil@in@
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\expandafter$\pgfmathresult$}%
+ \else
+ \expandafter\def\expandafter\pgfmathresult\expandafter{\expandafter\pgfutilensuremath\expandafter{\pgfmathresult}&}%
+ \fi
+ \fi
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+ },
+ }%
+ },
+ /pgfplots/table/sci sep align/.default=c,
+ %
+ % A style which can be used together with the 'dcolumn' package by
+ % David Carlisle.
+ % #1: the dcolumn type, defaults to 'D{.}{.}{2}'
+ % #2: the column name type, defaults to 'c'
+ /pgfplots/table/dcolumn/.style 2 args={%
+ /pgf/number format/assume math mode,
+ column type={#1},
+ multicolumn names=#2,
+ },
+ /pgfplots/table/dcolumn/.default={D{.}{.}{2}}{c},
+ /pgfplots/table/column type/.initial={c},
+ /pgfplots/table/every even row/.style={},
+ /pgfplots/table/every odd row/.style={},
+ /pgfplots/table/every last row/.style={},
+ /pgfplots/table/every first row/.style={},
+ /pgfplots/table/every head row/.style={},
+ /pgfplots/table/every first column/.style={},
+ /pgfplots/table/every last column/.style={},
+ /pgfplots/table/every even column/.style={},
+ /pgfplots/table/every column/.style={},
+ /pgfplots/table/every odd column/.style={},
+ /pgfplots/table/every nth row/.code 2 args={%
+ \pgfplotstabletypeset@append@every@nth@row{#1}{#2}%
+ },
+ /pgfplots/table/every nth row/.style 2 args/.code 2 args={%
+ \pgfplotstabletypeset@append@every@nth@row{#1}{#2}%
+ },
+ /pgfplots/table/before row/.initial=,
+ /pgfplots/table/after row/.initial=,
+ /pgfplots/table/begin table/.initial={\begin{tabular}},
+ /pgfplots/table/end table/.initial={\end{tabular}},
+ /pgfplots/table/outfile/.initial=,
+ /pgfplots/table/include outfiles/.is if=pgfplotstabletypeset@includeoutfiles,
+ /pgfplots/table/include outfiles/.default=true,
+ /pgfplots/table/force remake/.is if=pgfplotstabletypeset@force@remake,
+ /pgfplots/table/force remake/.default=true,
+ /pgfplots/table/write to macro/.initial=,
+ /pgfplots/table/typeset/.is if=pgfplotstabletypesetresult,
+ /pgfplots/table/typeset=true,
+ /pgfplots/table/skip coltypes/.is if=pgfplotstabletypesetskipcoltypes,
+ /pgfplots/table/skip coltypes/.default=true,
+ /pgfplots/table/debug/.is if=pgfplotstabletypesetdebug,
+ /pgfplots/table/debug level/.initial=0,%
+ %
+ % will be redefined by |assign cell content| for every cell:
+ /pgfplots/table/@cell content/.initial=,
+ %
+ % #1: the cells content as it has been found in the input table
+ % this command key should somehow fill |cell content|.
+ /pgfplots/table/assign cell content/.code={%
+ \def\pgfmathresult{#1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathprintnumberto{#1}\pgfmathresult%
+ \fi
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+ },
+ %
+ % this here is the default formatting. It uses
+ % \pgfmathprintnumber.
+ /pgfplots/table/assign cell content as number/.code={%
+ \def\pgfmathresult{#1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathprintnumberto{#1}\pgfmathresult%
+ \fi
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+ },
+ /pgfplots/table/numeric type/.code={%
+ \pgfkeysgetvalue{/pgfplots/table/assign cell content as number/.@cmd}\pgfplotstable@loc@TMPa%
+ \pgfkeyslet{/pgfplots/table/assign cell content/.@cmd}\pgfplotstable@loc@TMPa
+ },
+ /pgfplots/table/string type/.style={%
+ /pgfplots/table/assign cell content/.style={%
+ /pgfplots/table/@cell content={##1}%
+ }%
+ },%
+ /pgfplots/table/verb string type/.style={%
+ /pgfplots/table/text special chars={\#,\|},% FIXME: too limited ...
+ /pgfplots/table/assign cell content/.code={%
+ \def\pgfplotstable@loc@TMPa{##1}%
+ % hm... this here might be more robust instead of the line
+ % above. But not much, I suppose:
+ %\t@pgfplotstable@a={##1}%
+ %\edef\pgfplotstable@loc@TMPa{\the\t@pgfplotstable@a}%
+ \pgfplots@command@to@string\pgfplotstable@loc@TMPa\pgfplotstable@loc@TMPa
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfplotstable@loc@TMPa}%
+ }%
+ },%
+ /pgfplots/table/numeric as string type/.style={%
+ /pgfplots/table/assign cell content/.code={%
+ \def\pgfmathresult{##1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathifisint{##1}{\let\pgfmathresult=\pgfretval}{\pgfmathfloattosci{\pgfretval}}%
+ \fi
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+ }%
+ },%
+ /pgfplots/table/date type/.style={%
+ /pgfplots/table/assign cell content/.code={%
+ \begingroup
+ \pgfcalendardatetojulian{##1}\c@pgfplotstable@counta
+ \pgfcalendarjuliantodate{\c@pgfplotstable@counta}\year\month\day
+ \pgfcalendarjuliantoweekday\c@pgfplotstable@counta\c@pgf@countc
+ \edef\weekday{\the\c@pgf@countc }%
+ \edef\weekdayname{\pgfcalendarweekdayname\c@pgf@countc}%
+ \edef\weekdayshortname{\pgfcalendarweekdayshortname\c@pgf@countc}%
+ \edef\monthname{\pgfcalendarmonthname\month}%
+ \edef\monthshortname{\pgfcalendarmonthshortname\month}%
+ \xdef\pgfplots@glob@TMPa{#1}%
+ \endgroup
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfplots@glob@TMPa%
+ }%
+ },%
+ /pgfplots/table/date type/.default={\year/\month/\day},%
+ /pgfplots/table/set content/.style={%
+ /pgfplots/table/postproc cell content/.style={%
+ /pgfplots/table/@cell content={#1}%
+ }%
+ },%
+ %
+ /pgfplots/table/postproc cell content/.code={},
+ /pgfplots/table/preproc cell content/.code={},
+ %
+ /pgfplots/table/clear infinite/.style={%
+ /pgfplots/table/preproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \let\pgfmatharga=\pgfmathresult
+ {%
+ \pgfmathfloatgetflags\pgfmatharga\c@pgfplotstable@counta
+ \xdef\pgfplots@glob@TMPc{\the\c@pgfplotstable@counta}%
+ }%
+ \ifnum\pgfplots@glob@TMPc<3
+ \pgfmathfloattosci@\pgfmathresult
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfmathresult}%
+ \else
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfutil@empty}%
+ \fi
+ \fi
+ }
+ },
+ /pgfplots/table/string replace/.style 2 args={%
+ /pgfplots/table/preproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfmathresult\pgfplots@loc@TMPa
+ \def\pgfplots@loc@TMPb{#2}%
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfplots@loc@TMPb}%
+ \fi
+ }
+ },
+ /pgfplots/table/string replace*/.style 2 args={%
+ /pgfplots/table/preproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \def\pgfplots@loc@TMPa{\pgfplotsutilstrreplace{#1}{#2}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfplotsretval}%
+ }
+ },
+ /pgfplots/table/preproc/expr/.code={%
+ \ifpgfplots@usefpu
+ \pgfkeysalso{/pgf/fpu=true,/pgf/fpu/output format=sci}%
+ \fi
+ \expandafter\def\csname pgfplotstable@preproc@expr@thisrow@\pgfplotstablecolname\endcsname{\pgfkeysvalueof{/pgfplots/table/@cell content}}%
+ \def\thisrow##1{%
+ \pgfutil@ifundefined{pgfplotstable@preproc@expr@thisrow@##1}{%
+ --inaccessable--%
+ }{%
+ \csname pgfplotstable@preproc@expr@thisrow@##1\endcsname
+ }%
+ }%
+ \pgfkeysalso{/pgfplots/table/preproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathparse{#1}%
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult%
+ \fi
+ }%
+ }%
+ },
+ /pgfplots/table/multiply -1/.style={%
+ /pgfplots/table/preproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \let\pgfmatharga=\pgfmathresult
+ \pgfmathfloatcreate{2}{1.0}{0}%
+ \let\pgfmathargb=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfmatharga}{\pgfmathargb}%
+ \pgfmathfloattosci@\pgfmathresult
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfmathresult}%
+ \fi
+ }
+ },
+ /pgfplots/table/multiply with/.style={/pgfplots/table/multiply by={#1}},%
+ /pgfplots/table/multiply by/.code={%
+ \pgfmathfloatparsenumber{#1}%
+ \let\pgfplotstable@scale=\pgfmathresult
+ \pgfkeysalso{
+ /pgfplots/table/preproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \let\pgfmatharga=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfmatharga}{\pgfplotstable@scale}%
+ \pgfmathfloattosci@\pgfmathresult
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfmathresult}%
+ \fi
+ }%
+ }%
+ },
+ /pgfplots/table/divide by/.code={%
+ \pgfkeysalso{/pgfplots/table/multiply by=#1}%
+ \let\pgfplotstable@divisor=\pgfplotstable@scale
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \let\pgfplotstable@ONE=\pgfmathresult
+ \pgfmathfloatdivide@{\pgfplotstable@ONE}{\pgfplotstable@divisor}%
+ \let\pgfplotstable@scale=\pgfmathresult
+ },
+ /pgfplots/table/sqrt/.style={%
+ /pgfplots/table/preproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \let\pgfmatharga=\pgfmathresult
+ \pgfmathfloatsqrt@{\pgfmatharga}%
+ \pgfmathfloattosci@\pgfmathresult
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfmathresult}%
+ \fi
+ }%
+ },
+ /pgfplots/table/empty cells with/.style={%
+ /pgfplots/table/postproc cell content/.append code={%
+ \ifnum\pgfplotstablepartno=0
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfkeyssetvalue{/pgfplots/table/@cell content}{#1}%
+ \fi
+ \fi
+ }%
+ },
+ /pgfplots/table/fonts by sign/.style 2 args={%
+ /pgfplots/table/postproc cell content/.append code={%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfplotsretval
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokb={#1}%
+ \t@pgfplots@tokc={#2}%
+ \pgfmathfloatparsenumber{\pgfkeysvalueof{/pgfplots/table/@preprocessed cell content}}%
+ \pgfmathfloatifflags{\pgfmathresult}{-}{%
+ \edef\pgfmathresult{{\the\t@pgfplots@tokc{\the\t@pgfplots@toka}}}%
+ }{%
+ \edef\pgfmathresult{{\the\t@pgfplots@tokb{\the\t@pgfplots@toka}}}%
+ }%
+ \pgfkeyslet{/pgfplots/table/@cell content}{\pgfmathresult}%
+ \fi
+ }%
+ },%
+ %
+ /pgfplots/table/font/.initial=,
+ /pgfplots/table/.search also={/pgf/number format,/pgfplots/table/create col},
+ %--------------------------------------------------
+ % /pgfplots/table/.unknown/.code={%
+ % \let\pgfplots@table@curkeyname=\pgfkeyscurrentname
+ % \pgfqkeys{/pgf/number format}{\pgfplots@table@curkeyname=#1}%
+ % },%
+ %--------------------------------------------------
+ /pgfplots/table/create col/assign first/.style={
+ /pgfplots/table/create col/assign%
+ },
+ /pgfplots/table/create col/assign last/.style={
+ /pgfplots/table/create col/assign%
+ },
+ /pgfplots/table/create col/assign/.style={
+ /pgfplots/table/create col/next content={}%
+ },
+ /pgfplots/table/create col/next content/.initial={},
+ /pgfplots/table/create col/copy/.style={%
+ /pgfplots/table/create col/assign/.code={%
+ \getthisrow{#1}\pgfmathresult
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ },
+ /pgfplots/table/create col/set/.style={%
+ /pgfplots/table/create col/assign/.code={%
+ \def\pgfmathresult{#1}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ },%
+ /pgfplots/table/create col/set list/.code={%
+ \pgfplots@assign@list\pgfmathaccumb{#1}%
+ \pgfkeysalso{/pgfplots/table/create col/@from list struct=\pgfmathaccumb}%
+ },%
+ /pgfplots/table/create col/expr accum/.code 2 args={%
+ \ifpgfplots@usefpu
+ \pgfkeysalso{/pgf/fpu=true,/pgf/fpu/output format=sci}%
+ \fi
+ \pgfkeysdef{/pgfplots/table/create col/assign}{%
+ \ifx\pgfmathaccuma\pgfutil@empty
+ \pgfmathparse{#2}%
+ \let\pgfmathaccuma=\pgfmathresult
+ \fi
+ \pgfmathparse{#1}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ \let\pgfmathaccuma=\pgfmathresult
+ }%
+ },
+ /pgfplots/table/create col/expr/.style={%
+ /pgfplots/table/create col/expr accum={#1}{0}%
+ },%
+ /pgfplots/table/create col/copy column from table/.code 2 args={%
+ \pgfplotstablegetcolumn{#2}\of{#1}\to\pgfmathaccumb
+ \pgfkeysalso{/pgfplots/table/create col/@from list struct=\pgfmathaccumb}%
+ },
+ /pgfplots/table/create col/@from list struct/.code={%
+ \pgfplotslistcopy#1\to\pgfmathaccumb
+ \pgfkeysdef{/pgfplots/table/create col/assign}{%
+ \pgfplotslistcheckempty\pgfmathaccumb
+ \ifpgfplotslistempty
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ \else
+ \pgfplotslistpopfront\pgfmathaccumb\to\pgfmathresult
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ \fi
+ }%
+ },
+ /pgfplots/table/create col/linear regression/.code={%
+ \pgfplotstable@linear@regression{#1}%
+ \pgfkeysalso{/pgfplots/table/create col/@from list struct=\pgfplotsretval}%
+ },
+ /pgfplots/table/create col/linear regression/.default=,%
+ /pgfplots/table/create col/linear regression/x/.initial=,%
+ /pgfplots/table/create col/linear regression/y/.initial=,%
+ /pgfplots/table/create col/linear regression/table/.initial=,%
+ /pgfplots/table/create col/linear regression/variance/.initial=,%
+ /pgfplots/table/create col/linear regression/variance list/.initial=,%
+ /pgfplots/table/create col/linear regression/variance src/.initial=,%
+ /pgfplots/table/create col/linear regression/xmode/.initial=,% auto
+ /pgfplots/table/create col/linear regression/ymode/.initial=,% auto
+ /pgfplots/table/create col/quotient/.style={%
+ /pgfplots/table/columns={#1},
+ /pgfplots/table/create col/assign first/.style={%
+ /pgfplots/table/create col/next content=
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \pgfmathfloatparsenumber{\prevrow{#1}}%
+ \let\pgfmatharga=\pgfmathresult
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmathargb=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathargb
+ \pgfplots@ifzero\pgfmathargb{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmatharga}{\pgfmathargb}%
+ \expandafter\pgfmathfloattosci@\expandafter{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ }%
+ },%
+ /pgfplots/table/create col/iquotient/.style={%
+ /pgfplots/table/columns={#1},
+ /pgfplots/table/create col/assign first/.style={%
+ /pgfplots/table/create col/next content=
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \pgfmathfloatparsenumber{\prevrow{#1}}%
+ \let\pgfmathargb=\pgfmathresult
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmatharga=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathargb
+ \pgfplots@ifzero\pgfmathargb{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmatharga}{\pgfmathargb}%
+ \expandafter\pgfmathfloattosci@\expandafter{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ }%
+ },%
+ %
+ % Produces 'log2( \prevrow{#1}/\thisrow{#1} )
+ %
+ % Assumeing that every row contains error(h) = O(h^alpha)
+ % and h_this = h_prev/2, this result in 'alpha', the convergence
+ % rate.
+ /pgfplots/table/create col/dyadic refinement rate/.style={%
+ /pgfplots/table/columns={#1},
+ /pgfplots/table/create col/assign first/.style={%
+ /pgfplots/table/create col/next content=
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \pgfmathfloatparsenumber{\prevrow{#1}}%
+ \let\pgfmatharga=\pgfmathresult
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmathargb=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathargb
+ \pgfplots@ifzero\pgfmathargb{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmatharga}{\pgfmathargb}%
+ \pgfmathlog@float{\pgfmathresult}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathmultiply@{1.442695}{\pgfmathresult}%
+ \fi
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ }%
+ },%
+ /pgfplots/table/create col/idyadic refinement rate/.style={%
+ /pgfplots/table/columns={#1},
+ /pgfplots/table/create col/assign first/.style={%
+ /pgfplots/table/create col/next content=
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \pgfmathfloatparsenumber{\prevrow{#1}}%
+ \let\pgfmathargb=\pgfmathresult
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmatharga=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathargb
+ \pgfplots@ifzero\pgfmathargb{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmatharga}{\pgfmathargb}%
+ \pgfmathlog@float{\pgfmathresult}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathmultiply@{1.442695}{\pgfmathresult}%
+ \fi
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ }%
+ },%
+ /pgfplots/table/create col/gradient/.style 2 args={%
+ /pgfplots/table/columns={#1,#2},
+ /pgfplots/table/create col/assign first/.code={%
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmathaccuma=\pgfmathresult
+ \pgfmathfloatparsenumber{\thisrow{#2}}%
+ \let\pgfmathaccumb=\pgfmathresult
+ \def\pgfmathresult{}% leave first empty.
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \let\pgfmathcur@x=\pgfmathaccuma
+ \let\pgfmathcur@y=\pgfmathaccumb
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmathnext@x=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathnext@x
+ \pgfmathfloatparsenumber{\thisrow{#2}}%
+ \let\pgfmathnext@y=\pgfmathresult
+ \let\pgfmathaccumb=\pgfmathnext@y
+ \pgfmathfloatsubtract@{\pgfmathnext@x}{\pgfmathcur@x}%
+ \let\pgfmathdiff@x=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfmathnext@y}{\pgfmathcur@y}%
+ \let\pgfmathdiff@y=\pgfmathresult
+ \pgfplots@ifzero\pgfmathdiff@x{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmathdiff@y}{\pgfmathdiff@x}%
+ \expandafter\pgfmathfloattosci@\expandafter{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ },%
+ },%
+ /pgfplots/table/create col/gradient loglog/.style 2 args={%
+ /pgfplots/table/columns={#1,#2},
+ /pgfplots/table/create col/assign first/.code={%
+ \pgfmathlog{\thisrow{#1}}%
+ \let\pgfmathaccuma=\pgfmathresult
+ \pgfmathlog{\thisrow{#2}}%
+ \let\pgfmathaccumb=\pgfmathresult
+ \def\pgfmathresult{}% leave first empty.
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \let\pgfmathcur@x=\pgfmathaccuma
+ \let\pgfmathcur@y=\pgfmathaccumb
+ \pgfmathlog{\thisrow{#1}}%
+ \let\pgfmathnext@x=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathresult
+ \pgfmathlog{\thisrow{#2}}%
+ \let\pgfmathnext@y=\pgfmathresult
+ \let\pgfmathaccumb=\pgfmathresult
+ \pgfplots@loop@CONTINUEtrue
+ \ifx\pgfmathcur@x\pgfutil@empty \pgfplots@loop@CONTINUEfalse\fi
+ \ifx\pgfmathcur@y\pgfutil@empty \pgfplots@loop@CONTINUEfalse\fi
+ \ifx\pgfmathnext@x\pgfutil@empty \pgfplots@loop@CONTINUEfalse\fi
+ \ifx\pgfmathnext@y\pgfutil@empty \pgfplots@loop@CONTINUEfalse\fi
+ \ifpgfplots@loop@CONTINUE
+ \pgfmathsubtract@{\pgfmathnext@x}{\pgfmathcur@x}%
+ \let\pgfmathdiff@x=\pgfmathresult
+ \pgfmathsubtract@{\pgfmathnext@y}{\pgfmathcur@y}%
+ \let\pgfmathdiff@y=\pgfmathresult
+ % FPU is more robust:
+ \pgfmathfloatparsenumber\pgfmathdiff@x\let\pgfmathdiff@x=\pgfmathresult
+ \pgfmathfloatparsenumber\pgfmathdiff@y\let\pgfmathdiff@y=\pgfmathresult
+ \pgfplots@ifzero\pgfmathdiff@x{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmathdiff@y}{\pgfmathdiff@x}%
+ \expandafter\pgfmathfloattosci@\expandafter{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ \else
+ % \pgfmathfloatcreate{3}{0.0}{0}%
+ % \pgfmathfloattosci@\pgfmathresult
+ % \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ \fi
+ },%
+ },%
+ /pgfplots/table/create col/gradient semilogx/.style 2 args={%
+ /pgfplots/table/columns={#1,#2},
+ /pgfplots/table/create col/assign first/.code={%
+ \pgfmathfloatparsenumber{\thisrow{#1}}
+ \pgfmathfloatln@{\pgfmathresult}%
+ \let\pgfmathaccuma=\pgfmathresult
+ \pgfmathfloatparsenumber{\thisrow{#2}}%
+ \let\pgfmathaccumb=\pgfmathresult
+ \def\pgfmathresult{}% leave first empty.
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \let\pgfmathcur@x=\pgfmathaccuma
+ \let\pgfmathcur@y=\pgfmathaccumb
+ \pgfmathfloatparsenumber{\thisrow{#1}}
+ \pgfmathfloatln@{\pgfmathresult}%
+ \let\pgfmathnext@x=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathresult
+ %
+ \pgfmathfloatparsenumber{\thisrow{#2}}%
+ \let\pgfmathnext@y=\pgfmathresult
+ \let\pgfmathaccumb=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfmathnext@x}{\pgfmathcur@x}%
+ \let\pgfmathdiff@x=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfmathnext@y}{\pgfmathcur@y}%
+ \let\pgfmathdiff@y=\pgfmathresult
+ \pgfplots@ifzero\pgfmathdiff@x{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmathdiff@y}{\pgfmathdiff@x}%
+ \expandafter\pgfmathfloattosci@\expandafter{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ },%
+ },%
+ /pgfplots/table/create col/gradient semilogy/.style 2 args={%
+ /pgfplots/table/columns={#1,#2},
+ /pgfplots/table/create col/assign first/.code={%
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmathaccuma=\pgfmathresult
+ \pgfmathfloatparsenumber{\thisrow{#2}}
+ \pgfmathfloatln@{\pgfmathresult}%
+ \let\pgfmathaccumb=\pgfmathresult
+ \def\pgfmathresult{}% leave first empty.
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ },%
+ /pgfplots/table/create col/assign/.code={%
+ \let\pgfmathcur@x=\pgfmathaccuma
+ \let\pgfmathcur@y=\pgfmathaccumb
+ \pgfmathfloatparsenumber{\thisrow{#2}}
+ \pgfmathfloatln@{\pgfmathresult}%
+ \let\pgfmathnext@y=\pgfmathresult
+ \let\pgfmathaccumb=\pgfmathresult
+ %
+ \pgfmathfloatparsenumber{\thisrow{#1}}%
+ \let\pgfmathnext@x=\pgfmathresult
+ \let\pgfmathaccuma=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfmathnext@x}{\pgfmathcur@x}%
+ \let\pgfmathdiff@x=\pgfmathresult
+ \pgfmathfloatsubtract@{\pgfmathnext@y}{\pgfmathcur@y}%
+ \let\pgfmathdiff@y=\pgfmathresult
+ \pgfplots@ifzero\pgfmathdiff@x{%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ }{%
+ \pgfmathfloatdivide@{\pgfmathdiff@y}{\pgfmathdiff@x}%
+ \expandafter\pgfmathfloattosci@\expandafter{\pgfmathresult}%
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ }%
+ },%
+ },%
+ /pgfplots/table/typeset cell/.code={%
+ \ifnum\c@pgfplotstable@colindex=\c@pgfplotstable@numcols\relax
+ \pgfkeyssetvalue{/pgfplots/table/@cell content}{#1\\}%
+ \else
+ \pgfkeyssetvalue{/pgfplots/table/@cell content}{#1&}%
+ \fi
+ },
+ % this can be omitted to omit the header row:
+ /pgfplots/table/output empty row/.style={%
+ /pgfplots/table/typeset cell/.code={%
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfutil@empty%
+ }%
+ },
+ /pgfplots/table/reset styles/.style={
+ /pgfplots/table/every table/.code=,
+ /pgfplots/table/every odd column/.code=,
+ /pgfplots/table/every column/.code=,
+ /pgfplots/table/every even column/.code=,
+ /pgfplots/table/every first column/.code=,
+ /pgfplots/table/every last column/.code=,
+ /pgfplots/table/every head row/.code=,
+ /pgfplots/table/every odd row/.code=,
+ /pgfplots/table/every even row/.code=,
+ /pgfplots/table/every first row/.code=,
+ /pgfplots/table/every last row/.code=,
+ /pgfplots/table/postproc cell content/.code=,
+ /pgfplots/table/preproc cell content/.code=,
+ },
+ /pgfplots/table/colnames from/.initial=,% for \pgfplotstabletranspose
+ /pgfplots/table/input colnames to/.initial=colnames,% for \pgfplotstabletranspose
+ /pgfplots/table/sort/.is if=pgfplotstable@sort,
+ /pgfplots/table/sort/.default=true,
+ /pgfplots/table/sort key/.initial=[index]0,%
+ % the argument of `sort cmp' will be evaluates as style in the key
+ % path /pgfplots/. See pgfplotsutil.code.tex for available
+ % styles.
+ /pgfplots/table/sort cmp/.initial=float <,
+ /pgfplots/table/sort key from/.initial=,
+}
+% 'function graph cut y'={<epsilon>}{<options>}{comma-separated-list of specs where to get yi}
+%
+% fills the column with x1,...,xN such that yi(xi) == epsilon where
+%
+% In other words, it computes cuts points between the line
+% y == epsilon and one or more other plots yi(x) and returns the 'x'
+% values of the cuts.
+%
+% Example:
+% \pgfplotstableset{
+% create on use/cut/.style={create col/function graph cut y={7e-4}{x=Basis,ymode=log,xmode=log}{{table=regtable,y=special-L2}}},
+%}
+\pgfkeysdefnargs{/pgfplots/table/create col/function graph cut y}{3}{\pgfplotstable@fgc@init{#1}{#2}{#3}{y}{x}}
+\pgfkeysdefnargs{/pgfplots/table/create col/function graph cut x}{3}{\pgfplotstable@fgc@init{#1}{#2}{#3}{x}{y}}
+\pgfkeys{%
+ /pgfplots/table/create col/function graph cut/xmode/.is choice,
+ /pgfplots/table/create col/function graph cut/xmode/linear/.code={\def\pgfplotstable@fgc@xmode{0}},%
+ /pgfplots/table/create col/function graph cut/xmode/log/.code={\def\pgfplotstable@fgc@xmode{1}},%
+ /pgfplots/table/create col/function graph cut/ymode/.is choice,
+ /pgfplots/table/create col/function graph cut/ymode/linear/.code={\def\pgfplotstable@fgc@ymode{0}},%
+ /pgfplots/table/create col/function graph cut/ymode/log/.code={\def\pgfplotstable@fgc@ymode{1}},%
+ /pgfplots/table/create col/function graph cut/x/.initial=,
+ /pgfplots/table/create col/function graph cut/y/.initial=,
+ /pgfplots/table/create col/function graph cut/table/.initial=,
+ % foreach={\d in {1,2,3,4}}{{table\d}}
+ /pgfplots/table/create col/function graph cut/foreach/.initial=,
+}
+
+
+\pgfkeyslet{/pgfplots/table/TeX comment}\pgfplots@PERCENT@TEXT
+\pgfkeysgetvalue{/pgfplots/table/postproc cell content/.@cmd}\pgfplotstable@postproccellcontent@EMPTY
+
+
+% A helper macro to automatically remove the "hangover" created by
+% 'colortbl'.
+% This allows compatibility between my 'sci sep align' and 'dec sep align'
+% implementations and \rowcolor. Otherwise, the hangover
+% would overwrite digits near the separator.
+%
+% @remark This does also work if colortbl is not loaded.
+\def\pgfplotstableresetcolortbloverhangright{%
+ \pgfutil@ifundefined{CT@row@color}{\relax}{%
+ \global\let\pgfplots@origrowcolorcmd=\CT@row@color
+ \gdef\CT@row@color{%
+ \pgfplots@origrowcolorcmd
+ \@tempdimc=0pt
+ \global\let\CT@row@color=\pgfplots@origrowcolorcmd
+ }%
+ }%
+}%
+\def\pgfplotstableresetcolortbloverhangleft{%
+ \pgfutil@ifundefined{CT@row@color}{\relax}{%
+ \global\let\pgfplots@origrowcolorcmd=\CT@row@color
+ \gdef\CT@row@color{%
+ \pgfplots@origrowcolorcmd
+ \@tempdimb=0pt
+ \global\let\CT@row@color=\pgfplots@origrowcolorcmd
+ }%
+ }%
+}%
+
+
+% \pgfplotstablesave[<options>]{<\tablename>}{file name}
+\def\pgfplotstablesave{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotstablesave@impl
+ }{%
+ \pgfplotstablesave@impl[]%
+ }%
+}
+
+\def\pgfplotstablesave@impl[#1]#2#3{%
+ \pgfplotstabletypeset[%
+ reset styles,%
+ disable rowcol styles,%
+ begin table={},%
+ end table={},%
+ typeset cell/.code={%
+ \begingroup
+ \t@pgfplots@toka={##1}%
+ \ifcase\pgfplotstableread@OUTCOLSEP@CASE\relax
+ % col sep=SPACE:
+ \t@pgfplots@tokb=\expandafter{\pgfplotstableread@tab}%
+ \pgfplots@ifempty{##1}{%
+ \t@pgfplots@toka={{}}%
+ }{}%
+ \xdef\pgfplots@glob@TMPc{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \or
+ % col sep=comma:
+ \t@pgfplots@tokb={,}%
+ \xdef\pgfplots@glob@TMPc{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \or
+ % col sep=semicolon:
+ \t@pgfplots@tokb={;}%
+ \xdef\pgfplots@glob@TMPc{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \or
+ % col sep=colon:
+ \t@pgfplots@tokb={:}%
+ \xdef\pgfplots@glob@TMPc{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \or
+ % col sep=braces:
+ \xdef\pgfplots@glob@TMPc{{\the\t@pgfplots@toka}}%
+ \or
+ % col sep=tab:
+ \xdef\pgfplots@glob@TMPc{\the\t@pgfplots@toka\pgfplotstableread@tab}%
+ \or
+ % col sep=&:
+ \xdef\pgfplots@glob@TMPc{\the\t@pgfplots@toka&}%
+ \fi
+ \endgroup
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfplots@glob@TMPc%
+ },%
+ before row=,%
+ after row=,%
+ skip coltypes,%
+ typeset=false,%
+ string type,%
+ TeX comment=,%
+ columns=,%
+ font=,%
+ /pgfplots/table/col sep/.is choice,%
+ /pgfplots/table/col sep/space/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{0}},%
+ /pgfplots/table/col sep/comma/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{1}},%
+ /pgfplots/table/col sep/semicolon/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{2}},%
+ /pgfplots/table/col sep/colon/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{3}},%
+ /pgfplots/table/col sep/braces/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{4}},%
+ /pgfplots/table/col sep/tab/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{5}},%
+ /pgfplots/table/col sep/&/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{6}},%
+ /pgfplots/table/col sep/ampersand/.code = {\def\pgfplotstableread@OUTCOLSEP@CASE{6}},%
+ /pgfplots/table/col sep=space,%
+ /pgfplots/table/in col sep/.is choice,%
+ /pgfplots/table/in col sep/space/.code = {\def\pgfplotstableread@COLSEP@CASE{0}},%
+ /pgfplots/table/in col sep/comma/.code = {\def\pgfplotstableread@COLSEP@CASE{1}},%
+ /pgfplots/table/in col sep/semicolon/.code = {\def\pgfplotstableread@COLSEP@CASE{2}},%
+ /pgfplots/table/in col sep/colon/.code = {\def\pgfplotstableread@COLSEP@CASE{3}},%
+ /pgfplots/table/in col sep/braces/.code = {\def\pgfplotstableread@COLSEP@CASE{4}},%
+ /pgfplots/table/in col sep/tab/.code = {\def\pgfplotstableread@COLSEP@CASE{5}},%
+ /pgfplots/table/in col sep/&/.code = {\def\pgfplotstableread@COLSEP@CASE{6}},%
+ /pgfplots/table/in col sep/ampersand/.code = {\def\pgfplotstableread@COLSEP@CASE{6}},%
+ /pgfplots/table/in col sep=space,%
+ % WARNING: you NEED a '%' before '#1':
+ #1,%
+ /pgfplots/table/include outfiles=false,
+ /pgfplots/table/outfile={#3}%
+ ]{#2}%
+}%
+
+% clears the table.
+\def\pgfplotstableclear#1{%
+ \let#1=\relax
+ \expandafter\let\csname \string#1@@table@name\endcsname=\relax
+}%
+
+
+% \pgfplotstablenew[<options>]{<numrows>}{<\name>}
+% \pgfplotstablenew*[<options>]{<numrows>}{<\name>}
+%
+% Creates a new table from scratch.
+%
+% The new table will contain all columns listed in the 'columns' key
+% which must be present in <options>. The starred version
+% \pgfplotstablenew* is not that strict: it will use the current value
+% of the columns key (not matter where and when it has been set).
+%
+% Furthermore, there must be 'create on use' statements for every
+% column which shall be generated. Columns are generated
+% independently, in the order of appearance in 'columns'.
+% The table will contain exactly <numrows> rows.
+\def\pgfplotstablenew{%
+ \begingroup
+ \pgfutil@ifnextchar*{\pgfplotstablenew@star}{\pgfplotstablenew@nostar}}
+\def\pgfplotstablenew@star*{\pgfutil@ifnextchar[{\pgfplotstablenew@impl}{\pgfplotstablenew@impl[]}}%
+\def\pgfplotstablenew@nostar{%
+ % reset columns key:
+ \pgfkeyslet{/pgfplots/table/columns}{\pgfutil@empty}%
+ \pgfutil@ifnextchar[{\pgfplotstablenew@impl}{\pgfplotstablenew@impl[]}}
+
+\def\pgfplotstablenew@impl[#1]#2#3{%
+ \ifx#3\pgfutil@undefined
+ \else
+ \ifx#3\relax
+ \else
+ % oh - there *is* already such a table. The 'getcolumnbyname' method suffers from a flaw in 'ifexists' that I do not want to fix right now.
+ % To work around that flaw, I merely clear the old table here:
+ % let's hope that '#3' really *was* a table and not some other junk...
+ \pgfplotslistforeachungrouped#3\as\pgfplotstable@loc@TMPa{%
+ \expandafter\let\csname\string#3@\pgfplotstable@loc@TMPa\endcsname=\relax%
+ }%
+ \fi
+ \fi
+ %
+ \pgfplotsscanlinelengthinitzero
+ % create a temporary column with the desired number of rows:
+ \pgfutil@in@\pgfplotstablegetrowsof{#2}%
+ \ifpgfutil@in@
+ #2%
+ \let\pgfplotstable@loc@TMPa=\pgfmathresult
+ \else
+ \def\pgfplotstable@loc@TMPa{#2}%
+ \fi
+ %
+ % let the table contain one column named '@@@@@temporary@column@':
+ \pgfplotslistnew#3{@@@@@temporary@column@\\}%
+ % populate the temporary column with enough rows:
+ \ifnum\pgfplotstable@loc@TMPa>0
+ \expandafter\pgfplots@assign@list\csname\string#3@@@@@@temporary@column@\endcsname{1,...,\pgfplotstable@loc@TMPa}%
+ \else
+ \expandafter\pgfplotslistnewempty\csname\string#3@@@@@@temporary@column@\endcsname%
+ \fi
+ %
+ % now, create all real columns:
+ \pgfplotstableset{#1,%
+ /pgf/fpu/handlers/empty number/.code 2 args={%
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ }%
+ }%
+ \pgfkeysgetvalue{/pgfplots/table/columns}{\pgfplotstable@colnames}%
+ \ifx\pgfplotstable@colnames\pgfutil@empty
+ \pgfplots@warning{\string\pgfplotstablenew[columns={},...]{#2}{\string#3} has been invoked - but empty tables are currently not really supported, sorry. You will have to live with an artifical column which contains temporary values.}%
+ \else
+ \expandafter\pgfplots@assign@list\expandafter\pgfplotstablenew@cols\expandafter{\pgfplotstable@colnames}%
+ % make sure every requested column exists:
+ \pgfutil@loop
+ \pgfplotslistcheckempty\pgfplotstablenew@cols
+ \ifpgfplotslistempty
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ \pgfplots@loop@CONTINUEtrue
+ \fi
+ \ifpgfplots@loop@CONTINUE
+ \pgfplotslistpopfront\pgfplotstablenew@cols\to\pgfplotstablenew@col
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplotstablenew@col}\of#3\to\pgfplotstable@loc@TMPa
+ \pgfutil@repeat
+ % remove the temporary column:
+ % FIXME this should be done after the '\fi'. But that will
+ % lead to an error because empty tables are currently
+ % unsupported!
+ \pgfplotslistpopfront#3\to\pgfplotstable@loc@TMPa
+ \fi
+ \pgfplotsscanlinelengthcleanup
+ \pgfplotstable@copy@to@globalbuffers#3{newlycreatedtable}%
+ \endgroup
+ \pgfplotstable@copy@globalbuffers@to#3%
+}%
+
+% \pgfplotstablevertcat{<table1>}{<table2>}
+% appends the contents of <table2> to <table1>. To be more precise,
+% only columns which exist already in <table1> will be used.
+%
+% If <table1> is undefined, <table2> will be copied completely to
+% <table1>.
+%
+% #1 a table macro.
+% #2 either a file name or a table macro.
+\long\def\pgfplotstablevertcat#1#2{%
+ \pgfplotstable@isloadedtable{#2}{%
+ \pgfplotstable@isloadedtable{#1}{%
+ % for each column in '#1':
+ \pgfplotslistforeachungrouped#1\as\pgfplotstable@loc@TMPa{%
+ % for each row in the corresponding column of '#2':
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplotstable@loc@TMPa}\of{#2}\to\pgfplotstable@loc@TMPb
+ \pgfplotslistforeachungrouped\pgfplotstable@loc@TMPb\as\pgfplotstable@loc@TMPc{%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPc}%
+ \edef\pgfplotstable@loc@TMPd{%
+ \noexpand\pgfplotslistpushback{\the\t@pgfplots@toka}\noexpand\to\expandafter\noexpand\csname\string#1@\pgfplotstable@loc@TMPa\endcsname
+ }%
+ \pgfplotstable@loc@TMPd
+ }%
+ }%
+ }{%
+ \pgfplotstablecopy{#2}\to{#1}%
+ }%
+ }{%
+ % FIXME : restore memory here !? SCOPING BUG
+ \pgfplotstableread{#2}\pgfplotstable@tmptbl
+ \pgfplotstablevertcat{#1}{\pgfplotstable@tmptbl}%
+ }%
+}
+
+% \pgfplotstabletranspose{<\outtable>}{<intable>}
+% \pgfplotstabletranspose[<colname>]{<\outtable>}{<intable>}
+% Defines <\outtable> to be the transposed of <intable>.
+%
+% If <colname> is not empty, the respective column's entries will be used to
+% make output column names.
+%
+% #1: a table macro name which will be overwritten (redefined)
+% #2: either a file name or a table macro (loaded table).
+\def\pgfplotstabletranspose{%
+ \begingroup
+ \pgfutil@ifnextchar*{%
+ \pgfplotstabletranspose@star%
+ }{%
+ \pgfkeyslet{/pgfplots/table/columns}\pgfutil@empty% clear!
+ \pgfplotstabletranspose@star*%
+ }%
+}
+\def\pgfplotstabletranspose@star*{\pgfutil@ifnextchar[{\pgfplotstabletranspose@opt}{\pgfplotstabletranspose@opt[]}}%
+\long\def\pgfplotstabletranspose@opt[#1]#2#3{%
+ \pgfplotstable@isloadedtable{#3}{%
+ \pgfplotstabletranspose@[#1]{#2}{#3}%
+ }{%
+ \pgfplotstableread{#3}\pgfplotstable@tmptbl
+ \pgfplotstabletranspose@[#1]{#2}{\pgfplotstable@tmptbl}%
+ }%
+}%
+
+
+% Creates a new column named #1 and appends it to table #2.
+%
+% The column entries will be created using the command keys
+% 'create col/assign'
+% 'create col/assign last'
+%
+% The key 'create col/assign' will be invoked for every row of table #2.
+% It is supposed to assign the key 'create col/next content'.
+% During evaluation of 'create col/assign', the macro '\thisrow{<col name>}'
+% expands to the current row's value of the column named by <col name>.
+% Furthermore, '\nextrow{<col name>}' expands to the \emph{next} row's
+% value of the designated column.
+%
+% Since the "next row" is not available if we are currently processing
+% the last row, 'create col/assign last' is used in for the last row's
+% value.
+%
+% You can use
+% - \thisrow{<col name>},
+% - \getthisrow{<col name>}{\macro}
+% - \nextrow{<col name>},
+% - \getnextrow{<col name>}{\macro}
+%
+% FIXME this documentation is incomplete. Please refer to pgfplotstable.pdf .
+\def\pgfplotstablecreatecol{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotstablecreatecol@opt
+ }{%
+ \pgfplotstablecreatecol@opt[]%
+ }%
+}%
+
+
+% Typesets a table.
+%
+% \pgfplotstabletypeset[<options>]<\tablestructure>
+% or
+% \pgfplotstabletypeset[<options>]{<file name>}
+%
+% If you do not select any columns, the complete table is drawn.
+%
+% There are several options and styles which are available in
+% <options>, see the declaration above.
+%
+% ATTENTION: the default implementation employs
+% \begin{tabular}...\end{tabular} and is therefor only usable with
+% LaTeX!
+%
+% You will need to reconfigure the tables.
+%
+% Inside of \pgfplotstabletypeset, the macros
+% \pgfplotstablecol,\pgfplotstablecolname and
+% \pgfplotstablerow will expand to the current column index, column
+% name and row index, respectively.
+\def\pgfplotstabletypeset{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotstabletypeset@opt
+ }{%
+ \pgfplotstabletypeset@opt[]%
+ }%
+}
+\long\def\pgfplotstabletypeset@opt[#1]{%
+ \begingroup
+ \ifpgfplots@table@options@areset
+ \else
+ \pgfplotstableset{#1}%
+ \fi
+ \pgfplotstablecollectoneargwithpreparecatcodes{%
+ \pgfplotstabletypeset@opt@collectarg[#1]%
+ }%
+}
+\long\def\pgfplotstabletypeset@opt@collectarg[#1]#2{%
+ \pgfplotstable@isloadedtable{#2}%
+ {\pgfplotstabletypeset@opt@[#1]{#2}}%
+ {\pgfplotstabletypesetfile@opt@[#1]{#2}}%
+}
+
+
+% Like \pgfplotstabletypeset, but the first argument is a file name.
+% This is the same now; it will be recognised automatically.
+\let\pgfplotstabletypesetfile=\pgfplotstabletypeset
+\long\def\pgfplotstabletypesetfile@opt@[#1]#2{%
+ %\begingroup <--- is already opened!
+ \ifpgfplots@table@options@areset
+ \else
+ \pgfplotstableset@every@table{#2}{#1}%
+ \pgfplots@table@options@aresettrue
+ \fi
+ \ifpgfplotstabletypeset@force@remake
+ \pgfplotstabletypeset@includeoutfilesfalse
+ \else
+ \ifpgfplotstabletypeset@includeoutfiles
+ \pgfplotstabletypeset@includeoutfilesfalse
+ \pgfkeysgetvalue{/pgfplots/table/outfile}\pgfplotstable@outfilename
+ \ifx\pgfplotstable@outfilename\pgfutil@empty
+ \else
+ \openin\r@pgfplots@reada=\pgfplotstable@outfilename\relax
+ \ifeof\r@pgfplots@reada
+ \else
+ \pgfplotstabletypeset@includeoutfilestrue
+ \fi
+ \closein\r@pgfplots@reada
+ \fi
+ \fi
+ \fi
+ \ifpgfplotstabletypeset@includeoutfiles
+ \input \pgfplotstable@outfilename\relax
+ \else
+ \pgfplotstableread{#2}\pgfplotstabletypesetfile@opt@@
+ \ifx\pgfplotstabletypesetfile@opt@@\relax
+ % ERROR.
+ \else
+ \pgfplotstabletypeset\pgfplotstabletypesetfile@opt@@
+ \fi
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/write to macro}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\pgfplots@loc@TMPa{\pgfutil@empty}%
+ \else
+ \expandafter\ifx\pgfplots@loc@TMPa\relax
+ % is it really defined? NO! Sanity checking here:
+ \def\pgfplots@loc@TMPa{\pgfutil@empty}%
+ \fi
+ \fi
+ \expandafter\pgfmath@smuggleone\pgfplots@loc@TMPa
+ \endgroup
+}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IMPLEMENTATION
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%
+
+
+% #1: the original value
+% #2: the output macro
+\long\def\pgfplotstabletypeset@getfinalentry#1#2{%
+ \begingroup
+ \def\pgfkeysdefaultpath{/pgfplots/table/}%
+ \def\pgfplotstablepartno{0}%
+ \pgfkeyssetvalue{/pgfplots/table/@cell content}{#1}%
+ \pgfkeyssetvalue{/pgfplots/table/@unprocessed cell content}{#1}%
+ \ifpgfplotstable@disable@rowcolstyles
+ \else
+ \def\pgfplots@loc@TMPb##1{%
+ \edef\pgfplotstable@loc@TMPa{/pgfplots/table/every row ##1\pgfplotstablerow\space column ##1\pgfplotstablecol}%
+ \pgfkeysifdefined{\pgfplotstable@loc@TMPa/.@cmd}{%
+ \expandafter\pgfplotstableset\expandafter{\pgfplotstable@loc@TMPa}%
+ }{}%
+ \edef\pgfplotstable@loc@TMPa{/pgfplots/table/every row ##1\pgfplotstablerow\space column \pgfplotstable@colname@for@styles}%
+ \pgfkeysifdefined{\pgfplotstable@loc@TMPa/.@cmd}{%
+ \expandafter\pgfplotstableset\expandafter{\pgfplotstable@loc@TMPa}%
+ }{}%
+ }%
+ \pgfplots@loc@TMPb{}%
+ % also accept the same with the 'row no' style:
+ \pgfplots@loc@TMPb{no }%
+ \pgfplotstable@debug@notify@cellcontent@afterrowcolstyles%
+ \fi
+ \pgfplotstable@debug@notify@cellcontent%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \pgfkeyslet{/pgfplots/table/@cell content after rowcol styles}\pgfmathresult%
+ \pgfkeysgetvalue{/pgfplots/table/preproc cell content/.@cmd}\pgfplotstable@assigncell
+ \expandafter\pgfplotstable@assigncell\pgfmathresult\pgfeov
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \pgfkeyslet{/pgfplots/table/@preprocessed cell content}\pgfmathresult%
+ \pgfplotstable@debug@notify@cellcontent@preprocessed%
+ %
+ \pgfkeysgetvalue{/pgfplots/table/assign cell content/.@cmd}\pgfplotstable@assigncell
+ \expandafter\pgfplotstable@assigncell\pgfmathresult\pgfeov
+ \pgfplotstable@debug@notify@cellcontent@assigned%
+ %
+ \pgfkeysgetvalue{/pgfplots/table/postproc cell content/.@cmd}\pgfplotstable@postproccellcontent
+ \ifx\pgfplotstable@postproccellcontent\pgfplotstable@postproccellcontent@EMPTY
+ \else
+ % apply postprocessing to final cell content.
+ \def\pgfplotstabletypeset@rawinput{#1}%
+ %
+ % This is complicated if there is an '&' in '@cell content',
+ % so handle that specially!
+ %
+ % FIXME also support more than one '&' ?
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \expandafter\pgfutil@in@\expandafter&\expandafter{\pgfmathresult}%
+ \ifpgfutil@in@
+ \expandafter\pgfplotstabletypeset@postproc@separately\pgfmathresult\pgfplotstable@EOI
+ \else
+ \expandafter\pgfplotstable@postproccellcontent\pgfplotstabletypeset@rawinput\pgfeov
+ \fi
+ \fi
+ \pgfplotstable@debug@notify@cellcontent@postprocessed%
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let#2=\pgfmathresult
+}%
+
+\def\pgfplotstable@debug@notify@cellcontent{}%
+\def\pgfplotstable@debug@notify@cellcontent@preprocessed{}%
+\def\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles{}%
+\def\pgfplotstable@debug@notify@cellcontent@assigned{}%
+\def\pgfplotstable@debug@notify@cellcontent@postprocessed{}%
+\def\pgfplotstable@debug@notify@preprocess@incol#1{}%
+\def\pgfplotstable@debug@notify@preprocess@col#1{}%
+\def\pgfplotstable@debug@notify@preprocessed@col#1{}%
+\def\pgfplotstable@debug@notify@balancingcell{}%
+
+\def\pgfplotstable@debug@notify@cellcontent@ACTIVE{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \toks0=\expandafter{\pgfmathresult}%
+ \immediate\write16{Row \pgfplotstablerow/out \the\c@pgfplotstable@counta: Before cell content processing: `\the\toks0'}%
+ \endgroup
+}%
+\def\pgfplotstable@debug@notify@cellcontent@preprocessed@ACTIVE{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \toks0=\expandafter{\pgfmathresult}%
+ \immediate\write16{Row \pgfplotstablerow/out \the\c@pgfplotstable@counta: After '@preproc cell content : `\the\toks0'}%
+ \endgroup
+}%
+\def\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles@ACTIVE{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \toks0=\expandafter{\pgfmathresult}%
+ \immediate\write16{Row \pgfplotstablerow/out \the\c@pgfplotstable@counta: After applying 'every row * column [no] *' styles : `\the\toks0'}%
+ \endgroup
+}%
+\def\pgfplotstable@debug@notify@cellcontent@assigned@ACTIVE{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \toks0=\expandafter{\pgfmathresult}%
+ \immediate\write16{Row \pgfplotstablerow/out \the\c@pgfplotstable@counta: After 'assign cell content : `\the\toks0'}%
+ \endgroup
+}%
+\def\pgfplotstable@debug@notify@cellcontent@postprocessed@ACTIVE{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult%
+ \toks0=\expandafter{\pgfmathresult}%
+ \immediate\write16{Row \pgfplotstablerow/out \the\c@pgfplotstable@counta: After 'postproc cell content : `\the\toks0'}%
+ \endgroup
+}
+\def\pgfplotstable@debug@notify@balancingcell@ACTIVE{%
+ \immediate\write16{Row --/out \the\c@pgfplotstable@counta: Inserting empty cell to balance rows}%
+}%
+\def\pgfplotstable@debug@notify@preprocess@incol@ACTIVE#1{%
+ \begingroup
+ \toks0=\expandafter{#1}%
+ \immediate\write16{>=== Loading input column `\the\toks0' <===}%
+ \endgroup
+}%
+\def\pgfplotstable@debug@notify@preprocess@col@ACTIVE#1{%
+ \begingroup
+ \toks0=\expandafter{#1}%
+ \immediate\write16{>=== Preprocessing output column `\the\toks0' <===}%
+ \endgroup
+}%
+\def\pgfplotstable@debug@notify@preprocessed@col@ACTIVE#1{%
+ \begingroup
+ \toks0=\expandafter{#1}%
+ \immediate\write16{>=== output column `\the\toks0' prepared, ok. <===}%
+ \endgroup
+}%
+\def\pgfplotstable@debug@activate{%
+ \ifnum\pgfkeysvalueof{/pgfplots/table/debug level}>0
+ \let\pgfplotstable@debug@notify@preprocess@incol=\pgfplotstable@debug@notify@preprocess@incol@ACTIVE
+ \let\pgfplotstable@debug@notify@preprocess@col=\pgfplotstable@debug@notify@preprocess@col@ACTIVE
+ \let\pgfplotstable@debug@notify@preprocessed@col=\pgfplotstable@debug@notify@preprocessed@col@ACTIVE
+ \let\pgfplotstable@debug@notify@cellcontent=\pgfplotstable@debug@notify@cellcontent@ACTIVE
+ \let\pgfplotstable@debug@notify@cellcontent@preprocessed=\pgfplotstable@debug@notify@cellcontent@preprocessed@ACTIVE
+ \let\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles=\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles@ACTIVE
+ \let\pgfplotstable@debug@notify@cellcontent@assigned=\pgfplotstable@debug@notify@cellcontent@assigned@ACTIVE
+ \let\pgfplotstable@debug@notify@cellcontent@postprocessed=\pgfplotstable@debug@notify@cellcontent@postprocessed@ACTIVE
+ \let\pgfplotstable@debug@notify@balancingcell=\pgfplotstable@debug@notify@balancingcell@ACTIVE
+ \fi
+}%
+
+% This routine invokes 'postproc cell content' for columns which
+% contain the column separator '&'.
+%
+% #1&#2 is the formatted number, the result of 'dec sep align
+% #3 is the (unformatted) input number.
+\def\pgfplotstabletypeset@postproc@separately#1&#2\pgfplotstable@EOI{%
+ \def\pgfmathresult{#1}%
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+ \expandafter\pgfplotstable@postproccellcontent\pgfplotstabletypeset@rawinput\pgfeov
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfplotstable@entry@a
+ %
+ \def\pgfplotstablepartno{1}%
+ \def\pgfmathresult{#2}%
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+ \expandafter\pgfplotstable@postproccellcontent\pgfplotstabletypeset@rawinput\pgfeov
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@entry@a}%
+ \t@pgfplots@tokb=\expandafter{\pgfmathresult}%
+ \edef\pgfmathresult{\the\t@pgfplots@toka&\the\t@pgfplots@tokb}%
+ \pgfkeyslet{/pgfplots/table/@cell content}\pgfmathresult
+}
+
+% processes the option 'assign column name'
+% FIXME : seems to be deprecated
+\def\pgfplotstabletypeset@assign@final@colname#1#2{%
+ \pgfkeysifdefined{/pgfplots/table/assign column name/.@cmd}{%
+ \pgfkeyssetvalue{/pgfplots/table/column name}{#1}%
+ \pgfkeysvalueof{/pgfplots/table/assign column name/.@cmd}#1\pgfeov
+ \pgfkeysgetvalue{/pgfplots/table/column name}{#2}%
+ }{}%
+}
+\def\pgfplotstabletypeset@nocolname{\pgfkeysnovalue}
+
+% checks if #1 contains invalid chars for pgfkeys and sets
+% \ifpgfutil@in@ to true if that is the case.
+\def\pgfplotstable@checkspecialchars@pgfkeys#1\pgfplotstable@EOI{%
+ \pgfutil@in@/{#1}%
+ \ifpgfutil@in@
+ \else
+ \pgfutil@in@={#1}%
+ \ifpgfutil@in@
+ \else
+ \pgfutil@in@,{#1}%
+ \fi
+ \fi
+}%
+
+% Upon execution, \pgfplotsretval contains a set of /pgfplots/table
+% keys from 'every nth row' styles.
+%
+% @PRECONDITION this macro assumes it is run in \pgfplotstabletypeset.
+\def\pgfplots@each@nth@styles{\let\pgfplotsretval\pgfutil@empty}%
+
+% Defines an 'every nth row' style for an integer #1.
+%
+% #1: integer
+% #2: style arguments
+%
+% All these styles are accumulated into the macro
+% \pgfplots@each@nth@styles.
+\def\pgfplotstabletypeset@append@every@nth@row#1#2{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ % chech for the special 'each nth row={3[+1]}{...} format:
+ \expandafter\pgfutil@in@\expandafter[\expandafter{\pgfplots@loc@TMPa}%
+ \ifpgfutil@in@
+ \expandafter\pgfplotstabletypeset@append@every@nth@row@getshift\pgfplots@loc@TMPa%
+ \t@pgfplots@toka={#2}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplotstabletypeset@append@every@nth@row@{\pgfplots@loc@TMPa}{\the\t@pgfplots@toka}{\pgfplots@loc@TMPb}%
+ }%
+ \pgfplots@loc@TMPa
+ \else
+ \expandafter\pgfplotstabletypeset@append@every@nth@row@\expandafter{\pgfplots@loc@TMPa}{#2}{0}%
+ \fi
+}%
+\def\pgfplotstabletypeset@append@every@nth@row@getshift#1[#2]{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifnum#2<0
+ \c@pgf@countc=#1\relax
+ \advance\c@pgf@countc by#2
+ \edef\pgfplots@loc@TMPb{\the\c@pgf@countc}%
+ \else
+ \def\pgfplots@loc@TMPb{#2}%
+ \fi
+}%
+% #3 is an additional shift. It is usually 0
+\def\pgfplotstabletypeset@append@every@nth@row@#1#2#3{%
+ \expandafter\def\expandafter\pgfplots@each@nth@styles\expandafter{%
+ \pgfplots@each@nth@styles
+ \expandafter\pgfplotsmathmodint\expandafter{\the\c@pgfplotstable@rowindex}{#1}%
+ \ifnum\pgfmathresult=#3\relax
+ \ifx\pgfplotsretval\pgfutil@empty
+ \def\pgfplotsretval{#2}%
+ \else
+ \expandafter\def\expandafter\pgfplotsretval\expandafter{\pgfplotsretval,%
+ #2}%
+ \fi
+ \fi
+ }%
+}
+
+\def\pgfplotstable@insertemptycells@forbalance{%
+ \pgfutil@loop
+ \ifnum\c@pgfplotstable@counta<\pgfplotstable@firstnumrows\relax
+ \pgfplotstable@debug@notify@balancingcell
+ % let's hope @getfinalentry handles empty strings!
+ \pgfplotstabletypeset@getfinalentry{}{\pgfplotstable@entry}%
+ \expandafter\pgfplotslistpushback\pgfplotstable@entry\to\pgfplotstable@col@processed
+ \pgfplotslistpushback\to\pgfplotstable@col@processed
+ \advance\c@pgfplotstable@counta by1\relax
+ \pgfutil@repeat
+}
+
+% TODO
+% - replace grouped list foreach by popfront-loop and use arrays
+% directly -> group only the pgfkeys eval
+\long\def\pgfplotstabletypeset@opt@[#1]#2{%
+ %\begingroup <--- is already opened!
+ %--------------------------------------------------
+ % \pgfutil@ifundefined{#2}{%
+ % \pgfplots@error{There is no such table '\string#2' loaded into memory. Maybe you meant to use '\string\pgfplotstabletypesetfile{\string#2}' instead of '\string\pgfplotstabletypeset{\string#2}'?}%
+ % \pgfplotslistnewempty#2
+ % }{}%
+ %--------------------------------------------------
+ \def\pgfplotstablename{#2}% the name of the actual table struct
+ \def\pgfplotstablecolname{\pgfplotstable@colname}%
+ \def\pgfplotstablecol{\the\c@pgfplotstable@colindex}%
+ \def\pgfplotstablerow{\the\c@pgfplotstable@rowindex}%
+ \def\pgfplotstablecols{\the\c@pgfplotstable@numcols}%
+ \def\pgfplotstablerows{\the\c@pgfplotstable@numrows}%
+ \ifpgfplots@table@options@areset
+ \else
+ \pgfplotstablegetname{#2}\pgfplotstable@loc@TMPa
+ \expandafter\pgfplotstableset@every@table\expandafter{\pgfplotstable@loc@TMPa}{#1}%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/outfile}\pgfplotstable@outfilename
+ \pgfkeysgetvalue{/pgfplots/table/TeX comment}\pgfplots@TeX@comment
+ \ifpgfplotstabletypeset@force@remake
+ \pgfplotstabletypeset@includeoutfilesfalse
+ \else
+ \ifpgfplotstabletypeset@includeoutfiles
+ \pgfplotstabletypeset@includeoutfilesfalse
+ \ifx\pgfplotstable@outfilename\pgfutil@empty
+ \else
+ \pgfplots@logfileopen{\pgfplotstable@outfilename}%
+ \openin\r@pgfplots@reada=\pgfplotstable@outfilename\relax
+ \ifeof\r@pgfplots@reada \else\pgfplotstabletypeset@includeoutfilestrue \fi
+ \closein\r@pgfplots@reada
+ \fi
+ \fi
+ \fi
+ \ifpgfplotstabletypeset@includeoutfiles
+ \def\pgfplots@loc@TMPa{%
+ \input \pgfplotstable@outfilename\relax
+ \endgroup
+ }%
+ \else
+ \def\pgfplots@loc@TMPa{%
+ \pgfplotstabletypeset@opt@prepare{#2}%
+ }%
+ \fi
+ \pgfplots@loc@TMPa
+}%
+\def\pgfplotstabletypeset@opt@prepare#1{%
+ %
+ % Prepare outfile and debug options:
+ \let\pgfplotstable@notify@finished@line=\pgfutil@empty
+ %
+ % FLUSH assumes that \pgfplotstable@curline is finished. It
+ % appends all its contents as-is to \pgfplotstable@result.
+ %
+ % Furthermore, it calls \pgfplotstable@notify@finished@line which
+ % in turn may invoke additional output routines for the debug and
+ % outfile options.
+ %
+ % Finally, it resets \pgfplotstable@curline.
+ \def\pgfplotstable@curline@FLUSH{%
+ \pgfplotstable@notify@finished@line
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@result}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@curline}%
+ \edef\pgfplotstable@result{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \let\pgfplotstable@curline=\pgfutil@empty
+ }%
+ \ifpgfplotstabletypesetdebug
+ \immediate\write16{------- PGFPLOTSTABLE DEBUG MODE: --------}%
+ \expandafter\def\expandafter\pgfplotstable@notify@finished@line\expandafter{\pgfplotstable@notify@finished@line
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \immediate\write16{\the\t@pgfplots@toka\pgfplots@TeX@comment}%
+ }%
+ \pgfplotstable@debug@activate
+ \fi
+ \ifx\pgfplotstable@outfilename\pgfutil@empty
+ \else
+ \immediate\openout\pgfplotstable@outfile=\pgfplotstable@outfilename\relax
+ \expandafter\def\expandafter\pgfplotstable@notify@finished@line\expandafter{\pgfplotstable@notify@finished@line
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \immediate\write\pgfplotstable@outfile{\the\t@pgfplots@toka\pgfplots@TeX@comment}%
+ }%
+ \fi
+ %
+ % Start operation:
+ \pgfkeysgetvalue{/pgfplots/table/columns}{\pgfplotstable@colnames}%
+ \ifx\pgfplotstable@colnames\pgfutil@empty
+ \pgfplotstablegetcolumnlist#1\to\pgfplotstable@colnames
+ \else
+ \expandafter\pgfplotslistnew\expandafter\pgfplotstable@colnames\expandafter{\pgfplotstable@colnames}%
+ \fi
+ %
+ %
+ \ifpgfplotstable@sort
+ % make sure any columns exist (especially create on use).
+ % this can be done by calling getcolumnbyname once for every
+ % column:
+ \pgfplotslistforeachungrouped\pgfplotstable@colnames\as\pgfplotstable@colname{%
+ \pgfplotstable@is@colname\pgfplotstable@colname
+ \ifpgfplotstableread@foundcolnames
+ \else
+ \pgfplotstablegetcolumnnamebyindex\pgfplotstable@colname\of#1\to\pgfplotstable@colname
+ \fi
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplotstable@colname}\of#1\to\pgfplotstable@col
+ }%
+ \let\pgfplotstable@colname=\relax
+ \let\pgfplotstable@col=\relax
+ %
+ \def\pgfplots@loc@TMPa{%
+ \pgfplotstablesort\pgfplotstable@sortedtbl{#1}%
+ \pgfplotstabletypeset@opt@@{\pgfplotstable@sortedtbl}%
+ }%
+ \else
+ \def\pgfplots@loc@TMPa{%
+ \pgfplotstabletypeset@opt@@{#1}%
+ }%
+ \fi
+ \pgfplots@loc@TMPa
+}
+\def\pgfplotstabletypeset@opt@@#1{%
+ \global\pgfplotslistnewempty\pgfplotstabletypeset@final@colnames
+ \global\pgfplotslistnewempty\pgfplotstabletypeset@final@coltypes
+ \global\pgfplotslistnewempty\pgfplotstabletypeset@final@cols
+ \let\c@pgfplotstable@numcols=\c@pgf@counta
+ \let\c@pgfplotstable@numrows=\c@pgf@countd
+ \let\c@pgfplotstable@rowindex=\c@pgf@countc
+ \let\c@pgfplotstable@colindex=\c@pgf@countb
+ \pgfplotslistsize\pgfplotstable@colnames\to\c@pgfplotstable@numcols
+ \def\pgfplotstable@firstnumrows{-1}%
+ \c@pgfplotstable@numrows=-1\relax
+ \c@pgfplotstable@colindex=0\relax
+ % FOREACH COLUMN:
+ \pgfplotslistforeach\pgfplotstable@colnames\as\pgfplotstable@colname{%
+ \pgfplotstable@debug@notify@preprocess@incol\pgfplotstable@colname
+ %
+ \c@pgfplotstable@rowindex=0\relax
+ \pgfplotstable@is@colname\pgfplotstable@colname
+ \ifpgfplotstableread@foundcolnames
+ \else
+ \pgfplotstablegetcolumnnamebyindex\pgfplotstable@colname\of#1\to\pgfplotstable@colname
+ \fi
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplotstable@colname}\of#1\to\pgfplotstable@col
+ %
+ % Init number of *input* rows here. This may not be the same
+ % as the number of *output* rows (see the row predicate
+ % below).
+ %
+ % Accessable with \pgfplotstablerows in style keys.
+ \ifnum\c@pgfplotstable@numrows=-1\relax
+ \pgfplotslistsize\pgfplotstable@col\to\c@pgfplotstable@numrows
+ \global\c@pgfplotstable@numrows=\c@pgfplotstable@numrows
+ \fi
+ %
+ %
+ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Set keys for columns!
+ \ifodd\c@pgfplotstable@colindex
+ \t@pgfplots@toka={every odd column}%
+ \else
+ \t@pgfplots@toka={every even column}%
+ \fi
+ \ifnum\c@pgfplotstable@colindex=0\relax
+ \t@pgfplots@toka=\expandafter{\the\t@pgfplots@toka,every first column}%
+ \fi
+ % save this now before we increment '\c@pgfplotstable@colindex':
+ \edef\pgfplotstable@displaycolkey{display columns/\the\c@pgfplotstable@colindex/.try,every col no \the\c@pgfplotstable@colindex/.try}%
+ %
+ \global\advance\c@pgfplotstable@colindex by1\relax
+ \ifnum\c@pgfplotstable@colindex=\c@pgfplotstable@numcols
+ \t@pgfplots@toka=\expandafter{\the\t@pgfplots@toka,every last column}%
+ \fi
+ % temporarily restore it: we may need it in row predicates:
+ \global\advance\c@pgfplotstable@colindex by-1\relax
+ \ifpgfplotstable@disable@rowcolstyles
+ % ok, then don't check for 'columns/<name>' and
+ % 'display columns/<index>':
+ \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka}%
+ \else
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@colname}%
+ \expandafter\pgfplotstable@checkspecialchars@pgfkeys\the\t@pgfplots@tokb\pgfplotstable@EOI
+ \ifpgfutil@in@
+ \edef\pgfplotstable@colname@for@styles{{\the\t@pgfplots@tokb}}%
+ \else
+ \edef\pgfplotstable@colname@for@styles{\the\t@pgfplots@tokb}%
+ \fi
+ \edef\pgfplotstable@loc@TMPa{every column,\the\t@pgfplots@toka,columns/\pgfplotstable@colname@for@styles/.try}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPa}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@displaycolkey}%
+ \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}%
+ \fi
+ \expandafter\pgfplotstableset\expandafter{\pgfplotstable@loc@TMPa}%
+ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ \pgfkeysgetvalue{/pgfplots/table/column name}{\pgfplotstable@colname@out}%
+ \ifx\pgfplotstable@colname@out\pgfplotstabletypeset@nocolname
+ \let\pgfplotstable@colname@out=\pgfplotstable@colname
+ \fi
+ \expandafter\pgfplotstabletypeset@assign@final@colname\expandafter{\pgfplotstable@colname@out}\pgfplotstable@colname@out
+ %
+ \pgfplotstable@debug@notify@preprocess@col\pgfplotstable@colname@out
+ %
+ \expandafter\pgfplotslistpushbackglobal\pgfplotstable@colname@out\to\pgfplotstabletypeset@final@colnames
+ \pgfkeysgetvalue{/pgfplots/table/column type}{\pgfplotstable@coltype}%
+ \expandafter\pgfplotslistpushbackglobal\pgfplotstable@coltype\to\pgfplotstabletypeset@final@coltypes
+ %
+ \pgfplotslistnewempty\pgfplotstable@col@processed
+ \c@pgfplotstable@counta=0
+ \pgfplotslistforeachungrouped\pgfplotstable@col\as\pgfplotstable@entry{%
+ \pgfplotstableuserowtrue
+ \edef\pgfplotstable@loc@TMPa{\noexpand\pgfkeysvalueof{/pgfplots/table/row predicate/.@cmd}\the\c@pgfplotstable@rowindex}%
+ \pgfplotstable@loc@TMPa\pgfeov
+ \ifpgfplotstableuserow
+ \ifnum\pgfplotstable@firstnumrows=-1\relax
+ \else
+ \ifnum\c@pgfplotstable@counta<\pgfplotstable@firstnumrows\relax
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@entry}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@colname@out}%
+ \pgfplots@warning{Unbalanced cell with content '\the\t@pgfplots@toka' of column '\the\t@pgfplots@tokb' has been skipped: row count \the\c@pgfplotstable@counta+1 > \pgfplotstable@firstnumrows (which is the number of rows in the first column)}%
+ \pgfplotstableuserowfalse
+ \fi
+ \fi
+ \ifpgfplotstableuserow
+ \expandafter\pgfplotstabletypeset@getfinalentry\expandafter{\pgfplotstable@entry}{\pgfplotstable@entry}%
+ \expandafter\pgfplotslistpushback\pgfplotstable@entry\to\pgfplotstable@col@processed
+ \advance\c@pgfplotstable@counta by1\relax
+ \fi
+ \fi
+ \advance\c@pgfplotstable@rowindex by1\relax
+ }%
+ \ifnum\pgfplotstable@firstnumrows=-1\relax
+ \xdef\pgfplotstable@firstnumrows{\the\c@pgfplotstable@counta}%
+ \else
+ % balance columns:
+ \pgfplotstable@insertemptycells@forbalance
+ \fi
+ %
+ \pgfplotstable@debug@notify@preprocessed@col\pgfplotstable@colname@out
+ %
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotstable@col@processed}\to\pgfplotstabletypeset@final@cols
+ \global\advance\c@pgfplotstable@colindex by1\relax
+ }%
+ %
+ \pgfplotstable@disable@column@styles
+ %
+ \pgfplotslistcheckempty\pgfplotstabletypeset@final@colnames
+ \ifpgfplotslistempty
+ \let\pgfplotstable@result=\pgfutil@empty
+ \else
+ % Ok, I have now everything which will come into the final table.
+ %
+ % But I have it column-oriented; I need to transpose the storage.
+ %
+ % The following code assembles a
+ % \begin{tabular}{}
+ % ...
+ % \end{tabular}
+ % statement piece after piece.
+ %
+ %\message{I have now \meaning\pgfplotstabletypeset@final@colnames, and \meaning\pgfplotstabletypeset@final@cols.}%
+ % Step 1: column names.
+ \c@pgfplotstable@colindex=0\relax
+ \c@pgfplotstable@rowindex=-1\relax
+ \let\pgfplotstable@result=\pgfutil@empty
+ %
+ \pgfkeysgetvalue{/pgfplots/table/font}{\pgfplotstable@font}%
+ \ifx\pgfplotstable@font\pgfutil@empty
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@font}%
+ \edef\pgfplotstable@curline{\noexpand\begingroup\the\t@pgfplots@toka}%
+ \pgfplotstable@curline@FLUSH
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/table/begin table}{\pgfplotstable@entry}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@entry}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@toka}%
+ %
+ \ifpgfplotstabletypesetskipcoltypes
+ \else
+ % STEP 1.1: collect column types:
+ \def\pgfplotstable@resulttypes{}%
+ \pgfplotslistforeachungrouped\pgfplotstabletypeset@final@coltypes\as\pgfplotstable@coltype{%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@resulttypes}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@coltype}%
+ \edef\pgfplotstable@resulttypes{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ }%
+ \ifx\pgfplotstable@resulttypes\pgfutil@empty
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@resulttypes}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@toka{\the\t@pgfplots@tokb}}%
+ \fi
+ \fi
+ \ifx\pgfplotstable@curline\pgfutil@empty
+ \else
+ \pgfplotstable@curline@FLUSH
+ \fi
+ %
+ % Step 1.2: Collect FIRST ROW (column names)
+ \begingroup
+ \pgfplotstableset{every head row}%
+ \pgfkeysgetvalue{/pgfplots/table/before row}{\pgfplotstable@before}%
+ \pgfkeysgetvalue{/pgfplots/table/after row}{\pgfplotstable@after}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@before}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@after}%
+ \xdef\pgfplots@glob@TMPc{%
+ \noexpand\def\noexpand\pgfplotstable@before{\the\t@pgfplots@toka}%
+ \noexpand\def\noexpand\pgfplotstable@after{\the\t@pgfplots@tokb}%
+ }%
+ \pgfkeysgetvalue{/pgfplots/table/typeset cell/.@cmd}\pgfplots@loc@TMPa
+ \global\let\pgfplots@glob@TMPd=\pgfplots@loc@TMPa
+ \endgroup
+ \pgfplots@glob@TMPc
+ \let\pgfplotstable@headrow@typesetcell=\pgfplots@glob@TMPd
+ % insert 'before row' here:
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@before}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@curline}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+ %
+ \def\pgfplotstablecolname{\pgfplotstable@colname@out}%
+ \pgfplotslistforeachungrouped\pgfplotstabletypeset@final@colnames\as\pgfplotstable@colname@out{%
+ %
+ \advance\c@pgfplotstable@colindex by1\relax
+ % typeset the cell:
+ \expandafter\pgfplotstable@headrow@typesetcell\pgfplotstable@colname@out\pgfeov
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ %
+ % append this cell:
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \t@pgfplots@tokb=\expandafter{\pgfmathresult}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ }%
+ % insert 'after row' here:
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@after}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ %
+ \pgfplotstable@curline@FLUSH
+ %
+ %\message{I have now \meaning\pgfplotstable@result.}%
+ % Step 2: column contents.
+ % I will first convert \pgfplotstabletypeset@final@cols into an array.
+ \c@pgfplotstable@colindex=0\relax
+ \pgfplotsarraynewempty\pgfplotstabletypeset@final@cols@array
+ \pgfplotslistforeachungrouped\pgfplotstabletypeset@final@cols\as\pgfplotstable@col@processed{%
+ \expandafter\pgfplotsarraypushback\expandafter{\pgfplotstable@col@processed}\to\pgfplotstabletypeset@final@cols@array
+ }%
+ % init numrows:
+ \pgfplotsarrayselect\c@pgfplotstable@colindex\of\pgfplotstabletypeset@final@cols@array\to\pgfplotstable@col@processed
+ \pgfplotslistsize\pgfplotstable@col@processed\to\c@pgfplotstable@numrows
+ %
+ % Now, we loop over every column as long as there are still rows
+ % left. We assemble rows while we go.
+ %
+ \c@pgfplotstable@rowindex=0\relax
+ \ifnum\c@pgfplotstable@colindex<\c@pgfplotstable@numcols
+ \pgfplots@loop@CONTINUEtrue
+ \else
+ \pgfplots@loop@CONTINUEfalse
+ \fi
+ \def\pgfplotstablecolname{\pgfplotstable@error{Sorry, you can't evaluate \string\pgfplotstablecolname\space in this context.}}%
+ \pgfutil@loop
+ \ifpgfplots@loop@CONTINUE
+ \pgfplotsarrayselect\c@pgfplotstable@colindex\of\pgfplotstabletypeset@final@cols@array\to\pgfplotstable@col@processed
+ \pgfplotslistcheckempty\pgfplotstable@col@processed
+ \ifpgfplotslistempty
+ % assume that each column has the same number of entries
+ % (normalised tables):
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ \ifnum\c@pgfplotstable@colindex=0\relax
+ % Install styles for the next row.
+ \begingroup
+ \ifodd\c@pgfplotstable@rowindex
+ \t@pgfplots@toka={every odd row}%
+ \else
+ \t@pgfplots@toka={every even row}%
+ \fi
+ \ifnum\c@pgfplotstable@rowindex=0\relax
+ \t@pgfplots@toka=\expandafter{\the\t@pgfplots@toka,every first row}%
+ \fi
+ \ifpgfplotstable@disable@rowcolstyles
+ \else
+ \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,every row no \the\c@pgfplotstable@rowindex/.try}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPa}%
+ %
+ \ifnum\c@pgfplotstable@rowindex=0\relax
+ \else
+ % process 'every nth row' styles:
+ \begingroup
+ \pgfplots@each@nth@styles
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \t@pgfplots@tokb=\expandafter{\pgfplotsretval}%
+ \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPa}%
+ \fi
+ \fi
+ \fi
+ % misuse as temporary variable:
+ \c@pgfplotstable@colindex=\c@pgfplotstable@rowindex
+ \advance\c@pgfplotstable@colindex by1\relax
+ \ifnum\c@pgfplotstable@colindex=\c@pgfplotstable@numrows
+ \t@pgfplots@toka=\expandafter{\the\t@pgfplots@toka,every last row}%
+ \fi
+ \expandafter\pgfplotstableset\expandafter{\the\t@pgfplots@toka}%
+ \pgfkeysgetvalue{/pgfplots/table/before row}{\pgfplotstable@before}%
+ \pgfkeysgetvalue{/pgfplots/table/after row}{\pgfplotstable@after}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@before}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@after}%
+ \xdef\pgfplots@glob@TMPc{%
+ \noexpand\def\noexpand\pgfplotstable@before{\the\t@pgfplots@toka}%
+ \noexpand\def\noexpand\pgfplotstable@after{\the\t@pgfplots@tokb}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPc
+ % insert 'before row' here:
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@before}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@curline}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@tokb\the\t@pgfplots@toka}%
+ \fi
+ %
+ %
+ \pgfplotslistpopfront\pgfplotstable@col@processed\to\pgfplotstable@entry
+ \pgfplotsarrayletentry\c@pgfplotstable@colindex\of\pgfplotstabletypeset@final@cols@array=\pgfplotstable@col@processed
+ \advance\c@pgfplotstable@colindex by1\relax
+ % typeset the cell:
+ \pgfkeysgetvalue{/pgfplots/table/typeset cell/.@cmd}\pgfplots@loc@TMPa
+ \expandafter\pgfplots@loc@TMPa\pgfplotstable@entry\pgfeov
+ \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult
+ %
+ % append this cell:
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \t@pgfplots@tokb=\expandafter{\pgfmathresult}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ %
+ \ifnum\c@pgfplotstable@colindex=\c@pgfplotstable@numcols\relax
+ \c@pgfplotstable@colindex=0\relax
+ % insert 'after row' here:
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@after}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \advance\c@pgfplotstable@rowindex by1\relax
+ \pgfplotstable@curline@FLUSH
+ \fi
+ %\message{I have now \meaning\pgfplotstable@result.}%
+ \fi
+ \pgfutil@repeat
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@curline}%
+ \pgfkeysgetvalue{/pgfplots/table/end table}{\pgfplotstable@entry}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@entry}%
+ \edef\pgfplotstable@curline{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \ifx\pgfplotstable@curline\pgfutil@empty
+ \else
+ \pgfplotstable@curline@FLUSH
+ \fi
+ %
+ \ifx\pgfplotstable@font\pgfutil@empty
+ \else
+ \edef\pgfplotstable@curline{\noexpand\endgroup}%
+ \pgfplotstable@curline@FLUSH
+ \fi
+ \ifx\pgfplotstable@outfilename\pgfutil@empty
+ \else
+ \immediate\closeout\pgfplotstable@outfile
+ \fi
+ %\message{I have now \meaning\pgfplotstable@result.}%
+ \def\pgfplotstablecol{\pgfplotstable@error{Sorry, you can't access the \string\pgfplotstablecol\ in this context. It is ONLY valid during the preparation routines (please check the 'display columns/<index>' style in the manual).}}%
+ \def\pgfplotstablerow{\pgfplotstable@error{Sorry, you can't access the \string\pgfplotstablerow\ in this context. It is ONLY valid during the preparation routines (please check the 'every row no <index>' style).}}%
+ \ifpgfplotstabletypesetresult
+ \pgfplotstable@result
+ \fi
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/write to macro}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \global\let\pgfplots@glob@TMPa=\relax
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@result}%
+ \xdef\pgfplots@glob@TMPa{\noexpand\def\expandafter\noexpand\pgfplots@loc@TMPa{\the\t@pgfplots@toka}}%
+ \fi
+ \endgroup
+ \pgfplots@glob@TMPa% execute 'write to macro' if set.
+}%
+
+\def\pgfplotstable@disable@column@styles@error#1{%
+ \pgfplotsthrow{invalid argument}\pgfplots@loc@TMPa{Sorry, the key '#1' has been assigned while processing row options. However, it needs to be invoked while processing column options. If your options depend on specific row indices, consider using \string\pgfplotstablerow\space and \string\pgfplotstablerows}\pgfeov%
+}%
+\def\pgfplotstable@disable@column@styles@#1{%
+ \pgfkeysdef{/pgfplots/table/#1/.code}{\pgfplotstable@disable@column@styles@error{#1}}%
+ \pgfkeysdef{/pgfplots/table/#1/.append code}{\pgfplotstable@disable@column@styles@error{#1}}%
+ \pgfkeysdefargs{/pgfplots/table/#1/.add code}{##1##2}{\pgfplotstable@disable@column@styles@error{#1}}%
+ \pgfkeysdef{/pgfplots/table/#1/.append style}{\pgfplotstable@disable@column@styles@error{#1}}%
+}
+\def\pgfplotstable@disable@column@styles{%
+ \pgfplotstable@disable@column@styles@{postproc cell content}%
+ \pgfplotstable@disable@column@styles@{preproc cell content}%
+ \pgfplotstable@disable@column@styles@{assign cell content}%
+}%
+
+\newif\ifpgfplotstable@isfirstrow
+\newif\ifpgfplotstable@islastrow
+\newif\ifpgfplotstablecreatecol@isreallynew
+
+\def\pgfplotstablecreatecol@opt[#1]#2#3{%
+ \begingroup
+ \pgfkeysinterruptkeyfilter
+ \def\pgfplotstablename{#3}% the name of the table struct
+ \pgfplotstableset{columns=,#1,%
+ /pgf/fpu/handlers/empty number/.code 2 args={%
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ }%
+ }%
+ \pgfkeysgetvalue{/pgfplots/table/columns}{\pgfplotstable@colnames}%
+ \ifx\pgfplotstable@colnames\pgfutil@empty
+ \pgfplotstablegetcolumnlist#3\to\pgfplotstable@colnames
+ \else
+ \expandafter\pgfplotslistnew\expandafter\pgfplotstable@colnames\expandafter{\pgfplotstable@colnames}%
+ \fi
+ \pgfplotslistnewempty\pgfplotstable@colnames@real
+ \t@pgfplots@toka=\expandafter{#2}% this should handle macro names in '#2'.
+ \edef\pgfplotstable@newcolname{\the\t@pgfplots@toka}%
+ \global\pgfplotstablecreatecol@isreallynewtrue
+ \c@pgf@countd=0
+ \pgfplotslistforeachungrouped\pgfplotstable@colnames\as\pgfplotstable@colname{%
+ \pgfplotstable@is@colname\pgfplotstable@colname
+ \ifpgfplotstableread@foundcolnames
+ \expandafter\pgfplotslistpushback\expandafter{\pgfplotstable@colname}\to\pgfplotstable@colnames@real
+ \else
+ \pgfplotstablegetcolumnnamebyindex\pgfplotstable@colname\of#2\to\pgfplotstable@colname
+ \expandafter\pgfplotslistpushback\expandafter{\pgfplotstable@colname}\to\pgfplotstable@colnames@real
+ \fi
+ \ifx\pgfplotstable@colname\pgfplotstable@newcolname
+ \global\pgfplotstablecreatecol@isreallynewfalse
+ \fi
+ \expandafter\edef\csname pgfplotstablecreate@index@to@name@\the\c@pgf@countd\endcsname{\pgfplotstable@colname}%
+ \advance\c@pgf@countd by1
+ }%
+ \edef\pgfplotstablecols{\the\c@pgf@countd}%
+ \pgfplotstable@isfirstrowtrue
+ \pgfplotstable@islastrowfalse
+ \pgfplotslistnewempty\pgfplotstable@newcol
+ %
+ \let\c@pgfplotstable@numrows=\c@pgf@countd
+ \let\c@pgfplotstable@rowindex=\c@pgf@countc
+ \c@pgfplotstable@numrows=-1\relax
+ \c@pgfplotstable@rowindex=0\relax
+ \def\pgfplotstablerow{\the\c@pgfplotstable@rowindex}%
+ \def\pgfplotstablerows{\the\c@pgfplotstable@numrows}%
+ %
+ \def\prevrow##1{\pgfplotstable@thisrow@impl{##1}{pgfplotstablecreate@prev@}{\pgfplotstable@thisrow@impl@}}%
+ \def\thisrow##1{\pgfplotstable@thisrow@impl{##1}{pgfplotstablecreate@cur@}{\pgfplotstable@thisrow@impl@}}%
+ \def\nextrow##1{\pgfplotstable@thisrow@impl{##1}{pgfplotstablecreate@next@}{\pgfplotstable@thisrow@impl@}}%
+ \def\pgfplotstable@rowno@impl##1##2{%
+ \pgfutil@ifundefined{pgfplotstablecreate@index@to@name@##1}{%
+ \csname ##2row\endcsname{colindex##1}%
+ }{%
+ \csname ##2row\endcsname{\csname pgfplotstablecreate@index@to@name@##1\endcsname}%
+ }%
+ }%
+ \def\prevrowno##1{\pgfplotstable@rowno@impl{##1}{prev}}%
+ \def\thisrowno##1{\pgfplotstable@rowno@impl{##1}{this}}%
+ \def\nextrowno##1{\pgfplotstable@rowno@impl{##1}{next}}%
+ %
+ \def\getprevrow##1##2{\expandafter\let\expandafter##2\csname pgfplotstablecreate@prev@##1\endcsname}%
+ \def\getthisrow##1##2{\expandafter\let\expandafter##2\csname pgfplotstablecreate@cur@##1\endcsname}%
+ \def\getnextrow##1##2{\expandafter\let\expandafter##2\csname pgfplotstablecreate@next@##1\endcsname}%
+ %
+ \pgfplots@loop@CONTINUEtrue
+ % allow this here to accumulate something.
+ \pgfutil@ifundefined{pgfmathaccuma}{%
+ \let\pgfmathaccuma=\pgfutil@empty
+ }{}%
+ \pgfutil@ifundefined{pgfmathaccumb}{%
+ \let\pgfmathaccumb=\pgfutil@empty
+ }{}%
+ \pgfutil@loop% loop over each row until there are no more rows.
+ \ifpgfplots@loop@CONTINUE
+ \ifnum\c@pgfplotstable@numrows=-1\relax
+ \pgfplotslistfront\pgfplotstable@colnames\to\pgfplotstable@colname
+ \expandafter\pgfplotslistsize\csname\string#3@\pgfplotstable@colname\endcsname\to\c@pgfplotstable@numrows
+ \fi
+ \pgfplotslistforeachungrouped\pgfplotstable@colnames\as\pgfplotstable@colname{%
+ \expandafter\pgfplotstableresolvecolname\expandafter{\pgfplotstable@colname}\of#3\to\pgfplotstable@real@colname
+ \ifpgfplotstable@isfirstrow
+ \expandafter\pgfplotslistcheckempty\csname\string#3@\pgfplotstable@real@colname\endcsname
+ \ifpgfplotslistempty
+ % the table is completely empty. break.
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ \expandafter\let\csname pgfplotstablecreate@prev@\pgfplotstable@colname\endcsname=\pgfutil@empty
+ \expandafter\pgfplotslistpopfront\csname\string#3@\pgfplotstable@real@colname\endcsname\to\pgfplotstable@entry
+ \expandafter\let\csname pgfplotstablecreate@cur@\pgfplotstable@colname\endcsname=\pgfplotstable@entry
+ \fi
+ \else
+ \expandafter\let\expandafter\pgfplotstable@prev\csname pgfplotstablecreate@cur@\pgfplotstable@colname\endcsname
+ \expandafter\let\csname pgfplotstablecreate@prev@\pgfplotstable@colname\endcsname=\pgfplotstable@prev
+ %
+ \expandafter\let\expandafter\pgfplotstable@next\csname pgfplotstablecreate@next@\pgfplotstable@colname\endcsname
+ \expandafter\let\csname pgfplotstablecreate@cur@\pgfplotstable@colname\endcsname=\pgfplotstable@next
+ \fi
+ \expandafter\pgfplotslistcheckempty\csname\string#3@\pgfplotstable@real@colname\endcsname
+ \ifpgfplotslistempty
+ \expandafter\let\csname pgfplotstablecreate@next@\pgfplotstable@colname\endcsname=\pgfutil@empty
+ \pgfplotstable@islastrowtrue
+ \else
+ \expandafter\pgfplotslistpopfront\csname\string#3@\pgfplotstable@real@colname\endcsname\to\pgfplotstable@entry
+ \expandafter\let\csname pgfplotstablecreate@next@\pgfplotstable@colname\endcsname=\pgfplotstable@entry
+ \fi
+ }%
+ \ifpgfplots@loop@CONTINUE
+ % Compute content:
+ %
+ \begingroup
+ \ifpgfplotstable@isfirstrow
+ \pgfkeysvalueof{/pgfplots/table/create col/assign first/.@cmd}\pgfeov
+ \else
+ \ifpgfplotstable@islastrow
+ \pgfkeysvalueof{/pgfplots/table/create col/assign last/.@cmd}\pgfeov
+ \else
+ \pgfkeysvalueof{/pgfplots/table/create col/assign/.@cmd}\pgfeov
+ \fi
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/create col/next content}{\pgfplotstable@entry}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@entry}%
+ \t@pgfplots@tokb=\expandafter{\pgfmathaccuma}%
+ \xdef\pgfplots@glob@TMPc{%
+ \noexpand\def\noexpand\pgfplotstable@entry{\the\t@pgfplots@toka}%
+ \noexpand\def\noexpand\pgfmathaccuma{\the\t@pgfplots@tokb}%
+ }%
+ \pgfmath@smuggleone\pgfmathaccumb
+ \endgroup
+ \pgfplots@glob@TMPc
+ \expandafter\pgfplotslistpushback\expandafter{\pgfplotstable@entry}\to\pgfplotstable@newcol
+ %
+ \ifpgfplotstable@islastrow
+ \pgfplots@loop@CONTINUEfalse
+ \fi
+ \fi
+ \pgfplotstable@isfirstrowfalse
+ \advance\c@pgfplotstable@rowindex by1\relax
+ \pgfutil@repeat
+ \endpgfkeysinterruptkeyfilter
+ \global\let\pgfplots@glob@TMPc=\pgfplotstable@newcol
+ \global\let\pgfplots@glob@TMPb=\pgfplotstable@newcolname
+ \endgroup
+ \ifpgfplotstablecreatecol@isreallynew
+ \expandafter\pgfplotslistpushback\expandafter{\pgfplots@glob@TMPb}\to#3%
+ \fi
+ \expandafter\let\csname\string#3@\pgfplots@glob@TMPb\endcsname=\pgfplots@glob@TMPc
+}%
+
+
+%-----------------------------------------------------------
+%
+% Implementation of '/pgfplots/table/create col/function graph cut y':
+%
+%-----------------------------------------------------------
+
+% create on use/cut/.style={create col/function graph cut y={7e-4}{x=Basis,ymode=log,xmode=log}{{table=regtable,y=special-L2}}},
+% #1 = value of fixed line (I call it epsilon)
+% #2 = options
+% #3 = specification where to get the y from. It is a comma separated
+% list of key-value sets, on set for every y(x) graph which shall be
+% used.
+% #4 = the direction in which the line does NOT vary (either 'x' or 'y')
+% #5 = the direction in which the line DOES vary (either 'x' or 'y')
+\def\pgfplotstable@fgc@init#1#2#3#4#5{%
+ \def\pgfplotstable@fgc@xmode{0}%
+ \def\pgfplotstable@fgc@ymode{0}%
+ %
+ \pgfkeysalso{/pgf/fpu=true}%
+ %
+ \pgfqkeys{/pgfplots/table/create col/function graph cut}{#2}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/table}\pgfplotstable@fgc@table
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/x}\pgfplotstable@fgc@x
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/y}\pgfplotstable@fgc@y
+ \ifx\pgfplotstable@fgc@table\pgfutil@empty
+ % no table here, ok.
+ \else
+ % ok, we need to query (or load) a table!
+ \expandafter\pgfplotstable@isloadedtable\expandafter{\pgfplotstable@fgc@table}{%
+ \expandafter\let\expandafter\pgfplotstable@fgc@table\pgfplotstable@fgc@table
+ }{%
+ \expandafter\pgfplotstableread\expandafter{\pgfplotstable@fgc@table}{\pgfplotstable@fgc@table}%
+ }%
+ \fi
+ %
+ \ifnum\csname pgfplotstable@fgc@#4mode\endcsname=1
+ \pgfmathparse{ln(#1)}%
+ \else
+ \pgfmathparse{#1}%
+ \fi
+ \let\pgfplotstable@fgc@eps=\pgfmathresult
+ \pgfplots@assign@list\pgfmathaccumb{#3}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/foreach}\pgfplotstable@fgc@foreach@
+ \ifx\pgfplotstable@fgc@foreach@\pgfutil@empty
+ \else
+ \edef\pgfplotstable@fgc@foreach@process@append{x={\pgfplotstable@fgc@x},y={\pgfplotstable@fgc@y}}%
+ % we have something like
+ % foreach={\d in {1,2,3,4}}{table\d}
+ % -> process it!
+ % This will modify \pgfmathaccumb
+ \expandafter\pgfplotstable@fgc@foreach@process\pgfplotstable@fgc@foreach@\pgfplots@EOI
+ \pgfkeyssetvalue{/pgfplots/table/create col/function graph cut/foreach}{}%
+ \fi
+ %
+ \pgfkeysdef{/pgfplots/table/create col/assign}{%
+%\message{working on next cell ...}%
+ \pgfplotslistcheckempty\pgfmathaccumb
+ \ifpgfplotslistempty
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfutil@empty%
+ \else
+ \pgfplotslistpopfront\pgfmathaccumb\to\pgfmathresult
+%\message{working on next cell: \meaning\pgfmathresult ...}%
+ \global\let\pgfplotstable@fgc@foreach=\pgfutil@empty
+ \begingroup
+ % set local keys:
+ \def\pgfplots@loc@TMPa{\pgfqkeys{/pgfplots/table/create col/function graph cut}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+ % acquire any sources:
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/table}\pgfplotstable@fgc@table
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/x}\pgfplotstable@fgc@x
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/y}\pgfplotstable@fgc@y
+ \pgfkeysgetvalue{/pgfplots/table/create col/function graph cut/foreach}\pgfplotstable@fgc@foreach@
+ \ifx\pgfplotstable@fgc@foreach@\pgfutil@empty
+ \ifx\pgfplotstable@fgc@table\pgfutil@empty
+ \else
+ % ok, we need to query (or load) a table!
+ \expandafter\pgfplotstable@isloadedtable\expandafter{\pgfplotstable@fgc@table}{%
+ \expandafter\let\expandafter\pgfplotstable@fgc@table\pgfplotstable@fgc@table
+ }{%
+ \expandafter\pgfplotstableread\expandafter{\pgfplotstable@fgc@table}{\pgfplotstable@fgc@table}%
+ }%
+ \fi
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplotstable@fgc@x}\of\pgfplotstable@fgc@table\to\pgfplotstable@fgc@x@col
+ \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplotstable@fgc@y}\of\pgfplotstable@fgc@table\to\pgfplotstable@fgc@y@col
+ %
+ % search for epsilon in the y values:
+ \expandafter\pgfplotstable@fgc@findintervalwitheps\expandafter{\csname pgfplotstable@fgc@#4@col\endcsname}{\csname pgfplotstable@fgc@#4mode\endcsname}%
+ \ifx\pgfplotstable@fgc@second\pgfutil@empty
+ \let\pgfmathresult=\pgfutil@empty
+ \else
+ %
+ % acquire the associated x values:
+ \expandafter\pgfplotstable@fgc@getassociated\expandafter{\csname pgfplotstable@fgc@#5@col\endcsname}{\csname pgfplotstable@fgc@#5mode\endcsname}%
+ %
+ % Interpolate:
+ \pgfmathparse{
+ \pgfplotstable@fgc@abscissafirst +
+ (\pgfplotstable@fgc@eps - \pgfplotstable@fgc@first) / (\pgfplotstable@fgc@second-\pgfplotstable@fgc@first)
+ * (\pgfplotstable@fgc@abscissasecond - \pgfplotstable@fgc@abscissafirst) }%
+ \if\pgfplotstable@fgc@xmode1
+ \pgfmathfloatexp@{\pgfmathresult}%
+ \fi
+ \pgflibraryfpuifactive{\pgfmathfloattosci{\pgfmathresult}}{}%
+%\message{FGC: found \pgfplotstable@fgc@eps\space in no \pgfplotstable@fgc@index; \pgfplotstable@fgc@first:\pgfplotstable@fgc@second; lastwasless=\pgfplotstable@fgc@lastwasless; abscissa interval = \pgfplotstable@fgc@abscissafirst:\pgfplotstable@fgc@abscissasecond; result = \pgfmathresult}%
+ \fi
+ \else
+ \global\let\pgfplotstable@fgc@foreach=\pgfplotstable@fgc@foreach@
+ \edef\pgfmathresult{x={\pgfplotstable@fgc@x},y={\pgfplotstable@fgc@y}}%
+ \fi
+ %
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \ifx\pgfplotstable@fgc@foreach\pgfutil@empty
+ \pgfkeyslet{/pgfplots/table/create col/next content}\pgfmathresult%
+ \else
+ % we have something like
+ % foreach={\d in {1,2,3,4}}{table\d}
+ % -> process it!
+ % This will modify \pgfmathaccumb
+ \let\pgfplotstable@fgc@foreach@process@append=\pgfmathresult
+ \expandafter\pgfplotstable@fgc@foreach@process\pgfplotstable@fgc@foreach\pgfplots@EOI
+ \fi
+ \fi
+ }%
+}%
+
+\def\pgfplotstable@fgc@foreach@process{%
+ \pgfutil@ifnextchar\bgroup
+ {\pgfplotstable@fgc@foreach@process@a}{%
+ \pgfplotstable@fgc@foreach@process@error}%
+}%
+\def\pgfplotstable@fgc@foreach@process@a#1{%
+ \pgfutil@ifnextchar\bgroup
+ {\pgfplotstable@fgc@foreach@process@b{#1}}{%
+ \pgfplotstable@fgc@foreach@process@error}%
+}%
+\def\pgfplotstable@fgc@foreach@process@error#1\pgfplots@EOI{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, I expected two arguments for /pgfplots/table/create col/function graph cut/foreach, but I found 'foreach=\pgfplots@loc@TMPb'. Perhaps the braces are not as expected?}\pgfeov%
+}%
+\def\pgfplotstable@fgc@foreach@process@b#1#2#3\pgfplots@EOI{%
+ \global\pgfplotslistnewempty\pgfplots@glob@TMPa
+ \begingroup
+ \foreach #1 {%
+ \edef\pgfplots@loc@TMPa{#2}%
+ \expandafter\pgfplotslistpushfrontglobal\pgfplots@loc@TMPa\to\pgfplots@glob@TMPa
+ }%
+ \endgroup
+ \pgfplotslistforeachungrouped\pgfplots@glob@TMPa\as\pgfplots@loc@TMPa{%
+ \edef\pgfplots@loc@TMPa{table={\pgfplots@loc@TMPa},\pgfplotstable@fgc@foreach@process@append}%
+ \expandafter\pgfplotslistpushfront\pgfplots@loc@TMPa\to\pgfmathaccumb
+ }%
+}%
+
+% #1 : the coordinate list to query
+% #2 : the mode
+%
+% POSTCONDITION:
+% - \pgfplotstable@fgc@abscissafirst and \pgfplotstable@fgc@abscissasecond
+% contain the abscissa values
+%
+\def\pgfplotstable@fgc@getassociated#1#2{%
+ \c@pgfplotstable@counta=\pgfplotstable@fgc@index
+ \pgfplotslistselect\c@pgfplotstable@counta\of#1\to\pgfplotstable@fgc@abscissasecond
+ \advance\c@pgfplotstable@counta by-1
+ \pgfplotslistselect\c@pgfplotstable@counta\of#1\to\pgfplotstable@fgc@abscissafirst
+ \pgfmathfloatparsenumber{\pgfplotstable@fgc@abscissafirst}%
+ \let\pgfplotstable@fgc@abscissafirst=\pgfmathresult
+ \pgfmathfloatparsenumber{\pgfplotstable@fgc@abscissasecond}%
+ \let\pgfplotstable@fgc@abscissasecond=\pgfmathresult
+ \if1#2
+ \pgfmathln@{\pgfplotstable@fgc@abscissafirst}%
+ \let\pgfplotstable@fgc@abscissafirst=\pgfmathresult
+ \pgfmathln@{\pgfplotstable@fgc@abscissasecond}%
+ \let\pgfplotstable@fgc@abscissasecond=\pgfmathresult
+ \fi
+}%
+
+% Search for the (first) interval in #1 containing epsilon and return
+% \pgfplotstable@fgc@first and \pgfplotstable@fgc@second.
+%
+% #1 : the list of values.
+% #2 : the mode (0 = linear, 1 = log)
+%
+% PRECONDITION:
+% - \pgfplotstable@fgc@eps contains the value to search for
+%
+% POSTCONDITION
+% On success,
+% - \pgfplotstable@fgc@first and \pgfplotstable@fgc@second contain the interval.
+% - \pgfplotstable@fgc@index contains the index of the @second coordinate.
+% - \pgfplotstable@fgc@lastwasless is
+% 1 if \pgfplotstable@fgc@second < eps
+% 0 if \pgfplotstable@fgc@second >= eps
+% If there was no such interval,
+% \pgfplotstable@fgc@second will be empty.
+\def\pgfplotstable@fgc@findintervalwitheps#1#2{%
+ \global\let\pgfplotstable@fgc@first=\pgfutil@empty
+ \global\let\pgfplotstable@fgc@second=\pgfutil@empty
+ \global\def\pgfplotstable@fgc@lastwasless{2}%
+ \global\def\pgfplotstable@fgc@break{0}%
+ \global\def\pgfplotstable@fgc@index{0}%
+ \pgfplotslistforeach#1\as\pgfplotstable@fgc@val{%
+ \if\pgfplotstable@fgc@break0
+ \pgfmathfloatparsenumber{\pgfplotstable@fgc@val}%
+ \let\pgfplotstable@fgc@val=\pgfmathresult
+ \ifnum#2=1
+ \pgfmathln@{\pgfplotstable@fgc@val}%
+ \let\pgfplotstable@fgc@val=\pgfmathresult
+ \fi
+ \pgfmathfloatlessthan@{\pgfplotstable@fgc@val}{\pgfplotstable@fgc@eps}%
+ \ifpgfmathfloatcomparison
+ \pgfplotstable@fgc@findintervalwitheps@updateresult 01%
+ \else
+ \pgfplotstable@fgc@findintervalwitheps@updateresult 10%
+ \fi
+ \fi
+ }%
+}%
+
+% #1 : the value of \pgfplotstable@fgc@lastwasless for which the loop
+% shall break.
+% #2 : the next value for \pgfplotstable@fgc@lastwasless
+\def\pgfplotstable@fgc@findintervalwitheps@updateresult#1#2{%
+ \if\pgfplotstable@fgc@lastwasless#1
+ % found it !
+ \global\let\pgfplotstable@fgc@second=\pgfplotstable@fgc@val
+ \global\def\pgfplotstable@fgc@break{1}%
+ \else
+ \global\let\pgfplotstable@fgc@first=\pgfplotstable@fgc@val
+ \c@pgfplotstable@counta=\pgfplotstable@fgc@index
+ \advance\c@pgfplotstable@counta by1
+ \xdef\pgfplotstable@fgc@index{\the\c@pgfplotstable@counta}%
+ \fi
+ \global\def\pgfplotstable@fgc@lastwasless{#2}%
+}%
+
+
+
+\def\pgfplotstabletranspose@[#1]#2#3{%
+ %\begingroup is already in \pgfplotstabletranspose
+ \def\pgfplotstable@loc@TMPa{#1}%
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotstableset{#1}%
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/table/colnames from}\pgfplotstabletranspose@outcolnames
+ \pgfkeysgetvalue{/pgfplots/table/input colnames to}\pgfplotstabletranspose@incolnames
+ \pgfkeysgetvalue{/pgfplots/table/columns}\pgfplotstable@colnames
+ %
+ \ifx\pgfplotstable@colnames\pgfutil@empty
+ \pgfplotstableforeachcolumn{#3}\as\pgfplots@colname{%
+ \t@pgfplots@toka=\expandafter{\pgfplots@colname}%
+ \ifnum\pgfplotstablecol=0
+ \edef\pgfplotstable@colnames{{\the\t@pgfplots@toka}}%
+ \else
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@colnames}%
+ \edef\pgfplotstable@colnames{\the\t@pgfplots@tokb,{\the\t@pgfplots@toka}}%
+ \fi
+ }%
+ \fi
+ %
+ % sanity checking:
+ \ifx\pgfplotstabletranspose@outcolnames\pgfutil@empty
+ \else
+ \def\pgfplotstabletranspose@outcolnames@foundit{0}%
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplotstable@colnames}\as\pgfplots@colname{%
+ \ifx\pgfplots@colname\pgfplotstabletranspose@outcolnames
+ \def\pgfplotstabletranspose@outcolnames@foundit{1}%
+ \fi
+ }%
+ \if1\pgfplotstabletranspose@outcolnames@foundit
+ \else
+ % insert the 'colnames from' column into 'columns':
+ \pgfplots@warning{table transposition: the 'colnames from=\pgfplotstabletranspose@outcolnames' is not part of 'columns'. Adding it.}%
+ \t@pgfplots@toka=\expandafter{\pgfplotstabletranspose@outcolnames}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@colnames}%
+ \edef\pgfplotstable@colnames{\the\t@pgfplots@tokb,{\the\t@pgfplots@toka}}%
+ \fi
+ \fi
+ %
+ % The column NAMES are collected into this list:
+ \global\pgfplotslistnewempty\pgfplotstable@colnames@glob
+ % this thing counts output columns:
+ \let\c@pgfplotstable@numoutcols=\c@pgf@countd
+ \c@pgfplotstable@numoutcols=0
+ \let\c@pgfplotstable@rowindex=\c@pgf@counta
+ \c@pgfplotstable@rowindex=0
+ %
+ \ifx\pgfplotstabletranspose@incolnames\pgfutil@empty
+ \else
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotstabletranspose@incolnames}\to\pgfplotstable@colnames@glob
+ \def\pgfplots@loc@TMPa{\pgfplotsapplistXnewempty[to global]}%
+ \expandafter\pgfplots@loc@TMPa\csname pgfp@numtable@glob@col@0\endcsname
+ \advance\c@pgfplotstable@numoutcols by1
+ \fi
+ \def\pgfplotstable@isfirstcol{1}%
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplotstable@colnames}\as\pgfplots@colname{%
+ \c@pgfplotstable@rowindex=0
+ \ifx\pgfplotstabletranspose@incolnames\pgfutil@empty
+ \else
+ \def\pgfplotstabletranspose@useit{1}%
+ \ifx\pgfplotstabletranspose@outcolnames\pgfutil@empty
+ \else
+ \ifx\pgfplotstabletranspose@outcolnames\pgfplots@colname
+ \def\pgfplotstabletranspose@useit{0}%
+ \fi
+ \fi
+ \if1\pgfplotstabletranspose@useit
+ \expandafter\pgfplotslist@assembleentry\expandafter{\pgfplots@colname}\into\t@pgfplots@tokc
+ \def\pgfplotstableread@TMP{\expandafter\pgfplotsapplistXpushback\expandafter{\the\t@pgfplots@tokc}\to}%
+ \expandafter\pgfplotstableread@TMP\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@rowindex\endcsname
+ \fi
+ \advance\c@pgfplotstable@rowindex by1
+ \fi
+ %
+ \pgfplotstableforeachcolumnelement\pgfplots@colname\of#3\as\pgfplots@cell{%
+ \if1\pgfplotstable@isfirstcol
+ % prepare a new column for the output:
+ \def\pgfplots@loc@TMPa{\pgfplotsapplistXnewempty[to global]}%
+ \expandafter\pgfplots@loc@TMPa\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@rowindex\endcsname
+ %
+ \ifx\pgfplotstabletranspose@outcolnames\pgfutil@empty
+ \edef\pgfplotstable@loc@TMPa{\pgfplotstablerow}%
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotstable@loc@TMPa}\to\pgfplotstable@colnames@glob
+ \fi
+ \advance\c@pgfplotstable@numoutcols by1
+ \fi
+ \def\pgfplotstabletranspose@useit{1}%
+ \ifx\pgfplotstabletranspose@outcolnames\pgfutil@empty
+ \else
+ \ifx\pgfplotstabletranspose@outcolnames\pgfplots@colname
+ \pgfutil@ifundefined{pgfplotstabletranspose@@\pgfplots@cell}{%
+ }{%
+ \let\pgfplots@loc@TMPa=\pgfplots@cell
+ \pgfplotsthrow{non unique colname}{\pgfplots@loc@TMPa}{Sorry, 'colnames from=\pgfplotstabletranspose@outcolnames' doesn't yield unique column names (`\pgfplots@cell' comes twice)}\pgfeov%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \edef\pgfplots@cell{row no \pgfplotstablerow}%
+ \fi
+ }%
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplots@cell}\to\pgfplotstable@colnames@glob
+ \expandafter\def\csname pgfplotstabletranspose@@\pgfplots@cell\endcsname{1}%
+ \def\pgfplotstabletranspose@useit{0}%
+ \fi
+ \fi
+ \if1\pgfplotstabletranspose@useit
+ % append everything to the output column with index
+ % \pgfplotstablerow
+ \expandafter\pgfplotslist@assembleentry\expandafter{\pgfplots@cell}\into\t@pgfplots@tokc
+ \def\pgfplotstableread@TMP{\expandafter\pgfplotsapplistXpushback\expandafter{\the\t@pgfplots@tokc}\to}%
+ \expandafter\pgfplotstableread@TMP\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@rowindex\endcsname
+ \fi
+ \advance\c@pgfplotstable@rowindex by1
+ }%
+ \def\pgfplotstable@isfirstcol{0}%
+ }%
+ %
+ % flush the buffers of the applistX things:
+ \c@pgfplotstable@rowindex=0
+ \pgfutil@loop
+ \ifnum\c@pgfplotstable@rowindex<\c@pgfplotstable@numoutcols
+ \expandafter\pgfplotsapplistXflushbuffers\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@rowindex\endcsname
+ \advance\c@pgfplotstable@rowindex by1
+ \pgfutil@repeat
+ % finalize the global buffers:
+ \def\pgfplotsscanlinelength{-1}%
+ \edef\pgfplots@loc@TMPa{\pgfplotstablenameof{#3}_transposed}%
+ \expandafter\pgfplotstable@copy@to@globalbuffers@simple\expandafter{\pgfplots@loc@TMPa}%
+ \endgroup
+ \pgfplotstable@copy@globalbuffers@to{#2}%
+}%
+
+% #1: keys
+\def\pgfplotstable@linear@regression#1{%
+ \begingroup
+ \pgfqkeys{/pgfplots/table/create col/linear regression}{/pgf/fpu,#1}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/x}{\pgfplotstable@xsrc}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/y}{\pgfplotstable@ysrc}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/table}{\pgfplotstable@table}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/xmode}{\pgfplotstable@xmode}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/ymode}{\pgfplotstable@ymode}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/variance}{\pgfplotstable@variance@colname}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/variance list}{\pgfplotstable@variance@list}%
+ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/variance src}{\pgfplotstable@variance@table}%
+ %
+ \ifx\pgfplotstable@table\pgfutil@empty
+ \pgfutil@ifundefined{pgfplotstablename}{}{% query the name of the actual table struct
+ \let\pgfplotstable@table=\pgfplotstablename
+ }%
+ \fi
+ \ifx\pgfplotstable@table\pgfutil@empty
+ \pgfplots@error{Sorry, I couldn't determine a value for create col/linear regression/table. Which table should I load?}%
+ \fi
+ \ifx\pgfplotstable@xsrc\pgfutil@empty
+ \pgfplotsifinaddplottablestruct{%
+ \pgfutil@ifundefined{pgfplots@plot@tbl@x}{}{%
+ \let\pgfplotstable@xsrc=\pgfplots@plot@tbl@x
+ \ifx\pgfplotstable@ysrc\pgfutil@empty
+ \pgfplotstablegetcolsof\pgfplots@table
+ \ifnum\pgfplotsretval=2
+ \else
+ \pgfplotsthrow{invalid argument}{\pgfplotstable@ysrc}{Sorry, I don't which column should be used as `y' for the linear regression. Please provide 'linear regression={y=<colname>}'}\pgfeov%
+ \fi
+ \fi
+ }%
+ }{}%
+ \fi
+ \ifx\pgfplotstable@xsrc\pgfutil@empty
+ \def\pgfplotstable@xsrc{[index]0}%
+ \fi
+ \ifx\pgfplotstable@ysrc\pgfutil@empty
+ \def\pgfplotstable@ysrc{[index]1}%
+ \fi
+ %
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@table}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@xsrc}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotstable@ysrc}%
+ \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@tokb}\noexpand\of{\the\t@pgfplots@toka}}%
+ \edef\pgfplots@loc@TMPb{{\the\t@pgfplots@tokc}\noexpand\of{\the\t@pgfplots@toka}}%
+ \expandafter\pgfplotstablegetcolumn\pgfplots@loc@TMPa\to\pgfplotstable@X
+ \expandafter\pgfplotstablegetcolumn\pgfplots@loc@TMPb\to\pgfplotstable@Y
+ %
+ \edef\pgfplotstable@xmode{\pgfplotstable@xmode}%
+ \expandafter\pgfplotstable@linear@regression@prepare@mode\expandafter{\pgfplotstable@xmode}{x}%%
+ \edef\pgfplotstable@ymode{\pgfplotstable@ymode}%
+ \expandafter\pgfplotstable@linear@regression@prepare@mode\expandafter{\pgfplotstable@ymode}{y}%%
+ %
+ \ifx\pgfplotstable@variance@list\pgfutil@empty
+ % check 'variance' key (loaded from table)
+ \pgfplotslistnewempty\pgfplotstable@VARIANCE
+ \ifx\pgfplotstable@variance@colname\pgfutil@empty
+ \else
+ \ifx\pgfplotstable@variance@table\pgfutil@empty
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@table}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@variance@colname}%
+ \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@tokb}\noexpand\of{\the\t@pgfplots@toka}}%
+ \expandafter\pgfplotstablegetcolumn\pgfplots@loc@TMPa\to\pgfplotstable@VARIANCE
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@variance@colname}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@variance@table}%
+ \edef\pgfplotstable@loc@TMPa{%
+ \noexpand\pgfplotstablegetcolumn{\the\t@pgfplots@toka}\noexpand\of{\the\t@pgfplots@tokb}\noexpand\to\noexpand\pgfplotstable@VARIANCE}%
+ \pgfplotstable@loc@TMPa
+ \fi
+ \fi
+ \else
+ % load from list:
+ \expandafter\pgfplotslistnew\expandafter\pgfplotstable@VARIANCE\expandafter{\pgfplotstable@variance@list}%
+ \fi
+ %
+ \pgfplotslistnewempty\pgfplotstable@Xparsed
+ %
+ \pgfmathfloatcreate{0}{0.0}{0}%
+ \let\pgfplotstable@S=\pgfmathresult
+ \let\pgfplotstable@Sxx=\pgfmathresult
+ \let\pgfplotstable@Sx=\pgfmathresult
+ \let\pgfplotstable@Sy=\pgfmathresult
+ \let\pgfplotstable@Sxy=\pgfmathresult
+ \pgfutil@loop
+ \pgfplotslistcheckempty\pgfplotstable@X
+ \ifpgfplotslistempty
+ \pgfplots@loop@CONTINUEfalse
+ \else
+ \pgfplots@loop@CONTINUEtrue
+ \fi
+ \ifpgfplots@loop@CONTINUE
+ \pgfplotslistpopfront\pgfplotstable@X\to\pgfplotstable@x
+ \pgfplotslistpopfront\pgfplotstable@Y\to\pgfplotstable@y
+ %
+ \pgfplotstableparsex{\pgfplotstable@x}%
+ \let\pgfplotstable@x=\pgfmathresult
+ \expandafter\pgfplotslistpushback\pgfmathresult\to\pgfplotstable@Xparsed
+ \pgfplotstableparsey{\pgfplotstable@y}%
+ \let\pgfplotstable@y=\pgfmathresult
+ %
+ \pgfplotslistcheckempty\pgfplotstable@VARIANCE
+ \ifpgfplotslistempty
+ \pgfmathfloatcreate{1}{1.0}{0}%
+ \let\pgfplotstable@invsqr=\pgfmathresult
+ \else
+ \pgfplotslistpopfront\pgfplotstable@VARIANCE\to\pgfplotstable@variance
+ \pgfmathfloatparsenumber{\pgfplotstable@variance}%
+ \let\pgfplotstable@variance=\pgfmathresult
+ \pgfmathfloatmultiply@{\pgfplotstable@variance}{\pgfplotstable@variance}%
+ \let\pgfplotstable@sqr=\pgfmathresult
+ \pgfmathfloatreciprocal@{\pgfplotstable@sqr}%
+ \let\pgfplotstable@invsqr=\pgfmathresult
+ \fi
+ %
+ \pgfmathfloatadd@{\pgfplotstable@S}{\pgfplotstable@invsqr}%
+ \let\pgfplotstable@S=\pgfmathresult
+ %
+ \pgfmathfloatmultiply@{\pgfplotstable@x}{\pgfplotstable@invsqr}%
+ \let\pgfplots@table@accum=\pgfmathresult
+ \pgfmathfloatadd@{\pgfplotstable@Sx}{\pgfplots@table@accum}%
+ \let\pgfplotstable@Sx=\pgfmathresult
+ %
+ \pgfmathfloatmultiply@{\pgfplotstable@x}{\pgfplots@table@accum}%
+ \let\pgfplots@table@accum=\pgfmathresult
+ \pgfmathfloatadd@{\pgfplotstable@Sxx}{\pgfplots@table@accum}%
+ \let\pgfplotstable@Sxx=\pgfmathresult
+ %
+ \pgfmathfloatmultiply@{\pgfplotstable@y}{\pgfplotstable@invsqr}%
+ \let\pgfplots@table@accum=\pgfmathresult
+ \pgfmathfloatadd@{\pgfplotstable@Sy}{\pgfplots@table@accum}%
+ \let\pgfplotstable@Sy=\pgfmathresult
+ %
+ \pgfmathfloatmultiply@{\pgfplotstable@x}{\pgfplots@table@accum}%
+ \let\pgfplots@table@accum=\pgfmathresult
+ \pgfmathfloatadd@{\pgfplotstable@Sxy}{\pgfplots@table@accum}%
+ \let\pgfplotstable@Sxy=\pgfmathresult
+ \pgfutil@repeat
+ %
+ \pgfmathparse{\pgfplotstable@S * \pgfplotstable@Sxx - \pgfplotstable@Sx *\pgfplotstable@Sx}%
+ \let\pgfplotstable@delta=\pgfmathresult
+ %
+ \pgfmathparse{(\pgfplotstable@S * \pgfplotstable@Sxy - \pgfplotstable@Sx * \pgfplotstable@Sy) / \pgfplotstable@delta}%
+ \let\pgfplotstable@a=\pgfmathresult
+ %
+ \pgfmathparse{(\pgfplotstable@Sxx * \pgfplotstable@Sy - \pgfplotstable@Sx * \pgfplotstable@Sxy) / \pgfplotstable@delta}%
+ \let\pgfplotstable@b=\pgfmathresult
+ %
+ \pgfplotslistnewempty\pgfplotstable@RESULT
+ \pgfplotslistforeachungrouped\pgfplotstable@Xparsed\as\pgfplotstable@x{%
+ \pgfmathfloatmultiply@{\pgfplotstable@x}{\pgfplotstable@a}%
+ \let\pgfplotstable@tmp=\pgfmathresult
+ \pgfmathfloatadd@{\pgfplotstable@tmp}{\pgfplotstable@b}%
+ \ifx\pgfplotstableparseylogbase\pgfutil@empty
+ \else
+ \pgfplotstableparseyinv@{\pgfmathresult}%
+ \fi
+ \pgfmathfloattosci{\pgfmathresult}%
+ \expandafter\pgfplotslistpushback\pgfmathresult\to\pgfplotstable@RESULT
+ }%
+ \pgfmathfloattosci\pgfplotstable@a
+ \let\pgfplotstable@a=\pgfmathresult
+ %
+ \pgfmathfloattosci\pgfplotstable@b
+ \let\pgfplotstable@b=\pgfmathresult
+ %
+ \global\let\pgfplotstableregressiona\pgfplotstable@a%
+ \global\let\pgfplotstableregressionb\pgfplotstable@b%
+ \let\pgfplotsretval=\pgfplotstable@RESULT
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotstable@linear@regression@prepare@mode#1#2{%
+ \expandafter\def\csname pgfplotstableparse#2\endcsname##1{\pgfmathfloatparsenumber{##1}}%
+ \expandafter\def\csname pgfplotstableparse#2logbase\endcsname{}%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \def\pgfplots@loc@TMPb{auto}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \def\pgfplots@loc@TMPa{}% auto == empty string
+ \fi
+ %
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ % `auto' mode.
+ \pgfplotsifinaxis{%
+ \pgfplots@if{pgfplots@#2islinear}{%
+ \def\pgfplots@loc@TMPa{linear}%
+ }{%
+ \def\pgfplots@loc@TMPa{log}%
+ }%
+ }{%
+ \def\pgfplots@loc@TMPa{linear}%
+ }%
+ \fi
+ %
+ \def\pgfplots@loc@TMPb{linear}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \else
+ \def\pgfplots@loc@TMPb{log}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfplotsmathdefinemacrolnbase{pgfplotstableparse#2}{\pgfkeysvalueof{/pgfplots/log basis #2}}%
+ \else
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, the value '#1' is unexpected for 'linear regression/#2mode'}\pgfeov%
+ \fi
+ \fi
+}%
+
+
+% Sorts table #3 according to options defined in #1 and writes result
+% to #2.
+%
+% \pgfplotstablesort[sort key=<colname>]\result{<input table>}
+% \pgfplotstablesort[sort key=<colname>,sort key source=<\table>]\result{<input table>}
+\def\pgfplotstablesort{\pgfutil@ifnextchar[{\pgfplotstablesort@opt}{\pgfplotstablesort@opt[]}}
+\def\pgfplotstablesort@opt[#1]#2{%
+ \begingroup
+ \pgfplotstableset{#1}%
+ \pgfplotstablecollectoneargwithpreparecatcodes{%
+ \pgfplotstablesort@{#2}%
+ }%
+}
+\def\pgfplotstablesort@#1#2{%
+ \pgfkeysgetvalue{/pgfplots/table/sort key}\pgfplotstable@sort@key@colname
+ \pgfkeysgetvalue{/pgfplots/table/sort key from}\pgfplotstable@sort@key@table
+ \pgfkeysgetvalue{/pgfplots/table/sort cmp}\pgfplotstable@sort@cmp
+ %
+ %
+ \pgfplotstable@isloadedtable{#2}{%
+ \pgfplotstablegetrowsof{#2}%
+ \let\pgfplotstable@numrows=\pgfplotsretval
+ %
+ \pgfplotstabletranspose[input colnames to=,colnames from=]\pgfp@tmp{#2}%
+ \def\pgfplotstable@table{#2}%
+ \let\pgfplotstable@input@colnames=#2\relax
+ }{%
+ \pgfplotstableread{#2}\pgfp@tmp@in
+ \pgfplotstablegetrowsof\pgfp@tmp@in
+ \let\pgfplotstable@numrows=\pgfplotsretval
+ \def\pgfplotstable@table{\pgfp@tmp@in}%
+ \let\pgfplotstable@input@colnames=\pgfp@tmp@in
+ %
+ \pgfplotstabletranspose[input colnames to=,colnames from=]\pgfp@tmp\pgfp@tmp@in
+ }%
+ %
+ \ifx\pgfplotstable@sort@key@colname\pgfutil@empty
+ \else
+ \ifx\pgfplotstable@sort@key@table\pgfutil@empty
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@table}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@sort@key@colname}%
+ \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@tokb}\noexpand\of{\the\t@pgfplots@toka}}%
+ \expandafter\pgfplotstablegetcolumn\pgfplots@loc@TMPa\to\pgfplotstable@sort@key
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@sort@key@colname}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotstable@sort@key@table}%
+ \edef\pgfplotstable@loc@TMPa{%
+ \noexpand\pgfplotstablegetcolumn{\the\t@pgfplots@toka}\noexpand\of{\the\t@pgfplots@tokb}\noexpand\to\noexpand\pgfplotstable@sort@key}%
+ \pgfplotstable@loc@TMPa
+ \fi
+ \fi
+ \pgfplotsarraynewempty\pgfplotstable@sort@key@array
+ \pgfplotslistforeachungrouped{\pgfplotstable@sort@key}\as\pgfplotstable@loc@TMPa{%
+ \expandafter\pgfplotsarraypushback\expandafter{\pgfplotstable@loc@TMPa}\to\pgfplotstable@sort@key@array
+ }%
+ %
+ %
+ % use a side effect: columns are integers, they are stored as
+ % '\pgfp@tmp@<index>'. Thus, column names and array indices are
+ % essentially the same! That simplifies the operation and explains
+ % why we transposed the table.
+ % We simply interprete the transposed table as array. We don't
+ % even need to copy anything.
+ \pgfplotsarrayresize{\pgfp@tmp}{\pgfplotstable@numrows}%
+ % Oh, we also need the index to access the sort key. Well, then we
+ % did not win anything.
+ \pgfplotsarrayforeachungrouped\pgfp@tmp\as\pgfplotstable@loc@TMPa{%
+ \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPa}%
+ \edef\pgfplotstable@loc@TMPa{\pgfplotsarrayforeachindex:{\the\t@pgfplots@toka}}%
+ \pgfplotsarrayletentry{\pgfplotsarrayforeachindex}\of\pgfp@tmp=\pgfplotstable@loc@TMPa
+ }%
+ % extract current row index and row content:
+ \def\pgfplotstable@sort@extractindex##1:##2{%
+ \def\pgfmathresult{##1}%
+ \def\pgfplotstable@row{##2}%
+ }%
+ %
+ \expandafter\pgfplotsset\expandafter{\pgfplotstable@sort@cmp}%
+ \pgfkeysgetvalue{/pgfplots/iflessthan/.@cmd}\pgfplotstable@sort@cmp@routine
+ \def\pgfplotstable@sort@iflt##1##2##3##4{\pgfplotstable@sort@cmp@routine{##1}{##2}{##3}{##4}\pgfeov}%
+ %
+ \pgfkeysdefargs{/pgfplots/iflessthan}{##1##2##3##4}{%
+ \expandafter\pgfplotstable@sort@extractindex##1%
+ \pgfplotsarrayselect{\pgfmathresult}\of\pgfplotstable@sort@key@array\to\pgfplotstable@arga
+ \expandafter\pgfplotstable@sort@extractindex##2%
+ \pgfplotsarrayselect{\pgfmathresult}\of\pgfplotstable@sort@key@array\to\pgfplotstable@argb
+ \pgfplotstable@sort@iflt{\pgfplotstable@arga}{\pgfplotstable@argb}{##3}{##4}%
+ }%
+ \pgfkeysdef{/pgfplots/array/unscope pre}{%
+ % remove the row index:
+ \pgfplotsarrayforeachungrouped\pgfp@tmp\as\pgfplotstable@loc@TMPa{%
+ \expandafter\pgfplotstable@sort@extractindex\pgfplotstable@loc@TMPa%
+ \pgfplotsarrayletentry{\pgfplotsarrayforeachindex}\of\pgfp@tmp=\pgfplotstable@row
+ }%
+ % restore original form:
+ \pgfplotstabletranspose[input colnames to=,colnames from=]\pgfp@tmp@result\pgfp@tmp
+ % technical, transport result out of the current scope ...
+ \pgfplotstable@copy@to@globalbuffers\pgfp@tmp@result{\pgfplotstablenameof\pgfp@tmp}%
+ % ... and use this lowlevel thing to transport the original column names.
+ \global\let\pgfplotstable@colnames@glob=\pgfplotstable@input@colnames
+ }%
+ \pgfkeysdef{/pgfplots/array/unscope post}{}%
+ \pgfplotsarraysort{\pgfp@tmp}%
+ \endgroup
+ \pgfplotstable@copy@globalbuffers@to{#1}%
+}%
+
+\pgfutil@IfUndefined{pgfcalendardatetojulian}{%
+ \def\pgfcalendardatetojulian#1#2{\pgfplots@error{Sorry, you need to use \string\usepackage{pgfcalendar} before using date specific methods}}%
+}{}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.coltype.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.coltype.code.tex
new file mode 100644
index 0000000000..8c0000b324
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.coltype.code.tex
@@ -0,0 +1,93 @@
+%--------------------------------------------
+%
+% Package numtable.
+%
+% This file provides support for column types in LaTeX tabular
+% environments, i.e.
+%
+%\begin{tabular}{>{\pgfplotstablecoltype}c<{\endpgfplotstablecoltype}}
+% 1 \\
+% 2 \\
+% 3 \\
+%\end{tabular}
+%
+%
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+
+
+% If I did not get it wrong, the tabular package, initialised with a
+% column type like
+% >{\pgfplotstablecoltype}c<{\endpgfplotstablecoltype}
+% yields
+%
+% \pgfplotstablecoltype \ignorespaces <content> \unskip \endpgfplotstablecoltype
+% OR
+% \pgfplotstablecoltype \ignorespaces <content> \\ \endpgfplotstablecoltype
+%
+% So, I define \pgfplotstablecoltype to skip \ignorespaces and \unskip and simply
+% get <content>.
+\def\pgfplotstablecoltype{%
+ \begingroup
+ \let\pgfplotstablecoltype@content=\empty
+ \pgfutil@ifnextchar[{%
+ \pgfplotstablecoltype@
+ }{%
+ \pgfplotstablecoltype@until@end@start
+ }%
+}%
+\def\pgfplotstablecoltype@[#1]{%
+ \pgfqkeys{/pgf/number format}{#1}%
+ \pgfplotstablecoltype@until@end@start
+}%
+
+\def\pgfplotstablecoltype@until@end@start\ignorespaces{%
+ \pgfplotstablecoltype@until@end
+}%
+\def\pgfplotstablecoltype@until@end{%
+ \pgfutil@ifnextchar\\{%
+ \pgfplotstablecoltype@finish%
+ }{%
+ \pgfutil@ifnextchar{\unskip}{%
+ \pgfplotstablecoltype@finish%
+ }{%
+ \pgfplotstablecoltype@next
+ }%
+ }%
+}
+\def\pgfplotstablecoltype@next#1{%
+ \expandafter\def\expandafter\pgfplotstablecoltype@content\expandafter{\pgfplotstablecoltype@content#1}%
+ \pgfplotstablecoltype@until@end
+}
+\def\pgfplotstablecoltype@finish{%
+%\message{COLLECTED \meaning\pgfplotstablecoltype@content}%
+ \edef\pgfplotstablecoltype@content{\pgfplotstablecoltype@content}%
+ %
+ % trim white space:
+ \expandafter\pgfkeys@spdef\expandafter\pgfplotstablecoltype@content\expandafter{\pgfplotstablecoltype@content}%
+ %
+ \ifx\pgfplotstablecoltype@content\pgfutil@empty
+ \else
+ \pgfmathprintnumber{\pgfplotstablecoltype@content}%
+ \fi
+ \endgroup
+}%
+
+%\def\pgfplotstablecoltype{\message{COLLECT}}%
+\def\endpgfplotstablecoltype{}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.sty b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.sty
new file mode 100644
index 0000000000..948a9885fa
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.sty
@@ -0,0 +1,39 @@
+%--------------------------------------------
+%
+% Package pgfplotstable.sty
+%
+% Copyright 2007-2011 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+\IfFileExists{pgfplots.revision.tex}{\input pgfplots.revision.tex } {%
+ \def\pgfplotsrevision{0}%
+ \def\pgfplotsversion{0.0}%
+ \def\pgfplotsversiondatetime{2014-07-01 00:00:00 +100}%
+ \def\pgfplotsrevisiondatetime{2014-07-01 00:00:00 +100}%
+ \def\pgfplotsversiondate{2014/07/01}%
+ \def\pgfplotsrevisiondate{2014/07/01}%
+}
+\ProvidesPackage{pgfplotstable}[\pgfplotsversiondate\space v\pgfplotsversion\space Table typesetting and Pretty-printing (\pgfplotsrevision)]
+
+\RequirePackage{pgfplots}
+
+\def\pgfplots@texdist@protect{\protect}%
+
+\input pgfplotstable.code.tex
+
+\RequirePackage{array} % for |dec sep align|
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.tex
new file mode 100644
index 0000000000..c445da336b
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotstable.tex
@@ -0,0 +1,38 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+% ATTENTION:
+% you MAY need one of
+% \def\pgfsysdriver{pgfsys-dvipdfm.def}
+% \def\pgfsysdriver{pgfsys-pdftex.def}
+% \def\pgfsysdriver{pgfsys-dvips.def}
+%
+% BEFORE the first \input pgf.tex, \input tikz.tex or
+% \input pgfplots.tex
+% Default is
+% 'dvips' for 'tex'
+% 'pdftex' for 'pdftex'
+% -> dvipdfm needs special attention.
+%
+\input pgfplots.tex%
+%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotstableshared.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotstableshared.code.tex
new file mode 100644
index 0000000000..b8f63abe8a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotstableshared.code.tex
@@ -0,0 +1,2111 @@
+%--------------------------------------------
+%
+% Package pgfplotstable
+%
+% Provides support to read and work with abstact numeric tables of the
+% form
+%
+% COLUMN1 COLUMN2 COLUMN3
+% 1 2 3
+% 4 4 552
+% 1e124 0.00001 1.2345e-12
+% ...
+%
+% Copyright 2007-2010 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% This file provides a high-level table manipulation and typesetting
+% package.
+%
+%
+% ---------------------------------------------
+% Implementation notes for programmers:
+% ---------------------------------------------
+%
+% The table data structure consists of
+% 1. A name which must be a valid TeX macro like '\table'
+% 2. A column list in the \pgfplotslist format.
+% In fact, the column list is stored in the table's name:
+% \pgfplotslistnewempty\table
+% 3. A "file name" stored in
+% \csname\string<\namemacro>@@table@name\endcsname
+% 4. A "scan line length" number stored in
+% \csname\string<\namemacro>@@table@scanline\endcsname
+% It contains the value of \pgfplotsscanlinelength which has
+% been identified right after \pgfplotstableread.
+% 5. foreach column, there is a list of row-values (a row-vector) in
+% the \pgfplotslist format named
+% \csname\string<\namemacro>@<column name>\endcsname
+%
+
+\newif\ifpgfplotstable@search@header
+\newif\ifpgfplotstable@firstline@is@header
+\newcount\c@pgfplotstable@counta
+\newtoks\t@pgfplotstable@a
+\newif\ifpgfplots@addplotimpl@readcompletely
+% should always be false; use only in grouped internal macros
+\newif\ifpgfplots@table@options@areset
+\newif\ifpgfplots@tableread@to@listener
+\newif\ifpgfplots@tableread@use@begingroup
+\newif\ifpgfplotstable@trimcells
+\newif\ifpgfplotstable@search@path@implicit@CWD
+
+\pgfkeys{%
+ /pgfplots/table/every table/.style={},
+ /pgfplots/table/.unknown/.code={%
+ \pgfplotstable@error@pkg{Sorry, I do not know the key `\pgfkeyscurrentkeyRAW' and I am going to ignore it. Perhaps you need \string\usepackage{pgfplotstable}? (The table typesetting parts are a separate package)}%
+ },%
+ /pgfplots/table/header/.is choice,
+ /pgfplots/table/header/true/.code={\pgfplotstable@firstline@is@headerfalse\pgfplotstable@search@headertrue},
+ /pgfplots/table/header/false/.code={\pgfplotstable@firstline@is@headerfalse\pgfplotstable@search@headerfalse},
+ /pgfplots/table/header/has colnames/.code={\pgfplotstable@firstline@is@headertrue\pgfplotstable@search@headerfalse},
+ /pgfplots/table/header=true,
+ /pgfplots/table/search path/.initial=.,
+ /pgfplots/table/search path/implicit ./.is if=pgfplotstable@search@path@implicit@CWD,
+ /pgfplots/table/search path/implicit .=true,
+ /pgfplots/table/x index/.initial=0,
+ /pgfplots/table/x/.initial=,
+ /pgfplots/table/x expr/.initial=,
+ /pgfplots/table/y index/.initial=1,
+ /pgfplots/table/y/.initial=,
+ /pgfplots/table/y expr/.initial=,
+ /pgfplots/table/z index/.initial=2,
+ /pgfplots/table/z/.initial=,
+ /pgfplots/table/z expr/.initial=,
+ /pgfplots/table/meta index/.initial=,
+ /pgfplots/table/meta/.initial=,
+ /pgfplots/table/meta expr/.initial=,
+ /pgfplots/table/x error index/.style={
+ x error plus index={#1},%
+ x error minus index={#1}%
+ },
+ /pgfplots/table/y error index/.style={
+ y error plus index={#1},%
+ y error minus index={#1}%
+ },
+ /pgfplots/table/z error index/.style={
+ z error plus index={#1},%
+ z error minus index={#1}%
+ },
+ /pgfplots/table/x error/.style={
+ x error plus={#1},%
+ x error minus={#1}%
+ },
+ /pgfplots/table/y error/.style={
+ y error plus={#1},%
+ y error minus={#1}%
+ },
+ /pgfplots/table/z error/.style={
+ z error plus={#1},%
+ z error minus={#1}%
+ },
+ /pgfplots/table/x error expr/.style={
+ x error plus expr={#1},%
+ x error minus expr={#1}%
+ },
+ /pgfplots/table/y error expr/.style={
+ y error plus expr={#1},%
+ y error minus expr={#1}%
+ },
+ /pgfplots/table/z error expr/.style={
+ z error plus expr={#1},%
+ z error minus expr={#1}%
+ },
+ /pgfplots/table/x error plus index/.initial=,
+ /pgfplots/table/y error plus index/.initial=,
+ /pgfplots/table/z error plus index/.initial=,
+ /pgfplots/table/x error plus/.initial=,
+ /pgfplots/table/y error plus/.initial=,
+ /pgfplots/table/z error plus/.initial=,
+ /pgfplots/table/x error plus expr/.initial=,
+ /pgfplots/table/y error plus expr/.initial=,
+ /pgfplots/table/z error plus expr/.initial=,
+ /pgfplots/table/x error minus index/.initial=,
+ /pgfplots/table/y error minus index/.initial=,
+ /pgfplots/table/z error minus index/.initial=,
+ /pgfplots/table/x error minus/.initial=,
+ /pgfplots/table/y error minus/.initial=,
+ /pgfplots/table/z error minus/.initial=,
+ /pgfplots/table/x error minus expr/.initial=,
+ /pgfplots/table/y error minus expr/.initial=,
+ /pgfplots/table/z error minus expr/.initial=,
+ /pgfplots/table/ignore chars/.initial=,
+ /pgfplots/table/white space chars/.initial=,
+ /pgfplots/table/text special chars/.initial=,
+ /pgfplots/table/comment chars/.initial=,
+ /pgfplots/table/skip first n/.initial=0,
+ /pgfplots/table/trim cells/.is if=pgfplotstable@trimcells,
+ /pgfplots/table/trim cells/.default=true,
+ /pgfplots/table/read completely/.is choice,
+ /pgfplots/table/read completely/true/.code= \pgfplots@addplotimpl@readcompletelytrue\def\pgfplots@addplotimpl@readcompletely@auto{0},
+ /pgfplots/table/read completely/false/.code=\pgfplots@addplotimpl@readcompletelyfalse\def\pgfplots@addplotimpl@readcompletely@auto{0},
+ /pgfplots/table/read completely/auto/.code=\pgfplots@addplotimpl@readcompletelyfalse\def\pgfplots@addplotimpl@readcompletely@auto{1},
+ /pgfplots/table/read completely/.default=true,
+ /pgfplots/table/read completely=auto,
+ /pgfplots/table/col sep/.is choice,
+ /pgfplots/table/col sep/space/.code = {\def\pgfplotstableread@COLSEP@CASE{0}},
+ /pgfplots/table/col sep/comma/.code = {\def\pgfplotstableread@COLSEP@CASE{1}},
+ /pgfplots/table/col sep/semicolon/.code = {\def\pgfplotstableread@COLSEP@CASE{2}},
+ /pgfplots/table/col sep/colon/.code = {\def\pgfplotstableread@COLSEP@CASE{3}},
+ /pgfplots/table/col sep/braces/.code = {\def\pgfplotstableread@COLSEP@CASE{4}},
+ /pgfplots/table/col sep/tab/.code = {\def\pgfplotstableread@COLSEP@CASE{5}},
+ /pgfplots/table/col sep/&/.code = {\def\pgfplotstableread@COLSEP@CASE{6}\pgfplotstable@trimcellstrue},
+ /pgfplots/table/col sep/ampersand/.code = {\def\pgfplotstableread@COLSEP@CASE{6}\pgfplotstable@trimcellstrue},
+ /pgfplots/table/col sep=space,
+ /pgfplots/table/format/.is choice,
+ /pgfplots/table/format/auto/.code = {\def\pgfplotstableread@FORMAT@CASE{0}},
+ /pgfplots/table/format/inline/.code = {\def\pgfplotstableread@FORMAT@CASE{1}},
+ /pgfplots/table/format/file/.code = {\def\pgfplotstableread@FORMAT@CASE{2}},
+ /pgfplots/table/format=auto,
+ /pgfplots/table/row sep/.code={%
+ \pgfplotsutilifstringequal{#1}{\\}{%
+ \def\pgfplotstableread@ROWSEP@CASE{1}%
+ }{%
+ \pgfplotsutilifstringequal{#1}{crcr}{%
+ \def\pgfplotstableread@ROWSEP@CASE{1}%
+ }{%
+ \pgfplotsutilifstringequal{#1}{newline}{%
+ \def\pgfplotstableread@ROWSEP@CASE{0}%
+ }{%
+ {%
+ \t@pgfplots@tokc={#1}%
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, the choice `row sep=\the\t@pgfplots@tokc' is not known. Maybe you misspelled it? Try `\string\\' or `newline'.}\pgfeov%
+ }%
+ }%
+ }%
+ }%
+ },%
+ /pgfplots/table/row sep=newline,
+}
+
+\pgfkeys{
+ % #1: the argument which should have been assigned.
+ % #2: an error message.
+ /pgfplots/exception/non unique colname/.code 2 args={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#2}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ \let#1=\pgfutil@empty
+ },%
+ /pgfplots/exception/table columns unbalanced/.code={%
+ \ifx\pgfplotsexceptionmsg\relax
+ \pgfplots@error{#1}%
+ \else
+ \pgfplots@error{\pgfplotsexceptionmsg}%
+ \fi
+ },
+}
+
+% \pgfplotstableread[OPTIONS] {FILE} to \name
+%
+% This method reads a table from FILE to macro \name.
+%
+% FILE is something like
+% G Basis dof L2 A Lmax cgiter maxlevel eps
+% 5 5 5 8.31160034e-02 0.00000000e+00 1.80007647e-01 2 2 -1
+% 17 17 17 2.54685628e-02 0.00000000e+00 3.75580565e-02 5 3 -1
+% ...
+%
+% A number format line is also understood:
+% G Basis dof L2 A Lmax cgiter maxlevel eps
+% $flags int int int sci:8 sci:8 sci:8 int int std:8
+% 5 5 5 8.31160034e-02 0.00000000e+00 1.80007647e-01 2 2 -1
+%
+% or a three-column-gnuplot file with 2 comment headers like
+% #Curve 0, 20 points
+% #x y type
+% 0.00000 0.00000 i
+% 0.52632 0.50235 i
+%
+% The table data is stored columnwise in lists and can be accessed
+% with the other methods of this package.
+%
+% \pgfplotstableread[<options>]{<file>}{<\macro>}
+% \pgfplotstableread[<options>]{<file>} to listener{<\macro>}
+% \pgfplotstableread* ...
+%
+% The '*' does not protect its local variables with TeX groups,
+% everything is added to the current scope (useful to the 'to
+% listener' thing.
+%
+% The 'to listener' variant does NOT assemble a table data structure.
+% Instead, it processes the input table row-wise and invokes <\macro>
+% after each complete row. During the evaluation of <\macro>, the
+% following methods can be used to query values:
+% \pgfplotstablereadgetcolindex{<index>}{<\macro>}
+% \pgfplotstablereadgetcolname{<name>}{<\macro>}
+% \pgfplotstablereadvalueofcolname{<name>}
+% \pgfplotstablereadvalueofcolindex{<index>}
+% \thisrow{<name>} (equivalent to \pgfplotstablereadvalueofcolname)
+% \getthisrow{<name>}{<\macro>} (equivalent to \pgfplotstablereadgetcolname)
+% \thisrowno{<index>} (equivalent to \pgfplotstablereadvalueofcolindex)
+% \getthisrowno{<index>}{<\macro>}
+% \pgfplotstableforeachcolumn\as{<\iteratemacro>}{<loop body>}
+% (the '\as' is required directly after
+% \pgfplotstableforeachcolumn in this context)
+% Attention: 'to listener' is scoped by TeX groups, so any assignments
+% need to be done globally (or with aftergroup magic).
+%
+% More remarks about scoping:
+% \pgfplotstableread to listener works as follows:
+% \begingroup
+% // load table
+% while file has more lines:
+% load line, read every column;
+% invoke listener;
+% repeat
+% \endgroup
+%
+% In short: all invocations of listener have the same level of
+% scoping: they are inside of one TeX group. But single listener
+% invocations as such are not scoped. Make sure you don't
+% accidentally overwrite one of the internals in listener. And: make
+% sure you don't change temporary registers without scoping them!
+%
+% Note: this command also updates \pgfplotsscanlinelength.
+\def\pgfplotstableread{%
+ \pgfutil@ifnextchar*{%
+ \pgfplots@tableread@use@begingroupfalse
+ \pgfplotstableread@impl@star
+ }{%
+ \pgfplots@tableread@use@begingrouptrue
+ \pgfplotstableread@impl@star*%
+ }%
+}%
+\def\pgfplotstableread@impl@star*{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotstableread@impl
+ }{%
+ \pgfplotstableread@impl[]%
+ }%
+}
+
+% BACKWARDS COMPATIBILITY
+\let\pgfnumtableread=\pgfplotstableread
+
+% Invokes #2 if '#1' is an already loaded table and #3 if not.
+\long\def\pgfplotstable@isloadedtable#1#2#3{%
+ \ifcase\pgfplotstableread@ROWSEP@CASE\relax
+ % row sep=newline
+ \let\pgfplots@loc@TMPa=\pgfplotstableread@NL@other%
+ \or
+ % row sep=crcr
+ \def\pgfplots@loc@TMPa{\\}%
+ \fi
+ %
+ \expandafter\pgfutil@in@\expandafter{\pgfplots@loc@TMPa}{#1}%
+ \ifpgfutil@in@
+ % Hah! it contains the row separator! This is NO macro name!
+ % -> it is an inline table definition. Don't try to
+ % assemble a macro name (may run into out-of-memory)
+ #3\relax%
+ \else
+ % ok, the early-out was not met. Make check:
+ \pgfplotsutil@ifdefinedui@withsuffix{#1}{@@table@name}{#2}{#3}%
+ \fi
+}%
+
+% If the colum name `#1' is a `create on use' speicifcation, #2 is
+% invoked, #3 otherwise.
+\long\def\pgfplotstableifiscreateonuse#1#2#3{%
+ \pgfkeysifdefined{/pgfplots/table/create on use/#1/.@cmd}{#2}{%
+ \pgfutil@in@{create col/}{#1}%
+ \ifpgfutil@in@
+ #2%
+ \else
+ #3%
+ \fi
+ }%
+}%
+
+% Defines \pgfplotsretval to be a column name which does not already
+% occur in the column names of table #1.
+\def\pgfplotstablegenerateuniquecolnamefor#1{%
+ \begingroup
+ \c@pgf@countd=0
+ \pgfplotstableforeachcolumn{#1}\as\pgfplots@loc@TMPa{%
+ \def\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \edef\pgfplots@loc@TMPb{autocol\the\c@pgf@countd}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \advance\c@pgf@countd by1
+ \fi
+ }%
+ \edef\pgfplotsretval{autocol\the\c@pgf@countd}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}
+
+% Returns a column vector in form of \pgfplotslist
+% into #3.
+%
+% #1: the column name (not a macro)
+% #2: the table structure
+% #3: the output macro name.
+%
+% @throw `no such element' on error
+\def\pgfplotstablegetcolumnbyname#1\of#2\to#3{%
+ \let#3=\pgfutil@empty% just for sanity checking.
+ \pgfplotstable@getcol{#1}\of{#2}\to{#3}\getcolmethod{STD}%
+}
+
+% Declares a new getcolmethod class #1.
+% The argument '#1' can then be used as argument for
+% \pgfplotstable@getcol...\getcolmethod{#1}.
+%
+% #2: a set of keys which redefine the behavior.
+% See below for available choices.
+\def\pgfplotstable@definegetcolmethod#1#2{%
+ \edef\pgfplotstable@definegetcolmethod@{#1}%
+ \pgfqkeys{/pgfplots/table/@getcol}{%
+ % Checks if column '#1' exists in table `#2' and invokes `#3' if that
+ % is the case and `#4' if not.
+ %
+ % Note that the check is only for physically existent colums, no alias
+ % or create on use is checked here.
+ % #1: colname
+ % #2: table struct
+ % #3: true code
+ % #4: false code
+ % FIXME : THIS IS BUGGY: the macro may exist, but is it
+ % (still) part of the table!? Currently, there is a workaround
+ % such that \pgfplotstablenew cleans up and avoids that case..
+ % and we have no "drop column" currently.
+ ifexists =\pgfutil@ifundefined{\string##2@##1}{##4}{##3},
+ %
+ % Low level method to return (the actual content) of column #1 of
+ % table #2 to macro #3.
+ % #1: colname
+ % #2: table struct
+ % #3: result macro
+ getexisting =\expandafter\let\expandafter##3\csname\string##2@##1\endcsname,
+ %
+ % no arguments, the value is a boolean (0 or 1)
+ createonuse =1,
+ %
+ % error handling.
+ % #1: colname
+ % #2: table struct
+ % #3: result macro
+ lazyforbidden=\pgfplotstablegetcolumnbyname@impl@createonuseforbidden{##1}\of{##2}\to{##3},
+ noalias =\pgfplotstablegetcolumnbyname@impl@nosuchalias{##1}\of{##2}\to{##3},
+ nocol =\pgfplotstablegetcolumnbyname@impl@nocolumn{##1}\of{##2}\to{##3},
+ #2%
+ }%
+}%
+\pgfqkeys{/pgfplots/table/@getcol}{%
+ ifexists/.code ={\expandafter\def\csname pgfplotstable@getcol@ifexists@\pgfplotstable@definegetcolmethod@\endcsname##1\of##2##3##4{#1}},%
+ getexisting/.code ={\expandafter\def\csname pgfplotstable@getcol@getexisting@\pgfplotstable@definegetcolmethod@\endcsname##1\of##2\to##3{#1}},%
+ createonuse/.code ={\expandafter\def\csname pgfplotstable@getcol@createonuse@\pgfplotstable@definegetcolmethod@\endcsname{#1}},%
+ lazyforbidden/.code ={\expandafter\def\csname pgfplotstable@getcol@lazyforbidden@\pgfplotstable@definegetcolmethod@\endcsname##1\of##2\to##3{#1}},%
+ noalias/.code ={\expandafter\def\csname pgfplotstable@getcol@noalias@\pgfplotstable@definegetcolmethod@\endcsname##1\of##2\to##3{#1}},%
+ nocol/.code ={\expandafter\def\csname pgfplotstable@getcol@nocol@\pgfplotstable@definegetcolmethod@\endcsname##1\of##2\to##3{#1}},%
+}%
+
+\pgfplotstable@definegetcolmethod{STD}{}%
+\pgfplotstable@definegetcolmethod{getptr}{%
+ ifexists =\pgfutil@ifundefined{pgfplotstblread@colindex@for@name#1}{#4}{#3},%
+ getexisting =\edef#3{\csname pgfplotstblread@colindex@for@name#1\endcsname},%
+}
+\pgfplotstable@definegetcolmethod{resolvename}{%
+ getexisting =\edef#3{#1},%
+}
+
+% The low level implementation of \pgfplotstablegetcolumnbyname.
+%
+% #4: is a getcolmethod declared with \pgfplotstable@definegetcolmethod
+%
+% ATTENTION: this macro should be expandable! It is also used inside
+% of \thisrow{}.
+\def\pgfplotstable@getcol#1\of#2\to#3\getcolmethod#4{%
+ \csname pgfplotstable@getcol@ifexists@#4\endcsname{#1}\of{#2}{%
+ \csname pgfplotstable@getcol@getexisting@#4\endcsname{#1}\of{#2}\to#3%
+ }{%
+ % Oh, there is no column '#1' in table '#2'!
+ %
+ % Ok, then check for special features.
+ %
+ % 1. 'create col/...'
+ % 2. 'create on use'
+ % 3. 'alias'
+ %
+ % WARNING : this code has been REPLICATED in
+ % *** \pgfplotstablereadvalueofcolname ***
+ \if1\csname pgfplotstable@getcol@createonuse@#4\endcsname%
+ \pgfutil@in@{create col/}{#1}%
+ \ifpgfutil@in@
+ \pgfplotstablegenerateuniquecolnamefor{#2}%
+ \def\pgfplotstable@loc@TMPa##1{%
+ \pgfkeysdef{/pgfplots/table/create on use/##1}{\pgfkeysalso{#1}}%
+ \pgfplotstablecreatecol[/pgfplots/table/create on use/##1]{##1}{#2}%
+ % and return the newly generated col:
+ \csname pgfplotstable@getcol@getexisting@#4\endcsname{##1}\of{#2}\to#3%
+ }%
+ \expandafter\pgfplotstable@loc@TMPa\expandafter{\pgfplotsretval}%
+ \else
+ \pgfplotstable@getcol@next{#1}\of{#2}\to{#3}\getcolmethod{#4}%
+ \fi
+ \else
+ \pgfplotstable@getcol@next{#1}\of{#2}\to{#3}\getcolmethod{#4}%
+ \fi
+ }%
+}%
+\def\pgfplotstable@getcol@next#1\of#2\to#3\getcolmethod#4{%
+ \pgfkeysifdefined{/pgfplots/table/create on use/#1/.@cmd}{%
+ % aah - a 'create on use' style exists. Apply it!
+ \if1\csname pgfplotstable@getcol@createonuse@#4\endcsname%
+ \pgfplotstablecreatecol[/pgfplots/table/create on use/#1]{#1}{#2}%
+ % and return the newly generated col:
+ \csname pgfplotstable@getcol@getexisting@#4\endcsname{#1}\of{#2}\to#3%
+ \else
+ \csname pgfplotstable@getcol@lazyforbidden@#4\endcsname{#1}\of{#2}\to#3%
+ \fi
+ }{%
+ % ok, then it is either an alias or it simply doesn't exist
+ \pgfkeysifdefined{/pgfplots/table/alias/#1}{%
+ \csname pgfplotstable@getcol@ifexists@#4\endcsname{\pgfkeysvalueof{/pgfplots/table/alias/#1}}\of{#2}{%
+ \csname pgfplotstable@getcol@getexisting@#4\endcsname{\pgfkeysvalueof{/pgfplots/table/alias/#1}}\of{#2}\to#3%
+ }{%
+ \csname pgfplotstable@getcol@noalias@#4\endcsname{#1}\of{#2}\to{#3}%
+ }%
+ }{%
+ \csname pgfplotstable@getcol@nocol@#4\endcsname{#1}\of{#2}\to{#3}%
+ }%
+ }%
+}
+\def\pgfplotstablegetcolumnbyname@impl@createonuseforbidden#1\of#2\to#3{%
+ \pgfplotstablegetcolumnbyname@impl@nocolumn@{#1}\of{#2}\to{#3}\pgfplotstablegetcolumnbyname@impl@createonuseforbiddentext@
+}
+
+\def\pgfplotstablegetcolumnbyname@impl@createonuseforbiddentext@#1{%
+ \space Note that I found a 'create on use/#1' style, but unfortunately, I can't evaluate it in this context. Please use the 'read completely' key such that it is processed earlier (see the manual for details)%
+}%
+\def\pgfplotstablegetcolumnbyname@impl@createonuseforbiddentext@disable#1{}%
+
+\def\pgfplotstablegetcolumnbyname@impl@nosuchalias#1\of#2\to#3{
+ \pgfplotstablegetcolumnbyname@impl@nosuchalias@{#1}\of{#2}\to{#3}\pgfplotstablegetcolumnbyname@impl@createonuseforbiddentext@disable
+}%
+
+\def\pgfplotstablegetcolumnbyname@impl@nosuchalias@#1\of#2\to#3#4{%
+ \pgfplotsthrow{no such element}{#3}{Sorry, could not retrieve aliased column '\pgfkeysvalueof{/pgfplots/table/alias/#1}' from table '\pgfplotstablenameof{#2}'. The original request was for '#1', which does not exist either.#4{#1}}\pgfeov%
+}%
+
+\def\pgfplotstablegetcolumnbyname@impl@nocolumn#1\of#2\to#3{%
+ \pgfplotstablegetcolumnbyname@impl@nocolumn@{#1}\of{#2}\to{#3}\pgfplotstablegetcolumnbyname@impl@createonuseforbiddentext@disable
+}%
+\def\pgfplotstablegetcolumnbyname@impl@nocolumn@#1\of#2\to#3#4{%
+ \pgfplotsthrow{no such element}{#3}{Sorry, could not retrieve column '#1' from table '\pgfplotstablenameof{#2}'. Please check spelling (or introduce name aliases).#4{#1}}\pgfeov%
+}%
+
+
+% Retrieves the column *NAME* '#1' of table #2 and writes it into
+% '#3'.
+%
+% If there is no such column, column aliases will be checked. Finally
+% if there are no aliases, the command fails with an error.
+%
+% The 'create on use' statements can't be used in this context.
+% @see \pgfplotstablegetcolumnbyname
+%
+% #1: a column name (not a macro)
+% #2: the table structure
+% #3: a macro name which will be filled with the (probably modified)
+% column name into #2.
+\def\pgfplotstableresolvecolname#1\of#2\to#3{%
+ \let#3=\pgfutil@empty% just for sanity checking.
+ \pgfplotstable@getcol{#1}\of{#2}\to{#3}\getcolmethod{resolvename}%
+}
+
+% Invokes either \pgfplotstablegetcolumnbyindex or
+% \pgfplotstablegetcolumnbyname.
+%
+% #1: either a column name, alias or create on use specification, or
+% [index]<integer> denoting a column index.
+% #2: either a loaded table or a table macro.
+% #3: a macro name which will be filled with the column, in the format
+% accepted of \pgfplotslist...
+\long\def\pgfplotstablegetcolumn#1\of#2\to#3{%
+ \begingroup
+ \pgfplotstable@isloadedtable{#2}{%
+ \pgfplotstablegetcolumnfromstruct{#1}\of{#2}\to{#3}%
+ }{%
+ \pgfplotstableread{#2}\pgfplotstable@tmptbl
+ \pgfplotstablegetcolumnfromstruct{#1}\of\pgfplotstable@tmptbl\to{#3}%
+ }%
+ \pgfmath@smuggleone#3%
+ \endgroup
+}%
+\def\pgfplotstablegetcolumnfromstruct#1\of#2\to#3{%
+ \def\pgfplotstable@loc@TMPc{#1}%
+ \pgfplotstable@is@colname{\pgfplotstable@loc@TMPc}%%
+ \ifpgfplotstableread@foundcolnames
+ \else
+ \expandafter\pgfplotstablegetcolumnnamebyindex\pgfplotstable@loc@TMPc\of{#2}\to\pgfplotstable@loc@TMPc
+ \fi
+ \expandafter\pgfplotstablegetcolumnbyname\pgfplotstable@loc@TMPc\of#2\to{#3}%
+}%
+
+% Defines #3 to be the column name of the column with index '#1'.
+%
+% #1: a column index (starting with 0)
+% #2: a loaded table structure
+% #3: an output macro name.
+\def\pgfplotstablegetcolumnnamebyindex#1\of#2\to#3{%
+ \pgfplotslistselect#1\of#2\to#3\relax
+}%
+
+% Defines #3 to be the column index of the column with name '#1'.
+%
+% #1: a column name
+% #2: a loaded table structure
+% #3: an output macro name which will be filled with the index (or -1
+% if there is no such index)
+\def\pgfplotstablegetcolumnindexforname#1\of#2\to#3{%
+ \def#3{-1}%
+ \edef\pgfplotstablegetcolumnindexforname@@{#1}%
+ \pgfplotstableforeachcolumn{#2}\as\pgfplotstablegetcolumnindexforname@{%
+ \relax
+ \ifx\pgfplotstablegetcolumnindexforname@\pgfplotstablegetcolumnindexforname@@
+ \edef#3{\pgfplotstablecol}%
+ \fi
+ }%
+}%
+\def\pgfplotstablegetcolumnbyindex#1\of#2\to#3{%
+ \pgfplotslistselect#1\of#2\to#3\relax
+ \expandafter\pgfplotstablegetcolumnbyname#3\of#2\to{#3}%
+}
+
+\def\pgfplotstablecopy#1\to#2{%
+ \let#2=#1%
+ \pgfplotstablegetname#1\pgfplotstable@loc@TMPa
+ \expandafter\let\csname\string#2@@table@name\endcsname=\pgfplotstable@loc@TMPa
+ \expandafter\edef\csname\string#2@@table@scanline\endcsname{\pgfplotstablescanlinelengthof{#1}}%
+ \pgfplotslistforeachungrouped#1\as\pgfplotstable@loc@TMPa{%
+ \def\pgfplotstable@loc@TMPb{%
+ \expandafter\let\csname\string#2@\pgfplotstable@loc@TMPa\endcsname}%
+ \expandafter\pgfplotstable@loc@TMPb\csname\string#1@\pgfplotstable@loc@TMPa\endcsname
+ }%
+}
+
+% Returns the file name of table '#1' into macro #2.
+\def\pgfplotstablegetname#1#2{%
+ \expandafter\let\expandafter#2\csname\string#1@@table@name\endcsname
+}
+
+% expands to the table file name of table '#1'
+\def\pgfplotstablenameof#1{%
+ \csname\string#1@@table@name\endcsname
+}
+
+% Returns the value of \pgfplotsscanlinelength for table '#1' into
+% macro #2.
+\def\pgfplotstablegetscanlinelength#1#2{%
+ \expandafter\let\expandafter#2\csname\string#1@@table@scanline\endcsname
+}%
+
+% Expands to the scan line length of table '#1'.
+\def\pgfplotstablescanlinelengthof#1{\csname\string#1@@table@scanline\endcsname}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IMPLEMENTATION
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifpgfplotstableread@curline@contains@colnames
+\newif\ifpgfplotstableread@foundcolnames
+\newif\ifpgfplotstableread@skipline
+
+% A method which is necessary to work with inline table data.
+%
+% It does nothing if format=file.
+%
+% It needs to be invoked BEFORE the inline table data has been
+% seen the first time. "Seen" means collected as argument!
+%
+% The macro changes \catcodes in order to implement the 'row sep=newline',
+% some special 'col sep' choices and the 'ignore chars' features.
+%
+% ATTENTION: this changes the processing of ALL following newline
+% characters.
+% @see \pgfplotstablecollectoneargwithpreparecatcodes
+\def\pgfplotstablereadpreparecatcodes{%
+ \ifx\pgfplotstablereadrestorecatcodes\relax
+ \edef\pgfplotstablereadrestorecatcodes{%
+ \noexpand\pgfplotstableuninstallignorechars
+ \noexpand\catcode`\noexpand\^^M=\the\catcode`\^^M\noexpand\space
+ \noexpand\catcode`\noexpand\ =\the\catcode`\ \noexpand\space
+ \noexpand\catcode`\noexpand\;=\the\catcode`\;\noexpand\space
+ \noexpand\catcode`\noexpand\:=\the\catcode`\:\noexpand\space
+ \noexpand\catcode`\noexpand\^^I=\the\catcode`\^^I\noexpand\space
+ \noexpand\let\noexpand\pgfplotstablereadrestorecatcodes=\noexpand\relax
+ }%
+ \ifcase\pgfplotstableread@FORMAT@CASE\relax
+ % format=auto
+ \pgfplotstablereadpreparecatcodes@
+ \or
+ % format=inline
+ \pgfplotstablereadpreparecatcodes@
+ \fi
+ \fi
+}
+\let\pgfplotstablereadrestorecatcodes=\relax
+\def\pgfplotstablereadpreparecatcodes@{%
+ \if0\pgfplotstableread@ROWSEP@CASE\relax
+ % row sep = newline
+ \catcode`\^^M=12
+ \fi
+ \ifcase\pgfplotstableread@COLSEP@CASE\relax
+ % col sep=space:
+ \catcode`\ =10
+ \or
+ % col sep=comma:
+ \or
+ % col sep=semicolon:
+ \catcode`\;=12
+ \or
+ % col sep=colon:
+ \catcode`\:=12
+ \or
+ % col sep=brace:
+ \or
+ % col sep=tab:
+ \catcode`\^^I=12
+ \fi
+ \pgfplotstableinstallignorechars
+}%
+
+% Logically, this routine does
+% \pgfplotstablereadpreparecatcodes
+% #1
+% and that's all. However, It makes sure that any white space
+% characters (especially newlines) between '#1' and the following
+% argument are gobbled!
+%
+% To show the problem, consider
+% \pgfplotstabletypeset[<options>]
+% \loadedtable
+%
+% and we want to set the catcodes *before* \loadedtable is seen.
+% Well, there is a newline character after ']'! If we change the
+% catcodes, this newline will be considered as character and will make
+% up the first argument, the \loadedtable will be ignored.
+%
+% \pgfplotstablecollectoneargwithpreparecatcodes avoids this problem
+% by gobbling all space (newline) characters *before* collecting the
+% directly following argument token. Furthermore, it restores the
+% catcodes directly after the argument has been collected.
+%
+% @see \pgfplotstablecollectoneargwithpreparecatcodesnorestore
+\long\def\pgfplotstablecollectoneargwithpreparecatcodes#1{%
+ \begingroup
+ \t@pgfplotstable@a{{#1}}% this allows '#' characters in '#1'
+ \def\pgfplotstablecollectoneargwithpreparecatcodes@@{%
+ \pgfplotstablereadpreparecatcodes
+ \expandafter\pgfplotstablecollectoneargwithpreparecatcodes@end\the\t@pgfplotstable@a%
+ }%
+ % equivalent to
+ %\let\pgfplotstable@loc@TMPa=<next token>\pgfplotstablecollectoneargwithpreparecatcodes@@<next token>
+ \futurelet\pgfplotstable@loc@TMPa\pgfplotstablecollectoneargwithpreparecatcodes@@
+ % this employs a side effect: \futurelet gobbles any spaces
+ % (including newlines).
+}%
+\long\def\pgfplotstablecollectoneargwithpreparecatcodes@end#1#2{%
+ \endgroup
+ #1{#2}%
+}%
+
+% An overloaded method of
+% \pgfplotstablecollectoneargwithpreparecatcodes which does not
+% restore the catcodes after collecting one arg.
+\long\def\pgfplotstablecollectoneargwithpreparecatcodesnorestore#1{%
+ \t@pgfplotstable@a{{#1}}%
+ \def\pgfplotstablecollectoneargwithpreparecatcodes@@{%
+ \expandafter\pgfplotstablereadpreparecatcodes\t@pgfplotstable@a
+ }%
+ % equivalent to
+ %\let\pgfplotstable@loc@TMPa=<next token>\pgfplotstablecollectoneargwithpreparecatcodes@@<next token>
+ \futurelet\pgfplotstable@loc@TMPa\pgfplotstablecollectoneargwithpreparecatcodes@@
+}%
+
+% Accept one of
+% \pgfplotstableread[#1]{<file>}{<\macro>}
+% \pgfplotstableread[#1]{<file>} to listener{<\macro>}
+% or
+% \pgfplotstableread[#1]{<file>} to {<\macro>} (DEPRECATED)
+\long\def\pgfplotstableread@impl[#1]{%
+ \ifpgfplots@tableread@use@begingroup
+ \begingroup
+ \def\endgroup@@pgfplotstableread{\endgroup}%
+ \else
+ \let\endgroup@@pgfplotstableread=\relax%
+ \fi
+ % set options here, although we can't evaluate 'every table' yet
+ % (the file name is not yet known).
+ % But #1 may contain input format specifiers which are important
+ % for \catcodes, BEFORE we have read the second argument:
+ \pgfplotstableset{#1}%
+ %
+ \pgfplotstablecollectoneargwithpreparecatcodes{%
+ \pgfplotstableread@impl@collectfirstarg{#1}%
+ }%
+}%
+\long\def\pgfplotstableread@impl@collectfirstarg#1#2{%
+ \pgfplotsutil@ifnextchar t{%
+ \pgfplotstableread@impl@@{#1}{#2}%
+ }{%
+ \pgfplotstableread@impl@{#1}{#2}%
+ }%
+}%
+
+
+% I don't know why; but I started with
+% >> \pgfplotstableread[]{file} to \macro
+% That ' to ' is really ugly. This here is for backwards
+% compatibility:
+\long\def\pgfplotstableread@impl@@#1#2to {%
+ \pgfutil@ifnextchar l{%
+ \pgfplotstableread@impl@@listener{#1}{#2}%
+ }{%
+ \pgfplotstableread@impl@{#1}{#2}%
+ }%
+}%
+\long\def\pgfplotstableread@impl@@listener#1#2listener#3{%
+ \pgfplots@tableread@to@listenertrue
+ \pgfplotstableread@impl@{#1}{#2}{#3}%
+ \pgfplots@tableread@to@listenerfalse
+}%
+
+\newif\ifpgfplotstableread@inline
+\long\def\pgfplotstableread@checkinlineformat@CRCR#1\\#2\pgfplotstable@EOI{%
+ \def\pgfplotstable@loc@TMPa{#2}%
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty
+ \pgfplotstableread@inlinefalse
+ \else
+ \pgfplotstableread@inlinetrue
+ \let\pgfplotstableread@loop@next=\pgfplotstableread@loop@next@CRCR
+ \fi
+}%
+\long\def\pgfplotstableread@loop@next@CRCR#1\\{%
+ \long\def\pgfplotstable@LINE{#1}%
+ \pgfplotstableread@loop@processnextline
+ \pgfplotstableread@loop@over@lines
+}%
+\begingroup
+\catcode`\^^M=12\relax%
+\gdef\pgfplotstableread@NL@other{^^M}%
+\long\gdef\pgfplotstableread@checkinlineformat@NL@#1^^M#2\pgfplotstable@EOI{%
+ \def\pgfplotstable@loc@TMPa{#2}%
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty%
+ \pgfplotstableread@inlinefalse%
+ \else%
+ \pgfplotstableread@inlinetrue%
+ \let\pgfplotstableread@loop@next=\pgfplotstableread@loop@next@NL%
+ \fi%
+}%
+\long\gdef\pgfplotstableread@checkinlineformat@NL#1{%
+ \pgfplotstableread@checkinlineformat@NL@ #1^^M\pgfplotstable@EOI%
+}%
+\long\gdef\pgfplotstableread@loop@next@NL#1^^M{%
+ \long\def\pgfplotstable@LINE{#1}%
+ \pgfplotstableread@loop@processnextline%
+ \pgfplotstableread@loop@over@lines%
+}%
+\endgroup
+
+% #1: options.
+% #2: the table content (file name or inline data)
+% #3: the result macro.
+\long\def\pgfplotstableread@impl@#1#2#3{%
+ \ifcase\pgfplotstableread@FORMAT@CASE\relax
+ % format=auto
+ \ifcase\pgfplotstableread@ROWSEP@CASE\relax
+ % row sep=newline
+ \pgfplotstableread@checkinlineformat@NL{#2}%
+ \or
+ % row sep=crcr
+ \pgfplotstableread@checkinlineformat@CRCR #2\\\pgfplotstable@EOI
+ \fi
+ \or
+ % format=inline
+ \pgfplotstableread@inlinetrue
+ \ifcase\pgfplotstableread@ROWSEP@CASE\relax
+ % row sep=newline
+ \let\pgfplotstableread@loop@next=\pgfplotstableread@loop@next@NL
+ \or
+ % row sep=crcr
+ \let\pgfplotstableread@loop@next=\pgfplotstableread@loop@next@CRCR
+ \fi
+ \or
+ \pgfplotstableread@inlinefalse
+ \fi
+ %
+ \ifpgfplotstableread@inline
+ \else
+ \if1\pgfplotstableread@ROWSEP@CASE
+ % row sep=crcr
+ \pgfplotsthrow{unsupported operation}{Sorry, the choice 'row sep=crcr' is currently only available for inline tables, not for external files}\pgfeov
+ \fi
+ \fi
+ %
+ % optimizations:
+ \pgfkeysgetvalue{/pgfplots/table/comment chars}\pgfplots@loc@TMPd
+ \ifx\pgfplots@loc@TMPd\pgfutil@empty
+ \let\pgfplotstableread@checkspecial@line@default=\relax
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/skip first n}\pgfplots@loc@TMPd
+ \ifx\pgfplots@loc@TMPd\pgfutil@empty \let\pgfplotstableread@check@skipfirstn=\relax \fi
+ \ifnum\pgfplots@loc@TMPd=0 \let\pgfplotstableread@check@skipfirstn=\relax \fi
+ %
+ \ifpgfplotstableread@inline
+ \def\pgfplotstableread@impl@fCLOSE{}%
+ \let\pgfplotstableread@loop@over@lines=\pgfplotstableread@loop@over@lines@frominline%
+ \long\def\pgfplotstableread@start@loop{%
+ \pgfplotstableread@loop@over@lines #2\pgfplotstable@EOI
+ }%
+ \def\pgfplotstableread@ready{1}%
+ \def\pgfplotstableread@filename{<inline_table>}%
+ \else
+ \def\pgfplotstableread@ready{1}%
+ \def\pgfplotstableread@filename{#2}%
+ \pgfplotstableread@openfile
+ \def\pgfplotstableread@impl@fCLOSE{%
+ \closein\r@pgfplots@reada
+ }%
+ \let\pgfplotstableread@loop@over@lines=\pgfplotstableread@loop@over@lines@fromfile%
+ \def\pgfplotstableread@start@loop{\pgfplotstableread@loop@over@lines}%
+ \pgfplotstableinstallignorechars
+ \fi
+ \edef\pgfplotstableread@oldendlinechar{\the\endlinechar}%
+ \endlinechar=-1 % do not append a white space after each line for file input
+%\pgfplots@message{ATTEMPTING TO READ \pgfplotstableread@filename}%
+ %
+ \def\pgfplots@loc@TMPa{\pgfplotstableread@impl@prepare{#1}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotstableread@filename}{#3}%
+ %
+ \if1\pgfplotstableread@ready
+ \pgfplotstableread@start@loop
+ %
+ \pgfplotstableread@impl@fCLOSE%
+ %
+ \pgfplotstableread@finish
+ %
+ \fi
+ \endlinechar=\pgfplotstableread@oldendlinechar
+ \pgfplotsscanlinelengthcleanup
+ \expandafter\pgfplotstable@copy@to@globalbuffers@simple\expandafter{\pgfplotstableread@filename}%
+ \endgroup@@pgfplotstableread
+ \ifpgfplots@tableread@to@listener
+ % there are no data structures in this case.
+ \let\pgfplotsscanlinelength=\pgfplotstable@glob@buf@scanline
+ \else
+ % Now, we can access the global variables!
+ % copy them to #3.
+ \pgfplotstable@copy@globalbuffers@to#3%
+ \fi
+}
+
+{\catcode`\"=12 \gdef\pgfplots@dquote{"}}
+
+% gets the search path (after applying some basic sanity checks)
+\def\pgfplotstable@get@search@path{%
+ \pgfkeysgetvalue{/pgfplots/table/search path}\pgfplotsretval
+ \ifx\pgfplotsretval\pgfutil@empty
+ \def\pgfplotsretval{.}%
+ \pgfkeyslet{/pgfplots/table/search path}\pgfplotsretval
+ \fi
+ %
+ \ifpgfplotstable@search@path@implicit@CWD
+ \def\b@pgfplotstable@search@contains@cwd{0}%
+ \def\pgfplotstable@loc@TMPd{.}%
+ \def\pgfplotstable@loc@TMPc{./}%
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplotsretval}\as\pgfplotstable@loc@TMPa{%
+ \ifx\pgfplotstable@loc@TMPa\pgfplotstable@loc@TMPd
+ \def\b@pgfplotstable@search@contains@cwd{1}%
+ \fi
+ \ifx\pgfplotstable@loc@TMPa\pgfplotstable@loc@TMPc
+ \def\b@pgfplotstable@search@contains@cwd{1}%
+ \fi
+ }%
+ %
+ \if0\b@pgfplotstable@search@contains@cwd
+ \t@pgfplotstable@a=\expandafter{\pgfplotsretval}%
+ \edef\pgfplotsretval{.,\the\t@pgfplotstable@a}%
+ \pgfkeyslet{/pgfplots/table/search path}\pgfplotsretval
+ \fi
+ \fi
+}
+
+\def\pgfplotstable@search@path@add@slash#1{%
+ \def\pgfplotsretval{#1/}%
+ \def\pgfplotstable@loc@TMPd{./}%
+ \def\pgfplotstable@loc@TMPc{.//}%
+ \ifx\pgfplotsretval\pgfplotstable@loc@TMPd
+ % Ah -- we have #1='.' Do NOT use a slash at all in order to
+ % not disable the processing of TEXINPUTS (if pdftex finds ./
+ % , it will NOT evaluated TEXINPUTS as it seems)
+ \let\pgfplotsretval=\pgfutil@empty
+ \fi
+ \ifx\pgfplotsretval\pgfplotstable@loc@TMPc
+ \let\pgfplotsretval=\pgfutil@empty
+ \fi
+}%
+
+%
+% POSTCONDITION:
+% - \r@pgfplots@reada is the opened result file (or eof if there is no
+% such file).
+% - \pgfplotstableread@filename is the first found file path.
+\def\pgfplotstable@search@and@open@file{%
+ \pgfplotstable@get@search@path
+ %
+ \let\pgfplotstableread@filename@name=\pgfplotstableread@filename
+ %
+ \def\b@pgfplotstable@search@done{0}%
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplotsretval}\as\pgfplotstable@loc@TMPa{%
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty
+ % silently skip empty entries in the list.
+ \else
+ \if0\b@pgfplotstable@search@done
+ %
+ \expandafter\pgfplotstable@search@path@add@slash\expandafter{\pgfplotstable@loc@TMPa}%
+ %
+ \t@pgfplotstable@a=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokc=\expandafter{\pgfplotstableread@filename@name}%
+ \edef\pgfplotstableread@filename{\the\t@pgfplotstable@a\the\t@pgfplots@tokc}%
+ %
+ \openin\r@pgfplots@reada=\pgfplotstableread@filename.tex
+ \ifeof\r@pgfplots@reada
+ \openin\r@pgfplots@reada=\pgfplotstableread@filename\relax
+ \else
+ \pgfplots@warning{%
+ You requested to open table '\pgfplotstableread@filename', but there is also a '\pgfplotstableread@filename.tex'.
+ TeX will automatically append the suffix '.tex', so I will now open '\pgfplotstableread@filename.tex'.
+ Please make sure you don't accidentally load TeX files - this may produce unrecoverable errors.}%
+ \closein\r@pgfplots@reada
+ \openin\r@pgfplots@reada=\pgfplotstableread@filename\relax
+ \fi
+ %
+ \ifeof\r@pgfplots@reada
+ \else
+ \def\b@pgfplotstable@search@done{1}%
+ \fi
+ \fi
+ \fi
+ }%
+ %
+ \if0\b@pgfplotstable@search@done
+ \let\pgfplotstableread@filename=\pgfplotstableread@filename@name
+ \fi
+}%
+
+% Opens \pgfplotstableread@filename.
+\def\pgfplotstableread@openfile{%
+ \def\pgfplotstable@loc@TMPa{\pgfutil@in@{ }}%
+ \expandafter\pgfplotstable@loc@TMPa\expandafter{\pgfplotstableread@filename}%
+ \ifpgfutil@in@
+ \t@pgfplots@toka=\expandafter{\pgfplotstableread@filename}%
+ \edef\pgfplotstableread@filename{\pgfplots@dquote\the\t@pgfplots@toka\pgfplots@dquote}%
+ \fi
+ \let\pgfplotstableread@old@crcr=\\%
+ \def\\{\string\\}% just to make sure we don't try to open inline table data...
+ %
+ \pgfplotstable@search@and@open@file
+ %
+ \ifeof\r@pgfplots@reada
+ \pgfplotsthrow{no such table file}{\pgfplots@loc@TMPa}{\pgfplotstableread@filename}{Could not read table file '\pgfplotstableread@filename' in 'search path=\pgfkeysvalueof{/pgfplots/table/search path}'. In case you intended to provide inline data: maybe TeX screwed up your end-of-lines? Try `row sep=crcr' and terminate your lines with `\string\\' (refer to the pgfplotstable manual for details)}\pgfeov%
+ \global\let\pgfplotstable@colnames@glob=\pgfplots@loc@TMPa
+ \def\pgfplotstableread@ready{0}%
+ \fi
+ \pgfplots@logfileopen{\pgfplotstableread@filename}%
+ \let\\=\pgfplotstableread@old@crcr
+}
+
+\def\pgfplotstableinstallignorechars{%
+ \ifx\pgfplotstableuninstallignorechars\pgfutil@empty
+ \pgfkeysgetvalue{/pgfplots/table/ignore chars}\pgfplotstable@loc@TMPa
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotstableinstallignorechars@\pgfplotstable@loc@TMPa{9}%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/white space chars}\pgfplotstable@loc@TMPa
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotstableinstallignorechars@\pgfplotstable@loc@TMPa{10}%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/table/text special chars}\pgfplotstable@loc@TMPa
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotstableinstallignorechars@\pgfplotstable@loc@TMPa{12}%
+ \fi
+ \ifx\pgfplotstableuninstallignorechars\pgfutil@empty
+ \else
+ \expandafter\def\expandafter\pgfplotstableuninstallignorechars\expandafter{%
+ \pgfplotstableuninstallignorechars
+ \let\pgfplotstableuninstallignorechars=\pgfutil@empty
+ }%
+ \fi
+ \fi
+}%
+\let\pgfplotstableuninstallignorechars\pgfutil@empty%
+% #1 macro containing the characters as comma-separated list
+% #2 the catcode to assign
+\def\pgfplotstableinstallignorechars@#1#2{%
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{#1}\as\pgfplotstable@loc@TMPa{%
+ \t@pgfplots@toka=\expandafter{\pgfplotstableuninstallignorechars}%
+ \edef\pgfplotstableuninstallignorechars{%
+ \the\t@pgfplots@toka
+ \noexpand\catcode`\expandafter\noexpand\pgfplotstable@loc@TMPa=\expandafter\the\expandafter\catcode\expandafter`\pgfplotstable@loc@TMPa\noexpand\space
+ }%
+ \expandafter\catcode\expandafter`\pgfplotstable@loc@TMPa=#2\relax
+ }%
+}%
+
+% #1: any options to set (respect \ifpgfplots@table@options@areset )
+% #2: the file name (if any)
+% #3: the output macro (or listener)
+\def\pgfplotstableread@impl@prepare#1#2#3{%
+ \ifpgfplots@table@options@areset
+ \else
+ \pgfplotstableset@every@table{#2}{#1}%
+ \fi
+ %
+ \def\pgfplotstablename{\pgfplotstable@colnames@glob}% provide the name of the actual table struct (during \pgfplotstableread, only partial functionality is available!)
+ %
+ % local counter definitions:
+ \ifpgfplots@tableread@use@begingroup
+ \let\pgfplotstableread@lineno=\c@pgf@counta
+ \let\pgfplotstableread@numcols=\c@pgf@countb
+ \let\pgfplotstableread@curcol=\c@pgf@countc
+ \let\pgfplotstableread@usablelineno=\c@pgf@countd
+ \def\thepgfplotstableread@lineno{\the\pgfplotstableread@lineno}%
+ \def\thepgfplotstableread@usablelineno{\the\pgfplotstableread@usablelineno}%
+ \def\thepgfplotstableread@curcol{\the\pgfplotstableread@curcol}%
+ \def\thepgfplotstableread@numcols{\the\pgfplotstableread@numcols}%
+ \def\pgfplotstableread@countreset##1{##1=0 }%
+ \def\pgfplotstableread@countset##1##2{##1=##2\relax}%
+ \def\pgfplotstableread@countadvance##1{\advance##1 by1 }%
+ \else
+ % don't re-use integers! We have no protecting scopes!
+ \def\thepgfplotstableread@lineno{\pgfplotstableread@lineno}%
+ \def\thepgfplotstableread@usablelineno{\pgfplotstableread@usablelineno}%
+ \def\thepgfplotstableread@curcol{\pgfplotstableread@curcol}%
+ \def\thepgfplotstableread@numcols{\pgfplotstableread@numcols}%
+ \def\pgfplotstableread@countreset##1{\def##1{0}}%
+ \def\pgfplotstableread@countset##1##2{\def##1{##2}}%
+ \def\pgfplotstableread@countadvance##1{\pgfplotsutil@advancestringcounter{##1}}%
+ \fi
+ \pgfplotstableread@countreset\pgfplotstableread@lineno
+ \pgfplotstableread@countreset\pgfplotstableread@usablelineno
+ \pgfplotstableread@countreset\pgfplotstableread@numcols
+ \pgfplotstableread@countreset\pgfplotstableread@curcol
+ %
+ \pgfplotstableread@impl@prepare@DO
+ \def\pgfplotstableread@isgnuplotformat{0}%
+ \global\pgfplotslistnewempty\pgfplotstable@colnames@glob
+ \pgfplotsscanlinelengthinitzero
+ \ifpgfplots@tableread@to@listener
+ \def\pgfplotstablerow{\thepgfplotstableread@usablelineno}%
+ \def\pgfplotstablelineno{\thepgfplotstableread@lineno}%
+ \let\pgfplotstable@listener=#3%
+ \let\pgfplotstableread@impl@nextrow@NEXT=\pgfplotstableread@impl@nextrow@NEXT@listener
+ \let\pgfplotstablereadgetcolindex=\pgfplotstablereadgetcolindex@
+ \let\pgfplotstablereadgetcolname=\pgfplotstablereadgetcolname@
+ \let\pgfplotstablereadgetptrtocolname=\pgfplotstablereadgetptrtocolname@
+ \let\pgfplotstablereadgetptrtocolindex=\pgfplotstablereadgetptrtocolindex@
+ \let\pgfplotstablereadevalptr=\pgfplotstablereadevalptr@
+ \let\pgfplotstablereadvalueofptr=\pgfplotstablereadvalueofptr@
+ \let\pgfplotstableforeachcolumn=\pgfplotstableforeachcolumn@listener
+ \let\pgfplotstablereadvalueofcolname=\pgfplotstablereadvalueofcolname@
+ \let\pgfplotstablereadvalueofcolindex=\pgfplotstablereadvalueofcolindex@
+ \let\getthisrow=\pgfplotstablereadgetcolname
+ \let\thisrow=\pgfplotstablereadvalueofcolname
+ \let\thisrowno=\pgfplotstablereadvalueofcolindex
+ \let\getthisrowno=\pgfplotstablereadgetcolindex
+ \fi
+}%
+
+% Copies the table column list and the column vectors of #1 to global buffers.
+% @see \pgfplotstable@copy@globalbuffers@to
+%
+% Use these two methods to avoid scoping problems.
+%
+% #1: the <\macro> name of the table which is to be copied to global buffers.
+% #2: the table file name.
+\def\pgfplotstable@copy@to@globalbuffers#1#2{%
+ \global\let\pgfplotstable@colnames@glob=#1\relax
+ \c@pgfplotstable@counta=0\relax%
+ \pgfplotslistforeachungrouped\pgfplotstable@colnames@glob\as\pgfplotstable@loc@TMPa{%
+ \def\pgfplotstable@loc@TMPb{%
+ \expandafter\global\expandafter\let\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@counta\endcsname%
+ }%
+ \expandafter\pgfplotstable@loc@TMPb\csname\string#1@\pgfplotstable@loc@TMPa\endcsname
+ \advance\c@pgfplotstable@counta by1\relax
+ }%
+ \pgfplotstable@copy@to@globalbuffers@simple{#2}%
+}%
+% A variant of \pgfplotstable@copy@to@globalbuffers which copies only
+% the member variables of a loaded table (the name and scanline length) to
+% global buffers.
+%
+% #1: the table's file name.
+%
+% @PRECONDITION: any other variables and cell data of the table are already stored
+% in global buffers.
+\def\pgfplotstable@copy@to@globalbuffers@simple#1{%
+ \gdef\pgfplotstable@glob@buf@name{#1}%
+ \global\let\pgfplotstable@glob@buf@scanline=\pgfplotsscanlinelength
+}%
+
+% copies the global column list and the global column vectors to #1
+% (NOT the table file name).
+% @see \pgfplotstable@copy@to@globalbuffers
+%
+% @PRECONDITION the global buffers contain all members of a table.
+%
+% @POSTCONDITION The table '#1' is be initialised to these members.
+% Furthermore, \pgfplotsscanlinelength is set.
+\def\pgfplotstable@copy@globalbuffers@to#1{%
+ \let#1=\pgfplotstable@colnames@glob
+ \c@pgfplotstable@counta=0\relax%
+ \pgfplotslistforeachungrouped\pgfplotstable@colnames@glob\as\pgfplotstable@loc@TMPa{%
+ \def\pgfplotstable@loc@TMPb{%
+ \expandafter\let\csname\string#1@\pgfplotstable@loc@TMPa\endcsname}%
+ \expandafter\pgfplotstable@loc@TMPb\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@counta\endcsname
+%\message{Column '\pgfplotstable@loc@TMPa' has entries: \expandafter\meaning\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@counta\endcsname}%
+ \expandafter\global\expandafter\let\csname pgfp@numtable@glob@col@\the\c@pgfplotstable@counta\endcsname=\pgfutil@empty
+ \advance\c@pgfplotstable@counta by1\relax
+ }%
+ \global\let\pgfplotstable@colnames@glob=\pgfutil@empty
+ \expandafter\let\csname\string#1@@table@scanline\endcsname=\pgfplotstable@glob@buf@scanline
+ \expandafter\let\csname\string#1@@table@name\endcsname=\pgfplotstable@glob@buf@name
+ \let\pgfplotsscanlinelength=\pgfplotstable@glob@buf@scanline
+}%
+
+\def\pgfplotstableread@finish{%
+ \pgfplotsscanlinecomplete
+ \ifpgfplots@tableread@to@listener
+ \else
+ \ifpgfplotstableread@foundcolnames
+ \else
+ \pgfplotstableread@create@column@names@with@numbers
+ \fi
+ \pgfplotstableread@countreset\pgfplotstableread@curcol%
+ \pgfutil@loop
+ \ifnum\pgfplotstableread@curcol<\pgfplotstableread@numcols\relax
+ \expandafter\pgfplotsapplistXflushbuffers\csname pgfp@numtable@glob@col@\thepgfplotstableread@curcol\endcsname
+ \pgfplotstableread@countadvance\pgfplotstableread@curcol
+ \pgfutil@repeat
+ \fi
+}
+
+\def\pgfplotstableread@loop@over@lines@fromfile{%
+ \ifeof\r@pgfplots@reada
+%\pgfplots@message{EOF}%
+ \else
+ \read\r@pgfplots@reada to\pgfplotstable@LINE
+ \ifeof\r@pgfplots@reada
+ \else
+ \pgfplotstableread@loop@processnextline
+ \fi
+ \expandafter\pgfplotstableread@loop@over@lines
+ \fi
+}%
+\def\pgfplotstableread@loop@over@lines@frominline{%
+ \pgfutil@ifnextchar\pgfplotstable@EOI{%
+ \pgfutil@gobble
+ }{%
+ \pgfplotstableread@loop@next
+ }%
+}%
+
+\def\pgfplotstableread@check@skipfirstn{%
+ \ifnum\pgfplotstableread@lineno<\pgfkeysvalueof{/pgfplots/table/skip first n} %
+ \pgfplotstableread@skiplinetrue
+ \fi
+}%
+
+% PRECONDITION:
+% \pgfplotstable@LINE contains the current input line.
+\def\pgfplotstableread@loop@processnextline{%
+ \expandafter\pgfplotstableread@checkspecial@line\pgfplotstable@LINE\pgfplotstable@EOI
+ \pgfplotstableread@check@skipfirstn
+ \ifpgfplotstableread@skipline
+ \def\pgfplotstableread@gnuplotcheck{####x y type}%
+ \ifx\pgfplotstableread@gnuplotcheck\pgfplotstable@LINE
+ \def\pgfplotstableread@isgnuplotformat{1}%
+ \fi
+ \def\pgfplotstableread@gnuplotcheck{####x y z type}%
+ \ifx\pgfplotstableread@gnuplotcheck\pgfplotstable@LINE
+ \def\pgfplotstableread@isgnuplotformat{1}%
+ \fi
+ \else
+ %--------------------------------------------------
+ % \ifnum\pgfplotstableread@lineno=0
+ % \let\pgfplotstable@firstline=\pgfplotstable@LINE
+ % \fi
+ %--------------------------------------------------
+%\pgfplots@message{READING LINE \thepgfplotstableread@lineno: '\meaning\pgfplotstable@LINE'.}%
+ \pgfplotstableread@curline@contains@colnamesfalse
+ \ifnum\pgfplotstableread@numcols=0\relax
+ % STEP 0: initialise
+ % - count columns
+ % - find header data
+ \pgfplotstableread@countreset\pgfplotstableread@curcol
+ \ifpgfplotstable@firstline@is@header
+ \pgfplotstableread@curline@contains@colnamestrue
+ \fi
+ \pgfplotstableread@impl@DO\pgfplotstableread@impl@countcols@and@identifynames@NEXT\pgfplotstable@LINE
+ \pgfplotstableread@countset\pgfplotstableread@numcols{\pgfplotstableread@curcol}%
+ \edef\pgfplotstablecols{\thepgfplotstableread@numcols}%
+ \pgfplotstableread@countreset\pgfplotstableread@curcol
+ % Create empty column lists:
+ \pgfplotstableread@create@column@lists
+ %
+ \ifnum\pgfplotstableread@usablelineno=0\relax
+ \if1\pgfplotstableread@isgnuplotformat%
+ % The file started with
+ % #...
+ % #x y type
+ % X Y i
+ % -> thats a gnuplot file!
+ \pgfplotstableread@curline@contains@colnamesfalse
+ \fi
+ \fi
+ % Now, read the first line.
+ % It contains either
+ % - column names,
+ % - numerical data,
+ % - nothing (comments).
+ \ifpgfplotstableread@curline@contains@colnames
+ \pgfplotstableread@foundcolnamestrue
+ \pgfplotstableread@countreset\pgfplotstableread@curcol
+ \pgfplotstableread@impl@DO\pgfplotstableread@impl@collectcolnames@NEXT\pgfplotstable@LINE
+ \else
+ \pgfplotsscanlinelengthincrease
+ \pgfplotstableread@foundcolnamesfalse
+ \pgfplotstableread@countreset\pgfplotstableread@curcol
+ % Leave column name lists empty...
+ \pgfplotstableread@impl@DO\pgfplotstableread@impl@nextrow@NEXT\pgfplotstable@LINE
+ \fi
+%\pgfplots@message{After reading first row: found '\thepgfplotstableread@numcols' columns; column name list='\meaning\pgfplotstable@colnames@glob'}%
+ \else
+ \pgfplotsscanlinelengthincrease
+ \pgfplotstableread@countreset\pgfplotstableread@curcol
+ \pgfplotstableread@impl@DO\pgfplotstableread@impl@nextrow@NEXT\pgfplotstable@LINE
+ \fi
+ \ifnum\pgfplotstableread@curcol=\pgfplotstableread@numcols\relax
+ \else
+ \pgfplotsthrow{table columns unbalanced}{input table '\pgfplotstableread@filename' has an unbalanced number of columns in row '\thepgfplotstableread@lineno' (expected '\thepgfplotstableread@numcols' cols; got '\thepgfplotstableread@curcol'). Maybe the input table is corrupted? If you need unbalanced data, consider using 'nan' in empty cells (perhaps combined with 'unbounded coords=jump')}\pgfeov%
+ \fi
+ \ifpgfplots@tableread@to@listener
+ \ifpgfplotstableread@curline@contains@colnames
+ \else
+ % report row!
+ \pgfplotstable@listener
+ \fi
+ \fi
+ \pgfplotstableread@countadvance\pgfplotstableread@usablelineno
+ \fi
+ \pgfplotstableread@countadvance\pgfplotstableread@lineno
+}%
+
+% WARNING: this routine is also used in pgfplots.code.tex ...
+\def\pgfplotstableread@checkspecial@line{%
+ \futurelet\pgfplotstableread@tmp\pgfplotstableread@checkspecial@line@
+}%
+\def\pgfplotstableread@checkspecial@line@{%
+ \pgfplotstableread@skiplinefalse
+ \let\pgfplotstableread@checkspecial@line@@\pgfplotstableread@impl@gobble%
+ %
+ \let\pgfplotstableread@tmpb=##%
+ \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb
+ \pgfplotstableread@skiplinetrue
+ \else
+ \let\pgfplotstableread@tmpb=$%
+ \let\pgfplotstableread@tmpb=\pgfplotstable@EOI%
+ \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb
+ \pgfplotstableread@skiplinetrue
+ \pgfplotsscanlinecomplete% the line is empty; same as \par!
+ \else
+ \let\pgfplotstableread@tmpb=\par%
+ \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb
+ \pgfplotstableread@skiplinetrue
+ \pgfplotsscanlinecomplete% the line is empty;
+ \else
+ \pgfplotstableread@checkspecial@line@default%
+ \fi
+ \fi
+ \fi
+ \pgfplotstableread@checkspecial@line@@
+}%
+\def\pgfplotstableread@checkspecial@line@default{%
+ % this routine can be optimized away
+ \pgfkeysgetvalue{/pgfplots/table/comment chars}\pgfplots@loc@TMPd
+ \ifx\pgfplots@loc@TMPd\pgfutil@empty
+ \else
+ \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplots@loc@TMPd}\as\pgfplots@loc@TMPd{%
+ \expandafter\let\expandafter\pgfplotstableread@tmpb\pgfplots@loc@TMPd
+ \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb
+ \pgfplotstableread@skiplinetrue
+ \fi
+ }%
+ \fi
+}%
+
+%--------------------------------------------------
+% \def\pgfplotstableread@checkspecial@line{%
+% \pgfutil@ifnextchar##{%
+% \pgfplotstableread@skiplinetrue
+% \pgfplotstableread@impl@gobble
+% }{%
+% \pgfutil@ifnextchar${%
+% \pgfplotstableread@process@flags@line
+% }{%
+% \pgfutil@ifnextchar\pgfplotstable@EOI{%
+% \pgfplotstableread@skiplinetrue
+% \pgfplotsscanlinecomplete% the line is empty; same as \par!
+% \pgfplotstableread@impl@gobble
+% }{%
+% \pgfutil@ifnextchar\par{%
+% \pgfplotstableread@skiplinetrue
+% \pgfplotsscanlinecomplete
+% \pgfplotstableread@impl@gobble
+% }{%
+% \pgfplotstableread@skiplinefalse
+% \pgfplotstableread@impl@gobble
+% }%
+% }%
+% }%
+% }%
+% }
+%--------------------------------------------------
+
+\def\pgfplotstableread@create@column@lists{%
+ \pgfutil@loop
+ \ifnum\pgfplotstableread@curcol<\pgfplotstableread@numcols\relax
+ \def\pgfplots@loc@TMPa{\pgfplotsapplistXnewempty[to global]}%
+ \expandafter\pgfplots@loc@TMPa\csname pgfp@numtable@glob@col@\thepgfplotstableread@curcol\endcsname
+ \pgfplotstableread@countadvance\pgfplotstableread@curcol
+ \pgfutil@repeat
+}
+
+\def\pgfplotstableread@create@column@names@with@numbers{%
+ \pgfplotstableread@countreset\pgfplotstableread@curcol
+ \pgfutil@loop
+ \ifnum\pgfplotstableread@curcol<\pgfplotstableread@numcols\relax
+ \edef\pgfplotstable@loc@TMPb{\thepgfplotstableread@curcol}%
+ \expandafter\pgfplotslistpushbackglobal\pgfplotstable@loc@TMPb\to\pgfplotstable@colnames@glob
+ \pgfplotstableread@countadvance\pgfplotstableread@curcol
+ \pgfutil@repeat
+}
+
+\long\def\pgfplotstableread@impl@gobble#1\pgfplotstable@EOI{}%
+
+\def\pgfplotstable@EOI{\pgfplotstable@EOI}%
+
+% A loop command which processes every single entry in a raw data row #2
+% and invokes the macro #1{<arg>} for each found column entry.
+%
+% Columns are separated by the /pgfplots/table/col sep character.
+%
+% #1: a command which takes precisely one argument. It will be called
+% for each found column entry
+%
+% #2: a macro containing a raw data line with <col sep> separated
+% entries.
+\long\def\pgfplotstableread@impl@DO#1#2{%
+ \ifpgfplotstable@trimcells
+ \long\def\pgfplotstableread@impl@ITERATE@NEXT@##1{%
+ \pgfkeys@spdef\pgfplotstableread@impl@ITERATE@NEXT@@@{##1}%
+ \expandafter#1\expandafter{\pgfplotstableread@impl@ITERATE@NEXT@@@}%
+ }%
+ \else
+ \let\pgfplotstableread@impl@ITERATE@NEXT@=#1\relax
+ \fi
+ \expandafter\pgfplotstableread@impl@DO@\expandafter{#2}%
+}
+{%
+ \catcode`\ =10
+ \catcode`\;=12
+ \catcode`\:=12
+ \gdef\pgfplotstableread@impl@prepare@DO{%
+ \ifcase\pgfplotstableread@COLSEP@CASE\relax
+ % col sep=space:
+ \catcode`\ =10
+ \long\def\pgfplotstableread@impl@DO@##1{\pgfplotstableread@impl@ITERATE##1 \pgfplotstable@EOI}%
+ \or
+ % col sep=comma:
+ \let\pgfplotstableread@impl@ITERATE@NEXT=\pgfplotstableread@impl@ITERATE@NEXT@COMMA
+ \long\def\pgfplotstableread@impl@DO@##1{\pgfplotstableread@impl@ITERATE##1,\pgfplotstable@EOI}%
+ \or
+ % col sep=semicolon:
+ \catcode`\;=12
+ \let\pgfplotstableread@impl@ITERATE@NEXT=\pgfplotstableread@impl@ITERATE@NEXT@SEMICOLON
+ \long\def\pgfplotstableread@impl@DO@##1{\pgfplotstableread@impl@ITERATE##1;\pgfplotstable@EOI}%
+ \or
+ % col sep=colon:
+ \catcode`\:=12
+ \let\pgfplotstableread@impl@ITERATE@NEXT=\pgfplotstableread@impl@ITERATE@NEXT@COLON
+ \long\def\pgfplotstableread@impl@DO@##1{\pgfplotstableread@impl@ITERATE##1:\pgfplotstable@EOI}%
+ \or
+ % col sep=brace:
+ % allow multi line cells:
+ \endlinechar=\pgfplotstableread@oldendlinechar\relax
+ \let\pgfplotstableread@impl@ITERATE@NEXT=\pgfplotstableread@impl@ITERATE@NEXT@BRACE
+ \long\def\pgfplotstableread@impl@DO@##1{\pgfplotstableread@impl@ITERATE##1\pgfplotstable@EOI}%
+ \or
+ % col sep=tab:
+ \catcode`\^^I=12
+ \let\pgfplotstableread@impl@ITERATE@NEXT=\pgfplotstableread@impl@ITERATE@NEXT@TAB
+ \long\edef\pgfplotstableread@impl@DO@##1{\noexpand\pgfplotstableread@impl@ITERATE##1\pgfplotstableread@tab\noexpand\pgfplotstable@EOI}%
+ \or
+ % col sep=&:
+ \let\pgfplotstableread@impl@ITERATE@NEXT=\pgfplotstableread@impl@ITERATE@NEXT@AMPERSAND
+ \long\def\pgfplotstableread@impl@DO@##1{\pgfplotstableread@impl@ITERATE##1&\pgfplotstable@EOI}%
+ \fi
+ }%
+}%
+\long\def\pgfplotstableread@impl@ITERATE{%
+ \pgfutil@ifnextchar\pgfplotstable@EOI{%
+ \pgfplotstableread@impl@gobble
+ }{%
+ \pgfplotstableread@impl@ITERATE@NEXT
+ }%
+}%
+\long\def\pgfplotstableread@impl@ITERATE@NEXT#1 {%
+ \pgfplotstableread@impl@ITERATE@NEXT@{#1}%
+ \pgfplotstableread@impl@ITERATE
+}%
+\long\def\pgfplotstableread@impl@ITERATE@NEXT@COMMA#1,{%
+ \pgfplotstableread@impl@ITERATE@NEXT@{#1}%
+ \pgfplotstableread@impl@ITERATE
+}%
+\long\def\pgfplotstableread@impl@ITERATE@NEXT@SEMICOLON#1;{%
+ \pgfplotstableread@impl@ITERATE@NEXT@{#1}%
+ \pgfplotstableread@impl@ITERATE
+}%
+\long\def\pgfplotstableread@impl@ITERATE@NEXT@COLON#1:{%
+ \pgfplotstableread@impl@ITERATE@NEXT@{#1}%
+ \pgfplotstableread@impl@ITERATE
+}%
+\long\def\pgfplotstableread@impl@ITERATE@NEXT@BRACE#1{%
+ \pgfplotstableread@impl@ITERATE@NEXT@{#1}%
+ \pgfplotstableread@impl@ITERATE
+}%
+\long\def\pgfplotstableread@impl@ITERATE@NEXT@AMPERSAND#1&{%
+ \pgfplotstableread@impl@ITERATE@NEXT@{#1}%
+ \pgfplotstableread@impl@ITERATE
+}%
+\begingroup
+\catcode`\^^I=12
+\gdef\pgfplotstableread@tab{^^I}%
+\long\gdef\pgfplotstableread@impl@ITERATE@NEXT@TAB#1^^I{% the following white spaces are SPACES, not tabs:
+ \pgfplotstableread@impl@ITERATE@NEXT@{#1}%
+ \pgfplotstableread@impl@ITERATE
+}%
+\endgroup
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% these values are only usable for a read-listener, that means:
+% when using
+%
+% \pgfplotstableread{<file>} to listener<\macro>
+%
+% -> <\macro> can than use the methods
+%
+% \pgfplotstablereadgetcolindex{<index>}{<\content>}
+% performs \let\content=<content of column no <index> >
+\def\pgfplotstablereadgetcolindex@#1#2{%
+ \pgfutil@ifundefined{pgfplotstblread@colcontent@no#1}{%
+ \pgfplotsthrow{no such element}{#2}{Sorry, the requested column number '#1' in table '\pgfplotstableread@filename' does not exist!? Please verify you used the correct index 0 <= i < N.}\pgfeov%
+ }{%
+ \expandafter\let\expandafter#2\csname pgfplotstblread@colcontent@no#1\endcsname
+ }%
+}%
+
+\pgfkeysdef{/pgfplots/table/@undefined column text}{#1__column_not_found.}%
+\def\pgfplotstable@undefinedtext#1{\pgfkeysvalueof{/pgfplots/table/@undefined column text/.@cmd}#1\pgfeov}%
+
+% As \pgfplotstablereadgetcolindex, but
+% \pgfplotstablereadvalueofcolindex{<index>}
+% directly expands to the value stored in the desired column.
+%
+% Example:
+% \pgfplotstablereadvalueofcolindex{3} -> expands to '42' if '42' is
+% written in column no 3.
+%
+% Column indexing starts at 0.
+%
+% @ATTENTION: since such a command may occur within an \edef or an
+% \csname, it can't perform sanity checking. Proving an invalid index
+% expands to \pgfkeysvalueof{/pgfplots/table/@undefined column text}.
+\def\pgfplotstablereadvalueofcolindex@#1{%
+ \pgfutil@ifundefined{pgfplotstblread@colcontent@no#1}{%
+ \pgfplotstable@undefinedtext{colindex#1}%
+ }{%
+ \csname pgfplotstblread@colcontent@no#1\endcsname
+ }%
+}
+
+% \pgfplotstablereadgetcolname{<name>}{<\content>}
+% performs \let\content=<content of column named <name> >
+\def\pgfplotstablereadgetcolname@#1#2{%
+ \pgfplotstablereadgetptrtocolname{#1}{\pgfplots@loc@TMPa}%
+ \pgfplotstablereadevalptr\pgfplots@loc@TMPa{#2}%
+}%
+
+% This here is the implementation of \pgfplotstablereadvalueofcolname
+% (and \thisrow{<colname>}) for use inside of the 'read to listener'
+% framework.
+%
+% Like \pgfplotstablereadgetcolname, but this one expands directly to
+% the value of the desired column.
+%
+% #1: a column name or a column alias.
+%
+% @ATTENTION: since such a command may occur within an \edef or an
+% \csname, it can't perform sanity checking. Proving an invalid index
+% expands to \pgfkeysvalueof{/pgfplots/table/@undefined column text}.
+\def\pgfplotstablereadvalueofcolname@#1{%
+ \pgfplotstable@thisrow@impl{#1}{pgfplotstblread@colindex@for@name}{\pgfplotstable@thisrow@impl@read}%
+}%
+\def\pgfplotstable@thisrow@impl@read#1{\csname pgfplotstblread@colcontent@no#1\endcsname}%
+
+% This implements \thisrow in different contexts.
+%
+% Usage:
+% \def\thisrow#1{\pgfplotstable@thisrow@impl{#1}{macroprefix@}{\pgfplotstable@thisrow@impl@}}
+%
+% Then, \thisrow{existingcol}
+% will expand to
+% -> \pgfplotstable@thisrow@impl@{\csname macroprefix@existingcol\endcsname}
+% -> \csname macroprefix@existingcol\endcsname
+%
+% Furthermore, if '#1' is no existing col and there exists /pgfplots/table/alias/#1,
+% \thisrow{aliased}
+% will expand to
+% -> \pgfplotstable@thisrow@impl@{\csname macroprefix@\pgfkeysvalueof{/pgfplots/table/alias/aliased}\endcsname}
+% -> \csname macroprefix@\pgfkeysvalueof{/pgfplots/table/alias/aliased}\endcsname
+%
+% #1: the argument for \thisrow{#1}
+% #2: a macro prefix such that \csname #2<colname>\endcsname contains
+% the value of the current row for (physical) column <colname>
+% #3: the name of a one-argument-macro which will get \csname #2<colname>\endcsname
+% as argument. This is the last step of \thisrow. It allows indirect
+% access by translating colnames to col indices in '\pgfplotstableread to listener'
+\def\pgfplotstable@thisrow@impl#1#2#3{%
+ \pgfutil@ifundefined{#2#1}%
+ {%
+ % WARNING : this code has been REPLICATED in
+ % *** \pgfplotstablereadgetptrtocolname ***
+ % *** \pgfplotstablegetcolumnbyname ***
+ % *** \pgfplotstableresolvecolname ***
+ % *** \pgfplotstablereadvalueofcolname ***
+ \pgfkeysifdefined{/pgfplots/table/alias/#1}{%
+ \pgfutil@ifundefined{#2\pgfkeysvalueof{/pgfplots/table/alias/#1}}{%
+ \pgfplotstable@undefinedtext{\pgfkeysvalueof{/pgfplots/table/alias/#1}}%
+ }{%
+ #3{\csname #2\pgfkeysvalueof{/pgfplots/table/alias/#1}\endcsname}%
+ }%
+ }{%
+ \pgfplotstable@undefinedtext{#1}%
+ }%
+ }%
+ {%
+ #3{\csname #2#1\endcsname}%
+ }%
+}%
+\def\pgfplotstable@thisrow@impl@#1{#1}%
+
+% \pgfplotstablereadgetptrtocolname{<name>}{\ptr}
+% Creates some sort of "pointer" to the column named <name>. This
+% pointer can than be used every time a new line has been reported to
+% the listener. It works like this:
+%
+% \let\ptr=\pgfutil@empty
+% \def\macro{%
+% \ifx\ptr\empty
+% \pgfplotstablereadgetptrtocolname{<my col>}{\ptr}%
+% \fi
+% \pgfplotstablereadevalptr{\ptr}{\content}%
+% -> do something with \content!
+% }
+%
+% \pgfplotstableread{<file>} to listener<\macro>
+%
+% -> will evaluate \macro foreach row.
+%
+% The advantage of such a prepared pointer over \thisrow{#1} or
+% \getthisrow{#1} is simply efficiency and sanity checking: the checks
+% are done at the time of pointer creation, dereferencing the pointer
+% is fast.
+\def\pgfplotstablereadgetptrtocolname@#1#2{%
+ \def#2{0}%
+ \pgfplotstable@getcol{#1}\of{\pgfplotstableread@filename}\to{#2}\getcolmethod{getptr}%
+}%
+
+% As \pgfplotstablereadgetptrtocolname, but this here accesses columns
+% by index.
+\def\pgfplotstablereadgetptrtocolindex@#1#2{\edef#2{#1}}%
+
+% \pgfplotstablereadevalptr{<\ptr>}{<\content}
+% writes the current value of <\ptr> to <\content>. The pointer <\ptr>
+% must be initialised with \pgfplotstablereadgetptrtocolname
+\let\pgfplotstablereadevalptr@=\pgfplotstablereadgetcolindex@
+
+% \pgfplotstablereadvalueofptr{<\ptr>} -> expands to the pointers value.
+%
+% The pointer \ptr must be initialised with
+% \pgfplotstablereadgetptrtocolname.
+\let\pgfplotstablereadvalueofptr@=\pgfplotstablereadvalueofcolindex@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\long\def\pgfplotstableread@impl@nextrow@NEXT@listener#1{%
+ \expandafter\def\csname pgfplotstblread@colcontent@no\thepgfplotstableread@curcol\endcsname{#1}%
+ \pgfplotstableread@countadvance\pgfplotstableread@curcol
+}
+
+\long\def\pgfplotstableread@impl@nextrow@NEXT#1{%
+%\pgfplots@message{Inserting '#1' at (\thepgfplotstableread@lineno, \thepgfplotstableread@curcol).}%
+ \ifnum\pgfplotstableread@curcol<\pgfplotstableread@numcols\relax
+ \pgfplotslist@assembleentry{#1}\into\t@pgfplots@tokc
+ \def\pgfplotstableread@TMP{\expandafter\pgfplotsapplistXpushback\expandafter{\the\t@pgfplots@tokc}\to}%
+ \expandafter\pgfplotstableread@TMP\csname pgfp@numtable@glob@col@\thepgfplotstableread@curcol\endcsname
+ \pgfplotstableread@countadvance\pgfplotstableread@curcol
+ \else
+ \begingroup
+ \t@pgfplots@tokc={#1}%
+ \pgfplotsthrow{table columns unbalanced}{Table '\pgfplotstableread@filename' appears to have too many columns in line \thepgfplotstableread@lineno: Ignoring '\the\t@pgfplots@tokc'. PGFPlots found that the number of columns is larger than the previously determined number of columns. Please verify that every cell entry is separated correctly (use braces {<cell entry>} if necessary. Also verify that column names are plain ASCII.). This error is not critical}\pgfeov%
+ \endgroup
+ \fi
+}
+
+
+
+\long\def\pgfplotstableread@impl@collectcolnames@NEXT#1{%
+ \edef\pgfplotstable@loc@TMPa{#1}%
+ \ifx\pgfplotstable@loc@TMPa\pgfutil@empty
+ \edef\pgfplotstable@loc@TMPa{\thepgfplotstableread@curcol}%
+ \pgfplotswarning{empty column name}{\pgfplotstableread@filename}{\pgfplotstable@loc@TMPa'}\pgfeov%
+ \fi
+ \expandafter\pgfplotstableread@impl@collectcolnames@NEXT@\expandafter{\pgfplotstable@loc@TMPa}%
+}
+\long\def\pgfplotstableread@impl@collectcolnames@NEXT@#1{%
+%\pgfplots@message{Got column name no \thepgfplotstableread@curcol\ as '#1'}%
+ \pgfutil@ifundefined{pgfplotstableread@impl@COLNAME@#1}{%
+ \def\pgfplotstable@loc@TMPa{#1}%
+ }{% generate unique column names warning:
+ \pgfplots@warning{Table '\pgfplotstableread@filename' has non-unique column name '#1'. Only the first occurence can be accessed via column names.}%
+ \edef\pgfplotstable@loc@TMPa{#1--index\thepgfplotstableread@curcol}%
+ }%
+ \expandafter\def\csname pgfplotstableread@impl@COLNAME@#1\endcsname{foo}% remember this name.
+ \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotstable@loc@TMPa}\to\pgfplotstable@colnames@glob
+ \ifpgfplots@tableread@to@listener
+ % create an associative container colindex -> colname
+ % for use in a listener.
+ \expandafter\edef\csname pgfplotstblread@colindex@for@name#1\endcsname{\thepgfplotstableread@curcol}%
+ \fi
+ \pgfplotstableread@countadvance\pgfplotstableread@curcol
+}
+
+
+
+
+\long\def\pgfplotstableread@impl@countcols@and@identifynames@NEXT#1{%
+ \pgfplotstableread@countadvance\pgfplotstableread@curcol
+ \ifpgfplotstable@search@header
+ \ifpgfplotstableread@curline@contains@colnames
+ \else
+ \def\pgfplotstableread@CURTOK{#1}%
+ % can we safely use the \pgfmathfloatparsenumber here? I
+ % doubt it -- what if the header contains macros?
+ %
+ % there is no (simple) expandable "to lower case". check
+ % for the most common forms here.
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@nan
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@NaN
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@NAN
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@inf
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@Inf
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@INF
+ \else
+ \pgfplotstableread@isnumber@ITERATE#1\pgfplotstable@EOI
+ \fi\fi\fi\fi\fi\fi
+%\ifpgfplotstableread@curline@contains@colnames\pgfplots@message{'#1' is a column name!}\else\pgfplots@message{'#1' is NO column name!}\fi
+ \fi
+ \fi
+}
+\def\pgfplotstableread@isnumber@nan{nan}
+\def\pgfplotstableread@isnumber@NaN{NaN}
+\def\pgfplotstableread@isnumber@NAN{NAN}
+\def\pgfplotstableread@isnumber@inf{inf}
+\def\pgfplotstableread@isnumber@INF{INF}
+\def\pgfplotstableread@isnumber@Inf{Inf}
+\def\pgfplotstableread@isnumber@plus{+}
+\def\pgfplotstableread@isnumber@minus{-}
+\def\pgfplotstableread@isnumber@zero{0}
+\def\pgfplotstableread@isnumber@one{1}
+\def\pgfplotstableread@isnumber@two{2}
+\def\pgfplotstableread@isnumber@three{3}
+\def\pgfplotstableread@isnumber@four{4}
+\def\pgfplotstableread@isnumber@five{5}
+\def\pgfplotstableread@isnumber@six{6}
+\def\pgfplotstableread@isnumber@seven{7}
+\def\pgfplotstableread@isnumber@eight{8}
+\def\pgfplotstableread@isnumber@nine{9}
+\def\pgfplotstableread@isnumber@e{e}
+\def\pgfplotstableread@isnumber@E{E}
+\def\pgfplotstableread@isnumber@period{.}
+
+\def\pgfplotstableread@isnumber@ITERATE#1{%
+ \def\pgfplotstableread@CURTOK{#1}%
+ \ifx\pgfplotstableread@CURTOK\pgfplotstable@EOI
+ \def\pgfplotstableread@NEXT{}%
+ \else
+ \def\pgfplotstableread@NEXT{\pgfplotstableread@isnumber@ITERATE}%
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@plus
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@minus
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@zero
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@one
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@two
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@three
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@four
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@five
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@six
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@seven
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@eight
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@nine
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@e
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@E
+ \else
+ \ifx\pgfplotstableread@CURTOK\pgfplotstableread@isnumber@period
+ \else
+%\message{NO ITS NOT! Token: '\meaning\pgfplotstableread@CURTOK'}%
+ % it's no number, so it is a column name.
+ \pgfplotstableread@curline@contains@colnamestrue
+ \def\pgfplotstableread@NEXT{\pgfplotstableread@impl@gobble}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi
+ \pgfplotstableread@NEXT
+}
+
+\def\pgfplotstable@error#1{\pgfplotsthrow{unsupported operation}{#1}\pgfeov}%
+
+
+\def\pgfplotstableset{%
+ \pgfqkeys{/pgfplots/table}%
+}%
+
+% Accepts a macro #1 which contains an argument denoting a column
+% name.
+%
+% It checks whether #1 starts with '[index]', indicating that it is actually
+% a column INDEX. If that is the case,
+% \ifpgfplotstableread@foundcolnames is set to false and the index is
+% returned into #1.
+%
+% Otherwise, \ifpgfplotstableread@foundcolnames is set to true.
+\def\pgfplotstable@is@colname#1{%
+ \expandafter\pgfplotstabletypeset@is@colname@#1\pgfplotstable@EOI
+ \ifpgfplotstableread@foundcolnames
+ \else
+ \let#1=\pgfplotstable@loc@TMPa
+ \fi
+}%
+\def\pgfplotstabletypeset@is@colname@{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotstabletypeset@is@colname@index
+ }{%
+ \pgfplotstableread@foundcolnamestrue
+ \pgfplotstabletypeset@is@colname@name
+ }%
+}
+\def\pgfplotstabletypeset@is@colname@index@@{index}%
+\def\pgfplotstabletypeset@is@colname@index[#1]#2\pgfplotstable@EOI{%
+ \def\pgfplotstable@loc@TMPa{#1}%
+ \ifx\pgfplotstable@loc@TMPa\pgfplotstabletypeset@is@colname@index@@
+ \pgfplotstableread@foundcolnamesfalse
+ \edef\pgfplotstable@loc@TMPa{#2}%
+ \else
+ \pgfplotstableread@foundcolnamestrue
+ \fi
+}%
+\def\pgfplotstabletypeset@is@colname@name#1\pgfplotstable@EOI{}%
+
+% calls \pgfplotstableset{every table={#1}} where '#1' is the table
+% file name.
+%
+% Note that 'every table' is usually set *AFTER* any other option. In
+% other words: settings in 'every table' have higher precedence than
+% those provided, for example, at
+% \pgfplotstabletypeset[<options>]{...}.
+%
+% Why? Well, the <options> need to be set *before* the file name
+% argument is read. After all, it might contain an inline table for
+% which \catcodes need to be adjusted -- and <options> might explain
+% how.
+%
+% REMARK: An early attempt to change the precendence for 'every table'
+% was to set <options> again after 'every table'. But that is
+% incompatible with, for example '/.add={}{}' key handlers.
+%
+% This macro does nothing if 'every table' is empty.
+%
+% #1: the table name (argument to 'every table')
+% #2: The <options> which have already been set.
+\long\def\pgfplotstableset@every@table#1#2{%
+ \pgfkeysgetvalue{/pgfplots/table/every table/.@cmd}\pgfplotstable@loc@TMPa
+ \ifx\pgfplotstable@loc@TMPa\pgfplots@empty@style@key
+ \else
+ \pgfplotstableset{/pgfplots/table/every table={#1}}%,#2}%
+ \fi
+}%
+
+\def\pgfplotstabletypeset{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotstabletypeset@opt
+ }{%
+ \pgfplotstabletypeset@opt[]%
+ }%
+}
+\long\def\pgfplotstabletypeset@opt[#1]#2{%
+ \pgfplotstable@error@pkg{Please load \string\usepackage{pgfplotstable} before using \string\pgfplotstabletypeset}%
+}
+\let\pgfplotstabletypesetfile=\pgfplotstabletypeset
+
+\def\pgfplotstablecreatecol{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotstablecreatecol@opt
+ }{%
+ \pgfplotstablecreatecol@opt[]%
+ }%
+}%
+\def\pgfplotstablecreatecol@opt[#1]#2#3{%
+ \pgfplotstable@error@pkg{Please load \string\usepackage{pgfplotstable} before using \string\pgfplotstablecreatecol}%
+}%
+
+% Iterates through every column of table '#1' and invokes the code
+% '#3' for each column. The current column name will be available as
+% '#2' and the current column index as |\pgfplotstablecol| (starting
+% with 0).
+%
+% Example:
+% \pgfplotstableforeachcolumn{\table}\as\colname{%
+% The column name is `\colname'; its index \pgfplotstablecol.\par
+% }%
+%
+% REMARK: this routine does NOT introduce TeX groups.
+\long\def\pgfplotstableforeachcolumn#1\as#2#3{%
+ \def\pgfplotstablecol{0}%
+ \pgfplotslistforeachungrouped#1\as#2{%
+ #3\relax%
+ \pgfplotsutil@advancestringcounter\pgfplotstablecol
+ }%
+ \let\pgfplotstablecol=\relax
+}%
+\let\pgfplotstableforeachcolumn@orig=\pgfplotstableforeachcolumn
+
+% A variant of \pgfplotstableforeachcolumn which is used inside of
+% \pgfplotstableread to listener.
+%
+% It is used as \pgfplotstableforeachcolumn\as\cur{<do something with \cur>}
+\long\def\pgfplotstableforeachcolumn@listener#1\as#2#3{%
+ \pgfplotstableforeachcolumn@orig\pgfplotstable@colnames@glob\as{#2}{#3}%
+}%
+
+% Reports every element t_{ij} for a fixed column j (in read-only
+% mode).
+%
+% For every cell, the code '#4' will be executed where '#3' will
+% contain the cell's value. During code '#4', the macro
+% \pgfplotstablerow will contain the current row index.
+%
+% #1: either a column name or the string '[index]' followed by a
+% number denoting a column index Access by column name is much faster..
+% #2: the table (macro or file name)
+% #3: the macro in which the cell values shall be written
+% #4: the code to execute.
+%
+% Example:
+% \pgfplotstableforeachcolumnelement{colname}\of\table\as\cellelem{%
+% I have now cell element `\cellelem' at row index
+% `\pgfplotstablerow'.
+% \par
+% }
+%
+% REMARK: this routine does NOT introduce TeX groups.
+\long\def\pgfplotstableforeachcolumnelement#1\of#2\as#3#4{%
+ \def\pgfplotstablerow{0}%
+ \pgfplotstablegetcolumn{#1}\of{#2}\to\pgfplotstableforeachcolumnelement@list
+ \pgfplotslistforeachungrouped\pgfplotstableforeachcolumnelement@list\as#3{%
+ % allow nesting by copying the old value of \pgfplotstablerow:
+ \expandafter\pgfplotstableforeachcolumnelement@\expandafter{\pgfplotstablerow}{#4}%
+ }%
+ \let\pgfplotstablerow=\relax
+}%
+% helper method to allow nesting. It copies \pgfplotstablerow.
+% #1: the expanded value of \pgfplotstablerow.
+\long\def\pgfplotstableforeachcolumnelement@#1#2{%
+ #2\relax
+ \def\pgfplotstablerow{#1}% restore to old value.
+ % advance.
+ \pgfplotsutil@advancestringcounter\pgfplotstablerow
+}%
+
+% A routine which is similar to \pgfplotstableforeachcolumnelement,
+% but this here checks for changes in \pgfplotsretval and writes them
+% back into the respected cell.
+%
+% The runtime is quadratic in the number of rows.
+\long\def\pgfplotstablemodifyeachcolumnelement#1\of#2\as#3#4{%
+ \def\pgfplotstablerow{0}%
+ %
+ % Step 0: get the REAL column name for '#1'.
+ % This needs modifications if '#1' is [index]<integer>.
+ % -> store the colname to \pgfplotstable@loc@TMPc:
+ \def\pgfplotstable@loc@TMPc{#1}%
+ \pgfplotstable@is@colname{\pgfplotstable@loc@TMPc}%%
+ \ifpgfplotstableread@foundcolnames
+ \else
+ \expandafter\pgfplotstablegetcolumnnamebyindex\pgfplotstable@loc@TMPc\of{#2}\to\pgfplotstable@loc@TMPc
+ \fi
+ % Step 0.1: prepare a command which re-assembles column '#1'
+ % (using the real column name).
+ % The re-assemblation command will be invoked at the end of each
+ % iteration. This complicated macro preparation allows nested
+ % calls to \pgfplotstablemodifyeachcolumnelement.
+ \t@pgfplots@toka={\expandafter\pgfplotslistpushback\expandafter{#3}\to}%
+ \edef\pgfplotstable@loc@TMPd{%
+ \the\t@pgfplots@toka{\expandafter\noexpand\csname\string#2@\pgfplotstable@loc@TMPc\endcsname}}%
+ % Step 1: copy the column data to \pgfplotstable@loc@TMPb
+ \expandafter\pgfplotstablegetcolumnbyname\pgfplotstable@loc@TMPc\of#2\to\pgfplotstable@loc@TMPb%
+ %
+ % clear the original column:
+ \expandafter\pgfplotslistnewempty\csname\string#2@\pgfplotstable@loc@TMPc\endcsname
+ %
+ % Call loop. The prepared re-assemble macro will be provided as macro argument
+ % to allow nested calls:
+ \expandafter\pgfplotstablemodifyeachcolumnelement@\expandafter{\pgfplotstable@loc@TMPd}
+ {\pgfplotstable@loc@TMPb}{#3}{#4}%
+ \let\pgfplotstablerow=\relax
+}%
+% #1: post-iteration code
+% #2: the row list
+% #3: the loop macro to assign
+% #4: the loop body
+\long\def\pgfplotstablemodifyeachcolumnelement@#1#2#3#4{%
+ \pgfplotslistforeachungrouped{#2}\as#3{%
+ % allow nesting by copying the old value of \pgfplotstablerow:
+ \expandafter\pgfplotstableforeachcolumnelement@\expandafter{\pgfplotstablerow}{#4}%
+ #1%
+ }%
+}
+
+% Selects a single table element at row #1 and column #2 from table
+% #3.
+%
+% #1: a row index.
+% #2: a column name or the string '[index]' followed by a number
+% denoting a column index. Access by column name is much faster.
+% #3: the table (macro or file name).
+%
+% The cell value will be written into the macro \pgfplotsretval.
+%
+% REMARK:
+% this routine is supposed to be very slow: it needs time O(N) where N
+% is the number of rows. This may change in future versions.
+%
+% Example:
+% \pgfplotstablegetelem{0}{[index]2}\of\table
+% The elem is `\pgfplotsretval'.
+\def\pgfplotstablegetelem#1#2\of#3{%
+ \begingroup
+ \pgfplotstablegetcolumn{#2}\of{#3}\to\pgfplotstable@loc@TMPa
+ \def\pgfplotsexceptionmsg{Sorry, row `#1' does not exist in table \pgfplotstablenameof{#3}}%
+ \pgfplotslistselect#1\of\pgfplotstable@loc@TMPa\to\pgfplotsretval
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+\def\pgfplotstablegetcolumnlist#1\to#2{\let#2=#1}
+
+% Defines \pgfmathresult (and now also \pgfplotsretval) to be the number of rows in table #1.
+%
+% #1 may be either a loaded table structure (a macro name) or a table
+% file name. In the latter case, the file will be loaded temporarily.
+\long\def\pgfplotstablegetrowsof#1{%
+ \pgfplotstable@isloadedtable{#1}{%
+ % ah - it is an already loaded table!
+ \begingroup
+ \pgfplotslistfront#1\to\pgfplotstablegetrows@@
+ \expandafter\pgfplotslistsize\csname\string#1@\pgfplotstablegetrows@@\endcsname\to\c@pgfplotstable@counta
+ \edef\pgfmathresult{\the\c@pgfplotstable@counta}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ }{%
+ % ah - it is a file name.
+ \begingroup
+ \pgfplotstableread{#1}\pgfplotstablegetrows@
+ \pgfplotstablegetrowsof{\pgfplotstablegetrows@}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ }%
+ \let\pgfplotsretval=\pgfmathresult
+}%
+
+% Defines \pgfplotsretval to contain the number of columns in table
+% #1.
+%
+% #1 may be either a loaded table structure (a macro name) or a table
+% file name. In the latter case, the file will be loaded temporarily.
+\long\def\pgfplotstablegetcolsof#1{%
+ \pgfplotstable@isloadedtable{#1}{%
+ % ah - it is an already loaded table!
+ \begingroup
+ \pgfplotslistsize#1\to\c@pgfplotstable@counta
+ \edef\pgfplotsretval{\the\c@pgfplotstable@counta}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ }{%
+ % ah - it is a file name.
+ \begingroup
+ \pgfplotstableread{#1}\pgfplots@table
+ \pgfplotstablegetcolsof{\pgfplots@table}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+ }%
+ \let\pgfmathresult=\pgfplotsretval
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotstexio.lua b/graphics/pgf/contrib/pgfplots/tex/pgfplotstexio.lua
new file mode 100644
index 0000000000..cffb518c92
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotstexio.lua
@@ -0,0 +1,500 @@
+-- This file has dependencies to BOTH, the TeX part of pgfplots and the LUA part.
+-- It is the only LUA component with this property.
+--
+-- Its purpose is to encapsulate the communication between TeX and LUA in a central LUA file
+--
+--
+-- Here is the idea how the TeX backend communicates with the LUA backend:
+--
+-- * TeX can call LUA methods in order to "do something". The reverse direction is not true: LUA cannot call TeX methods.
+--
+-- * the only way that LUA can read TeX input values or write TeX output values is the top layer (at the time of this writing: only pgfplotstexio.lua ).
+--
+-- * The LUA backend has one main purpose: scalability and performance.
+-- Its purpose is _not_ to run a standalone visualization.
+--
+-- The precise meaning of "scalability" is: the LUA backend should do as much
+-- as possible which is done for single coordinates. Coordinates constitute
+-- "scalability": the number of coordinates can become arbitrarily large.
+--
+-- "Performance" is related to scalability. But it is more: some dedicated
+-- utility function might have a TeX backend and will be invoked whenever it
+-- is needed. Candidates are colormap functions, z buffer arithmetics etc.
+--
+-- Thus, the best way to ensure "scalability" is to move _everything_ which is to be done for a single coordinate to LUA.
+--
+-- Sometimes, this will be impossible or too expensive.
+-- Here, "Performance" might still be optimized by some dedicated LUA function.
+--
+--
+-- Unfortunately, the LUA backend does not simplify the code base - it makes it more complicated.
+-- This is due to the way it is used: one needs to know when the TeX backend
+-- delegates all its work to LUA. It is also due to the fact that it
+-- duplicates code: the same code is present in TeX and in LUA. I chose to keep
+-- the two code bases close to each other. This has a chance to simplify maintenance: if I know
+-- how something works in TeX, and I find some entry point in LUA, it will
+-- hopefully be closely related.
+--
+--
+-- It follows an overview over entry points into the LUA backend:
+--
+-- * \begin{axis}. It invokes \pgfplots@prepare@LUA@api .
+-- The purpose is to define the global pgfplots.gca "_g_et _c_urrent _a_xis" and to transfer some key presets.
+--
+-- Log message: "lua backend=true: Activating LUA backend for axis."
+--
+-- * \end{axis}. It invokes \pgfplots@LUA@visualization@update@axis .
+-- The purpose is to transfer results of the survey phase to LUA; in particular axis properties like
+-- the view direction, data scale transformations, axis wide limits and some related properties.
+-- This has nothing to do with coordinates; the survey phase of coordinates is handled in a different way (see below).
+--
+-- Eventually, \pgfplots@LUA@cleanup will clear the global pgfplots.gca .
+--
+-- * \addplot . This has much to do with scalability, so much of its functionality is done in the LUA backend.
+--
+-- Keep in mind that \addplot is part of the survey phase: it collects coordinates and updates axis limits.
+-- Afterwards, it stores the survey results in the current axis.
+--
+-- The survey phase currently has two different ways to communicate with the LUA backend:
+--
+-- 1. PARTIAL MODE. In this mode, the coordinate stream comes from TeX:
+-- some TeX code generates the coordinates. Whenever the stream is ready,
+-- it will invoke \pgfplots@LUA@survey@point . This, in turn, calls the
+-- LUA backend in order to complete the survey (which boils down to
+-- pgfplots.texSurveyPoint). PARTIAL MODE saves lots of time, but its
+-- scalability is limited due to the intensive use of TeX, it is less
+-- powerful than COMPLETE MODE.
+--
+-- 2. COMPLETE MODE. In this mode, the entire coordinate stream is on the
+-- LUA side. The TeX code will merely call start the survey phase, call
+-- LUA, and end the survey phase. This is the most efficient
+-- implementation. At the time of this writing, it is limited to `\addplot
+-- expression`: the code for `\addplot expression` tries to transfer the
+-- entire processing to the LUA backend. If it succeeds, it will do
+-- nothing on the TeX side.
+--
+-- Both PARTIAL MODE and COMPLETE MODE call
+-- \pgfplots@LUA@survey@start : transfer plot type and current axis arguments to LUA
+-- and
+-- \pgfplots@LUA@survey@end : copy LUA axis arguments back to TeX.
+--
+-- Eventually, the axis will initiate the visualization phase for each plot. This is done by
+-- a) \pgfplots@LUA@visualization@init : it calls pgfplots.texVisualizationInit() and results in the log message
+-- "lua backend=true: Activating partial LUA backend for visualization of plot 0".
+-- b) \pgfplots@LUA@visualization@of@current@plot : it transfers control
+-- to LUA (pgfplots.texVisualizePlot) and does as much with the
+-- coordinates as possible. Eventually, it streams the result back to
+-- TeX which will visualize the stream by means of PGF's plot streams.
+-- This is somewhat complicated since it modifies the TeX streaming.
+local pgfplotsmath = pgfplots.pgfplotsmath
+local tex=tex
+local tostring=tostring
+local error=error
+local table=table
+local string=string
+local pairs=pairs
+local pcall=pcall
+local type=type
+local lpeg = require("lpeg")
+local math = math
+
+do
+-- all globals will be read from/defined in pgfplots:
+local _ENV = pgfplots
+
+local pgftonumber = pgfluamathfunctions.tonumber
+
+-- will be assigned by pgfplots at boot time.
+LOAD_TIME_CATCODETABLE = nil
+
+-- Called during \addplot, i.e. during the survey phase. It is only called in PARTIAL MODE (see above).
+function texSurveyPoint(x,y,z,meta)
+ local pt = Coord.new()
+ pt.x[1] = x
+ pt.x[2] = y
+ pt.x[3] = z
+ pt.meta = meta
+
+ gca.currentPlotHandler:surveypoint(pt)
+end
+
+-- Called during \addplot, i.e. during the survey phase. It is only called in PARTIAL MODE (see above).
+function texSurveyAddJump()
+ local pt = Coord.new()
+ pt.x[1] = nil
+ pt.x[2] = nil
+ pt.x[3] = nil
+ pt.meta = nil
+
+ gca:addSurveyedJump(gca.currentPlotHandler, pt)
+end
+
+-- Copies survey results of the current plot back to TeX. It prints a couple of executable TeX statements as result.
+-- @see \pgfplots@LUA@survey@end
+function texSurveyEnd()
+ local result = gca:surveyToPgfplots(gca.currentPlotHandler, true)
+ --log("returning " .. result .. "\n\n")
+
+ tex.sprint(LOAD_TIME_CATCODETABLE, result);
+ gca.currentPlotHandler=nil
+end
+
+-- A performance optimization: point meta transformation is done on the LUA side.
+--
+-- expands to the transformed point meta
+function texPerpointMetaTrafo(metaStr)
+ local meta = pgftonumber(metaStr)
+ local transformed = gca.currentPlotHandler:visualizationTransformMeta(meta);
+ tex.sprint(LOAD_TIME_CATCODETABLE, tostringfixed(transformed));
+end
+
+-- Called at the beginning of each plot visualization.
+--
+-- expands to '1' if LUA is available for this plot and '0' otherwise.
+-- @see texVisualizePlot
+function texVisualizationInit(plotNum, plotIs3d)
+ if not plotNum or plotIs3d==nil then error("arguments must not be nil") end
+
+ local currentPlotHandler = gca.plothandlers[plotNum+1]
+ gca.currentPlotHandler = currentPlotHandler;
+ if currentPlotHandler then
+ currentPlotHandler.plotIs3d = plotIs3d
+ currentPlotHandler:visualizationPhaseInit();
+ tex.sprint("1")
+ else
+ -- ok, this plot has no LUA support.
+ tex.sprint("0")
+ end
+end
+
+local pgfXyCoordSerializer = function(pt)
+ -- FIXME : it is unsure of whether this here really an improvement - or if it would be faster to compute that stuff in TeX...
+ if pt.pgfXY ~=nil then
+ return "{" .. tostringfixed(pt.pgfXY[1]) .. "}{" .. tostringfixed(pt.pgfXY[2]) .. "}"
+ else
+ return "{0}{0}"
+ end
+end
+
+-- Actually does as much of the visualization of the current plot: it transforms all coordinates to some point where the TeX visualization mode continues.
+--
+-- It expands to the resulting coordinates. Note that these coordinates are already mapped somehow (typically: to fixed point)
+-- @see texVisualizationInit
+function texVisualizePlot(visualizerFactory)
+ if not visualizerFactory then error("arguments must not be nil") end
+ if type(visualizerFactory) ~= "function" then error("arguments must be a function (a factory)") end
+
+ local currentPlotHandler = gca.currentPlotHandler
+ if not currentPlotHandler then error("Illegal state: The current plot has no LUA plot handler!") end
+
+ local visualizer = visualizerFactory(currentPlotHandler)
+
+ local result = visualizer:getVisualizationOutput()
+ local result_str = currentPlotHandler:getCoordsInTeXFormat(gca, result, pgfXyCoordSerializer)
+ --log("returning " .. result_str .. "\n\n")
+ tex.sprint(LOAD_TIME_CATCODETABLE, result_str)
+end
+
+-- Modifies the Surveyed coordinate list.
+-- Expands to nothing
+function texApplyZBufferReverseScanline(scanLineLength)
+ local currentPlotHandler = gca.currentPlotHandler
+ if not currentPlotHandler then error("This function cannot be used in the current context") end
+
+ currentPlotHandler:reverseScanline(scanLineLength)
+end
+
+-- Modifies the Surveyed coordinate list.
+-- Expands to nothing
+function texApplyZBufferReverseTransposed(scanLineLength)
+ local currentPlotHandler = gca.currentPlotHandler
+ if not currentPlotHandler then error("This function cannot be used in the current context") end
+
+ currentPlotHandler:reverseTransposed(scanLineLength)
+end
+
+-- Modifies the Surveyed coordinate list.
+-- Expands to nothing
+function texApplyZBufferReverseStream()
+ local currentPlotHandler = gca.currentPlotHandler
+ if not currentPlotHandler then error("This function cannot be used in the current context") end
+
+ currentPlotHandler:reverseStream(scanLineLength)
+end
+
+-- Modifies the Surveyed coordinate list.
+--
+-- Note that this is UNRELATED to mesh/surface plots! They have their own (patch-based) z buffer.
+--
+-- Expands to nothing
+function texApplyZBufferSort()
+ local currentPlotHandler = gca.currentPlotHandler
+ if not currentPlotHandler then error("This function cannot be used in the current context") end
+
+ currentPlotHandler:sortCoordinatesByViewDepth()
+end
+
+-- Modifies the Surveyed coordinate list.
+-- Expands to the resulting coordinates
+function texGetSurveyedCoordsToPgfplots()
+ local currentPlotHandler = gca.currentPlotHandler
+ if not currentPlotHandler then error("This function cannot be used in the current context") end
+
+ tex.sprint(LOAD_TIME_CATCODETABLE, currentPlotHandler:surveyedCoordsToPgfplots(gca))
+end
+
+function texColorMapSetScaleOrderZ(mapName, scaleOrderZ)
+ local colormap = ColorMaps[mapName];
+ if colormap then
+ colormap:setScaleOrderZ(scaleOrderZ)
+ end
+end
+
+-- Performance optimization: computes the colormap lookup.
+function texColorMapPrecomputed(mapName, inMin, inMax, x)
+ local colormap = ColorMaps[mapName];
+ if colormap then
+ local result = colormap:findPrecomputed(
+ pgftonumber(inMin),
+ pgftonumber(inMax),
+ pgftonumber(x))
+
+ local str = ""
+ for i = 1,#result do
+ if i>1 then str = str .. "," end
+ str = str .. tostringfixed(result[i])
+ end
+ tex.sprint(LOAD_TIME_CATCODETABLE, str)
+ end
+end
+
+-- Performance optimization: computes the colormap lookup.
+function texColorMapFindPiecewiseConst(mapName, inMin, inMax, x)
+ local colormap = ColorMaps[mapName];
+ if colormap then
+ local result = colormap:findPiecewiseConst(
+ pgftonumber(inMin),
+ pgftonumber(inMax),
+ pgftonumber(x))
+
+ local str = ""
+ for i = 1,#result do
+ if i>1 then str = str .. "," end
+ str = str .. tostringfixed(result[i])
+ end
+ tex.sprint(LOAD_TIME_CATCODETABLE, str)
+ end
+end
+
+local function isStripPrefixOrSuffixChar(char)
+ return char == ' ' or char == '{' or char == "}"
+end
+
+-- Expressions can be something like
+-- ( {(6+(sin(3*(x+3*y))+1.25)*cos(x))*cos(y)},
+-- {(6+(sin(3*(x+3*y))+1.25)*cos(x))*sin(y)},
+-- {((sin(3*(x+3*y))+1.25)*sin(x))} );
+--
+-- These result in expressions = { " {...}", " {...}", " {...} " }
+-- -> this function removes the surrounding braces and the white spaces.
+local function removeSurroundingBraces(expressions)
+ for i=1,#expressions do
+ local expr = expressions[i]
+ local startIdx
+ local endIdx
+ startIdx=1
+ while startIdx<#expr and isStripPrefixOrSuffixChar(string.sub(expr,startIdx,startIdx)) do
+ startIdx = startIdx+1
+ end
+ endIdx = #expr
+ while endIdx > 0 and isStripPrefixOrSuffixChar(string.sub(expr,endIdx,endIdx)) do
+ endIdx = endIdx-1
+ end
+
+ expr = string.sub(expr, startIdx, endIdx )
+ expressions[i] = expr
+ end
+end
+
+-------------
+-- A parser for foreach statements - at least those which are supported in this LUA backend.
+--
+local samplesAtToDomain
+do
+ local P = lpeg.P
+ local C = lpeg.C
+ local V = lpeg.V
+ local match = lpeg.match
+ local space_pattern = P(" ")^0
+
+ local Exp = V"Exp"
+ local comma = P"," * space_pattern
+ -- this does not catch balanced braces. Ok for now... ?
+ local argument = C( ( 1- P"," )^1 ) * space_pattern
+ local grammar = P{ "initialRule",
+ initialRule = space_pattern * Exp * -1,
+ Exp = lpeg.Ct(argument * comma * argument * comma * P"..." * space_pattern * comma *argument )
+ }
+
+ -- Converts very simple "samples at" values to "domain=A:B, samples=N"
+ --
+ -- @param foreachString something like -5,-4,...,5
+ -- @return a table where
+ -- [0] = domain min
+ -- [1] = domain max
+ -- [2] = samples
+ -- It returns nil if foreachString is no "very simple value of 'samples at'"
+ samplesAtToDomain = function(foreachString)
+ local matches = match(grammar,foreachString)
+
+ if not matches or #matches ~= 3 then
+ return nil
+ else
+ local arg1 = matches[1]
+ local arg2 = matches[2]
+ local arg3 = matches[3]
+ arg1= pgfluamathparser.pgfmathparse(arg1)
+ arg2= pgfluamathparser.pgfmathparse(arg2)
+ arg3= pgfluamathparser.pgfmathparse(arg3)
+
+ if not arg1 or not arg2 or not arg3 then
+ return nil
+ end
+
+ if arg1 > arg2 then
+ return nil
+ end
+
+ local domainMin = arg1
+ local h = arg2-arg1
+ local domainMax = arg3
+
+ -- round to the nearest integer (using +0.5, should be ok)
+ local samples = math.floor((domainMax - domainMin)/h + 0.5) + 1
+
+ return domainMin, domainMax, samples
+ end
+ end
+end
+
+-- This is the code which attempts to transfer control from `\addplot expression' to LUA.
+--
+-- If it succeeds, the entire plot stream and the entire survey phase has been done in LUA.
+--
+-- generates TeX output '1' on success and '0' on failure
+-- @param debugMode one of a couple of strings: "off", "verbose", or "compileerror"
+function texAddplotExpressionCoordinateGenerator(
+ is3d,
+ xExpr, yExpr, zExpr,
+ sampleLine,
+ domainxmin, domainxmax,
+ domainymin, domainymax,
+ samplesx, samplesy,
+ variablex, variabley,
+ samplesAt,
+ debugMode
+)
+ local plothandler = gca.currentPlotHandler
+ local coordoutputstream = SurveyCoordOutputStream.new(plothandler)
+
+ if samplesAt and string.len(samplesAt) >0 then
+ -- "samples at" has higher priority than domain.
+ -- Use it!
+
+ domainxmin, domainxmax, samplesx = samplesAtToDomain(samplesAt)
+ if not domainxmin then
+ -- FAILURE: could not convert "samples at".
+ -- Fall back to a TeX based survey.
+ log("log", "LUA survey failed: The value of 'samples at= " .. tostring(samplesAt) .. "' is unsupported by the LUA backend (currently, only 'samples at={a,b,...,c}' is supported).\n")
+ tex.sprint("0")
+ return
+ end
+
+ else
+ domainxmin= pgftonumber(domainxmin)
+ domainxmax= pgftonumber(domainxmax)
+ samplesx= pgftonumber(samplesx)
+ end
+
+ local expressions
+ local domainMin
+ local domainMax
+ local samples
+ local variableNames
+
+ -- allow both, even if sampleLine=1. We may want to assign a dummy value to y.
+ variableNames = { variablex, variabley }
+
+ if sampleLine==1 then
+ domainMin = { domainxmin }
+ domainMax = { domainxmax }
+ samples = { samplesx }
+ else
+ local domainymin = pgftonumber(domainymin)
+ local domainymax = pgftonumber(domainymax)
+ local samplesy = pgftonumber(samplesy)
+
+ domainMin = { domainxmin, domainymin }
+ domainMax = { domainxmax, domainymax }
+ samples = { samplesx, samplesy }
+ end
+ if is3d then
+ expressions = {xExpr, yExpr, zExpr}
+ else
+ expressions = {xExpr, yExpr}
+ end
+ removeSurroundingBraces(expressions)
+
+ local generator = AddplotExpressionCoordinateGenerator.new(
+ coordoutputstream,
+ expressions,
+ domainMin, domainMax,
+ samples,
+ variableNames)
+
+ local messageOnFailure
+ local compileErrorOnFailure
+ if debugMode == "compileerror" then
+ compileErrorOnFailure = true
+ messageOnFailure = true
+ elseif debugMode == "off" or debugMode == "verbose" then
+ messageOnFailure = true
+ compileErrorOnFailure = false
+ elseif debugMode == "off and silent" then
+ messageOnFailure = false
+ compileErrorOnFailure = false
+ else
+ error("Got unknown debugMode = " .. debugMode )
+ end
+
+ local success
+ if compileErrorOnFailure then
+ success = generator:generateCoords()
+ else
+ local resultOfGenerator
+ success, resultOfGenerator = pcall(generator.generateCoords, generator)
+ if success then
+ -- AH: "pcall" returned 'true'. In this case, 'success' is the boolean returned by generator
+ success = resultOfGenerator
+ end
+
+ if messageOnFailure and not success and type(resultOfGenerator) ~= "boolean" then
+ log("log", "LUA survey failed: " .. resultOfGenerator .. ". Use \\pgfplotsset{lua debug} to see more.\n")
+ end
+ end
+
+ if not type(success) == 'boolean' then error("Illegal state: expected boolean result") end
+
+ if success then
+ tex.sprint("1")
+ else
+ tex.sprint("0")
+ end
+end
+
+-- Creates the default plot visualizer factory. It simply applies data scale trafos.
+function defaultPlotVisualizerFactory(plothandler)
+ return PlotVisualizer.new(plothandler)
+end
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsticks.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsticks.code.tex
new file mode 100644
index 0000000000..f5acfd81ef
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsticks.code.tex
@@ -0,0 +1,2585 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\newif\ifpgfplots@log@tick@isminor@tick@pos
+% Checks whether the tick position given as #1.#2=log10(T) belongs to
+% T=i*10^j with an integer i>1.
+%
+% If T=i*10^j, \ifpgfplots@log@tick@isminor@tick@pos will be set to true and
+% \pgfmathresult will contain T.
+%
+% Otherwise, \ifpgfplots@log@tick@isminor@tick@pos will be set to false and
+% pgfmathresult to #1.#2
+%
+% Arguments:
+% #1.#2 the value log10(T)
+%
+% Implementation:
+% if T = i*10^j, log10(T) = log10(i) + j.
+% That means if log10(T) in \Z, we have T = 10^j. If not, we need to
+% check wether i is an integer. Please note that log10(i) < 1.
+%
+% Further note: log(T) < 0 <=> j<0.
+% In case j<0, we have
+% #1.#2 = j + log(i)
+% = - ( -j - log(i) )
+% = - ( -j - 1 + (1-log(i)) )
+% = #1 '.' #2 [ up to the '0.'
+% that means #1 = j-1 and #2 = 1-log(i).
+\def\pgfplots@is@log@tick@a@minor@tick@pos#1.#2\relax{%
+ \pgfmathapproxequalto@{#1.#2}{#1.0}%
+ \ifpgfmathcomparison
+ % in MOST cases, this here will be true:
+ \pgfplots@log@tick@isminor@tick@posfalse
+ \def\pgfmathresult{#1.#2}%
+ \else
+ % I guess this won't happen too often. In fact, it's a very
+ % special case.
+ \begingroup
+ \c@pgf@counta=#1\relax
+ \ifdim#1.#2pt<0pt %
+ \advance\c@pgf@counta by-1
+ \pgfmathsubtract@{1}{0.#2}%
+ \expandafter\pgfplots@is@log@tick@a@minor@tick@pos@IDENTIFY@LOGi\pgfmathresult\relax
+ \ifpgfplots@log@tick@isminor@tick@pos
+ \aftergroup\pgfplots@log@tick@isminor@tick@postrue
+ \edef\pgfmathresult{\pgfmathresult e\the\c@pgf@counta}%
+ \else
+ \aftergroup\pgfplots@log@tick@isminor@tick@posfalse
+ \def\pgfmathresult{#1.#2}%
+ \fi
+ \else
+ \pgfplots@is@log@tick@a@minor@tick@pos@IDENTIFY@LOGi0.#2\relax
+ \ifpgfplots@log@tick@isminor@tick@pos
+ \aftergroup\pgfplots@log@tick@isminor@tick@postrue
+ \edef\pgfmathresult{\pgfmathresult e\the\c@pgf@counta}%
+ \else
+ \aftergroup\pgfplots@log@tick@isminor@tick@posfalse
+ \def\pgfmathresult{#1.#2}%
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \fi
+}
+
+% expects a positive number.
+\def\pgfplots@is@log@tick@a@minor@tick@pos@IDENTIFY@LOGi0.#1\relax{%
+ \pgfplots@log@tick@isminor@tick@postrue
+ \pgfmathapproxequalto@{0.#1}{0.3010299956639}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{2}%
+ \else
+ \pgfmathapproxequalto@{0.#1}{0.4771212547196}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{3}%
+ \else
+ \pgfmathapproxequalto@{0.#1}{0.6020599913279}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{4}%
+ \else
+ \pgfmathapproxequalto@{0.#1}{0.698970004}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{5}%
+ \else
+ \pgfmathapproxequalto@{0.#1}{0.7781512503}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{6}%
+ \else
+ \pgfmathapproxequalto@{0.#1}{0.8450980400}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{7}%
+ \else
+ \pgfmathapproxequalto@{0.#1}{0.9030899869}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{8}%
+ \else
+ \pgfmathapproxequalto@{0.#1}{0.954242509439}%
+ \ifpgfmathcomparison
+ \def\pgfmathresult{9}%
+ \else
+ \pgfplots@log@tick@isminor@tick@posfalse
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+% Checks whether we need to create a separate 'tick scale label',
+% a node with ' * 10^3' on the side of the axis:
+%
+% PRECONDITION:
+% Axis limits for #1 are given. I need their values before any data
+% scale transformation has been applied.
+% If
+% \pgfplots@#1min@unscaled@as@float
+% and
+% \pgfplots@#1max@unscaled@as@float
+% exist; I will use these macros.
+% Otherwise, I will use \pgfplots@#1min and \pgfplots@#1max;
+% assuming that no data scale transformation is active.
+% FIXME : does that need further attention?
+\def\pgfplots@init@scaled@tick@for#1{%
+ \global\def\pgfplots@glob@TMPa{0}%
+ \expandafter\pgfplotslistcheckempty\csname pgfplots@prepared@tick@positions@major@#1\endcsname
+ \ifpgfplotslistempty
+ % we have no tick labels. Omit the tick scale label as well!
+ \else
+ \begingroup
+ \ifcase\csname pgfplots@scaled@ticks@#1@choice\endcsname\relax
+ % CASE 0 : scaled #1 ticks=false: do nothing here.
+ \or
+ % CASE 1 : scaled #1 ticks=true:
+ %--------------------------------
+ % the \pgfplots@xmin@unscaled@as@float is set just before the data
+ % scale transformation is initialised.
+ %
+ % The variables are empty if there is no datascale transformation.
+ \expandafter\let\expandafter\pgfplots@cur@min@unscaled\csname pgfplots@#1min@unscaled@as@float\endcsname
+ \expandafter\let\expandafter\pgfplots@cur@max@unscaled\csname pgfplots@#1max@unscaled@as@float\endcsname
+ %
+ \ifx\pgfplots@cur@min@unscaled\pgfutil@empty
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@#1min\endcsname}%
+ \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}%
+ \let\pgfplots@cur@min@unscaled=\pgfmathresult
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@#1max\endcsname}%
+ \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}%
+ \let\pgfplots@cur@max@unscaled=\pgfmathresult
+ \fi
+ %
+ \expandafter\pgfmathfloat@decompose@E\pgfplots@cur@min@unscaled\relax\pgfmathfloat@a@E
+ \expandafter\pgfmathfloat@decompose@E\pgfplots@cur@max@unscaled\relax\pgfmathfloat@b@E
+ \pgfplots@init@scaled@tick@normalize@exponents
+ \ifnum\pgfmathfloat@b@E<\pgfmathfloat@a@E
+ \pgfmathfloat@b@E=\pgfmathfloat@a@E
+ \fi
+ \xdef\pgfplots@glob@TMPa{\pgfplots@scale@ticks@above@exponent}%
+ \ifnum\pgfplots@glob@TMPa<\pgfmathfloat@b@E
+ % ok, scale it:
+ \multiply\pgfmathfloat@b@E by-1
+ \xdef\pgfplots@glob@TMPa{\the\pgfmathfloat@b@E}%
+ \else
+ \xdef\pgfplots@glob@TMPa{\pgfplots@scale@ticks@below@exponent}%
+ \ifnum\pgfplots@glob@TMPa>\pgfmathfloat@b@E
+ % ok, scale it:
+ \multiply\pgfmathfloat@b@E by-1
+ \xdef\pgfplots@glob@TMPa{\the\pgfmathfloat@b@E}%
+ \else
+ % no scaling necessary:
+ \xdef\pgfplots@glob@TMPa{0}%
+ \fi
+ \fi
+ \or
+ % CASE 2 : scaled #1 ticks=base 10:
+ %--------------------------------
+ \c@pgf@counta=\csname pgfplots@scaled@ticks@#1@arg\endcsname\relax
+ %\multiply\c@pgf@counta by-1
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \or
+ % CASE 3 : scaled #1 ticks=real:
+ %--------------------------------
+ \pgfmathfloatparsenumber{\csname pgfplots@scaled@ticks@#1@arg\endcsname}%
+ \global\let\pgfplots@glob@TMPa=\pgfmathresult
+ \or
+ % CASE 4 : scaled #1 ticks=manual:
+ \expandafter\global\expandafter\let\expandafter\pgfplots@glob@TMPa\csname pgfplots@scaled@ticks@#1@arg\endcsname
+ \fi
+ \endgroup
+ \fi
+ \expandafter\let\csname pgfplots@tick@scale@#1\endcsname=\pgfplots@glob@TMPa%
+}
+
+% Handles the case that one of the limits is 0 (or unbounded, although
+% that might not be a use-case at all).
+%
+% Note that 0 = 0*10^A (naturally). In this case, A can be undefined,
+% and we want to use B's exponent (only) for the decision here.
+%
+% INPUT:
+% - \pgfplots@cur@min@unscaled,
+% - \pgfplots@cur@max@unscaled,
+% - \pgfmathfloat@a@E
+% - \pgfmathfloat@b@E
+%
+% Output:
+% normalized values of \pgfmathfloat@a@E and \pgfmathfloat@b@E
+\def\pgfplots@init@scaled@tick@normalize@exponents{%
+ \pgfmathfloatgetflags\pgfplots@cur@min@unscaled\pgfmathfloat@a@S
+ \pgfmathfloatgetflags\pgfplots@cur@max@unscaled\pgfmathfloat@b@S
+ \ifcase\pgfmathfloat@a@S%
+ % min = 0.
+ \ifcase\pgfmathfloat@b@S
+ % max =0
+ % normalize to 0 * 10^0 !
+ \pgfmathfloat@a@E=0 %
+ \pgfmathfloat@b@E=0 %
+ \or
+ % max > 0
+ % since 0 = 0 * 10^A for any A, tick scaling is based on
+ % B only.
+ \pgfmathfloat@a@E=\pgfmathfloat@b@E
+ \or
+ % max < 0
+ \pgfmathfloat@a@E=\pgfmathfloat@b@E
+ \else
+ % max is unbounded. normalize exponent to something
+ % useful:
+ \pgfmathfloat@a@E=0 %
+ \pgfmathfloat@b@E=0 %
+ \fi
+ \or
+ % min>0
+ \ifcase\pgfmathfloat@b@S
+ % max =0
+ % since 0 = 0 * 10^B for any B, tick scaling is based on
+ % A only.
+ \pgfmathfloat@b@E=\pgfmathfloat@a@E
+ \or
+ % max > 0
+ \or
+ % max < 0
+ \else
+ % max is unbounded. normalize exponent to something
+ % useful:
+ \pgfmathfloat@b@E=\pgfmathfloat@a@E
+ \fi
+ \or
+ % min<0
+ \ifcase\pgfmathfloat@b@S
+ % max =0
+ % since 0 = 0 * 10^B for any B, tick scaling is based on
+ % A only.
+ \pgfmathfloat@b@E=\pgfmathfloat@a@E
+ \or
+ % max > 0
+ \or
+ % max < 0
+ \else
+ % max is unbounded. normalize exponent to something
+ % useful:
+ \pgfmathfloat@b@E=\pgfmathfloat@a@E
+ \fi
+ \else
+ % min is unbounded:
+ % normalize somehow.
+ \pgfmathfloat@a@E=0 %
+ \pgfmathfloat@b@E=0 %
+ \fi
+}
+
+% x-axis tick labels for #1th tick
+% #1: the axis (x,y or z)
+% #2: the value
+% #3,#4+#5: arguments for \pgfplotspointonorientedsurfaceabwithbshift
+% #5: ticknumber
+\def\pgfplots@show@ticklabel#1#2(#3,#4+#5)#6{%
+ \begingroup%
+ \edef\pgfmathresult{#2}%
+ \pgfkeyslet{/pgfplots/sloped/at position}\pgfmathresult%
+ \csname ifpgfplots@#1ticklabel@interval\endcsname
+ % Special case for the INTERVAL feature:
+ % we have to do additional work here.
+ \pgfmathparse{#3}%
+ \edef\pgfplots@show@ticklabel@coord@x@new{\pgfmathresult}%
+ \pgfmathparse{#4}%
+ \edef\pgfplots@show@ticklabel@coord@y@new{\pgfmathresult}%
+ %
+ \pgfplots@show@ticklabel@{#1}{#2}%
+ \let\nexttick=\tick
+ \ifx\pgfplots@show@ticklabel@LASTTICK\pgfutil@empty
+ % its the first call. Simply remember arguments and wait
+ % for interval boundary before proceeding.
+ \else
+ % acquire options of first interval boundary:
+ \pgfplots@show@ticklabel@LASTTICK
+ % compute new node position:
+ \pgfmathparse{0.5*(\pgfplots@show@ticklabel@coord@x + \pgfplots@show@ticklabel@coord@x@new)}%
+ \let\pgfplots@show@ticklabel@coord@x=\pgfmathresult%
+ \pgfmathparse{0.5*(\pgfplots@show@ticklabel@coord@y + \pgfplots@show@ticklabel@coord@y@new)}%
+ \let\pgfplots@show@ticklabel@coord@y=\pgfmathresult%
+ \let\ticknum=\pgfplots@show@ticklabel@num\relax%
+ \let\tick=\pgfplots@show@ticklabel@tick%
+ \pgfplots@show@ticklabel@@{#1}
+ {\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@show@ticklabel@coord@x}{\pgfplots@show@ticklabel@coord@y}{#5}}%
+ \fi
+ \xdef\pgfplots@show@ticklabel@LASTTICK{%
+ \noexpand\def\noexpand\pgfplots@show@ticklabel@tick{\nexttick}%
+ \noexpand\def\noexpand\pgfplots@show@ticklabel@coord@x{\pgfplots@show@ticklabel@coord@x@new}%
+ \noexpand\def\noexpand\pgfplots@show@ticklabel@coord@y{\pgfplots@show@ticklabel@coord@y@new}%
+ \noexpand\edef\noexpand\pgfplots@show@ticklabel@num{#6}%
+ }%
+ \else
+ \let\ticknum=#6\relax%
+ \pgfplots@show@ticklabel@{#1}{#2}%
+ \pgfplots@show@ticklabel@@{#1}{\pgfplotspointonorientedsurfaceabwithbshift{#3}{#4}{#5}}%
+ \fi
+ \endgroup
+}
+
+% #1: the axis (x,y or z)
+% #2: the location where to place it.
+\def\pgfplots@show@ticklabel@@#1#2{%
+ % Typeset the label!
+ \pgfinterruptboundingbox
+ % What makes this complicated is the 'ticklabel cs' feature.
+ % What we need is to compute the MAXIMUM LENGTH over each tick
+ % label IN DIRECTION OF THE OUTER NORMAL.
+ %
+ % This needs to
+ % 1. enable bounding box computation even in case of
+ % 'overlay',
+ % 2. projection of the bounding box in direction of the outer
+ % normal,
+ % 3. update of the bounding box if 'overlay' is not active.
+ \begingroup
+ %
+ % prepare step (1.):
+ \pgfkeysalso{%
+ /tikz/every node/.append code={%
+ \ifpgf@relevantforpicturesize
+ \gdef\pgfplots@show@ticklabel@@update@BB{1}%
+ \else
+ \gdef\pgfplots@show@ticklabel@@update@BB{0}%
+ \fi
+ \pgf@relevantforpicturesizetrue
+ }%
+ }%
+ %
+ % Compute and remember the position '#2':
+ \pgf@process{#2}%
+ \edef\pgfplots@ticklabel@at@x{\the\pgf@x}%
+ \edef\pgfplots@ticklabel@at@y{\the\pgf@y}%
+ %
+ % ok, generate the label!
+ \node at (\pgfplots@ticklabel@at@x,\pgfplots@ticklabel@at@y) {\csname pgfplots@#1ticklabel\endcsname};%
+ %
+ % compute the label's dimensions, step (2.):
+ \pgfplots@ticklabel@maxtickdimen@updateforcurrentpath
+ {#1}
+ {\pgf@x=\pgfplots@ticklabel@at@x\space\pgf@y=\pgfplots@ticklabel@at@y\space}%%
+ %
+ % prepare step (3.): update of bounding box:
+ \if\pgfplots@show@ticklabel@@update@BB1%
+ \xdef\pgfplots@glob@TMPa{%
+ \pgf@xa=\the\pgf@picminx\space
+ \pgf@xb=\the\pgf@picminy\space
+ \pgf@ya=\the\pgf@picmaxx\space
+ \pgf@yb=\the\pgf@picmaxy\space
+ \noexpand\pgf@protocolsizes{\pgf@xa}{\pgf@xb}%
+ \noexpand\pgf@protocolsizes{\pgf@ya}{\pgf@yb}%
+ \noexpand\pgf@resetpathsizes
+ }%
+ \else
+ \global\let\pgfplots@glob@TMPa=\relax
+ \fi
+ \endgroup
+ \endpgfinterruptboundingbox
+ \begingroup
+ \pgfplots@glob@TMPa
+ \endgroup
+}%
+
+% TICK LABEL DIMENSION CONTROL
+%
+% The following framework is supposed to accumulate the value for
+% \pgfplotsvalueoflargesttickdimen.
+%
+% It works like this:
+%
+% \pgfplots@ticklabel@maxtickdimen@reset{#1}
+% \pgfplots@ticklabel@maxtickdimen@prepare@for@normalvec{#1}{<normal vector>}
+% ...
+% \pgfplots@ticklabel@maxtickdimen@updateforcurrentpath{#1}
+% \pgfplots@ticklabel@maxtickdimen@updateforcurrentpath{#1}
+% \pgfplots@ticklabel@maxtickdimen@updateforcurrentpath{#1}
+% ...
+% \pgfplots@ticklabel@maxtickdimen@finish{#1}
+%
+% -> then, \pgfplotsvalueoflargesttickdimen expands to the largest
+% distance from a tick's coordinate to its tick label bounding box in
+% direction of the outer normal vector.
+\def\pgfplots@ticklabel@maxtickdimen@reset#1{%
+ \expandafter\gdef\csname pgfplots@maxtickdimen@#1\endcsname{0pt}%
+ \expandafter\gdef\csname pgfplots@maxtickdimen@extrashift@#1\endcsname{0pt}%
+}%
+
+% Adds the extra shift '#2' along the normal vector for axis '#1'.
+\def\pgfplots@ticklabel@maxtickdimen@extrashift#1#2{%
+ \begingroup
+ \afterassignment\pgfplots@gobble@until@relax
+ \pgf@xa=#2pt\relax
+ \advance\pgf@xa by\csname pgfplots@maxtickdimen@extrashift@#1\endcsname\relax
+ \expandafter\xdef\csname pgfplots@maxtickdimen@extrashift@#1\endcsname{\the\pgf@xa}%
+ \endgroup
+}
+
+% Finalizes the maxtickdimen computation.
+%
+% This applies any extra shifts (including '#1ticklabel shift').
+\def\pgfplots@ticklabel@maxtickdimen@finish#1{%
+ \pgfkeysgetvalue{/pgfplots/#1ticklabel shift}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfplots@ticklabel@maxtickdimen@extrashift{#1}{\pgfkeysvalueof{/pgfplots/#1ticklabel shift}}%
+ \fi
+ \begingroup
+ \pgf@xa=\csname pgfplots@maxtickdimen@extrashift@#1\endcsname\relax
+ \advance\pgf@xa by \csname pgfplots@maxtickdimen@#1\endcsname\relax
+ \expandafter\xdef\csname pgfplots@maxtickdimen@#1\endcsname{\the\pgf@xa}%
+ \endgroup
+}%
+%
+% #1: the axis (x,y or z)
+% #2: the normal vector
+\def\pgfplots@ticklabel@maxtickdimen@prepare@for@normalvec#1#2{%
+ \pgf@process{#2}%
+ \edef\pgfplots@loc@vector@to@outside{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ % Identify the corner point of the ticklabel bounding box which
+ % shall be used:
+ \ifdim\pgf@x>0sp
+ \ifdim\pgf@y>0sp
+ % NORTH EAST
+ \def\pgfplots@loc@ticklabel@bb@corner{\pgf@x=\pgf@picmaxx\pgf@y=\pgf@picmaxy}%
+ \else
+ % SOUTH EAST
+ \def\pgfplots@loc@ticklabel@bb@corner{\pgf@x=\pgf@picmaxx\pgf@y=\pgf@picminy}%
+ \fi
+ \else
+ \ifdim\pgf@y>0sp
+ % NORTH WEST
+ \def\pgfplots@loc@ticklabel@bb@corner{\pgf@x=\pgf@picminx\pgf@y=\pgf@picmaxy}%
+ \else
+ % SOUTH WEST
+ \def\pgfplots@loc@ticklabel@bb@corner{\pgf@x=\pgf@picminx\pgf@y=\pgf@picminy}%
+ \fi
+ \fi
+}%
+
+% #1: the axis (x,y or z)
+% #2: the point from where dimension shall be computed (the 'at'
+% argument of the tick label)
+\def\pgfplots@ticklabel@maxtickdimen@updateforcurrentpath#1#2{%
+ \pgfplotsscalarproductofvectors
+ {\pgfplots@loc@vector@to@outside}%
+ {\pgfpointdiff
+ {#2\pgf@pos@transform\pgf@x\pgf@y}%
+ {\pgfplots@loc@ticklabel@bb@corner}}%
+ \ifdim\pgf@x>\csname pgfplots@maxtickdimen@#1\endcsname\relax
+ \expandafter\xdef\csname pgfplots@maxtickdimen@#1\endcsname{\the\pgf@x}%
+ \fi
+}%
+
+% Expands to the largest distance of a tick position to its tick label
+% bounding box in direction of the outer unit normal vector.
+%
+% It does also include the value of the 'ticklabel shift' key.
+%
+% This function assumes that
+% \pgfplots@ticklabel@maxtickdimen@reset{#1}
+% \pgfplots@ticklabel@maxtickdimen@prepare@for@normalvec{#1}{<normal vector>}
+% ...
+% \pgfplots@ticklabel@maxtickdimen@updateforcurrentpath{#1}
+% \pgfplots@ticklabel@maxtickdimen@updateforcurrentpath{#1}
+% \pgfplots@ticklabel@maxtickdimen@updateforcurrentpath{#1}
+% ...
+% \pgfplots@ticklabel@maxtickdimen@finish{#1}
+% has been invoked completely.
+%
+% #1: either x,y or z. It denotes the axis for which the ticks are
+% requested.
+\def\pgfplotsvalueoflargesttickdimen#1{%
+ \csname pgfplots@maxtickdimen@#1\endcsname
+}%
+
+% Just like \pgfplotsqpointoutsideofaxis, but this one here uses the
+% axis on which tick labels will be drawn.
+%
+% #1: one of x, y or z.
+% #2: the coordinate on the tick axis designated by '#1'.
+% #3: a scale (a dimen) in which the point is moved in direction of
+% the outward normal vector of the axis.
+%
+% @see \pgfplotsqpointoutsideofaxis
+\def\pgfplotsqpointoutsideofticklabelaxis#1#2#3{%
+ \pgfplotsqpointoutsideofaxis{\csname pgfplots@#1ticklabelaxisspec\endcsname}{#2}{#3}%
+}%
+\def\pgfplotsqpointoutsideofticklabelaxisrel#1#2#3{%
+%\message{using \string\pgfplotsqpointoutsideofaxisrel{\csname pgfplots@#1ticklabelaxisspec\endcsname}{#2}{#3}^^J}%
+ \pgfplotsqpointoutsideofaxisrel{\csname pgfplots@#1ticklabelaxisspec\endcsname}{#2}{#3}%
+}%
+\def\pgfplotsqpointoutsideofticklabelaxistransformed#1#2#3{%
+ \pgfplotsqpointoutsideofaxistransformed{\csname pgfplots@#1ticklabelaxisspec\endcsname}{#2}{#3}%
+}%
+
+% Expands to the three-character-identification for the axis
+% containing tick labels for axis #1.
+%
+% #1: either x, y or z.
+\def\pgfplotsticklabelaxisspec#1{\csname pgfplots@#1ticklabelaxisspec\endcsname}%
+
+% The unit outer normal vector for axis #1.
+% #1: one of x, y or z.
+\def\pgfplotspointouternormalvectorofticklabelaxis#1{%
+ \pgfplotspointouternormalvectorofaxis{\csname pgfplots@#1ticklabelaxisspec\endcsname}%
+}
+
+% Defines \tick by applying any necessary math to the (possibly
+% transformed) tick value #2.
+%
+% #1: axis (x or y)
+% #2: tick value.
+\def\pgfplots@show@ticklabel@#1#2{%
+ \csname ifpgfplots@apply@datatrafo@#1\endcsname
+ \pgfplotscoordmath{#1}{datascaletrafo inverse}{#2}%
+ \ifcase\csname pgfplots@scaled@ticks@#1@choice\endcsname
+ \or
+ \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\csname pgfplots@tick@scale@#1\endcsname}%
+ \or
+ \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\csname pgfplots@tick@scale@#1\endcsname}%
+ \or
+ \expandafter\pgfmathfloatdivide@\expandafter{\pgfmathresult}{\csname pgfplots@tick@scale@#1\endcsname}%
+ \or
+ % scaled #1 ticks=manual. Invoke manual tick scaling code:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@tick@scale@#1\endcsname
+ \begingroup
+ \pgfkeys{/pgf/fpu=true}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \pgfmathfloatparsenumber\pgfmathresult%
+ \fi
+ % .. and this here provides \tick as fixed point repr:
+ \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}%
+ \let\tick=\pgfmathresult
+ \else
+ \edef\tick{#2}%
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \ifnum\csname pgfplots@scaled@ticks@#1@choice\endcsname=0
+ \else
+ \pgfmathfloatparsenumber{#2}%
+ \ifnum\csname pgfplots@scaled@ticks@#1@choice\endcsname=3
+ \expandafter\pgfmathfloatdivide@\expandafter{\pgfmathresult}{\csname pgfplots@tick@scale@#1\endcsname}%
+ \else
+ \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\csname pgfplots@tick@scale@#1\endcsname}%
+ \fi
+ \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}%
+ \let\tick=\pgfmathresult
+ \fi
+ }{}%
+ \fi
+ \pgfplots@coord@inv@trafo@apply{#1}{\tick}%
+ \let\tick=\pgfmathresult
+}%
+
+\def\pgfplots@user@ticklabel@list@x{%
+ \pgfplotslistselectorempty\ticknum\of\pgfplots@xticklabels\to\tick
+ \pgfplots@ticklabel@typeset@arg\tick
+}
+\def\pgfplots@user@ticklabel@list@y{%
+ \pgfplotslistselectorempty\ticknum\of\pgfplots@yticklabels\to\tick
+ \pgfplots@ticklabel@typeset@arg\tick
+}
+\def\pgfplots@user@ticklabel@list@z{%
+ \pgfplotslistselectorempty\ticknum\of\pgfplots@zticklabels\to\tick
+ \pgfplots@ticklabel@typeset@arg\tick
+}
+\def\pgfplots@user@extra@ticklabel@list@x{%
+ \pgfplotslistselectorempty\ticknum\of\pgfplots@extra@xticklabels\to\tick
+ \pgfplots@ticklabel@typeset@arg\tick
+}
+\def\pgfplots@user@extra@ticklabel@list@y{%
+ \pgfplotslistselectorempty\ticknum\of\pgfplots@extra@yticklabels\to\tick
+ \pgfplots@ticklabel@typeset@arg\tick
+}
+\def\pgfplots@user@extra@ticklabel@list@z{%
+ \pgfplotslistselectorempty\ticknum\of\pgfplots@extra@zticklabels\to\tick
+ \pgfplots@ticklabel@typeset@arg\tick
+}
+
+\def\pgfplots@limit@max@reg#1{%
+ \if\pgfkeysvalueof{/pgfplots/#1 dir/value}n%
+ \csname pgfplots@#1max@reg\endcsname
+ \else
+ \csname pgfplots@#1min@reg\endcsname
+ \fi
+}%
+\def\pgfplots@limit@min@reg#1{%
+ \if\pgfkeysvalueof{/pgfplots/#1 dir/value}n%
+ \csname pgfplots@#1min@reg\endcsname
+ \else
+ \csname pgfplots@#1max@reg\endcsname
+ \fi
+}%
+
+% Check if a label does not cross the x-axis
+\def\pgfplots@ytick@check@tickshow{%
+ \pgfplots@tickshowtrue
+ %
+ \pgfplots@if@has@axis@shift x{%
+ \pgfplots@hide@obscured@ytickfalse
+ }{}%
+ %
+ \ifpgfplots@hide@obscured@ytick
+ \if\pgfplots@yaxislinesnum2% center
+ \ifcase\pgfplots@xaxislinesnum\relax
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@min@reg{y}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@max@reg{y}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \or
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@min@reg{y}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{%
+ }%
+ \or
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@logical@ZERO@y pt}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \or
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@max@reg{y}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \fi
+ \fi
+ \fi
+}
+\def\pgfplots@ztick@check@tickshow{%
+ \pgfplots@tickshowtrue
+ %
+ \pgfplots@if@has@axis@shift x{%
+ \pgfplots@if@has@axis@shift y{%
+ \pgfplots@hide@obscured@ztickfalse
+ }{}%
+ }{}%
+ %
+ \ifpgfplots@hide@obscured@ztick
+ \if\pgfplots@zaxislinesnum2% center
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@logical@ZERO@z pt}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \fi
+ \fi
+}%
+
+% Fills the macros
+% \pgfplots@tick@LOWER@b \pgfplots@tick@end@a
+% \pgfplots@tick@UPPER@b \pgfplots@tick@end@b
+% with coordinates such that
+% (\pgfplots@tick@LOWER@b,\pgfplots@tmpa) -- (\pgfplots@tick@end@a,\pgfplots@tmpa)
+% produces a correct tick line.
+%
+% The '@b' variant is only used in case of \pgfplots@ytickposnum = 0
+%
+% #1 : the current axis (x or y).
+% #2 : the current tick width
+%
+\def\pgfplots@prepare@tick@offsets@for@#1#2{%
+ %
+ % FIXME : this stuff was ok for 2D.
+ % For 3D, it works only for the cases of boxed axes or centered
+ % axis lines.
+ \ifcase\csname pgfplots@#1tickposnum\endcsname\relax
+ % both
+ %(\pgfplots@xcoordminTEX-\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt)
+ \edef\pgfplots@tick@LOWER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}%
+ %
+ %(\pgfplots@xcoordmaxTEX+\pgfplots@tick@offset, \pgfplots@tmpa) -- ++(-#2, 0pt)
+ \edef\pgfplots@tick@UPPER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}%
+ \or
+ % left
+ % (\pgfplots@xcoordminTEX-\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt);
+ \edef\pgfplots@tick@LOWER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}%
+ \or
+ % center
+ % (\pgfplots@ZERO@x -\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt);
+ \edef\pgfplots@tick@LOWER@b{\csname pgfplots@logical@ZERO@\pgfplotspointonorientedsurfaceB \endcsname}%
+ \or
+ % right
+ % (\pgfplots@xcoordmaxTEX+\pgfplots@tick@offset, \pgfplots@tmpa) -- ++(-#2, 0pt);
+ \edef\pgfplots@tick@UPPER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}%
+ \else
+ % FALL BACK. never used, I guess?
+ % (\pgfplots@xcoordminTEX-\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt);
+ \edef\pgfplots@tick@LOWER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}%
+ \fi
+ %
+ \ifcase\csname pgfplots@#1tickalignnum\endcsname\relax
+ \def\pgfplots@tick@offset{0}%
+ \or
+ \edef\pgfplots@tick@offset{#2}%
+ \or
+ \pgfmathmultiply@{0.5}{#2}%
+ \let\pgfplots@tick@offset=\pgfmathresult%
+ \fi
+ %
+ \edef\pgfplots@tick@LOWER@shiftbeg{-\pgfplots@tick@offset}%
+ \pgfmathadd@{\pgfplots@tick@LOWER@shiftbeg}{#2}%
+ \let\pgfplots@tick@LOWER@shiftend=\pgfmathresult
+ %
+ \edef\pgfplots@tick@UPPER@shiftbeg{\pgfplots@tick@offset}%
+ \pgfmathsubtract@{\pgfplots@tick@UPPER@shiftbeg}{#2}%
+ \let\pgfplots@tick@UPPER@shiftend=\pgfmathresult
+ %
+ % Assemble the \pgfplots@drawticklines@for@placecomputedtick
+ % command.
+ \def\pgfplots@drawticklines@for@placecomputedtick@LOWER{%
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@LOWER@b}{\pgfplots@tick@LOWER@shiftbeg pt}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@LOWER@b}{\pgfplots@tick@LOWER@shiftend pt}}%
+ }%
+ \def\pgfplots@drawticklines@for@placecomputedtick@UPPER{%
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@UPPER@b}{\pgfplots@tick@UPPER@shiftbeg pt}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@UPPER@b}{\pgfplots@tick@UPPER@shiftend pt}}%
+ }%
+%\message{place computed tick: LOWEROK=\pgfplots@drawticklines@for@placecomputedtick@LOWEROK; UPPEROK=\pgfplots@drawticklines@for@placecomputedtick@UPPEROK.}%
+}%
+
+
+\newif\ifpgfplots@needsminorloop
+
+\def\pgfplots@draw@tick@scale@label@for#1{%
+ \csname ifpgfplots@#1islinear\endcsname
+ \begingroup
+ \def\pgfplots@temp@isbaseten{0}%
+ \ifcase\csname pgfplots@scaled@ticks@#1@choice\endcsname
+ \global\let\pgfplots@glob@TMPa=\pgfutil@empty
+ \or
+ \xdef\pgfplots@glob@TMPa{\csname pgfplots@tick@scale@#1\endcsname}%
+ \def\pgfplots@temp@isbaseten{1}%
+ \or
+ \xdef\pgfplots@glob@TMPa{\csname pgfplots@tick@scale@#1\endcsname}%
+ \def\pgfplots@temp@isbaseten{1}%
+ \or
+ \xdef\pgfplots@glob@TMPa{\csname pgfplots@tick@scale@#1\endcsname}%
+ % real:
+ \or
+ % manual:
+ \global\def\pgfplots@glob@TMPa{dummyargument}%
+ \fi
+ \if1\pgfplots@temp@isbaseten
+ \expandafter\c@pgf@counta\pgfplots@glob@TMPa\relax
+ \multiply\c@pgf@counta by-1
+ \ifnum\c@pgf@counta=0\relax
+ \global\let\pgfplots@glob@TMPa=\pgfutil@empty
+ \else
+ \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}%
+ \fi
+ \fi
+ \endgroup
+ \ifx\pgfplots@glob@TMPa\pgfutil@empty
+ \else
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/#1tick scale label code/.@cmd}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key
+ \else
+ \edef\pgfplots@tick@scale@labels{\noexpand\pgfplots@invoke@pgfkeyscode{/pgfplots/#1tick scale label code/.@cmd}{\pgfplots@glob@TMPa}}%
+ %
+ \pgfplots@change@pgfpoints@to@descriptioncs
+ %
+ \node[%
+ /pgfplots/every tick label,%
+ /pgfplots/every #1 tick label,%
+ /pgfplots/every #1 tick scale label]
+ {\pgfplots@tick@scale@labels};
+ \fi
+ \endgroup
+ \fi
+ \fi
+}
+
+% Check if the current tick position, stored in \pgfplots@tmpa,
+% does not cross the y-axis.
+%
+% This is just a special case for centered axis lines.
+\def\pgfplots@xtick@check@tickshow{%
+ \pgfplots@tickshowtrue
+ %
+ \pgfplots@if@has@axis@shift y{%
+ \pgfplots@hide@obscured@xtickfalse
+ }{}%
+ %
+ \ifpgfplots@hide@obscured@xtick
+ \if\pgfplots@xaxislinesnum2% center
+ \ifcase\pgfplots@yaxislinesnum\relax
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@min@reg{x}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@max@reg{x}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \or
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@min@reg{x}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \or
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@logical@ZERO@x pt}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \or
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@limit@max@reg{x}}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{}%
+ \fi
+ \fi
+ \fi
+}
+
+% Draws extra ticks including grid lines, tick lines and tick labels
+% along the current oriented surface.
+%
+% See \pgfplots@drawticklines@onorientedsurf@ for a description of the
+% oriented surface.
+%
+% #1 : tick position list
+\def\pgfplots@draw@extra@ticks@onorientedsurf{%
+ \expandafter\pgfplots@draw@extra@ticks@onorientedsurf@\pgfplotspointonorientedsurfaceA
+}%
+% #1: axis (x or y)
+% #2: tick position list
+\def\pgfplots@draw@extra@ticks@onorientedsurf@#1#2{%
+ \begingroup
+ \def\pgfplots@scaled@ticks@x@choice{0}%
+ \def\pgfplots@scaled@ticks@y@choice{0}%
+ \def\pgfplots@scaled@ticks@z@choice{0}%
+ \csname pgfplots@#1minorticksfalse\endcsname
+ \csname pgfplots@#1minorgridsfalse\endcsname
+ \expandafter\let\expandafter\pgfplots@ticklabel@pos@orig\csname pgfplots@#1ticklabel@pos\endcsname%
+ \expandafter\let\expandafter\axis@TMP\csname pgfplots@extra@#1ticklabel\endcsname
+ \expandafter\let\csname pgfplots@#1ticklabel\endcsname=\axis@TMP
+% \pgfplotsset{/pgfplots/every extra #1 tick}%
+ % use a scope here such that line width and draw color can be set.
+ \scope[/pgfplots/.cd,/pgfplots/every extra #1 tick]
+ \expandafter\let\expandafter\pgfplots@ticklabel@pos@\csname pgfplots@#1ticklabel@pos\endcsname
+ \ifx\pgfplots@ticklabel@pos@\pgfplots@ticklabel@pos@orig
+ \else
+ \pgfplots@init@ticklabelaxisspec
+ \fi
+ \pgfplots@prepare@tick@coordlists@for{#1}{#2}%
+ \pgfplots@drawgridlines@onorientedsurf%
+ \pgfplots@drawticklines@onorientedsurf%
+ \pgfplots@drawticklabels@onorientedsurf%
+ \endscope
+ \endgroup
+}
+
+% Computes final major and minor tick positions into global lists
+% \pgfplots@prepared@tick@positions@major@x
+% and
+% \pgfplots@prepared@tick@positions@minor@x.
+%
+% Both lists contain entries of the form {<index>}{<logical position>}
+% @see \pgfplots@prepared@tick@pos@unpack
+%
+% #1: the axis
+% #2: the tick list.
+%
+% PRECONDITION:
+% - \pgfplots@determinedefaultvalues has been executed.
+% That means particularly that \pgfplots@[xy][min,max] are available in TeX point
+% range (after datascaling and logs).
+% POSTCONDITION:
+% - the lists
+% \pgfplots@prepared@tick@positions@major@x
+% \pgfplots@prepared@tick@positions@major@tickindices@x
+% \pgfplots@prepared@tick@positions@minor@x
+% are ready.
+\def\pgfplots@prepare@tick@coordlists@for#1#2{%
+ \begingroup
+ \expandafter\let\expandafter\ifpgfplots@islinear\csname ifpgfplots@#1islinear\endcsname
+ \expandafter\let\expandafter\ifpgfplots@minorticks\csname ifpgfplots@#1minorticks\endcsname
+ \expandafter\let\expandafter\ifpgfplots@minorgrids\csname ifpgfplots@#1minorgrids\endcsname
+ % these lists need to be global such that I can fill them inside
+ % of \foreach statements. And, yes: I have also added a TeX group
+ % on my own (but that's not the problem).
+ \global\pgfplotslistnewempty\pgfplots@prepared@tick@positions@major
+ %\global\pgfplotslistnewempty\pgfplots@prepared@tick@positions@major@tickindices
+ \global\pgfplotslistnewempty\pgfplots@prepared@tick@positions@minor
+ %
+ \pgfplots@prepare@tick@coordlists@for@handletolerance#1%
+ %
+ \edef\pgfplots@loc@TMPa{#2}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \ifpgfplots@minorticks
+ \pgfplots@needsminorlooptrue
+ \else
+ \ifpgfplots@minorgrids
+ \pgfplots@needsminorlooptrue
+ \else
+ \pgfplots@needsminorloopfalse
+ \fi
+ \fi
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@minor@tick@list
+ \ifx\pgfplots@minor@tick@list\pgfutil@empty
+ \else
+ \pgfplots@needsminorloopfalse
+ \fi
+ %
+ \ifpgfplots@needsminorloop
+ \ifpgfplots@islinear
+ \pgfkeysgetvalue{/pgfplots/minor #1 tick num}\pgfplots@minor@tick@num
+ \begingroup
+ \c@pgf@counta=\pgfplots@minor@tick@num\relax
+ \advance\c@pgf@counta by1\relax
+ \pgfplots@tmpa=\csname pgfplots@tick@distance@#1\endcsname pt %
+ \divide\pgfplots@tmpa by\c@pgf@counta
+ \edef\pgfmathresult{\pgf@sys@tonumber{\pgfplots@tmpa}}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let\pgfplots@minor@tick@dist=\pgfmathresult
+ \else
+ \def\pgfplots@minor@tick@num{9}%
+ \fi
+ \fi
+ %
+ % Prepare the [xy]tick[min|max] key processing:
+ \let\pgfplots@checktickminmax=\pgfutil@empty
+ \expandafter\ifx\csname pgfplots@#1tickmin\endcsname\pgfutil@empty
+ \else
+ \expandafter\def\expandafter\pgfplots@checktickminmax\expandafter{%
+ \pgfplots@checktickminmax
+ \pgfplots@prepare@tick@coordlists@for@checktickmin#1%
+ }%
+ \fi
+ \expandafter\ifx\csname pgfplots@#1tickmax\endcsname\pgfutil@empty
+ \else
+ \expandafter\def\expandafter\pgfplots@checktickminmax\expandafter{%
+ \pgfplots@checktickminmax
+ \pgfplots@prepare@tick@coordlists@for@checktickmax#1%
+ }%
+ \fi
+ %
+ % compute the last index because it won't receive minor ticks:
+ \gdef\pgfplots@glob@TMPd{-1}%
+ \foreach \x in {#2} {%
+ \pgfplotsutil@advancestringcounter@global\pgfplots@glob@TMPd
+ }%
+ \let\c@pgfplots@ticknum@last=\pgfplots@glob@TMPd
+ %
+ \gdef\pgfplots@glob@TMPa{0}%
+ \foreach \x in {#2} {%
+ \let\pgfplots@ticknum=\pgfplots@glob@TMPa
+ %
+ \pgfplots@prepare@tick@coordlists@for@assign\pgfplots@tmpa=\x
+ \csname pgfplots@#1tick@check@tickshow\endcsname
+ \pgfplots@prepare@tick@coordlists@for@checkdatalimits#1%
+ \pgfplots@checktickminmax
+ %
+ \ifpgfplots@tickshow
+ \edef\x{{\pgfplots@ticknum}{\x}}%
+ \expandafter\pgfplotslistpushbackglobal\x\to\pgfplots@prepared@tick@positions@major
+ %\expandafter\pgfplotslistpushbackglobal\pgfplots@ticknum\to\pgfplots@prepared@tick@positions@major@tickindices
+ \fi
+ % X-Axis ticks bottom and top
+ \ifpgfplots@needsminorloop
+ \ifnum\pgfplots@ticknum=\c@pgfplots@ticknum@last\relax
+ \else
+ % SEE BELOW for the 'minor #1tick' feature -- it has a
+ % separate loop.
+ \foreach \pgfplots@i in {1,...,\pgfplots@minor@tick@num} {%
+ % XXX : bug 165 [minor ticks] minor tick drawn after the last xtick
+ % seems to be here. Does that harm?
+ \ifpgfplots@islinear
+ \pgfmathmultiply@{\pgfplots@i}{\pgfplots@minor@tick@dist}%
+ \else
+ % in log:
+ % log( i*10^k ) = log\pgfplots@i + k\log10 -> draw ticks for i=1..9
+ \pgfplotscoordmath{#1}{log unsigned int}{\pgfplots@i}%
+ \pgfplotscoordmath{#1}{tofixed}{\pgfmathresult}%
+ \fi
+ \pgfplots@prepare@tick@coordlists@for@advance\pgfplots@tmpa by\pgfmathresult
+ \pgfplots@tickshowtrue
+ \pgfplots@prepare@tick@coordlists@for@checkdatalimits#1%
+ \pgfplots@checktickminmax
+ \ifpgfplots@tickshow
+ \pgfplots@prepare@tick@coordlists@for@tofixed\pgfplots@tmpa
+ \c@pgf@counta=\pgfplots@ticknum\relax
+ \advance\c@pgf@counta by\pgfplots@i\relax
+ \edef\x{{\the\c@pgf@counta}{\pgfmathresult}}%
+ \expandafter\pgfplotslistpushbackglobal\x\to\pgfplots@prepared@tick@positions@minor
+ \fi
+ }%
+ \fi
+ \fi
+ \pgfplotsutil@advancestringcounter\pgfplots@ticknum
+ % carry \ticknum outside of this scope:
+ \global\let\pgfplots@glob@TMPa=\pgfplots@ticknum
+ }%
+ %
+ \ifx\pgfplots@minor@tick@list\pgfutil@empty
+ \else
+ % handle the 'minor #1tick' feature:
+ \def\pgfplots@loc@TMPa{\foreach \x in }%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@minor@tick@list} {%
+ \let\pgfplots@ticknum=\pgfplots@glob@TMPa
+ %
+ \pgfplots@prepare@tick@coordlists@for@assign\pgfplots@tmpa=\x
+ \pgfplots@tickshowtrue
+ \pgfplots@prepare@tick@coordlists@for@checkdatalimits#1%
+ \pgfplots@checktickminmax
+ \ifpgfplots@tickshow
+ \edef\x{{\pgfplots@ticknum}{\x}}%
+ \expandafter\pgfplotslistpushbackglobal\x\to\pgfplots@prepared@tick@positions@minor
+ \fi
+ \pgfplotsutil@advancestringcounter\pgfplots@ticknum
+ % carry \ticknum outside of this scope:
+ \global\let\pgfplots@glob@TMPa=\pgfplots@ticknum
+ }%
+ \fi
+ \fi
+ \endgroup
+ \expandafter\let\csname pgfplots@prepared@tick@positions@minor@#1\endcsname=\pgfplots@prepared@tick@positions@minor
+ \expandafter\let\csname pgfplots@prepared@tick@positions@major@#1\endcsname=\pgfplots@prepared@tick@positions@major
+ %\expandafter\let\csname pgfplots@prepared@tick@positions@major@tickindices@#1\endcsname=\pgfplots@prepared@tick@positions@major@tickindices
+ \global\let\pgfplots@prepared@tick@positions@major=\relax
+ %\global\let\pgfplots@prepared@tick@positions@major@tickindices=\relax
+ \global\let\pgfplots@prepared@tick@positions@minor=\relax
+}%
+
+% The following set of macros can be used to replace the TeX register
+% arithmetics used to speed up the computations inside of
+% \pgfplots@prepare@tick@coordlists@for by something different.
+%
+% FIXME : that is no clean programming! Perhaps a new math class
+% should be used here, and implemented during the complete tick
+% preparation!?
+%
+% Keep in mind that these tick positions are in "transformed
+% range", i.e. they are expected to be in the range -16000...16000. At
+% the time of this modification, only the smithchart lib needs special
+% handling here... does this justify a re-design?
+\def\pgfplots@prepare@tick@coordlists@for@assign#1=#2{%
+ #1=#2pt
+}%
+\def\pgfplots@prepare@tick@coordlists@for@advance#1by#2{%
+ \advance#1 by#2 pt %
+}%
+\def\pgfplots@prepare@tick@coordlists@for@tofixed#1{%
+ \edef\pgfmathresult{\pgf@sys@tonumber{#1}}%
+}%
+\def\pgfplots@prepare@tick@coordlists@for@handletolerance#1{%
+ \afterassignment\pgfplots@gobble@until@relax
+ \pgfplots@tmpa=\pgfkeysvalueof{/pgfplots/#1tick placement tolerance}pt\relax
+ \pgfplots@tmpa=\csname pgfplots@#1@inverseveclength\endcsname\pgfplots@tmpa
+ \edef\pgfplots@loc@tick@placement@tolerance{\the\pgfplots@tmpa}%
+ %
+ \advance\csname pgfplots@#1min@reg\endcsname by-\pgfplots@tmpa
+ \advance\csname pgfplots@#1max@reg\endcsname by\pgfplots@tmpa
+}%
+\def\pgfplots@prepare@tick@coordlists@for@checktickmin#1{%
+ \ifdim\pgfplots@tmpa<\csname pgfplots@#1tickmin\endcsname pt
+ \pgfplots@tickshowfalse
+ \fi
+}%
+\def\pgfplots@prepare@tick@coordlists@for@checktickmax#1{%
+ \ifdim\pgfplots@tmpa>\csname pgfplots@#1tickmax\endcsname pt
+ \pgfplots@tickshowfalse
+ \fi
+}%
+\def\pgfplots@prepare@tick@coordlists@for@checkdatalimits#1{%
+ \ifdim\pgfplots@tmpa<\csname pgfplots@#1min@reg\endcsname
+ \pgfplots@tickshowfalse
+ \else
+ \ifdim\pgfplots@tmpa>\csname pgfplots@#1max@reg\endcsname
+ \pgfplots@tickshowfalse
+ \fi
+ \fi
+}%
+
+% Unpacks entries of the \pgfplots@prepared@tick@positions@* lists.
+%
+% Defines \pgfplots@tick to be the actual tick position and
+% \pgfplots@ticknum to be its index.
+%
+% Usage:
+% \expandafter\pgfplots@prepared@tick@pos@unpack\entry
+\def\pgfplots@prepared@tick@pos@unpack#1#2{%
+ \def\pgfplots@tick{#2}%
+ \def\pgfplots@ticknum{#1}%
+}
+
+% Draws grid lines at the a-positions of the currently set oriented
+% surface.
+%
+% Tick positions are taken out of the already precomputed list
+% \pgfplots@prepared@tick@positions@major@...
+%
+% See \pgfplots@drawticklines@onorientedsurf@ for a description of the
+% oriented surface.
+%
+% #1 : the verbatim axis name (either 'x' or 'y')
+% #2 : the index of the axis (either 0 or 1)
+\def\pgfplots@drawgridlines@onorientedsurf{%
+ \expandafter\pgfplots@drawgridlines@onorientedsurf@\pgfplotspointonorientedsurfaceA
+}%
+\def\pgfplots@drawgridlines@onorientedsurf@#1{%
+ \pgfplots@if{pgfplots@shownothingof@\pgfplotspointonorientedsurfaceB}{%
+ \relax
+ }{%
+ \begingroup
+ \pgfplots@ifgridlines@onorientedsurf@should@be@drawn{%
+ \expandafter\let\expandafter\pgfplots@prepared@tick@positions@major@\csname pgfplots@prepared@tick@positions@major@#1\endcsname
+ \expandafter\let\expandafter\pgfplots@prepared@tick@positions@minor@\csname pgfplots@prepared@tick@positions@minor@#1\endcsname
+ \pgfplots@loop@CONTINUEfalse
+ \pgfplots@if{pgfplots@#1majorgrids}{\pgfplots@loop@CONTINUEtrue}{}%
+ \pgfplots@if{pgfplots@#1minorgrids}{\pgfplots@loop@CONTINUEtrue}{}%
+ \ifpgfplots@loop@CONTINUE
+ % I support only ONE layer for both, minor and major
+ % grid lines -- no distinction! I am lazy... FIXME
+ \pgfplotsgetlayerforstyle{%
+ every axis grid,%
+ every minor grid,%
+ every axis #1 grid,%
+ every major grid,%
+ every minor #1 grid,%
+ every major #1 grid%
+ }%
+ \pgfplotsonlayer{\pgfplotsretval}{#1 grid style}%
+ \scope
+ \pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf#1%
+ %
+ \pgfplots@if{pgfplots@#1minorgrids}{%
+ \draw[%
+ /pgfplots/every axis grid,
+ /pgfplots/every minor grid,
+ /pgfplots/every axis #1 grid,
+ /pgfplots/every minor #1 grid]%
+ \pgfextra
+ \pgfplotslistforeach\pgfplots@prepared@tick@positions@minor@\as\pgfplots@curgridpos{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curgridpos
+ \pgfplots@drawgridlines@onorientedsurf@fromto\pgfplots@tick
+ }%
+ \endpgfextra;
+ }{}%
+ %
+ \pgfplots@if{pgfplots@#1majorgrids}{%
+ \draw[%
+ /pgfplots/every axis grid,
+ /pgfplots/every major grid,
+ /pgfplots/every axis #1 grid,
+ /pgfplots/every major #1 grid]%
+ \pgfextra
+ \pgfplotslistforeach\pgfplots@prepared@tick@positions@major@\as\pgfplots@curgridpos{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curgridpos
+ \pgfplots@drawgridlines@onorientedsurf@fromto\pgfplots@tick
+ }%
+ \endpgfextra;
+ }{}%
+ %
+ \endscope
+ \endpgfplotsonlayer
+ \fi
+ }{}%
+ \endgroup
+ }%
+}
+
+% Should draw a single grid line on the actual oriented surface.
+% #1 the value of the grid line.
+%
+% PRECONDITION
+% \pgfplots@ticknum contains the index of the current tick.
+\def\pgfplots@drawgridlines@onorientedsurf@fromto#1{%
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}}%
+}%
+
+% Implements 'axis x line shift' and its friends.
+%
+% It is called by grid line drawing instructions, tick lines, and tick
+% labels and installs a common shift. The purpose is to shift the
+% _entire_ axis along the outer normal.
+%
+% The operation is supposed to be used when an oriented surf is
+% installed.
+%
+% #1 used to determine the axis for which the outer normal is to be
+% determined. #1 is the 'a' value of the current oriented surf, i.e.
+% one of 0, 1, 2, or v.
+%
+% #2 same as '#1', but this here determines the 'b' value of the
+% current oriented surf.
+%
+% exactly one of '#1' or '#2' must be 'v' such that a unique line can
+% be identified.
+\def\pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf#1#2{%
+ \if v#1%
+ \let\pgfplots@loc@TMPa=\pgfplotspointonorientedsurfaceA%
+ \if v#2%
+ \pgfplots@error{Exactly one of '#1' or '#2' must be 'v', not both}%
+ \fi
+ \else
+ \if v#2%
+ \let\pgfplots@loc@TMPa=\pgfplotspointonorientedsurfaceB%
+ \else
+ \pgfplots@error{One of '#1' or '#2' must be 'v'}%
+ \fi
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/axis \pgfplots@loc@TMPa\space line shift}\pgfplots@loc@TMPb
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ % in this case, we KNOW that is is
+ % (a) parsed and
+ % (b) nonzero and
+ % (c) a dimension WITHOUT unit
+ % See \pgfplots@init@axis@shift
+ \ifpgfplots@separate@axis@lines
+ \else
+ \pgfplots@error{Internal error encountered: separate axis lines=false but axis shift found}%
+ \fi
+ \pgftransformshift{%
+ \expandafter\pgfqpointscale\expandafter{\pgfplots@loc@TMPb}{%
+ \begingroup
+ \pgf@process{%
+ \pgfplotspointonorientedsurfaceabtolinespec{#1}{#2}%
+ \expandafter\pgfplotspointouternormalvectorofaxis\expandafter{\pgfplotsretval}%
+ }%
+ \endgroup
+ }%
+ }%
+ \fi
+}%
+\let\pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf@orig=\pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf
+
+% Draws ticks on the currently active "oriented surface".
+%
+% The oriented surface is two dimensional and has been initialised
+% with \pgfplotspointonorientedsurfaceabsetupfor*** somehow.
+%
+% The idea is now the following:
+% - the tick positions change along the FIRST coordinate of this
+% surface:
+%
+% x ---- x ---- x ---- x
+% --> FIRST -->
+%
+% - the tick lines are drawn along the SECOND coordinate of this
+% surface:
+%
+% | ---- | ---- | ---- | | SECOND
+% | | | | v
+%
+% for example,
+% \pgfplotspointonorientedsurfaceab@setupfor@xyZ{1}
+% \pgfplots@drawticklines@onorientedsurf
+% will draw ticks at x-positions designated by \pgfplots@xtick. The
+% small tick lines will be drawn along the y axis. For each processed
+% point, the z coordinate will be fixed to '1'.
+%
+% Another example:
+% \pgfplotspointonorientedsurfaceab@setupfor@yxZ{-1}
+% \pgfplots@drawticklines@onorientedsurf
+% will draw ticks at y-positions designated by \pgfplots@ytick. The
+% small tick lines will be drawn along the x axis. For each processed
+% point, the z coordinate will be fixed to '-1'.
+%
+% Tick positions are taken out of the already precomputed list
+% \pgfplots@prepared@tick@positions@major@...
+\def\pgfplots@drawticklines@onorientedsurf{%
+ \expandafter\pgfplots@drawticklines@onorientedsurf@\pgfplotspointonorientedsurfaceA
+}%
+
+\def\pgfplots@drawticklines@INSTALLCLIP@onorientedsurf#1{%
+ \pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf{#1}%
+}%
+\def\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf#1{%
+ \pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf{#1}%
+}%
+% Avoids tick lines which are too thick by introducing a clipping
+% region. Tick lines (and grid lines) won't extend to the left or
+% right of axis #1.
+\def\pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf#1{%
+ \ifpgfplots@enable@tick@line@clipping
+ % this is LEGACY SUPPORT only. I did not want to change
+ % existing bounding boxes.
+ % Starting with 'compat=1.11', this is OFF.
+ \pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf@{#1}%
+ \fi
+}
+\def\pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf@#1{%
+ \pgfinterruptboundingbox%
+ \begingroup
+ % the case ||e_b|| == 0 should never happen here! Should be
+ % caught before entering this routine.
+ \let\pgfplots@loc@LENGTH=\pgfmathresult
+ \expandafter\let\expandafter\pgfplots@loc@MIN\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname
+ \expandafter\let\expandafter\pgfplots@loc@MAX\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1min\endcsname}{\pgfplots@loc@MIN}{-5cm}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1max\endcsname}{\pgfplots@loc@MIN}{-5cm}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1max\endcsname}{\pgfplots@loc@MAX}{5cm}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1min\endcsname}{\pgfplots@loc@MAX}{5cm}}%
+ \pgfusepath{clip}%
+ \endgroup
+ \endpgfinterruptboundingbox%
+}%
+
+\def\pgfplots@drawticklines@onorientedsurf@#1{%
+ \pgfplots@if{pgfplots@shownothingof@\pgfplotspointonorientedsurfaceB}{%
+ \relax
+ }{%
+ \begingroup
+ % FIXME : the case of centered axis lines is missing here.
+ % 0 = lower limit,
+ % 1 = upper limit
+ % 2 = centered...
+ % Currently, "0" is also used for centered axis lines.
+ \if 2\csname pgfplots@\pgfplotspointonorientedsurfaceA axislinesnum\endcsname
+ % centered axis lines need no complicated visibility
+ % checks. They need tick lines in *any* case.
+ % So, enabled them here!
+ \def\pgfplots@drawticklines@for@placecomputedtick@LOWEROK{1}%
+ %
+ % UPPEROK is unnecessary in this context - for centered
+ % axis lines, it will be disabled anyway because the
+ % styles like 'axis x line*' set \pgfplots@xticknum to
+ % center - and that means that no tick lines will be drawn
+ % (see below).
+ \def\pgfplots@drawticklines@for@placecomputedtick@UPPEROK{0}%
+ \else
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{0}{%
+ \def\pgfplots@drawticklines@for@placecomputedtick@LOWEROK{1}%
+ }{%
+ \def\pgfplots@drawticklines@for@placecomputedtick@LOWEROK{0}%
+ }%
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{1}{%
+ \def\pgfplots@drawticklines@for@placecomputedtick@UPPEROK{1}%
+ }{%
+ \def\pgfplots@drawticklines@for@placecomputedtick@UPPEROK{0}%
+ }%
+ \fi
+ \if\pgfkeysvalueof{/pgfplots/\pgfplotspointonorientedsurfaceB\space dir/value}r%
+ % local special handling for reversed axes: exchange
+ % meaning of 'left' and 'right' here.
+ %
+ % the rest of the pgfplots code does that automatically because
+ % there, tickposnum is relevant to determine the axes
+ % which contains tick labels. And this algorithm checks
+ % for reversed axes implicitly.
+ %
+ \if1\csname pgfplots@\pgfplotspointonorientedsurfaceA tickposnum\endcsname
+ \expandafter\def\csname pgfplots@\pgfplotspointonorientedsurfaceA tickposnum\endcsname{3}%
+ \else
+ \if3\csname pgfplots@\pgfplotspointonorientedsurfaceA tickposnum\endcsname
+ \expandafter\def\csname pgfplots@\pgfplotspointonorientedsurfaceA tickposnum\endcsname{1}%
+ \fi
+ \fi
+ \fi
+ \ifcase\csname pgfplots@\pgfplotspointonorientedsurfaceA tickposnum\endcsname\relax
+ % both
+ \or
+ % lower
+ \def\pgfplots@drawticklines@for@placecomputedtick@UPPEROK{0}%
+ \or
+ % center
+ \def\pgfplots@drawticklines@for@placecomputedtick@UPPEROK{0}%
+ \or
+ % upper
+ \def\pgfplots@drawticklines@for@placecomputedtick@LOWEROK{0}%
+ \else
+ % never used?
+ \def\pgfplots@drawticklines@for@placecomputedtick@UPPEROK{0}%
+ \fi
+ \expandafter\let\expandafter\pgfplots@prepared@tick@positions@major@\csname pgfplots@prepared@tick@positions@major@#1\endcsname
+ \expandafter\let\expandafter\pgfplots@prepared@tick@positions@minor@\csname pgfplots@prepared@tick@positions@minor@#1\endcsname
+ %
+ % There is only ONE layer for both, minor and major
+ % tick lines -- no distinction!
+ \pgfplotsgetlayerforstyle{%
+ every tick,%
+ every minor tick,%
+ every #1 tick,%
+ every major tick,%
+ every minor #1 tick,%
+ every major #1 tick%
+ }%
+ \pgfplotsonlayer{\pgfplotsretval}{#1tick style}%
+ \scope
+ \pgfplots@drawticklines@INSTALLCLIP@onorientedsurf#1
+ %
+ \pgfplots@if{pgfplots@#1minorticks}{%
+ \draw[%
+ /pgfplots/every tick,
+ /pgfplots/every minor tick,
+ /pgfplots/every #1 tick,
+ /pgfplots/every minor #1 tick]%
+ \pgfextra
+ \pgfmathparse{\pgfplots@subtickwidth}%
+ \let\pgfplots@subtickwidth@=\pgfmathresult
+ \let\pgfplots@subtickwidth@=\pgfmathresult
+ \let\pgfplots@subtickwidth=\pgfmathresult
+ \pgfplots@prepare@tick@offsets@for@{#1}{\pgfplots@subtickwidth@}%
+ \if\pgfplots@drawticklines@for@placecomputedtick@LOWEROK1%
+ \begingroup
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf v0%
+ \pgfplotslistforeach\pgfplots@prepared@tick@positions@minor@\as\pgfplots@curtickpos{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos
+ \let\pgfplots@curtickpos=\pgfplots@tick
+ \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}%
+ \pgfplots@drawticklines@for@placecomputedtick@LOWER
+ }%
+ \endgroup
+ \fi
+ %
+ \if\pgfplots@drawticklines@for@placecomputedtick@UPPEROK1%
+ \begingroup
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf v1%
+ \pgfplotslistforeach\pgfplots@prepared@tick@positions@minor@\as\pgfplots@curtickpos{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos
+ \let\pgfplots@curtickpos=\pgfplots@tick
+ \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}%
+ \pgfplots@drawticklines@for@placecomputedtick@UPPER
+ }%
+ \endgroup
+ \fi
+ \endpgfextra;
+ }{}%
+ %
+ \pgfplots@if{pgfplots@#1majorticks}{%
+ \draw[%
+ /pgfplots/every tick,
+ /pgfplots/every major tick,
+ /pgfplots/every #1 tick,
+ /pgfplots/every major #1 tick]%
+ \pgfextra
+ \pgfmathparse{\pgfplots@tickwidth}%
+ \let\pgfplots@tickwidth@=\pgfmathresult
+ \let\pgfplots@tickwidth@=\pgfmathresult
+ \let\pgfplots@tickwidth=\pgfmathresult
+ \pgfplots@prepare@tick@offsets@for@{#1}{\pgfplots@tickwidth@}%
+ \if\pgfplots@drawticklines@for@placecomputedtick@LOWEROK1%
+ \begingroup
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf v0%
+ \pgfplotslistforeach\pgfplots@prepared@tick@positions@major@\as\pgfplots@curtickpos{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos
+ \let\pgfplots@curtickpos=\pgfplots@tick
+ \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}%
+ \pgfplots@drawticklines@for@placecomputedtick@LOWER
+ }%
+ \endgroup
+ \fi
+ %
+ \if\pgfplots@drawticklines@for@placecomputedtick@UPPEROK1%
+ \begingroup
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf v1%
+ \pgfplotslistforeach\pgfplots@prepared@tick@positions@major@\as\pgfplots@curtickpos{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos
+ \let\pgfplots@curtickpos=\pgfplots@tick
+ \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}%
+ \pgfplots@drawticklines@for@placecomputedtick@UPPER
+ }%
+ \endgroup
+ \fi
+ \endpgfextra;
+ }{}%
+ %
+ \endscope
+ \endpgfplotsonlayer
+ \endgroup
+ }%
+}
+
+% Draws tick labels at the positions of the currently set oriented
+% surface.
+%
+% Tick positions are taken out of the already precomputed list
+% \pgfplots@prepared@tick@positions@major@...
+%
+% For 2D axes, this task is relatively simple:
+% we iterate through every prepared major tick position and place a
+% tick label. Open points, however, are the question whether to use
+% the RIGHT or the LEFT axis line on the current oriented surface:
+%
+% direction 'b' (second oriented)
+% |-------------------------|
+% | |
+% | |
+% | |direction 'a' (first oriented)
+% | |
+% | |
+% | |
+% |-------------------------|
+% Left Right
+%
+% Given the axis line which shall contain the labels, we have to
+% decide how to align the tick label nodes: on the left or on the
+% right? Of course, we want to align them such that they are "outside"
+% of the figure! That's simple as well: "Left axis line => outside
+% means left", "Right axis line => outside means right".
+%
+% That's all, basically.
+%
+% For 3D axes, all these points are basically ... the same!
+% Now it can happen that the current oriented surface shall
+% not contain ANY tick label. In that case, we do nothing.
+% Furthermore, the "outside" direction (i.e. the anchoring of the
+% label nodes) is a little bit more difficult.
+%
+%
+% See \pgfplots@drawticklines@onorientedsurf@ for a description of the
+% oriented surface.
+\def\pgfplots@drawticklabels@onorientedsurf{%
+ \expandafter\pgfplots@drawticklabels@onorientedsurf@\pgfplotspointonorientedsurfaceA
+}
+\def\pgfplots@drawticklabels@onorientedsurf@#1{%
+ \begingroup
+ \expandafter\let\expandafter\pgfplots@prepared@tick@positions@major@\csname pgfplots@prepared@tick@positions@major@#1\endcsname
+ % check whether
+ % - we need to place tick labels on the LEFT side,
+ % - we need to place tick labels on the RIGHT side,
+ % - we don't need tick labels for the current surface at all:
+ \pgfplotspointonorientedsurfaceabmatchaxisline{\csname pgfplots@#1ticklabelaxisspec\endcsname}{\pgfplots@ticklabelside}%
+ \ifx\pgfplots@ticklabelside\pgfutil@empty
+ % SKIP. The current oriented surface shall not get tick labels
+ % for #1.
+ \else
+ \pgfplots@if{pgfplots@#1majorticks}{%
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \pgfplots@init@scaled@tick@for{#1}%
+ }{\relax}%
+ \begingroup
+ \pgfplotsgetlayerforstyle{every tick label,every #1 tick label}%
+ \pgfplotsonlayer\pgfplotsretval{#1tick label style}%
+ \pgfkeysalso{/tikz/every node/.append style={/pgfplots/every tick label,/pgfplots/every #1 tick label}}%
+ \pgfplots@drawticklabels@onorientedsurf@prepareanchor#1%
+ %
+ \pgfplotsmath@ifzero{\csname pgfplots@\pgfplotspointonorientedsurfaceB @veclength\endcsname}{%
+ \def\pgfplots@tick@offset{0}%
+ }{%
+ \ifcase\csname pgfplots@#1tickalignnum\endcsname\relax
+ \def\pgfmathresult{0}%
+ \or
+ \pgfmathparse{\pgfplots@tickwidth}%
+ \or
+ \pgfmathmultiply{0.5}{\pgfplots@tickwidth}%
+ \fi
+ \let\pgfplots@tick@offset=\pgfmathresult
+ \pgfplots@ticklabel@maxtickdimen@extrashift{#1}{\pgfplots@tick@offset}%
+ %\pgfmathmultiply@{\pgfplots@tick@offset}{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}%
+ \let\pgfplots@tick@offset=\pgfmathresult
+ }%
+ %
+ \if2\csname pgfplots@#1axislinesnum\endcsname % Centered axis lines?
+ \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@logical@ZERO@\pgfplotspointonorientedsurfaceB\endcsname%
+ % FIXME : that stuff here does not respect
+ % '[xyz]tickpos num' keys!
+ \pgfplots@tickposchoiceb%<-- backw. compat, is usually empty.
+ \if r\pgfkeysvalueof{/pgfplots/\pgfplotspointonorientedsurfaceB\space dir/value}%
+ % special handling for reversed axes.
+ \pgfmathmultiply{-1}{\pgfplots@tick@offset}%
+ \let\pgfplots@tick@offset=\pgfmathresult
+ \fi
+ \edef\pgfplots@tick@offset{-\pgfplots@tick@offset}%
+ %\pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}%
+ \else
+ \if0\pgfplots@ticklabelside
+ \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname%
+ \pgfplots@tickposchoiceb%<-- backw. compat, is usually empty.
+ %\pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}%
+ \edef\pgfplots@tick@offset{-\pgfplots@tick@offset}%
+ \else
+ \if1\pgfplots@ticklabelside
+ \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname%
+ \pgfplots@tickposchoicea%<-- backw. compat, is usually empty.
+ %\pgfmathadd@{\pgfplots@tick@origin}{\pgfplots@tick@offset}%
+ \else
+ % FIXME : ticklabelside == 2 is, in principle,
+ % a valid choice. It is the case handled with
+ % "if 2 == pgfplots@#1axislinesnum" above,
+ % isn't it!?
+ \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@logical@ZERO@\pgfplotspointonorientedsurfaceB\endcsname%
+ % FIXME : is that correct!?
+ \pgfplots@tickposchoiceb%<-- backw. compat, is usually empty.
+ %\pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}%
+ %\edef\pgfplots@tick@offset{-\pgfplots@tick@offset}%
+ %
+ \if2\pgfplots@ticklabelside
+ \else
+ % Should never happen.
+ \pgfplots@error{Internal logic error during tick label placement (got placement character '\pgfplots@ticklabelside').
+ Please report this as a bug or verify your input arguments to #1ticklabel pos.}%
+ \fi
+ \fi
+ \fi
+ \fi
+ %\let\pgfplots@tick@origin=\pgfmathresult%
+ \edef\pgfplots@tick@offset{\pgfplots@tick@offset pt}%
+ %
+ % make sure the \pgfmathlogtologten method works even for
+ % non-standard 'log basis #1':
+ \def\pgfmathlogtologten@{\pgfplotscoordmath{#1}{log to log 10}}%
+ %
+ \xdef\pgfplots@show@ticklabel@LASTTICK{}%
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf{v}{\pgfplots@ticklabelside}%
+ \pgfplotslistforeachungrouped\pgfplots@prepared@tick@positions@major@\as\pgfplots@curtickpos{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos
+ \let\pgfplots@curtickpos=\pgfplots@tick
+ %\expandafter\pgfplotslistpopfront\csname pgfplots@prepared@tick@positions@major@tickindices@#1\endcsname\to\pgfplots@ticknum
+ \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}%
+ \pgfplots@show@ticklabel
+ {#1}{\pgfplots@curtickpos}(\pgfplots@curtickpos,\pgfplots@tick@origin+\pgfplots@tick@offset)%
+ {\pgfplots@ticknum}%
+ }%
+ \pgfplots@ticklabel@maxtickdimen@finish{#1}%
+ \endpgfplotsonlayer
+ \endgroup
+ \pgfplots@draw@tick@scale@label@for #1%
+ }%
+ {\relax}% if...@major==false
+ \fi
+ \endgroup
+}
+
+% This here does the main work for any tick label ANCHORING.
+%
+% FIXME : the new 'near ticklabel' anchors are now the default method
+% to place tick labels.
+%
+% This feature here can be used to disable this anchoring, i.e. set
+% 'ticklabel anchor=tikz' to use a stupid heuristics.
+%
+% There are actually two choices:
+% Choice 1: near ticklabel
+% This choice places tick labels fully automatic outside of the
+% figure, all on a line which is parallel to the axis which
+% contains the corresponding tick labels.
+%
+% Since we are currently working on a restricted surface, we have
+% three direction related to that surface:
+% 'a': this is the direction in which tick positions are known.
+% 'b': the 'orthogonal' axis to 'a' which is also in the surface.
+% 'n': the surface normal.
+% Now, the idea for tick labels is to place them at
+% SCALE_b * b + SCALE_n * n,
+% where the SCALE_[bn] numbers are choosen such that the label is
+% outside of the axis.
+%
+% The offset is simply added to the transformation matrix (as a
+% shift).
+%
+% Choice 2: tikz.
+% This is more or less a backwards compatibility feature. It does
+% not change the transformation matrix. It simply sets the 'at' key
+% of each node to the tick position and prepares the correct anchors
+% for the TikZ '\node' commands.
+% That's all here.
+%
+% PRECONDITION:
+% - called inside of \pgfplots@drawticklabels@onorientedsurf@
+% POSTCONDITION:
+% - defines
+% - \pgfplots@tickposchoicea
+% if called, sets keys such that tick labels are RIGHT (TOP) of
+% the axis,
+%
+% - \pgfplots@tickposchoiceb
+% if called, sets keys such that tick labels are LEFT
+% (BOTTOM) of the axis,
+\def\pgfplots@drawticklabels@onorientedsurf@prepareanchor#1{%
+ \if\csname pgfplots@ticklabel@anchor@#1\endcsname0%
+ % auto is the same as 'near ticklabel':
+ \expandafter\def\csname pgfplots@ticklabel@anchor@#1\endcsname{1}%
+ \fi
+ \ifcase\csname pgfplots@ticklabel@anchor@#1\endcsname%
+ % 0: doesn't happen, see above.
+ \or
+ % 1: near ticklabel.
+ % The following code contains automatically
+ % aligned tick labels (especially for 3D axes).
+ % see the manual for the |near ticklabel| anchors.
+ \pgfkeys{/tikz/anchor=near #1ticklabel}%
+ %
+ % process the (optional) ticklabel distance:
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/#1ticklabel shift}\pgfmathresult
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \afterassignment\pgfplots@gobble@until@relax
+ \pgf@xa=\pgfkeysvalueof{/pgfplots/#1ticklabel shift}pt\relax
+ \multiply\pgf@xa by-1 % the direction vector points to the INSIDE. the shift should have opposite sign.
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xa}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty
+ \else
+ \pgfplotspointouternormalvectorofaxis@ifdependson@v{\pgfplotsticklabelaxisspec{#1}}{%
+ \tikzset{every node/.append code={%
+ \tikz@addtransform{%
+ \pgftransformshift{%
+ \pgfplotspointouternormalvectorofticklabelaxis{#1}%
+ \pgfqpointscale{-\pgfplots@loc@TMPc}{}%
+ }%
+ }%
+ }%
+ }%
+ }{%
+ \pgftransformshift{%
+ \pgfplotspointouternormalvectorofticklabelaxis{#1}%
+ \pgfqpointscale{-\pgfplots@loc@TMPc}{}%
+ }%
+ }%
+ \fi
+ %
+ % these things are irrelevant here:
+ \let\pgfplots@tickposchoicea=\pgfutil@empty
+ \let\pgfplots@tickposchoiceb=\pgfutil@empty
+ \or
+ % 2: tikz.
+ % We simply prepare the default anchor.
+ % Actually, this code is just for backwards compatibility -
+ % there may be people who prefer to set anchors. The
+ % 'near ticklabel' implementation is much more general, however.
+ \if\pgfplotspointonorientedsurfaceB x
+ \def\pgfplots@tickposchoicea{\tikzset{right}}%
+ \def\pgfplots@tickposchoiceb{\tikzset{left}}%
+ \else
+ \if\pgfplotspointonorientedsurfaceB y
+ \def\pgfplots@tickposchoicea{\tikzset{above}}%
+ \def\pgfplots@tickposchoiceb{\tikzset{below}}%
+ \else
+ \def\pgfplots@tickposchoicea{\tikzset{anchor=north east}}%
+ \def\pgfplots@tickposchoiceb{\tikzset{anchor=south east}}%
+ \fi
+ \fi
+ \fi
+ %
+ %
+ %
+ % suppress this warning. We cannot avoid it currently.
+ \pgfkeysgetvalue{/pgfplots/warning/missing near ticklabel at/.@cmd}\pgfplots@loc@neartickllabel@at
+ \pgfkeysdef{/pgfplots/warning/missing near ticklabel at}{}%
+ %
+ \pgfplots@ticklabel@maxtickdimen@prepare@for@normalvec
+ {#1}%
+ {\pgfplotspointouternormalvectorofticklabelaxis{#1}}%
+ %
+ \pgfkeyslet{/pgfplots/warning/missing near ticklabel at/.@cmd}\pgfplots@loc@neartickllabel@at%
+}%
+
+\newif\ifpgfplots@checkuniform@isfirst
+% Checks whether the argument to xtick or ytick is a UNIFORM tick
+% sequence.
+%
+% A uniform tick sequence is 0,...,10 and 3,4,5 and -5,-4,-2 but
+% NOT 0,2,4 or 4,10.
+%
+% Furthermore, any NON-integer tick arguments are also assumed to be
+% NOT uniform.
+%
+% INPUT:
+% #1: a tick argument (i.e. something which can be put to
+% \foreach \x in {#1})
+%
+% OUTPUT:
+% \pgfplots@isuniformticktrue
+% or
+% \pgfplots@isuniformtickfalse
+% depending on the check.
+% This variable will be set globally.
+\def\pgfplots@checkisuniformLOGtick#1{%
+ \begingroup
+ \global\pgfplots@isuniformticktrue
+ \pgfplots@checkuniform@isfirsttrue
+ \foreach \x in {#1}{%
+ \pgfmathmultiply@\x\reciproclogten
+ \let\cur=\pgfmathresult
+ % check whether
+ % \cur - last == 1 (last = \pgfplots@glob@TMPb)
+ \ifpgfplots@checkuniform@isfirst
+ \global\pgfplots@checkuniform@isfirstfalse
+ \else
+ \pgfmathsubtract@\cur\pgfplots@glob@TMPb%
+ \pgfmathapproxequalto@\pgfmathresult{1.0}%
+ \ifpgfmathcomparison
+ \else
+ \global\pgfplots@isuniformtickfalse
+ \breakforeach
+ \fi
+ \fi
+ \global\let\pgfplots@glob@TMPb=\cur
+ }%
+ \endgroup
+}
+
+% Checks whether the linear tick sequence #1 is a uniform tick.
+%
+% It also assigns pgfplots@tick@distance@#1 as the distance.
+%
+% see \pgfplots@checkisuniformLOGtick for details.
+%
+% #1: a tick sequence (expanded)
+% #2: a macro which will be filled with the tick distance. This is
+% only valid if \pgfplots@isuniformticktrue.
+\def\pgfplots@checkisuniformLINEARtick#1#2{%
+ \begingroup
+ \global\pgfplots@isuniformticktrue
+ \pgfplots@checkuniform@isfirsttrue
+ \global\let\pgfplots@glob@TMPb=\pgfutil@empty
+ \global\def\pgfplots@glob@TMPa{1}%
+ \foreach \x in {#1}{%
+ \ifx\pgfplots@glob@TMPb\pgfutil@empty
+ \else
+ \pgfmathsubtract@\x\pgfplots@glob@TMPb
+ \ifpgfplots@checkuniform@isfirst
+ % remember first distance h = x_1 - x_0
+ \global\let\pgfplots@glob@TMPa=\pgfmathresult
+ \global\pgfplots@checkuniform@isfirstfalse
+ \else
+ % check whether x_i - x_{i-1} = h
+ \pgfmathapproxequalto@\pgfmathresult\pgfplots@glob@TMPa%
+ \ifpgfmathcomparison
+ \else
+ \global\pgfplots@isuniformtickfalse
+ \breakforeach
+ \fi
+ \fi
+ \fi
+ \global\let\pgfplots@glob@TMPb=\x%
+ }%
+ \endgroup
+ \let#2=\pgfplots@glob@TMPa
+}
+
+% helper method which computes log10*\x foreach \x in {#1}.
+% The result will be \xdef'ed into #2.
+%
+% #1: the ticks
+% #2: the output macro
+% #3: the axis
+\def\pgfplots@compute@tick@times@logten#1\to#2#3{%
+ \global\let#2=\pgfutil@empty
+ \foreach \pgfplots@loc@TMPb in {#1} {%
+ \pgfplotscoordmath{#3}{log to display log}{\pgfplots@loc@TMPb}%
+ \pgfplotscoordmath{#3}{tofixed}{\pgfmathresult}%
+ \ifx#2\pgfutil@empty
+ \xdef#2{\pgfmathresult}%
+ \else
+ \xdef#2{#2,\pgfmathresult}%
+ \fi
+ }%
+}
+
+% This is part of \pgfplots@assign@default@tick@foraxis and relies on
+% its temporary variables.
+%
+% INPUT:
+% \MIN : the lower axis limit of #1 (a TeX register, in transformed range)
+% \MAX : same with upper axis limit of #1
+% \desirednumticks: the number of ticks to use
+% OUTPUT:
+% \H : will contain the (transformed) distance between adjacent ticks
+% \aftergroup\pgfplots@isuniformticktrue set if it applies
+%
+%
+\def\pgfplots@ticks@compute@tick@distance#1{%
+ % compute step size 'H':
+ \H=\MAX
+ \advance\H by-\MIN
+ \ifdim\H<0pt \H=-1\H \fi
+%\message{Axis limit #1: [\the\MIN:\the\MAX], diff = \the\H.^^J}%
+ \c@pgf@counta=\desirednumticks
+ \advance\c@pgf@counta by-1 %
+ \divide\H by\c@pgf@counta
+%\message{determining ticks for #1-axis: Wr := (width/max space between ticks) = \the\Wr, desirednumticks=max(\axisdefaulttryminticks, trunc(Wr)) = \the\desirednumticks, H#1=(axis range/(desirednumticks-1)) = \the\H^^J}%
+ %
+ % SEARCH for the NEXT FEASABLE H.
+ \edef\Hmacro{\pgf@sys@tonumber\H}%
+ \ifpgfplots@cur@is@linear
+ % CASE LINEAR AXIS
+ \ifpgfplots@is@datascaled
+ % This here works if the scaling trafo is linear.
+ \pgfplotscoordmath{#1}{datascaletrafo noshift inverse}{\Hmacro}%
+ \let\Hmacro=\pgfmathresult
+ \else
+ \pgfmathfloatparsenumber{\Hmacro}%
+ \let\Hmacro=\pgfmathresult
+ \fi
+%\message{Got T^{-1}(H#1) = \Hmacro^^J}%
+ %
+ \pgfplots@assign@default@tick@foraxis@normalizetickdist#1\Hmacro
+ \let\Hmacro=\pgfmathresult
+ %
+ % Ok, we are ready.
+ % Now, convert everything into the fixed point data
+ % range:
+ \ifpgfplots@is@datascaled
+ \pgfplotscoordmath{#1}{datascaletrafo noshift}{\Hmacro}%
+ \H=\pgfmathresult pt
+ \else
+ \pgfmathfloattofixed\Hmacro
+ \H=\pgfmathresult pt
+ \fi
+ %
+%\message{snapped-to-nicest = \Hmacro^^J}%
+ \aftergroup\pgfplots@isuniformticktrue
+ \else
+ % CASE LOG AXIS
+ %
+ % search for the "best" H= j* log(10), j an integer.
+ %
+ % And prefer j=1 if that is possible (otherwise minor
+ % ticks are not useful).
+ \pgfmath@basic@multiply@{\Hmacro}{\pgfplots@loc@log@from@display@log@scale}%
+ \let\Hmacrobaseten=\pgfmathresult
+ \expandafter\H\pgfmathresult pt
+%\message{ [ H / log(10) = \pgfmathresult ]}%
+ \ifdim\H<2pt
+ \H=1pt
+ \else
+ \ifnum\H<1pt
+ \H=1pt
+ \else
+ \expandafter\pgfmathfloor\expandafter{\pgfmathresult}%
+ \expandafter\H\pgfmathresult pt
+ \fi
+ \fi
+ \ifdim\H=1pt
+ \aftergroup\pgfplots@isuniformticktrue
+ \pgfplots@isuniformticktrue
+ \else
+ \aftergroup\pgfplots@isuniformtickfalse
+ \pgfplots@isuniformtickfalse
+ \fi
+%\message{final H=\pgf@sys@tonumber{\H} * log(10)}%
+ \H=\pgfplots@loc@log@to@display@log@scale\H
+ \fi
+ %
+}
+
+% This is part of \pgfplots@assign@default@tick@foraxis
+%
+% It overwrites the internal macros of
+% \pgfplots@assign@default@tick@foraxis
+\def\pgfplots@assign@default@tick@foraxis@autoadjust@result#1{%
+ \pgfplots@if{pgfplots@#1islinear}{%
+ \begingroup
+ \def\pgfplots@tick@returnval@ready{1}%
+ \pgfutil@ifundefined{pgfplots@assign@default@tick@foraxis@recurselevel}{%
+ \def\pgfplots@assign@default@tick@foraxis@recurselevel{1}%
+ }{%
+ \pgfplotsutil@advancestringcounter\pgfplots@assign@default@tick@foraxis@recurselevel
+ }%
+ \ifnum\pgfplots@assign@default@tick@foraxis@recurselevel<15
+ \c@pgf@counta=\axisdefaulttryminticks\relax
+ \advance\c@pgf@counta by1
+ \edef\axisdefaulttryminticks{\the\c@pgf@counta}%
+%\message{**TOO FEW TICK LABELS FOR #1. RECURSION with try min ticks=\axisdefaulttryminticks.**^^J}%
+ % recurse.
+ \pgfplots@assign@default@tick@foraxis{#1}%
+ \expandafter\global\expandafter\let\expandafter\pgfplots@glob@TMPa\csname pgfplots@#1tick\endcsname
+ \expandafter\global\expandafter\let\expandafter\pgfplots@glob@TMPb\csname pgfplots@tick@distance@#1\endcsname
+ \else
+ \pgfplotswarning{tick computation failed}{#1}{\axisdefaulttryminticks}\pgfeov%
+ \def\pgfplots@tick@returnval@ready{0}%
+ \fi
+ \pgfmath@smuggleone\pgfplots@tick@returnval@ready
+ \endgroup
+ }{%
+ % Case logarithmic axes and too few ticks.
+ \aftergroup\pgfplots@isuniformtickfalse
+ % ok, do something special.
+ %
+ % The idea is now to place ticks at
+ % 10^{i*h} with properly choosen 'h'.
+ %
+ % So: apply basically the SAME code as above for linear
+ % axis, just everything log 10! And keep in mind that all
+ % coordinates are actually given as natural logarithms.
+ \MIN\csname pgfplots@#1min\endcsname pt
+ \H=\MAX
+ \advance\H by-\MIN
+ \ifdim\H<0pt \H=-1\H \fi
+ \H=\pgfplots@loc@log@from@display@log@scale \H
+%\message{Axis limit #1: [\the\MIN:\the\MAX], diff/log(10) = \the\H.}%
+ \c@pgf@counta=\desirednumticks\relax
+ \advance\c@pgf@counta by-1
+ \ifnum\c@pgf@counta>2
+ % subtract one more. This algorithm here produces more
+ % ticks than the normal one which is designed for 10^i
+ \advance\c@pgf@counta by-1
+ \fi
+ \divide\H by\c@pgf@counta\relax
+%\message{determining ticks for #1-axis: Wr := (width/max space between ticks) = \the\Wr, desirednumticks=max(\axisdefaulttryminticks, trunc(Wr)) = \the\desirednumticks, H#1=(axis range/(desirednumticks-1)) = \the\H}%
+ %
+ % SEARCH for the NEXT FEASABLE H.
+ \edef\Hmacro{\pgf@sys@tonumber\H}%
+ \pgfmathfloatparsenumber{\Hmacro}%
+ \pgfplots@assign@default@tick@foraxis@normalizetickdist#1\pgfmathresult
+ %
+ \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}%
+ \let\Hmacro=\pgfmathresult
+ \H=\Hmacro pt %
+ % Ok, our step size h for 10^{i*h} is ready!
+%\message{determined step size 10^{\Hmacro}}%
+ % Now, we want to activate the Tick set {10^{i*H}, i in \Z}
+ % compute I such that
+ % 10^{min} = 10^{I * H + rest}; |rest| < H
+ % -> I = round(xmin/H)
+ % -> MIN = I * H
+ % BUT EVERYTHING to log(10) basis!
+ \MIN=\pgfplots@loc@log@from@display@log@scale \MIN
+ \pgfmathlog@invoke@expanded\pgfmathdivide@{%
+ {\pgf@sys@tonumber\MIN}%
+ {\Hmacro}%
+ }%
+ \pgfmathsetcount{\c@pgf@counta}{\pgfmathresult}%
+ \ifdim\MIN<0pt
+ % the truncation rounds TOWARDS 0 which is not what I want.
+ \advance\c@pgf@counta by-1
+ \fi
+ \MIN=\H\relax
+ \multiply\MIN by\c@pgf@counta\relax
+ %
+ % convert back to basis 'e':
+ \MIN=\pgfplots@loc@log@to@display@log@scale\MIN\relax
+ \H=\pgfplots@loc@log@to@display@log@scale\H\relax
+ \MINH=\MIN\relax
+ \advance\MINH by\H\relax
+ }%
+}%
+
+% The key 'xtick distance' can have any value. This routine avoids
+% 'dimension too large' programmatically
+\def\pgfplots@assign@default@tick@foraxis@cap#1#2{%
+ \ifpgfplots@is@datascaled
+ \pgfplotscoordmath{#1}{datascaletrafo noshift inverse}{16000}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{#1}{min}{\pgfplots@loc@TMPb}{#2}%
+ \edef\pgfplots@loc@TMPc{#2}%
+ \ifx\pgfplots@loc@TMPc\pgfmathresult
+ \def\pgfplotsretval{0}%
+ \else
+ \def\pgfplotsretval{1}%
+ \fi
+ \else
+ \pgfplotscoordmath{#1}{parsenumber}{16000}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{#1}{parsenumber}{#2}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ \pgfplotscoordmath{#1}{min}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}%
+ %
+ \ifx\pgfplots@loc@TMPc\pgfmathresult
+ \def\pgfplotsretval{0}%
+ \else
+ \def\pgfplotsretval{1}%
+ \fi
+ \fi
+ %
+ \ifx1\pgfplotsretval
+ \pgfplotswarning{dimension too large in ticks}{#1}{#2}{\pgfmathresult}\pgfeov%
+ \fi
+}
+
+% This macro is NECESSARILY part of
+% \pgfplots@assign@default@tick@foraxis:
+%
+% OUTPUT:
+% \csname pgfplots@#1tick\endcsname
+% \csname pgfplots@tick@distance@#1\endcsname
+% FIXME : some \aftergroup trickery...
+\def\pgfplots@assign@default@tick@foraxis@compute#1{%
+ % Ok, we have either log or linear axis and need default
+ % ticks MIN,MIN+H,...,MAX.
+ \let\MINH=\pgf@xa
+ \let\H=\pgf@xb
+ \let\MAX=\pgf@ya
+ \let\MIN=\pgf@yb
+ %
+ \MAX=\csname pgfplots@#1max\endcsname pt %
+ \advance\MAX by0.001pt % avoid round errors
+ %\expandafter\MIN\the\c@pgf@counta pt
+ \MIN=\csname pgfplots@#1min\endcsname pt %
+ %
+ \pgfkeysgetvalue{/pgfplots/#1tick distance}\Hmacro
+ \ifx\Hmacro\pgfutil@empty
+ \pgfplots@ticks@compute@tick@distance#1%
+ \def\b@pgfplots@ticks@computed@tick@distance@is@final{0}%
+ \else
+ % ah - a user argument. OK, prefer that one over the default:
+ \pgfplotscoordmath{default}{parse}{abs(\Hmacro)}%
+ \let\Hmacro=\pgfmathresult
+ \pgfplots@assign@default@tick@foraxis@cap{#1}{\Hmacro}%
+ \let\Hmacro=\pgfmathresult
+ \ifpgfplots@cur@is@linear
+ \ifpgfplots@is@datascaled
+ \pgfplotscoordmath{#1}{datascaletrafo noshift}{\pgfmathresult}%
+ \else
+ \pgfplotscoordmath{#1}{tofixed}{\pgfmathresult}%
+ \fi
+ \H=\pgfmathresult pt
+ \pgfplots@isuniformticktrue
+ \aftergroup\pgfplots@isuniformticktrue
+ \else
+ \pgfplotscoordmath{#1}{log}{\pgfmathresult}%
+ \let\Hmacro=\pgfmathresult
+ \H=\pgfmathresult pt
+ %
+ % we don't know it. check it.
+ \pgfplots@isuniformtickfalse
+ \aftergroup\pgfplots@isuniformtickfalse
+ \fi
+ \def\b@pgfplots@ticks@computed@tick@distance@is@final{1}%
+ \fi
+%\message{Got H=\the\H\space(\Hmacro)^^J}%
+ %
+ % OK, now compute MIN/MAX :
+ \ifpgfplots@cur@is@linear
+ % The following code is carried out in floating point
+ % arithmetics because it requires large data ranges.
+ %
+ % I want to compute MIN@new := I*H where I is chosen
+ % such that MIN = I*H + rest with rest < H.
+ % The problem is the possibly large range of MIN. I
+ % can't work completely in the transformed datarange,
+ % so numbers get too large.
+ %
+ % So, compute I := int( MIN / H ) (integer truncation)
+ % in float arithmetics and then MIN@new := I*H
+ \pgfmathfloatdivide@{\csname pgfplots@#1min@unscaled@as@float\endcsname}{\Hmacro}%
+ \pgfmathfloatint@{\pgfmathresult}%
+ \pgfmathfloatmultiply@{\pgfmathresult}{\Hmacro}%
+ \let\MIN@new=\pgfmathresult
+ %
+ % Now, convert everything into the fixed point data
+ % range:
+ \ifpgfplots@is@datascaled
+ \pgfplotscoordmath{#1}{datascaletrafo}{\MIN@new}%
+ \MIN=\pgfmathresult pt
+ \else
+ \pgfmathfloattofixed\MIN@new
+ \MIN=\pgfmathresult pt
+ \fi
+ %
+ % And, since we have used finite precision, I is most
+ % likely to be large. So: subtract one H. In the worst
+ % case, this produces one tick position too much (but
+ % it won't be printed).
+ \advance\MIN by-\H\relax
+ \else
+ % Now, we want to activate the Tick set
+ % {lowest, lowest+H, ..., highest}
+ %
+ % Where
+ % lowest = I * log(10) + rest, |rest| < log(10).
+ % this is conceptionally different from the approach for
+ % linear axes, because H = j*log(10).
+ %
+ % remember the original xmin in MINH:
+ \MINH=\MIN
+ %
+ % and compute I and I*log(10) here:
+ \MIN=\pgfplots@loc@log@from@display@log@scale \MIN
+ \edef\pgfmathresult{\pgf@sys@tonumber{\MIN}}%
+ \pgfmathsetcount{\c@pgf@counta}{\pgfmathresult}%
+ \ifdim\MIN<0pt
+ % the truncation rounds TOWARDS 0 which is not what I want.
+ \advance\c@pgf@counta by-1
+ \fi
+ \MIN=\pgfplots@loc@log@to@display@log@scale pt
+ \multiply\MIN by\c@pgf@counta
+ \ifpgfplots@isuniformtick
+ \else
+ % This here is a special case to move the first tick
+ % near the lower axis limit.
+ %
+ % "Near" means either directly above or directly below ymin.
+ %
+ % My application example is as follows:
+ % Let H = 2*log(10).
+ % Furthermore, ymin = 3e-6, ymax= 8e-2. That means we can choose either
+ % 10^{-5}, 10^{-3}, 10^{-1}
+ % or
+ % 10^{-4}, 10^{-2}
+ % as ticks. Well, I prefer the first one.
+ %
+ % HEURISTICS: start as near to ymin as possible!
+ %
+ % We check here if we can come nearer to ymin if we
+ % shift the current tick by log(10):
+ % if( ymin - I * log(10) < 0.5*H -> use I+1, that means add log(10).
+ %
+ % that's equivalent to
+ % 2*(ymin - I * log(10)) - H < 0.
+ \advance\MINH by-\MIN
+ \multiply\MINH by2
+ \advance\MINH by-\H
+ %
+ \ifdim\MINH<0pt
+ \advance\MIN \pgfplots@loc@log@to@display@log@scale pt
+ \fi
+ \fi
+ \fi
+ \MINH=\MIN
+ \advance\MINH by\H
+ % Ok, now it can happen that only ONE tick label is placed in
+ % this range.
+ % That's useless, so check for it.
+ %
+ % That's the case if
+ % MIN < ORIGMIN && MAX < MIN+2 H
+ % MIN < ORIGMIN by construction (ok, MIN <= ORIGMIN by
+ % construction, but I don't care about this case).
+ % So: check only the second condition.
+%\message{Got MIN=\pgf@sys@tonumber\MIN; H=\pgf@sys@tonumber\H; MAX=\pgf@sys@tonumber\MAX.^^J}%
+ \def\pgfplots@tick@returnval@ready{0}%
+ %
+ \pgfplots@tmpa=\MINH
+ \advance\pgfplots@tmpa by\H
+ \ifdim\MAX<\pgfplots@tmpa
+ \if1\b@pgfplots@ticks@computed@tick@distance@is@final
+ % OK, we cannot auto adjust tick labels -- if if there are
+ % too few of them.
+ \else
+ \pgfplots@assign@default@tick@foraxis@autoadjust@result#1%
+ \fi
+ \fi
+ %
+ % assert that we have at least a minimal tick distance.
+ % FIXME :this minimum might actually be too small...
+ \ifdim\MINH=\MIN
+ \pgfplotsthrow{dimension too small in ticks}{#1}\pgfeov%
+ %
+ % make sure that the compilation succeeds:
+ \H=1pt %
+ \advance\MINH by\H
+ \fi
+ %
+ \if0\pgfplots@tick@returnval@ready
+ \xdef\pgfplots@glob@TMPb{\pgf@sys@tonumber{\H}}%
+ \advance\MAX by0.5\H % avoid rounding inaccuracies:
+ \xdef\pgfplots@glob@TMPa{\pgf@sys@tonumber{\MIN},\pgf@sys@tonumber{\MINH},...,\pgf@sys@tonumber{\MAX}}%
+ \fi
+%\message{final H=\the\H; returning \pgfplots@glob@TMPa.}%
+ \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplots@glob@TMPa
+ \expandafter\let\csname pgfplots@tick@distance@#1\endcsname=\pgfplots@glob@TMPb
+}%
+
+% Computes tick positions using the current axis limits.
+%
+% Parameters:
+% /pgfplots/max space between ticks
+% Determines the maximum space which is not filled by at least one
+% tick label (approximate, there is some rounding internally)
+% /pgfplots/try min ticks
+% see manual
+%
+% Idea:
+% We want ticks at each
+% { i*H, i in \Z }.
+% Of course, there shouldn't be TOO MUCH ticks.
+%
+% Our heuristics is to set
+% desirednumticks = round(ACTUAL WIDTH / (max space between ticks) )
+% and generate H = (axis range) / (desirednumticks).
+%
+% Since not all step sizes H look well, restrict H to a set of allowed
+% step sizes such as
+% { 1, 1/2, 1/5, 1/10 },
+% or, to be more precise:
+% { 1*10^e, 2*10^e, 5*10^e }
+% -> round to the nearest matching number!
+% This yields H (for example as 2*10^e). Then, compute i*H, i \in \Z
+%
+% The data scaling transformation T(x) makes things more complicated.
+% Now, T(x) = q * x - p and we need to check for problems with large
+% numbers:
+% - q* H = ( T(Max) - T(Min) ) / desirednumticks = q * (Max - Min) / desirednumticks.
+% - Using floating point arithmetics, (Max-Min)/desirednumticks (unscaled!)
+% is analysed to restrict H to {1*10^e, 2*10^e, 5*10^e}.
+% - So, we get q * H (we can't use the 'p' shift of the affine trafo here).
+% - The next problem is to compute { I*H, I in \Z } because
+% I = trunc( Min / H ) = trunc( ( T(Min) + p ) / (q*H) ).
+% This can be seen by Min = I*H + rest and thus T(Min) = I*q*H + q*rest -p.
+% The Problem: (T(min)+p ) / (q*H) can be TOO BIG for pgfmath.
+% -> for the data scaling case, I will use floating point
+% arithmetics to compute that last step.
+% I will acquire \pgfplots@[xy]min@unscaled@as@float here.
+%
+%
+%
+%
+%
+% For log-plots,
+% H in { j*log(10), j=1,2,3,... }
+% where the usual case should be j = 1.
+%
+% Then, the resulting tick is
+% TICK={MIN,MIN+H,...,MAX}
+% where
+% MIN = I*H
+% is chosen such that
+% axis minimum limit = I*H + rest; |rest| < H.
+%
+% Again, log plots follow a slightly different approach: here,
+% MIN = I * log(10)
+% is chosen such that
+% axis minimum limit = I*log(10) + rest; |rest| < log(10)
+% while H = j*log(10), j>=1.
+%
+%
+% PRECONDITION:
+% - limits are correct
+% - axis width/height is set correctly
+%
+% POSTCONDITION:
+% - Tick for axis #1 is assigned
+% - \ifpgfplots@determinedefaultvalues@needs@check@uniformtick is set
+%
+% REMARKS:
+% - this algorithms works also if the data range has been transformed
+% with a LINEAR transformation.
+% ATTENTION: as of 2008-05-15, the scaling trafo is AFFINE LINEAR.
+% That means we have to eliminate the 'affine' shifting before the
+% algorithms works correctly.
+\def\pgfplots@assign@default@tick@foraxis#1{%
+ \begingroup
+ % Shortcut-names:
+ \expandafter\let\expandafter\ifpgfplots@is@datascaled\csname ifpgfplots@apply@datatrafo@#1\endcsname
+ % Attention here: use UNSHIFTET scalings, see remark above
+ \expandafter\let\expandafter\ifpgfplots@cur@is@linear\csname ifpgfplots@#1islinear\endcsname
+ %
+ \let\desirednumticks=\c@pgf@countd
+ \let\Wr=\pgf@xc
+ \Wr=\csname pgfplotspoint#1axislength\endcsname\relax
+ % r = max place without ticks in pt -> choose desirednumticks >= W/r
+ \divide\Wr by\axisdefaulttickwidth\relax
+ \afterassignment\pgfplots@gobble@until@relax
+ \desirednumticks=\the\Wr\relax
+ \advance\desirednumticks by1
+ \ifpgfplots@cur@is@linear
+ \ifnum\axisdefaulttryminticks>\desirednumticks\relax
+ \desirednumticks=\axisdefaulttryminticks\relax
+ \fi
+ \else
+ \ifnum\pgfplots@default@try@minticks@log>\desirednumticks\relax
+ \desirednumticks=\pgfplots@default@try@minticks@log\relax
+ \fi
+ \expandafter\ifx\csname pgfplots@#1tickten\endcsname\pgfutil@empty
+ \else
+ % log plot and tickten-option: provide special processing.
+ \edef\pgfplots@loc@TMPa{\csname pgfplots@#1tickten\endcsname}%
+ \expandafter\pgfplots@compute@tick@times@logten\pgfplots@loc@TMPa\to\pgfplots@glob@TMPa{#1}%
+ \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplots@glob@TMPa
+ \fi
+ \fi
+ \ifpgfplots@cur@is@linear
+ \else
+ \pgfplotscoordmath{#1}{parsenumber}{1}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{#1}{log from display log}{\pgfplots@loc@TMPa}%
+ \pgfplotscoordmath{#1}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@loc@log@from@display@log@scale=\pgfmathresult
+ %
+ \pgfplotscoordmath{#1}{log to display log}{\pgfplots@loc@TMPa}%
+ \pgfplotscoordmath{#1}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@loc@log@to@display@log@scale=\pgfmathresult
+ \fi
+ %
+ \expandafter\ifx\csname pgfplots@#1tick\endcsname\pgfutil@empty
+ %
+ % OK, automatically compute ticks:
+ \pgfplots@assign@default@tick@foraxis@compute#1%
+ %
+ \expandafter\global\expandafter\let\expandafter\pgfplots@glob@TMPa\csname pgfplots@#1tick\endcsname
+ \expandafter\global\expandafter\let\expandafter\pgfplots@glob@TMPb\csname pgfplots@tick@distance@#1\endcsname
+ \ifpgfplots@isuniformtick
+ \aftergroup\pgfplots@determinedefaultvalues@needs@check@uniformtickfalse
+ \else
+ % in this case, we better check...
+ \aftergroup\pgfplots@determinedefaultvalues@needs@check@uniformticktrue
+ \fi
+ \else
+ \expandafter\global\expandafter\let\expandafter\pgfplots@glob@TMPa\csname pgfplots@#1tick\endcsname
+ \gdef\pgfplots@glob@TMPb{}% will be computed later, in 'check uniform tick'
+ \aftergroup\pgfplots@determinedefaultvalues@needs@check@uniformticktrue
+ \fi
+ \endgroup
+ \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplots@glob@TMPa
+ \expandafter\let\csname pgfplots@tick@distance@#1\endcsname=\pgfplots@glob@TMPb
+%\message{pgfplots.sty: #1tick set to \csname pgfplots@#1tick\endcsname [#1min=\csname pgfplots@#1min\endcsname, #1max=\csname pgfplots@#1max\endcsname].}%
+}
+
+% Takes the distance between adjacent ticks as floating point number
+% and returns a normalized tick distance.
+%
+%
+% The idea is to get "nice" (human readable) distances instead of
+% strange fractions or real numbers.
+%
+% The result will be assigned to \pgfmathresult (in float).
+%
+% #1 the axis (x or y or z)
+% #2 the unnormalized tick distance computed so far
+%
+% Example:
+% \pgfmathfloatparsenumber{x}{1234}
+% \pgfplots@assign@default@tick@foraxis@normalizetickdist{x}{\pgfmathresult}
+% \pgfmathfloatotfixed\pgfmathresult
+% -->
+%
+% \pgfmathresult={1200}
+% or something like that.
+\def\pgfplots@assign@default@tick@foraxis@normalizetickdist#1#2{%
+ \begingroup
+ \let\H=\pgf@xb
+ \expandafter\pgfmathfloat@decompose#2\relax\pgfmathfloat@a@S\H\pgfmathfloat@a@E
+ % modify the mantisse:
+ \ifdim\H<2pt
+ \ifdim\H<1.5pt
+ \H=1.0pt
+ \else
+ \H=2.0pt
+ \fi
+ \else
+ \ifdim\H<4.9999pt
+ \ifdim\H<3.5pt
+ \H=2.0pt\relax
+ \else
+ \H=5.0pt\relax
+ \fi
+ \else
+ \ifdim\H<7.5pt
+ \H=5.0pt\relax
+ \else
+ \H=1.0pt\relax
+ \advance\pgfmathfloat@a@E by1
+ \fi
+ \fi
+ \fi
+ \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\pgf@sys@tonumber{\H}}{\the\pgfmathfloat@a@E}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% Helper method for
+% \pgfplots@apply@data@scale@trafo@to@options@for
+% #1: the ticks
+% #2: the trafo routine (not necessarily a single macro, but should
+% take one arg)
+% #3: the output macro name
+\long\def\pgfplots@apply@data@scale@trafo@to@user@ticks#1#2\to#3{%
+ \pgfplots@transform@csv@list{#1}\to{#3}\with{%
+ \pgfplotscoordmath{float}{parse}{\pgfmathresult}%
+ %\pgfmathfloatparsenumber{\pgfmathresult}%
+ #2{\pgfmathresult}%
+ }%
+}%
+
+% A helper macro which expects a \foreach-list '#1'. applies some transformation '#3' and stores results into a new csv list '#2'.
+% '#3' is some macro. Its input is '\pgfmathresult', its expected output is '\pgfmathresult'
+\long\def\pgfplots@transform@csv@list#1\to#2\with#3{%
+ \let#2=\pgfutil@empty
+ \foreach \pgfplots@loc@TMPb in {#1} {%
+ \let\pgfmathresult=\pgfplots@loc@TMPb
+ #3%
+ \ifx#2\pgfutil@empty
+ \xdef#2{\pgfmathresult}%
+ \else
+ \xdef#2{#2,\pgfmathresult}%
+ \fi
+ }%
+ %
+}%
+
+% Helper method for
+% \pgfplots@apply@data@scale@trafo@to@options@for
+% #1: the ticks ALREADY IN FLOAT FORMAT
+% #2: the trafo macro name
+% #3: the output macro name
+\long\def\pgfplots@apply@data@scale@trafo@to@user@ticks@isfloat#1#2\to#3{%
+ \let#3=\pgfutil@empty
+ \foreach \pgfplots@loc@TMPb in {#1} {%
+ #2{\pgfplots@loc@TMPb}%
+ \ifx#3\pgfutil@empty
+ \xdef#3{\pgfmathresult}%
+ \else
+ \xdef#3{#3,\pgfmathresult}%
+ \fi
+ }%
+ %
+}%
+
+% Adds a further, temporary anchor to every node which will be
+% processed. The anchor will be named '#2'. It is placed such that
+% 1. the node's center is on a line in direction of the inwards normal
+% vector of the #1 ticklabel axis and the 'at' position of the node,
+% 2. the node does not intrude the axis.
+%
+% In effect, one of the node's standard anchors (north, east, ... )
+% will be placed on the line
+% \draw[blue,thick,->] (xticklabel cs:0,0) -- (xticklabel cs:1,0);
+%
+% This command is identical to calling
+% \pgfplotsdeclareborderanchorforaxis{#1}{<three-char-string-of-#1-ticklabel-axis>}{#2}
+%
+% @REMARKS:
+% - it is -by no means- necessary that any ticks or tick labels are
+% drawn or defined for this method.
+% - in fact, tick labels use such an anchor (the 'near #1ticklabel'
+% anchor is defined in this way)
+\def\pgfplotsdeclareborderanchorforticklabelaxis#1#2{%
+ \pgfplotsdeclareborderanchorforaxis{#1}{\pgfplotsticklabelaxisspec{#1}}{#2}%
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.code.tex
new file mode 100644
index 0000000000..743f4545ee
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.code.tex
@@ -0,0 +1,2203 @@
+%
+%
+%
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\newif\ifpgfplots@usefpu
+\pgfkeys{%
+ /pgfplots/use fpu/.is if=pgfplots@usefpu,
+ /pgfplots/use fpu=true,
+}
+
+% only useful inside of \ifx (equals only itsself)
+\def\pgfplots@EOI{\pgfplots@EOI}%
+
+% Produces an \aftergroup statement for each single token in #1.
+%
+% ATTENTION: you *can't* use braces inside of '#1'!
+\def\pgfplotsqaftergroupeach#1{%
+ \pgfplotsqaftergroupeach@#1\pgfplots@EOI
+}
+\def\pgfplotsqaftergroupeach@#1{%
+ \gdef\pgfplots@TMP{#1}%
+ \ifx\pgfplots@TMP\pgfplots@EOI
+ \else
+ \aftergroup#1%
+ \expandafter\pgfplotsqaftergroupeach@
+ \fi
+}
+
+\def\pgfplotsaftergroupcollectinto#1#2\pgfplots@EOI{%
+ \def#1{#2}%
+}%
+
+% Assigns list contents #2 to a list macro #1.
+%
+% The list contents may be provided in one of two formats:
+% a) in the list format 'first\\second\\thirst\\'
+% or
+% b) in the PGF foreach list format 'first,second,third'.
+\def\pgfplots@assign@list#1#2{%
+ \pgfplotslistnew#1{#2}%
+}%
+
+\def\pgfplots@shellescape@lua@eightseven#1{%
+ \pgfplotsutil@directlua{os.execute("\pgfplotsutil@luaescapestring{#1}")}%
+}%
+\def\pgfplots@shellescape#1{%
+ \immediate\write18{#1}%
+}%
+\pgfutil@IfUndefined{directlua}{%
+}{%
+ \pgfutil@IfUndefined{lastsavedimageresourcepages}{%
+ \pgfplots@log3{Found old luatex which supports write18 (shell-escape)}%
+ }{%
+ \pgfplots@log3{Found new luatex: initializing lua commands instead of write18 (shell-escape)}%
+ \let\pgfplots@shellescape=\pgfplots@shellescape@lua@eightseven
+ }%
+}%
+
+% Sets the boolean \ifpgfplots@is@old@list@format to true if and only
+% if the input is a list in the format '{first\\second\\}'.
+%
+%
+% Usage:
+% \pgfplots@check@backwards@compatible@list@format <argument>'\\'\pgfplots@EOI
+% you NEED to append '\\\pgfplots@EOI' at the end.
+\def\pgfplots@check@backwards@compatible@list@format#1\pgfplots@EOI{%
+ \pgfplotslist@check@backslash@list#1\pgfplotslist@EOI
+ \ifpgfplotslist@is@backslash@terminated
+ \pgfplots@is@old@list@formattrue
+ \else
+ \pgfplots@is@old@list@formatfalse
+ \fi
+}%
+
+% Issues an error message if the **LaTeX** package '#1' is not loaded
+% (An error is also raised if the document is not a LaTeX document).
+% #1: the required LaTeX package
+% #2: the feature which requires this package
+\def\pgfplots@assert@LaTeX@package@loaded#1#2{%
+ \pgfutil@IfUndefined{@ifpackageloaded}{%
+ \pgfplots@error{Sorry, #2 only works with LaTeX (it relies on the LaTeX package #1)}%
+ }{%
+ \pgfutil@IfUndefined{ver@#1.sty}% this here has been extracted from ltclass.dtx. \@ifpackageloaded is only usable in preamble.
+ {\pgfplots@error{Sorry, use need \string\usepackage{#1} in your preamble for '#2'}}%
+ {\relax}%
+ }%
+}%
+\def\pgfplots@assert@tikzinternal@exists#1{%
+ \pgfutil@IfUndefined{#1}{%
+ \pgfplots@error{Sorry, pgfplots relies on the existance of the tikz internal macro '#1'.
+ Unfortunately, this does no longer exist ... you will need to get an updated version of pgfplots to fix this problem.}%
+ \expandafter\let\csname #1\endcsname=\pgfutil@empty
+ }{}%
+}%
+
+
+% A future-version compatibility method which checks whether the
+% macro '#2' exists.
+%
+% We assume that '#2' usually contains the value of the tikz key '#1'.
+% Example:
+% /tikz/variable is usually stored into '\tikz@plot@var'.
+%
+% However, this may change in future versions.
+%
+% So, we do the following:
+% 1. check whether '#2' exists, if yet: ok.
+% 2. if not, check whether the value is stored directly into '/tikz/#1'.
+% 3. if not, check whether the value is stored directly into '/pgf/#1'.
+% 4. If everything fails, provide an error message.
+%
+% #1: a tikz key without key prefix (/tikz/ and /pgf/ will be prepended).
+% #2: a macro name WITHOUT backslash.
+% #3: the default value if everything fails.
+\def\pgfplots@gettikzinternal@keyval#1#2#3{%
+ \pgfutil@IfUndefined{#2}{%
+ \pgfkeysifdefined{/tikz/#1}{%
+ \pgfkeysgetvalue{/tikz/#1}\pgfplots@TMP
+ \expandafter\let\csname #1\endcsname=\pgfplots@TMP
+ }{%
+ \pgfkeysifdefined{/pgf/#1}{%
+ \pgfkeysgetvalue{/pgf/#1}\pgfplots@TMP
+ \expandafter\let\csname #1\endcsname=\pgfplots@TMP
+ }{%
+ \expandafter\def\csname #1\endcsname{#3}%
+ {\t@pgfplots@tokc={#3}%
+ \pgfplots@warning{Sorry, could not find value of '/tikz/#1'. Assuming '\the\t@pgfplots@tokc'.}%
+ }%
+ }%
+ }%
+ }{}%
+}%
+
+\def\pgfplots@getcurrent@plothandler#1{%
+ \pgfutil@IfUndefined{tikz@plot@handler}{%
+ \pgfplots@error{Sorry, can't get the current plot handler. It appears that tikz and pgfplots is no longer compatible!? You will need to get a newer version of pgfplots.}%
+ \let#1=\pgfplothandlerlineto
+ }{%
+ \let#1=\tikz@plot@handler
+ }%
+}
+
+
+
+% Converts an arbitrary command (without arguments) to a string in which all characters
+% have category 12.
+%
+% #1: a macro name (which takes no arguments)
+% #2: a macro name which will be assigned to '#1' converted to string.
+%
+% This uses '\meaning#1' hackery.
+\def\pgfplots@command@to@string#1#2{%
+ \expandafter\pgfplots@command@to@string@@\meaning#1\pgfplots@EOI{#2}%
+}%
+\xdef\pgfplots@glob@TMPa{\meaning\pgfutil@empty}%
+\expandafter\def\expandafter\pgfplots@command@to@string@@\pgfplots@glob@TMPa#1\pgfplots@EOI#2{%
+ \def#2{#1}%
+}%
+\def\pgfplotscommandtostring#1#2{\pgfplots@command@to@string{#1}{#2}}%
+
+\begingroup
+\catcode`\|=0
+\catcode`\\=12
+|gdef|pgfplots@backslash@as@other{\}%
+|endgroup
+
+% As \pgfplots@command@to@string, but it works for commands accepting
+% arguments. More precisely, #2 will be a string (!) of the form
+% <argument pattern>{ <body> }
+% such that you can write
+% \def\test #2
+% into a file to restore the original macro. This IGNORES \long
+% (sorry)
+\def\pgfplots@command@with@args@to@string#1#2{%
+ \expandafter\PGFPLOTS@CS@WITH@ARGS@TO@STRING\meaning#1\EOI{#2}%
+}%
+{
+\let\CATCODE=\catcode
+\let\LONG=\long
+\CATCODE`\m=12
+\CATCODE`\a=12
+\CATCODE`\c=12
+\CATCODE`\r=12
+\CATCODE`\o=12
+\CATCODE`\:=12
+\CATCODE`\-=12
+\CATCODE`\>=12
+\LONG\gdef\PGFPLOTS@CS@WITH@ARGS@TO@STRING #1macro:#2->#3\EOI#4{\def#4{#2{#3}}}%
+}%
+
+% Defines \pgfplotsretval to be '#1' but without leading and trailing
+% spaces.
+\def\pgfplotsutil@trim#1{%
+ \pgfkeys@spdef\pgfplotsretval{#1}%
+}%
+
+% Invokes '#2' if the token(s) '#1' are actually are defined control
+% sequence and '#3' if not.
+%
+% This method accepts different values '#1' than \pgfutil@ifundefined.
+% It is indended to autodetect values provided in the user interface
+% (ui),
+% that means '#1' can be anything. But I still like to know whether it
+% is a control sequence.
+%
+% \pgfplotsutil@ifdefinedui{\table} -> yes if \table is defined.
+% \pgfplotsutil@ifdefinedui{\csname abc\endcsname} -> no
+% \pgfplotsutil@ifdefinedui{a_file_name} -> no
+\def\pgfplotsutil@ifdefinedui#1#2#3{%
+ {\toks0={#1}% this construction is necessary to handle '#' characters in '#1'
+ \xdef\pgfplotsutil@@arg@ifdefined{\the\toks0}%
+ }%
+ \pgfplots@command@to@string\pgfplotsutil@@arg@ifdefined\pgfplotsutil@@arg@ifdefined
+ \expandafter\pgfplotsutil@trim\expandafter{\pgfplotsutil@@arg@ifdefined}%
+ \pgfutil@IfUndefined{\pgfplotsretval}{#3}{#2}%
+}%
+% The same as \pgfplotsutil@ifdefinedui but appends the suffix '#2' to
+% '#1' after '#1' has been normalized.
+% It invokes '#3' if '#1#2' is defined and '#4' if not.
+\def\pgfplotsutil@ifdefinedui@withsuffix#1#2#3#4{%
+ {\toks0={#1}%
+ \xdef\pgfplotsutil@@arg@ifdefined{\the\toks0}%
+ }%
+ \pgfplots@command@to@string\pgfplotsutil@@arg@ifdefined\pgfplotsutil@@arg@ifdefined
+ \expandafter\pgfplotsutil@trim\expandafter{\pgfplotsutil@@arg@ifdefined}%
+ \pgfutil@IfUndefined{\pgfplotsretval #2}{#4}{#3}%
+}%
+
+% Writes the command name of '#1' without the leading backslash to
+% macro #2.
+\def\pgfplotsutil@getcommandname#1#2{%
+ \begingroup
+ \escapechar=-1
+ \xdef\pgfplots@glob@TMPa{\string#1}%
+ \endgroup
+ \let#2=\pgfplots@glob@TMPa
+}
+
+{
+\catcode`\%=12
+\gdef\pgfplots@PERCENT@TEXT{%}
+\catcode`\^^I=12
+\gdef\pgfplots@SPACE{ }
+\gdef\pgfplots@TAB{^^I}
+\catcode`\#=12 \gdef\pgfplots@ROUTE{#}}
+
+% Usage:
+% \pgfplots@if{pgfplots@scaled@ticks}{true-code}{false-code}
+%
+% it is to be used if the tex boolean is only known as string, not as
+% macro.
+\def\pgfplots@if#1#2#3{%
+ \csname if#1\endcsname
+ #2%
+ \else
+ #3%
+ \fi
+}%
+
+% Executes '#2' if the number '#1' is zero and '#3' if not.
+% Example:
+% \pgfplotsmath@ifzero{0}{It's zero!}{It's not zero}
+% \pgfplotsmath@ifzero{0.0}{It's zero!}{It's not zero}
+%
+% The argument must be assignable to a TeX dimension as 'pt', but
+% without units.
+\def\pgfplotsmath@ifzero#1#2#3{%
+ \begingroup
+ \pgf@xa=#1pt
+ \ifdim\pgf@xa=0pt
+ \gdef\pgfplots@glob@TMPa{#2}%
+ \else
+ \gdef\pgfplots@glob@TMPa{#3}%
+ \fi
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+% Invokes code `#4' if |#1 - #2| <= #3 and `#5' if not.
+%
+% #1,#2 are dimension (registers or numbers) with unit.
+% #3: absolute thresold (dimen)
+\def\pgfplotsmath@ifapproxequal@dim#1#2#3#4#5{%
+ \begingroup
+ \pgf@xa=#1\relax
+ \pgf@xb=#2\relax
+ \advance\pgf@xa by-\pgf@xb
+ \ifdim\pgf@xa<0pt
+ \multiply\pgf@xa by-1
+ \fi
+ \ifdim\pgf@xa>#3\relax
+ \gdef\pgfplots@glob@TMPa{#5}%
+ \else
+ \gdef\pgfplots@glob@TMPa{#4}%
+ \fi
+ \endgroup
+ \pgfplots@glob@TMPa
+}
+
+\def\pgfplotsmathmin#1#2{%
+ \ifdim#1 pt<#2 pt
+ \edef\pgfmathresult{#1}%
+ \else
+ \edef\pgfmathresult{#2}%
+ \fi
+}%
+\def\pgfplotsmathmax#1#2{%
+ \ifdim#1 pt>#2 pt
+ \edef\pgfmathresult{#1}%
+ \else
+ \edef\pgfmathresult{#2}%
+ \fi
+}%
+\def\pgfplotsmathlessthan#1#2{\ifdim#1pt<#2pt \pgfmathfloatcomparisontrue\else\pgfmathfloatcomparisonfalse\fi}
+
+% Re-define two-argument function for min and max.
+% The pgfmath engine now uses a variable number of arguments.
+\def\pgfplotsmathfloatmax#1#2{%
+ \pgfmathfloatlessthan{#1}{#2}%
+ \ifpgfmathfloatcomparison
+ \edef\pgfmathresult{#2}%
+ \else
+ \edef\pgfmathresult{#1}%
+ \fi
+}
+\def\pgfplotsmathfloatmin#1#2{%
+ \pgfmathfloatlessthan{#1}{#2}%
+ \ifpgfmathfloatcomparison
+ \edef\pgfmathresult{#1}%
+ \else
+ \edef\pgfmathresult{#2}%
+ \fi
+}
+
+% Defines \pgfmathresult to be #1 * 10^{#2}.
+%
+% #1 a macro without unit suffix.
+% #2 an integer number (may be a register)
+\def\pgfplotsmathmultiplypowten@#1#2{%
+ \begingroup
+ \pgf@xa=#1pt
+ \ifnum#2<0
+ \ifcase-#2
+ \or\divide\pgf@xa by10
+ \or\divide\pgf@xa by100
+ \or\divide\pgf@xa by1000
+ \or\divide\pgf@xa by10000
+ \or\divide\pgf@xa by100000
+ \fi
+ \else
+ \ifcase#2
+ \or\multiply\pgf@xa by10
+ \or\multiply\pgf@xa by100
+ \or\multiply\pgf@xa by1000
+ \or\multiply\pgf@xa by10000
+ \or\multiply\pgf@xa by100000
+ \fi
+ \fi
+ \edef\pgfmathresult{\pgf@sys@tonumber{\pgf@xa}}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% defines \pgf@x to be the scalar product between points #1 and #2
+% #1, #2 are pgfpoint commands
+\def\pgfplotsscalarproductofvectors#1#2{%
+ \begingroup
+ \pgf@process{#1}%
+ \edef\pgfplots@scalarprod@a{\pgf@sys@tonumber\pgf@x}%
+ \edef\pgfplots@scalarprod@b{\pgf@sys@tonumber\pgf@y}%
+ \pgf@process{#2}%
+ \pgf@x=\pgfplots@scalarprod@a\pgf@x
+ \advance\pgf@x by\pgfplots@scalarprod@b\pgf@y
+ \global\pgf@x=\pgf@x
+ \endgroup
+}%
+
+% converts a comma-separated list (PGF foreach) to my internal list
+% structure.
+\long\def\pgfplots@foreach@to@list#1\to#2{%
+ \global\pgfplotslistnewempty\pgfplots@glob@TMPa
+ \begingroup
+ \foreach \pgfplots@i in {#1} {%
+ \expandafter\pgfplotslistpushbackglobal\pgfplots@i\to\pgfplots@glob@TMPa
+ }%
+ \endgroup
+ \pgfplotslistcopy\pgfplots@glob@TMPa\to#2\relax
+}
+
+
+% Removes duplicates in a comma separated list and creates a new list
+% into the macro \pgfplotsretval. The list doesn't need to be sorted,
+% but it should not contain too much elements as the runtime for this
+% simple method is quadratic.
+%
+% #1: a CSV list.
+% Assigns \pgfplotsretval
+\def\pgfplotsutil@unify@short@csv@list#1{%
+ \begingroup
+ \def\pgfplotsretval{}%
+ \pgfplotsutilforeachcommasep{#1}\as\pgfplots@unify@cur{%
+ \pgfutil@ifundefined{pgfp@unify@\pgfplots@unify@cur @@@}{%
+ \expandafter\def\csname pgfp@unify@\pgfplots@unify@cur @@@\endcsname{1}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \let\pgfplotsretval=\pgfplots@unify@cur%
+ \else
+ \t@pgfplots@toka=\expandafter{\pgfplotsretval}%
+ \t@pgfplots@tokb=\expandafter{\pgfplots@unify@cur}%
+ \edef\pgfplotsretval{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}%
+ \fi
+ }{}%
+ }%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Simply invokes the code of PGF key #1 with value #2, that means
+% #1#2\pgfeov
+\def\pgfplots@invoke@pgfkeyscode#1#2{%
+ \pgfkeysvalueof{#1}#2\pgfeov
+}
+
+% Usage:
+% \pgfplots@letcsname pgfplots@xtick={pgfplots@kram@x}
+% -> invokes \csname ... \endcsname for both args.
+\def\pgfplots@letcsname#1=#2{%
+ \expandafter\let\expandafter\pgfplots@loc@TMPc\csname #2\endcsname
+ \expandafter\let\csname #1\endcsname=\pgfplots@loc@TMPc
+}%
+
+% Inside of a pgfplots axis, this method (together with
+% \pgfplotsqpointxyz for 3d axes) is THE
+% point method. If you override the mapping to PGF coordinates here,
+% all other \pgfplotspoint* commands should inherit the changes as well.
+\def\pgfplotsqpointxy#1#2{%
+ \global\pgf@x=#1\pgf@xx%
+ \global\advance\pgf@x by #2\pgf@yx%
+ \global\pgf@y=#1\pgf@xy%
+ \global\advance\pgf@y by #2\pgf@yy}
+
+% Inside of a pgfplots axis, this method (together with
+% \pgfplotsqpointxy for 2d axes) is THE
+% point method. If you override the mapping to PGF coordinates here,
+% all other \pgfplotspoint* commands should inherit the changes as well.
+\def\pgfplotsqpointxyz#1#2#3{%
+ \global\pgf@x=#1\pgf@xx%
+ \global\advance\pgf@x by #2\pgf@yx%
+ \global\advance\pgf@x by #3\pgf@zx%
+ \global\pgf@y=#1\pgf@xy%
+ \global\advance\pgf@y by #2\pgf@yy%
+ \global\advance\pgf@y by #3\pgf@zy}
+
+% A "quick" quick variant of \pgfqpointxy which assumes that
+% the X unit vector is ( e_xx,0 )^T and the Y unit vector is ( 0,
+% e_yy)^T.
+%
+% In words, the unit vectors are orthogonal. This is the usual case
+% for two-dimensional plots and shall be optimized.
+\def\pgfplotsqpointxy@orthogonal#1#2{%
+ \global\pgf@x=#1\pgf@xx%
+ \global\pgf@y=#2\pgf@yy
+}
+
+
+% Takes a domain as input and generates a foreach argument which
+% samples from the domain.
+% Writes the result to \pgfplotsretval
+% INPUT:
+% #1:#2 the domain
+% #3: the number of samples
+% OUTPUT:
+% \pgfplotsretval a foreach specification.
+\def\pgfplots@domain@to@foreach#1:#2\relax#3{%
+ \pgfmathparse{#1}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult%
+ \pgfmathparse{#2}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult%
+ \pgfmathparse{\pgfplots@loc@TMPa+(\pgfplots@loc@TMPb-\pgfplots@loc@TMPa)/(#3-1)}%
+ \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfmathresult,...,\pgfplots@loc@TMPb}%
+}
+
+{
+ \catcode`\;=\active
+ \catcode`\:=\active
+ \gdef\pgfplots@activesemicolon{;}%
+ \gdef\pgfplots@activecolon{:}%
+}
+
+% checks whether ';' is active and replaces a sequence of commands
+% accordingly.
+%
+% @see \pgfplots@appendto@activesemicolon@switcher
+\def\pgfplots@checkandpreparefor@active@semicolon{%
+ \ifnum\the\catcode`\;=\active\relax
+ \pgfplots@checkandpreparefor@active@semicolon@
+ \fi
+}%
+\def\pgfplots@checkandpreparefor@active@semicolon@{}%
+
+% Adds all commands '#1' to the sequence of commands which will be
+% issued in case ';' is active.
+\def\pgfplots@appendto@activesemicolon@switcher#1{%
+ \expandafter\def\expandafter\pgfplots@checkandpreparefor@active@semicolon@\expandafter{%
+ \pgfplots@checkandpreparefor@active@semicolon@
+ #1%
+ }%
+}%
+
+% Invokes '#3' for every element in the comma separated list '#1'.
+% during '#3', the macro '#2' will be set to the current list element.
+%
+% In contrast to \foreach of tikz, this processing is NOT scoped by
+% TeX groups. However, it can be nested.
+%
+% Please note that no trimming of white spaces is performed.
+%
+% This is the (accidentally) the same as \pgfplotsforeachentryinCSV.
+\long\def\pgfplotsutilforeachcommasep#1\as#2#3{%
+ \pgfplots@for@reset@break{%
+ \pgfplotsforeachentryinCSVisterminated@loop{#2}{#3}#1,\pgfplots@EOI
+ }%
+}%
+
+% Usage:
+% \pgfplotsforeachentryinCSV{\value}{1,2,3,4.5,6.7,10}{The value is \value\par}
+%
+% The loop is ungrouped.
+%
+% This is the same as \pgfplotsutilforeachcommasep, I must have been
+% sleeping somehow.
+%
+% @see \pgfplotsutilforeachcommasep
+% @see \pgfplotsforeachentryinCSVisterminated
+% @see \pgfplotsforeachungrouped
+% This loop can be nested.
+\long\def\pgfplotsforeachentryinCSV#1#2#3{%
+ \pgfplots@for@reset@break{%
+ \pgfplotsforeachentryinCSVisterminated@loop{#1}{#3}#2,\pgfplots@EOI
+ }%
+}%
+% A variant of \pgfplotsforeachentryinCSV where a trailing comma
+% indicates the end of input.
+% Example:
+%
+% \pgfplotsforeachentryinCSV{\value}{1,2,3,4.5,6.7,10,}{The value is \value\par}
+% ^
+%
+% It is permissable to provide an empty list (without trailing comma)
+%
+% This loop can be nested.
+\long\def\pgfplotsforeachentryinCSVisterminated#1#2#3{%
+ \pgfplots@for@reset@break{%
+ \pgfplotsforeachentryinCSVisterminated@loop{#1}{#3}#2\pgfplots@EOI
+ }%
+}%
+% #1 : the loop macro
+% #2 : the loop BODY
+% #3 : the loop LIST
+% (note the different sequence)
+\long\def\pgfplotsforeachentryinCSVisterminated@loop#1#2{%
+ \pgfutil@ifnextchar\pgfplots@EOI{%
+ \pgfutil@gobble
+ }{%
+ \pgfplotsforeachentryinCSV@next{#1}{#2}%
+ }%
+}%
+\long\def\pgfplotsforeachentryinCSV@next#1#2#3,{%
+ \def#1{#3}%
+ #2\relax
+ \ifpgffor@continue
+ \expandafter\pgfplotsforeachentryinCSVisterminated@loop
+ \else
+ \expandafter\pgfplots@gobble@until@EOI
+ \fi
+ {#1}{#2}%
+}%
+
+
+% Discards any token up to (and including) \relax.
+\def\pgfplots@gobble@until@relax#1\relax{}%
+\def\pgfplots@gobble@until@EOI#1\pgfplots@EOI{}%
+
+% A (simple) replacement for \foreach which
+% 1. does NOT scope the argument
+% 2. allows to use PGF Math routines for loops ( '...' notation)
+% instead of TeX registers.
+%
+% Usage:
+% \pgfplotsforeachungrouped \x in {1,2,3,4,5} {<code>}
+%
+% Some details:
+% 1. If #2 is a UNIFORM SAMPLING RANGE, the algorithm is supposed to be
+% most effective. This is considered to be the case for the syntax
+% \pgfplotsforeachungrouped \x in {1,2,...,8}.
+% 2. If case (1.) is not used, \foreach \x in {#2} {} is invoked to
+% generate a temporary list. Afterwards, this list is invoked without
+% scopes.
+%
+% This loop *can* be nested.
+\def\pgfplotsforeachungrouped#1{%
+ \pgfutil@ifnextchar/{\pgfplotsforeachungrouped@{#1}}{\pgfplotsforeachungrouped@{#1}/{}}%
+}%
+
+% accept both
+% \pgfplotsforeachungrouped\x in{1,...,5}{a}
+% \pgfplotsforeachungrouped\x in {1,...,5}{a}
+\long\def\pgfplotsforeachungrouped@#1/#2in{%
+ \pgfutil@ifnextchar\bgroup{%
+ \pgfplotsforeachungrouped@@{#1}{#2}%
+ }{%
+ \pgfplots@error{Found unexpected characters: expected 'in '.}%
+ }%
+}
+
+\long\def\pgfplots@for@reset@break#1{%
+ \ifpgffor@continue
+ \pgffor@continuetrue
+ #1\relax
+ \pgffor@continuetrue
+ \else
+ \pgffor@continuetrue
+ #1\relax
+ \pgffor@continuefalse
+ \fi
+}%
+
+% Defines \pgfplotsretval to contain a 'domain' argument if '#1' is
+% actually a domain listing. In this case, '\pgfplotsretvalb' will be
+% set to the number of samples.
+%
+% If #1 is no valid domain argument, \pgfplotsretval will be set to
+% empty.
+\def\pgfplotsforeachtodomain#1{%
+ \begingroup
+ \long\def\pgfplotsforeachungroupednonuniform@##1##2##3{%
+ \def\pgfplotsretval{}%
+ \def\pgfplotsretvalb{}%
+ }%
+ \long\def\pgfplotsforeachungroupedslashed@##1/##2##3##4{%
+ \def\pgfplotsretval{}%
+ \def\pgfplotsretvalb{}%
+ }%
+ \long\def\pgfplotsforeachungroupeduniform@##1##2,##3,...,##4\relax##5{%
+ \edef\pgfplotsretval{##2:##4}%
+ \pgfkeys{/pgf/fpu}%
+ \pgfmathparse{##3-##2}%
+ \let\pgfplots@h=\pgfmathresult
+ \pgfmathparse{(##4-##2)/\pgfplots@h + 1}%
+ \pgfmathfloattofixed\pgfmathresult
+ \afterassignment\pgfplotsforeachtodomain@@
+ \c@pgf@counta=\pgfmathresult
+ }%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplotsforeachungrouped \noexpand\x\space in{#1}{}}%
+ \pgfplots@loc@TMPa
+ %
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand\pgfplotsretval{\pgfplotsretval}%
+ \noexpand\def\noexpand\pgfplotsretvalb{\pgfplotsretvalb}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+\def\pgfplotsforeachtodomain@@.#1\relax{%
+ \pgf@xa=0.#1pt %
+ \ifnum\pgf@xa>0.01pt % FIXME : threshold is chosen in a bad way... should be relative to number range!
+ % this is not an integer! We cannot convert it to a domain.
+ \def\pgfplotsretval{}%
+ \def\pgfplotsretvalb{}%
+ \else
+ % ok, it is an integer. Return it as number samples!
+ % \pgfplotsretval already contains the domain.
+ \edef\pgfplotsretvalb{\the\c@pgf@counta}%
+ \fi
+}%
+
+\long\def\pgfplotsforeachungrouped@@#1#2#3#4{%
+ \pgfplots@for@reset@break{%
+ %
+ \def\pgfplots@foreach@loc@TMPa{#2}%
+ \ifx\pgfplots@foreach@loc@TMPa\pgfutil@empty
+ \pgfplotsforeachungrouped@isuniform{#3}%
+ \ifpgfplots@loc@tmp
+ % special handling:
+ % \foreach #1 in {a,b,...,c} can be improved:
+ \pgfplotsforeachungroupeduniform@{#1}#3\relax{#4}%
+ \else
+ % invoke \foreach #1 in {#3} and transport results:
+ \pgfplotsforeachungroupednonuniform@#1{#3}{#4}%
+ \fi
+ \else
+ % invoke \foreach #1/#2 in {#3} and transport results:
+ \pgfplotsforeachungroupedslashed@#1/#2{#3}{#4}%
+ \fi
+ }%
+}
+\let\pgfplots@original@pgfmathadd@=\pgfmathadd@
+
+\long\def\pgfplotsforeachungroupeduniform@#1#2,#3,...,#4\relax#5{%
+ % Compute mesh width!
+ \pgfmathparse{#2}%
+ \let\pgfplots@foreach@loc@TMPa=\pgfmathresult
+ \pgfmathparse{#3}%
+ \let\pgfplots@foreach@loc@TMPb=\pgfmathresult
+ \pgfmathsubtract@{\pgfplots@foreach@loc@TMPb}{\pgfplots@foreach@loc@TMPa}%
+ % Use \pgfmath engine for the loop:
+ % mesh width:
+ \let\pgfplots@foreach@loc@meshwidth=\pgfmathresult
+ \pgfmathparse{0}% invoke the parser - in case the fpu is active.
+ \pgfmathlessthan@{\pgfplots@foreach@loc@meshwidth}{\pgfmathresult}%
+ % the loop will run while ( NOT \pgfplots@foreach@loc@cmp{<cur>}{<last>} )
+ \ifdim\pgfmathresult pt=1pt
+ \def\pgfplots@foreach@loc@cmp{\pgfmathlessthan@}%
+ \else
+ \def\pgfplots@foreach@loc@cmp{\pgfmathgreaterthan@}%
+ \fi
+ %
+ \pgfmathparse{#4 + 0.5*\pgfplots@foreach@loc@meshwidth}%
+ \let\pgfplots@foreach@loc@TMPb=\pgfmathresult
+ %
+ \t@pgfplots@toka={#5}%
+ % to allow nesting without additional TeX groups of
+ % \pgfplotsforeachungroupeduniform, I introduce this loop
+ % structure here which does not need ANY state macro:
+ \edef\pgfplots@foreach@loc@TMPc{%
+ \noexpand\pgfplotsforeachungroupeduniform@loop@mathengine
+ {\expandafter\noexpand\pgfplots@foreach@loc@cmp}% #1= comparison fct
+ {\pgfplots@foreach@loc@TMPa}% #2 =lower limit (ITERATES)
+ {\pgfplots@foreach@loc@TMPb}% #3 = upper limit
+ {\noexpand#1}% #4 = the loop macro name
+ {\pgfplots@foreach@loc@meshwidth}% #5 = h
+ {\the\t@pgfplots@toka}% #6 = the code to invoke
+ {0}% #7 : the loop variable
+ }%
+ \pgfplots@foreach@loc@TMPc
+}%
+
+% This here is much more accurate and does not suffer from the
+% numerical stability issues of the other loop.
+%
+% #1: comparison fct
+% #2: lower limit
+% #3: upper limit
+% #4: the loop macro name
+% #5: h
+% #6: code to invoke
+% #7: the loop variable (number samples)
+\long\def\pgfplotsforeachungroupeduniform@loop@mathengine@precise#1#2#3#4#5#6#7{%
+ \pgflibraryfpuifactive{%
+ \pgfmathfloatparsenumber{#7}%
+ }{%
+ \edef\pgfmathresult{#7}%
+ }%
+ \expandafter\pgfmathmultiply@\expandafter{\pgfmathresult}{#5}%
+ \expandafter\pgfmathadd@\expandafter{\pgfmathresult}{#2}%
+ \let#4=\pgfmathresult
+ #1{#4}{#3}% substitute this by integer arithmetics
+ \ifdim\pgfmathresult pt=0pt %
+ \def\pgfplotsforeach@loc@TMP@{\pgfutil@in@{.0\relax}}%
+ \expandafter\pgfplotsforeach@loc@TMP@\expandafter{#4\relax}%
+ \ifpgfutil@in@
+ % ah - our current loop variable has .0 as suffix.
+ % Strip it.
+ \def\pgfplotsforeach@loc@TMP@##1.0\relax{%
+ \def#4{##1}%
+ }%
+ \expandafter\pgfplotsforeach@loc@TMP@#4\relax
+ \fi
+ #6\relax
+ \def\pgfplotsforeach@loc@TMP@{#7}%
+ \pgfplotsutil@advancestringcounter\pgfplotsforeach@loc@TMP@
+ %
+ \t@pgfplots@tokc={{#1}{#2}{#3}{#4}{#5}{#6}}%
+ % loop!
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplotsforeachungroupeduniform@loop@mathengine
+ \the\t@pgfplots@tokc{\pgfplotsforeach@loc@TMP@}}%
+ \expandafter\pgfplots@loc@TMPa
+ \fi
+}%
+\long\def\pgfplotsforeachungroupeduniform@loop@mathengine@legacy#1#2#3#4#5#6#7{%
+ #1{#2}{#3}%
+ \ifpgffor@continue
+ \ifdim\pgfmathresult pt=0pt
+ \pgfutil@in@{.0\relax}{#2\relax}%
+ \ifpgfutil@in@
+ \def\pgfplotsforeach@loc@TMP##1.0\relax{%
+ \def#4{##1}%
+ }%
+ \pgfplotsforeach@loc@TMP#2\relax
+ \else
+ \def#4{#2}%
+ \fi
+ #6\relax
+ \pgfmathadd@{#2}{#5}%
+ \t@pgfplots@toka={{#1}}%
+ \t@pgfplots@tokb=\expandafter{\pgfmathresult}%
+ \t@pgfplots@tokc={{#3}{#4}{#5}{#6}{--}}%
+ % loop!
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfplotsforeachungroupeduniform@loop@mathengine
+ \the\t@pgfplots@toka
+ {\the\t@pgfplots@tokb}%
+ \the\t@pgfplots@tokc}%
+ \expandafter\expandafter\expandafter\pgfplots@loc@TMPa
+ \fi
+ \fi
+}%
+
+\let\pgfplotsforeachungroupeduniform@loop@mathengine=\pgfplotsforeachungroupeduniform@loop@mathengine@legacy
+
+
+\long\def\pgfplotsforeachungroupednonuniform@#1#2#3{%
+ \pgfplotsapplistXXglobalnewempty
+ \foreach\pgfplots@foreach@loc@TMPa in {#2} {%
+ \expandafter\pgfplotsapplistXXglobalpushback\expandafter{\pgfplots@foreach@loc@TMPa,}%
+ }%
+ \pgfplotsapplistXXgloballet\pgfplots@foreach@loc@TMPa
+ \pgfplotsapplistXXglobalclear
+ \expandafter\pgfplotsforeachentryinCSVisterminated\expandafter\pgfplots@foreach@loc@TMPa\expandafter{\pgfplots@foreach@loc@TMPa}{%
+ \let#1=\pgfplots@foreach@loc@TMPa
+ #3%
+ }%
+}
+\long\def\pgfplotsforeachungroupedslashed@#1/#2#3#4{%
+ \pgfplotsapplistXXglobalnewempty
+ \foreach\pgfplots@foreach@loc@TMPa/\pgfplots@foreach@loc@TMPb in {#3} {%
+ \edef\pgfplots@foreach@loc@TMPa{\pgfplots@foreach@loc@TMPa/\pgfplots@foreach@loc@TMPb}%
+ \expandafter\pgfplotsapplistXXglobalpushback\expandafter{\pgfplots@foreach@loc@TMPa,}%
+ }%
+ \pgfplotsapplistXXgloballet\pgfplots@foreach@loc@TMPa
+ \pgfplotsapplistXXglobalclear
+ \expandafter\pgfplotsforeachentryinCSVisterminated\expandafter\pgfplots@foreach@loc@TMPa\expandafter{\pgfplots@foreach@loc@TMPa}{%
+ \expandafter\pgfplotsforeachungroupedslashed@@\pgfplots@foreach@loc@TMPa\pgfplots@EOI
+ \let#1=\pgfplots@foreach@loc@TMPa
+ \let#2=\pgfplots@foreach@loc@TMPb
+ #4%
+ }%
+}
+\def\pgfplotsforeachungroupedslashed@@#1/#2\pgfplots@EOI{%
+ \def\pgfplots@foreach@loc@TMPa{#1}%
+ \def\pgfplots@foreach@loc@TMPb{#2}%
+}%
+
+% Sets \ifpgfplots@loc@tmp to true if and only if '#1' is of the form
+% #1 = <number1>,<number2>,...,<number3>.
+\def\pgfplotsforeachungrouped@isuniform#1{%
+ \edef\pgfplots@foreach@loc@TMPa{#1}%
+ \expandafter\pgfplotsforeachungrouped@isuniform@\pgfplots@foreach@loc@TMPa,,,,\relax
+}%
+\def\pgfplotsforeachungrouped@isuniform@#1,#2,#3,#4,#5\relax{%
+ \def\pgfplots@foreach@loc@TMPa{#5}%
+ \def\pgfplots@foreach@loc@TMPb{,,,}%
+ \pgfplots@loc@tmpfalse
+ \ifx\pgfplots@foreach@loc@TMPa\pgfplots@foreach@loc@TMPb
+ \def\pgfplots@foreach@loc@TMPa{#3}%
+ \def\pgfplots@foreach@loc@TMPb{...}%
+ \ifx\pgfplots@foreach@loc@TMPa\pgfplots@foreach@loc@TMPb
+ \pgfutil@in@,{#4}%
+ \ifpgfutil@in@
+ \else
+ % ok, we REALLY have a uniform range!
+ \pgfplots@loc@tmptrue
+ \fi
+ \fi
+ \fi
+}%
+
+% A variant of \pgfplotsforeachungrouped ( or \foreach ) which
+% *invokes* with #1 set to the current iterate.
+%
+% Example:
+% \pgfplotsinvokeforeach{a,b,c,d}
+% {\pgfkeys{key #1/.style={otherstyle #1}}}
+% -> will invoke
+% \pgfkeys{key a/.style={otherstyle a}}
+% \pgfkeys{key b/.style={otherstyle b}}
+% \pgfkeys{key c/.style={otherstyle c}}
+% \pgfkeys{key d/.style={otherstyle d}}
+% Note that \pgfplotsforeachungrouped \d in {a,b,c,d}
+% {\pgfkeys{key \d/.style={}}}
+% would not work:
+% \pgfkeys{key a/.style={otherstyle \d}}
+% \pgfkeys{key b/.style={otherstyle \d}}
+% \pgfkeys{key c/.style={otherstyle \d}}
+% \pgfkeys{key d/.style={otherstyle \d}}
+% such an application would need expansion control.
+%
+% #1: the iterates. Can be any argument as you would supply it to
+% \foreach, for example \foreach \x in {1,2,...,10}
+% -> #1 = {1,2,...,10}
+% #2: the loop body. It can contain the parameter string '#1' which
+% will be set to each element in the iterates list in turn.
+%
+% This method is actually just a light-weight adapter around
+% \pgfplotsforeachungrouped.
+\long\def\pgfplotsinvokeforeach#1#2{%
+ \long\def\pgfplotsinvokeforeach@@##1{#2}%
+ \pgfplotsforeachungrouped \pgfplotsinvokeforeach@ in {#1} {%
+ \expandafter\pgfplotsinvokeforeach@@\expandafter{\pgfplotsinvokeforeach@}%
+ }%
+}
+
+% Allows to provide an output routine for
+% \pgfplotsforeachlogarithmicungrouped which changes the number format
+% of \pgfmathresult.
+%
+% Example:
+% \pgfplotsforeachlogarithmicformatresultwith{\pgfmathfloattofixed{\pgfmathresult}}
+%
+% #1: is code which modifies \pgfmathresult.
+\def\pgfplotsforeachlogarithmicformatresultwith#1{%
+ \def\pgfplotsforeachlogarithmicungrouped@finalizeresult{#1}%
+}
+
+% \pgfplotsforeachlogarithmicungrouped[<samples>] \x/\logx in {a:b} {#3}
+% \pgfplotsforeachlogarithmicungrouped[<samples>][<math id>] \x/\logx in {a:b} {#3}
+%
+% samples \x between a and b using a logarithmic scale.
+%
+% During '#3', \x will contain the sample and \logx the logarithm of
+% \x.
+%
+% Both, #1 and #2 will be provided as floating point numbers unless
+% configured otherwise with \pgfplotsforeachlogarithmicsetoutput,
+% see above.
+%
+% Arithmethics will be carried out with the math class '<math id>'
+% (defaults to '\pgfplotsforeachlogarithmicmathid').
+% This macro should expand to something which is usable inside of
+% \pgfplotscoordmath{<math id>}{....}
+% the default is 'float'
+%
+% FIXME : THIS CAN'T BE NESTED YET!
+\def\pgfplotsforeachlogarithmicungrouped[#1]{%
+ \pgfutil@ifnextchar[{%
+ \pgfplotsforeachlogarithmicungrouped@[#1]%
+ }{%
+ \pgfplotsforeachlogarithmicungrouped@[#1][\pgfplotsforeachlogarithmicmathid]%
+ }%
+}%
+\def\pgfplotsforeachlogarithmicungrouped@[#1][#2]#3/#4{\pgfplotsforeachlogarithmicungrouped@@[#1][#2]{#3}{#4}}%
+\long\def\pgfplotsforeachlogarithmicungrouped@@[#1][#2]#3#4in #5#6{%
+ % define
+ % \pgfplots@foreachlog@loc@TMPd = N in fixed point
+ % \pgfplots@foreachlog@loc@TMPc = N-1 in float :
+ \edef\pgfplots@plot@samples@@{#1}%
+ \pgfplotscoordmath{#2}{one}%
+ \let\pgfplots@foreachlog@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{#2}{parsenumber}{\pgfplots@plot@samples@@}%
+ \pgfplotscoordmath{#2}{op}{subtract}{{\pgfmathresult}{\pgfplots@foreachlog@loc@TMPa}}%
+ \let\pgfplots@foreachlog@loc@TMPc=\pgfmathresult
+ %
+ \edef\pgfplots@loc@TMPb{#5}%
+ \expandafter\pgfplotsforeachlogarithmicungrouped@readdomain\pgfplots@loc@TMPb\relax{#2}%
+ \pgfplotscoordmath{#2}{if is bounded}{\pgfplots@foreachlog@loc@TMPb}{%
+ }{%
+ \pgfplotsforeachlogarithmicmath@unbounded@domain{#5}%
+ \pgfplotscoordmath{#2}{parsenumber}{-10000}%
+ \let\pgfplots@foreachlog@loc@TMPb=\pgfmathresult
+ }%
+ \pgfplotscoordmath{#2}{if is bounded}{\pgfplots@foreachlog@loc@TMPa}{%
+ }{%
+ \pgfplotsforeachlogarithmicmath@unbounded@domain{#5}%
+ \pgfplotscoordmath{#2}{parsenumber}{-10000}%
+ \let\pgfplots@foreachlog@loc@TMPa=\pgfmathresult
+ }%
+ % compute mesh width into \pgfplots@foreachlog@loc@TMPc:
+ % \pgfplots@foreachlog@loc@TMPc := h := ( log(xmax) - log(xmin) ) / (N-1)
+ \pgfplotscoordmath{#2}{op}{subtract}{{\pgfplots@foreachlog@loc@TMPb}{\pgfplots@foreachlog@loc@TMPa}}%
+ \pgfplotscoordmath{#2}{op}{divide}{{\pgfmathresult}{\pgfplots@foreachlog@loc@TMPc}}%
+ \let\pgfplots@foreachlog@loc@TMPc=\pgfmathresult
+ %
+ % apply local scoping here:
+ \edef\pgfplots@foreachlog@loc@TMPd{%
+ \noexpand\c@pgf@counta=\the\c@pgf@counta\noexpand\relax
+ }%
+ \long\def\pgfplots@foreachlog@loc@TMPf{#6}%
+ \c@pgf@counta=0
+ \pgfutil@loop
+ \ifnum\c@pgf@counta<\pgfplots@plot@samples@@
+ % compute exp(log(min) + i * h)
+ \edef\pgfplots@loc@TMPa{\the\c@pgf@counta}%
+ \pgfplotscoordmath{#2}{parsenumber}{\pgfplots@loc@TMPa}%
+ \pgfplotscoordmath{#2}{op}{multiply}{{\pgfmathresult}{\pgfplots@foreachlog@loc@TMPc}}%
+ \pgfplotscoordmath{#2}{op}{add}{{\pgfmathresult}{\pgfplots@foreachlog@loc@TMPa}}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotsforeachlogarithmicungrouped@finalizeresult%
+ \let#4=\pgfmathresult
+ \pgfplotscoordmath{#2}{exp}{\pgfplots@loc@TMPa}%
+ \pgfplotsforeachlogarithmicungrouped@finalizeresult%
+ \let#3=\pgfmathresult
+ %
+ % ok, invoke it!
+ % -> store \c@pgf@counta before doing so. We need to scope
+ % manually here.
+ \edef\pgfplots@foreachlog@loc@TMPe{\the\c@pgf@counta}%
+ \pgfplots@foreachlog@loc@TMPf\relax
+ \c@pgf@counta=\pgfplots@foreachlog@loc@TMPe\relax
+ \advance\c@pgf@counta by 1
+ \pgfutil@repeat
+ % restore scoped variables:
+ \pgfplots@foreachlog@loc@TMPd
+}
+
+\def\pgfplotsforeachlogarithmicmath@unbounded@domain#1{%
+ \pgfplots@error{Sorry, the provided domain #1 is unsuitable for logarithmic sampling (applying the log results in unbounded values)}%
+}%
+
+% can be used to convert the number format from float to something
+% else.
+\def\pgfplotsforeachlogarithmicungrouped@finalizeresult{}%
+
+
+\def\pgfplotsforeachlogarithmicmathid{float}
+
+% defines
+% \pgfplots@foreachlog@loc@TMPa := log(firstintervalpt)
+% and
+% \pgfplots@foreachlog@loc@TMPb := log(secondintervalpt)
+\def\pgfplotsforeachlogarithmicungrouped@readdomain#1:#2\relax#3{%
+ \pgfplotscoordmath{default}{parse}{#1}%
+ \pgfplotscoordmath{#3}{log}{\pgfmathresult}%
+ \let\pgfplots@foreachlog@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{default}{parse}{#2}%
+ \pgfplotscoordmath{#3}{log}{\pgfmathresult}%
+ \let\pgfplots@foreachlog@loc@TMPb=\pgfmathresult
+}
+
+% invokes '#2' if #1 expands (\edef) to the empty string or '#3' if not.
+\def\pgfplots@ifempty#1#2#3{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty #2\else #3\fi
+}%
+
+{
+ \catcode`\#=12
+ \catcode`\1=12
+ \gdef\pgfplotsutil@add@to@macro@@one{#1}%
+ \gdef\pgfplotsutil@add@to@macro@@two{#1#2}%
+}
+
+\def\pgfplotsutil@ifmacrodependsononearg#1#2#3{%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfutil@in@{\pgfplotsutil@add@to@macro@@one}{\meaning#1}}%
+ \pgfplots@loc@TMPa
+ \ifpgfutil@in@
+ #2%
+ \else
+ #3%
+ \fi
+}%
+
+\def\pgfplotsutil@ifmacrodependsontwoargs#1#2#3{%
+ \edef\pgfplots@util@add@to@macro@@{\noexpand\pgfutil@in@{\pgfplotsutil@add@to@macro@@two}{\meaning#1}}%
+ \pgfplots@util@add@to@macro@@
+ \ifpgfutil@in@
+ #2%
+ \else
+ #3%
+ \fi
+}%
+
+% Appends '#2' to macro '#1'.
+%
+% #1: a macro which takes either no arguments or exactly one.
+% #2: some token text. May depend on '#1' if #1 is a macro which
+% depends on one arg.
+\def\pgfplotsutil@add@to@macro#1#2{%
+ \pgfplotsutil@ifmacrodependsononearg#1{%
+ \pgfplotsutil@ifmacrodependsontwoargs#1{%
+ \pgfplotsutil@add@to@macro@twoargs{#1}{#2}%
+ }{%
+ \pgfplotsutil@add@to@macro@onearg{#1}{#2}%
+ }%
+ }{%
+ \pgfplotsutil@add@to@macro@noargs{#1}{#2}%
+ }%
+}%
+
+\def\pgfplotsutil@add@to@macro@twoargs#1#2{%
+ \t@pgfplots@tokc=\expandafter{#1{##1}{##2}}%
+ \t@pgfplots@tokb={#2}%
+ \edef\pgfplots@util@add@to@macro@@{\the\t@pgfplots@tokc\the\t@pgfplots@tokb}%
+ \expandafter\def\expandafter#1\expandafter##\expandafter1\expandafter##\expandafter2\expandafter{\pgfplots@util@add@to@macro@@}%
+}
+
+\def\pgfplotsutil@add@to@macro@onearg#1#2{%
+ \t@pgfplots@tokc=\expandafter{#1{##1}}%
+ \t@pgfplots@tokb={#2}%
+ \edef\pgfplots@util@add@to@macro@@{\the\t@pgfplots@tokc\the\t@pgfplots@tokb}%
+ \expandafter\def\expandafter#1\expandafter##\expandafter1\expandafter{\pgfplots@util@add@to@macro@@}%
+}
+
+\def\pgfplotsutil@add@to@macro@noargs#1#2{%
+ \t@pgfplots@tokc=\expandafter{#1}%
+ \t@pgfplots@tokb=\expandafter{#2}%
+ \edef#1{\the\t@pgfplots@tokc\the\t@pgfplots@tokb}%
+}
+\def\pgfplots@logfileopen#1{%
+ \immediate\write-1{PGFPlots: reading {#1}}%
+ \pgfutil@IfUndefined{tikzifexternalizingcurrent}{%
+ % version not up-to-date or external lib not loaded?
+ }{%
+ % adjust the .dep file only if we are externalizing.
+ % Otherwise, it may be overwritten by \pgfplotstableread
+ % commands which are *before* the tikzpicture (and the picture
+ % will be replaced by its graphics)
+ \tikzifexternalizingcurrent{\tikzpicturedependsonfile{#1}}{}%
+ }%
+}%
+
+% Expands #2 using \edef and invokes #1 with the resulting string.
+%
+% DEPRECATED
+% Example:
+% \pgf@xa=7.9pt
+% \pgfplotsutil@edef@invoke\pgfmathexp@{{\pgf@sys@tonumber{\pgf@xa}}}%
+% will invoke
+% \pgfmathexp@{7.9}
+\def\pgfplotsutil@edef@invoke#1#2{%
+ \edef\pgfutil@edef@invoke@{#2}%
+ \expandafter#1\pgfutil@edef@invoke@
+}
+
+% defines \pgfmathresult to be the INTEGER result of (#1 mod #2).
+%
+% \pgfplotsmathmod{2}{4} -> 2
+% \pgfplotsmathmod{9}{5} -> 4
+\def\pgfplotsmathmodint#1#2{%
+ \begingroup
+ \c@pgf@counta=#2\relax
+ \c@pgf@countb=#1\relax
+ \ifnum\c@pgf@counta=2
+ \ifodd\c@pgf@countb
+ \def\pgfmathresult{1}%
+ \else
+ \def\pgfmathresult{0}%
+ \fi
+ \else
+ \c@pgf@countc=\c@pgf@countb
+ \ifnum\c@pgf@counta=0
+ \pgfplots@error{Can't compute \the\c@pgf@countb\space mod \the\c@pgf@counta\space -- this yields division by zero (second argument is zero)!}%
+ \edef\pgfmathresult{#1}%
+ \else
+ \divide\c@pgf@countc by\c@pgf@counta
+ \multiply\c@pgf@countc by\c@pgf@counta
+ \advance\c@pgf@countb by-\c@pgf@countc
+ \edef\pgfmathresult{\the\c@pgf@countb}%
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% Advances a number stored in a macro and writes the result back into
+% the macro.
+% #1 is a macro containing a number.
+\def\pgfplotsutil@advancestringcounter#1{%
+ \begingroup
+ \c@pgf@counta=#1\relax
+ \advance\c@pgf@counta by1
+ \edef#1{\the\c@pgf@counta}%
+ \pgfmath@smuggleone#1%
+ \endgroup
+}%
+\def\pgfplotsutil@advancestringcounter@global#1{%
+ \begingroup
+ \c@pgf@counta=#1\relax
+ \advance\c@pgf@counta by1
+ \xdef#1{\the\c@pgf@counta}%
+ \endgroup
+}%
+
+\newif\ifpgfplotsloopcontinue
+
+% A loop construct which invokes '#1' and continues the loop if the
+% boolean \ifpgfplotsloopcontinue is true and stops if it is false.
+%
+% #1: a statement which is expected to set \ifpgfplotsloopcontinue
+% #2: the loop body.
+\def\pgfplotsloop#1#2{%
+ #1\relax
+ \ifpgfplotsloopcontinue
+ #2\relax
+ \def\pgfplotsloop@{\pgfplotsloop{#1}{#2}}%
+ \expandafter\pgfplotsloop@
+ \fi
+}%
+
+% String comparison of '#1' and '#2'.
+% Defines
+% \pgfplotsretval=0 if #1 == #2
+% \pgfplotsretval=1 if #1 < #2
+% \pgfplotsretval=2 if #1 > #2
+\def\pgfplotsutilstrcmp#1#2{%
+ \begingroup
+ \def\pgfplots@strcmp@arga{#1}%
+ \pgfplots@command@to@string\pgfplots@strcmp@arga\pgfplots@strcmp@arga
+ \def\pgfplots@strcmp@argb{#2}%
+ \pgfplots@command@to@string\pgfplots@strcmp@argb\pgfplots@strcmp@argb
+ %
+ %
+ \def\pgfplotsretval{0}%
+ %
+ \pgfplotsloop{%
+ \if0\pgfplotsretval
+ % get next token of arga:
+ \expandafter\pgfplotsutilstrcmp@popfront\pgfplots@strcmp@arga\relax\relax
+ \let\pgfplots@strcmp@arga=\pgfplots@strcmp@rest
+ \let\pgfplots@strcmp@arga@=\pgfplots@strcmp@cur
+ %
+ % get next token of argb:
+ \expandafter\pgfplotsutilstrcmp@popfront\pgfplots@strcmp@argb\relax\relax
+ \let\pgfplots@strcmp@argb=\pgfplots@strcmp@rest
+ \let\pgfplots@strcmp@argb@=\pgfplots@strcmp@cur
+ %
+ % if one of them is empty: set retval and break loop.
+ \ifx\pgfplots@strcmp@arga@\pgfplotsutilstrcmp@relaxtext
+ \ifx\pgfplots@strcmp@argb@\pgfplotsutilstrcmp@relaxtext
+ \else
+ \def\pgfplotsretval{1}%
+ \fi
+ \pgfplotsloopcontinuefalse
+ \else
+ \ifx\pgfplots@strcmp@argb@\pgfplotsutilstrcmp@relaxtext
+ \def\pgfplotsretval{2}%
+ \pgfplotsloopcontinuefalse
+ \else
+ \pgfplotsloopcontinuetrue
+ \fi
+ \fi
+ \else
+ \pgfplotsloopcontinuefalse
+ \fi
+ }{%
+ %
+ \ifnum\expandafter`\pgfplots@strcmp@arga@<\expandafter`\pgfplots@strcmp@argb@
+ \def\pgfplotsretval{1}%
+ \let\pgfplots@strcmp@arga=\pgfutil@empty
+ \else
+ \ifnum\expandafter`\pgfplots@strcmp@arga@>\expandafter`\pgfplots@strcmp@argb@
+ \def\pgfplotsretval{2}%
+ \let\pgfplots@strcmp@arga=\pgfutil@empty
+ \fi
+ \fi
+ }%
+ %
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsutilstrcmp@relaxtext{\relax}%
+\def\pgfplotsutilstrcmp@popfront#1#2\relax{%
+ \def\pgfplots@strcmp@cur{#1}%
+ \def\pgfplots@strcmp@rest{#2}%
+}%
+
+% Takes two dimensional cartesian coordinates #1,#2 and
+% defines the macros #3 and #4 to contain the associated polar
+% coordinates.
+%
+% #1: x
+% #2: y
+% #3: a macro which will be filled with the angle (in degrees)
+% #4: a macro which will be filled with the radius
+\def\pgfplotsmathcarttopol#1#2#3#4{%
+ \pgfplotsmathcarttopol@{#1}{#2}{#3}{#4}{default}%
+}%
+\def\pgfplotsmathcarttopolbasic#1#2#3#4{%
+ \pgfplotsmathcarttopol@{#1}{#2}{#3}{#4}{pgfbasic}%
+}%
+% #5: the math engine to use (\pgfplotscoordmath argument)
+\def\pgfplotsmathcarttopol@#1#2#3#4#5{%
+ \begingroup
+ \pgfplotscoordmath{#5}{parsenumber}{#1}%
+ \let\pgfplots@x=\pgfmathresult
+ \pgfplotscoordmath{#5}{parsenumber}{#2}%
+ \let\pgfplots@y=\pgfmathresult
+ \pgfplotscoordmath{#5}{op}{veclen}{{\pgfplots@x}{\pgfplots@y}}%
+ \let\pgfplots@r=\pgfmathresult
+ \pgfplotscoordmath{#5}{op}{atan2}{{\pgfplots@y}{\pgfplots@x}}%
+ \let\pgfplots@deg=\pgfmathresult
+ \xdef\pgfplots@glob@TMPa{\noexpand\def\noexpand#3{\pgfplots@deg}\noexpand\def\noexpand#4{\pgfplots@r}}%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+% Takes two dimensional polar coordinates #1,#2 and
+% defines the macros #3 and #4 to contain the associated cartesian
+% coordinates.
+%
+% #1: angle (in degrees)
+% #2: radius
+% #3: a macro which will be filled with the x value
+% #4: a macro which will be filled with the y value
+\def\pgfplotsmathpoltocart#1#2#3#4{%
+ \pgfplotsmathpoltocart@{#1}{#2}{#3}{#4}{default}%
+}%
+\def\pgfplotsmathpoltocartbasic#1#2#3#4{%
+ \pgfplotsmathpoltocart@{#1}{#2}{#3}{#4}{pgfbasic}%
+}%
+% #5: the math engine to use (\pgfplotscoordmath argument)
+\def\pgfplotsmathpoltocart@#1#2#3#4#5{%
+ \begingroup
+ \pgfplotscoordmath{#5}{parsenumber}{#1}%
+ \let\pgfplots@deg=\pgfmathresult
+ \pgfplotscoordmath{#5}{parsenumber}{#2}%
+ \let\pgfplots@r=\pgfmathresult
+ \pgfplotscoordmath{#5}{op}{sin}{{\pgfplots@deg}}%
+ \pgfplotscoordmath{#5}{op}{multiply}{{\pgfplots@r}{\pgfmathresult}}%
+ \let\pgfplots@y=\pgfmathresult
+ \pgfplotscoordmath{#5}{op}{cos}{{\pgfplots@deg}}%
+ \pgfplotscoordmath{#5}{op}{multiply}{{\pgfplots@r}{\pgfmathresult}}%
+ \let\pgfplots@x=\pgfmathresult
+ \xdef\pgfplots@glob@TMPa{\noexpand\def\noexpand#3{\pgfplots@x}\noexpand\def\noexpand#4{\pgfplots@y}}%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+
+
+\pgfutil@IfUndefined{pgfmathdeclarefunction}{%
+ % BACKWARDS COMPATIBILITY: We have PGF 2.00 :
+ \def\pgfplotsmathdeclarepseudoconstant#1#2{%
+ \t@pgfplots@toka=\expandafter{\csname pgfmath#1@\endcsname}%
+ \t@pgfplots@tokb={\pgfmath@postfunction}%
+ \expandafter\edef\csname pgfmath@parsefunction@#1\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}%
+ \expandafter\edef\csname pgfmath#1\endcsname{\the\t@pgfplots@toka}%
+ \expandafter\def\csname pgfmath#1@\endcsname{#2}%
+ }%
+ \let\pgfplotsmathredeclarepseudoconstant=\pgfplotsmathdeclarepseudoconstant
+}{%
+ \def\pgfplotsmathdeclarepseudoconstant#1#2{%
+ \pgfmathdeclarefunction*{#1}{0}{#2}%
+ }%
+ \def\pgfplotsmathredeclarepseudoconstant#1#2{%
+ \pgfmathredeclarefunction{#1}{#2}%
+ }%
+}%
+
+\def\pgfplotsmathfloatln@#1{%
+ \pgfmathfloatln@{#1}%
+}
+
+% Defines a macro which computes ln(x)/ln(#2) in float.
+%
+% #1: a macro name without backslash
+% #2: the log base as fixed point number. Maybe the empty string in
+% which case the natural log is used.
+%
+% It will define the macros:
+% <macro>##1 -> calls \pgfmathfloatparsenumber and then the '@' variant:
+% <macro>@##1 -> expects and returns result in float
+% <macro>@tofixed##1 -> expects result in float, returns it in fixed (or an empty string)
+% <macro>inv@##1 -> the inverse (exponential) function, expects float, returns float
+% %
+% <macro>logbase -> the basis as number
+% <macro>logofbasefixed -> log(#2)
+% <macro>invlogofbasefixed -> 1/log(#2)
+% <macro>logofbasefloat -> log(#2) in float
+% <macro>invlogofbasefloat -> 1/log(#2) in float
+\def\pgfplotsmathdefinemacrolnbase#1#2{%
+ \expandafter\edef\csname #1logbase\endcsname{#2}%
+ \expandafter\ifx\csname #1logbase\endcsname\pgfutil@empty
+ \expandafter\edef\csname #1logbase\endcsname{2.718281828459}%
+ \expandafter\def\csname #1logofbasefixed\endcsname{1}%
+ \expandafter\def\csname #1invlogofbasefixed\endcsname{1}%
+ \else
+ \pgfmathlog@{\csname #1logbase\endcsname}%
+ \expandafter\let\csname #1logofbasefixed\endcsname\pgfmathresult%
+ \expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}%
+ \expandafter\let\csname #1invlogofbasefixed\endcsname\pgfmathresult%
+ \fi
+ %
+ \pgfmathfloatparsenumber{\csname #1logofbasefixed\endcsname}%
+ \expandafter\let\csname #1logofbasefloat\endcsname\pgfmathresult%
+ \pgfmathfloatparsenumber{\csname #1invlogofbasefixed\endcsname}%
+ \expandafter\let\csname #1invlogofbasefloat\endcsname\pgfmathresult%
+ %
+ \expandafter\def\csname #1@tofixed\endcsname##1{%
+ \pgfmathlog@float{##1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \expandafter\pgfmath@basic@multiply@\expandafter
+ {\pgfmathresult}%
+ {\csname #1invlogofbasefixed\endcsname}%
+ \fi
+ }%
+ \expandafter\def\csname #1@\endcsname##1{%
+ \expandafter\csname #1@tofixed\endcsname{##1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \pgfmathfloatcreate{3}{0.0}{0}%
+ \else
+ \pgfmathfloatparsenumber{\pgfmathresult}%
+ \fi
+ }%
+ \expandafter\def\csname #1\endcsname##1{%
+ \pgfmathfloatparsenumber{##1}%
+ \csname #1@\endcsname{\pgfmathresult}%
+ }%
+ %
+ \expandafter\def\csname #1inv@\endcsname##1{%
+ \expandafter\pgfmathfloatmultiply@\expandafter{##1}{\csname #1logofbasefloat\endcsname}%
+ \pgfmathfloatexp@{\pgfmathresult}%
+ }%
+}%
+
+% Tests if string '#2' starts with pattern '#1'.
+%
+% If so, it executes #3 and defines \pgfplotsretval to contain the
+% suffix which is not equal to #1. Otherwise it executes #4.
+\def\pgfplotsutilifstartswith#1#2#3#4{%
+ \def\pgfplotsutilifstartswith@ ##1#1##2\pgfplots@EOI{%
+ \def\pgfplotsutil@tmp{##1}%
+ \ifx\pgfplotsutil@tmp\pgfutil@empty
+ % Ah - a hit!
+ %
+ % define \pgfplotsretval to be the suffix...
+ \def\pgfplotsutil@tmp#1####1\pgfplots@EOI{%
+ \def\pgfplotsretval{####1}%
+ }%
+ \pgfplotsutil@tmp#2\pgfplots@EOI
+ %
+ % ... and execute the <true> code:
+ #3\relax
+ \else
+ % hm. No such prefix.
+ #4\relax
+ \fi
+ }%
+ \pgfplotsutilifstartswith@#2--#1\pgfplots@EOI
+}%
+
+% Usage:
+% \pgfplotsutilstrreplace{<token>}{<replacement>}{<string>}
+%
+% -> will assign the modified string into \pgfplotsretval.
+%
+% #1: the string to search (one or more tokens)
+% #2: zero, one or more tokens which will be inserted instead of '#1'.
+% #3: the string to search in
+\long\def\pgfplotsutilstrreplace#1#2#3{%
+ \def\pgfplotsretval{}%
+ \long\def\pgfplotsutil@search@and@replace@@##1#1##2\pgfplots@EOI{%
+ \expandafter\def\expandafter\pgfplotsretval\expandafter{\pgfplotsretval ##1#2}%
+ \pgfplotsutil@search@and@replace@loop{#1}{##2}%
+ }%
+ \pgfplotsutil@search@and@replace@loop{#1}{#3}%
+}
+\long\def\pgfplotsutil@search@and@replace@loop#1#2{%
+ \pgfutil@in@{#1}{#2}%
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPa{\pgfplotsutil@search@and@replace@@ #2\pgfplots@EOI}%
+ \else
+ \expandafter\def\expandafter\pgfplotsretval\expandafter{\pgfplotsretval #2}%
+ \let\pgfplots@loc@TMPa=\relax
+ \fi
+ \pgfplots@loc@TMPa
+}%
+
+% strcmp: invokes #3 if #1=#2 (top level expansion only) and it
+% invokes #4 if #1!=#2.
+\long\def\pgfplotsutilifstringequal#1#2#3#4{%
+ \def\pgfplotsifstringequal@{#1}%
+ \def\pgfplotsifstringequal@@{#2}%
+ \ifx\pgfplotsifstringequal@\pgfplotsifstringequal@@ #3\else #4\fi
+}%
+
+% Checks if the token sequence #1 (unexpanded) contains a macro and
+% invokes #2 if so and #3 if not.
+\def\pgfplotsutilifcontainsmacro#1#2#3{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfutil@in@{\pgfplots@backslash@as@other}{\pgfplots@loc@TMPa}}%
+ \pgfplots@loc@TMPa
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPa{#2}%
+ \else
+ \def\pgfplots@loc@TMPa{#3}%
+ \fi
+ \pgfplots@loc@TMPa
+}%
+
+% this command is in pgfplotscore.code.tex:
+% \pgfplotsiffileexists
+
+% EXPERIMENTAL OPTIMIZATION:
+\let\pgfmathparsex@orig=\pgfmathparse
+\def\pgfmathparsex#1{%
+ \begingroup
+ \message{WORKING ON #1...}%
+ \tracingmacros=2 \tracingcommands=2
+ \let\pgfmath@parse@@@operator\relax
+ \let\pgfmath@parse@@operator\relax
+ \let\pgfmath@parse@operator\relax
+ \let\pgfmath@stack@push@operand\pgfutil@gobble
+ \let\pgfmath@base=\pgfmath@empty
+ \let\pgfmath@number=\pgfmath@empty
+ \let\pgfmath@parse@number@failed=\relax
+ \edef\pgfmath@expression{#1}%
+ \expandafter\pgfmathparsex@first\pgfmath@expression\pgfmathparsex@EOI%
+ \if1\pgfmathparsex@recover@
+ \xdef\pgfmathparsex@@{\noexpand\pgfmathparsex@orig{\pgfmath@expression}}%
+ \else
+ \xdef\pgfmathparsex@@{\noexpand\def\noexpand\pgfmathresult{\pgfmathresult}}%
+ \fi
+ \endgroup
+ \pgfmathparsex@@
+}%
+\def\pgfmathparsex@first#1#2\pgfmathparsex@EOI{%
+ \def\pgfmath@token@next{#1}%
+ \pgfmath@parse@number{#2}%
+}%
+\def\pgfmathparsex@recover{\def\pgfmathparsex@recover@{1}}%
+\def\pgfmathparsex@recover@{0}%
+
+
+% compares YYYY-MM-DD < YYYY-MM-DD
+%
+% \pgfplotsutilifdatelessthan 2010-01-01\cmp 2011-01-01\relax{<true>}{<false>}
+\long\def\pgfplotsutilifdatelessthan#1-#2-#3\cmp #4-#5-#6\relax#7#8{%
+ \long\def\pgfplotsutilifdatelessthan@true{#7}%
+ \long\def\pgfplotsutilifdatelessthan@false{#8}%
+ \ifnum#1<#4\relax
+ \pgfplotsutilifdatelessthan@true
+ \else
+ \ifnum#1>#4\relax
+ \pgfplotsutilifdatelessthan@false
+ \else
+ \ifnum#2<#5\relax
+ \pgfplotsutilifdatelessthan@true
+ \else
+ \ifnum#2>#5\relax
+ \pgfplotsutilifdatelessthan@false
+ \else
+ \ifnum#3<#6\relax
+ \pgfplotsutilifdatelessthan@true
+ \else
+ \pgfplotsutilifdatelessthan@false
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+\long\def\pgfplotsutilifdategreaterthan#1-#2-#3\cmp #4-#5-#6\relax#7#8{%
+ \long\def\pgfplotsutilifdatelessthan@true{#7}%
+ \long\def\pgfplotsutilifdatelessthan@false{#8}%
+ \ifnum#1>#4\relax
+ \pgfplotsutilifdatelessthan@true
+ \else
+ \ifnum#1<#4\relax
+ \pgfplotsutilifdatelessthan@false
+ \else
+ \ifnum#2>#5\relax
+ \pgfplotsutilifdatelessthan@true
+ \else
+ \ifnum#2<#5\relax
+ \pgfplotsutilifdatelessthan@false
+ \else
+ \ifnum#3>#6\relax
+ \pgfplotsutilifdatelessthan@true
+ \else
+ \pgfplotsutilifdatelessthan@false
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}%
+\pgfkeys{%
+ % /pgfplots/iflessthan{#1}{#2}{#3}{#4}:
+ % #1: arg1 (a macro containing the first argument)
+ % #2: arg2 (a macro containing the second argument)
+ % #3: code to invoke in case arg1<arg2
+ % #4: code to invoke in case arg1>=arg2
+ % the iflessthan method will be invoked within local scopes.
+ /pgfplots/fixed </.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifdim##1pt<##2pt\relax##3\else ##4\fi},%
+ },
+ /pgfplots/fixed <,
+ /pgfplots/fixed >/.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifdim##1pt>##2pt\relax##3\else ##4\fi},%
+ },
+ /pgfplots/int </.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifnum##1<##2\relax##3\else ##4\fi},%
+ },
+ /pgfplots/int >/.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifnum##1>##2\relax##3\else ##4\fi},%
+ },
+ /pgfplots/float </.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{%
+ \pgfmathfloatparsenumber{##1}%
+ \let\pgfplots@iflt@arga=\pgfmathresult
+ %
+ \pgfmathfloatparsenumber{##2}%
+ \let\pgfplots@iflt@argb=\pgfmathresult
+ %
+ \pgfmathfloatlessthan@{\pgfplots@iflt@arga}{\pgfplots@iflt@argb}%
+ \ifpgfmathfloatcomparison
+ ##3%
+ \else
+ ##4%
+ \fi
+ }%
+ },%
+ /pgfplots/float >/.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{%
+ \pgfmathfloatparsenumber{##1}%
+ \let\pgfplots@iflt@arga=\pgfmathresult
+ %
+ \pgfmathfloatparsenumber{##2}%
+ \let\pgfplots@iflt@argb=\pgfmathresult
+ %
+ \pgfmathfloatgreaterthan@{\pgfplots@iflt@arga}{\pgfplots@iflt@argb}%
+ \ifpgfmathfloatcomparison
+ ##3%
+ \else
+ ##4%
+ \fi
+ }%
+ },%
+ %
+ % compares YYYY-MM-DD < YYYY-MM-DD
+ /pgfplots/date </.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{%
+ \edef\pgfplotsarray@ltdate{##1\noexpand\cmp ##2}%
+ \expandafter\pgfplotsutilifdatelessthan\pgfplotsarray@ltdate\relax{##3}{##4}%
+ }%
+ },%
+ /pgfplots/date >/.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{%
+ \edef\pgfplotsarray@ltdate{##1\noexpand\cmp ##2}%
+ \expandafter\pgfplotsutilifdategreaterthan\pgfplotsarray@ltdate\relax{##3}{##4}%
+ }%
+ },%
+ %
+ /pgfplots/string </.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{%
+ \t@pgfplots@toka=\expandafter{##1}%
+ \t@pgfplots@tokb=\expandafter{##2}%
+ \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@toka}{\the\t@pgfplots@tokb}}%
+ \expandafter\pgfplotsutilstrcmp\pgfplots@loc@TMPa
+ \if1\pgfplotsretval ##3\else ##4\fi
+ }%
+ },%
+ /pgfplots/string >/.style={%
+ /pgfplots/iflessthan/.code args={##1##2##3##4}{%
+ \t@pgfplots@toka=\expandafter{##1}%
+ \t@pgfplots@tokb=\expandafter{##2}%
+ \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@toka}{\the\t@pgfplots@tokb}}%
+ \expandafter\pgfplotsutilstrcmp\pgfplots@loc@TMPa
+ \if2\pgfplotsretval ##3\else ##4\fi
+ }%
+ },%
+}
+
+% defines \pgfplotsretval to be
+%
+% \ifpgfpicture #1\else #2\fi
+%
+% and handles the '/pgfplots/invoke before crossref tikzpicture' key.
+%
+% #1 first argument to \ifpgfpicture
+% #2 second argument to \ifpgfpicture
+\def\pgfplots@assemble@ref@picture#1#2{%
+ \begingroup
+ \pgfkeysgetvalue{/pgfplots/invoke before crossref tikzpicture}\pgfplots@loc@TMPa
+ \pgfkeysgetvalue{/pgfplots/invoke after crossref tikzpicture}\pgfplots@loc@TMPb
+ \toks0={#1}%
+ \toks1=\expandafter{\pgfplots@loc@TMPa}%
+ \toks2={#2}%
+ \toks3=\expandafter{\pgfplots@loc@TMPb}%
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\ifpgfpicture
+ \the\toks0 %
+ \noexpand\else
+ \the\toks1
+ \the\toks2
+ \the\toks3
+ \noexpand\fi
+ }%
+ \endgroup
+ \let\pgfplotsretval=\pgfplots@glob@TMPa
+}%
+
+\def\pgfplots@auxwrite@latex#1{%
+ \if@filesw
+ \immediate\write\@auxout{#1}%
+ \fi
+}%
+\pgfutil@IfUndefined{if@filesw}{%
+ \def\pgfplots@auxwrite#1{}%
+}{%
+ \let\pgfplots@auxwrite=\pgfplots@auxwrite@latex
+}%
+
+% sorts three elements.
+%
+% #1,#2,#3 are three macros containing the input.
+% On output, these macros are redefined to represent the sorted range.
+% The values of these macros must be a <dimen>, followed by anything
+% else (but no \relax please)
+%
+% Example:
+% \def\A{10pt furthervalues}
+% \def\B{4pt value of b}
+% \def\C{1pt value of c}
+% \pgfplotsutilsortthree\A\B\C
+% ->
+% \A={1pt value of c}
+% \B={4pt value of b}
+% \C={10pt furthervalues}
+%
+% It uses insertion sort.
+\def\pgfplotsutilsortthree#1#2#3{%
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#2\relax
+ \ifdim\pgf@xa>\pgf@xb
+ \let\pgfplots@loc@TMPa=#2%
+ \let#2=#1%
+ \let#1=\pgfplots@loc@TMPa%
+ \fi
+ % first two are sorted.
+ %
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#2\relax
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#3\relax
+ \let\pgfplots@loc@TMPa=#3%
+ \ifdim\pgf@xa>\pgf@xb
+ \let#3=#2%
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax
+ \ifdim\pgf@xa>\pgf@xb
+ \let#2=#1%
+ \let#1=\pgfplots@loc@TMPa%
+ \else
+ \let#2=\pgfplots@loc@TMPa%
+ \fi
+ \fi
+ % ok.
+}%
+
+% Like \pgfplotsutilsortthree, but for four elements (of the same
+% form, see \pgfplotsutilsortthree).
+%
+% It uses insertion sort.
+\def\pgfplotsutilsortfour#1#2#3#4{%
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#2\relax
+ \ifdim\pgf@xa>\pgf@xb
+ \let\pgfplots@loc@TMPa=#2%
+ \let#2=#1%
+ \let#1=\pgfplots@loc@TMPa%
+ \fi
+ % first two are sorted.
+ %
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#2\relax
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#3\relax
+ \let\pgfplots@loc@TMPa=#3%
+ \ifdim\pgf@xa>\pgf@xb
+ \let#3=#2%
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax
+ \ifdim\pgf@xa>\pgf@xb
+ \let#2=#1%
+ \let#1=\pgfplots@loc@TMPa%
+ \else
+ \let#2=\pgfplots@loc@TMPa%
+ \fi
+ \fi
+ % ok, first three are sorted.
+ %
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#3\relax
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#4\relax
+ \let\pgfplots@loc@TMPa=#4%
+ \ifdim\pgf@xa>\pgf@xb
+ \let#4=#3%
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#2\relax
+ \ifdim\pgf@xa>\pgf@xb
+ \let#3=#2%
+ \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax
+ \ifdim\pgf@xa>\pgf@xb
+ \let#2=#1%
+ \let#1=\pgfplots@loc@TMPa%
+ \else
+ \let#2=\pgfplots@loc@TMPa%
+ \fi
+ \else
+ \let#3=\pgfplots@loc@TMPa%
+ \fi
+ \fi
+ % ok, first four are sorted.
+}%
+
+% A variant of \pgfutil@ifnextchar which allows the '#' character
+% inside of either '#2' or '#3'.
+%
+% It is slightly more expensive and relies on \t@pgfplots@tokc
+\long\def\pgfplotsutil@ifnextchar#1#2#3{%
+ \let\pgfplotsutil@reserved@d=#1%
+ \t@pgfplots@tokc={#2}%
+ \edef\pgfplotsutil@reserved@a{\the\t@pgfplots@tokc}%
+ \t@pgfplots@tokc={#3}%
+ \def\pgfplotsutil@reserved@b{\the\t@pgfplots@tokc}%
+ \futurelet\pgfplotsutil@let@token\pgfplotsutil@ifnch}
+\def\pgfplotsutil@ifnch{%
+ \ifx\pgfplotsutil@let@token\pgfplotsutil@sptoken
+ \let\pgfplotsutil@reserved@c\pgfplotsutil@xifnch
+ \else
+ \ifx\pgfplotsutil@let@token\pgfplotsutil@reserved@d
+ \let\pgfplotsutil@reserved@c\pgfplotsutil@reserved@a
+ \else
+ \let\pgfplotsutil@reserved@c\pgfplotsutil@reserved@b
+ \fi
+ \fi
+ \pgfplotsutil@reserved@c}
+{%
+ \def\:{\global\let\pgfplotsutil@sptoken= } \:
+ \def\:{\pgfplotsutil@xifnch} \expandafter\gdef\: {\futurelet\pgfplotsutil@let@token\pgfplotsutil@ifnch}
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% basic 3d linear algebra utils.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Converts a 3d vectors to string.
+% #1: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain the result vector.
+% #3: the argument for \pgfplotscoordmath (such as 'default')
+%
+\def\pgfplotsmathvectortostring#1#2{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsmathvectorcompwiseop@unary\pgfplots@loc@TMPa\pgfplots@EOI{#2}{{tostring}}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Reads a 3d vector's coordinates.
+% #1: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain the result vector.
+% #2: the argument for \pgfplotscoordmath (such as 'default')
+%
+% Example:
+% \pgfplotsmathvectorfromstring{1,4,5}{default}
+% will parse each component
+\def\pgfplotsmathvectorfromstring#1#2{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsmathvectorcompwiseop@unary\pgfplots@loc@TMPa\pgfplots@EOI{#2}{{parsenumber}}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Takes two 3d vectors and subtracts them.
+% #1: a vector which expands to the form 'x,y,z'
+% #2: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain the difference vector.
+% #3: the argument for \pgfplotscoordmath (such as 'default')
+%
+\def\pgfplotsmathvectorsubtract#1#2#3{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \expandafter\pgfplotsmathvectorcompwiseop@binary\pgfplots@loc@TMPa\pgfplots@EOI{#3}{subtract}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsmathvectorcompwiseop@binary#1,#2,#3:#4,#5,#6\pgfplots@EOI#7#8{%
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ \def\Bx{#4}%
+ \def\By{#5}%
+ \def\Bz{#6}%
+ \pgfplotscoordmath{#7}{op}{#8}{{\Ax}{\Bx}}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{#8}{{\Ay}{\By}}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{#8}{{\Az}{\Bz}}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc}%
+}%
+
+% #5: an operation ENCLOSED IN BRACES!
+% like '{tostring}' or '{op}{<someunaryop>}'
+\def\pgfplotsmathvectorcompwiseop@unary#1,#2,#3\pgfplots@EOI#4#5{%
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ \pgfplotscoordmath{#4}#5{\Ax}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{#4}#5{\Ay}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{#4}#5{\Az}%
+ \let\pgfplots@loc@TMPc=\pgfmathresult
+ \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc}%
+}%
+
+% Takes two 3d vectors and adds them.
+% #1: a vector which expands to the form 'x,y,z'
+% #2: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain the added vector.
+% #3: the argument for \pgfplotscoordmath (such as 'default')
+%
+\def\pgfplotsmathvectoradd#1#2#3{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \expandafter\pgfplotsmathvectorcompwiseop@binary\pgfplots@loc@TMPa\pgfplots@EOI{#3}{add}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Takes two 3d vectors and applies a component-wise operation.
+% #1: a vector which expands to the form 'x,y,z'
+% #2: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain a boolean vector with three
+% entries.
+% #3: a scalar operation which takes two arguments (such as "add", "subtract", "equal")
+% #4 the argument for \pgfplotscoordmath (such as 'default')
+%
+% Example: \pgfplotsmathvectorcompwise{1,1,1}{0,1,0}{add}{pgfbasic}
+% -> \pgfplotsretval={1.0,2.0,1.0}
+\def\pgfplotsmathvectorcompwise#1#2#3#4{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \expandafter\pgfplotsmathvectorcompwiseop@binary\pgfplots@loc@TMPa\pgfplots@EOI{#4}{#3}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Defines \pgfplotsretval to x+y+z
+% #1: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain the result scalar.
+% #2: the argument for \pgfplotscoordmath (such as 'default')
+%
+% Example:
+% \pgfplotsmathvectorsum{1,4,5}{default}
+% \pgfplotsretval = 10 (in that format)
+\def\pgfplotsmathvectorsum#1#2{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsmathvectorsum@\pgfplots@loc@TMPa\pgfplots@EOI{#2}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+\def\pgfplotsmathvectorsum@#1,#2,#3\pgfplots@EOI#4{%
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ \pgfplotscoordmath{#4}{op}{add}{{\Ax}{\Ay}}%
+ \let\pgfplotsretval=\pgfmathresult
+ \pgfplotscoordmath{#4}{op}{add}{{\pgfplotsretval}{\Az}}%
+ \let\pgfplotsretval=\pgfmathresult
+}%
+
+% Computes the euclidean scalar product of two 3d vectors #1 and #2 in math
+% format #3.
+\def\pgfplotsmathvectorscalarproduct#1#2#3{%
+ \pgfplotsmathvectorscaleindividually{#1}{#2}{#3}%
+ \pgfplotsmathvectorsum{\pgfplotsretval}{#3}%
+}%
+
+% takes a vector #1 and defines three new macros
+% \csname #2x\endcsname,
+% \csname #2y\endcsname,
+% \csname #2z\endcsname,
+% with the components.
+% #3: the math format
+\def\pgfplotsmathvectortocomponents#1#2#3{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsmathvectortocomponents@\pgfplots@loc@TMPa\pgfplots@EOI{#3}{#2}%
+}%
+\def\pgfplotsmathvectortocomponents@#1,#2,#3\pgfplots@EOI#4#5{%
+ \expandafter\def\csname #5x\endcsname{#1}%
+ \expandafter\def\csname #5y\endcsname{#2}%
+ \expandafter\def\csname #5z\endcsname{#3}%
+}%
+
+
+% Takes two 3d vectors and computes their cross product.
+% #1: a vector which expands to the form 'x,y,z'
+% #2: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain the result vector.
+% #3: the argument for \pgfplotscoordmath (such as 'default')
+%
+\def\pgfplotsmathvectorcrossprod#1#2#3{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \expandafter\pgfplotsmathvectorcrossprod@\pgfplots@loc@TMPa\pgfplots@EOI{#3}%
+%\message{\string\pgfplotsmathvectorcrossprod{#1}{#2} = \pgfplotsretval^^J}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsmathvectorcrossprod@#1,#2,#3:#4,#5,#6\pgfplots@EOI#7{%
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ \def\Bx{#4}%
+ \def\By{#5}%
+ \def\Bz{#6}%
+ %
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Ay}{\Bz}}\let\AyBz=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Az}{\By}}\let\AzBy=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Az}{\Bx}}\let\AzBx=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Ax}{\Bz}}\let\AxBz=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Ax}{\By}}\let\AxBy=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Ay}{\Bx}}\let\AyBx=\pgfmathresult
+ %
+ \pgfplotscoordmath{#7}{op}{subtract}{{\AyBz}{\AzBy}}\let\pgfplots@loc@TMPa=\pgfmathresult%
+ \pgfplotscoordmath{#7}{op}{subtract}{{\AzBx}{\AxBz}}\let\pgfplots@loc@TMPb=\pgfmathresult%
+ \pgfplotscoordmath{#7}{op}{subtract}{{\AxBy}{\AyBx}}\let\pgfplots@loc@TMPc=\pgfmathresult%
+ \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc}%
+}%
+
+% Takes two 3d vectors and defines a new vector (Ax*Bx,Ay*By,Az*Bz)
+% #1: a vector which expands to the form 'x,y,z'
+% #2: a vector which expands to the form 'x,y,z'
+% on output, \pgfplotsretval will contain the result vector.
+% #3: the argument for \pgfplotscoordmath (such as 'default')
+%
+\def\pgfplotsmathvectorscaleindividually#1#2#3{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \expandafter\pgfplotsmathvectorscaleindividually@\pgfplots@loc@TMPa\pgfplots@EOI{#3}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsmathvectorscaleindividually@#1,#2,#3:#4,#5,#6\pgfplots@EOI#7{%
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ \def\Bx{#4}%
+ \def\By{#5}%
+ \def\Bz{#6}%
+ %
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Ax}{\Bx}}\let\Cx=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Ay}{\By}}\let\Cy=\pgfmathresult
+ \pgfplotscoordmath{#7}{op}{multiply}{{\Az}{\Bz}}\let\Cz=\pgfmathresult
+ %
+ \edef\pgfplotsretval{\Cx,\Cy,\Cz}%
+}%
+
+% #1 a vector as x,y,z
+% #2 the math format of its components
+\def\pgfplotspointfromcsvvector#1#2{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotspointfromcsvvector@\pgfplots@loc@TMPa\pgfplots@EOI{#2}
+ \endgroup
+}%
+\def\pgfplotspointfromcsvvector@#1,#2,#3\pgfplots@EOI#4{%
+ \pgfplotscoordmath{#4}{tofixed}{#1}\let\Ax=\pgfmathresult
+ \pgfplotscoordmath{#4}{tofixed}{#2}\let\Ay=\pgfmathresult
+ \pgfplotscoordmath{#4}{tofixed}{#3}\let\Az=\pgfmathresult
+ \pgfplotsqpointxyz\Ax\Ay\Az
+ \pgf@process{}%
+}%
+
+% #1 a vector as (x,y,z)
+% #2 a coordmath value
+% defines \pgfplotsretval to contain the vector length
+\def\pgfplotsmathvectorlength#1#2{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsmathvectorlength@\pgfplots@loc@TMPa\pgfplots@EOI{#2}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsmathvectorlength@#1,#2,#3\pgfplots@EOI#4{%
+ \begingroup
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ %
+ \pgfplotscoordmath{#4}{op}{multiply}{{\Ax}{\Ax}}\let\Axx=\pgfmathresult
+ \pgfplotscoordmath{#4}{op}{multiply}{{\Ay}{\Ay}}\let\Ayy=\pgfmathresult
+ \pgfplotscoordmath{#4}{op}{multiply}{{\Az}{\Az}}\let\Azz=\pgfmathresult
+ %
+ \pgfplotscoordmath{#4}{op}{add}{{\Axx}{\Ayy}}%
+ \pgfplotscoordmath{#4}{op}{add}{{\Azz}{\pgfmathresult}}%
+ \pgfplotscoordmath{#4}{op}{sqrt}{{\pgfmathresult}}%
+ \let\pgfplotsretval=\pgfmathresult
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% #1 a vector as (x,y,z)
+% #2 a scale
+% #3 a coordmath value
+% defines \pgfplotsretval to contain the scaled vector
+\def\pgfplotsmathvectorscale#1#2#3{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1:#2}%
+ \expandafter\pgfplotsmathvectorscale@\pgfplots@loc@TMPa\pgfplots@EOI{#3}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+\def\pgfplotsmathvectorscale@#1,#2,#3:#4\pgfplots@EOI#5{%
+ \begingroup
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ \pgfplotscoordmath{#5}{parsenumber}{#4}\let\S\pgfmathresult
+ %
+ \pgfplotscoordmath{#5}{op}{multiply}{{\Ax}{\S}}\let\Ax=\pgfmathresult
+ \pgfplotscoordmath{#5}{op}{multiply}{{\Ay}{\S}}\let\Ay=\pgfmathresult
+ \pgfplotscoordmath{#5}{op}{multiply}{{\Az}{\S}}\let\Az=\pgfmathresult
+ %
+ \edef\pgfplotsretval{\Ax,\Ay,\Az}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+% Takes an input vector #1 = x,y,z and applies the inverse data scale
+% trafo.
+%
+% The result is \pgfplotsretval; it will be in '#2' coordmath for
+% every component.
+\def\pgfplotsmathvectordatascaletrafoinverse#1#2{%
+ \begingroup
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfplotsmathvectordatascaletrafoinverse@\pgfplots@loc@TMPa\pgfplots@EOI{#2}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}
+\def\pgfplotsmathvectordatascaletrafoinverse@#1,#2,#3\pgfplots@EOI#4{%
+ \begingroup
+ \def\Ax{#1}%
+ \def\Ay{#2}%
+ \def\Az{#3}%
+ \ifpgfplots@apply@datatrafo@x
+ \pgfplotscoordmath{x}{datascaletrafo inverse}{\Ax}\let\Ax=\pgfmathresult
+ \fi
+ \ifpgfplots@apply@datatrafo@y
+ \pgfplotscoordmath{y}{datascaletrafo inverse}{\Ay}\let\Ay=\pgfmathresult
+ \fi
+ \ifpgfplots@curplot@threedim
+ \ifpgfplots@apply@datatrafo@z
+ \pgfplotscoordmath{z}{datascaletrafo inverse}{\Az}\let\Az=\pgfmathresult
+ \fi
+ \fi
+ \pgfplotsmathvectorfromstring{\Ax,\Ay,\Az}{#4}%
+ \pgfmath@smuggleone\pgfplotsretval
+ \endgroup
+}%
+
+
+{
+\catcode`\"=12
+\gdef\pgfplotsDQ{"}%
+\catcode`\|=12
+\gdef\pgfplotsVERTBAR{|}%
+\catcode`\#=12
+\gdef\pgfplotsHASH{#}%
+\catcode`\%=12 \gdef\pgfplotsPERCENT{%}}
+
+% swaps the content of two macros
+\def\pgfplotsutil@swap#1#2{%
+ \let\pgfplotsutil@swap@=#1%
+ \let#1=#2%
+ \let#2=\pgfplotsutil@swap@
+}%
+
+\def\pgfplots@boolval#1{%
+ \pgfplots@if{#1}{true}{false}%
+}%
+
+\input pgfplotsliststructure.code.tex
+\input pgfplotsliststructureext.code.tex
+\input pgfplotsarray.code.tex
+\input pgfplotsmatrix.code.tex
+\input pgfplotstableshared.code.tex
+\input pgfplotsdeque.code.tex
+\input pgfplotsbinary.code.tex
+\input pgfplotsutil.verb.code.tex
+
+\usepgfplotslibrary{surfshading}
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.lua b/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.lua
new file mode 100644
index 0000000000..40ac83bb38
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.lua
@@ -0,0 +1,139 @@
+local math=math
+local string=string
+local type=type
+local tostring = tostring
+local tonumber = tonumber
+local setmetatable = setmetatable
+local getmetatable = getmetatable
+local print=print
+local pairs = pairs
+local table=table
+local texio=texio
+
+do
+local _ENV = pgfplots
+---------------------------------------
+--
+
+log=texio.write_nl
+
+local stringfind = string.find
+local stringsub = string.sub
+local tableinsert = table.insert
+
+-- Splits 'str' at delimiter and returns a table of strings
+function stringsplit( str, delimiter )
+ if not str or not delimiter then error("arguments must not be nil") end
+ local result = { }
+ local start = 1
+ local findStart, findEnd = stringfind( str, delimiter, start )
+ while findStart do
+ tableinsert( result, stringsub( str, start, findStart-1 ) )
+ start = findEnd + 1
+ findStart, findEnd = stringfind( str, delimiter, start )
+ end
+ tableinsert( result, stringsub( str, start ) )
+ return result
+end
+
+function stringOrDefault(str, default)
+ if str == nil or type(str) == 'string' and string.len(str) == 0 then
+ return default
+ end
+ return tostring(str)
+end
+
+
+pgfplotsmath = {}
+
+function pgfplotsmath.isfinite(x)
+ if pgfplotsmath.isnan(x) or x == pgfplotsmath.infty or x == -pgfplotsmath.infty then
+ return false
+ end
+ return true
+end
+
+local isnan = function(x)
+ return x ~= x
+end
+
+pgfplotsmath.isnan = isnan
+
+local infty = 1/0
+pgfplotsmath.infty = infty
+
+local nan = math.sqrt(-1)
+pgfplotsmath.nan = nan
+
+---------------------------------------
+--
+
+
+-- Creates and returns a new class object.
+--
+-- Usage:
+-- complexclass = newClass()
+-- function complexclass:constructor()
+-- self.re = 0
+-- self.im = 0
+-- end
+--
+-- instance = complexclass.new()
+--
+function newClass()
+ local result = {}
+
+ -- we need this such that *instances* (which will have 'result' as meta table)
+ -- will "inherit" the class'es methods.
+ result.__index = result
+ local allocator= function (...)
+ local self = setmetatable({}, result)
+ self:constructor(...)
+ return self
+ end
+ result.new = allocator
+ return result
+end
+
+
+
+-- Create a new class that inherits from a base class
+--
+-- base = pgfplots.newClass()
+-- function base:constructor()
+-- self.variable= 'a'
+-- end
+--
+-- sub = pgfplots.newClassExtends(base)
+-- function sub:constructor()
+-- -- call super constructor.
+-- -- it is ABSOLUTELY CRUCIAL to use <baseclass>.constructor here - not :constructor!
+-- base.constructor(self)
+-- end
+--
+-- instance = base.new()
+--
+-- instance2 = sub.new()
+--
+-- @see newClass
+function newClassExtends( baseClass )
+ if not baseClass then error "baseClass must not be nil" end
+
+ local new_class = newClass()
+
+ -- The following is the key to implementing inheritance:
+
+ -- The __index member of the new class's metatable references the
+ -- base class. This implies that all methods of the base class will
+ -- be exposed to the sub-class, and that the sub-class can override
+ -- any of these methods.
+ --
+ local mt = {} -- getmetatable(new_class)
+ mt.__index = baseClass
+ setmetatable(new_class,mt)
+
+ return new_class
+end
+
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.verb.code.tex b/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.verb.code.tex
new file mode 100644
index 0000000000..8590ba908d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfplotsutil.verb.code.tex
@@ -0,0 +1,97 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Copyright 2007-2011 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+%
+% This source file contains helper utilities for verbatim character
+% processing.
+
+
+%
+% USAGE:
+% \beginpgfplotsverbatim[result/.code={\message{I read #1}}]
+% <verbatim code>
+% \endpgfplotsverbatim
+%
+% The verbatim code MUST start at the line after the ']' (or after
+% \beginpgfplotsverbatim if there is no ']')
+\def\beginpgfplotsverbatim{\pgfutil@ifnextchar[{\beginpgfplotsverbatim@}{\beginpgfplotsverbatim@[]}}
+\def\beginpgfplotsverbatim@[#1]{%
+ \begingroup
+ \pgfqkeys{/pgfplots/verb}{#1}%
+ \pgfplots@verbatim@prepare@collect
+ \beginpgfplotsverbatim@gobbleuntileol
+}
+
+\begingroup
+\catcode`\|=0
+\catcode`\\=12
+|gdef|endpgfplotsverbatim{\endpgfplotsverbatim}%
+|endgroup
+
+\expandafter\long\expandafter\def\expandafter\pgfplots@verbatim@collect@until\expandafter#\expandafter1\endpgfplotsverbatim{%
+ \begingroup
+ \pgfplots@verbatim@newline@handler
+ \xdef\pgfplots@glob@TMPa{#1}%
+ \endgroup
+ \pgfkeysgetvalue{/pgfplots/verb/result/.@cmd}\pgfplots@loc@TMPb
+ \global\let\pgfplots@glob@TMPb=\pgfplots@loc@TMPb
+ \endgroup% restore old catcodes etc.
+ \expandafter\pgfplots@glob@TMPb\expandafter{\pgfplots@glob@TMPa}\pgfeov%
+}%
+
+\begingroup
+\long\def\pgfplots@loc@TMPa{
+}%^^M}%
+\catcode`\^^M=13 %
+\gdef\beginpgfplotsverbatim@gobbleuntileol^^M{\pgfplots@verbatim@collect@until}%
+\gdef\pgfplots@verbatim@newline@toHATHATJ{\def^^M{^^J}}%
+\xdef\pgfplots@verbatim@newline@IDENTITY{\noexpand\long\noexpand\def\noexpand^^M{\pgfplots@loc@TMPa}}%
+\endgroup
+
+\pgfkeys{
+ /pgfplots/verb/result/.code={%
+ \pgfplots@error{Please use \string\beginpgfplotsverbatim[result/.code=....] to configure what to do with the content of \string\beginpgfplotsverbatim...\endpgfplotsverbatim\space (or use \string\pgfplotsset{verb/.cd,result/.code=....} in your preamble)}%
+ },
+ /pgfplots/verb/newline handler/.is choice,
+ /pgfplots/verb/newline handler/to outfile/.code=
+ {\let\pgfplots@verbatim@newline@handler=\pgfplots@verbatim@newline@toHATHATJ},
+ /pgfplots/verb/newline handler/identity/.code=
+ {\let\pgfplots@verbatim@newline@handler=\pgfplots@verbatim@newline@IDENTITY},
+ /pgfplots/verb/newline handler/identity,
+}
+
+\def\pgfplots@verbatim@prepare@collect{%
+ \def\do##1{\catcode`##1=12 }\dospecials
+ \catcode`\^^M=13
+ \catcode`\^^J=12
+ \catcode`\^^I=12
+}%
+
+\def\pgfplots@verbatim@restore@catcodes{%
+ \catcode`\^^M=5
+ \catcode`\^^J=10
+ \catcode`\^^I=10
+ % this is important to get \scantokens to work: otherwise, it will
+ % eat up the ^^M chars:
+ \endlinechar=`\^^M
+ \newlinechar=\endlinechar
+}%
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfregressiontest.sty b/graphics/pgf/contrib/pgfplots/tex/pgfregressiontest.sty
new file mode 100644
index 0000000000..a6ed64ffbc
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfregressiontest.sty
@@ -0,0 +1,159 @@
+%--------------------------------------------------
+% Provides a feature for fully automated regression testing of PGF or derived works.
+%
+% DEPRECATED.
+% The idea might be interesting, but it is simply did not work and is
+% too complicated. Don't use it.
+%
+% Idea:
+% - it is based on the 'external' lib of pgf (which automatically exports each tikzpicture to pdf).
+% - modification: in addition to the pdf export, call imagemagick's convert
+% tool to export to png as well and compare the png to a reference image.
+% - pgfregressiontest.sty provides two modes:
+% 1) the REFERENCE GENERATION mode
+% - each image knows a reference revision tag (or the system default)
+% - the 'system call' makes a "checkout" of the desired revision,
+% generates the image and returns to the original revision
+% - the images are stored with a unique prefix.
+% 2) the COMPARISON mode
+% - each tikzpicture is compared to its reference image. If there
+% is none, it should be generated.
+% - if the comparison fails, a protocol is generated and the user
+% is alerted.
+
+%--------------------------------------------------
+%
+\ProvidesPackage{pgfregressiontest}[2010/10/31 Version 0.1]
+
+\RequirePackage{tikz}
+\usetikzlibrary{external}
+
+\def\pgfregression@invokecmdkey#1#2{%
+ \pgfkeysvalueof{/pgf/regression/#1/.@cmd}#2\pgfeov
+}%
+
+\newif\ifpgfregressionpreamble
+\pgfregressionpreambletrue
+
+\def\pgfregressiontestset{\pgfqkeys{/pgf/regression}}%
+
+\pgfqkeys{/pgf/regression}{%
+ % will be set in \begin{document}
+ system call original/.initial=<not yet set>,
+ %
+ % 'rev checkout' can be used to manually change the environment
+ % state before actually generating the image.
+ % Example:
+ % 'rev checkout=cd ~/code/tex/pgfplots ; git checkout 1.3'
+ % or something like this.
+ %
+ % Use 'rev restore' to immediately undo the effects. All that
+ % stuff is executed in one shell environment, i.e. you can define
+ % and use shell variables.
+ rev checkout/.code=\def\pgfregression@revcheckout{#1},
+ rev checkout={},
+ rev restore/.code=\def\pgfregression@revrestore{#1},
+ rev restore={},
+ reference prefix/.initial=reference_images/,
+ protocol file/.initial=\jobname.protocol.sh,
+ convert to png/.initial={convert "\image.pdf" "\image.png"},%
+ reference mode/.code={
+ \def\pgfregr@replacement@syscall{%
+ \ifx\pgfregression@revcheckout\pgfutil@empty
+ \else
+ \pgfregression@revcheckout;^^J%
+ @echo "'rev checkout' was successful, generating pdf...";^^J%
+ \fi
+ mkdir -p \pgfkeysvalueof{/pgf/regression/reference prefix};^^J%
+ \pgfkeysvalueof{/pgf/regression/system call original}; EXITCODE=$$?; \\^^J%
+ \ifx\pgfregression@revrestore\pgfutil@empty
+ \else
+ \pgfregression@revrestore; \\^^J%
+ echo "'rev restore' was successful.";^^J%
+ \fi
+ @if [ "$$EXITCODE" != "0" ]; then echo "pdf generation failed; Abort"; false; fi;^^J%
+ \pgfkeysvalueof{/pgf/regression/convert to png};^^J%
+ }%
+ \def\pgfregr@style{%
+ \message{^^Jpgfregressiontest: Running in REFERENCE GENERATION mode.^^J}%
+ \pgfqkeys{/pgf/regression}{%
+ /tikz/external/prefix=\pgfkeysvalueof{/pgf/regression/reference prefix},
+ }%
+ }%
+ \ifpgfregressionpreamble
+ \else
+ \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall
+ \pgfregr@style
+ \fi
+ },
+ comparison mode/.code={
+ \def\pgfregr@replacement@syscall{%
+ \pgfkeysvalueof{/pgf/regression/system call original};^^J%
+ \pgfkeysvalueof{/pgf/regression/convert to png};^^J%
+ diff "\image.png" "\expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.png";^^J%
+ if [ ! $? -eq 0 ]; then ^^J
+ echo 'echo "file \image.pdf differs from \expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.pdf (displaying differences now)".' >> \pgfkeysvalueof{/pgf/regression/protocol file};^^J
+ echo 'convert "\image.png" "\expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.png" -compose difference -composite -colorspace gray miff:- | display' >>\pgfkeysvalueof{/pgf/regression/protocol file};^^J%
+ else^^J
+ rm -f "\image.png";^^J%
+ fi;^^J%
+ }%
+ \def\pgfregr@style{%
+ \message{^^Jpgfregressiontest: Running in COMPARISON mode.^^J}%
+ \expandafter\def\expandafter\pgfregr@get@reference@image@for\tikzexternal@filenameprefix####1\relax{%
+ \pgfkeysvalueof{/pgf/regression/reference prefix}####1%
+ }%
+ }%
+ \ifpgfregressionpreamble
+ \else
+ \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall
+ \pgfregr@style
+ \fi
+ },
+ comparison mode,
+}
+
+% Check for "command line arguments".
+% if 'pdflatex '\def\referencemode{1}\input{filename}' has been used,
+% the 'reference mode' will be enabled. Otherwise we are in
+% 'comparison mode'.
+\expandafter\ifx\csname referencemode\endcsname\relax
+ \pgfregressiontestset{comparison mode}%
+ \message{^^Jpgfregressiontest: use pdflatex '\string\def\string\referencemode{1}\string\input{\jobname}' to enable reference generation.^^J}%
+\else
+ \pgfregressiontestset{reference mode}%
+\fi
+
+
+\AtBeginDocument{%
+ \tikzifexternalizehasbeencalled{}{%
+ \PackageError{pgfregressiontest}{%
+ Please call \string\tikzexternalize\space somewhere in your preamble. I can only perform my tests together with image externalization}{}%
+ }%
+ \pgfkeysgetvalue{/tikz/external/system call}\pgfregression@temp
+ \pgfkeyslet{/pgf/regression/system call original}\pgfregression@temp
+ %
+ \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall
+ \pgfregr@style
+ %
+ \immediate\openout\w@pgf@writea=\pgfkeysvalueof{/pgf/regression/protocol file} %
+ \immediate\closeout\w@pgf@writea
+ %
+ \global\pgfregressionpreamblefalse
+}
+
+\AtEndDocument{%
+ \openin\r@pgf@reada=\pgfkeysvalueof{/pgf/regression/protocol file} %
+ \ifeof\r@pgf@reada
+ \else
+ \message{
+ ^^J%
+ ======================================^^J%
+ There have been regression errors.^^J%
+ Use^^J%
+ >> bash \pgfkeysvalueof{/pgf/regression/protocol file}^^J%
+ to visualize them.^^J%
+ ======================================^^J%
+ }%
+ \fi
+}%
diff --git a/graphics/pgf/contrib/pgfplots/tex/pgfsys-luatexpatch.def b/graphics/pgf/contrib/pgfplots/tex/pgfsys-luatexpatch.def
new file mode 100644
index 0000000000..6865ae1556
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/pgfsys-luatexpatch.def
@@ -0,0 +1,441 @@
+% This file has been shipped with pgfplots in order to fix incompatibilities with the new luatex. The next version of PGF will include the "correct" file.
+%
+%
+
+\ifnum\luatexversion<95
+ \immediate\write-1{luatex driver of PGF: detected lua version \the\luatexversion; falling back to old pdftex driver^^J}%
+ \input pgfsys-pdftex.def
+ \expandafter\endinput
+\fi
+
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+%\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/systemlayer/pgfsys-luatex.def,v 1.35 2014/10/11 09:23:31 vibrovski Exp $
+
+
+% Driver commands for pdf
+
+%
+% Load common pdf commands:
+%
+\input pgfsys-common-pdf.def
+
+%
+% pdftex-specific stuff:
+%
+\def\pgfsys@invoke#1{\pdfextension literal{#1}}
+
+% Synced hboxes
+\def\pgfsys@hboxsynced#1{%
+ {%
+ \pgfsys@beginscope%
+ \setbox\pgf@hbox=\hbox{%
+ \hskip\pgf@pt@x%
+ \raise\pgf@pt@y\hbox{%
+ \pgf@pt@x=0pt%
+ \pgf@pt@y=0pt%
+ \pgflowlevelsynccm%
+ \pgfsys@hbox#1}%
+ \hss%
+ }%
+ \wd\pgf@hbox=0pt%
+ \ht\pgf@hbox=0pt%
+ \dp\pgf@hbox=0pt%
+ \box\pgf@hbox%
+ \pgfsys@endscope%
+ }%
+}
+
+
+
+\def\pgfsys@imagesuffixlist{.pdf:.jpg:.jpeg:.png:}
+\def\pgfsys@defineimage{% width, height, page number
+ \ifx\pgf@imagewidth\pgfutil@empty\else\edef\pgf@imagewidth{ width \pgf@imagewidth }\fi%
+ \ifx\pgf@imageheight\pgfutil@empty\else\edef\pgf@imageheight{ height \pgf@imageheight }\fi%
+ \ifx\pgf@imagepage\pgfutil@empty\else\edef\pgf@imagepage{ page \pgf@imagepage }\fi%
+ \ifx\saveimageresource\@undefined% old version of lualatex
+ \ifx\pgf@imagepage\pgfutil@empty\else%
+ \pgfwarning{Page selection not supported. Ignoring page selection}%
+ \fi%
+ \setbox\pgfutil@tempboxa=\hbox{%
+ \pdfimage \pgf@imageheight \pgf@imagewidth {\pgf@filename}}%
+ \pdfform\pgfutil@tempboxa%
+ \edef\pgf@image{\noexpand\pdfrefform\the\pdflastform}%
+ \else% new version
+ {\saveimageresource \pgf@imageheight \pgf@imagewidth attr
+ {/Interpolate \pgf@imageinterpolate\space\pgf@imagemask} \pgf@imagepage
+ {\pgf@filename}}%
+ \edef\pgf@image{\noexpand\useimageresource\the\lastsavedimageresourceindex}%
+ \fi
+}%
+\def\pgfsys@definemask#1{%
+ \ifx\pgf@maskmatte\pgfutil@empty%
+ \else%
+ \edef\pgf@maskmatte{/Matte [\pgf@maskmatte]}%
+ \fi%
+ \edef\pgf@attr{{\pgf@maskmatte\space /Decode [1 0]}}%
+ \immediate\saveimageresource attr \pgf@attr {\pgf@filename}%
+ \edef\pgf@mask{/SMask \the\lastsavedimageresourceindex\space 0 R}%
+}
+\def\pgfsys@horishading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \setbox\pgfutil@tempboxa=\hbox to\pgf@max{\vbox to\pgfmathresult pt{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{\pgfpoint{\pgf@max}{#2}}%
+ \immediate\saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@doma\space0 \pgf@domb\space0]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
+ }%
+}
+\def\pgfsys@vertshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \pgfmathparse{#2}%
+ \setbox\pgfutil@tempboxa=\hbox to\pgfmathresult pt{\vbox to\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{\pgfpoint{#2}{\pgf@max}}%
+ \immediate\saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [0 \pgf@doma\space0 \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [false false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
+ }%
+}
+\def\pgfsys@radialshading#1#2#3{%
+ {%
+ \pgf@parsefunc{#3}%
+ \setbox\pgfutil@tempboxa=\hbox to2\pgf@max{\vbox to2\pgf@max{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgfpoint{\pgf@max}{\pgf@max}}%
+ \advance\pgf@xa by \pgf@x%
+ \advance\pgf@ya by \pgf@y%
+ \pgf@sys@bp@correct{\pgf@x}%
+ \pgf@sys@bp@correct{\pgf@y}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \immediate\saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 3
+ /ColorSpace /DeviceRGB
+ /Domain [\pgf@pdfparseddomain]
+ /Coords [\pgf@sys@tonumber{\pgf@xa} \pgf@sys@tonumber{\pgf@ya} \pgf@doma\space \pgf@sys@tonumber{\pgf@x} \pgf@sys@tonumber{\pgf@y} \pgf@domb]
+ /Function \pgf@pdfparsedfunction
+ /Extend [true false] >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{\leavevmode\noexpand\useboxresource\the\lastsavedboxresourceindex}%
+ }%
+}%
+\def\pgfsys@functionalshading#1#2#3#4{%
+ {%
+ \pgf@process{#2}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{#3}%
+ \pgf@xb=\pgf@x%
+ \pgf@yb=\pgf@y%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \setbox\pgfutil@tempboxa=\hbox to\pgf@x{\vbox to\pgf@y{\vfil\pgfsys@invoke{/Sh sh}}\hfil}%
+ \pgf@sys@bp@correct{\pgf@xa}%
+ \pgf@sys@bp@correct{\pgf@ya}%
+ \pgf@sys@bp@correct{\pgf@xb}%
+ \pgf@sys@bp@correct{\pgf@yb}%
+ \pgf@xc=-\pgf@xa%
+ \pgf@yc=-\pgf@ya%
+ % Now build the function
+ \pdfextension obj
+ stream
+ attr
+ {
+ /FunctionType 4
+ /Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}]
+ /Range [0 1 0 1 0 1]
+ }
+ {{#4}}%
+ \edef\pgf@temp@num{\the\numexpr\pdffeedback lastobj\relax}%
+ \saveboxresource resources {%
+ /Shading << /Sh << /ShadingType 1
+ /ColorSpace /DeviceRGB
+ /Matrix [1 0 0 1 \pgf@sys@tonumber{\pgf@xc}\space\pgf@sys@tonumber{\pgf@yc}]
+ /Domain [\pgf@sys@tonumber{\pgf@xa}\space\pgf@sys@tonumber{\pgf@xb}\space\pgf@sys@tonumber{\pgf@ya}\space\pgf@sys@tonumber{\pgf@yb}]
+ /Function \pgf@temp@num\space 0 R
+ >> >>}\pgfutil@tempboxa% <<
+ \expandafter\xdef\csname @pgfshading#1!\endcsname{%
+ \leavevmode%
+ \noexpand\useboxresource\the\lastsavedboxresourceindex%
+ \noexpand\pdfextension refobj \pgf@temp@num%
+ }%
+ }%
+}
+
+
+
+% Patterns
+
+\def\pgfsys@declarepattern#1#2#3#4#5#6#7#8#9{%
+ % Start building the pattern dictionary:
+ \pgf@xa=#2\relax%
+ \pgf@ya=#3\relax%
+ \pgf@xb=#4\relax%
+ \pgf@yb=#5\relax%
+ \pgf@xc=#6\relax%
+ \pgf@yc=#7\relax%
+ \pgf@sys@bp@correct\pgf@xa%
+ \pgf@sys@bp@correct\pgf@ya%
+ \pgf@sys@bp@correct\pgf@xb%
+ \pgf@sys@bp@correct\pgf@yb%
+ \pgf@sys@bp@correct\pgf@xc%
+ \pgf@sys@bp@correct\pgf@yc%
+ % Now create the pattern object:
+ \immediate\pdfextension obj stream
+ attr
+ {
+ /Type /Pattern
+ /PatternType 1
+ /PaintType \ifnum#9=0 2 \else 1 \fi
+ /TilingType 1
+ /BBox [\pgf@sys@tonumber\pgf@xa\space\pgf@sys@tonumber\pgf@ya\space\pgf@sys@tonumber\pgf@xb\space\pgf@sys@tonumber\pgf@yb]
+ /XStep \pgf@sys@tonumber\pgf@xc\space
+ /YStep \pgf@sys@tonumber\pgf@yc\space
+ /Resources << >> %<<
+ }
+ {#8}%
+ \pgfutil@addpdfresource@patterns{/pgfpat#1\space \the\numexpr\pdffeedback lastobj\relax\space 0 R}%
+}
+
+\def\pgfsys@setpatternuncolored#1#2#3#4{%
+ \pgfsysprotocol@literal{/pgfprgb cs #2 #3 #4 /pgfpat#1\space scn}%
+}
+
+\def\pgfsys@setpatterncolored#1{%
+ \pgfsysprotocol@literal{/Pattern cs /pgfpat#1\space scn}%
+}
+
+% System layer for meta patterns
+% Takes 15(!) arguments
+% #1 pattern name
+% #2 #3 bounding box lower left
+% #4 #5 bounding box upper right
+% #6 #7 tile size
+% #8 #9 #10 #11 #12 #13 transformation matrix
+% #14 protocoled text
+% #15 pattern type
+\def\pgfsys@declarepattern@meta#1#2#3#4#5#6#7{%
+ % Start building the pattern dictionary:
+ \pgf@xa=#2\relax%
+ \pgf@ya=#3\relax%
+ \pgf@xb=#4\relax%
+ \pgf@yb=#5\relax%
+ \pgf@xc=#6\relax%
+ \pgf@yc=#7\relax%
+ \pgf@sys@bp@correct\pgf@xa%
+ \pgf@sys@bp@correct\pgf@ya%
+ \pgf@sys@bp@correct\pgf@xb%
+ \pgf@sys@bp@correct\pgf@yb%
+ \pgf@sys@bp@correct\pgf@xc%
+ \pgf@sys@bp@correct\pgf@yc%
+ \pgfsys@@declarepattern@meta{#1}}
+
+\def\pgfsys@@declarepattern@meta#1#2#3#4#5#6#7#8#9{%
+ \pgfutil@tempdima=#6\relax%
+ \pgfutil@tempdimb=#7\relax%
+ \pgf@sys@bp@correct\pgf@xa%
+ \pgf@sys@bp@correct\pgf@ya%
+ % Now create the pattern object:
+ \immediate\pdfextension obj stream
+ attr
+ {
+ /Type /Pattern
+ /PatternType 1
+ /PaintType \ifnum#9=0 2 \else 1 \fi
+ /TilingType 1
+ /BBox [\pgf@sys@tonumber\pgf@xa\space\pgf@sys@tonumber\pgf@ya\space\pgf@sys@tonumber\pgf@xb\space\pgf@sys@tonumber\pgf@yb]
+ /XStep \pgf@sys@tonumber\pgf@xc\space
+ /YStep \pgf@sys@tonumber\pgf@yc\space
+ /Matrix [#2\space#3\space#4\space#5\space\pgf@sys@tonumber\pgfutil@tempdima\space\pgf@sys@tonumber\pgfutil@tempdimb]
+ /Resources << >> %<<
+ }
+ {#8}%
+ \pgfutil@addpdfresource@patterns{/pgfpat#1\space \the\numexpr\pdffeedback lastobj\relax\space 0 R}%
+ }
+
+
+
+\def\pgfsys@papersize#1#2{\pageheight#2\relax\pagewidth#1\relax}
+
+\def\pgfsys@global@papersize#1#2{\global\pageheight#2\relax\global\pagewidth#1\relax}
+
+\ifx\paperheight\@undefined
+ \def\pgfsys@thepageheight{\pageheight}
+ \def\pgfsys@thepagewidth{\pagewidth}
+\fi
+
+
+%
+% Position tracking
+%
+\def\pgfsys@markposition#1{%
+ \savepos%
+ \edef\pgf@temp{#1}%
+ \expandafter\pgfutil@writetoaux\expandafter{%
+ \expandafter\noexpand\expandafter\pgfsyspdfmark\expandafter{\pgf@temp}{\the\lastxpos}{\the\lastypos}}%
+}
+
+\def\pgfsyspdfmark#1#2#3{%
+ \expandafter\gdef\csname pgf@sys@pdf@mark@pos@#1\endcsname{\pgfqpoint{#2sp}{#3sp}}%
+ \pgfutil@check@rerun{#1}{{#2}{#3}}%
+}
+
+\def\pgfsys@getposition#1#2{%
+ \edef\pgf@marshal{\let\noexpand#2=\expandafter\noexpand\csname pgf@sys@pdf@mark@pos@#1\endcsname}%
+ \pgf@marshal%
+}
+
+\def\pgf@sys@pdf@mark@pos@pgfpageorigin{\pgfqpoint{\hoffset}{\voffset}}
+
+
+%
+% Opacity masks
+%
+\def\pgfsys@fadingfrombox#1#2{%
+ {%
+ \pgf@sys@pdf@check@resources%
+ \pgf@x=-.5\wd#2%
+ \pgf@y=-.5\ht#2%
+ \advance\pgf@y by.5\dp#2%
+ \expandafter\xdef\csname pgfsmasktrans@#1\endcsname{%
+ \noexpand\pgftransformcm{1}{0}{0}{1}{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}%
+ \saveboxresource resources { \pgf@sys@pdf@possible@resources } #2%
+ \expandafter\xdef\csname pgfsmaskxform@#1\endcsname{\the\lastsavedboxresourceindex}%
+ }%
+}
+\def\pgfsys@usefading#1#2#3#4#5#6#7{%
+ \expandafter\ifx\csname pgfsmaskxform@#1\endcsname\relax%
+ \pgferror{Undefined fading '#1'}%
+ \else%
+ {%
+ \expandafter\ifx\csname pgfsmaks@#1\endcsname\relax%
+ \pgf@sys@pdf@install@mask{#1}%
+ \fi%
+ \pgftransformreset%
+ \pgftransformcm{#2}{#3}{#4}{#5}{\pgfpoint{#6}{#7}}%
+ \csname pgfsmasktrans@#1\endcsname%
+ {%
+ \pgflowlevelsynccm%
+ \pgfsys@invoke{/pgfsmask\csname pgfsmask@#1\endcsname\space gs}%
+ }%
+ \pgftransforminvert%
+ \pgflowlevelsynccm%
+ }%
+ \fi
+}
+
+\def\pgf@sys@pdf@install@mask#1{%
+ \setbox\pgfutil@tempboxa=\hbox{\useboxresource\csname pgfsmaskxform@#1\endcsname}
+ \immediate\saveboxresource%
+ attr {
+ /Group
+ <<
+ /S /Transparency
+ /CS /DeviceGray
+ >>
+ }% <<
+ \pgfutil@tempboxa%
+ \pgfutil@addpdfresource@extgs{%
+ /pgfsmask\the\lastsavedboxresourceindex\space
+ <<
+ /SMask
+ <<
+ /S /Luminosity
+ /G \the\lastsavedboxresourceindex\space 0 R
+ >>
+ >> } %<<
+ \expandafter\xdef\csname pgfsmask@#1\endcsname{\the\lastsavedboxresourceindex}%
+}
+
+%
+% Transparency groups
+%
+\def\pgfsys@transparencygroupfrombox#1{%
+ \pgf@sys@pdf@check@resources%
+ \saveboxresource
+ attr { /Group << /S /Transparency
+ /I \ifpgfsys@transparency@group@isolated true \else false \fi
+ /K \ifpgfsys@transparency@group@knockout true \else false \fi >> } %<<
+ resources { \pgf@sys@pdf@possible@resources }
+ #1%
+ \setbox#1=\hbox{\useboxresource\lastsavedboxresourceindex}%
+}
+
+
+
+
+%
+% Resource management
+%
+
+\def\pgf@sys@setuppdfresources@plain{%
+ % This command will setup pdf resource in plain and in latex
+ % mode. ConTeXt has its own handler
+ % Page resources (they are kept in objects and only written at the
+ % very end)
+ \pdfextension obj reserveobjnum \edef\pgf@sys@pdf@extgs@objnum{\the\numexpr\pdffeedback lastobj\relax}
+ \pdfextension obj reserveobjnum \edef\pgf@sys@pdf@pattern@objnum{\the\numexpr\pdffeedback lastobj\relax}
+ \pdfextension obj reserveobjnum \edef\pgf@sys@pdf@colrospaces@objnum{\the\numexpr\pdffeedback lastobj\relax}
+ \def\pgf@sys@pdf@possible@resources{%
+ /ColorSpace \pgf@sys@pdf@colrospaces@objnum\space 0 R
+ /Pattern \pgf@sys@pdf@pattern@objnum\space 0 R
+ /ExtGState \pgf@sys@pdf@extgs@objnum\space 0 R
+ }
+ \let\pgf@sys@pdf@check@resources=\relax%
+ \def\pgf@sys@pdf@install@pageresources{
+ {
+ \edef\temp{
+ \pgf@sys@pdf@possible@resources
+ }
+ \expandafter\global\expandafter\pdfvariable pageresources\expandafter{\temp}
+ }
+ }
+ \pgf@sys@pdf@install@pageresources
+ \expandafter\pgfutil@everybye\expandafter{%
+ \the\pgfutil@everybye%
+ \immediate \pdfextension obj useobjnum \pgf@sys@pdf@extgs@objnum {<<\pgf@sys@pgf@resource@list@extgs>>}%<<
+ \immediate \pdfextension obj useobjnum \pgf@sys@pdf@pattern@objnum {<<\pgf@sys@pgf@resource@list@patterns>>}%<<
+ \immediate \pdfextension obj useobjnum \pgf@sys@pdf@colrospaces@objnum {<<\pgf@sys@pgf@resource@list@colorspaces>>}%<<
+ }
+ \let\pgf@sys@pgf@resource@list@extgs=\pgfutil@empty%
+ \let\pgf@sys@pgf@resource@list@patterns=\pgfutil@empty%
+ \let\pgf@sys@pgf@resource@list@colorspaces=\pgfutil@empty%
+ \def\pgf@sys@addpdfresource@extgs@plain##1{\xdef\pgf@sys@pgf@resource@list@extgs{\pgf@sys@pgf@resource@list@extgs\space##1}}
+ \def\pgf@sys@addpdfresource@patterns@plain##1{\xdef\pgf@sys@pgf@resource@list@patterns{\pgf@sys@pgf@resource@list@patterns\space##1}}
+ \def\pgf@sys@addpdfresource@colorspaces@plain##1{\xdef\pgf@sys@pgf@resource@list@colorspaces{\pgf@sys@pgf@resource@list@colorspaces\space##1}}
+}
+\pgfutil@setuppdfresources % possibly call the above
+
+\pgfutil@addpdfresource@colorspaces{ /pgfprgb [/Pattern /DeviceRGB] }
+
+\def\pgfsys@color@unstacked#1{%
+ \pdfextension literal{\csname\string\color@#1\endcsname}%
+}
+
+\endinput
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% End:
diff --git a/graphics/pgf/contrib/pgfplots/tex/plothandler.lua b/graphics/pgf/contrib/pgfplots/tex/plothandler.lua
new file mode 100644
index 0000000000..59dfbb2c77
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/plothandler.lua
@@ -0,0 +1,998 @@
+--
+-- This file contains parts of pgfplotscoordprocessing.code.tex and pgfplotsplothandlers.code.tex .
+--
+-- It contains
+--
+-- pgfplots.Axis
+-- pgfplots.Coord
+-- pgfplots.Plothandler
+--
+-- and some related classes.
+
+local math=math
+local pgfplotsmath = pgfplots.pgfplotsmath
+local type=type
+local tostring=tostring
+local error=error
+local table=table
+
+do
+-- all globals will be read from/defined in pgfplots:
+local _ENV = pgfplots
+-----------------------------------
+
+local pgftonumber =pgfluamathfunctions.tonumber
+
+Coord = newClass()
+
+function Coord:constructor()
+ self.x = { nil, nil, nil }
+ self.unboundedDir = nil
+ self.meta= nil
+ self.metatransformed = nil -- assigned during vis phase only
+ self.unfiltered = nil
+ self.pgfXY = nil -- assigned during visphase only
+ return self
+end
+
+function Coord:copy(other)
+ for i = 1,#other.x do self.x[i] = other.x[i] end
+ self.meta = other.meta
+ self.metatransformed = other.metatransformed
+ self.unfiltered = nil -- not needed
+end
+
+function Coord:__tostring()
+ local result = '(' .. stringOrDefault(self.x[1], "--") ..
+ ',' .. stringOrDefault(self.x[2], "--") ..
+ ',' .. stringOrDefault(self.x[3], "--") ..
+ ') [' .. stringOrDefault(self.meta, "--") .. ']'
+
+ if not self.x[1] and self.unfiltered then
+ result = result .. "(was " .. tostring(self.unfiltered) .. ")"
+ end
+ return result
+end
+
+-- a reference to a Coord which is returned by math expressions involving 'x', 'y', or 'z'
+-- see surveystart()
+local pseudoconstant_pt = nil
+local function pseudoconstant_x() return pseudoconstant_pt.x[1] end
+local function pseudoconstant_y() return pseudoconstant_pt.x[2] end
+local function pseudoconstant_z() return pseudoconstant_pt.x[3] end
+local function pseudoconstant_rawx() return pgftonumber(pseudoconstant_pt.unfiltered.x[1]) end
+local function pseudoconstant_rawy() return pgftonumber(pseudoconstant_pt.unfiltered.x[2]) end
+local function pseudoconstant_rawz() return pgftonumber(pseudoconstant_pt.unfiltered.x[3]) end
+local function pseudoconstant_meta() return pseudoconstant_pt.meta end
+
+-- @return the old value
+local function updatePseudoConstants(pt)
+ local old = pseudoconstant_pt
+ pseudoconstant_pt = pt
+ return old
+end
+
+-------------------------------------------------------
+
+LinearMap = newClass()
+
+-- A map such that
+-- [inMin,inMax] is mapped linearly to [outMin,outMax]
+--
+function LinearMap:constructor(inMin, inMax, outMin, outMax)
+ if not inMin or not inMax or not outMin or not outMax then error("arguments must not be nil") end
+ if inMin == inMax then
+ self.map = function (x) return inMin end
+ else
+ if inMin > inMax then error("linear map received invalid input domain " .. tostring(inMin) .. ":" .. tostring(inMax)) end
+ self.offset = outMin - (outMax-outMin)*inMin/(inMax-inMin)
+ self.scale = (outMax-outMin)/(inMax-inMin)
+ end
+end
+
+function LinearMap:map(x)
+ return x*self.scale + self.offset
+end
+
+PointMetaMap = newClass()
+
+function PointMetaMap:constructor(inMin,inMax, warnForfilterDiscards)
+ if not inMin or not inMax or warnForfilterDiscards == nil then error("arguments must not be nil") end
+ self._mapper = LinearMap.new(inMin,inMax, 0, 1000)
+ self.warnForfilterDiscards = warnForfilterDiscards
+end
+
+function PointMetaMap:map(meta)
+ if pgfplotsmath.isfinite(meta) then
+ local result = self._mapper:map(meta)
+ result = math.max(0, result)
+ result = math.min(1000, result)
+ return result
+ else
+ if self.warnForfilterDiscards then
+ log("The per point meta data '" .. tostring(meta) .. " (and probably others as well) is unbounded - using the minimum value instead.\n")
+ self.warnForfilterDiscards=false
+ end
+ return 0
+ end
+end
+
+
+
+-------------------------------------------------------
+
+-- Abstract base class of all plot handlers.
+-- It offers basic functionality for the survey phase.
+Plothandler = newClass()
+
+-- @param name the plot handler's name (a string)
+-- @param axis the parent axis
+-- @param pointmetainputhandler an instance of PointMetaHandler or nil if there is none
+function Plothandler:constructor(name, axis, pointmetainputhandler)
+ if not name or not axis then
+ error("arguments must not be nil")
+ end
+ self.axis = axis
+ self.config = PlothandlerConfig.new()
+ self.name = name
+ self.coordindex = 0
+ self.metamin = math.huge
+ self.metamax = -math.huge
+ self.autocomputeMetaMin = true
+ self.autocomputeMetaMax = true
+ self.coords = {}
+ self.pointmetainputhandler = pointmetainputhandler
+ self.pointmetamap = nil -- will be set later
+ self.filteredCoordsAway = false
+ self.plotHasJumps = false
+ self.hasUnboundedPointMeta = false
+ -- will be set before the visualization phase starts. At least.
+ self.plotIs3d = false
+
+ -- do not use the global one. It may be outdated.
+ self.stringToFunctionMap = pgfluamathfunctions.stringToFunctionMap
+
+ return self
+end
+
+function Plothandler:__tostring()
+ return 'plot handler ' .. self.name
+end
+
+-- @see \pgfplotsplothandlersurveybeforesetpointmeta
+function Plothandler:surveyBeforeSetPointMeta()
+end
+
+-- @see \pgfplotsplothandlersurveyaftersetpointmeta
+function Plothandler:surveyAfterSetPointMeta()
+end
+
+-- PRIVATE
+--
+-- appends a fully surveyed point
+function Plothandler:addSurveyedPoint(pt)
+ table.insert(self.coords, pt)
+ -- log("addSurveyedPoint(" .. tostring(pt) .. ") ...\n")
+end
+
+
+-- PRIVATE
+--
+-- assigns the point meta value by means of the PointMetaHandler
+function Plothandler:setperpointmeta(pt)
+ if pt.meta == nil and self.pointmetainputhandler ~= nil then
+ self.pointmetainputhandler:assign(pt)
+ end
+end
+
+-- PRIVATE
+--
+-- updates point meta limits
+function Plothandler:setperpointmetalimits(pt)
+ if self.pointmetainputhandler ~= nil and self.pointmetainputhandler:isPointMetaBounded(pt.meta) then
+ if not type(pt.meta) == 'number' then error("got unparsed input "..tostring(pt)) end
+ if self.autocomputeMetaMin then
+ self.metamin = math.min(self.metamin, pt.meta )
+ end
+
+ if self.autocomputeMetaMax then
+ self.metamax = math.max(self.metamax, pt.meta )
+ end
+ else
+ -- FIXME : the TeX code also checks for 'bounded point meta' if there is no point meta input!?
+ self.hasUnboundedPointMeta = true
+ end
+end
+
+-- @see \pgfplotsplothandlersurveystart
+function Plothandler:surveystart()
+ self.stringToFunctionMap["x"] = pseudoconstant_x
+ self.stringToFunctionMap["y"] = pseudoconstant_y
+ self.stringToFunctionMap["z"] = pseudoconstant_z
+ self.stringToFunctionMap["rawx"] = pseudoconstant_rawx
+ self.stringToFunctionMap["rawy"] = pseudoconstant_rawy
+ self.stringToFunctionMap["rawz"] = pseudoconstant_rawz
+ self.stringToFunctionMap["meta"] = pseudoconstant_meta
+end
+
+-- @see \pgfplotsplothandlersurveyend
+-- returns executable TeX code to communicate return values.
+function Plothandler:surveyend()
+ -- empty by default.
+ return ""
+end
+
+-- @see \pgfplotsplothandlersurveypoint
+function Plothandler:surveypoint(pt)
+ updatePseudoConstants(nil)
+
+ local updateLimits = self.config.updateLimits
+ local current = self.axis:parsecoordinate(pt, self.config.filterExpressionByDir)
+
+ -- this here defines the math functions for x, y, or z.
+ -- FIXME: are there any hidden callers which rely on these constants in parsecoordinate!?
+ updatePseudoConstants(current)
+
+ if current.x[1] ~= nil then
+ current = self.axis:preparecoordinate(current)
+ if updateLimits then
+ self.axis:updatelimitsforcoordinate(current)
+ end
+ end
+ self.axis:datapointsurveyed(current, self)
+
+ self.coordindex = self.coordindex + 1;
+end
+
+-- PUBLIC
+--
+-- @return a string containing all surveyed coordinates in the format which is accepted \pgfplotsaxisdeserializedatapointfrom
+function Plothandler:surveyedCoordsToPgfplots(axis)
+ return self:getCoordsInTeXFormat(axis, self.coords)
+end
+
+-- PUBLIC
+--
+-- @return a string containing all coordinates in the format which is accepted \pgfplotsaxisdeserializedatapointfrom
+-- @param extraSerializer a function which takes an instance of Coord and returns a string. can be nil.
+function Plothandler:getCoordsInTeXFormat(axis, coords, extraSerializer)
+ if not axis then error("arguments must not be nil") end
+ local result = {}
+ for i = 1,#coords,1 do
+ local pt = coords[i]
+ local ptstr = self:serializeCoordToPgfplots(pt)
+ local axisPrivate = axis:serializeCoordToPgfplotsPrivate(pt)
+ if extraSerializer then
+ axisPrivate = extraSerializer(pt) .. "{" .. axisPrivate .. "}"
+ end
+ local serialized = "{" .. axisPrivate .. ";" .. ptstr .. "}"
+ table.insert(result, serialized)
+ end
+ return table.concat(result)
+end
+
+-- PRIVATE
+--
+-- does the same as \pgfplotsplothandlerserializepointto
+function Plothandler:serializeCoordToPgfplots(pt)
+ return
+ toTeXstring(pt.x[1]) .. "," ..
+ toTeXstring(pt.x[2]) .. "," ..
+ toTeXstring(pt.x[3])
+end
+
+function Plothandler:visualizationPhaseInit()
+ if self.pointmetainputhandler ~=nil then
+ local rangeMin
+ local rangeMax
+ if self.config.pointmetarel == PointMetaRel.axiswide then
+ rangeMin = self.axis.axiswidemetamin
+ rangeMax = self.axis.axiswidemetamax
+ else
+ rangeMin = self.metamin
+ rangeMax = self.metamax
+ end
+ self.pointmetamap = PointMetaMap.new(rangeMin, rangeMax, self.config.warnForfilterDiscards)
+ end
+end
+
+-- PRECONDITION: visualizationPhaseInit() has been called some time before.
+function Plothandler:visualizationTransformMeta(meta)
+ if meta == nil then
+ log("could not access the 'point meta' (used for example by scatter plots and color maps). Maybe you need to add '\\addplot[point meta=y]' or something like that?\n")
+ return 1
+ else
+ return self.pointmetamap:map(meta)
+ end
+end
+
+-- Modifies coords inplace.
+-- @return nothing.
+-- see \pgfplots@apply@zbuffer@sort@coordinates
+function Plothandler:sortCoordinatesByViewDepth()
+ local coords = self.coords
+
+ local axis = self.axis
+ local viewdir = axis.viewdir
+
+ -- Step 1: compute view depth for every coordinate
+ local getVertexDepth = axis.getVertexDepth
+ for i=1,#coords do
+ local vertexDepth = getVertexDepth(axis,coords[i])
+ coords[i].vertexDepth = vertexDepth
+ end
+
+ -- Step 2: sort (inplace)
+ local comparator = function(ptA, ptB)
+ return ptA.vertexDepth > ptB.vertexDepth
+ end
+ table.sort(coords, comparator)
+
+ -- Step 3: cleanup: do not leave 'vertexDepth' inside of the array
+ for i=1,#coords do
+ coords[i].vertexDepth = nil
+ end
+end
+
+-------------------------------------------------------
+-- Generic plot handler: one which has the default survey phase
+-- It is actually the same as Plothandler...
+
+GenericPlothandler = newClassExtends(Plothandler)
+
+function GenericPlothandler:constructor(name, axis, pointmetainputhandler)
+ Plothandler.constructor(self,name, axis, pointmetainputhandler)
+end
+
+
+-------------------------------------------------------
+
+UnboundedCoords = { discard="d", jump="j" }
+
+PointMetaRel = { axiswide = 0, perplot =1 }
+
+
+-- contains static configuration entities.
+PlothandlerConfig = newClass()
+
+function PlothandlerConfig:constructor()
+ self.unboundedCoords = UnboundedCoords.discard
+ self.warnForfilterDiscards=true
+ self.pointmetarel = PointMetaRel.axiswide
+ self.updateLimits = true
+ self.filterExpressionByDir = {"", "", ""}
+ return self
+end
+
+-------------------------------------------------------
+-- a PlotVisualizer takes an input Plothandler and visualizes its results.
+--
+-- "Visualize" can mean
+-- * apply the plot handler's default visualization phase
+-- * visualize just plot marks at each of the collected coordinates
+-- * visualize just error bars at each collected coordinate
+-- * ...
+--
+
+-- this class offers basic visualization support. "Basic" means that it will merely transform and finalize input coordinates.
+PlotVisualizer = newClass()
+-- @param sourcePlotHandler an instance of Plothandler
+function PlotVisualizer:constructor(sourcePlotHandler)
+ if not sourcePlotHandler then error("arguments must not be nil") end
+ self.axis = sourcePlotHandler.axis
+ self.sourcePlotHandler=sourcePlotHandler
+ if sourcePlotHandler.plotIs3d then
+ self.qpointxyz = self.axis.qpointxyz
+ else
+ self.qpointxyz = self.axis.qpointxy
+ end
+end
+
+-- Visualizes the results.
+--
+-- @return any results. The format of the results is currently a list of Coord, but I am unsure of whether it will stay this way.
+--
+-- Note that a PlotVisualizer does _not_ modify self.sourcePlotHandler.coords
+function PlotVisualizer:getVisualizationOutput()
+ local result = {}
+ local coords = self.sourcePlotHandler.coords
+
+ -- standard z buffer choices (not mesh + sort) is currently handled in TeX
+ -- as well as other preparations
+
+ -- FIXME : stacked plots?
+ -- FIXME : error bars?
+
+ for i = 1,#coords do
+ local result_i
+ local result_i = Coord.new()
+ result_i:copy(coords[i])
+
+ if result_i.x[1] ~= nil then
+ self:visphasegetpoint(result_i)
+ else
+ self:notifyJump(result_i)
+ end
+
+ result[i] = result_i
+ end
+
+ return result
+end
+
+-- PROTECTED
+-- resembles \pgfplotsplothandlervisualizejump -- or at least that part which can be done in LUA.
+-- It does not visualize anything, but it can be used to modify the coordinate
+function PlotVisualizer:notifyJump(pt)
+ -- do nothing.
+end
+
+function PlotVisualizer:visphasegetpoint(pt)
+ pt.untransformed = {}
+ for j = 1,#pt.x do
+ pt.untransformed[j] = pt.x[j]
+ end
+
+ self.axis:visphasetransformcoordinate(pt)
+
+ -- FIXME : prepare data point (only for stacked)
+
+ pt.pgfXY = self.qpointxyz(pt.x)
+end
+
+
+
+-------------------------------------------------------
+
+-- An abstract base class for a handler of point meta.
+-- @see \pgfplotsdeclarepointmetasource
+PointMetaHandler = newClass()
+
+-- @param isSymbolic
+-- expands to either '1' or '0'
+-- A numeric source will be processed numerically in float
+-- arithmetics. Thus, the output of the @assign routine should be
+-- a macro \pgfplots@current@point@meta in float format.
+--
+-- The output of a numeric point meta source will result in meta
+-- limit updates and the final map to [0,1000] will be
+-- initialised automatically.
+--
+-- A symbolic input routine won't be processed.
+-- Default is '0'
+--
+-- @param explicitInput
+-- expands to either
+-- '1' or '0'. In case '1', it expects explicit input from the
+-- coordinate input routines. For example, 'plot file' will look for
+-- further input after the x,y,z coordinates.
+-- Default is '0'
+--
+function PointMetaHandler:constructor(isSymbolic, explicitInput)
+ self.isSymbolic =isSymbolic
+ self.explicitInput = explicitInput
+ return self
+end
+
+-- During the survey phase, this macro is expected to assign
+-- \pgfplots@current@point@meta
+-- if it is a numeric input method, it should return a
+-- floating point number.
+-- It is allowed to return an empty string to say "there is no point
+-- meta".
+-- PRECONDITION for '@assign':
+-- - the coordinate input method has already assigned its
+-- '\pgfplots@current@point@meta' (probably as raw input string).
+-- - the other input coordinates are already read.
+-- POSTCONDITION for '@assign':
+-- - \pgfplots@current@point@meta is ready for use:
+-- - EITHER a parsed floating point number
+-- - OR an empty string,
+-- - OR a symbolic string (if the issymbolic boolean is true)
+-- The default implementation is
+-- \let\pgfplots@current@point@meta=\pgfutil@empty
+--
+function PointMetaHandler.assign(pt)
+ error("This instance of PointMetaHandler is not implemented")
+end
+
+-- see \pgfplotsifpointmetaisbounded
+function PointMetaHandler:isPointMetaBounded(meta)
+ if meta == nil then
+ return false
+ end
+
+ if self.isSymbolic then
+ if meta == "" then
+ return false
+ else
+ return true
+ end
+
+ else
+ -- check the number:
+ return pgfplotsmath.isfinite(meta)
+ end
+end
+
+
+-- A PointMetaHandler which merely acquires values of either x,y, or z.
+CoordAssignmentPointMetaHandler = newClassExtends( PointMetaHandler )
+function CoordAssignmentPointMetaHandler:constructor(dir)
+ PointMetaHandler.constructor(self, false,false)
+ if not dir then error "nil argument for 'dir' is unsupported." end
+ self.dir=dir
+end
+
+function CoordAssignmentPointMetaHandler:assign(pt)
+ if not pt then error("arguments must not be nil") end
+ pt.meta = pgftonumber(pt.x[self.dir])
+end
+
+XcoordAssignmentPointMetaHandler = CoordAssignmentPointMetaHandler.new(1)
+YcoordAssignmentPointMetaHandler = CoordAssignmentPointMetaHandler.new(2)
+ZcoordAssignmentPointMetaHandler = CoordAssignmentPointMetaHandler.new(3)
+
+-- A class of PointMetaHandler which takes the 'Coord.meta' as input
+ExplicitPointMetaHandler = newClassExtends( PointMetaHandler )
+function ExplicitPointMetaHandler:constructor()
+ PointMetaHandler.constructor(self, false,true)
+end
+
+function ExplicitPointMetaHandler:assign(pt)
+ if pt.unfiltered ~= nil and pt.unfiltered.meta ~= nil then
+ pt.meta = pgftonumber(pt.unfiltered.meta)
+ end
+end
+
+-- a point meta handler which evaluates a math expression.
+-- ATTENTION: the expression cannot depend on TeX macro values
+ExpressionPointMetaHandler = newClassExtends( PointMetaHandler )
+
+-- @param expression an expression. It can rely on functions which are only available in plot context (in plot expression, x and y are typically defined)
+function ExpressionPointMetaHandler:constructor(expression)
+ PointMetaHandler.constructor(self, false,false)
+ self.expression = expression
+end
+
+function ExpressionPointMetaHandler:assign(pt)
+ pt.meta = pgfluamathparser.pgfmathparse(self.expression)
+ if not pt.meta then
+ error("point meta=" .. self.expression .. ": expression has been rejected.")
+ end
+end
+
+
+-------------------------------------------------------
+
+DatascaleTrafo = newClass()
+
+function DatascaleTrafo:constructor(exponent, shift)
+ self.exponent=exponent
+ self.shift=shift
+ self.scale = math.pow(10, exponent)
+end
+
+function DatascaleTrafo:map(x)
+ return self.scale * x - self.shift
+end
+
+
+-------------------------------------------------------
+
+-- An axis.
+Axis = newClass()
+
+function Axis:constructor()
+ self.is3d = false
+ self.clipLimits = { true, true, true}
+ self.autocomputeAllLimits = true -- FIXME : redundant!?
+ self.autocomputeMin = { true, true, true }
+ self.autocomputeMax = { true, true, true }
+ self.isLinear = { true, true, true }
+ self.min = { math.huge, math.huge, math.huge }
+ self.max = { -math.huge, -math.huge, -math.huge }
+ self.datamin = { math.huge, math.huge, math.huge }
+ self.datamax = { -math.huge, -math.huge, -math.huge }
+ self.axiswidemetamin = { math.huge, math.huge }
+ self.axiswidemetamax = { -math.huge, -math.huge }
+ -- will be populated by the TeX code:
+ self.plothandlers = {}
+ -- needed during visualization phase:
+ self.datascaleTrafo={}
+ -- needed during visualization phase: a vector of 3 elements, each is a vector of 2 elements.
+ -- self.unitvectors[1] is (\pgf@xx,\pgf@xy)
+ self.unitvectors={}
+ -- needed during visualization phase -- but only for 3d!
+ self.viewdir = {}
+ return self
+end
+
+function Axis:getVertexDepth(pt)
+ local vertexDepth = 0
+ local vertex = pt.x
+ local viewdir = self.viewdir
+ if vertex[1] == nil then
+ -- an empty coordinate. Get rid of it.
+ return 0
+ end
+
+ if #vertex ~=3 then
+ error("Cannot compute vertex depth of " .. tostring(pt) .. ": expected a 3d point but got " .. tostring(#vertex))
+ end
+ if not viewdir or #viewdir~=3 then error("got unexpected view dir " ..tostring(viewdir) ) end
+
+ for k = 1,3 do
+ local component = vertex[k]
+ vertexDepth = vertexDepth + component*viewdir[k]
+ end
+
+ return vertexDepth
+end
+
+function Axis:setunitvectors(unitvectors)
+ if not unitvectors or #unitvectors ~= 3 then error("got illegal arguments " .. tostring(unitvectors)) end
+ self.unitvectors = unitvectors
+
+ local pgfxx = unitvectors[1][1]
+ local pgfxy = unitvectors[1][2]
+ local pgfyx = unitvectors[2][1]
+ local pgfyy = unitvectors[2][2]
+ local pgfzx = unitvectors[3][1]
+ local pgfzy = unitvectors[3][2]
+
+ self.qpointxyz = function(xyz)
+ local result = {}
+ result[1] = xyz[1] * pgfxx + xyz[2] * pgfyx + xyz[3] * pgfzx
+ result[2] = xyz[1] * pgfxy + xyz[2] * pgfyy + xyz[3] * pgfzy
+ return result
+ end
+
+ if pgfxy==0 and pgfyx ==0 then
+ self.qpointxy = function(xy)
+ local result = {}
+ result[1] = xy[1] * pgfxx
+ result[2] = xy[2] * pgfyy
+ return result
+ end
+ else
+ self.qpointxy = function(xyz)
+ local result = {}
+ result[1] = xyz[1] * pgfxx + xyz[2] * pgfyx
+ result[2] = xyz[1] * pgfxy + xyz[2] * pgfyy
+ return result
+ end
+ end
+end
+
+-- PRIVATE
+--
+-- applies user transformations and logs
+--
+-- @see \pgfplots@prepared@xcoord
+function Axis:preparecoord(dir, value)
+ -- FIXME : user trafos, logs (switches off LUA backend)
+ return value
+end
+
+function Axis:filtercoord(dir, ptCoords, filterExpressionByDir)
+ if not dir or not ptCoords or not filterExpressionByDir then error("Arguments must not be nil") end
+ local result = ptCoords.x[dir]
+ if filterExpressionByDir[dir]:len() > 0 then
+
+ for j = 1,#ptCoords.x do
+ ptCoords.x[j] = pgftonumber(ptCoords.x[j])
+ end
+ local old = updatePseudoConstants(ptCoords)
+
+ result = pgfluamathparser.pgfmathparse(filterExpressionByDir[dir])
+
+ updatePseudoConstants(old)
+ end
+ return result
+end
+
+-- PRIVATE
+-- @see \pgfplotsaxisserializedatapoint@private
+function Axis:serializeCoordToPgfplotsPrivate(pt)
+ return toTeXstring(pt.meta)
+end
+
+
+-- PRIVATE
+--
+function Axis:validatecoord(dir, point)
+ if not dir or not point then error("arguments must not be nil") end
+ local result = pgftonumber(point.x[dir])
+
+ if result == nil then
+ result = nil
+ elseif result == pgfplotsmath.infty or result == -pgfplotsmath.infty or pgfplotsmath.isnan(result) then
+ result = nil
+ point.unboundedDir = dir
+ end
+
+ point.x[dir] = result
+end
+
+-- PRIVATE
+--
+-- @see \pgfplotsaxisparsecoordinate
+function Axis:parsecoordinate(pt, filterExpressionByDir)
+ -- replace empty strings by 'nil':
+ for i = 1,3 do
+ pt.x[i] = stringOrDefault(pt.x[i], nil)
+ end
+ pt.meta = stringOrDefault(pt.meta)
+
+ if pt.x[3] ~= nil then
+ self.is3d = true
+ end
+
+ local result = Coord.new()
+
+ local unfiltered = Coord.new()
+ unfiltered.x = {}
+ unfiltered.meta = pt.meta
+ for i = 1,3 do
+ unfiltered.x[i] = pt.x[i]
+ end
+ result.unfiltered = unfiltered
+
+ -- copy values such that filtercoord can access them in the same order as the TeX impl.
+ for i = 1,self:loopMax() do
+ result.x[i] = pt.x[i]
+ end
+
+ -- FIXME : self:prefilter(pt[i])
+ for i = 1,self:loopMax() do
+ result.x[i] = self:preparecoord(i, pt.x[i])
+ result.x[i] = self:filtercoord(i, result, filterExpressionByDir)
+ end
+ -- FIXME : result.x = self:xyzfilter(result.x)
+
+ for i = 1,self:loopMax() do
+ self:validatecoord(i, result)
+ end
+
+ local resultIsBounded = true
+ for i = 1,self:loopMax() do
+ if result.x[i] == nil then
+ resultIsBounded = false
+ end
+ end
+
+ if not resultIsBounded then
+ result.x = { nil, nil, nil}
+ end
+
+ return result
+end
+
+-- PROTECTED
+--
+-- @see \pgfplotsaxispreparecoordinate
+function Axis:preparecoordinate(pt)
+ -- the default "preparation" is to return it as is (no number parsing)
+ --
+ -- FIXME : data cs! Stacking!
+ return pt
+end
+
+-- PRIVATE
+--
+-- returns either 2 if this axis is 2d or 3 otherwise
+--
+-- FIXME : shouldn't this depend on the current plot handler!?
+function Axis:loopMax()
+ if self.is3d then return 3 else return 2 end
+end
+
+-- PRIVATE:
+--
+-- updates axis limits for pt
+-- @param pt an instance of Coord
+function Axis:updatelimitsforcoordinate(pt)
+ local isClipped = false
+ for i = 1,self:loopMax(),1 do
+ if self.clipLimits[i] then
+ if not self.autocomputeMin[i] then
+ isClipped = isClipped or pt.x[i] < self.min[i]
+ end
+ if not self.autocomputeMax[i] then
+ isClipped = isClipped or pt.x[i] > self.max[i]
+ end
+ end
+ end
+
+ if not isClipped then
+ for i = 1,self:loopMax(),1 do
+ if self.autocomputeMin[i] then
+ self.min[i] = math.min(pt.x[i], self.min[i])
+ end
+
+ if self.autocomputeMax[i] then
+ self.max[i] = math.max(pt.x[i], self.max[i])
+ end
+ end
+ end
+
+ -- Compute data range:
+ if self.autocomputeAllLimits then
+ -- the data range will be acquired simply from the axis
+ -- range, see below!
+ else
+ for i = 1,self:loopMax(),1 do
+ self.datamin[i] = math.min(pt.x[i], self.min[i])
+ self.datamax[i] = math.max(pt.x[i], self.max[i])
+ end
+ end
+end
+
+-- PRIVATE
+--
+-- unfinished, see its fixmes
+function Axis:addVisualizationDependencies(pt)
+ -- FIXME : 'visualization depends on'
+ -- FIXME : 'execute for finished point'
+ return pt
+end
+
+-- PROTECTED
+--
+-- indicates that a data point has been surveyed by the axis and that it can be consumed
+function Axis:datapointsurveyed(pt, plothandler)
+ if not pt or not plothandler then error("arguments must not be nil") end
+ if pt.x[1] ~= nil then
+ plothandler:surveyBeforeSetPointMeta()
+ plothandler:setperpointmeta(pt)
+ plothandler:setperpointmetalimits(pt)
+ plothandler:surveyAfterSetPointMeta()
+
+ -- FIXME : error bars
+ -- FIXME: collect first plot as tick
+
+ -- note that that TeX code would also remember the first/last coordinate in a stream.
+ -- This is unnecessary here.
+
+ local serialized = self:addVisualizationDependencies(pt)
+ plothandler:addSurveyedPoint(serialized)
+ else
+ -- COORDINATE HAS BEEN FILTERED AWAY
+ if plothandler.config.unboundedCoords == UnboundedCoords.discard then
+ plothandler.filteredCoordsAway = true
+ if plothandler.config.warnForfilterDiscards then
+ local reason
+ if pt.unboundedDir == nil then
+ reason = "of a coordinate filter."
+ else
+ reason = "it is unbounding (in " .. tostring(pt.unboundedDir) .. ")."
+ end
+ log("NOTE: coordinate " .. tostring(pt) .. " has been dropped because " .. reason .. "\n")
+ end
+ elseif plothandler.config.unboundedCoords == UnboundedCoords.jump then
+ if pt.unboundedDir == nil then
+ plothandler.filteredCoordsAway = true
+ if plothandler.config.warnForfilterDiscards then
+ local reason = "of a coordinate filter."
+ log("NOTE: coordinate " .. tostring(pt) .. " has been dropped because " .. reason .. "\n")
+ end
+ else
+ self:addSurveyedJump(plothandler, pt)
+ end
+ end
+ end
+
+ -- note that the TeX variant would increase the coord index here.
+ -- We do it it surveypoint.
+end
+
+function Axis:addSurveyedJump(plothandler, pt)
+ plothandler.plotHasJumps = true
+
+ local serialized = self:addVisualizationDependencies(pt)
+ plothandler:addSurveyedPoint(serialized)
+end
+
+local function axisLimitToTeXString(name, value)
+ if value == math.huge or value == -math.huge then
+ return ""
+ end
+ return "\\gdef" .. name .. "{" .. toTeXstring(value) .. "}"
+end
+
+local function toTeXxyzCoord(namePrefix, pt )
+ local x = toTeXstring(pt.x[1])
+ local y = toTeXstring(pt.x[2])
+ local z = toTeXstring(pt.x[3])
+ return
+ "\\gdef" .. namePrefix .. "@x{" .. x .. "}" ..
+ "\\gdef" .. namePrefix .. "@y{" .. y .. "}" ..
+ "\\gdef" .. namePrefix .. "@z{" .. z .. "}";
+end
+
+local function findFirstValidCoord(coords)
+ for i=1,#coords do
+ local pt = coords[i]
+ if pt.x[1] ~=nil then
+ return pt
+ end
+ end
+ return nil
+end
+
+local function findLastValidCoord(coords)
+ for i=#coords,1,-1 do
+ local pt = coords[i]
+ if pt.x[1] ~=nil then
+ return pt
+ end
+ end
+ return nil
+end
+
+-- PUBLIC
+--
+-- @return a set of (private) key-value pairs such that the TeX code of pgfplots can
+-- access survey results of the provided plot handler
+--
+-- @param plothandler an instance of Plothandler
+function Axis:surveyToPgfplots(plothandler)
+ local plothandlerResult = plothandler:surveyend()
+ local firstCoord = findFirstValidCoord(plothandler.coords) or Coord.new()
+ local lastCoord = findLastValidCoord(plothandler.coords) or Coord.new()
+
+ local result =
+ plothandlerResult ..
+ toTeXxyzCoord("\\pgfplots@currentplot@firstcoord", firstCoord) ..
+ toTeXxyzCoord("\\pgfplots@currentplot@lastcoord", lastCoord) ..
+ axisLimitToTeXString("\\pgfplots@metamin", plothandler.metamin) ..
+ axisLimitToTeXString("\\pgfplots@metamax", plothandler.metamax) ..
+ "\\c@pgfplots@coordindex=" .. tostring(plothandler.coordindex) .. " " ..
+ axisLimitToTeXString("\\pgfplots@xmin", self.min[1]) ..
+ axisLimitToTeXString("\\pgfplots@ymin", self.min[2]) ..
+ axisLimitToTeXString("\\pgfplots@xmax", self.max[1]) ..
+ axisLimitToTeXString("\\pgfplots@ymax", self.max[2]);
+ if self.is3d then
+ result = result ..
+ axisLimitToTeXString("\\pgfplots@zmin", self.min[3]) ..
+ axisLimitToTeXString("\\pgfplots@zmax", self.max[3]) ..
+ "\\global\\pgfplots@threedimtrue ";
+ end
+ if plothandler.plotHasJumps then
+ result = result ..
+ "\\def\\pgfplotsaxisplothasjumps{1}"
+ else
+ result = result ..
+ "\\def\\pgfplotsaxisplothasjumps{0}"
+ end
+ if plothandler.hasUnboundedPointMeta then
+ result = result ..
+ "\\def\\pgfplotsaxisplothasunboundedpointmeta{1}"
+ else
+ result = result ..
+ "\\def\\pgfplotsaxisplothasunboundedpointmeta{0}"
+ end
+ if plothandler.filteredCoordsAway then
+ result = result ..
+ "\\def\\pgfplotsaxisfilteredcoordsaway{1}"
+ else
+ result = result ..
+ "\\def\\pgfplotsaxisfilteredcoordsaway{0}"
+ end
+
+ return result
+end
+
+-- resembles \pgfplotsaxisvisphasetransformcoordinate
+function Axis:visphasetransformcoordinate(pt)
+ for i = 1,#pt.x do
+ pt.x[i] = self.datascaleTrafo[i]:map( pt.x[i] )
+ end
+end
+
+-- will be set by TeX code (in \begin{axis})
+gca = nil
+
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/tex/statistics.lua b/graphics/pgf/contrib/pgfplots/tex/statistics.lua
new file mode 100644
index 0000000000..ff264858d0
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/statistics.lua
@@ -0,0 +1,400 @@
+-- This file has dependencies to BOTH, the TeX part of pgfplots and the LUA part.
+-- It is the only LUA component with this property.
+--
+-- Its purpose is to encapsulate the communication between TeX and LUA in a central LUA file
+
+local pgfplotsmath = pgfplots.pgfplotsmath
+local error=error
+local table=table
+local string=string
+local tostring=tostring
+local type=type
+local io=io
+local mathfloor=math.floor
+local mathceil=math.ceil
+local pgfmathparse = pgfplots.pgfluamathparser.pgfmathparse
+
+do
+-- all globals will be read from/defined in pgfplots:
+local _ENV = pgfplots
+
+local pgftonumber =pgfluamathfunctions.tonumber
+
+function texBoxPlotSurveyPoint(data)
+ gca.currentPlotHandler:semiSurveyedValue(data)
+end
+
+-------------------------------------------------------
+
+PercentileEstimator = newClass()
+
+function PercentileEstimator:constructor()
+end
+
+function PercentileEstimator:getIndex(data, i)
+ local idx = i
+ if idx < 1 then idx = 1 end
+ if idx > #data then idx = #data end
+
+ local result = data[idx]
+ if not result then
+ error("Box plot percentile estimator '" .. tostring(self) .." accessed illegal array index " .. tostring(idx) .. " in array of length " .. tostring(#data))
+ end
+ return result
+end
+
+
+-- @param percentile the requested percentile. Use 0.5 for the median, 0.25 for the first quartile, 0.95 for the 95% percentile etc.
+function PercentileEstimator:getValue(percentile, data)
+ error("Use implementation of PercentileEstimator, not interface")
+end
+
+-- LegacyPgfplotsPercentileEstimator is a minimally repaired percentile estimator as it has been shipped with pgfplots.10 .
+-- I decided to mark it as deprecated because it is non-standard and not comparable with other programs.
+LegacyPgfplotsPercentileEstimator = newClassExtends(PercentileEstimator)
+function LegacyPgfplotsPercentileEstimator:constructor()
+end
+function LegacyPgfplotsPercentileEstimator:__tostring()
+ return "estimator=legacy";
+end
+function LegacyPgfplotsPercentileEstimator:getValue(percentile, data)
+ if not percentile or not data then error("Arguments must not be nil") end
+ local numCoords = #data
+ local h = numCoords * percentile
+
+ local offset_low = mathfloor(h)
+ local isInt = ( h==offset_low )
+
+ local offset_high = offset_low+1
+
+ local x_low = self:getIndex(data, offset_low)
+ local x_up = self:getIndex(data, offset_high)
+ local res = x_low
+ if not isInt then
+ res = 0.5 * (res + x_up)
+ end
+ return res
+end
+
+-- LegacyBadPgfplotsPercentileEstimator is _the_ percentile estimator as it has been shipped with pgfplots 1.10.
+-- It has bugs and is non-standard. Don't use it.
+LegacyBadPgfplotsPercentileEstimator = newClassExtends(PercentileEstimator)
+function LegacyBadPgfplotsPercentileEstimator:constructor()
+end
+function LegacyBadPgfplotsPercentileEstimator:__tostring()
+ return "estimator=legacy*";
+end
+function LegacyBadPgfplotsPercentileEstimator:getValue(percentile, data)
+ if not percentile or not data then error("Arguments must not be nil") end
+ local numCoords = #data
+ local h = (numCoords-1) * percentile
+
+ local offset_low = mathfloor(h)
+ local isInt = ( h==offset_low )
+
+ local offset_high = offset_low+1
+
+ local x_low = self:getIndex(data, offset_low+1)
+ local x_up = self:getIndex(data, offset_high+1)
+ local res = x_low
+ if not isInt then
+ res = 0.5 * (res + x_up)
+ end
+ return res
+end
+----------------
+
+ParameterizedPercentileEstimator = newClassExtends(PercentileEstimator)
+
+function ParameterizedPercentileEstimator:__tostring()
+ return "estimator=" .. tostring(self.typeFlag) ;
+end
+
+function ParameterizedPercentileEstimator:constructor( typeFlag )
+ -- http://en.wikipedia.org/wiki/Quantile
+ self.typeFlag = typeFlag
+
+ local getIndex = self.getIndex
+
+ local stdLookup = function(data, h )
+ local h_low = mathfloor(h)
+ local x_low = getIndex(self, data, h_low )
+ local x_up = getIndex(self, data, h_low +1 )
+ return x_low + (h - h_low) * (x_up - x_low)
+ end
+
+ if typeFlag == 1 then
+ -- R1
+ self.getValue = function(self, percentile, data)
+ local h= #data * percentile
+ return getIndex(self, data, mathceil(h) )
+ end
+ elseif typeFlag == 2 then
+ -- R2
+ self.getValue = function(self, percentile, data)
+ local h= #data * percentile + 0.5
+ return 0.5*(getIndex(self, data, mathceil(h-0.5)) + getIndex(self, data, mathfloor(h+0.5) ) )
+ end
+ elseif typeFlag == 3 then
+ -- R3
+ self.getValue = function(self, percentile, data)
+ local h= #data * percentile
+ return getIndex(self, data, pgfluamathfunctions.round(h) )
+ end
+ elseif typeFlag == 4 then
+ -- R4
+ self.getValue = function(self, percentile, data)
+ local h= #data * percentile
+ return stdLookup(data,h)
+ end
+ elseif typeFlag == 5 then
+ -- R5
+ self.getValue = function(self, percentile, data)
+ local h= #data * percentile + 0.5
+ return stdLookup(data,h)
+ end
+ elseif typeFlag == 6 then
+ -- R6
+ self.getValue = function(self, percentile, data)
+ local h= (#data +1) * percentile
+ return stdLookup(data,h)
+ end
+ elseif typeFlag == 7 then
+ -- R7 (Excel)
+ self.getValue = function(self, percentile, data)
+ local h= (#data -1) * percentile + 1
+ return stdLookup(data,h)
+ end
+ elseif typeFlag == 8 then
+ -- R8
+ self.getValue = function(self, percentile, data)
+ local h= (#data + 1/3) * percentile + 1/3
+ return stdLookup(data,h)
+ end
+ elseif typeFlag == 9 then
+ -- R9
+ self.getValue = function(self, percentile, data)
+ local h= (#data + 1/4) * percentile + 3/8
+ return stdLookup(data,h)
+ end
+ else
+ error("Got unsupported type '" .. tostring(typeFlag) .. "'")
+ end
+end
+
+
+getPercentileEstimator = function(estimatorName)
+ if estimatorName == "legacy" then
+ return LegacyPgfplotsPercentileEstimator.new()
+ elseif estimatorName == "legacy*" then
+ return LegacyBadPgfplotsPercentileEstimator.new()
+ elseif estimatorName == "R1" then
+ return ParameterizedPercentileEstimator.new(1)
+ elseif estimatorName == "R2" then
+ return ParameterizedPercentileEstimator.new(2)
+ elseif estimatorName == "R3" then
+ return ParameterizedPercentileEstimator.new(3)
+ elseif estimatorName == "R4" then
+ return ParameterizedPercentileEstimator.new(4)
+ elseif estimatorName == "R5" then
+ return ParameterizedPercentileEstimator.new(5)
+ elseif estimatorName == "R6" then
+ return ParameterizedPercentileEstimator.new(6)
+ elseif estimatorName == "R7" then
+ return ParameterizedPercentileEstimator.new(7)
+ elseif estimatorName == "R8" then
+ return ParameterizedPercentileEstimator.new(8)
+ elseif estimatorName == "R9" then
+ return ParameterizedPercentileEstimator.new(9)
+ end
+
+ error("Unknown estimator '" .. tostring(estimatorName) .. "'")
+end
+
+BoxPlotRequest = newClass()
+
+-- @param lowerQuartialPercent: typically 0.25
+-- @param upperQuartialPercent: typically 0.75
+-- @param whiskerRange: typically 1.5
+-- @param estimator: an instance of PercentileEstimator
+-- @param morePercentiles: either nil or an array of percentiles to compute
+function BoxPlotRequest:constructor(lowerQuartialPercent, upperQuartialPercent, whiskerRange, estimator, morePercentiles)
+ if not lowerQuartialPercent or not upperQuartialPercent or not whiskerRange or not estimator then error("Arguments must not be nil") end
+ self.lowerQuartialPercent = pgftonumber(lowerQuartialPercent)
+ self.upperQuartialPercent = pgftonumber(upperQuartialPercent)
+ self.whiskerRange = pgftonumber(whiskerRange)
+ self.estimator = estimator
+ if not morePercentiles then
+ self.morePercentiles = {}
+ else
+ self.morePercentiles = morePercentiles
+ end
+end
+
+-------------------------------------------------------
+
+BoxPlotResponse = newClass()
+
+function BoxPlotResponse:constructor()
+ self.lowerWhisker = nil
+ self.lowerQuartile = nil
+ self.median = nil
+ self.upperQuartile = nil
+ self.upperWhisker = nil
+ self.average = nil
+ self.morePercentiles = {}
+ self.outliers = {}
+end
+
+-- @param boxPlotRequest an instance of BoxPlotRequest
+-- @param data an indexed array with float values
+-- @return an instance of BoxPlotResponse
+function boxPlotCompute(boxPlotRequest, data)
+ if not boxPlotRequest or not data then error("Arguments must not be nil") end
+
+ for i = 1,#data do
+ local data_i = data[i]
+ if data_i == nil or type(data_i) ~= "number" then
+ error("Illegal input array at index " .. tostring(i) .. ": " .. tostring(data_i))
+ end
+ end
+
+ table.sort(data)
+
+ local sum = 0
+ for i = 1,#data do
+ sum = sum + data[i]
+ end
+
+ local numCoords = #data
+
+ local lowerWhisker
+ local lowerQuartile = boxPlotRequest.estimator:getValue(boxPlotRequest.lowerQuartialPercent, data)
+ local median = boxPlotRequest.estimator:getValue(0.5, data)
+ local upperQuartile = boxPlotRequest.estimator:getValue(boxPlotRequest.upperQuartialPercent, data)
+
+ local morePercentileValues = {}
+ for i = 1,#boxPlotRequest.morePercentiles do
+ morePercentileValues[i] = boxPlotRequest.estimator:getValue(boxPlotRequest.morePercentiles[i], data)
+ end
+
+ local upperWhisker
+ local average = sum / numCoords
+
+ local whiskerRange = boxPlotRequest.whiskerRange
+ local whiskerWidth = whiskerRange*(upperQuartile - lowerQuartile)
+ local upperWhiskerValue = upperQuartile + whiskerWidth
+ local lowerWhiskerValue = lowerQuartile - whiskerWidth
+
+ local outliers = {}
+ for i = 1,numCoords do
+ local current = data[i]
+ if current < lowerWhiskerValue then
+ table.insert(outliers, current)
+ else
+ lowerWhisker = current
+ break
+ end
+ end
+
+ for i = numCoords,1,-1 do
+ local current = data[i]
+ if upperWhiskerValue < current then
+ table.insert(outliers, current)
+ else
+ upperWhisker = current
+ break
+ end
+ end
+
+ local result = BoxPlotResponse.new()
+ result.lowerWhisker = lowerWhisker
+ result.lowerQuartile = lowerQuartile
+ result.median = median
+ result.upperQuartile = upperQuartile
+ result.upperWhisker = upperWhisker
+ result.average = average
+ result.morePercentiles = morePercentileValues
+ result.outliers = outliers
+
+ return result
+end
+
+-------------------------------------------------------
+-- Replicates the survey phase of \pgfplotsplothandlerboxplot
+BoxPlotPlothandler = newClassExtends(Plothandler)
+
+-- drawDirection : either "x" or "y".
+function BoxPlotPlothandler:constructor(boxPlotRequest, drawDirection, drawPosition, axis, pointmetainputhandler)
+ if not boxPlotRequest or not drawDirection or not drawPosition then error("Arguments must not be nil") end
+ Plothandler.constructor(self,"boxplot", axis, pointmetainputhandler)
+ self.boxPlotRequest = boxPlotRequest
+
+ local function evaluateDrawPosition()
+ local result = pgfmathparse(drawPosition)
+ return result
+ end
+
+ if drawDirection == "x" then
+ self.boxplotsetxy = function (a,b) return a,evaluateDrawPosition() + b end
+ elseif drawDirection == "y" then
+ self.boxplotsetxy = function (a,b) return evaluateDrawPosition() + b,a end
+ else
+ error("Illegal argument drawDirection="..tostring(drawDirection) )
+ end
+end
+
+function BoxPlotPlothandler:surveystart()
+ self.boxplotInput = {}
+ self.boxplotSurveyMode = true
+end
+
+
+function BoxPlotPlothandler:surveyend()
+ self.boxplotSurveyMode = false
+
+ local computed = boxPlotCompute( self.boxPlotRequest, self.boxplotInput )
+
+ local texResult =
+ "\\pgfplotsplothandlersurveyend@boxplot@set{lower whisker}{" .. toTeXstring(computed.lowerWhisker) .. "}" ..
+ "\\pgfplotsplothandlersurveyend@boxplot@set{lower quartile}{" .. toTeXstring(computed.lowerQuartile) .. "}" ..
+ "\\pgfplotsplothandlersurveyend@boxplot@set{median}{" .. toTeXstring(computed.median) .. "}" ..
+ "\\pgfplotsplothandlersurveyend@boxplot@set{upper quartile}{" .. toTeXstring(computed.upperQuartile) .. "}" ..
+ "\\pgfplotsplothandlersurveyend@boxplot@set{upper whisker}{" .. toTeXstring(computed.upperWhisker) .. "}" ..
+ "\\pgfplotsplothandlersurveyend@boxplot@set{sample size}{" .. toTeXstring(# self.boxplotInput) .. "}"
+
+ self.boxplotInput = nil
+ Plothandler.surveystart(self)
+
+ local outliers = computed.outliers
+ for i =1,#outliers do
+ local outlier = outliers[i]
+ local pt = Coord.new()
+ -- this here resembles \pgfplotsplothandlersurveypoint@boxplot@prepared when it is invoked during boxplot:
+ local X,Y = self.boxplotsetxy(outlier, 0)
+ pt.x = { X, Y, nil }
+ Plothandler.surveypoint(self,pt)
+ end
+ Plothandler.surveyend(self)
+
+ return texResult
+end
+
+function BoxPlotPlothandler:semiSurveyedValue(data)
+ local result = pgftonumber(data)
+ if result then
+ table.insert( self.boxplotInput, result )
+ end
+end
+
+function BoxPlotPlothandler:surveypoint(pt)
+ if self.boxplotSurveyMode then
+ error("Unsupported Operation encountered: box plot survey in LUA are only in PARTIAL mode (i.e. only if almost all has been prepared in TeX. Use 'lua backend=false' to get around this.")
+ else
+ Plothandler.surveypoint(self,pt)
+ end
+end
+
+-------------------------------------------------------
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/tex/streamer.lua b/graphics/pgf/contrib/pgfplots/tex/streamer.lua
new file mode 100644
index 0000000000..39baf5ceca
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/streamer.lua
@@ -0,0 +1,195 @@
+-- Contains coordinate streamers, i.e. classes which generate coordinates and stream them to some output stream
+
+local math=math
+local pgfplotsmath = pgfplots.pgfplotsmath
+local type=type
+local tostring=tostring
+local error=error
+local table=table
+
+do
+-- all globals will be read from/defined in pgfplots:
+local _ENV = pgfplots
+-----------------------------------
+
+CoordOutputStream = newClass()
+
+function CoordOutputStream:constructor()
+end
+
+-- @param pt an instance of Coord
+function CoordOutputStream:coord(pt)
+end
+
+-----------------------------------
+
+SurveyCoordOutputStream = newClassExtends(CoordOutputStream)
+
+function SurveyCoordOutputStream:constructor(targetPlothandler)
+ if not targetPlothandler then error("arguments must not be nil") end
+ self.plothandler= targetPlothandler
+end
+
+function SurveyCoordOutputStream:coord(pt)
+ self.plothandler:surveypoint(pt)
+end
+
+-------------
+-- This is a partial reimplementation of \addplot expression: it samples points -- but entirely in LUA. Only the results are serialized back to TeX.
+
+AddplotExpressionCoordinateGenerator = newClass()
+
+function AddplotExpressionCoordinateGenerator:constructor(coordoutputstream, expressionsByDimension, domainMin, domainMax, samples, variableNames)
+ if not coordoutputstream or not expressionsByDimension or not domainMin or not domainMax or not samples or not variableNames then error("arguments must not be nil") end
+ if #variableNames ~= 2 then error("Expected 2 variableNames") end
+ self.coordoutputstream = coordoutputstream
+ self.is3d = #expressionsByDimension == 3
+ self.expressions = expressionsByDimension
+ self.domainMin = domainMin
+ self.domainMax = domainMax
+ self.samples = samples
+ self.variableNames = variableNames
+
+ -- log("initialized " .. tostring(self) .. "\n")
+end
+
+-- @return true on success or false if the operation cannot be carried out.
+-- this method is a replicate of \pgfplots@addplotimpl@expression@@
+function AddplotExpressionCoordinateGenerator:generateCoords()
+ local stringToFunctionMap = pgfluamathfunctions.stringToFunctionMap
+ -- create a backup of the 'x' and 'y' math expressions which
+ -- have been defined in \pgfplots@coord@stream@start:
+ local old_global_function_x = stringToFunctionMap["x"]
+ local old_global_function_y = stringToFunctionMap["y"]
+
+ local coordoutputstream = self.coordoutputstream
+ local is3d = self.is3d
+ local expressions = self.expressions
+ local xExpr = expressions[1]
+ local yExpr = expressions[2]
+ local zExpr = expressions[3]
+
+ local domainMin = self.domainMin
+ local domainMax = self.domainMax
+ local samples = self.samples
+ local h = {}
+ for i = 1,#domainMin do
+ h[i] = (domainMax[i] - domainMin[i]) / (samples[i]-1)
+ end
+
+ local variableNames = self.variableNames
+
+ local x,y
+ local sampleLine = #samples==1
+
+ local function pseudoconstantx() return x end
+ local pseudoconstanty
+ if sampleLine then
+ if yExpr ~= variableNames[2] then
+ -- suppress the warning - we want to allow (x,y,x^2) in this case.
+ pseudoconstanty = function() return 0 end
+ else
+ local didWarn = false
+ pseudoconstanty = function()
+ if not didWarn then
+ log("Sorry, you can't use 'y' in this context. PGFPlots expected to sample a line, not a mesh. Please use the [mesh] option combined with [samples y>0] and [domain y!=0:0] to indicate a twodimensional input domain\n")
+ didWarn = true
+ end
+ return 0
+ end
+ end
+ else
+ pseudoconstanty = function() return y end
+ end
+
+ local pgfmathparse = pgfluamathparser.pgfmathparse
+ local prepareX
+ if xExpr == variableNames[1] then
+ prepareX = function() return x end
+ else
+ prepareX = function() return pgfmathparse(xExpr) end
+ end
+
+ local prepareY
+ if yExpr == variableNames[2] then
+ prepareY = function() return y end
+ else
+ prepareY = function() return pgfmathparse(yExpr) end
+ end
+
+ local function computeXYZ()
+ stringToFunctionMap[variableNames[1]] = pseudoconstantx
+ stringToFunctionMap[variableNames[2]] = pseudoconstanty
+ local X = prepareX()
+ local Y = prepareY()
+ local Z = nil
+ if is3d then
+ Z = pgfmathparse(zExpr)
+ else
+ -- FIXME BUG: we need to do something else with 'Z' if this is a 2d plot inside of a 3d axis!
+ end
+
+ local pt = Coord.new()
+ pt.x = { X, Y, Z}
+
+ -- restore 'x' and 'y'
+ -- FIXME : defining the resulting x/y coordinates as 'x' and 'y' constants was a really really bad idea in the first place :-(
+ stringToFunctionMap["x"] = old_global_function_x
+ stringToFunctionMap["y"] = old_global_function_y
+
+ coordoutputstream:coord(pt)
+ end
+
+ if not sampleLine then
+ local xmin = domainMin[1]
+ local ymin = domainMin[2]
+ local hx = h[1]
+ local hy = h[2]
+ local max_i = samples[1]-1
+ local max_j = samples[2]-1
+ -- samples twodimensionally (a lattice):
+ for j = 0,max_j do
+ -- FIXME : pgfplots@plot@data@notify@next@y
+ y = ymin + j*hy
+ -- log("" .. j .. "\n")
+ for i = 0,max_i do
+ -- FIXME : pgfplots@plot@data@notify@next@x
+ x = xmin + i*hx
+ computeXYZ()
+ end
+ -- FIXME : \pgfplotsplothandlernotifyscanlinecomplete
+ end
+ else
+ local xmin = domainMin[1]
+ local hx = h[1]
+ local max_i = samples[1]-1
+ for i = 0,max_i do
+ -- FIXME : pgfplots@plot@data@notify@next@x
+ x = xmin + i*hx
+ computeXYZ()
+ end
+ end
+
+ stringToFunctionMap[variableNames[1]] = nil
+ stringToFunctionMap[variableNames[2]] = nil
+ return true
+end
+
+function AddplotExpressionCoordinateGenerator:__tostring()
+ local result = "AddplotExpressionCoordinateGenerator[\n"
+ result = result .. "\n variable(s)=" .. self.variableNames[1] .. " " .. self.variableNames[2]
+ result = result .. "\n expressions="
+ for i = 1,#self.expressions do
+ result = result .. self.expressions[i] ..", "
+ end
+ result = result .. "\n domain=" .. self.domainMin[1] .. ":" .. self.domainMax[1]
+ result = result .. "\n samples=" .. self.samples[1]
+ if #self.domainMin == 2 then
+ result = result .. "\n domain y=" .. self.domainMin[2] .. ":" .. self.domainMax[2]
+ result = result .. "\n samples y=" .. self.samples[2]
+ end
+ result = result .. "]"
+ return result
+end
+
+end
diff --git a/graphics/pgf/contrib/pgfplots/tex/t-pgfplots.tex b/graphics/pgf/contrib/pgfplots/tex/t-pgfplots.tex
new file mode 100644
index 0000000000..4347f6c7e4
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/t-pgfplots.tex
@@ -0,0 +1,81 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\writestatus{loading}{ConTeXt User Module / Pgfplots}
+
+\unprotect
+
+\input pgfplots.revision.tex
+\startmodule [pgfplots]
+
+% regarding the t-prefix: ensure that we do not accidentally load the plain tex tikz.tex file...
+\usemodule[t][tikz]
+\usetikzlibrary[plotmarks]
+
+\edef\tikzatcode{\the\catcode`\@}
+\edef\tikzbarcode{\the\catcode`\|}
+\edef\tikzexclaimcode{\the\catcode`\!}
+\catcode`\@=11
+\catcode`\|=12
+\catcode`\!=12
+
+
+
+\input pgfplots.code.tex
+
+\def\pgfplotsincludegraphics[#1]#2{\externalfigure[#2][#1]}
+\pgfkeys{/pgfplots/plot graphics/includegraphics cmd=\pgfplotsincludegraphics}
+
+
+\let\pgfplots@ORIG@tikz@installcommands@before@context=\tikz@installcommands
+
+\def\tikz@installcommands{%
+ \pgfplots@ORIG@tikz@installcommands@before@context
+ %
+ \let\startaxis=\pgfplots@environment@axis
+ \let\stopaxis=\endpgfplots@environment@axis
+ %
+ \let\startsemilogxaxis=\pgfplots@environment@semilogxaxis
+ \let\stopsemilogxaxis=\endpgfplots@environment@semilogxaxis
+ %
+ \let\startsemilogyaxis=\pgfplots@environment@semilogyaxis
+ \let\stopsemilogyaxis=\endpgfplots@environment@semilogyaxis
+ %
+ \let\startloglogaxis=\pgfplots@environment@loglogaxis
+ \let\stoploglogaxis=\endpgfplots@environment@loglogaxis
+ %
+ \def\startpgfplotsinterruptdatabb{\pgfplotsinterruptdatabb}%
+ \def\stoppgfplotsinterruptdatabb{\endpgfplotsinterruptdatabb}%
+}%
+
+\catcode`\@=\tikzatcode
+\catcode`\|=\tikzbarcode
+\catcode`\!=\tikzexclaimcode
+
+\stopmodule
+
+\protect
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/t-pgfplotstable.tex b/graphics/pgf/contrib/pgfplots/tex/t-pgfplotstable.tex
new file mode 100644
index 0000000000..7351363a09
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/t-pgfplotstable.tex
@@ -0,0 +1,41 @@
+%--------------------------------------------
+%
+% Package pgfplotstable
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\writestatus{loading}{ConTeXt User Module / Pgfplotstable}
+
+\unprotect
+
+\startmodule [pgfplotstable]
+
+\usemodule[pgfplots]
+
+% FIXME :
+%\def\pgfplots@texdist@protect{\protect}%
+
+\input pgfplotstable.code.tex
+
+
+\stopmodule
+
+\protect
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolorbrewer.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolorbrewer.code.tex
new file mode 100644
index 0000000000..b106a506f9
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolorbrewer.code.tex
@@ -0,0 +1,536 @@
+% Color schemes as obtained from http://colorbrewer2.org/
+%
+% Apache-Style Software License for ColorBrewer software and ColorBrewer Color
+% Schemes
+%
+% Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State
+% University.
+%
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+% http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+%
+% Redistribution and use in source and binary forms, with or without
+% modification, are permitted provided that the following conditions are met:
+% 1. Redistributions as source code must retain the above copyright notice, this
+% list of conditions and the following disclaimer.
+% 2. The end-user documentation included with the redistribution, if any, must
+% include the following acknowledgment: This product includes color
+% specifications and designs developed by Cynthia Brewer
+% (http://colorbrewer.org/). Alternately, this acknowledgment may appear in the
+% software itself, if and wherever such third-party acknowledgments normally
+% appear.
+% 3. The name "ColorBrewer" must not be used to endorse or promote products
+% derived from this software without prior written permission. For written
+% permission, please contact Cynthia Brewer at cbrewer@psu.edu.
+% 4. Products derived from this software may not be called "ColorBrewer", nor
+% may "ColorBrewer" appear in their name, without prior written permission of
+% Cynthia Brewer.
+
+% =============================================================================
+% sequential color schemes
+% =============================================================================
+
+% Multi hue
+
+\pgfutil@definecolor{BuGn-A}{RGB}{247,252,253}
+\pgfutil@definecolor{BuGn-B}{RGB}{237,248,251}
+\pgfutil@definecolor{BuGn-C}{RGB}{229,245,249}
+\pgfutil@definecolor{BuGn-D}{RGB}{204,236,230}
+\pgfutil@definecolor{BuGn-E}{RGB}{178,226,226}
+\pgfutil@definecolor{BuGn-F}{RGB}{153,216,201}
+\pgfutil@definecolor{BuGn-G}{RGB}{102,194,164}
+\pgfutil@definecolor{BuGn-H}{RGB}{65,174,118}
+\pgfutil@definecolor{BuGn-I}{RGB}{44,162,95}
+\pgfutil@definecolor{BuGn-J}{RGB}{35,139,69}
+\pgfutil@definecolor{BuGn-K}{RGB}{0,109,44}
+\pgfutil@definecolor{BuGn-L}{RGB}{0,88,36}
+\pgfutil@definecolor{BuGn-M}{RGB}{0,68,27}
+
+\pgfutil@definecolor{BuPu-A}{RGB}{247,252,253}
+\pgfutil@definecolor{BuPu-B}{RGB}{237,248,251}
+\pgfutil@definecolor{BuPu-C}{RGB}{224,236,244}
+\pgfutil@definecolor{BuPu-D}{RGB}{191,211,230}
+\pgfutil@definecolor{BuPu-E}{RGB}{179,205,227}
+\pgfutil@definecolor{BuPu-F}{RGB}{158,188,218}
+\pgfutil@definecolor{BuPu-G}{RGB}{140,150,198}
+\pgfutil@definecolor{BuPu-H}{RGB}{140,107,177}
+\pgfutil@definecolor{BuPu-I}{RGB}{136,86,167}
+\pgfutil@definecolor{BuPu-J}{RGB}{136,65,157}
+\pgfutil@definecolor{BuPu-K}{RGB}{129,15,124}
+\pgfutil@definecolor{BuPu-L}{RGB}{110,1,107}
+\pgfutil@definecolor{BuPu-M}{RGB}{77,0,75}
+
+\pgfutil@definecolor{GnBu-A}{RGB}{247,252,240}
+\pgfutil@definecolor{GnBu-B}{RGB}{240,249,232}
+\pgfutil@definecolor{GnBu-C}{RGB}{224,243,219}
+\pgfutil@definecolor{GnBu-D}{RGB}{204,235,197}
+\pgfutil@definecolor{GnBu-E}{RGB}{186,228,188}
+\pgfutil@definecolor{GnBu-F}{RGB}{168,221,181}
+\pgfutil@definecolor{GnBu-G}{RGB}{123,204,196}
+\pgfutil@definecolor{GnBu-H}{RGB}{78,179,211}
+\pgfutil@definecolor{GnBu-I}{RGB}{67,162,202}
+\pgfutil@definecolor{GnBu-J}{RGB}{43,140,190}
+\pgfutil@definecolor{GnBu-K}{RGB}{8,104,172}
+\pgfutil@definecolor{GnBu-L}{RGB}{8,88,158}
+\pgfutil@definecolor{GnBu-M}{RGB}{8,64,129}
+
+\pgfutil@definecolor{OrRd-A}{RGB}{255,247,236}
+\pgfutil@definecolor{OrRd-B}{RGB}{254,240,217}
+\pgfutil@definecolor{OrRd-C}{RGB}{254,232,200}
+\pgfutil@definecolor{OrRd-D}{RGB}{253,212,158}
+\pgfutil@definecolor{OrRd-E}{RGB}{253,204,138}
+\pgfutil@definecolor{OrRd-F}{RGB}{253,187,132}
+\pgfutil@definecolor{OrRd-G}{RGB}{252,141,89}
+\pgfutil@definecolor{OrRd-H}{RGB}{239,101,72}
+\pgfutil@definecolor{OrRd-I}{RGB}{227,74,51}
+\pgfutil@definecolor{OrRd-J}{RGB}{215,48,31}
+\pgfutil@definecolor{OrRd-K}{RGB}{179,0,0}
+\pgfutil@definecolor{OrRd-L}{RGB}{153,0,0}
+\pgfutil@definecolor{OrRd-M}{RGB}{127,0,0}
+
+\pgfutil@definecolor{PuBu-A}{RGB}{255,247,251}
+\pgfutil@definecolor{PuBu-B}{RGB}{241,238,246}
+\pgfutil@definecolor{PuBu-C}{RGB}{236,231,242}
+\pgfutil@definecolor{PuBu-D}{RGB}{208,209,230}
+\pgfutil@definecolor{PuBu-E}{RGB}{189,201,225}
+\pgfutil@definecolor{PuBu-F}{RGB}{166,189,219}
+\pgfutil@definecolor{PuBu-G}{RGB}{116,169,207}
+\pgfutil@definecolor{PuBu-H}{RGB}{54,144,192}
+\pgfutil@definecolor{PuBu-I}{RGB}{43,140,190}
+\pgfutil@definecolor{PuBu-J}{RGB}{5,112,176}
+\pgfutil@definecolor{PuBu-K}{RGB}{4,90,141}
+\pgfutil@definecolor{PuBu-L}{RGB}{3,78,123}
+\pgfutil@definecolor{PuBu-M}{RGB}{2,56,88}
+
+\pgfutil@definecolor{PuBuGn-A}{RGB}{255,247,251}
+\pgfutil@definecolor{PuBuGn-B}{RGB}{246,239,247}
+\pgfutil@definecolor{PuBuGn-C}{RGB}{236,226,240}
+\pgfutil@definecolor{PuBuGn-D}{RGB}{208,209,230}
+\pgfutil@definecolor{PuBuGn-E}{RGB}{189,201,225}
+\pgfutil@definecolor{PuBuGn-F}{RGB}{166,189,219}
+\pgfutil@definecolor{PuBuGn-G}{RGB}{103,169,207}
+\pgfutil@definecolor{PuBuGn-H}{RGB}{54,144,192}
+\pgfutil@definecolor{PuBuGn-I}{RGB}{28,144,153}
+\pgfutil@definecolor{PuBuGn-J}{RGB}{2,129,138}
+\pgfutil@definecolor{PuBuGn-K}{RGB}{1,108,89}
+\pgfutil@definecolor{PuBuGn-L}{RGB}{1,100,80}
+\pgfutil@definecolor{PuBuGn-M}{RGB}{1,70,54}
+
+\pgfutil@definecolor{PuRd-A}{RGB}{247,244,249}
+\pgfutil@definecolor{PuRd-B}{RGB}{241,238,246}
+\pgfutil@definecolor{PuRd-C}{RGB}{231,225,239}
+\pgfutil@definecolor{PuRd-D}{RGB}{212,185,218}
+\pgfutil@definecolor{PuRd-E}{RGB}{215,181,216}
+\pgfutil@definecolor{PuRd-F}{RGB}{201,148,199}
+\pgfutil@definecolor{PuRd-G}{RGB}{223,101,176}
+\pgfutil@definecolor{PuRd-H}{RGB}{231,41,138}
+\pgfutil@definecolor{PuRd-I}{RGB}{221,28,119}
+\pgfutil@definecolor{PuRd-J}{RGB}{206,18,86}
+\pgfutil@definecolor{PuRd-K}{RGB}{152,0,67}
+\pgfutil@definecolor{PuRd-L}{RGB}{145,0,63}
+\pgfutil@definecolor{PuRd-M}{RGB}{103,0,31}
+
+\pgfutil@definecolor{RdPu-A}{RGB}{255,247,243}
+\pgfutil@definecolor{RdPu-B}{RGB}{254,235,226}
+\pgfutil@definecolor{RdPu-C}{RGB}{253,224,221}
+\pgfutil@definecolor{RdPu-D}{RGB}{252,197,192}
+\pgfutil@definecolor{RdPu-E}{RGB}{251,180,185}
+\pgfutil@definecolor{RdPu-F}{RGB}{250,159,181}
+\pgfutil@definecolor{RdPu-G}{RGB}{247,104,161}
+\pgfutil@definecolor{RdPu-H}{RGB}{221,52,151}
+\pgfutil@definecolor{RdPu-I}{RGB}{197,27,138}
+\pgfutil@definecolor{RdPu-J}{RGB}{174,1,126}
+\pgfutil@definecolor{RdPu-K}{RGB}{122,1,119}
+\pgfutil@definecolor{RdPu-L}{RGB}{122,1,119}
+\pgfutil@definecolor{RdPu-M}{RGB}{73,0,106}
+
+\pgfutil@definecolor{YlGn-A}{RGB}{255,255,229}
+\pgfutil@definecolor{YlGn-B}{RGB}{255,255,204}
+\pgfutil@definecolor{YlGn-C}{RGB}{247,252,185}
+\pgfutil@definecolor{YlGn-D}{RGB}{217,240,163}
+\pgfutil@definecolor{YlGn-E}{RGB}{194,230,153}
+\pgfutil@definecolor{YlGn-F}{RGB}{173,221,142}
+\pgfutil@definecolor{YlGn-G}{RGB}{120,198,121}
+\pgfutil@definecolor{YlGn-H}{RGB}{65,171,93}
+\pgfutil@definecolor{YlGn-I}{RGB}{49,163,84}
+\pgfutil@definecolor{YlGn-J}{RGB}{35,132,67}
+\pgfutil@definecolor{YlGn-K}{RGB}{0,104,55}
+\pgfutil@definecolor{YlGn-L}{RGB}{0,90,50}
+\pgfutil@definecolor{YlGn-M}{RGB}{0,69,41}
+
+\pgfutil@definecolor{YlGnBu-A}{RGB}{255,255,217}
+\pgfutil@definecolor{YlGnBu-B}{RGB}{255,255,204}
+\pgfutil@definecolor{YlGnBu-C}{RGB}{237,248,177}
+\pgfutil@definecolor{YlGnBu-D}{RGB}{199,233,180}
+\pgfutil@definecolor{YlGnBu-E}{RGB}{161,218,180}
+\pgfutil@definecolor{YlGnBu-F}{RGB}{127,205,187}
+\pgfutil@definecolor{YlGnBu-G}{RGB}{65,182,196}
+\pgfutil@definecolor{YlGnBu-H}{RGB}{29,145,192}
+\pgfutil@definecolor{YlGnBu-I}{RGB}{44,127,184}
+\pgfutil@definecolor{YlGnBu-J}{RGB}{34,94,168}
+\pgfutil@definecolor{YlGnBu-K}{RGB}{37,52,148}
+\pgfutil@definecolor{YlGnBu-L}{RGB}{12,44,132}
+\pgfutil@definecolor{YlGnBu-M}{RGB}{8,29,88}
+
+\pgfutil@definecolor{YlOrBr-A}{RGB}{255,255,229}
+\pgfutil@definecolor{YlOrBr-B}{RGB}{255,255,212}
+\pgfutil@definecolor{YlOrBr-C}{RGB}{255,247,188}
+\pgfutil@definecolor{YlOrBr-D}{RGB}{254,227,145}
+\pgfutil@definecolor{YlOrBr-E}{RGB}{254,217,142}
+\pgfutil@definecolor{YlOrBr-F}{RGB}{254,196,79}
+\pgfutil@definecolor{YlOrBr-G}{RGB}{254,153,41}
+\pgfutil@definecolor{YlOrBr-H}{RGB}{236,112,20}
+\pgfutil@definecolor{YlOrBr-I}{RGB}{217,95,14}
+\pgfutil@definecolor{YlOrBr-J}{RGB}{204,76,2}
+\pgfutil@definecolor{YlOrBr-K}{RGB}{153,52,4}
+\pgfutil@definecolor{YlOrBr-L}{RGB}{140,45,4}
+\pgfutil@definecolor{YlOrBr-M}{RGB}{102,37,6}
+
+\pgfutil@definecolor{YlOrRd-A}{RGB}{255,255,204}
+\pgfutil@definecolor{YlOrRd-B}{RGB}{255,255,178}
+\pgfutil@definecolor{YlOrRd-C}{RGB}{255,237,160}
+\pgfutil@definecolor{YlOrRd-D}{RGB}{254,217,118}
+\pgfutil@definecolor{YlOrRd-E}{RGB}{254,204,92}
+\pgfutil@definecolor{YlOrRd-F}{RGB}{254,178,76}
+\pgfutil@definecolor{YlOrRd-G}{RGB}{253,141,60}
+\pgfutil@definecolor{YlOrRd-H}{RGB}{252,78,42}
+\pgfutil@definecolor{YlOrRd-I}{RGB}{240,59,32}
+\pgfutil@definecolor{YlOrRd-J}{RGB}{227,26,28}
+\pgfutil@definecolor{YlOrRd-K}{RGB}{189,0,38}
+\pgfutil@definecolor{YlOrRd-L}{RGB}{177,0,38}
+\pgfutil@definecolor{YlOrRd-M}{RGB}{128,0,38}
+
+% -----------------------------------------------------------------------------
+% Single hue
+
+\pgfutil@definecolor{Blues-A}{RGB}{247,251,255}
+\pgfutil@definecolor{Blues-B}{RGB}{239,243,255}
+\pgfutil@definecolor{Blues-C}{RGB}{222,235,247}
+\pgfutil@definecolor{Blues-D}{RGB}{198,219,239}
+\pgfutil@definecolor{Blues-E}{RGB}{189,215,231}
+\pgfutil@definecolor{Blues-F}{RGB}{158,202,225}
+\pgfutil@definecolor{Blues-G}{RGB}{107,174,214}
+\pgfutil@definecolor{Blues-H}{RGB}{66,146,198}
+\pgfutil@definecolor{Blues-I}{RGB}{49,130,189}
+\pgfutil@definecolor{Blues-J}{RGB}{33,113,181}
+\pgfutil@definecolor{Blues-K}{RGB}{8,81,156}
+\pgfutil@definecolor{Blues-L}{RGB}{8,69,148}
+\pgfutil@definecolor{Blues-M}{RGB}{8,48,107}
+
+\pgfutil@definecolor{Greens-A}{RGB}{247,252,245}
+\pgfutil@definecolor{Greens-B}{RGB}{237,248,233}
+\pgfutil@definecolor{Greens-C}{RGB}{229,245,224}
+\pgfutil@definecolor{Greens-D}{RGB}{199,233,192}
+\pgfutil@definecolor{Greens-E}{RGB}{186,228,179}
+\pgfutil@definecolor{Greens-F}{RGB}{161,217,155}
+\pgfutil@definecolor{Greens-G}{RGB}{116,196,118}
+\pgfutil@definecolor{Greens-H}{RGB}{65,171,93}
+\pgfutil@definecolor{Greens-I}{RGB}{49,163,84}
+\pgfutil@definecolor{Greens-J}{RGB}{35,139,69}
+\pgfutil@definecolor{Greens-K}{RGB}{0,109,44}
+\pgfutil@definecolor{Greens-L}{RGB}{0,90,50}
+\pgfutil@definecolor{Greens-M}{RGB}{0,68,27}
+
+\pgfutil@definecolor{Greys-A}{RGB}{255,255,255}
+\pgfutil@definecolor{Greys-B}{RGB}{247,247,247}
+\pgfutil@definecolor{Greys-C}{RGB}{240,240,240}
+\pgfutil@definecolor{Greys-D}{RGB}{217,217,217}
+\pgfutil@definecolor{Greys-E}{RGB}{204,204,204}
+\pgfutil@definecolor{Greys-F}{RGB}{189,189,189}
+\pgfutil@definecolor{Greys-G}{RGB}{150,150,150}
+\pgfutil@definecolor{Greys-H}{RGB}{115,115,115}
+\pgfutil@definecolor{Greys-I}{RGB}{99,99,99}
+\pgfutil@definecolor{Greys-J}{RGB}{82,82,82}
+\pgfutil@definecolor{Greys-K}{RGB}{37,37,37}
+\pgfutil@definecolor{Greys-L}{RGB}{37,37,37}
+\pgfutil@definecolor{Greys-M}{RGB}{0,0,0}
+
+\pgfutil@definecolor{Oranges-A}{RGB}{255,245,235}
+\pgfutil@definecolor{Oranges-B}{RGB}{254,237,222}
+\pgfutil@definecolor{Oranges-C}{RGB}{254,230,206}
+\pgfutil@definecolor{Oranges-D}{RGB}{253,208,162}
+\pgfutil@definecolor{Oranges-E}{RGB}{253,190,133}
+\pgfutil@definecolor{Oranges-F}{RGB}{253,174,107}
+\pgfutil@definecolor{Oranges-G}{RGB}{253,141,60}
+\pgfutil@definecolor{Oranges-H}{RGB}{241,105,19}
+\pgfutil@definecolor{Oranges-I}{RGB}{230,85,13}
+\pgfutil@definecolor{Oranges-J}{RGB}{217,71,1}
+\pgfutil@definecolor{Oranges-K}{RGB}{166,54,3}
+\pgfutil@definecolor{Oranges-L}{RGB}{140,45,4}
+\pgfutil@definecolor{Oranges-M}{RGB}{127,39,4}
+
+\pgfutil@definecolor{Purples-A}{RGB}{252,251,253}
+\pgfutil@definecolor{Purples-B}{RGB}{242,240,247}
+\pgfutil@definecolor{Purples-C}{RGB}{239,237,245}
+\pgfutil@definecolor{Purples-D}{RGB}{218,218,235}
+\pgfutil@definecolor{Purples-E}{RGB}{203,201,226}
+\pgfutil@definecolor{Purples-F}{RGB}{188,189,220}
+\pgfutil@definecolor{Purples-G}{RGB}{158,154,200}
+\pgfutil@definecolor{Purples-H}{RGB}{128,125,186}
+\pgfutil@definecolor{Purples-I}{RGB}{117,107,177}
+\pgfutil@definecolor{Purples-J}{RGB}{106,81,163}
+\pgfutil@definecolor{Purples-K}{RGB}{84,39,143}
+\pgfutil@definecolor{Purples-L}{RGB}{74,20,134}
+\pgfutil@definecolor{Purples-M}{RGB}{63,0,125}
+
+\pgfutil@definecolor{Reds-A}{RGB}{255,245,240}
+\pgfutil@definecolor{Reds-B}{RGB}{254,229,217}
+\pgfutil@definecolor{Reds-C}{RGB}{254,224,210}
+\pgfutil@definecolor{Reds-D}{RGB}{252,187,161}
+\pgfutil@definecolor{Reds-E}{RGB}{252,174,145}
+\pgfutil@definecolor{Reds-F}{RGB}{252,146,114}
+\pgfutil@definecolor{Reds-G}{RGB}{251,106,74}
+\pgfutil@definecolor{Reds-H}{RGB}{239,59,44}
+\pgfutil@definecolor{Reds-I}{RGB}{222,45,38}
+\pgfutil@definecolor{Reds-J}{RGB}{203,24,29}
+\pgfutil@definecolor{Reds-K}{RGB}{165,15,21}
+\pgfutil@definecolor{Reds-L}{RGB}{153,0,13}
+\pgfutil@definecolor{Reds-M}{RGB}{103,0,13}
+
+
+% =============================================================================
+% diverging color schemes
+% =============================================================================
+
+\pgfutil@definecolor{BrBG-A}{RGB}{84,48,5}
+\pgfutil@definecolor{BrBG-B}{RGB}{140,81,10}
+\pgfutil@definecolor{BrBG-C}{RGB}{166,97,26}
+\pgfutil@definecolor{BrBG-D}{RGB}{191,129,45}
+\pgfutil@definecolor{BrBG-E}{RGB}{216,179,101}
+\pgfutil@definecolor{BrBG-F}{RGB}{223,194,125}
+\pgfutil@definecolor{BrBG-G}{RGB}{246,232,195}
+\pgfutil@definecolor{BrBG-H}{RGB}{245,245,245}
+\pgfutil@definecolor{BrBG-I}{RGB}{199,234,229}
+\pgfutil@definecolor{BrBG-J}{RGB}{128,205,193}
+\pgfutil@definecolor{BrBG-K}{RGB}{90,180,172}
+\pgfutil@definecolor{BrBG-L}{RGB}{53,151,143}
+\pgfutil@definecolor{BrBG-M}{RGB}{1,133,113}
+\pgfutil@definecolor{BrBG-N}{RGB}{1,102,94}
+\pgfutil@definecolor{BrBG-O}{RGB}{0,60,48}
+
+\pgfutil@definecolor{PiYG-A}{RGB}{142,1,82}
+\pgfutil@definecolor{PiYG-B}{RGB}{197,27,125}
+\pgfutil@definecolor{PiYG-C}{RGB}{208,28,139}
+\pgfutil@definecolor{PiYG-D}{RGB}{222,119,174}
+\pgfutil@definecolor{PiYG-E}{RGB}{233,163,201}
+\pgfutil@definecolor{PiYG-F}{RGB}{241,182,218}
+\pgfutil@definecolor{PiYG-G}{RGB}{253,224,239}
+\pgfutil@definecolor{PiYG-H}{RGB}{247,247,247}
+\pgfutil@definecolor{PiYG-I}{RGB}{230,245,208}
+\pgfutil@definecolor{PiYG-J}{RGB}{184,225,134}
+\pgfutil@definecolor{PiYG-K}{RGB}{161,215,106}
+\pgfutil@definecolor{PiYG-L}{RGB}{127,188,65}
+\pgfutil@definecolor{PiYG-M}{RGB}{77,172,38}
+\pgfutil@definecolor{PiYG-N}{RGB}{77,146,33}
+\pgfutil@definecolor{PiYG-O}{RGB}{39,100,25}
+
+\pgfutil@definecolor{PRGn-A}{RGB}{64,0,75}
+\pgfutil@definecolor{PRGn-B}{RGB}{118,42,131}
+\pgfutil@definecolor{PRGn-C}{RGB}{123,50,148}
+\pgfutil@definecolor{PRGn-D}{RGB}{153,112,171}
+\pgfutil@definecolor{PRGn-E}{RGB}{175,141,195}
+\pgfutil@definecolor{PRGn-F}{RGB}{194,165,207}
+\pgfutil@definecolor{PRGn-G}{RGB}{231,212,232}
+\pgfutil@definecolor{PRGn-H}{RGB}{247,247,247}
+\pgfutil@definecolor{PRGn-I}{RGB}{217,240,211}
+\pgfutil@definecolor{PRGn-J}{RGB}{166,219,160}
+\pgfutil@definecolor{PRGn-K}{RGB}{127,191,123}
+\pgfutil@definecolor{PRGn-L}{RGB}{90,174,97}
+\pgfutil@definecolor{PRGn-M}{RGB}{0,136,55}
+\pgfutil@definecolor{PRGn-N}{RGB}{27,120,55}
+\pgfutil@definecolor{PRGn-O}{RGB}{0,68,27}
+
+% These colors are defined in reverse order compared to <http://colorbrewer2.org>.
+% For more details have a look at the comments in
+% <https://sourceforge.net/p/pgfplots/bugs/108/>
+\pgfutil@definecolor{PuOr-A}{RGB}{45,0,75}
+\pgfutil@definecolor{PuOr-B}{RGB}{84,39,136}
+\pgfutil@definecolor{PuOr-C}{RGB}{94,60,153}
+\pgfutil@definecolor{PuOr-D}{RGB}{128,115,172}
+\pgfutil@definecolor{PuOr-E}{RGB}{153,142,195}
+\pgfutil@definecolor{PuOr-F}{RGB}{178,171,210}
+\pgfutil@definecolor{PuOr-G}{RGB}{216,218,235}
+\pgfutil@definecolor{PuOr-H}{RGB}{247,247,247}
+\pgfutil@definecolor{PuOr-I}{RGB}{254,224,182}
+\pgfutil@definecolor{PuOr-J}{RGB}{253,184,99}
+\pgfutil@definecolor{PuOr-K}{RGB}{241,163,64}
+\pgfutil@definecolor{PuOr-L}{RGB}{224,130,20}
+\pgfutil@definecolor{PuOr-M}{RGB}{230,97,1}
+\pgfutil@definecolor{PuOr-N}{RGB}{179,88,6}
+\pgfutil@definecolor{PuOr-O}{RGB}{127,59,8}
+
+\pgfutil@definecolor{RdBu-A}{RGB}{103,0,31}
+\pgfutil@definecolor{RdBu-B}{RGB}{178,24,43}
+\pgfutil@definecolor{RdBu-C}{RGB}{202,0,32}
+\pgfutil@definecolor{RdBu-D}{RGB}{214,96,77}
+\pgfutil@definecolor{RdBu-E}{RGB}{239,138,98}
+\pgfutil@definecolor{RdBu-F}{RGB}{244,165,130}
+\pgfutil@definecolor{RdBu-G}{RGB}{253,219,199}
+\pgfutil@definecolor{RdBu-H}{RGB}{247,247,247}
+\pgfutil@definecolor{RdBu-I}{RGB}{209,229,240}
+\pgfutil@definecolor{RdBu-J}{RGB}{146,197,222}
+\pgfutil@definecolor{RdBu-K}{RGB}{103,169,207}
+\pgfutil@definecolor{RdBu-L}{RGB}{67,147,195}
+\pgfutil@definecolor{RdBu-M}{RGB}{5,113,176}
+\pgfutil@definecolor{RdBu-N}{RGB}{33,102,172}
+\pgfutil@definecolor{RdBu-O}{RGB}{5,48,97}
+
+\pgfutil@definecolor{RdGy-A}{RGB}{103,0,31}
+\pgfutil@definecolor{RdGy-B}{RGB}{178,24,43}
+\pgfutil@definecolor{RdGy-C}{RGB}{202,0,32}
+\pgfutil@definecolor{RdGy-D}{RGB}{214,96,77}
+\pgfutil@definecolor{RdGy-E}{RGB}{239,138,98}
+\pgfutil@definecolor{RdGy-F}{RGB}{244,165,130}
+\pgfutil@definecolor{RdGy-G}{RGB}{253,219,199}
+\pgfutil@definecolor{RdGy-H}{RGB}{255,255,255}
+\pgfutil@definecolor{RdGy-I}{RGB}{224,224,224}
+\pgfutil@definecolor{RdGy-J}{RGB}{186,186,186}
+\pgfutil@definecolor{RdGy-K}{RGB}{153,153,153}
+\pgfutil@definecolor{RdGy-L}{RGB}{135,135,135}
+\pgfutil@definecolor{RdGy-M}{RGB}{64,64,64}
+\pgfutil@definecolor{RdGy-N}{RGB}{77,77,77}
+\pgfutil@definecolor{RdGy-O}{RGB}{26,26,26}
+
+\pgfutil@definecolor{RdYlBu-A}{RGB}{165,0,38}
+\pgfutil@definecolor{RdYlBu-B}{RGB}{215,48,39}
+\pgfutil@definecolor{RdYlBu-C}{RGB}{215,25,28}
+\pgfutil@definecolor{RdYlBu-D}{RGB}{244,109,67}
+\pgfutil@definecolor{RdYlBu-E}{RGB}{252,141,89}
+\pgfutil@definecolor{RdYlBu-F}{RGB}{253,174,97}
+\pgfutil@definecolor{RdYlBu-G}{RGB}{254,224,144}
+\pgfutil@definecolor{RdYlBu-H}{RGB}{255,255,191}
+\pgfutil@definecolor{RdYlBu-I}{RGB}{224,243,248}
+\pgfutil@definecolor{RdYlBu-J}{RGB}{171,217,233}
+\pgfutil@definecolor{RdYlBu-K}{RGB}{145,191,219}
+\pgfutil@definecolor{RdYlBu-L}{RGB}{116,173,209}
+\pgfutil@definecolor{RdYlBu-M}{RGB}{44,123,182}
+\pgfutil@definecolor{RdYlBu-N}{RGB}{69,117,180}
+\pgfutil@definecolor{RdYlBu-O}{RGB}{49,54,149}
+
+\pgfutil@definecolor{RdYlGn-A}{RGB}{165,0,38}
+\pgfutil@definecolor{RdYlGn-B}{RGB}{215,48,39}
+\pgfutil@definecolor{RdYlGn-C}{RGB}{215,25,28}
+\pgfutil@definecolor{RdYlGn-D}{RGB}{244,109,67}
+\pgfutil@definecolor{RdYlGn-E}{RGB}{252,141,89}
+\pgfutil@definecolor{RdYlGn-F}{RGB}{253,174,97}
+\pgfutil@definecolor{RdYlGn-G}{RGB}{254,224,139}
+\pgfutil@definecolor{RdYlGn-H}{RGB}{255,255,191}
+\pgfutil@definecolor{RdYlGn-I}{RGB}{217,239,139}
+\pgfutil@definecolor{RdYlGn-J}{RGB}{166,217,106}
+\pgfutil@definecolor{RdYlGn-K}{RGB}{145,207,96}
+\pgfutil@definecolor{RdYlGn-L}{RGB}{102,189,99}
+\pgfutil@definecolor{RdYlGn-M}{RGB}{26,150,65}
+\pgfutil@definecolor{RdYlGn-N}{RGB}{26,152,80}
+\pgfutil@definecolor{RdYlGn-O}{RGB}{0,104,55}
+
+\pgfutil@definecolor{Spectral-A}{RGB}{158,1,66}
+\pgfutil@definecolor{Spectral-B}{RGB}{213,62,79}
+\pgfutil@definecolor{Spectral-C}{RGB}{215,25,28}
+\pgfutil@definecolor{Spectral-D}{RGB}{244,109,67}
+\pgfutil@definecolor{Spectral-E}{RGB}{252,141,89}
+\pgfutil@definecolor{Spectral-F}{RGB}{253,174,97}
+\pgfutil@definecolor{Spectral-G}{RGB}{254,224,139}
+\pgfutil@definecolor{Spectral-H}{RGB}{255,255,191}
+\pgfutil@definecolor{Spectral-I}{RGB}{230,245,152}
+\pgfutil@definecolor{Spectral-J}{RGB}{171,221,164}
+\pgfutil@definecolor{Spectral-K}{RGB}{153,213,148}
+\pgfutil@definecolor{Spectral-L}{RGB}{102,194,165}
+\pgfutil@definecolor{Spectral-M}{RGB}{43,131,186}
+\pgfutil@definecolor{Spectral-N}{RGB}{50,136,189}
+\pgfutil@definecolor{Spectral-O}{RGB}{94,79,162}
+
+
+% =============================================================================
+% qualitative color schemes
+% =============================================================================
+
+\pgfutil@definecolor{Accent-A}{RGB}{127,201,127}
+\pgfutil@definecolor{Accent-B}{RGB}{190,174,212}
+\pgfutil@definecolor{Accent-C}{RGB}{253,192,134}
+\pgfutil@definecolor{Accent-D}{RGB}{255,255,153}
+\pgfutil@definecolor{Accent-E}{RGB}{56,108,176}
+\pgfutil@definecolor{Accent-F}{RGB}{240,2,127}
+\pgfutil@definecolor{Accent-G}{RGB}{191,91,23}
+\pgfutil@definecolor{Accent-H}{RGB}{102,102,102}
+
+\pgfutil@definecolor{Dark2-A}{RGB}{27,158,119}
+\pgfutil@definecolor{Dark2-B}{RGB}{217,95,2}
+\pgfutil@definecolor{Dark2-C}{RGB}{117,112,179}
+\pgfutil@definecolor{Dark2-D}{RGB}{231,41,138}
+\pgfutil@definecolor{Dark2-E}{RGB}{102,166,30}
+\pgfutil@definecolor{Dark2-F}{RGB}{230,171,2}
+\pgfutil@definecolor{Dark2-G}{RGB}{166,118,29}
+\pgfutil@definecolor{Dark2-H}{RGB}{102,102,102}
+
+\pgfutil@definecolor{Paired-A}{RGB}{166,206,227}
+\pgfutil@definecolor{Paired-B}{RGB}{31,120,180}
+\pgfutil@definecolor{Paired-C}{RGB}{178,223,138}
+\pgfutil@definecolor{Paired-D}{RGB}{51,160,44}
+\pgfutil@definecolor{Paired-E}{RGB}{251,154,153}
+\pgfutil@definecolor{Paired-F}{RGB}{227,26,28}
+\pgfutil@definecolor{Paired-G}{RGB}{253,191,111}
+\pgfutil@definecolor{Paired-H}{RGB}{255,127,0}
+\pgfutil@definecolor{Paired-I}{RGB}{202,178,214}
+\pgfutil@definecolor{Paired-J}{RGB}{106,61,154}
+\pgfutil@definecolor{Paired-K}{RGB}{255,255,153}
+\pgfutil@definecolor{Paired-L}{RGB}{177,89,40}
+
+\pgfutil@definecolor{Pastel1-A}{RGB}{251,180,174}
+\pgfutil@definecolor{Pastel1-B}{RGB}{179,205,227}
+\pgfutil@definecolor{Pastel1-C}{RGB}{204,235,197}
+\pgfutil@definecolor{Pastel1-D}{RGB}{222,203,228}
+\pgfutil@definecolor{Pastel1-E}{RGB}{254,217,166}
+\pgfutil@definecolor{Pastel1-F}{RGB}{255,255,204}
+\pgfutil@definecolor{Pastel1-G}{RGB}{229,216,189}
+\pgfutil@definecolor{Pastel1-H}{RGB}{253,218,236}
+\pgfutil@definecolor{Pastel1-I}{RGB}{242,242,242}
+
+\pgfutil@definecolor{Pastel2-A}{RGB}{179,226,205}
+\pgfutil@definecolor{Pastel2-B}{RGB}{253,205,172}
+\pgfutil@definecolor{Pastel2-C}{RGB}{203,213,232}
+\pgfutil@definecolor{Pastel2-D}{RGB}{244,202,228}
+\pgfutil@definecolor{Pastel2-E}{RGB}{230,245,201}
+\pgfutil@definecolor{Pastel2-F}{RGB}{255,242,174}
+\pgfutil@definecolor{Pastel2-G}{RGB}{241,226,204}
+\pgfutil@definecolor{Pastel2-H}{RGB}{204,204,204}
+
+\pgfutil@definecolor{Set1-A}{RGB}{228,26,28}
+\pgfutil@definecolor{Set1-B}{RGB}{55,126,184}
+\pgfutil@definecolor{Set1-C}{RGB}{77,175,74}
+\pgfutil@definecolor{Set1-D}{RGB}{152,78,163}
+\pgfutil@definecolor{Set1-E}{RGB}{255,127,0}
+\pgfutil@definecolor{Set1-F}{RGB}{255,255,51}
+\pgfutil@definecolor{Set1-G}{RGB}{166,86,40}
+\pgfutil@definecolor{Set1-H}{RGB}{247,129,191}
+\pgfutil@definecolor{Set1-I}{RGB}{153,153,153}
+
+\pgfutil@definecolor{Set2-A}{RGB}{102,194,165}
+\pgfutil@definecolor{Set2-B}{RGB}{252,141,98}
+\pgfutil@definecolor{Set2-C}{RGB}{141,160,203}
+\pgfutil@definecolor{Set2-D}{RGB}{231,138,195}
+\pgfutil@definecolor{Set2-E}{RGB}{166,216,84}
+\pgfutil@definecolor{Set2-F}{RGB}{255,217,47}
+\pgfutil@definecolor{Set2-G}{RGB}{229,196,148}
+\pgfutil@definecolor{Set2-H}{RGB}{179,179,179}
+
+\pgfutil@definecolor{Set3-A}{RGB}{141,211,199}
+\pgfutil@definecolor{Set3-B}{RGB}{255,255,179}
+\pgfutil@definecolor{Set3-C}{RGB}{190,186,218}
+\pgfutil@definecolor{Set3-D}{RGB}{251,128,114}
+\pgfutil@definecolor{Set3-E}{RGB}{128,177,211}
+\pgfutil@definecolor{Set3-F}{RGB}{253,180,98}
+\pgfutil@definecolor{Set3-G}{RGB}{179,222,105}
+\pgfutil@definecolor{Set3-H}{RGB}{252,205,229}
+\pgfutil@definecolor{Set3-I}{RGB}{217,217,217}
+\pgfutil@definecolor{Set3-J}{RGB}{188,128,189}
+\pgfutil@definecolor{Set3-K}{RGB}{204,235,197}
+\pgfutil@definecolor{Set3-L}{RGB}{255,237,111}
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolortol.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolortol.code.tex
new file mode 100644
index 0000000000..21a1e4c781
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarycolortol.code.tex
@@ -0,0 +1,277 @@
+
+% Color schemes as obtained from <http://www.sron.nl/~pault/>
+% and <http://www.sron.nl/~pault/colourschemes.pdf> respectively
+
+% =============================================================================
+% colors from palette I
+\pgfutil@definecolor{colortol-P1-A}{RGB}{51,34,136}
+\pgfutil@definecolor{colortol-P1-B}{RGB}{68,119,170}
+\pgfutil@definecolor{colortol-P1-C}{RGB}{102,153,204}
+\pgfutil@definecolor{colortol-P1-D}{RGB}{136,204,238}
+\pgfutil@definecolor{colortol-P1-E}{RGB}{68,170,153}
+\pgfutil@definecolor{colortol-P1-F}{RGB}{17,119,51}
+\pgfutil@definecolor{colortol-P1-G}{RGB}{153,153,51}
+\pgfutil@definecolor{colortol-P1-H}{RGB}{221,204,119}
+\pgfutil@definecolor{colortol-P1-I}{RGB}{102,17,0}
+\pgfutil@definecolor{colortol-P1-J}{RGB}{204,102,119}
+\pgfutil@definecolor{colortol-P1-K}{RGB}{170,68,102}
+\pgfutil@definecolor{colortol-P1-L}{RGB}{136,34,85}
+\pgfutil@definecolor{colortol-P1-M}{RGB}{170,68,153}
+% color for data gaps
+\pgfutil@definecolor{colortol-P1-gap}{RGB}{221,221,221}
+
+
+% -----------------------------------------------------------------------------
+% colors from palette II
+% bright
+\pgfutil@definecolor{colortol-P2light-A}{RGB}{119,170,221}
+\pgfutil@definecolor{colortol-P2light-B}{RGB}{119,204,204}
+\pgfutil@definecolor{colortol-P2light-C}{RGB}{136,204,170}
+\pgfutil@definecolor{colortol-P2light-D}{RGB}{221,221,119}
+\pgfutil@definecolor{colortol-P2light-E}{RGB}{221,170,119}
+\pgfutil@definecolor{colortol-P2light-F}{RGB}{221,119,136}
+\pgfutil@definecolor{colortol-P2light-G}{RGB}{204,153,187}
+% medium
+\pgfutil@definecolor{colortol-P2-A}{RGB}{68,119,170}
+\pgfutil@definecolor{colortol-P2-B}{RGB}{68,170,170}
+\pgfutil@definecolor{colortol-P2-C}{RGB}{68,170,119}
+\pgfutil@definecolor{colortol-P2-D}{RGB}{170,170,68}
+\pgfutil@definecolor{colortol-P2-E}{RGB}{170,119,68}
+\pgfutil@definecolor{colortol-P2-F}{RGB}{170,68,85}
+\pgfutil@definecolor{colortol-P2-G}{RGB}{170,68,136}
+% dark
+\pgfutil@definecolor{colortol-P2dark-A}{RGB}{17,68,119}
+\pgfutil@definecolor{colortol-P2dark-B}{RGB}{17,119,119}
+\pgfutil@definecolor{colortol-P2dark-C}{RGB}{17,119,68}
+\pgfutil@definecolor{colortol-P2dark-D}{RGB}{119,119,17}
+\pgfutil@definecolor{colortol-P2dark-E}{RGB}{119,68,17}
+\pgfutil@definecolor{colortol-P2dark-F}{RGB}{119,17,34}
+\pgfutil@definecolor{colortol-P2dark-G}{RGB}{119,17,85}
+
+
+% -----------------------------------------------------------------------------
+% colors from palette III
+\pgfutil@definecolor{colortol-P3-blue}{RGB}{68,119,170}
+\pgfutil@definecolor{colortol-P3-cyan}{RGB}{102,204,238}
+\pgfutil@definecolor{colortol-P3-green}{RGB}{34,136,51}
+\pgfutil@definecolor{colortol-P3-yellow}{RGB}{204,187,68}
+\pgfutil@definecolor{colortol-P3-red}{RGB}{238,102,119}
+\pgfutil@definecolor{colortol-P3-pink}{RGB}{170,51,119}
+% color for data gaps
+\pgfutil@definecolor{colortol-P3-gray}{RGB}{187,187,187}
+
+
+% =============================================================================
+% colors from diverging and sequential palettes
+% sequential palette
+% (same as `YlOrBr' colormap from `ColorBrewer' library)
+\pgfutil@definecolor{colortol-seq-A}{RGB}{255,255,229}
+\pgfutil@definecolor{colortol-seq-B}{RGB}{255,251,213}
+\pgfutil@definecolor{colortol-seq-C}{RGB}{255,247,188}
+\pgfutil@definecolor{colortol-seq-D}{RGB}{254,227,145}
+\pgfutil@definecolor{colortol-seq-E}{RGB}{254,217,142}
+\pgfutil@definecolor{colortol-seq-F}{RGB}{254,196,79}
+\pgfutil@definecolor{colortol-seq-G}{RGB}{251,154,41}
+\pgfutil@definecolor{colortol-seq-H}{RGB}{236,112,20}
+\pgfutil@definecolor{colortol-seq-I}{RGB}{217,95,14}
+\pgfutil@definecolor{colortol-seq-J}{RGB}{204,76,2}
+\pgfutil@definecolor{colortol-seq-K}{RGB}{153,52,4}
+\pgfutil@definecolor{colortol-seq-L}{RGB}{140,45,4}
+\pgfutil@definecolor{colortol-seq-M}{RGB}{102,37,6}
+% color for data gaps
+\pgfutil@definecolor{colortol-seq-gap}{RGB}{136,136,136}
+
+
+% -----------------------------------------------------------------------------
+% diverging palettes
+% -----------------------------------------------------------------------------
+% (similar to `RdYlBu' colormap from `ColorBrewer' library)
+\pgfutil@definecolor{colortol-div-A}{RGB}{0,139,206}
+\pgfutil@definecolor{colortol-div-B}{RGB}{61,82,161}
+\pgfutil@definecolor{colortol-div-C}{RGB}{58,137,201}
+\pgfutil@definecolor{colortol-div-D}{RGB}{119,183,229}
+\pgfutil@definecolor{colortol-div-E}{RGB}{153,199,236}
+\pgfutil@definecolor{colortol-div-F}{RGB}{180,221,247}
+\pgfutil@definecolor{colortol-div-G}{RGB}{230,245,254}
+\pgfutil@definecolor{colortol-div-H}{RGB}{255,250,210}
+\pgfutil@definecolor{colortol-div-I}{RGB}{255,227,170}
+\pgfutil@definecolor{colortol-div-J}{RGB}{249,189,126}
+\pgfutil@definecolor{colortol-div-K}{RGB}{245,162,117}
+\pgfutil@definecolor{colortol-div-L}{RGB}{237,135,94}
+\pgfutil@definecolor{colortol-div-M}{RGB}{210,77,62}
+\pgfutil@definecolor{colortol-div-N}{RGB}{208,50,50}
+\pgfutil@definecolor{colortol-div-O}{RGB}{174,28,62}
+% color for data gaps
+\pgfutil@definecolor{colortol-div-gap}{RGB}{102,102,102}
+
+
+% (reversed `RdBu-9' colormap from `ColorBrewer' library)
+\pgfutil@definecolor{colortol-div2-A}{RGB}{33,102,172}
+\pgfutil@definecolor{colortol-div2-B}{RGB}{67,147,195}
+\pgfutil@definecolor{colortol-div2-C}{RGB}{146,197,222}
+\pgfutil@definecolor{colortol-div2-D}{RGB}{209,229,240}
+\pgfutil@definecolor{colortol-div2-E}{RGB}{247,247,247}
+\pgfutil@definecolor{colortol-div2-F}{RGB}{253,219,199}
+\pgfutil@definecolor{colortol-div2-G}{RGB}{244,165,130}
+\pgfutil@definecolor{colortol-div2-H}{RGB}{214,96,77}
+\pgfutil@definecolor{colortol-div2-I}{RGB}{178,24,43}
+% color for data gaps
+\pgfutil@definecolor{colortol-div2-gaps}{RGB}{255,238,153}
+
+
+% (similar to `PRGn-9' colormap from `ColorBrewer' library,
+% where only color G has changed. (PRGn-J = 166,219,160))
+\pgfutil@definecolor{colortol-div3-A}{RGB}{118,42,131}
+\pgfutil@definecolor{colortol-div3-B}{RGB}{153,112,171}
+\pgfutil@definecolor{colortol-div3-C}{RGB}{194,165,207}
+\pgfutil@definecolor{colortol-div3-D}{RGB}{231,212,232}
+\pgfutil@definecolor{colortol-div3-E}{RGB}{247,247,247}
+\pgfutil@definecolor{colortol-div3-F}{RGB}{217,240,211}
+\pgfutil@definecolor{colortol-div3-G}{RGB}{172,211,158}
+\pgfutil@definecolor{colortol-div3-H}{RGB}{90,174,97}
+\pgfutil@definecolor{colortol-div3-I}{RGB}{27,120,55}
+% color for data gaps
+\pgfutil@definecolor{colortol-div3-gaps}{RGB}{255,238,153}
+
+
+% =============================================================================
+% colors for the rainbow palette (from the TechNote)
+\pgfutil@definecolor{colortol-rainbow-A}{RGB}{120,28,129}
+\pgfutil@definecolor{colortol-rainbow-B}{RGB}{136,46,114}
+\pgfutil@definecolor{colortol-rainbow-C}{RGB}{177,120,166}
+\pgfutil@definecolor{colortol-rainbow-D}{RGB}{214,193,222}
+\pgfutil@definecolor{colortol-rainbow-E}{RGB}{65,59,147}
+\pgfutil@definecolor{colortol-rainbow-F}{RGB}{64,64,150}
+\pgfutil@definecolor{colortol-rainbow-G}{RGB}{63,71,155}
+\pgfutil@definecolor{colortol-rainbow-H}{RGB}{63,78,161}
+\pgfutil@definecolor{colortol-rainbow-I}{RGB}{63,86,167}
+\pgfutil@definecolor{colortol-rainbow-J}{RGB}{63,96,174}
+\pgfutil@definecolor{colortol-rainbow-K}{RGB}{64,101,177}
+\pgfutil@definecolor{colortol-rainbow-L}{RGB}{65,108,183}
+\pgfutil@definecolor{colortol-rainbow-M}{RGB}{66,119,189}
+\pgfutil@definecolor{colortol-rainbow-N}{RGB}{70,131,193}
+\pgfutil@definecolor{colortol-rainbow-O}{RGB}{82,137,199}
+\pgfutil@definecolor{colortol-rainbow-P}{RGB}{72,139,194}
+\pgfutil@definecolor{colortol-rainbow-Q}{RGB}{73,140,194}
+\pgfutil@definecolor{colortol-rainbow-R}{RGB}{75,145,192}
+\pgfutil@definecolor{colortol-rainbow-S}{RGB}{77,149,190}
+\pgfutil@definecolor{colortol-rainbow-T}{RGB}{82,157,183}
+\pgfutil@definecolor{colortol-rainbow-U}{RGB}{83,158,182}
+\pgfutil@definecolor{colortol-rainbow-V}{RGB}{85,161,177}
+\pgfutil@definecolor{colortol-rainbow-W}{RGB}{87,163,173}
+\pgfutil@definecolor{colortol-rainbow-X}{RGB}{91,167,167}
+\pgfutil@definecolor{colortol-rainbow-Y}{RGB}{95,170,159}
+\pgfutil@definecolor{colortol-rainbow-Z}{RGB}{98,172,155}
+\pgfutil@definecolor{colortol-rainbow-AA}{RGB}{99,173,153}
+\pgfutil@definecolor{colortol-rainbow-AB}{RGB}{109,179,136}
+\pgfutil@definecolor{colortol-rainbow-AC}{RGB}{110,179,135}
+\pgfutil@definecolor{colortol-rainbow-AD}{RGB}{125,184,116}
+\pgfutil@definecolor{colortol-rainbow-AE}{RGB}{127,185,114}
+\pgfutil@definecolor{colortol-rainbow-AF}{RGB}{134,187,106}
+\pgfutil@definecolor{colortol-rainbow-AG}{RGB}{145,189,97}
+\pgfutil@definecolor{colortol-rainbow-AH}{RGB}{161,190,86}
+\pgfutil@definecolor{colortol-rainbow-AI}{RGB}{177,190,78}
+\pgfutil@definecolor{colortol-rainbow-AJ}{RGB}{181,189,76}
+\pgfutil@definecolor{colortol-rainbow-AK}{RGB}{190,188,72}
+\pgfutil@definecolor{colortol-rainbow-AL}{RGB}{199,185,68}
+\pgfutil@definecolor{colortol-rainbow-AM}{RGB}{202,184,67}
+\pgfutil@definecolor{colortol-rainbow-AN}{RGB}{211,179,63}
+\pgfutil@definecolor{colortol-rainbow-AO}{RGB}{216,175,61}
+\pgfutil@definecolor{colortol-rainbow-AP}{RGB}{217,173,60}
+\pgfutil@definecolor{colortol-rainbow-AQ}{RGB}{222,167,58}
+\pgfutil@definecolor{colortol-rainbow-AR}{RGB}{223,165,58}
+\pgfutil@definecolor{colortol-rainbow-AS}{RGB}{227,156,55}
+\pgfutil@definecolor{colortol-rainbow-AT}{RGB}{229,148,53}
+\pgfutil@definecolor{colortol-rainbow-AU}{RGB}{230,142,52}
+\pgfutil@definecolor{colortol-rainbow-AV}{RGB}{230,139,51}
+\pgfutil@definecolor{colortol-rainbow-AW}{RGB}{231,133,50}
+\pgfutil@definecolor{colortol-rainbow-AX}{RGB}{231,124,48}
+\pgfutil@definecolor{colortol-rainbow-AY}{RGB}{231,116,47}
+\pgfutil@definecolor{colortol-rainbow-AZ}{RGB}{231,109,46}
+\pgfutil@definecolor{colortol-rainbow-BA}{RGB}{230,104,45}
+\pgfutil@definecolor{colortol-rainbow-BB}{RGB}{230,100,44}
+\pgfutil@definecolor{colortol-rainbow-BC}{RGB}{232,96,28}
+\pgfutil@definecolor{colortol-rainbow-BD}{RGB}{217,33,32}
+\pgfutil@definecolor{colortol-rainbow-BE}{RGB}{220,5,12}
+% ---
+\pgfutil@definecolor{colortol-rainbow-BF}{RGB}{25,101,176}
+\pgfutil@definecolor{colortol-rainbow-BG}{RGB}{123,175,222}
+\pgfutil@definecolor{colortol-rainbow-BH}{RGB}{78,178,101}
+\pgfutil@definecolor{colortol-rainbow-BI}{RGB}{144,201,135}
+\pgfutil@definecolor{colortol-rainbow-BJ}{RGB}{202,224,171}
+\pgfutil@definecolor{colortol-rainbow-BK}{RGB}{247,238,85}
+\pgfutil@definecolor{colortol-rainbow-BL}{RGB}{246,193,65}
+\pgfutil@definecolor{colortol-rainbow-BM}{RGB}{241,147,45}
+% color for data gaps
+\pgfutil@definecolor{colortol-rainbow-gap}{RGB}{119,119,119}
+
+
+% -----------------------------------------------------------------------------
+% rainbow continuous palette
+\pgfutil@definecolor{colortol-rainbow-cont-A}{rgb}{0.47200,0.10893,0.50761}
+\pgfutil@definecolor{colortol-rainbow-cont-B}{rgb}{0.34213,0.09855,0.49621}
+\pgfutil@definecolor{colortol-rainbow-cont-C}{rgb}{0.28275,0.14652,0.52189}
+\pgfutil@definecolor{colortol-rainbow-cont-D}{rgb}{0.25545,0.22543,0.57205}
+\pgfutil@definecolor{colortol-rainbow-cont-E}{rgb}{0.24671,0.31603,0.63730}
+\pgfutil@definecolor{colortol-rainbow-cont-F}{rgb}{0.25077,0.40567,0.70361}
+\pgfutil@definecolor{colortol-rainbow-cont-G}{rgb}{0.26491,0.48682,0.75045}
+\pgfutil@definecolor{colortol-rainbow-cont-H}{rgb}{0.28782,0.55584,0.75812}
+\pgfutil@definecolor{colortol-rainbow-cont-I}{rgb}{0.31885,0.61177,0.72118}
+\pgfutil@definecolor{colortol-rainbow-cont-J}{rgb}{0.35763,0.65539,0.65239}
+\pgfutil@definecolor{colortol-rainbow-cont-K}{rgb}{0.40379,0.68838,0.57183}
+\pgfutil@definecolor{colortol-rainbow-cont-L}{rgb}{0.45673,0.71262,0.49478}
+\pgfutil@definecolor{colortol-rainbow-cont-M}{rgb}{0.51545,0.72969,0.42849}
+\pgfutil@definecolor{colortol-rainbow-cont-N}{rgb}{0.57835,0.74051,0.37454}
+\pgfutil@definecolor{colortol-rainbow-cont-O}{rgb}{0.64317,0.74507,0.33179}
+\pgfutil@definecolor{colortol-rainbow-cont-P}{rgb}{0.70698,0.74240,0.29822}
+\pgfutil@definecolor{colortol-rainbow-cont-Q}{rgb}{0.76646,0.73065,0.27175}
+\pgfutil@definecolor{colortol-rainbow-cont-R}{rgb}{0.81822,0.70734,0.25045}
+\pgfutil@definecolor{colortol-rainbow-cont-S}{rgb}{0.85937,0.66972,0.23257}
+\pgfutil@definecolor{colortol-rainbow-cont-T}{rgb}{0.88791,0.61535,0.21650}
+\pgfutil@definecolor{colortol-rainbow-cont-U}{rgb}{0.90305,0.54279,0.20076}
+\pgfutil@definecolor{colortol-rainbow-cont-V}{rgb}{0.90520,0.45244,0.18413}
+\pgfutil@definecolor{colortol-rainbow-cont-W}{rgb}{0.89577,0.34756,0.16585}
+\pgfutil@definecolor{colortol-rainbow-cont-X}{rgb}{0.87679,0.23541,0.14585}
+\pgfutil@definecolor{colortol-rainbow-cont-Y}{rgb}{0.85054,0.12858,0.12484}
+
+
+% -----------------------------------------------------------------------------
+% colors for the extended rainbow palette (from the website)
+\pgfutil@definecolor{colortol-rainbow-ext-low-A}{RGB}{232,236,251}
+\pgfutil@definecolor{colortol-rainbow-ext-low-B}{RGB}{221,216,239}
+\pgfutil@definecolor{colortol-rainbow-ext-low-C}{RGB}{209,193,225}
+\pgfutil@definecolor{colortol-rainbow-ext-low-D}{RGB}{195,168,209}
+\pgfutil@definecolor{colortol-rainbow-ext-low-E}{RGB}{181,143,194}
+\pgfutil@definecolor{colortol-rainbow-ext-low-F}{RGB}{167,120,180}
+\pgfutil@definecolor{colortol-rainbow-ext-low-G}{RGB}{155,98,167}
+\pgfutil@definecolor{colortol-rainbow-ext-low-H}{RGB}{140,78,153}
+% ---
+\pgfutil@definecolor{colortol-rainbow-ext-A}{RGB}{111,76,155}
+\pgfutil@definecolor{colortol-rainbow-ext-B}{RGB}{96,89,169}
+\pgfutil@definecolor{colortol-rainbow-ext-C}{RGB}{85,104,184}
+\pgfutil@definecolor{colortol-rainbow-ext-D}{RGB}{78,121,197}
+\pgfutil@definecolor{colortol-rainbow-ext-E}{RGB}{77,138,198}
+\pgfutil@definecolor{colortol-rainbow-ext-F}{RGB}{78,150,188}
+\pgfutil@definecolor{colortol-rainbow-ext-G}{RGB}{84,158,179}
+\pgfutil@definecolor{colortol-rainbow-ext-H}{RGB}{89,165,169}
+\pgfutil@definecolor{colortol-rainbow-ext-I}{RGB}{96,171,158}
+\pgfutil@definecolor{colortol-rainbow-ext-J}{RGB}{105,177,144}
+\pgfutil@definecolor{colortol-rainbow-ext-K}{RGB}{119,183,125}
+\pgfutil@definecolor{colortol-rainbow-ext-L}{RGB}{140,188,104}
+\pgfutil@definecolor{colortol-rainbow-ext-M}{RGB}{166,190,84}
+\pgfutil@definecolor{colortol-rainbow-ext-N}{RGB}{190,188,72}
+\pgfutil@definecolor{colortol-rainbow-ext-O}{RGB}{209,181,65}
+\pgfutil@definecolor{colortol-rainbow-ext-P}{RGB}{221,170,60}
+\pgfutil@definecolor{colortol-rainbow-ext-Q}{RGB}{228,156,57}
+\pgfutil@definecolor{colortol-rainbow-ext-R}{RGB}{231,140,53}
+\pgfutil@definecolor{colortol-rainbow-ext-S}{RGB}{230,121,50}
+\pgfutil@definecolor{colortol-rainbow-ext-T}{RGB}{228,99,45}
+\pgfutil@definecolor{colortol-rainbow-ext-U}{RGB}{223,72,40}
+\pgfutil@definecolor{colortol-rainbow-ext-V}{RGB}{218,34,34}
+% ---
+\pgfutil@definecolor{colortol-rainbow-ext-high-A}{RGB}{184,34,30}
+\pgfutil@definecolor{colortol-rainbow-ext-high-B}{RGB}{149,33,27}
+\pgfutil@definecolor{colortol-rainbow-ext-high-C}{RGB}{114,30,23}
+\pgfutil@definecolor{colortol-rainbow-ext-high-D}{RGB}{82,26,19}
+% color for data gaps
+\pgfutil@definecolor{colortol-rainbow-ext-gaps}{RGB}{102,102,102}
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarydateplot.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarydateplot.code.tex
new file mode 100644
index 0000000000..04bcb776a2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarydateplot.code.tex
@@ -0,0 +1,24 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for high-level coordinates.
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\usepgfplotslibrary{dateplot}
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarydecorations.softclip.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarydecorations.softclip.code.tex
new file mode 100644
index 0000000000..7544d66d31
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarydecorations.softclip.code.tex
@@ -0,0 +1,517 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2013 by Christian Feuersaenger
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+%
+% This library adds support for a "soft clip" decoration. It applies
+% clipping to an input path, but rather than simply instructing the
+% display driver to clip the path, it computes a new clip path from
+% the input.
+%
+% This library is (currently) on top of tikz.
+
+\pgfutil@IfUndefined{pgfplotsset}{%
+ \pgferror{Please load pgfplots before pgfplots.fillbetween.}%
+ \endinput
+}{}%
+
+\usetikzlibrary{intersections}
+
+\pgfplots@iffileexists{pgflibraryfillbetween.code.tex}{%
+ \usepgflibrary{fillbetween}
+}{%
+ \pgfplotsusecompatibilityfile{pgflibraryfillbetween.code.tex}%
+}%
+
+\pgfutil@IfUndefined{pgfintersectiongetsolutiontimes}{%
+ \pgfplotsusecompatibilityfile{pgflibraryintersections.code.tex}%
+}{}%
+
+
+\pgfkeys{
+ % soft clip={(axis cs:0,0) rectangle (axis cs:1,1)}
+ % or
+ % soft clip={A}
+ % where 'A' is defined using 'name path=A' somewhere
+ /pgf/decoration/soft clip path/.code={%
+ % FIXME : I would rather NOT evaluate path arguments in this
+ % context! Who knows how people set keys!? But alas, we cannot
+ % evaluate late because the CM is reset while working on
+ % decorations ... (see below)
+ \tikzlibsoftclip@setkey{\tikzlibsoftclip@setkey@assign}#1\pgf@stop
+ },
+ /pgf/decoration/every soft clipped path/.style={},%
+}
+
+% #1 a macro containing a soft path
+\def\tikzlibsoftclip@setkey@assign#1{%
+ \let\pgf@decoration@soft@clip=#1%
+}%
+
+\tikzlibsoftclip@setkey@assign{\pgfutil@empty}%
+
+\pgfdeclaredecoration{soft clip}{replace}{
+
+ \state{replace}[width=\pgfdecoratedpathlength,
+ persistent precomputation={%
+ % This here is an earlier draft... but alas, the
+ % transformation matrix has been reset in this context,
+ % and we cannot define the clip path dynamically here.
+ % I left it to document that.
+ %
+ %\pgfkeysgetvalue{/pgf/decoration/soft clip path}\pgf@temp
+ %\def\tikz@marshal{\tikzlibsoftclip@setkey{\tikzlibsoftclip@setkey@assign}}%
+ %\expandafter\tikz@marshal\pgf@temp\pgf@stop
+ }
+ ]{%
+ \ifx\pgf@decoration@soft@clip\pgfutil@empty
+ \pgfplotsthrow{invalid argument}
+ {\pgf@decoration@soft@clip}%
+ {The mandatory argument 'soft clip path=(A) rectangle (B)' has not been set}%
+ \pgfeov
+ \else
+ \tikzset{/pgf/decoration/every soft clipped path}%
+ \pgfpathcomputesoftclippath{\pgfdecoratedpath}{\pgf@decoration@soft@clip}%
+ \pgfsetpathandBB{\pgfretval}%
+ \fi
+ }
+}
+
+% ---------------------------------------------------------------------------------
+%
+% SOFT-CLIPPING.
+%
+% "softclip" means to get rid of those parts of a path which are
+% outside of a clip path.
+%
+% An example is to trim at the beginning and/or end of a
+% path as part of fill-between ("poor-mans-clipping").
+%
+% The difference to "real" clipping is that it is applied to the
+% path, not to the viewer -- the path can still be drawn with any
+% decorations, line widths, etc.
+%
+% Another difference is that this feature is (considerably) less sophisticated.
+%
+% #1: the input path
+% #2: the clip path (if it is empty, no clipping will be applied)
+% OUTPUT:
+% \pgfretval is #1 with modifications
+\def\pgfpathcomputesoftclippath#1#2{%
+ \ifx#2\pgfutil@empty
+ \let\pgfretval=#1%
+ \else
+ \ifx#1\pgfutil@empty
+ \let\pgfretval=#1%
+ \else
+ \pgfpathcomputesoftclippath@{#1}{#2}%
+ \fi
+ \fi
+}
+
+\def\pgfpathcomputesoftclippath@#1#2{%
+ \begingroup
+ \pgfprocessround{#1}{#1}%
+ \pgfprocessround{#2}{#2}%
+ %
+ %
+ \pgfpathcomputesoftclippath@is@first@outside@of@path{#1}{#2}%
+ \let\b@pgffill@is@outside@clip=\pgfretval
+ %
+%\message{computing soft clip path for ^^J\meaning#1 and ^^J\meaning#2^^J first point of input is outside of clip path=\b@pgffill@is@outside@clip^^J}%
+ %
+ % FIXME : it might be that I need to sort them ... !? but
+ % other tests indicate that I should not!?
+ %\pgfintersectionsortbyfirstpath
+ \pgf@intersect@sortfalse
+ \pgfintersectionofpaths%
+ {%
+ \pgfsetpath#1%
+ }%
+ {%
+ \pgfsetpath#2%
+ }%
+ %
+%\message{... num intersections = \pgfintersectionsolutions^^J}%
+ %
+ \ifnum\pgfintersectionsolutions=0 %
+ \if1\b@pgffill@is@outside@clip
+ % entire path is outside of the clipped area.
+ \let\pgfretval=\pgfutil@empty
+ \else
+ \let\pgfretval=#1%
+ \fi
+ \else
+ % split the first involved path into the
+ % segments induced by the intersection points:
+ \pgfcomputeintersectionsegments{1}%
+ \let\pgfpathfilled@a@segments=\pgfretval
+ %
+ % Now, create a new path which contains only those
+ % segments which are INSIDE of the clip path.
+ %
+ % I assume that I can rely on "even/odd" matching: if the
+ % first is inside, the second is outside, the third
+ % inside, etc.
+ \pgfapplistnewempty{pgfretval@tmp}%
+ \def\c@pgfpathfilled@counter{0}%
+ \pgfmathloop
+ \ifnum\c@pgfpathfilled@counter<\pgfpathfilled@a@segments\relax
+ \if0\b@pgffill@is@outside@clip
+ \expandafter\let\expandafter\pgf@loc@path@a\csname pgf@intersect@path@split@a@\c@pgfpathfilled@counter\endcsname
+ \expandafter\pgfapplistpushback\pgf@loc@path@a\to{pgfretval@tmp}%
+ \fi
+ \pgfpathfillbetween@negate\b@pgffill@is@outside@clip
+ %
+ \pgfutil@advancestringcounter\c@pgfpathfilled@counter
+ \repeatpgfmathloop
+ \pgfapplistlet\pgfretval={pgfretval@tmp}%
+ \fi
+ %
+ \global\let\pgf@glob@TMPa=\pgfretval%
+ \endgroup
+ \let\pgfretval=\pgf@glob@TMPa
+}
+
+% #1: input path (non-empty)
+% #2: soft clip path
+% Defines "\def\pgfretval{1}" if (the first point of #1 is outside or on the path #2)
+% Defines "\def\pgfretval{0}" if (the first point of #1 is inside of the path #2)
+\def\pgfpathcomputesoftclippath@is@first@outside@of@path#1#2{%
+ % APPROACH: shoot a line starting at the first coordinate of the
+ % first path through "the middle of #2". Then make an even/odd
+ % check on the number of intersections.
+ %
+ % FIXME : for now, I only support (x,y) rectangle (X,Y) anyway --
+ % optimize for that case!? This here might be too complex...
+ \begingroup
+ \expandafter\pgfpathfillbetween@get@first@coord#1\pgf@stop
+ \let\pgfpathfilled@a@firstcoord=\pgfretval%
+ %
+ % Get some point "in the middle of #2":
+ \pgfpathcomputesoftclippath@accum@pseudo@mean#2%
+ \edef\pgfpathfilled@b@center{\noexpand\pgfqpoint\pgfretval}%
+ %
+ % We have to shoot *through* #2, not just into the middle of #2.
+ % Consequently, we need to know how big #2 is:
+ \pgfpathcomputesoftclippath@is@first@outside@of@path@getBB#2%
+ \let\pgf@size@hint=\pgfretval
+ %
+ % Now, compute a target point such that our shot goes through it:
+ \pgfqpointscale{%
+ \pgf@size@hint
+ }{%
+ \pgfpointnormalised{%
+ \pgfpointdiff%
+ {\expandafter\pgfqpoint\pgfpathfilled@a@firstcoord}%
+ {\pgfpathfilled@b@center}%
+ }%
+ }%
+ % collect intermediate results as \pgf@xa/\pgf@ya are overwritten:
+ \edef\pgf@direction@vector{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ \pgfpointadd{\pgfpathfilled@b@center}{\pgf@direction@vector}%
+ \edef\pgfpathfilled@shoot@line@trg{{\the\pgf@x}{\the\pgf@y}}%
+ %
+ % this here is our path!
+ \edef\pgf@direction@path{%
+ \noexpand\pgfsyssoftpath@movetotoken\pgfpathfilled@a@firstcoord
+ \noexpand\pgfsyssoftpath@linetotoken\pgfpathfilled@shoot@line@trg
+ }%
+ %
+ % ... ok, compute intersections. This should be fairly fast as
+ % our second path has just 1 segment, i.e. it will be O(N) where N
+ % is the number of segments in #2.
+ \pgf@intersect@sortfalse
+ \pgfintersectionofpaths%
+ {%
+ \pgfsetpath#2%
+ }%
+ {%
+ \pgfsetpath\pgf@direction@path%
+ }%
+ %
+ \ifnum\pgfintersectionsolutions=0 %
+ % this must not happen! We have taken great care such that we
+ % *have* at least 1 intersection points!
+ \pgferror{Illegal state encountered: the computation of a softpath failed. The failure occurred while computing whether the first input coordinate is inside of the clip path (found no intersections)}%
+ \fi
+ %
+ \pgfpathcomputesoftclippath@if@is@first@on@boundary{%
+ % AH! The first point is ON the boundary of the clip path.
+ % This is equivalent to the condition that the first
+ % intersection point equals the first point.
+ %
+ % In this case, we say that it is OUTSIDE of the clip path!
+ %
+ % This is actually related to
+ % 1. the fact that the input path is splitted into segments
+ % induced by the intersection points in order to apply
+ % soft-clipping.
+ % 2. the fact that the clipping is based on an even/odd
+ % matching (in/out).
+ %
+ % In that setup, we want to skip the segment until the first
+ % intersection point - after all, it is "empty" anyway.
+ %
+ % To this end, we have to say that this first (empty) segment
+ % is OUTSIDE:
+ \def\pgfretval{1}%
+ }{%
+ \ifodd\pgfintersectionsolutions\relax%
+ \def\pgfretval{0}%
+ \else
+ \def\pgfretval{1}%
+ \fi
+ }%
+ \pgfmath@smuggleone\pgfretval
+ \endgroup
+}
+
+\def\pgfpathcomputesoftclippath@if@is@first@on@boundary#1#2{%
+ \pgfpathcomputesoftclippath@compute@infty@norm{%
+ \pgfpointdiff%
+ {\expandafter\pgfqpoint\pgfpathfilled@a@firstcoord}%
+ {\pgfpointintersectionsolution{1}}%
+ }%
+ \ifdim\pgf@x<\pgfintersectiontolerance\relax
+ % YES: the first point IS on the boundary: the first
+ % intersection solution == first point.
+ #1%
+ \else
+ % No, it is NOT equal to the first intersection solution - and
+ % thus NOT on the boundary.
+ #2%
+ \fi
+}%
+
+% Defines \pgf@x to be the infty norm of vector #1
+\def\pgfpathcomputesoftclippath@compute@infty@norm#1{%
+ \pgf@process{#1}%
+ \ifdim\pgf@x<0sp \global\pgf@x=-\pgf@x\fi
+ \ifdim\pgf@y<0sp \global\pgf@y=-\pgf@y\fi
+ \ifdim\pgf@x<\pgf@y
+ \global\pgf@x=\pgf@y
+ \fi
+}
+
+% Defines \pgfretval to be a *scalar* "size indicator" (1-norm) of the bounding
+% box of #1.
+%
+% #1: a macro containing a softpath.
+\def\pgfpathcomputesoftclippath@is@first@outside@of@path@getBB#1{%
+ \begingroup
+ \pgf@getpathsizes\pgf@interrupt@pathsizes
+ % we only need the path size here:
+ \pgf@relevantforpicturesizefalse
+ %
+ % FIXME : CODE CLEANUP NEEDED
+ \def\pgfsetpathBB@protocol@lastmoveto##1##2{}%
+ \expandafter\pgfsetpath@loop#1\pgf@stop
+ \pgfpointdiff
+ {\pgfqpoint\pgf@pathminx\pgf@pathminy}%
+ {\pgfqpoint\pgf@pathmaxx\pgf@pathmaxy}%
+ % compute |v|_1 = x + y (both components are non-negative anyway):
+ \pgf@xa=\pgf@x
+ \advance\pgf@xa by\pgf@y
+ \xdef\pgf@glob@TMPa{\pgf@sys@tonumber\pgf@xa}%
+ \pgf@setpathsizes\pgf@interrupt@pathsizes
+ \endgroup
+ \let\pgfretval=\pgf@glob@TMPa
+}%
+
+% Defines \pgfretval to be of a "pseudo" mean of path #1.
+%
+% Here, "pseudo" refers to the fact that the mean will only be
+% accumulated over the "first couple of coordinates" to avoid numeric
+% overflows in TeX's math engine.
+\def\pgfpathcomputesoftclippath@accum@pseudo@mean#1{%
+ \begingroup
+ \let\pgfsyssoftpath@movetotoken\pgfpathcomputesoftclippath@accum@pseudo@mean@
+ \let\pgfsyssoftpath@linetotoken\pgfpathcomputesoftclippath@accum@pseudo@mean@
+ \let\pgfsyssoftpath@closepathtoken\pgfpathcomputesoftclippath@accum@pseudo@mean@
+ \let\pgfsyssoftpath@curvetotoken\pgfpathcomputesoftclippath@accum@pseudo@mean@
+ \let\pgfsyssoftpath@curvetosupportatoken\pgfpathcomputesoftclippath@accum@pseudo@mean@relax
+ \let\pgfsyssoftpath@curvetosupportbtoken\pgfpathcomputesoftclippath@accum@pseudo@mean@relax
+ \c@pgf@countc=0 %
+ \pgf@xa=0pt %
+ \pgf@ya=0pt %
+ #1%
+ \divide\pgf@xa by\c@pgf@countc
+ \divide\pgf@ya by\c@pgf@countc
+ \edef\pgfretval{{\the\pgf@xa}{\the\pgf@ya}}%
+ \pgfmath@smuggleone\pgfretval
+ \endgroup
+}%
+\def\pgfpathcomputesoftclippath@accum@pseudo@mean@relax#1#2{}
+\def\pgfpathcomputesoftclippath@accum@pseudo@mean@#1#2{%
+ \ifnum\c@pgf@countc<4
+ % avoid overflows. 4 must be sufficient for now.
+ \advance\pgf@xa by#1\relax
+ \advance\pgf@ya by#2\relax
+ \advance\c@pgf@countc by1 %
+ \fi
+}
+
+
+% #1: of the form '{<x>}{<y>}'
+% #2: of the form '{<x>}{<y>}'
+\def\pgfpathfillbetween@check@x@less@than#1#2{%
+ \edef\pgf@temp{#1#2}%
+ \expandafter\pgfpathfillbetween@check@x@less@than@\pgf@temp
+}%
+
+% #1: x1
+% #2: y1
+% #3: x2
+% #4: y2
+\def\pgfpathfillbetween@check@x@less@than@#1#2#3#4{%
+ \ifdim#1>#3\relax
+ % <=
+ \def\pgfretval{0}%
+ \else
+ \def\pgfretval{1}%
+ \fi
+}%
+
+\def\pgfpathfillbetween@negate#1{%
+ \if0#1%
+ \def#1{1}%
+ \else
+ \def#1{0}%
+ \fi
+}
+
+\pgfkeys{
+ /tikz/soft clip assign/name/.code={\tikzgetnamedpath{#1}},
+ /tikz/soft clip assign/path/.code={\tikzlibsoftclip@setkey@@#1\pgf@stop},
+}
+
+%
+% \tikzlibsoftclip@setkey{<\macro>} <path name>\pgf@stop
+%
+% OR
+%
+% \tikzlibsoftclip@setkey{<\macro>} (<A>) rectangle (<B>)\pgf@stop
+%
+% #1: a macro which is called with the resulting clip path as argument #1.
+\def\tikzlibsoftclip@setkey#1#2\pgf@stop{%
+ \pgfutil@in@{=}{#2}%
+ \ifpgfutil@in@
+ \pgfqkeys{/tikz/soft clip assign}{#2}%
+ \else
+ \def\pgf@temp{#2}%
+ \pgfplots@command@to@string\pgf@temp\pgf@temp
+ %
+ \tikzifisnamedpath{\pgf@temp}{%
+ \pgfkeysalso{/tikz/soft clip assign/name={#2}}%
+ }{%
+ \pgfkeysalso{/tikz/soft clip assign/path={#2}}%
+ }%
+ \fi
+ #1{\pgfretval}%
+}
+
+\def\tikzlibsoftclip@setkey@@{%
+ %
+ \tikz@scan@one@point\tikzlibsoftclip@setkey@bb@scan@a
+}%
+
+\def\tikzlibsoftclip@setkey@bb@scan@a#1{%
+ \def\tikzlibsoftclip@setkey@bb@a{#1}%
+ \pgfutil@ifnextchar r{%
+ \tikzlibsoftclip@setkey@bb@scan@rectangle
+ }{%
+ \tikzlibsoftclip@setkey@@error
+ }%
+}%
+
+\def\tikzlibsoftclip@setkey@bb@scan@rectangle rectangle{%
+ \tikz@scan@one@point\tikzlibsoftclip@setkey@bb@scan@b
+}%
+
+\def\tikz@gobble@until@stop#1\pgf@stop{}%
+
+\def\tikzlibsoftclip@setkey@bb@scan@b#1{%
+ \def\tikzlibsoftclip@setkey@bb@b{#1}%
+ \pgfutil@ifnextchar \pgf@stop{%
+ \tikzlibsoftclip@setkey@@activate
+ \tikz@gobble@until@stop
+ }{%
+ \tikzlibsoftclip@setkey@@error
+ }%
+}%
+
+\def\tikzlibsoftclip@setkey@@error#1\pgf@stop{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \pgfplots@command@to@string\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \pgfplotsthrow{invalid argument}
+ {\pgfplots@loc@TMPa}%
+ {fill between: the argument of 'soft clip' has an unexpected format near '\pgfplots@loc@TMPb'; expected '(<pt>) rectangle (<pt>)'}%
+ \pgfeov
+}%
+
+% INPUT:
+% - two PGF points \tikzlibsoftclip@setkey@bb@a and \tikzlibsoftclip@setkey@bb@b.
+%
+% POSTCONDITION: \pgfretval contains the resulting path.
+\def\tikzlibsoftclip@setkey@@activate{%
+ % Expand points to {<x>}{<y>} ...
+ \pgf@process{\tikzlibsoftclip@setkey@bb@a}%
+ \edef\tikzlibsoftclip@setkey@bb@a{{\the\pgf@x}{\the\pgf@y}}%
+ \pgf@process{\tikzlibsoftclip@setkey@bb@b}%
+ \edef\tikzlibsoftclip@setkey@bb@b{{\the\pgf@x}{\the\pgf@y}}%
+ %
+ \pgfinterruptpath
+ \pgf@relevantforpicturesizefalse%
+ \expandafter\pgfqpoint\tikzlibsoftclip@setkey@bb@a
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \expandafter\pgfqpoint\tikzlibsoftclip@setkey@bb@b
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ %
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}%
+ \pgfpathclose
+ \pgfgetpath\pgfplots@loc@TMPa
+ \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa
+ \endpgfinterruptpath
+ %
+ \let\pgfretval=\pgfplots@glob@TMPa
+}%
+% ---------------------------------------------------------------------------------
+
+% Executes #2 if #1 is a named path and #3 otherwise.
+\def\tikzifisnamedpath#1#2#3{%
+ \pgfutil@IfUndefined{tikz@intersect@path@name@#1}{%
+ \def\tikz@next{#3}%
+ }{%
+ \def\tikz@next{#2}%
+ }%
+ \tikz@next
+}%
+
+
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibraryfillbetween.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibraryfillbetween.code.tex
new file mode 100644
index 0000000000..d5a153c055
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibraryfillbetween.code.tex
@@ -0,0 +1,577 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2013 by Christian Feuersaenger
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+
+% This library adds support for high-level instructions for "fill area
+% between two arbitrary plots of functions".
+%
+% It activates the syntax \pgfpathfillbetween
+% where A and B are two plots named by 'name path='.
+%
+% In fact, this here is not much more than a low-level invocation of
+% \pgfpathfillbetween
+% and a couple of styles. It could become a TikZ library because it
+% actually works on any two named paths, but it has its restrictions
+% regarding the supported input paths: both need to be plots of
+% functions (non-intersecting, should have at most one function value
+% for each canvas X coord)
+
+\pgfutil@IfUndefined{pgfplotsset}{%
+ \pgferror{Please load pgfplots before pgfplots.fillbetween.}%
+ \endinput
+}{}%
+
+\usetikzlibrary{intersections}
+\usetikzlibrary{decorations.softclip}
+
+% COMPATIBILITY WITH PGF RELEASE:
+\pgfutil@IfUndefined{pgfintersectiongetsolutiontimes}{%
+ \pgfplotsusecompatibilityfile{pgflibraryintersections.code.tex}%
+}{}%
+\def\tikz@key@name@path@wrong#1#2{%
+ \tikz@addmode{%
+ \pgfsyssoftpath@getcurrentpath\tikz@intersect@temppath@round%
+ \pgfprocessround\tikz@intersect@temppath@round\tikz@intersect@temppath%
+ \ifx\tikz@intersect@namedpaths\pgfutil@empty%
+ \else%
+ \tikz@intersect@namedpaths%
+ \pgfutil@ifundefined{tikz@intersect@path@name@#1}{}%
+ {%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tikz@intersect@@temppath%
+ \expandafter\expandafter\expandafter{\csname tikz@intersect@path@name@#1\endcsname}%
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tikz@intersect@temppath%
+ \expandafter\expandafter\expandafter{\expandafter\tikz@intersect@temppath\tikz@intersect@temppath}%
+ }%
+ \fi%
+ \tikz@intersect@addto@path@names{#1}{#2}%
+ }%
+}%
+
+\def\tikz@key@name@path@new#1#2{%
+ \tikz@addmode{%
+ \pgfsyssoftpath@getcurrentpath\tikz@intersect@temppath@round%
+ \pgfprocessround\tikz@intersect@temppath@round\tikz@intersect@temppath%
+ \ifx\tikz@intersect@namedpaths\pgfutil@empty%
+ \else%
+ \tikz@intersect@namedpaths%
+ \fi%
+ \tikz@intersect@addto@path@names{#1}{#2}%
+ }%
+}%
+
+\ifx\tikz@key@name@path@wrong\tikz@key@name@path
+ \immediate\write16{Package pgfplots: loading complementary 'name path' implementation for your pgf version...}
+ \let\tikz@key@name@path=\tikz@key@name@path@new
+\fi
+
+% ------------------------------------------------------------
+
+\newif\iftikzfillbetween@optimize@name@intersections
+
+\pgfkeys{%
+ /tikz/fill between/of/.code=\tikzlibraryfillbetween@parse#1\pgf@stop,
+ %
+ /tikz/fill between/on layer/.initial=pre main,
+ /tikz/fill between/every segment/.style={},
+ /tikz/fill between/every odd segment/.style={},
+ /tikz/fill between/every even segment/.style={},
+ /tikz/fill between/every last segment/.style={},
+ %
+ % Allows to add path instructions *after* the segment.
+ % If you want to add some *before* the segment, you can rely on
+ % 'every segment no 0/.style={ ... suitable tikz options ... }'
+ /tikz/fill between/path after segment/.initial={},
+ %
+ % soft clip={(axis cs:0,0) rectangle (axis cs:1,1)}
+ /tikz/fill between/soft clip/.style={
+ /tikz/fill between/soft clip first={#1},%
+ /tikz/fill between/soft clip second={#1},%
+ },%
+ /tikz/fill between/soft clip first/.initial=,%
+ /tikz/fill between/soft clip second/.initial=,
+ %
+ % #1: drawing options.
+ /tikz/fill between/@draw style/.style={
+ /pgf/fill between/result stream/begin/.code={%
+ \gdef\tikzsegmentindex{0}%
+ \xdef\tikzsegmentindices{##1}%
+ \c@pgf@countc=##1 %
+ \advance\c@pgf@countc by-1 %
+ \xdef\tikzsegmentlastindex{\the\c@pgf@countc}%
+ },%
+ /pgf/fill between/result stream/next ready/.code={%
+ \let\pgflibraryfill@path=\pgfretval
+ \def\pgfplots@loc@TMPa{%
+ /tikz/fill between/every segment,
+ #1,%
+ /tikz/fill between/every segment no \tikzsegmentindex/.try,
+ }%
+ \ifodd\tikzsegmentindex\relax
+ \expandafter\def\expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@loc@TMPa
+ /tikz/fill between/every odd segment,
+ }%
+ \else
+ \expandafter\def\expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@loc@TMPa
+ /tikz/fill between/every even segment,
+ }%
+ \fi
+ %
+ \ifnum\tikzsegmentindex=\tikzsegmentlastindex\relax
+ \expandafter\def\expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@loc@TMPa
+ /tikz/fill between/every last segment,
+ }%
+ \fi
+ %
+ \expandafter\fill\expandafter[\pgfplots@loc@TMPa]
+ \pgfextra
+ \pgfsetpathandBB{\pgflibraryfill@path}%
+ \pgfkeysgetvalue{/tikz/fill between/path after segment}\tikz@fillbetween@post@segment
+ \expandafter
+ \endpgfextra
+ \tikz@fillbetween@post@segment
+ ;%
+ \pgfplotsutil@advancestringcounter@global\tikzsegmentindex
+ },%
+ /pgf/fill between/result stream/end/.code=,%
+ },
+ /tikz/fill between/.search also={/pgf/fill between,/pgfplots},
+ /tikz/fill between/optimize name intersections/.is if=tikzfillbetween@optimize@name@intersections,
+ %
+ % FIXME : this optimization needs much more work... I believe it
+ % would be stable enough, but it covers too few cases.
+ %/tikz/fill between/optimize name intersections=true,
+ %
+ %
+ %
+ %--------------------------------------------------
+ % /pgfplots/execute at begin axis@@/.add={%
+ % \def\b@pgfplotslibraryfill@added
+ % }{%
+ %
+ % },%
+ %--------------------------------------------------
+}
+
+\def\tikzlibraryfillbetween@parse#1 and #2\pgf@stop{%
+ \def\tikz@fillbetween@a{#1}%
+ \def\tikz@fillbetween@b{#2}%
+}%
+
+% \tikzfillbetween[<options>]{<draw style>}
+%
+% <options> must contain 'of=<A> and <B>' and may configure how the
+% area is computed.
+%
+% <draw style> affects every drawn region.
+%
+\def\tikzfillbetween{\pgfutil@ifnextchar[{\tikzfillbetween@opt}{\tikzfillbetween@opt[]}}
+\def\tikzfillbetween@opt[#1]#2{%
+ \begingroup
+ \pgfqkeys{/tikz/fill between}{%
+ % prepare the low-level path generation instruction(s):
+ /tikz/fill between/@draw style={#2},%
+ %
+ % set up input options:
+ #1,%
+ }%
+ % automagically try to use the correct layer:
+ \pgfkeysgetvalue{/tikz/fill between/on layer}\tikzlibraryfillbetween@path@layer@name
+ \tikzlibraryfillbetween@determine@layer
+ %
+ \ifx\tikzlibraryfillbetween@path@layer@name\pgfutil@empty \else
+ \pgfonlayer{\tikzlibraryfillbetween@path@layer@name}%
+ \fi
+ %
+ \tikzlibraryfillbetween@path@generatepath
+ %
+ \ifx\tikzlibraryfillbetween@path@layer@name\pgfutil@empty \else
+ \endpgfonlayer%
+ \fi
+ %
+ \endgroup
+}%
+
+% Defines \tikzlibraryfillbetween@path@layer@name
+\def\tikzlibraryfillbetween@determine@layer{%
+ \ifx\tikzlibraryfillbetween@path@layer@name\pgfutil@empty
+ \else
+ \pgfutil@IfUndefined{pgf@layerlist}{%
+ % hm. No layers active!? A pity...
+ \tikzlibraryfillbetween@path@warn@layer
+ \let\tikzlibraryfillbetween@path@layer@name\pgfutil@empty%
+ }{%
+ \edef\pgfplots@loc@TMPa{\noexpand\pgfutil@in@{\tikzlibraryfillbetween@path@layer@name}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgf@layerlist}%
+ \ifpgfutil@in@
+ \else
+ \tikzlibraryfillbetween@path@warn@layer
+ \let\tikzlibraryfillbetween@path@layer@name\pgfutil@empty%
+ \fi
+ }%
+ \fi
+}%
+
+\def\tikzlibraryfillbetween@path@warn@layer{%
+ \pgfplots@warning{'fill between': Could not activate graphics layer '\tikzlibraryfillbetween@path@layer@name'. Filled path will be on top of the other ones. Please ensure that '\tikzlibraryfillbetween@path@layer@name' is somewhere in the layer list (or set '/tikz/fill between/on layer=').}%
+}%
+
+\def\tikzlibraryfillbetween@parse@softclip{%
+ \pgfkeysgetvalue{/tikz/fill between/soft clip first}\pgf@temp
+ \pgfkeysgetvalue{/tikz/fill between/soft clip second}\pgf@tempb
+ \ifx\pgf@temp\pgf@tempb
+ % Ah - both have the same value!
+ \ifx\pgf@temp\pgfutil@empty
+ % ... and both are empty.
+ \pgffillbetweensetsoftclippath{\pgfutil@empty}%
+ \else
+ % ... and both contain some path! Process it (once):
+ \def\tikz@marshal{\tikzlibsoftclip@setkey{\pgffillbetweensetsoftclippath}}%
+ \expandafter\tikz@marshal\pgf@temp\pgf@stop
+ \fi
+ \else
+ % handle 'soft clip first':
+ \ifx\pgf@temp\pgfutil@empty
+ \pgffillbetweensetsoftclippathfirst{\pgfutil@empty}%
+ \else
+ \def\tikz@marshal{\tikzlibsoftclip@setkey{\pgffillbetweensetsoftclippathfirst}}%
+ \expandafter\tikz@marshal\pgf@temp\pgf@stop
+ \fi
+ %
+ % handle 'soft clip second':
+ \pgfkeysgetvalue{/tikz/fill between/soft clip second}\pgf@tempb
+ \ifx\pgf@tempb\pgfutil@empty
+ \pgffillbetweensetsoftclippathsecond{\pgfutil@empty}%
+ \else
+ \def\tikz@marshal{\tikzlibsoftclip@setkey{\pgffillbetweensetsoftclippathsecond}}%
+ \expandafter\tikz@marshal\pgf@tempb\pgf@stop
+ \fi
+ \fi
+}%
+
+\def\tikzlibraryfillbetween@path@generatepath{%
+ %
+ \tikzlibraryfillbetween@parse@softclip
+ %
+ \tikzlibraryfillbetween@path@check
+ \expandafter\let\expandafter\tikz@fillbetween@a@path
+ \csname tikz@intersect@path@name@\tikz@fillbetween@a\endcsname
+ \expandafter\let\expandafter\tikz@fillbetween@b@path
+ \csname tikz@intersect@path@name@\tikz@fillbetween@b\endcsname
+ %
+ \iftikzfillbetween@optimize@name@intersections
+ \ifpgfpathfillbetween@split
+ \tikzfillbetween@optimize@name@intersections\tikz@fillbetween@a\tikz@fillbetween@b
+ \fi
+ \fi
+ %
+ \pgfpathfillbetween{\tikz@fillbetween@a@path}{\tikz@fillbetween@b@path}%
+}%
+
+\def\tikzlibraryfillbetween@path@check{%
+ \pgfutil@IfUndefined{tikz@intersect@path@name@\tikz@fillbetween@a}{%
+ \pgferror
+ {fill between: the mandatory argument 'of=<name path A> and <name path B> is missing or has empty arguments. Please ensure that the option has been set and that both path names have been assigned (perhaps you need 'name path global=\tikz@fillbetween@a' somewhere?)}%
+ }{}%
+ \pgfutil@IfUndefined{tikz@intersect@path@name@\tikz@fillbetween@b}{%
+ \pgferror
+ {fill between: the mandatory argument 'of=<name path A> and <name path B> is missing or has empty arguments. Please ensure that the option has been set and that both path names have been assigned (perhaps you need 'name path global=\tikz@fillbetween@b' somewhere?)}%
+ }{}%
+}
+
+
+%-----------------------------------------
+%
+% Utilities to work with path segments
+%
+%-----------------------------------------
+
+% Defines \pgfretval such that it contains the named path '#1'
+\def\tikzgetnamedpath#1{%
+ \pgfutil@IfUndefined{tikz@intersect@path@name@#1}{%
+ \pgferror{There is no named path called '#1'. Perhaps you misspelled it?}%
+ }{%
+ \expandafter\let\expandafter\pgfretval
+ \csname tikz@intersect@path@name@#1\endcsname
+ }%
+}%
+
+\def\tikznamecurrentpath#1{%
+ \pgfgetpath\pgf@temp
+ \pgfprocessround\pgf@temp\pgf@tempb%
+ \expandafter\global\expandafter\let\csname tikz@intersect@path@name@#1\endcsname=\pgf@tempb
+}%
+
+% ---------------------------------------------------------------------------------------
+
+\newif\iftikzpathsegments@reverse
+\def\tikzlibrarysegments@parse#1 and #2\pgf@stop{%
+ \def\tikz@path@segments@a{#1}%
+ \def\tikz@path@segments@b{#2}%
+}%
+
+
+\pgfkeys{
+ % allows to append intersection segments to the current path by
+ % writing
+ % \path[intersection segments={of=first and second, sequence=A0 -- B1 -- B3 A3[reverse] -- A1}];
+ /tikz/intersection segments/.code={%
+ \tikzpathintersectionsegments[#1]%
+ },
+ /tikz/segments/of/.code=\tikzlibrarysegments@parse#1\pgf@stop,
+ /tikz/segments/of={} and {},
+ /tikz/segments/sequence/.initial=A0 -- B1,
+ /tikz/segments/reverse/.is if=tikzpathsegments@reverse,
+ /tikz/segments/reverse/.default=true,
+}
+
+% Programmatic method to do the same as 'intersection
+% segments={<options>}
+%
+% #1: <options>
+\def\tikzpathintersectionsegments[#1]{%
+ \begingroup
+ \pgfqkeys{/tikz/segments}{#1}%
+ \tikzgetnamedpath{\tikz@path@segments@a}%
+ \let\tikz@path@segments@A=\pgfretval
+ \tikzgetnamedpath{\tikz@path@segments@b}%
+ \let\tikz@path@segments@B=\pgfretval
+ %
+ % this macro will be called whenever we need an intersection
+ % segment. Perhaps we do not need it at all
+ \def\tikz@ensurehascomputedintersection{%
+ % compute intersections using the PGF intersection lib...
+ \pgfintersectionofpaths{\pgfsetpath\tikz@path@segments@A}{\pgfsetpath\tikz@path@segments@B}%
+ %
+ \ifnum\pgfintersectionsolutions=0 %
+ \pgferror{The argument of 'sequence' requests an intersection segment -- but the two input paths do not intersect. Please use A* or B* to select the whole path}%
+ \def\b@tikz@select@all{1}%
+ \else
+ %
+ % ... and compute the intersection *segments* for both input
+ % paths...
+ \pgfcomputeintersectionsegments1%
+ \pgfcomputeintersectionsegments2%
+ \fi
+ \let\tikz@ensurehascomputedintersection=\relax
+ }%
+ %
+ \pgfkeysgetvalue{/tikz/segments/sequence}\tikz@sequence
+ %
+ \def\b@tikz@isect@nextismoveto{1}%
+ \let\pgfpointlastofsetpath=\pgfutil@empty
+ \expandafter\tikzpathintersectionsegments@parse@loop\tikz@sequence\pgf@stop
+ \pgfmath@smuggleone\pgfpointlastofsetpath
+ \endgroup
+ \tikz@make@last@position{\pgfpointlastofsetpath}%
+}%
+
+\def\tikzpathintersectionsegments@parse@loop{%
+ \pgfutil@ifnextchar-{%
+ \tikz@isect@p@lineto
+ }{%
+ \pgfutil@ifnextchar A{%
+ \tikz@isect@p@next
+ }{%
+ \pgfutil@ifnextchar B{%
+ \tikz@isect@p@next
+ }{%
+ \pgfutil@ifnextchar L{%
+ \tikz@isect@p@next
+ }{%
+ \pgfutil@ifnextchar R{%
+ \tikz@isect@p@next
+ }{%
+ \pgfutil@ifnextchar\pgf@stop{%
+ \tikz@isect@finish
+ }{%
+ \tikz@isect@p@error
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}%
+
+\def\tikz@isect@finish\pgf@stop{}%
+
+\def\tikz@isect@p@lineto--{%
+ \def\b@tikz@isect@nextismoveto{0}%
+ \tikzpathintersectionsegments@parse@loop
+}%
+
+\def\tikz@isect@p@error#1\pgf@stop{%
+ \pgferror{The argument of 'sequence' has an unexpected format near '#1'. Please write something like A0 -- B1 -- A1}%
+}
+
+\def\tikz@isect@p@next#1#2{%
+ \def\tikz@temp{#2}%
+ \def\tikz@@temp{-}%
+ \ifx\tikz@@temp\tikz@temp
+ % also accept minus signs without curly braces, i.e.
+ % L-2 instead of L{-2}
+ \def\tikz@next{\tikz@isect@p@next@{#1}{#2}}%
+ \else
+ \def\tikz@next{\tikz@isect@p@next@{#1}{#2}{}}%
+ \fi
+ \tikz@next
+}%
+\def\tikz@isect@p@next@#1#2#3{%
+ \pgfutil@ifnextchar[{%
+ \tikz@isect@p@next@opt{#1}{#2#3}%
+ }{%
+ \tikz@isect@p@next@opt{#1}{#2#3}[]%
+ }%
+}%
+
+\def\tikz@isect@p@next@opt#1#2[#3]{%
+ \begingroup
+ %
+ % set keys (if any):
+ \def\tikz@temp{#3}%
+ \ifx\tikz@temp\pgfutil@empty
+ \else
+ \pgfqkeys{/tikz/segments}{#3}%
+ \fi
+ %
+ \def\tikz@indexshift{}%
+ \if A#1%
+ % FIRST function (0-based index)
+ \def\tikz@path{1}%
+ \def\tikz@path@ab{A}%
+ \else
+ \if B#1%
+ % SECOND function (0-based index)
+ \def\tikz@path{2}%
+ \def\tikz@path@ab{B}%
+ \else
+ \if L#1%
+ % FIRST function (1-based index)
+ \def\tikz@path{1}%
+ \def\tikz@indexshift{-1}%
+ \def\tikz@path@ab{A}%
+ \else
+ \if R#1%
+ % SECOND function (1-based index)
+ \def\tikz@path{2}%
+ \def\tikz@indexshift{-1}%
+ \def\tikz@path@ab{B}%
+ \else
+ \def\tikz@path{}%
+ \pgferror{The argument of 'sequence' has an unexpected format near '#1#2': expected L#2 or R#2}%
+ \fi
+ \fi
+ \fi
+ \fi
+ %
+ % parse arguments:
+ \def\pgfmathresult{#2}%
+ \def\tikz@temp{*}%
+ \ifx\pgfmathresult\tikz@temp
+ \def\b@tikz@select@all{1}%
+ \else
+ \def\b@tikz@select@all{0}%
+ \tikz@ensurehascomputedintersection
+ \pgfmathparse{round(#2)}%
+ \let\tikz@index=\pgfmathresult
+ \ifx\tikz@indexshift\pgfutil@empty
+ \else
+ \afterassignment\pgfutil@gobble@until@relax
+ \c@pgf@countc=\tikz@index\relax
+ \ifnum\c@pgf@countc<0 \else
+ % the index shift is ONLY for positive numbers: we
+ % want to start indexing at 1, not at 0 -- and the
+ % negative ones start at -1 anyway.
+ \advance\c@pgf@countc by\tikz@indexshift\relax
+ \edef\tikz@index{\the\c@pgf@countc}%
+ \fi
+ \fi
+ \fi
+ %
+ %
+ % PROCESS IT:
+ \ifx\tikz@path\pgfutil@empty
+ \let\pgfpointlastofsetpath=\pgfutil@empty
+ \else
+ \if1\b@tikz@select@all%
+ % ok... select the *entire* path.
+ % #1 = A|B :
+ \expandafter\let\expandafter\pgfretval\csname tikz@path@segments@\tikz@path@ab\endcsname
+ \else
+ \pgfgetintersectionsegmentpath{\tikz@path}{\tikz@index}%
+ \fi
+ \iftikzpathsegments@reverse
+ \pgf@reverse@path\pgfretval
+ \fi
+ \if0\b@tikz@isect@nextismoveto
+ \pgfpathreplacefirstmoveto\pgfretval
+ \fi
+ \pgfaddpathandBB\pgfretval
+ \fi
+ \pgfmath@smuggleone\pgfpointlastofsetpath
+ \endgroup
+ \def\b@tikz@isect@nextismoveto{1}%
+ \tikzpathintersectionsegments@parse@loop
+}%
+
+\def\tikzfillbetween@optimize@name@intersections#1#2{%
+ \edef\tikzfillbetween@precached@intersectionofpaths@A{#1}%
+ \edef\tikzfillbetween@precached@intersectionofpaths@B{#2}%
+ \pgfkeys{%
+ /tikz/name intersections/.add code={%
+ \let\pgfintersectionofpaths=\tikzfillbetween@precached@intersectionofpaths
+ }{%
+ \let\pgfintersectionofpaths=\pgfintersectionofpaths@orig
+ }
+ }%
+}%
+
+\let\pgfintersectionofpaths@orig=\pgfintersectionofpaths
+
+\def\tikzfillbetween@precached@intersectionofpaths@log{%
+ \immediate\write-1{fill between: outcome of 'name intersections={of=\tikz@intersect@path@a\space and \tikz@intersect@path@b}' has been computed from available information of fill between}%
+}
+\def\tikzfillbetween@precached@intersectionofpaths#1#2{%
+ \def\pgf@loc@TMPa{0}%
+ \ifx\tikz@intersect@path@a\tikzfillbetween@precached@intersectionofpaths@A
+ \ifx\tikz@intersect@path@b\tikzfillbetween@precached@intersectionofpaths@B
+ \def\pgf@loc@TMPa{1}%
+ \fi
+ \fi
+ \ifx\tikz@intersect@path@b\tikzfillbetween@precached@intersectionofpaths@A
+ \ifx\tikz@intersect@path@a\tikzfillbetween@precached@intersectionofpaths@B
+ \def\pgf@loc@TMPa{1}%
+ \fi
+ \fi
+ %
+ \if1\pgf@loc@TMPa
+ \tikzfillbetween@precached@intersectionofpaths@log
+ \relax
+ \else
+ \pgfintersectionofpaths@orig{#1}{#2}%
+ \fi
+}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.clickable.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.clickable.code.tex
new file mode 100644
index 0000000000..1f93500e02
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.clickable.code.tex
@@ -0,0 +1,1393 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for dynamic content in PDF files
+% (clickable plots)
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\pgfutil@ifundefined{pgfplotsset}{%
+ \PackageError{pgfplots}{Sorry, \string\usetikzlibrary{pgfplots.clickable} needs to hook into PGFPlots routines, disabling it -- please provide the command AFTER \string\usepackage{pgfplots}}{}%
+ \endinput
+}{%
+}%
+
+
+\edef\pgfplotscatcodeDQ{\the\catcode`\"}%
+\catcode`\"=12
+\newif\ifpgfplots@clickable
+\newif\ifpgfplots@annot@printable
+
+\pgfqkeys{/pgfplots}{
+ @backgroundpath@hook/.add code={}{\pgfplots@create@clickable@plotarea@hook},
+ clickable/.is if=pgfplots@clickable,
+ clickable/.default=true,
+ clickable=true,
+ /pgfplots/execute at begin axis/.add={}{%
+ \pgfplots@clickable@beginaxis
+ },%
+ clickable coords code/.code={%
+ \def\pgfplots@clickable@init@@{%
+ \pgfplots@clickable@startcoordcollect
+ \pgfplotsset{%
+ /pgfplots/execute at end plot@@/.add={}{%
+ \pgfplots@clickable@endcoordcollect
+ },
+ /pgfplots/execute for finished point/.add={}{%
+ \pgfplots@clickable@coordcollect{#1}%
+ },%
+ }%
+ \let\pgfplots@clickable@init@@=\relax
+ }%
+ \pgfkeysalso{%
+ /pgfplots/execute at begin plot@@/.add={}{%
+ \pgfplots@clickable@init@@
+ },
+ }%
+ },
+ clickable coords/.style={
+ clickable coords code={\def\pgfplotsretval{#1}},
+ },
+ clickable coords/.default={(xy)},
+ annot/js fillColor/.initial={["RGB",1,1,.855]},
+ annot/point format/.initial={(\%.1f, \%.1f)},
+ annot/point format 3d/.initial={(\%.1f, \%.1f, \%.1f)},
+ annot/slope format/.initial={\%.1f*x \%+.1f},
+ annot/printable/.is if=pgfplots@annot@printable,
+ annot/printable/.default=true,
+ % Available are:
+% Times-Roman font.Times
+% Times-Bold font.TimesB
+% Times-Italic font.TimesI
+% Times-BoldItalic font.TimesBI
+% Helvetica font.Helv
+% Helvetica-Bold font.HelvB
+% Helvetica-Oblique font.HelvI
+% Helvetica-BoldOblique font.HelvBI
+% Courier font.Cour
+% Courier-Bold font.CourB
+% Courier-Oblique font.CourI
+% Courier-BoldOblique font.CourBI
+% Symbol font.Symbol
+% ZapfDingbats font.ZapfD
+ annot/font/.initial={font.Times},
+% annot/font={"CMR10"},
+ annot/textSize/.initial=11,
+ annot/richtext/.initial=true,
+ annot/richtext/.default=true,
+ annot/popup size generic/.initial=auto,
+ annot/popup size snap/.initial=auto,
+ clickable coords size/.style={
+ /pgfplots/annot/popup size snap={#1},
+ },
+ annot/popup size/.style={
+ /pgfplots/annot/popup size generic={#1},
+ /pgfplots/annot/popup size snap={#1},
+ },
+ annot/width/.initial=,
+ annot/height/.initial=,
+ annot/jsname/.initial=,
+ annot/dim/.initial=2,
+ annot/xmin/.initial=,
+ annot/xmax/.initial=,
+ annot/ymin/.initial=,
+ annot/ymax/.initial=,
+ annot/zmin/.initial=,
+ annot/zmax/.initial=,
+ annot/xscale/.initial=, % "log" or "linear" or "log:<basis>"
+ annot/yscale/.initial=,
+ annot/zscale/.initial=,
+ annot/minminmin/.initial=,
+ annot/xaxis/.initial=,
+ annot/yaxis/.initial=,
+ annot/zaxis/.initial=,
+ % format:
+ % [<plot1coords>, <plot2coords>,...,<plotncoords>]
+ % with <ploticoords> = [<coord>,<coord>,....,<coord>]
+ % and <coord> = [ <x>, <y>, "text" ]
+ % for example:
+ % [[[0.0e0,-4.0849609e-1,": (0,0)"],[1.25e-1,-3.7412109e-1,": (3,1)"],[2.5e-1,-3.0849609e-1,": (2,1)"],[3.75e-1,-2.1162109e-1,": (3,3)"],[5.0e-1,-8.3496094e-2,": (1,1)"],[6.25e-1,7.5878906e-2,": (3,5)"],[7.5e-1,2.6650391e-1,": (2,3)"],[8.75e-1,4.8837891e-1,": (3,7)"],[1.0e0,7.4150391e-1,": (0,1)"]]]
+ annot/collected plots/.initial=,
+ annot/snap dist/.initial=4,
+ every semilogy axis/.append style={/pgfplots/annot/point format={(\%.1f, \%.1e)}},
+ every semilogx axis/.append style={/pgfplots/annot/point format={(\%.1e, \%.1f)}},
+ every loglog axis/.append style={/pgfplots/annot/point format={(\%.1e, \%.1e)}},
+}
+
+\pgfkeysifdefined{/pgfplots/annot/xy pattern}{%
+}{%
+ \pgfkeyssetvalue{/pgfplots/annot/xy pattern}{(xy)}%
+}%
+\pgfkeysifdefined{/pgfplots/annot/no such coord}{%
+}{%
+ \pgfkeyssetvalue{/pgfplots/annot/no such coord}{--}%
+}%
+
+% ATTENTION:
+% The eforms package creates \begin{Form} and \end{Form} in \AtBeginDocument and \AtEndDocument!
+\def\pgfplots@glob@TMPa{pgfsys-pdftex.def}
+\ifx\pgfplots@glob@TMPa\pgfsysdriver
+ \RequirePackage[pdftex]{insdljs}
+ \RequirePackage[pdftex]{eforms}
+\else
+\def\pgfplots@glob@TMPa{pgfsys-dvipdfm.def}
+\ifx\pgfplots@glob@TMPa\pgfsysdriver
+ \RequirePackage[dvipdfm]{insdljs}
+ \RequirePackage[dvipdfm]{eforms}
+\else
+\def\pgfplots@glob@TMPa{pgfsys-dvips.def}
+\ifx\pgfplots@glob@TMPa\pgfsysdriver
+ \RequirePackage[dvips]{insdljs}
+ \RequirePackage[dvips]{eforms}
+\else
+\def\pgfplots@glob@TMPa{pgfsys-textures.def}
+\ifx\pgfplots@glob@TMPa\pgfsysdriver
+ \RequirePackage[textures]{insdljs}
+ \RequirePackage[textures]{eforms}
+\else
+ \RequirePackage{insdljs}
+ \RequirePackage{eforms}
+\fi\fi\fi\fi
+
+% Work-around for a bug in \begindljs of acrotex:
+% if " is active, \begindljs will be wrong.
+%--------------------------------------------------
+% HAS BEEN FIXED IN THE MEANTIME
+% \def\begindljs
+% {%
+% \iwvo{\string\begingroup}
+% {\uccode`c=`\%\uppercase{\iwvo{\string\obeyspaces\string\obeylines\string\global\string\let\string^\string^M=\string\jsR c}}}
+% {\escapechar=-1 \lccode`C=`\%\lowercase{\iwvo{\string\\catcode`\string\\"=12C}}}
+% }
+%--------------------------------------------------
+
+% Bugfix to fix incompatibility when '<' and '>' are active (as for
+% \usepackage[spanish]{babel}:
+\def\write@objs@BUGGY
+{%
+ \iwvo{\begingroup}
+ {\lccode`C=`\%\lowercase{\iwvo{\string\ccpdftex C}}}
+ {\lccode`C=`\%\lowercase{\iwvo{\string\input{dljscc.def}C\the\dljsobjtoks}}}
+ \iwvo{\endgroup}
+ \iwvo{\string\endinput}%
+}
+\def\write@objs@CORRECT
+{%
+ \iwvo{\begingroup}
+ \iwvo{\string\catcode`\string\<=12 }
+ \iwvo{\string\catcode`\string\>=12 }
+ {\lccode`C=`\%\lowercase{\iwvo{\string\ccpdftex C}}}
+ {\lccode`C=`\%\lowercase{\iwvo{\string\input{dljscc.def}C\the\dljsobjtoks}}}
+ \iwvo{\endgroup}
+ \iwvo{\string\endinput}%
+}
+\pgfutil@IfUndefined{write@objs}{}{%
+ \ifx\write@objs\write@objs@BUGGY
+ \let\write@objs=\write@objs@CORRECT
+ \fi
+}%
+
+\def\pgfplots@clickable@no{0}
+
+% This catcode-hackery is too much for me, I don't get '|' to work in
+% conjunction with ltxdoc document style.
+% So, I simply use \pgfplotsVERTBAR instead... *sigh*.
+
+% this here is a bugfix to resolve an incompatibility between insdljs
+% an \usepackage[spanish]{babel}:
+\def\@roman#1{\romannumeral #1}%
+
+% FIXME : write this stuff DIRECTLY into a pdf using \pdfobj! I don't
+% need ANY TeX code inside of the methods. Maybe I can even use some
+% sort of "include external .js file" command instead of /S /Javascript /JS
+%
+% FIXME : collect this stuff using \beginpgfplotsverbatim ...
+% \endpgfplotsverbatim to avoid the \catcode problems! Who knows
+% whether there are more of them...
+%
+% FIXME : using '\jobname' here produces a bug in insdljs :-(
+% The problem: insdljs creates a macro named 'dlsj\jobname' or
+% something like that, but if fails to use '\csname' properly. So:
+% only normal letters are allowed inside of the argument here.
+\begin{insDLJS}[processAnnotatedPlot]{pgfplotsJS}{pgfplots Clickable Plot Code}
+/*********************************************************************************
+ * function sprintf() - written by Kevin van Zonneveld as part of the php to javascript
+ * conversion project.
+ *
+ * More info at: http://kevin.vanzonneveld.net/techblog/article/phpjs_licensing/
+ *
+ * This is version: 1.33
+ * php.js is copyright 2008 Kevin van Zonneveld.
+ *
+ * Portions copyright Michael White (http://crestidg.com), _argos, Jonas
+ * Raoni Soares Silva (http://www.jsfromhell.com), Legaev Andrey, Ates Goral
+ * (http://magnetiq.com), Philip Peterson, Martijn Wieringa, Webtoolkit.info
+ * (http://www.webtoolkit.info/), Carlos R. L. Rodrigues
+ * (http://www.jsfromhell.com), Ash Searle (http://hexmen.com/blog/),
+ * Erkekjetter, GeekFG (http://geekfg.blogspot.com), Johnny Mast
+ * (http://www.phpvrouwen.nl), marrtins, Alfonso Jimenez
+ * (http://www.alfonsojimenez.com), Aman Gupta, Arpad Ray
+ * (mailto:arpad@php.net), Karol Kowalski, Mirek Slugen, Thunder.m, Tyler
+ * Akins (http://rumkin.com), d3x, mdsjack (http://www.mdsjack.bo.it), Alex,
+ * Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev),
+ * Allan Jensen (http://www.winternet.no), Andrea Giammarchi
+ * (http://webreflection.blogspot.com), Arno, Bayron Guevara, Ben Bryan,
+ * Benjamin Lupton, Brad Touesnard, Brett Zamir, Cagri Ekin, Cord, David,
+ * David James, DxGx, FGFEmperor, Felix Geisendoerfer
+ * (http://www.debuggable.com/felix), FremyCompany, Gabriel Paderni, Howard
+ * Yeend, J A R, Leslie Hoare, Lincoln Ramsay, Luke Godfrey, MeEtc
+ * (http://yass.meetcweb.com), Mick@el, Nathan, Nick Callen, Ozh, Pedro Tainha
+ * (http://www.pedrotainha.com), Peter-Paul Koch
+ * (http://www.quirksmode.org/js/beat.html), Philippe Baumann, Sakimori,
+ * Sanjoy Roy, Simon Willison (http://simonwillison.net), Steve Clay, Steve
+ * Hilder, Steven Levithan (http://blog.stevenlevithan.com), T0bsn, Thiago
+ * Mata (http://thiagomata.blog.com), Tim Wiel, XoraX (http://www.xorax.info),
+ * Yannoo, baris ozdil, booeyOH, djmix, dptr1988, duncan, echo is bad, gabriel
+ * paderni, ger, gorthaur, jakes, john (http://www.jd-tech.net), kenneth,
+ * loonquawl, penutbutterjelly, stensi
+ *
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+// ATTENTION: this method has been masked such that special characters of TeX and javascript
+// don't produce problems.
+function sprintf( ) {
+ // Return a formatted string
+ //
+ // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_sprintf/
+ // + version: 804.1712
+ // + original by: Ash Searle (http://hexmen.com/blog/)
+ // + namespaced by: Michael White (http://crestidg.com)
+ // * example 1: sprintf("\pgfplotsPERCENT01.2f", 123.1);
+ // * returns 1: 123.10
+
+ var regex = /\pgfplotsPERCENT\pgfplotsPERCENT\pgfplotsVERTBAR\pgfplotsPERCENT(\d+\$)?([-+\pgfplotsHASH0 ]*)(\*\d+\$\pgfplotsVERTBAR\*\pgfplotsVERTBAR\d+)?(\.(\*\d+\$\pgfplotsVERTBAR\*\pgfplotsVERTBAR\d+))?([scboxXuidfegEG])/g;
+ var a = arguments, i = 0, format = a[i++];
+
+ // pad()
+ var pad = function(str, len, chr, leftJustify) {
+ var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
+ return leftJustify ? str + padding : padding + str;
+ };
+
+ // justify()
+ var justify = function(value, prefix, leftJustify, minWidth, zeroPad) {
+ var diff = minWidth - value.length;
+ if (diff > 0) {
+ if (leftJustify \pgfplotsVERTBAR\pgfplotsVERTBAR !zeroPad) {
+ value = pad(value, minWidth, ' ', leftJustify);
+ } else {
+ value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
+ }
+ }
+ return value;
+ };
+
+ // formatBaseX()
+ var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
+ // Note: casts negative numbers to positive ones
+ var number = value >>> 0;
+ prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] \pgfplotsVERTBAR\pgfplotsVERTBAR '';
+ value = prefix + pad(number.toString(base), precision \pgfplotsVERTBAR\pgfplotsVERTBAR 0, '0', false);
+ return justify(value, prefix, leftJustify, minWidth, zeroPad);
+ };
+
+ // formatString()
+ var formatString = function(value, leftJustify, minWidth, precision, zeroPad) {
+ if (precision != null) {
+ value = value.slice(0, precision);
+ }
+ return justify(value, '', leftJustify, minWidth, zeroPad);
+ };
+
+ // finalFormat()
+ var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type) {
+ if (substring == '\pgfplotsPERCENT\pgfplotsPERCENT') return '\pgfplotsPERCENT';
+
+ // parse flags
+ var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false;
+ for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) {
+ case ' ': positivePrefix = ' '; break;
+ case '+': positivePrefix = '+'; break;
+ case '-': leftJustify = true; break;
+ case '0': zeroPad = true; break;
+ case '\pgfplotsHASH': prefixBaseX = true; break;
+ }
+
+ // parameters may be null, undefined, empty-string or real valued
+ // we want to ignore null, undefined and empty-string values
+ if (!minWidth) {
+ minWidth = 0;
+ } else if (minWidth == '*') {
+ minWidth = +a[i++];
+ } else if (minWidth.charAt(0) == '*') {
+ minWidth = +a[minWidth.slice(1, -1)];
+ } else {
+ minWidth = +minWidth;
+ }
+
+ // Note: undocumented perl feature:
+ if (minWidth < 0) {
+ minWidth = -minWidth;
+ leftJustify = true;
+ }
+
+ if (!isFinite(minWidth)) {
+ throw new Error('sprintf: (minimum-)width must be finite');
+ }
+
+ if (!precision) {
+ precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
+ } else if (precision == '*') {
+ precision = +a[i++];
+ } else if (precision.charAt(0) == '*') {
+ precision = +a[precision.slice(1, -1)];
+ } else {
+ precision = +precision;
+ }
+
+ // grab value using valueIndex if required?
+ var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
+
+ switch (type) {
+ case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad);
+ case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
+ case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+ case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+ case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+ case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
+ case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
+ case 'i':
+ case 'd': {
+ var number = parseInt(+value);
+ var prefix = number < 0 ? '-' : positivePrefix;
+ value = prefix + pad(String(Math.abs(number)), precision, '0', false);
+ return justify(value, prefix, leftJustify, minWidth, zeroPad);
+ }
+ case 'e':
+ case 'E':
+ case 'f':
+ case 'F':
+ case 'g':
+ case 'G':
+ {
+ var number = +value;
+ var prefix = number < 0 ? '-' : positivePrefix;
+ var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
+ var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) \pgfplotsPERCENT 2];
+ value = prefix + Math.abs(number)[method](precision);
+ return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
+ }
+ default: return substring;
+ }
+ };
+
+ return format.replace(regex, doFormat);
+}
+/*********************************************************************************/
+
+% see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance
+
+var lastPoint = null;
+var posOnMouseDownX = -1;
+var posOnMouseDownY = -1;
+
+// preallocation.
+var tmpArray1 = new Array(3);
+var tmpArray2 = new Array(3);
+
+var clickablePatternForXY="\pgfkeysvalueof{/pgfplots/annot/xy pattern}";
+var clickableStringNoSuchCoord = "\pgfkeysvalueof{/pgfplots/annot/no such coord}";
+
+var nan = Number.NaN;
+var NAN = Number.NaN;
+var inf = Number.POSITIVE_INFINITY;
+var INF = Number.POSITIVE_INFINITY;
+
+var pgfplotsAxisRegistry = new Object();
+pgfplotsAxisRegistry["rectangle"] = function( axisAnnotObj ) { return new PGFPlotsAxis( axisAnnotObj ); }
+pgfplotsAxisRegistry["ternary"] = function( axisAnnotObj ) { return new PGFPlotsTernaryAxis( axisAnnotObj ); }
+
+function PGFPlotsClassExtend( child, superClass )
+{
+ for (var property in superClass.prototype) {
+ if (typeof child.prototype[property] == "undefined")
+ child.prototype[property] = superClass.prototype[property];
+ }
+ return child;
+}
+
+function PGFPlotsCreateAxisFor( axisAnnotObj, docObject )
+{
+ var ret = null;
+ if( pgfplotsAxisRegistry[axisAnnotObj.axisType] ) {
+ ret = pgfplotsAxisRegistry[axisAnnotObj.axisType](axisAnnotObj);
+ ret.docObject = docObject;
+ }
+ return ret;
+}
+
+function ClickableCoord(canvasx,canvasy, realx,realy, text)
+{
+ this.dim=2;
+ this.canvasx=canvasx;
+ this.canvasy=canvasy;
+ this.realx=realx;
+ this.realy=realy;
+ this.text=text;
+}
+ClickableCoord.prototype =
+{
+ dim : 0,
+ canvasx : 0,
+ canvasy : 0,
+ realx : 0,
+ realy : 0,
+ realz : 0,
+ text : "",
+ sourcePlotIdx : -1,
+ sourceCoordIdx : -1,
+
+ isSnapToNearestCoord : function() {
+ return this.sourcePlotIdx >= 0;
+ },
+
+ /**
+ * Takes an already existing TextField, changes its value to point.text and places it at (x,y).
+ * Additional \c displayOpts will be used to format it.
+ */
+ draw : function( docObject, canvas, displayOpts )
+ {
+ var charsX = 1;
+ var charsY = 1.5;
+ var popupSize = ( this.isSnapToNearestCoord() ? displayOpts.popupSizeSnap : displayOpts.popupSizeGeneric );
+ if( popupSize == "auto" ) {
+ charsX = Math.max( 5,this.text.length )/2;
+
+ } else {
+ var commaOff = popupSize.indexOf( "," );
+ if( commaOff >= 0 ) {
+ charsX = popupSize.substring( 0, commaOff );
+ charsY = popupSize.substring( commaOff+1 );
+ } else
+ charsX = popupSize;
+ }
+ // console.println( this.text );
+
+ if( !displayOpts.richText )
+ canvas.value = ""+this.text;
+ else {
+ canvas.richText=true;
+ var xmlValue = "<?xml version=\"1.0\"?>"+
+ "<body> " + % xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:xfa=\"http://www.xfa.org/schema/xfa-data/1.0/\" xfa:APIVersion=\"Acrobat:9.3.2\" xfa:spec=\"2.0.2\">" +
+ %"<p>"+
+ "<span>"+ % style="font-size:9.0pt;text-align:left;color:#7E0000;font-weight:normal;font-style:normal;font-family:Helvetica,sans-serif;font-stretch:normal"
+ this.text +
+ "</span>"+
+ %"</p>"+
+ "</body>";
+ canvas.richValue = util.xmlToSpans(xmlValue);
+% debug helper:
+% spans= new Array();
+% spans[0] = new Object();
+% spans[0].text = this.text;
+% spans[0].textColor = ["RGB",0.5,0,0];
+% canvas.richValue = spans;
+% console.println(util.spansToXML(canvas.richValue));
+ }
+ var R = canvas.rect;
+ R[0] = this.canvasx;
+ R[1] = this.canvasy;
+ R[2] = R[0] + charsX*displayOpts.textSize;
+ R[3] = R[1] - charsY*displayOpts.textSize;
+ canvas.rect = R;
+ canvas.textFont = displayOpts.textFont;
+ canvas.textSize = displayOpts.textSize;
+ canvas.multiline = true;
+ canvas.fillColor = displayOpts.fillColor;//["RGB",1,1,.855];
+ canvas.doNotSpellCheck = true;
+ canvas.readonly = true;
+ if( displayOpts.printable )
+ canvas.display = display.visible;
+ else
+ canvas.display = display.noPrint;
+
+ var mark = docObject.getField( canvas.name + "mark");
+ if( mark ) {
+ R = mark.rect;
+ R[0]=this.canvasx-2;
+ R[1]=this.canvasy-2;
+ R[2]=R[0]+4;
+ R[3]=R[1]+4;
+ mark.value="";
+ mark.rect = R;
+ mark.fillColor = ["RGB",0,0,0];
+ mark.doNotSpellCheck = true;
+ mark.readonly = true;
+ if( displayOpts.printable )
+ mark.display = display.visible;
+ else
+ mark.display = display.noPrint;
+ }
+ }
+}
+
+
+
+function PGFPlotsAxis(properties) {
+ for (var property in properties)
+ this[property] = properties[property];
+}
+PGFPlotsAxis.prototype = {
+ /**
+ * @return an instance of ClickableCoord or null.
+ * The returned canvas coordinates are NOT yet initialised.
+ */
+ findNearest : function( point, rect, startSearchAt )
+ {
+ var actx;
+ var acty;
+ var minSoFar = 1e324;
+ var minPtSoFar = null;
+ var tmpPt = null;
+ var dist =0;
+ var startPlot = 0;
+ var startCoord = 0;
+ var collectedPlots = this.collectedPlots;
+ if( point.dim > 2 )
+ tmpPt = new ClickableCoord(0,0,0,0,"");
+
+ if( startSearchAt != null && startSearchAt.isSnapToNearestCoord() ) {
+ startPlot = startSearchAt.sourcePlotIdx;
+ startCoord= startSearchAt.sourceCoordIdx;
+ }
+ for( var i = startPlot; i<collectedPlots.length; ++i ) {
+ for( var j = startCoord; j<collectedPlots[i].length; ++j ) {
+ if( point.dim == 2 ) {
+ actx = collectedPlots[i][j][0] - point.realx;
+ acty = collectedPlots[i][j][1] - point.realy;
+ } else {
+ // dim > 2 should be compared using CANVAS coordinates, not real coordinates:
+ tmpPt.realx = collectedPlots[i][j][0];
+ tmpPt.realy = collectedPlots[i][j][1];
+ if( collectedPlots[i][j].length-1 >= 3 )
+ tmpPt.realz = collectedPlots[i][j][2];
+ else
+ tmpPt.realz = 0;
+ this.computeCanvasFor( tmpPt, rect );
+ actx = tmpPt.canvasx - point.canvasx;
+ acty = tmpPt.canvasy - point.canvasy;
+ }
+ dist = actx*actx + acty*acty;
+ if( dist < minSoFar ) {
+ if( minPtSoFar == null )
+ minPtSoFar = new ClickableCoord(-1,-1,0,0,"");
+ minPtSoFar.realx = collectedPlots[i][j][0];
+ minPtSoFar.realy = collectedPlots[i][j][1];
+ if( collectedPlots[i][j].length-1 >= 3 )
+ minPtSoFar.realz = collectedPlots[i][j][2];
+ else
+ minPtSoFar.realz = 0;
+ minPtSoFar.text= collectedPlots[i][j][ collectedPlots[i][j].length-1 ];
+ minPtSoFar.sourcePlotIdx = i;
+ minPtSoFar.sourceCoordIdx = j;
+ minSoFar = dist;
+ }
+ }
+ }
+ if( minPtSoFar )
+ this.computeCanvasFor(minPtSoFar,rect);
+ return minPtSoFar;
+ },
+
+ /**
+ * Returns either a ClickableCoord describing the point under the mouse cursor or a snap--to--nearest result near the mouse cursor.
+ *
+ * @param this the axis in which we shall search.
+ * @param x,y the input canvas coordinates
+ * @param canvas a pointer to the Drawing object (TextField) whose 'rect' field is the drawing canvas.
+ * @param startSearch either null or an instance of ClickableCoord for which isSnapToNearestCoord() returns true.
+ * If it is not null, the next matching point *after* it will be returned (or null if there is no matching snap--to--nearest coord after it).
+ * @return an instance of ClickableCoord or null in case the startSearch!=null and there are no further matches.
+ */
+ findClickableCoord : function( x,y, canvas, startSearch )
+ {
+ // Get and modify bounding box. The mouse movement is only accurate up to one point
+ // (mouseX and mouseY are integers), so the bounding box should be an integer as well.
+ var rect = canvas.rect; // rect = [ mincanvasx mincanvasy maxcanvasx maxcanvasy ]; relative to upper left corner
+ rect[0] = Math.round(rect[0]);
+ rect[1] = Math.round(rect[1]);
+ rect[2] = Math.round(rect[2]);
+ rect[3] = Math.round(rect[3]);
+ canvas.rect= rect;
+
+ var realx=-1;
+ var realy=-1;
+ if( this.dim == 2 ) {
+ // the following code inverts computeCanvasFor():
+ var minminminx = rect[0] + this.minminmin[0];
+ var minminminy = rect[3] + this.minminmin[1];
+ var vecx = x - minminminx;
+ var vecy = y - minminminy;
+ var A = [
+ [this.xaxis[0], this.yaxis[0]],
+ [this.xaxis[1], this.yaxis[1]] ];
+ var b = [ vecx, vecy ];
+
+ var rowpermut = [0, 1];
+ if( Math.abs(A[0][0]) < 0.0001 ) {
+ rowpermut[0] = 1;
+ rowpermut[1] = 0;
+ }
+ var pivot = -A[rowpermut[1]][0] / A[rowpermut[0]][0];
+ var unity = (b[rowpermut[1]] + pivot*b[rowpermut[0]]) / (A[rowpermut[1]][1] + pivot * A[rowpermut[0]][1]);
+ var unitx = (b[rowpermut[0]] - A[rowpermut[0]][1] * unity) / A[rowpermut[0]][0];
+
+ realx = this.xmin + unitx * (this.xmax - this.xmin);
+ realy = this.ymin + unity * (this.ymax - this.ymin);
+ //console.println( "unitx = " + unitx + "; unity " + unity );
+ }
+
+
+ var point = new ClickableCoord( x,y, realx, realy, clickablePatternForXY);
+ point.dim = this.dim;
+
+ if( startSearch && !startSearch.isSnapToNearestCoord() ) {
+ console.println( "WARNING: startSearch().isSnapToNearestCoord() has been expected!" );
+ startSearch = null;
+ }
+
+ var nearestClickableCoord = this.findNearest( point, rect, startSearch );
+ if( nearestClickableCoord ) {
+ if( getDist( point.canvasx,point.canvasy, nearestClickableCoord.canvasx, nearestClickableCoord.canvasy ) < this.snapDist ) {
+ return nearestClickableCoord;
+ }
+ }
+ if( startSearch )
+ point = null;
+ if( this.dim > 2 ) { // we didn't find a snap--to--nearest point.
+ point.text = clickableStringNoSuchCoord;
+ }
+
+ return point;
+ },
+
+ /**
+ * Takes point's real coordinates and computes its canvas coordinates. The result is written back into \c point.
+ */
+ computeCanvasFor : function( point, rect)
+ {
+ var unitx = (point.realx - this.xmin) / (this.xmax -this.xmin);
+ var unity = (point.realy - this.ymin) / (this.ymax -this.ymin);
+
+ point.canvasx = rect[0] + this.minminmin[0] + this.xaxis[0] * unitx + this.yaxis[0] * unity;
+ point.canvasy = rect[3] + this.minminmin[1] + this.xaxis[1] * unitx + this.yaxis[1] * unity;
+ if( this.dim >= 3 ) {
+ var unitz = (point.realz - this.zmin) / (this.zmax -this.zmin);
+ point.canvasx += this.zaxis[0] * unitz;
+ point.canvasy += this.zaxis[1] * unitz;
+ }
+ },
+
+ handleDragNDrop : function( formName, displayOpts )
+ {
+ if( this.dim == 3 )
+ return;
+
+ var result = this.docObject.getField( formName + "-result");
+ var result2 = this.docObject.getField( formName + "-result2");
+ var resultmark = this.docObject.getField( formName + "-resultmark");
+ var result2mark = this.docObject.getField( formName + "-result2mark");
+ var slope = this.docObject.getField( formName + "-slope" );
+ if( !result ) {
+ console.println( "WARNING: there is no TextField \"" + formName + "-result\" to display results for interactive element \"" + formName + "\"");
+ return;
+ }
+
+ var a = this.docObject.getField(formName);
+ if( ! a ) {
+ console.println( "Warning: there is no form named \"" + formName + "\"" );
+ return;
+ }
+ // dragging the mouse results in slope computation:
+ // placeClickableCoord shows the endpoint coords and returns the (transformed) coordinates into tmpArray1 and tmpArray2:
+ this.placeClickableCoord(
+ this.findClickableCoord( posOnMouseDownX, posOnMouseDownY, a, null ),
+ result, displayOpts, tmpArray1 );
+ this.placeClickableCoord(
+ this.findClickableCoord( mouseX, mouseY, a, null ),
+ result2, displayOpts, tmpArray2 );
+
+ var m = ( tmpArray2[1] - tmpArray1[1] ) / ( tmpArray2[0] - tmpArray1[0] );
+ var n = tmpArray1[1] - m * tmpArray1[0];
+
+ var slopePoint = new ClickableCoord(
+ 0.5 * ( mouseX + posOnMouseDownX ),
+ 0.5 * ( mouseY + posOnMouseDownY ),
+ -1,-1,
+ sprintf( displayOpts.slopeFormat, m, n ));
+ slopePoint.draw(
+ this.docObject,
+ slope,
+ displayOpts );
+
+ // FIXME! these document rights seem to forbid modifications to annotations, although they work for text fields!?
+ //var lineobj = this.getAnnot( a.page, formName + '-line' );
+ //console.println( 'lineobj = ' + lineobj );
+ //lineobj.points = [[mouseX,mouseY],[posOnMouseDownX,posOnMouseDownY]];
+ //lineobj.display = display.visible;
+ },
+
+ handleClick : function( formName, displayOpts )
+ {
+ var result = this.docObject.getField( formName + "-result");
+ var result2 = this.docObject.getField( formName + "-result2");
+ var resultmark = this.docObject.getField( formName + "-resultmark");
+ var result2mark = this.docObject.getField( formName + "-result2mark");
+ var slope = this.docObject.getField( formName + "-slope" );
+ if( !result ) {
+ console.println( "WARNING: there is no TextField \"" + formName + "-result\" to display results for interactive element \"" + formName + "\"");
+ return;
+ }
+ result2.display = display.hidden;
+ slope.display = display.hidden;
+ result2mark.display = display.hidden;
+
+ var a = this.docObject.getField(formName);
+ if( ! a ) {
+ console.println( "Warning: there is no form named \"" + formName + "\"" );
+ return;
+ }
+
+ var point = null;
+ var bSearchPoint = true;
+ if( lastPoint ) {
+ if( getDist( mouseX,mouseY, lastPoint.canvasx,lastPoint.canvasy) < this.snapDist ) {
+ if( lastPoint.isSnapToNearestCoord() )
+ ++lastPoint.sourceCoordIdx;
+ else
+ bSearchPoint = false;
+
+ } else
+ lastPoint = null; // no search restriction.
+ }
+ if( bSearchPoint )
+ point = this.findClickableCoord( mouseX, mouseY, a, lastPoint );
+
+ lastPoint = point;
+
+ // clicking twice onto the same point hides it:
+ if( point == null ) {
+ result.display = display.hidden;
+ resultmark.display = display.hidden;
+ return;
+ }
+
+ this.placeClickableCoord(
+ point,
+ result, displayOpts, null );
+ },
+
+ /**
+ * Changes all required Field values of \c plotRegionField, inserts the proper
+ * value and displays it at the pdf positions (x,y) .
+ *
+ * @param plotRegionField a reference to a Field object.
+ * @param x the x canvas coordinate where the annotation shall be placed and which is used to determine
+ * the annotation text.
+ * @param y the corresponding y coord.
+ * @param axis An object containing axis references.
+ * @param displayOpts An object for display flags.
+ * @param[out] retCoords will be filled with the point in axis coordinates (should have length axis.dim).
+ */
+ placeClickableCoord : function( point, textField, displayOpts, retCoords )
+ {
+ var transformedCoordx = point.realx;
+ var transformedCoordy = point.realy;
+
+ if( this.xscale.length >= 3 && this.xscale.substr(0,3) == "log" ) {
+ if( this.xscale.length > 4 ) // log:<basis>
+ point.realx = point.realx * Math.log( this.xscale.substr(4) );
+ else {
+ // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display.
+ // convert to base 10:
+ transformedCoordx = point.realx / Math.log(10);
+ }
+ point.realx = Math.exp(point.realx);
+ }
+ if( this.yscale.length >= 3 && this.yscale.substr(0,3) == "log" ) {
+ if( this.yscale.length > 4 ) // log:<basis>
+ point.realy = point.realy * Math.log( this.yscale.substr(4) );
+ else {
+ // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display.
+ // convert to base 10:
+ transformedCoordy = point.realy / Math.log(10);
+ }
+ point.realy = Math.exp(point.realy);
+ }
+ if( this.dim > 2 ) {
+ if( this.zscale.length >= 3 && this.zscale.substr(0,3) == "log" ) {
+ if( this.zscale.length > 4 ) // log:<basis>
+ point.realz = point.realz * Math.log( this.zscale.substr(4) );
+ else {
+ // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display.
+ // convert to base 10:
+ transformedCoordz = point.realz / Math.log(10);
+ }
+ point.realz = Math.exp(point.realz);
+ }
+ }
+
+ // replace the text substring "(xy)" with the actual coordinates:
+ var coordOff = point.text.indexOf(clickablePatternForXY);
+ if( coordOff >= 0 ) {
+ point.text =
+ point.text.substring( 0, coordOff ) +
+ sprintf( displayOpts.pointFormat, point.realx,point.realy,point.realz) +
+ point.text.substr( coordOff+clickablePatternForXY.length );
+ }
+ point.draw( this.docObject, textField, displayOpts );
+
+ if( retCoords ) {
+ retCoords[0] = transformedCoordx;
+ retCoords[1] = transformedCoordy;
+ if( this.dim > 2 )
+ retCoords[2] = transformedCoordz;
+ }
+
+ }
+
+}
+
+function PGFPlotsTernaryAxis(properties) {
+ PGFPlotsAxis.call(this,properties);
+}
+PGFPlotsTernaryAxis.prototype = {
+ findClickableCoord : function( x,y, canvas, startSearch )
+ {
+ // Get and modify bounding box. The mouse movement is only accurate up to one point
+ // (mouseX and mouseY are integers), so the bounding box should be an integer as well.
+ var rect = canvas.rect; // rect = [ mincanvasx mincanvasy maxcanvasx maxcanvasy ]; relative to lower left corner
+ rect[0] = Math.round(rect[0]);
+ rect[1] = Math.round(rect[1]);
+ rect[2] = Math.round(rect[2]);
+ rect[3] = Math.round(rect[3]);
+ canvas.rect= rect;
+
+ var ternaryScale = 1 / ( rect[2] - rect[0] );
+ var X = ( x - rect[0] ) * ternaryScale;
+ var Y = ( y - rect[3] ) * ternaryScale;
+
+ var realx = 1.15470053837925 * Y; // 2/sqrt(3)
+ var realz = X - 0.5 * realx;
+ var realy = 1 - realx - realz;
+
+ if( realx < 0 \pgfplotsVERTBAR\pgfplotsVERTBAR realy < 0 \pgfplotsVERTBAR\pgfplotsVERTBAR realz < 0 )
+ return null;
+
+ var point = new ClickableCoord( x,y, realx, realy, clickablePatternForXY);
+ point.realz = realz;
+ point.dim = this.dim;
+
+ if( startSearch && !startSearch.isSnapToNearestCoord() ) {
+ console.println( "WARNING: startSearch().isSnapToNearestCoord() has been expected!" );
+ startSearch = null;
+ }
+
+ var nearestClickableCoord = this.findNearest( point, rect, startSearch );
+ if( nearestClickableCoord ) {
+ if( getDist( point.canvasx,point.canvasy, nearestClickableCoord.canvasx, nearestClickableCoord.canvasy ) < this.snapDist ) {
+ return nearestClickableCoord;
+ }
+ }
+ if( startSearch )
+ point = null;
+
+ return point;
+ },
+
+ /**
+ * Takes point's real coordinates and computes its canvas coordinates. The result is written back into \c point.
+ */
+ computeCanvasFor : function( point, rect)
+ {
+ var unitx = (point.realx - this.xmin) / (this.xmax -this.xmin);
+ var unity = (point.realy - this.ymin) / (this.ymax -this.ymin);
+ var unitz = (point.realz - this.zmin) / (this.zmax -this.zmin);
+
+ var ternaryScale = ( rect[2] - rect[0] );
+ point.canvasx = rect[0] + ternaryScale* 0.5 * (unitx + 2 * unitz);
+ point.canvasy = rect[3] + ternaryScale* 0.866025403784* unitx; // sqrt(3)/2
+ },
+}
+PGFPlotsClassExtend( PGFPlotsTernaryAxis, PGFPlotsAxis );
+
+
+
+function getVecLen( t1,t2 ) {
+ return Math.sqrt( t1*t1 + t2*t2);
+}
+function getDist( x1,y1, x2,y2 ) {
+ var t1 = (x1-x2);
+ var t2 = (y1-y2);
+ return getVecLen(t1,t2);
+}
+
+function axisMouseDown(formName )
+{
+ posOnMouseDownX = mouseX;
+ posOnMouseDownY = mouseY;
+}
+
+/**
+ * @param formName the name of the clickable button. It is expected to be as large as the underlying plot.
+ * @param axis an object with the fields
+ * - xmin, xmax
+ * - ymin, ymax
+ * - xscale, yscale
+ * @param displayOpts an object with the fields
+ * - pointFormat an sprintf format string to format the final point coordinates.
+ * The default is "(\pgfplotsPERCENT.2f,\pgfplotsPERCENT.2f)"
+ * - fillColor the fill color for the annotation. Options are
+ * transparent, gray, RGB or CMYK color. Default is
+ * ["RGB",1,1,.855]
+ * - textFont / textSize
+ */
+function axisMouseUp(formName, axisAnnotObj, displayOpts)
+{
+ var axis = PGFPlotsCreateAxisFor(axisAnnotObj,this);
+ if( axis == null )
+ return;
+
+ if( Math.abs( mouseX - posOnMouseDownX ) > 6 \pgfplotsVERTBAR\pgfplotsVERTBAR
+ Math.abs( mouseY - posOnMouseDownY ) > 6 )
+ {
+ axis.handleDragNDrop( formName, displayOpts );
+
+ } else {
+ axis.handleClick( formName, displayOpts );
+ }
+}
+
+
+\end{insDLJS}
+%--------------------------------------------------
+% function hideClickableTextfields() {
+% for (var i = 0; i < this.numFields; i++) {
+% var fieldName = this.getNthFieldName(i);
+% console.println("checking Field " + fieldName + " ... ");
+% if( fieldName.substr( 0, 13 ) == "clickableplot" && fieldName.indexOf( "-result", 12 ) >= 0 ) {
+% console.println("hiding Field " + fieldName + " ... ");
+% this.getField( fieldName ).display = display.hidden;
+% }
+% }
+% }
+% hideClickableTextfields();
+%--------------------------------------------------
+
+
+\pgfkeysdef{/pgfplots/annot/xy pattern}{\pgfplots@clickable@xypat@error}%
+\pgfkeysdef{/pgfplots/annot/xy pattern/.initial}{\pgfplots@clickable@xypat@error}%
+\def\pgfplots@clickable@xypat@error{\pgfplots@error{Sorry, \string\pgfplotsset{annot/xy pattern/.initial=...} can only be assigned *before* \string\usepgfplotslibrary{clickable}}}%
+
+\pgfkeysdef{/pgfplots/annot/no such coord}{\pgfplots@clickable@nosuchcoord@error}%
+\pgfkeysdef{/pgfplots/annot/no such coord/.initial}{\pgfplots@clickable@nosuchcoord@error}%
+\def\pgfplots@clickable@nosuchcoord@error{\pgfplots@error{Sorry, \string\pgfplotsset{annot/no such coord/.initial=...} can only be assigned *before* \string\usepgfplotslibrary{clickable}}}%
+
+\def\pgfplots@clickable@beginaxis{%
+ \pgfplotsapplistXglobalnewempty\pgfplots@clickable@collectedplots
+ \gdef\pgfplots@clickable@collectedplots@isempty{1}%
+}%
+
+\def\pgfplots@clickable@startcoordcollect{%
+ \pgfplotsapplistXnewempty\pgfplots@clickable@collectedplot
+ \def\pgfplots@clickable@collectedplot@isempty{1}%
+}%
+
+{\catcode`\|=0 |catcode`|\=12 |gdef|pgfplots@clickable@bslash{\}}%
+{
+\catcode`\"=13
+\catcode`\|=13
+\catcode`\#=12
+\gdef\pgfplots@clickable@coordcollect@handlechars{%
+ \def"{\string\\\string\"}%
+ \def\#{#}%
+ \expandafter\def\csname \string"\endcsname{\string\\\string\"}%
+ \def|{\string"}%
+ \def\n{\pgfplots@clickable@bslash\string\n}%
+ \def\r{\pgfplots@clickable@bslash\string\r}%
+ \def\t{\pgfplots@clickable@bslash\string\t}%
+ \def\\{\pgfplots@clickable@bslash\pgfplots@clickable@bslash}%
+}%
+}
+\def\pgfplots@clickable@coordcollect#1{%
+ \begingroup
+ \ifx\pgfplots@current@point@x\pgfutil@empty
+ \def\pgfmathresult{nan}%
+ \else
+ \pgfplotscoordmath{x}{tostring}\pgfplots@current@point@x
+ \fi
+ \let\pgfplots@current@point@x=\pgfmathresult
+ %
+ \ifx\pgfplots@current@point@y\pgfutil@empty
+ \def\pgfmathresult{nan}%
+ \else
+ \pgfplotscoordmath{y}{tostring}\pgfplots@current@point@y
+ \fi
+ \let\pgfplots@current@point@y=\pgfmathresult
+ %
+ \ifpgfplots@curplot@threedim
+ \ifx\pgfplots@current@point@z\pgfutil@empty
+ \def\pgfmathresult{nan}%
+ \else
+ \pgfplotscoordmath{z}{tostring}\pgfplots@current@point@z
+ \fi
+ \let\pgfplots@current@point@z=\pgfmathresult
+ \fi
+ %
+ \begingroup
+ \pgfplots@clickable@coordcollect@handlechars
+ #1%
+ \xdef\pgfplots@glob@TMPa{\pgfplotsretval}%
+%\message{I have '\pgfplotsretval'}%
+ \endgroup
+ \xdef\pgfplots@glob@TMPa{\if1\pgfplots@clickable@collectedplot@isempty\else,\fi[\pgfplots@current@point@x,\pgfplots@current@point@y\ifpgfplots@curplot@threedim,\pgfplots@current@point@z\fi,"\pgfplots@glob@TMPa"]}%
+ \endgroup
+ \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@glob@TMPa}\to\pgfplots@clickable@collectedplot
+ \def\pgfplots@clickable@collectedplot@isempty{0}%
+}%
+\def\pgfplots@clickable@endcoordcollect{%
+ \pgfplotsapplistXlet\pgfplots@clickable@collectedplot@=\pgfplots@clickable@collectedplot
+ \if1\pgfplots@clickable@collectedplots@isempty
+ \expandafter\pgfplotsapplistXglobalpushback\expandafter{\expandafter[\pgfplots@clickable@collectedplot@]}\to\pgfplots@clickable@collectedplots
+ \else
+ \expandafter\pgfplotsapplistXglobalpushback\expandafter{\expandafter,\expandafter[\pgfplots@clickable@collectedplot@]}\to\pgfplots@clickable@collectedplots
+ \fi
+ \gdef\pgfplots@clickable@collectedplots@isempty{0}%
+}%
+
+% Creates an area which is clickable. A click produces a popup which
+% contains information about the point under the cursor.
+%
+% The complete (!) context needs to be provided using key-value-pairs,
+% either in '#1' or set before invocation of \pgfplotsclickablecreate.
+%
+% This command actually creates an AcroForm which employs javascript
+% whenever it is clicked. A javascript Object is created which
+% represents the context (axis limits and options). This javascript
+% object is available at runtime.
+%
+% @remark This method is public and it is NOT restricted to pgfplots.
+% The pgfplots hook simply initialises the required key-value-pairs in
+% '#1'.
+% @remark This method does not draw anything. It initialises only a
+% clickable area and javascript code.
+%
+% The required key-value-pairs are documented in the pdf-manual or can
+% be seen above.
+%
+% @attention Complete key-value validation is NOT performed here. It
+% can happen that invalid options will produce javascript bugs when
+% opened with Acrobat Reader. Use the javascript console to find them.
+\def\pgfplotsclickablecreate[#1]{%
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfqkeys{/pgfplots/annot}{#1}%
+ \fi
+ \pgfkeysgetvalue{/pgfplots/annot/jsname}\pgfplots@clickable@uniquename
+ \ifx\pgfplots@clickable@uniquename\pgfutil@empty
+ \edef\pgfplots@clickable@uniquename{clickableplot\pgfplots@clickable@no}%
+ \begingroup
+ \c@pgf@counta=\pgfplots@clickable@no\relax
+ \advance\c@pgf@counta by1
+ \xdef\pgfplots@clickable@no{\the\c@pgf@counta}%
+ \endgroup
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/annot/collected plots}\pgfplots@clickable@collectedplots@@
+ \ifx\pgfplots@clickable@collectedplots@@\pgfutil@empty
+ \def\pgfplots@clickable@collectedplots@@{[]}%
+ \fi
+ %
+ \edef\pgfplots@clickable@expanded@args{%
+ {\pgfkeysvalueof{/pgfplots/annot/width}}%
+ {\pgfkeysvalueof{/pgfplots/annot/height}}%
+ {\pgfplots@clickable@uniquename}%
+ {{
+ axisType: "\pgfkeysvalueof{/pgfplots/axis type}",
+ dim: \pgfkeysvalueof{/pgfplots/annot/dim},
+ xmin: \pgfkeysvalueof{/pgfplots/annot/xmin},
+ xmax: \pgfkeysvalueof{/pgfplots/annot/xmax},
+ ymin: \pgfkeysvalueof{/pgfplots/annot/ymin},
+ ymax: \pgfkeysvalueof{/pgfplots/annot/ymax},
+ xscale: "\pgfkeysvalueof{/pgfplots/annot/xscale}",
+ yscale: "\pgfkeysvalueof{/pgfplots/annot/yscale}",
+ \ifnum\pgfkeysvalueof{/pgfplots/annot/dim}=3
+ zmin: \pgfkeysvalueof{/pgfplots/annot/zmin},
+ zmax: \pgfkeysvalueof{/pgfplots/annot/zmax},
+ zscale: "\pgfkeysvalueof{/pgfplots/annot/zscale}",
+ zaxis: \pgfkeysvalueof{/pgfplots/annot/z axis},
+ \fi
+ collectedPlots: \pgfplots@clickable@collectedplots@@,
+ snapDist: \pgfkeysvalueof{/pgfplots/annot/snap dist},
+ minminmin: \pgfkeysvalueof{/pgfplots/annot/minminmin},
+ xaxis: \pgfkeysvalueof{/pgfplots/annot/x axis},
+ yaxis: \pgfkeysvalueof{/pgfplots/annot/y axis}
+ }}%
+ {{
+ pointFormat: "\ifnum\pgfkeysvalueof{/pgfplots/annot/dim}=3 \pgfkeysvalueof{/pgfplots/annot/point format 3d}\else \pgfkeysvalueof{/pgfplots/annot/point format}\fi",
+ slopeFormat: "\pgfkeysvalueof{/pgfplots/annot/slope format}",
+ fillColor:\pgfkeysvalueof{/pgfplots/annot/js fillColor},
+ textFont:\pgfkeysvalueof{/pgfplots/annot/font},
+ textSize:\pgfkeysvalueof{/pgfplots/annot/textSize},
+ richText:\pgfkeysvalueof{/pgfplots/annot/richtext},
+ popupSizeGeneric:"\pgfkeysvalueof{/pgfplots/annot/popup size generic}",
+ popupSizeSnap:"\pgfkeysvalueof{/pgfplots/annot/popup size snap}",
+ printable: \ifpgfplots@annot@printable true\else false\fi
+ }}%
+ }%
+ \expandafter\pgfplots@create@clickable@plotarea\pgfplots@clickable@expanded@args
+}%
+
+% Defines either \def\pgfplotsretval{1} if the current axis is
+% clickable or \def\pgfplotsretval{0} if not.
+%
+% The initial configuration is `1' for any 2d axis, `1' for 3d axes
+% with 'clickable coords' and `0' for 3d axes without `clickable
+% coords'.
+%
+% Overwrite \pgfplotsclickable@check@enable@axistype@<theaxistype> to
+% make axis type specific things.
+\def\pgfplotsclickable@check@enable{%
+ \def\pgfplotsretval{1}%
+ \ifpgfplots@threedim
+ \ifx\pgfplots@clickable@collectedplots@@\pgfutil@empty
+ \def\pgfplotsretval{0}%
+ \fi
+ \fi
+ \csname pgfplotsclickable@check@enable@axistype@\pgfkeysvalueof{/pgfplots/axis type}\endcsname
+}%
+
+% This thing is invoked from within pgfplots. It prepares and invokes
+% \pgfplotsclickablecreate.
+%
+\def\pgfplots@create@clickable@plotarea@hook{%
+ \ifpgfplots@clickable
+ \begingroup
+ % communicate collected plot coordinates:
+ \pgfplotsapplistXgloballet\pgfplots@clickable@collectedplots@@=\pgfplots@clickable@collectedplots
+ \pgfplotsapplistXglobalnewempty\pgfplots@clickable@collectedplots
+ \t@pgfplots@tokc=\expandafter{\pgfplots@clickable@collectedplots@@}%
+ \edef\pgfplots@clickable@collectedplots@@{[\the\t@pgfplots@tokc]}%
+ \pgfkeyslet{/pgfplots/annot/collected plots}\pgfplots@clickable@collectedplots@@
+ %
+ \pgfplotsclickable@check@enable
+ \if1\pgfplotsretval
+ %
+ \pgfplotscoordmath{x}{datascaletrafo inverse}{\pgfplots@xmin}%
+ \pgfplotscoordmath{x}{tostring}{\pgfmathresult}%
+ \let\pgfplots@clickable@xmin=\pgfmathresult
+ \pgfplotscoordmath{x}{datascaletrafo inverse}{\pgfplots@xmax}%
+ \pgfplotscoordmath{x}{tostring}{\pgfmathresult}%
+ \let\pgfplots@clickable@xmax=\pgfmathresult
+ %
+ \pgfplotscoordmath{y}{datascaletrafo inverse}{\pgfplots@ymin}%
+ \pgfplotscoordmath{y}{tostring}{\pgfmathresult}%
+ \let\pgfplots@clickable@ymin=\pgfmathresult
+ \pgfplotscoordmath{y}{datascaletrafo inverse}{\pgfplots@ymax}%
+ \pgfplotscoordmath{y}{tostring}{\pgfmathresult}%
+ \let\pgfplots@clickable@ymax=\pgfmathresult
+ %
+ \ifpgfplots@threedim
+ \pgfplotscoordmath{z}{datascaletrafo inverse}{\pgfplots@zmin}%
+ \pgfplotscoordmath{z}{tostring}{\pgfmathresult}%
+ \let\pgfplots@clickable@zmin=\pgfmathresult
+ \pgfplotscoordmath{z}{datascaletrafo inverse}{\pgfplots@zmax}%
+ \pgfplotscoordmath{z}{tostring}{\pgfmathresult}%
+ \let\pgfplots@clickable@zmax=\pgfmathresult
+ \fi
+ %
+ % Convert to user interface of clickable lib:
+ \pgfplotspointbbdiagonal
+ \edef\pgfplots@clickable@wd{\the\pgf@x}%
+ \pgfkeyslet{/pgfplots/annot/width}\pgfplots@clickable@wd
+ \edef\pgfplots@clickable@ht{\the\pgf@y}%
+ \pgfkeyslet{/pgfplots/annot/height}\pgfplots@clickable@ht
+ \pgfkeyslet{/pgfplots/annot/xmin}\pgfplots@clickable@xmin
+ \pgfkeyslet{/pgfplots/annot/xmax}\pgfplots@clickable@xmax
+ \pgfkeyslet{/pgfplots/annot/ymin}\pgfplots@clickable@ymin
+ \pgfkeyslet{/pgfplots/annot/ymax}\pgfplots@clickable@ymax
+ \ifpgfplots@xislinear
+ \pgfkeyssetvalue{/pgfplots/annot/xscale}{linear}%
+ \else
+ \pgfkeyssetvalue{/pgfplots/annot/xscale}{log:\pgfkeysvalueof{/pgfplots/log basis x}}%
+ \fi
+ \ifpgfplots@yislinear
+ \pgfkeyssetvalue{/pgfplots/annot/yscale}{linear}%
+ \else
+ \pgfkeyssetvalue{/pgfplots/annot/yscale}{log:\pgfkeysvalueof{/pgfplots/log basis y}}%
+ \fi
+ \ifpgfplots@threedim
+ \pgfkeyslet{/pgfplots/annot/zmin}\pgfplots@clickable@zmin
+ \pgfkeyslet{/pgfplots/annot/zmax}\pgfplots@clickable@zmax
+ \ifpgfplots@zislinear
+ \pgfkeyssetvalue{/pgfplots/annot/zscale}{linear}%
+ \else
+ \pgfkeyssetvalue{/pgfplots/annot/zscale}{log:\pgfkeysvalueof{/pgfplots/log basis z}}%
+ \fi
+ \fi
+ %
+ % note that \pgfplotspointbblowerleft has *not* been
+ % transformed after \endtikzpicture in pgfplots.code.tex.
+ % That's why I can use it here:
+ \pgfpointdiff
+ \pgfplotspointbblowerleft
+ {\pgfplotspointminminmin}%
+ \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y
+ \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}%
+ \pgfkeyslet{/pgfplots/annot/minminmin}\pgfplots@loc@TMPa
+ %
+ \pgfplotspointxaxis
+ \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y
+ \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}%
+ \pgfkeyslet{/pgfplots/annot/x axis}\pgfplots@loc@TMPa
+ %
+ \pgfplotspointyaxis
+ \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y
+ \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}%
+ \pgfkeyslet{/pgfplots/annot/y axis}\pgfplots@loc@TMPa
+ %
+ \ifpgfplots@threedim
+ \pgfplotspointzaxis
+ \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y
+ \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}%
+ \pgfkeyslet{/pgfplots/annot/z axis}\pgfplots@loc@TMPa
+ \fi
+ %
+ \pgfkeyssetvalue{/pgfplots/annot/dim}{\ifpgfplots@threedim 3\else2\fi}%
+ %
+ %
+ \pgfinterruptboundingbox%
+ \pgftext[left,bottom,at=\lowerleftinnercorner]{\pgfplotsclickablecreate[]}%
+ \endpgfinterruptboundingbox%
+ \fi
+ \endgroup
+ \fi
+}
+
+% This is the low-level method which creates Acroforms and Javascript
+% code.
+% #1: width
+% #2: height
+% #3: name
+% #4: the axisAnnotObj object (see javascript docs above)
+% #5: the displayOpts object (see javascript docs above)
+\def\pgfplots@create@clickable@plotarea#1#2#3#4#5{%
+%\tracingmacros=2\tracingcommands=2
+ %\leavevmode
+ %--------------------------------------------------
+ % hyperref.sty implementation:
+ %--------------------------------------------------
+ % \PushButton[name=#3,borderwidth=0,bordersep=0,
+ % onclick={processAnnotatedPlot("#3", #4, #5);}]{\vbox to #2{\hsize=#1\vfill\hfill}}%
+ % \TextField[name=#3-result,hidden=true]{}%
+ %--------------------------------------------------
+ %
+ %--------------------------------------------------
+ % eforms.sty implementation:
+ % it allows more customization.
+ %--------------------------------------------------
+ %
+ % Hier kommen Annotation Directories zum Zuge!
+ % -> siehe Annotations in pdf reference
+ \def\pushButtonDefaults{
+ \W{0}% border width
+ \Border{0 0 0}%
+ }%
+ \def\textFieldDefaults{%
+ \W{1}% border width
+ \S{B}% border style ( one of SDBIU )
+ \F{2}% "display" bitflag. 2^1= hidden (see "Annotation Flags" in pdf reference)
+ %ATTENTION: \F 2 (hidden) produces INCOMPATIBILITIES with figure environment!?
+ % ---> ok, that has been fixed by recent versions of hyperref.
+ % (the pdf catalog may be incomplete in older hyperref pdftex drivers)
+ \Ff{1}% "Field characteristics" bitflag. 2^0 = "read-only"
+ }%
+ \pushButton[
+ %\A{/S/JavaScript/JS(processAnnotatedPlot("#3", #4, #5);)}%
+ \AA{
+ % /U = "mouse UP"
+ % /D = "mouse DOWN"
+ /U << /S/JavaScript/JS(axisMouseUp("#3", #4, #5);) >>
+ /D << /S/JavaScript/JS(axisMouseDown("#3");) >>
+ }%
+ ]
+ {#3}
+ {#1}{#2}%
+ \textField{#3-result}{0pt}{0pt}%
+ \textField{#3-result2}{0pt}{0pt}%
+ \textField{#3-resultmark}{0pt}{0pt}%
+ \textField{#3-result2mark}{0pt}{0pt}%
+ \textField{#3-slope}{0pt}{0pt}%
+ % Unfortunately, line annotations can't be created/changed in acrobat
+ % javascript due to right problems :-(
+ %--------------------------------------------------
+ % \hbox to 0pt{\vsize=0pt \pdfannot{
+ % /Subtype /Line
+ % /Open /false
+ % /NM (#3-line)
+ % /C
+ % /CA
+ % /Subj ()
+ % /Contents ()
+ % /L [0 0 0 0]
+ % /LE [/None /OpenArrow] % PDF 1.4
+ % % /Ff 194
+ % }}%
+ %--------------------------------------------------
+ %
+ %
+ %\setLinkBbox[%
+ % \Border{}%
+ % \A{/S/JavaScript/JS(processme("#3");)}%
+ % \rawPDF{/C[1 0 0] /NM (#3)}%
+ % ]%
+ % {#1}{#2}{}%
+}
+
+\catcode`\"=\pgfplotscatcodeDQ
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.colormaps.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.colormaps.code.tex
new file mode 100644
index 0000000000..297818b877
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.colormaps.code.tex
@@ -0,0 +1,359 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for additional colormaps, especially those
+% related to matlab (tm).
+%
+% Copyright 2011 by Christian Feuersänger and Patrick Häcker.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%
+
+\pgfplotsset{
+ /pgfplots/colormap/autumn/.style={
+ /pgfplots/colormap={autumn}{rgb255=(255,0,0) rgb255=(255,255,0)}
+ },
+ /pgfplots/colormap/bled/.style={
+ /pgfplots/colormap={bled}{rgb255=(0,0,0) rgb255=(43,43,0) rgb255=(0,85,0) rgb255=(0,128,128) rgb255=(0,0,170) rgb255=(213,0,213) rgb255=(255,0,0)}
+ },
+ /pgfplots/colormap/bright/.style={
+ /pgfplots/colormap={bright}{rgb255=(0,0,0) rgb255=(78,3,100) rgb255=(2,74,255) rgb255=(255,21,181) rgb255=(255,113,26) rgb255=(147,213,114) rgb255=(230,255,0) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/cold/.style={
+ /pgfplots/colormap={cold}{rgb255=(0,0,0) rgb255=(0,0,255) rgb255=(0,255,255) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/copper/.style={
+ /pgfplots/colormap={copper}{[1cm]rgb255(0cm)=(0,0,0) rgb255(4cm)=(255,159,101) rgb255(5cm)=(255,199,127)}
+ },
+ /pgfplots/colormap/copper2/.style={
+ /pgfplots/colormap={copper2}{rgb255=(0,0,0) rgb255=(68,62,63) rgb255=(170,112,95) rgb255=(207,194,138) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/earth/.style={
+ /pgfplots/colormap={earth}{rgb255=(0,0,0) rgb255=(0,28,15) rgb255=(42,39,6) rgb255=(28,73,33) rgb255=(67,85,24) rgb255=(68,112,46) rgb255=(81,129,83) rgb255=(124,137,87) rgb255=(153,147,122) rgb255=(145,173,164) rgb255=(144,202,180) rgb255=(171,220,177) rgb255=(218,229,168) rgb255=(255,235,199) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/gray/.style={
+ /pgfplots/colormap={gray}{rgb255=(0,0,0) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/hsv/.style={
+ /pgfplots/colormap={hsv}{rgb255=(255,0,0) rgb255=(255,255,0) rgb255=(0,255,0) rgb255=(0,255,255) rgb255=(0,0,255) rgb255=(255,0,255) rgb255=(255,0,0)}
+ },
+ /pgfplots/colormap/hsv2/.style={
+ /pgfplots/colormap={hsv2}{rgb255=(0,0,0) rgb255=(128,0,128) rgb255=(0,0,230) rgb255=(0,255,255) rgb255=(0,255,0) rgb255=(255,255,0) rgb255=(255,0,0)}
+ },
+ /pgfplots/colormap/pastel/.style={
+ /pgfplots/colormap={pastel}{rgb255=(0,0,0) rgb255=(120,0,5) rgb255=(0,91,172) rgb255=(215,35,217) rgb255=(120,172,78) rgb255=(255,176,24) rgb255=(230,255,0) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/pink/.style={
+ /pgfplots/colormap={pink}{rgb255=(0,0,0) rgb255=(12,16,46) rgb255=(62,22,43) rgb255=(53,53,65) rgb255=(79,72,58) rgb255=(122,80,67) rgb255=(147,91,102) rgb255=(147,115,140) rgb255=(144,145,154) rgb255=(173,163,146) rgb255=(216,171,149) rgb255=(250,179,179) rgb255=(255,198,227) rgb255=(246,229,255) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/sepia/.style={
+ /pgfplots/colormap={sepia}{rgb255(0cm)=(0,0,0) rgb255(1cm)=(26,13,0) rgb255(18cm)=(255,230,204) rgb255(20cm)=(255,255,255)}
+ },
+ /pgfplots/colormap/bone/.style={
+ /pgfplots/colormap={bone}{[1cm]rgb255(0cm)=(0,0,0) rgb255(3cm)=(84,84,116) rgb255(6cm)=(167,199,199) rgb255(8cm)=(255,255,255)}
+},
+ %--------------------------------------------------
+ % % mesh width is too fine for these:
+ % /pgfplots/colormap/dusk/.style={
+ % /pgfplots/colormap={dusk}{
+ % [1cm]rgb255(0cm)=(0,0,0)
+ % rgb255(114cm)=(0,0,128) rgb255(701cm)=(0,128,128)
+ % rgb255(1000cm)=(128,128,128) rgb255(1299cm)=(255,128,128)
+ % rgb255(1886cm)=(255,255,128) rgb255(2000cm)=(255,255,255)}
+ % },
+ % /pgfplots/colormap/hicontrast/.style={
+ % /pgfplots/colormap={hicontrast}{
+ % [1cm]rgb255(0cm)=(0,0,0) rgb255(114cm)=(0,0,255) rgb255(299cm)=(255,0,0) rgb255(413cm)=(255,0,255)
+ % rgb255(587cm)=(0,255,0) rgb255(701cm)=(0,255,255) rgb255(886cm)=(255,255,0)
+ % rgb255(1000cm)=(255,255,255)}
+ % },
+ %--------------------------------------------------
+ /pgfplots/colormap/spring/.style={
+ /pgfplots/colormap={spring}{rgb255=(255,0,255) rgb255=(255,255,0)}
+ },
+ /pgfplots/colormap/summer/.style={
+ /pgfplots/colormap={summer}{rgb255=(0,128,102) rgb255=(255,255,102)}
+ },
+ /pgfplots/colormap/temp/.style={
+ /pgfplots/colormap={temp}{rgb255=(36,0,217) rgb255=(25,29,247) rgb255=(41,87,255) rgb255=(61,135,255) rgb255=(87,176,255) rgb255=(117,211,255) rgb255=(153,235,255) rgb255=(189,249,255) rgb255=(235,255,255) rgb255=(255,255,235) rgb255=(255,242,189) rgb255=(255,214,153) rgb255=(255,172,117) rgb255=(255,120,87) rgb255=(255,61,61) rgb255=(247,40,54) rgb255=(217,22,48) rgb255=(166,0,33)}
+ },
+ /pgfplots/colormap/thermal/.style={
+ /pgfplots/colormap={thermal}{rgb255=(0,0,0) rgb255=(77,0,179) rgb255=(255,51,0) rgb255=(255,255,0) rgb255=(255,255,255)}
+ },
+ /pgfplots/colormap/winter/.style={
+ /pgfplots/colormap={winter}{rgb255=(0,0,255) rgb255=(0,255,128)}
+ },
+ /pgfplots/colormap/viridis high res/.style={%
+ /pgfplots/colormap={viridis high res}{%
+ rgb=(0.26700401, 0.00487433, 0.32941519)
+ rgb=(0.26851048, 0.00960483, 0.33542652)
+ rgb=(0.26994384, 0.01462494, 0.34137895)
+ rgb=(0.27130489, 0.01994186, 0.34726862)
+ rgb=(0.27259384, 0.02556309, 0.35309303)
+ rgb=(0.27380934, 0.03149748, 0.35885256)
+ rgb=(0.27495242, 0.03775181, 0.36454323)
+ rgb=(0.27602238, 0.04416723, 0.37016418)
+ rgb=(0.2770184 , 0.05034437, 0.37571452)
+ rgb=(0.27794143, 0.05632444, 0.38119074)
+ rgb=(0.27879067, 0.06214536, 0.38659204)
+ rgb=(0.2795655 , 0.06783587, 0.39191723)
+ rgb=(0.28026658, 0.07341724, 0.39716349)
+ rgb=(0.28089358, 0.07890703, 0.40232944)
+ rgb=(0.28144581, 0.0843197 , 0.40741404)
+ rgb=(0.28192358, 0.08966622, 0.41241521)
+ rgb=(0.28232739, 0.09495545, 0.41733086)
+ rgb=(0.28265633, 0.10019576, 0.42216032)
+ rgb=(0.28291049, 0.10539345, 0.42690202)
+ rgb=(0.28309095, 0.11055307, 0.43155375)
+ rgb=(0.28319704, 0.11567966, 0.43611482)
+ rgb=(0.28322882, 0.12077701, 0.44058404)
+ rgb=(0.28318684, 0.12584799, 0.44496 )
+ rgb=(0.283072 , 0.13089477, 0.44924127)
+ rgb=(0.28288389, 0.13592005, 0.45342734)
+ rgb=(0.28262297, 0.14092556, 0.45751726)
+ rgb=(0.28229037, 0.14591233, 0.46150995)
+ rgb=(0.28188676, 0.15088147, 0.46540474)
+ rgb=(0.28141228, 0.15583425, 0.46920128)
+ rgb=(0.28086773, 0.16077132, 0.47289909)
+ rgb=(0.28025468, 0.16569272, 0.47649762)
+ rgb=(0.27957399, 0.17059884, 0.47999675)
+ rgb=(0.27882618, 0.1754902 , 0.48339654)
+ rgb=(0.27801236, 0.18036684, 0.48669702)
+ rgb=(0.27713437, 0.18522836, 0.48989831)
+ rgb=(0.27619376, 0.19007447, 0.49300074)
+ rgb=(0.27519116, 0.1949054 , 0.49600488)
+ rgb=(0.27412802, 0.19972086, 0.49891131)
+ rgb=(0.27300596, 0.20452049, 0.50172076)
+ rgb=(0.27182812, 0.20930306, 0.50443413)
+ rgb=(0.27059473, 0.21406899, 0.50705243)
+ rgb=(0.26930756, 0.21881782, 0.50957678)
+ rgb=(0.26796846, 0.22354911, 0.5120084 )
+ rgb=(0.26657984, 0.2282621 , 0.5143487 )
+ rgb=(0.2651445 , 0.23295593, 0.5165993 )
+ rgb=(0.2636632 , 0.23763078, 0.51876163)
+ rgb=(0.26213801, 0.24228619, 0.52083736)
+ rgb=(0.26057103, 0.2469217 , 0.52282822)
+ rgb=(0.25896451, 0.25153685, 0.52473609)
+ rgb=(0.25732244, 0.2561304 , 0.52656332)
+ rgb=(0.25564519, 0.26070284, 0.52831152)
+ rgb=(0.25393498, 0.26525384, 0.52998273)
+ rgb=(0.25219404, 0.26978306, 0.53157905)
+ rgb=(0.25042462, 0.27429024, 0.53310261)
+ rgb=(0.24862899, 0.27877509, 0.53455561)
+ rgb=(0.2468114 , 0.28323662, 0.53594093)
+ rgb=(0.24497208, 0.28767547, 0.53726018)
+ rgb=(0.24311324, 0.29209154, 0.53851561)
+ rgb=(0.24123708, 0.29648471, 0.53970946)
+ rgb=(0.23934575, 0.30085494, 0.54084398)
+ rgb=(0.23744138, 0.30520222, 0.5419214 )
+ rgb=(0.23552606, 0.30952657, 0.54294396)
+ rgb=(0.23360277, 0.31382773, 0.54391424)
+ rgb=(0.2316735 , 0.3181058 , 0.54483444)
+ rgb=(0.22973926, 0.32236127, 0.54570633)
+ rgb=(0.22780192, 0.32659432, 0.546532 )
+ rgb=(0.2258633 , 0.33080515, 0.54731353)
+ rgb=(0.22392515, 0.334994 , 0.54805291)
+ rgb=(0.22198915, 0.33916114, 0.54875211)
+ rgb=(0.22005691, 0.34330688, 0.54941304)
+ rgb=(0.21812995, 0.34743154, 0.55003755)
+ rgb=(0.21620971, 0.35153548, 0.55062743)
+ rgb=(0.21429757, 0.35561907, 0.5511844 )
+ rgb=(0.21239477, 0.35968273, 0.55171011)
+ rgb=(0.2105031 , 0.36372671, 0.55220646)
+ rgb=(0.20862342, 0.36775151, 0.55267486)
+ rgb=(0.20675628, 0.37175775, 0.55311653)
+ rgb=(0.20490257, 0.37574589, 0.55353282)
+ rgb=(0.20306309, 0.37971644, 0.55392505)
+ rgb=(0.20123854, 0.38366989, 0.55429441)
+ rgb=(0.1994295 , 0.38760678, 0.55464205)
+ rgb=(0.1976365 , 0.39152762, 0.55496905)
+ rgb=(0.19585993, 0.39543297, 0.55527637)
+ rgb=(0.19410009, 0.39932336, 0.55556494)
+ rgb=(0.19235719, 0.40319934, 0.55583559)
+ rgb=(0.19063135, 0.40706148, 0.55608907)
+ rgb=(0.18892259, 0.41091033, 0.55632606)
+ rgb=(0.18723083, 0.41474645, 0.55654717)
+ rgb=(0.18555593, 0.4185704 , 0.55675292)
+ rgb=(0.18389763, 0.42238275, 0.55694377)
+ rgb=(0.18225561, 0.42618405, 0.5571201 )
+ rgb=(0.18062949, 0.42997486, 0.55728221)
+ rgb=(0.17901879, 0.43375572, 0.55743035)
+ rgb=(0.17742298, 0.4375272 , 0.55756466)
+ rgb=(0.17584148, 0.44128981, 0.55768526)
+ rgb=(0.17427363, 0.4450441 , 0.55779216)
+ rgb=(0.17271876, 0.4487906 , 0.55788532)
+ rgb=(0.17117615, 0.4525298 , 0.55796464)
+ rgb=(0.16964573, 0.45626209, 0.55803034)
+ rgb=(0.16812641, 0.45998802, 0.55808199)
+ rgb=(0.1666171 , 0.46370813, 0.55811913)
+ rgb=(0.16511703, 0.4674229 , 0.55814141)
+ rgb=(0.16362543, 0.47113278, 0.55814842)
+ rgb=(0.16214155, 0.47483821, 0.55813967)
+ rgb=(0.16066467, 0.47853961, 0.55811466)
+ rgb=(0.15919413, 0.4822374 , 0.5580728 )
+ rgb=(0.15772933, 0.48593197, 0.55801347)
+ rgb=(0.15626973, 0.4896237 , 0.557936 )
+ rgb=(0.15481488, 0.49331293, 0.55783967)
+ rgb=(0.15336445, 0.49700003, 0.55772371)
+ rgb=(0.1519182 , 0.50068529, 0.55758733)
+ rgb=(0.15047605, 0.50436904, 0.55742968)
+ rgb=(0.14903918, 0.50805136, 0.5572505 )
+ rgb=(0.14760731, 0.51173263, 0.55704861)
+ rgb=(0.14618026, 0.51541316, 0.55682271)
+ rgb=(0.14475863, 0.51909319, 0.55657181)
+ rgb=(0.14334327, 0.52277292, 0.55629491)
+ rgb=(0.14193527, 0.52645254, 0.55599097)
+ rgb=(0.14053599, 0.53013219, 0.55565893)
+ rgb=(0.13914708, 0.53381201, 0.55529773)
+ rgb=(0.13777048, 0.53749213, 0.55490625)
+ rgb=(0.1364085 , 0.54117264, 0.55448339)
+ rgb=(0.13506561, 0.54485335, 0.55402906)
+ rgb=(0.13374299, 0.54853458, 0.55354108)
+ rgb=(0.13244401, 0.55221637, 0.55301828)
+ rgb=(0.13117249, 0.55589872, 0.55245948)
+ rgb=(0.1299327 , 0.55958162, 0.55186354)
+ rgb=(0.12872938, 0.56326503, 0.55122927)
+ rgb=(0.12756771, 0.56694891, 0.55055551)
+ rgb=(0.12645338, 0.57063316, 0.5498411 )
+ rgb=(0.12539383, 0.57431754, 0.54908564)
+ rgb=(0.12439474, 0.57800205, 0.5482874 )
+ rgb=(0.12346281, 0.58168661, 0.54744498)
+ rgb=(0.12260562, 0.58537105, 0.54655722)
+ rgb=(0.12183122, 0.58905521, 0.54562298)
+ rgb=(0.12114807, 0.59273889, 0.54464114)
+ rgb=(0.12056501, 0.59642187, 0.54361058)
+ rgb=(0.12009154, 0.60010387, 0.54253043)
+ rgb=(0.11973756, 0.60378459, 0.54139999)
+ rgb=(0.11951163, 0.60746388, 0.54021751)
+ rgb=(0.11942341, 0.61114146, 0.53898192)
+ rgb=(0.11948255, 0.61481702, 0.53769219)
+ rgb=(0.11969858, 0.61849025, 0.53634733)
+ rgb=(0.12008079, 0.62216081, 0.53494633)
+ rgb=(0.12063824, 0.62582833, 0.53348834)
+ rgb=(0.12137972, 0.62949242, 0.53197275)
+ rgb=(0.12231244, 0.63315277, 0.53039808)
+ rgb=(0.12344358, 0.63680899, 0.52876343)
+ rgb=(0.12477953, 0.64046069, 0.52706792)
+ rgb=(0.12632581, 0.64410744, 0.52531069)
+ rgb=(0.12808703, 0.64774881, 0.52349092)
+ rgb=(0.13006688, 0.65138436, 0.52160791)
+ rgb=(0.13226797, 0.65501363, 0.51966086)
+ rgb=(0.13469183, 0.65863619, 0.5176488 )
+ rgb=(0.13733921, 0.66225157, 0.51557101)
+ rgb=(0.14020991, 0.66585927, 0.5134268 )
+ rgb=(0.14330291, 0.66945881, 0.51121549)
+ rgb=(0.1466164 , 0.67304968, 0.50893644)
+ rgb=(0.15014782, 0.67663139, 0.5065889 )
+ rgb=(0.15389405, 0.68020343, 0.50417217)
+ rgb=(0.15785146, 0.68376525, 0.50168574)
+ rgb=(0.16201598, 0.68731632, 0.49912906)
+ rgb=(0.1663832 , 0.69085611, 0.49650163)
+ rgb=(0.1709484 , 0.69438405, 0.49380294)
+ rgb=(0.17570671, 0.6978996 , 0.49103252)
+ rgb=(0.18065314, 0.70140222, 0.48818938)
+ rgb=(0.18578266, 0.70489133, 0.48527326)
+ rgb=(0.19109018, 0.70836635, 0.48228395)
+ rgb=(0.19657063, 0.71182668, 0.47922108)
+ rgb=(0.20221902, 0.71527175, 0.47608431)
+ rgb=(0.20803045, 0.71870095, 0.4728733 )
+ rgb=(0.21400015, 0.72211371, 0.46958774)
+ rgb=(0.22012381, 0.72550945, 0.46622638)
+ rgb=(0.2263969 , 0.72888753, 0.46278934)
+ rgb=(0.23281498, 0.73224735, 0.45927675)
+ rgb=(0.2393739 , 0.73558828, 0.45568838)
+ rgb=(0.24606968, 0.73890972, 0.45202405)
+ rgb=(0.25289851, 0.74221104, 0.44828355)
+ rgb=(0.25985676, 0.74549162, 0.44446673)
+ rgb=(0.26694127, 0.74875084, 0.44057284)
+ rgb=(0.27414922, 0.75198807, 0.4366009 )
+ rgb=(0.28147681, 0.75520266, 0.43255207)
+ rgb=(0.28892102, 0.75839399, 0.42842626)
+ rgb=(0.29647899, 0.76156142, 0.42422341)
+ rgb=(0.30414796, 0.76470433, 0.41994346)
+ rgb=(0.31192534, 0.76782207, 0.41558638)
+ rgb=(0.3198086 , 0.77091403, 0.41115215)
+ rgb=(0.3277958 , 0.77397953, 0.40664011)
+ rgb=(0.33588539, 0.7770179 , 0.40204917)
+ rgb=(0.34407411, 0.78002855, 0.39738103)
+ rgb=(0.35235985, 0.78301086, 0.39263579)
+ rgb=(0.36074053, 0.78596419, 0.38781353)
+ rgb=(0.3692142 , 0.78888793, 0.38291438)
+ rgb=(0.37777892, 0.79178146, 0.3779385 )
+ rgb=(0.38643282, 0.79464415, 0.37288606)
+ rgb=(0.39517408, 0.79747541, 0.36775726)
+ rgb=(0.40400101, 0.80027461, 0.36255223)
+ rgb=(0.4129135 , 0.80304099, 0.35726893)
+ rgb=(0.42190813, 0.80577412, 0.35191009)
+ rgb=(0.43098317, 0.80847343, 0.34647607)
+ rgb=(0.44013691, 0.81113836, 0.3409673 )
+ rgb=(0.44936763, 0.81376835, 0.33538426)
+ rgb=(0.45867362, 0.81636288, 0.32972749)
+ rgb=(0.46805314, 0.81892143, 0.32399761)
+ rgb=(0.47750446, 0.82144351, 0.31819529)
+ rgb=(0.4870258 , 0.82392862, 0.31232133)
+ rgb=(0.49661536, 0.82637633, 0.30637661)
+ rgb=(0.5062713 , 0.82878621, 0.30036211)
+ rgb=(0.51599182, 0.83115784, 0.29427888)
+ rgb=(0.52577622, 0.83349064, 0.2881265 )
+ rgb=(0.5356211 , 0.83578452, 0.28190832)
+ rgb=(0.5455244 , 0.83803918, 0.27562602)
+ rgb=(0.55548397, 0.84025437, 0.26928147)
+ rgb=(0.5654976 , 0.8424299 , 0.26287683)
+ rgb=(0.57556297, 0.84456561, 0.25641457)
+ rgb=(0.58567772, 0.84666139, 0.24989748)
+ rgb=(0.59583934, 0.84871722, 0.24332878)
+ rgb=(0.60604528, 0.8507331 , 0.23671214)
+ rgb=(0.61629283, 0.85270912, 0.23005179)
+ rgb=(0.62657923, 0.85464543, 0.22335258)
+ rgb=(0.63690157, 0.85654226, 0.21662012)
+ rgb=(0.64725685, 0.85839991, 0.20986086)
+ rgb=(0.65764197, 0.86021878, 0.20308229)
+ rgb=(0.66805369, 0.86199932, 0.19629307)
+ rgb=(0.67848868, 0.86374211, 0.18950326)
+ rgb=(0.68894351, 0.86544779, 0.18272455)
+ rgb=(0.69941463, 0.86711711, 0.17597055)
+ rgb=(0.70989842, 0.86875092, 0.16925712)
+ rgb=(0.72039115, 0.87035015, 0.16260273)
+ rgb=(0.73088902, 0.87191584, 0.15602894)
+ rgb=(0.74138803, 0.87344918, 0.14956101)
+ rgb=(0.75188414, 0.87495143, 0.14322828)
+ rgb=(0.76237342, 0.87642392, 0.13706449)
+ rgb=(0.77285183, 0.87786808, 0.13110864)
+ rgb=(0.78331535, 0.87928545, 0.12540538)
+ rgb=(0.79375994, 0.88067763, 0.12000532)
+ rgb=(0.80418159, 0.88204632, 0.11496505)
+ rgb=(0.81457634, 0.88339329, 0.11034678)
+ rgb=(0.82494028, 0.88472036, 0.10621724)
+ rgb=(0.83526959, 0.88602943, 0.1026459 )
+ rgb=(0.84556056, 0.88732243, 0.09970219)
+ rgb=(0.8558096 , 0.88860134, 0.09745186)
+ rgb=(0.86601325, 0.88986815, 0.09595277)
+ rgb=(0.87616824, 0.89112487, 0.09525046)
+ rgb=(0.88627146, 0.89237353, 0.09537439)
+ rgb=(0.89632002, 0.89361614, 0.09633538)
+ rgb=(0.90631121, 0.89485467, 0.09812496)
+ rgb=(0.91624212, 0.89609127, 0.1007168 )
+ rgb=(0.92610579, 0.89732977, 0.10407067)
+ rgb=(0.93590444, 0.8985704 , 0.10813094)
+ rgb=(0.94563626, 0.899815 , 0.11283773)
+ rgb=(0.95529972, 0.90106534, 0.11812832)
+ rgb=(0.96489353, 0.90232311, 0.12394051)
+ rgb=(0.97441665, 0.90358991, 0.13021494)
+ rgb=(0.98386829, 0.90486726, 0.13689671)
+ rgb=(0.99324789, 0.90615657, 0.1439362 )
+ },
+ },
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.dateplot.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.dateplot.code.tex
new file mode 100644
index 0000000000..e4859785e3
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.dateplot.code.tex
@@ -0,0 +1,270 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for high-level coordinates.
+%
+% Copyright 2007/2008/2009 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\pgfutil@usemodule{pgfcalendar}
+
+% Idea: allow
+%--------------------------------------------------
+% \begin{tikzpicture}
+% \begin{axis}[
+% date coordinates in=x,
+% xticklabel={\day.\month.},
+% ]
+% \addplot coordinates {
+% (2008-01-5, 5)
+% (2008-01-12, 10)
+% (2008-01-16, 20)
+% };
+% \end{axis}
+% \end{tikzpicture}
+%--------------------------------------------------
+
+\def\pgfplotslibdateplot@number@to@julian@and@time#1.#2\julianto#3\hourto#4\minuteto#5{%
+ #3=#1
+ \pgf@xa=0.#2pt
+ \multiply\pgf@xa by24
+ \afterassignment\pgfplots@gobble@until@relax
+ \c@pgf@countb=\the\pgf@xa\relax
+ \edef#4{\the\c@pgf@countb}%
+ \advance\pgf@xa by-#4pt
+ \multiply\pgf@xa by60
+ \afterassignment\pgfplots@gobble@until@relax
+ \c@pgf@countb=\the\pgf@xa\relax
+ % round minutes (we may loose precision here)
+ \advance\pgf@xa by-\the\c@pgf@countb pt
+ \ifdim\pgf@xa>0.5pt
+ \advance\c@pgf@countb by1
+ \ifnum\c@pgf@countb=60
+ \c@pgf@countb=#4 %
+ \advance\c@pgf@countb by1
+ \edef#4{\the\c@pgf@countb}%
+ \c@pgf@countb=0
+ \fi
+ \fi
+ \edef#5{\the\c@pgf@countb}%
+}
+
+% #1 the date
+% #2 the hours
+% #3 the minutes
+% #4 is either empty or is the seconds.
+% #5 a macro which will be filled with the date part.
+% #6 the macro which will contain a number in the range [0,1]
+% representing hours and minutes.
+%
+% If you don't have seconds, you have to provide the second ':' sign
+% as dummy! In that case #4 will be empty.
+\def\pgfplotslibdateplot@map@time#1 #2:#3:#4\dateto#5\timeto#6{%
+ \pgf@xa=#2pt
+ \divide\pgf@xa by24
+ \pgf@xb=#3pt
+ \divide\pgf@xb by1440
+ \advance\pgf@xa by\pgf@xb
+ \ifdim\pgf@xa<0pt
+ \pgf@xa=0pt
+ \else
+ \ifdim\pgf@xa>1pt
+ \pgf@xa=1pt
+ \fi
+ \fi
+ \def#5{#1}%
+ \edef#6{\pgf@sys@tonumber\pgf@xa}%
+}%
+\def\pgfplotslibdateplot@discard@zero@dot 0.#1\to#2{\def#2{#1}}%
+
+%--------------------------------------------------
+%This here extends it to SECONDS, but the precision is too low
+% \def\pgfplotslibdateplot@map@time#1 #2:#3:#4\dateto#5\timeto#6{%
+% \pgf@xa=#2pt
+% \divide\pgf@xa by24
+% %
+% \pgf@xb=#3pt
+% \divide\pgf@xb by1440
+% \advance\pgf@xa by\pgf@xb
+% %
+% \def\pgfplots@loc@TMPc{#4}%
+% \ifx\pgfplots@loc@TMPc\pgfutil@empty
+% \else
+% \edef\pgfplots@loc@TMPc{\pgfplotslibdateplot@discard@trailing@colon #4}%
+% \pgf@xb=\pgfplots@loc@TMPc pt
+% \divide\pgf@xb by1440
+% \divide\pgf@xb by60
+% \advance\pgf@xa by\pgf@xb
+% \fi
+% %
+% \ifdim\pgf@xa<0pt
+% \pgf@xa=0pt
+% \else
+% \ifdim\pgf@xa>1pt
+% \pgf@xa=1pt
+% \fi
+% \fi
+% \def#5{#1}%
+% \edef#6{\pgf@sys@tonumber\pgf@xa}%
+% }%
+% \def\pgfplotslibdateplot@discard@trailing@colon#1:{#1}%
+%--------------------------------------------------
+
+\let\pgfplots@calender@ZEROSHIFT=\pgfutil@empty
+\def\pgfplots@dateplot@ensure@ZEROSHIFT#1{%
+ \ifx\pgfplots@calender@ZEROSHIFT\pgfutil@empty
+ \ifx\pgfplots@global@dateplot@defaultshift\pgfutil@empty
+ \pgfplots@log4{dateplot: setting 'date ZERO={#1}' for this axis.}%
+ \pgfplots@dateplot@parse@ZEROSHIFT{#1}%
+ \global\let\pgfplots@global@dateplot@defaultshift=\pgfmathresult
+ \fi
+ %
+ \let\pgfplots@calender@ZEROSHIFT=\pgfplots@global@dateplot@defaultshift
+ \fi
+}%
+% defines \pgfplots@calender@ZEROSHIFT to be the zero shift
+\def\pgfplots@dateplot@get@ZEROSHIFT{%
+ \ifx\pgfplots@calender@ZEROSHIFT\pgfutil@empty
+ \ifx\pgfplots@global@dateplot@defaultshift\pgfutil@empty
+ % should never happen
+ \pgfplots@error{Illegal internal state: no 'date ZERO' value found}%
+ \def\pgfplots@calender@ZEROSHIFT{0}%
+ \else
+ \let\pgfplots@calender@ZEROSHIFT=\pgfplots@global@dateplot@defaultshift
+ \fi
+ \fi
+}%
+
+\def\pgfplots@dateplot@parse@ZEROSHIFT#1{%
+ \begingroup
+ \pgfcalendardatetojulian{#1}\c@pgf@counta
+ \edef\pgfmathresult{\the\c@pgf@counta}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+\expandafter\def\expandafter\pgfplots@notify@options@are@set\expandafter{\pgfplots@notify@options@are@set
+ \global\let\pgfplots@global@dateplot@defaultshift=\pgfutil@empty
+}
+
+\pgfplotsset{
+ /pgfplots/date ZERO/.code={%
+ \pgfplots@dateplot@parse@ZEROSHIFT{#1}%
+ \let\pgfplots@calender@ZEROSHIFT=\pgfmathresult
+ },
+ /pgfplots/date coordinates in/.code={%
+ \pgfkeysdef{/pgfplots/#1 coord trafo}{%
+ \begingroup
+ \edef\pgfplotstempjuliandate{##1}%
+ % check if we also have a TIME like '2006-01-01 11:21'
+ \expandafter\pgfutil@in@\expandafter:\expandafter{\pgfplotstempjuliandate}%
+ \ifpgfutil@in@
+ % we have a TIME!
+ \expandafter\pgfplotslibdateplot@map@time\pgfplotstempjuliandate:\dateto\pgfplotstempjuliandate\timeto\pgfplotstemptime
+ \else
+ \let\pgfplotstemptime=\pgfutil@empty
+ \fi
+ %
+ \expandafter\pgfplots@dateplot@ensure@ZEROSHIFT\expandafter{\pgfplotstempjuliandate}%
+ %
+ \expandafter\pgfcalendardatetojulian\expandafter{\pgfplotstempjuliandate}\c@pgf@counta
+ \advance\c@pgf@counta by-\pgfplots@calender@ZEROSHIFT\relax
+ \ifx\pgfplotstemptime\pgfutil@empty
+ % no time:
+ \edef\pgfmathresult{\the\c@pgf@counta}%
+ \else
+ % add time fraction (which should be in the range
+ % [0,1]).
+ \ifdim\pgfplotstemptime pt<1pt
+ % discard prefix '0.':
+ \expandafter\pgfplotslibdateplot@discard@zero@dot\pgfplotstemptime\to\pgfplotstemptime
+ \edef\pgfmathresult{\the\c@pgf@counta.\pgfplotstemptime}%
+ \else
+ % assume \pgfplotstemptime=1pt :
+ \advance\c@pgf@counta by1
+ \edef\pgfmathresult{\the\c@pgf@counta}%
+ \fi
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ }%
+ \pgfkeysdef{/pgfplots/#1 coord inv trafo}{%
+ \edef\pgfplotstempjuliandatenumeric{##1}%
+ \begingroup
+ \pgfplots@dateplot@get@ZEROSHIFT
+ %
+ \expandafter\pgfplotslibdateplot@number@to@julian@and@time\pgfplotstempjuliandatenumeric\julianto{\c@pgf@counta}\hourto\Hour\minuteto\Minute%
+ \advance\c@pgf@counta by\pgfplots@calender@ZEROSHIFT\relax
+ \expandafter\pgfcalendarjuliantodate\expandafter{\the\c@pgf@counta}\year\month\day
+ \xdef\pgfplotslibdateplot@TMP{%
+ \noexpand\def\noexpand\year{\year}%
+ \noexpand\def\noexpand\month{\month}%
+ \noexpand\def\noexpand\day{\day}%
+ \noexpand\def\noexpand\Hour{\Hour}%
+ \noexpand\def\noexpand\Minute{\Minute}%
+ }%
+ \endgroup
+ \pgfplotslibdateplot@TMP
+ \let\hour=\Hour
+ \let\minute=\Minute
+ \ifnum\hour<10
+ \edef\hour{0\hour}%
+ \fi
+ \ifnum\minute<10
+ \edef\minute{0\minute}%
+ \fi
+ \def\Second{0}%
+ \def\second{00}%
+ \edef\lowlevel{##1}%
+ \pgfkeysifdefined{/pgfplots/date default inv/#1}{%
+ \edef\pgfmathresult{\pgfkeysvalueof{/pgfplots/date default inv/#1}}%
+ }{%
+ \edef\pgfmathresult{\year-\month-\day\space\hour:\minute:\second}%
+ }%
+ }%
+ \pgfkeysifdefined{/pgfplots/#1ticklabel/.@cmd}{%
+ \pgfkeysalso{%
+ /pgfplots/#1ticklabel={\tick},%
+ /pgfplots/scaled #1 ticks=false,%
+ /pgfplots/plot coordinates/math parser=false,%
+ }%
+ }{%
+ % OK. The style can be used for other coordinates as well
+ % (like hist/data)
+ }%
+ %
+ \pgfkeysifdefined{/pgfplots/#1 is expr}{%
+ \pgfkeyssetvalue{/pgfplots/#1 is expr}{0}%
+ }{}%
+ %
+ % Allow a callback (optional)
+ \pgfkeysifdefined{/pgfplots/#1/@execute on coord trafo changed/.@cmd}{%
+ \pgfkeysalso {/pgfplots/#1/@execute on coord trafo changed}%
+ }{}%
+ },
+ /pgfplots/date coordinates in/.value required,
+ %
+ % #1: the argument for 'data coordinates in={#1}
+ % #2: the default for the inverse transformation. If there is
+ % none, a default will be chosen automatically (with full
+ % information)
+ /pgfplots/date coordinates default inverse/.style 2 args={%
+ /pgfplots/date default inv/#1/.initial=#2,
+ },
+ /pgfplots/date coordinates default inverse={x}{\year-\month-\day},
+ /pgfplots/date coordinates default inverse={y}{\year-\month-\day},
+ /pgfplots/date coordinates default inverse={z}{\year-\month-\day},
+}
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.decorations.softclip.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.decorations.softclip.code.tex
new file mode 100644
index 0000000000..06b3c62dfe
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.decorations.softclip.code.tex
@@ -0,0 +1,36 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2013 by Christian Feuersaenger
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+%
+% This library adds support for a "soft clip" decoration. It applies
+% clipping to an input path, but rather than simply instructing the
+% display driver to clip the path, it computes a new clip path from
+% the input.
+%
+% This library is (currently) on top of tikz.
+
+\usetikzlibrary{decorations.softclip}
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.external.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.external.code.tex
new file mode 100644
index 0000000000..dabbda099e
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.external.code.tex
@@ -0,0 +1,131 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for image externalization
+%
+% Copyright 2007/2008/2009 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% This file is a wrapper which loads the external library.
+%
+% If we have a recent pgf version, use its external lib. If not: load
+% the copy shipped with pgfplots.
+%
+% NOTE:
+% the external library has been written by Christian Feuersänger as
+% part of his work on pgfplots -- since it is general purpose, it is
+% part of tikz. A copy comes with pgfplots.
+%
+%
+
+% \pgfplots@glob@TMPa = 1 iff we can rely on the external lib shipped
+% with tikz:
+% -> see also below for a list of patches!
+\pgfplotsiffileexists{tikzlibraryexternal.code.tex}{%
+ \pgfplots@ifneedspgfcompabitibilitycode@has@pgf@one@zero@zero{%
+ \def\pgfplots@glob@TMPa{0}%
+ }{%
+ \def\pgfplots@glob@TMPa{1}%
+ }%
+}{%
+ \def\pgfplots@glob@TMPa{0}%
+}%
+
+\def\pgfplots@backw@compat@external@load{%
+ \immediate\write16{Package pgfplots external lib: loading complementary code for your PGF version...}
+ % Backwards compatibility:
+ \let\pgfplots@backw@compat@AtBeginDocument=\AtBeginDocument
+ \def\AtBeginDocument##1{}%
+ \input pgfplotsoldpgfsupp_pgfcoreexternal.code.tex
+ \input pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex
+ \let\AtBeginDocument=\pgfplots@backw@compat@AtBeginDocument
+}%
+
+
+\if1\pgfplots@glob@TMPa
+ \usetikzlibrary{external}%
+ %
+ % check for patches
+ \gdef\pgfplots@glob@TMPa{0}%
+ \pgfutil@ifundefined{c@tikzexternal@version}{%
+ \gdef\pgfplots@glob@TMPa{1}%
+ }{%
+ \gdef\pgfplots@glob@TMPa{0}%
+ }%
+ %
+ \if1\pgfplots@glob@TMPa
+ \pgfplots@backw@compat@external@load
+ \fi
+\else
+ \pgfplots@backw@compat@external@load
+\fi
+
+% This here is a section for patches.
+%
+% A patch contains software pieces which add individual functionality.
+%
+% The content is copyright Christian Feuersaenger. I added it to both
+% PGF and TikZ such that it can be distributed easily
+\expandafter\ifx\csname pgfsys@prepare@papersize\endcsname\relax
+ \immediate\write16{Package pgfplots external lib: patching system driver code for your PGF version...}
+ % Patch drivers.... this is needed since recent revisions.
+ \def\pgfsys@prepare@papersize#1#2{\pgfsys@papersize{#1}{#2}}
+ \begingroup
+ \expandafter\def\csname pgfplots@backw@ext@pgfsys-dvips.def\endcsname{%
+ \gdef\pgfsys@prepare@papersize##1##2{%
+ \expandafter\gdef\expandafter\pgfsys@atbegindocument\expandafter{\pgfsys@atbegindocument\special{papersize=##1,##2}}%
+ }
+ }%
+ \expandafter\def\csname pgfplots@backw@ext@pgfsys-dvipdfmx.def\endcsname{%
+ \gdef\pgfsys@prepare@papersize##1##2{%
+ \expandafter\gdef\expandafter\pgfsys@atbegindocument%
+ \expandafter{\pgfsys@atbegindocument
+ \special{papersize=##1,##2}%
+ }
+ }
+ }%
+ \expandafter\def\csname pgfplots@backw@ext@pgfsys-dvipdfm.def\endcsname{%
+ \gdef\pgfsys@prepare@papersize##1##2{%
+ \expandafter\gdef\expandafter\pgfsys@atbegindocument%
+ \expandafter{\pgfsys@atbegindocument
+ \special{papersize=##1,##2}%
+ }
+ }
+ }%
+ \csname pgfplots@backw@ext@\pgfsysdriver\endcsname
+ \endgroup
+\fi
+
+
+
+\def\tikzexternal@externalizefig@systemcall@call@old#1{%
+ \iftikzexternal@verboseio
+ \immediate\write16{===== 'mode=convert with system call': Invoking '#1' ========}%
+ \fi
+ \immediate\write18{#1}%
+}%
+
+\def\tikzexternal@externalizefig@systemcall@call@new#1{%
+ \iftikzexternal@verboseio
+ \immediate\write16{===== 'mode=convert with system call': Invoking '#1' ========}%
+ \fi
+ \pgfutil@shellescape{#1}%
+}%
+\ifx\tikzexternal@externalizefig@systemcall@call\tikzexternal@externalizefig@systemcall@call@old
+ \let\tikzexternal@externalizefig@systemcall@call=\tikzexternal@externalizefig@systemcall@call@new
+\fi
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.fillbetween.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.fillbetween.code.tex
new file mode 100644
index 0000000000..e548032e2d
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.fillbetween.code.tex
@@ -0,0 +1,240 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2013 by Christian Feuersaenger
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+
+% This library adds support for high-level instructions for "fill area
+% between two arbitrary plots of functions".
+%
+% It activates the syntax
+%
+% \addplot fill between[of=A and B];
+%
+% where A and B are two plots named by 'name path='.
+%
+% In fact, this here is not much more than a low-level invocation of
+% \pgfpathfillbetween
+% and a couple of styles. It could become a TikZ library because it
+% actually works on any two named paths, but it has its restrictions
+% regarding the supported input paths: both need to be plots of
+% functions (non-intersecting, should have at most one function value
+% for each canvas X coord)
+
+\pgfutil@IfUndefined{pgfplotsset}{%
+ \pgferror{Please load pgfplots before pgfplots.fillbetween.}%
+ \endinput
+}{}%
+
+\usetikzlibrary{fillbetween}
+\usepgfplotslibrary{decorations.softclip}
+
+% Takes a domain #1:#2 and returns a new domain \pgfplotsretval:\pgfplotsretvalb which is larger.
+\def\pgfplots@softclip@enlarge#1#2{%
+ \begingroup
+ \pgfplotscoordmath{default}{parse}{0.1*(#2-#1)}\let\pgfplots@diff=\pgfmathresult
+ \pgfplotscoordmath{default}{if is}{\pgfplots@diff}{+}{%
+ % ok, max > min. Should always be the case.
+ \pgfplotscoordmath{default}{parse}{#1-\pgfplots@diff}\let\pgfplots@min=\pgfmathresult
+ \pgfplotscoordmath{default}{parse}{#2+\pgfplots@diff}\let\pgfplots@max=\pgfmathresult
+ }{%
+ \pgfplotscoordmath{default}{if is}{\pgfplots@diff}{0}{%
+ % ok, max == min. Very Strange.
+ \pgfplotscoordmath{default}{parse}{#1-1}\let\pgfplots@min=\pgfmathresult
+ \pgfplotscoordmath{default}{parse}{#2+1}\let\pgfplots@max=\pgfmathresult
+ }{%
+ % ok, max < min. Strange.
+ \pgfplotscoordmath{default}{parse}{#1+\pgfplots@diff}\let\pgfplots@min=\pgfmathresult
+ \pgfplotscoordmath{default}{parse}{#2-\pgfplots@diff}\let\pgfplots@max=\pgfmathresult
+ }%
+ }%
+ \global\let\pgfplots@glob@TMPa=\pgfplots@min
+ \global\let\pgfplots@glob@TMPb=\pgfplots@max
+ \endgroup
+ \let\pgfplotsretval=\pgfplots@glob@TMPa
+ \let\pgfplotsretvalb=\pgfplots@glob@TMPb
+}%
+
+\pgfkeys{
+ /pgfplots/every fill between plot/.style={/pgfplots/area legend,/tikz/fill,/pgfplots/on layer=pre main},
+ /tikz/soft clip assign/domain/.code args={#1:#2}{%
+ \pgfplotsifisvisualizationphase{%
+ \ifpgfplots@yislinear
+ \pgfplots@softclip@enlarge
+ {min(\pgfkeysvalueof{/pgfplots/ymin},\pgfplots@data@ymin)}%
+ {max(\pgfkeysvalueof{/pgfplots/ymax},\pgfplots@data@ymax)}%
+ \else
+ \pgfplots@softclip@enlarge{\pgfkeysvalueof{/pgfplots/ymin}}{\pgfkeysvalueof{/pgfplots/ymax}}%
+ \fi
+ \edef\pgfplots@loc@TMPa{%
+ (axis cs:#1,\pgfplotsretval)
+ rectangle (axis cs:#2,\pgfplotsretvalb)}%
+ \pgfkeysalso{/tikz/soft clip assign/path/.expand once=\pgfplots@loc@TMPa}%
+ }{}%
+ },%
+ /tikz/soft clip assign/y domain y/.style={/tikz/soft clip assign/domain y={#1}},
+ /tikz/soft clip assign/domain y/.code args={#1:#2}{%
+ \pgfplotsifisvisualizationphase{%
+ \ifpgfplots@yislinear
+ \pgfplots@softclip@enlarge
+ {min(\pgfkeysvalueof{/pgfplots/xmin},\pgfplots@data@xmin)}%
+ {max(\pgfkeysvalueof{/pgfplots/xmax},\pgfplots@data@xmax)}%
+ \else
+ \pgfplots@softclip@enlarge{\pgfkeysvalueof{/pgfplots/xmin}}{\pgfkeysvalueof{/pgfplots/xmax}}%
+ \fi
+ \edef\pgfplots@loc@TMPa{%
+ (axis cs:\pgfplotsretval,#1)
+ rectangle (axis cs:\pgfplotsretvalb,#2)}%
+ \pgfkeysalso{/tikz/soft clip assign/path/.expand once=\pgfplots@loc@TMPa}%
+ }{}%
+ },%
+ %
+ /pgfplots/execute at begin axis@@/.add={}{%
+ \gdef\b@pgfplotsfillbetween@list@has@set@layers{0}%
+ },
+}
+
+% The options are from
+% \addplot[#1] fill between[#2] #3;
+%
+% This method is invoked from the global \addplot dispatching.
+\def\pgfplotslibraryfillbetween@addplot#1#2#3{%
+ %
+ \pgfplots@start@plot@with@behavioroptions{/pgfplots/every fill between plot,#1}%
+ %
+ % '/tikz/fill between/on layer' is not really integrated into the option processing of pgfplots.
+ % improve it here (to some extend):
+ \pgfkeysgetvalue{/pgfplots/on layer}\pgfplots@loc@TMPa
+ \pgfkeyslet{/tikz/fill between/on layer}{\pgfplots@loc@TMPa}%
+ %
+ % FIXME: is this here an accident!?
+ \pgfkeysvalueof{/pgfplots/execute at end survey}%
+ \pgfplots@remember@survey@option@list
+ %
+ %
+ \pgfplotslibraryfillbetweenpreparecurrentlayer
+ %
+ \pgfplots@addplot@enqueue@coords{%
+ % precmd
+ }{%
+ % empty - this here is a TikZ instruction, not a "real" \addplot command
+ }{%
+ \def\b@pgfplots@fillbetween@clip@on@layer{0}%
+ \pgfkeysgetvalue{/tikz/fill between/on layer}\pgfplots@loc@TMPa
+ \edef\pgfplots@fillbetween@layer{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@fillbetween@layer\pgfutil@empty
+ \else
+ \ifpgfplots@clip
+ \def\b@pgfplots@fillbetween@clip@on@layer{1}%
+ % This here is messy: we have to clip on the other
+ % layer. I gave up to install this clip path once
+ % per axis, that's why I do it for each individual
+ % fillbetween - let us hope this is not too
+ % inefficient.
+ %
+ % I had to give up because the result appears to
+ % require a pattern of sorts
+ % \onlayer{L}
+ % \scope
+ % \clip ... ;
+ % \endonlayer
+ % ...
+ %
+ % \onlayer{L}
+ % \endscope
+ % \endonlayer
+ %
+ % which is forbidden in TeX -- and using
+ % \pgfsys@beginscope resulted in invalid PDF.
+ %
+ \pgfplotsonlayer{\pgfplots@loc@TMPa}%
+ \scope
+ \pgfplotspathaxisoutline
+ \pgfusepath{clip}%
+ \fi
+ \fi
+ %
+ % the path instruction:
+ \tikzfillbetween[#2]{%
+ /pgfplots/.search also=/tikz,%
+ /pgfplots/.cd,%
+ /tikz/fill between/every last segment/.append style={/tikz/fill between/path after segment={#3}},%
+ #1%
+ }%
+ %
+ \if1\b@pgfplots@fillbetween@clip@on@layer
+ \endscope
+ \endpgfplotsonlayer%
+ \fi
+ }{%
+ % post command.
+ }%
+}
+
+% ONLY TO BE USED AS LATER OPTION!
+\pgfkeysdef{/pgfplots/fill between/@ensure layers}{%
+ \ifpgfplots@layered@graphics
+ \else
+ \pgfplots@log3{fill between: activating layered graphics}%
+ \pgfplotsset{set layers}%
+ \pgfplots@set@options@of@layered@graphics
+ \fi
+}%
+
+% SIDE-EFFECT: modifies \b@pgfplotsfillbetween@list@has@set@layers and
+\def\pgfplotslibraryfillbetweenpreparecurrentlayer{%
+ \pgfkeysgetvalue{/tikz/fill between/on layer}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \if0\b@pgfplotsfillbetween@list@has@set@layers
+ %
+ \pgfplotssetlateoptions{fill between/@ensure layers}%
+ \gdef\b@pgfplotsfillbetween@list@has@set@layers{1}%
+ \fi
+ \fi
+}
+
+\def\pgfplots@tikzfillbetween{\pgfutil@ifnextchar[{\pgfplots@tikzfillbetween@opt}{\pgfplots@tikzfillbetween@opt[]}}
+\def\pgfplots@tikzfillbetween@opt[#1]#2{%
+ \pgfplots@addplot@enqueue@coords{%
+ % precmd
+ }{%
+ % empty - this here is a TikZ instruction, not a "real" \addplot command
+ }{%
+ % the path instruction:
+ \tikzfillbetween[#1]{#2}%
+ }{%
+ % post command.
+ }%
+}%
+
+\expandafter\def\expandafter\pgfplots@replace@path@commands\expandafter{\pgfplots@replace@path@commands
+ \let\pgfplots@orig@tikzfillbetween=\tikzfillbetween
+ \let\tikzfillbetween=\pgfplots@tikzfillbetween
+}%
+\expandafter\def\expandafter\pgfplots@restore@path@commands\expandafter{\pgfplots@restore@path@commands
+ \let\tikzfillbetween=\pgfplots@orig@tikzfillbetween
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.groupplots.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.groupplots.code.tex
new file mode 100644
index 0000000000..a1a11127c2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.groupplots.code.tex
@@ -0,0 +1,530 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2009 by Nick Papior Andersen.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\newif\ifpgfplots@group@sharedlabels
+
+\def\pgfplots@group@xticklabels{}
+\def\pgfplots@group@yticklabels{}
+\def\pgfplots@group@xlabels{}
+\def\pgfplots@group@ylabels{}
+\def\pgfplots@group@totalplots{1}
+\def\pgfplots@group@columns{1}
+\def\pgfplots@group@rows{1}
+\def\pgfplots@group@name{group}
+\def\pgfplots@group@style{}
+\gdef\pgfplots@group@rmopts{}
+\newcount\pgfplots@group@current@plot
+\newcount\pgfplots@group@current@row
+\newcount\pgfplots@group@current@column
+
+\usetikzlibrary{calc}
+
+\pgfkeys{
+ /pgfplots/group/.is family,
+ /pgfplots/group style/.store in=\pgfplots@group@style,
+ /pgfplots/group/horizontal sep/.initial=1cm,
+ /pgfplots/group/vertical sep/.initial=1cm,
+ /pgfplots/group/group size/.style args={#1 by #2}{/pgfplots/group/columns=#1,/pgfplots/group/rows=#2},
+ /pgfplots/group/group size/.default={1 by 1},
+ /pgfplots/group/columns/.store in=\pgfplots@group@columns,
+ /pgfplots/group/rows/.store in=\pgfplots@group@rows,
+ /pgfplots/group/every plot/.style=,
+ /pgfplots/group/shared labels/.is if=pgfplots@group@sharedlabels,
+ /pgfplots/group/shared labels=false,
+ /pgfplots/group/xticklabels at/.is choice,
+ /pgfplots/group/xticklabels at/all/.code=\def\pgfplots@group@xticklabels{all},
+ /pgfplots/group/xticklabels at/edge top/.code=\def\pgfplots@group@xticklabels{top},
+ /pgfplots/group/xticklabels at/edge bottom/.code=\def\pgfplots@group@xticklabels{lower},
+ /pgfplots/group/xticklabels at/edge left/.code=\def\pgfplots@group@xticklabels{left}, % TODO
+ /pgfplots/group/xticklabels at/edge right/.code=\def\pgfplots@group@xticklabels{right}, % TODO
+ /pgfplots/group/xticklabels at=all,
+ /pgfplots/group/yticklabels at/.is choice,
+ /pgfplots/group/yticklabels at/all/.code=\def\pgfplots@group@yticklabels{all},
+ /pgfplots/group/yticklabels at/edge left/.code=\def\pgfplots@group@yticklabels{left},
+ /pgfplots/group/yticklabels at/edge right/.code=\def\pgfplots@group@yticklabels{right},
+ /pgfplots/group/yticklabels at/edge top/.code=\def\pgfplots@group@yticklabels{top}, % TODO
+ /pgfplots/group/yticklabels at/edge bottom/.code=\def\pgfplots@group@yticklabels{bottom}, % TODO
+ /pgfplots/group/yticklabels at=all,
+ /pgfplots/group/xlabels at/.is choice,
+ /pgfplots/group/xlabels at/all/.code=\def\pgfplots@group@xlabels{all},
+ /pgfplots/group/xlabels at/edge top/.code=\def\pgfplots@group@xlabels{top},
+ /pgfplots/group/xlabels at/edge bottom/.code=\def\pgfplots@group@xlabels{lower},
+ /pgfplots/group/xlabels at/edge right/.code=\def\pgfplots@group@xlabels{right}, % TODO
+ /pgfplots/group/xlabels at/edge left/.code=\def\pgfplots@group@xlabels{left},% TODO
+ /pgfplots/group/xlabels at=all,
+ /pgfplots/group/ylabels at/.is choice,
+ /pgfplots/group/ylabels at/all/.code=\def\pgfplots@group@ylabels{all},
+ /pgfplots/group/ylabels at/edge left/.code=\def\pgfplots@group@ylabels{left},
+ /pgfplots/group/ylabels at/edge right/.code=\def\pgfplots@group@ylabels{right},
+ /pgfplots/group/ylabels at/edge top/.code=\def\pgfplots@group@ylabels{top}, % TODO
+ /pgfplots/group/ylabels at/edge bottom/.code=\def\pgfplots@group@ylabels{bottom}, % TODO
+ /pgfplots/group/ylabels at=all,
+ /pgfplots/group/x descriptions at/.is choice,
+ /pgfplots/group/x descriptions at/all/.style={
+ /pgfplots/group/xlabels at=all,
+ /pgfplots/group/xticklabels at=all
+ },
+ /pgfplots/group/x descriptions at/edge bottom/.style={
+ /pgfplots/group/xlabels at=edge bottom,
+ /pgfplots/group/xticklabels at=edge bottom
+ },
+ /pgfplots/group/x descriptions at/edge top/.style={
+ /pgfplots/group/xlabels at=edge top,
+ /pgfplots/group/xticklabels at=edge top
+ },
+ /pgfplots/group/y descriptions at/.is choice,
+ /pgfplots/group/y descriptions at/all/.style={
+ /pgfplots/group/ylabels at=all,
+ /pgfplots/group/yticklabels at=all
+ },
+ /pgfplots/group/y descriptions at/edge left/.style={
+ /pgfplots/group/ylabels at=edge left,
+ /pgfplots/group/yticklabels at=edge left
+ },
+ /pgfplots/group/y descriptions at/edge right/.style={
+ /pgfplots/group/ylabels at=edge right,
+ /pgfplots/group/yticklabels at=edge right
+ },
+ /pgfplots/group/group name/.store in=\pgfplots@group@name,
+ /pgfplots/group/empty plot/.style={/pgfplots/hide axis=true},
+ /pgfplots/trim axis group left/.code={%
+ \pgfutil@ifundefined{pgfsettrimleft}{%
+ \pgfplots@error{Sorry, the 'trim axis group left' requires a more recent PGF version.}%
+ }{%
+ \pgfkeysalso{/tikz/trim left={(group c1r1.south west)}}%
+ }%
+ },%
+ /tikz/trim axis group left/.style={/pgfplots/trim axis group left},
+ /pgfplots/trim axis group right/.code={%
+ \pgfutil@ifundefined{pgfsettrimleft}{%
+ \pgfplots@error{Sorry, the 'trim axis group right' requires a more recent PGF version.}%
+ }{%
+ \pgfkeysalso{/pgfplots/trim axis right}%
+ }%
+ },%
+ /tikz/trim axis group right/.style={/pgfplots/trim axis group right},
+}
+\pgfkeys{
+ /pgfplots/warning/groupplots/too many plots/.code 2 args={%
+ \pgfplotsthrow@warning{You are adding more plots than you specified, current plots=#1\space vs. total allowed
+ plots=#2.}%
+ },
+}
+
+\def\nextgroupplot{%
+ \pgfutil@ifnextchar[{\pgfplots@group@nextplot}{\pgfplots@group@nextplot[]}%}
+}
+
+%
+% The actual addition of the new plots
+%
+\def\pgfplots@group@nextplot[#1]{%
+ % Check if it legal to produce another plot
+ \ifnum\pgfplots@group@current@plot=\pgfplots@group@totalplots\relax
+ \pgfplotswarning{groupplots/too many plots}{\the\pgfplots@group@current@plot}{\pgfplots@group@totalplots}\pgfeov
+ \else
+ %
+ % If there has been other plots before then end the plot
+ %
+ \ifnum0<\pgfplots@group@current@plot\relax
+ % DEBUG: \message{DEBUG: Ending plot}
+ \endpgfplots@environment@opt
+ \fi
+ % Prepare for next plot, increment plot, row and column
+ \pgfplots@group@increment@numbers
+ % DEBUG: \message{DEBUG: Cur. Plot: \the\pgfplots@group@current@plot. Current Row: \the\pgfplots@group@current@row. Current Column: \the\pgfplots@group@current@column.}
+ % Creation of the new axis environment
+ \pgfplots@group@environment@create{#1}
+ \fi
+}
+%
+% This creates an environment according to which plots that have been typeset.
+% The code utilizes previous plots anchor points to position themselves, unless it's the
+% first plot.
+% Using the figure below to describe the code implementation:
+% ____ ____ ____
+%| | | | | |
+%| 1 | | 2 | | 3 |
+%|___| |___| |___|
+% ____ ____ ____
+%| | | | | |
+%| 4 | | 5 | | 6 |
+%|___| |___| |___|
+% ____ ____ ____
+%| | | | | |
+%| 7 | | 8 | | 9 |
+%|___| |___| |___|
+%
+% The plots anchors are as follows:
+% 1: plot is typeset normally
+% 2: the "1" plot anchor "east" is anchored to "west"
+% 3: the "2" plot anchor "east" is anchored to "west"
+% 4: the "1" plot anchor "south" is anchored to "north"
+% 5: the "2" plot anchor "south" is anchored to "north"
+% 6: the "3" plot anchor "south" is anchored to "north"
+% 7: the "4" plot anchor "south" is anchored to "north"
+% 8: the "5" plot anchor "south" is anchored to "north"
+% 9: the "6" plot anchor "south" is anchored to "north"
+%
+\def\pgfplots@group@environment@create#1{%
+ \ifnum1=\pgfplots@group@current@row\relax
+ \ifnum1=\pgfplots@group@current@column\relax
+ \pgfplots@environment@opt[name={\pgfplots@group@name\space c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row},%
+ /pgfplots/group/every plot,%
+ /pgfplots/group/plot c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row,%
+ #1]
+ \else
+ \pgfplotsgroupplotsmath@decrease\pgfplots@group@current@column
+ \xdef\pgfplots@glob@TMPb{\pgfplots@group@name\space c\pgfmathresult r\the\pgfplots@group@current@row}
+ \pgfplots@environment@opt[name={\pgfplots@group@name\space c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row},%
+ /pgfplots/group/every plot,%
+ /pgfplots/group/plot c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row,%
+ at={($(\pgfplots@glob@TMPb.east)+(\pgfkeysvalueof{/pgfplots/group/horizontal sep},0)$)},anchor=west,%
+ #1]
+ \fi
+ \else
+ \pgfplotsgroupplotsmath@decrease\pgfplots@group@current@row
+ \xdef\pgfplots@glob@TMPb{\pgfplots@group@name\space c\the\pgfplots@group@current@column r\pgfmathresult}
+ \pgfplots@environment@opt[name={\pgfplots@group@name\space c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row},%
+ /pgfplots/group/every plot,%
+ /pgfplots/group/plot c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row,%
+ at={($(\pgfplots@glob@TMPb.south)-(0,\pgfkeysvalueof{/pgfplots/group/vertical sep})$)},anchor=north,%
+ #1]%
+ \fi%
+}
+
+%
+% Determine the labels of both x and y.
+%
+\def\pgfplots@group@determine@labels{%
+ \def\pgfplots@loc@TMPa{all}%
+ \def\pgfplots@loc@TMPb{lower}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@group@xlabels%
+ % xlabels at=all
+ % Do nothing as all should have xlabels
+ \fi
+ \gdef\pgfplots@glob@TMPa{}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@group@xlabels%
+ % xlabels at=lower
+ \ifnum1<\pgfplots@group@rows\relax
+ \foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
+ \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
+ \ifnum\pgfplots@row=\pgfplots@group@rows\relax%
+ \else
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/xlabel={},%
+ \ifpgfplots@units@use/pgfplots/x unit={}\fi
+ }%
+ }%
+ \fi
+ }%
+ }%
+ \fi%
+ \else
+ \def\pgfplots@loc@TMPb{top}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@group@xlabels%
+ % xlabels at=top
+ \ifnum1<\pgfplots@group@rows\relax
+ \foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
+ \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
+ \ifnum\pgfplots@row=1 %
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={/pgfplots/xticklabel pos=upper}}%
+ \else
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/xlabel={},%
+ \ifpgfplots@units@use/pgfplots/x unit={}\fi%
+ }%
+ }%
+ \fi
+ }%
+ }%
+ \fi%
+ \fi
+ \fi
+ %
+ % Defining styles for the y's
+ %
+ \ifx\pgfplots@loc@TMPa\pgfplots@group@ylabels%
+ % ylabels at=all
+ % Do nothing as all should have ylabels
+ \else
+ \def\pgfplots@loc@TMPb{left}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@group@ylabels%
+ % ylabels at=left
+ \ifnum1<\pgfplots@group@columns\relax
+ \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
+ \foreach \pgfplots@column in {2,...,\pgfplots@group@columns} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/ylabel={},%
+ \ifpgfplots@units@use/pgfplots/y unit={}\fi%
+ }%
+ }%
+ }%
+ }%
+ \fi%
+ \else
+ \def\pgfplots@loc@TMPb{right}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@group@ylabels%
+ % ylabels at=right
+ \ifnum1<\pgfplots@group@columns\relax
+ \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
+ \foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
+ \ifnum\pgfplots@column=\pgfplots@group@columns\relax
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={/pgfplots/yticklabel pos=upper}}%
+ \else
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/ylabel={},%
+ \ifpgfplots@units@use/pgfplots/y unit={}\fi%
+ }%
+ }%
+ \fi
+ }%
+ }%
+ \fi
+ \fi%
+ \fi
+ \fi
+ \expandafter\pgfkeys\expandafter{\pgfplots@glob@TMPa}%
+}
+
+%
+% Determine the ticklabels of both x and y.
+%
+\def\pgfplots@group@determine@ticklabels{%
+ \def\pgfplots@loc@TMPa{all}%
+ \def\pgfplots@loc@TMPb{top}%
+ \def\pgfplots@loc@TMPc{lower}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@group@xticklabels%
+ % Do nothing as all should have xticklabels
+ \fi
+ \gdef\pgfplots@glob@TMPa{}
+ \ifx\pgfplots@loc@TMPb\pgfplots@group@xticklabels%
+ \foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r1/.append style={%
+ xticklabel pos=upper}}%
+ \ifnum1<\pgfplots@group@rows\relax
+ \foreach \pgfplots@row in {2,...,\pgfplots@group@rows} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/xticklabels={},/pgfplots/xtick scale label code/.code={}}}%
+ }%
+ \fi%
+ }%
+ \fi
+ \ifx\pgfplots@loc@TMPc\pgfplots@group@xticklabels%
+ \foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@group@rows/.append style={%
+ xticklabel pos=lower}}%
+ \ifnum1<\pgfplots@group@rows\relax
+ \pgfplotsgroupplotsmath@decrease\pgfplots@group@rows
+ \foreach \pgfplots@row in {1,...,\pgfmathresult} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/xticklabels={},/pgfplots/xtick scale label code/.code={}}}%
+ }%
+ \fi%
+ }%
+ \fi%
+ %
+ % Defining styles for the ytick's
+ %
+ \def\pgfplots@loc@TMPa{all}%
+ \def\pgfplots@loc@TMPb{left}%
+ \def\pgfplots@loc@TMPc{right}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@group@yticklabels%
+ % Do nothing as all should have yticklabels
+ \fi
+ \ifx\pgfplots@loc@TMPb\pgfplots@group@yticklabels%
+ \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c1r\pgfplots@row/.append style={yticklabel pos=left}}%
+ \ifnum1<\pgfplots@group@columns\relax
+ \foreach \pgfplots@column in {2,...,\pgfplots@group@columns} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/yticklabels={}, /pgfplots/ytick scale label code/.code={}}}%
+ }%
+ \fi%
+ }%
+ \fi
+ \ifx\pgfplots@loc@TMPc\pgfplots@group@yticklabels%
+ \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@group@columns r\pgfplots@row/.append style={%
+ yticklabel pos=right}}%
+ \ifnum1<\pgfplots@group@columns\relax
+ \pgfplotsgroupplotsmath@decrease\pgfplots@group@columns
+ \foreach \pgfplots@column in {1,...,\pgfmathresult} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
+ /pgfplots/yticklabels={}, /pgfplots/ytick scale label code/.code={}}}%
+ }%
+ \fi%
+ }%
+ \fi%
+ \expandafter\pgfkeys\expandafter{\pgfplots@glob@TMPa}%
+}
+
+%
+% The counters which are used to determine the current plot:
+% \pgfplots@group@current@plot
+% \pgfplots@group@current@column
+% \pgfplots@group@current@row
+% gets incremented according to the scheme below:
+% ____ ____ ____
+%| | | | | |
+%| 1 | | 2 | | 3 |
+%|___| |___| |___|
+% ____ ____ ____
+%| | | | | |
+%| 4 | | 5 | | 6 |
+%|___| |___| |___|
+% ____ ____ ____
+%| | | | | |
+%| 7 | | 8 | | 9 |
+%|___| |___| |___|
+% where the number matches the plot number.
+%
+\def\pgfplots@group@increment@numbers{%
+ \advance\pgfplots@group@current@plot by1
+ \ifnum\pgfplots@group@current@column=\pgfplots@group@columns\relax
+ \ifnum1=\pgfplots@group@current@plot\relax
+ \else
+ \advance\pgfplots@group@current@row by1
+ \fi
+ \pgfplots@group@current@column=1
+ \else
+ \advance\pgfplots@group@current@column by1
+ \fi
+}
+
+\def\pgfplots@group@get@plot@name#1,#2\in#3{%
+ \edef#3{c#1r#2}%
+}
+
+
+%
+% Setting up all possible styles in current plot
+% I.e. Setting:
+% /pgfplots/group/plot c1r1/.style=
+% /pgfplots/group/plot c2r1/.style=
+% ...
+% /pgfplots/group/plot c<columns>r<rows>/.style=
+%
+\def\pgfplots@group@individual@setup{%
+ \gdef\pgfplots@glob@TMPa{}
+ \foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
+ \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
+ \expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
+ \pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.style=}%
+ }%
+ }%
+ \expandafter\pgfkeys\expandafter{\pgfplots@glob@TMPa}%
+}
+
+
+
+%
+% Implementation of the environment {groupplots}
+\def\pgfplots@environment@groupplot{%
+ \pgfutil@ifnextchar[{\pgfplots@@environment@groupplot}{\pgfplots@@environment@groupplot[\pgfutil@empty]}%
+}
+
+\def\endpgfplots@environment@groupplot{%
+ \endpgfplots@environment@opt
+ %
+ % transport some items beyond this \endgroup:
+ \pgf@remember@layerlist@globally
+ \aftergroup\pgf@restore@layerlist@from@global
+ \endgroup
+ %
+ % ... and transport them beyond the next \endgroup as well (LaTeX
+ % introduces one for \end{groupplot}):
+ \aftergroup\pgf@restore@layerlist@from@global
+ \aftergroup\pgfplots@cell@picture@remembered
+}
+
+\def\pgfplots@@environment@groupplot[#1]{%
+ \begingroup%
+ % Only find the keys column and row
+ % the following things appear to be complete... ?
+ \pgfkeysinstallkeyfilterhandler{/pgf/key filter handlers/append filtered to}{\pgfplots@group@rmopts}%
+ \let\pgfplots@group@rmopts=\pgfutil@empty
+ \pgfkeysinstallkeyfilter{/pgf/key filters/equals}{/pgfplots/group style}%
+ \pgfkeysinstallkeyfilter{/pgf/key filters/is descendant of}{/pgfplots/group}%
+ \pgfqkeysfiltered{/pgfplots}{#1}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfkeys{/pgfplots/group/.cd,\pgfplots@group@style}%
+ }\pgfplots@loc@TMPa
+ %
+ \let\pgfplots@set@options@sanitizemode@old=\pgfplots@set@options@sanitizemode
+ \let\pgfplots@set@options@sanitize@old=\pgfplots@set@options@sanitize
+ \let\pgfplots@set@options@sanitize=\relax
+ \let\pgfplots@set@options@sanitizemode=\relax
+ \expandafter\pgfplots@set@options\expandafter{\pgfplots@group@rmopts}%
+ \let\pgfplots@set@options@sanitize=\pgfplots@set@options@sanitize@old
+ \let\pgfplots@set@options@sanitizemode=\pgfplots@set@options@sanitizemode@old
+ %
+ \pgfplots@group@individual@setup
+ \pgfplots@group@determine@ticklabels
+ \pgfplots@group@determine@labels
+ \pgfplots@group@current@plot=0 %
+ \pgfplots@group@current@row=1 %
+ \pgfplots@group@current@column=0 %
+ \begingroup
+ \c@pgf@counta=\pgfplots@group@rows\relax
+ \multiply \c@pgf@counta by\pgfplots@group@columns\relax
+ \edef\pgfmathresult{\the\c@pgf@counta}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \edef\pgfplots@group@totalplots{\pgfmathresult}%
+ %DEBUG: \message{TEST: \pgfplots@group@totalplots, rows=\pgfplots@group@rows, columns=\pgfplots@group@columns}%
+}
+
+% Assigns \pgfmathresult as #1-1 (in integer arithmetics)
+%
+% #1 an integer (a register or something which expands to an integer).
+\def\pgfplotsgroupplotsmath@decrease#1{%
+ \begingroup
+ \c@pgf@counta=#1\relax
+ \advance\c@pgf@counta by-1
+ \edef\pgfmathresult{\the\c@pgf@counta}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
+
+\tikzaddtikzonlycommandshortcutlet\groupplot\pgfplots@environment@groupplot
+\tikzaddtikzonlycommandshortcutlet\endgroupplot\endpgfplots@environment@groupplot
+
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.patchplots.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.patchplots.code.tex
new file mode 100644
index 0000000000..fb9283571c
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.patchplots.code.tex
@@ -0,0 +1,2723 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for higher order patch plots.
+% It contains advanced patch plots like quadratic triangles,
+% biquadratic quadrilaterals, coons patches and others.
+% The basic implementation for patches supports already line, triangle
+% and rectangle (=2 triangles) patches.
+%
+% Copyright 2007/2008/2009 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+ % NOTES:
+ % In general, a Bezier spline C:[0,1] -> \R of order n fulfills
+ % C'(0) = n ( P_1 - P_0 ),
+ % C'(1) = n ( P_n - P_{n-1} ).
+ % For n=3 and given P_0 and P_3, I can directly compute P_1 and P_2 once I know
+ % the derivatives at t=0 and t=1.
+ %
+ %
+ %
+%--------------------------------------------------
+% 4-point Lagrange interpolation on {0,1/3,2/3,1}:
+% C(x) =
+% a * (1/3 - x)/(1/3) * (2/3-x)/(2/3) * (1-x) +
+% b * (0 - x)/(0 - 1/3) * (2/3-x)/(2/3-1/3) * (1-x)/(1-1/3) +
+% c * (0 - x)/(0 - 2/3) * (1/3-x)/(1/3-2/3) * (1-x)/(1-2/3) +
+% d * (0 - x)/(0 - 1) * (1/3-x)/(1/3-1) * (2/3-x) /(2/3-1)
+%
+%
+% Derivative:
+%
+% (-9*c + 2*d + 72*c*x - 18*d*x - 81*c*x^2 + 27*d*x^2 +
+% a*(-11 + 36*x - 27*x^2) + 9*b*(2 - 10*x + 9*x^2))/2
+%
+% bezier control points are
+% P1 = (-5*a)/6 + 3*b - (3*c)/2 + d/3
+% = -0.833333 a + 3. b - 1.5 c + 0.333333 d
+%
+% P2 = 0.333333 (0.5 (2. a - 9. b + 18. c - 11. d) + 3. d)
+% = 0.333333 a - 1.5 b + 3. c - 0.833333 d
+%--------------------------------------------------
+
+
+
+% A quadratic spline in the ordering
+%
+% <left> <right> <middle>
+%
+% where <left> is the function value at the left end of the spline
+% segmment, <right> the function value at the right end, and <middle>
+% the function value in the middle of the spline segment.
+\pgfplotsdeclarepatchclass{quadratic spline}{%
+ get dimension=\def\pgfplotsretval{1},
+ supports global path=\def\pgfplotsretval{1},
+ new=\def\pgfplotspatchclass@qspline@no{A},
+ set next vertex={%
+ % EXPECTED ORDERING: first 2 corners, then 1 mid nodes
+ % (interpolatory).
+ % defines \pgfplotspatchclass@qspline@A ... \pgfplotspatchclass@qspline@C (3 points)
+ \expandafter\edef\csname pgfplotspatchclass@qspline@\pgfplotspatchclass@qspline@no\endcsname{#1}%
+ \if C\pgfplotspatchclass@qspline@no
+ \def\pgfplotspatchclass@qspline@no{A}%
+ \pgfplotspatchready
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@qspline@no\csname pgfpptchindexnext@\pgfplotspatchclass@qspline@no\endcsname
+ \fi
+ },
+ if current point can be first last={%
+ \pgfplots@loc@tmptrue
+ \if A\pgfplotspatchclass@qspline@no
+ % Ah - the current point is the 'C' point, i.e. the
+ % control point (we have advanced the '@no' counter)
+ \pgfplots@loc@tmpfalse
+ \fi
+ \ifpgfplots@loc@tmp
+ #1\relax%
+ \else
+ #2\relax
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@C\endvertex #1%
+ },
+ fill path={%
+ \begingroup
+ % Draw the patch boundary using a bezier curves.
+ %
+ % Since I have lagrange points to describe the patch (i.e.
+ % points the patch passes through), I have to convert the
+ % lagrange representation to bezier.
+ %
+ % Furthermore, I convert to *cubic* bezier since pdf only
+ % supports cubic curves.
+ %
+ % See the docs for 'biquadratic::fill path' for more details,
+ % in does the same.
+ \def\pgfplots@edge{%
+ \ifx\pgfplotspatchclass@qspline@A\PA
+ \pgfplotsplothandlermesh@pathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}%
+ \fi
+ \pgfpathcurveto {%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}%
+ }{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ }{%
+ \expandafter\pgfplotspointpatchvertex\PC\endvertex
+ }%
+ }%
+ \let\PA=\pgfplotspatchclass@qspline@A
+ \let\PB=\pgfplotspatchclass@qspline@C
+ \let\PC=\pgfplotspatchclass@qspline@B
+ \pgfplots@edge
+ \pgfplotsplothandlermesh@setlastpoint{\expandafter\pgfplotspointpatchvertex\PC\endvertex}%
+ \endgroup
+ },
+ triangulate class=\def\pgfplotsretval{line},
+ triangulate={%
+ \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass
+ \def\pgfplotsplothandlermesh@patchclass{line}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@B}%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@
+ },%
+ recursive refine@={%
+ \pgfplotspatchclass{\pgfplotspatchclassname}{new}%
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@A\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@B\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@C\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qspline@AC
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@AC}%
+ #1%
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@A\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@B\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@C\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qspline@CB
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@CB}%
+ #1%
+ %
+ },%
+ get pdf shading type=0,
+ get num vertices=\def\pgfplotsretval{3},
+}%
+
+\pgfplotsdeclarepatchclass{cubic spline}{%
+ get dimension=\def\pgfplotsretval{1},
+ supports global path=\def\pgfplotsretval{1},
+ new=\def\pgfplotspatchclass@cspline@no{A},
+ set next vertex={%
+ % EXPECTED ORDERING: first 2 corners, then 1 mid nodes
+ % (interpolatory).
+ % defines \pgfplotspatchclass@cspline@A ... \pgfplotspatchclass@cspline@D (4 points)
+ \expandafter\edef\csname pgfplotspatchclass@cspline@\pgfplotspatchclass@cspline@no\endcsname{#1}%
+ \if D\pgfplotspatchclass@cspline@no
+ \def\pgfplotspatchclass@cspline@no{A}%
+ \pgfplotspatchready
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@cspline@no\csname pgfpptchindexnext@\pgfplotspatchclass@cspline@no\endcsname
+ \fi
+ },
+ if current point can be first last={%
+ \pgfplots@loc@tmpfalse
+ \if B\pgfplotspatchclass@cspline@no
+ % Ah - the current point is the 'A' point (we have
+ % advanced the '@no' counter)
+ \pgfplots@loc@tmptrue
+ \fi
+ \if C\pgfplotspatchclass@cspline@no
+ % Ah - the current point is the 'B' point (we have
+ % advanced the '@no' counter)
+ \pgfplots@loc@tmptrue
+ \fi
+ \ifpgfplots@loc@tmp
+ #1\relax%
+ \else
+ #2\relax
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0.3333333}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0.6666666}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@D\endvertex #1%
+ },
+ fill path={%
+ % Draw the patch boundary using a bezier curve.
+ \pgfplotsplothandlermesh@pathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@cspline@A\endvertex}%
+ \pgfplotspathcubicfrominterpolation
+ {\pgfplotspatchclass@cspline@A}%
+ {\pgfplotspatchclass@cspline@C}%
+ {\pgfplotspatchclass@cspline@D}%
+ {\pgfplotspatchclass@cspline@B}%
+ \pgfplotsplothandlermesh@setlastpoint{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@cspline@B\endvertex}%
+ },
+ triangulate class=\def\pgfplotsretval{line},
+ triangulate={%
+ \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass
+ \def\pgfplotsplothandlermesh@patchclass{line}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@B}%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@
+ },%
+ recursive refine@={%
+ % The 4-point lagrangian interpolation formular is shown on
+ % the top of this page. What I do here is simply to evaluate
+ % C(i*1/9) for i =0,...,9:
+ % 0
+ % 0.493827 A +0.740741 C -0.296296 D +0.0617284 B
+ % 0.17284 A +1.03704 C -0.259259 D +0.0493827 B
+ % 1/3
+ % -0.0617284 A +0.740741 C +0.37037 D -0.0493827 B
+ % -0.0493827 A +0.37037 C +0.740741 D -0.0617284 B
+ % 2/3
+ % 0.0493827 A -0.259259 C +1.03704 D +0.17284 B
+ % 0.0617284 A -0.296296 C +0.740741 D +0.493827 B
+ % 1
+ \pgfplotspatchclass{\pgfplotspatchclassname}{new}%
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.493827}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.0617284}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{0.740741}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{-0.296296}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AA
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.17284}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.0493827}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{1.03704}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{-0.259259}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AB
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AA}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AB}%
+ #1%
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{-0.0617284}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{-0.0493827}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{0.740741}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{0.37037}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AA
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{-0.0493827}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{-0.0617284}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{0.37037}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{0.740741}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AB
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AA}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AB}%
+ #1%
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.0493827}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.17284}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{-0.259259}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{+1.03704}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AA
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.0617284}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.493827}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{-0.296296}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{0.740741}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AB
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AA}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AB}%
+ #1%
+ },
+ get pdf shading type=0,
+ get num vertices=\def\pgfplotsretval{4},
+}%
+
+\def\pgfplotspathcubicfrominterpolation#1#2#3#4{%
+ % switch basis from lagrange to bezier (see formular on top of
+ % this file)
+ \pgfpathcurveto {%
+ \begingroup
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY#1\times{-0.833333}%
+ \expandafter\pgfplotspatchvertexaddXY#2\times{3}%
+ \expandafter\pgfplotspatchvertexaddXY#3\times{-1.5}%
+ \expandafter\pgfplotspatchvertexaddXY#4\times{0.3333333}%
+ \pgfplotspatchvertexfinish\pgfplots@loc@TMPa
+ \expandafter\pgfplotspointpatchvertex\pgfplots@loc@TMPa\endvertex
+ \endgroup
+ }{%
+ \begingroup
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY#1\times{0.333333}%
+ \expandafter\pgfplotspatchvertexaddXY#2\times{-1.5}%
+ \expandafter\pgfplotspatchvertexaddXY#3\times{3}%
+ \expandafter\pgfplotspatchvertexaddXY#4\times{-0.833333}%
+ \pgfplotspatchvertexfinish\pgfplots@loc@TMPa
+ \expandafter\pgfplotspointpatchvertex\pgfplots@loc@TMPa\endvertex
+ \endgroup
+ }{%
+ \expandafter\pgfplotspointpatchvertex#4\endvertex
+ }%
+}%
+
+% make a linearized sequence around the edge of the quad.triangle.
+% note the ordering: first 3 corners, then 3 mid nodes:
+\def\pgfplots@qtri@next@A{D}%
+\def\pgfplots@qtri@next@B{E}%
+\def\pgfplots@qtri@next@C{F}%
+\def\pgfplots@qtri@next@D{B}%
+\def\pgfplots@qtri@next@E{C}%
+\def\pgfplots@qtri@next@F{A}%
+
+\def\pgfplots@qtri@rnext@A{F}%
+\def\pgfplots@qtri@rnext@B{D}%
+\def\pgfplots@qtri@rnext@C{E}%
+\def\pgfplots@qtri@rnext@D{A}%
+\def\pgfplots@qtri@rnext@E{B}%
+\def\pgfplots@qtri@rnext@F{C}%
+
+\def\pgfplotspatchclass@qtri@recursiverefine@newnames{%
+ \let\pgfplotspatchclass@qtri@A@=\pgfplotspatchclass@qtri@A%
+ \let\pgfplotspatchclass@qtri@B@=\pgfplotspatchclass@qtri@B%
+ \let\pgfplotspatchclass@qtri@C@=\pgfplotspatchclass@qtri@C%
+ \let\pgfplotspatchclass@qtri@D@=\pgfplotspatchclass@qtri@D%
+ \let\pgfplotspatchclass@qtri@E@=\pgfplotspatchclass@qtri@E%
+ \let\pgfplotspatchclass@qtri@F@=\pgfplotspatchclass@qtri@F%
+}%
+
+
+% A 3-point interpolatory patch which draws quadratic polynomial
+% splines (functions f(x), x 1d).
+\pgfplotsdeclarepatchclass{triangle quadr}{%
+ uses view depth=\def\pgfplotsretval{1},% used by the shader: we reorder corners.
+ new=\def\pgfplotspatchclass@qtri@no{A}\let\pgfplotspatchclass@qtrie@AB\relax,
+ set next vertex={%
+ % EXPECTED ORDERING: first 3 corners, then 3 mid nodes.
+ % defines \pgfplotspatchclass@qtri@A ... \pgfplotspatchclass@qtri@F (6 points)
+ \expandafter\edef\csname pgfplotspatchclass@qtri@\pgfplotspatchclass@qtri@no\endcsname{#1}%
+ \if F\pgfplotspatchclass@qtri@no
+ \def\pgfplotspatchclass@qtri@no{A}%
+ \pgfplotspatchready
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@qtri@no\csname pgfpptchindexnext@\pgfplotspatchclass@qtri@no\endcsname
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ %
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{0.5}%
+ #1%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0.5}%
+ #1%
+ \pgfplotspatchready
+ %
+ %
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ %
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{0.5}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0.5}%
+ #1%
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@D\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@E\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@F\endvertex #1%
+ },
+ foreach cdata vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@C\endvertex #1%
+ },
+ fill path={%
+ \begingroup
+ % Draw the patch boundary using three bezier curves.
+ %
+ % Since I have lagrange points to describe the patch (i.e.
+ % points the patch passes through), I have to convert the
+ % lagrange representation to bezier.
+ %
+ % Furthermore, I convert to *cubic* bezier since pdf only
+ % supports cubic curves.
+ %
+ % See the docs for 'biquadratic::fill path' for more details,
+ % in does the same.
+ \def\pgfplots@edge{%
+ \ifx\pgfplotspatchclass@qtri@A\PA
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}%
+ \fi
+ \pgfpathcurveto {%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}%
+ }{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ }{%
+ \expandafter\pgfplotspointpatchvertex\PC\endvertex
+ }%
+ }%
+ \let\PA=\pgfplotspatchclass@qtri@A
+ \let\PB=\pgfplotspatchclass@qtri@D
+ \let\PC=\pgfplotspatchclass@qtri@B
+ \pgfplots@edge
+ %
+ \let\PA=\pgfplotspatchclass@qtri@B
+ \let\PB=\pgfplotspatchclass@qtri@E
+ \let\PC=\pgfplotspatchclass@qtri@C
+ \pgfplots@edge
+ %
+ \let\PA=\pgfplotspatchclass@qtri@C
+ \let\PB=\pgfplotspatchclass@qtri@F
+ \let\PC=\pgfplotspatchclass@qtri@A
+ \pgfplots@edge
+ \endgroup
+ \pgfpathclose
+ },
+ %--------------------------------------------------
+ % stroke path={%
+ % \ifx\pgfplotspatchclass@qtrie@AB\relax
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@A\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@B\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@C\endvertex}%
+ % \pgfpathclose
+ % \else
+ % \if1\pgfplotspatchclass@qtrie@AB
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@A\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@B\endvertex}%
+ % \fi
+ % \if1\pgfplotspatchclass@qtrie@BC
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@B\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@C\endvertex}%
+ % \fi
+ % \if1\pgfplotspatchclass@qtrie@CA
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@C\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@A\endvertex}%
+ % \fi
+ % \fi
+ % },
+ %--------------------------------------------------
+ stream to shader={%
+ % create a degenerate coons patch:
+ \begingroup
+%\message{EDGE INIT^^J}%
+ % this defines \Pcur and \Pnextseq :
+ \pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth
+ %
+ \pgfutil@namelet{Pstart}{pgfplotspatchclass@qtri@\Pcur}%
+ %
+ % see the docus for "fill path" about these 1.33333 and -0.33333 factors
+ \def\pgfplots@coonsedge{%
+%\message{EDGE \Pcur^^J}%
+ \expandafter\let\expandafter\PA\csname pgfplotspatchclass@qtri@\Pcur\endcsname
+ \edef\Pcur{\csname pgfplots@qtri@\Pnextseq next@\Pcur\endcsname}%
+%\message{---> \Pcur^^J}%
+ \expandafter\let\expandafter\PB\csname pgfplotspatchclass@qtri@\Pcur\endcsname
+ \edef\Pcur{\csname pgfplots@qtri@\Pnextseq next@\Pcur\endcsname}%
+%\message{---> \Pcur^^J}%
+ \expandafter\let\expandafter\PC\csname pgfplotspatchclass@qtri@\Pcur\endcsname
+ \ifx\PA\Pstart
+ \expandafter\pgfplotspatchvertex\PA\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ % degenerate: the "edge" \PA -- \PA collabses into one
+ % point.
+ % Per construction, the "edge" is the FOREGROUND.
+%\message{STREAMING COLLAPSED EDGE AT START POINT^^J}%
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \fi
+ \pgfplotslibrarysurfstreamcoord{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}%
+ }{}%
+ \pgfplotslibrarysurfstreamcoord{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ }{}%
+ \ifx\PC\Pstart
+ \else
+ \expandafter\pgfplotspatchvertex\PC\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \fi
+ }%
+ \pgfplots@coonsedge
+ %
+ \pgfplots@coonsedge
+ %
+ \pgfplots@coonsedge
+ %
+ %
+ \endgroup
+ },%
+ triangulate={%
+ \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass
+ \def\pgfplotsplothandlermesh@patchclass{triangle}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}11%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20%
+ % Ok. Now create 4 triangles. The ordering is not arbitrary
+ % (unless z buffer=sort is in effect). Let's assume that the
+ % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then
+ % this sequence here should have approximately the same depth
+ % ordering:
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D}%
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}00%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E}%
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}11%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F}%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@
+ },%
+ set edge visible={%
+ \ifcase#1
+ \edef\pgfplotspatchclass@qtrie@AB{#2}%
+ \or
+ \edef\pgfplotspatchclass@qtrie@BC{#2}%
+ \or
+ \edef\pgfplotspatchclass@qtrie@CA{#2}%
+ \fi
+ },
+ serialize except vertices={%
+ \ifx\pgfplotspatchclass@qtrie@AB\relax
+ \let\pgfplotsretval\pgfutil@empty%
+ \else
+ \edef\pgfplotsretval{%
+ \noexpand\def\noexpand\pgfplotspatchclass@qtrie@AB{\pgfplotspatchclass@qtrie@AB}%
+ \noexpand\def\noexpand\pgfplotspatchclass@qtrie@BC{\pgfplotspatchclass@qtrie@BC}%
+ \noexpand\def\noexpand\pgfplotspatchclass@qtrie@CA{\pgfplotspatchclass@qtrie@CA}%
+ }%
+ \fi
+ },%
+ deserialize except vertices=%
+ \let\pgfplotspatchclass@qtrie@AB\relax
+ #1,
+ recursive refine@={%
+ \pgfplotspatchclass@qtri@recursiverefine@newnames
+ %
+ \pgfplotspatchclass{\pgfplotspatchclassname}{new}%
+ %--------------------------------------------------
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01%
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11%
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}20%
+ %--------------------------------------------------
+ % The ordering is not arbitrary
+ % (unless z buffer=sort is in effect). Let's assume that the
+ % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then
+ % this sequence here should have approximately the same depth
+ % ordering:
+ %
+ % I used the reference triangle and shape functions as listed in
+ % http://www.colorado.edu/engineering/CAS/courses.d/IFEM.d/
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@AD
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DF
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@AF
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@A@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@AF}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@AD}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DF}%
+ %
+ #1\pgfplotspatchclass@qtri@recursiverefine@newnames
+ %
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DF
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.25}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DE
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@EF
+ %
+ %
+ %--------------------------------------------------
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}00%
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}10%
+ %--------------------------------------------------
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DF}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DE}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@EF}%
+ % %
+ % %--------------------------------------------------
+ % % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01%
+ % % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11%
+ % %--------------------------------------------------
+ #1\pgfplotspatchclass@qtri@recursiverefine@newnames
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DB
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.25}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DE
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@BE
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@B@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DB}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@BE}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DE}%
+ %
+ #1\pgfplotspatchclass@qtri@recursiverefine@newnames
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@EC
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@EF
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@CF
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@C@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@EC}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@CF}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@EF}%
+ %
+ #1%
+ %
+ },%
+ get pdf shading type=6,
+ get num vertices=\def\pgfplotsretval{6},
+ get num cdata vertices=\def\pgfplotsretval{3},
+}%
+
+
+% see
+% \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth
+% and its documentation.
+%
+% POSTCONDITION:
+% \Pcur and \Pnextseq are defined.
+\def\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth{%
+ \def\Pcur{A}%
+ \def\Pnextseq{}%
+ %
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@A\endvertex
+ \ifx\pgfplotspatchvertexdepth\pgfutil@empty
+ \else
+ % ah. We have view depth. Use it!
+ % The idea here is as follows.
+ % According to pdf standard, the COONS Shading is
+ % generated in the unit cube and then mapped to the
+ % shading. If u,v in [0,1] are the coordinates in the unit
+ % cube, pixel values for v=1 overwrite values for v=0.
+ % If pixel values have the same v, u=1 overwrites u=0.
+ % In other words, the loop is
+ % for v= 0 to Nv
+ % for u = 0 to Nu
+ % shade pixel for (u,v)
+ %
+ % BB-------CC <--v=1
+ % | |
+ % | |
+ % | |
+ % AA-------DD <--v=0
+ % | |
+ % u=0 u=1
+ %
+ %
+ % IDEA: re-order the sequence of vertices such that z
+ % buffering is obtained.
+ %
+ % APPROACH:
+ % the edge BB--CC collapses into just one point, namely
+ % the FOREGROUND point (i.e. it is drawn on top of
+ % everything else).
+ %
+ % The AA point is the second nearest foreground point.
+ % The sequence is chosen such that AA,BB is the first
+ % edge.
+ %
+ % What is to do (besides determining the vertices for AA
+ % and BB)? Well, make sure, that we can arrange them in
+ % the desired order. This involves a periodic "next vertex"
+ % algorithm which might either go forward
+ % or backward.
+ %
+ % sort according to depth.
+ % To do so, prepare macros \PA,\PB,\PC for use in
+ % \pgfplotsutilsortthree. FORMAT:
+ % \PA={<sortkey>pt <originalindex>}
+ \edef\PA{\pgfplotspatchvertexdepth pt A}%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@B\endvertex
+ \edef\PB{\pgfplotspatchvertexdepth pt B}%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@C\endvertex
+ \edef\PC{\pgfplotspatchvertexdepth pt C}%
+ \pgfplotsutilsortthree\PA\PB\PC
+ \def\toCHAR##1pt ##2{##2}% get original index
+ %
+ \edef\Pcur{\expandafter\toCHAR\PB}%%
+ \edef\Pnext{\csname pgfplots@qtri@next@\Pcur\endcsname}%
+ \edef\Pnext{\csname pgfplots@qtri@next@\Pnext\endcsname}%
+ \if\Pnext\PA
+ % ok, next(next(AA)) = BB.
+ % that means we have to advance forward.
+ \def\Pnextseq{}%
+ \else
+ % well, since we have a triangle, there only remains
+ % the backwards direction.
+ \def\Pnextseq{r}%
+ \fi
+%\message{FOREGROUND VERTEX = \PA.^^J}%
+%\message{SECOND NEAREST VERTEX = \PB.^^J}%
+ \fi
+}
+\def\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth@no@op{%
+ \def\Pcur{A}%
+ \def\Pnextseq{}%
+}
+
+% bilinear is the same as 'rectangle', but it uses a different shader.
+\pgfplotsdeclarepatchclass{bilinear}{%
+ allow matrix=\def\pgfplotsretval{1},
+ new=\def\pgfplotspatchclass@rect@no{0},
+ set next vertex={%
+ \ifcase\pgfplotspatchclass@rect@no\relax
+ \edef\pgfplotspatchclass@rect@A{#1}%
+ \def\pgfplotspatchclass@rect@no{1}%
+ \or
+ \edef\pgfplotspatchclass@rect@B{#1}%
+ \def\pgfplotspatchclass@rect@no{2}%
+ \or
+ \edef\pgfplotspatchclass@rect@C{#1}%
+ \def\pgfplotspatchclass@rect@no{3}%
+ \or
+ \edef\pgfplotspatchclass@rect@D{#1}%
+ \def\pgfplotspatchclass@rect@no{0}%
+ \pgfplotspatchready%
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex,
+ first vertex before z buffer=\pgfplotspatchclass@rect@first@before@z@buffer,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex #1%
+ },
+ stream to shader={%
+ % create a coons patch:
+ \begingroup
+ \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth
+ {pgfplotspatchclass@rect@}{\Pcur}{\Pnextseq}%
+ %
+ \pgfutil@namelet{Pstart}{pgfplotspatchclass@rect@\Pcur}%
+ \def\pgfplots@coonsedge{%
+%\message{EDGE \Pcur^^J}%
+ \expandafter\let\expandafter\PA\csname pgfplotspatchclass@rect@\Pcur\endcsname
+ \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}%
+%\message{---> \Pcur^^J}%
+ \expandafter\let\expandafter\PB\csname pgfplotspatchclass@rect@\Pcur\endcsname
+ \ifx\PA\Pstart
+ \expandafter\pgfplotspatchvertex\PA\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \fi
+ %
+ % CONTROL POINT A+1/3(B-A)
+ \pgfplotslibrarysurfstreamcoord{%
+ \pgfpointadd
+ {\pgfqpointscale{0.6666666}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ {\pgfqpointscale{0.3333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ }{}%
+ % CONTROL POINT A+2/3(B-A)
+ \pgfplotslibrarysurfstreamcoord{%
+ \pgfpointadd
+ {\pgfqpointscale{0.3333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ {\pgfqpointscale{0.6666666}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ }{}%
+ \ifx\PB\Pstart
+ \else
+ \expandafter\pgfplotspatchvertex\PB\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \fi
+ }%
+ %
+ \pgfplots@coonsedge
+ %
+ \pgfplots@coonsedge
+ %
+ \pgfplots@coonsedge
+ %
+ \pgfplots@coonsedge
+ %
+ \endgroup
+ },%
+ fill path={%
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@A\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@B\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@C\endvertex}%
+ \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@D\endvertex}%
+ \pgfpathclose
+ },
+ triangulate={%
+ \pgfplotscoordmath{meta}{parsenumber}{0.25}%
+ \let\pgfplots@loc@scale=\pgfmathresult
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\endvertex\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\endvertex\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\endvertex\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\endvertex\times{0.25}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@M
+ %
+ \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass
+ \def\pgfplotsplothandlermesh@patchclass{triangle}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20%
+ % Ok. Now create 4 triangles. The ordering is not arbitrary
+ % (unless z buffer=sort is in effect). Let's assume that the
+ % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then
+ % this sequence here should have approximately the same depth
+ % ordering:
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@
+ },%
+ recursive refine@={%
+ \pgfplotspatchclass@rect@refine@{#1}%
+ },%
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,%
+ deserialize except vertices=,
+ get pdf shading type=6,
+ get num vertices=\def\pgfplotsretval{4},
+}%
+
+\pgfplotsdeclarepatchclass{rectangle}{%
+ recursive refine@={%
+ \pgfplotspatchclass@rect@refine@{#1}%
+ },%
+}
+\def\pgfplotspatchclass@rect@refine@#1{%
+ \pgfplotspatchclass@rect@recursiverefine@newnames
+ %
+ \pgfplotspatchclass{\pgfplotspatchclassname}{new}%
+ %--------------------------------------------------
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01%
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11%
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}20%
+ %--------------------------------------------------
+ % The ordering is not arbitrary
+ % (unless z buffer=sort is in effect). Let's assume that the
+ % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then
+ % this sequence here should have approximately the same depth
+ % ordering:
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.25}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.25}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@M
+ %
+ \expandafter\pgfplotspatchclass@rect@refine@@\expandafter{\pgfplotspatchclass@rect@M}{#1}%
+}
+\def\pgfplotspatchclass@rect@refine@@#1#2{%
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@AB
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@DA
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@AB}%
+ \pgfplotsplothandlermesh@setnextvertex{#1}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@DA}%
+ #2\pgfplotspatchclass@rect@recursiverefine@newnames
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@AB
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@BC
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@AB}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@BC}%
+ \pgfplotsplothandlermesh@setnextvertex{#1}%
+ #2\pgfplotspatchclass@rect@recursiverefine@newnames
+ %
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@CD
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@BC
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@BC}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@CD}%
+ \pgfplotsplothandlermesh@setnextvertex{#1}%
+ #2\pgfplotspatchclass@rect@recursiverefine@newnames
+ %
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@CD
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@DA
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@CD}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@DA}%
+ \pgfplotsplothandlermesh@setnextvertex{#1}%
+ #2\pgfplotspatchclass@rect@recursiverefine@newnames
+ %
+}%
+
+\def\pgfplotspatchclass@rect@recursiverefine@newnames{%
+ \let\pgfplotspatchclass@rect@A@=\pgfplotspatchclass@rect@A%
+ \let\pgfplotspatchclass@rect@B@=\pgfplotspatchclass@rect@B%
+ \let\pgfplotspatchclass@rect@C@=\pgfplotspatchclass@rect@C%
+ \let\pgfplotspatchclass@rect@D@=\pgfplotspatchclass@rect@D%
+}%
+
+
+% An arbitrary poligy specified in the sequence
+% D <-- C
+% | ^
+% v |
+% A --> B
+%
+\pgfkeyssetvalue{/pgfplots/vertex count}{0}%
+\pgfplotsdeclarepatchclass{polygon}{%
+ new=\def\pgfplotspatchclass@poly@no{0},
+ set next vertex={%
+ \pgfplotspatchclass@poly@checkcount
+ \expandafter\edef\csname pgfplotspatchclass@poly@\pgfplotspatchclass@poly@no\endcsname{#1}%
+ \pgfplotsutil@advancestringcounter\pgfplotspatchclass@poly@no
+ \ifnum\pgfplotspatchclass@poly@no=\pgfkeysvalueof{/pgfplots/vertex count} %
+ \def\pgfplotspatchclass@poly@no{0}%
+ \pgfplotspatchready%
+ \fi
+ },
+ first vertex=\expandafter\expandafter\expandafter\pgfplotspatchvertex\csname pgfplotspatchclass@poly@0\endcsname\endvertex,
+ foreach vertex={%
+ \pgfplotspatchclass@poly@foreach@loop{0}{#1}%
+ },
+ init pdf shading={%
+ \pgfplots@error{Sorry, patch type=polygon does not support shadings}%
+ },
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,%
+ deserialize except vertices=,
+ get pdf shading type=4,
+ get num vertices=\def\pgfplotsretval{\pgfkeysvalueof{/pgfplots/vertex count}},
+}%
+\def\pgfplotspatchclass@poly@checkcount{%
+ \ifnum\pgfkeysvalueof{/pgfplots/vertex count}>0
+ \else
+ \pgfplots@error{Sorry, 'patch type=polygon' *requires* that 'vertex count=<num>' is set (note: it is allowed if multiple vertices have the same coordinates).}%
+ \fi
+}%
+\long\def\pgfplotspatchclass@poly@foreach@loop#1#2{%
+ \ifnum#1<\pgfkeysvalueof{/pgfplots/vertex count} %
+ \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname pgfplotspatchclass@poly@#1\endcsname\endvertex #2%
+ \begingroup
+ \c@pgf@counta=#1 %
+ \advance\c@pgf@counta by1 %
+ \t@pgfplots@toka={#2}%
+ \xdef\pgfplots@glob@TMPc{\noexpand\pgfplotspatchclass@poly@foreach@loop{\the\c@pgf@counta}{\the\t@pgfplots@toka}}%
+ \endgroup
+ \else
+ \gdef\pgfplots@glob@TMPc{}%
+ \fi
+ \pgfplots@glob@TMPc
+}%
+
+\def\pgfplots@biquad@next@A{E}
+\def\pgfplots@biquad@next@B{F}
+\def\pgfplots@biquad@next@C{G}
+\def\pgfplots@biquad@next@D{H}
+\def\pgfplots@biquad@next@E{B}
+\def\pgfplots@biquad@next@F{C}
+\def\pgfplots@biquad@next@G{D}
+\def\pgfplots@biquad@next@H{A}
+
+
+\def\pgfplots@biquad@rnext@A{H}
+\def\pgfplots@biquad@rnext@B{E}
+\def\pgfplots@biquad@rnext@C{F}
+\def\pgfplots@biquad@rnext@D{G}
+\def\pgfplots@biquad@rnext@E{A}
+\def\pgfplots@biquad@rnext@F{B}
+\def\pgfplots@biquad@rnext@G{C}
+\def\pgfplots@biquad@rnext@H{D}
+
+\def\pgfplotspatchclass@biquad@recursiverefine@newnames{%
+ \let\pgfplotspatchclass@biquad@A@=\pgfplotspatchclass@biquad@A%
+ \let\pgfplotspatchclass@biquad@B@=\pgfplotspatchclass@biquad@B%
+ \let\pgfplotspatchclass@biquad@C@=\pgfplotspatchclass@biquad@C%
+ \let\pgfplotspatchclass@biquad@D@=\pgfplotspatchclass@biquad@D%
+ \let\pgfplotspatchclass@biquad@E@=\pgfplotspatchclass@biquad@E%
+ \let\pgfplotspatchclass@biquad@F@=\pgfplotspatchclass@biquad@F%
+ \let\pgfplotspatchclass@biquad@G@=\pgfplotspatchclass@biquad@G%
+ \let\pgfplotspatchclass@biquad@H@=\pgfplotspatchclass@biquad@H%
+ \let\pgfplotspatchclass@biquad@I@=\pgfplotspatchclass@biquad@I%
+}%
+
+
+% mathematica shape functions parameterized in
+% (xi,eta) in [-1,1]x[-1,1]:
+%f[xi_, eta_] =
+% a*1/4*(1 - xi) (1 - eta) xi*eta +
+% b 1/4 (-1 - xi) (1 - eta) xi*eta +
+% c* 1/4 (-1 - xi) (-1 - eta) xi*eta +
+% d *1/4 (1 - xi) (-1 - eta) xi*eta +
+% e * 1/2 (xi^2 - 1) (1 - eta) eta +
+% f*1/2 (-1 - xi) (eta^2 - 1) xi +
+% g* -1/2 (1 - xi^2) (-1 - eta) eta +
+% h* -1/2 (1 - xi) (1 - eta^2) xi +
+% i*(1 - xi^2) (1 - eta^2)
+% here, a,b,...,i are the 9 nodes.
+\pgfplotsdeclarepatchclass{biquadratic}{%
+ new=\def\pgfplotspatchclass@biquad@no{A}\let\pgfplotspatchclass@biquade@AB\relax,
+ set next vertex={%
+ % defines \pgfplotspatchclass@biquad@A ... \pgfplotspatchclass@biquad@I (9 points)
+ \expandafter\edef\csname pgfplotspatchclass@biquad@\pgfplotspatchclass@biquad@no\endcsname{#1}%
+ \if I\pgfplotspatchclass@biquad@no
+ \def\pgfplotspatchclass@biquad@no{A}%
+ \pgfplotspatchready
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@biquad@no\csname pgfpptchindexnext@\pgfplotspatchclass@biquad@no\endcsname
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0.5}%
+ #1%
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0.5}%
+ #1%
+ \def\pgfplotspatchclassx{0.5}%
+ \def\pgfplotspatchclassy{0.5}%
+ #1%
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@D\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@E\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@F\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@G\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@H\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@I\endvertex #1%
+ },
+ foreach cdata vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@D\endvertex #1%
+ },
+ fill path={%
+ \begingroup
+ % Visualize the patch boundary using four bezier curves.
+ %
+ % This involves a change from Lagrange to bezier
+ % representation of the boundary curves.
+ %
+ % Furthermore, pdf supports only **cubic** bezier curves. What
+ % I am doing here is
+ % a) change of basis from 3-point lagrange ---> 3 point quadratic bezier
+ % b) expression 3 point quadratic bezier ----> 4 point cubic bezier
+ %
+ % INPUT:
+ % 3 langrange points (i.e. the patch passes through them)
+ % \PA,\PB,\PC (start,middle,end)
+ %
+ % OUTPUT:
+ % \PA,bezier control 1, bezier control 2, \PC.
+ %
+ \def\pgfplots@edge{%
+ \ifx\pgfplotspatchclass@biquad@A\PA
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}%
+ \fi
+ \pgfpathcurveto {%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}%
+ }{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ }{%
+ \expandafter\pgfplotspointpatchvertex\PC\endvertex
+ }%
+ }%
+ \let\PA=\pgfplotspatchclass@biquad@A
+ \let\PB=\pgfplotspatchclass@biquad@E
+ \let\PC=\pgfplotspatchclass@biquad@B
+ \pgfplots@edge
+ %
+ \let\PA=\pgfplotspatchclass@biquad@B
+ \let\PB=\pgfplotspatchclass@biquad@F
+ \let\PC=\pgfplotspatchclass@biquad@C
+ \pgfplots@edge
+ %
+ \let\PA=\pgfplotspatchclass@biquad@C
+ \let\PB=\pgfplotspatchclass@biquad@G
+ \let\PC=\pgfplotspatchclass@biquad@D
+ \pgfplots@edge
+ %
+ \let\PA=\pgfplotspatchclass@biquad@D
+ \let\PB=\pgfplotspatchclass@biquad@H
+ \let\PC=\pgfplotspatchclass@biquad@A
+ \pgfplots@edge
+ \endgroup
+ \pgfpathclose
+ },
+ %--------------------------------------------------
+ % stroke path={%
+ % \ifx\pgfplotspatchclass@biquade@AB\relax
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@A\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@B\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@C\endvertex}%
+ % \pgfpathclose
+ % \else
+ % \if1\pgfplotspatchclass@biquade@AB
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@A\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@B\endvertex}%
+ % \fi
+ % \if1\pgfplotspatchclass@biquade@BC
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@B\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@C\endvertex}%
+ % \fi
+ % \if1\pgfplotspatchclass@biquade@CA
+ % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@C\endvertex}%
+ % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@A\endvertex}%
+ % \fi
+ % \fi
+ % },
+ %--------------------------------------------------
+ stream to shader={%
+ \begingroup
+ %
+ % An early version of this shader used Coons patch shadings
+ % (which provides coordinates only for the 9 boundary
+ % vertices, not for the inner vertices). That is a little bit
+ % simpler than what you see in the following lines of code: a
+ % transformation to a tensor bezier shading.
+ %
+ % What we need is to map the 3x3 data from lagrangrian
+ % (interpolation) representation to 4x4 cubic bezier - and
+ % handle the four INNER nodes correctly.
+ %
+ % The algorithm to convert from 1d curves with 3 point langrange to 4 point
+ % bezier is well-known and relatively simple. Fortunately, the
+ % extension to 3x3 -> 4x4 can be boiled down to a successive
+ % application of the 1d algorithm - applied to horizontal and
+ % vertical lines in the data matrizes.
+ %
+ % NOTE: the algorithm in the following lines results in
+ % EXACTLY THE SAME four cubic boundary curves as the approach
+ % in 'fill path'. The only difference is that it also does the
+ % right thing for the inner node.
+ %
+ % STEP 1: ensure that the patch's coordinates are streamed in
+ % a sequence which is compatible with the DEPTH of the
+ % corners.
+ %
+ % we use
+ % \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth
+ % which works for bilinear, biquadratic, and bicubic
+ \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth
+ {pgfplotspatchclass@biquad@}{\Pcur}{\Pnextseq}%
+ %
+ % STEP 2:
+ % now, translate the result into our matrix form.
+ % This means to (a) identify the FIRST point which needs to be
+ % streamed (it is stored in \Pcur as 'A', 'B', 'C', or 'D')
+ % and (b) keep in mind that we have to take care of the
+ % sequence in which points are streamed ("forward" means to
+ % rotate the matrix elements and "backward" means to transpose
+ % the "forward" result).
+ %
+ % This can be seen as conversion from the "linearized"
+ % numbering to matrix indexing - while respecting the "start
+ % point".
+ %
+ % INPUT:
+ %
+ % D G C
+ % H I F
+ % A E B
+ %
+ \if A\Pcur
+ % Ah - the point "A" needs to be streamed as first.
+ %
+ % Well, this is simple: take the matrix as-is!
+ % simply copy 1:1
+ %
+ % i.e. convert
+ % D G C
+ % H I F
+ % A E B
+ %
+ % to
+ %
+ % AC BC CC
+ % AB BB CB
+ % AA BA CA
+ \let\P@AA=\pgfplotspatchclass@biquad@A
+ \let\P@BA=\pgfplotspatchclass@biquad@E
+ \let\P@CA=\pgfplotspatchclass@biquad@B
+ \let\P@AB=\pgfplotspatchclass@biquad@H
+ \let\P@BB=\pgfplotspatchclass@biquad@I
+ \let\P@CB=\pgfplotspatchclass@biquad@F
+ \let\P@AC=\pgfplotspatchclass@biquad@D
+ \let\P@BC=\pgfplotspatchclass@biquad@G
+ \let\P@CC=\pgfplotspatchclass@biquad@C
+ \fi
+ \if B\Pcur
+ % the "B" point needs to be streamed as first.
+ %
+ % i.e. reorder
+ % D G C
+ % H I F
+ % A E B
+ %
+ % to
+ % A H D AC BC CC
+ % E I G =: AB BB CB
+ % B F C AA BA CA
+ %
+ \let\P@AA=\pgfplotspatchclass@biquad@B
+ \let\P@BA=\pgfplotspatchclass@biquad@F
+ \let\P@CA=\pgfplotspatchclass@biquad@C
+ \let\P@AB=\pgfplotspatchclass@biquad@E
+ \let\P@BB=\pgfplotspatchclass@biquad@I
+ \let\P@CB=\pgfplotspatchclass@biquad@G
+ \let\P@AC=\pgfplotspatchclass@biquad@A
+ \let\P@BC=\pgfplotspatchclass@biquad@H
+ \let\P@CC=\pgfplotspatchclass@biquad@D
+ \fi
+ \if C\Pcur
+ % the "C" point needs to be streamed as first.
+ %
+ % i.e. reorder
+ % D G C
+ % H I F
+ % A E B
+ %
+ % to
+ % B E A AC BC CC
+ % F I H =: AB BB CB
+ % C G D AA BA CA
+ %
+ \let\P@AA=\pgfplotspatchclass@biquad@C
+ \let\P@BA=\pgfplotspatchclass@biquad@G
+ \let\P@CA=\pgfplotspatchclass@biquad@D
+ \let\P@AB=\pgfplotspatchclass@biquad@F
+ \let\P@BB=\pgfplotspatchclass@biquad@I
+ \let\P@CB=\pgfplotspatchclass@biquad@H
+ \let\P@AC=\pgfplotspatchclass@biquad@B
+ \let\P@BC=\pgfplotspatchclass@biquad@E
+ \let\P@CC=\pgfplotspatchclass@biquad@A
+ \fi
+ \if D\Pcur
+ % the "D" point needs to be streamed as first.
+ %
+ % i.e. reorder
+ % D G C
+ % H I F
+ % A E B
+ %
+ % to
+ % C F B AC BC CC
+ % G I E =: AB BB CB
+ % D H A AA BA CA
+ %
+ \let\P@AA=\pgfplotspatchclass@biquad@D
+ \let\P@BA=\pgfplotspatchclass@biquad@H
+ \let\P@CA=\pgfplotspatchclass@biquad@A
+ \let\P@AB=\pgfplotspatchclass@biquad@G
+ \let\P@BB=\pgfplotspatchclass@biquad@I
+ \let\P@CB=\pgfplotspatchclass@biquad@E
+ \let\P@AC=\pgfplotspatchclass@biquad@C
+ \let\P@BC=\pgfplotspatchclass@biquad@F
+ \let\P@CC=\pgfplotspatchclass@biquad@B
+ \fi
+ \ifx\Pnextseq\pgfutil@empty
+ \else
+ % reverse the ordering. This means to transpose the
+ % matrix:
+ \pgfplotspatchclass@biquad@transpose
+ \fi
+ %
+ %
+ % Step: convert to tensor bezier representation.
+ %
+ % Converting a 2d tensor product lagrangian interpoland to a
+ % 2d tensor product bezier interpoland can be achieved by
+ % means of 1d algorithms along LINES in the matrix.
+ %
+ % The underlying proof for this is related to the tensor
+ % product form: the U and V coordinates are orthogonal to each
+ % other, so we can redistribute all intermediate results. (I
+ % do not have the real proof, so this hand-waving argument has
+ % to be enough). I verified its results experimentally.
+ %
+ % Note that the underlying 1d operation is the same as for
+ % 'patch type=quadratic spline' . We only need to apply it to all
+ % lines in U direction and afterwards to all lines in V
+ % direction.
+ %
+ \def\pgfplotspatchvertexaddXY@expanded##1\times{%
+ \edef\pgfplots@loc@TMPa{##1}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplots@loc@TMPa\times
+ }%
+ %
+ % this macro operates on \pgfplots@line{[ABC]} and defines
+ % \pgfplots@line{[ABCD]} (i.e. one dimension more!)
+ \def\pgfplots@apply@to@line{%
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{B}\times{1.333333}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{C}\times{-0.333333}%
+ \pgfplotspatchvertexfinish\pgfplots@controlpoint@A
+ %
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{A}\times{-0.333333}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{B}\times{1.333333}%
+ \pgfplotspatchvertexfinish\pgfplots@controlpoint@B
+ %
+ % ... we output 4 points (cubic!).
+ % A= left endpoint (untouched)
+ % B= first control
+ % C= second control
+ % D= right endpoint (untouched, is formerly called 'C')
+ \edef\pgfplots@loc@TMPa{\pgfplots@line{C}}%
+ \expandafter\expandafter\expandafter\let\pgfplots@line{B}=\pgfplots@controlpoint@A
+ \expandafter\expandafter\expandafter\let\pgfplots@line{C}=\pgfplots@controlpoint@B
+ \expandafter\expandafter\expandafter\let\pgfplots@line{D}=\pgfplots@loc@TMPa
+ }%
+ %
+ \def\pgfplots@line##1{\csname P@##1A\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@##1B\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@##1C\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ % Now, we have a 3x4 matrix.
+ %
+ %
+ \def\pgfplots@line##1{\csname P@A##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@B##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@C##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@D##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ % OK. The tensor product representation is READY.
+ %
+ % in particular, we have a 4x4 matrix right now:
+ %
+ \pgfplotsplothandlermesh@shade@cubic@tensor
+ \endgroup
+ },%
+ triangulate={%
+ \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass
+ \def\pgfplotsplothandlermesh@patchclass{triangle}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20%
+ % Ok. Now create 4 triangles. The ordering is not arbitrary
+ % (unless z buffer=sort is in effect). Let's assume that the
+ % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then
+ % this sequence here should have approximately the same depth
+ % ordering:
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@A}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@B}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@D}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@C}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@
+ },%
+ %--------------------------------------------------
+ % set edge visible={%
+ % \ifcase#1
+ % \edef\pgfplotspatchclass@biquade@AB{#2}%
+ % \or
+ % \edef\pgfplotspatchclass@biquade@BC{#2}%
+ % \or
+ % \edef\pgfplotspatchclass@biquade@CA{#2}%
+ % \fi
+ % },
+ %--------------------------------------------------
+ serialize except vertices={%
+ \ifx\pgfplotspatchclass@biquade@AB\relax
+ \let\pgfplotsretval\pgfutil@empty%
+ \else
+ \edef\pgfplotsretval{%
+ \noexpand\def\noexpand\pgfplotspatchclass@biquade@AB{\pgfplotspatchclass@biquade@AB}%
+ \noexpand\def\noexpand\pgfplotspatchclass@biquade@BC{\pgfplotspatchclass@biquade@BC}%
+ \noexpand\def\noexpand\pgfplotspatchclass@biquade@CA{\pgfplotspatchclass@biquade@CA}%
+ }%
+ \fi
+ },%
+ deserialize except vertices=%
+ \let\pgfplotspatchclass@biquade@AB\relax
+ #1,
+ recursive refine@={%
+ \pgfplotspatchclass@biquad@recursiverefine@newnames
+ %
+ \pgfplotspatchclass{\pgfplotspatchclassname}{new}%
+ %--------------------------------------------------
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01%
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11%
+ % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}20%
+ %--------------------------------------------------
+ % The ordering is not arbitrary
+ % (unless z buffer=sort is in effect). Let's assume that the
+ % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then
+ % this sequence here should have approximately the same depth
+ % ordering:
+ %
+ % I used the reference triangle and shape functions as listed in
+ % http://www.colorado.edu/engineering/CAS/courses.d/IFEM.d/,
+ % see above for the definition of f[xi,eta]
+ %
+ % N[{f[-1/2, -1], f[0, -1/2], f[-1/2, 0], f[-1, -1/2], f[-1/2, -1/2]}]
+ % {0.375` a - 0.125` b + 0.75` e,
+ % 0.375` e - 0.125` g + 0.75` i,
+ % -0.125` f + 0.375` h + 0.75` i,
+ % 0.375` a - 0.125` d + 0.75` h,
+ % 0.140625` a - 0.046875` b + 0.015625` c - 0.046875` d +
+ % 0.28125` e - 0.09375` f - 0.09375` g + 0.28125` h +
+ % 0.5625` i}
+ %--------------------------------------------------
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@AE
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@HI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@AH
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.140625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.015625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@AEIH
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@A@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@AE}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@HI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@AH}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@AEIH}%
+ %
+ #1\pgfplotspatchclass@biquad@recursiverefine@newnames
+ %
+ % N[{f[1/2, -1], f[1, -1/2], f[1/2, 0], f[1/2, -1/2]}]
+ % {-0.125` a + 0.375` b + 0.75` e,
+ % 0.375` b - 0.125` c + 0.75` f,
+ % 0.375` f - 0.125` h + 0.75` i,
+ % -0.046875 a + 0.140625 b - 0.046875 c + 0.015625 d + 0.28125 e + 0.28125 f - 0.09375 g - 0.09375 h + 0.5625 i}
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EB
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@BF
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@FI
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.140625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.015625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EBFI
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@B@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EB}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@BF}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@FI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EBFI}%
+ %
+ #1\pgfplotspatchclass@biquad@recursiverefine@newnames
+ %
+ %
+ % N[ {f[1, 1/2], f[1/2, 1], f[0, 1/2], f[1/2, 1/2]}]
+ % {-0.125` b + 0.375` c + 0.75` f,
+ % 0.375` c - 0.125` d + 0.75` g,
+ % -0.125` e + 0.375` g + 0.75` i,
+ % 0.015625` a - 0.046875` b + 0.140625` c - 0.046875` d - 0.09375` e + 0.28125` f + 0.28125` g - 0.09375` h + 0.5625` i}
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@FC
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@CG
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@GI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@FI
+ %
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.015625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.140625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@IFCG
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@C@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@FI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@FC}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@CG}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@GI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@IFCG}%
+ %
+ #1\pgfplotspatchclass@biquad@recursiverefine@newnames
+ %
+ %
+ % N[{f[-1/2, 1], f[-1, 1/2], f[-1/2, 1/2]}]
+ % {-0.125 c + 0.375 d + 0.75 g,
+ % -0.125 a + 0.375 d + 0.75 h,
+ % -0.046875 a + 0.015625 b - 0.046875 c + 0.140625 d - 0.09375 e - 0.09375 f + 0.28125 g + 0.28125 h + 0.5625 i}
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@GD
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@DH
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@GI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@HI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.015625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.046875}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.140625}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.09375}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.28125}%
+ \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}%
+ \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@HIGD
+ %
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@D@}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@HI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@GI}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@GD}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@DH}%
+ \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@HIGD}%
+ %
+ #1%
+ %
+ },%
+ get pdf shading type*={%
+ \if1\b@pgfplotsplothandlermesh@enable@fixed@biquadratic
+ \def\pgfplotsretval{7}%
+ \else
+ \def\pgfplotsretval{6}%
+ \fi
+ },%
+ get num vertices=\def\pgfplotsretval{9},
+ get num cdata vertices=\def\pgfplotsretval{4},
+}%
+
+% set this to 0 to revert to an older implementation (which was buggy,
+% though)
+\def\b@pgfplotsplothandlermesh@enable@fixed@biquadratic{1}%
+
+
+% see docs in 'biquadratic::stream to shader' for details.
+% PRECONDITION: to be used inside of 'stream to shader'.
+\def\pgfplotspatchclass@biquad@coonsedge{%
+%\message{EDGE \Pcur^^J}%
+ \expandafter\let\expandafter\PA\csname pgfplotspatchclass@biquad@\Pcur\endcsname
+ \edef\Pcur{\csname pgfplots@biquad@\Pnextseq next@\Pcur\endcsname}%
+ \expandafter\let\expandafter\PB\csname pgfplotspatchclass@biquad@\Pcur\endcsname
+%\message{---> \Pcur^^J}%
+ \edef\Pcur{\csname pgfplots@biquad@\Pnextseq next@\Pcur\endcsname}%
+ \expandafter\let\expandafter\PC\csname pgfplotspatchclass@biquad@\Pcur\endcsname
+%\message{---> \Pcur^^J}%
+ \ifx\PA\Pstart
+ \expandafter\pgfplotspatchvertex\PA\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \fi
+ \pgfplotslibrarysurfstreamcoord{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}%
+ }{}%
+ \pgfplotslibrarysurfstreamcoord{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ }{}%
+ \ifx\PC\Pstart
+ \else
+ \expandafter\pgfplotspatchvertex\PC\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \fi
+}%
+\def\pgfplotspatchclass@biquad@innercontrolpoints{%
+ \begingroup
+ %
+ % This here computes the FOUR INNER CONTROL POINTS of a tensor
+ % cubic bezier patch (Shading Type 7).
+ %
+ %
+ % the following point coordinates have been acquired from
+ % biquadratic::recursive refine. See above for documentation.
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@A\times{0.375}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@B\times{-0.125}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@E\times{0.75}%
+ \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@AE
+ %
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@F\times{-0.125}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@H\times{0.375}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@HI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@A\times{-0.125}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@B\times{0.375}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@E\times{0.75}%
+ \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@EB
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@F\times{0.375}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@H\times{-0.125}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@I\times{0.75}%
+ \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@FI
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@C\times{0.375}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@D\times{-0.125}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@G\times{0.75}%
+ \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@CG
+ %
+ \pgfplotspatchvertexaccumstart
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@C\times{-0.125}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@D\times{0.375}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@G\times{0.75}%
+ \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@GD
+ %
+ %
+ \let\PA=\pgfplotspatchclass@biquad@AE
+ \let\PB=\pgfplotspatchclass@biquad@HI
+ \let\PC=\pgfplotspatchclass@biquad@GD
+ \pgfplotspatchclass@biquad@innercontrolpoints@PREPARE\pgfplotspatchclass@biquad@@A\pgfplotspatchclass@biquad@@D
+ %
+ \let\PA=\pgfplotspatchclass@biquad@EB
+ \let\PB=\pgfplotspatchclass@biquad@FI
+ \let\PC=\pgfplotspatchclass@biquad@CG
+ \pgfplotspatchclass@biquad@innercontrolpoints@PREPARE\pgfplotspatchclass@biquad@@B\pgfplotspatchclass@biquad@@C
+ %
+ %
+ \let\Pcur=\Pstartidx
+ \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}%
+ %
+ \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}%
+ \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}%
+ %
+ \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}%
+ \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}%
+ %
+ \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}%
+ \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}%
+ \endgroup
+}%
+\def\pgfplotspatchclass@biquad@innercontrolpoints@PREPARE#1#2{%
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}%
+ \edef#1{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ %
+ \pgfpointadd
+ {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}%
+ {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}%
+ \edef#2{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}%
+ %
+\pgfpathcircle{\expandafter\pgfplotspointpatchvertex\PA\endvertex}{1pt}\pgfusepath{fill}%
+\pgfpathcircle{\expandafter\pgfplotspointpatchvertex\PB\endvertex}{1pt}\pgfusepath{fill}%
+\pgfpathcircle{\expandafter\pgfplotspointpatchvertex\PC\endvertex}{1pt}\pgfusepath{fill}%
+\pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}%
+\pgfpathcurveto{#1}{#2}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}%
+\pgfusepath{stroke}%
+}
+
+% Direct interface to coons patches (pdf shading type 6).
+% See manual and/or pdf reference
+\pgfplotsdeclarepatchclass{coons}{%
+ new=\def\pgfplotspatchclass@coons@no{A},
+ set next vertex={%
+ % defines \pgfplotspatchclass@coons@A ... \pgfplotspatchclass@coons@L (12 points)
+ \expandafter\edef\csname pgfplotspatchclass@coons@\pgfplotspatchclass@coons@no\endcsname{#1}%
+ \if L\pgfplotspatchclass@coons@no
+ \def\pgfplotspatchclass@coons@no{A}%
+ \pgfplotspatchready
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@coons@no\csname pgfpptchindexnext@\pgfplotspatchclass@coons@no\endcsname
+ \fi
+ },
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@D\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@E\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@F\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@G\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@H\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@I\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@J\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@K\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@L\endvertex #1%
+ },
+ foreach cdata vertex={%
+ % 0, 3, 6, 9
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@D\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@G\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@J\endvertex #1%
+ },
+ fill path={%
+ \pgfpathmoveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@A\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@B\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@C\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@D\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@E\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@F\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@G\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@H\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@I\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@J\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@K\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@L\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@A\endvertex}%
+ \pgfpathclose
+ },
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,%
+ deserialize except vertices=,
+ get pdf shading type=6,
+ get num vertices=\def\pgfplotsretval{12},
+ get num cdata vertices=\def\pgfplotsretval{4},
+}%
+
+% Direct interface to tensor product bezier patches (pdf shading type 7).
+% See manual and/or pdf reference
+\pgfplotsdeclarepatchclass{tensor bezier}{%
+ new=\def\pgfplotspatchclass@tensor@no{A},
+ set next vertex={%
+ % defines \pgfplotspatchclass@tensor@A ... \pgfplotspatchclass@tensor@P (16 points)
+ \expandafter\edef\csname pgfplotspatchclass@tensor@\pgfplotspatchclass@tensor@no\endcsname{#1}%
+ \if P\pgfplotspatchclass@tensor@no
+ \def\pgfplotspatchclass@tensor@no{A}%
+ \pgfplotspatchready
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@tensor@no\csname pgfpptchindexnext@\pgfplotspatchclass@tensor@no\endcsname
+ \fi
+ },
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@A\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@B\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@C\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@D\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@E\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@F\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@G\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@H\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@I\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@J\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@K\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@L\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@M\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@N\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@O\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@P\endvertex #1%
+ },
+ foreach cdata vertex={%
+ % 0, 3, 6, 9
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@A\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@D\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@G\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@J\endvertex #1%
+ },
+ fill path={%
+ \pgfpathmoveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@A\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@B\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@C\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@D\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@E\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@F\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@G\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@H\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@I\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@J\endvertex}%
+ \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@K\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@L\endvertex}%
+ {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@A\endvertex}%
+ \pgfpathclose
+ },
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,%
+ deserialize except vertices=,
+ get pdf shading type=7,
+ get num vertices=\def\pgfplotsretval{16},
+ get num cdata vertices=\def\pgfplotsretval{4},
+}%
+
+% A bicubic patch with 16 points.
+%
+% It expects points in the order (i.e. in matrix ordering, row-wise):
+%
+% AD BD CD DD
+% AC BC CC DC
+% AB BB CB DB
+% AA BA CA DA
+%
+\pgfplotsdeclarepatchclass{bicubic}{%
+ new=\def\pgfplotspatchclass@bicubic@row{A}\def\pgfplotspatchclass@bicubic@col{A},
+ set next vertex={%
+ % defines \pgfplotspatchclass@bicubic@AA ... \pgfplotspatchclass@bicubic@DD (16 points)
+ \expandafter\edef\csname pgfplotspatchclass@bicubic@\pgfplotspatchclass@bicubic@row\pgfplotspatchclass@bicubic@col\endcsname{#1}%
+ \if D\pgfplotspatchclass@bicubic@row
+ \def\pgfplotspatchclass@bicubic@row{A}%
+ \if D\pgfplotspatchclass@bicubic@col
+ \def\pgfplotspatchclass@bicubic@col{A}%
+ \pgfplotspatchready
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@bicubic@col\csname pgfpptchindexnext@\pgfplotspatchclass@bicubic@col\endcsname
+ \fi
+ \else
+ \expandafter\let\expandafter\pgfplotspatchclass@bicubic@row\csname pgfpptchindexnext@\pgfplotspatchclass@bicubic@row\endcsname
+ \fi
+ },
+ sample in unit cube={%
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0.333333333}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{0.666666666}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0}%
+ #1%
+ %
+ %
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0.333333333}%
+ #1%
+ \def\pgfplotspatchclassx{0.333333333}%
+ \def\pgfplotspatchclassy{0.333333333}%
+ #1%
+ \def\pgfplotspatchclassx{0.666666666}%
+ \def\pgfplotspatchclassy{0.333333333}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0.333333333}%
+ #1%
+ %
+ %
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{0.666666666}%
+ #1%
+ \def\pgfplotspatchclassx{0.333333333}%
+ \def\pgfplotspatchclassy{0.666666666}%
+ #1%
+ \def\pgfplotspatchclassx{0.666666666}%
+ \def\pgfplotspatchclassy{0.666666666}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{0.666666666}%
+ #1%
+ %
+ %
+ \def\pgfplotspatchclassx{0}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{0.333333333}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{0.666666666}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ \def\pgfplotspatchclassx{1}%
+ \def\pgfplotspatchclassy{1}%
+ #1%
+ %
+ %
+ %
+ \pgfplotspatchready
+ },%
+ first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@AA\endvertex,
+ foreach vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@AA\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@BA\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@CA\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@DA\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@AB\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@BB\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@CB\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@DB\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@AC\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@BC\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@CC\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@DC\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@AD\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@BD\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@CD\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@DD\endvertex #1%
+ },
+ foreach cdata vertex={%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@AA\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@DA\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@DD\endvertex #1%
+ \expandafter\pgfplotspatchvertex\pgfplotspatchclass@bicubic@AD\endvertex #1%
+ },
+ fill path={%
+ % Visualize the patch boundary using four bezier curves.
+ %
+ % This involves a change from Lagrange to bezier
+ % representation of the boundary curves.
+ %
+ \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@bicubic@AA\endvertex}%
+ \pgfplotspathcubicfrominterpolation
+ {\pgfplotspatchclass@bicubic@AA}
+ {\pgfplotspatchclass@bicubic@BA}
+ {\pgfplotspatchclass@bicubic@CA}
+ {\pgfplotspatchclass@bicubic@DA}%
+ \pgfplotspathcubicfrominterpolation
+ {\pgfplotspatchclass@bicubic@DA}
+ {\pgfplotspatchclass@bicubic@DB}
+ {\pgfplotspatchclass@bicubic@DC}
+ {\pgfplotspatchclass@bicubic@DD}%
+ \pgfplotspathcubicfrominterpolation
+ {\pgfplotspatchclass@bicubic@DD}
+ {\pgfplotspatchclass@bicubic@CD}
+ {\pgfplotspatchclass@bicubic@BD}
+ {\pgfplotspatchclass@bicubic@AD}%
+ \pgfplotspathcubicfrominterpolation
+ {\pgfplotspatchclass@bicubic@AD}
+ {\pgfplotspatchclass@bicubic@AC}
+ {\pgfplotspatchclass@bicubic@AB}
+ {\pgfplotspatchclass@bicubic@AA}%
+ \pgfpathclose
+ },
+ stream to shader={%
+ \begingroup
+ %
+ % AD BD CD DD
+ % AC BC CC DC
+ % AB BB CB DB
+ % AA BA CA DA
+ %
+ % STEP 1: ensure that the patch's coordinates are streamed in
+ % a sequence which is compatible with the DEPTH of the
+ % corners.
+ %
+ % we use
+ % \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth
+ % which works for bilinear, biquadratic, and bicubic
+ %
+ % define helper macros which are input for
+ % \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth:
+ \let\pgfplotspatchclass@rect@A=\pgfplotspatchclass@bicubic@AA
+ \let\pgfplotspatchclass@rect@B=\pgfplotspatchclass@bicubic@DA
+ \let\pgfplotspatchclass@rect@C=\pgfplotspatchclass@bicubic@DD
+ \let\pgfplotspatchclass@rect@D=\pgfplotspatchclass@bicubic@AD
+ \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth
+ {pgfplotspatchclass@rect@}{\Pcur}{\Pnextseq}%
+ %
+ %\message{using \Pcur\space(set = \Pnextseq)^^J}%
+ % now, translate the result into our matrix form.
+ % This means to (a) identify the FIRST point which needs to be
+ % streamed (it is stored in \Pcur as 'A', 'B', 'C', or 'D')
+ % and (b) keep in mind that we have to take care of the
+ % sequence in which points are streamed ("forward" means to
+ % rotate the matrix elements and "backward" means to transpose
+ % the "forward" result).
+ %
+ \if A\Pcur
+ % Ah - the point "AA" needs to be streamed as first.
+ %
+ % Well, this is simple: take the matrix as-is!
+ % simply copy 1:1
+ \let\P@AA=\pgfplotspatchclass@bicubic@AA
+ \let\P@BA=\pgfplotspatchclass@bicubic@BA
+ \let\P@CA=\pgfplotspatchclass@bicubic@CA
+ \let\P@DA=\pgfplotspatchclass@bicubic@DA
+ \let\P@AB=\pgfplotspatchclass@bicubic@AB
+ \let\P@BB=\pgfplotspatchclass@bicubic@BB
+ \let\P@CB=\pgfplotspatchclass@bicubic@CB
+ \let\P@DB=\pgfplotspatchclass@bicubic@DB
+ \let\P@AC=\pgfplotspatchclass@bicubic@AC
+ \let\P@BC=\pgfplotspatchclass@bicubic@BC
+ \let\P@CC=\pgfplotspatchclass@bicubic@CC
+ \let\P@DC=\pgfplotspatchclass@bicubic@DC
+ \let\P@AD=\pgfplotspatchclass@bicubic@AD
+ \let\P@BD=\pgfplotspatchclass@bicubic@BD
+ \let\P@CD=\pgfplotspatchclass@bicubic@CD
+ \let\P@DD=\pgfplotspatchclass@bicubic@DD
+ \fi
+ \if B\Pcur
+ % the "DA" point needs to be streamed as first.
+ %
+ % Reorder
+ % AD BD CD DD
+ % AC BC CC DC
+ % AB BB CB DB
+ % AA BA CA DA
+ % to
+ % AA AB AC AD
+ % BA BB BC BD
+ % CA CB CC CD
+ % DA DB DC DD
+ %
+ \let\P@AA=\pgfplotspatchclass@bicubic@DA
+ \let\P@BA=\pgfplotspatchclass@bicubic@DB
+ \let\P@CA=\pgfplotspatchclass@bicubic@DC
+ \let\P@DA=\pgfplotspatchclass@bicubic@DD
+ \let\P@AB=\pgfplotspatchclass@bicubic@CA
+ \let\P@BB=\pgfplotspatchclass@bicubic@CB
+ \let\P@CB=\pgfplotspatchclass@bicubic@CC
+ \let\P@DB=\pgfplotspatchclass@bicubic@CD
+ \let\P@AC=\pgfplotspatchclass@bicubic@BA
+ \let\P@BC=\pgfplotspatchclass@bicubic@BB
+ \let\P@CC=\pgfplotspatchclass@bicubic@BC
+ \let\P@DC=\pgfplotspatchclass@bicubic@BD
+ \let\P@AD=\pgfplotspatchclass@bicubic@AA
+ \let\P@BD=\pgfplotspatchclass@bicubic@AB
+ \let\P@CD=\pgfplotspatchclass@bicubic@AC
+ \let\P@DD=\pgfplotspatchclass@bicubic@AD
+ \fi
+ \if C\Pcur
+ % the "DD" point needs to be streamed as first.
+ %
+ % Reorder
+ % AD BD CD DD
+ % AC BC CC DC
+ % AB BB CB DB
+ % AA BA CA DA
+ % to
+ % DA CA BA AA
+ % DB CB BB AB
+ % DC CC BC AC
+ % DD CD BD AD
+ %
+ \let\P@AA=\pgfplotspatchclass@bicubic@DD
+ \let\P@BA=\pgfplotspatchclass@bicubic@CD
+ \let\P@CA=\pgfplotspatchclass@bicubic@BD
+ \let\P@DA=\pgfplotspatchclass@bicubic@AD
+ \let\P@AB=\pgfplotspatchclass@bicubic@DC
+ \let\P@BB=\pgfplotspatchclass@bicubic@CC
+ \let\P@CB=\pgfplotspatchclass@bicubic@BC
+ \let\P@DB=\pgfplotspatchclass@bicubic@AC
+ \let\P@AC=\pgfplotspatchclass@bicubic@DB
+ \let\P@BC=\pgfplotspatchclass@bicubic@CB
+ \let\P@CC=\pgfplotspatchclass@bicubic@BB
+ \let\P@DC=\pgfplotspatchclass@bicubic@AB
+ \let\P@AD=\pgfplotspatchclass@bicubic@DA
+ \let\P@BD=\pgfplotspatchclass@bicubic@CA
+ \let\P@CD=\pgfplotspatchclass@bicubic@BA
+ \let\P@DD=\pgfplotspatchclass@bicubic@AA
+ \fi
+ \if D\Pcur
+ % the "AD" point needs to be streamed as first.
+ %
+ % Reorder
+ % AD BD CD DD
+ % AC BC CC DC
+ % AB BB CB DB
+ % AA BA CA DA
+ % to
+ % DD DC DB DA
+ % CD CC CB CA
+ % BD BC BB BA
+ % AD AC AB AA
+ %
+ \let\P@AA=\pgfplotspatchclass@bicubic@AD
+ \let\P@BA=\pgfplotspatchclass@bicubic@AC
+ \let\P@CA=\pgfplotspatchclass@bicubic@AB
+ \let\P@DA=\pgfplotspatchclass@bicubic@AA
+ \let\P@AB=\pgfplotspatchclass@bicubic@BD
+ \let\P@BB=\pgfplotspatchclass@bicubic@BC
+ \let\P@CB=\pgfplotspatchclass@bicubic@BB
+ \let\P@DB=\pgfplotspatchclass@bicubic@BA
+ \let\P@AC=\pgfplotspatchclass@bicubic@CD
+ \let\P@BC=\pgfplotspatchclass@bicubic@CC
+ \let\P@CC=\pgfplotspatchclass@bicubic@CB
+ \let\P@DC=\pgfplotspatchclass@bicubic@CA
+ \let\P@AD=\pgfplotspatchclass@bicubic@DD
+ \let\P@BD=\pgfplotspatchclass@bicubic@DC
+ \let\P@CD=\pgfplotspatchclass@bicubic@DB
+ \let\P@DD=\pgfplotspatchclass@bicubic@DA
+ \fi
+ \ifx\Pnextseq\pgfutil@empty
+ \else
+ % reverse the ordering. This means to transpose the
+ % matrix:
+ \pgfplotspatchclass@bicubic@transpose
+ \fi
+ %
+ % Step: convert to tensor bezier representation.
+ %
+ % Converting a 2d tensor product lagrangian interpoland to a
+ % 2d tensor product bezier interpoland can be achieved by
+ % means of 1d algorithms along LINES in the matrix.
+ %
+ % The underlying proof for this is related to the tensor
+ % product form: the U and V coordinates are orthogonal to each
+ % other, so we can redistribute all intermediate results. (I
+ % do not have the real proof, so this hand-waving argument has
+ % to be enough). I verified its results experimentally.
+ %
+ % Note that the underlying 1d operation is the same as for
+ % 'patch type=cubic spline' . We only need to apply it to all
+ % lines in U direction and afterwards to all lines in V
+ % direction.
+ %
+ \def\pgfplotspatchvertexaddXY@expanded##1\times{%
+ \edef\pgfplots@loc@TMPa{##1}%
+ \expandafter\pgfplotspatchvertexaddXY\pgfplots@loc@TMPa\times
+ }%
+ %
+ % this macro operates on \pgfplots@line{[ABCD]}, see below:
+ \def\pgfplots@apply@to@line{%
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{A}\times{-0.833333}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{B}\times{3}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{C}\times{-1.5}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{D}\times{0.3333333}%
+ \pgfplotspatchvertexfinish\pgfplots@controlpoint@A
+ %
+ \pgfplotspatchvertexaccumstart
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{A}\times{0.333333}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{B}\times{-1.5}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{C}\times{3}%
+ \pgfplotspatchvertexaddXY@expanded\pgfplots@line{D}\times{-0.833333}%
+ \pgfplotspatchvertexfinish\pgfplots@controlpoint@B
+ %
+ \expandafter\expandafter\expandafter\let\pgfplots@line{B}=\pgfplots@controlpoint@A
+ \expandafter\expandafter\expandafter\let\pgfplots@line{C}=\pgfplots@controlpoint@B
+ }%
+ %
+ \def\pgfplots@line##1{\csname P@##1A\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@##1B\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@##1C\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@##1D\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ %
+ \def\pgfplots@line##1{\csname P@A##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@B##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@C##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ \def\pgfplots@line##1{\csname P@D##1\endcsname}%
+ \pgfplots@apply@to@line
+ %
+ % OK. The tensor product representation is READY.
+ %
+ \pgfplotsplothandlermesh@shade@cubic@tensor
+ \endgroup
+ },
+ triangulate={%
+ \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass
+ \def\pgfplotsplothandlermesh@patchclass{triangle}%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}%
+ % Ok. Now create a lot of triangles.
+ %
+ % FIXME: The ordering is not arbitrary (unless z buffer=sort is in effect).
+ %
+ % ##1: the row index of the cell to be triangulated (either A,B,or C)
+ % ##2: the col index of the cell to be triangulated (either A,B,or C)
+ % ##3: the 1. 'set edge visible' value for the first triangle
+ % ##4: the 2. 'set edge visible' value for the first triangle
+ % ##5: the 3. 'set edge visible' value for the first triangle
+ % ##6: the 1. 'set edge visible' value for the second triangle
+ % ##7: the 2. 'set edge visible' value for the second triangle
+ % ##8: the 3. 'set edge visible' value for the second triangle
+ \def\pgfplots@bicubic@triangulate@cell##1##2##3##4##5##6##7##8{%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}0##3%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}1##4%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}2##5%
+ \pgfplotsplothandlermesh@setnextvertex{\csname pgfplotspatchclass@bicubic@##1##2\endcsname}%
+ \pgfplotsplothandlermesh@setnextvertex{\csname pgfplotspatchclass@bicubic@\csname pgfpptchindexnext@##1\endcsname##2\endcsname}%
+ \pgfplotsplothandlermesh@setnextvertex{\csname pgfplotspatchclass@bicubic@\csname pgfpptchindexnext@##1\endcsname \csname pgfpptchindexnext@##2\endcsname\endcsname}%
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}0##6%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}1##7%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}2##8%
+ \pgfplotsplothandlermesh@setnextvertex{\csname pgfplotspatchclass@bicubic@##1\csname pgfpptchindexnext@##2\endcsname\endcsname}%
+ \pgfplotsplothandlermesh@setnextvertex{\csname pgfplotspatchclass@bicubic@##1##2\endcsname}%
+ \pgfplotsplothandlermesh@setnextvertex{\csname pgfplotspatchclass@bicubic@\csname pgfpptchindexnext@##1\endcsname \csname pgfpptchindexnext@##2\endcsname\endcsname}%
+ %
+ }%
+ %
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10%
+ \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20%
+ \pgfplots@bicubic@triangulate@cell AA100 100%
+ \pgfplots@bicubic@triangulate@cell BA100 000%
+ \pgfplots@bicubic@triangulate@cell CA110 000%
+ %
+ \pgfplots@bicubic@triangulate@cell AB000 100%
+ \pgfplots@bicubic@triangulate@cell BB000 000%
+ \pgfplots@bicubic@triangulate@cell CB010 000%
+ %
+ \pgfplots@bicubic@triangulate@cell AC000 101%
+ \pgfplots@bicubic@triangulate@cell BC000 001%
+ \pgfplots@bicubic@triangulate@cell CC010 001%
+ \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@
+ },%
+ serialize except vertices=\let\pgfplotsretval\pgfutil@empty,%
+ deserialize except vertices=,
+ get pdf shading type=7,
+ get num vertices=\def\pgfplotsretval{16},
+ get num cdata vertices=\def\pgfplotsretval{4},
+}%
+
+% Transpose a bicubic matrix (4x4).
+%
+% Reorder
+% AD BD CD DD
+% AC BC CC DC
+% AB BB CB DB
+% AA BA CA DA
+% to
+% DA DB DC DD
+% CA CB CC CD
+% BA BB BC BD
+% AA AB AC AD
+\def\pgfplotspatchclass@bicubic@transpose{%
+ \pgfplotsutil@swap\P@AB\P@BA
+ \pgfplotsutil@swap\P@CA\P@AC
+ \pgfplotsutil@swap\P@DA\P@AD
+ \pgfplotsutil@swap\P@CB\P@BC
+ \pgfplotsutil@swap\P@BD\P@DB
+ \pgfplotsutil@swap\P@DC\P@CD
+}
+
+% Transpose a bicubic matrix (4x4).
+%
+% Reorder
+% AC BC CC
+% AB BB CB
+% AA BA CA
+% to
+% CA CB CC
+% BA BB BC
+% AA AB AC
+\def\pgfplotspatchclass@biquad@transpose{%
+ \pgfplotsutil@swap\P@AB\P@BA
+ \pgfplotsutil@swap\P@CA\P@AC
+ \pgfplotsutil@swap\P@CB\P@BC
+}
+
+% Expects that a 4x4 matrix in tensor bezier representation where
+% A = left end point
+% B = first control point
+% C = second control point
+% D = right end point
+%
+% and the coordinates are stored in \csname P@[ABCD][ABCD]\endcsname
+%
+% Streaming starts with \P@AA and is applied rowwise.
+\def\pgfplotsplothandlermesh@shade@cubic@tensor{%
+ % Stream it to the shader. Note that the shader has a
+ % DIFFERENT ordering; it expects points in the cyclic ordering
+ %
+ % AA BA CA DA DB DC DD CD BD AD AC AB BB CB CC BC
+ %
+ % note furthermore that only the corners have "point meta" in
+ % this shading :-(
+ %
+ \expandafter\pgfplotspatchvertex\P@AA\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@BA\endvertex}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@CA\endvertex}{\pgfplotspointmetatransformed}%
+ \expandafter\pgfplotspatchvertex\P@DA\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ %
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@DB\endvertex}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@DC\endvertex}{\pgfplotspointmetatransformed}%
+ \expandafter\pgfplotspatchvertex\P@DD\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ %
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@CD\endvertex}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@BD\endvertex}{\pgfplotspointmetatransformed}%
+ \expandafter\pgfplotspatchvertex\P@AD\endvertex
+ \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta
+ \pgfplotsaxisvisphasetransformpointmeta
+ \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}%
+ %
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@AC\endvertex}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@AB\endvertex}{\pgfplotspointmetatransformed}%
+ %
+ %
+ \pgfplotspatchclass{\pgfplotspatchclassname}{get pdf shading type}%
+ \if 7\pgfplotsretval
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@BB\endvertex}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@CB\endvertex}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@CC\endvertex}{\pgfplotspointmetatransformed}%
+ \pgfplotslibrarysurfstreamcoord{\expandafter\pgfplotspointpatchvertex\P@BC\endvertex}{\pgfplotspointmetatransformed}%
+ \else
+ % assume 'get pdf shading type=6' - it does not contain the
+ % inner vertices.
+ \fi
+}
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.polar.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.polar.code.tex
new file mode 100644
index 0000000000..116195a909
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.polar.code.tex
@@ -0,0 +1,799 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for polar coordinates.
+%
+% Copyright 2010 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+% A polar axis lives in (ANGLE,LENGTH).
+% That is
+% x == ANGLE
+% y == LENGTH
+%
+%
+
+\pgfplotsdefineaxistype[polar]{polar}{%
+ \pgfplots@polaraxis@activate
+}%
+
+\newif\ifpgfplots@polaraxis@rellimits
+
+\pgfplotsset{
+ /pgfplots/every polar axis/.style={
+ grid=major,
+ xtick pos=right,
+ ytick pos=right,
+ every axis title shift=1.2\baselineskip,
+ legend style={anchor=center},
+ /pgfplots/polar labels,
+ },
+ /pgfplots/polar labels/.code={
+ % this is equivalent to 'use units=false'. But that key is only available if the units lib is loaded.
+ \pgfplots@units@usefalse
+ \if1\b@pgfplots@polaraxis@fix@positioning
+ \pgfkeysalso{%
+ every axis x label/.style={
+ at={(xticklabel cs:0.125)},
+ sloped={at position=45},
+ anchor=near ticklabel,
+ near ticklabel at=45,
+ },
+ every axis y label/.style={
+ at={(yticklabel cs:0.5)},
+ anchor=near ticklabel,
+ },
+ }%
+ \else
+ \pgfkeysalso{%
+ % is this a good choice? No, it is not.
+ % In fact, I believe that neither xlabel nor ylabel is a good idea for a polar plot.
+ % BUT: if we simply leave the defaults, they will be placed outside of the circle - and
+ % this will confuse the units library which (for some reason) always generates labels.
+ every axis x label/.style={
+ at={(rel axis cs:0,0.5)},
+ anchor=north,
+ },
+ every axis y label/.style={
+ at={(0.2,0.85)},
+ anchor=center,
+ },
+ }%
+ \fi
+ },
+ /pgfplots/polar labels style/.style={%
+ /pgfplots/polar labels/.append style={#1}%
+ },%
+ /pgfplots/xticklabel in circle/.style={
+ xtick align=inside,
+ xticklabel style={
+ rotate=90,
+ sloped like x axis={%
+ execute for upside down={\tikzset{anchor=north east}},
+ %allow upside down,
+ reset nontranslations=false},
+ anchor=south west,
+ %font=\tiny,
+ }
+ },
+}
+
+\def\pgfplots@polaraxis@activate{%
+ % FIXME : activating it results in strange output:
+ \pgfplots@LUA@backend@supportedfalse
+ %
+ \let\pgfplotsqpointxy@cart=\pgfplotsqpointxy
+ \let\pgfplotsqpointxy=\pgfplotsqpointxy@polaraxis
+ \let\pgfplotsqpointxy@orthogonal=\pgfplotsqpointxy
+ \if1\b@pgfplots@polaraxis@fix@positioning
+ % this is needed in order to let
+ % \pgfplotspointonorientedsurfaceab work
+ \def\pgfplotsqpointxyz##1##2##3{%
+ % ignore z here.
+ \pgfplotsqpointxy{##1}{##2}%
+ }%
+ \fi
+ \let\pgfplotspointouternormalvectorofaxis@=\pgfplotspointouternormalvectorofaxis@polaraxis
+ \def\pgfplotspointouternormalvectorofaxis@ifdependson@v##1##2##3{##2}%
+ \def\pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf##1{}%
+ \let\pgfplots@clippath@prepare@for@axistype=\pgfplots@clippath@prepare@for@axistype@polaraxis
+ \let\pgfplots@handle@invalid@range@defaultlimits=\pgfplots@handle@invalid@range@defaultlimits@polar%
+ \let\pgfplots@check@invalid@range=\pgfplots@check@invalid@range@polar
+ \let\pgfplotspointonorientedsurfaceabwithbshift=\pgfplotspointonorientedsurfaceabwithbshift@polaraxis
+ \let\pgfplots@drawgridlines@onorientedsurf@fromto=\pgfplots@drawgridlines@onorientedsurf@fromto@polar
+ \let\pgfplotspoint@initialisation@axes=\pgfplotspoint@initialisation@axes@polar%
+ \let\pgfplotspoint@initialisation@units=\pgfplotspoint@initialisation@units@polar
+ \let\pgfplotsaxisifcontainspoint=\pgfplotsaxisifcontainspoint@polar
+ \let\pgfplots@prepare@axis@API=\pgfplots@prepare@axis@API@polar
+ \def\axisdefaultheight{\axisdefaultwidth}%
+ \let\pgfplots@initsizes=\pgfplots@initsizes@polar
+ \let\pgfplots@BB@for@plotbox@get@unit@scales@for@limits=\pgfplots@BB@for@plotbox@get@unit@scales@for@limits@polar
+ \let\pgfplots@limits@ready=\pgfplots@limits@ready@polar
+ \let\pgfplots@assign@default@tick@foraxis@normalizetickdist=\pgfplots@assign@default@tick@foraxis@normalizetickdist@polar
+ \let\pgfplots@show@ticklabel@=\pgfplots@show@ticklabel@@polar
+ \let\pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf=\pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf@polar
+ \let\pgfplots@enlarge@limit@for=\pgfplots@enlarge@limit@for@polar
+ \let\pgfplotstransformtoaxisdirection@=\pgfplotstransformtoaxisdirection@@polar
+ \def\pgfplots@xtick@disable@last@tick{0}%
+ \let\pgfplots@xtick@check@tickshow=\pgfplots@xtick@check@tickshow@polar%
+ \let\pgfplots@set@options@sanitize=\relax
+ \let\pgfplots@set@options@sanitizemode=\relax
+ \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@polar
+ %
+ % this here is set *before* 'every polar axis' is invoked.
+ \pgfplotsset{
+ enlarge x limits=false,
+ }%
+ \expandafter\def\expandafter\pgfplots@notify@options@are@set\expandafter{%
+ \pgfplots@notify@options@are@set
+ \pgfplotsset{separate axis lines}%
+ }%
+ \def\pgfplots@xticklabel@pos{}%
+ \def\pgfplots@yticklabel@pos{}%
+ \def\pgfplots@zticklabel@pos{}%
+ \def\pgfplots@init@ticklabelaxisspecfor##1##2{}%
+ \def\pgfplots@init@ticklabelaxisspec@twodim@for##1##2{}%
+ \def\pgfplots@xticklabelaxisspec{v10}%
+ \def\pgfplots@yticklabelaxisspec{0v0}%
+ \def\pgfplots@zticklabelaxisspec{00v}%
+ %
+ % cartesian cs
+ \tikzdeclarecoordinatesystem{cartesian}{\edef\pgfplots@loc@TMPa{##1}\expandafter\pgfplotspointcartesian@\pgfplots@loc@TMPa\pgfplots@coord@end}%
+ %
+}%
+
+\let\pgfplots@prepare@axis@API@orig=\pgfplots@prepare@axis@API
+\def\pgfplots@prepare@axis@API@polar{%
+ \pgfplots@prepare@axis@API@orig
+ \let\pgfplotsaxisupdatelimitsforcoordinatetwodim=\pgfplotsaxisupdatelimitsforcoordinatetwodim@polar
+ \let\pgfplotsaxisupdatelimitsforcoordinatethreedim=\pgfplotsaxisupdatelimitsforcoordinatetwodim@polar
+}%
+
+\let\pgfplotstransformtoaxisdirection@@orig=\pgfplotstransformtoaxisdirection@
+\def\pgfplotstransformtoaxisdirection@@polar[#1]#2{%
+ \if#2y%
+ \pgfplotstransformtoaxisdirection@@orig[#1]{#2}%
+ \else
+ % ah, the angle. Treat it with special care.
+ \pgfplots@sloped@allowupsidedownfalse
+ \pgfplots@sloped@resets@nontranslationstrue
+ %
+ \def\pgfplots@loc@TMPa{#1}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfqkeys{/pgfplots/sloped}{#1}%
+ \fi
+ \ifpgfplots@sloped
+ %
+ \ifpgfplots@sloped@resets@nontranslations
+ \pgftransformresetnontranslations
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/sloped/at position}\pgfplots@loc@TMPd
+ \ifx\pgfplots@loc@TMPd\pgfutil@empty
+ \def\pgfplots@loc@TMPd{90}%
+ \else
+ \pgfmathparse{90+\pgfplots@loc@TMPd}%
+ \let\pgfplots@loc@TMPd=\pgfmathresult
+ \fi
+ \pgfpointpolar{\pgfplots@loc@TMPd}{1pt}%
+ %
+ \ifdim\pgf@x<0pt%
+ % oh. upside down.
+ \pgfkeysvalueof{/pgfplots/sloped/execute for upside down}%
+ \ifpgfplots@sloped@allowupsidedown
+ \else
+ % do not allow upside down labels:
+ \global\pgf@x=-\pgf@x%
+ \global\pgf@y=-\pgf@y%
+ \fi
+ \fi%
+ %
+ \pgf@ya=-\pgf@y%
+ % set up rotation matrix
+ % [ cos(alpha) sin(alpha);
+ % -sin(alpha) cos(alpha) ]
+ % where cos(alpha) = n_x and sin(alpha) = n_y:
+ \pgftransformcm%
+ {\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}%
+ {\pgf@sys@tonumber{\pgf@ya}}{\pgf@sys@tonumber{\pgf@x}}{\pgfpointorigin}%
+ \fi
+ \fi
+}
+
+\def\pgfplotsaxisupdatelimitsforcoordinatetwodim@polar#1#2#3{%
+ %
+ %
+ % Update limits:
+ % I do not respect x limits (since they are periodic).
+ % Consequently, I do not respect the clip limits options here (I
+ % suppose it is useless)
+ %
+ % for y (radius) limits, I always use the ABSOLUTE value:
+ \pgfmathfloatabs@{#2}%
+ \let\pgfplots@loc@limit=\pgfmathresult
+ %
+ \ifpgfplots@autocompute@ymax
+ \ifpgfplots@yislinear
+ \pgfplotsmathfloatmax{\pgfplots@ymax}{\pgfplots@loc@limit}%
+ \global\let\pgfplots@ymax=\pgfmathresult
+ \else
+ \pgfplotsmathmax{\pgfplots@ymax}{\pgfplots@loc@limit}%
+ \global\let\pgfplots@ymax=\pgfmathresult
+ \fi
+ \fi
+ %
+ % Compute data range:
+ \pgfplotsmathfloatmin{\pgfplots@data@xmin}{#1}%
+ \global\let\pgfplots@data@xmin=\pgfmathresult
+ \pgfplotsmathfloatmax{\pgfplots@data@xmax}{#1}%
+ \global\let\pgfplots@data@xmax=\pgfmathresult
+ \pgfplotsmathfloatmin{\pgfplots@data@ymin}{#2}%
+ \global\let\pgfplots@data@ymin=\pgfmathresult
+ \pgfplotsmathfloatmax{\pgfplots@data@ymax}{#2}%
+ \global\let\pgfplots@data@ymax=\pgfmathresult
+%\pgfplots@message{Updated limits: (\pgfplots@xmin,\pgfplots@ymin) rectangle (\pgfplots@xmax,\pgfplots@ymax).}%
+%
+%\tracingmacros=0\tracingcommands=0
+}%
+\def\pgfplotsaxisifcontainspoint@polar#1#2{%
+ \begingroup
+ \pgfmath@basic@mod@{\pgfplots@current@point@x}{360}%
+ \pgf@xa=\pgfmathresult pt %
+ %
+ \pgf@ya=\pgfplots@current@point@y pt %
+ \ifdim\pgf@ya<0pt
+ % absolute value:
+ \pgf@ya=-\pgf@ya
+ \fi
+%\message{ifcontainspoint(\the\pgf@xa,\pgfplots@current@point@y) limits = [\pgfplots@xmin@mod:\pgfplots@xmax@mod] x [\the\pgfplots@ymin@reg,\the\pgfplots@ymax@reg]^^J}%
+ %
+ % I assume that \pgfplots@[xyz]min@reg and min@reg are registers
+ % containing the limits.
+ \pgfplots@loop@CONTINUEfalse
+ \ifdim\pgf@ya<\pgfplots@ymin@reg
+ \else
+ \ifdim\pgf@ya>\pgfplots@ymax@reg
+ \else
+ \if1\b@pgfplots@polar@limit@around@zero
+ % check condition
+ % x <= max || x >= min
+ % <=> ! (x > max && x < min)
+ \pgfplots@loop@CONTINUEtrue
+ \ifdim\pgf@xa>\pgfplots@xmax@mod pt %
+ \ifdim\pgf@xa<\pgfplots@xmin@mod pt %
+ \pgfplots@loop@CONTINUEfalse
+ \fi
+ \fi
+ \else
+ \ifdim\pgf@xa<\pgfplots@xmin@mod pt %
+ \else
+ \ifdim\pgf@xa>\pgfplots@xmax@mod pt %
+ \else
+ \pgfplots@loop@CONTINUEtrue
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifpgfplots@loop@CONTINUE
+ \def\pgfplots@loc@TMPa{#1}%
+ \else
+ \def\pgfplots@loc@TMPa{#2}%
+ \fi
+ \expandafter\endgroup\pgfplots@loc@TMPa%
+}
+
+\def\pgfplots@check@invalid@range@polar{%
+ %
+ % A polar axis allows \addplot3, but it ignores the third
+ % coordinate.
+ \pgfplots@threedimfalse
+ %
+ \pgfplots@limits@are@computedtrue
+ \ifx\pgfplots@xmin\pgfplots@invalidrange@xmin
+ \pgfplotscoordmath{x}{zero}%
+ \let\pgfplots@xmin=\pgfmathresult
+ \fi
+ \ifx\pgfplots@xmax\pgfplots@invalidrange@xmax
+ \pgfplotscoordmath{x}{parsenumber}{360}%
+ \let\pgfplots@xmax=\pgfmathresult
+ \fi
+ \ifx\pgfplots@ymin\pgfplots@invalidrange@ymin
+ \pgfplotscoordmath{y}{zero}%
+ \let\pgfplots@ymin=\pgfmathresult
+ \fi
+ \ifx\pgfplots@ymax\pgfplots@invalidrange@ymax
+ \pgfplots@limits@are@computedfalse
+ \fi
+ \ifpgfplots@limits@are@computed
+ \ifx\pgfplots@data@xmin\pgfplots@invalidrange@xmin
+ \global\let\pgfplots@data@xmin=\pgfplots@xmin
+ \fi
+ \ifx\pgfplots@data@xmin\pgfplots@invalidrange@xmax
+ \global\let\pgfplots@data@xmax=\pgfplots@xmax
+ \fi
+ \ifx\pgfplots@data@ymin\pgfplots@invalidrange@ymin
+ \global\let\pgfplots@data@ymin=\pgfplots@ymin
+ \fi
+ \ifx\pgfplots@data@ymin\pgfplots@invalidrange@ymax
+ \global\let\pgfplots@data@ymax=\pgfplots@ymax
+ \fi
+ \ifpgfplots@clip@limits@x
+ \else
+ % there is a rare change that min > max.
+ % Handle that ...
+ \pgfplotscoordmath{x}{min}{\pgfplots@xmin}{\pgfplots@xmax}%
+ \global\let\pgfplots@xmin=\pgfmathresult
+ \pgfplotscoordmath{x}{max}{\pgfplots@xmin}{\pgfplots@xmax}%
+ \global\let\pgfplots@xmax=\pgfmathresult
+ \fi
+ \ifpgfplots@clip@limits@y
+ \else
+ %
+ \pgfplotscoordmath{y}{min}{\pgfplots@ymin}{\pgfplots@ymax}%
+ \global\let\pgfplots@ymin=\pgfmathresult
+ \pgfplotscoordmath{y}{max}{\pgfplots@ymin}{\pgfplots@ymax}%
+ \global\let\pgfplots@ymax=\pgfmathresult
+ %
+ \fi
+ \ifpgfplots@clip@limits@z
+ \else
+ \ifpgfplots@threedim
+ \pgfplotscoordmath{z}{min}{\pgfplots@zmin}{\pgfplots@zmax}%
+ \global\let\pgfplots@zmin=\pgfmathresult
+ \pgfplotscoordmath{z}{max}{\pgfplots@zmin}{\pgfplots@zmax}%
+ \global\let\pgfplots@zmax=\pgfmathresult
+ \fi
+ \fi
+ \else
+ \pgfplots@handle@invalid@range
+ \fi
+}%
+
+\def\pgfplotspointcartesian@#1,#2\pgfplots@coord@end{%
+ \pgfpointxy@orig{#1}{#2}%
+}%
+\def\pgfplotscoordmathnotifydatascalesetfor@polar#1{%
+ \def\pgfplotscoordmathnotifydatascalesetfor##1{}%
+ \edef\pgfplotscoordmathnotifydatascalesetfor@{#1}%
+ \def\pgfplotscoordmathnotifydatascalesetfor@@{x}%
+ \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@
+ \pgfplotscoordmath{#1}{datascaletrafo set params}{0}{0}%
+ \else
+ \def\pgfplotscoordmathnotifydatascalesetfor@@{y}%
+ \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@
+ \pgfplotscoordmath{#1}{datascaletrafo set shift}{0}%
+ \fi
+ \fi
+ \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@polar
+}%
+
+% #1: the "a" value on the oriented surf
+% #2: the "b" value.
+% #3: the shift along the normal.
+%
+\def\pgfplotspointonorientedsurfaceabwithbshift@polaraxis#1#2#3{%
+ % implement the shift in "b" direction explicitly:
+ %
+ \pgfplotspointonorientedsurfaceab{#1}{#2}%
+ \edef\pgfplots@loc@TMPe{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ \pgfpointadd
+ {\pgfplots@loc@TMPe}%
+ {%
+ \begingroup
+ % I need a '-' here because for polaraxis axes, the "b" axis
+ % points to the *outside* instead of the inside.
+ \pgf@xa=-#3\relax
+ \if r\pgfkeysvalueof{/pgfplots/\pgfplotspointonorientedsurfaceB\space dir/value}%
+ % oh. a reversed axis.
+ \pgf@xa=-\pgf@xa
+ \fi
+ \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfqpointscale{\pgfplots@loc@TMPa}{%
+ \if x\pgfplotspointonorientedsurfaceB
+ % the angle.
+ % FIXME : datascaling!
+ % FIXME : aspect ratios!
+ \pgfmath@basic@sin@{#2}%
+ \pgf@x=-\pgfmathresult pt
+ \pgfmath@basic@cos@{#2}%
+ \pgf@y=\pgfmathresult pt
+ \else
+ % the length.
+ % FIXME : datascaling!
+ % FIXME : aspect ratios!
+ % perhaps pgfpointpolarxy?
+ \if y\pgfplotspointonorientedsurfaceB
+ \if r\pgfkeysvalueof{/pgfplots/\pgfplotspointonorientedsurfaceA\space dir/value}%
+ \pgfqpointpolar{-#1}{-1pt}%
+ \else
+ \pgfqpointpolar{#1}{1pt}%
+ \fi
+ \else
+ \pgfpointorigin
+ \fi
+ \fi
+ }%
+ }%
+}
+
+
+\def\pgfplotsqpointxy@polaraxis#1#2{%
+ \pgf@process{%
+ \pgfplotsmathpoltocartbasic{#1}{#2}\x\y
+ \pgfqpointxy@orig\x\y
+%\message{pgfplotsqpointxy{#1}{#2} ---> (\x,\y) ---> (\the\pgf@x,\the\pgf@y)}%
+ }%
+}%
+\def\pgfplots@clippath@prepare@for@axistype@polaraxis{%
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto
+ {\pgfplotsqpointxy\pgfplots@xmin\pgfplots@ymax}%
+ \pgfpatharcaxes{\pgfplots@xmin}{\pgfplots@xmax}
+ {\pgfqpointxy@orig{\pgfplots@ymax}{0}}%
+ {\pgfqpointxy@orig{0}{\pgfplots@ymax}}%
+ \if1\pgfplots@xtick@disable@last@tick
+ % we have min angle = max angle.
+ \ifdim\pgfplots@ymin pt=0pt
+ \else
+ \pgfseteorule
+ \pgfpathmoveto
+ {\pgfplotsqpointxy\pgfplots@xmin\pgfplots@ymin}%
+ \pgfpatharcaxes{\pgfplots@xmin}{\pgfplots@xmax}
+ {\pgfqpointxy@orig{\pgfplots@ymin}{0}}%
+ {\pgfqpointxy@orig{0}{\pgfplots@ymin}}%
+ \fi
+ \else
+ % we have min angle != max angle.
+ \ifdim\pgfplots@ymin pt=0pt
+ % Ok, then pass through origin:
+ \pgfpathlineto\pgfplotspointaxisorigin
+ \else
+ % complicated special case.
+ \pgfpathlineto
+ {\pgfplotsqpointxy\pgfplots@xmax\pgfplots@ymin}%
+ \pgfpatharcaxes{\pgfplots@xmax}{\pgfplots@xmin}
+ {\pgfqpointxy@orig{\pgfplots@ymin}{0}}%
+ {\pgfqpointxy@orig{0}{\pgfplots@ymin}}%
+ \fi
+ \pgfpathclose
+ \fi
+ \pgfplots@clippath@use@{##1}%
+ }%
+}%
+
+\def\pgfplotspointouternormalvectorofaxis@polaraxis#1#2#3\relax{%
+ \if v#1%
+ % ah, we want to find the outer normal for an ANGLE.
+ %
+ % That's tricky because we need the current value! What if we
+ % do not have one?
+ \pgfplotspointouternormalvectorofaxisgetv{#1#2#3}%
+ % in direction of the length.
+ \ifx\pgfplotsretval\pgfutil@empty
+ \pgfplotswarning{missing near ticklabel at}{}\pgfeov%
+ % oh, what a mess. We do not know the angle!
+ % this means the alignment will be wrong (most likely...)
+ \def\pgfplotsretval{0}%
+ \fi
+ % FIXME : datascaling!
+ % FIXME : aspect ratios!
+ % perhaps pgfpointpolarxy?
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}%
+ \pgfqpointpolar{-\pgfplotsretval}{-1pt}%
+ \else
+ \pgfqpointpolar{\pgfplotsretval}{1pt}%
+ \fi
+ \else
+ \if v#2%
+ \if#10%
+ \def\pgfplotsretval{\pgfplots@xmin}%
+ \else
+ \def\pgfplotsretval{\pgfplots@xmax}%
+ \fi
+ % in direction of the angle.
+ % FIXME : datascaling!
+ % FIXME : aspect ratios!
+ \pgfmath@basic@sin@{\pgfplotsretval}%
+ \pgf@x=-\pgfmathresult pt
+ \pgfmath@basic@cos@{\pgfplotsretval}%
+ \pgf@y=\pgfmathresult pt
+ \else
+ \pgfqpoint{0pt}{1pt}%
+ \fi
+ \fi
+ %\pgf@process{\pgfpointnormalised{}}%
+ \pgf@process{}%
+ \endgroup
+}%
+
+\def\pgfplotspoint@initialisation@axes@polar{%
+ %
+ \begingroup
+ \pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}%
+ \xdef\pgfplotspointminminmin{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ %
+ \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}%
+ \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ %
+ % the length of the "angle" axis is 2*pi*r .
+ % The radius, however, is the length of (0,ymax) which is (0pt,\pgf@xx*ymax):
+ \pgfmath@basic@multiply@{\pgf@sys@tonumber\pgf@xx}{\pgfplots@ymax}%
+ \pgfmathmultiply@{\pgfmathresult}{6.28318530717959}% 2*pi * r
+ \if0\pgfplots@xtick@disable@last@tick
+ % oh: minangle != maxangle. We have a partial circle.
+ % compute the arc length (<360 deg)
+ \pgf@xa=\pgfplots@xmax pt
+ \advance\pgf@xa by-\pgfplots@xmin pt
+ \divide\pgf@xa by360
+ \ifdim\pgf@xa<1pt
+ \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\pgf@xa}%
+ \pgfmathmultiply@{\pgfmathresult}{\pgfplots@loc@TMPa}%
+ \fi
+ \fi
+ \xdef\pgfplotspointxaxislength{\pgfmathresult pt}%
+ %
+ \pgfpointdiff
+ {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}%
+ {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}%
+ \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \xdef\pgfplotspointyaxislength{\pgfmathresult pt}%
+ %
+ \global\let\pgfplotspointzaxis=\pgfpointorigin
+ \gdef\pgfplotspointzaxislength{0pt}%
+ \endgroup
+ %
+}
+\let\pgfplotspoint@initialisation@units@orig=\pgfplotspoint@initialisation@units
+\def\pgfplotspoint@initialisation@units@polar{%
+ \def\pgfplotspointunitx{%
+ \pgfplotspointouternormalvectorofaxisgetv{v10}% angle varying, radius at outer pos
+ \ifx\pgfplotsretval\pgfutil@empty
+ \def\pgfplotsretval{0}%
+ \fi
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}%
+ \edef\pgfplotsretval{-\pgfplotsretval}%
+ \fi
+ \pgfmath@basic@sin@{\pgfplotsretval}%
+ \pgf@x=-\pgfmathresult pt
+ \pgfmath@basic@cos@{\pgfplotsretval}%
+ \pgf@y=\pgfmathresult pt
+ }%
+ \def\pgfplotsunitxlength{1}%
+ \def\pgfplotsunitxinvlength{1}%
+ %
+ \def\pgfplotspointunity{%
+ % FIXME : what about 'x dir=reverse' !?
+ \pgfqpointpolar{\pgfplots@xmin}{1pt}%
+ }%
+ \def\pgfplotsunitylength{1}%
+ \def\pgfplotsunityinvlength{1}%
+}%
+
+\def\pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf@polar#1#2{%
+ \if v#1%
+ \let\pgfplots@loc@TMPa=\pgfplotspointonorientedsurfaceA%
+ \if v#2%
+ \pgfplots@error{Exactly one of '#1' or '#2' must be 'v', not both}%
+ \fi
+ \else
+ \if v#2%
+ \let\pgfplots@loc@TMPa=\pgfplotspointonorientedsurfaceB%
+ \else
+ \pgfplots@error{One of '#1' or '#2' must be 'v'}%
+ \fi
+ \fi
+ %
+ \if x\pgfplots@loc@TMPa
+ \else
+ \pgfplots@transformshift@along@outer@normal@on@line@of@oriented@surf@orig{#1}{#2}%
+ \fi
+}%
+\def\pgfplots@drawgridlines@onorientedsurf@fromto@polar#1{%
+ \if x\pgfplotspointonorientedsurfaceA
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}}%
+ \else
+ \if y\pgfplotspointonorientedsurfaceA\relax
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}%
+ \pgf@x=#1\pgf@xx
+ \pgf@y=#1\pgf@yy
+ \edef\pgfplots@loc@TMPa{\the\pgf@x\space and \the\pgf@y}%
+ \def\pgfplots@loc@TMPb{\pgfpatharc{\pgfplots@xmin}{\pgfplots@xmax}}%
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}%
+ \else
+ \fi
+ \fi
+}%
+
+\let\pgfplots@initsizes@original=\pgfplots@initsizes
+
+\def\pgfplots@initsizes@polar{%
+ % I copy-pasted most of this code, up to just one position where
+ % I introduced the modified scaling for polar axes
+ %----------------------------------
+ % INIT.
+ %
+ %
+ \pgfmath@basic@mod@{\pgfplots@xmin}{360}%
+ \let\pgfplots@xmin@mod=\pgfmathresult
+ \pgfmath@basic@mod@{\pgfplots@xmax}{360}%
+ \let\pgfplots@xmax@mod=\pgfmathresult
+ \ifdim\pgfplots@xmax@mod pt>\pgfplots@xmin@mod pt
+ \def\b@pgfplots@polar@limit@around@zero{0}%
+ \else
+ \def\b@pgfplots@polar@limit@around@zero{1}%
+ \fi
+ %
+ \pgfplots@initsizes@original
+}%
+
+\def\pgfplots@BB@for@plotbox@get@unit@scales@for@limits@polar#1#2#3{%
+ % #1 is the angle ... and that does not need to be squeezed into
+ % the box.
+ %
+ % use only y (the radius).
+ \if1\b@pgfplots@plotbox@yisunit
+ % we do not need to compute max-min as for standard axes (because the inner part
+ % characterized by ymin does not enter the scaling).
+ %
+ % However, we have to keep in mind that our range is TWICE as
+ % large because [0,ymax] is just a radius, and we have to
+ % scale for the diameter.
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{2}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ %
+ \let\pgfmathresult=\pgfplots@ymax
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{\pgfmathresult}%
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{op}{multiply}{{\pgfmathresult}{\pgfplots@loc@TMPa}}%
+ \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{tofixed}{\pgfmathresult}%
+ \else
+ \def\pgfmathresult{2}% not 1: the factor 2 is for 2*radius
+ \fi
+ \let#1=\pgfmathresult
+ \let#2=\pgfmathresult
+ \def#3{1}% FIXME : z ?
+}%
+
+\def\pgfplots@handle@invalid@range@defaultlimits@polar{%
+ \def\pgfplots@loc@TMPa{0}%
+ \ifx\pgfplots@xmin\pgfplots@invalidrange@xmin
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ \ifx\pgfplots@xmax\pgfplots@invalidrange@xmax
+ \def\pgfplots@loc@TMPa{1}%
+ \fi
+ \if\pgfplots@loc@TMPa1%
+ \pgfplotscoordmath{x}{parsenumber}{0}%
+ \global\let\pgfplots@xmin=\pgfmathresult
+ \pgfplotscoordmath{x}{parsenumber}{360}%
+ \global\let\pgfplots@xmax=\pgfmathresult
+ \global\let\pgfplots@data@xmin=\pgfplots@xmin
+ \global\let\pgfplots@data@xmax=\pgfplots@xmax
+ \fi
+ %
+ \pgfplotscoordmath{y}{parsenumber}{0}%
+ \global\let\pgfplots@ymin=\pgfmathresult
+ \pgfplotscoordmath{y}{parsenumber}{1}%
+ \global\let\pgfplots@ymax=\pgfmathresult
+ \global\let\pgfplots@data@ymin=\pgfplots@ymin
+ \global\let\pgfplots@data@ymax=\pgfplots@ymax
+}
+
+\let\pgfplots@show@ticklabel@@orig=\pgfplots@show@ticklabel@
+\def\pgfplots@show@ticklabel@@polar#1#2{%
+ \def\pgfmathresult{#2}%
+ \if#1x%
+ \ifdim#2pt>360pt
+ \pgfmath@basic@mod@{#2}{360}%
+ \fi
+ \fi
+ \def\pgfplots@loc@TMPa{\pgfplots@show@ticklabel@@orig{#1}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+}%
+
+\let\pgfplots@xtick@check@tickshow@orig=\pgfplots@xtick@check@tickshow%
+\def\pgfplots@xtick@check@tickshow@polar{%
+ \if1\pgfplots@xtick@disable@last@tick
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfplots@tmpa}{\pgfplots@xmax pt}
+ {\pgfplots@loc@tick@placement@tolerance}
+ {%
+ \pgfplots@tickshowfalse
+ }{%
+ \pgfplots@xtick@check@tickshow@orig
+ }%
+ \else
+ \pgfplots@xtick@check@tickshow@orig
+ \fi
+}
+
+\let\pgfplots@enlarge@limit@for@orig=\pgfplots@enlarge@limit@for
+\def\pgfplots@enlarge@limit@for@polar#1{%
+ \if#1x%
+ % ignore 'enlarge x limits' (degrees).
+ \else
+ % allow 'enlarge y limits', but only for UPPER radius
+ \def\bool@pgfplots@loc@enlargelimits@min{0}%
+ \pgfplots@enlarge@limit@for@orig{#1}%
+ \fi
+}%
+
+\let\pgfplots@assign@default@tick@foraxis@normalizetickdist@orig=\pgfplots@assign@default@tick@foraxis@normalizetickdist
+\def\pgfplots@assign@default@tick@foraxis@normalizetickdist@polar#1#2{%
+ \if#1x%
+ % special handling for the angles:
+ \begingroup
+ \pgfmathfloattofixed{#2}%
+ \let\H=\pgf@xb
+ \H=\pgfmathresult pt
+ % only allow step sizes of
+ % 90, 45, 30, 15, 10, 5.
+ %
+ % Prefer the LARGER step size during the snap-to-nearest.
+ % The following decision boundaries are heuristics and have no
+ % mathematical foundation.
+ \ifdim\H>67pt
+ \H=90pt
+ \else
+ \ifdim\H>30pt
+ \H=45pt
+ \else
+ \ifdim\H>18pt
+ \H=30pt
+ \else
+ \ifdim\H>10pt
+ \H=15pt
+ \else
+ \ifdim\H>6pt
+ \H=10pt
+ \else
+ \H=5pt
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\H}%
+ \pgfmathfloatparsenumber{\pgfplots@loc@TMPa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \else
+ \pgfplots@assign@default@tick@foraxis@normalizetickdist@orig{#1}{#2}%
+ \fi
+}%
+
+\let\pgfplots@limits@ready@orig=\pgfplots@limits@ready
+\def\pgfplots@limits@ready@polar{%
+ \pgfplots@limits@ready@orig
+ %
+ % Avoid tick labels at upper *and* lower angle range if both are the
+ % same:
+ \pgfmath@basic@subtract@{\pgfplots@xmax}{\pgfplots@xmin}%
+ \pgfmath@basic@mod@{\pgfmathresult}{360}%
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfmathresult pt}{0pt}%
+ {0.002pt}
+ {%
+ \def\pgfplots@xtick@disable@last@tick{1}%
+ }{%
+ }%
+ %
+}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.smithchart.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.smithchart.code.tex
new file mode 100644
index 0000000000..611b12bbba
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.smithchart.code.tex
@@ -0,0 +1,1678 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for smith charts.
+%
+% Copyright 2010 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+% A smithchart maps the complex halfplane
+% H subset \C,
+% H := [0,infty] x [-infty,infty]
+% =~ \{ z = a+ j *b | a >=0, b \in \R }
+%
+% to the unit circle.
+%
+% A number z = a+jb is mapped to r(z) = (z-1) / (z+1) which is, per
+% definition, in the 2d unit circle.
+%
+% Grid lines (i.e. a==const or b==const) are mapped on circles.
+%
+% In PGFPlots, the a=Re(z) is the x axis and b = Im(z) is the y axis.
+%
+% - CARTESIAN INPUT
+% - tick/grid coordinates are from
+% - input coordinates can be either from H or (perhaps preferred) from
+% the unit circle.
+% this "preferred" needs to be discussed.
+% - the transformed data range is the unit circle (or a sequeezed variant)
+% - in order to compute limits etc., I should accept data in H. this
+% should simplify the logic to determine ticks etc considerably.
+% problem: this transformation appears to be quite difficult (?)
+% -> r(z) = (z-1)/(z+1)
+% in complex arithmetics (but the G-tutorial.pdf says something
+% about these circle equations!?)
+%
+% www.amanogawa.com/archive/docs/G-tutorial.pdf
+%
+%
+% Idea:
+% - work on H
+% - transform whereever necessary
+% - implement all pgfplots wrinkles in analogy to polar axes
+% - provide support for normalized input coords (combined with
+% untransformed limits or something like that)
+
+\pgfplotsdefineaxistype{smithchart}{%
+ \pgfplots@smithchartaxis@activate
+}%
+
+\newif\ifpgfplotspointisinsmithchartCS
+\newif\ifpgfplots@smithchart@showorigin
+\newif\ifpgfplots@smithchart@mirrored
+
+\pgfplotsset{
+ /pgfplots/xgrid each nth passes y/.initial=,% format: CSV list, each entry of the form '<at> | <at> ':' <eachnth> | <at> 'if <' <xvalue> | <at> ':' <eachnth> 'if <' <xvalue>'
+ /pgfplots/xgrid each nth passes y start/.initial=0,
+ /pgfplots/ygrid each nth passes x/.initial=,
+ /pgfplots/ygrid each nth passes x start/.initial=0,
+ %
+ /pgfplots/xgrid stop at y/.initial=,% individual stop map of the form '<xpos> ':' <stopaty>', separated by white space
+ /pgfplots/ygrid stop at x/.initial=,
+ %
+ % FIXME : this is undocumented:
+ /pgfplots/smithchart mirrored/.is if=pgfplots@smithchart@mirrored,
+ /pgfplots/smithchart mirrored/.default=true,
+ %
+ % this boolean may only be used inside of \addplot. It will be
+ % ignored otherwise.
+ /pgfplots/is smithchart cs/.is if=pgfplotspointisinsmithchartCS,
+ /pgfplots/is smithchart cs/.default=true,
+ /pgfplots/show origin/.is if=pgfplots@smithchart@showorigin,
+ /pgfplots/show origin/.default=true,
+ /pgfplots/show origin code/.code={%
+ \path[draw=black,fill=white] (0pt,0pt) circle (2.5pt);
+ \path[fill=black] (0pt,0pt) circle (0.5pt);
+ },
+ /pgfplots/every smithchart axis/.style={
+ grid=both,
+ xmin=0,
+ xmax=16000,% FIXME : more is not possible because some code uses the \pgfplots@xmin@reg registers... (ticks)
+ ymin=-16000,ymax=16000,
+ scaled ticks=false, % never draw the \cdot 10^4 labels
+ major tick style={draw=black},
+ xtick align=center,
+ ytick align=center,
+ every axis title shift=1.2\baselineskip,
+ legend style={anchor=center},
+ },
+ /pgfplots/default smithchart xtick/.code=,
+ /pgfplots/default smithchart ytick/.code=,
+ /pgfplots/default smithchart xytick/.code=,
+ /pgfplots/smithchart ticks by size/.code 2 args={%
+ \ifdim#1<14cm
+ \pgfkeysalso{/pgfplots/few smithchart ticks}%
+ \else
+ \ifdim#1<20cm
+ \pgfkeysalso{/pgfplots/many smithchart ticks}%
+ \else
+ \pgfkeysalso{/pgfplots/dense smithchart ticks}%
+ \fi
+ \fi
+ },
+ /pgfplots/few smithchart ticks*/.style={
+ default smithchart xtick/.style={
+ xtick={0.2,0.5,1,2,5},
+ },
+ default smithchart ytick/.style={
+ ytick={%
+ 0,%
+ 0.2, 0.5, 1, 2, 5,%
+ -0.2,-0.5,-1,-2,-5},
+ },
+ default smithchart xytick/.style={
+ xgrid each nth passes y={2},
+ ygrid each nth passes x={2},
+ },
+ },
+ /pgfplots/few smithchart ticks/.style={/pgfplots/few smithchart ticks*},
+ /pgfplots/few smithchart ticks*,% use it as initial config
+ /pgfplots/many smithchart ticks*/.style={
+ default smithchart xtick/.style={
+ xtick={
+ 0.1,0.2,0.3,0.4,0.5,1,1.5,2,3,4,5,10,20%
+ },
+ minor xtick={0.6,0.7,0.8,0.9,1.1,1.2,1.3,1.4,1.6,1.7,1.8,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50},
+ },
+ default smithchart ytick/.style={
+ ytick={%
+ 0,%
+ 0.1,0.2,...,1,1.5,2,3,4,5,10,20,%
+ -0.1,-0.2,...,-1,-1.5,-2,-3,-4,-5,-10,-20%
+ },
+ minor ytick={%
+ 1.1,1.2,1.3,1.4,1.6,1.7,1.8,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50,%
+ -1.1,-1.2,-1.3,-1.4,-1.6,-1.7,-1.8,-1.9,-2.2,-2.4,-2.6,-2.8,-3.2,-3.4,-3.6,-3.8,-4.5,-6,-7,-8,-9,-50%
+ },
+ },
+ default smithchart xytick/.style={
+ xgrid each nth passes y={1,2,4,5,10,20},
+ ygrid each nth passes x={1,2,3,5,10:3,20:3},
+ },
+ },
+ /pgfplots/many smithchart ticks/.style={
+ many smithchart ticks*,
+ every axis title shift=6pt,
+ yticklabel in circle,
+ show origin=true,
+ },
+ /pgfplots/dense smithchart ticks*/.style={
+ default smithchart xtick/.style={
+ %ygrid each nth passes x start=0,
+ xtick={
+ 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.2,1.4,1.6,1.8,2,3,4,5,10,20%
+ },
+ minor xtick={%
+ 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,%
+ 0.22,0.24,0.26,0.28,0.32,0.34,0.36,0.38,0.42,0.44,0.46,0.48,%
+ 0.52,%
+ 0.55,0.65,0.75,0.85,0.95,%
+ %0.6,0.7,0.8,0.9,%
+ 1.1,1.3,1.5,1.7,1.9,%
+ 2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50},
+ },
+ default smithchart ytick/.style={
+ ytick={%
+ 0,%
+ 0.1,0.2,...,1,1.2,1.4,1.6,1.8,2,3,4,5,10,20,%
+ -0.1,-0.2,...,-1,-1.2,-1.4,-1.6,-1.8,-2,-3,-4,-5,-10,-20%
+ },
+ minor ytick={%
+ 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,%
+ 0.22,0.24,0.26,0.28,0.32,0.34,0.36,0.38,0.42,0.44,0.46,0.48,%
+ 0.55,0.65,0.75,0.85,0.95,%
+ 1.1,1.3,1.5,1.7,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50,%
+ -0.01,-0.02,-0.03,-0.04,-0.05,-0.06,-0.07,-0.08,-0.09,-0.11,-0.12,-0.13,-0.14,-0.15,-0.16,-0.17,-0.18,-0.19,%
+ -0.22,-0.24,-0.26,-0.28,-0.32,-0.34,-0.36,-0.38,-0.42,-0.44,-0.46,-0.48,%
+ -0.55,-0.65,-0.75,-0.85,-0.95,%
+ -1.1,-1.3,-1.5,-1.7,-1.9,-2.2,-2.4,-2.6,-2.8,-3.2,-3.4,-3.6,-3.8,-4.5,-6,-7,-8,-9,-50%
+ },
+ },
+ default smithchart xytick/.style={
+ xgrid each nth passes y={0.2 if < 0.2001,0.5 if < 0.50001,1 if < 1.001,2,4,5,10,20},
+ ygrid each nth passes x={0.2 if < 0.2001,0.52 if < 0.52001,1 if < 1.001,2,3,5,10:3,20:3},
+ },
+ },
+ /pgfplots/dense smithchart ticks/.style={
+ yticklabel in circle,
+ every axis title shift=6pt,
+ dense smithchart ticks*,
+ show origin=true,
+ every major grid/.style={black!60},
+ },
+ /pgfplots/yticklabel in circle/.style={
+ ytick align=inside,
+ yticklabel style={
+ rotate=90,
+ sloped like y axis={%
+ execute for upside down={\tikzset{anchor=north east}},
+ %allow upside down,
+ reset nontranslations=false},
+ anchor=south west,
+ %font=\tiny,
+ }
+ },
+ yticklabel around circle/.style={
+ ytick align=center,
+ yticklabel style={
+ rotate=90,
+ sloped like y axis={%
+ execute for upside down={\tikzset{anchor=south west}},
+ %allow upside down,
+ reset nontranslations=false},
+ anchor=south east,
+ %font=\tiny,
+ }
+ },
+ yticklabel around circle*/.style={
+ ytick align=center,
+ yticklabel style={
+ rotate=90,
+ sloped like y axis={%
+ execute for upside down={\tikzset{anchor=north west}},
+ %allow upside down,
+ reset nontranslations=false},
+ anchor=north east,
+ %font=\tiny,
+ }
+ }
+}
+
+\pgfkeys{
+ /pgfplots/warning/smithchart/no such tick/.code 2 args={%
+ \pgfplotsthrow@warning{There is no #1tick with index '#2'. Skipping it.}%
+ },
+}
+
+\def\pgfplots@smithchartaxis@activate{%
+ \def\axisdefaultwidth{207pt}%
+ \def\axisdefaultheight{207pt}%
+ \let\pgfplotsqpointxy@cart=\pgfplotsqpointxy
+ \let\pgfplotsqpointxy=\pgfplotsqpointxy@smithchartaxis
+ \let\pgfplotsqpointxy@orthogonal=\pgfplotsqpointxy
+ \def\pgfplotsqpointxyz##1##2##3{\pgfplotsqpointxy{##1}{##2}}% FIXME
+ \let\pgfplotspointouternormalvectorofaxis@=\pgfplotspointouternormalvectorofaxis@smithchartaxis
+ \def\pgfplotspointouternormalvectorofaxis@ifdependson@v##1##2##3{##2}%
+ \def\pgfplots@drawticklines@INSTALLCLIP@onorientedsurf##1{}%
+ \let\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf=\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf@smithchartaxis
+ \def\pgfplots@visphase@notify@changeofcanvaslimits##1{}%
+ \def\pgfplots@avoid@empty@axis@range@for##1{}%
+ \def\pgfplotsaxisifcontainspoint##1##2{##1}%
+ \let\pgfplots@set@default@size@options=\pgfplots@set@default@size@options@smithchart%
+ %
+ \def\b@pgfplots@smithchart@defaultticks@x{0}%
+ \def\b@pgfplots@smithchart@defaultticks@y{0}%
+ \let\pgfplots@assign@default@tick@foraxis=\pgfplots@assign@default@tick@foraxis@smithchart
+ \def\pgfplots@checkisuniformLINEARtick##1##2{%
+ % don't do anything here. I suppose it is useless and is a
+ % waste of time for many ticks.
+ \global\pgfplots@isuniformtickfalse
+ }%
+ \let\pgfplots@clippath@prepare@for@axistype=\pgfplots@clippath@prepare@for@axistype@smithchartaxis
+ %
+ % invalid range: do not clear plots. simply assign default limits.
+ \let\pgfplots@handle@invalid@range@defaultlimits=\pgfplots@handle@invalid@range@defaultlimits@smithchart%
+ \def\pgfplots@handle@invalid@range{\pgfplots@handle@invalid@range@defaultlimits}%
+ %
+ \let\pgfplotspointonorientedsurfaceabwithbshift=\pgfplotspointonorientedsurfaceabwithbshift@smithchartaxis
+ \let\pgfplots@draw@axis@is@prepared=\pgfplots@draw@axis@is@prepared@smithchartaxis
+ \let\pgfplots@drawgridlines@onorientedsurf@fromto=\pgfplots@drawgridlines@onorientedsurf@fromto@smithchart
+ \let\pgfplots@drawaxis@innerlines@onorientedsurf=\pgfplots@drawaxis@innerlines@onorientedsurf@smithchart
+ \let\pgfplots@drawaxis@outerlines@separate@onorientedsurf=\pgfplots@drawaxis@outerlines@separate@onorientedsurf@smithchartaxis
+ \let\pgfplotspoint@initialisation@axes=\pgfplotspoint@initialisation@axes@smithchart%
+ \let\pgfplotspoint@initialisation@units=\pgfplotspoint@initialisation@units@smithchart
+ \expandafter\def\expandafter\pgfplots@create@axis@descriptions@\expandafter{%
+ \pgfplots@create@axis@descriptions@
+ \ifpgfplots@smithchart@showorigin
+ \pgfkeysvalueof{/pgfplots/show origin code/.@cmd}\pgfeov%
+ \fi
+ }%
+ \def\axisdefaultheight{\axisdefaultwidth}%
+ \let\pgfplots@BB@for@plotbox@get@unit@scales@for@limits=\pgfplots@BB@for@plotbox@get@unit@scales@for@limits@smithchart
+ %\let\pgfplots@limits@ready=\pgfplots@limits@ready@smithchart
+ %\let\pgfplots@show@ticklabel@=\pgfplots@show@ticklabel@@smithchart
+ %\def\pgfplots@xtick@disable@last@tick{0}%
+ \let\pgfplots@xtick@check@tickshow=\pgfplots@xtick@check@tickshow@smithchart%
+ \let\pgfplots@ytick@check@tickshow=\pgfplots@ytick@check@tickshow@smithchart%
+ \let\pgfplots@set@options@sanitize=\relax
+ \let\pgfplots@set@options@sanitizemode=\relax
+ \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@smithchart
+ %
+ \expandafter\def\expandafter\pgfplots@notify@options@are@set\expandafter{%
+ \pgfplots@notify@options@are@set
+ \pgfplotsset{%
+ separate axis lines,%
+ is smithchart cs=false,%
+ xtick pos=left,
+ ytick pos=left,
+ axis x line*=center,
+ disabledatascaling,
+ }%
+ \def\pgfplots@xtickposnum{2}%
+ %
+ \ifx\pgfplots@xtick\pgfutil@empty
+ \def\b@pgfplots@smithchart@defaultticks@x{1}%
+ \fi
+ \ifx\pgfplots@ytick\pgfutil@empty
+ \def\b@pgfplots@smithchart@defaultticks@y{1}%
+ \fi
+ \pgfplotscoordmath{default}{parsenumber}{0.002}%
+ \let\pgfplots@almost@zero@thresh=\pgfmathresult
+ }%
+ \def\pgfplots@xticklabel@pos{}%
+ \def\pgfplots@yticklabel@pos{}%
+ \def\pgfplots@zticklabel@pos{}%
+ \def\pgfplots@init@ticklabelaxisspecfor##1##2{}%
+ \def\pgfplots@init@ticklabelaxisspec@twodim@for##1##2{}%
+ \def\pgfplotspointonorientedsurfaceabmatchaxisline@warn##1{}% clear warning. It works for smith charts.
+ \def\pgfplots@xticklabelaxisspec{v20}%
+ \def\pgfplots@yticklabelaxisspec{0v0}%
+ \def\pgfplots@zticklabelaxisspec{00v}%
+ %
+ % cartesian cs
+ \tikzdeclarecoordinatesystem{cartesian}{\edef\pgfplots@loc@TMPa{##1}\expandafter\pgfplotspointcartesian@\pgfplots@loc@TMPa\pgfplots@coord@end}%
+ %
+ %
+ % Special treatment for
+ % \pgfplots@prepare@tick@coordlists@for: make sure we don't need
+ % to use the register arithmetics in \pgfplots@xmin@reg and its
+ % variants! I want an UNRESTRICTED max data range!
+ \def\pgfplots@prepare@tick@coordlists@for@assign##1=##2{\edef##1{##2}}%
+ \def\pgfplots@prepare@tick@coordlists@for@advance##1by##2{%
+ % THIS IS NEVER USED (at the time of this writing).
+ \edef\pgfplots@loc@TMPa{##2}%
+ \pgfplotscoordmath{default}{parsenumber}{##1}%
+ \pgfplotscoordmath{default}{op}{add}{{\pgfmathresult}{\pgfplots@loc@TMPa}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let##1=\pgfmathresult
+ }%
+ \def\pgfplots@prepare@tick@coordlists@for@tofixed##1{\edef\pgfmathresult{##1}}%
+ \def\pgfplots@prepare@tick@coordlists@for@handletolerance##1{}% does not apply to smithcharts.
+ \def\pgfplots@prepare@tick@coordlists@for@checktickmin##1{%
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tmpa}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@##1tickmin\endcsname}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{default}{if less than}{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{%
+ \pgfplots@tickshowfalse
+ }{%
+ }%
+ }%
+ \def\pgfplots@prepare@tick@coordlists@for@checktickmax##1{%
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tmpa}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@##1tickmin\endcsname}%
+ \let\pgfplots@loc@TMPb=\pgfmathresult
+ \pgfplotscoordmath{default}{if less than}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPa}{%
+ \pgfplots@tickshowfalse
+ }{%
+ }%
+ }%
+ \def\pgfplots@prepare@tick@coordlists@for@checkdatalimits##1{}% I won't do this here. Smithcharts are somewhat special.
+}%
+
+\def\pgfplotspointcartesian@#1,#2\pgfplots@coord@end{%
+ \pgfpointxy@orig{#1}{#2}%
+}%
+\def\pgfplotscoordmathnotifydatascalesetfor@smithchart#1{%
+ \def\pgfplotscoordmathnotifydatascalesetfor##1{}%
+ \edef\pgfplotscoordmathnotifydatascalesetfor@{#1}%
+ \def\pgfplotscoordmathnotifydatascalesetfor@@{x}%
+ \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@
+ \pgfplotscoordmath{#1}{datascaletrafo set params}{0}{0}%
+ \else
+ \def\pgfplotscoordmathnotifydatascalesetfor@@{y}%
+ \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@
+ \pgfplotscoordmath{#1}{datascaletrafo set shift}{0}%
+ \fi
+ \fi
+ \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@smithchart
+}%
+
+% #1: the "a" value on the oriented surf
+% #2: the "b" value.
+% #3: the shift along the normal.
+%
+\def\pgfplotspointonorientedsurfaceabwithbshift@smithchartaxis#1#2#3{%
+ % implement the shift in "b" direction explicitly:
+ \pgfpointadd
+ {\pgfplotspointonorientedsurfaceab{#1}{#2}}%
+ {%
+ \pgfplotspointonorientedsurfaceabtolinespec{v}{0}%
+ \afterassignment\pgfplots@gobble@until@relax
+ \pgf@xa=-#3\relax
+ \edef\pgfplots@shift@no@unit{\pgf@sys@tonumber\pgf@xa}%
+ \pgfqpointscale
+ {\pgfplots@shift@no@unit}
+ {\expandafter\pgfplotspointouternormalvectorofaxis\expandafter{\pgfplotsretval}}%
+ }%
+}
+
+
+% Computes the complex division
+% (A + j B) / (C + j D) = (A C + B D + j (B C - A D) ) / (C^2 + D^2)
+% and assigns the result to \pgfmathresult and \pgfmathresultim . Here
+% 'j = sqrt{-1}' is the imaginary unit.
+%
+% #1 : A
+% #2 : B
+% #3 : C
+% #4 : D
+%
+% The arithmetics is performed in \pgfplotscoordmath{default} (which
+% uses the floating point unit in the initial configuration)
+%
+% Numbers are expected to be already parsed (i.e. you need to invoke
+% \pgfplotscoordmath{default}{parsenumber}{#1}%
+% \let\A=\pgfmathresult
+% before)
+\def\pgfplotscoordmathcomplexdivision#1#2#3#4{%
+ \begingroup
+ \edef\pgfplots@A{#1}%
+ \edef\pgfplots@B{#2}%
+ \edef\pgfplots@C{#3}%
+ \edef\pgfplots@D{#4}%
+ %
+ %
+ % ok, compute it:
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@A}{\pgfplots@C}}%
+ \let\pgfplots@AC=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@A}{\pgfplots@D}}%
+ \let\pgfplots@AD=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@B}{\pgfplots@D}}%
+ \let\pgfplots@BD=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@B}{\pgfplots@C}}%
+ \let\pgfplots@BC=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@C}{\pgfplots@C}}%
+ \let\pgfplots@CC=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@D}{\pgfplots@D}}%
+ \let\pgfplots@DD=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@CC}{\pgfplots@DD}}%
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfmathresult}}%
+ \let\pgfplots@scale=\pgfmathresult
+ %
+ %
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@AC}{\pgfplots@BD}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplots@scale}}%
+ \let\pgfplots@x=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@BC}{\pgfplots@AD}}%
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplots@scale}}%
+ \let\pgfplots@y=\pgfmathresult
+ %
+ \xdef\pgfplots@glob@TMPa{%
+ \noexpand\def\noexpand\pgfmathresult{\pgfplots@x}%
+ \noexpand\def\noexpand\pgfmathresultim{\pgfplots@y}%
+ }%
+ \endgroup
+ \pgfplots@glob@TMPa
+}%
+
+\def\pgfplotsqpointxy@smithchartaxis#1#2{%
+ \pgf@process{%
+ \ifpgfplotspointisinsmithchartCS
+ \def\pgfplots@x{#1}%
+ \def\pgfplots@y{#2}%
+ \else
+ % compute rx + j* ry = (#1 + j * #2 -1) / (#1 + j*#2 + 1)
+ %
+ % I write
+ % #1 - 1 + j * #2 = A + j * B
+ % 1 + #1 + j * #2 = C + j * D
+ %
+ % -> rx + j * ry = (A + j B) / (C + j D) = (A C + B D + j (B C - A D) ) / (C^2 + D^2)
+ \pgfplotscoordmath{default}{parsenumber}{#1}%
+ \let\pgfplots@x=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{parsenumber}{#2}%
+ \let\pgfplots@D=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{one}%
+ \let\pgfplots@one=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@one}{\pgfplots@x}}%
+ \let\pgfplots@C=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@x}{\pgfplots@one}}%
+ \let\pgfplots@A=\pgfmathresult
+ %
+ \let\pgfplots@B=\pgfplots@D
+ %
+ \pgfplotscoordmathcomplexdivision\pgfplots@A\pgfplots@B\pgfplots@C\pgfplots@D
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@x=\pgfmathresult
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresultim}%
+ \let\pgfplots@y=\pgfmathresult
+ \fi
+ %
+ \pgfplotsqpointxy@smithchart@canvas\pgfplots@x\pgfplots@y
+%\message{pgfplotsqpointxy{#1}{#2} ---> (\pgfplots@x,\pgfplots@y) ---> (\the\pgf@x,\the\pgf@y)}%
+ }%
+}%
+
+\def\pgfplotsqpointxy@smithchart@canvas#1#2{%
+ \ifpgfplots@smithchart@mirrored
+ \pgfqpointxy@orig{-#1}{#2}%
+ \else
+ \pgfqpointxy@orig{#1}{#2}%
+ \fi
+}%
+
+\def\pgfplots@clippath@prepare@for@axistype@smithchartaxis{%
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathellipse
+ {\pgfplotsqpointxy@smithchart@canvas{0}{0}}
+ {\pgfplotsqpointxy@smithchart@canvas{1}{0}}
+ {\pgfplotsqpointxy@smithchart@canvas{0}{1}}%
+ \pgfplots@clippath@use@{##1}%
+ }%
+}%
+
+\def\pgfplotspointouternormalvectorofaxis@smithchartaxis#1#2#3\relax{%
+ \if v#1%
+ \pgfqpoint{0pt}{1pt}%
+ \else
+ \if v#2%
+ \pgfplotspointouternormalvectorofaxisgetv{#1#2#3}%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \def\pgfplotsretval{0}%
+ \fi
+ \pgfpointdiff
+ {\pgfplotsqpointxy@smithchart@canvas{0}{0}}%
+ {\pgfplotsqpointxy{0}{\pgfplotsretval}}%
+ \pgfpointnormalised{}%
+ \else
+ \pgfqpoint{0pt}{1pt}%
+ \fi
+ \fi
+ \pgf@process{}%
+ \endgroup
+}%
+
+\def\pgfplotspoint@initialisation@axes@smithchart{%
+ \begingroup
+ %\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}%
+ \gdef\pgfplotspointminminmin{\pgfplotsqpointxy@smithchart@canvas{0}{0}}%
+ %
+ % the "x" axis is the diameter of the circle (for fixed y=0)
+ \pgf@x=2\pgf@xx
+ \pgf@y=0pt
+ \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \xdef\pgfplotspointxaxislength{\pgfmathresult pt}%
+ %
+ \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}%
+ \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ %
+ % the length of the "y" axis is 2*pi*r (for fixed x=0, the outer
+ % circle).
+ % The radius is the length of (0,1) which is (0pt,\pgf@xx1):
+ \pgfmath@basic@multiply@{\pgf@sys@tonumber\pgf@xx}{1}%
+ \pgfmathmultiply@{\pgfmathresult}{6.28318530717959}% 2*pi * r
+ \xdef\pgfplotspointyaxislength{\pgfmathresult pt}%
+ %
+ \global\let\pgfplotspointzaxis=\pgfpointorigin
+ \gdef\pgfplotspointzaxislength{0pt}%
+ \endgroup
+ %
+ \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\pgf@xx}%
+ \pgfmathdivide@{16000}{\pgfplots@loc@TMPa}%
+ \let\pgfplots@smithchart@axis@max@xradius@for@ycircle=\pgfmathresult
+ %
+ \ifdim\pgf@xx=\pgf@yy
+ \def\pgfplots@smithchart@axis@ratioxy{1}%
+ \def\pgfplots@smithchart@axis@ratioyx{1}%
+ \let\pgfplots@smithchart@axis@max@yradius@for@ycircle=\pgfplots@smithchart@axis@max@xradius@for@ycircle
+ \else
+ \edef\pgfplots@loc@TMPb{\pgf@sys@tonumber\pgf@yy}%
+ \pgfmathdivide@\pgfplots@loc@TMPa\pgfplots@loc@TMPb
+ \let\pgfplots@smithchart@axis@ratioxy=\pgfmathresult
+ \pgfmathdivide@\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \let\pgfplots@smithchart@axis@ratioyx=\pgfmathresult
+ %
+ \pgfmathdivide@{16000}{\pgfplots@loc@TMPb}%
+ \let\pgfplots@smithchart@axis@max@yradius@for@ycircle=\pgfmathresult
+ \fi
+}
+\let\pgfplotspoint@initialisation@units@orig=\pgfplotspoint@initialisation@units
+\def\pgfplotspoint@initialisation@units@smithchart{%
+ \pgfplotspoint@initialisation@units@orig
+ \def\pgfplotspointunity{%
+ \pgfplotspointouternormalvectorofaxisgetv{0v0}% x=0 (outer circle) and v varies (the yticks)
+ \ifx\pgfplotsretval\pgfutil@empty
+ \def\pgfplotsretval{0}%
+ \fi
+ \pgfpointnormalised{\pgfplotsqpointxy{0}{\ifx\pgfplotsretval\pgfutil@empty 0\else\pgfplotsretval\fi}}%
+ \pgf@xa=-\pgf@y
+ \global\pgf@y=\pgf@x
+ \global\pgf@x=\pgf@xa
+ }%
+ \def\pgfplotsunitylength{1}%
+ \def\pgfplotsunityinvlength{1}%
+}%
+
+\def\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf@smithchartaxis#1{%
+ %\pgfplots@clippath@install{\pgfusepath{clip}}%
+}%
+
+% At this time, the minor/major tick lists are initialised.
+\def\pgfplots@draw@axis@is@prepared@smithchartaxis{%
+ \pgfplots@gridlines@init@grid@stop@points@for xy%
+ \pgfplots@gridlines@init@grid@stop@points@for yx%
+ %
+ % and finalize x:
+ \def\pgfplots@finalize@constraints{1}%
+ \pgfplots@gridlines@init@grid@stop@points@for@computethem{x}{y}{\pgfplots@finalize@constraints}%
+}%
+
+
+% Initialises the '#1grid each nth passes #2' and '#1grid stop at #2'
+% features. All it does is to prepare the
+% method \pgfplots@get@current@grid@stop@point.
+%
+% The method is quite involved. Please refer to the manual for what it
+% is supposed to do, and refer to the code comments below for
+% implementational details.
+%
+% #1 either x or y
+% #2 either x or y
+\def\pgfplots@gridlines@init@grid@stop@points@for#1#2{%
+ %
+ \expandafter\let\csname pgfplots@#1grid@stop@points\endcsname=\relax
+ %
+ \pgfkeysgetvalue{/pgfplots/#1grid each nth passes #2}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ % we have no "xticknum -> xtickpos" lookup table yet.
+ \expandafter\def\csname b@pgfplots@#2ticknum@to@pos@lookup\endcsname{0}%
+ %
+ \pgfplotslistnewempty\pgfplots@loc@TMPd
+ % normalise the argument for 'ygrid each nth passes x': each list element
+ % should be of the form '<xtickpos>:<n>' where <n> means that each
+ % <n>th arc can pass.
+ \expandafter\pgfplotsutilforeachcommasep\pgfplots@loc@TMPa\as\entry{%
+ \expandafter\pgfplots@gridlines@init@grid@stop@points@for@normalise\entry\relax#1#2%
+ \expandafter\pgfplotslistpushback\entry\to\pgfplots@loc@TMPd
+ }%
+ \expandafter\let\csname pgfplots@#1grid@stop@points\endcsname=\pgfplots@loc@TMPd
+ %
+ % Ok.
+ %
+ % Now, the 'ygrid each nth passes x' feature relies *crucially* on grid line
+ % indices (for the 'each nth' feature).
+ %
+ % I sort the arcs according to their absolute magnitude and assign
+ % indices into the resulting arrays to normalize that stuff.
+ %
+ % The array is of the form
+ % A[i] = entry of \pgfplots@prepared@tick@positions@*
+ % and contains *both*, major and minor grid lines.
+ \pgfplotsarraynewempty\pgfplots@gridlines
+ \pgfplotscoordmath{default}{zero}%
+ \edef\elem{{-1}{\pgfmathresult}}% require 0 to be zero for symmetry even if there is no such tick pos
+ \expandafter\pgfplotsarraypushback\elem\to\pgfplots@gridlines
+ \pgfplots@if{pgfplots@#1majorgrids}{%
+ % insert all major tick positions, using their absolute value.
+ \expandafter
+ \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@major@#1\endcsname\as\elem{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\elem
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}%
+ \pgfplotscoordmath{default}{op}{abs}{{\pgfmathresult}}%
+ \edef\elem{{\pgfplots@ticknum}{\pgfmathresult}}%
+ \expandafter\pgfplotsarraypushback\elem\to\pgfplots@gridlines
+ }%
+ }{}%
+ \pgfplots@if{pgfplots@#1minorgrids}{%
+ % now the same for minor grid positions:
+ \expandafter
+ \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@minor@#1\endcsname\as\elem{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\elem
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}%
+ \pgfplotscoordmath{default}{op}{abs}{{\pgfmathresult}}%
+ \edef\elem{{\pgfplots@ticknum}{\pgfmathresult}}%
+ \expandafter\pgfplotsarraypushback\elem\to\pgfplots@gridlines
+ }%
+ }{}%
+ % sort the array!
+ \pgfkeysgetvalue{/pgfplots/smithchart@sortlt/.@cmd}\pgfplots@loc@TMPa
+ \pgfkeyslet{/pgfplots/iflessthan/.@cmd}\pgfplots@loc@TMPa
+ \pgfplotsarraysort\pgfplots@gridlines
+ %
+ % ok. Now it is sorted.
+ %
+ % I finally need a lookup
+ % \pgfplots@ticknum --> sort index.
+ % If the associated values have the same absolute value, the same
+ % sort index should be assigned.
+ %
+ % For example, the array might be associated to the following tick
+ % positions, sorted by absolute value:
+ % 0.0, 1.0, -1.0, 3.0, -3.0, 4.0, -4.0, 5.0, -5.0
+ % What I want is that
+ % 0.0 gets sort index 0
+ % 1.0 and -1.0 get sort index 1
+ % 3.0 and -3.0 get sort index 2
+ % 4.0 and -4.0 get sort index 3
+ % and so on. The array contains only absolute values, so that's
+ % not too difficult to check.
+ %
+ % Since each of the tick positions can be (uniquely) identified by
+ % its associated \pgfplots@ticknum value, I map \pgfplots@ticknum
+ % to the sort index.
+ \countdef\c@sortindex=\c@pgf@counta
+ \c@sortindex=\pgfkeysvalueof{/pgfplots/#1grid each nth passes #2 start} % this is assigned to the '0.0' gridline (if any)
+ \def\pgfplots@lasttickpos{}%
+ \pgfplotsarrayforeachungrouped\pgfplots@gridlines\as\elem{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\elem
+ \ifx\pgfplots@lasttickpos\pgfutil@empty
+ \else
+ \ifx\pgfplots@lasttickpos\pgfplots@tick
+ \else
+ \advance\c@sortindex by1
+ \fi
+ \fi
+ \expandafter\edef\csname pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum\endcsname{\the\c@sortindex}%
+%\message{\pgfplots@ticknum\space(abs(tickpos) = \pgfplots@tick)---> sort index \csname pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum\endcsname^^J}%
+ \let\pgfplots@lasttickpos=\pgfplots@tick
+ }%
+ %
+ % unfortunately, I can't free the \pgfplots@gridlines array
+ % without extensive overhead :-(
+ \fi
+ %
+ \expandafter\let\csname b@pgfplots@#1gridline@stopmap\endcsname\relax
+ \pgfkeysgetvalue{/pgfplots/#1grid stop at #2}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa,}% this inserts the final comma and handles any active ':' sign (for french babel)
+ \def\pgfplots@loc@TMPb{\pgfplots@gridlines@init@stop@maps #1#2}%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfplots@EOI%
+ \fi
+ %
+ %
+ % Now, compute all final stop positions. Also prepare the cross
+ % dependencies between x grids and y grids here (such that there
+ % is no grid line stopping in white space)
+ %
+ \if#1x%
+ \def\pgfplots@finalize@constraints{0}% we have to wait until y stop points are known.
+ \else
+ \def\pgfplots@finalize@constraints{1}%
+ \fi
+ \pgfplots@gridlines@init@grid@stop@points@for@computethem{#1}{#2}{\pgfplots@finalize@constraints}%
+}%
+% #1,#2,#3 the arguments for
+% \pgfplots@gridlines@preparation@get@current@grid@stop@point
+\def\pgfplots@gridlines@init@grid@stop@points@for@computethem#1#2#3{%
+ %
+ \expandafter\pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@major@#1\endcsname\as\elem{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\elem
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}\let\pgfplots@tick=\pgfmathresult
+ \pgfplots@gridlines@preparation@get@current@grid@stop@point{#1}{#2}{\pgfplots@tick}{#3}%
+ \if1#3%
+ \pgfplots@gridlines@let{#1}{\pgfplots@tick@prepared}=\pgfplotsretval
+ \fi
+ }%
+ \expandafter\pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@minor@#1\endcsname\as\elem{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\elem
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}\let\pgfplots@tick=\pgfmathresult
+ \pgfplots@gridlines@preparation@get@current@grid@stop@point{#1}{#2}{\pgfplots@tick}{#3}%
+ \if1#3%
+ \pgfplots@gridlines@let{#1}{\pgfplots@tick@prepared}=\pgfplotsretval
+ \fi
+ }%
+ \expandafter\def\csname b@pgfplots@#1gridline@stopmap\endcsname{1}%
+}
+
+\def\pgfplots@gridlines@init@stop@maps#1#2{%
+ \pgfutil@ifnextchar\pgfplots@EOI{%
+ \pgfutil@gobble
+ }{%
+ \pgfutil@ifnextchar,{%
+ \pgfplots@gridlines@init@stop@maps@next@@#1#2%
+ }{%
+ \pgfplots@gridlines@init@stop@maps@next#1#2%
+ }%
+ }%
+}%
+\def\pgfplots@gridlines@init@stop@maps@next#1#2#3:#4,{%
+ \pgfplotscoordmath{default}{parsenumber}{#4}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplots@gridlines@stopmap@prepare{#3}%
+ \pgfplots@gridlines@let{#1}{\pgfmathresult}=\pgfplots@loc@TMPa
+ \expandafter\def\csname b@pgfplots@#1gridline@stopmap\endcsname{1}%
+ %
+ \pgfplots@gridlines@init@stop@maps #1#2%
+}
+% just eat one empty comma:
+\def\pgfplots@gridlines@init@stop@maps@next@@#1#2,{\pgfplots@gridlines@init@stop@maps #1#2}%
+\def\pgfplots@gridlines@let#1#2=#3{%
+ \expandafter\let\csname pgfplots@#1gridline@stopmap@#2\endcsname=#3%
+ \if#1y%
+ % support symmetry:
+ % add -\pgfmathresult to the map.
+ % To disable this symmetry, use 'ygrid stop at x={0.2:4 -0.2:5}
+ % you can also use an empty value '-0.2:{}', that's also ok.
+ \expandafter\let\csname pgfplots@#1gridline@stopmap@-#2\endcsname=#3%
+ \fi
+}%
+
+\def\pgfplots@gridlines@stopmap@prepare@digits{2}%
+\def\pgfplots@gridlines@stopmap@prepare#1{%
+ \begingroup
+ \pgfmathfloatparsenumber{#1}%
+ \let\pgfmathfloat@round@precision=\pgfplots@gridlines@stopmap@prepare@digits%
+ \pgfmathfloatroundzerofill\pgfmathresult
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+\def\pgfplots@gridlines@stopmap@trunc@#1.#2#3#4\relax{%
+ \def\pgfmathresult{#1.#2#3}%
+}%
+
+\pgfkeysdefargs{/pgfplots/smithchart@sortlt}{#1#2#3#4}{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack#1%
+ \let\pgfplots@A=\pgfplots@tick
+ \expandafter\pgfplots@prepared@tick@pos@unpack#2%
+ \let\pgfplots@B=\pgfplots@tick
+ \pgfplotscoordmath{default}{if less than}{\pgfplots@A}{\pgfplots@B}{#3}{#4}%
+}%
+
+% initialise a lookuptable from ticknumber -> tick position (sort
+% of an array)
+%
+% This is only invoked if it is needed (if 'arc
+% limits={[index]4,[index]2}' or something like that is used, see the
+% manual).
+%
+% #1 either x or y
+% #2 either x or y
+\def\pgfplots@gridlines@init@grid@stop@points@for@init@ticknum@lookup#1#2{%
+ \c@pgf@counta=0
+ \pgfplots@if{pgfplots@#1majorgrids}{%
+ \expandafter
+ \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@major@#2\endcsname\as\elem{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\elem
+ \expandafter\let\csname pgfplots@#2tick@num@to@pos@\the\c@pgf@counta\endcsname=\pgfplots@tick
+ \advance\c@pgf@counta by1
+ }%
+ }{}%
+ \pgfplots@if{pgfplots@#1minorgrids}{%
+ \expandafter
+ \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@minor@#2\endcsname\as\elem{%
+ \expandafter\pgfplots@prepared@tick@pos@unpack\elem
+ \expandafter\let\csname pgfplots@#2tick@num@to@pos@\the\c@pgf@counta\endcsname=\pgfplots@tick
+ \advance\c@pgf@counta by1
+ }%
+ }{}%
+ \expandafter\def\csname b@pgfplots@#2ticknum@to@pos@lookup\endcsname{1}%
+}%
+\def\pgfplots@gridlines@init@grid@stop@points@for@normalise#1\relax#2#3{%
+ \def\b@pgfplots@haslt{0}%
+ %
+ \pgfutil@in@{if <}{#1}%
+ \ifpgfutil@in@
+ % strip the white space between 'if' and '<':
+ \def\pgfplots@loc@TMPa##1if <##2\relax{\edef\entry{##1if<##2}}%
+ \expandafter\pgfplots@loc@TMPa\entry\relax
+ \def\b@pgfplots@haslt{1}%
+ \fi
+ %
+ \pgfutil@in@{if<}{#1}%
+ \ifpgfutil@in@
+ \def\b@pgfplots@haslt{1}%
+ \fi
+ %
+ \pgfutil@in@:{#1}%
+ \ifpgfutil@in@
+ \def\b@pgfplots@hascolon{1}%
+ \else
+ \def\b@pgfplots@hascolon{0}%
+ \fi
+ %
+ \if1\b@pgfplots@hascolon
+ \edef\entry{\entry\if0\b@pgfplots@haslt if<\fi}%
+ \else
+ \if1\b@pgfplots@haslt
+ \expandafter\pgfplots@gridlines@stop@at@unpack@@@\entry\relax
+ \edef\entry{\pgfplots@grid@stop@at:2if<\pgfplots@grid@stop@at@iflt}%
+ \else
+ \edef\entry{\entry:2if<}%
+ \fi%
+ \fi%
+ %
+ \pgfutil@in@{[index]}{#1}%
+ \ifpgfutil@in@
+ \if0\csname b@pgfplots@#3ticknum@to@pos@lookup\endcsname
+ \pgfplots@gridlines@init@grid@stop@points@for@init@ticknum@lookup#2#3%
+ \fi
+ \expandafter\pgfplots@gridlines@stop@at@unpack\entry\relax
+ \pgfutil@ifundefined{pgfplots@#3tick@num@to@pos@\pgfplots@grid@stop@at}{%
+ \pgfplotswarning{smithchart/no such tick}{#3}{\pgfplots@grid@stop@at}\pgfeov
+ \let\entry=\pgfutil@empty
+ }{%
+ \edef\entry{\csname pgfplots@#3tick@num@to@pos@\pgfplots@grid@stop@at\endcsname:\pgfplots@grid@stop@at@eachnth}%
+ }%
+ \fi
+ %
+ \expandafter\pgfplots@gridlines@stop@at@unpack\entry\relax
+ \pgfplotscoordmath{default}{parsenumber}\pgfplots@grid@stop@at
+ \let\pgfplots@grid@stop@at=\pgfmathresult
+ \ifx\pgfplots@grid@stop@at@iflt\pgfutil@empty
+ \else
+ \pgfplotscoordmath{default}{parsenumber}\pgfplots@grid@stop@at@iflt
+ \let\pgfplots@grid@stop@at@iflt=\pgfmathresult
+ \fi
+ \edef\entry{\pgfplots@grid@stop@at:\pgfplots@grid@stop@at@eachnth if<\pgfplots@grid@stop@at@iflt}%
+}%
+\def\pgfplots@gridlines@stop@at@unpack@@@#1if<#2\relax{%
+ \def\pgfplots@grid@stop@at{#1}%
+ \def\pgfplots@grid@stop@at@iflt{#2}%
+}%
+\def\pgfplots@gridlines@stop@at@unpack#1:#2if<#3\relax{%
+ \def\pgfplots@grid@stop@at{#1}%
+ \def\pgfplots@grid@stop@at@eachnth{#2}%
+ \def\pgfplots@grid@stop@at@iflt{#3}%
+}%
+
+% Returns the xtick position which should end the current arc.
+%
+% This is an INTERNAL preparation method. See
+% \pgfplots@get@current@grid@stop@point for the final one.
+%
+% Note that arcs correspond to ygrid lines.
+%
+% #1 either x or y
+% #2 either x or y
+% #3 the value of the current grid line
+% #4 a boolean which expands either to 0 or to 1.
+% The \pgfplots@get@current@grid@stop@point@handle@constraints method
+% will be invoked if and only if #4=1
+%
+% @POSTCONDITION On output,
+% - \pgfplotsretval will be filled with the
+% result. If the result is empty, no restriction is imposed.
+% Otherwise, it contains the #2tick value at which the current #1grid shall end.
+% The result is already processed with
+% \pgfplotscoordmath{default}{parsenumber}{<value>}
+% - \pgfplots@tick@prepared contains a rounded representation of #3.
+%
+% The method relies on the 'ygrid each nth passes x' feature, more specifically the
+% stuff prepared by \pgfplots@gridlines@init@grid@stop@points@for
+\def\pgfplots@gridlines@preparation@get@current@grid@stop@point#1#2#3#4{%
+ \def\pgfplotsretval{}%
+ %
+ \pgfplots@gridlines@stopmap@prepare{#3}%
+ \let\pgfplots@tick@prepared=\pgfmathresult
+ \pgfmathfloatabs@\pgfplots@tick@prepared
+ \let\pgfplots@tick@prepared@abs=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{abs}{{#3}}%
+ \let\pgfplots@tick@abs=\pgfmathresult
+ %
+ % first: check the '#1grid stop at #2':
+ \expandafter\ifx\csname b@pgfplots@#1gridline@stopmap\endcsname\relax%
+ % ok. there is no such thing.
+ \else
+ % ah - process it!
+ \pgfutil@ifundefined{pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared}{%
+ }{%
+ \edef\pgfplotsretval{\csname pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared\endcsname}%
+ }%
+ \fi
+ %
+ \ifx\pgfplotsretval\pgfutil@empty
+ % the individual map failed. Ok, then check for the '#1grid each nth passes #2'
+ \expandafter\ifx\csname pgfplots@#1grid@stop@points\endcsname\relax
+ \else
+ % \pgfplots@ticknum is defined in this context here.
+ \pgfutil@ifundefined{pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum}{%
+ \pgfplots@warning{Sorry, I can't get the current arc limit for #1grid no \#\pgfplots@ticknum\space(value \pgfplots@tick). This seems like an internal error!?}%
+ }{%
+ % get the sort index for the current tick (which is
+ % uniquely identified by its \pgfplots@ticknum)
+ \expandafter\let\expandafter\pgfplots@k\csname pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum\endcsname
+ %
+ \expandafter\pgfplotslistforeachungrouped\csname pgfplots@#1grid@stop@points\endcsname\as\pgfplots@loc@TMPa{%
+ \ifx\pgfplotsretval\pgfutil@empty
+ % we found no final limit so far. proceed.
+ \expandafter\pgfplots@gridlines@stop@at@unpack\pgfplots@loc@TMPa\relax
+ \ifx\pgfplots@grid@stop@at@iflt\pgfutil@empty
+ \pgfplots@loop@CONTINUEtrue
+ \else
+ \pgfplotscoordmath{default}{if less than}{\pgfplots@tick@abs}{\pgfplots@grid@stop@at@iflt}{%
+ \pgfplots@loop@CONTINUEtrue
+ }{%
+ \pgfplots@loop@CONTINUEfalse
+ }%
+ \fi
+ %
+ \ifpgfplots@loop@CONTINUE
+ \pgfplotsmathmodint\pgfplots@k\pgfplots@grid@stop@at@eachnth
+ \ifnum\pgfmathresult=0
+ \c@pgf@counta=\pgfplots@k
+ \divide\c@pgf@counta by\pgfplots@grid@stop@at@eachnth\relax
+ \edef\pgfplots@k{\the\c@pgf@counta}%
+ \else
+ % found the final limit.
+ %
+ % Now, check the constraints which couple
+ % X and Y.
+ \let\pgfplotsretval=\pgfplots@grid@stop@at
+ \if1#4%
+ \pgfplots@get@current@grid@stop@point@handle@constraints #1#2{#3}%
+ \fi
+ \fi
+ \fi
+ \fi
+ }%
+ }%
+ \fi
+ \fi
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \expandafter\let\csname pgfplots@final@stop@point@for@#1tick@\pgfplots@tick@prepared\endcsname=\pgfplotsretval
+%\message{#1 grid line: storing end value for '#3' END[\pgfplots@tick@prepared] = \pgfplotsretval.^^J}%
+ \fi
+}%
+
+% PRECONDITION
+% \pgfplotsretval contains a non-zero constraint for the ygrid at #1.
+%
+% POSTCONDITION
+% either \pgfplotsretval is unchanged, or it is reset to
+% \pgfutil@empty if constraints are violated.
+%
+% The constraints are ONLY effective if BOTH, incomplete x- and y grid
+% lines are in effect. In that case, it should never happen that a
+% single grid line ends in a dead-end somewhere in white space.
+%
+% I enforce two constraints which apply only to ygrid to fix this
+% issue (this may be improved later).
+%
+% The idea is simple:
+% 1. suppose the grid line 'x=1' stops at 'y=5'.
+% Suppose further that the y grid line 'y=0.95' should stop at 'x=1'.
+% Is that acceptable? Yes, because |y| < 5.
+% Now, suppose an y grid line with |y| > 5 should stop at 'x=1'.
+% Is this allowed? NO! Because it would become a dead end since
+% the 'x=1' line ends at 'y=5'!
+%
+% So, whenever we consider ygrids and stop point candidates "x=X",
+% acquire the value Q where the x (!) grid line "x=X" stops.
+% If |y| > Q, the candidate "x=X" is rejected.
+%
+% 2. There might still be the case that x grid lines have dead-ends.
+% The current solution applies the idea first to all y grid lines,
+% and once the y grid lines are ready, it applies the same idea to
+% x grid lines.
+%
+% Uncomment the routine(s) and run the test cases to see what happens.
+\def\pgfplots@get@current@grid@stop@point@handle@constraints#1#2#3{%
+ \ifx\pgfplotsretval\pgfutil@empty
+ \else
+ \pgfplots@gridlines@stopmap@prepare{\pgfplotsretval}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ %
+%\message{checking ending '#1=#3' at '#2=\pgfplotsretval'. '#2=\pgfplots@loc@TMPa' stops}%
+ \pgfutil@ifundefined{pgfplots@final@stop@point@for@#2tick@\pgfplots@loc@TMPa}{%
+ % no constraint. Ok.
+%\message{ nowhere. No constraint.^^J}%
+ }{%
+%\message{ at \pgfplots@loc@TMPa. Feasible: }%
+ % Oh, a constraint. That means
+ % further work.
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@final@stop@point@for@#2tick@\pgfmathresult\endcsname
+ \pgfplotscoordmath{default}{op}{abs}{{#3}}%
+ \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplots@loc@TMPa}{%
+ % ok, we can use the found
+ % stop value.
+%\message{YES.^^J}%
+ }{%
+%\message{NO.^^J}%
+ % no, the stop value is
+ % invalid; it would stop in
+ % white space!
+ \let\pgfplotsretval=\pgfutil@empty
+ }%
+ }%
+ \fi
+}%
+
+% Returns the xtick position which should end the current arc.
+%
+% Note that arcs correspond to ygrid lines.
+%
+% #1 either x or y
+% #2 either x or y
+% #3 the value of the current grid line
+%
+% @POSTCONDITION On output, \pgfplotsretval will be filled with the
+% result. If the result is empty, no restriction is imposed.
+% Otherwise, it contains the #2tick value at which the current #1grid shall end.
+% The result is already processed with
+% \pgfplotscoordmath{default}{parsenumber}{<value>}
+%
+% The method relies on the 'ygrid each nth passes x' feature, more specifically the
+% stuff prepared by \pgfplots@gridlines@init@grid@stop@points@for
+%
+% Note that all work has already been done by
+% \pgfplots@gridlines@init@grid@stop@points@for. We only need to query
+% the result at this point.
+% @see \pgfplots@gridlines@init@grid@stop@points@for
+% @see \pgfplots@gridlines@preparation@get@current@grid@stop@point
+\def\pgfplots@get@current@grid@stop@point#1#2#3{%
+ \def\pgfplotsretval{}%
+ %
+ % check the '#1grid stop at #2':
+ \expandafter\ifx\csname b@pgfplots@#1gridline@stopmap\endcsname\relax%
+ % ok. there is no such thing.
+ \else
+ %
+ \pgfplots@gridlines@stopmap@prepare{#3}%
+ \let\pgfplots@tick@prepared=\pgfmathresult
+ \pgfmathfloatabs@\pgfplots@tick@prepared
+ \let\pgfplots@tick@prepared@abs=\pgfmathresult
+ %
+ % ah - process it!
+ \pgfutil@ifundefined{pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared}{%
+ \let\pgfplotsretval\pgfutil@empty
+ }{%
+ \edef\pgfplotsretval{\csname pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared\endcsname}%
+ }%
+ \fi
+ %
+}%
+
+
+\def\pgfplots@smithchart@draw@xcircle#1{%
+ \pgfplotscoordmath{default}{one}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{parsenumber}{#1}%
+ \let\pgfplots@x=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@loc@TMPa}{\pgfplots@x}}%
+ \let\pgfplots@radius@inverse=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfmathresult}}%
+ \let\pgfplots@radius=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplots@x}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@center=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@radius}%
+ \let\pgfplots@radius=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@radius@inverse}%
+ \let\pgfplots@radius@inverse=\pgfmathresult
+ %
+ % This here would suffice in case 'xgrid each nth passes y={}':
+% \pgfpathellipse
+% {\pgfplotsqpointxy@smithchart@canvas{\pgfplots@center}{0}}
+% {\pgfplotsqpointxy@smithchart@canvas{\pgfplots@radius}{0}}
+% {\pgfplotsqpointxy@smithchart@canvas{0}{\pgfplots@radius}}%
+ %
+ % but we also check for the 'xgrid each nth passes y' feature:
+ \pgfplots@get@current@grid@stop@point xy{\pgfplots@x}%
+ \let\pgfplots@arc@ends@at@y@arc@value\pgfplotsretval%
+ %
+ \ifx\pgfplots@arc@ends@at@y@arc@value\pgfutil@empty
+ % Ok. There is no specific end point -- simply use the
+ % (1,0) point (i.e. draw the full circle).
+ %
+ \pgfmathadd@{\pgfplots@center}{\pgfplots@radius}%
+ \let\pgfplots@start=\pgfmathresult%
+ \def\pgfplots@startim{0}%
+ \def\pgfplots@startangle{0}%
+ \let\pgfplots@end=\pgfplots@start
+ \let\pgfplots@endim=\pgfplots@startim
+ \def\pgfplots@endangle{360}%
+ \else
+ % Ok. The arc should end before it reaches the (1,0)
+ % point. Determine the exact position and the
+ % corresponding arc end angle.
+ %
+ % In general, the intersection between the circle for
+ % fixed x=A and fixed y=B is given by
+ %
+ % p + j * q = (A + j * B -1 ) / ( A + j*B +1)
+ % see http://www.siart.de/lehre/tutorien.xhtml#smishort
+ \pgfplotscoordmath{default}{one}%
+ \let\pgfplots@one=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{-1}%
+ \let\pgfplots@mone=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@x}{\pgfplots@mone}}%
+ \let\pgfplots@A@mone=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@x}{\pgfplots@one}}%
+ \let\pgfplots@A@one=\pgfmathresult
+ % oh - we should only draw a partial arc.
+ % Well, then compute its end point and the
+ % corresponding end angle.
+ \pgfplotscoordmathcomplexdivision
+ {\pgfplots@A@mone}{\pgfplots@arc@ends@at@y@arc@value}%
+ {\pgfplots@A@one}{\pgfplots@arc@ends@at@y@arc@value}%
+ \let\pgfplots@start=\pgfmathresult
+ \let\pgfplots@startim=\pgfmathresultim
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@start}%
+ \let\pgfplots@start=\pgfmathresult
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@startim}%
+ \let\pgfplots@startim=\pgfmathresult
+ %
+ \pgfplots@compute@angle@of@point@in@circle\pgfplots@start\pgfplots@startim{\pgfplots@center}{\pgfplots@radius}{\pgfplots@radius@inverse}%
+ \let\pgfplots@startangle=\pgfmathresult
+ \pgfmathsubtract@{360}{\pgfplots@startangle}%
+ \let\pgfplots@endangle=\pgfmathresult
+ \let\pgfplots@end=\pgfplots@start
+ \edef\pgfplots@endim{-\pgfplots@startim}%
+ \ifdim\pgfplots@startangle pt>\pgfplots@endangle pt
+ \let\pgfplots@loc@TMPa=\pgfplots@startangle
+ \let\pgfplots@startangle=\pgfplots@endangle
+ \let\pgfplots@endangle=\pgfplots@loc@TMPa
+ \fi
+ \fi
+ %
+%\message{X grid line \#\csname pgfplots@ticknum\endcsname \space at '#1': center = (\pgfplots@center,0); radius = \pgfplots@radius\space(start angle \pgfplots@startangle, end angle = \pgfplots@endangle; stops at y = \pgfplots@arc@ends@at@y@arc@value).^^J}%
+ %
+ % Now, compute the arc.
+ %
+ % first, compute the absolute x/y radii:
+ \pgf@xa=\pgfplots@radius\pgf@xx
+ \pgf@xb=\pgfplots@radius\pgf@yy
+ \edef\pgfplots@mirror@sign{\ifpgfplots@smithchart@mirrored -\fi}%
+ \pgfpathmoveto{\pgfplotsqpointxy@smithchart@canvas{\pgfplots@start}{\pgfplots@startim}}%
+ % note that the case startangle > endangle is
+ % automatically correct; patharc handles that.
+ %\edef\pgfplots@loc@TMPa{{\pgfplots@startangle}{\pgfplots@endangle}{\pgfplots@mirror@sign\the\pgf@xa\space and \the\pgf@xb}}%
+ %\expandafter\pgfpatharc\pgfplots@loc@TMPa
+ %
+ % prefer \pgfpatharctoprecomputed. It is faster and more accurate
+ \edef\pgfplots@loc@TMPa{%
+ {\noexpand\pgfplotsqpointxy@smithchart@canvas{\pgfplots@center}{0}}%
+ {\pgfplots@startangle}%
+ {\pgfplots@endangle}%
+ {\noexpand\pgfplotsqpointxy@smithchart@canvas{\pgfplots@end}{\pgfplots@endim}}%
+ {\pgfplots@mirror@sign\the\pgf@xa}%
+ {\the\pgf@xb}%
+ {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioxy}%
+ {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioyx}%
+ }%
+ \expandafter\pgfpatharctoprecomputed\pgfplots@loc@TMPa
+}
+
+\def\pgfplots@smithchart@draw@yarc#1{%
+ \pgfplotscoordmath{default}{parsenumber}{#1}%
+ \let\pgfplots@y\pgfmathresult
+ \pgfplotscoordmath{default}{op}{abs}{{\pgfplots@y}}%
+ \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplots@almost@zero@thresh}{%
+ \pgfpathmoveto{\pgfplotsqpointxy@smithchart@canvas{-1}{0}}%
+ \pgfpathlineto{\pgfplotsqpointxy@smithchart@canvas{1}{0}}%
+ }{%
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplots@y}}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}%
+ \let\pgfplots@signedradius=\pgfmathresult
+ %
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@y}%
+ \ifdim\pgfplots@signedradius pt<0pt
+ \def\pgfplots@radius@sign{-}%
+ \edef\pgfplots@radius@inverse{-\pgfmathresult}%
+ \edef\pgfplots@radius{-\pgfplots@signedradius}%
+ \else
+ \def\pgfplots@radius@sign{}%
+ \edef\pgfplots@radius@inverse{\pgfmathresult}%
+ \let\pgfplots@radius=\pgfplots@signedradius
+ \fi
+ % this here is the correct, complete circle -- together
+ % with a clip path, you get what you want:
+ %\pgfpathellipse
+ % {\pgfplotsqpointxy@smithchart@canvas{1}{\pgfplots@signedradius}}
+ % {\pgfplotsqpointxy@smithchart@canvas{\pgfplots@signedradius}{0}}
+ % {\pgfplotsqpointxy@smithchart@canvas{0}{\pgfplots@signedradius}}%
+ % But I only want the arc (probably stopped earlier to
+ % improve qualtity of the chart)
+ %
+ % compute start point for the arc.
+ %
+ % To do so, we need to compute the intersection between
+ % the circle for fixed x=0 and the circle for y=#1.
+ %
+ % In general, the intersection between the circle for
+ % fixed x=A and fixed y=B is given by
+ %
+ % p + j * q = (A + j * B -1 ) / ( A + j*B +1)
+ % see http://www.siart.de/lehre/tutorien.xhtml#smishort
+ %
+ % inserting A = 0 and B = #1 yields the result
+ % p=\pgfplots@start
+ % q=\pgfplots@startim
+ % as follows:
+ \pgfplotscoordmath{default}{one}%
+ \let\pgfplots@one=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{-1}%
+ \let\pgfplots@mone=\pgfmathresult
+ \pgfplotscoordmathcomplexdivision{\pgfplots@mone}{\pgfplots@y}{\pgfplots@one}{\pgfplots@y}%
+ \let\pgfplots@start=\pgfmathresult
+ \let\pgfplots@startim=\pgfmathresultim
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@start}%
+ \let\pgfplots@start=\pgfmathresult
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@startim}%
+ \let\pgfplots@startim=\pgfmathresult
+ %
+ \pgfplots@compute@angle@of@point@in@circle\pgfplots@start\pgfplots@startim{1}{\pgfplots@signedradius}{\pgfplots@radius@inverse}%
+ \let\pgfplots@startangle=\pgfmathresult
+ %
+ %
+ % compute end angle.
+ \pgfplots@get@current@grid@stop@point yx{\pgfplots@y}%
+ \let\pgfplots@arc@ends@at@x@circle@value\pgfplotsretval%
+ %
+ \ifx\pgfplots@arc@ends@at@x@circle@value\pgfutil@empty
+ % Ok. There is no specific end point -- simply use the
+ % (1,0) point (i.e. draw the full arc).
+ %
+ % The "0 degree" angle in my circles is in the direction
+ % of (1,0) .
+ \ifdim\pgfplots@startim pt>0pt
+ % ok; this arc belongs to the upper hemisphere.
+ \def\pgfplots@endangle{270}%
+ \else
+ % ok; this arc belongs to the lower hemisphere.
+ \def\pgfplots@endangle{90}%
+ \fi
+ \def\pgfplots@end{1}%
+ \def\pgfplots@endim{0}%
+ \else
+ % Ok. The arc should end before it reaches the (1,0)
+ % point. Determine the exact position and the
+ % corresponding arc end angle.
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@arc@ends@at@x@circle@value}{\pgfplots@mone}}%
+ \let\pgfplots@A@mone=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{add}{{\pgfplots@arc@ends@at@x@circle@value}{\pgfplots@one}}%
+ \let\pgfplots@A@one=\pgfmathresult
+ % oh - we should only draw a partial arc.
+ % Well, then compute its end point and the
+ % corresponding end angle.
+ \pgfplotscoordmathcomplexdivision{\pgfplots@A@mone}{\pgfplots@y}{\pgfplots@A@one}{\pgfplots@y}%
+ \let\pgfplots@end=\pgfmathresult
+ \let\pgfplots@endim=\pgfmathresultim
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@end}%
+ \let\pgfplots@end=\pgfmathresult
+ \pgfplotscoordmath{default}{tofixed}{\pgfplots@endim}%
+ \let\pgfplots@endim=\pgfmathresult
+ %
+ \pgfplots@compute@angle@of@point@in@circle\pgfplots@end\pgfplots@endim{1}{\pgfplots@signedradius}{\pgfplots@radius@inverse}%
+ \let\pgfplots@endangle=\pgfmathresult
+ \fi
+ %
+ %
+ %
+ % Now, compute the arc.
+ %
+ % first, compute the absolute x/y radii:
+ %
+ % Note that for small y (like y=0.01), the arc is almost a
+ % straight line. Consequently, the ellipsis radius will be much larger
+ % than 16000, violating TeX's number range.
+ %
+ % To avoid that, I clip it to the highest allowed value.
+ % The final radius is
+ % \pgfplots@radius * \pgf@xx and \pgfplots@radius * \pgf@yy.
+ % the clipped value thus needs to respect the magnitude of \pgf@xx and \pgf@yy.
+ \ifdim\pgfplots@radius pt<\pgfplots@smithchart@axis@max@xradius@for@ycircle pt
+ \let\pgfplots@radius@x\pgfplots@radius
+ \else
+ \let\pgfplots@radius@x=\pgfplots@smithchart@axis@max@xradius@for@ycircle
+ \fi
+ \ifdim\pgfplots@radius pt<\pgfplots@smithchart@axis@max@yradius@for@ycircle pt
+ \let\pgfplots@radius@y\pgfplots@radius
+ \else
+ \let\pgfplots@radius@y=\pgfplots@smithchart@axis@max@yradius@for@ycircle
+ \fi
+%\message{Y grid line \#\csname pgfplots@ticknum\endcsname\space at '#1': center = (1,\pgfplots@signedradius); signedradius = \pgfplots@signedradius\space clipped radii = \pgfplots@radius@x*\the\pgf@xx\space and \pgfplots@radius@y*\the\pgf@yy\space ( start angle \pgfplots@startangle, end angle \pgfplots@endangle, arc limit: \ifx\pgfplots@arc@ends@at@x@circle@value\pgfutil@empty NONE\else \pgfplots@arc@ends@at@x@circle@value\fi)^^J}%
+ \pgf@xa=\pgfplots@radius@x\pgf@xx
+ \pgf@xb=\pgfplots@radius@y\pgf@yy
+ \edef\pgfplots@mirror@sign{\ifpgfplots@smithchart@mirrored -\fi}%
+ \pgfpathmoveto{\pgfplotsqpointxy@smithchart@canvas{\pgfplots@start}{\pgfplots@startim}}%
+ % note that the case startangle > endangle is
+ % automatically correct; patharc handles that.
+ %\edef\pgfplots@loc@TMPa{{\pgfplots@startangle}{\pgfplots@endangle}{\pgfplots@mirror@sign\the\pgf@xa\space and \the\pgf@xb}}%
+ %\expandafter\pgfpatharc\pgfplots@loc@TMPa
+ %
+ % prefer \pgfpatharctoprecomputed. It is faster and more accurate
+ \ifdim\pgfplots@startangle pt>\pgfplots@endangle pt
+ \let\pgfplots@loc@TMPa=\pgfplots@startangle
+% \let\pgfplots@startangle=\pgfplots@endangle
+% \let\pgfplots@endangle=\pgfplots@loc@TMPa
+ \fi
+ \edef\pgfplots@loc@TMPa{%
+ {\noexpand\pgfplotsqpointxy@smithchart@canvas{1}{\pgfplots@radius@sign\pgfplots@radius@y}}%
+ {\pgfplots@startangle}%
+ {\pgfplots@endangle}%
+ {\noexpand\pgfplotsqpointxy@smithchart@canvas{\pgfplots@end}{\pgfplots@endim}}%
+ {\pgfplots@mirror@sign\the\pgf@xa}%
+ {\the\pgf@xb}%
+ {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioxy}%
+ {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioyx}%
+ }%
+ \expandafter\pgfpatharctoprecomputed\pgfplots@loc@TMPa
+ }%
+}
+
+\def\pgfplots@drawgridlines@onorientedsurf@fromto@smithchart#1{%
+ \if x\pgfplotspointonorientedsurfaceA
+ \pgfplots@smithchart@draw@xcircle{#1}%
+ \else
+ \pgfplots@smithchart@draw@yarc{#1}%
+ \fi
+}%
+
+% Given a circle with center point (#3,#4), we search for the angle
+% of the point (#1,#2). The point is expected to be on the circle.
+% The resulting angle is returned in \pgfmathresult
+%
+% #1 x coordinate of the point for which an angle is searched
+% #2 y coordinate of the point for which an angle is searched
+% #3 x coordinate of the circle's center point
+% #4 y coordinate of the circle's center point
+% #5 is either empty or it is expected to contain the inverse radius, 1/r
+% this information is available in my context, so I don't recompute
+% it.
+%
+% All coordinates are expected in standard TeX precision (numbers
+% without unit)
+\def\pgfplots@compute@angle@of@point@in@circle#1#2#3#4#5{%
+ %
+ % 1. compute diff vector from center=(1,\pgfplots@signedradius) to start:
+ \pgfmathsubtract@{#1}{#3}%
+ \let\pgfplots@D\pgfmathresult
+ \pgfmathsubtract@{#2}{#4}%
+ \let\pgfplots@Dim\pgfmathresult
+ %
+ % 2. compute the start angle.
+ % It is related to the angle between the point (1,0) and
+ % diff, which, in turn is given by
+ % < (1,0), (D,Dim) > = cos(alpha) ||(D,Dim)||
+ % < (1,0), (D,Dim) > = D
+ %
+ % Note that ||(D,Dim)|| = r, the radius of the involved circle
+ % around (#3,#4). If 1/r is already available, use it! Saves a lot
+ % of time.
+ %
+ \def\pgfplots@loc@TMPa{#5}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfmathveclen\pgfplots@D\pgfplots@Dim
+ \let\pgfplots@veclen=\pgfmathresult
+ \pgfmathreciprocal@\pgfplots@veclen
+ \let\pgfplots@inverseveclen=\pgfmathresult
+ \else
+ % oh, good -- we already have 1/||(D,Dim)||. Use it.
+ \def\pgfplots@inverseveclen{#5}%
+%\message{using already available inverseveclen '#5' }%
+ \fi
+ \pgfmathmultiply@{\pgfplots@D}{\pgfplots@inverseveclen}%
+%\message{D= (\pgfplots@D,\pgfplots@Dim).. acos(\pgfplots@D * \pgfplots@inverseveclen) = acos(\pgfmathresult)}%
+ \pgfmathacos@{\pgfmathresult}% the '-' comes from D<0 .
+%\message{= \pgfmathresult^^J}%
+ \let\pgfplots@tmpangle\pgfmathresult%
+ % ok. tmpangle is per definition less than 180; it is the
+ % smaller angle between (1,0) and (D,Dim).
+ %
+ % compute the angle relative to (1,0):
+ \ifdim\pgfplots@Dim pt<0pt
+ \pgfmathiftrigonometricusesdeg{%
+ \pgfmathsubtract@{360}{\pgfplots@tmpangle}%
+ }{%
+ \pgfmathsubtract@{6.28318530717959}{\pgfplots@tmpangle}%
+ }%
+ \fi
+}%
+
+\def\pgfplots@drawaxis@innerlines@onorientedsurf@smithchart#1#2#3{%
+ \if2\csname pgfplots@#1axislinesnum\endcsname
+ \draw[/pgfplots/every inner #1 axis line,%
+ decorate,%
+ #1discont,%
+ decoration={pre length=\csname #1disstart\endcsname, post length=\csname #1disend\endcsname}]
+ \pgfextra
+ \csname pgfplotspointonorientedsurfaceabsetupforset#3\endcsname{\csname pgfplots@logical@ZERO@#3\endcsname}{2}%
+ \if#1x%
+ \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}%
+ \pgfplots@drawgridlines@onorientedsurf@fromto{0}%
+ \else
+ \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1min\endcsname}{\csname pgfplots@logical@ZERO@#2\endcsname}}%
+ \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1max\endcsname}{\csname pgfplots@logical@ZERO@#2\endcsname}}%
+ \fi
+ \endpgfextra
+ ;
+ \fi
+}%
+\def\pgfplots@drawaxis@outerlines@separate@onorientedsurf@smithchartaxis#1#2{%
+ \if2\csname pgfplots@#1axislinesnum\endcsname
+ % centered axis lines handled elsewhere.
+ \else
+ \scope[/pgfplots/every outer #1 axis line,
+ #1discont,decoration={pre length=\csname #1disstart\endcsname, post length=\csname #1disend\endcsname}]
+ \if#1x
+ \draw decorate {
+ \pgfextra
+ % exchange roles of A <-> B axes:
+ \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}%
+ \pgfplots@drawgridlines@onorientedsurf@fromto{0}%
+ \endpgfextra
+ };
+ \else
+ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{0}{%
+ \draw decorate {
+ \pgfextra
+ % exchange roles of A <-> B axes:
+ \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}%
+ \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2min\endcsname}%
+ \endpgfextra
+ };
+ }{}%
+ %--------------------------------------------------
+ % \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{1}{%
+ % \draw decorate {
+ % \pgfextra
+ % % exchange roles of A <-> B axes:
+ % \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}%
+ % \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2max\endcsname}%
+ % \endpgfextra
+ % };
+ % }{}%
+ %--------------------------------------------------
+ \fi
+ \endscope
+ \fi
+}%
+
+\def\pgfplots@BB@for@plotbox@get@unit@scales@for@limits@smithchart#1#2#3{%
+ % In a smith chart, the size of the image is unrelated to the
+ % involved data limits.
+ %
+ % The factor 2 is because we want to fit the DIAMETER into the
+ % prescribed dimensions, not just the radius.
+ \def\pgfmathresult{2}%
+ \let#1=\pgfmathresult
+ \let#2=\pgfmathresult
+ \def#3{1}%
+}%
+
+\def\pgfplots@handle@invalid@range@defaultlimits@smithchart{%
+ \pgfplotscoordmath{x}{parsenumber}{0}%
+ \global\let\pgfplots@xmin=\pgfmathresult
+ \pgfplotscoordmath{x}{parsenumber}{16000}%
+ \global\let\pgfplots@xmax=\pgfmathresult
+ \global\let\pgfplots@data@xmin=\pgfplots@xmin
+ \global\let\pgfplots@data@xmax=\pgfplots@xmax
+ %
+ \pgfplotscoordmath{y}{parsenumber}{0}%
+ \global\let\pgfplots@ymin=\pgfmathresult
+ \pgfplotscoordmath{y}{parsenumber}{16000}%
+ \global\let\pgfplots@ymax=\pgfmathresult
+ \global\let\pgfplots@data@ymin=\pgfplots@ymin
+ \global\let\pgfplots@data@ymax=\pgfplots@ymax
+ \pgfplotsset{enlargelimits=false}%
+}
+
+\let\pgfplots@set@default@size@options@standard=\pgfplots@set@default@size@options
+\def\pgfplots@set@default@size@options@smithchart{%
+ \pgfplots@set@default@size@options@standard
+ \pgfplotsset{smithchart ticks by size={\pgfkeysvalueof{/pgfplots/width}}{\pgfkeysvalueof{/pgfplots/height}}}%
+ %
+ \if1\b@pgfplots@smithchart@defaultticks@x
+ \if1\b@pgfplots@smithchart@defaultticks@y
+ \pgfplotsset{default smithchart xytick}%
+ \fi
+ \fi
+}
+\def\pgfplots@assign@default@tick@foraxis@smithchart#1{%
+ % do nothing here. I don't know the algorithm yet... but for
+ % smithcharts, it may be sufficient to simply predefine several
+ % sets of ticks, depending on the final size.
+ %
+ % This is realized in
+ % \pgfplots@set@default@size@options@smithchart (which is invoked
+ % before the ticks are processed).
+ \pgfplots@determinedefaultvalues@needs@check@uniformtickfalse
+ \expandafter\let\csname pgfplots@tick@distance@#1\endcsname=\pgfutil@empty
+ %
+ \pgfplotsset{default smithchart #1tick}%
+ % ok, I expect the '#1tick' key to be set now. Process it.
+ % Note that the earlier processing of pgfplots has been bypassed
+ % at this point -- we need to preprocess the tick list *here*:
+ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tick\endcsname
+ \expandafter\pgfplots@assign@default@tick@foraxis@smithchart@\expandafter{\pgfplots@loc@TMPa}%
+ \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplotsretval
+ %
+ \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \expandafter\pgfplots@assign@default@tick@foraxis@smithchart@\expandafter{\pgfplots@loc@TMPa}%
+ \pgfkeyslet{/pgfplots/minor #1tick}\pgfplotsretval
+ \fi
+ %
+}%
+% #1: a \foreach list
+% on output, \pgfplotsretval contains a parsed list of positions
+\def\pgfplots@assign@default@tick@foraxis@smithchart@#1{%
+ \pgfplotsapplistXXglobalnewempty
+ \gdef\pgfplots@loc@TMPd{1}%
+ \foreach \pgfplots@loc@TMPb in {#1} {%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty
+ \else
+ \pgfplotscoordmath{default}{parsenumber}{\pgfplots@loc@TMPb}%
+ \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% per convention...
+ \edef\pgfmathresult{\if0\pgfplots@loc@TMPd,\fi\pgfmathresult}%
+ \gdef\pgfplots@loc@TMPd{0}%
+ \expandafter\pgfplotsapplistXXglobalpushback\expandafter{\pgfmathresult}%
+ \fi
+ }%
+ \pgfplotsapplistXXgloballet\pgfplotsretval
+ \pgfplotsapplistXXglobalclear
+}%
+
+\let\pgfplots@show@ticklabel@@orig=\pgfplots@show@ticklabel@
+\def\pgfplots@show@ticklabel@@smithchart#1#2{%
+ \def\pgfmathresult{#2}%
+ \if#1x%
+ \ifdim#2pt>360pt
+ \pgfmath@basic@mod@{#2}{360}%
+ \fi
+ \fi
+ \def\pgfplots@loc@TMPa{\pgfplots@show@ticklabel@@orig{#1}}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}%
+}%
+
+\def\pgfplots@xtick@check@tickshow@smithchart{%
+ \pgfplots@tickshowtrue
+}
+\def\pgfplots@ytick@check@tickshow@smithchart{%
+ \pgfplots@tickshowtrue
+}
+
+\let\pgfplots@limits@ready@orig=\pgfplots@limits@ready
+\def\pgfplots@limits@ready@smithchart{%
+ \pgfplots@limits@ready@orig
+ %
+ % Avoid tick labels at upper *and* lower angle range if both are the
+ % same:
+ \pgfmath@basic@sin@{\pgfplots@xmin}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfmath@basic@sin@{\pgfplots@xmax}%
+ \pgfplotsmath@ifapproxequal@dim
+ {\pgfmathresult pt}{\pgfplots@loc@TMPa pt}%
+ {0.002pt}
+ {%
+ \def\pgfplots@xtick@disable@last@tick{1}%
+ }{%
+ }%
+}%
+
+\def\smithchart{\smithchartaxis}
+\def\endsmithchart{\endsmithchartaxis}
+
+\def\startsmithchart{\smithchart}%
+\def\stopsmithchart{\endsmithchart}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.statistics.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.statistics.code.tex
new file mode 100644
index 0000000000..3931d85dae
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.statistics.code.tex
@@ -0,0 +1,1221 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for statistical plots (boxplots in the first version)
+%
+% Copyright 2007-2012 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\catcode`\;=12
+\catcode`\"=12
+\newif\ifpgfplotsplothandlerboxplot@variable@width
+
+\ifpgfplots@LUA@supported
+ \pgfplotsutil@directlua{require("pgfplots.statistics")}%
+\fi
+
+\newif\ifpgfplots@boxplot@ensure@plot@mark
+\def\pgfplots@boxplot@ensure@plot@mark{%
+ \ifpgfplots@boxplot@ensure@plot@mark
+ \pgfplots@if@has@plot@marks{}{%
+ \tikzset{mark=*}%
+ }%
+ \fi
+}%
+
+\pgfplotsset{
+ boxplot/.code={%
+ \def\tikz@plot@handler{\pgfplotsplothandlerboxplot}%
+ \pgfplotsset{%
+ /pgfplots/every boxplot,
+ /pgfplots/boxplot/.cd,%
+ #1%
+ }%
+ \pgfplots@boxplot@ensure@plot@mark
+ },
+ boxplot prepared/.code={%
+ \def\tikz@plot@handler{\pgfplotsplothandlerboxplotprepared}%
+ \pgfplotsset{%
+ /pgfplots/every boxplot,
+ /pgfplots/boxplot/.cd,%
+ #1%
+ }%
+ \pgfplots@boxplot@ensure@plot@mark
+ },
+ boxplot/data value/.code =\pgfplots@set@source@for{boxplot/data}{#1}{0},%
+ boxplot/data/.code =\pgfplots@set@source@for{boxplot/data}{#1}{1},%
+ boxplot/data filter/.code=,
+ boxplot/data value=\pgfkeysvalueof{/data point/y},
+ %
+ every boxplot/.style={%
+ },
+ %
+ % 'auto' means "if possible".
+ % For boxplot prepared, this is equivalent to "disabled" (empty value).
+ % For boxplot, it means "compute it".
+ % Empty value means disabled.
+ boxplot/median/.initial=auto,
+ boxplot/lower quartile/.initial=auto,
+ boxplot/upper quartile/.initial=auto,
+ boxplot/lower whisker/.initial=auto,
+ boxplot/upper whisker/.initial=auto,
+ boxplot/average/.initial=,
+ %
+ % mainly used for compatibility.
+ boxplot/ensure mark/.is if=pgfplots@boxplot@ensure@plot@mark,
+ %
+ boxplot/estimator/.is choice,
+ boxplot/estimator/legacy/.code={\def\pgfplots@boxplot@estimator{legacy}},
+ %
+ boxplot/estimator/legacy*/.code={\def\pgfplots@boxplot@estimator{legacy*}},
+ boxplot/estimator/R1/.code={\def\pgfplots@boxplot@estimator{R1}},
+ boxplot/estimator/SAS3/.code={\def\pgfplots@boxplot@estimator{R1}},
+ boxplot/estimator/Maple1/.code={\def\pgfplots@boxplot@estimator{R1}},
+ %
+ boxplot/estimator/R2/.code={\def\pgfplots@boxplot@estimator{R2}},
+ boxplot/estimator/SAS5/.code={\def\pgfplots@boxplot@estimator{R2}},
+ boxplot/estimator/Maple2/.code={\def\pgfplots@boxplot@estimator{R2}},
+ %
+ boxplot/estimator/R3/.code={\def\pgfplots@boxplot@estimator{R3}},
+ boxplot/estimator/SAS2/.code={\def\pgfplots@boxplot@estimator{R3}},
+ %
+ boxplot/estimator/R4/.code={\def\pgfplots@boxplot@estimator{R4}},
+ boxplot/estimator/SAS1/.code={\def\pgfplots@boxplot@estimator{R4}},
+ boxplot/estimator/SciPy0-1/.code={\def\pgfplots@boxplot@estimator{R4}},
+ boxplot/estimator/Maple3/.code={\def\pgfplots@boxplot@estimator{R4}},
+ %
+ boxplot/estimator/R5/.code={\def\pgfplots@boxplot@estimator{R5}},
+ boxplot/estimator/SciPy12-12/.code={\def\pgfplots@boxplot@estimator{R5}},
+ boxplot/estimator/Maple4/.code={\def\pgfplots@boxplot@estimator{R5}},
+ %
+ boxplot/estimator/R6/.code={\def\pgfplots@boxplot@estimator{R6}},
+ boxplot/estimator/SAS4/.code={\def\pgfplots@boxplot@estimator{R6}},
+ boxplot/estimator/SciPy0-0/.code={\def\pgfplots@boxplot@estimator{R6}},
+ boxplot/estimator/Maple5/.code={\def\pgfplots@boxplot@estimator{R6}},
+ %
+ boxplot/estimator/R7/.code={\def\pgfplots@boxplot@estimator{R7}},
+ boxplot/estimator/Excel/.code={\def\pgfplots@boxplot@estimator{R7}},
+ boxplot/estimator/SciPy1-1/.code={\def\pgfplots@boxplot@estimator{R7}},
+ boxplot/estimator/Maple6/.code={\def\pgfplots@boxplot@estimator{R7}},
+ %
+ boxplot/estimator/R8/.code={\def\pgfplots@boxplot@estimator{R8}},
+ boxplot/estimator/SciPy13-13/.code={\def\pgfplots@boxplot@estimator{R8}},
+ boxplot/estimator/Maple7/.code={\def\pgfplots@boxplot@estimator{R8}},
+ %
+ boxplot/estimator/R9/.code={\def\pgfplots@boxplot@estimator{R9}},
+ boxplot/estimator/SciPy38-38/.code={\def\pgfplots@boxplot@estimator{R9}},
+ boxplot/estimator/Maple8/.code={\def\pgfplots@boxplot@estimator{R9}},
+ %
+ boxplot/estimator=legacy,
+ %
+ boxplot/lower quartile off/.initial=0.25,
+ boxplot/upper quartile off/.initial=0.75,
+ boxplot/whisker range/.initial=1.5,
+ %
+ %
+ % the size of whisker lines in axis units.
+ % The default is to make it relative to 'box extend'
+ boxplot/whisker extend/.initial=\pgfkeysvalueof{/pgfplots/boxplot/box extend}*0.8,
+ %
+ % the size of the box in axis units. Note that this has been
+ % chosen to fit the initial 'draw position':
+ boxplot/box extend/.initial=0.8,
+ % draw direction=x|y
+ boxplot/draw direction/.initial=x,
+ %
+ % Activates "dynamic size" feature
+ boxplot/variable width/.is if=pgfplotsplothandlerboxplot@variable@width,
+ boxplot/variable width/.default=true,
+ %
+ boxplot/sample size/.initial=auto,
+ %
+ % a transformation which is applied to anything related to
+ % sample size.
+ boxplot/variable width expr/.code=\pgfmathparse{sqrt(#1)},
+ %
+ % will be computed automatically if needed. If it is present, it
+ % will not contribute to the axis-wide limit unless it has been
+ % given axis-wide.
+ boxplot/sample size min/.initial=,
+ boxplot/sample size max/.initial=,
+ %
+ % this factor times 'box extend' is the size for
+ % 'sample size min'. The max value gets 'box extend'.
+ boxplot/variable width min target/.initial=0.2,
+ %
+ %
+ % defines where how the "free" position is chosen. The idea is to
+ % place one box at each "y" position and to number these
+ % 1,2,3,4,... . This should probably simplify tick (label) generation.
+ boxplot/draw position/.initial=1+\plotnumofactualtype,
+ %
+ % draw relative anchor=0:
+ % | |---| |
+ % | | | |
+ % |----|---|--|
+ %
+ % draw relative anchor=0.5:
+ % | |---| |
+ % |----| |--|
+ % | |---| |
+ %
+ % draw relative anchor=1:
+ % |----|---|--|
+ % | | | |
+ % | |---| |
+ boxplot/draw relative anchor/.initial=0.5,
+ %
+ boxplot/every whisker/.style={%
+ },
+ boxplot/every box/.style={%
+ },
+ boxplot/every median/.style={%
+ },
+ boxplot/every average/.style={%
+ /tikz/mark=diamond*,
+ },
+ boxplot/draw/lower whisker/.style={%
+ /pgfplots/boxplot/draw/whisker=%
+ {\pgfplotsboxplotvalue{lower quartile}}
+ {\pgfplotsboxplotvalue{lower whisker}}
+ },
+ boxplot/draw/upper whisker/.style={%
+ /pgfplots/boxplot/draw/whisker=%
+ {\pgfplotsboxplotvalue{upper quartile}}
+ {\pgfplotsboxplotvalue{upper whisker}}%
+ },
+ boxplot/draw/whisker/.code 2 args={%
+ \draw[/pgfplots/boxplot/every whisker/.try]
+ (boxplot cs:#1) -- (boxplot cs:#2)
+ (boxplot whisker cs:#2,0)
+ --
+ (boxplot whisker cs:#2,1)
+ ;
+ },%
+ %
+ boxplot/draw/box/.code={%
+ \draw[/pgfplots/boxplot/every box/.try]
+ (boxplot box cs:\pgfplotsboxplotvalue{lower quartile},0)
+ rectangle
+ (boxplot box cs:\pgfplotsboxplotvalue{upper quartile},1)
+ ;
+ },%
+ %
+ boxplot/draw/average/.code={%
+ \draw[/pgfplots/boxplot/every average/.try]
+ \pgfextra
+ % do NOT use \draw[mark=*] plot coordinates because
+ % boxplots uses the same plot handler to draw its
+ % outliers.
+ \pgftransformshift{%
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{average}}
+ {0.5}%
+ }%
+ \pgfuseplotmark{\tikz@plot@mark}%
+ \endpgfextra
+ ;
+ },
+ %
+ boxplot/draw/median/.code={%
+ \draw[/pgfplots/boxplot/every median/.try]
+ (boxplot box cs:\pgfplotsboxplotvalue{median},0)
+ --
+ (boxplot box cs:\pgfplotsboxplotvalue{median},1)
+ ;
+ },%
+}
+
+
+\def\pgfplotsplothandlerboxplot{%
+ \pgfplotsresetplothandler
+ \def\pgf@plotstreamstart{%
+ \pgfplotsset{/pgfplots/boxplot prepared}%
+ \pgfplotsresetplothandler
+ \tikz@plot@handler
+ \pgf@plotstreamstart
+ }%
+ \def\pgfplotsplothandlername{boxplot}%
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@boxplot
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@boxplot
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@boxplot
+ \def\pgfplotsplothandlerLUAfactory{%
+ function(axis, pointmetainputhandler)
+ return pgfplots.BoxPlotPlothandler.new(
+ pgfplots.BoxPlotRequest.new(
+ "\pgfkeysvalueof{/pgfplots/boxplot/lower quartile off}",
+ "\pgfkeysvalueof{/pgfplots/boxplot/upper quartile off}",
+ "\pgfkeysvalueof{/pgfplots/boxplot/whisker range}",
+ pgfplots.getPercentileEstimator("\pgfplots@boxplot@estimator")),
+ "\pgfkeysvalueof{/pgfplots/boxplot/draw direction}",
+ "\pgfkeysvalueof{/pgfplots/boxplot/draw position}",
+ axis, pointmetainputhandler)
+ end
+ }%
+}
+
+
+\def\pgfplotsplothandlersurveystart@boxplot{%
+ \pgfplots@prepare@source@parser@for{boxplot/}{data}{\pgfplotsplothandlerboxplot@parse}%
+ %
+ \pgfplotscoordmath{float}{zero}%
+ \let\pgfplotsplothandlerboxplot@sum=\pgfmathresult
+ %
+ \pgfplotscoordmath{float}{min limit}%
+ \let\pgfplotsplothandlerboxplot@last=\pgfmathresult
+ %
+ \def\b@pgfplotsplothandlerboxplot@issorted{1}%
+ %
+ \pgfplotsarraynewempty\pgfp@boxplot@@
+ \def\c@pgfplotsplothandlerboxplot@num{0}%
+ \c@pgfplots@coordindex=0
+}%
+
+\def\pgfplotsplothandlersurveyend@boxplot{%
+ \pgfplots@curplot@threedimfalse
+ %
+ \ifpgfplots@LUA@backend@supported
+ \else
+ \if0\b@pgfplotsplothandlerboxplot@issorted
+ \pgfplotsplothandlersurveyend@boxplot@sort
+ \fi
+ \fi
+ %
+ %
+ \edef\numcoords{\pgfplots@current@point@coordindex}%
+ %
+ %%
+ \pgfplotsset{%
+ /pgfplots/boxplot prepared={%
+ data value=\pgfplots@current@point@data,
+ },%
+ }%
+ \pgfplotsresetplothandler
+ %
+ \let\pgfplotsplothandlerboxplotprepared@normalize@values@@=\pgfplotsplothandlerboxplotprepared@normalize@values
+ \def\pgfplotsplothandlerboxplotprepared@normalize@values{\relax}%
+ %
+ \tikz@plot@handler
+ %
+ \pgfplotsplothandlersurveystart
+ %
+ \ifpgfplots@LUA@backend@supported
+ \else
+ % this will report outliers as point stream:
+ \pgfplotsplothandlersurveyend@boxplot@computestats
+ \fi
+ %
+ \let\pgfplotsplothandlerboxplotprepared@normalize@values=\pgfplotsplothandlerboxplotprepared@normalize@values@@
+ \pgfplotsplothandlerboxplotprepared@normalize@values
+ %
+ %
+ \pgfplotsplothandlersurveyend
+}%
+
+\def\pgfplotsplothandlersurveyend@boxplot@sort{%
+ \pgfkeys{/pgfplots/float <}%
+ \pgfplotsarraysort{\pgfp@boxplot@@}%
+}%
+
+\def\pgfplots@boxplot@fillarray{%
+ \def\pgfplots@loc@TMPa{\pgfplotsarrayset\c@pgfplots@coordindex\of{P}\to}%
+ \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@current@point@data}%
+}
+
+%%%%
+
+\def\pgfplotsplothandler@boxplot@init@percentile@estimator{%
+ \def\pgfplots@loc@TMPb{legacy}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@boxplot@estimator
+ \let\pgfplotsplothandler@boxplot@percentile@estimator@=\pgfplotsplothandler@boxplot@percentile@estimator@legacy
+ \else
+ \def\pgfplots@loc@TMPb{legacy*}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@boxplot@estimator
+ \let\pgfplotsplothandler@boxplot@percentile@estimator@=\pgfplotsplothandler@boxplot@percentile@estimator@legacy@bad
+ \else
+ % first, strip 'R' and store the integer number into \pgfplotsretval:
+ \def\pgfplots@loc@TMPb##1##2{%
+ \def\pgfplotsretval{##2}%
+ }%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@boxplot@estimator
+ \ifcase\pgfplotsretval\relax
+ % 0:
+ \pgfplots@error{illegal argument 'estimator=\pgfplots@boxplot@estimator' encountered.}%
+ \or
+ % R1:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{##1*##2}%
+ \let\h=\pgfmathresult
+ \pgfmathparse{ceil(\h)}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\offset@low=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@low}{##2}%
+ }
+ % FIXME : implement 'ceil' in the FPU!
+ \pgfplots@error{The argument 'estimator=\pgfplots@boxplot@estimator' is only available in conjunction with 'lua backend' and lualatex.}%
+ \or
+ % R2:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{##1*##2 + 0.5}%
+ \let\h=\pgfmathresult
+ %
+ \pgfmathparse{ceil(\h-0.5)}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\offset@low=\pgfmathresult
+ %
+ \pgfmathparse{floor(\h+0.5)}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\offset@high=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@low}{##2}%
+ \let\x@low=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@high}{##2}%
+ \let\x@high=\pgfmathresult
+ \pgfmathparse{0.5*(\x@low + \x@high)}%
+ }
+ % FIXME : implement 'ceil' in the FPU!
+ \pgfplots@error{The argument 'estimator=\pgfplots@boxplot@estimator' is only available in conjunction with 'lua backend' and lualatex.}%
+ \or
+ % R3:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{##1*##2}%
+ \let\h=\pgfmathresult
+ \pgfmathparse{round(\h)}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\offset@low=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@low}{##2}%
+ }
+ \or
+ % R4:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{##1*##2}%
+ \let\h=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@std@lookup{##2}%
+ }
+ \or
+ % R5:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{##1*##2 + 0.5}%
+ \let\h=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@std@lookup{##2}%
+ }
+ \or
+ % R6:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{##1*(##2+1)}%
+ \let\h=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@std@lookup{##2}%
+ }
+ \or
+ % R7:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{(##2-1) * ##1 + 1}%
+ \let\h=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@std@lookup{##2}%
+ }
+ \or
+ % R8:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{(##2 + 1/3) * ##1 + 1/3}%
+ \let\h=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@std@lookup{##2}%
+ }
+ \or
+ % R9:
+ \def\pgfplotsplothandler@boxplot@percentile@estimator@##1##2{%
+ \pgfmathparse{(##2 + 1/4) * ##1 + 3/8}%
+ \let\h=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@std@lookup{##2}%
+ }
+ \else
+ \pgfplots@error{illegal argument 'estimator=\pgfplots@boxplot@estimator' encountered.}%
+ \fi
+ \fi
+ \fi
+}%
+
+% #1: the percentile in question (like 0.5 for the median)
+% #2: the number of data points in the array \pgfp@boxplot@@
+% POSTCONDITION: \pgfmathresult contains the result.
+\def\pgfplotsplothandler@boxplot@percentile@estimator#1#2{%
+ \begingroup
+ \pgfkeys{/pgf/fpu}%
+ \pgfplotsplothandler@boxplot@percentile@estimator@{#1}{#2}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}%
+
+% #1: the index
+% #2: the number of data points in the array \pgfp@boxplot@@
+%
+% POSTCONDITION: \pgfmathresult contains the result.
+\def\pgfplotsplothandler@boxplot@percentile@estimator@getIndex#1#2{%
+ \c@pgf@countd=#1\relax
+ \advance\c@pgf@countd by-1 % we have 0-based indices
+ \ifnum\c@pgf@countd<0 \c@pgf@countd=0 \fi
+ \ifnum\c@pgf@countd<#2\relax \else \c@pgf@countd=#2\relax \advance\c@pgf@countd by-1 \fi
+ \pgfplotsarrayselect\c@pgf@countd\of\pgfp@boxplot@@\to\pgfmathresult
+}%
+
+% #1: the index
+% #2: the number of data points in the array \pgfp@boxplot@@
+%
+% POSTCONDITION: \pgfmathresult contains the result.
+\def\pgfplotsplothandler@boxplot@percentile@estimator@getIndex@legacy@bad#1#2{%
+ \c@pgf@countd=#1\relax
+ %\advance\c@pgf@countd by-1 % we have 0-based indices
+ \ifnum\c@pgf@countd<0 \c@pgf@countd=0 \fi
+ \ifnum\c@pgf@countd<#2\relax \else \c@pgf@countd=#2\relax \advance\c@pgf@countd by-1 \fi
+ \pgfplotsarrayselect\c@pgf@countd\of\pgfp@boxplot@@\to\pgfmathresult
+}%
+
+\def\pgfplotsplothandler@boxplot@percentile@estimator@#1#2{%
+ \pgfplots@error{The estimator is uninitialized in this context. Call \string\pgfplotsplothandler@boxplot@init@percentile@estimator\space first.}%
+}
+
+% computes x_low + (h - h_low) * (x_up - x_low)
+% #1: the number of data points in the array \pgfp@boxplot@@
+\def\pgfplotsplothandler@boxplot@percentile@estimator@std@lookup#1{%
+ \pgfmathparse{floor(\h)}%
+ \let\h@low=\pgfmathresult
+ \pgfmathfloattoint\pgfmathresult
+ \let\offset@low=\pgfmathresult
+ \c@pgf@countd=\offset@low\relax
+ \advance\c@pgf@countd by1 %
+ \edef\offset@high{\the\c@pgf@countd}%
+ %
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@low}{#1}%
+ \let\x@low=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@high}{#1}%
+ \let\x@high=\pgfmathresult
+ \pgfmathparse{\x@low + (\h - \h@low) * (\x@high - \x@low)}%
+}%
+
+% implements 'estimator=legacy'
+\def\pgfplotsplothandler@boxplot@percentile@estimator@legacy#1#2{%
+ \pgfmathparse{#1*#2}%
+ \let\h=\pgfmathresult
+ \pgfmathparse{floor(\h)}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\offset@low=\pgfmathresult
+ %
+ \pgfmathparse{\h > \offset@low}%
+ \ifpgfmathfloatcomparison
+ \def\b@is@int{0}%
+ \else
+ \def\b@is@int{1}%
+ \fi
+ %
+ \c@pgf@countd=\offset@low\relax
+ \advance\c@pgf@countd by1 %
+ \edef\offset@high{\the\c@pgf@countd}%
+ %
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@low}{#2}%
+ \if0\b@is@int
+ \let\temp=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex{\offset@high}{#2}%
+ \pgfmathparse{0.5*(\temp + \pgfmathresult)}%
+ \fi
+}
+\def\pgfplotsplothandler@boxplot@percentile@estimator@legacy@bad#1#2{%
+ \pgfmathparse{#1*(#2-1)}%
+ \let\h=\pgfmathresult
+ \pgfmathparse{floor(\h)}%
+ \pgfmathfloattoint\pgfmathresult
+ \let\offset@low=\pgfmathresult
+ %
+ \pgfmathparse{\h > \offset@low}%
+ \ifpgfmathfloatcomparison
+ \def\b@is@int{0}%
+ \else
+ \def\b@is@int{1}%
+ \fi
+ %
+ \c@pgf@countd=\offset@low\relax
+ \advance\c@pgf@countd by1 %
+ \edef\offset@high{\the\c@pgf@countd}%
+ %
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex@legacy@bad{\offset@low}{#2}%
+ \if0\b@is@int
+ \let\temp=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator@getIndex@legacy@bad{\offset@high}{#2}%
+ \pgfmathparse{0.5*(\temp + \pgfmathresult)}%
+ \fi
+}
+
+
+\def\pgfplotsplothandlersurveyend@boxplot@computestats{
+ %
+ \pgfplotsplothandler@boxplot@init@percentile@estimator
+ %
+ % hm. I once had the idea to support quartile-based whisker
+ % definitions... but I did not implement them.
+ \let\c@pgfplotsplothandlerboxplot@lowerwhisker=\pgfutil@empty
+ \let\c@pgfplotsplothandlerboxplot@upperwhisker=\pgfutil@empty
+ %
+ %
+ % These here are the VALUES that will be communicated to 'boxplot prepared'
+ % They need to be computed below.
+ \let\pgfplotsplothandlerboxplot@lowerwhisker=\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@lowerquartile=\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@median=\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@upperquartile=\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@upperwhisker=\pgfutil@empty
+ %
+ \pgfplotsplothandler@boxplot@percentile@estimator{\pgfkeysvalueof{/pgfplots/boxplot/lower quartile off}}{\numcoords}%
+ \let\pgfplotsplothandlerboxplot@lowerquartile=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator{\pgfkeysvalueof{/pgfplots/boxplot/upper quartile off}}{\numcoords}%
+ \let\pgfplotsplothandlerboxplot@upperquartile=\pgfmathresult
+ \pgfplotsplothandler@boxplot@percentile@estimator{0.5}{\numcoords}%
+ \let\pgfplotsplothandlerboxplot@median=\pgfmathresult
+ %
+ %
+ \pgfplotscoordmath{float}{parsenumber}{\numcoords}%
+ \let\pgfplots@boxplot@numcoords=\pgfmathresult
+ \pgfplotscoordmath{float}{op}{divide}{{\pgfplotsplothandlerboxplot@sum}{\pgfplots@boxplot@numcoords}}%
+ \let\pgfplotsplothandlerboxplot@average=\pgfmathresult
+ %
+ % communicate and set results to pgfkeys - and to the plot
+ % specification option list:
+ \pgfplotsplothandlersurveyend@boxplot@set{lower whisker}{\pgfplotsplothandlerboxplot@lowerwhisker}%
+ \pgfplotsplothandlersurveyend@boxplot@set{lower quartile}{\pgfplotsplothandlerboxplot@lowerquartile}%
+ \pgfplotsplothandlersurveyend@boxplot@set{median}{\pgfplotsplothandlerboxplot@median}%
+ \pgfplotsplothandlersurveyend@boxplot@set{average}{\pgfplotsplothandlerboxplot@average}%
+ \pgfplotsplothandlersurveyend@boxplot@set{upper quartile}{\pgfplotsplothandlerboxplot@upperquartile}%
+ \pgfplotsplothandlersurveyend@boxplot@set{upper whisker}{\pgfplotsplothandlerboxplot@upperwhisker}%
+ \pgfplotsplothandlersurveyend@boxplot@set{sample size}{\pgfplots@boxplot@numcoords}%
+ %
+ % Ok, now make sure that we use the FINAL variables from the user,
+ % i.e. that we respect manual overrides. This is only necessary
+ % for quartiles from what I see here.
+ \pgfplotsplothandlersurveyend@boxplot@get{\pgfplotsplothandlerboxplot@lowerquartile}{lower quartile}%
+ \pgfplotsplothandlersurveyend@boxplot@get{\pgfplotsplothandlerboxplot@upperquartile}{upper quartile}%
+ %
+ \pgfplotscoordmath{float}{parsenumber}{\pgfplotsboxplotvalue{whisker range}}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{float}{op}{subtract}{{\pgfplotsplothandlerboxplot@upperquartile}{\pgfplotsplothandlerboxplot@lowerquartile}}%
+ \pgfplotscoordmath{float}{op}{multiply}{{\pgfmathresult}{\pgfplots@loc@TMPa}}%
+ \let\pgfplots@boxplot@whisker@width=\pgfmathresult
+ \pgfplotscoordmath{float}{op}{add}{{\pgfplotsplothandlerboxplot@upperquartile}{\pgfplots@boxplot@whisker@width}}%
+ \let\pgfplotsplothandlerboxplot@upperwhisker@value=\pgfmathresult
+ \pgfplotscoordmath{float}{op}{subtract}{{\pgfplotsplothandlerboxplot@lowerquartile}{\pgfplots@boxplot@whisker@width}}%
+ \let\pgfplotsplothandlerboxplot@lowerwhisker@value=\pgfmathresult
+ %
+ \pgfplotsarrayforeachungrouped\pgfp@boxplot@@\as\pgfplots@current@point@data{%
+ \pgfplotsplothandlersurveyend@boxplot@computestats@valuebased
+ }%
+ %
+ \pgfplotsplothandlersurveyend@boxplot@set{lower whisker}{\pgfplotsplothandlerboxplot@lowerwhisker}%
+ \pgfplotsplothandlersurveyend@boxplot@set{upper whisker}{\pgfplotsplothandlerboxplot@upperwhisker}%
+ %
+}%
+
+% takes a key #1 which is expected in /pgfplots/boxplot/#1,
+% and overwrites its value with #2 if that is allowed.
+%
+% More specifically, if the current value of '#1' is 'auto', it is
+% replaced by #2. In all other cases, it will not be modified.
+%
+% The "replaced by #2" means to set the value right away and to modify
+% the plot's option list to reflect the new value.
+%
+% ---- NOTE: this routine is also invoked from the LUA BACKEND.
+\def\pgfplotsplothandlersurveyend@boxplot@set#1#2{%
+ \pgfkeysgetvalue{/pgfplots/boxplot/#1}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \def\pgfplots@loc@TMPc{auto}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPc
+ \edef\pgfmathresult{#2}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfplotscoordmath{float}{tostring}{#2}%
+ \edef\pgfplots@loc@TMPb{\noexpand\pgfplotsplothandlersurveyaddoptions{/pgfplots/boxplot/#1={\pgfmathresult}}}%
+ \pgfplots@loc@TMPb
+ \pgfplotsplothandlersurveyend@boxplot@log{#1}{\pgfmathresult}%
+ \fi
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveyend@boxplot@log#1#2{%
+ \pgfplots@log3{boxplot: got #1=#2}%
+}%
+
+\def\pgfplotsplothandlersurveyend@boxplot@get#1#2{%
+ \pgfkeysgetvalue{/pgfplots/boxplot/#2}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ \def\pgfplots@loc@TMPc{auto}%
+ \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPc
+ \else
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfmathparse{\pgfplots@loc@TMPa}%
+ \let#1=\pgfmathresult
+ \fi
+ \fi
+}
+
+\def\pgfplotsplothandlersurveyend@boxplot@computestats@valuebased{%
+ \ifx\pgfplotsplothandlerboxplot@lowerwhisker\pgfutil@empty
+ \pgfplotscoordmath{float}{if less than}{\pgfplots@current@point@data}{\pgfplotsplothandlerboxplot@lowerwhisker@value}{%
+ % Ah. an outlier.
+ \pgfplotsplothandlerboxplot@outlier
+ }{%
+ \let\pgfplotsplothandlerboxplot@lowerwhisker=\pgfplots@current@point@data
+ }%
+ \fi
+ %
+ % FIXME : optimize this! We have an array so we COULD check it in
+ % reverse order!
+ % it would be so cool if we could simply check the list in reverse
+ % order. but not if it really is a singly-linked list...
+ \pgfplotscoordmath{float}{if less than}{\pgfplotsplothandlerboxplot@upperwhisker@value}{\pgfplots@current@point@data}{%
+ % Ah. an outlier.
+ \pgfplotsplothandlerboxplot@outlier
+ }{%
+ \ifx\pgfplotsplothandlerboxplot@upperwhisker\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@upperwhisker=\pgfplots@current@point@data
+ \else
+ \pgfplotscoordmath{float}{max}{\pgfplotsplothandlerboxplot@upperwhisker}{\pgfplots@current@point@data}%
+ \let\pgfplotsplothandlerboxplot@upperwhisker=\pgfmathresult
+ \fi
+ }%
+}
+
+\def\pgfplotsplothandlerboxplot@outlier{%
+ \def\pgfplots@current@point@x{0}%
+ \def\pgfplots@current@point@y{0}%
+ \def\pgfplots@current@point@z{0}%
+ \pgfplotsplothandlersurveypoint
+}%
+
+%%%
+
+\def\pgfplotsplothandlersurveypoint@boxplot{%
+ \pgfplotsplothandlerboxplot@parse
+ \let\pgfplots@current@point@data=\pgfmathresult
+ %
+ \ifx\pgfplots@current@point@data\pgfutil@empty
+ \else
+ \pgfplotscoordmath{float}{if is bounded}{\pgfplots@current@point@data}{%
+ %
+ \ifpgfplots@LUA@backend@supported
+ \pgfplotsplothandlerboxplot@LUA@survey@point
+ \else
+ \pgfplotsplothandlersurveypoint@boxplot@
+ \fi
+ }{%
+ }%
+ \fi
+}%
+
+\def\pgfplotsplothandlerboxplot@LUA@survey@point{%
+ \pgfplotsutil@directlua{pgfplots.texBoxPlotSurveyPoint("\pgfplots@current@point@data")}%
+}%
+\def\pgfplotsplothandlersurveypoint@boxplot@{%
+ \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlerboxplot@num
+ %
+ \if1\b@pgfplotsplothandlerboxplot@issorted
+ \pgfplotscoordmath{float}{if less than}{\pgfplots@current@point@data}{\pgfplotsplothandlerboxplot@last}{%
+ \def\b@pgfplotsplothandlerboxplot@issorted{0}%
+ }{%
+ }%
+ \fi
+ %
+ %
+ \pgfplotscoordmath{float}{op}{add}{{\pgfplots@current@point@data}{\pgfplotsplothandlerboxplot@sum}}%
+ \let\pgfplotsplothandlerboxplot@sum=\pgfmathresult
+ %
+ % store parsed result.
+ \edef\pgfmathresult{\pgfplots@current@point@data}%
+ \expandafter\pgfplotsarraypushback\expandafter{\pgfmathresult}\to\pgfp@boxplot@@
+ %
+ \let\pgfplotsplothandlerboxplot@last=\pgfplots@current@point@data
+ %
+ \advance\c@pgfplots@coordindex by1
+}
+% =============================================================
+
+\def\pgfplotsplothandlerboxplotprepared{%
+ \ifpgfplots@stackedmode
+ \pgfplotsthrow{unsupported operation}{Sorry, 'stacked plots' are currently unsupported for box plots. See the manual for 'boxplot/draw position' for how to achieve the effect (using \string\plotnumofactualtype)}\pgfeov
+ \else
+ \pgfplotsplothandlerboxplotprepared@
+ \fi
+}
+\def\pgfplotsplothandlerboxplotprepared@{%
+ \pgfplotsresetplothandler
+ %
+ \def\pgfplotsplothandlername{boxplot prepared}%
+ %
+ \let\pgf@plotstreamstart=\pgfplotsplothandlervisstart@boxplot@prepared
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@boxplot@prepared
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@boxplot@prepared
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@boxplot@prepared
+ %
+ \pgfplotsplothandlerboxplotprepared@normalize@values
+ %
+ \pgfkeysgetvalue{/pgfplots/boxplot/draw direction}\pgfplots@loc@TMPa
+ \if x\pgfplotsboxplotvalue{draw direction}%
+ \else
+ \if y\pgfplotsboxplotvalue{draw direction}%
+ \else
+ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Invalid choice boxplot/draw direction=\pgfplots@loc@TMPa}\pgfeov%
+ \def\pgfplots@loc@TMPa{x}%
+ \fi
+ \fi
+ \csname pgfplotsplothandlerboxplotprepared@setxy@\pgfplots@loc@TMPa\endcsname
+ %
+ \def\pgfplotsboxplotpointab##1##2{%
+ \begingroup
+ \pgfkeys{/pgf/fpu}%
+ \pgfmathparse{##1}%
+ \let\pgfplotsplothandlerboxplot@@=\pgfmathresult
+ \pgfmathparse{\pgfplotsboxplotvalue{draw position} + ##2}%
+ \xdef\pgfplots@glob@TMPa{{\pgfplotsplothandlerboxplot@@}{\pgfmathresult}}%
+ \expandafter\pgfplotsboxplotpointab@\pgfplots@glob@TMPa{\pgfplotspointaxisxy}%
+ \pgf@process{}%
+ \endgroup
+ }%
+ \def\pgfplotsboxplotpointab@survey##1##2{%
+ \edef\pgfmathresult{##1}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfmathparse{\pgfmathresult}%
+ \fi
+ \let\pgfplotsplothandlerboxplot@@=\pgfmathresult
+ \pgfmathparse{\pgfplotsboxplotvalue{draw position} + ##2}%
+ \xdef\pgfplots@glob@TMPa{{\pgfplotsplothandlerboxplot@@}{\pgfmathresult}}%
+ \let\pgfplotsplothandlerboxplot@modified@draw@position=\pgfmathresult%
+ \expandafter\pgfplotsboxplotpointab@\pgfplots@glob@TMPa{\pgfplotsboxplotpointab@@define@current@xy}%
+ }%
+}%
+
+\def\pgfplotsplothandlerboxplotprepared@normalize@values{%
+ \def\pgfplots@loc@TMPa{auto}%
+ \pgfplotsforeachentryinCSV{\value}{%
+ lower whisker,%
+ lower quartile,%
+ median,%
+ average,%
+ upper quartile,%
+ upper whisker,%
+ sample size%
+ }{%
+ \pgfkeysgetvalue{/pgfplots/boxplot/\value}\pgfplots@loc@TMPb
+ \edef\pgfplots@loc@TMPb{\pgfplots@loc@TMPb}%
+ \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa
+ \pgfkeyslet{/pgfplots/boxplot/\value}\pgfutil@empty
+ \fi
+ }%
+}%
+
+\def\pgfplotsboxplotpointab@@define@current@xy#1#2{%
+ \edef\pgfplots@current@point@x{#1}%
+ \edef\pgfplots@current@point@y{#2}%
+}%
+
+\def\pgfplotsplothandlerboxplotprepared@setxy@x{%
+ \def\pgfplotsboxplotpointab@##1##2##3{%
+ ##3{##1}{##2}%
+ }%
+}%
+\def\pgfplotsplothandlerboxplotprepared@setxy@y{%
+ \def\pgfplotsboxplotpointab@##1##2##3{%
+ ##3{##2}{##1}%
+ }%
+}%
+
+\def\pgfplotsplothandlersurveypoint@boxplot@collect@limits{%
+ \pgfplotsaxisparsecoordinate
+ \pgfplotsaxispreparecoordinate
+ \ifpgfplotsaxisparsecoordinateok
+ \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z
+ \fi
+ %
+ % do NOT store the processed coordinate! the coordinate stream
+ % is ONLY for outliers.
+ %
+ % ... but update this stuff to avoid a "plot without coordinates"
+ % case
+ \pgfplotscoordstream@firstlast@update
+}
+
+\def\pgfplotsplothandlersurveystart@boxplot@prepared{%
+ \pgfplots@prepare@source@parser@for{boxplot/}{data}{\pgfplotsplothandlerboxplot@parse}%
+ %
+ \let\pgfplotsboxplotpointab=\pgfplotsboxplotpointab@survey
+ %
+ \pgfplotsplothandlersurveystart@default
+}
+
+\def\pgfplotsplothandlersurveypoint@boxplot@prepared{%
+ % seems the "parse" routine is stupid ... the /data point/ stuff
+ % is redefined although it should not. Strange...
+ \pgfkeyslet{/data point/x}\pgfplots@current@point@x
+ \pgfkeyslet{/data point/y}\pgfplots@current@point@y
+ \pgfkeyslet{/data point/z}\pgfplots@current@point@z
+ \pgfplotsplothandlerboxplot@parse
+ %
+ \pgfplotsboxplotpointab{\pgfmathresult}{0}%
+ %
+ \pgfplotsplothandlersurveypoint@default
+}
+
+\def\pgfplotsplothandlersurveyend@boxplot@prepared{%
+ \let\pgfplots@invoke@filter@xyz@old=\pgfplots@invoke@filter@xyz
+ \let\pgfplots@invoke@filter@xyz=\relax
+ \let\pgfplots@invoke@filter@old=\pgfplots@invoke@filter
+ \def\pgfplots@invoke@filter##1##2{}%
+ \let\pgfplots@invoke@prefilter@old=\pgfplots@invoke@prefilter
+ \let\pgfplots@invoke@prefilter=\relax
+ %
+ \pgfmathparse{\pgfplotsboxplotvalue{draw position}}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \ifpgfplots@usefpu
+ \pgfmathfloattofixed\pgfmathresult
+ \fi
+ % remember it for later - it might have been retrieved from some
+ % table column! If you used something like
+ % 'draw position=\thisrow{position}, the position of the LAST data point
+ % will be used (because we are in end survey here).
+ \edef\pgfplots@loc@TMPb{\noexpand\pgfplotsplothandlersurveyaddoptions{/pgfplots/boxplot/draw position=\pgfmathresult}}%
+ \pgfplots@loc@TMPb
+ %
+ % ... this here will make things faster if the FPU is active.
+ \pgfkeyslet{/pgfplots/boxplot/draw position}\pgfplots@loc@TMPa
+ %
+ %
+ %
+ %
+ \pgfplotsboxplotpointabwhisker
+ {\pgfplotsboxplotvalue{lower whisker}}
+ {0}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ \pgfplotsboxplotpointabwhisker
+ {\pgfplotsboxplotvalue{lower whisker}}
+ {1}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{lower quartile}}%
+ {0}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{lower quartile}}%
+ {1}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{median}}
+ {0}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{median}}
+ {1}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{average}}
+ {0}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{average}}
+ {1}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{upper quartile}}%
+ {0}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ \pgfplotsboxplotpointabbox
+ {\pgfplotsboxplotvalue{upper quartile}}%
+ {1}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ %
+ %
+ \pgfplotsboxplotpointabwhisker
+ {\pgfplotsboxplotvalue{upper whisker}}%
+ {1}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ \pgfplotsboxplotpointabwhisker
+ {\pgfplotsboxplotvalue{upper whisker}}%
+ {0}%
+ \pgfplotsplothandlersurveypoint@boxplot@collect@limits
+ %
+ \let\pgfplots@invoke@prefilter=\pgfplots@invoke@prefilter@old
+ \let\pgfplots@invoke@filter=\pgfplots@invoke@filter@old
+ \let\pgfplots@invoke@filter@xyz=\pgfplots@invoke@filter@xyz@old
+ %
+ \pgfplotsplothandlerboxplotsurvey@variable@width%
+ %
+ \pgfplotsplothandlersurveyend@default
+}%
+
+\def\pgfplotsplothandlerboxplotsurvey@variable@width{%
+ \ifnum\plotnumofactualtype=0 %
+ % Ah - the first boxplot in this axis. Init the global
+ % counter:
+ \pgfplotscoordmath{default}{max limit}%
+ \global\let\g@pgfplotsplothandlerboxplot@widthkey@min=\pgfmathresult
+ \pgfplotscoordmath{default}{min limit}%
+ \global\let\g@pgfplotsplothandlerboxplot@widthkey@max=\pgfmathresult
+ \fi
+ %
+ %
+ \ifpgfplotsplothandlerboxplot@variable@width
+ \pgfkeysgetvalue{/pgfplots/boxplot/sample size}\pgfmathresult
+ \edef\pgfmathresult{\pgfmathresult}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfplotsplothandlerboxplot@variable@width@expr{\pgfmathresult}%
+ %
+ \let\pgfplots@widthkey@=\pgfmathresult
+ %
+ \pgfkeysgetvalue{/pgfplots/boxplot/sample size min}\pgfmathresult
+ \edef\pgfplotsplothandlerboxplot@widthkey@min{\pgfmathresult}%
+ %
+ \pgfkeysgetvalue{/pgfplots/boxplot/sample size max}\pgfmathresult
+ \edef\pgfplotsplothandlerboxplot@widthkey@max{\pgfmathresult}%
+ %
+ %
+ \ifx\pgfplotsplothandlerboxplot@widthkey@min\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@widthkey@min=\g@pgfplotsplothandlerboxplot@widthkey@min
+ \def\pgfplotsplothandlerboxplot@widthkey@min@autocompute{1}%
+ \else
+ \pgfplotsplothandlerboxplot@variable@width@expr{\pgfplotsplothandlerboxplot@widthkey@min}%
+ \let\pgfplotsplothandlerboxplot@widthkey@min=\pgfmathresult
+ \def\pgfplotsplothandlerboxplot@widthkey@min@autocompute{0}%
+ \fi
+ \ifx\pgfplotsplothandlerboxplot@widthkey@max\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@widthkey@max=\g@pgfplotsplothandlerboxplot@widthkey@max
+ \def\pgfplotsplothandlerboxplot@widthkey@max@autocompute{1}%
+ \else
+ \pgfplotsplothandlerboxplot@variable@width@expr{\pgfplotsplothandlerboxplot@widthkey@max}%
+ \def\pgfplotsplothandlerboxplot@widthkey@max@autocompute{0}%
+ \fi
+ %
+ \if1\pgfplotsplothandlerboxplot@widthkey@max@autocompute
+ \pgfmathparse{max(\pgfplotsplothandlerboxplot@widthkey@max,\pgfplots@widthkey@)}%
+ \global\let\g@pgfplotsplothandlerboxplot@widthkey@max=\pgfmathresult
+ \let\pgfplotsplothandlerboxplot@widthkey@max=\pgfmathresult
+ %
+ \pgfmathparse{min(\pgfplotsplothandlerboxplot@widthkey@min,\pgfplots@widthkey@)}%
+ \global\let\g@pgfplotsplothandlerboxplot@widthkey@min=\pgfmathresult
+ \let\pgfplotsplothandlerboxplot@widthkey@min=\pgfmathresult
+ \fi
+ %
+ %
+ \fi
+ \fi
+ %
+%\message{sample size=\pgfplots@widthkey@. interval = \pgfplotsplothandlerboxplot@widthkey@min:\pgfplotsplothandlerboxplot@widthkey@max^^J}%
+}%
+
+\def\pgfplotsplothandlerboxplot@variable@width@expr#1{%
+ \begingroup
+ \pgfkeys{/pgf/fpu}%
+ \let\pgfmathresult=#1%
+ \pgfplotsboxplotvalue{variable width expr/.@cmd}#1\pgfeov
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let#1=\pgfmathresult
+}%
+
+\def\pgfplotsplothandlerboxplotvisualization@variable@width{%
+ \ifpgfplotsplothandlerboxplot@variable@width
+ \pgfkeysgetvalue{/pgfplots/boxplot/sample size}\pgfmathresult
+ \edef\pgfmathresult{\pgfmathresult}%
+ \ifx\pgfmathresult\pgfutil@empty
+ \else
+ \pgfplotsplothandlerboxplot@variable@width@expr{\pgfmathresult}%
+ \let\pgfplots@widthkey@=\pgfmathresult
+ %
+ \pgfkeysgetvalue{/pgfplots/boxplot/sample size min}\pgfmathresult
+ \edef\pgfplotsplothandlerboxplot@widthkey@min{\pgfmathresult}%
+ %
+ \pgfkeysgetvalue{/pgfplots/boxplot/sample size max}\pgfmathresult
+ \edef\pgfplotsplothandlerboxplot@widthkey@max{\pgfmathresult}%
+ %
+ %
+ \ifx\pgfplotsplothandlerboxplot@widthkey@min\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@widthkey@min=\g@pgfplotsplothandlerboxplot@widthkey@min
+ \else
+ \pgfplotsplothandlerboxplot@variable@width@expr{\pgfplotsplothandlerboxplot@widthkey@min}%
+ \fi
+ \ifx\pgfplotsplothandlerboxplot@widthkey@max\pgfutil@empty
+ \let\pgfplotsplothandlerboxplot@widthkey@max=\g@pgfplotsplothandlerboxplot@widthkey@max
+ \else
+ \pgfplotsplothandlerboxplot@variable@width@expr{\pgfplotsplothandlerboxplot@widthkey@max}%
+ \fi
+ %
+ \pgfkeysgetvalue{/pgfplots/boxplot/variable width min target}\pgfplots@widthkey@mintrg
+ \pgfkeysgetvalue{/pgfplots/boxplot/box extend}\pgfplots@loc@TMPa
+ %\message{sample size=\pgfplots@widthkey@. interval = \pgfplotsplothandlerboxplot@widthkey@min:\pgfplotsplothandlerboxplot@widthkey@max. Target = [\pgfplots@widthkey@mintrg:1]^^J}%
+ \begingroup
+ \pgfkeys{/pgf/fpu}%
+ \pgfmathparse{
+ (\pgfplots@widthkey@mintrg +
+ max(0,min(1,(\pgfplots@widthkey@ - \pgfplotsplothandlerboxplot@widthkey@min) /
+ (\pgfplotsplothandlerboxplot@widthkey@max - \pgfplotsplothandlerboxplot@widthkey@min)))
+ * (1-\pgfplots@widthkey@mintrg)) * \pgfplots@loc@TMPa}%
+ \pgfmathfloattofixed\pgfmathresult
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \pgfkeyslet{/pgfplots/boxplot/box extend}\pgfmathresult
+ \fi
+ \fi
+}%
+
+\def\pgfplotsplothandlervisstart@boxplot@prepared{%
+ %
+ \pgfplotsplothandlerboxplotvisualization@variable@width
+ %
+ \global\let\pgf@plotstreampoint=\pgfutil@gobble
+ \global\let\pgf@plotstreamspecial=\pgfutil@gobble%
+ \global\let\pgf@plotstreamend=\relax
+ %
+ \pgfplotsplothandlervisstart@boxplot@prepared@draw
+}%
+
+\def\pgfplotsplothandlervisstart@boxplot@prepared@draw{%
+ \def\b@pgfplots@boxplot@hasbox{1}%
+ \edef\pgfplots@loc@TMPa{\pgfplotsboxplotvalue{lower quartile}}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\b@pgfplots@boxplot@hasbox{0}%
+ \fi
+ \edef\pgfplots@loc@TMPa{\pgfplotsboxplotvalue{upper quartile}}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \def\b@pgfplots@boxplot@hasbox{0}%
+ \fi
+ %
+ \if0\b@pgfplots@boxplot@hasbox
+ % hm. we have no box. Very strange boxplot, I'd say.
+ %
+ % But anyway: if someone has whiskers without box,
+ % short-circuit the whiskers:
+ \edef\pgfplots@loc@TMPa{\pgfplotsboxplotvalue{lower whisker}}%
+ \edef\pgfplots@loc@TMPb{\pgfplotsboxplotvalue{upper whisker}}%
+ \pgfkeyslet{/pgfplots/boxplot/lower quartile}\pgfplots@loc@TMPb
+ \pgfkeyslet{/pgfplots/boxplot/upper quartile}\pgfplots@loc@TMPa
+ \fi
+ %
+ %
+ \edef\pgfplots@loc@TMPa{\pgfplotsboxplotvalue{lower whisker}}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotsboxplotvalue{draw/lower whisker/.@cmd}\pgfeov
+ \fi
+ %
+ \edef\pgfplots@loc@TMPa{\pgfplotsboxplotvalue{upper whisker}}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotsboxplotvalue{draw/upper whisker/.@cmd}\pgfeov
+ \fi
+ %
+ \if1\b@pgfplots@boxplot@hasbox
+ \pgfplotsboxplotvalue{draw/box/.@cmd}\pgfeov
+ \fi
+ %
+ \edef\pgfplots@loc@TMPa{\pgfplotsboxplotvalue{median}}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotsboxplotvalue{draw/median/.@cmd}\pgfeov
+ \fi
+ %
+ \edef\pgfplots@loc@TMPa{\pgfplotsboxplotvalue{average}}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \pgfplotsboxplotvalue{draw/average/.@cmd}\pgfeov
+ \fi
+}%
+
+\def\pgfplots@boxplot@cs@decompose#1{%
+ \edef\pgfplots@loc@TMPa{#1}%
+ \expandafter\pgfutil@in@\expandafter,\expandafter{\pgfplots@loc@TMPa}%
+ \ifpgfutil@in@
+ \def\pgfplots@loc@TMPb##1,##2\pgfplots@EOI{%
+ \def\pgfplots@boxplotcs@a{##1}%
+ \def\pgfplots@boxplotcs@b{##2}%
+ }%
+ \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfplots@EOI
+ \else
+ \let\pgfplots@boxplotcs@a=\pgfplots@loc@TMPa%
+ \def\pgfplots@boxplotcs@b{0}%
+ \fi
+}%
+
+\def\pgfplotsboxplotvalue#1{\pgfkeysvalueof{/pgfplots/boxplot/#1}}%
+
+\tikzaddtikzonlycommandshortcutlet\boxplotvalue\pgfplotsboxplotvalue
+
+% A helper which implements 'draw relative anchor'. It expands to a
+% math expression which is suitable as second argument for 'boxplot cs';
+% i.e. it needs to be added to 'boxplot/draw position'.
+%
+% More precisely, this macro is to be used in a context where lines of
+% 'box extend' length have to be drawn.
+%
+% The argument is shifted by 'draw relative anchor' and is scaled by
+% 'box extend'.
+%
+% #1: the coordinate. 0 is the means "lower part of the construct
+% which is to be drawn". 1 means the "upper part of that construct"
+% and 0.5 is in the middle.
+\def\pgfplots@boxplot@anchor@value#1{%
+ (#1-\pgfplotsboxplotvalue{draw relative anchor})*\pgfplotsboxplotvalue{box extend}%
+}
+
+% same as \pgfplots@boxplot@anchor@value, but for drawing constructs
+% which are at most 'whisker extend' long.
+\def\pgfplots@boxplot@anchor@value@whisker#1{%
+ (#1-\pgfplotsboxplotvalue{draw relative anchor})*\pgfplotsboxplotvalue{whisker extend}%
+}
+
+\def\pgfplotsboxplotpointabbox#1#2{%
+ \pgfplotsboxplotpointab{#1}{\pgfplots@boxplot@anchor@value{#2}}%
+}%
+\def\pgfplotsboxplotpointabwhisker#1#2{%
+ \pgfplotsboxplotpointab{#1}{\pgfplots@boxplot@anchor@value@whisker{#2}}%
+}%
+
+\tikzdeclarecoordinatesystem{boxplot}{%
+ \pgfplots@boxplot@cs@decompose{#1}%
+ \pgfplotsboxplotpointab{\pgfplots@boxplotcs@a}{\pgfplots@boxplotcs@b}%
+}%
+
+\tikzdeclarecoordinatesystem{boxplot box}{%
+ \pgfplots@boxplot@cs@decompose{#1}%
+ \pgfplotsboxplotpointabbox{\pgfplots@boxplotcs@a}{\pgfplots@boxplotcs@b}%
+}%
+
+\tikzdeclarecoordinatesystem{boxplot whisker}{%
+ \pgfplots@boxplot@cs@decompose{#1}%
+ \pgfplotsboxplotpointabwhisker{\pgfplots@boxplotcs@a}{\pgfplots@boxplotcs@b}%
+}%
+
+\catcode`\;=\pgfplots@oldcatcodesemicolon
+\catcode`\"=\pgfplots@oldcatcodedoublequote
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.ternary.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.ternary.code.tex
new file mode 100644
index 0000000000..cefa4fd82a
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.ternary.code.tex
@@ -0,0 +1,928 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for ternary plots (triangular axes).
+%
+% Copyright 2010 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%
+% This is a library to draw ternary diagrams.
+%
+% A ternary diagram visualizes percentages of three components in a
+% triangle.
+%
+% Sometimes there is also contour data drawn on top of the ternary
+% diagram, i.e. data (x,y,z, T(x,y,z) ), but I can't do that yet.
+%
+% How to read a ternary diagram: http://csmres.jmu.edu/geollab/fichter/SedRx/readternary.html
+%
+% Another usage example: http://www.sv.vt.edu/classes/MSE2094_NoteBook/96ClassProj/experimental/ternary2.html
+%
+% Drawing ternary diagrams: http://staff.aist.go.jp/a.noda/programs/ternary/ternary-en.html
+%
+% computing these coordinates: http://www.gamedev.net/community/forums/topic.asp?topic_id=451357
+%
+
+\pgfplotsdefineaxistype{ternary}{%
+ \pgfplots@ternary@activate
+}%
+
+\newif\ifpgfplots@ternary@rellimits
+
+
+\pgfplotsset{
+ /pgfplots/ternary limits relative/.is if=pgfplots@ternary@rellimits,
+ /pgfplots/ternary limits relative=true,
+ /pgfplots/ternary limits relative/.default=true,
+ /pgfplots/ternary relative limits/.style={/pgfplots/ternary limits relative=#1},
+ /pgfplots/ternary start x/.initial=, % FIXME : implement
+ /pgfplots/ternary start y/.initial=,
+ /pgfplots/ternary start z/.initial=,
+ /pgfplots/every ternary axis/.style={
+ /pgfplots/tick align=outside,
+ grid=major,
+ xticklabel style={anchor=west},
+ % yticklabel style={anchor=south east},
+ % zticklabel style={anchor=north},
+ /pgfplots/every 3d description/.style={},
+ /pgfplots/every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},%
+ /pgfplots/every axis y label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},%
+ /pgfplots/every axis z label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},%
+ /pgfplots/every x tick scale label/.style={at={(xticklabel cs:0.95,5pt)},anchor=near xticklabel,inner sep=0pt},
+ /pgfplots/every y tick scale label/.style={at={(yticklabel cs:0.95,5pt)},anchor=near yticklabel,inner sep=0pt},
+ /pgfplots/every z tick scale label/.style={at={(yticklabel cs:0.95,5pt)},anchor=near yticklabel,inner sep=0pt},
+ /pgfplots/every axis title shift=15pt,
+ /pgfplots/every axis legend/.style={%
+ cells={anchor=center},
+ inner xsep=3pt,inner ysep=2pt,nodes={inner sep=2pt,text depth=0.15em},
+ shape=rectangle,%
+ fill=white,%
+ draw=black,
+ at={(1.03,1.03)},
+ anchor=north west,%
+ },
+ annot/point format 3d/.initial={(\%.2f, \%.2f, \%.2f)},
+ },
+}
+
+\def\pgfplots@ternary@activate{%
+ \let\pgfplotsqpointxy=\pgfplotsqpointxy@ternary
+ \let\pgfplotsqpointxy@orthogonal=\pgfplotsqpointxy
+ \let\pgfplotsqpointxyz=\pgfplotsqpointxyz@ternary
+ \let\pgfplots@draw@axis=\pgfplots@draw@axis@ternary
+ \def\pgfplots@drawaxis@outerlines@separate@onorientedsurf##1##2{}%
+ \def\pgfplots@drawaxis@innerlines@onorientedsurf##1##2##3{}%
+ \let\pgfplots@draw@axis@post=\pgfplots@draw@axis@post@ternary
+ \let\pgfplots@initsizes=\pgfplots@initsizes@ternary
+ \let\pgfplots@limits@ready=\pgfplots@limits@ready@ternary
+ \let\pgfplotspoint@initialisation@axes=\pgfplotspoint@initialisation@axes@ternary
+ \let\pgfplotspoint@initialisation@units=\pgfplotspoint@initialisation@units@ternary
+ \let\pgfplots@initsizes@setunitvector=\pgfplots@initsizes@setunitvector@ternary
+ \let\pgfplots@computeunitvectorlengths=\pgfplots@computeunitvectorlengths@ternary
+ \let\pgfplotspointouternormalvectorofaxis@=\pgfplotspointouternormalvectorofaxis@ternary
+ \let\pgfplots@prepare@ZERO@coordinates=\pgfplots@prepare@ZERO@coordinates@ternary
+ \def\pgfplots@scaleaxes@to@BB@##1##2{}%
+ \let\pgfplotsgetnormalforcurrentview=\relax
+ \def\pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf##1{}%
+ \let\pgfplots@clippath@prepare@for@axistype=\pgfplots@clippath@prepare@for@axistype@ternary
+ %
+ \pgfkeys{/pgfplots/oriented surf installed/.add={}{%
+ \let\pgfplotspointonorientedsurfaceab@ternary@orig=\pgfplotspointonorientedsurfaceab
+ \let\pgfplotspointonorientedsurfaceab=\pgfplotspointonorientedsurfaceab@ternary
+ }}%
+ \let\pgfplotspointonorientedsurfaceabwithbshift=\pgfplotspointonorientedsurfaceabwithbshift@ternary
+ \pgfkeyssetvalue{/pgfplots/view/az}{}%
+ \pgfkeyssetvalue{/pgfplots/view/el}{}%
+ \let\pgfplots@set@options@sanitize=\relax
+ \let\pgfplots@set@options@sanitizemode=\relax
+ %
+ \expandafter\def\expandafter\pgfplots@notify@options@are@set\expandafter{\pgfplots@notify@options@are@set
+ \ifpgfplots@ternary@rellimits
+ \pgfplotsset{scaled ticks=false,ticklabel style={/pgf/number format/precision=0}}%
+ \let\pgfplots@show@ticklabel@orig=\pgfplots@show@ticklabel@
+ \let\pgfplots@show@ticklabel@=\pgfplots@show@ticklabel@ternary@relative
+ \fi
+ }%
+ %
+ % this here is set *before* 'every ternary axis' is invoked.
+ \pgfplotsset{
+ /pgfplots/footnotesize/.append style= {/pgfplots/every axis title shift=15pt},%
+ /pgfplots/tiny/.append style= {/pgfplots/every axis title shift=15pt},%
+ enlargelimits=false,
+ xmin=0,xmax=1,
+ ymin=0,ymax=1,
+ zmin=0,zmax=1,
+ annot/point format/.style={/pgfplots/annot/point format 3d={##1}},
+ }%
+ \def\pgfplots@xticklabel@pos{}%
+ \def\pgfplots@yticklabel@pos{}%
+ \def\pgfplots@zticklabel@pos{}%
+ %\def\pgfplots@xaxislinesnum{1}%
+ %\def\pgfplots@yaxislinesnum{3}%
+ %\def\pgfplots@zaxislinesnum{3}%
+ \def\pgfplotsifaxissurfaceisforeground##1##2##3{##2}%
+ \def\pgfplots@init@ticklabelaxisspecfor##1##2{}%
+ \def\pgfplots@xticklabelaxisspec{v00}%
+ \def\pgfplots@yticklabelaxisspec{0v0}%
+ \def\pgfplots@zticklabelaxisspec{00v}%
+ \def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@##1##2##3{%
+ \pgfplotspointonorientedsurfaceabtolinespec v##1%
+ \edef\pgfplots@loc@TMPe{\csname pgfplots@\pgfplotspointonorientedsurfaceA ticklabelaxisspec\endcsname}%
+ \ifx\pgfplots@loc@TMPe\pgfplotsretval
+%\message{pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@{##1}---> TRUE.}%
+ ##2%
+ \else
+%\message{pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@{##1}---> FALSE.}%
+ ##3%
+ \fi
+ }%
+ \def\pgfplots@ifgridlines@onorientedsurf@should@be@drawn##1##2{%
+ ##1% FIXME
+ }%
+ \def\pgfplotspointonorientedsurfaceabmatchaxisline##1##2{%
+ \pgfplotspointonorientedsurfaceabtolinespec v0% FIXME that's just a bad guess!
+ \edef\pgfplots@loc@TMPe{##1}%
+ \ifx\pgfplots@loc@TMPe\pgfplotsretval
+ \def##2{0}%
+ \else
+ \def##2{}%
+ \fi
+ }%
+ \let\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn=\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@%
+ %
+ %
+ % cartesian cs
+ \tikzdeclarecoordinatesystem{cartesian}{\edef\pgfplots@loc@TMPa{##1}\expandafter\pgfplotspointcartesian@\pgfplots@loc@TMPa\pgfplots@coord@end}
+}%
+
+\def\pgfplots@show@ticklabel@ternary@relative#1#2{%
+ \csname pgfplots@ternary@map@to@unit@#1\endcsname{#2}%
+ \pgfmathfloatparsenumber\pgfmathresult
+ \pgfmathfloatshift@\pgfmathresult{2}%
+ \let\tick=\pgfmathresult
+}%
+
+\def\pgfplotspointcartesian@#1,#2\pgfplots@coord@end{%
+ \pgfpointxy@orig{#1}{#2}%
+}%
+
+% This here is *the* key point why ternary axes can be processed with
+% almost the same code as rectangular axes.
+%
+% Recall that rectangular axes are drawn using "oriented surfaces",
+% the complete code is based on them. The "a" axis is the direction in
+% which we have tick positions and the "b" axis is the direction in
+% which tick lines (or grid lines) shall be drawn).
+%
+% Now, ternary axes do not directly fit into the "oriented surface"
+% framework. But they have a lot of structure which allows to use it
+% with a specialed "pointonorientedsurfaceab" routine: by noting that
+% - there are only three axes,
+% - the axis containing tick lines (and grid lines) *always* has one
+% component set to 0 (lower limit), and the remaining two components
+% sum to 1. Thus, we can simply use one value (for example the "a"
+% value) and compute the remaining one,
+% - \pgfplotspointonorientedsurfaceab is *always* invoked with
+% b set to either the lower or the upper limit.
+% The lower limit is easy, see above. The upper limit is mainly used
+% for grid lines, more precisely it denotes the target point of the grid line.
+% I use special handling to find this target point (by exchanging
+% coordinate components, see the implementation).
+%
+% #1: the "a" value on the oriented surf
+% #2: the "b" value. Note that *only* the lower *or* the upper limit
+% on the "b" axis are supported here!
+%
+\def\pgfplotspointonorientedsurfaceab@ternary#1#2{%
+ \let\pgfplotspointonorientedsurfaceab@ternary@fixedx=\pgfplotspointonorientedsurfaceabsetupfor@fixedx
+ \let\pgfplotspointonorientedsurfaceab@ternary@fixedy=\pgfplotspointonorientedsurfaceabsetupfor@fixedy
+ \let\pgfplotspointonorientedsurfaceab@ternary@fixedz=\pgfplotspointonorientedsurfaceabsetupfor@fixedz
+ %
+%\message{\string\pgfplotspointonorientedsurfaceab{#1}{#2} -----> }%
+ \ifpgfplots@ternary@next@is@unitinterval
+ \edef\pgfplotspointonorientedsurfaceab@ternary@A{#1}%
+ \edef\pgfplotspointonorientedsurfaceab@ternary@B{#2}%
+ \else
+ \csname pgfplots@ternary@map@to@unit@\pgfplotspointonorientedsurfaceA\endcsname{#1}%
+ \let\pgfplotspointonorientedsurfaceab@ternary@A=\pgfmathresult
+ %
+ \csname pgfplots@ternary@map@to@unit@\pgfplotspointonorientedsurfaceB\endcsname{#2}%
+ \let\pgfplotspointonorientedsurfaceab@ternary@B=\pgfmathresult
+ \fi
+ \if0\pgfplotspointonorientedsurfacespecsymbol
+ \else
+ \pgfplots@error{Internal processing error: only \string\pgfplotspointonorientedsurfaceab\space for ternary axes works only for oriented surfs fixed to LOWER or UPPER axis limits.}%
+ \fi
+%\message{A=\pgfplotspointonorientedsurfaceab@ternary@A; B=\pgfplotspointonorientedsurfaceab@ternary@B -----> }%
+ \ifdim\pgfplotspointonorientedsurfaceab@ternary@B pt=0pt
+ \pgfmath@basic@subtract@{1}{\pgfplotspointonorientedsurfaceab@ternary@A}%
+ \let\pgfplotspointonorientedsurfaceab@ternary@B=\pgfmathresult
+ \expandafter\def\csname pgfplotspointonorientedsurfaceabsetupfor@fixed\pgfplotspointonorientedsurfaceN\endcsname{0}%
+ \else
+ %\let\pgfplots@loc@TMPa=\pgfplotspointonorientedsurfaceab@ternary@A
+ %\pgfmath@basic@subtract@{1}{\pgfplotspointonorientedsurfaceab@ternary@A}%
+ %\let\pgfplotspointonorientedsurfaceab@ternary@A=\pgfmathresult
+ %\let\pgfplotspointonorientedsurfaceab@ternary@B=\pgfplots@loc@TMPa
+ \pgfmath@basic@subtract@{1}{\pgfplotspointonorientedsurfaceab@ternary@A}%
+ \def\pgfplotspointonorientedsurfaceab@ternary@B{0}%
+ \expandafter\let\csname pgfplotspointonorientedsurfaceabsetupfor@fixed\pgfplotspointonorientedsurfaceN\endcsname=\pgfmathresult%
+ \fi
+ %
+ \global\pgfplots@ternary@next@is@unitintervaltrue
+%\message{\string\pgfplotspointonorientedsurfaceab@orig{\pgfplotspointonorientedsurfaceab@ternary@A}{\pgfplotspointonorientedsurfaceab@ternary@B}[fixedsymbol=\pgfplotspointonorientedsurfacespecsymbol; a=\pgfplotspointonorientedsurfaceA,b=\pgfplotspointonorientedsurfaceB.]}%
+ \pgfplotspointonorientedsurfaceab@ternary@orig
+ {\pgfplotspointonorientedsurfaceab@ternary@A}%
+ {\pgfplotspointonorientedsurfaceab@ternary@B}%
+ %
+ \let\pgfplotspointonorientedsurfaceabsetupfor@fixedx=\pgfplotspointonorientedsurfaceab@ternary@fixedx
+ \let\pgfplotspointonorientedsurfaceabsetupfor@fixedy=\pgfplotspointonorientedsurfaceab@ternary@fixedy
+ \let\pgfplotspointonorientedsurfaceabsetupfor@fixedz=\pgfplotspointonorientedsurfaceab@ternary@fixedz
+}%
+
+\def\pgfplotspointonorientedsurfaceabwithbshift@ternary#1#2#3{%
+ % implement the shift in "b" direction explicitly:
+ %
+ \pgfplotspointonorientedsurfaceab@ternary{#1}{#2}%
+ \edef\pgfplots@loc@TMPe{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}%
+ \pgfpointadd
+ {\pgfplots@loc@TMPe}%
+ {%
+ \begingroup
+ % I need a '-' here because for ternary axes, the "b" axis
+ % points to the *outside* instead of the inside.
+ \pgf@xa=-#3\relax
+ \if r\pgfkeysvalueof{/pgfplots/\pgfplotspointonorientedsurfaceB\space dir/value}%
+ % oh. a reversed axis.
+ \pgf@xa=-\pgf@xa
+ \fi
+ \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\pgf@xa}%
+ \pgfmath@basic@multiply@{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}{\pgfplots@loc@TMPa}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfqpointscale{\pgfplots@loc@TMPa}{\csname pgfplotspointunit\pgfplotspointonorientedsurfaceB\endcsname}%
+ }%
+}
+
+
+\let\pgfplots@initsizes@ternary@orig=\pgfplots@initsizes
+\def\pgfplots@initsizes@ternary{%
+ \ifpgfplots@threedim
+ \else
+ \pgfplots@error{Sorry, 'axis type=ternary' needs a three dimensional axes. Make sure you supplied three dimensional coordinates (using \string\addplot3, for example). This error is critical; I can't recover}%
+ \fi
+ %
+ \pgfplots@initsizes@get@width@withoutlabels
+ \pgf@x=\pgfmathresult
+ \edef\pgfplots@width@ternary{\pgf@sys@tonumber\pgf@x}%
+ %
+ \pgfplots@initsizes@ternary@orig
+ %
+}%
+
+\let\pgfplots@limits@ready@original=\pgfplots@limits@ready
+
+\def\pgfplots@limits@ready@ternary{%
+ \pgfplots@limits@ready@original
+ %
+%\message{ternary with limits x=[\pgfplots@xmin:\pgfplots@xmax], y=[\pgfplots@ymin:\pgfplots@ymax]; z=[\pgfplots@zmin:\pgfplots@zmax].}%
+ \pgfplots@ternary@init@map@to@unit x%
+ \pgfplots@ternary@init@map@to@unit y%
+ \pgfplots@ternary@init@map@to@unit z%
+}%
+
+\def\pgfplots@ternary@init@map@to@unit#1{%
+ \begingroup
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@#1max\endcsname}%
+ \let\pgfplots@loc@TMPa=\pgfmathresult
+ \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@#1min\endcsname}%
+ \let\pgfplots@map@to@unit@scale@diff=\pgfmathresult
+ \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@loc@TMPa}{\pgfmathresult}}%
+ \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfmathresult}}%
+ \let\pgfplots@map@to@unit@scale=\pgfmathresult
+ %
+ \expandafter\xdef\csname pgfplots@ternary@map@to@unit@#1\endcsname##1{%
+ \noexpand\pgfplotscoordmath{default}{parsenumber}{##1}%
+ \noexpand\pgfplotscoordmath{default}{op}{subtract}{{\noexpand\pgfmathresult}{\pgfplots@map@to@unit@scale@diff}}%
+ \noexpand\pgfplotscoordmath{default}{op}{multiply}{{\noexpand\pgfmathresult}{\pgfplots@map@to@unit@scale}}%
+ \noexpand\pgfplotscoordmath{default}{tofixed}{\noexpand\pgfmathresult}%
+ }%
+ \endgroup
+}
+
+\def\pgfplots@initsizes@setunitvector@ternary#1#2#3#4{%
+ % ternary axis are DIFFERENT here.
+ % They don't use the (xx,xy), (yx,yy), (zx,zy) vectors, so we can
+ % use them to implement *cartesian* coordinates.
+ %
+ % Thus, any \draw (0,0) inside of a ternary axis will yield
+ % cartesian coordinates.
+ %
+ % The relevant quantities to *draw* the diagram are the three
+ % axis, they are also prepared here.
+ %
+ \def#4{0}% whether we have (#1,0) or (0,#1)
+ \ifcase#2%
+ \pgfsetxvec{%
+ \pgfqpoint{\pgfplots@width@ternary pt}{0pt}%
+ }%
+ \pgfpointdiff
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001}
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100}%
+ \or
+ \pgfsetyvec{%
+ \pgfqpoint{0pt}{\pgfplots@width@ternary pt}%
+ }%
+ \pgfpointdiff
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100}
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010}%
+ \or
+ \pgfsetzvec{%
+ \pgfpointorigin
+ }%
+ \pgfpointdiff
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010}
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001}%
+ \fi
+ \expandafter\xdef\csname pgfplotspoint#1axis\endcsname{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ %
+%\message{-> got unitvector(#1) = (\the\csname pgf@#1x\endcsname, \the\csname pgf@#1y\endcsname).}%
+}%
+
+\def\pgfplots@computeunitvectorlengths@ternary{%
+ \pgfplots@computeunitvectorlengths@ternary@ x%
+ \pgfplots@computeunitvectorlengths@ternary@ y%
+ \pgfplots@computeunitvectorlengths@ternary@ z%
+}
+\def\pgfplots@computeunitvectorlengths@ternary@#1{%
+ \csname pgfplotspoint#1axis\endcsname
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \expandafter\let\csname pgfplots@#1@veclength\endcsname=\pgfmathresult
+ \pgfplotsmath@ifzero{\pgfmathresult}{%
+ \expandafter\def\csname pgfplots@#1@inverseveclength\endcsname{infty}%
+ }{%
+ \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@#1@inverseveclength\endcsname=\pgfmathresult
+ }%
+ \expandafter\xdef\csname pgfplotspoint#1axislength\endcsname{\pgfplots@x@veclength pt}%
+ %
+}%
+
+\newif\ifpgfplots@ternary@next@is@unitinterval
+
+% Deduce z = 1-x-y after transformation to relative coordinates.
+\def\pgfplotsqpointxy@ternary#1#2{%
+ \pgf@process{%
+ \ifpgfplots@ternary@next@is@unitinterval
+ \dimen1=#1pt
+ \dimen2=#2pt
+ \else
+ \pgfplots@ternary@map@to@unit@x{#1}%
+ \dimen1=\pgfmathresult pt
+ %
+ \pgfplots@ternary@map@to@unit@y{#2}%
+ \dimen2=\pgfmathresult pt
+ \fi
+ \dimen4=\dimen1
+ \advance\dimen4 by\dimen2
+ \dimen3=1pt
+ \advance\dimen3 by-\dimen4
+ %
+ \global\pgfplots@ternary@next@is@unitintervalfalse
+ \pgfplotsqpointxyz@ternary@
+ }%
+}%
+% gx(x,y,z) = 0.5 * (x + 2*z)/(x+y+z)
+% gy(x,y,z) = (sqrt(3) / 2) * x / (x+y+z)
+\def\pgfplotsqpointxyz@ternary#1#2#3{%
+ \pgf@process{%
+ \ifpgfplots@ternary@next@is@unitinterval
+ \dimen1=#1pt
+ \dimen2=#2pt
+ \dimen3=#3pt
+ \else
+ \pgfplots@ternary@map@to@unit@x{#1}%
+ \dimen1=\pgfmathresult pt
+ %
+ \pgfplots@ternary@map@to@unit@y{#2}%
+ \dimen2=\pgfmathresult pt
+ %
+ \pgfplots@ternary@map@to@unit@z{#3}%
+ \dimen3=\pgfmathresult pt
+ \fi
+ \global\pgfplots@ternary@next@is@unitintervalfalse
+ %
+ \pgfplotsqpointxyz@ternary@
+ }%
+}%
+\def\pgfplotsqpointxyz@ternary@{%
+ %\dimen1=#1
+ %\dimen2=#2
+ %\dimen3=#3
+ % FIXME . I didn't understand that stuff.
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reversed
+ %\multiply\dimen1 by-1
+ %\advance\dimen1 by1pt
+ %\dimen1=#2
+ %\dimen2=#3
+ %\dimen3=#1
+ \fi
+ %--------------------------------------------------
+ % \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reversed
+ % \multiply\dimen2 by-1
+ % \advance\dimen2 by1pt
+ % \fi
+ % \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reversed
+ % \multiply\dimen3 by-1
+ % \advance\dimen3 by1pt
+ % \fi
+ %--------------------------------------------------
+ \pgfplotsqpointxyz@ternary@@%
+}%
+\def\pgfplotsqpointxyz@ternary@@{%
+ % Disable renormalization!?
+ %\dimen4=\dimen1
+ %\advance\dimen4 by\dimen2
+ %\advance\dimen4 by\dimen3
+ %\edef\pgfplots@ternary@sum{\pgf@sys@tonumber{\dimen4}}%
+ %\pgfmathapproxequalto@{1}{\pgfplots@ternary@sum}%
+ \pgfmathcomparisontrue
+ \ifpgfmathcomparison
+ \let\pgfplots@ternary@scale=\pgfplots@width@ternary
+ \else
+ \pgfmath@basic@divide@
+ {\pgfplots@width@ternary}%
+ {\pgfplots@ternary@sum}%
+ \let\pgfplots@ternary@scale=\pgfmathresult
+ \fi
+ %
+ \dimen4=2\dimen3
+ \advance\dimen4 by \dimen1
+ \divide\dimen4 by2
+ \pgf@x=\pgfplots@ternary@scale\dimen4
+ %
+ \dimen4=\dimen1
+ \dimen4=0.866025403784\dimen4 % *= sqrt(3)/2
+ \pgf@y=\pgfplots@ternary@scale\dimen4
+ %
+}%
+\def\pgfplotspoint@initialisation@units@ternary{%
+ \let\pgfplotspointunitx\pgfplotspointxaxis
+ \let\pgfplotspointunity\pgfplotspointyaxis
+ \let\pgfplotsunitxlength=\pgfplots@x@veclength
+ \let\pgfplotsunitylength=\pgfplots@y@veclength
+ \let\pgfplotsunitxinvlength=\pgfplots@x@inverseveclength
+ \let\pgfplotsunityinvlength=\pgfplots@y@inverseveclength
+ \ifpgfplots@threedim
+ \let\pgfplotspointunitz=\pgfplotspointzaxis
+ \let\pgfplotsunitzlength=\pgfplots@z@veclength
+ \let\pgfplotsunitzinvlength=\pgfplots@z@inverseveclength
+ \fi
+}%
+
+% POSTCONDITION: the macros
+% \pgfplotspointminminmin
+% \pgfplotspoint[xyz]axis
+% \pgfplotspoint[xyz]axislength
+% are defined (globally).
+\def\pgfplotspoint@initialisation@axes@ternary{%
+ \xdef\pgfplotspointminminmin{\noexpand\pgfpointorigin}%
+ %
+ \pgfpointdiff
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001}
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100}%
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reverse
+ \pgfqpointscale{-1}{}%
+ \fi
+ \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \expandafter\let\csname pgfplots@x@veclength\endcsname=\pgfmathresult
+ \pgfplotsmath@ifzero{\pgfmathresult}{%
+ \expandafter\def\csname pgfplots@x@inverseveclength\endcsname{infty}%
+ }{%
+ \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@x@inverseveclength\endcsname=\pgfmathresult
+ }%
+ \xdef\pgfplotspointxaxislength{\pgfplots@x@veclength pt}%
+ %
+ \pgfpointdiff
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100}
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010}%
+ \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reverse
+ \pgfqpointscale{-1}{}%
+ \fi
+ \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \expandafter\let\csname pgfplots@y@veclength\endcsname=\pgfmathresult
+ \pgfplotsmath@ifzero{\pgfmathresult}{%
+ \expandafter\def\csname pgfplots@y@inverseveclength\endcsname{infty}%
+ }{%
+ \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@y@inverseveclength\endcsname=\pgfmathresult
+ }%
+ \xdef\pgfplotspointyaxislength{\pgfplots@y@veclength pt}%
+ %
+ \pgfpointdiff
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010}
+ {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001}%
+ \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reverse
+ \pgfqpointscale{-1}{}%
+ \fi
+ \xdef\pgfplotspointzaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}%
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \expandafter\let\csname pgfplots@z@veclength\endcsname=\pgfmathresult
+ \pgfplotsmath@ifzero{\pgfmathresult}{%
+ \expandafter\def\csname pgfplots@z@inverseveclength\endcsname{infty}%
+ }{%
+ \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}%
+ \expandafter\let\csname pgfplots@z@inverseveclength\endcsname=\pgfmathresult
+ }%
+ \xdef\pgfplotspointzaxislength{\pgfplots@z@veclength pt}%
+ %
+}
+\def\pgfplots@prepare@ZERO@coordinates@ternary{%
+ \ifpgfplots@xislinear
+ \ifpgfplots@apply@datatrafo@x
+ \pgfplotscoordmath{x}{parsenumber}{0}%
+ \pgfplotscoordmath{x}{datascaletrafo}{\pgfmathresult}%
+ \global\let\pgfplots@logical@ZERO@x=\pgfmathresult
+ \else
+ \gdef\pgfplots@logical@ZERO@x{0}%
+ \fi
+ \pgfplotsmathmax{\pgfplots@logical@ZERO@x}{\pgfplots@xmin}%
+ \global\let\pgfplots@logical@ZERO@x=\pgfmathresult
+ \pgfplotsmathmin{\pgfplots@logical@ZERO@x}{\pgfplots@xmax}%
+ \global\let\pgfplots@logical@ZERO@x=\pgfmathresult
+ \else
+ \global\let\pgfplots@logical@ZERO@x=\pgfplots@xmin%
+ \fi
+ %
+ \ifpgfplots@yislinear
+ \ifpgfplots@apply@datatrafo@y
+ \pgfplotscoordmath{y}{parsenumber}{0}%
+ \pgfplotscoordmath{y}{datascaletrafo}{\pgfmathresult}%
+ \global\let\pgfplots@logical@ZERO@y=\pgfmathresult
+ \else
+ \gdef\pgfplots@logical@ZERO@y{0}%
+ \fi
+ \pgfplotsmathmax{\pgfplots@logical@ZERO@y}{\pgfplots@ymin}%
+ \global\let\pgfplots@logical@ZERO@y=\pgfmathresult
+ \pgfplotsmathmin{\pgfplots@logical@ZERO@y}{\pgfplots@ymax}%
+ \global\let\pgfplots@logical@ZERO@y=\pgfmathresult
+ \else
+ \global\let\pgfplots@logical@ZERO@y=\pgfplots@ymin%
+ \fi
+ %
+ \ifpgfplots@threedim
+ \ifpgfplots@zislinear
+ \ifpgfplots@apply@datatrafo@z
+ \pgfplotscoordmath{z}{parsenumber}{0}%
+ \pgfplotscoordmath{z}{datascaletrafo}{\pgfmathresult}%
+ \global\let\pgfplots@logical@ZERO@z=\pgfmathresult
+ \else
+ \gdef\pgfplots@logical@ZERO@z{0}%
+ \fi
+ \pgfplotsmathmax{\pgfplots@logical@ZERO@z}{\pgfplots@zmin}%
+ \global\let\pgfplots@logical@ZERO@z=\pgfmathresult
+ \pgfplotsmathmin{\pgfplots@logical@ZERO@z}{\pgfplots@zmax}%
+ \global\let\pgfplots@logical@ZERO@z=\pgfmathresult
+ \else
+ \global\let\pgfplots@logical@ZERO@z=\pgfplots@zmin%
+ \fi
+ \fi
+ %
+ %
+ \global\pgfplots@ternary@next@is@unitintervaltrue
+ \pgfplotsqpointxyz100%
+ \xdef\pgfplots@ZERO@x{\the\pgf@x}%
+ \xdef\pgfplots@ZERO@y{\the\pgf@y}%
+ \xdef\pgfplotspointaxisorigin{\noexpand\pgf@x=\pgfplots@ZERO@x\space\noexpand\pgf@y=\pgfplots@ZERO@y\space}%
+}%
+
+
+\def\pgfplots@draw@axis@ternary{%
+ %
+ % this should become the line for varying y:
+ \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@zmin}{0}%
+ \pgfplots@draw@axis@insurface yxz
+ %
+ % this should become the line for varying z:
+ \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@xmin}{0}%
+ \pgfplots@draw@axis@insurface zyx
+ %
+ %
+ % this should become the line for varying x:
+ \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@ymin}{0}%
+ \pgfplots@draw@axis@insurface xzy
+ %
+ \pgfplots@ternary@draw@axislines
+}%
+\def\pgfplots@ternary@draw@axislines{%
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reverse
+ \pgfplots@separate@axis@linestrue
+ \fi
+ \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reverse
+ \pgfplots@separate@axis@linestrue
+ \fi
+ \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reverse
+ \pgfplots@separate@axis@linestrue
+ \fi
+ \ifpgfplots@separate@axis@lines
+ \scope[/pgfplots/every outer x axis line,
+ xdiscont,decoration={pre length=\csname xdisstart\endcsname, post length=\csname xdisend\endcsname}]
+ \draw decorate {
+ \pgfextra
+ \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reverse
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}%
+ \else
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}%
+ \fi
+ \endpgfextra
+ };
+ \endscope
+ %
+ \scope[/pgfplots/every outer y axis line,
+ ydiscont,decoration={pre length=\csname ydisstart\endcsname, post length=\csname ydisend\endcsname}]
+ \draw decorate {
+ \pgfextra
+ \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reverse
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}%
+ \else
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}%
+ \fi
+ \endpgfextra
+ };
+ \endscope
+ %
+ \scope[/pgfplots/every outer z axis line,
+ zdiscont,decoration={pre length=\csname zdisstart\endcsname, post length=\csname zdisend\endcsname}]
+ \draw decorate {
+ \pgfextra
+ \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reverse
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}%
+ \else
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}%
+ \fi
+ \endpgfextra
+ };
+ \endscope
+ \else
+ \draw[
+ /pgfplots/every outer x axis line, % FIXME! these outer styles need much more attention :-(
+ /pgfplots/every outer y axis line]
+ \pgfextra{%
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}%
+ \pgfpathclose
+ };
+ \fi
+}%
+\def\pgfplots@clippath@prepare@for@axistype@ternary{%
+ \def\pgfplots@clippath@install##1{%
+ \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}%
+ \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}%
+ \pgfpathclose
+ \pgfplots@clippath@use@{##1}%
+ }%
+}%
+
+\def\pgfplots@draw@axis@post@ternary{%
+ % do nothing. There is no 3d box to draw here.
+}%
+
+\def\pgfplotspointouternormalvectorofaxis@ternary#1#2#3\relax{%
+ \edef\pgfplots@loc@TMPa{\if r\pgfkeysvalueof{/pgfplots/x dir/value}-\fi}% reverse
+ \edef\pgfplots@loc@TMPb{\if r\pgfkeysvalueof{/pgfplots/y dir/value}-\fi}% reverse
+ \edef\pgfplots@loc@TMPc{\if r\pgfkeysvalueof{/pgfplots/z dir/value}-\fi}% reverse
+ \if v#1%
+ \pgfpointadd
+ {\pgfqpointscale{\pgfplots@loc@TMPb-1}{\pgfplotspointyaxis}}%
+ {\pgfqpointscale{\pgfplots@loc@TMPc}{\pgfplotspointzaxis}}%
+ \else
+ \if v#2%
+ \pgfpointadd
+ {\pgfqpointscale{\pgfplots@loc@TMPa}{\pgfplotspointxaxis}}%
+ {\pgfqpointscale{\pgfplots@loc@TMPc-1}{\pgfplotspointzaxis}}%
+ \else
+ \pgfpointadd
+ {\pgfqpointscale{\pgfplots@loc@TMPa-1}{\pgfplotspointxaxis}}%
+ {\pgfqpointscale{\pgfplots@loc@TMPb}{\pgfplotspointyaxis}}%
+ \fi
+ \fi
+ \pgf@process{\pgfpointnormalised{}}%
+ \endgroup
+}%
+
+
+\def\pgfplotsclickable@check@enable@axistype@ternaryaxis{%
+ \def\pgfplotsretval{1}%
+}%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
+% tieline plots
+%
+\pgfplotsset{
+ tieline/.code={%
+ \let\tikz@plot@handler=\pgfplotsplothandlertieline
+ \pgfkeysifdefined{/pgfplots/table/tie end x}{}{%
+ % provide these keys locally:
+ \pgfkeyslet{/pgfplots/table/tie end x}\pgfutil@empty%
+ \pgfkeyslet{/pgfplots/table/tie end y}\pgfutil@empty%
+ \pgfkeyslet{/pgfplots/table/tie end z}\pgfutil@empty%
+ \pgfkeyslet{/pgfplots/table/tie end x index}\pgfutil@empty%
+ \pgfkeyslet{/pgfplots/table/tie end y index}\pgfutil@empty%
+ \pgfkeyslet{/pgfplots/table/tie end z index}\pgfutil@empty%
+ }%
+ \pgfqkeys{/pgfplots/tieline}{#1}%
+ },
+ tieline/every tieline/.style={},
+ tieline/tieline style/.style={/pgfplots/tieline/every tieline/.append style={#1}},
+ tieline/every curve/.style={},
+ tieline/curve style/.style={/pgfplots/tieline/every curve/.append style={#1}},
+ tieline/each nth tie/.initial=,
+}
+\def\pgfplotsplothandlertieline{%
+ \pgfplotsresetplothandler
+ \let\pgf@plotstreamstart=\pgfplotsplothandlervisbegin@tieline
+ \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@tieline
+ \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@tieline
+ \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@tieline
+}%
+\def\pgfplotsplothandlervisbegin@tieline{%
+ \pgfplotsapplistXnewempty\pgfp@binodal@A
+ \pgfplotsapplistXnewempty\pgfp@ties
+ \pgfplotsprependlistXnewempty{pgfp@binodal@B@reverse}
+ \def\b@pgfplotsplothandlersurveystart@tieline@even{1}%
+ %
+ \global\let\pgf@plotstreampoint=\pgfplotsplothandlervis@streampoint@tieline
+ \global\let\pgf@plotstreamend=\pgfplotsplothandlervis@streamend@tieline
+ %
+ \pgfkeysgetvalue{/pgfplots/tieline/each nth tie}\pgfplots@eachnth@tie
+ \ifx\pgfplots@eachnth@tie\pgfutil@empty
+ \def\pgfplots@eachnth@tie{1}%
+ \fi
+ \let\c@pgfplots@tiecounter=\c@pgfplotstable@counta
+ \c@pgfplots@tiecounter=0
+}%
+\def\pgfplotsplothandlervis@streampoint@tieline#1{%
+ \pgf@process{#1}%
+ \edef\pgfplots@loc@TMPa{%
+ \noexpand\pgfplots@stream@withmeta@
+ {\pgfplots@current@point@coordindex}%
+ {\the\pgf@x}{\the\pgf@y}%
+ {\pgfplots@current@point@meta}%
+ }%
+ \if1\b@pgfplotsplothandlersurveystart@tieline@even
+ \let\pgfplotsplothandlervis@streampoint@tieline@last=\pgfplots@loc@TMPa
+ \expandafter\pgfplotsapplistXpushback\pgfplots@loc@TMPa\to\pgfp@binodal@A
+ \def\b@pgfplotsplothandlersurveystart@tieline@even{0}%
+ \else
+ \expandafter\pgfplotsprependlistXpushfront\pgfplots@loc@TMPa\to{pgfp@binodal@B@reverse}%
+ %
+ \advance\c@pgfplots@tiecounter by1
+ \ifnum\pgfplots@eachnth@tie=\c@pgfplots@tiecounter
+ \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}%
+ \t@pgfplots@tokb=\expandafter{\pgfplotsplothandlervis@streampoint@tieline@last}%
+ \edef\pgfplots@loc@TMPa{\the\t@pgfplots@toka\the\t@pgfplots@tokb\noexpand\pgfplotsplothandlertieline@finishtie}%
+ \expandafter\pgfplotsapplistXpushback\pgfplots@loc@TMPa\to\pgfp@ties
+ \c@pgfplots@tiecounter=0
+ \fi
+ %
+ \def\b@pgfplotsplothandlersurveystart@tieline@even{1}%
+ \fi
+}%
+\def\pgfplotsplothandlervis@streamend@tieline{%
+ \begingroup
+ \pgfplots@drawmodes@appendtrue
+ \path[/pgfplots/tieline/every curve]%
+ \pgfextra
+ \ifx\tikz@plot@handler\pgfplotsplothandlertieline
+ \let\tikz@plot@handler\pgfplothandlerlineto
+ \fi
+ \pgfplotsresetplothandler
+ \tikz@plot@handler
+ \pgf@plotstreamstart
+ %
+ \pgfplotsapplistXlet\pgfplots@loc@TMPa=\pgfp@binodal@A
+ \pgfplots@loc@TMPa
+ \pgfplotsapplistXnewempty\pgfp@binodal@A
+ \pgfplotsprependlistXlet\pgfplots@loc@TMPa={pgfp@binodal@B@reverse}%
+ \pgfplots@loc@TMPa
+ \pgfplotsprependlistXnewempty{pgfp@binodal@B@reverse}%
+ %
+ \pgf@plotstreamend
+ \endpgfextra;
+ \endgroup
+ %
+ %
+ \pgfplotsset{/pgfplots/tieline/every tieline}%
+ \ifx\tikz@plot@handler\pgfplotsplothandlertieline
+ \let\tikz@plot@handler\pgfplothandlerlineto
+ \fi
+ \pgfplotsresetplothandler
+ \tikz@plot@handler
+ \pgf@plotstreamstart
+ %
+ \def\pgfplotsplothandlertieline@finishtie{%
+ \pgfplotsplothandlervisualizejump
+ }%
+ \pgfplotsapplistXlet\pgfplots@loc@TMPa=\pgfp@ties
+ \pgfplots@loc@TMPa
+ \pgfplotsapplistXnewempty\pgfp@ties
+ %
+ \pgf@plotstreamend
+}%
+
+\def\pgfplotsplothandlersurveystart@tieline{%
+ \def\pgfplots@loc@TMPa{table}%
+ \ifx\pgfplotssurveyphaseinputclass\pgfplots@loc@TMPa
+ \else
+ \pgfplots@error{Sorry, 'tieline' plots are currently only supported for \string\addplot\space table}%
+ \fi
+ \def\b@pgfplotsplothandlersurveystart@tieline@init{0}%
+}%
+\def\pgfplotsplothandlersurveyend@tieline{%
+}%
+
+\def\pgfplotsplothandlersurveypoint@tieline@init{%
+ \pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor x\pgfplotsplothandlertieline@Bx
+ \pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor y\pgfplotsplothandlertieline@By
+ \ifpgfplots@curplot@threedim
+ \pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor z\pgfplotsplothandlertieline@Bz
+ \fi
+ %
+ \def\b@pgfplotsplothandlersurveystart@tieline@init{1}%
+}%
+\def\pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor#1#2{%
+ \let#2=\relax
+ \pgfkeysgetvalue{/pgfplots/table/tie end #1}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \pgfkeysgetvalue{/pgfplots/table/tie end #1 index}{\pgfplots@loc@TMPa}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \edef#2{\noexpand\getthisrowno{\pgfplots@loc@TMPa}\noexpand\pgfmathresult}%
+ \fi
+ \else
+ \edef#2{\noexpand\getthisrow{\pgfplots@loc@TMPa}\noexpand\pgfmathresult}%
+ \fi
+ \ifx#2\relax
+ \pgfplotsplothandlersurveypoint@tieline@init@find@colindex@for #1\pgfplots@loc@ind
+ \c@pgf@countd=\pgfplots@loc@ind\relax
+ \advance\c@pgf@countd by3
+ \ifnum\c@pgf@countd<\pgfplotstablecols\relax
+ \else
+ \c@pgf@countd=0
+ \pgfplots@error{Sorry, I can't find the 'tie end #1 index' automatically. Please provide 'table[tie end #1={<colname>}]' or 'table[tie end #1 index=<col index>]' manually and verify the all, x,y and z components are correct}%
+ \fi
+ \edef\pgfplots@loc@ind{\the\c@pgf@countd}%
+ \pgfkeyslet{/pgfplots/table/tie end #1 index}\pgfplots@loc@ind
+ \edef#2{\noexpand\getthisrowno{\pgfplots@loc@ind}\noexpand\pgfmathresult}%
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveypoint@tieline@init@find@colindex@for#1#2{%
+ \pgfkeysgetvalue{/pgfplots/table/#1}{\pgfplots@loc@TMPa}%
+ \pgfkeysgetvalue{/pgfplots/table/#1 index}{\pgfplots@loc@TMPb}%
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \let#2=\pgfplots@loc@TMPb
+ \else
+ \def\pgfplots@loc@TMPb{\expandafter\pgfplotstablegetcolumnindexforname\expandafter{\pgfplots@loc@TMPa}\of}%
+ \expandafter\pgfplots@loc@TMPb\pgfplotstablename\to#2%
+ \fi
+}%
+
+\def\pgfplotsplothandlersurveypoint@tieline{%
+ \if0\b@pgfplotsplothandlersurveystart@tieline@init
+ \pgfplotsplothandlersurveypoint@tieline@init
+ \fi
+ \pgfplotsplothandlersurveypoint@default
+ %
+ \pgfplotsplothandlertieline@Bx\let\pgfplots@current@point@x=\pgfmathresult
+ \pgfplotsplothandlertieline@By\let\pgfplots@current@point@y=\pgfmathresult
+ \ifpgfplots@curplot@threedim
+ \pgfplotsplothandlertieline@Bz\let\pgfplots@current@point@z=\pgfmathresult
+ \fi
+ \pgfplotsplothandlersurveypoint@default
+}%
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.units.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.units.code.tex
new file mode 100644
index 0000000000..084d076b28
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplots.units.code.tex
@@ -0,0 +1,224 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2009 by Nick Papior Andersen.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+%
+% This file contains the implementation for using units in labels.
+%
+% Default the unit setting system isn't used, It is thus required to use the key "use units".
+%
+% Programming Structure:
+%
+% 1. All associated keys are first set. This includes some prefix values of the unit system.
+% In example one can redefine prefix and postfix such that units are shown on a per-user setting.
+%
+% 2. The other main thing is scaling of the dimension. If one uses units one might not
+% have scaled the data. For this the keys "scaled <axis> ticks" are used at a base 10.
+% Currently it is not provided to scale in other bases.
+% FIXME Adding of other bases.
+%
+% 3. Some predefined SI prefixes are specified which should minimize mistakes.
+% For example the key "change <axis> base,<axis> SI prefix=kilo" allows the
+% <axis> to be rescaled according to the above at base 10 with a factor of -3 and sets the
+% unit prefix to "k".
+% FIXME Adding other basis systems than SI. For example the addition of CGS units.
+
+\newif\ifpgfplots@units@change@x@base
+\newif\ifpgfplots@units@change@y@base
+\newif\ifpgfplots@units@change@z@base
+
+%
+% Constants for writing the unit marking
+%
+\def\pgfplots@units@marking@pre{}
+\def\pgfplots@units@marking@post{}
+
+\pgfkeys{%
+ /pgfplots/use units/.is if=pgfplots@units@use,%
+ /pgfplots/use units=true,% So when called from \usepgfplotslibrary{units} it's automatically 'on'
+ %
+ % Setup basic x settings
+ %
+ /pgfplots/x unit/.initial={},%
+ /pgfplots/x unit prefix/.initial={},%
+ /pgfplots/change x base/.is if=pgfplots@units@change@x@base,%
+ /pgfplots/change x base=false,%
+ %
+ % Setup basic y settings
+ %
+ /pgfplots/y unit/.initial={},%
+ /pgfplots/y unit prefix/.initial={},%
+ /pgfplots/change y base/.is if=pgfplots@units@change@y@base,%
+ /pgfplots/change y base=false,%
+ %
+ % Setup basic z settings
+ %
+ /pgfplots/z unit/.initial={},%
+ /pgfplots/z unit prefix/.initial={},%
+ /pgfplots/change z base/.is if=pgfplots@units@change@z@base,%
+ /pgfplots/change z base=false,%
+ %
+ % default markings of units. I.e. the surroundings of the unit:
+ % [unit markings=curly braces] yields {<unit>}
+ %
+ /pgfplots/unit marking pre/.store in={\pgfplots@units@marking@pre},%
+ /pgfplots/unit marking post/.store in={\pgfplots@units@marking@post},%
+ /pgfplots/unit markings/.is choice,%
+ /pgfplots/unit markings/parenthesis/.style={/pgfplots/unit marking pre={\left(},/pgfplots/unit marking post={\right)}},%
+ /pgfplots/unit markings/square braces/.style={/pgfplots/unit marking pre={\left[},/pgfplots/unit marking post={\right]}},%
+ /pgfplots/unit markings/curly braces/.style={/pgfplots/unit marking pre={\left\{},/pgfplots/unit marking post={\right\}}},%
+ /pgfplots/unit markings/slash space/.style={/pgfplots/unit marking pre={/$\space$},/pgfplots/unit marking post={\relax}},%
+ /pgfplots/unit markings=square braces,%
+ %
+ % The code used to type units, and the base change code.
+ %
+ /pgfplots/unit code/.code 2 args={\mathrm{#1#2}},%
+ /pgfplots/axis base prefix/.code args={axis #1 base #2 prefix #3}{%
+ \csname ifpgfplots@units@change@#1@base\endcsname%
+ \pgfkeys{/pgfplots/#1\space unit prefix={#3},%
+ /pgfplots/scaled #1\space ticks={base 10:#2},%
+ /pgfplots/#1tick scale label code/.code={\relax}%
+ }%
+ \else%
+ \pgfkeys{/pgfplots/#1\space unit prefix={#3}}%
+ \fi%
+ },%
+ %
+ % x SI prefixes
+ %
+ /pgfplots/x SI prefix/.is choice,%
+ /pgfplots/x SI prefix/yocto/.style={/pgfplots/axis base prefix={axis x base 24 prefix y}},%
+ /pgfplots/x SI prefix/zepto/.style={/pgfplots/axis base prefix={axis x base 21 prefix z}},%
+ /pgfplots/x SI prefix/atto/.style={/pgfplots/axis base prefix={axis x base 18 prefix a}},%
+ /pgfplots/x SI prefix/femto/.style={/pgfplots/axis base prefix={axis x base 15 prefix f}},%
+ /pgfplots/x SI prefix/pico/.style={/pgfplots/axis base prefix={axis x base 12 prefix p}},%
+ /pgfplots/x SI prefix/nano/.style={/pgfplots/axis base prefix={axis x base 9 prefix n}},%
+ /pgfplots/x SI prefix/micro/.style={/pgfplots/axis base prefix={axis x base 6 prefix \mu}},%
+ /pgfplots/x SI prefix/milli/.style={/pgfplots/axis base prefix={axis x base 3 prefix m}},%
+ /pgfplots/x SI prefix/centi/.style={/pgfplots/axis base prefix={axis x base 2 prefix c}},%
+ /pgfplots/x SI prefix/deci/.style={/pgfplots/axis base prefix={axis x base 1 prefix d}},%
+ /pgfplots/x SI prefix/deca/.style={/pgfplots/axis base prefix={axis x base -1 prefix da}},%
+ /pgfplots/x SI prefix/hecto/.style={/pgfplots/axis base prefix={axis x base -2 prefix h}},%
+ /pgfplots/x SI prefix/kilo/.style={/pgfplots/axis base prefix={axis x base -3 prefix k}},%
+ /pgfplots/x SI prefix/mega/.style={/pgfplots/axis base prefix={axis x base -6 prefix M}},%
+ /pgfplots/x SI prefix/giga/.style={/pgfplots/axis base prefix={axis x base -9 prefix G}},%
+ /pgfplots/x SI prefix/tera/.style={/pgfplots/axis base prefix={axis x base -12 prefix T}},%
+ /pgfplots/x SI prefix/peta/.style={/pgfplots/axis base prefix={axis x base -15 prefix P}},%
+ /pgfplots/x SI prefix/exa/.style={/pgfplots/axis base prefix={axis x base -18 prefix E}},%
+ /pgfplots/x SI prefix/zetta/.style={/pgfplots/axis base prefix={axis x base -21 prefix Z}},%
+ /pgfplots/x SI prefix/yotta/.style={/pgfplots/axis base prefix={axis x base -24 prefix Y}},%
+ %
+ % y SI prefixes
+ %
+ /pgfplots/y SI prefix/.is choice,%
+ /pgfplots/y SI prefix/yocto/.style={/pgfplots/axis base prefix={axis y base 24 prefix y}},%
+ /pgfplots/y SI prefix/zepto/.style={/pgfplots/axis base prefix={axis y base 21 prefix z}},%
+ /pgfplots/y SI prefix/atto/.style={/pgfplots/axis base prefix={axis y base 18 prefix a}},%
+ /pgfplots/y SI prefix/femto/.style={/pgfplots/axis base prefix={axis y base 15 prefix f}},%
+ /pgfplots/y SI prefix/pico/.style={/pgfplots/axis base prefix={axis y base 12 prefix p}},%
+ /pgfplots/y SI prefix/nano/.style={/pgfplots/axis base prefix={axis y base 9 prefix n}},%
+ /pgfplots/y SI prefix/micro/.style={/pgfplots/axis base prefix={axis y base 6 prefix \mu}},%
+ /pgfplots/y SI prefix/milli/.style={/pgfplots/axis base prefix={axis y base 3 prefix m}},%
+ /pgfplots/y SI prefix/centi/.style={/pgfplots/axis base prefix={axis y base 2 prefix c}},%
+ /pgfplots/y SI prefix/deci/.style={/pgfplots/axis base prefix={axis y base 1 prefix d}},%
+ /pgfplots/y SI prefix/deca/.style={/pgfplots/axis base prefix={axis y base -1 prefix da}},%
+ /pgfplots/y SI prefix/hecto/.style={/pgfplots/axis base prefix={axis y base -2 prefix h}},%
+ /pgfplots/y SI prefix/kilo/.style={/pgfplots/axis base prefix={axis y base -3 prefix k}},%
+ /pgfplots/y SI prefix/mega/.style={/pgfplots/axis base prefix={axis y base -6 prefix M}},%
+ /pgfplots/y SI prefix/giga/.style={/pgfplots/axis base prefix={axis y base -9 prefix G}},%
+ /pgfplots/y SI prefix/tera/.style={/pgfplots/axis base prefix={axis y base -12 prefix T}},%
+ /pgfplots/y SI prefix/peta/.style={/pgfplots/axis base prefix={axis y base -15 prefix P}},%
+ /pgfplots/y SI prefix/exa/.style={/pgfplots/axis base prefix={axis y base -18 prefix E}},%
+ /pgfplots/y SI prefix/zetta/.style={/pgfplots/axis base prefix={axis y base -21 prefix Z}},%
+ /pgfplots/y SI prefix/yotta/.style={/pgfplots/axis base prefix={axis y base -24 prefix Y}},%
+ %
+ % z SI prefixes
+ %
+ /pgfplots/z SI prefix/.is choice,%
+ /pgfplots/z SI prefix/yocto/.style={/pgfplots/axis base prefix={axis z base 24 prefix y}},%
+ /pgfplots/z SI prefix/zepto/.style={/pgfplots/axis base prefix={axis z base 21 prefix z}},%
+ /pgfplots/z SI prefix/atto/.style={/pgfplots/axis base prefix={axis z base 18 prefix a}},%
+ /pgfplots/z SI prefix/femto/.style={/pgfplots/axis base prefix={axis z base 15 prefix f}},%
+ /pgfplots/z SI prefix/pico/.style={/pgfplots/axis base prefix={axis z base 12 prefix p}},%
+ /pgfplots/z SI prefix/nano/.style={/pgfplots/axis base prefix={axis z base 9 prefix n}},%
+ /pgfplots/z SI prefix/micro/.style={/pgfplots/axis base prefix={axis z base 6 prefix \mu}},%
+ /pgfplots/z SI prefix/milli/.style={/pgfplots/axis base prefix={axis z base 3 prefix m}},%
+ /pgfplots/z SI prefix/centi/.style={/pgfplots/axis base prefix={axis z base 2 prefix c}},%
+ /pgfplots/z SI prefix/deci/.style={/pgfplots/axis base prefix={axis z base 1 prefix d}},%
+ /pgfplots/z SI prefix/deca/.style={/pgfplots/axis base prefix={axis z base -1 prefix da}},%
+ /pgfplots/z SI prefix/hecto/.style={/pgfplots/axis base prefix={axis z base -2 prefix h}},%
+ /pgfplots/z SI prefix/kilo/.style={/pgfplots/axis base prefix={axis z base -3 prefix k}},%
+ /pgfplots/z SI prefix/mega/.style={/pgfplots/axis base prefix={axis z base -6 prefix M}},%
+ /pgfplots/z SI prefix/giga/.style={/pgfplots/axis base prefix={axis z base -9 prefix G}},%
+ /pgfplots/z SI prefix/tera/.style={/pgfplots/axis base prefix={axis z base -12 prefix T}},%
+ /pgfplots/z SI prefix/peta/.style={/pgfplots/axis base prefix={axis z base -15 prefix P}},%
+ /pgfplots/z SI prefix/exa/.style={/pgfplots/axis base prefix={axis z base -18 prefix E}},%
+ /pgfplots/z SI prefix/zetta/.style={/pgfplots/axis base prefix={axis z base -21 prefix Z}},%
+ /pgfplots/z SI prefix/yotta/.style={/pgfplots/axis base prefix={axis z base -24 prefix Y}}%
+}
+%
+% The initial insert of labels. It utilizes the same method of implementation as
+% the default label typesetting.
+%
+\def\pgfplots@label@units#1{%
+ \pgfkeysgetvalue{/pgfplots/#1label}{\pgfplots@loc@TMPa}%
+ \pgfplots@loc@TMPa\space\pgfplots@label@units@@{#1}%
+}
+
+%
+% The main macro for typesetting the units. In steps:
+%
+% 1. Save the unit prefix, unit and the unit code in macros.
+%
+% 2. If the unit isn't present then don't utilize any of the things.
+% FIXME, should this also happen if the prefix is given? Currently it is not!
+%
+% 3. Defines \pgfplots@loc@TMPa as the real typeset label.
+% It inserts the <marking pre><unit prefix><unit><marking post>.
+% It is encapsulated within a $$ notation. Currently this is enough.
+% FIXME, maybe this should be changed to \ensuremath?
+%
+\def\pgfplots@label@units@@#1{%
+ \pgfkeysgetvalue{/pgfplots/#1\space unit prefix}{\pgfplots@loc@TMPb}%
+ \pgfkeysgetvalue{/pgfplots/#1\space unit}{\pgfplots@loc@TMPc}%
+ \ifx\pgfplots@loc@TMPc\pgfutil@empty%
+ \pgfutil@empty%
+ \else%
+ \ifx\pgfplots@loc@TMPb\pgfutil@empty%
+ $
+ \pgfplots@units@marking@pre
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/unit code/.@cmd}{{}{\pgfkeysvalueof{/pgfplots/#1\space unit}}}
+ \pgfplots@units@marking@post
+ $%
+ \else%
+ $
+ \pgfplots@units@marking@pre
+ \pgfplots@invoke@pgfkeyscode{/pgfplots/unit code/.@cmd}{{\pgfkeysvalueof{/pgfplots/#1\space unit prefix}}{\pgfkeysvalueof{/pgfplots/#1\space unit}}}
+ \pgfplots@units@marking@post
+ $%
+ \fi%
+ \fi%
+}
+\endinput
diff --git a/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplotsclickable.code.tex b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplotsclickable.code.tex
new file mode 100644
index 0000000000..8cebcd18c2
--- /dev/null
+++ b/graphics/pgf/contrib/pgfplots/tex/tikzlibrarypgfplotsclickable.code.tex
@@ -0,0 +1,24 @@
+%--------------------------------------------
+%
+% Package pgfplots, library for dynamic content in PDF files
+% (clickable plots)
+%
+% Copyright 2007/2008 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+\usetikzlibrary{pgfplots.clickable}
+\endinput
diff --git a/graphics/pgf/contrib/prooftrees/README b/graphics/pgf/contrib/prooftrees/README
new file mode 100644
index 0000000000..94b50f64ae
--- /dev/null
+++ b/graphics/pgf/contrib/prooftrees/README
@@ -0,0 +1,39 @@
+%% Copyright 2017 Clea F. Rees
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clea F. Rees.
+%
+% This work consists of all files listed in manifest.txt.
+
+This package supports drawing proof trees of the kind often used in
+introductory logic classes, especially those aimed at students without strong
+mathemtical backgrounds. Hodges (1991) is one example of a text which uses
+this system. When teaching such a system it is especially useful to annotate
+the tree with line numbers, justifications and explanations of branch
+closures.
+
+prooftrees provides a single environment, prooftree, and a variety of tools
+for annotating, customising and highlighting such trees. A cross-referencing
+system is provided for trees which cite line numbers in justifications for
+proof lines or branch closures.
+
+prooftrees is based on Forest and, hence, TikZ. The package requires version
+2.0.3 of Forest for expected results and will not work with version 1.
+
+The author is certain that some of her beliefs are false, but sure that her
+belief that prooftrees has bugs is not among them.
+
+Clea F. Rees
+ReesC21 <at> cardiff <dot> ac <dot> uk
+2017/02/08
+
+vim: set nospell:
diff --git a/graphics/pgf/contrib/prooftrees/manifest.txt b/graphics/pgf/contrib/prooftrees/manifest.txt
new file mode 100644
index 0000000000..8b50e4118f
--- /dev/null
+++ b/graphics/pgf/contrib/prooftrees/manifest.txt
@@ -0,0 +1,18 @@
+Copyright 2016 Clea F. Rees
+
+This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. The latest version of this license is in http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Clea F. Rees.
+
+This work consists of all files listed in manifest.txt.
+
+prooftrees.sty
+prooftrees.tex
+prooftrees_biber.bib
+manifest.txt
+README
+
+Derived files:
+prooftrees.pdf
diff --git a/graphics/pgf/contrib/prooftrees/prooftrees.pdf b/graphics/pgf/contrib/prooftrees/prooftrees.pdf
new file mode 100644
index 0000000000..5ab39f88c1
--- /dev/null
+++ b/graphics/pgf/contrib/prooftrees/prooftrees.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/prooftrees/prooftrees.sty b/graphics/pgf/contrib/prooftrees/prooftrees.sty
new file mode 100644
index 0000000000..fbe1ca2af3
--- /dev/null
+++ b/graphics/pgf/contrib/prooftrees/prooftrees.sty
@@ -0,0 +1,796 @@
+%% Copyright 2017 Clea F. Rees
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clea F. Rees.
+%
+% This work consists of all files listed in manifest.txt.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{svn-prov}
+\ProvidesPackageSVN{$Id: prooftrees.sty 5848 2017-02-09 02:15:38Z cfrees $}[v0.6 \revinfo]
+\RequirePackage{etoolbox}
+% define \prooftrees@enw to hold the name of the environment
+% default is to name the environment prooftree, this ensures backwards compatibility
+\newcommand*\prooftrees@enw{prooftree}
+% allow users to change the name to tableau using tableaux
+\DeclareOption{tableaux}{\renewcommand*\prooftrees@enw{tableau}}
+% just in case
+\DeclareOption{tableau}{\renewcommand*\prooftrees@enw{tableau}}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{forest}}
+% if \prooftree is not yet defined, set the name to prooftree; otherwise, use tableau to avoid conflict with bussproofs (which uses 'prooftree' rather than 'bussproof' as one might expect)
+\ifundef\prooftree{\renewcommand*\prooftrees@enw{prooftree}}{\renewcommand*\prooftrees@enw{tableau}}
+% let users override the default prooftree in case they need to load bussproofs later
+\ProcessOptions
+\RequirePackage{forest}[2016/12/04]
+\RequirePackage{amssymb}
+\newcommand*\linenumberstyle[1]{#1.}
+% currently, keys starting 'proof tree' and macros starting 'prooftree' or 'prooftree@' are intended for internal use only
+% this does not apply to the environment prooftree
+% other keys and macros are intended for use in documents
+% in particular, the style 'proof tree' is **NOT** intended to be used directly by the user and its direct use is **ABSOLUTELY NOT SUPPORTED IN ANY WAY, SHAPE OR FORM**; it is intended only for implicit use when the prooftree environment calls it
+\forestset{% don't use @ in register/option names - the documentation is lying when it says non-alphanumerics will be converted to underscores when forming pgfmath functions ;)
+ declare boolean register={line numbering},% line numbers
+ line numbering,% default is for line numbers
+ declare boolean register={justifications},% line justifications
+ not justifications,% default is for no line justifications (b/c there's no point in enabling this if the user doesn't specify any content)
+ declare boolean register={single branches},% single branches: explicitly drawn branches and a normal level distance between lone children and their parents
+ not single branches,% default is for lone children to be grouped with their parents
+ declare dimen register={line no width},% default will be set to the width of 99 wrapped in the line numbering style
+ line no width'=0pt,% fallback default is 0pt
+ declare dimen register={just sep},% amount by which to shift justifications away from the main tree
+ just sep'=1.5em,% default is 1.5em
+ declare dimen register={line no sep},% amount by which to shift line numbers away from the main tree
+ line no sep'=1.5em,
+ declare dimen register={close sep},% distance between closure symbols and any following annotation
+ close sep'=.75\baselineskip,
+ declare dimen register={proof tree line no x},
+ proof tree line no x'=0pt,
+ declare dimen register={proof tree justification x},
+ proof tree justification x'=0pt,
+ declare count register={proof tree rhif lefelau},% count the levels in the proof tree
+ proof tree rhif lefelau'=0,
+ declare count register={proof tree lcount},% count the line numbers (on the left)
+ proof tree lcount'=0,
+ declare count register={proof tree jcount},% count the justifications (on the right)
+ proof tree jcount'=0,
+ declare count register={line no shift},% adjustment for line numbering
+ line no shift'=0,
+ declare count register={proof tree aros},
+ proof tree aros'=0,
+ declare toks register={check with},
+ check with={\ensuremath{\checkmark}},
+ declare boolean register={check right},
+ check right,
+ check left/.style={not check right},
+ declare toks register={subs with},
+ subs with={\ensuremath{\backslash}},
+ declare boolean register={subs right},
+ subs right,
+ subs left/.style={not subs right},
+ declare toks register={close with},
+ close with={\ensuremath{\otimes}},
+ declare keylist register={close format},
+ close format={font=\scriptsize},
+ declare keylist register={close with format},
+ close with format={},
+ declare toks register={merge delimiter},
+ merge delimiter={\text{; }},
+ declare boolean register={just refs left},
+ just refs left,
+ just refs right/.style={not just refs left},
+ declare keylist register={just format},
+ just format={},
+ declare keylist register={line no format},
+ line no format={},
+ declare autowrapped toks register={highlight format},
+ highlight format={draw=gray, rounded corners},
+ declare keylist register={proof statement format},
+ proof statement format={},
+ declare keylist register={wff format},
+ wff format={},
+ declare boolean={proof tree justification}{0},
+ declare boolean={proof tree line number}{0},
+ declare boolean={grouped}{0},
+ declare boolean={proof tree phantom}{0},
+ declare boolean={highlight wff}{0},
+ declare boolean={highlight just}{0},
+ declare boolean={highlight line no}{0},
+ declare boolean={highlight line}{0},
+ Autoforward={highlight line}{highlight just, highlight wff, highlight line no},
+ declare boolean={proof tree toing}{0},
+ declare boolean={proof tree toing with}{0},
+ declare boolean={proof tree rhiant cymysg}{0},
+ declare boolean={proof tree rhifo}{1},
+ declare boolean={proof tree arweinydd}{0},
+ declare autowrapped toks={just}{},
+ declare toks={proof tree rhestr rhifau llinellau}{},
+ declare toks={proof tree close}{},
+ declare toks={proof tree rhestr rhifau llinellau cau}{},
+ declare autowrapped toks={just options}{},
+ declare autowrapped toks={line no options}{},
+ declare autowrapped toks={wff options}{},
+ declare autowrapped toks={line options}{},
+ Autoforward={line options}{just options={#1}, line no options={#1}, wff options={#1}},
+ declare count={proof tree toing by}{0},
+ declare count={proof tree cadw toing by}{0},
+ declare count={proof tree toooing}{0},
+ declare count={proof tree proof line no}{0},
+ % keylists for internal storage
+ declare keylist={proof tree jrefs}{},
+ declare keylist={proof tree crefs}{},
+ % keylists for use in stages
+ declare keylist={proof tree ffurf}{},
+ declare keylist={proof tree symud awto}{},
+ declare keylist={proof tree creu nodiadau}{},
+ declare keylist={proof tree nodiadau}{},
+ % > not documented yet, I think
+ % > now indicates use of process when it is the first token, preceding a list of instructions as opposed to pgfmath stuff
+ define long step={proof tree symud}{}{%
+ root,sort by={>{O}{level},>{_O<}{1}{n children}},sort'=descendants
+ },
+ define long step={proof tree cywiro symud}{}{%
+ root,if line numbering={n=2}{n=1},sort by={>{O}{level},>{_O<}{1}{n children}},sort'=descendants
+ },
+ define long step={proof tree camau}{}{% updated version of defn. from saso's code (forest2-saso-ptsz.tex) & http://chat.stackexchange.com/transcript/message/28321501#28321501
+ root,sort by={>{O}{y},>{Ow1+d}{x}{-##1}},sort'={filter={descendants}{>{OO!&}{proof tree rhifo}{proof tree phantom}}}% angen +d - gweler http://chat.stackexchange.com/transcript/message/28607212#28607212
+ },
+ define long step={proof tree wffs}{}{% coeden brif yn unig ar ôl i greu nodiadau
+ fake=root,if line numbering={n=2}{n=1},tree
+ },
+ checked/.style={% mark discharge with optional name substituted into existential
+ delay={%
+ if check right={%
+ content+'={\ \forestregister{check with}#1},
+ }{%
+ +content'={\forestregister{check with}#1\ },
+ },
+ },
+ },
+ subs/.style={% mark substitution of name into universal
+ delay={%
+ if subs right={%
+ content+'={\ \forestregister{subs with}#1},
+ }{%
+ +content'={\forestregister{subs with}#1\ },
+ },
+ },
+ },
+ close/.style={% this now uses nodes rather than a label to accommodate annotations; closing must be done before packing the tree to ensure that sufficient space is allowed for the symbol and any following annotation; the annotations must be processed before anything is moved to ensure that the correct line numbers are used later, even if the references are given as relative node names
+ if={%
+ >{__=}{#1}{}%
+ }{}{%
+ temptoksb={},
+ temptoksa={#1},
+ split register={temptoksa}{:}{proof tree close,temptoksb},
+ if temptoksb={}{}{%
+ split register={temptoksb}{,}{proof tree cref},
+ },
+ },
+ delay={%
+ append={% this node holds the closure symbol
+ [\forestregister{close with},
+ not proof tree rhifo,
+ proof tree phantom,
+ grouped,
+ no edge,
+ process keylist register=close with format,
+ before computing xy={% adjust the distance between the closure symbol and any annotation
+ delay={%
+ for children={%
+ l/.register=close sep,
+ },
+ },
+ },
+ before drawing tree={%
+ if={>{RR|}{line numbering}{justifications}}{%
+ proof tree proof line no/.option=!parent.proof tree proof line no,
+ }{},
+ },
+ if={%
+ >{__=}{#1}{}%
+ }{}{% don't create a second node if there's no annotation
+ delay={%
+ append={% this node holds the annotation, possibly including cross-references which will be relative to the node's grandparent
+ [,
+ not proof tree rhifo,
+ proof tree phantom,
+ grouped,
+ no edge,
+ process keylist register=close format,
+ if={%
+ >{O_=}{!parent,parent.proof tree close}{}%
+ }{}{content/.option=!{parent,parent}.proof tree close},
+ proof tree crefs/.option=!{parent,parent}.proof tree crefs,
+ delay={%
+ !{parent,parent}.proof tree crefs'={},
+ },
+ before drawing tree={%
+ if={>{RR|}{line numbering}{justifications}}{%
+ proof tree proof line no/.option=!{parent,parent}.proof tree proof line no,
+ }{},
+ },
+ ]%
+ },
+ },
+ },
+ ]%
+ },
+ },
+ },
+ proof tree line no/.style={% creates the line numbers on the left; note that it *does* matter that these are part of the tree, even though they do not need to be packed or to have xy computed; moreover, it matters that each is the child of the previous line number... so it won't do for them to *remain* siblings, even though that's fine when they are created.
+ anchor=base west,
+ no edge,
+ proof tree line number,
+ text width/.register=line no width,
+ x'/.register=proof tree line no x,
+ process keylist register=line no format,
+ delay={%
+ proof tree lcount'+=1,
+ tempcounta/.process={RRw2+n}{proof tree lcount}{line no shift}{##1+##2},
+ content/.process={Rw1}{tempcounta}{\linenumberstyle{##1}},% content i.e. the line number
+ name/.expanded={line no \foresteregister{tempcounta}},% name them so they can be moved later
+ typeset node,
+ if proof tree lcount>=3{% the initial location of most line numbers is incorrect and they must be moved
+ for previous={% move the line number below the previous line number
+ append/.expanded={line no \foresteregister{tempcounta}}
+ },
+ }{},
+ },
+ },
+ proof tree line justification/.style={% creates the justifications on the right but does not yet specify any content
+ anchor=base west,
+ no edge,
+ proof tree justification,
+ x'/.register=proof tree justification x,
+ process keylist register=just format,
+ delay={%
+ proof tree jcount'+=1,
+ tempcounta/.process={RRw2+n}{proof tree jcount}{line no shift}{##1+##2},
+ name/.expanded={just \foresteregister{tempcounta}},% name them so they can be moved
+ typeset node,% angen i osgoi broblemau 'da highlight just/line etc.
+ if proof tree jcount>=3{% correct the location as for the line numbers (cf. line no style)
+ for previous={%
+ append/.expanded={just \foresteregister{tempcounta}},
+ },
+ }{},
+ },
+ },
+ zero start/.style={%
+ line no shift'+=-1,
+ },
+ to prove/.style={% sets a proof statement
+ for root={%
+ before typesetting nodes={%
+ content={#1},
+ phantom=false,
+ baseline,
+ if line numbering={anchor=base west}{anchor=base},
+ process keylist register=proof statement format
+ },
+ before computing xy={%
+ delay={%
+ for children={%
+ l=1.5*\baselineskip,
+ },
+ },
+ },
+ },
+ },
+ proof tree/.style={% this style should **NOT** be used directly in a forest environment - see notes at top of this file
+ for tree={%
+ parent anchor=children,% manual 64
+ child anchor=parent,% manual 64
+ math content,
+ delay={%
+ if just={}{}{% if we've got justifications, make sure nodes are created for them later and split out cross-references so we identify the correct nodes before anything gets moved, allowing the use of relative node names
+ justifications,
+ temptoksa={},
+ split option={just}{:}{just,temptoksa},
+ if temptoksa={}{}{%
+ split register={temptoksa}{,}{proof tree jref},
+ },
+ },
+ if content={}{% if there's no proof statement
+ if level=0{}{%
+ shape=coordinate,
+ },
+ }{},
+ },
+ },
+ where level=0{%
+ for children={% no edges from phantom root or proof statement to children
+ before typesetting nodes={%
+ no edge,
+ },
+ },
+ delay={%
+ if content={}{phantom}{},
+ if line numbering={% create the line numbers if appropriate
+ parent anchor=south west,
+ if line no width={0pt}{%
+ line no width/.pgfmath={width("\noexpand\linenumberstyle{99}")},
+ }{},
+ }{},
+ },
+ proof tree creu nodiadau={% this is processed after computing xy
+ if={>{RR|}{line numbering}{justifications}}{% count proof lines if necessary
+ proof tree rhif lefelau'/.register=line no shift,
+ for proof tree camau={%
+ if level>=1{%
+ if={%
+ >{OO<}{y}{!back.y}%
+ }{%
+ proof tree rhif lefelau'+=1,
+ proof tree proof line no'/.register=proof tree rhif lefelau,
+ }{%
+ proof tree proof line no'/.register=proof tree rhif lefelau
+ },
+ }{},
+ },
+ }{},
+ if line numbering={% get the x position of line numbers and adjust the location and alignment of the proof statement
+ proof tree line no x/.min={>{OOw2+d}{x}{min x}{##1+##2}}{fake=root,descendants},
+ proof tree line no x-/.register=line no width,
+ proof tree line no x-/.register=line no sep,
+ for root={%
+ tempdimc/.option=x,
+ x'+/.register=proof tree line no x,
+ x'-/.option=min x,
+ },
+ prepend={% create line numbers on left
+ [,
+ proof tree line no,
+ % () to group are required here - otherwise, the -1 (or -2 or whatever) is silently ignored
+ repeat={((proof_tree_rhif_lefelau)-1)-(line_no_shift)}{% most are created in the wrong place but proof tree line no moves them later
+ delay n={proof_tree_lcount}{
+ append={[, proof tree line no]},
+ },
+ },
+ ]%
+ },
+ }{},
+ if justifications={% get the x position of justifications and create the nodes which will hold the justification content, if required
+ proof tree justification x/.max={>{OOw2+d}{x}{max x}{##1+##2}}{fake=root,descendants},
+ proof tree justification x+/.register=just sep,
+ append={%
+ [,
+ proof tree line justification,
+ repeat={((proof_tree_rhif_lefelau)-1)-(line_no_shift)}{% most are created in the wrong place but proof tree line justification moves them later
+ delay n={proof_tree_jcount}{%
+ append={[, proof tree line justification]},
+ },
+ }%
+ ]%
+ },
+ }{},
+ },
+ }{%
+ delay={%
+ if single branches={}{% automatically group lines if not using single branches
+ if n children=1{%
+ for children={%
+ grouped,
+ },
+ }{},
+ },
+ },
+ before typesetting nodes={% apply wff-specific highlighting and additional TikZ keys
+ process keylist register=wff format,
+ if highlight wff={node options/.register=highlight format}{},
+ node options/.option=wff options,
+ },
+ },
+ proof tree ffurf={% processed before proof tree symud auto: adjusts the alignment of lines when some levels of the tree are grouped together either whenever the number of children is only 1 or by applying the grouped style to particular nodes when specifying the tree
+ if single branches={%
+ where={%
+ >{O! _O< O &&}{grouped}{2}{level}{proof tree rhifo}%
+ }{%
+ if={%
+ >{_O= _O< &}{1}{!parent.n children}{1}{!parent,parent.n children}%
+ }{%
+ not tempboola,
+ for root/.process={Ow1}{level}{%
+ for level={##1}{%
+ if={%
+ >{_O< _O= &}{1}{!parent.n children}{1}{n}%
+ }{%
+ tempboola,
+ }{},
+ },
+ },
+ if tempboola={%
+ proof tree toing,
+ }{},
+ }{},
+ }{},
+ }{},
+ where={%
+ >{O _O< O &&}{grouped}{1}{level}{proof tree rhifo}%
+ }{% this searches for certain kinds of structural asymmetry in the tree and attempts to move lines appropriately in such cases - the algorithm is intended to be relatively conservative (not in the sense of 'cautious' or 'safe' but in the sense of 'reflection of the overlapping consensus of reasonable users' / 'what would be rationally agreed behind the prooftrees veil of ignorance'; apologies for the inconvenience if you are an unreasonable user)
+ not tempboola,
+ for root/.process={Ow1}{level}{%
+ for level={##1}{%
+ if={%
+ >{_O< _O= &}{1}{!parent.n children}{1}{n}%
+ }{%
+ tempboola,
+ }{},
+ },
+ },% Sašo: http://chat.stackexchange.com/transcript/message/27874731#27874731, see also http://chat.stackexchange.com/transcript/message/27874722#27874722
+ if tempboola={%
+ if n children=0{%
+ if={>{OO|}{!parent.proof tree toing}{!parent.proof tree toing with}}{% we're already moving the parent and the child will move with the parent, so we can just mark this and do nothing else
+ proof tree toing with,
+ }{%
+ for root/.process={Ow1}{level}{% don't move a terminal node even in case of asymmetry: instead, create a separate proof line for terminal nodes on this level which are only children, by moving children with siblings on this level down a proof line, without altering their physical location
+ % this makes the tree more compact and stops it looking silly
+ for level={##1}{%
+ if={%
+ >{_O< _O= &}{1}{!parent.n children}{1}{n}%
+ }{% this just serves to keep the levels nice for the sub-tree and ensure things align. We need this because we want to skip a level here to allow room for the terminal node in the other branch
+ for parent={%
+ if proof tree rhiant cymysg={}{% we mark the parent to avoid increasing the line number of its descendants more than once
+ proof tree rhiant cymysg,
+ for descendants={%
+ proof tree toing by'+=1,
+ },
+ },
+ },
+ }{},
+ },
+ },% Sašo: http://chat.stackexchange.com/transcript/message/27874731#27874731, see also http://chat.stackexchange.com/transcript/message/27874722#27874722
+ },
+ no edge,
+ }{%
+ if={%
+ >{_O= _O< &}{1}{!parent.n children}{1}{!parent,parent.n children}%
+ }{% don't try to move if the node has more than 1 child or the grandparent has no more than that; otherwise, mark the node as one to move - we figure out where to move it later
+ proof tree toing,
+ }{no edge},
+ },
+ }{no edge},
+ }{},
+ },
+ proof tree symud awto={% processed before typesetting nodes: if _this_ could be done during packing, that would be very nice, even if the previous stuff can't be
+ proof tree aros'=0,
+ for proof tree symud={%
+ if proof tree toing={% this relies on an experimental feature of forest, which is anffodus
+ for nodewalk={fake=parent,fake=sibling,descendants}{do dynamics},
+ delay n={\foresteregister{proof tree aros}}{%
+ tempcounta/.max={>{OOOOw4+n}{level}{proof tree toing by}{proof tree toooing}{proof tree rhifo}{(##1+##2+##3)*##4}}{parent,sibling,descendants},
+ if tempcounta>=1{%
+ if={%
+ >{Rw1+n OOw2+n >}{tempcounta}{##1+1}{level}{proof tree toing by}{##1+##2}%
+ }{%
+ tempcounta-/.option=level,
+ tempcounta'+=1,
+ move by/.register=tempcounta,
+ }{no edge},
+ }{no edge},
+ },
+ proof tree aros'+=4,
+ }{},
+ },
+ },
+ proof tree nodiadau={% processed after proof tree creu nodiadau and before before drawing tree: creates annotation content which may include cross-references, applies highlighting and additional TikZ keys to line numbers, justifications and to wffs where specified for entire proof lines
+ where proof tree crefs={}{}{% resolve cross-refs in closures
+ split option={proof tree crefs}{,}{proof tree rhif llinell cau},
+ if content={}{%
+ content/.option=proof tree rhestr rhifau llinellau cau,
+ }{%
+ content+/.process={_O}{\ }{proof tree rhestr rhifau llinellau cau},
+ },
+ typeset node,
+ },
+ if line numbering={% apply highlighting and additional TikZ keys to line numbers; initial alignment of numbers with proof lines
+ for proof tree wffs={%
+ if highlight line no={%
+ for name/.process={Ow1OOOw3}{proof tree proof line no}{line no ##1}{proof tree proof line no}{line no options}{y}{% from Sašo's anti-pgfmath version - rhaid ddweud proof tree proof line no yn ddwywaith ?! dim yn bosibl i ailddefnyddio'r gyntaf ?!
+ node options/.register=highlight format,
+ ##2,
+ y'=##3,
+ proof tree proof line no'=##1,
+ typeset node,
+ }%
+ }{%
+ if line no options={}{%
+ if proof tree phantom={}{%
+ for name/.process={Ow1OOw2}{proof tree proof line no}{line no ##1}{proof tree proof line no}{y}{%
+ y'=##2,
+ proof tree proof line no'=##1,
+ }%
+ },
+ }{%
+ for name/.process={Ow1OOOw3}{proof tree proof line no}{line no ##1}{proof tree proof line no}{line no options}{y}{%
+ ##2,
+ y'=##3,
+ proof tree proof line no'=##1,
+ typeset node,
+ }%
+ },
+ },
+ },
+ }{},
+ if justifications={% initial alignment of justifications with proof lines, addition of content, resolution of cross-references and application of highlighting and additional TikZ keys
+ for proof tree wffs={%
+ if just={}{%
+ if proof tree phantom={}{%
+ for name/.process={Ow1OOw2}{proof tree proof line no}{just ##1}{proof tree proof line no}{y}{% from Sašo's anti-pgfmath version - rhaid ddweud proof tree proof line no yn ddwywaith ?! dim yn bosibl i ailddefnyddio'r gyntaf ?!
+ y'=##2,
+ proof tree proof line no'=##1,
+ }%
+ },
+ }{% puts the content of the justifications into the empty justification nodes on the right; because this is done late, the nodes need to be typeset again
+ if proof tree jrefs={}{}{% resolve cross-refs in justifications
+ split option={proof tree jrefs}{,}{proof tree rhif llinell},
+ if just refs left={%
+ +just/.process={O_}{proof tree rhestr rhifau llinellau}{\ },
+ }{%
+ just+/.process={_O}{\ }{proof tree rhestr rhifau llinellau},
+ },
+ },
+ if highlight just={% apply highlighting and additional TikZ keys to justifications, set content and merge any conflicting specifications, warning user if appropriate
+ for name/.process={Ow1OOOOw4}{proof tree proof line no}{just ##1}{proof tree proof line no}{just}{just options}{y}{% from Sašo's anti-pgfmath version - rhaid ddweud proof tree proof line no yn ddwywaith ?! dim yn bosibl i ailddefnyddio'r gyntaf ?!
+ if={%
+ >{O_= O_= |}{content}{}{content}{##2}%
+ }{% gweler isod - o gôd Sašo
+ content={##2},
+ }{%
+ content+'={\foresteregister{merge delimiter}##2},
+ TeX={\PackageWarning{prooftrees}{Merging conflicting justifications for line ##1! Please examine the output carefully and use "move by" to move lines later in the proof if required. Details of how to do this are included in the documentation.}},
+ },
+ node options/.register=highlight format,
+ ##3,
+ y'=##4,
+ proof tree proof line no'=##1,
+ typeset node,
+ }% do NOT put a comma here!
+ }{%
+ for name/.process={Ow1OOOOw4}{proof tree proof line no}{just ##1}{proof tree proof line no}{just}{just options}{y}{% from Sašo's anti-pgfmath version - rhaid ddweud proof tree proof line no yn ddwywaith ?! dim yn bosibl i ailddefnyddio'r gyntaf ?!
+ if={% from Sašo's anti-pgfmath version - I appreciate this is faster, but why is it *required*?!
+ >{O_= O_= |}{content}{}{content}{##2}%
+ }{%
+ content={##2},
+ }{%
+ content+'={\foresteregister{merge delimiter}##2},
+ TeX={\PackageWarning{prooftrees}{Merging conflicting justifications for line ##1! Please examine the output carefully and use "move by" to move lines later in the proof if required. Details of how to do this are included in the documentation.}},
+ },
+ ##3,
+ y'=##4,
+ proof tree proof line no'=##1,
+ typeset node,
+ }% do NOT put a comma here!
+ }
+ },
+ },
+ }{},
+ for proof tree wffs={% apply highlighting and TikZ keys which are specified for whole proof lines to all applicable wffs
+ if proof tree phantom={}{%
+ if highlight line={%
+ for proof tree wffs/.process={OOw2}{proof tree proof line no}{line options}{%
+ if proof tree proof line no={##1}{%
+ node options/.register=highlight format,
+ ##2,
+ }{}%
+ },
+ }{%
+ for proof tree wffs/.process={OOw2}{proof tree proof line no}{line options}{%
+ if proof tree proof line no={##1}{##2}{},
+ },
+ },
+ delay={typeset node},
+ },
+ },
+ },
+ before packing={% initial alignment so we don't get proof line numbers incrementing due to varying height/depth of nodes, for example - when single branches is true and few nodes are grouped, this is also a reasonable first approximation
+ for tree={%
+ tier/.process={OOw2+nw1}{level}{proof tree toing by}{##1+##2}{tier ##1},
+ },
+ for root={% if there's no proof statement, adjust the alignment of the proof relative to the surrounding text
+ if content={}{%
+ !{n=1}.baseline,
+ }{},
+ },
+ },
+ before computing xy={% adjust distance between levels for grouped nodes after tree is packed
+ for tree={%
+ if={%
+ >{O _O< &}{grouped}{1}{level}%
+ }{l'=\baselineskip}{},
+ },
+ },
+ before drawing tree={% set final alignment for proof lines which have been moved by effectively grouping lead nodes and moving their subtrees accordingly - this requires that each line number and justification be the child of the previous one and that if justifications are used at all, then justifications exist for all proof lines, even if empty
+ if={>{RR|R!&}{line numbering}{justifications}{single branches}}{% correct the alignment of move by lines when single branches is false - o fersiwn anti-pgfmath Sašo
+ tempdimc'=0pt,% track cumulative adjustments to line numbers and justifications
+ for proof tree cywiro symud={%
+ if proof tree arweinydd={% only examine the lead nodes - their descendants need the same (cumulative) adjustments
+ tempdima'/.option=y,
+ if line numbering={% if there are line numbers, we use the previous line number's vertical position
+ for name/.process={Ow1+nw1}{proof tree proof line no}{##1-1}{line no ##1}{% arafach ?
+ tempdimb'/.option=y,
+ }%
+ }{% if not, we use the previous justification's vertical position
+ for name/.process={Ow1+nw1}{proof tree proof line no}{##1-1}{just ##1}{% arafach ?
+ tempdimb'/.option=y,
+ }%
+ },
+ for parent={% the parent (which will be a phantom) gets aligned with the previous line
+ y'/.register=tempdimb,
+ },
+ if tempdimb<={0pt}{% adjust so we align this line below the previous one (assuming we're going down)
+ tempdimb'-=\baselineskip,
+ }{%
+ tempdimb'+=\baselineskip,
+ },
+ tempdimb'-/.register=tempdima,% how far are we moving?
+ for tree={% adjust this node and all descendants
+ y'+/.register=tempdimb,
+ },
+ tempdimb'-/.register=tempdimc,% deduct any tracked cumulative adjustments to line numbers and justifications
+ if line numbering={% adjust the line numbers, if any
+ for name/.process={Ow1}{proof tree proof line no}{line no ##1}{%
+ for tree={%
+ y'+/.register=tempdimb,
+ },
+ }%
+ }{},
+ if justifications={% adjust the justifications, if any
+ for name/.process={Ow1}{proof tree proof line no}{just ##1}{% t. 60 manual 2.1 rc1
+ for tree={%
+ y'+/.register=tempdimb,
+ },
+ }%
+ }{},
+ tempdimc'/.register=tempdimb,% add the adjustment just implemented to the tracked cumulative adjustments for line numbers and/or justifications
+ }{},
+ },
+ }{},
+ },
+ },
+ move by/.style={% this implements both the automated moves prooftrees finds necessary and any additional moves requested by the user - more accurately, it implements initial moves, which may get corrected later (e.g. to avoid skipping numbers or creating empty proof lines, which we assume aren't wanted)
+ if={
+ >{_n<}{0}{#1}%
+ }{% only try to move the node if the target line number exceeds the one i.e. the line number is to be positively incremented
+ proof tree cadw toing by/.option=proof tree toing by,
+ proof tree arweinydd,
+ for tree={%
+ if={%
+ >{_n<}{1}{#1}%
+ }{% track skipped lines for which we won't be creating phantom nodes
+ proof tree toing by+=#1-2,
+ proof tree toooing'+=1,
+ }{},
+ },
+ delay={%
+ replace by={% insert our first phantom
+ [,
+ if={%
+ >{_n<}{1}{#1}%
+ }{%
+ child anchor=parent,
+ parent anchor=parent,
+ }{%
+ child anchor=children,
+ parent anchor=children,
+ },
+ proof tree phantom,
+ edge path/.option=!last dynamic node.edge path,% Sašo Živanović: http://chat.stackexchange.com/transcript/message/27990955#27990955
+ edge/.option=!last dynamic node.edge,
+ append,
+ before drawing tree={%
+ if={>{RR|}{line numbering}{justifications}}{%
+ proof tree proof line no/.process={Ow1+n}{!parent.proof tree proof line no}{##1+1},
+ }{},
+ },
+ if={%
+ >{_n<}{1}{#1}%
+ }{% if we are moving by more than 1, we insert a second phantom so that a node with siblings which is moved a long way will not get a unidirectional edge but an edge which looks similar to others in the tree (by default, sloping down a line or so and then plummeting straight down rather than a sharply-angled steep descent)
+ delay={%
+ append={%
+ [,
+ child anchor=parent,
+ parent anchor=parent,
+ proof tree toing by=#1-2+proof_tree_cadw_toing_by,
+ proof tree phantom,
+ edge path/.option=!last dynamic node.edge path,
+ edge/.option=!last dynamic node.edge,
+ before drawing tree={%
+ if={>{RR|}{line numbering}{justifications}}{%
+ proof tree proof line no/.process={Ow1+n}{!n=1.proof tree proof line no}{##1-1},
+ }{},
+ },
+ append=!sibling,
+ ]%
+ },
+ },
+ }{%
+ if single branches={}{%
+ delay={%
+ for children={%
+ no edge,
+ },
+ },
+ },
+ },
+ ]%
+ },
+ },
+ }{%
+ TeX/.process={Ow1}{name}{\PackageWarning{prooftrees}{Line not moved! I can only move things later in the proof. Please see the documentation for details. ##1}},
+ },
+ },
+ proof tree cref/.style={% get the names of nodes cross-referenced in closure annotations for use later
+ proof tree crefs+/.option=#1.name,
+ },
+ proof tree rhif llinell cau/.style={% get the proof line numbers of the cross-referenced nodes in closure annotations, using the list of names created earlier
+ if proof tree rhestr rhifau llinellau cau={}{}{%
+ proof tree rhestr rhifau llinellau cau+={,\,},
+ },
+ proof tree rhestr rhifau llinellau cau+/.option=#1.proof tree proof line no,
+ },
+ proof tree jref/.style={% get the names of nodes cross-referenced in justifications for use later
+ proof tree jrefs+/.option=#1.name,
+ },
+ proof tree rhif llinell/.style={% get the proof line numbers of the cross-referenced nodes in justifications, using the list of names created earlier
+ if proof tree rhestr rhifau llinellau={}{}{%
+ proof tree rhestr rhifau llinellau+={,\,},
+ },
+ proof tree rhestr rhifau llinellau+/.option=#1.proof tree proof line no,% works according to Sašo's anti-pgfmath version
+ },
+ proof tree dadfygio/.style={% style for use in debugging moves which displays information about nodes in the tree
+ before packing={%
+ for tree={%
+ label/.process={OOOw3}{level}{proof tree toing by}{id}{[red,font=\tiny,inner sep=0pt,outer sep=0pt, anchor=south]below:##1/##2/##3},
+ },
+ },
+ before drawing tree={%
+ for tree={%
+ delay={%
+ tikz+/.process={Ow1}{proof tree proof line no}{\node [anchor=west, font=\tiny, text=blue, inner sep=0pt] at (.east) {##1}; },
+ },
+ },
+ },
+ },
+}
+\environbodyname\prooftreebody
+\bracketset{action character=@}
+\NewEnviron{\prooftrees@enw}[1]{% \forest/\endforest from egreg's answer at http://tex.stackexchange.com/a/229608/
+ \forest
+ (%
+ stages={% customised definition of stages - we don't use any custom stages, but we do use several custom keylists, where the processing order of these is critical
+ for root'={% nothing is removed from the standard forest definition - we only change it by adding to it
+ process keylist register=default preamble,
+ process keylist register=preamble,
+ },
+ process keylist=given options,
+ process keylist=before typesetting nodes,
+ % first two additions: process two custom keylists after before typesetting nodes and before typesetting nodes
+ process keylist=proof tree ffurf,
+ process keylist=proof tree symud awto,
+ typeset nodes stage,
+ process keylist=before packing,
+ pack stage,
+ process keylist=before computing xy,
+ compute xy stage,
+ % second two additions: process two custom keylists after computing xy and before before drawing tree
+ process keylist=proof tree creu nodiadau,
+ process keylist=proof tree nodiadau,
+ process keylist=before drawing tree,
+ draw tree stage,
+ },
+ )%
+ proof tree,% apply the proof tree style, which sets keylists from both forest's defaults and our custom additions
+ #1,% insert user's preamble, empty or otherwise - this allows the user both to override our defaults (e.g. by setting a non-empty proof statement or a custom format for line numbers) and to customise the tree using forest's facilities in the usual way - BUT customisations of the latter kind may or may not be effective, may or may not have undesirable - not to say chaotic - consequences, and may or may not cause compilation failures (structural changes, in particular, should be avoided completely)
+ [, name=proof statement @\prooftreebody]%
+ \endforest}
+\endinput
+%% end prooftrees.sty
diff --git a/graphics/pgf/contrib/prooftrees/prooftrees.tex b/graphics/pgf/contrib/prooftrees/prooftrees.tex
new file mode 100644
index 0000000000..bf00703e2f
--- /dev/null
+++ b/graphics/pgf/contrib/prooftrees/prooftrees.tex
@@ -0,0 +1,1953 @@
+%% Copyright 2017 Clea F. Rees
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clea F. Rees.
+%
+% This work consists of all files listed in manifest.txt.
+%%
+% arara: pdflatex: { synctex: true, shell: false }
+% biber --output_format=bibtex --output_resolve prooftrees.bcf to generate .bib for upload
+% sed -i '/1977/s/DATE/YEAR'
+%%
+\pdfminorversion=7
+\RequirePackage{svn-prov}
+\ProvidesFileSVN{$Id: prooftrees.tex 5848 2017-02-09 02:15:38Z cfrees $}[v0.6 \revinfo]
+\GetFileInfoSVN*
+\let\prooftreesdocversion\fileversion
+\let\prooftreesdocbase\filebase
+\let\prooftreesdocinfo\fileinfo
+\let\prooftreesdocdate\filedate
+% BEGIN preamble
+\documentclass[10pt,british,a4paper]{ltxdoc}
+\usepackage{babel,geometry,pageslts,fancyhdr}
+\usepackage[utf8]{inputenc}
+\usepackage{csquotes}
+ \MakeAutoQuote{‘}{’}
+ \MakeAutoQuote*{“}{â€}
+\usepackage[rm={lining},sf={lining},tt={tabular,lining,monowidth}]{cfr-lm}
+\usepackage{microtype}
+\usepackage[section]{placeins}
+\usepackage[citestyle=authoryear-comp,bibstyle=authoryear,mergedate=basic,isbn=false,url=true,sortcites=true,backend=biber,mincrossrefs=6]{biblatex}
+% \bibliography{abbrv, authors, journals-series, pub, lleoedd, phil, ref}
+\bibliography{prooftrees_biber.bib}% generate for upload (gweler uchod)
+\usepackage{etoolbox,verbatim,parskip,changepage,titling,makeidx}
+\usepackage[dvipsnames,svgnames,rgb,x11names]{xcolor}
+\usepackage{prooftrees}
+\usepackage{mathtools,turnstile,pifont}
+\newcommand*{\fycheck}{\text{\ding{52}}}
+\newcommand*{\fycross}{\text{\ding{56}}}
+\usetikzlibrary{decorations.pathreplacing,arrows.meta,positioning,calc,arrows.meta,fit,backgrounds,tikzmark}
+\tikzset{%
+ nodiad/.style={text=#1, draw=#1, font=\footnotesize\scshape, align=left, shorten >=-1.5pt, shorten <=-1.5pt, {Circle[width=3pt, length=3pt, fill=#1]}-{Circle[width=3pt, length=3pt, fill=#1]}, fill=none},
+ grwp/.style={fill opacity=.25, fill=#1, rounded corners, draw=#1},
+ post grwp/.style={fill=white, postaction={fill opacity=.25, fill=#1}, draw=#1, rounded corners},
+}
+\forestset{%
+ nyth/.style n args=3{%
+ tikz+={%
+ \pgfmathsetmacro\lliw{#2*100/14}
+ \scoped[on background layer]\node [fit=(.west) (.east) (!F) (!L) (!1) (!11) (!l) (!ll) #1 (#3#2.center), inner xsep=28-2*#2 pt, inner ysep=0pt, draw=WildStrawberry!\lliw!blue, rounded corners] {};
+ },
+ },
+}
+\usepackage{tcolorbox}
+\tcbuselibrary{listings,xparse,breakable}% if you use skins, you need to disable externalisation for boxes which use the relevant options - gweler nodiadau/tex/tex.se/tcolorbox-coursepacket-exp.tex
+\usepackage[%
+ loadHyperref=true,
+ createIndexEntries=false,
+]{doctools}
+\usepackage{bookmark}
+\hypersetup{%
+ colorlinks=true,
+ citecolor={moss},
+ extension=pdf,
+ linkcolor={strawberry},
+ linktocpage=true,
+ pdfcreator={TeX},
+ pdfproducer={pdfeTeX},
+ urlcolor={blueberry}%
+}
+\usepackage{cleveref}
+\makeatletter
+\renewcommand*\Describe@Macro[1]{\endgroup
+ \marginpar{%
+ \raggedleft\PrintDescribeMacro{#1}\par
+ \PrintLabelName[\macrolabelfont]{\macrolabelname}%
+ }%
+ \expandafter\prooftrees@index{\macrolabelname}{\protect\verb \protect #1}\@esphack\ignorespaces}
+\renewcommand*\Describe@Env[1]{\endgroup
+ \marginpar{%
+ \raggedleft\PrintDescribeMacro{#1}\par
+ \PrintLabelName[\macrolabelfont]{\envlabelname}%
+ }%
+ \expandafter\prooftrees@index{\envlabelname}{#1}\@esphack\ignorespaces}
+\newcommand*\DescribeKey{\leavevmode\@bsphack
+ \begingroup\MakePrivateLetters\Describe@Key}
+\newcommand*\Describe@Key[2][key]{\endgroup
+ \marginpar{%
+ \raggedleft\PrintDescribeMacro{#2}\par
+ \PrintLabelName[\macrolabelfont]{\csname #1labelname\endcsname}%
+ }%
+ \edef\tempa{\csname #1labelname\endcsname}%
+ \expandafter\prooftrees@index{\tempa}{#2}\@esphack\ignorespaces}
+\newcommand*\DescribeKeys{\leavevmode\@bsphack
+ \begingroup\MakePrivateLetters\Describe@Keys}
+\newif\ifcyntafun
+\newcommand*\Describe@Keys[2][key]{\endgroup
+ \renewcommand*\do[1]{\ifcyntafun ##1\else\\##1\fi\cyntafunfalse}%
+ \cyntafuntrue
+ \marginpar{%
+ \raggedleft\PrintDescribeMacro{ % peid â dileu'r gwagle hwn!!
+ \expandafter\docsvlist{#2}%
+ }\par
+ \PrintLabelName[\macrolabelfont]{\csname #1labelname\endcsname}%
+ }%
+ \edef\tempa{\csname #1labelname\endcsname}%
+ \renewcommand*\do[1]{\expandafter\prooftrees@index{\tempa}{##1}}%
+ \expandafter\docsvlist{#2}\@esphack\ignorespaces}
+\def\get@first#1,#2\@null{#1}
+\def\get@rest#1,#2\@null{#2}
+\newcommand*\vals[1]{%
+ \edef\tempa{\expandafter\get@first #1\@null}%
+ \edef\tempb{\expandafter\get@rest #1\@null}%
+ \renewcommand*\do[1]{\textbar ##1}%
+ {\ttfamily = \tempa
+ \expandafter\docsvlist{\tempb}%
+ }%
+}
+\newcommand*\val[1]{{\ttfamily = \meta{#1}}}
+\newcommand*\valmarg[1]{{\ttfamily = \marg{#1}}}
+\newcommand*\pkg[1]{\textsf{#1}}
+\DeclareRobustCommand\macrolabelfont{\normalfont\footnotesize\em\normalcolor}
+\newcommand*\macrolabelname{macro}
+\newcommand*\PrintLabelName[2][\normalfont\normalsize\normalcolor]{#1#2}
+\newcommand*\envlabelname{environment}
+\newcommand*\keylabelname{key}
+\newcommand*\fkeylistlabelname{Forest keylist}
+\newcommand*\fregkeylistlabelname{Forest keylist register}
+\newcommand*\foptkeylistlabelname{Forest keylist option}
+\newcommand*\freglabelname{Forest register}
+\newcommand*\foptlabelname{Forest option}
+\newcommand*\fregdimlabelname{Forest dimension register}
+\newcommand*\fregcountlabelname{Forest count register}
+\newcommand*\fregtokslabelname{Forest toks register}
+\newcommand*\fopttokslabelname{Forest toks option}
+\newcommand*\fregboollabelname{Forest boolean register}
+\newcommand*\foptboollabelname{Forest boolean option}
+\newcommand*\fregautotokslabelname{Forest autowrapped toks register}
+\newcommand*\foptautotokslabelname{Forest autowrapped toks option}
+\newcommand*\fstylelabelname{Forest style}
+\newcommand*\pkgoptlabelname{package option}
+\newcommand*\pkglabelname{package}
+\let\PrintDescribeKey\PrintDescribeMacro
+\newcommand*\keyval[1]{\texttt{#1}}
+\NewDocumentCommand\keyname { s O {key} m }{%
+ \texttt{#3}%
+ \IfBooleanTF {#1}{}{%
+ \edef\tempa{\csname #2labelname\endcsname}%
+ \expandafter\prooftrees@index{\tempa}{#3}%
+ }%
+}
+\def\prooftrees@index#1#2{%
+ \index{\doctools@indexHeadFont{#1s}!#2}%
+}
+\renewenvironment{theindex}
+{%
+ \twocolumn[\section*{\indexname}
+ \emph{%
+ Features are sorted by kind.
+ Page references are given for both definitions and comments on use.}\bigskip
+ ]%
+ \markboth{\indexname}%
+ {\indexname}%
+ \pagestyle{fancyplain}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem}
+{}
+\makeatother
+\lstdefinestyle{lstcoeden}{% modified from style used by doctools.sty for the latexcode environment
+ style=lstDocStyleBase,
+ numbers=none,
+ stringstyle=\color{doc@stringcolor},
+ keywordstyle=\color{doc@keywordcolor},
+ commentstyle=\color{doc@commentcolor},
+ frame=none,
+}
+\geometry{headheight=12pt,marginparwidth=45mm,hmarginratio=4:1,vscale=.8,hscale=.7,verbose}
+\newlength\tewadjust
+\setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}
+\tcbset{%
+ coeden/.style={
+ colback=doc@demo@backcolor,
+ colframe=doc@rulecolor,
+ halign=center,
+ fonttitle=\sffamily\plstyle\bfseries,
+ sharpish corners,
+ list entry={\protect\numberline{\thetcbcounter\textbar}#1},
+ title={\fbox{\plstyle\thetcbcounter}\hskip 1.5em #1},
+ float,
+ floatplacement={!tbp},
+ },
+ coeden dew/.style={
+ coeden=#1,
+ grow to left by=\tewadjust,
+ },
+ cod coeden/.style={
+ coeden=#1,
+ listing style=lstcoeden,
+ },
+ cod coeden dew/.style={
+ cod coeden=#1,
+ grow to left by=\tewadjust,
+ },
+ every float=\centering,
+}
+\NewTColorBox[auto counter, crefname={box}{boxes}, Crefname={Box}{Boxes},]{coeden}{s O {} m }
+{%
+ IfBooleanTF={#1}{coeden dew=#3}{coeden=#3},
+ #2,
+}
+\NewTCBListing[use counter from=coeden, crefname={box}{boxes}, Crefname={Box}{Boxes}]{codcoeden}{ s O {} m }
+{%
+ IfBooleanTF={#1}{cod coeden dew=#3}{cod coeden=#3},
+ listing side text,
+ halign lower=center,
+ #2,
+}
+\NewTCBListing[use counter from=coeden, crefname={box}{boxes}, Crefname={Box}{Boxes}]{codcoedenhir}{ s O {} m }
+{%
+ IfBooleanTF={#1}{cod coeden dew=#3}{cod coeden=#3},
+ listing above text,
+ halign lower=center,
+ #2,
+}
+\newcommand*{\tnot}{\ensuremath{\mathord{\sim}}}
+\newcommand*{\lif}{\ensuremath{\mathbin{\rightarrow}}}
+\newcommand*{\liff}{\ensuremath{\mathbin{\leftrightarrow}}}
+\DeclareMathSymbol{\aand}{\mathbin}{operators}{38}
+\newcommand*\TikZ{Ti\emph{k}Z}
+\newcommand*{\elim}{\,\text{E}}
+\newcommand*\wff{\emph{wff}}
+\newcounter{lliw}
+\setcounter{lliw}{0}
+\newcounter{rhiflliwnyth}
+\setcounter{rhiflliwnyth}{0}
+\def\rhiflliw{14}
+\colorlet{fylliw}{WildStrawberry!\rhiflliw!blue}
+\NewDocumentCommand\nyth { s o }{%
+ \IfBooleanTF {#1}{%
+ \stepcounter{lliw}%
+ }{}%
+ \IfValueTF {#2}{%
+ \setcounter{rhiflliwnyth}{#2}%
+ }{%
+ \setcounter{rhiflliwnyth}{\value{lliw}}%
+ }%
+ \pgfmathsetmacro\rhiflliw{int(\value{rhiflliwnyth}*100/14)}%
+ \colorlet{fylliw}{WildStrawberry!\rhiflliw!blue}%
+ \tikz[baseline=(a.base)]{%
+ \node (a) [circle, fill=fylliw, inner sep=0pt, font=\sffamily, text width=12pt, text depth=0pt, text centered, text=white] {\arabic{rhiflliwnyth}};
+ }%
+}
+\NewDocumentCommand\bocsnyth { O {} }{%
+ \tikz[baseline=(a.base)]{\node (a) [rounded corners, draw=fylliw, text width=15pt, text height=10pt, inner sep=0pt] {#1};
+ }%
+}
+\renewcommand\maketitlehookb{%
+ \begin{center}
+ Version \prooftreesdocversion{} \prooftreesdocinfo
+ \end{center}%
+}
+\pagestyle{fancy}
+\fancyhf{}
+\fancyhf[lh]{\textit{\leftmark}}
+\fancyhf[rh]{\textit{\rightmark}}
+\fancyhf[cf]{\textit{--- \thepage{} of \lastpageref*{LastPage} ---}}
+\fancypagestyle{fancyplain}{%
+ \fancyhf{}%
+ \fancyhf[lh]{\textit{\leftmark}}%
+ \renewcommand*\headrulewidth{0pt}%
+ \fancyhf[cf]{\textit{--- \thepage{} of \lastpageref*{LastPage} ---}}}
+\fancypagestyle{plain}{%
+ \fancyhf{}%
+ \renewcommand*\headrulewidth{0pt}%
+ \fancyhf[cf]{\textit{--- \thepage{} of \lastpageref*{LastPage} ---}}}
+\patchcmd{\sectionmark}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
+\patchcmd{\tableofcontents}{\MakeUppercase}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
+\patchcmd{\tableofcontents}{\MakeUppercase\contentsname}{}{\typeout{sectionmark patched OK!}}{\typeout{sectionmark patch failed!}}
+% Really, why on Earth does Biblatex do something this obnoxious?
+% It is all for unilaterally declaring standard LaTeX macros 'deprecated' and trying to replace them with its own less convenient versions.
+% It could at least do us the favour of holding some of its much less defensible and much more inconvenient design decisions in equal contempt!!
+\defbibheading{bibliography}[\refname]{%
+ \section*{#1}%
+ \markboth{#1}{#1}}
+
+\makeindex
+
+% END preamble
+\begin{document}
+\title{\prooftreesdocbase}%
+\author{Clea F. Rees\texorpdfstring{\thanks{reesc21 <at> cardiff <dot> ac <dot> uk}}{}}%
+\date{\prooftreesdocdate}%
+\newgeometry{headheight=12pt,scale=.8,marginparwidth=0pt,marginparsep=0pt}%
+\savegeometry{safonol}%
+\setlength\tewadjust{\marginparwidth+\marginparsep}%
+\fancyheadoffset[lh]{0pt}% REQUIRED - do NOT remove this line!!
+\pagenumbering{arabic}%
+\maketitle
+\bigskip
+
+\begin{abstract}
+ \noindent \keyname[pkg]{\pkg{prooftrees}} is a \LaTeXe{} package, based on \keyname[pkg]{\pkg{forest}}, designed to support the typesetting of proof trees in styles sometimes used in teaching introductory logic courses, especially those aimed at students without a strong background in mathematics.
+ One textbook which uses proofs of this kind is \textcite{hodges-logic}.
+\end{abstract}
+\bigskip
+
+\begin{figure}[!b]
+\begin{adjustwidth}{-2em}{-2em}
+ \centering
+ \begin{minipage}[t]{.475\linewidth}
+ \begin{prooftree}
+ {
+ to prove={S \liff \lnot T, T \liff \lnot R \sststile{\mathcal{L}}{} S \liff R},
+ highlight format={text=WildStrawberry},
+ line no sep=.35em,
+ just sep=.35em,
+ wff format={Purple4},
+ line no format={Purple4},
+ just format={Purple4},
+ close format={Purple4},
+ for tree={edge=Purple4},
+ close with format={Purple4},
+ where level=0{%
+ tikz+={%
+ \draw [Purple4, thick] (current bounding box.north west) rectangle (current bounding box.south east);
+ \draw [Purple4, semithick] (.south -| current bounding box.west) -- (.south -| current bounding box.east);
+ },
+ }{},
+ }
+ [{S \liff \lnot T}, checked, just=pr.
+ [T \liff \lnot R, checked, just=pr.
+ [\lnot(S \liff R), checked, just=$\lnot$ conc.
+ [S, just={$\liff$\elim:!uuu}
+ [\lnot T , just={$\liff$\elim:!uuuu}
+ [T, just={$\liff$\elim:!uuuu}
+ [\lnot R, close={:!uu,!u} , just={$\liff$\elim:!uuuuu}
+ ]
+ ]
+ [\lnot T
+ [\lnot \lnot R, checked
+ [\lnot S, just={$\lnot\liff$\elim:!r111}, highlight line
+ [R, just={$\lnot\liff$\elim:!r111}, close={:!uuuuu,!u}, highlight line
+ ]
+ ]
+ [S
+ [\lnot R
+ [R, just={$\lnot\lnot$\elim:!uuu}, close={:!u,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ [\lnot S, just={$\liff$\elim:!uuu}
+ [\lnot \lnot T, just={$\liff$\elim:!uuuu}, checked
+ [T, just={$\liff$\elim:!uuuu}
+ [\lnot R, just={$\liff$\elim:!uuuuu}
+ [\lnot S, just={$\lnot\liff$\elim:!r111}
+ [R, just={$\lnot\liff$\elim:!r111}, close={:!uu,!c}
+ ]
+ ]
+ [S
+ [\lnot R, close={:!r1111,!u}
+ ]
+ ]
+ ]
+ ]
+ [\lnot T
+ [\lnot \lnot R, checked
+ [T, close={:!uu,!c}, just={$\lnot\lnot$\elim:!uuu}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ \end{prooftree}
+ \end{minipage}\hfill
+ \begin{minipage}[t]{.525\linewidth}
+ \begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \Rightarrow (x = y)) \cdot Px) \sststile{\mathcal{L}_1}{} (\exists x)(\forall y)(Py \Leftrightarrow (x = y))},
+ line no sep=.35em,
+ just sep=.35em,
+ wff format={RoyalBlue4},
+ line no format={RoyalBlue4},
+ just format={RoyalBlue4},
+ close format={RoyalBlue4},
+ for tree={edge=RoyalBlue4},
+ close with format={RoyalBlue4},
+ where level=0{%
+ tikz+={%
+ \draw [RoyalBlue4, thick] (current bounding box.north west) rectangle (current bounding box.south east);
+ \draw [RoyalBlue4, semithick] (.south -| current bounding box.west) -- (.south -| current bounding box.east);
+ },
+ }{},
+ }
+ [{(\exists x)((\forall y)(Py \Rightarrow (x = y)) \cdot Px)}, checked=d, just=pr.
+ [{\tnot (\exists x)(\forall y)(Py \Leftrightarrow (x = y))}, subs=d, just=$\lnot$ conc.
+ [{(\forall y)(Py \Rightarrow (d = y)) \cdot Pd}, checked, just={$\exists$\elim:!uu}
+ [{(\forall y)(Py \Rightarrow (d = y))}, subs=c, just={$\cdot$\elim:!u}
+ [Pd, just=$\cdot$\elim:!uu
+ [{\tnot (\forall y)(Py \Leftrightarrow (d = y))}, checked=c, just={$\tnot\exists$\elim:!r11}
+ [{\tnot (Pc \Leftrightarrow (d = c))}, checked, just={$\tnot\forall$\elim:!u}
+ [Pc, just={$\tnot\Leftrightarrow$\elim:!u}
+ [d \neq c, just={$\tnot\Leftrightarrow$\elim:!uu}, name=fred
+ [{Pc \Rightarrow (d = c)}, checked, just=$\forall$\elim:!r1111, move by=1
+ [\tnot Pc, close={:!uuu,!c} , just=$\Rightarrow$\elim:!u, wff options=WildStrawberry, !uuu.wff options=WildStrawberry
+ ]
+ [{d = c}
+ [d \neq d, close={:!c} , just={$=$:fred,!u}, wff options=red
+ ]
+ ]
+ ]
+ ]
+ ]
+ [\tnot Pc
+ [{d = c}
+ [Pc, just={$=$:!r11111,!u}, close={:!uu,!c}, wff options=blue!50!cyan, !uu.wff options=blue!50!cyan
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ \end{prooftree}
+ \end{minipage}
+\end{adjustwidth}
+\end{figure}
+
+\emph{\bfseries Note that this package requires version 2.1 (2016/12/04) of \keyname[pkg]{\pkg{forest}} \autocite{saso-forest-manual}.
+ It will not work with versions prior to 2.1.}
+\bigskip
+
+\emph{I would like to thank \citeauthor{saso-forest-manual} both for developing \pkg{forest} and for considerable patience in answering my questions, addressing my confusions and correcting my mistakes.
+The many remaining errors are, of course, entirely my own.
+This package's deficiencies would be considerably greater and more numerous were it not for his assistance.}
+
+
+\clearpage
+
+\tableofcontents
+
+\section{Raison d'être}\label{sec:raisondetre}
+% BEGIN raisondetre
+
+Suppose that we wish to typeset a typical proof tree demonstrating the following entailment
+\[
+ \{P \vee (Q \vee \lnot R), P \lif \lnot R, Q \lif \lnot R\} \sststile{}{} \lnot R
+\]
+
+We start by typesetting the tree using \pkg{forest}'s default settings (\cref{fordefaults}) and find our solution has several advantages: the proof is specified concisely and the code reflects the structure of the tree.
+\begin{codcoeden}[label=fordefaults,floatplacement=bp!]{\pkg{forest}: default settings}
+\begin{forest}
+ [$P \vee (Q \vee \lnot R)$
+ [$P \lif \lnot R$
+ [$Q \lif \lnot R$
+ [$\lnot\lnot R$
+ [$P$
+ [$\lnot P$]
+ [$\lnot R$]
+ ]
+ [$Q \vee \lnot R$
+ [$Q$
+ [$\lnot Q$]
+ [$\lnot R$]
+ ]
+ [$\lnot R$]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{forest}
+\end{codcoeden}
+It is relatively straightforward to specify a proof using \pkg{forest}'s bracket notation, and the spacing of nodes and branches is automatically calculated.
+
+Despite this, the results are not quite what we might have hoped for in a proof tree.
+The assumptions should certainly be grouped more closely together and no edges (lines) should be drawn between them because these are not steps in the proof --- they do not represent inferences.
+Preferably, edges should start from a common point in the case of branching inferences, rather than there being a gap.
+
+Moreover, proof trees are often compacted so that \emph{non-branching} inferences are grouped together, like assumptions, without explicitly drawn edges.
+Although explicit edges to represent non-branching inferences are useful when introducing students to proof trees, more complex proofs grow unwieldy and the more compact presentation becomes essential.
+
+Furthermore, it is useful to have the option of \emph{annotating} proof trees by numbering the lines of the proof on the left and entering the justification for each line on the right.
+
+\pkg{forest} is a powerful and flexible package capable of all this and, indeed, a good deal more.
+It is not enormously difficult to customise particular trees to meet most of our desiderata.
+However, it is difficult to get things perfectly aligned even in simple cases, requires the insertion of ‘phantom’ nodes and management of several sub-trees in parallel (one for line numbers, one for the proof and one for the justifications).
+The process requires a good deal of manual intervention, trial-and-error and hard-coding of things it would be better to have \LaTeXe{} manage for us, such as keeping count of lines and line references.
+
+\pkg{prooftrees} aims to make it as easy to specify proof trees as it was to specify our initial tree using \pkg{forest}'s default settings.
+The package supports a small number of options which can be configured to customise the output.
+The code for a \pkg{prooftrees} proof tree is shown in \cref{ptdefaults}, together with the output obtained using the default settings.
+
+\begin{codcoeden}*[label=ptdefaults]{\pkg{prooftrees}: default settings}
+\begin{prooftree}
+ {
+ to prove={\{P \vee (Q \vee \lnot R), P \lif \lnot R, Q \lif \lnot R\} \sststile{}{} \lnot R}
+ }
+ [P \vee (Q \vee \lnot R), just=Ass, checked
+ [P \lif \lnot R, just=Ass, checked
+ [Q \lif \lnot R, just=Ass, checked, name=last premise
+ [\lnot\lnot R, just={$\lnot$ Conc}, name=not conc
+ [P, just={$\vee$ Elim:!uuuu}
+ [\lnot P, close={:!u,!c}]
+ [\lnot R, close={:not conc,!c}, just={$\lif$ Elim:!uuuu}]]
+ [Q \vee \lnot R
+ [Q, move by=1
+ [\lnot Q, close={:!u,!c}]
+ [\lnot R, close={:not conc,!c}, just={$\lif$ Elim:last premise}]]
+ [\lnot R, close={:not conc,!c}, move by=1, just={$\vee$ Elim:!u}]]]]]]
+\end{prooftree}
+\end{codcoeden}
+More extensive configuration can be achieved by utilising \pkg{forest} \autocite{saso-forest-manual} and/or \TikZ{} \autocite{tantau-tikz-pgf-manual} directly.
+A sample of supported proof tree styles are shown in \cref{sample}.
+The package is \emph{\bfseries not} intended for the typesetting of proof trees which differ significantly in structure.
+\clearpage
+\thispagestyle{plain}%
+\begin{coeden}[label=sample, floatplacement={!bp}, grow to left by=3em, grow to right by=3em]{\pkg{prooftrees}: sample output}
+ \centering
+ \begin{prooftree}
+ {
+ to prove={\{ P \lor (Q \lor \lnot R), P \lif \lnot R, Q \lif \lnot R \} \sststile{}{} \lnot R},
+ line no sep=.35em,
+ just sep=.35em,
+ }
+ [P \lor (Q \lor \lnot R), just=Ass, checked
+ [P \lif \lnot R, just=Ass, checked
+ [Q \lif \lnot R, just=Ass, checked
+ [\lnot\lnot R, just={Neg conc}
+ [P, just={$\lor$ Elim:!r1}
+ [\lnot P, close={:!u,!c}]
+ [\lnot R, close={:!uu,!c}, just={$\lif$ Elim:!r11}
+ ]
+ ]
+ [Q \lor \lnot R, checked
+ [Q, move by=1
+ [\lnot Q, close={:!u,!c}
+ ]
+ [\lnot R, close={:!r1111,!c}, just={$\lif$ Elim:!r111}
+ ]
+ ]
+ [\lnot R, close={:!r1111,!c}, just={$\lor$ Elim:!u}, move by=1
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ \end{prooftree}\hfill
+ {\renewcommand*\linenumberstyle[1]{#1)}%
+ \begin{prooftree}
+ {
+ close with={\ensuremath{\ast}},
+ just format={text=gray, font=\itshape},
+ line no format={text=gray},
+ for tree={
+ edge path'={(!u.parent anchor) -- +(0,-5pt) -| (.child anchor)},
+ edge={gray},
+ },
+ line no sep=.35em,
+ just sep=.35em,
+ }
+ [P \lor (Q \lor \tnot R), just=Ass, checked
+ [P \supset \tnot R, just=Ass, checked
+ [Q \supset \tnot R, just=Ass, checked
+ [\tnot\tnot R, just={Neg conc}
+ [P, just={$\lor$ Elim:!r1}
+ [\tnot P, close={:!u,!c}]
+ [\tnot R, close={:!uu,!c}, just={$\supset$ Elim:!r11}
+ ]
+ ]
+ [Q \lor \tnot R, checked
+ [Q, move by=1
+ [\tnot Q, close={:!u,!c}]
+ [\tnot R, close={:!r1111,!c}, just={$\supset$ Elim:!r111}
+ ]
+ ]
+ [\tnot R, close={:!r1111,!c}, just={$\lor$ Elim:!u}, move by=1
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ \end{prooftree}}
+
+ \begin{prooftree}
+ {
+ not line numbering,
+ single branches,
+ close with={\fycross},
+ check with={\fycheck},
+ check left,
+ line no sep=.35em,
+ just sep=.35em,
+ }
+ [P \lor (Q \lor \lnot R), just=Ass, checked
+ [P \lif \lnot R, just=Ass, checked, grouped
+ [Q \lif \lnot R, just=Ass, checked, grouped
+ [\lnot\lnot R, just={Neg conc}, grouped
+ [P, just={$\lor$ Elim}
+ [\lnot P, close]
+ [\lnot R, close, just={$\lif$ Elim}
+ ]
+ ]
+ [Q \lor \lnot R, checked
+ [Q, move by=1
+ [\lnot Q, close]
+ [\lnot R, close, just={$\lif$ Elim}
+ ]
+ ]
+ [\lnot R, close, just={$\lor$ Elim}, move by=1
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ \end{prooftree}%
+ \hfill\begin{prooftree}
+ {
+ to prove={\{ P \lor (Q \lor \lnot R), P \lif \lnot R, Q \lif \lnot R \} \therefore \lnot R},
+ close with={\ensuremath{\times}},
+ highlight format={text=red},
+ line no sep=.35em,
+ just sep=.35em,
+ }
+ [P \lor (Q \lor \lnot R), just=Ass, checked
+ [P \lif \lnot R, just=Ass, checked
+ [Q \lif \lnot R, just=Ass, checked
+ [\lnot\lnot R, just={Neg conc}, highlight wff
+ [P, just={$\lor$ Elim:!r1}
+ [\lnot P, close={:!u,!c}, move by=2]
+ [\lnot R, close={:!uu,!c}, just={$\lif$ Elim:!r11}, highlight wff, move by=2
+ ]
+ ]
+ [Q \lor \lnot R, checked
+ [Q
+ [\lnot Q, close={:!u,!c}
+ ]
+ [\lnot R, close={:!r1111,!c}, just={$\lif$ Elim:!r111}, highlight wff
+ ]
+ ]
+ [\lnot R, close={:!r1111,!c}, just={$\lor$ Elim:!u}, highlight wff
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ \end{prooftree}
+
+ \begin{prooftree}
+ {
+ to prove={(\exists x)(Lx \lor Mx) \sststile{}{} (\exists x) Lx \lor (\exists x) Mx},
+ highlight format={text=blue!50!cyan},
+ line no sep=.5em,
+ just sep=.5em,
+ }
+ [(\exists x) (Lx \lor Mx), checked=a, just=Ass
+ [\lnot ((\exists x) Lx \lor (\exists x) Mx), checked, just=Neg Conc
+ [La \lor Ma, checked, just={1 $\exists$\elim}
+ [\lnot (\exists x) Lx, subs=a, just={2 $\lnot\lor$\elim}, highlight line, tikz+/.wrap pgfmath arg={%
+ \draw [decorate, decoration={brace, mirror}, draw=blue!50!cyan] (!1.south east -| just #1.east) ++(0,5pt) -- (just #1.north east);
+ }{level()}
+ [\lnot (\exists x) Mx, subs=a, highlight line
+ [\lnot La, just={4 $\lnot\exists$\elim}
+ [\lnot Ma, just={5 $\lnot\exists$\elim}
+ [La, close={6,8}, just={3 $\lor$\elim}]
+ [Ma, close={7,8}]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ \end{prooftree}%
+ \hfill\begin{prooftree}
+ {
+ for tree={%
+ plain content,
+ edge path'={(!u.parent anchor) -- ++(0,-5pt) -| (.child anchor)},
+ align=center,
+ edge={rounded corners},
+ },
+ not line numbering,
+ just sep=.5em,
+ }
+ [Either Alice saw nobody\\or she didn't see nobody.
+ [Alice saw nobody., just={$\vee$\elim}, subs=Jones
+ [Alice didn't see Jones., just={$\forall$\elim}]
+ ]
+ [Alice didn't see nobody., move by=2, just={$\vee$\elim}
+ [Alice saw somebody., just={$\lnot\lnot$\elim}, checked=Jones
+ [Alice saw Jones., just={$\exists$\elim}, before typesetting nodes={for current and ancestors/.wrap pgfmath arg={edge+/.wrap pgfmath arg={red!##1!blue}{100*(level)/#1}, text/.wrap pgfmath arg={red!##1!blue}{100*(level)/#1}}{level}}]
+ ]
+ ]
+ ]
+ \end{prooftree}
+
+\end{coeden}
+% END sec:raisondetre
+\clearpage
+
+\section{Assumptions \& Limitations}\label{sec:ass}
+% BEGIN sec:ass
+
+\pkg{prooftrees} makes certain assumptions about the nature of the proof system, $\mathcal{L}$, on which proofs are based.
+\begin{itemize}
+ \item All derivation rules yield equal numbers of \wff{}s on all branches.
+ \begin{center}
+ \begin{prooftree}
+ {
+ not line numbering,
+ for tree={plain content},
+ for root={s sep+=10pt}
+ }
+ [\wff[\wff][\wff[\phantom{\wff}, label={[text=Green3]right:{\fycheck}}]]]
+ [\wff[\wff[\wff]][\wff[\wff, label={[text=Green3]right:{\fycheck}}]]]
+ [\wff[\wff][\wff[\wff, label={[text=red]right:{\fycross}}]]]
+ [\wff[\wff[\wff]][\wff[\phantom{\wff}, label={[text=red]right:{\fycross}}]]]
+ \end{prooftree}
+ \end{center}
+ If $\mathcal{L}$ fails to satisfy this condition, \pkg{prooftrees} is likely to violate the requirements of affected derivation rules by splitting branches ‘mid-inference’.
+ \item No derivation rule yields \wff{}s on more than two branches.
+ \item All derivation rules proceed in a downwards direction at an angle of -90\textdegree{} i.e.~from north to south.
+ \item Any justifications are set on the far right of the proof tree.
+ \item Any line numbers are set on the far left of the proof tree.
+ \item Justifications can refer only to earlier lines in the proof.
+ \pkg{prooftrees} can typeset proofs if $\mathcal{L}$ violates this condition, but the cross-referencing system explained in \cref{subsec:lo} cannot be used for affected justifications.
+\end{itemize}
+\pkg{prooftrees} does not support the automatic breaking of proof trees across pages.
+Proof trees can be manually broken by using \keyname[fregcount]{line no shift} with an appropriate value for parts after the first (\cref{subsec:go}).
+However, horizontal alignment across page breaks will not be consistent in this case.
+
+In addition, \pkg{prooftrees} almost certainly relies on additional assumptions not articulated above and certainly depends on a feature of \pkg{forest} which its author classifies as experimental (\keyname*{do dynamics}).
+
+% END sec:ass
+
+\section{Typesetting a Proof Tree}\label{sec:ee}
+% BEGIN sec:ee
+
+After loading \pkg{prooftrees} in the document preamble:
+\begin{latexcode}
+% in document's preamble
+\usepackage{prooftrees}
+\end{latexcode}
+the \env{prooftree} environment is available for typesetting proof trees.
+This takes an argument used to specify a \meta{tree preamble}, with the body of the environment consisting of a \meta{tree specification} in \pkg{forest}'s notation.
+The \meta{tree preamble} can be as simple as an empty argument --- \arg{} --- or much more complex.
+
+Customisation options and further details concerning loading and invocation are explained in \cref{sec:llwytho}, \cref{sec:invoke}, \cref{sec:anatomy}, \cref{sec:ops} and \cref{sec:macros}.
+In this section, we begin by looking at a simple example using the default settings.
+
+Suppose that we wish to typeset the proof tree for
+\[
+ (\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)
+\]
+and we would like to typeset the entailment established by our proof at the top of the tree.
+Then we should begin like this:
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+\end{prooftree}
+\end{latexcode}
+That is all the preamble we want, so we move onto consider the \meta{tree specification}.
+\pkg{forest} uses square brackets to specify trees' structures.
+To typeset a proof, think of it as consisting of nested trees, trunks upwards, and work from the outside in and the trunks down (\cref{nythod}).
+\begin{coeden}[label=nythod]{Nested structure of proof tree}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)},
+ just sep*=3,
+ line no sep*=3,
+ for root={%
+ tikz+={%
+ \foreach \i [evaluate=\i as \j using 100*\i/14, evaluate=\i as \k using (11*(\i-7))-30, evaluate=\i as \m using (11*(7-\i))-30] in {13,...,1}
+ {%
+ \ifnum\i<8
+ \coordinate (p\i) at ([yshift=-1 pt,xshift=\k pt]current bounding box.south);
+ \else
+ \ifnum\i<10
+ \coordinate (p\i) at ([yshift=-1 pt,xshift=\m pt]current bounding box.south);
+ \else
+ \ifnum\i=10
+ \coordinate (p\i) at ([yshift=-1 pt,xshift=\k+40 pt]current bounding box.south);
+ \else
+ \coordinate (p\i) at ([yshift=-1 pt,xshift=\k-52 pt]current bounding box.south);
+ \fi
+ \fi
+ \fi
+ \node [fill=WildStrawberry!\j!blue, circle, font=\sffamily\small, text width=12pt, text centered, text=white, inner sep=0pt] at (p\i) {\i};
+ \ifnum\i>7
+ \ifnum\i<10
+ \coordinate (q\i) at ([xshift=\k+40 pt]current bounding box.south |- p\i);
+ \node [fill=WildStrawberry!\j!blue, circle, font=\sffamily\small, text width=12pt, text centered, text=white, inner sep=0pt] at (q\i) {\i};
+ \else
+ \ifnum\i<13
+ \ifnum\i>11
+ \coordinate (q\i) at ([xshift=\m pt]current bounding box.south |- p\i);
+ \node [fill=WildStrawberry!\j!blue, circle, font=\sffamily\small, text width=12pt, text centered, text=white, inner sep=0pt] at (q\i) {\i};
+ \fi
+ \fi
+ \fi
+ \fi
+ }
+ },
+ },
+ for tree={%
+ s sep+=30pt,
+ if={((level()>=1)&&(proof_tree_rhifo()==1)))}{%
+ node options/.wrap pgfmath arg={draw, rounded corners, WildStrawberry!#1!blue}{(level()+proof_tree_toing_by())*100/14},
+ fill=white,
+ delay={%
+ tempcounta=int(level()+proof_tree_toing_by()),
+ if={(tempcounta)<=7}{% proof_tree_toing_by is zero here
+ nyth/.wrap pgfmath arg={{(!r211111111112111) (!Luu) (!Luuu) (!11) (!Fuu) (!r21111111111)}{#1}{p}}{tempcounta},
+ }{%
+ if={(tempcounta)>9}{%
+ if={n("!uu")==2}{}{%
+ tempcounta'+=1,
+ if={(n()==1)&&(n_children("!u")==2)}{%
+ nyth/.wrap pgfmath arg={{}{#1}{q}}{tempcounta},
+ }{%
+ nyth/.wrap pgfmath arg={{}{#1}{p}}{tempcounta},
+ },
+ },
+ }{%
+ if={((tempcounta)==8)&&(n()==1)}{%
+ nyth={(!1111) (!llll) (!lllll)}{8}{p},
+ !1.nyth={(!111) (!lll) (!llll)}{9}{p},
+ }{%
+ if={n()==2}{%
+ nyth/.wrap pgfmath arg={{(!1)}{#1}{q}}{tempcounta},
+ tempcounta'+=1,
+ !1.nyth/.wrap pgfmath arg={{(!1)}{#1}{q}}{tempcounta},
+ tempcounta'+=1,
+ !11.nyth/.wrap pgfmath arg={{(!1)}{#1}{p}}{tempcounta},
+ }{},
+ },
+ },
+ },
+ },
+ }{},
+ },
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ [{Pb \lif a = b}, checked, just=$\forall\elim$:mark, move by=1
+ [\lnot Pb, close={:to Pb or not to Pb,!c}, just=$\lif\elim$:!u
+ ]
+ [{a = b}
+ [a \neq a, close={:!c}, just={$=\elim$:{!uuu,!u}}
+ ]
+ ]
+ ]
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{coeden}
+
+Starting with the outermost tree \nyth*{} and the topmost trunk, we replace the \bocsnyth{} with square brackets and enter the first \wff{} inside, adding \verb|just=Pr.| for the justification on the right and \verb|checked=a| so that the line will be marked as discharged with $a$ substituted for $x$.
+We also use \pkg{forest}'s \keyname*[fopttoks]{name} to label the line for ease of reference later.
+(Technically, it is the node rather than the line which is named, but, for our purposes, this doesn't matter.
+\pkg{forest} will create a name if we don't specify one, but it will not necessarily be one we would have chosen for ease of use!)
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ ]
+\end{prooftree}
+\end{latexcode}
+We can refer to this line later as \verb|pr|.
+
+We then consider the next tree \nyth*{}.
+Its \bocsnyth{} goes inside that for \nyth[1], so the square brackets containing the next \wff{} go inside those we used for \nyth[1].
+Again, we add the justification with \keyname[foptautotoks]{just}, but we use \verb|subs=a| rather than \verb|checked=a| as we want to mark substitution of $a$ for $x$ without discharging the line.
+Again, we use \keyname*[fopttoks]{name} so that we can refer to the line later as \verb|neg conc|.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+Turning to tree \nyth*{}, we again note that its \bocsnyth{} is nested within the previous two, so the square brackets for its \wff{} need to be nested within those for the previous \wff{}s.
+This time, we want to mark the line as discharged without substitution, so we simply use \keyname[fstyle]{checked} without a value.
+Since the justification for this line includes mathematics, we need to ensure that the relevant part of the justification is surrounded by \verb|$|\dots\verb|$| or \verb|\(|\dots\verb|\)|.
+This justification also refers to an earlier line in the proof.
+We could write this as \verb|just=1 $\exists\elim$|, but instead we use the name we assigned earlier with the referencing feature provided by \pkg{prooftrees}.
+To do this, we put the reference, \verb|pr| \emph{after} the rest of the justification, separating the two parts by a colon i.e.~\verb|$\exists\elim$:pr| and allow \pkg{prooftrees} to figure out the correct number.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+Continuing in the same way, we surround each of the \wff{}s for \nyth*{}, \nyth*{}, \nyth*{} and \nyth*{} within square brackets nested within those surrounding the previous \wff{} since each of the trees is nested within the previous one.
+Where necessary, we use \keyname*[fopttoks]{name} to label lines we wish to refer to later, but we also use \pkg{forest}'s \emph{relative} naming system when this seems easier.
+For example, in the next line we add, we specify the justification as \verb|just=$\land\elim$:!u|.
+\verb|!| tells \pkg{forest} that the reference specifies a relationship between the current line and the referenced one, rather than referring to the other line by name.
+\verb|!u| refers to the current line's parent line --- in this case, \verb|{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr|.
+\verb|!uu| refers to the current line's parent line's parent line and so on.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+Reaching \nyth*{}, things get a little more complex since we how have not one, but \emph{two} \bocsnyth{} nested within \nyth[7].
+This means that we need \emph{two} sets of square brackets for \nyth{} --- one for each of its two trees.
+Again, both of these should be nested within the square brackets for \nyth[7] but neither should be nested within the other because the trees for the two branches at \nyth{} are distinct.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ ]
+ [\lnot Pb
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+At this point, we need to work separately or in parallel on each of our two branches since each constitutes its own tree.
+Turning to trees \nyth*{}, each needs to be nested within the relevant tree \nyth[8], since each \bocsnyth{} is nested within the applicable branch's tree.
+Hence, we nest square brackets for each of the \wff{}s at \nyth{} within the previous set.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+We only have one tree \nyth*{} as there is no corresponding tree in the left-hand branch.
+This isn't a problem: we just need to ensure that we nest it within the appropriate tree \nyth[9].
+There are two additional complications here.
+The first is that the justification contains a comma, so we need to surround the argument we give \keyname[foptautotoks]{just} with curly brackets.
+That is, we must write \verb|just={5,9 $=\elim$}| or \verb|just={$=\elim$:{simple,!u}}|.
+The second is that we wish to close this branch with an indication of the line numbers containing inconsistent \wff{}s.
+We can use \verb|close={8,10}| for this or we can use the same referencing system we used to reference lines when specifying justifications and write \verb|close={:to Pb or not to Pb,!c}|.
+In either case, we again surrounding the argument with curly brackets to protect the comma.
+\verb|!c| refers to the current line --- something useful in many close annotations, but not helpful in specifying non-circular justifications.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+This completes the main right-hand branch of the tree and we can focus solely on the remaining left-hand one.
+Tree \nyth*{} is straightforward --- we just need to nest it within the left-hand tree \nyth[9].
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ [{Pb \lif a = b}, checked, just=$\forall\elim$:mark%, move by=1
+ ]
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+At this point, the main left-hand branch itself branches, so we have two trees \nyth*{}.
+Treating this in the same way as the earlier branch at \nyth[8], we use two sets of square brackets nested within those for tree \nyth{}, but with neither nested within the other.
+Since we also want to mark the leftmost branch as closed, we add \verb|close={:to Pb or not to Pb,!c}| in the same way as before.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ [{Pb \lif a = b}, checked, just=4 $\forall\elim$
+ [\lnot Pb, close={:to Pb or not to Pb,!c}, just=$\lif\elim$:!u
+ ]
+ [{a = b}
+ ]
+ ]
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+We complete our initial specification by nesting \nyth*{} within the appropriate tree \nyth[12], again marking closure appropriately.
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ [{Pb \lif a = b}, checked, just=4 $\forall\elim$
+ [\lnot Pb, close={:to Pb or not to Pb,!c}, just=$\lif\elim$:!u
+ ]
+ [{a = b}
+ [a \neq a, close={:!c}, just={$=\elim$:{!uuu,!u}}
+ ]
+ ]
+ ]
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+
+Compiling our code, we find that the line numbering is not quite right:
+
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ [{Pb \lif a = b}, checked, just=4 $\forall\elim$
+ [\lnot Pb, close={:to Pb or not to Pb,!c}, just=$\lif\elim$:!u
+ ]
+ [{a = b}
+ [a \neq a, close={:!c}, just={$=\elim$:{!uuu,!u}}
+ ]
+ ]
+ ]
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+
+\pkg{prooftrees} warns us about this:
+\begin{latexcode}
+Package prooftrees Warning: Merging conflicting justifications for line 10! Please examine the output carefully and use "move by" to move lines later in the proof if required. Details of how to do this are included in the documentation.
+\end{latexcode}
+We would like line 10 in the left-hand branch to be moved down by one line, so we add \verb|move by=1| to the relevant line of our proof.
+That is, we replace the line
+\begin{latexcode}
+ [{Pb \lif a = b}, checked, just=4 $\forall\elim$
+\end{latexcode}
+by
+\begin{latexcode}
+ [{Pb \lif a = b}, checked, just=$\forall\elim$:mark, move by=1
+\end{latexcode}
+giving us the following code:
+\begin{latexcode}
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ [{Pb \lif a = b}, checked, just=$\forall\elim$:mark, move by=1
+ [\lnot Pb, close={:to Pb or not to Pb,!c}, just=$\lif\elim$:!u
+ ]
+ [{a = b}
+ [a \neq a, close={:!c}, just={$=\elim$:{!uuu,!u}}
+ ]
+ ]
+ ]
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+\end{latexcode}
+which produces our desired result:
+
+\begin{prooftree}
+ {
+ to prove={(\exists x)((\forall y)(Py \lif x = y) \land Px) \sststile{}{} (\exists x)(\forall y)(Py \liff x = y)}
+ }
+ [{(\exists x)((\forall y)(Py \lif x = y) \land Px)}, checked=a, just=Pr., name=pr
+ [{\lnot (\exists x)(\forall y)(Py \liff x = y)}, subs=a, just=Conc.~neg., name=neg conc
+ [{(\forall y)(Py \lif a = y) \land Pa}, checked, just=$\exists\elim$:pr
+ [{(\forall y)(Py \lif a = y)}, subs=b, just=$\land\elim$:!u, name=mark
+ [Pa, just=$\land\elim$:!uu, name=simple
+ [{\lnot (\forall y)(Py \liff a = y)}, checked=b, just=$\lnot\exists\elim$:neg conc
+ [{\lnot (Pb \liff a = b)}, checked, just=$\lnot\forall\elim$:!u
+ [Pb, just=$\liff\elim$:!u, name=to Pb or not to Pb
+ [a \neq b, just=$\liff\elim$:!u
+ [{Pb \lif a = b}, checked, just=$\forall\elim$:mark, move by=1
+ [\lnot Pb, close={:to Pb or not to Pb,!c}, just=$\lif\elim$:!u
+ ]
+ [{a = b}
+ [a \neq a, close={:!c}, just={$=\elim$:{!uuu,!u}}
+ ]
+ ]
+ ]
+ ]
+ ]
+ [\lnot Pb
+ [{a = b}
+ [Pb, just={$=\elim$:{simple,!u}}, close={:to Pb or not to Pb,!c}
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+ ]
+\end{prooftree}
+
+% END sec:ee
+
+\restoregeometry
+\setlength\tewadjust{\marginparwidth+\marginparsep-\paperwidth+\textwidth+\oddsidemargin+1in}%
+\fancyheadoffset[lh]{\tewadjust}%
+\section{Loading the Package}\label{sec:llwytho}
+% BEGIN sec:llwytho
+
+To load the package simply add the following to your document's preamble.
+\begin{latexcode}
+\usepackage{prooftrees}
+\end{latexcode}
+\keyname[pkg]{\pkg{prooftrees}} will load \keyname[pkg]{\pkg{forest}} automatically.
+
+The only option currently supported is \keyname[pkgopt]{\option{tableaux}}.
+If this option is specified, the \env{prooftree} environment will be called \env{tableau} instead.
+\Example{\cs{usepackage}[tableaux]{prooftrees}} would cause the \env{tableau} environment to be defined \emph{rather than} \env{prooftree}.
+
+Any other options given will be passed to \keyname[pkg]{\pkg{forest}}.
+\Example{\cs{usepackage}[debug]{prooftrees}} would enable \keyname[pkg]{\pkg{forest}}'s debugging.
+
+If one or more of \keyname[pkg]{\pkg{forest}}'s libraries are to be loaded, it is recommended that these be loaded separately and their defaults applied, if applicable, within a local \TeX{} group so that they do not interfere with \keyname[pkg]{\pkg{prooftrees}}'s environment.
+% END sec:llwytho
+
+\section{Invocation}\label{sec:invoke}
+% BEGIN sec:invoke
+\DescribeEnv{prooftree}\cs{begin}\arg{\env{prooftree}}\marg{tree preamble}\meta{tree specification}\cs{end}\arg{\env{prooftree}}\AfterLastParam
+The \meta{tree preamble} is used to specify any non-default options which should be applied to the tree.
+It may contain any code valid in the preamble of a regular \pkg{forest} tree, in addition to setting \pkg{prooftree} options.
+The preamble may be empty, but the argument is \emph{required}\footnote{%
+ Failure to specify a required argument does not always yield a compilation error in the case of environments.
+ However, failure to specify required arguments to environments often fails to achieve the best consequences, even when it does not result in compilation failures, and will, therefore, be avoided by the prudent.}.
+The \meta{tree specification} specifies the tree in the bracket notation parsed by \pkg{forest}.
+
+{\em
+ {\bfseries
+ Users of \keyname[pkg]{\pkg{forest}} should note that the environments \env{prooftree} and \env{forest} differ in important ways.%
+ }%
+ \begin{itemize}
+ \item \env{prooftree}'s argument is \emph{mandatory}.
+ \item The tree's preamble \emph{cannot} be given in the body of the environment.
+ \item \cs{end}\arg{prooftree} \emph{must} follow the \meta{tree specification} \emph{immediately}.
+ \end{itemize}%
+}
+
+\DescribeEnv{tableau}\cs{begin}\arg{\env{tableau}}\marg{tree preamble}\meta{tree specification}\cs{end}\arg{\env{tableau}}\AfterLastParam
+A substitute for \env{prooftree}, defined \emph{instead} of \env{prooftree} if the package option \option{tableaux} is specified or a \cs{prooftree} macro is already defined when \keyname[pkg]{\pkg{prooftrees}} is loaded.
+See \cref{sec:llwytho} for details and \cref{sec:compat} for this option's raison d'être.
+
+% END sec:invoke
+
+\section{Proof Tree Anatomy}\label{sec:anatomy}
+% BEGIN sec:anatomy
+The following diagram provides an overview of the configuration and anatomy of a \pkg{prooftrees} proof tree.
+Detailed documentation is provided in \cref{sec:ops} and \cref{sec:macros}.
+
+\forestset{declare count register={cau},cau'=0}
+\begin{prooftree}
+ {
+ to prove={proof statement},
+ for tree={%
+ plain content,
+ font=\itshape,
+ delay={content=wff, shape=rectangle,},
+ if level=0{}{just=justification},
+ if n children=0{%
+ close={$n,m$},
+ cau'+=1,
+ tikz+/.wrap pgfmath arg={%
+ \begin{scope}[on background layer]
+ \node (cau#1) [inner sep=-2pt, post grwp=DarkOrchid4, fit=(!1) (!11)] {};
+ \end{scope}
+ }{cau},
+ if={cau==5}{%
+ tikz+={%
+ \path [nodiad=DarkOrchid4] (cau5.south) -- ++(0,-30pt) |- ++(-50:85pt) node (x2) [anchor=west] {Closure};
+ \begin{scope}[every node/.append style={font=\scriptsize, align=left, inner sep=0pt}]
+ \node [text=DarkOrchid4, anchor=north west, xshift=10pt, text width=.475\textwidth] at (x2.south west) {\textbullet\ closure symbol \& optional annotation\\\textbullet\ location \& annotation content controlled by \keyname[fstyle]{close} within the \meta{tree specification}\\\textbullet\ annotations support cross-references\\\textbullet\ closure symbol controlled by \keyname[fregtoks]{close with} and \keyname[fregkeylist]{close with format}\\\textbullet\ global annotation format controlled by \keyname[fregkeylist]{close format} \& \keyname[fregdim]{close sep}};
+ \end{scope}
+ }
+ }{}
+ }{},
+ },
+ for root={%
+ delay={%
+ tikz+={%
+ \begin{scope}[on background layer]
+ \begin{scope}[inner sep=0pt]
+ \node (cas) [fit=(), grwp=DodgerBlue3] {};
+ \node (rhif) [fit=(!1) (!1F), grwp=Green4] {};
+ \node (nod) [fit=(!3) (!3F), grwp=DarkOrange3] {};
+ \node (wff) [fit=(!2) (!2F) (!2L) (!2LP) (!2LPP), grwp=WildStrawberry] {};
+ \end{scope}
+ \path [nodiad=DodgerBlue3] (cas.north) -- ++(0,7.5pt) |- ++(85:90pt) node (cas2) [anchor=west] {Theorem/Entailment};
+ \path [nodiad=Green4] (rhif.south) -- ++(0,-45pt) |- ++(-85:130pt) node (rhif2) [anchor=west] {Line Numbers};
+ \path [nodiad=DarkOrange3] (nod.north) |- ++(40:35pt) node (nod2) [anchor=west] {Justifications};
+ \path [nodiad=WildStrawberry] (wff.south) |- ++(-50pt,-15pt) -- ++(0,-15pt) node (wff2) [anchor=north] {\wff s};
+ \begin{scope}[every node/.append style={font=\scriptsize, align=left, inner sep=0pt}]
+ \node [text=DodgerBlue3, anchor=north west, xshift=10pt,] at (cas2.south west) {\textbullet\ specified with \texttt{to prove}\\\textbullet\ format controlled by \keyname[fregkeylist]{proof statement format}\\\textbullet\ named \texttt{proof statement}};
+ \node [text=Green4, anchor=north west, xshift=10pt, text width=.6\textwidth] at (rhif2.south west) {\textbullet\ content \& location automatic\\\textbullet\ existence controlled by \texttt{line numbering}\\\textbullet\ global format controlled by \keyname[fregkeylist]{line no format} \& \cs{linenumberstyle}\\\textbullet\ local format controlled by \keyname[foptbool]{highlight line no} \& \keyname[foptautotoks]{line no options}\\\textbullet\ named \texttt{line no $n$} for proof line $n$};
+ \node (nod3) [text=DarkOrange3, anchor=north west, xshift=10pt, text width=.4\textwidth] at (nod2.south west) {\textbullet\ location automatic\\\textbullet\ existence controlled implicitly or with \texttt{justifications}\\\textbullet\ content specified with \texttt{just}\\\textbullet\ cross-references supported\\\textbullet\ global format controlled by \keyname[fregkeylist]{just format} \& \keyname[fregbool]{just refs left}\\\textbullet\ local format controlled by \keyname[foptbool]{highlight just} \& \keyname[foptautotoks]{just options}\\\textbullet\ named \texttt{just $n$} for proof line $n$};
+ \node [text=WildStrawberry, anchor=north west, xshift=10pt, text width=.25\textwidth] at (wff2.south west) {\textbullet\ from \meta{tree specification}\\\textbullet\ global format controlled by \keyname[fregkeylist]{wff format}\\\textbullet\ local format controlled by \keyname[foptbool]{highlight wff} \& \keyname[foptautotoks]{wff options}\\\textbullet\ \keyname[foptbool]{highlight line} and \keyname[foptautotoks]{line options} control the format of the current \wff's proof line};
+ \end{scope}
+ \node (esb) [below=10pt of nod3.south west, font=\footnotesize, anchor=north west, align=left, text width=.4\textwidth] {\textsc{Anatomy \& Ontology}\\\textbullet\ \pkg{forest} trees consist of (\TikZ) \texttt{nodes}\\\textbullet\ \pkg{prooftrees} places \wff s, line numbers, justifications \& proof statements into nodes\\\textbullet\ the content \& location of each node depends on its type: line number, \wff{}, justification or proof statement\\\textbullet\ the proof's structure \& appearance is determined by the \meta{tree preamble} \& \meta{tree specification}\\\textbullet\ node content, existence \& location is controlled by one or both of these, depending on the node type};
+ \node [below=5pt of esb.south west, font=\footnotesize, anchor=north west, align=left, text width=.55\textwidth, xshift=-.15\textwidth] {\textsc{Meaning \& Reference}\\\textbullet\ nodes for the proof statement, justifications \& line numbers are given standard names for ease of reference\\\textbullet\ the proof statement node is the \texttt{root}\\\textbullet\ \wff{} nodes may be named as required\\\textbullet\ a cross-referencing system supports annotations in justifications and closures};
+ \end{scope}
+ },
+ },
+ },
+ }
+ [, checked,
+ tikz+={%
+ \node (c1) [anchor=base east] at (.base east) {\phantom{$\checkmark$}};
+ \begin{scope}[on background layer]
+ \node [post grwp=DarkOrchid4,anchor=base east, inner sep=-2pt, fit=(c1)] {};
+ \path [nodiad=DarkOrchid4] ([yshift=-2pt]c1.north) |- ++(80:75pt) node (ann2) [anchor=west] {Discharge \& Substitution};
+ \begin{scope}[every node/.append style={font=\scriptsize, align=left, inner sep=0pt}]
+ \node [text=DarkOrchid4, anchor=north west, xshift=10pt, text width=.7\textwidth] at (ann2.south west) {\textbullet\ location \& annotation content controlled by \keyname[fstyle]{checked} and \keyname[fstyle]{subs} within the \meta{tree specification}\\\textbullet\ discharge \& substitution symbols controlled by \keyname[fregtoks]{check with} \& \keyname[fregtoks]{subs with}\\\textbullet\ \keyname[fregbool]{check right} \& \keyname[fregbool]{subs right} control relative location};
+ \end{scope}
+ \end{scope}
+ }
+ [, checked=a,
+ tikz+={%
+ \node (c2) [anchor=base east] at (.base east) {\phantom{$\checkmark a$}};
+ \begin{scope}[on background layer]
+ \node [post grwp=DarkOrchid4,anchor=base east, inner sep=-2pt, fit=(c2)] {};
+ \end{scope}
+ }
+ [, subs={a,b},
+ tikz+={%
+ \node (s1) [anchor=base east] at (.base east) {\phantom{$\backslash a,b$}};
+ \begin{scope}[on background layer]
+ \node [post grwp=DarkOrchid4,anchor=base east, inner sep=-2.5pt, fit=(s1)] {};
+ \end{scope}
+ }
+ [[[[][]]]][[[[[]][[[]]]][[]]]]]]]
+\end{prooftree}
+
+% END sec:anatomy
+
+\section{Options}\label{sec:ops}
+% BEGIN sec:ops
+Most configuration uses the standard key/value interface provided by \TikZ{} and extended by \pkg{forest}.
+These are divided into those which determine the overall appearance of the proof as a whole and those with more local effects.
+
+\subsection{Global Options}\label{subsec:go}
+% BEGIN subsec:go
+
+The following options affect the global style of the tree and should typically be set in the tree's preamble if non-default values are desired.
+The default values for the document can be set outside the \env{prooftree} environment using \cs{forestset}\marg{settings}.
+If \emph{only} proof trees will be typeset, a default style can be configured using \pkg{forest}'s \keyname*[fkeylist]{default preamble}.
+
+\DescribeKeys[fregbool]{line numbering, not line numbering}\vals{true,false}\AfterLastParam
+\Default{true}
+This determines whether lines should be numbered.
+The default is to number lines.
+The following are equivalent to the default setting:
+\begin{latexcode}
+ line numbering
+ line numbering=true
+\end{latexcode}
+Either of the following will turn line numbering off:
+\begin{latexcode}
+ not line numbering
+ line numbering=false
+\end{latexcode}
+
+\DescribeKeys[fregbool]{justifications, not justifications}\vals{true,false}\AfterLastParam
+This determines whether justifications for lines of the proof should be typeset to the right of the tree.
+It is rarely necessary to set this option explicitly as it will be automatically enabled if required.
+The only exception concerns a proof for which a line should be moved but no justifications are specified.
+In this case either of the following should be used to activate the option:
+\begin{latexcode}
+ justifications
+ justifications=true
+\end{latexcode}
+This is not necessary if \keyname[foptautotoks]{just} is used for any line of the proof.
+
+\DescribeKeys[fregbool]{single branches, not single branches}\vals{true,false}\AfterLastParam
+\Default{false}
+This determines whether inference steps which do not result in at least two branches should draw and explicit branch.
+The default is to not draw single branches explicitly.
+The following are equivalent to the default setting:
+\begin{latexcode}
+ not single branches
+ single branches=false
+\end{latexcode}
+Either of the following will turn line numbering off:
+\begin{latexcode}
+ single branches
+ single branches=true
+\end{latexcode}
+
+\DescribeKey[fregdim]{line no width}\val{dimension}\AfterLastParam
+The maximum width of line numbers.
+By default, this is set to the width of the formatted line number \keyval{99}.
+\Example{line no width=20pt}
+
+\DescribeKey[fregdim]{just sep}\val{dimension}\AfterLastParam
+\Default{1.5em}
+Amount by which to shift justifications away from the tree.
+A larger value will shift the justifications further to the right, increasing their distance from the tree, while a smaller one will decrease this distance.
+Note that a negative value ought never be given.
+Although this will not cause an error, it may result in strange things happening.
+If you wish to decrease the distance between the tree and the justifications further, please set \keyname[fregdim]{just sep} to zero and use the options provided by \pkg{forest} and/or \TikZ{} to make further negative adjustments.
+\Example{just sep=.5em}
+
+\DescribeKey[fregdim]{line no sep}\val{dimension}\AfterLastParam
+\Default{1.5em}
+Amount by which to shift line numbers away from the tree.
+A larger value will shift the line numbers further to the left, increasing their distance from the tree, while a smaller one will decrease this distance.
+Note that a negative value ought never be given.
+Although this will not cause an error, it may result in strange things happening.
+If you wish to decrease the distance between the tree and the line numbers further, please set \keyname[fregdim]{line no sep} to zero and use the options provided by \pkg{forest} and/or \TikZ{} to make further negative adjustments.
+\Example{line no sep=5pt}
+
+\DescribeKey[fregdim]{close sep}\val{dimension}\AfterLastParam
+\Default{.75\cs{baselineskip}}
+Distance between the symbol marking branch closure and any following annotation.
+If the format of such annotations is changed with \keyname[fregkeylist]{close format}, this dimension may require adjustment.
+\Example{close sep=\cs{baselineskip}}
+
+\DescribeKey[fregcount]{line no shift}\val{integer}\AfterLastParam
+\Default{0}
+This value increments or decrements the number used for the first line of the proof.
+By default, line numbering starts at \texttt{1}.
+\Example{line no shift=3} would begin numbering the lines at 4.
+
+\DescribeKey[fstyle]{zero start}
+Start line numbering from 0 rather than 1.
+The following are equivalent:
+\begin{latexcode}
+ zero start
+ line no shift=-1
+\end{latexcode}
+
+\DescribeKey[fstyle]{to prove}\val{wff}\AfterLastParam
+Statement of theorem or entailment to be typeset above the proof.
+In many cases, it will be necessary to enclose the statement in curly brackets.
+\Example{to prove=\arg{\cs{sststile}\arg{}\arg{} P \cs{lif} P}}
+By default, the content is expected to be suitable for typesetting in maths mode and should \emph{not}, therefore, be enclosed by dollar signs or equivalent.
+
+\DescribeKey[fregtoks]{check with}\val{symbol}\AfterLastParam
+\Default{\cs{ensuremath}\arg{\cs{checkmark}} (\ensuremath{\checkmark})}
+Symbol with which to mark discharged lines.
+\Example{check with=\arg{\cs{text}\arg{\cs{ding}\arg{52}}}}
+Within the tree, \keyname[fstyle]{checked} is used to identify discharged lines.
+
+\DescribeKeys[fregbool]{check right, not check right}\vals{true,false}\AfterLastParam
+\Default{true}
+Determines whether the symbol indicating that a line is discharged should be placed to the right of the \wff{}.
+The alternative is, unsurprisingly, to place it to the left of the \wff{}.
+The following are equivalent to the default setting:
+\begin{latexcode}
+ check right
+ check right=true
+\end{latexcode}
+\DescribeKeys[fstyle]{check left}%
+Set \keyname[fregbool]{check right}\verb|=false|.
+The following are equivalent ways to place the markers to the left:
+\begin{latexcode}
+ check right=false
+ not check right
+ check left
+\end{latexcode}
+
+\DescribeKey[fregtoks]{close with}\val{symbol}\AfterLastParam
+\Default{\cs{ensuremath}\arg{\cs{otimes}} (\ensuremath{\otimes})}
+Symbol with which to close branches.
+\Example{close with=\arg{\cs{ensuremath}\arg{\cs{ast}}}}
+Within the tree, \keyname[fstyle]{close} is used to identify closed branches.
+
+\DescribeKey[fregkeylist]{close with format}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to the closure symbol.
+Empty by default.
+\Example{close with format=\arg{red, font=\Huge}}
+To replace a previously set value, rather than adding to it, use \keyname[fregkeylist]{close with format\textquotesingle} rather than \keyname[fregkeylist]{close with format}.
+
+\DescribeKey[fregkeylist]{close format}\val{key-value list}\AfterLastParam
+\Default{font=\cs{scriptsize}}
+Additional \TikZ{} keys to apply to any annotation following closure of a branch.
+\Example{close format=\arg{font=\cs{footnotesize}\cs{sffamily}, text=gray!75}}
+To replace the default value of \keyname[fregkeylist]{close format}, rather than adding to it, use \keyname[fregkeylist]{close format\textquotesingle} rather than \keyname[fregkeylist]{close format}.
+\Example{close format\textquotesingle=\arg{text=red}} will produce red annotations in the default font size, whereas
+\Example{close format=\arg{text=red}} will produce red annotations in \verb|\scriptsize|.
+
+\DescribeKey[fregtoks]{subs with}\val{symbol}\AfterLastParam
+\Default{\cs{ensuremath}\arg{\cs{backslash}} (\ensuremath{\backslash})}
+Symbol to indicate variable substitution.
+\Example{\cs{text}\arg{:}}
+Within the tree, \keyname[fstyle]{subs} is used to indicate variable substitution.
+
+\DescribeKeys[fregbool]{subs right, not subs right}\vals{true,false}\AfterLastParam
+\Default{true}
+Determines whether variable substitution should be indicated to the right of the \wff{}.
+The alternative is, again, to place it to the left of the \wff{}.
+The following are equivalent to the default setting:
+\begin{latexcode}
+ subs right
+ subs right=true
+\end{latexcode}
+\DescribeKeys[fstyle]{subs left}%
+Set \keyname[fregbool]{subs right}\verb|=false|.
+The following are equivalent ways to place the annotations to the left:
+\begin{latexcode}
+ subs right=false
+ not subs right
+ subs left
+\end{latexcode}
+
+\DescribeKeys[fregbool]{just refs left, not just refs left}\vals{true,false}\AfterLastParam
+\Default{true}
+Determines whether line number references should be placed to the left of justifications.
+The alternative is to place them to the right of justifications.
+The following are equivalent to the default setting:
+\begin{latexcode}
+ just refs left
+ just refs left=true
+\end{latexcode}
+\DescribeKeys[fstyle]{just refs right}%
+Set \keyname[fregbool]{just refs left}\verb|=false|.
+The following are equivalent ways to place the references to the right:
+\begin{latexcode}
+ just refs left=false
+ not just refs left
+ just refs right
+\end{latexcode}
+Note that this setting \emph{only affects the placement of line numbers specified using the cross-referencing system} explained in \cref{subsec:lo}.
+Hard-coded line numbers in justifications will be typeset as is.
+
+\DescribeKey[fregkeylist]{just format}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to line justifications.
+Empty by default.
+\Example{just format=\arg{red, font=\itshape}}
+To replace a previously set value, rather than adding to it, use \keyname[fregkeylist]{just format\textquotesingle} rather than \keyname[fregkeylist]{just format}.
+
+\DescribeKey[fregkeylist]{line no format}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to line numbers.
+Empty by default.
+\Example{line no format=\arg{align=right, text=gray}}
+To replace a previously set value, rather than adding to it, use \keyname[fregkeylist]{line no format\textquotesingle} rather than \keyname[fregkeylist]{line no format}.
+To change the way the number itself is formatted --- to eliminate the dot, for example, or to put the number in brackets --- redefine \cs{linenumberstyle} (see \cref{sec:macros}).
+
+\DescribeKey[fregkeylist]{wff format}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to \wff s.
+Empty by default.
+\Example{wff format=\arg{draw=orange}}
+To replace a previously set value, rather than adding to it, use \keyname[fregkeylist]{wff format\textquotesingle} rather than \keyname[fregkeylist]{wff format}.
+
+\DescribeKey[fregkeylist]{proof statement format}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to the proof statement.
+Empty by default.
+\Example{proof statement format=\arg{text=gray, draw=gray}}
+To replace a previously set value, rather than adding to it, use \keyname[fregkeylist]{proof statement format\textquotesingle} rather than \keyname[fregkeylist]{proof statement format}.
+
+\DescribeKey[fregautotoks]{highlight format}\val{key-value list}\AfterLastParam
+\Default{draw=gray, rounded corners}
+Additional \TikZ{} keys to apply to highlighted \wff s.
+\Example{highlight format=\arg{text=red}}
+To apply highlighting, use the \keyname[foptbool]{highlight wff}, \keyname[foptbool]{highlight just}, \keyname[foptbool]{highlight line no} and/or \keyname[foptbool]{highlight line} keys (see \cref{subsec:lo}).
+
+\DescribeKey[fregtoks]{merge delimiter}\val{punctuation}\AfterLastParam
+\Default{\cs{text}\arg{; } (\text{; })}
+Punctuation to separate distinct justifications for a single proof line.
+Note that \pkg{prooftrees} will issue a warning if it detects different justifications for a single proof line and will suggest using \keyname[fstyle]{move by} to avoid the need for merging justifications.
+In general, justifications ought not be merged because it is then less clear to which \wff(s) each justification applies.
+Moreover, later references to the proof line will be similarly ambiguous.
+That is, \keyname[fregtoks]{merge delimiter} ought almost never be necessary because it is almost always better to restructure the proof to avoid ambiguity.
+
+% END subsec:go
+
+\subsection{Local Options}\label{subsec:lo}
+% BEGIN subsec:lo
+
+The following options affect the local structure or appearance of the tree and should typically be passed as options to the relevant node(s) within the tree.
+
+\DescribeKeys[foptbool]{grouped, not grouped}
+Indicate that a line is not an inference.
+When \keyname[fregbool]{single branches} is false, as it is with the default settings, this key is applied automatically and need not be given in the specification of the tree.
+When \keyname[fregbool]{single branches} is true, however, this key must be specified for any line which ought not be treated as an inference.
+\Example{grouped}
+
+\DescribeKey[fstyle]{checked}
+Mark a complex \wff{} as resolved, discharging the line.
+\Example{checked}
+\DescribeKey[fstyle]{checked}\val{name}\AfterLastParam
+Existential elimination, discharge by substituting \meta{name}.
+\Example{checked=a}
+
+\DescribeKey[fstyle]{close}
+Close branch.
+\Example{close}
+\DescribeKey[fstyle]{close}\val{annotation}\AfterLastParam
+\val{annotation prefix}\texttt{:}\meta{references}\AfterLastParam
+Close branch with annotation.
+In the simplest case, \meta{annotation} contains no colon and is typeset simply as it is.
+Any required references to other lines of the proof are assumed to be given explicitly.
+\Example{close=\arg{12,14}}
+If \meta{annotation} includes a colon, \pkg{prooftrees} assumes that it is of the form \meta{annotation prefix}\texttt{:}\meta{references}.
+In this case, the material prior to the colon should include material to be typeset before the line numbers and the material following the colon should consist of one or more references to other lines in the proof.
+In typical cases, no prefix will be required so that the colon will be the first character.
+In case there is a prefix, \pkg{prooftrees} will insert a space prior to the line numbers.
+\meta{references} may consist of either \pkg{forest} names (e.g.~given by \keyname*[fopttoks]{name}\val{name label} and then used as \meta{name label}) or \pkg{forest} relative node names (e.g.~\meta{nodewalk}) or a mixture.
+\Example{close=\arg{:negated conclusion}} where \verb|name=negated conclusion| was used to label an earlier proof line \verb|negated conclusion|.
+If multiple references are given, they should be separated by commas and either \meta{references} or the entire \meta{annotation} must be enclosed in curly brackets, as is usual for \TikZ{} and \pkg{forest} values containing commas.
+\Example{close=\arg{:!c,!uuu}}
+
+\DescribeKey[fstyle]{subs}\val{name}/\meta{names}\AfterLastParam
+Universal instantiation, instantiate with \meta{name} or \meta{names}.
+\Example{subs=\arg{a,b}}
+
+\DescribeKey[foptautotoks]{just}\val{justification}\AfterLastParam
+\val{justification prefix/suffix}\texttt{:}\meta{references}\AfterLastParam
+Justification for inference.
+This is typeset in text mode.
+Hence, mathematical expressions must be enclosed suitably in dollar signs or equivalent.
+In the simplest case, \meta{justification} contains no colon and is typeset simply as it is.
+Any required references to other lines of the proof are assumed to be given explicitly.
+\Example{just=3 \$\cs{lor}\$D}
+If \meta{justification} includes a colon, \pkg{prooftrees} assumes that it is of the form \meta{justification prefix/suffix}\texttt{:}\meta{references}.
+In this case, the material prior to the colon should include material to be typeset before or after the line numbers and the material following the colon should consist of one or more references to other lines in the proof.
+Whether the material prior to the colon is interpreted as a \meta{justification prefix} or a \meta{justification suffix} depends on the value of \keyname[fregbool]{just refs left}.
+\meta{references} may consist of either \pkg{forest} names (e.g.~given by \keyname*[fopttoks]{name}\val{name label} and then used as \meta{name label}) or \pkg{forest} relative node names (e.g.~\meta{nodewalk}) or a mixture.
+If multiple references are given, they should be separated by commas and \meta{references} must be enclosed in curly brackets.
+If \keyname[fregbool]{just refs left} is true, as it is by default, then the appropriate line number(s) will be typeset before the \meta{justification suffix}.
+\Example{just=\$\cs{lnot}\cs{exists}\$\cs{elim}:\arg{!uu,!u}}
+If \keyname[fregbool]{just refs left} is false, then the appropriate line number(s) will be typeset after the \meta{justification prefix}.
+\Example{just=From:bertha}
+
+\DescribeKey[fstyle]{move by}\val{positive integer}\AfterLastParam
+Move the content of the current line \meta{positive integer} lines later in the proof.
+If the current line has a justification and the content is moved, the justification will be moved with the line.
+Later lines in the same branch will be moved appropriately, along with their justifications.
+\Example{move by=3}
+Note that, in many cases, \pkg{prooftrees} will automatically move lines later in the proof.
+It does this when it detects a condition in which it expects conflicting justifications may be required for a line while initially parsing the tree.
+Essentially, \pkg{prooftrees} tries to detect cases in which a branch is followed closely by asymmetry in the structure of the branches.
+This happens, for example, when the first branch's first \wff{} is followed by a single \wff{}, while the second branch's first \wff{} is followed by another branch.
+Diagrammatically:
+\begin{center}
+ \forestset{declare boolean={go iawn}{1}}
+ \begin{forest}
+ for root={%
+ shape=coordinate,
+ for children={%
+ shape=coordinate,
+ no edge
+ },
+ },
+ for tree={%
+ delay={content={\wff}},
+ if level=3{WildStrawberry}{},
+ if level=2{edge={densely dashed},not go iawn}{},
+ parent anchor=children,
+ child anchor=parent,
+ },
+ before computing xy={%
+ where={n_children()==1}{%
+ for children={%
+ if go iawn={%
+ l=\baselineskip, no edge,
+ }{},
+ },
+ }{},
+ }
+ [
+ [[[[]][[][]]]]
+ [[[[[[,edge={densely dashed}, shape=coordinate, not go iawn, before drawing tree={for tree={fill=none, content={}, typeset node}}[,edge={densely dashed,-{Stealth[]}}, not go iawn]]]]][[][]]]]
+ ]
+ \end{forest}
+\end{center}
+In this case, \pkg{prooftrees} tries to adjust the tree by moving lines appropriately if required.
+
+However, this detection is merely structural --- \pkg{prooftrees} does not examine the content of the \wff s or justifications for this purpose.
+Nor does it look for slightly more distant structural asymmetries, conflicting justifications in the absence of structural asymmetry or potential conflicts with justifications for lines in other, more distant parallel branches.
+Although it is not that difficult to detect the \emph{need} to move lines in a greater proportion of cases, the problem lies in providing general rules for deciding \emph{how} to resolve such conflicts.
+(Indeed, some such conflicts might be better left unresolved e.g.~to fit a proof on a single Beamer slide.)
+In these cases, a human must tell \pkg{prooftrees} if something should be moved, what should be moved and how far it should be moved.
+
+Because simple cases are automatically detected, it is best to typeset the proof before deciding whether or where to use this option since \pkg{prooftrees} will assume that this option specifies movements which are required \emph{in addition to} those it automatically detects.
+Attempting to move a line ‘too far’ is not advisable.
+\pkg{prooftrees} tries to simply ignore such instructions, but the results are likely to be unpredictable.
+
+Not moving a line far enough --- or failing to move a line at all --- may result in the content of one justification being combined with that of another.
+This happens if \keyname[foptautotoks]{just} is specified more than once for the same proof line with differing content.
+\pkg{prooftrees} \emph{does} examine the content of justifications for \emph{this} purpose.
+When conflicting justifications are detected for the same proof line, the justifications are merged and a warning issued suggesting the use of \keyname[fstyle]{move by}.
+
+\DescribeKeys[foptbool]{highlight wff, not hightlight wff}
+Highlight \wff{}.
+\Example{highlight wff}
+
+\DescribeKeys[foptbool]{highlight just, not hightlight just}
+Highlight justification.
+\Example{highlight just}
+
+\DescribeKeys[foptbool]{highlight line no, not highlight line no}
+Highlight line number.
+\Example{highlight line no}
+
+\DescribeKeys[foptbool]{highlight line, not highlight line}
+Highlight proof line.
+\Example{highlight line}
+
+\DescribeKey[foptautotoks]{line no options}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to the line number for this line.
+\Example{line no options=\arg{blue}}
+
+\DescribeKey[foptautotoks]{just options}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to the justification for this line.
+\Example{just options=\arg{draw, font=\cs{bfseries}}}
+
+\DescribeKey[foptautotoks]{wff options}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to the \wff{} for this line.
+\Example{wff options=\arg{magenta, draw}}
+Note that this key is provided primarily for symmetry as it is faster to simply give the options directly to \pkg{forest} to pass on to \TikZ{}.
+Unless \keyname[fregkeylist]{wff format} is set to a non-default value, the following are equivalent:
+\begin{latexcode}
+ wff options={magenta, draw}
+ magenta, draw
+\end{latexcode}
+
+\DescribeKey[foptautotoks]{line options}\val{key-value list}\AfterLastParam
+Additional \TikZ{} keys to apply to this proof line.
+\Example{line options=\arg{draw, rounded corners}}
+
+% END subsec:lo
+% END sec:ops
+
+\section{Macros}\label{sec:macros}
+% BEGIN sec:macros
+
+\DescribeMacro{\linenumberstyle}\marg{number}\AfterLastParam
+This macro is responsible for formatting the line numbers.
+The default definition is
+\begin{latexcode}
+ \newcommand*\linenumberstyle[1]{#1.}
+\end{latexcode}
+It may be redefined with \cs{renewcommand*} in the usual way.
+For example, if for some reason you would like bold line numbers, try
+\begin{latexcode}
+ \renewcommand*\linenumberstyle[1]{\textbf{#1.}}
+\end{latexcode}
+
+% END sec:macros
+
+\section{Compatibility}\label{sec:compat}
+% BEGIN sec:compat
+
+Versions of \pkg{prooftrees} prior to 0.5 are incompatible with \pkg{bussproofs}, which also defines a \env{prooftree} environment.
+Version 0.6 is compatible with \env{bussproofs} provided
+\begin{description}[font=\itshape]
+ \item[either] \pkg{bussproofs} is loaded \emph{before} \pkg{prooftrees}
+ \item[or] \pkg{prooftrees} is loaded with option \option{tableaux} (see \cref{sec:llwytho}).
+\end{description}
+In either case, \pkg{prooftrees} will \emph{not} define a \env{prooftree} environment, but will instead define \env{tableau}.
+This allows you to use \env{tableau} for \pkg{prooftrees} trees and \env{prooftree} for \pkg{bussproofs} trees.
+
+% END sec:compat
+
+\section{Version History}\label{sec:hanes}
+% BEGIN sec:hanes
+
+\subsection*{0.6}\label{subsec:v0.6}
+% BEGIN subsec:v0.6
+
+Add compatibility option for use with \pkg{bussproofs}.
+See \cref{sec:llwytho}.
+Thanks to Peter Smith for suggesting this.
+
+% END subsec:v0.6
+
+\subsection*{0.5}\label{subsec:v0.5}
+% BEGIN subsec:v0.5
+
+Significant re-implementation leveraging the new argument processing facilities in \pkg{forest} 2.1.
+This significantly improves performance as the code is executed much faster than the previous \pkg{pgfmath} implementation.
+
+% END subsec:v0.5
+
+\subsection*{0.41}\label{subsec:v0.41}
+% BEGIN subsec:v0.41
+
+Update for compatibility with \pkg{forest} 2.1.
+
+% END subsec:v0.41
+
+\subsection*{0.4}\label{subsec:v0.4}
+% BEGIN subsec:v0.4
+
+Bug fix release:
+\begin{itemize}
+ \item \keyname[fregcount]{line no shift} was broken;
+ \item in some cases, an edge was drawn where no edge belonged.
+\end{itemize}
+
+% END subsec:v0.4
+
+\subsection*{0.3}\label{subsec:v0.3}
+% BEGIN subsec:v0.3
+
+First CTAN release.
+
+% END subsec:v0.3
+
+% END sec:hanes
+
+\printbibliography
+\clearpage
+
+\loadgeometry{safonol}%
+\fancyheadoffset[lh]{0pt}%
+\printindex
+
+\end{document}
diff --git a/graphics/pgf/contrib/prooftrees/prooftrees_biber.bib b/graphics/pgf/contrib/prooftrees/prooftrees_biber.bib
new file mode 100644
index 0000000000..c2c6dba09b
--- /dev/null
+++ b/graphics/pgf/contrib/prooftrees/prooftrees_biber.bib
@@ -0,0 +1,27 @@
+@BOOK{hodges-logic,
+ AUTHOR = {Hodges, Wilfred},
+ ISBN = {0140136363},
+ PUBLISHER = {Penguin},
+ TITLE = {Logic: An Introduction to Elementary Logic},
+ YEAR = {1977, 1991},
+}
+
+@MANUAL{saso-forest-manual,
+ AUTHOR = {Živanović, Sašo},
+ DATE = {2016-03-04},
+ EDITION = {2.0.2},
+ KEYWORDS = {TeX, LaTeX, PGF, TikZ, Forest},
+ TITLE = {Forest: A {PGF}/Ti\mkbibemph{k}{Z}-Based Package for Drawing Linguistic Trees},
+ URL = {http://spj.ff.uni-lj.si/zivanovic/},
+}
+
+@MANUAL{tantau-tikz-pgf-manual,
+ AUTHOR = {Tantau, Till},
+ DATE = {2015-08-29},
+ EDITION = {3.0.1a},
+ KEYWORDS = {TeX, LaTeX, PGF, TikZ},
+ SUBTITLE = {Manual for Version 3.0.1a},
+ TITLE = {The {T}i\mkbibemph{k}{Z} and {PGF} Packages},
+ URL = {http://sourceforge.net/projects/pgf},
+}
+
diff --git a/graphics/pgf/contrib/ptolemaicastronomy/README.md b/graphics/pgf/contrib/ptolemaicastronomy/README.md
new file mode 100644
index 0000000000..1b1d10ff13
--- /dev/null
+++ b/graphics/pgf/contrib/ptolemaicastronomy/README.md
@@ -0,0 +1,37 @@
+ptolemaicastronomy
+==================
+
+Diagrams of sphere models for variably strict conditionals (Lewis
+counterfactuals)
+
+Author: Richard Zach
+E-mail: rzach@ucalgary.ca
+License: Released under the LaTeX Project Public License v1.3c or later
+See: http://www.latex-project.org/lppl.txt
+
+David K. Lewis (Counterfactuals, Blackwell 1973) introduced a sphere
+semantics for counterfactual conditionals. He jokingly referred to the
+diagrams depicting such sphere models as Ptolemaic astronomy, hence
+the name of this package. It has nothing to do with Ptolemy or with
+astronomy, sorry.
+
+The macros provided in this package aid in the construction of
+sphere model diagrams in the style of Lewis. The macros all make use
+of TikZ.
+
+See https://github.com/rzach/ptolemaic-astronomy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.dtx b/graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.dtx
new file mode 100644
index 0000000000..e00111ae4b
--- /dev/null
+++ b/graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.dtx
@@ -0,0 +1,471 @@
+% \iffalse meta-comment
+% vim: textwidth=75
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+ptolemaicastronomy
+==================
+
+Diagrams of sphere models for variably strict conditionals (Lewis
+counterfactuals)
+
+Author: Richard Zach
+E-mail: rzach@ucalgary.ca
+License: Released under the LaTeX Project Public License v1.3c or later
+See: http://www.latex-project.org/lppl.txt
+
+David K. Lewis (Counterfactuals, Blackwell 1973) introduced a sphere
+semantics for counterfactual conditionals. He jokingly referred to the
+diagrams depicting such sphere models as Ptolemaic astronomy, hence
+the name of this package. It has nothing to do with Ptolemy or with
+astronomy, sorry.
+
+The macros provided in this package aid in the construction of
+sphere model diagrams in the style of Lewis. The macros all make use
+of TikZ.
+
+See https://github.com/rzach/ptolemaic-astronomy
+
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+
+ptolemaicastronomy
+==================
+
+Diagrams of sphere models for variably strict conditionals (Lewis
+counterfactuals)
+
+Author: Richard Zach
+E-mail: rzach@ucalgary.ca
+License: Released under the LaTeX Project Public License v1.3c or later
+See: http://www.latex-project.org/lppl.txt
+
+David K. Lewis (Counterfactuals, Blackwell 1973) introduced a sphere
+semantics for counterfactual conditionals. He jokingly referred to the
+diagrams depicting such sphere models as Ptolemaic astronomy, hence
+the name of this package. It has nothing to do with Ptolemy or with
+astronomy, sorry.
+
+The macros provided in this package aid in the construction of
+sphere model diagrams in the style of Lewis. The macros all make use
+of TikZ.
+
+for documentation and source code see
+https://github.com/rzach/ptolemaic-astronomy
+
+\endpreamble
+\usedir{tex/latex/ptolemaicastronomy}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/ptolemaicastronomy}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/ptolemaicastronomy}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{ptolemaicastronomy.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{ptolemaicastronomy}
+%<*package>
+ [2018/04/08 v1.00 Diagrams of sphere models for variably strict conditionals (Lewis counterfactuals)]
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[numbered]{hypdoc}
+\usepackage{\jobname}
+\usepackage{lstdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{\jobname.dtx}
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+%\title{\textsf{ptolemaicastronomy} --- Diagrams of sphere models for variably strict conditionals (Lewis counterfactuals)\thanks{This file
+% describes version \fileversion, last revised \filedate.}
+%}
+%\author{Richard Zach\thanks{\href{http://richardzach.org/}{richardzach.org}, E-mail: rzach@ucalgary.ca}}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+%\changes{v1.00}{2018/04/08}{First public release}
+%
+% \section{Introduction}
+
+% Lewis\footnote{David K. Lewis, \emph{Counterfactuals} (Blackwell
+% 1973)} introduced a sphere semantics for counterfactual
+% conditionals. He jokingly referred to the diagrams depicting such
+% sphere models as ``Ptolemaic astronomy,'' hence the name of this
+% package. It has nothing to do with Ptolemy or with astronomy, sorry.
+
+% The macros provided in this package aid in the construction of
+% sphere model diagrams in the style of Lewis. The macros all make use
+% of \href{https://ctan.org/tex-archive/graphics/pgf/}{Ti\emph{k}Z}.
+
+% Source code can be found at \url{https://github.com/rzach/ptolemaic-astronomy}
+%
+% \section{Usage}
+%
+% \DescribeMacro{\spheresystem}
+% To draw a sphere system with \meta{n} layers, say
+% \cmd{\spheresystem}\marg{n}:
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}
+% \spheresystem{5}
+% \end{tikzpicture}
+% \end{lstsample}
+% The width of each layer is determined by the TikZ parameter
+% \verb|layerwidth| and defaults to $.5$ TikZ units (so $0.5$ cm by
+% default). The radius of the center sphere is \emph{not}
+% \verb|layerwidth|, but $\verb|layerwidth| \times (1 -
+% \verb|innerfactor|)$. \verb|innerfactor| defaults to $0.4$.
+% Spheres are drawn in \verb|dotted| style by default. You can change
+% this by passing an option to \cmd{\spheresystem}, e.g.,
+% to get red, dashed, thick lines and wider layers:
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}
+% \spheresystem[dashed, red,
+% thick, layerwidth=.75]{3}
+% \end{tikzpicture}
+% \end{lstsample}
+% \DescribeMacro{\spherelayer} \DescribeMacro{\spherefill} These
+% macros shade the \meta{n}-th layer of the sphere model, or the
+% entire \meta{n}-th sphere. The fill defaults to \verb|lightgray| and
+% can be changed with \oarg{options}. Note that the fill extends to the
+% center of the layer boundary line, so you should fill first and then
+% draw the spheres. For instance:
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}
+% \spherelayer{3}
+% \spherefill[yellow]{1}
+% \spheresystem[densely dashed]{3}
+% \end{tikzpicture}
+% \end{lstsample}
+% \DescribeMacro{\proposition}
+% \DescribeMacro{\propositionintersect}
+
+% A proposition is a set of worlds which (usually) intersects with a
+% sphere system. A common way of drawing them is as a parabola, and
+% often we want to highlight the intersection of the proposition with
+% the closest sphere with which it intersects.
+% \cmd{\proposition}\marg{direction}\marg{n}\marg{width}\marg{length}
+% will draw such a parabola. \meta{direction} is the angle (0 is due
+% east and 90 is due north) from which you want the proposition to
+% reach into the sphere system. \meta{n} is the innermost layer you
+% want it to intersect. \meta{width} and \meta{length} describe the
+% triangle with apex \meta{width} degrees and sides of length
+% \meta{length}. Use \cmd{\propositionintersect} to also highlight the
+% intersection with the \meta{n}-th sphere. E.g., here are
+% propositions that intersects the 3rd layer at 45 degrees, with a
+% width of 20, 40, and 60 degrees, and the intersection of the first
+% one with the innermost sphere it intersects.
+
+% With the \verb|shift| option you can also position propositions outside the center, e.g., a proposition extending from the north through the west side of the sphere system would use, say, \verb|shift={(-1,-1)}|.
+
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}
+% \propositionintersect{45}{3}{20}{3}
+% \proposition{45}{3}{40}{3}
+% \proposition{45}{3}{60}{3}
+% \proposition[shift={(-1,-1)}]{90}{1}{20}{4}
+% \spheresystem{5}
+% \end{tikzpicture}
+% \end{lstsample}
+
+% The degree of ``pointedness'' of propositions is determined by the
+% \verb|tension| parameter, which defaults to $1.7$. Larger values
+% make the proposition more bulgy, smaller values more pointy.
+
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}
+% \proposition[green,
+% proposition/.style={tension=3}]{0}{3}{80}{3}
+% \proposition{0}{3}{80}{3}
+% \proposition[red,
+% proposition/.style={tension=1}]{0}{3}{80}{3}
+% \proposition[blue,
+% proposition/.style={tension=.5}]{0}{3}{80}{3}
+% \spheresystem{5}
+% \end{tikzpicture}
+% \end{lstsample}
+
+% \DescribeMacro{\spherepos}
+% \cmd{\spherepos}\marg{direction}\marg{n}\marg{code} moves to a
+% position in the center of layer \meta{n} in \meta{direction} and
+% then executes TikZ \verb|path| code \meta{code}. It's useful to put
+% labels or other things into the sphere system.
+
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}
+% \propositionintersect{45}{3}{20}{3}
+% \spheresystem{5}
+% \spherepos[fill,red]{45}{3}{circle[radius=.1]}
+% \spherepos{90}{4}{node {$w$}}
+% \spherepos{45}{6.5}{node {$\varphi$}}
+% \end{tikzpicture}
+% \end{lstsample}
+
+% \DescribeMacro{\sphereintersect} \cmd{\propositionintersect} uses
+% \cmd{\sphereintersect}\oarg{options}\marg{n}\marg{code} to fill the
+% area between the parabola and the outside edge of the \meta{n}-th
+% sphere. (More precisely: what happens is that the area between the
+% parabola and the line between its two endpoints is set as the
+% clipping path, and then TikZ only shows the part of the shaded
+% sphere within that clipping path.) That macro can also be used to
+% intersect the respective layer with other paths, and in cases where
+% the convex closure of the proposition does not include enough area.
+% In that case, the clipping region has to be extended, and the path
+% drawn separately. The example below shows what happens when a very
+% wide parabola does not completely intersect with a sphere (on the
+% right), how to use the trick to get the fill right (on the left), as
+% well as how to intersect a more complex path with a sphere.
+
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}
+% \propositionintersect{0}{3}{140}{3}
+% \sphereintersect{3}{\propositionplot{180}{3}{140}{3} -- (-2,-2)}
+% \proposition{180}{3}{140}{3}
+% \sphereintersect{4}{plot[smooth] coordinates
+% {(1.5,2) (2.5,1) (1.5,0) (2.5,-1) (1.5,-2) (2.5,-3)}}
+% \draw[red] plot[smooth] coordinates
+% {(1.5,2) (2.5,1) (1.5,0) (2.5,-1) (1.5,-2) (2.5,-3)} ;
+% \spheresystem{5}
+% \end{tikzpicture}
+% \end{lstsample}
+
+% Finally, a complex example: the Sobel sequence diagram, Figure~2 from Lewis, p.~11:
+% \begin{lstsample}{}{}
+% \begin{tikzpicture}[scale=.8]\small
+% % wider layers, pointier propositions
+% \tikzset{layerwidth=1,innerfactor=0,
+% proposition/.style={smooth,tension=1}}
+% % fill the areas between three props and their innermost spheres
+% \sphereintersect{3}{\propositionplot{30}{3.3}{30}{4}}
+% \sphereintersect{2}{\propositionplot{30}{2.3}{45}{4}}
+% \sphereintersect{1}{\propositionplot{30}{1.3}{60}{4}}
+% % draw the sphere system
+% \spheresystem{3}
+% % draw the propositions
+% \draw \propositionplot{30}{3.3}{30}{4};
+% \draw \propositionplot{30}{2.3}{45}{4};
+% \draw \propositionplot{30}{1.3}{60}{4};
+% % draw \psi (coordinates figured out by trial and error)
+% \draw plot[smooth,tension=1.2]
+% coordinates {(-1.5,3) (1.2,-1) (.8,2.3) (2.8,.7) (3,4)};
+% % draw and label the center world, spheres, and propositions
+% \filldraw circle[radius=.05];
+% \node at (-.2,-.2) {$i$};
+% \spherepos{-70}{1.8}{node {$S^1_i$}}
+% \spherepos{-70}{2.8}{node {$S^2_i$}}
+% \spherepos{-70}{3.8}{node {$S^3_i$}}
+% \spherepos{4}{4.3}{node {$\phi_1$}
+% node at +(0,.5) {$\phi_2$}
+% node at +(0,1) {$\phi_3$}}
+% \spherepos{80}{4}{node {$\psi$}}
+% \end{tikzpicture}
+% \end{lstsample}
+
+%\StopEventually{^^A
+% \PrintChanges
+% \PrintIndex
+%}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*package>
+% \fi
+%
+% \begin{macrocode}
+\RequirePackage{tikz}
+
+\tikzset{
+ sphere/.style = {dotted},
+ sphere intersection/.style = {fill=lightgray},
+ sphere layer/.style = {fill=lightgray},
+ proposition/.style={smooth,tension=1.7},
+}
+% \end{macrocode}
+% \begin{macro}{layerwidth}
+% \begin{macro}{innerfactor}
+% TikZ parameters used to compute the sphere radii and can be set
+% using TikZ's options mechanism or using \cmd{\tikzset}.
+% \begin{macrocode}
+\pgfkeyssetvalue{/tikz/layerwidth}{.5}
+\pgfkeyssetvalue{/tikz/innerfactor}{.4}
+% \end{macrocode}
+% \end{macro}\end{macro}
+% \begin{macro}{\sphereplot}
+% \cmd{\sphereplot}\marg{n} gives the plot codes for the \meta{n}-th sphere
+% \begin{macrocode}
+\newcommand{\sphereplot}[1]{
+ circle
+ [radius=(#1)*\pgfkeysvalueof{/tikz/layerwidth}-
+ \pgfkeysvalueof{/tikz/layerwidth}*\pgfkeysvalueof{/tikz/innerfactor}]
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\spheresystem}
+% \cmd{\spheresystem}\oarg{options}\marg{n} draws a sphere system centered at
+% the origin with \meta{n} number of layers
+%
+% \begin{macrocode}
+\newcommand{\spheresystem}[2][]{
+ \foreach \i in {1,...,#2}{
+ \draw[sphere,#1] \sphereplot{\i} ;
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+
+%
+%
+% \begin{macro}{\spherelayer}
+% \cmd{\spherelayer}\oarg{options}\marg{n} shades the \meta{n}-th layer
+% \begin{macrocode}
+\newcommand{\spherelayer}[2][]{
+ \begin{scope}[even odd rule]
+ \fill[#1,sphere layer]
+ \sphereplot{#2-1} \sphereplot{#2} ;
+ \end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spherefill}
+%
+% \cmd{\spherefill}\oarg{options}\marg{n} fills the \meta{n}-th sphere
+%
+% \begin{macrocode}
+\newcommand{\spherefill}[2][]{
+ \fill[sphere intersection,#1]
+ \sphereplot{#2} ;
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\sphereintersect}
+% \cmd{\sphereintersect}\oarg{options}\marg{n}\marg{path} shades the
+% area between \meta{path} and the the \meta{n}-th sphere
+% layer. Options only apply to the sphere layer.
+% \begin{macrocode}
+\newcommand{\sphereintersect}[3][]{
+ \begin{scope}[even odd rule]
+ \path[clip] #3;
+ \spherefill[#1]{#2}
+ \end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\propositionplot}
+% \cmd{\propositionplot}\oarg{options}\marg{direction}\marg{n}\marg{width}\marg{length}
+% produces the \verb|plot| code for a proposition intersecting the \meta{n}-th layer in angle \meta{direction}
+% away from the center of the sphere system, with endpoints \meta{length}
+% away from the center at an angle of $\meta{direction} \pm \meta{width}/2$.
+% \begin{macrocode}
+\newcommand{\propositionplot}[4]{
+ plot [proposition]
+ coordinates {+(#1+#3/2:#4)
+ +(#1:#2*\pgfkeysvalueof{/tikz/layerwidth}-
+ \pgfkeysvalueof{/tikz/layerwidth}*.9
+ -\pgfkeysvalueof{/tikz/layerwidth}*\pgfkeysvalueof{/tikz/innerfactor})
+ +(#1-#3/2:#4)}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\proposition}
+% \cmd{\proposition}\oarg{options}\marg{direction}\marg{n}\marg{width}\marg{length}
+% actually draws the proposition. Note that \meta{options} applies to
+% \cmd{\draw}, not to \cs{plot}.
+% \begin{macrocode}
+\newcommand{\proposition}[5][]{
+ \draw[proposition,#1] \propositionplot {#2}{#3}{#4}{#5} ;
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\propositionintersect}
+% \cmd{\spherepropositionintersect} does the same as \cmd{\sphereproposition} but
+% also shades the area of intersection with the \meta{n}-th sphere.
+%
+% \begin{macrocode}
+\newcommand{\propositionintersect}[5][]{
+ \begin{scope}
+ \path[clip] \propositionplot{#2}{#3}{#4}{#5};
+ \spherefill[#1]{#3}
+ \end{scope}
+ \draw[proposition,#1] \propositionplot{#2}{#3}{#4}{#5};
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spherepos}
+% \cmd{\spherepos}\oarg{options}\marg{direction}\marg{n}\marg{code}
+% shifts the scope to a position in the center of the \meta{n}-th layer in
+% direction angle from the center---and then puts a \meta{code} \verb|path|
+% there.
+%\begin{macrocode}
+\newcommand{\spherepos}[4][]{
+ \begin{scope}[shift=(#2:#3*\pgfkeysvalueof{/tikz/layerwidth}-
+ \pgfkeysvalueof{/tikz/layerwidth}/2-
+ \pgfkeysvalueof{/tikz/layerwidth}*\pgfkeysvalueof{/tikz/innerfactor})]
+ \path[#1] #4 ;
+ \end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale
+\endinput
+
diff --git a/graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.pdf b/graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.pdf
new file mode 100644
index 0000000000..82cbc04278
--- /dev/null
+++ b/graphics/pgf/contrib/ptolemaicastronomy/ptolemaicastronomy.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pxpgfmark/LICENSE b/graphics/pgf/contrib/pxpgfmark/LICENSE
new file mode 100644
index 0000000000..4acbc24501
--- /dev/null
+++ b/graphics/pgf/contrib/pxpgfmark/LICENSE
@@ -0,0 +1,27 @@
+$BK\%=%U%H%&%'%"$O(B MIT $B%i%$%;%s%9$N2<$GG[I[$5$l$^$9!#(B
+$BCx:n8"$O:n<T$G$"$k!VH,EP(B $B?rG7!JJLL>(B ZR$B!K!W$KB0$7$^$9!#(B
+$B$^$?K\%=%U%H%&%'%"$OL5J]>Z$G$9!#(B
+
+This software is distributed under the MIT License.
+
+The MIT License
+
+Copyright (c) 2013 Takayuki YATO (aka. "ZR")
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/graphics/pgf/contrib/pxpgfmark/README b/graphics/pgf/contrib/pxpgfmark/README
new file mode 100644
index 0000000000..27fbb3b00c
--- /dev/null
+++ b/graphics/pgf/contrib/pxpgfmark/README
@@ -0,0 +1,37 @@
+PXpgfmark Package
+=================
+
+LaTeX: to make inter-picture connections work with e-pTeX engine
+
+PGF/TikZ's feature of “inter-picture connectionsâ€
+(`remember picture` option) depends on the “save position†feature
+of pdfTeX. Today the latter feature is also supported by XeTeX
+and e-(u)pTeX engines. Unfortunately, PGF's driver for dvipdfmx
+relies on testing on engine (not feature) and thus inter-picture
+connections still fail on e-pTeX + dvipdfmx. This package fixes
+the problem.
+
+### Installation
+
+ - `*.sty` → $TEXMF/tex/latex/PXpgfmark
+
+### Usage
+
+Load this package after tikz (or pgf) package.
+
+ \documentclass[dvipdfmx]{article}
+ \usepackage{tikz} % or pgf
+ \usepackage{pxpgfmark}
+
+Note that this package is of no use unless you work on e-(u)pTeX +
+dvipdfmx combination.
+
+Revision History
+----------------
+
+ * Version 0.1 <2013/02/18>
+ - The first public version.
+
+--------------------
+Takayuki YATO (aka. "ZR")
+http://zrbabbler.sp.land.to/
diff --git a/graphics/pgf/contrib/pxpgfmark/pxpgfmark.sty b/graphics/pgf/contrib/pxpgfmark/pxpgfmark.sty
new file mode 100644
index 0000000000..c2609d0e64
--- /dev/null
+++ b/graphics/pgf/contrib/pxpgfmark/pxpgfmark.sty
@@ -0,0 +1,18 @@
+% pxpgfmark.sty
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pxpgfmark}[2013/02/18 v0.1]
+\@ifpackageloaded{pgfcore}{}{%else
+ \PackageError{pxpgfmark}{Package 'pgfcore' must be loaded}\@ehc}
+\def\pxqmk@tempa{pgfsys-dvipdfmx.def}
+\ifx\pgfsysdriver\pxqmk@tempa
+ \@tempswatrue
+ \ifx\pdfsavepos\@undefined \@tempswafalse \fi
+ \ifx\pdflastxpos\@undefined \@tempswafalse \fi
+ \ifx\pdflastypos\@undefined \@tempswafalse \fi
+ \ifx\pgf@sys@pdf@dvi@tracker\@undefined \@tempswafalse \fi
+ \if@tempswa
+ \pgf@sys@pdf@dvi@tracker
+ \PackageInfo{pxpgfmark}{Position marking enabled}
+ \fi
+\fi
+%% EOF
diff --git a/graphics/pgf/contrib/quantikz/README.md b/graphics/pgf/contrib/quantikz/README.md
new file mode 100644
index 0000000000..bd869cdbeb
--- /dev/null
+++ b/graphics/pgf/contrib/quantikz/README.md
@@ -0,0 +1,7 @@
+#Quantikz#
+
+The package is quantikz, written by Alastair Kay. Its purpose is to extend tikz with the functionality for drawing quantum circuit diagrams.
+
+It is covered by a CC-BY 4.0 license.
+
+Please see the manual for detailed usage. \ No newline at end of file
diff --git a/graphics/pgf/contrib/quantikz/quantikz.pdf b/graphics/pgf/contrib/quantikz/quantikz.pdf
new file mode 100644
index 0000000000..39a11433e5
--- /dev/null
+++ b/graphics/pgf/contrib/quantikz/quantikz.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/quantikz/quantikz.tex b/graphics/pgf/contrib/quantikz/quantikz.tex
new file mode 100644
index 0000000000..1153b735af
--- /dev/null
+++ b/graphics/pgf/contrib/quantikz/quantikz.tex
@@ -0,0 +1,1101 @@
+\documentclass[aps,pra,10pt,nofootinbib]{revtex4}
+%\pdfoutput=1
+% Package(s) to include
+%\listfiles
+\usepackage{amsfonts,amssymb,amsmath} % for math symbols.
+\usepackage{lmodern,adjustbox}
+\usepackage[skins,breakable]{tcolorbox}
+\usepackage{tikz}
+\usetikzlibrary{quantikz}
+\tcbuselibrary{listings}
+\tcbuselibrary{breakable}
+\lstset{
+basicstyle=\small\ttfamily,
+columns=flexible,
+breaklines=true
+}
+\usepackage[pdftex,hyperfigures,pdfpagelabels]{hyperref}
+%\lstloadlanguages{Latex}
+
+\newtcolorbox{Code}{enhanced,fonttitle=\sffamily\bfseries\large,valign=center
+,drop fuzzy shadow,sidebyside,lefthand ratio=0.4,lower separated=false}
+
+\begin{document}
+
+\title{Tutorial on the Quantikz Package}
+\date{\today}
+\author{Alastair \surname{Kay}}
+\affiliation{Royal Holloway University of London, Egham, Surrey, TW20 0EX, UK}
+\email{alastair.kay@rhul.ac.uk}
+\begin{abstract}
+\end{abstract}
+\maketitle
+I've always used \href{https://arxiv.org/abs/quant-ph/0406003}{QCircuit} for typesetting quantum circuit diagrams within \LaTeX, but found the Xy-pic based notation rather impenetrable and I struggled to adapt it for my needs (this is probably my failing rather than the package's). Thus, I wanted a tikz package that could do the same. That package is Quantikz. Those familiar with QCircuit will recognise much of the notation, although it has evolved a bit (hopefully simplified!).
+
+\section{Usage}
+
+The quantikz package is available on CTAN, and will therefore be available through most (current) TeX distributions. Once installed, simply write
+\begin{verbatim}
+\usepackage{tikz}
+\usetikzlibrary{quantikz}
+\end{verbatim}
+in the preamble of your document
+Now, each time that you want to include a quantum circuit, you just enclose it in a \verb!tikzcd! or \verb!quantikz! environment. (Theoretically, there is an advantange of \verb!quantikz! over \verb!tikzcd!, but \verb!tikzcd! is retained for backwards compatibility\footnote{\texttt{quantikz} should support the external package in tikz. I've never tried it.}.)
+
+The current version of TeX on the arXiv is not up to date enough to provide the quantikz package. When uploading your source to the arXiv, you need to obtain the file tikzlibraryquantikz.code.tex (you will always be able to locate it on your computer in the main tex directory if you have installed the package, but it should also accompany the source code of this file, and the most recent version will is available \href{http://dx.doi.org/10.17637/rh.7000520}{here}). Just include the file in the main directory of your source code.
+\section{A Single Wire}
+%\expandafter\def\expandafter\mname\expandafter{\getrandomletter}
+Quantum circuits are laid out with a matrix notation, with cells separated by \& (just like all matrices, tables etc.\ in \LaTeX). Here, we typeset a single quantum wire.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{$\ket{0}$} & \phase{\alpha} & \gate{H} & \phase{\beta} & \gate{H} & \phase{\gamma} & \rstick{Arbitrary\\pure state}\qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+ \begin{quantikz}
+ \lstick{\ket{0}} & \phase{\alpha} & \gate{H}
+ & \phase{\beta} & \gate{H} & \phase{\gamma}
+ & \rstick{Arbitrary\\pure state}\qw
+ \end{quantikz}
+\end{lstlisting}
+\end{Code}
+Single-qubit gates take the form \verb!\gate{H}!, with any sequence of maths allowed in the argument\footnote{See Sec.\ \ref{sec:trouble} in case you need to use \& characters in the maths.}, or, for phase gates, \verb!\phase{phase}!. The first gate should be in the second column rather than the first (so that the preceding quantum wire has somewhere to go). You {\em can} put it in the first column, it just won't have an incoming wire.
+
+Text can be added at the start of a quantum wire using \verb!\lstick{}!, and at the end using \verb!\rstick{}!. These are not maths environments, but you can of course insert maths delimiters such as \$.
+Notice that a multi-line \verb!lstick! or \verb!rstick! is trivial\footnote{The only issue is that the height of the label will not be taken into account in the vertical spacing of quantum wires. You may have to adjust this manually. See Section \ref{sec:align} for an example of how to achieve this.}.
+
+\subsection{Measurements}
+
+There are several measurement devices to choose from, and the measurement basis can be specified as the parameter:
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \meter{0} && \meterD{1} & & \measuretab{\text{out}}& & \measure{\text{basis}}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \meter{0} && \meterD{1} && \measuretab{\text{out}} && \measure{\text{basis}}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+Thus, in our previous circuit:
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{\ket{0}} & \phase{\alpha} & \gate{H} & \phase{\beta} & \gate{H} & \phase{\gamma} & \meter{$\ket{\pm}$}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick{\ket{0}} & \phase{\alpha} & \gate{H} & \phase{\beta} & \gate{H} & \phase{\gamma} & \meter{$\ket{\pm}$}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\subsection{Wires and Arrows}
+
+There are a few bells and whistles: \verb!\qw! connects a quantum wire from the current cell back to the previous one. Most gates have this built in (\verb!\rstick! is the notable exception). Equally, sometimes you want a `do nothing' operation, and \verb!\qw! is perfect for that. Also, you can just insert text into a cell without boxing it (as you would for a gate). This can be useful for errors, and is achieved with \verb!\push{}!.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{$\ket{0}$\\initial state} & \qw & \push{X} & \qw & \rstick{$\ket{1}$} \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick{$\ket{0}$\\initial state} & \qw & \push{X} & \qw & \rstick{$\ket{1}$} \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+Since we have built quantikz on top of tikzcd, any of the standard arrow commands will work. For example, after a measurement, you might want to use an arrow to report a particular measurement outcome using \verb!\arrow[r]!. The \verb!r! conveys that the arrow should head one cell to the right. You can use combinations of up (u), down (d), left (l) and right as you wish. For more styling options, see the \href{http://mirrors.ctan.org/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdf}{tikzcd manual}.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{$\ket{0}$\\initial state} & \qw & \push{X} & \qw & \meter{0/1} \arrow[r] & \rstick{$\ket{1}$}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick{$\ket{0}$\\initial state} & \qw & \push{X} & \qw & \meter{0/1} \arrow[r] & \rstick{$\ket{1}$}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+Sometimes, you may want to group a whole bunch of wires together. Use \verb!\qwbundle! instead of \verb!\qw!.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{$\ket{0}^{\otimes n}$} &[2mm] \gate{H}\qwbundle{3} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick{$\ket{0}^{\otimes n}$} &[2mm] \gate{H}\qwbundle{3} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+\noindent The size of the strike can be altered by issuing the commands \verb!\pgfkeyssetvalue{/quantikz/Strike Height}{new height}! and \verb!\pgfkeyssetvalue{/quantikz/Strike Width}{new width}!. I felt this example benefited from some additional spacing (of 2mm) on one column. For more spacing options, see Sec.\ \ref{sec:spacing}.
+
+You can access an alternative form for the multi-qubit wire using the \verb!alternate! key:
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{$\ket{0}^{\otimes n}$} & \gate{H} \qwbundle[alternate]{}& \qwbundle[alternate]{}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick{$\ket{0}^{\otimes n}$} & \gate{H} \qwbundle[alternate]{}& \control\qwbundle[alternate]{}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+\noindent The alternate version does not represent how many wires are supposed to be in the bundle.
+
+
+\section{Multiple Qubits}
+
+New rows are started with \textbackslash\textbackslash. If the wires don't interact, then you proceed exactly as before. Naturally, there are several gates that induce interaction between wires: \verb!\ctrl{3}! makes a control-qubit (for controlled-not, controlled-phase, controlled-$U$, etc), where the target is 3 wires below. \verb!\octrl! is near-identical, except the control circle is open, as usually used to convey being controlled off $\ket{0}$ instead of $\ket{1}$. These will need to be matched with target commands. These could be normal gates or \verb!\targ{}! (controlled-not), \verb!\control{}! (controlled-phase), \verb!\ocontrol{}! (controlled-phase, controlled off $\ket{0}$). There is also a swap gate, \verb!\swap{2}!, with target \verb!\targX{}!\footnote{For a variant, see Sec.\ \ref{sec:boxing}.}. These can be combined to give multi-controlled gates.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{$\ket{0}$} & \gate{H} & \ctrl{1} & \gate{U} & \ctrl{1} & \swap{2} & \ctrl{1} & \qw \\
+\lstick{$\ket{0}$} & \gate{H} & \targ{} & \octrl{-1} & \control{} & \qw & \octrl{1} & \qw \\
+&&&&&\targX{} & \gate{U} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick{$\ket{0}$} & \gate{H} & \ctrl{1} & \gate{U} & \ctrl{1} & \swap{2} & \ctrl{1} & \qw \\
+\lstick{$\ket{0}$} & \gate{H} & \targ{} & \octrl{-1} & \control{} & \qw & \octrl{1} & \qw \\
+&&&&&\targX{} & \gate{U} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+If you want a gate that is one control and several targets, you may need the command \verb!\vqw{1}! (vertical quantum wire) to create vertical connections, or possibly \verb!\vcw{1}! to create the classical version.
+
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \targ{} & \gate{U} & \qw \\
+& \ctrl{1} \vqw{-1} & \meter{} \vcw{-1} \\
+& \targ{} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \targ{} & \gate{U} & \qw \\
+& \ctrl{1} \vqw{-1} & \meter{} \vcw{-1} \\
+& \targ{} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+If you want to use classical controls with both horizontal and vertical components, you can do the following.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \ctrl{1} & \qw & \gate{U} & \gate{V} \\
+& \targ{} \vqw{1} & \meter{} & \cwbend{-1} \\
+& \targ{} & \meter{} & \cw & \cwbend{-2} &
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \ctrl{1} & \qw & \gate{U} & \gate{V} \\
+& \targ{} \vqw{1} & \meter{} & \cwbend{-1} \\
+& \targ{} & \meter{} & \cw & \cwbend{-2} &
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\section{Operating on Many Qubits}
+
+We have already met the \verb!\lstick!, \verb!\rstick!, and \verb!\gate! commands. By default, these all act on a single quantum wire. However, they also take the optional parameter \verb!wires=n! to specify that they should extend over $n$ wires. The syntax is otherwise unchanged\footnote{Strictly, the \texttt{wires=} statement should not be necessary, as this is presumed to be the default key, but it is useful for readability.}.
+
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick[wires=3]{$\ket{0}^{\otimes 3}$} & \ctrl{1} & \meter{} \\
+ & \gate[wires=2]{U} & \qw\rstick[wires=2]{$\ket{11}$} \\
+ & & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick[wires=3]{$\ket{0}^{\otimes 3}$} & \ctrl{1} & \meter{} \\
+ & \gate[wires=2]{U} & \qw\rstick[wires=2]{$\ket{11}$} \\
+ & & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+If you want to add extra width on the \verb!\gate!, use the second optional parameter to specify a width (note that this is a minimum width -- if your supplied text is wider, the box will adjust its width accordingly.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H} & \ctrl{1} & \meter{} \\
+& \gate[wires=2][2cm]{U} & \targ{} & \qw \\
+& & \qw & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H} & \ctrl{1} & \meter{} \\
+& \gate[wires=2][2cm]{U} & \targ{} & \qw \\
+& & \qw & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+Often, it is nice to be able to label the inputs and outputs on the box, which we do with the \verb!\gateinput! and \verb!\gateoutput! commands. These commands take 1 compulsory argument -- the label text. By default, this applies to a single wire, but you can again use the optional \verb!wires! parameter to extend it. The starting point is determined by where the command is placed. The width of the gate does not automatically adjust to the contents of these extra labels, so you will have to add it with the second optional parameter of \verb!\gate!.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+&\ctrl{1} & \qw \\
+&\gate[wires=3][1.7cm]{U}
+ \gateinput[wires=2]{$x$}
+ \gateoutput[wires=2]{$x$}
+ &\qw \\
+& & \qw \\
+&\gateinput{$y$}
+\gateoutput{$y\oplus f(x)$}
+&\qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+&\ctrl{1} & \qw \\
+&\gate[wires=3][1.7cm]{U}
+ \gateinput[2]{$x$}
+ \gateoutput[wires=2]{$x$}&\qw \\
+& \qw & \qw \\
+&\qw\gateinput{$y$}\gateoutput{$y\oplus f(x)$}&\qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+You can use standard \LaTeX maths expressions for your labels. Usually, spacing can be automatically adjusted just fine. For example,
+
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{\sqrt{Z}} & \gate[2]{\sqrt{\textsc{swap}}} & \meter{} \\
+& \gate{X} & & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{\sqrt{Z}} & \gate[2]{\sqrt{\textsc{swap}}} & \meter{} \\
+& \gate{X} & & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+Sometimes, it might be that you want a multi-line label, and it should not be that each wire takes the height of those multiple lines. At this point, use the key \verb!disable auto height!. By default, each row will be assigned the height that a gate with label $U$ would be. This can be overridden by the third optional parameter of the gate command, if desired.
+
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+\lstick{$c_0$} & \gate[3,disable auto height]{\begin{array}{c} \text{M} \\ \text{A} \\ \text{J} \end{array}} & \qw & \qw \\
+\lstick{$c_1$} & & \gate[3,disable auto height]{\begin{array}{c} \text{M} \\ \text{A} \\ \text{J} \end{array}} & \qw \\
+\lstick{$c_2$} & & & \qw \\
+\lstick{$c_3$} & \qw & & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+\lstick{$c_0$} & \gate[3,disable auto height]{\begin{array}{c} \text{M} \\ \text{A} \\ \text{J} \end{array}} & \qw & \qw \\
+\lstick{$c_1$} & & \gate[3,disable auto height]{\begin{array}{c} \text{M} \\ \text{A} \\ \text{J} \end{array}} & \qw \\
+\lstick{$c_2$} & & & \qw \\
+\lstick{$c_3$} & \qw & & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\subsection{Different Connections}
+
+It is assumed that most of the time you want to connect your gates with quantum wires. However, it is possible to override that, and either use classical wires or no wire. These appear as option keys for the gate command, both of which are a comma-separated list of incoming wires that should be altered.
+
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate[5,cwires={2,4},nwires={3}]{U} & \qw \\
+& & \cw \\
+& & \qw \\
+& & \cw \\
+& & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate[5,cwires={2,4},nwires={3}]{U} & \qw \\
+& & \cw \\
+& & \qw \\
+& & \cw \\
+& & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\section{Slicing}
+
+It is often helpful to `slice' up a circuit for the sake of explaining it step by step. To do this, we provide the \verb!\slice{title}! command, which inserts a dashed vertical line after the column in which the command is added.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H}\slice{step} & \ctrl{1} & \meter{} \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H}\slice{step} & \ctrl{1} & \meter{} \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+You can also slice every step by using option \verb!slice all!, and the labels will be automatically numbered. This is likely to behave strangely unless you explicitly ensure that all rows have the same number of entries (i.e.\ short rows should have extra \& characters added).
+\begin{Code}
+\begin{center}
+\begin{quantikz}[slice all]
+& \gate{H} & \ctrl{1} & \meter{} && \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[slice all]
+& \gate{H} & \ctrl{1} & \meter{} && \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+If you need to adjust where the last slice is, use the optional parameter \verb!remove end slices!, which counts the number of columns fewer to add slices to. You can also change the title of each of the slices, by setting \verb!slice titles!. Include the macro \verb!\col! in your specification if you want to use the step number. Note, however, that the columns won't space themselves out to accommodate a very wide label. You can style the slicing lines with the \verb!slice style! key, and the labels with \verb!slice label style!. These can be used to rotate the labels and create a bit more space!
+\begin{Code}
+\begin{center}
+\begin{quantikz}[slice all,remove end slices=1,slice titles=slice \col,slice style=blue,slice label style={inner sep=1pt,anchor=south west,rotate=40}]
+& \gate{H} & \ctrl{1} & \meter{} && \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[slice all,remove end slices=1,slice titles=slice \col,slice style=blue,slice label style={inner sep=1pt,anchor=south west,rotate=40}]
+& \gate{H} & \ctrl{1} & \meter{} && \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+\noindent This also gives the possibility to alter spacing if it would otherwise be a bit too tight.
+\begin{Code}
+\begin{center}
+\begin{quantikz}[slice all,slice style={shorten <=-0.1cm,shorten >=-0.1cm},slice label style={yshift=0.1cm}]
+\lstick{$\ket{0}$} & \gate{H} & \phase{\varphi} & \gate{H} & \rstick{$\cos\frac{\varphi}{2}\ket{0}-i\sin\frac{\varphi}{2}\ket{1}$}\qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[slice all,slice style={shorten <=-0.1cm,shorten >=-0.1cm},slice label style={yshift=0.1cm}]
+\lstick{$\ket{0}$} & \gate{H} & \phase{\varphi} & \gate{H} & \rstick{$\cos\frac{\varphi}{2}\ket{0}-i\sin\frac{\varphi}{2}\ket{1}$}\qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+\noindent If you get compile errors when trying to slice, check the last line of your matrix, and make sure it doesn't end in \textbackslash\textbackslash.
+
+The \verb!vertical slice labels! key reorients the labels as below.
+\begin{Code}
+\begin{center}
+\begin{quantikz}[slice all,remove end slices=1,slice titles=slice \col,vertical slice labels]
+& \gate{H} & \ctrl{1} & \meter{} && \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[slice all,remove end slices=1,slice titles=slice \col,vertical slice labels]
+& \gate{H} & \ctrl{1} & \meter{} && \\
+& \qw & \targ{} & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \qw & \targ{} & \qw & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\section{Spacing}\label{sec:spacing}
+
+\subsection{Local Adjustment}
+
+There are several different ways in which we can manipulate the spacing of a diagram. Adding space to an individual row or column can be done in the standard way of tables in LaTeX. Here we add 2cm of space to the column between the $H$ and $X$ gates, and 1cm of space between the top two rows.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H} &[2cm] \gate{X} & \gate{H} & \qw \\[1cm]
+& \gate{X} & \gate{Z} & \gate{Z} &\qw \\
+& \gate{X} & \gate{Z} & \gate{Z} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H} &[2cm] \gate{X} & \gate{H} & \qw \\[1cm]
+& \gate{X} & \gate{Z} & \gate{Z} & \qw \\
+& \gate{X} & \gate{Z} & \gate{Z} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+If you don't know how much space you need, but it should be determined by the size of some text, you can use \verb!\hphantom{}! (widens the gate, in a similar way to \verb!\gate[1cm]{}!) or \verb!\hphantomgate{}! (increases the length of a wire) for horizontal spacing, and \verb!\ghost{}! for vertical spacing.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{X} \hphantom{very wide} & \gate{X} & \hphantomgate{wide}\qw & \gate{X}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+ & \gate{X} \hphantom{very wide} & \gate{X} & \hphantomgate{wide}\qw & \gate{X}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\subsection{Global Adjustment}
+
+Standard tikz commands facilitate a global adjustment of row and column spacing. For example, a ridiculous horizontal spacing:
+\begin{Code}
+\begin{center}
+\begin{quantikz}[column sep=1cm]
+& \gate{H} & \phase{\beta} & \gate{H} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[column sep=1cm]
+& \gate{H} & \phase{\beta} & \gate{H} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+This specifically adjusts the \emph{gap} between the rows and columns, not the distance between the centres of the rows and columns. Depending on what gates you have on each wire, the spacing may not be the same between each wire. Sometimes this is desirable, particularly if a gate in one particular row is much larger than anything in the other rows. At other times, it just makes your diagram look a little odd. For example, look at the gap between the top two wires and the bottom two wires:
+\begin{Code}
+\begin{center}
+\begin{quantikz}[row sep=0.1cm]
+& \gate{X} & \ctrl{1} & \gate{X} & \qw \\
+& \qw & \control{} & \qw & \qw \\
+& \gate{X} & \qw & \qw & \qw \\
+& \gate{H} & \qw & \qw & \qw
+
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[row sep=0.1cm]
+& \gate{X} & \ctrl{1} & \gate{X} & \qw \\
+& \qw & \control{} & \qw & \qw \\
+& \gate{X} & \qw & \qw & \qw \\
+& \gate{H} & \qw & \qw & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+If you want to make sure that every quantum wire is equally spaced, do the following to \verb!row sep!:
+\begin{Code}
+\begin{center}
+\begin{quantikz}[row sep={0.6cm,between origins}]
+& \gate{X} & \ctrl{1} & \gate{X} & \qw \\
+& \qw & \control{} & \qw & \qw \\
+& \gate{X} & \qw & \qw & \qw \\
+& \gate{H} & \qw & \qw & \qw
+
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[row sep={0.6cm,between origins}]
+& \gate{X} & \ctrl{1} & \gate{X} & \qw \\
+& \qw & \control{} & \qw & \qw \\
+& \gate{X} & \qw & \qw & \qw \\
+& \gate{H} & \qw & \qw & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+This is particularly useful to achieve alignment of several circuits, as in \ref{sec:align}.
+
+\subsection{Alignment}\label{sec:align}
+
+How do we centre a circuit diagram? Simply surround it with \verb!\begin{center}! and \verb!\end{center}! commands, or within any standard equation environment.
+
+Vertical alignment between different circuits can be more fiddly, depending on how much of a perfectionist you are. Sometimes, they work immediately, but the wires don't always align perfectly with each other. Generally the problem is that the highest gate in each row is different (here, the LHS is missing an $X$ gate on the second row)
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{X} & \ctrl{1} & \qw \\
+& \qw & \targ{} & \qw
+\end{quantikz}
+\begin{quantikz}=\end{quantikz}\begin{quantikz}
+& \ctrl{1} & \gate{X} & \qw \\
+& \targ{} & \gate{X} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{X} & \ctrl{1} & \qw \\
+& \qw & \targ{} & \qw
+\end{quantikz}
+=\begin{quantikz}
+& \ctrl{1} & \gate{X} & \qw \\
+& \targ{} & \gate{X} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+\noindent Ensuring an even spacing between rows, as described in Sec.\ \ref{sec:spacing}, can help (but is not always appropriate). Often the easiest is to fudge it using the \verb!\ghost! command which will add a 0-width gate of the height corresponding to its argument. So, having identified the problem with the above circuit, we can replace it with:
+\begin{Code}
+$$
+\begin{quantikz}
+& \gate{X} & \ctrl{1} & \qw \\
+& \ghost{X}\qw & \targ{} & \qw
+\end{quantikz}
+=\begin{quantikz}
+& \ctrl{1} & \gate{X} & \qw \\
+& \targ{} & \gate{X} & \qw
+\end{quantikz}
+$$
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{X} & \ctrl{1} & \qw \\
+& \ghost{X}\qw & \targ{} & \qw
+\end{quantikz}
+=\begin{quantikz}
+& \ctrl{1} & \gate{X} & \qw \\
+& \targ{} & \gate{X} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+If you cannot identify the offending gate, and particularly if the operation is not a standard \verb!\gate! command, you might be better off combining the two circuits in a single circuit with no wires joining the two parts. The spacing works better if your circuit has an odd number of wires, otherwise you have to add an extra row in the middle, and then change the spacing of that row with its neighbours.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \qw & \ctrl{2} & \qw&&& \ctrl{2} & \gate{Z} & \qw \\[-0.3cm]
+&&&&=&\\[-0.3cm]
+& \gate{Z} & \targ{} & \qw&&& \targ{} & \gate{Z} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \qw & \ctrl{2} & \qw&&& \ctrl{2} & \gate{Z} & \qw \\[-0.3cm]
+&&&&=&\\[-0.3cm]
+& \gate{Z} & \targ{} & \qw&&& \targ{} & \gate{Z} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\subsubsection{Perfecting Vertical Alignment}
+
+If you want total control over vertical alignment between several different circuits, the trick is to use the \verb!baseline! key. All the baselines of different items are placed on the same level. This is particularly helpful if you give certain wires in the circuit a name, and that will let you place the baseline directly on a level with that wire.
+
+To name a wire as `name', place an \verb!\alias{name}! command in any cell which is either empty, or contains a \verb!\qw!, \verb!\cw! or \verb!\push! \emph{only}, and place it before that command\footnote{Alternatively, for any node that accepts tikz styling parameters directly as an option, passing the option \texttt{alias=name} should do.}. That lets you align circuit identities such as
+\begin{Code}
+$$
+\begin{quantikz}[baseline=(W.base)]
+\lstick{\ket{0}} & \qw & \ctrl{1} & \qw \\
+& \gate{H} & \targ{} & \alias{W} \qw
+\end{quantikz}
+\equiv
+\begin{quantikz}[baseline=(W.base)]
+& \gate{H} & \gate{X} & \alias{W} \qw
+\end{quantikz}
+$$
+\tcblower
+\begin{lstlisting}
+$$
+\begin{quantikz}[baseline=(W.base)]
+\lstick{\ket{0}} & \qw & \ctrl{1} & \qw \\
+& \gate{H} & \targ{} & \alias{W} \qw
+\end{quantikz}
+\equiv\begin{quantikz}[baseline=(W.base)]
+& \gate{H} & \gate{X} & \alias{W} \qw
+\end{quantikz}
+$$
+\end{lstlisting}
+\end{Code}
+This has aligned the bottom wire of the first circuit with the wire in the second circuit, making the correspondence more obvious. However, the $\equiv$ sign is now in the wrong place, with its baseline placed at the same point as the baseline of the circuits. We can fix this with a vertical shift of the two diagrams. We demonstrate two different ways of achieving the same effect (the only important feature is that both diagrams have the same shift).
+\begin{Code}
+$$
+\begin{quantikz}[baseline={($(W.base)+0.3*(0,1cm)$)}]
+\lstick{\ket{0}} & \qw & \ctrl{1} & \qw \\
+& \gate{H} & \targ{} & \alias{W} \qw
+\end{quantikz}
+\equiv\begin{quantikz}[baseline={([yshift=0.3cm]new.base)}]
+& \gate{H} & \gate{X} & \alias{new} \qw
+\end{quantikz}
+$$
+\tcblower
+\begin{lstlisting}
+$$
+\begin{quantikz}[baseline={($(W.base)+0.3*(0,1cm)$)}]
+\lstick{\ket{0}} & \qw & \ctrl{1} & \qw \\
+& \gate{H} & \targ{} & \alias{W} \qw
+\end{quantikz}
+\equiv\begin{quantikz}[baseline={([yshift=0.3cm]new.base)}]
+& \gate{H} & \gate{X} & \alias{new} \qw
+\end{quantikz}
+$$
+\end{lstlisting}
+\end{Code}
+
+If you have an even number if wires, you might choose to calculate the centre of the circuit from \verb!current bounding box.center!, or you could perform a calculation to average the position of two wires. This calculation can then be adjusted to take into account the desire to vertically align on the centre of an equals sign rather than the baseline (which is below the bottom of the equals)
+
+\begin{Code}
+$$
+\begin{quantikz}[baseline={($(W.base)!.5!(W2.base) - height("$\vcenter{}$")*(0,1pt)$)}]
+& \gate{X} & \ctrl{1} & \alias{W} \qw \\
+& \ghost{X}\qw & \targ{} & \alias{W2} \qw
+\end{quantikz}
+=\begin{quantikz}[baseline={($(W.base)!.5!(W2.base) - height("$\vcenter{}$")*(0,1pt)$)}]
+& \ctrl{1} & \gate{X} & \qw \\
+& \targ{} & \gate{X} & \qw
+\end{quantikz}
+$$
+\tcblower
+\begin{lstlisting}
+$$
+\begin{quantikz}[baseline={($(W.base)!.5!(W2.base) - height("$\vcenter{}$")*(0,1pt)$)}]
+& \gate{X} & \ctrl{1} & \alias{W} \qw \\
+& \ghost{X}\qw & \targ{} & \alias{W2} \qw
+\end{quantikz}
+=\begin{quantikz}[baseline={($(W.base)!.5!(W2.base) - height("$\vcenter{}$")*(0,1pt)$)}]
+& \ctrl{1} & \gate{X} & \qw \\
+& \targ{} & \gate{X} & \qw
+\end{quantikz}
+$$
+\end{lstlisting}
+\end{Code}
+
+For more details on the possible syntax here, see the \verb!calc! library in tikz.
+
+\subsection{Scaling}
+
+When we altered the spacing, that left all the gate elements, text etc.\ the same size, and just altered the spacing between them. If you want to override the standard size of a circuit (gate elements, text and spacing), you can make it a node inside a \verb!tikzpicture!:
+\begin{Code}
+\begin{center}
+\begin{tikzpicture}
+\node[scale=1.5] {
+\begin{quantikz}
+& \gate{H} & \phase{\beta} & \gate{H} & \qw
+\end{quantikz}
+};
+\end{tikzpicture}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{tikzpicture}
+\node[scale=1.5] {
+\begin{quantikz}
+& \gate{H} & \phase{\beta} & \gate{H} & \qw
+\end{quantikz}
+};
+\end{tikzpicture}
+\end{lstlisting}
+\end{Code}
+It's also possible to rescale to a fixed width, so long as you declare the \verb!adjustbox! package in the document preamble.
+\begin{Code}
+\begin{center}
+\begin{adjustbox}{width=0.8\textwidth}
+\begin{quantikz}
+& \gate{H} & \phase{\beta} & \gate{H} & \qw
+\end{quantikz}
+\end{adjustbox}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{adjustbox}{width=0.8\textwidth}
+\begin{quantikz}
+& \gate{H} & \phase{\beta} & \gate{H} & \qw
+\end{quantikz}
+\end{adjustbox}
+\end{lstlisting}
+\end{Code}
+
+
+\section{Typesetting}
+
+\subsection{Global Styling}
+
+Global properties that affect all circuit elements of a given type can be affected through \verb!tikzset!.
+\begin{Code}
+\begin{center}
+\tikzset{
+ operator/.append style={fill=red!20},
+ my label/.append style={above right,xshift=0.3cm},
+ phase label/.append style={label position=above}
+}
+\begin{quantikz}
+& \gate{H} & \phase{\beta} & \gate{H} & \qw & \meter{$\ket{\pm}$}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\tikzset{
+ operator/.append style={fill=red!20},
+ my label/.append style={above right,xshift=0.3cm},
+ phase label/.append style={label position=above}
+}
+\begin{quantikz}
+& \gate{H} & \phase{\beta} & \gate{H} & \qw & \meter{$\ket{\pm}$}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+The global styles are:
+\begin{center}
+\begin{tabular}{c|c}
+Style Name & Affected Command(s) \\
+\hline
+operator & \verb!\gate! \\
+meter & \verb!\meter! \\
+slice & \verb!\slice! \\
+wave & \verb!\wave! \\
+leftinternal & \verb!\gateinput! \\
+rightinternal & \verb!\gateoutput! \\
+dm & left braces (\verb!\gateoutput!,\verb!\lstick!) \\
+dd & right braces (\verb!\gateinput!,\verb!\rstick!) \\
+phase & \verb!\phase!, \verb!\control! \\
+ophase & \verb!\ophase!, \verb!\ocontrol! \\
+circlewc & \verb!\targ! \\
+crossx2 & \verb!\swap!,\verb!\targX! \\
+my label & measurement bases in \verb!\meter! \\
+phase label & phases in \verb!\phase! \\
+gg label & main gate label in \verb!\gate! \\
+group label & label in \verb!\gategroup!
+\end{tabular}
+\end{center}
+
+There are two keys that change styles globally: `thin lines' to make the lines thin, more in keeping with what QCircuit produced
+\begin{Code}
+\begin{center}
+\begin{quantikz}[thin lines]
+& \ctrl{1} & \qw & \ctrl{1} & \qw & \qw \\
+& \targ{} & \gate{R_z(-\theta/2)} & \targ{} & \gate{R_z(\theta/2)} & \meter{}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[thin lines]
+& \ctrl{1} & \qw & \ctrl{1} & \qw & \qw \\
+& \targ{} & \gate{R_z(-\theta/2)} & \targ{}
+ & \gate{R_z(\theta/2)} & \meter{}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+\noindent and `transparent', should you want the background of all the gates to be transparent:
+\begin{Code}
+\begin{center}
+\begin{quantikz}[transparent]
+& \ctrl{1} & \qw & \ctrl{1} & \qw & \qw \\
+& \targ{} & \gate{R_z(-\theta/2)} & \targ{} & \gate{R_z(\theta/2)} & \meter{}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[transparent]
+& \ctrl{1} & \qw & \ctrl{1} & \qw & \qw \\
+& \targ{} & \gate{R_z(-\theta/2)} & \targ{}
+ & \gate{R_z(\theta/2)} & \meter{}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+One place where this might be useful is as a ``pass-through'' on a gate, such as
+\begin{Code}
+\begin{center}
+\begin{quantikz}[transparent]
+& \gate[2]{J_{12}} & \gate[3,label style={yshift=0.2cm}]{J_{13}} & \qw & \qw \\
+& & \linethrough &\gate[2]{J_{23}} & \qw \\
+& \qw &&& \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[transparent]
+& \gate[2]{J_{12}} & \gate[3,label style={yshift=0.2cm}]{J_{13}} & \qw & \qw \\
+& & \linethrough &\gate[2]{J_{23}} & \qw \\
+& \qw &&& \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+While the \verb!\linethrough! would normally be hidden behind the gate, making the gate transparent leaves the line visible. Then one just has to move the $J_{13}$ label (see next section).
+
+\subsection{Per-Gate Styling}
+
+Individual gates can be modified using optional arguments of the calling function.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate[style={fill=red!20},label style=cyan]{H} & \phase[green,label position=above]{\beta} & \gate{H} & \qw & \meter{$\ket{\pm}$}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate[style={fill=red!20},label style=cyan]{H}
+ & \phase[green,label position=above]{\beta}
+ & \gate{H} & \qw & \meter{$\ket{\pm}$}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+The specific syntax varies a little depending on the type of gate
+\begin{center}
+\begin{tabular}{p{0.4\textwidth}|p{0.4\textwidth}}
+gates that don't accept formatting parameters & \verb!\qw!,\verb!\vqw!,\verb!\qwbundle!,\verb!\cw!,\verb!\vcw!,\verb!\cwbend!,\verb!\push! \\
+\hline
+gates that accept tikz node formatting keys directly in optional argument & \verb!\phase!, \verb!\control!, \verb!\ocontrol!, \verb!\targ!, \verb!\targX!, \verb!\meter!, \verb!\meterD!, \verb!\measure!, \verb!\measuretab!, \verb!\wave! \\
+\hline
+gates that accept node formatting keys as \verb!label style! key in optional argument & \verb!\gate!, \verb!\slice!, \verb!\lstick!, \verb!\rstick!, \verb!\gategroup!, \verb!\gateinput!, \verb!\gateoutput!
+\end{tabular}
+\end{center}
+Those that accept the \verb!label style! key also accept a second key for formatting other elements of the display
+\begin{center}
+\begin{tabular}{c|cc}
+\verb!\gate!,\verb!\gategroup! & \verb!style! & styles the box \\
+\verb!\slice! & \verb!style! & styles the line\\
+\verb!\lstick!,\verb!\rstick!,\verb!\gateinput!,\verb!\gateoutput! & \verb!braces! & styles the brace
+\end{tabular}
+\end{center}
+If you want to input several styling parameters with one of these keys, just group them together in a set of curly braces, \{\}. Typical styling parameters include \verb!draw=! specifying line colour, \verb!fill=!, specifying fill colour, \verb!inner xsep=! and \verb!inner ysep=! specifying horizontal and vertical margins respectively, \verb!xshift=! and \verb!yshift=! for adjusting horizontal and vertical positioning. Beyond that, the \href{http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}{tikz manual} is your friend!
+
+This styling is really quite flexible, as we can override the default shapes with anything that we want:
+\begin{Code}
+\begin{center}
+\tikzset{
+ group-1-5/.append style={starburst,fill=yellow,draw=red,line width=2pt,inner ysep=-15pt}
+}
+\begin{quantikz}[row sep=0.3cm,column sep=0.3cm]%
+& \gate{H} & \ctrl{2}& \qw & \gate[3,style={starburst,fill=yellow,draw=red,line width=2pt,inner xsep=-4pt,inner ysep=-5pt},label style=cyan]{\text{noise}} & \ctrl{3} & \qw & \qw & \qw\\
+\lstick{$\ket{0}$} & \qw & \targ{} & \qw & \qw & \qw & \ctrl{3} & \qw & \qw \\
+\lstick{$\ket{0}$} & \qw & \targ{}& \qw & \qw & \qw & \qw & \ctrl{2} & \qw\\
+&&&&\lstick{$\ket{0}$} & \targ{} & \targ{} & \qw & \meter{} \\
+&&&&\lstick{$\ket{0}$} & \qw & \targ{} & \targ{} & \meter{}
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[row sep=0.3cm,column sep=0.3cm]%
+& \gate{H} & \ctrl{2}& \qw &
+ \gate[3,style={starburst,fill=yellow,draw=red,line width=2pt,inner xsep=-4pt,inner ysep=-5pt},
+ label style=cyan]{\text{noise}} & \ctrl{3} & \qw & \qw& \qw\\
+\lstick{$\ket{0}$} & \qw & \targ{} & \qw & \qw & \qw & \ctrl{3} & \qw & \qw \\
+\lstick{$\ket{0}$} & \qw & \targ{}& \qw & \qw & \qw & \qw & \ctrl{2} & \qw\\
+&&&&\lstick{$\ket{0}$} & \targ{} & \targ{} & \qw & \meter{} \\
+&&&&\lstick{$\ket{0}$} & \qw & \targ{} & \targ{} & \meter{}
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+% We can also supplement with standard tikz commands by using the `execute at end picture' key. The cells of the matrix contain nodes called \verb!\tikzcdmatrixname-i-j!, where i is the row number and j is the column number. Thus,
+% \begin{Code}
+% \begin{center}
+% \begin{quantikz}[row sep=0.3cm,column sep=0.3cm,execute at end picture={
+% \node [fit=(\tikzcdmatrixname-1-6)(\tikzcdmatrixname-4-6)(\tikzcdmatrixname-5-9),draw,dashed,inner sep=4pt,label={[yshift=0.3cm]above:syndrome extraction}] {};
+% }]
+% & \gate{H} & \ctrl{2}& \qw & \gate[3,style={starburst,fill=yellow,draw=red,line width=2pt,inner xsep=-4pt,inner ysep=-5pt}]{\text{noise}} & \ctrl{3} & \qw & \qw& \qw\\
+% \lstick{$\ket{0}$} & \qw & \targ{} & \qw & \qw & \qw & \ctrl{3} & \qw & \qw \\
+% \lstick{$\ket{0}$} & \qw & \targ{}& \qw & \qw & \qw & \qw & \ctrl{2} & \qw\\
+% &&&&\lstick{$\ket{0}$} & \targ{} & \targ{} & \qw & \meter{} \\
+% &&&&\lstick{$\ket{0}$} & \qw & \targ{} & \targ{} & \meter{}
+% \end{quantikz}
+% \end{center}
+% \tcblower
+% \begin{lstlisting}
+% \begin{quantikz}[row sep=0.3cm,column sep=0.3cm,execute at end picture={
+% \node [fit=(\tikzcdmatrixname-1-6)(\tikzcdmatrixname-4-6)(\tikzcdmatrixname-5-9),draw,dashed,inner sep=4pt,label={[yshift=0.3cm]above:syndrome extraction}] {};
+% }]
+% & \gate{H} & \ctrl{2}& \qw & \gate[3,style={starburst,fill=yellow,draw=red,line width=2pt,inner xsep=-4pt,inner ysep=-5pt}]{\text{noise}} & \ctrl{3} & \qw & \qw& \qw\\
+% \lstick{$\ket{0}$} & \qw & \targ{} & \qw & \qw & \qw & \ctrl{3} & \qw & \qw \\
+% \lstick{$\ket{0}$} & \qw & \targ{}& \qw & \qw & \qw & \qw & \ctrl{2} & \qw\\
+% &&&&\lstick{$\ket{0}$} & \targ{} & \targ{} & \qw & \meter{} \\
+% &&&&\lstick{$\ket{0}$} & \qw & \targ{} & \targ{} & \meter{}
+% \end{quantikz}
+% \end{lstlisting}
+% \end{Code}
+
+\subsection{Boxing/Highlighting Parts of a Circuit}\label{sec:boxing}
+
+It is often useful to highlight parts of a circuit. We do this with the \verb!\gategroup! command. The optional parameters \verb!wires! (again, the default) and \verb!steps! specify the number of rows and columns that the group spans respectively. The mandatory argument is the label for the box (although this can be empty). The top-left corner of the box coincides with the cell in which the command is placed.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H} & \ctrl{1} & \gate{H}\gategroup[wires=2,steps=3,style={inner sep=6pt}]{reversed c-{\sc not}} & \ctrl{1} & \gate{H} & \ctrl{1} & \qw & \qw \\
+& \qw & \targ{} & \gate{H} & \targ{} & \gate{H} & \targ{} & \gate{H} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H} & \ctrl{1} & \gate{H}\gategroup[wires=2,steps=3,style={inner sep=6pt}]{reversed c-{\sc not}} & \ctrl{1} & \gate{H} & \ctrl{1} & \qw & \qw \\
+& \qw & \targ{} & \gate{H} & \targ{} & \gate{H} & \targ{} & \gate{H} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+By default, this box is drawn on top of the circuit itself. If you want it to be behind (for example, should you want it to have a background colour), then use the \verb!background! option.
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H} & \ctrl{1}\gategroup[2,steps=3,style={dashed,rounded corners,fill=blue!20, inner xsep=2pt},background]{{\sc swap}} & \targ{} & \ctrl{1} & \qw & \qw \\
+& \qw & \targ{} & \ctrl{-1} & \targ{} & \gate{H} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H} & \ctrl{1}\gategroup[2,steps=3,style={dashed,rounded corners,fill=blue!20, inner xsep=2pt},background]{{\sc swap}} & \targ{} & \ctrl{1} & \qw & \qw \\
+& \qw & \targ{} & \ctrl{-1} & \targ{} & \gate{H} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+The \verb!label style! key can be used to tune the label's properties, including positioning. For example,
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H} & \ctrl{1}\gategroup[2,steps=3,style={dashed,rounded corners,fill=blue!20, inner xsep=2pt},background,label style={label position=below,anchor=north,yshift=-0.2cm}]{{\sc swap}} & \targ{} & \ctrl{1} & \qw & \qw \\
+& \qw & \targ{} & \ctrl{-1} & \targ{} & \gate{H} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H} & \ctrl{1}\gategroup[2,steps=3,style={dashed,rounded corners,fill=blue!20, inner xsep=2pt},background,label style={label position=below,anchor=north,yshift=-0.2cm}]{{\sc swap}} & \targ{} & \ctrl{1} & \qw & \qw \\
+& \qw & \targ{} & \ctrl{-1} & \targ{} & \gate{H} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+Note that it is often good to use \verb!anchor=mid! for label anchors because if you have multiple labels, this will help get them horizontally aligned. It just means you have to use some \verb!yshift! to move the label off the border around the gategroup.
+
+
+At this point, we mention an extra option for the gate command. The \verb!swap! keyword turns the gate into a variant of a {\sc swap} gate which explicitly shows the wires (the \verb!wires! setting is fixed to 2, overriding any value you might supply).
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H} & \gate[swap]{} & \qw & \qw \\
+& \qw & & \gate{H} & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H} & \gate[swap]{} & \qw & \qw \\
+& \qw & & \gate{H} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+%\noindent Here the \texttt{fullwidth} command is helpful for getting the symmetry of the swap gate correct in terms of how much goes above the top wire, and how much below the bottom wire.
+\section{Otherwise Undocumented Features}
+A wave for separating rows. Do we really need this? Perhaps not, but it's fun!
+\begin{Code}
+\begin{center}
+\begin{quantikz}
+& \gate{H} & \ctrl{3} & \ \ldots\ \qw & \qw & \gate{H} & \qw \\
+\wave&&&&&&\\
+& \gate{H} & \qw & \ \ldots\ \qw & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \gate{U} & \ \ldots\ \qw & \gate{U^k} & \qw & \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}
+& \gate{H} & \ctrl{3} & \ \ldots\ \qw & \qw & \gate{H} & \qw \\
+\wave&&&&&&\\
+& \gate{H} & \qw & \ \ldots\ \qw & \ctrl{1} & \gate{H} & \qw \\
+& \qw & \gate{U} & \ \ldots\ \qw & \gate{U^k} & \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+
+\section{Converting from QCircuit}
+
+I've updated all of my existing teaching materials from QCircuit to Quantikz with very little trouble. There are a few standard replacements:
+\begin{center}
+\begin{tabular}{c|c}
+QCircuit notation & Quantikz notation \\
+\hline
+\verb!\QCircuit @C=n @R=m {#}! & \verb!\begin{quantikz}[row sep=m,col sep=n]#\end{quantikz}! \\
+\verb!\multigate{n}! & \verb!\gate[n+1]! \\
+\verb!\targ! & \verb!\targ{}! \\
+\verb!\control! & \verb!\control{}! \\
+\verb!\meter! & \verb!\meter{}! \\
+\verb!\measureD! & \verb!\meterD{}! \\
+\end{tabular}
+\end{center}
+Updating the \verb!\gategroup! command requires a little more care since the first two arguments have to be removed, and the command placed in the correct cell, at which point \verb!\gategroup{i}{j}{k}{l}{m}! becomes \verb!\gategroup[wires=k+1-i,steps=l+1-j]!. My primary use of gategroup was to achieve the effect now achieved with \verb!\lstick[k+1-i]!.
+
+It should not be necessary to use \verb!\ghost! commands in the way they were used in QCircuit. The \verb!\cghost! and \verb!\nghost! commands have been replaced by option keys for the gate command, \verb!cwires! and \verb!nwires! respectively.
+
+\section{Troubleshooting}\label{sec:trouble}
+\begin{itemize}
+\item Have you checked that all commands that need them are followed by an empty argument, \{\}? Things like \verb!meter!, \verb!\control! (basically, those that can accept an optional styling parameter) look like they don't take any parameters, but they have to be followed by the pair of braces or you'll get very odd effects.
+\item If you get a whole bunch of unexpected text in one of your cells instead of a gate, make sure that the gate command is the first command in the cell, and that other commands (such as \verb!\qwbundle!) appear after.
+\item If you're getting errors about cells not being found (and especially if you're doing any slicing), check that your last row doesn't end with \textbackslash\textbackslash, and make sure that your last row contains as many cells (even if they're empty) as there are columns in the circuit.
+\item If you are trying to typeset your circuit inside some sort of tabular or align environment and are getting an error ``single ampersand used with wrong catcode'', trying adding the \verb![ampersand replacement=\&]! option to tikzcd, and instead of separating every cell by \&, use \textbackslash\&. This can also be useful if you want to insert a normal matrix as a gate
+\begin{Code}
+\begin{center}
+\begin{quantikz}[ampersand replacement=\&]
+\lstick{$\ket{0}$} \& \gate{\left(\begin{array}{cc} \alpha & \beta \\ \beta & -\alpha \end{array}\right)} \& \ctrl{1} \& \gate{U_1} \& \qw \\
+\lstick{$\ket{0}$} \& \qw \& \targ{} \& \gate{U_2} \& \qw
+\end{quantikz}
+\end{center}
+\tcblower
+\begin{lstlisting}
+\begin{quantikz}[ampersand replacement=\&]
+\lstick{$\ket{0}$} \& \gate{\left(\begin{array}{cc} \alpha & \beta \\ \beta & -\alpha \end{array}\right)} \& \ctrl{1} \& \gate{U_1} \& \qw \\
+\lstick{$\ket{0}$} \& \qw \& \targ{} \& \gate{U_2} \& \qw
+\end{quantikz}
+\end{lstlisting}
+\end{Code}
+Beamer is particularly annoying with doing this. It probably helps to issue a global command
+\begin{lstlisting}
+\tikzcdset{
+ every matrix/.style={ampersand replacement=\&}
+}
+\end{lstlisting}
+Beamer is particularly annoying with doing this. It probably helps to issue a global command
+\begin{lstlisting}
+\tikzcdset{
+ every matrix/.style={ampersand replacement=\&}
+}
+\end{lstlisting}
+somewhere in your document preamble. The tikzcd manual suggests another possible strategy, but I haven't had much success with it.
+\item If you have a \verb!\cwbend! in the bottom right cell of the matrix, sometimes you get an error (I have no understanding of why). Add an extra \& after, and all seems to be well.
+\item If you're using transparency, and the width of gates seems to be greater than you expected, it may be worthwhile removing the .aux file and recompiling. If your tex editor isn't good at resetting the .aux file, the system may be remembering older widths.
+\item The code provides definitions for \verb!\bra!, \verb!\ket!, \verb!\proj!, \verb!\braket!. If you don't like them, just define your own versions \emph{before} you load the quantikz library.
+\end{itemize}
+
+For any bug reports (please make sure you've checked the above list first!) or feature requests, please contact alastair.kay@rhul.ac.uk.
+
+\section{Citation}
+
+If you found this package useful, please consider citing the arXiv version of this document, arXiv:1809.03842.
+
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/quantikz/tikzlibraryquantikz.code.tex b/graphics/pgf/contrib/quantikz/tikzlibraryquantikz.code.tex
new file mode 100644
index 0000000000..3c67e016da
--- /dev/null
+++ b/graphics/pgf/contrib/quantikz/tikzlibraryquantikz.code.tex
@@ -0,0 +1,691 @@
+%This is the quantikz library for typesetting quantum circuits using LaTeX/Tikz. version 0.9.4
+% Written by Alastair Kay, 2018. Published under a CC-BY-4.0 licence
+% Please email me (alastair.kay@rhul.ac.uk) with any bug reports or feature requests.
+% If you find this library useful, please cite its usage in your work, using arXiv:1809.03842, and possibly the DOI: 10.17637/rh.7000520.
+% Usage is at your own risk.
+
+%version 0.9.5:
+% fixed bug which meant multi-wire gates didn't work outside of an environment such as center.
+%version 0.9.4:
+% added nwires and cwires options to gate command to simulate qcircuit's nphantom and cphantom
+% vertical text options for slice labels.
+% replaced macro for measuring width and height for greater reliability. disable auto spacing now unnecessary as things like \sqrt{} work in the gate label.
+% investigated possibility of high labels (multi-line labels, particularly for a multi-qubit gate). key disable auto height introduced.
+% now provides a quantikz environment, which is theoretically compatible with tikz' external library (entirely untested). Can still use tikzcd environment otherwise.
+% removed a tikzcd customisation fixing the baseline for one row circuits as this was messing with any manual attempts to adjust the baseline.
+%version 0.9.3:
+% adjusted spacing of gate operation between in-circuit and overlay so that transparency looks better
+% Other gate spacing adjustments. multi-qubit gates in particular should look better. 'disable auto spacing' can switch this off, particularly for use with things like \sqrt{} in the multi-qubit gate label, which will throw a weird error.
+% gate command now takes two further optional parameters: minimum width and minimum height for each cell.
+% some consolidation of styling commands
+% global keys 'transparent' and 'thin lines' added. 'thin lines' gives a look more similar to the original QCircuit.
+%version 0.9.2:
+% made 'wires' the default key, so [wires=2] now becomes [2]
+% added 'slice title', 'slices style', 'slices label style' key to control titles of slices under 'slice all'
+% better access to positioning of gategroup label.
+% now arXiv compatible (that was a challenge! they use old versions of packages)
+%Previous versions:
+%version 0.9.1:
+% added \cwbend gate for cornering classical wires.
+% made size of strike through for multiqubit gates stylable via the keys /quantikz/Strike Height/ and /quantikz/Strike Width/
+% added new \gate[swap] variant of swap (nearest-neighbour only).
+%version 0.9.0:
+%original release.
+
+\ProvidesPackage{quantikz}[2019/04/24 typeset quantum circuit diagrams]
+
+% Package(s) to include
+\RequirePackage{xargs,ifthen,xstring,xparse,etoolbox,mathtools}
+\RequirePackage{environ} %in an attempt to help with compatibility with the external library of tikz.
+\RequirePackage{tikz}
+\usetikzlibrary{cd,decorations.pathreplacing,calc,positioning,fit,shapes.symbols,decorations.pathmorphing,shapes.misc,backgrounds,decorations.markings}
+
+\newlength{\myl}
+\newlength{\myh}
+\newlength{\myd}
+
+%\makeatletter
+\newcounter{aaa}
+\tikzset{
+ apply/.style args={#1 except on segments #2}{postaction={
+ /utils/exec={
+ \@for\mattempa:=#2\do{\csdef{aaa@\mattempa}{}}
+ \setcounter{aaa}{0}
+ },
+ decorate,decoration={show path construction,
+ moveto code={},
+ lineto code={
+ \stepcounter{aaa}
+ \ifcsdef{aaa@\theaaa}{}{
+ \path[#1] (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
+ }
+ },
+ curveto code={
+ \stepcounter{aaa}
+ \ifcsdef{aaa@\theaaa}{}{
+ \path [#1] (\tikzinputsegmentfirst) .. controls
+ (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
+ ..(\tikzinputsegmentlast);
+ }
+ },
+ closepath code={
+ \stepcounter{aaa}
+ \ifcsdef{aaa@\theaaa}{}{
+ \path [#1] (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast);
+ }
+ },
+ },
+ },
+ },
+}
+%test if item is in list of item. Probably better ways to do this, but I could get this version to work.
+\newcommand*{\IfInList}[2]{%
+ \gdef\memory{0}
+ \edef\arg{#1}
+ \foreach \q in #2 {%
+ \ifthenelse{\q=\arg}{%
+ \gdef\memory{1}
+ }{}
+ }
+ \ifthenelse{\memory=1} {%
+ \expandafter\@firstoftwo
+ }{%
+ \expandafter\@secondoftwo
+ }
+}
+%define the quantikz environment. I need this to facilitate the external library
+\NewEnviron{quantikz}[1][]{%
+ \def\@temp{\tikzcd@[#1]\BODY}%
+ \expandafter\@temp\endtikzcd
+}
+\def\temp{&} \catcode`&=\active \let&=\temp
+%
+%commands for putting in text vertically
+\protected\def\vvv#1{\leavevmode\bgroup\vbox\bgroup\xvvv#1\relax}
+%
+\def\xvvv{\afterassignment\xxvvv\let\tmp= }
+%
+\def\xxvvv{%
+% \ifx\tmp\@sptoken\egroup\ \vbox\bgroup\let\next\xvvv
+% \else
+\ifx\tmp\relax\egroup\egroup\let\next\relax
+ \else
+\hbox to 1.1em{\hfill\tmp\hfill}% centred
+\let\next\xvvv\fi%\fi
+\next}
+%end of commands for putting text vertically
+%
+\long\def\ifnodedefined#1#2#3{%
+ \@ifundefined{pgf@sh@ns@#1}{#3}{#2}%
+}
+%I don't think this is used any more
+% \newcommand\getwidth[1]{
+% \pgfkeys{minimum width=0pt}%
+% \pgfkeys{/quantikz,#1}
+% \pgfkeysgetvalue{/quantikz/minimum width}{\minwidth}
+% \minwidth
+% }
+
+%the main gate command
+\DeclareExpandableDocumentCommand{\gate}{O{}O{1.5pt}O{1.5pt}m}{%optional parameter contains styling info. compulsory is gate text.
+ |[inner sep=4pt,minimum width=#2,minimum height=#3]|%
+ \edef\n{\the\pgfmatrixcurrentrow} %the row
+ \edef\m{\the\pgfmatrixcurrentcolumn} %the column
+ %reset macros that are going to be set by the options
+ \edef\options{row=\n,col=\m,#1}
+ \def\toswap{0}%
+ \def\DisableMinSize{0}%
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=}%
+ %import options passed as parameters
+ \pgfkeys{/quantikz,#1}%
+ \pgfkeysgetvalue{/quantikz/wires}{\quantwires}
+ \pgfkeysgetvalue{/quantikz/style}{\a}
+ \pgfkeysgetvalue{/quantikz/label style}{\b}
+ \pgfkeysgetvalue{/quantikz/cwires}{\mylist}
+ \pgfkeysgetvalue{/quantikz/nwires}{\nowires}
+ \ifthenelse{\toswap=1}{%if it's a swap gate...
+ \def\quantwires{2}
+ \phantom{wide}
+ \settowidth{\myl}{$wide$}
+ \settoheight{\myh}{$wide$}
+ \settodepth{\myd}{$wide$}
+ }{%not a swap gate
+ \settowidth{\myl}{$#4$}
+ \ifthenelse{\DisableMinSize=1}{%disable automatic size detection. Use $U$ instead.
+ \phantom{U}
+ \settoheight{\myh}{$U$}
+ \settodepth{\myd}{$U$}
+ }{%automatically get width and height of label
+ \phantom{#4}
+ \settoheight{\myh}{$#4$}
+ \settodepth{\myd}{$#4$}
+ }
+ }
+%
+ \IfInList{1}{\mylist}{\cw}{\IfInList{1}{\nowires}{}{\qw}}%do we need classical, no wire, or quantum wire?
+ \edef\k{\the\numexpr\n+\quantwires-1\relax}
+ \edef\mn{\the\numexpr\m-1\relax}
+ \ifthenelse{\quantwires=1}{}{%more than 1 wire on gate. iterate through each wire
+ \foreach \i in {\the\numexpr\n+1\relax,...,\k} {
+ \edef\newcom{\noexpand\vcwhexplicit{\i-\m}{\i-\mn}}
+ \edef\newcomb{\noexpand\vqwexplicit{\i-\m}{\i-\mn}}
+ \edef\val{\the\numexpr\i+1-\n\relax}
+ \IfInList{\val}{\mylist}{\newcom}{\IfInList{\val}{\nowires}{}{\newcomb}}%do we need classical, no wire, or quantum wire?
+ %apply auto width to the cell, and make sure we unset the setting so that it doesn't apply to later circuits.
+ \globaldefs=1
+ \edef\dotikzset{\noexpand\tikzset{row \i\space column \m/.append style={minimum width={max(\the\myl+8pt,#2)}}}}
+ \dotikzset
+ \edef\undotikzset{\noexpand\tikzset{row \i\space column \m/.style={}}}
+ \expandafter\pgfutil@g@addto@macro\expandafter\tikzcd@atendglobals\expandafter{\undotikzset}
+ }
+ %apply auto height to last row only. unsetting already handled above.
+ \globaldefs=1
+ \edef\dotikzset{\noexpand\tikzset{row \k\space column \m/.append style={minimum height={max(\the\myh+\the\myd+8pt,#3)}}}}
+ \dotikzset
+%
+ }
+ %call deferred gate command.
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfutil@g@addto@macro\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\tikzcd@atendsavedpaths\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\gate@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\a\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\b\expandafter}\expandafter{\options}{#4}
+ }
+}
+
+%deferred gate command. draws a box around all included cells. this is not part of the matrix, but comes afterwards.
+\newcommand{\gate@end}[4]{
+ \pgfkeys{/quantikz,wires=1}
+ \def\toswap{0}
+ \def\DisableMinSize{0}
+ \pgfkeys{/quantikz,#3}%
+ \pgfkeysgetvalue{/quantikz/wires}{\quantwires}
+ \pgfkeysgetvalue{/quantikz/row}{\row}
+ \pgfkeysgetvalue{/quantikz/col}{\col}
+ \ifthenelse{\toswap=1}{\def\quantwires{2}}{}
+ \xdef\LoopGG{}
+ \foreach \n in {\row,...,\the\numexpr\row+\quantwires-1\relax} {
+ \ifnodedefined{\tikzcdmatrixname-\n-\col}{
+ \xdef\LoopGG{\LoopGG(\tikzcdmatrixname-\n-\col)}
+ }{}
+ }
+ \ifthenelse{\toswap=1}{
+ \node (group\tikzcdmatrixname-\row-\col) [fit=\LoopGG,operator,inner sep=0pt,#1] {\hphantom{Wide}};
+ \draw [thickness] (group\tikzcdmatrixname-\row-\col.west|-\tikzcdmatrixname-\row-\col.center) to[out=0,in=180] (group\tikzcdmatrixname-\row-\col.east|-\tikzcdmatrixname-\the\numexpr\row+1\relax-\col.center);
+ \draw [line width=3pt,white,shorten >=0.9pt,shorten <=0.9pt] (group\tikzcdmatrixname-\row-\col.east|-\tikzcdmatrixname-\row-\col.center) to[out=180,in=0] (group\tikzcdmatrixname-\row-\col.west|-\tikzcdmatrixname-\the\numexpr\row+1\relax-\col.center);
+ \draw [thickness] (group\tikzcdmatrixname-\row-\col.east|-\tikzcdmatrixname-\row-\col.center) to[out=180,in=0] (group\tikzcdmatrixname-\row-\col.west|-\tikzcdmatrixname-\the\numexpr\row+1\relax-\col.center);
+ }{
+ \node (group\tikzcdmatrixname-\row-\col) [fit=\LoopGG,operator,inner sep=0pt,label={[gg label,#2]$#4$},#1] {\hphantom{$#4$}};
+ }
+}
+
+%ghost will get height correct if can't be automatically assigned.
+\DeclareExpandableDocumentCommand{\ghost}{O{}O{0pt}O{1.5pt}m}{%optional parameter contains styling info. compulsory is gate text.
+ |[inner ysep=4pt,minimum width=#2,minimum height=#3]| \vphantom{#4}
+}
+
+
+%single slice
+\newcommand\slice[2][]{%
+ %\edef\currcol{\the\pgfmatrixcurrentcolumn}
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=}
+ \pgfkeys{/quantikz,#1}%
+ \edef\options{\pgfkeysvalueof{/quantikz/style}}
+ \edef\opts{\pgfkeysvalueof{/quantikz/label style}}
+ \edef\n{\the\pgfmatrixcurrentcolumn}
+ %\expandafter\show\n
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfutil@g@addto@macro\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\tikzcd@atendslices\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\slice@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\n\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\options\expandafter}\expandafter{\opts}{#2}%
+ }}
+%deferred slice command
+\newcommand{\slice@end}[4]{
+ \edef\top{($1/2*(\tikzcdmatrixname-col#1.east |- \tikzcdmatrixname-row1.north)+1/2*(\tikzcdmatrixname-col\the\numexpr#1+1\relax.west |- \tikzcdmatrixname-row1.north)$)}
+ \edef\bottom{($1/2*(\tikzcdmatrixname-col#1.east |- \tikzcdmatrixname-row\the\pgfmatrixcurrentrow.south)+1/2*(\tikzcdmatrixname-col\the\numexpr#1+1\relax.west |- \tikzcdmatrixname-row\the\pgfmatrixcurrentrow.south)+(0,-3pt)$)}
+ \expandafter\expandafter\expandafter\make@slice\expandafter\expandafter\expandafter{\expandafter\top\expandafter}\expandafter{\bottom}{#4}{#2}{#3}
+}
+\newcommand{\make@slice}[5]{
+ \draw[slice,#4] #1 to node[pos=0,inner sep=4pt,anchor=south,color=black,#5] {#3} #2;
+}
+%deferred command which will slice everything
+\newcommand{\sliceallr}{
+ \edef\sstyle{\pgfkeysvalueof{/tikz/slice style}}
+ \edef\slstyle{\pgfkeysvalueof{/tikz/slice label style}}
+ \foreach \n in {2,...,\the\numexpr\pgfmatrixcurrentcolumn-1-\pgfkeysvalueof{/tikz/remove end slices}\relax} {
+ \edef\col{\the\numexpr\n-1\relax}
+ \edef\title{\pgfkeysvalueof{/tikz/slice titles}}
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\slice@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\n\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\sstyle\expandafter}\expandafter{\slstyle}{\title}
+ }
+}
+%deferred slice command with vertical text
+\newcommand{\sliceallvr}{
+ \edef\sstyle{\pgfkeysvalueof{/tikz/slice style}}
+ \edef\slstyle{\pgfkeysvalueof{/tikz/slice label style}}
+ \foreach \n in {2,...,\the\numexpr\pgfmatrixcurrentcolumn-1-\pgfkeysvalueof{/tikz/remove end slices}\relax} {
+ \edef\col{\the\numexpr\n-1\relax}
+ \edef\title{\vvv{\pgfkeysvalueof{/tikz/slice titles}}}
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\slice@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\n\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\sstyle\expandafter}\expandafter{\slstyle}{\title}
+ }
+}
+
+%labelling of inputs
+\newcommand\lstick[2][]{%
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=}
+ \pgfkeys{/quantikz,#1}%
+ \edef\newoptions{row=\the\pgfmatrixcurrentrow,col=\the\pgfmatrixcurrentcolumn,#1}
+ \pgfkeysgetvalue{/quantikz/label style}{\options}
+ \pgfkeysgetvalue{/quantikz/braces}{\opts}
+ %\edef\n{\the\pgfmatrixcurrentrow}
+ %\edef\m{\the\pgfmatrixcurrentcolumn}
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfutil@g@addto@macro\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\tikzcd@atendsavedpaths\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\groupinput@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\newoptions\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\options\expandafter}\expandafter{\opts}{#2}%
+ }
+}
+%labelling of outputs
+\newcommand\rstick[2][]{%
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=}
+ \pgfkeys{/quantikz,#1}%
+ \edef\newoptions{row=\the\pgfmatrixcurrentrow,col=\the\pgfmatrixcurrentcolumn,#1}
+ \pgfkeysgetvalue{/quantikz/label style}{\options}
+ \pgfkeysgetvalue{/quantikz/braces}{\opts}
+ %\edef\n{\the\pgfmatrixcurrentrow}
+ %\edef\m{\the\pgfmatrixcurrentcolumn}
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfutil@g@addto@macro\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\tikzcd@atendsavedpaths\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\groupoutput@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\newoptions\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\options\expandafter}\expandafter{\opts}{#2}%
+ }
+}
+%deferred labelling of inputs
+\newcommand{\groupinput@end}[4]{%basic data as keys, lable options, brace options, text
+ \pgfkeys{/quantikz,wires=1}
+ \pgfkeys{/quantikz,#1}%
+ \pgfkeysgetvalue{/quantikz/wires}{\quantwires}
+ \pgfkeysgetvalue{/quantikz/row}{\row}
+ \pgfkeysgetvalue{/quantikz/col}{\col}
+ \xdef\LoopGI{}
+ \foreach \n in {\row,...,\the\numexpr\row+\quantwires-1\relax} {
+ \ifnodedefined{\tikzcdmatrixname-\n-\col}{
+ \xdef\LoopGI{\LoopGI(\tikzcdmatrixname-\n-\col)}
+ }{}
+ }
+ \ifthenelse{\quantwires=1} {
+ \node (ingr-\row) [fit=\LoopGI, inner sep=0pt,label={[align=center,#2]left:#4}] {};
+ }{
+ \node (ingr-\row) [fit=\LoopGI, inner sep=0pt] {};
+ \draw[dm,#3] ($(ingr-\row.north west)+(-0.1cm,0.1cm)$) to node[midway,align=center,anchor=east,xshift=-0.1cm,#2] {#4} ($(ingr-\row.south west)+(-0.1cm,-0.1cm)$);
+ }
+} %
+%deferred labelling of outputs
+\newcommand{\groupoutput@end}[4]{%basic data as keys, lable options, brace options, text
+ \pgfkeys{/quantikz,wires=1}
+ \pgfkeys{/quantikz,#1}%
+ \pgfkeysgetvalue{/quantikz/wires}{\quantwires}
+ \pgfkeysgetvalue{/quantikz/row}{\row}
+ \pgfkeysgetvalue{/quantikz/col}{\col}
+ \xdef\LoopGO{}
+ \foreach \n in {\row,...,\the\numexpr\row+\quantwires-1\relax} {
+ \ifnodedefined{\tikzcdmatrixname-\n-\col}{
+ \xdef\LoopGO{\LoopGO(\tikzcdmatrixname-\n-\col)}
+ }}
+ \ifthenelse{\quantwires=1} {
+ \node (outgr-\row) [fit=\LoopGO, inner sep=0pt,label={[align=center,#2]right:#4}] {};
+ }{
+ \node (outgr-\row) [fit=\LoopGO, inner sep=0pt] {};
+ \draw[dd,#3] ($(outgr-\row.north east)+(0.1cm,0.1cm)$) to node[midway,align=center,anchor=west,xshift=0.1cm,#2] {#4} ($(outgr-\row.south east)+(0.1cm,-0.1cm)$);
+ }
+} %
+%inputs and outputs within a multi-wire gate
+\newcommand\gateinput[2][]{%
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=}%
+ \pgfkeys{/quantikz,#1}%
+ \edef\newoptions{row=\the\pgfmatrixcurrentrow,col=\the\pgfmatrixcurrentcolumn,#1}
+ \pgfkeysgetvalue{/quantikz/label style}{\options}
+ \pgfkeysgetvalue{/quantikz/braces}{\opts}%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfutil@g@addto@macro\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\tikzcd@atendlabels\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\mginput@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\newoptions\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\options\expandafter}\expandafter{\opts}{#2}%
+ }
+}
+\newcommand\gateoutput[2][]{%
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=}
+ \pgfkeys{/quantikz,#1}%
+ \edef\newoptions{row=\the\pgfmatrixcurrentrow,col=\the\pgfmatrixcurrentcolumn,#1}
+ \pgfkeysgetvalue{/quantikz/label style}{\options}
+ \pgfkeysgetvalue{/quantikz/braces}{\opts}
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfutil@g@addto@macro\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\tikzcd@atendlabels\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\mgoutput@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\newoptions\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\options\expandafter}\expandafter{\opts}{#2}%
+ }
+}
+%deferred functions for the above
+\newcommand{\mginput@end}[4]{%collected options,label style, brace style,text
+ \pgfkeys{/quantikz,wires=1}
+ \pgfkeys{/quantikz,#1}%
+ \edef\quantwires{\pgfkeysvalueof{/quantikz/wires}}
+ %\pgfkeysgetvalue{/quantikz/wires}{\quantwires}
+ \pgfkeysgetvalue{/quantikz/row}{\row}
+ \pgfkeysgetvalue{/quantikz/col}{\col}
+%can we find the gategroup node?
+\xdef\cell{group\tikzcdmatrixname-1-\col}
+\foreach \n in {\row,...,1} {%
+ %test if node group-\n-#2 exists
+ \ifnodedefined{group\tikzcdmatrixname-\n-\col}{%
+ \xdef\cell{group\tikzcdmatrixname-\n-\col}
+ \breakforeach
+ }{}
+}
+\ifthenelse{\quantwires=1}{%
+ \node at ($(\cell.west |- \tikzcdmatrixname-\row-\col.west)+(0,0cm)$)[leftinternal,#2]{#4};
+}{%
+%\show\quantwires
+\draw[dd,#3] ($(\cell.west |- \tikzcdmatrixname-\row-\col.west)+(0.1cm,0.1cm)$) to node[leftinternal,midway,#2] {#4} ($(\cell.west |- \tikzcdmatrixname-\the\numexpr\row+\quantwires-1\relax-\col.west)+(0.1cm,-0.1cm)$);
+}
+} %
+\newcommand{\mgoutput@end}[4]{%
+ \pgfkeys{/quantikz,wires=1}
+ \pgfkeys{/quantikz,#1}%
+ \edef\quantwires{\pgfkeysvalueof{/quantikz/wires}}
+ %\pgfkeysgetvalue{/quantikz/wires}{\quantwires}
+ \pgfkeysgetvalue{/quantikz/row}{\row}
+ \pgfkeysgetvalue{/quantikz/col}{\col}
+%can we find the gategroup node?
+\xdef\cell{group\tikzcdmatrixname-1-\col}
+\foreach \n in {\row,...,1} {%
+ %test if node group-\n-#2 exists
+ \ifnodedefined{group\tikzcdmatrixname-\n-\col}{%
+ \xdef\cell{group\tikzcdmatrixname-\n-\col}
+ \breakforeach
+ }{}
+}
+\ifthenelse{\quantwires=1}{%
+ \node at ($(\cell.east |- \tikzcdmatrixname-\row-\col.east)+(0,0cm)$)[rightinternal,#2]{#4};
+}{%
+\draw[dm,#3] ($(\cell.east |- \tikzcdmatrixname-\row-\col.east)+(-0.1cm,0.1cm)$) to node[rightinternal,midway,#2] {#4} ($(\cell.east |- \tikzcdmatrixname-\the\numexpr\row+\quantwires-1\relax-\col.east)+(-0.1cm,-0.1cm)$);
+}
+} %
+
+%wave command
+\newcommand\wave[1][]{%
+ \edef\n{\the\pgfmatrixcurrentrow}
+ \expandafter\pgfutil@g@addto@macro\expandafter\tikzcd@atendslices\expandafter{%
+ \expandafter\wave@end\expandafter{\n}{#1}%
+ }
+}
+%deferred wave
+\newcommand{\wave@end}[2]{
+ \node (wave-#1) [fit=(\tikzcdmatrixname-row#1),wave,#2] {};
+}
+
+%put a border around a group of gates
+\newcommand\gategroup[2][]{%
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=}
+ \pgfkeys{/quantikz,#1}%
+ \edef\newoptions{row=\the\pgfmatrixcurrentrow,col=\the\pgfmatrixcurrentcolumn,#1}
+ \pgfkeysgetvalue{/quantikz/style}{\options}
+ \pgfkeysgetvalue{/quantikz/label style}{\opts}
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\pgfutil@g@addto@macro\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\tikzcd@atendlabels\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\gategroup@end\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter\newoptions\expandafter\expandafter\expandafter}\expandafter\expandafter\expandafter{\expandafter\options\expandafter}\expandafter{\opts}{#2}%
+ }
+}
+%deferred gate group command
+\newcommand{\gategroup@end}[4]{%options, gate style, text style, text
+ \pgfkeys{/quantikz,wires=1,style=,label style=,braces=,steps=1}%
+ \edef\background{0}%
+ \pgfkeys{/quantikz,#1}%
+ \pgfkeysgetvalue{/quantikz/wires}{\quantwires}%
+ \pgfkeysgetvalue{/quantikz/row}{\row}%
+ \pgfkeysgetvalue{/quantikz/col}{\col}%
+ \pgfkeysgetvalue{/quantikz/steps}{\steps}%
+ \edef\fit{(\tikzcdmatrixname-col\col.west |- \tikzcdmatrixname-row\row.north)(\tikzcdmatrixname-col\the\numexpr\col+\steps-1\relax.east |- \tikzcdmatrixname-row\the\numexpr\row+\quantwires-1\relax.south)}%
+ \ifthenelse{\background=1}{%
+ \begin{scope}[on background layer]\node (ggroup-\row-\col) [fit=\fit,ggroup,label={[group label,#3]:#4},#2] {};\end{scope}
+ }{%
+ \node (ggroup-\row-\col) [fit=\fit,ggroup,label={[group label,#3]:#4},#2] {};
+ }
+}
+
+%use for fudging classical wires that have horizontal and vertical sections
+\newcommand{\cwbend}[1]{
+ \vcw{#1}\cw
+ \edef\cell{\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn}
+ \expandafter\pgfutil@g@addto@macro\expandafter\tikzcd@atendlabels\expandafter{%
+ \expandafter\latephase@end\expandafter{\cell}
+ }
+}
+
+\newcommand{\latephase@end}[1]{
+ \node [phase,inner sep=2pt] at (\tikzcdmatrixname-#1) {};
+}
+
+%patch tikzcd to allow for multiple layers of commands
+\patchcmd\tikzcd@{\tikzpicture}{\def\toslice{0}\def\vert{0}
+ \begin{tikzpicture}}{}{}
+\patchcmd\tikzcd@
+ {\global\let\tikzcd@savedpaths\pgfutil@empty}
+ {\global\let\tikzcd@savedpaths\pgfutil@empty
+ \global\let\tikzcd@atendsavedpaths\pgfutil@empty
+ \global\let\tikzcd@atendlabels\pgfutil@empty
+ \global\let\tikzcd@atendslices\pgfutil@empty
+ \global\let\tikzcd@atendglobals\pgfutil@empty
+ \pgfutil@g@addto@macro\tikzcd@savedpaths\DivideRowsCols
+ %\pgfmathsetmacro{\mname}{random(100000)}
+ \ifthenelse{\toslice=1}{\ifthenelse{\vert=0}{\pgfutil@g@addto@macro\tikzcd@atendslices\sliceallr}{\pgfutil@g@addto@macro\tikzcd@atendslices\sliceallvr}}{}
+ }{}{}
+
+%this patching works on modern systems, but I believe is incompatible with the old version that arXiv is running
+%\patchcmd\endtikzcd{\tikzcd@savedpaths}{\tikzcd@savedpaths\tikzcd@atendsavedpaths\tikzcd@atendlabels\tikzcd@atendslices{\globaldefs=1\tikzcd@atendglobals}}{}{}
+
+%instead, completely redefine the function
+\def\endtikzcd{%
+ \pgfmatrixendrow\egroup%
+ \pgfextra{\global\let\tikzcdmatrixname\tikzlastnode};%
+ \tikzcdset{\the\pgfmatrixcurrentrow-row diagram/.try}%
+ \begingroup%
+ \pgfkeys{% `quotes' library support
+ /handlers/first char syntax/the character "/.initial=\tikzcd@forward@quotes,%
+ /tikz/edge quotes mean={%
+ edge node={node [execute at begin node=\iftikzcd@mathmode$\fi,%$
+ execute at end node=\iftikzcd@mathmode$\fi,%$
+ /tikz/commutative diagrams/.cd,every label,##2]{##1}}}}%
+ \let\tikzcd@errmessage\errmessage% improve error messages
+ \def\errmessage##1{\tikzcd@errmessage{##1^^J...^^Jl.\tikzcd@lineno\space%
+ I think the culprit is a tikzcd arrow in cell \tikzcd@currentrow-\tikzcd@currentcolumn}}%
+ \tikzcd@before@paths@hook%
+ \tikzcd@savedpaths\tikzcd@atendsavedpaths\tikzcd@atendlabels\tikzcd@atendslices{\globaldefs=1\tikzcd@atendglobals}%I just added stuff here instead
+ \endgroup%
+ \end{tikzpicture}%
+ \ifnum0=`{}\fi}
+
+
+%end patching
+%\makeatother
+
+%this command runs after we've finished the matrix, and makes unified cells for each row and each column. This allows much nicer alignment of large boxes.
+\newcommand{\DivideRowsCols}{
+ \foreach \n in {1,...,\the\pgfmatrixcurrentrow} {%for each row, construct a master cell that contains all entries
+ \xdef\LoopRow{}
+ \foreach \m in {1,...,\the\pgfmatrixcurrentcolumn}{
+ \ifnodedefined{\tikzcdmatrixname-\n-\m}{
+ \xdef\LoopRow{\LoopRow(\tikzcdmatrixname-\n-\m)}
+ }{}
+ \ifnodedefined{group\tikzcdmatrixname-\n-\m}{
+ \xdef\LoopRow{\LoopRow(group\tikzcdmatrixname-\n-\m)}
+ }{}
+ }
+ \node (\tikzcdmatrixname-row\n) [fit=\LoopRow] {};
+ }
+ \foreach \n in {1,...,\the\pgfmatrixcurrentcolumn} {%for each column, construct a master cell that contains all entries
+ \xdef\LoopCol{}
+ \foreach \m in {1,...,\the\pgfmatrixcurrentrow}{
+ \ifnodedefined{\tikzcdmatrixname-\m-\n}{
+ \xdef\LoopCol{\LoopCol(\tikzcdmatrixname-\m-\n)}
+ }{}
+ \ifnodedefined{group\tikzcdmatrixname-\m-\n}{
+ \xdef\LoopCol{\LoopCol(group\tikzcdmatrixname-\m-\n)}
+ }{}
+ }
+ \node (\tikzcdmatrixname-col\n) [fit=\LoopCol] {};
+ }
+}
+
+%initialise all the pgfkeys for key=value parametre passing in macro options
+
+\pgfkeys{/tikz/slice all/.code={\def\toslice{1}},/tikz/remove end slices/.initial=0,/tikz/slice titles/.initial={\col},/tikz/slice style/.initial={},/tikz/slice label style/.initial={},/tikz/thin lines/.code={\resetstyles},/tikz/transparent/.code={\maketransparent},/tikz/vertical slice labels/.code={\def\vert{1}}}
+\pgfkeys{/quantikz/.is family,/quantikz,%
+.unknown/.style={%
+ /quantikz/wires=\pgfkeyscurrentname
+},%
+wires/.initial=1,%
+style/.initial={},label style/.initial={},braces/.initial={},background/.code={\def\background{1}},alternate/.code={\def\helper{1}},row/.initial=1,col/.initial=1,steps/.initial=1,Strike Width/.initial=0.08cm,Strike Height/.initial=0.12cm,swap/.code={\def\toswap{1}},disable auto height/.code={\def\DisableMinSize{1}},cwires/.initial={-1},nwires/.initial={-1}}
+
+%my standard Dirac notation commands. can be overridden by user.
+\providecommand{\ket}[1]{\ensuremath{\left|#1\right\rangle}}
+\providecommand{\bra}[1]{\ensuremath{\left\langle#1\right |}}
+\providecommand{\proj}[1]{\ensuremath{\ket{#1}\!\bra{#1}}}
+\providecommand{\braket}[2]{\ensuremath{\left\langle#1\middle|#2\right\rangle}}
+
+%single qubit operations
+\newcommand{\phantomgate}[1]{|[linecont,thickness, inner ysep=3pt]| \phantom{#1} \qw}
+\newcommand{\hphantomgate}[1]{|[linecont,minimum size=1.5em,thickness]| \hphantom{#1} \qw}
+\newcommand{\push}[1]{#1 \qw}
+\newcommand{\alias}[1]{|[alias=#1]|}
+\DeclareExpandableDocumentCommand{\phase}{O{}m}{|[phase,#1,label={[phase label,#1]#2}]| {} \qw}
+\DeclareExpandableDocumentCommand{\control}{O{}m}{|[phase,#1]| {} \qw}
+\DeclareExpandableDocumentCommand{\ocontrol}{O{}m}{|[ophase,#1]| {} \qw}
+\DeclareExpandableDocumentCommand{\targ}{O{}m}{|[circlewc,#1]| {} \qw}
+\DeclareExpandableDocumentCommand{\targX}{O{}m}{|[crossx2,#1]| {} \qw}
+\newcommand{\linethrough}{|[linecont, inner ysep=3pt]| }
+
+%measuring
+\DeclareExpandableDocumentCommand{\meter}{O{}{m}}{|[meter,label={[my label]#2},#1]| {} \qw}
+\DeclareExpandableDocumentCommand{\measuretab}{O{}{m}}{|[measuretab,#1]| {#2} \qw}
+\DeclareExpandableDocumentCommand{\meterD}{O{}{m}}{|[meterD,#1]| {#2} \qw}
+\DeclareExpandableDocumentCommand{\measure}{O{}{m}}{|[measure,#1]| {#2} \qw}
+
+%controlled gates
+\def\ctrl#1{\control{} \vqw{#1}}
+\def\octrl#1{\ocontrol{}\vqw{#1}}
+\def\swap#1{%
+ \targX{}
+ \edef\start{\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn}
+ \edef\end{\the\numexpr#1+\pgfmatrixcurrentrow\relax-\the\pgfmatrixcurrentcolumn}
+ \expandafter\expandafter\expandafter\vqwexplicitcenter\expandafter\expandafter\expandafter{\expandafter\start\expandafter}\expandafter{\end}
+}
+
+%vertical wires
+%classical vertical wire, relative positioning
+\newcommand{\vcw}[1]{
+ \edef\start{\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn}
+ \edef\end{\the\numexpr#1+\pgfmatrixcurrentrow\relax-\the\pgfmatrixcurrentcolumn}
+ \expandafter\expandafter\expandafter\vcwexplicit\expandafter\expandafter\expandafter{\expandafter\start\expandafter}\expandafter{\end}
+}
+%vertical quantum wire, relative positioning
+\newcommand{\vqw}[1]{
+ \edef\start{\the\pgfmatrixcurrentrow-\the\pgfmatrixcurrentcolumn}
+ \edef\end{\the\numexpr#1+\pgfmatrixcurrentrow\relax-\the\pgfmatrixcurrentcolumn}
+ \expandafter\expandafter\expandafter\vqwexplicit\expandafter\expandafter\expandafter{\expandafter\start\expandafter}\expandafter{\end}
+}
+%quantum wire, absolute positioning
+\newcommand{\vqwexplicit}[2]{
+ \arrow[from=#1,to=#2,arrows] {}
+}
+%classical vertical wire, absolute positioning
+\newcommand{\vcwexplicit}[2]{
+ \arrow[from=#1,to=#2,arrows,xshift=0.05cm] {}\arrow[from=#1,to=#2,arrows,xshift=-0.05cm] {}
+}
+%classical horizontal wire, absolute positioning
+\newcommand{\vcwhexplicit}[2]{
+ \arrow[from=#1,to=#2,arrows,yshift=0.05cm] {}\arrow[from=#1,to=#2,arrows,yshift=-0.05cm] {}
+}
+%quantum wire, absolute positioning, going to centres of cell, not edge.
+\newcommand{\vqwexplicitcenter}[2]{
+ \arrow[from=#1,to=#2,arrows,start anchor=center,end anchor=center] {}
+}
+
+%horizontal wires
+\newcommand{\qw}{\ifthenelse{\the\pgfmatrixcurrentcolumn>1}{\arrow[arrows]{l}}{}}
+\newcommand{\cw}{\ifthenelse{\the\pgfmatrixcurrentcolumn>1}{\arrow[arrows,yshift=0.05cm]{l}\arrow[arrows,yshift=-0.05cm]{l}}{}}
+%define the strike distance for strike-through on qwbundle.
+%\newcommand*{\StrikeDistance}{0.1cm}%
+%a bundle of horizontal quantum wires
+\newcommand{\qwbundle}[2][]{\ifthenelse{\the\pgfmatrixcurrentcolumn>1}{
+ \def\helper{0}
+ \pgfset{/quantikz,#1}
+ \ifthenelse{\helper=1}{
+ \arrow[arrows,yshift=0.1cm]{l}\arrow[arrows]{l}\arrow[arrows,yshift=-0.1cm]{l}
+ }{
+ \arrow[phantom,strike arrow]{l}[xshift=\pgfkeysvalueof{/quantikz/Strike Width}, yshift=\pgfkeysvalueof{/quantikz/Strike Height},anchor=south west,inner sep=0pt]{\scriptstyle #2}
+ }}{}}
+
+
+
+
+%configure some of the style properties.
+\tikzcdset{row sep/normal=0.5cm,column sep/normal=0.5cm,thick,nodes in empty cells,
+ every cell/.style={
+ anchor=center,minimum size=0pt,inner sep=0pt,outer sep=0pt,thick
+ },
+ arrows/.style={dash,thick},
+ 1-row diagram/.style={}
+ }
+\tikzset{
+ thickness/.style={thick},
+ operator/.style={draw,fill=white,minimum size=1.5em, inner sep=2pt,thickness,align=center},
+ ggroup/.style={draw,minimum size=1.5em,thickness,align=center,inner sep=4pt},
+ leftinternal/.style={anchor=mid west,font=\scriptsize,inner sep=4pt,align=center},
+ rightinternal/.style={anchor=mid east,font=\scriptsize,inner sep=4pt,align=center},
+ wave/.style={inner sep=-3pt,tape,fill=white,apply={draw=black} except on segments {5,6,1,2,9}},
+ phase/.style={fill,shape=circle,minimum size=4pt},
+ phase label/.style={label distance=2mm,anchor=mid,label position=45},
+ ophase/.style={fill=white,draw=black,shape=circle,minimum size=4pt},
+ internal/.style={thickness,black},
+ line/.style={path picture={
+\draw[internal](path picture bounding box.west) -- (path picture bounding box.east);
+}},
+ linecont/.style={circle,line},
+ cross/.style={path picture={
+\draw[internal](path picture bounding box.north) -- (path picture bounding box.south) (path picture bounding box.west) -- (path picture bounding box.east);
+}},
+ circlewc/.style={draw,circle,cross,minimum width=4pt,inner sep=3pt},
+ crossx/.style={path picture={
+\draw[internal,inner sep=0pt]
+(path picture bounding box.south east) -- (path picture bounding box.north west) (path picture bounding box.south west) -- (path picture bounding box.north east) (path picture bounding box.west) -- (path picture bounding box.east);
+}},
+ crossx2/.style={circle,crossx,minimum size=1em},
+ dd/.style={decoration={brace},decorate,thickness},
+ dm/.style={decoration={brace,mirror},decorate,thickness},
+ slice/.style={thickness,red,dash pattern=on 5pt off 3pt,align=center},
+ meter/.style={draw,fill=white,minimum width=2em,minimum height=1.5em, rectangle, font=\vphantom{A}, thickness,
+ path picture={\draw[black] ([shift={(.1,.24)}]path picture bounding box.south west) to[bend left=50] ([shift={(-.1,.24)}]path picture bounding box.south east);\draw[black,-{Latex[scale=0.6]}] ([shift={(0,.1)}]path picture bounding box.south) -- ([shift={(.3,-.1)}]path picture bounding box.north);}},
+ measuretab/.style={draw,signal,signal to=west,inner sep=4pt,fill=white},
+ meterD/.style={draw,rounded rectangle,rounded rectangle left arc=none,inner sep=4pt,fill=white},
+ measure/.style={draw,rounded rectangle,inner sep=4pt,fill=white},
+ my label/.style={yshift=0.1cm,above,align=center},
+ gg label/.style={label position=center,align=center},
+ group label/.style={label position=above,yshift=0.2cm,anchor=mid},
+ strike arrow/.style={
+ decoration={markings, mark=at position 0.5 with {
+ \draw [internal,-]
+ ++ (-\pgfkeysvalueof{/quantikz/Strike Width},-\pgfkeysvalueof{/quantikz/Strike Height} )
+ -- ( \pgfkeysvalueof{/quantikz/Strike Width}, \pgfkeysvalueof{/quantikz/Strike Height});} %can I use pgfkeys and do some maths here?
+ },
+ postaction={decorate},
+}
+}
+
+\def\resetstyles{
+\tikzcdset{thin,every cell/.append style={thin},arrows/.append style={thin}
+ }
+\tikzset{
+ thickness/.style={thin},
+ %operator/.append style={thin},
+ %internal/.append style={thin},
+ %dd/.append style={thin},
+ %dm/.append style={thin},
+ %slice/.append style={thin},
+ meter/.append style={thin},
+ phase/.append style={minimum size=3pt},
+ ophase/.append style={minimum size=3pt},
+ %circlewc/.append style={minimum size=3pt,inner sep=2pt}
+}
+}
+
+\def\maketransparent{
+\tikzset{
+ operator/.append style={fill opacity=0},
+ meter/.append style={fill opacity=0}
+}
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/rank-2-roots/README b/graphics/pgf/contrib/rank-2-roots/README
new file mode 100644
index 0000000000..66d307c001
--- /dev/null
+++ b/graphics/pgf/contrib/rank-2-roots/README
@@ -0,0 +1,18 @@
+___________________________________
+
+ Rank 2 roots
+
+ v1.0
+
+ 30 August 2018
+___________________________________
+
+Authors : Ben McKay
+Maintainer: Ben McKay
+E-mail : b.mckay@ucc.ie
+Licence : Released under the LaTeX Project Public License v1.3c or
+ later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+For mathematicians. Draws rank 2 root systems, with Weyl chambers, weight lattices, and parabolic subgroups.
diff --git a/graphics/pgf/contrib/rank-2-roots/rank-2-roots.bib b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.bib
new file mode 100644
index 0000000000..38a25a6466
--- /dev/null
+++ b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.bib
@@ -0,0 +1,451 @@
+% Encoding: ISO-8859-1
+
+
+@Book{Adams:1996,
+ Title = {Lectures on exceptional {L}ie groups},
+ Author = {Adams, J. F.},
+ Publisher = {University of Chicago Press, Chicago, IL},
+ Year = {1996},
+ Note = {With a foreword by J. Peter May,
+ Edited by Zafer Mahmud and Mamoru Mimura},
+ Series = {Chicago Lectures in Mathematics},
+
+ ISBN = {0-226-00526-7; 0-226-00527-5},
+ Mrclass = {22-01 (22E10)},
+ Mrnumber = {1428422},
+ Mrreviewer = {William M. McGovern},
+ Owner = {user},
+ Pages = {xiv+122},
+ Timestamp = {2018.07.22}
+}
+
+@Article{Baba:2009,
+ Title = {Satake diagrams and restricted root systems of semisimple pseudo-{R}iemannian symmetric spaces},
+ Author = {Baba, Kurando},
+ Journal = {Tokyo J. Math.},
+ Year = {2009},
+ Number = {1},
+ Pages = {127--158},
+ Volume = {32},
+
+ Fjournal = {Tokyo Journal of Mathematics},
+ ISSN = {0387-3870},
+ Mrclass = {17B20 (17B22 53C35)},
+ Mrnumber = {2541161},
+ Mrreviewer = {Oksana S. Yakimova},
+ Owner = {user},
+ Timestamp = {2017.12.04},
+ Url = {https://doi.org/10.3836/tjm/1249648414}
+}
+
+@Book{Bourbaki:2002,
+ Title = {Lie groups and {L}ie algebras. {C}hapters 4--6},
+ Author = {Bourbaki, Nicolas},
+ Publisher = {Springer-Verlag, Berlin},
+ Year = {2002},
+ Note = {Translated from the 1968 French original by Andrew Pressley},
+ Series = {Elements of Mathematics (Berlin)},
+
+ ISBN = {3-540-42650-7},
+ Mrclass = {17-01 (00A05 20E42 20F55 22-01)},
+ Mrnumber = {1890629},
+ Owner = {user},
+ Pages = {xii+300},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-3-540-89394-3}
+}
+
+@Book{Carter:2005,
+ Title = {Lie algebras of finite and affine type},
+ Author = {Carter, R. W.},
+ Publisher = {Cambridge University Press, Cambridge},
+ Year = {2005},
+ Series = {Cambridge Studies in Advanced Mathematics},
+ Volume = {96},
+
+ ISBN = {978-0-521-85138-1; 0-521-85138-6},
+ Mrclass = {17-02 (17B67)},
+ Mrnumber = {2188930},
+ Mrreviewer = {Stephen Slebarski},
+ Owner = {user},
+ Pages = {xviii+632},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1017/CBO9780511614910}
+}
+
+@InCollection{Carter:1995,
+ Title = {On the representation theory of the finite groups of {L}ie
+ type over an algebraically closed field of characteristic 0 [
+ {MR}1170353 (93j:20034)]},
+ Author = {Carter, R. W.},
+ Booktitle = {Algebra, {IX}},
+ Publisher = {Springer, Berlin},
+ Year = {1995},
+ Pages = {1--120, 235--239},
+ Series = {Encyclopaedia Math. Sci.},
+ Volume = {77},
+
+ Doi = {10.1007/978-3-662-03235-0_1},
+ Mrclass = {20C33 (20-02 20G05)},
+ Mrnumber = {1392478},
+ Owner = {user},
+ Timestamp = {2018.05.19},
+ Url = {https://doi.org/10.1007/978-3-662-03235-0_1}
+}
+
+@Article{Chuah:2013,
+ Title = {Cartan automorphisms and {V}ogan superdiagrams},
+ Author = {Chuah, Meng-Kiat},
+ Journal = {Math. Z.},
+ Year = {2013},
+ Number = {3-4},
+ Pages = {793--800},
+ Volume = {273},
+
+ Fjournal = {Mathematische Zeitschrift},
+ ISSN = {0025-5874},
+ Mrclass = {17B20 (17B40)},
+ Mrnumber = {3030677},
+ Mrreviewer = {Zi-Xin Hou},
+ Owner = {user},
+ Timestamp = {2017.12.04},
+ Url = {https://doi.org/10.1007/s00209-012-1030-z}
+}
+
+@InCollection{Draper/Guido:2016,
+ Title = {On the real forms of the exceptional {L}ie algebra {$\mathfrak
+ e_6$} and their {S}atake diagrams},
+ Author = {Draper Fontanals, Cristina and Guido, Valerio},
+ Booktitle = {Non-associative and non-commutative algebra and operator
+ theory},
+ Publisher = {Springer, Cham},
+ Year = {2016},
+ Pages = {211--226},
+ Series = {Springer Proc. Math. Stat.},
+ Volume = {160},
+
+ Mrclass = {17B20 (17A75 17B25 17B60)},
+ Mrnumber = {3613831},
+ Mrreviewer = {Alberto Elduque},
+ Owner = {user},
+ Timestamp = {2018.04.30}
+}
+
+@Book{Dynkin:2000,
+ Title = {Selected papers of {E}. {B}. {D}ynkin with commentary},
+ Author = {Dynkin, E. B.},
+ Publisher = {American Mathematical Society, Providence, RI; International Press, Cambridge, MA},
+ Year = {2000},
+ Note = {Edited by A. A. Yushkevich, G. M. Seitz and A. L. Onishchik},
+
+ ISBN = {0-8218-1065-0},
+ Mrclass = {01A75 (60Jxx)},
+ Mrnumber = {1757976},
+ Mrreviewer = {William M. McGovern},
+ Owner = {user},
+ Pages = {xxviii+796},
+ Timestamp = {2017.11.15}
+}
+
+@Article{Dynkin:1952,
+ Title = {Semisimple subalgebras of semisimple {L}ie algebras},
+ Author = {Dynkin, E. B.},
+ Journal = {Mat. Sbornik N.S.},
+ Year = {1952},
+ Note = {Reprinted in English translation in \cite{Dynkin:2000}.},
+ Pages = {349--462 (3 plates)},
+ Volume = {30(72)},
+
+ Mrclass = {09.1X},
+ Mrnumber = {0047629},
+ Mrreviewer = {I. Kaplansky},
+ Owner = {user},
+ Timestamp = {2017.11.15}
+}
+
+@Article{Frappat/Sciarrino/Sorba:1989,
+ Title = {Structure of basic {L}ie superalgebras and of their affine extensions},
+ Author = {Frappat, L. and Sciarrino, A. and Sorba, P.},
+ Journal = {Comm. Math. Phys.},
+ Year = {1989},
+ Number = {3},
+ Pages = {457--500},
+ Volume = {121},
+
+ Fjournal = {Communications in Mathematical Physics},
+ ISSN = {0010-3616},
+ Mrclass = {17B70 (17A70 17B40)},
+ Mrnumber = {990776},
+ Mrreviewer = {A. Pianzola},
+ Owner = {user},
+ Timestamp = {2017.12.18},
+ Url = {http://0-projecteuclid.org.library.ucc.ie/euclid.cmp/1104178142}
+}
+
+@Book{Grove/Benson:1985,
+ Title = {Finite reflection groups},
+ Author = {Grove, L. C. and Benson, C. T.},
+ Publisher = {Springer-Verlag, New York},
+ Year = {1985},
+ Edition = {Second},
+ Series = {Graduate Texts in Mathematics},
+ Volume = {99},
+
+ ISBN = {0-387-96082-1},
+ Mrclass = {20-01 (20B25 20H15)},
+ Mrnumber = {777684},
+ Owner = {user},
+ Pages = {x+133},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-1-4757-1869-0}
+}
+
+@Book{Helgason:2001,
+ Title = {Differential geometry, {L}ie groups, and symmetric spaces},
+ Author = {Helgason, Sigurdur},
+ Publisher = {American Mathematical Society, Providence, RI},
+ Year = {2001},
+ Note = {Corrected reprint of the 1978 original},
+ Series = {Graduate Studies in Mathematics},
+ Volume = {34},
+
+ ISBN = {0-8218-2848-7},
+ Mrclass = {53C35 (22E10 22E46 22E60)},
+ Mrnumber = {1834454},
+ Owner = {user},
+ Pages = {xxvi+641},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1090/gsm/034}
+}
+
+@Book{Humphreys:1990,
+ Title = {Reflection groups and {C}oxeter groups},
+ Author = {Humphreys, James E.},
+ Publisher = {Cambridge University Press, Cambridge},
+ Year = {1990},
+ Series = {Cambridge Studies in Advanced Mathematics},
+ Volume = {29},
+
+ ISBN = {0-521-37510-X},
+ Mrclass = {20-02 (20F32 20F55 20G15 20H15)},
+ Mrnumber = {1066460},
+ Mrreviewer = {Louis Solomon},
+ Owner = {user},
+ Pages = {xii+204},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1017/CBO9780511623646}
+}
+
+@Book{Kac:1990,
+ Title = {Infinite-dimensional {L}ie algebras},
+ Author = {Kac, Victor G.},
+ Publisher = {Cambridge University Press, Cambridge},
+ Year = {1990},
+ Edition = {Third},
+
+ ISBN = {0-521-37215-1; 0-521-46693-8},
+ Mrclass = {17B65 (17B67 17B68 58F07)},
+ Mrnumber = {1104219},
+ Owner = {user},
+ Pages = {xxii+400},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1017/CBO9780511626234}
+}
+
+@Article{Khastgir/Sasaki:1996,
+ Title = {Non-canonical folding of {D}ynkin diagrams and reduction of affine {T}oda theories},
+ Author = {Khastgir, S. Pratik and Sasaki, Ryu},
+ Journal = {Progr. Theoret. Phys.},
+ Year = {1996},
+ Number = {3},
+ Pages = {503--518},
+ Volume = {95},
+
+ Fjournal = {Progress of Theoretical Physics},
+ ISSN = {0033-068X},
+ Mrclass = {81T10 (17B81 58F07 81R10)},
+ Mrnumber = {1388245},
+ Mrreviewer = {Mehmet Koca},
+ Owner = {user},
+ Timestamp = {2017.12.18},
+ Url = {https://doi.org/10.1143/PTP.95.503}
+}
+
+@Book{OnishchikVinberg:1990,
+ Title = {Lie groups and algebraic groups},
+ Author = {Onishchik, A. L. and Vinberg, {\`E}. B.},
+ Publisher = {Springer-Verlag},
+ Year = {1990},
+
+ Address = {Berlin},
+ Note = {Translated from the Russian and with a preface by D. A. Leites},
+ Series = {Springer Series in Soviet Mathematics},
+
+ ISBN = {3-540-50614-4},
+ Mrclass = {22-01 (17B20 20G20 22E10 22E15)},
+ Mrnumber = {91g:22001},
+ Mrreviewer = {James E. Humphreys},
+ Owner = {user},
+ Pages = {xx+328},
+ Timestamp = {2017.11.15}
+}
+
+@Book{Onishchik/Vinberg:1990,
+ Title = {Lie groups and algebraic groups},
+ Author = {Onishchik, A. L. and Vinberg, \`E. B.},
+ Publisher = {Springer-Verlag, Berlin},
+ Year = {1990},
+ Note = {Translated from the Russian and with a preface by D. A. Leites},
+ Series = {Springer Series in Soviet Mathematics},
+
+ ISBN = {3-540-50614-4},
+ Mrclass = {22-01 (17B20 20G20 22E10 22E15)},
+ Mrnumber = {1064110},
+ Mrreviewer = {James E. Humphreys},
+ Owner = {user},
+ Pages = {xx+328},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-3-642-74334-4}
+}
+
+@Article{Ransingh:2013,
+ Title = {Vogan diagrams of untwisted affine {K}ac-{M}oody superalgebras},
+ Author = {Ransingh, Biswajit},
+ Journal = {Asian-Eur. J. Math.},
+ Year = {2013},
+ Number = {4},
+ Pages = {1350062, 10},
+ Volume = {6},
+
+ Fjournal = {Asian-European Journal of Mathematics},
+ ISSN = {1793-5571},
+ Mrclass = {17B67 (17B05 17B22 17B40)},
+ Mrnumber = {3149279},
+ Mrreviewer = {Xiangqian Guo},
+ Owner = {user},
+ Timestamp = {2018.01.11}
+}
+
+@Article{Ransingh:unpub,
+ Title = {{Vogan diagrams of affine twisted Lie superalgebras}},
+ Author = {Ransingh, B.},
+ Journal = {ArXiv e-prints},
+ Year = {2013},
+
+ Month = mar,
+ Pages = {1--9},
+
+ Adsnote = {Provided by the SAO/NASA Astrophysics Data System},
+ Adsurl = {http://adsabs.harvard.edu/abs/2013arXiv1303.0092R},
+ Archiveprefix = {arXiv},
+ Eprint = {1303.0092},
+ Keywords = {Mathematical Physics, Mathematics - Representation Theory},
+ Owner = {user},
+ Primaryclass = {math-ph},
+ Timestamp = {2018.01.11}
+}
+
+@Article{Regelskis/Vlaar:2016,
+ Title = {{Reflection matrices, coideal subalgebras and generalized Satake diagrams of affine type}},
+ Author = {{Regelskis}, V. and {Vlaar}, B.},
+ Journal = {ArXiv e-prints},
+ Year = {2016},
+
+ Month = feb,
+ Pages = {1--118},
+
+ Adsnote = {Provided by the SAO/NASA Astrophysics Data System},
+ Adsurl = {http://adsabs.harvard.edu/abs/2016arXiv160208471R},
+ Archiveprefix = {arXiv},
+ Eprint = {1602.08471},
+ Keywords = {Mathematical Physics, Mathematics - Quantum Algebra, Mathematics - Representation Theory, Nonlinear Sciences - Exactly Solvable and Integrable Systems},
+ Owner = {user},
+ Primaryclass = {math-ph},
+ Timestamp = {2017.12.04}
+}
+
+@Book{Satake:1980,
+ Title = {Algebraic structures of symmetric domains},
+ Author = {Satake, Ichir\^o},
+ Publisher = {Iwanami Shoten, Tokyo; Princeton University Press, Princeton, N.J.},
+ Year = {1980},
+ Series = {Kan\^o Memorial Lectures},
+ Volume = {4},
+
+ Mrclass = {32-02 (17C35 32Mxx 53C35)},
+ Mrnumber = {591460},
+ Mrreviewer = {S. Murakami},
+ Owner = {user},
+ Pages = {xvi+321},
+ Timestamp = {2017.11.15}
+}
+
+@Book{Springer:2009,
+ Title = {Linear algebraic groups},
+ Author = {Springer, T. A.},
+ Publisher = {Birkh\"auser Boston, Inc., Boston, MA},
+ Year = {2009},
+ Edition = {second},
+ Series = {Modern Birkh\"auser Classics},
+
+ ISBN = {978-0-8176-4839-8},
+ Mrclass = {20G15 (14L10)},
+ Mrnumber = {2458469},
+ Owner = {user},
+ Pages = {xvi+334},
+ Timestamp = {2018.03.31}
+}
+
+@InCollection{Zuber:1998,
+ Title = {Generalized {D}ynkin diagrams and root systems and their folding},
+ Author = {Zuber, Jean-Bernard},
+ Booktitle = {Topological field theory, primitive forms and related topics ({K}yoto, 1996)},
+ Publisher = {Birkh\"auser Boston, Boston, MA},
+ Year = {1998},
+ Pages = {453--493},
+ Series = {Progr. Math.},
+ Volume = {160},
+
+ Mrclass = {17B20 (05C25 20F55)},
+ Mrnumber = {1653035},
+ Mrreviewer = {Saeid Azam},
+ Owner = {user},
+ Timestamp = {2017.12.18}
+}
+
+@Book{Vinberg:1994,
+ Title = {Lie groups and {L}ie algebras, {III}},
+ Editor = {Vinberg, \`E. B.},
+ Publisher = {Springer-Verlag, Berlin},
+ Year = {1994},
+ Note = {Structure of Lie groups and Lie algebras, A translation of {{\i}t Current problems in mathematics. Fundamental directions. Vol. 41} (Russian), Akad. Nauk SSSR, Vsesoyuz. Inst. Nauchn. i Tekhn. Inform., Moscow, 1990 [ MR1056485 (91b:22001)], Translation by V. Minachin [V. V. Minakhin], Translation edited by A. L. Onishchik and \`E. B. Vinberg},
+ Series = {Encyclopaedia of Mathematical Sciences},
+ Volume = {41},
+
+ ISBN = {3-540-54683-9},
+ Mrclass = {22-06 (17-06 22Exx)},
+ Mrnumber = {1349140},
+ Owner = {user},
+ Pages = {iv+248},
+ Timestamp = {2017.11.15},
+ Url = {https://doi.org/10.1007/978-3-662-03066-0}
+}
+
+@Book{Fulton.Harris:1991,
+ title = {Representation theory},
+ publisher = {Springer-Verlag, New York},
+ year = {1991},
+ author = {Fulton, William and Harris, Joe},
+ volume = {129},
+ series = {Graduate Texts in Mathematics},
+ isbn = {0-387-97527-6; 0-387-97495-4},
+ note = {A first course, Readings in Mathematics},
+ doi = {10.1007/978-1-4612-0979-9},
+ mrclass = {20G05 (17B10 20G20 22E46)},
+ mrnumber = {1153249},
+ mrreviewer = {James E. Humphreys},
+ pages = {xvi+551},
+ url = {https://doi.org/10.1007/978-1-4612-0979-9},
+}
+
+@Comment{jabref-meta: databaseType:bibtex;}
diff --git a/graphics/pgf/contrib/rank-2-roots/rank-2-roots.pdf b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.pdf
new file mode 100644
index 0000000000..b152c8360e
--- /dev/null
+++ b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/rank-2-roots/rank-2-roots.sty b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.sty
new file mode 100644
index 0000000000..d129df7847
--- /dev/null
+++ b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.sty
@@ -0,0 +1,762 @@
+%
+%
+% The Rank 2 Roots package.
+%
+% Version 1.0
+%
+%
+% This package draws root and weight lattices for rank 2 root systems in LaTeX documents,
+% using the TikZ package.
+% Please see the file ranktworoots.tex for examples of use of this package.
+%
+% Benjamin McKay
+% b.mckay@ucc.ie
+%
+% Released under the LaTeX Project Public License v1.3c or later, see
+% http://www.latex-project.org/lppl.txt
+%
+%
+%
+%
+\NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\ProvidesPackage{rank-2-roots}[2018/08/30 Rank 2 roots]
+\RequirePackage{tikz}
+\RequirePackage{xstring}
+\RequirePackage{xparse}
+\RequirePackage{etoolbox}
+\RequirePackage{expl3}
+\RequirePackage{pgfkeys}
+\RequirePackage{pgfopts}
+\usetikzlibrary{
+calc,
+arrows,
+arrows.meta,
+decorations.markings,
+positioning,
+fadings,
+backgrounds,
+decorations.pathreplacing,
+shadings,
+fadings
+}
+
+%% Style options; user can change them.
+\newlength\weightRadius
+\setlength\weightRadius{1.2pt}
+\newlength\weightLength
+\setlength\weightLength{.5cm}
+\newlength\gradingDot
+\setlength\gradingDot{2pt}
+\tikzstyle{weight lattice}=[gray!40]
+\tikzstyle{root}=[gray]
+\tikzstyle{root polygon}=[gray!40,opacity=.5]
+\tikzstyle{hyperplane}=[gray!50,fill opacity=.5]
+\tikzstyle{Weyl chamber}=[gray!60,fill opacity=.5]
+\tikzstyle{grading}=[line width=3pt,gray,opacity=0.5,line cap=round]
+
+\def\defaultWeightLatticeSize{0}
+\newif\ifAutoSizeWeightLattice
+\AutoSizeWeightLatticetrue
+
+\makeatletter
+\def\root@system{?}
+\def\parabolic@subalgebra{?}
+\def\weight@lattice@size{0}
+
+\def\sqrt@three{1.732050808}
+\def\sqrt@threeOverTwo{0.8660254038}
+\def\sqrt@threeOverFour{0.4330127019}
+
+
+% hexagonal coordinate system
+\define@key{hexkeys}{x}{\def\myx{#1}}
+\define@key{hexkeys}{y}{\def\myy{#1}}
+\tikzdeclarecoordinatesystem{hex}%
+{%
+\setkeys{hexkeys}{#1}%
+\ifAutoSizeWeightLattice\auto@stretch@hex{\myx}{\myy}\fi%
+\pgfmathparse{((\myx)+0.5*(\myy))*\weightLength}%
+\pgf@x=\pgfmathresult pt%
+\pgfmathparse{\sqrt@threeOverTwo*(\myy)*\weightLength}%
+\pgf@y=\pgfmathresult pt%
+}
+% square coordinate system
+\define@key{squarekeys}{x}{\def\myx{#1}}
+\define@key{squarekeys}{y}{\def\myy{#1}}
+\tikzdeclarecoordinatesystem{square}%
+{%
+\setkeys{squarekeys}{#1}%
+\ifAutoSizeWeightLattice\auto@stretch@square{\myx}{\myy}\fi%
+\pgfmathparse{\myx*\weightLength}%
+\pgf@x=\pgfmathresult pt%
+\pgfmathparse{\myy*\weightLength}%
+\pgf@y=\pgfmathresult pt%
+}
+
+\NewDocumentEnvironment{rootSystem}{m}%
+{%
+\xdef\weight@lattice@size{\defaultWeightLatticeSize}%
+\IfSubStr{ABCG}{#1}{}{\unrecognized@root@system{#1}}%
+\xdef\root@system{#1}%
+\check@root@system{}%
+\choose@weight@lattice{}%
+}%
+{%
+\IfStrEq{\weight@lattice@size}{0}%%
+{%%
+}%%
+{%%
+\weightLattice{\weight@lattice@size}%
+}%%
+\xdef\root@system{?}%
+\xdef\parabolic@subalgebra{?}%
+\xdef\weight@lattice@size{\defaultWeightLatticeSize}%
+}%
+
+\NewDocumentCommand\unrecognized@root@system{m}%
+{%
+\ClassError{Rank 2 roots}{Unrecognized root system: ``#1''. Allowed values are A,B,C,G}{}%
+}%
+
+\NewDocumentCommand\root@system@not@set{}%
+{%
+\ClassError{Rank 2 roots}{Error: root system not specified.}{}%
+}%
+
+\NewDocumentCommand\check@root@system{}%
+{%
+\IfSubStr{ABCG}{\root@system}{}{\root@system@not@set}%
+}%
+
+\NewDocumentCommand\A@weight@lattice{O{}}%
+{%
+\check@root@system%
+\hexgrid[#1]{\weight@lattice@size}%
+}%
+
+\NewDocumentCommand\G@weight@lattice{O{}}%
+{%
+\check@root@system%
+\hexgrid[#1]{\weight@lattice@size}%
+}%
+
+\NewDocumentCommand\B@weight@lattice{O{}}%
+{%
+\check@root@system%
+\begin{scope}[on background layer]%
+\draw[weight lattice,step=\weightLength,#1]
+ ({-\weight@lattice@size*\weightLength},{-\weight@lattice@size*\weightLength})
+ grid
+ ({\weight@lattice@size*\weightLength},{\weight@lattice@size*\weightLength});%
+\foreach \i in {-\weight@lattice@size,...,\weight@lattice@size}%
+{%
+\draw[weight lattice,#1] ({\weightLength*\i},{\weightLength*\weight@lattice@size})
+ -- ({\weightLength*\weight@lattice@size},{\weightLength*\i});%
+\draw[weight lattice,#1] ({-\weightLength*\weight@lattice@size},{\weightLength*\i})
+ -- ({\weightLength*\i},{-\weightLength*\weight@lattice@size});%
+\draw[weight lattice,#1] ({-\weightLength*\i},{\weightLength*\weight@lattice@size})
+ -- ({-\weightLength*\weight@lattice@size},{\weightLength*\i});%
+\draw[weight lattice,#1] ({\weightLength*\weight@lattice@size},{\weightLength*\i})
+ -- ({-\weightLength*\i},{-\weightLength*\weight@lattice@size});%
+}%
+\end{scope}%
+}%
+
+\NewDocumentCommand\C@weight@lattice{O{}}%
+{%
+\B@weight@lattice[#1]%
+}%
+
+
+\NewDocumentCommand\weightLattice{O{}m}%
+{%
+\check@root@system%
+\xdef\weight@lattice@size{#2}%
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\A@weight@lattice[#1]}%
+{B}{\B@weight@lattice[#1]}%
+{C}{\C@weight@lattice[#1]}%
+{G}{\G@weight@lattice[#1]}%
+{?}{\root@system@not@set}%
+}%%
+[\check@root@system]%
+}%
+
+\NewDocumentCommand\hexwt{O{}mm}%
+{%
+\check@root@system%
+\pgfkeys{/weight, default, #1}%
+\IfStrEq{\weight@multiplicity}{1}{}%
+{%%%
+\foreach \i in {2,...,\weight@multiplicity}%
+{%
+\draw[/weight,weight,#1,fill=none] (hex cs:x=#2,y=#3) circle ({\i*\weightRadius});%
+}%
+}%%%
+\fill[/weight,weight,#1] (hex cs:x=#2,y=#3) circle (\weightRadius);%
+}%
+
+\NewDocumentCommand\squarewt{O{}mm}%
+{%
+\check@root@system%
+\pgfkeys{/weight, default, #1}%
+\IfStrEq{\weight@multiplicity}{1}{}%
+{%%%
+\foreach \i in {2,...,\weight@multiplicity}%
+{%
+\draw[/weight,weight,#1,fill=none] (square cs:x=#2,y=#3) circle ({\i*\weightRadius});%
+}%
+}%%%
+\fill[/weight,weight,#1] (square cs:x=#2,y=#3) circle (\weightRadius);%
+}%
+
+\newif\if@decimals
+
+\NewDocumentCommand\make@weight@lattice@at@least{m}%
+{%
+\pgfmathless{\weight@lattice@size}{#1}%
+\IfStrEq{1}{\pgfmathresult}{\xdef\weight@lattice@size{#1}}{}
+}%
+
+\NewDocumentCommand\auto@stretch@hex{mm}%
+{%
+%% Can we fit this weight? If not, draw a bigger background.
+\@decimalsfalse
+\IfSubStr{#1}{.}{\global\@decimalstrue}{}%
+\IfSubStr{#2}{.}{\global\@decimalstrue}{}%
+\xdef\min@wls{0}
+\if@decimals%
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\pgfmathint{ceil(max(abs(#1),abs(#2),abs(#1+#2)))}\xdef\min@wls{\pgfmathresult}}%
+{B}{\pgfmathint{ceil(max(abs((#1)+(#2)/2),abs(#2)))}\xdef\min@wls{\pgfmathresult}}%
+{C}{\pgfmathint{ceil(max(abs((#1)+(#2)),abs(#2)))}\xdef\min@wls{\pgfmathresult}}%
+{G}{\pgfmathint{ceil(max(abs(#1),abs(#2),abs(#1+#2)))}\xdef\min@wls{\pgfmathresult}}%
+{?}{\root@system@not@set}%
+}%%
+\else
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\pgfmathint{max(abs(#1),abs(#2),abs(#1+#2))}\xdef\min@wls{\pgfmathresult}}%
+{B}{\pgfmathint{max(abs((#1)+(#2)/2),abs(#2))}\xdef\min@wls{\pgfmathresult}}%
+{C}{\pgfmathint{max(abs((#1)+(#2)),abs(#2))}\xdef\min@wls{\pgfmathresult}}%
+{G}{\pgfmathint{max(abs(#1),abs(#2),abs(#1+#2))}\xdef\min@wls{\pgfmathresult}}%
+{?}{\root@system@not@set}%
+}%%
+\fi%
+\make@weight@lattice@at@least{\min@wls}%
+}%
+
+
+\NewDocumentCommand\auto@stretch@square{mm}%
+{%
+%% Can we fit this weight? If not, draw a bigger background.
+\@decimalsfalse
+\IfSubStr{#1}{.}{\global\@decimalstrue}{}%
+\IfSubStr{#2}{.}{\global\@decimalstrue}{}%
+\if@decimals%
+\pgfmathint{ceil(max(abs(#1),abs(#2)))}\xdef\wls{\pgfmathresult}%
+\else
+\pgfmathint{max(abs(#1),abs(#2))}\xdef\wls{\pgfmathresult}%
+\fi
+\pgfmathless{\weight@lattice@size}{\wls}%
+\IfStrEq{1}{\pgfmathresult}%{}%
+{%%
+%\weightLattice{\wls}%
+\xdef\weight@lattice@size{\wls}%
+}%%
+{%%
+}%%
+}%
+
+
+\def\weight@multiplicity{1}
+\pgfkeys{
+/weight/.is family,
+/weight,
+weight/.style = {fill=gray,draw=gray},
+ default/.style = {
+ multiplicity/.estore in = \weight@multiplicity,
+ multiplicity = 1,
+ },
+ .search also={/tikz},
+}
+
+\NewDocumentCommand\wt{O{}mm}%[tikz options,multiplicity=???]{x}{y}
+{%
+\check@root@system%
+\pgfkeys{/weight, default, #1}%
+\IfStrEq{\weight@multiplicity}{1}{}%
+{%%%
+\foreach \i in {2,...,\weight@multiplicity}%
+{%
+\draw[/weight,weight,#1,fill=none] \weight{#2}{#3} circle ({\i*\weightRadius});%
+}%
+}%%%
+\fill[/weight,weight,#1] \weight{#2}{#3} circle (\weightRadius);%
+%}%%
+}%
+
+\NewDocumentCommand\A@roots{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[root polygon]
+(hex cs:x=1,y=1) --
+(hex cs:x=-1,y=2) --
+(hex cs:x=-2,y=1) --
+(hex cs:x=-1,y=-1) --
+(hex cs:x=1,y=-2) --
+(hex cs:x=2,y=-1) --
+cycle;%
+\end{scope}%
+\wt[root,#1]{1}{1}%
+\wt[root,#1]{-1}{2}%
+\wt[root,#1]{-2}{1}%
+\wt[root,#1]{-1}{-1}%
+\wt[root,#1]{1}{-2}%
+\wt[root,#1]{2}{-1}%
+}%
+
+\NewDocumentCommand\B@roots{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[root polygon]
+(square cs:x=-1,y=-1) --
+(square cs:x=-1,y=1) --
+(square cs:x=1,y=1) --
+(square cs:x=1,y=-1) --
+cycle;%
+\end{scope}
+\foreach \i in {-1,0,1}%
+{%
+\foreach \j in {-1,0,1}%
+{%%
+\IfStrEq{\i}{0}%
+{%%%
+\IfStrEq{\j}{0}{}%
+{%%%%
+\squarewt[root,#1]{\i}{\j}%
+}%%%%
+}%%%
+{%%%
+\squarewt[root,#1]{\i}{\j}%
+}%%%
+}%%
+}%
+}%
+
+\NewDocumentCommand\C@roots{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[root polygon]
+(square cs:x=2,y=0) --
+(square cs:x=0,y=2) --
+(square cs:x=-2,y=0) --
+(square cs:x=0,y=-2) --
+cycle;%
+\end{scope}
+\squarewt[root,#1]{2}{0}
+\squarewt[root,#1]{1}{1}
+\squarewt[root,#1]{0}{2}
+\squarewt[root,#1]{-1}{1}
+\squarewt[root,#1]{-2}{0}
+\squarewt[root,#1]{-1}{-1}
+\squarewt[root,#1]{0}{-2}
+\squarewt[root,#1]{1}{-1}
+}%
+
+\NewDocumentCommand\G@roots{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[root polygon]
+(hex cs:x=1,y=0) --
+(hex cs:x=1,y=1) --
+(hex cs:x=0,y=1) --
+(hex cs:x=-1,y=2) --
+(hex cs:x=-1,y=1) --
+(hex cs:x=-2,y=1) --
+(hex cs:x=-1,y=0) --
+(hex cs:x=-1,y=-1) --
+(hex cs:x=0,y=-1) --
+(hex cs:x=1,y=-2) --
+(hex cs:x=1,y=-1) --
+(hex cs:x=2,y=-1) --
+cycle;%
+\end{scope}%
+\hexwt[root,#1]{1}{0}%
+\hexwt[root,#1]{0}{1}%
+\hexwt[root,#1]{-1}{0}%
+\hexwt[root,#1]{0}{-1}%
+\hexwt[root,#1]{1}{-1}%
+\hexwt[root,#1]{-1}{1}%
+\hexwt[root,#1]{1}{1}%
+\hexwt[root,#1]{2}{-1}%
+\hexwt[root,#1]{-1}{2}%
+\hexwt[root,#1]{1}{-2}%
+\hexwt[root,#1]{-2}{1}%
+\hexwt[root,#1]{-1}{-1}%
+}%
+
+\NewDocumentCommand\choose@weight@lattice{}%
+{%
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\global\let\weight=\A@weight}%
+{B}{\global\let\weight=\B@weight}%
+{C}{\global\let\weight=\C@weight}%
+{G}{\global\let\weight=\G@weight}%
+}%%
+[\check@root@system]%
+}%
+
+\NewDocumentCommand\check@weight@lattice{}%
+{%
+\IfInteger{\weight@lattice@size}%
+{}%
+{\ClassError{Rank 2 roots}{Error in weight lattice size \weight@lattice@size.}{}}%
+}%
+
+\NewDocumentCommand\roots{O{}}%
+{%
+\check@root@system%
+\check@weight@lattice%
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\A@roots[#1]}%
+{B}{\B@roots[#1]}%
+{C}{\C@roots[#1]}%
+{G}{\G@roots[#1]}%
+}%%
+[\check@root@system]%
+}%
+
+\NewDocumentCommand\Weyl@chamber{O{}m}%
+{%
+\begin{scope}[on background layer]
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\fill[Weyl chamber,#1] \weight{0}{#2} -- \weight{0}{0} -- \weight{#2}{0} --cycle;}%
+{B}{\fill[Weyl chamber,#1] (square cs:x=#2,y=#2) -- (square cs:x=0,y=0) --(square cs:x=#2,y=0) --cycle;}%
+{C}{\fill[Weyl chamber,#1] (square cs:x=#2,y=#2) -- (square cs:x=0,y=0) --(square cs:x=#2,y=0) --cycle;}%
+{G}{\fill[Weyl chamber,#1] (hex cs:x={(.5*#2)},y={(.5*#2)}) -- (hex cs:x=0,y=0) --(hex cs:x=#2,y=0) --cycle;}%
+}%%
+[\check@root@system]%
+\end{scope}
+}%
+
+\NewDocumentCommand\Weyl@chamber@to@root@polygon{O{}}%
+{%
+\begin{scope}[on background layer]
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\fill[Weyl chamber,#1] (hex cs:x=0,y=1.5) -- (hex cs:x=0,y=0) -- (hex cs:x=1.5,y=0) -- (hex cs:x=1,y=1) -- cycle;}%
+{B}{\fill[Weyl chamber,#1] (square cs:x=1,y=1) -- (square cs:x=0,y=0) --(square cs:x=1,y=0) --cycle;}%
+{C}{\fill[Weyl chamber,#1] (square cs:x=1,y=1) -- (square cs:x=0,y=0) --(square cs:x=2,y=0) --cycle;}%
+{G}{\fill[Weyl chamber,#1] (hex cs:x=1,y=1) -- (hex cs:x=0,y=0) --(hex cs:x=1,y=0) --cycle;}%
+}%%
+[\check@root@system]%
+\end{scope}
+}%
+
+
+\NewDocumentCommand\WeylChamber{O{}}%
+{%
+\check@root@system%
+\ifAutoSizeWeightLattice
+\Weyl@chamber[#1]{\weight@lattice@size}%
+\else
+\IfStrEq{\weight@lattice@size}{0}%
+{%%
+\Weyl@chamber@to@root@polygon[#1]%
+}%%
+{%%
+\Weyl@chamber[#1]{\weight@lattice@size}%
+}%%
+\fi
+}%
+
+\NewDocumentCommand\A@weight{mm}%
+{%
+(hex cs:x=#1,y=#2)%
+}%
+
+% B weight coordinate system
+\define@key{Bkeys}{x}{\def\myx{#1}}
+\define@key{Bkeys}{y}{\def\myy{#1}}
+\tikzdeclarecoordinatesystem{B weight}%
+{%
+\setkeys{Bkeys}{#1}%
+\ifAutoSizeWeightLattice\auto@stretch@square{(\myx+.5*(\myy))}{(.5*(\myy))}\fi%
+\pgfmathparse{((\myx)+.5*(\myy))*\weightLength}%
+\pgf@x=\pgfmathresult pt%
+\pgfmathparse{.5*(\myy)*\weightLength}%
+\pgf@y=\pgfmathresult pt%
+}
+
+\NewDocumentCommand\B@weight{mm}%
+{%
+(B weight cs:x=#1,y=#2)
+}%
+
+% C weight coordinate system
+\define@key{Ckeys}{x}{\def\myx{#1}}
+\define@key{Ckeys}{y}{\def\myy{#1}}
+\tikzdeclarecoordinatesystem{C weight}%
+{%
+\setkeys{Ckeys}{#1}%
+\ifAutoSizeWeightLattice\auto@stretch@square{(\myx+\myy)}{(\myy)}\fi%
+\pgfmathparse{(\myx+\myy)*\weightLength}%
+\pgf@x=\pgfmathresult pt%
+\pgfmathparse{\myy*\weightLength}%
+\pgf@y=\pgfmathresult pt%
+}
+
+\NewDocumentCommand\C@weight{mm}%
+{%
+(C weight cs:x=#1,y=#2)
+}%
+
+
+\NewDocumentCommand\G@weight{mm}%
+{%
+(hex cs:x={(#1+#2)},y=#2)
+}%
+
+\NewDocumentCommand\draw@hex@grid@line{O{}mmmm}%
+{%
+\draw[weight lattice,#1] (hex cs:x=#2,y=#3) -- (hex cs:x=#4,y=#5);%
+}%
+
+\NewDocumentCommand\hexgrid{O{}m}%
+{%
+\begin{scope}[on background layer]
+\foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}%
+{%
+\draw@hex@grid@line[#1]{\nsubi}{\i}{-\i-\nsubi}{\i}%
+}%
+\foreach \i [evaluate=\i as \nsubi using #2-\i] in {1,...,#2}%
+{%
+\draw@hex@grid@line[#1]{\i+\nsubi}{-\i}{-\nsubi}{-\i}%
+}%
+\foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}%
+{%
+\draw@hex@grid@line[#1]{\nsubi}{\i}{\nsubi}{-#2}%
+}%
+\foreach \i [evaluate=\i as \nsubi using #2-\i] in {1,...,#2}%
+{%
+\draw@hex@grid@line[#1]{-\i}{#2}{-\i}{-\nsubi}%
+}%
+\foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}%
+{%
+\draw@hex@grid@line[#1]{#2}{-\i}{-\i}{#2}%
+}%
+\foreach \i [evaluate=\i as \nsubi using #2-\i] in {0,...,#2}%
+{%
+\draw@hex@grid@line[#1]{\i}{-#2}{-#2}{\i}%
+}%
+\end{scope}
+}%
+
+\NewDocumentCommand\hexclip{}%
+{%
+\clip
+ (hex cs:x=\weight@lattice@size,y=0) --
+ (hex cs:x=0,y=\weight@lattice@size) --
+ (hex cs:x=-\weight@lattice@size,y=\weight@lattice@size) --
+ (hex cs:x=-\weight@lattice@size,y=0) --
+ (hex cs:x=0,y=-\weight@lattice@size) --
+ (hex cs:x=\weight@lattice@size,y=-\weight@lattice@size) --
+ cycle;
+}%
+
+\NewDocumentCommand\A@positive@root@hyperplane{O{}}%
+{%
+\begin{scope}[on background layer]
+\fill[hyperplane,#1] (hex cs:x=-1.5,y=1.5) --(hex cs:x=-1,y=2) --(hex cs:x=1,y=1) --(hex cs:x=2,y=-1) --(hex cs:x=1.5,y=-1.5) --cycle;%
+\end{scope}
+}%
+
+
+\NewDocumentCommand\B@positive@root@hyperplane{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (square cs:x=-1,y=.5) -- (square cs:x=-1,y=1) -- (square cs:x=1,y=1) -- (square cs:x=1,y=-.5) -- cycle;%
+\end{scope}%
+}%
+
+
+\NewDocumentCommand\C@positive@root@hyperplane{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (square cs:x=-1.5,y=.5) -- (square cs:x=0,y=2) -- (square cs:x=2,y=0) -- (square cs:x=1.5,y=-.5) -- cycle;%
+\end{scope}%
+}%
+
+
+\NewDocumentCommand\G@positive@root@hyperplane{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1]
+ (hex cs:x=-1,y=1.5) --
+ (hex cs:x=-1,y=2) --
+ (hex cs:x=0,y=1) --
+ (hex cs:x=1,y=1) --
+ (hex cs:x=1,y=0) --
+ (hex cs:x=2,y=-1) --
+ (hex cs:x=1,y=-1) --
+ (hex cs:x=1,y=-1.5) -- cycle;%
+\end{scope}%
+}%
+
+\NewDocumentCommand\positiveRootHyperplane{O{}}%
+{%
+\IfStrEqCase{\root@system}%
+{%%
+{A}{\A@positive@root@hyperplane[#1]}%
+{B}{\B@positive@root@hyperplane[#1]}%
+{C}{\C@positive@root@hyperplane[#1]}%
+{G}{\G@positive@root@hyperplane[#1]}%
+}%%
+[\check@root@system]%
+}%
+
+\NewDocumentCommand\A@parabolic@one{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (hex cs:x=-2,y=1) -- (hex cs:x=-1,y=2) -- (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1) -- cycle;%
+\end{scope}%
+}%
+
+\NewDocumentCommand\A@parabolic@two{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (hex cs:x=-1,y=2) -- (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1) -- (hex cs:x=1,y=-2) -- cycle;%
+\end{scope}%
+}%
+
+\NewDocumentCommand\B@parabolic@one{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (square cs:x=-1,y=0) --(square cs:x=-1,y=1) --(square cs:x=1,y=1) --(square cs:x=1,y=0) --cycle;%
+\end{scope}%
+}%
+
+\NewDocumentCommand\B@parabolic@two{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (square cs:x=-1,y=1) --(square cs:x=1,y=-1) --(square cs:x=1,y=1) --cycle;%
+\end{scope}%
+}%
+
+
+\NewDocumentCommand\C@parabolic@one{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (square cs:x=-2,y=0) -- (square cs:x=0,y=2) -- (square cs:x=2,y=0) -- cycle;%
+\end{scope}%
+}%
+
+
+\NewDocumentCommand\C@parabolic@two{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (square cs:x=-1,y=1) -- (square cs:x=0,y=2) -- (square cs:x=2,y=0) -- (square cs:x=1,y=-1) -- cycle;%
+\end{scope}%
+}%
+
+
+\NewDocumentCommand\G@parabolic@one{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (hex cs:x=-1,y=1) -- (hex cs:x=-1,y=2) -- (hex cs:x=0,y=1) -- (hex cs:x=1,y=1) -- (hex cs:x=1,y=0) -- (hex cs:x=2,y=-1) -- (hex cs:x=1,y=-1) -- cycle;%
+\end{scope}%
+}%
+
+
+\NewDocumentCommand\G@parabolic@two{O{}}%
+{%
+\begin{scope}[on background layer]%
+\fill[hyperplane,#1] (hex cs:x=-1,y=2) --(hex cs:x=0,y=1) --(hex cs:x=1,y=1) --(hex cs:x=1,y=0) --(hex cs:x=2,y=-1) --(hex cs:x=1,y=-1) --(hex cs:x=1,y=-2) --cycle;%
+\end{scope}%
+}%
+
+\NewDocumentCommand\parabolic{O{}m}%
+{%
+\xdef\parabolic@subalgebra{#2}%
+\IfStrEq{#2}{3}{\positiveRootHyperplane}%
+{%
+\IfStrEqCase{\root@system#2}%
+{%%
+{A1}{\A@parabolic@one[#1]}%
+{A2}{\A@parabolic@two[#1]}%
+{B1}{\B@parabolic@one[#1]}%
+{B2}{\B@parabolic@two[#1]}%
+{C1}{\C@parabolic@one[#1]}%
+{C2}{\C@parabolic@two[#1]}%
+{G1}{\G@parabolic@one[#1]}%
+{G2}{\G@parabolic@two[#1]}%
+}%%
+[\check@root@system%
+\ClassError{Rank 2 roots}{Parabolic subalgebra ``#2'' not recognized. Allowed values are 1,2,3.}{}]%
+}%
+}%
+
+\NewDocumentCommand\parabolicgrading{}%
+{%
+\IfStrEqCase{\root@system\parabolic@subalgebra}%
+{%%
+{A1}{\draw[grading] (hex cs:x=-1,y=2) -- (hex cs:x=1,y=1);}%
+{A2}{\draw[grading] (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1);}%
+{A3}{\draw[grading] (hex cs:x=-1,y=2) -- (hex cs:x=2,y=-1);\draw[grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=0);}%
+{B1}{\draw[grading] (square cs:x=-1,y=1) -- (square cs:x=1,y=1);}%
+{B2}{\draw[grading] (square cs:x=0,y=1) -- (square cs:x=1,y=0);\draw[grading] (square cs:x=1,y=1) circle (\gradingDot);}%
+{B3}{\draw[grading] (square cs:x=-1,y=1) -- (square cs:x=1,y=0);%
+\draw[grading] (square cs:x=0,y=1) -- (square cs:x=1,y=.5);%
+\draw[grading] (square cs:x=1,y=1) circle (\gradingDot);}%
+{C1}{\draw[grading] (square cs:x=-2,y=1) -- (square cs:x=2,y=1);%
+\draw[grading] (square cs:x=-2,y=2) -- (square cs:x=2,y=2);}%
+{C2}{\draw[grading] (square cs:x=0,y=2) -- (square cs:x=2,y=0);}%
+{C3}{
+\begin{scope}
+\clip
+ (square cs:x=-2,y=2) --
+ (square cs:x=2,y=2) --
+ (square cs:x=2,y=-2) --
+ (square cs:x=-2,y=-2) --
+ cycle;
+\draw[grading] (square cs:x=0,y=2) -- (square cs:x=2,y=1.333333);
+\draw[grading] (square cs:x=-2,y=1.3333333) -- (square cs:x=2,y=0);
+\draw[grading] (square cs:x=-2,y=2) -- (square cs:x=2,y=.666666);
+\end{scope}
+}%
+{G1}{\draw[grading] (hex cs:x=-1,y=2) -- (hex cs:x=2,y=-1);\draw[grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=0);}%
+{G2}{\begin{scope}[on background layer]
+\IfStrEq{\weight@lattice@size}{0}%
+{%
+\draw[grading] (square cs:x=1.5,y=\sqrt@three) -- (square cs:x=1.5,y=-\sqrt@three);
+\draw[grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=-2);
+\draw[grading] (hex cs:x=-.5,y=2) -- (hex cs:x=1.5,y=-2);
+}%
+{%
+\hexclip
+\draw[grading] (hex cs:x=1,y=1) -- (hex cs:x=2,y=-1);
+\draw[grading] (hex cs:x=0,y=2) -- (hex cs:x=2,y=-2);
+\draw[grading] (hex cs:x=-.5,y=2) -- (hex cs:x=1.5,y=-2);
+}%
+\end{scope}}%
+{G3}{\begin{scope}[on background layer]
+\IfStrEq{\weight@lattice@size}{0}{}{\hexclip}%
+\foreach \i in {1,...,5}%
+{%
+\draw[grading]
+ (square cs:x={.333333333*(\i-1)},y=\sqrt@three) --
+ (square cs:x={.333333333*(\i+1)},y=-\sqrt@three);
+}%
+\end{scope}}%
+}%%
+}%
+
+
+\makeatother
+\endinput
diff --git a/graphics/pgf/contrib/rank-2-roots/rank-2-roots.tex b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.tex
new file mode 100644
index 0000000000..742682aece
--- /dev/null
+++ b/graphics/pgf/contrib/rank-2-roots/rank-2-roots.tex
@@ -0,0 +1,1243 @@
+\documentclass{amsart}
+\usepackage{etex}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenx}
+
+\title{The Rank 2 Roots Package \\ Version 1.0}
+\author{Ben McKay}
+\date{30 August 2018}
+
+\usepackage{etoolbox}
+\usepackage{lmodern}
+\usepackage[kerning=true,tracking=true]{microtype}
+\usepackage{amsmath}
+\usepackage{amsfonts}
+\usepackage{array}
+\usepackage{xparse}
+\usepackage{xstring}
+\usepackage{longtable}
+\usepackage{rank-2-roots}
+\usepackage{tikz}
+\usepackage[listings]{tcolorbox}
+\tcbuselibrary{breakable}
+\tcbuselibrary{skins}
+\definecolor{example-color}{gray}{.85}
+\definecolor{example-border-color}{gray}{.7}
+\tcbset{coltitle=black,colback=white,colframe=example-border-color,enhanced,breakable,pad at break*=1mm,
+toprule=1.2mm,bottomrule=1.2mm,leftrule=1mm,rightrule=1mm,toprule at break=-1mm,bottomrule at break=-1mm,
+before upper={\widowpenalties=3 10000 10000 150}}
+\usepackage[pdftex]{hyperref}
+\hypersetup{
+ colorlinks = true, %Colours links instead of ugly boxes
+ urlcolor = black, %Colour for external hyperlinks
+ linkcolor = black, %Colour of internal links
+ citecolor = black %Colour of citations
+}
+\usepackage{booktabs}
+\usepackage{colortbl}
+\usepackage{varwidth}
+\usepackage{dynkin-diagrams}
+\usepackage{fancyvrb}
+\usepackage{xspace}
+\newcommand{\TikZ}{Ti\textit{k}Z\xspace}
+\usepackage{filecontents}
+\usetikzlibrary{decorations.markings}
+\usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit}
+\arrayrulecolor{white}
+\makeatletter
+ \def\rulecolor#1#{\CT@arc{#1}}
+ \def\CT@arc#1#2{%
+ \ifdim\baselineskip=\z@\noalign\fi
+ {\gdef\CT@arc@{\color#1{#2}}}}
+ \let\CT@arc@\relax
+\rulecolor{white}
+\makeatother
+
+
+
+
+
+\NewDocumentCommand\todo{m}%
+{%
+\textcolor{blue}{\textit{#1}}
+}%
+
+\begin{document}
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+This package concerns mathematical drawings arising in representation theory.
+The purpose of this package is to ease drawing of rank 2 root systems, with Weyl chambers, weight lattices, and parabolic subgroups, mostly imitating the drawings of Fulton and Harris \cite{Fulton.Harris:1991}.
+We use definitions of root systems and weight lattices as in Carter \cite{Carter:2005} p. 540--609.
+
+
+\section{Root systems}
+\NewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\NewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\newcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{The root systems}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+\section{Weights}
+Type \verb!\wt{x}{y}! to get a weight at position \((x,y)\) (as measured in a basis of \emph{fundamental weights}).
+Type \verb!\wt[multiplicity=n]{x}{y}! to get multiplicity \(m\).
+Add an option: \verb!\wt[Z]{x}{y}{m}! to get \verb!Z! passed to TikZ.
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\wt[brown]{1}{0}
+\wt[red]{0}{1}
+\wt[multiplicity=4,blue]{1}{3}
+\wt[blue,multiplicity=2]{2}{2}
+\wt[blue]{-1}{3}
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\wt[brown]{1}{0}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[red]{0}{1}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[multiplicity=4,blue]{1}{3}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[blue,multiplicity=2]{2}{2}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[blue]{-1}{3}}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Some weights drawn with multiplicities}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\wt[multiplicity=2,root]{0}{0}
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\wt[multiplicity=2,root]{0}{0}}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{The root systems with all multiplicities of the adjoint representation, like Fulton and Harris}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\WeylChamber
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\WeylChamber}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Weyl chambers}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\section{Parabolic subgroups}
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\positiveRootHyperplane
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\positiveRootHyperplane}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{The positive root hyperplane}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{mm}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\parabolic{#2}
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{mm}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\parabolic}\{#2\}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \foreach \j in {1,2,3}{
+ \xappto\mytablecontents{$\i_{2,\j}$ & \drawroots{\i}{\j} & \csdrawroots{\i}{\j}
+ }
+ \gappto\mytablecontents{\\ \\}
+}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Parabolic subgroups. Each set of roots is assigned a number, with each binary digit zero or one to say whether the corresponding root is crossed or not: \(A_{5,37}\) means the parabolic subgroup of \(A_5\) so that the binary digits of \(37=2^5+2^2+2^0\) give us roots \(0,2,5\) in Bourbaki ordering being compact roots, i.e. having the root vectors of both that root and its negative inside the parabolic subgroup. }\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{mm}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\parabolic{#2}
+\parabolicgrading
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{mm}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\parabolic}\{#2\}}%
+\par\noindent%
+\texttt{\detokenize{\parabolicgrading}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \foreach \j in {1,2,3}{
+ \xappto\mytablecontents{$\i_{2,\j}$ & \drawroots{\i}{\j} & \csdrawroots{\i}{\j}
+ }
+ \gappto\mytablecontents{\\ \\}
+}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Parabolic subgroups with grading of the positive roots}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+\NewDocumentCommand{\labelWt}{mmmm}%
+{%
+\node[#1,black] at \weight{#2}{#3} {\(#4\)};
+}%
+
+
+{
+\NewDocumentCommand\labelRoots{}%
+{%
+\labelWt{above right}{0}{0}{0}%
+\labelWt{right}{1}{1}{e_1-e_3}%
+\labelWt{right}{2}{-1}{e_1-e_2}%
+\labelWt{below}{1}{-2}{e_3-e_2}%
+\labelWt{left}{-1}{-1}{e_3-e_1}%
+\labelWt{left}{-2}{1}{e_2-e_1}%
+\labelWt{above}{-1}{2}{e_2-e_3}%
+}%
+\setlength{\weightLength}{1cm}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\roots
+\wt{0}{0}
+\labelRoots
+\end{rootSystem}
+\end{tikzpicture}
+}
+
+
+\tikzstyle{weight arrow}=[black,-stealth,shorten <=.25cm,shorten >=.25cm]
+
+{
+\NewDocumentCommand\wa{O{}mm}%
+{%
+\IfStrEq{#1}{0}%
+{%
+\draw[weight arrow] \weight{#2}{#3} -- \weight{#2+1}{#3+1} node[right=-4pt]{\(0\)};%
+}%
+{%
+\draw[weight arrow] \weight{#2}{#3} -- \weight{#2+1}{#3+1};%
+}%
+}%
+\setlength{\weightLength}{.75cm}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\setlength{\weightRadius}{1.5pt}
+\roots
+\wt{0}{0}
+\labelWt{above left}{0}{0}{0}
+\labelWt{right}{1}{1}{e_1-e_3}
+\labelWt{right}{2}{-1}{e_1-e_2}
+\labelWt{below}{1}{-2}{e_3-e_2}
+\labelWt{left}{-1}{-1}{e_3-e_1}
+\labelWt{left}{-2}{1}{e_2-e_1}
+\labelWt{above left}{-1}{2}{e_2-e_3}
+\wa{0}{0}
+\wa[0]{1}{1}
+\wa[0]{2}{-1}
+\wa[0]{-1}{2}
+\wa{1}{-2}
+\wa{-1}{-1}
+\wa{-2}{1}
+\end{rootSystem}
+\end{tikzpicture}
+}
+
+
+
+\begin{tcblisting}{title={Drawing the \(A_2\) root system and a weight at the origin. The option \texttt{root} indicates that this weight is to be coloured like a root.}}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\roots
+\wt[root]{0}{0}
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title={Drawing the \(A_2\) root system and a weight at the origin and the positive root hyperplane}}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\roots
+\wt[root]{0}{0}
+\positiveRootHyperplane
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+
+
+\section{Coordinate systems}
+
+The package provides three coordinate systems: hex, square and weight.
+Above we have seen the weight coordinates: a basis of fundamental weights.
+We can also use weight coordinates like
+\[
+\verb!\draw \weight{0}{1} -- \weight{1}{0};!
+\]
+The square system, used like \verb!\draw (square cs:x=1,y=2) circle (2pt);!, is simply the standard Cartesian coordinate system measured so that the minimum distance between weights is one unit.
+The hex coordinate system has basis precisely the fundamental weights of the \(A_2\) lattice.
+We can use the hex system in drawing on the \(A_2\) or \(G_2\) weight lattices, as below, as they are the same lattices.
+
+\begin{tcblisting}{title={Automatic sizing of the weight lattice (the default) \dots}}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\wt{0}{0}
+\fill[gray!50,opacity=.2] (hex cs:x=5,y=-7) -- (hex cs:x=1,y=1) -- (hex cs:x=-7,y=5) arc (150:270:{7*\weightLength});
+\draw[black,very thick] (hex cs:x=5,y=-7) -- (hex cs:x=1,y=1) -- (hex cs:x=-7,y=5);
+\node[above right=-2pt] at (hex cs:x=1,y=1) {\small\(\alpha\)};
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={\dots and here with manual sizing, setting the weight lattice to include 3 steps to the right of the origin}}
+\begin{tikzpicture}
+\AutoSizeWeightLatticefalse
+\begin{rootSystem}{A}
+\wt{0}{0}
+\weightLattice{3}
+\fill[gray!50,opacity=.2] (hex cs:x=5,y=-7) -- (hex cs:x=1,y=1) -- (hex cs:x=-7,y=5) arc (150:270:{7*\weightLength});
+\draw[black,very thick] (hex cs:x=5,y=-7) -- (hex cs:x=1,y=1) -- (hex cs:x=-7,y=5);
+\node[above right=-2pt] at (hex cs:x=1,y=1) {\small\(\alpha\)};
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Fulton and Harris p. 170}}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\draw \weight{3}{1} -- \weight{-4}{4.5};
+\foreach \i in {1,...,4}{\wt{5-2*\i}{\i}}
+\node[above right=-2pt] at (hex cs:x=3,y=1){\small\(\alpha\)};
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+
+
+
+\begin{tcblisting}{title={Automatic sizing of the weight lattice (the default) \dots}}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\setlength{\weightRadius}{2pt}
+\draw \weight{3}{1} -- \weight{-3}{4};
+\draw \weight{3}{1} -- \weight{4}{-1};
+\wt{4}{-1}
+\foreach \i in {1,...,4}{\wt{5-2*\i}{\i}}
+\node[above right=-2pt] at (hex cs:x=3,y=1){\small\(\alpha\)};
+\draw[very thick] \weight{0}{-4} -- \weight{0}{4.5} node[above]{\small\(\left<H_{12},L\right>=0\)};
+\draw[very thick] \weight{-4}{0} -- \weight{4.5}{0} node[right]{\small\(\left<H_{23},L\right>=0\)};
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title={\dots and manual sizing}}
+\begin{tikzpicture}
+\AutoSizeWeightLatticefalse
+\begin{rootSystem}{A}
+\setlength{\weightRadius}{2pt}
+\weightLattice{4}
+\draw \weight{3}{1} -- \weight{-3}{4};
+\draw \weight{3}{1} -- \weight{4}{-1};
+\wt{4}{-1}
+\foreach \i in {1,...,4}{\wt{5-2*\i}{\i}}
+\node[above right=-2pt] at (hex cs:x=3,y=1){\small\(\alpha\)};
+\draw[very thick] \weight{0}{-4} -- \weight{0}{4.5} node[above]{\small\(\left<H_{12},L\right>=0\)};
+\draw[very thick] \weight{-4}{0} -- \weight{4.5}{0} node[right]{\small\(\left<H_{23},L\right>=0\)};
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\begin{tikzpicture}
+\AutoSizeWeightLatticefalse
+\begin{rootSystem}{A}
+\setlength{\weightRadius}{2pt}
+\weightLattice{4}
+\draw \weight{3}{1} -- \weight{-3}{4};
+\draw \weight{3}{1} -- \weight{4}{-1};
+\draw \weight{-3}{4} -- \weight{-4}{3};
+\wt{4}{-1}
+\wt{-4}{3}
+\foreach \i in {1,...,4}{\wt{5-2*\i}{\i}}
+\node[above right=-2pt] at (hex cs:x=3,y=1){\small\(\alpha\)};
+\draw[very thick] \weight{0}{-4} -- \weight{0}{4.5} node[above]{\small\(\left<H_{12},L\right>=0\)};
+\draw[very thick] \weight{-4}{0} -- \weight{4.5}{0} node[right]{\small\(\left<H_{23},L\right>=0\)};
+\draw[very thick] \weight{4}{-4} -- \weight{-4.5}{4.5} node[above]{\small\(\left<H_{13},L\right>=0\)};
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\begin{tcblisting}{}
+\setlength{\weightRadius}{2pt}
+\setlength\weightLength{.75cm}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\foreach \x/\y in {1/0, -1/1, 0/-1, -2/0, 0/2, 2/-2}{\wt{\x}{\y}}
+\node[above] at \weight{1}{0} {\small\(L_1\)};
+\node[above] at \weight{-1}{1} {\small\(L_2\)};
+\node[above] at \weight{0}{-1} {\small\(L_3\)};
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Changing the weight length rescales}}
+\begin{tikzpicture}
+\setlength\weightLength{.3cm}
+\begin{rootSystem}{A}
+\wt[multiplicity=2]{0}{0}
+\foreach \x/\y in {1/1, 2/-1, 1/-2, -1/-1, -2/1, -1/2}{\wt{\x}{\y}}
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\begin{tikzpicture}
+\setlength\weightLength{.3cm}
+\begin{rootSystem}{A}
+\foreach \x/\y in {0/0, 3/0, 2/-1, 1/-2, 0/-3, 1/1, -1/-1, -1/2, -2/1, -3/3}{\wt{\x}{\y}}
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\begin{tikzpicture}
+\setlength\weightLength{.3cm}
+\begin{rootSystem}{A}
+\foreach \x/\y in {0/0, -3/0, 2/-1, 1/-2, 3/-3, 1/1, -1/-1, -1/2, -2/1, 0/3}{\wt{\x}{\y}}
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={We use a basis of fundamental weights, as given in Carter's book \cite{Carter:2005} p. 540--609}}
+\begin{tikzpicture}
+\begin{rootSystem}{B}
+\roots
+\draw[green!50!black,very thick] \weight{0}{1} -- \weight{1}{0};
+\weightLattice{3}
+\wt[blue]{1}{0}{1}
+\wt[red]{0}{1}{1}
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+
+
+
+
+Without automatic stretching of the weight lattice to fit the picture, you won't see the weight lattice at all unless you ask for it.
+
+\AutoSizeWeightLatticefalse
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{The root systems}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+Type \verb!\wt{x}{y}{m}! to get a weight at position \((x,y)\) (as measured in a basis of \emph{fundamental weights}) with multiplicity \(m\).
+Add an option: \verb!\wt[Z]{x}{y}{m}! to get \verb!Z! passed to TikZ.
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\wt[brown]{1}{0}{1}
+\wt[red]{0}{1}{1}
+\wt[blue]{1}{3}{4}
+\wt[blue]{2}{2}{2}
+\wt[blue]{-1}{3}{1}
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\wt[brown]{1}{0}{1}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[red]{0}{1}{1}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[blue]{1}{3}{4}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[blue]{2}{2}{2}}}%
+\par\noindent%
+\texttt{\detokenize{\wt[blue]{-1}{3}{1}}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Some weights drawn with multiplicities}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\wt[multiplicity=2]{0}{0}
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\wt[multiplicity=2]{0}{0}}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{The root systems with all multiplicities of the adjoint representation, like Fulton and Harris}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\WeylChamber
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\WeylChamber}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Weyl chambers}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{m}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\positiveRootHyperplane
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{m}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\positiveRootHyperplane}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \xappto\mytablecontents{$\i_2$ & \drawroots{\i} & \csdrawroots{\i}
+}
+ \gappto\mytablecontents{\\ \\}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{The positive root hyperplane}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{mm}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\parabolic{#2}
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{mm}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\parabolic}\{#2\}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \foreach \j in {1,2,3}{
+ \xappto\mytablecontents{$\i_{2,\j}$ & \drawroots{\i}{\j} & \csdrawroots{\i}{\j}
+ }
+ \gappto\mytablecontents{\\ \\}
+}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Parabolic subgroups}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\RenewDocumentCommand\drawroots{mm}%
+{%
+\begin{tikzpicture}[baseline=-.5]
+\begin{rootSystem}{#1}
+\roots
+\parabolic{#2}
+\parabolicgrading
+\end{rootSystem}
+\end{tikzpicture}
+}%
+
+\RenewDocumentCommand\csdrawroots{mm}%
+{%
+\texttt{\detokenize{\begin{tikzpicture}[baseline=-.5]}}%
+\par\noindent%
+\texttt{\detokenize{\begin{rootSystem}}\{#1\}}%
+\par\noindent%
+\texttt{\detokenize{\roots}}%
+\par\noindent%
+\texttt{\detokenize{\parabolic}\{#2\}}%
+\par\noindent%
+\texttt{\detokenize{\parabolicgrading}}%
+\par\noindent%
+\texttt{\detokenize{\end{rootSystem}}}%
+\par\noindent%
+\texttt{\detokenize{\end{tikzpicture}}}%
+}%
+
+\renewcommand*\mytablecontents{}
+\foreach \i in {A,B,C,G}{
+ \foreach \j in {1,2,3}{
+ \xappto\mytablecontents{$\i_{2,\j}$ & \drawroots{\i}{\j} & \csdrawroots{\i}{\j}
+ }
+ \gappto\mytablecontents{\\ \\}
+}
+}
+
+\begin{longtable}{rcm{8cm}}
+\caption{Parabolic subgroups with grading of the positive roots}\\
+\endfirsthead
+\caption{\dots continued}\\
+\endhead
+\multicolumn{3}{c}{continued \dots}\\
+\endfoot
+\endlastfoot
+\mytablecontents
+\end{longtable}
+
+
+
+
+
+\section{Examples of weights of various representations}
+
+Henceforth assume \verb!\AutoSizeWeightLatticetrue! (the default).
+
+\AutoSizeWeightLatticetrue
+
+
+\begin{tcblisting}{title={Fulton and Harris, p. 186}}
+\begin{tikzpicture}
+\begin{rootSystem}{A}
+\foreach \x/\y/\m in
+{0/ 1/5, -1/0/5, 1/-1/5, 2/ 0/4, -2/ 2/4, 0/-2/4,
+ 1/ 2/2, -1/3/2, 3/-2/2, 2/-3/2, -2/-1/2, -3/ 1/2,
+ 4/-1/1, 3/1/1, -3/ 4/1, -4/ 3/1, -1/-3/1, 1/-4/1}
+{\wt[multiplicity=\m]{\x}{\y}}
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title={A representation of \(G_2\)}}
+\setlength\weightLength{1cm}
+\begin{tikzpicture}
+\begin{rootSystem}{G}
+\roots
+\foreach \m/\x/\y in {
+1/1/1, 1/4/-1, 1/-1/2, 2/2/0, 1/5/-2,
+2/0/1, 2/3/-1, 2/-2/2, 4/1/0, 1/-4/3,
+2/4/-2, 4/-1/1, 4/2/-1, 2/-3/2, 1/5/-3,
+4/0/0, 1/-5/3, 2/3/-2, 4/-2/1, 4/1/-1,
+2/-4/2, 1/4/-3, 4/-1/0, 2/2/-2, 2/-3/1,
+2/0/-1, 1/-5/2, 2/-2/0, 1/1/-2, 1/-4/1,
+1/-1/-1}{\wt[multiplicity=\m]{\x}{\y}}
+\positiveRootHyperplane
+\WeylChamber
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title={Dimensions of representations of \(G_2\), parameterized by highest weight}}
+\setlength\weightLength{1cm}
+\begin{tikzpicture}
+\begin{rootSystem}{G}
+\roots
+\foreach \x/\y/\d in {
+0/1/14, 0/2/77, 0/3/273, 1/0/7, 1/1/64,
+1/2/286, 2/0/27, 2/1/189, 2/2/729, 3/0/77,
+4/0/182, 5/0/318, 6/0/714, 3/1/448, 4/1/924}
+{\wt{\x}{\y}\node[black,above] at \weight{\x}{\y} {\(\d\)};}
+\positiveRootHyperplane
+\WeylChamber
+\end{rootSystem}
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\bibliographystyle{amsplain}
+\bibliography{rank-2-roots}
+
+\end{document}
diff --git a/graphics/pgf/contrib/reotex/README b/graphics/pgf/contrib/reotex/README
new file mode 100644
index 0000000000..cf952ec702
--- /dev/null
+++ b/graphics/pgf/contrib/reotex/README
@@ -0,0 +1,34 @@
+Package Name: reotex
+
+Author Name: Nuno Oliveira
+
+License:
+This material is subject to the LaTeX Project Public Licence.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that licence.
+
+
+Description:
+This package provides a set of macros to create
+reo channels and circuits.
+
+It is an extension of the PGF/Tikz package, thoroughly documented
+in the manual ``Tikz \& PGF Manual for Version~2.10''.
+
+For a good usage of this package, LaTeX2e version is required.
+Some commands may work as well with LaTeX version, but it is
+left as your responsibility.
+
+You need to have an installation of the following packages:
+- ifthen;
+- tikz (with arrows, decorations.pathmorphing, decorations.shapes, calc);
+- verbatim;
+
+
+
+VERSION HISTORY
+
+2014/08/13 - version 1.1
+- arrow tips used in drain/spout were corrected. The update to tikz3.0 caused a problem concerning the size of such arrows.
+
+2012/01/05 - version 1.0
+- first published at CTAN. \ No newline at end of file
diff --git a/graphics/pgf/contrib/reotex/reotex.pdf b/graphics/pgf/contrib/reotex/reotex.pdf
new file mode 100644
index 0000000000..f0a59c100a
--- /dev/null
+++ b/graphics/pgf/contrib/reotex/reotex.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/reotex/reotex.sty b/graphics/pgf/contrib/reotex/reotex.sty
new file mode 100644
index 0000000000..b46206943b
--- /dev/null
+++ b/graphics/pgf/contrib/reotex/reotex.sty
@@ -0,0 +1,950 @@
+% Defintion of Reo Channels and other utilities to design Reo Circuits
+% using the pgf (tikz) by Till Tantau (pgf manual for v2.10)
+%
+% author: Nuno Oliveira
+% version: 1.0
+%
+% This package may be distributed and modified to better suit the user's
+% interests. Please, keep the credits to the original author (but you may
+% add yours)
+%
+% License: LaTeX Project Public License and/or GNU Public License.
+%
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{reotex}[2014/08/13 A Tex way to draw reo circuits!]
+
+%releases:
+%2014/08/13 - version 1.1
+%WHAT HAS CHANGED:
+% - arrow tips used in drain/spout were corrected. The update to tikz3.0 caused a problem concerning the size of such arrows.
+
+%2012/01/05 - version 1, first published at CTAN.
+
+\RequirePackage{ifthen}
+\RequirePackage{tikz}
+\RequirePackage{verbatim}
+\usetikzlibrary{arrows,%
+ decorations.pathmorphing,%
+ decorations.shapes,%
+ calc%
+ }
+
+%makes @ as a normal letter and not as a special latex character...
+\makeatletter
+
+%%%%%% VARIABLES %%%%%%%%%%%
+
+\newdimen\rt@thearrowsize
+\newdimen\rt@width
+\newdimen\rt@xa
+\newdimen\rt@xb
+\newdimen\rt@xc
+\newdimen\rt@ya
+\newdimen\rt@yb
+\newdimen\rt@yc
+
+\newcommand{\rt@arrowtip}{-stealth}
+
+%%%%%%%%%%%% BASE COMMANDS %%%%%%%%%%%%
+
+
+\newcommand{\rt@midpoints}[4]{%
+ \pgfextractx{\rt@xa}{\pgfpointlineattime{#1}{\pgfpointanchor{#3}{center}}{\pgfpointanchor{#4}{center}}}
+ \pgfextracty{\rt@ya}{\pgfpointlineattime{#1}{\pgfpointanchor{#3}{center}}{\pgfpointanchor{#4}{center}}}
+ \pgfextractx{\rt@xb}{\pgfpointlineattime{#2}{\pgfpointanchor{#3}{center}}{\pgfpointanchor{#4}{center}}}
+ \pgfextracty{\rt@yb}{\pgfpointlineattime{#2}{\pgfpointanchor{#3}{center}}{\pgfpointanchor{#4}{center}}}
+}
+
+
+\newcommand{\rt@middlepoint}[2]{%
+ \pgfextractx{\rt@xc}{\pgfpointlineattime{.5}{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}}
+ \pgfextracty{\rt@yc}{\pgfpointlineattime{.5}{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}}
+}
+
+
+
+%%%%%%%% TIKZ DEFINITIONS %%%%%%%%%%%%%%%
+
+\tikzset{cross/.style={path picture={
+ \draw[black]
+ (path picture bounding box.south east) --
+ (path picture bounding box.north west)
+ (path picture bounding box.south west) --
+ (path picture bounding box.north east);
+ }
+ }
+}
+
+
+%%%%%%%%%%%%%%%% SYNCHRONOUS CHANNELS %%%%%%%%%%
+
+
+
+
+% Synchronous
+
+\newcommand{\sync}{%
+ \@ifstar\sync@noarrow\sync@arrow
+}
+
+
+\newcommand{\sync@arrow}[3]{%
+ \draw[\rt@arrowtip] #1 to #3 #2;
+}
+
+\newcommand{\sync@noarrow}[3]{%
+ \draw #1 to #3 #2;
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Lossy Synchronous
+
+\newcommand{\lossysync}{%
+ \@ifstar\lossysync@noarrow\lossysync@arrow
+}
+
+\newcommand{\lossysync@arrow}[3]{%
+ \draw[\rt@arrowtip,dashed] #1 to #3 #2;
+}
+
+\newcommand{\lossysync@noarrow}[3]{%
+ \draw[dashed] #1 to #3 #2;
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% Synchronous Drain
+\newcommand{\syncdrain}{%
+ \@ifstar \syncdrain@arrow \syncdrain@arrow
+}
+
+\newcommand{\syncdrain@arrow}[3]{%
+ \draw[inwards-inwards, shorten >=-0.5mm, shorten <=-0.5mm] #1 to #3 #2;
+}
+
+%\newcommand{\syncdrain@noarrow}[3]{%
+% \draw[inwards-inwards] #1 to #2 #3;
+%}
+
+
+% Synchronous Spout
+\newcommand{\syncspout}{%
+ \@ifstar \syncspout@arrow \syncspout@arrow
+}
+\newcommand{\syncspout@arrow}[3]{%
+ \draw[outwards-outwards,shorten >=-0.5mm, shorten <=-0.5mm] #1 to #3 #2;
+}
+%\newcommand{\syncspout@noarrow}[3]{%
+% \draw[outwards-outwards,] #1 to #2 #3;
+%}
+
+
+
+
+
+
+
+%Filter
+
+\newcommand{\filter}{%
+ \@ifstar\filter@noarrow\filter@arrow
+}
+
+\newcommand{\filter@arrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.25}{0.75}{rt@p1}{rt@p2}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate [decoration=zigzag] {(\rt@xa,\rt@ya) -- #3 (\rt@xb,\rt@yb)};
+\draw[\rt@arrowtip, thin] (\rt@xb,\rt@yb) to #2;
+
+}
+
+
+\newcommand{\filter@noarrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.25}{0.75}{rt@p1}{rt@p2}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate [decoration=zigzag] {(\rt@xa,\rt@ya) -- #3 (\rt@xb,\rt@yb)};
+\draw[thin] (\rt@xb,\rt@yb) to #2;
+
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%% ASYNCHRONOUS CHANNELS %%%%%%%%%%%%
+
+%Fifo1 (Empty)
+
+\newcommand{\fifoe}{%
+ \@ifstar\fifoe@noarrow\fifoe@arrow
+}
+
+\newcommand{\fifoe@arrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.65}{rt@p1}{rt@p2}
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+%, shorten <=1mm
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate[decoration={shape backgrounds, shape=rectangle, shape height=7pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- (\rt@xb,\rt@yb)};
+\draw[\rt@arrowtip, thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+\newcommand{\fifoe@noarrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.70}{rt@p1}{rt@p2}
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate[decoration={shape backgrounds, shape=rectangle, shape height=8pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- (\rt@xb,\rt@yb)};
+\draw[thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%Fifo1 (Full)
+
+\newcommand{\fifof}{%
+ \@ifstar\fifof@noarrow\fifof@arrow
+}
+
+\newcommand{\fifof@arrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.65}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate[decoration={shape backgrounds, shape=rectangle, shape height=7pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {$\bullet$} (\rt@xb,\rt@yb)};
+\draw[\rt@arrowtip, thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+\newcommand{\fifof@noarrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.70}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate[decoration={shape backgrounds, shape=rectangle, shape height=7pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {$\bullet$} (\rt@xb,\rt@yb)};
+\draw[thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+
+%AsyncDrain
+\newcommand{\asyncdrain}{%
+ \@ifstar \asyncdrain@arrow \asyncdrain@arrow
+}
+
+\newcommand{\asyncdrain@arrow}[3]{%
+
+\coordinate (rt@p1) at ($#1!.47!#2$);
+\coordinate (rt@p2) at ($(rt@p1)!6pt!90:#1$);
+\coordinate (rt@p3) at ($(rt@p1)!6pt!-90:#1$);
+
+\coordinate (rt@p4) at ($#1!.53!#2$);
+\coordinate (rt@p5) at ($(rt@p4)!6pt!90:#1$);
+\coordinate (rt@p6) at ($(rt@p4)!6pt!-90:#1$);
+
+\draw[inwards-inwards, thin, shorten >=-0.5mm, shorten <=-0.5mm]
+ #1 to #3 #2;
+\draw[thin] (rt@p1) -- (rt@p2);
+\draw[thin] (rt@p1) -- (rt@p3);
+\draw[thin] (rt@p4) -- (rt@p5);
+\draw[thin] (rt@p4) -- (rt@p6);
+}
+
+
+
+%AsyncSpout
+
+\newcommand{\asyncspout}{%
+ \@ifstar \asyncspout@arrow \asyncspout@arrow
+}
+
+\newcommand{\asyncspout@arrow}[3]{%
+\coordinate (rt@p1) at ($#1!.47!#2$);
+\coordinate (rt@p2) at ($(rt@p1)!6pt!90:#1$);
+\coordinate (rt@p3) at ($(rt@p1)!6pt!-90:#1$);
+
+\coordinate (rt@p4) at ($#1!.53!#2$);
+\coordinate (rt@p5) at ($(rt@p4)!6pt!90:#1$);
+\coordinate (rt@p6) at ($(rt@p4)!6pt!-90:#1$);
+
+\draw[outwards-outwards, thin,shorten >=-0.5mm, shorten <=-0.5mm]
+ #1 to #3 #2;
+\draw[thin] (rt@p1) -- (rt@p2);
+\draw[thin] (rt@p1) -- (rt@p3);
+\draw[thin] (rt@p4) -- (rt@p5);
+\draw[thin] (rt@p4) -- (rt@p6);
+}
+
+%\newcommand{\asyncspout@noarrow}[3]{%
+%\coordinate (rt@p1) at ($#1!.47!#2$);
+%\coordinate (rt@p2) at ($(rt@p1)!6pt!90:#1$);
+%\coordinate (rt@p3) at ($(rt@p1)!6pt!-90:#1$);
+
+%\coordinate (rt@p4) at ($#1!.53!#2$);
+%\coordinate (rt@p5) at ($(rt@p4)!6pt!90:#1$);
+%\coordinate (rt@p6) at ($(rt@p4)!6pt!-90:#1$);
+
+%\draw[outwards-outwards, thin]
+% #1 to #3 #2;
+%\draw[thin] (rt@p1) -- (rt@p2);
+%\draw[thin] (rt@p1) -- (rt@p3);
+%\draw[thin] (rt@p4) -- (rt@p5);
+%\draw[thin] (rt@p4) -- (rt@p6);
+%}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%FifoN
+
+\newcommand{\fifon}{%
+ \@ifstar\fifon@noarrow\fifon@arrow
+}
+
+\newcommand{\fifon@arrow}[3]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.65}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate[decoration={shape backgrounds, shape=rectangle, shape height=8pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {\tiny 1$|$...$|$n} (\rt@xb,\rt@yb)};
+\draw[\rt@arrowtip, thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+
+\newcommand{\fifon@noarrow}[3]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.70}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw decorate[decoration={shape backgrounds, shape=rectangle, shape height=8pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {\tiny 1$|$...$|$n} (\rt@xb,\rt@yb)};
+\draw[thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% Shift Fifo n
+
+\newcommand{\shiftfifon}{%
+ \@ifstar\shiftfifon@noarrow\shiftfifon@arrow
+}
+
+\newcommand{\shiftfifon@arrow}[3]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.65}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw[dashed] decorate[decoration={shape backgrounds, shape=rectangle, shape height=8pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {\tiny 1$|$...$|$n} (\rt@xb,\rt@yb)};
+\draw[\rt@arrowtip, thin, dashed] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+\newcommand{\shiftfifon@noarrow}[3]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.70}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw[dashed] decorate[decoration={shape backgrounds, shape=rectangle, shape height=8pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {\tiny 1$|$...$|$n} (\rt@xb,\rt@yb)};
+\draw[thin, dashed] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+% Lossy Fifo n
+
+\newcommand{\lossyfifon}{%
+ \@ifstar\lossyfifon@noarrow\lossyfifon@arrow
+}
+
+
+\newcommand{\lossyfifon@arrow}[3]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.65}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[dashed, thin] #1 to (\rt@xa,\rt@ya);
+\draw[dashed] decorate[decoration={shape backgrounds, shape=rectangle, shape height=8pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {\tiny 1$|$...$|$n} (\rt@xb,\rt@yb)};
+\draw[\rt@arrowtip, thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+\newcommand{\lossyfifon@noarrow}[3]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.30}{0.70}{rt@p1}{rt@p2}
+
+\pgfmathsetlength{\rt@width}{sqrt((\rt@xa - \rt@xb)^2 + (\rt@ya - \rt@yb)^2)}
+
+\draw[dashed, thin] #1 to (\rt@xa,\rt@ya);
+\draw[dashed] decorate[decoration={shape backgrounds, shape=rectangle, shape height=8pt, shape width=\rt@width, shape evenly spread=1}] {(\rt@xa,\rt@ya) -- node[sloped] {\tiny 1$|$...$|$n} (\rt@xb,\rt@yb)};
+\draw[thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+
+
+%Timer
+
+
+
+
+\newcommand{\timer}{%
+ \@ifstar\timer@noarrow\timer@arrow
+}
+
+\newcommand{\timer@arrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@middlepoint{rt@p1}{rt@p2}
+\rt@midpoints{0.4}{0.60}{rt@p1}{rt@p2}
+\pgfmathsetlength{\rt@width}{(sqrt((\rt@xa - \rt@xc)^2 + (\rt@ya - \rt@yc)^2))}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw (\rt@xc,\rt@yc) circle (\rt@width) ;
+\draw[\rt@arrowtip, thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+\newcommand{\timer@noarrow}[3]{%
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@middlepoint{rt@p1}{rt@p2}
+\rt@midpoints{0.4}{0.60}{rt@p1}{rt@p2}
+\pgfmathsetlength{\rt@width}{(sqrt((\rt@xa - \rt@xc)^2 + (\rt@ya - \rt@yc)^2))}
+
+\draw[thin] #1 to (\rt@xa,\rt@ya);
+\draw (\rt@xc,\rt@yc) circle (\rt@width) ;
+\draw[\rt@arrowtip, thin] (\rt@xb,\rt@yb) to #3 #2;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+%Auxiliary Channel
+
+\newcommand{\baseasyncchannels@arrow}[4]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.25}{0.75}{rt@p1}{rt@p2}
+
+\draw[thin]%
+ #1 to (\rt@xa,\rt@ya) ;
+\draw[white, thin]
+ (\rt@xa,\rt@ya) to node[color=black, sloped] {{\small #4}} (\rt@xb,\rt@yb);
+\draw[\rt@arrowtip, thin]%
+ (\rt@xb,\rt@yb) to #3 #2;
+
+}
+
+
+\newcommand{\baseasyncchannels@noarrow}[4]{%
+
+\node (rt@p1) at #1 {} ;
+\node (rt@p2) at #2 {} ;
+
+\rt@midpoints{0.25}{0.75}{rt@p1}{rt@p2}
+
+\draw[thin]%
+ #1 to (\rt@xa,\rt@ya) ;
+\draw[white, thin]
+ (\rt@xa,\rt@ya) to node[color=black, sloped] {{\small #4}} (\rt@xb,\rt@yb);
+\draw[ thin]%
+ (\rt@xb,\rt@yb) to #3 #2;
+
+}
+
+
+%Ordered
+
+\newcommand{\ordered}{%
+ \@ifstar \ordered@noarrow \ordered@arrow
+}
+
+\newcommand{\ordered@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{ord}
+}
+
+\newcommand{\ordered@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{ord}
+}
+
+
+%%%%%%%%%%%%%%
+
+
+
+%Ordered N
+\newcommand{\orderedn}{%
+ \@ifstar \orderedn@noarrow \orderedn@arrow
+}
+
+\newcommand{\orderedn@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{ord$_n$}
+}
+
+\newcommand{\orderedn@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{ord$_n$}
+}
+
+
+%%%%%%%%%%%%%%%%%%
+
+%Bag
+
+\newcommand{\bag}{%
+ \@ifstar \bag@noarrow \bag@arrow
+}
+
+\newcommand{\bag@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{({\tiny ...})}
+}
+
+\newcommand{\bag@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{({\tiny ...})}
+}
+
+
+%Bag N
+
+\newcommand{\bagn}{%
+ \@ifstar \bagn@noarrow \bagn@arrow
+}
+
+\newcommand{\bagn@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{({\tiny ...})$_n$}
+}
+
+\newcommand{\bagn@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{({\tiny ...})$_n$}
+}
+
+
+%Set
+
+\newcommand{\set}{%
+ \@ifstar \set@noarrow \set@arrow
+}
+
+\newcommand{\set@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{\{{\tiny ...}\}}
+}
+
+\newcommand{\set@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{\{{\tiny ...}\}}
+}
+
+
+%Set N
+
+\newcommand{\setn}{%
+ \@ifstar \setn@noarrow \setn@arrow
+}
+
+\newcommand{\setn@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{\{{\tiny ...}\}$_n$}
+}
+
+\newcommand{\setn@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{\{{\tiny ...}\}$_n$}
+}
+
+
+%Dealy Set
+
+\newcommand{\delayset}{%
+ \@ifstar \delayset@noarrow \delayset@arrow
+}
+
+\newcommand{\delayset@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{DSet}
+}
+
+\newcommand{\delayset@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{DSet}
+}
+
+
+%Delay Set N
+\newcommand{\delaysetn}{%
+ \@ifstar \delaysetn@noarrow \delaysetn@arrow
+}
+
+\newcommand{\delaysetn@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{DSet$_n$}
+}
+
+\newcommand{\delaysetn@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{DSet$_n$}
+}
+
+
+
+%Keyed Set
+
+\newcommand{\keyedset}{%
+ \@ifstar \keyedset@noarrow \keyedset@arrow
+}
+
+\newcommand{\keyedset@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{KSet}
+}
+
+
+\newcommand{\keyedset@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{KSet}
+}
+
+%Keyed Set N
+
+\newcommand{\keyedsetn}{%
+ \@ifstar \keyedsetn@noarrow \keyedsetn@arrow
+}
+
+\newcommand{\keyedsetn@arrow}[3]{%
+ \baseasyncchannels@arrow{#1}{#2}{#3}{KSet$_n$}
+}
+
+\newcommand{\keyedsetn@noarrow}[3]{%
+ \baseasyncchannels@noarrow{#1}{#2}{#3}{KSet$_n$}
+}
+
+
+
+
+
+%%%%%%%%%%%%%% L shaped %%%%%%%%%%%%%%%%%%%
+%Generic\Lhannel*?[<option>]?{<channel name>}{<start>}{<target>}{<height>}{<orientation>}{<polarization>}{<node>}
+%Example: \Lhannel[??]{fifoe}{(0,0)}{(2,0.5)}{0.5}{v}{+}{node {a}}
+%|-a>
+
+\newcommand{\Lchannel}{
+ \@ifstar \Lchannel@arrow@part \Lchannel@arrow@channel
+}
+
+\newcommand{\Lchannel@arrow@channel}[8][solid]{
+
+ \ifthenelse{\equal{#6}{v} \and \equal{#7}{+}}{
+ \rt@pin{(rt@pinlc1)}{($ #3 + (0,#5) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{v} \and \equal{#7}{-}}{
+ \rt@pin{(rt@pinlc1)}{($ #3 - (0,#5) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{h} \and \equal{#7}{+}}{
+ \rt@pin{(rt@pinlc1)}{($ #3 + (#5,0) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{h} \and \equal{#7}{-}}{
+ \rt@pin{(rt@pinlc1)}{($ #3 - (#5,0) $)}
+ }
+ {
+ \PackageError{reotex}{Expecting: v/h and +/- as 5th and 6th arguments (resp.)}{The 5th argument must be one of v or h, for vertical or horizontal orientation.\MessageBreak The 6th argument must be one of + or - for a positive or negative polarisation.}
+ } % ERROR STATE
+ }
+ }
+ }
+ \rt@cp[#1]{#3}{(rt@pinlc1)}
+ \csname #2\endcsname{(rt@pinlc1)}{#4}{#8}
+ %csname expands the argument name x to \x. Care should be taken: there should not exist a space after the name to expand as command. The arguments of the command should come after the \endcsname
+}
+
+
+
+\newcommand{\Lchannel@arrow@part}[8][solid]{
+ \ifthenelse{\equal{#6}{v} \and \equal{#7}{+}}{
+ \rt@pin{(rt@pinlc2)}{($ #3 + (0,#5) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{v} \and \equal{#7}{-}}{
+ \rt@pin{(rt@pinlc2)}{($ #3 - (0,#5) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{h} \and \equal{#7}{+}}{
+ \rt@pin{(rt@pinlc2)}{($ #3 + (#5,0) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{h} \and \equal{#7}{-}}{
+ \rt@pin{(rt@pinlc2)}{($ #3 - (#5,0) $)}
+ }
+ {
+ \PackageError{reotex}{Expecting: v/h and +/- as 5th and 6th arguments (resp.)}{The 5th argument must be one of v or h, for vertical or horizontal orientation.\MessageBreak The 6th argument must be one of + or - for a positive or negative polarisation.}
+ } % ERROR STATE
+ }
+ }
+ }
+ \rt@cp*[#1]{(rt@pinlc2)}{#3}
+ \csname #2\endcsname *{#4}{(rt@pinlc2)}{#8}
+}
+
+
+
+
+
+
+%%%%%%%%%%%%%% U shaped %%%%%%%%%%%%%%%%%%%
+%Generic\Uhannel*?[<option>]?{<channel name>}{<start>}{<target>}{<height>}{<orientation>}{<polarization>}{<label>}
+%Example: \Uchannel[dashed]{lossysync}{(0,0)}{(2,0.5)}{0.5}{v}{+}{node {a}}
+%|---a>
+
+%\newcommand{\Uchannel}{
+% \@ifstar \Uchannel@arrow@target \Uchannel@arrow@target
+%}
+
+\newcommand{\Uchannel}[8][solid]{
+
+ \ifthenelse{\equal{#6}{v} \and \equal{#7}{+}}{
+ \rt@pin{(rt@pinuc1)}{($ #3 + (0,#5) $)}
+ \rt@pin{(rt@pinuc2)}{($ #4 + (0,#5) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{v} \and \equal{#7}{-}}{
+ \rt@pin{(rt@pinuc1)}{($ #3 - (0,#5) $)}
+ \rt@pin{(rt@pinuc2)}{($ #4 - (0,#5) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{h} \and \equal{#7}{+}}{
+ \rt@pin{(rt@pinuc1)}{($ #3 + (#5,0) $)}
+ \rt@pin{(rt@pinuc2)}{($ #4 + (#5,0) $)}
+ }
+ {
+ \ifthenelse{\equal{#6}{h} \and \equal{#7}{-}}{
+ \rt@pin{(rt@pinuc1)}{($ #3 - (#5,0) $)}
+ \rt@pin{(rt@pinuc2)}{($ #4 - (#5,0) $)}
+ }
+ {
+ \PackageError{reotex}{Expecting: v/h and +/- as 5th and 6th arguments (resp.)}{The 5th argument must be one of v or h, for vertical or horizontal orientation.\MessageBreak The 6th argument must be one of + or - for a positive or negative polarisation.}
+ } % ERROR STATE
+ }
+ }
+}
+%
+\ifthenelse{\equal{#2}{shiftfifon}}{
+ \rt@cp*[dashed]{(rt@pinuc2)}{#4}
+ \rt@cp[solid]{#3}{(rt@pinuc1)}
+}
+{
+ \ifthenelse{\equal{#2}{lossyfifon}}{
+ \rt@cp[dashed]{#3}{(rt@pinuc1)}
+ \rt@cp*[solid]{(rt@pinuc2)}{#4}
+ }
+ {
+ \rt@cp[#1]{#3}{(rt@pinuc1)}
+ \rt@cp*[#1]{(rt@pinuc2)}{#4}
+ }
+}
+\csname #2\endcsname *{(rt@pinuc1)}{(rt@pinuc2)}{#8}
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%% ARROWS %%%%%%%%%%%%%
+
+%outwards
+\pgfarrowsdeclare{outwards}{outwards}
+{
+ \rt@thearrowsize=1.4pt
+ \advance\rt@thearrowsize by .5\pgflinewidth
+ \pgfarrowsleftextend{-.5\pgflinewidth}
+ \pgfarrowsrightextend{3\rt@thearrowsize+.5\pgflinewidth}
+}
+{
+ \advance\rt@thearrowsize by .5\pgflinewidth
+ \pgfpathmoveto{\pgfpoint{-4.5\rt@thearrowsize}{1.2\rt@thearrowsize}}
+ \pgfpathlineto{\pgfpoint{-4.5\rt@thearrowsize}{-1.2\rt@thearrowsize}}
+ \pgfpathlineto{\pgfpoint{-2.0\rt@thearrowsize}{0pt}}
+ \pgfpathlineto{\pgfpoint{-4.5\rt@thearrowsize}{1.2\rt@thearrowsize}}
+ \pgfusepathqfill
+}
+
+
+
+
+
+
+
+
+%inwards
+\pgfarrowsdeclare{inwards}{inwards}
+{
+ \rt@thearrowsize=1.4pt
+ \advance\rt@thearrowsize by .5\pgflinewidth
+ \pgfarrowsleftextend{-.5\pgflinewidth}
+ \pgfarrowsrightextend{3\rt@thearrowsize+.5\pgflinewidth}
+}
+{
+ \advance\rt@thearrowsize by .5\pgflinewidth
+ \pgfpathmoveto{\pgfpoint{-2\rt@thearrowsize}{1.2\rt@thearrowsize}}
+ \pgfpathlineto{\pgfpoint{-2\rt@thearrowsize}{-1.2\rt@thearrowsize}}
+ \pgfpathlineto{\pgfpoint{-4.5\rt@thearrowsize}{0pt}}
+ \pgfpathlineto{\pgfpoint{-2\rt@thearrowsize}{1.2\rt@thearrowsize}}
+ \pgfusepathqfill
+}
+
+
+
+
+
+
+%%%%%%%%%% NODES %%%%%%%%%%%%%%%%%%
+
+
+\newcommand{\rt@pin}[2]{%
+ \node[outer sep=-1.3mm] #1 at #2 {} ;
+}
+
+
+\newcommand{\ionode}[3]{%
+ \node[outer sep=-0.15mm] #1 at #2 {} ;
+ \draw[fill=white, minimum size=2pt] #2 circle (2.7pt) #3 ;
+}
+
+
+\newcommand{\mixednode}[3]{%
+ \node[outer sep=-0.2mm] #1 at #2 {} ;
+ \draw[fill=gray!20!black, minimum size=2.9pt] #2 circle (2.2pt) #3 ;
+}
+
+
+\newcommand{\reader}[3]{%
+ \node[outer sep=0mm] #1 at #2 {} ;
+ \draw[fill=white, minimum size=3pt] ($#2 + (-0.15,0.15)$) rectangle ($ #2 + (0.15,-0.15) $) #3 ;
+}
+
+\newcommand{\writer}[3]{%
+ \node[outer sep=0mm] #1 at #2 {} ;
+ \draw[fill=black, minimum size=3pt] ($#2 + (-0.15,0.15)$) rectangle ($ #2 + (0.15,-0.15) $) #3 ;
+}
+
+
+
+\newcommand{\xrouter}[3]{%
+ \node[outer sep=0.35mm] #1 at #2 {} ;
+ \draw[cross, fill=white, minimum size=2.3pt] #2 circle (5pt) #3 ;
+}
+
+
+
+%%%%%%%%%%%% UTILITIES %%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\rt@cp}{%
+ \@ifstar \rt@cp@arrow \rt@cp@noarrow
+}
+
+\newcommand{\rt@cp@noarrow}[3][solid]{%
+ \draw[#1] #2 to #3;
+}
+
+\newcommand{\rt@cp@arrow}[3][solid]{%
+ \draw[\rt@arrowtip ,#1] #2 to #3;
+}
+
+
+
+
+%% added on: 2012/07/27 %%
+
+%%%%%%%%%%% COMPONENTS (BLACK BOXES)%%%%%
+% arg1: corner 1
+% arg2: corner 2
+% arg3: text node
+\newcommand{\component}[3]{%
+ \draw[rounded corners=1ex] #1 rectangle #2 #3;
+}
+
+
+\makeatother
+
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/reotex/reotex.tex b/graphics/pgf/contrib/reotex/reotex.tex
new file mode 100644
index 0000000000..92d8435399
--- /dev/null
+++ b/graphics/pgf/contrib/reotex/reotex.tex
@@ -0,0 +1,867 @@
+\documentclass[11pt]{article}
+\usepackage{reotex}
+\usepackage{verbatim}
+\usepackage{pgf}
+\usepackage{tikz}
+\usepackage[pdftex]{hyperref}
+\usepackage{url}
+
+
+\title{A PGF-based Libary for Reo Circuits}
+\author{\textbf{Nuno Oliveira}\\[12pt]HASLab/INESC TEC\\Universidade do Minho}
+\date{\today}
+\begin{document}
+\maketitle
+
+
+\begin{abstract}
+This article briefly presents the package for Reo Circuits which is an \emph{extension} of the PGF/Tikz package, thoroughly documented in the manual ``Tikz \& PGF Manual for Version~2.10''.
+
+Herein, the several commands to build a Reo circuit are presented and its \emph{API} explained.
+
+For a good usage of this package, \LaTeXe{} version is required. Some commands may work as well with \LaTeX{} version, but it is left as your responsibility.
+
+Moreover, an excellent introduction to Reo can be found in~\cite{arbab04}, and for more information and tools on this theme the following website may be visited:
+\begin{center}
+\url{http://reo.project.cwi.nl/}
+\end{center}
+
+\end{abstract}
+
+
+\section{How to Make it Work}
+
+Ok, say you want to use this package to draw beautiful Reo Circuits.
+You start by loading your latex template.
+Then, in your preamble, you need to have the following:
+
+\begin{itemize}
+\item \verb+\usepackage{reotex}+
+\end{itemize}
+
+Obviously, you need to have \verb+pgf+ and \verb+tikz+ packages installed in your environment, otherwise the commands provided in \verb+reotex+ will not be interpreted.
+
+
+\section{Drawing a Reo Channel}
+
+Reo circuits are the composition of several Reo channels.
+In this package all the channels have the same API, thus it is
+easy to explain a generic way of drawing such channels.
+
+\subsection{The Generic Format}\label{sec:genericchannels}
+
+The following pseudo-code shows how to draw any channel.
+
+\begin{verbatim}
+\tikz \<channel_name>{<start>}
+ {<target>}
+ {<labels>} ;
+\end{verbatim}
+
+In detail,
+\begin{itemize}
+
+\item \verb+\tikz+: refers to the Tikz environment to draw a tikz-based picture. In fact, the \verb+\tikz+ command is to draw an inline picture. If you desire to draw in a more controlled environment you may use:
+\begin{verbatim}
+ \begin{tikzpicture}
+ <channel name>{<start>}
+ {<target>}
+ {<labels>}
+ \end{tikzpicture}
+\end{verbatim}
+
+\item \emph{$<$channel name$>$}: refers to the command (representing the name of a channel) as presented in Section~\ref{sec:channels}.
+
+\item \emph{$<$start$>$} refers to the coordinates of the starting point of the channel. It may be written either as $(x,y)$ or as a reference for a previous defined node: $(name)$. The second format should only be used in a tikzpicture environment.
+
+\item \emph{$<$target$>$}: refers to the coordinates of the target point of the channel. It is used as the \emph{$<$start$>$} coordinate.
+
+\item \emph{$<$labels$>$}: refer to the labels that may be desired to add to the channel. More than one label may be expressed; whenever it happens, a space should separate them. Each label should have the following format:
+
+\begin{verbatim}
+node[<options>] {<label>} ...
+\end{verbatim}
+
+where
+
+\begin{itemize}
+\item \emph{$<$options$>$} are simple coma-separated graphic directives that may be used to transform the label. These directives are those used in normal \verb+pgf+ or \verb+tikz+ pictures: yshift=number, xshift=number, shift=number, color name, above, left, below and right, to list some but a few.
+
+\item \emph{$<$label$>$} is the text to put on the channel.
+It may be used both simple text and mathematical text.
+
+\end{itemize}
+
+\end{itemize}
+
+
+\subsection{Reo Channels}\label{sec:channels}
+
+The following list presents the commands to draw the 22 defined Reo channels.
+
+\subsubsection{Synchronous Channels}
+
+\indent
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\sync+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \sync{(0,0)}{(1.5,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\sync{(0,0)}{(1.5,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\lossysync+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \lossysync{(0,0)}{(1.5,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\lossysync{(0,0)}{(1.5,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\syncdrain+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \syncdrain{(0,0)}{(1.5,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\syncdrain{(0,0)}{(1.5,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\syncspout+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \syncspout{(0,0)}{(1.5,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\syncspout{(0,0)}{(1.5,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\filter+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \filter{(0,0)}{(1.5,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\filter{(0,0)}{(1.5,0)}{}+
+\end{minipage}
+
+
+\subsubsection{Asynchronous Channels}
+
+\indent
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\fifoe+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \fifoe{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\fifoe{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\fifof+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \fifof{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\fifof{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\asyncdrain+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \asyncdrain{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\asyncdrain{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\asyncspout+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \asyncspout{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\asynspout{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\fifon+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \fifon{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\fifon{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\shiftfifon+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \shiftfifon{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\shiftfifon{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\lossyfifon+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \lossyfifon{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\lossyfifon{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\timer+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \timer{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\timer{(0,0)}{}{(2,0)}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\ordered+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \ordered{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\ordered{(0,0)}{}{(2,0)}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\orderedn+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \orderedn{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\orderedn{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\bag+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \bag{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\bag{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\bagn+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \bagn{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\bagn{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\set+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \set{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\set{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\setn+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \setn{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\setn{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\delayset+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \delayset{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\delayset{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\delaysetn+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \delaysetn{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\delaysetn{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\keyedset+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \keyedset{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\keyedset{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\keyedsetn+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \keyedsetn{(0,0)}{(2,0)}{};
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\keyedsetn{(0,0)}{(2,0)}{}+
+\end{minipage}
+
+\bigskip
+
+\paragraph{Notes:}
+\begin{itemize}
+\item The minimum acceptable length (that is, the distance between start and target points) for a channel is 1cm.
+\item Notice that it is only shown the \LaTeXe{} code used to draw the channel. Obviously, this code should be inside a Tikz environment as referred previously).
+\item All the commands have a starred version that makes them to lose the arrow: (e.g. this code: \verb+\filter*{(0,0)}{(1.5,0)}{}+ draws: \tikz \filter*{(0,0)}{(1.5,0)}{};)
+
+This version is, for instance, used internally for channels that need to be represented in L or U format, for instance (code explained in Section~\ref{sec:circuits}):
+
+
+\begin{minipage}[b]{0.4\linewidth}
+\begin{center}
+\begin{tikzpicture}
+
+\Uchannel{fifof}{(0,0)}{(2,0)}
+ {0.5}{v}{-}{}
+
+\end{tikzpicture}
+\end{center}
+\vspace{0.4cm}
+\end{minipage}
+\begin{minipage}[b]{0.58\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+
+ \Uchannel{fifof}{(0,0)}{(2,0)}
+ {0.5}{v}{-}{}
+
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+
+\end{itemize}
+
+
+
+\section{Drawing a Node}
+
+The following code shows how a node is drawn.
+
+\subsection{The Generic Format}
+
+There are two sorts of nodes in Reo circuits: the boundary nodes and the mixed nodes. In this package they differ only in their colour, as can be seen in Section~\ref{sec:nodes}. However, the API is the same for both sorts of nodes:
+
+\begin{verbatim}
+\tikz \<node name>{<reference>}{point}{<labels>}
+\end{verbatim}
+
+In detail,
+
+\begin{itemize}
+
+\item \verb+\tikz+ is the Tikz environment. See the details as described in Section~\ref{sec:genericchannels}
+
+\item \emph{$<$node name$>$} refers to the command (representing the name of the node) as presented in Section~\ref{sec:nodes}.
+
+\item \emph{$<$reference$>$} refers to an alias to the $x,y$ position of this node. It should be formatted as \verb+(name)+, where name may be composed of more than one word.
+
+\item \emph{$<$point$>$} refers to the $x$ and $y$ coordinates of the point where the node is to be placed.
+
+\item \emph{$<$labels$>$} refer to the text that may be added to the node. It follows the same notation as described in Section~\ref{sec:genericchannels}. More that one label may be defined; whenever this happens, a space should separate them.
+\end{itemize}
+
+
+\subsection{Nodes}\label{sec:nodes}
+
+The following list presents the commands to draw the two sorts of Reo nodes. (Notice that it is only shown the \LaTeXe{} code used to draw the node.
+Obviously, this code should be inside a Tikz environment as referred previously).
+
+
+\indent
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\ionode+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \ionode{(n1)}{(0,0)}{} ;
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\ionode{(n1)}{(0,0)}{}+
+\end{minipage}
+
+\medskip
+
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\mixednode+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \mixednode{(n2)}{(0,0)}{} ;
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\mixednode{(n2)}{(0,0)}{}+
+\end{minipage}
+
+\bigskip
+
+A third node may be used in Reo Circuits. It is named the Exclusive Router node which is a graphic-alias for the Reo Circuit with the same name. It follows exactly the same notation as the other two nodes previously presented:
+
+\medskip
+
+\begin{minipage}[b]{0.25\linewidth}
+\verb+\xrouter+
+\end{minipage}
+\begin{minipage}[b]{0.2\linewidth}
+\tikz \xrouter{(xr)}{(0,0)}{} ;
+\end{minipage}
+\begin{minipage}[b]{0.6\linewidth}
+\verb+\xrouter{(xr)}{(0,0)}{}+
+\end{minipage}
+
+
+\section{Drawing Reo Circuits}\label{sec:circuits}
+
+It is strongly recommended to use the \verb+tikzpicture+ envitonment when drawing Reo circuits. The use of the inline command (\verb+\tikz+) may deliver unexpected results.
+
+\subsection{A Basic Circuit}
+
+So, the main strategy underlying the drawing of Reo Circuits with this package is twofold: first we should place the nodes, so we can name them, and then connect the channels to these nodes, taking advantage of the nodes references.
+
+\bigskip
+
+\begin{minipage}[b]{0.5\linewidth}
+\begin{tikzpicture}
+\ionode{(io1)}{(0,1)}{}
+\ionode{(io2)}{(0,3)}{}
+\ionode{(io3)}{(3,0.5)}{}
+\ionode{(io4)}{(6,1)}{}
+\ionode{(io5)}{(6,3)}{}
+\mixednode{(m1)}{(1,2)}{}
+\mixednode{(m2)}{(3,2)}{}
+\mixednode{(m3)}{(5,2)}{}
+
+\sync{(io1)}{(m1)}{}
+\sync{(io2)}{(m1)}{}
+\fifoe{(m1)}{(m2)}{}
+\syncdrain{(io3)}{(m2)}{}
+\fifoe{(m2)}{(m3)}{}
+\sync{(m3)}{(io4)}{}
+\sync{(m3)}{(io5)}{}
+\end{tikzpicture}
+
+\vspace{2cm}
+
+\end{minipage}
+\begin{minipage}[b]{0.4\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+ \ionode{(io1)}{(0,1)}{}
+ \ionode{(io2)}{(0,3)}{}
+ \ionode{(io3)}{(3,0.5)}{}
+ \ionode{(io4)}{(6,1)}{}
+ \ionode{(io5)}{(6,3)}{}
+ \mixednode{(m1)}{(1,2)}{}
+ \mixednode{(m2)}{(3,2)}{}
+ \mixednode{(m3)}{(5,2)}{}
+
+ \sync{(io1)}{(m1)}{}
+ \sync{(io2)}{(m1)}{}
+ \fifoe{(m1)}{(m2)}{}
+ \syncdrain{(io3)}{(m2)}{}
+ \fifoe{(m2)}{(m3)}{}
+ \sync{(m3)}{(io4)}{}
+ \sync{(m3)}{(io5)}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+\bigskip
+
+If it may become complex to draw the nodes and then understand which node is which, it is strongly recommended to add some labels to the nodes and, afterwards, remove them if they are not desired.
+
+
+\subsection{Drawing U- and L-shaped Channels}
+
+\bigskip
+
+Two new commands (\verb+\Lchannel+ and \verb+\Uchannel+) are added to this package, as utilities, to draw these shapes.
+
+The \verb+\Lchannel+ command is used to define the L-shaped channels. Its notation is:
+
+\begin{verbatim}
+\Lchannel[<dashed>]
+ {<channel name>}
+ {<start>}
+ {<target>}
+ {<length>}
+ {<orientation>}
+ {<polarisation>}
+ {<labels>}
+\end{verbatim}
+
+where,
+
+\begin{itemize}
+\item \emph{$<$dashed$>$} is an optional argument that determines if the \emph{non-channel} part of the L-shape is dashed. If omitted, the result would be a solid line.
+
+\item \emph{$<$channel name$>$} is the name of the channel that will be L-shaped. These names are exactly the same as the names of the commands presented in Section~\ref{sec:channels}, but without the '$\backslash $'
+
+\item \emph{$<$start$>$} and \emph{$<$target$>$} refer to the start and target points of these lines. They may be a reference to a previously defined node or it may be a concrete point. IMPORTANT: \emph{$<$start$>$} is always the initial point of the non-channel part of the L-shape, even if, in fact, it is the target point in the drawn figure.
+
+\item \emph{$<$length$>$} refers to the length of the non-channel part. A desirable value for this argument would be $0.5$.
+
+\item \emph{$<$orientation$>$} refers to the orientation of the non-channel part. IMPORTANT: it must be one of $v$ or $h$ for vertical or horizontal orientation, respectively.
+
+\item \emph{$<$polarization$>$} refers to the side to where the non-channel part will grow $length$ units. IMPORTANT: it must be one of $+$ or $-$.
+The combination of the following values (respectively the orientation and polarization) mean:
+\begin{itemize}
+\item $v$ and $+$ : the non-channel part grows up (positive in the y-axe);
+\item $v$ and $-$ : the non-channel part grows down (negative in the y-axe);
+\item $h$ and $+$ : the non-channel part grows to the right (positive in the x-axe);
+\item $h$ and $-$ : the non-channel part grows to the left (negative in the y-axe);
+\end{itemize}
+
+\item \emph{$<$labels$>$} refers to the labels that may be added to the channel. Its notation is exactly the same as presented in Section~\ref{sec:channels}.
+
+\item This channel has a starred version (\verb+\Lchannel*+) that makes the arrow tip to be placed in the non-channel part of the L-shape. Obviously, the arrow tip, is by default, placed at the channel part of the L-shape.
+
+\end{itemize}
+
+
+
+The \verb+\Uchannel+ command is used to define the U-shaped channels. Its notation is:
+
+\begin{verbatim}
+\Uchannel[<dashed>]
+ {<channel name>}
+ {<start>}
+ {<target>}
+ {<length>}
+ {<orientation>}
+ {<polarisation>}
+ {<labels>}
+\end{verbatim}
+
+where,
+
+\begin{itemize}
+\item \emph{$<$dashed$>$} is an optional argument that determines if the \emph{non-channel} parts of the U-shape are dashed. If omitted, the result would be a solid line. IMPORTANT: this option is sensible to the \texttt{lossyfifon} and \texttt{shiftfifon} channels, meaning that it creates a dashed and a solid non-channel part.
+
+\item \emph{$<$channel name$>$} is the name of the channel that will be L-shaped. These names are exactly the same as the names of the commands presented in Section~\ref{sec:channels}, but without the '$\backslash $'
+
+\item \emph{$<$start$>$} and \emph{$<$target$>$} refer to the start and target points of these lines. They may be a reference to a previously defined node or it may be a concrete point. IMPORTANT: the \emph{$<$start$>$} point is always the point of the non-channel part which will not have the arrow tip.
+
+\item \emph{$<$length$>$} refers to the length of the non-channel parts. A desirable value for this argument would be $0.5$.
+
+\item \emph{$<$orientation$>$} refers to the orientation of the non-channel part. IMPORTANT: it must be one of $v$ or $h$ for vertical or horizontal orientation, respectively.
+
+\item \emph{$<$polarization$>$} refers to the side to where the non-channel part will grow $length$ units. IMPORTANT: it must be one of $+$ or $-$.
+The combination of the following values (respectively the orientation and polarization) mean:
+\begin{itemize}
+\item $v$ and $+$ : the non-channel part grows up (positive in the y-axe);
+\item $v$ and $-$ : the non-channel part grows down (negative in the y-axe);
+\item $h$ and $+$ : the non-channel part grows to the right (positive in the x-axe);
+\item $h$ and $-$ : the non-channel part grows to the left (negative in the y-axe);
+\end{itemize}
+
+\item \emph{$<$labels$>$} refers to the labels that may be added to the channel. Its notation is exactly the same as presented in Section~\ref{sec:channels}.
+
+
+
+\end{itemize}
+
+
+
+\begin{minipage}[b]{0.4\linewidth}
+\begin{center}
+\begin{tikzpicture}
+
+ \Lchannel{fifoe}{(0,0)}{(2,0.5)}
+ {0.5}{v}{+}{}
+ \Uchannel{fifoe}{(0,-1)}{(2,-1)}
+ {0.5}{v}{+}{}
+ \Lchannel*[dashed]{lossysync}{(0,-1.5)}
+ {(2,-2)}{0.5}{v}{-}{}
+
+\end{tikzpicture}
+\end{center}
+\vspace{0.5mm}
+\end{minipage}
+\begin{minipage}[b]{0.58\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+\Lchannel{fifoe}{(0,0)}{(2,0.5)}
+ {0.5}{v}{+}{}
+\Uchannel{fifoe}{(0,-1)}{(2,-1)}
+ {0.5}{v}{+}{}
+\Lchannel*[dashed]{lossysync}{(0,-1.5)}
+ {(2,-2)}{0.5}{v}{-}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+
+
+\bigskip
+
+\subsection{Adding Labels to Channels or Nodes in a Circuit}
+
+Very often it is necessary to add some information to a node or to a channel. In this package, all the channels and nodes allow for this feature. The following examples show how this can be achieved.
+
+Here is an example that adds some label to some nodes.
+
+\bigskip
+
+\begin{minipage}[b]{0.4\linewidth}
+\begin{center}
+\begin{tikzpicture}
+
+\ionode{(io1)}{(0,0)}{node {$a$}}
+\ionode{(io2)}{(2,0)}{node {$b$}}
+
+\fifoe{(io1)}{(io2)}{}
+
+\end{tikzpicture}
+\end{center}
+\vspace{0.5cm}
+\end{minipage}
+\begin{minipage}[b]{0.58\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+ \ionode{(io1)}{(0,0)}{node {$a$}}
+ \ionode{(io2)}{(2,0)}{node {$b$}}
+ \fifoe{(io1)}{(io2)}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+\bigskip
+
+Ups! That is not what we desired!
+
+In fact, the code \verb+node {<text>}+ creates a label right in the centre of the node to which it will be stick.
+This would result in almost invisible labels.
+The solution is to use position options.
+Such position options are thoroughly documented in the tikz \& pgf manual. Those presented next are easily understandable, and are enough to place the labels in desired positions:
+
+\begin{itemize}
+\item yshift or xshift: these options require a dimension $d$ and they make the label to move $d$ units in the vertical or horizontal axes, respectively. They should be used as: \verb+yshift=10pt+, for instance (the same notation is used for for the xshift, as it would be expected.
+
+\item above, below, left right: these options do not require any value as they actually place the label in the expected positions. It may be, however, needed that these options are used with the y or xshift to place the label in a more suitable position.
+
+\end{itemize}
+
+Take a look at the next example to understand how these options are used.
+
+
+\bigskip
+
+\begin{minipage}[b]{0.3\linewidth}
+\begin{center}
+\begin{tikzpicture}
+
+\ionode{(io1)}{(0,0)}{node[below, xshift=-5pt] {$a$}}
+\ionode{(io2)}{(2,0)}{node[yshift=8pt, xshift=5pt] {$b$}}
+
+\fifoe{(io1)}{(io2)}{}
+
+\end{tikzpicture}
+\end{center}
+\vspace{0.5cm}
+\end{minipage}
+\begin{minipage}[b]{0.68\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+ \ionode{(io1)}{(0,0)}
+ {node[below, xshift=-5pt] {$a$}}
+ \ionode{(io2)}{(2,0)}
+ {node[yshift=8pt, xshift=5pt] {$b$}}
+ \fifoe{(io1)}{(io2)}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+\bigskip
+
+
+It may be interesting to have some (read: more than one) labels in a node or in a channel. The next example shows how more than one label may be added to a channel, defining the stochastic LossySync channel with the stochastic annotations.
+\paragraph{Note.} Since nodes and channels use the same notation to define labels, the code (the label parts) shown here may be applied to nodes too.
+
+
+\bigskip
+
+\begin{minipage}[b]{0.3\linewidth}
+\begin{center}
+\begin{tikzpicture}
+
+\lossysync{(0,0)}{(2,0)}
+ {node[above]{\tiny$\gamma ab$}
+ node[below]{\tiny$\gamma aL$}
+ node[above, xshift=-30pt]{\tiny$\gamma a$}
+ node[above, xshift=30pt]{\tiny$\gamma b$}
+ }
+
+\end{tikzpicture}
+\end{center}
+\vspace{1.3cm}
+\end{minipage}
+\begin{minipage}[b]{0.68\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+ \lossysync{(0,0)}
+ {(2,0)}
+ {node[above]
+ {\tiny$\gamma ab$}
+ node[below]
+ {\tiny$\gamma aL$}
+ node[above, xshift=-30pt]
+ {\tiny$\gamma a$}
+ node[above, xshift=30pt]
+ {\tiny$\gamma b$}
+ }
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+
+\bigskip
+
+By the way it is possible to change the colour of the label, by adding to the node options the name of a colour. See how in the next example.
+
+
+\bigskip
+
+\begin{minipage}[b]{0.3\linewidth}
+\begin{center}
+\begin{tikzpicture}
+
+\lossysync{(0,0)}{(2,0)}
+ {node[above]{\tiny$\gamma ab$}
+ node[below, red]{\tiny$\gamma aL$}
+ }
+
+\end{tikzpicture}
+\end{center}
+\vspace{0.4cm}
+\end{minipage}
+\begin{minipage}[b]{0.68\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+ \lossysync{(0,0)}{(2,0)}
+ {node[above]{\tiny$\gamma ab$}
+ node[below, red]{\tiny$\gamma aL$}
+ }
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+
+\bigskip
+
+
+
+
+\section{Summary}
+
+In this document you learned how to use the reotex package, which allows for the construction of Reo Circuits, using Reo Channels and Nodes.
+
+All the channels follow the same Channel API: receive a start point or a reference to such a start point (always between parentheses), then they receive a list of space-separated labels, and finally they receive the target point or the reference to that point.
+
+The channels have a starred version that defines the existence, or not, of an arrow tip.
+
+The nodes (there are three different) also follow the same Node API: receive a reference name (always between parentheses, composed of one or more words), then they receive the point and finally the list of space-separated labels.
+
+
+Moreover, there are some special utility commands that allow for the construction of U- and L-shaped Channels.
+
+
+
+\bibliographystyle{plain}
+\bibliography{../../../Reports/Reo/reo}
+
+
+\end{document}
+
+
+
+
+
+
+
+
+
diff --git a/graphics/pgf/contrib/rulercompass/README b/graphics/pgf/contrib/rulercompass/README
new file mode 100644
index 0000000000..4d25b984d2
--- /dev/null
+++ b/graphics/pgf/contrib/rulercompass/README
@@ -0,0 +1,10 @@
+---------------------------------------------------------------
+rulercompass --- a TikZ/PGF library for drawing straight-edge
+ and compass diagrams
+E-mail: stacey@math.ntnu.no
+Released under the LaTeX Project Public Licence v1.3c or later
+See http://www.latex-project.org/lppl.txt
+---------------------------------------------------------------
+
+This package defines some commands and styles intended for
+drawing straight-edge and compass diagrams.
diff --git a/graphics/pgf/contrib/rulercompass/rulercompass.dtx b/graphics/pgf/contrib/rulercompass/rulercompass.dtx
new file mode 100644
index 0000000000..5803499508
--- /dev/null
+++ b/graphics/pgf/contrib/rulercompass/rulercompass.dtx
@@ -0,0 +1,811 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+---------------------------------------------------------------
+rulercompass --- a TikZ/PGF library for drawing straight-edge
+ and compass diagrams
+E-mail: stacey@math.ntnu.no
+Released under the LaTeX Project Public Licence v1.3c or later
+See http://www.latex-project.org/lppl.txt
+---------------------------------------------------------------
+
+This package defines some commands and styles intended for
+drawing straight-edge and compass diagrams.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+\expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+---------------------------------------------------------------
+rulercompass --- a TikZ/PGF library for drawing straight-edge
+ and compass diagrams
+E-mail: stacey@math.ntnu.no
+Released under the LaTeX Project Public Licence v1.3c or later
+See http://www.latex-project.org/lppl.txt
+---------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2013 by Andrew Stacey <stacey@math.ntnu.no>
+
+This file may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version.
+The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work is "maintained" (as per LPPL maintenance status) by
+Andrew Stacey.
+
+This work consists of the files rulercompass.dtx
+ rulercompass_doc.tex
+and the derived files tikzlibraryrulercompass.code.tex
+ rulercompass.ins
+ rulercompass.pdf
+ rulercompass_doc.pdf
+ README.txt
+
+
+\endpostamble
+\usedir{tex/latex/rulercompass}
+\generate{\file{tikzlibraryrulercompass.code.tex}{\from{rulercompass.dtx}{tikzlibrary}}}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/rulercompass}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage[T1]{fontenc}
+\usepackage{csquotes}
+\usepackage{lmodern}
+\usepackage{alphalph}
+\usepackage{tikz}
+\usetikzlibrary{rulercompass}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{785}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+%
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \title{The \textsf{rulercompass} package: code}
+% \author{Andrew Stacey \\ \url{stacey@math.ntnu.no}}
+% \maketitle
+%
+%
+% \StopEventually{\PrintChanges}
+% \section{Implementation}
+%
+% \iffalse
+%<*tikzlibrary>
+% \fi
+%
+% Load in useful tikzlibraries.
+% \begin{macrocode}
+\usetikzlibrary{intersections,calc}
+% \end{macrocode}
+%^^A
+% Are we in draft mode (so display point labels)?
+% \begin{macrocode}
+\newif\ifrc@draft
+% \end{macrocode}
+%^^A
+% Is beamer loaded?
+% \begin{macrocode}
+\newif\ifrc@beamer
+% \end{macrocode}
+%^^A
+% When drawing arc segments, do we flip the segment?
+% \begin{macrocode}
+\newif\ifrc@fliparc
+% \end{macrocode}
+%^^A
+% A picture id that stays the same on beamer frames to make it easier to compare bounding boxes and other information of the ``same'' tikzpicture.
+% \begin{macrocode}
+\newcount\rc@picture@id
+% \end{macrocode}
+%^^A
+% Counter for our point labels.
+% \begin{macrocode}
+\newcounter{pointlabels}
+% \end{macrocode}
+%^^A
+% Set the beamer boolean.
+% \begin{macrocode}
+\@ifclassloaded{beamer}{%
+ \rc@beamertrue
+}{}
+% \end{macrocode}
+%^^A
+% Internal separator for the path-naming scheme
+% \begin{macrocode}
+\def\rc@pathsep{@}
+% \end{macrocode}
+%^^A
+% Are we running under beamer?
+% \begin{macrocode}
+\ifrc@beamer
+% \end{macrocode}
+% Make our counters reset on frames
+% \begin{macrocode}
+\resetcounteronoverlays{pointlabels}
+\resetcountonoverlays{rc@picture@id}
+% \end{macrocode}
+%^^A
+% Define an overlay-aware style
+% \begin{macrocode}
+\tikzset{
+ alt if exist/.code args={#1#2#3}{%
+ \@ifundefined{path@\the\rc@picture@id @#1}{%
+ \pgfkeysalso{#2}%
+ }{
+ \alt<.-\csname path@\the\rc@picture@id @#1\endcsname>{%
+ \pgfkeysalso{#2}%
+ }{
+ \pgfkeysalso{#3}%
+ }%
+ }%
+ },
+% \end{macrocode}
+% Save a path when it is used to compute a point
+% \begin{macrocode}
+ intersection/save/.code={%
+ \only<.>{%
+ \begingroup
+ \tikz@intersect@path@names@parse#1\tikz@stop
+ \protected@write\pgfutil@auxout{}{%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@a}{\the\beamer@slideinframe}%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@b}{\the\beamer@slideinframe}%
+ }%
+ \endgroup
+ }%
+ }
+}
+% \end{macrocode}
+%^^A
+% Define overlay-aware versions of the main macros.
+% \begin{macrocode}
+\newcommand<>\compass[3][]{%
+ \draw#4[#1,ruler compass/compass={#2}{#3}];
+}
+
+\newcommand<>\ruler[3][]{%
+ \draw#4[#1,ruler compass/ruler={#2}{#3}];
+}
+% \end{macrocode}
+%^^A
+% The \verb+\point+ macro is doubly overlay aware.
+% If the intersection has already been computed (say, on another slide of the same picture), reuse it.
+% \begin{macrocode}
+\newcommand<>\point[4][]{%
+ {%
+ \advance\c@pointlabels by 1\relax
+ \xdef\rc@temp{\thepointlabels}%
+ }%
+ \edef\rc@tempa{\the\rc@picture@id}%
+ \expandafter\ifx\csname rc@id@\rc@temp\endcsname\rc@tempa
+ \path#5 (\rc@temp) node[ruler compass/point,#1] {};
+ \else
+ \path#5 [name intersections={use=#2 and #3}] (intersection-#4) node[ruler compass/point,#1] {};
+ \fi
+}
+% \end{macrocode}
+%^^A
+% Now for the non-beamer versions
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%^^A
+% The overlay-aware style defaults to the first option.
+% \begin{macrocode}
+\tikzset{
+ alt if exist/.code args={#1#2#3}{%
+ \pgfkeysalso{#2}%
+ },
+% \end{macrocode}
+% Saving this means we don't have to have two versions of a more complicated bit of code.
+% \begin{macrocode}
+ intersection/save/.code={%
+ \begingroup
+ \tikz@intersect@path@names@parse#1\tikz@stop
+ \protected@write\pgfutil@auxout{}{%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@a}{\thepage}%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@b}{\thepage}%
+ }%
+ \endgroup
+ }
+}
+% \end{macrocode}
+%^^A
+% Non-overlay aware versions of the primary commands.
+% \begin{macrocode}
+\newcommand\compass[3][]{%
+ \draw [#1,ruler compass/compass={#2}{#3}];
+}
+
+\newcommand\ruler[3][]{%
+ \draw [#1,ruler compass/ruler={#2}{#3}];
+}
+
+\newcommand\point[4][]{%
+ \path [name intersections={use=#2 and #3}] (intersection-#4) node[ruler compass/point,#1] {};
+}
+% \end{macrocode}
+%^^A
+% End of non-beamer specific section
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%^^A
+% The following macros process the path/point specifications.
+% The first looks to see if the first character is a period.
+% \begin{macrocode}
+\def\rc@processpt#1{%
+ \pgfutil@ifnextchar.{\rc@processpt@@#1}{\rc@processpt@#1}}
+% \end{macrocode}
+% Nope, so now look for a plus or a minus.
+% \begin{macrocode}
+\def\rc@processpt@#1#2\pgf@stop{%
+ \pgfutil@in@+{#2}%
+ \ifpgfutil@in@
+ \let\@next=\rc@processpt@plus
+ \else
+ \pgfutil@in@-{#2}%
+ \ifpgfutil@in@
+ \let\@next=\rc@processpt@minus
+ \else
+ \let\@next=\rc@processpt@bare
+ \fi
+ \fi
+ \@next#1#2\pgf@stop
+}
+% \end{macrocode}
+%^^A
+% Okay, we got a period.
+% That means the current point, possibly with an offset.
+% \begin{macrocode}
+\def\rc@processpt@@#1.#2\pgf@stop{%
+ \def\rc@temp{#2}%
+ \ifx\rc@temp\pgfutil@empty
+ \edef\rc@temp{\thepointlabels}%
+ \else
+ \pgfmathparse{int(\the\c@pointlabels + #2)}%
+ \begingroup
+ \c@pointlabels=\pgfmathresult\relax
+ \xdef\rc@temp{\thepointlabels}%
+ \endgroup
+ \fi
+ \let#1\rc@temp
+}
+% \end{macrocode}
+%^^A
+% We need to add an offset to the given label, so need to compute the index of the label.
+% \begin{macrocode}
+\def\rc@processpt@plus#1#2+#3\pgf@stop{%
+ \pgfmathsetmacro\rc@temp{0}%
+ \rc@reverse#2\pgf@stop%
+ \pgfmathparse{int(\rc@temp + #3)}%
+ \begingroup
+ \c@pointlabels=\pgfmathresult\relax
+ \xdef\rc@temp{\thepointlabels}%
+ \endgroup
+ \let#1\rc@temp
+}
+% \end{macrocode}
+%^^A
+% Same, but with a minus.
+% \begin{macrocode}
+\def\rc@processpt@minus#1#2-#3\pgf@stop{%
+ \pgfmathsetmacro\rc@temp{0}%
+ \rc@reverse#2\pgf@stop%
+ \pgfmathparse{int(\rc@temp - #3)}%
+ \begingroup
+ \c@pointlabels=\pgfmathresult\relax
+ \xdef\rc@temp{\thepointlabels}%
+ \endgroup
+ \let#1\rc@temp
+}
+% \end{macrocode}
+%^^A
+% Simplest case.
+% \begin{macrocode}
+\def\rc@processpt@bare#1#2\pgf@stop{%
+ \def#1{#2}}
+% \end{macrocode}
+%^^A
+% Reverse lookup the counter value from its displayed format.
+% \begin{macrocode}
+\def\rc@reverse#1{%
+ \ifx#1\pgf@stop
+ \let\@next=\pgfutil@empty
+ \else
+ \let\@next=\rc@reverse
+ \pgfutil@tempcnta=`#1\relax
+ \pgfmathsetmacro\rc@temp{\rc@temp * \rc@factor + \the\pgfutil@tempcnta - \rc@initial}%
+ \fi
+ \@next}
+% \end{macrocode}
+%^^A
+% Compute the actual path name from the three token (lists).
+% \begin{macrocode}
+\def\rc@parsepath#1#2#3#4\pgf@stop{%
+ \rc@processpt\rc@tempa#3\pgf@stop
+ \rc@processpt\rc@tempb#4\pgf@stop
+ \xdef#1{#2\rc@pathsep\rc@tempa\rc@pathsep\rc@tempb}%
+}
+% \end{macrocode}
+%^^A
+% Now we install all our styles
+% \begin{macrocode}
+\tikzset{
+% \end{macrocode}
+%^^A
+% Code which initialises our counters at the start of a picture.
+% \begin{macrocode}
+ every picture/.append style={
+ ruler compass/at begin picture
+ },
+% \end{macrocode}
+%^^A
+% Passes the paths to the intersection but also takes note of their use.
+% \begin{macrocode}
+ intersection/use/.code args={#1 and #2}{%
+ \rc@parsepath\rc@pta#1\pgf@stop
+ \rc@parsepath\rc@ptb#2\pgf@stop
+ \pgfkeysalso{
+ of={\rc@pta} and \rc@ptb,
+ save={\rc@pta} and \rc@ptb,
+ }
+ },
+% \end{macrocode}
+%^^A
+% \verb+to path+ for a circle through a given point.
+% \begin{macrocode}
+ circle through/.style={
+ to path={
+ \pgfextra{
+ \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
+ \pgfmathsetmacro\rc@radius{veclen(\pgf@x - \pgf@xa,\pgf@y - \pgf@ya)}%
+ }
+ circle[radius=\rc@radius pt] (\tikztotarget)
+ }
+ },
+% \end{macrocode}
+%^^A
+% Flip an arc when drawing a segment.
+% \begin{macrocode}
+ arc flip/.is if=rc@fliparc,
+% \end{macrocode}
+%^^A
+% Arc from one point to another centred on specified point.
+% \begin{macrocode}
+ centred arc to/.code 2 args={%
+ \tikz@scan@one@point\pgfutil@firstofone(#1)\relax
+ \pgfmathsetmacro\rc@radius{veclen(\tikz@lastx-\pgf@x,\tikz@lasty-\pgf@y)}%
+ \pgfmathsetmacro\rc@sangle{atan2(\tikz@lasty - \pgf@y,\tikz@lastx - \pgf@x)}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone(#2)\relax
+ \pgfmathsetmacro\rc@eangle{atan2(\pgf@y - \pgf@ya,\pgf@x - \pgf@xa)}%
+ \pgfmathsetmacro\rc@eangle{\rc@eangle < \rc@sangle ? \rc@eangle + 360 : \rc@eangle}%
+ \ifrc@fliparc
+ \pgfmathsetmacro\rc@eangle{\rc@eangle - 360}%
+ \fi
+ \pgfkeysalso{start angle=\rc@sangle, end angle=\rc@eangle, radius=\rc@radius pt}
+ },
+% \end{macrocode}
+%^^A
+% Most of our keys are in this family.
+% \begin{macrocode}
+ ruler compass/.is family,
+ ruler compass/.cd,
+% \end{macrocode}
+%^^A
+% Draft mode displays the labels.
+% \begin{macrocode}
+ draft mode/.is if=rc@draft,
+% beamer mode/.is if=rc@beamer,
+% \end{macrocode}
+%^^A
+% This is the actual code for resetting the counters.
+% \begin{macrocode}
+ at begin picture/.style={
+ execute at begin picture={
+ \global\advance\rc@picture@id by 1\relax
+ \setcounter{pointlabels}{0}%
+ },
+ },
+% \end{macrocode}
+%^^A
+% Styling the point labels.
+% \begin{macrocode}
+ point labels/.is choice,
+ point labels/arabic/.code={%
+ \renewcommand\thepointlabels{\@arabic \c@pointlabels}%
+ \def\rc@initial{48}%
+ \def\rc@factor{10}%
+ },
+ point labels/alph/.code={%
+ \renewcommand\thepointlabels{\@alph \c@pointlabels}%
+ \def\rc@initial{96}%
+ \def\rc@factor{26}%
+ },
+ point labels/Alph/.code={%
+ \renewcommand\thepointlabels{\@Alph \c@pointlabels}%
+ \def\rc@initial{64}%
+ \def\rc@factor{26}%
+ },
+% \end{macrocode}
+%^^A
+% Styling the point labels with the \verb+alphalph+ package.
+% \begin{macrocode}
+ point labels/alphalph/.code={%
+ \@ifundefined{alphalph}{%
+ \message{The "alphalph" option only works if the 'alphalph' package has been loaded (using "alph" instead).}%
+ \renewcommand\thepointlabels{\@alph \c@pointlabels}%
+ \def\rc@initial{96}%
+ \def\rc@factor{26}%
+ }{%
+ \renewcommand\thepointlabels{\alphalph \c@pointlabels}%
+ \def\rc@initial{96}%
+ \def\rc@factor{26}%
+ }%
+ },
+ point labels/AlphAlph/.code={%
+ \@ifundefined{alphalph}{%
+ \message{The "AlphAlph" option only works if the 'alphalph' package has been loaded (using "Alph" instead).}%
+ \renewcommand\thepointlabels{\@Alph \c@pointlabels}%
+ \def\rc@initial{64}%
+ \def\rc@factor{26}%
+ }{%
+ \renewcommand\thepointlabels{\AlphAlph \c@pointlabels}%
+ \def\rc@initial{64}%
+ \def\rc@factor{26}%
+ }%
+ },
+% \end{macrocode}
+%^^A
+% Styles for if the path is still in use or not.
+% \begin{macrocode}
+ construction in use/.style={
+ draw=blue
+ },
+ construction not in use/.style={
+ draw=gray!75,
+ },
+% \end{macrocode}
+%^^A
+% Code for drawing a circle.
+% \begin{macrocode}
+ compass/.code 2 args={%
+ \rc@processpt\rc@pta#1\pgf@stop
+ \rc@processpt\rc@ptb#2\pgf@stop
+ \pgfkeysalso{ruler compass/compass aux={\rc@pta}{\rc@ptb}}%
+ },
+ compass aux/.style 2 args={
+ alt if exist={c\rc@pathsep#1\rc@pathsep#2}{
+ ruler compass/construction in use/.try,
+ }{
+ ruler compass/construction not in use/.try
+ },
+ name path=c\rc@pathsep#1\rc@pathsep#2,
+ ruler compass/every construction path/.try,
+ ruler compass/every compass/.try,
+ insert path={
+ (#1) to[circle through] (#2)
+ node[name=c\rc@pathsep#1\rc@pathsep#2\rc@pathsep centre,ruler compass/aux point={#1}] {}
+ node[name=c\rc@pathsep#1\rc@pathsep#2\rc@pathsep rim,ruler compass/aux point={#2}] {}
+ },
+ },
+% \end{macrocode}
+%^^A
+% Code for drawing a straight line.
+% \begin{macrocode}
+ ruler/.code 2 args={%
+ \rc@processpt\rc@pta#1\pgf@stop
+ \rc@processpt\rc@ptb#2\pgf@stop
+ \pgfkeysalso{ruler compass/ruler aux={\rc@pta}{\rc@ptb}}%
+ },
+ ruler aux/.style 2 args={
+ overlay,
+ alt if exist={r\rc@pathsep#1\rc@pathsep#2}{
+ ruler compass/construction in use/.try
+ }{
+ ruler compass/construction not in use/.try
+ },
+ name path=r\rc@pathsep#1\rc@pathsep#2,
+ ruler compass/every construction path/.try,
+ ruler compass/every ruler/.try,
+ insert path={
+ ($(#1)!\pgfkeysvalueof{/tikz/ruler compass/ruler length}!(#2)$) -- ($(#2)!\pgfkeysvalueof{/tikz/ruler compass/ruler length}!(#1)$)
+ node[name=r\rc@pathsep#1\rc@pathsep#2\rc@pathsep start,ruler compass/aux point={#1}] {}
+ node[name=r\rc@pathsep#1\rc@pathsep#2\rc@pathsep end,ruler compass/aux point={#2}] {}
+ },
+ },
+% \end{macrocode}
+%^^A
+% Sets the ruler length.
+% \begin{macrocode}
+ ruler length/.initial=20,
+% \end{macrocode}
+%^^A
+% Auxiliary point style.
+% \begin{macrocode}
+ aux point/.style={
+ node contents/.try={},
+ at={(#1)},
+ ruler compass/every aux point/.try
+ },
+% \end{macrocode}
+%^^A
+% Draws a point as a coordinate with another node for styling.
+% \begin{macrocode}
+ point/.style={
+ ruler compass/name it,
+ coordinate,
+ node contents/.try={},
+ insert path={
+ node[
+ fill=#1,
+ circle,
+ minimum width=1mm,
+ inner sep=0mm,
+ reset label anchor,
+ anchor=center,
+ node contents/.try={},
+ ruler compass/every point/.try,
+ ] {}
+ }
+ },
+% \end{macrocode}
+%^^A
+% Forces a point to be named.
+% \begin{macrocode}
+ name it/.code={%
+ \ifx\tikz@fig@name\pgfutil@empty
+ \stepcounter{pointlabels}%
+ \pgfkeysalso{name=\thepointlabels}%
+ \expandafter\xdef\csname rc@id@\thepointlabels\endcsname{\the\rc@picture@id}%
+ \ifrc@draft
+ \pgfkeysalso{label={[ruler compass/draft label/.try]\thepointlabels}}%
+ \fi
+ \fi
+ },
+ point/.default=black,
+}
+% \end{macrocode}
+%^^A
+% Sets the initial scale and offset of the enclosing box.
+% \begin{macrocode}
+\def\rc@scale{1}
+\def\rc@offset{0pt}
+% \end{macrocode}
+%^^A
+% Sets the bounding box from the auxiliary file.
+% \begin{macrocode}
+\def\jump@setbb#1#2#3{%
+ \@ifundefined{jump@#1@maxbb}{%
+ \expandafter\gdef\csname jump@#1@maxbb\endcsname{#3}%
+ }{%
+ \csname jump@#1@maxbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ #3
+ \pgfmathsetlength\pgf@x{max(\pgf@x,\pgf@xa)}%
+ \pgfmathsetlength\pgf@y{max(\pgf@y,\pgf@ya)}%
+ \expandafter\xdef\csname jump@#1@maxbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ }
+ \@ifundefined{jump@#1@minbb}{%
+ \expandafter\gdef\csname jump@#1@minbb\endcsname{#2}%
+ }{%
+ \csname jump@#1@minbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ #2
+ \pgfmathsetlength\pgf@x{min(\pgf@x,\pgf@xa)}%
+ \pgfmathsetlength\pgf@y{min(\pgf@y,\pgf@ya)}%
+ \expandafter\xdef\csname jump@#1@minbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ }
+}
+% \end{macrocode}
+%^^A
+% Installs the code to save the bounding box.
+% \begin{macrocode}
+\tikzset{
+ stop jumping/.style={
+ execute at end picture={%
+ \pgfmathsetlength\pgf@xa{\pgf@picminx/\rc@scale}%
+ \pgfmathsetlength\pgf@ya{\pgf@picminy/\rc@scale}%
+ \pgfmathsetlength\pgf@xb{\pgf@picmaxx/\rc@scale}%
+ \pgfmathsetlength\pgf@yb{\pgf@picmaxy/\rc@scale}%
+ \immediate\write\pgfutil@auxout{%
+ \noexpand\jump@setbb{\the\rc@picture@id}{\noexpand\pgfpoint{\the\pgf@xa}{\the\pgf@ya}}{\noexpand\pgfpoint{\the\pgf@xb}{\the\pgf@yb}}%
+ },
+ \pgf@x=\pgf@picminx
+ \pgf@y=\pgf@picminy
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@x=\pgf@picmaxx
+ \pgf@y=\pgf@picmaxy
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \edef\rc@temp{\noexpand\path (\the\pgf@xa - \rc@offset,\the\pgf@ya - \rc@offset) -- (\the\pgf@x + \rc@offset,\the\pgf@y + \rc@offset);}%
+ \rc@temp
+ },
+ },
+% \end{macrocode}
+%^^A
+% Scales the picture to fit inside a given rectangle.
+% \begin{macrocode}
+ max size/.code 2 args={%
+ \pgfutil@ifundefined{jump@\the\rc@picture@id @maxbb}{}{%
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \advance\pgf@xa by -\pgf@x
+ \advance\pgf@ya by -\pgf@y
+ \advance\pgf@xa by \rc@offset
+ \advance\pgf@xa by \rc@offset
+ \advance\pgf@ya by \rc@offset
+ \advance\pgf@ya by \rc@offset
+ \pgfmathsetmacro\rc@xratio{\pgf@xa > #1 ? \pgf@xa/#1 : 1}%
+ \pgfmathsetmacro\rc@yratio{\pgf@ya > #2 ? \pgf@ya/#2 : 1}%
+ \pgfmathsetmacro\rc@scale{1/max(\rc@xratio,\rc@yratio)}%
+ \pgfkeysalso{scale=\rc@scale}%
+ }
+ },
+% \end{macrocode}
+%^^A
+%^^A
+% \begin{macrocode}
+ enclosing box/offset/.store in=\rc@offset,
+ constrain/.style={
+ execute at begin picture=\constrain
+ }
+}
+% \end{macrocode}
+%^^A
+% Defines a clip to the enclosing box.
+% \begin{macrocode}
+\newcommand\constrain{%
+ \pgfutil@ifundefined{jump@\the\rc@picture@id @minbb}{}{%
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \pgfmathsetlength\pgf@xa{\pgf@x-\rc@offset}%
+ \pgfmathsetlength\pgf@ya{\pgf@y-\rc@offset}%
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \pgfmathsetlength\pgf@xb{\pgf@x+\rc@offset}%
+ \pgfmathsetlength\pgf@yb{\pgf@y+\rc@offset}%
+ \edef\rc@temp{\noexpand\clip (\the\pgf@xa,\the\pgf@ya) rectangle (\the\pgf@xb,\the\pgf@yb);}
+ \ifpgf@relevantforpicturesize
+ \pgf@relevantforpicturesizefalse
+ \rc@temp
+ \pgf@relevantforpicturesizetrue
+ \else
+ \rc@temp
+ \fi
+ }%
+}
+
+% \end{macrocode}
+%^^A
+% Defines the enclosing box node.
+% \begin{macrocode}
+\expandafter\def\csname pgf@sh@ns@enclosing box\endcsname{rectangle}
+\expandafter\def\csname pgf@sh@np@enclosing box\endcsname{%
+ \pgfutil@ifundefined{jump@\the\rc@picture@id @minbb}{%
+ \def\southwest{\pgfqpoint{\pgf@picminx}{\pgf@picminy}}%
+ \def\northeast{\pgfqpoint{\pgf@picmaxx}{\pgf@picmaxy}}%
+}{%
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \pgfmathsetlength\pgf@xa{\pgf@x-\rc@offset}%
+ \pgfmathsetlength\pgf@ya{\pgf@y-\rc@offset}%
+ \edef\southwest{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \pgfmathsetlength\pgf@xb{\pgf@x+\rc@offset}%
+ \pgfmathsetlength\pgf@yb{\pgf@y+\rc@offset}%
+ \edef\northeast{\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}%
+ }%
+}
+\expandafter\def\csname pgf@sh@nt@enclosing box\endcsname{{1}{0}{0}{1}{0pt}{0pt}}
+\expandafter\def\csname pgf@sh@pi@enclosing box\endcsname{\pgfpictureid}
+
+
+% \end{macrocode}
+%^^A
+% Defines the layer code for individual paths and nodes.
+% \begin{macrocode}
+\tikzset{
+ on layer/.code={
+ \pgfonlayer{#1}\begingroup
+ \aftergroup\endpgfonlayer
+ \aftergroup\endgroup
+ },
+ node on layer/.code={
+ \gdef\node@@on@layer{%
+ \setbox\tikz@tempbox=\hbox\bgroup\pgfonlayer{#1}\unhbox\tikz@tempbox\endpgfonlayer\egroup}
+ \aftergroup\node@on@layer
+ },
+ reset label anchor/.code={%
+ \let\tikz@auto@anchor=\pgfutil@empty
+ \def\tikz@anchor{#1}
+ },
+ reset label anchor/.default=center
+}
+\def\node@on@layer{\aftergroup\node@@on@layer}
+% \end{macrocode}
+%^^A
+% Sets the point label style.
+% \begin{macrocode}
+\@ifpackageloaded{alphalph}%
+{
+ \tikzset{ruler compass/point labels=alphalph}
+}
+{
+ \tikzset{ruler compass/point labels=alph}
+}
+
+\endinput
+% \end{macrocode}
+% \iffalse
+%</tikzlibrary>
+% \fi
+%
+%\Finale \ No newline at end of file
diff --git a/graphics/pgf/contrib/rulercompass/rulercompass.pdf b/graphics/pgf/contrib/rulercompass/rulercompass.pdf
new file mode 100644
index 0000000000..3e6d56f47f
--- /dev/null
+++ b/graphics/pgf/contrib/rulercompass/rulercompass.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/rulercompass/rulercompass_doc.pdf b/graphics/pgf/contrib/rulercompass/rulercompass_doc.pdf
new file mode 100644
index 0000000000..651eb86b0b
--- /dev/null
+++ b/graphics/pgf/contrib/rulercompass/rulercompass_doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/rulercompass/rulercompass_doc.tex b/graphics/pgf/contrib/rulercompass/rulercompass_doc.tex
new file mode 100644
index 0000000000..dbc696b845
--- /dev/null
+++ b/graphics/pgf/contrib/rulercompass/rulercompass_doc.tex
@@ -0,0 +1,479 @@
+\immediate\write18{tex rulercompass.dtx}
+\documentclass{ltxdoc}
+\usepackage{alphalph}
+\usepackage{fancyvrb}
+\usepackage{listings}
+\usepackage{tikz}
+\usepackage{hyperref}
+\usetikzlibrary{rulercompass}
+
+\pgfmathsetmacro\ptra{2}%{.5 + .25*rand}
+\pgfmathsetmacro\ptrb{2.7}%{.5 + .25*rand}
+\pgfmathsetmacro\ptaa{30}%180*rand}
+\pgfmathsetmacro\ptab{70}%180*rand}
+
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+
+
+\def\figurename{Example}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \centering
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\newcommand\tikzname{\textsf{Ti\textit{k}Z}}
+
+\title{The \textsf{rulercompass} \tikzname\ Library}
+\author{Andrew Stacey}
+\date{10th December 2013}
+
+\begin{document}
+\maketitle
+
+\section{Introduction}
+
+The \textsf{rulercompass} \tikzname\ library provides some commands and styles for drawing straight-{}edge\footnote{The name \textsf{straightedgecompass} was just a bit too long.} and compass diagrams in \tikzname.
+With this, one can draw diagrams such as that in Example~\ref{fig:bisect}.
+
+\begin{figure}
+\centering
+\begin{example}
+\begin{tikzpicture}[
+ stop jumping,
+ constrain
+]
+\path (0,0) node[name=0,ruler compass/point=red,label={0}];
+\path (0) ++(30:2) node[ruler compass/point=red,label={a}];
+\ruler{0}{a}
+\compass{0}{a}
+\compass{a}{0}
+\point{c0a}{ca0}{1}
+\point{c0a}{ca0}{2}
+\ruler{b}{c}
+\end{tikzpicture}
+\end{example}
+\caption{Constructing the perpendicular bisector between two points}
+\label{fig:bisect}
+\end{figure}
+
+\section{Straight-{}Edge and Compass Diagrams}
+
+To understand the commands of this package, it is necessary to know a bit about the type of diagram involved.
+A straight-{}edge and compass diagram consists of a family of points in the plane, a family of straight lines, and a family of circles.
+The usual rules for constructing these families is to start with a given set of points and apply the following rules:
+
+\begin{enumerate}
+\item Construct a straight line passing through any two points.
+\item Construct a circle centred at one point which passes through another point.
+\item Place a point at an intersection of two lines, two circles, or a circle and a line.
+\end{enumerate}
+
+The usual goal of a straight-{}edge and compass diagram is to place a point at a particular position given a certain family of initial points.
+Some examples are:
+%
+\begin{enumerate}
+\item Given three points in the plane, say \(0, a, b\), view \(a\) and \(b\) as vectors from \(0\) and construct their sum, \(a + b\).
+\item Given four points in the plane, say \(0, 1, a, b\), view \(a\) and \(b\) as complex numbers with \(0\) and \(1\) interpreted in the obvious way, and construct their product, \(a b\).
+\item Given two points in the plane, say \(0\) and \(1\), construct a regular hexagon with \(0\) and \(1\) as adjacent vertices.
+\item Given two points in the plane, say \(0\) and \(1\), construct a regular \(17\)--{}sided polygon with \(0\) and \(1\) as adjacent vertices.
+\end{enumerate}
+%
+Often, a diagram is completed by ``inking in'' some segments of the lines and circles.
+
+When drawing a straight-{}edge and compass diagram we need to be able to carry out the three constructions.
+Whilst none correspond to basic \tikzname\ path operations, they are all possible with the use of some additional libraries, namely the \Verb+intersections+ and \Verb+calc+ libraries.
+These are therefore loaded automatically.
+
+
+\section{Usage}
+
+This package comes as a \tikzname\ library so can be loaded in the same way as other \tikzname\ libraries:
+%
+\begin{verbatim}
+\usetikzlibrary{rulercompass}
+\end{verbatim}
+%
+This loads in a family of commands and \tikzname\ styles for drawing these diagrams.
+
+\subsection{Naming Schemes}
+
+The various constructions refer to points or paths already constructed (or given at the start).
+Therefore, it is necessary to have a naming scheme.
+
+Points are labelled automatically using an internal \LaTeX\ counter, \Verb+pointlabels+.
+The format name can be changed in the same way as the format of any \LaTeX\ counter, by redefining \Verb+\thepointlabels+.
+However, because it is sometimes needed to be able to go back from the label to the value of the counter, it is better to change it by one of the \tikzname\ styles provided.
+As a default, \Verb+rulercompass+ uses lowercase letters.
+Thus the first point will be \Verb+a+, the second \Verb+b+, and so on.
+Points are actually coordinates so these can be used as such within the \Verb+tikzpicture+.
+
+Since paths are defined in terms of points, the naming scheme for paths is a triplet of tokens or token lists where the first distinguishes between lines and circles and the other two are the two points used to construct the path.
+
+\begin{itemize}
+\item \Verb+rab+ is a line (\Verb+r+ for ``ruler'') through the points \Verb+a+ and \Verb+b+.
+
+Note that although \Verb+rab+ and \Verb+rba+ are the same line, the two names cannot be used interchangeably.
+The order of points must be the same as that used in the construction of the line.
+
+\item \Verb+c{ab}v+ is a circle (\Verb+c+ for ``compass'') with centre \Verb+ab+ passing through \Verb+v+.
+
+Here there is no risk of confusion since \Verb+cab+ and \Verb+cba+ are distinct circles.
+\end{itemize}
+
+\subsection{Primary Commands}
+
+There are three primary commands available:
+
+\begin{itemize}
+\item \Verb+\point[style]{<path>}{<path>}{<intersection>}+
+
+This marks an intersection with a point, using the next label.
+Some pairs of paths have two intersection points and the \Verb+<intersection>+ argument is used to choose which one to mark.
+
+\item \Verb+\ruler[style]{<point>}{<point>}+
+
+This constructs the line through the two points.
+
+\item \Verb+\compass[style]{<point>}{<point>}+
+
+This constructs the circle centred at the first point which passes through the second point.
+\end{itemize}
+
+If the \Verb+rulercompass+ library detects that \Verb+beamer+ has been loaded, then all of the above are made overlay-{}aware.
+In addition, the \Verb+\point+ command does a little optimisation: as intersections can be expensive to compute (if there are a lot of them), then it tries to figure out if this particular intersection has already been computed in a previous version of this diagram.
+
+Example~\ref{fig:bisect} contains an example of each of these commands.
+
+\subsection{Styles}
+
+The primary commands all take an optional argument to which arbitrary \tikzname\ styles can be passed.
+Each command internally expands to a \Verb+\draw+ (for \Verb+\ruler+ and \Verb+\compass+) or a \Verb+node+ on a \Verb+\path+ (for \Verb+\point+) with the optional argument inserted in a suitable place.
+If this does not provide enough opportunity for control, there are style equivalents of the commands that can be used directly:
+
+\begin{itemize}
+\item \Verb+ruler compass/point=<colour>+
+
+This marks the current point.
+Inside the \Verb+\point+ command, this is invoked inside a \Verb+node+ after the appropriate intersection has been computed.
+The \Verb+<colour>+ is optional.
+If the node has not already been named (via \Verb+name=<name>+) then this gives it the next name as determined by the \Verb+pointlabels+ counter.
+
+\item \Verb+ruler compass/ruler={<point>}{<point>}+
+
+This inserts the line through the points into the current path.
+
+\item \Verb+ruler compass/compass={<point>}{<point>}+
+
+This inserts the compass with centre the first point which passes through the second point into the current path.
+\end{itemize}
+
+The initial two commands in Example~\ref{fig:bisect} use the style format for greater flexibility.
+In the first, the \Verb+name=0+ key overrides the automatic naming of the point meaning that this point is known as \Verb+0+ instead of \Verb+a+.
+In both the first and the second, a colour is specified.
+
+There are a variety of styles that can be used to change how the various constructions are rendered:
+
+\begin{itemize}
+\item \Verb+ruler compass/every point+
+\item \Verb+ruler compass/every construction path+
+
+Encompasses both \Verb+ruler+ and \Verb+compass+.
+
+\item \Verb+ruler compass/every ruler+
+\item \Verb+ruler compass/every compass+
+\item \Verb+ruler compass/construction in use+ and
+ \Verb+ruler compass/construction not in use+
+
+When \Verb+beamer+ is detected, every time a path is used to compute a point then the current frame is noted.
+This means that on the second (and subsequent) runs, it is possible to style paths differently depending on whether or not they are still in use.
+
+\item \Verb+ruler compass/every aux point+
+
+When a path is computed, then the two points that are used in its construction are designated as ``auxiliary points'' and are given an extra style.
+This is mainly of use when stepping through a construction in \Verb+beamer+.
+
+\item \Verb+ruler compass/draft label+
+
+If in draft mode (determined by the key \Verb+ruler compass/draft mode+), then constructed points are labelled.
+This can be used to style the label.
+\end{itemize}
+
+Some other miscellaneous keys are the following.
+
+\begin{itemize}
+\item \Verb+ruler compass/draft mode=<true|false>+
+
+This controls a switch to display the labels above the constructed points.
+
+\item \Verb+ruler compass/ruler length=<length>+
+
+The default line extends \(20\mathrm{cm}\) beyond each point.
+This changes that.
+
+\item \Verb+ruler compass/point labels=<arabic|alph|Alph|alphalph|AlphAlph>+
+
+This changes the style of the point labels.
+For the last two, the \Verb+alphalph+ package must be loaded.
+
+If this library detects that the \Verb+alphalph+ package has already been loaded then the default is \Verb+alphalph+, otherwise the default is \Verb+alph+.
+
+It is better to use this than to redefine \Verb+\thepointlabels+.
+\end{itemize}
+
+\section{Relative Labels}
+
+The system for labelling points has rudimentary support for arithmetic.
+For this, it is important that \TeX\ know how to reverse the labelling system to get a number back from a label and this is why the key \Verb+ruler compass/point labels+ should be used to change the labelling format.
+The operations allowed are addition and subtraction of a number from a label, together with the use of a period to designate the last marked point.
+This makes it easier to work on a drawing in parts without having to know exactly how many points are constructed in each part, or to define auxiliary macros to construct some number of extra points.
+
+\begin{figure}
+\begin{example}
+\begin{tikzpicture}[
+ stop jumping,
+ constrain
+]
+\path (0,0) node[name=0,ruler compass/point=red,label={0}];
+\path (0) ++(30:2) node[ruler compass/point=red,label={a}];
+\path (0) ++(70:2.7) node[ruler compass/point=red,label={b}];
+\ruler{0}{.}
+\ruler{0}{a}
+\compass{0}{.-1}
+\point{r0b}{c0a}{1}
+\compass{0}{a+1}
+\point{r0a}{c0{a+1}}{1}
+\end{tikzpicture}
+\end{example}
+\caption{Demonstrating relative point labels.}
+\label{fig:ptlabel}
+\end{figure}
+
+In Example~\ref{fig:ptlabel}, in the line \Verb+\ruler{0}{.}+ then the second point is \Verb+b+.
+In the line \Verb+\compass{0}{.-1}+ then the second point is \Verb+a+.
+In the last line, the second path is the circle with centre \Verb+0+ which goes through \Verb+b+.
+
+\section{Bounding Boxes}
+
+There are two considerations here relating to bounding boxes.
+The first is the ``infinite'' lines.
+Even though these are not actually infinite, they are constructed to be very long (so that any intersection is almost certain to actually exist).
+This usually means that they dwarf the actual region of interest.
+To ensure that the diagram does not get too big, the lines are actually drawn without affecting the bounding box (via the \Verb+overlay+ key), but that simply means that they can bleed into the surrounding text.
+Clearly a \Verb+\clip+ would be useful here, but it would also be nice not to have to compute it by hand.
+
+The second consideration comes when using \Verb+beamer+ and doing a step-{}by-{}step construction.
+Each piece of the construction adds a new element and thus, potentially, changes the bounding box.
+This could lead to the picture jumping around on the page.
+Inserting a \Verb+\path+ of a suitable size would solve this, but again it would be nice not to have to compute this by hand.
+
+Both of these have the same solution: compute the effective bounding box at the end of the construction and use that information at the start.
+This involves saving information to the \Verb+aux+ file and so requires at least two runs.
+
+In the first situation, we clip the picture to its eventual bounding box (possibly slightly enlarged).
+In the second, we add a rectangle of the eventual bounding box at the end (adding it at the end means that we can first compute the bounding box without it to ensure that our saved bounding box is always up to date).
+
+Once we give ourselves the technology to save the bounding box, we can also think of other ways to use it.
+One more is given here: the ability to automatically resize a \Verb+tikzpicture+ to fit inside a given rectangle (preserving the aspect ratio).
+
+In addition, a pseudo-{}node \Verb+enclosing box+ is defined which can be used like the \Verb+current bounding box+ pseudo-{}node.
+
+The original code for saving and reusing the bounding box comes from the \href{http://tex.stackexchange.com}{TeX-SX} site question \href{http://tex.stackexchange.com/q/18704/86}{How can I fix jumping TikZ pictures in beamer?}.
+
+
+
+This code provides the following new keys which are designed to be used in the optional argument to the \Verb+tikzpicture+ environment:
+
+\begin{itemize}
+\item \Verb+stop jumping+
+
+This installs the code to save the bounding box and also to insert the rectangle at the end of the picture.
+
+
+
+\item \Verb+max size={<width>}{<height>}+
+
+This compares the (saved) bounding box to the given rectangle and then scales down (only down) to ensure that it fits inside the given rectangle.
+
+\item \Verb+enclosing box/offset=<length>+
+
+This adds a little extra room around the bounding box.
+This has an effect in two places: on the computation in the \Verb+max size+ it ensures that the extra room fits inside the given rectangle, and on the size of the \Verb+enclosing box+ pseudo-{}node.
+
+\item \Verb+constrain+
+
+If the \Verb+enclosing box+ pseudo-{}node is used directly, it should almost always be used with the \Verb+overlay+ key because otherwise there is potential for the bounding box size to explode.
+
+This makes it somewhat tricky to use with the \Verb+\clip+ path constructor as that does its own stuff with the computation of the bounding box.
+For this reason, the key \Verb+constrain+ is provided which does a ``safe'' clip to the enclosing box.
+
+If this is to be used somewhere other than at the start of the picture, there is the command \Verb+\constrain+.
+\end{itemize}
+
+\section{Drawing Segments}
+
+Drawing a line segment between two points is already adequately provided for by \tikzname.
+Drawing an arc is not, so this library provides a key \Verb+centred arc to={<point>}{<point>}+ which draws an arc from the current point to the second specified point which is centred at the first specified point.
+The key \Verb+arc flip+ can be used to switch which part of the circle is drawn.
+These keys are for the \Verb+arc+ path constructor, as in Example~\ref{ex:arcs}.
+
+\begin{figure}
+\begin{example}
+\begin{tikzpicture}
+\path (0,0) node[name=0,ruler compass/point=red,label={0}];
+\path (0) ++(30:2) node[ruler compass/point=red,label={a}];
+\path (0) ++(70:2.7) node[ruler compass/point=red,label={b}];
+\compass{0}{a}
+\compass{a}{b}
+\point{c0a}{cab}{1}
+\point{c0a}{cab}{2}
+\draw[ultra thick,red] (c) arc[centred arc to={a}{d}] arc[arc flip,centred arc to={0}{c}];
+\end{tikzpicture}
+\end{example}
+\caption{Drawing an arc.}
+\label{ex:arcs}
+\end{figure}
+
+
+\section{Miscellaneous Extras}
+
+As a little extra (because I found them useful when using this library), this library also provides the code used in the answers to \href{http://tex.stackexchange.com/a/20426/86}{``Z-level in \tikzname''} and \href{http://tex.stackexchange.com/a/43946/86}{How can I force \tikzname\ pin angle?}.
+The first provides a per-{}path and per-{}node layering system, the second helps with label positioning.
+The extra keys are:
+
+\begin{itemize}
+\item \Verb+on layer=<layer>+
+
+This puts the current path on a particular layer.
+
+\item \Verb+node on layer=<layer>+
+
+This is the same, but for nodes.
+
+\item \Verb+reset label anchor=<anchor>+
+
+This turns off \tikzname's automatic label anchoring to make it possible to specify a particular anchor to use.
+\end{itemize}
+
+\section{Beamer Examples}
+
+The following show some examples using \Verb+beamer+ to step through.
+As these are ``full screen'', the page is used as the bounding box and so the \Verb+constrain+ key is not needed.
+
+\subsection{Addition of Points}
+
+\lstinputlisting{rc_example_add.tex}
+
+The final picture looks something like the following.
+
+\begin{center}
+\begin{tikzpicture}[
+ stop jumping,
+ constrain
+% max size={\textwidth}{\textheight},
+ ]
+% Mark two points: one at the centre of the page and one a random offset. These define our unit of length for constructions
+\path (0,0) node[name=0,ruler compass/point=red,label={0}];
+\path (0) ++(\ptaa:\ptra) node[ruler compass/point=red,label={a}];
+\path (0) ++(\ptab:\ptrb) node[ruler compass/point=red,label={b}];
+\ruler{0}{b}
+\ruler{0}{a}
+\compass{0}{a}
+\point{r0b}{c0a}{2}
+\compass{0}{b}
+\point{r0a}{c0b}{2}
+\compass{a}{0}
+\point{ca0}{c0a}{1}
+\point{ca0}{c0a}{2}
+\ruler{e}{f}
+\point[label={[above]\(a/2\)}]{r0a}{ref}{1}
+\compass{g}{d}
+\point{r0a}{cgd}{1}
+\compass{a}{h}
+\compass{b}{0}
+\point{cb0}{c0b}{1}
+\point{cb0}{c0b}{2}
+\ruler{i}{j}
+\point[label={[above]\(b/2\)}]{r0b}{rij}{1}
+\compass{k}{c}
+\point{r0b}{ckc}{1}
+\compass{b}{l}
+\point[fill=red,label={[above]\(a+b\)}]{cbl}{cah}{1}
+\end{tikzpicture}%
+\end{center}
+
+\subsection{Multiplication of Points}
+
+\lstinputlisting{rc_example_mult.tex}
+
+A comparison of the \Verb+beamer+ version with the following picture will show the wisdom of a step-{}by-{}step approach to these drawings.
+
+\begin{center}
+\begin{tikzpicture}[
+ stop jumping,
+ constrain
+ ]
+% Mark two points: one at the centre of the page and one a random offset. These define our unit of length for constructions
+\path (0,0) node[name=0,ruler compass/point=red,label={0}];
+\path (1,0) node[name=1,ruler compass/point=red,label={1}];
+\path (0) ++(\ptaa:\ptra) node[ruler compass/point=red,label={a}];
+\path (0) ++(\ptab:\ptrb) node[ruler compass/point=red,label={b}];
+\ruler{0}{1}
+\ruler{0}{b}
+\compass{0}{1}
+\point{c01}{r0b}{1}
+\compass{1}{a}
+\point{c1a}{r01}{1}
+\compass{0}{d}
+\point{c0d}{r0b}{1}
+\point{c0d}{r0b}{2}
+\compass{0}{a}
+\compass{c}{e}
+\point{c0a}{cce}{2}
+\point{c0a}{r0b}{2}
+\ruler{0}{g}
+\compass{0}{b}
+\compass{b}{0}
+\point{c0b}{cb0}{1}
+\point{c0b}{cb0}{2}
+\ruler{i}{j}
+\point{r0b}{rij}{1}
+\compass{k}{c}
+\point{r0b}{ckc}{1}
+\compass{0}{l}
+\compass{l}{0}
+\point{c0l}{cl0}{1}
+\point{c0l}{cl0}{2}
+\ruler{m}{n}
+\point{r0b}{rmn}{1}
+\compass{o}{f}
+\point{cof}{r0b}{1}
+\compass{o}{h}
+\point{coh}{r0b}{1}
+\compass{l}{q}
+\compass{b}{p}
+\point{clq}{cbp}{2}
+\ruler{b}{r}
+\point[fill=red,label={[above]\(ab\)}]{rbr}{r0g}{1}
+\end{tikzpicture}%
+\end{center}
+
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/rulercompass/tikzlibraryrulercompass.code.tex b/graphics/pgf/contrib/rulercompass/tikzlibraryrulercompass.code.tex
new file mode 100644
index 0000000000..76cda67eb0
--- /dev/null
+++ b/graphics/pgf/contrib/rulercompass/tikzlibraryrulercompass.code.tex
@@ -0,0 +1,495 @@
+%%
+%% This is file `tikzlibraryrulercompass.code.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% rulercompass.dtx (with options: `tikzlibrary')
+%% ---------------------------------------------------------------
+%% rulercompass --- a TikZ/PGF library for drawing straight-edge
+%% and compass diagrams
+%% E-mail: stacey@math.ntnu.no
+%% Released under the LaTeX Project Public Licence v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ---------------------------------------------------------------
+%%
+\usetikzlibrary{intersections,calc}
+\newif\ifrc@draft
+\newif\ifrc@beamer
+\newif\ifrc@fliparc
+\newcount\rc@picture@id
+\newcounter{pointlabels}
+\@ifclassloaded{beamer}{%
+ \rc@beamertrue
+}{}
+\def\rc@pathsep{@}
+\ifrc@beamer
+\resetcounteronoverlays{pointlabels}
+\resetcountonoverlays{rc@picture@id}
+\tikzset{
+ alt if exist/.code args={#1#2#3}{%
+ \@ifundefined{path@\the\rc@picture@id @#1}{%
+ \pgfkeysalso{#2}%
+ }{
+ \alt<.-\csname path@\the\rc@picture@id @#1\endcsname>{%
+ \pgfkeysalso{#2}%
+ }{
+ \pgfkeysalso{#3}%
+ }%
+ }%
+ },
+ intersection/save/.code={%
+ \only<.>{%
+ \begingroup
+ \tikz@intersect@path@names@parse#1\tikz@stop
+ \protected@write\pgfutil@auxout{}{%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@a}{\the\beamer@slideinframe}%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@b}{\the\beamer@slideinframe}%
+ }%
+ \endgroup
+ }%
+ }
+}
+\newcommand<>\compass[3][]{%
+ \draw#4[#1,ruler compass/compass={#2}{#3}];
+}
+
+\newcommand<>\ruler[3][]{%
+ \draw#4[#1,ruler compass/ruler={#2}{#3}];
+}
+\newcommand<>\point[4][]{%
+ {%
+ \advance\c@pointlabels by 1\relax
+ \xdef\rc@temp{\thepointlabels}%
+ }%
+ \edef\rc@tempa{\the\rc@picture@id}%
+ \expandafter\ifx\csname rc@id@\rc@temp\endcsname\rc@tempa
+ \path#5 (\rc@temp) node[ruler compass/point,#1] {};
+ \else
+ \path#5 [name intersections={use=#2 and #3}] (intersection-#4) node[ruler compass/point,#1] {};
+ \fi
+}
+\else
+\tikzset{
+ alt if exist/.code args={#1#2#3}{%
+ \pgfkeysalso{#2}%
+ },
+ intersection/save/.code={%
+ \begingroup
+ \tikz@intersect@path@names@parse#1\tikz@stop
+ \protected@write\pgfutil@auxout{}{%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@a}{\thepage}%
+ \string\global\string\@namedef{path@\the\rc@picture@id @\tikz@intersect@path@b}{\thepage}%
+ }%
+ \endgroup
+ }
+}
+\newcommand\compass[3][]{%
+ \draw [#1,ruler compass/compass={#2}{#3}];
+}
+
+\newcommand\ruler[3][]{%
+ \draw [#1,ruler compass/ruler={#2}{#3}];
+}
+
+\newcommand\point[4][]{%
+ \path [name intersections={use=#2 and #3}] (intersection-#4) node[ruler compass/point,#1] {};
+}
+\fi
+\def\rc@processpt#1{%
+ \pgfutil@ifnextchar.{\rc@processpt@@#1}{\rc@processpt@#1}}
+\def\rc@processpt@#1#2\pgf@stop{%
+ \pgfutil@in@+{#2}%
+ \ifpgfutil@in@
+ \let\@next=\rc@processpt@plus
+ \else
+ \pgfutil@in@-{#2}%
+ \ifpgfutil@in@
+ \let\@next=\rc@processpt@minus
+ \else
+ \let\@next=\rc@processpt@bare
+ \fi
+ \fi
+ \@next#1#2\pgf@stop
+}
+\def\rc@processpt@@#1.#2\pgf@stop{%
+ \def\rc@temp{#2}%
+ \ifx\rc@temp\pgfutil@empty
+ \edef\rc@temp{\thepointlabels}%
+ \else
+ \pgfmathparse{int(\the\c@pointlabels + #2)}%
+ \begingroup
+ \c@pointlabels=\pgfmathresult\relax
+ \xdef\rc@temp{\thepointlabels}%
+ \endgroup
+ \fi
+ \let#1\rc@temp
+}
+\def\rc@processpt@plus#1#2+#3\pgf@stop{%
+ \pgfmathsetmacro\rc@temp{0}%
+ \rc@reverse#2\pgf@stop%
+ \pgfmathparse{int(\rc@temp + #3)}%
+ \begingroup
+ \c@pointlabels=\pgfmathresult\relax
+ \xdef\rc@temp{\thepointlabels}%
+ \endgroup
+ \let#1\rc@temp
+}
+\def\rc@processpt@minus#1#2-#3\pgf@stop{%
+ \pgfmathsetmacro\rc@temp{0}%
+ \rc@reverse#2\pgf@stop%
+ \pgfmathparse{int(\rc@temp - #3)}%
+ \begingroup
+ \c@pointlabels=\pgfmathresult\relax
+ \xdef\rc@temp{\thepointlabels}%
+ \endgroup
+ \let#1\rc@temp
+}
+\def\rc@processpt@bare#1#2\pgf@stop{%
+ \def#1{#2}}
+\def\rc@reverse#1{%
+ \ifx#1\pgf@stop
+ \let\@next=\pgfutil@empty
+ \else
+ \let\@next=\rc@reverse
+ \pgfutil@tempcnta=`#1\relax
+ \pgfmathsetmacro\rc@temp{\rc@temp * \rc@factor + \the\pgfutil@tempcnta - \rc@initial}%
+ \fi
+ \@next}
+\def\rc@parsepath#1#2#3#4\pgf@stop{%
+ \rc@processpt\rc@tempa#3\pgf@stop
+ \rc@processpt\rc@tempb#4\pgf@stop
+ \xdef#1{#2\rc@pathsep\rc@tempa\rc@pathsep\rc@tempb}%
+}
+\tikzset{
+ every picture/.append style={
+ ruler compass/at begin picture
+ },
+ intersection/use/.code args={#1 and #2}{%
+ \rc@parsepath\rc@pta#1\pgf@stop
+ \rc@parsepath\rc@ptb#2\pgf@stop
+ \pgfkeysalso{
+ of={\rc@pta} and \rc@ptb,
+ save={\rc@pta} and \rc@ptb,
+ }
+ },
+ circle through/.style={
+ to path={
+ \pgfextra{
+ \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax
+ \pgfmathsetmacro\rc@radius{veclen(\pgf@x - \pgf@xa,\pgf@y - \pgf@ya)}%
+ }
+ circle[radius=\rc@radius pt] (\tikztotarget)
+ }
+ },
+ arc flip/.is if=rc@fliparc,
+ centred arc to/.code 2 args={%
+ \tikz@scan@one@point\pgfutil@firstofone(#1)\relax
+ \pgfmathsetmacro\rc@radius{veclen(\tikz@lastx-\pgf@x,\tikz@lasty-\pgf@y)}%
+ \pgfmathsetmacro\rc@sangle{atan2(\tikz@lasty - \pgf@y,\tikz@lastx - \pgf@x)}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \tikz@scan@one@point\pgfutil@firstofone(#2)\relax
+ \pgfmathsetmacro\rc@eangle{atan2(\pgf@y - \pgf@ya,\pgf@x - \pgf@xa)}%
+ \pgfmathsetmacro\rc@eangle{\rc@eangle < \rc@sangle ? \rc@eangle + 360 : \rc@eangle}%
+ \ifrc@fliparc
+ \pgfmathsetmacro\rc@eangle{\rc@eangle - 360}%
+ \fi
+ \pgfkeysalso{start angle=\rc@sangle, end angle=\rc@eangle, radius=\rc@radius pt}
+ },
+ ruler compass/.is family,
+ ruler compass/.cd,
+ draft mode/.is if=rc@draft,
+ at begin picture/.style={
+ execute at begin picture={
+ \global\advance\rc@picture@id by 1\relax
+ \setcounter{pointlabels}{0}%
+ },
+ },
+ point labels/.is choice,
+ point labels/arabic/.code={%
+ \renewcommand\thepointlabels{\@arabic \c@pointlabels}%
+ \def\rc@initial{48}%
+ \def\rc@factor{10}%
+ },
+ point labels/alph/.code={%
+ \renewcommand\thepointlabels{\@alph \c@pointlabels}%
+ \def\rc@initial{96}%
+ \def\rc@factor{26}%
+ },
+ point labels/Alph/.code={%
+ \renewcommand\thepointlabels{\@Alph \c@pointlabels}%
+ \def\rc@initial{64}%
+ \def\rc@factor{26}%
+ },
+ point labels/alphalph/.code={%
+ \@ifundefined{alphalph}{%
+ \message{The "alphalph" option only works if the 'alphalph' package has been loaded (using "alph" instead).}%
+ \renewcommand\thepointlabels{\@alph \c@pointlabels}%
+ \def\rc@initial{96}%
+ \def\rc@factor{26}%
+ }{%
+ \renewcommand\thepointlabels{\alphalph \c@pointlabels}%
+ \def\rc@initial{96}%
+ \def\rc@factor{26}%
+ }%
+ },
+ point labels/AlphAlph/.code={%
+ \@ifundefined{alphalph}{%
+ \message{The "AlphAlph" option only works if the 'alphalph' package has been loaded (using "Alph" instead).}%
+ \renewcommand\thepointlabels{\@Alph \c@pointlabels}%
+ \def\rc@initial{64}%
+ \def\rc@factor{26}%
+ }{%
+ \renewcommand\thepointlabels{\AlphAlph \c@pointlabels}%
+ \def\rc@initial{64}%
+ \def\rc@factor{26}%
+ }%
+ },
+ construction in use/.style={
+ draw=blue
+ },
+ construction not in use/.style={
+ draw=gray!75,
+ },
+ compass/.code 2 args={%
+ \rc@processpt\rc@pta#1\pgf@stop
+ \rc@processpt\rc@ptb#2\pgf@stop
+ \pgfkeysalso{ruler compass/compass aux={\rc@pta}{\rc@ptb}}%
+ },
+ compass aux/.style 2 args={
+ alt if exist={c\rc@pathsep#1\rc@pathsep#2}{
+ ruler compass/construction in use/.try,
+ }{
+ ruler compass/construction not in use/.try
+ },
+ name path=c\rc@pathsep#1\rc@pathsep#2,
+ ruler compass/every construction path/.try,
+ ruler compass/every compass/.try,
+ insert path={
+ (#1) to[circle through] (#2)
+ node[name=c\rc@pathsep#1\rc@pathsep#2\rc@pathsep centre,ruler compass/aux point={#1}] {}
+ node[name=c\rc@pathsep#1\rc@pathsep#2\rc@pathsep rim,ruler compass/aux point={#2}] {}
+ },
+ },
+ ruler/.code 2 args={%
+ \rc@processpt\rc@pta#1\pgf@stop
+ \rc@processpt\rc@ptb#2\pgf@stop
+ \pgfkeysalso{ruler compass/ruler aux={\rc@pta}{\rc@ptb}}%
+ },
+ ruler aux/.style 2 args={
+ overlay,
+ alt if exist={r\rc@pathsep#1\rc@pathsep#2}{
+ ruler compass/construction in use/.try
+ }{
+ ruler compass/construction not in use/.try
+ },
+ name path=r\rc@pathsep#1\rc@pathsep#2,
+ ruler compass/every construction path/.try,
+ ruler compass/every ruler/.try,
+ insert path={
+ ($(#1)!\pgfkeysvalueof{/tikz/ruler compass/ruler length}!(#2)$) -- ($(#2)!\pgfkeysvalueof{/tikz/ruler compass/ruler length}!(#1)$)
+ node[name=r\rc@pathsep#1\rc@pathsep#2\rc@pathsep start,ruler compass/aux point={#1}] {}
+ node[name=r\rc@pathsep#1\rc@pathsep#2\rc@pathsep end,ruler compass/aux point={#2}] {}
+ },
+ },
+ ruler length/.initial=20,
+ aux point/.style={
+ node contents/.try={},
+ at={(#1)},
+ ruler compass/every aux point/.try
+ },
+ point/.style={
+ ruler compass/name it,
+ coordinate,
+ node contents/.try={},
+ insert path={
+ node[
+ fill=#1,
+ circle,
+ minimum width=1mm,
+ inner sep=0mm,
+ reset label anchor,
+ anchor=center,
+ node contents/.try={},
+ ruler compass/every point/.try,
+ ] {}
+ }
+ },
+ name it/.code={%
+ \ifx\tikz@fig@name\pgfutil@empty
+ \stepcounter{pointlabels}%
+ \pgfkeysalso{name=\thepointlabels}%
+ \expandafter\xdef\csname rc@id@\thepointlabels\endcsname{\the\rc@picture@id}%
+ \ifrc@draft
+ \pgfkeysalso{label={[ruler compass/draft label/.try]\thepointlabels}}%
+ \fi
+ \fi
+ },
+ point/.default=black,
+}
+\def\rc@scale{1}
+\def\rc@offset{0pt}
+\def\jump@setbb#1#2#3{%
+ \@ifundefined{jump@#1@maxbb}{%
+ \expandafter\gdef\csname jump@#1@maxbb\endcsname{#3}%
+ }{%
+ \csname jump@#1@maxbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ #3
+ \pgfmathsetlength\pgf@x{max(\pgf@x,\pgf@xa)}%
+ \pgfmathsetlength\pgf@y{max(\pgf@y,\pgf@ya)}%
+ \expandafter\xdef\csname jump@#1@maxbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ }
+ \@ifundefined{jump@#1@minbb}{%
+ \expandafter\gdef\csname jump@#1@minbb\endcsname{#2}%
+ }{%
+ \csname jump@#1@minbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ #2
+ \pgfmathsetlength\pgf@x{min(\pgf@x,\pgf@xa)}%
+ \pgfmathsetlength\pgf@y{min(\pgf@y,\pgf@ya)}%
+ \expandafter\xdef\csname jump@#1@minbb\endcsname{\noexpand\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ }
+}
+\tikzset{
+ stop jumping/.style={
+ execute at end picture={%
+ \pgfmathsetlength\pgf@xa{\pgf@picminx/\rc@scale}%
+ \pgfmathsetlength\pgf@ya{\pgf@picminy/\rc@scale}%
+ \pgfmathsetlength\pgf@xb{\pgf@picmaxx/\rc@scale}%
+ \pgfmathsetlength\pgf@yb{\pgf@picmaxy/\rc@scale}%
+ \immediate\write\pgfutil@auxout{%
+ \noexpand\jump@setbb{\the\rc@picture@id}{\noexpand\pgfpoint{\the\pgf@xa}{\the\pgf@ya}}{\noexpand\pgfpoint{\the\pgf@xb}{\the\pgf@yb}}%
+ },
+ \pgf@x=\pgf@picminx
+ \pgf@y=\pgf@picminy
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@x=\pgf@picmaxx
+ \pgf@y=\pgf@picmaxy
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \edef\rc@temp{\noexpand\path (\the\pgf@xa - \rc@offset,\the\pgf@ya - \rc@offset) -- (\the\pgf@x + \rc@offset,\the\pgf@y + \rc@offset);}%
+ \rc@temp
+ },
+ },
+ max size/.code 2 args={%
+ \pgfutil@ifundefined{jump@\the\rc@picture@id @maxbb}{}{%
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \advance\pgf@xa by -\pgf@x
+ \advance\pgf@ya by -\pgf@y
+ \advance\pgf@xa by \rc@offset
+ \advance\pgf@xa by \rc@offset
+ \advance\pgf@ya by \rc@offset
+ \advance\pgf@ya by \rc@offset
+ \pgfmathsetmacro\rc@xratio{\pgf@xa > #1 ? \pgf@xa/#1 : 1}%
+ \pgfmathsetmacro\rc@yratio{\pgf@ya > #2 ? \pgf@ya/#2 : 1}%
+ \pgfmathsetmacro\rc@scale{1/max(\rc@xratio,\rc@yratio)}%
+ \pgfkeysalso{scale=\rc@scale}%
+ }
+ },
+ enclosing box/offset/.store in=\rc@offset,
+ constrain/.style={
+ execute at begin picture=\constrain
+ }
+}
+\newcommand\constrain{%
+ \pgfutil@ifundefined{jump@\the\rc@picture@id @minbb}{}{%
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \pgfmathsetlength\pgf@xa{\pgf@x-\rc@offset}%
+ \pgfmathsetlength\pgf@ya{\pgf@y-\rc@offset}%
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \pgfmathsetlength\pgf@xb{\pgf@x+\rc@offset}%
+ \pgfmathsetlength\pgf@yb{\pgf@y+\rc@offset}%
+ \edef\rc@temp{\noexpand\clip (\the\pgf@xa,\the\pgf@ya) rectangle (\the\pgf@xb,\the\pgf@yb);}
+ \ifpgf@relevantforpicturesize
+ \pgf@relevantforpicturesizefalse
+ \rc@temp
+ \pgf@relevantforpicturesizetrue
+ \else
+ \rc@temp
+ \fi
+ }%
+}
+
+\expandafter\def\csname pgf@sh@ns@enclosing box\endcsname{rectangle}
+\expandafter\def\csname pgf@sh@np@enclosing box\endcsname{%
+ \pgfutil@ifundefined{jump@\the\rc@picture@id @minbb}{%
+ \def\southwest{\pgfqpoint{\pgf@picminx}{\pgf@picminy}}%
+ \def\northeast{\pgfqpoint{\pgf@picmaxx}{\pgf@picmaxy}}%
+}{%
+ \csname jump@\the\rc@picture@id @minbb\endcsname
+ \pgfmathsetlength\pgf@xa{\pgf@x-\rc@offset}%
+ \pgfmathsetlength\pgf@ya{\pgf@y-\rc@offset}%
+ \edef\southwest{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
+ \csname jump@\the\rc@picture@id @maxbb\endcsname
+ \pgfmathsetlength\pgf@xb{\pgf@x+\rc@offset}%
+ \pgfmathsetlength\pgf@yb{\pgf@y+\rc@offset}%
+ \edef\northeast{\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}%
+ }%
+}
+\expandafter\def\csname pgf@sh@nt@enclosing box\endcsname{{1}{0}{0}{1}{0pt}{0pt}}
+\expandafter\def\csname pgf@sh@pi@enclosing box\endcsname{\pgfpictureid}
+
+\tikzset{
+ on layer/.code={
+ \pgfonlayer{#1}\begingroup
+ \aftergroup\endpgfonlayer
+ \aftergroup\endgroup
+ },
+ node on layer/.code={
+ \gdef\node@@on@layer{%
+ \setbox\tikz@tempbox=\hbox\bgroup\pgfonlayer{#1}\unhbox\tikz@tempbox\endpgfonlayer\egroup}
+ \aftergroup\node@on@layer
+ },
+ reset label anchor/.code={%
+ \let\tikz@auto@anchor=\pgfutil@empty
+ \def\tikz@anchor{#1}
+ },
+ reset label anchor/.default=center
+}
+\def\node@on@layer{\aftergroup\node@@on@layer}
+\@ifpackageloaded{alphalph}%
+{
+ \tikzset{ruler compass/point labels=alphalph}
+}
+{
+ \tikzset{ruler compass/point labels=alph}
+}
+
+%%
+%% Copyright (C) 2013 by Andrew Stacey <stacey@math.ntnu.no>
+%%
+%% This file may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.3 of this
+%% license or (at your option) any later version.
+%% The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Andrew Stacey.
+%%
+%% This work consists of the files rulercompass.dtx
+%% rulercompass_doc.tex
+%% and the derived files tikzlibraryrulercompass.code.tex
+%% rulercompass.ins
+%% rulercompass.pdf
+%% rulercompass_doc.pdf
+%% README.txt
+%%
+%%
+%%
+%% End of file `tikzlibraryrulercompass.code.tex'.
diff --git a/graphics/pgf/contrib/sa-tikz/README b/graphics/pgf/contrib/sa-tikz/README
new file mode 100644
index 0000000000..46fd39f320
--- /dev/null
+++ b/graphics/pgf/contrib/sa-tikz/README
@@ -0,0 +1,13 @@
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% Sa-TikZ: TikZ library to draw switching architectures
+%
+% Version v0.7a 2014/1/29 - (C) Claudio Fiandrino
+%
+% E-mail: claudio dot fiandrino at gmail dot com
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%
+% The library provides tools to draw switching architectures
+% and to customize their aspect. \ No newline at end of file
diff --git a/graphics/pgf/contrib/sa-tikz/doc/macros/pgfmanual-en-macros.tex b/graphics/pgf/contrib/sa-tikz/doc/macros/pgfmanual-en-macros.tex
new file mode 100644
index 0000000000..e687ae3c42
--- /dev/null
+++ b/graphics/pgf/contrib/sa-tikz/doc/macros/pgfmanual-en-macros.tex
@@ -0,0 +1,1740 @@
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+% $Header: /cvsroot/pgf/pgf/doc/generic/pgf/macros/pgfmanual-en-macros.tex,v 1.79 2013/12/20 15:22:35 tantau Exp $
+
+
+\providecommand\href[2]{\texttt{#1}}
+\providecommand\hypertarget[2]{\texttt{#1}}
+\providecommand\hyperlink[2]{\texttt{#1}}
+
+
+\colorlet{examplefill}{yellow!80!black}
+\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8}
+\definecolor{codebackground}{rgb}{0.9,0.9,1}
+
+\newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist}
+\newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt{\raggedright\item\strut{#1}\par}\topsep=0pt}
+\newcommand\pgfmanualbody{\parskip3pt}
+
+\let\origtexttt=\texttt
+\def\texttt#1{{\def\textunderscore{\char`\_}\def\textbraceleft{\char`\{}\def\textbraceright{\char`\}}\origtexttt{#1}}}
+\def\exclamationmarktext{!}
+\def\atmarktext{@}
+
+{
+ \catcode`\|=12
+ \gdef\pgfmanualnormalbar{|}
+ \catcode`\|=13
+ \AtBeginDocument{\gdef|{\ifmmode\pgfmanualnormalbar\else\expandafter\verb\expandafter|\fi}}
+}
+
+
+
+\newenvironment{pgflayout}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \texttt{\string\pgfpagesuselayout\char`\{\declare{#1}\char`\}}\oarg{options}%
+ }
+ \index{#1@\protect\texttt{#1} layout}%
+ \index{Page layouts!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{command}[1]{
+ \begin{pgfmanualentry}
+ \extractcommand#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\makeatletter
+
+\def\includeluadocumentationof#1{
+ \directlua{require 'pgf.manual.DocumentParser'}
+ \directlua{pgf.manual.DocumentParser.include '#1'}
+}
+
+\newenvironment{luageneric}[4]{
+ \pgfmanualentry
+ \pgfmanualentryheadline{#4 \texttt{#1\declare{#2}}#3}
+ \index{#2@\protect\texttt{#2} (Lua)}%
+ \def\temp{#1}
+ \ifx\temp\pgfutil@empty\else
+ \index{#1@\protect\texttt{#1}!#2@\protect\texttt{#2} (Lua)}%
+ \fi
+ \pgfmanualbody
+}{\endpgfmanualentry}
+
+\newenvironment{luatable}[3]{
+ \medskip
+ \luageneric{#1}{#2}{ (declared in \texttt{#3})}{\textbf{Lua table}}
+}{\endluageneric}
+
+\newenvironment{luafield}[1]{
+ \pgfmanualentry
+ \pgfmanualentryheadline{Field \texttt{\declare{#1}}}
+ \pgfmanualbody
+}{\endpgfmanualentry}
+
+
+\newenvironment{lualibrary}[1]{
+ \pgfmanualentry
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Graph Drawing Library} \texttt{\declare{#1}}%
+ }
+ \index{#1@\protect\texttt{#1} graph drawing library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \index{Graph drawing libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em
+ {\ttfamily\char`\\usegdlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX}\\
+ {\ttfamily\char`\\usegdlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}\smallskip\par
+ \pgfmanualbody
+}{\endpgfmanualentry}
+
+\newenvironment{luadeclare}[4]{
+ \pgfmanualentry
+ \def\manual@temp@default{#3}%
+ \def\manual@temp@initial{#4}%
+ \def\manual@temp@{#3#4}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily/graph
+ drawing/\declare{#1}\opt{=}}\opt{#2}\hfill%
+ \ifx\manual@temp@\pgfutil@empty\else%
+ (\ifx\manual@temp@default\pgfutil@empty\else%
+ default {\ttfamily #3}\ifx\manual@temp@initial\pgfutil@empty\else, \fi%
+ \fi%
+ \ifx\manual@temp@initial\pgfutil@empty\else%
+ initially {\ttfamily #4}%
+ \fi%
+ )\fi%
+ }%
+ \index{#1@\protect\texttt{#1} key}%
+ \pgfmanualbody
+ \gdef\myname{#1}%
+% \keyalias{tikz}
+% \keyalias{tikz/graphs}
+}{\endpgfmanualentry}
+
+\newenvironment{luadeclarestyle}[4]{
+ \pgfmanualentry
+ \def\manual@temp@para{#2}%
+ \def\manual@temp@default{#3}%
+ \def\manual@temp@initial{#4}%
+ \def\manual@temp@{#3#4}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily/graph drawing/\declare{#1}}\ifx\manual@temp@para\pgfutil@empty\else\opt{\texttt=}\opt{#2}\fi\hfill%
+ (style\ifx\manual@temp@\pgfutil@empty\else, %
+ \ifx\manual@temp@default\pgfutil@empty\else%
+ default {\ttfamily #3}\ifx\manual@temp@initial\pgfutil@empty\else, \fi%
+ \fi%
+ \ifx\manual@temp@initial\pgfutil@empty\else%
+ initially {\ttfamily #4}%
+ \fi%
+ \fi)%
+ }%
+ \index{#1@\protect\texttt{#1} key}%
+ \pgfmanualbody%
+ \gdef\myname{#1}%
+% \keyalias{tikz}
+% \keyalias{tikz/graphs}
+}{\endpgfmanualentry}
+
+\newenvironment{luanamespace}[2]{
+ \luageneric{#1}{#2}{}{\textbf{Lua namespace}}
+}{\endluageneric}
+
+\newenvironment{luafiledescription}[1]{}{}
+
+\newenvironment{luacommand}[4]{
+ \hypertarget{pgf/lua/#1}{\luageneric{#2}{#3}{\texttt{(#4)}}{\texttt{function}}}
+}{\endluageneric}
+
+\newenvironment{luaparameters}{\par\emph{Parameters:}%
+ \parametercount=0\relax%
+ \let\item=\parameteritem%
+ \let\list=\restorelist%
+}
+{\par
+}
+
+\newenvironment{luareturns}{\par\emph{Returns:}%
+ \parametercount=0\relax%
+ \let\item=\parameteritem%
+ \let\list=\restorelist%
+}
+{\par
+}
+
+\newcount\parametercount
+
+\newenvironment{parameterdescription}{\unskip%
+ \parametercount=0\relax%
+ \let\item=\parameteritem%
+ \let\list=\restorelist%
+}
+{\par
+}
+\let\saveditemcommand=\item
+\let\savedlistcommand=\list
+\def\denselist#1#2{\savedlistcommand{#1}{#2}\parskip0pt\itemsep0pt}
+\def\restorelist{\let\item=\saveditemcommand\denselist}
+\def\parameteritem{\pgfutil@ifnextchar[\parameteritem@{}}%}
+\def\parameteritem@[#1]{\advance\parametercount by1\relax\hskip0.15em plus 1em\emph{\the\parametercount.}\kern1ex\def\test{#1}\ifx\test\pgfutil@empty\else#1\kern.5em\fi}
+
+\newenvironment{commandlist}[1]{%
+ \begin{pgfmanualentry}
+ \foreach \xx in {#1} {%
+ \expandafter\extractcommand\xx\@@
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+
+% \begin{internallist}[register]{\pgf@xa}
+% \end{internallist}
+%
+% \begin{internallist}[register]{\pgf@xa,\pgf@xb}
+% \end{internallist}
+\newenvironment{internallist}[2][register]{%
+ \begin{pgfmanualentry}
+ \foreach \xx in {#2} {%
+ \expandafter\extractinternalcommand\expandafter{\xx}{#1}%
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+\def\extractinternalcommand#1#2{%
+ \removeats{#1}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+ Internal #2 \declare{\texttt{\string#1}}}%
+ \index{Internals!\strippedat @\protect\myprintocmmand{\strippedat}}%
+ \index{\strippedat @\protect\myprintocmmand{\strippedat}}%
+}
+
+%% MW: START MATH MACROS
+\def\mvar#1{{\ifmmode\textrm{\textit{#1}}\else\rmfamily\textit{#1}\fi}}
+
+\makeatletter
+
+\def\extractmathfunctionname#1{\extractmathfunctionname@#1(,)\tmpa\tmpb}
+\def\extractmathfunctionname@#1(#2)#3\tmpb{\def\mathname{#1}}
+
+\makeatother
+
+\newenvironment{math-function}[1]{
+ \def\mathdefaultname{#1}
+ \extractmathfunctionname{#1}
+ \edef\mathurl{{math:\mathname}}\expandafter\hypertarget\expandafter{\mathurl}{}%
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\texttt{#1}}%
+ \index{\mathname @\protect\texttt{\mathname} math function}%
+ \index{Math functions!\mathname @\protect\texttt{\mathname}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\pgfmanualemptytext{}
+\def\pgfmanualvbarvbar{\char`\|\char`\|}
+
+\newenvironment{math-operator}[4][]{%
+ \begin{pgfmanualentry}
+ \csname math#3operator\endcsname{#2}{#4}
+ \def\mathtest{#4}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \def\mathtype{(#3 operator)}
+ \else%
+ \def\mathtype{(#3 operator; uses the \texttt{#4} function)}
+ \fi%
+ \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
+ \def\mathtest{#1}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \index{#2@\protect\texttt{#2} #3 math operator}%
+ \index{Math operators!#2@\protect\texttt{#2}}%
+ \fi%
+ \pgfmanualbody
+}
+{\end{pgfmanualentry}}
+
+\newenvironment{math-operators}[5][]{%
+ \begin{pgfmanualentry}
+ \csname math#4operator\endcsname{#2}{#3}
+ \def\mathtest{#5}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \def\mathtype{(#4 operators)}
+ \else%
+ \def\mathtype{(#4 operators; use the \texttt{#5} function)}
+ \fi%
+ \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
+ \def\mathtest{#1}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \index{#2#3@\protect\texttt{#2\protect\ #3} #4 math operators}%
+ \index{Math operators!#2#3@\protect\texttt{#2\protect\ #3}}%
+ \fi%
+ \pgfmanualbody
+}
+{\end{pgfmanualentry}}
+
+\def\mathinfixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}%
+ \def\mathexample{\mvar{x}\space\texttt{#1}\space\mvar{y}}%
+}
+
+\def\mathprefixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}%
+ \def\mathexample{\texttt{#1}\mvar{x}}%
+}
+
+\def\mathpostfixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}
+ \def\mathexample{\mvar{x}\texttt{#1}}%
+}
+
+\def\mathgroupoperator#1#2{%
+ \def\mathoperator{\texttt{#1\ #2}}%
+ \def\mathexample{\texttt{#1}\mvar{x}\texttt{#2}}%
+}
+
+\expandafter\let\csname matharray accessoperator\endcsname=\mathgroupoperator
+\expandafter\let\csname matharrayoperator\endcsname=\mathgroupoperator
+
+\def\mathconditionaloperator#1#2{%
+ \def\mathoperator{#1\space#2}
+ \def\mathexample{\mvar{x}\ \texttt{#1}\ \mvar{y}\ {\texttt{#2}}\ \mvar{z}}
+}
+
+\newcommand\mathcommand[1][\mathdefaultname]{%
+ \expandafter\makemathcommand#1(\empty)\stop%
+ \expandafter\extractcommand\mathcommandname\@@%
+ \medskip
+}
+\makeatletter
+
+\def\makemathcommand#1(#2)#3\stop{%
+ \expandafter\def\expandafter\mathcommandname\expandafter{\csname pgfmath#1\endcsname}%
+ \ifx#2\empty%
+ \else%
+ \@makemathcommand#2,\stop,
+ \fi}
+\def\@makemathcommand#1,{%
+ \ifx#1\stop%
+ \else%
+ \expandafter\def\expandafter\mathcommandname\expandafter{\mathcommandname{\ttfamily\char`\{#1\char`\}}}%
+ \expandafter\@makemathcommand%
+ \fi}
+\makeatother
+
+\def\calcname{\textsc{calc}}
+
+\newenvironment{math-keyword}[1]{
+ \extracttikzmathkeyword#1@
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\texttt{\color{red}\mathname}\mathrest}%
+ \index{\mathname @\protect\texttt{\mathname} tikz math function}%
+ \index{TikZ math functions!\mathname @\protect\texttt{\mathname}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extracttikzmathkeyword#1#2@{%
+ \def\mathname{#1}%
+ \def\mathrest{#2}%
+}
+
+%% MW: END MATH MACROS
+
+
+\def\extractcommand#1#2\@@{%
+ \removeats{#1}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+ \declare{\texttt{\string#1}}#2%
+ }%
+ \index{\strippedat @\protect\myprintocmmand{\strippedat}}
+}
+
+\def\luaextractcommand#1#2\relax{%
+ \declare{\texttt{\string#1}}#2\par%
+% \removeats{#1}%
+ % \index{\strippedat @\protect\myprintocmmand{\strippedat}}
+ % \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+}
+
+
+% \begin{environment}{{name}\marg{arguments}}
+\renewenvironment{environment}[1]{
+ \begin{pgfmanualentry}
+ \extractenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractenvironement#1#2\@@{%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily\char`\\begin\char`\{\declare{#1}\char`\}}#2%
+ }%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\end\char`\{\declare{#1}\char`\}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}
+}
+
+
+\newenvironment{plainenvironment}[1]{
+ \begin{pgfmanualentry}
+ \extractplainenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractplainenvironement#1#2\@@{%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\#1}}#2}%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\end#1}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}%
+}
+
+
+\newenvironment{contextenvironment}[1]{
+ \begin{pgfmanualentry}
+ \extractcontextenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractcontextenvironement#1#2\@@{%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\start#1}}#2}%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\stop#1}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}}
+
+
+\newenvironment{shape}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Shape} {\ttfamily\declare{#1}}%
+ }%
+ \index{#1@\protect\texttt{#1} shape}%
+ \index{Shapes!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{pictype}[2]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Pic type} {\ttfamily\declare{#1}#2}%
+ }%
+ \index{#1@\protect\texttt{#1} pic type}%
+ \index{Pic Types!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{shading}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Shading} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} shading}%
+ \index{Shadings!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{graph}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Graph} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} graph}%
+ \index{Graphs!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{gdalgorithm}[2]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Layout} {\ttfamily/graph drawing/\declare{#1}\opt{=}}\opt{\meta{options}}}%
+ \index{#1@\protect\texttt{#1} layout}%
+ \index{Layouts!#1@\protect\texttt{#1}}%
+ \foreach \algo in {#2}
+ {\edef\marshal{\noexpand\index{#2@\noexpand\protect\noexpand\texttt{#2} algorithm}}\marshal}%
+ \index{Graph drawing layouts!#1@\protect\texttt{#1}}
+ \item{\small alias {\ttfamily/tikz/#1}}\par
+ \item{\small alias {\ttfamily/tikz/graphs/#1}}\par
+ \item{\small Employs {\ttfamily algorithm=#2}}\par
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{dataformat}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Format} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} format}%
+ \index{Formats!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{stylesheet}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Style sheet} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} style sheet}%
+ \index{Style sheets!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{handler}[1]{
+ \begin{pgfmanualentry}
+ \extracthandler#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\gobble#1{}
+\def\extracthandler#1#2\@nil{%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{/handlers/#1}{}%
+ \textbf{Key handler} \meta{key}{\ttfamily/\declare{#1}}#2}%
+ \index{\gobble#1@\protect\texttt{#1} handler}%
+ \index{Key handlers!#1@\protect\texttt{#1}}
+}
+
+
+\makeatletter
+
+
+\newenvironment{stylekey}[1]{
+ \begin{pgfmanualentry}
+ \def\extrakeytext{style, }
+ \extractkey#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\choicesep{$\vert$}%
+\def\choicearg#1{\texttt{#1}}
+
+\newif\iffirstchoice
+
+% \mchoice{choice1,choice2,choice3}
+\newcommand\mchoice[1]{%
+ \begingroup
+ \firstchoicetrue
+ \foreach \mchoice@ in {#1} {%
+ \iffirstchoice
+ \global\firstchoicefalse
+ \else
+ \choicesep
+ \fi
+ \choicearg{\mchoice@}%
+ }%
+ \endgroup
+}%
+
+% \begin{key}{/path/x=value}
+% \begin{key}{/path/x=value (initially XXX)}
+% \begin{key}{/path/x=value (default XXX)}
+\newenvironment{key}[1]{
+ \begin{pgfmanualentry}
+ \def\extrakeytext{}
+ %\def\altpath{\emph{\color{gray}or}}%
+ \extractkey#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+% \insertpathifneeded{a key}{/pgf} -> assign mykey={/pgf/a key}
+% \insertpathifneeded{/tikz/a key}{/pgf} -> assign mykey={/tikz/a key}
+%
+% #1: the key
+% #2: a default path (or empty)
+\def\insertpathifneeded#1#2{%
+ \def\insertpathifneeded@@{#2}%
+ \ifx\insertpathifneeded@@\empty
+ \def\mykey{#1}%
+ \else
+ \insertpathifneeded@#2\@nil
+ \ifpgfutil@in@
+ \def\mykey{#2/#1}%
+ \else
+ \def\mykey{#1}%
+ \fi
+ \fi
+}%
+\def\insertpathifneeded@#1#2\@nil{%
+ \def\insertpathifneeded@@{#1}%
+ \def\insertpathifneeded@@@{/}%
+ \ifx\insertpathifneeded@@\insertpathifneeded@@@
+ \pgfutil@in@true
+ \else
+ \pgfutil@in@false
+ \fi
+}%
+
+% \begin{keylist}[default path]
+% {/path/option 1=value,/path/option 2=value2}
+% \end{keylist}
+\newenvironment{keylist}[2][]{%
+ \begin{pgfmanualentry}
+ \def\extrakeytext{}%
+ \foreach \xx in {#2} {%
+ \expandafter\insertpathifneeded\expandafter{\xx}{#1}%
+ \expandafter\extractkey\mykey\@nil%
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+
+\def\extractkey#1\@nil{%
+ \pgfutil@in@={#1}%
+ \ifpgfutil@in@%
+ \extractkeyequal#1\@nil
+ \else%
+ \pgfutil@in@{(initial}{#1}%
+ \ifpgfutil@in@%
+ \extractequalinitial#1\@nil%
+ \else
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}}\hfill(\extrakeytext no value)}%
+ \fi
+ \fi%
+}
+
+\def\extractkeyequal#1=#2\@nil{%
+ \pgfutil@in@{(default}{#2}%
+ \ifpgfutil@in@%
+ \extractdefault{#1}#2\@nil%
+ \else%
+ \pgfutil@in@{(initial}{#2}%
+ \ifpgfutil@in@%
+ \extractinitial{#1}#2\@nil%
+ \else
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}=}#2\hfill(\extrakeytext no default)}%
+ \fi%
+ \fi%
+}
+
+\def\extractdefault#1#2(default #3)\@nil{%
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}\opt{=}}\opt{#2}\hfill (\extrakeytext default {\ttfamily#3})}%
+}
+
+\def\extractinitial#1#2(initially #3)\@nil{%
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}=}#2\hfill (\extrakeytext no default, initially {\ttfamily#3})}%
+}
+
+\def\extractequalinitial#1 (initially #2)\@nil{%
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}}\hfill (\extrakeytext initially {\ttfamily#2})}%
+}
+
+% Introduces a key alias '/#1/<name of current key>'
+% to be used inside of \begin{key} ... \end{key}
+\def\keyalias#1{\vspace{-3pt}\item{\small alias {\ttfamily/#1/\myname}}\vspace{-2pt}\par
+ \pgfmanualpdflabel{/#1/\myname}{}%
+}
+
+\newif\iffirsttime
+\newcount\pgfmanualdecomposecount
+
+\makeatother
+
+\def\decompose/#1/#2\nil{%
+ \def\test{#2}%
+ \ifx\test\empty%
+ % aha.
+ \index{#1@\protect\texttt{#1} key}%
+ \index{\mypath#1@\protect\texttt{#1}}%
+ \gdef\myname{#1}%
+ \pgfmanualpdflabel{#1}{}
+ \else%
+ \advance\pgfmanualdecomposecount by1\relax%
+ \ifnum\pgfmanualdecomposecount>2\relax%
+ \decomposetoodeep#1/#2\nil%
+ \else%
+ \iffirsttime%
+ \begingroup%
+ % also make a pdf link anchor with full key path.
+ \def\hyperlabelwithoutslash##1/\nil{%
+ \pgfmanualpdflabel{##1}{}%
+ }%
+ \hyperlabelwithoutslash/#1/#2\nil%
+ \endgroup%
+ \def\mypath{#1@\protect\texttt{/#1/}!}%
+ \firsttimefalse%
+ \else%
+ \expandafter\def\expandafter\mypath\expandafter{\mypath#1@\protect\texttt{#1/}!}%
+ \fi%
+ \def\firsttime{}%
+ \decompose/#2\nil%
+ \fi%
+ \fi%
+}
+
+\def\decomposetoodeep#1/#2/\nil{%
+ % avoid too-deep nesting in index
+ \index{#1/#2@\protect\texttt{#1/#2} key}%
+ \index{\mypath#1/#2@\protect\texttt{#1/#2}}%
+ \decomposefindlast/#1/#2/\nil%
+}
+\makeatletter
+\def\decomposefindlast/#1/#2\nil{%
+ \def\test{#2}%
+ \ifx\test\pgfutil@empty%
+ \gdef\myname{#1}%
+ \else%
+ \decomposefindlast/#2\nil%
+ \fi%
+}
+\makeatother
+\def\indexkey#1{%
+ \def\mypath{}%
+ \decompose#1/\nil%
+}
+
+\newenvironment{predefinedmethod}[1]{
+ \begin{pgfmanualentry}
+ \extractpredefinedmethod#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractpredefinedmethod#1(#2)\@nil{%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Method \declare{\ttfamily #1}\texttt(#2\texttt) \hfill(predefined for all classes)}
+ \index{#1@\protect\texttt{#1} method}%
+ \index{Methods!#1@\protect\texttt{#1}}
+}
+
+
+\newenvironment{ooclass}[1]{
+ \begin{pgfmanualentry}
+ \def\currentclass{#1}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Class} \declare{\texttt{#1}}}
+ \index{#1@\protect\texttt{#1} class}%
+ \index{Class #1@Class \protect\texttt{#1}}%
+ \index{Classes!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{method}[1]{
+ \begin{pgfmanualentry}
+ \extractmethod#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractmethod#1(#2)\@nil{%
+ \def\test{#1}
+ \ifx\test\currentclass
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Constructor \declare{\ttfamily #1}\texttt(#2\texttt)}
+ \else
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Method \declare{\ttfamily #1}\texttt(#2\texttt)}
+ \fi
+ \index{#1@\protect\texttt{#1} method}%
+ \index{Methods!#1@\protect\texttt{#1}}
+ \index{Class \currentclass!#1@\protect\texttt{#1}}%
+}
+
+\newenvironment{attribute}[1]{
+ \begin{pgfmanualentry}
+ \extractattribute#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractattribute#1=#2;\@nil{%
+ \def\test{#2}%
+ \ifx\test\@empty
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Private attribute \declare{\ttfamily #1} \hfill (initially empty)}
+ \else
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Private attribute \declare{\ttfamily #1} \hfill (initially {\ttfamily #2})}
+ \fi
+ \index{#1@\protect\texttt{#1} attribute}%
+ \index{Attributes!#1@\protect\texttt{#1}}
+ \index{Class \currentclass!#1@\protect\texttt{#1}}%
+}
+
+
+
+\newenvironment{predefinednode}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Predefined node} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} node}%
+ \index{Predefined node!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{coordinatesystem}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Coordinate system} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} coordinate system}%
+ \index{Coordinate systems!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{snake}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Snake} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} snake}%
+ \index{Snakes!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{decoration}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Decoration} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} decoration}%
+ \index{Decorations!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\def\pgfmanualbar{\char`\|}
+\makeatletter
+\newenvironment{pathoperation}[3][]{
+ \begin{pgfmanualentry}
+ \def\pgfmanualtest{#1}%
+ \pgfmanualentryheadline{%
+ \ifx\pgfmanualtest\@empty%
+ \pgfmanualpdflabel{#2}{}%
+ \fi%
+ \textcolor{gray}{{\ttfamily\char`\\path}\
+ \ \dots}
+ \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
+ \ifx\pgfmanualtest\@empty%
+ \index{#2@\protect\texttt{#2} path operation}%
+ \index{Path operations!#2@\protect\texttt{#2}}%
+ \fi%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\newenvironment{datavisualizationoperation}[3][]{
+ \begin{pgfmanualentry}
+ \def\pgfmanualtest{#1}%
+ \pgfmanualentryheadline{%
+ \ifx\pgfmanualtest\@empty%
+ \pgfmanualpdflabel{#2}{}%
+ \fi%
+ \textcolor{gray}{{\ttfamily\char`\\datavisualization}\
+ \ \dots}
+ \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
+ \ifx\pgfmanualtest\@empty%
+ \index{#2@\protect\texttt{#2} (data visualization)}%
+ \index{Data visualization!#2@\protect\texttt{#2}}%
+ \fi%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\makeatother
+
+\def\doublebs{\texttt{\char`\\\char`\\}}
+
+
+\newenvironment{package}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily\char`\\usepackage\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX}}
+ \index{#1@\protect\texttt{#1} package}%
+ \index{Packages and files!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\input \declare{#1}.tex\space\space\space \char`\%\space\space plain \TeX}}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usemodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{pgfmodule}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily\char`\\usepgfmodule\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}}
+ \index{#1@\protect\texttt{#1} module}%
+ \index{Modules!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{pgflibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{\tikzname\ Library} \texttt{\declare{#1}}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em%
+ {{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}}\\
+ {{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}}\\
+ {{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space when using \tikzname}}\\
+ {{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space
+ \char`\%\space\space Con\TeX t\space when using \tikzname}}\\[.5em]
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{purepgflibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{{\small PGF} Library} \texttt{\declare{#1}}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em%
+ {{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX}}\\
+ {{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space Con\TeX t}}\\[.5em]
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{tikzlibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{\tikzname\ Library} \texttt{\declare{#1}}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em%
+ {{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX}}\\
+ {{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}}\\[.5em]
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+
+\newenvironment{filedescription}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{File {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} file}%
+ \index{Packages and files!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{packageoption}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepackage[\declare{#1}]\char`\{pgf\char`\}}}
+ \index{#1@\protect\texttt{#1} package option}%
+ \index{Package options for \textsc{pgf}!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+
+\newcommand\opt[1]{{\color{black!50!green}#1}}
+\newcommand\ooarg[1]{{\ttfamily[}\meta{#1}{\ttfamily]}}
+
+\def\opt{\afterassignment\pgfmanualopt\let\next=}
+\def\pgfmanualopt{\ifx\next\bgroup\bgroup\color{black!50!green}\else{\color{black!50!green}\next}\fi}
+
+
+
+\def\beamer{\textsc{beamer}}
+\def\pdf{\textsc{pdf}}
+\def\eps{\texttt{eps}}
+\def\pgfname{\textsc{pgf}}
+\def\tikzname{Ti\emph{k}Z}
+\def\pstricks{\textsc{pstricks}}
+\def\prosper{\textsc{prosper}}
+\def\seminar{\textsc{seminar}}
+\def\texpower{\textsc{texpower}}
+\def\foils{\textsc{foils}}
+
+{
+ \makeatletter
+ \global\let\myempty=\@empty
+ \global\let\mygobble=\@gobble
+ \catcode`\@=12
+ \gdef\getridofats#1@#2\relax{%
+ \def\getridtest{#2}%
+ \ifx\getridtest\myempty%
+ \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1}
+ \else%
+ \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1\protect\printanat}
+ \getridofats#2\relax%
+ \fi%
+ }
+
+ \gdef\removeats#1{%
+ \let\strippedat\myempty%
+ \edef\strippedtext{\stripcommand#1}%
+ \expandafter\getridofats\strippedtext @\relax%
+ }
+
+ \gdef\stripcommand#1{\expandafter\mygobble\string#1}
+}
+
+\def\printanat{\char`\@}
+
+\def\declare{\afterassignment\pgfmanualdeclare\let\next=}
+\def\pgfmanualdeclare{\ifx\next\bgroup\bgroup\color{red!75!black}\else{\color{red!75!black}\next}\fi}
+
+
+\let\textoken=\command
+\let\endtextoken=\endcommand
+
+\def\myprintocmmand#1{\texttt{\char`\\#1}}
+
+\def\example{\par\smallskip\noindent\textit{Example: }}
+\def\themeauthor{\par\smallskip\noindent\textit{Theme author: }}
+
+
+\def\indexoption#1{%
+ \index{#1@\protect\texttt{#1} option}%
+ \index{Graphic options and styles!#1@\protect\texttt{#1}}%
+}
+
+\def\itemcalendaroption#1{\item \declare{\texttt{#1}}%
+ \index{#1@\protect\texttt{#1} date test}%
+ \index{Date tests!#1@\protect\texttt{#1}}%
+}
+
+
+
+\def\class#1{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}%
+\extractclass#1@\par\topsep=0pt}
+\def\endclass{\endlist}
+\def\extractclass#1#2@{%
+\item{{{\ttfamily\char`\\documentclass}#2{\ttfamily\char`\{\declare{#1}\char`\}}}}%
+ \index{#1@\protect\texttt{#1} class}%
+ \index{Classes!#1@\protect\texttt{#1}}}
+
+\def\partname{Part}
+
+\makeatletter
+\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index}
+ This index only contains automatically generated entries. A good
+ index should also contain carefully selected keywords. This index is
+ not a good index.
+ \bigskip
+}
+\c@IndexColumns=2
+ \def\theindex{\@restonecoltrue
+ \columnseprule \z@ \columnsep 29\p@
+ \twocolumn[\index@prologue]%
+ \parindent -30pt
+ \columnsep 15pt
+ \parskip 0pt plus 1pt
+ \leftskip 30pt
+ \rightskip 0pt plus 2cm
+ \small
+ \def\@idxitem{\par}%
+ \let\item\@idxitem \ignorespaces}
+ \def\endtheindex{\onecolumn}
+\def\noindexing{\let\index=\@gobble}
+
+
+\newenvironment{arrowtipsimple}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Arrow Tip Kind} {\ttfamily#1}}
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \def\currentarrowtype{#1}
+ \pgfmanualbody}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{arrowtip}[4]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Arrow Tip Kind} {\ttfamily#1}}
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+ \def\currentarrowtype{#1}
+ \begin{minipage}[t]{10.25cm}
+ #2
+ \end{minipage}\hskip5mm\begin{minipage}[t]{4.75cm}
+ \leavevmode\vskip-2em
+ \tikz{
+ \draw [black!50,line width=5mm,-{#1[#3,color=black]}] (-4,0) -- (0,0);
+ \foreach \action in {#4}
+ { \expandafter\processaction\action\relax }
+ }
+ \end{minipage}\par\smallskip
+ }
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{arrowcap}[5]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Arrow Tip Kind} {\ttfamily#1}}
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+ \def\currentarrowtype{#1}
+ \begin{minipage}[t]{10.25cm}
+ #2
+ \end{minipage}\hskip5mm\begin{minipage}[t]{4.75cm}
+ \leavevmode\vskip-2em
+ \tikz{
+ \path [tips, line width=10mm,-{#1[#3,color=black]}] (-4,0) -- (0,0);
+ \draw [line width=10mm,black!50] (-3,0) -- (#5,0);
+ \foreach \action in {#4}
+ { \expandafter\processaction\action\relax }
+ }
+ \end{minipage}\par\smallskip
+ }
+{
+ \end{pgfmanualentry}
+}
+
+\def\processaction#1=#2\relax{
+ \expandafter\let\expandafter\pgf@temp\csname manual@action@#1\endcsname
+ \ifx\pgf@temp\relax\else
+ \pgf@temp#2/0/\relax
+ \fi
+}
+\def\manual@action@length#1/#2/#3\relax{%
+ \draw [red,|<->|,semithick,xshift=#2] ([yshift=4pt]current bounding
+ box.north -| -#1,0) coordinate (last length) -- node
+ [above=-2pt] {|length|} ++(#1,0);
+}
+\def\manual@action@width#1/#2/#3\relax{%
+ \draw [overlay, red,|<->|,semithick] (.5,-#1/2) -- node [below,sloped] {|width|} (.5,#1/2);
+}
+\def\manual@action@inset#1/#2/#3\relax{%
+ \draw [red,|<->|,semithick,xshift=#2] ([yshift=-4pt]current bounding
+ box.south -| last length) -- node [below] {|inset|} ++(#1,0);
+}
+
+\newenvironment{arrowexamples}
+{\begin{tabbing}
+ \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \=
+ \hbox to 1.9cm{\emph{0.4pt}\hfil} \= \hbox to 2cm{\emph{0.8pt}\hfil} \= \emph{1.6pt} \\
+ }
+{\end{tabbing}\vskip-1em}
+
+\newenvironment{arrowcapexamples}
+{\begin{tabbing}
+ \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \=
+ \hbox to 1.9cm{\emph{1ex}\hfil} \= \hbox to 2cm{\emph{1em}\hfil} \\
+ }
+{\end{tabbing}\vskip-1em}
+
+\def\arrowcapexample#1[#2]{\def\temp{#1}\ifx\temp\pgfutil@empty\arrowcapexample@\currentarrowtype[{#2}]\else\arrowcapexample@#1[{#2}]\fi}
+\def\arrowcapexample@#1[#2]{%
+ {\sfcode`\.1000\small\texttt{#1[#2]}} \>
+ \kern-.5ex\tikz [baseline,>={#1[#2]}] \draw [line
+ width=1ex,->] (0,.5ex) -- (2em,.5ex); \>
+ \kern-.5em\tikz [baseline,>={#1[#2]}] \draw [line
+ width=1em,->] (0,.5ex) -- (2em,.5ex); \\
+}
+
+\def\arrowexample#1[#2]{\def\temp{#1}\ifx\temp\pgfutil@empty\arrowexample@\currentarrowtype[{#2}]\else\arrowexample@#1[{#2}]\fi}
+\def\arrowexample@#1[#2]{%
+ {\sfcode`\.1000\small\texttt{#1[#2]}} \>
+ \tikz [baseline,>={#1[#2]}] \draw [line
+ width=0.4pt,->] (0,.5ex) -- (2em,.5ex); thin \>
+ \tikz [baseline,>={#1[#2]}] \draw [line
+ width=0.8pt,->] (0,.5ex) -- (2em,.5ex); \textbf{thick} \>
+ \tikz [baseline,>={#1[#2]}] \draw [line
+ width=1.6pt,->] (0,.5ex) -- (3em,.5ex); \\
+}
+\def\arrowexampledup[#1]{\arrowexample[{#1] \currentarrowtype[}]}
+\def\arrowexampledupdot[#1]{\arrowexample[{#1] . \currentarrowtype[}]}
+
+\def\arrowexampledouble#1[#2]{\def\temp{#1}\ifx\temp\pgfutil@empty\arrowexampledouble@\currentarrowtype[{#2}]\else\arrowexampledouble@#1[{#2}]\fi}
+\def\arrowexampledouble@#1[#2]{%
+ {\sfcode`\.1000\small\texttt{#1[#2]} on double line} \>
+ \tikz [baseline,>={#1[#2]}]
+ \draw [double equal sign distance,line width=0.4pt,->] (0,.5ex) -- (2em,.5ex); thin \>
+ \tikz [baseline,>={#1[#2]}]
+ \draw [double equal sign distance,line width=0.8pt,->] (0,.5ex) -- (2em,.5ex); \textbf{thick} \>
+ \tikz [baseline,>={#1[#2]}]
+ \draw [double equal sign distance, line width=1.6pt,->] (0,.5ex) -- (3em,.5ex); \\
+}
+
+
+
+\newcommand\symarrow[1]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \texttt{#1}& yields thick
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+\newcommand\symarrowdouble[1]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \texttt{#1}& yields thick
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+ and thin
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}, double
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\sarrow[2]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \index{#2@\protect\texttt{#2} arrow tip}%
+ \index{Arrow tips!#2@\protect\texttt{#2}}%
+ \texttt{#1-#2}& yields thick
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\sarrowdouble[2]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \index{#2@\protect\texttt{#2} arrow tip}%
+ \index{Arrow tips!#2@\protect\texttt{#2}}%
+ \texttt{#1-#2}& yields thick
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}, double
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\carrow[1]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \texttt{#1}& yields for line width 1ex
+ \begin{tikzpicture}[arrows={#1-#1},line width=1ex,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.6cm,2ex);
+ \fill [black!15] (1.5cm,-.5ex) rectangle (1.6cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1.5cm,.5ex);
+ \end{tikzpicture}
+}
+\def\myvbar{\char`\|}
+\newcommand\plotmarkentry[1]{%
+ \index{#1@\protect\texttt{#1} plot mark}%
+ \index{Plot marks!#1@\protect\texttt{#1}}
+ \texttt{\char`\\pgfuseplotmark\char`\{\declare{#1}\char`\}} &
+ \tikz\draw[color=black!25] plot[mark=#1,mark options={fill=examplefill,draw=black}] coordinates{(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
+}
+\newcommand\plotmarkentrytikz[1]{%
+ \index{#1@\protect\texttt{#1} plot mark}%
+ \index{Plot marks!#1@\protect\texttt{#1}}
+ \texttt{mark=\declare{#1}} & \tikz\draw[color=black!25]
+ plot[mark=#1,mark options={fill=examplefill,draw=black}]
+ coordinates {(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
+}
+
+
+
+\ifx\scantokens\@undefined
+ \PackageError{pgfmanual-macros}{You need to use extended latex
+ (elatex) or (pdfelatex) to process this document}{}
+\fi
+
+\begingroup
+\catcode`|=0
+\catcode`[= 1
+\catcode`]=2
+\catcode`\{=12
+\catcode `\}=12
+\catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]]
+|endgroup
+
+% define \returntospace.
+%
+% It should define NEWLINE as {}, spaces and tabs as \space.
+\begingroup
+\catcode`\^=7
+\catcode`\^^M=13
+\catcode`\^^I=13
+\catcode`\ =13%
+\gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^I=13\def^^I{\space}}
+\gdef\showreturn{\show^^M}
+\endgroup
+
+\begingroup
+\catcode`\%=13
+\catcode`\^^M=13
+\gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}}
+\gdef\@gobble@till@return#1^^M{}
+\gdef\@gobble@till@return@ignore#1^^M{\ignorespaces}
+\gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}}
+\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par}
+\endgroup
+
+% Define tab-implementation functions
+% \codeexample@tabinit@replacementchars@
+% and
+% \codeexample@tabinit@catcode@
+%
+% They should ONLY be used in case that tab replacement is active.
+%
+% This here is merely a preparation step.
+%
+% Idea:
+% \codeexample@tabinit@catcode@ will make TAB active
+% and
+% \codeexample@tabinit@replacementchars@ will insert as many spaces as
+% /codeexample/tabsize contains.
+{
+\catcode`\^^I=13
+% ATTENTION: do NOT use tabs in these definitions!!
+\gdef\codeexample@tabinit@replacementchars@{%
+ \begingroup
+ \count0=\pgfkeysvalueof{/codeexample/tabsize}\relax
+ \toks0={}%
+ \loop
+ \ifnum\count0>0
+ \advance\count0 by-1
+ \toks0=\expandafter{\the\toks0\ }%
+ \repeat
+ \xdef\codeexample@tabinit@replacementchars@@{\the\toks0}%
+ \endgroup
+ \let^^I=\codeexample@tabinit@replacementchars@@
+}%
+\gdef\codeexample@tabinit@catcode@{\catcode`\^^I=13}%
+}%
+
+% Called after any options have been set. It assigns
+% \codeexample@tabinit@catcode
+% and
+% \codeexample@tabinit@replacementchars
+% which are used inside of
+%\begin{codeexample}
+% ...
+%\end{codeexample}
+%
+% \codeexample@tabinit@catcode is either \relax or it makes tab
+% active.
+%
+% \codeexample@tabinit@replacementchars is either \relax or it inserts
+% a proper replacement sequence for tabs (as many spaces as
+% configured)
+\def\codeexample@tabinit{%
+ \ifnum\pgfkeysvalueof{/codeexample/tabsize}=0\relax
+ \let\codeexample@tabinit@replacementchars=\relax
+ \let\codeexample@tabinit@catcode=\relax
+ \else
+ \let\codeexample@tabinit@catcode=\codeexample@tabinit@catcode@
+ \let\codeexample@tabinit@replacementchars=\codeexample@tabinit@replacementchars@
+ \fi
+}
+
+\newif\ifpgfmanualtikzsyntaxhilighting
+
+\pgfqkeys{/codeexample}{%
+ width/.code= {\setlength\codeexamplewidth{#1}},
+ graphic/.code= {\colorlet{graphicbackground}{#1}},
+ code/.code= {\colorlet{codebackground}{#1}},
+ execute code/.is if=code@execute,
+ code only/.code= {\code@executefalse},
+ pre/.store in=\code@pre,
+ post/.store in=\code@post,
+ % #1 is the *complete* environment contents as it shall be
+ % typeset. In particular, the catcodes are NOT the normal ones.
+ typeset listing/.code= {#1},
+ render instead/.store in=\code@render,
+ vbox/.code= {\def\code@pre{\vbox\bgroup\setlength{\hsize}{\linewidth-6pt}}\def\code@post{\egroup}},
+ ignorespaces/.code= {\let\@gobble@till@return=\@gobble@till@return@ignore},
+ leave comments/.code= {\def\code@catcode@hook{\catcode`\%=12}\let\commenthandler=\relax\let\typesetcomment=\relax},
+ tabsize/.initial=0,% FIXME : this here is merely used for indentation. It is just a TAB REPLACEMENT.
+ every codeexample/.style={width=4cm+7pt, tikz syntax=true},
+ from file/.code={\codeexamplefromfiletrue\def\codeexamplesource{#1}},
+ tikz syntax/.is if=pgfmanualtikzsyntaxhilighting,
+}
+
+
+\newread\examplesource
+
+
+% Opening, reading and closing the results file
+
+\def\opensource#1{
+ \immediate\openin\examplesource=#1
+}
+\def\do@codeexamplefromfile{%
+ \immediate\openin\examplesource\expandafter{\codeexamplesource}%
+ \def\examplelines{}%
+ \readexamplelines
+ \closein\examplesource
+ \expandafter\endofcodeexample\expandafter{\examplelines}%
+}
+
+\def\readexamplelines{
+ \ifeof\examplesource%
+ \else
+ \immediate\read\examplesource to \exampleline
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\examplelines\expandafter\expandafter\expandafter{\expandafter\examplelines\exampleline}
+ \expandafter\readexamplelines%
+ \fi
+}
+
+\let\code@pre\pgfutil@empty
+\let\code@post\pgfutil@empty
+\let\code@render\pgfutil@empty
+\def\code@catcode@hook{}
+
+\newif\ifcodeexamplefromfile
+\newdimen\codeexamplewidth
+\newif\ifcode@execute
+\newbox\codeexamplebox
+\def\codeexample[#1]{%
+ \begingroup%
+ \code@executetrue
+ \pgfqkeys{/codeexample}{every codeexample,#1}%
+ \ifpgfmanualtikzsyntaxhilighting%
+ \pgfkeys{/codeexample/syntax hilighting}%
+ \fi%
+ \ifcodeexamplefromfile\begingroup\fi
+ \codeexample@tabinit% assigns \codeexample@tabinit@[catcode,replacementchars]
+ \parindent0pt
+ \begingroup%
+ \par%
+ \medskip%
+ \let\do\@makeother%
+ \dospecials%
+ \obeylines%
+ \@vobeyspaces%
+ \catcode`\%=13%
+ \catcode`\^^M=13%
+ \code@catcode@hook%
+ \codeexample@tabinit@catcode
+ \relax%
+ \ifcodeexamplefromfile%
+ \expandafter\do@codeexamplefromfile%
+ \else%
+ \expandafter\find@example%
+ \fi}
+\def\endofcodeexample#1{%
+ \endgroup%
+ \ifcode@execute%
+ \setbox\codeexamplebox=\hbox{%
+ \ifx\code@render\pgfutil@empty%
+ {%
+ {%
+ \returntospace%
+ \commenthandler%
+ \xdef\code@temp{#1}% removes returns and comments
+ }%
+ \catcode`\^^M=9%
+ \colorbox{graphicbackground}{\color{black}\ignorespaces%
+ \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}%
+ }%
+ \else%
+ \colorbox{graphicbackground}{\color{black}\ignorespaces%
+ \code@render}%
+ \fi%
+ }%
+ \ifdim\wd\codeexamplebox>\codeexamplewidth%
+ \def\code@start{\par}%
+ \def\code@flushstart{}\def\code@flushend{}%
+ \def\code@mid{\parskip2pt\par\noindent}%
+ \def\code@width{\linewidth-6pt}%
+ \def\code@end{}%
+ \else%
+ \def\code@start{%
+ \linewidth=\textwidth%
+ \parshape \@ne 0pt \linewidth
+ \leavevmode%
+ \hbox\bgroup}%
+ \def\code@flushstart{\hfill}%
+ \def\code@flushend{\hbox{}}%
+ \def\code@mid{\hskip6pt}%
+ \def\code@width{\linewidth-12pt-\codeexamplewidth}%
+ \def\code@end{\egroup}%
+ \fi%
+ \code@start%
+ \noindent%
+ \begin{minipage}[t]{\codeexamplewidth}\raggedright
+ \hrule width0pt%
+ \footnotesize\vskip-1em%
+ \code@flushstart\box\codeexamplebox\code@flushend%
+ \vskip-1ex
+ \leavevmode%
+ \end{minipage}%
+ \else%
+ \def\code@mid{\par}
+ \def\code@width{\linewidth-6pt}
+ \def\code@end{}
+ \fi%
+ \code@mid%
+ \colorbox{codebackground}{%
+ \pgfkeysvalueof{/codeexample/prettyprint/base color}%
+ \begin{minipage}[t]{\code@width}%
+ {%
+ \let\do\@makeother
+ \dospecials
+ \frenchspacing\@vobeyspaces
+ \normalfont\ttfamily\footnotesize
+ \typesetcomment%
+ \codeexample@tabinit@replacementchars
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi}%
+ \obeylines
+ \everypar \expandafter{\the\everypar \unpenalty}%
+ \pgfkeysvalueof{/codeexample/typeset listing/.@cmd}{#1}\pgfeov
+ }
+ \end{minipage}}%
+ \code@end%
+ \par%
+ \medskip
+ \endcodeexample\endgroup
+}
+
+\def\endcodeexample{\endgroup}
+
+
+\makeatother
+
+\usepackage{pgfmanual}
+
+
+% autoxref is now always on
+
+% \makeatletter
+% % \pgfautoxrefs will be defined by 'make dist'
+% \pgfutil@ifundefined{pgfautoxrefs}{%
+% \renewcommand\pgfmanualpdflabel[3][]{#3}% NO-OP
+% \def\pgfmanualpdfref#1#2{#2}%
+% \pgfkeys{
+% /pdflinks/codeexample links=false,% DISABLED.
+% }%
+% }{}
+% \makeatother
+
+\newdimen\pgfmanualcslinkpreskip
+
+% Styling of the pretty printer
+\pgfkeys{
+ /codeexample/syntax hilighting/.style={
+ /codeexample/prettyprint/key name/.code={\textcolor{green!50!black}{\pgfmanualpdfref{##1}{##1}}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\textcolor{green!50!black}{\pgfmanualpdfref{##1}{##1}}/\textcolor{blue!70!black}{\pgfmanualpdfref{/handlers/##2}{##2}}},
+ /codeexample/prettyprint/key value display only/.code={\textcolor{green!50!black}{{\itshape{\let\pgfmanualwordstartup\relax\pgfmanualprettyprintcode{##1}}}}},
+ /codeexample/prettyprint/cs/.code={\textcolor{blue!70!black}{\pgfmanualcslinkpreskip4.25pt\pgfmanualpdfref{##1}{##1}}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\textcolor{black}{\pgfmanualcslinkpreskip4.25pt\pgfmanualpdfref{##1}{##1}}\{\textcolor{black}{\pgfmanualprettyprintcode{##2}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\textcolor{black}{\pgfmanualcslinkpreskip4.25pt\pgfmanualpdfref{##1}{##1}}\{\textcolor{black}{\pgfmanualprettyprintpgfkeys{##2}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={\textcolor{black}{##1}\{\textcolor{blue!70!black}{\pgfmanualpdfref{##2}{##2}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={\textcolor{black}{##1}\{\textcolor{blue!70!black}{\pgfmanualpdfref{##2}{##2}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\pgfmanualwordstartup{\begingroup\pgfkeyssetvalue{/pdflinks/search key prefixes in}{}\pgfmanualpdfref{##1}{##1}\endgroup}},
+ /codeexample/prettyprint/point/.code={\textcolor{violet}{##1}},%
+ /codeexample/prettyprint/point with cs/.code 2 args={\textcolor{violet}{(\pgfmanualpdfref{##1}{##1}:##2}},%
+ /codeexample/prettyprint/comment font=\itshape,
+ /codeexample/prettyprint/base color/.initial=\color{black!55},
+ /pdflinks/render hyperlink/.code={%
+ {\setbox0=\hbox{##1}%
+ \rlap{{\color{white}\dimen0\wd0\advance\dimen0by-\pgfmanualcslinkpreskip\hskip\pgfmanualcslinkpreskip\vrule width\dimen0 height-1pt depth1.6pt}}%
+ \box0%
+ }%
+ }
+ }
+}
+
+\def\pgfmanualwordstartup{\textcolor{black}}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "beameruserguide"
+%%% End:
diff --git a/graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.pdf b/graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.pdf
new file mode 100644
index 0000000000..2c841d92dc
--- /dev/null
+++ b/graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.tex b/graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.tex
new file mode 100644
index 0000000000..3bc3365edb
--- /dev/null
+++ b/graphics/pgf/contrib/sa-tikz/doc/sa-tikz-doc.tex
@@ -0,0 +1,1123 @@
+% Architectures examples: http://hal.archives-ouvertes.fr/docs/00/14/95/27/PDF/RR.pdf
+\pdfminorversion=5
+\pdfobjcompresslevel=2
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{amsmath}
+\usepackage{lmodern}
+\usepackage[ruled, lined,linesnumbered]{algorithm2e}
+
+%% Use the tikz package and loading the library
+%\usepackage{tikz}
+%\usetikzlibrary{switching-architectures}
+
+%% Loading only the package
+\usepackage{sa-tikz}
+
+\usepackage{calc}
+\usepackage{imakeidx}
+
+\usepackage[naturalnames]{hyperref}
+ \hypersetup{%
+ colorlinks=true,
+ linkcolor=blue,
+ filecolor=blue,
+ urlcolor=blue,
+ citecolor=blue,
+ pdfborder=0 0 0,
+ }
+
+% dedicated commands:
+\newcommand\Tikz{Ti\textit kZ}
+\newcommand{\saTikZ}{S\textit{a}-\Tikz}
+
+\def\pgfautoxrefs{1}
+\input ./macros/pgfmanual-en-macros.tex
+
+\makeatletter
+\def\index@prologue{%
+\section*{Index}\addcontentsline{toc}{section}{Index}
+}
+\makeatother
+
+\usepackage{pgfmanual}
+
+\pgfkeys{
+ /pdflinks/search key prefixes in={/tikz/,/pgf/},
+ /pdflinks/internal link prefix=pgfp,
+ /pdflinks/codeexample links=true,
+ /pdflinks/warnings=false,
+ /pdflinks/show labels=false,
+}
+\makeindex
+\newcommand{\version}{0.7a}
+\newcommand{\versiondate}{January 29, 2014}
+
+\title{\saTikZ\footnote{This package has version number \textit{v}\version\ of \versiondate; it is released under and subject to the \href{http://www.latex-project.org/lppl/}{\LaTeX\ Project Public License (LPPL)}.}}
+\author{Claudio Fiandrino \\ \small\href{mailto:claudio.fiandrino@gmail.com}{\texttt{claudio.fiandrino@gmail.com}}}
+\date{\versiondate}
+
+\begin{document}
+\maketitle
+\tableofcontents
+
+\section*{Introduction}
+\addcontentsline{toc}{section}{Introduction}
+The \saTikZ\ library is a tool for drawing \emph{switching-architectures}. In particular, one of its aims, is to help students to verify the correctness of their exercises, but it could also help teachers in preparing lecture notes. The official webpage of the project is hosted on \href{http://cfiandra.github.io/Sa-TikZ/}{http://cfiandra.github.io/Sa-TikZ/} and a public repository of the library can be found in \href{https://github.com/cfiandra/Sa-TikZ}{https://github.com/cfiandra/Sa-TikZ}.
+
+The \saTikZ\ library can be loaded in a \LaTeX\ preamble by means of:
+\begin{flushleft}
+\verb|\usetikzlibrary{|\bgroup\color{red!75!black}\verb|switching-architectures|\egroup\verb|}|
+\end{flushleft}
+and in this case you should also load manually:
+\begin{flushleft}
+\verb|\usepackage{|\bgroup\color{red!75!black}\verb|tikz|\egroup\verb|}|
+\end{flushleft}
+or by means of:
+\begin{flushleft}
+\verb|\usepackage{|\bgroup\color{red!75!black}\verb|sa-tikz|\egroup\verb|}|
+\end{flushleft}
+In both cases the auxiliary \Tikz\ libraries \bgroup\color{red!75!black}\verb|calc|\egroup{}, \bgroup\color{red!75!black}\verb|decorations.pathreplacing|\egroup\ and \bgroup\color{red!75!black}\verb|positioning|\egroup\ are automatically loaded; in the latter case also the \Tikz\ package is loaded.
+
+The version \textit{v}\version\ is compliant with \Tikz\ 3.0.0\footnote{In order to compile the documentation, and only for this scope, \Tikz\ 3.0.0 is \emph{mandatory}.} and provides a way to draw Clos Networks Strictly-non-Blocking (snb) and Rearrangeable (rear), Benes Networks and Banyan Networks (in particular Omega\footnote{Implementation of Omega Networks by João Gabriel Reis.} and Flip Networks); moreover, the package provides the possibility to fully customize the aspect of the drawn network: the dimensions of module, their distance and the font used are some examples. Finally, \saTikZ\ let users to draw connections among the stages by accessing the single ports of the modules.
+
+\section{Basic usage}
+The simplest use of the package is to define a
+\begin{command}{{\node}}
+ Basic command definition.
+\end{command}
+with one of the following options
+\begin{key}{/tikz/clos snb}
+ Option for drawing a Clos Network Strictly-non-Blocking.
+\end{key}
+\begin{key}{/tikz/clos rear}
+ Option for drawing a Clos Network Rearrangeable.
+\end{key}
+\begin{key}{/tikz/benes}
+ Option for drawing a Benes Network.
+\end{key}
+\begin{key}{/tikz/benes complete}
+ Option for drawing a Benes Network with the lowest level of recursion.
+\end{key}
+\begin{key}{/tikz/banyan omega}
+ Option for drawing an Banyan-Omega Network.
+\end{key}
+\begin{key}{/tikz/banyan flip}
+ Option for drawing an Banyan-Omega Network with inverse shuffle exchange (Flip).
+\end{key}
+inside a |tikzpicture| environment:
+\begin{environment}{{tikzpicture}\opt{\oarg{options}}}
+\end{environment}
+
+\subsection{Examples of Clos Networks}
+
+The following example shows a Rearrangeable Clos Network.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[clos rear] {};
+\end{tikzpicture}
+\end{codeexample}
+
+The following example shows a Strictly-non-Blocking Clos Network.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[clos snb] {};
+\end{tikzpicture}
+\end{codeexample}
+
+Notice from the examples that the library is able to compute \textit{automatically} the constraints defining a Clos Network to be Strictly-non-Blocking or Rearrangeable. The network drawn is characterized by:
+\begin{itemize}
+\item the first stage with:
+\begin{itemize}
+\item a number of modules equal to 5;
+\item each one with two input ports;
+\end{itemize}
+\item the last stage with:
+\begin{itemize}
+\item a number of modules equal to 5;
+\item each one with two output ports.
+\end{itemize}
+\end{itemize}
+Each module of the network is numbered according to the stage it belongs to.
+
+\subsection{Examples of Benes Networks}
+
+The simplest example of a Benes Network:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[benes] {};
+\end{tikzpicture}
+\end{codeexample}
+is a Benes Network in which there are 8 input and output ports. To draw a Benes Network in which all modules are visible, the key |benes complete| should be used rather than the |benes| key. An example:
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[benes complete] {};
+\end{tikzpicture}
+\end{codeexample}
+
+The algorithm in which the internal connections of the |benes complete| networks are drawn is explained in detail in the appendix \ref{sec:benesconnalg}.
+
+\subsection{Examples of Banyan Networks}
+
+The following examples show the two Banyan Network architectures that \saTikZ\ can draw.
+
+\bgroup
+\tikzset{every node/.append style={scale=0.9,transform shape}}
+\begin{codeexample}[]
+\begin{tikzpicture}
+ % Omega Network on the left
+ \node[banyan omega] {};
+ \begin{scope}[xshift=7.25cm]
+ % Flip network on the right
+ \node[banyan flip]{};
+ \end{scope}
+\end{tikzpicture}
+\end{codeexample}
+\tikzset{every node/.append style={scale=1,transform shape}}
+\egroup
+
+\section{The options}
+\subsection{Designing choices}
+This subsection provides a detailed analysis of the options and parameters that can be used to draw Clos, Benes and Omega Networks. In particular:
+\begin{itemize}
+\item Clos Networks are analysed in \ref{subsubsec:clos};
+\item Benes Networks are analysed in \ref{subsubsec:benes};
+\item Banyan Networks are analysed in \ref{subsubsec:banyan}.
+\end{itemize}
+Each subsection presents the keys' definitions and simple examples to help the reader.
+
+\subsubsection{Clos Networks}
+\label{subsubsec:clos}
+The two first important design parameters are the total number of input ports of the first stage and the total number of output ports of the last stage. These two parameters could be customized by means of:
+
+\begin{key}{/tikz/N=\marg{value} (initially 10)}
+ This is the number of total input ports in the first stage.
+\end{key}
+
+\begin{key}{/tikz/M=\marg{value} (initially 10)}
+ This is the number of total output ports in the last stage.
+\end{key}
+
+Usually, a second important design parameter is the number of modules present in the first and last stage. \saTikZ\ defines:
+
+\begin{key}{/tikz/r1=\marg{value} (initially 5)}
+ This is the number of modules in the first stage.
+\end{key}
+
+\begin{key}{/tikz/r3=\marg{value} (initially 5)}
+ This is the number of modules in the last stage.
+\end{key}
+
+The two design parameters provide the number of ports of each module:
+\[m_1=\dfrac{N}{r_1} \hspace*{2cm} m_3=\dfrac{M}{r_3} \]
+
+Some examples considering |N|=9, |r1|=3, |M|=9 and |r3|=3.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[N=9,r1=3,M=9,r3=3,clos rear] {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[N=9,r1=3,M=9,r3=3,clos snb] {};
+\end{tikzpicture}
+\end{codeexample}
+
+Notice a very important thing: when the keys are set within the \cs{node}, the type of the architecture should be loaded \emph{after} all the design parameters; if this constraint is not respected, you will end up with an architecture which has default values. For example:
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[clos rear,N=9,r1=3,M=9,r3=3] {};
+\end{tikzpicture}
+\end{codeexample}
+
+\subsubsection{Benes Networks}
+\label{subsubsec:benes}
+Benes Networks are Clos Rearrangeable Networks composed of $2 \times 2$ modules. Hence, as design choice, it just possible to select the number of input/output ports:
+
+\begin{key}{/tikz/P=\marg{value} (initially 8)}
+ This is the number of total input/output ports in the first/third stage.
+\end{key}
+
+Notice that |P| could assume values
+\[P=2^p \qquad p=2,3,4,\ldots\]
+and the user is responsible to correctly set this parameter.
+
+For low values of $p$ there are no problems in visualizing the network, but as $p$ increases, the user should take care of the modules' dimension and the modules' separation (vertical and horizontal): these parameters could be customized as explained in the subsection \ref{subsec:customization}. Actually, for |benes complete| networks, the number of $p$ is crucial: when it is above 7, namely the network is bigger than $128\times 128$, PGF can not properly work due to internal limitations.
+
+Notice that, for |P|=4 the |benes| network and the |benes complete| network are indistinguishable:
+\begin{codeexample}[]
+\begin{tikzpicture}
+\tikzset{module size=0.5cm,
+ pin length factor=0.5,
+ module ysep=1}
+ \node[P=4,benes] {};
+ \begin{scope}[xshift=6cm]
+ \node[module xsep=2.5,P=4,benes complete]{};
+ \end{scope}
+\end{tikzpicture}
+\end{codeexample}
+
+Here is an example of Benes Network with |P|=16:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[P=16,benes] {};
+\end{tikzpicture}
+\end{codeexample}
+
+It holds the same concept afore-mentioned for Clos Networks: set the parameter |P| before declaring the \cs{node} to be a Benes Network.
+
+\subsubsection{Banyan Networks}
+\label{subsubsec:banyan}
+Banyan Networks are architectures based on Benes Networks: they have particular interconnections properties. As well as Benes Networks, only the number of inputs and outputs ports can be selected and it is |P|.
+
+\saTikZ is able to represent Omega and Flip Banyan Networks. Omega networks are based on João Gabriel Reis' implementation. An example of $4\times 4$ |banyan omega| network:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[P=4,banyan omega] {};
+\end{tikzpicture}
+\end{codeexample}
+
+An example of $4\times 4$ |banyan flip| network:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[P=4,banyan flip] {};
+\end{tikzpicture}
+\end{codeexample}
+
+\subsection{Output customization}
+\label{subsec:customization}
+This subsection presents the keys devoted to customize the networks' aspect.
+
+\begin{key}{/tikz/module size=\marg{value} (initially 1cm)}
+ This option allows to set the module dimension.
+\end{key}
+
+\begin{key}{/tikz/module ysep=\marg{value} (initially 1.5)}
+ This option allows to set the vertical module distance factor.
+\end{key}
+
+\begin{key}{/tikz/module xsep=\marg{value} (initially 3)}
+ This option allows to set the horizontal module distance factor.
+\end{key}
+
+\begin{key}{/tikz/module label opacity=\marg{value} (initially 1)}
+ This option allows to mask the module label when the \meta{value} is set to 0.
+\end{key}
+
+\begin{key}{/tikz/pin length factor=\marg{value} (initially 1)}
+ This option allows to reduce/increase the length of the pins drawn in input/output. Use a \meta{value} [0,1] to reduce the length or, viceversa, a \meta{value} greater than 1 to increase the length.
+\end{key}
+
+\begin{key}{/tikz/module font=\marg{font commands} (default \cs{normalfont})}
+ This option sets the font used for module labels. The \meta{font commands} that could be used are those ones related to the font size (i.e. \cs{Large}) and font shape (i.e \cs{itshape}).
+\end{key}
+
+\begin{key}{/tikz/connections disabled=\mchoice{true,false} (default false)}
+ This option, not active by default |connections disabled/.default=false|, allows to remove the connections between the stages when it is set to \opt{true}. Beware: this option is valid only for |clos snb|, |clos rear|, |benes| and |benes complete| networks, but it does not holds for the architectures explained in section \ref{sec:dida}.
+\end{key}
+
+The following example shows a Rearrangeable Clos Network with some custom options. Notice that the |module label opacity| should be given as parameter of the desired network.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[N=9,r1=3,M=9,r3=3]
+ \node[module size=0.5cm,pin length factor=0.5,
+ module ysep=1, module xsep=1.25,
+ clos rear={module label opacity=0}] {};
+\end{tikzpicture}
+\end{codeexample}
+
+The options could be also introduced with the standard \Tikz\ syntax:
+\begin{command}{{\tikzset}\marg{options}}
+ Command that process the various \meta{options}: they should be provided separated by commas.
+\end{command}
+
+Therefore, the previous example can be modified into:
+\begin{codeexample}[]
+\tikzset{module size=0.5cm,pin length factor=0.5,
+ module ysep=1, module xsep=1.25,}
+\begin{tikzpicture}[N=9,r1=3,M=9,r3=3]
+ \node[clos rear={module label opacity=0}] {};
+\end{tikzpicture}
+\end{codeexample}
+
+It is also possible to declare \opt{styles} to set some options for later use: this helps to keep the code clean especially when the same options are re-used several times; an example:
+\begin{codeexample}[code only]
+\tikzset{module size definition/.style={
+ module size=0.75cm,
+ pin length factor=0.75,
+ module xsep=2,
+ module ysep=2,
+ }
+}
+\tikzset{module size definition,
+ P=16,
+}
+\begin{tikzpicture}
+ \node[benes] {};
+\end{tikzpicture}
+\end{codeexample}
+
+Here is a Benes Network $4 \times 4$ which presents an extremely large font size for the module labels and its interconnection paths are disabled:
+\begin{codeexample}[]
+\tikzset{my style/.style={
+ module size=0.75cm,
+ pin length factor=0.75,
+ module xsep=2,
+ }
+}
+\tikzset{my style, P=4,
+ module font=\huge\slshape,
+ connections disabled=true
+}
+\begin{tikzpicture}
+ \node[benes complete] {};
+\end{tikzpicture}
+\end{codeexample}
+
+The following example is a $16 \times 16$ Omega Network.
+\begin{codeexample}[]
+\tikzset{module size=0.6cm,pin length factor=0.6,
+ module ysep=0.65, module xsep=3.5,}
+\begin{tikzpicture}[P=32]
+ \node[banyan omega] {};
+\end{tikzpicture}
+\end{codeexample}
+
+\pagebreak
+
+An example of Benes Network $32 \times 32$:
+\begin{codeexample}[]
+\tikzset{module size=0.6cm,pin length factor=0.6,
+ module ysep=0.9, module xsep=1.7,}
+\begin{tikzpicture}[P=32]
+ \node[benes] {};
+\end{tikzpicture}
+\end{codeexample}
+\pagebreak
+
+and its complete form:
+\begin{codeexample}[]
+\tikzset{module size=0.6cm,pin length factor=0.6,
+ module ysep=1, module xsep=2.275}
+\begin{tikzpicture}[P=32]
+ \node[benes complete={module label opacity=0}] {};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\section{Advanced usage}
+This section presents some more advanced examples. More in detail, it is described how to add elements to the basic architecture; the elements can be:
+\begin{itemize}
+\item labels for the input and output ports;
+\item paths interconnecting input and output ports.
+\end{itemize}
+
+\subsection{Identifying front input/output ports}
+In this subsection it is shown how to reference the front input and output ports for the first and last stage. Each front input port could be accessed by means of:
+\begin{flushleft}
+\verb|r1-|\bgroup\color{red!75!black}\verb|module number|\egroup\verb|-|\bgroup\color{red!75!black}\verb|front input|\egroup\verb|-|\bgroup\color{red!75!black}\verb|port number|\egroup; example: \verb|r1-1-front input-1|;
+\end{flushleft}
+Each front output port could be accessed by means of:
+\begin{flushleft}
+\verb|r3-|\bgroup\color{red!75!black}\verb|module number|\egroup\verb|-|\bgroup\color{red!75!black}\verb|front output|\egroup\verb|-|\bgroup\color{red!75!black}\verb|port number|\egroup; example: \verb|r3-1-front output-1|;
+\end{flushleft}
+Noticed that the first stage is always 1, but the last stage may be different from 3 in case the |benes complete| network is drawn. Errors will occur in case the last stage number is not correct and the user is responsible for the correct setting.
+
+A simple example with a Rearrangeable Clos network of 4 input and output ports; the first stage and the last one have both 2 modules.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[module xsep=2]
+ \node[N=4,r1=2,M=4,r3=2,clos rear={module label opacity=0}] {};
+ \foreach \name
+ in {r1-1-front input-1,r1-1-front input-2,
+ r1-2-front input-1,r1-2-front input-2}
+ \node[left] at (\name) {\scriptsize{\texttt{\name}}};
+ \foreach \name
+ in {r3-1-front output-1,r3-1-front output-2,
+ r3-2-front output-1,r3-2-front output-2}
+ \node[right] at (\name) {\scriptsize{\texttt{\name}}};
+\end{tikzpicture}
+\end{codeexample}
+
+The following is a Strictly-non-Blocking Clos network of 9 input and output ports in which the first and last stage have 3 modules each one.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[N=9,r1=3,M=9,r3=3,clos snb={module label opacity=0}] {};
+
+ \foreach \startmodule in {1,...,3}{
+ \foreach \port in {1,...,3}
+ \node[left] at (r1-\startmodule-front input-\port)
+ {\scriptsize{input \startmodule-\port}};
+ }
+ \foreach \startmodule in {1,...,3}{
+ \foreach \port in {1,...,3}
+ \node[right] at (r3-\startmodule-front output-\port)
+ {\scriptsize{output \startmodule-\port}};
+ }
+\end{tikzpicture}
+\end{codeexample}
+
+The same applies also for Benes Networks:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[benes={module label opacity=0}] {};
+
+ \foreach \startmodule in {1,...,4}{
+ \foreach \port in {1,...,2}
+ \node[left] at (r1-\startmodule-front input-\port)
+ {\scriptsize{input \startmodule-\port}};
+ }
+ \foreach \startmodule in {1,...,4}{
+ \foreach \port in {1,...,2}
+ \node[right] at (r3-\startmodule-front output-\port)
+ {\scriptsize{output \startmodule-\port}};
+ }
+\end{tikzpicture}
+\end{codeexample}
+and to the correspondent complete form:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[benes complete={module label opacity=0}] {};
+ \newcounter{port}
+ \setcounter{port}{0}
+ \foreach \startmodule in {1,...,4}{
+ \foreach \port in {1,...,2}
+ \stepcounter{port}
+ \node[left] at (r1-\startmodule-front input-\port)
+ {\scriptsize{input \theport}};
+ }
+ \setcounter{port}{0}
+ \foreach \startmodule in {1,...,4}{
+ \foreach \port in {1,...,2}
+ \stepcounter{port}
+ \node[right] at (r5-\startmodule-front output-\port)
+ {\scriptsize{output \theport}};
+ }
+\end{tikzpicture}
+\end{codeexample}
+Notice that in this case to access the \verb|front output| ports, the stage number correct is 5 and not 3 as usual.
+
+Ti\textit{k}Z has very useful \verb|bin(|$x$\verb|)| function: it converts $x$ (it is assumed to be a 10 base integer) into its binary representation. Exploiting this function for Omega or Flip Networks is very convenient. An example of Omega Network:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[banyan omega={module label opacity=0}] {};
+ \newcounter{porta}
+ \setcounter{porta}{0}
+ \foreach \module in {1,...,4}{
+ \foreach \port in {1,...,2}{
+ \stepcounter{porta}
+ \pgfmathbin{\theporta-1}% get the binary value of the counter
+ \node[left] at (r0-\module-front input-\port)
+ {\scriptsize{\pgfmathresult}};
+ \node[right] at (r3-\module-front output-\port)
+ {\scriptsize{\pgfmathresult}};
+ }
+ }
+\end{tikzpicture}
+\end{codeexample}
+
+An example of Flip Network:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[banyan flip={module label opacity=0}] {};
+ \newcounter{portb}
+ \setcounter{portb}{0}
+ \foreach \module in {1,...,4}{
+ \foreach \port in {1,...,2}{
+ \stepcounter{portb}
+ \pgfmathbin{\theportb-1}
+ \node[left] at (r0-\module-front input-\port)
+ {\scriptsize{\pgfmathresult}};
+ \node[right] at (r3-\module-front output-\port)
+ {\scriptsize{\pgfmathresult}};
+ }
+ }
+\end{tikzpicture}
+\end{codeexample}
+Notice that for Banyan Networks the first module is characterized by number 0 and not 1.
+
+\subsection{Identifying input/output ports per module}
+
+It is also possible to access, for each module of each stage, its input and output ports. The syntax is similar to the one used for the front input and output ports; each input port could be accessed by means of:
+\begin{flushleft}
+\verb|r|\bgroup\color{red!75!black}\verb|stage number|\egroup\verb|-|\bgroup\color{red!75!black}\verb|module number|\egroup\verb|-|\bgroup\color{red!75!black}\verb|input|\egroup\verb|-|\bgroup\color{red!75!black}\verb|port number|\egroup; example: \verb|r1-1-input-1|;
+\end{flushleft}
+Each output port could be accessed by means of:
+\begin{flushleft}
+\verb|r|\bgroup\color{red!75!black}\verb|stage number|\egroup\verb|-|\bgroup\color{red!75!black}\verb|module number|\egroup\verb|-|\bgroup\color{red!75!black}\verb|front output|\egroup\verb|-|\bgroup\color{red!75!black}\verb|port number|\egroup; example: \verb|r2-1-output-1|;
+\end{flushleft}
+This allows to derive connections from the first stage to the last stage. Here is an example.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[N=8,r1=4,M=8,r3=4,clos rear={module label opacity=0}] {};
+ \draw[red,ultra thick](r1-2-input-1)--(r1-2-output-2)
+ (r2-2-input-2)--(r2-2-output-3)
+ (r3-3-input-2)--(r3-3-output-2);
+ \draw[red,ultra thick](r1-4-input-1)--(r1-4-output-1)
+ (r2-1-input-4)--(r2-1-output-1)
+ (r3-1-input-1)--(r3-1-output-2);
+\end{tikzpicture}
+\end{codeexample}
+Similarly, an example in a Benes Network:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[benes={module label opacity=0}] {};
+ \draw[red,ultra thick](r1-2-input-1)--(r1-2-output-2)
+ (r2-2-input-2)--(r2-2-output-3)
+ (r3-3-input-2)--(r3-3-output-2);
+ \draw[red,ultra thick](r1-4-input-1)--(r1-4-output-1)
+ (r2-1-input-4)--(r2-1-output-1)
+ (r3-1-input-1)--(r3-1-output-2);
+\end{tikzpicture}
+\end{codeexample}
+and in its complete form:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[benes complete={module label opacity=0}] {};
+ \draw[red,ultra thick](r1-2-input-1)--(r1-2-output-2)--
+ (r2-3-input-2)--(r2-3-output-2)--
+ (r3-3-input-1)--(r3-3-output-2)--
+ (r4-4-input-1)--(r4-4-output-1)--
+ (r5-3-input-2)--(r5-3-output-2);
+ \draw[blue,ultra thick](r1-4-input-1)--(r1-4-output-1)--
+ (r2-2-input-2)--(r2-2-output-1)--
+ (r3-1-input-2)--(r3-1-output-1)--
+ (r4-1-input-1)--(r4-1-output-1)--
+ (r5-1-input-1)--(r5-1-output-2);
+\end{tikzpicture}
+\end{codeexample}
+
+For Banyan Networks, due to the way in which the interconnections are established, it is advised to proceed as follows:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[banyan omega={module label opacity=0}] {};
+ \newcounter{portc}
+ \setcounter{portc}{0}
+ \foreach \module in {1,...,4}{
+ \foreach \port in {1,...,2}{
+ \stepcounter{portc}
+ \pgfmathbin{\theportc-1}
+ \node[left] at (r0-\module-front input-\port)
+ {\scriptsize{\pgfmathresult}};
+ \node[right] at (r3-\module-front output-\port)
+ {\scriptsize{\pgfmathresult}};
+ }
+ }
+ \draw[red,ultra thick]
+ (r0-1-front input-2)--(r0-1-front output-2)--
+ (r1-2-front input-1)--(r1-2-input-1)--
+ (r1-2-output-2)--(r1-2-front output-2)--
+ (r2-4-front input-1)--(r2-4-input-1)--
+ (r2-4-output-1)--(r2-4-front output-1)--
+ (r3-3-front input-2)-- (r3-3-input-2)--
+ (r3-3-output-2)--(r3-3-front output-2);
+\end{tikzpicture}
+\end{codeexample}
+
+\section{Architectures for didactic purposes}
+\label{sec:dida}
+To quickly draw a Clos Network it is possible to exploit:
+\begin{key}{/tikz/clos snb example}
+ Option for quickly drawing a Clos Network Strictly-non-Blocking.
+\end{key}
+\begin{key}{/tikz/clos rear example}
+ Option for quickly drawing a Clos Network Rearrangeable.
+\end{key}
+In this way the network is not seen in its whole complexity, but it is synthetically depicted. An example of a Strictly-non-Blocking Clos Network drawn with this approach:
+\begin{codeexample}[]
+\begin{tikzpicture}[N=12,r1=4,M=8,r3=4]
+ \node[clos snb example] {};
+\end{tikzpicture}
+\end{codeexample}
+
+Similarly, an example of a Rearrangeable Clos Network:
+\begin{codeexample}[]
+\begin{tikzpicture}[N=12,r1=4,M=8,r3=4]
+ \node[clos rear example] {};
+\end{tikzpicture}
+\end{codeexample}
+
+The networks drawn, automatically display the values at which the input parameters |N|, |M|, |r1| and |r3| have been set. However, to let the user to have the possibility of deploying labels rather than the input parameter values, the following option is available:
+
+\begin{key}{/tikz/clos example with labels}
+ Option for quickly drawing a Clos Network with custom labels.
+\end{key}
+
+The labels could be customized by means of:
+\begin{key}{/tikz/N label=\marg{value} (default N)}
+ This options sets the label representing the total number of ports in the first stage.
+\end{key}
+
+\begin{key}{/tikz/r1 label=\marg{value} (default r$_1$)}
+ This options sets the label representing the number of modules in the first stage.
+\end{key}
+
+\begin{key}{/tikz/m1 label=\marg{value} (default m$_1$)}
+ This options sets the label representing the number of ports per module in the first stage.
+\end{key}
+
+\begin{key}{/tikz/r2 label=\marg{value} (default r$_2$)}
+ This options sets the label representing the number of modules in the second stage.
+\end{key}
+
+\begin{key}{/tikz/M label=\marg{value} (default M)}
+ This options sets the label representing the total number of ports in the last stage.
+\end{key}
+
+\begin{key}{/tikz/r3 label=\marg{value} (default r$_3$)}
+ This options sets the label representing the number of modules in the last stage.
+\end{key}
+
+\begin{key}{/tikz/m3 label=\marg{value} (default m$_3$)}
+ This options sets the label representing the number of ports per module in the last stage.
+\end{key}
+
+An example with the default values for the labels:
+
+\begin{codeexample}[]
+%\tikzset{N=8,r1=4,M=8,r3=4} % here, setting the parameters is useless
+\begin{tikzpicture}
+ \node[clos example with labels] {};
+\end{tikzpicture}
+\end{codeexample}
+
+To have automatically all the labels in math mode, you can use:
+\begin{key}{/tikz/set math mode labels=\mchoice{true,false} (default false)}
+ This option is normally disabled |set math mode labels/.default=false|; to ensure labels be set completely in math mode is sufficient set |set math mode labels=true| before the type of the network.
+\end{key}
+
+An example:
+\begin{codeexample}[]
+\begin{tikzpicture}[set math mode labels=true]
+ \node[clos example with labels] {};
+\end{tikzpicture}
+\end{codeexample}
+
+This example, instead, represents a |clos example with labels| network with custom labels introduced by means of the |\tikzset| syntax.
+
+\begin{codeexample}[]
+\tikzset{N label={p$_1$ $\times$ q$_1$},M label={p$_3$ $\times$ q$_3$},
+r1 label=p$_1$, m1 label=q$_1$, r2 label=p$_2$,r3 label=p$_3$, m3 label=q$_3$}
+\begin{tikzpicture}
+ \node[clos example with labels] {};
+\end{tikzpicture}
+\end{codeexample}
+
+Notice that it does not exist an equivalent of |clos example with labels| or |clos rear example| for Benes Networks: this because Benes Networks are a particular type of Rearrangeable Clos Networks where |P|=|N|=|M| and $m1$=$m3$=$z$=2, thus |r1|=|r3|=$q=P/z$.
+
+For example:
+
+\begin{codeexample}[]
+\begin{tikzpicture}[N=8,r1=4,M=8,r3=4]
+ \node[clos rear example] {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{codeexample}[]
+\tikzset{N label={P},M label={P},
+r1 label=q, m1 label=z, r2 label=z,r3 label=q, m3 label=z}
+\begin{tikzpicture}
+ \node[set math mode labels=true,clos example with labels] {};
+\end{tikzpicture}
+\end{codeexample}
+
+\clearpage
+\appendix
+
+\section{Algorithm for drawing connections in Benes Networks}
+\label{sec:benesconnalg}
+To explain how the connections of the |benes complete| networks are drawn, the following reference example will be considered:
+\begin{center}
+\scalebox{0.75}{
+ \begin{tikzpicture}[module size=0.75cm, module ysep=1, module xsep=2.5]
+ \node[P=16, benes complete]{};
+ \end{tikzpicture}
+}
+\end{center}
+The network is $16\times 16$ (|P|=16), thus the number of stages $\mathcal{S}$ is:
+\[\mathcal{S}=2\log_2{P}-1 \implies \mathcal{S}_{16}=7\]
+Indeed:
+\begin{center}
+\scalebox{0.75}{
+ \begin{tikzpicture}[module size=0.75cm, module ysep=1, module xsep=2.5]
+ \node[P=16, benes complete]{};
+ \foreach \x in {1,...,7}
+ \node[above of=r\x-1, red] {\x};
+ \draw[red,thick,decorate,decoration={brace}]([yshift=0.1cm]r1-1.north west)--([yshift=0.1cm]r7-1.north east);
+ \end{tikzpicture}
+}
+\end{center}
+This parameter, therefore, allows to correctly draw all the modules of the network. As it will be pointed out later better, knowing |P| is also important to define the range of applicability of the algorithm among the stages. Notice the network symmetry: the connections from stage 1 to stage 4 are exactly identical to the connections from stage 7 to stage 4.
+\pagebreak
+
+The first step is \emph{labelling} modules and ports. \saTikZ\ uses this rationale:
+\begin{itemize}
+\item progressive numeration for modules of the same stage;
+\item progressive numeration for ports of the same module.
+\end{itemize}
+
+Thus:
+\begin{center}
+\scalebox{0.75}{
+ \begin{tikzpicture}[module size=0.75cm, module ysep=1, module xsep=3.5, connections disabled=true]
+ \node[P=16, benes complete]{};
+ \foreach \stg in {2,...,6}{
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r\stg-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r\stg-\module-output-2) {2};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-2) {2};
+ }
+ }
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r1-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r1-\module-output-2) {2};
+ }
+ \foreach \module in {1,...,8}{
+ \node[left,font=\scriptsize] at (r7-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r7-\module-input-2) {2};
+ }
+ \end{tikzpicture}
+}
+\end{center}
+
+Due to the network symmetry, the attention will be focused only on the left side of the network initially. On the right part of the network, things are dual.
+
+\begin{center}
+\scalebox{0.75}{
+ \begin{tikzpicture}[module size=0.75cm, module ysep=1, module xsep=3.5, connections disabled=true]
+ \node[P=16, benes complete]{};
+ \foreach \stg in {2,...,6}{
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r\stg-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r\stg-\module-output-2) {2};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-2) {2};
+ }
+ }
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r1-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r1-\module-output-2) {2};
+ }
+ \foreach \module in {1,...,8}{
+ \node[left,font=\scriptsize] at (r7-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r7-\module-input-2) {2};
+ }
+ \begin{pgfonlayer}{background}
+ \draw[dashed, ultra thick, red, fill=red!10]
+ ($(r1-1-front input-1)+(-0.2,0.5)$)--($(r4-1-output-1)+(0.5,0.5)$)--($(r4-8-output-2)-(-0.5,0.5)$)--($(r1-8-front input-2)-(0.2,0.5)$)--cycle;
+ \end{pgfonlayer}
+ \end{tikzpicture}
+}
+\end{center}
+\pagebreak
+
+Now, by drawing some connections, it is possible to find a common behaviour:
+
+\begin{center}
+\scalebox{0.75}{
+ \begin{tikzpicture}[module size=0.75cm, module ysep=1, module xsep=3.5, connections disabled=true]
+ \node[P=16, benes complete]{};
+ \foreach \stg in {2,...,6}{
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r\stg-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r\stg-\module-output-2) {2};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-2) {2};
+ }
+ }
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r1-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r1-\module-output-2) {2};
+ }
+ \foreach \module in {1,...,8}{
+ \node[left,font=\scriptsize] at (r7-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r7-\module-input-2) {2};
+ }
+ % some connections
+ \begin{pgfonlayer}{background}
+ % first-second stage
+ \draw[thick,red](r1-1-output-1)--(r2-1-input-1);
+ \draw[thick,red](r1-1-output-2)--(r2-5-input-1);
+ \draw[thick,red](r1-2-output-1)--(r2-1-input-2);
+ \draw[thick,red](r1-2-output-2)--(r2-5-input-2);
+ % second-third stage
+ \draw[thick,red](r2-1-output-1)--(r3-1-input-1);
+ \draw[thick,red](r2-1-output-2)--(r3-3-input-1);
+ \draw[thick,red](r2-2-output-1)--(r3-1-input-2);
+ \draw[thick,red](r2-2-output-2)--(r3-3-input-2);
+ \draw[thick,red](r2-3-output-1)--(r3-2-input-1);
+ \draw[thick,red](r2-3-output-2)--(r3-4-input-1);
+ \draw[thick,red](r2-4-output-1)--(r3-2-input-2);
+ \draw[thick,red](r2-4-output-2)--(r3-4-input-2);
+ % third-fourth stage
+ \draw[thick,red](r3-1-output-1)--(r4-1-input-1);
+ \draw[thick,red](r3-1-output-2)--(r4-2-input-1);
+ \draw[thick,red](r3-2-output-1)--(r4-1-input-2);
+ \draw[thick,red](r3-2-output-2)--(r4-2-input-2);
+ \end{pgfonlayer}
+ \end{tikzpicture}
+}
+\end{center}
+\begin{itemize}
+\item if the start module $st$ and the output port are odd (i.e. module 1, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1}{2} \; , \; \textrm{port}=1 \]
+\item if the start module $st$ is odd and the output port is even (i.e. module 1, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1+\gamma}{2} \; , \; \textrm{port}=1 \]
+\item if the start module $st$ is even and the output port is odd (i.e. module 2, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st}{2} \; , \; \textrm{port}=2 \]
+\item if the start module $st$ and the output port are even (i.e. module 2, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+\gamma}{2}\; , \; \textrm{port}=2 \]
+\end{itemize}
+
+What is the term $\gamma$? It is a corrective term that depends on the starting stage. Consider, indeed, the connections of the output port 2 of module 1 in the first and in the second starting stages:
+\begin{flushleft}
+\texttt{r1-1-output-2} \tikz[baseline=-0.5ex]\draw[-stealth](0,0)--(0.5,0); \texttt{r2-5-input-1}\\
+\texttt{r2-1-output-2} \tikz[baseline=-0.5ex]\draw[-stealth](0,0)--(0.5,0); \texttt{r3-3-input-1}
+\end{flushleft}
+In the first case it points to module 5 while in the second case to module 3, thus $\gamma=8$ and $\gamma=4$ in the first case and in the second case respectively. This suggest that $\gamma$ is related in some sense to the stage of the start module: in our example |P|=16, hence the relation is
+\[\gamma=\dfrac{P}{2^{stage}}\]
+
+However, following this strategy allows to draw just part of the connections:
+\begin{center}
+\scalebox{0.75}{
+ \begin{tikzpicture}[module size=0.75cm, module ysep=1, module xsep=3.5, connections disabled=true]
+ \node[P=16, benes complete]{};
+ \foreach \stg in {2,...,6}{
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r\stg-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r\stg-\module-output-2) {2};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-2) {2};
+ }
+ }
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r1-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r1-\module-output-2) {2};
+ }
+ \foreach \module in {1,...,8}{
+ \node[left,font=\scriptsize] at (r7-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r7-\module-input-2) {2};
+ }
+ % some connections
+ \begin{pgfonlayer}{background}
+ \foreach \stg[evaluate=\stg as \nextstg using int(\stg+1)] in {1,...,3}{
+ \pgfmathtruncatemacro\applicationon{16/(2^\stg)}% number of modules over which the algorithm is applied
+ \foreach \startmodule in {1,...,\applicationon}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int(ceil(\startmodule+1+\applicationon)/2)}
+ \draw[red](r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw[red](r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2)}
+ \draw[red](r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw[red](r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ }
+ }
+ \end{pgfonlayer}
+ \end{tikzpicture}
+}
+\end{center}
+thus it is possible to claim that the algorithm has a \emph{module applicability range} that ultimately depends on the stage:
+\begin{itemize}
+\item in the first stage it could be applied for all modules;
+\item in the second stage it could be applied for half of the modules;
+\item in the third stage it could be applied just for two modules.
+\end{itemize}
+Since in the first stage $\gamma=8$ ($P/2^1$), in the second stage $\gamma=4$ ($P/2^2$) and in the third stage $\gamma=2$ ($P/2^3$): this means that $\gamma$ defines the \emph{module applicability range}.
+
+Notice now, that for the second stage and the third stage, the algorithm should be simply repeated:
+\begin{itemize}
+\item in the second stage 2 times;
+\item in the third stage 4 times.
+\end{itemize}
+The repetition $\psi$ depends on the stage according to the following relation:
+\[\psi= 2^{stage-1}\]
+Now, to draw automatically all the connections, the algorithm should know which are the starting module and ending module of the \emph{module applicability range} during the repetitions: for example, in the second stage, how to identify automatically the applicability range \texttt{1-4}, \texttt{5-8}?
+
+\begin{center}
+\scalebox{0.75}{
+ \begin{tikzpicture}[module size=0.75cm, module ysep=1, module xsep=3.5, connections disabled=true]
+ \node[P=16, benes complete]{};
+ \foreach \stg in {2,...,6}{
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r\stg-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r\stg-\module-output-2) {2};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r\stg-\module-input-2) {2};
+ }
+ }
+ \foreach \module in {1,...,8}{
+ \node[right,font=\scriptsize] at (r1-\module-output-1) {1};
+ \node[right,font=\scriptsize] at (r1-\module-output-2) {2};
+ }
+ \foreach \module in {1,...,8}{
+ \node[left,font=\scriptsize] at (r7-\module-input-1) {1};
+ \node[left,font=\scriptsize] at (r7-\module-input-2) {2};
+ }
+ % some connections
+ \begin{pgfonlayer}{background}
+ \filldraw[fill=blue!10,draw=white,rounded corners]($(r2-4)-(0.75,0.5)$)rectangle ($(r2-1)+(0.75,0.5)$);
+ \filldraw[fill=green!10,draw=white,rounded corners]($(r2-8)-(0.75,0.5)$)rectangle ($(r2-5)+(0.75,0.5)$);
+ \foreach \stg[evaluate=\stg as \nextstg using int(\stg+1)] in {1,...,3}{
+ \pgfmathtruncatemacro\applicationon{16/(2^\stg)}% number of modules over which the algorithm is applied
+ \foreach \startmodule in {1,...,\applicationon}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int(ceil(\startmodule+1+\applicationon)/2)}
+ \draw[red](r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw[red](r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2)}
+ \draw[red](r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw[red](r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ }
+ }
+
+ \draw($(r2-8)-(1,1)$)rectangle ($(r3-1)+(1,1)$);
+ \end{pgfonlayer}
+ \end{tikzpicture}
+}
+\end{center}
+
+They could be defined as:
+\begin{itemize}
+\item starting module: $st_m=1+(\psi-1)\cdot\gamma $;
+\item ending module: $end_m=(st_m+\gamma)-1$.
+\end{itemize}
+Indeed, for the second stage we have that $\gamma=4$ and $\psi=2\implies \{1,\, 2\}$, hence there are two starting and ending modules:
+\begin{itemize}
+\item starting modules: $st_{m_1}=1+(1-1)\cdot 4=1$ and $st_{m_2}=1+(2-1)\cdot 4=5$;
+\item ending modules: $end_{m_1}=(1+4)-1=4$ and $end_{m_2}=(5+4)-1=8$.
+\end{itemize}
+Unfortunately, the knowledge of the starting and ending modules of each stage is not sufficient to reach the goal: the reason is that the algorithm works and draws the connections in a correct manner when the module labels start with 1. However, during the repetitions the new starting module labels are different, thus the computation of the end connection point fails. This difference should be compensated with \emph{shifts} of the ending modules that depend on the level of repetition. The rules are:
+\begin{itemize}
+\item if $\psi=1$ (the algorithm works for all modules of the stage), then the ending module of the connection is computed as:
+\begin{itemize}
+\item if the start module $st$ and the output port are odd (i.e. module 1, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1}{2} \; , \; \textrm{port}=1 \]
+\item if the start module $st$ is odd and the output port is even (i.e. module 1, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1+\gamma}{2}\; , \; \textrm{port}=1 \]
+\item if the start module $st$ is even and the output port is odd (i.e. module 2, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st}{2} \; , \; \textrm{port}=2 \]
+\item if the start module $st$ and the output port are even (i.e. module 2, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+\gamma}{2}\; , \; \textrm{port}=2 \]
+\end{itemize}
+\item if $\psi=2$ (the algorithm should be repeated twice), then the ending module of the connection is computed as
+\begin{itemize}
+\item if the start module $st$ and the output port are odd (i.e. module 1, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1}{2}+\dfrac{\gamma}{2} \; , \; \textrm{port}=1 \]
+\item if the start module $st$ is odd and the output port is even (i.e. module 1, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1+\gamma}{2}+\dfrac{\gamma}{2}\; , \; \textrm{port}=1 \]
+\item if the start module $st$ is even and the output port is odd (i.e. module 2, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st}{2}+\dfrac{\gamma}{2} \; , \; \textrm{port}=2 \]
+\item if the start module $st$ and the output port are even (i.e. module 2, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+\gamma}{2}+\dfrac{\gamma}{2}\; , \; \textrm{port}=2 \]
+\end{itemize}
+\item if $\psi>2\implies t=3,\ldots, \psi$ (the algorithm should be repeated more than twice), then the ending module of the connection is computed as:
+\begin{itemize}
+\item if the start module $st$ and the output port are odd (i.e. module 1, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1}{2}+\left(\dfrac{\gamma}{2}\cdot (t-2)\right) \; , \; \textrm{port}=1 \]
+\item if the start module $st$ is odd and the output port is even (i.e. module 1, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+1+\gamma}{2}+\dfrac{\gamma}{2}+\left(\dfrac{\gamma}{2}\cdot (t-2)\right)\; , \; \textrm{port}=1 \]
+\item if the start module $st$ is even and the output port is odd (i.e. module 2, port 1), then it will be connected to
+\[\textrm{end module}=\dfrac{st}{2}+\left(\dfrac{\gamma}{2}\cdot (t-2)\right)\; , \; \textrm{port}=2 \]
+\item if the start module $st$ and the output port are even (i.e. module 2, port 2), then it will be connected to
+\[\textrm{end module}=\dfrac{st+\gamma}{2}+\dfrac{\gamma}{2}+\left(\dfrac{\gamma}{2}\cdot (t-2)\right)\; , \; \textrm{port}=2 \]
+\end{itemize}
+\end{itemize}
+Unfortunately, the rule $\psi>2$ when it is applied to the intermediate stages
+\[I_1=\lfloor\mathcal{S}\div 2\rfloor \hspace*{1cm} I_2=\mathcal{S}-(I_1-1)\]
+does not work; this implies that:
+\begin{itemize}
+\item on the left side of the network the applicability of the algorithm is from the starting stage 1 up to the starting stage $I_1-1$ (in the example |P|=16: from the starting stage 1 up to the starting stage 2);
+\item on the right side of the network the applicability of the algorithm is from the starting stage $\mathcal{S}$ up to the starting stage $I_2-1$ (in the example |P|=16: from the starting stage 7 up to the starting stage 6);
+\item for the intermediate starting stages $I_1$ and $I_2$ (in the example |P|=16: the stages 3 and 5) another rule should be used:
+\begin{itemize}
+\item if the start module $st$ and the output port are odd (i.e. module 1, port 1), then it will be connected to
+\[\textrm{end module}=st\; , \; \textrm{port}=1 \]
+\item if the start module $st$ is odd and the output port is even (i.e. module 1, port 2), then it will be connected to
+\[\textrm{end module}=st+1\; , \; \textrm{port}=1 \]
+\item if the start module $st$ is even and the output port is odd (i.e. module 2, port 1), then it will be connected to
+\[\textrm{end module}=st-1 \; , \; \textrm{port}=2 \]
+\item if the start module $st$ and the output port are even (i.e. module 2, port 2), then it will be connected to
+\[\textrm{end module}=st\; , \; \textrm{port}=2 \]
+\end{itemize}
+\end{itemize}
+
+To summarize, the algorithm to \textbf{d}raw \textbf{B}enes \textbf{n}etwork \textbf{c}onnections (dBnc) is reported in~\ref{algo_dBnc}: for the rules, please refer to the afore-mentioned description.
+
+\begin{algorithm}
+compute $\mathcal{S}=2\log_2{P}-1$\;
+compute $I_1=\lfloor\mathcal{S}\div 2\rfloor$\;
+compute $I_2=\mathcal{S}-(I_1-1)$\;
+\emph{from left to right}\;
+\For{$stg\leftarrow 1$ \KwTo $(I_1-1)$}{
+ compute $\gamma=P\div 2^{stg}$\;
+ compute $\psi=2^{stg-1}$\;
+ \For{$t\leftarrow 1$ \KwTo $\psi$}{
+ compute starting point $x=1+((t-1)\cdot\gamma)$\;
+ compute ending point $y=(x+\gamma)-1$\;
+ \ForEach{$\textrm{ start module } s \textrm{ in set } (x,y)$}{
+ \uIf{$t==1$}{
+ \uIf{$s$ is odd}{
+ use rules $\psi=1$ for starting module odd\;
+ }
+ \Else{
+ use rules $\psi=1$ for starting module even\;
+ }
+ }
+ \uIf{$t==2$}{
+ \uIf{$s$ is odd}{
+ use rules $\psi=2$ for starting module odd\;
+ }
+ \Else{
+ use rules $\psi=2$ for starting module even\;
+ }
+ }
+ \uIf{$t>2$}{
+ \uIf{$s$ is odd}{
+ use rules $\psi>2$ for starting module odd\;
+ }
+ \Else{
+ use rules $\psi>2$ for starting module even\;
+ }
+ }
+ }
+ }
+}
+\emph{from right to left}\;
+\For{$stg\leftarrow \mathcal{S}$ \KwTo $(I_2-1)$}{
+ repeat in dual mode $\textbf{6}-\textbf{32}$\;
+}
+\emph{complete with intermediate stages}\;
+\ForEach{$stg$ in set $(I_1,\, I_2)$}{
+ use rules for intermediate stages\;
+}
+\caption{\textbf{d}raw \textbf{B}enes \textbf{n}etwork \textbf{c}onnections (dBnc)}\label{algo_dBnc}
+\end{algorithm}
+
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * *
+% belongs to \usepackage{makeindex}
+\printindex
+\end{document}
diff --git a/graphics/pgf/contrib/sa-tikz/latex/sa-tikz.sty b/graphics/pgf/contrib/sa-tikz/latex/sa-tikz.sty
new file mode 100644
index 0000000000..e3e87b23c1
--- /dev/null
+++ b/graphics/pgf/contrib/sa-tikz/latex/sa-tikz.sty
@@ -0,0 +1,1246 @@
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%
+% Sa-TikZ package v0.7a * * (C) Claudio Fiandrino 2012-2014
+%
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{sa-tikz}[2014/1/29 v0.7a Switching architectures design library.]
+\RequirePackage{tikz}
+\usetikzlibrary{backgrounds,calc,positioning,decorations.pathreplacing}
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% UTILITY
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% PGFMATHISODD: 1 = true, 0 = false
+% from TikZ 3.0.0
+% Test for checking whether \pgfmathisodd is defined or not
+% for compatibility with TikZ 2.10
+%
+\@ifundefined{pgfmathisodd}{
+\pgfmathdeclarefunction{isodd}{1}{%
+ \begingroup
+ \pgfmathsetcount\c@pgfmath@counta{abs(int(#1))}%
+ \ifodd\c@pgfmath@counta
+ \def\pgfmathresult{1}%
+ \else
+ \def\pgfmathresult{0}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+}{}
+
+% PGFMATHOMEGAROTATION:
+%
+% #1: number to be rotated
+% #2: numbers of bits
+% #3: output macro
+%
+\newcommand*{\pgfmathomegarotation}[3]{
+ \pgfmathisodd{#1}
+ \ifnum\pgfmathresult=1
+ \pgfmathparse{#1/2 + 2^#2}
+ \else
+ \pgfmathparse{#1/2}
+ \fi
+ \pgfmathtruncatemacro\res\pgfmathresult
+ \global\expandafter\edef\csname #3\endcsname{\res}
+}
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% KEY DEFINITION - Design choices
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% * * * * * * * * * * * * * * * * * *
+% CLOS
+% * * * * * * * * * * * * * * * * * *
+
+% N is the key representing the number of inputs x number of modules first stage
+\pgfkeys{/tikz/.cd,%
+ N/.store in=\N,%
+ N=10,%
+}%
+
+% N label
+\pgfkeys{/tikz/.cd,%
+ N label/.store in=\Nlabel,%
+ N label=N,%
+}%
+
+% r1 is the number of modules first stage
+% m1 is the number of inputs first stage per module
+
+\pgfkeys{/tikz/.cd,%
+ r1/.store in=\rone,%
+ r1=5,%
+}%
+
+% r1 label
+\pgfkeys{/tikz/.cd,%
+ r1 label/.store in=\ronelabel,%
+ r1 label={r\ensuremath{_1}},%
+}%
+
+% m1 label
+\pgfkeys{/tikz/.cd,%
+ m1 label/.store in=\monelabel,%
+ m1 label={m\ensuremath{_1}},%
+}%
+
+% r2 label
+\pgfkeys{/tikz/.cd,%
+ r2 label/.store in=\rtwolabel,%
+ r2 label={r\ensuremath{_2}},%
+}%
+
+% M is the key representing the number of inputs x number of modules last stage
+\pgfkeys{/tikz/.cd,%
+ M/.store in=\M,%
+ M=10,%
+}%
+
+% M label
+\pgfkeys{/tikz/.cd,%
+ M label/.store in=\Mlabel,%
+ M label=M,%
+}%
+
+% r3 is the number of modules last stage
+% m3 is the number of inputs last stage per module
+\pgfkeys{/tikz/.cd,%
+ r3/.store in=\rthree,%
+ r3=5
+}%
+
+% r3 label
+\pgfkeys{/tikz/.cd,%
+ r3 label/.store in=\rthreelabel,%
+ r3 label={r\ensuremath{_3}},%
+}%
+
+% m3 label
+\pgfkeys{/tikz/.cd,
+ m3 label/.store in=\mthreelabel,%
+ m3 label={m\ensuremath{_3}},%
+}%
+
+% * * * * * * * * * * * * * * * * * *
+% BENES
+% * * * * * * * * * * * * * * * * * *
+
+% P is the number of input/output ports
+\pgfkeys{/tikz/.cd,%
+ P/.store in=\P,%
+ P=8,%
+}%
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% GENERAL SETTINGS - Keys and styles
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% module customization
+\pgfkeys{/tikz/.cd,%
+ module size/.store in=\modulesize,%
+ module size={1cm},%
+}%
+
+\pgfkeys{/tikz/.cd,%
+ module ysep/.store in=\moduleysep,%
+ module ysep={1.5},
+}%
+
+\pgfkeys{/tikz/.cd,%
+ module xsep/.store in=\modulexsep,%
+ module xsep={3},%
+}%
+
+\pgfkeys{/tikz/.cd,%
+ module font/.store in=\modulefont,%
+ module font={\normalfont},%
+}%
+
+\tikzset{module/.style={%
+ draw,rectangle, minimum size=\modulesize,
+ font=\modulefont,
+ }
+}
+
+\tikzset{module extensible/.style={%
+ draw,rectangle, minimum size=#1,
+ },
+ module extensible/.default={\modulesize}
+}
+
+\pgfkeys{/tikz/.cd,%
+ module label opacity/.store in=\modulelabelopacity,%
+ module label opacity={1},%
+}%
+
+\tikzset{module opacity/.style={
+ text opacity=\modulelabelopacity,
+ }
+}
+
+\pgfkeys{/tikz/.cd,%
+ pin length factor/.store in=\pinlength,%
+ pin length factor={1},%
+}%
+
+% setting labels in math mode
+
+\tikzset{math mode labels/.style={%
+ execute at begin node=$,%
+ execute at end node=$,%
+ }
+}
+\pgfkeys{/tikz/.cd,%
+ use math mode labels/.is choice,%
+ use math mode labels/true/.style={math mode labels},%
+ use math mode labels/false/.style={},%
+}%
+
+\tikzset{set math mode labels/.style={%
+ use math mode labels=#1,%
+ },%
+ set math mode labels/.default=false,%
+}
+
+% disable the connections
+\newif\ifconnectiondisabled%
+\pgfkeys{/tikz/.cd, connections disabled/.is if=connectiondisabled}%
+\pgfkeys{/tikz/.cd, connections disabled/.default=false}%
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% CODE
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% CLOS SNB
+\tikzset{clos snb/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION SNB CONDITION
+ \pgfmathtruncatemacro\rtwo{\mone+\mthree-1}
+
+ % MODULE 1
+ \foreach \i in {1,...,\rone}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r1-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\mone+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\mone}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\roneintervalspace{1/(\rtwo+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \foreach \i in {1,...,\rtwo}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r2-\i) at +(\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 2
+ % the number of inputs of module two is the number of modules stage 1 \rone
+ \pgfmathsetmacro\rtwointervalspace{1/(\rone+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,...,\rone}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % the number of outputs module two is exactly \rthree
+ \pgfmathsetmacro\rtwointervalspace{1/(\rthree+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,...,\rthree}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+
+ }
+
+ % MODULE 3
+ \foreach \i in {1,...,\rthree}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r3-\i) at +(2*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 3
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rthreeintervalspace{1/(\rtwo+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rthreeintervalspace{1/(\mthree+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,...,\mthree}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,...,\rone}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,...,\rthree}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+ \fi
+ },
+}
+
+\tikzset{clos snb example/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION SNB CONDITION
+ \pgfmathtruncatemacro\rtwo{\mone+\mthree-1}
+
+ % MODULE 1
+ \node[module,#1,module opacity](r1-1) at (0,0) {1};
+ \node[below of=r1-1,yshift=0.75ex](r1-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r1-dots](r1-2) {\rone};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,2}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \node[module,#1,module opacity](r2-1) at (\modulexsep,0) {1};
+ \node[below of=r2-1,yshift=0.75ex](r2-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r2-dots](r2-2) {\rtwo};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+ }
+
+ % MODULE 3
+ \node[module,#1,module opacity](r3-1) at (2*\modulexsep,0) {1};
+ \node[below of=r3-1,yshift=0.75ex](r3-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r3-dots](r3-2) {\rthree};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,2}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+
+ % SETTING LABELS
+ \node[below of=r1-2,set math mode labels] {\mone~\ensuremath{\times}~\rtwo};
+ \node[below of=r2-2,set math mode labels] {\rone~\ensuremath{\times}~\rthree};
+ \node[below of=r3-2,set math mode labels] {\rtwo~\ensuremath{\times}~\mthree};
+ \draw[decorate,decoration={brace}]($(r1-2-front input-2)-(0.1,0)$)--($(r1-1-front input-1)-(0.1,0)$) node[midway,left=0.1cm,set math mode labels]{\N};
+ \draw[decorate,decoration={brace}]($(r3-1-front output-1)+(0.1,0)$)--($(r3-2-front output-2)+(0.1,0)$) node[midway,right=0.1cm,set math mode labels]{\M};
+ },
+}
+
+% CLOS REAR
+
+\tikzset{clos rear/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION REAR CONDITION
+ \pgfmathtruncatemacro\rtwo{max(\mone,\mthree)}
+
+ % MODULE 1
+ \foreach \i in {1,...,\rone}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r1-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\mone+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\mone}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\roneintervalspace{1/(\rtwo+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \foreach \i in {1,...,\rtwo}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r2-\i) at +(\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 2
+ % the number of inputs of module two is the number of modules stage 1 \rone
+ \pgfmathsetmacro\rtwointervalspace{1/(\rone+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,...,\rone}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % the number of outputs module two is exactly \rthree
+ \pgfmathsetmacro\rtwointervalspace{1/(\rthree+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,...,\rthree}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+
+ }
+
+ % MODULE 3
+ \foreach \i in {1,...,\rthree}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r3-\i) at +(2*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 3
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rthreeintervalspace{1/(\rtwo+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rthreeintervalspace{1/(\mthree+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,...,\mthree}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,...,\rone}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,...,\rthree}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+ \fi
+ }
+}
+
+\tikzset{clos rear example/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION REAR CONDITION
+ \pgfmathtruncatemacro\rtwo{max(\mone,\mthree)}
+
+ % MODULE 1
+ \node[module,#1,module opacity](r1-1) at (0,0) {1};
+ \node[below of=r1-1,yshift=0.75ex](r1-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r1-dots](r1-2) {\rone};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,2}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \node[module,#1,module opacity](r2-1) at (\modulexsep,0) {1};
+ \node[below of=r2-1,yshift=0.75ex](r2-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r2-dots](r2-2) {\rtwo};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+ }
+
+ % MODULE 3
+ \node[module,#1,module opacity](r3-1) at (2*\modulexsep,0) {1};
+ \node[below of=r3-1,yshift=0.75ex](r3-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r3-dots](r3-2) {\rthree};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,2}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+
+ % SETTING LABELS
+ \node[below of=r1-2, set math mode labels] {\mone~\ensuremath{\times}~\rtwo};
+ \node[below of=r2-2, set math mode labels] {\rone~\ensuremath{\times}~\rthree};
+ \node[below of=r3-2, set math mode labels] {\rtwo~\ensuremath{\times}~\mthree};
+ \draw[decorate,decoration={brace}]($(r1-2-front input-2)-(0.1,0)$)--($(r1-1-front input-1)-(0.1,0)$) node[midway,left=0.1cm, set math mode labels]{\N};
+ \draw[decorate,decoration={brace}]($(r3-1-front output-1)+(0.1,0)$)--($(r3-2-front output-2)+(0.1,0)$) node[midway,right=0.1cm, set math mode labels]{\M};
+ },
+}
+
+% CLOS EXAMPLE WITH LABELS
+
+\tikzset{clos example with labels/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION REAR CONDITION
+ \pgfmathtruncatemacro\rtwo{max(\mone,\mthree)}
+
+ % MODULE 1
+ \node[module,#1,module opacity](r1-1) at (0,0) {1};
+ \node[below of=r1-1,yshift=0.75ex](r1-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r1-dots](r1-2) {\ronelabel};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,2}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \node[module,#1,module opacity](r2-1) at (\modulexsep,0) {1};
+ \node[below of=r2-1,yshift=0.75ex](r2-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r2-dots](r2-2) {\rtwolabel};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+ }
+
+ % MODULE 3
+ \node[module,#1,module opacity](r3-1) at (2*\modulexsep,0) {1};
+ \node[below of=r3-1,yshift=0.75ex](r3-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r3-dots](r3-2) {\rthreelabel};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,2}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+
+ % SETTING LABELS
+ \node[below of=r1-2,set math mode labels] {\monelabel~\ensuremath{\times}~\rtwolabel};
+ \node[below of=r2-2,set math mode labels] {\ronelabel~\ensuremath{\times}~\rthreelabel};
+ \node[below of=r3-2,set math mode labels] {\rtwolabel~\ensuremath{\times}~\mthreelabel};
+ \draw[decorate,decoration={brace}]($(r1-2-front input-2)-(0.1,0)$)--($(r1-1-front input-1)-(0.1,0)$) node[midway,left=0.1cm,set math mode labels]{\Nlabel};
+ \draw[decorate,decoration={brace}]($(r3-1-front output-1)+(0.1,0)$)--($(r3-2-front output-2)+(0.1,0)$) node[midway,right=0.1cm,set math mode labels]{\Mlabel};
+ },
+}
+
+% BENES
+% uses modules 2x2
+
+\tikzset{benes/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Numbers of modules in the second stage
+ \pgfmathtruncatemacro\rtwo{\m}
+
+ % Number of modules in the first/third stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ \ifnum\P=4
+ \def\increment{0-\i*0.5*\r*\moduleysep}
+ \def\xincrement{\r*0.25*\modulexsep}
+ \else
+ \def\increment{0-\i*0.39*\r*\moduleysep}
+ \def\xincrement{\r*0.2*\modulexsep}
+ \fi
+
+ % MODULE 1
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r1-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\m}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\roneintervalspace{1/(\rtwo+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \foreach \i in {1,...,\rtwo}{
+
+ \path let \n1 = {int(0-\i)}, \n2={\increment}
+ in
+ node[module extensible={\r*0.5*\modulesize},#1,module opacity,yshift=1cm] (r2-\i) at +(\xincrement,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 2
+ % the number of inputs of module two is the number of modules stage 1 \rone
+ \pgfmathsetmacro\rtwointervalspace{1/(\r+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,...,\r}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % the number of outputs module two is exactly \rthree
+ \pgfmathsetmacro\rtwointervalspace{1/(\r+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,...,\r}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+
+ }
+
+ % MODULE 3
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r3-\i) at +(2*\xincrement,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 3
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rthreeintervalspace{1/(\rtwo+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % the number of outputs module three is exactly \m
+ \pgfmathsetmacro\rthreeintervalspace{1/(\m+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,...,\m}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,...,\r}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,...,\r}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+ \fi
+ }
+}
+
+% BENES COMPLETE
+
+\tikzset{benes complete/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Number of modules in the first/third stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ % Number of stages
+ \pgfmathtruncatemacro{\stages}{2*round(log2(\P))-1}
+
+ % MODULES for all stages
+ \foreach \s [evaluate=\s as \numstage using int(\s-1)] in {1,...,\stages}{
+ \ifnum\s=1
+ % FIRST MODULE
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r\s-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\m}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+ \fi
+ \ifnum\s=\stages
+ % FINAL MODULE
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE \s
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \rinput[evaluate=\rinput as \rinterval using \rintervalspace*\rinput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r\s-\i-input-\rinput)at($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$) {};
+
+ % OUTPUTS MODULE \s
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput]
+ in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r\s-\i-front output-\routput){}--($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ \pgfmathparse{and(\s>1,\s<\stages)}
+ \let\cond\pgfmathresult
+ \ifnum\cond=1
+ % INTERMEDIATE MODULEs
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE \s
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \rinput[evaluate=\rinput as \rinterval using \rintervalspace*\rinput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r\s-\i-input-\rinput)at($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$) {};
+
+ % OUTPUTS MODULE \s
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r\s-\i-output-\routput) at($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) {};
+ }
+ \fi
+ }
+ % end modules
+
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % CONNECTIONS
+
+ % the algorithm works for all the stages a part from the two in the middle
+ \ifnum\P>4 % in this case there are just two stages, thus the algorithm fails: treat it separately
+ % Compute \stages/2: they are the stages from left to the middle or from right to the middle
+ \pgfmathparse{floor(divide(\stages,2))}
+ \pgfmathtruncatemacro\stagesondirection{\pgfmathresult-1}
+
+ % on left
+ \foreach \stg[evaluate=\stg as \nextstg using int(\stg+1)] in {1,...,\stagesondirection}{
+ \pgfmathtruncatemacro\applicationon{\P/(2^\stg)}% number of modules over which the algorithm is applied
+ \pgfmathtruncatemacro\repetition{int(2^(\stg-1))}% the algorithm should be repeated for \repetition times
+ \foreach \t in {1,...,\repetition}{
+ \pgfmathtruncatemacro\startingpoint{1+((\t-1)*\applicationon)}
+ \pgfmathtruncatemacro\endingpoint{(\startingpoint+\applicationon)-1}
+ \foreach \startmodule in {\startingpoint,...,\endingpoint}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\t=1
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2)}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2)}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ \fi
+ \ifnum\t=2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ \fi
+ \ifnum\t>2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ \fi
+ }
+ }
+ }
+
+ % on the right
+
+ \foreach \stg[evaluate=\stg as \currstg using int(\stages-(\stg-1)),
+ evaluate=\stg as \nextstg using int(\currstg-1)] in {1,...,\stagesondirection}{
+ \pgfmathtruncatemacro\applicationon{\P/(2^\stg)}% number of modules over which the algorithm is applied
+ \pgfmathtruncatemacro\repetition{int(2^(\stg-1))}% the algorithm should be repeated for \repetition times
+ \foreach \t in {1,...,\repetition}{
+ \pgfmathtruncatemacro\startingpoint{1+((\t-1)*\applicationon)}
+ \pgfmathtruncatemacro\endingpoint{(\startingpoint+\applicationon)-1}
+ \foreach \startmodule in {\startingpoint,...,\endingpoint}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\t=1
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2)}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-1);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2)}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-2);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-2);
+ \fi
+ \fi
+ \ifnum\t=2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-1);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-2);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-2);
+ \fi
+ \fi
+ \ifnum\t>2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-1);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-2);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-2);
+ \fi
+ \fi
+ }
+ }
+ }
+
+ \fi
+
+
+ % * * * *
+ % 2 Intermediate stages
+
+ % Compute \stages/2
+ \pgfmathparse{floor(divide(\stages,2))}
+ \pgfmathtruncatemacro\middlestage{\pgfmathresult}
+ \pgfmathtruncatemacro\middlestagei{int(\middlestage+1)}
+ \pgfmathtruncatemacro\middlestageii{int(\middlestagei+1)}
+
+ % Drawing
+ \foreach \startmodule in {1,...,\r}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodule{int(\startmodule+1)}
+ \draw(r\middlestage-\startmodule-output-1)--(r\middlestagei-\startmodule-input-1);
+ \draw(r\middlestage-\startmodule-output-2)--(r\middlestagei-\endmodule-input-1);
+ \draw(r\middlestagei-\startmodule-output-1)--(r\middlestageii-\startmodule-input-1);
+ \draw(r\middlestagei-\startmodule-output-2)--(r\middlestageii-\endmodule-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodule{int(\startmodule-1)}
+ \draw(r\middlestage-\startmodule-output-1)--(r\middlestagei-\endmodule-input-2);
+ \draw(r\middlestage-\startmodule-output-2)--(r\middlestagei-\startmodule-input-2);
+ \draw(r\middlestagei-\startmodule-output-1)--(r\middlestageii-\endmodule-input-2);
+ \draw(r\middlestagei-\startmodule-output-2)--(r\middlestageii-\startmodule-input-2);
+ \fi
+ }
+ % end connections
+ \fi % disable connections
+ }
+}
+
+% BANYAN NETWORKS
+
+% BANYAN-OMEGA (thanks to João Gabriel Reis)
+
+\tikzset{banyan omega/.code={
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Number of modules in each stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ % Number of stages
+ \pgfmathtruncatemacro{\stages}{round(log2(\P))}
+
+ % Modules for all stages
+ \foreach \s [evaluate=\s as \numstage using int(\s-1)] in {0,...,\stages}{
+ \ifnum\s=0
+ % Invisible modules
+ \foreach \i in {1,...,\r}{
+ \path let \n2={-\i*\moduleysep} in
+ node[rectangle,minimum height=\modulesize,#1,module opacity,xshift=\modulesize/2,yshift=1cm]
+ (r\s-\i) at +(-0.6*\modulexsep,\n2) {};
+
+ % Invisible modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate] (r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[coordinate](r\s-\i-output-\routput) {};
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)-(0.5*0.3*\pinlength,0)$) node[circle,draw,scale=0.1] (r\s-\i-front input-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[coordinate](r\s-\i-input-\routput) {};
+ }
+ \fi
+ \ifnum\s=\stages
+ % Final Module
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm] (r\s-\i) at
+ +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Final module inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$)node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Final module outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+
+ \pgfmathparse{and(\s>0,\s<\stages)}
+ \let\cond\pgfmathresult
+ \ifnum\cond=1
+ % Intermediate modules
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm]
+ (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Intermediate modules inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$)node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Intermediate modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % Connections
+ \foreach \stg[evaluate=\stg as \prevstg using int(\stg - 1)] in {1,...,\stages}{
+ \foreach \startmod in {1,...,\r}{
+ \pgfmathomegarotation{2*(\startmod - 1)}{\stages - 1}{address}
+ \pgfmathtruncatemacro\endmodi{\address/2 + 1}
+ \pgfmathtruncatemacro\endmodii{\endmodi + \r/2}
+ \pgfmathtruncatemacro\cond{mod(\startmod,2)}
+ \ifnum\cond=0
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-2);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-2);
+ \else
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-1);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-1);
+ \fi
+ }
+ }
+ \fi
+}
+}
+
+% BANYAN-FLIP
+
+\tikzset{banyan flip/.code={
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Number of modules in each stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ % Number of stages
+ \pgfmathtruncatemacro{\stages}{round(log2(\P))}
+
+ % Modules for all stages
+ \foreach \s [evaluate=\s as \numstage using int(\s-1)] in {0,...,\stages}{
+ \ifnum\s=0
+ % Final Module
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm] (r\s-\i) at
+ +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Final module inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$) node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Final module outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ \ifnum\s=\stages
+ % Invisible modules
+ \foreach \i in {1,...,\r}{
+ \path let \n2={-\i*\moduleysep} in
+ node[rectangle,minimum height=\modulesize,#1,module opacity,xshift=\modulesize/2,yshift=1cm]
+ (r\s-\i) at +(\numstage*0.415*\modulexsep,\n2) {};
+
+ % Invisible modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \rinterval using \rintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$)node [coordinate](r\s-\i-input-\roneinput) {} --
+ ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$)
+ node [coordinate] (r\s-\i-front input-\roneinput) {};
+ \foreach \roneinput[evaluate=\roneinput as \rinterval using \rintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$)node [coordinate](r\s-\i-input-\roneinput) {} --
+ ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)+(0.5*0.3*\pinlength,0)$)
+ node [circle,draw,scale=0.1] (r\s-\i-front output-\roneinput) {};
+ }
+ \fi
+ \pgfmathparse{and(\s>0,\s<\stages)}
+ \let\cond\pgfmathresult
+ \ifnum\cond=1
+ % Intermediate modules
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm]
+ (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Intermediate modules inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$) node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Intermediate modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach\routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % Connections
+ \foreach \stg[evaluate=\stg as \prevstg using int(\stg - 1)] in {1,...,\stages}{
+ \foreach \startmod in {1,...,\r}{
+ \pgfmathomegarotation{2*(\startmod - 1)}{\stages - 1}{address}
+ \pgfmathtruncatemacro\endmodi{\address/2 + 1}
+ \pgfmathtruncatemacro\endmodii{\endmodi + \r/2}
+ \pgfmathtruncatemacro\cond{mod(\startmod,2)}
+ \ifnum\cond=0
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-2);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-2);
+ \else
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-1);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-1);
+ \fi
+ }
+ }
+ \fi
+}
+}
+
+
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/sa-tikz/latex/tikzlibraryswitching-architectures.code.tex b/graphics/pgf/contrib/sa-tikz/latex/tikzlibraryswitching-architectures.code.tex
new file mode 100644
index 0000000000..995bd194a5
--- /dev/null
+++ b/graphics/pgf/contrib/sa-tikz/latex/tikzlibraryswitching-architectures.code.tex
@@ -0,0 +1,1248 @@
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%
+% Sa-TikZ package v0.7a * * (C) Claudio Fiandrino 2012-2014
+%
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% LOADING NECESSARY LIBRARIES
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+\usetikzlibrary{backgrounds,calc,positioning,decorations.pathreplacing}
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% UTILITY
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% PGFMATHISODD: 1 = true, 0 = false
+% from TikZ 3.0.0
+% Test for checking whether \pgfmathisodd is defined or not
+% for compatibility with TikZ 2.10
+%
+\@ifundefined{pgfmathisodd}{
+\pgfmathdeclarefunction{isodd}{1}{%
+ \begingroup
+ \pgfmathsetcount\c@pgfmath@counta{abs(int(#1))}%
+ \ifodd\c@pgfmath@counta
+ \def\pgfmathresult{1}%
+ \else
+ \def\pgfmathresult{0}%
+ \fi
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup}
+}{}
+
+% PGFMATHOMEGAROTATION:
+%
+% #1: number to be rotated
+% #2: numbers of bits
+% #3: output macro
+%
+\newcommand*{\pgfmathomegarotation}[3]{
+ \pgfmathisodd{#1}
+ \ifnum\pgfmathresult=1
+ \pgfmathparse{#1/2 + 2^#2}
+ \else
+ \pgfmathparse{#1/2}
+ \fi
+ \pgfmathtruncatemacro\res\pgfmathresult
+ \global\expandafter\edef\csname #3\endcsname{\res}
+}
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% KEY DEFINITION - Design choices
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% * * * * * * * * * * * * * * * * * *
+% CLOS
+% * * * * * * * * * * * * * * * * * *
+
+% N is the key representing the number of inputs x number of modules first stage
+\pgfkeys{/tikz/.cd,%
+ N/.store in=\N,%
+ N=10,%
+}%
+
+% N label
+\pgfkeys{/tikz/.cd,%
+ N label/.store in=\Nlabel,%
+ N label=N,%
+}%
+
+% r1 is the number of modules first stage
+% m1 is the number of inputs first stage per module
+
+\pgfkeys{/tikz/.cd,%
+ r1/.store in=\rone,%
+ r1=5,%
+}%
+
+% r1 label
+\pgfkeys{/tikz/.cd,%
+ r1 label/.store in=\ronelabel,%
+ r1 label={r\ensuremath{_1}},%
+}%
+
+% m1 label
+\pgfkeys{/tikz/.cd,%
+ m1 label/.store in=\monelabel,%
+ m1 label={m\ensuremath{_1}},%
+}%
+
+% r2 label
+\pgfkeys{/tikz/.cd,%
+ r2 label/.store in=\rtwolabel,%
+ r2 label={r\ensuremath{_2}},%
+}%
+
+% M is the key representing the number of inputs x number of modules last stage
+\pgfkeys{/tikz/.cd,%
+ M/.store in=\M,%
+ M=10,%
+}%
+
+% M label
+\pgfkeys{/tikz/.cd,%
+ M label/.store in=\Mlabel,%
+ M label=M,%
+}%
+
+% r3 is the number of modules last stage
+% m3 is the number of inputs last stage per module
+\pgfkeys{/tikz/.cd,%
+ r3/.store in=\rthree,%
+ r3=5
+}%
+
+% r3 label
+\pgfkeys{/tikz/.cd,%
+ r3 label/.store in=\rthreelabel,%
+ r3 label={r\ensuremath{_3}},%
+}%
+
+% m3 label
+\pgfkeys{/tikz/.cd,
+ m3 label/.store in=\mthreelabel,%
+ m3 label={m\ensuremath{_3}},%
+}%
+
+% * * * * * * * * * * * * * * * * * *
+% BENES
+% * * * * * * * * * * * * * * * * * *
+
+% P is the number of input/output ports
+\pgfkeys{/tikz/.cd,%
+ P/.store in=\P,%
+ P=8,%
+}%
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% GENERAL SETTINGS - Keys and styles
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% module customization
+\pgfkeys{/tikz/.cd,%
+ module size/.store in=\modulesize,%
+ module size={1cm},%
+}%
+
+\pgfkeys{/tikz/.cd,%
+ module ysep/.store in=\moduleysep,%
+ module ysep={1.5},
+}%
+
+\pgfkeys{/tikz/.cd,%
+ module xsep/.store in=\modulexsep,%
+ module xsep={3},%
+}%
+
+\pgfkeys{/tikz/.cd,%
+ module font/.store in=\modulefont,%
+ module font={\normalfont},%
+}%
+
+\tikzset{module/.style={%
+ draw,rectangle, minimum size=\modulesize,
+ font=\modulefont,
+ }
+}
+
+\tikzset{module extensible/.style={%
+ draw,rectangle, minimum size=#1,
+ },
+ module extensible/.default={\modulesize}
+}
+
+\pgfkeys{/tikz/.cd,%
+ module label opacity/.store in=\modulelabelopacity,%
+ module label opacity={1},%
+}%
+
+\tikzset{module opacity/.style={
+ text opacity=\modulelabelopacity,
+ }
+}
+
+\pgfkeys{/tikz/.cd,%
+ pin length factor/.store in=\pinlength,%
+ pin length factor={1},%
+}%
+
+% setting labels in math mode
+
+\tikzset{math mode labels/.style={%
+ execute at begin node=$,%
+ execute at end node=$,%
+ }
+}
+\pgfkeys{/tikz/.cd,%
+ use math mode labels/.is choice,%
+ use math mode labels/true/.style={math mode labels},%
+ use math mode labels/false/.style={},%
+}%
+
+\tikzset{set math mode labels/.style={%
+ use math mode labels=#1,%
+ },%
+ set math mode labels/.default=false,%
+}
+
+% disable the connections
+\newif\ifconnectiondisabled%
+\pgfkeys{/tikz/.cd, connections disabled/.is if=connectiondisabled}%
+\pgfkeys{/tikz/.cd, connections disabled/.default=false}%
+
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+% CODE
+% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+% CLOS SNB
+\tikzset{clos snb/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION SNB CONDITION
+ \pgfmathtruncatemacro\rtwo{\mone+\mthree-1}
+
+ % MODULE 1
+ \foreach \i in {1,...,\rone}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r1-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\mone+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\mone}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\roneintervalspace{1/(\rtwo+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \foreach \i in {1,...,\rtwo}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r2-\i) at +(\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 2
+ % the number of inputs of module two is the number of modules stage 1 \rone
+ \pgfmathsetmacro\rtwointervalspace{1/(\rone+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,...,\rone}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % the number of outputs module two is exactly \rthree
+ \pgfmathsetmacro\rtwointervalspace{1/(\rthree+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,...,\rthree}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+
+ }
+
+ % MODULE 3
+ \foreach \i in {1,...,\rthree}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r3-\i) at +(2*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 3
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rthreeintervalspace{1/(\rtwo+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rthreeintervalspace{1/(\mthree+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,...,\mthree}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,...,\rone}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,...,\rthree}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+ \fi
+ },
+}
+
+\tikzset{clos snb example/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION SNB CONDITION
+ \pgfmathtruncatemacro\rtwo{\mone+\mthree-1}
+
+ % MODULE 1
+ \node[module,#1,module opacity](r1-1) at (0,0) {1};
+ \node[below of=r1-1,yshift=0.75ex](r1-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r1-dots](r1-2) {\rone};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,2}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \node[module,#1,module opacity](r2-1) at (\modulexsep,0) {1};
+ \node[below of=r2-1,yshift=0.75ex](r2-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r2-dots](r2-2) {\rtwo};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+ }
+
+ % MODULE 3
+ \node[module,#1,module opacity](r3-1) at (2*\modulexsep,0) {1};
+ \node[below of=r3-1,yshift=0.75ex](r3-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r3-dots](r3-2) {\rthree};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,2}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+
+ % SETTING LABELS
+ \node[below of=r1-2,set math mode labels] {\mone~\ensuremath{\times}~\rtwo};
+ \node[below of=r2-2,set math mode labels] {\rone~\ensuremath{\times}~\rthree};
+ \node[below of=r3-2,set math mode labels] {\rtwo~\ensuremath{\times}~\mthree};
+ \draw[decorate,decoration={brace}]($(r1-2-front input-2)-(0.1,0)$)--($(r1-1-front input-1)-(0.1,0)$) node[midway,left=0.1cm,set math mode labels]{\N};
+ \draw[decorate,decoration={brace}]($(r3-1-front output-1)+(0.1,0)$)--($(r3-2-front output-2)+(0.1,0)$) node[midway,right=0.1cm,set math mode labels]{\M};
+ },
+}
+
+% CLOS REAR
+
+\tikzset{clos rear/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION REAR CONDITION
+ \pgfmathtruncatemacro\rtwo{max(\mone,\mthree)}
+
+ % MODULE 1
+ \foreach \i in {1,...,\rone}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r1-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\mone+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\mone}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\roneintervalspace{1/(\rtwo+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \foreach \i in {1,...,\rtwo}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r2-\i) at +(\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 2
+ % the number of inputs of module two is the number of modules stage 1 \rone
+ \pgfmathsetmacro\rtwointervalspace{1/(\rone+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,...,\rone}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % the number of outputs module two is exactly \rthree
+ \pgfmathsetmacro\rtwointervalspace{1/(\rthree+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,...,\rthree}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+
+ }
+
+ % MODULE 3
+ \foreach \i in {1,...,\rthree}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r3-\i) at +(2*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 3
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rthreeintervalspace{1/(\rtwo+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rthreeintervalspace{1/(\mthree+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,...,\mthree}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,...,\rone}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,...,\rthree}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+ \fi
+ }
+}
+
+\tikzset{clos rear example/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION REAR CONDITION
+ \pgfmathtruncatemacro\rtwo{max(\mone,\mthree)}
+
+ % MODULE 1
+ \node[module,#1,module opacity](r1-1) at (0,0) {1};
+ \node[below of=r1-1,yshift=0.75ex](r1-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r1-dots](r1-2) {\rone};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,2}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \node[module,#1,module opacity](r2-1) at (\modulexsep,0) {1};
+ \node[below of=r2-1,yshift=0.75ex](r2-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r2-dots](r2-2) {\rtwo};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+ }
+
+ % MODULE 3
+ \node[module,#1,module opacity](r3-1) at (2*\modulexsep,0) {1};
+ \node[below of=r3-1,yshift=0.75ex](r3-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r3-dots](r3-2) {\rthree};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,2}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+
+ % SETTING LABELS
+ \node[below of=r1-2, set math mode labels] {\mone~\ensuremath{\times}~\rtwo};
+ \node[below of=r2-2, set math mode labels] {\rone~\ensuremath{\times}~\rthree};
+ \node[below of=r3-2, set math mode labels] {\rtwo~\ensuremath{\times}~\mthree};
+ \draw[decorate,decoration={brace}]($(r1-2-front input-2)-(0.1,0)$)--($(r1-1-front input-1)-(0.1,0)$) node[midway,left=0.1cm, set math mode labels]{\N};
+ \draw[decorate,decoration={brace}]($(r3-1-front output-1)+(0.1,0)$)--($(r3-2-front output-2)+(0.1,0)$) node[midway,right=0.1cm, set math mode labels]{\M};
+ },
+}
+
+% CLOS EXAMPLE WITH LABELS
+
+\tikzset{clos example with labels/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\mone}{\N/\rone}
+ \pgfmathtruncatemacro{\mthree}{\M/\rthree}
+
+ % COMPUTATION REAR CONDITION
+ \pgfmathtruncatemacro\rtwo{max(\mone,\mthree)}
+
+ % MODULE 1
+ \node[module,#1,module opacity](r1-1) at (0,0) {1};
+ \node[below of=r1-1,yshift=0.75ex](r1-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r1-dots](r1-2) {\ronelabel};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,2}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % just two modules
+ \pgfmathsetmacro\roneintervalspace{1/(2+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \node[module,#1,module opacity](r2-1) at (\modulexsep,0) {1};
+ \node[below of=r2-1,yshift=0.75ex](r2-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r2-dots](r2-2) {\rtwolabel};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % just two modules
+ \pgfmathsetmacro\rtwointervalspace{1/(2+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+ }
+
+ % MODULE 3
+ \node[module,#1,module opacity](r3-1) at (2*\modulexsep,0) {1};
+ \node[below of=r3-1,yshift=0.75ex](r3-dots) {\vdots};
+ \node[module,#1,module opacity,below of=r3-dots](r3-2) {\rthreelabel};
+
+ \foreach \i in {1,2}{
+ % INPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,2}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % just two modules
+ \pgfmathsetmacro\rthreeintervalspace{1/(2+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,2}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,2}{
+ \foreach \conn in {1,2}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+
+ % SETTING LABELS
+ \node[below of=r1-2,set math mode labels] {\monelabel~\ensuremath{\times}~\rtwolabel};
+ \node[below of=r2-2,set math mode labels] {\ronelabel~\ensuremath{\times}~\rthreelabel};
+ \node[below of=r3-2,set math mode labels] {\rtwolabel~\ensuremath{\times}~\mthreelabel};
+ \draw[decorate,decoration={brace}]($(r1-2-front input-2)-(0.1,0)$)--($(r1-1-front input-1)-(0.1,0)$) node[midway,left=0.1cm,set math mode labels]{\Nlabel};
+ \draw[decorate,decoration={brace}]($(r3-1-front output-1)+(0.1,0)$)--($(r3-2-front output-2)+(0.1,0)$) node[midway,right=0.1cm,set math mode labels]{\Mlabel};
+ },
+}
+
+% BENES
+% uses modules 2x2
+
+\tikzset{benes/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Numbers of modules in the second stage
+ \pgfmathtruncatemacro\rtwo{\m}
+
+ % Number of modules in the first/third stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ \ifnum\P=4
+ \def\increment{0-\i*0.5*\r*\moduleysep}
+ \def\xincrement{\r*0.25*\modulexsep}
+ \else
+ \def\increment{0-\i*0.39*\r*\moduleysep}
+ \def\xincrement{\r*0.2*\modulexsep}
+ \fi
+
+ % MODULE 1
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r1-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\m}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\roneintervalspace{1/(\rtwo+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+
+ % MODULE 2
+ \foreach \i in {1,...,\rtwo}{
+
+ \path let \n1 = {int(0-\i)}, \n2={\increment}
+ in
+ node[module extensible={\r*0.5*\modulesize},#1,module opacity,yshift=1cm] (r2-\i) at +(\xincrement,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 2
+ % the number of inputs of module two is the number of modules stage 1 \rone
+ \pgfmathsetmacro\rtwointervalspace{1/(\r+1)}
+ \foreach \rtwoinput[evaluate=\rtwoinput as \rtwointerval using \rtwointervalspace*\rtwoinput]
+ in {1,...,\r}
+ \node[circle,draw,scale=0.1] (r2-\i-input-\rtwoinput)at($(r2-\i.north west)!\rtwointerval!(r2-\i.south west)$) {};
+
+ % OUTPUTS MODULE 2
+ % the number of outputs module two is exactly \rthree
+ \pgfmathsetmacro\rtwointervalspace{1/(\r+1)}
+ \foreach \rtwooutput[evaluate=\rtwooutput as \rtwointerval using \rtwointervalspace*\rtwooutput]
+ in {1,...,\r}
+ \node[circle,draw,scale=0.1] (r2-\i-output-\rtwooutput)at ($(r2-\i.north east)!\rtwointerval!(r2-\i.south east)$) {};
+
+ }
+
+ % MODULE 3
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r3-\i) at +(2*\xincrement,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 3
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rthreeintervalspace{1/(\rtwo+1)}
+ \foreach \rthreeinput[evaluate=\rthreeinput as \rthreeinterval using \rthreeintervalspace*\rthreeinput]
+ in {1,...,\rtwo}
+ \node[circle,draw,scale=0.1] (r3-\i-input-\rthreeinput)at($(r3-\i.north west)!\rthreeinterval!(r3-\i.south west)$) {};
+
+ % OUTPUTS MODULE 3
+ % the number of outputs module three is exactly \m
+ \pgfmathsetmacro\rthreeintervalspace{1/(\m+1)}
+ \foreach \rthreeoutput[evaluate=\rthreeoutput as \rthreeinterval using \rthreeintervalspace*\rthreeoutput]
+ in {1,...,\m}
+ \draw ($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r3-\i-front output-\rthreeoutput){}--($(r3-\i.north east)!\rthreeinterval!(r3-\i.south east)$) node[circle,draw,scale=0.1] (r3-\i-output-\rthreeoutput) {};
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % DRAWING CONNECTIONS
+ %% from r1 to r2
+ \foreach \startmodule in {1,...,\r}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r1-\startmodule-output-\conn)--(r2-\conn-input-\startmodule);
+ }
+ %% from r2 to r3
+ \foreach \startmodule in {1,...,\r}{
+ \foreach \conn in {1,...,\rtwo}
+ \draw(r3-\startmodule-input-\conn)--(r2-\conn-output-\startmodule);
+ }
+ \fi
+ }
+}
+
+% BENES COMPLETE
+
+\tikzset{benes complete/.code={
+
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Number of modules in the first/third stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ % Number of stages
+ \pgfmathtruncatemacro{\stages}{2*round(log2(\P))-1}
+
+ % MODULES for all stages
+ \foreach \s [evaluate=\s as \numstage using int(\s-1)] in {1,...,\stages}{
+ \ifnum\s=1
+ % FIRST MODULE
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r\s-\i) at +(0,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE 1
+ % the number of inputs module one is exactly \mone
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput]
+ in {1,...,\m}
+ \draw ($(r1-\i.north west)!\roneinterval!(r1-\i.south west)-(0.5*\pinlength,0)$)node[scale=0.1](r1-\i-front input-\roneinput){}--($(r1-\i.north west)!\roneinterval!(r1-\i.south west)$) node[circle,draw,scale=0.1] (r1-\i-input-\roneinput) {};
+
+ % OUTPUTS MODULE 1
+ % the number of outputs of module one is the number of modules stage 2
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneoutput[evaluate=\roneoutput as \roneinterval using \roneintervalspace*\roneoutput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r1-\i-output-\roneoutput)at($(r1-\i.north east)!\roneinterval!(r1-\i.south east)$) {};
+ }
+ \fi
+ \ifnum\s=\stages
+ % FINAL MODULE
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE \s
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \rinput[evaluate=\rinput as \rinterval using \rintervalspace*\rinput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r\s-\i-input-\rinput)at($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$) {};
+
+ % OUTPUTS MODULE \s
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput]
+ in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*\pinlength,0)$)node[scale=0.1](r\s-\i-front output-\routput){}--($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ \pgfmathparse{and(\s>1,\s<\stages)}
+ \let\cond\pgfmathresult
+ \ifnum\cond=1
+ % INTERMEDIATE MODULEs
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep}
+ in
+ node[module,#1,module opacity,yshift=1cm] (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % INPUTS MODULE \s
+ % the number of inputs of module three is the number of modules stage 2 \rtwo
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \rinput[evaluate=\rinput as \rinterval using \rintervalspace*\rinput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r\s-\i-input-\rinput)at($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$) {};
+
+ % OUTPUTS MODULE \s
+ % the number of outputs module three is exactly \mthree
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput]
+ in {1,...,\m}
+ \node[circle,draw,scale=0.1] (r\s-\i-output-\routput) at($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) {};
+ }
+ \fi
+ }
+ % end modules
+
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % CONNECTIONS
+
+ % the algorithm works for all the stages a part from the two in the middle
+ \ifnum\P>4 % in this case there are just two stages, thus the algorithm fails: treat it separately
+ % Compute \stages/2: they are the stages from left to the middle or from right to the middle
+ \pgfmathparse{floor(divide(\stages,2))}
+ \pgfmathtruncatemacro\stagesondirection{\pgfmathresult-1}
+
+ % on left
+ \foreach \stg[evaluate=\stg as \nextstg using int(\stg+1)] in {1,...,\stagesondirection}{
+ \pgfmathtruncatemacro\applicationon{\P/(2^\stg)}% number of modules over which the algorithm is applied
+ \pgfmathtruncatemacro\repetition{int(2^(\stg-1))}% the algorithm should be repeated for \repetition times
+ \foreach \t in {1,...,\repetition}{
+ \pgfmathtruncatemacro\startingpoint{1+((\t-1)*\applicationon)}
+ \pgfmathtruncatemacro\endingpoint{(\startingpoint+\applicationon)-1}
+ \foreach \startmodule in {\startingpoint,...,\endingpoint}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\t=1
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2)}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2)}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ \fi
+ \ifnum\t=2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ \fi
+ \ifnum\t>2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-1);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\stg-\startmodule-output-1)--(r\nextstg-\endmodulei-input-2);
+ \draw(r\stg-\startmodule-output-2)--(r\nextstg-\endmoduleii-input-2);
+ \fi
+ \fi
+ }
+ }
+ }
+
+ % on the right
+
+ \foreach \stg[evaluate=\stg as \currstg using int(\stages-(\stg-1)),
+ evaluate=\stg as \nextstg using int(\currstg-1)] in {1,...,\stagesondirection}{
+ \pgfmathtruncatemacro\applicationon{\P/(2^\stg)}% number of modules over which the algorithm is applied
+ \pgfmathtruncatemacro\repetition{int(2^(\stg-1))}% the algorithm should be repeated for \repetition times
+ \foreach \t in {1,...,\repetition}{
+ \pgfmathtruncatemacro\startingpoint{1+((\t-1)*\applicationon)}
+ \pgfmathtruncatemacro\endingpoint{(\startingpoint+\applicationon)-1}
+ \foreach \startmodule in {\startingpoint,...,\endingpoint}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\t=1
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2)}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-1);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2)}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2)}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-2);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-2);
+ \fi
+ \fi
+ \ifnum\t=2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-1);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-2);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-2);
+ \fi
+ \fi
+ \ifnum\t>2
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule+1)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+1+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-1);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodulei{int((\startmodule)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \pgfmathtruncatemacro\endmoduleii{int((\startmodule+\applicationon)/2+(\applicationon/2)+((\applicationon/2)*(\t-2)))}
+ \draw(r\currstg-\startmodule-input-1)--(r\nextstg-\endmodulei-output-2);
+ \draw(r\currstg-\startmodule-input-2)--(r\nextstg-\endmoduleii-output-2);
+ \fi
+ \fi
+ }
+ }
+ }
+
+ \fi
+
+
+ % * * * *
+ % 2 Intermediate stages
+
+ % Compute \stages/2
+ \pgfmathparse{floor(divide(\stages,2))}
+ \pgfmathtruncatemacro\middlestage{\pgfmathresult}
+ \pgfmathtruncatemacro\middlestagei{int(\middlestage+1)}
+ \pgfmathtruncatemacro\middlestageii{int(\middlestagei+1)}
+
+ % Drawing
+ \foreach \startmodule in {1,...,\r}{
+ \pgfmathisodd{\startmodule}
+ \ifnum\pgfmathresult=1
+ % if odd
+ \pgfmathtruncatemacro\endmodule{int(\startmodule+1)}
+ \draw(r\middlestage-\startmodule-output-1)--(r\middlestagei-\startmodule-input-1);
+ \draw(r\middlestage-\startmodule-output-2)--(r\middlestagei-\endmodule-input-1);
+ \draw(r\middlestagei-\startmodule-output-1)--(r\middlestageii-\startmodule-input-1);
+ \draw(r\middlestagei-\startmodule-output-2)--(r\middlestageii-\endmodule-input-1);
+ \else
+ % if even
+ \pgfmathtruncatemacro\endmodule{int(\startmodule-1)}
+ \draw(r\middlestage-\startmodule-output-1)--(r\middlestagei-\endmodule-input-2);
+ \draw(r\middlestage-\startmodule-output-2)--(r\middlestagei-\startmodule-input-2);
+ \draw(r\middlestagei-\startmodule-output-1)--(r\middlestageii-\endmodule-input-2);
+ \draw(r\middlestagei-\startmodule-output-2)--(r\middlestageii-\startmodule-input-2);
+ \fi
+ }
+ % end connections
+ \fi % disable connections
+ }
+}
+
+% BANYAN NETWORKS
+
+% BANYAN-OMEGA (thanks to João Gabriel Reis)
+
+\tikzset{banyan omega/.code={
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Number of modules in each stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ % Number of stages
+ \pgfmathtruncatemacro{\stages}{round(log2(\P))}
+
+ % Modules for all stages
+ \foreach \s [evaluate=\s as \numstage using int(\s-1)] in {0,...,\stages}{
+ \ifnum\s=0
+ % Invisible modules
+ \foreach \i in {1,...,\r}{
+ \path let \n2={-\i*\moduleysep} in
+ node[rectangle,minimum height=\modulesize,#1,module opacity,xshift=\modulesize/2,yshift=1cm]
+ (r\s-\i) at +(-0.6*\modulexsep,\n2) {};
+
+ % Invisible modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate] (r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[coordinate](r\s-\i-output-\routput) {};
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)-(0.5*0.3*\pinlength,0)$) node[circle,draw,scale=0.1] (r\s-\i-front input-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[coordinate](r\s-\i-input-\routput) {};
+ }
+ \fi
+ \ifnum\s=\stages
+ % Final Module
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm] (r\s-\i) at
+ +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Final module inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$)node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Final module outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+
+ \pgfmathparse{and(\s>0,\s<\stages)}
+ \let\cond\pgfmathresult
+ \ifnum\cond=1
+ % Intermediate modules
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm]
+ (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Intermediate modules inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$)node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Intermediate modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$)node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % Connections
+ \foreach \stg[evaluate=\stg as \prevstg using int(\stg - 1)] in {1,...,\stages}{
+ \foreach \startmod in {1,...,\r}{
+ \pgfmathomegarotation{2*(\startmod - 1)}{\stages - 1}{address}
+ \pgfmathtruncatemacro\endmodi{\address/2 + 1}
+ \pgfmathtruncatemacro\endmodii{\endmodi + \r/2}
+ \pgfmathtruncatemacro\cond{mod(\startmod,2)}
+ \ifnum\cond=0
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-2);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-2);
+ \else
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-1);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-1);
+ \fi
+ }
+ }
+ \fi
+}
+}
+
+% BANYAN-FLIP
+
+\tikzset{banyan flip/.code={
+ % Number of ports per module
+ \pgfmathtruncatemacro{\m}{2}
+
+ % Number of modules in each stage
+ \pgfmathtruncatemacro{\r}{\P/\m}
+
+ % Number of stages
+ \pgfmathtruncatemacro{\stages}{round(log2(\P))}
+
+ % Modules for all stages
+ \foreach \s [evaluate=\s as \numstage using int(\s-1)] in {0,...,\stages}{
+ \ifnum\s=0
+ % Final Module
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm] (r\s-\i) at
+ +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Final module inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$) node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Final module outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ \ifnum\s=\stages
+ % Invisible modules
+ \foreach \i in {1,...,\r}{
+ \path let \n2={-\i*\moduleysep} in
+ node[rectangle,minimum height=\modulesize,#1,module opacity,xshift=\modulesize/2,yshift=1cm]
+ (r\s-\i) at +(\numstage*0.415*\modulexsep,\n2) {};
+
+ % Invisible modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \rinterval using \rintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$)node [coordinate](r\s-\i-input-\roneinput) {} --
+ ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$)
+ node [coordinate] (r\s-\i-front input-\roneinput) {};
+ \foreach \roneinput[evaluate=\roneinput as \rinterval using \rintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)$)node [coordinate](r\s-\i-input-\roneinput) {} --
+ ($(r\s-\i.north west)!\rinterval!(r\s-\i.south west)+(0.5*0.3*\pinlength,0)$)
+ node [circle,draw,scale=0.1] (r\s-\i-front output-\roneinput) {};
+ }
+ \fi
+ \pgfmathparse{and(\s>0,\s<\stages)}
+ \let\cond\pgfmathresult
+ \ifnum\cond=1
+ % Intermediate modules
+ \foreach \i in {1,...,\r}{
+ \path let \n1 = {int(0-\i)}, \n2={0-\i*\moduleysep} in node[module,#1,module opacity,yshift=1cm]
+ (r\s-\i) at +(\numstage*0.6*\modulexsep,\n2) {\pgfmathparse{int(multiply(\n1,-1))}\pgfmathresult};
+
+ % Intermediate modules inputs
+ \pgfmathsetmacro\roneintervalspace{1/(\m+1)}
+ \foreach \roneinput[evaluate=\roneinput as \roneinterval using \roneintervalspace*\roneinput] in {1,...,\m}
+ \draw ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)-(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front input-\roneinput) {} --
+ ($(r\s-\i.north west)!\roneinterval!(r\s-\i.south west)$) node[circle,draw,scale=0.1] (r\s-\i-input-\roneinput) {};
+
+ % Intermediate modules outputs
+ \pgfmathsetmacro\rintervalspace{1/(\m+1)}
+ \foreach\routput[evaluate=\routput as \rinterval using \rintervalspace*\routput] in {1,...,\m}
+ \draw ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)+(0.5*0.3*\pinlength,0)$) node[coordinate](r\s-\i-front output-\routput) {} --
+ ($(r\s-\i.north east)!\rinterval!(r\s-\i.south east)$) node[circle,draw,scale=0.1] (r\s-\i-output-\routput) {};
+ }
+ \fi
+ }
+
+ % Test if connections should be removed
+ \ifconnectiondisabled
+ \relax
+ \else
+ % Connections
+ \foreach \stg[evaluate=\stg as \prevstg using int(\stg - 1)] in {1,...,\stages}{
+ \foreach \startmod in {1,...,\r}{
+ \pgfmathomegarotation{2*(\startmod - 1)}{\stages - 1}{address}
+ \pgfmathtruncatemacro\endmodi{\address/2 + 1}
+ \pgfmathtruncatemacro\endmodii{\endmodi + \r/2}
+ \pgfmathtruncatemacro\cond{mod(\startmod,2)}
+ \ifnum\cond=0
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-2);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-2);
+ \else
+ \draw(r\stg-\startmod-front input-1)--(r\prevstg-\endmodi-front output-1);
+ \draw(r\stg-\startmod-front input-2)--(r\prevstg-\endmodii-front output-1);
+ \fi
+ }
+ }
+ \fi
+}
+}
+
+
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/schemabloc/README b/graphics/pgf/contrib/schemabloc/README
new file mode 100644
index 0000000000..d8e530a2bc
--- /dev/null
+++ b/graphics/pgf/contrib/schemabloc/README
@@ -0,0 +1,26 @@
+
+schemabloc (block diagram)
+version : 1.5
+
+Ce package est un ensemble de macro-commande Tikz permettant de dessiner des schéma-blocs.
+
+This packages is a set of macro-command Tikz allowing to draw block diagrams.
+
+files:
+- readme.txt - this file
+- schemabloc.sty - the package
+- schemabloc.tex - the source of the documentation (french)
+- schemabloc.pdf - the documentation (french)
+
+Remarks and improvements:
+Note your remarks and wishes on the forum of the article
+http://www.sciences-indus-cpge.apinc.org/Schema-blocs-avec-PGF-TIKZ-sous
+
+Licenses
+ This work may be distributed and/or modified under the conditions of
+ the LaTeX Project Public License, either version 1.3c of this license
+ or (at your option) any later version. The latest version of this
+ license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3c or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
diff --git a/graphics/pgf/contrib/schemabloc/schemabloc.pdf b/graphics/pgf/contrib/schemabloc/schemabloc.pdf
new file mode 100644
index 0000000000..05d69ee663
--- /dev/null
+++ b/graphics/pgf/contrib/schemabloc/schemabloc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/schemabloc/schemabloc.sty b/graphics/pgf/contrib/schemabloc/schemabloc.sty
new file mode 100644
index 0000000000..73204561e8
--- /dev/null
+++ b/graphics/pgf/contrib/schemabloc/schemabloc.sty
@@ -0,0 +1,305 @@
+\NeedsTeXFormat{LaTeX2e}[1999/01/01]
+\ProvidesPackage{schemabloc}[2006/12/29]
+
+\RequirePackage{ifthen}
+\RequirePackage{tikz}
+\usetikzlibrary{shapes,arrows}
+
+
+%macros dessin des schéma-blocs mise à jour 6 janvier 2009
+% version 1.5
+
+%initialisation des styles
+\tikzstyle{sbStyleLien}=[->,>=latex',]
+\tikzstyle{sbStyleBloc}=[draw, rectangle,]
+\tikzstyle{sbStyleBlocPatate}=[]
+\tikzstyle{sbStyleSum}=[draw, circle,]%style Sum CC
+% Commandes de changement de style
+\newcommand{\sbStyleLienDefaut}{
+\tikzstyle{sbStyleLien}=[->,>=latex']
+}
+
+\newcommand{\sbStyleLien}[1]{
+\tikzstyle{sbStyleLien}+=[#1]
+}
+
+\newcommand{\sbStyleBloc}[1]{
+\tikzstyle{sbStyleBloc}+=[#1]
+}
+\newcommand{\sbStyleBlocDefaut}{
+\tikzstyle{sbStyleBloc}=[draw, rectangle,]
+}
+
+\newcommand{\sbStyleSum}[1]{
+\tikzstyle{sbStyleSum}+=[#1]
+}
+
+\newcommand{\sbStyleSumDefaut}{
+\tikzstyle{sbStyleBloc}=[draw, circle,]
+}%style Sum default CC
+
+
+% Commandes d'entrée et sortie
+\newcommand{\sbEntree}[1]{
+ \node [coordinate, name=#1] {};
+\sbDecaleNoeudx[0]{#1}{#1}
+}
+\newcommand{\sbSortie}[3][2]{
+ \node [coordinate, right of=#3droite, node distance=#1em, minimum size=0em,right] (#2) {};
+}
+
+%Commandes de Bloc
+\newcommand{\sbBloc}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, right of = #4droite,
+node distance=#1em,sbStyleBloc,right] (#2) {#3};
+\node (#2droite) at (#2.east){};
+\node (BlocdeFindroite) at (#2.east){};
+}
+
+\newcommand{\sbBlocPatate}[4][2]{
+\node [draw, cloud, cloud puffs=5, draw,
+ minimum height=3em, minimum width=5em, right of = #4droite,
+node distance=#1em,sbStyleBlocPatate,right] (#2) {#3};
+\node (#2droite) at (#2.east){};
+}
+
+\newcommand{\sbBlocr}[4][2]{
+\node [
+ minimum height=3em, minimum width=3em, left of = #4gauche,
+node distance=#1em, sbStyleBloc,left] (#2) {#3};
+\node (#2gauche) at (#2.west){};
+}
+
+\newcommand{\sbBlocL}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, right of = #4droite,node distance=#1em,sbStyleBloc,right] (#2) {#3};
+\node (#2droite) at (#2.east){};
+\node (BlocdeFindroite) at (#2.east){};
+ \draw [sbStyleLien,auto] (#4) -- node[name=#4-#2] {} (#2);
+}
+
+\newcommand{\sbBlocrL}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, left of = #4gauche,
+node distance=#1em, sbStyleBloc,left] (#2) {#3};
+\node (#2gauche) at (#2.west){};
+\node (BlocdeFingauche) at (#2.west){};
+ \draw [sbStyleLien,auto] (#4) -- node[name=#4-#2] {} (#2);
+}
+
+\newcommand{\sbBlocseul}[4][1.5]{
+\sbEntree{E1}
+\sbBloc[#1]{B1}{#3}{E1}
+\sbSortie[#1]{S1}{B1}
+\sbRelier{E1}{B1}{#2}
+\sbRelier{B1}{S1}{#4}
+}
+
+%\Commande de lien
+\newcommand{\sbRelier}[3][]{
+ \draw [sbStyleLien,auto] (#2) -- node[name=#2-#3] {#1} (#3);
+}
+
+\newcommand{\sbRelieryx}[2]{
+\draw [sbStyleLien] (#1.south) |- (#2) ;
+}
+\newcommand{\sbRelierxy}[3][]{
+\draw [sbStyleLien] (#2) -| node[name=#2-#3,near end,right] {#1} (#3) ;
+}
+
+\newcommand{\sbRenvoi}[4][4]{
+\node [below of=#2, node distance=#1em, minimum size=0em](retour#2) {};
+\draw [sbStyleLien] (#2.south)--(retour#2.south) -| node[name=#2-#3,near end,right] {#4} (#3) ;
+}
+
+\newcommand{\sbNomLien}[3][0.4]{
+\node[above of=#2, node distance=#1em] (#2nom) at (#2) {#3};
+}
+%Commande comparateurs et sommateurs
+
+\newcommand*{\sbCompSum}{\@ifstar\sbCompSumNorm\sbCompSumUsuel}
+
+\newcommand{\sbCompSumUsuel}[7][4]{
+ \node [draw, circle,minimum size=2em, right of=#3,node distance=#1em] (#2) {};
+ \node [draw, cross out,minimum size=1.414em,right of=#3,node distance=#1em] {};
+ \node [above of=#2,node distance=0.6em] {$#4$};
+ \node [below of=#2,node distance=0.6em] {$#5$};
+ \node [left of=#2,node distance=0.6em] {$#6$};
+ \node [right of=#2,node distance=0.6em] {$#7$};
+\node (#2droite) at (#2.east){};
+\node (#2gauche) at (#2.west){};
+}
+
+\newcommand{\sbCompSumNorm}[7][4]{
+ \node [draw, circle,minimum size=1.5em, right of=#3,node distance=#1em,
+label=85:$#4$,label=-85:$#5$,label=175:$#6$,label=5:$#7$,sbStyleSum] (#2) {};
+\node (#2droite) at (#2.east){};
+\node (#2gauche) at (#2.west){};
+}
+
+\newcommand{\sbSum}[6][4]{
+ \node [draw, circle,minimum size=1.5em, right of=#3,node distance=#1em,
+label=175:$#4$,label=-85:$#5$,label=85:$#6$,sbStyleSum] (#2) {};
+\node (#2droite) at (#2.east){};
+\node (#2gauche) at (#2.west){};
+}
+
+\newcommand*{\sbComp}{\@ifstar\sbCompNorm\sbCompUsuel}
+\newcommand{\sbCompUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{}{-}{+}{}
+}
+\newcommand{\sbCompNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{}{-}{+}{}
+}
+
+
+\newcommand*{\sbComph}{\@ifstar\sbComphNorm\sbComphUsuel}
+\newcommand{\sbComphUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{-}{}{+}{}
+}
+
+\newcommand{\sbComphNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{-}{}{+}{}
+}
+
+\newcommand*{\sbSumh}{\@ifstar\sbSumhNorm\sbSumhUsuel}
+\newcommand{\sbSumhUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{+}{}{+}{}
+}
+\newcommand{\sbSumhNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{+}{}{+}{}
+}
+
+\newcommand*{\sbSumb}{\@ifstar\sbSumbNorm\sbSumbUsuel}
+\newcommand{\sbSumbUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{}{+}{+}{}
+}
+\newcommand{\sbSumbNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{}{+}{+}{}
+}
+
+
+%Commandes de décalage de noeud
+
+\newcommand{\sbDecaleNoeudy}[3][5]{
+\node [below of=#2, node distance=#1em, minimum size=0em](#3) {};
+\node (#3droite) at (#3){};
+\node (#3gauche) at (#3){};
+}
+\newcommand{\sbDecaleNoeudx}[3][5]{
+\node [right of=#2, node distance=#1em, minimum size=0em](#3) {};
+\node (#3droite) at (#3){};
+\node (#3gauche) at (#3){};
+}
+
+
+%==============Chaines et Boucles===========
+
+\newcommand{\sbChaine}[3][4]{
+\foreach \x/\y [remember=\x as \lastx (initially #2)] in {#3}
+{\sbBlocL[#1]{\x}{\y}{\lastx}
+}
+}
+
+\newcommand{\sbChaineRetour}[3][4]{
+\foreach \x/\y [remember=\x as \lastx (initially #2)] in {#3}
+{\sbBlocrL[#1]{\x}{\y}{\lastx}
+}
+}
+
+\newcommand{\sbBoucleSeule}[4][4]{
+\sbComp[#1]{Comp#2}{#2}\sbRelier{#2}{Comp#2}
+\sbChaine[#1]{Comp#2}{#3}
+\sbSortie[#1]{#4}{BlocdeFin}
+\draw [sbStyleLien,auto] (BlocdeFindroite.base) -- node[name=FindeChaine-#4] {} (#4);
+\sbRenvoi{FindeChaine-#4}{Comp#2}{}
+}
+
+
+\newcommand{\sbBoucle}[3][4]{
+\sbComp[#1]{Comp#2}{#2}\sbRelier{#2}{Comp#2}
+\sbChaine[#1]{Comp#2}{#3}
+\draw [sbStyleLien,auto,-] (BlocdeFindroite.base) --++(1em,0)coordinate[name=FindeChaine];
+\sbRenvoi{FindeChaine}{Comp#2}{}
+}
+
+\newcommand{\sbBoucleRetour}[4][4]{
+\sbComp[#1]{Comp#2}{#2}\sbRelier{#2}{Comp#2}
+\sbChaine[#1]{Comp#2}{#3}
+\draw [sbStyleLien,auto,-] (BlocdeFindroite.base) --++(1em,0)coordinate[name=FindeChaine];
+\sbDecaleNoeudy[5]{FindeChaine}{sbDebutRetour}
+\sbChaineRetour[#1]{sbDebutRetour}{#4}
+\draw [sbStyleLien,-] (FindeChaine) |- (sbDebutRetour.west) ;
+
+\draw [sbStyleLien] (BlocdeFingauche.base) -| node[name=sbNomRetour,near end,right] {} (Comp#2) ;
+
+}
+
+
+
+
+%vielles definitions, ne plus utiliser, décommenter si nécessaire
+%\newcommand{\bloc}[4][2]{
+%\node [draw, rectangle,
+% minimum height=1cm, minimum width=1cm, right of = #4,node distance=#1cm] (#2) {#3};
+%}
+%\newcommand{\blocr}[4][1.5]{
+%\node [draw, rectangle,
+% minimum height=1cm, minimum width=1cm, left of = #4, node distance=#1cm] (#2) {#3};
+%}
+%\newcommand{\comp}[3][1.5]{
+% \node [draw, circle,minimum size=1cm, right of=#3,node distance=#1cm] (#2) {};
+% \node [draw, cross out,minimum size=0.707cm,right of=#3,node distance=#1cm] {};
+% \node [below of=#2,node distance=0.3cm] {$-$};
+% \node [left of=#2,node distance=0.3cm] {$+$};
+%}
+%\newcommand{\comph}[3][2]{
+% \node [draw, circle,minimum size=1cm, right of=#3,node distance=#1cm] (#2) {};
+% \node [draw, cross out,minimum size=0.707cm,right of=#3,node distance=#1cm] {};
+% \node [above of=#2,node distance=0.3cm] {$-$};
+% \node [left of=#2,node distance=0.3cm] {$+$};
+%}
+%\newcommand{\sumh}[3][2]{
+% \node [draw, circle,minimum size=1cm, right of=#3,node distance=#1cm] (#2) {};
+% \node [draw, cross out,minimum size=0.707cm,right of=#3,node distance=#1cm] {};
+% \node [above of=#2,node distance=0.3cm] {$+$};
+% \node [left of=#2,node distance=0.3cm] {$+$};
+%}
+%\newcommand{\sumb}[3][2]{
+% \node [draw, circle,minimum size=1cm, right of=#3,node distance=#1cm] (#2) {};
+% \node [draw, cross out,minimum size=0.707cm,right of=#3,node distance=#1cm] {};
+% \node [below of=#2,node distance=0.3cm] {$+$};
+% \node [left of=#2,node distance=0.3cm] {$+$};
+%}
+%
+%\newcommand{\entree}[1]{
+% \node [coordinate, name=#1,node distance=1cm] {};
+%}
+%\newcommand{\sortie}[3][1.5]{
+% \node [coordinate, right of=#3, node distance=#1cm, minimum size=0cm] (#2) {};
+%}
+%\newcommand{\decale}[3][2]{
+%\node [below of=#2, node distance=#1cm, minimum size=0cm](#3) {};
+%}
+%
+%\newcommand{\relier}[3]{
+% \draw [->,>=latex',auto] (#1) -- node[name=#1-#2] {#3} (#2);
+%}
+%\newcommand{\relieryx}[2]{
+%\draw [->,>=latex'] (#1.south) |- (#2) ;
+%}
+%\newcommand{\relierxy}[3]{
+%\draw [->,>=latex'] (#1) -| node[name=#1-#2,near end,right] {#3} (#2) ;
+%}
+%\newcommand{\renvoi}[4][1.5]{
+%\node [below of=#2, node distance=#1cm, minimum size=0cm](retour#2) {};
+%\draw [->,>=latex'] (#2.south)--(retour#2.south) -| node[name=#2-#3,near end,right] {#4} (#3) ;
+%}
+%\newcommand{\blocseul}[4][1.5]{
+%\entree{E1}
+%\bloc[#1]{B1}{#3}{E1}
+%\sortie[#1]{S1}{B1}
+%\relier{E1}{B1}{#2}
+%\relier{B1}{S1}{#4}
+%}
diff --git a/graphics/pgf/contrib/schemabloc/schemabloc.tex b/graphics/pgf/contrib/schemabloc/schemabloc.tex
new file mode 100644
index 0000000000..fac034bd24
--- /dev/null
+++ b/graphics/pgf/contrib/schemabloc/schemabloc.tex
@@ -0,0 +1,1370 @@
+%--------------DOCUMENT--------------------------------------------------------
+
+\documentclass[a4paper,11pt]{article} % Type de document
+\usepackage[frenchb]{babel} % Titres en français
+\usepackage[T1]{fontenc} % Correspondance clavier -> document
+\usepackage{fourier}
+%-------------PACKAGES---------------------------------------------------------
+\usepackage{makeidx} % Indexation du document
+\usepackage[Bjornstrup]{fncychap} % beaux chapitres
+
+\usepackage{fancyhdr} % entete et pied de pages
+
+\usepackage{here} % avoir ses figures a la suite du texte
+\usepackage{hyperref}
+\usepackage{amsmath}
+\usepackage{amsfonts}
+\usepackage{amssymb}
+\usepackage{color}
+\usepackage{geometry}
+\geometry{ hmargin=2cm, vmargin=1.5cm }
+\usepackage{multicol}
+
+\usepackage{subfigure}
+\usepackage{floatflt}% package for floatingfigure environment
+\usepackage{wrapfig}% package for wrapfigure environment
+%-------------PACKAGES PERSO---------------------------------------------------------
+\usepackage{schemabloc}
+
+
+\usepackage{ifpdf}
+\ifx\pdftexversion\undefined %if using TeX
+ \usepackage{graphicx}
+\else %if using PDFTeX
+ \usepackage{graphicx}
+\fi
+\ifpdf %if using PDFTeX in PDF mode
+ \DeclareGraphicsExtensions{.pdf,.png,.mps,.eps,.tpx}
+ \usepackage{pgf}
+\else %if using TeX or PDFTeX in TeX mode
+ \usepackage{graphicx}
+ \DeclareGraphicsExtensions{.eps,.bmp,.tpx}
+ \DeclareGraphicsRule{.emf}{bmp}{}{}% declare EMF filename extension
+ \DeclareGraphicsRule{.png}{bmp}{}{}% declare PNG filename extension
+ \usepackage{pgf}
+ \usepackage{pstricks}%variant: \usepackage{pst-all}
+\fi
+
+%*******Macros diverses ***********
+
+%-------------ENTETE-ET-PIED-DE-PAGE-------------------------------------------
+
+\renewcommand{\headrulewidth}{0pt} % epaisseur du trait apres entete
+\renewcommand{\footrulewidth}{0pt} % epaisseur du trait avant pied de page
+\pagestyle{fancy}
+
+
+
+%-------------PAGE-DE-GARDE----------------------------------------------------
+
+\title{Schéma-blocs avec PGF/TIKZ} % Titre
+\author{Papanicola Robert} % Auteur(s)
+\date{\today} % Date (\today pour aujourd'hui)
+
+
+%-------------DEBUT-DU-DOCUMENT-----------------------------------------------
+\makeindex
+
+\begin{document}
+
+\maketitle
+
+\begin{description}
+\item [version 1.5] Modification du dessin des comparateurs et sommateurs (ajout des symboles avec l'opérateur à l'extérieur). Ajout des commandes de tracé de chaînes de blocs et de boucles. les vielles définitions ont été désactivées (mise en commentaires).
+\item[version 1.2] redéfinition des noms de commandes, ajout du préfixe sb, quelques nouvelles commandes (\verb"\sbBlocSeul", ..)
+\item [version 1] version initiale
+\end{description}
+
+version 1.2
+
+
+\section{Schéma-blocs avec PGF/TIKZ}
+Les macros suivantes permettent de faciliter le dessin de schéma-blocs (block-diagram), elles s'appuient sur le package pgf et les macros tikz.
+
+Les macros ont été adaptées à partir des exemples d'utilisation de la librairie \href{http://www.ctan.org/tex-archive/help/Catalogue/entries/pgf.html}{pgf} de Till Tantau et TikZ de Kjell Magne Fauske et principalement \href{http://www.fauskes.net/pgftikzexamples/tag/block-diagram/}{block-diagram}.
+
+\subsection{Utilisation typique}
+L'utilisation typique de cet ensemble de macro-commandes est produire des diagrammes fonctionnels tel celui présenté sur la figure suivante.
+
+\textit{The typical use of this set of macro-commands is to produce functional diagrams such that presented on the following figure.}
+
+\begin{figure}[!ht]
+\centering
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E} \sbRelier[$E_1$]{E}{comp}
+\sbBloc{reg}{Régulateur}{comp} \sbRelier[$\epsilon$]{comp}{reg}
+\sbBloc{sys}{Système}{reg} \sbRelier[u]{reg}{sys}
+\sbSortie{S}{sys} \sbRelier[$S_1$]{sys}{S}
+\sbDecaleNoeudy[4]{S}{U}
+\sbBlocr{cap}{Capteur}{U} \sbRelieryx{sys-S}{cap}
+ \sbRelierxy[m]{cap}{comp}
+\end{tikzpicture}
+\caption{Utilisation typique}
+\label{fig:utiltyp}
+\end{figure}
+
+
+
+\begin{minipage}[t]{0.55\linewidth}
+On retrouve dans ces schémas les principales fonctionnalités des macros
+\begin{itemize}
+\item des blocs:
+\begin{itemize}
+\item de la gauche vers la droite,
+\item de la droite vers la gauche;
+\end{itemize}
+\item un comparateur;
+\item une entrée;
+\item une sortie;
+\item des liens:
+\begin{itemize}
+\item simple entre blocs alignés,
+\item entre un lien et un bloc ,
+\item entre deux blocs (ou comparateur) non alignés,
+\item un retour direct.
+\end{itemize}
+\end{itemize}
+
+Le code utilisé pour décrire le schéma est précisé ci-contre.
+\end{minipage}
+\begin{minipage}[t]{0.36\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier[$E_1$]{E}{comp}
+\sbBloc{reg}{Régulateur}{comp}
+\sbRelier[$\epsilon$]{comp}{reg}
+\sbBloc{sys}{Système}{reg}
+\sbRelier[u]{reg}{sys}
+\sbSortie{S}{sys}
+\sbRelier[$S_1$]{sys}{S}
+\sbDecaleNoeudy[4]{S}{U}
+\sbBlocr{cap}{Capteur}{U}
+\sbRelieryx{sys-S}{cap}
+\sbRelierxy[m]{cap}{comp}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+
+\subsection{Environnement}
+\begin{minipage}[t]{0.55\linewidth}
+Les macros suivantes s'utilisent dans l'environnement \textbf{tikzpicture}.
+
+\textbf{Nota}: vous devez avoir installé la dernière version du package pgf!
+\end{minipage}
+\begin{minipage}[t]{0.55\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+ listes de commandes
+ .....
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+\subsection{Entrée et noeud}
+Tous les blocs sont dessinés en relatif par rapport à un noeud d'entrée, la construction du schéma ne peut donc débuter qu'après avoir défini le premier noeud avec la commande:\verb"\sbEntree{nom}".
+
+Les commandes \verb"\sbDecaleNoeudx[distance]{N1}{N2}" et \verb"\sbDecaleNoeudy[distance]{N1}{N2}" permettent de positionner un nouveau n\oe ud \verb"{N2}" par rapport au n\oe ud précédent \verb"{N1}" , respectivement
+\begin{itemize}
+\item suivant x - horizontalement de la gauche vers la droite
+\item suivant y - verticalement du haut vers le bas de la page
+\end{itemize}
+Cette commande est nécessaire pour démarrer un nouvelle branche ou pour positionner une nouvelle entrée.
+
+La distance optionnelle \verb"[distance]" doit être précisée sans unité et est comptée en em, la valeur par défaut est de 5em.
+
+Remarque: il est toujours possible de positionner les différents noeuds en absolu dans la page en utilisant les commandes spécifiques de tikz (\verb"\node...").
+
+
+
+\subsection{Bloc}
+
+\subsubsection {Utilisation}
+deux commandes principale permettent d'obtenir le dessin d'un bloc fonctionnel
+\begin{itemize}
+\item la première permet le dessin d'un bloc seul;
+\begin{verbatim}
+ \sbBloc[distance]{nom}{contenu}{bloc precedent}
+\end{verbatim}
+\item la seconde permet le dessin du bloc et du lien avec le bloc précédent
+\begin{verbatim}
+ \sbBlocL[distance]{nom}{contenu}{bloc precedent}
+\end{verbatim}
+\end{itemize}
+
+ avec les paramètres suivant:
+
+\begin{description}
+\item [distance] ce paramètre optionnel permet de positionner le bloc par rapport au bloc précédent ( la valeur par défaut est 2 em), cette distance est l'intervalle entre les deux blocs;
+\item [nom] ce paramètre permet de nommer le noeud associé au bloc, pour faire référence à ce bloc, il faudra utiliser ce paramètre (pour relier les blocs);
+\item [contenu] ce paramètre précise le contenu du bloc, cela peut être aussi bien du texte qu'une fonction mathématique comme $\dfrac{K_c}{1 + \tau \cdot p}$ en tapant \verb"$\dfrac{K_c}{1 + \tau \cdot p}$" (ne pas oublier les \$ );
+\item[bloc precedent] ce paramètre permet de préciser le nom du bloc précédent, chaque bloc est positionné relativement au bloc précédent avec la distance \textbf{distance}.
+\end{description}
+
+\subsubsection{Exemple}
+\begin{multicols}{2}
+
+\begin{verbatim}
+\begin{tikzpicture}
+ \sbEntree{E}
+ \sbBloc{bloc1}{contenu}{E}
+ \sbBloc{bloc2}{
+$K_c\dfrac{1+\tau \cdot p}{1+\dfrac{2\cdot z}
+{\omega_n}p+\dfrac{p^2}{\omega_n^2}}$}{bloc1}
+ \sbBlocL[4]{bloc3}{Bloc lié}{bloc2}
+\end{tikzpicture}
+\end{verbatim}
+
+\begin{itemize}
+ \item on notera la présence de \verb"\entree" pour positionner le premier bloc;
+ \item le nom de chaque bloc est unique;
+ \item le deuxième bloc s'est adapté en hauteur et largeur en fonction du contenu;
+ \item le troisième bloc est décalé de 4em du précédent et relié.
+\end{itemize}
+\end{multicols}
+\begin{figure}[!ht]
+\centering
+\begin{tikzpicture}
+ \sbEntree{E}
+ \sbBloc{bloc1}{contenu}{E}
+ \sbBloc{bloc2}{$K_c\dfrac{1+\tau \cdot p}{1+\dfrac{2\cdot z}{\omega_n}p+\dfrac{p^2}{\omega_n^2}}$}{bloc1}
+ \sbBlocL[4]{bloc3}{Bloc lié}{bloc2}
+\end{tikzpicture}
+\caption{commandes sbBloc et sbBlocL}
+\label{fig:commandebloc}
+\end{figure}
+
+
+\subsubsection{Autres commandes de Bloc}
+
+
+\paragraph{Bloc de la chaîne de retour}
+
+La commande \verb"\sbBlocr..." (respectivement \verb"\sbBlocrL...") permet de tracer les blocs de la chaîne de retour de la droite vers la gauche. les paramètres de commande sont identiques. le bloc est placé à gauche du bloc (ou du n\oe ud) précédent.
+
+\paragraph{Bloc seul}
+
+La commande \verb"\sbBlocseul..." permet de tracer un bloc seul avec une entrée et une sortie cette commande est général utilisée seule. Le paramètre de distance est appliqué sur le lien d'entrée et de sortie
+
+\begin{minipage}[c]{0.46\linewidth}
+\begin{verbatim}
+\sbBlocseul[3]{Entrée}{$H(p)$}{Sortie}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[c]{0.46\linewidth}
+\begin{tikzpicture}
+\sbBlocseul[3]{Entrée}{$H(p)$}{Sortie}
+
+\end{tikzpicture}
+\end{minipage}
+
+\subsubsection{Personnalisation des blocs}
+
+La commande \verb"\sbStyleBloc{liste d'option}" permet de modifier la représentation graphique du bloc ( fond, couleur des traits,couleur du texte, épaisseur,\dots), les modifications sont valables jusqu'à une nouvelle définition. Les modifications de style apportée sont cumulatives. La commande \verb"\sbStyleBlocDefaut" ré-active la représentation graphique par défaut
+
+\begin{minipage}{0.52\linewidth}
+~\\
+\begin{tikzpicture}
+\sbEntree{E1}
+\sbBlocL{B0}{bloc 1}{E1}
+\sbStyleBloc{blue,very thick,%
+fill=yellow,text=red}%
+\sbBlocL{B1}{$\dfrac{K}{1+p+p^2}$}{B0}
+\sbStyleBloc{fill=black!30,text=blue,ellipse}
+\sbBlocL{B2}{$H(p)$}{B1}
+\sbStyleBlocDefaut
+\sbBlocL{B3}{$H(p)$}{B2}
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.42\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E1}
+\sbBlocL{B0}{bloc 1}{E1}
+\sbStyleBloc{blue,very thick,%
+fill=yellow,text=red}%
+\sbBlocL{B1}{$\dfrac{K}{1+p+p^2}$}{B0}
+\sbStyleBloc{fill=black!30,
+text=blue,ellipse}
+\sbBlocL{B2}{$H(p)$}{B1}
+\sbStyleBlocDefaut
+\sbBlocL{B3}{$H(p)$}{B2}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+Comme on le voit ci-dessus, il même possible de modifier la forme du n\oe ud. Toutes les options relatives au tracé des noeuds dans pgf/tikz sont utilisables.
+
+
+\subsection{Comparateur - Sommateur}
+Les commandes de base
+\begin{verbatim}
+ \sbComp[distance]{nom}{bloc precedent}
+ \sbComp*[distance]{nom}{bloc precedent}
+\end{verbatim}
+
+permettent de dessiner un comparateur, soit avec sa représentation usuelle
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp[0]{comp}{E}
+\end{tikzpicture}
+ou avec les opérateurs à l'extérieur
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp*[0]{comp}{E}
+\end{tikzpicture}
+ avec les paramètres suivant:
+
+\begin{description}
+\item [étoile $*$ : ] représentation usuelle sans l'étoile;
+\item [distance : ] paramètre optionnel permettant de positionner le comparateur par rapport au bloc précédent ( la valeur par défaut est 4em);
+\item [nom :] nom du comparateur, ce nom doit être unique dans votre schéma, il sert à référencer le comparateur pour tous les liens;
+\item [bloc precedent :] le nom du bloc précédent, le comparateur est placé à sa droite,à la distance \textbf{distance}.
+\end{description}
+
+\begin{figure}[!ht]
+\centering
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E} \sbRelier[$E_1$]{E}{comp}
+\sbBloc{reg}{Rég}{comp} \sbRelier[$\epsilon$]{comp}{reg}
+\sbBloc{sys}{Sys}{reg} \sbRelier[u]{reg}{sys}
+\sbSortie{S}{sys} \sbRelier[$S_1$]{sys}{S}
+\sbDecaleNoeudy[4]{S}{U}
+\sbBlocr{cap}{Capt}{U} \sbRelieryx{sys-S}{cap}
+ \sbRelierxy[m]{cap}{comp}
+\end{tikzpicture}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp*{comp}{E} \sbRelier[$E_1$]{E}{comp}
+\sbBloc{reg}{Rég}{comp} \sbRelier[$\epsilon$]{comp}{reg}
+\sbBloc{sys}{Sys}{reg} \sbRelier[u]{reg}{sys}
+\sbSortie{S}{sys} \sbRelier[$S_1$]{sys}{S}
+\sbDecaleNoeudy[4]{S}{U}
+\sbBlocr{cap}{Capt}{U} \sbRelieryx{sys-S}{cap}
+ \sbRelierxy[m]{cap}{comp}
+\end{tikzpicture}
+\caption{Comparateur- commande étoilée ou non}
+\label{fig:comp}
+\end{figure}
+
+\subsubsection{Commandes et symboles}
+
+D'autres commandes génériques permettent de dessiner rapidement les principaux symboles de sommation et de comparaison.
+
+\begin{table}[!ht]
+\centering
+\begin{tabular}{|c|c|c|c|c|} \hline
+& \multicolumn{2}{|c|}{Comparateurs} & \multicolumn{2}{|c|}{Sommateurs} \\ \hline
+{Symbole} & \begin{tikzpicture}
+\sbEntree{E}
+\sbComp[0]{comp}{E}
+\end{tikzpicture}
+ &
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComph[0]{comp}{E}
+\end{tikzpicture} &\begin{tikzpicture}
+\sbEntree{E}
+\sbSumb[0]{comp}{E}
+\end{tikzpicture} & \begin{tikzpicture}
+\sbEntree{E}
+\sbSumh[0]{comp}{E}
+\end{tikzpicture} \\
+{code} & \verb"\sbComp{}..." & \verb"\sbComph{}..." & \verb"\sbSumb{}..." & \verb"\sbSumh{}..." \\ \hline
+{Symbole} & \begin{tikzpicture}
+\sbEntree{E}
+\sbComp*[0]{comp}{E}
+\end{tikzpicture}
+ &
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComph*[0]{comp}{E}
+\end{tikzpicture} &\begin{tikzpicture}
+\sbEntree{E}
+\sbSumb*[0]{comp}{E}
+\end{tikzpicture} & \begin{tikzpicture}
+\sbEntree{E}
+\sbSumh*[0]{comp}{E}
+\end{tikzpicture} \\
+{code} & \verb"\sbComp*{}..." & \verb"\sbComph*{}..." & \verb"\sbSumb*{}..." & \verb"\sbSumh*{}..." \\ \hline
+
+\end{tabular}
+\caption{Symboles et commandes de comparateurs et sommateurs}
+\label{tab:symbcomp}
+\end{table}
+
+Une commande plus générique \verb"\sbCompSum[dist]{nom}{E1}{a}{b}{c}{d}" permet de dessiner tout sommateur et entre autres les sommateurs et comparateurs placés dans les lignes de retour. Une commande étoilée \verb"\sbCompSum*[dist]{nom}{E1}{a}{b}{c}{d}"permet de représenter le sommateur (comparateur) avec les signes à l'extérieur.
+
+\begin{minipage}{0.48\linewidth}
+\begin{tikzpicture}
+\sbEntree{E1}
+\sbCompSum[-4]{C1}{E1}{a}{b}{c}{d}
+\sbCompSum[0]{C1}{E1}{+}{+}{+}{ }
+\sbCompSum[4]{C1}{E1}{+}{+}{ }{-}
+\sbCompSum[8]{C1}{E1}{+}{ }{+}{-}
+\sbCompSum[12]{C1}{E1}{ }{+}{-}{-}
+\end{tikzpicture}
+
+
+\begin{tikzpicture}
+\sbEntree{E1}
+\sbCompSum*[-4]{C1}{E1}{a}{b}{c}{d}
+\sbCompSum*[0]{C1}{E1}{+}{+}{+}{ }
+\sbCompSum*[4]{C1}{E1}{+}{+}{ }{-}
+\sbCompSum*[8]{C1}{E1}{+}{ }{+}{-}
+\sbCompSum*[12]{C1}{E1}{ }{+}{-}{-}
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.48\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E1}
+\sbCompSum[-4]{C1}{E1}{a}{b}{c}{d}
+\sbCompSum[0]{C1}{E1}{+}{+}{+}{ }
+\sbCompSum[4]{C1}{E1}{+}{+}{ }{-}
+\sbCompSum[8]{C1}{E1}{+}{ }{+}{-}
+\sbCompSum[12]{C1}{E1}{ }{+}{-}{-}
+\end{tikzpicture}
+\end{verbatim}
+
+\end{minipage}
+
+
+\subsection{Liens et renvois}
+La commande \verb"\sbBlocL..." permet de tracer un lien sans texte entre deux blocs successifs, les macros proposent trois autres types de liens qui permettent de tracer tout type de schéma.
+\begin{itemize}
+\item lien direct \verb"\sbRelier[nom]{b1}{b2}";
+\item les renvois et sauts \verb"\sbRenvoi{b1}{b2}{}";
+\item les liens décalés.
+\end{itemize}
+
+
+\subsubsection{liens directs}
+Liens entre deux blocs (ou comparateur, entrée ou sortie) dans la chaîne directe (de la gauche vers la droite) ou dans la chaîne de retour (de la droite vers la gauche). Un lien direct entre deux blocs "b1" et "b2" s'écrit:
+\verb"\sbRelier[nom]{b1}{b2}" \\
+Le nom du lien (optionnel) est placé au dessus du lien au centre,
+Un n\oe ud est associé au lien dans la figure sous le nom "b1-b2" (concaténation des noms avec un tiret "-")
+
+\begin{minipage}[t]{0.46\linewidth}
+~\\
+\begin{tikzpicture}
+\sbEntree{E1}
+\sbBloc[3]{Bloc1}{$H1$}{E1} \sbRelier[{$E(p)$}]{E1}{Bloc1}
+\sbBloc[3]{Bloc2}{$H2$}{Bloc1} \sbRelier[{nom}]{Bloc1}{Bloc2}
+\sbSortie[3]{S1}{Bloc2} \sbRelier[{$S(p)$}]{Bloc2}{S1}
+\end{tikzpicture}
+
+\end{minipage}
+\begin{minipage}[t]{0.46\linewidth}
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E1}
+\sbBloc[3]{Bloc1}{$H1$}{E1}
+ \sbRelier[$E(p)$]{E1}{Bloc1}
+\sbBloc[3]{Bloc2}{$H2$}{Bloc1}
+ \sbRelier[nom]{Bloc1}{Bloc2}
+\sbSortie[3]{S1}{Bloc2}
+ \sbRelier[$S(p)$]{Bloc2}{S1}
+\end{tikzpicture}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+\subsubsection{Renvois et sauts}
+
+Les renvois sont des liens qui permettent soit de retourner en arrière soit de sauter un ou plusieurs blocs. Ils sont tracés entre un lien et un comparateur (sommateur);
+
+
+\begin{minipage}[t]{0.3\linewidth}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComp[1.5]{comp}{E}
+ \sbRelier{E}{comp}
+\sbBloc[1.5]{B}{$H_1$}{comp}
+ \sbRelier{comp}{B}
+\sbSortie{S}{B}
+ \sbRelier{B}{S}
+ \sbRenvoi{B-S}{comp}{}
+\end{tikzpicture}
+\begin{small}
+ \begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp[1.5]{comp}{E}
+ \sbRelier{E}{comp}
+\sbBloc[1.5]{B}{$H_1$}
+ {comp}
+ \sbRelier{comp}{B}
+\sbSortie{S}{B}
+ \sbRelier{B}{S}
+ \sbRenvoi{B-S}{comp}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{small}
+\end{minipage}
+\begin{minipage}[t]{0.3\linewidth}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComph[1.5]{comp}{E}
+ \sbRelier{E}{comp}
+\sbBloc[1.5]{B}{$H_1$}{comp}
+ \sbRelier{comp}{B}
+\sbSortie{S}{B}
+ \sbRelier{B}{S}
+ \sbRenvoi[-3]{B-S}{comp}{}
+\end{tikzpicture}
+\begin{small}
+ \begin{verbatim}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComph[1.5]{comp}{E}
+ \sbRelier{E}{comp}
+\sbBloc[1.5]{B}{$H_1$}
+ {comp}
+ \sbRelier{comp}{B}
+\sbSortie{S}{B}
+ \sbRelier{B}{S}
+ \sbRenvoi[-3]{B-S}{comp}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{small}
+\end{minipage}
+\begin{minipage}[t]{0.3\linewidth}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbBloc{B}{$H_1$}{E}
+ \sbRelier{E}{B}
+\sbSumb{sum}{B}
+ \sbRelier{B}{sum}
+\sbSortie{S}{sum}
+ \sbRelier{sum}{S}
+ \sbRenvoi{E-B}{sum}{}
+\end{tikzpicture}
+\begin{small}
+ \begin{verbatim}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbBloc{B}{$H_1$}{E}
+ \sbRelier{E}{B}
+\sbSumb{sum}{B}
+ \sbRelier{B}{sum}
+\sbSortie{S}{sum}
+ \sbRelier{sum}{S}
+ \sbRenvoi{E-B}{sum}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{small}
+\end{minipage}
+
+
+
+\subsubsection{Liens décalés}
+Ces liens sont utilisés pour relier un bloc d'un ligne vers un bloc d'une ligne parallèle (vers l'avant ou l'arrière);
+
+\begin{center}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{a}{E}
+\sbBloc{b}{$H_1$}{a}
+ \sbRelier[$E_1$]{E}{a}
+\sbBlocL{c}{$H_2$}{b}
+ \sbRelier[$\epsilon$]{a}{b}
+\sbComph{d}{c}
+ \sbRelier[u]{c}{d}
+\sbBlocL{e}{$H_3$}{d}
+\sbBlocL{f}{$H_4$}{e}
+\sbSortie[5]{S1}{f}
+ \sbRelier{f}{S1}
+ \sbNomLien[0.8]{S1}{$S_1$}
+\sbDecaleNoeudy[-4]{f}{u}
+\sbDecaleNoeudy{e}{v}
+\sbBlocr{r1}{$R_1$}{u}
+\sbBlocr{r2}{$R_2$}{v}
+\sbBlocrL{r3}{$R_3$}{r2}
+\sbRelieryx{f-S1}{r1}
+\sbRelierxy[n1]{r1}{d}
+\sbRelieryx{e-f}{r2}
+\sbRelierxy[n2]{r3}{a}
+\end{tikzpicture}
+\end{center}
+
+\begin{minipage}[t]{0.46\linewidth}
+Code
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{a}{E}
+ \sbRelier[$E_1$]{E}{a}
+\sbBloc{b}{$H_1$}{a}
+ \sbRelier[$\epsilon$]{a}{b}
+\sbBlocL{c}{$H_2$}{b}
+\sbComph{d}{c}
+ \sbRelier[u]{c}{d}
+\sbBlocL{e}{$H_3$}{d}
+\sbBlocL{f}{$H_4$}{e}
+\sbSortie[5]{S1}{f}
+ \sbRelier{f}{S1}
+ \sbNomLien[0.8]{S1}{$S_1$}
+\sbDecaleNoeudy[-4]{f}{u}
+\sbDecaleNoeudy{e}{v}
+\sbBlocr{r1}{$R_1$}{u}
+\sbBlocr{r2}{$R_2$}{v}
+\sbBlocrL{r3}{$R_3$}{r2}
+\sbRelieryx{f-S1}{r1}
+\sbRelierxy[n1]{r1}{d}
+\sbRelieryx{e-f}{r2}
+\sbRelierxy[n2]{r3}{a}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{0.46\linewidth}
+Commentaires
+\begin{itemize}
+ \item Les premières commandes (de \verb"\sbEntree.." à \verb"\sbSortie{S1}..") placent les blocs de la chaîne directe, certains blocs sont positionnés avec la commande \verb"\sbBloc" d'autres avec \verb"\sbBlocL";
+ \item le nom de la sortie n'est pas positionné avec la commande \verb"\sbRelier{f}{S1}" mais avec la commande \verb"\sbNomLien[0.8]{S1}{$S_1$}" afin qu'il ne soit pas superposé au trait du retour vers $R_1$;
+ \item Les deux commandes \verb"\sbDecaleNoeudy[-4]{f}{u}" et \verb"\sbDecaleNoeudy{e}{v}" permettent de positionner le départ des deux boucles de retour, la première est décalé de \textbf{[-4]} au dessus de la chaîne précédente et positionnée par rapport au bloc \textbf{f}, la seconde est placée par défaut au dessous par rapport au bloc \textbf{e}. Ces nouveaux n\oe uds sont nommés \textbf{u} et \textbf{v}.
+ \item Les blocs de retours sont ensuite tracés de la droite vers la gauche par rapport à ces n \oe uds avec la commande \verb"\sbBlocr..." et \verb"\sbBlocrL..." puis reliés.
+ \item La commande \verb"\sbRelieryx{f-S1}{r1}" trace le lien depuis le milieu de la liaison entre les blocs \textbf{f} et \textbf{s} et le bloc \textbf{r1}, la commande \verb"\sbRelierxy[n1]{r1}{d}" trace le lien vers le comparateur
+ \item
+\end{itemize}
+\end{minipage}
+
+\subsubsection{Personnalisation des liens}
+
+La commande \verb"\sbStyleLien{liste d'option}" permet de personnaliser le tracé des liens et des textes associés.
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+ \sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\sbStyleLien{dashed, red}
+\sbBloc[8]{B2}{$H_1$}{B1}
+ \sbRelier[lien]{B1}{B2}
+\sbSortie[4]{S}{B2}
+\sbStyleLienDefaut
+\sbStyleLien{blue, very thick,text=brown}
+ \sbRelier[Sortie]{B2}{S}
+\sbStyleLien{dashed}
+ \sbRenvoi{B2-S}{comp}{}
+\sbStyleLienDefaut
+\end{tikzpicture}
+\end{center}
+
+\begin{multicols}{2}
+
+\begin{verbatim}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\sbStyleLien{dashed, red}
+\sbBloc[8]{B2}{$H_1$}{B1}
+\sbRelier[lien]{B1}{B2}
+\sbSortie[4]{S}{B2}
+\sbStyleLienDefaut
+\sbStyleLien{blue, very thick,text=brown}
+ \sbRelier[Sortie]{B2}{S}
+\sbStyleLien{dashed}
+ \sbRenvoi{B2-S}{comp}{}
+\sbStyleLienDefaut
+\end{tikzpicture}
+\end{verbatim}
+\end{multicols}
+
+ Cette commande s'applique à tous les types de liens, les styles sont actifs jusqu'à une nouvelle définition, et comme pour la commande \verb"\sbStyleBloc{liste d'option}" ils sont cumulatifs. La commande \verb"\sbStyleLienDefaut" ré-initialise le style par défaut.
+
+\subsection{Chaînes et Boucles}
+
+Plusieurs commandes globales facilitent le tracé de schéma blocs, elle tracent directement des chaînes de blocs, ou des boucles.
+
+\subsubsection{Chaînes}
+deux commandes, une qui pour trace des chaines directe ( de la gauche vers la droite), l'autre les chaînes de retour (de la droite vers la gauche).
+\begin{description}
+\item [Chaîne directe:] \verb"\sbChaine[pas]{Noeud depart}{liste blocs Nom/Fonction}"
+
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbChaine[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
+\end{tikzpicture}
+\end{verbatim}
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbChaine[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
+\end{tikzpicture}
+\end{center}
+
+\item [Chaîne de retour: ]\verb"\sbChaineRetour[pas]{Noeud depart}{liste blocs Nom/Fonction}"
+
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbChaineRetour[3]{E}{E1/$E_1(p)$,F/$\dfrac{K_p}{1+\tau\cdot p}$,G/$G(p)$}
+\end{tikzpicture}
+
+\end{verbatim}
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbChaineRetour[3]{E}{E1/$E_1(p)$,F/$\dfrac{K_p}{1+\tau\cdot p}$,G/$G(p)$}
+\end{tikzpicture}
+\end{center}
+
+\end{description}
+
+On retrouve dans ces deux commandes
+\begin{description}
+\item[pas: ] distance en em entre les blocs,
+\item[noeud depart:] le premier bloc de la chaîne est positionnée à la distance pas du n\oe ud noeud depart,
+\item[liste blocs: ] la liste des blocs est notée avec la syntaxe suivante $Nom_1$/$Fonction_1$, $Nom_2$/$Fonction_2$, ...., $Nom_i$/$Fonction_i$, ...., $Nom_n$/$Fonction_n$.
+\end{description}
+
+
+Avec ces deux commandes, on dessine rapidement le schéma ci dessous avec un code relativement court.
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}\sbRelier[$E(p)$]{E}{comp}
+\sbChaine[4]{comp}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
+\sbDecaleNoeudy[5]{B-C}{DebutRetour}
+\node[above of=comp-A,node distance=0.5em]{$\varepsilon(p)$};
+\node[above of=B-C,node distance=0.5em]{$V(p)$};
+\sbChaineRetour[2]{DebutRetour}{E1/$E_1(p)$,F/$\dfrac{K_p}{1+\tau\cdot p}$,G/$G(p)$}
+\sbRelieryx{B-C}{E1}
+\sbRelierxy{G}{comp}
+\sbSortie[5]{S}{D}\sbRelier[$S(p)$]{D}{S}
+\end{tikzpicture}
+\end{center}
+
+
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}\sbRelier[$E(p)$]{E}{comp}
+\sbChaine[4]{comp}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
+\sbDecaleNoeudy[5]{B-C}{DebutRetour}
+\node[above of=comp-A,node distance=0.5em]{$\varepsilon(p)$};
+\node[above of=B-C,node distance=0.5em]{$V(p)$};
+\sbChaineRetour[2]{DebutRetour}{E1/$E_1(p)$,F/$\dfrac{K_p}{1+\tau\cdot p}$,G/$G(p)$}
+\sbRelieryx{B-C}{E1}
+\sbRelierxy{G}{comp}
+\sbSortie[5]{S}{D}\sbRelier[$S(p)$]{D}{S}
+\end{tikzpicture}
+\end{verbatim}
+
+On remarquera, tous les liens sont nommés, le nom est construit à partir du nom des deux blocs à relier, ainsi, B-C correspond au point milieu du lien entre B et C.
+
+La commande tikz \verb"\node[above of=B-C,node distance=0.5em]{$V(p)$};" permet de placer le nom du lien au dessus (à la distance 0.5em) de celui-ci.
+
+
+\subsubsection{Boucles}
+
+Trois commandes permettent de dessiner des schémas blocs bouclés unitaire ou non.
+\begin{description}
+\item[Boucle unitaire: ]deux commandes, une pour dessiner une boucle à retour unitaire à insérer dans un schéma, l'autre pour dessiner complètement la boucle.
+
+\begin{itemize}
+\item \verb"\sbBoucle[pas]{noeud depart}{liste de blocs chaine directe}" ou
+
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbBoucle[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
+\end{tikzpicture}
+\end{verbatim}
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbBoucle[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}
+\end{tikzpicture}
+\end{center}
+
+\item \verb"\sbBoucleSeule[pas]{Noeud debut}{liste blocs}{Sortie}"
+
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbBoucleSeule[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}{S}
+\end{tikzpicture}
+\end{verbatim}
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbBoucleSeule[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}{S}
+\end{tikzpicture}
+\end{center}
+
+\end{itemize}
+
+
+
+
+\item[Boucle à retour non unitaire: ]
+
+\verb"\sbBoucleRetour[pas]{noeud depart}{liste chaine directe}{liste chaine de retour}"
+
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbBoucleRetour[3]{E}{A/$A_1(p)$,BB/Fonction(p),C/$C(p)$,D/$D_1(p)$}{F/$F(p)$,G/$G(p)$}
+\end{tikzpicture}
+\end{verbatim}
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbBoucleRetour[3]{E}{A/$A_1(p)$,B/Fonction(p),C/$C(p)$,D/$D_1(p)$}{F/$F(p)$,G/$G(p)$}
+\end{tikzpicture}
+\end{center}
+
+
+\end{description}
+\newdimen\oldparindent \oldparindent=\parindent
+\noindent\begin{minipage}{0.4\textwidth}
+\parindent=\oldparindent
+Encore un petit exemple, dans le quel on peut noter que le lien entre le comparateur est nommé CompU-C, ce nom est construit à partir de (Comp) concaténer avec le n\oe ud de départ (U) - le n\oe ud suivant (C).
+
+\end{minipage}\hfill
+\begin{minipage}{0.6\textwidth}
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{U}
+\sbBoucleRetour[3]{U}{C/$C(p)$,A/$A$,H/$H_{sys}(p)$}{G/G}
+\node[above of=CompU-C,node distance=0.5em]{$\varepsilon(p)$};
+\node[above of=A-H, node distance=0.5em]{$U(p)$};
+\node[above of=U,node distance=0.5em]{$U(p)$};
+\sbSortie[5]{V2}{H}\sbRelier[$V_2(p)$]{H}{V2}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+
+
+
+
+\begin{center}
+ \begin{tikzpicture}
+\sbEntree{U}
+\sbBoucleRetour[3]{U}{C/$C(p)$,A/$A$,H/$H_{sys}(p)$}{G/G}
+
+\node[above of=CompU-C,node distance=0.5em]{$\varepsilon(p)$};
+\node[above of=A-H, node distance=0.5em]{$U(p)$};
+\node[above of=U,node distance=0.5em]{$U(p)$};
+
+\sbSortie[5]{V2}{H}\sbRelier[$V_2(p)$]{H}{V2}
+\end{tikzpicture}
+\end{center}
+
+
+
+
+
+
+
+
+
+
+\subsection{Changement de taille}
+
+Toutes dimensions étant en em, le changement de taille d'un graphe se fait en changeant la taille des caractères de l'environnement englobant.
+
+\begin{tabular}{|c|c|} \hline
+normal & small \\
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\sbBloc[3]{B2}{$H_1$}{B1}
+\sbRelier[lien]{B1}{B2}
+\sbSortie{S}{B2}
+ \sbRelier[Sortie]{B2}{S}
+ \sbRenvoi{B2-S}{comp}{}
+\end{tikzpicture} &
+\begin{small}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\sbBloc[3]{B2}{$H_1$}{B1}
+\sbRelier[lien]{B1}{B2}
+\sbSortie{S}{B2}
+ \sbRelier[Sortie]{B2}{S}
+ \sbRenvoi{B2-S}{comp}{}
+\end{tikzpicture}
+\end{small} \\ \hline
+tiny & Large \\
+\begin{tiny}
+ \begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\sbBloc[3]{B2}{$H_1$}{B1}
+\sbRelier[lien]{B1}{B2}
+\sbSortie{S}{B2}
+ \sbRelier[Sortie]{B2}{S}
+ \sbRenvoi{B2-S}{comp}{}
+\end{tikzpicture}
+\end{tiny}&
+\begin{Large}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\sbBloc[3]{B2}{$H_1$}{B1}
+\sbRelier[lien]{B1}{B2}
+\sbSortie{S}{B2}
+ \sbRelier[Sortie]{B2}{S}
+ \sbRenvoi{B2-S}{comp}{}
+\end{tikzpicture}
+\end{Large} \\ \hline
+\end{tabular}
+
+Il est aussi possible d'utiliser ce changement de taille pour par exemple insister sur une partie de la boucle comme par exemple sur l'exemple ci-dessous, où on souhaite insister sur la boucle extérieure.
+
+\begin{center}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\begin{tiny}
+\sbComp[8]{comp2}{B1}
+\sbRelier{B1}{comp2}
+\sbBlocL{B10}{$H_2$}{comp2}
+\sbBloc[3]{B20}{$H_3$}{B10}
+\sbRelier[lien]{B10}{B20}
+\sbBloc{B30}{$H_4$}{B20}
+ \sbRelier{B20}{B30}
+ \sbRenvoi{B20-B30}{comp2}{}
+\end{tiny}
+\sbBloc{B2}{$H_1$}{B30}
+\sbRelier[lien]{B30}{B2}
+\sbSortie[6]{S}{B2}
+ \sbRelier[Sortie]{B2}{S}
+ \sbRenvoi[6]{B2-S}{comp}{}
+\end{tikzpicture}
+\end{center}
+\begin{multicols}{2}
+\begin{verbatim}
+\begin{tikzpicture}
+\sbEntree{E}
+\sbComp{comp}{E}
+\sbRelier{E}{comp}
+\sbBlocL{B1}{$H_0$}{comp}
+\begin{tiny}
+ \sbComp[8]{comp2}{B1}
+ \sbRelier{B1}{comp2}
+ \sbBlocL{B10}{$H_2$}{comp2}
+ \sbBloc[3]{B20}{$H_3$}{B10}
+ \sbRelier[lien]{B10}{B20}
+ \sbBloc{B30}{$H_4$}{B20}
+ \sbRelier{B20}{B30}
+ \sbRenvoi{B20-B30}{comp2}{}
+\end{tiny}
+\sbBloc{B2}{$H_1$}{B30}
+\sbRelier[lien]{B30}{B2}
+\sbSortie[6]{S}{B2}
+ \sbRelier[Sortie]{B2}{S}
+ \sbRenvoi[6]{B2-S}{comp}{}
+\end{tikzpicture}
+\end{verbatim}
+
+\end{multicols}
+
+
+
+
+
+
+%\section{Vielles définitions}
+%\subsubsection{Avertissement}
+%Les anciennes commandes du package schemabloc sont toujours implémentées dans ce package, mais il est préférable de ne pas les utiliser, elles ne sont maintenues que de manière transitoire. Elles ne permettent pas la personnalisation ni le changement de taille.
+%\itshape
+%\subsubsection{Commandes obsolètes}
+%\begin{itemize}
+%\item \verb"\entree{nom}" : Tous les blocs sont dessinés en relatif par rapport à un noeud d'entrée, la construction du schéma ne peut donc débuter qu'après avoir défini le premier noeud avec la commande:\verb"\entree{nom}".
+%\item \verb"\decale[distance]{E1}{E2}" : La commande \verb"\decale[distance]{E1}{E2}" permet de positionner un nouveau n\oe ud par rapport au n\oe ud précédent, cette commande est nécessaire pour démarrer un nouvelle branche ou pour positionner une nouvelle entrée.
+%\item \verb"\bloc[distance]{nom}{contenu}{bloc precedent}" :
+% \begin{description}
+% \item [distance] ce paramètre optionnel permet de positionner le bloc par rapport au bloc précédent ( la valeur par défaut est 6 em);
+% \item [nom] ce paramètre permet de nommer le noeud associé au bloc, pour faire référence à ce bloc, il faudra utiliser ce paramètre (pour relier les blocs);
+% \item [contenu] ce paramètre précise le contenu du bloc, cela paut être aussi bien du texte qu'une fonction mathématique comme $\dfrac{K_c}{1 + \tau \cdot p}$ en tapant \verb"$\dfrac{K_c}{1 + \tau \cdot p}$" (ne pas oublier les \$ );
+% \item[bloc precedent] ce paramètre permet de préciser le bloc précédent, chaque bloc est positionné relativement au bloc précédent avec la distance \textbf{distance}.
+% \end{description}
+%\item \verb"\blocr..." : La commande \verb"\blocr..." permet de tracer les blocs de la chaîne de retour de la droite vers la gauche. les paramètres de commande sont identiques.
+%\item \verb"\blocseul..." : La commande \verb"\blocseul..." permet de tracer un bloc seul avec une entrée et une sortie cette commande est général utilisée seule.
+%\item \verb"\comp[distance]{nom}{bloc precedent}" :
+% \begin{description}
+% \item [distance : ] paramètre optionnel permettant de positionner le comparateur par rapport au bloc précédent ( la valeur par défaut est 4em);
+% \item [nom :] nom du comparateur, ce nom doit être unique dans votre schéma, il sert à référencer le comparateur pour tous les liens;
+% \item [bloc precedent :] le nom du bloc précédent, le comparateur est placé à sa droite,à la distance \textbf{distance}.
+% \end{description}
+%\item \verb"\comph{comp}{E}" : voir ci-dessus pour les paramètres
+%\item \verb"\sumh{comp}{E}" : voir ci-dessus pour les paramètres
+%\item \verb"\sumb{comp}{E}" : voir ci-dessus pour les paramètres
+%\item \verb"\relier{b1}{b2}{nom}" : liens entre deux blocs (ou comparateur, entrée ou sortie) dans la chaîne directe (de la gauche vers la droite) ou dans la chaîne de retour (de la droite vers la gauche).
+%\item \verb"\renvoi[distance]{nom départ}{nom arrivee}{texte}" : les renvois sont des liens qui permettent soit de retourner en arrière (retour) soit de sauter un ou plusieurs blocs; ils sont tracés entre un lien et un comparateur (sommateur);
+%\item \verb"\relieryx{nom depart}{nom arrivee}{texte}" : lien utilisé pour relier un bloc d'un ligne vers un bloc d'une ligne parallèle (vers l'avant ou l'arrière). Ce lien débute par une ligne verticale;
+%\item \verb"\relierxy{nom depart}{nom arrivee}{texte}" : lien utilisé pour relier un bloc d'un ligne vers un bloc d'une ligne parallèle (vers l'avant ou l'arrière). Ce lien débute par une ligne horizontale;
+%\end{itemize}
+
+%\subsubsection{Exemple commandes obsolètes}
+%
+%\begin{tikzpicture}
+%\entree{E}
+%\comp{a}{E}
+%\bloc{b}{$H_1$}{a}
+%\bloc{c}{$H_2$}{b}
+%\comph[2]{d}{c}
+%\bloc[2]{e}{$H_3$}{d}
+%\bloc{f}{$H_4$}{e}
+%\sortie{S}{f}
+%\sortie{S1}{S}
+%\relier{E}{a}{$E_1$}
+%\relier{a}{b}{$\epsilon$}
+%\relier{b}{c}{}
+%\relier{c}{d}{u}
+%\relier{d}{e}{}
+%\relier{e}{f}{}
+%\relier{f}{S}{}
+%\relier{S}{S1}{$S_1$}
+%\decale[-2]{f}{u}
+%\decale{e}{v}
+%\blocr{r1}{$R_1$}{u}
+%\blocr{r2}{$R_2$}{v}
+%\blocr{r3}{$R_3$}{r2}
+%\relieryx{f-S}{r1}{}
+%\relierxy{r1}{d}{nom1}
+%\relieryx{e-f}{r2}
+%\relier{r2}{r3}{}
+%\relierxy{r3}{a}{nom2}
+%\end{tikzpicture}
+%
+%\begin{minipage}[t]{0.46\linewidth}
+%\begin{verbatim}
+%Code
+%\begin{tikzpicture}
+%\entree{E}
+%\comp{a}{E}
+%\bloc{b}{$H_1$}{a}
+%\bloc{c}{$H_2$}{b}
+%\comph[5]{d}{c}
+%\bloc[5]{e}{$H_3$}{d}
+%\bloc{f}{$H_4$}{e}
+%\sortie{S}{f}
+%\sortie{S1}{S}
+%\relier{E}{a}{$E_1$}
+%\relier{a}{b}{$\epsilon$}
+%\relier{b}{c}{}
+%\relier{c}{d}{u}
+%\relier{d}{e}{}
+%\relier{e}{f}{}
+%\relier{f}{S}{}
+%\relier{S}{S1}{$S_1$}
+%\decale[-5]{f-S}{u}
+%\decale{e}{v}
+%\blocr{r1}{$R_1$}{u}
+%\blocr{r2}{$R_2$}{v}
+%\blocr{r3}{$R_3$}{r2}
+%\relieryx{f-S}{r1}{}
+%\relierxy{r1}{d}{nom1}
+%\relieryx{e-f}{r2}
+%\relier{r2}{r3}{}
+%\relierxy{r3}{a}{nom2}
+%\end{tikzpicture}
+%\end{verbatim}
+%\end{minipage}
+%\begin{minipage}[t]{0.46\linewidth}
+%Commentaires
+%\begin{itemize}
+% \item Les premières commandes (de \verb"\entree.." à \verb"\sortie{S1}.." placent les blocs de la chaîne directe
+% \item On remarquera les deux commandes successives \verb"\sortie..", elles permettent ici d'éviter que le renvoi soit dessiné par dessus le nom de la sortie.
+% \item Les deux commandes \verb"\decale[-5]{f}{u}" et \verb"\decale{e}{v}" permettent de positionner le départ des deux boucles de retour, la première est décalé de \textbf{[-5]} au dessus de la chaîne précédente et positionnée par rapport au bloc \textbf{f}, la seconde est placée par défaut au dessous par rapport au bloc e. Ces nouveaux n\oe uds sont nommés \textbf{u} et \textbf{v}.
+% \item Les blocs de retours sont ensuite tracés de la droite vers la gauche par rapport à ces n \oe uds avec la commande \verb"\blocr..." et reliés.
+% \item La commande \verb"\relieryx{f-S}{r1}{}" trace le lien depuis le milieu de la liaison entre les blocs \textbf{f} et \textbf{s} et le bloc \textbf{r1}, la commande \verb"\relierxy{r1}{d}{nom1}" trace le lien vers le comparateur
+% \item
+%\end{itemize}
+%
+%
+%\end{minipage}
+
+
+
+\section{Installation}
+\begin{itemize}
+\item Copier le package schemabloc.sty dans votre répertoire localtexmf/tex/latex \dots
+\item placer dans l'entête de votre document \verb"\usepackage{schemabloc}"
+\end{itemize}
+
+Vous pouvez aussi copier le code des macros ci-dessous dans votre entête.
+
+
+\section{Code des macros}
+\begin{verbatim}
+%initialisation des styles
+\tikzstyle{sbStyleLien}=[->,>=latex',]
+\tikzstyle{sbStyleBloc}=[draw, rectangle,]
+\tikzstyle{sbStyleBlocPatate}=[]
+\tikzstyle{sbStyleSum}=[draw, circle,]%style Sum CC
+% Commandes de changement de style
+\newcommand{\sbStyleLienDefaut}{
+\tikzstyle{sbStyleLien}=[->,>=latex']
+}
+
+\newcommand{\sbStyleLien}[1]{
+\tikzstyle{sbStyleLien}+=[#1]
+}
+
+\newcommand{\sbStyleBloc}[1]{
+\tikzstyle{sbStyleBloc}+=[#1]
+}
+\newcommand{\sbStyleBlocDefaut}{
+\tikzstyle{sbStyleBloc}=[draw, rectangle,]
+}
+
+\newcommand{\sbStyleSum}[1]{
+\tikzstyle{sbStyleSum}+=[#1]
+}
+
+\newcommand{\sbStyleSumDefaut}{
+\tikzstyle{sbStyleBloc}=[draw, circle,]
+}%style Sum default CC
+
+
+% Commandes d'entrée et sortie
+\newcommand{\sbEntree}[1]{
+ \node [coordinate, name=#1] {};
+\sbDecaleNoeudx[0]{#1}{#1}
+}
+\newcommand{\sbSortie}[3][2]{
+ \node [coordinate, right of=#3droite, node distance=#1em, minimum size=0em,right] (#2) {};
+}
+
+%Commandes de Bloc
+\newcommand{\sbBloc}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, right of = #4droite,
+node distance=#1em,sbStyleBloc,right] (#2) {#3};
+\node (#2droite) at (#2.east){};
+\node (BlocdeFindroite) at (#2.east){};
+}
+
+\newcommand{\sbBlocPatate}[4][2]{
+\node [draw, cloud, cloud puffs=5, draw,
+ minimum height=3em, minimum width=5em, right of = #4droite,
+node distance=#1em,sbStyleBlocPatate,right] (#2) {#3};
+\node (#2droite) at (#2.east){};
+}
+
+\newcommand{\sbBlocr}[4][2]{
+\node [
+ minimum height=3em, minimum width=3em, left of = #4gauche,
+node distance=#1em, sbStyleBloc,left] (#2) {#3};
+\node (#2gauche) at (#2.west){};
+}
+
+\newcommand{\sbBlocL}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, right of = #4droite,node distance=#1em,sbStyleBloc,right] (#2) {#3};
+\node (#2droite) at (#2.east){};
+\node (BlocdeFindroite) at (#2.east){};
+ \draw [sbStyleLien,auto] (#4) -- node[name=#4-#2] {} (#2);
+}
+
+\newcommand{\sbBlocrL}[4][2]{
+\node [draw, rectangle,
+ minimum height=3em, minimum width=3em, left of = #4gauche,
+node distance=#1em, sbStyleBloc,left] (#2) {#3};
+\node (#2gauche) at (#2.west){};
+\node (BlocdeFingauche) at (#2.west){};
+ \draw [sbStyleLien,auto] (#4) -- node[name=#4-#2] {} (#2);
+}
+
+\newcommand{\sbBlocseul}[4][1.5]{
+\sbEntree{E1}
+\sbBloc[#1]{B1}{#3}{E1}
+\sbSortie[#1]{S1}{B1}
+\sbRelier{E1}{B1}{#2}
+\sbRelier{B1}{S1}{#4}
+}
+
+%\Commande de lien
+\newcommand{\sbRelier}[3][]{
+ \draw [sbStyleLien,auto] (#2) -- node[name=#2-#3] {#1} (#3);
+}
+
+\newcommand{\sbRelieryx}[2]{
+\draw [sbStyleLien] (#1.south) |- (#2) ;
+}
+\newcommand{\sbRelierxy}[3][]{
+\draw [sbStyleLien] (#2) -| node[name=#2-#3,near end,right] {#1} (#3) ;
+}
+
+\newcommand{\sbRenvoi}[4][4]{
+\node [below of=#2, node distance=#1em, minimum size=0em](retour#2) {};
+\draw [sbStyleLien] (#2.south)--(retour#2.south) -| node[name=#2-#3,near end,right] {#4} (#3) ;
+}
+
+\newcommand{\sbNomLien}[3][0.4]{
+\node[above of=#2, node distance=#1em] (#2nom) at (#2) {#3};
+}
+%Commande comparateurs et sommateurs
+
+\newcommand*{\sbCompSum}{\@ifstar\sbCompSumNorm\sbCompSumUsuel}
+
+\newcommand{\sbCompSumUsuel}[7][4]{
+ \node [draw, circle,minimum size=2em, right of=#3,node distance=#1em] (#2) {};
+ \node [draw, cross out,minimum size=1.414em,right of=#3,node distance=#1em] {};
+ \node [above of=#2,node distance=0.6em] {$#4$};
+ \node [below of=#2,node distance=0.6em] {$#5$};
+ \node [left of=#2,node distance=0.6em] {$#6$};
+ \node [right of=#2,node distance=0.6em] {$#7$};
+\node (#2droite) at (#2.east){};
+\node (#2gauche) at (#2.west){};
+}
+
+% j'ai modifié le dessin du comparateur qui comporte 3 entrées dont le signe est donnépar #4 pour la chaîne directe, #5 pour le retour du bas, #6 pour le retour du haut. J'ai ajouté un style Sum. Je n'ai pas touché le reste.
+\newcommand{\sbCompSumNorm}[7][4]{
+ \node [draw, circle,minimum size=1.5em, right of=#3,node distance=#1em,
+label=85:$#4$,label=-85:$#5$,label=175:$#6$,label=5:$#7$,sbStyleSum] (#2) {};
+\node (#2droite) at (#2.east){};
+\node (#2gauche) at (#2.west){};
+}
+
+\newcommand{\sbSum}[6][4]{
+ \node [draw, circle,minimum size=1.5em, right of=#3,node distance=#1em,
+label=175:$#4$,label=-85:$#5$,label=85:$#6$,sbStyleSum] (#2) {};
+\node (#2droite) at (#2.east){};
+\node (#2gauche) at (#2.west){};
+}
+
+\newcommand*{\sbComp}{\@ifstar\sbCompNorm\sbCompUsuel}
+\newcommand{\sbCompUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{}{-}{+}{}
+}
+\newcommand{\sbCompNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{}{-}{+}{}
+}
+
+
+\newcommand*{\sbComph}{\@ifstar\sbComphNorm\sbComphUsuel}
+\newcommand{\sbComphUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{-}{}{+}{}
+}
+
+\newcommand{\sbComphNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{-}{}{+}{}
+}
+
+\newcommand*{\sbSumh}{\@ifstar\sbSumhNorm\sbSumhUsuel}
+\newcommand{\sbSumhUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{+}{}{+}{}
+}
+\newcommand{\sbSumhNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{+}{}{+}{}
+}
+
+\newcommand*{\sbSumb}{\@ifstar\sbSumbNorm\sbSumbUsuel}
+\newcommand{\sbSumbUsuel}[3][4]{
+\sbCompSum[#1]{#2}{#3}{}{+}{+}{}
+}
+\newcommand{\sbSumbNorm}[3][4]{
+\sbCompSum*[#1]{#2}{#3}{}{+}{+}{}
+}
+
+
+%Commandes de décalage de noeud
+
+\newcommand{\sbDecaleNoeudy}[3][5]{
+\node [below of=#2, node distance=#1em, minimum size=0em](#3) {};
+\node (#3droite) at (#3){};
+\node (#3gauche) at (#3){};
+}
+\newcommand{\sbDecaleNoeudx}[3][5]{
+\node [right of=#2, node distance=#1em, minimum size=0em](#3) {};
+\node (#3droite) at (#3){};
+\node (#3gauche) at (#3){};
+}
+
+
+%==============Chaines et Boucles===========
+
+\newcommand{\sbChaine}[3][4]{
+\foreach \x/\y [remember=\x as \lastx (initially #2)] in {#3}
+{\sbBlocL[#1]{\x}{\y}{\lastx}
+}
+}
+
+\newcommand{\sbChaineRetour}[3][4]{
+\foreach \x/\y [remember=\x as \lastx (initially #2)] in {#3}
+{\sbBlocrL[#1]{\x}{\y}{\lastx}
+}
+}
+
+\newcommand{\sbBoucleSeule}[4][4]{
+\sbComp[#1]{Comp#1}{#2}\sbRelier{E}{Comp#1}
+\sbChaine[#1]{Comp#1}{#3}
+\sbSortie[#1]{#4}{BlocdeFin}
+\draw [sbStyleLien,auto] (BlocdeFindroite.base) -- node[name=FindeChaine-#4] {} (#4);
+\sbRenvoi{FindeChaine-#4}{Comp#1}{}
+}
+
+
+\newcommand{\sbBoucle}[3][4]{
+\sbComp[#1]{Comp#1}{#2}\sbRelier{E}{Comp#1}
+\sbChaine[#1]{Comp#1}{#3}
+\draw [sbStyleLien,auto,-] (BlocdeFindroite.base) --++(1em,0)coordinate[name=FindeChaine];
+\sbRenvoi{FindeChaine}{Comp#1}{}
+}
+
+\newcommand{\sbBoucleRetour}[4][4]{
+\sbComp[#1]{Comp#1}{#2}\sbRelier{E}{Comp#1}
+\sbChaine[#1]{Comp#1}{#3}
+\draw [sbStyleLien,auto,-] (BlocdeFindroite.base) --++(1em,0)coordinate[name=FindeChaine];
+\sbDecaleNoeudy[5]{FindeChaine}{sbDebutRetour}
+\sbChaineRetour[#1]{sbDebutRetour}{#4}
+\draw [sbStyleLien,-] (FindeChaine) |- (sbDebutRetour.west) ;
+
+\draw [sbStyleLien] (BlocdeFingauche.base) -| node[name=sbNomRetour,near end,right] {} (Comp#1) ;
+
+}
+\end{verbatim}
+
+
+
+
+
+
+\printindex
+
+
+
+
+
+\newpage
+
+
+
+\printindex
+
+
+\end{document}
+
+
+
diff --git a/graphics/pgf/contrib/scsnowman/LICENSE b/graphics/pgf/contrib/scsnowman/LICENSE
new file mode 100644
index 0000000000..0d1ab85360
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/LICENSE
@@ -0,0 +1,25 @@
+(The BSD 2-Clause License)
+
+Copyright (c) 2015-2018 Hironobu Yamashita
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/graphics/pgf/contrib/scsnowman/Makefile b/graphics/pgf/contrib/scsnowman/Makefile
new file mode 100644
index 0000000000..953a175352
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/Makefile
@@ -0,0 +1,32 @@
+KANJI = -kanji=utf8
+FONTMAP = -f ipaex.map -f ptex-ipaex.map
+TEXMF = $(shell kpsewhich -var-value=TEXMFHOME)
+
+all: scsnowman.pdf \
+ scsnowman-sample.pdf scsnowman-zrtest.pdf
+
+scsnowman.pdf: scsnowman.sty scsnowman.tex
+ lualatex scsnowman.tex
+ lualatex scsnowman.tex
+ lualatex scsnowman.tex
+scsnowman-sample.pdf: scsnowman.sty scsnowman-sample.tex
+ platex scsnowman-sample.tex
+ platex scsnowman-sample.tex
+ dvipdfmx scsnowman-sample.dvi
+scsnowman-zrtest.pdf: scsnowman.sty scsnowman-zrtest.tex
+ pdflatex scsnowman-zrtest.tex
+ pdflatex scsnowman-zrtest.tex
+
+.PHONY: install clean
+install:
+ mkdir -p ${TEXMF}/doc/latex/scsnowman
+ cp ./Makefile ${TEXMF}/doc/latex/scsnowman/
+ cp ./LICENSE ${TEXMF}/doc/latex/scsnowman/
+ cp ./README.md ${TEXMF}/doc/latex/scsnowman/
+ cp ./*.pdf ${TEXMF}/doc/latex/scsnowman/
+ cp ./*.tex ${TEXMF}/doc/latex/scsnowman/
+ mkdir -p ${TEXMF}/tex/latex/scsnowman
+ cp ./*.sty ${TEXMF}/tex/latex/scsnowman/
+ cp ./*.def ${TEXMF}/tex/latex/scsnowman/
+clean:
+ rm -f *.dvi *.pdf
diff --git a/graphics/pgf/contrib/scsnowman/README.md b/graphics/pgf/contrib/scsnowman/README.md
new file mode 100644
index 0000000000..af14c4af46
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/README.md
@@ -0,0 +1,31 @@
+# scsnowman
+
+This LaTeX package provides a command `\scsnowman`, which can display many
+variants of snowman ("yukidaruma" in Japanese).
+This package utilizes TikZ for drawing snowman.
+
+The package is maintained on GitHub:
+https://github.com/aminophen/scsnowman
+
+## Requirements
+
+This package requires "tikz" package.
+
+## Installation
+
+Deploy the files in an appropriate place under the TEXMF tree.
+
+ * scsnowman.sty, sctkzsym-base.sty, scsnowman-normal.def
+ => $TEXMF/tex/latex/scsnowman
+ * scsnowman.{tex,pdf}, scsnowman-sample.{tex,pdf}
+ => $TEXMF/doc/latex/scsnowman
+
+Then, execute mktexlsr.
+
+## License
+
+This package is distributed under the BSD 2-Clause License.
+See [LICENSE](./LICENSE).
+
+Copyright (c) 2015-2018 Hironobu Yamashita
+http://acetaminophen.hatenablog.com/
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman-normal.def b/graphics/pgf/contrib/scsnowman/scsnowman-normal.def
new file mode 100644
index 0000000000..235f9496ec
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman-normal.def
@@ -0,0 +1,192 @@
+%%
+%% This is file `scsnowman-normal.def', part of scsnowman package.
+%% Maintained on GitHub:
+%% https://github.com/aminophen/scsnowman
+%%
+%% Copyright (c) 2015-2018 Hironobu Yamashita
+%% Email : h.y.acetaminophen[a t]gmail.com
+%% GitHub : https://github.com/aminophen
+%% Blog : http://acetaminophen.hatenablog.com/
+%% Twitter : @aminophen
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesFile{scsnowman-normal.def}[2018/06/07 v1.2d scsnowman definition (normal)]
+\def\sctkzsym@snowman@shape@normal{%
+ \setlength{\sctkzsym@coord@baseline}{%
+ \ifsctkzsym@snowman@adjustbaseline
+ 0.144ex\relax
+ \else
+ \z@
+ \fi}%
+ \sctkzsym@beginyokobox
+ \begin{tikzpicture}[x=1.8ex,y=1.8ex,line width=0.025ex*\sctkzsym@coord@scl,line join=round,line cap=round,scale=\sctkzsym@snowman@scale,baseline=\sctkzsym@coord@baseline*\sctkzsym@coord@scl]
+ \useasboundingbox(0,0) rectangle (1,1);
+ \sctkzsym@snowman@bodypath % body (IPA-like)
+ (0.5,0.72) .. controls (0.64,0.72) and (0.76,0.65) ..
+ (0.76,0.55) .. controls (0.76,0.51) and (0.72,0.47) ..
+ (0.67,0.44) .. controls (0.79,0.41) and (0.84,0.32) ..
+ (0.84,0.25) .. controls (0.84,0.13) and (0.75,0.08) ..
+ (0.68,0.08) --
+ (0.32,0.08) .. controls (0.25,0.08) and (0.16,0.13) ..
+ (0.16,0.25) .. controls (0.16,0.32) and (0.21,0.41) ..
+ (0.33,0.44) .. controls (0.28,0.47) and (0.24,0.51) ..
+ (0.24,0.55) .. controls (0.24,0.65) and (0.36,0.72) ..
+ (0.5,0.72) --
+ cycle;
+ \ifsctkzsym@snowman@eyes
+ \sctkzsym@snowman@eyepath (0.40,0.56) circle (0.02 and 0.03);
+ \sctkzsym@snowman@eyepath (0.60,0.56) circle (0.02 and 0.03);
+ \fi
+ \ifsctkzsym@snowman@nose
+ \sctkzsym@snowman@nosepath
+ (0.49,0.50) .. controls (0.52,0.51) and (0.51,0.54) ..
+ (0.48,0.54) .. controls (0.46,0.54) and (0.40,0.52) ..
+ (0.40,0.52) .. controls (0.39,0.51) and (0.46,0.50) ..
+ (0.49,0.50) --
+ cycle;
+ \fi
+ \ifsctkzsym@snowman@mouth
+ \ifx\sctkzsym@snowman@mouthshape\sctkzsym@snowman@mouthshape@iii
+ \sctkzsym@snowman@mouthpath (0.40,0.47) -- (0.60,0.47);
+ \else\ifx\sctkzsym@snowman@mouthshape\sctkzsym@snowman@mouthshape@ii
+ \sctkzsym@snowman@mouthpath (0.40,0.46) .. controls (0.45,0.49) and (0.55,0.49) .. (0.60,0.46);
+ \else
+ \sctkzsym@snowman@mouthpath (0.40,0.48) .. controls (0.45,0.45) and (0.55,0.45) .. (0.60,0.48);
+ \fi\fi
+ \fi
+ \ifsctkzsym@snowman@sweat
+ \sctkzsym@snowman@sweatpath (0.70,0.56) .. controls (0.64,0.46) and (0.75,0.46) .. (0.70,0.56) -- cycle;
+ \fi
+ \ifsctkzsym@snowman@hat
+ \sctkzsym@snowman@hatpath % hat
+ (0.58,0.90) --
+ (0.77,0.81) --
+ (0.74,0.61) .. controls (0.66,0.60) and (0.50,0.66) ..
+ (0.46,0.72) --
+ (0.58,0.90) --
+ cycle;
+ \fi
+ \ifsctkzsym@snowman@mikan
+ \sctkzsym@snowman@mikanpath % mikan
+ (0.50,0.80) circle (0.15 and 0.12);
+ \ifsctkzsym@snowman@leaf
+ \sctkzsym@snowman@leafpath
+ (0.50,0.93) .. controls (0.58,0.95) ..
+ (0.65,0.88) .. controls (0.50,0.87) ..
+ (0.50,0.93) --
+ cycle;
+ \fi
+ \fi
+ \ifsctkzsym@snowman@broom
+ \sctkzsym@snowman@broompath[line width=0.08ex*\sctkzsym@coord@scl,line cap=butt]
+ (0.03,0.06) -- (0.12,0.50);
+ \sctkzsym@snowman@broompath[line width=0.03ex*\sctkzsym@coord@scl,line cap=butt]
+ (0.11,0.50) -- (0.06,0.75)
+ (0.12,0.50) -- (0.12,0.72)
+ (0.12,0.50) -- (0.18,0.76)
+ (0.12,0.50) -- (0.21,0.70)
+ (0.13,0.50) -- (0.27,0.74);
+ \fi
+ \ifsctkzsym@snowman@arms
+ \sctkzsym@snowman@armspath % right arm (SourceHanSans-like)
+ (0.20,0.31) .. controls (0.19,0.33) and (0.14,0.41) ..
+ (0.13,0.42) .. controls (0.12,0.43) and (0.10,0.43) ..
+ (0.07,0.44) .. controls (0.04,0.46) and (0.06,0.46) ..
+ (0.08,0.46) .. controls (0.09,0.46) and (0.11,0.44) ..
+ (0.12,0.44) .. controls (0.14,0.46) and (0.14,0.47) ..
+ (0.15,0.49) .. controls (0.16,0.51) and (0.16,0.49) ..
+ (0.16,0.48) .. controls (0.16,0.46) and (0.14,0.44) ..
+ (0.15,0.43) .. controls (0.16,0.42) and (0.21,0.35) ..
+ (0.22,0.33) .. controls (0.23,0.31) and (0.21,0.30) ..
+ (0.20,0.31) --
+ cycle;
+ \sctkzsym@snowman@armspath % left arm (SourceHanSans-like)
+ (0.80,0.31) .. controls (0.81,0.33) and (0.86,0.41) ..
+ (0.87,0.42) .. controls (0.88,0.43) and (0.90,0.43) ..
+ (0.93,0.44) .. controls (0.96,0.46) and (0.94,0.46) ..
+ (0.92,0.46) .. controls (0.91,0.46) and (0.89,0.44) ..
+ (0.88,0.44) .. controls (0.86,0.46) and (0.86,0.47) ..
+ (0.85,0.49) .. controls (0.84,0.51) and (0.84,0.49) ..
+ (0.84,0.48) .. controls (0.84,0.46) and (0.86,0.44) ..
+ (0.85,0.43) .. controls (0.84,0.42) and (0.79,0.35) ..
+ (0.78,0.33) .. controls (0.77,0.31) and (0.79,0.30) ..
+ (0.80,0.31) --
+ cycle;
+ \fi
+ \ifsctkzsym@snowman@muffler
+ \sctkzsym@snowman@mufflerpath % muffler (SourceHanSans-like)
+ (0.27,0.48) .. controls (0.42,0.38) and (0.58,0.38) ..
+ (0.73,0.48) .. controls (0.75,0.46) and (0.76,0.44) ..
+ (0.77,0.41) .. controls (0.77,0.39) and (0.75,0.37) ..
+ (0.73,0.36) .. controls (0.74,0.33) and (0.74,0.31) ..
+ (0.76,0.26) .. controls (0.75,0.25) and (0.72,0.24) ..
+ (0.66,0.23) .. controls (0.66,0.27) and (0.65,0.30) ..
+ (0.63,0.34) .. controls (0.42,0.30) and (0.32,0.35) ..
+ (0.24,0.41) .. controls (0.25,0.45) and (0.26,0.47) ..
+ (0.27,0.48) --
+ cycle;
+ \fi
+ \ifsctkzsym@snowman@buttons\ifsctkzsym@snowman@muffler
+ \sctkzsym@snowman@buttonpath (0.50,0.16) circle (0.03);
+ \sctkzsym@snowman@buttonpath (0.50,0.26) circle (0.03);
+ \else
+ \sctkzsym@snowman@buttonpath (0.50,0.17) circle (0.03);
+ \sctkzsym@snowman@buttonpath (0.50,0.29) circle (0.03);
+ \fi\fi
+ \ifsctkzsym@snowman@snow
+ \ifsctkzsym@snowman@broom
+ \sctkzsym@snowman@snowpath (0.13,0.81) circle (0.04);
+ \else
+ \sctkzsym@snowman@snowpath (0.07,0.28) circle (0.04);
+ \sctkzsym@snowman@snowpath (0.13,0.55) circle (0.04);
+ \ifsctkzsym@snowman@note\else
+ \sctkzsym@snowman@snowpath (0.08,0.68) circle (0.04);
+ \sctkzsym@snowman@snowpath (0.23,0.76) circle (0.04);
+ \fi
+ \fi
+ \sctkzsym@snowman@snowpath (0.42,0.89) circle (0.04);
+ \sctkzsym@snowman@snowpath (0.74,0.89) circle (0.04);
+ \sctkzsym@snowman@snowpath (0.88,0.73) circle (0.04);
+ \sctkzsym@snowman@snowpath (0.92,0.53) circle (0.04);
+ \sctkzsym@snowman@snowpath (0.94,0.23) circle (0.04);
+ \fi
+ \ifsctkzsym@snowman@note
+ \sctkzsym@snowman@notepath % musical note (eighth note, quaver)
+ (0.119,0.789) .. controls (0.114,0.788) and (0.114,0.788) ..
+ (0.115,0.781) .. controls (0.122,0.740) and (0.124,0.732) ..
+ (0.125,0.728) .. controls (0.127,0.717) and (0.127,0.717) ..
+ (0.118,0.717) .. controls (0.105,0.717) and (0.096,0.709) ..
+ (0.096,0.698) .. controls (0.096,0.691) and (0.100,0.686) ..
+ (0.106,0.683) .. controls (0.116,0.679) and (0.131,0.687) ..
+ (0.134,0.698) .. controls (0.135,0.700) and (0.134,0.710) ..
+ (0.132,0.720) .. controls (0.126,0.752) and (0.125,0.764) ..
+ (0.124,0.768) .. controls (0.124,0.773) and (0.124,0.773) ..
+ (0.132,0.773) .. controls (0.141,0.774) and (0.145,0.771) ..
+ (0.148,0.764) .. controls (0.150,0.760) and (0.154,0.758) ..
+ (0.155,0.761) .. controls (0.156,0.761) and (0.155,0.766) ..
+ (0.153,0.771) .. controls (0.151,0.780) and (0.146,0.785) ..
+ (0.139,0.789) .. controls (0.136,0.791) and (0.126,0.791) ..
+ (0.119,0.789) --
+ cycle;
+ \sctkzsym@snowman@notepath % wavy line
+ (0.235,0.770) .. controls (0.234,0.769) and (0.232,0.765) ..
+ (0.231,0.761) .. controls (0.228,0.750) and (0.223,0.749) ..
+ (0.210,0.760) .. controls (0.203,0.766) and (0.201,0.766) ..
+ (0.195,0.766) .. controls (0.186,0.766) and (0.179,0.761) ..
+ (0.174,0.750) .. controls (0.170,0.742) and (0.169,0.738) ..
+ (0.172,0.735) .. controls (0.176,0.732) and (0.179,0.734) ..
+ (0.183,0.741) .. controls (0.187,0.750) and (0.191,0.755) ..
+ (0.194,0.755) .. controls (0.196,0.755) and (0.200,0.752) ..
+ (0.203,0.749) .. controls (0.210,0.743) and (0.220,0.738) ..
+ (0.225,0.738) .. controls (0.231,0.738) and (0.237,0.742) ..
+ (0.241,0.749) .. controls (0.245,0.757) and (0.246,0.766) ..
+ (0.242,0.770) .. controls (0.239,0.772) and (0.238,0.772) ..
+ (0.235,0.770) --
+ cycle;
+ \fi
+ \end{tikzpicture}%
+ \sctkzsym@endyokobox
+}
+\endinput
+%%
+%% End of file `scsnowman-normal.def'.
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman-sample.pdf b/graphics/pgf/contrib/scsnowman/scsnowman-sample.pdf
new file mode 100644
index 0000000000..427a331941
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman-sample.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman-sample.tex b/graphics/pgf/contrib/scsnowman/scsnowman-sample.tex
new file mode 100644
index 0000000000..f88f50226e
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman-sample.tex
@@ -0,0 +1,167 @@
+%%
+%% This is file `scsnowman-sample.tex', part of scsnowman package.
+%% Maintained on GitHub:
+%% https://github.com/aminophen/scsnowman
+%%
+%% Copyright (c) 2015-2018 Hironobu Yamashita
+%% Email : h.y.acetaminophen[a t]gmail.com
+%% GitHub : https://github.com/aminophen
+%% Blog : http://acetaminophen.hatenablog.com/
+%% Twitter : @aminophen
+%%
+% platex + dvipdfmx
+\documentclass[dvipdfmx,twocolumn]{jsarticle}
+\usepackage{plext}
+\usepackage[margin=21truemm]{geometry}
+\usepackage[svgnames]{xcolor}
+\usepackage{scsnowman}
+\title{\textsf{scsnowman}パッケージã®å®Ÿç”¨ä¾‹}
+\author{Hironobu Yamashita}
+\begin{document}
+\maketitle
+
+% ãµã¤ã†ã®ã‚†ãã ã‚‹ã¾
+ã“ã‚Œã¯ã‚†ãã ã‚‹ã¾\scsnowman ã§ã™ã€‚
+
+% 雪ã‚りゆãã ã‚‹ã¾
+今日ã®å¤©æ°—ã¯\scsnowman[snow]ã§ã™ã€‚
+
+% 帽å­ã‚’ã‹ã¶ã£ãŸã‚†ãã ã‚‹ã¾
+ゆãã ã‚‹ã¾\scsnowman[hat]ãŒå¸½å­ã‚’ã‹ã¶ã‚Šã¾ã—ãŸã€‚
+
+% 帽å­ã‚’ã‹ã¶ã£ãŸã‚†ãã ã‚‹ã¾ï¼ˆå¸½å­ã®è‰²ã¯é’)
+ç§ã¯é’ã„帽å­ã‚’ã‹ã¶ã£ãŸ\scsnowman[hat=blue]ãŒå¤§å¥½ãã§ã™ã€‚
+
+% 帽å­ã¨ãƒžãƒ•ãƒ©ãƒ¼ä»˜ï¼ˆãƒžãƒ•ãƒ©ãƒ¼ã®è‰²ã¯èµ¤ï¼‰
+マフラー\scsnowman[hat=true,muffler=red]を付ã‘ã¦ã‚ã’ã¾ã—ょã†ã€‚
+
+% è…•ã‚ã‚Š
+腕も作ã£ã¦\scsnowman[hat=true,muffler=red,arms=true]ã‚ã’ã¾ã—ょã†ã€‚
+
+% サイズ変更
+å°\scsnowmanã€
+中\scsnowman[scale=3]ã€
+大\scsnowman[scale=5]。
+
+% ゆãã ã‚‹ã¾ä¸‰å…„弟
+\begin{table}[htb]
+ \begin{tabular}{ccc}
+ \texttt{U+2603} & \texttt{U+26C4} & \texttt{U+26C7} \\
+ \texttt{\small SNOWMAN} & \texttt{\small SNOWMAN WITHOUT SNOW} & \texttt{\small BLACK SNOWMAN} \\
+ \scsnowman[scale=5,body=false,snow=true] & \scsnowman[scale=5,body=false,snow=false] & \scsnowman[scale=5,body=true,snow=true]
+ \end{tabular}
+\end{table}
+
+\begin{table}[htb]
+ \begin{tabular}{ccc}
+ \texttt{U+2603} & \texttt{U+26C4} & \texttt{U+26C7} \\
+ \texttt{\small SNOWMAN} & \texttt{\small SNOWMAN WITHOUT SNOW} & \texttt{\small BLACK SNOWMAN} \\
+ \scsnowman[scale=5,body=false,snow=true,muffler=true] & \scsnowman[scale=5,body=false,snow=false,muffler=true] & \scsnowman[scale=5,body=true,snow=true,muffler=true]
+ \end{tabular}
+\end{table}
+
+\begin{table}[htb]
+ \begin{tabular}{ccc}
+ \texttt{U+2603} & \texttt{U+26C4} & \texttt{U+26C7} \\
+ \texttt{\small SNOWMAN} & \texttt{\small SNOWMAN WITHOUT SNOW} & \texttt{\small BLACK SNOWMAN} \\
+ \scsnowman[scale=5,body=false,snow=true,hat=true,arms=true] & \scsnowman[scale=5,body=false,snow=false,hat=true,arms=true] & \scsnowman[scale=5,body=true,snow=true,hat=true,arms=true]
+ \end{tabular}
+\end{table}
+
+\begin{table}[htb]
+ \begin{tabular}{ccc}
+ \texttt{U+????} & \texttt{U+????} & \texttt{U+????} \\
+ \texttt{\small RED SNOWMAN} & \texttt{\small BLUE SNOWMAN} & \texttt{\small GREEN SNOWMAN} \\
+ \scsnowman[scale=5,body=red,snow=red,hat=red] & \scsnowman[scale=5,body=blue,hat=blue,arms=blue,muffler=blue] & \scsnowman[scale=5,body=green,snow=green,arms=green]
+ \end{tabular}
+\end{table}
+
+% 周囲ã®è‰²ã«è¿½éš
+テキストãŒé»’色ã®å ´åˆ\scsnowman[hat,muffler=red]ã€
+{\color{blue}テキストãŒé’色ã®å ´åˆ\scsnowman[hat,muffler=red]ã€
+{\color{green}テキストãŒç·‘色ã®å ´åˆ\scsnowman[hat,muffler=red]}}ã€
+元通り\scsnowman[hat,muffler=red]。
+
+\newpage
+
+\scsnowmandefault{body,hat,snow,muffler}%
+ç§ã€é»’\scsnowman 大輔ã¯ã€1950å¹´ã«é»’\scsnowman 太郎ã®é•·ç”·ã¨ã—ã¦
+誕生ã—ã¾ã—ãŸã€‚ãã®å¾Œã€é»’\scsnowman 家ã«ã¯â€¦
+
+\scsnowmandefault{hat,snow,arms}%
+ãŠéš£ã«ã¯ç™½\scsnowman ã•ã‚“ãŒä½ã‚“ã§ã„ã¾ã—ãŸã€‚白\scsnowman ã•ã‚“ã¯ã€
+å®›åã®æ–‡å­—を「\scsnowmanã€ã§ãªã「\scsnowman[arms=false,muffler]ã€
+ã¨æ›¸ã„ã¦ã—ã¾ã†ã¨ãŠæ‰‹ç´™ã‚’読ã¾ãšã«é£Ÿã¹ã¦ã—ã¾ã†ã‚ˆã†ãªå¤‰ã‚ã£ãŸæ–¹ã§ã—ãŸã€‚
+ãŸã ã—ã€\scsnowman[hat=red]ã®ã‚ˆã†ã«å¸½å­ã«è‰²ãŒä»˜ã„ãŸå®›åを見るã¨ã€
+白\scsnowman ã•ã‚“ã¯å–œã‚“ã§ã„ã¾ã—ãŸã€‚
+
+\medskip
+% buttons ã§ã€Œãƒœã‚¿ãƒ³ã€ï¼ˆãƒžãƒ•ãƒ©ãƒ¼ã®æœ‰ç„¡ã§å¾®å¦™ã«ä½ç½®ãŒå¤‰ã‚る)
+\scsnowmandefault{scale=4,hat=Green,arms=Brown,snow=SkyBlue}%
+\scsnowman[buttons=RoyalBlue,muffler=Red]%
+\scsnowman[buttons=RoyalBlue]%
+% mouthshape ã§ã€Œå£ã®å½¢ã€
+\scsnowmandefault{scale=4,hat,muffler=Red}%
+\scsnowman[mouthshape=smile]% ã«ã£ã“ã‚Š
+\scsnowman[mouthshape=frown]% ã—ã‹ã‚ã£é¢
+\scsnowman[mouthshape=tight]% 真一文字
+% sweat ã§ã€Œæ±—ã€
+\scsnowmandefault{scale=4,hat}%
+\scsnowman[mouthshape=tight,arms,buttons,sweat]
+
+ゆãã ã‚‹ã¾ã§ç®‡æ¡æ›¸ã:
+\makeitemsnowman
+\begin{itemize}
+ \item 動物
+ \begin{itemize}
+ \item 哺乳類
+ \item 鳥類
+ \item …
+ \end{itemize}
+ \item æ¤ç‰©
+ \begin{itemize}
+ \item 裸å­æ¤ç‰©
+ \item 被å­æ¤ç‰©
+ \begin{itemize}
+ \item å˜å­è‘‰é¡ž
+ \item åŒå­è‘‰é¡ž
+ \begin{itemize}
+ \item åˆå¼èŠ±é¡ž
+ \item 離å¼èŠ±é¡ž
+ \end{itemize}
+ \end{itemize}
+ \end{itemize}
+\end{itemize}
+\makeitemother
+
+\medskip
+\begin{minipage}{16zw}
+ベースラインã®èª¿ç¯€ãªã—:\par
+Text,
+\scsnowman[scale=1]%
+\scsnowman[scale=4]%
+\scsnowman[scale=7],
+T.\par
+ベースラインã®èª¿ç¯€ã‚り:\par
+Text,
+\scsnowman[adjustbaseline,scale=1]%
+\scsnowman[adjustbaseline,scale=4]%
+\scsnowman[adjustbaseline,scale=7],
+T.
+\end{minipage}\quad
+\begin{minipage}<t>{12zw}
+\scsnowmandefault{}
+縦書ーãã§\scsnowman[hat,muffler=red]ã®ãƒ†ã‚¹ãƒˆã€‚
+ç§ã®å¤§å¥½ããª\scsnowman[scale=2,muffler]\scsnowman[scale=2,hat]ãŒãŸãã•ã‚“。
+{\color{red}色ãŒ\scsnowman[body]ã¤ã„ã¦ã‚‚ã€å‹¿è«–大丈夫。}
+\end{minipage}
+
+\scsnowmandefault{adjustbaseline,scale=5.5}%
+ãŠæ­£æœˆï¼š\scsnowman[eyes=false,mouth=false,mikan]%
+\scsnowman[eyes=false,mouth=false,mikan=DarkOrange,leaf=DarkOliveGreen]
+
+The World Day of Snowman:
+\scsnowman[muffler=Red,arms=Brown,buttons=Green,broom=DarkGoldenrod]
+\scsnowman[body,muffler=Red,arms=Brown,nose=Orange]
+
+\end{document}
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman-zrtest.pdf b/graphics/pgf/contrib/scsnowman/scsnowman-zrtest.pdf
new file mode 100644
index 0000000000..7967d13b75
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman-zrtest.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman-zrtest.tex b/graphics/pgf/contrib/scsnowman/scsnowman-zrtest.tex
new file mode 100644
index 0000000000..8fa2524ecb
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman-zrtest.tex
@@ -0,0 +1,21 @@
+\documentclass[a4paper]{article}
+\usepackage[unicode,hidelinks,bookmarksnumbered]{hyperref}
+\usepackage{scsnowman}
+\scsnowmandefault{hat,arms,snow,scale=1.2,adjustbaseline}
+\renewcommand{\thesection}{\enumsnowman[muffler=red]{section}}
+\pagenumbering{enumsnowman}
+\begin{document}
+\setcounter{page}{8}
+\setcounter{section}{86}
+
+\section{Foo}\label{sec:Foo}
+Foo \scsnowmannumeral[muffler=blue]{42}.
+
+\section{Bar}\label{sec:Bar}
+Bar \scsnowmannumeral[muffler=blue]{84}.
+
+\section{Gee}\label{sec:Gee}
+Gee \scsnowmannumeral[muffler=blue]{168}.
+See also Sections \ref{sec:Bar} and \ref{sec:Foo}.
+
+\end{document}
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman.pdf b/graphics/pgf/contrib/scsnowman/scsnowman.pdf
new file mode 100644
index 0000000000..776f8f74e7
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman.sty b/graphics/pgf/contrib/scsnowman/scsnowman.sty
new file mode 100644
index 0000000000..609e7c69ce
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman.sty
@@ -0,0 +1,381 @@
+%%
+%% This is file `scsnowman.sty', part of scsnowman package.
+%% Maintained on GitHub:
+%% https://github.com/aminophen/scsnowman
+%%
+%% Copyright (c) 2015-2018 Hironobu Yamashita
+%% Email : h.y.acetaminophen[a t]gmail.com
+%% GitHub : https://github.com/aminophen
+%% Blog : http://acetaminophen.hatenablog.com/
+%% Twitter : @aminophen
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{scsnowman}[2018/06/07 v1.2d Snowman variants using TikZ]
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{sctkzsym-base}}
+\ProcessOptions\relax
+\RequirePackage{sctkzsym-base}[2017/08/08]
+%
+% make document snowman (joke)
+\ifsctkzsym@document
+\def\makedocumentsnowman{%
+ \ifx\documentclass\@notprerr
+ % Already after \begin{document}, throw an error
+ \def\sctkzsym@documentsnowman{%
+ \PackageError{scsnowman}{%
+ Use of \noexpand\makedocumentsnowman too late!\MessageBreak
+ Try using before \string\begin{document}}{%
+ I'll try to stop processing, but
+ this attempt can fail.\MessageBreak\@ehc}%
+ % If the above error is ignored, there's no way to
+ % exit successfully in all cases. So, try to continue
+ % processing by ignoring all LaTeX errors.
+ % TeX errors still remain; therefore, \makedocumentsnowman
+ % in internal vertical mode or math mode will fail.
+ \let\@latex@error\@gobbletwo\par
+ \scsnowman[init,scale=14,hat,muffler,buttons,snow]%
+ \scsnowman[init,scale=14,hat,muffler,buttons,arms]%
+ \scsnowman[init,scale=14,body,hat,muffler,buttons,snow]%
+ \end{document}}%
+ \else\ifx\documentclass\@twoclasseserror
+ \ifx\AtBeginDocument\@firstofone
+ % In preamble, inside \AtBeginDocument; avoid infinite loop
+ \def\sctkzsym@documentsnowman{%
+ \centering
+ \scsnowman[init,scale=14,hat,muffler,buttons,snow]%
+ \scsnowman[init,scale=14,hat,muffler,buttons,arms]%
+ \scsnowman[init,scale=14,body,hat,muffler,buttons,snow]%
+ \end{document}}%
+ \else
+ % In preamble; start document
+ \def\sctkzsym@documentsnowman{%
+ \pagestyle{empty}%
+ \begin{document}%
+ \centering
+ \scsnowman[init,scale=14,hat,muffler,buttons,snow]%
+ \scsnowman[init,scale=14,hat,muffler,buttons,arms]%
+ \scsnowman[init,scale=14,body,hat,muffler,buttons,snow]%
+ \end{document}}%
+ \fi
+ \else
+ % Before \documentclass{...}; load class and start document
+ \def\sctkzsym@documentsnowman{%
+ \documentclass{minimal}%
+ \begin{document}%
+ \centering
+ \scsnowman[init,scale=18,hat,muffler,buttons,snow]%
+ \scsnowman[init,scale=18,hat,muffler,buttons,arms]%
+ \scsnowman[init,scale=18,body,hat,muffler,buttons,snow]%
+ \end{document}}%
+ \fi\fi
+ \sctkzsym@documentsnowman
+}
+\fi
+%
+% change QED symbol (joke)
+\ifsctkzsym@qed
+ \def\sctkzsym@snowman@qedsymbol{\scsnowman[init,hat=true,muffler=red]}
+ \newcommand{\makeqedsnowman}{%
+ \ifx\qedsymbol\sctkzsym@snowman@qedsymbol\else
+ \let\sctkzsym@saved@qedsymbol\qedsymbol
+ \let\qedsymbol\sctkzsym@snowman@qedsymbol
+ \fi
+ }
+\fi
+%
+% change item label (joke)
+\ifsctkzsym@item
+ \def\sctkzsym@snowman@labelitemi{\scsnowman[init,hat=true,muffler=red]}
+ \def\sctkzsym@snowman@labelitemii{\scsnowman[init,hat=true,muffler=blue]}
+ \def\sctkzsym@snowman@labelitemiii{\scsnowman[init,hat=true,muffler=green]}
+ \def\sctkzsym@snowman@labelitemiv{\scsnowman[init,hat=true,muffler=yellow]}
+ \newcommand{\makeitemsnowman}{%
+ \ifx\labelitemi\sctkzsym@snowman@labelitemi\else
+ \let\sctkzsym@saved@labelitemi\labelitemi
+ \let\sctkzsym@saved@labelitemii\labelitemii
+ \let\sctkzsym@saved@labelitemiii\labelitemiii
+ \let\sctkzsym@saved@labelitemiv\labelitemiv
+ \let\labelitemi\sctkzsym@snowman@labelitemi
+ \let\labelitemii\sctkzsym@snowman@labelitemii
+ \let\labelitemiii\sctkzsym@snowman@labelitemiii
+ \let\labelitemiv\sctkzsym@snowman@labelitemiv
+ \fi
+ }
+\fi
+%
+%------------------------------- ZR something BEGIN
+
+% change enumerate label using \scsnowmannumeral (joke)
+% (this feature is `scsnowman'-specific, so the name-space
+% is intentionally set to \scsnowman@...)
+
+% unique token
+\def\scsnowman@end{\scsnowman@end@}
+
+\let\scsnowman@eight\relax
+
+%% \scsnowman@scan@option\CScontinue{<prologue>}
+\def\scsnowman@scan@option#1#2{%
+ \scsnowman@scan@option@a#2[]\scsnowman@end#1%
+}
+\def\scsnowman@scan@option@a#1[#2]#3\scsnowman@end#4{%
+ #4{#2}%
+}
+
+\def\enumsnowman#1#{%
+ \scsnowman@scan@option\scsnowman@enumsnowman{#1}%
+}
+\def\scsnowman@enumsnowman#1#2{%
+ \scsnowmanNumeral{#1}{\@nameuse{c@#2}}%
+}
+
+% For use with \pagenumbering.
+\def\@enumsnowman{%
+ \scsnowmanNumeral{}%
+}
+
+\def\scsnowmannumeral#1#{%
+ \scsnowman@scan@option\scsnowmanNumeral{#1}%
+}
+
+% \scsnowmanNumeral{<option>}{<number>}
+% change 8 to snowman in counters (joke)
+% (this feature is `scsnowman'-specific, so the name-space
+% is intentionally set to \scsnowman@...)
+
+% internal entry point
+\newcommand*\scsnowmanNumeral[2]{%
+ \expandafter\scsnowman@@numeral\number#2\relax\scsnowman@end{#1}%
+}
+\def\scsnowman@@numeral#1\relax#2\scsnowman@end#3{%
+ \scsnowman@numeral{#3}{#1}%
+}
+\DeclareRobustCommand*\scsnowman@numeral[2]{%
+ \begingroup
+ \def\scsnowman@eight{\scsnowman[#1]}%
+ \scsnowman@numeral@a#28\scsnowman@end
+ \endgroup
+}
+\def\scsnowman@numeral@a#18#2\scsnowman@end{%
+ \ifx\scsnowman@end#2\scsnowman@end
+ #1%
+ \else
+ #1\scsnowman@eight
+ \scsnowman@numeral@a#2\scsnowman@end
+ \fi
+}
+
+\providecommand*\pdfstringdefPreHook{}
+\g@addto@macro\pdfstringdefPreHook{%
+ \let\scsnowman@eight\scsnowman@hy@eight
+ \let\scsnowman@numeral\scsnowman@hy@numeral
+}
+\def\scsnowman@hy@numeral#1#2{% #1 is ignored
+ \scsnowman@numeral@a#28\scsnowman@end
+}
+
+\DeclareTextCommand{\scsnowman@hy@eight}{PU}{\9046\003}% U+2603
+\DeclareTextCommand{\scsnowman@hy@eight}{PD1}{8}%fallback
+\ifx\forcecjktoken\@undefined\else %upTeX
+ \begingroup
+ \kansujichar8="2603
+ \xdef\scsnowman@hy@eight{\kansuji8}
+ \endgroup
+\fi
+
+%------------------------------- ZR something END
+%
+% key initialization
+\newcommand\sctkzsym@snowman@initkeys{%
+ \def\sctkzsym@snowman@init{false}%
+ \def\sctkzsym@snowman@scale{1}%
+ \def\sctkzsym@snowman@shape{normal}%
+ \def\sctkzsym@snowman@body{false}%
+ \def\sctkzsym@snowman@eyes{true}% default on
+ \def\sctkzsym@snowman@nose{false}%
+ \def\sctkzsym@snowman@mouthshape{smile}%
+ \def\sctkzsym@snowman@mouth{true}% default on
+ \def\sctkzsym@snowman@sweat{false}%
+ \def\sctkzsym@snowman@hat{false}%
+ \def\sctkzsym@snowman@arms{false}%
+ \def\sctkzsym@snowman@muffler{false}%
+ \def\sctkzsym@snowman@buttons{false}%
+ \def\sctkzsym@snowman@snow{false}%
+ \def\sctkzsym@snowman@note{false}%
+ \def\sctkzsym@snowman@adjustbaseline{false}%
+ \def\sctkzsym@snowman@mikan{false}%
+ \def\sctkzsym@snowman@leaf{false}%
+ \def\sctkzsym@snowman@broom{false}%
+}
+\newcommand{\sctkzsym@snowman@defaultkeys}{%
+ \sctkzsym@snowman@initkeys
+}
+\sctkzsym@snowman@defaultkeys
+%
+% key definitions
+\sctkzsym@define@key@withbool{snowman}{init}
+\sctkzsym@define@key@wodefault{snowman}{scale}
+\sctkzsym@define@key@wodefault{snowman}{shape}
+\sctkzsym@define@key@withbool{snowman}{body}
+\sctkzsym@define@key@withbool{snowman}{eyes}
+\sctkzsym@define@key@withbool{snowman}{nose}
+\sctkzsym@define@key@withword{snowman}{mouthshape}{smile,frown,tight}
+\sctkzsym@define@key@withbool{snowman}{mouth}
+\sctkzsym@define@key@withbool{snowman}{sweat}
+\sctkzsym@define@key@withbool{snowman}{hat}
+\sctkzsym@define@key@withbool{snowman}{arms}
+\sctkzsym@define@key@withbool{snowman}{muffler}
+\sctkzsym@define@key@withbool{snowman}{buttons}
+\sctkzsym@define@key@withbool{snowman}{snow}
+\sctkzsym@define@key@withbool{snowman}{note}
+\sctkzsym@define@key@withbool{snowman}{adjustbaseline}
+\sctkzsym@define@key@withbool{snowman}{mikan}
+\sctkzsym@define@key@withbool{snowman}{leaf}
+\sctkzsym@define@key@withbool{snowman}{broom}
+%
+% definition of \scsnowman[...]
+\DeclareRobustCommand\scsnowman[1][]{%
+ % key initialization using default
+ \sctkzsym@snowman@defaultkeys
+ % read <key>=<value>
+ \setkeys{sctkzsym@snowman}{#1}%
+ % check init; if init=true, initialize and read keys again
+ \sctkzsym@hndl@key@onlybool{snowman}{init}%
+ \ifsctkzsym@snowman@init
+ \sctkzsym@snowman@initkeys
+ \setkeys{sctkzsym@snowman}{#1,init=false}%
+ \fi
+ %
+ % check body; determine whether "black snowman" or "white snowman"
+ \sctkzsym@hndl@key@withbool{snowman}{body}%
+ \ifsctkzsym@snowman@body % "black snowman"; black snow; white eyes/mouth/stroke
+ \def\sctkzsym@snowman@bodystroke{\sctkzsym@snowman@body}%
+ \def\sctkzsym@snowman@bodyfill{\sctkzsym@snowman@body}%
+ \def\sctkzsym@snowman@bodypath{\path[draw=\sctkzsym@snowman@bodystroke,fill=\sctkzsym@snowman@bodyfill]}%
+ \def\sctkzsym@snowman@snowstroke{\sctkzsym@snowman@snow}%
+ \def\sctkzsym@snowman@snowfill{\sctkzsym@snowman@snow}%
+ \def\sctkzsym@snowman@snowpath{\path[draw=\sctkzsym@snowman@snowstroke,fill=\sctkzsym@snowman@snowfill]}%
+ \def\sctkzsym@snowman@eyefill{\sctkzsym@defaultanticolor}%
+ \def\sctkzsym@snowman@nosestroke{\sctkzsym@defaultanticolor}%
+ \def\sctkzsym@snowman@nosefill{\sctkzsym@snowman@nose}%
+ \def\sctkzsym@snowman@mouthstroke{\sctkzsym@defaultanticolor}%
+ \def\sctkzsym@snowman@sweatstroke{\sctkzsym@defaultanticolor}%
+ \def\sctkzsym@snowman@sweatfill{\sctkzsym@snowman@sweat}%
+ \def\sctkzsym@snowman@mufflerstroke{\sctkzsym@defaultanticolor}%
+ \def\sctkzsym@snowman@mufflerfill{\sctkzsym@snowman@muffler}%
+ \def\sctkzsym@snowman@buttonstroke{\sctkzsym@defaultanticolor}%
+ \def\sctkzsym@snowman@buttonfill{\sctkzsym@snowman@buttons}%
+ \else % "white snowman"; white snow; black eyes/mouth/stroke; bodystroke should be there
+ \def\sctkzsym@snowman@bodystroke{\sctkzsym@defaultcolor}%
+ \def\sctkzsym@snowman@bodyfill{}%
+ \def\sctkzsym@snowman@bodypath{\path[draw=\sctkzsym@snowman@bodystroke]}%
+ \def\sctkzsym@snowman@snowstroke{\sctkzsym@snowman@snow}%
+ \def\sctkzsym@snowman@snowfill{}%
+ \def\sctkzsym@snowman@snowpath{\path[draw=\sctkzsym@snowman@snowstroke]}%
+ \def\sctkzsym@snowman@eyefill{\sctkzsym@defaultcolor}%
+ \def\sctkzsym@snowman@nosestroke{\sctkzsym@snowman@nose}%
+ \def\sctkzsym@snowman@nosefill{\sctkzsym@snowman@nose}%
+ \def\sctkzsym@snowman@mouthstroke{\sctkzsym@defaultcolor}%
+ \def\sctkzsym@snowman@sweatstroke{\sctkzsym@snowman@sweat}%
+ \def\sctkzsym@snowman@sweatfill{\sctkzsym@defaultanticolor}%
+ \def\sctkzsym@snowman@mufflerstroke{\sctkzsym@snowman@muffler}%
+ \def\sctkzsym@snowman@mufflerfill{\sctkzsym@snowman@muffler}%
+ \def\sctkzsym@snowman@buttonstroke{\sctkzsym@snowman@buttons}%
+ \def\sctkzsym@snowman@buttonfill{\sctkzsym@snowman@buttons}%
+ \fi
+ % check eyes (currently eyes=<color> not supported; falling back to default-(anti)color)
+ \sctkzsym@hndl@key@withbool{snowman}{eyes}%
+ \def\sctkzsym@snowman@eyepath{\path[fill=\sctkzsym@snowman@eyefill]}%
+ % check nose
+ \sctkzsym@hndl@key@withbool{snowman}{nose}%
+ \def\sctkzsym@snowman@nosepath{\path[draw=\sctkzsym@snowman@nosestroke,fill=\sctkzsym@snowman@nosefill]}%
+ % check mouth (currently mouth=<color> not supported; falling back to default-(anti)color)
+ \sctkzsym@hndl@key@withword{snowman}{mouthshape}%
+ \sctkzsym@hndl@key@withbool{snowman}{mouth}%
+ \def\sctkzsym@snowman@mouthpath{\path[draw=\sctkzsym@snowman@mouthstroke]}%
+ % check sweat
+ \sctkzsym@hndl@key@withbool{snowman}{sweat}%
+ \def\sctkzsym@snowman@sweatpath{\path[draw=\sctkzsym@snowman@sweatstroke,fill=\sctkzsym@snowman@sweatfill]}%
+ % check hat
+ \sctkzsym@hndl@key@withbool{snowman}{hat}%
+ \def\sctkzsym@snowman@hatstroke{\sctkzsym@snowman@hat}%
+ \def\sctkzsym@snowman@hatfill{\sctkzsym@snowman@hat}%
+ \def\sctkzsym@snowman@hatpath{\path[draw=\sctkzsym@snowman@hatstroke,fill=\sctkzsym@snowman@hatfill]}%
+ % check arms
+ \sctkzsym@hndl@key@withbool{snowman}{arms}%
+ \def\sctkzsym@snowman@armsstroke{\sctkzsym@snowman@arms}%
+ \def\sctkzsym@snowman@armsfill{\sctkzsym@snowman@arms}%
+ \def\sctkzsym@snowman@armspath{\path[draw=\sctkzsym@snowman@armsstroke,fill=\sctkzsym@snowman@armsfill]}%
+ % check muffler
+ \sctkzsym@hndl@key@withbool{snowman}{muffler}%
+ \def\sctkzsym@snowman@mufflerpath{\path[draw=\sctkzsym@snowman@mufflerstroke,fill=\sctkzsym@snowman@mufflerfill]}%
+ % check buttons
+ \sctkzsym@hndl@key@withbool{snowman}{buttons}%
+ \def\sctkzsym@snowman@buttonpath{\path[draw=\sctkzsym@snowman@buttonstroke,fill=\sctkzsym@snowman@buttonfill]}%
+ % check snow
+ \sctkzsym@hndl@key@withbool{snowman}{snow}%
+ % check note
+ \sctkzsym@hndl@key@withbool{snowman}{note}%
+ \def\sctkzsym@snowman@notefill{\sctkzsym@snowman@note}%
+ \def\sctkzsym@snowman@notepath{\path[fill=\sctkzsym@snowman@notefill]}%
+ % check adjustbaseline
+ \sctkzsym@hndl@key@onlybool{snowman}{adjustbaseline}%
+ % check mikan/leaf
+ \sctkzsym@hndl@key@withbool{snowman}{mikan}%
+ \sctkzsym@hndl@key@withbool{snowman}{leaf}%
+ \def\sctkzsym@snowman@mikanstroke{\sctkzsym@snowman@mikan}%
+ \def\sctkzsym@snowman@mikanfill{\sctkzsym@snowman@mikan}%
+ \def\sctkzsym@snowman@mikanpath{\path[draw=\sctkzsym@snowman@mikanstroke,fill=\sctkzsym@snowman@mikanfill]}%
+ \def\sctkzsym@snowman@leafstroke{\sctkzsym@snowman@leaf}%
+ \def\sctkzsym@snowman@leaffill{\sctkzsym@snowman@leaf}%
+ \def\sctkzsym@snowman@leafpath{\path[draw=\sctkzsym@snowman@leafstroke,fill=\sctkzsym@snowman@leaffill]}%
+ % check broom
+ \sctkzsym@hndl@key@withbool{snowman}{broom}%
+ \def\sctkzsym@snowman@broomstroke{\sctkzsym@snowman@broom}%
+ \def\sctkzsym@snowman@broompath{\path[draw=\sctkzsym@snowman@broomstroke]}%
+ %
+ % drawing snowman
+ \set@sctkzsym@coord@scl{\sctkzsym@snowman@scale}%
+ \ifdim\sctkzsym@coord@scl<\z@\set@sctkzsym@coord@scl{-\sctkzsym@snowman@scale}\fi%
+ %
+ %%%%% input from def file
+ %
+ \expandafter\ifx\csname sctkzsym@snowman@shape@\sctkzsym@snowman@shape\endcsname\relax
+ \PackageError{scsnowman}{%
+ Unsupported value `\sctkzsym@snowman@shape' for shape}\@ehc
+ \else
+ \csname sctkzsym@snowman@shape@\sctkzsym@snowman@shape\endcsname
+ \fi
+ %
+ %%%%%
+ %
+ % key initialization using default
+ \sctkzsym@snowman@defaultkeys
+}
+%
+% definition of \scsnowmandefault{...}
+\newcommand{\scsnowmandefault}[1]{%
+ \renewcommand{\sctkzsym@snowman@defaultkeys}{%
+ % key initialization
+ \sctkzsym@snowman@initkeys
+ % read <key>=<value> (init=true is silently ignored)
+ \setkeys{sctkzsym@snowman}{#1,init=false}%
+ }%
+ \sctkzsym@snowman@defaultkeys
+}
+%
+% definition of \usescsnowmanlibrary{...}
+\newcommand{\usescsnowmanlibrary}[1]{%
+ \edef\@tempa{\zap@space#1 \@empty}%
+ \@for\@tempa:=\@tempa\do{%
+ \chardef\sctkzsym@catcode=\catcode`\@\relax
+ \makeatletter\input{scsnowman-\@tempa.def}%
+ \catcode`\@=\sctkzsym@catcode\relax}%
+}
+\@onlypreamble\usescsnowmanlibrary
+%
+% load shape definitions
+\usescsnowmanlibrary{normal}% default
+%
+\endinput
+%%
+%% End of file `scsnowman.sty'.
diff --git a/graphics/pgf/contrib/scsnowman/scsnowman.tex b/graphics/pgf/contrib/scsnowman/scsnowman.tex
new file mode 100644
index 0000000000..c48931c6cd
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/scsnowman.tex
@@ -0,0 +1,485 @@
+%%
+%% This is the documentation of scsnowman package.
+%% (Last Update: 2018/01/15)
+%% Maintained on GitHub:
+%% https://github.com/aminophen/scsnowman
+%%
+%% Copyright (c) 2015-2018 Hironobu Yamashita
+%% Email : h.y.acetaminophen[a t]gmail.com
+%% GitHub : https://github.com/aminophen
+%% Blog : http://acetaminophen.hatenablog.com/
+%% Twitter : @aminophen
+%%
+\documentclass[a4paper]{article}
+\usepackage{doc}
+\usepackage[svgnames]{xcolor}
+\usepackage{scsnowman}
+\pagenumbering{enumsnowman}
+\GetFileInfo{scsnowman.sty}
+\usepackage{array}
+\usepackage{amsthm}
+\usepackage{luatexja}
+\usepackage{luatexja-fontspec}
+\def\BigSnowman#1{\fontsize{60pt}{60pt}\selectfont\symbol{"#1}}
+\newjfontfamily\fipam{IPAexMincho}
+\newjfontfamily\fhrgnm{HiraMinProN-W3}
+\newjfontfamily\fkozm{KozMinPr6N-Regular}
+\newjfontfamily\fmsmin{MS-Mincho}
+\newjfontfamily\fvlgo{VLGothic}
+\usepackage{hyperref}
+% documentation
+\newtheorem{theorem}{Theorem}
+% misc
+\def\Lpack#1{\textsf{#1}}
+\def\Lopt#1{\texttt{#1}}
+% scsnowman in title
+\scsnowmandefault{adjustbaseline,scale=2,hat=Green,buttons=RoyalBlue}
+\def\scsnowmanleft{\scsnowman[arms=Brown,muffler=Red]}
+\def\scsnowmanright{\scsnowman[snow=SkyBlue]}
+\title{\scsnowmanleft\ The \Lpack{scsnowman} package \fileversion\ \scsnowmanright}
+\author{Hironobu Yamashita}
+\date{\filedate}
+\begin{document}
+
+\maketitle
+\scsnowmandefault{}
+
+The \LaTeX\ package \Lpack{scsnowman} provides a command \verb+\scsnowman+, which can display
+many variants of snowmen. This package utilizes Ti\emph{k}Z for drawing snowmen.
+\begin{figure}[htb]\centering
+\scsnowmandefault{adjustbaseline}
+\scsnowman[scale=5,hat,snow,arms]\scsnowman[scale=5,hat=RoyalBlue,muffler=Green]
+\scsnowman[scale=2]\scsnowman[scale=5]\scsnowman[scale=7]\par
+\scsnowmandefault{scale=6,hat,muffler=Red}
+\scsnowman[mouthshape=smile]
+\scsnowman[mouthshape=frown]
+\scsnowman[mouthshape=tight]
+\scsnowman[mouthshape=tight,arms,buttons,sweat]\\[2ex]
+\scsnowmandefault{scale=5}
+\begin{tabular}{ccc}
+ \texttt{U+2603} & \texttt{U+26C4} & \texttt{U+26C7} \\
+ \texttt{SNOWMAN} & \texttt{SNOWMAN WITHOUT SNOW} & \texttt{BLACK SNOWMAN} \\
+ \scsnowman[body=false,snow=true] & \scsnowman[body=false,snow=false] & \scsnowman[body=true,snow=true]
+\end{tabular}
+\end{figure}
+
+The package is maintained on GitHub:
+\begin{itemize}
+\item \url{https://github.com/aminophen/scsnowman}
+\end{itemize}
+
+\begin{figure}[htb]\centering
+\scsnowmandefault{adjustbaseline,scale=8,buttons=RoyalBlue}
+\scsnowman[hat=Green,muffler=Red,arms=Brown,buttons=Green,broom=DarkGoldenrod]
+\scsnowman[hat=Green,body,muffler=Red,arms=Brown,nose=Orange,snow=SkyBlue]
+\scsnowman[snow=SkyBlue,note=Red]
+\scsnowman[hat=Green,muffler=RoyalBlue,arms=Brown,buttons=Green,broom=DarkGoldenrod]
+\end{figure}
+
+\clearpage
+\tableofcontents\clearpage
+
+\section{The History of Snowman in Unicode}
+
+In October 1991, the first volume of the Unicode standard was published. Since then,
+there was a code point assigned to a character ``snowman''; \verb:U+2603:.
+\begin{quote}
+ \verb:U+2603 SNOWMAN:\\
+ = snowy weather
+\end{quote}
+It seems that the shape of its reference glyph in Unicode 1.0.0 was taken from ``Ryumin'',
+which was developed by Morisawa (a famous font vendor in Japan).
+\begin{figure}
+%\includegraphics[width=0.3\textwidth]{}
+\end{figure}
+A few years later, the reference glyph has sometimes been changed to another; however,
+there had been only one ``snowman'' in Unicode until 2009.
+\begin{figure}
+%\includegraphics[width=0.3\textwidth]{}
+\end{figure}
+
+In October 2009, Unicode 5.2 was published. In this volume, two ``snowman'' code points
+were added; \verb:U+26C4: and \verb:U+26C7:.
+\begin{quote}
+ \verb:U+26C4 SNOWMAN WITHOUT SNOW:\\
+ = light snow\\
+ \verb:U+26C7 BLACK SNOWMAN:\\
+ = heavy snow
+\end{quote}
+According to the code chart, the origin of these two characters is ARIB STD-B24
+(Data Coding and Transmission Specification for Digital Broadcasting;\footnote{%
+\url{http://www.arib.or.jp/tyosakenkyu/kikaku_hoso/hoso_std-b024.html}; Abstract in PDF format
+(both \href{http://www.arib.or.jp/tyosakenkyu/kikaku_sample/sample-std-b24-1-6.3.pdf}{Japanese}
+and \href{http://www.arib.or.jp/english/html/overview/doc/6-STD-B24v5_2-1p3-E1.pdf}{English}) are
+available.}), which was established by Association of Radio Industries and Business in
+Japan. Since then, it can be said that the old code point \verb:U+2603: has been given
+an implicit meaning of ``\verb:SNOWMAN WITH SNOW:''. The reference glyphs were also changed
+at that time.
+\begin{figure}
+%\includegraphics[width=0.3\textwidth]{}
+\end{figure}
+
+\section{Variation of Snowman among Actual Fonts}
+
+Since the shapes of the reference glyphs used in the Unicode code charts are not
+prescriptive, the actual fonts have a wide variety of glyph designs. However, when it
+comes to snowmen, the variation between fonts is enormous. This variation is very
+interesting, however, on the other hand, problematic.
+
+Table \ref{table:actualfonts} shows the variety of ``snowman'' in actual fonts.
+\begin{table}[tbp]
+\caption{The variety of ``snowman'' in actual fonts}\label{table:actualfonts}
+\setlength{\extrarowheight}{50pt}%
+\centering
+\begin{tabular}{cccc}
+\hline
+ & \raisebox{2ex}{\Large\texttt{U+2603}} & \raisebox{2ex}{\Large\texttt{U+26C4}} & \raisebox{2ex}{\Large\texttt{U+26C7}} \\ \hline
+\raisebox{4ex}{\fipam IPAex明æœ} & {\fipam \BigSnowman{2603}} & & \\
+\raisebox{4ex}{\fmsmin ï¼­ï¼³ 明æœ} & {\fmsmin \BigSnowman{2603}} & & \\
+\raisebox{4ex}{\fkozm å°å¡šæ˜Žæœ Pr6N Regular} & {\fkozm \BigSnowman{2603}} & & \\
+\raisebox{4ex}{\fhrgnm ãƒ’ãƒ©ã‚®ãƒŽæ˜Žæœ ProN W3} & {\fhrgnm \BigSnowman{2603}} & & \\
+\raisebox{4ex}{\fvlgo VLゴシック} & {\fvlgo \BigSnowman{2603}} & {\fvlgo \BigSnowman{26C4}} & {\fvlgo \BigSnowman{26C7}} \\
+\hline
+\end{tabular}
+\end{table}
+The snowman in ``IPA Mincho (IPA明æœ)'' from Information-technology Promotion Agency is very similar
+to the one in ``Ryumin (リュウミン)'' from Morisawa. However, in ``MS Mincho (ï¼­ï¼³ 明æœ)'' from Microsoft,
+the snowman wears a black hat instead of white one. In ``Kozuka Mincho (å°å¡šæ˜Žæœ)'' from Adobe Systems Inc.,
+he/she wears a muffler instead of a hat. Moreover, it doesn't snow in ``Hiragino Mincho (ヒラギノ明æœ)'' from
+SCREEN Graphic and Precision Solutions Co., Ltd. It is natural that some fonts developed before 2009 have
+a ``snowman without snow'' glyph in the code point \verb:U+2603:, however, it can be a problem when we
+have to transfer the exact information to others.
+
+\section{Introduction to \Lpack{scsnowman} Package}
+
+The \LaTeX\ package \Lpack{scsnowman} provides a command \verb+\scsnowman+, which can
+display many variants of snowmen. This package depends on Ti\emph{k}Z package for drawing
+snowman images.
+
+To use this package, load it in preamble:
+\begin{quote}\begin{verbatim}
+\usepackage{scsnowman}
+\end{verbatim}\end{quote}
+In the main document, use \verb+\scsnowman+ command to print a snowman: \scsnowman.
+By default, the snowman is ``plain'' style, without any decoration such as snow, a hat or
+a muffler.
+
+\section{Command Options}
+
+You can customize the style of a snowman using the optional argument. The syntax is
+\begin{quote}
+\verb+\scsnowman[+\emph{$\langle$key-value list$\rangle$}\verb+]+
+\end{quote}
+
+\subsection{Scaling and Adjustment Options}
+
+The following \emph{key}s are available:
+\begin{quote}
+ \Lopt{scale}, \Lopt{adjustbaseline}
+\end{quote}
+The key \Lopt{scale} takes a scale factor. The origin of scaling is set at the lower
+left corner of the bounding box. For example, \verb+\scsnowman+,
+\verb+\scsnowman[scale=3]+ and \verb+\scsnowman[scale=5]+ give:
+\begin{quote}\begin{minipage}{.9\textwidth}
+\scsnowman\scsnowman[scale=3]\scsnowman[scale=5]\quad
+with visualized bounding boxes:
+\fboxsep0pt\fbox{\scsnowman}\fbox{\scsnowman[scale=3]}\fbox{\scsnowman[scale=5]}
+\end{minipage}\end{quote}
+When the key \Lopt{adjustbaseline} is specified (or, \Lopt{adjustbaseline=true}),
+the base line of the in-line snowman will be adjusted to that of the surrounding texts.
+This will be helpful when a snowman appears to be ``floating in the air.''\\[1ex]
+\begin{minipage}{.55\textwidth}\begin{verbatim}
+ Text,
+ \scsnowman[scale=1]%
+ \scsnowman[scale=4]%
+ \scsnowman[scale=7],
+ T.\par
+ Text,
+ \scsnowman[adjustbaseline,scale=1]%
+ \scsnowman[adjustbaseline,scale=4]%
+ \scsnowman[adjustbaseline,scale=7],
+ T.
+\end{verbatim}\end{minipage}
+\begin{minipage}{.4\textwidth}
+ Text,
+ \scsnowman[scale=1]%
+ \scsnowman[scale=4]%
+ \scsnowman[scale=7],
+ T.\par
+ Text,
+ \scsnowman[adjustbaseline,scale=1]%
+ \scsnowman[adjustbaseline,scale=4]%
+ \scsnowman[adjustbaseline,scale=7],
+ T.
+\end{minipage}
+
+\subsection{Design Options}
+
+Following \emph{key}s take a \emph{value} which specifies color. When the \emph{value} is omitted,
+it reacts to the surrounding text color:
+\begin{quote}
+ \Lopt{body}, \Lopt{eyes}, \Lopt{mouth}, \Lopt{nose}, \Lopt{sweat}, \Lopt{arms},
+ \Lopt{hat}, \Lopt{muffler}, \Lopt{buttons}, \Lopt{snow}, \Lopt{note}, \Lopt{broom}
+\end{quote}
+The following \emph{key}s require one specific \emph{value}:
+\begin{quote}
+ \Lopt{shape}, \Lopt{mouthshape}
+\end{quote}
+
+The key \Lopt{shape} specifies the outline shape of the snowman body.
+Currently, only \Lopt{shape=normal} is officially available, but you can define and use other shapes
+using \verb+\usescsnowmanlibrary+ command (described later, section \ref{usescsnowmanlibrary}).
+
+The key \Lopt{mouthshape} takes one of the followings: \Lopt{smile}, \Lopt{tight} or \Lopt{frown}.
+
+Here are some examples:\\[1ex]
+\begin{minipage}{.7\textwidth}\begin{verbatim}
+ \scsnowman[scale=2,body,hat=red,muffler=blue]
+ \scsnowman[scale=3,hat,snow,arms,buttons,note]
+ \scsnowman[scale=2,muffler=red,arms,broom=brown]
+ \scsnowman[scale=2,mouthshape=frown,hat=green]
+\end{verbatim}\end{minipage}
+\begin{minipage}{.25\textwidth}
+ \scsnowman[scale=2,body,hat=red,muffler=blue]
+ \scsnowman[scale=3,hat,snow,arms,buttons,note]
+ \scsnowman[scale=2,muffler=red,arms,broom=brown]
+ \scsnowman[scale=2,mouthshape=frown,hat=green]
+\end{minipage}\\[1ex]
+\begin{minipage}{.7\textwidth}\begin{verbatim}
+ {\color{blue}
+ \scsnowman[scale=2,body,hat=red,muffler=blue]
+ \scsnowman[scale=2,hat,snow,arms,buttons,note]
+ \scsnowman[scale=3,muffler=red,arms,broom=brown]
+ \scsnowman[scale=2,mouthshape=frown,hat=green]}
+\end{verbatim}\end{minipage}
+\begin{minipage}{.25\textwidth}
+ {\color{blue}
+ \scsnowman[scale=2,body,hat=red,muffler=blue]
+ \scsnowman[scale=2,hat,snow,arms,buttons,note]
+ \scsnowman[scale=3,muffler=red,arms,broom=brown]
+ \scsnowman[scale=2,mouthshape=frown,hat=green]}
+\end{minipage}
+
+\section{Changing the Default}
+
+The package default is the ``plain'' style snowman. This default can be changed by using
+\verb+\scsnowmandefault+ command. The syntax is
+\begin{quote}
+\verb+\scsnowmandefault{+\emph{$\langle$key-value list$\rangle$}\verb+}+
+\end{quote}
+The available \emph{key}s are the same as those in \verb+\scsnowman+.
+
+Here are some examples:\\[1ex]
+\begin{minipage}{.6\textwidth}\begin{verbatim}
+ \scsnowmandefault{scale=5,hat=red}
+ \scsnowman
+ \scsnowman[body,muffler=blue,arms]
+ \scsnowman[hat=green,snow,nose=orange]
+\end{verbatim}\end{minipage}
+\begin{minipage}{.35\textwidth}
+ \scsnowmandefault{scale=5,hat=red}
+ \scsnowman
+ \scsnowman[body,muffler=blue,arms]
+ \scsnowman[hat=green,snow,nose=orange]
+\end{minipage}
+
+\section{Adding User-defined Snowman Shapes}\label{usescsnowmanlibrary}
+
+Any users can define and use custom snowman shape definitions.
+Here is a description of adding a shape named \Lopt{myfavorite}.
+\begin{enumerate}
+ \item Prepare a snowman definition file \texttt{scsnowman-myfavorite.def}
+ and put it into \verb+$TEXMF+ tree (e.g. \verb+texmf-local/tex/latex/scsnowman/+).
+ For the format of snowman definition files, please refer to \texttt{scsnowman-normal.def}.
+ \item Use \verb+\usescsnowmanlibrary+ command (don't forget \emph{sc}!) to load it.
+\begin{verbatim}
+ \usepackage{scsnowman}
+ \usescsnowmanlibrary{myfavorite}
+\end{verbatim}
+ \item You can use the shape by \verb+\scsnowman[shape=myfavorite]+ command.
+\end{enumerate}
+If you have created a fancy snowman, please contact me, so that I can incorporate it
+into the official release!
+
+\section{Funny Usages}
+
+\subsection{Changing Item Labels and QED Symbols}
+
+For those who want more snowmen in the documents, currently \Lpack{scsnowman} provides
+the following additional commands:
+\begin{quote}
+\verb+\makeitemsnowman+:\\
+ \makeitemsnowman
+ Change item labels in \Lopt{itemize} environment to snowmen
+ {\labelitemi\labelitemii\labelitemiii\labelitemiv}.
+ \makeitemother
+ The command \verb+\makeitemother+ restores the default,
+ usually {\labelitemi\labelitemii\labelitemiii\labelitemiv}.\par
+\verb+\makeqedsnowman+:\\
+ \makeqedsnowman
+ Change the QED symbol in \Lopt{proof} environment to a snowman {\qedsymbol}.
+ The package \Lpack{amsthm} is required.
+ \makeqedother
+ The command \verb+\makeqedother+ restores the default, usually {\qedsymbol}.
+\end{quote}
+These commands can be used wherever you want, and are effective within the current group.
+
+Here are some examples:\\[1ex]
+\begin{minipage}{.5\textwidth}\begin{verbatim}
+ \begin{itemize}
+ \makeitemsnowman
+ \item Foo X.
+ \begin{itemize}
+ \item Bar A.
+ \begin{itemize}
+ \item Baz P. \item Baz Q.
+ \end{itemize}
+ \item Bar B. \item Bar C.
+ \end{itemize}
+ \end{itemize}
+\end{verbatim}\end{minipage}
+\begin{minipage}{.45\textwidth}
+ \begin{itemize}
+ \makeitemsnowman
+ \item Foo X.
+ \begin{itemize}
+ \item Bar A.
+ \begin{itemize}
+ \item Baz P. \item Baz Q.
+ \end{itemize}
+ \item Bar B. \item Bar C.
+ \end{itemize}
+ \end{itemize}
+\end{minipage}\\[1ex]
+\begin{minipage}{.55\textwidth}\begin{verbatim}
+ \makeqedsnowman
+ \begin{theorem}
+ Given two line segments whose
+ lengths are $a$ and $b$ respectively,
+ there is a real number $r$ such that
+ $b=ra$.
+ \end{theorem}
+ \begin{proof}
+ To prove it by contradiction try and
+ asuume that the statement is false,
+ proceed from there and at some point
+ you will arrive to a contradiction.
+ \end{proof}
+\end{verbatim}\end{minipage}
+\begin{minipage}{.45\textwidth}
+ \makeqedsnowman
+ \begin{theorem}
+ Given two line segments whose
+ lengths are $a$ and $b$ respectively,
+ there is a real number $r$ such that
+ $b=ra$.
+ \end{theorem}
+ \begin{proof}
+ To prove it by contradiction try and
+ asuume that the statement is false,
+ proceed from there and at some point
+ you will arrive to a contradiction.
+ \end{proof}
+\end{minipage}\medskip
+
+The names of these commands are, of course, named after the \LaTeX\ \verb+\makeatletter+
+and \verb+\makeatother+;-)
+
+\subsection{Drawing ``\emph{Kagami-mochi}''}
+
+Using \Lpack{scsnowman} package, you can also draw ``\emph{kagami-mochi}''
+(mirror rice cake). It is a traditional Japanese New Year decoration,
+which usually consists of two round ``\emph{mochi}'' (rice cakes), the smaller
+placed atop the larger, and a ``\emph{daidai}'' (a Japanese bitter orange)
+with an attached leaf on top.
+
+Following \emph{key}s are implemented for this usage:\footnote{Strictly speaking,
+the orange on top of rice cakes should be ``\emph{daidai}''; however,
+a ``\emph{mikan}'' is often substituted for the original ``\emph{daidai}''.}
+\begin{quote}
+ \Lopt{mikan}, \Lopt{leaf}
+\end{quote}
+The \emph{key} \Lopt{leaf} is effective only when \Lopt{mikan} is specified.
+Here is an example:\\[1ex]
+\begin{minipage}{.85\textwidth}\begin{verbatim}
+ \scsnowmandefault{scale=5.5}
+ \scsnowman[eyes=false,mouth=false,mikan=orange,leaf=green]
+\end{verbatim}\end{minipage}
+\begin{minipage}{.1\textwidth}
+ \scsnowmandefault{scale=5.5}
+ \scsnowman[eyes=false,mouth=false,mikan=orange,leaf=green]
+\end{minipage}
+
+\subsection{Replacing All ``8'' with Snowmen}
+
+You can replace all ``8'' inside an arabic number expression with snowmen
+\scsnowman\ by using \verb+\scsnowmannumeral+.
+Here is an example:\\[1ex]
+\begin{minipage}{.85\textwidth}\begin{verbatim}
+ \scsnowmandefault{adjustbaseline}\scsnowmannumeral{18882}
+ \scsnowmannumeral[muffler=blue,scale=1.5]{4283859}
+\end{verbatim}\end{minipage}
+\begin{minipage}{.1\textwidth}
+ \scsnowmandefault{adjustbaseline}\scsnowmannumeral{18882}
+ \scsnowmannumeral[muffler=blue,scale=1.5]{4283859}
+\end{minipage}\medskip
+
+You can also replace all ``8'' inside the page numbering with snowmen
+\scsnowman\ by adding \verb+\pagenumbering{enumsnowman}+.
+This documentation itself is an example!
+
+\clearpage
+
+\section*{Version History}
+
+This is the summary of changes. For more detail, see GitHub repository.
+\begin{table}[h]
+\centering
+\begin{tabular}{lll}
+Version 0.1 & 2015-12-13 & First public version on GitHub \\
+Version 0.8 & 2016-08-08 & Second public version on GitHub: \\
+ & & new variants \Lopt{buttons}, \Lopt{mouthshape}, \Lopt{sweat} are added \\
+Version 1.0 & 2016-12-22 & First CTAN release \\
+Version 1.1 & 2017-01-22 & Add a new key \Lopt{adjustbaseline} \\
+ & & Update documentation \\
+Version 1.2 & 2017-08-08 & Default color reacts to surrounding text color \\
+ & & Support vertical writing on (u)p\TeX\ and Lua\TeX-ja \\
+ & & Add a new key \Lopt{shape} \\
+ & & Add a new command \verb+\usescsnowmanlibrary+ \\
+Version 1.2a & 2017-11-25 & Fix a bug in scaling with \Lopt{adjustbaseline} \\
+Version 1.2b & 2018-01-05 & Add new keys \Lopt{mikan}, \Lopt{leaf} for drawing `kagami-mochi' \\
+ & & Stopped loading \Lpack{amsthm} by default \\
+Version 1.2c & 2018-01-15 & Add a new key \Lopt{broom} \\
+Version 1.2d & 2018-06-07 & Add new keys \Lopt{nose}, \Lopt{note} \\
+ & & Add a new command \verb+\scsnowmannumeral+ \\
+\end{tabular}
+\end{table}
+
+\begin{thebibliography}{9}
+\bibitem{NAOI1}
+\href{http://d.hatena.ne.jp/NAOI/20080623/1214211959}{雪ã ã‚‹ã¾ã®è¦ªå­é–¢ä¿‚}
+\ --- Mac OS Xã®æ–‡å­—コードå•é¡Œã«é–¢ã™ã‚‹ãƒ¡ãƒ¢
+\bibitem{NAOI2}
+\href{http://d.hatena.ne.jp/NAOI/20110707/1310031226}{ヒラギノã®é›ªã ã‚‹ã¾ã¯ã€ãªãœå¯‚ã—ãã†ãªã®ã‹}
+\ --- Mac OS Xã®æ–‡å­—コードå•é¡Œã«é–¢ã™ã‚‹ãƒ¡ãƒ¢
+\bibitem{DORA1}
+\href{http://doratex.hatenablog.jp/entry/20140327/1395878814}{ã„ã‚ã„ã‚ãªã‚†ãã ã‚‹ã¾}
+\ --- TeX Alchemist Online
+\bibitem{ACE1}
+\href{http://acetaminophen.hatenablog.com/entry/2014/09/05/090313}{「\TeX{}ã§ã‚†ãã ã‚‹ã¾ã€ã‚’ã‚‚ã£ã¨ãŸãã•ã‚“}
+\ --- Acetaminophen's diary
+\bibitem{ZR1}
+\href{http://d.hatena.ne.jp/zrbabbler/20140911/1410439004}{Unicodeã®ä¾‹ã®é›ªã ã‚‹ã¾ã¯å¤šåˆ†ã‚¢ãƒ¬}
+\ --- マクロツイーター
+\bibitem{ACE2}
+\href{http://acetaminophen.hatenablog.com/entry/2015/12/13/080226}{\TeX{}ã§ã‚†ãã ã‚‹ã¾ã‚’“もã£ã¨ã‚‚ã£ã¨â€ãŸãã•ã‚“}
+\ --- Acetaminophen's diary
+\bibitem{ACE3}
+\href{http://acetaminophen.hatenablog.com/entry/2016/08/08/080800}{å¤ã¨ã„ãˆã°ã€ã‚„ã£ã±ã‚Šã€Œã‚†ãã ã‚‹ã¾ã€ï¼}
+\ --- Acetaminophen's diary
+\bibitem{SX229957}
+\href{http://tex.stackexchange.com/questions/229957/}{How do I redefine the QED symbol to be a Unicode character?}
+\ --- \TeX\ -- \LaTeX\ Stack Exchange
+\end{thebibliography}
+
+\end{document}
diff --git a/graphics/pgf/contrib/scsnowman/sctkzsym-base.sty b/graphics/pgf/contrib/scsnowman/sctkzsym-base.sty
new file mode 100644
index 0000000000..9bb904b40f
--- /dev/null
+++ b/graphics/pgf/contrib/scsnowman/sctkzsym-base.sty
@@ -0,0 +1,150 @@
+%%
+%% This is file `sctkzsym-base.sty', part of scsnowman package.
+%% Maintained on GitHub:
+%% https://github.com/aminophen/scsnowman
+%%
+%% Copyright (c) 2015-2018 Hironobu Yamashita
+%% Email : h.y.acetaminophen[a t]gmail.com
+%% GitHub : https://github.com/aminophen
+%% Blog : http://acetaminophen.hatenablog.com/
+%% Twitter : @aminophen
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{sctkzsym-base}[2018/01/15 v1.2c Base for emoji variants using TikZ]
+\RequirePackage{tikz}
+\RequirePackage{keyval}
+%
+\ifx\kanjiskip\@undefined\else
+ \IfFileExists{pxeveryshi.sty}{\RequirePackage{pxeveryshi}}{}
+\fi
+%
+% prepare for options
+\newif\ifsctkzsym@document
+\newif\ifsctkzsym@qed
+\newif\ifsctkzsym@item
+%
+% options
+\DeclareOption{documentX}{\sctkzsym@documenttrue}
+\DeclareOption{nodocumentX}{\sctkzsym@documentfalse}
+\DeclareOption{qedX}{\sctkzsym@qedtrue}
+\DeclareOption{noqedX}{\sctkzsym@qedfalse}
+\DeclareOption{itemX}{\sctkzsym@itemtrue}
+\DeclareOption{noitemX}{\sctkzsym@itemfalse}
+\ExecuteOptions{documentX,qedX,itemX}
+\ProcessOptions\relax
+%
+% save QED symbol before change (joke)
+\ifsctkzsym@qed
+ \def\sctkzsym@saving@qedsymbol{%
+ \ifx\qedsymbol\@undefined\else
+ \let\sctkzsym@saved@qedsymbol\qedsymbol
+ \fi
+ }
+ % if `amsthm' is already loaded, save it now
+ \sctkzsym@saving@qedsymbol
+ % otherwise, saving is delayed till \begin{document}
+ % (hope \makeqed... is not already executed...)
+ \ifx\sctkzsym@saved@qedsymbol\@undefined
+ \AtBeginDocument{\sctkzsym@saving@qedsymbol}
+ \fi
+ \newcommand{\makeqedother}{%
+ \let\qedsymbol\sctkzsym@saved@qedsymbol
+ }
+\fi
+%
+% save item label before change (joke)
+\ifsctkzsym@item
+ \let\sctkzsym@saved@labelitemi\labelitemi
+ \let\sctkzsym@saved@labelitemii\labelitemii
+ \let\sctkzsym@saved@labelitemiii\labelitemiii
+ \let\sctkzsym@saved@labelitemiv\labelitemiv
+ \newcommand{\makeitemother}{%
+ \let\labelitemi\sctkzsym@saved@labelitemi
+ \let\labelitemii\sctkzsym@saved@labelitemii
+ \let\labelitemiii\sctkzsym@saved@labelitemiii
+ \let\labelitemiv\sctkzsym@saved@labelitemiv
+ }
+\fi
+%
+% key definitions
+% * any value; if none, 'true' is assumed
+\newcommand{\sctkzsym@define@key@withbool}[2]{%
+ \define@key{sctkzsym@#1}{#2}[true]{\expandafter\def\csname sctkzsym@#1@#2\endcsname{##1}}%
+ \expandafter\newif\csname ifsctkzsym@#1@#2\endcsname
+}
+% * any value; if none, an error will be raised
+\newcommand{\sctkzsym@define@key@wodefault}[2]{%
+ \define@key{sctkzsym@#1}{#2}{\expandafter\def\csname sctkzsym@#1@#2\endcsname{##1}}%
+}
+% * one from arg #3; arg #3 should be comma-separated list of candidates
+\newcommand{\sctkzsym@define@key@withword}[3]{%
+ \define@key{sctkzsym@#1}{#2}{\expandafter\def\csname sctkzsym@#1@#2\endcsname{##1}}%
+ % register known values (used in key handling)
+ \sctkzsym@hndlcnt\z@
+ \edef\@tempa{\zap@space#3 \@empty}%
+ \@for\@tempa:=\@tempa\do{%
+ \advance\sctkzsym@hndlcnt\@ne
+ \expandafter\let\csname sctkzsym@#1@#2@\romannumeral\sctkzsym@hndlcnt\endcsname\@tempa}%
+}
+% other known values (used in key handling)
+\def\sctkzsym@true{true} % for bool strcmp
+\def\sctkzsym@false{false} % for bool strcmp
+%
+% key handling
+\newcount\sctkzsym@hndlcnt % for withword loop
+\let\sctkzsym@status\relax % for withword status
+\newcommand{\sctkzsym@hndl@key@withbool}[2]{%
+ \expandafter\ifx\csname sctkzsym@#1@#2\endcsname\sctkzsym@false\relax
+ \csname sctkzsym@#1@#2false\endcsname % <key>=false
+ \else
+ \csname sctkzsym@#1@#2true\endcsname % <key>=true/<color>
+ \expandafter\ifx\csname sctkzsym@#1@#2\endcsname\sctkzsym@true\relax
+ % <key>=true; <default-color>
+ \expandafter\def\csname sctkzsym@#1@#2\endcsname{\sctkzsym@defaultcolor}%
+ \fi
+ \fi
+}
+\newcommand{\sctkzsym@hndl@key@onlybool}[2]{%
+ \expandafter\ifx\csname sctkzsym@#1@#2\endcsname\sctkzsym@false\relax
+ \csname sctkzsym@#1@#2false\endcsname % <key>=false
+ \else
+ \expandafter\ifx\csname sctkzsym@#1@#2\endcsname\sctkzsym@true\relax
+ \csname sctkzsym@#1@#2true\endcsname % <key>=true
+ \else
+ \PackageError{sc#1}{Only true/false allowed for key `#2'}\@ehc
+ \csname sctkzsym@#1@#2false\endcsname % <key>=false
+ \fi
+ \fi
+}
+\newcommand{\sctkzsym@hndl@key@withword}[2]{%
+ % initialize
+ \@tempcnta\@ne
+ \let\sctkzsym@status\relax
+ % check through the registered candidate values
+ \loop\expandafter\ifx\csname sctkzsym@#1@#2@\romannumeral\@tempcnta\endcsname\relax\else
+ \ifx\sctkzsym@status\relax
+ \expandafter\ifx\csname sctkzsym@#1@#2\expandafter\endcsname
+ \csname sctkzsym@#1@#2@\romannumeral\@tempcnta\endcsname\relax
+ \def\sctkzsym@status{0}%
+ \fi
+ \fi
+ \advance\@tempcnta\@ne
+ \repeat
+ % if the status is still not zero, user-specified value is invalid; throw an error
+ \ifx\sctkzsym@status\relax
+ \PackageError{sc#1}{Unsupported value `\csname sctkzsym@#1@#2\endcsname' for #2}\@ehc
+ \fi
+}
+%
+% setup for tikzpicture
+\newlength{\sctkzsym@coord@baseline}
+\newlength{\sctkzsym@coord@scl}
+\newcommand*{\set@sctkzsym@coord@scl}[1]{\pgfmathsetlength{\sctkzsym@coord@scl}{#1\p@}}
+\newcommand{\sctkzsym@beginyokobox}{\ifx\tate\@undefined\else\leavevmode\hbox\bgroup\yoko\fi}
+\newcommand{\sctkzsym@endyokobox}{\ifx\tate\@undefined\else\egroup\fi}
+\newcommand{\sctkzsym@defaultcolor}{}
+\newcommand{\sctkzsym@defaultanticolor}{white}
+%
+\endinput
+%%
+%% End of file `sctkzsym-base.sty'.
diff --git a/graphics/pgf/contrib/setdeck/README b/graphics/pgf/contrib/setdeck/README
new file mode 100644
index 0000000000..21dcbbc0d6
--- /dev/null
+++ b/graphics/pgf/contrib/setdeck/README
@@ -0,0 +1,42 @@
+Author: Gwyneth Whieldon
+Institution: Hood College
+Contact Email: whieldon@hood.edu or Gwyn.Whieldon@gmail.com
+
+Package Copyright 2012
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+For a copy of the GNU General Public License, see
+<http://www.gnu.org/licenses/>.
+
+
+This is a style file for drawing cards from a Set Deck using TikZ in
+LaTeX.
+
+
+We use the convention
+\setcard{<Number>}{<Shading>}{<Color>}{<Shape>}{<Scaling>}, where
+Number = 1 (1 card), 2 (2 cards), 3 (3 cards)
+Shading = 1 (plain), 2 (striped), 3 (solid)
+Color = 1 (red), 2 (green), 3 (purple)
+Shape = 1 (diamond), 2 (oval), 3 (squiggle)
+
+
+
+So for example, to typeset a full-size Set card with two striped red
+squiggles, you would use the command \setcard{2}{2}{1}{3}{1}. To
+typeset a half-sized Set card with three plain green ovals, you could
+use either the command \setcard{3}{1}{2}{2}{0.5} or
+\smallsetcard{3}{1}{2}{2}{0.5}. The only difference between the two
+commands is the thickness of the lines on the cards.
+
+The command \smallsetcard is designed to be used when displaying
+anything smaller than a half-sized card.
diff --git a/graphics/pgf/contrib/setdeck/setdeck.pdf b/graphics/pgf/contrib/setdeck/setdeck.pdf
new file mode 100644
index 0000000000..f2694d08b7
--- /dev/null
+++ b/graphics/pgf/contrib/setdeck/setdeck.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/setdeck/setdeck.sty b/graphics/pgf/contrib/setdeck/setdeck.sty
new file mode 100644
index 0000000000..0a4c976b99
--- /dev/null
+++ b/graphics/pgf/contrib/setdeck/setdeck.sty
@@ -0,0 +1,1250 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Author: Gwyneth Whieldon
+%% Institution: Hood College
+%% Contact Email: whieldon@hood.edu or Gwyn.Whieldon@gmail.com
+%%
+%% Package Copyright 2012
+%%
+%% This program is free software: you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by
+%% the Free Software Foundation, either version 3 of the License, or
+%% (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% For a copy of the GNU General Public License, see <http://www.gnu.org/licenses/>.
+%%
+%%
+%% This is the style file for drawing cards from a Set Deck using TikZ in LaTeX
+%%
+%% We use the convention \setcard{<Number>}{<Shading>}{<Color>}{<Shape>}{<Scaling>}, where
+%% Number = 1 (1 card), 2 (2 cards), 3 (3 cards)
+%% Shading = 1 (plain), 2 (striped), 3 (solid)
+%% Color = 1 (red), 2 (green), 3 (purple)
+%% Shape = 1 (diamond), 2 (oval), 3 (squiggle)
+%%
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{setdeck}
+
+
+\RequirePackage[usenames,dvipsnames]{xcolor}
+
+\RequirePackage{tikz}
+\usetikzlibrary{patterns}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% Pgf Pattern Definitions for Striped Cards
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfdeclarepatternformonly{vertical stripes}
+{\pgfpointorigin}{\pgfpoint{0.1cm}{0.1cm}}
+{\pgfpoint{0.1cm}{0.1cm}}
+{
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0.05cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0.05cm}{0.1cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{0.1cm}}
+ \pgfpathclose%
+ \pgfusepath{fill}
+}
+
+\pgfdeclarepatternformonly{thin vertical stripes}
+{\pgfpointorigin}{\pgfpoint{0.075cm}{0.1cm}}
+{\pgfpoint{0.075cm}{0.1cm}}
+{
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0.025cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0.025cm}{0.1cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{0.1cm}}
+ \pgfpathclose%
+ \pgfusepath{fill}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% Command to typeset set cards
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\setcard}[5]{
+\begin{tikzpicture}[scale=#5]
+
+%DRAWS CARD OUTLINE
+\draw[-,very thick,black!30, rounded corners](-2,-3) rectangle (2,3);
+
+%3. RED CARDS
+\ifnum#3=1
+%SINGLE CARDS
+\ifnum#1=1
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-,very thick, Red, fill=White] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-,very thick, Red,pattern = vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-,very thick, Red, fill=Red!40] (1.38,-0.2) \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%DOUBLE CARDS
+\ifnum#1=2
+
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-,very thick, Red ,fill=White] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-,very thick, Red ,fill=White] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-,very thick, Red, pattern = vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-,very thick, Red, pattern = vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-,very thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-,very thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+%TRIPLE CARDS
+
+%Sets Shading Plain
+\ifnum#2=1
+\ifnum#1=3
+\filldraw[-,very thick, Red ,fill=White] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-,very thick, Red ,fill=White]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-,very thick, Red ,fill=White] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\ifnum#1=3
+\filldraw[-,very thick, Red, pattern = vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, Red,pattern = vertical stripes, pattern color=Red!90]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, Red, pattern = vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\ifnum#1=3
+\filldraw[-, very thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, Red ,fill=Red!40]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+\fi
+
+
+%2. GREEN CARDS
+\ifnum#3=2
+%SINGLE CARDS
+\ifnum#1=1
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, very thick, OliveGreen, fill=White] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, very thick, OliveGreen,pattern = vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, very thick, OliveGreen, fill=PineGreen!40] (1.38,-0.2) \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%DOUBLE CARDS
+\ifnum#1=2
+
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, very thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, very thick, OliveGreen, pattern = vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen, pattern = vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, very thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+%TRIPLE CARDS
+
+%Sets Shading Plain
+\ifnum#2=1
+\ifnum#1=3
+\filldraw[-, very thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen ,fill=White]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\ifnum#1=3
+\filldraw[-, very thick, OliveGreen, pattern = vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen,pattern = vertical stripes, pattern color=OliveGreen!90]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen, pattern = vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\ifnum#1=3
+\filldraw[-, very thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen ,fill=PineGreen!40]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+\fi
+
+%3. PURPLE CARDS
+\ifnum#3=3
+%SINGLE CARDS
+\ifnum#1=1
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, very thick, RoyalPurple, fill=White] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, very thick, RoyalPurple,pattern = vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, very thick, RoyalPurple, fill=RoyalPurple!40] (1.38,-0.2) \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%DOUBLE CARDS
+\ifnum#1=2
+
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, very thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, very thick, RoyalPurple, pattern = vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple, pattern = vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, very thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+%TRIPLE CARDS
+
+%Sets Shading Plain
+\ifnum#2=1
+\ifnum#1=3
+\filldraw[-, very thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple ,fill=White]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\ifnum#1=3
+\filldraw[-, very thick, RoyalPurple, pattern = vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple,pattern = vertical stripes, pattern color=RoyalPurple!90]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple, pattern = vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\ifnum#1=3
+\filldraw[-, very thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple ,fill=RoyalPurple!40]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, very thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+\fi
+
+
+\end{tikzpicture}
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% Command to typeset small set cards
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+\newcommand{\smallsetcard}[5]{
+\begin{tikzpicture}[scale=#5]
+
+%DRAWS CARD OUTLINE
+\draw[-,very thick,black!30, rounded corners](-2,-3) rectangle (2,3);
+
+%3. RED CARDS
+\ifnum#3=1
+%SINGLE CARDS
+\ifnum#1=1
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-,thick, Red, fill=White] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-,thick, Red,pattern = thin vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, thick, Red, fill=Red!40] (1.38,-0.2) \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%DOUBLE CARDS
+\ifnum#1=2
+
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, thick, Red ,fill=White] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red ,fill=White] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, thick, Red, pattern = thin vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red, pattern = thin vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+%TRIPLE CARDS
+
+%Sets Shading Plain
+\ifnum#2=1
+\ifnum#1=3
+\filldraw[-, thick, Red ,fill=White] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red ,fill=White]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red ,fill=White] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\ifnum#1=3
+\filldraw[-, thick, Red, pattern = thin vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red,pattern = thin vertical stripes, pattern color=Red!90]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red, pattern = thin vertical stripes, pattern color=Red!90] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\ifnum#1=3
+\filldraw[-, thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red ,fill=Red!40]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, Red ,fill=Red!40] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+\fi
+
+
+%2. GREEN CARDS
+\ifnum#3=2
+%SINGLE CARDS
+\ifnum#1=1
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, thick, OliveGreen, fill=White] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, thick, OliveGreen,pattern = thin vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, thick, OliveGreen, fill=PineGreen!40] (1.38,-0.2) \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%DOUBLE CARDS
+\ifnum#1=2
+
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, thick, OliveGreen, pattern = thin vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen, pattern = thin vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+%TRIPLE CARDS
+
+%Sets Shading Plain
+\ifnum#2=1
+\ifnum#1=3
+\filldraw[-, thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen ,fill=White]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen ,fill=White] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\ifnum#1=3
+\filldraw[-, thick, OliveGreen, pattern = thin vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen,pattern = thin vertical stripes, pattern color=OliveGreen!90]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen, pattern = thin vertical stripes, pattern color=OliveGreen!90] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\ifnum#1=3
+\filldraw[-, thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen ,fill=PineGreen!40]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, OliveGreen ,fill=PineGreen!40] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+\fi
+
+%3. PURPLE CARDS
+\ifnum#3=3
+%SINGLE CARDS
+\ifnum#1=1
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, thick, RoyalPurple, fill=White] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, thick, RoyalPurple,pattern = thin vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, thick, RoyalPurple, fill=RoyalPurple!40] (1.38,-0.2) \ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%DOUBLE CARDS
+\ifnum#1=2
+
+
+%Sets Shading Plain
+\ifnum#2=1
+\filldraw[-, thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\filldraw[-, thick, RoyalPurple, pattern = thin vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple, pattern = thin vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\filldraw[-, thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,-1) -- (0,-0.4) -- (-1.38,-1) -- (0,-1.6)--(1.38,-1);
+\fi\ifnum#4=2
+(0.8,-1.6) arc (-90:90:0.6) -- (-0.8,-0.4) arc (90:270:0.6)--(0.8,-1.6);
+\fi\ifnum#4=3
+(1.38,-1.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,1) -- (0,1.6) -- (-1.38,1) -- (0,0.4)--(1.38,1);
+\fi\ifnum#4=2
+(0.8,0.4) arc (-90:90:0.6) -- (-0.8,1.6) arc (90:270:0.6)--(0.8,0.4);
+\fi\ifnum#4=3
+(1.38,0.7) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+
+%TRIPLE CARDS
+
+%Sets Shading Plain
+\ifnum#2=1
+\ifnum#1=3
+\filldraw[-, thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple ,fill=White]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple ,fill=White] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+%Sets Shading Striped
+\ifnum#2=2
+\ifnum#1=3
+\filldraw[-, thick, RoyalPurple, pattern = thin vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple,pattern = thin vertical stripes, pattern color=RoyalPurple!90]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple, pattern = thin vertical stripes, pattern color=RoyalPurple!90] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+
+%Sets Shading Solid
+\ifnum#2=3
+\ifnum#1=3
+\filldraw[-, thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,1.6) -- (0,2.2) -- (-1.38,1.6) -- (0,1)--(1.38,1.6);
+\fi\ifnum#4=2
+(0.8,1) arc (-90:90:0.6) -- (-0.8,2.2) arc (90:270:0.6)--(0.8,1);
+\fi\ifnum#4=3
+(1.38,-1.8) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple ,fill=RoyalPurple!40]\ifnum#4=1
+(1.38,0) -- (0,0.6) -- (-1.38,0) -- (0,-0.6)--(1.38,0);
+\fi\ifnum#4=2
+(0.8,-0.6) arc (-90:90:0.6) -- (-0.8,0.6) arc (90:270:0.6)--(0.8,-0.6);
+\fi\ifnum#4=3
+(1.38,-0.2) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\filldraw[-, thick, RoyalPurple ,fill=RoyalPurple!40] \ifnum#4=1
+(1.38,-1.6) -- (0,-1) -- (-1.38,-1.6) -- (0,-2.2)--(1.38,-1.6);
+\fi\ifnum#4=2
+(0.8,-2.2) arc (-90:90:0.6) -- (-0.8,-1) arc (90:270:0.6)--(0.8,-2.2);
+\fi\ifnum#4=3
+(1.38,1.4) arc (-2:2:7) arc (0:180:0.35) arc (0:-180:0.2) arc (25:155:0.9) arc (2:-2:7) arc (-180:0:0.35) arc (180:0:0.2) arc (-155:-25:0.9);
+\fi
+\fi
+\fi
+
+\fi
+
+
+\end{tikzpicture}
+}
diff --git a/graphics/pgf/contrib/setdeck/setdeck.tex b/graphics/pgf/contrib/setdeck/setdeck.tex
new file mode 100644
index 0000000000..946a727a79
--- /dev/null
+++ b/graphics/pgf/contrib/setdeck/setdeck.tex
@@ -0,0 +1,76 @@
+\title{LaTeX Set Deck: Documentation}
+\date{\today}
+\author{Gwyn Whieldon}
+
+
+\documentclass{article}
+
+\usepackage[margin=1.25in, headheight=14pt]{geometry}
+
+\usepackage{setdeck}
+
+
+
+
+
+
+\begin{document}
+
+\maketitle
+
+This document describes a package for typesetting Set cards using TikZ in LaTeX. We use the conventions:
+
+\begin{center}
+\begin{tabular}{| c | c | c | c | c |}
+\hline
+Coordinate & Number & Shading & Color & Shape \\
+\hline
+1 & 1 & plain & red & diamond \\
+2 & 2 & striped & green & oval \\
+3 & 3 & solid & purple & squiggle \\
+\hline
+\end{tabular}
+\end{center}
+
+To typeset a basic Set card, we use the commands \verb|\setcard| or \verb|\smallsetcard|, with arguments
+
+\verb|\setcard{<Number>}{<Shading>}{<Color>}{<Shape>}{<Scaling>} |.
+
+\vspace{10pt}
+
+So to typeset, for example, the full-sized card with two striped purple diamonds, we use the command \verb|\setcard{2}{2}{3}{1}{1}|, which produces:
+\vspace{10pt}
+\begin{center}
+\setcard{2}{2}{3}{1}{1}
+\end{center}
+
+\vspace{10pt}
+
+For many purposes, this will be too large. To typeset a more reasonably sized card (let's say, this time, we typeset three solid red squiggles) we might prefer to use \verb|\setcard{3}{3}{1}{3}{0.5}| or \verb|\smallsetcard{3}{3}{1}{3}{0.5}|, which produce (respectively):
+
+\vspace{10pt}
+\begin{center}
+\setcard{3}{3}{1}{3}{0.5}$\;\;\;\;\;\;\;\;\;\;$\smallsetcard{3}{3}{1}{3}{0.5}
+\end{center}
+
+Here is a preview of all cards (produced with \verb|\smallsetcard|) produced by the \verb|setdeck.sty| package:
+
+\vspace{10pt}
+
+\begin{center}
+\foreach \shading in {1,2,3}{
+\foreach \shape in {1,2,3} {
+\smallsetcard{1}{\shading}{1}{\shape}{0.25}\hspace{3pt}\smallsetcard{2}{\shading}{1}{\shape}{0.25}\hspace{3pt}\smallsetcard{3}{\shading}{1}{\shape}{0.25}\hspace{10pt}\smallsetcard{1}{\shading}{2}{\shape}{0.25}\hspace{3pt}\smallsetcard{2}{\shading}{2}{\shape}{0.25}\hspace{3pt}\smallsetcard{3}{\shading}{2}{\shape}{0.25}\hspace{10pt}\smallsetcard{1}{\shading}{3}{\shape}{0.25}\hspace{3pt}\smallsetcard{2}{\shading}{3}{\shape}{0.25}\hspace{3pt}\smallsetcard{3}{\shading}{3}{\shape}{0.25}
+
+\vspace{5pt}
+
+}
+\vspace{15pt}
+}
+\end{center}
+
+
+\end{document}
+
+
+
diff --git a/graphics/pgf/contrib/smartdiagram/README b/graphics/pgf/contrib/smartdiagram/README
new file mode 100644
index 0000000000..403e697b4e
--- /dev/null
+++ b/graphics/pgf/contrib/smartdiagram/README
@@ -0,0 +1,20 @@
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+smartdiagram --- Automatic creation of smart diagrams with LaTeX
+
+E-mail: claudio <dot> fiandrino <at> gmail <dot> com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package allows to create smart diagrams from lists of items for
+simple documents and for presentations.
+
+The package is composed and necessitates of the core libraries:
+ - core.definitions,
+ - core.styles,
+ - core.commands
+and of the external library:
+ - additions.
+
+
diff --git a/graphics/pgf/contrib/smartdiagram/smartdiagram.dtx b/graphics/pgf/contrib/smartdiagram/smartdiagram.dtx
new file mode 100644
index 0000000000..27ee87ff15
--- /dev/null
+++ b/graphics/pgf/contrib/smartdiagram/smartdiagram.dtx
@@ -0,0 +1,2253 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+smartdiagram --- Automatic creation of smart diagrams with LaTeX
+
+E-mail: claudio <dot> fiandrino <at> gmail <dot> com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+The package allows to create smart diagrams from lists of items for
+simple documents and for presentations.
+
+The package is composed and necessitates of the core libraries:
+ - core.definitions,
+ - core.styles,
+ - core.commands
+and of the external library:
+ - additions.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+smartdiagram --- Automatic creation of smart diagrams from lists of items.
+
+E-mail: claudio <dot> fiandrino <at> gmail <dot> com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+\endpreamble
+\postamble
+
+Copyright (C) 2012-2013 by Claudio Fiandrino
+E-mail: <claudio <dot> fiandrino <at> gmail <dot> com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Claudio Fiandrino.
+
+This work consists of the file smartdiagram.dtx
+and the derived files smartdiagram.ins,
+ smartdiagram.pdf,
+ smartdiagramlibrarycore.definitions.code.tex,
+ smartdiagramlibrarycore.styles.code.tex,
+ smartdiagramlibrarycore.commands.code.tex
+ smartdiagramlibraryadditions.code.tex and
+ smartdiagram.sty.
+
+\endpostamble
+\usedir{tex/latex/smartdiagram}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\generate{
+ \file{smartdiagramlibrarycore.definitions.code.tex}{\from{\jobname.dtx}{definitions}}
+}
+\generate{
+ \file{smartdiagramlibrarycore.styles.code.tex}{\from{\jobname.dtx}{styles}}
+}
+\generate{
+ \file{smartdiagramlibrarycore.commands.code.tex}{\from{\jobname.dtx}{commands}}
+}
+\generate{
+ \file{smartdiagramlibraryadditions.code.tex}{\from{\jobname.dtx}{additions}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/smartdiagram}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/demopkg}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{smartdiagram}[2016/12/23 v0.3b Automatic creation of smart diagrams from lists of items.]
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{amssymb}
+\usepackage{charter}
+\usepackage{microtype}
+\usepackage{xcolor}
+\usepackage{\jobname}
+\usesmartdiagramlibrary{additions}
+\usetikzlibrary{shapes.geometric,decorations.pathmorphing,arrows}
+\usepackage{hypdoc}
+\newcommand{\library}[1]{\textcolor{red!80!black}{\texttt{#1}}}
+\newcommand{\packoption}[2]{\textcolor{blue!60!cyan}{\texttt{#1}} \texttt{(initial:~#2)}}
+\newcommand{\smkey}[1]{\textcolor{blue!60!cyan}{\texttt{#1}}}
+\newcommand{\smnumeration}[1]{\textcolor{green!70!blue}{\texttt{#1}}}
+\newcommand{\diagram}[1]{\textcolor{orange!30!red}{\texttt{#1}}}
+\newcommand{\mbrarg}[1]{\texttt{\{}\small\meta{#1}\texttt{\}}}
+\newcommand{\mqbarg}[1]{\texttt{[}\small\meta{#1}\texttt{]}}
+\newcommand{\colsmartbox}[1]{#1~\tikz[baseline=-0.5ex] \node[fill=#1,rectangle,draw=black,thick,minimum width=5mm,minimum height=3mm,rounded corners]{};}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+ \PrintChanges
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1368}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v0.1}{2012/10/28}{Initial version}
+% \changes{v0.2}{2013/03/09}{Clockwise order circular diagram/horizontal order flow diagram/Uniform colors/Sequence diagram}
+% \changes{v0.3}{2013/03/26}{Fix color arrow problem in circular diagram animated, add possibility uniform color list,
+% added initial null space to items to hypenate first word,libraries, additions, arrows styles
+% }
+% \changes{v0.3a}{2013/04/19}{Fix bug in circular diagram animated: last arrow appearence, added key "back arrow distance"}
+% \changes{v0.3b}{2016/12/23}{Fix bug uniform color list}
+%
+% \GetFileInfo{smartdiagram.sty}
+% \title{The \textsf{smartdiagram} package\thanks{This document
+% corresponds to \textsf{smartdiagram}~\fileversion,
+% dated \filedate; it is released under and subject to the \href{http://www.latex-project.org/lppl/}{\LaTeX\ Project Public License (LPPL)}.}}
+% \author{Claudio Fiandrino \\ \footnotesize\href{mailto:claudio.fiandrino@gmail.com}{claudio.fiandrino@gmail.com}}
+% \maketitle
+% \begin{abstract}
+% This package provides a way to easily draw diagrams in documents and presentations from a list of items thanks to Ti\textit{k}Z.
+% The idea originated from \href{http://tex.stackexchange.com/questions/78310/powerpoints-smart-art-for-tikz}{this question} on \href{http://tex.stackexchange.com}{TeX.StackExchange}.
+%
+% \end{abstract}
+%
+% \tableofcontents
+% \section{Introduction and requirements}
+% The aim of the package is to provide a way to draw diagrams starting from a list of items colored automatically. The diagrams created could be used in a simple document or in a presentation: in the latter case, while using the Beamer class, the user could decide if diagrams should be overlay-awared or not.
+%
+% Automatically, the \textsf{smartdiagram} package loads:
+% \begin{itemize}
+% \item Ti\textit{k}Z;
+% \item \textsf{etoolbox};
+% \item \textsf{xparse};
+% \item \textsf{xstring} (from version 0.2).
+% \end{itemize}
+% Moreover, the package loads the following Ti\textit{k}Z libraries:
+% \begin{itemize}
+% \item \library{backgrounds};
+% \item \library{calc};
+% \item \library{fadings};
+% \item \library{shadows};
+% \item \library{shapes.arrows};
+% \item \library{shapes.symbols} (from version 0.2).
+% \end{itemize}
+% and it sets a new layer called \verb|smart diagram arrow back|. From version 0.3, the package is composed of three core libraries:
+% \begin{itemize}
+% \item \library{core.definitions},
+% \item \library{core.styles},
+% \item \library{core.commands}
+% \end{itemize}
+% which actually form the package \library{smartdiagram.sty} and of the external library:
+% \begin{itemize}
+% \item \library{additions}
+% \end{itemize}
+% which can be loaded separately by the user. By loading this library:
+% \begin{flushleft}
+% \texttt{\textbackslash usesmartdiagramlibrary\{}\library{additions}\texttt{\}}
+% \end{flushleft}
+% forces the Ti\textit{k}Z library \library{positioning} to be loaded as well.
+%
+% The package could be loaded by means of \cs{usepackage}\texttt{\{smartdiagram\}}.
+%
+% \section{Basic Usage}
+% \DescribeMacro{\smartdiagram} The basic command is \cs{smartdiagram}\mqbarg{type of diagram}\mbrarg{list of items}. The \mbrarg{list of items} should be comma-delimited: to insert, for example, a comma as part of the item label use \verb|\smartdiagram[..]{elem1,{elem2,text},elem3}|.
+%
+% The possible diagrams that could be created are:
+% \begin{itemize}
+% \item \diagram{circular diagram}: the items in the list are diplayed around a circle typically in counterclockwise order;
+% \item \diagram{circular diagram:clockwise}: same as before, but now items are placed in clockwise order (no space between names and \diagram{:});
+% \item \diagram{flow diagram}: the items in the list are diplayed as a flow chart;
+% \item \diagram{flow diagram:horizontal}: the items in the list are diplayed as an horizontal flow chart (no space between names and \diagram{:});
+% \item \diagram{descriptive diagram}: a diagram in which are displayed concepts and their description;
+% \item \diagram{priority descriptive diagram}: a diagram in which the items are deployted based on their relevance;
+% \item \diagram{bubble diagram}: each item is a bubble deployted around a bubble center, which is the first element in the list;
+% \item \diagram{constellation diagram}: each item is a circle connected to the center, the first element in the list again;
+% \item \diagram{connected constellation diagram}: each item is a circle and, a part from the first element in the list, the other ones are connected toghether;
+% \item \diagram{sequence diagram}: the items in the list are diplayed in sequence and each item points to the subsequent.
+% \end{itemize}
+%
+% For example:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagram[circular diagram]{Set up,Run,Analyse,Modify~/ Add}
+% \end{center}
+% \end{verbatim}
+% produces:
+% \begin{center}
+% \smartdiagram[circular diagram]{Set up,Run,Analyse,Modify~/ Add}
+% \end{center}
+%
+% All diagrams could be customized in various ways, from the selection of the background colors to the font size, from the size of the items to the shape of the border. The keys necessary for this task will be analysed in detail in section \ref{sec:options}.
+%
+% For what concern the \diagram{bubble diagram}, the \diagram{constellation diagram} and the \diagram{connected constellation diagram}, they are a bit different from the rest of the diagrams, in the sense that the first item in the \mbrarg{list of items} is particular: called \emph{bubble center} and \emph{planet}, respectively, its aspect is different and it could be customized with dedicated keys.
+%
+% From version 0.2 there is availble also the \diagram{sequence diagram} which displays the \mbrarg{list of items} with a particular shape.
+%
+% \DescribeMacro{\smartdiagramanimated} Inside presentations, the user could select if the diagram should be displayed in a \emph{persistent} way, or with an animation. The \emph{persistent} way is achieved by exploiting, again, \cs{smartdiagram}, while to have the diagram \emph{overlay-aware} the command is \cs{smartdiagramanimated}\mqbarg{type of diagram}\marg{list of items}.
+
+% For diagrams like the \diagram{circular diagram} and the \diagram{flow diagram} the animation runs as follows: at the beginning the first item of the list is displayed, then each time appears an arrow connecting the previous element with the new one; at the end it is displayed the arrow connecting the last element with the first one. Considering instead the \diagram{descriptive diagram}, per couple description title-description, first it is shown the description title and subsequently the description. In the \diagram{priority descriptive diagram}, very simply, the list of items is deployted starting from the bottom, that is the less relevant item, to the top to progressively show much relevant items.
+% For what concern the \diagram{bubble diagram}, the \diagram{constellation diagram} and the \diagram{connected constellation diagram}, at first it is always shown the \emph{bubble center} and \emph{planet}, respectively and later all the items subsequently.
+% Finally, in the \diagram{sequence} diagram, the items are presented one at a time starting from the left one ending with the right one.
+%
+% \section{Additions}
+% \DescribeMacro{\usesmartdiagramlibrary} From version 0.3, it is possible to load a separate library called \library{additions} which allows to create annotations over a smart diagram. Load the library through:
+% \begin{flushleft}
+% \texttt{\textbackslash usesmartdiagramlibrary\{}\library{additions}\texttt{\}}
+% \end{flushleft}
+% in the preamble. \DescribeMacro{\smartdiagramadd} The basic command introduced by the library is \cs{smartdiagramadd}\mqbarg{type of diagram}\mbrarg{list of items}\mbrarg{list of additions}. The \mbrarg{list of additions} have a special syntax:
+% \begin{flushleft}
+% \meta{position of module/Annotation text}
+% \end{flushleft}
+% where:
+% \begin{itemize}
+% \item \textit{position} is an anchor of Ti\textit{k}Z (i.e \texttt{above}, \texttt{below right} and so on);
+% \item \textit{module} is the name of a module in the smart diagram;
+% \item \textit{position} and \textit{module} should be separated by the string \texttt{of}: spaces before and after the string are \emph{mandatory}.
+% \end{itemize}
+% \textsf{Smartdiagram} defines as names:
+% \begin{itemize}
+% \item for the diagrams \diagram{circular diagram} and \diagram{circular diagram:clockwise}:\\ \smkey{module}\smnumeration{progressive-number} (no space or other symbols in between); example: \texttt{module1};
+% \item for the diagrams \diagram{flow diagram} and \diagram{flow diagram:horizontal}:\\ \smkey{module}\smnumeration{progressive-number}; example: \texttt{module3};
+% \item for the diagram \diagram{descriptive diagram}: \smkey{module-title}\smnumeration{progressive-number} for titles and \smkey{module}\smnumeration{progressive-number} for descriptions; example: \texttt{module-title1} and \texttt{module1};
+% \item for the diagram \diagram{bubble diagram}: \smkey{center bubble} for the center module and \smkey{module}\smnumeration{progressive-number} for the other modules; example: \texttt{center bubble} and \texttt{module2};
+% \item for the diagrams \diagram{constallation diagram} and \diagram{connected constellation diagram}: \smkey{planet} for the center module and \smkey{satellite}\smnumeration{progressive-number} for the other modules; example: \texttt{planet} and \texttt{satellite3};
+% \item for the diagram \diagram{priority descriptive diagram}: \smkey{module}\smnumeration{progressive-number};
+% \item for the diagram \diagram{sequence diagram}: \smkey{sequence-item}\smnumeration{progressive-number}; example: \texttt{sequence-item1}.
+% \end{itemize}
+% The use of the library \library{additions} in a document requires two compilation runs at least because of the Ti\textit{k}Z options \texttt{remember picture} and \texttt{overlay}.
+%
+% An example:
+% \begin{verbatim}
+% \begin{minipage}[t][3.5cm]{\textwidth}
+% \begin{center}
+% \smartdiagramset{
+% uniform color list=gray!60!black for 3 items,
+% back arrow disabled=true,
+% additions={
+% additional item offset=0.85cm,
+% additional item border color=red,
+% additional connections disabled=false,
+% additional arrow color=red,
+% additional arrow tip=stealth,
+% additional arrow line width=1pt,
+% additional arrow style=]-latex',
+% }
+% }
+% \smartdiagramadd[flow diagram:horizontal]{%
+% PGF,Ti\textit{k}Z,Smartdiagram%
+% }{%
+% below of module1/Low Level, below of module3/High level%
+% }
+% \end{center}
+% \end{minipage}
+% \end{verbatim}
+% The result:
+% \medskip
+%
+% \begin{minipage}[t][3.5cm]{\textwidth}
+% \begin{center}
+% \smartdiagramset{
+% uniform color list=gray!60!black for 3 items,
+% back arrow disabled=true,
+% additions={
+% additional item offset=0.85cm,
+% additional item border color=red,
+% additional connections disabled=false,
+% additional arrow color=red,
+% additional arrow tip=stealth,
+% additional arrow line width=1pt,
+% additional arrow style=]-latex',
+% }
+% }
+% \smartdiagramadd[flow diagram:horizontal]{%
+% PGF,Ti\textit{k}Z,Smartdiagram%
+% }{%
+% below of module1/Low Level, below of module3/High level%
+% }
+% \end{center}
+% \end{minipage}
+%
+% \DescribeMacro{\smartdiagramconnect} Notice that with the \cs{smartdiagramadd} facility it is not possible to fine customize the direction of the arrow tips. Since each additional module has as name\\ \smkey{additional-module}\smnumeration{progressive-number}, then by means of the specific command\\ \cs{smartdiagramconnect}\mbrarg{arrow options}\mbrarg{start module/end module} one could do better. For example:
+% \begin{verbatim}
+% \begin{minipage}[t][3.5cm]{\textwidth}
+% \begin{center}
+% \smartdiagramset{
+% uniform color list=gray!60!black for 3 items,
+% back arrow disabled=true,
+% additions={
+% additional item offset=0.85cm,
+% additional item border color=red,
+% additional arrow color=red,
+% additional arrow tip=stealth,
+% additional arrow line width=1pt,
+% additional arrow style=]-latex',
+% }
+% }
+% \smartdiagramadd[flow diagram:horizontal]{%
+% PGF,Ti\textit{k}Z,Smartdiagram%
+% }{%
+% below of module1/Low Level, below of module3/High level%
+% }
+% \smartdiagramconnect{{]-latex'}}{additional-module1/module1}
+% \smartdiagramconnect{{latex'-[}}{additional-module2/module3}
+% \end{center}
+% \end{minipage}
+% \end{verbatim}
+% gives:
+% \medskip
+%
+% \begin{minipage}[t][3.5cm]{\textwidth}
+% \begin{center}
+% \smartdiagramset{
+% uniform color list=gray!60!black for 3 items,
+% back arrow disabled=true,
+% additions={
+% additional item offset=0.85cm,
+% additional item border color=red,
+% additional arrow color=red,
+% additional arrow tip=stealth,
+% additional arrow line width=1pt,
+% additional arrow style=]-latex',
+% }
+% }
+% \smartdiagramadd[flow diagram:horizontal]{%
+% PGF,Ti\textit{k}Z,Smartdiagram%
+% }{%
+% below of module1/Low Level, below of module3/High level%
+% }
+% \smartdiagramconnect{{]-latex'}}{additional-module1/module1}
+% \smartdiagramconnect{{latex'-[}}{additional-module2/module3}
+% \end{center}
+% \end{minipage}
+% Because of the option \texttt{overlay}, it is better to protect within a \texttt{minipage} the diagram: in this way the missing bounding box update would not affect the subsequent/precedent text.
+%
+% By default, the arrows are customized by the keys which start with \smkey{additional} (explained more in detail in the subsubsection \ref{subsubsect:options}), but it is possible to override locally this definition, for example with:
+% \begin{verbatim}
+% \smartdiagramconnect{{latex'-[},green}{additional-module2/module3}
+% \end{verbatim}
+% For the moment, the library \library{additions} \emph{does not work} in the animated mode.
+%
+% \section{The options}
+% \label{sec:options}
+% \subsection{Setting the options}
+% \DescribeMacro{\smartdiagramset} The options should be introduced similarly to what happens with \cs{tikzset} in Ti\textit{k}Z: \cs{smartdiagramset}\mbrarg{list of options}. As well as in Ti\textit{k}Z, it is possible to collect options within styles: see for more details subsection \ref{subsec:stylesdef}. Examples in which the options are used are shown in section \ref{sec:gallery}.
+% \subsection{Available options}
+% Here follows the list of general available options: these options are related to generic aspects as color lists or arrows.
+% \subsubsection{General options}
+% \begin{itemize}
+% \item \packoption{set color list}{none}: this option allows the user to define the list of colors usable in the diagram;
+%
+% \item \packoption{uniform color list}{none}: this option allows the user to set one single color for the whole list of colors usable in the diagram;
+%
+% \item \packoption{use predefined color list}{none}: this option allows the user to reuse the pre-defined colors whenever in a previous diagram they have been changed;
+%
+% \item \packoption{insert decoration}{none}: this option allows to decorate the border of the module; the user should declare properly a decoration style and load manually the libraries required, e.g. \library{decorations.pathmorphing}; some more hints are given in section \ref{sec:recommendations};
+%
+% \item \packoption{arrow line width}{0.1cm}: this option sets the width of the connection arrows within two modules;
+%
+% \item \packoption{arrow tip}{stealth}: this option allows to select the single arrow tip; possible choices are described in the pgfmanual and for particular types it is recommended to load the library \library{arrows};
+%
+% \item \packoption{arrow style}{<-}: this option allows the user to define a new style for the arrow; as well as the key \smkey{arrow tip}, see the pgfmanual to see a list of possible arrow styles;
+%
+% \item \packoption{uniform arrow color}{false}: this option, set to true, activates the possibility to use one single arrow color for all the connections;
+%
+% \item \packoption{arrow color}{gray}: this option, when the key \smkey{uniform arrow color} is set to true, allows to select the uniform arrow color.
+%
+% \end{itemize}
+% \subsubsection{Specific options}
+% Here follows the list of specific available options per type of diagram.
+%
+% For what concern the \diagram{circular diagram}, \diagram{circular diagram:clockwise}, the \diagram{flow diagram} and the \diagram{flow diagram:horizontal}:
+% \begin{itemize}
+% \item \packoption{module minimum width}{2cm}: this option sets the minimum width of the module;
+%
+% \item \packoption{module minimum height}{1cm}: this option sets the minimum height of the module;
+%
+% \item \packoption{module y sep}{1.65}: this option sets a vertical distance factor among the modules in a \diagram{flow diagram};
+%
+% \item \packoption{module x sep}{2.75}: this option sets an horizontal distance factor among the modules in a \diagram{flow diagram:horizontal};
+%
+% \item \packoption{module shape}{rectangle,rounded corners}: this option should be used to change the shape of the module, but the user should load manually the proper Ti\textit{k}Z library; for example, to user an \verb|ellipse|, load \library{shapes.geometric} in the preamble;
+%
+% \item \packoption{text width}{1.75cm}: this option sets the text width inside the module;
+%
+% \item \packoption{font}{\textbackslash small}: this option sets the module font;
+%
+% \item \packoption{border color}{gray}: this option sets the border color of the module;
+%
+% \item \packoption{text color}{black}: this option sets the text color of the module;
+%
+% \item \packoption{circular distance}{2.75cm}: this option sets the radius of cirle around which the modules in a \diagram{circular diagram};
+%
+% \end{itemize}
+%
+% Considering just the \diagram{flow diagram} and the \diagram{flow diagram:horizontal}, there is a specific option to disable the back arrow going from the final module to the first one and to set its distance from the modules:
+% \begin{itemize}
+% \item \packoption{back arrow distance}{0.5}: the option sets the distance (it hold for both types);
+% \item \packoption{back arrow disabled}{false}: the option, set to \texttt{true} disables the back arrow.
+% \end{itemize}
+%
+% Similarly, in the \diagram{circular diagram} and in the \diagram{circular diagram:clockwise}, there is a specific option to disable the back arrow going from the final module to the first one:
+% \begin{itemize}
+% \item \packoption{circular final arrow disabled}{false}: the option, set to \texttt{true} disables the final connection.
+% \end{itemize}
+%
+% For what concern the \diagram{descriptive diagram} and the \diagram{priority descriptive diagram}:
+% \begin{itemize}
+% \item \packoption{descriptive items y sep}{1.75}: this option sets a vertical distance factor among the descriptive items;
+%
+% \item \packoption{description title width}{1.5cm}: this option sets the minimum width of the description-title;
+%
+% \item \packoption{description title text width}{1.25cm}: this option sets the text width of the description-title;
+%
+% \item \packoption{description text width}{5cm}: this option sets the text width of the description;
+%
+% \item \packoption{description title font}{\textbackslash small}: this option sets the font size of the description-title;
+%
+% \item \packoption{description font}{\textbackslash small}: this option sets the font size of the description;
+%
+% \item \packoption{description width}{5.5cm}: this option sets the minimum width of the description;
+%
+% \item \packoption{priority arrow width}{1.5cm}: this option sets the width of the vertical arrow;
+%
+% \item \packoption{priority arrow head extend}{0.15cm}: this option sets the width of the arrow head extend;
+%
+% \item \packoption{priority tick size}{5pt}: this option sets the size of the line denoting the relevance position of items in the vertical arrow;
+%
+% \item \packoption{priority arrow height advance}{2cm}: this option specifies how much the vertical arrow is vertically extended above the most relevant item.
+% \end{itemize}
+%
+% For what concern the \diagram{bubble diagram}, the \diagram{constellation diagram} and the \diagram{connected constellation diagram}:
+% \begin{itemize}
+%
+% \item \packoption{bubble center node size}{4cm}: the option specifies the minimum size of the bubble center node;
+%
+% \item \packoption{bubble center node font}{\textbackslash large}: this option sets the font size of the bubble center node;
+%
+% \item \packoption{bubble center node color}{lightgray!60}: this option allows to customize the background color of the bubble center node;
+%
+% \item \packoption{distance center/other bubbles}{0.8cm}: this options specifies which is the distance among the bubble center node and the other bubbles; keep this value under controll to avoid that bubbles do not overlap anymore the bubble center node;
+%
+% \item \packoption{distance text center bubble}{0.5cm}: this option sets the distance from the text to the border of the bubble center node;
+%
+% \item \packoption{bubble fill opacity}{0.5}: this option sets the opacity at which the bubbles are shown;
+%
+% \item \packoption{bubble node size}{2.5cm}: the option specifies the minimum size of the bubbles;
+%
+% \item \packoption{bubble text opacity}{0.8}: this option sets the opacity at which the bubble text is shown;
+%
+% \item \packoption{bubble node font}{\textbackslash normalfont}: this option sets the font size of the bubbles;
+%
+% \item \packoption{planet size}{2.5cm}: the option specifies the minimum size of the planet;
+%
+% \item \packoption{planet color}{lightgray!60}: this option allows to customize the background color of the planet;
+%
+% \item \packoption{planet font}{\textbackslash large}: this option sets the font size of the planet;
+%
+% \item \packoption{distance planet-connection}{0.1cm}: this option sets the distance from the planet to the arrow directed to the satellites;
+%
+% \item \packoption{distance planet-text}{0.5cm}: this option sets the distance from the text to the border of the planet;
+%
+% \item \packoption{planet text width}{1.75cm}: this option sets the planet text width;
+%
+% \item \packoption{satellite size}{1.75cm}: the option specifies the minimum size of the satellites;
+%
+% \item \packoption{satellite font}{\textbackslash normalfont}: this option sets the font size of the satellites;
+%
+% \item \packoption{satellite fill opacity}{0.5}: this option sets the opacity at which the satellites are shown;
+%
+% \item \packoption{satellite text opacity}{0.8}: this option sets the opacity at which the satellite text is shown;
+%
+% \item \packoption{satellite text width}{1.5cm}: this option sets the satellite text width;
+%
+% \item \packoption{distance satellite-connection}{0.075cm}: this option sets the distance from the satellites to the arrows directed to the planet;
+%
+% \item \packoption{connection line width}{0.1cm}: this option allows to customize the width of the connections from the planet to the satellites;
+%
+% \item \packoption{distance planet-satellite}{3.5cm}: this option determine the distance among any pair of planet-satellite.
+% \end{itemize}
+%
+% Considering just the the \diagram{constellation diagram} and the \diagram{connected constellation diagram}:
+% \begin{itemize}
+% \item \packoption{uniform connection color}{false}: the option, set to \texttt{true} overrides the color list definition;
+% \item \packoption{connection color}{gray}: this option allows to specify the color valid for all the connections.
+% \end{itemize}
+% For what concern the \diagram{sequence diagram}:
+% \begin{itemize}
+%
+% \item \packoption{sequence item height}{1cm}: the option specifies the minimum height of the items;
+%
+% \item \packoption{sequence item width}{2cm}: the option specifies the minimum width of the items;
+%
+% \item \packoption{sequence item border color}{gray}: sets the border line color;
+%
+% \item \packoption{sequence item border size}{1.65\textbackslash pgflinewidth}: sets the border line width;
+%
+% \item \packoption{sequence item font size}{\textbackslash normalfont}: this option sets the font size of the items;
+%
+% \item \packoption{sequence item fill opacity}{1}: sets the opacity at which the item is shown;
+%
+% \item \packoption{sequence item text opacity}{1}: sets the opacity at which the item text is shown;
+%
+% \item \packoption{sequence item text width}{1.9cm}: the option allows to select the item text width;
+%
+% \item \packoption{sequence item text color}{black}: the option allows to select the item text color;
+%
+% \item \packoption{uniform sequence color}{false}: the option, set to \texttt{true} overrides the color list definition;
+%
+% \item \packoption{sequence item uniform color}{gray!60!black}: this option allows to specify the color valid for all the items in the sequence.
+%
+% \end{itemize}
+%
+% \subsubsection{Options of the additions library}
+% \label{subsubsect:options}
+% The options of the library necessitate to be set within a specific key \smkey{additions}; this key is defined as
+% \begin{verbatim}
+% \pgfkeys{/smart diagram/.cd,
+% additions/.style={/smart diagram/additions/.cd,#1}%
+% }
+% \end{verbatim} and it basically sets the correct path; indeed all of these keys are defined in a subtree of the main path: \verb!/smart diagram/additions!. For example:
+% \begin{verbatim}
+% \smartdiagramset{
+% additions={
+% additional item offset=0.85cm,
+% additional item border color=red,
+% additional arrow color=red,
+% additional arrow tip=stealth,
+% additional arrow line width=1pt,
+% additional arrow style=]-latex',
+% }
+% }
+% \end{verbatim}
+% Notice that each key starts with \smkey{additional}: in my opinion, although it may seems heavy type this every time, it could avoid some confusion with other keys.
+% \begin{itemize}
+%
+% \item \packoption{additional item shape}{rectangle,rounded corners}: this option should be used to change the shape of the additional module; similarly to the key \smkey{module shape}, for some shapes the user should load manually the proper Ti\textit{k}Z library;
+%
+% \item \packoption{additional item border color}{none}: sets the border line color;
+%
+% \item \packoption{additional item bottom color}{white}: this option sets the bottom color of the module; use it if you want to keep the same aspect of the diagrams: \diagram{circular diagram}, \diagram{flow diagram}, \diagram{circular diagram:clockwise} and \diagram{flow diagram:horizontal};
+%
+% \item \packoption{additional item fill color}{none}: this option sets the fill color of the module; use it if you want to keep the same aspect of the other types of diagrams;
+%
+% \item \packoption{additional item text width}{1.75cm}: it defines the text width of the module;
+%
+% \item \packoption{additional item width}{2cm}: it defines the minimum width of the module;
+%
+% \item \packoption{additional item height}{1cm}: it defines the minimum height of the module;
+%
+% \item \packoption{additional item font}{\textbackslash normalfont}: this option allows to customize the font of the module;
+%
+% \item \packoption{additional item border decoration}{none}: this option allows to customize the module with a decoration; some more hints are given in section \ref{sec:recommendations};
+%
+% \item \packoption{additional item offset}{0.25cm}: this option defines the distance between the original module and the additional one;
+%
+% \item \packoption{additional item fill opacity}{1}: it sets the fill opacity of the module;
+%
+% \item \packoption{additional item text opacity}{1}: it sets the text opacity of the module;
+%
+% \item \packoption{additional arrow tip}{stealth}: this option defines the single arrow tip of the connection;
+%
+% \item \packoption{additional arrow line width}{0.1cm}: this option defines the line width of the connection;
+%
+% \item \packoption{additional arrow color}{gray}: this option defines the connection color;
+%
+% \item \packoption{additional arrow style}{->}: this option allows to customize the connection aspect, that is both arrow tips simultaneously;
+%
+% \item \packoption{additional item shadow}{none}: it allows to define a shadow for the module; use the usual Ti\textit{k}Z shadow options;
+%
+% \item \packoption{additional connections disabled}{true}: this option when set to \texttt{false} makes all the connections visible.
+%
+% \end{itemize}
+% \section{Gallery of examples}
+% \label{sec:gallery}
+% \DescribeMacro{Horizontal flow chart: custom color list - no back arrow}
+% Example of an horizontal flow chart with custom color list and back arrow disabled:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{border color=none,
+% set color list={blue!50!cyan,green!60!lime,orange!50!red,red!80!black},
+% back arrow disabled=true}
+% \smartdiagram[flow diagram:horizontal]{Set up,Run,Analyse,Modify~/ Add}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagramset{border color=none,
+% set color list={blue!50!cyan,green!60!lime,orange!50!red,red!80!black},
+% back arrow disabled=true}
+% \smartdiagram[flow diagram:horizontal]{Set up,Run,Analyse,Modify~/ Add}
+% }
+% \end{center}
+% \DescribeMacro{Horizontal flow chart: uniform color list - custom arrow style}
+% A similar example with an uniform color list and custom arrow style definition:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{border color=none,
+% uniform color list=teal!60 for 4 items,
+% arrow style=[-stealth',
+% module x sep=3.75,
+% back arrow distance=0.75,
+% }
+% \smartdiagram[flow diagram:horizontal]{Set up,Run,Analyse,Modify~/ Add}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagramset{border color=none,
+% uniform color list=teal!60 for 4 items,
+% arrow style=stealth'-], module x sep=3.75,
+% back arrow distance=0.75,
+% }
+% \smartdiagram[flow diagram:horizontal]{Set up,Run,Analyse,Modify~/ Add}
+% }
+% \end{center}
+% \smartdiagramset{use predefined color list}
+% \DescribeMacro{Circular diagram with custom options}
+% Another example:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{circular distance=4cm,
+% font=\large,
+% text width=2.5cm,
+% module minimum width=2.5cm,
+% module minimum height=1.5cm,
+% arrow tip=to}
+% \smartdiagram[circular diagram]{Set up~/ Adapt,Run,Analyse,Modify~/ Add,
+% Check,Check again}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.7}{
+% \smartdiagramset{circular distance=4cm, font=\large, text width=2.5cm,
+% module minimum width=2.5cm, module minimum height=1.5cm,arrow tip=to}
+% \smartdiagram[circular diagram]{Set up~/ Adapt,Run,Analyse,Modify~/ Add,Check,Check again}
+% }
+% \end{center}
+% \DescribeMacro{Circular diagram with custom shape and final arrow disabled}
+% An example with a diamond shape and the final arrow disabled:
+% \begin{verbatim}
+% \begin{center}
+% \usetikzlibrary{shapes.geometric} % required in the preamble
+% \smartdiagramset{module shape=diamond,
+% font=\scriptsize,
+% module minimum width=1cm,
+% module minimum height=1cm,
+% text width=1cm,
+% circular distance=2cm,
+% circular final arrow disabled=true,
+% }
+% \smartdiagram[circular diagram:clockwise]{Set up,Run,Analyse,Modify~/ Add}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \smartdiagramset{module shape=diamond,font=\scriptsize,
+% module minimum width=1cm,module minimum height=1cm,text width=1cm,
+% circular distance=2cm,
+% circular final arrow disabled=true,
+% }
+% \smartdiagram[circular diagram:clockwise]{Set up,Run,Analyse,Modify~/ Add}
+% \end{center}
+% \DescribeMacro{Flow diagram with decorated border and uniform arrow color}
+% An example with a decorated shape and uniform arrow color:
+% \begin{verbatim}
+% \usetikzlibrary{decorations.pathmorphing} % required in the preamble
+% \begin{center}
+% \tikzset{my decoration/.style={decorate,decoration=zigzag}}
+% \smartdiagramset{module shape=rectangle,
+% insert decoration={my decoration},
+% uniform arrow color=true,
+% arrow color=gray!50!black,
+% }
+% \smartdiagram[flow diagram]{Set up,Run,Analyse,Modify~/ Add}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \tikzset{my decoration/.style={decorate,decoration=zigzag}}
+% \smartdiagramset{module shape=rectangle,insert decoration={my decoration},
+% uniform arrow color=true, arrow color=gray!50!black,
+% }
+% \scalebox{0.8}{
+% \smartdiagram[flow diagram]{Set up,Run,Analyse,Modify~/ Add}
+% }
+% \end{center}
+% \DescribeMacro{Descriptive diagram}
+% An example of descriptive diagram:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagram[descriptive diagram]{
+% {Set up,The set up operation consist of..},
+% {Run, {After having set up the program, you must run..}},
+% {Analyse, You must check what did with analytical tools like..},
+% {Modify, {After the analysis, you can still modify or add..}},
+% }
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagram[descriptive diagram]{
+% {Set up,The set up operation consist of..},
+% {Run, {After having set up the program, you must run..}},
+% {Analyse, You must check what did with analytical tools like..},
+% {Modify, {After the analysis, you can still modify or add..}},
+% }
+% }
+% \end{center}
+% \DescribeMacro{Bubble diagram}
+% An example of bubble diagram:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagram[bubble diagram]{
+% Build a program,Set up,Run,Analyze,Modify~/\\ Add,Check
+% }
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagram[bubble diagram]{Build a program,Set up,Run,Analyze,Modify~/\\ Add,Check}
+% }
+% \end{center}
+% \DescribeMacro{Constellation diagram}
+% An example of constellation diagram:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagram[constellation diagram]{
+% Build a program,Set up,Run,Analyze,Modify~/\\ Add
+% }
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagram[constellation diagram]{Build a program,Set up,Run,Analyze,Modify~/\\ Add}
+% }
+% \end{center}
+% \DescribeMacro{Constellation diagram with custom colors}
+% An example of constellation diagram with custom colors:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{set color list={orange!60, green!50!lime!60,magenta!60,
+% blue!50!cyan},
+% uniform connection color=true
+% }
+% \smartdiagram[constellation diagram]{
+% Build a program,Set up,Run,Analyze,Modify~/\\ Add
+% }
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagramset{set color list={orange!60, green!50!lime!60,magenta!60,blue!50!cyan},
+% uniform connection color=true}
+% \smartdiagram[constellation diagram]{Build a program,Set up,Run,Analyze,Modify~/\\ Add}
+% }
+% \end{center}
+% \DescribeMacro{Connected constellation diagram}
+% An example of connected constellation diagram:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{planet color=orange!60,
+% distance planet-satellite=1cm
+% }
+% \smartdiagram[connected constellation diagram]
+% {Build a program,Set up,Run,Analyze,Modify~/\\ Add,Check}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagramset{planet color=orange!60, distance planet-satellite=2.75cm,use predefined color list}
+% \smartdiagram[connected constellation diagram]{Build a program,Set up,Run,Analyze,Modify~/\\ Add}
+% }
+% \end{center}
+% \DescribeMacro{Priority descriptive diagram}
+% An example of priority descriptive diagram describing that Ti\textit{k}Z is built on top of PGF and Smartdiagram on top of Ti\textit{k}Z:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{
+% set color list={blue!50!cyan,green!60!lime,orange!50!red},
+% priority arrow width=2cm,
+% priority arrow height advance=2.25cm
+% }
+% \smartdiagram[priority descriptive diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \smartdiagramset{set color list={blue!50!cyan,green!60!lime,orange!50!red},
+% priority arrow width=2cm,priority arrow height advance=2.25cm}
+% \smartdiagram[priority descriptive diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% \DescribeMacro{Sequence diagram}
+% The same previous example with a sequence diagram:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagram[sequence diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \smartdiagramset{use predefined color list}
+% \smartdiagram[sequence diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% and with \smkey{uniform sequence color} set to \verb|true|:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{uniform sequence color=true,
+% sequence item border color=black,sequence item font size=\footnotesize,
+% sequence item text color=white
+% }
+% \smartdiagram[sequence diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \smartdiagramset{uniform sequence color=true,
+% sequence item border color=black,sequence item font size=\footnotesize,
+% sequence item text color=white
+% }
+% \smartdiagram[sequence diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% \DescribeMacro{Put additions to a diagram}
+% Here is an example of a circular diagram with some additions:
+% \begin{verbatim}
+% \usesmartdiagramlibrary{additions} % required in the preamble
+% \usetikzlibrary{arrows} % required in the preamble
+% \bigskip
+% \begin{minipage}[c][8cm]{\textwidth}
+% \centering
+% \smartdiagramset{
+% uniform color list=orange!60!yellow for 5 items,
+% circular final arrow disabled=true,
+% circular distance=2.25cm,
+% arrow tip=to,
+% arrow line width=2pt,
+% additions={
+% additional item bottom color=orange!60!yellow,
+% additional item border color=gray,
+% additional item shadow=drop shadow,
+% additional item offset=0.65cm,
+% additional arrow line width=2pt,
+% additional arrow tip=to,
+% additional arrow color=orange!60!yellow,
+% }
+% }
+% \smartdiagramadd[circular diagram]{
+% aa,bb,cc,dd,ee
+% }{
+% above of module1/Start,right of module5/End
+% }
+% \smartdiagramconnect{to-}{module1/additional-module1}
+% \smartdiagramconnect{-to}{module5/additional-module2}
+% \end{minipage}
+% \end{verbatim}
+% \begin{minipage}[c][8cm]{\textwidth}
+% \centering
+% \smartdiagramset{
+% uniform color list=orange!60!yellow for 5 items,
+% circular final arrow disabled=true,
+% circular distance=2.25cm,
+% arrow tip=to,
+% arrow line width=2pt,
+% additions={
+% additional item bottom color=orange!60!yellow,
+% additional item border color=gray,
+% additional item shadow=drop shadow,
+% additional item offset=0.65cm,
+% additional arrow line width=2pt,
+% additional arrow tip=to,
+% additional arrow color=orange!60!yellow,
+% }
+% }
+% \smartdiagramadd[circular diagram]{
+% aa,bb,cc,dd,ee
+% }{
+% above of module1/Start,right of module5/End
+% }
+% \smartdiagramconnect{to-}{module1/additional-module1}
+% \smartdiagramconnect{-to}{module5/additional-module2}
+% \end{minipage}
+%
+% \section{Recommendations and known issues}
+% \label{sec:recommendations}
+% \subsection{Something about colors}
+% As seen in the section \ref{sec:options}, the colors could be customized by means of the key \smkey{set color list}. By default there are 10 predefined colors; in order: \colsmartbox{red!40}, \colsmartbox{cyan!40}, \colsmartbox{blue!40}, \colsmartbox{green!40}, \colsmartbox{orange!40}, \colsmartbox{yellow!40}, \colsmartbox{magenta!40}, \colsmartbox{brown!40}, \colsmartbox{violet!40} and \colsmartbox{teal!40}. This implies that, by default, it is not possible to have lists longer than 10 items. This, of course, could be avoided by declaring proper lists with, say, 20 colors and therefore develop diagrams with more than 10 items. In any case, it is always possible to reset custom color lists by means of:
+% \begin{verbatim}
+% \smartdiagramset{use predefined color list}
+% \end{verbatim}
+%
+% In order to use one color for all the items it is possible to exploit the \smkey{uniform color list}; it has a particular syntax:
+% \begin{verbatim}
+% \smartdiagramset{uniform color list=<some color> for <n> items}
+% \end{verbatim}
+% The \meta{some color} is set for a list of \meta{n} items and nothing more, so in order to avoid problems make sure you dimension \meta{n} correctly. Indeed, in case \meta{n} is lower than the number of items inside the diagram the following happens:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{
+% uniform color list=gray!60!black for 2 items,
+% back arrow disabled=true,
+% }
+% \smartdiagram[flow diagram:horizontal]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \smartdiagramset{use predefined color list,
+% uniform color list=gray!60!black for 2 items,
+% back arrow disabled=true,
+% }
+% \smartdiagram[flow diagram:horizontal]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% In conclusion, the uniform setting is extend only for \meta{n} items, for the remaining ones the predefined or a custom color list is used.
+%
+% Notice also that the key \smkey{uniform color list} makes the arrow color be uniform for \meta{n} items, but it has no relation with the \smkey{uniform arrow color} which automatically makes \emph{all} items with an uniform color. Indeed, the color taken by the arrows with:
+% \begin{verbatim}
+% \smartdiagramset{uniform arrow color=true}
+% \end{verbatim}
+% could be customized throught the key \smkey{arrow color}, while \smkey{uniform color list} make modules and arrows be rendered with the same color.
+%
+% \subsection{Defining styles}
+% \label{subsec:stylesdef}
+% The \textsf{smartdiagram} package admits the definition of styles to collect key-definitions; for example:
+% \begin{verbatim}
+% \smartdiagramset{my diagram style/.style={
+% module shape=diamond,
+% font=\scriptsize,
+% module minimum width=1cm,
+% module minimum height=1cm,
+% text width=1cm
+% }
+% }
+% \end{verbatim}
+% can be subsequently used in:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{my diagram style, arrow tip=to}
+% \smartdiagram[circular diagram]{Do, This, Only, For, Me}
+% \end{center}
+% \begin{center}
+% \smartdiagramset{my diagram style, module y sep=2.5}
+% \smartdiagram[flow diagram]{Do, This, For, Me}
+% \end{center}
+% \end{verbatim}
+%
+% \subsection{Circular, bubble and constellation diagrams}
+% For these type of diagrams, the number of items is relevant: too many items lead to overlapping satellites and bubbles besides any attempt to resize things by means of keys that reduce the radius.
+%
+% Notice also that imposing a too short distance from the planet to satellites is bad and leads to something like:
+% \smartdiagramset{use predefined color list}
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{planet color=orange!60, distance planet-satellite=1cm}
+% \smartdiagram[connected constellation diagram]
+% {Build a program,Set up,Run,Analyze,Modify~/\\ Add,Check}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \scalebox{0.8}{
+% \smartdiagramset{planet color=orange!60, distance planet-satellite=1cm}
+% \smartdiagram[connected constellation diagram]{Build a program,Set up,Run,Analyze,Modify~/\\ Add}
+% }
+% \end{center}
+%
+% \subsection{Descriptive diagrams}
+% When the user has to build a \diagram{descriptive diagram}, simple or animated, the following rules have to be respected:
+% \begin{itemize}
+% \item each description title and description should be separated by a comma;
+% \item to use a comma inside a description, enclose by \{ \} the description;
+% \item use a comma after the last couple description title-description.
+% \end{itemize}
+% A working example:
+% \begin{verbatim}
+% \smartdiagram[descriptive diagram]{
+% {Set up, The set up operation consist of..},
+% {Run, {After having set up the program, you must run..}},
+% {Analyze, You must check what did with analytical tools like..},
+% }
+% \end{verbatim}
+% A non-working example:
+% \begin{verbatim}
+% \smartdiagram[descriptive diagram]{
+% {Set up, The set up operation consist of..},
+% {Run, {After having set up the program, you must run..}},
+% {Analyze, You must check what did with analytical tools like..}
+% }
+% \end{verbatim}
+% The \emph{mandatory} final comma is missing thus, as result, the last couple description title-description will be entirely treated as a description title.
+%
+% Another suggestion regarding descriptive diagrams is about the description title: it should be short in order to avoid the size of the circle explode. To kept it under controll, the keys \smkey{description title width}, \smkey{description title text width} and \smkey{description title font} are of help.
+%
+% \subsection{Decorations}
+% To decorate the border of modules, it is kindly recommended to first declare the decoration choosen by means of an apposite style and then apply the style. The procedure, in code, should be as follows:
+% \begin{verbatim}
+% \tikzset{my wonderful decoration/.style={decorate,decoration=bent}}
+% \smartdiagramset{insert decoration=my wonderful decoration,...}
+% \end{verbatim}
+% where the dots represent the other options.
+%
+% The insertion of decorations inside a \diagram{descriptive diagram} are problematic: only \verb|random steps|, \verb|bent| and \verb|coil| do not raise errors. Other decorations, like \verb|snake|, raise as error:
+% \begin{verbatim}
+% ! Dimension too large.
+% \end{verbatim} but, after all, the decoration is deployed anyway.
+%
+% In case the user wants to decorate a border with a decoration that involves random numbers, such as \verb|random steps| or other custom-built decorations, it is preferable to set a seed for the animated diagram, to avoid that at each step the border of the same module changes. An example:
+% \begin{verbatim}
+% \begin{frame}
+% \begin{center}
+% \pgfmathsetseed{12354}
+% \tikzset{my decoration/.style={decorate,decoration=random steps}}
+% \smartdiagramset{insert decoration=my decoration}
+% \smartdiagramanimated[descriptive diagram]{
+% {Set up, The set up operation consist of..},
+% {Run, {After having set up the program, you must run..}},
+% {Analyze, You must check what did with analytical tools like..},
+% {Modify, {After the analysis, you can still modify or add..}},
+% }
+% \end{center}
+% \end{frame}
+% \end{verbatim}
+%
+% \subsection{Priority descriptive diagrams}
+% The vertical arrow is drawn in background with a fading effect: it may occurr that under some pdf editor this effect is not shown (this happened to me with evince, but it perfectly worked with okular).
+%
+% For what concern these diagrams there is a bug in displaying the tick line when the \smkey{priority arrow head extend} is set with a bigger size than the default; a minimal-non-working example:
+% \begin{verbatim}
+% \begin{center}
+% \smartdiagramset{priority arrow width=2cm,
+% priority arrow height advance=2.25cm,
+% priority arrow head extend=0.3cm}
+% \smartdiagram[priority descriptive diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% \end{center}
+% \end{verbatim}
+% \begin{center}
+% \smartdiagramset{use predefined color list}
+% \smartdiagramset{priority arrow width=2cm,priority arrow height advance=2.25cm,
+% priority arrow head extend=0.25cm}
+% \scalebox{0.8}{
+% \smartdiagram[priority descriptive diagram]{PGF,Ti\textit{k}Z,Smartdiagram}
+% }
+% \end{center}
+%
+% \section{Aknowledgements}
+% I would like to acknowledge first of all \href{http://tex.stackexchange.com/users/3144/alain-matthes}{Alain Matthes} and \href{http://tex.stackexchange.com/users/4956/mohsen}{Mohsen} because the \diagram{bubble diagram} and the \diagram{constellation diagram} are based on \href{http://tex.stackexchange.com/questions/52394/high-level-macros-and-environments-based-on-tikz?#52408}{Alain's answer} while the \diagram{circular diagram} is based on \href{http://tex.stackexchange.com/questions/52394/high-level-macros-and-environments-based-on-tikz?#52972}{Mohsen's answer}.
+%
+% I would also like to thank \href{http://tex.stackexchange.com/users/4427/egreg}{Enrico Gregorio} and \href{http://tex.stackexchange.com/users/994/ahmed-musa}{Ahmed Musa} for the courtesy of explaining me why my poor attempt in creating the \smkey{set color list} failed and for providing me valid solutions. Enrico also kindly fixed a spacing bug concerning the \smkey{uniform color list}.
+%
+% Last, but not least, I would like to thank prof.~Ludger~Humbert for suggesting and providing the code for the \diagram{circular diagram:clockwise} as well as for pointing out some bugs in the version 0.3 and André Hilbig for suggesting the key \smkey{back arrow disabled}.
+% \StopEventually{\PrintChanges}
+% \iffalse
+%<*package>
+% \fi
+% \section{Implementation}
+% \subsection{Initialization and Package Options}
+%
+% This subsection highlights which are the package loaded and the \verb|tikzlibraries| needed.
+% \begin{macrocode}
+\RequirePackage{tikz}
+
+\RequirePackage{etoolbox}
+\RequirePackage{xparse}
+\RequirePackage{xstring}
+
+\usetikzlibrary{backgrounds,
+ calc,
+ fadings,
+ shadows,
+ shapes.arrows,
+ shapes.symbols
+}
+\pgfdeclarelayer{smart diagram arrow back}
+\pgfsetlayers{background,smart diagram arrow back,main}
+
+
+\def\usesmartdiagramlibrary{\pgfutil@ifnextchar[{\use@smartdiagramlibrary}{\use@@smartdiagramlibrary}}%}
+\def\use@smartdiagramlibrary[#1]{\use@@smartdiagramlibrary{#1}}
+\def\use@@smartdiagramlibrary#1{%
+ \edef\pgf@list{#1}%
+ \pgfutil@for\pgf@temp:=\pgf@list\do{%
+ \expandafter\pgfkeys@spdef\expandafter\pgf@temp\expandafter{\pgf@temp}%
+ \ifx\pgf@temp\pgfutil@empty
+ \else
+ \expandafter\ifx\csname smartdiagram@library@\pgf@temp @loaded\endcsname\relax%
+ \expandafter\global\expandafter\let\csname smartdiagram@library@\pgf@temp @loaded\endcsname=\pgfutil@empty%
+ \expandafter\edef\csname smartdiagram@library@#1@atcode\endcsname{\the\catcode`\@}
+ \expandafter\edef\csname smartdiagram@library@#1@barcode\endcsname{\the\catcode`\|}
+ \catcode`\@=11
+ \catcode`\|=12
+ \pgfutil@InputIfFileExists{smartdiagramlibrary\pgf@temp.code.tex}{}{
+ \PackageError{smartdiagram}{I did not find the smartdiagram library '\pgf@temp'.}{}
+ }%
+ \catcode`\@=\csname smartdiagram@library@#1@atcode\endcsname
+ \catcode`\|=\csname smartdiagram@library@#1@barcode\endcsname
+ \fi%
+ \fi
+ }%
+}
+
+\usesmartdiagramlibrary{core.definitions}
+\usesmartdiagramlibrary{core.styles}
+\usesmartdiagramlibrary{core.commands}
+% \end{macrocode}
+% \iffalse
+%</package>
+% \fi
+%
+% \iffalse
+%<*definitions>
+% \fi
+% \subsection{Keys and color declaration}
+% The predefined colors:
+% \begin{macrocode}
+\@namedef{color@1}{red!40}
+\@namedef{color@2}{cyan!40}
+\@namedef{color@3}{blue!40}
+\@namedef{color@4}{green!40}
+\@namedef{color@5}{orange!40}
+\@namedef{color@6}{yellow!40}
+\@namedef{color@7}{magenta!40}
+\@namedef{color@8}{brown!40}
+\@namedef{color@9}{violet!40}
+\@namedef{color@10}{teal!40}
+% \end{macrocode}
+% Basic shape definition and function to compute the height of the \diagram{priority descriptive diagram}:
+% \begin{macrocode}
+\tikzset{rnd rectangle/.style={rectangle,rounded corners}
+}
+
+\def\CalcHeight(#1,#2)#3{%
+\pgfpointdiff{\pgfpointanchor{#1}{south west}}{\pgfpointanchor{#2}{north west}}
+\pgfmathsetmacro{\myheight}{veclen(\pgf@x,\pgf@y)}
+\global\expandafter\edef\csname #3\endcsname{\myheight}
+}
+% \end{macrocode}
+% The key definition and the functions to set them:
+% \begin{macrocode}
+\pgfkeys{/smart diagram/.cd, module minimum width/.initial=2cm,
+ module minimum height/.initial={1cm},
+ module y sep/.initial={1.65},
+ module x sep/.initial={2.75},
+ descriptive items y sep/.initial={1.75},
+ text width/.initial={1.5cm},
+ description title width/.initial={1.5cm},
+ description text width/.initial={5cm},
+ description title text width/.initial={1.25cm},
+ description title font/.initial={\small},
+ description font/.initial={\small},
+ description width/.initial={5.5cm},
+ font/.initial={\small},
+ border color/.initial={gray},
+ circular distance/.initial={2.75cm},
+ arrow line width/.initial={0.1cm},
+ module shape/.initial={rnd rectangle},
+ insert decoration/.initial={},
+ arrow tip/.initial={stealth},
+ arrow color/.initial={gray},
+ bubble center node size/.initial={4cm},
+ bubble center node font/.initial={\large},
+ bubble center node color/.initial={lightgray!60},
+ distance center/other bubbles/.initial=0.8cm,
+ distance text center bubble/.initial={0.5cm},
+ bubble fill opacity/.initial={0.5},
+ bubble node size/.initial={2.5cm},
+ bubble text opacity/.initial={0.8},
+ bubble node font/.initial={\normalfont},
+ planet size/.initial={2.5cm},
+ planet color/.initial={lightgray!60},
+ planet font/.initial={\large},
+ distance planet-connection/.initial={0.1cm},
+ distance planet-text/.initial={0.5cm},
+ planet text width/.initial={1.75cm},
+ satellite size/.initial={1.75cm},
+ satellite font/.initial={\normalfont},
+ satellite fill opacity/.initial={0.5},
+ satellite text opacity/.initial={0.8},
+ satellite text width/.initial={1.5cm},
+ distance satellite-connection/.initial={0.075cm},
+ connection line width/.initial={0.1cm},
+ connection color/.initial={gray},
+ distance planet-satellite/.initial={3.5cm},
+ priority arrow width/.initial={1.5cm},
+ priority arrow head extend/.initial={0.15cm},
+ priority tick size/.initial={5pt},
+ priority arrow height advance/.initial={2cm},
+ sequence item height/.initial={1cm},
+ sequence item width/.initial={2cm},
+ sequence item border color/.initial={gray},
+ sequence item border size/.initial={1.75\pgflinewidth},
+ sequence item font size/.initial={\normalfont},
+ sequence item fill opacity/.initial={1},
+ sequence item text opacity/.initial={1},
+ sequence item text width/.initial={1.9cm},
+ sequence item text color/.initial={black},
+ sequence item uniform color/.initial={gray!60!black},
+ arrow style/.initial={<-},
+ text color/.initial={black},
+ back arrow distance/.initial={0.5},
+}%
+
+\pgfkeys{/smart diagram/.cd, module minimum width/.get=\sm@core@modulewidth,
+ module minimum height/.get=\sm@core@moduleheight,
+ module y sep/.get=\sm@core@moduleysep,
+ module x sep/.get=\sm@core@modulexsep,
+ descriptive items y sep/.get=\sm@core@descriptiveitemsysep,
+ text width/.get=\sm@core@moduletextwidth,
+ description title width/.get=\sm@core@descriptiontitlewidth,
+ description text width/.get=\sm@core@descriptiontextwidth,
+ description title text width/.get=\sm@core@descriptiontitletextwidth,
+ description title font/.get=\sm@core@descriptiontitlefontsize,
+ description font/.get=\sm@core@descriptionfontsize,
+ description width/.get=\sm@core@descriptionwidth,
+ font/.get=\sm@core@modulefontsize,
+ border color/.get=\sm@core@bordercolor,
+ circular distance/.get=\sm@core@circulardistance,
+ arrow line width/.get=\sm@core@arrowlinewidth,
+ module shape/.get=\sm@core@moduleshape,
+ insert decoration/.get=\sm@core@borderdecoration,
+ arrow tip/.get=\sm@core@arrowtip,
+ arrow color/.get=\sm@core@arrowcolor,
+ bubble center node size/.get=\sm@core@bubblecenternodesize,
+ bubble center node font/.get=\sm@core@bubblecenternodefont,
+ bubble center node color/.get=\sm@core@bubblecenternodecolor,
+ distance center/other bubbles/.get=\sm@core@distancecenterotherbubbles,
+ distance text center bubble/.get=\sm@core@distancetextcenterbubble,
+ bubble fill opacity/.get=\sm@core@bubblefillopacity,
+ bubble node size/.get=\sm@core@bubblenodesize,
+ bubble text opacity/.get=\sm@core@bubbletextopacity,
+ bubble node font/.get=\sm@core@bubblenodefont,
+ planet size/.get=\sm@core@planetminimumsize,
+ planet color/.get=\sm@core@planetcolor,
+ planet font/.get=\sm@core@planetfont,
+ distance planet-connection/.get=\sm@core@planetoutersep,
+ distance planet-text/.get=\sm@core@planetinnersep,
+ planet text width/.get=\sm@core@planettextwidth,
+ satellite size/.get=\sm@core@satelliteminimumsize,
+ satellite font/.get=\sm@core@satellitefont,
+ satellite fill opacity/.get=\sm@core@satellitefillopacity,
+ satellite text opacity/.get=\sm@core@satellitetextopacity,
+ satellite text width/.get=\sm@core@satellitetextwidth,
+ distance satellite-connection/.get=\sm@core@satelliteoutersep,
+ connection line width/.get=\sm@core@connectionlinewidth,
+ connection color/.get=\sm@core@connectioncolor,
+ distance planet-satellite/.get=\sm@core@distanceplanetsatellite,
+ priority arrow width/.get=\sm@core@priorityarrowwidth,
+ priority arrow head extend/.get=\sm@core@priorityarrowheadextend,
+ priority tick size/.get=\sm@core@prioritytick,
+ priority arrow height advance/.get=\sm@core@priorityarrowheightadvance,
+ sequence item height/.get=\sm@core@seqitemheight,
+ sequence item width/.get=\sm@core@seqitemwidth,
+ sequence item border color/.get=\sm@core@seqitembordercolor,
+ sequence item border size/.get=\sm@core@seqlinewidth,
+ sequence item font size/.get=\sm@core@seqitemfont,
+ sequence item fill opacity/.get=\sm@core@seqitemfillopacity,
+ sequence item text opacity/.get=\sm@core@seqitemtextopacity,
+ sequence item text width/.get=\sm@core@seqitemtextwidth,
+ sequence item text color/.get=\sm@core@seqitemtextcolor,
+ sequence item uniform color/.get=\sm@core@seqitemuniformcol,
+ arrow style/.get=\sm@core@arrowstyle,
+ text color/.get=\sm@core@textcolor,
+ back arrow distance/.get=\sm@core@backarrowdistance,
+}%
+% \end{macrocode}
+% The specific key to set the list of colors:
+% \begin{macrocode}
+\pgfkeys{/smart diagram/.cd, set color list/.code={%
+ \foreach \listitem [count=\i] in {#1}{%
+ \global\@namedef{color@\i\expandafter}\expandafter{\listitem}%
+ }%
+ }%
+}
+
+\pgfkeys{/smart diagram/.cd, uniform color list/.code args={#1 for #2 items}{%
+ \foreach \listitem [count=\i] in {1,...,#2}{%
+ \global\@namedef{color@\i\expandafter}\expandafter{#1}%
+ }%
+ }%
+}
+
+\pgfkeys{/smart diagram/.cd, use predefined color list/.code={%
+ \@namedef{color@1}{red!30}%
+ \@namedef{color@2}{cyan!30}%
+ \@namedef{color@3}{blue!30}%
+ \@namedef{color@4}{green!30}%
+ \@namedef{color@5}{orange!30}%
+ \@namedef{color@6}{yellow!30}%
+ \@namedef{color@7}{magenta!30}%
+ \@namedef{color@8}{brown!30}%
+ \@namedef{color@9}{violet!30}%
+ \@namedef{color@10}{teal!30}%
+ }
+}
+% \end{macrocode}
+% The specific key to disable the back arrow in the \diagram{flow diagram} and in the \diagram{flow diagram:horizontal}:
+% \begin{macrocode}
+\newif\ifbackarrowdisabled
+\pgfkeys{/smart diagram/.cd,
+ back arrow disabled/.is if=backarrowdisabled,
+ back arrow disabled=false,
+}
+% \end{macrocode}
+% The specific key to disable the final arrow in the \diagram{circular diagram} and in the \diagram{circular diagram: clockwise}:
+% \begin{macrocode}
+\newif\ifcircularfinalarrowdisabled
+\pgfkeys{/smart diagram/.cd,
+ circular final arrow disabled/.is if=circularfinalarrowdisabled,
+ circular final arrow disabled=false,
+}
+% \end{macrocode}
+% The command to activate the various keys:
+% \begin{macrocode}
+\NewDocumentCommand{\smartdiagramset}{m}{%
+ \pgfkeys{/smart diagram/.cd,#1}%
+ \pgfkeys{/smart diagram/.cd, module minimum width/.get=\sm@core@modulewidth,
+ module minimum height/.get=\sm@core@moduleheight,
+ module y sep/.get=\sm@core@moduleysep,
+ module x sep/.get=\sm@core@modulexsep,
+ descriptive items y sep/.get=\sm@core@descriptiveitemsysep,
+ text width/.get=\sm@core@moduletextwidth,
+ description title width/.get=\sm@core@descriptiontitlewidth,
+ description text width/.get=\sm@core@descriptiontextwidth,
+ description title text width/.get=\sm@core@descriptiontitletextwidth,
+ description title font/.get=\sm@core@descriptiontitlefontsize,
+ description font/.get=\sm@core@descriptionfontsize,
+ description width/.get=\sm@core@descriptionwidth,
+ font/.get=\sm@core@modulefontsize,
+ border color/.get=\sm@core@bordercolor,
+ circular distance/.get=\sm@core@circulardistance,
+ arrow line width/.get=\sm@core@arrowlinewidth,
+ module shape/.get=\sm@core@moduleshape,
+ insert decoration/.get=\sm@core@borderdecoration,
+ arrow tip/.get=\sm@core@arrowtip,
+ arrow color/.get=\sm@core@arrowcolor,
+ bubble center node size/.get=\sm@core@bubblecenternodesize,
+ bubble center node font/.get=\sm@core@bubblecenternodefont,
+ bubble center node color/.get=\sm@core@bubblecenternodecolor,
+ distance center/other bubbles/.get=\sm@core@distancecenterotherbubbles,
+ distance text center bubble/.get=\sm@core@distancetextcenterbubble,
+ bubble fill opacity/.get=\sm@core@bubblefillopacity,
+ bubble node size/.get=\sm@core@bubblenodesize,
+ bubble text opacity/.get=\sm@core@bubbletextopacity,
+ bubble node font/.get=\sm@core@bubblenodefont,
+ planet size/.get=\sm@core@planetminimumsize,
+ planet color/.get=\sm@core@planetcolor,
+ planet font/.get=\sm@core@planetfont,
+ distance planet-connection/.get=\sm@core@planetoutersep,
+ distance planet-text/.get=\sm@core@planetinnersep,
+ planet text width/.get=\sm@core@planettextwidth,
+ satellite size/.get=\sm@core@satelliteminimumsize,
+ satellite font/.get=\sm@core@satellitefont,
+ satellite fill opacity/.get=\sm@core@satellitefillopacity,
+ satellite text opacity/.get=\sm@core@satellitetextopacity,
+ satellite text width/.get=\sm@core@satellitetextwidth,
+ distance satellite-connection/.get=\sm@core@satelliteoutersep,
+ connection line width/.get=\sm@core@connectionlinewidth,
+ connection color/.get=\sm@core@connectioncolor,
+ distance planet-satellite/.get=\sm@core@distanceplanetsatellite,
+ priority arrow width/.get=\sm@core@priorityarrowwidth,
+ priority arrow head extend/.get=\sm@core@priorityarrowheadextend,
+ priority tick size/.get=\sm@core@prioritytick,
+ priority arrow height advance/.get=\sm@core@priorityarrowheightadvance,
+ sequence item height/.get=\sm@core@seqitemheight,
+ sequence item width/.get=\sm@core@seqitemwidth,
+ sequence item border color/.get=\sm@core@seqitembordercolor,
+ sequence item border size/.get=\sm@core@seqlinewidth,
+ sequence item font size/.get=\sm@core@seqitemfont,
+ sequence item fill opacity/.get=\sm@core@seqitemfillopacity,
+ sequence item text opacity/.get=\sm@core@seqitemtextopacity,
+ sequence item text width/.get=\sm@core@seqitemtextwidth,
+ sequence item text color/.get=\sm@core@seqitemtextcolor,
+ sequence item uniform color/.get=\sm@core@seqitemuniformcol,
+ arrow style/.get=\sm@core@arrowstyle,
+ text color/.get=\sm@core@textcolor,
+ back arrow distance/.get=\sm@core@backarrowdistance,
+ }%
+}%
+% \end{macrocode}
+% Key to let the sequence color be uniform:
+% \begin{macrocode}
+\pgfkeys{/smart diagram/.cd,%
+ uniform sequence color/.is choice,%
+ uniform sequence color/true/.code={%
+ \tikzset{sequence item/.append style={%
+ fill=\sm@core@seqitemuniformcol,
+ },%
+ }%
+ },%
+ uniform sequence color/false/.style={sequence item},%
+ uniform sequence color/.default=false,%
+}%
+% \end{macrocode}
+% Key to let the connection planet satellite color be uniform:
+% \begin{macrocode}
+\pgfkeys{/smart diagram/.cd,%
+ uniform connection color/.is choice,%
+ uniform connection color/true/.code={%
+ \tikzset{connection planet satellite/.append style={%
+ \sm@core@connectioncolor
+ },%
+ }%
+ },%
+ uniform connection color/false/.style={connection planet satellite},%
+ uniform connection color/.default=false,%
+}%
+% \end{macrocode}
+% Key to let the arrow color be uniform:
+% \begin{macrocode}
+\pgfkeys{/smart diagram/.cd,%
+ uniform arrow color/.is choice,%
+ uniform arrow color/true/.code={%
+ \tikzset{diagram arrow type/.append style={%
+ \sm@core@arrowcolor
+ },%
+ }%
+ },%
+ uniform arrow color/false/.style={diagram arrow type},%
+ uniform arrow color/.default=false,%
+}%
+
+% \end{macrocode}
+% \iffalse
+%</definitions>
+% \fi
+%
+% \iffalse
+%<*styles>
+% \fi
+% The fading style applied to the \diagram{priority descriptive diagram} and styles diagram definition:
+% \begin{macrocode}
+\tikzfading[name=priorityarrowfading,
+ bottom color=transparent!5,
+ top color=transparent!80
+]
+\tikzset{priority arrow fill/.style={
+ fill=gray,
+ path fading=priorityarrowfading
+ }
+}
+
+\tikzset{module/.style={%
+ \pgfkeysvalueof{/smart diagram/module shape},
+ thick,
+ draw=\sm@core@bordercolor,
+ top color=white,
+ bottom color=\col,
+ text=\sm@core@textcolor,
+ text width=\sm@core@moduletextwidth,
+ minimum width=\sm@core@modulewidth,
+ minimum height=\sm@core@moduleheight,
+ font=\sm@core@modulefontsize,
+ \sm@core@borderdecoration
+ },
+ diagram arrow type/.style={%
+ \sm@core@arrowstyle,
+ >=\sm@core@arrowtip,
+ line width=\sm@core@arrowlinewidth,
+ \col
+ },%
+}
+\tikzset{description title/.style={%
+ circle,
+ draw=\sm@core@bordercolor,
+ minimum width=\sm@core@descriptiontitlewidth,
+ anchor=east,
+ bottom color=\col,
+ top color=white!80!\col,
+ font=\sm@core@descriptiontitlefontsize,
+ text width=\sm@core@descriptiontitletextwidth,
+ \sm@core@borderdecoration,
+ },
+ description/.style={%
+ \pgfkeysvalueof{/smart diagram/module shape},
+ text width=\sm@core@descriptiontextwidth,
+ draw=\sm@core@bordercolor,
+ anchor=west,
+ minimum height=\sm@core@moduleheight,
+ minimum width=\sm@core@descriptionwidth,
+ bottom color=\col,
+ top color=white!80!\col,
+ font=\sm@core@descriptionfontsize,
+ \sm@core@borderdecoration,
+ }%
+}
+\tikzset{priority arrow/.style={
+ draw=\sm@core@bordercolor,
+ single arrow,
+ minimum height=\distancemodules,
+ minimum width=\sm@core@priorityarrowwidth,
+ priority arrow fill,
+ rotate=90,
+ single arrow head extend=\sm@core@priorityarrowheadextend,
+ anchor=west,
+ }
+}
+\tikzset{bubble center node/.style={
+ minimum size=\sm@core@bubblecenternodesize,
+ circle,
+ fill=\sm@core@bubblecenternodecolor,
+ font=\sm@core@bubblecenternodefont,
+ outer sep=\sm@core@distancecenterotherbubbles,
+ inner sep=\sm@core@distancetextcenterbubble,
+ },
+ bubble node/.style={
+ minimum size=\sm@core@bubblenodesize,
+ circle,
+ ultra thick,
+ font=\sm@core@bubblenodefont,
+ draw=white,
+ fill opacity=\sm@core@bubblefillopacity,
+ fill=\col,
+ text opacity=\sm@core@bubbletextopacity,
+ }
+}
+\tikzset{planet/.style={
+ minimum size=\sm@core@planetminimumsize,
+ circle,
+ fill=\sm@core@planetcolor,
+ font=\sm@core@planetfont,
+ outer sep=\sm@core@planetoutersep,
+ inner sep=\sm@core@planetinnersep,
+ text width=\sm@core@planettextwidth,
+ },
+ satellite/.style={
+ minimum size=\sm@core@satelliteminimumsize,
+ circle,
+ font=\sm@core@satellitefont,
+ fill opacity=\sm@core@satellitefillopacity,
+ fill=\col,
+ text opacity=\sm@core@satellitetextopacity,
+ text width=\sm@core@satellitetextwidth,
+ outer sep=\sm@core@satelliteoutersep,
+ },
+ connection planet satellite/.style={
+ ->,
+ line width=\sm@core@connectionlinewidth,
+ >=\sm@core@arrowtip,
+ \col,
+ }
+}
+
+\tikzset{sequence item/.style={
+ minimum height=\sm@core@seqitemheight,
+ minimum width=\sm@core@seqitemwidth,
+ signal,
+ signal from=west,
+ signal to=east,
+ draw=\sm@core@seqitembordercolor,
+ line width=\sm@core@seqlinewidth,
+ font=\sm@core@seqitemfont,
+ fill opacity=\sm@core@seqitemfillopacity,
+ fill=\col,
+ text opacity=\sm@core@seqitemtextopacity,
+ text width=\sm@core@seqitemtextwidth,
+ text=\sm@core@seqitemtextcolor,
+ }
+}
+% let the first word of the item be hypenate
+\tikzset{let hypenation/.style={%
+ execute at begin node={%
+ \hspace{0pt}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% The definition of the visibility style:
+% \begin{macrocode}
+\tikzset{%
+ sminvisible/.style={opacity=0,text opacity=0},
+ smvisible on/.style={smalt=#1{}{sminvisible}},
+ smalt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
+ },%
+}%
+% \end{macrocode}
+% \iffalse
+%</styles>
+% \fi
+%
+% \iffalse
+%<*commands>
+% \fi
+% \subsection{Commands}
+% Definition of the two commands. The diagrams:
+% \begin{macrocode}
+\NewDocumentCommand{\smartdiagram}{r[] m}{%
+ \StrCut{#1}{:}\diagramtype\option
+ \IfNoValueTF{#1}{% true-no value 1
+ \PackageError{smartdiagram}%
+ {Type of the diagram not inserted. Please insert it}%
+ {Example: \protect\smartdiagram[flow diagram]}}
+ {%false-no value 1
+ \IfStrEq{\diagramtype}{}{%
+ \PackageError{smartdiagram}{Type of the diagram not inserted. Please insert it}
+ {Example: \protect\smartdiagram[flow diagram]}
+ }{}
+ \IfStrEq{\diagramtype}{circular diagram}{% true-circular diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+
+ \foreach \smitem [count=\xi] in {#2} {\global\let\maxsmitem\xi}
+
+ \foreach \smitem [count=\xi] in {#2}{%
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \pgfmathtruncatemacro{\angle}{180+360/\maxsmitem*\xi}
+ }{% false-clockwise-circular diagram
+ \pgfmathtruncatemacro{\angle}{360/\maxsmitem*\xi}
+ }
+ \edef\col{\@nameuse{color@\xi}}
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \node[module,drop shadow] (module\xi)
+ at (-\angle:\sm@core@circulardistance) {\smitem };
+ }{% false-clockwise-circular diagram
+ \node[module,drop shadow] (module\xi)
+ at (\angle:\sm@core@circulardistance) {\smitem };
+ }
+ }%
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnum\xi=\maxsmitem
+ \ifcircularfinalarrowdisabled
+ \relax
+ \else
+ \pgfmathtruncatemacro{\xj}{mod(\xi, \maxsmitem) + 1)}
+ \edef\col{\@nameuse{color@\xj}}
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm]
+ (module\xj) to[bend right] (module\xi);
+ }{% false-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm]
+ (module\xj) to[bend left] (module\xi);
+ }
+ \fi
+ \else
+ \pgfmathtruncatemacro{\xj}{mod(\xi, \maxsmitem) + 1)}
+ \edef\col{\@nameuse{color@\xj}}
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm]
+ (module\xj) to[bend right] (module\xi);
+ }{% false-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm]
+ (module\xj) to[bend left] (module\xi);
+ }
+
+ \fi
+ }%
+ \end{tikzpicture}
+ }{}% end-circular diagram
+ \IfStrEq{\diagramtype}{flow diagram}{% true-flow diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+
+ \foreach \smitem [count=\xi] in {#2} {\global\let\maxsmitem\xi}
+
+ \foreach \smitem [count=\xi] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+ \IfStrEq{\option}{horizontal}{% true-horizontal-flow diagram
+ \path let \n1 = {int(0-\xi)}, \n2={0+\xi*\sm@core@modulexsep} in
+ node[module,drop shadow] (module\xi) at +(\n2,0) {\smitem};
+ }{% false-horizontal-flow diagram
+ \path let \n1 = {int(0-\xi)}, \n2={0-\xi*\sm@core@moduleysep} in
+ node[module,drop shadow] (module\xi) at +(0,\n2) {\smitem};
+ }
+ }%
+
+ \foreach \smitem [count=\xi] in {#2}{%
+ \pgfmathtruncatemacro{\xj}{mod(\xi, \maxsmitem) + 1)}
+ \edef\col{\@nameuse{color@\xj}}
+ \ifnum\xi<\maxsmitem
+ \begin{pgfonlayer}{smart diagram arrow back}
+ \draw[diagram arrow type] (module\xj) -- (module\xi);
+ \end{pgfonlayer}
+ \fi
+ % last arrow - not display it in background - check if disabled
+ \ifbackarrowdisabled
+ \relax
+ \else
+ \ifnum\xi=\maxsmitem
+ \IfStrEq{\option}{horizontal}{% true-horizontal-flow diagram
+ \tikzset{square arrow/.style={%
+ to path={-- ++(0,\sm@core@backarrowdistance) -| (\tikztotarget)}
+ }%
+ }%
+ \draw[diagram arrow type, square arrow]
+ (module\xj.north) to (module\xi.north);
+ }{% false-horizontal-flow diagram
+ \tikzset{square arrow/.style={%
+ to path={-- ++(\sm@core@backarrowdistance,0) |- (\tikztotarget)}
+ }%
+ }%
+ \draw[diagram arrow type,square arrow]
+ (module\xj.east) to (module\xi);
+ }%
+ \fi
+ \fi
+ }%
+ \end{tikzpicture}
+ }{}% end-flow diagram
+ \IfStrEq{\diagramtype}{descriptive diagram}{% true-descr. diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+ \foreach \subitem [count=\xii] in \smitem{%
+ \ifnumequal{\xii}{1}{% true
+ \node[description title,drop shadow]
+ (module-title\xi) at (0,0-\xi*\sm@core@descriptiveitemsysep) {\subitem};
+ }{}
+ \ifnumequal{\xii}{2}{% true
+ \node[description,drop shadow](module\xi)
+ at (0,0-\xi*\sm@core@descriptiveitemsysep) {\subitem};
+ }{}
+ }%
+ }%
+ \end{tikzpicture}
+ }{}% end-descr. diagram
+ \IfStrEq{\diagramtype}{bubble diagram}{% true-bubble diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \pgfmathtruncatemacro\actualnumitem{\maxsmitem-1}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumequal{\xi}{1}{ %true
+ \node[bubble center node](center bubble){\smitem};
+ }{%false
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \pgfmathtruncatemacro{\angle}{360/\actualnumitem*\xj}
+ \edef\col{\@nameuse{color@\xj}}
+ \node[bubble node] (module\xi)
+ at (center bubble.\angle) {\smitem };
+ }%
+ }%
+ \end{tikzpicture}
+ }{}%end-bubble diagram
+ \IfStrEq{\diagramtype}{constellation diagram}{% true-const diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \pgfmathtruncatemacro\actualnumitem{\maxsmitem-1}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumequal{\xi}{1}{ %true
+ \node[planet](planet){\smitem};
+ }{%false
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \pgfmathtruncatemacro{\angle}{360/\actualnumitem*\xj}
+ \edef\col{\@nameuse{color@\xj}}
+ \node[satellite] (satellite\xi)
+ at (\angle:\sm@core@distanceplanetsatellite) {\smitem };
+ \draw[connection planet satellite] (planet) -- (satellite\xi);
+ }%
+ }%
+ \end{tikzpicture}
+ }{}%end-const diagram
+ \IfStrEq{\diagramtype}{connected constellation diagram}{% true-conn const diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \pgfmathtruncatemacro\actualnumitem{\maxsmitem-1}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumequal{\xi}{1}{ %true
+ \node[planet](planet){\smitem};
+ }{%false
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \pgfmathtruncatemacro{\angle}{360/\actualnumitem*\xj}
+ \edef\col{\@nameuse{color@\xj}}
+ \node[satellite] (satellite\xj)
+ at (\angle:\sm@core@distanceplanetsatellite) {\smitem };
+ }%
+ }%
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumgreater{\xi}{1}{ %true
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \edef\col{\@nameuse{color@\xj}}
+ \pgfmathtruncatemacro{\xk}{mod(\xj,\actualnumitem) +1}
+ \path[connection planet satellite,-]
+ (satellite\xj) edge[bend right] (satellite\xk);
+ }{}
+ }%
+ \end{tikzpicture}
+ }{}%end-connected constellation diagram
+ \IfStrEq{\diagramtype}{priority descriptive diagram}{% true-priority descriptive diagram
+ \pgfmathparse{subtract(\sm@core@priorityarrowwidth,\sm@core@priorityarrowheadextend)}
+ \pgfmathsetmacro\sm@core@priorityticksize{\pgfmathresult/2}
+ \pgfmathsetmacro\arrowtickxshift{(\sm@core@priorityarrowwidth-\sm@core@priorityticksize)/2}
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+ \node[description,drop shadow](module\xi)
+ at (0,0+\xi*\sm@core@descriptiveitemsysep) {\smitem};
+ \draw[line width=\sm@core@prioritytick,\col]
+ ([xshift=-\arrowtickxshift pt]module\xi.base west)--
+ ($([xshift=-\arrowtickxshift pt]module\xi.base west)-(\sm@core@priorityticksize pt,0)$);
+ }%
+ \coordinate (A) at (module1);
+ \coordinate (B) at (module\maxsmitem);
+ \CalcHeight(A,B){heightmodules}
+ \pgfmathadd{\heightmodules}{\sm@core@priorityarrowheightadvance}
+ \pgfmathsetmacro{\distancemodules}{\pgfmathresult}
+ \pgfmathsetmacro\arrowxshift{\sm@core@priorityarrowwidth/2}
+ \begin{pgfonlayer}{background}
+ \node[priority arrow] at ([xshift=-\arrowxshift pt]module1.south west){};
+ \end{pgfonlayer}
+ \end{tikzpicture}
+ }{}% end-priority descriptive diagram
+ \IfStrEq{\diagramtype}{sequence diagram}{% true-sequence diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \x[count=\xi, count=\prevx from 0] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+ \ifnum\xi=1
+ \node[sequence item] (sequence-item\xi) {\x};
+ \else
+ \node[sequence item,anchor=west] (sequence-item\xi) at (sequence-item\prevx.east) {\x};
+ \fi
+ }
+ \end{tikzpicture}
+ }{}% end-sequence diagram
+}% end-no value 1
+}% end-command
+% \end{macrocode}
+% The command definition for the animated diagrams:
+% \begin{macrocode}
+\NewDocumentCommand{\smartdiagramanimated}{r[] m}{%
+ \StrCut{#1}{:}\diagramtype\option
+ \IfNoValueTF{#1}{% true-no value 1
+ \PackageError{smartdiagram}{Type of the diagram not inserted. Please insert it}
+ {Example: \protect\smartdiagram[flow diagram]}}
+ {%false-no value 1
+ \IfStrEq{\diagramtype}{}{%
+ \PackageError{smartdiagram}{Type of the diagram not inserted. Please insert it}
+ {Example: \protect\smartdiagram[flow diagram]}
+ }{}
+ \IfStrEq{\diagramtype}{circular diagram}{% true-circular diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2} {\global\let\maxsmitem\xi}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \pgfmathtruncatemacro{\angle}{180+360/\maxsmitem*\xi}
+ }{% false-clockwise-circular diagram
+ \pgfmathtruncatemacro{\angle}{360/\maxsmitem*\xi}
+ }
+ \edef\col{\@nameuse{color@\xi}}
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \node[module,
+ drop shadow={smvisible on=<\xi->},
+ smvisible on=<\xi->] (module\xi)
+ at (-\angle:\sm@core@circulardistance) {\smitem};
+ }{% false-clockwise-circular diagram
+ \node[module,
+ drop shadow={smvisible on=<\xi->},
+ smvisible on=<\xi->] (module\xi)
+ at (\angle:\sm@core@circulardistance) {\smitem};
+ }
+ }%
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnum\xi=\maxsmitem
+ \ifcircularfinalarrowdisabled
+ \relax
+ \else
+ \pgfmathtruncatemacro{\xj}{mod(\xi, \maxsmitem) + 1)}
+ \pgfmathtruncatemacro{\adv}{\xi + 1)}
+ \edef\col{\@nameuse{color@\xj}}
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm,
+ smvisible on=<\adv->]
+ (module\xj) to[bend right] (module\xi);
+ }{% false-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm,
+ smvisible on=<\adv->]
+ (module\xj) to[bend left] (module\xi);
+ }
+ \fi
+ \else
+ \pgfmathtruncatemacro{\xj}{mod(\xi, \maxsmitem) + 1)}
+ \pgfmathtruncatemacro{\adv}{\xi + 1)}
+ \edef\col{\@nameuse{color@\xj}}
+ \IfStrEq{\option}{clockwise}{% true-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm,
+ smvisible on=<\adv->]
+ (module\xj) to[bend right] (module\xi);
+ }{% false-clockwise-circular diagram
+ \draw[diagram arrow type,shorten <=0.3cm,shorten >=0.3cm,
+ smvisible on=<\adv->]
+ (module\xj) to[bend left] (module\xi);
+ }
+
+ \fi
+ }%
+ \end{tikzpicture}
+ }{}% end-circular diagram
+ \IfStrEq{\diagramtype}{flow diagram}{% true-flow diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+
+ \foreach \smitem [count=\xi] in {#2} {\global\let\maxsmitem\xi}
+
+ \foreach \smitem [count=\xi] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+ \IfStrEq{\option}{horizontal}{% true-horizontal-flow diagram
+ \path let \n1 = {int(0-\xi)}, \n2={0+\xi*\sm@core@modulexsep}
+ in node[module,drop shadow={smvisible on=<\xi->},
+ smvisible on=<\xi->] (module\xi) at +(\n2,0) {\smitem};
+ }{% false-horizontal-flow diagram
+ \path let \n1 = {int(0-\xi)}, \n2={0-\xi*\sm@core@moduleysep}
+ in node[module,drop shadow={smvisible on=<\xi->},
+ smvisible on=<\xi->] (module\xi) at +(0,\n2) {\smitem};
+ }
+ }%
+
+ \foreach \smitem [count=\xi] in {#2}{%
+ \pgfmathtruncatemacro{\xj}{mod(\xi, \maxsmitem) + 1)}
+ \edef\col{\@nameuse{color@\xj}}
+ \ifnum\xi<\maxsmitem
+ \begin{pgfonlayer}{smart diagram arrow back}
+ \draw[diagram arrow type,smvisible on=<\xi->]
+ (module\xj) -- (module\xi);
+ \end{pgfonlayer}
+ \fi
+ % last arrow - not display it in background - check if disabled
+ \ifbackarrowdisabled
+ \relax
+ \else
+ \ifnum\xi=\maxsmitem
+ \IfStrEq{\option}{horizontal}{% true-horizontal-flow diagram
+ \tikzset{square arrow/.style={
+ to path={-- ++(0,\sm@core@backarrowdistance) -| (\tikztotarget)}
+ }
+ }
+ \draw[diagram arrow type, square arrow,smvisible on=<\xi->]
+ (module\xj.north) to (module\xi.north);
+ }{% false-horizontal-flow diagram
+ \tikzset{square arrow/.style={
+ to path={-- ++(\sm@core@backarrowdistance,0) |- (\tikztotarget)}
+ }
+ }
+ \draw[diagram arrow type,square arrow,smvisible on=<\xi->]
+ (module\xj.east) to (module\xi);
+ }
+ \fi
+ \fi
+ }%
+ \end{tikzpicture}
+ }{}% end-flow diagram
+ \IfStrEq{\diagramtype}{descriptive diagram}{% true-descriptive diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+
+ \foreach \subitem [count=\xii] in \smitem{%
+ \pgfmathtruncatemacro\subitemvisible{\xi}
+ \ifnumequal{\xii}{1}{% true
+ \node[description title,drop shadow, smvisible on=<\subitemvisible->]
+ (module-title\xi) at (0,0-\xi*\sm@core@descriptiveitemsysep) {\subitem};\pause
+ }{}
+ \ifnumequal{\xii}{2}{% true
+ \node[description,drop shadow,smvisible on=<\subitemvisible->]
+ (module\xi)at (0,0-\xi*\sm@core@descriptiveitemsysep) {\subitem};\pause
+ }{}
+ }%
+ }%
+ \end{tikzpicture}
+ }{}% end-descriptive diagram
+ \IfStrEq{\diagramtype}{bubble diagram}{% true-bubble diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \pgfmathtruncatemacro\actualnumitem{\maxsmitem-1}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumequal{\xi}{1}{ %true
+ \node[bubble center node, smvisible on=<\xi->](center bubble){\smitem};
+ }{%false
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \pgfmathtruncatemacro{\angle}{360/\actualnumitem*\xj}
+ \edef\col{\@nameuse{color@\xj}}
+ \node[bubble node, smvisible on=<\xi->](module\xi)
+ at (center bubble.\angle) {\smitem };
+ }%
+ }%
+ \end{tikzpicture}
+ }{}%end-bubble diagram
+ \IfStrEq{\diagramtype}{constellation diagram}{% true-const diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \pgfmathtruncatemacro\actualnumitem{\maxsmitem-1}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumequal{\xi}{1}{ %true
+ \node[planet, smvisible on=<\xi->](planet){\smitem};
+ }{%false
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \pgfmathtruncatemacro{\angle}{360/\actualnumitem*\xj}
+ \edef\col{\@nameuse{color@\xj}}
+ \node[satellite, smvisible on=<\xi->] (satellite\xi)
+ at (\angle:\sm@core@distanceplanetsatellite) {\smitem };
+ \draw[connection planet satellite, smvisible on=<\xi->]
+ (planet) -- (satellite\xi);
+ }%
+ }%
+ \end{tikzpicture}
+ }{}%end-constellation diagram
+ \IfStrEq{\diagramtype}{connected constellation diagram}{% true-conn const diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \pgfmathtruncatemacro\actualnumitem{\maxsmitem-1}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumequal{\xi}{1}{ %true
+ \node[planet,smvisible on=<\xi->](planet){\smitem};
+ }{%false
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \pgfmathtruncatemacro{\angle}{360/\actualnumitem*\xj}
+ \edef\col{\@nameuse{color@\xj}}
+ \node[satellite,smvisible on=<\xi->] (satellite\xj)
+ at (\angle:\sm@core@distanceplanetsatellite) {\smitem };
+ }%
+ }%
+ \foreach \smitem [count=\xi] in {#2}{%
+ \ifnumgreater{\xi}{1}{ %true
+ \pgfmathtruncatemacro{\xj}{\xi-1}
+ \edef\col{\@nameuse{color@\xj}}
+ \pgfmathtruncatemacro{\xk}{mod(\xj,\actualnumitem) +1}
+ \pgfmathtruncatemacro{\smvisible}{\xi+1}
+ \path[connection planet satellite,-,smvisible on=<\smvisible->]
+ (satellite\xj) edge[bend right] (satellite\xk);
+ }{}
+ }%
+ \end{tikzpicture}
+ }{}%end-connected constellation diagram
+ \IfStrEq{\diagramtype}{priority descriptive diagram}{% true-priority descriptive diagram
+ \pgfmathparse{subtract(\sm@core@priorityarrowwidth,\sm@core@priorityarrowheadextend)}
+ \pgfmathsetmacro\sm@core@priorityticksize{\pgfmathresult/2}
+ \pgfmathsetmacro\arrowtickxshift{(\sm@core@priorityarrowwidth-\sm@core@priorityticksize)/2}
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \smitem [count=\xi] in {#2}{\global\let\maxsmitem\xi}
+ \foreach \smitem [count=\xi] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+ \pgfmathtruncatemacro\smvisible{\xi+1}
+ \node[description,drop shadow={smvisible on=<\smvisible->},smvisible on=<\smvisible->]
+ (module\xi) at (0,0+\xi*\sm@core@descriptiveitemsysep) {\smitem};
+ \draw[line width=\sm@core@prioritytick,\col,smvisible on=<\smvisible->]
+ ([xshift=-\arrowtickxshift pt]module\xi.base west)--
+ ($([xshift=-\arrowtickxshift pt]module\xi.base west)-(\sm@core@priorityticksize pt,0)$);
+ }%
+ \coordinate (A) at (module1);
+ \coordinate (B) at (module\maxsmitem);
+ \CalcHeight(A,B){heightmodules}
+ \pgfmathadd{\heightmodules}{\sm@core@priorityarrowheightadvance}
+ \pgfmathsetmacro{\distancemodules}{\pgfmathresult}
+ \pgfmathsetmacro\arrowxshift{\sm@core@priorityarrowwidth/2}
+ \begin{pgfonlayer}{background}
+ \node[priority arrow] at ([xshift=-\arrowxshift pt]module1.south west){};
+ \end{pgfonlayer}
+ \end{tikzpicture}
+ }{}% end-priority descriptive diagram
+ \IfStrEq{\diagramtype}{sequence diagram}{% true-sequence diagram
+ \begin{tikzpicture}[every node/.style={align=center,let hypenation}]
+ \foreach \x[count=\xi, count=\prevx from 0] in {#2}{%
+ \edef\col{\@nameuse{color@\xi}}
+ \ifnum\xi=1
+ \node[sequence item,smvisible on=<\xi->] (sequence-item\xi) {\x};
+ \else
+ \node[sequence item,anchor=west,smvisible on=<\xi->]
+ (sequence-item\xi) at (sequence-item\prevx.east) {\x};
+ \fi
+ }
+ \end{tikzpicture}
+ }{}% end-sequence diagram
+ }% end-no value 1
+}% end-command
+% \end{macrocode}
+%
+% \iffalse
+%</commands>
+% \fi
+%
+% \iffalse
+%<*additions>
+% \fi
+% \subsection{Library Additions}
+% The library at first loads the Ti\textit{k}Z library \library{positioning}.
+% \begin{macrocode}
+\usetikzlibrary{positioning}
+% \end{macrocode}
+% Key definition:
+% \begin{macrocode}
+\pgfkeys{/smart diagram/additions/.cd,
+ additional item shape/.initial=\pgfkeysvalueof{/smart diagram/module shape},
+ additional item shape/.get=\sm@additions@additionalitemshape,
+ additional item shape/.store in=\sm@additions@additionalitemshape,
+ additional item border color/.initial=none,
+ additional item border color/.get=\sm@additions@additionalitembordercolor,
+ additional item border color/.store in=\sm@additions@additionalitembordercolor,
+ additional item bottom color/.initial=white,
+ additional item bottom color/.get=\sm@additions@additionalitembottomcolor,
+ additional item bottom color/.store in=\sm@additions@additionalitembottomcolor,
+ additional item fill color/.initial=none,
+ additional item fill color/.get=\sm@additions@additionalitemfillcolor,
+ additional item fill color/.store in=\sm@additions@additionalitemfillcolor,
+ additional item text width/.initial=1.75cm,
+ additional item text width/.get=\sm@additions@additionalitemtextwidth,
+ additional item text width/.store in=\sm@additions@additionalitemtextwidth,
+ additional item width/.initial=2cm,
+ additional item width/.get=\sm@additions@additionalitemwidth,
+ additional item width/.store in=\sm@additions@additionalitemwidth,
+ additional item height/.initial=1cm,
+ additional item height/.get=\sm@additions@additionalitemheight,
+ additional item height/.store in=\sm@additions@additionalitemheight,
+ additional item font/.initial=\normalfont,
+ additional item font/.get=\sm@additions@additionalitemfont,
+ additional item font/.store in=\sm@additions@additionalitemfont,
+ additional item border decoration/.initial={},
+ additional item border decoration/.get=\sm@additions@additionalitemdecoration,
+ additional item border decoration/.store in=\sm@additions@additionalitemdecoration,
+ additional item offset/.initial={0.25cm},
+ additional item offset/.get=\sm@additions@additionalitemoffset,
+ additional item offset/.store in=\sm@additions@additionalitemoffset,
+ additional item fill opacity/.initial={1},
+ additional item fill opacity/.get=\sm@additions@additionalitemfillopacity,
+ additional item fill opacity/.store in=\sm@additions@additionalitemfillopacity,
+ additional item text opacity/.initial={1},
+ additional item text opacity/.get=\sm@additions@additionalitemtextopacity,
+ additional item text opacity/.store in=\sm@additions@additionalitemtextopacity,
+ additional arrow tip/.initial={stealth},
+ additional arrow tip/.get=\sm@additions@additionalarrowtip,
+ additional arrow tip/.store in=\sm@additions@additionalarrowtip,
+ additional arrow line width/.initial={0.1cm},
+ additional arrow line width/.get=\sm@additions@additionalarrowlinewidth,
+ additional arrow line width/.store in=\sm@additions@additionalarrowlinewidth,
+ additional arrow color/.initial={gray},
+ additional arrow color/.get=\sm@additions@additionalarrowcolor,
+ additional arrow color/.store in=\sm@additions@additionalarrowcolor,
+ additional arrow style/.initial={->},
+ additional arrow style/.get=\sm@additions@additionalarrowstyle,
+ additional arrow style/.store in=\sm@additions@additionalarrowstyle,
+ additional item shadow/.initial={},
+ additional item shadow/.get=\sm@additions@additionalitemshadow,
+ additional item shadow/.store in=\sm@additions@additionalitemshadow,
+}
+
+\newif\ifconnectionsdisabled
+\pgfkeys{/smart diagram/additions/.cd,
+ additional connections disabled/.is if=connectionsdisabled,
+ additional connections disabled=true,
+}
+
+\pgfkeys{/smart diagram/.cd,
+ additions/.style={/smart diagram/additions/.cd,#1}%
+}
+% \end{macrocode}
+% Style definition; the \texttt{additional item} style comprises lot of usual Ti\textit{k}Z options: it possible to select a coloring with a vertical shading or an uniform filling.
+% \begin{macrocode}
+\tikzset{additional item/.style={
+ align=center,
+ \sm@additions@additionalitemshape,
+ thick,
+ draw=\sm@additions@additionalitembordercolor,
+ top color=white,
+ bottom color=\sm@additions@additionalitembottomcolor,
+ postaction={fill=\sm@additions@additionalitemfillcolor},
+ text width=\sm@additions@additionalitemtextwidth,
+ minimum width=\sm@additions@additionalitemwidth,
+ minimum height=\sm@additions@additionalitemheight,
+ font=\sm@additions@additionalitemfont,
+ fill opacity=\sm@additions@additionalitemfillopacity,
+ text opacity=\sm@additions@additionalitemtextopacity,
+ \sm@additions@additionalitemshadow,
+ \sm@additions@additionalitemdecoration
+ },
+ additional item arrow type/.style={
+ \sm@additions@additionalarrowstyle,
+ >=\sm@additions@additionalarrowtip,
+ line width=\sm@additions@additionalarrowlinewidth,
+ \sm@additions@additionalarrowcolor
+ },
+}
+% \end{macrocode}
+% Command definition; at first the diagram is created with the usual command, then the foreach iterates in order to get additions. The additions' strings are cut by means of the package xstring and its macro \cs{StrCut}. Of course, to all the tikzpictures, the option \texttt{remember picture} is added.
+% \begin{macrocode}
+\NewDocumentCommand{\smartdiagramadd}{r[] m m}{
+\tikzstyle{every picture}+=[remember picture]
+\smartdiagram[#1]{#2}
+\begin{tikzpicture}[remember picture,overlay,
+ every node/.style={align=center,let hypenation}]
+\foreach \smitem [count=\xi] in {#2} {\global\let\numitems\xi}
+\foreach \smitem[count=\xi] in {#3}{
+\StrCut{\smitem}{/}\pos\textitem
+\StrCut{\pos}{\space of\space}\point\modulenum
+ \node[additional item,
+ \point=\sm@additions@additionalitemoffset of \modulenum]
+ (additional-module\xi) {\textitem};
+ \ifconnectionsdisabled
+ \relax
+ \else
+ \begin{pgfonlayer}{smart diagram arrow back}
+ \draw[additional item arrow type]
+ (additional-module\xi) -- (\modulenum);
+ \end{pgfonlayer}
+ \fi
+}
+\end{tikzpicture}
+}
+% \end{macrocode}
+% Definition of the command to connect additions with diagram modules:
+% \begin{macrocode}
+\NewDocumentCommand{\smartdiagramconnect}{m m}{%
+ \begin{tikzpicture}[remember picture,overlay]
+ \foreach \start/\end in {#2}
+ \draw[additional item arrow type,#1]
+ (\start) -- (\end);
+ \end{tikzpicture}
+}
+% \end{macrocode}
+% \iffalse
+%</additions>
+% \fi
+%
+% \Finale
+
+\endinput
diff --git a/graphics/pgf/contrib/smartdiagram/smartdiagram.ins b/graphics/pgf/contrib/smartdiagram/smartdiagram.ins
new file mode 100644
index 0000000000..7695a6c55f
--- /dev/null
+++ b/graphics/pgf/contrib/smartdiagram/smartdiagram.ins
@@ -0,0 +1,99 @@
+%%
+%% This is file `smartdiagram.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% smartdiagram.dtx (with options: `install')
+%% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%% smartdiagram --- Automatic creation of smart diagrams from lists of items.
+%%
+%% E-mail: claudio <dot> fiandrino <at> gmail <dot> com
+%%
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+%%
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+smartdiagram --- Automatic creation of smart diagrams from lists of items.
+
+E-mail: claudio <dot> fiandrino <at> gmail <dot> com
+
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+
+\endpreamble
+\postamble
+
+Copyright (C) 2012-2013 by Claudio Fiandrino
+E-mail: <claudio <dot> fiandrino <at> gmail <dot> com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Claudio Fiandrino.
+
+This work consists of the file smartdiagram.dtx
+and the derived files smartdiagram.ins,
+ smartdiagram.pdf,
+ smartdiagramlibrarycore.definitions.code.tex,
+ smartdiagramlibrarycore.styles.code.tex,
+ smartdiagramlibrarycore.commands.code.tex
+ smartdiagramlibraryadditions.code.tex and
+ smartdiagram.sty.
+
+\endpostamble
+\usedir{tex/latex/smartdiagram}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\generate{
+ \file{smartdiagramlibrarycore.definitions.code.tex}{\from{\jobname.dtx}{definitions}}
+}
+\generate{
+ \file{smartdiagramlibrarycore.styles.code.tex}{\from{\jobname.dtx}{styles}}
+}
+\generate{
+ \file{smartdiagramlibrarycore.commands.code.tex}{\from{\jobname.dtx}{commands}}
+}
+\generate{
+ \file{smartdiagramlibraryadditions.code.tex}{\from{\jobname.dtx}{additions}}
+}
+\endbatchfile
+
+
+%%
+%% Copyright (C) 2012-2013 by Claudio Fiandrino
+%% E-mail: <claudio <dot> fiandrino <at> gmail <dot> com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Claudio Fiandrino.
+%%
+%% This work consists of the file smartdiagram.dtx
+%% and the derived files smartdiagram.ins,
+%% smartdiagram.pdf,
+%% smartdiagramlibrarycore.definitions.code.tex,
+%% smartdiagramlibrarycore.styles.code.tex,
+%% smartdiagramlibrarycore.commands.code.tex
+%% smartdiagramlibraryadditions.code.tex and
+%% smartdiagram.sty.
+%%
+%%
+%% End of file `smartdiagram.ins'.
diff --git a/graphics/pgf/contrib/smartdiagram/smartdiagram.pdf b/graphics/pgf/contrib/smartdiagram/smartdiagram.pdf
new file mode 100644
index 0000000000..2c8b23c98f
--- /dev/null
+++ b/graphics/pgf/contrib/smartdiagram/smartdiagram.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spath3/README b/graphics/pgf/contrib/spath3/README
new file mode 100644
index 0000000000..a9d1fe6210
--- /dev/null
+++ b/graphics/pgf/contrib/spath3/README
@@ -0,0 +1,9 @@
+----------------------------------------------------------------
+spath3 --- LaTeX3 functions for manipulating PGF soft paths
+E-mail: stacey@math.ntnu.no
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package defines some functions used to manipulate PGFs soft paths.
+As applications of its use, included are a package for drawing calligraphic paths and a package for drawing knot diagrams.
diff --git a/graphics/pgf/contrib/spath3/calligraphy_doc.pdf b/graphics/pgf/contrib/spath3/calligraphy_doc.pdf
new file mode 100644
index 0000000000..12a0313d8a
--- /dev/null
+++ b/graphics/pgf/contrib/spath3/calligraphy_doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spath3/calligraphy_doc.tex b/graphics/pgf/contrib/spath3/calligraphy_doc.tex
new file mode 100644
index 0000000000..c1b88c9e8e
--- /dev/null
+++ b/graphics/pgf/contrib/spath3/calligraphy_doc.tex
@@ -0,0 +1,258 @@
+\immediate\write18{tex spath3.dtx}
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{trace}
+\usepackage{lmodern}
+\usepackage{morefloats}
+\usepackage{tikz}
+\usetikzlibrary{decorations.pathreplacing,calligraphy,matrix}
+\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\providecommand*{\url}{\texttt}
+\GetFileInfo{spath3.sty}
+
+\title{The \textsf{calligraphy} Package: Documentation}
+\author{Andrew Stacey \\ \url{stacey@math.ntnu.no}}
+\date{\fileversion~from \filedate}
+
+\begin{document}
+
+\maketitle
+% \section{Introduction}
+The \Verb+calligraphy+ TikZ library is designed to enable calligraphic style drawings in TikZ.
+The idea is to be able to ``stroke'' a line with a ``pen''.
+As a simple example, compare the two lines in the following picture.
+
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\pen (-135:.25) -- (45:.25);
+\draw[line width=.5cm] (0,0) .. controls +(45:1) and +(-135:1) .. ++(3,0);
+\calligraphy (0,-1) .. controls +(45:1) and +(-135:1) .. ++(3,0);
+\end{tikzpicture}
+\end{center}
+\end{example}
+
+The paths are identical in definition but the first is drawn using the standard TikZ path with a line width of .5cm.
+The second is ``stroked'' with a calligraphic pen of width .5cm angled at 45 degrees.
+\section{How It Works}
+To know how to use this library, it is worth knowing a little about how it works.
+A ``pen'' is a path, as is the line that is the template for the pen stroke.
+The two paths are joined together to form a region which is filled.
+Thus in constructing the example given in the introduction, the following path is built.
+\begin{center}
+\begin{tikzpicture}
+\draw (0,-1) .. controls +(45:1) and +(-135:1) .. node (op) {} ++(3,0) -- node (pp) {} ++(45:.5) .. controls +(-135:1) and +(45:1) .. node (opr) {} ++(-3,0) -- node (ppr) {} (0,-1);
+\draw[<-] (op) -- ++(0,-.5) node[anchor=north] {original path};
+\draw[<-] (pp) -- ++(.5,0) node[anchor=west] {pen path};
+\draw[<-] (opr) -- ++(0,.5) node[anchor=south] {original path reversed};
+\draw[<-] (ppr) -- ++(-.5,0) node[anchor=east] {pen path reversed};
+\end{tikzpicture}
+\end{center}
+What is important to note about this is that the ``pen'' isn't \emph{actually} dragged along the path, it is merely a simulation.
+This can be shown with the following simple example.
+The first is a continuous path that goes past the angle of the pen and thus the upstroke would involve pushing the pen.
+The second is how it is meant to be done, the second line is drawn from top to bottom.
+However, as the direction of the path isn't important, the same effect can be obtained by ``lifting the nib'' between the lines.
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\pen (-135:.125) -- (45:.125);
+\calligraphy (0,0) -- (1,0) -- (1,1);
+\calligraphy (2,0) -- (3,0) (3,1) -- (3,0);
+\calligraphy (4,0) -- (5,0) +(0,0) -- (5,1);
+\end{tikzpicture}
+\end{center}
+\end{example}
+It should work as expected providing the following golden rule is not violated:
+\begin{quotation}
+Never \emph{push} a calligraphic pen.
+\end{quotation}
+This is good advice for ordinary calligraphy as well, so a path that is realisable as an honest calligraphic path should be fine with this library.
+Actually since, as remarked above, the direction of the path isn't important, a more accurate golden rule would be that one should never swap from pushing to pulling or vice versa without lifting the pen off the paper; but that isn't as succinct.
+The paths for both pens and templates can be reasonably complicated.
+They can contain gaps, but should not contain closed paths, nor rectangles.
+The implementation works by breaking a path into its constituent pieces (broken up by ``move to''s) and working bit by bit.
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\pen (-135:.25) -- (-135:.125) (45:.125) -- (45:.25);
+\calligraphy (0,0) .. controls +(45:1) and +(-135:1) .. +(3,0) ++(1.5,0) .. controls +(-135:2) and +(45:2) .. +(0,-4) (0,-4) .. controls +(45:1) and +(-135:1) .. +(3,0);
+\end{tikzpicture}
+\end{center}
+\end{example}
+\section{Copperplate}
+Copperplate pens are somewhat special.
+They are ``thin'' so don't need the same treatment as a ``thick'' pen, but one should be able to vary the pressure with a copperplate pen to get a variation of thickness.
+Specifying a copperplate pen is straightforward: it is a pen with no thickness.
+\begin{example}
+\begin{center}
+\begin{tikzpicture}[line width=2pt]
+\pen (0,0);
+\calligraphy[heavy] (0,0) .. controls +(45:1) and +(-135:1) .. +(3,0) ++(1.5,0) .. controls +(-135:2) and +(45:2) .. +(0,-3) (0,-3) .. controls +(45:1) and +(-135:1) .. +(3,0);
+\calligraphy[light] (4,0) .. controls +(45:1) and +(-135:1) .. +(3,0) ++(1.5,0) .. controls +(-135:2) and +(45:2) .. +(0,-3) (4,-3) .. controls +(45:1) and +(-135:1) .. +(3,0);
+\end{tikzpicture}
+\end{center}
+\end{example}
+With a copperplate pen, the segments of a path are tapered.
+Copperplate and normal pens can be mixed.
+Any part of the pen specification that has no length is treated as a copperplate pen.
+\begin{example}
+\begin{center}
+\begin{tikzpicture}[line width=1pt]
+\pen (-135:.125) -- (0,0) (45:.125);
+\calligraphy (0,0) .. controls +(45:1) and +(-135:1) .. +(3,0) ++(1.5,0) .. controls +(-135:2) and +(45:2) .. +(0,-3) (0,-3) .. controls +(45:1) and +(-135:1) .. +(3,0);
+\end{tikzpicture}
+\end{center}
+\end{example}
+%% \section{Annotations}
+%% As an addition, calligraphic paths can be annotated to show how they were constructed.
+%% A path with an arrow is drawn at a set offset from the last part of the path.
+%% \begin{example}
+%% \begin{center}
+%% \begin{tikzpicture}[line width=1pt]
+%% \pen (-135:.125) -- (0,0) (45:.125);
+%% \calligraphy[annotate] (0,0) .. controls +(45:1) and +(-135:1) .. +(3,0) ++(1.5,0) .. controls +(-135:2) and +(45:2) .. +(0,-3) (0,-3) .. controls +(45:1) and +(-135:1) .. +(3,0);
+%% \end{tikzpicture}
+%% \end{center}
+%% \end{example}
+\section{Style Options}
+There are plenty of options for styling the paths and pens.
+\subsection{Definition Options}
+Internally, making a pen is a two-step process.
+First a pen has to be \emph{defined} and then \emph{processed}.
+To define a pen, the user has to specify a path.
+That path is stored in a global macro and so can be accessed in throughout the document.
+However, before being used, the pen has to be processed.
+At this stage, the pen is converted from a macro in to a special object.
+These special objects are local and cannot (at present) be made global.
+Thus whilst a pen can be \emph{defined} inside a group, the \emph{processing} stage has to happen in the outermost group in which the pen is going to be used.
+There is a shortcut command that (via a bit of suspicious hackery) does all this within a \Verb+tikzpicture+ group.
+However, if a pen is to be used in several different pictures, it must be processed outside the group in which it is defined.
+The following macros and keys are used to set up and use a pen.
+%All the keys are in the \Verb+/pgf/calligraphy+ family.
+\begin{itemize}
+\item \DescribeMacro{define pen}If the \Verb+define pen+ key is specified on a path then that path will be used to define a pen.
+It can take one option which will be the pen name, if not specified then \Verb+default+ is assumed.
+The resulting path will not be counted for bounding box considerations.
+When the pen is used, the origin will correspond to the path along which it is dragged.
+\item \DescribeMacro{pen name}The key \Verb+pen name=name+ sets the name for the current pen.
+This can be used either when defining or using a pen.
+\item \DescribeMacro{\pen}\DescribeMacro{\definepen}The macros \Verb+\pen+ and \Verb+\definepen+ are analogous to the TikZ commands \Verb+\draw+ or \Verb+\fill+ in that they act like a path command but store the path as a pen.
+The difference between them is that \Verb+\definepen+ is to be used outside a TikZ picture (it contains its own \Verb+\tikz+ command) and \Verb+\pen+ inside.
+%% These macros also change the ``key family'' to \Verb+/pgf/calligraphy+ so that any further options do not need their full path.
+%% \item \DescribeMacro{\processpen}The macro \Verb+\processpen+ processes a pen so that it is set up for using later on.
+%% As remarked earlier, it has to be given at least at the outermost grouping of where it will be used.
+%% It takes an optional argument which is the pen name.
+%% This is only needed if the pen will be used in a group other than the one in which it is defined (or if the hackery that means this isn't needed with the \Verb+\pen+ command fails for some unknown reason).
+\item \DescribeMacro{use pen}The key \Verb+use pen=name+ on a path means that that path should be ``stroked'' with the pen (\Verb+default+ if no name is given, or none specified via the \Verb+pen name+ key).
+%% \item \DescribeMacro{\calligraphy}The macro \Verb+\calligraphy+ is a shortcut for specifying a path with the key \Verb+use pen+ already set.
+%% This macro also changes the ``key family'' to \Verb+/pgf/calligraphy+ so that any further options do not need their full path.
+\end{itemize}
+\subsection{Style Options}
+There are various options available for styling the calligraphic paths.
+%% All of these are in the \Verb+/pgf/calligraphy+ key family, but the \Verb+\calligraphy+ command automatically switches to that family so the key path is not needed.
+%% Any unknown keys are processed as follows:
+%% \begin{enumerate}
+%% \item A check is made to see if a pen of that name has been defined.
+%% If so, that pen is used.
+%% This is similar to the \Verb+\node[shape]+ syntax
+%% \item A check is made to see if the unknown key corresponds to a colour.
+%% If so, that colour is installed as the pen colour.
+%% This is similar to the colour handling of TikZ paths.
+%% (In fact, it uses the same code.)
+%% \item All other unknown options are passed on to TikZ.
+%% \end{enumerate}
+The style options are as follows.
+\begin{itemize}
+\item \DescribeMacro{pen colour}The \Verb+pen colour+ style defines the default colour to be used.
+Since calligraphic paths are sometimes filled and sometimes stroked, this ensures that the colour is used correctly.
+\item \DescribeMacro{nib style}It is possible to style particular ``nibs'' (i.e., segments of the pen path) separately.
+This is the \Verb+nib style+ option, which takes two arguments.
+The first is the index of the part of the nib and the second is the style options to be applied.
+\item \DescribeMacro{stroke style}It is also possible to style particular parts of the template path.
+One way to do this is to use the \Verb+stroke style+ key, which takes two arguments.
+The first is the index of the part of the stroke and the second is the style options to be applied.
+\item \DescribeMacro{this stroke style}It is also possible to style particular parts of the template path as the path is constructed.
+This is done by putting \Verb+[this stroke style={}]+ in the template path at the relevant part.
+The style is saved and applied to that segment of the template path.
+\item \DescribeMacro{taper}The tapering of copperplate paths can be controled by the \Verb+taper+ option.
+It takes arguments \Verb+none+, \Verb+both+, \Verb+start+, and \Verb+end+.
+\item \DescribeMacro{weight}\DescribeMacro{heavy}\DescribeMacro{light}Copperplate paths come in two ``weights'': \emph{heavy} and \emph{light}.
+The weight also affects the tapering: by default a light path is tapered to nothing whilst a heavy path is tapered to the width of a light path.
+Weights can be specified by either \Verb+weight=weight+ or just \Verb+heavy+ and \Verb+light+.
+It is possible to change the weight for different components of a path using the \Verb+stroke style+ key.
+With tapering, this means that one can easily vary from a light stroke to a heavy one.
+The relevant widths are controlled by the keys \DescribeMacro{heavy line width}\Verb+heavy line width+ and the \DescribeMacro{light line width}\Verb+light line width+.
+The \DescribeMacro{taper line width}\Verb+taper line width+, is set automatically by the weight but can be altered afterwards using the \Verb+taper line width+ key.
+%% \item \DescribeMacro{annotate}The key \Verb+annotate+ switches on annotations.
+%% The style of the annotations is controlled by the keys \DescribeMacro{annotation style}\Verb+annotation style+, \DescribeMacro{annotation shift}\Verb+annotation shift+ which controls how the annotation path is shifted from the final component of the calligraphic path, \DescribeMacro{annotation nodes style}\Verb+annotation nodes style+ for global style of the nodes, \DescribeMacro{annotation node style}\Verb+annotation node style+ for styling of particular nodes.
+%% This latter takes two options: the node number and the style to be applied.
+%% The annotation path and annotation node styles take ordinary TikZ styling options.
+\end{itemize}
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\calligraphy[pen colour=green,nib style={2}{color=red}] (0,0) .. controls +(45:1) and +(-135:1) .. +(3,0) ++(1.5,0) .. controls +(-135:2) and +(45:2) .. +(0,-3) (0,-3) .. controls +(45:1) and +(-135:1) .. +(3,0);
+\calligraphy[line width=1pt] (0,-4) .. controls +(45:1) and +(-135:1) .. +(3,0) ++(1.5,0) .. controls +(-135:2) and +(45:2) .. +(0,-3) (0,-7) .. controls +(45:1) and +(-135:1) .. +(3,0);
+\end{tikzpicture}
+\end{center}
+\end{example}
+\section{Decorations}
+If a TikZ/PGF decorations library is loaded prior to this library, then the \Verb+calligraphy+ library defines some decorations that use the calligraphic paths, specifically with the copperplate nib.
+The current decorations are:
+\begin{itemize}
+\item \DescribeMacro{calligraphic brace}\Verb+calligraphic brace+ for a brace.
+\item \DescribeMacro{calligraphic straight parenthesis}\Verb+calligraphic straight parenthesis+ for a parenthesis with straight middle component.
+\item \DescribeMacro{calligraphic curved parenthesis}\Verb+calligraphic curved parenthesis+ for a parenthesis with a curved middle component.
+\end{itemize}
+All the above use the \Verb+amplitude+ option to specify their size.
+The following is an example of their use, together with the standard \Verb+brace+ and the \Verb+delimiter+ key from the \Verb+matrix+ library for comparison.
+\begin{example}
+\begin{center}
+\begin{tikzpicture}
+\draw[decorate,decoration={calligraphic brace,amplitude=4mm},ultra thick] (0,0) -- (0,8);
+\draw[line width=2pt,decorate,decoration={brace,amplitude=10},line cap=round] (1,0) -- ++(0,8);
+\node[anchor=south west,minimum height=8cm,outer sep=0pt,left delimiter=\{] (a) at (2,0) {};
+\draw[decorate,decoration={calligraphic straight parenthesis,amplitude=4mm},ultra thick] (3,0) -- ++(0,8);
+\draw[decorate,decoration={calligraphic curved parenthesis,amplitude=4mm},ultra thick] (4,0) -- ++(0,8);
+\node[anchor=south west,minimum height=8cm,outer sep=0pt,left delimiter=(] (a) at (5,0) {};
+\end{tikzpicture}
+\end{center}
+\end{example}
+\section{Pre-Defined Pens}
+The following pens are predefined:
+\begin{itemize}
+\item \DescribeMacro{copperplate}\Verb+copperplate+:
+\begin{example}
+\begin{center}
+\tikz \calligraphy[copperplate] (0,0) .. controls +(1,-1) and +(-1,1) .. ++(3,0) [this stroke style={light,taper=start}] +(0,0) .. controls +(1,-1) and +(-1,1) .. ++(3,0) [this stroke style={heavy}] +(0,0) .. controls +(1,-1) and +(-1,1) .. ++(3,0) [this stroke style={light,taper=end}];
+\end{center}
+\end{example}
+\end{itemize}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spath3/knots_doc.pdf b/graphics/pgf/contrib/spath3/knots_doc.pdf
new file mode 100644
index 0000000000..d818161e21
--- /dev/null
+++ b/graphics/pgf/contrib/spath3/knots_doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spath3/knots_doc.tex b/graphics/pgf/contrib/spath3/knots_doc.tex
new file mode 100644
index 0000000000..67c23ca128
--- /dev/null
+++ b/graphics/pgf/contrib/spath3/knots_doc.tex
@@ -0,0 +1,484 @@
+\immediate\write18{tex spath3.dtx}
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{trace}
+\usepackage{lmodern}
+\usepackage{morefloats}
+\usepackage{tikz}
+\usetikzlibrary{knots}
+\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+ \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \centering
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\providecommand*{\url}{\texttt}
+\GetFileInfo{spath3.sty}
+
+\title{The \textsf{knots} Package: Documentation}
+\author{Andrew Stacey \\ \url{stacey@math.ntnu.no}}
+\date{\fileversion~from \filedate}
+
+\begin{document}
+
+\maketitle
+
+\section{Introduction}
+
+The \Verb+knots+ package is a TikZ library for drawing knot (and similar) diagrams.
+It provides a few useful styles and node shapes but its main contribution is the \Verb+knot+ environment.
+The \Verb+knot+ environment allows you to draw some strands of a knot (or braid or tangle or whatever -- we shall use the imprecise term ``knot'' to refer to any similar diagram) and then to modify the crossings via a simple interface.
+
+The main part of this package was developed in response to a question on the \href{http://tex.stackexchange.com}{TeX-SX} site by Jamie Vicary.
+The original question was \href{http://tex.stackexchange.com/q/32125/86}{Braid diagrams in TikZ}.
+Jamie's comment (quoted below) was the inspiration for the mechanism of the \Verb+knot+ environment.
+
+\begin{quotation}
+[It] would be really cool if it was possible to draw the curves, let TikZ calculate all the intersection points automatically, and then tell it to redraw the intersections according to an under/over specification... do you think this is in the realm of plausibility?
+\end{quotation}
+
+\section{Examples}
+
+Let us begin with an example.
+To use the library, simply load the \Verb+tikz+ package and add \Verb+knots+ to the list of TikZ libraries that you load.
+For example, the following in your preamble would work:
+
+\begin{verbatim}
+\usepackage{tikz}
+\usetikzlibrary{knots}
+\end{verbatim}
+
+Let's draw a simple tangle (actually a braid).
+
+\begin{example}
+\begin{tikzpicture}
+\draw[red,ultra thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\draw[blue,ultra thick] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\end{tikzpicture}
+\end{example}
+
+Now a common way to draw crossings for knots is to draw a gap in the under strand through which the over strand passes.
+One way to achieve this in TikZ is to draw the over strand twice, the first time with a thicker line width and the colour of the background.
+We'll draw it twice, once with background a different colour to illustrate this.
+
+\begin{example}
+\begin{tikzpicture}
+\draw[red,ultra thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\draw[pink,double=blue,ultra thick,double distance=1.6pt] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\draw[xshift=5cm,red,ultra thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\draw[xshift=5cm,white,double=blue,ultra thick,double distance=1.6pt] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\end{tikzpicture}
+\end{example}
+
+Now the problem with this method is that there is no way to draw the red and blue paths so that the blue is the over strand at the first crossing and the red at the second.
+Either the blue path is always on top (as shown) or the red.
+One way to resolve this is to split the paths and draw one of them in segments:
+
+\begin{example}
+\begin{tikzpicture}
+\draw[red,ultra thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1);
+\draw[white,double=blue,ultra thick,double distance=1.6pt] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\draw[white,double=red,double distance=1.6pt,ultra thick] (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\end{tikzpicture}
+\end{example}
+
+Another method (employed by the \Verb+braids+ package) is to break the under path either side of the crossing and not draw it there.
+This means that the order of drawing doesn't matter.
+
+Both of these methods have their drawbacks (particularly for general knots as opposed to the more structured braids) in that they require a detailed knowledge of the pieces of the paths and the positions of the crossings.
+As pointed out by Jamie Vicary in the above-{}quoted comment, TikZ should be able to compute these itself.
+
+That's what this package does.
+
+Let's do the above example using this package.
+The main changes to the drawing are that we use the command \Verb+\strand+ rather than \Verb+\draw+ and we enclose it in the \Verb+knot+ environment.
+When initially drawing the strands it is useful to provide the option \Verb+draft mode=strands+.
+That's because the detailed computation can take a little time and so it is best only to do it when necessary.
+So on first run through we get the following.
+
+\begin{example}
+\begin{tikzpicture}
+\begin{knot}[
+ draft mode=strands
+]
+\strand[red,thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\strand[blue,thick] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\end{knot}
+\end{tikzpicture}
+\end{example}
+
+Once we're happy with the positioning of the strands, we change the option \Verb+draft mode=strands+ to \Verb+draft mode=crossings+.
+
+\begin{example}
+\begin{tikzpicture}
+\path (2,1.5) (2,-.5);
+\begin{knot}[
+ draft mode=crossings,
+ clip width=5,
+]
+\strand[red,ultra thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\strand[blue,ultra thick] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\end{knot}
+\end{tikzpicture}
+\end{example}
+
+The \Verb+\path (2,1.5) (2,-.5);+ is to extend the bounding box of the picture a little upwards.
+The extra pieces are not used when computing the bounding box of the picture so that it doesn't change position on the page.
+
+The extra information is that the strands and the crossings have been numbered.
+The crossings have also been rendered (the \Verb+clip width+ option enlarges the crossing gap to make it more obvious).
+Unfortunately, for both crossings the red path is on top.
+We need to flip one of these crossings (the first).
+To do this, we either use the command \Verb+flipcrossings+ or the \Verb+flip crossing+ key.
+
+\begin{example}
+\begin{tikzpicture}
+\path (2,1.5) (2,-.5);
+\begin{knot}[
+ draft mode=crossings,
+ clip width=5,
+ flip crossing=1,
+]
+\strand[red,ultra thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\strand[blue,ultra thick] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\end{knot}
+\end{tikzpicture}
+\end{example}
+
+Once we're happy with it, we remove the \Verb+draft mode+ option to render it in its final form.
+
+\begin{example}
+\begin{tikzpicture}
+\begin{knot}[
+ clip width=5,
+ flip crossing=1,
+]
+\strand[red,ultra thick] (0,0) .. controls +(1,0) and +(-1,0) .. (2,1) .. controls +(1,0) and +(-1,0) .. (4,0);
+\strand[blue,ultra thick] (0,1) .. controls +(1,0) and +(-1,0) .. (2,0) .. controls +(1,0) and +(-1,0) .. (4,1);
+\end{knot}
+\end{tikzpicture}
+\end{example}
+
+Here's a more complicated example.
+
+\begin{example}
+\begin{tikzpicture}
+\node (A) at (0,4) [draw,minimum width=30pt,minimum height=10pt,thick] {};
+\begin{knot}[
+ clip width=5,
+ clip radius=8pt,
+]
+\strand [thick,only when rendering/.style={dashed}] (0,0)
+to [out=up, in=down] (-1,1)
+to [out=up, in=down] (0,2)
+to [out=up, in=down] (-1.2,4)
+to [out=up, in=down, looseness=0.7] (0,5.5)
+to [out=up, in=down] (-2,7);
+\strand [thick] (-1,0)
+to [out=up, in=down] (1,2)
+to [out=up, in=down] (A.south);
+\strand [thick,blue] (1,0)
+to [out=up, in=down] (-1,2)
+to [out=up, in=down] (1.5,4)
+to [out=up, in=right] (0,5.5)to [out=left, in=up] (-2,4)
+to [out=down, in=up] (-2,0);
+\strand [thick] (A.150)
+to [out=up, in=down] (0.7,5.5)
+to [out=up, in=down] (0,7);
+\strand [thick] (A.30)
+to [out=up, in=down] (-1,6)
+to [out=up, in=down] (2,7);
+\flipcrossings{6,2,9,5,11}
+\end{knot}
+\end{tikzpicture}
+\end{example}
+
+One feature about this example is the \Verb+only when rendering+ key.
+The gaps are made by drawing the strand again with extra thickness in the background colour.
+If the \Verb+dashed+ option were always in play for that strand, the gap would be dashed which would spoil the effect.
+So the \Verb+only when rendering+ key gathers those options (such as a dash pattern) which should only be applied to the rendered strand and not to the redraw that creates the gap.
+
+Here's another example.
+
+\begin{example}
+\newcommand{\motif}[1]{
+ to ++(180+#1:0.50) arc (270+#1:150+#1:0.15)
+ to ++( 60+#1:0.50) arc (-30+#1:150+#1:0.15)
+ to ++(240+#1:0.25) arc (150+#1:330+#1:0.25)
+ to ++( 60+#1:0.55) arc (150+#1: 30+#1:0.20)
+}
+\newcommand{\celticknot}{\motif{0}\motif{120}\motif{240}}
+\begin{tikzpicture}
+\begin{knot}[
+ line width=2pt,
+ line join=round,
+ clip width=2,
+ scale=5,
+ consider self intersections,
+ ignore endpoint intersections=false,
+ background color=white,
+ only when rendering/.style={
+ draw=red,
+ double=white,
+ double distance=6pt,
+ line cap=round,
+ }
+]
+\strand (0,0) \celticknot;
+\flipcrossings{1,3,6,8,10}
+\end{knot}
+\end{tikzpicture}
+\end{example}
+
+In this case the strand is a single path.
+In the standard case crossings are only considered between separate strands (since the algorithm used by TikZ means that a strand intersects itself infinitely often).
+The key \Verb+consider self intersections+ gets round this by ``exploding'' the strand into segments and considering each as a separate path with regard to finding the intersections.
+
+A path consists of a series of lines and B\'ezier cubics.
+The ``explosion'' of a path uses this decomposition.
+Unfortunately, even that is not always enough as it is possible for a B\'ezier cubic to self-intersect.
+The \Verb+consider self intersections+ also splits these B\'ezier curves in two to ensure that this doesn't happen\footnote{Computing when this is strictly necessary is difficult so it splits more than it needs to to ensure that enough are done.}.
+To disable this, use the \Verb+consider self intersections=no splits+ option.
+This is the recommended option.
+
+\begin{example}
+\begin{tikzpicture}
+\begin{knot}[
+ consider self intersections,
+ draft mode=crossings,
+]
+\strand (0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
+\end{knot}
+\begin{knot}[
+ xshift=3cm,
+ consider self intersections=no splits,
+ draft mode=crossings,
+]
+\strand (0,0) .. controls +(3,1) and +(-3,1) .. (1,0);
+\end{knot}
+\end{tikzpicture}
+\end{example}
+
+Finally, given that TikZ has to do some heavy computation to find the intersections, it is worth considering using the \Verb+external+ library of TikZ to avoid having to do this on every run.
+
+\section{Usage}
+
+\subsection{The \texttt{knot} Environment}
+
+\DescribeMacro{knot}
+\DescribeMacro{\strand}
+This package provides a \Verb+knot+ environment for including in a \Verb+tikzpicture+ to render a knot.
+This takes an optional argument which is passed to \Verb+\tikzset+ and can be used to configure the knot.
+Within that environment, specific strands are defined using the \Verb+\strand+ command (in place of a \Verb+\path+ or \Verb+\draw+).
+Further keys can be specified on the strands.
+
+\DescribeMacro{flip crossing}
+\DescribeMacro{\flipcrossings}
+Specifying the crossings to be flipped can be done either using the key \Verb+flip crossing+ or the macro \Verb+\flipcrossings+.
+The latter can take a comma separated list of crossings to flip.
+The former takes a single crossing but can be extended to a comma separated list using the \Verb+.list+ handler as in \Verb+flip crossing/.list={1,2,3}+ (this is what \Verb+\flipcrossings+ does internally).
+
+\DescribeMacro{\redraw}
+There is also a macro \Verb+\redraw+ which redraws a strand in the neighbourhood of a point.
+This is effectively what happens for the crossings and can be used to fix something that wasn't done correctly by the main algorithm.
+It takes two arguments, the strand number and the point at which to render the strand, as in \Verb+\redraw{2}{(1,1)}+.
+
+\subsection{Keys}
+
+The various keys are as follows.
+The majority of the keys are in the \Verb+/tikz/knot diagram+ family, but it does its best to pass unknown keys down to \Verb+/tikz/+.
+The keys processed by the \Verb+knot+ environment are automatically in this family but the keys processed by the \Verb+\strand+ command are not.
+If a standard key (in the option to the \Verb+knot+ environment) doesn't work, try prefixing it with \Verb+/tikz/+ or \Verb+/pgf/+.
+
+\begin{itemize}
+\item \DescribeMacro{every knot diagram}
+The style \Verb+every knot diagram+ is executed at the start of the \Verb+knot+ environment.
+
+Note that it is inside the \Verb+knot diagram+ family so if setting it outside (say, in the preamble) use \Verb+\tikzset{knot diagram/every knot diagram}+.
+
+\item \DescribeMacro{name}
+The crossings of a knot are given coordinates of the form \Verb+<name> <number>+.
+The default name is \Verb+knot+.
+The \Verb+name+ key renames it.
+
+\item \DescribeMacro{every strand}
+The contents of \Verb+every strand+ are applied to every strand.
+By default this contains the \Verb+draw+ key so if resetting it you should probably ensure that it still has the \Verb+draw+ key.
+
+Note that it is inside the \Verb+knot diagram+ family so if setting it outside (say, in the preamble) use \Verb+\tikzset{knot diagram/every knot diagram}+.
+
+\item \DescribeMacro{only when rendering}
+The key \Verb+only when rendering={<style>}+ is applied to the strand only when it is actually drawn and not when it is used to cut out part of the underlying path.
+
+Note that there are actually two versions of this key: one in the \Verb+knot diagram+ family and one in the \Verb+/tikz+ family.
+This is so that it works equally well in the argument to the \Verb+knot+ environment and the \Verb+\strand+ command.
+
+\item \DescribeMacro{ignore endpoint intersections}
+When a strand is split into pieces then the intersection library finds ``false positives'' in that neighbouring pieces intersect at their endpoints.
+The code ignores such intersections between neighbouring pieces.
+The \Verb+ignore endpoint intersections+ (which is true by default) means that all intersections that are near an endpoint are ignored whether or not they are with the next or previous piece of that strand.
+The celtic knot example of the previous section sets this to false to ensure that it gets all intersections.
+
+\item \DescribeMacro{consider self intersections}
+The key \Verb+consider self intersections=<option>+ handles the splitting facility so that strands can self intersect.
+The options are \Verb+true+, \Verb+false+, and \Verb+no splits+.
+It is \Verb+false+ at the start, and the default option is \Verb+true+.
+The difference between \Verb+true+ and \Verb+no splits+ is as to whether segments are further split to avoid \emph{all} self intersections.
+
+\item \DescribeMacro{clip radius}
+The \Verb+clip radius=<length>+ is the radius of the clip region around each crossing.
+
+\item \DescribeMacro{end tolerance}
+The \Verb+end tolerance=<length>+ is the distance at which an intersection is considered as being near an endpoint (for simplicity, it uses the \(\ell^1\)--metric).
+
+\item \DescribeMacro{clip width}
+The \Verb+clip width=<factor>+ is the multiplier for the thickness of the ``wipeout'' path relative to the line width of the actual path.
+
+\item \DescribeMacro{flip crossing}
+The \Verb+flip crossing=<number>+ key flips the \Verb+<number>+ crossing.
+
+\item \DescribeMacro{background colour} \DescribeMacro{background color}
+The keys \Verb+background colour=<colour>+ and \Verb+background color=<color>+ set the background colour for the crossings.
+
+\item \DescribeMacro{intersection <number>}
+The style in \Verb+intersection <number>+ is applied just before that crossing is drawn so can be used to modify the crossing style just for that crossing.
+
+
+\item \DescribeMacro{draft mode}
+The key \Verb+draft mode=<option>+ sets the different styles for aiding with rendering the knot.
+The options are \Verb+strands+, \Verb+crossings+, or \Verb+off+.
+The \Verb+strands+ option just renders the strands with no crossings.
+The \Verb+crossings+ option renders the crossings and labels the strands and crossings.
+The \Verb+off+ option renders the crossings without the labels.
+
+\item \DescribeMacro{draft/crossing label}
+The style \Verb+draft/crossing label+ is applied to each of the crossing labels.
+The labels are actually \Verb+pin+s attached to coordinates at the crossings.
+This style is applied to the \Verb+pin+ itself.
+The default is:
+
+\begin{lstlisting}
+overlay,
+fill=white,
+fill opacity=.5,
+text opacity=1,
+text=blue,
+pin edge={blue,<-}
+\end{lstlisting}
+
+\item \DescribeMacro{draft/strand label}
+The style \Verb+draft/strand label+ is applied to each of the strand labels.
+The default is:
+
+\begin{lstlisting}
+overlay,
+circle,
+draw=purple,
+fill=white,
+fill opacity=.5,
+text opacity=1,
+text=purple,
+inner sep=0pt
+\end{lstlisting}
+\end{itemize}
+
+\subsection{Other Styles}
+
+The other things defined by this package are for drawing knot diagrams when the user knows in advance either the locations of the crossings or can arrange that the paths are drawn in the correct order.
+In these circumstances the \Verb+knot+ environment is overkill.
+
+\DescribeMacro{knot}
+\DescribeMacro{knot gap}
+This \Verb+knot=<colour>+ style sets up a doubled path with inner colour the given colour (or the current draw colour if not given) and outer colour the knot background colour.
+The width of the inner line is the current line width and the full width is controlled by the \Verb+knot gap=<factor>+ key which is initially set to \(3\) (thus giving a line's width either side).
+
+\begin{example}
+\begin{tikzpicture}[knot gap=7]
+\draw[thin,knot=red] (-1,-1) -- (1,1);
+\draw[thin,knot=red] (-1,1) -- (1,-1);
+\begin{scope}[xshift=2.5cm]
+\draw[knot=red] (-1,-1) -- (1,1);
+\draw[knot=red] (-1,1) -- (1,-1);
+\end{scope}
+\begin{scope}[xshift=5cm]
+\draw[thick,knot=red] (-1,-1) -- (1,1);
+\draw[thick,knot=red] (-1,1) -- (1,-1);
+\end{scope}
+\end{tikzpicture}
+\end{example}
+
+\DescribeMacro{knot crossing}
+\DescribeMacro{knot over cross}
+\DescribeMacro{knot under cross}
+\DescribeMacro{knot horiz}
+\DescribeMacro{knot vert}
+This package also defines some node shapes to help draw knot and link diagrams.
+The idea with these is to place a node of the appropriate type at each crossing and then link them accordingly.
+The node shapes are \Verb+knot crossing+, \Verb+knot over cross+, \Verb+knot under cross+, \Verb+knot vert+, \Verb+knot horiz+.
+The two styles \Verb+knot over cross+ and \Verb+knot under cross+ are crossings, \Verb+knot vert+ and \Verb+knot horiz+ are for when resolving the crossings in a diagram.
+By judicious use of the \Verb+\foreach+ command, a family of resolved link diagrams can be produced.
+
+\begin{example}
+\begin{tikzpicture}[every node/.style={draw,red}]
+\node[knot over cross] at (1,0) {};
+\node[knot under cross] at (2,0) {};
+\node[knot vert] at (3,0) {};
+\node[knot horiz] at (4,0) {};
+\end{tikzpicture}
+\end{example}
+
+The node \Verb+knot crossing+ is not meant to be drawn, it is an empty shape.
+Its value is in that it defines more anchors than the usual rectangle shape.
+For each of the 8 main compass directions, it defines anchors at 2, 4, 8, 16, and 32 times further out.
+This can be useful for designing curves that enter and exit the crossing gracefully at particular directions.
+When using this node shape, the crossing itself is easiest to draw by using the \Verb+center+ anchor for the strands that form the over cross.
+
+\begin{example}
+\begin{tikzpicture}[every path/.style={red,thick}, every node/.style={transform shape, knot crossing, inner sep=1.5pt}]
+\node[rotate=45] (tl) at (-1,1) {};
+\node[rotate=-45] (tr) at (1,1) {};
+\node (m) at (0,-1) {};
+\node (b) at (0,-2) {};
+\draw (b) .. controls (b.4 north west) and (m.4 south west) .. (m.center);
+\draw (b.center) .. controls (b.4 north east) and (m.4 south east) .. (m);
+\draw (m) .. controls (m.8 north west) and (tl.3 south west) .. (tl.center);
+\draw (m.center) .. controls (m.8 north east) and (tr.3 south east) .. (tr);
+\draw (tl.center) .. controls (tl.16 north east) and (tr.16 north west) .. (tr);
+\draw (b) .. controls (b.16 south east) and (tr.16 north east) .. (tr.center);
+\draw (b.center) .. controls (b.16 south west) and (tl.16 north west) .. (tl);
+\draw (tl) -- (tr.center);
+\end{tikzpicture}
+\end{example}
+
+\section{Other Relevant Packages by the Same Author}
+
+Another tool for drawing knot diagrams is provided by the \Verb+hobby+ package which draws smooth curves through a prescribed set of points.
+This can be combined with the facilities of this package but also has some features of its own that make it suitable for drawing knot diagrams.
+
+For braids themselves, there is the \Verb+braids+ package which allows input specification in the form of a word in the braid group.
+
+\end{document}
+% Local Variables:
+% tex-output-type: "pdf18"
+% End:
diff --git a/graphics/pgf/contrib/spath3/spath3.dtx b/graphics/pgf/contrib/spath3/spath3.dtx
new file mode 100644
index 0000000000..9d6ae2825d
--- /dev/null
+++ b/graphics/pgf/contrib/spath3/spath3.dtx
@@ -0,0 +1,4228 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+spath3 --- LaTeX3 functions for manipulating PGF soft paths
+E-mail: stacey@math.ntnu.no
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+This package defines some functions used to manipulate PGFs soft paths.
+As applications of its use, included are a package for drawing calligraphic paths and a package for drawing knot diagrams.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+spath3 --- Functions for manipulating PGF soft paths
+E-mail: stacey@math.ntnu.no
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2011-2019 by Andrew Stacey <stacey@math.ntnu.no>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Andrew Stacey.
+
+This work consists of the files spath3.dtx
+ calligraphy_doc.tex
+ knots_doc.tex
+and the derived files spath3.ins,
+ spath3_code.pdf,
+ spath3.sty,
+ tikzlibrarycalligraphy.code.tex
+ tikzlibraryknots.code.tex
+ calligraphy.pdf
+ knots.pdf
+ README
+
+\endpostamble
+\usedir{tex/latex/spath3}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{spath3}}
+}
+\generate{
+ \file{tikzlibrarycalligraphy.code.tex}{\from{\jobname.dtx}{calligraphy}}
+}
+\generate{
+ \file{tikzlibraryknots.code.tex}{\from{\jobname.dtx}{knots}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/spath3}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/demopkg}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+%\usepackage{morefloats}
+\usepackage{tikz}
+\usepackage{trace}
+\usepackage{spath3}
+%\traceoff
+%\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}[gobble=2]{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+% \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{4488}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{1.0}{2011/05/03}{Converted to DTX file}
+% \changes{1.1}{2016/02/19}{Fixes due to changes in LaTeX3}
+% \changes{1.2}{2019/02/12}{More fixes due to changes in LaTeX3}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{spath3.sty}
+% \title{The \textsf{spath3} package}
+% \author{Andrew Stacey \\ \url{stacey@math.ntnu.no}}
+% \date{\fileversion~from \filedate}
+%
+%
+% \maketitle
+%
+%
+% \section{Introduction}
+%
+% The \Verb+spath3+ package is intended as a library for manipulating PGF's \emph{soft paths}.
+% In between defining a path and using it, PGF stores a path as a \emph{soft path} where all the defining structure has been resolved into the basic operations but these have not yet been written to the output file.
+% They can therefore still be manipulated by \TeX, and as they have a very rigid form (and limited vocabulary), they are relatively easy to modify.
+% This package provides some methods for working with these paths.
+% It is not really intended for use by end users but as a foundation on which other packages can be built.
+% As examples, the \Verb+calligraphy+ package and the \Verb+knot+ package are included.
+% The first of these simulates a calligraphic pen stroking a path.
+% The second can be used to draw knot (and similar) diagrams.
+%
+% The format of a soft path is a sequence of triples of the form \Verb+\macro {dimension}{dimension}+.
+% The macro is one of a short list, the dimensions are coordinates in points.
+% There are certain further restrictions, particularly that every path must begin with a \Verb+move to+, and B\'ezier curves consist of three triples.
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*spath3>
+% \fi
+% \subsection{Initialisation}
+%
+% Load the \LaTeX3 foundation and register us as a \LaTeX3\ package.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{expl3}
+\RequirePackage{pgf}
+\ProvidesExplPackage {spath3} {2019/02/12} {1.2} {Functions for
+manipulating PGF soft paths}
+\RequirePackage{xparse}
+% \end{macrocode}
+%
+% We need a slew of temporary variables.
+% \begin{macrocode}
+\tl_new:N \l__spath_tmpa_tl
+\tl_new:N \l__spath_tmpb_tl
+\tl_new:N \l__spath_tmpc_tl
+\tl_new:N \l__spath_tmpd_tl
+\tl_new:N \l__spath_smuggle_tl
+\dim_new:N \l__spath_tmpa_dim
+\dim_new:N \l__spath_tmpb_dim
+\fp_new:N \l__spath_tmpa_fp
+\fp_new:N \l__spath_tmpb_fp
+\int_new:N \l__spath_tmpa_int
+\int_new:N \g__spath_map_int
+% \end{macrocode}
+%
+% We need to be able to compare against the macros that can occur in a soft path so these token lists contain them.
+% \begin{macrocode}
+\tl_new:N \g__spath_moveto_tl
+\tl_new:N \g__spath_lineto_tl
+\tl_new:N \g__spath_curveto_tl
+\tl_new:N \g__spath_curvetoa_tl
+\tl_new:N \g__spath_curvetob_tl
+\tl_new:N \g__spath_closepath_tl
+\tl_set:Nn \g__spath_moveto_tl {\pgfsyssoftpath@movetotoken}
+\tl_set:Nn \g__spath_lineto_tl {\pgfsyssoftpath@linetotoken}
+\tl_set:Nn \g__spath_curveto_tl {\pgfsyssoftpath@curvetotoken}
+\tl_set:Nn \g__spath_curvetoa_tl {\pgfsyssoftpath@curvetosupportatoken}
+\tl_set:Nn \g__spath_curvetob_tl {\pgfsyssoftpath@curvetosupportbtoken}
+\tl_set:Nn \g__spath_closepath_tl {\pgfsyssoftpath@closepathtoken}
+% \end{macrocode}
+%
+% \subsection{Basic Structure and Methods}
+%
+% A soft path is a \Verb+prop+.
+% These are lists of the attributes that we define.
+% The first consists of all attributes, the second of those that are ``moveable'' in the sense that they change if we transform the path, the third are the ones that contain actual paths.
+%
+% Note that if using these attributes outside an \Verb+expl3+ context, the spaces should be omitted.
+% \begin{macrocode}
+\tl_new:N \g__spath_attributes
+\tl_new:N \g__spath_moveable_attributes
+\tl_new:N \g__spath_path_attributes
+\tl_set:Nn \g__spath_attributes {
+ {path}
+ {reverse path}
+ {length}
+ {real length}
+ {number of components}
+ {initial point}
+ {final point}
+ {initial action}
+ {final action}
+ {min bb}
+ {max bb}
+}
+\tl_set:Nn \g__spath_moveable_attributes {
+ {initial point}
+ {final point}
+ {min bb}
+ {max bb}
+}
+\tl_set:Nn \g__spath_path_attributes {
+ {path}
+ {reverse path}
+}
+% \end{macrocode}
+%
+% An \Verb+spath+ object is actually a \Verb+prop+.
+% The following functions are wrappers around the underlying \Verb+prop+ functions.
+% We prefix the names to avoid clashing with other \Verb+prop+s that might be lying around, this is why all the \Verb+spath+ methods take argument \Verb+:n+ and not \Verb+:N+.
+% Given that \Verb+spath+ objects might be created inside a group but used outside it, we work globally throughout.
+% \begin{macro}{\spath_new:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_new:n #1
+{
+ \prop_new:c {l__spath_#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_clear:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_clear:n #1
+{
+ \prop_gclear:c {l__spath_#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_clear_new:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_clear_new:n #1
+{
+ \prop_gclear_new:c {l__spath_#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_show:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_show:n #1
+{
+ \prop_show:c {l__spath_#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_put:nnn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_put:nnn #1#2#3
+{
+ \prop_gput:cnn {l__spath_#1} {#2} {#3}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_remove:nn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_remove:nn #1#2
+{
+ \prop_gremove:cn {l__spath_#1} {#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\__spath_get:nn}
+% This function is an internal one since the real \Verb+get+ function will generate its data if it does not already exist.
+% \begin{macrocode}
+\cs_new_nopar:Npn \__spath_get:nn #1#2
+{
+ \prop_item:cn {l__spath_#1} {#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\__spath_get:nnN}
+% \begin{macrocode}
+\cs_new_nopar:Npn \__spath_get:nnN #1#2#3
+{
+ \prop_get:cnN {l__spath_#1} {#2} #3
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_if_in:nn}
+% \begin{macrocode}
+\prg_new_conditional:Npnn \spath_if_in:nn #1#2 {p, T, F, TF}
+{
+ \prop_if_in:cnTF {l__spath_#1} {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\__spath_get:nnN}
+% \begin{macrocode}
+\cs_generate_variant:Nn \__prop_split:NnTF {cnTF}
+\prg_new_protected_conditional:Npnn \__spath_get:nnN #1#2#3 {T, F, TF}
+{
+ \__prop_split:cnTF {l__spath_#1} {#2}
+ {
+ \tl_set:Nn #3 {##2}
+ \prg_return_true:
+ }
+ { \prg_return_false: }
+}
+\cs_generate_variant:Nn \spath_put:nnn {nnV, nnx, nno}
+\cs_generate_variant:Nn \__spath_get:nn {Vn}
+\cs_generate_variant:Nn \__spath_get:nnN {VnN}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_if_exist:n}
+% \begin{macrocode}
+\prg_new_conditional:Npnn \spath_if_exist:n #1 {p,T,F,TF}
+{
+ \prop_if_exist:cTF {l__spath_#1}
+ {
+ \prg_return_true:
+ }
+ {
+ \prg_return_false:
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_clone:nn}
+% Clones an \Verb+spath+.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_clone:nn #1 #2
+{
+ \spath_clear_new:n {#2}
+ \tl_map_inline:Nn \g__spath_attributes
+ {
+ \spath_if_in:nnT {#1} {##1}
+ {
+ \__spath_get:nnN {#1} {##1} \l__spath_tmpa_tl
+ \spath_put:nnV {#2} {##1} \l__spath_tmpa_tl
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_get_current_path:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \spath_get_current_path:n #1
+{
+ \pgfsyssoftpath@getcurrentpath\l__spath_tmpa_tl
+ \spath_clear_new:n {#1}
+ \spath_put:nnV {#1} {path} \l__spath_tmpa_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_set_current_path:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \spath_set_current_path:n #1
+{
+ \spath_get:nnN {#1} {min bb} \l__spath_tmpa_tl
+ \exp_last_unbraced:NV \pgf@protocolsizes\l__spath_tmpa_tl
+
+ \spath_get:nnN {#1} {max bb} \l__spath_tmpa_tl
+ \exp_last_unbraced:NV \pgf@protocolsizes\l__spath_tmpa_tl
+
+ \spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \pgfsyssoftpath@setcurrentpath\l__spath_tmpa_tl
+ \pgfsyssoftpath@flushcurrentpath
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_use_path:nn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \spath_use_path:nn #1#2
+{
+ \spath_set_current_path:n {#1}
+ \pgfusepath{#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_protocol_path:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \spath_protocol_path:n #1
+{
+ \spath_get:nnN {#1} {min bb} \l__spath_tmpa_tl
+ \exp_last_unbraced:NV \pgf@protocolsizes\l__spath_tmpa_tl
+
+ \spath_get:nnN {#1} {max bb} \l__spath_tmpa_tl
+ \exp_last_unbraced:NV \pgf@protocolsizes\l__spath_tmpa_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_tikz_path:nn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \spath_tikz_path:nn #1#2
+{
+ \path[#1] \pgfextra{
+ \spath_get:nnN {#2} {path} \l__spath_tmpa_tl
+ \pgfsyssoftpath@setcurrentpath \l__spath_tmpa_tl
+ };
+}
+\cs_generate_variant:Nn \spath_tikz_path:nn {Vn}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Computing Information}
+%
+% \begin{macro}{\spath_get:nn}
+% The information that we store along with a soft path can be computed from it, but computing it every time is wasteful.
+% So this is the real \Verb+\spath_get:nn+ function which checks to see if we have already computed it and then either retrieves it or computes it.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_get:nn #1#2
+{
+ \spath_if_in:nnF {#1} {#2}
+ {
+ \cs_if_exist_use:cT {spath_generate_#2:n} {{#1}}
+ }
+ \__spath_get:nn {#1} {#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_get:nnN}
+% As above but leaves the result in a token list rather than in the stream.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_get:nnN #1#2#3
+{
+ \spath_if_in:nnF {#1} {#2}
+ {
+ \cs_if_exist_use:cT {spath_generate_#2:n} {{#1}}
+ }
+ \__spath_get:nnN {#1} {#2} #3
+}
+\cs_generate_variant:Nn \spath_get:nnN {VnN}
+% \end{macrocode}
+% \end{macro}
+%
+% The next slew of functions generate data from the original path, storing it in the \Verb+prop+ for further retrieval.
+% \begin{macro}{\spath_generate_length:n}
+% Counts the number of triples in the path.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_length:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \spath_put:nnx {#1} {length} {\int_eval:n {\tl_count:N \l__spath_tmpa_tl /3 }}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_reallength:n}
+% The real length of a path is the number of triples that actually draw something (that is, the number of lines and curves).
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_reallength:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \int_set:Nn \l__spath_tmpa_int {0}
+ \tl_map_inline:Nn \l__spath_tmpa_tl {
+ \tl_if_eq:nnT {##1} {\pgfsyssoftpath@linetotoken}
+ {
+ \int_incr:N \l__spath_tmpa_int
+ }
+ \tl_if_eq:nnT {##1} {\pgfsyssoftpath@curvetotoken}
+ {
+ \int_incr:N \l__spath_tmpa_int
+ }
+ }
+ \spath_put:nnx {#1} {real length} {\int_use:N \l__spath_tmpa_int}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_numberofcomponents:n}
+% A component is a continuous segment of the path, separated by moves.
+% Successive moves are not collapsed, and zero length moves count.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_numberofcomponents:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \int_set:Nn \l__spath_tmpa_int {0}
+ \tl_map_inline:Nn \l__spath_tmpa_tl {
+ \tl_if_eq:nnT {##1} {\pgfsyssoftpath@movetotoken}
+ {
+ \int_incr:N \l__spath_tmpa_int
+ }
+ }
+ \spath_put:nnx {#1} {number of components} {\int_use:N \l__spath_tmpa_int}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_initialpoint:n}
+% The starting point of the path.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_initialpoint:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \spath_put:nnV {#1} {initial point} \l__spath_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_finalpoint:n}
+% The final point of the path.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_finalpoint:n #1
+{
+ \tl_clear:N \l__spath_tmpb_tl
+ \spath_if_in:nnTF {#1} {reverse path}
+ {
+ \__spath_get:nnN {#1} {reverse path} \l__spath_tmpa_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ }
+ {
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_reverse:N \l__spath_tmpa_tl
+ \tl_put_left:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_left:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ }
+ \spath_put:nnV {#1} {final point} \l__spath_tmpb_tl
+}
+\cs_generate_variant:Nn \spath_generate_finalpoint:n {V}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_reversepath:n}
+% This computes the reverse of the path.
+% TODO: handle closed paths, possibly rectangles.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_reversepath:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_left:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_set:Nx \l__spath_tmpc_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nn \l__spath_tmpd_tl {}
+ \tl_case:NnF \l__spath_tmpc_tl
+ {
+ \g__spath_moveto_tl {\tl_set_eq:NN \l__spath_tmpd_tl \g__spath_moveto_tl }
+ \g__spath_lineto_tl {\tl_set_eq:NN \l__spath_tmpd_tl \g__spath_lineto_tl }
+ \g__spath_curveto_tl {\tl_set_eq:NN \l__spath_tmpd_tl \g__spath_curvetoa_tl }
+ \g__spath_curvetoa_tl {\tl_set_eq:NN \l__spath_tmpd_tl \g__spath_curveto_tl }
+ \g__spath_curvetob_tl {\tl_set_eq:NN \l__spath_tmpd_tl \g__spath_curvetob_tl }
+ }
+ {
+ \tl_show:N \l__spath_tmpc_tl
+ }
+ \tl_put_left:NV \l__spath_tmpb_tl \l__spath_tmpd_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_left:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ }
+ \tl_put_left:NV \l__spath_tmpb_tl \g__spath_moveto_tl
+ \spath_put:nnV {#1} {reverse path} \l__spath_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_initialaction:n}
+% This is the first thing that the path does (after the initial move).
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_initialaction:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_if_empty:NF \l__spath_tmpa_tl {
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_head:N \l__spath_tmpa_tl}
+ }
+ \spath_put:nnV {#1} {initial action} \l__spath_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_final action:n}
+% This is the last thing that the path does.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_finalaction:n #1
+{
+ \tl_clear:N \l__spath_tmpb_tl
+ \spath_if_in:nnTF {#1} {reverse path}
+ {
+ \__spath_get:nnN {#1} {reverse path} \l__spath_tmpa_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ }
+ {
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_reverse:N \l__spath_tmpa_tl
+ }
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_if_empty:NF \l__spath_tmpa_tl {
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_head:N \l__spath_tmpa_tl}
+ }
+ \tl_if_eq:NNT \l__spath_tmpa_tl \g__spath_curvetoa_tl
+ {
+ \tl_set_eq:NN \l__spath_tmpa_tl \g__spath_curveto_tl
+ }
+ \spath_put:nnV {#1} {final action} \l__spath_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_minbb:n}
+% This computes the minimum (bottom left) of the bounding box of the path.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_minbb:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_min:nn {\tl_head:N \l__spath_tmpa_tl} {\l__spath_tmpa_dim}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_min:nn {\tl_head:N \l__spath_tmpa_tl} {\l__spath_tmpb_dim}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ }
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \spath_put:nnV {#1} {min bb} \l__spath_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_max bb:n}
+% This computes the maximum (top right) of the bounding box of the path.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_generate_maxbb:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_max:nn {\tl_head:N \l__spath_tmpa_tl} {\l__spath_tmpa_dim}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_max:nn {\tl_head:N \l__spath_tmpa_tl} {\l__spath_tmpb_dim}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ }
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \spath_put:nnV {#1} {max bb} \l__spath_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_generate_all:n}
+% This function generates all of the data in one fell swoop.
+% By traversing the path just once it is quicker than doing each one individually.
+% However, it does need to store a lot of data as it goes.
+% \begin{itemize}
+% \item \Verb+\l__spath_rp_tl+ will hold the reversed path
+% \item \Verb+\l__spath_l_int+ will hold the length
+% \item \Verb+\l__spath_rl_int+ will hold the real length
+% \item \Verb+\l__spath_nc_int+ will hold the number of components
+% \item \Verb+\l__spath_ip_tl+ will hold the initial point
+% \item \Verb+\l__spath_fp_tl+ will hold the final point
+% \item \Verb+\l__spath_ia_tl+ will hold the initial action
+% \item \Verb+\l__spath_fa_tl+ will hold the final action
+% \item \Verb+\l__spath_minx_dim+ will hold the min x bb
+% \item \Verb+\l__spath_miny_dim+ will hold the min y bb
+% \item \Verb+\l__spath_maxx_dim+ will hold the max x bb
+% \item \Verb+\l__spath_maxy_dim+ will hold the max y bb
+% \end{itemize}
+% \begin{macrocode}
+\tl_new:N \l__spath_rp_tl
+\int_new:N \l__spath_l_int
+\int_new:N \l__spath_rl_int
+\int_new:N \l__spath_nc_int
+\tl_new:N \l__spath_ip_tl
+\tl_new:N \l__spath_fp_tl
+\tl_new:N \l__spath_ia_tl
+\tl_new:N \l__spath_fa_tl
+\dim_new:N \l__spath_minx_dim
+\dim_new:N \l__spath_miny_dim
+\dim_new:N \l__spath_maxx_dim
+\dim_new:N \l__spath_maxy_dim
+
+\cs_new_nopar:Npn \spath_generate_all:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+
+ \tl_clear:N \l__spath_rp_tl
+ \int_set:Nn \l__spath_l_int {1}
+ \int_zero:N \l__spath_rl_int
+ \int_set:Nn \l__spath_nc_int {1}
+ \tl_clear:N \l__spath_ip_tl
+ \tl_clear:N \l__spath_fp_tl
+ \tl_clear:N \l__spath_ia_tl
+ \tl_clear:N \l__spath_fa_tl
+ \dim_zero:N \l__spath_minx_dim
+ \dim_zero:N \l__spath_miny_dim
+ \dim_zero:N \l__spath_maxx_dim
+ \dim_zero:N \l__spath_maxy_dim
+
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \tl_clear:N \l__spath_ip_tl
+ \tl_put_right:Nx \l__spath_ip_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+
+ \dim_set_eq:NN \l__spath_minx_dim \l__spath_tmpa_dim
+ \dim_set_eq:NN \l__spath_miny_dim \l__spath_tmpb_dim
+ \dim_set_eq:NN \l__spath_maxx_dim \l__spath_tmpa_dim
+ \dim_set_eq:NN \l__spath_maxy_dim \l__spath_tmpb_dim
+
+ \tl_put_left:Nx \l__spath_rp_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+
+ \tl_set:Nx \l__spath_ia_tl {\tl_head:N \l__spath_tmpa_tl}
+
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_set:Nx \l__spath_tmpc_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nn \l__spath_tmpd_tl {}
+ \tl_set_eq:NN \l__spath_fa_tl \l__spath_tmpc_tl
+ \int_incr:N \l__spath_l_int
+
+ \tl_case:NnF \l__spath_tmpc_tl
+ {
+ \g__spath_moveto_tl {
+ \tl_set_eq:NN \l__spath_tmpd_tl \g__spath_moveto_tl
+ \int_incr:N \l__spath_nc_int
+ }
+ \g__spath_lineto_tl {
+ \tl_set_eq:NN \l__spath_tmpd_tl \g__spath_lineto_tl
+ \int_incr:N \l__spath_rl_int
+ }
+ \g__spath_curveto_tl {
+ \tl_set_eq:NN \l__spath_tmpd_tl \g__spath_curvetoa_tl
+ \int_incr:N \l__spath_rl_int
+ }
+ \g__spath_curvetoa_tl {
+ \tl_set_eq:NN \l__spath_tmpd_tl \g__spath_curveto_tl
+ }
+ \g__spath_curvetob_tl {
+ \tl_set_eq:NN \l__spath_tmpd_tl \g__spath_curvetob_tl
+ }
+ }
+ {
+ \tl_show:N \l__spath_tmpc_tl
+ }
+ \tl_put_left:NV \l__spath_rp_tl \l__spath_tmpd_tl
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \dim_set:Nn \l__spath_minx_dim {\dim_min:nn { \l__spath_minx_dim} {\l__spath_tmpa_dim}}
+ \dim_set:Nn \l__spath_miny_dim {\dim_min:nn { \l__spath_miny_dim} {\l__spath_tmpb_dim}}
+ \dim_set:Nn \l__spath_maxx_dim {\dim_max:nn { \l__spath_maxx_dim} {\l__spath_tmpa_dim}}
+ \dim_set:Nn \l__spath_maxy_dim {\dim_max:nn { \l__spath_maxy_dim} {\l__spath_tmpb_dim}}
+
+ \tl_put_left:Nx \l__spath_rp_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+
+ \tl_set:Nx \l__spath_fp_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+
+ }
+
+ \tl_put_left:NV \l__spath_rp_tl \g__spath_moveto_tl
+
+ \spath_put:nnV {#1} {reverse path} \l__spath_rp_tl
+ \spath_put:nnV {#1} {length} \l__spath_l_int
+ \spath_put:nnV {#1} {real length} \l__spath_rl_int
+ \spath_put:nnV {#1} {number of components} \l__spath_nc_int
+ \spath_put:nnV {#1} {initial point} \l__spath_ip_tl
+ \spath_put:nnV {#1} {final point} \l__spath_fp_tl
+ \spath_put:nnV {#1} {initial action} \l__spath_ia_tl
+ \spath_put:nnV {#1} {final action} \l__spath_fa_tl
+
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_minx_dim}
+ {\dim_use:N \l__spath_miny_dim}
+ }
+ \spath_put:nnV {#1} {min bb} \l__spath_tmpb_tl
+
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_maxx_dim}
+ {\dim_use:N \l__spath_maxy_dim}
+ }
+ \spath_put:nnV {#1} {max bb} \l__spath_tmpb_tl
+
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Path Manipulation}
+%
+% \begin{macro}{\spath_translate:nnn}
+% Translates a path.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_translate:nnn #1#2#3
+{
+ \tl_map_inline:Nn \g__spath_moveable_attributes
+ {
+ \spath_if_in:nnT {#1} {##1}
+ {
+ \__spath_get:nnN {#1} {##1} \l__spath_tmpa_tl
+
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl + #2}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl + #3}
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \spath_put:nnV {#1} {##1} \l__spath_tmpb_tl
+ }
+ }
+ \tl_map_inline:Nn \g__spath_path_attributes
+ {
+ \spath_if_in:nnT {#1} {##1}
+ {
+ \__spath_get:nnN {#1} {##1} \l__spath_tmpa_tl
+ \tl_clear:N \l__spath_tmpb_tl
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_put_right:Nx \l__spath_tmpb_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl + #2}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl + #3}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ }
+ \spath_put:nnV {#1} {##1} \l__spath_tmpb_tl
+ }
+ }
+}
+
+\cs_generate_variant:Nn \spath_translate:nnn {nxx}
+% \end{macrocode}
+%
+% This variant allows for passing the coordinates as a single braced group as it strips off the outer braces of the second argument.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_translate:nn #1#2
+{
+ \spath_translate:nnn {#1} #2
+}
+
+\cs_generate_variant:Nn \spath_translate:nn {nV}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_scale:nnn}
+% Scale a path.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_scale:nnn #1#2#3
+{
+ \tl_map_inline:Nn \g__spath_moveable_attributes
+ {
+ \spath_if_in:nnT {#1} {##1}
+ {
+ \__spath_get:nnN {#1} {##1} \l__spath_tmpa_tl
+
+ \fp_set:Nn \l__spath_tmpa_fp {\tl_head:N \l__spath_tmpa_tl * #2}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \fp_set:Nn \l__spath_tmpb_fp {\tl_head:N \l__spath_tmpa_tl * #3}
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\fp_to_dim:N \l__spath_tmpa_fp}
+ {\fp_to_dim:N \l__spath_tmpb_fp}
+ }
+ \spath_put:nnV {#1} {##1} \l__spath_tmpb_tl
+ }
+ }
+ \tl_map_inline:Nn \g__spath_path_attributes
+ {
+ \spath_if_in:nnT {#1} {##1}
+ {
+ \__spath_get:nnN {#1} {##1} \l__spath_tmpa_tl
+ \tl_clear:N \l__spath_tmpb_tl
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_put_right:Nx \l__spath_tmpb_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \fp_set:Nn \l__spath_tmpa_fp {\tl_head:N \l__spath_tmpa_tl * #2}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \fp_set:Nn \l__spath_tmpb_fp {\tl_head:N \l__spath_tmpa_tl * #3}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\fp_to_dim:N \l__spath_tmpa_fp}
+ {\fp_to_dim:N \l__spath_tmpb_fp}
+ }
+ }
+ \spath_put:nnV {#1} {##1} \l__spath_tmpb_tl
+ }
+ }
+}
+\cs_generate_variant:Nn \spath_scale:nnn {nxx}
+% \end{macrocode}
+%
+% This variant allows for passing the coordinates as a single braced group as it strips off the outer braces of the second argument.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_scale:nn #1#2
+{
+ \spath_scale:nnn {#1} #2
+}
+
+\cs_generate_variant:Nn \spath_scale:nn {nV}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_transform:nnnnnnn}
+% Applies an affine (matrix and vector) transformation to path.
+% The matrix is specified in rows first.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_transform:nnnnnnn #1#2#3#4#5#6#7
+{
+ \tl_map_inline:Nn \g__spath_moveable_attributes
+ {
+ \spath_if_in:nnT {#1} {##1}
+ {
+ \__spath_get:nnN {#1} {##1} \l__spath_tmpa_tl
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_head:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_head:N \l__spath_tmpa_tl}
+ \fp_set:Nn \l__spath_tmpa_fp {\l__spath_tmpa_tl * #2 + \l__spath_tmpb_tl * #3 + #6}
+ \fp_set:Nn \l__spath_tmpb_fp {\l__spath_tmpa_tl * #4 + \l__spath_tmpb_tl * #5 + #7}
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\fp_to_dim:N \l__spath_tmpa_fp}
+ {\fp_to_dim:N \l__spath_tmpb_fp}
+ }
+ \spath_put:nnV {#1} {##1} \l__spath_tmpb_tl
+ }
+ }
+ \tl_map_inline:Nn \g__spath_path_attributes
+ {
+ \spath_if_in:nnT {#1} {##1}
+ {
+ \__spath_get:nnN {#1} {##1} \l__spath_tmpa_tl
+ \tl_clear:N \l__spath_tmpb_tl
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_put_right:Nx \l__spath_tmpb_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \fp_set:Nn \l__spath_tmpa_fp {\l_tmpa_tl * #2 + \l_tmpb_tl * #3 + #6}
+ \fp_set:Nn \l__spath_tmpb_fp {\l_tmpa_tl * #4 + \l_tmpb_tl * #5 + #7}
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\fp_to_dim:N \l__spath_tmpa_fp}
+ {\fp_to_dim:N \l__spath_tmpb_fp}
+ }
+ }
+ \spath_put:nnV {#1} {##1} \l__spath_tmpb_tl
+ }
+ }
+}
+
+\cs_generate_variant:Nn \spath_transform:nnnnnnn {nxxxxxx}
+% \end{macrocode}
+%
+% This variant allows for passing the coordinates as a single braced group as it strips off the outer braces of the second argument.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_transform:nn #1#2
+{
+ \spath_transform:nnnnnnn {#1} #2
+}
+
+\cs_generate_variant:Nn \spath_transform:nn {nV}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_reverse:n}
+% This reverses a path.
+% As a lot of the data is invariant under reversing, there isn't a lot to do.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_reverse:n #1
+{
+ \spath_if_in:nnF {#1} {reverse path} {
+ \use:c {spath_generate_reverse path:n} {#1}
+ }
+ \spath_swap:nnn {#1} {path} {reverse path}
+ \spath_swap:nnn {#1} {initial point} {final point}
+ \spath_swap:nnn {#1} {initial action} {final action}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_swap:nnn}
+% Swaps two entries, being careful to ensure that their existence (or otherwise) is preserved.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_swap:nnn #1#2#3
+{
+ \__spath_get:nnNF {#1} {#2} \l__spath_tmpa_tl {\tl_clear:N \l__spath_tmpa_tl}
+ \__spath_get:nnNF {#1} {#3} \l__spath_tmpb_tl {\tl_clear:N \l__spath_tmpb_tl}
+ \tl_if_empty:NTF \l__spath_tmpb_tl
+ {\spath_remove:nn {#1} {#2}}
+ {\spath_put:nnV {#1} {#2} \l__spath_tmpb_tl}
+ \tl_if_empty:NTF \l__spath_tmpa_tl
+ {\spath_remove:nn {#1} {#3}}
+ {\spath_put:nnV {#1} {#3} \l__spath_tmpa_tl}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_weld:nn}
+% This welds one path to another, moving the second so that it's initial point coincides with the first's final point.
+% It is called a \emph{weld} because the initial move of the second path is removed.
+% The first path is updated, the second is not modified.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_weld:nn #1#2
+{
+ \spath_clone:nn {#2} {tmp_path}
+ \spath_get:nnN {#1} {final point} \l__spath_tmpa_tl
+
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+
+ \spath_get:nnN {#2} {initial point} \l__spath_tmpa_tl
+
+ \dim_sub:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_sub:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+
+ \spath_translate:nxx {tmp_path} {\dim_use:N \l__spath_tmpa_dim} {\dim_use:N \l__spath_tmpb_dim}
+
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \__spath_get:nnN {tmp_path} {path} \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+
+ \spath_put:nnV {#1} {path} \l__spath_tmpa_tl
+
+ \__spath_get:nnNTF {tmp_path} {final point} \l__spath_tmpa_tl
+ {
+ \spath_put:nnV {#1} {final point} \l__spath_tmpa_tl
+ }
+ {
+ \spath_remove:nn {#1} {final point}
+ }
+
+ \__spath_get:nnNTF {tmp_path} {final action} \l__spath_tmpa_tl
+ {
+ \spath_put:nnV {#1} {final action} \l__spath_tmpa_tl
+ }
+ {
+ \spath_remove:nn {#1} {final action}
+ }
+
+ \__spath_get:nnNT {tmp_path} {min bb} \l__spath_tmpa_tl
+ {
+ \__spath_get:nnNT {#1} {min bb} \l__spath_tmpb_tl
+ {
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_min:nn {\l__spath_tmpa_dim} {\tl_head:N \l__spath_tmpb_tl}}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_min:nn {\l__spath_tmpb_dim} {\tl_head:N \l__spath_tmpb_tl}}
+
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \spath_put:nnV {#1} {min bb} \l__spath_tmpb_tl
+ }
+ }
+
+ \__spath_get:nnNT {tmp_path} {max bb} \l__spath_tmpa_tl
+ {
+ \__spath_get:nnNT {#1} {max bb} \l__spath_tmpb_tl
+ {
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_max:nn {\l__spath_tmpa_dim} {\tl_head:N \l__spath_tmpb_tl}}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_max:nn {\l__spath_tmpb_dim} {\tl_head:N \l__spath_tmpb_tl}}
+
+ \tl_clear:N \l__spath_tmpb_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \spath_put:nnV {#1} {max bb} \l__spath_tmpb_tl
+ }
+ }
+
+ \__spath_get:nnNT {tmp_path} {reverse path} \l__spath_tmpa_tl
+ {
+ \__spath_get:nnNT {#1} {reverse path} \l__spath_tmpb_tl
+ {
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+
+ \spath_put:nnV {#1} {reverse path} \l__spath_tmpa_tl
+ }
+ }
+
+ \__spath_get:nnNT {tmp_path} {length} \l__spath_tmpa_tl
+ {
+ \__spath_get:nnNT {#1} {length} \l__spath_tmpb_tl
+ {
+ \int_set:Nn \l__spath_tmpa_int {\l__spath_tmpa_tl + \l__spath_tmpb_tl - 1}
+ \spath_put:nnV {#1} {length} \l__spath_tmpa_int
+ }
+ }
+
+ \__spath_get:nnNT {tmp_path} {real length} \l__spath_tmpa_tl
+ {
+ \__spath_get:nnNT {#1} {real length} \l__spath_tmpb_tl
+ {
+ \int_set:Nn \l__spath_tmpa_int {\l__spath_tmpa_tl + \l__spath_tmpb_tl}
+ \spath_put:nnV {#1} {real length} \l__spath_tmpa_int
+ }
+ }
+
+ \__spath_get:nnNT {tmp_path} {number of components} \l__spath_tmpa_tl
+ {
+ \__spath_get:nnNT {#1} {number of components} \l__spath_tmpb_tl
+ {
+ \int_set:Nn \l__spath_tmpa_int {\l__spath_tmpa_tl + \l__spath_tmpb_tl - 1}
+ \spath_put:nnV {#1} {number of components} \l__spath_tmpa_int
+ }
+ }
+
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_prepend_no_move:nn}
+% Prepend the path from the second \Verb+spath+ to the first, removing
+% the adjoining move.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_prepend_no_move:nn #1#2
+{
+ \spath_if_exist:nT {#2}
+ {
+ \__spath_get:nnN {#2} {path} \l__spath_tmpa_tl
+ \__spath_get:nnN {#1} {path} \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+ \spath_put:nnV {#1} {path} \l__spath_tmpa_tl
+
+ \spath_if_in:nnTF {#2} {initial point}
+ {
+ \__spath_get:nnN {#2} {initial point} \l__spath_tmpa_tl
+ \spath_put:nnV {#1} {initial point} \l__spath_tmpa_tl
+ }
+ {
+ \spath_remove:nn {#1} {initial point}
+ }
+
+ \spath_if_in:nnTF {#2} {initial action}
+ {
+ \__spath_get:nnN {#2} {initial action} \l__spath_tmpa_tl
+ \spath_put:nnV {#1} {initial action} \l__spath_tmpa_tl
+ }
+ {
+ \spath_remove:nn {#1} {initial action}
+ }
+
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {length}
+ &&
+ \spath_if_in_p:nn {#2} {length}
+ }
+ {
+ \__spath_get:nnN {#1} {length} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {length} \l__spath_tmpb_tl
+ \spath_put:nnx {#1} {length} {\int_eval:n {\l__spath_tmpa_tl +
+ \l__spath_tmpb_tl - 1}}
+ }
+ {
+ \spath_remove:nn {#1} {length}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {real length}
+ &&
+ \spath_if_in_p:nn {#2} {real length}
+ }
+ {
+ \__spath_get:nnN {#1} {real length} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {real length} \l__spath_tmpb_tl
+ \spath_put:nnx {#1} {real length} {\int_eval:n {\l__spath_tmpa_tl +
+ \l__spath_tmpb_tl }}
+ }
+ {
+ \spath_remove:nn {#1} {real length}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {number of components}
+ &&
+ \spath_if_in_p:nn {#2} {number of components}
+ }
+ {
+ \__spath_get:nnN {#1} {number of components} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {number of components} \l__spath_tmpb_tl
+ \spath_put:nnx {#1} {number of components} {\int_eval:n {\l__spath_tmpa_tl +
+ \l__spath_tmpb_tl - 1}}
+ }
+ {
+ \spath_remove:nn {#1} {number of components}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {min bb}
+ &&
+ \spath_if_in_p:nn {#2} {min bb}
+ }
+ {
+ \__spath_get:nnN {#1} {min bb} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {min bb} \l__spath_tmpb_tl
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {1}} {\tl_item:Nn
+ \l__spath_tmpb_tl {1}}}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {2}} {\tl_item:Nn
+ \l__spath_tmpb_tl {2}}}
+ \spath_put:nnx {#1} {min bb} {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ }
+ {
+ \spath_remove:nn {#1} {min bb}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {max bb}
+ &&
+ \spath_if_in_p:nn {#2} {max bb}
+ }
+ {
+ \__spath_get:nnN {#1} {max bb} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {max bb} \l__spath_tmpb_tl
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {1}} {\tl_item:Nn
+ \l__spath_tmpb_tl {1}}}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {2}} {\tl_item:Nn
+ \l__spath_tmpb_tl {2}}}
+ \spath_put:nnx {#1} {max bb} {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ }
+ {
+ \spath_remove:nn {#1} {max bb}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {reverse path}
+ &&
+ \spath_if_in_p:nn {#2} {reverse path}
+ }
+ {
+ \__spath_get:nnN {#1} {reverse path} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {reverse path} \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+ \spath_put:nnV {#1} {reverse path} \l__spath_tmpb_tl
+ }
+ {
+ \spath_remove:nn {#1} {reverse path}
+ }
+
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_append_no_move:nn}
+% Append the path from the second \Verb+spath+ to the first, removing
+% the adjoining move.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_append_no_move:nn #1#2
+{
+ \spath_if_exist:nT {#2}
+ {
+ \spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \spath_get:nnN {#2} {path} \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+ \spath_put:nnV {#1} {path} \l__spath_tmpa_tl
+ \spath_if_in:nnTF {#2} {final point}
+ {
+ \__spath_get:nnN {#2} {final point} \l__spath_tmpa_tl
+ \spath_put:nnV {#1} {final point} \l__spath_tmpa_tl
+ }
+ {
+ \spath_remove:nn {#1} {final point}
+ }
+ \spath_if_in:nnTF {#2} {final action}
+ {
+ \__spath_get:nnN {#2} {final action} \l__spath_tmpa_tl
+ \spath_put:nnV {#1} {final action} \l__spath_tmpa_tl
+ }
+ {
+ \spath_remove:nn {#1} {final action}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {length}
+ &&
+ \spath_if_in_p:nn {#2} {length}
+ }
+ {
+ \__spath_get:nnN {#1} {length} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {length} \l__spath_tmpb_tl
+ \spath_put:nnx {#1} {length} {\int_eval:n {\l__spath_tmpa_tl +
+ \l__spath_tmpb_tl - 1}}
+ }
+ {
+ \spath_remove:nn {#1} {length}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {real length}
+ &&
+ \spath_if_in_p:nn {#2} {real length}
+ }
+ {
+ \__spath_get:nnN {#1} {real length} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {real length} \l__spath_tmpb_tl
+ \spath_put:nnx {#1} {real length} {\int_eval:n {\l__spath_tmpa_tl +
+ \l__spath_tmpb_tl }}
+ }
+ {
+ \spath_remove:nn {#1} {real length}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {number of components}
+ &&
+ \spath_if_in_p:nn {#2} {number of components}
+ }
+ {
+ \__spath_get:nnN {#1} {number of components} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {number of components} \l__spath_tmpb_tl
+ \spath_put:nnx {#1} {number of components} {\int_eval:n {\l__spath_tmpa_tl +
+ \l__spath_tmpb_tl - 1}}
+ }
+ {
+ \spath_remove:nn {#1} {number of components}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {min bb}
+ &&
+ \spath_if_in_p:nn {#2} {min bb}
+ }
+ {
+ \__spath_get:nnN {#1} {min bb} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {min bb} \l__spath_tmpb_tl
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {1}} {\tl_item:Nn
+ \l__spath_tmpb_tl {1}}}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {2}} {\tl_item:Nn
+ \l__spath_tmpb_tl {2}}}
+ \spath_put:nnx {#1} {min bb} {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ }
+ {
+ \spath_remove:nn {#1} {min bb}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {max bb}
+ &&
+ \spath_if_in_p:nn {#2} {max bb}
+ }
+ {
+ \__spath_get:nnN {#1} {max bb} \l__spath_tmpa_tl
+ \__spath_get:nnN {#2} {max bb} \l__spath_tmpb_tl
+ \dim_set:Nn \l__spath_tmpa_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {1}} {\tl_item:Nn
+ \l__spath_tmpb_tl {1}}}
+ \dim_set:Nn \l__spath_tmpb_dim {\dim_min:nn {\tl_item:Nn
+ \l__spath_tmpa_tl {2}} {\tl_item:Nn
+ \l__spath_tmpb_tl {2}}}
+ \spath_put:nnx {#1} {max bb} {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ }
+ {
+ \spath_remove:nn {#1} {max bb}
+ }
+ \bool_if:nTF
+ {
+ \spath_if_in_p:nn {#1} {reverse path}
+ &&
+ \spath_if_in_p:nn {#2} {reverse path}
+ }
+ {
+ \__spath_get:nnN {#2} {reverse path} \l__spath_tmpa_tl
+ \__spath_get:nnN {#1} {reverse path} \l__spath_tmpb_tl
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_set:Nx \l__spath_tmpb_tl {\tl_tail:N \l__spath_tmpb_tl}
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+ \spath_put:nnV {#1} {reverse path} \l__spath_tmpb_tl
+ }
+ {
+ \spath_remove:nn {#1} {reverse path}
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_bake_round:n}
+% Ought to clear the reverse path, if set.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_bake_round:n #1
+{
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \pgf@@processround\l__spath_tmpa_tl\l__spath_tmpb_tl
+ \spath_put:nnV {#1} {path} \l__spath_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_close_path:n}
+% Appends a close path to the end of the path, and to the end of the reverse path.
+% For now, the point is the initial or final point (respectively).
+% To be future proof, it ought to be the point of the adjacent move to.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_close_path:n #1
+{
+ \spath_get:nnN {#1} {initial point} \l__spath_tmpb_tl
+ \__spath_get:nnN {#1} {path} \l__spath_tmpa_tl
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_closepath_tl
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+ \spath_put:nnV {#1} {path} \l__spath_tmpa_tl
+ \spath_if_in:nnT {#1} {reverse path}
+ {
+ \spath_get:nnN {#1} {final point} \l__spath_tmpb_tl
+ \__spath_get:nnN {#1} {reverse path} \l__spath_tmpa_tl
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_closepath_tl
+ \tl_put_right:NV \l__spath_tmpa_tl \l__spath_tmpb_tl
+ \spath_put:nnV {#1} {reverse path} \l__spath_tmpa_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Iteration Functions}
+%
+% \begin{macro}{\spath_map_component:Nn}
+% This iterates through the components of a path, applying the inline function to each.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_map_component:Nn #1#2
+{
+ \int_gincr:N \g__spath_map_int
+ \cs_gset:cpn { __spath_map_ \int_use:N \g__spath_map_int :w } ##1 {#2}
+ \tl_set:NV \l__spath_tmpa_tl #1
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_moveto_tl
+ \tl_set_eq:NN \l__spath_tmpb_tl \g__spath_moveto_tl
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_set:Nx \l__spath_tmpc_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_if_eq:NNT \l__spath_tmpc_tl \g__spath_moveto_tl
+ {
+ \exp_args:NnV \use:c { __spath_map_ \int_use:N \g__spath_map_int :w } \l__spath_tmpb_tl
+\tl_clear:N \l__spath_tmpb_tl
+ }
+ \tl_if_single:NTF \l__spath_tmpc_tl
+ {
+ \tl_put_right:NV \l__spath_tmpb_tl \l__spath_tmpc_tl
+ }
+ {
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\l__spath_tmpc_tl}}
+ }
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_map_segment_inline:Nn}
+% This iterates through the segments of the path, applying the inline function to each.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_map_segment_inline:Nn #1#2
+{
+ \int_gincr:N \g__spath_map_int
+ \cs_gset:cpn { __spath_map_ \int_use:N \g__spath_map_int :w } ##1 ##2 {#2}
+ \spath_map_segment_function:Nc #1 { __spath_map_ \int_use:N \g__spath_map_int :w }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_map_segment_inline:nn}
+% This iterates through the segments of the path of the \Verb+spath+ object, applying the inline function to each.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_map_segment_inline:nn #1#2
+{
+ \int_gincr:N \g__spath_map_int
+ \cs_gset:cpn { __spath_map_ \int_use:N \g__spath_map_int :w } ##1 ##2 {#2}
+ \spath_get:nnN {#1} {path} \l__spath_tmpd_tl
+ \spath_map_segment_function:Nc \l__spath_tmpd_tl { __spath_map_ \int_use:N \g__spath_map_int :w }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\spath_map_segment_function:nN}
+% This iterates through the segments of the path of the \Verb+spath+ object, applying the specified function to each.
+% The specified function should take two \Verb+N+ type arguments.
+% The first is a token representing the type of path segment, the second is the path segment itself.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_map_segment_function:nN #1#2
+{
+ \spath_get:nnN {#1} {path} \l__spath_tmpd_tl
+ \spath_map_segment_function:NN \l__spath_tmpd_tl #2
+}
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_map_segment_function:NN #1#2
+{
+ \tl_set_eq:NN \l__spath_tmpa_tl #1
+ \tl_clear:N \l__spath_tmpb_tl
+ \dim_zero:N \l__spath_tmpa_dim
+ \dim_zero:N \l__spath_tmpb_dim
+
+ \bool_until_do:nn {
+ \tl_if_empty_p:N \l__spath_tmpa_tl
+ }
+ {
+ \tl_set:Nx \l__spath_tmpc_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_case:NnF \l__spath_tmpc_tl
+ {
+ \g__spath_lineto_tl
+ {
+ \tl_set_eq:NN \l__spath_tmpb_tl \g__spath_moveto_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \tl_put_right:NV \l__spath_tmpb_tl \g__spath_lineto_tl
+
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ }
+
+ \g__spath_curvetoa_tl
+ {
+ \tl_set_eq:NN \l__spath_tmpb_tl \g__spath_moveto_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \tl_put_right:NV \l__spath_tmpb_tl \g__spath_curvetoa_tl
+
+ \prg_replicate:nn {2} {
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ \tl_put_right:Nx \l__spath_tmpb_tl {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+ }
+
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ }
+
+ \g__spath_closepath_tl
+ {
+ \tl_set_eq:NN \l__spath_tmpb_tl \g__spath_moveto_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl
+ {
+ {\dim_use:N \l__spath_tmpa_dim}
+ {\dim_use:N \l__spath_tmpb_dim}
+ }
+ \tl_put_right:NV \l__spath_tmpb_tl \g__spath_lineto_tl
+
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ }
+
+ }
+ {
+
+ \tl_set_eq:NN \l__spath_tmpb_tl \l__spath_tmpc_tl
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpa_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ \tl_put_right:Nx \l__spath_tmpb_tl {{\tl_head:N \l__spath_tmpa_tl}}
+ \dim_set:Nn \l__spath_tmpb_dim {\tl_head:N \l__spath_tmpa_tl}
+ \tl_set:Nx \l__spath_tmpa_tl {\tl_tail:N \l__spath_tmpa_tl}
+
+ }
+
+ #2 \l__spath_tmpc_tl \l__spath_tmpb_tl
+ \tl_clear:N \l__spath_tmpb_tl
+
+ }
+}
+\cs_generate_variant:Nn \spath_map_segment_function:NN {Nc}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Public Commands}
+%
+% The next functions are more ``public'' than the previous lot.
+% That said, they aren't intended for direct use in a normal document.
+%
+% Most are just wrappers around internal functions.
+%
+% \begin{macro}{\MakeSPath}
+% Constructs an \Verb+spath+ object out of the given name and path.
+% \begin{macrocode}
+\NewDocumentCommand \MakeSPath { m m }
+{
+ \spath_clear_new:n {#1}
+ \spath_put:nno {#1} {path} {#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MakeSPathList}
+% This constructs a list of \Verb+spath+ objects from a single path by splitting it into components.
+% \begin{macrocode}
+\NewDocumentCommand \MakeSPathList { m m }
+{
+ \tl_gclear_new:c {l__spath_list_#1}
+ \int_zero:N \l__spath_tmpa_int
+ \spath_map_component:Nn #2 {
+ \spath_clear_new:n {#1 _ \int_use:N \l__spath_tmpa_int}
+ \spath_put:nnn {#1 _ \int_use:N \l__spath_tmpa_int} {path} {##1}
+ \tl_gput_right:cx {l__spath_list_#1} {{#1 _ \int_use:N \l__spath_tmpa_int}}
+ \int_incr:N \l__spath_tmpa_int
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CloneSPath}
+% \begin{macrocode}
+\NewDocumentCommand \CloneSPath { m m }
+{
+ \spath_clone:nn {#1} {#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathInfo}
+% \begin{macrocode}
+\NewDocumentCommand \SPathInfo { m m }
+{
+ \spath_get:nn {#1} {#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathPrepare}
+% \begin{macrocode}
+\NewDocumentCommand \SPathPrepare { m }
+{
+ \spath_generate_all:n {#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathListPrepare}
+% \begin{macrocode}
+\NewDocumentCommand \SPathListPrepare { m }
+{
+ \tl_map_inline:cn {l__spath_list_#1}
+ {
+ \spath_generate_all:n {##1}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathInfoInto}
+% \begin{macrocode}
+\NewDocumentCommand \SPathInfoInto { m m m }
+{
+ \tl_clear_new:N #3
+ \spath_get:nnN {#1} {#2} #3
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathShow}
+% \begin{macrocode}
+\NewDocumentCommand \SPathShow { m }
+{
+ \spath_show:n {#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathTranslate}
+% \begin{macrocode}
+\NewDocumentCommand \SPathTranslate { m m m }
+{
+ \spath_translate:nnn {#1} {#2} {#3}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathTranslateInto}
+% Clones the path before translating it.
+% \begin{macrocode}
+\NewDocumentCommand \SPathTranslateInto { m m m m }
+{
+ \spath_clone:nn {#1} {#2}
+ \spath_translate:nnn {#2} {#3} {#4}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathScale}
+% \begin{macrocode}
+\NewDocumentCommand \SPathScale { m m m }
+{
+ \spath_scale:nnn {#1} {#2} {#3}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathScaleInto}
+% Clones the path first.
+% \begin{macrocode}
+\NewDocumentCommand \SPathScaleInto { m m m m }
+{
+ \spath_clone:nn {#1} {#2}
+ \spath_scale:nnn {#2} {#3} {#4}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathWeld}
+% \begin{macrocode}
+\NewDocumentCommand \SPathWeld { m m }
+{
+ \spath_weld:nn {#1} {#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SPathWeldInto}
+% \begin{macrocode}
+\NewDocumentCommand \SPathWeldInto { m m m }
+{
+ \spath_clone:nn {#1} {#2}
+ \spath_weld:nn {#2} {#3}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Interfaces via TikZ keys.
+% \begin{macrocode}
+\tikzset{
+ save~spath/.code={
+ \tikz@addmode{
+ \spath_get_current_path:n {#1}
+ }
+ },
+ restore~spath/.code={
+ \spath_set_current_path:n {#1}
+ }
+}
+% \end{macrocode}
+% \subsection{Miscellaneous Commands}
+%
+% \begin{macro}{\spath_split_curve:nnNN}
+% Splits a Bezier cubic into pieces.
+% \begin{macrocode}
+\cs_new_nopar:Npn \spath_split_curve:nnNN #1#2#3#4
+{
+ \group_begin:
+ \tl_gclear:N \l__spath_smuggle_tl
+ \tl_set_eq:NN \l__spath_tmpa_tl \g__spath_moveto_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl {
+ {\tl_item:nn {#2} {2}}
+ {\tl_item:nn {#2} {3}}
+ }
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_curvetoa_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl
+ {
+ {\fp_to_dim:n
+ {
+ (1 - #1) * \tl_item:nn {#2} {2} + (#1) * \tl_item:nn {#2} {5}
+ }}
+ {\fp_to_dim:n
+ {
+ (1 - #1) * \tl_item:nn {#2} {3} + (#1) * \tl_item:nn {#2} {6}
+ }}
+ }
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_curvetob_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl
+ {
+ {\fp_to_dim:n
+ {
+ (1 - #1)^2 * \tl_item:nn {#2} {2} + 2 * (1 - #1) * (#1) * \tl_item:nn {#2} {5} + (#1)^2 * \tl_item:nn {#2} {8}
+ }}
+ {\fp_to_dim:n
+ {
+ (1 - #1)^2 * \tl_item:nn {#2} {3} + 2 * (1 - #1) * (#1) * \tl_item:nn {#2} {6} + (#1)^2 * \tl_item:nn {#2} {9}
+ }}
+ }
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_curveto_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl
+ {
+ {\fp_to_dim:n
+ {
+ (1 - #1)^3 * \tl_item:nn {#2} {2} + 3 * (1 - #1)^2 * (#1) * \tl_item:nn {#2} {5} + 3 * (1 - #1) * (#1)^2 * \tl_item:nn {#2} {8} + (#1)^3 * \tl_item:nn {#2} {11}
+ }}
+ {\fp_to_dim:n
+ {
+ (1 - #1)^3 * \tl_item:nn {#2} {3} + 3 * (1 - #1)^2 * (#1) * \tl_item:nn {#2} {6} + 3 * (1 - #1) * (#1)^2 * \tl_item:nn {#2} {9} + (#1)^3 * \tl_item:nn {#2} {12}
+ }}
+ }
+ \tl_gset_eq:NN \l__spath_smuggle_tl \l__spath_tmpa_tl
+ \group_end:
+ \tl_set_eq:NN #3 \l__spath_smuggle_tl
+ \group_begin:
+ \tl_set_eq:NN \l__spath_tmpa_tl \g__spath_moveto_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl
+ {
+ {\fp_to_dim:n
+ {
+ (1 - #1)^3 * \tl_item:nn {#2} {2} + 3 * (1 - #1)^2 * (#1) * \tl_item:nn {#2} {5} + 3 * (1 - #1) * (#1)^2 * \tl_item:nn {#2} {8} + (#1)^3 * \tl_item:nn {#2} {11}
+ }}
+ {\fp_to_dim:n
+ {
+ (1 - #1)^3 * \tl_item:nn {#2} {3} + 3 * (1 - #1)^2 * (#1) * \tl_item:nn {#2} {6} + 3 * (1 - #1) * (#1)^2 * \tl_item:nn {#2} {9} + (#1)^3 * \tl_item:nn {#2} {12}
+ }}
+ }
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_curvetoa_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl
+ {
+ {\fp_to_dim:n
+ {
+ (1 - #1)^2 * \tl_item:nn {#2} {5} + 2 * (1 - #1) * (#1) * \tl_item:nn {#2} {8} + (#1)^2 * \tl_item:nn {#2} {11}
+ }}
+ {\fp_to_dim:n
+ {
+ (1 - #1)^2 * \tl_item:nn {#2} {6} + 2 * (1 - #1) * (#1) * \tl_item:nn {#2} {9} + (#1)^2 * \tl_item:nn {#2} {12}
+ }}
+ }
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_curvetob_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl
+ {
+ {\fp_to_dim:n
+ {
+ (1 - #1) * \tl_item:nn {#2} {8} + (#1) * \tl_item:nn {#2} {11}
+ }}
+ {\fp_to_dim:n
+ {
+ (1 - #1) * \tl_item:nn {#2} {9} + (#1) * \tl_item:nn {#2} {12}
+ }}
+ }
+ \tl_put_right:NV \l__spath_tmpa_tl \g__spath_curveto_tl
+ \tl_put_right:Nx \l__spath_tmpa_tl {
+ {\tl_item:nn {#2} {11}}
+ {\tl_item:nn {#2} {12}}
+ }
+ \tl_gset_eq:NN \l__spath_smuggle_tl \l__spath_tmpa_tl
+ \group_end:
+ \tl_set_eq:NN #4 \l__spath_smuggle_tl
+}
+
+\cs_generate_variant:Nn \spath_split_curve:nnNN {nVNN, VVNN}
+% \end{macrocode}
+% \end{macro}
+% \iffalse
+%</spath3>
+% \fi
+%
+% \iffalse
+%<*calligraphy>
+% \fi
+%
+% \section{The Calligraphy Package}
+%
+% \subsection{Initialisation}
+% \begin{macrocode}
+\RequirePackage{spath3}
+\ExplSyntaxOn
+
+\tl_new:N \l__cal_tmpa_tl
+\tl_new:N \l__cal_tmpb_tl
+\int_new:N \l__cal_tmpa_int
+\int_new:N \l__cal_tmpb_int
+\int_new:N \l__cal_path_component_int
+\int_new:N \l__cal_label_int
+\dim_new:N \l__cal_tmpa_dim
+\dim_new:N \l__cal_tmpb_dim
+\dim_new:N \l__cal_tmpc_dim
+\dim_new:N \l__cal_tmpd_dim
+\dim_new:N \l__cal_tmpe_dim
+\dim_new:N \l__cal_tmpf_dim
+\dim_new:N \l__cal_tmpg_dim
+\dim_new:N \l__cal_tmph_dim
+\bool_new:N \l__cal_annotate_bool
+\bool_new:N \l__cal_taper_start_bool
+\bool_new:N \l__cal_taper_end_bool
+\bool_new:N \l__cal_taperable_bool
+\dim_new:N \l__cal_taper_width_dim
+\dim_new:N \l__cal_line_width_dim
+
+\bool_set_true:N \l__cal_taper_start_bool
+\bool_set_true:N \l__cal_taper_end_bool
+
+\cs_generate_variant:Nn \tl_put_right:Nn {Nv}
+% \end{macrocode}
+%
+% \subsection{TikZ Keys}
+%
+% The public interface to this package is through TikZ keys and styles.
+% \begin{macrocode}
+\tikzset{
+ define~pen/.code={
+ \tikzset{pen~name=#1}
+ \pgf@relevantforpicturesizefalse
+ \tikz@addmode{
+ \pgfsyssoftpath@getcurrentpath\l__cal_tmpa_tl
+ \MakeSPathList{calligraphy pen \pgfkeysvalueof{/tikz/pen~name}}{\l__cal_tmpa_tl}
+ \SPathListPrepare{calligraphy pen \pgfkeysvalueof{/tikz/pen~name}}
+ \pgfusepath{discard}%
+ }
+ },
+ define~pen/.default={default},
+ use~pen/.code={
+ \tikzset{pen~name=#1}
+ \int_gzero:N \l__cal_path_component_int
+ \cs_set_eq:NN \pgfpathmoveto \cal_moveto:n
+ \tikz@addmode{
+ \pgfsyssoftpath@getcurrentpath\l__cal_tmpa_tl
+ \MakeSPathList{calligraphy path}{\l__cal_tmpa_tl}
+ \SPathListPrepare{calligraphy path}
+ \CalligraphyPathCreate{calligraphy path}{\pgfkeysvalueof{/tikz/pen~name}}
+ }
+ },
+ use~pen/.default={default},
+ pen~name/.initial={default},
+ copperplate/.style={pen~name=copperplate},
+ pen~colour/.initial={black},
+ weight/.is~choice,
+ weight/heavy/.style={
+ line~width=\pgfkeysvalueof{/tikz/heavy~line~width},
+ taper~width=\pgfkeysvalueof{/tikz/light~line~width},
+ },
+ weight/light/.style={
+ line~width=\pgfkeysvalueof{/tikz/light~line~width},
+ taper~width=0pt,
+ },
+ heavy/.style={
+ weight=heavy
+ },
+ light/.style={
+ weight=light
+ },
+ heavy~line~width/.initial=2pt,
+ light~line~width/.initial=1pt,
+ taper/.is~choice,
+ taper/.default=both,
+ taper/none/.style={
+ taper~start=false,
+ taper~end=false,
+ },
+ taper/both/.style={
+ taper~start=true,
+ taper~end=true,
+ },
+ taper/start/.style={
+ taper~start=true,
+ taper~end=false,
+ },
+ taper/end/.style={
+ taper~start=false,
+ taper~end=true,
+ },
+ taper~start/.code={
+ \tl_if_eq:nnTF {#1} {true}
+ {
+ \bool_set_true:N \l__cal_taper_start_bool
+ }
+ {
+ \bool_set_false:N \l__cal_taper_start_bool
+ }
+ },
+ taper~start/.default={true},
+ taper~end/.code={
+ \tl_if_eq:nnTF {#1} {true}
+ {
+ \bool_set_true:N \l__cal_taper_end_bool
+ }
+ {
+ \bool_set_false:N \l__cal_taper_end_bool
+ }
+ },
+ taper~end/.default={true},
+ taper~width/.code={\dim_set:Nn \l__cal_taper_width_dim {#1}},
+ nib~style/.code~2~args={
+ \tl_clear_new:c {l__cal_nib_style_#1}
+ \tl_set:cn {l__cal_nib_style_#1} {#2}
+ },
+ stroke~style/.code~2~args={
+ \tl_clear_new:c {l__cal_stroke_style_#1}
+ \tl_set:cn {l__cal_stroke_style_#1} {#2}
+ },
+ this~stroke~style/.code={
+ \tl_clear_new:c {l__cal_stroke_inline_style_ \int_use:N \l__cal_path_component_int}
+ \tl_set:cn {l__cal_stroke_inline_style_ \int_use:N \l__cal_path_component_int} {#1}
+ },
+ annotate/.style={
+ annotate~if,
+ annotate~reset,
+ annotation~style/.update~value={#1},
+ },
+ annotate~if/.default={true},
+ annotate~if/.code={
+ \tl_if_eq:nnTF {#1} {true}
+ {
+ \bool_set_true:N \l__cal_annotate_bool
+ }
+ {
+ \bool_set_false:N \l__cal_annotate_bool
+ }
+ },
+ annotate~reset/.code={
+ \int_gzero:N \l__cal_label_int
+ },
+ annotation~style/.initial={draw,->},
+ annotation~shift/.initial={(0,1ex)},
+ every~annotation~node/.initial={anchor=south~west},
+ annotation~node~style/.code~2~args={
+ \tl_set:cn {l__cal_annotation_style_ #1 _tl}{#2}
+ },
+ tl~use:N/.code={
+ \exp_args:NV \pgfkeysalso #1
+ },
+ tl~use:c/.code={
+ \tl_if_exist:cT {#1}
+ {
+ \exp_args:Nv \pgfkeysalso {#1}
+ }
+ },
+ /handlers/.update~style/.code={
+ \tl_if_eq:nnF {#1} {\pgfkeysnovalue}
+ {
+ \pgfkeys{\pgfkeyscurrentpath/.code=\pgfkeysalso{#1}}
+ }
+ },
+ /handlers/.update~value/.code={
+ \tl_if_eq:nnF {#1} {\pgfkeysnovalue}
+ {
+ \pgfkeyssetvalue{\pgfkeyscurrentpath}{#1}
+ }
+ }
+}
+% \end{macrocode}
+%
+% Some wrappers around the TikZ keys.
+% \begin{macrocode}
+\NewDocumentCommand \pen { O{} }
+{
+ \path[define~ pen,every~ calligraphy~ pen/.try,#1]
+}
+
+\NewDocumentCommand \definepen { O{} }
+{
+ \tikz \path[define~ pen,every~ calligraphy~ pen/.try,#1]
+}
+
+\NewDocumentCommand \calligraphy { O{} }
+{
+ \path[use~ pen,every~ calligraphy/.try,#1]
+}
+% \end{macrocode}
+%
+% \subsection{The Path Creation}
+%
+% \begin{macro}{\CalligraphyPathCreate}
+% This is the main command for creating the calligraphic paths.
+% \begin{macrocode}
+\NewDocumentCommand \CalligraphyPathCreate { m m }
+{
+ \int_zero:N \l__cal_tmpa_int
+ \tl_map_inline:cn {l__spath_list_#1}
+ {
+ \int_incr:N \l__cal_tmpa_int
+ \int_zero:N \l__cal_tmpb_int
+ \tl_map_inline:cn {l__spath_list_calligraphy pen #2}
+ {
+ \int_incr:N \l__cal_tmpb_int
+ \group_begin:
+ \pgfsys@beginscope
+
+ \cal_apply_style:c {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
+ \cal_apply_style:c {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
+ \cal_apply_style:c {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
+
+ \spath_clone:nn {##1} {calligraphy temp path}
+
+ \__spath_get:nnN {####1} {initial point} \l__cal_tmpa_tl
+ \spath_translate:nV {calligraphy temp path} \l__cal_tmpa_tl
+
+ \__spath_get:nnN {####1} {length} \l__cal_tmpa_tl
+
+ \int_compare:nTF {\l__cal_tmpa_tl = 1}
+ {
+ \cal_at_least_three:n {calligraphy temp path}
+
+ \spath_protocol_path:n {calligraphy temp path}
+
+ \__spath_get:nnN {calligraphy temp path} {path} \l__cal_tmpa_tl
+
+ \tikz@options
+ \dim_set:Nn \l__cal_line_width_dim {\pgflinewidth}
+ \cal_maybe_taper:N \l__cal_tmpa_tl
+ }
+ {
+
+ \spath_weld:nn {calligraphy temp path} {####1}
+ \spath_reverse:n {##1}
+ \spath_reverse:n {####1}
+ \spath_weld:nn {calligraphy temp path} {##1}
+ \spath_weld:nn {calligraphy temp path} {####1}
+ \spath_reverse:n {##1}
+ \spath_reverse:n {####1}
+
+ \tl_clear:N \l__cal_tmpa_tl
+ \tl_set:Nn \l__cal_tmpa_tl {fill=\pgfkeysvalueof{/tikz/pen~colour},draw=none}
+ \tl_if_exist:cT {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
+ {
+ \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
+ }
+ \tl_if_exist:cT {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
+ {
+ \tl_put_right:Nn \l__cal_tmpa_tl {,}
+ \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
+ }
+ \tl_if_exist:cT {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
+ {
+ \tl_put_right:Nn \l__cal_tmpa_tl {,}
+ \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
+ }
+ \spath_tikz_path:Vn \l__cal_tmpa_tl {calligraphy temp path}
+
+ }
+ \pgfsys@endscope
+ \group_end:
+ }
+ \bool_if:NT \l__cal_annotate_bool
+ {
+ \spath_clone:nn {##1} {calligraphy temp path}
+ \tl_set_eq:Nc \l_tmpa_tl {l__spath_list_calligraphy pen #2}
+ \tl_reverse:N \l_tmpa_tl
+ \tl_set:Nx \l_tmpa_tl {\tl_head:N \l_tmpa_tl}
+ \spath_generate_finalpoint:V \l_tmpa_tl
+ \spath_get:VnN \l_tmpa_tl {final point} \l_tmpa_tl
+ \spath_translate:nV {calligraphy temp path} \l_tmpa_tl
+ \tikz@scan@one@point\pgfutil@firstofone\pgfkeysvalueof{/tikz/annotation~shift}
+ \spath_translate:nnn {calligraphy temp path} {\pgf@x} {\pgf@y}
+
+ \pgfkeysgetvalue{/tikz/annotation~style}{\l_tmpa_tl}
+ \spath_tikz_path:Vn \l_tmpa_tl {calligraphy temp path}
+ \spath_get:nnN {calligraphy temp path} {final point} \l_tmpa_tl
+ \exp_last_unbraced:NV \pgfqpoint \l_tmpa_tl
+ \begin{scope}[reset~ cm]
+ \node[every~annotation~node/.try,tl~use:c = {l__cal_annotation_style_ \int_use:N \l__cal_tmpa_int _tl}] at (\pgf@x,\pgf@y) {\int_use:N \l__cal_tmpa_int};
+ \end{scope}
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_moveto:n}
+% When creating the path, we need to keep track of the number of components so that we can apply styles accordingly.
+% \begin{macrocode}
+\cs_new_eq:NN \cal_orig_moveto:n \pgfpathmoveto
+\cs_new_nopar:Npn \cal_moveto:n #1
+{
+ \int_gincr:N \l__cal_path_component_int
+ \cal_orig_moveto:n {#1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_apply_style:N}
+% Interface for applying \Verb+\tikzset+ to a token list.
+% \begin{macrocode}
+\cs_new_nopar:Npn \cal_apply_style:N #1
+{
+ \tl_if_exist:NT #1 {
+ \exp_args:NV \tikzset #1
+ }
+}
+\cs_generate_variant:Nn \cal_apply_style:N {c}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_at_least_three:n}
+% A tapered path has to have at least three components.
+% This figures out if it is necessary and sets up the splitting.
+% \begin{macrocode}
+\cs_new_nopar:Npn \cal_at_least_three:n #1
+{
+ \spath_get:nnN {#1} {real length} \l__cal_tmpa_tl
+ \tl_clear:N \l__cal_tmpb_tl
+ \int_compare:nTF {\l__cal_tmpa_tl = 1}
+ {
+ \spath_get:nnN {#1} {path} \l__cal_tmpa_tl
+ \spath_map_segment_inline:Nn \l__cal_tmpa_tl
+ {
+ \tl_case:NnF ##1 {
+ \g__spath_lineto_tl {
+ \cal_split_line_in_three:NN \l__cal_tmpb_tl ##2
+ }
+ \g__spath_curvetoa_tl {
+ \cal_split_curve_in_three:NN \l__cal_tmpb_tl ##2
+ }
+ }
+ {
+ \tl_put_right:NV \l__cal_tmpb_tl ##2
+ }
+ }
+ \spath_put:nnV {#1} {path} \l__cal_tmpb_tl
+ }
+ {
+ \int_compare:nT {\l__cal_tmpa_tl = 2}
+ {
+ \spath_get:nnN {#1} {path} \l__cal_tmpa_tl
+ \spath_map_segment_inline:Nn \l__cal_tmpa_tl
+ {
+ \tl_case:NnF ##1 {
+ \g__spath_lineto_tl {
+ \cal_split_line_in_two:NN \l__cal_tmpb_tl ##2
+ }
+ \g__spath_curvetoa_tl {
+ \cal_split_curve_in_two:NN \l__cal_tmpb_tl ##2
+ }
+ }
+ {
+ \tl_put_right:NV \l__cal_tmpb_tl ##2
+ }
+ }
+ \spath_put:nnV {#1} {path} \l__cal_tmpb_tl
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_split_line_in_two:NN}
+% Splits a line in two, adding the splits to the first token list.
+% \begin{macrocode}
+\cs_new_nopar:Npn \cal_split_line_in_two:NN #1#2
+{
+ \tl_set_eq:NN \l__cal_tmpc_tl #2
+
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \dim_set:Nn \l__cal_tmpa_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \dim_set:Nn \l__cal_tmpb_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \dim_set:Nn \l__cal_tmpc_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+ \dim_set:Nn \l__cal_tmpd_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \tl_put_right:NV #1 \g__spath_lineto_tl
+
+ \tl_put_right:Nx #1 {
+ {\dim_eval:n {(\l__cal_tmpa_dim + \l__cal_tmpc_dim)/2}}
+ {\dim_eval:n {(\l__cal_tmpb_dim + \l__cal_tmpd_dim)/2}}
+ }
+
+ \tl_put_right:NV #1 \g__spath_lineto_tl
+ \tl_put_right:Nx #1 {
+ {\dim_use:N \l__cal_tmpc_dim}
+ {\dim_use:N \l__cal_tmpd_dim}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_split_line_in_three:NN}
+% Splits a line in three, adding the splits to the first token list.
+% \begin{macrocode}
+\cs_new_nopar:Npn \cal_split_line_in_three:NN #1#2
+{
+ \tl_set_eq:NN \l__cal_tmpc_tl #2
+
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \dim_set:Nn \l__cal_tmpa_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \dim_set:Nn \l__cal_tmpb_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \dim_set:Nn \l__cal_tmpc_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+ \dim_set:Nn \l__cal_tmpd_dim {\tl_head:N \l__cal_tmpc_tl}
+ \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
+
+ \tl_put_right:NV #1 \g__spath_lineto_tl
+
+ \tl_put_right:Nx #1 {
+ {\dim_eval:n {(2\l__cal_tmpa_dim + \l__cal_tmpc_dim)/3}}
+ {\dim_eval:n {(2\l__cal_tmpb_dim + \l__cal_tmpd_dim)/3}}
+ }
+
+ \tl_put_right:NV #1 \g__spath_lineto_tl
+
+ \tl_put_right:Nx #1 {
+ {\dim_eval:n {(\l__cal_tmpa_dim + 2\l__cal_tmpc_dim)/3}}
+ {\dim_eval:n {(\l__cal_tmpb_dim + 2\l__cal_tmpd_dim)/3}}
+ }
+
+ \tl_put_right:NV #1 \g__spath_lineto_tl
+ \tl_put_right:Nx #1 {
+ {\dim_use:N \l__cal_tmpc_dim}
+ {\dim_use:N \l__cal_tmpd_dim}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_split_curve_in_two:NN}
+% Splits a curve in two, adding the splits to the first token list.
+% \begin{macrocode}
+\cs_new_nopar:Npn \cal_split_curve_in_two:NN #1#2
+{
+ \spath_split_curve:nVNN {.5} #2 \l_tmpa_tl \l_tmpb_tl
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_put_right:NV #1 \l_tmpa_tl
+ \tl_put_right:NV #1 \l_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_split_curve_in_three:NN}
+% Splits a curve in three, adding the splits to the first token list.
+% \begin{macrocode}
+\cs_new_nopar:Npn \cal_split_curve_in_three:NN #1#2
+{
+ \spath_split_curve:nVNN {1/3} #2 \l_tmpa_tl \l_tmpb_tl
+
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_put_right:NV #1 \l_tmpa_tl
+
+ \spath_split_curve:nVNN {.5} \l_tmpb_tl \l_tmpa_tl \l_tmpb_tl
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_put_right:NV #1 \l_tmpa_tl
+ \tl_put_right:NV #1 \l_tmpb_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cal_maybe_taper:N}
+% Possibly tapers the path, depending on the booleans.
+% \begin{macrocode}
+\cs_new_nopar:Npn \cal_maybe_taper:N #1
+{
+ \tl_set_eq:NN \l__cal_tmpa_tl #1
+
+ \bool_if:NT \l__cal_taper_start_bool
+ {
+
+ \dim_set:Nn \l__cal_tmpa_dim {\tl_item:Nn \l__cal_tmpa_tl {2}}
+ \dim_set:Nn \l__cal_tmpb_dim {\tl_item:Nn \l__cal_tmpa_tl {3}}
+ \tl_set:Nx \l__cal_tmpb_tl {\tl_item:Nn \l__cal_tmpa_tl {4}}
+
+ \tl_case:NnF \l__cal_tmpb_tl
+ {
+ \g__spath_lineto_tl
+ {
+
+ \bool_set_true:N \l__cal_taperable_bool
+ \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {5}}
+ \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {6}}
+ \dim_set:Nn \l__cal_tmpc_dim {(2\l__cal_tmpa_dim + \l__cal_tmpg_dim)/3}
+ \dim_set:Nn \l__cal_tmpd_dim {(2\l__cal_tmpb_dim + \l__cal_tmph_dim)/3}
+ \dim_set:Nn \l__cal_tmpe_dim {(\l__cal_tmpa_dim + 2\l__cal_tmpg_dim)/3}
+ \dim_set:Nn \l__cal_tmpf_dim {(\l__cal_tmpb_dim + 2\l__cal_tmph_dim)/3}
+ \prg_replicate:nn {4}
+ {
+ \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl}
+ }
+ \tl_put_left:NV \l__cal_tmpa_tl \g__spath_moveto_tl
+ }
+ \g__spath_curvetoa_tl
+ {
+ \bool_set_true:N \l__cal_taperable_bool
+ \dim_set:Nn \l__cal_tmpc_dim {\tl_item:Nn \l__cal_tmpa_tl {5}}
+ \dim_set:Nn \l__cal_tmpd_dim {\tl_item:Nn \l__cal_tmpa_tl {6}}
+ \dim_set:Nn \l__cal_tmpe_dim {\tl_item:Nn \l__cal_tmpa_tl {8}}
+ \dim_set:Nn \l__cal_tmpf_dim {\tl_item:Nn \l__cal_tmpa_tl {9}}
+ \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {11}}
+ \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {12}}
+ \prg_replicate:nn {10}
+ {
+ \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl}
+ }
+ \tl_put_left:NV \l__cal_tmpa_tl \g__spath_moveto_tl
+ }
+ }
+ {
+ \bool_set_false:N \l__cal_taperable_bool
+ }
+
+ \bool_if:NT \l__cal_taperable_bool
+ {
+ \__cal_taper_aux:
+ }
+
+ }
+
+ \bool_if:NT \l__cal_taper_end_bool
+ {
+
+ \dim_set:Nn \l__cal_tmpa_dim {\tl_item:Nn \l__cal_tmpa_tl {-2}}
+ \dim_set:Nn \l__cal_tmpb_dim {\tl_item:Nn \l__cal_tmpa_tl {-1}}
+ \tl_set:Nx \l__cal_tmpb_tl {\tl_item:Nn \l__cal_tmpa_tl {-3}}
+
+ \tl_case:NnF \l__cal_tmpb_tl
+ {
+ \g__spath_lineto_tl
+ {
+
+ \bool_set_true:N \l__cal_taperable_bool
+ \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {-5}}
+ \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {-4}}
+ \dim_set:Nn \l__cal_tmpc_dim {(2\l__cal_tmpa_dim + \l__cal_tmpg_dim)/3}
+ \dim_set:Nn \l__cal_tmpd_dim {(2\l__cal_tmpb_dim + \l__cal_tmph_dim)/3}
+ \dim_set:Nn \l__cal_tmpe_dim {(\l__cal_tmpa_dim + 2\l__cal_tmpg_dim)/3}
+ \dim_set:Nn \l__cal_tmpf_dim {(\l__cal_tmpb_dim + 2\l__cal_tmph_dim)/3}
+ \tl_reverse:N \l__cal_tmpa_tl
+ \prg_replicate:nn {3}
+ {
+ \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl}
+ }
+ \tl_reverse:N \l__cal_tmpa_tl
+ }
+ \g__spath_curveto_tl
+ {
+ \bool_set_true:N \l__cal_taperable_bool
+ \dim_set:Nn \l__cal_tmpc_dim {\tl_item:Nn \l__cal_tmpa_tl {-5}}
+ \dim_set:Nn \l__cal_tmpd_dim {\tl_item:Nn \l__cal_tmpa_tl {-4}}
+ \dim_set:Nn \l__cal_tmpe_dim {\tl_item:Nn \l__cal_tmpa_tl {-8}}
+ \dim_set:Nn \l__cal_tmpf_dim {\tl_item:Nn \l__cal_tmpa_tl {-7}}
+ \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {-11}}
+ \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {-10}}
+ \tl_reverse:N \l__cal_tmpa_tl
+ \prg_replicate:nn {9}
+ {
+ \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl}
+ }
+ \tl_reverse:N \l__cal_tmpa_tl
+ }
+ }
+ {
+ \bool_set_false:N \l__cal_taperable_bool
+ }
+
+ \bool_if:NT \l__cal_taperable_bool
+ {
+ \__cal_taper_aux:
+ }
+
+ }
+
+ \pgfsyssoftpath@setcurrentpath\l__cal_tmpa_tl
+ \pgfsetstrokecolor{\pgfkeysvalueof{/tikz/pen~colour}}
+ \pgfusepath{stroke}
+
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\__cal_taper_aux:}
+% Auxiliary macro to avoid unnecessary code duplication.
+% \begin{macrocode}
+\cs_new_nopar:Npn \__cal_taper_aux:
+{
+ \tl_clear:N \l__cal_tmpb_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_moveto_tl
+
+ \fp_set:Nn \l__cal_tmpa_fp
+ {
+ \l__cal_tmpd_dim - \l__cal_tmpb_dim
+ }
+ \fp_set:Nn \l__cal_tmpb_fp
+ {
+ \l__cal_tmpa_dim - \l__cal_tmpc_dim
+ }
+ \fp_set:Nn \l__cal_tmpe_fp
+ {
+ (\l__cal_tmpa_fp^2 + \l__cal_tmpb_fp^2)^.5
+ }
+
+ \fp_set:Nn \l__cal_tmpa_fp {.5*\l__cal_taper_width_dim * \l__cal_tmpa_fp / \l__cal_tmpe_fp}
+ \fp_set:Nn \l__cal_tmpb_fp {.5*\l__cal_taper_width_dim * \l__cal_tmpb_fp / \l__cal_tmpe_fp}
+
+ \fp_set:Nn \l__cal_tmpc_fp
+ {
+ \l__cal_tmph_dim - \l__cal_tmpf_dim
+ }
+ \fp_set:Nn \l__cal_tmpd_fp
+ {
+ \l__cal_tmpe_dim - \l__cal_tmpg_dim
+ }
+ \fp_set:Nn \l__cal_tmpe_fp
+ {
+ (\l__cal_tmpc_fp^2 + \l__cal_tmpd_fp^2)^.5
+ }
+
+ \fp_set:Nn \l__cal_tmpc_fp {.5*\l__cal_line_width_dim * \l__cal_tmpc_fp / \l__cal_tmpe_fp}
+ \fp_set:Nn \l__cal_tmpd_fp {.5*\l__cal_line_width_dim * \l__cal_tmpd_fp / \l__cal_tmpe_fp}
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim}}
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpc_dim}}
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpd_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpe_dim}}
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmpf_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim}}
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim - \fp_to_dim:n{ 1.32 * \l__cal_tmpd_fp}}}
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim + \fp_to_dim:n {1.32* \l__cal_tmpc_fp}}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim - \fp_to_dim:n {1.32 * \l__cal_tmpd_fp}}}
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim + \fp_to_dim:n {1.32 * \l__cal_tmpc_fp}}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim}}
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpe_dim}}
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmpf_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpc_dim}}
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpd_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim}}
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim + \fp_to_dim:n{ 1.32 * \l__cal_tmpb_fp}}}
+ {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim - \fp_to_dim:n {1.32* \l__cal_tmpa_fp}}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim + \fp_to_dim:n {1.32 * \l__cal_tmpb_fp}}}
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim - \fp_to_dim:n {1.32 * \l__cal_tmpa_fp}}}
+ }
+
+ \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+
+ \tl_put_right:Nx \l__cal_tmpb_tl
+ {
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim}}
+ {\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}}
+ }
+
+ \pgfsyssoftpath@setcurrentpath\l__cal_tmpb_tl
+ \pgfsetfillcolor{\pgfkeysvalueof{/tikz/pen~colour}}
+ \pgfusepath{fill}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Defines a copperplate pen.
+% \begin{macrocode}
+\tl_set:Nn \l__cal_tmpa_tl {\pgfsyssoftpath@movetotoken{0pt}{0pt}}
+\MakeSPathList{calligraphy pen copperplate}{\l__cal_tmpa_tl}
+\SPathListPrepare{calligraphy pen copperplate}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \subsection{Decorations}
+%
+% If a decoration library is loaded we define some decorations that use the calligraphy library, specifically the copperplate pen with its tapering.
+%
+% First, a brace decoration.
+% \begin{macrocode}
+\expandafter\ifx\csname pgfdeclaredecoration\endcsname\relax
+\else
+\pgfdeclaredecoration{calligraphic brace}{brace}
+{
+ \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final]
+ {
+ \pgfsyssoftpath@setcurrentpath{\pgfutil@empty}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathcurveto
+ {\pgfqpoint{.15\pgfdecorationsegmentamplitude}{.3\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ {
+ \pgftransformxshift{+\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance}
+ \pgfpathlineto{\pgfqpoint{-\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ \pgfpathcurveto
+ {\pgfqpoint{-.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{-.15\pgfdecorationsegmentamplitude}{.7\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{0\pgfdecorationsegmentamplitude}{1\pgfdecorationsegmentamplitude}}
+ \pgfpathmoveto{\pgfqpoint{0\pgfdecorationsegmentamplitude}{1\pgfdecorationsegmentamplitude}}
+ \pgfpathcurveto
+ {\pgfqpoint{.15\pgfdecorationsegmentamplitude}{.7\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ }
+ {
+ \pgftransformxshift{+\pgfdecoratedremainingdistance}
+ \pgfpathlineto{\pgfqpoint{-\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ \pgfpathcurveto
+ {\pgfqpoint{-.5\pgfdecorationsegmentamplitude}{.5\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{-.15\pgfdecorationsegmentamplitude}{.3\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{0pt}{0pt}}
+ }
+ \tikzset{
+ taper width=.5\pgflinewidth,
+ taper
+ }%
+ \pgfsyssoftpath@getcurrentpath\cal@tmp@path
+ \MakeSPathList{calligraphy path}{\cal@tmp@path}%
+ \SPathListPrepare{calligraphy path}%
+ \CalligraphyPathCreate{calligraphy path}{copperplate}%
+ }
+ \state{final}{}
+}
+% \end{macrocode}
+%
+% The second is a straightened parenthesis (so that when very large it doesn't bow out too far).
+% \begin{macrocode}
+\pgfdeclaredecoration{calligraphic straight parenthesis}{brace}
+{
+ \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final]
+ {
+ \pgfsyssoftpath@setcurrentpath{\pgfutil@empty}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathcurveto
+ {\pgfqpoint{.76604\pgfdecorationsegmentamplitude}{.64279\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{2.3333\pgfdecorationsegmentamplitude}{\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{3.3333\pgfdecorationsegmentamplitude}{\pgfdecorationsegmentamplitude}}
+ {
+ \pgftransformxshift{+\pgfdecoratedremainingdistance}
+ \pgfpathlineto{\pgfqpoint{-3.3333\pgfdecorationsegmentamplitude}{\pgfdecorationsegmentamplitude}}
+ \pgfpathcurveto
+ {\pgfqpoint{-2.3333\pgfdecorationsegmentamplitude}{\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{-.76604\pgfdecorationsegmentamplitude}{.64279\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{0pt}{0pt}}
+ }
+ \tikzset{
+ taper width=.5\pgflinewidth,
+ taper
+ }%
+ \pgfsyssoftpath@getcurrentpath\cal@tmp@path
+ \MakeSPathList{calligraphy path}{\cal@tmp@path}%
+ \SPathListPrepare{calligraphy path}%
+ \CalligraphyPathCreate{calligraphy path}{copperplate}%
+ }
+ \state{final}{}%
+}
+% \end{macrocode}
+%
+% The third is a curved parenthesis.
+% \begin{macrocode}
+\pgfdeclaredecoration{calligraphic curved parenthesis}{brace}
+{
+ \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final]
+ {
+ \pgfsyssoftpath@setcurrentpath{\pgfutil@empty}
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgf@xa=\pgfdecoratedremainingdistance\relax
+ \advance\pgf@xa by -1.5890\pgfdecorationsegmentamplitude\relax
+ \edef\cgrphy@xa{\the\pgf@xa}
+ \pgfpathcurveto
+ {\pgfqpoint{1.5890\pgfdecorationsegmentamplitude}{1.3333\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{\cgrphy@xa}{1.3333\pgfdecorationsegmentamplitude}}
+ {\pgfqpoint{\pgfdecoratedremainingdistance}{0pt}}
+ \tikzset{
+ taper width=.5\pgflinewidth,
+ taper
+ }%
+ \pgfsyssoftpath@getcurrentpath\cal@tmp@path
+ \MakeSPathList{calligraphy path}{\cal@tmp@path}%
+ \SPathListPrepare{calligraphy path}%
+ \CalligraphyPathCreate{calligraphy path}{copperplate}%
+ }
+ \state{final}{}%
+}
+% \end{macrocode}
+% End the conditional for if pgfdecoration module is loaded
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+% \iffalse
+%</calligraphy>
+% \fi
+%
+%
+% \iffalse
+%<*knots>
+% \fi
+%%
+% \section{Drawing Knots}
+%
+%
+% \subsection{Initialisation}
+%
+% We load the \Verb+spath3+ library and the \Verb+intersections+ TikZ library.
+% Then we get going.
+% \begin{macrocode}
+\RequirePackage{spath3}
+\usetikzlibrary{intersections}
+
+\ExplSyntaxOn
+
+\tl_new:N \l__knot_tmpa_tl
+\tl_new:N \l__knot_tmpb_tl
+\tl_new:N \l__knot_tmpc_tl
+\tl_new:N \l__knot_tmpd_tl
+\tl_new:N \l__knot_tmpe_tl
+\tl_new:N \l__knot_tmpf_tl
+\tl_new:N \l__knot_tmpg_tl
+\tl_new:N \l__knot_redraws_tl
+\tl_new:N \l__knot_clip_width_tl
+\tl_new:N \l__knot_name_tl
+\tl_new:N \l__knot_node_tl
+\tl_new:N \l__knot_aux_tl
+\tl_new:N \l__knot_auxa_tl
+
+\int_new:N \l__knot_tmpa_int
+\int_new:N \l__knot_strands_int
+\int_new:N \l__knot_intersections_int
+\int_new:N \l__knot_filaments_int
+\int_new:N \l__knot_component_start_int
+
+\dim_new:N \l__knot_tmpa_dim
+\dim_new:N \l__knot_tmpb_dim
+\dim_new:N \l__knot_tmpc_dim
+\dim_new:N \l__knot_tolerance_dim
+\dim_new:N \l__knot_clip_bg_radius_dim
+\dim_new:N \l__knot_clip_draw_radius_dim
+
+\bool_new:N \l__knot_draft_bool
+\bool_new:N \l__knot_ignore_ends_bool
+\bool_new:N \l__knot_self_intersections_bool
+\bool_new:N \l__knot_splits_bool
+\bool_new:N \l__knot_super_draft_bool
+
+\bool_new:N \l__knot_prepend_prev_bool
+\bool_new:N \l__knot_append_next_bool
+\bool_new:N \l__knot_skip_bool
+\bool_new:N \l__knot_save_bool
+
+\seq_new:N \l__knot_nodes_seq
+
+\bool_set_true:N \l__knot_ignore_ends_bool
+% \end{macrocode}
+%
+% Configuration is via TikZ keys and styles.
+% \begin{macrocode}
+\tikzset{
+ knot/.code={
+ \tl_if_eq:nnTF {#1} {none}
+ {
+ \tikz@addmode{\tikz@mode@doublefalse}
+ }
+ {
+ \tikz@addmode{\tikz@mode@doubletrue}
+ \tl_if_eq:nnTF {\pgfkeysnovalue} {#1}
+ {
+ \tikz@addoption{\pgfsetinnerstrokecolor{.}}
+ }
+ {
+ \pgfsetinnerstrokecolor{#1}
+ }
+ \tikz@addoption{
+ \pgfsetstrokecolor{knotbg}
+ }
+ \tl_set:Nn \tikz@double@setup{
+ \pgfsetinnerlinewidth{\pgflinewidth}
+ \pgfsetlinewidth{\dim_eval:n {\tl_use:N \l__knot_gap_tl \pgflinewidth}}
+ }
+ }
+ },
+ knot~ gap/.store~ in=\l__knot_gap_tl,
+ knot~ gap=3,
+ knot~ diagram/.is~family,
+ knot~ diagram/.unknown/.code={
+ \tl_set_eq:NN \l__knot_tmpa_tl \pgfkeyscurrentname
+ \pgfkeysalso{
+ /tikz/\l__knot_tmpa_tl=#1
+ }
+ },
+ background~ colour/.code={%
+ \colorlet{knotbg}{#1}%
+ },
+ background~ color/.code={%
+ \colorlet{knotbg}{#1}%
+ },
+ background~ colour=white,
+ knot~ diagram,
+ name/.store~ in=\l__knot_name_tl,
+ name={knot},
+ save~ intersections/.is~ choice,
+ save~ intersections/.default=true,
+ save~ intersections/true/.code={
+ \bool_set_true:N \l__knot_save_bool
+ },
+ save~ intersections/false/.code={
+ \bool_set_false:N \l__knot_save_bool
+ },
+ every~ strand/.style={draw},
+ ignore~ endpoint~ intersections/.code={
+ \tl_if_eq:nnTF {#1} {true}
+ {
+ \bool_set_true:N \l__knot_ignore_ends_bool
+ }
+ {
+ \bool_set_false:N \l__knot_ignore_ends_bool
+ }
+ },
+ ignore~ endpoint~ intersections/.default=true,
+ consider~ self~ intersections/.is~choice,
+ consider~ self~ intersections/true/.code={
+ \bool_set_true:N \l__knot_self_intersections_bool
+ \bool_set_true:N \l__knot_splits_bool
+ },
+ consider~ self~ intersections/false/.code={
+ \bool_set_false:N \l__knot_self_intersections_bool
+ \bool_set_false:N \l__knot_splits_bool
+ },
+ consider~ self~ intersections/no~ splits/.code={
+ \bool_set_true:N \l__knot_self_intersections_bool
+ \bool_set_false:N \l__knot_splits_bool
+ },
+ consider~ self~ intersections/.default={true},
+ clip~ radius/.code={
+ \dim_set:Nn \l__knot_clip_bg_radius_dim {#1}
+ \dim_set:Nn \l__knot_clip_draw_radius_dim {#1+2pt}
+ },
+ clip~ draw~ radius/.code={
+ \dim_set:Nn \l__knot_clip_draw_radius_dim {#1}
+ },
+ clip~ background~ radius/.code={
+ \dim_set:Nn \l__knot_clip_bg_radius_dim {#1}
+ },
+ clip~ radius=10pt,
+ end~ tolerance/.code={
+ \dim_set:Nn \l__knot_tolerance_dim {#1}
+ },
+ end~ tolerance=14pt,
+ clip/.style={
+ clip
+ },
+ background~ clip/.style={
+ clip
+ },
+ clip~ width/.code={
+ \tl_set:Nn \l__knot_clip_width_tl {#1}
+ },
+ clip~ width=3,
+ flip~ crossing/.code={%
+ \tl_clear_new:c {l__knot_crossing_#1}
+ \tl_set:cn {l__knot_crossing_#1} {x}
+ },
+ ignore~ crossing/.code={%
+ \tl_clear_new:c {l__knot_ignore_crossing_#1}
+ \tl_set:cn {l__knot_ignore_crossing_#1} {x}
+ },
+ draft~ mode/.is~ choice,
+ draft~ mode/off/.code={%
+ \bool_set_false:N \l__knot_draft_bool
+ \bool_set_false:N \l__knot_super_draft_bool
+ },
+ draft~ mode/crossings/.code={%
+ \bool_set_true:N \l__knot_draft_bool
+ \bool_set_false:N \l__knot_super_draft_bool
+ },
+ draft~ mode/strands/.code={%
+ \bool_set_true:N \l__knot_draft_bool
+ \bool_set_true:N \l__knot_super_draft_bool
+ },
+ draft/.is~ family,
+ draft,
+ crossing~ label/.style={
+ overlay,
+ fill=white,
+ fill~ opacity=.5,
+ text~ opacity=1,
+ text=blue,
+ pin~ edge={blue,<-}
+ },
+ strand~ label/.style={
+ overlay,
+ circle,
+ draw=purple,
+ fill=white,
+ fill~ opacity=.5,
+ text~ opacity=1,
+ text=purple,
+ inner~ sep=0pt
+ },
+}
+% \end{macrocode}
+%
+% Wrapper around \Verb+\tikzset+ for applying keys from a token list, checking for if the given token list exists.
+% \begin{macrocode}
+\cs_new_nopar:Npn \knot_apply_style:N #1
+{
+ \tl_if_exist:NT #1 {
+ \exp_args:NV \tikzset #1
+ }
+}
+\cs_generate_variant:Nn \knot_apply_style:N {c}
+% \end{macrocode}
+%
+%\begin{macro}{\flipcrossings}
+% The user can specify a comma separated list of crossings to flip.
+% \begin{macrocode}
+\NewDocumentCommand \flipcrossings {m}
+{
+ \tikzset{knot~ diagram/flip~ crossing/.list={#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\strand}
+% This is how the user specifies a strand of the knot.
+% \begin{macrocode}
+\NewDocumentCommand \strand { O{} }
+{
+ \int_incr:N \l__knot_strands_int
+ \tl_clear_new:c {l__knot_options_strand \int_use:N \l__knot_strands_int}
+ \tl_set:cn {l__knot_options_strand \int_use:N \l__knot_strands_int} {#1}
+ \path[#1,save~ spath=knot strand \int_use:N \l__knot_strands_int]
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{knot}
+% This is the wrapper environment that calls the knot generation code.
+% \begin{macrocode}
+\NewDocumentEnvironment{knot} { O{} }
+{
+ \knot_initialise:n {#1}
+}
+{
+ \knot_render:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_initialise:n}
+% Set up some stuff before loading in the strands.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_initialise:n #1
+{
+ \tikzset{knot~ diagram/.cd,every~ knot~ diagram/.try,#1}
+ \int_zero:N \l__knot_strands_int
+ \tl_clear:N \l__knot_redraws_tl
+ \seq_gclear:N \l__knot_nodes_seq
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_render:}
+% This is the code that starts the work of rendering the knot.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_render:
+{
+% \end{macrocode}
+% Start a scope and reset the transformation (since all transformations have already been taken into account when defining the strands).
+% \begin{macrocode}
+ \pgfscope
+ \pgftransformreset
+% \end{macrocode}
+% Loop through the strands drawing each one for the first time.
+% \begin{macrocode}
+ \int_step_function:nnnN {1} {1} {\l__knot_strands_int} \knot_draw_strand:n
+% \end{macrocode}
+% In super draft mode we don't do anything else.
+% \begin{macrocode}
+ \bool_if:NF \l__knot_super_draft_bool
+ {
+% \end{macrocode}
+% In draft mode we draw labels at the ends of the strands; this also handles splitting curves to avoid self-intersections of Bezier curves if that's requested.
+% \begin{macrocode}
+ \int_step_function:nnnN {1} {1} {\l__knot_strands_int} \knot_draw_labels:n
+% \end{macrocode}
+% If we're considering self intersections we need to split the strands into filaments.
+% \begin{macrocode}
+ \bool_if:NTF \l__knot_self_intersections_bool
+ {
+ \knot_split_strands:
+ \int_set_eq:NN \l__knot_tmpa_int \l__knot_filaments_int
+ \tl_set:Nn \l__knot_prefix_tl {filament}
+ }
+ {
+ \int_set_eq:NN \l__knot_tmpa_int \l__knot_strands_int
+ \tl_set:Nn \l__knot_prefix_tl {strand}
+ }
+% \end{macrocode}
+% Initialise the intersection count.
+% \begin{macrocode}
+ \int_gzero:N \l__knot_intersections_int
+% \end{macrocode}
+% If in draft mode we label the intersections, otherwise we just stick a coordinate at each one.
+% \begin{macrocode}
+ \bool_if:NTF \l__knot_draft_bool
+ {
+ \tl_set:Nn \l__knot_node_tl {
+ \exp_not:N \node[coordinate,
+ pin={[node~ contents={\int_use:N \l__knot_intersections_int},knot~ diagram/draft/crossing~ label, knot~ diagram/draft/crossing~ \int_use:N \l__knot_intersections_int \c_space_tl label/.try]
+ }]
+ }
+ }
+ {
+ \tl_set:Nn \l__knot_node_tl {\exp_not:N \node[coordinate]}
+ }
+% \end{macrocode}
+% This double loop steps through the pieces (strands or filaments) and computes the intersections and does stuff with those.
+% \begin{macrocode}
+ \int_step_variable:nnnNn {1} {1} {\l__knot_tmpa_int - 1} \l__knot_tmpa_tl
+ {
+ \int_step_variable:nnnNn {\tl_use:N \l__knot_tmpa_tl + 1} {1} {\l__knot_tmpa_int} \l__knot_tmpb_tl
+ {
+ \knot_intersections:VV \l__knot_tmpa_tl \l__knot_tmpb_tl
+ }
+ }
+% \end{macrocode}
+% If any redraws were requested, do them here.
+% \begin{macrocode}
+ \tl_use:N \l__knot_redraws_tl
+% \end{macrocode}
+% Draw the crossing nodes
+% \begin{macrocode}
+ \seq_use:Nn \l__knot_nodes_seq {}
+ }
+% \end{macrocode}
+% Close the scope
+% \begin{macrocode}
+ \endpgfscope
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_draw_strand:n}
+% This renders a strand using the options originally specified.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_draw_strand:n #1
+{
+ \pgfscope
+ \group_begin:
+ \tl_set:Nn \l_tmpa_tl {knot~ diagram/every~ strand/.try,}
+ \tl_put_right:Nv \l_tmpa_tl {l__knot_options_strand #1}
+ \tl_put_right:Nn \l_tmpa_tl {,knot~ diagram/only~ when~ rendering/.try,only~ when~ rendering/.try}
+ \spath_bake_round:n {knot strand #1}
+ \spath_tikz_path:Vn \l_tmpa_tl {knot strand #1}
+ \group_end:
+ \endpgfscope
+}
+\cs_generate_variant:Nn \tl_put_right:Nn {Nv}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_draw_labels:n}
+% Draw a label at each end of each strand, if in draft mode.
+% Also, if requested, split potentially self intersecting Bezier curves.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_draw_labels:n #1
+{
+ \bool_if:NT \l__knot_draft_bool
+ {
+ \spath_get:nnN {knot strand #1} {final point} \l__knot_tmpb_tl
+ \dim_set:Nn \l__knot_tmpa_dim {\tl_item:Nn \l__knot_tmpb_tl {1}}
+ \dim_set:Nn \l__knot_tmpb_dim {\tl_item:Nn \l__knot_tmpb_tl {2}}
+ \node[knot~ diagram/draft/strand~label] at (\l__knot_tmpa_dim,\l__knot_tmpb_dim) {#1};
+ \spath_get:nnN {knot strand #1} {initial point} \l__knot_tmpb_tl
+ \dim_set:Nn \l__knot_tmpa_dim {\tl_item:Nn \l__knot_tmpb_tl {1}}
+ \dim_set:Nn \l__knot_tmpb_dim {\tl_item:Nn \l__knot_tmpb_tl {2}}
+ \node[knot~ diagram/draft/strand~label] at (\l__knot_tmpa_dim,\l__knot_tmpb_dim) {#1};
+ }
+ \bool_if:nT {
+ \l__knot_self_intersections_bool
+ &&
+ \l__knot_splits_bool
+ }
+ {
+ \tl_clear:N \l__knot_tmpa_tl
+ \spath_map_segment_function:nN {knot strand #1} \knot_split_self_intersects:NN
+ \spath_put:nnV {knot strand #1} {path} \l__knot_tmpa_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_split_self_intersects:NN}
+% This is the macro that does the split.
+% Figuring out whether a Bezier cubic self intersects is apparently a difficult problem so we don't bother.
+% We compute a point such that if there is an intersection then it lies on either side of the point.
+% I don't recall where the formula came from!
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_split_self_intersects:NN #1#2
+{
+ \tl_case:NnF #1
+ {
+ \g__spath_curvetoa_tl
+ {
+ \fp_set:Nn \l_tmpa_fp
+ {
+ (\tl_item:Nn #2 {3} - 3 * \tl_item:Nn #2 {6} + 3 * \tl_item:Nn #2 {9} - \tl_item:Nn #2 {12})
+ *
+ (3 * \tl_item:Nn #2 {8} - 3 * \tl_item:Nn #2 {11})
+ -
+ (\tl_item:Nn #2 {2} - 3 * \tl_item:Nn #2 {5} + 3 * \tl_item:Nn #2 {8} - \tl_item:Nn #2 {11})
+ *
+ (3 * \tl_item:Nn #2 {9} - 3 * \tl_item:Nn #2 {12})
+ }
+ \fp_set:Nn \l_tmpb_fp
+ {
+ (\tl_item:Nn #2 {2} - 3 * \tl_item:Nn #2 {5} + 3 * \tl_item:Nn #2 {8} - \tl_item:Nn #2 {11})
+ *
+ (3 * \tl_item:Nn #2 {6} - 6 * \tl_item:Nn #2 {9} + 3 * \tl_item:Nn #2 {12})
+ -
+ (\tl_item:Nn #2 {3} - 3 * \tl_item:Nn #2 {6} + 3 * \tl_item:Nn #2 {9} - \tl_item:Nn #2 {12})
+ *
+ (3 * \tl_item:Nn #2 {5} - 6 * \tl_item:Nn #2 {8} + 3 * \tl_item:Nn #2 {11})
+ }
+ \fp_compare:nTF
+ {
+ \l_tmpb_fp != 0
+ }
+ {
+ \fp_set:Nn \l_tmpa_fp {.5 * \l_tmpa_fp / \l_tmpb_fp}
+ \fp_compare:nTF
+ {
+ 0 < \l_tmpa_fp && \l_tmpa_fp < 1
+ }
+ {
+ \spath_split_curve:VVNN \l_tmpa_fp #2 \l_tmpa_tl \l_tmpb_tl
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
+ \tl_put_right:NV \l__knot_tmpa_tl \l_tmpa_tl
+ \tl_put_right:NV \l__knot_tmpa_tl \l_tmpb_tl
+ }
+ {
+ \tl_set_eq:NN \l_tmpa_tl #2
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_put_right:NV \l__knot_tmpa_tl \l_tmpa_tl
+ }
+ }
+ {
+ \tl_set_eq:NN \l_tmpa_tl #2
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_put_right:NV \l__knot_tmpa_tl \l_tmpa_tl
+ }
+ }
+ \g__spath_lineto_tl
+ {
+ \tl_set_eq:NN \l_tmpa_tl #2
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
+ \tl_put_right:NV \l__knot_tmpa_tl \l_tmpa_tl
+ }
+ }
+ {
+ \tl_put_right:NV \l__knot_tmpa_tl #2
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_intersections:nn}
+% This computes the intersections of two pieces and steps through them.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_intersections:nn #1#2
+{
+ \group_begin:
+ \tl_set_eq:NN \l__knot_tmpa_tl \l__knot_prefix_tl
+ \tl_put_right:Nn \l__knot_tmpa_tl {#1}
+ \tl_set_eq:NN \l__knot_tmpb_tl \l__knot_prefix_tl
+ \tl_put_right:Nn \l__knot_tmpb_tl {#2}
+ \spath_get:nnN {knot \tl_use:N \l__knot_tmpa_tl} {path} \l__knot_tmpc_tl
+ \spath_get:nnN {knot \tl_use:N \l__knot_tmpb_tl} {path} \l__knot_tmpd_tl
+
+ \bool_if:nTF {
+ \l__knot_save_bool
+ &&
+ \tl_if_exist_p:c {knot~ intersections~ \tl_use:N \l__knot_name_tl - \tl_use:N \l__knot_tmpa_tl - \tl_use:N \l__knot_tmpb_tl}
+ }
+ {
+ \tl_use:c {knot~ intersections~ \tl_use:N \l__knot_name_tl - \tl_use:N \l__knot_tmpa_tl - \tl_use:N \l__knot_tmpb_tl}
+ }
+ {
+\pgfintersectionofpaths{\pgfsetpath\l__knot_tmpc_tl}{\pgfsetpath\l__knot_tmpd_tl}
+
+ }
+ \int_compare:nT {\pgfintersectionsolutions > 0}
+ {
+ \int_step_function:nnnN {1} {1} {\pgfintersectionsolutions} \knot_do_intersection:n
+ }
+ \knot_save_intersections:VV \l__knot_tmpa_tl \l__knot_tmpb_tl
+ \group_end:
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_save_intersections:nn}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_save_intersections:nn #1#2
+{
+ \bool_if:NT \l__knot_save_bool
+ {
+ \tl_clear:N \l__knot_aux_tl
+ \tl_put_right:Nn \l__knot_aux_tl
+ {
+ \def\pgfintersectionsolutions
+ }
+ \tl_put_right:Nx \l__knot_aux_tl
+ {
+ {\int_eval:n {\pgfintersectionsolutions}}
+ }
+ \int_compare:nT {\pgfintersectionsolutions > 0}
+ {
+ \int_step_inline:nnnn {1} {1} {\pgfintersectionsolutions}
+ {
+ \pgfpointintersectionsolution{##1}
+ \dim_set:Nn \l__knot_tmpa_dim {\pgf@x}
+ \dim_set:Nn \l__knot_tmpb_dim {\pgf@y}
+ \tl_put_right:Nn \l__knot_aux_tl
+ {
+ \expandafter\def\csname pgfpoint@intersect@solution@##1\endcsname
+ }
+ \tl_put_right:Nx \l__knot_aux_tl
+ {
+ {\exp_not:N \pgf@x=\dim_use:N \l__knot_tmpa_dim\exp_not:N\relax\exp_not:N \pgf@y =\dim_use:N \l__knot_tmpb_dim\relax}
+ }
+ }
+ \tl_set:Nn \l__knot_auxa_tl {\expandafter \gdef \csname knot~ intersections~}
+ \tl_put_right:Nx \l__knot_auxa_tl {\tl_use:N \l__knot_name_tl - #1 - #2}
+ \tl_put_right:Nn \l__knot_auxa_tl {\endcsname}
+ \tl_put_right:Nx \l__knot_auxa_tl {{\tl_to_str:N \l__knot_aux_tl}}
+ \protected@write\@auxout{}{\tl_to_str:N \l__knot_auxa_tl}
+ }
+ }
+}
+\cs_generate_variant:Nn \knot_save_intersections:nn {VV}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_do_intersection:n}
+% This handles a specific intersection.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_do_intersection:n #1
+{
+% \end{macrocode}
+% Get the intersection coordinates.
+% \begin{macrocode}
+ \pgfpointintersectionsolution{#1}
+ \dim_set:Nn \l__knot_tmpa_dim {\pgf@x}
+ \dim_set:Nn \l__knot_tmpb_dim {\pgf@y}
+% \end{macrocode}
+% If we're dealing with filaments, we can get false positives from the end points.
+% \begin{macrocode}
+ \bool_set_false:N \l__knot_skip_bool
+ \bool_if:NT \l__knot_self_intersections_bool
+ {
+% \end{macrocode}
+% If one filament preceded the other, test for the intersection being at the relevant end point.
+% \begin{macrocode}
+ \tl_set:Nn \l_tmpa_tl {knot previous}
+ \tl_put_right:NV \l_tmpa_tl \l__knot_tmpa_tl
+ \tl_set:Nv \l_tmpa_tl \l_tmpa_tl
+ \tl_if_eq:NNT \l_tmpa_tl \l__knot_tmpb_tl
+ {
+ \knot_test_endpoint:VnT \l__knot_tmpb_tl {final point}
+ {
+ \bool_set_true:N \l__knot_skip_bool
+ }
+ }
+
+ \tl_set:Nn \l_tmpa_tl {knot previous}
+ \tl_put_right:NV \l_tmpa_tl \l__knot_tmpb_tl
+ \tl_set:Nv \l_tmpa_tl \l_tmpa_tl
+ \tl_if_eq:NNT \l_tmpa_tl \l__knot_tmpa_tl
+ {
+ \knot_test_endpoint:VnT \l__knot_tmpa_tl {final point}
+ {
+ \bool_set_true:N \l__knot_skip_bool
+ }
+ }
+ }
+% \end{macrocode}
+% The user can also say that end points of filaments (or strands) should simply be ignored anyway.
+% \begin{macrocode}
+ \bool_if:NT \l__knot_ignore_ends_bool
+ {
+ \knot_test_endpoint:VnT \l__knot_tmpa_tl {initial point}
+ {
+ \bool_set_true:N \l__knot_skip_bool
+ }
+ \knot_test_endpoint:VnT \l__knot_tmpa_tl {final point}
+ {
+ \bool_set_true:N \l__knot_skip_bool
+ }
+ \knot_test_endpoint:VnT \l__knot_tmpb_tl {initial point}
+ {
+ \bool_set_true:N \l__knot_skip_bool
+ }
+ \knot_test_endpoint:VnT \l__knot_tmpb_tl {final point}
+ {
+ \bool_set_true:N \l__knot_skip_bool
+ }
+ }
+% \end{macrocode}
+% Assuming that we passed all the above tests, we render the crossing.
+% \begin{macrocode}
+ \bool_if:NF \l__knot_skip_bool
+ {
+
+ \int_gincr:N \l__knot_intersections_int
+% \end{macrocode}
+% This is the intersection test.
+% If the intersection finder finds too many, it might be useful to ignore some.
+% \begin{macrocode}
+ \bool_if:nF
+ {
+ \tl_if_exist_p:c {l__knot_ignore_crossing_ \int_use:N
+ \l__knot_intersections_int}
+ &&
+ ! \tl_if_empty_p:c {l__knot_ignore_crossing_ \int_use:N
+ \l__knot_intersections_int}
+ }
+ {
+% \end{macrocode}
+% This is the flip test.
+% We only render one of the paths.
+% The ``flip'' swaps which one we render.
+% \begin{macrocode}
+ \bool_if:nTF
+ {
+ \tl_if_exist_p:c {l__knot_crossing_ \int_use:N
+ \l__knot_intersections_int}
+ &&
+ ! \tl_if_empty_p:c {l__knot_crossing_ \int_use:N
+ \l__knot_intersections_int}
+ }
+ {
+ \tl_set_eq:NN \l__knot_tmpg_tl \l__knot_tmpb_tl
+ }
+ {
+ \tl_set_eq:NN \l__knot_tmpg_tl \l__knot_tmpa_tl
+ }
+% \end{macrocode}
+% Now we know which one we're rendering, we test to see if we should also render its predecessor or successor to ensure that we render a path through the entire crossing region.
+% \begin{macrocode}
+ \bool_if:NT \l__knot_self_intersections_bool
+ {
+ \knot_test_endpoint:VnT \l__knot_tmpg_tl {initial point}
+ {
+ \bool_set_true:N \l__knot_prepend_prev_bool
+ }
+ {
+ \bool_set_false:N \l__knot_prepend_prev_bool
+ }
+ \knot_test_endpoint:VnT \l__knot_tmpg_tl {final point}
+ {
+ \bool_set_true:N \l__knot_append_next_bool
+ }
+ {
+ \bool_set_false:N \l__knot_append_next_bool
+ }
+% \end{macrocode}
+% If either of those tests succeeded, do the appending or prepending.
+% \begin{macrocode}
+ \bool_if:nT
+ {
+ \l__knot_prepend_prev_bool || \l__knot_append_next_bool
+ }
+ {
+ \spath_clone:nn {knot \tl_use:N \l__knot_tmpg_tl}
+ {knot \tl_use:N \l__knot_prefix_tl -1}
+
+ \tl_set_eq:cc {l__knot_options_ \tl_use:N \l__knot_prefix_tl -1} {l__knot_options_ \tl_use:N \l__knot_tmpg_tl}
+
+ \bool_if:nT
+ {
+ \l__knot_prepend_prev_bool
+ &&
+ \tl_if_exist_p:c {knot previous \tl_use:N \l__knot_tmpg_tl}
+ &&
+ !\tl_if_empty_p:c {knot previous \tl_use:N \l__knot_tmpg_tl}
+ }
+ {
+ \spath_prepend_no_move:nn {knot \tl_use:N \l__knot_prefix_tl -1} {knot \tl_use:c {knot previous \tl_use:N \l__knot_tmpg_tl}}
+% \end{macrocode}
+% If we split potentially self intersecting curves, we test to see if we should prepend yet another segment.
+% \begin{macrocode}
+ \bool_if:nT
+ {
+ \l__knot_splits_bool
+ &&
+ \tl_if_exist_p:c {knot previous \tl_use:N \l__knot_tmpg_tl}
+ &&
+ !\tl_if_empty_p:c {knot previous \tl_use:N \l__knot_tmpg_tl}
+ }
+ {
+ \knot_test_endpoint:vnT {knot previous \tl_use:N \l__knot_tmpg_tl} {initial point}
+ {
+ \spath_get:nnN {knot \tl_use:N \l__knot_prefix_tl -1} {path} \l_tmpa_tl
+ \spath_prepend_no_move:nn {knot \tl_use:N \l__knot_prefix_tl -1} {knot \tl_use:c {knot previous \tl_use:c {knot previous \tl_use:N \l__knot_tmpg_tl}}}
+ \spath_get:nnN {knot \tl_use:N \l__knot_prefix_tl -1} {path} \l_tmpa_tl
+
+ }
+ }
+ }
+% \end{macrocode}
+% Now the same for appending.
+% \begin{macrocode}
+ \bool_if:nT
+ {
+ \l__knot_append_next_bool
+ &&
+ \tl_if_exist_p:c {knot next \tl_use:N \l__knot_tmpg_tl}
+ &&
+ !\tl_if_empty_p:c {knot previous \tl_use:N \l__knot_tmpg_tl}
+ }
+ {
+ \spath_append_no_move:nn {knot \tl_use:N \l__knot_prefix_tl -1} {knot \tl_use:c {knot next \tl_use:N \l__knot_tmpg_tl}}
+ \bool_if:nT
+ {
+ \l__knot_splits_bool
+ &&
+ \tl_if_exist_p:c {knot previous \tl_use:N
+ \l__knot_tmpg_tl}
+ &&
+ !\tl_if_empty_p:c {knot previous \tl_use:N \l__knot_tmpg_tl}
+ }
+ {
+ \knot_test_endpoint:vnT {knot previous \tl_use:N \l__knot_tmpg_tl} {final point}
+ {
+ \spath_append_no_move:nn {knot \tl_use:N \l__knot_prefix_tl -1} {knot \tl_use:c {knot next \tl_use:c {knot next \tl_use:N \l__knot_tmpg_tl}}}
+
+ }
+ }
+ }
+
+ \tl_set:Nn \l__knot_tmpg_tl {\tl_use:N \l__knot_prefix_tl -1}
+ }
+ }
+% \end{macrocode}
+% Now we render the crossing.
+% \begin{macrocode}
+ \pgfscope
+ \group_begin:
+ \tikzset{knot~ diagram/every~ intersection/.try, every~ intersection/.try, knot~ diagram/intersection~ \int_use:N \l__knot_intersections_int/.try}
+ \knot_draw_crossing:nVV {\tl_use:N \l__knot_tmpg_tl} \l__knot_tmpa_dim \l__knot_tmpb_dim
+ \group_end:
+ \endpgfscope
+% \end{macrocode}
+% This ends the boolean as to whether to consider the intersection at all
+% \begin{macrocode}
+ }
+% \end{macrocode}
+% And stick a coordinate possibly with a label at the crossing.
+% \begin{macrocode}
+ \seq_gpush:Nx \l__knot_nodes_seq { \l__knot_node_tl (\l__knot_name_tl \c_space_tl \int_use:N \l__knot_intersections_int) at (\dim_use:N \l__knot_tmpa_dim, \dim_use:N \l__knot_tmpb_dim) {};}
+
+ }
+}
+
+\cs_generate_variant:Nn \knot_intersections:nn {VV}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_test_endpoint:N}
+% Test whether the point is near the intersection point.
+% \begin{macrocode}
+\prg_new_conditional:Npnn \knot_test_endpoint:N #1 {p,T,F,TF}
+{
+ \dim_compare:nTF
+ {
+ \dim_abs:n { \l__knot_tmpa_dim - \tl_item:Nn #1 {1}}
+ +
+ \dim_abs:n { \l__knot_tmpb_dim - \tl_item:Nn #1 {2}}
+ <
+ \l__knot_tolerance_dim
+ }
+ {
+ \prg_return_true:
+ }
+ {
+ \prg_return_false:
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_test_endpoint:nn}
+% Wrapper around the above.
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn \knot_test_endpoint:nn #1#2 {T,F,TF}
+{
+ \spath_get:nnN {knot #1} {#2} \l__knot_tmpd_tl
+ \knot_test_endpoint:NTF \l__knot_tmpd_tl
+ {
+ \prg_return_true:
+ }
+ {
+ \prg_return_false:
+ }
+}
+
+\cs_generate_variant:Nn \knot_test_endpoint:nnT {VnT,vnT}
+\cs_generate_variant:Nn \knot_test_endpoint:nnF {VnF,vnF}
+\cs_generate_variant:Nn \knot_test_endpoint:nnTF {VnTF,vnTF}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_draw_crossing:nnn}
+% This is the code that actually renders a crossing.
+% \begin{macrocode}
+\cs_new_nopar:Npn \knot_draw_crossing:nnn #1#2#3
+{
+ \group_begin:
+ \pgfscope
+ \path[knot~ diagram/background~ clip] (#2, #3) circle[radius=\l__knot_clip_bg_radius_dim];
+
+ \tl_set:Nn \l_tmpa_tl {knot~ diagram/every~ strand/.try,}
+ \tl_if_exist:cT {l__knot_options_ #1}
+ {
+ \tl_put_right:Nv \l_tmpa_tl {l__knot_options_ #1}
+ }
+ \tl_put_right:Nn \l_tmpa_tl {,knotbg,line~ width= \tl_use:N \l__knot_clip_width_tl * \pgflinewidth}
+ \spath_tikz_path:Vn \l_tmpa_tl {knot #1}
+
+ \endpgfscope
+
+ \pgfscope
+ \path[knot~ diagram/clip] (#2, #3) circle[radius=\l__knot_clip_draw_radius_dim];
+
+ \tl_set:Nn \l_tmpa_tl {knot~ diagram/every~ strand/.try,}
+ \tl_if_exist:cT {l__knot_options_ #1}
+ {
+ \tl_put_right:Nv \l_tmpa_tl {l__knot_options_ #1}
+ }
+ \tl_put_right:Nn \l_tmpa_tl {,knot~ diagram/only~ when~ rendering/.try,only~ when~ rendering/.try}
+ \spath_tikz_path:Vn \l_tmpa_tl {knot #1}
+
+ \endpgfscope
+ \group_end:
+}
+
+\cs_generate_variant:Nn \knot_draw_crossing:nnn {nVV}
+
+\cs_new_nopar:Npn \knot_draw_crossing:nn #1#2
+{
+ \tikz@scan@one@point\pgfutil@firstofone #2 \relax
+ \knot_draw_crossing:nVV {#1} \pgf@x \pgf@y
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_split_strands:}
+% This, and the following macros, are for splitting strands into filaments.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_split_strands:
+{
+ \int_gzero:N \l__knot_filaments_int
+ \int_step_function:nnnN {1} {1} {\l__knot_strands_int} \knot_split_strand:n
+ \int_step_function:nnnN {1} {1} {\l__knot_filaments_int} \knot_compute_nexts:n
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_compute_nexts:n}
+% Each filament needs to know its predecessor and successor.
+% We work out the predecessors as we go along, this fills in the successors.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_compute_nexts:n #1
+{
+ \tl_clear_new:c {knot next \tl_use:c {knot previous filament #1}}
+ \tl_set:cn {knot next \tl_use:c {knot previous filament #1}} {filament #1}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_split_strand:n}
+% Sets up the split for a single strand.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_split_strand:n #1
+{
+ \int_set_eq:NN \l__knot_component_start_int \l__knot_filaments_int
+ \int_incr:N \l__knot_component_start_int
+ \tl_set_eq:Nc \l__knot_tmpa_tl {l__knot_options_strand #1}
+ \spath_map_segment_function:nN {knot strand #1} \knot_save_filament:NN
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\knot_save_filament:NN}
+% Saves a filament as a new \Verb+spath+ object.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \knot_save_filament:NN #1#2
+{
+ \tl_case:NnF #1
+ {
+ \g__spath_moveto_tl
+ {
+ \int_compare:nT {\l__knot_component_start_int < \l__knot_filaments_int}
+ {
+ \int_set_eq:NN \l__knot_component_start_int \l__knot_filaments_int
+ }
+ }
+ \g__spath_lineto_tl
+ {
+ \int_gincr:N \l__knot_filaments_int
+ \spath_clear_new:n {knot filament \int_use:N \l__knot_filaments_int}
+ \spath_put:nnV {knot filament \int_use:N \l__knot_filaments_int} {path} #2
+ \tl_set_eq:cN {l__knot_options_filament \int_use:N \l__knot_filaments_int} \l__knot_tmpa_tl
+
+ \tl_clear_new:c {knot previous filament \int_use:N \l__knot_filaments_int}
+ \int_compare:nF {\l__knot_component_start_int == \l__knot_filaments_int}
+ {
+ \tl_set:cx {knot previous filament \int_use:N \l__knot_filaments_int} {filament \int_eval:n {\l__knot_filaments_int - 1}}
+ }
+ }
+ \g__spath_curvetoa_tl
+ {
+ \int_gincr:N \l__knot_filaments_int
+ \spath_clear_new:n {knot filament \int_use:N \l__knot_filaments_int}
+ \spath_put:nnV {knot filament \int_use:N \l__knot_filaments_int} {path} #2
+ \tl_set_eq:cN {l__knot_options_filament \int_use:N \l__knot_filaments_int} \l__knot_tmpa_tl
+
+ \tl_clear_new:c {knot previous filament \int_use:N \l__knot_filaments_int}
+ \int_compare:nF {\l__knot_component_start_int == \l__knot_filaments_int}
+ {
+ \tl_set:cx {knot previous filament \int_use:N \l__knot_filaments_int} {filament \int_eval:n {\l__knot_filaments_int - 1}}
+ }
+ }
+ \g__spath_closepath_tl
+ {
+ \tl_show:N #2
+ \int_gincr:N \l__knot_filaments_int
+ \spath_clear_new:n {knot filament \int_use:N \l__knot_filaments_int}
+ \tl_clear:N \l_tmpa_tl
+ \tl_put_right:Nx {\tl_item:Nn #2 {1}\tl_item:Nn #2 {2}\tl_item:Nn #2 {3}}
+ \tl_put_right:NV \l_tmpa_tl \g__spath_lineto_tl
+ \tl_put_right:Nx {\tl_item:Nn #2 {5}\tl_item:Nn #2 {6}}
+ \tl_show:N \l_tmpa_tl
+ \spath_put:nnV {knot filament \int_use:N \l__knot_filaments_int} {path} \l_tmpa_tl
+ \tl_set_eq:cN {l__knot_options_filament \int_use:N \l__knot_filaments_int} \l__knot_tmpa_tl
+ \tl_clear_new:c {knot previous filament \int_use:N \l__knot_filaments_int}
+ \int_compare:nF {\l__knot_component_start_int == \l__knot_filaments_int}
+ {
+ \tl_set:cx {knot previous filament \int_use:N \l__knot_filaments_int} {filament \int_eval:n {\l__knot_filaments_int - 1}}
+ }
+ \tl_set:cx {knot previous filament \int_use:N \l__knot_component_start_int} {filament \int_use:N \l__knot_filaments_int}
+ }
+ }
+ {
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\redraw}
+% The user can redraw segments of the strands at specific locations.
+% \begin{macrocode}
+\NewDocumentCommand \redraw { m m }
+{
+% \tikz@scan@one@point\pgfutil@firstofone #2 \relax
+ \tl_put_right:Nn \l__knot_redraws_tl {\knot_draw_crossing:nn}
+ \tl_put_right:Nx \l__knot_redraws_tl {
+ {strand #1} {#2}% {\dim_use:N \pgf@x} {\dim_use:N \pgf@y}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \begin{macro}{\pgf@sh@@knotanchor}
+% Add the extra anchors for the knot crossing nodes.
+% \begin{macrocode}
+\def\pgf@sh@@knotanchor#1#2{%
+ \anchor{#2 north west}{%
+ \csname pgf@anchor@knot #1@north west\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+ \anchor{#2 north east}{%
+ \csname pgf@anchor@knot #1@north east\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+ \anchor{#2 south west}{%
+ \csname pgf@anchor@knot #1@south west\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+ \anchor{#2 south east}{%
+ \csname pgf@anchor@knot #1@south east\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+ \anchor{#2 north}{%
+ \csname pgf@anchor@knot #1@north\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+ \anchor{#2 east}{%
+ \csname pgf@anchor@knot #1@east\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+ \anchor{#2 west}{%
+ \csname pgf@anchor@knot #1@west\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+ \anchor{#2 south}{%
+ \csname pgf@anchor@knot #1@south\endcsname%
+ \pgf@x=#2\pgf@x%
+ \pgf@y=#2\pgf@y%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{knot crossing}
+% \begin{macrocode}
+\pgfdeclareshape{knot crossing}
+{
+ \inheritsavedanchors[from=circle] % this is nearly a circle
+ \inheritanchorborder[from=circle]
+ \inheritanchor[from=circle]{north}
+ \inheritanchor[from=circle]{north west}
+ \inheritanchor[from=circle]{north east}
+ \inheritanchor[from=circle]{center}
+ \inheritanchor[from=circle]{west}
+ \inheritanchor[from=circle]{east}
+ \inheritanchor[from=circle]{mid}
+ \inheritanchor[from=circle]{mid west}
+ \inheritanchor[from=circle]{mid east}
+ \inheritanchor[from=circle]{base}
+ \inheritanchor[from=circle]{base west}
+ \inheritanchor[from=circle]{base east}
+ \inheritanchor[from=circle]{south}
+ \inheritanchor[from=circle]{south west}
+ \inheritanchor[from=circle]{south east}
+ \inheritanchorborder[from=circle]
+ \pgf@sh@@knotanchor{crossing}{2}
+ \pgf@sh@@knotanchor{crossing}{3}
+ \pgf@sh@@knotanchor{crossing}{4}
+ \pgf@sh@@knotanchor{crossing}{8}
+ \pgf@sh@@knotanchor{crossing}{16}
+ \pgf@sh@@knotanchor{crossing}{32}
+ \backgroundpath{
+ \pgfutil@tempdima=\radius%
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb%
+ \advance\pgfutil@tempdima by-\pgf@yb%
+ \else%
+ \advance\pgfutil@tempdima by-\pgf@xb%
+ \fi%
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{knot over cross}
+% \begin{macrocode}
+\pgfdeclareshape{knot over cross}
+{
+ \inheritsavedanchors[from=rectangle] % this is nearly a circle
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchorborder[from=rectangle]
+ \backgroundpath{
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ }
+ \foregroundpath{
+% store lower right in xa/ya and upper right in xb/yb
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{knot under cross}
+% \begin{macrocode}
+\pgfdeclareshape{knot under cross}
+{
+ \inheritsavedanchors[from=rectangle] % this is nearly a circle
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchorborder[from=rectangle]
+ \backgroundpath{
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
+ }
+ \foregroundpath{
+% store lower right in xa/ya and upper right in xb/yb
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{knot vert}
+% \begin{macrocode}
+\pgfdeclareshape{knot vert}
+{
+ \inheritsavedanchors[from=rectangle] % this is nearly a circle
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchorborder[from=rectangle]
+ \backgroundpath{
+% store lower right in xa/ya and upper right in xb/yb
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{knot horiz}
+% \begin{macrocode}
+\pgfdeclareshape{knot horiz}
+{
+ \inheritsavedanchors[from=rectangle] % this is nearly a circle
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchorborder[from=rectangle]
+ \foregroundpath{
+% store lower right in xa/ya and upper right in xb/yb
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</knots>
+% \fi
+%\Finale
+\endinput
diff --git a/graphics/pgf/contrib/spath3/spath3_code.pdf b/graphics/pgf/contrib/spath3/spath3_code.pdf
new file mode 100644
index 0000000000..be1f2941bd
--- /dev/null
+++ b/graphics/pgf/contrib/spath3/spath3_code.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/README.md b/graphics/pgf/contrib/spectralsequences/README.md
new file mode 100644
index 0000000000..582a9c0804
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/README.md
@@ -0,0 +1,109 @@
+
+spectralsequences v1.2.2
+========================
+Author: Hood Chatham
+Email: hood@mit.edu
+Date: 2019-02-18
+License: All files have the Latex Project Public License.
+Description: Print spectral sequence diagrams using pgf/tikz.
+
+
+See the file manual/spectralsequencesmanual.pdf for a manual. See the examples directory for a large number of example files.
+Email me at hood@mit.edu to submit bug reports, request new features, etc. The current development copy is hosted at https://github.com/hoodmane/spectralsequences.
+
+Changelog:
+==========
+## [1.2.2] (2018-02-18)
+### Fixed:
+- expl3 defined \exp_after:NNNf recently, so I changed \cs_new:Npn \exp_after:NNNf to \cs_set:Npn \exp_after:NNNf and copied the definition given by
+ expl3.
+- expl3 changed the definition of \peek_meaning_ignore_spaces to be in terms of \peek_meaning so \letting \peek_meaning to \peek_meaning_ignore_spaces
+ caused an infite regress.
+- expl3 changed \c__xparse_no_value_tl to \c__novalue_tl, so now I try to use each of them in sequence.
+- Fixed U argument type.
+- \sseqnewfamily was broken by an update to tikz that added a \scantokens call to the .ecode key handler, causing issues with @.
+- If \d was called without a source or target argument and was followed by a macro, \d would eat the first token of the expansion of that macro
+ causing an error.
+- Draft mode works a lot better now, though it's probably still buggy.
+
+## [1.2.1] (2018-10-08)
+### Fixed:
+- Tick style didn't work, now it does.
+- Orphan edges are consistently oriented correctly now (reported by Eric Peterson).
+- Fixed name class in copypage
+- Fixed incompatibility with new expl3 version (reported by Eric Peterson). The fix amounts to replacing a \cs_new:Npn with a \cs_gset:Npn.
+
+### Added:
+- \sseqlastlabel
+
+## [1.2.0] (2017-12-10)
+### Added:
+- \replacesource and \replacetarget
+- \copypage
+- "name handler" option
+- \SseqAHSSNameHandler
+- \SseqNormalizeMonomialSetVariables
+- "show name" option
+- predicates \IfExistsTF, \IfAliveTF, \IfValidDifferentialTF, and \DrawIfValidDifferentialTF
+- "quiet" environment
+
+### Changed:
+- class label handlers now must output result into \result
+- renamed \sseqnormalizemonomial to \SseqNormalizeMonomial, and now outputs into \result
+- renamed \sseqifempty to \SseqIfEmptyTF
+- renamed \sseqerrortowarning to \SseqErrorToWarning
+- tooltips now disabled unless you use the package option "tooltips" to prevent extraneous auxiliary files.
+
+### Fixed:
+- A bug that made "y axis gap" adjust both axes and "x axis gap" do nothing (reported by Achim Krause).
+- A bug where a random definition of \\ was leaked into global scope (reported by Achim Krause).
+- Now a \structline defined with option page=n will not be deleted by a shorter differential.
+- A parser error that caused infinite recurse under certain conditions
+- Class names now work with commands in their name (particularly, greek letters)
+- \sseq@ifintexpr no longer breaks if the expression ends in \empty
+- Using \sseqset to give default scaling values for xscale and yscale now works as expected.
+
+
+## [1.1.1] (2017-09-18)
+
+### Fixed:
+- Groups defined with \SseqNewGroup now correctly handle arithmetic in their arguments.
+- Labels inside a node now replace each other if two are given so you can make the label change on a given page with \classoptions (reported by Steve Wilson).
+- \kill had a bug in it that sometimes caused it to act on the wrong page (reported by Steve Wilson).
+
+
+## [1.1.0] (2017-08-06)
+
+### Added:
+- \sseqparseint
+- \parsecoordinate and \parsedifferential
+- \IfInBoundsTF, \IfOutOfBoundsTF
+- New loop constructs \Do, \DoUntilOutOfBounds, \DoUntilOutOfBoundsThenNMore
+- \kill which kills a class without having to put a differential
+- \lastclass as default arguments for \replaceclass, \classoptions, \d/\doptions, \structline/\structlineoptions
+- Pin key for labels
+- Families
+- Insert key for new classes allows control over relative class placement without reordering commands
+- Draw differentials from a range of pages.
+- Frame axis type, tick marks.
+
+### Changed:
+- Ticks are now placed at values congruent to tick offset mod tick step, tick offset defaults to 0
+- What was called "x axis style" is now called "x axis type".
+
+### Fixed:
+- The \tagclass command works now.
+- Scopes now nest properly.
+- Fixed a big performance issue with nested scopes and shifts.
+- Adobe reader grid color is now correct (or more correct)
+- Fixed the grid drawing so that grids are handled correctly when the range includes negative numbers
+- The package now works with xparse after 2017/02/08 when changes were made that broke my original code
+- Fixed a bug where if you used a structline in two sseqpage environments with the same name, it would give an error.
+- Now if you say \structline(0,0)(0,1) \structlineoptions(0,1)(0,0) it will work correctly.
+- Big ranges like 0 - 600 now work, provided that you provide an appropriate scale
+- Big range like 600 - 700 no longer will cause an overflow
+- Labels now are rectangle nodes so they don't shift down if they are very wide
+- Fixed a bug with ranges and the sseqpage environment where classes lying outside the printed range would enlarge the range even if an explicit range was specified.
+- The chess grid works correctly now
+
+## [1.0.0] (2017-06-21)
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.pdf b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.pdf
new file mode 100644
index 0000000000..63b932aaa3
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.tex b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.tex
new file mode 100644
index 0000000000..777a3303fa
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_2.tex
@@ -0,0 +1,174 @@
+%%
+%% Description: Adams Novikov Spectral Sequence for $S_2$
+
+\documentclass[tooltips]{spectralsequence-example}
+
+% figure out how to get width("\noexpand\small 16") working
+\sseqset{ppower/.sseq style={
+ rectangle,"#1" {inside, font=\tiny},
+ minimum height=width("16"),
+ minimum width=width("16")
+}}
+\sseqnewfamily{imJ}
+\begin{document}
+
+\NewSseqCommand\etaclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx+1,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand\divetaclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx-1,\lasty-1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand\nuclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx+3,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand\nustruct{d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \structline(\lastx-3,\lasty-1,-1)(\lastclass)
+}
+
+\begin{sseqdata}[
+ name=ANSS-S_2, Adams grading,
+ class labels={below},
+ %label distance=-1pt,
+ below label distance=0pt,
+ classes={tooltip={(\xcoord,\ycoord)}},
+ class pattern = linear,
+ class placement transform={rotate=90,scale=2},
+ differentials=blue,
+ x range={0}{40},
+ y range={0}{10},
+ xscale=0.7,
+ yscale=1.7,
+ grid=go,
+ right clip padding=2em
+]
+\begin{scope}[imJ]
+\class[rectangle,fill,inner sep=3pt](0,0)
+\DoUntilOutOfBoundsThenNMore{3}{\etaclass}
+\classoptions["\alpha_1" above left](1,1)
+
+\class["\alpha_{2/2}",circlen=2](3,1)
+\nustruct
+\structline[dashed](3,1)(3,3)
+
+
+\class["\alpha_3"](5,1)
+\d3(\lastclass)
+\DoUntilOutOfBounds{\etaclass\d3(\lastclass)}
+
+\class["\alpha_{4/4}",ppower=16](7,1)
+\DoUntilOutOfBoundsThenNMore{3}{\etaclass}
+
+\class["\alpha_{5}"](9,1)
+\DoUntilOutOfBoundsThenNMore{3}{\etaclass}
+
+\class["\alpha_{6/3}", circlen=3](11,1)
+\d3(\lastclass)
+\DoUntilOutOfBounds{\etaclass\d3(\lastclass)}
+\replaceclass["\alpha_{6/2}", circlen=2](11,1)
+\structline[dashed](11,1)(11,3)
+
+\class["\alpha_7"](13,1)
+\d3(\lastclass)
+\DoUntilOutOfBounds{\etaclass\d3(\lastclass)}
+
+
+\class["\alpha_{8/5}",ppower=32](15,1)
+\DoUntilOutOfBoundsThenNMore{3}{\etaclass}
+
+\class["\alpha_9"](17,1)
+\DoUntilOutOfBoundsThenNMore{3}{\etaclass}
+
+\class["\alpha_{10/3}",circlen=3](19,1)
+\d3(\lastclass)
+\DoUntilOutOfBounds{\etaclass\d3(\lastclass)}
+\replaceclass["\alpha_{10/2}",circlen=2](19,1)
+\structline[dashed](19,1)(19,3)
+
+\class["\alpha_{11}"](21,1)
+\d3(\lastclass)
+\DoUntilOutOfBounds{\etaclass\d3(\lastclass)}
+\end{scope}
+
+\class["\beta_{2/2}"](6,2)
+\nustruct
+\class["\beta_{2}" below](8,2)
+\etaclass\structline(\lastclass)(6,2,2) % This is a *nu
+
+\class["\beta_3" left,insert = 1](14,2)
+\etaclass[insert=1](14,2,-1)
+\divetaclass["\beta_{4/4}" left, insert = 2]
+\nuclass(14,2,2)\nuclass[circlen=2]\nuclass[circlen=3]\nuclass["P\beta_{2/2}" above left]
+\nuclass\divetaclass["P\beta_2"]
+
+
+\class["\beta_{4/3}",insert=1](16,2)
+\etaclass[insert=1]\etaclass[insert=1]
+\class["\beta_{4/2,2}",circlen=2](18,2)
+\structline[dashed,](18,2,-1)(18,4,-1)
+
+\class["\eta_2"](19,3)
+\etaclass
+
+\class["\beta_{4}"below](20,2)
+\structline[dashed,bend left=20](20,2,-1)(20,4,2)
+%\structlineoptions[](20,2,-1)(20,4,2)%page=0--3
+\etaclass\etaclass\structline(\lastclass)(\lastx+1,\lasty+1,-1)
+
+\nuclass["\alpha_{4/4}^3" {above left=-1pt}](18,2,-1)
+
+
+
+\class["\eta_{3/2}"](23,3)
+\etaclass\etaclass
+
+\class["\beta_5" below](26,2)
+\d3(\lastclass,-1)
+
+\class["\beta_{8/8}" ](30,2)
+\etaclass
+\class["\beta_{6/2}" left](30,2)
+\d5(\lastclass)
+
+\class["\gamma_3" left](31,3)
+\nuclass
+\class["\eta_{5/3}"](33,4)
+
+\class["\beta_{8/7}"](32,2)
+\etaclass\etaclass\etaclass\etaclass\etaclass\etaclass
+\class["\beta_{6}"left](32,2)\etaclass
+
+\class["x_{32}"](32,4)\etaclass\etaclass["P\beta_{4/4}" right]
+\class["x_{36}"](36,4)
+\nuclass(32,4,-1)\nuclass
+
+\class["P\beta_3" above left](34,6)\etaclass\nuclass(34,6,-1)
+
+\class["\beta_{8/6,2}",circlen=2](34,2)
+\etaclass\nuclass(\lastclass1)
+
+\class["\gamma_{4/2,2}" right](37,3)
+\class["\beta_{8/4,2}",circlen=2](38,2)
+\class["\beta_{7}" right](38,2)
+\class["d_{4/4}\beta_{8/7}" right](39,3)
+\class["x''_{39}" right](39,3)
+\class["\gamma_{4,2}" right](39,3)
+\class["x_{39}'"](39,5)
+\class["P\eta_2"](39,7)
+\end{sseqdata}
+
+\printpage[name=ANSS-S_2]
+
+\printpage[name=ANSS-S_2,page=5]
+
+\printpage[name=ANSS-S_2, no imJ]
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.pdf b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.pdf
new file mode 100644
index 0000000000..9423dd535a
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.tex b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.tex
new file mode 100644
index 0000000000..3c8f3af0a7
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ANSS-S_3.tex
@@ -0,0 +1,92 @@
+%%
+%% Description: Adams Novikov Spectral Sequence for $S_3$
+%%
+%% File: example_anss3.tex
+%%
+%% Draws the Adams Novikov spectral sequence at the prime 3 through the 45 stem.
+%% In this range, all we see is the Toda differential d_{2p-1}(\beta_{p/p}) = \alpha\beta^p
+%% Thanks to Eric Peterson for contributing this diagram. Presumably he copied it from page 13 of the green book.
+%% Compare this to page 5 of example_ass3
+%%
+
+\documentclass[tooltips]{spectralsequence-example}
+\begin{document}
+% tower definitions
+\NewSseqCommand\alphaclass{d()}{
+ \IfNoValueTF{#1}{}{\pushstack(#1)}
+ \class(\lastx+3,\lasty+1)
+ \structline(\lastclass)(\lastclass1)
+}
+
+\NewSseqCommand\betaclass{d()}{
+ \IfNoValueTF{#1}{}{\pushstack(#1)}
+ \class(\lastx+7,\lasty+1)
+ \structline(\lastclass)(\lastclass1)
+}
+
+\centering
+\begin{sseqpage}[
+ Adams grading,
+ classes = { tooltip = {(\xcoord,\ycoord)}, inner sep=1.2pt },
+ class labels = below,
+ label distance=3pt,
+ differentials={-{>[width=4]}, target anchor=-60},
+ y range={0}{11},
+ x range={0}{45},
+ x tick step=5,
+ xscale=0.7,
+ yscale=1.2,
+ y axis gap=2em
+]
+\class[rectangle,fill,inner sep=3pt](0,0)
+
+\class["\alpha_1"](3,1) \structline(0,0)(3,1)
+\class["\alpha_2"](7,1)
+\class[circlen=2,"\alpha_{3/2}"](11,1)
+\class["\alpha_4"](15,1)
+\class["\alpha_5"](19,1)
+\class[circlen=2,"\alpha_{6/2}"](23,1)
+\class["\alpha_7"](27,1)
+\class["\alpha_8"](31,1)
+\class[circlen=3,"\alpha_{9/3}"](35,1)
+\class["\alpha_{10}"](39,1)
+\class["\alpha_{11}"](43,1)
+
+\class["\beta_1"](10,2) \structline(3,1)(10,2)
+\class["\beta_2" left](26,2)
+\class["\beta_{3/3}" left](34,2)
+\class["\beta_{3/2}" {left}](38,2)
+\class["\beta_3" left](42,2)
+
+% tower off of beta_1
+\alphaclass(10,2)\betaclass
+\alphaclass\betaclass
+\alphaclass\betaclass
+\alphaclass\betaclass
+
+% tower off of beta_2
+\alphaclass(26,2)\betaclass
+\alphaclass\betaclass
+\alphaclass
+
+
+% tower off of beta_3/3
+\alphaclass(34,2)\betaclass
+\alphaclass\betaclass
+
+% tower off of beta_3
+\class[fill,circlen=2](45,3) \structline(42,2,-1)(45,3,-1)
+\betaclass
+
+% d5s
+\d5(34,2)
+\d5(44,4)
+
+%% Doug's contributions
+\classoptions["{\left<\alpha_1,\alpha_1,\beta_1^3\right>}" {below right=0em}](37,3)
+\structline[dashed](37,3)(40,8)
+
+
+\end{sseqpage}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.pdf b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.pdf
new file mode 100644
index 0000000000..34323e4f33
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.tex b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.tex
new file mode 100644
index 0000000000..be6f88249f
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_2.tex
@@ -0,0 +1,397 @@
+%%
+%% Description: Adams Novikov Spectral Sequence for $S_2$
+%%
+%%
+%% Draws the Adams Spectral Sequence at the prime 2 through the 45 stem.
+%% See pages 146 - 147 of Green book
+%% https://mathoverflow.net/questions/102316/differentials-in-the-adams-spectral-sequence-for-spheres-at-the-prime-p-2
+%% https://en.wikipedia.org/wiki/Homotopy_groups_of_spheres#Table_of_stable_homotopy_groups
+%%
+
+
+\documentclass[tooltips]{spectralsequence-example}
+
+
+\begin{document}
+\sseqset{imJ/.sseq style={purple}}
+
+
+\NewSseqCommand\twoclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand\divtwoclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx,\lasty-1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+
+\NewSseqCommand\etaclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx+1,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+\NewSseqCommand\divetaclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx-1,\lasty-1)
+ \structline(\lastclass1)(\lastclass)
+}
+\NewSseqCommand\etastruct{d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \structline(\lastx-1,\lasty-1,-1)(\lastclass)
+}
+
+
+\NewSseqCommand\nuclass{O{}d()}{
+ \IfNoValueF{#2}{\pushstack(#2)}
+ \class[#1](\lastx+3,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand\nustruct{d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \structline(\lastx-3,\lasty-1,-1)(\lastclass)
+}
+
+\NewSseqCommand\hznudiamond{d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \savestack
+ \class(\lastx,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ \nustruct
+ \restorestack
+}
+
+\NewSseqCommand\etanudiamond{d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \savestack
+ \class(\lastx+1,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ \nustruct
+ \restorestack
+}
+
+\NewSseqCommand \czero {O{} r() }{
+ \savestack
+ \class[#1](#2)
+ \etaclass
+ \restorestack
+}
+
+\NewSseqCommand\tower {O{}d()mO{}} {
+ \begin{scope}[#4]
+ \IfNoValueF{#2}{\class[#1](#2)}
+ \savestack
+ \Do{#3-1}{
+ \class(\lastx, \lasty+1)
+ \structline(\lastclass)(\lastclass1)
+ }
+ \restorestack
+ \end{scope}
+}
+
+
+\NewSseqCommand \towergroup {o r() m O{}} {
+ \tower(#2){#3}[#4]
+ \IfNoValueF{#1}{\classoptions[#1](#2)}
+ \etaclass\etaclass\etaclass
+ \nustruct\divtwoclass\nustruct\divtwoclass
+ \nustruct\nuclass
+}
+
+
+\protected\def\Psqvphant{\vphantom{P^2}}
+\NewSseqGroup \Phone { mm } {
+ \class["#1h_1#2"](0,0)
+ \etaclass\etaclass
+ \divtwoclass\divtwoclass["\Psqvphant#1h_2#2" {below=-4pt}]
+}
+
+\NewSseqGroup \Phonegroup {G{}}{
+ \sseqset{class label handler = \SseqNormalizeMonomial }
+ \czero["#1c_0" above](-1,-2)
+ \Phone[imJ]{P#1}{}
+ \nuclass[imJ]\divtwoclass[imJ]\divtwoclass["#1d_0" left,name=d0]
+ \etaclass\etaclass\etaclass
+ \nustruct\divtwoclass\nustruct\divtwoclass\nustruct\divtwoclass["#1e_0" left,name=e0]
+ \nuclass\hznudiamond
+ \divtwoclass
+ \classoptions["#1g" {below=0.3em},page=0-3](\lastclass)
+ %\etanudiamond
+
+ % Have to go back and draw path e0 to g
+ \savestack
+ \d2(e0,-1)
+ \etaclass(e0)\d2(\lastclass,-1)
+ \divtwoclass[name=f0]\d2(\lastclass,-1)
+ \nuclass[name=nuf0]
+ \etastruct % Now we're back at g
+ \restorestack
+ \nuclass[name=nug]\hznudiamond\nuclass[name=nu2g]
+}
+
+
+\NewSseqGroup \Phonegroupb {G{}}{
+ \Phonegroup{P#1}
+
+ \divtwoclass["\Psqvphant#1j" {below left=-1pt,yshift=2pt}](f0) \d2(\lastclass,-1)
+ \divtwoclass(nuf0) \d2(\lastclass,-1)
+ \nustruct\divtwoclass["\Psqvphant#1k" {below=-1pt}] \d2(\lastclass,-1)
+ \nuclass\d2(\lastclass,-1)
+ \hznudiamond
+ \divtwoclass["\Psqvphant#1l" {below left=-1pt,yshift=2pt}]\d2(\lastclass,-1)
+ \nuclass\d2(\lastclass,-1)\hznudiamond
+ \divtwoclass["\Psqvphant#1m" {below left=-3pt},name=m]
+
+ \divtwoclass(nug)\structline(\lastclass)(\lastx+1,\lasty+1)
+ \divtwoclass(nu2g)\nustruct
+ \divtwoclass\structline(\lastclass)(\lastx+1,\lasty+1)
+ \d2(m,-1)
+}
+
+
+
+\begin{sseqdata}[
+ name = ASS-S_2,
+ Adams grading,
+ classes=fill,
+ class labels={above left=0.2em,black},
+ x range={0}{46},
+ y range={0}{23},
+ differentials = blue,
+ classes = { tooltip = { (\xcoord,\ycoord) } },
+ grid = go,
+ run off = -
+]
+\towergroup(0,0){\ymax-\ymin+2}
+\classoptions["h_2" below](3,1)
+\nuclass
+\divetaclass\divetaclass["h_3" below]
+\tower{4}
+
+
+\Phonegroup(9,5)
+\classoptions["f_0"](f0)
+
+\Phonegroupb(17,9)
+\pushstack(d0)
+\tower["i" {below left,yshift=2pt}](23,7){6}[imJ]
+\structline(\lastclass)(\lastx+3,\lasty+1,-1)
+\structline(\lastx,\lasty+1)(\lastx+3,\lasty+2,-1)
+\d2(23,7)
+\d2(23,8)
+
+\Phonegroupb(25,13){P}
+\Phonegroupb(33,17){P^2}
+\tower["P^2i" {below left,yshift=2pt}](39,15){6}[imJ]
+\structline(\lastclass)(\lastx+3,\lasty+1,-1)
+\structline(\lastx,\lasty+1)(\lastx+3,\lasty+2,-1)
+\d2(39,15)
+\d2(39,16)
+\d4(39,12)
+\d4(40,13,,1)
+
+\Phonegroup(41,21){P^4}
+\tower["P^2i" {below left,yshift=2pt}](47,19){6}[imJ]
+\d2(47,19)
+\d2(47,20)
+
+\towergroup["h_4" below](15,1){8}[imJ]
+\classoptions["h_3^3" below](\lastclass)
+
+\tower["h_3^2" left](14,2){2}
+\d2(15,1) % d2(h_4) = h_0h_3^2
+\d3(15,2)\d3(15,3) % d2(h_0h_4) = h_0d_0
+
+\class["c_1"](19,3)\nuclass
+\czero["h_4c_0"](23,4)
+
+
+
+\towergroup["h_5" below](31,1){16}[imJ]
+\nuclass
+\divetaclass\divetaclass["h_3h_5" {below=-2pt}]
+\tower{4}
+
+\class["n"{above=-0.5pt}](31,5)
+\nuclass\nuclass
+\divetaclass["t"]
+\nuclass["c_1g"]
+
+\class["q" {below right=-0.7pt}](32,6)
+\etaclass
+
+\class["p"](33,4)
+\twoclass\divetaclass["d_1"]
+\nuclass\nuclass
+\divetaclass["x" below]\tower{6}
+
+\d[bend left=15]4(38,3,,2)
+\d[bend left=30]4(38,2)
+
+
+\tower["h_4^2" below](30,2){4}
+\etaclass
+\tower["r" left](30,6){6}
+\d3(\lastclass)
+
+\d2(31,1)\d2(31,2)\d2(31,3)
+\d3(31,4)\d3(31,5)\d3(31,6)\d3(31,7)\d3(31,8,-1)
+\d4(31,8,1)\d4(32,9,,1)
+\d4(31,9,-1,-1)\d4(31,10,-1,-1)
+
+\d3(34,2)
+
+
+\class(38,6)\d2(\lastclass,-1)
+\twoclass\d2(\lastclass,-1)
+\twoclass\nustruct\d2(\lastclass,-1)
+\twoclass\nustruct\d4(\lastclass,-1)
+\divetaclass["e_0g"]\d4(\lastclass,-1)
+
+\czero[pin distance=3em,pin=below right:h_5c_0"](39,4)
+
+\class["e_1" {below=-1pt}](38,4)
+\d3(\lastclass,1)
+\etaclass\etaclass\divtwoclass\divtwoclass["f_1" below]
+\etaclass
+\divtwoclass\d2(\lastclass)
+\divtwoclass\d2(\lastclass,-1)
+
+
+\Phone(40,6){P}{h_5}
+
+\class["u"](39,9)\etaclass\etaclass\divtwoclass
+
+\class["g^2"](40,8)
+\class["v"](42,9)
+\d2(\lastclass)
+
+\tower["P^2r" {below=-4pt}](46,14){6}
+\d3(\lastclass)
+
+\class["Pe_0g" right](45,12)
+\d4(\lastclass)
+
+\class["w"](45,9)
+
+\class["d_0r" right](44,10)
+\d3(\lastclass)
+
+
+\class["h_4^3" below](45,3)\twoclass
+
+\tower["h_5d_0" {below right=-2pt}](45,5){3}
+\etaclass\etaclass
+\nuclass(45,5)\hznudiamond
+\nustruct(45,7)
+
+\tower["g_2" below](44,4){3}
+\etaclass
+
+\class["N"](46,8)
+\class["gj"](46,11)
+
+\tower(47,13){12}
+\foreach \y in {13,...,18} { \d2(47,\y)}
+\end{sseqdata}
+\centering
+
+\begin{sseqpage}[
+ page=7,
+ name=ASS-S_2, Adams grading,
+ class labels={below},
+ %label distance=-1pt,
+ below label distance=0pt,
+ differentials=blue,
+ x range={0}{40},
+ y range={0}{10},
+ xscale=0.7,
+ yscale=1.7,
+ grid=go,
+ right clip padding=2em
+]
+\structline[dashed,bend right=20](15,4)(16,7,1)
+\structline[dashed,bend right=20](23,9,2)(24,11)
+\structline[dashed,bend right=20](31,11)(32,15)
+\structline[dashed,bend right=20](39,17,2)(40,19)
+
+\structline[dashed](14,2)(15,5,1)
+\structline[dashed](21,5)(22,8)
+\structline[dashed,bend right=20](20,6)(23,9,1)
+\structline[dashed](23,6)(23,9,1)
+\structline[dashed,bend right=20](30,2)(33,4)
+\structline[dashed,bend left=20](32,6)(35,9)
+
+\structline[dashed](38,4)(39,7)
+
+\structline[dashed](40,8)(40,10)
+\structline[dashed](40,8)(41,10)
+\structline[dashed,bend left=40](39,9)(42,12)
+\structline[dashed](41,10)(42,12)
+
+\classoptions["h_0^2i" right=1pt](23,9)
+\classoptions["h_0^{10}h_5" left](31,11)
+\classoptions["h_1h_5" below](32,2)
+\classoptions["h_0h_2h_5" below](34,3)
+\classoptions["h_2^2h_5" below](37,3)
+\classoptions["h_0^2h_3h_5" {left=-0.1em}](38,4,1)
+\classoptions["h_1h_3h_5" {below=-.4em}](39,3,1)
+
+\classoptions["Ph_3" left](15,5,1)
+\classoptions["P^2h_3" left](23,9,1)
+%\classoptions["P^3h_3" left](31,13,1)
+%\classoptions["P^4h_3" left](39,17,1)
+\end{sseqpage}
+%\end{document}
+
+\newgeometry{margin = 0.1cm}
+\printpage[name=ASS-S_2,page=2,xscale=0.7,yscale=0.8,keep changes]
+
+%\printpage[name=ASS-S_2,page=2]
+
+\printpage[name=ASS-S_2,page=3]
+
+\printpage[name=ASS-S_2,page=4]
+
+\begin{sseqpage}[name=ASS-S_2,page=5]
+\structline[dashed,bend right=20](15,4)(16,7,1)
+\structline[dashed,bend right=20](23,9,2)(24,11)
+\structline[dashed,bend right=20](31,11)(32,15)
+\structline[dashed,bend right=20](39,17,2)(40,19)
+
+\structline[dashed](14,2)(15,5,1)
+\structline[dashed](21,5)(22,8)
+\structline[dashed,bend right=20](20,6)(23,9,1)
+\structline[dashed](23,6)(23,9,1)
+\structline[dashed,bend right=20](30,2)(33,4)
+\structline[dashed,bend left=20](32,6)(35,9)
+
+\structline[dashed](38,4)(39,7)
+
+\structline[dashed](40,8)(40,10)
+\structline[dashed](40,8)(41,10)
+\structline[dashed,bend left=40](39,9)(42,12)
+\structline[dashed](41,10)(42,12)
+
+\classoptions["g" {below=0.3em}](20,4)
+\classoptions["{d_0^2=Pg=c_0g}" {xshift=5pt, below=-2.15em}](28,8)
+
+
+\classoptions["h_0^2i" right=1pt](23,9)
+\classoptions["h_0^{10}h_5" left](31,11)
+\classoptions["h_1h_5" below](32,2)
+\classoptions["h_0h_2h_5" below](34,3)
+\classoptions["h_2^2h_5" below](37,3)
+\classoptions["h_0^2h_3h_5" {left=-0.1em}](38,4,1)
+\classoptions["h_1h_3h_5" {below=-.4em}](39,3,1)
+
+\classoptions["Ph_3" left](15,5,1)
+\classoptions["P^2h_3" left](23,9,1)
+%\classoptions["P^3h_3" left](31,13,1)
+%\classoptions["P^4h_3" left](39,17,1)
+\end{sseqpage}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.pdf b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.pdf
new file mode 100644
index 0000000000..88cd00c005
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.tex b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.tex
new file mode 100644
index 0000000000..4a79c6ebb6
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ASS-S_3.tex
@@ -0,0 +1,158 @@
+%%
+%% Description: The Adams Novikov Spectral Sequence for $S_3$, styled to superimpose on ANSS-S_3
+%%
+%% The Adams spectral sequence at the prime 3 through the 45 stem.
+%% Compare page 5 to example_ass3
+%% Copied from page 11 of the green book.
+%%
+
+\documentclass[tooltips]{spectralsequence-example}
+
+\begin{document}
+
+\NewSseqCommand\tower {d()m} {
+ \IfNoValueF{#1}{\class(#1)}
+ \savestack
+ \Do { #2 } {
+ \class(\lastx, \lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ }
+ \restorestack
+}
+
+\NewSseqCommand\hclass {d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \class(\lastx+3,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand\bclass {d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \class(\lastx+7,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand\hbachair {d()}{
+ \IfNoValueF{#1}{\pushstack(#1)}
+ \nameclass{tempclass}(\lastclass)
+ \bclass(\lastx,\lasty+1)
+ \hclass
+ \hclass(tempclass)
+ \bclass
+ \structline(\lastclass3)(\lastclass)
+}
+
+\NewSseqCommand\bahclaw { r() } {
+ \class(#1)
+ \bclass
+ \class(\lastx,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ \class(\lastx-3,\lasty-1)
+ \structline(\lastclass1)(\lastclass)
+ \pushstack(\lastclass2)
+}
+\begin{sseqdata}[
+ name=ass3,
+ Adams grading,
+ classes={fill, inner sep=1.2pt, tooltip={(\xcoord,\ycoord)}},
+ class labels={below,black},
+ differentials=blue,
+ grid = go,
+ x tick step = 5,
+ x range={0}{45},
+ y range={0}{11},
+ xscale=0.7,
+ yscale=1.2,
+ y axis gap=2em
+]
+\tower(0,0){\ymax+1}
+\classoptions["a_0" {left=0pt}](0,1)
+\hbachair
+\classoptions["h_0"](3,1)
+\classoptions["b_0"](\lastclass)
+\classoptions[purple,page=3](7,2)
+\DoUntilOutOfBounds{\hbachair}
+
+\begin{scope}[sseq=purple]
+\class["h_1"](11,1)
+\tower{2}
+\d2(\lastclass)
+\DoUntilOutOfBounds{
+ \bclass\d2(\lastclass)
+ \hclass\d2(\lastclass)
+}
+\end{scope}
+
+\begin{scope}[orange]
+\class["k_0"](26,2)
+\DoUntilOutOfBounds{
+ \hclass\bclass
+}
+\end{scope}
+
+
+\begin{scope}[sseq=purple]
+\bahclaw(15,4)
+\DoUntilOutOfBounds{\hbachair}
+\bahclaw(27,7)
+\DoUntilOutOfBounds{\hbachair}
+\bahclaw(39,10)
+\DoUntilOutOfBounds{\hbachair}
+\bahclaw(38,7)
+\d2(\lastclass1)\d2(\lastclass2)\d2(\lastclass3)\d2(\lastclass4)
+\DoUntilOutOfBounds{
+ \hbachair
+ \d2(\lastclass)\d2(\lastclass1)
+ \d2(\lastclass3)\d2(\lastclass4)
+}
+\end{scope}
+
+
+
+
+\begin{scope}[sseq=purple]
+\class[](23,3) % label me
+\tower{3}
+\d2(\lastclass)\d2(\lastx,\lasty+1)
+\DoUntilOutOfBounds{
+ \hbachair
+ \d2(\lastclass)\d2(\lastclass1)
+ \d2(\lastclass3)\d2(\lastclass4)
+}
+\end{scope}
+
+
+\class["h_2"](35,1)
+\tower{8}
+\DoUntilOutOfBounds{\hbachair}
+
+\begin{scope}[sseq=orange]
+\class["b_{11}"](34,2)
+\tower{4}
+\DoUntilOutOfBounds{
+ \hclass\bclass
+}
+\d5(34,2)
+\d5(44,4)
+\end{scope}
+\foreach \y in {1,...,4}{
+ \d2(35,\y)
+}
+\d3(35,5)\d3(35,6)
+\foreach \y in {7,...,9}{
+ \classoptions[purple,page=4](35,\y,-1)
+}
+
+
+
+
+\end{sseqdata}
+\centering
+\printpage[name=ass3,page=1]
+\newpage
+\printpage[name=ass3,page=2]
+\newpage
+\printpage[name=ass3,page=3]
+\newpage
+\printpage[name=ass3,page=5]
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.pdf b/graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.pdf
new file mode 100644
index 0000000000..ba38e1dc08
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.tex b/graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.tex
new file mode 100644
index 0000000000..14cd23fc47
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/ASS-tmf_2.tex
@@ -0,0 +1,284 @@
+%%
+%% Description: The Adams spectral sequence for $\tmf_2$
+%%
+%% File: example_tmfass.tex
+%%
+%% From "The Homotopy Groups of tmf and of its Localizations" http://math.mit.edu/conferences/talbot/2007/tmfproc/Chapter16/TmfHomotopy.pdf
+%% This file has really bad performance.
+%%
+
+
+% 9.8 sec
+
+% 1.7 seconds to set up
+% 1.8 seconds to draw the classes
+% 2.1 seconds to draw the edges
+% --> ~5.7 seconds to draw page 0.
+
+% edge drawing time:
+% 1.0s to calculate but discard without off page handling
+% 0.6s to deal with off-page edges
+% 0.3s to draw
+
+% 17 seconds to draw all pages =(
+% 17 ~~ 1.7s setup + 5 page * 3 s/pp
+%
+% deleting off page edge handling cuts off 1.4s (1s?) so I haven't found any of the big time holes yet. WHY IS THIS SO SLOW??
+
+\documentclass[tooltips]{spectralsequence-example}
+
+\begin{document}
+
+\NewSseqGroup\tower {} {% 25
+ \class(0,0)
+ \DoUntilOutOfBoundsThenNMore{2}{
+ \class(\lastx,\lasty+1)
+ \structline(\lastclass1) (\lastclass)
+ }
+}
+
+\NewSseqGroup\towergroup {} {%9 + 25 = 36
+ \tower(0,0)
+ \class(1,1)
+ \class(3,1)
+ \class(2,2)
+ \class(3,2)
+ \class(3,3)
+ \class(6,2)
+ \structline(3,1,-1)(3,2,-1)
+ \structline(3,2,-1)(3,3,-1)
+ \structline(0,0,-1)(1,1,-1)
+ \structline(1,1,-1)(2,2,-1)
+ \structline(2,2,-1)(3,3,-1)
+ \structline(0,0,-1)(3,1,-1)
+ \structline(3,1,-1)(6,2,-1)
+ \structline(0,1,-1)(3,2,-1)
+ \structline(0,2,-1)(3,3,-1)
+}
+
+
+\NewSseqGroup\towergroupa {} {%25*2+9+21 = 80
+ \towergroup(0,0)
+ \tower(4,-1)
+%
+ \class(6,0)
+ \class(6,1)
+ \class(7,-1)
+ \class(7,0)
+ \class(7,1)
+ \class(9,0)
+ \class(9,1)
+ \class(9,2)
+ \class(10,0)
+ \class(10,1)
+ \class(12,0)
+ \class(12,1)
+ \class(12,2)
+ \class(13,1)
+ \structline(6,0,-1)(6,1,-1)
+ \structline(6,1,-1)(6,2,-1)
+ \structline(7,-1,-1)(7,0,-1)
+ \structline(7,0,-1)(7,1,-1)
+ \structline(9,0,-1)(9,1,-1)
+ \structline(9,1,-1)(9,2,-1)
+ \structline(10,0,-1)(10,1,-1)
+ \structline(12,0,-1)(12,1,-1)
+ \structline(12,1,-1)(12,2,-1)
+%
+ \structline(4,-1,-1)(7,0,-1)
+ \structline(4,0,-1)(7,1,-1)
+ \structline(6,0,-1)(9,1,-1)
+ \structline(6,1,-1)(9,2,-1)
+ \structline(6,0,-1)(7,1,-1)
+ \structline(7,-1,-1)(10,0,-1)
+ \structline(7,0,-1)(10,1,-1)
+ \structline(9,0,-1)(12,1,-1)
+ \structline(9,1,-1)(12,2,-1)
+ \structline(9,0,-1)(10,1,-1)
+ \structline(10,0,-1)(13,1,-1)
+ \structline(12,0,-1)(13,1,-1)
+%
+ \d2(4,-1,-1,-1)
+ \d2(4,0,-1,-1)
+ \d2(4,1,-1,-1)
+ \d2(7,-1,-1,-1)
+ \d2(7,0,-1,-1)
+ \d2(10,0,-1,-1)
+}
+
+\NewSseqGroup\towergroupb {} {%80 + 25 + 15 = 120
+ \towergroupa(0,0)
+ \tower(8,-2)
+ \class(10,-1)
+ \class(11,-1)
+ \class(10,-2)
+ \class(9,-3)
+ \class(11,-2)
+ \structline(8,-2)(11,-1)
+ \structline(11,-1)(10,-2)
+ \structline(10,-2)(9,-3)
+ \structline(11,-2)(11,-1)
+
+ \class(13,-1)
+ \class(13,0)
+ \class(14,-2)
+ \class(15,0)
+ \class(16,-1)\class(16,-1)
+ \class(16,0)
+ \class(16,1)
+ \class(17,0)
+ \class(18,0)
+ \class(18,1)
+ \class(19,-1)
+ \structline(10,-1,-1)(10,0,-1)
+ \structline(13,0,-1)(13,1,-1)
+ \structline(13,-1,-1)(13,0,-1)
+ \structline(16,0,-1)(16,1,-1)
+ \structline(16,-1,-2)(16,0,-1)
+ \structline(16,-1,-1)(16,0,-1)
+
+ \structline(10,-1,-1)(13,0,-1)
+ \structline(13,-1,-1)(16,0,-1)
+ \structline(13,0,-1)(16,1,-1)
+ \structline(15,0,-1)(18,1,-1)
+ \structline(15,0,-1)(16,1,-1)
+ \structline(16,-1,-1)(17,0,-1)
+ \structline(17,0,-1)(18,1,-1)
+ \structline(18,1,-1)(18,0,-1)
+ \d2(10,-1,-1,-1)
+ \d2(13,-1,-1,-1)
+ \d2(13,0,-1,-1)
+ \d3(14,-2,-1,-1)
+ \d2(19,-1,-1,-1)
+}
+
+\begin{sseqdata}[
+ x range={0}{50},
+ y range={0}{20},
+ x tick step=2,
+ Adams grading,
+ classes={fill,inner sep=0.3ex,tooltip={(\xcoord,\ycoord)}},
+ class placement transform={scale=1.5},
+ differentials={->,blue},
+ struct lines=red, %no struct lines, no differentials,
+ yscale=0.6, xscale=0.5,
+ x axis extend end=0.2cm,
+ name=tmfass,
+ grid=go,
+ run off differentials=->
+]
+
+\towergroup(0,0) % 36
+
+\class(8,3)\class(9,4)
+\structline(8,3)(9,4)
+\towergroupa(8,4) % 80
+
+\foreach \n in {2,3,4}{
+ \towergroupb(8*\n,4*\n) % 120
+}
+
+\foreach \n in {1,2,3,4}{
+ \begin{scope}[xshift=8*\n,yshift=4*\n]
+ \class(8,3)
+ \class(9,4)
+ \structline(8,3,-1)(9,4,-1)
+ \d3(9,0,-1,-1)
+ \d3(10,1,-1,-1)
+ \end{scope}
+}
+
+
+\foreach \n in {1,2,3,5,6,7}{
+ \class(35+2*\n,7+\n)
+}
+
+%\d2(18,4)
+\d3(24,6)
+
+\class(36,9)
+\d2(36,9)
+\d4(37,8)
+\d4(45,12)
+
+
+\class(44,13)
+\d2(44,13)
+\class(45,9)
+\class(47,10)
+\class(49,11)
+\d4(49,11,,1)
+\d4(49,11,,2)
+\replaceclass(48,15,1)
+\towergroupb(40,20)
+\towergroup(48,8)
+\foreach \n in {0,...,5}{
+ \class(40+2*\n,8+\n)
+}
+
+\d3(42,9)
+\d4(44,10)
+\d4(47,16)
+\d2(48,8)
+\d4(48,9)
+\d3(49,9,,2)
+\d3(50,13)
+\class(50,10)
+\d4(50,10,1)
+\d4(50,10,2)
+\replaceclass[offset={(0,0)}](50,10)
+\class(51,12)
+\d4(51,12)
+\class(52,17)
+\d2(52,17)
+
+\foreach \n in {0,4,8}{
+ \d3(32+2*\n,10+\n,1)
+ \d4(31+2*\n,8+\n)
+}
+\end{sseqdata}
+
+
+\printpage[name=tmfass,page=0]
+
+\printpage[name=tmfass,page=2]
+
+\printpage[name=tmfass,page=3]
+
+\printpage[name=tmfass,page=4]
+
+\begin{sseqpage}[name=tmfass,page=5,class labels={below=0.2em},tikz primitives=dashed]
+\classoptions["\eta" {right=0.1em}](1,1)
+\classoptions["\nu" below right](3,1)
+\classoptions["\epsilon"](8,3)
+\classoptions["c_4+\epsilon" left](8,4)
+\classoptions["2c_6"](12,6)
+\classoptions["\kappa"](14,4)
+\classoptions["c_4^2"](16,8)
+\classoptions["\overline\kappa"](20,4)
+\classoptions["8\Delta"](24,7)
+\classoptions["\eta\Delta"](25,5)
+\classoptions["2\nu\Delta"](27,6)
+\classoptions["c_4\Delta+q" left](32,7,1)
+\classoptions["q"](32,7,2)
+\classoptions["\overline\kappa^2"](40,8)
+\classoptions["4\Delta^2"](48,10)
+\draw(6,2)--(9,4);
+\draw(21,5)--(22,8);
+\draw[bend left=20] (25,5) to (28,8);
+\draw (27,6) -- (28,8);
+\draw(32,7,1)--(33,9);
+\draw[bend right=10](32,7,2) to (35,10);
+\draw(34,8) -- (35,10);
+\draw(39,9)--(40,11,2);
+\draw(39,9)--(42,12);
+\draw(40,8)--(40,11,2);
+\draw(40,11,1)--(41,13);
+\draw(40,8)--(41,10) -- (42,12);
+\draw(45,9)--(46,11);
+\draw(48,15,1)--(48,16,1);
+\draw[bend right=20] (48,15,1) to (49,17);
+\structline[black](50,10,2)(51,11)
+\end{sseqpage}
+
+\end{document}
diff --git a/graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.pdf b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.pdf
new file mode 100644
index 0000000000..8769aa6c7e
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.tex b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.tex
new file mode 100644
index 0000000000..0994d69f0f
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-EO2_3.tex
@@ -0,0 +1,75 @@
+%%
+%% Description: The homotopy fixed point spectral sequence for a maximal finite subgroup of $\mathbb{G}_{p-1}$ acting on $E_{p-1}$ with $p=3$
+%%
+%% This is the homotopy fixed point spectral sequence for EO_2 at the prime 3. The maximal finite subgroup of the Morava stabilizer for E_{p-1} is
+%% of size 2p(p-1)^2 = 24, and so there is a norm element v in degree 24. There's also a bunch of trace classes on the zero line, but the trace map
+%% E_* --> H^*( G ; E_* ) is induced by the trace map E_n --> EO_n, so all of these classes are permanent cycles. They are hard to compute and we don't draw them.
+%% We also have classes \alpha and \beta coming from the stabilizer action, which are the images of \alpha_1 and \beta_1 in the ANSS.
+%% By looking at cobar representatives, we can see that v*\beta_1 is the image of \beta_{3/3}.
+%% Thus, the Toda differential in the ANSS d_3(\beta_{3/3}) = \alpha \beta^3 forces also that d_3(v) = \alpha \beta^2. Likewise, the Toda "Kudo" differential
+%% d_9( \alpha \beta_{3/3}^2 ) = \beta^7 gives us upon dividing by \beta twice that d_9(\alpha v^2) = \beta^5. At this point, there are no possible differentials.
+%% We see that v^3 survives so EO_n* is 72 = 2p^2(p-1)^2 periodic. The picture is exactly the same at other odd primes. At 2, this degenerates to the
+%% HFPSS for KO = KU^{hC_2} (see example_KUHFPSS).
+%%
+
+\documentclass[tooltips]{spectralsequence-example}
+
+\begin{document}
+\begin{sseqdata}[name=EO(2),Adams grading,
+ y range={0}{14},x range={0}{160},
+ xscale=0.15, x tick step=5,
+ classes={fill, tooltip={(\xcoord,\ycoord)}},
+ title=Page \page
+]
+\foreach \v in {0,...,8}{
+ \foreach \b in {0,...,11}{
+ \foreach \a in {0,1}{
+ \class(3*\a + 10*\b+24*\v,\a+2*\b)
+ \ifnum\b>0\relax
+ \structline(3*\a+10*\b-10+24*\v,\a+2*\b-2) (3*\a + 10*\b+24*\v,\a+2*\b)
+ \fi
+ }
+ \structline(10*\b+24*\v,2*\b)(3 + 10*\b + 24*\v,2*\b+1)
+ \ifnum \v = \numexpr\v/3*3\relax
+
+ \else
+ \ifnum\b<9\relax
+ \d5(10*\b+24*\v,2*\b)
+ \fi
+ \fi
+ }
+}
+
+% v^2ab^2 is in degree 2*24 + 3 + 2*10 = 71, 5
+% b^{pn+1} = b^{7} is in degree 7*10 = 70,14
+\foreach \v in {2,5}{
+ \foreach \b in {0,...,6}{
+ \d9(\v*24 + 3 +10*\b,1+2*\b)
+ }
+}
+\end{sseqdata}
+\printpage[name=EO(2),page=0,title={\phantom{Page 5}}]
+\newpage
+\printpage[name=EO(2),page=5]
+\newpage
+\printpage[name=EO(2),page=9]
+\newpage
+\begin{sseqpage}[name=EO(2),page=10,title={Page $\infty$}]
+\classoptions["a" left](3,1)
+\classoptions["b" right](10,2)
+\classoptions["ab" left](13,3)
+\classoptions["b^2" right](20,4)
+\classoptions["b^3" right](30,6)
+\classoptions["b^4" right](40,8)
+\classoptions["v^3" right](72,0)
+
+% Doug's additions:
+\classoptions["{\left<a,a,b^2\right>}" below](27,1)
+\structline[dashed](27,1)(30,6)
+\structline[dashed](37,3)(40,8)
+
+\structline[dashed](99,1)(102,6)
+\structline[dashed](109,3)(112,8)
+
+\end{sseqpage}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.pdf b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.pdf
new file mode 100644
index 0000000000..4fb86edd2a
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.tex b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.tex
new file mode 100644
index 0000000000..a227184ea4
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/HFPSS-KO.tex
@@ -0,0 +1,90 @@
+%%
+%% Description: The homotopy fixed point spectral sequence for $C_2$ acting on $KU$ by complex conjugation, compare the odd-primary case HFPSS-EO2_3
+%%
+%% File: example_KUHFPSS.tex
+%%
+%% Here our group is C_2 which acts on the periodicity element by -1, so again we have a norm element v in degree 2|G| = 4.
+%% There are easier ways to understand this, but I explained the EO_3 one in terms of the comparison map from the ANSS,
+%% and that's interesting here too. In the ANSS at 2, there is a differential d3(\alpha_3) = \alpha_1^4. Here a cobar calculation
+%% shows that \alpha v = \alpha_3, so dividing the differential by \alpha gives d3(v) = \alpha_1^3. Now there's no Kudo differential
+%% because the prime is 2, and the spectral sequence immediately collapses.
+%%
+%% Second, a demonstration of the falsehood of ku^{hC_2} = ko -- ku^{hC_2} has an extra generator as a ring, which is in degree -4.
+%% In particular, it's not even connective.
+%%
+
+\documentclass{spectralsequence-example}
+\begin{document}
+\sseqset{
+ Z2class/.sseq style={circle,inner sep=0.3ex,fill=black},
+ Zclass/.sseq style={fill=none,draw,inner sep=0.6ex},
+ 2Zclass/.sseq style={fill=none,rectangle,draw,inner sep=0.6ex,outer sep=0.5ex}
+}
+\begin{sseqdata}[
+ name=KRHFPSS,
+ x range={-12}{14},
+ y range={0}{10},
+ y axis type=center,
+ y axis gap=0.425cm,
+ tick step=4,
+ classes=Z2class,
+ differentials=->,
+ degree={-1}{#1-1},
+ scale=1.45,
+ right clip padding=0.1cm,
+ top clip padding=0.05cm,
+ x axis extend start=0cm,
+ x axis extend end=0.33cm,
+ y axis extend end=0.3cm,
+ grid=go
+]
+
+% This is just to make sure the bounding box doesn't move around
+\path[background] (\xmin-1,\ymin-1) rectangle (\xmax+1,\ymax+1);
+
+\def\xmin{-12}
+\def\xmax{14}
+\sseqparseint\xitstart{\xmin/8*8-16} % division is integer division (I think with rounding towards 0...) so /8*8 rounds up to the nearest multiple of 8?
+\sseqparseint\xitgap{\xitstart+4}
+\sseqparseint\xitend{\xmax+2}
+\sseqparseint\xmaxpp{\xmax+2}
+
+\foreach \x in {\xitstart,\xitgap,...,\xitend} {
+ \class[Zclass](\x,0)
+ \foreach \z in {0,...,\xmaxpp} {
+ \class(\x+\z+1,\z+1)
+ \structline(\x+\z,\z)(\x+\z+1,\z+1)
+ }
+}
+
+\sseqparseint\xitstart{\xitgap}
+\sseqparseint\xitgap{\xitstart+8}
+
+\foreach \x in {\xitstart,\xitgap,...,\xitend} {
+ \foreach\z in {0,...,\xmax}{
+ \d4(\x+\z,\z)
+ }
+ \replaceclass[2Zclass](\x,0)
+}
+\end{sseqdata}
+\printpage[name=KRHFPSS,page=0]
+\newpage
+\printpage[name=KRHFPSS,page=5]
+
+
+\newpage
+\begin{sseqpage}[name=KRHFPSS,page=0,keep changes]
+\def\xmin{-12}\def\xmax{14}
+\pgfmathsetmacro\antidiag{min(-\xmin,\ymax+0.8)}
+\clip[background,xshift=0.2cm,yshift=-0.33cm](-\antidiag,\antidiag)--(-1,1)--(-0.4,0)--(\xmax + 0.28,0)--(\xmax+0.28,\antidiag)--cycle;
+\foreach \z in {2,6}{
+ \doptions[draw=none]4(-\z-1,\z-1)
+ \structlineoptions[draw=none](-\z-1,\z-1)(-\z,\z)
+ \structlineoptions[draw=none](-\z-3,\z+1)(-\z-2,\z+2)
+ \replaceclass(-\z-2,\z+2)
+}
+\structlineoptions[draw=none](-3,1)(-2,2)
+\end{sseqpage}
+\newpage
+\printpage[name=KRHFPSS,page=5]
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.pdf b/graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.pdf
new file mode 100644
index 0000000000..b5729dae9a
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.tex b/graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.tex
new file mode 100644
index 0000000000..d71c48d808
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/J_RPinfty.tex
@@ -0,0 +1,136 @@
+%%
+%% Package: spectralsequences v1.2.2 2017-09-16 2017-09-16
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: example_endofVFoS.tex
+%%
+%% This is the drawing that got me started making the package. To this day, I don't know what it is. I copied it from Matt Ando's handwritten notes on
+%% Haynes 1990(?) class on Vector Fields on Spheres. It's on the very last page of the second part of the notes, so it must have been the last day of class.
+%% Looking back, I seem to have inferred a bunch of stuff that wasn't actually written down on the page, but I'm not sure how so there's a chance some of it is wrong.
+%%
+
+\documentclass{spectralsequence-example}
+\usepackage{amssymb}
+
+\NewSseqCommand\row { m } {\foreach \x in {1,...,35}{\class(\x,#1)}}
+\NewSseqCommand\twoptrow { m } {\foreach \x in {1,...,35}{\class(\x,#1)\class(\x,#1)}}
+\begin{document}
+\begin{sseqdata}[
+ name=mysseq,
+ x range={1}{25},
+ y range={0}{19},
+ homological Serre grading,
+ classes=fill,
+ permanent classes={circle,red},
+ transient cycles={black},
+ differentials={blue},
+ grid = go,
+ scale=0.9
+]
+
+\foreach \x in {1,3,5,...,35} {\class(\x,0)}
+
+\row{1}
+\row{2}
+\row{3}
+
+\foreach \y in {7,15,23}{
+ \row{\y}
+ \row{\y+1}
+ \twoptrow{\y+2}
+ \row{\y+3}
+ \row{\y+4}
+}
+
+\foreach \x in {9,13,...,25}{
+ \d2(\x,0)
+%
+ \foreach \y in {7,15}{
+ \d2 (\x,\y)
+ \d2 (\x,\y+1,,2)
+ \d2 (\x,\y+2,1,)
+ }
+}
+
+
+
+\foreach \x in {4,8,...,24}{
+ \d2 (\x,1)
+ \d2 (\x,2)
+ \foreach \y in {7,15}{
+ \d2 (\x,\y+1,,2)
+ \d2 (\x,\y+2,1,)
+ \d2 (\x,\y+3)
+ }
+}
+
+
+\foreach \x in {4,8,..., 24,28}
+ \foreach \y in {7,15}{
+ \d3 (\x+2,\y,,1)
+ \d3 (\x,\y+2,2,)
+}
+
+\foreach \x in {11,19,27}{
+ \d4(\x,0)
+}
+
+\foreach \x in {12,20,28}
+ \foreach \y in {7,15}{
+ \d5(\x,\y)
+}
+
+
+
+\foreach \x in {10,18,26,34}{
+ \d7(\x,1)
+ \d7(\x-1,2)
+ \d7(\x-2,3,,2)
+
+ \foreach \y in {9,17}{
+ \d7(\x,\y,1)
+ \d7(\x-1,\y+1)
+ \d7(\x-2,\y+2,,2)
+ }
+}
+
+\d9(15,0)
+\d9(14,1,,2)
+\d10(13,2)
+
+\d8(23,0)
+\d8(22,1)
+\foreach \x in {23,31} {
+ \d8(\x-2,2,,2)
+ \d9(\x-3,3)
+}
+\foreach \x in {16,24,32} {
+ \d9(\x,7)
+ \d8(\x-2,9,1,)
+ \d8(\x-3,10,,2)
+ \d9(\x-4,11)
+}
+\end{sseqdata}
+
+
+\printpage[name=mysseq, page=0]
+\newpage
+\printpage[name=mysseq, page=2]
+\newpage
+\printpage[name=mysseq, page=3]
+\newpage
+\printpage[name=mysseq, page=4]
+\newpage
+\printpage[name=mysseq, page=5]
+\newpage
+\printpage[name=mysseq, page=7]
+\newpage
+\printpage[name=mysseq, page=8]
+\newpage
+\printpage[name=mysseq, page=9]
+\newpage
+\printpage[name=mysseq, page=10]
+\end{document}
diff --git a/graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).pdf b/graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).pdf
new file mode 100644
index 0000000000..701b66fc36
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).tex b/graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).tex
new file mode 100644
index 0000000000..43043f89b2
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/MaySS-bo-A(1).tex
@@ -0,0 +1,76 @@
+%%
+%% Description: The May spectral sequence for $Ext(\HF_{2*}bo)$
+%%
+%% This is the May spectral sequence computing Ext_{A(1)} ( F_2, F_2 ), which by a change of rings and a simple argument that the ASS has to collapse,
+%% is telling us pi_* bo. See the Green Book for reference.
+%% The main purpose of this example from my perspective is to illustrate the utility of class "tags".
+%%
+
+
+\documentclass[tooltips]{spectralsequence-example}
+
+\NewSseqCommand\tower {} {
+ \class(0,0)
+ \foreach\i in {1,...,11}{
+ \class(0,\i)
+ \structline(0,\i-1,-1)(0,\i,-1)
+ }
+}
+\NewSseqGroup\hvee {} {
+ \tower
+ \foreach\i in {1,...,11}{
+ \class(\i,\i)
+ \structline(\i-1,\i-1,-1)(\i,\i,-1)
+ }
+}
+
+\begin{document}
+\begin{sseqdata}[
+ name=A1 May,
+ x range={0}{10}, y range={0}{10},
+ degree={-1}{1},
+ classes={fill, tooltip = {(\xcoord,\ycoord)}},
+ class labels={below=3pt},
+ run off differentials= ->,
+ no orphan edges,
+]
+\foreach\i in {0,1,2}{
+ \begin{scope}[xshift=4*\i,yshift=2*\i,tag prefix=\i.]
+ \hvee[tag=id](0,0)
+ \hvee[tag=h0h1](1,2)
+ \hvee[tag=h20](2,1)
+ \foreach\j in {1,...,10}{
+ \d1(2,\j,h20,h0h1)
+ }
+ \foreach\j in {1,...,10}{
+ \d1(2+\j,1+\j,h20,h0h1)
+ }
+ \end{scope}
+}
+
+
+\foreach\i in {0,...,7}{
+ \d2(4+\i,2+\i,1.id,0.id)
+}
+\class(12,6)
+\d2(12,6,,1)
+
+%\classoptions["h_0"](0,1)
+\classoptions["h_1"](1,1)
+\classoptions["h_{20}"](2,1)
+\classoptions["h_{20}^2"](4,2)
+\classoptions["h_{20}^3"](6,3)
+\classoptions["h_{20}^4"](8,4)
+\classoptions["h_{20}^5"](10,5)
+
+\doptions[shorten >=3pt]1(10,10,2.h20,2.h0h1)
+\end{sseqdata}
+
+\printpage[name=A1 May,page=1]
+\newpage
+\printpage[name=A1 May,page=2]
+\newpage
+\begin{sseqpage}[name=A1 May,page=3]
+\classoptions["h_0h_{20}^2"](4,3,1.id)
+\end{sseqpage}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).pdf b/graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).pdf
new file mode 100644
index 0000000000..b145578082
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).tex b/graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).tex
new file mode 100644
index 0000000000..c2ce0a1d55
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/MaySS-tmf-A(2).tex
@@ -0,0 +1,233 @@
+%%
+%% Description: The May spectral sequence for $Ext(\HF_{2*}\tmf)$
+%%
+%% I got this from Mike Hill's note: https://pdfs.semanticscholar.org/ddbb/8d584e4e81a71400088117b16cd241238c6c.pdf
+%%
+
+
+\documentclass[tooltips]{spectralsequence-example}
+\begin{document}
+\sseqset{htwostructstyle/.sseq style = {gray,very thin, run off=-}}
+
+
+\NewSseqCommand\twods{ O{} U( r() m m }{
+ \def\temp{#1,#2,#3,#4,#5}
+ \getdtarget\target#2{#3} % Store the target position in \target
+ \nameclass{source}(#3) % naming the classes gives us a speed boost
+ \nameclass{target1}(\target,#4) % by preventing sseqpages from reparsing the coordinate
+ \nameclass{target2}(\target,#5) % it also makes the code easier to read
+%
+ \circleclasses[ differential style, #1,
+ name path = circ, page = #2--#2 ]
+ (target1)(target2) % Circle the classes, use differential style
+%
+ \d[invisible]#2(source)(target1) % don't draw anything, but record source and targets as hit.
+ \d[invisible]#2(source)(target2)
+%
+ \path(target1)--(target2)
+ coordinate[midway](midpt);% put a coordinate in the center of the two classes
+ \path[name path = lin] (source) -- (midpt);% save path from start to midpoint
+%
+ % draw line in "differential style" from start to intersection point of circ and lin
+ \draw[ differential style, #1, page constraint= { \page == #2 },
+ name intersections = { of = circ and lin } ]
+ (source) -- (intersection-1);
+}
+
+
+\NewSseqCommand \tower { O{} d() } {
+ \IfNoValueF{#2}{
+ \pushstack(#2)
+ }
+ \savestack
+ \begin{scope}[#1]
+ \DoUntilOutOfBounds{
+ \class(\lastx,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ }
+ \end{scope}
+ \restorestack
+}
+
+\NewSseqCommand\honetower {O{}} {
+ \savestack
+ \begin{scope}[#1]
+ \DoUntilOutOfBounds{
+ \class(\lastx+1,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ }
+ \end{scope}
+ \restorestack
+}
+
+\NewSseqCommand\htwo { O{} d() } {
+ \IfNoValueF{#2}{
+ \pushstack(#2)
+ }
+ \class[#1](\lastx+3,\lasty+1)
+ \structline[htwostructstyle](\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand \htwotower { O{} d() } {
+ \IfNoValueF{#2}{
+ \pushstack(#2)
+ }
+ \begin{scope}[#1]
+ \gettag\thetag(\lastclass)
+ \class(\lastx+3,\lasty+1)
+ \structline[htwostructstyle](\lastclass)(\lastclass1)
+ \savestack
+ \DoUntilOutOfBounds{
+ \class(\lastx,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ \structline[htwostructstyle](\lastx-3,\lasty-1,\thetag)(\lastclass)
+ }
+ \restorestack
+ \end{scope}
+}
+
+
+\NewSseqCommand\dtower {u(u)} {
+ \foreach\i in {0,...,10}{
+ \d[yshift=\i]#1(#2)
+ }
+}
+
+\begin{sseqdata}[name=tmfmayss,y range={0}{8}, x range={0}{25}, degree={-1}{1},
+ classes=fill,
+ class labels={below=3pt},differentials=blue,
+ class pattern=linear, classes={ tooltip = {(\xcoord,\ycoord)} },
+ xscale=1.48,
+ yscale=2.2,
+ title = {Page \page},
+ run off differentials = ->
+]
+\class[tag= h0^i](0,0) \tower[tag=h0^i]
+\honetower \classoptions["h_1"](1,1)
+
+\htwotower[tag=h0^i h2]
+\classoptions["h_2"](3,1)
+\htwotower[tag=h0^i h2^2]
+\htwotower[tag=h0^i h2^3]
+\htwotower[tag=h0^i h2^4]
+\htwotower[tag=h0^i h2^5]
+\htwotower[tag=h0^i h2^6]
+\htwotower[tag=h0^i h2^7]
+\htwotower[tag=h0^i h2^8]
+\htwo%\htwotower[tag=h0^i h2^9]
+
+
+\class["b_{20}",name=b20,tag=h1^i b20](4,2)
+\tagclass{h0^i b20}(4,2)
+\honetower[tag=h1^i b20]
+\tower[tag=h0^i b20]
+\class["x_7",tag=h0^i x7,name=x7](7,2) \honetower
+\htwotower[tag=h0^i x7](b20)
+\structline(\lastclass)(x7) % h0 x7 = h2 b20
+
+
+\class["b_{21}", tag=h0^i b21,name=b21](10,2)
+\honetower[tag=h1^i b21]
+%\structline(\lastclass)(h2^2 b20) % h2 (h0 x7) = h2 (h2 b20)
+
+\htwotower[tag=h0^i b21](x7)
+\structline(b21)(\lastclass)
+
+
+
+\htwotower[tag=h0^i h2 b21](b21)
+\htwotower[tag=h0^i h2^2 b21]
+\htwotower[tag=h0^i h2^3 b21]
+\htwotower[tag=h0^i h2^4 b21]
+\htwotower[tag=h0^i h2^5 b21]
+\htwotower[tag=h0^i h2^6 b21]
+
+\class["b_{30}",tag=h1^i b30](12,2)
+\tagclass{h0^i b30}(12,2)
+\tower[tag=h0^i b30]\honetower[tag=h1^i b30]
+\htwotower[tag=h0^i h2 b30]
+\htwotower[tag=h0^i h2^2 b30]
+\htwotower[tag=h0^i h2^3 b30]
+\htwotower[tag=h0^i h2^4 b30]
+\htwotower[tag=h0^i h2^5 b30]
+
+
+
+%
+
+\class[tag=h0^i x7^2](14,4)
+\classoptions["x_7^2",page=0--3](\lastclass)
+\classoptions["d",page=4--100](\lastclass)
+\tower[tag=h0^i x7^2] \honetower
+
+\htwotower[tag=h0^i h2 x7^2]
+\htwotower[tag=h0^i h2^2 x7^2]
+\htwotower[tag=h0^i h2^3 x7^2]
+\htwotower[tag=h0^i h2^4 x7^2]
+\htwo%\htwotower[tag=h0^i h2^5 x7^2]
+
+
+\class["b_{20}^2",tag=h0^i b_{20}^2](8,4)
+\tower[tag=h0^i b_{20}^2]
+\honetower
+\htwotower[tag=h0^i h2 b_{20}^2]
+\htwotower[tag=h0^i h2^2 b_{20}^2]
+\htwotower[tag=h0^i h2^3 b_{20}^2]
+\htwotower[tag=h0^i h2^4 b_{20}^2]
+\htwo%\htwotower[tag=h0^i h2^5, b_{20}^2]
+
+\class[tag=h0^i b21^2](20,4)
+\classoptions["b_{21}^2",page=0--3](\lastclass)
+\classoptions["g",page=4--100](\lastclass)
+\honetower
+\tower[tag=h0^i b21^2]
+
+\htwotower[tag=h0^i h2 b21^2]
+\htwotower[tag=h0^i h2^2 b21^2]
+
+\class["b_{30}^2",tag=h0^i b30^2](24,4)
+\tower[tag=h0^i b30^2]
+\honetower
+\htwotower
+%\htwotower[tag=h0^i h2^3 b21^2]
+
+
+
+\twods3(4,2,-1){1}{2} % d3(b20) = h1^3 + h0^2 h2
+\replaceclass[offset={(0,0)}](3,3)
+\structline(3,2)(3,3)
+\structline(2,2)(3,3)
+\structline[htwostructstyle](0,2)(3,3)
+
+\foreach\y in {3,...,8} {\d3(4,\y,-1,-1)} % d3( h0^i b20 ) = h0^{2+i} h2
+\foreach\n in {3,...,8} {\d3(2+\n,\n,h1^i b20,1)} % d3(h1^i b20) = h1^{3+i}
+\foreach \y in {2,...,8} {\d3(7,\y,h0^i x7,h0^i h2^2)}
+
+\foreach \y in {2,...,8} {\d3(10,\y,h0^i b21,h0^i h2^3)}
+
+\foreach \y in {3,...,8} {\d3(13,\y, h0^i h2 b21 ,h0^i h2^4)}
+\foreach \y in {3,...,7} {\d3(16,\y+1,h0^i h2^2 b21,h0^i h2^5)}
+\foreach \y in {3,...,6} {\d3(19,\y+2,h0^i h2^3 b21,h0^i h2^6)}
+\foreach \y in {3,...,5} {\d3(22,\y+3,h0^i h2^4 b21,h0^i h2^7)}
+\foreach \y in {3,...,4} {\d3(25,\y+4,h0^i h2^5 b21,h0^i h2^8)}
+
+\foreach \n in {0,...,6} {\d3(12+\n,2+\n,h1^i b30,h1^i b21)}
+
+\foreach \n in {0,...,4} {\d5(24,4+\n,-1,-1)}
+
+
+\classoptions[page=4--100,"c_0"](8,3)
+\classoptions[page=4--100,"a"](12,3)
+\classoptions[page=4--100,"b"](15,3)
+
+
+
+\end{sseqdata}
+\printpage[name=tmfmayss,page=2]
+\newpage
+\printpage[name=tmfmayss,page=3]
+\newpage
+\printpage[name=tmfmayss,page=5]
+\newpage
+\printpage[name=tmfmayss,page=8,title={Page $\infty$}]
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.pdf b/graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.pdf
new file mode 100644
index 0000000000..bd14cc30b1
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.tex b/graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.tex
new file mode 100644
index 0000000000..b326c2e996
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/SSS-KF3n.tex
@@ -0,0 +1,323 @@
+%%
+%% Description: The Serre spectral sequence for $\HF_3$ cohomology of $K(\F_3,n-1)\to pt \to K(\F_3,n)$ for $n=2,3,4$, with Bockstein SS's for going up to $\Zbb_3$ coefficients.
+%%
+%% This is a computation of the Z_3 cohomology of K(F_3,n). This was part of a way-too-hard problem on Haynes Algebraic Topology II problem set which asked to compute
+%% the smallest k>0 such that H_{n+k}(K(--,n);Z_p) : Ab --> Ab is not the zero functor and to compute what functor it is. One of the main ideas is to use the Bockstein
+%% spectral sequence, because it handles the badness of integral Kunneth for us too.
+%%
+
+\documentclass{article}
+\usepackage[margin=0.2in,top=0.4in,landscape]{geometry}
+\usepackage{spectralsequences}
+\usepackage{amssymb}
+\def\Z{\mathbb{Z}}
+\begin{document}
+\sseqset{
+ cohomological Serre grading,
+ title={Page \page},
+ class placement transform={scale=1.3, rotate=90},
+ class pattern=linear,
+ classes={draw=none},
+ class label handler = \SseqNormalizeMonomial,
+ bocksteinSS/.style={
+ page=0, y range={-1}{0},
+ no differentials, no labels, no y ticks, no title,
+ yscale=1.5, x axis extend end=40pt, y axis extend end = 40pt, x axis gap =50pt,
+ class label handler = {},
+ }
+}
+
+\begin{sseqdata}[name=K(Z/3;2),
+ x range={0}{8}, xscale=2.2, yscale=1.5,
+ x label={$H^*(K(\Z/3,2),\Z/3)$},
+ y label={$H^*(K(\Z/3,1),\Z/3)$},
+ right clip padding=20pt, x axis gap=20pt,
+]
+\foreach \x/\xlabel in
+ { 0/1, 2/\iota_2, 3/\beta\iota_2, 4/\iota_2^2, 5/\iota_2\beta\iota_2, 6/\iota_2^3,
+ 7/\iota_2^2\beta\iota_2, 7/P^1\beta\iota_2, 8/\iota_2^4, 8/\beta P^1\beta\iota_2 }
+\foreach \y/\ylabel in
+ { 0/1, 1/\alpha, 2/x, 3/\alpha x, 4/x^2, 5/\alpha x^2, 6/x^3} {
+ \class["\ylabel\xlabel"](\x,\y)
+}
+
+\class(9,0)\class(9,0)
+\class(9,1)
+\class(9,2)
+\class(9,3)
+\class(9,4)
+\class(9,5)
+
+\class(10,0)\class(10,0)\class(10,0)
+\class(10,2)\class(10,2)
+\class(10,4)\class(10,4)
+
+\class(11,0)\class(11,0)
+\class(11,2)
+
+\class(12,0)
+\class(13,0)
+\class(14,0)
+\class(15,0)
+%\class["(\beta\iota_2)^2"](6,0)
+
+
+\d2(0,1) %d2(a)=i
+
+
+
+\d3(0,2) %d3(x) = b(i)
+\d2(0,3) % d2(ax) = ix
+\d3(0,4) % d2(x^2) = xb(i)
+\d2(0,5) % d2(ax^2) = ix^2
+%\d7
+
+
+\d2(2,1) % d2(ai) = i^2
+\d2(2,3) % d2(axi) = xi^2
+\d2(2,5) % d2(ax^2i)=x^2i^2)
+
+\d2(3,1) % d2(abi)=ib(i)
+\d2(3,3)
+\d2(3,5)
+
+\d2(4,1) % d2(ai^2)=i^3
+\d2(4,3)
+\d2(4,5)
+
+\d2(5,1,,1) %d2(ai_2bi_2) = i_2^2 bi_2
+\d2(5,3,,1)
+\d2(5,5,,1)
+
+\d2(6,1,,1) %d2(ai_2^3) = i_2^4
+\d2(6,3,,1)
+\d2(6,5,,1)
+
+\d2(7,1,1) % d2(ai_2^2bi_2) = i_2^3 bi_2
+\d2(7,3,1)
+\d2(7,5,1)
+
+\d2(7,1,2) % d2(aP^1bi_2) = i_2 P^1bi_2
+\d2(7,3,2)
+\d2(7,5,2)
+
+\d3(7,2,2) % d3(x P^1bi_2) = bi_2 P^1bi_2
+\d3(7,4,2)
+
+\d2(8,1,1,2) % d2(a i_2^4) = i_2^5
+\d2(8,3,1,2)
+\d2(8,5,1,2)
+
+\d2(8,1,2,2) % d2(a bP^1bi_2) = i_2 bP^1bi_2
+\d2(8,3,2,2)
+\d2(8,5,2,2)
+
+\d3(8,2,2) % d3(x bP^1bi_2) = bi_2 bP^1bi_2
+\d3(8,4,2)
+
+
+\d5(3,4,,2) % d5(x^2i_2) = bP^1bi_2 -- Kudo differential
+
+\d7(0,6,,2) % d7(x^3) = P^1bi_2
+\d7(2,6,,2)
+\d7(3,6,,3)
+\d7(4,6,,2)
+\d7(5,6)
+\d7(6,6)
+\d7(7,6,1)
+\d7(7,6,2)
+\d7(8,6,1)
+\d7(8,6,2)
+
+
+\end{sseqdata}
+
+\printpage[name=K(Z/3;2),page=2]
+\newpage
+\printpage[name=K(Z/3;2),page=3]
+\newpage
+\printpage[name=K(Z/3;2),page=5]
+\newpage
+\printpage[name=K(Z/3;2),page=6]
+\newpage
+\printpage[name=K(Z/3;2),page=7]
+\newpage
+
+\begin{sseqpage}[
+ name=K(Z/3;2), bocksteinSS,
+ x axis extend end = 30pt, y axis gap=30pt,
+]
+\begin{scope}[background]
+\node[anchor=west] at (-2,0) { H^*(K(\Z/3,2),\Z/3)};
+\node[anchor=west] at (-2,-1) { H^*(K(\Z/3,2),\Z)};
+\end{scope}
+
+\draw[->] (2,0) to[bend left=30, "\beta^1"] (3,0);
+\draw[->] (4,0) to[bend left=30, "\beta^1"{pos = 0.55}] (5,0);
+\draw[->] (6,0) to[bend right=30, "\beta^2"'] (7,0,1);
+\draw[->] (7,0,2) to[bend left=30, "\beta^1"] (8,0,2);
+\draw[->] (8,0,1) to[bend right=30, "\beta^1"' {pos = 0.46}] (9,0);
+
+\class["\Z\{1\}"](0,-1)
+\class["\Z/3\{\beta\iota_2\}"](3,-1)
+\class["\Z/3\{\beta\iota_2^2\}"](5,-1)
+\class["\Z/9\{\beta\iota_2^3\}"](7,-1)
+\class["\Z/3\{\beta P^1\iota_2\}"](8,-1)
+\end{sseqpage}
+
+
+\newpage
+\begin{sseqdata}[name=K(Z/3;3),xscale=2.2,yscale=1.7,y axis gap=40pt,x axis gap=30pt, x range={0}{9},
+ x label={$H^*(K(\Z/3,2),\Z/3)$},
+ y label={$H^*(K(\Z/3,1),\Z/3)$}
+]
+
+\foreach \x/\ymax/\xlabel in { 0/6/1, 3/6/\iota_3, 4/3/{{\beta\iota_3}} }
+\foreach \y/\ylabel in { 0/1, 2/\iota_2, 3/{{\beta\iota_2}}, 4/\iota_2^2, 5/\iota_2{\beta\iota_2}, 6/\iota_2^3 } {
+ \class["\ylabel\xlabel"](\x,\y)
+}
+
+\sseqset{class label handler = {}}
+
+\class["P^1\beta\iota_2"](0,7)
+\class["\iota_2^2\beta\iota_2"](0,7)
+\class["\beta P^1\beta\iota_2"](0,8)
+\class["\iota_2^4"](0,8)
+
+
+\class["P^1\iota_3"](7,0)
+\class["\iota_3\beta\iota_3"](7,0)
+\class["\beta P^1\iota_3"](8,0)
+\class["(\beta\iota_3)^2"](8,0)
+\class["P^1\beta\iota_3"](8,0)
+\class["\beta P^1\beta\iota_3"](9,0)
+
+
+\d3(0,2)
+\d4(0,3)
+\d3(0,4)
+\d3(0,5)
+\d7(0,6,,1)
+\d3(0,7,2)
+\d8(0,7,1,3)
+\d3(0,8,2)
+\d9(0,8,1)
+\d5(3,4,,1)
+
+\d3(4,2,,2)
+\d4(4,3,,2)
+\end{sseqdata}
+
+\printpage[name=K(Z/3;3),page=3]
+\newpage
+\printpage[name=K(Z/3;3),page=4]
+\newpage
+\printpage[name=K(Z/3;3),page=5]
+\newpage
+\printpage[name=K(Z/3;3),page=7]
+\newpage
+\printpage[name=K(Z/3;3),page=9]
+\newpage
+
+\begin{sseqpage}[ name=K(Z/3;3), bocksteinSS ]
+\begin{scope}[background]
+\node[anchor=west] at (-2.2,0) { H^*(K(\Z/3,3),\Z/3)};
+\node[anchor=west] at (-2.2,-1) { H^*(K(\Z/3,3),\Z)};
+\end{scope}
+
+\draw[->] (3,0) to[bend left=30, "\beta^1"] (4,0);
+\draw[->] (7,0,1) to[bend right=30, "\beta^1"' {pos=0.6}] (8,0,1);
+\draw[->] (7,0,2) to[bend left=30, "\beta^1" {pos=0.43}] (8,0,2);
+\draw[->] (8,0,3) to[bend left=30, "\beta^1"{pos=0.37}] (9,0);
+
+\class["\Z\{1\}"](0,-1)
+\class["\Z/3\{\beta\iota_3\}"](4,-1)
+\class["\Z/3\{\beta P^1\iota_3\}"](8,-1)
+\class["\Z/3\{\beta(\iota_3\beta\iota_3)\}"](8,-1)
+\class["\Z/3\{\beta P^1\beta\iota_3\}"](9,-1)
+\end{sseqpage}
+
+
+
+\begin{sseqdata}[name=K(Z/3;4),
+ xscale=2,yscale=1.5,y axis gap=20pt,x axis gap=30pt, x range={0}{10},
+ x label = {$H^*(K(\Z/3,3),\Z/3)$},
+ y label = {$H^*(K(\Z/3,4),\Z/3)$},
+ class label handler = {}
+]
+
+\class["1"](0,0)
+\class["\iota_3"](0,3)
+\class["\beta\iota_3"](0,4)
+\class["P^1\iota_3"](0,7)
+\class["\beta P^1\iota_3"](0,8)
+\class["\iota_3\beta\iota_3"](0,7)
+\class["(\beta\iota_3)^2"](0,8)
+\class["P^1\beta\iota_3"](0,8)
+\class["\beta P^1\beta\iota_3"](0,9)
+
+
+\class["\iota_4"](4,0)
+\class["\iota_3\iota_4"](4,3)
+\class["\beta\iota_3\iota_4"](4,4)
+
+\class["\beta\iota_4"](5,0)
+\class["\iota_3\beta\iota_4"](5,3)
+\class["\beta\iota_3\beta\iota_4"](5,4)
+
+\class["\iota_4^2"](8,0)
+\class["P^1\iota_4"](8,0)
+
+\class["\iota_4 \beta\iota_4"](9,0)
+\class["P^1\beta\iota_4"](9,0)
+\class["\beta P^1\iota_4"](9,0)
+
+\class["\beta P^1\beta\iota_4"](10,0)
+
+\d4(0,3) % d4(i_3) = i_4
+\d4(0,7,2)
+\d4(4,3,,1)
+\d4(5,3,,1)
+
+\d5(0,4)
+
+\d8(0,7,1,2)
+
+\d9(0,8,1,2)
+\d5(0,8,2)
+\d9(0,8,3,3)
+\d10(0,9)
+
+%\d
+\end{sseqdata}
+
+\printpage[name=K(Z/3;4),page=4]
+\newpage
+\printpage[name=K(Z/3;4),page=5]
+\newpage
+\printpage[name=K(Z/3;4),page=8]
+\newpage
+\printpage[name=K(Z/3;4),page=9]
+\newpage
+\printpage[name=K(Z/3;4),page=10]
+\newpage
+
+\begin{sseqpage}[ name=K(Z/3;4), bocksteinSS, yscale=1.3 ]
+\begin{scope}[background]
+\node[anchor=west] at (-2.2,0) { H^*(K(\Z/3,4),\Z/3)};
+\node[anchor=west] at (-2.2,-1) { H^*(K(\Z/3,4),\Z)};
+\end{scope}
+
+\draw[->] (4,0) to[bend left=30, "\beta^1"] (5,0);
+\draw[->] (8,0,1) to[bend right=30, "\beta^1"' {pos=0.6}] (9,0,1);
+\draw[->] (8,0,2) to[bend left=30, "\beta^1" {pos=0.6}] (9,0,3);
+\draw[->] (9,0,2) to[ "\beta^1"] (10,0);
+
+\class["\Z\{1\}"](0,-1)
+\class["\Z/3\{\beta\iota_4\}"](5,-1)
+\class["\Z/3\{\beta P^1\iota_4\}"](9,-1)
+\class["\Z/3\{\beta(\iota_4^2)\}"](9,-1)
+\class["\Z/3\{\beta P^1\beta\iota_4\}"](10,-1)
+\end{sseqpage}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.pdf b/graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.pdf
new file mode 100644
index 0000000000..d29570b7b8
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.tex b/graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.tex
new file mode 100644
index 0000000000..25c7143378
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/SSS-KZ3.tex
@@ -0,0 +1,133 @@
+%%
+%% Description: The Serre spectral sequence for $\HZ$ cohomology of $\CP^\infty \to pt \to K(\Z,3)$
+%%
+%% File: example_KZ3.tex
+%%
+%% This was one of the first spectral sequences I ever worked out (probably after the one for loops S^n), in the summer of 2013 with Kevin Donoghue.
+%%
+
+\documentclass{article}
+\usepackage[landscape,margin=0.5cm,top=2cm]{geometry}
+\usepackage{spectralsequences}
+\usepackage{amssymb}
+\def\Z{\mathbb{Z}}
+% Last time test: 1.1 sec
+\begin{document}
+\def\column#1[#2]{\foreach \y in {0,...,6} {\class[#2](#1,2*\y)}}
+\sseqset{classes={draw=none}}
+\begin{sseqdata}[
+ name={K(Z,3)},
+ x range={0}{12},
+ y range={0}{10},
+ cohomological Serre grading,
+ differentials={->},
+ xscale=1.8,
+ y axis gap=0.7cm,
+ math nodes,
+ x axis extend end=0.8cm,
+ this page cycles=red,
+ title=\textup{Serre SS Page \page{}},
+ x label = {$H^*(K(\Z,3))$},
+ y label = {$H^*(K(\Z,2))$}
+]
+
+\column0["\Z\{\ifnum\y>0\relax x\ifnum\y>1\relax ^{\y}\fi\else1\fi\}"]
+\column3["\Z\{a\ifnum\y>0x\ifnum\y>1 ^{\y}\fi\fi\}"]
+
+
+\foreach\y in {1,...,6} {\d["\cdot \y"']3(0,2*\y)}
+\replaceclass["\Z/3"](3,4)
+\replaceclass["\Z/5"](3,8)
+
+
+\column6["\Z/2"]
+\d3(3,2)
+\d3(3,6)
+\d3(3,10)
+\replaceclass["\Z/2"](3,6)
+\replaceclass["\Z/3"](3,10)
+\column8["\Z/3"]
+\d5(3,4)
+\d5(3,10)
+\column9["\Z/2"]
+\d3(6,2)
+\d3(6,6)
+\d3(6,10)
+\column10["\Z/2"]
+\d7(3,6)
+\column11["\Z/3"]
+\d3(8,2)
+\d3(8,4)
+\d3(8,8)
+\d3(8,10)
+\column12["\Z/2\oplus\Z/5"]
+\column13["\Z/2"]
+\column15["\Z/2\oplus\Z/2\oplus\Z/5"]
+\d3(9,2)
+\d3(9,6)
+\d3(9,10)
+\d3(10,2)
+\d3(10,6)
+\d3(10,10)
+\d3(10,12)
+\d3(12,2)
+\d3(12,4)
+\d3(12,6)
+\d3(12,8)
+\d3(12,10)
+\d3(12,4)
+\replaceclass["\Z/5"](12,0)
+\replaceclass["\Z/5"](12,4)
+\replaceclass["\Z/5"](12,8)
+\d9(3,8)
+
+
+\replaceclass["\Z/5"](12,10)
+\replaceclass["\Z/2"](15,0)
+\replaceclass["\Z/2\oplus\Z/2"](15,4)
+
+\d5(10,4)
+
+\class["\Z/3"](16,0)
+\class["\Z/3"](16,6)
+\d5(11,4)
+\d5(11,10)
+
+\class["\Z/2"] (17,0)
+
+\class["\Z/2"](17,8)
+
+\d5(12,12)
+
+\class["\Z/2"](19,0)
+\d9(10,8)
+
+\class["\Z/5"](23,0)
+\d11(12,10)
+
+\replaceclass["\Z/6"](16,0)
+\d13(3,12)
+
+%\replaceclass["\Z/6"](21,0)
+%\d13(8,12)
+\class["\Z/3"](24,0)
+\d13(11,12)
+\end{sseqdata}
+
+
+\printpage[name={K(Z,3)}, page=0,no differentials]
+\newpage
+\printpage[name={K(Z,3)}, page=0]
+\newpage
+\printpage[name={K(Z,3)}, page=3]
+\newpage
+\printpage[name={K(Z,3)}, page=5]
+\newpage
+\printpage[name={K(Z,3)}, page=7]
+\newpage
+\printpage[name={K(Z,3)}, page=9]
+\newpage
+\printpage[name={K(Z,3)}, page=11]
+\newpage
+\printpage[name={K(Z,3)}, page=12]
+\end{document}
diff --git a/graphics/pgf/contrib/spectralsequences/examples/hatcher.pdf b/graphics/pgf/contrib/spectralsequences/examples/hatcher.pdf
new file mode 100644
index 0000000000..17c750ae63
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/hatcher.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/hatcher.tex b/graphics/pgf/contrib/spectralsequences/examples/hatcher.tex
new file mode 100644
index 0000000000..3515aaacd0
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/hatcher.tex
@@ -0,0 +1,126 @@
+%%
+%% Package: spectralsequences v1.2.2 2017-09-16 2017-09-16
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: example_hatcher.tex
+%%
+%% This comes from Hatcher's spectral sequences book. I think it's a good demonstration of the flexibility of sseqpages.
+%% Thanks to Antonio Ruiz for suggesting it.
+%%
+
+\documentclass{spectralsequence-example}
+\usepackage{amssymb}
+\def\Z{\mathbb{Z}}
+
+\begin{document}
+\sseqset{
+ 0/.sseq style={"0",draw=none},
+ homological Serre grading,
+ classes={draw=none,inner sep=0.2em},
+ %tick gap=0.7em,
+}
+\begin{sseqdata}[
+ name=hatcherex1,
+ permanent cycles={draw,minimum width={width("$Z_2$")+0.85em}},
+ yscale=0.6,
+ axes gap=0.5cm,
+ tick gap=1em,
+]
+\begin{scope}[background,opacity=0.1]
+\foreach \n in {1,3,...,9}{
+ \fill(-1.3,\n-0.5)--(-1.3,\n+0.5)--(0,\n+0.5)--(\n+0.5,0)--(\n+0.5,-2)--(\n-0.5,-2)--(\n-0.5,0)--(0,\n-0.5)--cycle;
+}
+\end{scope}
+
+\class["\Z"](0,0)
+\foreach\x in {1,3,...,9}{
+ \class["\Z_2"](\x,0)
+}
+\foreach \x in {2,4,...,8}{
+ \class[0](\x,0)
+}
+\foreach\y in {1,3,...,9}{
+ \pgfmathparse{9-\y}
+ \let\xmax\pgfmathresult
+ \foreach\x in {0,...,\xmax}{
+ \class["\Z_2"](\x,\y)
+ }
+}
+
+\foreach \y in {2,4,...,8}{
+ \pgfmathparse{9-\y}
+ \let\xmax\pgfmathresult
+ \foreach\x in {0,...,\xmax}{
+ \class[0](\x,\y)
+ }
+}
+
+\foreach \x in {3,5,...,9}{
+ \d2(\x,0)
+}
+
+\d3(4,1)
+\d3(6,1)
+\d3(8,1)
+\d3(4,3)
+\d3(6,3)
+\d3(4,5)
+\end{sseqdata}
+\printpage[name=hatcherex1,page=0]
+
+\vskip30pt
+
+\begin{sseqdata}[
+ name=hatcherex2,
+ yscale=0.6,
+ x axis gap=0.3cm,
+]
+
+\begin{scope}[background,opacity=0.1]
+\foreach \n in {1,3,...,9}{
+ \fill(-1.3,\n-0.5)--(-1.3,\n+0.7)--(0,\n+0.7)--(\n+0.5,0)--(\n+0.5,-2)--(\n-0.5,-2)--(\n-0.5,0)--(0,\n-0.5)--cycle;
+}
+\end{scope}
+
+
+\foreach\x in {0,2,...,8}{
+ \class["\Z"](\x,0)
+}
+\foreach \x in {1,3,...,9}{
+ \class[0](\x,0)
+}
+\foreach\y in {1,3,...,9}{
+ \pgfmathparse{9-\y}
+ \let\xmax\pgfmathresult
+ \foreach\x in {0,...,\xmax}{
+ \pgfmathparse{int(mod(\x,2))}
+ \ifnum\pgfmathresult=0\relax
+ \class["\Z_2"](\x,\y)
+ \else
+ \class[0](\x,\y)
+ \fi
+ }
+}
+
+\d2(2,0)
+\foreach \x in {4,6,...,8}{
+ \foreach\r in {2,4,...,\x}{
+ \d\r(\x,0)
+ \replaceclass["\Z"](\x,0)
+ }
+}
+
+\foreach \y in {2,4,...,8}{
+ \pgfmathparse{9-\y}
+ \let\xmax\pgfmathresult
+ \foreach\x in {0,...,\xmax}{
+ \class[0](\x,\y)
+ }
+}
+
+\end{sseqdata}
+\printpage[name=hatcherex2,page=0]
+\end{document}
diff --git a/graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.pdf b/graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.pdf
new file mode 100644
index 0000000000..48a9746aa9
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.tex b/graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.tex
new file mode 100644
index 0000000000..7bd7350dd1
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/examples/unstable_ASS_SO.tex
@@ -0,0 +1,78 @@
+%%
+%% Package: spectralsequences v1.2.2 2017-09-16 2017-09-16
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: example_unstable_ASS_SO.tex
+%%
+%% From Kathryn Lesh: A conjecture on the unstable Adams spectral sequences for SO and U top of page 21.
+%% http://hopf.math.purdue.edu//Lesh/uass-so-model.pdf
+%%
+
+\documentclass{spectralsequence-example}
+
+\begin{document}
+\sseqset{
+ M3M2/.sseq style = { fill },
+ M4M3/.sseq style = { circlen = 2, fill }
+}
+%\pgfkeys{/sseqpages/class/M4M3/.show code}
+
+\NewSseqCommand \tower { O{} d() } {
+ \IfNoValueF{#2}{\class(#2)}
+ \savestack
+ \begin{scope}[#1]
+ \DoUntilOutOfBounds{
+ \class(\lastx,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+ }
+ \end{scope}
+ \restorestack
+}
+
+\NewSseqCommand \etaclass {} {
+ \class(\lastx+1,\lasty+1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\NewSseqCommand \divtwoclass {} {
+ \class(\lastx,\lasty-1)
+ \structline(\lastclass1)(\lastclass)
+}
+
+\begin{sseqdata}[ name = SO_UASS, tick step = 5, x range = {0}{20}, Adams grading, y range={0}{10} ]
+\class(1,0)
+\tower(3,0)
+
+\begin{scope}[M3M2]
+\tower(7,0)
+\etaclass\etaclass
+
+\tower(11,3)
+
+\class(14,4)
+\divtwoclass\divtwoclass
+\etaclass\etaclass\etaclass
+\divtwoclass\divtwoclass
+
+\class(16,5)\etaclass
+\end{scope}
+
+\begin{scope}[M4M3]
+\tower(15,0)
+\etaclass\etaclass\etaclass
+\divtwoclass\divtwoclass
+\end{scope}
+
+\d2(15,0)\d2(15,1)\d2(15,2)
+\d2(16,1)\d2(17,2)\d2(18,3)
+\d2(18,2)\d2(18,1)
+\end{sseqdata}
+
+
+\printpage[ name = SO_UASS, page = 2 ]
+\newpage
+\printpage[ name = SO_UASS, page = 3 ]
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-KORP8.tex b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-KORP8.tex
new file mode 100644
index 0000000000..f5a767b2de
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-KORP8.tex
@@ -0,0 +1,34 @@
+
+
+\NewSseqCommand \KOstar {m}{
+ \begin{scope}[ xshift = -#1, xshift = 8*\b, yshift = #1 ]
+ \class[rectangle, name = b^{\b}[0]](0,0)
+ \class[name = b^{\b} e[0]](1,0) \structline
+ \class[name = b^{\b} e^2[0]](2,0) \structline
+ \class[rectangle, fill = none, name = b^{\b} u[0]](4,0)
+ \end{scope}
+}
+\NewSseqCommand \KOpcell {m}{
+ \d1(b^{\b}[#1]) \replacetarget
+ \d1(b^{\b} u[#1]) \replacetarget
+ \structline(b^{\b}[#1+1])(b^{\b} e[#1+1])
+ \structline[page = 2, dashed](b^{\b} e[#1])(b^{\b} e^2[#1+1])
+ \structline[page = 2, dashed](b^{\b} e^2[#1])(b^{\b} u[#1+1])
+}
+\NewSseqCommand \KOetacell {m}{
+ \DrawIfValidDifferential2(b^{\b}[#1])
+ \d2(b^{\b} e[#1])
+ \DrawIfValidDifferential3(b^{\b} e^2[#1])
+}
+\begin{sseqdata}[ name = KO^*RP^8, Adams grading, class name handler = \SseqAHSSNameHandler,
+ classes = fill, x range = {-8}{10}, xscale = 0.7, yscale = 0.5, x tick step = 4 ]
+\foreach \b in {-2,...,2}{
+ \foreach \n in {0,...,6}{\KOstar{\n}}
+ \foreach \n in {1,3,...,5}{\KOpcell{\n}}
+ \foreach \n in {2,3}{\KOetacell{\n}}
+ \structline[dashed](b^{\b}e^2[2])(b^{\b}u[4])
+ \structline[dashed](b^{\b}[4])(b^{\b}e[5])
+}
+\end{sseqdata}
+\printpage[ name = KO^*RP^8, title = AHSS for $KO^*\mathbb{R}P^8$ ] \vskip6pt
+\printpage[ name = KO^*RP^8, page = 6 ] \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2a.tex b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2a.tex
new file mode 100644
index 0000000000..90a9b9bc3c
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2a.tex
@@ -0,0 +1,24 @@
+\begin{sseqdata}[ name = page_example2, Adams grading, xscale = 0.6, yscale = 0.5 ]
+\class(0,2)\class(1,0)
+\d2(1,0)
+\replacesource
+\class(0,3)
+\d3(1,0)
+\replacesource
+\classoptions[fill, red](1,0) % (a) applies to most recent (last) generation.
+\end{sseqdata}
+
+\printpage[ name = page_example2, page = 1 ] % generation 0 of (1,0), not styled
+\quad
+\begin{sseqpage}[ name = page_example2, page = 1, keep changes ]
+\classoptions[fill, blue](1,0) % (b) applies to the generation present on page 1, that is, generation 0.
+\end{sseqpage} \quad
+
+% generation 0 of (1,0), so class is blue from (b)
+\printpage[ name = page_example2, page = 2 ] \quad
+
+% generation 1 of (1,0), class is not styled
+\printpage[ name = page_example2, page = 3 ] \quad
+
+% generation 2 of (1,0), class is red from (a)
+\printpage[ name = page_example2, page = 4 ] \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2b.tex b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2b.tex
new file mode 100644
index 0000000000..3d5854f054
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-class-page2b.tex
@@ -0,0 +1,18 @@
+\begin{sseqdata}[ name = page_example2, Adams grading, update existing ]
+% (c) applies to all generations, overwrites (b) and (a):
+\classoptions[fill, red, generation = 0 ---- -1](1,0)
+\end{sseqdata}
+
+\printpage[ name = page_example2, page = 1 ]% generation 0 of (1,0), so class is red
+\quad
+\begin{sseqpage}[ name = page_example2, page = 1, keep changes ]
+\classoptions[fill, blue](1,0) % (d) applies to the generation present on page 1, that is, generation 0.
+\end{sseqpage} \quad
+
+% generation 0 of (1,0), class is blue from (d)
+\printpage[ name = page_example2, page = 2 ] \quad
+
+% generation 1 of (1,0), class is red from (c)
+\printpage[ name = page_example2, page = 3 ]
+\quad
+\printpage[ name = page_example2, page = 4 ] % generation 2 of (1,0), class is red from (c) \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-imJ.tex b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-imJ.tex
new file mode 100644
index 0000000000..20335a33f2
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-imJ.tex
@@ -0,0 +1,32 @@
+\SseqNewFamily{imJ}
+\begin{sseqdata}[
+ name=ANSS-S_2, Adams grading,
+ class labels = {below}, label distance = -1pt,
+ class placement transform = {rotate = 90, scale = 2},
+ differentials = blue,
+ x range = {0}{9}, y range = {0}{4},
+ xscale = 0.7, grid = go
+]
+% Image of J classes
+\begin{scope}[imJ]
+\class[rectangle,fill,inner sep=3pt](0,0)
+\DoUntilOutOfBoundsThenNMore{3}{\etaclass}
+\classoptions["\alpha_1" above left](1,1)
+\class["\alpha_{2/2}", circlen = 2](3,1)
+\structline(0,0) \structline[dashed](3,3)
+\class["\alpha_3"](5,1) \d3\relax
+\DoUntilOutOfBounds{ \etaclass \d3 }
+\class["\alpha_{4/4}", rectangle, "16" {font = \tiny, inside}, inner sep = 1pt](7,1)
+\DoUntilOutOfBoundsThenNMore{3}{\etaclass}
+\end{scope}
+
+% Other classes
+\class["\beta_{2/2}" {below right=-4pt}, insert = 1](6,2)
+\structline(3,1)
+\class["\beta_{2}" left](8,2)
+\etaclass\structline(6,2,2) % This is a *nu
+\end{sseqdata}
+
+\printpage[ name = ANSS-S_2, title = with image of J, imJ style = purple]
+
+\printpage[ name = ANSS-S_2, no imJ, x range={2}{9}, title = without image of J] \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-insert.tex b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-insert.tex
new file mode 100644
index 0000000000..2784ca0d3c
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-insert.tex
@@ -0,0 +1,33 @@
+\DeclareSseqGroup \tower {} {
+ \class(0,0)
+ \DoUntilOutOfBounds {
+ \class(\lastx,\lasty+1)
+ \structline
+ }
+}
+
+\begin{sseqdata}[ name = insert-example, y range = {0}{4}, class pattern = linear ]
+\tower(0,2)
+\tower(0,3)
+\tower(0,1)
+\end{sseqdata}
+\qquad
+\begin{sseqpage}[ name = insert-example ]
+\tower[ red, classes = { insert = 1 } ](0,0)
+\end{sseqpage}
+\qquad
+\begin{sseqpage}[ name = insert-example ]
+\tower[ red, classes = { insert = 2 } ](0,0)
+\end{sseqpage}
+\qquad
+\begin{sseqpage}[ name = insert-example ]
+\tower[ red, classes = { insert = 3 } ](0,0)
+\end{sseqpage}
+\qquad
+\begin{sseqpage}[ name = insert-example ]
+\tower[ red, classes = { insert = -2 } ](0,0)
+\end{sseqpage}
+\qquad
+\begin{sseqpage}[ name = insert-example ]
+\tower[ red, classes = { insert = -3 } ](0,0)
+\end{sseqpage} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-tikz.tex b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-tikz.tex
new file mode 100644
index 0000000000..d12a0c0242
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/examples/spectralsequencesmanual-tikz.tex
@@ -0,0 +1,25 @@
+\begin{sseqdata}[ name = tikz example, Adams grading, math nodes = false,
+ tikz primitives = { blue, font = \tiny, <- }, circle classes = tikz primitive style,
+ x range = {0}{2}, x axis extend end = 2em ]
+\class(0,0)
+\class(1,0)
+\class(0,2)
+\d2(1,0)
+\end{sseqdata}
+%
+\begin{sseqpage}[ name = tikz example ]
+\circleclasses[ name path = myellipse, inner sep = 3pt, ellipse ratio = 1.6 ] (1,0) (0,2)
+\path[ name path = myline ] (1.3,1.25) -- (0.6,1);
+\draw[ name intersections = { of = myellipse and myline } ]
+ (intersection-1) to (1.3,1.25) node[ right, text width = 1.6cm ] {Consider this differential};
+\end{sseqpage} \qquad
+%
+\begin{sseqpage}[ name = tikz example ]
+\draw[ xshift = 1 ] (0,0) to (0.6,0.2) node[ right, text width = 1.1cm ] {This is the source};
+\draw[ yshift = 2 ] (0,0) to (0.6,0.2) node[ right, text width = 1.1cm ] {This is the target};
+\end{sseqpage} \qquad
+%
+\begin{sseqpage}[ page = 3, name = tikz example ]
+\circleclasses[ inner sep = 3pt, ellipse ratio = 1.6 ] (1,0)(0,2)
+\node[ right, font = \tiny ] at (1.2,1.2) {Now it's gone!};
+\end{sseqpage} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/pgfmanual-en-macros.tex b/graphics/pgf/contrib/spectralsequences/manual/pgfmanual-en-macros.tex
new file mode 100644
index 0000000000..ab7022b1e4
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/pgfmanual-en-macros.tex
@@ -0,0 +1,1762 @@
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+% $Header: /cvsroot/pgf/pgf/doc/generic/pgf/macros/pgfmanual-en-macros.tex,v 1.81 2014/03/20 10:07:44 tantau Exp $
+
+
+\providecommand\href[2]{\texttt{#1}}
+\providecommand\hypertarget[2]{\texttt{#1}}
+\providecommand\hyperlink[2]{\texttt{#1}}
+
+
+\colorlet{examplefill}{yellow!80!black}
+\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8}
+\definecolor{codebackground}{rgb}{0.9,0.9,1}
+
+\newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist}
+\newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt{\raggedright\item\strut{#1}\par}\topsep=0pt}
+\newcommand\pgfmanualbody{\parskip3pt}
+
+\let\origtexttt=\texttt
+\def\texttt#1{{\def\textunderscore{\char`\_}\def\textbraceleft{\char`\{}\def\textbraceright{\char`\}}\origtexttt{#1}}}
+\def\exclamationmarktext{!}
+\def\atmarktext{@}
+
+{
+ \catcode`\|=12
+ \gdef\pgfmanualnormalbar{|}
+ \catcode`\|=13
+ \AtBeginDocument{\gdef|{\ifmmode\pgfmanualnormalbar\else\expandafter\verb\expandafter|\fi}}
+}
+
+
+
+\newenvironment{pgflayout}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \texttt{\string\pgfpagesuselayout\char`\{\declare{#1}\char`\}}\oarg{options}%
+ }
+ \index{#1@\protect\texttt{#1} layout}%
+ \index{Page layouts!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{command}[1]{
+ \begin{pgfmanualentry}
+ \extractcommand#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\makeatletter
+
+\def\includeluadocumentationof#1{
+ \directlua{require 'pgf.manual.DocumentParser'}
+ \directlua{pgf.manual.DocumentParser.include '#1'}
+}
+
+\newenvironment{luageneric}[4]{
+ \pgfmanualentry
+ \pgfmanualentryheadline{#4 \texttt{#1\declare{#2}}#3}
+ \index{#2@\protect\texttt{#2} (Lua)}%
+ \def\temp{#1}
+ \ifx\temp\pgfutil@empty\else
+ \index{#1@\protect\texttt{#1}!#2@\protect\texttt{#2} (Lua)}%
+ \fi
+ \pgfmanualbody
+}{\endpgfmanualentry}
+
+\newenvironment{luatable}[3]{
+ \medskip
+ \luageneric{#1}{#2}{ (declared in \texttt{#3})}{\textbf{Lua table}}
+}{\endluageneric}
+
+\newenvironment{luafield}[1]{
+ \pgfmanualentry
+ \pgfmanualentryheadline{Field \texttt{\declare{#1}}}
+ \pgfmanualbody
+}{\endpgfmanualentry}
+
+
+\newenvironment{lualibrary}[1]{
+ \pgfmanualentry
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Graph Drawing Library} \texttt{\declare{#1}}%
+ }
+ \index{#1@\protect\texttt{#1} graph drawing library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \index{Graph drawing libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em
+ {\ttfamily\char`\\usegdlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX}\\
+ {\ttfamily\char`\\usegdlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}\smallskip\par
+ \pgfmanualbody
+}{\endpgfmanualentry}
+
+\newenvironment{luadeclare}[4]{
+ \pgfmanualentry
+ \def\manual@temp@default{#3}%
+ \def\manual@temp@initial{#4}%
+ \def\manual@temp@{#3#4}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily/graph
+ drawing/\declare{#1}\opt{=}}\opt{#2}\hfill%
+ \ifx\manual@temp@\pgfutil@empty\else%
+ (\ifx\manual@temp@default\pgfutil@empty\else%
+ default {\ttfamily #3}\ifx\manual@temp@initial\pgfutil@empty\else, \fi%
+ \fi%
+ \ifx\manual@temp@initial\pgfutil@empty\else%
+ initially {\ttfamily #4}%
+ \fi%
+ )\fi%
+ }%
+ \index{#1@\protect\texttt{#1} key}%
+ \pgfmanualbody
+ \gdef\myname{#1}%
+% \keyalias{tikz}
+% \keyalias{tikz/graphs}
+}{\endpgfmanualentry}
+
+\newenvironment{luadeclarestyle}[4]{
+ \pgfmanualentry
+ \def\manual@temp@para{#2}%
+ \def\manual@temp@default{#3}%
+ \def\manual@temp@initial{#4}%
+ \def\manual@temp@{#3#4}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily/graph drawing/\declare{#1}}\ifx\manual@temp@para\pgfutil@empty\else\opt{\texttt=}\opt{#2}\fi\hfill%
+ (style\ifx\manual@temp@\pgfutil@empty\else, %
+ \ifx\manual@temp@default\pgfutil@empty\else%
+ default {\ttfamily #3}\ifx\manual@temp@initial\pgfutil@empty\else, \fi%
+ \fi%
+ \ifx\manual@temp@initial\pgfutil@empty\else%
+ initially {\ttfamily #4}%
+ \fi%
+ \fi)%
+ }%
+ \index{#1@\protect\texttt{#1} key}%
+ \pgfmanualbody%
+ \gdef\myname{#1}%
+% \keyalias{tikz}
+% \keyalias{tikz/graphs}
+}{\endpgfmanualentry}
+
+\newenvironment{luanamespace}[2]{
+ \luageneric{#1}{#2}{}{\textbf{Lua namespace}}
+}{\endluageneric}
+
+\newenvironment{luafiledescription}[1]{}{}
+
+\newenvironment{luacommand}[4]{
+ \hypertarget{pgf/lua/#1}{\luageneric{#2}{#3}{\texttt{(#4)}}{\texttt{function}}}
+}{\endluageneric}
+
+\newenvironment{luaparameters}{\par\emph{Parameters:}%
+ \parametercount=0\relax%
+ \let\item=\parameteritem%
+ \let\list=\restorelist%
+}
+{\par
+}
+
+\newenvironment{luareturns}{\par\emph{Returns:}%
+ \parametercount=0\relax%
+ \let\item=\parameteritem%
+ \let\list=\restorelist%
+}
+{\par
+}
+
+\newcount\parametercount
+
+\newenvironment{parameterdescription}{\unskip%
+ \parametercount=0\relax%
+ \let\item=\parameteritem%
+ \let\list=\restorelist%
+}
+{\par
+}
+\let\saveditemcommand=\item
+\let\savedlistcommand=\list
+\def\denselist#1#2{\savedlistcommand{#1}{#2}\parskip0pt\itemsep0pt}
+\def\restorelist{\let\item=\saveditemcommand\denselist}
+\def\parameteritem{\pgfutil@ifnextchar[\parameteritem@{}}%}
+\def\parameteritem@[#1]{\advance\parametercount by1\relax\hskip0.15em plus 1em\emph{\the\parametercount.}\kern1ex\def\test{#1}\ifx\test\pgfutil@empty\else#1\kern.5em\fi}
+
+\makeatother
+\newenvironment{commandlist}[1]{%
+ \begin{pgfmanualentry}
+ \foreach \xx in {#1} {%
+ \expandafter\extractcommand\xx\@@
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+\makeatletter
+
+% \begin{internallist}[register]{\pgf@xa}
+% \end{internallist}
+%
+% \begin{internallist}[register]{\pgf@xa,\pgf@xb}
+% \end{internallist}
+\newenvironment{internallist}[2][register]{%
+ \begin{pgfmanualentry}
+ \foreach \xx in {#2} {%
+ \expandafter\extractinternalcommand\expandafter{\xx}{#1}%
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+\def\extractinternalcommand#1#2{%
+ \removeats{#1}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+ Internal #2 \declare{\texttt{\string#1}}}%
+ \index{Internals!\strippedat @\protect\myprintocmmand{\strippedat}}%
+ \index{\strippedat @\protect\myprintocmmand{\strippedat}}%
+}
+
+%% MW: START MATH MACROS
+\def\mvar#1{{\ifmmode\textrm{\textit{#1}}\else\rmfamily\textit{#1}\fi}}
+
+\makeatletter
+
+\def\extractmathfunctionname#1{\extractmathfunctionname@#1(,)\tmpa\tmpb}
+\def\extractmathfunctionname@#1(#2)#3\tmpb{\def\mathname{#1}}
+
+\makeatother
+
+\newenvironment{math-function}[1]{
+ \def\mathdefaultname{#1}
+ \extractmathfunctionname{#1}
+ \edef\mathurl{{math:\mathname}}\expandafter\hypertarget\expandafter{\mathurl}{}%
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\texttt{#1}}%
+ \index{\mathname @\protect\texttt{\mathname} math function}%
+ \index{Math functions!\mathname @\protect\texttt{\mathname}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\pgfmanualemptytext{}
+\def\pgfmanualvbarvbar{\char`\|\char`\|}
+
+\newenvironment{math-operator}[4][]{%
+ \begin{pgfmanualentry}
+ \csname math#3operator\endcsname{#2}{#4}
+ \def\mathtest{#4}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \def\mathtype{(#3 operator)}
+ \else%
+ \def\mathtype{(#3 operator; uses the \texttt{#4} function)}
+ \fi%
+ \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
+ \def\mathtest{#1}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \index{#2@\protect\texttt{#2} #3 math operator}%
+ \index{Math operators!#2@\protect\texttt{#2}}%
+ \fi%
+ \pgfmanualbody
+}
+{\end{pgfmanualentry}}
+
+\newenvironment{math-operators}[5][]{%
+ \begin{pgfmanualentry}
+ \csname math#4operator\endcsname{#2}{#3}
+ \def\mathtest{#5}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \def\mathtype{(#4 operators)}
+ \else%
+ \def\mathtype{(#4 operators; use the \texttt{#5} function)}
+ \fi%
+ \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
+ \def\mathtest{#1}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \index{#2#3@\protect\texttt{#2\protect\ #3} #4 math operators}%
+ \index{Math operators!#2#3@\protect\texttt{#2\protect\ #3}}%
+ \fi%
+ \pgfmanualbody
+}
+{\end{pgfmanualentry}}
+
+\def\mathinfixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}%
+ \def\mathexample{\mvar{x}\space\texttt{#1}\space\mvar{y}}%
+}
+
+\def\mathprefixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}%
+ \def\mathexample{\texttt{#1}\mvar{x}}%
+}
+
+\def\mathpostfixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}
+ \def\mathexample{\mvar{x}\texttt{#1}}%
+}
+
+\def\mathgroupoperator#1#2{%
+ \def\mathoperator{\texttt{#1\ #2}}%
+ \def\mathexample{\texttt{#1}\mvar{x}\texttt{#2}}%
+}
+
+\expandafter\let\csname matharray accessoperator\endcsname=\mathgroupoperator
+\expandafter\let\csname matharrayoperator\endcsname=\mathgroupoperator
+
+\def\mathconditionaloperator#1#2{%
+ \def\mathoperator{#1\space#2}
+ \def\mathexample{\mvar{x}\ \texttt{#1}\ \mvar{y}\ {\texttt{#2}}\ \mvar{z}}
+}
+
+\newcommand\mathcommand[1][\mathdefaultname]{%
+ \expandafter\makemathcommand#1(\empty)\stop%
+ \expandafter\extractcommand\mathcommandname\@@%
+ \medskip
+}
+\makeatletter
+
+\def\makemathcommand#1(#2)#3\stop{%
+ \expandafter\def\expandafter\mathcommandname\expandafter{\csname pgfmath#1\endcsname}%
+ \ifx#2\empty%
+ \else%
+ \@makemathcommand#2,\stop,
+ \fi}
+\def\@makemathcommand#1,{%
+ \ifx#1\stop%
+ \else%
+ \expandafter\def\expandafter\mathcommandname\expandafter{\mathcommandname{\ttfamily\char`\{#1\char`\}}}%
+ \expandafter\@makemathcommand%
+ \fi}
+\makeatother
+
+\def\calcname{\textsc{calc}}
+
+\newenvironment{math-keyword}[1]{
+ \extracttikzmathkeyword#1@
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\texttt{\color{red}\mathname}\mathrest}%
+ \index{\mathname @\protect\texttt{\mathname} tikz math function}%
+ \index{TikZ math functions!\mathname @\protect\texttt{\mathname}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extracttikzmathkeyword#1#2@{%
+ \def\mathname{#1}%
+ \def\mathrest{#2}%
+}
+
+%% MW: END MATH MACROS
+
+
+\def\extractcommand#1#2\@@{%
+ \removeats{#1}%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+ \declare{\texttt{\string#1}}#2%
+ }%
+ \index{\strippedat @\protect\myprintocmmand{\strippedat}}
+}
+
+\def\luaextractcommand#1#2\relax{%
+ \declare{\texttt{\string#1}}#2\par%
+% \removeats{#1}%
+ % \index{\strippedat @\protect\myprintocmmand{\strippedat}}
+ % \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+}
+
+
+% \begin{environment}{{name}\marg{arguments}}
+\renewenvironment{environment}[1]{
+ \begin{pgfmanualentry}
+ \extractenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractenvironement#1#2\@@{%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily\char`\\begin\char`\{\declare{#1}\char`\}}#2%
+ }%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\end\char`\{\declare{#1}\char`\}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}
+}
+
+
+\newenvironment{plainenvironment}[1]{
+ \begin{pgfmanualentry}
+ \extractplainenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractplainenvironement#1#2\@@{%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\#1}}#2}%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\end#1}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}%
+}
+
+
+\newenvironment{contextenvironment}[1]{
+ \begin{pgfmanualentry}
+ \extractcontextenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractcontextenvironement#1#2\@@{%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\start#1}}#2}%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\stop#1}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}}
+
+
+\newenvironment{shape}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Shape} {\ttfamily\declare{#1}}%
+ }%
+ \index{#1@\protect\texttt{#1} shape}%
+ \index{Shapes!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{pictype}[2]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Pic type} {\ttfamily\declare{#1}#2}%
+ }%
+ \index{#1@\protect\texttt{#1} pic type}%
+ \index{Pic Types!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{shading}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Shading} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} shading}%
+ \index{Shadings!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{graph}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Graph} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} graph}%
+ \index{Graphs!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{gdalgorithm}[2]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Layout} {\ttfamily/graph drawing/\declare{#1}\opt{=}}\opt{\meta{options}}}%
+ \index{#1@\protect\texttt{#1} layout}%
+ \index{Layouts!#1@\protect\texttt{#1}}%
+ \foreach \algo in {#2}
+ {\edef\marshal{\noexpand\index{#2@\noexpand\protect\noexpand\texttt{#2} algorithm}}\marshal}%
+ \index{Graph drawing layouts!#1@\protect\texttt{#1}}
+ \item{\small alias {\ttfamily/tikz/#1}}\par
+ \item{\small alias {\ttfamily/tikz/graphs/#1}}\par
+ \item{\small Employs {\ttfamily algorithm=#2}}\par
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{dataformat}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Format} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} format}%
+ \index{Formats!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{stylesheet}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Style sheet} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} style sheet}%
+ \index{Style sheets!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{handler}[1]{
+ \begin{pgfmanualentry}
+ \extracthandler#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\gobble#1{}
+\def\extracthandler#1#2\@nil{%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{/handlers/#1}{}%
+ \textbf{Key handler} \meta{key}{\ttfamily/\declare{#1}}#2}%
+ \index{\gobble#1@\protect\texttt{#1} handler}%
+ \index{Key handlers!#1@\protect\texttt{#1}}
+}
+
+
+\makeatletter
+
+
+\newenvironment{stylekey}[1]{
+ \begin{pgfmanualentry}
+ \def\extrakeytext{style, }
+ \extractkey#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\choicesep{$\vert$}%
+\def\choicearg#1{\texttt{#1}}
+
+\newif\iffirstchoice
+
+% \mchoice{choice1,choice2,choice3}
+\newcommand\mchoice[1]{%
+ \begingroup
+ \firstchoicetrue
+ \foreach \mchoice@ in {#1} {%
+ \iffirstchoice
+ \global\firstchoicefalse
+ \else
+ \choicesep
+ \fi
+ \choicearg{\mchoice@}%
+ }%
+ \endgroup
+}%
+
+% \begin{key}{/path/x=value}
+% \begin{key}{/path/x=value (initially XXX)}
+% \begin{key}{/path/x=value (default XXX)}
+\newenvironment{key}[1]{
+ \begin{pgfmanualentry}
+ \def\extrakeytext{}
+ %\def\altpath{\emph{\color{gray}or}}%
+ \extractkey#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+% \insertpathifneeded{a key}{/pgf} -> assign mykey={/pgf/a key}
+% \insertpathifneeded{/tikz/a key}{/pgf} -> assign mykey={/tikz/a key}
+%
+% #1: the key
+% #2: a default path (or empty)
+\def\insertpathifneeded#1#2{%
+ \def\insertpathifneeded@@{#2}%
+ \ifx\insertpathifneeded@@\empty
+ \def\mykey{#1}%
+ \else
+ \insertpathifneeded@#2\@nil
+ \ifpgfutil@in@
+ \def\mykey{#2/#1}%
+ \else
+ \def\mykey{#1}%
+ \fi
+ \fi
+}%
+\def\insertpathifneeded@#1#2\@nil{%
+ \def\insertpathifneeded@@{#1}%
+ \def\insertpathifneeded@@@{/}%
+ \ifx\insertpathifneeded@@\insertpathifneeded@@@
+ \pgfutil@in@true
+ \else
+ \pgfutil@in@false
+ \fi
+}%
+
+% \begin{keylist}[default path]
+% {/path/option 1=value,/path/option 2=value2}
+% \end{keylist}
+\newenvironment{keylist}[2][]{%
+ \begin{pgfmanualentry}
+ \def\extrakeytext{}%
+ \foreach \xx in {#2} {%
+ \expandafter\insertpathifneeded\expandafter{\xx}{#1}%
+ \expandafter\extractkey\mykey\@nil%
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+
+\def\extractkey#1\@nil{%
+ \pgfutil@in@={#1}%
+ \ifpgfutil@in@%
+ \extractkeyequal#1\@nil
+ \else%
+ \pgfutil@in@{(initial}{#1}%
+ \ifpgfutil@in@%
+ \extractequalinitial#1\@nil%
+ \else
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}}\hfill(\extrakeytext no value)}%
+ \fi
+ \fi%
+}
+
+\def\extractkeyequal#1=#2\@nil{%
+ \pgfutil@in@{(default}{#2}%
+ \ifpgfutil@in@%
+ \extractdefault{#1}#2\@nil%
+ \else%
+ \pgfutil@in@{(initial}{#2}%
+ \ifpgfutil@in@%
+ \extractinitial{#1}#2\@nil%
+ \else
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}=}#2\hfill(\extrakeytext no default)}%
+ \fi%
+ \fi%
+}
+
+\def\extractdefault#1#2(default #3)\@nil{%
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}\opt{=}}\opt{#2}\hfill (\extrakeytext default {\ttfamily#3})}%
+}
+
+\def\extractinitial#1#2(initially #3)\@nil{%
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}=}#2\hfill (\extrakeytext no default, initially {\ttfamily#3})}%
+}
+
+\def\extractequalinitial#1 (initially #2)\@nil{%
+ \pgfmanualentryheadline{%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \gdef\myname{}%
+ \firsttimetrue%
+ \pgfmanualdecomposecount=0\relax%
+ \decompose#1/\nil%
+ {\ttfamily\declare{#1}}\hfill (\extrakeytext initially {\ttfamily#2})}%
+}
+
+% Introduces a key alias '/#1/<name of current key>'
+% to be used inside of \begin{key} ... \end{key}
+\def\keyalias#1{\vspace{-3pt}\item{\small alias {\ttfamily/#1/\myname}}\vspace{-2pt}\par
+ \pgfmanualpdflabel{/#1/\myname}{}%
+}
+
+\newif\iffirsttime
+\newcount\pgfmanualdecomposecount
+
+\makeatother
+
+\def\decompose/#1/#2\nil{%
+ \def\test{#2}%
+ \ifx\test\empty%
+ % aha.
+ \index{#1@\protect\texttt{#1} key}%
+ \index{\mypath#1@\protect\texttt{#1}}%
+ \gdef\myname{#1}%
+ \pgfmanualpdflabel{#1}{}
+ \else%
+ \advance\pgfmanualdecomposecount by1\relax%
+ \ifnum\pgfmanualdecomposecount>2\relax%
+ \decomposetoodeep#1/#2\nil%
+ \else%
+ \iffirsttime%
+ \begingroup%
+ % also make a pdf link anchor with full key path.
+ \def\hyperlabelwithoutslash##1/\nil{%
+ \pgfmanualpdflabel{##1}{}%
+ }%
+ \hyperlabelwithoutslash/#1/#2\nil%
+ \endgroup%
+ \def\mypath{#1@\protect\texttt{/#1/}!}%
+ \firsttimefalse%
+ \else%
+ \expandafter\def\expandafter\mypath\expandafter{\mypath#1@\protect\texttt{#1/}!}%
+ \fi%
+ \def\firsttime{}%
+ \decompose/#2\nil%
+ \fi%
+ \fi%
+}
+
+\def\decomposetoodeep#1/#2/\nil{%
+ % avoid too-deep nesting in index
+ \index{#1/#2@\protect\texttt{#1/#2} key}%
+ \index{\mypath#1/#2@\protect\texttt{#1/#2}}%
+ \decomposefindlast/#1/#2/\nil%
+}
+\makeatletter
+\def\decomposefindlast/#1/#2\nil{%
+ \def\test{#2}%
+ \ifx\test\pgfutil@empty%
+ \gdef\myname{#1}%
+ \else%
+ \decomposefindlast/#2\nil%
+ \fi%
+}
+\makeatother
+\def\indexkey#1{%
+ \def\mypath{}%
+ \decompose#1/\nil%
+}
+
+\newenvironment{predefinedmethod}[1]{
+ \begin{pgfmanualentry}
+ \extractpredefinedmethod#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractpredefinedmethod#1(#2)\@nil{%
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Method \declare{\ttfamily #1}\texttt(#2\texttt) \hfill(predefined for all classes)}
+ \index{#1@\protect\texttt{#1} method}%
+ \index{Methods!#1@\protect\texttt{#1}}
+}
+
+
+\newenvironment{ooclass}[1]{
+ \begin{pgfmanualentry}
+ \def\currentclass{#1}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Class} \declare{\texttt{#1}}}
+ \index{#1@\protect\texttt{#1} class}%
+ \index{Class #1@Class \protect\texttt{#1}}%
+ \index{Classes!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{method}[1]{
+ \begin{pgfmanualentry}
+ \extractmethod#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractmethod#1(#2)\@nil{%
+ \def\test{#1}
+ \ifx\test\currentclass
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Constructor \declare{\ttfamily #1}\texttt(#2\texttt)}
+ \else
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Method \declare{\ttfamily #1}\texttt(#2\texttt)}
+ \fi
+ \index{#1@\protect\texttt{#1} method}%
+ \index{Methods!#1@\protect\texttt{#1}}
+ \index{Class \currentclass!#1@\protect\texttt{#1}}%
+}
+
+\newenvironment{attribute}[1]{
+ \begin{pgfmanualentry}
+ \extractattribute#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractattribute#1=#2;\@nil{%
+ \def\test{#2}%
+ \ifx\test\@empty
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Private attribute \declare{\ttfamily #1} \hfill (initially empty)}
+ \else
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ Private attribute \declare{\ttfamily #1} \hfill (initially {\ttfamily #2})}
+ \fi
+ \index{#1@\protect\texttt{#1} attribute}%
+ \index{Attributes!#1@\protect\texttt{#1}}
+ \index{Class \currentclass!#1@\protect\texttt{#1}}%
+}
+
+
+
+\newenvironment{predefinednode}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Predefined node} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} node}%
+ \index{Predefined node!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{coordinatesystem}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{Coordinate system} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} coordinate system}%
+ \index{Coordinate systems!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{snake}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Snake} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} snake}%
+ \index{Snakes!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{decoration}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Decoration} {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} decoration}%
+ \index{Decorations!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\def\pgfmanualbar{\char`\|}
+\makeatletter
+\newenvironment{pathoperation}[3][]{
+ \begin{pgfmanualentry}
+ \def\pgfmanualtest{#1}%
+ \pgfmanualentryheadline{%
+ \ifx\pgfmanualtest\@empty%
+ \pgfmanualpdflabel{#2}{}%
+ \fi%
+ \textcolor{gray}{{\ttfamily\char`\\path}\
+ \ \dots}
+ \declare{\texttt{\noligs{#2}}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
+ \ifx\pgfmanualtest\@empty%
+ \index{#2@\protect\texttt{#2} path operation}%
+ \index{Path operations!#2@\protect\texttt{#2}}%
+ \fi%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\newenvironment{datavisualizationoperation}[3][]{
+ \begin{pgfmanualentry}
+ \def\pgfmanualtest{#1}%
+ \pgfmanualentryheadline{%
+ \ifx\pgfmanualtest\@empty%
+ \pgfmanualpdflabel{#2}{}%
+ \fi%
+ \textcolor{gray}{{\ttfamily\char`\\datavisualization}\
+ \ \dots}
+ \declare{\texttt{\noligs{#2}}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
+ \ifx\pgfmanualtest\@empty%
+ \index{#2@\protect\texttt{#2} (data visualization)}%
+ \index{Data visualization!#2@\protect\texttt{#2}}%
+ \fi%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\makeatother
+
+\def\doublebs{\texttt{\char`\\\char`\\}}
+
+
+\newenvironment{package}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily\char`\\usepackage\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX}}
+ \index{#1@\protect\texttt{#1} package}%
+ \index{Packages and files!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\input \declare{#1}.tex\space\space\space \char`\%\space\space plain \TeX}}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usemodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{pgfmodule}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ {\ttfamily\char`\\usepgfmodule\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}}
+ \index{#1@\protect\texttt{#1} module}%
+ \index{Modules!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{pgflibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{\tikzname\ Library} \texttt{\declare{#1}}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em%
+ {{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}}\\
+ {{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}}\\
+ {{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space when using \tikzname}}\\
+ {{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space
+ \char`\%\space\space Con\TeX t\space when using \tikzname}}\\[.5em]
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{purepgflibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{{\small PGF} Library} \texttt{\declare{#1}}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em%
+ {{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX}}\\
+ {{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space Con\TeX t}}\\[.5em]
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{tikzlibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{%
+ \pgfmanualpdflabel{#1}{}%
+ \textbf{\tikzname\ Library} \texttt{\declare{#1}}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \vskip.25em%
+ {{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX}}\\
+ {{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}}\\[.5em]
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+
+\newenvironment{filedescription}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{File {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} file}%
+ \index{Packages and files!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{packageoption}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepackage[\declare{#1}]\char`\{pgf\char`\}}}
+ \index{#1@\protect\texttt{#1} package option}%
+ \index{Package options for \textsc{pgf}!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+
+\newcommand\opt[1]{{\color{black!50!green}#1}}
+\newcommand\ooarg[1]{{\ttfamily[}\meta{#1}{\ttfamily]}}
+
+\def\opt{\afterassignment\pgfmanualopt\let\next=}
+\def\pgfmanualopt{\ifx\next\bgroup\bgroup\color{black!50!green}\else{\color{black!50!green}\next}\fi}
+
+
+
+\def\beamer{\textsc{beamer}}
+\def\pdf{\textsc{pdf}}
+\def\eps{\texttt{eps}}
+\def\pgfname{\textsc{pgf}}
+\def\tikzname{Ti\emph{k}Z}
+\def\pstricks{\textsc{pstricks}}
+\def\prosper{\textsc{prosper}}
+\def\seminar{\textsc{seminar}}
+\def\texpower{\textsc{texpower}}
+\def\foils{\textsc{foils}}
+
+{
+ \makeatletter
+ \global\let\myempty=\@empty
+ \global\let\mygobble=\@gobble
+ \catcode`\@=12
+ \gdef\getridofats#1@#2\relax{%
+ \def\getridtest{#2}%
+ \ifx\getridtest\myempty%
+ \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1}
+ \else%
+ \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1\protect\printanat}
+ \getridofats#2\relax%
+ \fi%
+ }
+
+ \gdef\removeats#1{%
+ \let\strippedat\myempty%
+ \edef\strippedtext{\stripcommand#1}%
+ \expandafter\getridofats\strippedtext @\relax%
+ }
+
+ \gdef\stripcommand#1{\expandafter\mygobble\string#1}
+}
+
+\def\printanat{\char`\@}
+
+\def\declare{\afterassignment\pgfmanualdeclare\let\next=}
+\def\pgfmanualdeclare{\ifx\next\bgroup\bgroup\color{red!75!black}\else{\color{red!75!black}\next}\fi}
+
+
+\let\textoken=\command
+\let\endtextoken=\endcommand
+
+\def\myprintocmmand#1{\texttt{\char`\\#1}}
+
+\def\example{\par\smallskip\noindent\textit{Example: }}
+\def\themeauthor{\par\smallskip\noindent\textit{Theme author: }}
+
+
+\def\indexoption#1{%
+ \index{#1@\protect\texttt{#1} option}%
+ \index{Graphic options and styles!#1@\protect\texttt{#1}}%
+}
+
+\def\itemcalendaroption#1{\item \declare{\texttt{#1}}%
+ \index{#1@\protect\texttt{#1} date test}%
+ \index{Date tests!#1@\protect\texttt{#1}}%
+}
+
+
+
+\def\class#1{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}%
+\extractclass#1@\par\topsep=0pt}
+\def\endclass{\endlist}
+\def\extractclass#1#2@{%
+\item{{{\ttfamily\char`\\documentclass}#2{\ttfamily\char`\{\declare{#1}\char`\}}}}%
+ \index{#1@\protect\texttt{#1} class}%
+ \index{Classes!#1@\protect\texttt{#1}}}
+
+\def\partname{Part}
+
+\makeatletter
+\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index}
+ This index only contains automatically generated entries. A good
+ index should also contain carefully selected keywords. This index is
+ not a good index.
+ \bigskip
+}
+\c@IndexColumns=2
+ \def\theindex{\@restonecoltrue
+ \columnseprule \z@ \columnsep 29\p@
+ \twocolumn[\index@prologue]%
+ \parindent -30pt
+ \columnsep 15pt
+ \parskip 0pt plus 1pt
+ \leftskip 30pt
+ \rightskip 0pt plus 2cm
+ \small
+ \def\@idxitem{\par}%
+ \let\item\@idxitem \ignorespaces}
+ \def\endtheindex{\onecolumn}
+\def\noindexing{\let\index=\@gobble}
+
+
+\newenvironment{arrowtipsimple}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Arrow Tip Kind} {\ttfamily#1}}
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \def\currentarrowtype{#1}
+ \pgfmanualbody}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{arrowtip}[4]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Arrow Tip Kind} {\ttfamily#1}}
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+ \def\currentarrowtype{#1}
+ \begin{minipage}[t]{10.25cm}
+ #2
+ \end{minipage}\hskip5mm\begin{minipage}[t]{4.75cm}
+ \leavevmode\vskip-2em
+ \tikz{
+ \draw [black!50,line width=5mm,-{#1[#3,color=black]}] (-4,0) -- (0,0);
+ \foreach \action in {#4}
+ { \expandafter\processaction\action\relax }
+ }
+ \end{minipage}\par\smallskip
+ }
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{arrowcap}[5]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textbf{Arrow Tip Kind} {\ttfamily#1}}
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+ \def\currentarrowtype{#1}
+ \begin{minipage}[t]{10.25cm}
+ #2
+ \end{minipage}\hskip5mm\begin{minipage}[t]{4.75cm}
+ \leavevmode\vskip-2em
+ \tikz{
+ \path [tips, line width=10mm,-{#1[#3,color=black]}] (-4,0) -- (0,0);
+ \draw [line width=10mm,black!50] (-3,0) -- (#5,0);
+ \foreach \action in {#4}
+ { \expandafter\processaction\action\relax }
+ }
+ \end{minipage}\par\smallskip
+ }
+{
+ \end{pgfmanualentry}
+}
+
+\def\processaction#1=#2\relax{
+ \expandafter\let\expandafter\pgf@temp\csname manual@action@#1\endcsname
+ \ifx\pgf@temp\relax\else
+ \pgf@temp#2/0/\relax
+ \fi
+}
+\def\manual@action@length#1/#2/#3\relax{%
+ \draw [red,|<->|,semithick,xshift=#2] ([yshift=4pt]current bounding
+ box.north -| -#1,0) coordinate (last length) -- node
+ [above=-2pt] {|length|} ++(#1,0);
+}
+\def\manual@action@width#1/#2/#3\relax{%
+ \draw [overlay, red,|<->|,semithick] (.5,-#1/2) -- node [below,sloped] {|width|} (.5,#1/2);
+}
+\def\manual@action@inset#1/#2/#3\relax{%
+ \draw [red,|<->|,semithick,xshift=#2] ([yshift=-4pt]current bounding
+ box.south -| last length) -- node [below] {|inset|} ++(#1,0);
+}
+
+\newenvironment{arrowexamples}
+{\begin{tabbing}
+ \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \=
+ \hbox to 1.9cm{\emph{0.4pt}\hfil} \= \hbox to 2cm{\emph{0.8pt}\hfil} \= \emph{1.6pt} \\
+ }
+{\end{tabbing}\vskip-1em}
+
+\newenvironment{arrowcapexamples}
+{\begin{tabbing}
+ \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \=
+ \hbox to 1.9cm{\emph{1ex}\hfil} \= \hbox to 2cm{\emph{1em}\hfil} \\
+ }
+{\end{tabbing}\vskip-1em}
+
+\def\arrowcapexample#1[#2]{\def\temp{#1}\ifx\temp\pgfutil@empty\arrowcapexample@\currentarrowtype[{#2}]\else\arrowcapexample@#1[{#2}]\fi}
+\def\arrowcapexample@#1[#2]{%
+ {\sfcode`\.1000\small\texttt{#1[#2]}} \>
+ \kern-.5ex\tikz [baseline,>={#1[#2]}] \draw [line
+ width=1ex,->] (0,.5ex) -- (2em,.5ex); \>
+ \kern-.5em\tikz [baseline,>={#1[#2]}] \draw [line
+ width=1em,->] (0,.5ex) -- (2em,.5ex); \\
+}
+
+\def\arrowexample#1[#2]{\def\temp{#1}\ifx\temp\pgfutil@empty\arrowexample@\currentarrowtype[{#2}]\else\arrowexample@#1[{#2}]\fi}
+\def\arrowexample@#1[#2]{%
+ {\sfcode`\.1000\small\texttt{#1[#2]}} \>
+ \tikz [baseline,>={#1[#2]}] \draw [line
+ width=0.4pt,->] (0,.5ex) -- (2em,.5ex); thin \>
+ \tikz [baseline,>={#1[#2]}] \draw [line
+ width=0.8pt,->] (0,.5ex) -- (2em,.5ex); \textbf{thick} \>
+ \tikz [baseline,>={#1[#2]}] \draw [line
+ width=1.6pt,->] (0,.5ex) -- (3em,.5ex); \\
+}
+\def\arrowexampledup[#1]{\arrowexample[{#1] \currentarrowtype[}]}
+\def\arrowexampledupdot[#1]{\arrowexample[{#1] . \currentarrowtype[}]}
+
+\def\arrowexampledouble#1[#2]{\def\temp{#1}\ifx\temp\pgfutil@empty\arrowexampledouble@\currentarrowtype[{#2}]\else\arrowexampledouble@#1[{#2}]\fi}
+\def\arrowexampledouble@#1[#2]{%
+ {\sfcode`\.1000\small\texttt{#1[#2]} on double line} \>
+ \tikz [baseline,>={#1[#2]}]
+ \draw [double equal sign distance,line width=0.4pt,->] (0,.5ex) -- (2em,.5ex); thin \>
+ \tikz [baseline,>={#1[#2]}]
+ \draw [double equal sign distance,line width=0.8pt,->] (0,.5ex) -- (2em,.5ex); \textbf{thick} \>
+ \tikz [baseline,>={#1[#2]}]
+ \draw [double equal sign distance, line width=1.6pt,->] (0,.5ex) -- (3em,.5ex); \\
+}
+
+
+
+\newcommand\symarrow[1]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \texttt{#1}& yields thick
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+\newcommand\symarrowdouble[1]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \texttt{#1}& yields thick
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+ and thin
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}, double
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\sarrow[2]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \index{#2@\protect\texttt{#2} arrow tip}%
+ \index{Arrow tips!#2@\protect\texttt{#2}}%
+ \texttt{#1-#2}& yields thick
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\sarrowdouble[2]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \index{#2@\protect\texttt{#2} arrow tip}%
+ \index{Arrow tips!#2@\protect\texttt{#2}}%
+ \texttt{#1-#2}& yields thick
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}, double
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
+ \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\carrow[1]{%
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}%
+ \texttt{#1}& yields for line width 1ex
+ \begin{tikzpicture}[arrows={#1-#1},line width=1ex,baseline]
+ \useasboundingbox (-1mm,-0.5ex) rectangle (1.6cm,2ex);
+ \fill [black!15] (1.5cm,-.5ex) rectangle (1.6cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
+ \draw (0pt,.5ex) -- (1.5cm,.5ex);
+ \end{tikzpicture}
+}
+\def\myvbar{\char`\|}
+\newcommand\plotmarkentry[1]{%
+ \index{#1@\protect\texttt{#1} plot mark}%
+ \index{Plot marks!#1@\protect\texttt{#1}}
+ \texttt{\char`\\pgfuseplotmark\char`\{\declare{\noligs{#1}}\char`\}} &
+ \tikz\draw[color=black!25] plot[mark=#1,mark options={fill=examplefill,draw=black}] coordinates{(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
+}
+\newcommand\plotmarkentrytikz[1]{%
+ \index{#1@\protect\texttt{#1} plot mark}%
+ \index{Plot marks!#1@\protect\texttt{#1}}
+ \texttt{mark=\declare{\noligs{#1}}} & \tikz\draw[color=black!25]
+ plot[mark=#1,mark options={fill=examplefill,draw=black}]
+ coordinates {(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
+}
+
+
+
+\ifx\scantokens\@undefined
+ \PackageError{pgfmanual-macros}{You need to use extended latex
+ (elatex) or (pdfelatex) to process this document}{}
+\fi
+
+\begingroup
+\catcode`|=0
+\catcode`[= 1
+\catcode`]=2
+\catcode`\{=12
+\catcode `\}=12
+\catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]]
+|endgroup
+
+% define \returntospace.
+%
+% It should define NEWLINE as {}, spaces and tabs as \space.
+\begingroup
+\catcode`\^=7
+\catcode`\^^M=13
+\catcode`\^^I=13
+\catcode`\ =13%
+\gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^I=13\def^^I{\space}}
+\gdef\showreturn{\show^^M}
+\endgroup
+
+\begingroup
+\catcode`\%=13
+\catcode`\^^M=13
+\gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}}
+\gdef\@gobble@till@return#1^^M{}
+\gdef\@gobble@till@return@ignore#1^^M{\ignorespaces}
+\gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}}
+\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par}
+\endgroup
+
+% Define tab-implementation functions
+% \codeexample@tabinit@replacementchars@
+% and
+% \codeexample@tabinit@catcode@
+%
+% They should ONLY be used in case that tab replacement is active.
+%
+% This here is merely a preparation step.
+%
+% Idea:
+% \codeexample@tabinit@catcode@ will make TAB active
+% and
+% \codeexample@tabinit@replacementchars@ will insert as many spaces as
+% /codeexample/tabsize contains.
+{
+\catcode`\^^I=13
+% ATTENTION: do NOT use tabs in these definitions!!
+\gdef\codeexample@tabinit@replacementchars@{%
+ \begingroup
+ \count0=\pgfkeysvalueof{/codeexample/tabsize}\relax
+ \toks0={}%
+ \loop
+ \ifnum\count0>0
+ \advance\count0 by-1
+ \toks0=\expandafter{\the\toks0\ }%
+ \repeat
+ \xdef\codeexample@tabinit@replacementchars@@{\the\toks0}%
+ \endgroup
+ \let^^I=\codeexample@tabinit@replacementchars@@
+}%
+\gdef\codeexample@tabinit@catcode@{\catcode`\^^I=13}%
+}%
+
+% Called after any options have been set. It assigns
+% \codeexample@tabinit@catcode
+% and
+% \codeexample@tabinit@replacementchars
+% which are used inside of
+%\begin{codeexample}
+% ...
+%\end{codeexample}
+%
+% \codeexample@tabinit@catcode is either \relax or it makes tab
+% active.
+%
+% \codeexample@tabinit@replacementchars is either \relax or it inserts
+% a proper replacement sequence for tabs (as many spaces as
+% configured)
+\def\codeexample@tabinit{%
+ \ifnum\pgfkeysvalueof{/codeexample/tabsize}=0\relax
+ \let\codeexample@tabinit@replacementchars=\relax
+ \let\codeexample@tabinit@catcode=\relax
+ \else
+ \let\codeexample@tabinit@catcode=\codeexample@tabinit@catcode@
+ \let\codeexample@tabinit@replacementchars=\codeexample@tabinit@replacementchars@
+ \fi
+}
+
+\newif\ifpgfmanualtikzsyntaxhilighting
+
+\pgfqkeys{/codeexample}{%
+ width/.code= {\setlength\codeexamplewidth{#1}},
+ graphic/.code= {\colorlet{graphicbackground}{#1}},
+ code/.code= {\colorlet{codebackground}{#1}},
+ execute code/.is if=code@execute,
+ code only/.code= {\code@executefalse},
+ pre/.store in=\code@pre,
+ post/.store in=\code@post,
+ % #1 is the *complete* environment contents as it shall be
+ % typeset. In particular, the catcodes are NOT the normal ones.
+ typeset listing/.code= {#1},
+ render instead/.store in=\code@render,
+ vbox/.code= {\def\code@pre{\vbox\bgroup\setlength{\hsize}{\linewidth-6pt}}\def\code@post{\egroup}},
+ ignorespaces/.code= {\let\@gobble@till@return=\@gobble@till@return@ignore},
+ leave comments/.code= {\def\code@catcode@hook{\catcode`\%=12}\let\commenthandler=\relax\let\typesetcomment=\relax},
+ tabsize/.initial=0,% FIXME : this here is merely used for indentation. It is just a TAB REPLACEMENT.
+ every codeexample/.style={width=4cm+7pt, tikz syntax=true},
+ from file/.code={\codeexamplefromfiletrue\def\codeexamplesource{#1}},
+ tikz syntax/.is if=pgfmanualtikzsyntaxhilighting,
+}
+
+
+\newread\examplesource
+
+
+% Opening, reading and closing the results file
+
+\def\opensource#1{
+ \immediate\openin\examplesource=#1
+}
+\def\do@codeexamplefromfile{%
+ \immediate\openin\examplesource\expandafter{\codeexamplesource}%
+ \def\examplelines{}%
+ \readexamplelines
+ \closein\examplesource
+ \expandafter\endofcodeexample\expandafter{\examplelines}%
+}
+
+\def\readexamplelines{
+ \ifeof\examplesource%
+ \else
+ \immediate\read\examplesource to \exampleline
+ \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\examplelines\expandafter\expandafter\expandafter{\expandafter\examplelines\exampleline}
+ \expandafter\readexamplelines%
+ \fi
+}
+
+\let\code@pre\pgfutil@empty
+\let\code@post\pgfutil@empty
+\let\code@render\pgfutil@empty
+\def\code@catcode@hook{}
+
+\newif\ifcodeexamplefromfile
+\newdimen\codeexamplewidth
+\newif\ifcode@execute
+\newbox\codeexamplebox
+\def\codeexample[#1]{%
+ \begingroup%
+ \code@executetrue
+ \pgfqkeys{/codeexample}{every codeexample,#1}%
+ \pgfmanualswitchoncolors%
+ \ifcodeexamplefromfile\begingroup\fi
+ \codeexample@tabinit% assigns \codeexample@tabinit@[catcode,replacementchars]
+ \parindent0pt
+ \begingroup%
+ \par%
+ \medskip%
+ \let\do\@makeother%
+ \dospecials%
+ \obeylines%
+ \@vobeyspaces%
+ \catcode`\%=13%
+ \catcode`\^^M=13%
+ \code@catcode@hook%
+ \codeexample@tabinit@catcode
+ \relax%
+ \ifcodeexamplefromfile%
+ \expandafter\do@codeexamplefromfile%
+ \else%
+ \expandafter\find@example%
+ \fi}
+\def\endofcodeexample#1{%
+ \endgroup%
+ \ifcode@execute%
+ \setbox\codeexamplebox=\hbox{%
+ \ifx\code@render\pgfutil@empty%
+ {%
+ {%
+ \returntospace%
+ \commenthandler%
+ \xdef\code@temp{#1}% removes returns and comments
+ }%
+ \catcode`\^^M=9%
+ \colorbox{graphicbackground}{\color{black}\ignorespaces%
+ \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}%
+ }%
+ \else%
+ \colorbox{graphicbackground}{\color{black}\ignorespaces%
+ \code@render}%
+ \fi%
+ }%
+ \ifdim\wd\codeexamplebox>\codeexamplewidth%
+ \def\code@start{\par}%
+ \def\code@flushstart{}\def\code@flushend{}%
+ \def\code@mid{\parskip2pt\par\noindent}%
+ \def\code@width{\linewidth-6pt}%
+ \def\code@end{}%
+ \else%
+ \def\code@start{%
+ \linewidth=\textwidth%
+ \parshape \@ne 0pt \linewidth
+ \leavevmode%
+ \hbox\bgroup}%
+ \def\code@flushstart{\hfill}%
+ \def\code@flushend{\hbox{}}%
+ \def\code@mid{\hskip6pt}%
+ \def\code@width{\linewidth-12pt-\codeexamplewidth}%
+ \def\code@end{\egroup}%
+ \fi%
+ \code@start%
+ \noindent%
+ \begin{minipage}[t]{\codeexamplewidth}\raggedright
+ \hrule width0pt%
+ \footnotesize\vskip-1em%
+ \code@flushstart\box\codeexamplebox\code@flushend%
+ \vskip-1ex
+ \leavevmode%
+ \end{minipage}%
+ \else%
+ \def\code@mid{\par}
+ \def\code@width{\linewidth-6pt}
+ \def\code@end{}
+ \fi%
+ \code@mid%
+ \colorbox{codebackground}{%
+ \pgfkeysvalueof{/codeexample/prettyprint/base color}%
+ \begin{minipage}[t]{\code@width}%
+ {%
+ \let\do\@makeother
+ \dospecials
+ \frenchspacing\@vobeyspaces
+ \normalfont\ttfamily\footnotesize
+ \typesetcomment%
+ \codeexample@tabinit@replacementchars
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi}%
+ \obeylines
+ \everypar \expandafter{\the\everypar \unpenalty}%
+ \pgfkeysvalueof{/codeexample/typeset listing/.@cmd}{#1}\pgfeov
+ }
+ \end{minipage}}%
+ \code@end%
+ \par%
+ \medskip
+ \endcodeexample\endgroup
+}
+
+\def\endcodeexample{\endgroup}
+
+
+\makeatother
+
+\usepackage{pgfmanual}
+
+
+% autoxref is now always on
+
+% \makeatletter
+% % \pgfautoxrefs will be defined by 'make dist'
+% \pgfutil@ifundefined{pgfautoxrefs}{%
+% \renewcommand\pgfmanualpdflabel[3][]{#3}% NO-OP
+% \def\pgfmanualpdfref#1#2{#2}%
+% \pgfkeys{
+% /pdflinks/codeexample links=false,% DISABLED.
+% }%
+% }{}
+% \makeatother
+
+\newdimen\pgfmanualcslinkpreskip
+
+% Styling of the pretty printer
+\pgfkeys{
+ /codeexample/syntax hilighting/.style={
+ /codeexample/prettyprint/key name/.code={\textcolor{keycolor}{\pgfmanualpdfref{##1}{\noligs{##1}}}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\textcolor{keycolor}{\pgfmanualpdfref{##1}{\noligs{##1}}}/\textcolor{blue!70!black}{\pgfmanualpdfref{/handlers/##2}{\noligs{##2}}}},
+ /codeexample/prettyprint/key value display only/.code={\textcolor{keycolor}{{\itshape{\let\pgfmanualwordstartup\relax\pgfmanualprettyprintcode{##1}}}}},
+ /codeexample/prettyprint/cs/.code={\textcolor{cscolor}{\pgfmanualcslinkpreskip4.25pt\pgfmanualpdfref{##1}{\noligs{##1}}}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\textcolor{black}{\pgfmanualcslinkpreskip4.25pt\pgfmanualpdfref{##1}{\noligs{##1}}}\{\textcolor{black}{\pgfmanualprettyprintcode{##2}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\textcolor{black}{\pgfmanualcslinkpreskip4.25pt\pgfmanualpdfref{##1}{\noligs{##1}}}\{\textcolor{black}{\pgfmanualprettyprintpgfkeys{##2}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={\textcolor{black}{##1}\{\textcolor{cscolor}{\pgfmanualpdfref{##2}{\noligs{##2}}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={\textcolor{black}{##1}\{\textcolor{cscolor}{\pgfmanualpdfref{##2}{\noligs{##2}}}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\pgfmanualwordstartup{\begingroup\pgfkeyssetvalue{/pdflinks/search key prefixes in}{}\pgfmanualpdfref{##1}{\noligs{##1}}\endgroup}},
+ /codeexample/prettyprint/point/.code={\textcolor{pointcolor}{\noligs{##1}}},%
+ /codeexample/prettyprint/point with cs/.code 2 args={\textcolor{pointcolor}{(\pgfmanualpdfref{##1}{\noligs{##1}}:\noligs{##2}}},%
+ /codeexample/prettyprint/comment font=\itshape,
+ /codeexample/prettyprint/base color/.initial=\color{basecolor},
+ /pdflinks/render hyperlink/.code={%
+ {\setbox0=\hbox{##1}%
+ \rlap{{\color{linkcolor}\dimen0\wd0\advance\dimen0by-\pgfmanualcslinkpreskip\hskip\pgfmanualcslinkpreskip\vrule width\dimen0 height-1pt depth1.6pt}}%
+ \box0%
+ }%
+ }
+ },/codeexample/syntax hilighting
+}
+
+\colorlet{keycolor}{black}
+\colorlet{cscolor}{black}
+\colorlet{pointcolor}{black}
+\colorlet{basecolor}{black}
+\colorlet{linkcolor}{black!8}
+
+\def\pgfmanualswitchoncolors{%
+ \colorlet{keycolor}{green!50!black}%
+ \colorlet{cscolor}{blue!70!black}
+ \colorlet{pointcolor}{violet}
+ \colorlet{basecolor}{black!55}
+ \colorlet{linkcolor}{white}
+}
+
+\makeatletter
+
+\def\pgfmanualwordstartup{\textcolor{black}}
+
+\def\noligs#1{\pgfmanualnoligs#1\kern0pt--\pgf@stop}%
+\def\pgfmanualnoligs#1--{%
+ \pgfutil@ifnextchar\pgf@stop{#1\pgfutil@gobble}{#1-\kern0pt-\kern0pt\pgfmanualnoligs}%
+}
+\makeatother
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "beameruserguide"
+%%% End:
diff --git a/graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.pdf b/graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.pdf
new file mode 100644
index 0000000000..054c2d2347
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.tex b/graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.tex
new file mode 100644
index 0000000000..ab2722bd55
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/spectralsequences-howitworks.tex
@@ -0,0 +1,121 @@
+\input spectralsequencesmanualpreamble
+
+\def\eatclnifpresent#1{#1}
+\def\pgfkeysname{pgfkeys}
+\def\file#1{\path{#1.code.tex}}
+\begin{document}
+\title{A brief overview of the \\ \sseqpages\ code}
+\author{Hood Chatham\\\mailtoHC}
+\maketitle
+\section{Introduction}
+The basic idea is comparable to a more elaborate version of \tikzcdpkg.
+We plan to draw multiple copies of a spectral sequence, so the commands are not issued inside of a picture environment.
+Instead, all information must be stored to draw later. The |\sseq@savedpaths| is responsible for storing the collection of objects of the spectral sequence.
+
+The user defines ``classes'' (which correspond roughly to generators of the spectral sequence $E_2$ / $E_1$ page).
+From the point of view of the programmer, a class is an object with a death page (either infinite or finite) signalling on which page it is the source or target of a differential
+and some pile of information on how to draw it. When the user calls the |\class| command, it makes a new class object with an appropriate name and stores the
+information to tell \spectralsequences\ how to draw the class later, and sets the page to be infinite. A macro informing spectralsequences about the class
+is added to |\sseq@savedpaths| so that it can be drawn later if appropriate.
+
+The |\d| command is similar -- we set the page of the source and target to be the current page and also the pages of any relevant structlines, store the page of the differential and the data needed to draw it, and add the differential to |\sseq@savedpaths|.
+
+The |\structline| command saves code to draw a line, and also figures out what page it should die on based on the smaller of the two death pages of the source and target. If the source and target haven't been killed yet, it hooks into them so that |\d| knows to set the page of this structline too.
+
+Now to draw a page of the spectral sequence, we start up a \tikzpictureenv\ environment, draw some axes,
+walk across |\sseq@savedpaths|, and for each class, we check whether the death page of the class is greater than or equal to the current page and if so we draw a corresponding
+pgf/tikz node. Similarly, we draw the differentials that lie on exactly the current page, and the subset of the structure lines with death page later than the current one.
+
+This is the core idea of the package. In addition to these core features are many important reusability features. For instance, we need a way to define reusable user macros that draw collections of classes and we need looping constructs.
+
+So, having heard this simple description, a reasonable question to ask is: why does it take in excess of 8000 lines of TeX code to accomplish these simple tasks? There are a few reasons. Firstly, the package handles a lot of use cases and has a quite a few different features and there is a large amount of intrinsic complexity to getting these things right. Another huge reason is that \TeX\ is a completely unreasonable coding environment. This is responsible for a good deal of the complexity in \file{sseqparsers}, for example.
+
+Perhaps the biggest single contributor to code complexity is performance. \tikzname\ is very robust, but it is not fast. \spectralsequences\ draws roughly cubically many classes in large diagrams, and my larger test examples have as many as 5,000 classes. If each class takes an extra millisecond to draw, that comes out to an extra five seconds of compilation time. Because of this, unless the performance critical drawing code is super optimized, the package will be way too slow on large diagrams. Most of the added complexity due to performance considerations is contained in \file{sseqdrawing}, but the hard parts of the key value code are all related to performance too.
+
+The last major source of complexity is the robust error handling code. Most \LaTeX\ packages have crappy error handling and result in inscrutable errors even in relatively reasonable use conditions. There are a two main reasons for this as far as I can tell: \LaTeX\ doesn't have good error handling tools and most people who write \LaTeX\ packages are not primarily programmers and have other priorities than ensuring that their packages have clean failure modes. The files \file{sseqmessages} and \file{sseqforeach} are entirely devoted to error handling, and almost all of the complexity of \file{sseqmacromakers} is tied up in error handling too.
+
+
+
+\section{Load Store}
+The file \file{sseqloadstore} defines two storage systems. The point of these systems is to ensure that unrelated spectral sequences do not interfere with each other. One system is faster and relatively storage intensive, and it is for macros that contain global information about the spectral sequence. These macros have default values which can be changed using |\sseqset|. The other system is for storing the data about the spectral sequence objects (classes, differentials, structlines, etc). This file is short and simple, but the seemingly innocuous features provided here lead to huge simplifications in much of the rest of the code.
+
+The first system works by making a list |\sseq@storelist| of the commands that need to be stored. It defines commands |\sseq@storecmds| and |\sseq@getcmds| which iterate over |\sseq@storelist| and copy each command between |\sseq@whatevercommand| and |\sseq@whatevercommand@@@\metatt{sseqname}|. Each command also has a default value stored in |\sseq@whatevercommand@@default|. This default can be changed by the user using |\sseqset| outside of a spectral sequence. There is also a command |\sseq@storelist@setdefaults| which loads the default values of all of the commands in |\sseq@storelist|. At the beginning of a \sseqdataenv\ or \sseqpageenv\ environment, if the spectral sequence is new then |\sseq@storelist@setdefaults| is run, and otherwise |\sseq@getcmds| is run. At the end of the \sseqdataenv\ environment, |\sseq@storecmds| is run.
+
+The second system basically is just semantic sugar for indexing into a command that has the name of the current spectral sequence inserted into it: the command |\sseq@obj{some name}| just expands to |\csname sseq.\sseq@thename.some name\endcsname|. This allows different spectral sequences to have different name spaces. A large number of commands to manipulate this are provided. All changes to objects are made global, so at the end of a \sseqpageenv\ environment, any changes that have been made must be reverted. The command |\sseq@cleanup@obj| checks if we are in a context where changes will have to be reverted, checks if an old value of the current object has been stored yet, and if neither of these are true, it adds reverting the current object to a ``cleanup'' command to be run at the end of the current environment.
+
+\section{Messages}
+The file \file{sseqmessages} defines the error handling code. It uses the delightful l3msg infrastructure which separates message content from the position the errors are triggered in and makes much more attractive error messages. One deficiency for my purposes in l3msg though is that it doesn't have very many hooks. My package knows a lot about the circumstances under which most errors trigger and wants to tell the user about this. The basic idea for this approach came from \tikzcdpkg. At the beginning of the \tikzcdenv\ environment, the |\errmessage| command is patched to add an annotation explaining what cell in the matrix the error occurred in. This is because \tikzcdenv\ has a two-pass algorithm, and so errors can occur far away from the code that triggered them.
+
+Anyways, I have a fairly complicated pile of extra information to add into the picture. Firstly, I reconstruct what the user said as closely as possible. This is done inside of \file{sseqmacromakers} and \file{sseqmain}. I also assemble a stack trace that indicates all loops and user macros and all loop variable values. I assemble all this context information and a little more, and then make an annotation message accordingly. All of the many cases here are handled using a pile of horrible spaghetti code.
+
+The annotation setup code is not expandable, so it cannot happen as the error is written to stderr. We need a setup hook before the error is triggered, we need a hook inside the body of the message, and we need a cleanup hook after the error is done to remove any local changes the setup code made. I make a copy of |\__msg_error_code:nnnnnn| and add these two hooks to the beginning and end. The annotation itself is prepended to |\__sseq_hooked_msg_see_documentation_text:n| which is conveniently located inside of the message text.
+
+The other interesting thing in this file is my code for handling |\end| mismatches. Because of the need for nested environment definitions, \LaTeX\ only checks that the environment being |\end|ed matches the current environment after running the |\end| code. However, the code for |\end{sseqpage}| tries to draw a picture, and drawing this picture depends on a large amount of state. If the current environment isn't \sseqpageenv, none of this state is actually present and so hundreds of incomprehensible low level errors happen before the check end code is run and \LaTeX\ gives the environment mismatch error. The fix for my package is to run my own checkend code, which is pretty simple. See my \href{https://tex.stackexchange.com/questions/378174/why-does-checkend-occur-after-running-endenvironment}{tex stack exchange question} for more details.
+
+\section{Loops}
+The file \file{sseqforeach} is responsible for defining looping constructs. It's mostly pretty simple. The first half defines |\DoUntilOutOfBounds|, which repeats some block of stack based code until the top of the stack is out of bounds. The most complicated part of this is the descent check -- it periodically checks that the top of the stack has moved towards the boundary of the page to prevent infinite loops.
+
+The other part of this file patches the |\foreach| command from \tikzname\ in order to make it inform \sseqpages\ what the user said for the foreach loop (as best as I can approximate) and what the loop variables are. This is for error messages -- the ``what the user said'' part will go into the stack trace, and the loop variables will be listed.
+
+
+\section{Macro Makers}
+The file \file{sseqmacromakers} defines commands to define commands. It is built on top of \xparsepkg\ but adds a large number of features specific to my package. Unfortunately, it depends on \xparsepkg\ internals and \xparsepkg\ is not yet stable. None of these dependencies are mission critical, but they significantly increase usability. I have attempted to make fallback code that will work even if incompatible \xparsepkg\ changes are made, but this is incomplete.
+
+Like \tikzname, \spectralsequences\ defines a bunch of commands that only make sense to use inside of certain environments. Thus, we define the command |\class| as |\sseq@class| and at the beginning of the \sseqdataenv\ or \sseqpageenv\ environments, we run a command |\sseq@installmacros| that does a bunch of things like |\let\class\sseq@class|. I want to use \xparsepkg\ to define |\sseq@class|, but the problem I run into is that \xparsepkg\ stores the name of the command being defined and uses that name in certain error messages. These error messages would refer incorrectly to |\sseq@class| instead of |\class|. The fix for this is pretty boring -- it just involves redefining macros back and forward. Anyways, I make a command |\sseq@DeclareDocumentCommandAs| that defines a command using \xparsepkg\ that gives errors as if it were named a specific other command. I use this for defining most of the user-facing macros.
+
+The rest of the file is responsible for defining |\NewSseqCommand| and |\NewSseqGroup|. These commands are relatively simple in principle -- the point of |\NewSseqCommand| is almost already accomplished by \xparsepkg\ already. Most of the complexity is introduced in order to improve the error messages that \spectralsequences\ produces. In particular, I want to reconstruct as closely as possible what the user said when they ran the command. This way, if an error occurs nested several commands deep, or inside of a loop, the user can still get a decent idea about where the error is coming from.
+
+
+\section{Keys}
+There are different options that make sense for the |\class| command versus for the |\d| command, and some options that do make sense for both need distinct handling. However, there are also overlaps. Thus, the key value system is naturally a tree structure. \pgfkeysname\ has support for ``directories'' which proves extremely valuable. Each directory has an unknown option handler, which by default throws an error. I have a command |\sseq@passoptionto| that hands the keys to the parent directory.
+% The directory structure is as follows:
+%\begin{tikzpicture}
+%\node {sseq@keys@unknown} child {
+% node { /sseqpages } child {
+% node {/sseqpages/class}
+% node {/sseqpages/differential}
+% }
+%\end{tikzpicture}
+
+\sseqpages\ is a two-pass algorithm. On the first pass, it creates the data structures necessary to encode the spectral sequence, and on the second pass, the spectral sequence is actually drawn. The second basic design feature of the \sseqpages\ key value system is that keys need to be able to do different things on the first and second pass. This is accomplished very simply -- I use two wrapper macros |\sseq@options@firstpass| and |\sseq@options@secondpass| for code that should only happen respectively on the first and second pass. To use them, I basically just define |\sseq@options@firstpass| as a no-op and |\sseq@options@secondpass| to add its argument to a macro to be stored for later use at draw time. However, in some circumstances I need to redefine these two hooks, either to delete their argument or to evaluate there arguments.
+
+Once we have this basic design, we can implement many of the basic features of \sseqpages. There is a problem, which is that I want to mix \tikzname\ keys with keys that my package defines gracefully. However, \tikzname\ keys execute code that assumes that we are in the middle of drawing something. One early design approach I used was to define my package's unknown option handler to do validation only on \tikzname\ keys on the first pass, and then store the keys and run |\pgfkeys| again to evaluate them at draw time.
+
+The third major design goal is to allow ``styles'' that change the display of logical collections of classes. That is, the user should be able to say something ``permanent cycles = red'' and change all permanent cycles (as identified by \spectralsequences) to red. Originally I implemented this by storing the keys that the user provided and using |\pgfkeys| at draw time to evaluate them each time I made a class. Here I ran into a problem: |\pgfkeys| is very slow. When I used this design and compiled a 5,000 class spectral sequence, saying \codeverb|classes = {red, red, red}| took over a second longer than not saying it. This was obviously an unsatisfactory state of affairs. The solution to this problem sped up the package tremendously, but at the cost of a large increase in design complexity of the key value system.
+
+The solution of course is to only run |\pgfkeys| on any given key once and store the result, rather than repeatedly using |\pgfkeys| on the same input. In order to do this, I needed to hook into |\pgfkeys| and change it so that every time that it would normally evaluate code, it should just store it into |\sseq@savedoptioncode|. Conveniently enough, there are only two places where |\pgfkeys| emits code, so this basic idea is easy enough. The problem is that many keys execute recursive calls to |\pgfkeys| that are state-dependent. Normally, the key code is executed instantly, so it can reasonably expect the state it needs to be preserved. However, if I defer the body of a key that makes such a recursive call, pieces of the necessary state are lost before the code is executed and it breaks. Thankfully, all such state-dependent recursive calls are made using the command |\pgfkeysalso|. So the fix is to first walk across the key code and find any instances of |\pgfkeysalso| that occur in it, and run these |\pgfkeysalso|s. Once this recursive expansion has taken place, the resulting code is independent of the state of the key value system's state and is safe to store for later use.
+
+\section{Main}
+The \file{sseqmain} defines the main environments and user commands. The logic is pretty much as described in the overview section, and nothing super notable happens beyond that. There are a lot of details to get right, in particular a lot of the mess in this file is due to the complicated interfacing with \file{sseqkeys}.
+
+
+
+\section{Parsers}
+The file \file{sseqparsers} is a bit of a grab bag. The code is grouped by structure more than by content, hence the name. Most importantly, it has all of the coordinate parsers that define the coordinate syntax. This file uses some amount of \LaTeX3 programming, though it is a bit of a chimera. There are three main reasons I did not use \LaTeX3 programming more broadly or consistently. The first is inexperience: I simply haven't used \LaTeX3 much. The second is that \LaTeX3 and \tikzname\ do not get along all that well. This is fixable but a pain. The third is that \LaTeX3 has a lot of fancy convenient robust macros, but I generally need sloppy fast macros. If I can write a faster macro that adds a large number of weird preconditions, for the purposes of \spectralsequences\ that is probably better.
+
+One very good reason to use |\ExplSyntax| in this file is that it gets rid of a lot of space hazards. In this file, I really just make use of the variants of |\exp_args| and |\exp_last_unbraced|. These macros are tremendous innovations that greatly improve expandable macro writing.
+
+One major annoyance is the need for |\sseq@ifintexpr|. This is a sanitizer for |\numexpr|. I don't understand why the \eTeX\ source doesn't contain an input sanitizer! \TeX\ does not support catch blocks or exceptions, so because we can't ask forgiveness we have to ask for permission. Anyways |\sseq@ifintexpr| was difficult to write and is slow. Together, |\sseq@ifintexpr| and |\numexpr| are still much faster than |\pgfmathparse| though, and the input sanitization only has to occur at the user input stage, so all of the internal uses of |\numexpr| don't pay this cost. Contrast the case for |\sseq@ifpgfmathexpr| which is my sanitizer for |\pgfmathparse|. All it does is redefine |\pgfmath@error| to throw away the error, set a flag, and quit out of |\pgfmathparse|. It was orders of magnitude easier to write.
+
+There is a parser that does some manipulation on \tikzname\ commands to process the options and the coordinates. The options processing is primarily for speed purposes, and the coordinate parsing I do because I want to make several changes to the way that tikz processes coordinates for the sake of better interoperability with the rest of the \spectralsequences\ feature set (these changes are unfortunately quite involved...). A third thing gained by this is that \sseqpages\ can know that the path looks reasonably close to being syntactically correct at compile time (though I don't run much of the tikz parser, so there's only so much it can tell).
+
+There are a few tricks in here that I think are relatively interesting. The one that I find the most interesting is as follows: suppose you have an expandable macro that needs error handling. The problem with errors in expandable macros is that the errors themselves are not expandable. My solution is to write the macro so that it either a) satisfies whatever the postcondition of the macro was supposed to be or b) is of the form |\protecterror{\someerror}|. Before the |\edef| occurs, the |\protecterror| is defined to expand to |\noexpand\protecterror\unexpanded{#1}|, so that it hangs around after being |\edef|'d. Suppose we are writing |\edef\theoutput{\somemacro{some input}}|. Then when you want to check for the error, redefine |\protecterror| to globally set some error flag, then say |\setbox0=\hbox{\theoutput}| in a local scope. Because |\hbox| evaluates its argument, this throws an error if |\theoutput| contains an error, and also |\protecterror| sets the error flag. However, |\theoutput| can have other random junk in it, which won't leak into the output. This solution doesn't depend on the error being in the top level of |\theoutput|, it can be in as deeply nested braces as necessary and doesn't require |\scantokens| hacking. It doesn't rely on any particular structure features other than the presence or absence of the error.
+Anyways, this is how I manage to have robust error messages with expandable macros. Obviously this isn't applicable to many circumstances, but in my code, my need for expandable macros is always in situations where I have a macro whose evaluation depends on temporary state, but whose result needs to be stored inside of a command (not an |\hbox|) for later handling.
+
+
+\section{Drawing}
+The most notable aspect of the \file{sseqdrawing} is that significant chunks of it need to be highly optimized. The command that is used the most times in a normal spectral sequence is the one that prints a class. It is important to be aware of differences between the efficiency of different low level pdf commands. It is worth pointing out that I have fallen into the trap in some places of optimizing code that didn't need optimization.
+
+In order to maintain all the features of \tikzname\ while being as fast as possible, all drawing code is done in two ways -- one way that is fast and uses low level \pgfpkg, and a second way that is slow and uses \tikzname\. Certain options the user asks for cause the fallback slow code to be run instead of the fast code. It is actually surprising to me how easy it has actually been to maintain this two-method code. It's unusual for the class drawing code to have to resort to the fallback, but if an edge is bent or has a label on it, \sseqpages\ uses \tikzname\ to draw it. Both of these are reasonably standard use cases, but hopefully they will only ever apply to a small percentage of edges in any diagram.
+
+In order to build the relevant chunks of the fast code, I copied the \tikzname\ main loop and deleted stuff until I got to the minimal subset of code that works for my purposes.
+One of the main enemies of speed in this section (other than the \tikzname\ parser and main loop which I avoid by using \pgfpkg) is the |\pgfmathparse| command, which comes up a lot even in \pgfpkg\ code and is quite slow. As much as possible, I try to get away with using the \eTeX\ |\numexpr| and |\dimexpr| commands, both of which are implemented in the \eTeX\ binary and so are very fast. These two commands both have annoying limitations, and it can be difficult to accomplish certain tasks with them. However, it is worth it in interest of speed. In fact, |\numexpr| is actually preferable to |\pgfmathparse| for most of the code outside of the drawing file, because \sseqpages\ deals primarily with integers and basic arithmetic |+-*/()| that |\numexpr| handles, and because |\pgfmathparse| has the unfortunate property of turning all integers into floats.
+
+The other difficulty that arises here is that \spectralsequences\ needs to be able to handle very large diagrams. In a normal |\tikzpicture|, the distance from |(0,0)| to |(1,0)| is 1cm. If you use |scale=0.5| for instance, and use a coordinate |(3,0)|, then the order that multiplications are performed in is $(3\times 1\textup{cm})\times 0.5$. The issue is that 600cm is an overflow, and this overflow occurs even if you have a very small scaling factor that would make that coordinate fit onto the page (which is probably a bit less than 600cm long). The solution is instead of applying a scaling transformation, I adjust the position of the coordinate (1,0), say to be 0.01cm. Then $600*0.01\textup{cm}= 6\textup{cm}$ leads to no overflow. This leads to various complications in the drawing code.
+
+There's a second more problematic issue though. Suppose that I want to zoom in on the range from 600 to 700 on a very large spectral sequence. The scale I want to use to fit this to the page will cause an overflow. To fix this I subtract an offset between the minimum and maximum value of x from every single coordinate. This adjusts the range so that it actually goes from say 0 to 100, and then no overflow occurs.
+
+The issue then is how to make this offset also apply to \tikzname\ primitives. In order to do this I patch into the \tikzname\ coordinate parser and every time it parses a coordinate add in the offsets in the appropriate place. There are a few spots where this goes awry and offsets are added to coordinates that are calculated relative to a another coordinate with the offset already calculated in (the |to| keyword is the main offender here), so there are second order fixes to prevent this.
+
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-draftmode.pdf b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-draftmode.pdf
new file mode 100755
index 0000000000..f517d3ad93
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-draftmode.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-layoutcharts.tex b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-layoutcharts.tex
new file mode 100644
index 0000000000..480f7559c4
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual-layoutcharts.tex
@@ -0,0 +1,205 @@
+\sseqset{
+ distance label/.sseq style = {orange,{<[width = 4pt]}-},
+ description/.sseq style = {black, align = center},
+ title style={yshift=35pt,font=\Large}
+}
+\catcode`\| = 12 % | is active to be verbatim, but we need to use it here for our arrowhead specification.
+%
+\begin{sseqpage}[ grid = chess,
+ x range = {0}{5}, y range = {0}{5}, math nodes = false,
+ x axis clip padding = 0.15cm, y axis clip padding = 0.15cm,
+ right clip padding = 0.2cm, top clip padding = 0.2cm, axes gap = 25pt,
+ title = {Axis type border layout}
+]
+\begin{scope}[background]
+\sseq@savedpaths@add{\color{red}\pgfsetpath\sseq@theclippath\pgfusepath{draw}}
+\path (\sseq@xmin-3,\sseq@ymin-3) -- (\sseq@xmax+3,\sseq@ymax+3);
+\end{scope}
+
+\begin{scope}[background,|-|,blue]
+% axis clip padding
+\draw[shift = {(1,-\sseq@xaxisgap)}] (0,0)--(0,\sseq@xclip@axisgap-0);
+\draw[distance label,shift = {(1,-\sseq@xaxisgap+\sseq@xclip@axisgap/2)}] (0,0) .. controls (0.5,0) .. (0.5,-1.5)
+ node[description, below] {x axis\\ clip padding};
+%
+\draw[shift = {(-\sseq@yaxisgap,1)}] (0,0)--(\sseq@yclip@axisgap,0);
+\draw[distance label,shift = {(-\sseq@yaxisgap+\sseq@yclip@axisgap/2,1)}] (0,0) .. controls (0,0.3) .. (-0.7,0.3)
+node[description, left] {y axis\\ clip padding};
+
+
+% border clip padding
+\draw[shift = {(\sseq@xmax cm + \sseq@xaxis@end@extend-0.02cm,\sseq@ymax - 1)}] (-0.02cm,0)--(\sseq@clip@padding@right,0);
+\draw[distance label, shift = {(\sseq@xmax cm + \sseq@xaxis@end@extend+\sseq@clip@padding@right/2,\sseq@ymax-1)}] (0,0) .. controls (0,-0.7) ..(0.7,-0.7)
+ node[description, right] {right clip\\ padding};
+%
+\draw[shift = {(\sseq@xmax - 1,\sseq@ymax cm+\sseq@yaxis@end@extend)}] (0,0)--(0,\sseq@clip@padding@top);
+\draw[distance label, shift = {(\sseq@xmax -1,\sseq@ymax cm+\sseq@yaxis@end@extend+\sseq@clip@padding@top/2)}] (0,0) .. controls (0.2,0) .. (0.2,0.3)
+ node[description, above] {top clip\\ padding};
+
+% axis tail
+\draw[shift = {(\sseq@xmin-\sseq@yaxisgap-0.02cm,\sseq@ymin-\sseq@xaxisgap+0.1cm)}] (0,0) -- (-\sseq@xaxis@tail, 0);
+\draw[distance label,shift = {(\sseq@xmin-\sseq@yaxisgap-0.02cm-\sseq@xaxis@tail/2,\sseq@ymin-\sseq@xaxisgap+0.1cm)}] (0,0) .. controls (0,0.5) .. (-1,0.5)
+ node[description, left]{x axis\\ tail};
+%
+\draw[shift = {(\sseq@xmin-\sseq@yaxisgap+0.1cm,\sseq@ymin-\sseq@xaxisgap-0.02cm)}] (0,0) -- (0, -\sseq@yaxis@tail);
+\draw[distance label,shift = {(\sseq@xmin-\sseq@yaxisgap+0.1cm,\sseq@ymin-\sseq@xaxisgap-0.02cm-\sseq@yaxis@tail/2)}] (0,0) .. controls (0.5,0) .. (0.5,-1)
+ node[description, below]{y axis\\ tail};
+
+% extend end axis
+\draw[shift = {(\sseq@xmax,\sseq@ymin-\sseq@xaxisgap-0.1cm)}] (0,0)--(\sseq@xaxis@end@extend,0);
+\draw[distance label,shift = {(\sseq@xmax cm+\sseq@xaxis@end@extend/2,\sseq@ymin-\sseq@xaxisgap-0.1cm)}] (0,0) -- (0,-0.8)
+ node[description, below] {x axis\\ extend end};
+%
+\draw[shift = {(\sseq@xmin cm-\sseq@yaxisgap-0.1cm,\sseq@ymax)}] (0,0)--(0,\sseq@yaxis@end@extend);
+\draw[distance label,shift = {(\sseq@xmin cm- \sseq@yaxisgap-0.1cm,\sseq@ymax cm+\sseq@yaxis@end@extend/2)}] (0,0) -- (-0.6,0)
+ node[description, left] {y axis\\ extend end};
+
+
+% tick gap
+\draw[shift = {(\sseq@xmin+\sseq@xmax/2+0.2,-0.5-\sseq@xaxisgap)}] (0,0)--(0,-\sseq@xlabelgap);
+\draw[distance label,shift = {(\sseq@xmin+\sseq@xmax/2+0.2,-\sseq@xlabelgap/2-\sseq@xaxisgap)}] (0,0) .. controls (0.5 ,0) .. (0.5,-0.8)
+ node[below,black]{x tick gap};
+%
+\draw[shift = {(-0.5-\sseq@yaxisgap,\sseq@ymin+\sseq@ymax/2+0.2)}] (0,0)--(-\sseq@ylabelgap,0);
+\draw[distance label,shift = {(-\sseq@yaxisgap -\sseq@ylabelgap/2,\sseq@ymin+\sseq@ymax/2+0.2)}] (0,0) .. controls (0, -0.3) .. (-0.5,-0.3)
+node[left,black]{y tick gap};
+
+% axis gap
+\draw[shift = {(\sseq@xmax cm+0.17cm,\sseq@ymin cm-\sseq@xaxisgap+0.02cm)}] (0,0) -- (0, \sseq@xaxisgap);
+\draw[distance label,shift = {(\sseq@xmax cm+0.17cm,\sseq@ymin cm-\sseq@xaxisgap/2+0.02cm)}](0,0) .. controls (2,0) .. (2,0.5)
+node[above,description]{x axis gap};
+%
+\draw[shift = {(\sseq@xmin cm-\sseq@yaxisgap+0.02cm,\sseq@ymax cm+0.17cm)}] (0,0) -- (\sseq@yaxisgap,0);
+\draw[distance label,shift = {(\sseq@xmin cm-\sseq@yaxisgap/2+0.02cm,\sseq@ymax cm+0.17cm)}](0,0)--(0,1) %.. controls (0,1) .. (0.5,1);
+node[above,description]{y axis gap};
+\end{scope}
+
+\class(0,0)
+\class(5,0)
+\class(0,5)
+\end{sseqpage}
+
+\vskip20pt
+
+\begin{sseqpage}[ grid = chess, axes type=frame,
+ title = {Axes type frame layout},
+ x range = {0}{5}, y range = {0}{5}, math nodes = false,
+ x axis clip padding = 0.15cm, y axis clip padding = 0.15cm,
+ right clip padding = 0.2cm, top clip padding = 1cm, axes gap = 25pt
+]
+\begin{scope}[background]
+\sseq@savedpaths@add{\color{red}\pgfsetpath\sseq@theclippath\pgfusepath{draw}}
+\path (\sseq@xmin-3,\sseq@ymin-3) -- (\sseq@xmax+3,\sseq@ymax+3);
+\end{scope}
+
+\begin{scope}[background,|-|,blue]
+% axis clip padding
+\draw[shift = {(\sseq@xmax+0.5,-\sseq@xaxisgap)}] (0,0)--(0,\sseq@xclip@axisgap);
+\draw[shift = {(-\sseq@yaxisgap,\sseq@ymax+0.5)}] (0,0)--(\sseq@yclip@axisgap,0);
+\draw[distance label,shift = {(\sseq@xmax+0.5,-\sseq@xaxisgap+\sseq@xclip@axisgap/2)}] (0,0) .. controls (1,0) .. (1,-0.3)
+node[description, below] {x axis\\ clip padding};
+\draw[distance label,shift = {(-\sseq@yaxisgap+\sseq@yclip@axisgap/2,\sseq@ymax+0.5)}] (0,0) .. controls (0,0.5) .. (-0.5,0.5)
+node[description, left] {y axis\\ clip padding};
+
+\draw[shift = {(\sseq@xmax+0.5,\sseq@ymax cm+\sseq@xaxisgap)}] (0,0)--(0,-\sseq@xclip@axisgap);
+\draw[distance label,shift = {(\sseq@xmax+0.5,\sseq@ymax cm+\sseq@xaxisgap-\sseq@xclip@axisgap/2)}] (0,0) .. controls (-0.5,0) .. (-0.5,0.2)
+node[description, above] {x axis\\ clip padding};
+
+
+\draw[shift = {(\sseq@xmax cm +\sseq@yaxisgap,\sseq@ymax +0.5)}] (-\sseq@yclip@axisgap,0)--(0,0);
+\draw[distance label,shift = {(\sseq@xmax cm +\sseq@yaxisgap-\sseq@yclip@axisgap/2,\sseq@ymax +0.5)}] (0,0) .. controls (0,-0.5) .. (0.2,-0.5)
+node[description, right] {y axis\\ clip padding};
+
+
+% tick gap
+\draw[shift = {(\sseq@xmin+\sseq@xmax/2+0.2,-0.5-\sseq@xaxisgap)}] (0,0)--(0,-\sseq@xlabelgap);
+\draw[shift = {(-0.5-\sseq@yaxisgap,\sseq@ymin+\sseq@ymax/2+0.2)}] (0,0)--(-\sseq@ylabelgap,0);
+\draw[distance label,shift = {(\sseq@xmin+\sseq@xmax/2+0.2,-\sseq@xlabelgap/2-\sseq@xaxisgap)}] (0,0) .. controls (0.5 ,0) .. (0.5,-0.8)
+ node[below,black]{x tick gap};
+\draw[distance label,shift = {(-\sseq@yaxisgap -\sseq@ylabelgap/2,\sseq@ymin+\sseq@ymax/2+0.2)}] (0,0) .. controls (0, -0.3) .. (-0.5,-0.7)
+node[left,black]{y tick gap};
+
+% axis gap
+\draw[shift = {(\sseq@xmax cm+0.17cm,\sseq@ymin cm-\sseq@xaxisgap+0.02cm)}] (0,0) -- (0, \sseq@xaxisgap);
+\draw[shift = {(\sseq@xmin cm-\sseq@yaxisgap+0.02cm,\sseq@ymax cm+0.17cm)}] (0,0) -- (\sseq@yaxisgap,0);
+\draw[distance label,shift = {(\sseq@xmax cm+0.17cm,\sseq@ymin cm-\sseq@xaxisgap/2+0.02cm)}](0,0) .. controls (2,0) .. (2,0.5)
+node[above,description]{x axis gap};
+\draw[distance label,shift = {(\sseq@xmin cm-\sseq@yaxisgap/2+0.02cm,\sseq@ymax cm+0.17cm)}](0,0)--(0,1) %.. controls (0,1) .. (0.5,1);
+node[above,description]{y axis gap};
+
+\draw[shift = {(\sseq@xmax cm-0.02cm,\sseq@ymin cm+0.17cm)}] (0,0) -- (\sseq@yaxisgap,0);
+\draw[distance label,shift = {(\sseq@xmax cm-0.02cm+\sseq@yaxisgap/2,\sseq@ymin cm+0.17cm)}](0,0) .. controls (0,1) .. (0.8,1)
+ node[right,description]{y axis gap};
+\draw[shift = {(\sseq@xmin cm+0.17cm,\sseq@ymax cm-0.02cm)}] (0,0) -- (0,\sseq@xaxisgap);
+\draw[distance label,shift = {(\sseq@xmin cm+0.17cm,\sseq@ymax cm-0.02cm+\sseq@xaxisgap/2)}](0,0) .. controls (1.3,0) .. (1.3,0.75)
+ node[above,description]{x axis gap};
+\end{scope}
+
+\class(0,0)
+\class(5,0)
+\class(0,5)
+\end{sseqpage}
+
+
+\begin{sseqpage}[ grid = chess, axes type=center,
+ title = {Axes type center layout},
+ x range = {-3}{3}, y range = {-3}{3}, math nodes = false,
+ x axis clip padding = 0.15cm, y axis clip padding = 0.15cm,
+ right clip padding = 0.2cm, top clip padding = 0.2cm,
+ left clip padding = 0.2cm, bottom clip padding = 0.2cm %axes gap = 25pt
+]
+\begin{scope}[background]
+\sseq@savedpaths@add{\color{red}\pgfsetpath\sseq@theclippath\pgfusepath{draw}}
+\path (\sseq@xmin-3,\sseq@ymin-3) -- (\sseq@xmax+3,\sseq@ymax+3);
+\end{scope}
+
+\begin{scope}[background,|-|,blue]
+
+% tick gap
+\draw[shift = {(\sseq@xmin-0.4,-\sseq@xaxisgap-0.02cm)}] (0,0)--(0,-\sseq@xlabelgap);
+\draw[distance label,shift = {(\sseq@xmin-0.4,-\sseq@xaxisgap-0.02cm-\sseq@xlabelgap/2)}] (0,0) -- (-0.5,0)
+ node[left,black]{x tick gap};
+
+\draw[shift = {(-0.02cm-\sseq@yaxisgap,\sseq@ymin-0.4)}] (0,0)--(-\sseq@ylabelgap,0);
+\draw[distance label,shift = {(-0.02cm-\sseq@yaxisgap -\sseq@ylabelgap/2,\sseq@ymin-0.4)}] (0,0) -- (0,-0.6)
+ node[below,black]{y tick gap};
+
+% border clip padding
+\draw[shift = {(\sseq@xmin cm - \sseq@xaxis@start@extend+0.02cm,\sseq@ymin +1)}] (0,0)--(-\sseq@clip@padding@left,0);
+\draw[distance label, shift = {(\sseq@xmin cm - \sseq@xaxis@start@extend-\sseq@clip@padding@left/2,\sseq@ymin +1)}] (0,0) .. controls (0,-0.5) ..(-0.5,-0.5)
+ node[description, left] {left clip\\ padding};
+%
+\draw[shift = {(\sseq@xmax cm + \sseq@xaxis@end@extend-0.02cm,\sseq@ymin +1)}] (0,0)--(\sseq@clip@padding@right,0);
+\draw[distance label, shift = {(\sseq@xmax cm + \sseq@xaxis@end@extend+\sseq@clip@padding@right/2,\sseq@ymin +1)}] (0,0) .. controls (0,-0.5) ..(0.5,-0.5)
+ node[description, right] {right clip\\ padding};
+%
+\draw[shift = {(\sseq@xmin+1 ,\sseq@ymax cm+\sseq@yaxis@end@extend-0.02cm)}] (0,0)--(0,\sseq@clip@padding@top);
+\draw[distance label, shift = {(\sseq@xmin+1,\sseq@ymax cm -0.02cm+\sseq@yaxis@end@extend+\sseq@clip@padding@top/2)}] (0,0) .. controls (-0.9,0)..(-0.9,0.3)
+ node[description, above] {top clip\\ padding};
+%
+\draw[shift = {(\sseq@xmin +1 ,\sseq@ymin cm-\sseq@yaxis@start@extend+0.02cm)}] (0,0)--(0,-\sseq@clip@padding@bottom);
+\draw[distance label, shift = {(\sseq@xmin +1 ,\sseq@ymin cm +0.02cm - \sseq@yaxis@start@extend-\sseq@clip@padding@bottom/2)}] (0,0) .. controls (-0.9,0)..(-0.9,-0.4)
+ node[description, below] {bottom clip\\ padding};
+
+% extend axis
+\draw[shift = {(\sseq@xmax,-\sseq@xaxisgap+0.1cm)}] (0,0)--(\sseq@xaxis@end@extend,0);
+\draw[distance label,shift = {(\sseq@xmax cm+\sseq@xaxis@end@extend/2,-\sseq@xaxisgap+0.1cm)}] (0,0) .. controls (0,0.5) .. (0.9,0.5)
+ node[description, right] {x axis\\ extend end};
+%
+\draw[shift = {(-\sseq@yaxisgap+0.1cm,\sseq@ymax)}] (0,0)--(0,\sseq@yaxis@end@extend);
+\draw[distance label,shift = {(-\sseq@yaxisgap+0.1cm,\sseq@ymax cm+\sseq@yaxis@end@extend/2)}] (0,0) .. controls (0.4,0)..(0.4,0.7)
+ node[description, above] {y axis\\ extend end};
+%
+\draw[shift = {(\sseq@xmin,-\sseq@xaxisgap+0.1cm)}] (0,0)--(-\sseq@xaxis@start@extend,0);
+\draw[distance label,shift = {(\sseq@xmin cm-\sseq@xaxis@start@extend/2,-\sseq@xaxisgap+0.1cm)}] (0,0) .. controls (0,0.5) .. (-0.7,0.5)
+ node[description, left] {x axis\\ extend start};
+%
+\draw[shift = {(-\sseq@yaxisgap+0.1cm,\sseq@ymin)}] (0,0)--(0,-\sseq@yaxis@start@extend);
+\draw[distance label,shift = {(-\sseq@yaxisgap+0.1cm,\sseq@ymin cm-\sseq@yaxis@start@extend/2)}] (0,0) .. controls (2,0)..(2,-0.7)
+ node[description, below] {y axis\\ extend start};
+\end{scope}
+
+\class(0,0)
+\class(5,0)
+\class(0,5)
+\end{sseqpage} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.pdf b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.pdf
new file mode 100644
index 0000000000..d5cbde1a3c
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.tex b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.tex
new file mode 100644
index 0000000000..4681bd03df
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanual.tex
@@ -0,0 +1,2087 @@
+%%
+%% Package: spectralsequences v1.2.2 2017-09-16 2017-09-16
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: spectralsequencesmanual.tex
+%%
+%% Manual content
+%%
+
+%
+% TODO:
+%
+% maybe move more examples into external files?
+%
+% consistency issues?
+% perhaps think about ordering, particularly of "Misc commands" section
+% tutorial
+% explain / cross reference examples folder?
+% \sseqlastlabel is not currently documented.
+%
+\def\version{Version 1.2.2}
+
+
+\input spectralsequencesmanualpreamble
+
+
+\begin{document}
+\newgeometry{margin = 4cm,nohead}
+\begin{titlepage}
+\title{\sseqpages}
+\author{Hood Chatham\\\mailtoHC}
+\date{\version\\\today}
+ \maketitle \thispagestyle{empty}
+
+\begin{abstract}
+\noindent
+The \sseqpages\ package is a specialized tool built on top of \pgfpkg/\tikzpkg\ for drawing spectral sequence charts. It provides a powerful, concise syntax for specifying the data of a spectral sequence, and then allows the user to print various pages of a spectral sequence, automatically choosing which subset of the classes, differentials, and structure lines to display on each page. It also handles most of the details of the layout. At the same time, \sseqpages\ is extremely flexible. It is closely integrated with \tikzpkg\ to ensure that users can take advantage of as much as possible of its expressive power. It is possible to turn off most of the automated layout features and draw replacements using \tikzpkg\ commands. \sseqpages\ also has a carefully designed error reporting system intended to ensure that it is as clear as possible what is going wrong.
+
+Many thanks to the authors of \tikzpkg\ for producing such a wonderful package with such thorough documentation. I would have needed to spend a lot more time reading the \tikzpkg\ code if the documentation weren't so excellent. I took ideas or code or both from \tikzcdpkg\ (part of the code for turning quotes into class or edge labels), \pgfplotspkg\ (axes labels), and \sseqpkg\ (the grid types, the stack). I lifted a fair amount of code from \TeX stack exchange. Thanks to Eva Belmont for tons of helpful suggestions, bug reports, and productive conversations. Talking to her has helped to clarify many design concepts for the package. Thanks to Eric Peterson for being a very early adopter and reporting many bugs. Also thanks to all my friends, family, and acquaintances listened to me talk about \LaTeX\ programming even though they probably found it dreadfully boring.
+\end{abstract}
+\end{titlepage}
+
+\restoregeometry
+\stepcounter{page}
+\newpage
+\thispagestyle{empty} % Should the table of contents have a page number?
+\tableofcontents
+\newpage
+\section{Introduction}
+The \sseqpages\ package consists of two main environments -- the \sseqdataenv\ environment, which specifies the data for a named spectral sequence, and the \sseqpageenv\ environment, which prints a single page of a spectral sequence. The |\printpage| command is also available as a synonym for a \sseqpageenv\ environment with an empty body.
+
+Here is a basic example:
+\begin{codeexample}[width = 8.7cm]
+\begin{sseqdata}[ name = basic, xscale = 0.6,
+ cohomological Serre grading ]
+\class(0,0)
+\class(0,2)
+\class(3,0)
+\class(3,2)
+\d3(0,2)
+\end{sseqdata}
+\printpage[ name = basic, page = 3 ] \quad
+\printpage[ name = basic, page = 4 ]
+\end{codeexample}
+\codeverb|\begin{sseqdata}[name = basic, cohomological Serre grading]| starts the declaration of the data of a spectral sequence named |basic| with cohomological Serre grading -- that is, the page $\mathtt{r}$ differentials go $\mathtt{r}$ to the right and down $\mathtt{r-1}$. Then we specify four classes and one page 3 differential, and we ask \sseqpages\ to print the third and fourth pages of the spectral sequence. Note that on the fourth page, the source and target of the differential have disappeared.
+
+\subsection{Installation}
+In both \miktex\ and \texlive\ installation should be automatic -- your \TeX\ distribution should automatically install the package the first time you include |\usepackage{spectralsequences}| in a document and compile it. However, in 2016, \texlive\ made an incompatible change to their database, so no new packages will run on versions of \texlive\ from before 2016. This includes \sseqpages. If you have an old version of \texlive, you can either perform a manual install,
+or, better, you should install an up to date version of \texlive. If you want to do a manual install, see \href{https://tex.stackexchange.com/a/73017}{this \TeX stack exchange post} for instructions.
+
+\subsection{Memory Constraints}
+In a default \TeX\ install, \pdfLaTeX\ has small static memory caps that prevent it from using more than about 60 megabytes of total ram. However, \spectralsequences\ and \pgfpkg/\tikzpkg\ use a large amount of memory. For this reason, using \pdfLaTeX\ with a default install, you cannot draw more than about 2500 classes across all of your diagrams (fewer if you include differentials, structure lines, and other features). There are a few solutions to this.
+
+The easiest solution is to run \LuaLaTeX. \LuaLaTeX\ dynamically allocates memory and so is unlikely to run out of it. Using \LuaLaTeX\ on my computer, I can compile a document that draws two copies of a diagram with 20,000 classes in it (so a total of 40,000 classes). This takes about 50 seconds and 250 megabytes of ram. I expect any real-world use case will compile fine on a modern computer using \LuaLaTeX. This option has the advantage that any modern \TeX\ install comes with a copy of \LuaLaTeX, and that \LuaLaTeX\ is the designated successor to \pdfLaTeX. It has the disadvantage that there are some incompatibilities between \LuaLaTeX\ and \pdfLaTeX\ so if your document depends on \pdfLaTeX-specific features, it might be a pain to switch to \LuaLaTeX.
+
+Another option is to increase the static memory caps for \pdfLaTeX. See \href{https://tex.stackexchange.com/a/26213}{this \TeX stack exchange post} for instructions on how to do this.
+
+\subsection{A warning about fragile macros}
+All the data in a \sseqpages\ environment is stored and used later. As a result, most of the \sseqpages\ commands currently cannot tolerate fragile macros. Unfortunately, it is impossible for \sseqpages\ to warn you about this situation -- if you use a fragile command in a place that it doesn't belong, the result will be an incomprehensible error message. If you are getting nonsense error messages, this might be why. The solution is to convert fragile macros into robust ones. Common examples of fragile macros include |\widehat| and |\underline|. My suggested solution to this is to add the following code to your preamble for each fragile macro (example given for |\mathbb|):
+\begin{codeexample}[code only]
+\let\oldwidehat\widehat
+\protected\def\widehat{\oldwidehat}
+\end{codeexample}
+
+
+\section{Package Options and Environments}
+\begin{manualentry}{Draft Mode}
+The drawings that \sseqpages\ produces can be quite slow, especially if they are large. Draft mode skips drawing the content of the spectral sequence, but still takes up exactly the same amount of space in the document, so that you can deal with formatting issues. To active draft mode, load the package by saying |\usepackage[draft]{spectralsequences}|.
+\end{manualentry}
+
+\begin{environment}{{sseqdata}\moptions}
+The \sseqdataenv\ environment is for storing a spectral sequence to be printed later. This environment is intended for circumstances where you want to print multiple pages of the same spectral sequence. When using the \sseqdataenv\ environment, you must use the |name| option to tell \sseqpages\ where to store the spectral sequence so that you can access it later.
+\end{environment}
+
+\begin{environment}{{sseqpage}\ooptions}
+This environment is used for printing a page of existing spectral sequence that was already specified using the \sseqdataenv\ environment. The body of the environment adds local changes -- classes, differentials, structure lines, and arbitrary \tikzpkg\ options that are by default only printed on this particular page. The \sseqpageenv\ environment can also be used to print a stand-alone page of a spectral sequence -- that is, if you only want to print a single page of the spectral sequence, you can skip using the \sseqdataenv\ environment.
+\end{environment}
+
+\begin{command}{\printpage\moptions}
+This command prints a single page of an existing spectral sequence as-is. This is equivalent to a \sseqpageenv\ environment with an empty body.
+\end{command}
+
+
+\section{The Main Commands}
+\begin{command}{\class\ooptions\parargtwo{x}{y}}
+This places a class at |(x,y)| where |x| and |y| are integers. If multiple classes occur at the same position, \sseqpages\ will automatically arrange them in a pre-specified pattern. This pattern may be altered using the |class pattern| option.
+\begin{codeexample}[]
+\begin{sseqpage}[ no axes, ymirror, yscale = 0.8 ]
+\class(0,0)
+\class(1,0) \class(1,0)
+\class(0,1) \class(0,1) \class(0,1)
+\class(1,1) \class(1,1) \class(1,1) \class(1,1)
+\class(0,2) \class(0,2) \class(0,2) \class(0,2) \class(0,2)
+\class(1,2) \class(1,2) \class(1,2) \class(1,2) \class(1,2) \class(1,2)
+\end{sseqpage}
+\end{codeexample}
+
+The effect of the |\class| command is to print a \tikzpkg\ node on a range of pages. Any option that would work for a \tikzpkg\ |\node| command will also work in the same way for the |\class|, |\replaceclass|, and |\classoptions| commands.
+
+If a class is the source or the target of a differential on a certain page, then the page of the class is set to that page, and the class is only rendered on pages up to that number:
+\begin{codeexample}[width = 8cm]
+\begin{sseqdata}[ name = class example,
+ Adams grading,
+ yscale = 0.53 ]
+\class(1,0)
+\class(0,2)
+\class(0,3)
+\d2(1,0)
+\end{sseqdata}
+\printpage[ name = class example, page = 2 ]
+\quad
+\printpage[ name = class example, page = 3 ]
+\end{codeexample}
+
+See the \pgfmanualpdfref{class options}{class options} section for a list of the sort of options available for classes.
+\end{command}
+
+\begin{commandlist}{{\replaceclass\ooptions\parargthreeopt{x}{y}{n}},\replaceclass\ooptions\pararg{classname}, \replacesource\ooptions, \replacetarget\ooptions}
+After a class is the source or target of a differential, it disappears on the next page. However, some differentials are not injective or not surjective. Using the command |\replaceclass| causes a new symbol to appear on the page after a class supported or accepted a differential (or both). If there are multiple classes at the coordinate |(x,y)| you may specify which using an integer or a |tag| $n$. By default, this command will affect the first class placed in that position. You can also provide the |class:name| of a class. The variants |\replacesource| and |\replacetarget| replace the source and target respectively of the most recent differential.
+\begin{codeexample}[]
+\begin{sseqdata}[name = replace class example, Adams grading, classes = {draw = none } ]
+\class["\mathbb{Z}"](0,3)
+\class["\mathbb{Z}"](1,1)
+\class["\mathbb{Z}"](1,0)
+\d["\cdot 2"]2(1,1)
+\replacetarget["\mathbb{Z}/2"] %\replaceclass["\mathbb{Z}/2"](0,3)
+\d[->>]3(1,0)
+\replacesource["2\mathbb{Z}"] % \replaceclass["2\mathbb{Z}"](1,0)
+\end{sseqdata}
+\printpage[ name = replace class example, page = 2 ] \qquad
+\printpage[ name = replace class example, page = 3 ] \qquad
+\printpage[ name = replace class example, page = 4 ]
+\end{codeexample}
+Note that this will not restore any structure lines coming into or off of the class, if you want the structure lines to persist, you must call |\structline| again (or use the |structline:page| option).
+\end{commandlist}
+
+\begin{commandlist}{{\classoptions\moptions\parargthreeopt{x}{y}{n}},\classoptions\moptions\pararg{classname}, \classoptions\moptions}
+This adds options to an existing class. This can be used in a \sseqpageenv\ environment to modify the appearance of a class for just one drawing of the spectral sequence, for instance to highlight it for discussion purposes.
+
+If there are multiple classes at the coordinate |(x,y)| you may specify which using an integer or a |tag| $n$. By default, this command will affect the first class placed in that position. You can also provide the |class:name| of a class. If no coordinate is indicated at all, then |\lastclass| is used.
+\begin{codeexample}[width = 6cm]
+\begin{sseqdata}[ name = class options example,
+ classes = fill ]
+\class(2,1)
+\foreach \x in {0,...,2} \foreach \y in {0,1} {
+ \class(\x,\y)
+}
+\end{sseqdata}
+\begin{sseqpage}[ name = class options example,
+ right clip padding = 0.6cm ]
+\classoptions[red](2,1,2) % Only is red on this page!
+\node[ background ] at (0.3,-2.2)
+ {\textup{The red class is the problem}};
+\end{sseqpage}
+\end{codeexample}
+Another reason to use this is to give a label to one instance of a class that shows up in a loop or a command defined using |\NewSseqGroup|:
+\begin{codeexample}[width = 6cm]
+\NewSseqGroup\mygroup {} {
+ \class(0,0)
+ \class(0,1)
+ \class(0,2)
+ \class(1,1)
+ \class(2,2)
+ \structline(0,0)(0,1)
+ \structline(0,1)(0,2)
+ \structline(0,0)(1,1)
+ \structline(1,1)(2,2)
+}
+\begin{sseqpage}[ classes = fill, class labels = { left = 0.3em } ]
+\mygroup(0,0)
+\mygroup(1,2)
+\classoptions["2"](0,1)
+\classoptions["\eta"](1,1)
+\end{sseqpage}
+\end{codeexample}
+See the \pgfmanualpdfref{class options}{class options} section for a list of the sort of options available for classes.
+\end{commandlist}
+
+\begin{commandlist}{
+ {\d\ooptions\meta{page}},
+ {\d\ooptions\meta{page}\pars{\meta{x},\meta{y}\opt{,\sourcen,\targetn}}},
+ {\d\ooptions\meta{page}\pars{\sourcename\opt{,\targetn}}},
+ {\d\ooptions\meta{page}\pars{\sourcecoord}\pars{\targetcoord}}%
+}
+Calling |\d\meta{page}|\parargtwo{x}{y} creates a differential starting at \parargtwo{x}{y} of length determined by the specified page. In order to use the |\d| command like this, you must first specify the |degree| of the differentials as an option to the \sseqdataenv\ or \sseqpageenv\ environment. The degree indicates how far to the right and how far up a page $\mathtt{r}$ differential will go as a function of $\mathtt{r}$. If there is a page $\mathtt{r}$ differential, on page $\mathtt{r+1}$, the source, target, and any structure lines connected to the source and target of the differential disappear. If no class is specified, the default is to use |\lastclass|.
+
+If there are multiple nodes in the source or target, you may specify which one the differential should go to using an index or tag for \sourcen\ or \targetn. It is also possible to provide the name of the source coordinate and an optional target, or to separately provide the source and target coordinate, either as names or as \parargthree{x}{y}{n}. Using |\d| with explicit source and target coordinates works even if you did not provide a |degree| to the spectral sequence. If you did provide a |degree|, then \sseqpages\ will check whether the difference between the source and target is appropriate for a differential of a given page, and if not it will throw an error. If this is undesirable, you can use the |lax degree| option.
+\begin{codeexample}[width = 7.5cm]
+\begin{sseqdata}[ name = d example, degree = {-1}{#1},
+ struct lines = blue, yscale = 1.3 ]
+\class(0,2)
+\class(1,2)
+\class(1,1)
+\class(1,0)
+\structline(1,2)(0,2)
+\structline(1,2)(1,1)
+\structline(1,1)(1,0)
+\d2(1,0)
+\end{sseqdata}
+\printpage[ name = d example, page = 2 ] \quad
+\printpage[ name = d example, page = 3 ]
+\end{codeexample}
+If there are multiple nodes in the source or target coordinate, then there is a funny syntax for indicating which one should be the source and target:
+|\d\meta{page}\pars{\meta{x},\meta{y}\opt{,\sourcen,\targetn}}|
+\begin{codeexample}[width = 7.5cm]
+\begin{sseqpage}[ Adams grading, yscale = 0.8 ]
+\class(1,0) \class(1,0)
+\class(0,2) \class(0,2)
+\d2(1,0,1,2)
+\class(2,0) \class(2,0)
+\class(1,2)
+\d2(2,0,2)
+\class(3,0)
+\class(2,2) \class(2,2)
+\d2(3,0,,2)
+\end{sseqpage}
+\end{codeexample}
+Negative indices will count from the most recent class in the coordinate (so the most recent is |-1|, the second most recent is |-2|, etc). You can also use a |tag|, which works better if the situation is complicated.
+\begin{codeexample}[width = 7.5cm]
+\begin{sseqpage}[ Adams grading, yscale = 0.65 ]
+\class(1,0)
+\class(0,2) \class(0,2)
+\d[blue]2(1,0,-1,-1)
+\class(1,0)
+\class(0,2)
+\d[orange]2(1,0,-1,-1)
+\class(1,0)
+\d[red]2(1,0,-1,-2)
+\end{sseqpage}
+\end{codeexample}
+\end{commandlist}
+
+\begin{commandlist}{
+ {\doptions\moptions\meta{page}\pars{\meta{x},\meta{y}\opt{,\sourcen,\targetn}}},
+ {\doptions\moptions\meta{page}\pars{\sourcename\opt{,\targetn}}},
+ {\doptions\moptions\meta{page}\pars{\sourcecoord}\pars{\targetcoord}}%
+}
+This command adds options to an existing differential, just like |\classoptions| except for differentials. Its syntax is identical to that of |\d|.
+\end{commandlist}
+
+\begin{command}{\kill\meta{page}\oarg{coord}}
+This command sets the indicated coordinate to die on the indicated page, but does not establish a target for the differential. This is useful if you want to draw your own differential using tikz (see |\getdtarget|) or if you are not drawing the class on the other side of the differential for clutter reasons. As usual, if no coordinate is provided, the default argument is |\lastclass|.
+\end{command}
+
+\begin{command}{\structline\ooptions\opt{\pars{\sourcecoord}\pars{\targetcoord}}}
+This command creates a structure line from \sourcecoord\ to \targetcoord. The source and target coordinates are either of the form \pars{\meta{x},\meta{y}\opt{,\meta{n}}} or \pararg{class name}. If there are multiple classes at $\mathtt{(x,y)}$, then \meta{n} specifies which of the classes at $\mathtt{(x,y)}$ the structure line starts and ends at -- if n is positive, then it counts from the first class in that position, if n is negative, it counts backwards from the most recent. You can also use a |tag| for n. If the \targetcoord\ is omitted, then |\lastclass| is used, so that |\structline(\sourcecoord)| connects the most recent class to the specified coordinate. If both coordinates are omitted, then |\lastclass| and |\lastclass1| are used, and so |\structline| with no arguments at all will connect the two most recent classes.
+
+If the source or target of a structure line is hit by a differential, then on subsequent pages, the structure line disappears.
+
+If the source or target has had multiple generations (i.e., they got hit and you used |\replaceclass|), then the |\structline| will only appear starting on the first page where the current generation of both the source and target are present. If this is undesirable, you can use the |structline:page| option to change it.
+\begin{codeexample}[width = 7.5cm]
+\DeclareSseqGroup\tower {} {
+ \class(0,0)
+ \foreach \y in {1,...,5} {
+ \class(0,\y)
+ \structline
+ }
+ \class(0,2)
+ \structline(0,1,-1)
+ \structline(0,3,-1)
+}
+\begin{sseqdata}[ name = structline example,
+ classes = { circle, fill },
+ Adams grading, no axes,
+ yscale = 1.28 ]
+\class(1,1) \class(1,2)
+\class(2,3) \class(2,3) \class(2,5)
+\tower[classes = blue](0,0)
+\tower[struct lines = dashed,orange](1,0)
+\tower[struct lines = red](2,0)
+\d2(1,1,2)
+\end{sseqdata}
+\printpage[ name = structline example, page = 2 ] \quad
+\printpage[ name = structline example, page = 3 ]
+\end{codeexample}
+\end{command}
+
+\begin{command}{\structlineoptions\moptions\opt{\pars{\sourcecoord}\pars{\targetcoord}}}
+This command adds options to an existing structure line, just like |\classoptions| except for structure lines. Its syntax is identical to |\structline|.
+\end{command}
+
+\begin{command}{\circleclasses\ooptions\pars{\sourcecoord}\pars{\targetcoord}}
+This command is a lot like |\structline| except that it puts a circle around the classes instead of connecting them with a line. It might take a certain amount of fiddling with options to get |\circleclasses| to produce good results. There is no |\circleclassesoptions| command because it doesn't seem necessary and (more importantly) I didn't feel like making one. Maybe someday I'll put one in.
+\end{command}
+
+\begin{commandlist}{\draw,\path,\node,\clip}
+Any code that would work in a \tikzpictureenv\ environment will also work unchanged in a \sseqdataenv\ or \sseqpageenv\ environment, with a few minor differences. This is a very flexible way to add arbitrary background or foreground features to the spectral sequence:
+\codeexample[from file=tikz]
+\end{commandlist}
+
+
+\section{Options for the main commands}
+\subsection{Universal options}
+The following options work with all of the drawing commands in this package, including |\class|, |\d|, and |\structline|, their friends |\replaceclass|, |\classoptions|, |\doptions|, and |\structlines|, as well as with \tikzpkg\ primitives.
+\begin{keylist}{xshift = \meta{integer},yshift = \meta{integer}}
+Shifts by integer values are the only coordinate changes that are allowed to be applied to |\class|, |\d|, |\structline|, their relatives, or to a \scopeenv\ environment that contains any of these commands. These shift commands help with reusing code. For instance:
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ cohomological Serre grading, yscale = 0.45 ]
+\foreach \x in {0,1} \foreach \y in {0,1} {
+ \begin{scope}[ xshift = \x, yshift = \y ]
+ \class(2,0)
+ \class(0,1)
+ \d2(0,1)
+ \end{scope}
+}
+\end{sseqpage}
+\end{codeexample}
+This code segment is very useful so \sseqpages\ has the command |\NewSseqGroup| which to make code like this more convenient. The following code produces the same output as above:
+\begin{codeexample}[code only,width = 6cm]
+\NewSseqGroup\examplegroup {} {
+ \class(2,0)
+ \class(0,1)
+ \d2(0,1)
+}
+\begin{sseqpage}
+\examplegroup(0,0)
+\examplegroup(0,1)
+\examplegroup(1,0)
+\examplegroup(1,1)
+\end{sseqpage}
+\end{codeexample}
+
+
+A word of warning: the behavior of |xshift| in \sseqpages\ is incompatible with the normal behavior of |xshift| in \tikzpkg. For some reason, saying |xshift = 1| in \tikzpkg\ does not shift the coordinate |(0,0)| to the coordinate |(1,0)| -- instead it shifts by 1pt. In \sseqpages\ , saying |xshift = 1| moves the coordinate |(0,0)| to the coordinate |(1,0)|. This includes \tikzpkg\ primitives: saying \codeverb|\draw[ xshift = 1 ] (0,0) -- (1,0);| inside a \sseqdataenv\ or \sseqpageenv\ environment is the same as saying \codeverb|\draw(1,0) -- (2,0);| despite the fact that this is not the case in the \tikzpictureenv\ environment.
+\end{keylist}
+
+\begin{manualentry}{Colors}
+These come from the \LaTeX\ \colorpkg\ package via \tikzpkg, so see the \href{\colormanualurl}{\colorpkg\ package documentation} for more information.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ classes = {fill,inner sep = 0.4em},
+ no axes, scale = 1.3 ]
+\class[red](0,0)
+\class[blue](1,0)
+\class[green](2,0)
+\class[cyan](0,1)
+\class[magenta](1,1)
+\class[yellow](2,1)
+\class[blue!50!red](0,2) % a 50-50 blend of blue and red
+\class[green!30!yellow](1,2) % 30% green, 70% yellow
+\class[blue!50!black](2,2)
+\end{sseqpage}
+\end{codeexample}
+\end{manualentry}
+
+\begin{manualentry}{\pgfmanualpdflabel{""quotes}{}|"|\meta{text}|"|\opt{\meta{options}}}
+Specify a label for a class, a differential, or a structure line. This uses the \tikzpkg\ quotes syntax. If the label text includes an equal sign or comma, you need to enclose the entire label in braces, e.g., \codeverb|\class["{x = y}"](0,0)|. The options include anything you might pass as an option to a \tikzpkg\ node, including arbitrary coordinate transforms, colors, opacity options, shapes, fill, draw, etc. The behavior is a little different depending on whether you use it on a class or on a differential or structure line.
+
+For a class, the \meta{text} is placed in the position |inside| the node by default -- in effect, the \meta{text} becomes the label text of the node (so saying |\class["label text"](0,0)| causes a similar effect to saying |\node at (0,0) {label text};|). There are other position options such as |left|, |above left|, etc which cause the label text to be placed in a separate node positioned appropriately. If the placement is above, left, etc, then any option that you may pass to a \tikzpkg\ node will also work for the label, including general coordinate transformations. If the placement is ``inside'', then the only relevant \opt{\meta{options}} are those that alter the appearance of text, such as opacity and color.
+\begin{codeexample}[width = 4cm]
+\begin{sseqpage}[ classes = { minimum width = width("a") + 0.5em }, no axes ]
+\class["a"](0,0)
+\class["a", red](1,0)
+\class["a" black, red](2,0)
+\class["b" above](0,1)
+\class["b" { below right, yshift = 0.1cm }](1,1)
+\class["a" { above right = {1em} }](2,1)
+\end{sseqpage}
+\end{codeexample}
+You can adjust the default behavior of class labels using the |labels| style option or its relatives |class labels|, |inner class labels| or |outer class labels|.
+Note that it is also possible to give a label to a |\node| this way, although the behavior is slightly different. In particular, the label defaults to the |above| position instead of going in the |\node| text by default. Also, this won't respect the various label style options like |labels|, etc.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ no axes ]
+\class(0,0)
+\class(2,0)
+\node[circle, fill, "a"] at (1,0) {};
+\end{sseqpage}
+\end{codeexample}
+
+\begin{key}{pin = \meta{style}}
+The |pin| key makes \sseqpages\ draw a line connecting the label to the relevant class, which can provide necessary clarification in dense diagrams. The pin key itself can take options which adjust the way that the line is drawn:
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}
+\class(0,0)
+\class["xy" { above, xshift = -4pt, pin = red }](0,0)
+\class(0,0)
+\class(0,1)
+\structline
+\end{sseqpage}
+\end{codeexample}
+\end{key}
+
+
+For either a |\structline| or a |\class| the label normally goes on the right side of the edge. The special option |'| makes it go in the opposite position from the default. I imitated the label handling in the \tikzcdpkg\ package, so if you use \tikzcdpkg, this should be familiar.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ Adams grading, yscale = 0.63 ]
+\class(0,0)
+\class(0,1)
+\class(0,2)
+\structline["a"' blue](0,0)(0,1)
+\class(1,0)
+\class(1,1)
+\structline["b"](1,0)(1,1)
+\d[ "\cdot 2" { pos = 0.7, yshift = -5pt } ] 2 (1,0)
+\end{sseqpage}
+\end{codeexample}
+You can use the style options |labels|, |edge labels|, |differential labels|, and |struct line labels| to adjust the styling of edge labels. For instance, if you would prefer for the labels to default to the left hand side of the edge rather than the right hand side, you could say |edge labels = {auto = left}|.
+You can also use quotes to label edges drawn with \tikzpkg\ primitives:
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ yscale = 0.58, no axes ]
+\class(0,0)
+\class(1,1)
+\draw (1,0) to["hi"'{ pos = 0.7, yshift = -0.5em }] (0,1);
+\end{sseqpage}
+\end{codeexample}
+
+\needspace{3\baselineskip}
+\begin{key}{description}
+The |description| key, stolen from \tikzcdpkg, places the label on top of the edge. In order to make this option work correctly, if the background coolor is not the default white, you must inform \sseqpages\ about this using the key |background color = |\meta{color}. In this document, the background color is called \textit{graphicbackground}.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ no axes, background color = graphicbackground ]
+\foreach \x in {0,1,2} \foreach \y in {0,1} {
+ \class(\x,\y)
+}
+\structline["a" red](0,0)(0,1)
+\structline["a'"'blue,"b"{yshift = 1em}](1,0)(1,1)
+\structline["c" description](2,0)(2,1)
+\end{sseqpage}
+\end{codeexample}
+\end{key}
+\end{manualentry}
+
+
+
+\subsection{Options for \sectionstring\class}\pgfmanualpdflabel{class options}{}
+Because the main job of the |\class| command is to print a \tikzpkg\ |\node| on the appropriate pages of the spectral sequence, most options that would work for a \tikzpkg\ node also work for the commands |\class|, |\replaceclass|, and |\classoptions|. Here are a few that you might care about:
+\begin{manualentry}{A \tikzpkg\ shape}
+If you give the name of a \tikzpkg\ shape, the class node will be of that shape. The standard \tikzpkg\ shapes are |circle| and |rectangle|. \sseqpages\ defines two new shapes:
+\begin{key}{circlen = \meta{n}}
+This draws $n$ concentric circles. It's intended for indicating a $\mathbb{Z}/p^n$ summand. For large values of $n$ the result isn't all that appealing.
+\begin{codeexample}[]
+\begin{sseqpage}[ no axes ]
+\class[circlen = 2](0,0)
+\class[circlen = 2,fill](1,0)
+\class[circlen = 3](0,1)
+\class[circlen = 4](1,1)
+\end{sseqpage}
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{newellipse,ellipse ratio = \meta{ratio}}
+This shape is used for |\circleclasses|. It's a variant on the |ellipse| shape that gives more control over the ellipse's aspect ratio.
+\end{keylist}
+
+There are many more \tikzpkg\ shapes in the shapes library, which you can load using the command |\usetikzlibrary{shapes}|. The following are some examples:
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ no axes, classes = { inner sep = 0.4em },
+ class placement transform = { scale = 1.8 },
+ yscale = 1.63 ]
+\class(0,0)
+\class[isosceles triangle](2,0)
+\class[rectangle](1,0)
+\class[diamond](0,1)
+\class[semicircle](1,1)
+\class[regular polygon, regular polygon sides = 5](2,2)
+\class[regular polygon, regular polygon sides = 6](2,2)
+\class[regular polygon, regular polygon sides = 7](2,2)
+\class[regular polygon, regular polygon sides = 8](2,2)
+\end{sseqpage}
+\end{codeexample}
+See the \href{\pgfmanualurl#section.49}{\tikzpkg\ manual} for more information.
+\end{manualentry}
+
+\begin{keylist}{minimum width = \meta{dimension}, minimum height = \meta{dimension}, minimum size = \meta{dimension}, inner sep = \meta{dimension}, outer sep = \meta{dimension}}
+These options control the size of a node. This is typically useful to make the size of nodes consistent independent of the size of their label text. For instance:
+\begin{codeexample}[width = 5cm]
+\begin{sseqdata}[ name = minimum width example, no axes, yscale = 0.8 ]
+\class["ab"](0,0)
+\class["a"](0,1)
+\class(0,2)
+\end{sseqdata}
+\printpage[ name = minimum width example ]
+\printpage[ name = minimum width example,
+ change classes = { blue, minimum width = width("ab") + 0.5em } ]
+\end{codeexample}
+\end{keylist}
+
+\begin{key}{class:name = \meta{node name}}
+The |\class| command makes a \tikzpkg\ node on appropriate pages. You can refer to this node using \tikzpkg\ commands by using its coordinates. Using the |class:name| option, you can give the node a name, which you can use to refer to the class. Using names creates more readable code. The |show name| option can be used to display the names of classes. You can modify the names of classes systematically using the options |class name prefix|, |class name postfix|, and |class name handler|.
+
+Named classes are immune to coordinate transformations. For example, in the following code, |xshift| does not apply to the nodes specified by |(id)| and |(eta)| but does apply to the coordinate specified by |(1,1)|:
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[classes = { show name=above }]
+\class[class:name = 1](0,0)
+\class[class:name = \eta](1,1)
+\class(2,1)
+\structline[xshift = 1] (1) (\eta)
+\structline[xshift = 1,blue] (1) (1,1)
+\end{sseqpage}
+\end{codeexample}
+\end{key}
+
+\begin{key}{show name = \meta{label options}}
+\declareasstyle{show name}
+This option is like saying |"class name"\marg{label options}| if the class has a name, and does nothing if the class has no name. If the class has multiple names, only the most recent is used. This is particularly useful with class styles, . For instance, by saying |this page classes = { show name = above }| you can display names of all of the sources and targets of differentials on each page.
+\begin{codeexample}[width=7cm]
+\begin{sseqdata}[
+ name = show name example,
+ this page classes = { show name = { above right, pin } }
+]
+\class[ name = a ](0,2)
+\class[ name = b ](0,3)
+\class[ name = x ](1,0)
+\d2(x)(a)
+\replacesource[name=2x]
+\d3(x)(b)
+\end{sseqdata}
+
+\printpage[ name = show name example, page = 2]
+
+\printpage[ name = show name example, page = 3]
+\end{codeexample}
+\end{key}
+
+\begin{key}{tag = \meta{tag}}
+This key adds a tag to the current class. Tags are used for identifying which of multiple classes in the same position you are referring to. They are useful when you have groups of related classes and want a family of differentials connecting them. For instance:
+\begin{codeexample}[width = 8cm]
+\DeclareSseqGroup\tower {} {
+ \class(0,0)
+ \foreach \i in {1,...,11} {
+ \class(0,\i)
+ \structline(0,\i-1,-1)(0,\i,-1)
+ }
+}
+\NewSseqGroup\hvee {} {
+ \tower(0,0)
+ \foreach \i in {1,...,11} {
+ \class(\i,\i)
+ \structline(\i-1,\i-1,-1)(\i,\i,-1)
+ }
+}
+\begin{sseqpage}[ degree = {-1}{1}, yscale = 1.1,
+ x range = {0}{5}, y range = {0}{5} ]
+\tower(3,0)
+\hvee[ tag = id ](0,0)
+\hvee[ tag = h21 ](4,2)
+\foreach \n in {0,...,5} {
+ \d2(4+\n,2+\n,h21,id)
+}
+\end{sseqpage}
+\end{codeexample}
+We want each differential to go from the |h21| vee to the |id| vee, independent of which classes are in the same position of the two vees. The easy way to accomplish this is by giving tags to each of the two vees.
+\end{key}
+
+\begin{key}{insert = \meta{integer}}
+If there are multiple classes in the same position, this option allows you to insert classes later into earlier positions. This is intended to help you put logically related classes next to each other. If the integer is positive, it inserts the class in the specified position, and if the integer is negative, it counts backwards from the end. Providing |0| is the same as omitting the option entirely. Values larger in absolute value than the total number of classes are truncated. Consider:
+\codeexample[from file=insert]
+\end{key}
+
+\begin{key}{offset = \{\pars{\meta{x offset},\meta{y offset}}\}}
+By default, a class uses the offset specified by |class pattern|. Occasionally this is undesirable. In this case, you can specify the offset for a particular class by hand. For example if the sum of two classes is hit by a differential, it looks better for the class replacing them to be centered:
+\begin{codeexample}[width = 9cm]
+\begin{sseqdata}[ name = offset example,
+ xscale = 0.7,
+ Adams grading,
+ class placement transform = {scale = 1.8} ]
+\class(0,1)
+\class(0,2)\class(0,2)
+\draw(0,1)--(0,2);
+\class(1,0)
+\d2(1,0,,1)
+\replacetarget
+\d2(1,0,,2)
+\end{sseqdata}
+\printpage[name = offset example, page=2]
+\printpage[name = offset example, page=3]
+\begin{sseqpage}[name = offset example, page=3]
+\classoptions[offset = {(0,0)}](0,2)
+\end{sseqpage}
+\end{codeexample}
+\end{key}
+
+\begin{key}{tooltip = \meta{text}}
+This key generates a ``tooltip'' over the given class. That is, if you hover your mouse over it, a little window will popup with the tooltip text. This is particularly useful to give the coordinates or names of classes in large charts where it may be hard to tell from looking at the picture what position the class is in, or there may not be room to supply names to classes.
+
+The tooltip is made using the |\pdftooltip| command from the |pdfcomment| package. The |pdfcomment| package generates two extra auxiliary files, so it is not included by default. In order to use the |tooltip| option, you have to use the |tooltips| package option (e.g., load \sseqpages\ with |\usepackage[tooltips]{spectralsequences}|). This cannot handle math, but it will print math expressions into \TeX\ input form. Not all pdf viewers will display the tooltip correctly. If this concerns you, the command |\sseqtooltip| is used to produce the tooltip, and you can redefine it as any other command that takes |\sseqtooltip|\marg{text}\marg{tooltip text} and produces a tooltip. For instance, on \href{https://tex.stackexchange.com/a/164186/23866}{this stack exchange post}, there is code that supposedly produces tooltips that work with Evince. I have not tested whether it works by itself or whether it works with my package, but you could. You could potentially figure out how to get math to work in tooltips too -- if you find a satisfactory method, please let me know.
+
+Anyways, here's an example:
+\begin{codeexample}[]
+\begin{sseqpage}[classes = {tooltip = {(\xcoord,\ycoord)}}]
+\class(0,0)
+\class(0,1)
+\class(1,0)
+\class(1,1)
+\end{sseqpage}
+\end{codeexample}
+
+There's another example at the beginning of the section on the \hyperref[sec:class stack]{class stack}.
+\end{key}
+
+\begin{keylist}{class:page = \meta{page}\opt{-{}-\meta{page max}},generation = \meta{generation}\opt{-{}-\meta{generation max}}}
+\def\classpagehandler#1#2{\textcolor{keycolor}{\noligs{#2}}}
+\declarecustomhandler{class:page}{\classpagehandler}
+These options only work in |\classoptions|. The |page| option gives a range of pages for which the options apply to. If only one page is specified, it is the minimum page and the option applies to all larger pages.
+\begin{codeexample}[width = 6cm]
+\begin{sseqdata}[ name = page_example, no axes,
+ title = \page, title style = {yshift = -0.5cm} ]
+\class(0,0)
+\classoptions[class:page = 2 -- 3, fill, blue](0,0)
+\end{sseqdata}
+
+\printpage[ name = page_example, page = 1 ] \qquad
+\printpage[ name = page_example, page = 2 ] \qquad
+\printpage[ name = page_example, page = 4 ]
+\end{codeexample}
+A ``generation'' of a class is the interval from one call of |\class| or |\replaceclass| to the page on which it next supports or is hit by a differential.
+By default the |\classoptions| command adds options only to the most recent generation of the class in a \sseqdataenv\ environment, or on the generation appropriate to the current page in a \sseqpageenv\ environment. Using the |generation| option allows you to provide a single generation or range of generations of the class that the options should apply to. The first generation is generation 0, and the most recent generation is generation -1. Larger negative values count backwards.
+\codeexample[from file=class-page2a]
+\codeexample[from file=class-page2b]
+\end{keylist}
+
+\begin{commandlist}{\xcoord,\ycoord}
+These commands represent the $\mathtt{x}$ and $\mathtt{y}$ coordinate of the current class when used in class options. The only use I have for them is in the |tooltip| option, but maybe there is some other purpose for them.
+\end{commandlist}
+
+
+\subsection{Options for \sectionstring\d\ and \sectionstring\structline}
+Because the main job of the |\d| and |\structline| commands is to print an edge on the appropriate pages of the spectral sequence, most \tikzpkg\ options that you could apply to a \tikzpkg\ ``to'' operator (as in |\draw (x1,y1) to (x2,y2);|) can be applied to both |\d| and |\structline|. Some such options are as follows:
+
+\begin{keylist}{source anchor = \meta{anchor}, target anchor = \meta{anchor}}
+Because you can't use the normal \tikzpkg\ mechanism for specifying the source and target anchors, \sseqpages\ has these two keys for |\d| and |\structline|:
+\begin{codeexample}[width = 4cm]
+\begin{sseqpage}[ no axes, yscale = 1.24 ]
+\foreach \x in {0,1} \foreach \y in {0,1} {
+ \class(\x,\y)
+}
+\structline(0,0)(0,1)
+\structline[ source anchor = north west, target anchor = -30 ](1,0)(1,1)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+
+\begin{keylist}{shorten > = \meta{distance}, shorten < = \meta{distance}}
+These behave exactly like the corresponding options from \tikzpkg\ , shortening the end and beginning of the edge respectively. Note that you can lengthen the edge by shortening by a negative amount.
+\end{keylist}
+
+\begin{manualentry}{Dash patterns:}
+See the \href{\pgfmanualurl#subsubsection.15.3.2}{\tikzpkg\ manual} for a complete explanation of the dash pattern related options. Some examples:
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ no axes, yscale = 1.6 ]
+\foreach \x in {0,1,2} \foreach \y in {0,1} {
+ \class(\x,\y)
+}
+\structline[densely dotted](0,0)(0,1)
+\structline[dashed, red, "a"](1,0)(1,1)
+\structline[dash dot, red, "a" black](2,0)(2,1)
+\end{sseqpage}
+\end{codeexample}
+%
+\end{manualentry}
+
+\begin{keylist}{bend left = \meta{angle}, bend right = \meta{angle}, *in = \meta{anchor}, *out = \meta{anchor}}
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[no axes,yscale = 1.6]
+\foreach \x in {0,1,2} \foreach \y in {0,1} {
+ \class(\x,\y)
+}
+\structline[bend left = 20](0,0)(0,1)
+\structline[bend right = 20](1,0)(1,1)
+\structline[in = 20, out = north](2,0)(2,1)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+%\begin{key}{invisible}
+%This key is only for |\d|. It prevents a differential from being drawn at all. The typical reason you might want this is so that you can draw your own differential using \tikzpkg\ commands. See |\getdtarget| for an example of this.
+%\end{key}
+
+\begin{key}{structline:page = \meta{page}\opt{-{}-\meta{page max}}}
+This key is only for |\structline| and |\structlineoptions|. By default, the |\structline| command only adds a structure line starting on the page where the most recent generation of the source or target is born:
+
+\begin{codeexample}[width = 7.6cm]
+\begin{sseqdata}[ name = structpage example,
+ title = \page, yscale = 0.53 ]
+\class(0,2)
+\class(0,4)
+\class(1,0)
+\class(1,1)
+\d2(1,0)(0,2) \replacesource
+\d3(1,1)(0,4) \replacesource
+\structline(1,0)(1,1)
+\end{sseqdata}
+\printpage[name = structpage example,page = 3]
+\qquad
+\printpage[name = structpage example,page = 4]
+\end{codeexample}
+
+By specifying a page number, you can adjust which page the |\structline| starts on:
+
+\begin{codeexample}[]
+\begin{sseqdata}[ name = structpage example2, title = \page, yscale = 0.5 ]
+\class(0,2)
+\class(0,4)
+\class(1,0)
+\class(1,1)
+\d2(1,0)(0,2) \replacesource
+\d3(1,1)(0,4) \replacesource
+\structline[structline:page = 2](1,0)(1,1)
+\end{sseqdata}
+\printpage[ name = structpage example2, page = 1 ]
+\qquad
+\printpage[ name = structpage example2, page = 2 ]
+\qquad
+\printpage[ name = structpage example2, page = 3 ]
+\qquad
+\printpage[ name = structpage example2, page = 4 ]
+\end{codeexample}
+
+Similarly, for |\structlineoptions| you can specify a minimum page on which to apply the options, or a range of pages.
+\end{key}
+
+\subsection{Options for \sectionstring\circleclass}
+\begin{key}{fit = \meta{coordinates or nodes}}
+The |\circleclasses| command uses the \href{\pgfmanualurl#section.52}{\tikzpkg\ fitting library}. Sometimes it's desirable to make the resulting node fit extra things, for example a label. It doesn't necessarily end up looking great though.
+\begin{codeexample}[]
+\begin{sseqpage}[ Adams grading, axes gap = 0.7cm ]
+\class(0,2)
+\class(1,0)
+% Fit in the label x and also a symmetric invisible label to maintain symmetry
+\d["x"{name = x}, "x"'{name = x', opacity = 0}]2(1,0)
+\circleclasses[fit = (x)(x'), rounded rectangle](1,0)(0,2)
+\end{sseqpage}
+\end{codeexample}
+\end{key}
+
+\begin{key}{rounded rectangle}
+You can put a shape as an option and it will change the shape of the node drawn by |\circleclasses|. Any shape will do, but I think that an |ellipse| or |rounded rectangle| are the only particularly appealing options.
+\end{key}
+
+\begin{key}{ellipse ratio = \meta{ratio} (initially 1.2)}
+By default, the shape drawn by |\circleclasses| is a ``newelipse'' which is a custom defined shape that respects the option |elipse ratio| which roughly controls how long and skinny versus short and fat the ellipse is. If you find that the ellipse is too long, try a larger value of this option, and conversely if it's too fat try a smaller value. If no value is satisfactory, try out the |rounded rectangle| shape. (This is stolen from the following stack exchange answer: \url{https://tex.stackexchange.com/a/24621}.)
+\end{key}
+
+\begin{keylist}{cc:class style,cc:permanent cycle style,cc:transient cycle style,cc:this page class style,cc:differential style,cc:struct line style}
+See the \pgfmanualpdfref{class style}{corresponding entry} in the \tikzpkg\ primitives section.
+\end{keylist}
+
+\begin{key}{cc:page = \meta{page}\opt{-{}-\meta{page max}}}
+By default, the ellipse will be drawn on the same set of pages that a structure line between the two classes would be drawn on. This specifies a range of pages for the ellipse to be drawn. Note that unlike with structure lines, you can instruct |\circleclasses| to draw the shape even on pages where one or both of the classes that it is fitting are dead.
+\end{key}
+
+\subsection{Options for \tikzpkg\ primitives}
+\begin{key}{background}
+This key instructs \sseqpages\ to put the current \tikzpkg\ primitive in the background. The way that the spectral sequence is printed is as follows:
+\begin{itemize}
+\item The title, axes, axes ticks, and axes labels are printed (the appropriate steps are skipped when the |no title|, |no axes|, |no ticks|, or |no labels| keys are used or if no title or axes labels are provided).
+
+\item The \tikzpkg\ background paths are printed.
+
+\item The clipping is inserted (unless the |no clip| key is used).
+
+\item All foreground elements (classes, differentials, structure lines, and normal \tikzpkg\ paths) are printed.
+\end{itemize}
+
+In particular, this means that foreground \tikzpkg\ paths can be clipped by the standard clipping, but background paths that are outside of the clipping expand the size of the \tikzpkg\ picture.
+\begin{codeexample}[]
+\begin{sseqpage}[ no ticks, yscale = 0.9, math nodes = false ]
+\class(0,0)
+\class(1,1)
+\begin{scope}[background]
+\draw(0.1,0.1)--(1.1,1.1);
+\end{scope}
+\node[background] at (0.5,-1) {not clipped};
+\node at (0.5,-0.4) {clipped};
+\end{sseqpage}
+\end{codeexample}
+Here is an example where \tikzpkg\ labels with the |background| key are used to add labels and a grid. Note that this styling is easier to make using the |title|, |x label|, |y label|, and |grid| options.
+\begin{codeexample}[]
+\begin{sseqdata}[ name = tikz background example, cohomological Serre grading, classes = fill ]
+\begin{scope}[background]
+\node at (\xmax/2,\ymax+1.2) {\textup{Page \page}};
+\node at (\xmax/2,-1.7) {H^*(B)};
+\node[rotate = 90] at (-1.5,\ymax/2) {H^*(F)};
+\draw[step = 1cm, gray, very thin] (\xmin-0.5,\ymin-0.5) grid (\xmax+0.4,\ymax+0.5);
+\end{scope}
+\class(0,0)
+\class(3,0)
+\class(0,2)
+\class(3,2)
+\d3(0,2)
+\end{sseqdata}
+\printpage[name = tikz background example, page = 2]
+\printpage[name = tikz background example, page = 3]
+\end{codeexample}
+
+For this particular use case, it's probably better to use |title|, |x label|, and |y label|:
+\begin{codeexample}[]
+\begin{sseqdata}[ name = tikz background example2, cohomological Serre grading, classes = fill,
+ grid = go, title = { Page \page }, x label = { $H^*(B)$ }, y label = { $H^*(F)$ } ]
+\class(0,0)
+\class(3,0)
+\class(0,2)
+\class(3,2)
+\d3(0,2)
+\end{sseqdata}
+\printpage[name = tikz background example2, page = 2]
+\printpage[name = tikz background example2, page = 3]
+\end{codeexample}
+
+But if you need more flexible labeling, you'll likely want to use tikz primitives with |background|. See \example{KF3} for an instance where this key is useful.
+
+One useful tip is that you can ensure consistent bounding boxes between different diagrams using |\path[background] (smallest x, smallest y) -- (largest x, largest y);|:
+\begin{codeexample}[]
+\begin{sseqdata}[ name = boundingboxex, x range = {0}{2}, y range = {0}{2}, scale = 0.5 ]
+\end{sseqdata}
+\printpage[ name = boundingboxex, title = not aligned ]
+\quad
+\printpage[ name = boundingboxex, x label = Hi ]
+\qquad
+\begin{sseqpage}[ name = boundingboxex, keep changes, title = aligned ]
+\path[background] (\xmin,\ymin-4) -- (\xmax,\ymax+2);
+\end{sseqpage}
+\quad
+\printpage[ name = boundingboxex, x label = Hi, title = {} ]
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{page constraint = \meta{predicate}, page constraint or = \meta{predicate}}
+\declarecustomhandler{page constraint}{\codehandler}
+This places a constraint on the pages in which the \tikzpkg\ primitive is printed. This predicate should look something like
+\texttt{(\string\page\ <= 4)} |&&| \texttt{(\string\page\ >= 3)}. The predicate is anded together with any previous predicates, so that you can use this as an option for a \scopeenv\ and again for the individual \tikzpkg\ primitive.
+
+\begin{commandlist}{\isalive\pararg{coordinate},\isalive\{\pararg{coordinate 1}$\cdots$\pararg{coordinate n}\}}
+This command can only be used with |page constraint|. Saying
+\[|page constraint = {\pars{\meta{x},\meta{y}\opt{,}\oarg{index}}}}}|\]
+will print the \tikzpkg\ primitive only on pages where the specified class is alive. Saying
+\[|page constraint = {\isalive(\meta{coordinate 1})|\,\cdots\,|(\meta{coordinate n})}|\]
+is equivalent to
+\[|page constraint = {\isalive\pararg{coordinate 1} &&|\,\cdots\,|&& \isalive\pararg{coordinate n}}|\]
+Writing
+\[\codeverb|\draw[page constraint = {\isalive(1,0)(2,2)}](1,0)|\texttt{-{}-}|(2,2);|\]
+is the same as |\structline(1,0)(2,2)|, except that you can't later use |\structlineoptions| on it (and it won't have the |struct lines| style applied).
+\end{commandlist}
+\end{keylist}
+
+\begin{keylist}{class style,permanent cycle style,transient cycle style,this page class style,differential style,struct line style}
+These classes apply the styling of the corresponding element to your \tikzpkg\ commands.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ differentials = blue, yscale = 0.65, no axes ]
+\class(0,2)
+\class(1,0)
+% This will be styled as if it were a differential
+\draw[differential style] (1,0) -- (0,2);
+\end{sseqpage}
+\end{codeexample}
+See |\getdtarget| for a more natural example.
+\end{keylist}
+
+
+
+\section{Miscellaneous Commands}
+\subsection{Settings}
+\begin{command}{\sseqset\marg{keys}}
+The |\sseqset| command is for adjusting the global options for all spectral sequences in the current scope, or for applying options to the rest of the current spectral sequence. For instance, if most of the spectral sequences in the current document are going to be Adams graded, you can say |\sseqset{Adams grading}| and all future spectral sequences in the current scope will have Adams grading (unless you specify a different grading explicitly). As another example, |\sseqset{no axes}| will suppress axes from spectral sequences in the current scope. Note that defaults only apply to new \sseqdataenv\ environments or to unnamed \sseqpageenv\ environments; they won't apply to existing spectral sequences.
+
+You can also use |\sseqset| to create styles to be used in spectral sequences.
+\begin{keylist}{
+ .global sseq style = \meta{keys},
+ .global sseq append style = \meta{keys},
+ .sseq style = \meta{keys},
+ .sseq append style = \meta{keys}
+}
+These handlers create reusable styles to be used in spectral sequences. If this style is a set of global options, then use the |.global sseq style| handler, whereas if it is supposed to be applied to individual features (classes, differentials, structure lines, circle classes, and tikz primitives) then use the |.sseq style| handler.
+\begin{codeexample}[width=6cm]
+\sseqset{
+ mysseq/.global sseq style = {
+ Adams grading, title = Page \page,
+ x range = {0}{4}, y range = {0}{2},
+ xscale = 0.5, yscale = 1.35
+ },
+ htwostruct/.sseq style = { gray, thin }
+}
+\begin{sseqpage}[ mysseq ]
+\class(0,0) \class(0,1) \class(0,2) \class(0,3)
+\class(3,1) \class(3,2) \class(3,3)
+\structline(0,0)(0,1) \structline(0,1)(0,2)
+\structline(0,2)(0,3)
+\structline(3,1)(3,2) \structline(3,2)(3,3)
+\structline[htwostruct](0,0)(3,1)
+\structline[htwostruct](0,1)(3,2)
+\structline[htwostruct](0,2)(3,3)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+\end{command}
+
+\begin{command}{\SseqErrorToWarning\meta{error-name}}
+Turns the error with the given name into a warning. An error message will start by saying \let\eatclnifpresent\empty|spectralsequences error: "error-name"|. This is the name you need to put into this command.
+\end{command}
+
+\begin{environment}{{quiet}}
+This environment quiets error messages that occur inside of it. \sseqpages\ is pretty good at error recovery, and so most of commands will fail gracefully and do nothing if their preconditions aren't met. If there are any parsing errors in the body of the |{quiet}| environment, prepare to see low level internal error messages. You might also run into bugs in \sseqpages\ -- the error recovery code hasn't been that carefully tested. If you do get low level error messages, remember to comment out the |{quiet}| environment before trying to debug.
+
+This is particularly useful for code reuse commands. Sometimes there is a source of long differentials that only applies to classes that haven't already supported shorter differentials. Sometimes there should be a structure line if a certain class exists, but it might not exist. In these cases, the |{quiet}| environment will help you out. See also |\DrawIfValidDifferential|, which is a variant of |\d| that behaves as if it were inside a |{quiet}| environment.
+\end{environment}
+
+\subsection{Code reuse commands}
+\begin{command}{\foreach }
+This command is from \tikzpkg\ and works in pretty much the same way in \sseqpages, though with slightly better variants. The |\foreach| command is very flexible and has a lot of variants. The basic usage is |\foreach \x in {\meta{xmin},...,\meta{xmax}} \marg{loop body}| which will execute |\meta{loop body}| with |\x| set to each value between \meta{xmin} and \meta{xmax} inclusive. If you want a step greater than 1, try |\foreach \x in {\meta{xmin},\meta{xmin}+\meta{xstep},...,\meta{xmax}} \marg{loop body}|.
+
+If you need to do multiple loops with a common body, you can just stack the |\foreach| commands:
+\begin{codeexample}[width=6cm]
+\begin{sseqpage}[ xscale = 0.5, x tick step = 2 ]
+\foreach \x in {0,2,...,6}
+\foreach \y in {0,...,3}{
+ \class(\x,\y)
+}
+\end{sseqpage}
+\end{codeexample}
+
+You can also loop through tuples, for instance:
+\begin{codeexample}[width=6cm]
+\begin{sseqpage}[ xscale = 0.5 ]
+\foreach \x/\y/\label in {0/1/a,1/1/b,0/0/c,1/0/d}{
+ \class["\label" above](\x,\y)
+}
+\end{sseqpage}
+\end{codeexample}
+See the last example for |normalize monomial| for a better example of this usage.
+
+There are tons of other things you can do with |\foreach|, though I haven't yet found need for them in combination with \sseqpages. See the \href{\pgfmanualurl#section.64}{\tikzpkg\ manual} for more details.
+\end{command}
+
+\begin{commandlist}{
+ \Do\marg{iterations}\meta{loop body},
+ \DoUntilOutOfBounds\meta{loop body},
+ \DoUntilOutOfBoundsThenNMore\marg{extra iterations}\meta{loop body},
+ \iteration
+}
+The one use case that |\foreach| doesn't cover all that well is if you want the loop to always repeat until the features you are drawing go off the page. This is what |\DoUntilOutOfBounds| and |\DoUntilOutOfBoundsThenNMore| are for. These help ensure that if you change the range of your chart, infinite families will automatically be drawn correctly without the need to adjust a bunch of loop bounds. The purpose of |\DoUntilOutOfBoundsThenNMore| is for towers that are receiving a differential. If your spectral sequence is Adams graded, and a tower is receiving a $d_r$ differential from another tower, you should use |\DoUntilOutOfBoundsThenNMore{r}|:
+\begin{codeexample}[width=7cm]
+\begin{sseqpage}[
+ Adams grading, classes = fill,
+ x range = {0}{10}, y range = {0}{6},
+ x tick step = 2,
+ xscale = 0.3,yscale = 0.7,
+ run off differentials = {->}
+]
+\class(0,0)
+\DoUntilOutOfBoundsThenNMore{3}{
+ \class(\lastx+1,\lasty+1)
+ \structline
+}
+\class(4,0)
+\d3
+\DoUntilOutOfBounds{
+ \class(\lastx+1,\lasty+1)
+ \structline
+ \d3
+}
+\end{sseqpage}
+\end{codeexample}
+You can also nest |\DoUntilOutOfBounds| reasonably:
+\begin{codeexample}[width=7cm]
+\begin{sseqpage}[
+ x range = {0}{6}, y range = {0}{6},
+ tick step = 2,
+ scale = 0.6
+]
+\class(0,0)
+\DoUntilOutOfBounds{
+ \class(\lastx+1,\lasty+1)
+ \structline
+ \DoUntilOutOfBounds{
+ \class(\lastx,\lasty+1)
+ \structline
+ }
+}
+\end{sseqpage}
+\end{codeexample}
+One important difference between |\foreach| and the |\Do| family of commands is that |\Do| has no effect on the stack. This is in order to ensure that they nest properly.
+
+Note that if you are using these commands and you are planning to draw several pictures of the chart with restricted range, you need to specify a range for the \sseqdataenv\ that contains all of the ranges of pages that you want to draw. If you then want to set a smaller default range, specify the smaller range the first time you use \sseqpageenv\ or |\printpage| to draw the spectral sequence, and include the |keep changes| key.
+
+The |\Do| command is less general than |\foreach|; the purpose is to provide a syntax for stack-based looping that is similar to |\DoUntilOutOfBounds| but with a fixed range. So |\Do{n}\marg{loop body}| repeats \meta{loop body} |n| times. The assumption is that the loop body draws something relative to the position of the |\lastclass|.
+
+If you need to know how many iterations one of these three commands has gone through, this is stored in the variable |\iteration|.
+\end{commandlist}
+\begin{commandlist}{\NewSseqCommand \cmdarg{command}\marg{argspec}\marg{body},
+ \DeclareSseqCommand\cmdarg{command}\marg{argspec}\marg{body}}
+% TODO: Explain the difference between NewSseqCommand and DeclareSseqCommand!
+The \xparsepkg\ package provides these very powerful commands for defining macros. They are used internally to the \sseqpages\ package to define |\class|, |\d|, etc. To help you create variants of these commands, I will record here the argument specifications for each of them. See the \href{\xparseurl}{\xparsepkg\ manual} for a better explanation and more information.
+
+To make a command like |\class|, you can use the argument specification |O{}r()|. The argument type \texttt{O\marg{default}} stands for a bracket delimited optional argument with default value \meta{default}. In this case, we've specified the default to be empty. |r()| stands for a ``required'' argument delimited by |(| and |)|. In the command definition, access the optional argument with |#1| and the coordinate with |#2|.
+\begin{codeexample}[width = 6.5cm,vbox]
+\DeclareDocumentCommand\demo{ O{} r() }
+ { \#1 = \textcolor{purple}{\{#1\}};
+ \#2 = \textcolor{purple}{\{#2\}} }
+\hbox{\demo[key = value](x,y)}
+\bigskip
+\hbox{\demo(1,2,3)}
+\end{codeexample}
+% TODO: explain what u does better
+If you want to separate out the coordinates into different arguments, you can use |O{}u(u,u)|. The argument type |u| stands for ``until'' and scans up until the next instance of the given character. So in this case, |#1| is of argument type |O| which is an option list, |#2| corresponds to the |u(| which is a throw-away argument, then |#3| corresponds to |u,| and contains the $\mathtt{x}$ coordinate, and |#4| corresponds to |u)| and contains the $\mathtt{y}$ coordinate. Note however that this will not match balanced parenthetical expressions.
+\begin{codeexample}[width = 6.5cm,vbox]
+\DeclareDocumentCommand\demo{ O{} u( u, u)}
+ { \#1 = \textcolor{purple}{\{#1\}};
+ \#3 = \textcolor{purple}{\{#3\}};
+ \#4 = \textcolor{purple}{\{#4\}} }
+\hbox{\demo[hi](x,y)}
+\bigskip
+\hbox{\demo(1,2)}
+\bigskip
+\hbox{\demo((1+1)*2,2)}
+\bigskip
+\hbox{\demo(1,(1+1)*2)} % uh-oh -- *2) is left off!
+\end{codeexample}
+You can specify an optional argument delimited by parentheses using |d()|. Use the commands |\IfNoValueTF|, |\IfNoValueT|, and |\IfNoValueF| to test whether the user provided a value.
+\begin{codeexample}[width = 6.5cm,vbox]
+\DeclareDocumentCommand\demo{ O{} d() } {
+ \#1 = \textcolor{purple}{\{#1\}};
+ \#2 = \textcolor{purple}{
+ \{\IfNoValueTF{#2}{no value}{#2}\} }
+}
+\hbox{\demo[hi](x,y)}
+\bigskip
+\hbox{\demo[options]}
+\bigskip
+\hbox{\demo(1,2)}
+\bigskip
+\hbox{\demo}
+\end{codeexample}
+An example where this is actually useful:
+\begin{codeexample}[width = 6.5cm]
+\DeclareSseqCommand\etaclass{ O{} d() }{
+ \IfNoValueF{#2}{ \pushstack(#2) }
+ \class[#1] (\lastx+1, \lasty+1)
+ \structline
+}
+\begin{sseqpage}[ classes = fill, yscale = 0.55 ]
+\class(0,0)
+\class(0,1)
+\etaclass\etaclass
+\etaclass[blue](0,0)\etaclass
+\end{sseqpage}
+\end{codeexample}
+
+
+%The |\d| command has argument specification |O{} U( r()|. The argument type |U| is special to \sseqpages, and is a variant of until that reinserts the delimiting token. This allows the |(| token to also delimit the beginning of the |r()| argument. Note that the argument type |U| is specially added by \sseqpages\ and might be removed in the future if the \LaTeX3 team yells at me or something.
+% \ExplSyntaxOn
+% \cs_set_eq:NN \__xparse_add_type_U:w \sseq__xparse_add_type_U:w
+% \cs_set_eq:NN \__xparse_normalize_type_U:w \sseq__xparse_normalize_type_U:w
+% \sseq@install@xparse@Uarggrabber
+% \ExplSyntaxOff
+%\begin{codeexample}[width = 7cm,vbox]
+%\DeclareDocumentCommand {\demo} { O{} U( r() }
+% { \#1 = \textcolor{purple}{\{#1\}};
+% \#2 = \textcolor{purple}{\{#2\}};
+% \#3 = \textcolor{purple}{\{#3\}} }
+%\hbox{\demo[opts]page(x,y)}
+%\bigskip
+%\hbox{\demo5(x,y)}
+%\end{codeexample}
+
+The |\structline| and |\changeclasses| commands have argument specification |O{}r()r()|.
+\begin{codeexample}[width = 7cm,vbox]
+\DeclareDocumentCommand\demo{ O{} r() r() }
+ { \#1 = \textcolor{purple}{\{#1\}};
+ \#2 = \textcolor{purple}{\{#2\}};
+ \#3 = \textcolor{purple}{\{#3\}} }
+\hbox{\demo[hi](x,y)(x',y')}
+\bigskip
+\hbox{\demo(x,y,2)(x',y',-1)}
+\end{codeexample}
+\end{commandlist}
+
+\begin{commandlist}{\NewSseqGroup\cmdarg{command}\marg{argspec}\marg{body},
+ \DeclareSseqGroup\cmdarg{command}\marg{argspec}\marg{body}}
+These are similar to |\NewSseqCommand| and |\DeclareSseqCommand| except that the commands defined take an optional square bracket delimited options list, followed by an optional parenthesis delimited |(x,y)| pair and wraps the body of the code in |\begin{scope}[xshift = \meta{xcoord}, yshift = \meta{ycoord}, options]|.
+For instance:
+\begin{codeexample}[width = 8cm]
+\DeclareSseqGroup\tower {m} {
+ \class(0,0)
+ \foreach \n in {1,...,#1} {
+ \class(0,\n)
+ \structline(0,\n-1)(0,\n)
+ }
+}
+\begin{sseqpage}
+\tower[orange]{4}
+\tower(1,1){2}
+\end{sseqpage}
+\end{codeexample}
+Here we define a command which takes an options list, a coordinate, and a single mandatory argument. The options are applied to all the classes and structlines, the coordinate shifts the origin, and the mandatory argument is the length of the tower.
+\end{commandlist}
+
+\begin{command}{\SseqCopyPage\cmdarg{command}\marg{spectral sequence name}\marg{page}}
+This defines \cmdarg{command} to print all of the classes and structlines on page |\meta{page}| of the spectral sequence named |\meta{spectral sequence name}|, throwing out differentials and tikz primitives. The resulting command has syntax as if you had used |\DeclareSseqGroup| with no extra arguments -- that is, it takes an optional options list, which are passed to a scope, and an optional coordinate pair.
+\end{command}
+
+\subsection{Families}
+\spectralsequences\ has a concept of ``class families'' that can be drawn or suppressed as a group, and that can have styling options applied to them as a group.
+\begin{command}{\SseqNewFamily\marg{family name}}
+This makes a new family with name \meta{family name}. The effect of this is to define global options |\meta{family name} style| which apply options to all classes in the family, |draw \meta{family name}| which causes the family to be drawn, and |no \meta{family name}| which suppresses the family (drawing is the default behavior of course). It also defines an option |\meta{family name}| which puts a feature into the family -- so it can be used as an option to any of the normal commands like |\class|, |\d|, |\structline|, etc and to a scope.
+
+\codeexample[vbox, from file=imJ]
+\end{command}
+
+
+\subsection{Utilities}
+\begin{command}{\SseqParseInt\cmdarg{macro}\marg{integer expression}}
+Stores the result of evaluating an integer expression into \cmdarg{macro}. An integer expression consists of |+|, |-|, |*|, |/|, parentheses, and macros that expand to more of the same. The exact rules regarding what is a valid expression are pretty much what you would expect. Note that juxtaposition is a syntax error, not multiplication, so |2(1+1)| is invalid, you must say |2*(1+1)|.
+\end{command}
+
+\begin{commandlist}{
+ \SseqIfEmptyTF\marg{expression}\marg{true code}\marg{false code},
+ \SseqIfEmptyT\marg{expression}\marg{true code},
+ \SseqIfEmptyF\marg{expression}\marg{false code}
+}
+This tests if an expression is the empty expression. This is mainly useful for giving systematic labels to things.
+\end{commandlist}
+
+\begin{commandlist}{
+ \IfExistsTF\marg{page}\pararg{coordinate}\marg{true code}\marg{false code},
+ \IfExistsT\marg{page}\pararg{coordinate}\marg{true code},
+ \IfExistsF\marg{page}\pararg{coordinate}\marg{false code}
+}
+Test whether a class of the given description exists. The description can be any valid coordinate, including a named coordinate. If the coordinate is not valid, this will return false.
+\end{commandlist}
+
+\begin{commandlist}{
+ \IfAliveTF\marg{page}\pararg{coordinate}\marg{true code}\marg{false code},
+ \IfAliveT\marg{page}\pararg{coordinate}\marg{true code},
+ \IfAliveF\marg{page}\pararg{coordinate}\marg{false code}
+}
+Test whether a class is alive on the given page. If the class doesn't exist, this will return false.
+\end{commandlist}
+
+\begin{commandlist}{
+ \IfOutOfBoundsTF\pararg{coordinate}\marg{true code}\marg{false code},
+ \IfOutOfBoundsT\pararg{coordinate}\marg{true code},
+ \IfOutOfBoundsF\pararg{coordinate}\marg{false code},
+ \IfInBoundsTF\pararg{coordinate}\marg{true code}\marg{false code},
+ \IfInBoundsT\pararg{coordinate}\marg{true code},
+ \IfInBoundsF\pararg{coordinate}\marg{false code}
+}
+Test whether a class is in bounds or out of bounds. If no such class exists, returns false.
+\end{commandlist}
+
+\begin{commandlist}{
+ \IfValidDifferentialTF\meta{page}\pararg{coordinate}\opt{\pararg{target coordinate}}\marg{true code}\marg{false code},
+ \IfValidDifferentialT\meta{page}\pararg{coordinate}\opt{\pararg{target coordinate}}\marg{true code},
+ \IfValidDifferentialF\meta{page}\pararg{coordinate}\opt{\pararg{target coordinate}}\marg{false code},
+ \DrawIfValidDifferentialTF\ooptions\meta{page}\pararg{coordinate}\opt{\pararg{target coordinate}}\marg{true code}\marg{false code},
+ \DrawIfValidDifferentialT\ooptions\meta{page}\pararg{coordinate}\opt{\pararg{target coordinate}}\marg{true code},
+ \DrawIfValidDifferentialF\ooptions\meta{page}\pararg{coordinate}\opt{\pararg{target coordinate}}\marg{false code},
+ \DrawIfValidDifferential\ooptions\meta{page}\pararg{coordinate}\opt{\pararg{target coordinate}}\marg{false code}
+}
+Test whether a differential is valid. There are many possible reasons for a differential to not be valid -- the source or target class could not exist, the target could not be in the correct grading, etc. If any error would be generated if you supplied the same arguments to |\d|, this tests false. Otherwise, this tests true. The command |\DrawIfValidDifferental| draws the differential if it is valid, whereas |\DrawIfValidDifferentalT| draws the differential and executes the true code if it is valid,
+|\DrawIfValidDifferentalF| draws the differential or executes false code if it isn't valid, etc.
+\end{commandlist}
+
+
+
+\begin{command}{\SseqNormalizeMonomial}
+This command simplifies a monomial by combining like variables and removing bases that are raised to the 0th power, removing exponents of 1, removing 1's, and replacing the empty monomial with 1. The variables are sorted by first occurrence, use |\SseqNormalizeMonomialSetVariables| to set a different sort order. It outputs its result into |\result|. This command is specifically meant to be used as a value for |class label handler| or |class name handler|. See the example in the documentation for |class label handler| for a realistic example. The exponents must be integers or else it will misbehave.
+\begin{codeexample}[]
+\SseqNormalizeMonomial{x^0y^0} $\result$, \quad
+\SseqNormalizeMonomial{x^3yx^{-1}z^0} $\result$, \quad
+\SseqNormalizeMonomial{1x_2^2x^2_2} $\result$
+\end{codeexample}
+\end{command}
+
+\begin{command}{\SseqNormalizeMonomialSetVariables}
+This command takes an undelimited list sets up |\SseqNormalizeMonomial| to sort the variables in the input in the specified order. This is useful for consistency, and particularly important for when you use it to name classes. For example:
+\begin{codeexample}[]
+% We always want a first, then b, then x_1, then x_2, then x_3
+\SseqNormalizeMonomialSetVariables{abx_1x_2x_3}
+\SseqNormalizeMonomial{ba} $\result$, \quad
+\SseqNormalizeMonomial{bx_1} $\result$, \quad
+\SseqNormalizeMonomial{abx_2x_3x_1} $\result$
+\end{codeexample}
+\SseqNormalizeMonomialSetVariables{}
+\end{command}
+
+
+\begin{command}{\SseqAHSSNameHandler}
+This command expects an argument of the form |\meta{monomial}[\meta{integer expression}]| and defines |\result| to be |m[n]| where |m| is the result of applying |\SseqNormalizeMonomial| to the monomial, and |n| is the result of evaluation the integer expression plus any |yshift| that is present. This is intended for use with in drawing Atiyah Hirzebruch spectral sequences. See |class name handler| for an example of the calculation of $KO^*\mathbb{R}P^8$.
+\end{command}
+
+\subsection{Coordinate parsers and related}
+% \parsecoordinate and \parsedifferential
+\begin{command}{\parsecoordinate\cmdarg{macro}(\meta{coordinate})}
+This command parses the coordinate and puts the triple |(x,y,n)| into \cmdarg{macro}. It also puts the components of the coordinate into macros, for instance if \cmdarg{macro} is |\coord|, then |\xcoord| will contain the x coordinate, |\ycoord| will contain the y coordinate, and |\ncoord| will contain the index. The coordinate can be anything that would be valid to use in a differential or structure line; this is the macro that is used internally to handle coordinates.
+\end{command}
+
+\begin{command}{\getdtarget\cmdarg{macro}\marg{page}\pars{\sourcecoord}}
+Sets \cmdarg{macro} equal to the coordinates of the target position of a length \meta{page} differential starting at \sourcecoord. This helps to make commands that draw fancy differentials.
+\end{command}
+
+\begin{command}{\parsedifferential\meta{page}(\meta{differential coordinate})\opt{\pararg{differential target}}}
+This has the same weird syntax of |\d|, except that you are required to put braces around the page (if it has multiple digits) and you are required to provide at least one coordinate (you have to say |\parsedifferential{2}(\lastclass)| for instance). This command is similar in effect to saying both |\parsecoordinate\source\meta{source coordinate}| and |\parsecoordinate\target\meta{target coordinate}|, but it handles determination of the target coordinate for you.
+
+
+For instance, consider the following example, suggested by Catherine Ray:
+\begin{codeexample}[]
+% O{} U( r() is the arg-spec for \d, O{} U( r() mm looks like \d with one extra mandatory arguments
+\NewSseqCommand{\twods}{ O{} U( r() d() m }{
+ \parsedifferential{#2}(#3)(#4) % Store the target position in \target
+ \nameclass{source}(\sourcecoord,\nsource) % give names to the three classes
+ \nameclass{target1}(\targetcoord,\ntarget)
+ \nameclass{target2}(\targetcoord,#5)
+%
+ \circleclasses[ cc:differential style, name path = circ,
+ #1, page = #2--#2 ]
+ (target1)(target2) % Circle the classes, use differential style
+%
+ % record source and targets as hit.
+ \kill#2(source) \kill#2(target1) \kill#2(target2)
+%
+ \path(target1)--(target2)
+ coordinate[midway](midpt);% put a coordinate in the center of the two classes
+ \path[name path = lin] (source) -- (midpt);% save path from start to midpoint
+%
+ % draw line in "differential style" from start to intersection point of circ and lin
+ \draw[ cc:differential style, #1, page constraint= { \page == #2 },
+ name intersections = { of = circ and lin } ]
+ (source) -- (intersection-1);
+}
+\begin{sseqdata}[ name = cathex, Adams grading, differentials = { blue } ]
+\class(0,2)\class(0,2)
+\class(1,0)\class(1,0)
+\twods2(1,0,-1,1){2}
+\end{sseqdata}
+\printpage[ name = cathex, page = 1 ]
+\qquad
+\printpage[ name = cathex, page = 2 ]
+\qquad
+\printpage[ name = cathex, page = 3 ]
+\end{codeexample}
+\end{command}
+
+\begin{command}{\nameclass\marg{name}\pararg{coordinate}}
+The |\nameclass| command gives a name to a class. It's similar to saying |\doptions[name = |\meta{name}|]|, but faster. It's also similar to saying |\pushstack|\pararg{coordinate}. Giving temporary names to coordinates that you are going to use repeatedly makes the code easier to read and is faster (though this only matters in very large charts). See |\getdtarget| for an example.
+\end{command}
+
+\begin{command}{\tagclass\marg{tag}\pararg{coordinate}}
+The |\tagclass| command gives a tag to a class. It's similar to saying |\doptions[tag = |\meta{name}|]|, but faster. See \example{tmfmayss} for a use case for this.
+\end{command}
+
+\begin{command}{\gettag\cmdarg{macro}\pararg{coordinate}}
+The |\gettag| command finds the most recent tag applied to the coordinate and stores it into |\cmdarg{macro}|. This is useful for connecting groups of nodes. For example, consider the following code, inspired by \example{tmfmayss}.
+\begin{codeexample}[width=6cm]
+\DeclareSseqCommand \tower { O{} } {
+ \begin{scope}[#1]
+ \foreach\i in {1,...,7}{
+ \class(\lastx,\lasty+1)
+ \structline
+ }
+ \end{scope}
+ \restorestack
+}
+\DeclareSseqCommand \htwotower { O{} d() } {
+ \IfNoValueF{#2}{
+ \pushstack(#2)
+ }
+ \begin{scope}[#1]
+ \gettag\thetag(\lastclass)
+ \class(\lastx+3,\lasty+1)
+ \structline[gray]
+ \savestack
+ \foreach\i in {1,...,7}{
+ \class(\lastx,\lasty+1)
+ \structline
+ \structline[gray](\lastx-3,\lasty-1,\thetag)
+ }
+ \restorestack
+ \end{scope}
+}
+\begin{sseqpage}[ y range = {0}{6}, x tick step = 3,
+ xscale=0.6, yscale=1.3 ]
+\class(0,2) \class(0,3) \class(3,2)
+\class[tag = h_0^i](0,0)
+\tower[tag = h_0^i]
+\class(0,2) \class(0,1)
+
+\htwotower[tag = h_2 h_0^i](0,0)
+\htwotower[tag = h_2 h_0^i]
+\end{sseqpage}
+\end{codeexample}
+\end{command}
+
+
+\subsection{The class stack}
+\label{sec:class stack}
+The class stack is a linked list of the classes in the order that they are produced that \sseqpages\ maintains. I've only recently implemented this feature, so it is more liable to change in the future than other things. Whenever you use the |\class| function, the class you added is pushed onto the stack. Here's an example that demonstrates basic usage:
+
+
+The following commands are used to access the stack:
+
+\begin{commandlist}{\lastx\opt{\meta{n}},\lasty\opt{\meta{n}},\lastclass\opt{\meta{n}}}
+The commands |\lastx| and |\lasty| evaluate to the |x| and |y| position, respectively, of the $n$th class on the stack. If $n = 0$ you can leave it off.
+The command |\lastclass| evaluates to the coordinate of the most recent class on the stack. This is useful for writing turtle-style code:
+\begin{codeexample}[width=6cm]
+\DeclareSseqCommand \etaclass {}{
+ \class(\lastx+1,\lasty+1)
+ \structline
+}
+\DeclareSseqCommand \divtwoclass {}{
+ \class(\lastx,\lasty-1)
+ \structline
+}
+\begin{sseqpage}
+\class(0,0)
+\savestack
+\foreach \y in { 1,...,5 }{
+ \class(0,\y)
+ \structline
+}
+\restorestack
+\etaclass\etaclass\etaclass
+\divtwoclass\divtwoclass
+\end{sseqpage}
+\end{codeexample}
+
+You can use |\lastx| and |\lasty| in other contexts than in the body of a \sseqpages\ command, most notably inside |\SseqParseInt| (they also go fine inside |\pgfmathparse| if you need it or one of its siblings). For instance, consider the following tower command:
+\begin{codeexample}[width=6cm]
+\DeclareSseqCommand \tower { } {
+ \savestack
+ \SseqParseInt\numclasses{\ymax-\lasty0}
+ \foreach \n in {1,...,\numclasses}{
+ \class(\lastx,\lasty+1)
+ \structline
+ }
+ \restorestack
+}
+\begin{sseqpage}[y range = {0}{5}]
+\class(0,0)\tower
+\class(1,3)\tower
+\class(3,2)\tower
+\end{sseqpage}
+\end{codeexample}
+\end{commandlist}
+
+
+\begin{command}{\pushstack\pararg{coordinate}}
+This adds a class to the top of the stack. The coordinate is specified using the same syntax as a coordinate for |\structline| or |\replaceclass|.
+\end{command}
+
+\begin{commandlist}{\savestack,\restorestack}
+This saves and reverts the stack. Saves nest. Most frequently, you will want to use these at the start and end of a command.
+\end{commandlist}
+
+
+\section{Styles}
+The \sseqpages\ package has a large number of styles which control the appearance of specific components (e.g., classes, differentials, or structure lines) of a spectral sequence. Each style has two corresponding keys: |classes| and |change classes|. Saying |classes = |\marg{keys} adds the keys to the list of options used to style every future class, whereas |change classes = |\marg{keys} only makes sense in a \sseqpageenv\ environment, and temporarily overwrites the list of options. Note that |change classes| only applies to classes that existed before the current page, and that even with the |keep changes| option, the |change classes| options are local to the current page. Compare:
+\begin{codeexample}[width = 8cm]
+\begin{sseqdata}[ name = style example ]
+\class(0,0)\class(1,1)
+\end{sseqdata}
+\begin{sseqpage}[ name = style example,
+ classes = { fill, blue },
+ title = change new classes ]
+\class(0,1)\class(1,0)
+\end{sseqpage}
+\quad
+\begin{sseqpage}[ name = style example,
+ change classes = { fill, blue },
+ title = change old classes ]
+\class(0,1)\class(1,0)
+\end{sseqpage}
+\end{codeexample}
+
+You can modify these styles outside of a spectral sequence or inside it using |\sseqset|, you can modify them as options to the \sseqdataenv\ and \sseqpageenv\ environments, or you can modify them as arguments to the \scopeenv\ environment.
+
+In cases where the same drawing feature is affected by multiple of these styles, the more specific style takes precedence. For instance, for a class that is the source or target of a differential on the current page, the precedence order from lowest to highest goes: |sseq style|, |class style|, |transient cycle style|, |this page cycle style|, and then any options from scopes in the order they appear, and any local options (the options that come right with the class, e.g., |\class[local options](x,y)|). If you don't want the options to your scopes to override more specific styles, use |sseq|:
+\begin{codeexample}[width = 7cm]
+\begin{sseqpage}[ classes = { blue, fill },
+ title style = { align = center, text width = 2.4cm },
+ title = { everything is orange } ]
+\begin{scope}[orange]
+\class(0,0) \class(0,1)
+\structline(0,0)(0,1)
+\end{scope}
+\end{sseqpage}
+
+\begin{sseqpage}[ classes = { blue, fill },
+ title style = { align = center, text width = 2.4cm },
+ title = { only structure line is orange } ]
+\begin{scope}[ sseq = orange ]
+\class(0,0) \class(0,1)
+\structline(0,0)(0,1)
+\end{scope}
+\end{sseqpage}
+\end{codeexample}
+
+
+Throughout, ``class'' and ``cycle'' are synonyms.
+\begin{stylekeylist}{sseqs, change sseqs,sseq,change sseq}
+This passes options to all features in all future spectral sequences in the current scope. Note that for many global options you can set a default directly by saying |\sseqset{key = \marg{value}}| and this is in some cases preferable.
+
+\begin{codeexample}[width = 7cm]
+% Applies to both of the following sseqs:
+\sseqset{ sseqs = { blue, scale = 0.5 } }
+\begin{sseqpage}
+\foreach \x in {0,1}
+\foreach \y in {0,1,2} {
+ \class(\x,\y)
+}
+\end{sseqpage}
+\begin{sseqpage}[ Adams grading, classes = fill ]
+\foreach \x in {0,1,2}
+\foreach \y in {0,1,2} {
+ \class(\x,\y)
+}
+\d2(1,0)
+\d2(2,0)
+\end{sseqpage}
+\end{codeexample}
+\end{stylekeylist}
+
+\begin{stylekeylist}{classes, cycles,change classes,change cycles}
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ classes = { blue, fill, minimum width = 0.5em },
+ scale = 0.5, x tick step = 2, y tick step = 2 ]
+\class(0,0)
+\class(2,2)
+\end{sseqpage}
+\end{codeexample}
+\end{stylekeylist}
+
+
+\begin{stylekeylist}{permanent classes, permanent cycles, change permanent classes, change permanent cycles}
+These options change the appearance of all permanent cycles (e.g., those classes which never support or are hit by a differential). For instance, we can circle the permanent cycles automatically. In the following example, note that because |permanent cycles| is more specific than |classes|, the |permanent cycles = {draw}| command takes precedence over the |classes = {draw = none}| command and the permanent cycle nodes are drawn.
+\begin{codeexample}[width = 6.5cm]
+\begin{sseqpage}[ cohomological Serre grading,
+ classes = { draw = none },
+ permanent cycles = {draw} ]
+\foreach \x in {0,2} \foreach \y in {0,1} {
+ \class["\mathbb{Z}"](\x,\y)
+}
+\d2(0,1)
+\end{sseqpage}
+\end{codeexample}
+\end{stylekeylist}
+
+\begin{stylekeylist}{transient classes, transient cycles,change transient classes,change transient cycles}
+These options change the appearance of all transient cycles (e.g., those classes which eventually support or are hit by a differential). Again, this takes precedence over the |classes| option.
+\begin{codeexample}[width = 6.5cm]
+\begin{sseqpage}[ cohomological Serre grading,
+ classes = { draw = none },
+ transient cycles = red ]
+\foreach \x in {0,2} \foreach \y in {0,1} {
+ \class["\mathbb{Z}"](\x,\y)
+}
+\d2(0,1)
+\end{sseqpage}
+\end{codeexample}
+\end{stylekeylist}
+
+\begin{stylekeylist}{this page classes, this page cycles, change this page classes,change this page cycles}
+These options change the appearance of all cycles which support or are hit by a differential on this page. Any class that is hit on the current page is also a transient cycle, and so |this page classes| takes precedence over |transient cycles|.
+\begin{codeexample}[width = 6cm]
+\begin{sseqdata}[ name = this page cycles example, Adams grading,
+ transient cycles = { red, fill }, this page cycles = { blue } ]
+\class(0,0)
+\class(0,2) \class(1,0)
+\class(1,3) \class(2,0)
+\d2(1,0) \d3(2,0)
+\end{sseqdata}
+\printpage[ name = this page cycles example, page = 2 ] \qquad
+\printpage[ name = this page cycles example, page = 3 ]
+\end{codeexample}
+\end{stylekeylist}
+
+\begin{stylekeylist}{edges,differentials,struct lines, change edges, change differentials, change struct lines}
+The |edges| key applies to both differentials and structure lines. The |differentials| and |struct lines| keys both take precedence over |edges|.
+\end{stylekeylist}
+
+\begin{stylekeylist}{this page struct lines, change this page struct lines}
+This style applies to structure lines whose source or target is hit on the current page. It takes precedence over |struct lines|.
+\end{stylekeylist}
+
+\begin{stylekeylist}{tikz primitives,change tikz primitives}
+Applies to all \tikzpkg\ primitives.
+\end{stylekeylist}
+
+
+\begin{stylekeylist}{labels,change labels}
+This style applies to labels on classes, differentials, and structure lines. All the more specific label styles take precedence over it.
+\end{stylekeylist}
+
+\begin{stylekeylist}{class labels,inner class labels,outer class labels,
+ change class labels,change inner class labels,change outer class labels}
+Inner class labels specifically applies to class labels that are inside the node, outer class labels specifically applies to ones outside it:
+\begin{codeexample}[]
+\begin{sseqpage}[ no axes, classes = { inner sep = 1pt },
+ label distance = 2pt,
+ outer class labels = { red },
+ inner class labels = { blue } ]
+\class["a", "b" above](0,0)
+\class["a", "c" right](1,0)
+\end{sseqpage}
+\end{codeexample}
+\end{stylekeylist}
+
+\begin{stylekeylist}{edge labels,differential labels,struct line labels,
+ change edge labels,change differential labels,change struct line labels}
+
+\end{stylekeylist}
+
+
+\subsection{Style-like options}
+The options are not styles, but can be modified in the same set of places (namely, anywhere):
+
+\begin{keylist}{label distance = \meta{dimension}}
+This sets the default distance from a class to an outer label. There are also variants like |above label distance| corresponding to |above|, |below|, |left|, |right|, |above left|, |above right|, |below left|, and |below right|.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ label distance = 0.3em,
+ right label distance = 0em,
+ no axes, yscale = 1.25 ]
+\class["a" above](0,0)
+\class["b" above right](0,1)
+\class["c" right](1,0)
+\class["c" {right = 1em}](1,1)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+\begin{keylist}{run off = \meta{start tip}--\meta{end tip},
+ run off struct lines = \meta{start tip}--\meta{end tip} (initially {...--...}),
+ run off differentials = \meta{start tip}--\meta{end tip} (initially {...--...})}
+Change the default behavior of run off edges for either all edges, just structure lines, or just differentials respectively. Local arrowhead options override this.
+
+If an edge runs off the edge of the clipping, \sseqpages\ automatically add an arrowhead to indicate that the edge continues. This option controls which arrow head is added if the start or end of an edge runs off the page.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ x range = {0}{2}, y range = {0}{2},
+ draw orphan edges, run off = >-stealth ]
+\class(0,0)
+\class(3,0) \class(0,3)
+\structline(0,0)(3,0)
+\structline[red](0,0)(0,3)
+\structline[blue](3,0)(0,3)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+\begin{key}{class label handler = \meta{function}}
+\declarecustomhandler{class label handler}{\codehandler}
+The value of |class label handler| is a function that is applied to all labels before displaying them. It should put its output into |\result|.
+This is intended to help with code reusability. Because these handlers may crash or have annoying side-effects on some input, you may want to toggle the value of this command on and off. To turn this off for the rest of the current spectral sequence you can say |\sseqset{class label handler = {}}|. You can also use the |class label handler| key in a \scopeenv.
+
+The main function \sseqpages\ provides for use here is |\SseqNormalizeMonomial{#1}|. This makes it convenient to translate expressions with polynomial labels. You can write your own handlers if your \TeX\ programming skills are sufficient. Let me know if there are any other functions that you want here, and if you implement them yourself, please send me your implementation.
+Here is an example of a function that evaluates an arithmetic expression:
+\begin{codeexample}[width=6cm]
+\begin{sseqpage}[
+ class label handler = { \SseqParseInt\result{#1} }
+]
+\class["1+1"](0,0)
+\class["1+2*(1+3*(4-1))"](1,1)
+\end{sseqpage}
+\end{codeexample}
+Here's an example using |\SseqNormalizeMonomial|:
+\begin{codeexample}[width = 6cm]
+\NewSseqGroup \test {m} {
+ \class["1#1"](0,0)
+ \class["\alpha#1"](0,1)
+ \class["y#1"](1,0)
+ \class["\alpha y#1"](1,1)
+}
+\begin{sseqpage}[
+ class label handler = { \SseqNormalizeMonomial{#1} },
+ classes = { draw = none }, class labels = { font = \small } ]
+\test{}
+\test[red](2,0){y^2}
+\test[orange](2,2){\alpha^2y^2}
+\test[blue](0,2){\alpha^2}
+\end{sseqpage}
+\end{codeexample}
+
+Here is another example which demonstrates a useful idiom for drawing Serre spectral sequences. For a more complete example, see \example{KF3n}. Note the use of braces in |{Sq^1\iota_2}|. Without braces, |\SseqNormalizeMonomial| will simplify |Sq^1xSq^2x| into $S^2q^3x^2$, which is obviously undesirable, so the correct way to input this is |{Sq^1x}{Sq^2x}|. Unfortunately, |\foreach| strips a pair of braces from its arguments, so you need to put two pairs of braces.
+%\pgfmanualpdflabel{normalizemonomialex-labels}
+\begin{codeexample}[width=8cm]
+\begin{sseqpage}[
+ xscale = 1.4,
+ classes = { draw = none },
+ class label handler = {\SseqNormalizeMonomial{#1}} ]
+
+\foreach \x/\xlabel in
+ { 0/1, 2/\iota_2, 3/{{Sq^1\iota_2}}, 4/\iota_2^2 }
+\foreach \y/\ylabel in
+ { 0/1, 1/\alpha, 2/x, 3/\alpha x, 4/x^2 }
+{
+ \class["\ylabel\xlabel"] (\x,\y)
+}
+\end{sseqpage}
+\end{codeexample}
+\end{key}
+
+
+\begin{key}{class name handler = \meta{function}}
+\declarecustomhandler{class name handler}{\codehandler}
+The value of |class name handler| is a function that is applied to all names before using them. It should put its output into |\result|.
+The main functions intended for use here are |\SseqAHSSNameHandler| and |\SseqNormalizeMonomial|, though you can make your own. This is applied both when you name the class, as in \codeverb|\class[name=a](\meta{coordinate})| and when you refer to a class by name, as in |\structline(a)(b)|. One advantage if you are using |\SseqNormalizeMonomial| is that you can ensure that |xy| and |yx| refer to the same class:
+\begin{codeexample}[]
+\SseqNormalizeMonomialSetVariables{xy}
+\begin{sseqpage}[ class name handler = \SseqNormalizeMonomial,
+ classes = {show name = {right,pin}} ]
+\class[name = xy](0,0)
+\class[name = yxy](0,1)
+\class(1,0)
+\structline(yx)(yyx)
+\end{sseqpage}
+\end{codeexample}
+The next page is an example drawing the Atiyah Hirzebruch spectral sequence computing $KO^*\mathbb{R}P^{8}$.
+% Have to load from file so that \afterpage doesn't cause trouble with verbatim reading.
+\afterpage{%
+ An AHSS using \scantokens{|class name handler = \SseqAHSSNameHandler|:}
+ \par
+ \codeexample[from file=KORP8,vbox]
+ \newpage
+}
+\end{key}
+
+\begin{keylist}{class name prefix = \meta{prefix}, class name postfix = \meta{postfix}}
+These keys add respectively a prefix or a postfix to all names of all classes in the scope. This is applied both when you name the class, as in \codeverb|\class[name=a](\meta{coordinate})| and when you refer to a class by name, as in |\structline(a)(b)|.
+The prefix and postfix are added to the command before the |class name handler| is applied, so if you say |name=\meta{the name}| then the name actually given to the class is the value of |\result| after saying |\classnamehander{\meta{name prefix}\meta{the name}\meta{name postfix}}|
+\end{keylist}
+
+\section{Global Options}
+These options can only be set at the beginning of a \sseqdataenv\ or \sseqpageenv\ environment. When it makes sense, you can also set a default value using |\sseqset|. Generally, these options either modify the plot style or the logic for the spectral sequence.
+\begin{key}{name = \meta{sseq name}}
+This option must be used with the \sseqdataenv\ environment where it indicates the name of the spectral sequence, which will be used with the \sseqpageenv\ environment or |\printpage| command to draw the spectral sequence. The name used in a \sseqdataenv\ environment must be new unless the environment is used with the |update existing| key in which case the \sseqdataenv\ environment will add to the existing spectral sequence. It is optional when used with \sseqpageenv\ , and if included the name given must be the name of an existing spectral sequence.
+\end{key}
+
+\begin{key}{page = \meta{page number}\opt{--\meta{page max} (initially 0)}}
+This key is for \sseqpageenv\ and |\printpage|. It specifies which page of the spectral sequence is to be printed. On page r, all |\class|es that are not hit by differentials on pages less than r will be printed, as well as all |\structline|s whose source and target classes are both printed on page r, and all differentials of length exactly r. The special value |page = 0| prints all classes, differentials, and structure lines.
+
+If you use this key with a range, then all differentials in that range of lengths will be drawn. The larger number only changes which differentials are drawn. If you use 0 for the \meta{page max}, then all differentials longer than \meta{page number} will be drawn.
+\end{key}
+
+\begin{keylist}{degree = \marg{x degree}\marg{y degree},cohomological Serre grading, homological Serre grading, Adams grading}
+Specifies the degree of differentials. The \meta{x degree} and \meta{y degree} should both be mathematical expressions in one variable |#1| that evaluate to integers on any input. They specify the $\mathtt{x}$ and $\mathtt{y}$ displacement of a page $\mathtt{\#1}$ differential. In practice, they will be linear expressions with |#1| coefficient 1, -1, or 0.
+
+The |degree| option must be given before placing any differentials. It can be specified at the beginning of the \sseqdataenv\ environment, at the beginning of the \sseqpageenv\ environment if it is being used as a standalone page, or as a default by saying |\sseqset{degree = \marg{x degree}\marg{y degree}}| or |\sseqset{Adams grading}| outside of the \sseqdataenv\ and \sseqpages\ environments.
+
+You can make a named grading convention by saying \codeverb|\sseqset{my grading/.sseq grading = \marg{x degree}\marg{y degree}}|. Then later passing |my grading| to a spectral sequence is equivalent to saying |degree = \marg{x degree}\marg{y degree}|. The following grading conventions exist by default:
+\begin{codeexample}[width = 6cm]
+% equivalent to degree = {#1}{1-#1}:
+\begin{sseqpage}[ cohomological Serre grading ]
+\class(0,1)
+\class(2,0)
+\d2(0,1)
+\end{sseqpage}
+\end{codeexample}
+\begin{codeexample}[width = 6cm]
+% equivalent to degree = {-#1}{#1-1}:
+\begin{sseqpage}[ homological Serre grading ]
+\class(0,1)
+\class(2,0)
+\d2(2,0)
+\end{sseqpage}
+\end{codeexample}
+\begin{codeexample}[width = 6cm]
+% equivalent to degree = {-1}{#1}:
+\begin{sseqpage}[ Adams grading ]
+\class(0,2)
+\class(1,0)
+\d2(1,0)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+\begin{keylist}{strict degree, lax degree}
+If the degree is strict, then \LaTeX will throw an error if you try to specify a differential that doesn't have the proper grading. The degree is strict by default.
+\begin{codeexample}[code only]
+\begin{sseqdata}[ name = laxdegree, Adams grading ]
+\class(0,2)
+\class(1,0)
+\d3(1,0)(0,2) % Error: differential does not respect grading.
+ % Target should be in position (0,3) but instead it is (0,2)...
+\end{sseqdata}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{sseqdata}[ name = laxdegree, Adams grading, lax degree, yscale = 0.6 ]
+\class(0,2)
+\class(1,0)
+\d3(1,0)(0,2) % No error because degree checking is off
+\end{sseqdata}
+\printpage[ name = laxdegree, page = 3 ]
+\end{codeexample}
+\end{keylist}
+
+\begin{key}{update existing}
+This key is only for the \sseqdataenv\ environment. It specifies that the current \sseqdataenv\ environment is adding data to an existing spectral sequence. If you don't pass this key, then giving a \sseqdataenv\ environment the same |name| as a different \sseqdataenv\ environment will cause an error. This is intended to help you avoid accidentally reusing the same name.
+\end{key}
+
+
+\begin{key}{keep changes =\meta{boolean} (default true)(initially false)}
+This option is only for the \sseqpageenv\ environment, and only works when a |name| is provided.
+This option specifies that all of the commands in the current \sseqpageenv\ environment should be carried forward to future pages of the same named spectral sequence. For example:
+\begin{codeexample}[]
+\begin{sseqdata}[ name = keep changes example, Adams grading, y range = {0}{3} ]
+\class(0,0)
+\class(1,0)
+\end{sseqdata}
+
+\begin{sseqpage}[ name = keep changes example, sseq = orange ]
+\class(0,2)
+\class(1,2)
+\classoptions[orange](1,0)
+\d2(1,0)
+\end{sseqpage} \qquad
+
+\printpage[ name = keep changes example, page = 2 ] \qquad
+
+\begin{sseqpage}[ name = keep changes example, sseq = blue, keep changes ]
+\class(0,3)
+\class(1,3)
+\classoptions[blue](1,0)
+\d3(1,0)
+\end{sseqpage} \qquad
+
+\printpage[ name = keep changes example, page = 3 ]
+\end{codeexample}
+Note that the orange classes and differential do not persist because the |keep changes| option is not set in the first \sseqpageenv\ environment, but the blue classes and differential do, since the |keep changes| option is set in the second \sseqpageenv\ environment.
+\end{key}
+
+
+\begin{keylist}{no differentials,draw differentials}
+The option |no differentials| suppresses all of the differentials on the current page, whereas |draw differentials| causes the page appropriate differentials to be drawn. This is useful for explaining how the computation of a spectral sequence goes, or if you want to display one of the edges of the spectral sequence, like in \example{KF3n}.
+\end{keylist}
+
+\begin{keylist}{no struct lines,draw struct lines}
+The option |no struct lines| suppresses all of the structure lines on the current page, whereas the option |draw struct lines| causes the page appropriate structure lines to be drawn.
+\end{keylist}
+
+\begin{keylist}{no orphan edges,draw orphan edges}
+An edge is an ``orphan'' if both its source and target lie off the page. By default these are drawn, but with the option |no orphan edges| they are not. If the option |no orphan edges| has been set, |draw orphan edges| undoes it.
+\begin{codeexample}[width = 9cm]
+\begin{sseqdata}[
+ name = orphan edges example,
+ cohomological Serre grading,
+ x range = {0}{2}, y range = {0}{2} ]
+\class(0,3) \class(3,1)
+\d3(0,3)
+\class(2,1) \class(4,0)
+\d2(2,1)
+\end{sseqdata}
+\printpage[ name = orphan edges example ]
+\quad
+\printpage[ name = orphan edges example,
+ no orphan edges ]
+\end{codeexample}
+\end{keylist}
+
+
+\begin{key}{class pattern = \meta{class pattern name} (initially standard)}
+This key specifies the arrangement of multiple classes at the same coordinate. The default value is |standard|.
+\begin{codeexample}[width = 5cm]
+\begin{sseqdata}[ name = class pattern example, no axes, ymirror ]
+\class(0,0)
+\class(1,0) \class(1,0)
+\class(0,1) \class(0,1) \class(0,1)
+\class(1,1) \class(1,1) \class(1,1) \class(1,1)
+\class(0,2) \class(0,2) \class(0,2) \class(0,2) \class(0,2)
+\class(1,2) \class(1,2) \class(1,2) \class(1,2) \class(1,2) \class(1,2)
+\end{sseqdata}
+
+\printpage[ name = class pattern example, class pattern = standard ]
+\printpage[ name = class pattern example, change classes = blue,
+ class pattern = linear, class placement transform = { rotate = 45 } ]
+\end{codeexample}
+
+You can add new class patterns using |\sseqnewclasspattern|:
+\begin{command}{\sseqnewclasspattern\marg{class pattern name}\marg{offsets}}
+Creates a new class pattern. For example, the |linear| class pattern is created using the command:
+\begin{codeexample}[code only]
+\sseqnewclasspattern{linear}{
+ (0,0);
+ (-0.13,0)(0.13,0);
+ (-0.2,0)(0,0)(0.2,0);
+ (-0.3,0)(-0.1,0)(0.1,0)(0.3,0);
+ (-0.4,0)(-0.2,0)(0,0)(0.2,0)(0.4,0);
+ (-0.5,0)(-0.3,0)(-0.1,0)(0.1,0)(0.3,0)(0.5,0);
+}
+\end{codeexample}
+For instance the third row indicates that if there are three classes at the position |(x,y)| they should be printed at |(x-0.2,y)|, |(x,y)|, and |(x+0.2,y)|. You can give as many rows as you like; \sseqpages\ will throw an error if there are more classes in any position than the maximum number that your class pattern can handle -- for instance, the |linear| class pattern can handle up to six classes based on this definition.
+\end{command}
+\end{key}
+
+
+\begin{keylist}{class placement transform = \marg{transform keys}, add class placement transform = \marg{transform keys} }
+\declareasstyle{class placement transform}\declareasstyle{add class placement transform}
+The option |class placement transform| allows the user to specify a \tikzpkg\ coordinate transform to adjust the relative position of multiple nodes in the same $\mathtt{(x,y)}$ position. The |class placement transform| key overrides the previous value of transformations, the |add class placement transform| just adds the new transformation to the end of the list. This coordinate transform can only involve rotation and scaling, no translation. Specifying a scaling factor helps if the nodes are too large and overlap. In some cases a rotation makes it easier to see which class is the target of a differential.
+\begin{codeexample}[width = 5cm]
+\begin{sseqpage}[ class placement transform = { xscale = 1.5 },
+ class pattern = linear,
+ classes = { draw = none },
+ xscale = 2, x axis extend end = 0.7cm ]
+\class["\mathbb{Z}"](0,0)
+\class["\mathbb{Z}/2"](1,1)
+\class["\mathbb{Z}/3"](1,1)
+\end{sseqpage}
+\end{codeexample}
+\begin{codeexample}[width = 5cm]
+\begin{sseqpage}[ class placement transform = { rotate = 40 },
+ cohomological Serre grading, scale = 0.65,
+ classes = fill, differentials = blue ]
+\class(0,0)
+\class(0,2)\class(0,2)
+\class[red](3,0)\class[green](3,0)\class[blue](3,0)
+
+\d3(0,2,1,2)
+\d3(0,2,-1,-1)
+\draw[->,red](3,0,1)--(0,0);
+\end{sseqpage}
+\end{codeexample}
+With multiple large class labels, the best option is to arrange the classes vertically:
+\begin{codeexample}[width = 5.5cm]
+\begin{sseqpage}[ classes = {draw = none }, xscale = 2, yscale=1.55,
+ class pattern = linear,
+ class placement transform = { scale = 1.5, rotate = 90 },
+ right clip padding = 20pt, top clip padding = 20pt,
+ x axis gap = 30pt, y axis gap = 20pt ]
+\class["\iota_3\beta\iota_3"](7,0)
+\class["P^1\iota_3"](7,0)
+
+\class["\iota_2\iota_3\beta\iota_3"](7,2)
+\class["\iota_2P^1\iota_3"](7,2)
+
+\class["(\beta\iota_3)^2"](8,0)
+\class["P^1\beta\iota_3"](8,0)
+\class["\beta P^1\iota_3"](8,0)
+
+\class["\iota_2(\beta\iota_3)^2"](8,2)
+\class["\iota_2P^1\beta\iota_3"](8,2)
+\class["\iota_2\beta P^1\iota_3"](8,2)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+\begin{key}{math nodes = \meta{boolean} (default true)(initially true)}
+This key instructs \sseqpages\ to put all labels in math mode automatically.
+\end{key}
+
+
+
+\subsection{Global coordinate transformations}
+Of the normal \tikzpkg\ coordinate transformations, only the following can be applied to a \sseqpages\ chart:
+\begin{keylist}{scale = \meta{factor},xscale = \meta{factor}, yscale = \meta{factor}, xmirror, ymirror}
+Scale the chart by \meta{factor}. Under normal circumstances, you can tell \tikzpkg\ to mirror a chart by saying, for instance, |xscale = -1|, but \sseqpages\ needs to be aware that the chart has been mirrored in order to draw the axes correctly. Thus, if you want to mirror a spectral sequence, use the |xmirror| and |ymirror| options as appropriate.
+\end{keylist}
+
+\begin{key}{rotate = \meta{angle}}
+It probably won't look great if you pick an angle that isn't a multiple of 90 degrees.
+\end{key}
+
+\subsection{Plot options and axes style}
+\begin{keylist}{x range = \marg{x min}\marg{x max},y range = \marg{y min}\marg{y max}}
+These options set the x range (respectively y range) to be a specific interval. By default, if no range is specified then the range is chosen to fit all the classes. If an x range is specified but no y range, then the y range is chosen to fit all the classes that lie inside the specified x range, and vice versa. The values must be integers -- if you want to extend the x axis a noninteger amount, try using |x axis start extend| or |x axis end extend|.
+\end{keylist}
+
+\begin{keylist}{
+ grid = \meta{grid type},
+ grid color = \meta{color},
+ grid step = \meta{positive integer},
+ x grid step = \meta{positive integer},
+ y grid step = \meta{positive integer}
+}
+Makes \sseqpages\ draw a grid. The grid types and a significant part of the code that produces them were stolen from the \sseqpkg\ package.
+\begin{codeexample}[vbox]
+\begin{sseqdata}[ name = grid example, scale = 0.8 ]
+\class(0,0)
+\class(3,0)
+\class(2,1)\class(2,1)
+\class(1,2)\class(1,2)\class(1,2)
+\class(0,3)
+\class(3,3)
+\end{sseqdata}
+\hbox{
+\printpage[ name = grid example, grid = chess, title=chess ]
+\qquad
+\printpage[ name = grid example, grid = crossword, title=crossword ]
+}
+\vskip20pt
+\hbox{
+\printpage[ name = grid example, grid = go, title=go ]
+\qquad
+\printpage[ name = grid example, grid = none ]
+}
+\end{codeexample}
+It is possible to make your own grid type by defining the command |\sseq@grid@yourgridname| to draw a grid.
+
+It is a known problem that acrobat reader displays grids very dark and thick. This is caused by the enhance thin lines ``feature'' of Acrobat reader. You can turn it off globally by going into the acrobat reader preferences window and unchecking the ``Enhance thin lines'' checkbox in the ``Rendering'' section. Unfortunately, there is no way to instruct Acrobat Reader to not apply this feature to a particular document. This has apparently been annoying graphic designers for over a decade.
+
+The grid color option changes the color of the grid; the default value is |gray|.
+The grid step keys change the grid step.
+\end{keylist}
+
+\begin{keylist}{title = \meta{text}, title style = \meta{keys}, x label = \meta{text}, y label = \meta{text},x label style = \meta{keys}, y label style = \meta{keys}, label style = \meta{keys}}
+\declareasstyle{title style}
+\declareasstyle{x label style}
+\declareasstyle{y label style}
+\declareasstyle{label style}
+This make chart labels.
+\begin{codeexample}[width = 6cm]
+\begin{sseqpage}[ title = { An example }, yscale = 0.5,
+ x label = { x axis label },
+ y label = { y axis label },
+ label style = { blue, font = \small },
+ x label style = { yshift = 5pt },
+ ]
+\class(0,0)
+\class(2,2)
+\end{sseqpage}
+\end{codeexample}
+Note that if you make multiple versions of the same chart and some of the charts have labels and others don't, they might not align the way you want. An easy solution to this is to use |\path[background] (min x, min y) -- (max x, max y);| where the coordinates are below and to the left, respectively above and to the right, of everything else drawn in any picture. This makes the bounding boxes for all of the pictures the same size, so that they line up even if the exact collection of things drawn changes. See the example at the end of the |background| key for an illustration of this.
+\end{keylist}
+
+\needspace{5\baselineskip}
+\begin{keylist}{no title, draw title, no x label, no y label, no labels, draw x label, draw y label, draw labels}
+Suppress or unsuppress the title, x label, y label, or both x and y labels, respectively.
+\end{keylist}
+
+
+\begin{keylist}{no x ticks, no y ticks, no ticks, draw x ticks, draw y ticks, draw ticks}
+Suppress axes ticks (the numbers next to the axes). Only matters if axes are drawn. You can make your own ticks using \tikzpkg\ inside a \scopeenv\ environment with the |background| key. For instance, you might want to label the axes as 0, $n$, $2n$, \ldots You can achieve this as follows: (you can also use |x tick handler|).
+\begin{codeexample}[width = 5.7cm]
+\begin{sseqpage}[ no x ticks, x range = {0}{3} ]
+\begin{scope}[ background ]
+ \node at (0,\ymin - 1) {0};
+ % \vphantom is fragile so we have to throw in an extra \protect
+ \node at (1,\ymin - 1) {\protect\vphantom{2}n};
+\foreach \n in {2,..., \xmax}{
+ \node at (\n,\ymin - 1) {\n n};
+}
+\end{scope}
+\class(0,0)
+\class(3,2)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+
+\begin{keylist}{x tick step = \meta{positive integer} (initially 1),y tick step = \meta{positive integer} (initially 1),tick step = \meta{positive integer} (initially 1)}
+Sets the interval between labels.
+\end{keylist}
+
+\begin{keylist}{x tick offset = \meta{integer} (initially 0),y tick offset = \meta{integer} (initially 0),tick offset = \meta{integer} (initially 0)}
+Sets the label offset -- by default the ticks will always be the set of numbers that are 0 mod \meta{tick step}. Change it so that the ticks are the set of numbers that are \meta{tick offset} mod \meta{tick step}.
+\end{keylist}
+
+\begin{keylist}{
+ x major tick step = \meta{nonnegative integer} (initially 0),
+ y major tick step = \meta{nonnegative integer} (initially 0),
+ major tick step = \meta{nonnegative integer},
+ x minor tick step = \meta{nonnegative integer} (initially 0),
+ y minor tick step = \meta{nonnegative integer} (initially 0),
+ minor tick step = \meta{nonnegative integer}%
+}
+If these are nonzero, they control the placement of tick marks on the axes. The value 0 prevents tick marks from being drawn. Uses |x tick offset| as an offset.
+\begin{codeexample}[width=7cm]
+\begin{sseqpage}[
+ tick step = 5,
+ major tick step = 5,
+ minor tick step = 1,
+ scale = 0.4,
+ axes type = frame
+]
+\class(0,0)
+\class(10,10)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+\begin{stylekeylist}{x tick style,y tick style,tick style}
+Change the tick style:
+\begin{codeexample}[width = 7cm]
+\begin{sseqpage}[ tick style = { blue, font = \tiny } ]
+\class(0,0) \class(2,1)
+\end{sseqpage}
+\end{codeexample}
+\end{stylekeylist}
+
+\begin{keylist}{x tick handler = \meta{function} (initially \#1), y tick handler = \meta{function} (initially \#1), tick handler = \meta{function} (initially \#1)}
+\declarecustomhandler{x tick handler}{\codehandler}
+\declarecustomhandler{y tick handler}{\codehandler}
+\declarecustomhandler{tick handler}{\codehandler}
+The value for |x tick handler| should be a function that takes in the current $\mathtt{x}$ value and outputs the appropriate tick. Correspondingly with |y tick handler|. The |tick handler| key sets both.
+\begin{codeexample}[width = 7cm]
+\begin{sseqpage}[ x range = {0}{4}, yscale = 1.78,
+ x tick handler = {
+ \ifnum#1 = 0\relax
+ 0
+ \else
+ \ifnum#1 = 1\relax
+ % \vphantom is fragile so we \protect it
+ \protect\vphantom{2}n
+ \else
+ #1n
+ \fi
+ \fi
+ }
+]
+\class(0,0)
+\class(4,2)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+\subsection{Layout}
+\begin{keylist}{x axis type = \meta{type} (initially border), y axis type = \meta{type} (initially border),axes type = \meta{type} (initially border), no x axis, no y axis, no axes}
+The \meta{type} is either |border|, |center|, |frame|, or |none|. |no axes| is a shorthand for |axes type=none|. The |border| type is the default and puts the axes on the bottom and left of the picture. The |center| type by default places the axes to pass through $(0,0)$; this can be modified using the |x axis origin| and |y axis origin| keys. See \example{KRAHSS} and \example{KUHFPSS} for examples where this is used. The |frame| type draws a frame around the entire chart:
+
+\begin{codeexample}[width=6cm]
+\begin{sseqpage}[ axes type = frame ]
+\class(0,0)
+\class(3,2)
+\end{sseqpage}
+\end{codeexample}
+\end{keylist}
+
+\parskip=0pt
+\begin{keylist}{x axis origin = \meta{x value} (initially 0), y axis origin = \meta{y value} (initially 0)}
+If you use |axes type = center|, these keys change the position of the axes. Otherwise, they are ignored.
+\end{keylist}
+%
+\begin{keylist}{x axis gap = \meta{dimension} (initially 0.5cm),y axis gap = \meta{dimension} (initially 0.5cm), axes gap = \meta{dimension} (initially 0.5cm)}
+%
+\end{keylist}
+%
+\begin{keylist}{x tick gap = \meta{dimension} (initially 0.5cm),y tick gap = \meta{dimension} (initially 0.5cm)}
+%
+\end{keylist}
+%
+\begin{keylist}{
+ x axis extend start = \meta{dimension} (initially 0.5cm), y axis extend start = \meta{dimension} (initially 0.5cm),
+ x axis extend end = \meta{dimension} (initially 0.5cm), y axis extend end = \meta{dimension} (initially 0.5cm),
+ x axis tail = \meta{dimension} (initially 0.9cm), y axis tail = \meta{dimension} (initially 0.9cm)%
+}
+\end{keylist}
+%
+\begin{keylist}{x axis clip padding = \meta{dimension} (initially 0.1cm), y axis clip padding = \meta{dimension} (initially 0.1cm)}
+\end{keylist}
+%
+\begin{keylist}{
+ right clip padding = \meta{dimension} (initially 0.1cm), left clip padding = \meta{dimension} (initially 0.1cm),
+ top clip padding = \meta{dimension} (initially 0.1cm), bottom clip padding = \meta{dimension} (initially 0.1cm)%
+}
+\end{keylist}
+
+\afterpage{
+\begin{center}
+\input spectralsequencesmanual-layoutcharts
+\end{center}
+}
+
+
+\parskip=10pt
+\begin{key}{custom clip = \meta{clip path}}
+Give a custom clipping. The clipping specified must be in the form of a valid \tikzpkg\ path, for instance |\clip (0,0) rectangle (10,10);|. This clipping is also applied to any grid and is used to draw ellipses on appropriate differentials or structure lines that go out of bounds and to determine whether a differential or structure line is an ``orphan''. It is not applied to any background elements, which is important because these are often used for axes labels and such that should lie outside of the clipping region. Weird things can happen with out of range edges if you provide an oddly shaped path.
+\end{key}
+
+\begin{key}{clip = \meta{boolean} (default true)(initially true)}
+If this is false the spectral sequence chart won't be clipped. I'm not really sure why you would want that, but there might be some use case. Setting this to be false is not fully supported, and it's possible that weird things will happen with some of the edges that go out of range.
+\end{key}
+
+
+\begin{key}{rotate labels = \meta{boolean} (default true)(initially false)}
+If you use |rotate = 90| but also want the labels rotated (so that the whole chart is sideways) use this key.
+\end{key}
+\end{document}
diff --git a/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanualpreamble.tex b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanualpreamble.tex
new file mode 100644
index 0000000000..b9e76710c8
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/spectralsequencesmanualpreamble.tex
@@ -0,0 +1,546 @@
+%%
+%% Package: spectralsequences v1.2.2 2017-09-16 2017-09-16
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: spectralsequencesmanualpreamble.tex
+%%
+%% Manual preamble
+%%
+
+% TODO: someday I should comment this -- it's a bit of a mess
+
+\documentclass{ltxdoc}
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage[tooltips]{spectralsequences}
+\usetikzlibrary{shapes.geometric}
+\usepackage{amssymb}
+\usepackage{afterpage}
+\usepackage[notmath]{sansmathfonts}
+\usepackage{verbatim}
+\usepackage{needspace}
+\usepackage[documentation]{tcolorbox}
+\usepackage[T1]{fontenc}
+\usepackage{hyperref}
+
+\hypersetup{%
+ colorlinks=true,
+ linkcolor=blue,
+ filecolor=blue,
+ urlcolor=thered,
+ citecolor=blue,
+ pdfborder=0 0 0,
+}
+\usepackage{hyperxmp}
+\makeatletter
+\def\displaycommand#1{\displaycommand@#1\@nil}
+\def\displaycommand@#1#2\@nil{\texttt{\string#1}#2}
+
+% From Christian Feuersänger https://tex.stackexchange.com/a/73103
+\makeatletter % !!!!
+\input{pgfmanual.code} % This must be exectuted when catcode of @ is letter
+\makeatother % !!!!
+
+\usepackage{calc} %
+\include{pgfmanual-en-macros} % This must be executed when catcode of @ is other
+
+\makeatletter
+
+\parskip=10pt
+\parindent=0pt
+\MakeShortVerb{\|}
+
+\def\sectionstring{\textbackslash\@xp\@gobble\string}
+
+\def\@gobbletocln#1:{}
+\def\eatclnifpresent#1{%
+ \eatclnifpresent@#1:\nil
+}
+\def\eatclnifpresent@#1:#2\nil{%
+ \ifx$#2$%
+ #1%
+ \else
+ \removecln#2\nil
+ \fi
+}
+\def\removecln#1:\nil{#1}
+
+\def\removenil#1\nil{#1}
+
+\def\pgfmanual@pretty@singlequote{'}
+
+
+
+\def\pulloffstartspaces{\@xp\pulloffstartspaces@\thekey\@nil}
+\def\pulloffstartspaces@#1{%
+ \def\test{#1}%
+ \ifx\test\pgfmanual@pretty@activespace
+ \@xp\def\@xp\leadingtoks\@xp{\leadingtoks\pgfmanual@pretty@space}%
+ \@xp\pulloffstartspaces@
+ \else
+ \ifx#1\@nil
+ \def\thekey{}%
+ \else
+ \@xp\@xp\@xp\pulloffstartspaces@@\@xp\@xp\@xp#1%
+ \fi
+ \fi
+}
+\def\pulloffstartspaces@@#1\@nil{\def\thekey{#1}}
+
+\def\pulloffstartbrace{\@xp\pullofflbrace\thekey\nil\@nil}
+\def\pullofflbrace#1#2\@nil{%
+ \ifx\test\pgfmanual@pretty@lbrace
+ \@xp\def\@xp\leadingtoks\@xp{\leadingtoks\pgfmanual@pretty@lbrace}%
+ \@xp\def\@xp\thekey\@xp{\removenil#2}%
+ \else
+ \@xp\def\@xp\thekey\@xp{\removenil#1#2}%
+ \fi
+}
+
+
+\def\pulloffsinglequote{\@xp\pulloffsinglequote@\thekey\nil\@nil}
+\def\pulloffsinglequote@#1#2\@nil{%
+ \def\test{#1}%
+ \ifx\test\pgfmanual@pretty@singlequote
+ \@xp\def\@xp\leadingtoks\@xp{\leadingtoks\pgfmanual@pretty@singlequote}%
+ \@xp\def\@xp\thekey\@xp{\removenil#2}%
+ \else
+ \def\possiblesinglequote{}%
+ \@xp\def\@xp\thekey\@xp{\removenil#1#2}%
+ \fi
+}
+
+
+
+
+% deletes everything except trailing spaces. For making link underline not include trailing spaces (have to reinsert spaces)
+\def\onlytrailingspaces#1{%
+ \pgfkeys@spdef\temp{#1}%
+ \@xp\def\@xp\temp\@xp##\@xp1\temp{}%
+ \temp#1%
+}
+
+% remove trailing spaces, for making link underline not include trailing spaces
+\def\removetrailingspaces{\@xp\removetrailingspaces@\@xp{\thekey}}
+\def\removetrailingspaces@#1{%
+ \removetrailingspace{#1}%
+ \ifx\possibletrailingspace\empty\else
+ \edef\trailingtoks{\unexpanded\@xp{\possibletrailingspace}\unexpanded\@xp{\trailingtoks}}%
+ \@xp\removetrailingspaces@\@xp{\thekey}%
+ \fi
+}
+
+\bgroup
+\catcode`\Q=3\lccode`\)=`\}\lccode`\~=`\ \lowercase{
+ \gdef\removetrailingspace#1{\removetrailingspace@#1QQ~Q}
+ \gdef\removetrailingspace@#1~Q{\removetrailingspace@@#1}
+ \gdef\removetrailingspace@@#1Q#2Q{\def\thekey{#1}\def\possibletrailingspace{#2}}
+
+ % Remove trailing brace -- so close brace can be colored / styled differently
+ \gdef\removetrailingbrace{\@xp\removetrailingbrace@\thekey QQ)Q}
+ \gdef\removetrailingbrace@#1)Q{\removetrailingbrace@@#1}
+ \gdef\removetrailingbrace@@#1Q#2Q{\def\thekey{#1}\edef\trailingtoks{\unexpanded{#2}\unexpanded\@xp{\trailingtoks}}}
+}
+
+\catcode`\^^M=\active
+ % remove trailing new line -- so we can properly test whether the last nonwhitespace character is a brace
+ \gdef\removetrailingnewline{\@xp\removetrailingnewline@\thekey \nil\nil^^M\nil}%
+ \gdef\removetrailingnewline@#1^^M\nil{\removetrailingnewline@@#1}%
+ \gdef\removetrailingnewline@@#1\nil#2\nil{\def\thekey{#1}\edef\trailingtoks{\unexpanded{#2}\unexpanded\@xp{\trailingtoks}}}%
+\egroup
+
+
+
+% Redefine decompose not to do all that fancy crap -- just print as is. Maybe we should get rid of surrounding spaces here and where we do the ref?
+\def\decompose#1/\nil{%
+ \index{#1@\protect\texttt{#1} key}%
+ \index{\mypath#1@\protect\texttt{#1}}%
+ \pgfmanualpdflabel{#1}{}%
+}
+\let\olddeclare\declare
+\ExplSyntaxOn
+% Get rid of colon so that we can have context based linking -- "page" links to global page, "class:page" prints page and links to the page key in the class section, etc.
+\def\declare#1{%
+ \exp_args:Nf\olddeclare{%
+ \eatclnifpresent{#1}%
+ }%
+}
+\ExplSyntaxOff
+
+%\patchcmd\pgfmanualpdfref{#2}{#2} % If I want it to behave differently for things that aren't links
+\patchcmd\pgfmanualpdfref{\expandafter\pgfmanualpdfref@\expandafter{\pgfmanualpdflabel@@}{#2}} % Fix it so that being a link doesn't change the color
+ {\colorlet{temp}{.}\expandafter\pgfmanualpdfref@\expandafter{\pgfmanualpdflabel@@}{\textcolor{temp}{#2}}}{}{}%
+
+\newenvironment{manualentry}[1]{%
+ \begin{pgfmanualentry}%
+ \pgfmanualentryheadline{#1}%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}%
+}
+
+
+
+\def\removespace#1\space\nil{#1}
+\newenvironment{stylekeylist}[2][]{%
+ \begin{pgfmanualentry}
+ \def\extrakeytext{}%
+ \foreach \xx in {#2} {%
+ \expandafter\extractkey\xx\space= \marg{keys}\@nil%
+ \declareasstyle{\@xp\removespace\mykey\nil}% tells latex not to italicize body
+ % The link created in \extractkey is named "key name " with a space at the end.
+ % So it won't work. We need to make our own link without the space in it.
+ \sseq@eval{\@nx\pgfmanualpdflabel{\@xp\removespace\mykey\nil}{}}%
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+
+% Custom handler for value of key -- instead of italicizing, do what?
+\def\ifcustomhandler#1{%
+ \@xp\pgfkeys@spdef\@xp\test\@xp{#1}%
+ \expandafter\ifx\csname\test @ custom handler\endcsname\relax\@xp\@secondoftwo\else\@xp\@firstoftwo\fi
+}
+\def\customhandler#1{%
+ \@xp\pgfkeys@spdef\@xp\test\@xp{#1}%
+ \csname\test @ custom handler\endcsname{#1}%
+}
+
+\def\declarecustomhandler#1#2{%
+ \immediate\write\@auxout{\@nx\expandafter\gdef\@nx\csname#1@ custom handler\endcsname{\@nx#2}}%
+ \@xp\gdef\csname#1@ custom handler\endcsname{#2}%
+}
+
+\def\declareasstyle#1{\declarecustomhandler{#1}\stylehandler}
+\def\stylehandler#1#2{%
+ \bgroup
+ \let\pgfmanualwordstartup\relax
+ \def\thekey{#2}%
+ \let\leadingtoks\empty
+ \pulloffstartspaces\pulloffstartbrace
+ \textcolor{keycolor}{\leadingtoks}%
+ \@xp\pgfmanualprettyprintpgfkeys\@xp{\thekey}%
+ \egroup
+}
+\def\codehandler#1#2{%
+ \bgroup
+ \def\thekey{#2}%
+ \let\leadingtoks\empty
+ \let\trailingtoks\empty
+ \pulloffstartspaces\pulloffstartbrace
+ \removetrailingspaces\removetrailingnewline
+ \removetrailingspaces\removetrailingbrace
+ \textcolor{keycolor}{\leadingtoks}%
+ \@xp\pgfmanualprettyprintcode\@xp{\thekey}%
+ \textcolor{keycolor}{\trailingtoks}%
+ \egroup
+}
+
+\declarecustomhandler{font}{\codehandler}
+\declarecustomhandler{page constraint}{\codehandler}
+\declarecustomhandler{page constraint}{\codehandler}
+
+
+\let\pgfmanualpdflabel@opt@old\pgfmanualpdflabel@opt
+\def\pgfmanualpdflabel@opt[#1]#2#3{%
+ \pgfkeys@spdef\temp{#2}%
+ \sseq@eval{\unexpanded{\pgfmanualpdflabel@opt@old[#1]}\unexpanded\@xp{\@xp{\temp}{#3}}}%
+}
+
+\patchcmd\extractkey{\hfill(\extrakeytext no value)}{}{}{\error}
+\patchcmd\extractkey{\def\mykey}{\gdef\mykey}{}{\error}
+\patchcmd\extractkeyequal{\hfill(\extrakeytext no default)}{}{}{\error}
+\patchcmd\extractkeyequal{\def\mykey}{\gdef\mykey}{}{\error}
+\patchcmd\extractinitial{no default, }{}{}{\error}
+\patchcmd\extractinitial{\def\mykey}{\gdef\mykey}{}{\error}
+\patchcmd\extractdefault{\def\mykey}{\gdef\mykey}{}{\error}
+\patchcmd\extractdefault{#2}{{\hskip2pt}#2}{}{\error}
+\patchcmd\extractequalinitial{\def\mykey}{\gdef\mykey}{}{\error}
+\let\extractkey@\extractkey
+\apptocmd\extractkey@{\egroup}{}{\error}
+\def\extractkey{\bgroup\@ifnextchar*{\def\decompose####1\nil{}\relax\extractkey@\@gobble}{\extractkey@}}
+
+\def\pgfmanual@pretty@quote{"}
+\let\pgfmanual@pretty@pgfkeys@loop@\pgfmanual@pretty@pgfkeys@loop
+\def\pgfmanual@pretty@pgfkeys@loop#1{%
+ \def\pgfmanual@loc@TMPa{#1}%
+ \def\pgfmanual@pretty@pgfkeys@loop@NEXT{\pgfmanual@pretty@pgfkeys@loop@{#1}}%
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@quote%
+ \let\pgfmanual@pretty@pgfkeys@loop@NEXT\pgfmanual@pretty@collectquote
+ \fi
+ \pgfmanual@pretty@pgfkeys@loop@NEXT
+}
+\def\pgfmanual@pretty@collectquote{%
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@collectargs@finish@collectquote
+ \let\pgfmanualprettyprinterhandlecollectedargsVtwo\pgfmanualprettyprinterhandlecollectedargsVtwo@default
+ \pgfmanualprettyprintercollectupto"%
+ {\pgfmanual@pretty@collectquote@b}%
+}
+\def\pgfmanual@pretty@collectquote@b{%
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@collectargs@finish@collectquote@b
+ \pgfmanualprettyprintercollectupto,{%
+ \@xp\afterpgfmanual@pretty@collectquote\temp
+ }%
+}
+
+\def\afterpgfmanual@pretty@collectquotenocomma,{\pgfmanual@pretty@pgfkeys@loop}
+\def\afterpgfmanual@pretty@collectquote{\pgfmanual@pretty@pgfkeys@loop}
+\def\pgfmanual@pretty@collectargs@finish@collectquote#1{\textcolor{keycolor}{\pgfmanualpdfref{""quotes}{"#1"}}}
+\def\pgfmanual@pretty@collectargs@finish@collectquote@b#1{%
+ \def\thekey{#1}%
+ \edef\temp{\ifpgfmanualprettyprinterfoundterminator,\fi}%
+ \pgfkeys{/codeexample/prettyprint/key name/.code={\textcolor{keycolor}{##1}}}%
+ \def\leadingtoks{}\def\trailingtoks{}%
+ \pulloffstartspaces\pulloffsinglequote\pulloffstartspaces\pulloffstartbrace
+ \removetrailingspaces\removetrailingbrace
+ \textcolor{keycolor}{{}\leadingtoks}% {} here to prevent \textcolor from eating initial space
+ \@xp\pgfmanual@pretty@pgfkeys@loop\thekey\pgfmanual@EOI
+ \textcolor{keycolor}{{}\trailingtoks}%
+}
+
+% Don't allow braces in key names
+\patchcmd\pgfmanual@pretty@pgfkeys@collectkey{%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{%
+ \pgfmanualprettyprintercollectargcount{1}{\pgfmanual@pretty@pgfkeys@collectkey}%
+ #1%
+ }%
+}{%
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@loop}%
+}{}{\error}
+
+% Redefine point collection to correctly balance the parens
+% Has unfortunate side effect that it now throws an error if parens don't balance.
+\let\pgfmanual@pretty@collectpoint@old\pgfmanual@pretty@collectpoint
+%\def\pgfmanual@pretty@collectpoint{\pgfmanual@pretty@collectpoint@(} %)
+%\DeclareDocumentCommand\pgfmanual@pretty@collectpoint@{r()}{%
+% \pgfmanualprettyprinterfoundterminatortrue
+% \pgfmanual@pretty@collectargs@finish@collectpoint{#1}%
+% \afterpgfmanual@pretty@collectpoint
+%}
+
+
+
+\pgfqkeys{/codeexample/prettyprint}{
+ cs arguments/meta/.initial=1, % Make \meta work correctly in codeexample
+ cs/meta/.code={\textcolor{black}{\meta{\@gobble#1}}},
+%
+ cs arguments/opt/.initial=1,
+ cs/opt/.code={\opt{\@gobble#1}},
+ %
+ cs arguments/oarg/.initial=1,
+ cs/oarg/.code={\oarg{\@gobble#1}},
+%
+ cs arguments/marg/.initial=1,
+ cs/marg/.code={\marg{\@gobble#1}},
+ cs arguments/metatt/.initial=1,
+ cs/metatt/.code={\meta{\texttt{\textup{\@gobble#1}}}},
+%
+ cs arguments/pars/.initial=1,
+ cs/pars/.code={\@xp\pars\@xp{\@xp\pgfmanualprettyprintpgfkeys\@xp{\@gobble#1}}},
+ cs arguments/pararg/.initial=1,
+ cs/pararg/.code={\pararg{\@gobble#1}},
+ cs arguments/parargtwo/.initial=2,
+ cs/parargtwo/.code 2 args={\parargtwo{\@gobble#1}{\@gobble#2}},
+%
+ cs arguments/cscolor/.initial=1,
+ cs/cscolor/.code={\textcolor{cscolor}{\@gobble#1}},
+ cs arguments/pointcolor/.initial=1,
+ cs/pointcolor/.code={\textcolor{pointcolor}{\@gobble#1}},
+ %point/.code={\def\temp{#1}\show\temp},
+%
+ cs arguments/sseqset/.initial=1,
+ cs/sseqset/.code 2 args={\textcolor{cscolor}{\string\sseqset}\{\pgfmanualprettyprintpgfkeys{#2}\}},
+%
+ cs arguments/DeclareDocumentCommand/.initial=2,
+ cs/DeclareDocumentCommand/.code={\handlexparsestylecmd#1},
+ cs arguments/NewSseqCommand/.initial=2,
+ cs/NewSseqCommand/.code={\handlexparsestylecmd#1},
+%
+ /pdflinks/internal link prefix=pgf,
+ key value with style detection/.code 2 args={\pgfkeysalso{/codeexample/prettyprint/key value display only={#2}}}, % get rid of bothersome special style handling
+ % handle spaces and colons
+ key name/.code={%
+ \pgfkeys@spdef\temp{#1}%
+ \let\pgfmanual@pretty@pgfkeys@collectkey@keyname\temp
+ \textcolor{keycolor}{%
+ \pgfmanualpdfref{\temp}{%
+ \noligs{\@xp\eatclnifpresent\@xp{\temp}}%
+ }%
+ }%
+ \onlytrailingspaces{#1}%
+ },
+ key value display only/.code={%
+ \sseq@eval{\@nx\pgfutil@in@{/.style}{\pgfmanual@pretty@pgfkeys@collectkey@keyname}}%
+ \ifpgfutil@in@\else
+ \sseq@eval{\@nx\pgfutil@in@{/.sseq style}{\pgfmanual@pretty@pgfkeys@collectkey@keyname}}%
+ \fi
+ \ifpgfutil@in@
+ \def\thekey{#1}%
+ \def\trailingtoks{}%
+ \removetrailingspaces\removetrailingbrace
+ \@xp\stylehandler\@xp{\@xp}\@xp{\thekey}%
+ \textcolor{keycolor}{%
+ \trailingtoks
+ }%
+ \else
+ \ifcustomhandler{\pgfmanual@pretty@pgfkeys@collectkey@keyname}{%
+ \def\thekey{#1}%
+ \def\trailingtoks{}%
+ \removetrailingspaces\removetrailingbrace
+ \@xp\customhandler\@xp{\@xp\pgfmanual@pretty@pgfkeys@collectkey@keyname\@xp}\@xp{\thekey}%
+ \textcolor{keycolor}{%
+ \trailingtoks
+ }%
+ }{%
+ \textcolor{keycolor}{{\itshape{\let\pgfmanualwordstartup\relax\pgfmanualprettyprintpgfkeys{#1}}}}%
+ }%
+ \fi
+ },
+ point/.code={%\pgfutil@in@){#1}\ifpgfutil@in@\def\temp{#1}\prettyprintprocesspoint{#1}\else \textcolor{pointcolor}{\noligs{#1}}\fi
+ \textcolor{pointcolor}{\noligs{#1}}},
+ %/cs/.code={\pgfmanualpdfref{#1}{\textcolor{blue}{#1}}},
+% /cs with args/.code 2 args={\pgfmanualpdfref{#1}{\textcolor{blue}{#1}}\{\pgfmanualprettyprintcode{#2}\pgfmanualclosebrace},
+ %/colored
+}
+
+\def\handlexparsestylecmd#1#2#3{\pgfkeysvalueof{/codeexample/prettyprint/cs/.@cmd}#1\pgfeov\textcolor{cscolor}{#2}\typesetargspec{#3}}
+\def\typesetargspec#1{\{\textcolor{purple}{#1}\}}
+
+\let\oldtextcolor\textcolor
+\def\textcolorpoint#1{\oldtextcolor{pointcolor}}
+
+
+% Normally the verbatim processes stuff using
+\let\pgfmanual@verb@collect@code\pgfmanual@verb@collect
+\patchcmd\pgfmanual@verb@collect@code{\pgfmanualprettyprintpgfkeys}{\pgfmanualprettyprintcode}{}{\error}
+\let\pgfmanual@verb@code\pgfmanual@verb
+\patchcmd\pgfmanual@verb@code{\begingroup}{\begingroup\let\pgfmanual@verb@collect\pgfmanual@verb@collect@code}{}{\error}
+\def\codeverb|{\pgfmanual@verb@code}
+
+% balance the braces
+\NewDocumentCommand\prettyprintprocesspoint { m } {%
+ \textcolor{pointcolor}{%
+ \bgroup
+ \let\pgfmanual@pretty@collectpoint\pgfmanual@pretty@collectpoint@old
+ \let\textcolor\textcolorpoint
+ \noligs{(\pgfmanualprettyprintcode{#1})}%
+ \egroup
+ }%
+}
+%\pgfqkeys{/codeexample}{every codeexample/.style={width=6cm}}
+
+% This macro in pgfmanual-en-macros.tex seems not to work because the call to \openin is wrong...
+\def\do@codeexamplefromfile{%
+ \immediate\openin\examplesource examples/spectralsequencesmanual-\codeexamplesource.tex\relax % I only changed this line
+ \def\examplelines{}%
+ \readexamplelines
+ \closein\examplesource
+ \expandafter\endofcodeexample\expandafter{\examplelines}%
+}
+
+% For some reason it's started duplicating the last line of the file,
+% so I added an illogical extra \ifeof and that seems to fix the problem.
+\def\readexamplelines{
+ \ifeof\examplesource%
+ \else
+ \immediate\read\examplesource to \exampleline
+ \ifeof\examplesource\else %% Added
+ \edef\examplelines{\unexpanded\@xp{\examplelines}\unexpanded\@xp{\exampleline}}%
+ \fi %% Added
+ \expandafter\readexamplelines%
+ \fi
+}
+
+
+\pgfqkeys{/sseqpages}{
+ class/class:name/.forward to=/sseqpages/class/name,
+ class/class:page/.forward to=/sseqpages/class/page,
+ struct line/structline:page/.forward to=/sseqpages/struct line/page,
+ fit/cc:differential style/.forward to=/sseqpages/fit/differential style,
+ tikz primitives/cc:differential style/.forward to=/sseqpages/tikz primitives/differential style
+}
+
+
+
+\hypersetup{
+ pdftitle={The Spectral Sequences Package},
+ pdfauthor={Hood Chatham},
+ pdfsubject={A spectral sequence drawing package build on tikz},
+ pdfkeywords={spectral sequences,algebraic topology,homotopy theory,math,tikz,sseq},
+ pdflicenseurl={http://www.latex-project.org/lppl/}
+}
+
+\def\pars#1{|(|#1|)|}
+\def\pararg#1{\pars{\meta{#1}}}
+\def\parargtwo#1#2{|(\meta{#1},\meta{#2})|}
+\def\parargthree#1#2#3{|(\meta{#1},\meta{#2},\meta{#3})|}
+\def\parargthreeopt#1#2#3{|(\meta{#1},\meta{#2}|\opt{|,\meta{#3}|}|)|}
+\def\parargthreevar#1#2#3{|(\meta{#1},\meta{#2}#3)|}
+
+\def\cmdarg{\texttt{\textbackslash}\meta}
+\def\ooptions{\oarg{options}}
+\def\moptions{|[|\meta{options}|]|}
+\def\sourcecoord{\meta{source coordinate}}
+\def\targetcoord{\meta{target coordinate}}
+\def\sourcen{\meta{source n}}
+\def\targetn{\meta{target n}}
+\def\sourcename{\meta{source name}}
+
+\def\today{\the\year/\the\month/\the\day}
+\def\pgfmanualurl{http://math.mit.edu/~hood/pgfmanual_v3.0.1a.pdf}
+\def\xparseurl{http://mirror.ctan.org/macros/latex2e/contrib/l3packages/xparse.pdf}
+\def\colormanualurl{http://mirror.ctan.org/macros/latex/required/graphics/color.pdf}
+
+\def\pkg#1{\textsf{\textmd{#1}}}
+\def\sseqpages{\textsc{\pkg{spectralsequences}}}
+\let\spectralsequences\sseqpages
+\def\sseqpkg{\pkg{sseq}}
+\let\tikzpkg\tikzname
+\def\pgfpkg{\pkg{\textmd{PGF}}}
+\def\tikzcdpkg{\pkg{tikzcd}}
+\def\pgfplotspkg{\textsc{\pkg{pgfplots}}}
+\def\xparsepkg{\pkg{xparse}}
+\def\colorpkg{\pkg{color}}
+\def\texlive{\TeX\ Live}
+\def\miktex{MiK\TeX}
+\def\pdflatex{\textsc{PDF}\LaTeX}
+\def\lualatex{Lua\LaTeX}
+\let\pdfLaTeX\pdflatex
+\let\LuaLaTeX\lualatex
+
+
+\def\env#1{\texttt{\{#1\}}}
+\def\sseqpageenv{\pgfmanualpdfref{sseqpage}{\env{sseqpage}}}
+\def\sseqdataenv{\pgfmanualpdfref{sseqdata}{\env{sseqdata}}}
+\def\tikzpictureenv{\env{tikzpicture}}
+\def\scopeenv{\env{scope}}
+\def\tikzcdenv{\env{tikzcd}}
+\def\eTeX{\leavevmode\hbox{$\varepsilon$}-\TeX}
+
+
+\def\example#1{\path{example_#1.tex}}
+
+
+% xparse modifications:
+\ExplSyntaxOn
+\cs_set_eq:NN \__xparse_grab_U:w \sseq__xparse_grab_U:w
+\cs_set_eq:NN \__xparse_add_type_U:w \sseq__xparse_add_type_U:w
+\ExplSyntaxOff
+
+\def\@maketitle{%
+ \null\vskip 2em
+ \begin{center}\let\footnote\thanks\sffamily
+ {\huge \@title\par}\vskip 1.5em
+ {\large \parbox{.33\textwidth}{\centering\@author}%
+ \parbox{.33\textwidth}{\centering\@date}}%
+ \vskip2.5em\rule{\textwidth}{.4pt}%
+ \end{center}\par\vskip1.5em}
+\def\abstractname{}
+\def\mailtoHC{\href % some PDF viewers don't like spaces:
+ {mailto:<hood@mit.edu>\%20Hood\%20Chatham?subject=[spectralsequences\%20package]}
+ {\texttt{hood@mit.edu}}} \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/manual/sseqmanualtest.tex b/graphics/pgf/contrib/spectralsequences/manual/sseqmanualtest.tex
new file mode 100755
index 0000000000..e69de29bb2
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/manual/sseqmanualtest.tex
diff --git a/graphics/pgf/contrib/spectralsequences/spectralsequences.sty b/graphics/pgf/contrib/spectralsequences/spectralsequences.sty
new file mode 100644
index 0000000000..10268984bd
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/spectralsequences.sty
@@ -0,0 +1,338 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% A package for drawing spectral sequences
+%%
+
+
+% TODO:
+% Try catch blocks
+% Make an argument type for the \d page argument.
+% deal with xmin, xmax, etc (was there actually a problem we were trying to fix?)
+%
+% Redo sseqerrortest and set up regression test script as part of build (damn I didn't realize we'd lost anything imporant with that find -d disaster)
+% Maybe we should add some other regression tests too
+%
+% Lower priority:
+% error messages that should be warnings by default?
+%
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{spectralsequences}[2019/02/18 v1.2.2]
+
+\RequirePackage{tikz}
+\RequirePackage{etoolbox}
+\RequirePackage{xparse}
+\RequirePackage{verbatim}
+
+\usetikzlibrary{quotes}
+\usetikzlibrary{fit}
+\usetikzlibrary{positioning}
+\usetikzlibrary{intersections}
+\usetikzlibrary{backgrounds}
+\usepgflibrary{arrows.meta}
+\usetikzlibrary{shapes}
+%\usetikzlibrary{patterns}
+%\usetikzlibrary{profiler}
+
+\newif\ifsseq@draftmode
+\newif\ifsseq@tooltip
+\DeclareOption{draft}{\sseq@draftmodetrue}
+\DeclareOption{tooltips}{\sseq@tooltiptrue}
+\ProcessOptions\relax
+
+\ifsseq@tooltip
+ \RequirePackage{pdfcomment}
+\else
+ \let\ulp@afterend\relax % So that removing the tooltip option doesn't cause the aux file to have an error.
+\fi
+
+\def\sseq@authorname{Hood Chatham}
+\def\sseq@authoremail{hood@mit.edu}
+
+
+% Commands we are going to expose just inside of environments
+\def\sseq@macrolist{%
+ \xcoord\ycoord\page %\xmin\xmax\ymin\ymax % these just get protected
+ % Defined in sseqmessages:
+ \quiet\endquiet
+ % These are defined in sseqmain:
+ \class\classoptions\replaceclass\replacesource\replacetarget
+ \d\doptions\kill\structline\structlineoptions\circleclasses
+ \lastlabel
+ % The following are defined in sseqparsers:
+ \pgfmathparse\isalive\lastx\lasty\lastclass\savestack\restorestack\pushstack\nameclass\tagclass
+ \parsecoordinate\parsedifferential\getdtarget\gettag
+ \IfOutOfBoundsTF\IfOutOfBoundsT\IfOutOfBoundsF\IfInBoundsTF\IfInBoundsT\IfInBoundsF
+ \IfExistsTF\IfExistsT\IfExistsF\IfAliveTF\IfAliveT\IfAliveF
+ \IfValidDifferentialTF\IfValidDifferentialT\IfValidDifferentialF
+ \DrawIfValidDifferentialTF\DrawIfValidDifferentialT\DrawIfValidDifferentialF\DrawIfValidDifferential
+ % sseqforeach
+ \Do\DoUntilOutOfBounds\DoUntilOutOfBoundsThenNMore
+}
+
+
+% All the tikz commands. We replace these in our environment too. Replacements defined in sseqparsers.
+\def\sseq@tikzcommands{%
+ \clip\coordinate\draw\fill\filldraw
+ \graph\matrix\node\path\pattern
+ \shade\shadedraw\useasboundingbox
+}
+
+
+%%%%%% %%%%%%
+%% %%
+%% Declarations and preliminaries %%
+%% %%
+%%%%%% %%%%%%
+\newif\ifsseq@inprogress
+
+\newif\ifsseq@hasname
+\newif\ifsseq@updateexisting
+\newif\ifsseq@ispageenv
+\newif\ifsseq@keepchanges
+\newif\ifsseq@keepglobaloptions
+\newif\ifsseq@globaldetone
+
+\newif\ifsseq@needstikz
+\newif\ifsseq@thispage
+\newif\ifsseq@outofrange
+\newif\ifsseq@classlabel
+\newif\ifsseq@draworphanedges
+\newif\ifsseq@draw
+\newif\ifsseq@drawedge
+\newif\ifsseq@tikzprims@integershift
+\newif\ifsseq@anchor
+\sseq@drawedgetrue
+\sseq@tikzprims@integershifttrue
+
+\newif\ifsseq@patchforeach
+\newif\ifsseq@patchfit
+\newif\ifsseq@patchxparseU
+
+\newif\ifsseq@tempif
+\newif\ifsseq@gtempif
+\newif\ifsseq@error
+
+\newtoks\sseq@temptoks
+\newtoks\sseq@scope@toks
+
+\newcount\sseq@thepagecount
+\newcount\sseq@anonsseqcount
+\newcount\sseq@x
+\newcount\sseq@y
+\newcount\sseq@tempcount
+\newcount\sseq@tempcountb
+\newcount\sseq@tempx
+\newcount\sseq@tempy
+\newcount\sseq@tempxb
+\newcount\sseq@tempyb
+\newcount\sseq@xoffset % We add these to everything to avoid overflow errors as much as possible
+\newcount\sseq@yoffset
+
+\newcount\sseq@stackdepth
+
+\newdimen\sseq@tempdimen
+\newdimen\sseq@tempxdimen
+\newdimen\sseq@tempydimen
+\newdimen\sseq@xscalecm
+\newdimen\sseq@yscalecm
+\newdimen\sseq@clip@xcenter
+\newdimen\sseq@clip@ycenter
+\newdimen\sseq@tooltip@height
+\newdimen\sseq@tooltip@width
+\newdimen\sseq@gridstrokethickness
+\sseq@gridstrokethickness=.1pt
+
+% Ensure \@xp and \@nx have the correct values in case that amsmath isn't loaded
+\let\@xp\expandafter
+\let\@nx\noexpand
+\def\@xptwo{\@xp\@xp\@xp}
+\def\@xpthree{\@xp\@xp\@xp\@xp\@xp\@xp\@xp}
+\def\sseq@nil{\sseq@thisshouldnthappen@nil unique expansion} % This expansion text should be unique so that \ifx\sseq@nil\othercommand is false.
+\def\sseq@infinity{10000} % Larger than any coordinate anyone will ever use.
+\newcount\sseq@infinitycount
+\sseq@infinitycount=\sseq@infinity\relax
+\def\sseq@macroname{\@xp\@gobble\string}
+\def\sseq@gobble@to@nil#1\sseq@nil{}
+\def\sseq@macrogobble#1->{}
+
+% These are only used by defertikzcommand now
+\def\sseq@callas#1{\def\sseq@callcmd{#1}}
+\def\sseq@call#1{\bgroup\@xp\let\sseq@callcmd#1\@xptwo\egroup\sseq@callcmd}
+
+\def\sseq@getfirstchar#1#2\sseq@nil{#1} % used in shift/checkshift transform
+\def\sseq@smuggle@macro#1#2\egroup{\@xp\egroup\@xp\def\@xp#1\@xp{#1}}
+
+
+\def\sseq@protected@edef{\let\sseq@store@slsl\\\def\\{\protect\\}\let\@@protect \protect \let \protect \@unexpandable@protect \afterassignment \sseq@restore@protect \edef}
+\def\sseq@protected@xdef{\let\sseq@store@slsl\\\def\\{\protect\\}\let\@@protect \protect \let \protect \@unexpandable@protect \afterassignment \sseq@restore@protect \xdef}
+\def\sseq@restore@protect{\let\protect\@@protect\let\\\sseq@store@slsl}
+
+\def\sseq@eval#1{\bgroup\edef\sseq@temp{#1}\@xp\egroup\sseq@temp}% I got this from sseq.sty
+\def\sseq@protectedeval#1{\bgroup\sseq@protected@edef\sseq@temp{#1}\@xp\egroup\sseq@temp}
+\def\sseq@eval@show#1{\bgroup\edef\sseq@temp{#1}\show\sseq@temp\@xp\egroup\sseq@temp}
+\def\sseq@profilenew#1#2{\pgfprofilenew{#1}\pretocmd#2{\pgfprofilestart{#1}}{}{\error}\apptocmd#2{\pgfprofileend{#1}}{}{\error}}
+
+%%%% add to macro commands
+\def\sseq@d@addto@macro#1#2{\@xp\def\@xp#1\@xp{#1#2}}
+\def\sseq@e@addto@macro#1#2{\edef#1{\unexpanded\@xp{#1}#2}} % let #2 be expanded
+\def\sseq@eo@addto@macro#1#2{\edef#1{\unexpanded\@xp{#1}\unexpanded\@xp{#2}}} % let #2 be expanded once
+\def\sseq@g@addto@macro#1#2{\@xp\gdef\@xp#1\@xp{#1#2}}
+\def\sseq@x@addto@macro#1#2{\xdef#1{\unexpanded\@xp{#1}#2}} % let #2 be expanded
+\def\sseq@xprotected@addto@macro#1#2{\sseq@protected@xdef#1{\unexpanded\@xp{#1}#2}}
+
+\def\sseq@d@addto@toks#1#2{#1\@xp{\the#1#2}}
+\def\sseq@e@addto@toks#1#2{\sseq@eval{#1{\the#1#2}}}
+
+\def\sseq@d@addto@temptoks{\sseq@d@addto@toks\sseq@temptoks}
+\def\sseq@e@addto@temptoks{\sseq@e@addto@toks\sseq@temptoks}
+
+
+% Used in sseqkeys to delete spaces from style commands.
+% Set the catcode of space to ignore, and then reparse the characters in #2.
+\def\sseq@setmacronospaces#1#2{%
+ \bgroup\catcode`\ =9\relax
+ \makeatletter
+ \scantokens{\expandafter\egroup\expandafter\def\expandafter#1\expandafter{\csname #2\endcsname}}%
+}
+
+\def\sseq@setnospaces#1#2{%
+ \bgroup\catcode`\ =9\relax
+ \makeatletter
+ \scantokens{\expandafter\egroup\expandafter\def\expandafter#1\expandafter{\@firstofone{#2}}}%
+}
+
+
+\def\sseq@removeparens{\@xp\sseq@removeparens@}
+\def\sseq@removeparens@(#1){#1}
+
+% Stolen from trimspaces.sty
+\bgroup
+\catcode`\Q=3
+\gdef\sseq@trimspaces#1{%
+ \romannumeral-`\q\sseq@trim@trim@\noexpand#1Q Q%
+}
+\long\gdef\sseq@trim@trim@#1 Q{\sseq@trim@trim@@#1Q}
+\long\gdef\sseq@trim@trim@@#1Q#2{#1}
+\egroup
+\def\sseq@trimleadingspaces{\romannumeral-`q}
+
+\def\sseq@ifempty#1{%
+ \@xp\ifx\@xp\sseq@nil\detokenize{#1}\sseq@nil
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi
+}
+
+\def\sseq@ifnil#1{
+ \ifx\sseq@nil#1
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi
+}
+
+\let\sseq@breakpoint\relax
+\let\sseq@breakpointfinally\@gobble
+\def\sseq@break#1\sseq@breakpoint{}
+\def\sseq@break@finally#1\sseq@breakpoint#2{#2}
+
+\def\sseq@breakfi{\fi\sseq@break}
+\def\sseq@breakfifi{\fi\fi\sseq@break}
+\def\sseq@breakfififi{\fi\fi\fi\sseq@break}
+\long\def\sseq@breakdataenv#1\end#2{
+ \def\sseq@tempa{sseqdata}\def\sseq@tempb{#2}\ifx\sseqtempa\sseqtempb
+ \@xp\sseq@breakdataenv@
+ \else
+ \@xp\sseq@breakdataenv
+ \fi
+}
+\def\sseq@breakdataenv@{\let\endsseqdata\sseq@breakendsseqdata\end{sseqdata}}
+
+\long\def\sseq@breakpageenv#1\end#2{
+ \def\sseq@tempa{sseqpage}\def\sseq@tempb{#2}\ifx\sseqtempa\sseqtempb
+ \@xp\sseq@breakpageenv@
+ \else
+ \@xp\sseq@breakpageenv
+ \fi
+}
+\def\sseq@breakpageenv@{\let\endsseqpage\sseq@breakendsseqpage\end{sseqpage}}
+\def\sseq@breakendsseqdata{}
+\def\sseq@breakendsseqpage{}
+
+\def\sseq@seteverythingtonoops{%
+ \let\sseqdata\comment
+ \let\sseqpage\comment
+ \let\sseqkeys\@gobble
+ \let\sseqnewgroup\@gobblethree
+}
+
+
+
+\input sseqmessages.code.tex % Exposes directly: \sseqerrortowarning
+\input sseqcheckdefinitions.code.tex
+
+\ifsseq@tempif\else % Set to false in checkdefinitions if it failed to patch the key-value system.
+ \sseq@seteverythingtonoops
+ \sseq@pgfkeyspatchfailed
+\fi
+
+\input sseqloadstore.code.tex % Responsible for installing environment-only macros
+\input sseqmacromakers.code.tex % Exposes directly: \DeclareSseqCommand, \NewSseqCommand, \DeclareSseqGroup, \NewSseqGroup
+
+\input sseqparsers.code.tex % Responsible for making tikz modifications, exposes directly \sseqnormalizemonomial, \sseqparseint
+
+
+
+\ifsseq@patchforeach
+ \input sseqforeach.code.tex
+\else
+ \def\sseq@patchfor{}
+\fi
+
+\input sseqkeys.code.tex % Exposes directly: \sseqset, \sseqnewfamily
+\input sseqmain.code.tex % Defines all the main commands. Exposes directly: the environments, \xmin, \xmax, etc, \SseqCopyPage
+\input sseqdrawing.code.tex
+
+% Give standard definitions for savedpaths wrappers
+\def\sseq@beginscope@object{\begin{scope}}
+\def\sseq@endscope@object{\end{scope}}
+\let\sseq@scope@object\@firstofone
+\let\sseq@style@object\@firstofone
+\let\sseq@class@object\sseq@class@draw@ifpage
+\let\sseq@differential@object\sseq@differential@draw@ifpage
+\let\sseq@structline@object\sseq@structline@draw@ifpage
+\let\sseq@circleclass@object\sseq@circleclass@draw@ifpage
+\let\sseq@tikzpath@object\@firstofone
+
+
+%%% Some default key settings
+\sseqset{
+ edge labels={auto=right},
+ classes={draw,circle,inner sep=0pt,minimum size=0.35em},
+ circle classes={newellipse, ellipse ratio=1.2,draw, inner sep=2pt},
+ edges=draw,
+ math nodes,
+ differentials=->,
+ pins=help lines
+}
+
+\ifsseq@tooltip
+ \let\sseqtooltip\sseq@tooltip@wrapper
+\fi
+
+% Extra commands to expose:
+\let\sseqifempty\sseq@ifempty
+\let\SseqParseInt\sseqparseint
+\let\SseqNewFamily\sseqnewfamily
+
+\def\sseqpower#1#2{\@xp\sseqtypesetpower@\@xp{\the\numexpr#2}{#1}{1}}
+\def\sseqpowerempty#1#2{\@xp\sseqtypesetpower@\@xp{\the\numexpr#2}{#1}{}}
+\def\sseqtypesetpower@#1#2#3{\ifnum#1=\z@#3\else\ifnum#1=\@ne#2\else#2^{#1}\fi\fi}
diff --git a/graphics/pgf/contrib/spectralsequences/sseqcheckdefinitions.code.tex b/graphics/pgf/contrib/spectralsequences/sseqcheckdefinitions.code.tex
new file mode 100644
index 0000000000..5cd92a3bf3
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqcheckdefinitions.code.tex
@@ -0,0 +1,223 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqcheckdefinitions.code.tex
+%%
+%% A few tikz commands are modified in sseqpages. This file checks the definitions of all commands modified. Of course, this is insufficient to ensure that
+%% the behavior isn't completely wrong, but at least it's a sanity check.
+%%
+
+% TODO: we could recover from failing to patch keys.
+
+\sseq@tempiftrue
+\begingroup
+\def\sseq@checkprotecteddef#1{\def\sseq@temp{\sseq@checkdef@{#1}}\afterassignment\sseq@temp\protected\long\@xp\def\csname sseq@check@\sseq@macroname#1\endcsname}
+\def\sseq@checkdef#1{\def\sseq@temp{\sseq@checkdef@{#1}}\afterassignment\sseq@temp\@xp\def\csname sseq@check@\sseq@macroname#1\endcsname}
+\def\sseq@checkdef@#1{
+ \@xp\ifx\csname sseq@check@\sseq@macroname#1\endcsname#1\else
+ \sseq@tempiffalse
+ \fi
+}
+
+%%
+%% sseqmacromakers.code.tex
+%%
+
+\ExplSyntaxOn
+% I should work out how old the version of xparse has to be before this breaks, but I'm too lazy.
+% It would also be nice if I could figure out how to ensure that my trick of setting \l__xparse_grab_expandably_bool to false works correctly, but this might be difficult
+\@ifpackagelater{xparse}{2017/02/08}{
+ \sseq@checkprotecteddef \__xparse_grab_u:w #1#2 \__xparse_run_code:{
+ \__xparse_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn
+ }
+
+ \sseq@checkprotecteddef\__xparse_grab_u_aux:nnN #1#2#3
+ {
+ \tl_set:Nn \l__xparse_signature_tl {#2}
+ \exp_after:wN #3 \l__xparse_fn_tl ##1 #1
+ { \__xparse_add_arg:n {##1} }
+ \l__xparse_fn_tl
+ }
+
+
+ \sseq@checkprotecteddef \__xparse_normalize_type_u:w #1 {
+ \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+ \__xparse_normalize_check_lu:N u
+ \__xparse_add_arg_spec_mandatory:n { u {#1} } % Oct 17, 2018
+% \int_incr:N \l__xparse_mandatory_args_int
+% \tl_clear:N \l__xparse_last_delimiters_tl
+ \__xparse_normalize_arg_spec_loop:n
+ }
+
+ \ifsseq@tempif
+ \global\sseq@patchxparseUtrue
+ \else
+ \global\sseq@patchxparseUfalse
+ \fi
+ \sseq@tempiftrue
+}{}
+
+\@ifpackagelater{expl3}{2018/10/01}{
+ % TODO: Check that \peek_meaning and \peek_meaning_remove have the right definitions
+ \sseq@tempiftrue
+ \sseq@checkprotecteddef\peek_meaning_ignore_spaces:NTF#1#2#3{\peek_remove_spaces:n{\peek_meaning:NTF#1{#2}{#3}}}
+ \sseq@checkprotecteddef\peek_meaning_remove_ignore_spaces:NTF#1#2#3{\peek_remove_spaces:n{\peek_meaning_remove:NTF#1{#2}{#3}}}
+ \ifsseq@tempif\else
+ \sseq@error@n{expl3-incompatibility}{\peek_meaning_ignore_spaces:NTF}
+ \fi
+
+}{}
+
+\ExplSyntaxOff
+\sseq@tempiftrue
+%%
+%% sseqkeys.code.tex
+%%
+
+
+\sseq@checkdef\pgfkeys@case@one{%
+ \pgfkeysifdefined{\pgfkeyscurrentkey/.@cmd}%
+ {\pgfkeysgetvalue{\pgfkeyscurrentkey/.@cmd}{\pgfkeys@code}%
+ \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov}
+ {\pgfkeys@case@two}%
+}
+
+\sseq@checkdef\pgfkeys@case@two@extern{%
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text%
+ \pgfkeysvalueof{\pgfkeyscurrentkey}%
+ \else%
+ \pgfkeyslet{\pgfkeyscurrentkey}\pgfkeyscurrentvalue%
+ \fi%
+}
+
+
+\ifsseq@tempif\else
+ \endgroup
+ \sseq@tempiffalse % We'll throw a critical error in spectralsequences.sty to end input
+ \endinput
+\fi
+%%
+%% sseqdrawing.code.tex
+%%
+
+%from \pgf\frontendlayer\tikz\libraries\tikzlibraryfit.code.tex line 81
+\sseq@checkdef\tikz@lib@fit@scan@handle#1{%
+ \iftikz@shapeborder%
+ % Ok, fit all four external anchors, if they exist
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{west}}%
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{east}}%
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{north}}%
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{south}}%
+ \else%
+ \tikz@lib@fit@adjust{#1}%
+ \fi%
+ \tikz@lib@fit@scan%
+}
+
+% from \pgf\frontendlayer\tikz\tikz.code.tex line 5164
+\sseq@checkdef\tikz@calc@anchor#1.#2\tikz@stop{%
+ \pgfpointanchor{\tikz@pp@name{#1}}{#2}%
+}
+
+\ifsseq@tempif
+ \global\sseq@patchfittrue
+\else
+ \sseq@warning{fit-patch-failed}
+ \global\sseq@patchfitfalse
+\fi
+
+\sseq@tempiftrue
+
+
+%%
+%% sseqforeach.code.tex
+%%
+\sseq@checkdef\pgffor@@vars@opt[#1]{\pgfkeys{/pgf/foreach/.cd,#1}\pgffor@vars}
+
+\sseq@checkdef\pgffor@doloop{%
+ \pgffor@begingroup
+ \edef\pgffor@temp{\expandafter\Pgffor@geT\the\pgffor@iter}%
+ \edef\pgffor@incheck{{.0/}{\pgffor@temp/}}%
+ \expandafter\pgfutil@in@\pgffor@incheck%
+ \ifpgfutil@in@%
+ \expandafter\pgffor@strip\pgffor@temp%
+ \fi%
+ \expandafter\pgfutil@in@\expandafter/\expandafter{\pgffor@var}%
+ \ifpgfutil@in@%
+ \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@temp//\relax}%
+ \expandafter\pgffor@multiassign\pgffor@var/\pgffor@stop/\pgffor@stop/\relax%
+ \else%
+ % Convert to alphabetic sequence, if necessary.
+ \ifpgffor@alphabeticsequence%
+ \pgffor@makealphabetic\pgffor@temp%
+ \expandafter\let\pgffor@var=\pgffor@temp%
+ \else%
+ \expandafter\expandafter\expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@temp}%
+ \fi%
+ \fi%
+ % Insert any context, if any.
+ \ifpgffor@context%
+ \let\pgffor@temp=\pgffor@dots@pre%
+ \expandafter\pgfutil@append@macrotomacro\expandafter%
+ {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@var}%
+ \expandafter\pgfutil@append@macrotomacro\expandafter%
+ {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@dots@post}%
+ \expandafter\let\pgffor@var=\pgffor@temp%
+ \fi%
+ % Perform assignments before loop body.
+ \ifx\pgffor@assign@before@code\pgfutil@empty%
+ \else%
+ \pgffor@assign@before@code%
+ \fi%
+ %
+ \expandafter\expandafter\expandafter\pgffor@reset@hooks\expandafter\pgffor@beginhook\expandafter\pgffor@body\pgffor@endhook%
+ %
+ % Perform assignments after loop body.
+ \ifx\pgffor@assign@after@code\pgfutil@empty%
+ \else%
+ \pgffor@assign@after@code%
+ \fi%
+ \pgffor@endgroup%
+ \pgffor@loop%
+}
+
+\sseq@checkdef\pgffor@invokebody{%
+ \pgffor@begingroup%
+ \expandafter\pgfutil@in@\expandafter/\expandafter{\pgffor@var}%
+ \ifpgfutil@in@%
+ \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@value//\relax}%
+ \expandafter\pgffor@multiassign\pgffor@var/\pgffor@stop/\pgffor@stop/\relax%
+ \else%
+ \expandafter\expandafter\expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@value}%
+ \fi%
+ % Execute assign once code.
+ \ifx\pgffor@assign@once@code\pgfutil@empty%
+ \else\pgffor@assign@once@code%
+ \fi%
+ % Execute assign before code.
+ \ifx\pgffor@assign@before@code\pgfutil@empty%
+ \else\pgffor@assign@before@code%
+ \fi%
+ %
+ \expandafter\expandafter\expandafter\pgffor@reset@hooks\expandafter\pgffor@beginhook\expandafter\pgffor@body\pgffor@endhook%
+ % Execute assign after code.
+ \ifx\pgffor@assign@after@code\pgfutil@empty%
+ \else%
+ \pgffor@assign@after@code%
+ \fi%
+ %
+ \pgffor@endgroup%
+}
+
+\ifsseq@tempif
+ \global\sseq@patchforeachtrue
+\else
+ \sseq@warning{foreach-patch-failed}
+ \global\sseq@patchforeachfalse
+\fi
+
+\endgroup \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/sseqdrawing.code.tex b/graphics/pgf/contrib/spectralsequences/sseqdrawing.code.tex
new file mode 100644
index 0000000000..3f3060dc7f
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqdrawing.code.tex
@@ -0,0 +1,1502 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqdrawing.code.tex
+%%
+%% Defines the macros that draw the features of the spectral sequence (at least, those that aren't drawn by tikz).
+%% Everything here has to be super optimized, because like 90% of the execution time is in these functions.
+%% In particular, tikz is a horrible performance hole that must be avoided at all costs. For example, the code
+%% the code to produce the axis ticks used to use the tikz \node command, and in the file example_KF3n.tex drawing
+%% the axes ticks was taking about 1/3 of the compile time (a little under 1s out of a 3.2)
+%%
+
+% Only for integer valued coordinates...
+\def\sseq@qpointxy#1#2{\pgfqpointxy{\numexpr#1+\sseq@xoffset\relax}{\numexpr#2+\sseq@yoffset\relax}}
+
+\def\sseq@transform@xymirror{
+ \pgfsetxvec{\pgfqpoint{1cm}{0cm}}
+ \pgfsetyvec{\pgfqpoint{0cm}{1cm}}
+ \pgftransformcm{0}{1}{1}{0}{\pgfpointxy{\sseq@xoffset*\sseq@xscale }{\sseq@yoffset*\sseq@yscale}} % Reflect x and y axes,
+ \pgftransformshift{\pgfpointxy{-\sseq@xoffset*\sseq@yscale}{-\sseq@yoffset*\sseq@xscale}} % but we need to conjugate by a shift of (xoffset,yoffset)
+ \pgfsetyvec{\pgfqpoint{0cm}{\sseq@xscale cm}}
+ \pgfsetxvec{\pgfqpoint{\sseq@yscale cm}{0cm}}
+}
+
+
+\def\sseq@setlayoutparameter#1#2{\@xp\let\csname sseq@#1\@xp\endcsname\csname sseq@#1@#2\endcsname}
+\def\sseq@setlayoutparameters{
+ \sseq@setlayoutparameter{yaxisorigin}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{drawyaxis}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{yaxisstartoffset}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{yaxisendoffset}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{bottomgridpadding}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{topgridpadding}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{bottomclippadding}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{topclippadding}{x\sseq@xaxistype}
+ \sseq@setlayoutparameter{xlabelposition}{x\sseq@xaxistype}
+%
+ \sseq@setlayoutparameter{xaxisorigin}{y\sseq@yaxistype}
+ \sseq@setlayoutparameter{drawxaxis}{y\sseq@xaxistype}
+ \sseq@setlayoutparameter{xaxisstartoffset}{y\sseq@yaxistype}
+ \sseq@setlayoutparameter{xaxisendoffset}{y\sseq@yaxistype}
+ \sseq@setlayoutparameter{leftgridpadding}{y\sseq@yaxistype}
+ \sseq@setlayoutparameter{rightgridpadding}{y\sseq@yaxistype}
+ \sseq@setlayoutparameter{leftclippadding}{y\sseq@yaxistype}
+ \sseq@setlayoutparameter{rightclippadding}{y\sseq@yaxistype}
+ \sseq@setlayoutparameter{ylabelposition}{y\sseq@xaxistype}
+}
+
+% The appropriate one of these is chosen by the "axis type" keys in sseqkeys.
+
+% Used to determine axis and ticks placement
+\def\sseq@xaxisorigin@yborder{\sseq@xmin}
+\def\sseq@xaxisorigin@yframe{\sseq@xmin}
+\def\sseq@xaxisorigin@ycenter{\sseq@xaxisorigin@center@}
+\def\sseq@yaxisorigin@xborder{\sseq@ymin}
+\def\sseq@yaxisorigin@xframe{\sseq@ymin}
+\def\sseq@yaxisorigin@xcenter{\sseq@yaxisorigin@center@}
+
+% Used to determine clipping and grid boundaries
+\def\sseq@leftgridpadding@yborder{\dimexpr\sseq@yaxisgap-\sseq@yclip@axisgap\relax}
+\def\sseq@rightgridpadding@yborder{\sseq@xaxis@end@extend}
+\def\sseq@leftgridpadding@ycenter{\sseq@xaxis@start@extend}
+\def\sseq@rightgridpadding@ycenter{\sseq@xaxis@end@extend}
+\def\sseq@leftgridpadding@yframe{\dimexpr\sseq@yaxisgap-\sseq@yclip@axisgap\relax}
+\def\sseq@rightgridpadding@yframe{5cm} % Just make it big enough to push off the end of the clip
+\def\sseq@leftgridpadding@ynone{\sseq@yaxisgap}
+\def\sseq@rightgridpadding@ynone{\sseq@yaxisgap}
+
+
+\def\sseq@bottomgridpadding@xborder{\dimexpr\sseq@xaxisgap-\sseq@xclip@axisgap\relax}
+\def\sseq@topgridpadding@xborder{\sseq@yaxis@end@extend}
+\def\sseq@bottomgridpadding@xcenter{\sseq@yaxis@start@extend}
+\def\sseq@topgridpadding@xcenter{\sseq@yaxis@end@extend}
+\def\sseq@bottomgridpadding@xframe{\dimexpr\sseq@xaxisgap-\sseq@xclip@axisgap\relax}
+\def\sseq@topgridpadding@xframe{5cm}
+\def\sseq@bottomgridpadding@xnone{\sseqxaxisgap}
+\def\sseq@topgridpadding@xnone{\sseq@xaxisgap}
+
+\def\sseq@leftclippadding@yborder{\dimexpr-\sseq@yaxisgap+\sseq@yclip@axisgap\relax}
+\def\sseq@rightclippadding@yborder{\dimexpr\sseq@xaxis@end@extend+\sseq@clip@padding@right\relax}
+\def\sseq@leftclippadding@ycenter{\dimexpr-\sseq@xaxis@start@extend-\sseq@clip@padding@left\relax}
+\def\sseq@rightclippadding@ycenter{\dimexpr\sseq@xaxis@end@extend+\sseq@clip@padding@right\relax}
+\def\sseq@leftclippadding@yframe{\dimexpr-\sseq@yaxisgap+\sseq@yclip@axisgap\relax}
+\def\sseq@rightclippadding@yframe{\dimexpr\sseq@yaxisgap-\sseq@yclip@axisgap\relax}
+\def\sseq@leftclippadding@ynone{\dimexpr-\sseq@yaxisgap-\sseq@clip@padding@left\relax}
+\def\sseq@rightclippadding@ynone{\dimexpr\sseq@yaxisgap+\sseq@clip@padding@right\relax}
+
+\def\sseq@bottomclippadding@xborder{\dimexpr-\sseq@xaxisgap+\sseq@xclip@axisgap\relax}
+\def\sseq@topclippadding@xborder{\dimexpr\sseq@yaxis@end@extend+\sseq@clip@padding@top\relax}
+\def\sseq@bottomclippadding@xcenter{\dimexpr-\sseq@yaxis@start@extend-\sseq@clip@padding@bottom\relax}
+\def\sseq@topclippadding@xcenter{\dimexpr\sseq@yaxis@end@extend+\sseq@clip@padding@top\relax}
+\def\sseq@bottomclippadding@xframe{\dimexpr-\sseq@xaxisgap+\sseq@xclip@axisgap\relax}
+\def\sseq@topclippadding@xframe{\dimexpr\sseq@xaxisgap-\sseq@xclip@axisgap\relax}
+\def\sseq@bottomclippadding@xnone{\dimexpr-\sseq@xaxisgap-\sseq@clip@padding@bottom\relax}
+\def\sseq@topclippadding@xnone{\dimexpr\sseq@xaxisgap+\sseq@clip@padding@top\relax}
+
+% Used to figure out how much further beyond (min -- max) to draw axes
+\def\sseq@xaxisstartoffset@yborder{\dimexpr\sseq@xaxis@tail+\sseq@yaxisgap\relax}
+\def\sseq@xaxisendoffset@yborder{\sseq@xaxis@end@extend}
+\def\sseq@xaxisstartoffset@ycenter{\sseq@xaxis@start@extend}
+\def\sseq@xaxisendoffset@ycenter{\sseq@xaxis@end@extend}
+\def\sseq@xaxisstartoffset@yframe{\sseq@yaxisgap}
+\def\sseq@xaxisendoffset@yframe{\sseq@yaxisgap}
+
+\def\sseq@yaxisstartoffset@xborder{\dimexpr\sseq@yaxis@tail+\sseq@xaxisgap\relax}
+\def\sseq@yaxisendoffset@xborder{\sseq@yaxis@end@extend}
+\def\sseq@yaxisstartoffset@xcenter{\sseq@yaxis@start@extend}
+\def\sseq@yaxisendoffset@xcenter{\sseq@yaxis@end@extend}
+\def\sseq@yaxisstartoffset@xframe{\sseq@xaxisgap}
+\def\sseq@yaxisendoffset@xframe{\sseq@xaxisgap}
+
+\def\sseq@xlabelposition@xborder{(0,-\sseq@xaxisstartoffset)}
+\def\sseq@xlabelposition@xcenter{(-\sseq@yaxisgap,-\sseq@xaxisstartoffset-5pt)}
+\def\sseq@xlabelposition@xframe{(0,-\sseq@xaxisgap-\sseq@xlabelgap-10pt)}
+\def\sseq@xlabelposition@xnone{(0,0)}
+
+\def\sseq@ylabelposition@yborder{(0,\sseq@yaxisstartoffset)}
+\def\sseq@ylabelposition@ycenter{(-\sseq@xaxisgap,\sseq@yaxisstartoffset+5pt)}
+\def\sseq@ylabelposition@yframe{(0,\sseq@yaxisgap+\sseq@ylabelgap+10pt)}
+\def\sseq@ylabelposition@ynone{(0,0)}
+%%%
+%%% Draw axes and clip
+%%%
+\def\sseq@handlexaxis{
+ \bgroup
+ \sseq@drawxaxis
+ \ifsseq@drawxaxisticks
+ \sseq@drawxticks
+ \fi
+ \egroup
+}
+\def\sseq@handleyaxis{
+ \bgroup
+ \sseq@drawyaxis
+ \ifsseq@drawyaxisticks
+ \sseq@drawyticks
+ \fi
+ \egroup
+}
+
+% Draws an x axis. Use with \sseq@transform@xymirror to draw y axis.
+% #1 -- horizontal start offset
+% #2 -- horizontal end offset
+% #3 -- vertical offset
+% #4 -- start value
+% #5 -- end value
+% #6 -- vertical value
+\def\sseq@drawaxis@generic#1#2#3#4#5#6{
+ \bgroup
+ \pgftransformshift{\pgfqpoint{#2}{#3}}
+ \pgfpathmoveto{\sseq@qpointxy{#5}{#6}}
+ \egroup
+%
+ \bgroup
+ \pgftransformshift{\pgfqpoint{#1}{#3}}
+ \pgfpathlineto{\sseq@qpointxy{#4}{#6}}
+ \egroup
+}
+
+\def\sseq@drawxaxis@ynone{
+ \sseq@drawxaxisticksfalse
+}
+\def\sseq@drawyaxis@xnone{
+ \sseq@drawyaxisticksfalse
+}
+
+\def\sseq@drawxaxis@yborder{
+ \sseq@drawaxis@generic{-\sseq@xaxisstartoffset}{\sseq@xaxisendoffset}{-\sseq@xaxisgap}{\sseq@xmin}{\sseq@xmax}{\sseq@yaxisorigin}
+ \pgfusepath{stroke}
+}
+\let\sseq@drawxaxis@ycenter\sseq@drawxaxis@yborder
+
+\def\sseq@drawxaxis@yframe{
+ \sseq@drawaxis@generic{-\sseq@xaxisstartoffset}{\sseq@xaxisendoffset}{-\sseq@xaxisgap}{\sseq@xmin}{\sseq@xmax}{\sseq@ymin}
+ \sseq@drawaxis@generic{-\sseq@xaxisstartoffset}{\sseq@xaxisendoffset}{ \sseq@xaxisgap}{\sseq@xmin}{\sseq@xmax}{\sseq@ymax}
+ \pgfusepath{stroke}
+}
+\def\sseq@drawyaxis@xborder{
+ \bgroup
+ \sseq@transform@xymirror
+ \sseq@drawaxis@generic{-\sseq@yaxisstartoffset}{\sseq@yaxisendoffset}{-\sseq@yaxisgap}{\sseq@ymin}{\sseq@ymax}{\sseq@xaxisorigin}
+ \pgfusepath{stroke}%
+ \egroup
+}
+\let\sseq@drawyaxis@xcenter\sseq@drawyaxis@xborder
+\def\sseq@drawyaxis@xframe{
+ \bgroup
+ \sseq@transform@xymirror
+ \sseq@drawaxis@generic{-\sseq@yaxisstartoffset}{\sseq@yaxisendoffset}{-\sseq@yaxisgap}{\sseq@ymin}{\sseq@ymax}{\sseq@xmin}
+ \sseq@drawaxis@generic{-\sseq@yaxisstartoffset}{\sseq@yaxisendoffset}{ \sseq@yaxisgap}{\sseq@ymin}{\sseq@ymax}{\sseq@xmax}
+ \pgfusepath{stroke}%
+ \egroup
+}
+
+\ExplSyntaxOn
+\def\sseq@intdivceiling#1#2{%
+ \ifnum#1>\z@ % \int_div_truncate:nn rounds towards 0. We want \int_div_ceiling
+ \int_div_truncate:nn{#1+#2-1}{#2} % if positive, use ceil(p/q)=floor((p+q-1)/q) for p,q integers
+ \else
+ \int_div_truncate:nn{#1}{#2} % if we are negative, towards 0 is ceiling
+ \fi
+}
+\def\sseq@intdivfloor#1#2{%
+ \ifnum#1<\z@ % \int_div_truncate:nn rounds towards 0. We want \int_div_floor
+ \int_div_truncate:nn{#1-#2+1}{#2} % if we are negative, use floor(p/q) = ceil(p-q+1/q) for p,q integers
+ \else
+ \int_div_truncate:nn{#1}{#2} % if positive, towards 0 is floor
+ \fi
+}
+\ExplSyntaxOff
+
+% #1 -- xmin
+% #2 -- xmax
+% #3 -- step
+% #4 -- offset
+% #5 -- ymin
+% #6 -- xaxisgap
+% #7 -- code
+\def\sseq@tickloop@generic#1#2#3#4#5#6#7{
+ \sseq@tempcount=\numexpr % min
+ \sseq@intdivceiling{#1}{#3} * #3
+ -
+ \sseq@intdivceiling{#4}{#3} * #3 + #4
+ \relax
+ \ifnum\sseq@tempcount<#1\relax
+ \advance\sseq@tempcount#3\relax
+ \fi
+ \sseq@tempcountb=\numexpr#2+1\relax % max
+ \loop
+ \bgroup
+ \pgftransformshift{\sseq@qpointxy{\sseq@tempcount}{#5}}%
+ \pgftransformshift{\pgfqpoint{0pt}{#6}}
+ #7
+ \egroup
+ \advance\sseq@tempcount#3\relax
+ \ifnum\sseq@tempcount<\sseq@tempcountb\repeat
+}
+
+
+\def\sseq@drawxticks{%
+ \sseq@tickloop@generic{\sseq@xmin}{\sseq@xmax}{\sseq@xtickstep}{\sseq@xtickstepoffset}{\sseq@yaxisorigin}{-\sseq@xaxisgap}{
+ \pgftransformshift{\pgfqpoint{0pt}{-\sseq@xlabelgap}}
+ \pgftransformresetnontranslations
+ %\@xp\tikzset\@xp{\sseq@xtickstyle}
+ %\pgftext{\tikz@options\tikz@textfont\hbox{$\sseq@xtickfn{\the\sseq@tempx}$}}%
+ \@xp\node\@xp[\sseq@xtickstyle]{\hbox{$\sseq@xtickfn{\the\sseq@tempcount}$}};
+ }
+ \ifnum\sseq@xmajortickstep>\z@
+ \sseq@tickloop@generic{\sseq@xmin}{\sseq@xmax}{\sseq@xmajortickstep}{\sseq@xtickstepoffset}{\sseq@yaxisorigin}{-\sseq@xaxisgap}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0}{-0.4*\sseq@xaxisgap}}
+ }
+ \fi
+ \ifnum\sseq@xminortickstep>\z@
+ \sseq@tickloop@generic{\sseq@xmin}{\sseq@xmax}{\sseq@xminortickstep}{\sseq@xtickstepoffset}{\sseq@yaxisorigin}{-\sseq@xaxisgap}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0}{-0.2*\sseq@xaxisgap}}
+ }
+ \fi
+ \pgfusepath{stroke}
+}
+\def\sseq@drawyticks{%
+ \sseq@transform@xymirror
+ \sseq@tickloop@generic{\sseq@ymin}{\sseq@ymax}{\sseq@ytickstep}{\sseq@ytickstepoffset}{\sseq@xaxisorigin}{-\sseq@yaxisgap}{
+ \pgftransformshift{\pgfqpoint{0pt}{-\sseq@ylabelgap}}
+ \pgftransformresetnontranslations
+ %\@xp\tikzset\@xp{\sseq@ytickstyle}
+ %\pgftext{\tikz@options\tikz@textfont\hbox{$\sseq@ytickfn{\the\sseq@tempx}$}}%
+ \@xp\node\@xp[\sseq@ytickstyle]{\hbox{$\sseq@ytickfn{\the\sseq@tempcount}$}};
+ }
+ \ifnum\sseq@ymajortickstep>\z@
+ \sseq@tickloop@generic{\sseq@ymin}{\sseq@ymax}{\sseq@ymajortickstep}{\sseq@ytickstepoffset}{\sseq@xaxisorigin}{-\sseq@yaxisgap}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0}{-0.4*\sseq@yaxisgap}}
+ }
+ \fi
+ \ifnum\sseq@yminortickstep>\z@
+ \sseq@tickloop@generic{\sseq@ymin}{\sseq@ymax}{\sseq@yminortickstep}{\sseq@ytickstepoffset}{\sseq@xaxisorigin}{-\sseq@yaxisgap}{
+ \pgfpathmoveto{\pgfpointorigin}
+ \pgfpathlineto{\pgfpoint{0}{-0.2*\sseq@yaxisgap}}
+ }
+ \fi
+ \pgfusepath{stroke}
+}
+
+
+\def\sseq@setupclip{
+ %\clip(\sseq@xmin-0.4,\sseq@ymin-0.4) rectangle (\sseq@xmax+0.5,\sseq@ymax+0.5);%
+ \ifsseq@clip
+ \ifx\sseq@customclip\pgfutil@empty
+ \bgroup
+ \def\xmin{\pgftransformshift{\pgfqpoint{\sseq@leftclippadding}{0pt}}}
+ \def\ymin{\pgftransformshift{\pgfqpoint{0pt}{\sseq@bottomclippadding}}}
+ \def\xmax{\pgftransformshift{\pgfqpoint{\sseq@rightclippadding}{0pt}}}
+ \def\ymax{\pgftransformshift{\pgfqpoint{0pt}{\sseq@topclippadding}}}
+ \bgroup
+ \xmin\ymin
+ \pgfpathmoveto{\pgfqpointxy{\numexpr\sseq@xmin+\sseq@xoffset\relax}{\numexpr\sseq@ymin+\sseq@yoffset\relax}}
+ \egroup
+ \bgroup
+ \xmin\ymax
+ \pgfpathlineto{\pgfqpointxy{\numexpr\sseq@xmin+\sseq@xoffset\relax}{\numexpr\sseq@ymax+\sseq@yoffset\relax}}
+ \egroup
+ \bgroup
+ \xmax\ymax
+ \pgfpathlineto{\pgfqpointxy{\numexpr\sseq@xmax+\sseq@xoffset\relax}{\numexpr\sseq@ymax+\sseq@yoffset\relax}}
+ \egroup
+ \bgroup
+ \xmax\ymin
+ \pgfpathlineto{\pgfqpointxy{\numexpr\sseq@xmax+\sseq@xoffset\relax}{\numexpr\sseq@ymin+\sseq@yoffset\relax}}
+ \egroup
+ \egroup
+ \pgfpathclose
+ \pgfgetpath\sseq@theclippath % This stores the clipping so I can apply it later
+ \pgfusepath{discard}% This has to be after the egroup or else the clipping gets screwed up
+%
+ \bgroup
+ \pgfpathmoveto{\pgfqpointxy{\numexpr\sseq@xmin+\sseq@xoffset\relax}{\numexpr\sseq@ymin+\sseq@yoffset\relax}}
+ \pgfpathlineto{\pgfqpointxy{\numexpr\sseq@xmin+\sseq@xoffset\relax}{\numexpr\sseq@ymax+\sseq@yoffset\relax}}
+ \pgfpathlineto{\pgfqpointxy{\numexpr\sseq@xmax+\sseq@xoffset\relax}{\numexpr\sseq@ymax+\sseq@yoffset\relax}}
+ \pgfpathlineto{\pgfqpointxy{\numexpr\sseq@xmax+\sseq@xoffset\relax}{\numexpr\sseq@ymin+\sseq@yoffset\relax}}
+ \pgfpathclose
+ \egroup
+ \pgfgetpath\sseq@therangepath % Only for deciding whether to draw "tricky edges"
+ \pgfusepath{discard}
+ \else
+ \def\sseq@temp{\path[name path=temp]}
+ \@xptwo\sseq@temp\@xp\@gobble\sseq@customclip
+ \pgfgetpath\sseq@theclippath
+ \let\sseq@theclippath\tikz@intersect@path@name@temp
+ \fi
+ \else
+ \let\sseq@theclippath\relax
+ \fi
+}
+\def\sseq@useclip{\ifx\sseq@theclippath\relax\else\pgfsetpath\sseq@theclippath\pgfusepath{clip}\fi}
+
+
+% sets \pgf@xa and \pgf@ya equal to the coordinates of (1,1), sets \pgf@xb and \pgf@xb equal to (x grid step, y grid step)
+\def\sseq@grid@setstepandgridstep{
+ \pgf@process{\pgfqpointxy{1}{1}}
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{\pgfqpointxy{\sseq@xgridstep}{\sseq@ygridstep}}
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+}
+
+% #1 -- macro to store result in
+% #2 -- "x" or "y" as appropriate
+% #3 -- length (with units)
+% #4 -- fraction of gridstep
+% If #2 is x, then it either sets #1 to #3/(x scale) or xgridstep*#4, whichever is smaller
+% The output is intended for use with \pgfpointxy.
+\def\sseq@grid@atmostgridstep#1#2#3#4{
+ \ifdim#3<\dimexpr\csname pgf@#2b\endcsname*#4\relax
+ \pgfmathparse{#3/\csname pgf@#2a\endcsname}
+ \let#1\pgfmathresult
+ \else
+ \edef#1{\csname sseq@#2gridstep\endcsname*#4}
+ \fi
+}
+
+% This grid was a huge pain in the ass to get right...
+\def\sseq@grid@chess{
+ \bgroup
+ \pgfscope
+ % Pad on the right and top by either the grid padding, or the remaining piece of the checkerboard before it would start a new square
+ % (it looks ugly to have a tiny sliver). Annoyingly, mod returns its result with the same sign as its input, so in order to reduce mod
+ % \sseq@xgridstep and get a positive result, we have to do it twice. The 0.5cm*scale here matches the -0.5 in the \pgfpathgrid call.
+ \pgfmathsetmacro\sseq@rightpadding{min(
+ \sseq@rightgridpadding,
+ 1cm* mod(mod(-\sseq@xmax,\sseq@xgridstep)+\sseq@xgridstep,\sseq@xgridstep)+0.5cm*\sseq@xscale-0.05cm
+ )}
+ \pgfmathsetmacro\sseq@toppadding{min(
+ \sseq@topgridpadding,
+ 1cm * mod(mod(-\sseq@ymax,\sseq@ygridstep)+\sseq@ygridstep,\sseq@ygridstep)+0.5cm*\sseq@yscale-0.02cm
+ )}
+ % Because of complicated aliasing issues that arise when misusing the \pgfgrid command in this way,
+ % it's more convenient to add a clip than to actually stop things in the right place.
+ \clip (\sseq@xmin-\sseq@xoffset,\sseq@ymin-\sseq@yoffset) ++ (-0.48, -0.48)
+ rectangle ([shift={(\sseq@rightpadding pt,\sseq@toppadding pt)}]\sseq@xmax,\sseq@ymax);
+%
+ \sseq@useclip
+ \pgfsetcolor{\sseq@gridcolor}
+ \pgfsetstrokeopacity{0.3} % We don't set low opacity for the other grids, but this one is visible even if it is very faint.
+ \sseq@grid@setstepandgridstep
+%
+% Use ifdim with cm to compare real scalars b/c tex is dumb.
+ % okay, now we need to be careful in order to avoid overflows. The hack we are using requires that the xvec and the yvec are equal
+ % because we can't apply these via lowlevelsynccm. However, xvec and yvec are the things that prevent overflows.
+ % What we need to do is set them both equal to the smaller value. Now the scale factor determines the size of the squares,
+ % so we mix in the grid steps. We also need to scale the larger scaled coordinate by the ratio of the two scales.
+ \ifdim\sseq@xscale cm<\sseq@yscale cm\relax
+ % x is smaller so set both x and y vecs to \sseq@xscale cm.
+ \pgfsetxvec{\pgfpoint{\sseq@xscale cm}{0cm}}
+ \pgfsetyvec{\pgfpoint{0cm}{\sseq@xscale cm}}
+ \def\sseq@xadjustscale{\sseq@xgridstep}
+ \def\sseq@yadjustscale{\sseq@yscale/\sseq@xscale*\sseq@ygridstep}
+ \def\sseq@stepscale{\sseq@xscale}
+ \else
+ \pgfsetxvec{\pgfpoint{\sseq@yscale cm}{0cm}}
+ \pgfsetyvec{\pgfpoint{0cm}{\sseq@yscale cm}}
+ \def\sseq@xadjustscale{(\sseq@xscale/\sseq@yscale*\sseq@xgridstep)}
+ \def\sseq@yadjustscale{\sseq@ygridstep}
+ \def\sseq@stepscale{\sseq@yscale}
+ \fi
+ \pgftransformxscale{\sseq@xadjustscale}
+ \pgftransformyscale{\sseq@yadjustscale}
+ % Now we have to put in some ridiculously complicated shift in order to get the bottom corner in the right place.
+ % I found this formula mostly by trial and error.
+ % The basic idea that we should be making something divisible by twice the grid step (which is the actual period of our grid)
+ % is reasonable enough, but what the heck are these other two terms for? I don't know either, thank god it works.
+ \pgftransformshift{\pgfpointxy{
+ floor((\sseq@xgridstep-1)/2)/\sseq@xgridstep
+ + \ifodd\sseq@xgridstep\space 0 \else 0.5/\sseq@xgridstep\fi
+ + mod(1+\sseq@xmin/\sseq@xgridstep,2*\sseq@xgridstep)
+ }{
+ floor((\sseq@ygridstep-1)/2)/\sseq@ygridstep
+ + \ifodd\sseq@ygridstep\space 0\else 0.5/\sseq@ygridstep\fi
+ + mod(1+\sseq@ymin/\sseq@ygridstep,2*\sseq@ygridstep)
+ }
+ }
+ % We use lowlevelsynccm to make the scale adjust the line width. Normally scaling doesn't affect line width, text size, etc, which is sensible.
+ % When you apply \pgflowlevelsynccm, pgf loses track of the coordinate matrix and it gets indiscriminately applied to everything.
+ % This is good for us, because we're doing this absurd thing where we make a checkerboard by drawing a really really fat line.
+ \pgflowlevelsynccm
+ \pgfsetlinewidth{1cm*\sseq@stepscale}
+ \pgfsetdash{{1cm*\sseq@stepscale}{1cm*\sseq@stepscale}}{1cm*\sseq@stepscale}
+%
+ % Naturally some trial and error occurred here too.
+ % Note the huge multiples of \sseq@xgridstep I added in -- they probably aren't necessary, but I don't understand what's going on so whatever.
+ % The basic idea is that things need to be divisible by twice the grid step. The part I added in the shift above
+ % was the remainder when you divide \sseq@xmin by twice the grid step, now we need to add in the multiple of twice the grid step.
+ % The -0.5 is ensuring that the checkerboard boundaries lie at half-integer coordinates (I think).
+ \pgfpathgrid[stepx= 2cm*\sseq@stepscale,stepy=2cm*\sseq@stepscale]
+ { \pgfpointxy
+ { -0.5 + \sseq@intdivfloor{\numexpr\sseq@xmin - \sseq@xgridstep\relax}{2*\sseq@xgridstep}*2*\sseq@xgridstep + \sseq@xoffset - 50*\sseq@xgridstep }
+ { -0.5 + \sseq@intdivfloor{\numexpr\sseq@ymin - \sseq@ygridstep\relax}{2*\sseq@ygridstep}*2*\sseq@ygridstep + \sseq@yoffset - 50*\sseq@ygridstep}
+ }{ \pgfpointxy
+ { \sseq@xmax + \sseq@xoffset + 50*\sseq@xgridstep }
+ { \sseq@ymax + \sseq@yoffset + 50*\sseq@ygridstep }
+ }
+ \pgfusepath{stroke}
+ \endpgfscope
+ \egroup
+}
+
+\def\sseq@grid@crossword{
+ \bgroup
+ \pgfscope
+ \sseq@useclip
+ \pgfsetcolor{\sseq@gridcolor}
+ \pgfsetlinewidth{\the\sseq@gridstrokethickness}
+ \sseq@grid@setstepandgridstep
+%
+ % We don't want the grid to end with an extra line, so extend it by one half the step distance or
+ % \sseq@---gridpadding, whichever is shorter.
+ \sseq@grid@atmostgridstep\sseq@xminpadding{x}{\sseq@leftgridpadding}{1/2}
+ \sseq@grid@atmostgridstep\sseq@xmaxpadding{x}{\sseq@rightgridpadding}{1/2}
+ \sseq@grid@atmostgridstep\sseq@yminpadding{y}{\sseq@bottomgridpadding}{1/2}
+ \sseq@grid@atmostgridstep\sseq@ymaxpadding{y}{\sseq@topgridpadding}{1/2}
+%
+ \pgftransformshift{\pgfpointxy{-\sseq@xgridstep/2}{-\sseq@ygridstep/2}}
+ \pgfpathgrid[stepx=\pgf@xb,stepy=\pgf@yb]
+ { \pgfpointxy
+ { \sseq@xmin - \sseq@xminpadding + 0.01 + \sseq@xoffset + \sseq@xgridstep/2 }
+ { \sseq@ymin - \sseq@yminpadding + 0.01 + \sseq@yoffset + \sseq@ygridstep/2 } }
+ { \pgfpointxy
+ { \sseq@xmax + \sseq@xmaxpadding - 0.01 + \sseq@xoffset + \sseq@xgridstep/2 }
+ { \sseq@ymax + \sseq@ymaxpadding - 0.01 + \sseq@yoffset + \sseq@ygridstep/2 } }
+ \pgfusepath{stroke}
+ \endpgfscope
+ \egroup
+}
+\def\sseq@grid@go{
+ \bgroup
+ \pgfscope
+ \sseq@useclip
+ \pgfsetcolor{\sseq@gridcolor}
+ \pgfsetlinewidth{\the\sseq@gridstrokethickness}
+ \sseq@grid@setstepandgridstep
+%
+ % We don't want the grid to end with an extra line, so extend it by one step distance or
+ % \sseq@---gridpadding, whichever is shorter.
+ \sseq@grid@atmostgridstep\sseq@xminpadding{x}{\sseq@leftgridpadding}{1}
+ \sseq@grid@atmostgridstep\sseq@xmaxpadding{x}{\sseq@rightgridpadding}{1}
+ \sseq@grid@atmostgridstep\sseq@yminpadding{y}{\sseq@bottomgridpadding}{1}
+ \sseq@grid@atmostgridstep\sseq@ymaxpadding{y}{\sseq@topgridpadding}{1}
+%
+ \pgfpathgrid[stepx=\pgf@xb,stepy=\pgf@yb]
+ { \pgfpointxy
+ { \sseq@xmin - \sseq@xminpadding + 0.01 + \sseq@xoffset }
+ { \sseq@ymin - \sseq@yminpadding + 0.01 + \sseq@yoffset } }
+ { \pgfpointxy
+ { \sseq@xmax + \sseq@xmaxpadding - 0.01 + \sseq@xoffset }
+ { \sseq@ymax + \sseq@ymaxpadding - 0.01 + \sseq@yoffset }
+ }
+ \pgfusepath{stroke}
+ \endpgfscope
+ \egroup
+}
+\def\sseq@grid@none{}
+\def\sseq@grid@dots{
+ \bgroup
+ \pgfscope
+ \pgfgettransform\sseq@savetransform
+ \pgfgettransformentries{\sseq@a}{\sseq@b}{\sseq@c}{\sseq@d}{\sseq@u}{\sseq@v}
+ \pgfsettransform\sseq@savetransform
+ \sseq@useclip
+ \pgftransformshift{\pgfqpoint{-1.5cm}{-0.5cm}}
+ \pgfsetdash{{1pt}{\sseq@a*1cm-1pt}}{0.5cm+.5pt}
+ \pgfsetlinewidth{1pt}
+ \sseq@tempy=\sseq@ymin\relax
+ \advance\sseq@tempy\m@ne
+ \loop
+ \advance\sseq@tempy\@ne
+ \pgfpathmoveto{\pgfpointxy{\sseq@xmin + 0.5/\sseq@a}{\the\sseq@tempy}}
+ \pgfpathlineto{\pgfpointxy{\sseq@xmax + 1.01 }{\the\sseq@tempy}}
+ \ifnum\sseq@tempy<\sseq@ymax\repeat
+ %\pgfpathgrid[stepx=1cm,stepy=1cm]{\pgfpoint{-0.5cm}{-0.5cm}}{\pgfpoint{\xmax cm-0.5cm}{\ymax cm-0.5cm}}
+ \pgfusepath{stroke}
+ \endpgfscope
+ \egroup
+}
+%%%
+%%% Draw Classes
+%%%
+%%% Class offsets
+\sseqnewclasspattern{standard}{
+ (0,0);
+ (-0.13,0)(0.13,0);
+ (-0.2,0)(0,0)(0.2,0);
+ (-0.13,-0.13)(0.13,-0.13)(-0.13,0.13)(0.13,0.13);
+ (-0.16,-0.16)(0.16,-0.16)(-0.16,0.16)(0.16,0.16)(0,0);
+ (-0.13,-0.2)(-0.13,0)(-0.13,0.2)(0.13,-0.2)(0.13,0)(0.13,0.2);
+}
+
+\sseqnewclasspattern{linear}{
+ (0,0);
+ (-0.13,0)(0.13,0);
+ (-0.2,0)(0,0)(0.2,0);
+ (-0.3,0)(-0.1,0)(0.1,0)(0.3,0);
+ (-0.4,0)(-0.2,0)(0,0)(0.2,0)(0.4,0);
+ (-0.5,0)(-0.3,0)(-0.1,0)(0.1,0)(0.3,0)(0.5,0);
+}
+\def\sseq@offset#1#2{
+ \sseq@eval{\@nx\pgftransformshift{
+ \@nx\pgfqpointxy
+ { \csname sseq@\sseq@classpattern xoffset#1/#2\endcsname }
+ { \csname sseq@\sseq@classpattern yoffset#1/#2\endcsname }
+ }}
+}
+
+\def\sseq@tooltip@wrapper#1#2{%
+ \edef\temp{\detokenize\@xpthree{#2}}%
+ \edef\temp{\@xp\sseqtooltip@replaceslashes\@xp{\temp}}%
+ \sseq@eval{\@nx\pdftooltip{\unexpanded{#1}}{\temp}}%
+}
+\bgroup\lccode`\!=`\\\lowercase{\egroup
+\def\sseqtooltip@replaceslashes#1{\sseqtooltip@replaceslashes@#1!\sseq@nil}
+\def\sseqtooltip@replaceslashes@#1!#2{%
+ #1%
+ \ifx\sseq@nil#2\@xp\@gobble\else
+ \@nx\@nx\@nx\textbackslash
+ \@xp\sseqtooltip@replaceslashes@
+ \fi#2%
+}
+}
+
+
+% #1 -- "class."
+% (#2,#3,#4) -- the class name x,y,n
+% #5 -- generation
+\def\sseq@class@getparts#1(#2,#3,#4)[#5].{
+ \sseq@seterrorannotation@drawing{#1}{#2}{#3}{#4}{#5}
+ \def\sseq@thisnodename{sseq{#2,#3,#4}}
+ \def\sseq@thispos{(#2,#3)}
+ \edef\sseq@thisposnodeindex{\sseq@obj{class.(#2,#3,#4).n}}
+ \edef\sseq@thispostotalnodes{\sseq@obj{partcoord.(#2,#3).numnodes}}
+ \def\sseq@thisclassnum{#5}
+ \sseq@tempx=#2\relax
+ \sseq@tempy=#3\relax
+}
+
+
+% #1 -- the name of the class object given as (x,y,n)[gen]
+% Mandatory fields:
+% partcoord.(x,y).numnodes
+% (x,y,n).num -- number of generations of this class
+% (x,y,n).n -- node n of numnodes (needed to allow node position to differ from creation order).
+% class.page -- the death page of the class
+% Optional fields:
+% class.options -- Options for this class.
+% class.nodetext -- The internal text of the node
+% class.nodetext.options -- options (color, font) to change the nodetext
+% class.labelnodes -- a list of external labels
+% class.name & class.showname -- If there is a name, use it as a label in some way
+% class.tooltip -- Make a tooltip. Fails if the user didn't load package with tooltip option
+% class.needstikz -- Use tikz to draw this node
+% Someday I should document this horrible mess of code here
+\newif\ifsseq@permanentcycle
+\newcount\sseq@totalclassesdrawn
+\AtEndDocument{\message{Total classes: \the\sseq@totalclassesdrawn}}
+\def\sseq@class@drawnode#1{%
+ \global\advance\sseq@totalclassesdrawn\@ne
+ \begingroup
+ \sseq@class@getparts#1.
+ % defines:
+ % \sseq@thisnodename -- name we should give the pdfnode
+ % \sseq@thispos -- (x,y)
+ % \sseq@thispostotalnodes -- total number of nodes at (x,y)
+ % \sseq@thisposnodeindex -- index of this node
+ \sseq@needstikzfalse
+ % Apply first pass styles? TODO: What is this for again?
+ \sseq@options@firstpassmode
+ \sseq@thesseqstyle
+ \sseq@theclassstyle
+ \ifnum\sseq@obj{#1.page}=\sseq@infinitycount
+ \sseq@thepermanentcyclestyle
+ \else
+ \sseq@thetransientcyclestyle
+ \ifsseq@thispage
+ \sseq@thethispagecyclestyle
+ \fi
+ \fi
+ \the\sseq@scope@toks
+ \sseq@obj{#1.needstikz}
+%
+ \sseq@outofrangetrue\relax % Mysterious that we need this \relax here...
+ % If we are in range, we'll draw the node, if not we just mark the coordinate.
+ \ifnum\sseq@tempx<\sseq@xmaxpp\relax\ifnum\sseq@tempx>\sseq@xminmm\relax\ifnum\sseq@tempy<\sseq@ymaxpp\relax\ifnum\sseq@tempy>\sseq@yminmm\relax
+ \sseq@outofrangefalse
+ \pgfscope
+ % Finish options setup
+ \let\tikz@options\pgfutil@empty
+ \let\tikz@alias=\pgfutil@empty
+ \def\pgfkeysdefaultpath{/sseqpages/class/}%
+ \sseq@options@secondpassmode
+ \sseq@thesseqstyle
+ \sseq@theclassstyle
+ \ifnum\sseq@obj{#1.page}=\sseq@infinitycount
+ \sseq@permanentcycletrue % This is to communicate with family style code...
+ \sseq@thepermanentcyclestyle
+ \else
+ \sseq@permanentcyclefalse
+ \sseq@thetransientcyclestyle
+ \ifsseq@thispage
+ \sseq@thethispagecyclestyle
+ \fi
+ \fi
+ \def\sseq@collections@featuretype{class}
+ \the\sseq@scope@toks
+ \sseq@obj{#1.options}
+ % Set up node position coordinate transform
+ \pgftransformshift{\pgfqpointxy{\numexpr\sseq@tempx +\sseq@xoffset-\sseq@x\relax}{\numexpr\sseq@tempy + \sseq@yoffset-\sseq@y\relax}}
+ \iftikz@fullytransformed\pgfgettransform{\savetransform}\fi
+ \pgftransformresetnontranslations
+ \sseq@globalrotatetransform
+ % Now the origin is at (x,y). Set up class placement offset.
+ \sseq@classplacementtransform
+ \sseq@obj@ifdef{#1.offset}{\sseq@obj{#1.offset}}{%
+ \sseq@offset{\sseq@thisposnodeindex}{\sseq@thispostotalnodes}%
+ }%
+ \iftikz@fullytransformed\pgfsettransform{\savetransform}\else\pgftransformresetnontranslations\ifsseq@rotatelabels\sseq@globalrotatetransform\fi\fi
+ %
+ \tikz@options
+ % the value of \sseq@class@showname comes from styles. If there was a local option with showname, it's stored in #1.showname.
+ % local value takes priority.
+ \let\sseq@classlabelnodes\pgfutil@empty
+ \edef\sseq@classnodetextoptions{\sseq@obj@ifdef{#1.nodetext.options}{\@xptwo\@nx\sseq@obj{#1.nodetext.options}}{}}
+ \edef\sseq@classnodetext{\sseq@obj@ifdef{#1.nodetext}{\@xptwo\@nx\sseq@obj{#1.nodetext}}{}}
+ \sseq@obj@ifdef{#1.showname}{\sseq@lettoobj\sseq@class@showname{#1.showname}}{}
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@ifdef{#1.name}{
+ \sseq@eval{\@nx\sseq@handleclassquotes@inner{\sseq@obj{#1.name}}{\sseq@class@showname}}
+ }{}
+ \fi
+ % Okay now we're ready to make the node
+ \ifsseq@needstikz
+ % The options code above put mode information into \tikz@mode which gets wiped by tikz
+ \let\sseq@mode\tikz@mode
+ \sseq@eval{%
+ \@nx\node[%
+ every text node part/.code/.expand once={\sseq@globalrotatetransform\sseq@classnodetextoptions{}},%
+ /utils/exec={\let\@nx\tikz@mode\@nx\sseq@mode}] % Set mode based on outer options
+ (\sseq@thisnodename) {\unexpanded\@xp{\sseq@classnodetext}};%
+ }%
+ \else
+ \tikz@node@textfont
+ \sseq@setnodetext{\sseq@classnodetext}{\sseq@classnodetextoptions}%
+ \let\tikz@fig@name\sseq@thisnodename
+ \pgfmultipartnode{\tikz@shape}{\tikz@anchor}{\tikz@fig@name}{\sseq@drawnode}%
+ \tikz@alias % makes extra names for this shape
+ \fi
+ \sseq@obj{#1.labelnodes}%
+ \sseq@classlabelnodes % classlabelnodes comes from show name (I guess it can't put them into #1.labelnodes? TODO: why?)
+ \sseq@obj@ifdef{#1.tooltip}{\sseq@dotooltip{#1}}{}%
+ \endpgfscope
+ \fi\fi\fi\fi
+ % If the node is out of range, to save time we don't draw anything. However, structlines etc may depend on the out of range node,
+ % so we mark the coordinate.
+ \ifsseq@outofrange
+ \sseq@eval{\@nx\pgftransformshift{\@nx\pgfqpointxy{\numexpr\sseq@tempx+\sseq@xoffset-\sseq@x\relax}{\numexpr\sseq@tempy+\sseq@yoffset-\sseq@y\relax}}}%
+ \pgftransformresetnontranslations
+ \sseq@globalrotatetransform
+ \sseq@classplacementtransform
+ \sseq@offset{\sseq@thisposnodeindex}{\sseq@thispostotalnodes}%
+ \pgfcoordinate{\sseq@thisnodename}{\pgfpointorigin}%
+ \fi
+ \endgroup
+}
+
+\def\sseq@dotooltip#1{%
+ \pgfpointanchor{\sseq@thisnodename}{west}%
+ \pgf@xa=\pgf@x
+ \pgfpointanchor{\sseq@thisnodename}{south}%
+ \pgf@ya=\pgf@y
+%
+ \pgf@process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{west}}}{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{east}}}}%
+ \pgf@xb=\pgf@x
+ \pgf@process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{south}}}{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{north}}}}%
+ \pgf@yb=\pgf@y
+%
+ \setbox\tikz@tempbox=\hbox{%
+ \pgfinterruptpicture
+ \sseqtooltip{\rule{\pgf@xb}{0pt}\rule{0pt}{\pgf@yb}}{\sseq@obj{#1.tooltip}}%
+ \endpgfinterruptpicture
+ }
+ {%
+ \pgftransformshift{\pgfqpoint{\pgf@xa}{\pgf@ya}}%
+ \pgfapproximatenonlineartransformation%
+ \pgfqboxsynced{\tikz@tempbox}%
+ }%
+}
+
+% #1 -- label text
+% #2 -- options
+% Make the node textbox.
+\def\sseq@setnodetext#1#2{%
+ \sseq@ifempty{#1}{% more often than not, the node is empty...
+ \setbox\pgfnodeparttextbox=\hbox{}%
+ }{%
+ \setbox\pgfnodeparttextbox=\hbox{%
+ \pgfscope%
+ #2
+ \tikzset{every text node part/.try}%
+ \ifx\tikz@textopacity\pgfutil@empty%
+ \else%
+ \pgfsetfillopacity{\tikz@textopacity}%
+ \pgfsetstrokeopacity{\tikz@textopacity}%
+ \fi%
+ \pgfinterruptpicture
+ \ifx\tikz@text@width\pgfutil@empty%
+ \tikz@textfont%
+ \else%
+ \begingroup%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@width}%
+ \pgfutil@minipage[t]{\pgf@x}\leavevmode\hbox{}%
+ \tikz@textfont%
+ \tikz@text@action%
+ \fi%
+ \ifx\tikz@textcolor\pgfutil@empty%
+ \else%
+ \pgfutil@colorlet{.}{\tikz@textcolor}%
+ \fi%
+ \pgfsetcolor{.}%
+ \tikz@atbegin@node%
+ #1%
+ \tikz@atend@node%
+ \ifx\tikz@text@width\pgfutil@empty%
+ \else%
+ \pgfutil@endminipage%
+ \endgroup%
+ \fi%
+ \endpgfinterruptpicture
+ \endpgfscope%
+ }%
+ \ifx\tikz@text@width\pgfutil@empty%
+ \else%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@width}%
+ \wd\pgfnodeparttextbox=\pgf@x%
+ \fi%
+ \ifx\tikz@text@height\pgfutil@empty%
+ \else%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@height}%
+ \ht\pgfnodeparttextbox=\pgf@x%
+ \fi%
+ \ifx\tikz@text@depth\pgfutil@empty%
+ \else%
+ \pgfmathsetlength{\pgf@x}{\tikz@text@depth}%
+ \dp\pgfnodeparttextbox=\pgf@x%
+ \fi%
+ }
+}
+
+% A small part of the tikz main loop that has been paired down as much as possible for efficiency.
+\def\sseq@drawnode{%
+ \pgfutil@tempdima=\pgflinewidth%
+ {%
+ \tikz@mode%
+ \iftikz@mode@draw%
+ \iftikz@mode@double%
+ % Change line width
+ \begingroup%
+ \pgfsys@beginscope%
+ \tikz@double@setup%
+ \fi%
+ \fi%
+ %
+ % Step 10: Do stroke/fill as needed
+ %
+ \sseq@eval{\noexpand\pgfusepath{%
+ \iftikz@mode@fill fill,\fi%
+ \iftikz@mode@draw draw,\fi%
+ }}%
+ %
+ % Step 11: Double stroke, if necessary
+ %
+ \iftikz@mode@draw%
+ \iftikz@mode@double%
+ \pgfsys@endscope%
+ \endgroup%
+ \fi%
+ \fi
+ }%
+ \global\pgflinewidth=\pgfutil@tempdima%
+}
+
+%%% Labels
+
+% #1 -- label text
+% #2 -- options
+\def\sseq@drawlabel#1#2{%
+ \bgroup\pgfscope
+ \def\tikz@mode{}%
+ \let\sseq@tikz@transform@save\tikz@transform
+ \pgfkeyssetvalue{/pgf/inner xsep}{2pt}%
+ \pgfkeyssetvalue{/pgf/inner ysep}{2pt}%
+ \def\tikz@shape{rectangle}
+ \let\tikz@transform\empty % The next line was set up to fix the classlabelstyle glitch (what does this mean?)
+ \sseq@options@secondpassmode
+ \sseq@thesseqstyle\sseq@thelabelstyle\sseq@theclasslabelstyle#2
+ \tikz@options
+ \pgftransformreset
+ \pgftransformshift{\tikz@node@at}%
+ \tikz@lib@pos@call
+ \tikz@transform
+ \tikz@mode
+ \let\tikz@transform\sseq@tikz@transform@save
+ \sseq@setnodetext{\sseq@labeltextfn{#1}}{}%
+ \pgfmultipartnode{\tikz@shape}{\tikz@anchor}{label}{\sseq@drawnode}%
+ \ifsseq@pin
+ \def\sseq@pinoptions{}%
+ \let\tikz@options\empty
+ \let\tikz@mode\empty
+ \sseq@thepinstyle
+ #2
+ \sseq@pinoptions
+ \tikz@options
+ \tikz@mode
+ \sseq@drawedge@findsourcetarget{\tikz@fig@name}{}{label}{}%
+ \pgfpathmoveto{\sseq@sourcecoord}%
+ \pgfpathlineto{\sseq@targetcoord}%
+ \sseq@eval{\noexpand\pgfusepath{%
+ draw,
+ \iftikz@mode@fill fill,\fi
+ \iftikz@mode@draw draw,\fi
+ }}%
+ \fi
+ \endpgfscope\egroup
+}
+
+
+%%%
+%%% Drawing edges
+%%%
+\def\sseq@ifinrange(#1){\sseq@ifinrange@#1,\sseq@nil}
+\def\sseq@ifinrange@#1,#2,#3\sseq@nil{%
+ \sseq@tempx=#1\relax\sseq@tempy=#2\relax
+ \sseq@outofrangetrue
+ \ifnum\sseq@tempx<\sseq@xmaxpp\relax\ifnum\sseq@tempx>\sseq@xminmm\relax\ifnum\sseq@tempy<\sseq@ymaxpp\relax\ifnum\sseq@tempy>\sseq@yminmm\relax
+ \sseq@outofrangefalse
+ \fi\fi\fi\fi
+ \ifsseq@outofrange
+ \@xp\pgfutil@secondoftwo
+ \else
+ \@xp\pgfutil@firstoftwo
+ \fi
+}
+
+% #1 -- source node
+% #2 -- source anchor
+% #3 -- target node
+% #4 -- target anchor
+% Calculate actual start and end of the edge (node borders), return the results stored in \sseq@sourcecoord, \sseq@targetcoord
+\def\sseq@drawedge@findsourcetarget#1#2#3#4{
+ \edef\sseq@edgesourceanchor{#2}
+ \edef\sseq@edgetargetanchor{#4}
+ \let\tempaf\pgfutil@empty
+ \ifx\sseq@edgesourceanchor\pgfutil@empty % Check that the source doesn't have a specified anchor
+ \def\tempa{\pgfpointanchor{#1}{center}}% if so, start by taking the center of that coordinate
+ \else
+ \edef\tempa{\@nx\pgfpointanchor{#1}{\sseq@edgesourceanchor}} % If it has an anchor, use that
+ \let\tempaf\tempa
+ \fi
+ \ifx\sseq@edgetargetanchor\pgfutil@empty % check that the target doesn't have a specified anchor
+ \def\tempb{\pgfpointshapeborder{#3}{\tempa}}% if so, our end point is the point on the boundary of node b that is in the direction of our initial start coordinate
+ \else
+ \edef\tempb{\@nx\pgfpointanchor{#3}{\sseq@edgetargetanchor}}% If it has a specified anchor, use that
+ \fi
+ \let\tempbf\tempb
+ \ifx\tempaf\pgfutil@empty%
+ \def\tempaf{\pgfpointshapeborder{#1}{\tempb}}%
+ \fi
+ \let\sseq@sourcecoord\tempaf
+ \let\sseq@targetcoord\tempbf
+}
+
+\def\sseq@fullcoord@to@partialcoord(#1){\sseq@fullcoord@to@partialcoord@#1,\@nil}
+\def\sseq@fullcoord@to@partialcoord@#1,#2,#3\@nil{{#1cm}{#2cm}}
+% #1 -- source (full)
+% #2 -- target (full)
+% #3 -- which type of edge (either "structline" or "differential")
+% #4 -- options
+\def\sseq@drawedge(#1)(#2)#3#4{%
+ \begingroup\pgfscope
+ % If either class is part of a family we aren't drawing, don't draw the edge either.
+ \expandafter\ifx\csname pgf@sh@pi@sseq{#1}\endcsname\pgfpictureid\else
+ \@xp\sseq@break
+ \fi
+ \expandafter\ifx\csname pgf@sh@pi@sseq{#2}\endcsname\pgfpictureid\else
+ \@xp\sseq@break
+ \fi
+ \def\sseq@edgetype{#3}
+ \let\sseq@collections@featuretype\sseq@edgetype
+ \let\sseq@edgesourceanchor\pgfutil@empty
+ \let\sseq@edgetargetanchor\pgfutil@empty
+%
+ \sseq@needstikzfalse
+ \def\pgfkeysdefaultpath{/sseqpages/#3/}%
+ \sseq@options@bothpassmode
+ \sseq@thesseqstyle
+ \sseq@theedgestyle\csname sseq@the#3style\endcsname\the\sseq@scope@toks
+ #4%
+ \csname sseq@collections@#3@hook\endcsname
+ \pgftransformshift{\pgfqpointxy{-\the\sseq@x}{-\the\sseq@y}}%
+ % puts results into \sseq@sourcecoord and \sseq@targetcoord
+ \sseq@drawedge@findsourcetarget{sseq{#1}}{\sseq@edgesourceanchor}{sseq{#2}}{\sseq@edgetargetanchor}
+%
+ \tikz@options
+ \tikz@mode
+ \def\temparrowstartspec{}%
+ \def\temparrowendspec{}%
+ \pgfcoordinate{tempa}{\sseq@sourcecoord}%
+ \pgfcoordinate{tempb}{\sseq@targetcoord}%
+ \pgftransformreset
+ \sseq@outofrangefalse
+ \sseq@ifinrange(#1){}{
+ \edef\temparrowstartspec{\@nx\pgfsetarrowsstart{\csname sseq@runoffarrow@start@#3@spec\endcsname}}
+ \sseq@outofrangetrue
+ }%
+ \sseq@ifinrange(#2){}{
+ \edef\temparrowendspec{\@nx\pgfsetarrowsend{\csname sseq@runoffarrow@end@#3@spec\endcsname}}
+ \sseq@outofrangetrue
+ }
+ \ifsseq@outofrange
+ \sseq@handleoffpageedge{#1}{#2}%
+ \fi
+ \ifsseq@drawedge
+ % TODO: should some sort of transformation manipulation be here? Maybe allow user to specify preference?
+ % Don't draw dots on very short segments
+ \pgfpointdiff{\sseq@targetcoord}{\sseq@sourcecoord}
+ \pgfmathveclen{\pgf@x}{\pgf@y}%
+ \@xp\pgfmathint\@xp{\pgfmathresult}%
+ \ifnum\pgfmathresult<10\relax%%17? % TODO: Fix this predicate
+ \tikzset{every text node part/.append code={\pgfsetcolor{white}}}% I wonder why this is here...
+ \ifx\temparrowstartspec\pgfutil@empty
+ \else
+ \def\temparrowstartspec{\pgfsetarrowsstart{}}%
+ \fi
+ \ifx\temparrowendspec\pgfutil@empty
+ \else
+ \def\temparrowendspec{\pgfsetarrowsend{}}%
+ \fi
+ \fi
+ \ifsseq@needstikz
+ \draw[/sseqpages,
+ /utils/exec={\sseq@thesseqstyle\sseq@theedgestyle\csname sseq@the#3style\endcsname\the\sseq@scope@toks
+ \temparrowstartspec\temparrowendspec #4}%
+ ] (tempa) to (tempb);%
+ \else
+ \temparrowstartspec
+ \temparrowendspec
+ \pgfpathmoveto{\pgfpointanchor{tempa}{center}}%
+ \pgfpathlineto{\pgfpointanchor{tempb}{center}}%
+ \sseq@eval{\noexpand\pgfusepath{%
+ \iftikz@mode@fill fill,\fi
+ \iftikz@mode@draw draw,\fi
+ }}%
+ \fi
+ \fi
+ \sseq@breakpoint
+ \endpgfscope\endgroup
+}
+
+% TODO: this macro is super expensive. Make it faster
+\def\sseq@handleoffpageedge#1#2{
+ \pgfpathmoveto{\sseq@sourcecoord}%
+ \pgfpathlineto{\sseq@targetcoord}%
+ \pgfgetpath\thispath
+ \pgfusepath{discard}%
+ \pgfintersectionsortbysecondpath
+ \pgfintersectionofpaths{\pgfsetpath\sseq@theclippath}{\pgfsetpath\thispath}%
+ \ifcase\pgfintersectionsolutions\relax
+ % No intersections, but one or both endpoints may be out of range but still in clipping region due to scaling. Add ellipses as appropriate.
+ \sseq@ifinrange(#1){% If the first endpoint is in range, the second must be out of range b/c sseq@outofrange is true.
+ %\edef\temparrowendspec{\@nx\pgfsetarrowsend{\csname sseq@runoffarrow@end@#3@spec\endcsname}}
+ }{%
+ \sseq@ifinrange(#2){}{\sseq@drawedge@handletrickyedge}% uh-oh, both ends are out of range
+ }%
+ \or
+ \sseq@ifinrange(#1){% If the startpoint is in range, the intersection must be the end.
+ \def\sseq@targetcoord{\pgfpointintersectionsolution{1}}
+ \pgfcoordinate{tempb}{\sseq@targetcoord}
+ }{%
+ \sseq@ifinrange(#2){% If the startpoint is out of range and the endpoint is in range, the intersection must be the start
+ \def\sseq@sourcecoord{\pgfpointintersectionsolution{1}}%
+ \pgfcoordinate{tempa}{\sseq@sourcecoord}%
+ }{\sseq@drawedge@handletrickyedge}% Uh-oh, both ends are out of range.
+ }
+ \or% an orphan
+ \ifsseq@draworphanedges
+ \sseq@drawedge@handleorphan
+ \else
+ \sseq@drawedgefalse % Don't draw "orphaned edges"
+ \fi
+ \else
+ \sseq@error{clip-not-convex}%
+ \sseq@breakfifi
+ \fi
+}
+
+\def\sseq@drawedge@handletrickyedge{%
+ \ifsseq@draworphanedges
+ \pgfintersectionsortbysecondpath
+ \pgfintersectionofpaths{\pgfsetpath\sseq@therangepath}{\pgfsetpath\thispath}%
+ \ifnum\pgfintersectionsolutions=\z@
+ \sseq@drawedgefalse % don't draw orphan edges that never intersect actual range
+ \else% Now we have to make a line through tempa and tempb long enough so that it intersects the original clip area twice.
+ \pgfmathanglebetweenpoints{\pgfpointanchor{tempa}{center}}{\pgfpointanchor{tempb}{center}}%
+ \edef\tempangle{\pgfmathresult}
+ \pgfpathmoveto{\pgfpointadd{\pgfpointanchor{tempa}{center}}{\pgfpointpolar{\tempangle}{100cm}}}% a really long line
+ \pgfpathlineto{\pgfpointadd{\pgfpointanchor{tempa}{center}}{\pgfpointpolar{\tempangle}{-100cm}}}%
+ \pgfgetpath\thispath
+ \pgfusepath{discard}
+ \pgfintersectionofpaths{\pgfsetpath\sseq@theclippath}{\pgfsetpath\thispath}
+ \sseq@drawedge@handleorphan
+ \fi
+ \else
+ \sseq@drawedgefalse
+ \fi
+}
+
+
+\def\sseq@drawedge@handleorphan{%
+ \def\sseq@sourcecoord{\pgfpointintersectionsolution{2}}%
+ \def\sseq@targetcoord{\pgfpointintersectionsolution{1}}%
+ \edef\temparrowstartspec{\@nx\pgfsetarrowsstart{\csname sseq@runoffarrow@start@\sseq@edgetype @spec\endcsname}}%
+ \edef\temparrowendspec{\@nx\pgfsetarrowsend{\csname sseq@runoffarrow@end@\sseq@edgetype @spec\endcsname}}%
+ \pgfcoordinate{tempa}{\sseq@sourcecoord}%
+ \pgfcoordinate{tempb}{\sseq@targetcoord}%
+}
+
+
+% #1 -- uid
+% #2 -- first coordinate
+% #3 -- second coordinate
+\def\sseq@circleclass@draw#1#2#3{
+ \begingroup
+ % If either class is part of a family we aren't drawing, don't draw the fit either.
+ \expandafter\ifx\csname pgf@sh@pi@sseq{#2}\endcsname\pgfpictureid\else
+ \@xp\sseq@break
+ \fi
+ \expandafter\ifx\csname pgf@sh@pi@sseq{#3}\endcsname\pgfpictureid\else
+ \@xp\sseq@break
+ \fi
+ \pgfmathanglebetweenpoints{\pgfpointanchor{sseq{#2}}{center}}{\pgfpointanchor{sseq{#3}}{center}}
+ \let\tempangle\pgfmathresult
+ \let\tikz@lib@fit@scan@handle\sseq@fit@tikz@lib@fit@scan@handle % install fit modifications.
+ \let\tikz@calc@anchor\sseq@fit@tikz@calc@anchor
+ \sseq@tempiftrue
+ \sseq@options@secondpassmode
+ \node[
+ rotate fit=\tempangle,
+ /utils/exec={\sseq@thesseqstyle\sseq@thecircleclassstyle\the\sseq@scope@toks\sseq@savedoptioncode
+ \sseq@obj{#1.options}
+ \sseq@obj{#1.fitnodes}
+ \@xp\pgfkeysalso\@xp{\romannumeral0\sseq@obj{#1.tikzprimoptions}}
+ }
+ ] {};
+ \sseq@breakpoint
+ \endgroup
+}
+% Modifies tikz commands \tikz@lib@fit@scan@handle from \pgf\frontendlayer\tikz\libraries\tikzlibraryfit.code.tex line 81 and
+% \tikz@calc@anchor from \pgf\frontendlayer\tikz\tikz.code.tex line 5164
+% make it so that fit silently ignores nodes that are not defined.
+% This is copied with modification from \pgf\frontendlayer\tikz\libraries\tikzlibraryfit.code.tex line 81
+\def\sseq@fit@tikz@lib@fit@scan@handle#1{%
+ \ifsseq@tempif % this has been set in the following macro to be true if there is a node with the given name. If it's not true, ignore this.
+ \iftikz@shapeborder%
+ % Ok, fit all four external anchors, if they exist
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{west}}%
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{east}}%
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{north}}%
+ \tikz@lib@fit@adjust{\pgfpointanchor{\tikz@shapeborder@name}{south}}%
+ \else%
+ \tikz@lib@fit@adjust{#1}%
+ \fi%
+ \fi
+ \sseq@tempiftrue
+ \tikz@lib@fit@scan%
+}
+
+% This is copied with modification from \pgf\frontendlayer\tikz\tikz.code.tex line 5164
+\def\sseq@fit@tikz@calc@anchor#1.#2\tikz@stop{%
+ \pgfutil@ifundefined{pgf@sh@ns@#1}{\sseq@tempiffalse}{%If the node doesn't exist, don't throw an error but record that we should skip it
+ \pgfpointanchor{\tikz@pp@name{#1}}{#2}%
+ }%s
+}
+
+
+%%
+%% Patch tikz coords
+%%
+
+\def\sseq@patchtikzcoords{
+ \let\sseq@tikz@scan@one@point@noshift\sseq@tikz@scan@one@point@noshift@active
+ \tikzoption{shift}{\sseq@tikzshift{##1}}
+ \let\tikz@@@parse@regular\sseq@tikz@@@parse@regular
+ \let\tikz@to@curve@path\sseq@tikz@to@curve@path
+ \let\tikz@@@to@compute@relative\sseq@tikz@@@to@compute@relative
+
+ \let\tikz@grid\sseq@tikz@grid
+ \let\tikz@scan@handle@options\sseq@tikz@scan@handle@options
+ \let\tikz@@@parse@polar\sseq@tikz@@@parse@polar
+}
+
+% Some of the stuff in tikzlibrarycalc will probably be broken, hopefully not too much
+\let\sseq@tikz@scan@one@point@noshift\tikz@scan@one@point
+\let\sseq@tikz@@@parse@regular@save\tikz@@@parse@regular
+
+\def\sseq@tikz@scan@one@point@noshift@active#1{%
+ \let\tikz@@@parse@regular\sseq@tikz@@@parse@regular@save
+ \def\sseq@scanonepoint@cmd{\let\tikz@@@parse@regular\sseq@tikz@@@parse@regular#1}
+ \tikz@scan@one@point\sseq@scanonepoint@cmd%
+}
+
+% Probably there are more places that shouldn't have shifts inserted.
+\def\sseq@tikzshift#1{\tikz@addtransform{\sseq@tikz@scan@one@point@noshift\pgftransformshift#1\relax}}
+
+
+\def\sseq@tikz@to@curve@path{%
+ [every curve to]
+ \pgfextra{
+ \let\tikz@@@parse@regular\sseq@tikz@@@parse@regular@save % I added this to prevent repeated offsets from screwing us up
+ %\let\sseq@tikz@scan@one@point@noshift\tikz@scan@one@point
+ \iftikz@to@relative\tikz@to@compute@relative\else\tikz@to@compute\fi
+ }
+ \tikz@computed@path
+ \tikztonodes%
+}
+
+\let\sseq@tikz@@@to@compute@relative\tikz@@@to@compute@relative
+
+
+\patchcmd\sseq@tikz@@@to@compute@relative{%
+ \let\tikz@second@point=\tikz@toto
+}{%
+ \pgf@process{\pgfpointadd{\tikz@toto}{\pgfqpointxy{\sseq@xoffset}{\sseq@yoffset}}}%
+ \edef\tikz@toto{\@nx\pgfpoint{\the\pgf@x}{\the\pgf@y}}%
+ \let\tikz@second@point=\tikz@toto
+}{}{\error}
+
+
+
+
+% \tikz@parse@splitxyz: we should set up an error to make this unreachable?
+\let\sseq@tikz@grid\tikz@grid % line 3158
+\let\sseq@tikz@scan@handle@options\tikz@scan@handle@options % 4959
+\let\sseq@tikz@@@parse@polar\tikz@@@parse@polar % 5063
+
+\def\sseq@tikz@@@parse@regular#1#2#3){%
+ \pgfutil@in@,{#3}%
+ \ifpgfutil@in@%
+ \tikz@parse@splitxyz{#1}{#2}#3,%
+ \else%
+ \tikz@checkunit{#2}%
+ \iftikz@isdimension%
+ \tikz@checkunit{#3}%
+ \iftikz@isdimension%
+ \def\@next{#1{\pgfpointxy{(#2)/1cm+\sseq@xoffset}{(#3)/1cm+\sseq@yoffset}}}%
+ \else%
+ \def\@next{#1{\pgfpointxy{(#2)/1cm+\sseq@xoffset}{#3+\sseq@yoffset}}}%
+ \fi%
+ \else%
+ \tikz@checkunit{#3}%
+ \iftikz@isdimension%
+ \def\@next{#1{\pgfpointxy{#2+\sseq@xoffset}{(#3)/1cm+\sseq@yoffset}}}%
+ \else%
+ \def\@next{#1{\pgfpointxy{#2+\sseq@xoffset}{#3+\sseq@yoffset}}}%
+ \fi%
+ \fi%
+ \fi%
+ \@next%
+}
+
+
+
+
+%% New shapes and arrows
+%% These use lots of keys with spaces so it's convenient to turn off ExplSyntax.
+
+% Stolen from: https://tex.stackexchange.com/a/24621
+\pgfqkeys{/pgf}{
+ ellipse ratio/.code={\pgfkeyssetvalue{/pgf/ellipse ratio}{#1}},
+ ellipse ratio/.initial=1
+}
+\pgfdeclareshape{newellipse}
+{
+ \inheritsavedanchors[from=ellipse]
+ \inheritanchorborder[from=ellipse]
+ \savedanchor\radius{%
+ %
+ % Caculate ``height radius''
+ %
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by.5\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@y by\pgf@yb%
+ %
+ % Caculate ``width radius''
+ %
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@x by\pgf@xb%
+ %
+ % Adjust
+ %
+ \pgfkeysgetvalue{/pgf/ellipse ratio}{\ratioscale}
+ \pgfmathsetmacro\widthfactor{sqrt(\ratioscale^2+1)/\ratioscale}
+ \pgfmathsetmacro\heightfactor{sqrt(\ratioscale^2+1)}
+ \pgf@x=\widthfactor\pgf@x%
+ \pgf@y=\heightfactor\pgf@y%
+ %
+ % Adjust height, if necessary
+ %
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@y<.5\pgf@yc%
+ \pgf@y=.5\pgf@yc%
+ \fi%
+ %
+ % Adjust width, if necessary
+ %
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}%
+ \ifdim\pgf@x<.5\pgf@xc%
+ \pgf@x=.5\pgf@xc%
+ \fi%
+ %
+ % Add outer sep
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \advance\pgf@x by\pgf@xb%
+ \advance\pgf@y by\pgf@yb%
+ }
+
+ \inheritanchor[from=ellipse]{center}
+ \inheritanchor[from=ellipse]{mid}
+ \inheritanchor[from=ellipse]{base}
+ \inheritanchor[from=ellipse]{north}
+ \inheritanchor[from=ellipse]{south}
+ \inheritanchor[from=ellipse]{west}
+ \inheritanchor[from=ellipse]{mid west}
+ \inheritanchor[from=ellipse]{base west}
+ \inheritanchor[from=ellipse]{north west}
+ \inheritanchor[from=ellipse]{south west}
+ \inheritanchor[from=ellipse]{east}
+ \inheritanchor[from=ellipse]{mid east}
+ \inheritanchor[from=ellipse]{base east}
+ \inheritanchor[from=ellipse]{north east}
+ \inheritanchor[from=ellipse]{south east}
+
+ \inheritbackgroundpath[from=ellipse]
+}
+
+%%
+%%
+%% n concentric circles
+%%
+
+\tikzset{circlen/.code={\def\circlen@n{#1}\pgfkeysalso{shape=circlen@shape}}}
+\pgfdeclareshape{circlen@shape}
+{
+ \savedanchor\centerpoint{%
+ \pgf@x=.5\wd\pgfnodeparttextbox%
+ \pgf@y=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by-.5\dp\pgfnodeparttextbox%
+ }
+
+ \saveddimen\radius{%
+ %
+ % Caculate ``height radius''
+ %
+ \pgf@ya=.5\ht\pgfnodeparttextbox%
+ \advance\pgf@ya by.5\dp\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/inner ysep}}%
+ \advance\pgf@ya by\pgf@yb%
+ %
+ % Caculate ``width radius''
+ %
+ \pgf@xa=.5\wd\pgfnodeparttextbox%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/inner xsep}}%
+ \advance\pgf@xa by\pgf@xb%
+ %
+ % Calculate length of radius vector:
+ %
+ \pgf@process{\pgfpointnormalised{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
+ \ifdim\pgf@x>\pgf@y%
+ \c@pgf@counta=\pgf@x%
+ \ifnum\c@pgf@counta=\z@%
+ \else%
+ \divide\c@pgf@counta by 255\relax%
+ \pgf@xa=16\pgf@xa\relax%
+ \divide\pgf@xa by\c@pgf@counta%
+ \pgf@xa=16\pgf@xa\relax%
+ \fi%
+ \else%
+ \c@pgf@counta=\pgf@y%
+ \ifnum\c@pgf@counta=\z@%
+ \else%
+ \divide\c@pgf@counta by 255\relax%
+ \pgf@ya=16\pgf@ya\relax%
+ \divide\pgf@ya by\c@pgf@counta%
+ \pgf@xa=16\pgf@ya\relax%
+ \fi%
+ \fi%
+ \pgf@x=\pgf@xa%
+ %
+ % If necessary, adjust radius so that the size requirements are
+ % met:
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@x<.5\pgf@xb%
+ \pgf@x=.5\pgf@xb%
+ \fi%
+ \ifdim\pgf@x<.5\pgf@yb%
+ \pgf@x=.5\pgf@yb%
+ \fi%
+ %
+ % Now, add larger of outer sepearations.
+ %
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb%
+ \advance\pgf@x by\pgf@yb%
+ \else%
+ \advance\pgf@x by\pgf@xb%
+ \fi%
+ \pgf@xb=2pt
+ \multiply\pgf@xb\circlen@n
+ \advance\pgf@x\pgf@xb
+ \advance\pgf@x-2pt\relax
+ }
+
+ %
+ % Anchors
+ %
+ \anchor{center}{\centerpoint}
+ \anchor{mid}{\centerpoint\pgfmathsetlength\pgf@y{.5ex}}
+ \anchor{base}{\centerpoint\pgf@y=0pt}
+ \anchor{north}{\centerpoint\advance\pgf@y by\radius}
+ \anchor{south}{\centerpoint\advance\pgf@y by-\radius}
+ \anchor{west}{\centerpoint\advance\pgf@x by-\radius}
+ \anchor{east}{\centerpoint\advance\pgf@x by\radius}
+ \anchor{mid west}{\centerpoint\advance\pgf@x by-\radius\pgfmathsetlength\pgf@y{.5ex}}
+ \anchor{mid east}{\centerpoint\advance\pgf@x by\radius\pgfmathsetlength\pgf@y{.5ex}}
+ \anchor{base west}{\centerpoint\advance\pgf@x by-\radius\pgf@y=0pt}
+ \anchor{base east}{\centerpoint\advance\pgf@x by\radius\pgf@y=0pt}
+ \anchor{north west}{
+ \centerpoint
+ \pgf@xa=\radius
+ \advance\pgf@x by-0.707107\pgf@xa
+ \advance\pgf@y by0.707107\pgf@xa
+ }
+ \anchor{south west}{
+ \centerpoint
+ \pgf@xa=\radius
+ \advance\pgf@x by-0.707107\pgf@xa
+ \advance\pgf@y by-0.707107\pgf@xa
+ }
+ \anchor{north east}{
+ \centerpoint
+ \pgf@xa=\radius
+ \advance\pgf@x by0.707107\pgf@xa
+ \advance\pgf@y by0.707107\pgf@xa
+ }
+ \anchor{south east}{
+ \centerpoint
+ \pgf@xa=\radius
+ \advance\pgf@x by0.707107\pgf@xa
+ \advance\pgf@y by-0.707107\pgf@xa
+ }
+ \anchorborder{
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpointborderellipse
+ {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}
+ {\noexpand\pgfqpoint{\radius}{\radius}}%
+ }%
+ \pgf@marshal%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \centerpoint%
+ \advance\pgf@x by\pgf@xa%
+ \advance\pgf@y by\pgf@ya%
+ }
+
+ %
+ % Background path
+ %
+ \behindbackgroundpath{
+ \pgfutil@tempdima=\radius%
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb%
+ \advance\pgfutil@tempdima by-\pgf@yb%
+ \else%
+ \advance\pgfutil@tempdima by-\pgf@xb%
+ \fi%
+ \sseq@tempcount=\@ne
+ \loop
+ \pgfpathcircle{\centerpoint}{\pgfutil@tempdima}%
+ \advance\pgfutil@tempdima-2pt\relax
+ \advance\sseq@tempcount\@ne
+ \ifnum\sseq@tempcount<\circlen@n \repeat
+ \tikz@mode
+ \sseq@eval{\noexpand\pgfusepath{
+ \iftikz@mode@draw draw,\fi
+ }}
+ }
+ \backgroundpath{%
+ \pgfutil@tempdima=\radius%
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb%
+ \advance\pgfutil@tempdima by-\pgf@yb%
+ \else%
+ \advance\pgfutil@tempdima by-\pgf@xb%
+ \fi%
+ \advance\pgfutil@tempdima2pt\relax
+ \pgfutil@tempdimb=-2pt\relax
+ \multiply\pgfutil@tempdimb\circlen@n
+ \advance\pgfutil@tempdima\pgfutil@tempdimb\relax
+ \pgfpathcircle{\centerpoint}{\pgfutil@tempdima}
+ }
+}
+
+
+
+% For out of bounds edges:
+
+\pgfdeclarearrow{
+ name = ...,
+ parameters = { \the\pgfarrowlength\the\pgflinewidth},
+ setup code = {
+ % The different end values:
+ \pgfarrowssetlineend{-\pgfarrowlength}
+ \pgfarrowssetbackend{-0.6\pgfarrowlength}
+ % The hull
+ \pgfarrowshullpoint{-\pgfarrowlength}{0pt}
+ \pgfarrowshullpoint{\pgfarrowlength}{0pt}
+ % Saves: Only the length:
+ \pgfarrowssavethe\pgfarrowlength
+ \pgfarrowssavethe\pgflinewidth
+ },
+ drawing code = {
+ \pgfpathcircle{\pgfpoint{-0.7\pgfarrowlength}{0pt}}{1.5\pgflinewidth}
+ \pgfpathcircle{\pgfpoint{-0.4\pgfarrowlength}{0pt}}{1.5\pgflinewidth}
+ \pgfpathcircle{\pgfpoint{-0.1\pgfarrowlength}{0pt}}{1.5\pgflinewidth}
+ \pgfpathclose
+ \pgfusepathqfill
+ },
+ defaults = { length = 0.3cm }
+}
+
diff --git a/graphics/pgf/contrib/spectralsequences/sseqforeach.code.tex b/graphics/pgf/contrib/spectralsequences/sseqforeach.code.tex
new file mode 100644
index 0000000000..7b72f6eb19
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqforeach.code.tex
@@ -0,0 +1,266 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqforeach.code.tex
+%%
+%% Patches the \foreach command to obtain better error reporting
+%% Also defines some of my own looping commands, \Do, \DoUntilOutOfBounds, \DoUntilOutOfBoundsThenNMore
+%% All of the \foreach stuff we are modifying is defined by tikz in the file /pgf/utilities/pgffor.code.tex
+%%
+
+\def\sseq@for@vars{}
+\def\sseq@for@savemacro#1{\sseq@d@addto@macro\sseq@for@vars{\sseq@for@vars@do#1}}
+\def\sseq@for@savemacro@noslash#1{\sseq@d@addto@macro\sseq@for@vars{\sseq@for@vars@do@noslash#1}}
+\def\sseq@for@vars@do#1{; \string#1 = #1}
+\def\sseq@for@vars@do@noslash#1{; \sseq@macroname#1 = #1}
+
+\ExplSyntaxOn
+\def\sseq@for@printvars{\ifx\sseq@for@vars\pgfutil@empty\else\exp_last_unbraced:Nf\@gobble\sseq@for@vars\fi}
+
+\newcount\sseq@Do@depth
+
+\def\sseq@save@Do@var{
+ \sseq@atbeginforeach@msgsetup
+ \advance\sseq@Do@depth\@ne
+ \exp_args:Nc \sseq@for@savemacro@noslash { iteration ~ \the \sseq@Do@depth }
+ \def\iteration{0}
+}
+
+\def\sseq@stepiteration{
+ \edef\iteration{\the\numexpr\iteration+1}
+ \cs_set_eq:cN { iteration ~ \the \sseq@Do@depth } \iteration
+}
+
+\protected\def\sseq@Do{
+ \begingroup
+ \edef\sseq@inputline{\the\inputlineno}
+ \sseq@callas{\Do}
+ \sseq@call{\sseq@Do@}
+}
+
+\def\sseq@Do@#1#2{
+ \sseq@esetthiscall{\string\Do\unexpanded{#1}}
+ \sseq@opushstacktrace{\string\Do{#1}}
+ \sseq@ifintexpr{#1}{
+ \sseq@savestack
+ \sseq@save@Do@var
+ \prg_replicate:nn {#1} {
+ \sseq@stepiteration
+ #2
+ \relax
+ }
+ \sseq@restorestack
+ }{\sseq@error@xx{Do-invalid-int-expr}{\string\Do}{\unexpanded{#1}}}
+ \endgroup
+}
+
+\protected\def\sseq@DoUntilOutOfBounds{
+ \begingroup
+ \edef\sseq@inputline{\the\inputlineno}
+ \sseq@callas{\DoUntilOutOfBounds}
+ \sseq@call{\sseq@DoUntilOutOfBounds@}
+}
+
+\def\sseq@DoUntilOutOfBounds@ #1 {
+ \sseq@esetthiscall{\string\DoUntilOutOfBoundsThenNMore}
+ \sseq@opushstacktrace{\string\DoUntilOutOfBounds}
+ \ifx\sseq@xminmax\@gobbletwo\else\ifx\sseq@yminmax\@gobbletwo\else
+ \sseq@error@x{DoUntil-no-bound}{\string\DoUntilOutOfBounds}
+ \sseq@breakfifi
+ \fi\fi
+ \def\sseq@commandname{\string\DoUntilOutOfBounds}
+ \sseq@savestack % so we can nest these
+ \sseq@DoUntilOutOfBounds@body{#1}
+ \sseq@restorestack
+ \sseq@breakpoint
+ \endgroup
+}
+
+\protected\def\sseq@DoUntilOutOfBoundsThenNMore{
+ \begingroup
+ \edef\sseq@inputline{\the\inputlineno}
+ \sseq@callas{\DoUntilOutOfBoundsThenNMore}
+ \sseq@call{\sseq@DoUntilOutOfBoundsThenNMore@}
+}
+
+\def\sseq@DoUntilOutOfBoundsThenNMore@ #1#2 {
+ \sseq@esetthiscall{\string\DoUntilOutOfBoundsThenNMore\unexpanded{#1}}
+ \sseq@opushstacktrace{\string\DoUntilOutOfBoundsThenNMore{#1}}
+ \ifx\sseq@xminmax\@gobbletwo\else\ifx\sseq@yminmax\@gobbletwo\else
+ \sseq@error@n{DoUntil-no-bound}{\DoUntilOutOfBoundsThenNMore}
+ \sseq@breakfifi
+ \fi\fi
+ \sseq@ifintexpr{#1}{}{
+ \sseq@error@xx{Do-invalid-int-expr}{\string\DoUntilOutOfBoundsThenNMore}{\unexpanded{#1}}
+ \sseq@break
+ }
+ \def\sseq@commandname{\string\DoUntilOutOfBoundsThenNMore}
+ \sseq@savestack
+ \sseq@DoUntilOutOfBounds@body{#2}
+ \prg_replicate:nn {#1} {
+ \sseq@stepiteration
+ #2
+ \relax
+ }
+ \sseq@restorestack
+ \sseq@breakpoint
+ \endgroup
+}
+
+\def\sseq@DoUntilOutOfBounds@body#1{
+ \sseq@save@Do@var % Set iteration so that \DoUntilOutOfBoundsThenNMore doesn't get upset if we're already out of bounds
+ % If we're already out of bounds, we'll just do nothing.
+ \sseq_if_out_of_bounds_noparse:nnTF{\lastx{0}}{\lasty{0}}{
+ \bool_set_true:N \l_tmpa_bool
+ }{
+ \bool_set_false:N \l_tmpa_bool
+ % Now we need to set up the loop descent condition.
+ \sseq@tempxb=\lastx{0}\relax % Record current x and y values
+ \sseq@tempyb=\lasty{0}\relax
+ \sseq@stepiteration
+ #1 % run loop body once
+ \relax % protect from \d page grabber
+ \sseq_if_out_of_bounds_noparse:nnTF{\lastx{0}}{\lasty{0}}{ % If we're out of bounds now, we can quit
+ \bool_set_true:N \l_tmpa_bool
+ }{ % Otherwise, determine descent check
+ \sseq@tempx=\lastx{0}\relax % store new last value for comparison
+ \sseq@tempy=\lasty{0}\relax
+ \bool_set_false:N \l_tmpb_bool % This is to record whether there is a defined x range or y range. If neither, we'll throw an error.
+% \def\sseq@checkbound{\bool_set_false:N \l_tmpb_bool}
+ \ifx\sseq@xminmax\@gobbletwo
+ \ifnum\sseq@tempx>\sseq@tempxb
+ \bool_set_true:N \l_tmpb_bool % We have a descent condition
+% \sseq@d@addto@macro\sseq@checkbound{
+% \ifnum\sseq@tempx>\sseq@tempxb % Any stage of the loop is okay as long as it increases x
+% \bool_set_true:N \l_tmpb_bool
+% \fi
+% }
+ \else
+ \ifnum\sseq@tempx<\sseq@tempxb
+ \bool_set_true:N \l_tmpb_bool
+% \sseq@d@addto@macro\sseq@checkbound{ % Any stage of the loop is okay as long as it decreases x
+% \ifnum\sseq@tempx<\sseq@tempxb
+% \bool_set_true:N \l_tmpb_bool
+% \fi
+% }
+ \fi
+ \fi
+ \fi
+ \ifx\sseq@yminmax\@gobbletwo
+ \ifnum\sseq@tempy>\sseq@tempyb
+ \bool_set_true:N \l_tmpb_bool
+% \sseq@d@addto@macro\sseq@checkbound{
+% \ifnum\sseq@tempy>\sseq@tempyb
+% \bool_set_true:N \l_tmpb_bool
+% \fi
+% }
+ \else
+ \ifnum\sseq@tempy<\sseq@tempyb
+ \bool_set_true:N \l_tmpb_bool
+% \sseq@d@addto@macro\sseq@checkbound{
+% \ifnum\sseq@tempy<\sseq@tempyb
+% \bool_set_true:N \l_tmpb_bool
+% \fi
+% }
+ \fi
+ \fi
+ \fi
+ \if_bool:N \l_tmpb_bool\else:
+ \sseq@error@x{DoUntil-no-progress}{\sseq@commandname}
+ \fi:
+ }
+ }
+ \bool_until_do:Nn \l_tmpa_bool {
+ \sseq@stepiteration
+ #1
+ \relax
+ \sseq_if_out_of_bounds_noparse:nnTF{\lastx{0}}{\lasty{0}}{% we're done
+ \bool_set_true:N \l_tmpa_bool
+ }{% Check descent condition
+% \ifnum\iteration/10*10-\iteration=\z@
+% \sseq@tempx=\lastx{0}\relax % store new last value for comparison
+% \sseq@tempy=\lasty{0}\relax
+% \bool_set_false:N \l_tmpb_bool
+% \sseq@checkbound
+% \if_bool:N \l_tmpb_bool\else:
+% \sseq@error{DoUntilOutOfBounds-descent-failed}
+% \fi:
+% \sseq@tempxb=\sseq@tempx
+% \sseq@tempyb=\sseq@tempx
+% \fi
+ }
+ }
+}
+
+
+
+\ExplSyntaxOff
+
+
+\def\sseq@for@nopatch{\sseq@error{foreach-patch-failed}\def\sseq@patchfor{}\endinput}
+
+\newtoks\sseq@foreachcall
+
+\def\sseq@pgffor@atbeginforeach{%
+ \begingroup %
+ \sseq@atbeginforeach@msgsetup
+ % \pgffor@macro@list calls \pgffor@normal@list, so we need to mark that the list has already been added to foreachcall.
+ \sseq@tempiftrue
+}
+
+
+\def\sseq@patchfor{%
+ \let\pgffor@atbeginforeach\sseq@pgffor@atbeginforeach
+ \let\pgffor@@vars@opt\sseq@pgffor@@vars@opt
+}
+\def\sseq@pgffor@modify#1{%
+ \@xp\let\csname sseq@\sseq@macroname#1\endcsname #1%
+ \eappto\sseq@patchfor{\let\@nx#1 \@xp\@nx\csname sseq@\sseq@macroname#1\endcsname}%
+}
+
+
+
+\def\sseq@pgffor@recordarg#1#2{
+ \sseq@pgffor@modify#1
+ \@xp\pretocmd\csname sseq@\sseq@macroname#1\endcsname{\sseq@foreachcall\@xp{\the\sseq@foreachcall#2}}{}{\sseq@for@nopatch}
+}
+\def\sseq@pgffor@erecordarg#1#2{
+ \sseq@pgffor@modify#1
+ \@xp\pretocmd\csname sseq@\sseq@macroname#1\endcsname{\sseq@eval{\sseq@foreachcall{\the\sseq@foreachcall#2}}}{}{\sseq@for@nopatch}
+}
+
+
+\bgroup\lccode`\*=`\#\lowercase{\egroup
+
+% Modify the foreach argument parser commands to put the call into \sseq@foreachcall and to tell us what the variables are
+\def\sseq@pgffor@@vars@opt[#1]{\sseq@foreachcall\@xp{\the\sseq@foreachcall#1}\pgfkeys{/sseqpages/foreach/.cd,#1}\pgffor@vars}
+
+\sseq@pgffor@recordarg\pgffor@@vars{*1}
+\pretocmd\sseq@pgffor@@vars{\sseq@for@savemacro*1}{}{\sseq@for@nopatch}
+
+\sseq@pgffor@recordarg\pgffor@@vars@slash@gobble{/}
+\sseq@pgffor@recordarg\pgffor@macro@list{in *1}
+\pretocmd\sseq@pgffor@macro@list{\sseq@tempiffalse}{}{\sseq@for@nopatch}% Don't add this again in \pgffor@normal@lis
+
+\sseq@pgffor@modify\pgffor@normal@list
+% Add list to argument if it wasn't a macro
+\pretocmd\sseq@pgffor@normal@list{\ifsseq@tempif\sseq@foreachcall\@xp{\the\sseq@foreachcall in {*1}}\fi\sseq@tempiftrue}{}{\sseq@for@nopatch}
+
+\sseq@pgffor@recordarg\pgffor@collectforeach@macro{\foreach}
+\sseq@pgffor@recordarg\pgffor@collectforeach@normal{\foreach}
+
+\sseq@pgffor@modify\pgffor@iterate
+\pretocmd\sseq@pgffor@iterate{\sseq@opushstacktrace{\the\sseq@foreachcall}\sseq@thiscalltoks\@xp{\the\sseq@foreachcall}}{}{\sseq@for@nopatch}
+
+\sseq@pgffor@modify\pgffor@doloop
+\sseq@pgffor@modify\pgffor@invokebody
+\patchcmd\sseq@pgffor@doloop{\pgffor@begingroup}{\pgffor@begingroup\sseq@xsetlastcall{\the\sseq@foreachcall}}{}{\sseq@for@nopatch}
+\patchcmd\sseq@pgffor@invokebody{\pgffor@begingroup}{\pgffor@begingroup\sseq@xsetlastcall{\the\sseq@foreachcall}}{}{\sseq@for@nopatch}
+}
+
+%TODO: also hook \pgffor@assign@parse, \pgffor@remember@parse, \pgffor@count@parse.
+
diff --git a/graphics/pgf/contrib/spectralsequences/sseqkeys.code.tex b/graphics/pgf/contrib/spectralsequences/sseqkeys.code.tex
new file mode 100644
index 0000000000..1581a516ec
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqkeys.code.tex
@@ -0,0 +1,2073 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqkeys.code.tex
+%% Exposes: \sseqset
+%%
+%% Sets up the keys for sseqpages. There are a lot of them...
+%%
+
+
+% Run \pgfqkeys{directory}{keys} but for a list of directories. Helps to avoid code duplication.
+\def\sseq@pgfqkeysdirlist#1#2{%
+ \sseq@temptoks{#2}%
+ \sseq@pgfqkeysdirlist@#1,\sseq@nil
+}
+
+\def\sseq@pgfqkeysdirlist@#1,{%
+ \sseq@eval{\@nx\pgfqkeys{#1}{\the\sseq@temptoks}}%
+ \@ifnextchar\sseq@nil{\@gobble}{\sseq@pgfqkeysdirlist@}%
+}
+
+%%%% Interface macros:
+% These are the things that are used outside of this section:
+\let\sseq@pgfkeys@error@save\pgfkeys@error
+\pgfkeys{/sseqpages/userstyles/.unknown/.code={\sseq@passoptionto{\sseq@sseqsetdirectory}}}
+\protected\def\sseqset#1{\pgfqkeys{/sseqpages/userstyles}{#1}}
+
+\def\sseq@sseqsetdirectory{/sseqpages/global/default}
+\def\sseq@set{\pgfqkeys{/sseqpages}}
+
+%%%
+%%% Local Keys
+%%%
+
+% This is where and how we are going to store the results of our local options. Note that definitions need to be local to allow recursion.
+\def\sseq@savedoptioncode{}
+\def\sseq@d@addto@options{\sseq@d@addto@macro\sseq@savedoptioncode}
+\def\sseq@e@addto@options{\sseq@e@addto@macro\sseq@savedoptioncode}
+
+% #1 -- name of key
+% #2 -- options
+% This is the main way that we use options. (We also use \pgfqkeys{/sseqpages/global} and some similar things)
+% Dumps out code that the option indexes into \sseq@savedoptioncode
+% This is because \pgfkeys has a high performance cost, so instead of using \pgfkeys once per page,
+% we use this once when putting together the spectral sequence and save the result.
+\def\sseq@processoptions#1#2{%
+ \def\sseq@savedoptioncode{}%
+ \sseq@protectedeval{\@nx % TODO: get rid of this protectedeval
+ \pgfqkeys{/sseqpages/#1}{#2}
+ }%
+}
+
+% First pass versus second pass:
+% Lots of options mainly do stuff on the drawing run, but still need to warn the sseq setup algorithms that they're around
+% on the first pass. Some only do things on the first pass or only do things on the second pass.
+% For example, shifts: shifts apply a coordinate transform on the second pass, but also need to factor into the coordinates of
+% classes etc which are computed at specification time not at draw time. So xshift=2 increases \sseq@x by 2 on its first pass and
+% applies a coordinate transform by 2cm on the second pass.
+
+% normal mode does the firstpass options now and saves the secondpass options in \sseq@savedoptioncode for later use.
+% firstpass mode does the firstpass options and throws away the secondpass options.
+% secondpass mode throws away the firstpass options and does the secondpass options NOW
+% bothpass mode does both firstpass and secondpass options NOW
+% We spend the vast majority of our time in normal mode.
+
+\def\sseq@options@use#1{#1}
+\def\sseq@options@normalmode{\let\sseq@options@firstpass\sseq@options@use\let\sseq@options@secondpass\sseq@d@addto@options}
+\def\sseq@options@firstpassmode{\let\sseq@options@firstpass\sseq@options@use\let\sseq@options@secondpass\@gobble}
+\def\sseq@options@secondpassmode{\let\sseq@options@firstpass\@gobble\let\sseq@options@secondpass\sseq@options@use}
+\def\sseq@options@bothpassmode{\let\sseq@options@firstpass\sseq@options@use\let\sseq@options@secondpass\sseq@options@use}
+\sseq@options@normalmode
+
+\pgfqkeys{/handlers}{
+ .sseq @ first pass code/.code={
+ \pgfkeysalso{\pgfkeyscurrentpath/.code={\sseq@options@firstpass{#1}}}
+ },
+ .sseq @ first pass append code/.code={
+ \pgfkeysalso{\pgfkeyscurrentpath/.append code={\sseq@options@firstpass{#1}}}
+ },
+ .sseq @ second pass code/.code={
+ \pgfkeysalso{\pgfkeyscurrentpath/.code={\sseq@options@secondpass{#1}}}
+ },
+ .sseq @ second pass append code/.code={
+ \pgfkeysalso{\pgfkeyscurrentpath/.append code={\sseq@options@secondpass{#1}}}
+ },
+ .sseq @ second pass store in/.code={
+ \pgfkeysalso{\pgfkeyscurrentpath/.code={\sseq@options@secondpass{\def#1{##1}}}}
+ },
+ .sseq @ code/.code 2 args={
+ \pgfkeysalso{\pgfkeyscurrentpath/.code={\sseq@options@firstpass{#1}}}
+ \pgfkeysalso{\pgfkeyscurrentpath/.append code={\sseq@options@secondpass{#1}}}
+ },
+ .sseq @ transform/.code={
+ \sseq@keys@lastpart
+ \edef\sseq@temppath{\pgfkeyscurrentpath/\sseq@temp}
+ \pgfkeysalso{\sseq@temppath/.code/.expanded={\@nx\sseq@checktransform{\sseq@temp}\unexpanded{{##1}}}}
+ \pgfkeysalso{\sseq@temppath/.sseq @ second pass append code/.expanded={\@nx\sseq@pgfkeysdocommand{\sseq@temp}\unexpanded{{##1}}}}%
+ },
+ .sseq @ stdparse do transform/.code={
+ \sseq@keys@lastpart
+ \edef\sseq@temppath{\pgfkeyscurrentpath/\sseq@temp}
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
+ \pgfkeysalso{\sseq@temppath/.code/.expanded={\@nx\sseq@standardparse\@nx\sseq@options@secondpass{\@nx\sseq@pgfkeysdocommand{\sseq@temp}\unexpanded{{##1}}}}}
+ \else
+ \pgfkeysalso{\sseq@temppath/.code/.expanded={\@nx\sseq@standardparse\@nx\sseq@options@secondpass{\@nx\sseq@pgfkeysdocommand{\sseq@temp}{#1}}}s}
+ \fi
+ },
+ .sseq @ illegal/.code={
+ \sseq@keys@lastpart
+ \edef\sseq@temppath{\pgfkeyscurrentpath/\sseq@temp}
+ \pgfkeysalso{\sseq@temppath/.code/.expanded={\@nx\sseq@error@n{option-illegal}{\sseq@temp}}}
+ },
+ .sseq @ illegal as global/.code={
+ \sseq@keys@lastpart
+ \pgfkeysalso{/sseqpages/global/\sseq@temp/.code/.expanded={\@nx\sseq@error@n{option-illegal-as-global}{\sseq@temp}}}
+ },
+ .sseq @ global only/.code={
+ \sseq@keys@lastpart
+ \pgfkeysalso{/sseqpages/\sseq@temp/.code/.expanded={\@nx\sseq@error@n{option-global-only}{\sseq@temp}}}
+ }
+}
+
+
+%%% Some easy internal macros
+
+% This is for .unknown handlers. Try same key in different directory #1.
+\def\sseq@passoptionto#1{\sseq@eval{\@nx\pgfqkeys{#1}{\pgfkeyscurrentname={\unexpanded\@xp{\pgfkeyscurrentvalue}}}}}
+
+% Immediately execute a key that is either a tikz or pgf key.
+% #1 -- key
+% #2 -- value
+\def\sseq@pgfkeysdocommand#1#2{
+ \sseq@tempiffalse
+ \sseq@pgfkeysdocommand@try{/tikz}{#1}{#2}
+ \sseq@pgfkeysdocommand@try{/pgf}{#1}{#2}
+ \ifsseq@tempif\else\sseq@error@internal@nn{do-command-failed}{#1}{#2}\fi
+}
+
+% Execute a key if \sseq@tempif is true and it is defined, if so set \sseq@tempif to false.
+% These are meant to cascade.
+% #1 -- directory
+% #2 -- key
+% #3 -- value
+\def\sseq@pgfkeysdocommand@try#1#2#3{
+ \ifsseq@tempif\else
+ \pgfkeysifdefined{#1/#2/.@cmd}{
+ \sseq@tempiftrue
+ \def\pgfkeysdefaultpath{#1/}
+ \edef\pgfkeyscurrentkey{#1/#2}
+ \pgfkeysgetvalue{#1/#2/.@cmd}{\pgfkeys@code}%
+ \pgfkeys@code#3\pgfeov
+ }{
+ \pgfkeysifdefined{#1/#2}{
+ \sseq@tempiftrue
+ \pgfkeyssetvalue{#1/#2}{#3}
+ }{}
+ }
+ \fi
+}
+
+%%%
+% Our main unknown option handler
+% This is copied from the standard tikz .unknown handler, but instead of running the code it stores it in \sseq@savedoptioncode.
+% When it tries the key in /tikz and in /pgf it also recursively expands \pgfkeysalso's.
+
+\def\sseq@keys@unknown@error@normal{\sseq@error{unknown-key}} % a hook so we can turn off errors if we like
+\let\sseq@keys@unknown@error\sseq@keys@unknown@error@normal % This is used in .sseq style
+\let\sseq@add@tikzkey@to@options\sseq@e@addto@options % another hook for .sseq style
+
+\def\sseq@keys@unknown{%
+ \let\tikz@key\pgfkeyscurrentname
+ \sseq@keys@try@addtooptions{/sseqpages/userstyles,/tikz,/pgf}{}{%
+ \@xp\pgfutil@in@\@xp!\@xp{\tikz@key}%
+ \ifpgfutil@in@%
+ % this is a color!
+ \sseq@keys@unknown@handlecolor
+ \else%
+ \pgfutil@doifcolorelse{\tikz@key}%
+ {%
+ \sseq@keys@unknown@handlecolor
+ }%
+ {%
+ % Ok, second chance: This might be an arrow specification:
+ \@xp\pgfutil@in@\@xp-\@xp{\tikz@key}%
+ \ifpgfutil@in@%
+ % Ah, an arrow spec!
+ \sseq@add@tikzkey@to@options{\@nx\sseq@options@secondpass{\@nx\tikz@processarrows{\tikz@key}}}%
+ \else%
+ % Ok, third chance: A shape!
+ \@xp\ifx\csname pgf@sh@s@\tikz@key\endcsname\relax%
+ \sseq@keys@unknown@error%
+ \else%
+ \sseq@add@tikzkey@to@options{\@nx\sseq@options@secondpass{\def\@nx\tikz@shape{\tikz@key}}}%
+ \fi%
+ \fi%
+ }%
+ \fi%
+ }%
+}
+
+
+\def\sseq@keys@unknown@handlecolor{%
+ \sseq@add@tikzkey@to@options{\@nx\sseq@options@secondpass{\@nx\tikz@addoption{\@nx\tikz@compat@color@set{\tikz@key}}}}%
+ \sseq@add@tikzkey@to@options{\@nx\sseq@options@secondpass{\def\@nx\tikz@textcolor{\tikz@key}}}%
+}
+
+%%% \sseq@keys@try@addtooptions
+% #1 -- a comma separated list of directories
+% #2 -- success code
+% #3 -- failure code
+%
+% This is for the main .unknown handler and for \sseq@addstylecodetooptions (which pretends to be \pgfkeys executed in a directory with only a .unknown)
+% Tries to run the current key (\pgfkeyscurrentname=\pgfkeyscurrentvalue) in each of the directories in turn.
+% If it finds the key in one of the directories, recursively expand the \pgfkeysalso in the code,
+% add the final result to \sseq@savedoptioncode, and run success code. Otherwise run failure code.
+%
+% The goal is to avoid storing any commands that require the use of pgfkeys.
+% This is only a partial solution, because it misses \tikzset, \pfgqkeys, etc.
+% \pgfkeysalso is particularly dangerous though because we might not remember what directory it was supposed to happen in.
+% In order to get the recursive expansion of \pgfkeysalso's we need to modify the pgfkeys algorithm so that it
+% passes control back to \sseq@keys@addtooptions@checkalso when it's done.
+% Modifies tikz commands \pgfkeys@case@one and \pgfkeys@case@two@extern from file /pgf/utilities/pgfkeys.code.tex lines 352 and 365
+\def\sseq@keys@try@addtooptions#1{%
+ \sseq@keys@try@addtooptions@#1,\sseq@nil
+}
+\def\sseq@keys@try@addtooptions@#1,{%
+ \bgroup
+ \def\pgfkeysdefaultpath{#1/}%
+ \def\next{\egroup\@ifnextchar\sseq@nil{\@xp\@secondoftwo\@gobble}{\sseq@keys@try@addtooptions@}}%
+ \pgfkeysifdefined{#1/\pgfkeyscurrentname/.@cmd}{%
+ \edef\pgfkeyscurrentkey{#1/\pgfkeyscurrentname}%
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text% Hmm... no value
+ \pgfkeysifdefined{#1/\pgfkeyscurrentname/.@def}%
+ {\pgfkeysgetvalue{#1/\pgfkeyscurrentname/.@def}{\pgfkeyscurrentvalue}}%
+ {}% no default, so leave it
+ \fi%
+ \pgfkeysgetvalue{#1/\pgfkeyscurrentname/.@cmd}{\pgfkeys@code}%
+ \sseq@eval{\@nx\sseq@keys@addtooptions@checkalso{\unexpanded\@xptwo{\@xp\pgfkeys@code\pgfkeyscurrentvalue\pgfeov}}}%
+ \sseq@smuggle@macro\sseq@savedoptioncode
+ \egroup
+ \def\next{\@xp\@firstoftwo\sseq@gobble@to@nil}%
+ }{%
+ \pgfkeysifdefined{#1/\pgfkeyscurrentname}{%
+ \egroup
+ \sseq@add@tikzkey@to@options{\@nx\sseq@options@secondpass{\@nx\pgfkeyssetvalue{#1/\pgfkeyscurrentname}{\unexpanded\@xp{\pgfkeyscurrentvalue}}}}%
+ \def\next{\@xp\@firstoftwo\sseq@gobble@to@nil}%
+ }{}%
+ }%
+ \next
+}
+
+% Iterate over list and run \pgfkeysalso's when we find them. Note that we use our variants of \pgfkeys@case@... which hand control back to this command,
+% so this is recursive -- the result is guaranteed not to have any instance of \pgfkeysalso in it!
+\def\sseq@keys@addtooptions@checkalso#1{%
+ \let\pgfkeys@case@one\sseq@pgfkeys@case@one@store
+ \let\pgfkeys@case@two@extern\sseq@pgfkeys@case@two@extern@store
+ \sseq@keys@addtooptions@checkalso@#1\pgfkeysalso\sseq@nil
+}
+
+\def\sseq@keys@addtooptions@checkalso@#1\pgfkeysalso#2{%
+ \def\sseq@tempa{/tikz/}%
+ \def\sseq@tempb{/pgf/}%
+ % This is an extra hook I needed to add so that my own keys can execute code when they need to...
+ \sseq@keys@addtooptions@checkdo#1\sseq@keys@do\sseq@nil
+ \ifx\sseq@nil#2% We're done, restore pgfkeys.
+ \let\pgfkeys@case@one\sseq@pgfkeys@case@one@save
+ \let\pgfkeys@case@two@extern\sseq@pgfkeys@case@two@extern@save
+ \else
+ \ifx\expandafter#2 % if they wanted to expand the first token, handle that
+ \sseq@add@tikzkey@to@options{\sseq@options@secondpass@iftikz{\relax\relax}}% The last token was an \expandafter, we need to keep it from doing anything
+ \@xptwo\sseq@keys@addtooptions@checkalso@xp
+ \else
+ \pgfkeysalso{#2}%
+ \@xptwo\sseq@keys@addtooptions@checkalso@
+ \fi
+ \fi
+}
+
+\def\sseq@keys@addtooptions@checkalso@xp#1{%
+ \@xp\pgfkeysalso\@xp{#1}%
+ \sseq@keys@addtooptions@checkalso@
+}
+
+% Used to get collections code to run right.
+\def\sseq@keys@addtooptions@checkdo#1\sseq@keys@do#2{%
+ \sseq@add@tikzkey@to@options{\sseq@options@secondpass@iftikz{\unexpanded{#1}}}%
+ \ifx#2\sseq@nil\else
+ #2%
+ \@xp\sseq@keys@addtooptions@checkdo
+ \fi
+}
+
+
+% This has to be expandable, so \sseq@tempa and \sseq@tempb are set to "/tikz/" and "/pgf/" ahead of time
+% Defer the command if it is in directories /pgf or /tikz, otherwise run it now. TODO: explain here why we need this.
+\def\sseq@options@secondpass@iftikz{%
+ \ifx\pgfkeysdefaultpath\sseq@tempa
+ \@nx\sseq@options@secondpass
+ \else
+ \ifx\pgfkeysdefaultpath\sseq@tempb
+ \@nx\sseq@options@secondpass
+ \else
+ \@xptwo\@firstofone
+ \fi
+ \fi
+}
+
+
+% Here we hook into pgfkeys. This is remarkably easy!
+\let\sseq@pgfkeys@case@one@save\pgfkeys@case@one
+\let\sseq@pgfkeys@case@two@extern@save\pgfkeys@case@two@extern
+\def\sseq@pgfkeys@case@one@store{%
+ \pgfkeysifdefined{\pgfkeyscurrentkey/.@cmd}{%
+ \pgfkeysgetvalue{\pgfkeyscurrentkey/.@cmd}{\pgfkeys@code}%
+ % The following line is the only change, it used to be \@xp\pgfkeys@code\pgfkeyscurrentvalue\pgfeov which would just run the code.
+ % Instead we recursively expand the \pgfkeysalso's and then store in it \sseq@savedoptioncode
+ \sseq@eval{\@nx\sseq@keys@addtooptions@checkalso{\unexpanded\@xptwo{\@xp\pgfkeys@code\pgfkeyscurrentvalue\pgfeov}}}%
+ }{\pgfkeys@case@two}%
+}
+\def\sseq@pgfkeys@case@two@extern@store{%
+ \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text%
+ \pgfkeysvalueof{\pgfkeyscurrentkey}% this probably isn't a real case
+ \else%
+ % The following line is the only change, it used to be (roughly) \pgfkeyssetvalue{\pgfkeyscurrentkey}{\pgfkeyscurrentvalue}
+ % which would immediately set the value. Instead we store in it \sseq@savedoptioncode
+ \sseq@add@tikzkey@to@options{\@nx\sseq@options@secondpass{\@nx\pgfkeyssetvalue{\pgfkeyscurrentkey}{\unexpanded\@xp{\pgfkeyscurrentvalue}}}}%
+ \fi%
+}
+
+\pgfkeys{%
+ /sseqpages/.is family,
+ /sseqpages/.unknown/.code={\sseq@keys@unknown},
+%
+ /sseqpages/class/.unknown/.code={%
+ \expandafter\ifx\csname pgf@sh@s@\pgfkeyscurrentname\endcsname\relax % is it the name of a shape?
+ \sseq@passoptionto{/sseqpages}%
+ \else
+ \sseq@e@addto@options{\def\@nx\tikz@shape{\pgfkeyscurrentname}}% if so, store it
+ \fi
+ },
+ /sseqpages/.is family,
+ /sseqpages/scope/.is family,
+ /sseqpages/scope/.unknown/.code={\sseq@passoptionto{/sseqpages}},
+ /sseqpages/class/.is family,
+ /sseqpages/class/label/.is family,
+ /sseqpages/class/label/.unknown/.code={\sseq@keys@unknown},
+ /sseqpages/class/label/pin/.unknown/.code={\sseq@keys@unknown},
+ /sseqpages/class/node texts/.is family,
+ /sseqpages/class/node texts/.unknown/.code={\sseq@passoptionto{/tikz}},
+ /sseqpages/differential/.is family,
+ /sseqpages/differential/.unknown/.code={\sseq@passoptionto{/sseqpages}},
+ /sseqpages/struct line/.is family,
+ /sseqpages/struct line/.unknown/.code={\sseq@passoptionto{/sseqpages}},
+ /sseqpages/label/.is family,
+ /sseqpages/label/.unknown/.code={\sseq@keys@unknown},
+ /sseqpages/tikz primitives/.is family,
+ /sseqpages/tikz primitives/.unknown/.code={\sseq@keys@unknown},
+ % One off directories
+ /sseqpages/fit/.is family,
+ /sseqpages/fit/.unknown/.code={\sseq@passoptionto{/sseqpages}},
+ /sseqpages/foreach/.unknown/.code={\sseq@passoptionto{/pgf/foreach}},
+ /sseqpages/class placement/.unknown/.code={\sseq@passoptionto{/tikz}}
+}
+
+\pgfqkeys{/sseqpages/class}{shape/.code={\edef\tikz@shape{\pgfkeyscurrentname}}} % shape=whatever shape passing
+
+\newif\ifsseq@pin
+\pgfqkeys{/sseqpages/class/label}{% maybe implement multipart node labels this way? No way!
+ node/.sseq @ first pass code={\sseq@classlabelfalse},
+ inside/.sseq @ first pass code={\sseq@classlabelfalse},
+ pin/.sseq @ first pass code = {
+ \let\sseq@savedoptioncode@save\sseq@savedoptioncode
+ \sseq@processoptions{class/label/pin}{#1}
+ \edef\sseq@savedoptioncode{\unexpanded\@xp{\sseq@savedoptioncode@save}\@nx\sseq@d@addto@macro\@nx\sseq@pinoptions{\unexpanded\@xp{\sseq@savedoptioncode}}}
+ },
+ pin/.sseq @ second pass append code = {\sseq@pintrue}
+}
+\def\sseq@pinoptions{}
+
+%% label directions
+\def\sseq@labeldirectionlist{\\{above}\\{below}\\{left}\\{right}\\{above left}\\{above right}\\{below left}\\{below right}}
+\def\sseq@setlabeldirectionkeys#1{
+ \@ifnextchar[{\sseq@setlabeldirectionkeys@{#1}}{\sseq@setlabeldirectionkeys@{#1}[/.code]}%]
+}
+\def\sseq@setlabeldirectionkeys@#1[#2]#3{
+ \bgroup
+ \def\sseq@temp##1{#3}
+ \sseq@temptoks{}
+ \def\\##1{
+ \sseq@eval{\sseq@temptoks{\the\sseq@temptoks##1#2={\unexpanded\@xp{\sseq@temp{##1}}},}}
+ }
+ \sseq@labeldirectionlist
+ \sseq@eval{\egroup\@nx\pgfqkeys{#1}{\the\sseq@temptoks}}
+}
+\begingroup
+\def\\#1{\@xp\sseq@addtostorelist\csname sseq@default@#1@distance\endcsname{1ex}}
+\sseq@labeldirectionlist
+\endgroup
+\def\sseq@defaultlabeldistance#1{\@xp\csname sseq@default@#1@distance\endcsname}
+\def\sseq@setdefaultlabeldistance#1#2{\sseq@savedpaths@add{\@xp\gdef\csname sseq@default@#1@distance\endcsname{#2}}}
+\def\sseq@setdefaultlabeldistances#1{\def\\##1{\sseq@setdefaultlabeldistance{##1}{#1}}\sseq@labeldirectionlist}
+
+
+
+\sseq@setlabeldirectionkeys{/sseqpages/class/label}[/.sseq @ first pass code]{\sseq@classlabeltrue}
+\sseq@setlabeldirectionkeys{/sseqpages/class/label}[/.sseq @ second pass append code]{\sseq@class@positionlabel{#1}{##1}}
+\sseq@setlabeldirectionkeys{/sseqpages/class/label}[/.default]{\sseq@defaultlabeldistance{#1}}
+\sseq@setlabeldirectionkeys{/sseqpages/global/class/label}[/.default]{\sseq@defaultlabeldistance{#1}}
+
+\sseq@setlabeldirectionkeys{/sseqpages/global}[ label distance/.code]{\sseq@setdefaultlabeldistance{#1}{##1}}
+\sseq@setlabeldirectionkeys{/sseqpages}[ label distance/.code]{\sseq@setdefaultlabeldistance{#1}{##1}}
+
+\sseq@pgfqkeysdirlist{/sseqpages/global,/sseqpages}{
+ label distance/.code={\sseq@setdefaultlabeldistances{#1}}
+}
+
+\def\sseq@class@positionlabel#1#2{\ifx\tikz@fig@name\undefined\else\sseq@pgfkeysdocommand{#1}{#2 of \tikz@fig@name}\fi}
+
+
+
+\sseq@addtostorelist\sseq@classlabel@handler{} % \sseq@classlabel@handler is public via "class label handler"
+\def\sseq@classlabel@handler@default#1{\def\result{#1}}
+\sseq@addtostorelist\sseq@classname@handler{} % \sseq@classname@handler is public via "class name handler"
+\def\sseq@classname@handler@default#1{\def\result{#1}}
+
+\def\sseq@labeltextfn#1{#1} % labeltextfn is private
+\def\sseq@labeltextfn@rotatescale#1{%
+ \@nx\ifmmode
+ \@nx\scalebox{\sseq@labletext@scale@factor}{\@nx\rotatebox{\sseq@labletext@rotate@angle}{$#1$}}%
+ \@nx\else
+ \@nx\scalebox{\sseq@labletext@scale@factor}{\@nx\rotatebox{\sseq@labletext@rotate@angle}{#1}}%
+ \@nx\fi
+}
+\def\sseq@labletext@rotate@angle{0}
+\def\sseq@labletext@scale@factor{1}
+
+\bgroup\lccode`8=`p\lccode`9=`t\lowercase{\egroup
+\def\sseq@eatpt#189{#1}
+}
+
+\sseq@pgfqkeysdirlist{/sseqpages/label,/sseqpages/class/label}{
+ rotate/.code={%
+ \let\sseq@labeltextfn\sseq@labeltextfn@rotatescale
+ \edef\sseq@labletext@rotate@angle{\@xp\sseq@eatpt\the\dimexpr\sseq@labletext@rotate@angle pt+#1pt}%
+ },
+ scale/.code={%
+ \let\sseq@labeltextfn\sseq@labeltextfn@rotatescale
+ \edef\sseq@labletext@scale@factor{\@xp\sseq@eatpt\the\dimexpr\sseq@labletext@scale@factor pt*#1}%
+ },
+% shift/.sseq @ second pass code={\pgfkeysalso{xshift=\sseq@shift@getx#1}\pgfkeysalso{yshift=\sseq@shift@gety#1}}
+}
+
+
+\pgfqkeys{/sseqpages/global}{
+ background color/.initial=white
+}
+\pgfqkeys{/sseqpages/label}{
+ description/.code={%
+ \edef\sseq@edgeoptionhook{\@nx\pgfkeys{/tikz/fill=\pgfkeysvalueof{/sseqpages/global/background color}}}%
+ },
+ description/.sseq @ second pass append code={%
+ \pgfkeysalso{/tikz/anchor=center}%
+ }
+}
+
+\def\sseq@edgeoptionhook{}% This is just to make description work.
+
+%% Labels
+%% The code for this that actually does most of the work is inside of sseqmain.code.tex -- search for "Labels"
+%% This just handles the interface with the keyvalue system here.
+
+
+%% Quote handling
+% \sseq@handlequote will be installed later as the 'first char syntax' for ".
+% Problem is that 'first char syntax' isn't allowed to care what directory it is in, but we need different handling
+% for classes versus edges versus scopes. Solution is to use \pgfkeysalso and then define the handler in a key.
+\def\sseq@protectlabel{\@nx\sseq@protectlabel\@nx}
+\def\sseq@handlequote#1{\pgfkeysalso{handle quote=#1}}
+\pgfkeys{%
+ /sseqpages/class/handle quote/.code={%
+ \let\tikz@quotes@as@save\tikz@quotes@as
+ \let\tikz@quotes@as\sseq@handleclassquotes
+ \tikz@quote@parser{#1}%
+ \let\tikz@quotes@as\tikz@quotes@as@save
+ },
+ /sseqpages/handle quote/.code={%
+ \let\tikz@quotes@as\sseq@handleedgequotes
+ \tikz@quote@parser{#1}%
+ \let\tikz@quotes@as\tikz@quotes@as@save
+ }
+}
+
+% We just do the parsing in sseqkeys, \sseq@handleclassquotes@inner which does the main work is defined sseqmain.
+\def\sseq@handlescopequotes#1#2{% We use this via \let\tikz@quotes@as\sseq@handleclassquotes
+ /utils/exec={% so it's called inside \pgfkeysalso{stuff}. Need to surround with /utils/exec={} to get out.
+ \global\let\sseq@classnodetext\pgfutil@empty%
+ \global\let\sseq@classnodetextoptions\pgfutil@empty%
+ \global\let\sseq@classlabelnodes\pgfutil@empty%
+ \sseq@handleclassquotes@inner{#1}{#2}
+ }
+}
+
+% We use this via \let\tikz@quotes@as\sseq@handleclassquotes
+% so it's called inside \pgfkeysalso{stuff}. Need to surround with /utils/exec={} to get out.
+\def\sseq@handleclassquotes#1#2{/utils/exec={\sseq@d@addto@macro\sseq@processlabels{\sseq@handleclassquotes@inner{#1}{#2}}}}
+
+
+
+\def\sseq@checktransform@error{\sseq@error@nn{illegal-transform}}
+\let\sseq@checktransform\sseq@checktransform@error
+
+
+%% Parsing, background vs foreground, and context
+\def\sseq@standardparse{%
+ \let\sseq@tikzprimitives@coords@maybeclass\sseq@tikzprimitives@coords@notaclass
+ \let\sseq@checktransform\@gobbletwo
+ \let\sseq@tikz@shifttransform\sseq@okayshifttransform
+ % TODO: This needs fixing:
+ %((((((((((((((((((
+ \def\class##1){\sseq@setthiscall{\string\class##1)}\sseq@error@x{standard-parse}{\string\class}}%
+ \def\replaceclass##1){\sseq@setthiscall{\string\replaceclass##1)}\sseq@error@x{standard-parse}{\string\replaceclass}}%
+ \def\classoptions##1){\sseq@setthiscall{\string\classoptions##1)}\sseq@error@x{standard-parse}{\string\classoptions}}%
+ \def\d##1){\sseq@setthiscall{\string\d##1)}\sseq@error@x{standard-parse}{\string\d}}%
+ \def\doptions##1){\sseq@setthiscall{\string\doptions##1)}\sseq@error@x{standard-parse}{\string\doptions}}%
+ \def\structline##1)##2){\sseq@setthiscall{\string\structline##1)##2)}\sseq@error@x{standard-parse}{\string\structline}}%
+ \def\structlineoptions##1)##2){\sseq@setthiscall{\string\structlineoptions##1)##2)}\sseq@error@x{standard-parse}{\string\structlineoptions}}%
+}
+
+% I don't think this is ever actually used...
+\def\sseq@nodeparse{%
+ \let\sseq@tikzprimitives@coords@maybeclass\sseq@tikzprimitives@coords@maybeclass@save
+ \let\sseq@tikzprimitives@coords@maybeclass
+ \def\sseq@transform{\sseq@error@nn{illegal-transform}} % Disallow most coordinate transforms
+ \let\sseq@shifttransform\sseq@checkshifttransform
+ \let\class\sseq@class
+ \let\replaceclass\sseq@replaceclass
+ \let\structline\sseq@structline
+}
+
+\sseq@pgfqkeysdirlist{/sseqpages,/sseqpages/tikz primitives}{%
+ standard parse/.code={
+ \let\sseq@firstpass@shifttransform\@gobbletwo
+ \sseq@d@addto@options{\sseq@standardparse}
+ \pgfkeys{/sseqpages/tikz primitives/shift/.sseq @ second pass code={\tikzset{shift={##1}}}}
+ },
+ node parse/.code={ % This is never used, probably broken, and likely shouldn't exist
+ \let\sseq@firstpass@shifttransform\sseq@firstpass@checkshifttransform
+ \let\sseq@checktransform\sseq@checktransform@error
+ \sseq@d@addto@options{\sseq@nodeparse}
+ },
+ background/.code={\sseq@setsavedpaths{background}\pgfkeysalso{standard parse}},
+ foreground/.code={\ifsseq@keepchanges\sseq@setsavedpaths{standard}\else\sseq@setsavedpaths{temporary}\fi\pgfkeysalso{node parse}}
+}
+
+\pgfkeys{
+ /sseqpages/tikz primitives/handle quote/.sseq @ second pass code={\tikzset{#1}},
+ /tikz/handle quote/.code={\sseq@error{tikz-edge-quotes}}
+}
+
+
+\sseq@pgfqkeysdirlist{/sseqpages/class,/sseqpages/differential}{
+ standard parse/.sseq @ first pass code={\sseq@error@n{option-tikz-prims-only}{standard parse}},
+ background/.sseq @ first pass code={\sseq@error@n{option-tikz-prims-only}{background}}
+}
+
+% Some class options. All of these will make changes local to the current \class command. They are communicated to \class via these commands,
+% which we initialize here as empty.
+\def\sseq@class@tag{}
+\def\sseq@class@tagprefix{}
+\def\sseq@class@name{}
+\def\sseq@namehandler{}
+\def\sseq@currenttag{\sseq@class@tag}% for the user ??
+\def\sseq@tooltip{}
+\pgfqkeys{/sseqpages/scope}{
+ tag/.code={\pgfkeys@spdef\sseq@class@tag{#1}},
+ tag prefix/.code={\pgfkeys@spdef\temp{#1}\sseq@e@addto@macro\sseq@class@tagprefix{\unexpanded\@xp{#1}}}
+}
+
+\def\sseq@classinsert{}
+\def\sseq@classnameprefix{}
+\def\sseq@classnamepostfix{}
+\pgfqkeys{/sseqpages}{
+ class name prefix/.store in=\sseq@classnameprefix,
+ class name postfix/.store in=\sseq@classnamepostfix
+}
+
+\pgfqkeys{/sseqpages/class}{
+ name/.code={%
+ \sseq@protectedeval{\@nx\sseq@classname@handler{\sseq@classnameprefix#1\sseq@classnamepostfix}}%
+ \edef\sseq@class@name{\unexpanded\@xp{\result}}%
+ \pgfkeysalso{/sseqpages/alias/.expand once=\detokenize\@xp{\sseq@class@name}}%
+ },
+ show name/.store in=\sseq@class@showname,
+ page/.code={\sseq@getnumrange\sseq@class@page{#1}},% page & gen are only for \classoptions.
+ generation/.code={\sseq@getnumrange\sseq@gen{#1}}, % \class tests if \sseq@class@page is set and throw an error if so.
+ tag/.code={\sseq@d@addto@macro\sseq@class@tag{#1}},
+ offset/.store in=\sseq@tempoffset,
+ tooltip/.sseq @ first pass code={\ifx\sseqtooltip\undefined \sseq@error{no-tooltip}\else \def\sseq@tooltip{#1}\fi},
+ insert/.store in=\sseq@classinsert
+}
+
+\pgfqkeys{/sseqpages/struct line}{
+ page/.code={\sseq@getnumrange\sseq@structline@page{#1}}
+}
+
+\def\sseq@fitalso{}
+\pgfqkeys{/sseqpages/fit}{
+ fit/.sseq @ first pass code={\sseq@d@addto@macro\sseq@fitalso{#1}},
+ page/.code={\sseq@getnumrange\sseq@fit@page{#1}}
+}
+
+\def\sseq@getnumrange#1#2{
+ \pgfutil@in@{--}{#2}\ifpgfutil@in@
+ \sseq@getnumrange@range#1#2\sseq@nil
+ \else
+ \sseq@getnumrange@range#1#2--\sseq@infinity\sseq@nil
+ \fi
+}
+\def\sseq@getnumrange@range#1#2--#3\sseq@nil{\edef#1{\the\numexpr#2}\@xp\edef\csname\sseq@macroname#1max\endcsname{\the\numexpr#3}}
+
+%% Needs tikz
+% Force \class or \d to fall back to using tikz to render their output
+% Rather than using the faster direct \pgf primitives (largely copied from tikz to maximize compatibility)
+% Drawing with tikz is slower, but I don't want to reimplement these features
+\def\sseq@needstikzandpass#1#2{\sseq@needstikzandpass@{#1}#2,\@nil}
+\def\sseq@needstikzandpass@#1#2,{%
+ \pgfqkeys{#1}{#2/.code={\sseq@options@firstpass{\sseq@needstikztrue}\sseq@options@secondpass{\sseq@pgfkeysdocommand{#2}{##1}\sseq@needstikztrue}}}%
+ \@ifnextchar\@nil{\@gobble}{\sseq@needstikzandpass@{#1}}%
+}
+
+\pgfqkeys{/sseqpages}{needs tikz/.code=\sseq@needstikztrue}
+% All of these things need tikz to draw but otherwise require no special handling.
+\sseq@needstikzandpass{/sseqpages}{%
+ shade, blend mode, pattern, path picture, path fading, decorate, pin, label % should pin be here?
+}
+
+\sseq@needstikzandpass{/sseqpages/differential}{%
+ bend left, bend right, in, out, relative, looseness, in looseness, out looseness,
+ min distance, max distance, out min distance, out max distance, in min distance, in max distance, distance,
+ controls, in control, out control,
+ loop, loop above, loop below, loop left, loop right % maybe delete the loops and replace them with errors? It's pretty pointless to use these.
+}
+
+\sseq@needstikzandpass{/sseqpages/struct line}{%
+ bend left, bend right, in, out, relative, looseness, in looseness, out looseness,
+ min distance, max distance, out min distance, out max distance, in min distance, in max distance, distance,
+ controls, in control, out control,
+ loop, loop above, loop below, loop left, loop right % maybe delete the loops and replace them with errors? It's pretty pointless to use these.
+}
+
+% circle split/.code=\sseq@needstikzandpass,
+% circle solidus/.code=\sseq@needstikzandpass,
+% ellipse split/.code=\sseq@needstikzandpass,
+% rectangle split/.code=\sseq@needstikzandpass,
+% align/.code=\sseq@needstikzandpass,
+
+\sseq@addtostorelist\sseq@runoffarrow@start@differential@spec{}
+\sseq@addtostorelist\sseq@runoffarrow@end@differential@spec{>}
+\sseq@addtostorelist\sseq@runoffarrow@start@structline@spec{...}
+\sseq@addtostorelist\sseq@runoffarrow@end@structline@spec{...}
+\sseq@pgfqkeysdirlist{/sseqpages/global,/sseqpages}{
+ run off differentials/.code args={#1-#2}{\def\sseq@runoffarrow@start@differential@spec{#1}\def\sseq@runoffarrow@end@differential@spec{#2}},
+ run off struct lines/.code args={#1-#2}{\def\sseq@runoffarrow@start@structline@spec{#1}\def\sseq@runoffarrow@end@structline@spec{#2}},
+ run off/.forward to=/sseqpages/run off differentials,
+ run off/.forward to=/sseqpages/run off struct lines
+}
+
+
+\sseq@pgfqkeysdirlist{/sseqpages/differential,/sseqpages/struct line}{
+ source anchor/.sseq @ second pass store in=\sseq@edgesourceanchor,
+ target anchor/.sseq @ second pass store in=\sseq@edgetargetanchor,
+ shorten >/.sseq @ second pass code={\sseq@pgfkeysdocommand{shorten >}{#1}},
+ shorten </.sseq @ second pass code={\sseq@pgfkeysdocommand{shorten <}{#1}},
+}
+\pgfqkeys{/sseqpages/differential}{
+ /sseqpages/differential/invisible/.sseq @ first pass code={\sseq@drawdifferentialfalse}
+}
+\newif\ifsseq@drawdifferential
+\sseq@drawdifferentialtrue
+
+%%%
+%%% Global Keys
+%%%
+
+%%% Style options
+
+%% Add key code to \sseq@savedoptioncode
+% #1 -- a list of directories to search
+% #2 -- keys
+%
+% This is pretty similar in basic concept to \sseq@processoptions, but instead of using the .unknown handlers to walk up the directory,
+% it just tries the key in each directory in the list. I'm not actually sure anymore why it was important to do it this way, but there probably was a good reason...
+%
+% This is a faster and sloppier way of doing:
+% \def\sseq@temp{#1}
+% \pgfqkeys{/sseqpages/alwaysunknown}{#2}
+% and defining an event handler: alwaysunknown/.unknown/.code={\@xp\sseq@keys@try@addtooptions\@xp{\sseq@temp}{}{\sseq@keys@unknown}
+% That basically takes advantage of the pgfkeys parser but gives me back control over what to do with the parsed things.
+%
+% For some reason I made the probably misguided decision that that approach was too slow, even though this isn't performance
+% critical code. Maybe I had a better reason for doing this that I can't remember. Instead I copied pgfkeys but deleted all the
+% parts that are useless in this context, which is most of it. Occasionally bugs crop up here when it turns out I deleted a little too much.
+%
+% This uses a hook \sseq@addstylecodetooptions@unknown to allow the sseqs style to sift out the nonglobal keys and handle them differently.
+%
+% Copied with modification from /pgf/utilities/pfgkeys.code.tex
+
+\def\sseq@addstylecodetooptions#1#2{%
+ \def\sseq@directorylist{#1}%
+ \sseq@simple@pgfkeys@parse#2,\pgfkeys@mainstop
+}
+
+\def\sseq@simple@pgfkeys@parse{\futurelet\pgfkeys@possiblerelax\sseq@simple@pgfkeys@parse@main}
+\def\sseq@simple@pgfkeys@parse@main{%
+ \ifx\pgfkeys@possiblerelax\pgfkeys@mainstop%
+ \@xp\@gobble
+ \else%
+ \@xp\sseq@simple@pgfkeys@@normal
+ \fi%
+}
+
+\def\sseq@simple@pgfkeys@@normal#1,{%
+ \sseq@simple@pgfkeys@unpack#1=\pgfkeysnovalue=\pgfkeys@stop
+ \sseq@simple@pgfkeys@parse
+}
+
+\def\sseq@simple@pgfkeys@unpack#1=#2=#3\pgfkeys@stop{%
+ \pgfkeys@spdef\pgfkeyscurrentkey{#1}%
+ \pgfkeys@spdef\pgfkeyscurrentvalue{#2}%
+ \ifx\pgfkeyscurrentkey\pgfkeys@empty\else
+ \def\next{\@xp\sseq@keys@try@addtooptions\@xp{\sseq@directorylist}{}{\sseq@addstylecodetooptions@unknown}}%
+ % We deleted the general "first char syntax" handler, so we need to do our own check for the quote.
+ \sseq@simple@pgfkeys@checkquote#1\sseq@nil{%
+ \def\pgfkeyscurrentname{handle quote}%
+ \def\pgfkeyscurrentvalue{#1}%
+ }{%
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentkey}%
+ \ifx\pgfkeyscurrentkey\pgfkeys@empty
+ \let\next\relax
+ \else%
+ \let\pgfkeyscurrentname\pgfkeyscurrentkey
+ \fi
+ }%
+ \@xp\next
+ \fi
+}
+% This is a hook for the "sseqs" style.
+\let\sseq@addstylecodetooptions@unknown\sseq@keys@unknown
+
+\long\def\sseq@simple@pgfkeys@checkquote#1#2\sseq@nil{%
+ \ifx#1"%
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi
+}
+
+
+\def\sseq@stylelist{}
+\def\sseq@clearchangestyles{}
+
+% The basic idea here is we make a tokens list \sseq@structlinestyle and define a key "struct lines" that takes a list of keys
+% and adds the keys to \sseq@structlinestyle. In order to do this, I need some special trick to delete spaces.
+% The macro \sseq@setmacronospaces defined in spectralsequences.sty accomplishes this.
+
+\def\sseq@newstyles#1#2{\def\sseq@temppath{#1}\sseq@newstyles@#2,\sseq@nil}
+\def\sseq@newstyles@#1,{\sseq@newsseqstyle{\sseq@trimleadingspaces#1}\@ifnextchar\sseq@nil{\@gobble}{\sseq@newstyles@}}
+
+\def\sseq@set@newstyle#1{\pgfqkeys{/sseqpages}{#1}\pgfqkeys{/sseqpages/global}{#1}\pgfqkeys{/sseqpages/global/default}{#1}}
+
+% Here are two useful wrappers around addstylecodetotoks.
+
+% #1 -- token list
+% #2 -- path
+% #3 -- code
+\def\sseq@addstylecodetotoks#1#2#3{%
+ \let\sseq@savedoptioncode@store\sseq@savedoptioncode
+ \edef\sseq@savedoptioncode{\the#1}%
+ \sseq@addstylecodetooptions{#2}{#3}%
+ #1\@xp{\sseq@savedoptioncode}%
+ \let\sseq@savedoptioncode\sseq@savedoptioncode@store
+}
+
+% #1 -- macro
+% #2 -- path
+% #3 -- code
+\def\sseq@addstylecodetomacro#1#2#3{%
+ \let\sseq@savedoptioncode@store\sseq@savedoptioncode
+ \let\sseq@savedoptioncode#1%
+ \sseq@addstylecodetooptions{#2}{#3}%
+ \let#1\sseq@savedoptioncode
+ \let\sseq@savedoptioncode\sseq@savedoptioncode@store
+}
+
+\def\sseq@newsseqstyle#1{%
+ \sseq@setmacronospaces\sseq@tempcmd{sseq@#1style}%
+ \edef\sseq@tempcmdb{\csname\@xp\sseq@macroname\sseq@tempcmd @page\endcsname}%
+ \sseq@setmacronospaces\sseq@tempcmdc{sseq@the#1style}%
+ \@xp\edef\sseq@tempcmdc{\@nx\the\@xp\@nx\sseq@tempcmd\@nx\the\sseq@tempcmdb}%
+ \@xp\newtoks\sseq@tempcmd
+ \@xp\newtoks\sseq@tempcmdb
+ \sseq@x@addto@macro\sseq@stylelist{\sseq@tempcmd{\@nx\the\sseq@tempcmd}}%
+ \sseq@x@addto@macro\sseq@clearchangestyles{\sseq@tempcmdb{}}%
+ \sseq@set@newstyle{%
+ #1s/.ecode={%
+ \@nx\sseq@addstylecodetotoks{\sseq@tempcmd}{\sseq@temppath}{##1}
+ \@nx\ifsseq@inprogress
+ \@nx\sseq@savedpaths@xadd{\@nx\sseq@style@object{\sseq@tempcmd{\@nx\the\sseq@tempcmd}}}%
+ \@nx\fi
+ },%
+ change #1s/.ecode={%
+ \@nx\ifsseq@ispageenv\@nx\else\@nx\sseq@error@nn{change-style-data}{#1}{##1}\@nx\fi
+ \@nx\ifsseq@hasname\@nx\else\@nx\sseq@error@nn{change-style-standalone}{#1}{##1}\@nx\fi
+ \@nx\sseq@addstylecodetotoks{\sseq@tempcmdb}{\sseq@temppath}{##1}
+ }
+ }%
+}
+
+
+\newtoks\sseq@sseqstyle
+\newtoks\sseq@sseqstyle@page
+\def\sseq@thesseqstyle{\the\sseq@sseqstyle\the\sseq@sseqstyle@page}
+
+% sseqs has to be handled separately, because it must decide whether an option is a global option or not
+% and handle them at different times. This makes the code a little trickier.
+\def\sseq@sseqstyle@globalpart{}
+\sseq@g@addto@macro\sseq@stylelist{\sseq@sseqstyle{\the\sseq@sseqstyle}}%
+\sseq@g@addto@macro\sseq@clearchangestyles{\sseq@sseqstyle@page{}}%
+\sseq@set@newstyle{
+ sseqs/.code={%
+ % This will get called on each key that isn't a defined global option. Then we add it to \sseq@sseqstyle to be applied
+ % locally to absolutely everything.
+ \def\sseq@addstylecodetooptions@unknown{%
+ \let\sseq@sseqstyle@globalpart\sseq@savedoptioncode
+ \edef\sseq@savedoptioncode{\the\sseq@sseqstyle}%
+ \sseq@keys@unknown
+ \sseq@sseqstyle\@xp{\sseq@savedoptioncode}%
+ \let\sseq@savedoptioncode\sseq@sseqstyle@globalpart
+ }%
+ \sseq@addstylecodetomacro\sseq@sseqstyle@globalpart{/sseqpages/global}{#1}%
+ \ifsseq@inprogress
+ \sseq@savedpaths@xadd{\@nx\sseq@style@object{\sseq@sseqstyle{\the\sseq@sseqstyle}}}%
+ \fi
+ % Restore hook
+ \let\sseq@addstylecodetooptions@unknown\sseq@keys@unknown
+ },%
+ % It's not clear to me that "change sseqs" should even exist as an option.
+ change sseqs/.code={%
+ \ifsseq@ispageenv\else\sseq@error@nn{change-style-data}{sseq}{#1}\fi
+ \ifsseq@hasname\else\sseq@error@nn{change-style-standalone}{sseq}{#1}\fi
+ \sseq@addstylecodetotoks{\sseq@sseqstyle@page}{\sseq@temppath}{#1}%
+ }
+}
+
+
+% sseq needs special handling, so is done by hand above.
+%\sseq@newstyles{/sseqpages/}{sseq}% DON'T make this /global/default! Bad things will happen.
+\sseq@newstyles{/sseqpages/label,/sseqpages}{edge, label, edge label, differential label, struct line label}
+\sseq@newstyles{/sseqpages/class,/sseqpages}{class, permanent cycle, transient cycle, this page cycle}
+\sseq@newstyles{/sseqpages/differential,/sseqpages}{differential}
+\sseq@newstyles{/sseqpages/struct line,/sseqpages}{struct line, this page struct line}
+\sseq@newstyles{/sseqpages/class/label}{class label, inner class label, outer class label}
+\sseq@newstyles{/sseqpages/class/label/pin}{pin}
+\sseq@newstyles{/sseqpages/tikz primitives}{tikz primitive}
+\sseq@newstyles{/sseqpages/fit}{circle class}
+
+
+\sseq@set@newstyle{sseq/.style={sseqs={#1}},change sseq/.style={change sseqs={#1}},
+ classes/.style={classs={#1}},change classes/.style={change classs={#1}},
+ circle classes/.style={circle classs={#1}},change circle classes/.style={change circle classs={#1}},
+}% "class" has a nonstandard plural
+\sseq@set@newstyle{
+ cycles/.code={\pgfkeysalso{classes={#1}}},
+ permanent classes/.code={\pgfkeysalso{permanent cycles={#1}}},
+ transient classes/.code={\pgfkeysalso{transient cycles={#1}}},
+ this page classes/.code={\pgfkeysalso{this page cycles={#1}}},
+}%
+
+\def\sseq@newplotstyle#1{
+ \sseq@setmacronospaces\sseq@tempcmd{sseq@#1style}
+ \sseq@setmacronospaces\sseq@tempcmdb{sseq@#1style@default}
+ \sseq@eval{\@nx\sseq@addtostorelist\@xp\@nx\sseq@tempcmd{\@xp\@nx\sseq@tempcmdb}}
+ \@xp\def\sseq@tempcmdb{}
+ \pgfqkeys{/sseqpages/global}{%
+ #1 style/.ecode={
+ \@nx\sseq@addstylecodetomacro{\@xp\@nx\sseq@tempcmd}{/tikz}{##1}
+ }
+ }
+ % Only difference here is \sseq@tempcmdb -- which puts it in the default code -- instead of \sseq@tempcmd
+ \pgfqkeys{/sseqpages/global/default}{%
+ #1 style/.ecode={
+ \@nx\sseq@addstylecodetomacro{\@xp\@nx\sseq@tempcmdb}{/tikz}{##1}
+ }
+ }
+}
+
+
+\def\sseq@newplotstyles#1{\def\sseq@temppath{#1}\sseq@newplotstyles@#1,\sseq@nil}
+\def\sseq@newplotstyles@#1,{\sseq@newplotstyle{\sseq@trimleadingspaces#1}\@ifnextchar\sseq@nil{\@gobble}{\sseq@newplotstyles@}}
+\sseq@newplotstyles{x tick, y tick}
+
+
+%%
+%%
+%% Families (also called collections in code)
+%%
+%% These are supposed to make it easy to display / hide and change appearance of logically connected families of classes.
+%% In order to allow a set of options to be given that applies uniformly to all features, we separately apply the options in each of these bins.
+%%
+
+
+\def\sseq@featurelist{\\{class}\\{differential}\\{structline}\\{circleclass}\\{tikzprimitive}}
+\def\sseq@mapfeaturelist#1{\def\\##1{#1}\sseq@featurelist}
+
+\def\sseq@familylist{}
+\def\sseq@collections@featuretype{}
+\def\sseqnewfamily#1{%
+ % Make five bins associated to the new family, one for each feature type. Add them to storelist with empty defaults.
+ \sseq@mapfeaturelist{
+ \@xp\sseq@setmacronospaces\csname sseq@tempcmd@##1\endcsname{sseq@user@#1@##1@style}
+ \@xp\sseq@setmacronospaces\csname sseq@tempcmd@##1@default\endcsname{sseq@user@#1@##1@style@default}
+ \sseq@eval{\@nx\sseq@addtostorelist\@xptwo\@nx\csname sseq@tempcmd@##1\endcsname{\@xptwo\@nx\csname sseq@tempcmd@##1@default\endcsname}}
+ \@xptwo\def\csname sseq@user@#1@##1@style@default\endcsname{}
+ }
+ % This is for deciding what set of options to apply to a feature
+ \@xp\sseq@setnospaces\csname sseq@tempcmd\endcsname{sseq@user@#1}
+%
+ % A flag to decide whether to draw the family. Set/unset using "draw family" and "no family".
+ \@xp\sseq@addtostorelist\csname sseq@#1@maybedraw\endcsname{}
+ \makeatletter % the tikz people added an extra \scantokens into ecode...
+ \pgfqkeys{/sseqpages/global}{%
+ #1 style/.ecode={%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@class{/sseqpages/class,/sseqpages/collections/class}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@differential{/sseqpages/differential,/sseqpages/collections/differential}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@structline{/sseqpages/struct line,/sseqpages/collections/struct line}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@circleclass{/sseqpages/fit,/sseqpages/collections/fit}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@tikzprimitive{/sseqpages/tikz primitives,/sseqpages/collections/tikz primitives}{##1}%
+ },
+ draw #1/.ecode = {\def\@xp\@nx\csname sseq@#1@maybedraw\endcsname{\@nx\sseq@drawtrue}},
+ no #1/.ecode = {\def\@xp\@nx\csname sseq@#1@maybedraw\endcsname{\@nx\sseq@drawfalse}}
+ }%
+ \pgfqkeys{/sseqpages/global/default}{%
+ #1 style/.ecode={%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@class@default{/sseqpages/class}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@differential@default{/sseqpages/differential}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@structline@default{/sseqpages/struct line}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@circleclass@default{/sseqpages/fit}{##1}%
+ \@nx\sseq@addstylecodetomacro\@xp\@nx\sseq@tempcmd@tikzprimitive@default{/sseqpages/tikz primitives}{##1}%
+ },
+ draw #1/.ecode = {\def\@xp\@nx\csname sseq@#1@maybedraw@default\endcsname{\@nx\sseq@drawtrue}},
+ no #1/.ecode = {\def\@xp\@nx\csname sseq@#1@maybedraw@default\endcsname{\@nx\sseq@drawfalse}}
+ }%
+%
+ \pgfqkeys{/sseqpages}{
+ #1/.ecode={
+ \@nx\sseq@d@addto@macro\@nx\sseq@familylist{\@nx\csname sseq@#1@maybedraw\endcsname}
+ \@nx\sseq@options@secondpass{
+ \unexpanded\@xp{\@xp\csname\sseq@tempcmd @\sseq@collections@featuretype @style\endcsname}
+ }
+ }
+ }
+}
+
+
+
+
+\def\sseq@collections@classlabels@hook{}
+\def\sseq@collections@innerclasslabels@hook{}
+\def\sseq@collections@outerclasslabels@hook{}
+\def\sseq@collections@pins@hook{}
+
+\def\sseq@collections@labels@hook{}
+\def\sseq@collections@edgelabels@hook{}
+\def\sseq@collections@differentiallabels@hook{}
+\def\sseq@collections@structlinelabels@hook{}
+
+\def\sseq@collections@setempty#1{\sseq@collections@setempty@#1,\sseq@nil}
+\def\sseq@collections@setempty@#1,{
+ \pgfqkeys{/sseqpages/collections}{
+ class/#1/.code={},
+ differential/#1/.code={},
+ struct line/#1/.code={},
+ fit/#1/.code={},
+ tikz primitives/#1/.code={}
+ }
+ \@ifnextchar\sseq@nil{\@gobble}{\sseq@collections@setempty@}
+}
+
+\sseq@collections@setempty{%
+ classes, cycles, permanent classes, permanent cycles, transient classes, transient cycles, this page classes, this page cycles,
+ edges, differentials,struct lines, this page struct lines,circleclasses, tikz primitives,
+ labels, edge labels, differential labels, struct line labels,
+ class labels, inner class labels, outer class labels,pins
+}
+
+% #1 -- path
+% #2 -- hook name
+% #3 -- code
+\def\sseq@collections@addtohook#1#2#3{
+ \sseq@keys@do{
+ \let\sseq@savedoptioncode@store\sseq@savedoptioncode\let\sseq@savedoptioncode\empty
+ \pgfqkeys{#1}{#3}
+ \edef\sseq@savedoptioncode{\unexpanded\@xp{\sseq@savedoptioncode@store}\def\@nx#2{\unexpanded\@xp{\sseq@savedoptioncode}}}
+ }
+}
+
+\pgfqkeys{/sseqpages/collections}{
+ class/classes/.style={/sseqpages/class/.cd,#1},
+ class/cycles/.style={/sseqpages/class/.cd,#1},
+ class/permanent classes/.code={\ifsseq@permanentcycle\pgfkeysalso{/sseqpages/class/.cd,#1}\fi},
+ class/permanent cycles/.code={\ifsseq@permanentcycle\pgfkeysalso{/sseqpages/class/.cd,#1}\fi},
+ class/transient classes/.code={\ifsseq@permanentcycle\else\pgfkeysalso{/sseqpages/class/.cd,#1}\fi},
+ class/transient cycles/.code={\ifsseq@permanentcycle\else\pgfkeysalso{/sseqpages/class/.cd,#1}\fi},
+ class/this page classes/.code={\ifsseq@thispage\pgfkeysalso{/sseqpages/class/.cd,#1}\fi},
+ class/this page cycles/.code={\ifsseq@thispage\pgfkeysalso{/sseqpages/class/.cd,#1}\fi},
+ differential/edges/.style={/sseqpages/differential/.cd,#1},
+ differential/differentials/.style={/sseqpages/differential/.cd,#1},
+ struct line/edges/.style={/sseqpages/struct line/.cd,#1},
+ struct line/struct lines/.style={/sseqpages/struct line/.cd,#1},
+ struct line/this page struct lines/.code={\ifsseq@thispage\pgfkeysalso{/sseqpages/struct line/.cd,#1}\fi},
+ fit/circleclasses/.style={/sseqpages/fit/.cd,#1},
+ tikz primitives/tikz primitives/.style={/sseqpages/tikz primitives/.cd,#1},
+% labels
+ class/class labels/.code/.expanded={\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/class/label}{\sseq@collections@classlabels@hook}{#1}}},
+ class/inner class labels/.code/.expanded={\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/class/label}{\sseq@collections@innerclasslabels@hook}{#1}}},
+ class/outer class labels/.code/.expanded={\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/class/label}{\sseq@collections@outerclasslabels@hook}{#1}}},
+ class/pins/.code/.expanded={\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/class/label/pin}{\sseq@collections@pins@hook}{#1}}},
+%
+ class/labels/.code/.expanded={\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/label}{\sseq@collections@labels@hook}{#1}}},
+ differential/labels/.code/.expanded={\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/label}{\sseq@collections@labels@hook}{#1}}},
+ struct line/labels/.code/.expanded={\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/label}{\sseq@collections@labels@hook}{#1}}},
+%
+ differential/edge labels/.code/.expanded=
+ {\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/label}{\sseq@collections@edgelabels@hook}{#1}}},
+ struct line/edge labels/.code/.expanded=
+ {\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/label}{\sseq@collections@edgelabels@hook}{#1}}},
+ differential/differential labels/.code/.expanded=
+ {\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/label}{\sseq@collections@differentiallabels@hook}{#1}}},
+ struct line/struct line labels/.code/.expanded=
+ {\unexpanded\@xp{\sseq@collections@addtohook{/sseqpages/label}{\sseq@collections@structlinelabels@hook}{#1}}},
+}
+
+
+
+
+%%% Global keys handlers and infrastructure
+
+\def\sseq@keys@lastpart{%
+ \edef\pgfkeyscurrentkey{\pgfkeyscurrentpath}%
+ \pgfkeys@split@path
+ \edef\sseq@temp{\pgfkeyscurrentname}%
+ \edef\sseq@temp@ii{\pgfkeyscurrentkey}%
+}
+
+\def\sseq@sanitize@intexpr#1#2{
+ \sseq@ifintexpr{#1}{
+ \edef\sseq@sanitize@output{\the\numexpr#1}
+ }{
+ \sseq@error@xx{invalid-intexpr}{\unexpanded{#2}}{#1}
+ \sseq@break
+ }
+}
+
+\def\sseq@sanitize@positiveintexpr#1#2{
+ \sseq@sanitize@intexpr{#1}{#2}
+ \ifnum\sseq@sanitize@output<1\relax
+ \sseq@error@xx{invalid-positive-intexpr}{\unexpanded{#2}}{#1}
+ \@xp\sseq@break
+ \fi
+}
+
+\def\sseq@sanitize@dimenexpr#1#2{
+ \sseq@ifpgfmathexpr{#1}{
+ \ifpgfmathunitsdeclared\else
+ \sseq@error@xx{invalid-dimenexpr}{\unexpanded{#2}}{#1}
+ \@xp\sseq@break
+ \fi
+ \edef\sseq@sanitize@output{\sseq@mathresult}
+ }{
+ \sseq@error@xx{invalid-dimenexpr}{\unexpanded{#2}}{#1}
+ \sseq@break
+ }
+}
+
+\def\sseq@sanitize@color#1#2{
+ \begingroup
+ \global\sseq@gtempiffalse
+ \def\c@lor@error##1{\global\sseq@gtempiftrue}
+ \color{#1}
+ \endgroup
+ \ifsseq@gtempif
+ \sseq@error@xx{invalid-color}{\unexpanded{#2}}{#1}
+ \@xp\sseq@break
+ \else
+ \def\sseq@sanitize@output{#1}
+ \fi
+}
+
+\pgfqkeys{/handlers}{
+ .sseq store in/.code 2 args={%
+ \sseq@addtostorelist#1{#2}%
+ \sseq@keys@lastpart
+ \pgfkeys{%
+ \sseq@temp@ii/.store in=#1,%
+ /sseqpages/global/default/\sseq@temp/.store in/.expand once=\csname \sseq@macroname#1@default\endcsname
+ }%
+ },
+ .sseq store in sanitize/.code n args={3}{%
+ \sseq@addtostorelist#1{#2}%
+ \sseq@keys@lastpart
+ \pgfkeys{%
+ \sseq@temp@ii/.code/.expanded={%
+ \unexpanded{#3{##1}}{\sseq@temp=\unexpanded{##1}}%
+ \unexpanded{\edef#1{\unexpanded\@xp{\sseq@sanitize@output}}}%
+ %\show\@nx#1
+ \sseq@breakpoint
+ },
+ \sseq@temp@ii/.value required,
+ /sseqpages/global/default/\sseq@temp/.code/.expanded={%
+ \unexpanded{#3{##1}}{\sseq@temp=\unexpanded{##1}}%
+ \edef\@xp\@nx\csname \sseq@macroname#1@default\endcsname\unexpanded{{\unexpanded\@xp{\sseq@sanitize@output}}}%
+ \sseq@breakpoint
+ },
+ /sseqpages/global/default/\sseq@temp/.value required
+ }%
+
+ },
+ .sseq store int in/.code 2 args={
+ \sseq@keys@lastpart
+ \pgfkeysalso{%
+ \sseq@temp@ii/.sseq store in sanitize={#1}{#2}\sseq@sanitize@intexpr
+ }
+ },
+ .sseq store positive int in/.code 2 args={
+ \sseq@keys@lastpart
+ \pgfkeysalso{%
+ \sseq@temp@ii/.sseq store in sanitize={#1}{#2}\sseq@sanitize@positiveintexpr
+ }
+ },
+ .sseq store dimen in/.code 2 args={
+ \sseq@keys@lastpart
+ \pgfkeysalso{%
+ \sseq@temp@ii/.sseq store in sanitize={#1}{#2}\sseq@sanitize@dimenexpr
+ }
+ },
+ .sseq append to style/.code 2 args={%
+ \sseq@addkeytostorelist{#1}{\pgfkeysalso{#2}}%
+ \sseq@keys@lastpart
+ \pgfkeys{%
+ \sseq@temp@ii/.style={#1/.append style={##1}},%
+ /sseqpages/global/default/\sseq@temp/.ecode={%
+ \@nx\apptocmd\@xp\@nx\csname pgfk@#1/.@cmd@default\endcsname{\@nx\pgfkeysalso{##1}}{}{\@nx\sseq@error{this-shouldnt-happen}}%
+ \global\let\@xp\@nx\csname pgfk@#1/.@cmd@default\endcsname\@xp\@nx\csname pgfk@#1/.@cmd@default\endcsname
+ }%
+ }%
+ },
+ .sseq is if/.code={%
+ \sseq@addiftostorelist@truedefault{#1}%
+ \sseq@keys@lastpart
+ \pgfkeys{%
+ \sseq@temp@ii/.is if=sseq@#1,%
+ /sseqpages/global/default/\sseq@temp/.code={\@xp\edef\csname sseq@#1@default\endcsname{\global\@xp\@nx\csname sseq@#1##1\endcsname}},%
+ /sseqpages/global/default/\sseq@temp/.default=true,%
+ }%
+ },
+ .sseq is if false/.code={%
+ \sseq@keys@lastpart
+ \pgfkeys{%
+ /sseqpages/global/\sseq@temp/.code/.expanded={\@xp\@nx\csname sseq@#1false\endcsname},
+ /sseqpages/global/\sseq@temp/.value forbidden,
+ % value forbidden and ecode don't work correctly together so we have to use .code/.expanded .
+ % I made a thread here: https://sourceforge.net/p/pgf/discussion/477362/thread/3e75d813/
+ /sseqpages/global/default/\sseq@temp/.code/.expanded={\def\@xp\@nx\csname sseq@#1@default\endcsname{\global\@xp\@nx\csname sseq@#1false\endcsname}},
+ /sseqpages/global/default/\sseq@temp/.value forbidden,
+ }%
+ },
+ .sseq default code/.code={%
+ \sseq@keys@lastpart
+ \pgfkeys{/sseqpages/global/default/\sseq@temp/.code={#1}}%
+ },
+ .sseq default code 2 args/.code={%
+ \sseq@keys@lastpart
+ \pgfkeys{/sseqpages/global/default/\sseq@temp/.code 2 args={#1}}%
+ },
+ .sseq default error/.code={%
+ \sseq@keys@lastpart
+ \pgfkeys{/sseqpages/global/default/\sseq@temp/.ecode={\@nx\sseq@error@n{option-no-default-allowed}{\sseq@temp}}}%
+ },
+ .sseq x y alias/.code={%
+ \sseq@keys@lastpart
+ \ifx\pgfkeysnovalue#1%
+ \edef\sseq@tempb##1{##1 \sseq@temp}%
+ \else
+ \def\sseq@tempb##1{#1}%
+ \sseq@usedparam\sseq@tempb
+ \fi
+ \pgfkeys{%
+ /sseqpages/global/\sseq@temp/.code/.expanded={\@nx\pgfkeysalso{\sseq@tempb{x}=\unexpanded{{##1}},\sseq@tempb{y}=\unexpanded{{##1}}}},%
+ /sseqpages/global/default/\sseq@temp/.code/.expanded={\@nx\pgfkeysalso{\sseq@tempb{x}=\unexpanded{{##1}},\sseq@tempb{y}=\unexpanded{{##1}}}}%
+ }%
+ }
+}
+
+\bgroup\lccode`*=`#\lowercase{\egroup
+ \def\sseq@usedparam#1{
+ \@xp\sseq@usedparam@\@xp#1\meaning#1*\@nil
+ }
+ \def\sseq@usedparam@#1#2->#3*#4\@nil{
+ \sseq@ifempty{#4}{
+ \@xp\def\@xp#1\@xp##\@xp1\@xp{\@xp##\@xp1\@xp\space#1{}}
+ }{}
+ }
+}
+
+\def\sseq@patchrepeat#1#2#3{%
+ \patchcmd#1{#2}{#3}{\sseq@patchrepeat{#1}{#2}{#3}}{}%
+}
+
+\def\sseq@stylehandler@processpath#1#2{%
+ \def\sseq@savedoptioncode{}%
+ \sseq@eval{\@nx\sseq@addstylecodetooptions{/sseqpages/#1}{\unexpanded\@xp{\sseq@keybody{*1}}}}%
+ \edef\sseq@savedoptioncode##1{\unexpanded\@xp{\sseq@savedoptioncode}}%
+ \sseq@patchrepeat\sseq@savedoptioncode{*1}{##1}%
+ \sseq@eval{\@nx\pgfqkeys{/sseqpages/#1}{\sseq@temp/.#2={\unexpanded\@xp{\sseq@savedoptioncode{##1}}}}}%
+}
+
+\def\sseq@add@tikzkey@to@options@forstylehander#1{\sseq@e@addto@options{#1}}
+\pgfqkeys{/handlers}{ % defines sseq style, etc
+ sseq @@ make style handler/.style 2 args={%
+ .sseq #1/.code={%
+ \def\sseq@keybody####1{##1}%
+ \sseq@keys@lastpart
+ \let\sseq@savedoptioncode@store\sseq@savedoptioncode
+ \def\sseq@keys@unknown@error{}%
+ \let\sseq@add@tikzkey@to@options\sseq@add@tikzkey@to@options@forstylehander
+%
+ \sseq@stylehandler@processpath{scope}{#2}%
+ \sseq@stylehandler@processpath{class}{#2}%
+ \sseq@stylehandler@processpath{differential}{#2}%
+ \sseq@stylehandler@processpath{struct line}{#2}%
+ \sseq@stylehandler@processpath{circle classes}{#2}%
+ \sseq@stylehandler@processpath{tikz primitives}{#2}%
+%
+ \let\sseq@savedoptioncode\sseq@savedoptioncode@store
+ \let\sseq@addstylecodetooptions@unknown\sseq@keys@unknown
+ \let\sseq@keys@unknown@error\sseq@keys@unknown@error@normal
+ \let\sseq@add@tikzkey@to@options\sseq@e@addto@options
+ }%
+ },%
+ sseq @@ make code handler/.style={%
+ .sseq #1/.code={%
+ \sseq@keys@lastpart
+ \pgfkeys{
+ /sseqpages/class/\sseq@temp/.#1={##1},%
+ /sseqpages/differential/\sseq@temp/.#1={##1},%
+ /sseqpages/struct line/\sseq@temp/.#1={##1}%
+ }%
+ }%
+ },
+%
+ sseq @@ make style handler={style}{code},
+ sseq @@ make style handler={prefix style}{prefix code},
+ sseq @@ make style handler={append style}{append code},
+ sseq @@ make code handler=code,
+ sseq @@ make code handler=prefix code,
+ sseq @@ make code handler=append code,
+% these just are the same as /.style, etc.
+ .global sseq style/.code={\pgfkeys{\pgfkeyscurrentpath/.code=\pgfkeysalso{#1}}},
+ .global sseq prefix style/.code={\pgfkeys{\pgfkeyscurrentpath/.add code={\pgfkeysalso{#1}}{}}},
+ .global sseq append style/.code={\pgfkeys{\pgfkeyscurrentpath/.add code={}{\pgfkeysalso{#1}}}},
+%
+%
+ .sseq grading/.code 2 args={%
+ \sseq@keys@lastpart
+ \pgfkeys{%
+ /sseqpages/global/\sseq@temp/.estyle={\unexpanded{degree={#1}{#2}}},%I'm not really sure why these need to be estyle and \unexpanded but it does...
+ /sseqpages/global/default/\sseq@temp/.estyle={\unexpanded{degree={#1}{#2}}},%
+ /sseqpages/\sseq@temp/.sseq @ global only
+ }%
+ },
+ Adams grading/.sseq grading={-1}{#1},
+ homological Serre grading/.sseq grading={-#1}{#1-1},
+ cohomological Serre grading/.sseq grading={#1}{1-#1},
+}
+
+%%% Define global keys setter
+% Most keys are run twice -- once in the "/sseqpages/global" directory and once in the "/sseqpages/global/default" directory
+% The default "default" behavior is to add the option to the "sseq" style.
+% Keys prefixed by a tilde or using an "ignored" handler are only run in the "/sseqpages/global directory".
+\gdef\sseq@globalkeys#1{%
+ \let\sseq@storetilde~%
+ \def~{}%
+ \pgfqkeys{/sseqpages/global}{#1}% run keys in global directory
+ \sseq@globalkeys@#1,\sseq@nil % handle defaults
+ \let~\sseq@storetilde
+}
+
+\def\sseq@globalkeys@#1,{%
+ \sseq@tempiftrue
+ \sseq@keys@removehandler{#1}% this sets \sseq@tempif to be false if it has an ignored handler
+ % It also sets \sseq@temp to be the key.
+ \ifsseq@tempif % If not ignored handler
+ \pgfkeys{/sseqpages/\sseq@temp/.sseq @ global only}%
+ % Check if no previous default behavior is defined, and if not, define it to pass key to sseqs.
+ \pgfkeysifdefined{/sseqpages/global/default/\sseq@temp/.@cmd}{}{%
+ \pgfkeys{/sseqpages/global/default/\sseq@temp/.ecode={\@nx\pgfkeysalso{sseqs={\sseq@temp}}}}%
+ }%
+ \fi
+ \sseq@globalkeys@next
+}
+
+\def\sseq@globalkeys@eatentry#1,{%
+ \sseq@globalkeys@next
+}
+
+% iterate over keys, throwing away empty keys and ones that start with ~.
+\def\sseq@globalkeys@next{%
+ \@ifnextchar\sseq@nil{\@gobble}{%
+ \@ifnextchar~{\sseq@globalkeys@eatentry}{%
+ \@ifnextchar,{\sseq@globalkeys@eatentry}{%
+ \sseq@globalkeys@
+ }%
+ }%
+ }%
+}
+
+% Handlers to ignore for
+\def\sseq@keys@ignorehandlers{%
+ \\{value forbidden}\\{value required}\\{default}%\\{sseq store in}\\{sseq is if}%
+ \\{sseq default code}\\{sseq default code 2 args}%
+}
+\def\sseq@keys@removehandler#1{\sseq@keys@removehandler@#1=\sseq@nil}
+\def\sseq@keys@removehandler@#1/.#2=#3\sseq@nil{%
+ \bgroup
+ \def\sseq@temp{#2}%
+ \def\\##1{\def\sseq@tempii{##1}\ifx\sseq@tempii\sseq@temp \global\sseq@tempiffalse\let\\\@gobble\fi}%
+ \sseq@keys@ignorehandlers
+ \egroup
+ \def\sseq@temp{#1}%
+}
+
+
+%%% Define global keys
+\def\sseq@currentoptionpath{default}
+\pgfkeys{
+ % \sseq@currentoptionpath is set to \sseq@thename in \sseqdata, then "temp" in \sseqpage
+ /sseqpages/global/.unknown/.code={%
+ \let\sseq@tempa\pgfkeyscurrentname
+ \let\sseq@tempb\pgfkeyscurrentvalue
+ \sseq@eval{\@nx\pgfqkeys{/sseqpages/global}{/sseqpages/userstyles/\sseq@tempa/.try={\unexpanded\@xp{\sseq@tempb}}}}
+ \ifpgfkeyssuccess\else
+ \pgfkeysifdefined{/tikz/\pgfkeyscurrentname/.@cmd}{\@firstofone}{\pgfkeysifdefined{/tikz/\pgfkeyscurrentname}{\@firstofone}{%
+ \sseq@error{unknown-global}\@gobble
+ }}{%
+ \pgfkeysalso{{\sseq@currentoptionpath} options/.append code/.expand twice={\@xp\@xp\@xp\tikzset\@xp\@xp\@xp{\@xp\sseq@tempa\@xp=\@xp{\sseq@tempb}}}}%
+ \sseq@eval{%
+ \global\let\@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
+ \@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
+ }%
+ }%
+ \fi
+ },
+ /sseqpages/global/default/.unknown/.code={%
+ \sseq@passoptionto{/sseqpages/global}%
+ },
+ /sseqpages/global/{default} options/.code={},
+ /sseqpages/global/name only/.unknown/.code={},
+ /sseqpages/global/sseqstyle/.unknown/.code={}
+}
+
+\pgfqkeys{/sseqpages/global/name only}{
+ name/.code={\def\sseq@thename{#1}\sseq@hasnametrue},
+ name/.value required,
+ keep changes/.is if=sseq@keepchanges,
+ update existing/.code={\ifsseq@ispageenv\sseq@error{page-update-existing}\fi\sseq@updateexistingtrue},
+ update existing/.sseq default code={\sseq@updateexistingtrue}
+}
+
+\sseq@addtostorelist\sseq@grid{\relax}
+\sseq@addiftostorelist{hasdegree}
+\let\sseq@maybemathswitch\relax
+\sseq@globalkeys{%
+ name/.code={},
+ name/.sseq default error,
+ ~page/.code={
+ \ifsseq@hasname
+ \sseq@getnumrange\sseq@thepage{#1}
+ \sseq@thepagecount=\sseq@thepage\relax
+ \let\page\sseq@thepage
+ \edef\sseq@thepagemm{\the\numexpr\sseq@thepagecount-1\relax}
+ \ifx\sseq@thepagemax\sseq@infinity
+ \edef\sseq@thepagemaxpp{\the\numexpr\sseq@thepagecount+1\relax}
+ \else
+ \ifnum\sseq@thepagemax=\z@
+ \let\sseq@thepagemaxpp\sseq@infinity
+ \else
+ \edef\sseq@thepagemaxpp{\the\numexpr\sseq@thepagemax+1\relax}
+ \fi
+ \fi
+ \else
+ \sseq@error{page-no-name}
+ \fi
+ },
+ ~page/.sseq default error,% implement page default?
+ degree/.code 2 args={\def\sseq@targetx##1{#1}\def\sseq@targety##1{#2}},
+ degree/.sseq default code 2 args={\def\sseq@targetx@default##1{#1}\def\sseq@targety@default##1{#2}},
+ strict degree/.sseq is if=strictdegree,
+ lax degree/.sseq is if false=strictdegree,
+ update existing/.code={}, % processed with "name" key and "keep changes" key in /sseqpages/global/name only
+ keep changes/.code={%
+ \ifsseq@hasname\else\sseq@error{keep-changes-no-name}\fi
+ \ifsseq@ispageenv\else\sseq@error{keep-changes-sseqdata}\fi
+ },
+ grid/.code={\ifcsname sseq@grid@#1\endcsname\@xp\let\@xp\sseq@grid\csname sseq@grid@#1\endcsname\else\sseq@error@n{unknown-grid}{#1}\fi},
+ grid/.sseq default code={\ifcsname sseq@grid@#1\endcsname\@xp\let\@xp\sseq@grid@default\csname sseq@grid@#1\endcsname\else\sseq@error@n{unknown-grid}{#1}\fi},
+ grid color/.sseq store in sanitize=\sseq@gridcolor{gray}\sseq@sanitize@color,
+ grid step/.sseq x y alias,
+ grid step/.value required,
+ x grid step/.sseq store positive int in=\sseq@xgridstep{1},
+ y grid step/.sseq store positive int in=\sseq@ygridstep{1},
+ math nodes/.sseq is if=mathnodes, % TODO: make this locally toggleable
+ custom clip/.sseq store in=\sseq@customclip{},
+ clip/.sseq is if=clip,
+ draw differentials/.sseq is if=drawdifferentials,
+ no differentials/.sseq is if false={drawdifferentials},
+ draw struct lines/.sseq is if=drawstructlines,
+ no struct lines/.sseq is if false={drawstructlines},
+ draw orphan edges/.sseq is if=draworphanedges,
+ no orphan edges/.sseq is if false={draworphanedges},
+ class pattern/.sseq store in=\sseq@classpattern{standard},
+ class pattern/.add code={\ifcsname sseq@#1xoffset1/1\endcsname\else\sseq@error{unknown-class-pattern}\@xp\sseq@break\fi}{\sseq@breakpoint},
+ class placement transform/.code={%
+ \bgroup
+ \let\tikz@transform\pgfutil@empty
+ \pgfqkeys{/sseqpages/class placement}{#1}%
+ \global\let\sseq@classplacementtransform\tikz@transform
+ \egroup
+ },
+ class placement transform/.sseq default code={%
+ \bgroup
+ \let\tikz@transform\pgfutil@empty
+ \pgfqkeys{/sseqpages/class placement}{#1}%
+ \global\let\sseq@classplacementtransform@default\tikz@transform
+ \egroup
+ },
+ class placement transform/.value required,
+ add class placement transform/.code={%
+ \bgroup
+ \let\tikz@transform\pgfutil@empty
+ \pgfqkeys{/sseqpages/class placement}{#1}%
+ \sseq@x@addto@macro\sseq@classplacementtransform{\unexpanded\@xp\tikz@transform}
+ \egroup
+ },
+ add class placement transform/.sseq default code={%
+ \bgroup
+ \let\tikz@transform\pgfutil@empty
+ \pgfqkeys{/sseqpages/class placement}{#1}%
+ \sseq@x@addto@macro\sseq@classplacementtransform@default{\unexpanded\@xp\tikz@transform}
+ \egroup
+ },
+ add class placement transform/.value required,
+}
+
+\sseq@mathnodestrue
+
+\sseq@addtostorelist\sseq@targetx{}\sseq@addtostorelist\sseq@targety{}
+\sseq@addtostorelist\sseq@xtickstep{1}\sseq@addtostorelist\sseq@ytickstep{1}
+\sseq@addtostorelist\sseq@classplacementtransform{}
+
+
+
+%%% Range keys and commands
+\sseq@globalkeys{%
+ x range/.code 2 args={\sseq@xrange{#1}{#2}},
+ x range/.sseq default code 2 args={\sseq@xrange@default{#1}{#2}},
+ y range/.code 2 args={\sseq@yrange{#1}{#2}},
+ y range/.sseq default code 2 args={\sseq@yrange@default{#1}{#2}},
+ xrange/.forward to=/sseqpages/global/x range,
+ yrange/.forward to=/sseqpages/global/y range
+}
+
+% These are set up so that if the user specifies no \xrange, the minimum position of any node can be calculated on the fly.
+\@xp\sseq@addtostorelist\@xp\sseq@xmin\@xp{\sseq@infinity}
+\@xp\sseq@addtostorelist\@xp\sseq@ymin\@xp{\sseq@infinity}
+\@xp\sseq@addtostorelist\@xp\sseq@xmax\@xp{\@xp-\sseq@infinity}
+\@xp\sseq@addtostorelist\@xp\sseq@ymax\@xp{\@xp-\sseq@infinity}
+\sseq@addtostorelist\xmin{\protect\sseq@xmin}
+\sseq@addtostorelist\ymin{\protect\sseq@ymin}
+\sseq@addtostorelist\xmax{\protect\sseq@xmax}
+\sseq@addtostorelist\ymax{\protect\sseq@ymax}
+% These are used to decide whether to add a certain node to savedpaths.
+% In general the check is whether xmin<=xcoord<=xmax, but since Latex has no <=, set xminmm=xmin-1, xmaxpp=xmax+1.
+% If the user doesn't specify a range, all nodes should be rendered
+% To ensure that xminmm<xccord<xminpp in that case, set the default to xminmm=-\infty, xmaxpp=+\infty.
+\@xp\sseq@addtostorelist\@xp\sseq@xminmm\@xp{\@xp-\sseq@infinity}
+\@xp\sseq@addtostorelist\@xp\sseq@yminmm\@xp{\@xp-\sseq@infinity}
+\@xp\sseq@addtostorelist\@xp\sseq@xmaxpp\@xp{\sseq@infinity}
+\@xp\sseq@addtostorelist\@xp\sseq@ymaxpp\@xp{\sseq@infinity}
+
+\sseq@addiftostorelist{specifiedxrange}
+\sseq@addiftostorelist{specifiedyrange}
+% We used to \let\xmin\sseq@xmin in here, but that's a bad idea. Hopefully things work now...
+\def\sseq@xrange#1#2{%
+ \global\let\sseq@xminmax\@gobbletwo % Don't need to calculate range of nodes if user specifies it
+ \global\sseq@specifiedxrangetrue
+ \sseq@sanitize@intexpr{#1}{x range={#1}{#2}}
+ \sseq@sanitize@intexpr{#2}{x range={#1}{#2}}
+ \xdef\sseq@xmin{\the\numexpr#1}%
+ \xdef\sseq@xmax{\the\numexpr#2}%
+ % Need to know decremented \xmin and incremented \xmax to decide which nodes to print
+ \sseq@tempcount=#1 \advance\sseq@tempcount-1\xdef\sseq@xminmm{\the\sseq@tempcount}%
+ \sseq@tempcount=#2 \advance\sseq@tempcount1\xdef\sseq@xmaxpp{\the\sseq@tempcount}%
+ \sseq@breakpoint
+}
+
+\def\sseq@yrange#1#2{%
+ \global\let\sseq@yminmax\@gobbletwo %
+ \sseq@sanitize@intexpr{#1}{y range={#1}{#2}}
+ \sseq@sanitize@intexpr{#2}{y range={#1}{#2}}
+ \global\sseq@specifiedyrangetrue
+ \xdef\sseq@ymin{\the\numexpr#1}%
+ \xdef\sseq@ymax{\the\numexpr#2}%
+ \sseq@tempcount=#1 \advance\sseq@tempcount-1\xdef\sseq@yminmm{\the\sseq@tempcount}%
+ \sseq@tempcount=#2 \advance\sseq@tempcount1\xdef\sseq@ymaxpp{\the\sseq@tempcount}%
+}
+
+\def\sseq@xrange@default#1#2{%
+ \global\let\sseq@xminmax\@gobbletwo % Don't need to calculate range of nodes if user specifies it
+ \gdef\sseq@xmin@default{#1}%
+ \gdef\sseq@xmax@default{#2}%
+ % Need to know decremented \xmin and incremented \xmax to decide which nodes to print
+ \sseq@tempcount=#1 \advance\sseq@tempcount-1\xdef\sseq@xminmm@default{\the\sseq@tempcount}%
+ \sseq@tempcount=#2 \advance\sseq@tempcount1\xdef\sseq@xmaxpp@default{\the\sseq@tempcount}%
+}
+\def\sseq@yrange@default#1#2{%
+ \global\let\sseq@yminmax\@gobbletwo %
+ \gdef\sseq@ymin@default{#1}%
+ \gdef\sseq@ymax@default{#2}%
+ \sseq@tempcount=#1 \advance\sseq@tempcount-1\xdef\sseq@yminmm@default{\the\sseq@tempcount}%
+ \sseq@tempcount=#2 \advance\sseq@tempcount1\xdef\sseq@ymaxpp@default{\the\sseq@tempcount}%
+}
+
+% If #1 is less than \xmin or greater than \xmax, update \xmin or \xmax appropriately
+% Gets set to \@gobble if user specifies range
+\def\sseq@xminmax@active#1#2{%
+ \ifnum#1<\sseq@xmin\relax
+ \ifx\sseq@yminmax\@gobbletwo
+ \ifnum#2>\sseq@yminmm\relax
+ \ifnum#2<\sseq@ymaxpp\relax
+ \xdef\sseq@xmin{#1}%
+ \fi
+ \fi
+ \else
+ \xdef\sseq@xmin{#1}%
+ \fi
+ \fi
+ \ifnum#1>\sseq@xmax\relax
+ \ifx\sseq@yminmax\@gobbletwo
+ \ifnum#2>\sseq@yminmm\relax
+ \ifnum#2<\sseq@ymaxpp\relax
+ \xdef\sseq@xmax{#1}%
+ \fi
+ \fi
+ \else
+ \xdef\sseq@xmax{#1}%
+ \fi
+ \fi
+}
+
+\def\sseq@yminmax@active#1#2{%
+ \ifnum#2<\sseq@ymin\relax
+ \ifx\sseq@xminmax\@gobbletwo
+ \ifnum#1>\sseq@xminmm\relax
+ \ifnum#1<\sseq@xmaxpp\relax
+ \xdef\sseq@ymin{#2}%
+ \fi
+ \fi
+ \else
+ \xdef\sseq@ymin{#2}%
+ \fi
+ \fi
+ \ifnum#2>\sseq@ymax\relax
+ \ifx\sseq@xminmax\@gobbletwo
+ \ifnum#1>\sseq@xminmm\relax
+ \ifnum#1<\sseq@xmaxpp\relax
+ \xdef\sseq@ymax{#2}%
+ \fi
+ \fi
+ \else
+ \xdef\sseq@ymax{#2}%
+ \fi
+ \fi
+}
+
+%%% Axes and Layout options
+\sseq@addtostorelist{\sseq@xtickfn}{} % These should initially be the identity macro, but addtostorelist doesn't accept functions as default
+\sseq@addtostorelist{\sseq@ytickfn}{} % so the default is instated in begin{sseqdata} / begin{sseqpicture}.
+
+\sseq@globalkeys{%
+ title/.sseq store in=\sseq@title{},
+ title style/.sseq append to style={/sseqpages/global/every title}{at={(0.5*\xmin+0.5*\xmax,\ymax)}},
+ draw title/.sseq is if=drawtitle,
+ no title/.code=\sseq@drawtitlefalse,
+%
+ x label/.sseq store in=\sseq@xaxislabel{},
+ y label/.sseq store in=\sseq@yaxislabel{},
+ x label style/.sseq append to style={/sseqpages/global/every x axis label}{at={(0.5*\xmin+0.5*\xmax,\ymin)}},
+ y label style/.sseq append to style={/sseqpages/global/every y axis label}{at={(\xmin ,0.5*\ymax+0.5*\ymin)}},
+ label style/.sseq x y alias,
+ draw x label/.sseq is if=drawxaxislabel,
+ draw y label/.sseq is if=drawyaxislabel,
+ no x label/.sseq is if false={drawxaxislabel},
+ no y label/.sseq is if false={drawyaxislabel},
+ no labels/.sseq x y alias=no #1 label,
+ draw labels/.sseq x y alias=draw #1 label,
+%
+ no x axis/.style={x axis type=none},
+ no y axis/.style={y axis type=none},
+ no axes/.style={axes type=none},
+ rotate labels/.sseq is if=rotatelabels,
+%
+ draw x ticks/.sseq is if=drawxaxisticks,
+ no x ticks/.sseq is if false=drawxaxisticks,
+ draw y ticks/.sseq is if=drawyaxisticks,
+ no y ticks/.sseq is if false=drawyaxisticks,
+ no ticks/.sseq x y alias=no #1 ticks,
+ no ticks/.value forbidden,
+ draw ticks/.sseq x y alias=draw #1 ticks,
+ draw ticks/.default=true,
+ tick step/.sseq x y alias,
+ tick step/.value required,
+ x tick step/.sseq store positive int in=\sseq@xtickstep{1},
+ y tick step/.sseq store positive int in=\sseq@ytickstep{1},
+ tick offset/.sseq x y alias,
+ tick offset/.value required,
+ x tick offset/.sseq store int in=\sseq@xtickstepoffset{0},
+ y tick offset/.sseq store int in=\sseq@ytickstepoffset{0},
+ major tick step/.sseq x y alias,
+ x major tick step/.sseq store int in=\sseq@xmajortickstep{0},
+ y major tick step/.sseq store int in=\sseq@ymajortickstep{0},
+ minor tick step/.sseq x y alias,
+ x minor tick step/.sseq store int in=\sseq@xminortickstep{0},
+ y minor tick step/.sseq store int in=\sseq@yminortickstep{0},
+ x tick handler/.code={\def\sseq@xtickfn##1{#1}},
+ x tick handler/.sseq default code={\def\sseq@xtickfn@default##1{#1}},
+ y tick handler/.code={\def\sseq@ytickfn##1{#1}},
+ y tick handler/.sseq default code={\def\sseq@ytickfn@default##1{#1}},
+ class label handler/.code = { % \long so that \ifx\sseq@classname@handler\@gobble compares true if this is empty (\@gobble is long...)
+ \long\def\sseq@classlabel@handler##1{#1}
+ \ifx\sseq@classlabel@handler\@gobble
+ \def\sseq@classlabel@handler##1{\def\result{##1}}
+ \else
+ \edef\sseq@tempa{\unexpanded\@xp{\sseq@classlabel@handler{}}}
+ \edef\sseq@tempb{\unexpanded\@xp{\sseq@classlabel@handler{blah}}}
+ \ifx\sseq@tempa\sseq@tempb
+ \long\def\sseq@classlabel@handler##1{#1{##1}}
+ \fi
+ \fi
+ },
+ class label handler/.sseq default code={
+ \long\def\sseq@classlabel@handler@default##1{#1}
+ \ifx\sseq@classlabel@handler@default\@gobble
+ \def\sseq@classlabel@handler@default##1{\def\result{##1}}
+ \else
+ \edef\sseq@tempa{\unexpanded\@xp{\sseq@classlabel@handler@default{}}}
+ \edef\sseq@tempb{\unexpanded\@xp{\sseq@classlabel@handler@default{blah}}}
+ \ifx\sseq@tempa\sseq@tempb
+ \long\def\sseq@classlabel@handler@default##1{#1{##1}}
+ \fi
+ \fi
+ },
+ class name handler/.code = { % \long so that \ifx\sseq@classname@handler\@gobble compares true if this is empty (\@gobble is long...)
+ \long\def\sseq@classname@handler##1{#1}
+ \ifx\sseq@classname@handler\@gobble
+ \def\sseq@classname@handler##1{\def\result{##1}}
+ \else
+ \edef\sseq@tempa{\unexpanded\@xp{\sseq@classname@handler{}}}
+ \edef\sseq@tempb{\unexpanded\@xp{\sseq@classname@handler{blah}}}
+ \ifx\sseq@tempa\sseq@tempb
+ \long\def\sseq@classname@handler##1{#1{##1}}
+ \fi
+ \fi
+ },
+ class name handler/.sseq default code={
+ \long\def\sseq@classname@handler@default##1{#1}
+ \ifx\sseq@classname@handler@default\@gobble
+ \def\sseq@classname@handler@default##1{\def\result{##1}}
+ \else
+ \edef\sseq@tempa{\unexpanded\@xp{\sseq@classname@handler@default{}}}
+ \edef\sseq@tempb{\unexpanded\@xp{\sseq@classname@handler@default{blah}}}
+ \ifx\sseq@tempa\sseq@tempb
+ \long\def\sseq@classname@handler@default##1{#1{##1}}
+ \fi
+ \fi
+ },
+ x tick style/.sseq store in=\sseq@xtickstyle{},
+ y tick style/.sseq store in=\sseq@ytickstyle{},
+ tick style/.sseq x y alias,
+%
+ axes type/.sseq x y alias=axis type,
+ axes type/.add code={\let\sseq@axistypesanitizer\sseq@axistypesanitizerb}{\let\sseq@axistypesanitizer\sseq@axistypesanitizera},
+ axes type/.value required,
+ x axis type/.sseq store in sanitize=\sseq@xaxistype{border}\sseq@axistypesanitizer,
+ x axis type/.value required,
+ y axis type/.sseq store in sanitize=\sseq@yaxistype{border}\sseq@axistypesanitizer,
+ y axis type/.value required,
+ x axis origin/.sseq store int in=\sseq@xaxisorigin@center@{0},
+ y axis origin/.sseq store int in=\sseq@yaxisorigin@center@{0},
+ axes origin/.sseq x y alias=axis origin,
+}
+
+\def\sseq@validaxestypesa{border, center, or none. The value frame only works with the 'axes type' key.}
+\def\sseq@validaxestypesb{border, center, frame, or none.}
+\let\sseq@validaxestypes\sseq@validaxestypesa
+
+\let\sseq@axistypekeya\@firstofone
+\def\sseq@axistypekeyb#1{axes type}
+\let\sseq@axistypekey\sseq@axistypekeya
+
+\def\sseq@uptoequal#1{\sseq@uptoequal@#1\sseq@nil}
+\def\sseq@uptoequal@#1=#2\sseq@nil{#1}
+\def\sseq@axistypesanitizerb#1#2{
+ \let\sseq@validaxestypes\sseq@validaxestypesb
+ \let\sseq@axistypekey\sseq@axistypekeyb
+ \@xp\ifx\csname sseq@leftgridpadding@y#1\endcsname\relax
+ \sseq@error@xx{invalid-axis-type}{#1}{\sseq@uptoequal{#2}}
+ \sseq@breakfi
+ \else
+ \def\sseq@sanitize@output{#1}
+ \fi
+ \let\sseq@validaxestypes\sseq@validaxestypesa
+ \let\sseq@axistypekey\sseq@axistypekeya
+}
+
+\def\sseq@axistype@frame{frame}
+\def\sseq@axistypesanitizera#1#2{
+ \def\temp{#1}
+ \ifx\sseq@axistype@frame\temp
+ \sseq@error@xx{invalid-axis-type}{#1}{\sseq@uptoequal{#2}}
+ \sseq@breakfi
+ \fi
+ \sseq@axistypesanitizerb{#1}{#2}
+}
+\let\sseq@axistypesanitizer\sseq@axistypesanitizera
+
+\pgfqkeys{/sseqpages}{%
+ class label handler/.code = { % \long so that \ifx\sseq@classlabel@handler\@gobble compares true if this is empty (\@gobble is long...)
+ \long\def\sseq@classlabel@handler##1{#1}
+ \ifx\sseq@classlabel@handler\@gobble
+ \def\sseq@classlabel@handler##1{\def\result{##1}}
+ \else
+ \edef\sseq@tempa{\unexpanded\@xp{\sseq@classlabel@handler{}}}
+ \edef\sseq@tempb{\unexpanded\@xp{\sseq@classlabel@handler{blah}}}
+ \ifx\sseq@tempa\sseq@tempb
+ \long\def\sseq@classlabel@handler##1{#1{##1}}
+ \fi
+ \fi
+ },
+ class name handler/.code = { % \long so that \ifx\sseq@classname@handler\@gobble compares true if this is empty (\@gobble is long...)
+ \long\def\sseq@classname@handler##1{#1}
+ \ifx\sseq@classname@handler\@gobble
+ \def\sseq@classname@handler##1{\def\result{##1}}
+ \else
+ \edef\sseq@tempa{\unexpanded\@xp{\sseq@classname@handler{}}}
+ \edef\sseq@tempb{\unexpanded\@xp{\sseq@classname@handler{blah}}}
+ \ifx\sseq@tempa\sseq@tempb
+ \long\def\sseq@classname@handler##1{#1{##1}}
+ \fi
+ \fi
+ }
+}
+
+\sseq@globalkeys{
+ axes gap/.sseq x y alias=axis gap,
+ axes gap/.value required,
+ x axis gap/.sseq store dimen in=\sseq@xaxisgap{0.5cm},
+ y axis gap/.sseq store dimen in=\sseq@yaxisgap{0.5cm},
+ tick gap/.sseq x y alias,
+ tick gap/.value required,
+ x tick gap/.sseq store dimen in=\sseq@xlabelgap{0.5cm},
+ y tick gap/.sseq store dimen in=\sseq@ylabelgap{0.5cm},
+ x axis tail/.sseq store dimen in=\sseq@xaxis@tail{0.9cm},
+ y axis tail/.sseq store dimen in=\sseq@yaxis@tail{0.9cm},
+ x axis extend start/.sseq store dimen in=\sseq@xaxis@start@extend{0.5cm},
+ y axis extend start/.sseq store dimen in=\sseq@yaxis@start@extend{0.5cm},
+ axes extend start/.sseq x y alias=axis extend start,
+ x axis extend end/.sseq store dimen in=\sseq@xaxis@end@extend{0.5cm},
+ y axis extend end/.sseq store dimen in=\sseq@yaxis@end@extend{0.5cm},
+ axes extend end/.sseq x y alias=axis extend end,
+ x axis clip padding/.sseq store dimen in=\sseq@xclip@axisgap{0.1cm},
+ y axis clip padding/.sseq store dimen in=\sseq@yclip@axisgap{0.1cm},
+ axes clip padding/.sseq x y alias=axis clip padding,
+ right clip padding/.sseq store dimen in=\sseq@clip@padding@right{0.1cm},
+ left clip padding/.sseq store dimen in=\sseq@clip@padding@left{0.1cm},
+ top clip padding/.sseq store dimen in=\sseq@clip@padding@top{0.1cm},
+ bottom clip padding/.sseq store dimen in=\sseq@clip@padding@bottom{0.1cm}
+}
+
+%%%
+%%% Coordinate transformations
+%%%
+
+%%% Global Coordinate Transformations
+\sseq@globaldetonetrue
+\sseq@addtostorelist\sseq@globaldetonetransform{}
+\sseq@addtostorelist\sseq@globalrotatetransform{}
+\sseq@addtostorelist\sseq@globalscaletransform{}
+
+\sseq@addtostorelist\sseq@xscale{1}
+\sseq@addtostorelist\sseq@yscale{1}
+
+\def\sseq@globaldetoneoption#1#2{%
+ \ifsseq@globaldetone\else
+ \sseq@error@n{det-one-after-scale}{#2}
+ \fi
+ \@xp\gdef\@xp\sseq@globaldetonetransform\@xp{\sseq@globaldetonetransform #1}%
+ #1
+}
+\def\sseq@globalscaleoption#1{%
+ \sseq@globaldetonefalse
+ \@ifundefined{sseq@globalscaletransform}{
+ \@xp\gdef\@xp\sseq@globalscaletransform@default\@xp{\sseq@globalscaletransform@default#1}%
+ }{
+ \@xp\gdef\@xp\sseq@globalscaletransform\@xp{\sseq@globalscaletransform#1}%
+ }
+}
+\pgfqkeys{/sseqpages/global}{%
+ x/.sseq @ illegal,
+ y/.sseq @ illegal,
+ z/.sseq @ illegal,
+ xshift/.sseq @ illegal as global,
+ yshift/.sseq @ illegal as global,
+ shift/.sseq @ illegal as global,
+ scale around/.sseq @ illegal as global,
+ rotate around/.sseq @ illegal as global,
+ rotate/.code={%
+ \@xp\gdef\@xp\sseq@globalrotatetransform\@xp{\sseq@globalrotatetransform\pgftransformrotate{#1}}%
+ \sseq@globaldetoneoption{\pgftransformrotate{#1}}{rotate}%
+ },
+ rotate/.value required,
+ xslant/.code={\sseq@globaldetoneoption{\pgftransformxslant{#1}}{xslant}},
+ xslant/.value required,
+ yslant/.code={\sseq@globaldetoneoption{\pgftransformyslant{#1}}{yslant}},
+ yslant/.value required,
+ xmirror/.code={\sseq@globaldetoneoption{\pgftransformxscale{-1}}{xmirror}},
+ xmirror/.value forbidden,
+ ymirror/.code={\sseq@globaldetoneoption{\pgftransformyscale{-1}}{ymirror}},
+ ymirror/.value forbidden,
+ mirror/.forward to=/sseqpages/global/xmirror,
+ mirror/.forward to=/sseqpages/global/ymirror,
+ xscale/.code={%
+ \sseq@ifpgfmathexpr{int(#1-1)}{}{
+ \sseq@error@nn{invalid-scale}{x}{#1}%
+ \sseq@break
+ }
+ \ifpgfmathunitsdeclared
+ \sseq@error@nn{unit-scale}{x}{#1}%
+ \sseq@break
+ \fi
+ \ifnum\sseq@mathresult<\z@
+ \sseq@error@nn{negative-scale}{x}{#1}%
+ \sseq@break
+ \fi
+ \sseq@globalscaleoption{\pgfsetxvec{\pgfpointxy{#1}{0}}}
+ \@ifundefined{sseq@xscale}{
+ \pgfmathparse{\sseq@xscale@default*#1}
+ \edef\sseq@xscale@default{\pgfmathresult}
+ }{
+ \pgfmathparse{\sseq@xscale*#1}
+ \edef\sseq@xscale{\pgfmathresult}
+ }
+ \sseq@breakpoint
+ },
+ xscale/.value required,
+ yscale/.code={%
+ \sseq@ifpgfmathexpr{int(#1-1)}{}{
+ \sseq@error@nn{invalid-scale}{y}{#1}%
+ \sseq@break
+ }
+ \ifpgfmathunitsdeclared
+ \sseq@error@nn{unit-scale}{y}{#1}%
+ \sseq@break
+ \fi
+ \ifnum\sseq@mathresult<\z@
+ \sseq@error@nn{negative-scale}{y}{#1}%
+ \sseq@break
+ \fi
+ \sseq@globalscaleoption{\pgfsetyvec{\pgfpointxy{0}{#1}}}
+ \@ifundefined{sseq@yscale}{
+ \pgfmathparse{\sseq@yscale@default*#1}
+ \edef\sseq@yscale@default{\pgfmathresult}
+ }{
+ \pgfmathparse{\sseq@yscale*#1}
+ \edef\sseq@yscale{\pgfmathresult}
+ }
+ \sseq@breakpoint
+ },
+ yscale/.value required,
+ scale/.sseq x y alias=#1scale,
+ scale/.value required
+}
+
+%%% Local Coordinate transformations
+
+\pgfqkeys{/sseqpages/class placement}{
+ x shift/.code={\sseq@error@nn{class-placement-shift}{x shift}{#1}},
+ y shift/.code={\sseq@error@nn{class-placement-shift}{y shift}{#1}},
+ shift/.code={\sseq@error@nn{class-placement-shift}{shift}{#1}}
+}
+
+%% setup for coordinate transformation keys
+\def\sseq@checktransform{\sseq@error@nn{illegal-transform}}
+\pgfqkeys{/sseqpages}{%
+ x/.code={\sseq@error@n{option-illegal}{#1}},
+ y/.code={\sseq@error@n{option-illegal}{#1}},
+ z/.code={\sseq@error@n{option-illegal}{#1}},
+ xshift/.sseq @ first pass code=\sseq@tikz@firstpass@checkshifttransform{x}{#1},
+ yshift/.sseq @ first pass code=\sseq@tikz@firstpass@checkshifttransform{y}{#1},
+ xshift/.append code=\sseq@options@scopeshiftsecondpass{\sseq@tikz@shifttransform{x}{#1}},%% Note special scopeshiftsecondpass command
+ yshift/.append code=\sseq@options@scopeshiftsecondpass{\sseq@tikz@shifttransform{y}{#1}},%%
+ xshift/.value required,
+ yshift/.value required,
+ shift/.sseq @ transform, shift/.value required,
+ shift only/.sseq @ transform,
+ xscale/.sseq @ transform, xscale/.value required,
+ yscale/.sseq @ transform, yscale/.value required,
+ scale/.sseq @ transform, scale/.value required,
+ scale around/.sseq @ transform, scale around/.value required,
+ xslant/.sseq @ transform, xslant/.value required,
+ yslant/.sseq @ transform, yslant/.value required,
+ rotate/.sseq @ transform, rotate/.value required,
+ rotate around/.sseq @ transform, rotate around/.value required,
+ cm/.sseq @ transform, cm/.value required,
+ reset cm/.sseq @ transform, reset cm/.value forbidden,
+ transform canvas/.sseq @ transform, transform canvas/.value required
+}
+
+\def\sseq@shift@firstpassprocess#1{\sseq@shift@firstpassprocess@#1\sseq@nil}
+\def\sseq@shift@firstpassprocess@#1#2\sseq@nil{\ifx#1\pgfpointxy\sseq@shift@firstpassprocess@@#2\else\sseq@standardparse\fi}
+\def\sseq@shift@firstpassprocess@@#1#2{
+ \sseq@tikz@firstpass@checkshifttransform{x}{#1}
+ \sseq@tikz@firstpass@checkshifttransform{y}{#2}
+}
+
+\def\sseq@shift@secondpassprocess#1{\sseq@shift@secondpassprocess@#1\sseq@nil}
+\def\sseq@shift@secondpassprocess@#1#2\sseq@nil{\ifx#1\pgfpointxy\sseq@shift@secondpassprocess@@#2\else\sseq@standardparse \pgftransformshift{#1#2}\fi}
+\def\sseq@shift@secondpassprocess@@#1#2{
+ \sseq@tikz@shifttransform{x}{#1}
+ \sseq@tikz@shifttransform{y}{#2}
+}
+
+% special second pass handler for scopes to prevent shifts from causing out of memory style errors,
+% see the longer comment at the definition of sseq@scope in main.code.tex
+\def\sseq@options@scopeshiftsecondpass{\sseq@options@secondpass}
+
+\sseq@pgfqkeysdirlist{/sseqpages/scope,/sseqpages/tikz primitives,/sseqpages,/sseqpages/label,/sseqpages/class/label}{
+ align/.sseq @ second pass code=\tikzset{align/#1},
+ align/.sseq @ first pass append code={\sseq@needstikztrue\def\sseq@classquotes@smugglehook@inner{\sseq@needstikztrue\tikzset{align/#1}}}
+}
+
+\sseq@pgfqkeysdirlist{/sseqpages/scope,/sseqpages/tikz primitives}{
+ shift/.code={
+ \sseq@options@firstpass{\tikz@scan@one@point\sseq@shift@firstpassprocess#1\relax}
+ \sseq@options@secondpass{\tikz@scan@one@point\sseq@shift@secondpassprocess#1\relax} % TODO: maybe try to save the work of processing the point twice?
+ },
+ xshift/.sseq @ first pass code=\sseq@tikz@firstpass@checkshifttransform{x}{#1},
+ yshift/.sseq @ first pass code=\sseq@tikz@firstpass@checkshifttransform{y}{#1},
+ xshift/.append code=\sseq@options@scopeshiftsecondpass{\sseq@tikz@shifttransform{x}{#1}},%% Note special scopeshiftsecondpass command
+ yshift/.append code=\sseq@options@scopeshiftsecondpass{\sseq@tikz@shifttransform{y}{#1}},%%
+ rotate around/.sseq @ second pass code={\sseq@standardparse\sseq@pgfkeysdocommand{rotate}{#1}},
+ rotate/.sseq @ stdparse do transform, rotate/.value required,
+ xslant/.sseq @ stdparse do transform, xslant/.value required,
+ yslant/.sseq @ stdparse do transform, yslant/.value required,
+ xmirror/.sseq @ stdparse do transform={-1}, xmirror/.value forbidden,
+ ymirror/.sseq @ stdparse do transform={-1}, ymirror/.value forbidden,
+ xscale/.sseq @ stdparse do transform, xscale/.value required,
+ yscale/.sseq @ stdparse do transform, yscale/.value required,
+ scale/.sseq @ stdparse do transform, scale/.value required,
+ scale around/.sseq @ stdparse do transform, scale around/.value required
+}
+
+%%% Error checking for nonglobal transformations:
+
+\def\sseq@firstpass@checkshifttransform#1#2{%
+ \pgfmathparse{#2}%
+ \sseq@ifpgfmathresultisunitlessint{%
+ \@xp\pgfmathint\@xp{\pgfmathresult}%
+ \@xp\advance\csname sseq@#1\endcsname\pgfmathresult\relax
+ }{\sseq@error@n{illegal-transform}{#1shift}}%
+}
+\let\sseq@firstpass@shifttransform\sseq@firstpass@checkshifttransform
+
+\def\sseq@checkshifttransform#1#2{%
+ \pgfmathparse{(#2)}%
+ \sseq@ifpgfmathresultisunitlessint{%
+ \@xp\pgfmathint\@xp{\pgfmathresult}%
+ \@xp\advance\csname sseq@#1\endcsname\pgfmathresult\relax
+ \sseq@pgfkeysdocommand{#1shift}{#2cm}
+ }{\sseq@error@n{illegal-transform}{#1shift}}%
+}
+
+\def\sseq@okayshifttransform#1#2{%
+ \pgfmathparse{#2}
+ \ifpgfmathunitsdeclared
+ \sseq@pgfkeysdocommand{#1shift}{#2}
+ \else
+ \sseq@pgfkeysdocommand{#1shift}{#2cm}
+ \fi
+}
+
+\def\sseq@tikz@firstpass@checkshifttransform#1#2{%
+ \pgfmathparse{#2}%
+ \sseq@ifpgfmathresultisunitlessint{%
+ \@xp\pgfmathint\@xp{\pgfmathresult}%
+ \@xp\advance\csname sseq@\sseq@getfirstchar#1\sseq@nil\endcsname\pgfmathresult\relax
+ }{\sseq@standardparse}%
+}
+
+\def\sseq@tikz@shifttransform#1#2{%
+ \pgfmathparse{#2}%
+ \sseq@ifpgfmathresultisunitlessint{%
+ \@xp\pgfmathint\@xp{\pgfmathresult}%
+ \@xp\advance\csname sseq@\sseq@getfirstchar#1\sseq@nil\endcsname\pgfmathresult\relax
+ \sseq@pgfkeysdocommand{#1shift}{#2cm*\csname sseq@#1scale\endcsname}
+ }{
+ \sseq@standardparse
+ \ifpgfmathunitsdeclared
+ \sseq@pgfkeysdocommand{#1shift}{#2}
+ \else
+ \sseq@pgfkeysdocommand{#1shift}{#2cm}
+ \fi
+ }%
+}
+
+\def\sseq@ifpgfmathresultisunitlessint{\ifpgfmathunitsdeclared\@xp\@secondoftwo\else\sseq@ifpgfmathresultisint{\@xp\@firstoftwo}{\@xp\@secondoftwo}\fi}
+\def\sseq@ifpgfmathresultisint{\@xp\sseq@ifpgfmathresultisint@\pgfmathresult..\sseq@nil}
+\def\sseq@ifpgfmathresultisint@#1.#2.#3\sseq@nil{\ifx\sseq@nil#2\sseq@nil\@xp\@firstoftwo\else \ifnum#2=\z@ \@xp\@xp\@xp\@firstoftwo\else \@xp\@xp\@xp\@secondoftwo\fi\fi}
+
+%%%% Options for Tikz primitives
+
+\def\sseq@pageconstraint{1}
+\def\sseq@pageconstraint@true{1}
+
+\sseq@pgfqkeysdirlist{/sseqpages/scope,/sseqpages/tikz primitives}{
+ page constraint/.code={
+ \sseq@updatepageconstraint{#1}{&&}
+ },
+ page constraint or/.code={
+ \sseq@updatepageconstraint{#1}{||}
+ },
+ page/.code={\sseq@getnumrange\temp{#1}\sseq@updatepageconstraintrange},
+ set page constraint/.store in=\sseq@pageconstraint,
+ background/.code={\sseq@standardparse\sseq@setsavedpaths{background}\pgfkeysalso{standard parse}},
+}
+
+\sseq@pgfqkeysdirlist{/sseqpages/scope,/sseqpages/tikz primitives,/sseqpages/fit}{
+ class style/.code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@theclassstyle\the\sseq@scope@toks}},
+ cycle style/.forward to=/sseqpages/tikz primitives/class style,
+ permanent class style/.code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@theclassstyle\sseq@thepermanentcyclestyle\the\sseq@scope@toks}},
+ permanent cycle style/.forward to=/sseqpages/tikz primitives/permanent class style,
+ transient class style/.code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@theclassstyle\sseq@thetransientcyclestyle\the\sseq@scope@toks}},
+ transient cycle style/.forward to=/sseqpages/tikz primitives/transient class style,
+ this page class style/.code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@theclassstyle\sseq@thetransientcyclestyle\sseq@thethispagecyclestyle\the\sseq@scope@toks}},
+ this page cycle style/.forward to=/sseqpages/tikz primitives/this page class style,
+ differential style/.code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@theedgestyle\sseq@thedifferentialstyle\the\sseq@scope@toks}},
+ struct line style/.code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@theedgestyle\sseq@thestructlinestyle\the\sseq@scope@toks}},
+ tikz primitive style/.code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@thetikzprimitivestyle\the\sseq@scope@toks}}
+ %this page struct line style/.sseq @ first pass code={\sseq@d@addto@options{\sseq@thesseqstyle\sseq@theedgestyle\sseq@thestructlinestyle\the\sseq@scope@toks}}
+}
diff --git a/graphics/pgf/contrib/spectralsequences/sseqloadstore.code.tex b/graphics/pgf/contrib/spectralsequences/sseqloadstore.code.tex
new file mode 100644
index 0000000000..79bd2c0cfc
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqloadstore.code.tex
@@ -0,0 +1,189 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqloadstore.code.tex
+%%
+%% Defines commands for maintaining separate namespaces between distinct spectral sequences and saving information.
+%%
+
+
+% These are attributes that come with a given spectral sequence (by name)
+% All of these values are loaded at the beginning of sseqpage (and of sseqdata if an existing sseq is being modified).
+% They are then stored together at the end of sseqdata (and of sseqpage if "keep changes" option is present).
+\def\sseq@storelist{}
+\def\sseq@storelist@setdefaults{}
+\def\sseq@addtostorelist#1#2{%
+ \sseq@g@addto@macro\sseq@storelist{\\#1}%
+ \sseq@x@addto@macro\sseq@storelist@setdefaults{\global\let\@nx#1\@xp\@nx\csname \sseq@macroname#1@default\endcsname}%
+ \@xp\gdef\csname\sseq@macroname#1@default\endcsname{#2}%
+}
+% TODO: is this used?
+\def\sseq@addtostorelistlet#1#2{%
+ \sseq@g@addto@macro\sseq@storelist{\\#1}%
+ \sseq@x@addto@macro\sseq@storelist@setdefaults{\global\let\@nx#1\@xp\@nx\csname \sseq@macroname#1@default\endcsname}%
+ \global\@xp\let\csname\sseq@macroname#1@default\endcsname#2%
+}
+
+\def\sseq@addiftostorelist#1{\sseq@addiftostorelistopt{#1}{false}}
+\def\sseq@addiftostorelist@truedefault#1{\sseq@addiftostorelistopt{#1}{true}}
+\def\sseq@addiftostorelistopt#1#2{%
+ \@xp\newif\csname ifsseq@#1\endcsname
+ \sseq@g@addto@macro\sseq@storelist{\sseq@storelistif{#1}}%
+ \sseq@x@addto@macro\sseq@storelist@setdefaults{\@xp\@nx\csname sseq@#1@default\endcsname}%
+ \@xp\xdef\csname sseq@#1@default\endcsname{\global\@xp\@nx\csname sseq@#1#2\endcsname}%
+}
+\def\sseq@addkeytostorelist#1#2{
+ \sseq@g@addto@macro\sseq@storelist{\sseq@storelistkey{#1}}%
+ \sseq@x@addto@macro\sseq@storelist@setdefaults{
+ \global\let\@xp\@nx\csname pgfk@#1/.@cmd\endcsname\@xp\@nx\csname pgfk@#1/.@cmd@default\endcsname
+ \global\let\@xp\@nx\csname pgfk@#1/.@body\endcsname\@xp\@nx\csname pgfk@#1/.@body@default\endcsname
+ }%
+ \pgfkeysdef{#1}{#2}%
+ \global\@xp\let\csname pgfk@#1/.@cmd@default\@xp\endcsname\csname pgfk@#1/.@cmd\endcsname
+ \global\@xp\let\csname pgfk@#1/.@body@default\@xp\endcsname\csname pgfk@#1/.@body\endcsname
+}
+
+% transfer data about the current spectral sequence between \<command> and \<command><sseqname>
+\def\sseq@storelist@store#1{\global\@xp\let\csname\sseq@macroname#1@@@\sseq@thename\endcsname#1}
+\def\sseq@storelist@get#1{\global\@xp\let\@xp#1\csname\sseq@macroname#1@@@\sseq@thename\endcsname}
+
+\def\sseq@storelistif@store#1{%
+ \@xp\edef\csname sseq@storeif@#1\endcsname{\csname ifsseq@#1\endcsname \@xp\@nx\csname sseq@#1true\endcsname\else\@xp\@nx\csname sseq@#1false\endcsname\fi}%
+ \@xp\sseq@storelist@store\csname sseq@storeif@#1\endcsname
+}
+\def\sseq@storelistif@get#1{
+ \@xp\sseq@storelist@get\csname sseq@storeif@#1\endcsname
+ \csname sseq@storeif@#1\endcsname
+}
+
+\def\sseq@storelistkey@store#1{
+ \global\@xp\let\csname pgfk@#1/.@cmd@@@\sseq@thename\@xp\endcsname\csname pgfk@#1/.@cmd\endcsname
+ \global\@xp\let\csname pgfk@#1/.@body@@@\sseq@thename\@xp\endcsname\csname pgfk@#1/.@body\endcsname
+}
+\def\sseq@storelistkey@get#1{
+ \global\@xp\let\csname pgfk@#1/.@cmd\@xp\endcsname\csname pgfk@#1/.@cmd@@@\sseq@thename\endcsname
+ \global\@xp\let\csname pgfk@#1/.@body\@xp\endcsname\csname pgfk@#1/.@body@@@\sseq@thename\endcsname
+}
+
+\def\sseq@storecmds{\let\\\sseq@storelist@store\let\sseq@storelistif\sseq@storelistif@store\let\sseq@storelistkey\sseq@storelistkey@store\sseq@storelist}
+\def\sseq@getcmds{\let\\\sseq@storelist@get\let\sseq@storelistif\sseq@storelistif@get\let\sseq@storelistkey\sseq@storelistkey@get\sseq@storelist}
+
+%%%% New "poor man's OOP" Load/Store
+% Directly stores things into commands that are annotated with the name of the spectral sequence.
+% I use this primarily for commands that won't necessarily exist for every spectral sequence
+% for instance because it has the description of a particular class or differential as part of its name
+\def\sseq@obj@fullname#1{sseq.\sseq@thename.#1}
+\def\sseq@obj#1{\csname sseq.\sseq@thename.#1\endcsname}
+\def\sseq@obj@gdef#1{\@xptwo\gdef\sseq@obj{#1}}
+\def\sseq@obj@xdef#1{\@xptwo\xdef\sseq@obj{#1}}
+\def\sseq@obj@protectedxdef#1{\@xptwo\sseq@protected@xdef\sseq@obj{#1}}
+\def\sseq@obj@xodef#1{\@xp\gdef\csname \sseq@obj@fullname{#1}\@xp\endcsname\@xp}
+\def\sseq@obj@let#1{\@xptwo\let\sseq@obj{#1}} % This shouldn't be used anywhere because all object assignments should be global...
+\def\sseq@obj@glet#1{\global\@xptwo\let\sseq@obj{#1}}
+\def\sseq@obj@gletcsname#1#2{\global\@xp\let\csname\sseq@obj@fullname{#1}\@xp\endcsname\csname#2\endcsname}
+\def\sseq@obj@gletobj#1#2{\global\@xp\let\csname\sseq@obj@fullname{#1}\@xp\endcsname\csname\sseq@obj@fullname{#2}\endcsname}
+\def\sseq@obj@undef#1{\global\@xptwo\let\sseq@obj{#1}\relax}
+\def\sseq@obj@show#1{\@xptwo\show\sseq@obj{#1}}
+\def\sseq@obj@ifundef#1{\@ifundefined{\sseq@obj@fullname{#1}}}
+\def\sseq@obj@ifdef#1#2#3{\@ifundefined{\sseq@obj@fullname{#1}}{#3}{#2}}
+\def\sseq@obj@useifdef@else#1#2{\@ifundefined{\sseq@obj@fullname{#1}}{#2}{\sseq@obj{#1}}}
+\def\sseq@obj@inccheckdef#1{\sseq@obj@ifundef{#1}{\sseq@obj@gdef{#1}{1}}{\sseq@obj@inc{#1}}}
+\def\sseq@obj@inc#1{\sseq@obj@xdef{#1}{\the\numexpr\sseq@obj{#1}+1}}
+\def\sseq@obj@gaddto#1{\sseq@obj@ifundef{#1}{\sseq@obj@gdef{#1}}{\@xptwo\sseq@g@addto@macro\sseq@obj{#1}}}
+\def\sseq@obj@xaddto#1{\sseq@obj@ifundef{#1}{\sseq@obj@xdef{#1}}{\@xptwo\sseq@x@addto@macro\sseq@obj{#1}}}
+\def\sseq@obj@xoaddto#1{\sseq@obj@ifundef{#1}{\sseq@obj@xodef{#1}}{\@xp\sseq@g@addto@macro\csname \sseq@obj@fullname{#1}\@xp\endcsname\@xp}}
+\def\sseq@obj@map#1#2{\def\\##1{#2}\sseq@obj{#1}}
+
+\def\sseq@lettoobj#1#2{\sseq@obj@ifdef{#2}{\@xp\let\@xp#1\csname\sseq@obj@fullname{#2}\endcsname}{\let#1\empty}}
+
+
+\def\sseq@obj@ifchanged#1#2#3{\sseq@obj@ifundef{#1.changed}{#3}{#2}}
+\def\sseq@obj@changedtrue#1{\sseq@obj@gdef{#1.changed}{}}
+\def\sseq@obj@changedfalse#1{\sseq@obj@undef{#1.changed}}
+
+\def\sseq@cleanup@obj#1{
+ \ifsseq@keepchanges\else
+ \sseq@obj@ifchanged{#1}{}{
+ \sseq@obj@changedtrue{#1}
+ \sseq@x@addto@macro\sseq@pagecleanup{
+ \@xptwo\ifx\sseq@obj{#1}\relax
+ \global\@nx\sseq@obj@let{#1}\relax
+ \else
+ \@nx\sseq@obj@gdef{#1}{\unexpanded\@xpthree{\sseq@obj{#1}}}
+ \fi
+ \@nx\sseq@obj@changedfalse{#1}
+ }
+ }
+ \fi
+}
+
+
+%%%% Saved paths, temporary saved paths, background saved paths
+% \sseq@savedpaths@whatever is redefined to be \sseq@savedpaths@whatever@standard or \sseq@savedpaths@whatever@temporary depending on context
+% This simplifies the code a lot because I don't have to check again where I should put things.
+\sseq@addtostorelist\sseq@savedpaths{}
+\def\sseq@tempsavedpaths{}
+\def\sseq@savedpaths@addclass@standard#1{\sseq@x@addto@macro\sseq@savedpaths{\@nx\sseq@class@object{#1}}}
+\def\sseq@savedpaths@adddifferential@standard#1{\sseq@x@addto@macro\sseq@savedpaths{\@nx\sseq@differential@object{#1}}}
+\def\sseq@savedpaths@addstructline@standard#1{\sseq@x@addto@macro\sseq@savedpaths{\@nx\sseq@structline@object{#1}}}
+\def\sseq@savedpaths@xaddtikzpath@standard#1{\sseq@x@addto@macro\sseq@savedpaths{\@nx\sseq@tikzpath@object{#1}}}
+\def\sseq@savedpaths@add@standard{\sseq@g@addto@macro\sseq@savedpaths}
+\def\sseq@savedpaths@xadd@standard{\sseq@x@addto@macro\sseq@savedpaths}
+\def\sseq@savedpaths@show@standard{\show\sseq@savedpaths}
+\def\sseq@scope@savedpaths@add@standard#1{\sseq@savedpaths@add@standard{#1}\sseq@savedpaths@add@background{#1}}
+
+\def\sseq@savedpaths@addclass@temporary#1{\sseq@x@addto@macro\sseq@tempsavedpaths{\@nx\sseq@class@draw@ifpage{#1}}}
+\def\sseq@savedpaths@adddifferential@temporary#1{\sseq@x@addto@macro\sseq@tempsavedpaths{\@nx\sseq@differential@draw@ifpage{#1}}}
+\def\sseq@savedpaths@addstructline@temporary#1{\sseq@x@addto@macro\sseq@tempsavedpaths{\@nx\sseq@structline@draw@ifpage{#1}}}
+\def\sseq@savedpaths@xaddtikzpath@temporary#1{\sseq@x@addto@macro\sseq@tempsavedpaths{#1}}
+\def\sseq@savedpaths@add@temporary{\sseq@g@addto@macro\sseq@tempsavedpaths}
+\def\sseq@savedpaths@xadd@temporary{\sseq@x@addto@macro\sseq@tempsavedpaths}
+\def\sseq@savedpaths@show@temporary{\show\sseq@tempsavedpaths}
+\def\sseq@scope@savedpaths@add@temporary#1{\sseq@savedpaths@add@temporary{#1}\sseq@savedpaths@add@background{#1}}
+
+
+\def\sseq@savedpaths@addclass@background#1{\sseq@error@internal@n{illegal-add-background-mode}{\sseq@savedpaths@addclass}}
+\def\sseq@savedpaths@adddifferential@background#1{\sseq@error@internal@n{illegal-add-background-mode}{\sseq@savedpaths@adddifferential}}
+\def\sseq@savedpaths@addstructline@background#1{\sseq@error@internal@n{illegal-add-background-mode}{\sseq@savedpaths@addstructline}}
+\def\sseq@savedpaths@xaddtikzpath@background#1{\sseq@x@addto@macro\sseq@savedbackgroundpaths{#1}}
+\def\sseq@savedpaths@add@background{\sseq@g@addto@macro\sseq@savedbackgroundpaths}
+\def\sseq@savedpaths@xadd@background{\sseq@x@addto@macro\sseq@savedbackgroundpaths}
+\def\sseq@savedpaths@show@background{\show\sseq@savedbackgroundpaths}
+
+\def\sseq@savedpaths@addclass@ignore#1{}
+\def\sseq@savedpaths@adddifferential@ignore#1{}
+\def\sseq@savedpaths@addstructline@ignore#1{}
+\def\sseq@savedpaths@xaddtikzpath@ignore#1{}
+\def\sseq@savedpaths@add@ignore#1{}
+\def\sseq@savedpaths@xadd@ignore#1{}
+\def\sseq@savedpaths@show@ignore#1{}
+\def\sseq@scope@savedpaths@add@ignore#1{}
+
+\def\sseq@setsavedpaths#1{%
+ \@xp\let\@xp\sseq@savedpaths@addclass \csname sseq@savedpaths@addclass@#1\endcsname
+ \@xp\let\@xp\sseq@savedpaths@adddifferential\csname sseq@savedpaths@adddifferential@#1\endcsname
+ \@xp\let\@xp\sseq@savedpaths@addstructline \csname sseq@savedpaths@addstructline@#1\endcsname
+ \@xp\let\@xp\sseq@savedpaths@xaddtikzpath \csname sseq@savedpaths@xaddtikzpath@#1\endcsname
+ \@xp\let\@xp\sseq@savedpaths@add \csname sseq@savedpaths@add@#1\endcsname
+ \@xp\let\@xp\sseq@savedpaths@xadd \csname sseq@savedpaths@xadd@#1\endcsname
+ \pgfutil@ifundefined{sseq@scope@savedpaths@add@#1}{}{%
+ \@xp\let\@xp\sseq@savedpaths@show \csname sseq@savedpaths@show@#1\endcsname
+ \@xp\let\@xp\sseq@scope@savedpaths@add \csname sseq@scope@savedpaths@add@#1\endcsname
+ }%
+}
+
+% We don't want to add anything to paths except for tikz paths in background mode
+% We need to draw those because they might affect the bounding box.
+\def\sseq@setsavedpaths@draftmode{
+ \sseq@setsavedpaths{ignore} % Don't add stuff to paths
+ % Only add tikzpaths if in background mode (so ignore in standard or temporary)
+ \let\sseq@savedpaths@xaddtikzpath@standard\@gobble
+ \let\sseq@savedpaths@xaddtikzpath@temporary\@gobble
+ % Only update mode for tikzpath
+ \def\sseq@setsavedpaths##1{\@xp\let\@xp\sseq@savedpaths@xaddtikzpath \csname sseq@savedpaths@xaddtikzpath@##1\endcsname}
+}
+
diff --git a/graphics/pgf/contrib/spectralsequences/sseqmacromakers.code.tex b/graphics/pgf/contrib/spectralsequences/sseqmacromakers.code.tex
new file mode 100644
index 0000000000..b83e34abb7
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqmacromakers.code.tex
@@ -0,0 +1,490 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqmacromakers.code.tex
+%% Exposes: \DeclareSseqCommand, \NewSseqCommand, \DeclareSseqGroup, \NewSseqGroup
+%%
+%% Set up commands to define other commands, both the internal macros, and the external ones.
+%% Also the internal macros \sseq@DeclareDocumentCommandAs and \sseq@DeclareDocumentCommand
+%% For the user commands, sets up call stack, thiscall, etc
+%%
+
+\ExplSyntaxOn
+
+%%% Install user commands
+% copy commands into user namespace by removing sseq@ prefixes
+% given a list of commands, \let\thiscommand\sseq@thiscommand on each one
+\def\sseq@installmacros{\@xp\sseq@installmacros@\sseq@macrolist\sseq@nil}
+\def\sseq@installmacros@#1{%
+ \ifx#1\sseq@nil\else % if so, that was the last command in the list
+ \@xp\let\@xp#1\csname sseq@\sseq@macroname#1\endcsname
+ \@xp\sseq@installmacros@
+ \fi %
+}
+
+% Capital U argument type is "Until" but puts back the token when it's done.
+
+% So xparse changed a bunch between the copy pushed to CTAN on February 7th and the copy pushed on February 9th
+\newtoks\sseq@patchxparseUnewcode
+\sseq@patchxparseUnewcode{
+ \cs_new_protected:Npn \sseq__xparse_grab_U:w #1#2 \__xparse_run_code:
+ { \sseq__xparse_grab_U_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
+ \cs_new_protected:Npn \sseq__xparse_grab_U_aux:nnN #1#2#3
+ {
+ \tl_set:Nn \l__xparse_signature_tl {#2}
+ \exp_after:wN #3 \l__xparse_fn_tl ##1 #1
+ { \__xparse_add_arg:n {##1} #1 }
+ \l__xparse_fn_tl
+ }
+ \cs_new_protected:Npn \sseq__xparse_add_type_U:w #1
+ {
+ \__xparse_flush_m_args:
+ \__xparse_add_default:
+ \__xparse_add_grabber_mandatory:N U
+ \tl_put_right:Nn \l__xparse_signature_tl { {#1} }
+ \__xparse_prepare_signature:N
+ }
+}
+
+
+\@ifpackagelater{xparse}{2017/02/08}{
+ \@ifpackagelater{xparse}{2018/10/17}{
+ \ifsseq@patchxparseU
+ \the\sseq@patchxparseUnewcode
+ \else
+ % Assumptions failed, so just make U give an error (this isn't such a big deal since we don't use it for \d anymore).
+ \cs_new_protected:Npn \sseq__xparse_add_type_U:w #1
+ {
+ \sseq@error{U-xparse-incompatible}
+ }
+ \fi
+ }{
+ \the\sseq@patchxparseUnewcode
+ }
+}{
+ % OLD CODE
+ \cs_new_protected:Npn \sseq__xparse_grab_U:w #1#2 \l__xparse_args_tl
+ { \sseq__xparse_grab_U_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
+ \cs_new_protected:Npn \sseq__xparse_grab_U_aux:nnN #1#2#3
+ {
+ \exp_after:wN #3 \l__xparse_fn_tl ##1 #1
+ {
+ \__xparse_add_arg:n {##1}
+ #2\l__xparse_args_tl #1
+ }
+ \l__xparse_fn_tl
+ }
+ \cs_new_protected:Npn \sseq__xparse_add_type_U:w #1
+ {
+ \__xparse_flush_m_args:
+ \__xparse_add_grabber_mandatory:N U
+ \tl_put_right:Nn \l__xparse_signature_tl { {#1} }
+ \__xparse_prepare_signature:N
+ }
+}% END \@ifpackagelater
+
+% On 2018/10/01, the commit "Reimplement the ignore_spaces peek functions in terms of peek_spaces" did what it says.
+% Inside of \sseq@DeclareDocumentCommandAs we \let \peek_meaning to \peek_meaning_ignore_spaces
+% which is bad news if \peek_meaning_ignore_spaces is defined in terms of \peek_meaning. This fixes this bug by
+% redefining \peek_meaning_ignore_spaces in terms of a copy of \peek_meaning.
+\@ifpackagelater{expl3}{2018/10/01}{
+ \cs_set_eq:NN\copy_of_peek_meaning:NTF\peek_meaning:NTF
+ \cs_set:Npn\peek_meaning_ignore_spaces:NTF#1#2#3{\peek_remove_spaces:n{\copy_of_peek_meaning:NTF#1{#2}{#3}}}
+ \cs_set_eq:NN\copy_of_peek_meaning_remove:NTF\peek_meaning_remove:NTF
+ \cs_set:Npn\peek_meaning_remove_ignore_spaces:NTF#1#2#3{\peek_remove_spaces:n{\copy_of_peek_meaning_remove:NTF#1{#2}{#3}}}
+}{}
+
+\@ifpackagelater{xparse}{2018/10/17}{
+ \cs_new_protected:Npn \sseq__xparse_normalize_type_U:w #1 {
+ \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+ \__xparse_normalize_check_lu:N U
+ \__xparse_add_arg_spec_mandatory:n { U {#1} }
+ \__xparse_normalize_arg_spec_loop:n
+ }
+}{
+ \cs_new_protected:Npn \sseq__xparse_normalize_type_U:w #1 {
+ \quark_if_recursion_tail_stop_do:nn {#1} { \__xparse_bad_arg_spec:wn }
+ \__xparse_normalize_check_lu:N U
+ \__xparse_add_arg_spec:n { U {#1} }
+ \int_incr:N \l__xparse_mandatory_args_int
+ \tl_clear:N \l__xparse_last_delimiters_tl
+ \__xparse_normalize_arg_spec_loop:n
+ }
+}
+% Expandable commands are a menace to us because they define a bunch of helper commands that we then have to keep track of.
+% We are too lazy to do this, so force \l__xparse_grab_expandably_bool to be false.
+% This is backwards compatible (I think) because \bool_set_false:N just performs a chardef (no existence check)
+% so in old versions, \l__xparse_grab_expandably_bool will be created harmlessly.
+\let\sseq__xparse_prepare_signature:n\__xparse_prepare_signature:n
+\pretocmd\sseq__xparse_prepare_signature:n { \bool_set_false:N \l__xparse_grab_expandably_bool } {}{\error}
+
+% I would like to patch the \__xparse_grab_U:w's in my commands into \sseq__xparse_grab_U:w's but I can't because of -NoValue-.
+\def\sseq@install@xparse@Uarggrabber{ \cs_set_eq:NN \__xparse_grab_U:w \sseq__xparse_grab_U:w }
+
+%%% \sseq@DeclareDocumentCommand
+%
+% \sseq@DeclareDocumentCommand\somecommand is shorthand for \sseq@DeclareDocumentCommandAs\sseq@somecommand\somecommand
+%
+% so the result is that it defines \sseq@somecommand intended to be \let to \somecommand later.
+
+\cs_new_protected:Npn\sseq@DeclareDocumentCommand#1{%
+ \exp_args:Nc \sseq@DeclareDocumentCommandAs@setinputline { sseq @ \cs_to_str:N #1 }#1
+}
+
+\cs_new_protected:Npn\sseq@DeclareDocumentCommandAs@setinputline#1{
+ \protected\edef #1 { \@nx\sseq@setinputline \@xp\@nx\csname \cs_to_str:N #1 @@unique@@ start \endcsname }
+ \exp_args:Nc \sseq@DeclareDocumentCommandAs { \cs_to_str:N #1 @@unique@@ start }
+}
+
+%%% \sseq@DeclareDocumentCommandAs
+%
+% #1 - the command to define
+% #2 - the command to use in argument parsing errors
+% #3 - parameters (\NewDocumentCommand style)
+% #4 - code
+%
+% See my stack exchange question: https://tex.stackexchange.com/questions/350596/control-error-messages-made-by-commands-defined-with-newdocumentcommand
+
+\cs_new_protected:Npn\sseq@DeclareDocumentCommandAs#1#2#3#4{
+ \group_begin:
+ \cs_set_eq:NN \__xparse_add_type_U:w \sseq__xparse_add_type_U:w
+ \cs_set_eq:NN \__xparse_normalize_type_U:w \sseq__xparse_normalize_type_U:w
+ \cs_set_eq:NN \__xparse_prepare_signature:n \sseq__xparse_prepare_signature:n
+ %\cs_set:Npn \__xparse_declare_cmd_code:Nnn {\bool_set_false:N \l__xparse_grab_expandably_bool\__xparse_declare_cmd_code_aux:Nnn}
+ \sseq@installmsghooks
+ \def\sseq@error@setup{}
+ \def\sseq@error@cleanup{\sseq@errortrue}
+ \let\sseq@error@annotation\empty
+ \DeclareDocumentCommand #2 { #3 } { #4 }
+ \ifsseq@error
+ \group_end:
+ \sseq@errortrue % This only happens if it came from user code, so don't set error to be false so it can break out too.
+ \@xp\sseq@break
+ \fi
+ \cs_if_exist:cTF{ \cs_to_str:N #2 \c_space_tl code }{
+ \cs_gset:Npx #1{
+ \begingroup
+ \exp_not:N \cs_set_eq:NN % force xparse to always ignore spaces!
+ \exp_not:N \peek_meaning:NTF
+ \exp_not:N \peek_meaning_ignore_spaces:NTF
+ \exp_not:N \cs_set_eq:NN % force xparse to always ignore spaces!
+ \exp_not:N \peek_meaning_remove:NTF
+ \exp_not:N \peek_meaning_remove_ignore_spaces:NTF
+ % Not sure why we use set_eq:cc and exp_not:n here but I'm concerned that something will break if I change it...
+ \exp_not:N \cs_set_eq:cc
+ \exp_not:n {{ \cs_to_str:N #2 \c_space_tl code }}
+ \exp_not:n {{ \cs_to_str:N #1 \c_space_tl code }}
+ \exp_not:N \cs_set_eq:NN
+ \exp_not:c { \cs_to_str:N #2 \c_space_tl }
+ \exp_not:c { \cs_to_str:N #1 \c_space_tl }
+ \exp_not:c { \cs_to_str:N #1 \c_space_tl inner }
+ }
+ \pretocmd:cnnn { \cs_to_str:N #2 \c_space_tl code } { \endgroup{} } { } { \sseq@error@x { macro-patch-failed } { \string#1 } }
+ \cs_gset_eq:cN { \cs_to_str:N #1 \c_space_tl inner } #2
+ \cs_gset_eq:cc { \cs_to_str:N #1 \c_space_tl code } { \cs_to_str:N #2 \c_space_tl code }
+ \cs_gset_eq:cc { \cs_to_str:N #1 \c_space_tl }{ \cs_to_str:N #2 \c_space_tl } % sometimes the new version of xparse stores stuff in #2<space>
+ }{
+ \cs_gset_eq:NN #1 #2
+ }
+ \group_end: % In this case, I want to pass \sseq@errortrue out of the block, so I close the group before I break.
+ \sseq@breakpoint % So this breakpoint definitely should be after the \endgroup.
+}
+
+\cs_set_eq:NN \patchcmd:Nnnnn \patchcmd
+\cs_set_eq:NN \pretocmd:Nnnn \pretocmd
+\cs_generate_variant:Nn \patchcmd:Nnnnn {cnfnn}
+\cs_generate_variant:Nn \pretocmd:Nnnn {cfnn}
+\cs_generate_variant:Nn \pretocmd:Nnnn {cnnn}
+
+\cs_new_protected:Npn\NewSseqCommand#1{%
+ \cs_if_free:cTF { sseq @ usermacro @ \cs_to_str:N #1 } { \DeclareSseqCommand#1 } { \sseq@error@x{usermacro-not-free}{\string#1} \use_none:nn }
+}
+\let\begingroupa\begingroup
+\let\begingroupb\begingroup
+\newtoks\sseq@macro@setthiscall@toks
+\newtoks\sseq@macro@defaultarggetters@toks
+
+\cs_new_protected:Npn\DeclareSseqCommand#1#2#3{%
+ \cs_if_exist:cTF { sseq @ builtin @ \cs_to_str:N #1 } {\sseq@error@x{wont-override-system-macro}{\string#1}\sseq@break} {}
+ \cs_if_free:cT { sseq @ usermacro @ \cs_to_str:N #1 } {
+ \sseq@x@addto@macro { \sseq@installmacros } { \let \exp_not:N #1 \exp_not:c { sseq @ usermacro @ \cs_to_str:N #1 } }
+ }
+ % Make sure \cs_if_exist doesn't pass because there was a previously defined user macro with same name
+ \cs_undefine:c { sseq @ usermacro @ \cs_to_str:N #1 \c_space_tl code }
+ \exp_args:Nc \sseq@DeclareDocumentCommandAs@setinputline { sseq @ usermacro @ \cs_to_str:N #1 } #1 { #2 } {%
+ \sseq@loadinputline
+ \sseq@atbeginusermacro@msgsetup
+ {}#3{} % prevent space patching space hazards with these {}'s
+ \endgroup
+ }%
+ \ifsseq@error
+ \global\sseq@errorfalse
+ \@xp\sseq@break
+ \fi
+ \sseq@parseargspec{#1}{#2}%
+ % You might think we could skip this patching, and it's probably possible.
+ % However, this is responsible for turning the #'s of catcode other into #'s of catcode arg. I don't have as good of a way to do that.
+ % Also, this allows me to use \sseq@parseargspec after defining the command, so I don't have to run any error checking inside of it
+ % because if the argspec is invalid, \DeclareDocumentCommand will let me know.
+ \cs_if_exist:cTF{ sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code }{
+ \patchcmd:cnfnn{ sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code }{\endgroup{}}{
+ \@xp\endgroup
+ \@xp\begingroupa
+ \the\sseq@macro@setthiscall@toks
+ }{}{\sseq@error@x{usermacro-failed-patch}{\string#1}}
+ \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code } { sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code}
+ }{
+ \pretocmd:cfnn{ sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start }{
+ \@xp\begingroupb
+ \the\sseq@macro@setthiscall@toks
+ }{}{\sseq@error@x{usermacro-failed-patch}{\string#1}}
+ }
+ \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #1 } { sseq @ usermacro @ \cs_to_str:N #1 }
+ \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start } { sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start}
+ \ifsseq@inprogress
+ \cs_set_eq:Nc #1 { sseq @ usermacro @ \cs_to_str:N #1 }
+ \fi
+ \sseq@breakpoint
+}
+
+%%% Commands to help the user define "groups" of commands to be reused
+% #1 -- command
+% #2 -- argspec
+% #3 -- body of function (long)
+\NewDocumentCommand\NewSseqGroup{mm+m}{\DeclareSseqGroup@\NewSseqCommand{#1}{#2}{#3}}
+\NewDocumentCommand\DeclareSseqGroup{mm+m}{\DeclareSseqGroup@\DeclareSseqCommand{#1}{#2}{#3}}
+
+% #1 -- \NewSseqCommand or \DeclareSseqCommand
+% #2 -- command
+% #3 -- argspec
+% #4 -- body of function (long)
+\long\def\DeclareSseqGroup@#1#2#3#4{%
+ \group_begin:
+ \let\sseq@parseargspec\@gobbletwo % Get rid of argparse so we can change what gets added for setting up thiscall
+% why are we doing these things here?
+ \sseq@installmsghooks
+ \def\sseq@error@setup{}
+ \def\sseq@error@cleanup{\sseq@errortrue}
+ \let\sseq@error@annotation\empty
+%
+% undefine so we can tell whether we need to patch \command<space>code or \command
+ \cs_undefine:c { sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code }
+ \exp_args:Nc \sseq@DeclareDocumentCommandAs { sseq @ usermacro @ \cs_to_str:N #2 @ helper } #2 { #3 } {
+ \sseq@loadinputline
+ \sseq@usermacro@esetthiscall{\the\sseq@groupthiscalltoks}
+ \sseq@atbeginusermacro@msgsetup % the stack push happens in here
+ \sseq@scopecall
+ {}#4{}
+ \end{scope}
+ \endgroup
+ \sseq@breakpoint
+ }%
+ \ifsseq@error
+ \@xp\sseq@break
+ \fi
+ \sseq@macro@setthiscall@toks\@xp{\sseq@SseqGroup@argspec} % This gets added to the command by DeclareSseqCommand
+ #1#2{od()}{%
+ %can't use \sseq@atbeginusermacro@msgsetup until next spot b/c don't know what the whole call looks like yet
+ \IfNoValueTF{##1}{\def\sseq@options{}}{\def\sseq@options{##1}}%
+ \IfNoValueTF{##2}{%
+ \edef\sseq@scopecall{\@nx\begin{scope}[\unexpanded\@xp{\sseq@options}]}
+ }{%
+ \sseqnewgroup@splitcoord##2\sseq@nil
+ }%
+ \csname sseq @ usermacro @ \sseq@macroname #2 @ helper \@xp\endcsname\@gobbletwo % This gobble eats the endgroup added by sseqDeclareDocumentCommand
+ }
+ \sseq@parseargspec@newgroup{#2}{#3}%
+ % You might think we could skip this patching, and it's probably possible.
+ % However, this is responsible for turning the #'s of catcode other into #'s of catcode arg. I don't have as good of a way to do that.
+ \cs_if_exist:cTF{ sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code }{
+ \pretocmd:cfnn { sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code }{
+ \the\sseq@macro@setthiscall@toks
+ }{}{\sseq@error@x{usermacro-failed-patch}{\string#1}}
+ % globalize definition:
+ \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code } { sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code }
+ }{
+ \pretocmd:cfnn { sseq @ usermacro @ \cs_to_str:N #2 @ helper }{
+ \the\sseq@macro@setthiscall@toks
+ }{}{\sseq@error@x{usermacro-failed-patch}{\string#1}}
+ }
+ \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #2 @ helper } { sseq @ usermacro @ \cs_to_str:N #2 @ helper } % globalize definition
+ \let\sseq@parseargspec\sseq@parseargspec@normal
+ \sseq@breakpoint
+ \group_end:
+}
+
+\def\sseqnewgroup@splitcoord#1,#2\sseq@nil{
+ \sseq@ifintexpr{#1}{}{
+ \def\sseq@scopecall{\sseq@error@n{invalid-coordinate}{x~}\sseq@break}
+ \sseq@break
+ }
+ \sseq@ifintexpr{#2}{}{
+ \def\sseq@scopecall{\sseq@error@n{invalid-coordinate}{y~}\sseq@break}
+ \sseq@break
+ }
+ \edef\sseq@scopecall{
+ \@nx\begin{scope}[xshift=\the\numexpr#1\relax,yshift=\the\numexpr#2\relax,\unexpanded\@xp{\sseq@options}]
+ }
+ \sseq@breakpoint
+}
+
+
+\newtoks\sseq@groupargspectoks
+\newtoks\sseq@groupthiscalltoks
+\bgroup\catcode`\#=12\relax
+ \gdef\sseq@SseqGroup@argspec{
+ \sseq@eval{\global\sseq@groupargspectoks{\IfNoValueF{#1}{\unexpanded{[#1]}}\IfNoValueF{#2}{\unexpanded{(#2)}}}}
+ \@gobbletwo % What does this \@gobbletwo do?
+ }
+ \gdef\sseq@thearg{#\the\sseq@tempcount}
+\egroup
+
+
+% When there are arguments with default values (O, D, R, G), we need to put them into temporary macros to compare them and see if they are the default value
+% that's what \sseq@macro@defaultarggetters@toks is for.
+\def\sseq@parseargspec#1#2{%
+ \sseq@tempcount=\z@
+ \sseq@temptoks{\@nx#1}% Holds the stuff that goes in \esetthiscall (so most stuff)
+ \sseq@macro@defaultarggetters@toks{}
+ \sseq@parseargspec@#2\sseq@nil
+ \sseq@eval{\sseq@macro@setthiscall@toks{\the\sseq@macro@defaultarggetters@toks\@nx\sseq@usermacro@esetthiscall{\the\sseq@temptoks}}}
+}
+
+% For NewGroup:
+\let\sseq@parseargspec@normal\sseq@parseargspec
+\def\sseq@parseargspec@newgroup#1#2{%
+ \sseq@tempcount=\z@
+ \sseq@temptoks{}
+ \sseq@macro@defaultarggetters@toks{}%
+ \sseq@parseargspec@#2\sseq@nil
+ \sseq@eval{
+ \sseq@macro@setthiscall@toks{
+ \the\sseq@macro@defaultarggetters@toks
+ \@nx\sseq@esetthiscall{
+ \@nx\@nx\@nx#1
+ \@nx\the\sseq@groupargspectoks
+ \the\sseq@temptoks
+ }
+ \global\sseq@groupthiscalltoks\@nx\@xp{\@nx\the\sseq@thiscalltoks}
+ }
+ }
+}
+
+
+\def\sseq@parseargspec@#1{
+ \advance\sseq@tempcount\@ne
+ \ifx#1\sseq@nil\else
+ \@xp\ifx\csname sseq@parseargspec@#1\@xp\endcsname\relax
+ \sseq@error@n{usermacro-unsupported-argument-type}{#1}
+ \else
+ \csname sseq@parseargspec@#1\@xptwo\endcsname
+ \fi
+ \fi
+}
+
+
+% Have to use \@alph to convert the number to a letter. Using a number here doesn't work because the control sequence gets retokenized
+% so we can only use letters in control sequences (another option would be to not expand the \csnames till later, but that would be harder).
+\def\sseq@parseargspec@ifargisnotdefault{%
+ \@nx\ifx
+ \@xp\@nx\csname sseq@parseargspec@temparg\@alph\sseq@tempcount\endcsname
+ \@xp\@nx\csname sseq@parseargspec@tempdefault\@alph\sseq@tempcount\endcsname
+ \unexpanded{%
+ \@xp\@gobble
+ \else
+ \@xp\@firstofone
+ \fi
+ }%
+}
+
+\def\sseq@parseargspec@setargdefault#1{%
+ \sseq@e@addto@toks\sseq@macro@defaultarggetters@toks{%
+ \def\@xp\@nx\csname sseq@parseargspec@temparg\@alph\sseq@tempcount\endcsname{\sseq@thearg}%
+ \def\@xp\@nx\csname sseq@parseargspec@tempdefault\@alph\sseq@tempcount\endcsname{\unexpanded{#1}}%
+ }
+}
+
+% v, E, and e are illegal
+
+% Mandatory
+\def\sseq@parseargspec@m{%
+ \sseq@e@addto@temptoks{{\@nx\unexpanded{\sseq@thearg}}}
+ \sseq@parseargspec@
+}
+\def\sseq@parseargspec@l{%
+ \sseq@e@addto@temptoks{\@nx\unexpanded{\sseq@thearg}}
+ \sseq@parseargspec@
+}
+
+\def\sseq@parseargspec@u#1{%
+ \sseq@e@addto@temptoks{\@nx\unexpanded{\sseq@thearg}\unexpanded{\unexpanded{#1}}}
+ \sseq@parseargspec@
+}
+
+\def\sseq@parseargspec@U#1{%
+ \sseq@e@addto@temptoks{\@nx\unexpanded{\sseq@thearg}}
+ \sseq@parseargspec@
+}
+
+% Optional no default
+\def\sseq@parseargspec@o{%
+ \sseq@e@addto@temptoks{\@nx\IfNoValueF{\sseq@thearg}{[\@nx\unexpanded{\sseq@thearg}]}}
+ \sseq@parseargspec@
+}
+
+\def\sseq@parseargspec@d#1#2{%
+ \sseq@e@addto@temptoks{\@nx\IfNoValueF{\sseq@thearg}{\@nx\unexpanded{#1\sseq@thearg#2}}}
+ \sseq@parseargspec@
+}
+
+\def\sseq@parseargspec@r#1#2{ % technically required, but behaves like optional
+ \sseq@e@addto@temptoks{#1\@nx\unexpanded{\sseq@thearg}#2}
+ \sseq@parseargspec@
+}
+
+
+\def\sseq@parseargspec@g{%
+ \sseq@e@addto@temptoks{\@nx\IfNoValueF{\sseq@thearg}{\@nx\unexpanded{{\sseq@thearg}}}}
+ \sseq@parseargspec@
+}
+
+\def\sseq@parseargspec@s{%
+ \sseq@e@addto@temptoks{\@nx\IfBooleanT{\sseq@thearg}{*}}
+ \sseq@parseargspec@
+}
+
+\def\sseq@parseargspec@t#1{%
+ \sseq@e@addto@temptoks{\@nx\IfBooleanT{\sseq@thearg}{#1}}
+ \sseq@parseargspec@
+}
+
+% Optional with default
+
+\def\sseq@parseargspec@O#1{
+ \sseq@parseargspec@setargdefault{#1}%
+ \sseq@e@addto@temptoks{\sseq@parseargspec@ifargisnotdefault{\@nx\unexpanded{[\sseq@thearg]}}}%
+ \sseq@parseargspec@
+}
+\def\sseq@parseargspec@D#1#2#3{%
+ \sseq@parseargspec@setargdefault{#3}%
+ \sseq@e@addto@temptoks{\sseq@parseargspec@ifargisnotdefault{\@nx\unexpanded{#1\sseq@thearg#2}}}%
+ \sseq@parseargspec@
+}
+\def\sseq@parseargspec@R#1#2#3{%
+ \sseq@parseargspec@setargdefault{#3}%
+ \sseq@e@addto@temptoks{\sseq@parseargspec@ifargisnotdefault{\@nx\unexpanded{#1\sseq@thearg#2}}}%
+ \sseq@parseargspec@
+}
+\def\sseq@parseargspec@G#1{%
+ \sseq@parseargspec@setargdefault{#1}%
+ \sseq@e@addto@temptoks{\sseq@parseargspec@ifargisnotdefault{\@nx\unexpanded{{\sseq@thearg}}}}%
+ \sseq@parseargspec@
+}
+
+\ExplSyntaxOff
+
+% \ No newline at end of file
diff --git a/graphics/pgf/contrib/spectralsequences/sseqmain.code.tex b/graphics/pgf/contrib/spectralsequences/sseqmain.code.tex
new file mode 100644
index 0000000000..d9429f2215
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqmain.code.tex
@@ -0,0 +1,1700 @@
+%%
+%% Package: spectralsequences v1.2.2
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqmain.code.tex
+%%
+%% Defines the main environments and commands
+%%
+
+
+%%%%%%%
+%%%
+%%% Environment definitions
+%%%
+%%%%%%%
+\def\sseq@usesavedpaths{%
+ \sseq@savedpaths
+ \sseq@clearchangestyles
+ \sseq@tempsavedpaths
+ \gdef\sseq@tempsavedpaths{}%
+}
+
+\sseq@addtostorelist\sseq@savedbackgroundpaths{}
+\sseq@addtostorelist\sseq@restorestyles{}
+
+\def\sseq@page{\protect\sseq@thepage}
+
+
+\def\sseqdata{\@ifnextchar[{\sseqdata@}{\sseqdata@[]}}%}
+
+\def\sseqdata@[#1]{%
+ \edef\sseq@restorefont{\font@name}%
+ \selectfont\nullfont % Avoid space hazards!
+
+ \def\par{}%
+%
+ \ifx\pgfpictureid\@undefined\else %Uh-oh, we're inside tikz.
+ \sseq@error@n{env-inside-tikz}{sseqdata}\@xp\sseq@breakdataenv
+ \fi
+ \ifsseq@inprogress % Uh-oh, we're already in a sseq environment.
+ \sseq@error@n{env-inside-sseq}{sseqdata}\@xp\sseq@breakdataenv
+ \fi
+ \sseq@inprogresstrue
+ \def\sseq@sseqsetdirectory{/sseqpages}
+ \sseq@keepchangestrue
+ \sseq@storelist@setdefaults
+ \let\sseq@xtickfn\@firstofone\let\sseq@ytickfn\@firstofone % These are default functions, which addtostorelist can't handle.
+%
+ \ifx\sseq@xmin@default\sseq@infinity
+ \let\sseq@xminmax\sseq@xminmax@active
+ \fi
+ \ifx\sseq@ymin@default\sseq@infinity
+ \let\sseq@yminmax\sseq@yminmax@active
+ \fi
+ \ifsseq@mathnodes
+ \let\sseq@maybemathswitch=$\@gobble$
+ \fi
+%
+ % copy commands into the user namespace.
+ \sseq@installmacros
+ \sseq@installmsghooks
+ \sseq@install@xparse@Uarggrabber
+ % The behavior of xmax and xmin is very particular, so it's best not to mess with them.
+ % In particular, they shouldn't be expanded until printing no matter what, but we don't want
+ % \pgfmathparse to barf on them. \pgfmathparse really doesn't like engine protected macros,
+ % so in no case should this be engine protected. (Wish we could test an argument for the presence
+ % of engine protected macros). If we try to do that, \sseq@ifpgfmathexpr will break in
+ % \sseq@tikzprimitives@coords@notaclass@handle@.
+ \def\xmin{\protect\sseq@xmin}\def\xmax{\protect\sseq@xmax}
+ \def\ymin{\protect\sseq@ymin}\def\ymax{\protect\sseq@ymax}
+%
+ \sseq@modtikzcommands % Defer evaluation of tikz primitives
+ \sseq@patchfor % patch \foreach to work with deferred macros
+ \pgfkeys{/handlers/first char syntax/the character "/.initial=\sseq@handlequote} % install quotes parsing
+%
+%
+ \pgfqkeys{/sseqpages/global/name only}{#1}
+ \@ifundefined{sseq@thename}{\sseq@error{env-data-no-name}\sseq@breakdataenv}{}
+ \sseq@obj@ifundef{exists}{
+ \sseq@obj@gdef{exists}{}
+ \pgfqkeys{/sseqpages/global}{{\sseq@thename} options/.code={}}
+ }{
+ \ifsseq@updateexisting\else
+ \sseq@error@x{env-data-already-exist}{\sseq@thename}% this could be a warning
+ \fi
+ \sseq@restorestyles
+ \sseq@getcmds
+
+ }
+ \sseq@setsavedpaths{standard}
+%
+ % the default option handler for /sseqpages/global adds to \sseq@currentoptionpath options
+ \let\sseq@currentoptionpath\sseq@thename
+ \pgfqkeys{/sseqpages/global}{#1}
+ \ifx\sseq@targetx\pgfutil@empty\else
+ \sseq@hasdegreetrue
+ \fi
+ \sseq@eval{
+ \global\let\@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
+ \@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
+ }
+ \sseq@savedpaths@xadd{\@nx\sseq@style@object{\sseq@stylelist}}
+ \sseq@savedpaths@add{\begingroup} % prevent some of the two-pass user macros horrors
+ \let\sseq@error@setup\sseq@error@setup@withinfo
+}
+
+% Just store all the settings
+\def\endsseqdata{%
+ \let\sseq@error@setup\sseq@error@setup@noinfo
+ \sseq@checkend{sseqdata}%
+ \sseq@savedpaths@add{\endgroup} % prevent some of the two-pass user macros horrors
+ \xdef\sseq@restorestyles{\sseq@stylelist}%
+ \sseq@storecmds
+ \ignorespacesafterend
+ \sseq@breakpoint
+}
+
+\def\sseqpage{\@ifnextchar[{\sseqpage@}{\sseqpage@[]}} %]
+
+\def\sseqpage@[#1]{%
+ \edef\sseq@restorefont{\font@name}%
+ \selectfont\nullfont % Avoid space hazards!
+ \def\par{}%
+%
+ \ifx\pgfpictureid\@undefined\else %Uh-oh, we're inside tikz.
+ \sseq@error@n{env-inside-tikz}{sseqpage}\@xp\sseq@breakpageenv
+ \fi
+ \ifsseq@inprogress % Uh-oh, we're already in a sseq environment. This is not good.
+ \sseq@error@n{env-inside-sseq}{sseqpage}\@xp\sseq@breakpageenv
+ \fi
+ \sseq@inprogresstrue
+ \sseq@ispageenvtrue
+ \def\sseq@sseqsetdirectory{/sseqpages}
+%
+% \ifsseq@mathnodes
+% \let\sseq@maybemathswitch=$\@gobble$
+% \fi
+%
+ % Copy commands into user namespace
+ \sseq@installmacros
+ \sseq@installmsghooks
+ \sseq@install@xparse@Uarggrabber
+ \def\xmin{\protect\sseq@xmin}\def\xmax{\protect\sseq@xmax}
+ \def\ymin{\protect\sseq@ymin}\def\ymax{\protect\sseq@ymax}
+ \sseq@modtikzcommands % Redefine tikz primitives to store themselves in the appropriate place
+ \sseq@patchfor % Change foreach to record it's variable values in the appropriate places
+ \pgfkeys{/handlers/first char syntax/the character "/.initial=\sseq@handlequote}% install quotes parsing
+%
+ \gdef\sseq@pagecleanup{}% For undoing local option settings
+%
+ \def\sseq@thepage{0}% page defaults to 0
+ \sseq@thepagecount=\z@
+ \pgfqkeys{/sseqpages/global/name only}{#1}% Get the name
+ \sseq@tempiftrue
+ \ifsseq@hasname
+ \sseq@obj@ifundef{exists}{
+ \sseq@error@x{env-page-not-exist}{\sseq@thename} % This could be a warning
+ \sseq@obj@gdef{exists}{}
+ \let\sseq@currentoptionpath\sseq@thename
+ \pgfqkeys{/sseqpages/global}{{\sseq@thename} options/.code={}}
+ \sseq@keepchangestrue
+ \sseq@keepglobaloptionstrue
+ \sseq@setsavedpaths{standard}
+ }{
+ \sseq@restorestyles
+ \sseq@getcmds
+ \ifsseq@keepchanges
+ \sseq@setsavedpaths{standard}
+ \else
+ \sseq@setsavedpaths{temporary}
+ \fi
+ \sseq@tempiffalse
+ \def\sseq@currentoptionpath{this page}
+ \pgfqkeys{/sseqpages/global}{{this page} options/.code={},#1}
+ }
+ \else
+ \edef\sseq@thename{temp@sseq@number@\the\sseq@anonsseqcount}
+ \global\advance\sseq@anonsseqcount1
+ \sseq@setsavedpaths{temporary}
+ \fi
+ \ifsseq@tempif % Either the spectral sequence has no name, or it has a name but no such existed.
+ \sseq@storelist@setdefaults
+ \sseq@savedpaths@xadd{\sseq@stylelist}
+ \let\sseq@currentoptionpath\sseq@thename
+ \pgfqkeys{/sseqpages/global}{{\sseq@thename} options/.code={},{this page} options/.code={},#1}
+ \sseq@eval{
+ \global\let\@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
+ \@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
+ }
+ \fi
+%
+ \ifsseq@specifiedxrange
+ \let\sseq@xminmax\@gobbletwo
+ \else
+ \let\sseq@xminmax\sseq@xminmax@active
+ \fi
+ \ifsseq@specifiedyrange
+ \let\sseq@yminmax\@gobbletwo
+ \else
+ \let\sseq@yminmax\sseq@yminmax@active
+ \fi
+%
+ \sseq@savedpaths@xadd{\sseq@stylelist}
+ \sseq@savedpaths@add{\begingroup} % prevent some of the two-pass user macros horrors
+ \ifx\sseq@targetx\pgfutil@empty\else
+ \sseq@hasdegreetrue
+ \fi
+ \let\sseq@error@setup\sseq@error@setup@withinfo
+}
+
+% Here we do all of the work to actually print the page
+\def\endsseqpage{
+ \let\sseq@error@setup\sseq@error@setup@noinfo
+ \sseq@checkend{sseqpage}
+ \sseq@savedpaths@add{\endgroup} % prevent some of the two-pass user macros horrors
+%
+ \sseq@xscalecm=\sseq@xscale cm
+ \sseq@yscalecm=\sseq@yscale cm
+%
+% check that range is okay
+%
+ \ifx\sseq@xmin\sseq@infinity\sseq@error{no-range}\def\sseq@xmin{0}\def\sseq@xmax{0}\@xp\sseq@break\fi % could be warning
+ \ifx\sseq@ymin\sseq@infinity\sseq@error{no-range}\def\sseq@ymin{0}\def\sseq@ymax{0}\@xp\sseq@break\fi
+ \let\xmin\sseq@xmin
+ \let\xmax\sseq@xmax
+ \let\ymin\sseq@ymin
+ \let\ymax\sseq@ymax
+%
+ \ifnum\numexpr\sseq@xmax-\sseq@xmin\relax>\numexpr\maxdimen/\dimexpr1pt\relax-1\relax
+ \sseq@error@xx{range-super-overflow}{x}
+ {from \sseq@xmin\space to \sseq@xmax\space (xmax - xmin = \the\numexpr\sseq@xmax-\sseq@xmin)}
+ \@xp\sseq@break
+ \fi
+ \ifnum\numexpr\sseq@ymax-\sseq@ymin\relax>\numexpr\maxdimen/\dimexpr1pt\relax-1\relax
+ \sseq@error@xx{range-super-overflow}{y}
+ {from \sseq@ymin\space to \sseq@ymax\space (ymax - ymin = \the\numexpr\sseq@ymax-\sseq@ymin)}
+ \@xp\sseq@break
+ \fi
+%
+ \sseq@tempdimen = \dimexpr \textwidth -\sseq@clip@padding@right - \sseq@xaxis@end@extend - \sseq@xaxis@start@extend - \sseq@yaxisgap \relax
+ \sseq@tempcount = \numexpr \sseq@tempdimen /\sseq@xscalecm \relax
+ \ifnum \numexpr\sseq@xmax-\sseq@xmin + 1 > \sseq@tempcount
+ \pgfmathparse{\sseq@tempdimen/1cm/(\sseq@xmax-\sseq@xmin+1)}
+ \sseq@error@xxxx{range-overflow}{x}
+ {from \sseq@xmin\space to \sseq@xmax\space (xmax - xmin = \the\numexpr\sseq@xmax-\sseq@xmin)}
+ {\the\sseq@tempcount}% max x range
+ {\pgfmathresult}% max xscale
+ %\@xp\sseq@break
+ \fi
+%
+ \sseq@tempdimen = \dimexpr \textheight - \sseq@clip@padding@top - \sseq@yaxis@end@extend - \sseq@yaxis@start@extend - \sseq@xaxisgap \relax
+ \sseq@tempcount = \numexpr \sseq@tempdimen /\sseq@yscalecm \relax
+ \ifnum \numexpr\sseq@ymax-\sseq@ymin +1 > \sseq@tempcount
+ \pgfmathparse{\sseq@tempdimen/1cm/(\sseq@ymax-\sseq@ymin+1)}
+ \sseq@error@xxxx{range-overflow}{y}
+ {from \sseq@ymin\space to \sseq@ymax\space (ymax - ymin = \the\numexpr\sseq@ymax-\sseq@ymin)}
+ {\the\sseq@tempcount}% max x range
+ {\pgfmathresult}% max xscale
+ \@xp\sseq@break
+ \fi
+%
+ % Really this could be anything between -\sseq@xmin and -\sseq@xmax and it wouldn't matter. We'll split the difference.
+ \sseq@xoffset=\numexpr\sseq@intdivceiling{\numexpr-\sseq@xmin-\sseq@xmax\relax}{\numexpr4*\sseq@xgridstep\relax}*(2*\sseq@xgridstep)\relax
+ \sseq@yoffset=\numexpr\sseq@intdivceiling{\numexpr-\sseq@ymin-\sseq@ymax\relax}{\numexpr4*\sseq@ygridstep\relax}*(2*\sseq@ygridstep)\relax
+%
+%
+ \tikzset{
+ z=0pt,
+ every path/.style={},
+ every node/.style={}
+ }
+ \let\errmessage\sseq@errmessage@std
+ \sseq@setlayoutparameters
+ \begin{tikzpicture}[/sseqpages/global/{default} options,\ifsseq@hasname/sseqpages/global/{\sseq@thename} options\fi,/sseqpages/global/{this page} options]%
+ \sseq@sseqstyle@globalpart
+ \sseq@globaldetonetransform
+ \sseq@globalscaletransform
+%
+ \let\sseq@transform\sseq@error@illegaltransform % Disallow most coordinate transforms
+ \let\sseq@shifttransform\sseq@checkshifttransform % Allow shifts as long as they are by integers and have no units.
+%
+ \sseq@setupclip
+%
+ \sseq@patchtikzcoords
+%
+ \pgfonlayer{background}%
+ % Axes labels only occur once per page, so the cost of typesetting them with tikz doesn't matter ... THANK GOD
+ \ifx\sseq@title\pgfutil@empty\else
+ \ifsseq@drawtitle
+ \sseq@eval{\@nx\path (0,-\sseq@yoffset) node[
+ /sseqpages/global/every title,
+ above=\sseq@topclippadding+5pt
+ ] {\unexpanded\expandafter{\sseq@title}};
+ }
+ \fi
+ \fi
+ % Don't touch the shifts -- they are very persnickety.
+ \ifx\sseq@xaxislabel\pgfutil@empty\else\ifsseq@drawxaxislabel
+ \sseq@eval{\noexpand\node[
+ align=center,
+ /sseqpages/global/every x axis label,
+ below,
+ shift={\sseq@xlabelposition},
+ ] {\unexpanded\expandafter{\sseq@xaxislabel}};}
+ \fi\fi
+ \ifx\sseq@yaxislabel\pgfutil@empty\else\ifsseq@drawyaxislabel
+ \sseq@eval{\noexpand\node[
+ align=center,
+ /sseqpages/global/every y axis label,
+ above,
+ rotate=90,
+ shift={\sseq@ylabelposition},
+ ] {\unexpanded\expandafter{\sseq@yaxislabel}};}
+ \fi\fi
+%
+ \sseq@grid
+ \sseq@handlexaxis % Draw the axis with pgf primitives. These are defined in sseqdrawing.code.tex
+ \sseq@handleyaxis
+ \endpgfonlayer
+%
+ \ifsseq@mathnodes
+ \tikzset{execute at begin node=$,execute at end node=$}%
+ \fi
+%
+ \begingroup
+ \sseq@savedbackgroundpaths
+ \endgroup
+%
+ \sseq@useclip
+%
+ \ifsseq@drawdifferentials\else
+ \let\sseq@differential@object\@gobble
+ \fi
+ \ifsseq@drawstructlines\else
+ \let\sseq@structline@object\@gobble
+ \fi
+%
+ \sseq@usesavedpaths
+%
+ \ifsseq@keepchanges
+ \xdef\sseq@restorestyles{\sseq@stylelist}
+ \fi
+ \end{tikzpicture}%
+ \ifsseq@keepchanges
+ \sseq@storecmds % store changes
+ \else
+ \sseq@pagecleanup % undo any changes specific to this page
+ \fi
+ \sseq@breakpoint
+ \ignorespacesafterend
+}
+
+% Shorthand for sseqpage with empty body
+\def\printpage[#1]{%
+ \begin{sseqpage}[#1]%
+ \end{sseqpage}%
+}
+
+
+\def\SseqCopyPage#1#2#3{
+ \begingroup
+ \def#1{\begingroup}
+ \global\let\sseq@copymacro\empty
+ \def\sseq@thename{#2}
+ \global\let\sseq@savedpaths@save\sseq@savedpaths
+ \sseq@storelist@get\sseq@savedpaths
+ \def\sseq@thepage{#3}
+ \sseq@thepagecount=#3\relax
+ \def\sseq@beginscope@object{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@beginscope@object}}}
+ \def\sseq@endscope@object{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@endscope@object}}}
+ \def\sseq@scope@object##1{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@scope@object{##1}}}}
+ \def\sseq@style@object##1{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@style@object{##1}}}}
+ \let\sseq@class@drawnode\sseq@copypage@addclass
+ \let\sseq@differential@object\@gobble
+ \let\sseq@structline@draw\sseq@copypage@addstructline
+ \let\sseq@tikzpath@object\@gobble
+ \let\sseq@pgfkeysdocommand\@gobbletwo
+ \sseq@savedpaths
+ \sseq@g@addto@macro#1{\endgroup}
+ \endgroup
+ \@xp\let\csname\sseq@macroname#1 copiedcode\endcsname\sseq@copymacro
+ \DeclareSseqGroup #1 {} { \csname\sseq@macroname#1 copiedcode\endcsname }
+ \let\sseq@savedpaths\sseq@savedpaths@save
+}
+
+\def\sseq@copypage@addclass#1{
+ \sseq@x@addto@macro\sseq@copymacro{\@nx\sseq@class@copy{\sseq@thename}{#1}}
+}
+
+\def\sseq@copypage@addstructline#1{
+ \sseq@x@addto@macro\sseq@copymacro{\@nx\sseq@structline@copy{\sseq@thename}{#1}}
+}
+
+
+%%% Scope
+\newcount\sseq@scope@savestackid
+\def\sseq@scope@secondpasstoks{}
+\def\sseq@scope{\@ifnextchar[{\sseq@scope@}{\sseq@scope@[]}}%]
+\def\sseq@scope@[#1]{%
+ \sseq@scope@savedpaths@add{\sseq@beginscope@object}%
+ % This is a funky hack to fix a problem with shifts. On tmfass, if we don't handle shifts specially, we actually put so much stuff into
+ % this \sseq@scope@secondpasstoks macro that we exceed TeX's upper bound for the maximum total macro memory. Or something like that -- I don't understand the error,
+ % but it definitely only depends on how much stuff there is overall and on there being lots of scopes, not on any particular part of the diagram.
+ % Anyways, to avoid this excessive storage demand, we don't put the shifts into the scope toks and apply them tons of times, we just do them once.
+ \let\sseq@options@scopeshiftsecondpass\sseq@scope@savedpaths@add
+ \sseq@processoptions{scope}{#1}% outputs into \sseq@savedoptioncode
+ \edef\sseq@scope@secondpasstoks{\unexpanded\@xp{\sseq@scope@secondpasstoks}\unexpanded\@xp{\sseq@savedoptioncode}}
+ \sseq@eval{\@nx\sseq@scope@savedpaths@add{\@nx\sseq@scope@object{\sseq@scope@toks{\unexpanded\@xp{\sseq@scope@secondpasstoks}}}}}%
+ %\advance\sseq@scope@savestackid\@ne
+ %\sseq@savestack@name{scope@save\the\sseq@scope@savestackid}
+}
+\def\sseq@endscope{%
+ \sseq@scope@savedpaths@add{\sseq@endscope@object}
+ %\sseq@restorestack@name{scope@save\the\sseq@scope@savestackid
+}
+
+
+
+
+
+
+
+\protected\def\sseq@xcoord{}\protected\def\sseq@ycoord{}
+
+
+%%% "Quick" commands for "compiled" code.
+\def\sseq@qclass(#1,#2){
+ \sseq@obj@inccheckdef{partcoord.(#1,#2).numnodes}
+ \edef\tempn{\sseq@obj{partcoord.(#1,#2).numnodes}}
+ \edef\classname{class.(#1,#2,\tempn)}
+ \sseq@obj@xdef{\classname.n}{\tempn}
+ \sseq@obj@xdef{\classname.num}{0}
+ \sseq@obj@xdef{\classname[0].page}{\sseq@infinity}
+ \sseq@savedpaths@addclass{class.(#1,#2,\tempn)}
+}
+\def\sseq@qclassnamed(#1,#2)#3{
+ \sseq@qclass(#1,#2)
+ \def\sseq@class@name{#3}
+ \sseq@obj@xdef{\classname[0].name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{#1,#2,\tempn}
+}
+
+\def\sseq@qdnamed#1(#2)(#3){\sseq@eval{\@nx\sseq@qd#1(\sseq@obj{class.namedclass.\detokenize{#2}})(\sseq@obj{class.namedclass.\detokenize{#3}})}}
+\def\sseq@qd#1(#2,#3,#4)(#5,#6,#7){
+ \bgroup
+ \def\sseq@dname{d.#1(#2,#3,#4)(#5,#6,#7)}
+ \def\source{(#2,#3,#4)}
+ \def\target{(#5,#6,#7)}
+ \sseq@obj@gdef{\sseq@dname.page}{#1}
+ \sseq@obj@gdef{\sseq@dname.source}{(#2,#3,#4)}
+ \sseq@obj@gdef{\sseq@dname.target}{(#5,#6,#7)}
+ \sseq@d@setpageminrec{class.\source}{#1}{source}% automatically handles \sseq@cleanup@obj
+ \sseq@d@setpageminrec{class.\target}{#1}{target}
+ \sseq@savedpaths@adddifferential{\sseq@dname}
+ \egroup
+}
+
+\def\sseq@qstructlinenamed(#1)(#2){\sseq@eval{\@nx\sseq@qstructline(\sseq@obj{class.namedclass.\detokenize{#1}})(\sseq@obj{class.namedclass.\detokenize{#2}})}}
+\def\sseq@qstructline(#1,#2,#3)(#4,#5,#6){
+ \def\source{(#1,#2,#3)}
+ \def\target{(#4,#5,#6)}
+ \sseq@obj@xdef{structline.\source\target.num}{0}
+ \def\sseq@pagemin{0}
+ \edef\sseq@structlinename{structline.\source\target[\sseq@obj{structline.\source\target.num}]}
+ \sseq@cleanup@obj{\sseq@structlinename.page}
+ \sseq@obj@xdef{\sseq@structlinename.page}{\sseq@infinity}
+ \sseq@obj@xdef{\sseq@structlinename.pagemin}{\sseq@pagemin}
+ \sseq@obj@xdef{\sseq@structlinename.source}{\source}
+ \sseq@obj@xdef{\sseq@structlinename.target}{\target}
+ \sseq@class@adddependence{class.\source}{\sseq@structlinename}% If the source or target is already dead, this will set structlinename.page
+ \sseq@class@adddependence{class.\target}{\sseq@structlinename}
+ \sseq@savedpaths@addstructline{structline.\source\target}
+ %\sseq@cleanup@obj{\sseq@structlinename.options}
+ %\sseq@obj@xdef{\sseq@structlinename.options}{\ifsseq@needstikz\@nx\sseq@needstikztrue\fi\unexpanded\@xp{\sseq@savedoptioncode}}
+}
+
+
+%%%%%
+%%
+%% The main commands
+%%
+%%%%%
+%%% \class, \classoptions, \replaceclass
+\sseq@DeclareDocumentCommand\class{or()}{%
+ \begingroup
+ \sseq@loadinputline
+ \IfNoValueT{#2}{\sseq@break}
+ \sseq@xsetthiscall{\string\class\IfNoValueF{#1}{[\unexpanded{#1}]}\unexpanded{(#2)}}%
+ \sseq@options@firstpassmode
+ \the\sseq@sseqstyle
+ \the\sseq@classstyle
+ \the\sseq@scope@toks
+ \sseq@options@normalmode
+ \IfNoValueF{#1}{%
+ \sseq@processoptions{class}{#1}% Outputs result into \sseq@savedoptioncode
+ }%
+%
+ \@ifundefined{sseq@class@page}{}{\sseq@error@xxx{cmdoptions-only}{page} {\string\class}{\string\classoptions}}% could be warnings
+ \@ifundefined{sseq@gen} {}{\sseq@error@xxx{cmdoptions-only}{generation}{\string\class}{\string\classoptions}}
+%
+ \sseq@cparsecoord{#2}{}%
+ \ifnum\csname sseq@\sseq@classpattern @maxclasses\endcsname<\nodenum\relax
+ \sseq@error@xxxx{classpattern-too-many-classes}{(\partialcoord)}{\nodenum}{\sseq@classpattern}{\@xp\the\csname sseq@\sseq@classpattern @maxclasses\endcsname}
+ \sseq@breakfi
+ \fi
+%%%% No more breaks after this point
+
+ \sseq@processlabels % This sets up the label nodes, now that we know the position of the class (I think that's what we needed?)
+ \sseq@class@main % We segment off the main part of the class so that we can call it separately from the copy method
+ \sseq@breakpoint
+ \endgroup
+}
+%
+\def\sseq@class@main{
+ \ifx\sseq@classinsert\empty
+ % by default, just insert to the right of previous classes
+ \edef\sseq@classinsert{\nodenum}
+ \else
+ \ifnum\sseq@classinsert<\z@
+ % negative 1 is where we would normally insert things
+ \edef\sseq@classinsert{\the\numexpr\nodenum+\sseq@classinsert+1}
+ \fi
+ \ifnum\sseq@classinsert<\@ne
+ \def\sseq@classinsert{1}
+ \fi
+ \ifnum\sseq@classinsert>\nodenum\relax
+ \edef\sseq@classinsert{\nodenum}
+ \fi
+ \ifnum\nodenum>\@ne
+ \@xp\sseq@class@adjustclasses\@xp{\partialcoord} % Adjust all of the indices of the classes to the right of the one we're inserting
+ \fi
+ \fi
+%
+%
+ \sseq@xminmax{\xcoord}{\ycoord}%
+ \sseq@yminmax{\xcoord}{\ycoord}%
+ \sseq@cleanup@obj{partcoord.(\partialcoord).numnodes}%
+ \sseq@obj@xdef{partcoord.(\partialcoord).numnodes}{\nodenum}%
+ \edef\classname{class.\coord[0]}%
+ \ifx\sseq@class@tag\pgfutil@empty\else
+ \sseq@obj@ifdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{
+ \sseq@error@xx{class-tag-already-defined}{\sseq@class@tagprefix\sseq@class@tag}{(\partialcoord)}% could be warning
+ }{}
+ \sseq@cleanup@obj{class.\coord.tag}
+ \sseq@obj@xdef{class.\coord.tag}{\sseq@class@tagprefix\sseq@class@tag}
+ \sseq@cleanup@obj{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}
+ \sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
+ \fi
+ \ifx\sseq@class@name\pgfutil@empty\else
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
+ \fi
+ \sseq@pushstack@\coord
+%
+%
+ \sseq@obj@gdef{class.\coord.num}{0}% For \replaceclass
+ \sseq@obj@xdef{\classname.page}{\sseq@infinity}%
+ \sseq@obj@xdef{class.\coord.n}{\sseq@classinsert}
+ \ifx\sseq@familylist\pgfutil@empty\else
+ \sseq@obj@xodef{\classname.familylist}{\sseq@familylist}
+ \fi
+ \ifx\sseq@savedoptioncode\pgfutil@empty\else
+ \sseq@obj@xodef{\classname.options}{\sseq@savedoptioncode}%
+ \fi
+ \ifx\sseq@classnodetext\pgfutil@empty\else
+ \sseq@obj@xodef{\classname.nodetext}{\sseq@classnodetext}
+ \fi
+ \ifx\sseq@classnodetextoptions\pgfutil@empty\else
+ \sseq@obj@xodef{\classname.nodetext.options}{\sseq@classnodetextoptions}
+ \fi
+ \ifx\sseq@classlabelnodes\pgfutil@empty\else
+ \sseq@obj@xodef{\classname.labelnodes}{\sseq@classlabelnodes}%
+ \fi
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
+ \ifsseq@needstikz
+ \sseq@obj@xdef{\classname.needstikz}{\sseq@needstikztrue}%
+ \fi
+ \@ifundefined{sseq@tempoffset}{}{%
+ \tikz@scan@one@point\sseq@setoffset\sseq@tempoffset
+ }%
+ \ifx\sseq@tooltip\pgfutil@empty\else
+ \sseq@obj@protectedxdef{\classname.tooltip}{\sseq@tooltip}
+ \fi
+%
+ \sseq@savedpaths@addclass{class.\coord}%
+}
+\def\sseq@setoffset#1{\sseq@obj@gdef{\classname.offset}{\pgftransformshift{#1}}}
+
+\def\sseq@copy@nameprefix{}
+
+\def\sseq@class@copy#1#2{
+ \begingroup
+ \let\sseq@thename@saved\sseq@thename
+ \def\sseq@thename{#1}
+ \sseq@lettoobj\sseq@familylist{#2.familylist}
+ \sseq@lettoobj\sseq@savedoptioncode{#2.options}
+ \sseq@lettoobj\sseq@classnodetext{#2.nodetext}
+ \sseq@lettoobj\sseq@classnodetextoptions{#2.nodetext.options}
+ \sseq@lettoobj\sseq@classlabelnodes{#2.labelnodes}
+ \sseq@obj@ifdef{#2.showname}{\sseq@lettoobj\sseq@class@showname{#2.showname}}{}
+ \sseq@lettoobj\sseq@class@name{#2.name}
+ \edef\sseq@class@name{\unexpanded\@xp{\sseq@copy@nameprefix}\unexpanded\@xp{\sseq@class@name}}
+ \sseq@obj{#2.needstikz}
+ \sseq@lettoobj\sseq@tooltip{#2.tooltip}
+ \sseq@class@getparts#2.
+ \sseq@quieterror{class-tag-already-defined}
+ \edef\sseq@class@tag{copiedfrom\sseq@thisposnum}
+ \let\sseq@thename\sseq@thename@saved
+ \sseq@eval{\@nx\sseq@cparsecoord{\the\sseq@tempx,\the\sseq@tempy}}
+ \let\sseq@pushstack@\@gobble
+ \sseq@class@main
+ \endgroup
+}
+
+
+% This is for use with "insert" key. Add one to offset index of each class later than the one currently being inserted
+% Takes the partial coordinate "x,y" in #1, and the position that the new class is being inserted into in \sseq@classinsert.
+\def\sseq@class@adjustclasses#1{
+ \sseq@tempcount=\z@
+ \sseq@tempcountb=\sseq@obj{partcoord.(#1).numnodes}
+ \loop
+ \advance\sseq@tempcount\@ne
+ \ifnum\sseq@obj{class.(#1,\the\sseq@tempcount).n}<\sseq@classinsert\relax\else
+ \sseq@cleanup@obj{class.(#1,\the\sseq@tempcount).n}
+ \sseq@eval{\@nx\sseq@obj@inc{class.(#1,\the\sseq@tempcount).n}} % unfortunately, \sseq@obj@inc uses \sseq@tempcount so we need this eval
+ \fi
+ \ifnum\sseq@tempcount<\sseq@tempcountb\repeat
+
+}
+
+\sseq@DeclareDocumentCommand\classoptions{od()}{%
+ \begingroup
+ \sseq@loadinputline
+ \sseq@xsetthiscall{\string\classoptions\IfNoValueF{#1}{[\unexpanded{#1}]}\unexpanded{(#2)}}%
+ \IfNoValueT{#1}{\sseq@error@x{cmdoptions-without-options}{\string\classoptions}\sseq@break}% could be warning
+ \sseq@options@firstpassmode
+ \the\sseq@sseqstyle
+ \the\sseq@classstyle
+ \the\sseq@scope@toks
+ \sseq@options@normalmode
+ \let\sseq@processlabels\sseq@processlabels@default % Don't double dip on labels from the scope or classstyle
+ \sseq@processoptions{class}{#1}% Outputs result into \sseq@savedoptioncode
+%
+ \IfNoValueTF{#2}{
+ \def\sseq@coord{\lastclass0}
+ }{
+ \def\sseq@coord{#2}
+ }
+ \sseq@parsecoord\coord{\sseq@coord}{\string\classoptions}%
+%
+ \sseq@processlabels
+%
+ \let\partialcoord\coord@partial
+ \edef\sseq@classnum{\sseq@obj@ifdef{class.\coord.num}{\sseq@obj{class.\coord.num}}{0}}
+ \@ifundefined{sseq@class@page}{%
+ \@ifundefined{sseq@gen}{
+ \@ifundefined{sseq@thepage}{
+ \let\sseq@gen\sseq@classnum
+ }{
+ \sseq@obj@pagetogen{class.\coord}{\sseq@thepage} % stores in \sseq@gen
+ }
+ \let\sseq@genmax\sseq@gen
+ }{
+ \ifnum\sseq@gen<\z@
+ \edef\sseq@gen{\the\numexpr\sseq@classnum+\sseq@gen+1}
+ \fi
+ \@ifundefined{sseq@genmax}{\let\sseq@genmax\sseq@gen}{
+ \edef\sseq@genmax{\the\numexpr\sseq@classnum+\sseq@genmax+1}
+ }
+ }
+ }{
+ \@ifundefined{sseq@gen}{}{\sseq@error{classoptions-page-gen}}% This could be a warning
+ \sseq@class@getgen{\sseq@class@page}
+ \@ifundefined{sseq@class@pagemax}{
+ % If no max is present, apply options to all pages starting at specified minimum
+ \let\sseq@genmax\sseq@classnum%
+ \let\sseq@class@pagemax\sseq@infinity % ensure if "page" is defined, "pagemax" is defined too
+ }{
+ \let\sseq@genmin\sseq@gen
+ \sseq@class@getgen{\sseq@class@pagemax}
+ \let\sseq@genmax\sseq@gen
+ \let\sseq@gen\sseq@genmin
+ }
+ \edef\sseq@class@page{\the\numexpr\sseq@class@page-\@ne}
+ \edef\sseq@class@pagemax{\the\numexpr\sseq@class@pagemax+\@ne}
+ }
+ \ifnum\sseq@gen=\m@ne
+ \let\sseq@gen\sseq@classnum
+ \fi
+ \edef\classname{class.\coord[\sseq@gen]}
+ \ifsseq@keepchanges\else
+ \ifnum\sseq@thepagecount>\sseq@obj{\classname.page}\relax
+ \sseq@error@xxx{classoptions-already-dead}{\sseq@gen}{\coordname}{\sseq@obj{\classname.page}}
+ \sseq@breakfifi
+ \fi
+ \ifnum\sseq@gen>\z@
+ \ifnum\sseq@thepagecount>\sseq@obj{class.\coord[\the\numexpr\sseq@gen-\@ne].page}\relax\else
+ \sseq@error@xx{classoptions-not-yet-born}{\sseq@gen}{\coord}{\sseq@class@page}%
+ \sseq@breakfififi
+ \fi
+ \fi
+ \fi{}
+ \ifx\sseq@class@tag\pgfutil@empty\else
+ \sseq@obj@ifdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{%
+ \sseq@error@nn{class-tag-already-defined}{\sseq@class@tagprefix\sseq@class@tag}{\sseq@partialcoord}% could be warning
+ }%
+ \sseq@cleanup@obj{class.\coord.tag}%
+ \sseq@obj@xdef{class.\coord.tag}{\sseq@class@tagprefix\sseq@class@tag}%
+ \sseq@cleanup@obj{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}%
+ \sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\sseq@index}%
+ \fi
+ \ifx\sseq@class@name\pgfutil@empty\else
+ \sseq@obj@ifdef{\classname.name}{
+ \sseq@error@nn{classoptions-class-already-named}{\coord}{\sseq@obj{\classname.name}}%could be warning
+ }{}
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
+ \fi
+ \sseq@tempcount=\sseq@gen\relax
+ \advance\sseq@tempcount\m@ne
+ \loop
+ \advance\sseq@tempcount\@ne
+ \edef\classname{class.\coord[\the\sseq@tempcount]}
+ \sseq@cleanup@obj{\classname.options}
+ \sseq@classoptions@setup@pagerange
+ \sseq@classoptions@obj@addto@withpagerange{\classname.options}{\sseq@savedoptioncode}
+ %
+ \ifx\sseq@classnodetext\pgfutil@empty\else
+ \sseq@cleanup@obj{\classname.nodetext}
+ \@ifundefined{sseq@class@page}{}{
+ \sseq@obj@xdef{\classname.nodetext}{
+ \@nx\ifnum\@nx\sseq@thepagecount<\the\numexpr\sseq@class@page+1\relax\relax
+ \unexpanded\@xptwo{\csname \sseq@obj@fullname{\classname.nodetext}\endcsname\fi}
+ }
+ }
+ \sseq@classoptions@obj@addto@withpagerange{\classname.nodetext}{\sseq@classnodetext}
+ \fi
+ \ifx\sseq@classnodetextoptions\pgfutil@empty\else
+ \sseq@cleanup@obj{\classname.nodetext.options}
+ \sseq@classoptions@obj@addto@withpagerange{\classname.nodetext.options}{\sseq@classnodetextoptions}
+ \fi
+ \ifx\sseq@classlabelnodes\pgfutil@empty\else
+ \sseq@cleanup@obj{\classname.labelnodes}
+ \sseq@classoptions@obj@addto@withpagerange{\classname.labelnodes}{\sseq@classlabelnodes}
+ \fi
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
+ \ifx\sseq@familylist\pgfutil@empty\else
+ \sseq@cleanup@obj{\classname.familylist}
+ \sseq@classoptions@obj@addto@withpagerange{\classname.familylist}{\sseq@familylist}
+ \fi
+ \@ifundefined{sseq@tempoffset}{}{
+ \sseq@cleanup@obj{\classname.offset}
+ \tikz@scan@one@point\sseq@setoffset\sseq@tempoffset
+ }
+ \ifnum\sseq@tempcount<\sseq@genmax\repeat
+ \sseq@breakpoint
+ \endgroup
+}
+\def\sseq@classoptions@setup@pagerange{%
+ \@ifundefined{sseq@class@page}{
+ \def\sseq@classoptions@obj@addto@withpagerange@{\sseq@obj@gaddto{\sseq@tempobj}}
+ }{
+ \def\sseq@temp##1{##1}
+ \ifnum\sseq@tempcount=\sseq@gen\relax
+ \sseq@eval{\@nx\pretocmd\@nx\sseq@temp{\@nx\ifnum\sseq@thepagecount>\sseq@class@page\relax}{}{%
+ \@nx\sseq@error@x{this-shouldnt-happen}{file main, function \string\sseq@classoptions@setup@pagerange}
+ }}%
+ \apptocmd\sseq@temp{\fi}{}{\sseq@error@x{this-shouldnt-happen}{file main, function \string\sseq@classoptions@setup@pagerange}}
+ \fi
+ \ifnum\sseq@tempcount=\sseq@genmax\relax
+ \sseq@eval{\@nx\pretocmd\@nx\sseq@temp{\@nx\ifnum\sseq@thepagecount<\sseq@class@pagemax\relax}{}{\@nx\sseq@error@internal{}}}
+ \apptocmd\sseq@temp{\fi}{}{\sseq@error@internal{this-shouldnt-happen}{file main, function \string\sseq@classoptions@setup@pagerange}}
+ \fi
+ \@xp\def\@xp\sseq@temp\@xp##\@xp1\@xp{\@xp{\sseq@temp{##1}}}
+ \pretocmd\sseq@temp{\sseq@obj@gaddto{\sseq@tempobj}}{}{\sseq@error@internal{this-shouldnt-happen}{file main, function \string\sseq@classoptions@setup@pagerange}}
+ \let\sseq@classoptions@obj@addto@withpagerange@\sseq@temp
+ }
+}
+\def\sseq@classoptions@obj@addto@withpagerange#1#2{%
+ \def\sseq@tempobj{#1}%
+ \@xp\sseq@classoptions@obj@addto@withpagerange@\@xp{#2}%
+}
+\def\sseq@class@getgen#1{
+ \bgroup
+ \ifnum\sseq@classnum>\z@
+ \sseq@eval{\unexpanded{\sseq@obj@pagetogen{class.\coord}}{#1}} % stores in \sseq@gen
+ \else
+ \def\sseq@gen{0}
+ \fi
+ \sseq@smuggle@macro\sseq@gen
+ \egroup
+}
+
+\sseq@DeclareDocumentCommand\replaceclass{od()}{%
+ \begingroup
+ \sseq@loadinputline
+ \sseq@xsetthiscall{\string\replaceclass\IfNoValueF{#1}{[\unexpanded{#1}]}\unexpanded{(#2)}}
+%
+ \IfNoValueTF{#2}{
+ \def\sseq@coord{\lastclass0}
+ }{
+ \def\sseq@coord{#2}
+ }
+ \sseq@parsecoord\coord{\sseq@coord}{coordinate passed to \string\replaceclass}%
+ \sseq@replaceclassmain{#1}
+}
+
+\sseq@DeclareDocumentCommand\replacesource{o}{
+ \begingroup
+ \sseq@loadinputline
+ \sseq@xsetthiscall{\string\replacesource\IfNoValueF{#1}{[\unexpanded{#1}]}}
+ \sseq@parsedcoord@restore{\coord}{lastsource}
+ \sseq@replaceclassmain{#1}
+}
+
+\sseq@DeclareDocumentCommand\replacetarget{o}{
+ \begingroup
+ \sseq@loadinputline
+ \sseq@xsetthiscall{\string\replacetarget\IfNoValueF{#1}{[\unexpanded{#1}]}}
+ \sseq@parsedcoord@restore{\coord}{lasttarget}
+ \sseq@replaceclassmain{#1}
+}
+
+\def\sseq@replaceclassmain#1{
+ \sseq@options@firstpassmode
+ \the\sseq@sseqstyle
+ \the\sseq@classstyle
+ \the\sseq@scope@toks
+ \sseq@options@normalmode
+ \IfNoValueF{#1}{%
+ \sseq@processoptions{class}{#1}% Outputs result into \sseq@savedoptioncode
+ }%
+ \sseq@processlabels
+ \sseq@obj@ifundef{class.\coord.num}{\sseq@error@x{replaceclass-no-class}{\coordname}\sseq@break}{}
+ \sseq@ifdead\coord{}{\sseq@error@x{replaceclass-not-dead-yet}{\coordname}\sseq@break}
+%
+ \edef\oldclassname{class.\coord[\sseq@obj{class.\coord.num}]}
+ \sseq@cleanup@obj{class.\coord.num}
+ \sseq@obj@inc{class.\coord.num}
+ \edef\classname{class.\coord[\sseq@obj{class.\coord.num}]}
+%
+ \ifsseq@keepchanges\else
+ \ifnum\the\numexpr\sseq@obj{\oldclassname.page}<\sseq@thepagecount\else
+ \edef\sseq@temp{\sseq@obj{\oldclassname.page}}
+ \sseq@error@xxx{replaceclass-no-effect-on-this-page}{\coord}{\sseq@temp}{\the\numexpr\sseq@temp+\@ne}% warning
+ \sseq@breakfifi
+ \fi
+ \fi
+%
+ \let\partialcoord\coord@partial
+ \ifx\sseq@class@tag\pgfutil@empty\else
+ \sseq@obj@ifdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{%
+ \sseq@error@nn{class-tag-already-defined}{\sseq@class@tagprefix\sseq@class@tag}{\sseq@partialcoord}% could be warning
+ }{}%
+ \sseq@cleanup@obj{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}%
+ \sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
+ \fi
+ \ifx\sseq@class@name\pgfutil@empty
+ \sseq@obj@ifdef{\oldclassname.name}{
+ \sseq@lettoobj\sseq@class@name{\oldclassname.name}
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
+ }{}
+ \else
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
+ \fi
+ \let\partialcoord\coord@partial
+ \ifx\sseq@class@tag\pgfutil@empty\else
+ \sseq@obj@ifdef{partialcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{%
+ \sseq@error@nn{class-tag-already-defined}{\sseq@class@tagprefix\sseq@class@tag}{\sseq@partialcoord}% could be warning
+ }{}%
+ \sseq@obj@xdef{partialcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
+ \fi
+%
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
+ \sseq@obj@xodef{\classname.familylist}{\sseq@familylist}
+ \sseq@obj@xdef{\classname.page}{\sseq@infinity}
+ \sseq@obj@xodef{\classname.options}{\sseq@savedoptioncode}
+ \ifx\sseq@classnodetext\pgfutil@empty\else
+ \sseq@obj@xodef{\classname.nodetext}{\sseq@classnodetext}
+ \fi
+ \ifx\sseq@classnodetextoptions\pgfutil@empty\else
+ \sseq@obj@xodef{\classname.nodetext.options}{\sseq@classnodetextoptions}
+ \fi
+ \sseq@obj@xodef{\classname.labelnodes}{\sseq@classlabelnodes}
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
+ \sseq@obj@gdef{\classname.dependencies}{}
+ \ifsseq@needstikz
+ \sseq@obj@xdef{\classname.needstikz}{\sseq@needstikztrue}
+ \fi
+ \@ifundefined{sseq@tempoffset}{}{\tikz@scan@one@point\sseq@setoffset\sseq@tempoffset}
+%
+ \sseq@breakpoint
+ \endgroup
+}
+\def\sseq@class@draw@ifpage#1{
+ \bgroup
+ \sseq@obj@pagetogen{#1}{\sseq@thepage} % sets \sseq@gen
+ \ifnum\sseq@gen>\m@ne % -1 means no class to print
+ \ifnum\sseq@obj{#1[\sseq@gen].page}=\sseq@thepagecount
+ \sseq@thispagetrue
+ \fi
+ \sseq@drawtrue
+ \sseq@obj{#1[\sseq@gen].familylist}
+ \ifsseq@draw
+ \sseq@gsetthiscall{class #1}
+ \sseq@class@drawnode{#1[\sseq@gen]}
+ \fi
+ \fi
+ \egroup
+}
+
+% #1 -- object
+% #2 -- page
+% If there is a class #1 drawn on page #2, set \sseq@gen to be the generation of that class, otherwise set \sseq@gen to be -1.
+\def\sseq@obj@pagetogen#1#2{
+ \bgroup
+ \def\sseq@gen{-1}
+ \sseq@tempcount=\m@ne
+ \sseq@tempcountb=\sseq@obj{#1.num}\relax
+ \loop
+ \advance\sseq@tempcount\@ne
+ \ifnum\sseq@obj{#1[\the\sseq@tempcount].page}<#2\relax\else
+ \edef\sseq@gen{\the\sseq@tempcount}
+ \sseq@tempcount=\sseq@tempcountb\relax
+ \fi
+ \ifnum\sseq@tempcount<\sseq@tempcountb\repeat
+ \sseq@smuggle@macro\sseq@gen
+ \egroup
+}
+%%%
+%%% \kill, \d and \doptions
+%%%
+
+% Because \kill doesn't take options, there's no need to use \sseq@DeclareDocumentCommand for the outer command.
+% Rather than use \sseq@DeclareDocumentCommand with no arguments, we just do the normal stuff that \sseq@DeclareDocumentCommand would do,
+% Then call \sseq@d@grabpage, the command that is responsible for handling the strange syntax of the page argument for \d.
+\protected\def\sseq@kill{%
+ \begingroup
+ \sseq@setinputline % These two lines normally would happen inside of \sseq@DeclareDocumentCommand.
+ \sseq@loadinputline
+ \sseq@d@grabpage\sseq@kill@
+}
+
+
+% Now we need to parse a potential coordinate.
+\sseq@DeclareDocumentCommandAs\sseq@kill@\kill {d()} {
+ \sseq@xsetthiscall{\string\kill\unexpanded\@xp{\sseq@dpage}\IfNoValueF{#1}{(#1)}}%
+ \sseq@parsecoord\coordinate{\IfNoValueTF{#1}{\lastclass}{#1}}{}%
+ \sseq@parsedcoord@save{lastsource}{\coordinate}
+ \sseq@parsedcoord@save{lasttarget}{\coordinate}
+ \sseq@ifintexpr{\sseq@dpage}{%
+ \sseq@tempcount=\numexpr\sseq@dpage\relax % this is a convenient way to get rid of spaces because #3 has to be a number
+ }{%
+ \sseq@error@x{d-invalid-page}{\unexpanded\@xp{\sseq@dpage}}\sseq@break%
+ }%
+ \sseq@eval{\@nx\sseq@d@setpageminrec{class.\coordinate}{\the\sseq@tempcount}{coordinate}}% automatically handles \sseq@cleanup@obj
+ \sseq@breakpoint
+ \endgroup
+}
+
+% \sseq@d@grabpage is defined in sseqparsers.
+\sseq@DeclareDocumentCommand\d{o}{%
+ \begingroup
+ \sseq@loadinputline
+ \def\sseq@dtype{d}
+ \def\sseq@d@theoptions{#1}
+ \sseq@d@grabpage\sseq@d@
+}
+
+\sseq@DeclareDocumentCommand\doptions{o}{%
+ \begingroup
+ \sseq@loadinputline
+ \def\sseq@dtype{doptions}
+ \def\sseq@d@theoptions{#1}
+ \sseq@d@grabpage\sseq@d@
+}
+
+\def\sseq@d@{
+ \ifsseq@tempif
+ \csname sseq@\sseq@dtype @grabcoord\@xp\endcsname
+ \else
+ \sseq@eval{\@nx\sseq@d@main{\sseq@dtype}{\unexpanded\@xp{\sseq@d@theoptions}}{\sseq@dpage}{\sseq@NoValue}{\sseq@NoValue}}
+ \sseq@breakpoint
+ \endgroup
+ \fi
+}
+
+\sseq@DeclareDocumentCommandAs\sseq@d@grabcoord\d{d()d()}{
+ \sseq@eval{\@nx\sseq@d@main{\sseq@dtype}{\unexpanded\@xp{\sseq@d@theoptions}}{\sseq@dpage}}{#1}{#2}
+ \sseq@breakpoint
+ \endgroup
+}
+
+\sseq@DeclareDocumentCommandAs\sseq@doptions@grabcoord\doptions{d()d()}{
+ \sseq@eval{\@nx\sseq@d@main{\sseq@dtype}{\unexpanded\@xp{\sseq@d@theoptions}}{\sseq@dpage}}{#1}{#2}
+ \sseq@breakpoint
+ \endgroup
+}
+
+
+\def\sseq@d@main#1#2#3#4#5{%
+ \sseq@options@firstpassmode
+ \def\sseq@edgetype{differential}%
+ \the\sseq@sseqstyle
+ \the\sseq@edgestyle
+ \the\sseq@differentialstyle
+ \the\sseq@scope@toks
+ \sseq@options@normalmode
+ \IfNoValueF{#2}{%
+ \sseq@processoptions{differential}{#2}% Outputs result into \sseq@savedoptioncode
+ }%
+ \sseq@xsetthiscall{\@xp\string\csname#1\endcsname\IfNoValueF{#2}{\unexpanded{[#2]}}\unexpanded{#3}\IfNoValueF{#4}{\unexpanded{(#4)}}\IfNoValueF{#5}{\unexpanded{(#5)}}}%
+ \sseq@ifintexpr{#3}{%
+ \sseq@tempcount=\numexpr#3\relax % this is a convenient way to get rid of spaces because #3 has to be a number
+ }{%
+ \sseq@error@n{d-invalid-page}{#3}\sseq@break
+ }%
+ \sseq@eval{\@nx\sseq@dparsecoord{\the\sseq@tempcount}{\IfNoValueTF{#4}{\lastclass0}{\unexpanded{#4}}}{\unexpanded{#5}}}
+ \sseq@eval{\unexpanded{\csname sseq@d@#1\endcsname{#2}}{\the\sseq@tempcount}}%
+ \sseq@breakpoint
+}
+
+% #1 -- options
+% #2 -- page
+% #3 -- source coordinate
+\def\sseq@d@d#1#2{%%
+ \sseq@d@setpageminrec{class.\source}{#2}{source}% automatically handles \sseq@cleanup@obj
+ \sseq@d@setpageminrec{class.\target}{#2}{target}
+ %%% This is the last point we might break, so now the differential is good.
+ %%% Note that we can break inside \sseq@d@setpageclass inside \sseq@d@setpageminrec
+%
+ \ifsseq@drawdifferential % TODO: probably should get rid of invisible now that we have \kill...
+ \sseq@obj@xodef{d.#2\source\target.familylist}{\sseq@familylist}
+ \sseq@obj@gdef{d.#2\source\target.page}{#2}
+ \sseq@obj@xdef{d.#2\source\target.source}{\source}
+ \sseq@obj@xdef{d.#2\source\target.target}{\target}
+ \sseq@obj@xdef{d.#2\source\target.options}{\ifsseq@needstikz\@nx\sseq@needstikztrue\fi\unexpanded\@xp{\sseq@savedoptioncode}}
+%
+ \sseq@savedpaths@adddifferential{d.#2\source\target}%
+ \else
+ \sseq@obj@gdef{d.#2\source\target.invisible}{}
+ \fi
+}
+\def\sseq@d@doptions#1#2{%
+ \sseq@obj@ifundef{d.#2\source\target.options}{\sseq@error@n{cmdoptions-feature-doesn't-exist}{differential}\sseq@break}{}%
+ \sseq@obj@ifdef{d.#2\source\target.invisible}{\sseq@error{doptions-invisible}\sseq@break}
+ \ifsseq@keepchanges\else
+ \@ifundefined{sseq@thepage}{}{
+ \ifnum#2=\sseq@thepagecount\else\ifnum\sseq@thepagecount=\z@\else
+ \sseq@error@n{doptions-no-effect-on-this-page}{#2}\sseq@breakfififi
+ \fi\fi
+ }%
+ \fi
+%
+ \sseq@cleanup@obj{d.#2\source\target.familylist}
+ \sseq@obj@xoaddto{d.#2\source\target.familylist}{\sseq@familylist}
+ \sseq@cleanup@obj{d.#2\source\target.options}
+ \sseq@obj@xoaddto{d.#2\source\target.options}{\sseq@savedoptioncode}
+}
+
+% Some helper macros:
+% #1 -- class name for \sseq@obj
+% #2 -- page
+% #3 -- source or target for error handling purposes.
+\def\sseq@d@setpageminrec#1#2#3{% not really recursive.
+ \sseq@cleanup@obj{#1[\sseq@obj{#1.num}].page}
+ \sseq@cleanup@obj{#1[\sseq@obj{#1.num}].deathinfo}
+ \sseq@cleanup@obj{#1[\sseq@obj{#1.num}].deathline}
+ \sseq@d@setpageclass{#1}{#2}{#3}
+ \sseq@obj@map{#1[\sseq@obj{#1.num}].dependencies}{
+ \sseq@d@setpagemin{##1}{#2} % automatically handles cleanup
+ }
+}
+
+% #1 -- class name for \sseq@obj
+% #2 -- page
+% #3 -- source or target for error handling purposes.
+\def\sseq@d@setpageclass#1#2#3{
+ \edef\sseq@classgenname{#1[\sseq@obj{#1.num}]}
+ % If the class is dead, then it's only not an error if it died on the current page
+ \ifnum\sseq@obj{\sseq@classgenname.page}<\sseq@infinitycount
+ % If the page it died on is greater than this one, hit-wrong-order error
+ \ifnum\sseq@obj{\sseq@classgenname.page}>#2\relax
+ \let\sseq@deadclass@genname\sseq@classgenname
+ \sseq@preparestacktrace
+ \sseq@error@xxxx{d-hit-wrong-order}{#3}{\csname #3name\endcsname}{#2}{\the\sseq@temptoks}
+ \sseq@breakfifi
+ \fi
+ % If the page it died on is less than this one, class-already-hit error
+ \ifnum\sseq@obj{\sseq@classgenname.page}<#2\relax
+ \let\sseq@deadclass@genname\sseq@classgenname
+ \sseq@preparestacktrace
+ \sseq@error@xxxx{d-class-already-hit}{#3}{\csname #3name\endcsname}{#2}{\the\sseq@temptoks}
+ \sseq@breakfifi
+ \fi
+ \fi
+ % If the class has been replaced before, that's only okay if it was replaced on a previous page.
+ \ifnum\sseq@obj{#1.num}>\z@
+ \sseq@tempcount=\sseq@obj{#1.num}\relax
+ \advance\sseq@tempcount\m@ne
+ \ifnum\sseq@obj{#1[\the\sseq@tempcount].page}<#2\relax\else
+ \ifnum#2=\sseq@obj{#1[\the\sseq@tempcount].page}
+ \sseq@error@xxxx{d-hit-same-page-replaceclass}{#3}{\csname #3name\endcsname}{#2}{\sseq@obj{#1[\the\sseq@tempcount].deathinfo}}
+ \sseq@breakfififi
+ \else
+ \edef\sseq@deadclass@genname{#1[\the\numexpr\sseq@obj{#1.num}-\@ne]}
+ \sseq@preparestacktrace
+ \sseq@error@xxxx{d-hit-wrong-order}{#3}{\csname #3name\endcsname}{#2}{\the\sseq@temptoks}
+ \sseq@breakfififi
+ \fi
+ \fi
+ \fi
+ \sseq@obj@xdef{\sseq@classgenname.page}{#2}
+ \sseq@obj@xdef{\sseq@classgenname.deathinfo}{#3 of differential \sseq@thiscall\ on page #2}
+ \bgroup
+ \def\foreach{\@nx\@nx\@nx\foreach}
+ \protected\def\\{}
+ \let\sseq@possibleperiod\empty
+ \let\sseq@possibleperiodb\empty
+ \sseq@obj@xdef{\sseq@classgenname.deathlocation}{%
+ on input line \sseq@inputline\sseq@error@inforeachloop
+ }
+ \sseq@obj@xdef{\sseq@classgenname.deathline}{\sseq@inputline}
+ \sseq@tempiffalse
+ \edef\sseq@temp{\the\sseq@foreachcall}
+ \ifx\sseq@temp\pgfutil@empty\else\sseq@tempiftrue\fi
+ \ifx\sseq@restofstacktrace\pgfutil@empty\else\sseq@tempiftrue\fi
+ \sseq@obj@xdef{\sseq@classgenname.deathstacktrace}{%
+ \ifsseq@tempif
+ \unexpanded{\\\\}Stack trace for differential \@nx\unexpanded{\sseq@thiscall} that killed #3:\unexpanded{\\}%
+ \ifx\sseq@temp\sseq@empty\else\unexpanded{\ \ \ }\@nx\sseq@stack@unexpanded{\unexpanded\@xp{\the\sseq@foreachcall}}\fi
+ \unexpanded\@xp{\sseq@restofstacktrace}%
+ \fi
+ }
+ \egroup
+}
+
+\def\sseq@preparestacktrace{
+ \def\foreach{\@nx\foreach}
+ \edef\sseq@temp@i{\unexpanded\@xpthree{\sseq@obj{\sseq@deadclass@genname.deathline}}}
+ \edef\sseq@temp@ii{\sseq@inputline}
+ \ifx\sseq@temp@i\sseq@temp@ii
+ \sseq@temptoks\@xpthree{\sseq@obj{\sseq@deadclass@genname.deathinfo} (in the same \foreach loop)}
+ \else
+ \protected\def\\{}
+ \sseq@eval{\sseq@temptoks{\unexpanded\@xpthree{\sseq@obj{\sseq@deadclass@genname.deathinfo}}\space(\sseq@obj{\sseq@classgenname.deathlocation})}}
+ \sseq@e@addto@macro\sseq@errorinfo{\unexpanded\@xpthree{\sseq@obj{\sseq@deadclass@genname.deathstacktrace}}}
+ \fi
+}
+
+\def\sseq@d@setpagemin#1#2{
+ \ifnum\sseq@obj{#1.page}>#2\relax
+ \ifnum\sseq@obj{#1.pagemin}>#2\relax\else % prevent a d1 from getting rid of a structline that was supposed to start on page 5
+ \sseq@cleanup@obj{#1.page}
+ \sseq@obj@xdef{#1.page}{#2}
+ \fi
+ \fi
+}
+\def\sseq@differential@draw@ifpage#1{
+ \sseq@drawtrue
+ \sseq@obj{#1.familylist}
+ \ifsseq@draw
+ \ifnum\sseq@thepagecount=\z@
+ \sseq@drawdifferential{#1}
+ \else
+ \ifnum\sseq@obj{#1.page}>\sseq@thepagemm\relax
+ \ifnum\sseq@obj{#1.page}<\sseq@thepagemaxpp\relax
+ \sseq@drawdifferential{#1}
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\sseq@drawdifferential#1{
+ \bgroup
+ \sseq@eval{
+ \@nx\sseq@drawedge\sseq@obj{#1.source}\sseq@obj{#1.target}{differential}{%
+ \@nx\sseq@obj{#1.options}
+ }
+ }
+ \egroup
+}
+%%%
+%%% \structline and \structlineoptions
+%%%
+
+\sseq@DeclareDocumentCommand\structline{od()}{%
+ \begingroup
+ \sseq@loadinputline
+ \IfNoValueTF{#2}{
+ \sseq@structline@main{structline}{#1}{#2}{#2}
+ }{
+ \def\next{\sseq@structline@@{structline}{#1}{#2}}%
+ \@xptwo\next\sseq@trimleadingspaces
+ }
+}
+\sseq@DeclareDocumentCommand\structlineoptions{od()}{%
+ \begingroup
+ \sseq@loadinputline
+ \IfNoValueTF{#2}{
+ \sseq@structline@main{structlineoptions}{#1}{#2}{#2}
+ }{
+ \def\next{\sseq@structlineoptions@@{structlineoptions}{#1}{#2}}%
+ \@xptwo\next\sseq@trimleadingspaces
+ }
+}
+
+\sseq@DeclareDocumentCommandAs\sseq@structline@@\structline{mmmd()}{%
+ \sseq@structline@main{#1}{#2}{#3}{#4}
+}
+
+\sseq@DeclareDocumentCommandAs\sseq@structlineoptions@@\structlineoptions{mmmd()}{%
+ \sseq@structline@main{#1}{#2}{#3}{#4}
+}
+
+\def\sseq@structline@main#1#2#3#4{
+ \sseq@xsetthiscall{\string\structline\IfNoValueF{#2}{\unexpanded{[#2]}}\IfNoValueF{#3}{\unexpanded{(#3)}\IfNoValueF{#4}{\unexpanded{(#4)}}}}%
+ \def\sseq@edgetype{structline}
+ \sseq@options@firstpassmode
+ \the\sseq@sseqstyle
+ \the\sseq@edgestyle
+ \the\sseq@structlinestyle
+ \the\sseq@scope@toks
+ \sseq@options@normalmode
+ \IfNoValueF{#2}{%
+ \sseq@processoptions{struct line}{#2}% Outputs result into \sseq@savedoptioncode
+ }%
+ \def\sourcename{#3}%
+ \def\targetname{#4}%
+ \IfNoValueTF{#3}{%
+ \def\sourcename{\lastclass1}%
+ \def\targetname{\lastclass}%
+ }{%
+ \IfNoValueT{#4}{%
+ \def\targetname{\lastclass}%
+ }%
+ }%
+ \sseq@parsecoord\source{\sourcename}{source of structure line}%
+ \sseq@parsecoord\target{\targetname}{target of structure line}%
+ \ifnum\xsource>\xtarget\relax
+ \sseq@parsedcoords@swap\source\target
+ \else
+ \ifnum\xsource=\xtarget\relax
+ \ifnum\ysource>\ytarget\relax
+ \sseq@parsedcoords@swap\source\target
+ \else
+ \ifnum\ysource=\ytarget\relax
+ \ifnum\nsource>\ntarget\relax
+ \sseq@parsedcoords@swap\source\target
+ \else
+ \ifnum\nsource=\ntarget\relax
+ \sseq@error{structline-source-target-equal}%
+ \@xp\sseq@break\romannumeral-`0
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \@ifundefined{sseq@structline@page}{%this is repeated in circleclasses
+ \def\sseq@pagemin{0}
+ \ifnum\sseq@obj{class.\source.num}>\z@
+ \edef\sseq@pagemin{\sseq@obj{class.\source[\the\numexpr\sseq@obj{class.\source.num}-1].page}}
+ \fi
+ \ifnum\sseq@obj{class.\target.num}>\z@
+ \edef\sseq@test{\sseq@obj{class.\target[\the\numexpr\sseq@obj{class.\target.num}-1].page}}
+ \ifnum\sseq@test>\sseq@pagemin\relax
+ \let\sseq@pagemin\sseq@test
+ \fi
+ \fi
+ }{\edef\sseq@pagemin{\the\numexpr\sseq@structline@page-\@ne}}
+ \csname sseq@structline@#1\endcsname
+ \sseq@breakpoint
+ \endgroup
+}
+\def\sseq@structline@structline{
+ \@ifundefined{sseq@structline@pagemax}{}{\ifnum\sseq@structline@pagemax=\sseq@infinity\else \sseq@error{structline-no-page-max}\fi}% could be warning
+ \ifnum\sseq@pagemin<\sseq@obj{class.\source[\sseq@obj{class.\source.num}].page}\relax\else
+ \sseq@error{structline-stillborn}
+ \sseq@breakfi
+ \fi
+ \ifnum\sseq@pagemin<\sseq@obj{class.\target[\sseq@obj{class.\target.num}].page}\relax\else % If the \structline is dead before it is born, throw an error
+ \sseq@error{structline-stillborn}
+ \sseq@breakfi
+ \fi
+ \sseq@obj@ifdef{structline.\source\target.num}{%
+ \ifnum\sseq@obj{structline.\source\target[\sseq@obj{structline.\source\target.num}].page}=\sseq@infinitycount
+ \sseq@error@xx{structline-already-exists}{\sourcename}{\targetname}
+ \sseq@breakfi
+ \fi
+ \sseq@cleanup@obj{structline.\source\target.num}
+ \sseq@obj@inc{structline.\source\target.num}
+ }{
+ \sseq@cleanup@obj{structline.\source\target.num}
+ \sseq@obj@gdef{structline.\source\target.num}{0}
+ \sseq@savedpaths@addstructline{structline.\source\target}
+ }
+ \edef\sseq@structlinename{structline.\source\target[\sseq@obj{structline.\source\target.num}]}
+ % The following cleanup call is needed to prevent a glitch where if a \structline is made inside of a temporary sseqpage environment, then later attempts
+ % to put a structline throw a "structline already exists" error
+ \sseq@cleanup@obj{\sseq@structlinename.page}
+ \sseq@obj@xdef{\sseq@structlinename.page}{\sseq@infinity}
+ \sseq@obj@xdef{\sseq@structlinename.pagemin}{\sseq@pagemin}
+ \sseq@obj@xdef{\sseq@structlinename.source}{\source}
+ \sseq@obj@xdef{\sseq@structlinename.target}{\target}
+ \sseq@class@adddependence{class.\source}{\sseq@structlinename}% If the source or target is already dead, this will set structlinename.page
+ \sseq@class@adddependence{class.\target}{\sseq@structlinename}
+ \sseq@obj@xodef{\sseq@structlinename.familylist}{\sseq@familylist}
+ \sseq@cleanup@obj{\sseq@structlinename.options}
+ \sseq@obj@xdef{\sseq@structlinename.options}{\ifsseq@needstikz\@nx\sseq@needstikztrue\fi\unexpanded\@xp{\sseq@savedoptioncode}}
+}
+\def\sseq@structline@structlineoptions{
+ \sseq@obj@ifundef{structline.\source\target.num}{
+ \sseq@error@n{cmdoptions-feature-doesn't-exist}{\structline}
+ \sseq@break
+ }{}
+ \@ifundefined{sseq@structline@page}{
+ \edef\sseq@gen{\sseq@obj{structline.\source\target.num}}
+ \let\sseq@genmax\sseq@gen
+ }{
+ \sseq@structline@getgen{\sseq@structline@page}
+ \@ifundefined{sseq@structline@pagemax}{%
+ % If no max is present, apply options to all pages starting at specified minimum
+ \edef\sseq@genmax{\sseq@obj{structline.\source\target.num}}%
+ \let\sseq@structline@pagemax\sseq@infinity
+ }{
+ \let\sseq@genmin\sseq@gen
+ \sseq@structline@getgen{\sseq@structline@pagemax}
+ \let\sseq@genmax\sseq@gen
+ \let\sseq@gen\sseq@genmin
+ }
+ \edef\sseq@structline@page{\the\numexpr\sseq@structline@page-1}
+ \edef\sseq@structline@pagemax{\the\numexpr\sseq@structline@pagemax+1}
+ }
+ \sseq@tempcount=\sseq@gen\relax
+ \advance\sseq@tempcount\m@ne
+ \loop
+ \advance\sseq@tempcount\@ne
+ \edef\sseq@structlinename{structline.\source\target[\the\sseq@tempcount]}
+ \sseq@cleanup@obj{\sseq@structlinename.options}
+ \sseq@cleanup@obj{\sseq@structlinename.familylist}
+ \ifsseq@needstikz
+ \sseq@obj@gaddto{\sseq@structlinename.options}{\sseq@needstikztrue}
+ \fi
+ \ifnum\sseq@tempcount=\sseq@gen\relax
+ \@ifundefined{sseq@structline@page}{}{
+ \edef\sseq@savedoptioncode{\@nx\ifnum\sseq@thepagecount>\sseq@structline@page\relax\unexpanded\@xp{\sseq@savedoptioncode}\@nx\fi}
+ \edef\sseq@familylist{\@nx\ifnum\sseq@thepagecount>\sseq@structline@page\relax\unexpanded\@xp{\sseq@familylist}\@nx\fi}
+ }
+ \fi
+ \ifnum\sseq@tempcount=\sseq@genmax\relax
+ \@ifundefined{sseq@structline@pagemax}{}{
+ \edef\sseq@savedoptioncode{\@nx\ifnum\sseq@thepagecount<\sseq@structline@pagemax\relax\unexpanded\@xp{\sseq@savedoptioncode}\@nx\fi}
+ \edef\sseq@familylist{\@nx\ifnum\sseq@thepagecount<\sseq@structline@pagemax\relax\unexpanded\@xp{\sseq@familylist}\@nx\fi}
+ }
+ \fi
+ \sseq@obj@xoaddto{\sseq@structlinename.options}{\sseq@savedoptioncode}
+ \sseq@obj@xoaddto{\sseq@structlinename.familylist}{\sseq@familylist}
+ \ifnum\sseq@tempcount<\sseq@genmax\repeat
+}
+
+\def\sseq@structline@copy#1#2{
+ \begingroup
+ \sseq@structline@copy@decomposename#2
+ \let\sseq@thename@saved\sseq@thename
+ \def\sseq@pagemin{0}
+ \sseq@parsecoord\source{\sourcename}{source of structure line}%
+ \sseq@parsecoord\target{\targetname}{target of structure line}
+ \def\sseq@thename{#1}
+ \sseq@lettoobj\sseq@familylist{#2.familylist}
+ \sseq@lettoobj\sseq@savedoptioncode{#2.options}
+ \let\sseq@thename\sseq@thename@saved
+ \sseq@structline@structline
+ \endgroup
+}
+
+\def\sseq@structline@copy@decomposename#1.(#2,#3,#4)(#5,#6,#7){
+ \def\sourcename{#2,#3,copiedfrom#4}
+ \def\targetname{#5,#6,copiedfrom#7}
+}
+
+\def\sseq@structline@getgen#1{
+ \bgroup
+ \sseq@tempcount=\sseq@obj{structline.\source\target.num}\relax
+ \ifnum\sseq@tempcount>\z@
+ \ifnum#1<\z@\relax
+ \@ifundefined{sseq@thepage}{
+ \ifnum\sseq@obj{structline.\source\target[\the\sseq@tempcount].page}<\sseq@infinitycount
+ \sseq@tempcount=\sseq@obj{structline.\source\target[\the\sseq@tempcount].page}\relax
+ \else
+ \advance\sseq@tempcount\m@ne
+ \sseq@tempcount=\sseq@obj{structline.\source\target[\the\sseq@tempcount].page}\relax
+ \advance\sseq@tempcount\@ne
+ \fi
+ }{
+ \sseq@tempcount=\sseq@thepagecount
+ }
+ \advance\sseq@tempcount\@ne
+ \advance\sseq@tempcount#1\relax
+ \fi
+ \sseq@eval{\unexpanded{\sseq@obj@pagetogen{structline.\source\target}}{\the\sseq@tempcount}} % stores in \sseq@gen
+ \else
+ \def\sseq@gen{0}
+ \fi
+ \sseq@smuggle@macro\sseq@gen
+ \egroup
+}
+\def\sseq@class@adddependence#1#2{
+ \edef\sseq@temp{\sseq@obj{#1.num}}
+ \sseq@d@setpagemin{#2}{\sseq@obj{#1[\sseq@temp].page}}% automatically handles cleanup
+ \sseq@cleanup@obj{#1[\sseq@temp].dependencies}
+ \sseq@obj@xaddto{#1[\sseq@temp].dependencies}{\@nx\\{#2}}
+}
+\def\sseq@structline@draw@ifpage#1{
+ \bgroup
+ \ifnum\sseq@thepagecount=\z@
+ \ifnum\sseq@obj{#1[0].pagemin}=\z@
+ \sseq@drawtrue
+ \sseq@obj{#1[0].familylist}
+ \ifsseq@draw
+ \sseq@structline@draw{#1[0]}
+ \fi
+ \fi
+ \else
+ \sseq@obj@pagetogen{#1}{\sseq@thepage} % sets \sseq@gen
+ \ifnum\sseq@gen<\z@\else % negative sseq@gen means don't draw it
+ \ifnum\sseq@obj{#1[\sseq@gen].page}=\sseq@thepagecount
+ \sseq@thispagetrue
+ \fi
+ \ifnum\sseq@obj{#1[\sseq@gen].pagemin}<\sseq@thepagecount
+ \sseq@drawtrue
+ \sseq@obj{#1[\sseq@gen].familylist}
+ \ifsseq@draw
+ \sseq@structline@draw{#1[\sseq@gen]}
+ \fi
+ \fi
+ \fi
+ \fi
+ \egroup
+}
+\def\sseq@structline@draw#1{\sseq@eval{\@nx\sseq@drawedge\sseq@obj{#1.source}\sseq@obj{#1.target}{structline}{\@nx\sseq@obj{#1.options}}}}
+
+
+%% This is a dumb place to put this. It has to be after the differential commands are defined.
+\ifsseq@draftmode % Okay, have to dummy out all the main commands.
+ % Only add tikz background paths to the savedpaths. We need to draw background paths because they might change the bounding box!
+ \sseq@setsavedpaths@draftmode
+ \let\sseq@handlequote\@gobble
+%
+ % All we want to do here is record the range. Have to process options in order to figure out where it is.
+ \sseq@DeclareDocumentCommand\class{or()}{%
+ \begingroup
+ \sseq@loadinputline
+ \IfNoValueT{#2}{\sseq@break}%
+ \sseq@xsetthiscall{\string\class\IfNoValueF{#1}{[\unexpanded{#1}]}\unexpanded{(#2)}}%
+ \sseq@options@firstpassmode
+ \the\sseq@sseqstyle
+ \the\sseq@classstyle
+ \sseq@options@normalmode
+ \IfNoValueF{#1}{%
+ \sseq@processoptions{class}{#1}% Outputs result into \sseq@savedoptioncode
+ }%
+ \sseq@cparsecoord{#2}{}%
+ \sseq@xminmax{\xcoord}{\ycoord}%
+ \sseq@yminmax{\xcoord}{\ycoord}%
+ \sseq@pushstack@\coord % also need the class stack to calculate other \class commands.
+ \sseq@cleanup@obj{partcoord.(\partialcoord).numnodes}%
+ \ifnum\nodenum=\@ne
+ \sseq@obj@gdef{partcoord.(\partialcoord).numnodes}{0}%
+ \fi
+ \sseq@obj@xdef{partcoord.(\partialcoord).numnodes}{\nodenum}%
+ \edef\classname{class.\coord[0]}%
+ \ifx\sseq@class@tag\pgfutil@empty\else
+ \sseq@obj@ifdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{%
+ \sseq@error@xx{class-tag-already-defined}{\sseq@class@tagprefix\sseq@class@tag}{(\partialcoord)}% could be warning
+ }{}%
+ \sseq@cleanup@obj{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}%
+ \sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
+ \fi
+ \ifx\sseq@class@name\pgfutil@empty\else
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@namehandler
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
+ \fi
+ \sseq@breakpoint
+ \endgroup
+ }
+
+ % Now the rest of these can be no-ops
+ \sseq@DeclareDocumentCommand\classoptions{od()}{}
+ \sseq@DeclareDocumentCommand\replaceclass{od()}{}
+ \sseq@DeclareDocumentCommand\replacesource{o}{}
+ \sseq@DeclareDocumentCommand\replacetarget{o}{}
+ \def\sseq@d@main#1#2#3#4#5{}
+ \DeclareDocumentCommand \sseq@DrawIfValidDifferential@@ { d() d() } {}
+ \sseq@DeclareDocumentCommand\structline{od()d()}{}
+ \sseq@DeclareDocumentCommand\structlineoptions{od()d()}{}
+ \sseq@DeclareDocumentCommand\circleclasses{or()r()}{}
+ \sseq@DeclareDocumentCommand\gettag{mr()}{}
+ \endinput
+\fi
+
+
+\newcount\sseq@circleclassuid
+\sseq@DeclareDocumentCommand\circleclasses{or()r()}{
+ \begingroup
+ \sseq@loadinputline
+ \def\sseq@keysfortikzprim{}
+ \IfNoValueF{#1}{
+ \sseq@processoptions{fit}{#1}
+ }
+ \sseq@parsecoord\coorda{#2}{first \@nx\circleclass class}
+ \sseq@parsecoord\coordb{#3}{second \@nx\circleclass class}
+%
+%
+ \ifsseq@keepchanges
+ \@ifundefined{sseq@fit@page}{% also in structline@main. TODO: refactor these chunks together?
+ \def\sseq@pagemin{0}
+ \ifnum\sseq@obj{class.\coorda.num}>\z@
+ \edef\sseq@pagemin{\sseq@obj{class.\coorda[\the\numexpr\sseq@obj{class.\coorda.num}-\@ne].page}}
+ \fi
+ \ifnum\sseq@obj{class.\coordb.num}>\z@
+ \edef\sseq@test{\sseq@obj{class.\coordb[\the\numexpr\sseq@obj{class.\coordb.num}-\@ne].page}}
+ \ifnum\sseq@test>\sseq@pagemin\relax
+ \let\sseq@pagemin\sseq@test
+ \fi
+ \fi
+ }{\edef\sseq@pagemin{\the\numexpr\sseq@fit@page-\@ne}}
+ \@ifundefined{sseq@fit@pagemax}{\let\sseq@pagemax\sseq@infinity}{\let\sseq@pagemax\sseq@fit@pagemax}
+ \else % Put it on the current page no matter what inside sseqpage
+ \let\sseq@pagemax\sseq@infinity\def\sseq@pagemin{-1}
+ \fi
+%
+%
+ \global\advance\sseq@circleclassuid\@ne
+ \edef\circleclassobjname{circleclass(\coordanopar)(\coordbnopar)\the\sseq@circleclassuid}
+%
+%
+ \sseq@obj@xodef{\circleclassobjname.options}{\sseq@savedoptioncode}
+ \sseq@obj@xodef{\circleclassobjname.familylist}{\sseq@familylist}
+ \sseq@obj@xodef{\circleclassobjname.tikzprimoptions}{\sseq@keysfortikzprim}
+ \sseq@obj@xdef{\circleclassobjname.fitnodes}{\@nx\tikz@lib@fit{(sseq{\coordanopar})(sseq{\coordbnopar})\sseq@fitalso}}
+ %\edef\temp{\@nx\sseq@circleclass@draw{\coorda@internalname}{\coordb@internalname}{\unexpanded\@xp{\sseq@savedoptioncode}}}
+ \sseq@savedpaths@xadd{\@nx\sseq@circleclass@object{\circleclassobjname}{\coordanopar}{\coordbnopar}}
+ \sseq@obj@xdef{\circleclassobjname.page}{\sseq@pagemax}
+ \sseq@obj@xdef{\circleclassobjname.pagemin}{\sseq@pagemin}
+ \@ifundefined{sseq@fit@pagemax}{
+ \ifsseq@keepchanges
+ \sseq@class@adddependence{class.\coorda}{\circleclassobjname}% If the source or target is already dead, this will set structlinename.page
+ \sseq@class@adddependence{class.\coordb}{\circleclassobjname}
+ \fi
+ }{}
+ \sseq@breakpoint
+ \endgroup
+}
+
+\ifsseq@patchfit\else
+ \sseq@DeclareDocumentCommand\circleclasses{or()r()}{%
+ \sseq@warning{circleclasses-not-provided}
+ }
+\fi
+
+\def\sseq@circleclass@draw@ifpage#1#2#3{
+ \sseq@drawtrue
+ \sseq@obj{#1.familylist}
+ \ifsseq@draw
+ \ifnum\sseq@thepagecount<\numexpr\sseq@obj{#1.page}+\@ne
+ \ifnum\sseq@obj{#1.page}=\sseq@thepagecount
+ \sseq@thispagetrue
+ \fi
+ \ifnum\sseq@obj{#1.pagemin}<\sseq@thepagecount
+ \sseq@circleclass@draw{#1}{#2}{#3}
+ \fi
+ \fi
+ \fi
+}
+
+%%
+%% Labels
+%%
+%% This code is called from the key value handler, but it has more to do with the code in this file so I am putting it here. Search in sseqkeys.code.tex for "Labels"
+%%
+
+\def\sseq@processlabels@default{%
+ \global\let\sseq@classnodetext\pgfutil@empty
+ \global\let\sseq@classnodetextoptions\pgfutil@empty
+ \global\let\sseq@classlabelnodes\pgfutil@empty
+}
+\let\sseq@processlabels\sseq@processlabels@default
+
+\let\sseqlastlabel\empty
+% I can't remember why we need to defer this. If at some point I figure this out, I should explain why here and in the definition of \class...
+\def\sseq@handleclassquotes@inner#1#2{%
+ \begingroup\pgfscope
+ \def\sseq@classquotes@smugglehook{}
+ \def\sseq@classquotes@smugglehook@inner{}
+ \sseq@options@firstpassmode
+ \sseq@thesseqstyle
+ \sseq@thelabelstyle
+ \sseq@theclasslabelstyle
+ \the\sseq@scope@toks
+ \sseq@options@normalmode
+ \gdef\sseqlastlabel{#2}
+ \sseq@processoptions{class/label}{#2}%
+ \sseq@classlabel@handler{#1}% labeltextfn is a private handler for transformations, sseq@classlabel@handler is exposed via "class label handler"
+ \ifsseq@classlabel
+ \sseq@options@firstpassmode
+ \the\sseq@outerclasslabelstyle
+ \sseq@x@addto@macro\sseq@classlabelnodes{%
+ \@nx\sseq@drawlabel{%
+ \sseq@maybemathswitch\unexpanded\@xp{\result}\sseq@maybemathswitch}%
+ {% This is set up to prevent a bug where \classoptions and class label style don't work correctly together
+ \the\sseq@sseqstyle\@nx\the\sseq@sseqstyle@page
+ \the\sseq@labelstyle\@nx\the\sseq@labelstyle@page
+ \the\sseq@classlabelstyle\@nx\the\sseq@classlabelstyle@page
+ \sseq@theouterclasslabelstyle
+ \@nx\sseq@collections@labels@hook
+ \@nx\sseq@collections@classlabels@hook
+ \@nx\sseq@collections@outerclasslabels@hook
+ \unexpanded\@xp{\sseq@savedoptioncode}%
+ }%
+ }%
+ \else
+ \let\sseq@classquotes@smugglehook\sseq@classquotes@smugglehook@inner
+ \sseq@options@firstpassmode
+ \the\sseq@innerclasslabelstyle
+ \sseq@options@normalmode
+ \sseq@protectedeval{\@nx\pgfqkeys{/sseqpages/class/label}{#2}}%
+ \sseq@protected@xdef\sseq@classnodetext{\sseq@maybemathswitch\result\sseq@maybemathswitch}%
+ \xdef\sseq@classnodetextoptions{%
+ %\unexpanded{\def\pgfkeysdefaultpath{/sseqpages/class/node texts/}}%
+ \sseq@thelabelstyle\sseq@theclasslabelstyle\sseq@theinnerclasslabelstyle
+ \@nx\sseq@collections@labels@hook
+ \@nx\sseq@collections@classlabels@hook
+ \@nx\sseq@collections@innerclasslabels@hook
+ \unexpanded\@xp{\sseq@savedoptioncode}%
+ }%
+ \fi
+ \@xp\endpgfscope\@xp\endgroup
+ \sseq@classquotes@smugglehook
+}
+
+\def\sseq@handleedgequotes#1#2{% We use this via \let\tikz@quotes@as\sseq@handleedgequotes
+ /utils/exec={% so it's called inside \pgfkeysalso{stuff}. Need to surround with /utils/exec={} to get out.
+ \let\sseq@savedoptioncode@save\sseq@savedoptioncode
+ \sseq@processoptions{label}{#2}
+ \sseq@needstikztrue
+ \let\sseq@temp\sseq@savedoptioncode
+ \let\sseq@savedoptioncode\sseq@savedoptioncode@save
+ \sseq@e@addto@options{
+ \@nx\tikzset{
+ every to/.append style={
+ edge node={
+ node [/sseqpages/label,
+ /utils/exec={
+ \let\@nx\sseq@tikz@transform@save\@nx\tikz@transform
+ \let\@nx\tikz@transform\relax
+ \@nx\sseq@thelabelstyle
+ \@nx\sseq@collections@labels@hook
+ \@nx\sseq@theedgelabelstyle
+ \@nx\sseq@collections@edgelabels@hook
+ \@xp\@nx\csname sseq@the\sseq@edgetype labelstyle\endcsname
+ \@xp\@nx\csname sseq@collections@\sseq@edgetype labels@hook\endcsname
+ \unexpanded\@xp{\sseq@temp}
+ \ifsseq@rotatelabels\iftikz@fullytransformed\else\@nx\tikz@fullytransformedtrue\@nx\tikz@addtransform{\@nx\pgftransformresetnontranslations\@nx\sseq@globalrotatetransform}\fi\fi
+ \unexpanded\@xp{\sseq@edgeoptionhook} % this is just to make description work
+ \let\@nx\tikz@transform\@nx\sseq@tikz@transform@save
+ }
+ ]{\sseq@labeltextfn{#1}}
+ }
+ }
+ }
+ }
+ }
+}
+
+
diff --git a/graphics/pgf/contrib/spectralsequences/sseqmessages.code.tex b/graphics/pgf/contrib/spectralsequences/sseqmessages.code.tex
new file mode 100644
index 0000000000..0033bb4a2e
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqmessages.code.tex
@@ -0,0 +1,580 @@
+%%
+%% Package: spectralsequences v1.2.2 2017-09-16 2017-09-16
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqmessages.code.tex
+%% Exposes: Error message redirects?
+%%
+%% Set up fancy error messages
+%%
+
+
+
+%% The error handling system is build on top of l3msg. l3msg produces errors like:
+%%
+%% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+%% !
+%% ! LaTeX error: "<package>/<error-name>"
+%% !
+%% ! <error message text>
+%% !
+%% ! See the <package> documentation for further information. % produced by \msg_see_documentation_text:n{<package>}
+%% !...............................................
+%%
+%% The user will see underneath it l.<line number> <text on line>
+%%
+%% Unfortunately, if the error is in a \foreach statement, the user will only see the final line of the foreach loop, often just the close brace.
+%% It's impossible to tell from this where in the \foreach the error occurred. Similar problems occur if the command is inside a user command.
+%%
+%% We're going to modify this file to improve the situation.
+%%
+%% If the command is in a forloop or a user command I want to:
+%% -- annotate the error with the command that caused it, or the previous command if the error occurred before I can know what the current command looks like.
+%% -- present a stack trace to inform the user where exactly the problem occurred
+%%
+%%
+%% We automatically print the annotation and stack trace at the end of all l3msg messages by hooking into \msg_see_documentation_text:n.
+%% The annotation and stack trace are prepared by a command \sseq@error@setup which we hook into the beginning of the latex3 message processing code.
+%%
+%% Here's an example of the result:
+%%
+%% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+%% !
+%% ! spectralsequences error: "index-too-large"
+%% !
+%% ! Index '-3' provided for target of structure line is too large -- only 1
+%% ! classes exist at position (32,8).
+%% !
+%% ! (Error occurred during call "\structline(16,-1,-1)(16,0,-3)", in the % This is the annotation
+%% ! \foreach block that ends on line 158, with variable values: \n = 2.) % it's stored in \sseq@error@annotation
+%% !
+%% ! Stack trace: % This is the stack trace
+%% ! \towergroupb (8*\n ,4*\n ) % Produced by \sseq@printstacktrace
+%% ! \foreach \n in {2,3,4}
+%% !
+%% ! See the spectralsequences documentation for further information.
+%% !
+%% ! Type <return> to continue.
+%% !...............................................
+
+
+\def\sseq@protecterror#1{\@nx\sseq@protecterror\unexpanded{{#1}}}
+
+% Stack, thiscall, foreachcall.
+% Here we record what the user has said (as best we can tell)
+\newtoks\sseq@thiscalltoks
+
+% These guys are set up because I want \sseq@DeclareDocumentCommandAs@setinputline to work
+% but I want the definition of \sseq@inputline to be local, and it would be really bad to
+% open a group inside of sseq@DeclareDocumentCommandAs that has to be closed in the code.
+% So what I do is globally put it into \sseq@globalinputline using \sseq@setinputline
+% and then after starting the group at the beginning of the actual macro body,
+% call \sseq@loadinputline
+\def\sseq@setinputline{\xdef\sseq@globalinputline{\the\inputlineno}}
+\def\sseq@loadinputline{\let\sseq@inputline\sseq@globalinputline}
+
+\def\sseq@thiscall{\the\sseq@thiscalltoks}
+\def\sseq@setthiscall#1{\sseq@seterrorannotation{call}\sseq@thiscalltoks{#1}}
+\def\sseq@esetthiscall#1{\sseq@seterrorannotation{call}\sseq@eval{\sseq@thiscalltoks{#1}}}
+\def\sseq@gsetthiscall{\sseq@seterrorannotation{call}\global\sseq@thiscalltoks}
+\def\sseq@xsetthiscall#1{\sseq@eval{\@nx\sseq@gsetthiscall{#1}}}
+\def\sseq@xsetlastcall#1{\sseq@eval{\global\sseq@thiscalltoks{#1}}}
+
+\def\sseq@usermacro@esetthiscall#1{\sseq@eval{\sseq@thiscalltoks{#1}}} % Don't set \sseq@error@annotation@call
+
+\newtoks\sseq@foreachcall
+\newtoks\sseq@topofstacktrace
+\sseq@topofstacktrace{}
+\def\sseq@restofstacktrace{}
+
+\def\sseq@pushstacktrace#1{
+ \edef\sseq@temp{\the\sseq@topofstacktrace}
+ \ifx\sseq@temp\pgfutil@empty\else
+ \edef\sseq@restofstacktrace{\unexpanded{\\\ \ \ }\@nx\sseq@stack@unexpanded{\the\sseq@topofstacktrace}\unexpanded\@xp{\sseq@restofstacktrace}}
+ \fi
+ \sseq@eval{\sseq@topofstacktrace{\unexpanded{#1}\sseq@possibleoninputlinedash}}
+ \let\sseq@possibleoninputlinedash\empty
+ \let\sseq@possibleoninputlinepar\empty
+}
+\def\sseq@opushstacktrace#1{\@xp\sseq@pushstacktrace\@xp{#1}}
+\def\sseq@stack@unexpanded#1{\@nx\sseq@stack@unexpanded\unexpanded{{#1}}}
+
+
+
+% Positional information about the error:
+% Lengths are five more than the correct length to account for the fact that the line starts with !<space> and to accommodate two quote characters and a comma.
+\def\sseq@error@annotation@aftercall{\\\\Error occurred after call\sseq@printthiscall\sseq@error@inforeachloop}
+\chardef\sseq@error@annotation@length@aftercall=34
+\def\sseq@error@annotation@call{\\\\Error occurred during call\sseq@printthiscall\sseq@error@inforeachloop}
+\chardef\sseq@error@annotation@length@call=33
+\def\sseq@error@annotation@atbeginforeach{\\\\Error occurred at the beginning of \string\foreach\ statement\sseq@printthiscall\sseq@error@inforeachloop}
+\chardef\sseq@error@annotation@length@atbeginforeach=60
+\def\sseq@error@annotation@atbeginusercmd{\\\\Error occurred at the beginning of user command\sseq@printthiscall\sseq@error@inforeachloop}
+\chardef\sseq@error@annotation@length@atbeginusercmd=54
+
+\def\sseq@seterrorannotation@drawing#1#2#3#4#5{%
+ \def\sseq@error@annotation{\\\\Error occurred while drawing class (#2,#3,#4)\ifnum#5>0 \space which has been replaced #5 time\ifnum#5>1s\fi\fi.
+ Look for a \ifnum#5>0\string\replaceclass\else\string\class\fi\space command that makes a class at that position.
+ Also make sure to check any \@nx\classoptions commands that could be the culprit.}%
+}
+
+\def\sseq@seterrorannotation#1{%
+ \@xp\let\@xp\sseq@error@annotation\csname sseq@error@annotation@#1\endcsname
+ \@xp\let\@xp\sseq@error@annotation@length\csname sseq@error@annotation@length@#1\endcsname
+}
+
+\sseq@seterrorannotation{aftercall}
+
+\def\sseq@inputline{\the\inputlineno}
+\def\sseq@error@inforeachloop{\sseq@possibleoninputlinepar\sseq@possibleperiod}
+\def\sseq@error@inforeachloop@active{\sseq@possiblecomma in loop with variable values:\sseq@for@printvars\sseq@possibleperiodb}
+\def\sseq@error@setup@errorinfo{}% Changed during \foreach and user commands
+
+\def\sseq@possibleoninputlinepar{ (on input line \sseq@inputline)} % let this to a no-op at beginning of usermacros
+\def\sseq@possibleoninputlinedash{ -- on input line \sseq@inputline}
+
+\def\sseq@possiblecomma{,\space}
+\def\sseq@possibleperiod{.}
+\def\sseq@possibleperiodb{.}
+
+
+\def\sseq@error@announcestacktrace{\\\\Stack trace:}
+\def\sseq@printstacktrace{ % Only prints rest of stack trace because top element is mentioned in annotation.
+ \ifx\sseq@restofstacktrace\pgfutil@empty\else
+ \sseq@error@announcestacktrace\sseq@restofstacktrace
+ \fi
+}
+
+% \sseq@error@setup happens before the error is reported, \sseq@error@cleanup at the end.
+
+\ExplSyntaxOn
+
+\def\sseq@error@setup@withinfo{
+ \bgroup
+ \def\foreach{\@nx\foreach}
+ \sseq@countthiscall
+ \ifnum\sseq@thiscallnumchars>\numexpr\l_iow_line_count_int-\sseq@error@annotation@length\relax
+ \def\sseq@printthiscall{:\\\@xp\iow_indent:n\@xp{\the\sseq@thiscalltoks}\\}
+ \let\sseq@possiblecomma\empty
+ \let\sseq@possibleperiod\empty
+ \fi
+ \let\sseq@stack@unexpanded\unexpanded
+ \sseq@error@setup@errorinfo
+ \sseq@error@hook
+}
+
+\def\sseq@error@setup@noinfo{\bgroup\def\foreach{\@nx\foreach}\let\sseq@stack@unexpanded\unexpanded\def\sseq@error@annotation{}\sseq@error@hook}
+\let\sseq@error@setup\sseq@error@setup@noinfo
+\def\sseq@error@cleanup{\egroup\sseq@errortrue} % If the error was thrown in NewDocumentCommand, we need to process it. Just used in sseqmacromakers.
+
+
+\def\sseq@printthiscall{\ "\the\sseq@thiscalltoks"}
+% make \exp_args:NNNf:
+\let \sseq_dummy:NNn \empty
+\cs_generate_variant:Nn \sseq_dummy:NNn {NNf}
+
+
+% Count the chars in thiscall
+% Detokenize handles the control words, but keeps the spaces as spaces. To count them properly, we lowercase them into 0's (any nonspace character would do just fine).
+\def\sseq@countthiscall{
+ \bgroup\lccode`\ =`\0\relax
+ \edef\temp{\detokenize\@xp{\the\sseq@thiscalltoks}}
+ \exp_args:Nf\lowercase{
+ \exp_args:NNNf\egroup
+ \edef\sseq@thiscallnumchars{
+ \exp_args:NNo\@nx\tl_count:n{\temp}
+ }
+ }
+}
+
+\ExplSyntaxOff
+
+
+\def\sseq@error@hook{} % \sseq@error@hook is just used once in the isalive error handling to set \protect to relax. Probably a better way to do that...
+\def\sseq@errorinfo{%
+ \sseq@error@annotation
+ \sseq@printstacktrace
+}
+
+
+
+\def\sseq@atbeginusermacro@msgsetup{%
+ \let\protect\empty % prevent issues if protected variables like \xmax are used as the loop max
+ \let\sseq@error@setup@errorinfo\sseq@error@setup@errorinfo@active % Install foreach error annotations
+ \let\sseq@error@setup\sseq@error@setup@withinfo
+ \sseq@opushstacktrace{\the\sseq@thiscalltoks}
+}
+
+\def\sseq@atbeginforeach@msgsetup{%
+ \let\protect\empty % prevent issues if protected variables like \xmax are used as the loop max
+ \let\sseq@error@setup@errorinfo\sseq@error@setup@errorinfo@active
+ \let\sseq@error@build@foreachvarsinfo\sseq@error@build@foreachvarsinfo@active % Install stack annotation
+ \let\sseq@error@inforeachloop\sseq@error@inforeachloop@active % install message indicating foreach variable values
+ \let\sseq@error@setup\sseq@error@setup@withinfo
+ \sseq@foreachcall\@xp{\string\foreach} % Stack gets pushed at the beginning of the body of the foreach loop once we know what the call looks like
+}
+
+
+\def\sseq@error@setup@errorinfo@active{%
+ \edef\tempa{\the\sseq@thiscalltoks}\edef\tempb{\the\sseq@foreachcall}
+ \ifx\tempa\tempb % We're at the beginning of a for loop
+ \sseq@seterrorannotation{atbeginforeach}
+ \else
+ \edef\tempb{\the\sseq@topofstacktrace}
+ \ifx\tempa\tempb % we're at the beginning of a user macro
+ \sseq@seterrorannotation{atbeginusercmd}
+ \else
+ % The top of the stack trace doesn't get included in the stack trace because it is assumed to be
+ % mentioned in the annotation. Since we aren't at the beginning of the foreach or usercmd,
+ % that means it won't be mentioned. Push an empty thing onto the stack so the innermost \foreach or usercommand is mentioned.
+ \sseq@pushstacktrace{}
+ \fi
+ \fi
+}
+
+%%
+%% \sseq@checkend
+%%
+\def\sseq@checkend#1{
+ \def\sseq@tempa{#1}
+ \ifx\sseq@tempa\@currenvir\else % mismatch
+ \sseq@error@n{endenv-mismatch}{#1}
+ \csname end\@currenvir\endcsname % run the \end code for the correct environment
+ \def\@currenvir{#1} % Prevent \@checkend from throwing a second redundant error
+ \@xp\sseq@break % don't run the code \end for this environment
+ \fi
+}
+
+
+
+
+
+%%%
+%%% Set up l3msg Hooks
+%%%
+
+
+\ExplSyntaxOn
+\char_set_catcode_space:N\ % Needed to make pretocmd work -- there are always spaces after every command, and they need to be retokenized as spaces
+
+\def\SseqErrorToWarning#1{\msg_redirect_name:nnn{spectralsequences}{#1}{warning}}
+\let\sseqerrortowarning\SseqErrorToWarning
+\def\sseq@quieterror#1{\msg_redirect_name:nnn{spectralsequences}{#1}{none}}
+
+\def\sseq@error {\msg_error:nn {spectralsequences}}
+\def\sseq@error@n {\msg_error:nnn {spectralsequences}}
+\def\sseq@error@nn {\msg_error:nnnn {spectralsequences}}
+\def\sseq@error@nnn {\msg_error:nnnnn {spectralsequences}}
+\def\sseq@error@nnnn{\msg_error:nnnnnn{spectralsequences}}
+\def\sseq@error@x {\msg_error:nnx {spectralsequences}}
+\def\sseq@error@xx {\msg_error:nnxx {spectralsequences}}
+\def\sseq@error@xxx {\msg_error:nnxxx {spectralsequences}}
+\def\sseq@error@xxxx{\msg_error:nnxxxx{spectralsequences}}
+\def\sseq@warning {\msg_warning:nn{spectralsequences}}
+
+\def\sseq@newerror#1#2{\msg_new:nnn{spectralsequences}{#1}{#2}}
+\def\sseq@newerror@internal#1#2{\msg_new:nnn{spectralsequences}{#1}{Internal error: #2 \sseq@contactpackageauthor}}
+\edef\sseq@contactpackageauthor{Contact package author \sseq@authorname\space at \sseq@authoremail.}
+
+
+\cs_new_eq:NN \__sseq_hooked_msg_see_documentation_text:n \msg_see_documentation_text:n
+\cs_new_eq:NN \__sseq_hooked_msg_fatal_code:nnnnnn \__msg_fatal_code:nnnnnn
+\cs_new_eq:NN \__sseq_hooked_msg_error_code:nnnnnn \__msg_error_code:nnnnnn
+\cs_new_eq:NN \__sseq_hooked_msg_warning_code:nnnnnn \__msg_warning_code:nnnnnn
+\cs_new_eq:NN \__sseq_hooked_msg_info_code:nnnnnn \__msg_info_code:nnnnnn
+
+
+\cs_new:Npn \sseq@installmsghooks {%
+ \cs_set_eq:NN \errmessage \sseq@errmessage
+ \cs_set_eq:NN \msg_see_documentation_text:n \__sseq_hooked_msg_see_documentation_text:n
+ \cs_set_eq:NN \__msg_fatal_code:nnnnnn \__sseq_hooked_msg_fatal_code:nnnnnn
+ \cs_set_eq:NN \__msg_error_code:nnnnnn \__sseq_hooked_msg_error_code:nnnnnn
+ \cs_set_eq:NN \__msg_warning_code:nnnnnn \__sseq_hooked_msg_warning_code:nnnnnn
+ \cs_set_eq:NN \__msg_info_code:nnnnnn \__sseq_hooked_msg_info_code:nnnnnn
+}
+
+\sseq@newerror@internal{msg-patch-failed}{Failed to patch the latex 3 message system. The errors will not be as expressive.}
+
+\def\sseq@msgpatchfailed{
+ \msg_error:nn{spectralsequences}{msg-patch-failed}
+ \def\sseq@installmsghooks{}
+ \sseq@break
+}
+
+\let\sseq@errmessage@std\errmessage
+\def\sseq@errmessage#1{\sseq@error@setup\let\\\iow_newline:\sseq@errmessage@std{#1\sseq@error@annotation}\sseq@error@cleanup}
+
+\pretocmd\__sseq_hooked_msg_see_documentation_text:n{\sseq@errorinfo}{}{\sseq@msgpatchfailed}
+
+
+
+\pretocmd\__sseq_hooked_msg_fatal_code:nnnnnn {\sseq@error@setup} {}{\sseq@msgpatchfailed}
+\pretocmd\__sseq_hooked_msg_error_code:nnnnnn {\sseq@error@setup} {}{\sseq@msgpatchfailed}
+%\pretocmd\__sseq_hooked_msg_warning_code:nnnnnn{\sseq@msg@setup} {}{\sseq@msgpatchfailed}
+%\pretocmd\__sseq_hooked_msg_info_code:nnnnnn {\sseq@msg@setup} {}{\sseq@msgpatchfailed}
+\apptocmd\__sseq_hooked_msg_fatal_code:nnnnnn {\sseq@error@cleanup}{}{\sseq@msgpatchfailed}
+\apptocmd\__sseq_hooked_msg_error_code:nnnnnn {\sseq@error@cleanup}{}{\sseq@msgpatchfailed}
+%\apptocmd\__sseq_hooked_msg_warning_code:nnnnnn{\sseq@error@cleanup}{}{\sseq@msgpatchfailed}
+%\apptocmd\__sseq_hooked_msg_info_code:nnnnnn {\sseq@error@cleanup}{}{\sseq@msgpatchfailed}
+
+\sseq@breakpoint
+
+
+
+%%%%
+%%%%
+%%%% Error message definitions
+%%%%
+%%%%
+
+
+%%
+%%
+%% checkdefinitions -- patch-failed errors
+%%
+%%
+\@ifpackagelater{tikz}{2015/07/08}{
+ \sseq@newerror@internal{pgfkeys-patch-failed}{Failed to patch the key value system. Setting all commands to do nothing and quitting. Your copy of tikz is newer than the version spectralsequences was designed for and seems to be incompatible with core features.}
+ \sseq@newerror@internal{fit-patch-failed}{Failed to patch fit. \@nx\circleclasses won't work. Your copy of tikz is newer than the version spectralsequences was designed for and seems to be incompatible with \string\circleclasses.}
+ \sseq@newerror@internal{foreach-patch-failed}{Failed to patch \string\foreach. The errors spectralsequences provides will be less comprehensive. Your copy of tikz is newer than the version spectralsequences was designed for and seems to be incompatible with parts of the error handling system.}
+ \sseq@newerror@internal{circleclasses-not-provided}{\@nx\circleclasses won't work because your copy of tikz is too new. Instead I'm doing nothing.}
+}{
+ \sseq@newerror{pgfkeys-patch-failed}{Failed to patch the key value system. Setting all commands to do nothing and quitting. Your copy of tikz is older than the version spectralsequences was designed for and seems to be incompatible with core features. Update tikz!}
+ \sseq@newerror{fit-patch-failed}{Failed to patch fit. \@nx\circleclasses won't work. Your copy of tikz is older than the version spectralsequences was designed for and seems to be incompatible with \string\circleclasses. Update tikz!}
+ \sseq@newerror{foreach-patch-failed}{Failed to patch \string\foreach. The errors spectralsequences provides will be less comprehensive. Your copy of tikz is older than the version spectralsequences was designed for and seems to be incompatible with parts of the error handling system.}
+ \sseq@newerror{circleclasses-not-provided}{\@nx\circleclasses won't work because your copy of tikz is too old. Instead I'm doing nothing. Update tikz!}
+}
+
+
+\def\sseq@pgfkeyspatchfailed {
+ \msg_critical:nn { spectralsequences } { pgfkeys-patch-failed }
+}
+
+\sseq@newerror@internal{expl3-incompatibility}{Since this version of spectralsequences, the expl3 definition of #1 was updated in an incompatible way.}
+
+
+\sseq@newerror@internal{this-shouldnt-happen}{This branch of the code should be unreachable. Something really weird has happened. Error occurred in #1.}
+
+% Convexity thing
+\sseq@newerror{clip-not-convex}{The clip you provided to the "clip" option was not convex and the current edge intersects it more than two times. I'm not going to draw it.}
+
+
+%%
+%%
+%% loadstore
+%%
+%%
+\sseq@newerror@internal{illegal-add-background-mode}{\string#1 occurred in background mode.}
+
+
+
+%%
+%%
+%% macromakers
+%%
+%%
+\sseq@newerror@internal{U-xparse-incompatible}{The 'U' argument type is incompatible with the current version of xparse.}
+\sseq@newerror{won't-override-builtin}{Macro '#1' is a spectralsequences builtin and I won't override it. Try a different name.}
+\sseq@newerror{usermacro-not-free}{Macro '#1' has already been defined using \string\DeclareSseqCommand, \string\NewSseqCommand, \string\DeclareSseqGroup, or \string\NewSseqGroup. I am overriding it. If this is what you intended, you should either use \@nx\DeclareSseqGroup or \string\DeclareSseqCommand, which won't complain.}
+
+\sseq@newerror{macro-patch-failed}{Failed to patch macro '#1'. This is probably some annoying catcode issue. Try \@nx\tracingpatches to see more information about why the patch failed.}
+\sseq@newerror{usermacro-unsupported-argument-type}{Unsupported argument type '#1'. All argument types in the 2017/05/29 release of xparse are supported except for v, e, and E.}
+
+%%
+%%
+%% parsers
+%%
+%%
+\sseq@newerror{classpattern-already-defined}{Class pattern '#1' already defined. Overwriting it.}
+\sseq@newerror{classpattern-unexpected-token}{Unexpected token '#1' in class pattern definition. Skipping the definition.}
+\sseq@newerror{classpattern-missing-tokens}{Incomplete class pattern definition. Skipping the definition.}
+\sseq@newerror{classpattern-extra-coord-ignored}{Extra coordinate '#1' ignored. You probably forgot a semicolon.}
+\sseq@newerror{classpattern-too-few-coords}{Too few coordinates in row #1.}
+
+\sseq@newerror{classpattern-too-many-classes}{%
+ Too many classes in position #1. You are trying to add a #2th class, but the current class pattern is "#3" which only defines offset patterns for up to #4 classes.
+ If you need to have this many classes in this position, you can make your own class pattern with \string\sseqnewclasspattern, but you might want to consider alternatives like using one class to represent multiple generators in some way -- it is hard to make a diagram look good with large numbers of classes in one position.%
+}
+
+\sseq@newerror{invalid-coordinate}{Invalid #1coordinate\sseq@printforerrortype.}
+\sseq@newerror{no-classes}{No classes yet exist in #1\sseq@printerrortype{, the }.}
+\sseq@newerror{index-too-large}{Index '#1' provided\sseq@printforerrortype\ is too large -- only #2 classes exist at position #3.}
+\sseq@newerror{undefined-tag}{Index '#1' provided\sseq@printforerrortype\ is not a valid integer expression or known tag in position #2.}
+\sseq@newerror{class-no-tag}{The class #1 has no tag so I cannot get it.}
+
+\sseq@newerror{class-extra-coords}{Too many coordinates. Ignoring the extra ones.}
+\sseq@newerror{named-coordinate-class}{You can't pass a named coordinate to \string\class.} % Probably not actually possible to obtain this error
+\sseq@newerror{d-no-degree}{%
+ You must specify the degree of your spectral sequence if you want to use the differential command \string\d.
+ Specify the degree by providing 'degree={f(\#1)}{g(\#1)}' as an option to '\string\begin{sseqdata}',
+ where f(\#1) and g(\#1) are formulas for the x and y degree of the \#1th page differential.%
+}
+\sseq@newerror{d-named-coord-two-indexes}{You provided a named class and two indexes, but the named class already comes with an index so you can only provide one more for the target. Ignoring the second index.}% should be a warning
+\sseq@newerror{d-target-index-target-coord}{You provided both a target index and a target coordinate, but this overdetermines the differential. Ignoring the target index.}
+\sseq@newerror{d-wrong-degree}{Differential does not respect grading. The target should be in position #1 but instead it is #2 in position #3.}
+
+\sseq@newerror{index-ignored} {The coordinate #1 is not a class, but it has an index '#3'. Ignoring the index and treating it as the literal position #2.}
+\sseq@newerror{anchor-ignored} {The coordinate #1 is not a class, but it has an anchor '#3'. Ignoring the anchor and treating it as the literal position #2.}
+\sseq@newerror{invalid-tikz-coord}{The coordinate #1 does not refer to a tikz class but its #2 coordinate is not valid \string\pgfmathparse\ input.}
+
+% handlers
+\sseq@newerror{NormalizeMonomial-invalid-exponent}{The exponent #1 of the variable #2 in the monomial #3 is not a valid integer expression. Giving up on processing this monomial -- I will leave it alone and hope for the best.}
+\sseq@newerror{AHSSNameHandler-missing-cell}{The name #1 has no cell (an integer expression surrounded by brackets). Giving up on processing it and returning my input in \string\result.}
+\sseq@newerror{AHSSNameHandler-invalid-integer}{The cell degree #1 of #2 is not a valid integer expression. I am leaving it alone, but I processed the monomial.}
+
+
+
+%%
+%%
+%% foreach
+%%
+%%
+\sseq@newerror{DoUntil-no-bound}{You used #1 but specified neither an x range nor a y range.}
+\sseq@newerror{DoUntil-no-progress}{You used #1 but the loop body you provided seems to be making no progress towards the boundary.}
+\sseq@newerror{Do-invalid-int-expr}{Argument "#2" to #1 is not a valid integer expression.}
+
+
+
+
+%%
+%%
+%% keys
+%%
+%%
+
+\def\sseq@possiblecurrentvalue{\ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text\else=\pgfkeyscurrentvalue\fi}
+\def\sseq@possiblecurrentvaluemean{\ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text\else={\@xp\sseq@macrogobble\meaning\pgfkeyscurrentvalue}\fi}
+
+\sseq@newerror{option-illegal}{%
+ You said '#1\sseq@possiblecurrentvalue', but the option '#1' is
+ illegal in the sseqdata and sseqpage environments#3.%
+}
+\sseq@newerror{option-illegal-as-global}{%
+ You passed '#1\sseq@possiblecurrentvalue' as a global option, but option '#1' is illegal as a global option.%
+}
+\sseq@newerror{option-global-only}{%
+ You said '#1\sseq@possiblecurrentvaluemean', but the option '#1' is
+ only allowed as a global option (as in '\string\begin{sseqdata}[#1\sseq@possiblecurrentvaluemean]'
+ or '\string\begin{sseqpage}[#1\sseq@possiblecurrentvaluemean]').%
+}
+
+% Applies to name and page, and saying "sseqs={name=somename}" is just a bad idea.
+\sseq@newerror{option-no-default-allowed}{%
+ You cannot set a default value for '#1'.% Try \@nx\sseqset{sseqs={#1\ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text\else=\pgfkeyscurrentvalue\fi}}.%
+}
+\sseq@newerror{option-tikz-prims-only}{%
+ You can only use '#1' as an option for tikz primitives, not for \@nx\class, \@nx\replaceclass, \@nx\classoptions, \@nx\d, \@nx\doptions, \@nx\structline, or \@nx\structlineoptions.%
+}
+
+\sseq@newerror{invalid-intexpr}{The value '#2' provided for key '#1' is not a valid integer expression.}
+\sseq@newerror{invalid-positive-intexpr}{The value '#2' provided for key '#1' does not evaluate to a positive integer.}
+\sseq@newerror{invalid-dimenexpr}{The value '#2' provided for key '#1' is not a valid dimension expression.}
+\sseq@newerror{invalid-color}{The value '#2' provided for key '#1' is not a valid color or color expression.}
+\sseq@newerror{invalid-axis-type}{The value '#1' provided for '\sseq@axistypekey{#2}' is not valid. Valid values for '\sseq@axistypekey{#2}' are: \sseq@validaxestypes}
+
+\sseq@newerror{det-one-after-scale}{You cannot use the option '#1\ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text\else=\pgfkeyscurrentvalue\fi' as a global option after using 'xscale', 'yscale', or 'scale'. Please move '#1\ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text\else=\pgfkeyscurrentvalue\fi' before any scaling options.}
+\sseq@newerror{invalid-scale}{You said '#1scale=#2' as a global option, but '#2' is not a valid pgf math expression.}
+\sseq@newerror{unit-scale}{You said '#1scale=#2' as a global option, but '#2' is not a scalar.}
+\sseq@newerror{negative-scale}{You said '#1scale=#2' as a global option, but scaling by negative numbers is not allowed as a global option. Instead, please use the option '#1mirror', and then scale by the absolute value.}
+
+\sseq@newerror{illegal-transform}{%
+ You said '#1\ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text\else=\pgfkeyscurrentvalue\fi', but
+ no coordinate transforms are allowed in the body of sseqpage or sseqdata other than shifts by unit-free integers
+ except as options for tikz primitives or for scopes that only contain tikz primitives. If you need a coordinate transformation,
+ first use the option 'standard parse'.%
+}
+
+\sseq@newerror{unknown-key}{I do not know the key "\pgfkeyscurrentname".}
+\sseq@newerror{unknown-global}{Undefined global option '\pgfkeyscurrentname\@xp\ifx\pgfkeyscurrentvalue\pgfkeysnovalue\else=\pgfkeyscurrentvalue\fi'.}
+
+\sseq@newerror{scope-quotes}{Quotes are not allowed as options to a scope.}
+\sseq@newerror{tikz-edge-quotes}{If you want to use quotes on a tikz edge, please provide it directly to the 'to' command e.g., \@nx\draw (0,0) to["hi"] (1,0);}
+
+\sseq@newerror{change-style-data}{It's pointless to use 'change #1s' in the sseqdata environment. Try '#1s={##1}' instead.}
+\sseq@newerror{change-style-standalone}{It's pointless to use 'change #1s' in a standalone sseqpage environment. Try '#1s={##1}' instead.}
+\sseq@newerror{page-update-existing}{Option 'update existing' is only for the sseqdata environment.}
+\sseq@newerror{page-no-name}{You can't specify a page but no name.}
+\sseq@newerror{keep-changes-no-name}{Option 'keep changes' is only for named spectral sequences.}
+\sseq@newerror{keep-changes-sseqdata}{Option 'keep changes' is only for the sseqpage environment.}
+\sseq@newerror{unknown-grid}{Undefined grid style '#1'.}
+\sseq@newerror{unknown-class-pattern}{Unknown class pattern '\sseq@classpattern'.}
+\sseq@newerror{class-placement-shift}{Shifts are illegal in the transformations applied in "class placement" key. If you want to shift your nodes, use \string\sseqnewclasspattern.} % #1 <- x shift, #2 <- shift amount
+\sseq@newerror@internal{do-command-failed}{\string\sseq@pgfkeysdocommand{#1}{#2} failed.}
+
+\sseq@newerror{standard-parse}{You cannot use \string#1 inside a scope that has either the background key or coordinate transformations other than integer shifts.}
+
+\sseq@newerror{no-tooltip}{You cannot use the 'tooltip' option without either using the 'tooltips' package option or giving your own definition for '\string\sseqtooltip'.
+ Tooltips aren't enabled by default because they use the 'pdfcomment' package which creates two extra auxiliary files.%
+}
+
+%%
+%%
+%% main
+%%
+%%
+
+\sseq@newerror{endenv-mismatch}{\string\begin {\@currenvir }\@currenvline \space ended by \string\end {#1}. I'm going to run the code for \string\end{\@currenvir} instead.}
+\sseq@newerror{env-inside-tikz}{#1 environment started inside tikz.}
+\sseq@newerror{env-inside-sseq}{#1 environment started inside other sseq environment.}
+\sseq@newerror{env-data-no-name}{Every 'sseqdata' environment must have a name. Specify one by saying 'name=your sseq name'.}
+\sseq@newerror{env-data-already-exist}{A spectral sequence with the name '#1' already exists; updating it. If you want to add to an already existing spectral sequence, please pass the option 'update existing'.} % warning
+\sseq@newerror{env-page-not-exist}{No spectral sequence named '#1' exists. Making a new one.} % warning
+
+
+\sseq@newerror{is-alive-illegal-here}{You can't use \@nx\isalive outside of a page constraint for a tikz primitive.}
+
+\sseq@newerror{no-range}{Empty spectral sequence. For every spectral sequence you must either specify both the "x range" and "y range" or include at least one
+\string\class.} % maybe warning?
+\sseq@newerror{range-overflow}{The #1 range #2 is too large. The maximum #1 range to fit on the page with the current #1scale and plot options is #1max - #1min = #3. The maximum #1scale possible with the current #1range is #4. Either change the scale or the range as appropriate.}
+\sseq@newerror{range-super-overflow}{The #1 range #2 is too large. The maximum range possible is #1max - #1min = 16383 because of internal limitations of etex. }
+
+\sseq@newerror{index-out-of-bounds}{Index #1 is greater than or equal to the current stack depth #2. Valid indices must be strictly less than the stack depth.}
+\sseq@newerror{incomplete-tikz}{Incomplete tikz expression. What I have so far is #1 and I am stopping because I ran into #2. You probably forgot a semicolon.}
+
+
+\sseq@newerror{cmdoptions-only}{You can only use the '#1' option with #2, not with #3.} % warning
+\sseq@newerror{cmdoptions-without-options}{There is no reason to use \string#1 without giving options.} % warning
+\sseq@newerror{cmdoptions-feature-doesn't-exist}{There is no #1 of the form '\sseq@thiscall' so I can't add options to it.}
+
+\sseq@newerror{classoptions-already-dead}{Generation #1 of the class #2 perished on page #3 so there is no reason to add an option to it on page \sseq@thepage.}
+\sseq@newerror{classoptions-not-yet-born}{Generation #1 of the class #2 is not yet present on page \sseq@thepage\ so there is no reason to add an option to it.}
+\sseq@newerror{classoptions-page-gen}{Don't use both "page" and "generation" for the same \@nx\classoption command.} % warning
+\sseq@newerror{classoptions-class-already-named}{The class \coord\ already is named '\sseq@obj{class.\classname.name}'. Overwriting it. Use \@nx\nameclass if you want to give it a second name.}%warning
+\sseq@newerror{doptions-invisible}{Cannot add options to invisible differential.}
+\sseq@newerror{doptions-no-effect-on-this-page}{Adding an option to a differential on page #1 when the current page is \sseq@thepage\ and the 'keep changes' option is not present has no effect.}
+
+\sseq@newerror{class-tag-already-defined}{A class with tag '#1' is already defined in position #2. Overwriting it.} % warning
+
+\sseq@newerror{replaceclass-not-dead-yet}{I cannot replace the class at #1 because it seems to be alive and well.}
+\sseq@newerror{replaceclass-no-effect-on-this-page}{The class at #1 died on page #2 so replacing it only affects pages after #3, but the current page is \sseq@thepage.} % warning
+
+
+
+\sseq@newerror{d-invalid-page}{Invalid page '#1'.}
+\sseq@newerror{d-class-already-hit}{% #1 <-#3, #2 <-\csname #3name\endcsname, #3 <- #2, #4 <- \unexpanded\@xpthree{\sseq@obj{\sseq@temp.deathinfo}}
+ The #1 #2 of differential \sseq@thiscall\ on page #3 has already been the #4.
+ Use \string\replaceclass#2 before \sseq@thiscall.%
+}
+\sseq@newerror{d-hit-same-page-replaceclass}{%#1 <- #3, #2 <- \csname #3name\endcsname, #3 <- #2, #3 <-\sseq@obj{#1[\the\sseq@tempcount].deathinfo},
+ The #1 #2 of differential \sseq@thiscall\ was the #3.
+ If multiple differentials touch a class on the same page, they cannot be separated by a \@nx\replaceclass command.%
+}
+\sseq@newerror{d-hit-wrong-order}{%
+ The #1 #2 of differential \sseq@thiscall\ on page #3 has already been the #4.
+ First use the shorter differential, then \string\replaceclass#2, then the longer differential.%
+}
+
+
+\sseq@newerror{structline-no-page-max}{You cannot provide \@nx\structline with the option "page=min--max", only with "page=min".} %warning
+\sseq@newerror{structline-already-exists}{Cannot add a structline from #1 to #2 because such a structline already exists.}
+\sseq@newerror{structline-stillborn}{Structline dies before it is born. Perhaps you meant to specify a different source or target?}
+\sseq@newerror{structline-source-target-equal}{The source and target of a \@nx\structline cannot be equal.}
+
+
+\protected\def\sseq@quiet{\msg_redirect_module:nnn{spectralsequences}{error}{info}}
+\protected\def\sseq@endquiet{}
+
+\ExplSyntaxOff
diff --git a/graphics/pgf/contrib/spectralsequences/sseqparsers.code.tex b/graphics/pgf/contrib/spectralsequences/sseqparsers.code.tex
new file mode 100644
index 0000000000..f6376a303c
--- /dev/null
+++ b/graphics/pgf/contrib/spectralsequences/sseqparsers.code.tex
@@ -0,0 +1,1746 @@
+%%
+%% Package: spectralsequences v1.2.2 2017-09-16 2017-09-16
+%% Author: Hood Chatham
+%% Email: hood@mit.edu
+%% Date: 2019-02-18
+%% License: Latex Project Public License
+%%
+%% File: sseqparsers.code.tex
+%%
+%% Defines the parsers and input sanitizers. Also handles tikz primitive parsing and \isalive.
+%% ExplSyntaxOn for this whole file!
+
+\ExplSyntaxOn
+\let\sseq@NoValue\c__xparse_no_value_tl
+% They changed \c__xparse_no_value_tl to \c_novalue_tl at some point. If the first definition doesn't work, try again.
+\@ifundefined{sseq@NoValue}{\let\sseq@NoValue\c_novalue_tl}{}
+
+\protected\def\sseqparseint#1#2{
+ \sseq@ifintexpr{#2+0}{ % +0 here to prevent \lastx from freaking out if it's at the end of #2.
+ \edef#1{\the\numexpr#2\relax}
+ }{
+ \sseq@error{invalid-int-expr}
+ }
+}
+
+% WARNING: doesn't work =(
+\def\sseq@ifint#1{
+ \ifcat$\romannumeral0#1$
+ \prg_return_true:
+ \else
+ \ifcat$\romannumeral-0#1$
+ \prg_return_true:
+ \else
+ \prg_return_false:
+ \fi
+ \fi
+}
+
+% Prevent \protect from causing trouble for \pgfmathparse
+\let\sseq@pgfmathparse@orig\pgfmathparse
+\protected\def\sseq@pgfmathparse#1{\let\@@protect\protect\def\protect{}\sseq@pgfmathparse@orig{#1}\restore@protect}
+
+
+%%% ifpgfmathexpr
+% #1 -- expression to test
+% #2 -- true case
+% #3 -- false case
+% This tests true if \pgfmathparse{#1} throws an error or not. Luckily, \pgfmathparse pipes its errors through \pgfmath@error so this is easy.
+\def\sseq@ifpgfmathexpr#1{
+ \begingroup
+ \let\protect\pgfutil@empty
+ \global\sseq@gtempiftrue
+ \def\pgfmath@error##1##2{\global\sseq@gtempiffalse\sseq@closegroups\sseq@break}
+ \def\sseq@groupflag{}
+ \pgfmathparse{#1}
+ \global\let\ifpgfmathunitsdeclared\ifpgfmathunitsdeclared
+ \ifpgfmathunitsdeclared
+ \xdef\sseq@mathresult{\pgfmathresult pt}
+ \else
+ \xdef\sseq@mathresult{\pgfmathresult}
+ \fi
+ \endgroup
+ \sseq@breakpoint
+ \ifsseq@gtempif
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi
+}
+
+\def\sseq@closegroups{\ifx\sseq@groupflag\empty\endgroup\@xp\sseq@closegroups\fi}
+
+
+% Test if single token input is a digit
+\def\sseq@ifdigit#1{
+ \ifodd0
+ \ifx#1 0 1 \else
+ \ifx#1 1 1 \else
+ \ifx#1 2 1 \else
+ \ifx#1 3 1 \else
+ \ifx#1 4 1 \else
+ \ifx#1 5 1 \else
+ \ifx#1 6 1 \else
+ \ifx#1 7 1 \else
+ \ifx#1 8 1 \else
+ \ifx#1 9 1 \else
+ \fi \fi \fi \fi \fi
+ \fi \fi \fi \fi \fi
+ \relax
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi
+}
+
+%%% ifintexpr
+% #1 -- expresion to test
+% #2 -- true case
+% #3 -- false case
+% This tests true if \numexpr #1\relax throws no error and consumes all of #1 and false otherwise.
+
+% Spaces matter to us, because \sseq@ifintexpr{1 1} is false but \sseqsifintexpr{11} is true
+% so we make spaces into catcode other and use \scantokens
+\def\sseq@fexpsafenil{\@nx\sseq@fexpsafenil}
+
+\def\sseq@ifintexpr#1{%
+ \bgroup
+ \sseq@tempcount\z@
+ \sseq@ifintexpr@{needsint}#1\sseq@fexpsafenil%
+ \@xp\egroup\next
+}
+
+% We need to use \futurelet so that we can detect open braces even when they only surround one token like {1}
+% also we use it to detect spaces. Store the state in \sseq@ifintexpr@state first.
+\def\sseq@ifintexpr@#1{\def\sseq@ifintexpr@state{#1}\futurelet\testtok\sseq@ifintexpr@@}
+\def\sseq@ifintexpr@@{%
+ \ifx\testtok\bgroup%
+ \let\next\sseq@ifintexpr@false
+ \else
+ \ifx\testtok\sseq@fexpsafenil
+ \@xp\let\@xp\next\csname sseq@ifintexpr@@\sseq@ifintexpr@state @done\endcsname
+ \else
+ % We need to check here for a space because \string<space> produces NO OUTPUT regardless of the catcode of the space.
+ % This messes up \sseq@ifintexpr@@@ because it doesn't expect \string#1 to produce no characters.
+ \@xp\ifx\space\testtok
+ \def\next{\sseq@ifintexpr@next{\space}\@xp\next\romannumeral-`0}
+ \else
+ \let\next\sseq@ifintexpr@@@
+ \fi
+ \fi
+ \fi
+ \next
+}
+
+\def\sseq@ifintexpr@@@#1{
+ \ifcat$\@xp\@gobble\string#1$%
+ \@xp\sseq@ifintexpr@@@@\@xp#1
+ \else
+ % This is a macro, so fexpand it
+ % Then use f expansion.
+ \@xp\sseq@ifintexpr@@@fexpcs\@xp#1
+ \fi
+}
+
+\def\sseq@ifintexpr@@@fexpcs{\exp_last_unbraced:Nf\sseq@ifintexpr@@@fexpcs@}
+\def\sseq@ifintexpr@@@fexpcs@{\futurelet\testtok\sseq@ifintexpr@@@fexpcs@@}
+\def\sseq@ifintexpr@@@fexpcs@@{
+ \ifx\testtok\bgroup
+ \@xp\sseq@ifintexpr@false % We already tested for groups above, so we need to check if this expanded to a group
+ \else
+ \@xp\sseq@ifintexpr@@@@ % If it's still a control sequence, then this will fail in the \pgfutil@ifundefined step
+ \fi
+}
+
+
+
+% We can't just use \futurelet because "\let\testtok(" makes \testtok unexpandable
+% (I guess that makes sense, but why is it that I need \@xp\ifx\otherspace above if I've also \let\otherspace to a character? Mysterious...),
+% so then "\csname hello\testtok\endcsname" is an error. This indexes into our state machine,
+% cases: a digits, + or -, * or /, (, ), or something else (anything else always leads to false
+\def\sseq@ifintexpr@@@@#1{%
+ \ifx#1\sseq@fexpsafenil
+ \def\next{\csname sseq@ifintexpr@@\sseq@ifintexpr@state @done\endcsname\sseq@fexpsafenil}%
+ \else
+ \sseq@ifdigit{#1}%
+ {\sseq@ifintexpr@next{digit}}%
+ {%
+ \ifx#1+%
+ \sseq@ifintexpr@next{+-}
+ \else
+ \ifx#1-%
+ \sseq@ifintexpr@next{+-}
+ \else
+ \ifx#1*%
+ \sseq@ifintexpr@next{*/}
+ \else
+ \ifx#1/%
+ \sseq@ifintexpr@next{*/}
+ \else
+ % This extra \string here is so that if a control sequence fexpanded and still gave a control sequence,
+ % we don't get a missing \endcsname error here, it just returns false
+ \pgfutil@ifundefined{sseq@ifintexpr@@\sseq@ifintexpr@state @\string#1}%
+ {\let\next\sseq@ifintexpr@false}%
+ {\sseq@ifintexpr@next{#1}}%
+ \fi
+ \fi
+ \fi
+ \fi
+ }%
+ \fi
+ \next
+}
+
+\def\sseq@ifintexpr@true#1\sseq@fexpsafenil{\ifnum\sseq@tempcount=\z@ \let\next\@firstoftwo\else\let\next\@secondoftwo\fi}
+\def\sseq@ifintexpr@false#1\sseq@fexpsafenil{\let\next\@secondoftwo}
+
+\def\sseq@makeifint#1#2#3{\@xp\def\csname sseq@ifintexpr@@#1@#2\endcsname{#3}}
+\def\sseq@ifintexpr@next#1{\@xp\let\@xp\next\csname sseq@ifintexpr@@\sseq@ifintexpr@state @#1\endcsname}
+
+\sseq@makeifint{needsint}{done}{\sseq@ifintexpr@false}
+\sseq@makeifint{needsint}{digit}{\sseq@ifintexpr@{int}}
+\sseq@makeifint{needsint}{*/}{\sseq@ifintexpr@false}
+\sseq@makeifint{needsint}{+-}{\sseq@ifintexpr@{needsint}}
+\sseq@makeifint{needsint}{(}{\advance\sseq@tempcount\@ne\sseq@ifintexpr@{needsint}}
+\sseq@makeifint{needsint}{)}{\sseq@ifintexpr@false}
+\sseq@makeifint{needsint}{\space}{\sseq@ifintexpr@{needsint}}
+
+\sseq@makeifint{int}{done}{\sseq@ifintexpr@true}
+\sseq@makeifint{int}{digit}{\sseq@ifintexpr@{int}}
+\sseq@makeifint{int}{*/}{\sseq@ifintexpr@{needsint}}
+\sseq@makeifint{int}{+-}{\sseq@ifintexpr@{needsint}}
+\sseq@makeifint{int}{(}{\sseq@ifintexpr@false}
+\sseq@makeifint{int}{)}{
+ \advance\sseq@tempcount\m@ne
+ \ifnum\sseq@tempcount<\z@\relax
+ \@xp\@xp\@xp\sseq@ifintexpr@false\@xp\@gobble
+ \else
+ \@xp\sseq@ifintexpr@
+ \fi{nointallowed}
+}
+\sseq@makeifint{int}{\space}{\sseq@ifintexpr@{nointallowed}}
+
+\sseq@makeifint{nointallowed}{done}{\sseq@ifintexpr@true}
+\sseq@makeifint{nointallowed}{digit}{\sseq@ifintexpr@false}
+\sseq@makeifint{nointallowed}{*/}{\sseq@ifintexpr@{needsint}}
+\sseq@makeifint{nointallowed}{+-}{\sseq@ifintexpr@{needsint}}
+\sseq@makeifint{nointallowed}{(}{\sseq@ifintexpr@false}
+\sseq@makeifint{nointallowed}{)}{
+ \advance\sseq@tempcount\m@ne
+ \ifnum\sseq@tempcount<\z@
+ \@xp\@xp\@xp\sseq@ifintexpr@false\@xp\@gobble
+ \else
+ \@xp\sseq@ifintexpr@
+ \fi{nointallowed}
+}
+\sseq@makeifint{nointallowed}{\space}{\sseq@ifintexpr@{nointallowed}}
+
+%%
+%% This parser defines the syntax for the page argument of \d.
+%%
+%% #1 -- callback. Will pass control to this function when done.
+%% stores output in \sseq@dpage
+%% It also sets the flag \sseq@tempif to be
+%% true if there is an open parenthesis after the page
+%% false if there is no open parentheis -- so no optional argument for \d.
+\def\sseq@d@grabpage#1{
+ \let\sseq@grabdpage@return#1
+ \futurelet\testtok\sseq@grabdpage@
+}
+\def\sseq@grabdpage@{
+ \sseq@tempiftrue
+ \ifx\testtok\bgroup
+ \let\next\sseq@grabdpage@group
+ \else
+ \def\sseq@dpage{}
+ \let\next\sseq@grabdpage@norm
+ \fi
+ \next
+}
+
+\def\sseq@grabdpage@group#1{\def\sseq@dpage{#1}\sseq@grabdpage@return}
+
+% I guess this is "norm" because it's the most basic case.
+% Why did I make this so complicated?
+\def\sseq@grabdpage@norm{
+ \futurelet\testtok\sseq@grabdpage@norm@
+}
+
+% If the next token is a open group or a new paragraph, we're done collecting and there's no parenthetical argument.
+% If the next token is an open paren, we're done collecting and there is a parenthetical argument.
+% Spaces get added to the token list (I guess that's important because it changes arithmetic sometimes? there must have been an issue at some point)
+% Every other token gets handled by \sseq@grabdpage@token
+\def\sseq@grabdpage@norm@{
+ \let\next\sseq@grabdpage@token
+ \ifx\testtok\bgroup % Open group ==> done collecting page, no optional argument
+ \sseq@tempiffalse
+ \let\next\sseq@grabdpage@return
+ \else
+ \ifx\testtok\par % new paragraph ==> done collecting page, no optional argument
+ \sseq@tempiffalse
+ \let\next\sseq@grabdpage@return
+ \else
+ \ifx\testtok( % paren ==> done collecting page, optional argument
+ \let\next\sseq@grabdpage@return
+ \else
+ \@xp\ifx\space\testtok
+ \let\next\sseq@grabdpage@space
+ \fi
+ \fi
+ \fi
+ \fi
+ \next
+}
+
+\def\sseq@grabdpage@space{\sseq@d@addto@macro\sseq@dpage{~}\@xp\sseq@grabdpage@norm\romannumeral-`0}
+
+% All other tokens
+\def\sseq@grabdpage@token#1{
+ \ifcat$\@xp\@gobble\string#1$% % If #1 is a non-macro token, just add it to \sseq@dpage
+ \sseq@d@addto@macro\sseq@dpage{#1}
+ \@xp\sseq@grabdpage@norm
+ \else % Now it's a macor
+ \ifx#1\end % \end ==> done
+ \sseq@tempiffalse
+ \@xp\sseq@grabdpage@return\@xp#1\romannumeral-`0
+ \else
+ \ifx#1\begin % \begin ==> done
+ \sseq@tempiffalse
+ \@xp\sseq@grabdpage@return\@xp#1\romannumeral-`0
+ \else % Otherwise, let's try to expand it.
+ \@xp\sseq@grabdpage@token@fexpcs\@xp#1\romannumeral-`0
+ \fi
+ \fi
+ \fi
+}
+
+\def\sseq@grabdpage@token@fexpcs{\exp_last_unbraced:Nf\sseq@grabdpage@token@fexpcs@}
+\def\sseq@grabdpage@token@fexpcs@{\futurelet\testtok\sseq@grabdpage@token@fexpcs@@}
+\def\sseq@grabdpage@token@fexpcs@@{
+ \ifx\testtok\bgroup
+ \sseq@tempiffalse
+ \@xp\sseq@grabdpage@return
+ \else
+ \@xp\sseq@grabdpage@token@fexpcs@@@
+ \fi
+}
+\def\sseq@grabdpage@token@fexpcs@@@#1{
+ \ifcat$\@xp\@gobble\string#1$% Did it fexpand into a non control sequence token?
+ \sseq@d@addto@macro\sseq@dpage{#1} % If so add it
+ \@xp\sseq@grabdpage@norm
+ \else
+ \sseq@tempiffalse
+ \@xp\sseq@grabdpage@return\@xp#1% Else remember to put the token back if we're not going to use it!!
+ \fi
+}
+
+
+%%
+%%
+%% New Class Pattern
+%%
+%%
+
+\newcount\sseq@cp@row
+\newcount\sseq@cp@n
+
+\def\sseqnewclasspattern#1#2{
+ \ifcsname sseq@#1xoffset1/1\endcsname\sseq@error@n{classpattern-already-defined}{#1}\fi % could be a warning
+ \begingroup
+ \def\sseq@name{#1}
+ \def\sseq@temp{}
+ \def\sseq@state{nocoord}
+ \sseq@cp@row=\@ne
+ \sseq@cp@n=\z@
+ \let\next\sseq@newclasspattern@
+ \sseq@newclasspattern@#2\sseq@nil
+}
+
+\def\sseq@newclasspattern@{
+ \@ifnextchar\bgroup{\sseq@error@n{classpattern-unexpected-token}{\{}}{\sseq@newclasspattern@processstate}
+}
+
+\def\sseq@newclasspattern@processstate{
+ \csname sseq@newclasspattern@processstate@\sseq@state\endcsname
+}
+
+\def\sseq@newclasspattern@processstate@xcoord#1{
+ \ifx#1,
+ \sseq@ifpgfmathexpr{\sseq@temp}{
+ \let\sseq@tempx\sseq@mathresult
+ \def\sseq@temp{}
+ \def\sseq@state{ycoord}
+ }{
+ \sseq@error{classpattern-not-integer-expression}
+ \let\next\sseq@newclasspattern@abort
+ }
+ \else
+ \ifx#1\sseq@nil
+ \sseq@error{classpattern-missing-tokens}
+ \let\next\endgroup
+ \else
+ \sseq@d@addto@macro\sseq@temp{#1}
+ \fi
+ \fi
+ \next
+}
+
+\def\sseq@newclasspattern@processstate@ycoord#1{
+ \ifx#1)
+ \sseq@ifpgfmathexpr{\sseq@temp}{% Need iffloatexpr =(
+ \let\sseq@tempy\sseq@mathresult
+ \def\sseq@temp{}
+ \def\sseq@state{nocoord}
+ \advance\sseq@cp@n\@ne
+ \ifnum\sseq@cp@n>\sseq@cp@row\relax
+ \sseq@error@x{classpattern-extra-coord-ignored}{(\sseq@tempx,\sseq@tempy)}
+ \else
+ \sseq@e@addto@macro\sseq@newclasspattern@dodefs{
+ \def\@xp\@nx\csname sseq@\sseq@name xoffset\the\sseq@cp@n/\the\sseq@cp@row\endcsname{\sseq@tempx}
+ \def\@xp\@nx\csname sseq@\sseq@name yoffset\the\sseq@cp@n/\the\sseq@cp@row\endcsname{\sseq@tempy}
+ }
+ \fi
+ }{
+ \sseq@error{classpattern-not-integer-expression}
+ \let\next\sseq@newclasspattern@abort
+ }
+ \else
+ \ifx#1\sseq@nil
+ \sseq@error{classpattern-missing-tokens}
+ \let\next\endgroup
+ \else
+ \sseq@d@addto@macro\sseq@temp{#1}
+ \fi
+ \fi
+ \next
+}
+
+\def\sseq@newclasspattern@processstate@nocoord#1{
+ \ifx#1(
+ \def\sseq@state{xcoord}
+ \else
+ \ifx#1;
+ \ifnum\sseq@cp@n=\sseq@cp@row\relax
+ \advance\sseq@cp@row\@ne
+ \sseq@cp@n=\z@
+ \else
+ \sseq@error@x{classpattern-too-few-coords}{\the\sseq@cp@row}
+ \let\next\sseq@newclasspattern@abort
+ \fi
+ \else
+ \ifx#1\sseq@nil
+ \let\next\sseq@newclasspattern@finish
+ \else
+ \sseq@error@n{classpattern-unexpected-token}{#1}
+ \let\next\sseq@newclasspattern@abort
+ \fi
+ \fi
+ \fi
+ \next
+}
+
+\def\sseq@newclasspattern@finish{
+ \ifnum\sseq@cp@n=\z@\relax
+ \advance\sseq@cp@row\m@ne
+ \else
+ \ifnum\sseq@cp@n=\sseq@cp@row\relax\else
+ \sseq@error@x{classpattern-too-few-coords}{\the\sseq@cp@row}
+ \let\sseq@newclasspattern@dodefs\empty
+ \fi
+ \fi
+ % This will make a definition even if the class pattern was rejected because of the too-few-coords error
+ % It doesn't matter though, because we don't use this to check for existence
+ \sseq@e@addto@macro\sseq@newclasspattern@dodefs{%
+ \chardef\@xp\@nx\csname sseq@\sseq@name @maxclasses\endcsname=\the\sseq@cp@row\relax
+ }%
+ \@xp\endgroup
+ \sseq@newclasspattern@dodefs
+
+
+}
+\def\sseq@newclasspattern@dodefs{}
+\def\sseq@newclasspattern@abort#1\sseq@nil{\endgroup}
+
+
+
+
+%%%%%% %%%%%%
+%% %%
+%% Coordinate Parsers %%
+%% %%
+%%%%%% %%%%%%
+
+
+\def\sseq@ifdead#1{\ifnum\sseq@obj{class.#1[\sseq@obj{class.#1.num}].page}<\sseq@infinitycount\@xp\@firstoftwo\else\@xp\@secondoftwo\fi}
+
+
+% These do all of the work of taking a coordinate of the form (x,y), (x,y,n), or (x,y,tag) and turning them
+% into the internal representation needed for the rest of the package.
+% This comes in two parts:
+% \sseq@parsecoord@maincoord -- separates a coordinate into {x,y}{n or tag}, numerically evaluates x and y, and adds in the values of \sseq@x and \sseq@y
+% \sseq@parsecoord@index -- decides which class {n or tag} represents
+%
+% There are three interface commands:
+% \sseq@parsecoord -- for most things
+% \sseq@cparsecoord -- for \class (but not for \replaceclass or \classoptions). Doesn't use \sseq@parsecoord@index at all.
+% \sseq@dparsecoord -- for \d and \doptions
+% \sseq@parsecoordex -- for \isalive: the body of a page constraint needs to be \edef'd so we need a completely expandable version.
+% The expandable version doesn't have any error checking -- to get the error checking, we pass the coordinates once through the unexpandable version
+% inside of an hbox.
+
+\def\sseq@errortype{}
+\def\sseq@printerrortype#1{\@xp\sseq@ifempty\@xp{\sseq@errortype}{}{#1 \sseq@errortype}}
+\def\sseq@printforerrortype{\sseq@printerrortype{~for~}}
+
+%% Pulls off x,y and evaluates them, puts n or empty into a separate variable.
+% #1 -- a coordinate of the form {x,y} or {x,y,stuff}
+\let\sseq@relax\relax
+% The \sseq@relax is just to make \lastclass work. It has to pull an argument off the token stream to expandably check whether
+% it is an integer. However, without this \sseq@relax, \lastclass could appear as the last token of the edef, which is no good.
+\def\sseq@parsecoord@maincoord#1{\exp_last_unbraced:Nx\sseq@parsecoord@maincoord@{#1\sseq@relax}}
+\def\sseq@parsecoord@maincoord@#1\sseq@relax{%
+ \pgfutil@in@ \sseq@protecterror { #1 }
+ \ifpgfutil@in@
+ \bgroup
+ \sseq@restorefont % This prevents "Missing character" stuff from being written to the log.
+ \let\sseq@protecterror\relax
+ \setbox0=\hbox{#1} % Trigger the error message
+ \egroup
+ \@xp\sseq@break
+ \else
+ \pgfutil@in@,{#1}
+ \ifpgfutil@in@
+ \sseq@parsecoord@maincoord@@#1,\sseq@nil
+ \else
+ \pgfutil@in@{lastclass}{#1}
+ \ifpgfutil@in@
+ \def\handledname{#1}
+ \else
+ \sseq@protectedeval{\@nx\sseq@classname@handler{\sseq@classnameprefix#1\sseq@classnamepostfix}}
+ \let\handledname\result
+ \fi
+ \sseq@obj@ifdef{class.namedclass.\detokenize\@xp{\handledname}}{
+ \let\sourcename\handledname
+ \@xpthree\sseq@parsecoord@maincoord@named\sseq@obj{class.namedclass.\detokenize\@xp{\sourcename}}\sseq@nil
+ }{
+ \sseq@error{invalid-coordinate}\sseq@breakfifi
+ }
+ \fi
+ \fi
+}
+
+\def\sseq@parsecoord@maincoord@@#1,#2,#3\sseq@nil{%
+ \sseq@ifintexpr{#1}{%
+ \sseq@ifintexpr{#2}{}{\sseq@error@n{invalid-coordinate}{y~}\sseq@breakfifi} % breakfifi to get out of ifs from maincoord@
+ \edef\sseq@xcoord{\the\numexpr\sseq@x+(#1)\relax}%
+ \edef\sseq@ycoord{\the\numexpr\sseq@y+(#2)\relax}%
+ \edef\sseq@xycoord{\sseq@xcoord,\sseq@ycoord}%
+ \sseq@ifempty{#3}{\let\sseq@restcoord\pgfutil@empty}{%
+ \edef\sseq@restcoord{\sseq@removecomma#3\sseq@nil}%
+ }%
+ }{%
+ \pgfutil@in@{lastclass}{#1}%
+ \ifpgfutil@in@
+ \def\handledname{#1}%
+ \else
+ \sseq@protectedeval{\@nx\sseq@classname@handler{\sseq@classnameprefix#1\sseq@classnamepostfix}}%
+ \let\handledname\result
+ \fi
+ \sseq@obj@ifdef{class.namedclass.\detokenize\@xp{\handledname}}{%
+ \def\sourcename{#1}
+ \@xpthree\sseq@parsecoord@maincoord@named\sseq@obj{class.namedclass.\detokenize{#1}}\sseq@nil
+ \edef\sseq@restcoord{\sseq@removecomma#2,#3\sseq@nil}%
+ }{%
+ \sseq@error@n{invalid-coordinate}{x~}\sseq@breakfifi % breakfifi to get out of ifs from maincoord@
+ }%
+ }%
+}%
+
+\def\sseq@parsecoord@maincoord@named#1,#2,#3\sseq@nil{
+ \def\sseq@xcoord{#1}%
+ \def\sseq@ycoord{#2}%
+ \edef\sseq@xycoord{\sseq@xcoord,\sseq@ycoord}
+ \def\sseq@restcoord{}
+ \pgfkeys@spdef\sseq@rawindex{#3}
+ \def\sseq@index{#3}
+ \let\rawindex\sseq@rawindex
+ \let\index\sseq@index
+}
+
+\def\sseq@removecomma#1,\sseq@nil{#1}
+
+
+% "Input" to this command is stored in the following commands:
+% \sseq@xycoord -- x,y
+% \sseq@rawindex -- n
+% \sseq@errortype -- description for error messages
+\def\sseq@errortype@tikzprim{tikz ~ primitive}% This is sort of a silly hack, but this first error check shouldn't happen in a tikz primitive.
+\def\sseq@parsecoord@index{%
+ \sseq@obj@ifundef{partcoord.(\sseq@xycoord).numnodes}{
+ \ifx\sseq@errortype\sseq@errortype@tikzprim
+ \def\sseq@index{}% Communicates to \sseq@tikzprimitives@coords@maybeclass that this is not a class
+ \else
+ \sseq@error@x{no-classes}{(\sseq@xycoord)}\@xp\sseq@break
+ \fi
+ }{
+ \ifx\sseq@rawindex\pgfutil@empty
+ \def\sseq@index{1}
+ \else
+ \sseq@obj@ifdef{partcoord.(\sseq@xycoord).tag.\sseq@class@tagprefix\sseq@rawindex}{% If the raw index is a tag
+ \edef\sseq@index{\sseq@obj{partcoord.(\sseq@xycoord).tag.\sseq@class@tagprefix\sseq@rawindex}}
+ }{%
+ \sseq@ifintexpr{\sseq@rawindex}{%
+ \edef\sseq@rawindexeval{\the\numexpr\sseq@rawindex}
+ \ifnum\sseq@rawindexeval<\z@%
+ \edef\sseq@index{\the\numexpr\sseq@obj{partcoord.(\sseq@xycoord).numnodes} + \sseq@rawindex + \@ne\relax}%
+ \ifnum\sseq@index<\@ne
+ \sseq@error@xxx{index-too-large}{\sseq@rawindex}{\sseq@obj{partcoord.(\sseq@xycoord).numnodes}}{(\sseq@xycoord)}%
+ \edef\sseq@index{1}% or maybe I should break?
+ \fi
+ \else
+ \ifnum\sseq@rawindexeval>\sseq@obj{partcoord.(\sseq@xycoord).numnodes}\relax
+ \sseq@error@xxx{index-too-large}{\sseq@rawindex}{\sseq@obj{partcoord.(\sseq@xycoord).numnodes}}{(\sseq@xycoord)}%
+ \edef\sseq@rawindex{\sseq@obj{partcoord.(\sseq@xycoord).numnodes}}% or maybe I should break?
+ \fi
+ \edef\sseq@index{\the\numexpr\sseq@rawindex}
+ \fi
+ }{
+ \sseq@error@xx{undefined-tag}{\sseq@rawindex}{(\sseq@xycoord)}%
+ \def\sseq@index{1}%
+ }
+ }
+ \fi
+ }
+}
+
+% #1 -- name to define
+% #2 -- coordinate
+% #3 -- the error message
+\def\sseq@eatparens(#1){#1}
+\def\sseq@parsecoord#1#2#3{%
+ \def\sseq@index{}%
+ \def\sseq@errortype{#3}%
+ \sseq@parsecoord@maincoord{#2}%
+ \let\sseq@rawindex\sseq@restcoord
+ \ifx\sseq@index\pgfutil@empty
+ \@xp\sseq@parsecoord@index
+ \fi
+ \sseq@parsecoord@setupvariables{#1}{#2}
+}
+
+\def\sseq@parsecoord@setupvariables#1#2{
+ % TODO: clean this up a bit? it's pretty ad-hoc.
+ % Whenever you update this, make sure to update sseq@paredcoords@swap below too.
+ \@xp\let\csname x\sseq@macroname#1\endcsname\sseq@xcoord
+ \@xp\let\csname y\sseq@macroname#1\endcsname\sseq@ycoord
+ \@xp\let\csname n\sseq@macroname#1\endcsname\sseq@index
+ \@xp\let\csname \sseq@macroname#1@partial\endcsname\sseq@xycoord
+ \edef#1{(\sseq@xycoord,\sseq@index)}%
+ \@xp\edef\csname\sseq@macroname#1nopar\endcsname{\sseq@xycoord,\sseq@index}
+ \@xp\edef\csname\sseq@macroname#1name\endcsname{(#2)}%
+ \@xp\edef\csname\sseq@macroname#1nameunbraced\endcsname{\@xptwo\sseq@eatparens\csname\sseq@macroname#1name\endcsname}% edef?
+ \@xp\edef\csname\sseq@macroname#1@internalname\endcsname{sseq{\sseq@xycoord,\sseq@index}}%
+}
+
+
+% This quiets parsecoord for the rest of the current scope.
+% The reason we did it this way is because parsecoord makes too many local definitions...
+\def\sseq@quiet@parsecoord{
+ \msg_redirect_name:nnn {spectralsequences}{invalid-coordinate}{none}
+ \msg_redirect_name:nnn {spectralsequences}{no-classes}{none}
+ \msg_redirect_name:nnn {spectralsequences}{index-too-large}{none}
+ \msg_redirect_name:nnn {spectralsequences}{undefined-tag}{none}
+}
+
+
+% These are used for \replacesource and \replacetarget, though they might be useful for other things too.
+\def\sseq@parsedcoord@save#1#2{
+ \cs_gset_eq:cc { sseq@parsedcoord@save@x#1 } { x\sseq@macroname#2 }
+ \cs_gset_eq:cc { sseq@parsedcoord@save@y#1 } { y\sseq@macroname#2 }
+ \cs_gset_eq:cc { sseq@parsedcoord@save@n#1 } { n\sseq@macroname#2 }
+ \cs_gset_eq:cc { \sseq@macroname#1@partial } { \sseq@macroname#2@partial }
+ \cs_gset_eq:cN { sseq@parsedcoord@save@#1 } #2
+ \cs_gset_eq:cc { sseq@parsedcoord@save@#1nopar } { \sseq@macroname#2nopar }
+ \cs_gset_eq:cc { sseq@parsedcoord@save@#1name } { \sseq@macroname#2name }
+ \cs_gset_eq:cc { sseq@parsedcoord@save@#1nameunbraced } { \sseq@macroname#2nameunbraced }
+ \cs_gset_eq:cc { sseq@parsedcoord@save@#1@internalname } { \sseq@macroname#2@internalname }
+}
+
+\def\sseq@parsedcoord@restore#1#2{
+ \cs_set_eq:cc { x\sseq@macroname#1 } { sseq@parsedcoord@save@x#2 }
+ \cs_set_eq:cc { y\sseq@macroname#1 } { sseq@parsedcoord@save@y#2 }
+ \cs_set_eq:cc { n\sseq@macroname#1 } { sseq@parsedcoord@save@n#2 }
+ \cs_set_eq:cc { \sseq@macroname#1@partial } { #2@partial }
+ \cs_set_eq:Nc #1 { sseq@parsedcoord@save@#2 }
+ \cs_set_eq:cc { \sseq@macroname#1nopar } { sseq@parsedcoord@save@#2nopar }
+ \cs_set_eq:cc { \sseq@macroname#1name } { sseq@parsedcoord@save@#2name }
+ \cs_set_eq:cc { \sseq@macroname#1nameunbraced } { sseq@parsedcoord@save@#2nameunbraced }
+ \cs_set_eq:cc { \sseq@macroname#1@internalname } { sseq@parsedcoord@save@#2@internalname }
+}
+
+% #1 & #2 -- the two base commands that were handed to \sseq@parsecoord to swap.
+% This is only used in \structline to normalize the name of structure lines, so that sseqpages knows what you are talking about
+% if you say \structline(coorda)(coordb) and then later \structline(coordb)(coorda)
+\def\sseq@parsedcoords@swap#1#2{
+ \sseq@parsedcoord@save{swaptempa}{#1}
+ \sseq@parsedcoord@save{swaptempb}{#2}
+ \sseq@parsedcoord@restore{#1}{swaptempb}
+ \sseq@parsedcoord@restore{#2}{swaptempa}
+}
+
+% EXPOSE: a wrapper around \sseq@parsecoord. Use full name of coordinate to avoid name class with sseq@parsecoord.
+\sseq@DeclareDocumentCommand \parsecoordinate { m r() }{%
+ \sseq@parsecoord{#1}{#2}{call of \string\parsecoord}%
+}
+
+% #1 -- coordinate
+\def\sseq@cparsecoord#1{%
+ \def\sseq@index{}
+ \sseq@parsecoord@maincoord{#1}%
+ \ifx\sseq@index\pgfutil@empty\else\sseq@error{named-coordinate-class}\fi% probably not possible to get this error
+ \ifx\sseq@restcoord\pgfutil@empty\else\sseq@error{class-extra-coords}\fi%
+ \let\partialcoord\sseq@xycoord
+ \let\xcoord\sseq@xcoord
+ \let\ycoord\sseq@ycoord
+ \edef\nodenum{\sseq@obj@ifundef{partcoord.(\partialcoord).numnodes}{1}{\the\numexpr\sseq@obj{partcoord.(\partialcoord).numnodes}+1}}%
+ \edef\coordnopar{\xcoord,\ycoord,\nodenum}
+ \edef\coord{(\coordnopar)}%
+}
+
+
+% #1 -- page
+% #2 -- coordinate
+% #3 -- target coordinate or "No Value"
+\def\sseq@dparsecoord#1#2#3{%
+ \def\sseq@index{}%
+ \def\sseq@errortype{differential}%
+ \sseq@parsecoord@maincoord{#2}%
+ \ifx\sseq@index\pgfutil@empty
+ \edef\sseq@rawsindex{\@xp\sseq@dparsecoord@getxindex\@xp{\sseq@restcoord}}%
+ \@xp\pgfkeys@spdef\@xp\sseq@rawsindex\@xp{\sseq@rawsindex}
+ \edef\sseq@rawtindex{\@xp\sseq@dparsecoord@getyindex\@xp{\sseq@restcoord}}%
+ \@xp\pgfkeys@spdef\@xp\sseq@rawtindex\@xp{\sseq@rawtindex}
+%
+ \let\sseq@rawindex\sseq@rawsindex
+ \def\sseq@errortype{source ~ of ~ differential}
+ \@xp\sseq@parsecoord@index % the \@xp is needed so that \sseq@break inside of parsecoordindex works properly.
+ \else
+ \edef\sseq@rawtindex{\@xp\sseq@dparsecoord@getxindex\@xp{\sseq@restcoord}}%
+ \@xp\pgfkeys@spdef\@xp\sseq@rawtindex\@xp{\sseq@rawtindex}
+ \edef\sseq@shouldbeempty{\@xp\sseq@dparsecoord@getyindex\@xp{\sseq@restcoord}}
+ \ifx\sseq@shouldbeempty\pgfutil@empty\else
+ \sseq@error{d-named-coord-two-indexes}
+ \fi
+ \fi
+ \sseq@parsecoord@setupvariables{\source}{(\sseq@xycoord\ifx\sseq@rawindex\pgfutil@empty\else,\sseq@rawindex\fi)}
+ \let\sourcecoord\source@partial
+ \IfNoValueTF{#3}{
+ \ifsseq@hasdegree\else\sseq@error{d-no-degree}\@xp\sseq@break\fi
+ \sseq@eval{\edef\@nx\sseq@xycoord{\@nx\sseq@differential@gettarget{#1}{\sseq@xycoord}}}
+ \let\sseq@rawindex\sseq@rawtindex
+ \def\sseq@errortype{target ~ of ~ differential}
+ \sseq@parsecoord@index
+ \let\targetcoord\sseq@xycoord
+ \sseq@parsecoord@setupvariables{\target}{(\sseq@xycoord\ifx\sseq@rawindex\pgfutil@empty\else,\sseq@rawindex\fi)}
+ }{
+ \ifx\sseq@rawtindex\pgfutil@empty\else
+ \sseq@error{d-target-index-target-coord}
+ \fi
+ \sseq@parsecoord\target{#3}{differential}
+ \let\targetcoord\target@partial
+ \ifsseq@hasdegree
+ \ifsseq@strictdegree
+ \sseq@eval{\edef\@nx\sseq@checktarget{\@nx\sseq@differential@gettarget{#1}{\sourcecoord}}}
+ \ifx\sseq@checktarget\targetcoord\else
+ \sseq@error@xxx{d-wrong-degree}{(\sseq@checktarget)}{\targetname}{(\targetcoord)}
+ \fi
+ \fi
+ \fi
+ }
+ \sseq@parsedcoord@save{lastsource}{\source}
+ \sseq@parsedcoord@save{lasttarget}{\target}
+}
+
+\def\sseq@differential@gettarget#1#2{\sseq@differential@gettarget@{#1}#2\sseq@nil}
+\def\sseq@differential@gettarget@#1#2,#3\sseq@nil{\the\numexpr#2+\sseq@targetx{#1}\relax,\the\numexpr#3+\sseq@targety{#1}\relax}
+
+\def\sseq@getfirsttwoelts#1,#2,#3\sseq@nil{#1,#2}
+\protected\def\sseq@getdtarget#1#2#3{\sseq@eval{\edef\@nx#1{\@nx\sseq@differential@gettarget{#2}{\sseq@getfirsttwoelts#3,,\sseq@nil}}}}
+
+% Takes a comma separated list that can be empty, have one element, or two elements, returns first element (or empty if list is empty).
+\def\sseq@dparsecoord@getxindex#1{\sseq@dparsecoord@getxindex@#1,\sseq@nil}
+\def\sseq@dparsecoord@getxindex@#1,#2\sseq@nil{#1}
+% Takes a comma separated list that can be empty, have one element, or two elements, returns second element (or empty if less than two elements).
+\def\sseq@dparsecoord@getyindex#1{\sseq@dparsecoord@getyindex@#1,\sseq@nil}
+\def\sseq@dparsecoord@getyindex@#1,#2\sseq@nil{%
+ \sseq@ifempty{#2}{}{%
+ \sseq@removecomma#2\sseq@nil%
+ }%
+}
+
+% EXPOSE: a wrapper around \sseq@parsecoord.
+\sseq@DeclareDocumentCommand\parsecoordinate { m r() }{%
+ \sseq@parsecoord{#1}{#2}{call of \string\parsecoord}%
+}
+
+
+% EXPOSE: a wrapper around \sseq@dparsecoord.
+\protected\def\sseq@parsedifferential{%
+ \sseq@d@grabpage\sseq@parsedifferential@
+}
+
+\DeclareDocumentCommand \sseq@parsedifferential@ { d() d() } {%
+ \sseq@eval{\@nx\sseq@dparsecoord{\sseq@dpage}{\IfNoValueTF{#1}{\lastclass0}{\unexpanded{#1}}}{\unexpanded{#2}}}%
+}
+
+% Expandable coordinate parsing for \isalive.
+% Doesn't do any error checking -- the error checking is done by passing it through \sseq@parsecoord in a non-\edef context.
+% #1 -- a callback. Must be a single command b/c it's an N in \exp_args
+% #2 -- the coordinate
+\cs_set:Npn \exp_last_unbraced:NNNf #1#2#3#4
+ {
+ \exp_after:wN #1
+ \exp_after:wN #2
+ \exp_after:wN #3
+ \exp:w \exp_end_continue_f:w #4
+ }
+
+\def\sseq@parsecoordex{\exp_last_unbraced:NNNf\sseq@parsecoordex@}
+\def\sseq@parsecoordex@#1(#2){\sseq@parsecoordex@@#1#2,\@nil}
+\def\sseq@parsecoordex@@#1#2,#3,#4\@nil{
+ \ifx&#4&
+ \exp_last_unbraced:NNo\sseq@parsecoord@indexex#1(\the\numexpr#2\@xp,\the\numexpr#3,1)
+ \else
+ \exp_args:NNo\sseq@parsecoord@indexex#1{\the\numexpr#2\@xp,\the\numexpr#3\@xp\relax\@xp}\@xp{\sseq@removecomma#4\sseq@nil}
+ \fi
+}
+
+
+% This is \sseq@parsecoord@index pared down as much as possible -- all error checking is removed because that will happen in a
+% \setbox0=\hbox{stuff} sequestered calculation that uses \sseq@parsecoord@index instead.
+% #1 -- callback which takes one argument -- the final coordinate in parentheses.
+% #2 -- x,y
+% #3 -- n
+\def\sseq@parsecoord@indexex#1#2#3{%
+ \sseq@obj@ifdef{partcoord.(#2).tag.\sseq@class@tagprefix#3}{% If the raw index is a tag
+ \exp_args:NNo\sseq@parsecoord@indexex@#1{\the\numexpr\sseq@obj{partcoord.(#2).tag.\sseq@class@tagprefix#3}}{#2}%
+ }{%
+ \ifnum\numexpr#3<0\space
+ \exp_args:NNo\sseq@parsecoord@indexex@#1{\the\numexpr\sseq@obj{partcoord.(#2).numnodes} + #3 + 1}{#2}%
+ \else
+ \exp_args:NNo\sseq@parsecoord@indexex@#1{\the\numexpr#3}{#2}%
+ \fi
+ }%
+}
+\def\sseq@parsecoord@indexex@#1#2#3{
+ #1(#3,#2)
+}
+
+
+
+
+%%%
+%%% The Stack
+%%%
+
+% This maybe should be moved into sseqmain.code.tex...
+\sseq@addtostorelist\sseq@stacktop{}
+\def\sseq@stackitem#1#2{\csname sseq.\sseq@thename.stack.#1.#2\endcsname} % gobble #2 which we added in for the error message
+\def\sseq@getstackentry#1#2{
+ \ifnum#1<\sseq@stackdepth
+ \exp_args:No\sseq@getstackentry@{\sseq@stacktop}{#1}{#2}
+ \else
+ \sseq@protecterror{\sseq@error@xx{index-out-of-bounds}{#1}{\the\sseq@stackdepth}}
+ \fi
+}
+
+\def\sseq@getstackentry@#1#2{
+ \ifnum#2=\z@\@xp\@firstoftwo\else\@xp\@secondoftwo\fi
+ { \sseq@stackitem{#1} }
+ { \exp_args:Nco\sseq@getstackentry@ { sseq.\sseq@thename.stack.#1.next } { \the\numexpr#2-1 } }
+}
+
+
+\protected\def\sseq@pushstack(#1){
+ \bgroup
+ \sseq@parsecoord\temp{#1}{}
+ \sseq@pushstack@\temp
+ \egroup
+}
+
+% Note that \class directly calls pushstack@ to avoid reparsing the coordinate
+\def\sseq@pushstack@{\@xp\sseq@pushstack@@}
+
+\def\sseq@pushstack@@(#1,#2,#3){
+ \global\advance\sseq@stackdepth\@ne
+ \@xp\gdef\csname sseq.\sseq@thename.stack.\the\sseq@stackdepth.lastx\endcsname{#1}
+ \@xp\gdef\csname sseq.\sseq@thename.stack.\the\sseq@stackdepth.lasty\endcsname{#2}
+ \@xp\xdef\csname sseq.\sseq@thename.stack.\the\sseq@stackdepth.lastclass\endcsname{lastclass.\the\sseq@stackdepth}
+ \sseq@obj@gdef{class.namedclass.lastclass.\the\sseq@stackdepth}{#1,#2,#3}
+ \global\@xp\let\csname sseq.\sseq@thename.stack.\the\sseq@stackdepth.next\endcsname\sseq@stacktop
+ \xdef\sseq@stacktop{\the\sseq@stackdepth}
+}
+
+
+\newcount\sseq@userstacksavecount
+\protected\def\sseq@savestack{
+ \global\advance\sseq@userstacksavecount\@ne
+ \sseq@savestack@name{usersave@\the\sseq@userstacksavecount}
+}
+\protected\def\sseq@restorestack{
+ \sseq@restorestack@name{usersave@\the\sseq@userstacksavecount}
+ \global\advance\sseq@userstacksavecount\m@ne
+}
+
+\def\sseq@savestack@name#1{\sseq@obj@xdef{stack.save#1}{\sseq@stacktop}}
+
+\def\sseq@restorestack@name#1{\xdef\sseq@stacktop{\sseq@obj{stack.save#1}}}
+
+\def\sseq@lastx#1{
+ % \romannumeral is testing here whether #1 is a nonnegative integer
+ % if #1 consists of a single nonnegative integer then -0#1 will be turned into some nonpositive integer
+ % and romannumeral produces no output when handed a nonpositive integer, so the result will be empty.
+ % If #1 has any nonnumerical tokens or is negative, there will be left over stuff.
+ %
+ % We also have to subtract off \sseq@x so that this behaves correctly inside of a scope (the \lastx value should be unshifted)
+ \@xp\sseq@ifempty\@xp{\romannumeral-0#1}{
+ \the\numexpr\sseq@getstackentry{#1}{lastx}-\sseq@x\relax
+ }{
+ \the\numexpr\sseq@getstackentry{0}{lastx}-\sseq@x\relax#1 % #1 isn't a number so put it back
+ }
+}
+\def\sseq@lasty#1{
+ \@xp\sseq@ifempty\@xp{\romannumeral-0#1}{
+ \the\numexpr\sseq@getstackentry{#1}{lasty}-\sseq@y\relax
+ }{
+ \the\numexpr\sseq@getstackentry{0}{lasty}-\sseq@y\relax#1 % #1 isn't a number so put it back
+ }
+}
+
+\def\sseq@lastclass#1{
+ \@xp\sseq@ifempty\@xp{\romannumeral-0#1}{
+ \sseq@getstackentry{#1}{lastclass}
+ }{
+ \sseq@getstackentry{0}{lastclass}#1 % #1 isn't a number so put it back
+ }
+}
+
+
+\sseq@DeclareDocumentCommand\nameclass {mr()} {
+ \bgroup
+ \sseq@setthiscall{\sseq@nameclass#1(#2)}
+ \let\sseq@possibleoninputlinepar\empty
+ \sseq@parsecoord\coord{#2}{}
+ \sseq@cleanup@obj{class.namedclass.#1}
+ \sseq@obj@xdef{class.namedclass.#1}{\coordnopar}
+ \sseq@breakpoint
+ \egroup
+}
+
+\sseq@DeclareDocumentCommand\tagclass{mr()}{
+ \bgroup
+ \sseq@setthiscall{\tagclass#1(#2)}
+ \let\sseq@possibleoninputlinepar\empty
+ \def\sseq@class@tag{#1}
+ \sseq@parsecoord\coord{#2}{}%
+ \sseq@obj@ifdef{partcoord.(\sseq@xycoord).tag.\sseq@class@tagprefix\sseq@class@tag}{%
+ \sseq@error@nn{class-tag-already-defined}{\sseq@class@tagprefix\sseq@class@tag}{(\sseq@xycoord)}% could be warning
+ }%
+ \sseq@cleanup@obj{class.\coord.tag}%
+ \sseq@obj@xdef{class.\coord.tag}{\sseq@class@tagprefix\sseq@class@tag}%
+ \sseq@cleanup@obj{partcoord.(\sseq@xycoord).tag.\sseq@class@tagprefix\sseq@class@tag}%
+ \sseq@obj@xdef{partcoord.(\sseq@xycoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\sseq@index}%
+ \sseq@breakpoint
+ \egroup
+}
+
+\sseq@DeclareDocumentCommand\gettag{mr()}{
+ \bgroup
+ \sseq@setthiscall{\gettag#1(#2)}
+ \let\sseq@possibleoninputlinepar\empty
+ \sseq@parsecoord\coord{#2}{}
+ \sseq@obj@ifdef{class.\coord.tag}{
+ \xdef#1{\sseq@obj{class.\coord.tag}}
+ }{
+ \sseq@error@n{class-no-tag}{(#2)}
+ }
+ \sseq@breakpoint
+ \egroup
+}
+
+\prg_new_conditional:Npnn \sseq_if_empty:n #1 {T,F,TF} {
+ \sseq@ifempty{\prg_return_true:}{\prg_return_false:}
+}
+
+\let\SseqIfEmptyTF\sseq_if_empty:nTF
+\let\SseqIfEmptyT\sseq_if_empty:nT
+\let\SseqIfEmptyF\sseq_if_empty:nF
+
+% Test if a class exists.
+\prg_new_conditional:Npnn \sseq_if_exists:n #1 { T , F , TF } {
+ \bgroup
+ \sseq@tempiftrue
+ \sseq@quiet@parsecoord
+ \sseq@parsecoord\coord{#1}{}
+ \@gobbletwo\sseq@breakpoint\sseq@tempiffalse % this executes \sseq@tempiffalse if we broke, otherwise it gets gobbled
+ \ifsseq@tempif
+ \egroup
+ \prg_return_true:
+ \else
+ \egroup
+ \prg_return_false:
+ \fi
+}
+
+% Test if a class is out of bounds. Return false if the class doesn't exist.
+\prg_new_conditional:Npnn \sseq_if_out_of_bounds:n #1 { T , F , TF } {
+ \bgroup
+ \sseq@tempiftrue
+ \sseq@quiet@parsecoord
+ \sseq@parsecoord\coord{#1}{}
+ \@gobbletwo\sseq@breakpoint\sseq@tempiffalse % this executes \sseq@tempiffalse if we broke, otherwise it gets gobbled
+ \ifsseq@tempif
+ \sseq_if_out_of_bounds_noparse:nnTF { \xcoord } { \ycoord }{\egroup\prg_return_true:}{\egroup\prg_return_false:}
+ \else
+ \egroup
+ \prg_return_false:
+ \fi
+}
+
+% For internal use b/c it's faster not to call \sseq@parsecoord
+\prg_new_conditional:Npnn \sseq_if_out_of_bounds_noparse:nn #1#2 {TF} {
+ \sseq@tempiftrue
+ \ifnum#1<\sseq@xmaxpp\relax\ifnum#1>\sseq@xminmm\relax\ifnum#2<\sseq@ymaxpp\relax\ifnum#2>\sseq@yminmm\relax
+ \sseq@tempiffalse
+ \fi\fi\fi\fi
+ \ifsseq@tempif
+ \prg_return_true:
+ \else
+ \prg_return_false:
+ \fi
+}
+
+\prg_new_conditional:Npnn \sseq_if_alive:nn #1 #2 { T, F, TF } {
+ \bgroup
+ \sseq@tempiftrue
+ \sseq@quiet@parsecoord
+ \sseq@parsecoord\coord{#2}{}
+ \@gobbletwo\sseq@breakpoint\sseq@tempiffalse
+ \ifsseq@tempif
+ \sseq@obj@pagetogen{class.\coord}{#1}
+ \ifnum\sseq@gen>-1\relax
+ \egroup
+ \prg_return_true:
+ \else
+ \egroup
+ \prg_return_false:
+ \fi
+ \else
+ \egroup
+ \prg_return_false:
+ \fi
+}
+
+
+\protected\def\sseq@DrawIfValidDifferential{\sseq@DrawIfValidDifferential@{}{}}
+\protected\def\sseq@DrawIfValidDifferentialT{\sseq@DrawIfValidDifferential@{T}{}}
+\protected\def\sseq@DrawIfValidDifferentialF{\sseq@DrawIfValidDifferential@{}{F}}
+\protected\def\sseq@DrawIfValidDifferentialTF{\sseq@DrawIfValidDifferential@{T}{F}}
+
+\DeclareDocumentCommand\sseq@DrawIfValidDifferential@{mmO{}}{%
+ \begingroup
+ \sseq@loadinputline
+ \def\sseq@dtype{d}
+ \def\sseq@trueclause{#1}
+ \def\sseq@falseclause{#2}
+ \def\sseq@doptions{#3}
+ \sseq@d@grabpage\sseq@DrawIfValidDifferential@@
+}
+
+
+% #4 -- first coord
+% #5 -- possible second coord
+\DeclareDocumentCommand \sseq@DrawIfValidDifferential@@ { d() d() } {%
+ \ifx\sseq@trueclause\pgfutil@empty
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi{\sseq@DrawIfValidDifferential@@@{#1}{#2}{}}
+ {\sseq@DrawIfValidDifferential@@@{#1}{#2}}
+}
+
+% #1 -- first coord
+% #2 -- possible second coord
+% #3 -- rest of true clause
+\def \sseq@DrawIfValidDifferential@@@#1#2#3{
+ \sseq@eval{\endgroup%\@nx\tracingall
+ \exp_not:c{sseq_if_valid_differential:nnT\sseq@falseclause}{\sseq@dpage}{\IfNoValueTF{#1}{\lastclass0}{\unexpanded{#1}}}{\unexpanded{#2}}{%
+ \@nx\d[\exp_not:o{\sseq@doptions}]\sseq@dpage\IfNoValueF{#1}{(\unexpanded{#1})}\IfNoValueF{#2}{(\unexpanded{#2})}%
+ \unexpanded{#3}%
+ }%
+ }%
+}
+
+\protected\def\sseq@IfValidDifferentialTF{\sseq@IfValidDifferential{TF}}
+\protected\def\sseq@IfValidDifferentialT{\sseq@IfValidDifferential{T}}
+\protected\def\sseq@IfValidDifferentialF{\sseq@IfValidDifferential{F}}
+
+\protected\def\sseq@IfValidDifferential#1{%
+ \bgroup
+ \def\sseq@truefalseclauses{#1}
+ \sseq@d@grabpage{\sseq@IfValidDifferential@}
+}
+
+\DeclareDocumentCommand \sseq@IfValidDifferential@ { d() d() } {%
+ \sseq@eval{\egroup\exp_not:c{sseq_if_valid_differential:nn\sseq@truefalseclauses}{\sseq@dpage}{\IfNoValueTF{#1}{\lastclass0}{\unexpanded{#1}}}{\unexpanded{#2}}}%
+}
+
+\prg_new_conditional:Npnn \sseq_if_valid_differential:nn #1 #2 #3 { T, F, TF } {
+ \bgroup
+ \sseq@tempiftrue
+ \sseq@ifintexpr{#1}{%
+ \edef\sseq@pagenum{\the\numexpr#1\relax}
+ }{%
+ \sseq@break% return false
+ }%
+ \sseq@quiet@parsecoord
+ \msg_redirect_name:nnn {spectralsequences} {d-wrong-degree} {none}
+ \msg_redirect_name:nnn {spectralsequences} {d-target-index-target-coord} {none}
+ \msg_redirect_name:nnn {spectralsequences} {d-named-coord-two-indexes} {none}
+ \msg_redirect_name:nnn {spectralsequences} {d-hit-wrong-order} {none}
+ \msg_redirect_name:nnn {spectralsequences} {d-class-already-hit} {none}
+ \msg_redirect_name:nnn {spectralsequences} {d-hit-same-page-replaceclass}{none}
+ \sseq@dparsecoord{\sseq@pagenum}{#2}{#3}
+ \let\sseq@obj@xdef\@gobbletwo
+ \sseq@d@setpageclass{class.\source}{\sseq@pagenum}{source}
+ \sseq@d@setpageclass{class.\target}{\sseq@pagenum}{target}
+ \@gobbletwo\sseq@breakpoint\sseq@tempiffalse
+ \ifsseq@tempif
+ \egroup
+ \prg_return_true:
+ \else
+ \egroup
+ \prg_return_false:
+ \fi
+}
+
+
+
+\sseq@DeclareDocumentCommand \IfExistsTF { r() } { \sseq_if_exists:nTF { #1 } }
+\sseq@DeclareDocumentCommand \IfExistsT { r() } { \sseq_if_exists:nT { #1 } }
+\sseq@DeclareDocumentCommand \IfExistsF { r() } { \sseq_if_exists:nF { #1 } }
+
+\sseq@DeclareDocumentCommand \IfOutOfBoundsTF { r() } { \sseq_if_out_of_bounds:nTF { #1 } }
+\sseq@DeclareDocumentCommand \IfOutOfBoundsT { r() } { \sseq_if_out_of_bounds:nT { #1 } }
+\sseq@DeclareDocumentCommand \IfOutOfBoundsF { r() } { \sseq_if_out_of_bounds:nF { #1 } }
+\sseq@DeclareDocumentCommand \IfInBoundsTF { r() mm } { \sseq_if_out_of_bounds:nTF { #1 } { #3 } { #2 } }
+\sseq@DeclareDocumentCommand \IfInBoundsT { r() } { \sseq_if_out_of_bounds:nF { #1 } }
+\sseq@DeclareDocumentCommand \IfInBoundsF { r() } { \sseq_if_out_of_bounds:nT { #1 } }
+
+\sseq@DeclareDocumentCommand \IfAliveTF { mr() }{ \sseq_if_alive:nnTF{#1}{#2}}
+\sseq@DeclareDocumentCommand \IfAliveT { mr() } { \sseq_if_alive:nnT{#1}{#2}}
+\sseq@DeclareDocumentCommand \IfAliveF { mr() } { \sseq_if_alive:nnF{#1}{#2}}
+
+
+%%%%%%
+%%%
+%%% Tikz Primitives
+%%%
+%%%%%%
+
+% Replace a tikz command with a command that saves the command on savedpaths
+
+\def\sseq@modtikzcommands{%
+ \let\scope\sseq@scope
+ \let\endscope\sseq@endscope
+ \@xp\sseq@modtikzcommands@\sseq@tikzcommands\sseq@nil
+}
+\def\sseq@modtikzcommands@#1{%
+ \ifx#1\sseq@nil\else
+ \protected\edef#1{\@xp\@nx\csname\sseq@macroname#1\space\endcsname\@nx#1}%
+ \@xp\let\csname\sseq@macroname#1\space\endcsname\sseq@defer@tikzcommand % This is just for error reporting so that it will say "Paragraph ended before \draw was complete"
+ \@xp\sseq@modtikzcommands@
+ \fi
+}
+
+\def\sseq@defer@tikzcommand#1{%
+ \begingroup
+ \let\sseq@isaliveprotect\sseq@isaliveprotect@protect
+ \sseq@setinputline
+ \sseq@loadinputline
+ \sseq@callas{#1}%
+ \gdef\sseq@thepathsofar{#1[/utils/exec={\sseq@thesseqstyle\sseq@thetikzprimitivestyle\the\sseq@scope@toks\sseq@savedoptioncode}]}%
+ \xdef\sseq@whattheusersaid{\string#1}
+ \sseq@defer@tikzcommand@
+}
+
+\def\sseq@defer@tikzcommand@{%
+ \futurelet\testtok\sseq@defer@tikzcommand@@
+}
+
+\def\sseq@defer@tikzcommand@@{%
+ \ifx\testtok;
+ \let\next\sseq@defer@tikzcommand@finish
+ \else
+ \ifx\testtok[%
+ \let\next\sseq@defer@tikzcommand@option
+ \else
+ \ifx\testtok(%
+ \let\next\sseq@defer@tikzcommand@coord
+ \else
+ \@xp\ifx\space\testtok
+ \let\next\sseq@defer@tikzcommand@space
+ \else
+ \ifx\testtok\bgroup
+ \let\next\sseq@defer@tikzcommand@group
+ \else
+ \let\next\sseq@defer@tikzcommand@other
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \sseq@call{\next}%
+}
+
+
+\def\sseq@defer@tikzcommand@option[#1]{%
+ \sseq@processoptions{tikz ~ primitives}{#1}%
+ \ifx\sseq@savedoptioncode\pgfutil@empty\else
+ \sseq@x@addto@macro\sseq@thepathsofar{[/utils/exec={\unexpanded\@xp{\@xp\sseq@options@bothpassmode\sseq@savedoptioncode}}]}%
+ \fi
+ \sseq@g@addto@macro\sseq@whattheusersaid{[#1]}
+ \sseq@defer@tikzcommand@
+}
+
+\def\sseq@defer@tikzcommand@coord(#1){
+ \sseq@tikzprimitives@coord(#1)
+ \sseq@g@addto@macro\sseq@whattheusersaid{(#1)}
+ \sseq@defer@tikzcommand@
+}
+
+% When do groups occur in tikz commands? should we try to parse the inside?
+\def\sseq@defer@tikzcommand@group#1{
+ \sseq@g@addto@macro\sseq@whattheusersaid{{#1}}
+ \sseq@xprotected@addto@macro\sseq@thepathsofar{{#1}}%
+ \sseq@defer@tikzcommand@
+}
+
+\long\def\sseq@defer@tikzcommand@other#1{
+ \ifcat$\@xp\@gobble\string#1$ % test for control word. Won't catch active characters.
+ \@xp\use_i:nnn
+ \else
+ \@xp\ifx\csname sseq@illegalintikz@\string#1\endcsname\relax
+ \exp_last_unbraced:Nf \use_ii:nnn
+ \else
+ \exp_last_unbraced:Nf \use_iii:nnn
+ \fi
+ \fi{ % case i: it's not a control word. Just add it to the saved path
+ \sseq@g@addto@macro\sseq@whattheusersaid{#1}
+ \sseq@g@addto@macro\sseq@thepathsofar{#1}%
+ \sseq@defer@tikzcommand@
+ }{ % case ii: it's some different control word. Let's try full expanding it.
+ % note that here we cannot figure out what the user actually said, so we just have to report the f-expanded version.
+ \def\tempa{#1} % save the current value
+ \exp_last_unbraced:Nf \sseq@defer@tikzcommand@other@cs#1
+ }{ % case iii: it's an illegal control word (e.g., \class, \d, \begin, \end, ...) throw an error.
+ \sseq@error@xx{incomplete-tikz}{\unexpanded\@xp{\sseq@whattheusersaid}}{
+ \ifx\par#1 the ~ start ~ of ~ a ~ new ~ paragraph
+ \else \string#1\fi
+ }
+ \sseq@defer@tikzcommand@finish@ % finish@ doesn't try to grab a semicolon, which is good because there isn't one.
+ #1 % Reinsert the token that is causing us to stop
+ }
+}
+
+\def\sseq@defer@tikzcommand@other@cs#1{ % so we f expanded the control sequence, now we test if that did anything
+ \def\tempb{#1} % get the first f expanded token
+ \ifx\tempa\tempb
+ \@xp\@firstoftwo
+ \else
+ \@xp\@secondoftwo
+ \fi{% it didn't get expanded any more, so just add it to the stored stuff
+ \sseq@g@addto@macro\sseq@whattheusersaid{#1}
+ \sseq@g@addto@macro\sseq@thepathsofar{#1}
+ \sseq@defer@tikzcommand@
+ }{% it got expanded. Run it through the main loop again.
+ \sseq@defer@tikzcommand@#1
+ }
+}
+
+% Illegal control words:
+\long\def\sseq@setillegalcontrolwords#1{\sseq@setillegalcontrolwords@#1\sseq@nil}
+\long\def\sseq@setillegalcontrolwords@#1{
+ \ifx#1\sseq@nil\else
+ \@xp\def\csname sseq@illegalintikz@\string#1\endcsname{}
+ \@xp\sseq@setillegalcontrolwords@
+ \fi
+}
+
+% We missing anything here?
+\sseq@setillegalcontrolwords{
+ \class\classoptions\replaceclass\d\doptions\structline\structlineoptions\circleclasses
+ \savestack\restorestack\pushstack\nameclass\foreach\begin\end\par
+ \clip\coordinate\draw\fill\filldraw
+ \graph\matrix\node\path\pattern
+ \shade\shadedraw\useasboundingbox
+}
+
+
+\@xp\def\@xp\sseq@defer@tikzcommand@space\space{%
+ \sseq@g@addto@macro\sseq@thepathsofar{~}%
+ \sseq@g@addto@macro\sseq@whattheusersaid{~}
+ \sseq@defer@tikzcommand@
+}
+
+\def\sseq@defer@tikzcommand@finish;{
+ \sseq@g@addto@macro\sseq@whattheusersaid{;}
+ \sseq@defer@tikzcommand@finish@
+}
+
+% If the expression was incomplete, we'll jump here to avoid adding the semicolon to the error printout
+\def\sseq@defer@tikzcommand@finish@{
+ \sseq@g@addto@macro\sseq@thepathsofar{;}
+ \global\sseq@thiscalltoks\@xp{\sseq@whattheusersaid}
+ \ifx\sseq@pageconstraint\sseq@pageconstraint@true
+ \sseq@savedpaths@xaddtikzpath{\unexpanded\@xp{\sseq@thepathsofar}}%
+ \else
+ \sseq@savedpaths@xaddtikzpath{%
+ \@nx\sseq@tikzcommand@conditionaldraw{\unexpanded\@xp{\sseq@thepathsofar}}{\unexpanded\@xp{\sseq@pageconstraint}}
+ }%
+ \fi
+ \endgroup
+}
+
+
+\def\sseq@tikzcommand@conditionaldraw#1#2{%
+ \sseq@pgfmathparse@rescan{#2}%
+ \ifnum\pgfmathresult>\z@ #1 \fi
+}
+
+\def\sseq@pgfmathparse@rescan#1{\makeatletter\catcode`\&=12\relax\scantokens{\pgfmathparse{#1}}}
+
+%%% Coordinate parser, copied with huge simplifications from \tikz@@scan@@no@calculator, tikz.code.tex line 4994.
+%%% We don't need to handle any of the weird cases, we just need to know about them so we can give up and let tikz do the work later.
+% TODO: do same coordinate fixing for coordinates in calculations (yeah right! not even clear this is a good idea...)
+\def\sseq@tikzprimitives@coord(#1){
+ \begingroup
+ \let\next\sseq@tikzprimitives@coords@maybenamedclass
+ \ifsseq@tikzprims@integershift
+ \pgfutil@in@${#1}
+ \ifpgfutil@in@
+ \let\next\sseq@tikzprimitives@coords@handlemath
+ \else
+ \pgfutil@in@ :{#1}
+ \ifpgfutil@in@\else
+ \pgfutil@in@{intersection }{#1}
+ \ifpgfutil@in@\else
+ \pgfutil@in@|{#1}%
+ \ifpgfutil@in@\else
+ \pgfutil@in@,{#1}
+ \ifpgfutil@in@
+ \let\next\sseq@tikzprimitives@coords@maybeclass
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \next{#1}
+ \endgroup
+}
+\def\sseq@tikzprimitives@coords@maybeclass#1{
+ \let\next\sseq@tikzprimitives@coords@notaclass % most branches do this.
+ % First check whether there are any of the protect "to be determined later" variables like \xmax, etc. If there are, it's not a class
+ \sseq@protected@edef\sseq@temp@i{#1}
+ \edef\sseq@temp@ii{#1}
+ \ifx\sseq@temp@i\sseq@temp@ii
+ \@xp\sseq@tikzprimitive@getcoord@anchor#1.\sseq@nil % puts coord into \sseq@tempcoord, anchor if any into \sseq@tempanchor
+ \exp_args:NNo\pgfutil@in@.{\sseq@tempanchornopt} % If there's an extra . in the "anchor", it's not an anchor, and this is not a class
+ \ifpgfutil@in@\else
+ \exp_args:NNo \pgfutil@in@,{\sseq@tempcoord} % If the . we used to delineate the "anchor" was in the x-coordinate, it's not an anchor and this is not a class
+ \ifpgfutil@in@
+ \exp_args:NNo \pgfutil@in@,{\sseq@tempanchornopt} % If there is a comma in the "anchor" it's not an anchor and this is not a class
+ \ifpgfutil@in@\else
+ \ifx\sseq@tempanchor\pgfutil@empty
+ \sseq@tempiftrue
+ \else % If there's an "anchor" we need to test whether the expression is a valid decimal coordinate. If it is, we're going to treat it as not a class
+ % outputs into sseq@tempif, sets sseq@tempiffalse if it IS valid math, b/c then we're not a anchor
+ \sseq@anchortrue % If this ends up getting handled as a tikz coordinate, we'll have to add an "anchor ignored" error
+ \sseq@tikzprimitives@testlastcoord@validmathexpression#1,\sseq@nil
+ \fi
+ \ifsseq@tempif
+ \@xp\sseq@tikzprimitives@ifintcoords\@xp{\sseq@tempcoord}{ % check we're all integer coordinates
+ \sseq@parsecoord\coord{\sseq@tempcoord}{tikz ~ primitive}%
+ \ifx\sseq@index\pgfutil@empty\else
+ \sseq@x@addto@macro\sseq@thepathsofar{(sseq{\sseq@removeparens\coord}\sseq@tempanchor)}% Okay, we're all set, it's a class
+ \let\next\@gobble % don't run \sseq@tikzprimitives@notaclass
+ \fi
+ }{}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \next{#1}
+}
+
+% Sets tempiffalse if if the second coordinate IS a valid math expression -- then t
+\def\sseq@tikzprimitives@testlastcoord@validmathexpression#1,#2,#3\sseq@nil{
+ \sseq@ifpgfmathexpr{#2}{
+ \sseq@tempiffalse
+ }{
+ \sseq@tempiftrue
+ }
+}
+
+\def\sseq@tikzprimitives@coords@maybenamedclass#1{%
+ \sseq@tikzprimitive@getcoord@anchor#1.\sseq@nil % puts coord into \sseq@tempcoord, anchor if any into \sseq@tempanchor
+ \protected@edef\sseq@tempcoord{\sseq@tempcoord}%
+ % need this detokenize here to prevent it from throwing errors when there's a command inside...
+ \sseq@obj@ifdef{class.namedclass.\detokenize\@xp{\sseq@tempcoord}}{
+ \sseq@x@addto@macro\sseq@thepathsofar{(sseq{\sseq@obj{class.namedclass.\detokenize\@xp{\sseq@tempcoord}}\sseq@tempanchor})}%
+ }{%
+ \sseq@tikzprimitives@coords@notaclass{#1}%
+ }%
+}
+
+\let\sseq@tikzprimitives@coords@maybeclass@save\sseq@tikzprimitives@coords@maybeclass
+
+
+\def\sseq@tikzprimitives@coords@notaclass#1{
+ \def\next{\sseq@tikzprimitives@coords@notaclass@leavetotikz{#1}}
+ \pgfutil@in@${#1}
+ \ifpgfutil@in@\else
+ \pgfutil@in@ :{#1}
+ \ifpgfutil@in@\else
+ \pgfutil@in@{intersection }{#1}
+ \ifpgfutil@in@\else
+ \pgfutil@in@|{#1}%
+ \ifpgfutil@in@\else
+ \pgfutil@in@,{#1}
+ \ifpgfutil@in@
+ \def\next{\sseq@tikzprimitives@coords@notaclass@handle{#1}}
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \next
+}
+
+\def\sseq@tikzprimitives@coords@notaclass@leavetotikz#1{
+ \sseq@g@addto@macro\sseq@thepathsofar{(#1)}
+}
+
+\def\sseq@tikzprimitives@coords@notaclass@handle#1{
+ \ifsseq@anchor
+ % Still seems impossible to trigger this?
+ \sseq@error@xxx{anchor-ignored}{(#1)}{(\unexpanded\@xp{\sseq@tempcoord})}{\sseq@tempanchor}
+ \@xp\sseq@tikzprimitives@coords@notaclass@handle@\sseq@tempcoord,\sseq@nil
+ \else
+ \sseq@tikzprimitives@coords@notaclass@handle@#1,\sseq@nil
+ \fi
+}
+
+\def\sseq@tikzprimitives@coords@notaclass@handle@#1,#2,#3\sseq@nil{
+ \sseq@ifempty{#3}{
+ \let\sseq@index\pgfutil@empty
+ }{
+ \edef\sseq@index{,\unexpanded\@xp{\sseq@removecomma#3\sseq@nil}}
+ \edef\sseq@indexnocomma{\unexpanded\@xp{\sseq@removecomma#3\sseq@nil}}
+ }
+ \sseq@ifpgfmathexpr{#1}{%
+ % Decide whether we can keep the result, which is stored in \sseq@mathresult
+ \protected@edef\sseq@tempa{#1}
+ \edef\sseq@tempb{#1}
+ \ifx\sseq@tempa\sseq@tempb
+ \let\sseq@tempx\sseq@mathresult
+ \else
+ \def\sseq@tempx{#1}
+ \fi
+ }{
+ \sseq@error@xx{invalid-tikz-coord}{(#1,#2\sseq@index)}{x}
+ \def\sseq@defer@tikzcommand@finish;{\endgroup}
+ }
+ \sseq@ifpgfmathexpr{#2}{
+ % Decide whether we can keep the result, which is stored in \sseq@mathresult
+ \protected@edef\sseq@tempa{#2}
+ \edef\sseq@tempb{#2}
+ \ifx\sseq@tempa\sseq@tempb
+ \let\sseq@tempy\sseq@mathresult
+ \else
+ \def\sseq@tempy{#2}
+ \fi
+ }{
+ \sseq@error@xx{invalid-tikz-coord}{(#1,#2\sseq@index)}{y}
+ \def\sseq@defer@tikzcommand@finish;{\endgroup}
+ }
+ \def\sseq@tempa{#1}
+ \ifx\sseq@index\pgfutil@empty\else
+ \sseq@error@xxx{index-ignored}{(\unexpanded{#1,#2}\unexpanded\@xp{\sseq@index})}{\unexpanded{(#1,#2)}}{\unexpanded\@xp{\sseq@indexnocomma}}
+ \fi
+ \sseq@xprotected@addto@macro\sseq@thepathsofar{(\sseq@tempx,\sseq@tempy)}
+}
+
+\def\sseq@tikzprimitives@ifintcoords#1{\sseq@tikzprimitives@ifintcoords@#1,\sseq@nil}
+\def\sseq@tikzprimitives@ifintcoords@#1,#2,#3\sseq@nil{%
+ \sseq@ifintexpr{#1}{%
+ \sseq@ifintexpr{#2}{%
+ \@firstoftwo
+ }{\@secondoftwo}%
+ }{\@secondoftwo}%
+}
+\def\sseq@tikzprimitives@coords@handlemath#1{\sseq@tikzprimitives@coords@handlemath@(#1)}
+\def\sseq@tikzprimitives@coords@handlemath@#1$#2$){\sseq@g@addto@macro\sseq@thepathsofar{#1$#2$)}}
+\def\sseq@tikzprimitive@getcoord@anchor#1.#2\sseq@nil{
+ \def\sseq@tempcoord{#1}
+ \ifx\sseq@nil#2\sseq@nil
+ \def\sseq@tempanchor{}
+ \def\sseq@tempanchornopt{}
+ \else
+ \edef\sseq@tempanchor{.\sseq@tikzprimitive@getcoord@anchor@eatdot#2}
+ \edef\sseq@tempanchornopt{\sseq@tikzprimitive@getcoord@anchor@eatdot#2}
+ \fi
+}
+\def\sseq@tikzprimitive@getcoord@anchor@eatdot#1.{#1}
+\def\sseq@uptopt#1.#2\sseq@nil{#1}
+%%% Page constraint and \isalive
+% #1 -- the new page constraint
+% #2 -- a binary logical operator (&& or ||).
+\def\sseq@updatepageconstraint#1#2{
+ \def\sseq@isaliveprotect{}
+ \let\sseq@isalive@\sseq@isalive@active
+ \bgroup
+ % Was pretty hard to get \isalive to report errors correctly. And to work in general >_<
+ \let\sseq@isalive@parens\sseq@isalive@parens@check
+ \sseq@d@addto@macro\sseq@error@hook{\let\protect\relax}%
+ \let\protect\@unexpandable@protect
+ \edef\sseq@error@annotation{\unexpanded{.^^J(In page constraint "#1")}\unexpanded\@xp{\sseq@error@annotation}}
+ \selectfont\sseq@restorefont
+ \setbox0=\hbox{#1}
+ \egroup
+ \sseq@protected@edef\sseq@pageconstraint{(\unexpanded\@xp{\sseq@pageconstraint})#2(#1)}
+}
+
+
+\def\sseq@updatepageconstraintrange{%
+ \sseq@protected@edef\sseq@pageconstraint{%
+ (\unexpanded\@xp{\sseq@pageconstraint})&&(\temp<=\page \ifx\tempmax\empty\else&&\page<=\tempmax\fi)%
+ }%
+}
+
+% This protect variant allows us to delay evaluation of \isalive, just so that we can
+% capture something close to the original argument to (does this matter anymore?)
+\let\sseq@isaliveprotect\relax
+\def\sseq@isaliveprotect@protect{\@nx\sseq@isaliveprotect\@nx}
+\def\sseq@isalive{\sseq@isaliveprotect\sseq@isalive@}
+\def\sseq@isalive@{\sseq@isalive@error}
+\def\sseq@isalive@error{\sseq@error{is-alive-illegal-here}}
+\def\sseq@isalive@active#1{%
+ \@xp\ifx\@xp$\@gobble#1$%
+ \@xp\sseq@isalive@parens\@xp#1%
+ \else
+ \sseq@isalive@list#1\sseq@nil
+ \fi
+}
+\def\sseq@isalive@list(#1)#2{%
+ \sseq@isalive@parens(#1)%
+ \ifx\sseq@nil#2\else
+ &&\@xp\sseq@isalive@list\@xp#2%
+ \fi
+}
+
+\def\sseq@isalive@parens@check(#1){
+ \sseq@parsecoord\coord{#1}{\string\isalive}
+}
+\def\sseq@isalive@parens(#1){\sseq@parsecoordex\sseq@isalive@parens@(#1)}
+\def\sseq@isalive@parens@(#1,#2,#3){\@nx\sseq@isalive@final{#1}{#2}{#3}{\sseq@obj{class.(#1,#2,#3).num}}}
+\def\sseq@isalive@final#1#2#3#4{%
+ \ifnum\sseq@obj{class.(#1,#2,#3)[#4].page}<\sseq@thepagecount
+ 0%
+ \else
+ \ifnum#4=\z@
+ 1%
+ \else
+ \ifnum\sseq@obj{class.(#1,#2,#3)[\the\numexpr #4-1\relax].page}=\sseq@thepagecount
+ 0%
+ \else
+ 1%
+ \fi
+ \fi
+ \fi
+}
+
+
+
+
+
+%%%
+%%% This is a macro for typesetting monomials.
+%%%
+
+% We need to check for math subscript characters
+\char_set_catcode_math_subscript:N \_
+
+\def\sseq@support@std{}
+\protected\def\SseqNormalizeMonomialSetVariables#1{%
+ \bgroup
+ \gdef\sseq@support@std{}%
+ \def\sseqnormalizemonomial@add{%
+ \def\temp{1}%
+ \ifx\sseq@var\temp\else
+ \edef\sseq@var{\unexpanded\@xp{\sseq@var}\unexpanded\@xp{\sseq@subscript}}%
+ \@ifundefined{\sseqnormalizemonomial@varcs}{%
+ \@xp\xdef\csname\sseqnormalizemonomial@varcs\endcsname{0}%
+ \sseq@x@addto@macro\sseq@support@std{\@nx\\{\unexpanded\@xp{\sseq@var}}{\sseqnormalizemonomial@varcs}}%
+ }{}%
+ \fi
+ \sseqnormalizemonomial@testend
+ }%
+ \SseqNormalizeMonomial{#1}%
+ \egroup
+}
+
+
+\protected\def\SseqNormalizeMonomial#1{%
+ \bgroup
+ \def\sseq@ourinput{#1}%
+ \let\sseq@support\sseq@support@std
+ \sseq@ifempty{#1}{\egroup\def\result{1}}{%
+ \sseqnormalizemonomial@#1\sseq@nil
+ }%
+}
+\def\sseqnormalizemonomial@#1{%
+ \pgfkeys@spdef\sseq@var{#1}%
+ \def\sseq@power{1}%
+ \def\sseq@subscript{}%
+ \futurelet\testtok\sseqnormalizemonomial@@
+}
+
+\def\sseqnormalizemonomial@@{%
+ \ifx\testtok^%
+ \let\next\sseqnormalizemonomial@sup
+ \else
+ \ifx\testtok_%
+ \let\next\sseqnormalizemonomial@sub
+ \else
+ \let\next\sseqnormalizemonomial@add
+ \fi
+ \fi
+ \next
+}
+
+\def\sseqnormalizemonomial@sup^#1{%
+ \sseq@ifintexpr{#1}{%
+ \edef\sseq@power{\the\numexpr#1\relax}%
+ }{%
+ \sseq@error@xxx{NormalizeMonomial-invalid-exponent}{\unexpanded{#1}}{\unexpanded\@xp{\sseq@var}}{\unexpanded\@xp{\sseq@ourinput}}
+ \let\result\sseq@ourinput
+ \sseq@gobble@to@nil
+ }
+ \futurelet\testtok\sseqnormalizemonomial@@
+}
+
+\def\sseqnormalizemonomial@sub_#1{%
+ \def\sseq@subscript{_{#1}}%
+ \futurelet\testtok\sseqnormalizemonomial@@
+}
+
+\def\sseqnormalizemonomial@add{%
+ \def\temp{1}%
+ \ifx\sseq@var\temp\else
+ \edef\sseq@var{\unexpanded\@xp{\sseq@var}\unexpanded\@xp{\sseq@subscript}}%
+ \@ifundefined{\sseqnormalizemonomial@varcs}{%
+ \@xp\edef\csname\sseqnormalizemonomial@varcs\endcsname{\sseq@power}%
+ \sseq@e@addto@macro\sseq@support{\@nx\\{\unexpanded\@xp{\sseq@var}}{\sseqnormalizemonomial@varcs}}%
+ }{%
+ \@xp\edef\csname\sseqnormalizemonomial@varcs\endcsname{\the\numexpr\csname\sseqnormalizemonomial@varcs\endcsname + \sseq@power}%
+ }%
+ \fi
+ \sseqnormalizemonomial@testend
+}
+
+
+\def\sseqnormalizemonomial@testend{%
+ \ifx\testtok\sseq@nil
+ \sseqnormalizemonomial@done
+ \sseq@smuggle@macro\result
+ \egroup
+ \let\next\@gobble
+ \else
+ \@xp\ifx\space\testtok
+ \def\next{\@xp\futurelet\@xp\testtok\@xp\sseqnormalizemonomial@testend\romannumeral-`0}%
+ \else
+ \let\next\sseqnormalizemonomial@
+ \fi
+ \fi
+ \next
+}
+
+\def\sseqnormalizemonomial@varcs{sseqnormalizemonomial@var@\detokenize\@xp{\sseq@var}}
+
+\def\sseqnormalizemonomial@done{%
+ \def\result{}%
+ \def\\##1##2{%
+ \sseq@tempcount=\csname ##2\endcsname\relax
+ \ifnum\sseq@tempcount=\z@
+ \else
+ \ifnum\sseq@tempcount=\@ne
+ \sseq@d@addto@macro\result{##1}%
+ \else
+ \sseq@e@addto@macro\result{\unexpanded{##1}^{\the\sseq@tempcount}}%
+ \fi
+ \fi
+ }%
+ \sseq@support
+ \ifx\result\pgfutil@empty % use 1 for empty monomial
+ \def\result{1}%
+ \fi
+}
+
+% Restore catcode of underscore to letter
+\catcode`\_ = 11\relax
+
+
+\def\SseqAHSSNameHandler#1{
+ \pgfutil@in@[{#1}
+ \ifpgfutil@in@
+ \@xp\@firstofone
+ \else
+ \sseq@error{AHSSNameHandler-missing-cell}{#1}
+ \def\result{#1}
+ \@xp\@gobble
+ \fi{
+ \SseqAHSSNameHandler@#1\sseq@nil
+ }
+}
+
+
+\def\SseqAHSSNameHandler@#1[#2\sseq@nil{
+ \pgfutil@in@]{#2}
+ \ifpgfutil@in@
+ \@xp\@firstofone
+ \else
+ \sseq@error{AHSSNameHandler-missing-cell}{#1[#2}
+ \def\result{#1[#2}
+ \@xp\@gobble
+ \fi{
+ \SseqAHSSNameHandler@@{#1}#2\sseq@nil
+ }
+}
+
+\def\SseqAHSSNameHandler@@#1#2]#3\sseq@nil{
+ \SseqNormalizeMonomial{#1#3}
+ \sseq@ifintexpr{#2}{
+ \edef\result{\unexpanded\@xp{\result}[\the\numexpr#2+\sseq@y]}
+ }{
+ \sseq@error{AHSSNameHandler-invalid-integer}{#2}{#1[#2]#3}
+ \edef\result{\unexpanded\@xp{\result[#2]}}
+ }
+}
+
+
+
+
+\ExplSyntaxOff
diff --git a/graphics/pgf/contrib/stanli/README.md b/graphics/pgf/contrib/stanli/README.md
new file mode 100644
index 0000000000..4ac7c56334
--- /dev/null
+++ b/graphics/pgf/contrib/stanli/README.md
@@ -0,0 +1,205 @@
+# TikZ Library for Structural Analysis
+## Purpose
+
+At university it is always a very time consuming work to create new
+assignments, and tests; especially when those tasks include drawing graphics.
+
+In the field of structural engineering those small structures are a key part
+for teaching. For this reason I developed, in cooperation with the
+[Institute for Structural Analysis](https://www.tugraz.at/institute/ifb/home/)
+at the [Graz University of Technology](http://tugraz.at/),
+a TikZ library for Structural Analysis.
+
+With the package `stanli`, 2D and 3D structures can be created. In the following article only the 2D library will be discussed, but the principles and methods are the same for 3D structures.
+
+## Principles
+
+TikZ is a very powerful tool; however, unfortunately not everyone is used to this part of LaTeX.
+Therefore, in addition to the creation of the library the second goal was to keep the usage as simple as possible. So that:
+
+* anyone can use this library without (deeper) knowledge in TikZ
+* skilled users can easily modify and customise the code
+* the principle of this library can be used for any other library
+
+## Getting Started
+### LaTeX Environment
+
+Like every TikZ graph, needs also this library the
+
+``` \begin{tikzpicture}
+ ...
+ \end{tikzpicture}```
+
+environment.
+
+### Elements
+#### Basic Commands
+
+The library provides 10 different commands:
+
+* ``\point``
+* ``\beam``
+* ``\support``
+* ``\hinge``
+* ``\load`` or ``\lineload`` and ``\temperature``
+* ``\internalforces``
+* ``\dimensioning``
+* ``\influenceline``
+* ``\notation``
+* ``\addon``
+
+For each element (command) are different options available. Obligatory options
+are marked with {curley brackets} and optional values are marked with [square
+brackets]. The first type is a must have criteria. In contrast, the optional
+input is not required to be entered.
+
+An easy example is the following single force:
+
+```\load{type}{insertion point}[rotation][length or included angle][loaddistance];```
+
+### Manual
+
+More specific information about the elements and their options can be found in
+the manual. The manual is written in English. Section 1 provides a table
+with all elements and options; furthermore, the code is also given for each
+picture in the manual.
+
+### Examples
+
+The easiest way to create a structure is the list above, starting with ``\point``
+and ending with ``\addon``.
+
+The following examples shall give a first impression how drawings can be
+generated. In the manual the example is explained in more detail.
+
+#### 2D Simplified Roof
+
+By using the library ``stanli``, the following graph can be created
+in a very short time:
+
+```
+\begin{tikzpicture}
+ \scaling{.65};
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+ \notation{4}{f}{g}[$S$];
+
+ \end{tikzpicture}
+```
+![2d-roof](http://www.latex-community.org/articles/2d-roof.png)
+
+
+#### 3D Support Construction
+
+By using the library ``stanli``, the following 3D structure can be created in a very short time with few lines of code:
+
+```
+ \setcoords{-25}{10}[1][1.2]
+ \setaxis{2}
+ %\showpoint
+ \begin{tikzpicture}[coords]
+
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+
+ \dlineload{5}{0}{f}{b}[.5][.5][.11];
+ \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11];
+ \dlineload{5}{0}{d}{j}[.5][.5][.11];
+
+ \ddimensioning{xy}{f}{g}{4.5}[$3~m$];
+ \ddimensioning{xy}{g}{h}{4.5}[$3~m$];
+ \ddimensioning{xy}{h}{i}{4.5}[$3~m$];
+ \ddimensioning{xy}{i}{j}{4.5}[$3~m$];
+ \ddimensioning{yx}{e}{j}{13}[$3~m$];
+
+ \dnotation{1}{f}{$q=10~kN/m$}[above left=3mm];
+ \dnotation{1}{b}{$A$}[below left];
+ \dnotation{1}{h}{$C$}[right=2mm];
+ \dnotation{1}{d}{$B$}[below left];
+
+ \end{tikzpicture}
+```
+![3d-support-construction](http://www.latex-community.org/articles/3d-support-construction.png)
+
+
+## Author
+
+Copyright (c) 2016 [Juergen Hackl](mailto:hackl.j@gmx.at)
diff --git a/graphics/pgf/contrib/stanli/stanli.pdf b/graphics/pgf/contrib/stanli/stanli.pdf
new file mode 100644
index 0000000000..2e2050f607
--- /dev/null
+++ b/graphics/pgf/contrib/stanli/stanli.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/stanli/stanli.sty b/graphics/pgf/contrib/stanli/stanli.sty
new file mode 100644
index 0000000000..2b993fa00b
--- /dev/null
+++ b/graphics/pgf/contrib/stanli/stanli.sty
@@ -0,0 +1,2107 @@
+%=============================================================================
+% File: stanli.tex -- Structural Analysis Library based on PGF/TikZ
+% Author(s): Juergen Hackl <hackl.j@gmx.at>
+% Creation: 21 Dec 2016
+% Time-stamp: <Mit 2016-12-21 09:42 juergen>
+% Version: 3.0 (2016-12-21)
+%
+% Copyright (c) 2016 Juergen Hackl <hackl.j@gmx.at>
+%
+% More information on LaTeX: http://www.latex-project.org/
+%=============================================================================
+
+%================================================
+% use Package
+%================================================
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{stanli}
+
+%
+%================================================
+% use Package
+%================================================
+%
+\RequirePackage{ifthen}
+\RequirePackage{tikz}
+\RequirePackage{xargs}
+\usetikzlibrary{shapes,arrows}
+\usetikzlibrary{positioning}
+\usepackage{verbatim}
+\usetikzlibrary{automata}
+\usetikzlibrary{arrows}
+\usetikzlibrary{calc,3d}
+\usetikzlibrary{%
+ decorations.pathreplacing,%
+ decorations.pathmorphing%
+}
+\usetikzlibrary{patterns}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 2D Structural Analysis Library base on TikZ
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+%================================================
+% some variables
+%================================================
+%
+
+%------------------------------------------------
+% colors
+%------------------------------------------------
+
+\newcommand{\pathdrawcolor}{black} %
+\newcommand{\pathfillcolor}{white} %
+\newcommand{\colorGray}{gray} %
+
+%------------------------------------------------
+% line widths
+%------------------------------------------------
+
+\newcommand{\hugeLineWidth}{2pt} %
+\newcommand{\bigLineWidth}{1.5pt} %
+\newcommand{\normalLineWidth}{1pt} %
+\newcommand{\smallLineWidth}{.7pt} %
+\newcommand{\tinyLineWidth}{.3pt} %
+
+%------------------------------------------------
+% construction parameters
+%------------------------------------------------
+
+\newcommand{\scalingParameter}{1} %
+
+\newcommand{\hingeRadius}{1.5mm} %
+\newcommand{\hingeAxialLength}{5mm} %
+\newcommand{\hingeAxialHeight}{3mm} %
+\newcommand{\hingeCornerLength}{3mm} %
+
+\newcommand{\hatchingAngle}{45} %
+\newcommand{\hatchingAmplitude}{1.1cm} %
+\newcommand{\hatchingLength}{1.5mm} %
+
+\newcommand{\springLength}{10mm} %
+\newcommand{\springPreLength}{7pt} %
+\newcommand{\springPostLength}{3pt} %
+\newcommand{\springAmplitude}{2.5mm} %
+\newcommand{\springSegmentLength}{5pt} %
+
+\newcommand{\supportGap}{1mm} %
+\newcommand{\supportBasicLength}{12mm} %
+\newcommand{\supportBasicHeight}{3.5mm} %
+\newcommand{\supportLength}{8mm} %
+\newcommand{\supportHeight}{5mm} %
+\newcommand{\supportHatchingLength}{20mm} %
+\newcommand{\supportHatchingHeight}{5mm} %
+
+\newcommand{\barGap}{1.5mm} %
+\newcommand{\barAngle}{45} %
+
+%------------------------------------------------
+% load parameters
+%------------------------------------------------
+
+\newcommand{\forceDistance}{1.5mm} %
+\newcommand{\forceLength}{10mm} %
+\newcommand{\momentDistance}{4mm} %
+\newcommand{\momentAngle}{270} %
+\newcommand{\lineloadDistance}{3mm} %
+\newcommand{\lineloadForce}{0.15} %
+\newcommand{\lineloadInterval}{0.2} %
+
+%------------------------------------------------
+% temperature parameters
+%------------------------------------------------
+
+\newcommand{\temperatureHeight}{6mm} %
+
+%------------------------------------------------
+% dimensioning parameters
+%------------------------------------------------
+
+\newcommand{\dimensioningBar}{4mm} %
+
+
+%------------------------------------------------
+% help values
+%------------------------------------------------
+
+\newcommand{\helpVarA}{1} %
+\newcommand{\helpVarB}{1} %
+
+%
+%================================================
+% new tikz styles
+%================================================
+%
+
+%------------------------------------------------
+% line styles
+%------------------------------------------------
+
+\tikzstyle{hugeLine}=[line width=\hugeLineWidth,]
+\tikzstyle{bigLine}=[line width=\bigLineWidth,]
+\tikzstyle{normalLine}=[line width=\normalLineWidth,]
+\tikzstyle{smallLine}=[line width=\smallLineWidth,]
+\tikzstyle{tinyLine}=[line width=\tinyLineWidth,]
+
+%------------------------------------------------
+% spring style
+%------------------------------------------------
+
+\tikzstyle{spring} = [
+ normalLine,
+ decoration=
+ {
+ zigzag,
+ pre length=\springPreLength,
+ post length=\springPostLength,
+ segment length=\springSegmentLength,
+ amplitude=\springAmplitude
+ },
+ decorate,
+]
+
+%------------------------------------------------
+% hatch style
+%------------------------------------------------
+
+\tikzstyle{hatching} = [
+ tinyLine,
+ draw,
+ decorate,
+ decoration=
+ {
+ border,
+ angle=\hatchingAngle,
+ amplitude=\hatchingAmplitude,
+ segment length=\hatchingLength
+ }
+]
+
+%------------------------------------------------
+% hatch style for torsional spring
+%------------------------------------------------
+
+\tikzstyle{hatchingspring} = [
+ tinyLine,
+ draw,
+ decorate,
+ decoration=
+ {
+ border,
+ angle=\hatchingAngle,
+ amplitude=\hatchingAmplitude/2,
+ segment length=\hatchingLength/2
+ }
+]
+
+%------------------------------------------------
+% force style
+%------------------------------------------------
+
+\tikzstyle{force}=[>=latex,normalLine]
+
+%
+%================================================
+% library elements
+%================================================
+%
+
+%------------------------------------------------
+% scaling
+%------------------------------------------------
+% \scaling{scaling value}
+%
+
+\newcommandx{\scaling}[1]{
+ \renewcommand{\scalingParameter}{#1}
+}
+
+%------------------------------------------------
+% point
+%------------------------------------------------
+% \point{name}{x-coordiante}{y-coordiante}
+%
+
+\newcommandx{\point}[3]{
+ \node[coordinate][
+ shift={(#2*\scalingParameter,#3*\scalingParameter)}](#1){};
+}
+
+%------------------------------------------------
+% beam
+%------------------------------------------------
+% \beam{type}{initial point}{end point}[rounded initial point][rounded end point]
+
+\newcommandx{\beam}[5][4=0,5=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \draw [hugeLine] (#2) -- (#3);
+ \coordinate (barVarA) at ($ (#2)!\barGap!-\barAngle:(#3) $);
+ \coordinate (barVarB) at ($ (#3)!\barGap!\barAngle:(#2) $);
+ \draw [smallLine,dashed] (barVarA) -- (barVarB);
+ \ifthenelse{\equal{#4}{0}}{}
+ {\fill (#2) circle (\hugeLineWidth/2);}
+ \ifthenelse{\equal{#5}{0}}{}
+ {\fill (#3) circle (\hugeLineWidth/2);}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \draw [bigLine] (#2) -- (#3);
+ \ifthenelse{\equal{#4}{0}}{}
+ {\fill (#2) circle (\bigLineWidth/2);}
+ \ifthenelse{\equal{#5}{0}}{}
+ {\fill (#3) circle (\bigLineWidth/2);}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \draw [normalLine,dashed] (#2) -- (#3);
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \draw [hugeLine] (#2) -- (#3);
+ \ifthenelse{\equal{#4}{0}}{}
+ {\fill (#2) circle (\hugeLineWidth/2);}
+ \ifthenelse{\equal{#5}{0}}{}
+ {\fill (#3) circle (\hugeLineWidth/2);}
+ }{}
+}
+
+%------------------------------------------------
+% support
+%------------------------------------------------
+% \support{type}{insertion point}[rotation]
+%
+
+\newcommandx{\support}[3][3=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \draw [normalLine] (#2) -- ++(\supportLength/2,-\supportHeight) -- ++(-\supportLength,0) -- cycle;
+ \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportHeight)$) -- ++(-\supportBasicLength,0);
+ \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\supportHeight)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\supportHeight)$);
+ \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\supportHatchingHeight)$) -- ++(-\supportHatchingLength,0);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \draw [normalLine] (#2) -- ++(\supportLength/2,-\supportHeight) -- ++(-\supportLength,0) -- cycle;
+ \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportHeight)$) -- ++(-\supportBasicLength,0);
+ \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportHeight-\supportGap)$) -- ++(-\supportBasicLength,0);
+ \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\supportHeight-\supportGap)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\supportHeight-\supportGap)$);
+ \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\supportHatchingHeight-\supportGap)$) -- ++(-\supportHatchingLength,0);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,0)$) -- ++(-\supportBasicLength,0);
+ \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight)$) rectangle ($(#2)+1*(\supportBasicLength/2,0)$);
+ \draw[hatching]($(#2)+1*(\supportHatchingLength/2,0)$) -- ++(-\supportHatchingLength,0);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,0)$) -- ++(-\supportBasicLength,0);
+ \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\supportGap)$) -- ++(-\supportBasicLength,0);
+ \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\supportGap)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\supportGap)$);
+ \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\supportGap)$) -- ++(-\supportHatchingLength,0);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{5}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \draw [spring] (#2) -- ++(0,-\springLength);
+ \draw [normalLine] ($(#2)+1*(\supportBasicLength/2,-\springLength)$) -- ++(-\supportBasicLength,0);
+ \clip ($(#2)+1*(-\supportBasicLength/2,-\supportBasicHeight-\springLength)$) rectangle ($(#2)+1*(\supportBasicLength/2,-\springLength)$);
+ \draw[hatching]($(#2)+1*(\supportHatchingLength/2,-\springLength)$) -- ++(-\supportHatchingLength,0);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{6}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \begin{scope}[rotate around={-90:(#2)},shift={(#2)}]
+ \draw[normalLine,scale=0.035,domain=0:18.85,variable=\t,smooth,]
+ plot({\t*sin(\t r)},{-\t*cos(\t r)});
+ \end{scope}
+ \draw [normalLine] ($(#2)+1*(-\supportBasicLength/2.5,0)$) -- ++(-\supportBasicLength/3.5,0);
+ \clip ($(#2)+1*(-\supportBasicLength/2.5,0)$) rectangle ($(#2)+1*(-\supportBasicLength/1.47,-\supportBasicHeight/2)$);
+ \draw[hatchingspring]($(#2)+1*(0,0)$) -- ++(-\supportHatchingLength/2,0);
+ \end{scope}
+ }{}
+}
+
+%------------------------------------------------
+% hinge
+%------------------------------------------------
+% \hinge{type}{insertion point}[rotation][initial point][end point]
+% [rotation][initial point][end point] are optional
+%
+
+\newcommandx{\hinge}[5][3=0,4=0,5=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \fill [white] (#2) circle (\hingeRadius);
+ \draw [normalLine] (#2) circle (\hingeRadius);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \begin{scope}[even odd rule]
+ \ifthenelse{\equal{#5}{1}}{
+ \clip (#2) circle (\hingeRadius+\normalLineWidth)
+ (#2)--(#3)--($(#3)!\hingeRadius+\normalLineWidth!-90:(#2)$)--($(#4)!\hingeRadius+\normalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }{
+ \clip (#2)--(#3)--($(#3)!\hingeRadius+\normalLineWidth!-90:(#2)$)--($(#4)!\hingeRadius+\normalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }
+ \filldraw [fill=white,normalLine] (#2) circle (\hingeRadius);
+ \end{scope}
+ \draw[hugeLine] ($(#2)!\hingeRadius!(#3)$)--(#2)--($(#2)!\hingeRadius!(#4)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \fill [white] (#2) circle (\supportGap/1.5);
+ \draw [normalLine] ($(#2)+1*(\supportGap/2,\supportBasicLength/2)$) -- ++(0,-\supportBasicLength);
+ \draw [normalLine] ($(#2)+1*(-\supportGap/2,\supportBasicLength/2)$) -- ++(0,-\supportBasicLength);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \fill [white] ($(#2)+1*(-\hingeAxialLength/3,\hingeAxialHeight/2)$) rectangle ($(#2)+1*(0,-\hingeAxialHeight/2)$);
+ \draw [normalLine] ($(#2)+1*(2*\hingeAxialLength/3,\hingeAxialHeight/2)$)
+ -- ++(-\hingeAxialLength,0)
+ -- ++(0,-\hingeAxialHeight)
+ -- ++(\hingeAxialLength,0);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{5}}{ %
+ \coordinate (hingeVarA) at ($ (#2)!\hingeCornerLength!(#3) $);
+ \coordinate (hingeVarB) at ($ (#2)!\hingeCornerLength!(#4) $);
+ \fill[black] (#2) -- (hingeVarA) -- (hingeVarB) -- cycle;
+ \fill[black] (#2)circle (\hugeLineWidth/2);
+ }{}
+
+}
+
+%------------------------------------------------
+% load
+%------------------------------------------------
+% \load{type}{insertion point}[rotation][length or included angle][load distance]
+% [rotation][length or included angle][load distance] are optional
+%
+
+\newcommandx{\load}[5][3=0,4=0,5=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \ifthenelse{\equal{#5}{0}}
+ {\renewcommand{\helpVarA}{\forceDistance}}
+ {\renewcommand{\helpVarA}{#5}}
+ \ifthenelse{\equal{#4}{0}}
+ {\renewcommand{\helpVarB}{\forceLength}}
+ {\renewcommand{\helpVarB}{#4}}
+ \draw[force,<-] ($(#2)+1*(#3:\helpVarA)$) --++($(#3:\helpVarB)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \ifthenelse{\equal{#5}{0}}
+ {\renewcommand{\helpVarA}{\momentDistance}}
+ {\renewcommand{\helpVarA}{#5}}
+ \ifthenelse{\equal{#4}{0}}
+ {\renewcommand{\helpVarB}{\momentAngle}}
+ {\renewcommand{\helpVarB}{#4}}
+ \begin{scope}[rotate around={#3:(#2)}]
+ \draw[<-,normalLine] ($(#2)+1*(\helpVarA,0)$) arc (0:\helpVarB:\helpVarA);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \ifthenelse{\equal{#5}{0}}
+ {\renewcommand{\helpVarA}{\momentDistance}}
+ {\renewcommand{\helpVarA}{#5}}
+ \ifthenelse{\equal{#4}{0}}
+ {\renewcommand{\helpVarB}{\momentAngle}}
+ {\renewcommand{\helpVarB}{#4}}
+ \begin{scope}[rotate around={#3:(#2)}]
+ \draw[->,normalLine] ($(#2)+1*(\helpVarA,0)$) arc (0:\helpVarB:\helpVarA);
+ \end{scope}
+ }{}
+
+}
+
+%------------------------------------------------
+% lineload
+%------------------------------------------------
+% \lineload{type}{initial point}{end point}[initial force value][end force value][force interval]
+% [initial force value][end force value][force interval] are optional
+%
+% and accordingly for type 3
+%
+% \lineload{type}{initial point}{end point}[initial force value][end force value][lineload distance from inital point][force interval]
+% [initial force value][end force value][lineload distance from inital point][force interval] are optional
+%
+% and accordingly for type 4
+%
+% \lineload{type}{initial point}{end point}[force interval][force length]
+% [force interval][force length] are optional
+
+\newcommandx{\lineload}[7][4=1,5=1,6=\lineloadInterval,7=\lineloadInterval]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \coordinate (lineloadVarA1) at ($ (#2)!\lineloadDistance!90:(#3) $);
+ \coordinate (lineloadVarB1) at ($ (#3)!\lineloadDistance!-90:(#2) $);
+ \coordinate (lineloadVarA2) at ($ (#2)!{\lineloadDistance +#4cm}!90:(#3) $);
+ \coordinate (lineloadVarB2) at ($ (#3)!{\lineloadDistance+#5cm}!-90:(#2) $);
+ \ifthenelse{\equal{#4}{0}}{}
+ {
+ \draw [force,->] (lineloadVarA2) -- (lineloadVarA1);
+ }
+ \ifthenelse{\equal{#5}{0}}{}
+ {
+ \draw [force,->] (lineloadVarB2) -- (lineloadVarB1);
+ }
+ \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {};
+ \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2);
+ \fill (lineloadVarA2) circle (\normalLineWidth/2);
+ \fill (lineloadVarB2) circle (\normalLineWidth/2);
+ \pgfmathsetmacro{\lineloadIntervalBegin}{#6/\scalingParameter}
+ \pgfmathsetmacro{\lineloadIntervalStep}{#6/\scalingParameter*2}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6/\scalingParameter}
+ \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\lineloadDistance) $);
+ \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\lineloadDistance) $);
+ \coordinate (lineloadVarA2) at ($ (#2)+1*(0,\lineloadDistance+#4cm) $);
+ \coordinate (lineloadVarB2) at ($ (#3)+1*(0,\lineloadDistance+#5cm) $);
+ \ifthenelse{\equal{#4}{0}}{}
+ {
+ \draw [force,->] (lineloadVarA2) -- (lineloadVarA1);
+ }
+ \ifthenelse{\equal{#5}{0}}{}
+ {
+ \draw [force,->] (lineloadVarB2) -- (lineloadVarB1);
+ }
+ \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {};
+ \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2);
+ \fill (lineloadVarA2) circle (\normalLineWidth/2);
+ \fill (lineloadVarB2) circle (\normalLineWidth/2);
+ \pgfmathsetmacro{\lineloadIntervalBegin}{#6}
+ \pgfmathsetmacro{\lineloadIntervalStep}{#6*2}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6}
+ \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \ifthenelse{\equal{#6}{\lineloadInterval}}
+ {\renewcommand{\helpVarA}{0cm}}
+ {\renewcommand{\helpVarA}{#6cm}}
+ \path
+ let
+ \p1 = (#2),
+ \p2 = (#3)
+ in
+ coordinate (lineloadVarA1) at ($(\p1)+1*(0,\lineloadDistance+\helpVarA)$)
+ coordinate (lineloadVarB1) at ($(\x2,\y1)+1*(0,\lineloadDistance+\helpVarA)$)
+ coordinate (lineloadVarA2) at ($ (\p1)+1*(0,\lineloadDistance+\helpVarA+#4cm)$)
+ coordinate (lineloadVarB2) at ($ (\x2,\y1)+1*(0,\lineloadDistance+\helpVarA+#5cm)$);
+ \draw [tinyLine,loosely dotted] (lineloadVarA1)--($(#2)+1*(0,\hingeRadius)$);
+ \draw [tinyLine,loosely dotted] (lineloadVarB1)--($(#3)+1*(0,\hingeRadius)$);
+ \ifthenelse{\equal{#4}{0}}{}
+ {
+ \draw [force,->] (lineloadVarA2) -- (lineloadVarA1);
+ }
+ \ifthenelse{\equal{#5}{0}}{}
+ {
+ \draw [force,->] (lineloadVarB2) -- (lineloadVarB1);
+ }
+ \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {};
+ \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2);
+ \fill (lineloadVarA2) circle (\normalLineWidth/2);
+ \fill (lineloadVarB2) circle (\normalLineWidth/2);
+ \pgfmathsetmacro{\lineloadIntervalBegin}{#7}
+ \pgfmathsetmacro{\lineloadIntervalStep}{#7*2}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#7}
+ \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\lineloadDistance) $);
+ \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\lineloadDistance) $);
+ \ifthenelse{\equal{#4}{1}}
+ {\pgfmathsetmacro{\lineloadIntervalStep}{\lineloadInterval}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-\lineloadInterval/2}}
+ {\pgfmathsetmacro{\lineloadIntervalStep}{#4}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#4/2}}
+ \ifthenelse{\equal{#5}{1}}
+ {\pgfmathsetmacro{\lineloadForceLength}{\lineloadForce}}
+ {\pgfmathsetmacro{\lineloadForceLength}{#5}}
+ \foreach \i in {0,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA1)!\i!(lineloadVarB1)$) -- ($(lineloadVarA1)!\i+\lineloadForceLength!(lineloadVarB1)$);
+ }{}
+
+}
+
+%------------------------------------------------
+% dimensioning
+%------------------------------------------------
+% \dimensioning{type}{initial point}{end point}{distance from point of origin}[measure]
+%
+
+\newcommandx{\dimensioning}[5][5]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \path
+ let
+ \p1 = (#2),
+ \p2 = (#3)
+ in
+ coordinate (dimensioningVarA) at (\x1,#4)
+ coordinate (dimensioningVarB) at (\x2,#4);
+ \draw [smallLine] (dimensioningVarA)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar)
+ (dimensioningVarA)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2)
+ (dimensioningVarB)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar)
+ (dimensioningVarB)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2)
+ (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5};
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \path
+ let
+ \p1 = (#2),
+ \p2 = (#3)
+ in
+ coordinate (dimensioningVarA) at (#4,\y1)
+ coordinate (dimensioningVarB) at (#4,\y2);
+ \draw [smallLine] (dimensioningVarA)--++(\dimensioningBar/2,0)--++(-\dimensioningBar,0)
+ (dimensioningVarA)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2)
+ (dimensioningVarB)--++(\dimensioningBar/2,0)--++(-\dimensioningBar,0)
+ (dimensioningVarB)--++(\dimensioningBar/4,\dimensioningBar/4)--++(-\dimensioningBar/2,-\dimensioningBar/2)
+ (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5};
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \coordinate (dimensioningVarA) at ($ (#2)!{#4cm}!90:(#3) $);
+ \coordinate (dimensioningVarB) at ($ (#3)!{#4cm}!-90:(#2) $);
+ \draw [smallLine] ($ (dimensioningVarA)!{-\dimensioningBar/3}!90:(dimensioningVarB) $) -- ($ (dimensioningVarA)!{\dimensioningBar/3}!90:(dimensioningVarB) $);
+ \draw [smallLine,<-] (dimensioningVarB) -- (dimensioningVarA)node [sloped,midway,above] {#5};
+ }{}
+}
+
+%------------------------------------------------
+% influenceline
+%------------------------------------------------
+% \influenceline{initial point}{end point}{distance from initial point}[arrow distance]
+%
+
+\newcommandx{\influenceline}[5][4=.5]{%
+ \path
+ let
+ \p1 = (#1),
+ \p2 = (#2)
+ in
+ coordinate (influencelineVarA) at ($(\p1)+1*(0,\lineloadDistance+#3cm)$)
+ coordinate (influencelineVarB) at ($(\x2,\y1)+1*(0,\lineloadDistance+#3cm)$);
+ \draw [smallLine] (influencelineVarA)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar)
+ (influencelineVarB)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar);
+ \draw [smallLine,<->] (influencelineVarA)--(influencelineVarB);
+ \draw [smallLine] ($(influencelineVarA)!#4!(influencelineVarB)$)--++(\hingeRadius,0) arc (0:360:\hingeRadius);
+ \draw [force,->] ($(influencelineVarA)!#4!(influencelineVarB)+1*(0,\forceLength/2)$)
+ --($(influencelineVarA)!#4!(influencelineVarB)+1*(0,-\forceLength/2)$);
+}
+
+%------------------------------------------------
+% internalforces
+%------------------------------------------------
+% \internalforces{initial point}{end point}{initial value}{end value}[parabola height][color][bend position]
+% [parabola height][color][bend position] are optional
+%
+
+
+\newcommandx{\internalforces}[7][5=0,6=red,7=.6667]{%
+ \coordinate (internalforcesVarA) at ($ (#1)!#3cm!-90:(#2) $);
+ \coordinate (internalforcesVarB) at ($ (#2)!#4cm!90:(#1)$);
+ \coordinate (internalforcesVarAB) at ($ (internalforcesVarA)!.5!(internalforcesVarB)$);
+ \coordinate (internalforcesVarC) at ($ (internalforcesVarAB)+2*(0,#5)$);
+ \coordinate (internalforcesVarAC) at ($ (internalforcesVarA)!#7!(internalforcesVarC)$);
+ \coordinate (internalforcesVarBC) at ($ (internalforcesVarB)!#7!(internalforcesVarC)$);
+ \ifthenelse{\equal{#5}{0}}{
+ \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) -- (internalforcesVarB) (internalforcesVarB) -- (#2);
+ \fill [color=#6] (internalforcesVarA) circle (\bigLineWidth/2);
+ \fill [color=#6] (internalforcesVarB) circle (\bigLineWidth/2);
+ \fill [color=#6] (#1) circle (\bigLineWidth/2);
+ \fill [color=#6] (#2) circle (\bigLineWidth/2);
+ }
+ {
+ %\draw [bigLine,color=#6](internalforcesVarA) parabola[parabola height=#5cm] (internalforcesVarB);
+ %\draw [bigLine,color=#6](internalforcesVarA)--(internalforcesVarAC)--(internalforcesVarBC)--(internalforcesVarB);
+ %\draw [bigLine,color=blue](internalforcesVarA)--(internalforcesVarB)
+ %(internalforcesVarAB) -- (internalforcesVarC);
+ \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) .. controls (internalforcesVarAC) and (internalforcesVarBC) .. (internalforcesVarB) (internalforcesVarB) -- (#2);
+ \fill [color=#6] (internalforcesVarA) circle (\bigLineWidth/2);
+ \fill [color=#6] (internalforcesVarB) circle (\bigLineWidth/2);
+ \fill [color=#6] (#1) circle (\bigLineWidth/2);
+ \fill [color=#6] (#2) circle (\bigLineWidth/2);
+ }
+
+}
+
+%------------------------------------------------
+% temperature
+%------------------------------------------------
+% \temperature{initial point}{end point}{temperature below}{temperature above}[temperature position][temperature value below][temperature value above][text orientation below][text orientation above]
+% [temperature position][temperature value above][temperature value below][text orientation below][text orientation above] are optional
+%
+
+\newcommandx{\temperature}[9][5=.5,6,7,8=below,9=above]{
+ \coordinate (temperatureVarA1) at ($ (#1)!#5!(#2) $);
+ \coordinate (temperatureVarB1) at ($ (temperatureVarA1)!\temperatureHeight/2!90:(#2) $);
+ \coordinate (temperatureVarB2) at ($ (temperatureVarA1)!-\temperatureHeight/2!90:(#2) $);
+ \coordinate (temperatureVarC1) at ($ (temperatureVarB2)!-#3!90:(temperatureVarB1) $);
+ \coordinate (temperatureVarC2) at ($ (temperatureVarB1)!#4!90:(temperatureVarB2) $);
+
+ \filldraw[fill=\colorGray!20!white,smallLine] (temperatureVarB1) -- (temperatureVarC2) -- (temperatureVarC1) -- (temperatureVarB2) -- cycle;
+
+ \draw (temperatureVarC1) node [#8]{#6};
+ \draw (temperatureVarC2) node [#9]{#7};
+}
+
+%------------------------------------------------
+% addon
+%------------------------------------------------
+% \addon{type}{insertion point}{}{}[]
+% [] are optional
+%
+
+\newcommandx{\addon}[5][5=1]{
+ \ifthenelse{\equal{#1}{1}}{ % \addon{type}{insertion point}{end point}{position}
+ \coordinate (addonVarA1) at ($ (#2)!#4!(#3) $);
+ \coordinate (addonVarB1) at ($ (addonVarA1)!\dimensioningBar/2!45:(#3) $);
+ \coordinate (addonVarB2) at ($ (addonVarA1)!\dimensioningBar/2!225:(#3) $);
+ \draw[smallLine] (addonVarB1)--(addonVarB2)
+ ($(addonVarB1)+1*(\supportGap,0)$)--($(addonVarB2)+1*(\supportGap,0)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ % \addon{type}{insertion point}{initial point}{end point}[position-1/+1]
+ \coordinate (addonVarA1) at ($ (#2)!\dimensioningBar!(#3) $);
+ \coordinate (addonVarB1) at ($ (#2)!\dimensioningBar!(#4) $);
+ \ifthenelse{\equal{#5}{1}}
+ {
+ \coordinate (addonVarC1) at ($ (addonVarA1)!\dimensioningBar!90:(#3) $);
+ \coordinate (addonVarD1) at ($ (#2)!1.414*\dimensioningBar/2!45:(#3) $);
+ }
+ {
+ \coordinate (addonVarC1) at ($ (addonVarA1)!\dimensioningBar!-90:(#3) $);
+ \coordinate (addonVarD1) at ($ (#2)!1.414*\dimensioningBar/2!-45:(#3) $);
+ }
+ \draw[smallLine] (addonVarA1)--(addonVarC1)-- (addonVarB1);
+ \filldraw (addonVarD1) circle (\smallLineWidth);
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ % \addon{type}{insertion point}{initial point}{end point}[position-1/+1]
+ \begin{scope}[even odd rule]
+ \ifthenelse{\equal{#5}{1}}{
+ \clip (#2) circle (\dimensioningBar+\normalLineWidth)
+ (#2)--(#3)--($(#3)!\dimensioningBar+\normalLineWidth!-90:(#2)$)--($(#4)!\dimensioningBar+\normalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }{
+ \clip (#2)--(#3)--($(#3)!\dimensioningBar+\normalLineWidth!-90:(#2)$)--($(#4)!\dimensioningBar+\normalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }
+ \draw [smallLine] (#2) circle (\dimensioningBar)
+ (#2) circle (\dimensioningBar-\normalLineWidth-\normalLineWidth);
+ \end{scope}
+ }{}
+
+}
+
+%------------------------------------------------
+% notation
+%------------------------------------------------
+% \notation{type}{insertion point}{}[][][]
+% [] are optional
+%
+
+\newcommandx{\notation}[7][4=above right,5=.5,6=above,7=sloped]{
+ \ifthenelse{\equal{#1}{1}}{ % \notation{1}{insertion point}{labelling}[orientation];
+ \begin{scope}
+ \draw (#2) node [#4]{#3};
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ % \notation{2}{insertion point}{labelling}[orientation];
+ \begin{scope}
+ \draw (#2) node [#4]{#3};
+ \draw[bigLine] (#2)--++(0,\dimensioningBar/2)--++(0,-\dimensioningBar);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \coordinate (notationVarA1) at ($ (#2)!#5!(#3) $);
+ \coordinate (notationVarB1) at ($ (notationVarA1)!\dimensioningBar/2!90:(#3) $);
+ \coordinate (notationVarB2) at ($ (notationVarA1)!\dimensioningBar/2!-90:(#3) $);
+ \draw[bigLine] (notationVarB1)--(notationVarB2);
+ \draw (notationVarA1) node [#6]{#4};
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \ifthenelse{\equal{#7}{1}}
+ {\renewcommand{\helpVarB}{}}
+ {\renewcommand{\helpVarB}{sloped}}
+ \begin{scope}
+ \path (#2) -- (#3) node[inner sep=0mm,rectangle,smallLine,fill=white,draw,minimum size=2.5*\hingeRadius,midway,#6,\helpVarB,pos=#5] {#4};
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{5}}{ %
+ \ifthenelse{\equal{#7}{1}}
+ {\renewcommand{\helpVarB}{}}
+ {\renewcommand{\helpVarB}{sloped}}
+ \begin{scope}
+ \path (#2) -- (#3) node[midway,#6,\helpVarB,pos=#5] {#4};
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{6}}{ %
+ \begin{scope}
+ \draw (#2) node [inner sep=0mm,circle,smallLine,fill=white,draw,minimum size=2.5*\hingeRadius]{#3};
+ \end{scope}
+ }{}
+
+}
+
+
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 3D Structural Analysis Library base on TikZ
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+%================================================
+% some variables
+%================================================
+%
+
+%------------------------------------------------
+% line widths
+%------------------------------------------------
+
+\newcommand{\DhugeLineWidth}{2pt}
+\newcommand{\DbigLineWidth}{1.5pt}
+\newcommand{\DnormalLineWidth}{1pt}
+\newcommand{\DsmallLineWidth}{.7pt}
+\newcommand{\DtinyLineWidth}{.3pt}
+
+%------------------------------------------------
+% coords parameters
+%------------------------------------------------
+
+\newcommand{\DxAngle}{-12}
+\newcommand{\DxLength}{1}
+\newcommand{\DyAngle}{37}
+\newcommand{\DyLength}{1}
+\newcommand{\DzAngle}{90}
+\newcommand{\DzLength}{1}
+
+%------------------------------------------------
+% axis parameters
+%------------------------------------------------
+
+\newcommand{\DxVarA}{$x$}
+\newcommand{\DyVarA}{$y$}
+\newcommand{\DzVarA}{$z$}
+
+\newcommand{\DxVarB}{$x^\prime$}
+\newcommand{\DyVarB}{$y^\prime$}
+\newcommand{\DzVarB}{$z^\prime$}
+
+\newcommand{\DxNodePos}{below}
+\newcommand{\DyNodePos}{left}
+\newcommand{\DzNodePos}{above}
+
+%------------------------------------------------
+% construction parameters
+%------------------------------------------------
+
+\newcommand{\DscalingParameter}{1}
+\newcommand{\DshowPointParameter}{0}
+
+\newcommand{\DhingeBigRadius}{1.5mm}
+\newcommand{\DhingeRadius}{1mm}
+\newcommand{\DhingeAxialLength}{.5}
+\newcommand{\DhingeAxialHeight}{.4}
+\newcommand{\DhingeCornerLength}{3mm}
+
+\newcommand{\DspringLength}{10mm}
+\newcommand{\DspringPreLength}{7pt}
+\newcommand{\DspringPostLength}{5pt}
+\newcommand{\DspringAmplitude}{1.5mm}
+\newcommand{\DspringSegmentLength}{3pt}
+
+\newcommand{\DsupportGap}{1mm}
+\newcommand{\DsupportLength}{1}
+
+\newcommand{\DaxisLength}{1.5}
+\newcommand{\DlocalaxisLength}{.5}
+\newcommand{\DaxisDistance}{.2}
+
+%------------------------------------------------
+% load parameters
+%------------------------------------------------
+
+\newcommand{\DforceDistance}{.15}
+\newcommand{\DforceLength}{1.0}
+\newcommand{\DlineloadDistance}{.3}
+\newcommand{\DlineloadForce}{0.15}
+\newcommand{\DlineloadInterval}{0.2}
+\newcommand{\DlineloadDistanceMM}{3mm}
+
+%------------------------------------------------
+% dimensioning parameters
+%------------------------------------------------
+
+\newcommand{\DdimensioningBar}{4mm}
+\newcommand{\DnoteRadius}{1.5mm}
+
+%------------------------------------------------
+% addon parameters
+%------------------------------------------------
+
+\newcommand{\DaddonLength}{4mm}
+
+%------------------------------------------------
+% help values
+%------------------------------------------------
+
+\newcommand{\DhelpVarA}{1}
+\newcommand{\DhelpVarB}{1}
+\newcommand{\DhelpVarC}{1}
+
+%
+%================================================
+% new tikz styles
+%================================================
+%
+
+%------------------------------------------------
+% line styles
+%------------------------------------------------
+
+\tikzstyle{hugeLine}=[line width=\DhugeLineWidth,]
+\tikzstyle{bigLine}=[line width=\DbigLineWidth,]
+\tikzstyle{normalLine}=[line width=\DnormalLineWidth,]
+\tikzstyle{smallLine}=[line width=\DsmallLineWidth,]
+\tikzstyle{tinyLine}=[line width=\DtinyLineWidth,]
+
+%------------------------------------------------
+% coords styles
+%------------------------------------------------
+
+\tikzset{coords/.style={x={(\DxAngle:\DxLength cm)}, y={(\DyAngle:\DyLength cm)}, z={(\DzAngle:\DzLength cm)}}}
+
+%------------------------------------------------
+% axis styles
+%------------------------------------------------
+
+\tikzstyle{axisarrow}=[>=open triangle 45 ,normalLine]
+
+%------------------------------------------------
+% dspring style
+%------------------------------------------------
+
+\tikzstyle{Dspring} = [
+ normalLine,
+ decoration=
+ {
+ zigzag,
+ pre length=\DspringPreLength,
+ post length=\DspringPostLength,
+ segment length=\DspringSegmentLength,
+ amplitude=\DspringAmplitude
+ },
+ decorate,
+]
+
+%------------------------------------------------
+% force style
+%------------------------------------------------
+
+\tikzstyle{force}=[>=latex,normalLine]
+
+%
+%================================================
+% library elements
+%================================================
+%
+
+%------------------------------------------------
+% setcoords
+%------------------------------------------------
+% \setcoords{x-angle}{y-angle}[x-direction][y-direction][z-direction][z-angle];
+%
+
+\newcommandx{\setcoords}[6][3=1,4=1,5=1,6=90]{
+ \renewcommand{\DxAngle}{#1}
+ \renewcommand{\DxLength}{#3}
+ \renewcommand{\DyAngle}{#2}
+ \renewcommand{\DyLength}{#4}
+ \renewcommand{\DzAngle}{#6}
+ \renewcommand{\DzLength}{#5}
+}
+
+%------------------------------------------------
+% setaxis
+%------------------------------------------------
+% \setaxis{type}[][][][][][];
+%
+% Type 1
+% \setaxis{1};
+% set global axis to xyz and local axis to x'y'z'
+% Type 2
+% \setaxis{2};
+% set global axis to XYZ and local axis to xyz
+% Type 3
+% \setaxis{3}[X-labelling][Y-labelling][Z-labelling][x-labelling][y-labelling][z-labelling];
+% set global axis to [][][] and local axis to [][][]
+% Type 4
+% \setaxis{4}[x-orientation][y-orientation][z-orientation];
+% Change the xyz-orientation from \daxis{4}
+
+\newcommandx{\setaxis}[7][2,3,4,5,6,7]{
+ \ifthenelse{\equal{#1}{1}}{
+ \renewcommand{\DxVarA}{$x$}
+ \renewcommand{\DyVarA}{$y$}
+ \renewcommand{\DzVarA}{$z$}
+ \renewcommand{\DxVarB}{$x^\prime$}
+ \renewcommand{\DyVarB}{$y^\prime$}
+ \renewcommand{\DzVarB}{$z^\prime$}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{
+ \renewcommand{\DxVarA}{$X$}
+ \renewcommand{\DyVarA}{$Y$}
+ \renewcommand{\DzVarA}{$Z$}
+ \renewcommand{\DxVarB}{$x$}
+ \renewcommand{\DyVarB}{$y$}
+ \renewcommand{\DzVarB}{$z$}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{
+ \renewcommand{\DxVarA}{#2}
+ \renewcommand{\DyVarA}{#3}
+ \renewcommand{\DzVarA}{#4}
+ \renewcommand{\DxVarB}{#5}
+ \renewcommand{\DyVarB}{#6}
+ \renewcommand{\DzVarB}{#7}
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{
+ \renewcommand{\DxNodePos}{#2}
+ \renewcommand{\DyNodePos}{#3}
+ \renewcommand{\DzNodePos}{#4}
+ }{}
+}
+
+%------------------------------------------------
+% showpoint
+%------------------------------------------------
+% \showpoint
+%
+
+\newcommandx{\showpoint}{
+ \renewcommand{\DshowPointParameter}{1}
+}
+
+%------------------------------------------------
+% dscaling
+%------------------------------------------------
+% \dscaling{type}{scaling value};
+%
+% Type 1
+% \dscaling{1}{scaling value};
+% scaling the distance between two points
+% Type 2
+% \dscaling{2}{scaling value};
+% scaling supports and hinges
+% Type 3
+% \dscaling{3}{scaling value};
+% scaling axis
+% Type 4
+% \dscaling{4}{scaling value};
+% scaling loads and lineloads
+% Type 5
+% \dscaling{5}{scaling value};
+% scaling the dimensionings
+% Type 6
+% \dscaling{6}{scaling value};
+% scaling the addons
+
+\newcommandx{\dscaling}[2]{
+ \ifthenelse{\equal{#1}{1}}{
+ \renewcommand{\DscalingParameter}{#2}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{
+ \pgfmathsetmacro{\DhingeBigRadiusPTtoMM}{\DhingeBigRadius/2.83527}
+ \pgfmathsetmacro{\DhingeRadiusPTtoMM}{\DhingeRadius/2.83527}
+ \pgfmathsetmacro{\DhingeAxialLengthPT}{\DhingeAxialLength}
+ \pgfmathsetmacro{\DhingeAxialHeightPT}{\DhingeAxialHeight}
+ \pgfmathsetmacro{\DhingeCornerLengthPTtoMM}{\DhingeCornerLength/2.83527}
+ %
+ \renewcommand{\DhingeBigRadius}{\DhingeBigRadiusPTtoMM*#2mm}
+ \renewcommand{\DhingeRadius}{\DhingeRadiusPTtoMM*#2mm}
+ \renewcommand{\DhingeAxialLength}{\DhingeAxialLengthPT*#2}
+ \renewcommand{\DhingeAxialHeight}{\DhingeAxialHeightPT*#2}
+ \renewcommand{\DhingeCornerLength}{\DhingeCornerLengthPTtoMM*#2mm}
+ %
+ \pgfmathsetmacro{\DspringLengthPTtoMM}{\DspringLength/2.83527}
+ \pgfmathsetmacro{\DspringPreLengthPT}{\DspringPreLength}
+ \pgfmathsetmacro{\DspringPostLengthPT}{\DspringPostLength}
+ \pgfmathsetmacro{\DspringAmplitudePTtoMM}{\DspringAmplitude/2.83527}
+ \pgfmathsetmacro{\DspringSegmentLengthPT}{\DspringSegmentLength}
+ %
+ \renewcommand{\DspringLength}{\DspringLengthPTtoMM*#2mm}
+ \renewcommand{\DspringPreLength}{\DspringPreLengthPT*#2}
+ \renewcommand{\DspringPostLength}{\DspringPostLengthPT*#2}
+ \renewcommand{\DspringAmplitude}{\DspringAmplitudePTtoMM*#2mm}
+ \renewcommand{\DspringSegmentLength}{\DspringSegmentLengthPT*#2}
+ %
+ \pgfmathsetmacro{\DsupportGapPTtoMM}{\DsupportGap/2.83527}
+ \pgfmathsetmacro{\DsupportLengthPT}{\DsupportLength}
+ %
+ \renewcommand{\DsupportGap}{\DsupportGapPTtoMM*#2mm}
+ \renewcommand{\DsupportLength}{\DsupportLengthPT*#2}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{
+ \pgfmathsetmacro{\DaxisLengthPT}{\DaxisLength}
+ \pgfmathsetmacro{\DlocalaxisLengthPT}{\DlocalaxisLength}
+ \pgfmathsetmacro{\DaxisDistancePT}{\DaxisDistance}
+ %
+ \renewcommand{\DaxisLength}{\DaxisLengthPT*#2}
+ \renewcommand{\DlocalaxisLength}{\DlocalaxisLengthPT*#2}
+ \renewcommand{\DaxisDistance}{\DaxisDistancePT*#2}
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{
+ \pgfmathsetmacro{\DforceDistancePT}{\DforceDistance}
+ \pgfmathsetmacro{\DforceLengthPT}{\DforceLength}
+ \pgfmathsetmacro{\DlineloadDistancePT}{\DlineloadDistance}
+ \pgfmathsetmacro{\DlineloadForcePT}{\DlineloadForce}
+ \pgfmathsetmacro{\DlineloadIntervalPT}{\DlineloadInterval}
+ \pgfmathsetmacro{\DlineloadDistanceMMPTtoMM}{\DlineloadDistanceMM/2.83527}
+ %
+ \renewcommand{\DforceDistance}{\DforceDistancePT*#2}
+ \renewcommand{\DforceLength}{\DforceLengthPT*#2}
+ \renewcommand{\DlineloadDistance}{\DlineloadDistancePT*#2}
+ \renewcommand{\DlineloadForce}{\DlineloadForcePT*#2}
+ \renewcommand{\DlineloadInterval}{\DlineloadIntervalPT*#2}
+ \renewcommand{\DlineloadDistanceMM}{\DlineloadDistanceMMPTtoMM*#2mm}
+ }{}
+
+ \ifthenelse{\equal{#1}{5}}{
+ \pgfmathsetmacro{\DdimensioningBarPTtoMM}{\DdimensioningBar/2.83527}
+ %
+ \renewcommand{\DdimensioningBar}{\DdimensioningBarPTtoMM*#2mm}
+ }{}
+
+ \ifthenelse{\equal{#1}{6}}{
+ \pgfmathsetmacro{\DaddonLengthPTtoMM}{\DaddonLength/2.83527}
+ %
+ \renewcommand{\DaddonLength}{\DaddonLengthPTtoMM*#2mm}
+ }{}
+}
+
+%------------------------------------------------
+% 3dpoint
+%------------------------------------------------
+% \point{name}{x-coordiante}{y-coordiante}{z-coordiante};
+%
+
+\newcommandx{\dpoint}[4]{
+ \node[coordinate][
+ shift={(#2*\DscalingParameter,#3*\DscalingParameter,#4*\DscalingParameter)}](#1){};
+ \ifthenelse{\equal{\DshowPointParameter}{1}}{
+ \draw (#2*\DscalingParameter,#3*\DscalingParameter,#4*\DscalingParameter) node [above,red]{#1};
+ }{}
+}
+
+%------------------------------------------------
+% 3daxis
+%------------------------------------------------
+% \daxis{type}{}[][][][][][][];
+%
+% Type 1: Global Axis
+% \daxis{1}{insertion point}[X-orientation][Y-orientation][Z-orientation];
+%
+% Type 2: Local Axis in plane
+% \daxis{2}{plane}[insertion point][end point][position][x-orientation][y-orientation][z-orientation][change y with z];
+% plane e.g. xy, yx, xz, zx, yz or zy
+% Type 3: Local Axis in space
+% \daxis{3}{rotation A}[insertion point][end point][position][rotation 1][rotation 2][rotation 3][rotation B];
+% rotation A and B to positioning the local axis around the beam (spherical coordinates)
+% rotation 1 about the world z axis,
+% rotation 2 about the (unrotated) world y axis, and
+% rotation 3 about the (unrotated) world z axis.
+% to change the xyz-orientation use \setaxis{4}[x-orientation][y-orientation][z-orientation];
+
+\newcommandx{\daxis}[9][3,4,5=.5,6=right,7=below,8=left,9=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \ifthenelse{\equal{#3}{}}
+ {\renewcommand{\DhelpVarA}{below}}
+ {\renewcommand{\DhelpVarA}{#3}}
+ \ifthenelse{\equal{#4}{}}
+ {\renewcommand{\DhelpVarB}{above}}
+ {\renewcommand{\DhelpVarB}{#4}}
+ \ifthenelse{\equal{#5}{.5}}
+ {\renewcommand{\DhelpVarC}{above}}
+ {\renewcommand{\DhelpVarC}{#5}}
+ \draw[axisarrow,->] (#2) --++ (\DaxisLength,0,0)node[\DhelpVarA] {\DxVarA};
+ \draw[axisarrow,->] (#2) --++ (0,\DaxisLength,0)node[\DhelpVarB] {\DyVarA};
+ \draw[axisarrow,->] (#2) --++ (0,0,\DaxisLength)node[\DhelpVarC] {\DzVarA};
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \ifthenelse{\equal{#2}{xy}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#2}{yx}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#2}{xz}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#2}{zx}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#2}{yz}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+ \ifthenelse{\equal{#2}{zy}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+
+ \ifthenelse{\equal{#2}{xy}}{
+ \begin{scope}[canvas is yx plane at \DhelpVarA=0]}
+ {\begin{scope}[canvas is #2 plane at \DhelpVarA=0]}
+
+ \pgfmathsetmacro{\DaxisDistanceLO}{\DaxisDistance/0.283527}
+
+ \ifthenelse{\equal{#2}{xy}}
+ {\renewcommand{\DhelpVarA}{\DaxisDistanceLO*-3mm}}
+ {\renewcommand{\DhelpVarA}{\DaxisDistanceLO*3mm}}
+
+ \pgfmathsetmacro{\DlocalaxisLengthLO}{\DlocalaxisLength/0.283527}
+ \renewcommand{\DhelpVarB}{\DlocalaxisLengthLO*3mm}
+
+ \coordinate (axisVarA1) at ($ (#3)!#5!(#4) $);
+ \coordinate (axisVarB1) at ($ (axisVarA1)!{\DhelpVarB}!(#4) $);
+ \coordinate (axisVarA2) at ($ (axisVarA1)!\DhelpVarA!90:(#4) $);
+ \coordinate (axisVarB2) at ($ (axisVarB1)!\DhelpVarA!90:(#4) $);
+ \coordinate (axisVarC2) at ($ (axisVarA2)!1!90:(axisVarB2) $);
+
+ \ifthenelse{\equal{#9}{0}}
+ {\renewcommand{\DhelpVarB}{\DyVarB}}
+ {\renewcommand{\DhelpVarB}{\DzVarB}}
+
+ \draw[thin,->] (axisVarA2) -- (axisVarB2)node[#6] {\DxVarB};
+ \draw[thin,->] (axisVarA2) -- (axisVarC2)node[#7] {\DhelpVarB};
+ \end{scope}
+
+ \ifthenelse{\equal{#9}{0}}
+ {\renewcommand{\DhelpVarB}{\DzVarB}}
+ {\renewcommand{\DhelpVarB}{\DyVarB}}
+
+ \ifthenelse{\equal{#2}{xy}}
+ {\draw[thin,->] (axisVarA2) --++ (0,0,-\DlocalaxisLength)node[#8] {\DhelpVarB};}{}
+ \ifthenelse{\equal{#2}{yx}}
+ {\draw[thin,->] (axisVarA2) --++ (0,0,-\DlocalaxisLength)node[#8] {\DhelpVarB};}{}
+ \ifthenelse{\equal{#2}{xz}}
+ {\draw[thin,->] (axisVarA2) --++ (0,-\DlocalaxisLength,0)node[#8] {\DhelpVarB};}{}
+ \ifthenelse{\equal{#2}{zx}}
+ {\draw[thin,->] (axisVarA2) --++ (0,\DlocalaxisLength,0)node[#8] {\DhelpVarB};}{}
+ \ifthenelse{\equal{#2}{yz}}
+ {\draw[thin,->] (axisVarA2) --++ (\DlocalaxisLength,0,0)node[#8] {\DhelpVarB};}{}
+ \ifthenelse{\equal{#2}{zy}}
+ {\draw[thin,->] (axisVarA2) --++ (-\DlocalaxisLength,0,0)node[#8] {\DhelpVarB};}{}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{
+ \ifthenelse{\equal{#6}{right}}
+ {\renewcommand{\DhelpVarA}{0}}
+ {\renewcommand{\DhelpVarA}{#6}}
+
+ \ifthenelse{\equal{#7}{below}}
+ {\renewcommand{\DhelpVarB}{0}}
+ {\renewcommand{\DhelpVarB}{#7}}
+
+ \ifthenelse{\equal{#8}{left}}
+ {\renewcommand{\DhelpVarC}{0}}
+ {\renewcommand{\DhelpVarC}{#8}}
+
+ \coordinate (axisVarA1) at ($ (#3)!#5!(#4) $);
+ \coordinate (axisVarA2) at ($(axisVarA1)+1*({\DaxisDistance*cos(#9)*sin(#2)},{\DaxisDistance*sin(#9)*sin(#2)},{\DaxisDistance*cos(#2)})$);
+
+ \tdplotsetrotatedcoords{\DhelpVarA}{\DhelpVarB}{\DhelpVarC};
+
+ \tdplotsetrotatedcoordsorigin{(axisVarA2)}
+ \draw[thin,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[\DxNodePos]{\DxVarB};
+ \draw[thin,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[\DyNodePos]{\DyVarB};
+ \draw[thin,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[\DzNodePos]{\DzVarB};
+ }{}
+}
+
+%------------------------------------------------
+% 3dbeam
+%------------------------------------------------
+% \dbeam{type}{initial point}{end point}[rounded initial point][rounded end point];
+% with rounded initial point or/and rounded end point: 1 or nothing = true, 0=false,
+
+\newcommandx{\dbeam}[5][4=1,5=1]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \draw [hugeLine] (#2) -- (#3);
+ \ifthenelse{\equal{#4}{0}}{}
+ {\fill (#2) circle (\DhugeLineWidth/2);}
+ \ifthenelse{\equal{#5}{0}}{}
+ {\fill (#3) circle (\DhugeLineWidth/2);}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \draw [bigLine] (#2) -- (#3);
+ \ifthenelse{\equal{#4}{0}}{}
+ {\fill (#2) circle (\DbigLineWidth/2);}
+ \ifthenelse{\equal{#5}{0}}{}
+ {\fill (#3) circle (\DbigLineWidth/2);}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \draw [normalLine,dashed] (#2) -- (#3);
+ }{}
+}
+
+%------------------------------------------------
+% 3dsupport
+%------------------------------------------------
+% \dsupport{type}{insertion point}[][][][];
+%
+% Type 1
+% \dsupport{1}{insertion point}[x-direction][y-direction][z-direction];
+% with xyz-direction: 1=true, 0=false, -1=other direction
+% Type 2
+% \dsupport{2}{insertion point}[plane][normal-direction];
+%
+% Type 3
+% \dsupport{3}{insertion point}[x-direction][y-direction][z-direction];
+% in combination with \dhinge{3}
+% with xyz-direction: 1=true, 0=false, -1=other direction
+% Type 4
+% \dsupport{4}{insertion point}[x-direction][y-direction][z-direction];
+% same as type 1 but with springs
+% Type 5
+% \dsupport{5}{insertion point}[x-direction][y-direction][z-direction];
+% same as type 3 but with springs
+
+\newcommandx{\dsupport}[6][3=1,4=1,5=1,6=1]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \ifthenelse{\equal{#3}{0}}{}{
+ \draw [normalLine] (#2)-- ++(-\DsupportLength*#3,0,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,0)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#4}{0}}{}{
+ \draw [normalLine] (#2)-- ++(0,-\DsupportLength*#4,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,0)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#5}{0}}{}{
+ \draw [normalLine] (#2)-- ++(0,0,-\DsupportLength*#5);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius);
+ }
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \ifthenelse{\equal{#3}{xy}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#3}{yx}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#3}{xz}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#3}{zx}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#3}{yz}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+ \ifthenelse{\equal{#3}{zy}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+
+ \begin{scope}[canvas is #3 plane at \DhelpVarA=#4]
+ \draw [hugeLine] (#2)-- ++(-\DsupportLength/2,0)--++(\DsupportLength,0);
+ \draw [hugeLine] (#2)-- ++(0,-\DsupportLength/2)--++(0,\DsupportLength);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+
+ \ifthenelse{\equal{#3}{0}}{}{
+ \draw [normalLine] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(-\DsupportLength*#3,0,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#4}{0}}{}{
+ \draw [normalLine] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(0,-\DsupportLength*#4,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#5}{0}}{}{
+ \draw [normalLine] ($(#2)+1*(0,0,-\DhingeAxialHeight/2.5)$)-- ++(0,0,-\DsupportLength*#5+\DhingeAxialHeight/2);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius);
+ }
+
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \ifthenelse{\equal{#3}{0}}{}{
+ \draw [Dspring] (#2)-- ++(-\DsupportLength*#3,0,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,0)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#4}{0}}{}{
+ \draw [Dspring] (#2)-- ++(0,-\DsupportLength*#4,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,0)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#5}{0}}{}{
+ \draw [Dspring] (#2)-- ++(0,0,-\DsupportLength*#5);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius);
+ }
+
+ }{}
+
+ \ifthenelse{\equal{#1}{5}}{ %
+
+ \ifthenelse{\equal{#3}{0}}{}{
+ \draw [Dspring] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(-\DsupportLength*#3,0,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(-\DsupportLength*#3,0,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#4}{0}}{}{
+ \draw [Dspring] ($(#2)+1*(0,0,-\DhingeAxialHeight*2/3)$)-- ++(0,-\DsupportLength*#4,0);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,-\DsupportLength*#4,-\DhingeAxialHeight*2/3)$) circle (\DhingeRadius);
+ }
+ \ifthenelse{\equal{#5}{0}}{}{
+ \draw [Dspring] ($(#2)+1*(0,0,-\DhingeAxialHeight/2.5)$)-- ++(0,0,-\DsupportLength*#5+\DhingeAxialHeight/2);
+ \filldraw [normalLine,fill=white] ($(#2)+1*(0,0,-\DsupportLength*#5)$) circle (\DhingeRadius);
+ }
+ }{}
+}
+
+%------------------------------------------------
+% 3dhinge
+%------------------------------------------------
+% \dhinge{type}{insertion point}[][][];
+%
+% Type 1
+% \dhinge{1}{insertion point};
+%
+% Type 2
+% \dhinge{2}{insertion point}[initial point][end point][orientation];
+% with orientation: 0=standard, 1=other direction
+% Type 3
+% \dhinge{3}{insertion point}[rotation];
+% in combination with \dsupport{3}
+% Type 4
+% \dhinge{4}{insertion point}[initial point][end point];
+%
+
+\newcommandx{\dhinge}[5][3=0,4=0,5=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \begin{scope}[rotate around={#3:(#2)}]
+ \fill [white] (#2) circle (\DhingeRadius);
+ \draw [normalLine] (#2) circle (\DhingeRadius);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \begin{scope}[even odd rule]
+ \ifthenelse{\equal{#5}{1}}{
+ \clip (#2) circle (\DhingeBigRadius+\DnormalLineWidth)
+ (#2)--(#3)--($(#3)!\DhingeBigRadius+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DhingeBigRadius+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }{
+ \clip (#2)--(#3)--($(#3)!\DhingeBigRadius+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DhingeBigRadius+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }
+ \filldraw [fill=white,normalLine] (#2) circle (\DhingeBigRadius);
+ \end{scope}
+ \draw[hugeLine] ($(#2)!\DhingeBigRadius!(#3)$)--(#2)--($(#2)!\DhingeBigRadius!(#4)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \begin{scope}
+ \draw [normalLine] ($(#2)+1*({0*cos(#3+90)-\DhingeAxialHeight/2*sin(#3+90)},{0*sin(#3+90)+\DhingeAxialHeight/2*cos(#3+90)},2*\DhingeAxialLength/3)$)
+ -- ++(0,0,-\DhingeAxialLength)
+ -- ++({0*cos(#3+90)+\DhingeAxialHeight*sin(#3+90)},{0*sin(#3+90)-\DhingeAxialHeight*cos(#3+90)})
+ -- ++(0,0,\DhingeAxialLength);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \coordinate (hingeVarA) at ($ (#2)!\DhingeCornerLength!(#3) $);
+ \coordinate (hingeVarB) at ($ (#2)!\DhingeCornerLength!(#4) $);
+ \fill[black] (#2) -- (hingeVarA) -- (hingeVarB) -- cycle;
+ \fill[black] (#2)circle (\DhugeLineWidth/2);
+ }{}
+}
+
+%------------------------------------------------
+% 3dload
+%------------------------------------------------
+% \dload{type}{insertion point}[rotation A][rotation B][load length][load distance];
+% rotation A and B to positioning the load around the insertion point (spherical coordinates)
+%
+
+\newcommandx{\dload}[6][3=0,4=0,5=0,6=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \ifthenelse{\equal{#6}{0}}
+ {\renewcommand{\DhelpVarA}{\DforceDistance}}
+ {\renewcommand{\DhelpVarA}{#6}}
+ \ifthenelse{\equal{#5}{0}}
+ {\renewcommand{\DhelpVarB}{\DforceLength}}
+ {\renewcommand{\DhelpVarB}{#5}}
+ \draw[force,<-] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)});
+ }{}
+
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \ifthenelse{\equal{#6}{0}}
+ {\renewcommand{\DhelpVarA}{\DforceDistance}}
+ {\renewcommand{\DhelpVarA}{#6}}
+ \ifthenelse{\equal{#5}{0}}
+ {\renewcommand{\DhelpVarB}{\DforceLength}}
+ {\renewcommand{\DhelpVarB}{#5}}
+ \draw[force,->] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)});
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \ifthenelse{\equal{#6}{0}}
+ {\renewcommand{\DhelpVarA}{\DforceDistance}}
+ {\renewcommand{\DhelpVarA}{#6}}
+ \ifthenelse{\equal{#5}{0}}
+ {\renewcommand{\DhelpVarB}{\DforceLength}}
+ {\renewcommand{\DhelpVarB}{#5}}
+ \draw[force,<<-] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)});
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \ifthenelse{\equal{#6}{0}}
+ {\renewcommand{\DhelpVarA}{\DforceDistance}}
+ {\renewcommand{\DhelpVarA}{#6}}
+ \ifthenelse{\equal{#5}{0}}
+ {\renewcommand{\DhelpVarB}{\DforceLength}}
+ {\renewcommand{\DhelpVarB}{#5}}
+ \draw[force,->>] ($(#2)+1*({\DhelpVarA*cos(#4)*sin(#3)},{\DhelpVarA*sin(#4)*sin(#3)},{\DhelpVarA*cos(#3)})$) --++({\DhelpVarB*cos(#4)*sin(#3)},{\DhelpVarB*sin(#4)*sin(#3)},{\DhelpVarB*cos(#3)});
+ }{}
+
+}
+
+%------------------------------------------------
+% 3dlineload
+%------------------------------------------------
+% \dlineload{type}{}[]{initial point}{end point}[][][][];
+%
+% Type 1: in plane
+% \dlineload{1}{plane}[plane distance]{initial point}{end point}[initial force value][end force value][force interval];
+%
+% Type 2: in plane
+% \dlineload{2}{plane}[plane distance]{initial point}{end point}[initial force value][end force value][force interval];
+%
+% Type 3: in plane
+% \dlineload{3}{plane}[plane distance]{initial point}{end point}[initial force value][end force value][lineload distance from inital point][force interval];
+%
+% Type 4: in plane
+% \dlineload{4}{plane}[plane distance]{initial point}{end point}[force interval][force length];
+%
+% Type 5: in space
+% \dlineload{5}{rotation A}[rotation B]{initial point}{end point}[initial force value][end force value][force interval];
+% rotation A and B to positioning the lineload around the initial point (spherical coordinates)
+% Type 6: in space
+% \dlineload{6}{rotation A}[rotation B]{initial point}{end point}[force interval][force length];
+% rotation A and B to positioning the lineload around the initial point (spherical coordinates)
+
+\newcommandx{\dlineload}[9][3=0,6=1,7=1,8=\DlineloadInterval,9=\DlineloadInterval]{
+ %
+ \ifthenelse{\equal{#2}{xy}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#2}{yx}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#2}{xz}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#2}{zx}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#2}{yz}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+ \ifthenelse{\equal{#2}{zy}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+ %
+ \ifthenelse{\equal{#1}{5}}
+ {\sublineload{#1}{#4}{#5}[#6][#7][#8][#9][#2][#3];}
+ {\ifthenelse{\equal{#1}{6}}
+ {\sublineload{#1}{#4}{#5}[#6][#7][#8][#9][#2][#3];}
+ {
+ \begin{scope}[canvas is #2 plane at \DhelpVarA=#3]
+ \sublineload{#1}{#4}{#5}[#6][#7][#8][#9];
+ \end{scope}
+ }
+ }
+}
+
+\newcommandx{\sublineload}[9][4=1,5=1,6=\DlineloadInterval,7=\DlineloadInterval,8=0,9=0]{
+ \ifthenelse{\equal{#1}{1}}{ %
+ \coordinate (lineloadVarA1) at ($ (#2)!\DlineloadDistanceMM!90:(#3) $);
+ \coordinate (lineloadVarB1) at ($ (#3)!\DlineloadDistanceMM!-90:(#2) $);
+ \coordinate (lineloadVarA2) at ($ (#2)!{\DlineloadDistanceMM +#4cm}!90:(#3) $);
+ \coordinate (lineloadVarB2) at ($ (#3)!{\DlineloadDistanceMM+#5cm}!-90:(#2) $);
+ \ifthenelse{\equal{#4}{0}}{}
+ {
+ \draw [force,->] (lineloadVarA2) -- (lineloadVarA1);
+ }
+ \ifthenelse{\equal{#5}{0}}{}
+ {
+ \draw [force,->] (lineloadVarB2) -- (lineloadVarB1);
+ }
+ \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {};
+ \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2);
+ \fill (lineloadVarA2) circle (\DnormalLineWidth/2);
+ \fill (lineloadVarB2) circle (\DnormalLineWidth/2);
+ \pgfmathsetmacro{\lineloadIntervalBegin}{#6/\DscalingParameter}
+ \pgfmathsetmacro{\lineloadIntervalStep}{#6/\DscalingParameter*2}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6/\DscalingParameter}
+ \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{ %
+ \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\DlineloadDistanceMM) $);
+ \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\DlineloadDistanceMM) $);
+ \coordinate (lineloadVarA2) at ($ (#2)+1*(0,\DlineloadDistanceMM+#4cm) $);
+ \coordinate (lineloadVarB2) at ($ (#3)+1*(0,\DlineloadDistanceMM+#5cm) $);
+ \ifthenelse{\equal{#4}{0}}{}
+ {
+ \draw [force,->] (lineloadVarA2) -- (lineloadVarA1);
+ }
+ \ifthenelse{\equal{#5}{0}}{}
+ {
+ \draw [force,->] (lineloadVarB2) -- (lineloadVarB1);
+ }
+ \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {};
+ \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2);
+ \fill (lineloadVarA2) circle (\DnormalLineWidth/2);
+ \fill (lineloadVarB2) circle (\DnormalLineWidth/2);
+ \pgfmathsetmacro{\lineloadIntervalBegin}{#6}
+ \pgfmathsetmacro{\lineloadIntervalStep}{#6*2}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6}
+ \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{ %
+ \ifthenelse{\equal{#6}{\DlineloadInterval}}
+ {\renewcommand{\DhelpVarA}{0cm}}
+ {\renewcommand{\DhelpVarA}{#6cm}}
+ \path
+ let
+ \p1 = (#2),
+ \p2 = (#3)
+ in
+ coordinate (lineloadVarA1) at ($(\p1)+1*(0,\DlineloadDistanceMM+\DhelpVarA)$)
+ coordinate (lineloadVarB1) at ($(\x2,\y1)+1*(0,\DlineloadDistanceMM+\DhelpVarA)$)
+ coordinate (lineloadVarA2) at ($ (\p1)+1*(0,\DlineloadDistanceMM+\DhelpVarA+#4cm)$)
+ coordinate (lineloadVarB2) at ($ (\x2,\y1)+1*(0,\DlineloadDistanceMM+\DhelpVarA+#5cm)$);
+ \draw [tinyLine,loosely dotted] (lineloadVarA1)--($(#2)+1*(0,\DhingeBigRadius)$);
+ \draw [tinyLine,loosely dotted] (lineloadVarB1)--($(#3)+1*(0,\DhingeBigRadius)$);
+ \ifthenelse{\equal{#4}{0}}{}
+ {
+ \draw [force,->] (lineloadVarA2) -- (lineloadVarA1);
+ }
+ \ifthenelse{\equal{#5}{0}}{}
+ {
+ \draw [force,->] (lineloadVarB2) -- (lineloadVarB1);
+ }
+ \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {};
+ \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2);
+ \fill (lineloadVarA2) circle (\DnormalLineWidth/2);
+ \fill (lineloadVarB2) circle (\DnormalLineWidth/2);
+ \pgfmathsetmacro{\lineloadIntervalBegin}{#7}
+ \pgfmathsetmacro{\lineloadIntervalStep}{#7*2}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#7}
+ \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{ %
+ \coordinate (lineloadVarA1) at ($ (#2)+1*(0,\DlineloadDistanceMM) $);
+ \coordinate (lineloadVarB1) at ($ (#3)+1*(0,\DlineloadDistanceMM) $);
+ \ifthenelse{\equal{#4}{1}}
+ {\pgfmathsetmacro{\lineloadIntervalStep}{\DlineloadInterval}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-\DlineloadInterval/2}}
+ {\pgfmathsetmacro{\lineloadIntervalStep}{#4}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#4/2}}
+ \ifthenelse{\equal{#5}{1}}
+ {\pgfmathsetmacro{\lineloadForceLength}{\DlineloadForce}}
+ {\pgfmathsetmacro{\lineloadForceLength}{#5}}
+ \foreach \i in {0,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA1)!\i!(lineloadVarB1)$) -- ($(lineloadVarA1)!\i+\lineloadForceLength!(lineloadVarB1)$);
+ }{}
+
+\ifthenelse{\equal{#1}{5}}{ %
+ \coordinate (lineloadVarA1) at ($(#2)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$);
+ \coordinate (lineloadVarB1) at ($(#3)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$);
+ \coordinate (lineloadVarA2) at ($(#2)+1*({(\DlineloadDistance+#4)*cos(#9)*sin(#8)},{(\DlineloadDistance+#4)*sin(#9)*sin(#8)},{(\DlineloadDistance+#4)*cos(#8)})$);
+ \coordinate (lineloadVarB2) at ($(#3)+1*({(\DlineloadDistance+#5)*cos(#9)*sin(#8)},{(\DlineloadDistance+#5)*sin(#9)*sin(#8)},{(\DlineloadDistance+#5)*cos(#8)})$);
+ \ifthenelse{\equal{#4}{0}}{}
+ {
+ \draw [force,->] (lineloadVarA2) -- (lineloadVarA1);
+ }
+ \ifthenelse{\equal{#5}{0}}{}
+ {
+ \draw [force,->] (lineloadVarB2) -- (lineloadVarB1);
+ }
+ \draw [smallLine] (lineloadVarA1) -- (lineloadVarB1) node(xline)[right] {};
+ \draw [normalLine] (lineloadVarA2) -- (lineloadVarB2);
+ \fill (lineloadVarA2) circle (\DnormalLineWidth/2);
+ \fill (lineloadVarB2) circle (\DnormalLineWidth/2);
+ \pgfmathsetmacro{\lineloadIntervalBegin}{#6/\DscalingParameter}
+ \pgfmathsetmacro{\lineloadIntervalStep}{#6/\DscalingParameter*2}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#6/\DscalingParameter}
+ \foreach \i in {\lineloadIntervalBegin,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA2)!\i!(lineloadVarB2)$)-- ($(lineloadVarA1)!\i!(lineloadVarB1)$);
+ }{}
+
+
+ \ifthenelse{\equal{#1}{6}}{ %
+ \coordinate (lineloadVarA1) at ($(#2)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$);
+ \coordinate (lineloadVarB1) at ($(#3)+1*({\DlineloadDistance*cos(#9)*sin(#8)},{\DlineloadDistance*sin(#9)*sin(#8)},{\DlineloadDistance*cos(#8)})$);
+ \ifthenelse{\equal{#4}{1}}
+ {\pgfmathsetmacro{\lineloadIntervalStep}{\DlineloadInterval}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-\DlineloadInterval/2}}
+ {\pgfmathsetmacro{\lineloadIntervalStep}{#4}
+ \pgfmathsetmacro{\lineloadIntervalEnd}{1-#4/2}}
+ \ifthenelse{\equal{#5}{1}}
+ {\pgfmathsetmacro{\lineloadForceLength}{\DlineloadForce}}
+ {\pgfmathsetmacro{\lineloadForceLength}{#5}}
+ \foreach \i in {0,\lineloadIntervalStep,...,\lineloadIntervalEnd}
+ \draw [force,->] ($(lineloadVarA1)!\i!(lineloadVarB1)$) -- ($(lineloadVarA1)!\i+\lineloadForceLength!(lineloadVarB1)$);
+ }{}
+
+}
+
+%------------------------------------------------
+% 3dinternalforces
+%------------------------------------------------
+% \dinternalforces{plane}[plane distance]{initial point}{end point}{initial value}{end value}[parabola height][color][bend position];
+%
+
+\newcommandx{\dinternalforces}[9][2=0,7=0,8=red,9=.6667]{
+ %
+ \ifthenelse{\equal{#1}{xy}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#1}{yx}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#1}{xz}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#1}{zx}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#1}{yz}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+ \ifthenelse{\equal{#1}{zy}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+
+ \begin{scope}[canvas is #1 plane at \DhelpVarA=#2]
+ \subinternalforces{#3}{#4}{#5}{#6}[#7][#8][#9];
+ \end{scope}
+}
+
+\newcommandx{\subinternalforces}[7][5=0,6=red,7=.6667]{%
+ \coordinate (internalforcesVarA) at ($ (#1)!#3cm!-90:(#2) $);
+ \coordinate (internalforcesVarB) at ($ (#2)!#4cm!90:(#1)$);
+ \coordinate (internalforcesVarAB) at ($ (internalforcesVarA)!.5!(internalforcesVarB)$);
+ \coordinate (internalforcesVarC) at ($ (internalforcesVarAB)+2*(0,#5)$);
+ \coordinate (internalforcesVarAC) at ($ (internalforcesVarA)!#7!(internalforcesVarC)$);
+ \coordinate (internalforcesVarBC) at ($ (internalforcesVarB)!#7!(internalforcesVarC)$);
+ \ifthenelse{\equal{#5}{0}}{
+ \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) -- (internalforcesVarB) (internalforcesVarB) -- (#2);
+ \fill [color=#6] (internalforcesVarA) circle (\DbigLineWidth/2);
+ \fill [color=#6] (internalforcesVarB) circle (\DbigLineWidth/2);
+ \fill [color=#6] (#1) circle (\DbigLineWidth/2);
+ \fill [color=#6] (#2) circle (\DbigLineWidth/2);
+ }
+ {
+ \draw [bigLine,color=#6] (#1) -- (internalforcesVarA) (internalforcesVarA) .. controls (internalforcesVarAC) and (internalforcesVarBC) .. (internalforcesVarB) (internalforcesVarB) -- (#2);
+ \fill [color=#6] (internalforcesVarA) circle (\DbigLineWidth/2);
+ \fill [color=#6] (internalforcesVarB) circle (\DbigLineWidth/2);
+ \fill [color=#6] (#1) circle (\DbigLineWidth/2);
+ \fill [color=#6] (#2) circle (\DbigLineWidth/2);
+ }
+
+}
+
+%------------------------------------------------
+% 3ddimensioning
+%------------------------------------------------
+% \ddimensioning{plane}[plane distance]{initial point}{end point}{distance from point of origin}[measure][help line length];
+%
+
+\newcommandx{\ddimensioning}[7][2=0,6,7=0]{
+ %
+ \ifthenelse{\equal{#1}{xy}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#1}{yx}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#1}{xz}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#1}{zx}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#1}{yz}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+ \ifthenelse{\equal{#1}{zy}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+
+ \subdimensioning{#1}{#3}{#4}{#5}[#6][#7][#2][\DhelpVarA];
+}
+
+\newcommandx{\subdimensioning}[8][5,6=0,7=0,8]{
+ \ifthenelse{\equal{#1}{xy}}{
+ \begin{scope}[canvas is yx plane at #8=#7]
+ \path
+ let
+ \p1 = (#2),
+ \p2 = (#3)
+ in
+ coordinate (dimensioningVarA) at (#4,\y1)
+ coordinate (dimensioningVarB) at (#4,\y2);
+ \draw [smallLine] (dimensioningVarA)--++(\DdimensioningBar/2,0)--++(-\DdimensioningBar,0)
+ (dimensioningVarA)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2)
+ (dimensioningVarB)--++(\DdimensioningBar/2,0)--++(-\DdimensioningBar,0)
+ (dimensioningVarB)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2);
+ \end{scope}
+ \draw [smallLine] (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5};
+ \draw [tinyLine,dotted] (dimensioningVarA)--($ (dimensioningVarA)!{#6cm}!(#2) $)
+ (dimensioningVarB)--($ (dimensioningVarB)!{#6cm}!(#3) $);
+ }{
+ \begin{scope}[canvas is #1 plane at #8=#7]
+ \path
+ let
+ \p1 = (#2),
+ \p2 = (#3)
+ in
+ coordinate (dimensioningVarA) at (\x1,#4)
+ coordinate (dimensioningVarB) at (\x2,#4);
+ \draw [smallLine] (dimensioningVarA)--++(0,\DdimensioningBar/2)--++(0,-\DdimensioningBar)
+ (dimensioningVarA)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2)
+ (dimensioningVarB)--++(0,\DdimensioningBar/2)--++(0,-\DdimensioningBar)
+ (dimensioningVarB)--++(\DdimensioningBar/4,\DdimensioningBar/4)--++(-\DdimensioningBar/2,-\DdimensioningBar/2);
+ \end{scope}
+ \draw [smallLine] (dimensioningVarA)--(dimensioningVarB) node [sloped,midway,above] {#5};
+ \draw [tinyLine,dotted] (dimensioningVarA)--($ (dimensioningVarA)!{#6cm}!(#2) $)
+ (dimensioningVarB)--($ (dimensioningVarB)!{#6cm}!(#3) $);
+ }
+}
+
+%------------------------------------------------
+% 3dnotation
+%------------------------------------------------
+% \dnotation{type}{insertion point}{}[][][];
+%
+% Type 1
+% \dnotation{1}{insertion point}{labelling}[orientation];
+%
+% Type 2
+% \dnotation{2}{insertion point}{labelling}[orientation];
+%
+% Type 3
+% \dnotation{3}{initial point}{end point}[labelling][position][orientation];
+%
+% Type 4
+% \dnotation{4}{initial point}{end point}[labelling][position][orientation][text orientation];
+% with text orientation: 0 or nothing = parallel to beam, 1=parallel to axis
+% Type 5
+% \dnotation{5}{initial point}{end point}[labelling][position][orientation][text orientation];
+% with text orientation: 0 or nothing = parallel to beam, 1=parallel to axis
+% Type 6
+% \dnotation{6}{insertion point}{labelling};
+%
+
+\newcommandx{\dnotation}[7][4=above right,5=.5,6=above,7=sloped]{
+ \ifthenelse{\equal{#1}{1}}{
+ \begin{scope}
+ \draw (#2) node [#4]{#3};
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{
+ \begin{scope}
+ \draw (#2) node [#4]{#3};
+ \draw[bigLine] (#2)--++(0,\DdimensioningBar/2)--++(0,-\DdimensioningBar);
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{
+ \coordinate (notationVarA1) at ($ (#2)!#5!(#3) $);
+ \coordinate (notationVarB1) at ($ (notationVarA1)!\DdimensioningBar/2!90:(#3) $);
+ \coordinate (notationVarB2) at ($ (notationVarA1)!\DdimensioningBar/2!-90:(#3) $);
+ \draw[bigLine] (notationVarB1)--(notationVarB2);
+ \draw (notationVarA1) node [#6]{#4};
+ }{}
+
+ \ifthenelse{\equal{#1}{4}}{
+ \ifthenelse{\equal{#7}{1}}
+ {\renewcommand{\DhelpVarB}{}}
+ {\renewcommand{\DhelpVarB}{sloped}}
+ \begin{scope}
+ \path (#2) -- (#3) node[inner sep=0mm,rectangle,smallLine,fill=white,draw,minimum size=2.5*\DnoteRadius,midway,#6,\DhelpVarB,pos=#5] {#4};
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{5}}{
+ \ifthenelse{\equal{#7}{1}}
+ {\renewcommand{\DhelpVarB}{}}
+ {\renewcommand{\DhelpVarB}{sloped}}
+ \begin{scope}
+ \path (#2) -- (#3) node[midway,#6,\DhelpVarB,pos=#5] {#4};
+ \end{scope}
+ }{}
+
+ \ifthenelse{\equal{#1}{6}}{
+ \begin{scope}
+ \draw (#2) node [inner sep=0mm,circle,smallLine,fill=white,draw,minimum size=2.5*\DnoteRadius]{#3};
+ \end{scope}
+ }{}
+
+}
+
+%------------------------------------------------
+% 3daddon
+%------------------------------------------------
+% \daddon{type}{plane}[plane distance]{}{}{}[];
+%
+% Type 1
+% \daddon{1}{plane}[plane distance]{insertion point}{end point}{position};
+%
+% Type 2
+% \daddon{2}{plane}[plane distance]{insertion point}{initial point}{end point}[orientation];
+% with orientation: 1=standard, -1 or 0 = other direction
+% Type 3
+% \daddon{3}{plane}[plane distance]{insertion point}{initial point}{end point}[orientation];
+% with orientation: 1=standard, -1 or 0 = other direction
+
+\newcommandx{\daddon}[7][3=0,7=1]{
+
+ \ifthenelse{\equal{#2}{xy}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#2}{yx}}
+ {\renewcommand{\DhelpVarA}{z}}{}
+ \ifthenelse{\equal{#2}{xz}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#2}{zx}}
+ {\renewcommand{\DhelpVarA}{y}}{}
+ \ifthenelse{\equal{#2}{yz}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+ \ifthenelse{\equal{#2}{zy}}
+ {\renewcommand{\DhelpVarA}{x}}{}
+
+ \begin{scope}[canvas is #2 plane at \DhelpVarA=#3]
+ \subaddon{#1}{#4}{#5}{#6}[#7];
+ \end{scope}
+}
+
+\newcommandx{\subaddon}[5][5=1]{
+ \ifthenelse{\equal{#1}{1}}{
+ \coordinate (addonVarA1) at ($ (#2)!#4!(#3) $);
+ \coordinate (addonVarB1) at ($ (addonVarA1)!\DaddonLength/2!45:(#3) $);
+ \coordinate (addonVarB2) at ($ (addonVarA1)!\DaddonLength/2!225:(#3) $);
+ \draw[smallLine] (addonVarB1)--(addonVarB2)
+ ($(addonVarB1)+1*(\DsupportGap,0)$)--($(addonVarB2)+1*(\DsupportGap,0)$);
+ }{}
+
+ \ifthenelse{\equal{#1}{2}}{
+ \coordinate (addonVarA1) at ($ (#2)!\DaddonLength!(#3) $);
+ \coordinate (addonVarB1) at ($ (#2)!\DaddonLength!(#4) $);
+ \ifthenelse{\equal{#5}{1}}
+ {
+ \coordinate (addonVarC1) at ($ (addonVarA1)!\DaddonLength!90:(#3) $);
+ \coordinate (addonVarD1) at ($ (#2)!1.414*\DaddonLength/2!45:(#3) $);
+ }
+ {
+ \coordinate (addonVarC1) at ($ (addonVarA1)!\DaddonLength!-90:(#3) $);
+ \coordinate (addonVarD1) at ($ (#2)!1.414*\DaddonLength/2!-45:(#3) $);
+ }
+ \draw[smallLine] (addonVarA1)--(addonVarC1)-- (addonVarB1);
+ \filldraw (addonVarD1) circle (\DsmallLineWidth);
+ }{}
+
+ \ifthenelse{\equal{#1}{3}}{
+ \begin{scope}[even odd rule]
+ \ifthenelse{\equal{#5}{1}}{
+ \clip (#2) circle (\DdimensioningBar+\DnormalLineWidth)
+ (#2)--(#3)--($(#3)!\DaddonLength+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DaddonLength+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }{
+ \clip (#2)--(#3)--($(#3)!\DaddonLength+\DnormalLineWidth!-90:(#2)$)--($(#4)!\DaddonLength+\DnormalLineWidth!90:(#2)$)--(#4)-- cycle;
+ }
+ \draw [smallLine] (#2) circle (\DaddonLength)
+ (#2) circle (\DaddonLength-\DnormalLineWidth-\DnormalLineWidth);
+ \end{scope}
+ }{}
+
+}
+
+
+%================================================
+% Commands from 3dplot.sty by Jeff Hein 2009
+%================================================
+
+%------------------------------------------------
+% \tdplotsinandcos{sin}{cos}{theta}
+%------------------------------------------------
+%determines the sin and cos of the specified angle (in degrees).
+%#1: returns sin(#3)
+%#2: returns cos(#3)
+%#3: user-specified angle
+\newcommand{\tdplotsinandcos}[3]{%
+\pgfmathsetmacro{#1}{sin(#3)}%
+\pgfmathsetmacro{#2}{cos(#3)}%
+}
+
+%------------------------------------------------
+% \tdplotmult{result}{multiplicand}{multiplicator}
+%------------------------------------------------
+%determines the multiplication of specified values.
+%#1: returns #2*#3
+%#2: user-specified multiplicand
+%#3: user-specified multiplicator
+\newcommand{\tdplotmult}[3]{%
+\pgfmathsetmacro{#1}{#2*#3}%
+}
+
+%------------------------------------------------
+% \tdplotsetrotatedcoords{\alpha}{\beta}{\gamma}
+%------------------------------------------------
+%generates the coordinate transformation for the rotated coordinate system within the display coordinate system. This should be called only after the display coordinate system has been defined. If the display coordinate system changes, this will have to be updated.
+%#1: user-specified euler angle \alpha.
+%#2: user-specified euler angle \beta.
+%#3: user-specified euler angle \gamma.
+\newcommand{\tdplotsetrotatedcoords}[3]{%
+%
+\pgfmathsetmacro{\alphaeul}{#1}
+\pgfmathsetmacro{\betaeul}{#2}
+\pgfmathsetmacro{\gammaeul}{#3}
+%
+%perform some trig for the Euler transformation
+\tdplotsinandcos{\sinalpha}{\cosalpha}{\alphaeul}
+\tdplotsinandcos{\sinbeta}{\cosbeta}{\betaeul}
+\tdplotsinandcos{\singamma}{\cosgamma}{\gammaeul}
+%
+\tdplotmult{\sasb}{\sinalpha}{\sinbeta}
+\tdplotmult{\sbsg}{\sinbeta}{\singamma}
+\tdplotmult{\sasg}{\sinalpha}{\singamma}
+\tdplotmult{\sasbsg}{\sasb}{\singamma}
+%
+\tdplotmult{\sacb}{\sinalpha}{\cosbeta}
+\tdplotmult{\sacg}{\sinalpha}{\cosgamma}
+\tdplotmult{\sbcg}{\sinbeta}{\cosgamma}
+\tdplotmult{\sacbsg}{\sacb}{\singamma}
+\tdplotmult{\sacbcg}{\sacb}{\cosgamma}
+%
+\tdplotmult{\casb}{\cosalpha}{\sinbeta}
+\tdplotmult{\cacb}{\cosalpha}{\cosbeta}
+\tdplotmult{\cacg}{\cosalpha}{\cosgamma}
+\tdplotmult{\casg}{\cosalpha}{\singamma}
+%
+\tdplotmult{\cacbsg}{\cacb}{\singamma}
+\tdplotmult{\cacbcg}{\cacb}{\cosgamma}
+%
+%determine rotation matrix elements for Euler transformation
+\pgfmathsetmacro{\raaeul}{\cacbcg - \sasg}
+\pgfmathsetmacro{\rabeul}{-\cacbsg - \sacg}
+\pgfmathsetmacro{\raceul}{\casb}
+\pgfmathsetmacro{\rbaeul}{\sacbcg + \casg}
+\pgfmathsetmacro{\rbbeul}{-\sacbsg + \cacg}
+\pgfmathsetmacro{\rbceul}{\sasb}
+\pgfmathsetmacro{\rcaeul}{-\sbcg}
+\pgfmathsetmacro{\rcbeul}{\sbsg}
+\pgfmathsetmacro{\rcceul}{\cosbeta}
+%
+% transformation from polar coordinates to Cartesian coordinates
+\pgfmathsetmacro{\xxcart}{\DxLength*cos(\DxAngle)}
+\pgfmathsetmacro{\xycart}{\DxLength*sin(\DxAngle)}
+\pgfmathsetmacro{\yxcart}{\DyLength*cos(\DyAngle)}
+\pgfmathsetmacro{\yycart}{\DyLength*sin(\DyAngle)}
+\pgfmathsetmacro{\zxcart}{\DzLength*cos(\DzAngle)}
+\pgfmathsetmacro{\zycart}{\DzLength*sin(\DzAngle)}
+%
+\pgfmathsetmacro{\raarot}{\xxcart}
+\pgfmathsetmacro{\rbarot}{\xycart}
+\pgfmathsetmacro{\rabrot}{\yxcart}
+\pgfmathsetmacro{\rbbrot}{\yycart}
+\pgfmathsetmacro{\racrot}{\zxcart}
+\pgfmathsetmacro{\rbcrot}{\zycart}
+%
+%now, determine master rotation matrix to define euler-rotated coordinates within the display coordinate frame
+\tdplotmult{\raaeaa}{\raarot}{\raaeul}
+\tdplotmult{\rabeba}{\rabrot}{\rbaeul}
+\tdplotmult{\raceca}{\racrot}{\rcaeul}
+%
+\tdplotmult{\raaeab}{\raarot}{\rabeul}
+\tdplotmult{\rabebb}{\rabrot}{\rbbeul}
+\tdplotmult{\racecb}{\racrot}{\rcbeul}
+%
+\tdplotmult{\raaeac}{\raarot}{\raceul}
+\tdplotmult{\rabebc}{\rabrot}{\rbceul}
+\tdplotmult{\racecc}{\racrot}{\rcceul}
+%
+\tdplotmult{\rbaeaa}{\rbarot}{\raaeul}
+\tdplotmult{\rbbeba}{\rbbrot}{\rbaeul}
+\tdplotmult{\rbceca}{\rbcrot}{\rcaeul}
+%
+\tdplotmult{\rbaeab}{\rbarot}{\rabeul}
+\tdplotmult{\rbbebb}{\rbbrot}{\rbbeul}
+\tdplotmult{\rbcecb}{\rbcrot}{\rcbeul}
+%
+\tdplotmult{\rbaeac}{\rbarot}{\raceul}
+\tdplotmult{\rbbebc}{\rbbrot}{\rbceul}
+\tdplotmult{\rbcecc}{\rbcrot}{\rcceul}
+%
+%set up the master rotation matrix elements
+\pgfmathsetmacro{\raarc}{\raaeaa + \rabeba + \raceca}
+\pgfmathsetmacro{\rabrc}{\raaeab + \rabebb + \racecb}
+\pgfmathsetmacro{\racrc}{\raaeac + \rabebc + \racecc}
+\pgfmathsetmacro{\rbarc}{\rbaeaa + \rbbeba + \rbceca}
+\pgfmathsetmacro{\rbbrc}{\rbaeab + \rbbebb + \rbcecb}
+\pgfmathsetmacro{\rbcrc}{\rbaeac + \rbbebc + \rbcecc}
+%
+\tikzset{tdplot_rotated_coords/.append style={x={(\raarc cm,\rbarc cm)},y={(\rabrc cm, \rbbrc cm)},z={(\racrc cm, \rbcrc cm)}}}%
+}
+
+%------------------------------------------------
+% \tdplotsetrotatedcoordsorigin{point}
+%------------------------------------------------
+%this translates the rotated coordinate system to the specified point.
+%#1: user-specified coordinate
+\newcommand{\tdplotsetrotatedcoordsorigin}[1]{%
+%\pgfmathsetmacro{\tdplotrotatedcoordsorigin}{#1}%
+\tikzset{tdplot_rotated_coords/.append style={shift=#1}}%
+}
+
+%------------------------------------------------
+% \tdplotresetrotatedcoordsorigin
+%------------------------------------------------
+%this resets the rotated coordinate system translation back to the origin of the main coordinate system
+\newcommand{\tdplotresetrotatedcoordsorigin}{%
+%\pgfmathsetmacro{\tdplotrotatedcoordsorigin}{#1}%
+\tikzset{tdplot_rotated_coords/.append style={shift={(0,0,0)}}}%
+}
+
+%=============================================================================
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
+
+
+
+
+
+
diff --git a/graphics/pgf/contrib/stanli/stanli.tex b/graphics/pgf/contrib/stanli/stanli.tex
new file mode 100644
index 0000000000..d33b97110e
--- /dev/null
+++ b/graphics/pgf/contrib/stanli/stanli.tex
@@ -0,0 +1,5288 @@
+%=============================================================================
+% File: stanli.tex -- Structural Analysis Library based on PGF/TikZ
+% Author(s): Juergen Hackl <hackl.j@gmx.at>
+% Creation: 20 Dec 2016
+% Time-stamp: <Mit 2016-12-21 10:22 juergen>
+%
+% Copyright (c) 2016 Juergen Hackl <hackl.j@gmx.at>
+%
+% More information on LaTeX: http://www.latex-project.org/
+%=============================================================================
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[%
+ a4paper,
+ BCOR20mm,
+ pointlessnumbers,
+ twoside,
+ halfparskip,
+ openright,
+]{scrreprt}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% PACKAGES
+\usepackage[english]{babel}
+\usepackage[latin1]{inputenc}
+\usepackage{ae,aecompl}
+\usepackage[automark]{scrpage2}
+\usepackage[pdftex]{graphicx}
+\usepackage[margin=0.75in]{geometry}
+\usepackage{xcolor}
+\usepackage{listings}
+\usepackage{stanli}
+\usetikzlibrary{backgrounds}
+
+\usepackage[%
+ pdftex=true,
+ hypertexnames=false,
+ plainpages=false,
+ pdfpagelabels,
+ pagebackref=false,
+ colorlinks=false,
+ bookmarks=true,
+ bookmarksopen=true,
+ bookmarksnumbered=true,
+ pdftitle={TikZ Library for Structural Analysis},
+ pdfauthor={Juergen HACKL},
+ pdfcreator={Accomplished with LaTeX2e and pdfLaTeX with hyperref-package.},
+]{hyperref}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% SELF-DEFINED MACROS
+\newcommand{\tikzsym}{Ti\emph{k}Z }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Header, Footer, Page format
+\setlength{\paperheight}{30cm}
+\setlength{\textheight}{24.5cm}
+\setlength{\paperwidth}{21cm}
+\setlength{\textwidth}{16.8cm}
+\setlength{\oddsidemargin}{-0.3cm}
+\setlength{\evensidemargin}{-0.3cm}
+\setlength{\parindent}{0cm}
+\setlength{\topmargin}{-1.9cm}
+\setlength{\headsep}{1.3cm}
+\setlength{\footskip}{1.5cm}
+
+\pagestyle{scrheadings}
+\setheadsepline{.4pt}
+\automark[section]{chapter}
+\clearscrheadfoot
+
+\ohead[]{\footnotesize{\headmark}}
+\ifoot{\footnotesize{TikZ Library for Structural Analysis}}
+\ofoot[\footnotesize{\pagemark}]{\footnotesize{\pagemark}}
+
+\addtokomafont{caption}{\small}
+\addtokomafont{captionlabel}{\small}
+\setkomafont{captionlabel}{\sffamily\bfseries}
+
+\graphicspath{{./pictures/}}
+
+\definecolor{ibfblue}{cmyk}{0.49,0.22,.15,0}
+
+\lstset{ %
+basicstyle=\scriptsize\ttfamily,
+commentstyle=\itshape\color{black!70},
+stepnumber=2,
+backgroundcolor=\color{ibfblue!40},
+showspaces=false,
+showstringspaces=false,
+showtabs=false,
+tabsize=2,
+captionpos=b,
+breaklines=true,
+breakatwhitespace=false,
+title=\lstname,
+escapeinside={+*}{*+},
+morekeywords={*,...},
+stringstyle=\ttfamily,
+emphstyle={\color{red}\bfseries},
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% DOCUMENT
+\begin{document}
+
+\tikzset{background rectangle/.style={fill=yellow!30}}
+
+\pagenumbering{Roman}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% contents: Titlepage %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{titlepage}
+ \begin{center}
+ \vspace{25mm}
+ \textsf{\textbf{\huge Ti\textit{k}Z Library for Structural Analysis}}\\
+ \Large{\texttt{stanli} User Guide, Version 3.0}\\
+ \vspace{5mm}
+ \Large{J\"urgen Hackl}\\
+ \normalsize \href{mailto:hackl.j@gmx.at}{hackl.j@gmx.at}\\
+ \vspace{5mm}
+ \today
+
+\begin{tikzpicture}[framed]
+ \scaling{.65};
+
+ \point{a}{0}{1}; %2
+ \point{b}{3}{1}; %3
+ \point{c}{11}{3}; %4
+ \point{d}{19}{1}; %5
+ \point{e}{22}{1}; %6
+ \point{f}{3}{0}; %1
+ \point{g}{11}{-2}; %8
+ \point{h}{19}{0}; %7
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+
+ \notation{4}{f}{g}[$S$];
+
+\end{tikzpicture}
+
+\begin{minipage}[t]{0.45\linewidth}\begin{lstlisting}
+\begin{tikzpicture}
+ \scaling{.65};
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\linewidth}\begin{lstlisting}
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+ \notation{4}{f}{g}[$S$];
+
+\end{tikzpicture}
+
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+
+\end{center}
+\end{titlepage}
+.
+\vfill
+
+ Copyright 2011--2016 by J\"urgen Hackl
+
+\medskip
+This work was done in cooperation with the Institute of Structural Analysis of Graz University of Technology.
+
+ \medskip
+ Permission is granted to copy, distribute and/or modify \emph{the documentation} under the terms of the \textsc{gnu} Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled \textsc{gnu} Free Documentation License.
+
+ \medskip
+ Permission is granted to copy, distribute and/or modify \emph{the code of the package} under the terms of the \textsc{gnu} General Public License, Version 2 or any later version published by the Free Software Foundation. A copy of the license is included in the section entitled \textsc{gnu} General Public License.
+
+ \medskip
+ Permission is also granted to distribute and/or modify \emph{both the documentation and the code} under the conditions of the \LaTeX\ Project Public License, either version 1.3c of this license or (at your option) any later version. A copy of the license is included in the section entitled \LaTeX\ Project Public License.
+
+
+\tableofcontents
+\cleardoubleplainpage
+
+% set pagenumbering to arabic and reset counter
+\pagenumbering{arabic}
+\setcounter{page}{1}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% contents: Commands %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\chapter{Commands}
+\label{sec:Befehlsubersicht}
+
+\section{2D Commands}
+\label{sec:2dcom}
+
+\begin{lstlisting}[emph={macroname},backgroundcolor=\color{red!10}]
+ \macroname{obligatory}{obligatory}{obligatory}[optional][optional];
+\end{lstlisting}\vspace{-7mm}
+
+Scaling (see \ref{sec:scaling})
+
+\begin{lstlisting}[emph={scaling},backgroundcolor=\color{white}]
+ \scaling{scaling_value};
+\end{lstlisting}\vspace{-10mm}
+
+Points (see \ref{sec:Punkte})
+
+\begin{lstlisting}[emph={point},backgroundcolor=\color{white}]
+ \point{name}{x-coordiante}{y-coordiante};
+\end{lstlisting}\vspace{-10mm}
+
+Beams and bars (see \ref{sec:BalkenUndStabe})
+
+\begin{lstlisting}[emph={beam},backgroundcolor=\color{white}]
+ \beam{type}{initial point}{end point}[rounded initial point][rounded end point];
+
+ +*\textbf{\{1\} bending beam with characteristic fiber}*+
+ \beam{1}{initial point}{end point[rounded initial point][rounded end point]};
+
+ +*\textbf{\{2\} trussed}*+
+ \beam{2}{initial point}{end point}[rounded initial point][rounded end point];
+
+ +*\textbf{\{3\} hidden bar}*+
+ \beam{3}{initial point}{end point};
+
+ +*\textbf{\{4\} bending beam without characteristic fiber}*+
+ \beam{4}{initial point}{end point}[rounded initial point][rounded end point];
+\end{lstlisting}\vspace{-10mm}
+
+Supports and Bearings(see \ref{sec:Lager})
+
+\begin{lstlisting}[emph={support},backgroundcolor=\color{white}]
+ \support{type}{insertion point}[rotation];
+
+ +*\textbf{\{1\} fixed bearing}*+
+ \support{1}{insertion point}[rotation];
+
+ +*\textbf{\{2\} floating bearing}*+
+ \support{2}{insertion point}[rotation];
+
+ +*\textbf{\{3\} fixed support}*+
+ \support{3}{insertion point}[rotation];
+
+ +*\textbf{\{4\} support}*+
+ \support{4}{insertion point}[rotation];
+
+ +*\textbf{\{5\} spring}*+
+ \support{5}{insertion point}[rotation];
+
+ +*\textbf{\{6\} torsion spring}*+
+ \support{6}{insertion point}[rotation];
+\end{lstlisting}\vspace{-10mm}
+
+Joints and Hinges (siehe \ref{sec:Gelenke})
+
+\begin{lstlisting}[emph={hinge},backgroundcolor=\color{white}]
+ \hinge{type}{insertion point}[optional][optional][optional];
+
+ +*\textbf{\{1\} full joint}*+
+ \hinge{1}{insertion point};
+
+ +*\textbf{\{2\} half joint}*+
+ \hinge{2}{insertion point}[initial point][end point][orientation];
+
+ +*\textbf{\{3\} shear joint}*+
+ \hinge{3}{insertion point}[rotation];
+
+ +*\textbf{\{4\} normal force joint}*+
+ \hinge{4}{insertion point}[rotation];
+
+ +*\textbf{\{5\} stiff corner}*+
+ \hinge{5}{insertion point}[initial point][end point];
+\end{lstlisting}\vspace{-10mm}
+
+Single loads (see \ref{sec:Einzellast})
+
+\begin{lstlisting}[emph={load},backgroundcolor=\color{white}]
+ \load{type}{insertion point}[rotation][length or included angle][loaddistance];
+
+ +*\textbf{\{1\} single load}*+
+ \load{1}{insertion point}[rotation][length][loaddistance];
+
+ +*\textbf{\{2\} moment clockwise}*+
+ \load{2}{insertion point}[rotation][included angle][moment distance];
+
+ +*\textbf{\{3\} moment counter clockwise}*+
+ \load{3}{insertion point}[rotation][included angle][moment distance];
+\end{lstlisting}\vspace{-10mm}
+
+Line loads (siehe \ref{sec:Linienlast})
+
+\begin{lstlisting}[emph={lineload},backgroundcolor=\color{white}]
+ \lineload{type}{initial point}{end point}[optional][optional][optional][optional];
+
+ +*\textbf{\{1\} line load normal to beam axis}*+
+ \lineload{1}{initial point}{end point}[initial force value][end force value]
+ [force interval];
+
+ +*\textbf{\{2\} line load normal to x-axis}*+
+ \lineload{2}{initial point}{end point}[initial force value][end force value]
+ [force interval];
+
+ +*\textbf{\{3\} line load projected on the beam}*+
+ \lineload{3}{initial point}{end point}[initial force value][end force value]
+ [lineload_distance from inital point][force interval];
+
+ +*\textbf{\{4\} line load along the beam axis}*+
+ \lineload{4}{initial point}{end point}[force interval][force length];
+\end{lstlisting}\vspace{-10mm}
+
+Temperature (see \ref{sec:Temperatur})
+
+\begin{lstlisting}[emph={temperature},backgroundcolor=\color{white}]
+ \temperature{initial point}{end point}{temperature_below}{temperature_above}
+ [temperature_position][temperature_value_below][temperature_value_above]
+ [text_orientation_below][text_orientation_above];
+\end{lstlisting}\vspace{-10mm}
+
+Internal forces (see \ref{sec:Schnittkraftverlauf})
+
+\begin{lstlisting}[emph={internalforces},backgroundcolor=\color{white}]
+ \internalforces{initial point}{end point}{initial value}{end value}
+ [parabola height][color][bend position];
+\end{lstlisting}\vspace{-10mm}
+
+Dimensioning (see \ref{sec:Abmessungen})
+
+\begin{lstlisting}[emph={dimensioning},backgroundcolor=\color{white}]
+ \dimensioning{type}{initial point}{end point}{distance from point of origin}[measure];
+
+ +*\textbf{\{1\} dimensioning horizontal}*+
+ \dimensioning{1}{initial point}{end point}{distance from point of origin}[measure];
+
+ +*\textbf{\{2\} dimensioning vertical}*+
+ \dimensioning{2}{initial point}{end point}{distance from point of origin}[measure];
+
+ +*\textbf{\{3\} dimensioning of a shift}*+
+ \dimensioning{3}{initial point}{end point}{distance from inital point}[measure];
+\end{lstlisting}\vspace{-10mm}
+
+Range of the influence line (see \ref{sec:BereichDerEinflusslinie})
+
+\begin{lstlisting}[emph={influenceline},backgroundcolor=\color{white}]
+ \influenceline{initial point}{end point}{distance from initial point}[arrow position];
+\end{lstlisting}\vspace{-10mm}
+
+Labeling and notation (see \ref{sec:Bezeichnungen})
+
+\begin{lstlisting}[emph={notation},backgroundcolor=\color{white}]
+ \notation{type}{insertion point}{}[][][][];
+
+ +*\textbf{\{1\} label}*+
+ \notation{1}{insertion point}{labelling}[orientation];
+
+ +*\textbf{\{2\} label with vertical mark}*+
+ \notation{2}{insertion point}{labelling}[orientation];
+
+ +*\textbf{\{3\} label with mark orthogonal to a line}*+
+ \notation{3}{initial point}{end point}[labelling][position][orientation];
+
+ +*\textbf{\{4\} label in a square}*+
+ \notation{4}{initial point}{end point}[labelling][position][orientation][text orientation];
+
+ +*\textbf{\{5\} label of a line}*+
+ \notation{5}{initial point}{end point}[labelling][position][orientation][text orientation];
+
+ +*\textbf{\{6\} label in a circle}*+
+ \notation{6}{insertion point}{labelling};
+\end{lstlisting}\vspace{-10mm}
+
+Additional symbols (siehe \ref{sec:ZusatzlicheSymbole})
+
+\begin{lstlisting}[emph={addon},backgroundcolor=\color{white}]
+ \addon{type}{insertion point}{}{}[];
+
+ +*\textbf{\{1\} symbol for parallel lines}*+
+ \addon{1}{insertion point}{end point}{position};
+
+ +*\textbf{\{2\} Symbol for orthogonal lines}*+
+ \addon{2}{insertion point}{initial point}{end point}[orientation];
+
+ +*\textbf{\{3\} arc symbol}*+
+ \addon{3}{insertion point}{initial point}{end point}[orientation];
+\end{lstlisting}\vspace{-10mm}
+
+\newpage
+\section{3D Commands}
+\label{sec:3dcom}
+
+\begin{lstlisting}[emph={macroname},backgroundcolor=\color{red!10}]
+ \macroname{obligatory}{obligatory}{obligatory}[optional][optional];
+\end{lstlisting}\vspace{-7mm}
+
+Define coordinates (see \ref{sec:3dsetcoords})
+
+\begin{lstlisting}[emph={setcoords},backgroundcolor=\color{white}]
+ \setcoords{x-angle}{y-angle}[x-direction][y-direction][z-direction][z-angle]
+\end{lstlisting}\vspace{-10mm}
+
+Define axes (see \ref{sec:3dsetaxis})
+
+\begin{lstlisting}[emph={setaxis},backgroundcolor=\color{white}]
+ \setaxis{type}[optional][optional][optional][optional][optional][optional]
+
+ +*\textbf{\{1\} global axis with $x,\;y,\;z$ and local axis with $x^\prime,\;y^\prime,\;z^\prime$}*+
+ \setaxis{1}
+
+ +*\textbf{\{2\} global axis with $X,\;Y,\;Z$ and local axis with $x,\;y,\;z$}*+
+ \setaxis{2}
+
+ +*\textbf{\{3\} self defined global and local axes}*+
+ \setaxis{3}[X-labelling][Y-labelling][Z-labelling][x-labelling][y-labelling]
+ [z-labelling]
+
+ +*\textbf{\{4\} change label orientation for local the local axis}*+
+ \setaxis{4}[x-orientation][y-orientation][z-orientation];
+\end{lstlisting}\vspace{-10mm}
+
+Show point information (see \ref{sec:3dshowpoint})
+
+\begin{lstlisting}[emph={showpoint},backgroundcolor=\color{white}]
+ \showpoint
+\end{lstlisting}\vspace{-10mm}
+
+Scaling (see \ref{sec:3dscaling})
+
+\begin{lstlisting}[emph={dscaling},backgroundcolor=\color{white}]
+ \dscaling{type}{scaling_value};
+
+ +*\textbf{\{1\} scaling of the point distances}*+
+ \dscaling{1}{scaling_value};
+
+ +*\textbf{\{2\} scaling of the bearings}*+
+ \dscaling{2}{scaling_value};
+
+ +*\textbf{\{3\} scaling of the axes}*+
+ \dscaling{3}{scaling_value};
+
+ +*\textbf{\{4\} scaling of the single loads and the line loads}*+
+ \dscaling{4}{scaling_value};
+
+ +*\textbf{\{5\} scaling of the dimensioning}*+
+ \dscaling{5}{scaling_value};
+
+ +*\textbf{\{6\} scaling of the add-ons}*+
+ \dscaling{6}{scaling_value};
+\end{lstlisting}\vspace{-10mm}
+
+Points (see \ref{sec:3dPunkte})
+
+\begin{lstlisting}[emph={dpoint},backgroundcolor=\color{white}]
+ \dpoint{name}{x-coordiante}{y-coordiante}{z-coordinate};
+\end{lstlisting}\vspace{-10mm}
+
+Beams and bars (see \ref{sec:3dBalkenUndStaebe})
+
+\begin{lstlisting}[emph={dbeam},backgroundcolor=\color{white}]
+ \dbeam{type}{initial point}{end point}[rounded initial point][rounded end point];
+
+ +*\textbf{\{1\} bending beam}*+
+ \dbeam{1}{initial point}{end point[rounded initial point][rounded end point]};
+
+ +*\textbf{\{2\} trussed}*+
+ \dbeam{2}{initial point}{end point}[rounded initial point][rounded end point];
+
+ +*\textbf{\{3\} hidden bar}*+
+ \dbeam{3}{initial point}{end point};
+\end{lstlisting}\vspace{-10mm}
+
+Axes (see \ref{sec:3dAchsen})
+
+\begin{lstlisting}[emph={daxis},backgroundcolor=\color{white}]
+ \daxis{type}{obligatory}[optional][optional][optional][optional][optional][optional][optional];
+
+ +*\textbf{\{1\} global axis}*+
+ \daxis{1}{insertion point}[X-orientation][Y-orientation][Z-orientation];
+
+ +*\textbf{\{2\} local axis in one plane}*+
+ \daxis{2}{plane}[insertion point][end point][position][x-orientation][y-orientation]
+ [z-orientation][change y with z];
+
+ +*\textbf{\{3\} local axis in space}*+
+ \daxis{3}{rotation A}[insertion point][end point][position][rotation 1][rotation 2]
+ [rotation 3][rotation B];
+\end{lstlisting}\vspace{-10mm}
+
+Supports (see \ref{sec:3dLager})
+
+\begin{lstlisting}[emph={dsupport},backgroundcolor=\color{white}]
+ \dsupport{type}{insertion point}[optional][optional][optional][optional];
+
+ +*\textbf{\{1\} support with pendulum rods type 1}*+
+ \dsupport{1}{insertion point}[x-direction][y-direction][z-direction];
+
+ +*\textbf{\{2\} fixed support}*+
+ \dsupport{2}{insertion point}[plane];
+
+ +*\textbf{\{3\} support with pendulum rods type 2}*+
+ \dsupport{3}{insertion point}[x-direction][y-direction][z-direction];
+
+ +*\textbf{\{4\} support with springs type 1}*+
+ \dsupport{4}{insertion point}[x-direction][y-direction][z-direction];
+
+ +*\textbf{\{5\} support with springs type 2}*+
+ \dsupport{5}{insertion point}[x-direction][y-direction][z-direction];
+\end{lstlisting}\vspace{-10mm}
+
+Joints and Hinges (see \ref{sec:3dGelenke})
+
+\begin{lstlisting}[emph={dhinge},backgroundcolor=\color{white}]
+ \dhinge{type}{insertion point}[optional][optional][optional];
+
+ +*\textbf{\{1\} full joint}*+
+ \dhinge{1}{insertion point};
+
+ +*\textbf{\{2\} half joint}*+
+ \dhinge{2}{insertion point}[initial point][end point][orientation];
+
+ +*\textbf{\{3\} forked hinge}*+
+ \dhinge{3}{insertion point}[rotation];
+
+ +*\textbf{\{4\} stiffed corner}*+
+ \dhinge{4}{insertion point}[initial point][end point];
+\end{lstlisting}\vspace{-10mm}
+
+Single loads (see \ref{sec:3dEinzellast})
+
+\begin{lstlisting}[emph={dload},backgroundcolor=\color{white}]
+ \dload{type}{insertion point}[rotation A][rotation B][load length][load distance];
+
+ +*\textbf{\{1\} single load pointing to the insertion point}*+
+ \dload{1}{insertion point}[rotation A][rotation B][load length][load distance];
+
+ +*\textbf{\{2\} single load pointing away from the insertion point}*+
+ \dload{2}{insertion point}[rotation A][rotation B][load length][load distance];
+
+ +*\textbf{\{3\} moment pointing to the insertion point}*+
+ \dload{3}{insertion point}[rotation A][rotation B][load length][load distance];
+
+ +*\textbf{\{4\} moment pointing away from the insertion point}*+
+ \dload{4}{insertion point}[rotation A][rotation B][load length][load distance];
+\end{lstlisting}\vspace{-10mm}
+
+Line loads (see \ref{sec:3dLinienlast})
+
+\begin{lstlisting}[emph={dlineload},backgroundcolor=\color{white}]
+ \dlineload{type}{obligatory}[optional]{initial point}{end point}[optional][optional][optional]
+ [optional];
+
+ +*\textbf{\{1\} line load perpendicular to the beam axis}*+
+ \dlineload{1}{plane}[plane distance]{initial point}{end point}[initial force value]
+ [end force value][force interval];
+
+ +*\textbf{\{2\} line load parallel to a global plane}*+
+ \dlineload{2}{plane}[plane distance]{initial point}{end point}[initial force value]
+ [end force value][force interval];
+
+ +*\textbf{\{3\} line load projected on the beam}*+
+ \dlineload{3}{plane}[plane distance]{initial point}{end point}[initial force value]
+ [end force value][lineload distance from inital point][force interval];
+
+ +*\textbf{\{4\} line load parallel the beam axis}*+
+ \dlineload{4}{plane}[plane distance]{initial point}{end point}[force interval]
+ [force length];
+
+ +*\textbf{\{5\} line load perpendicular to the beam axis with rotation in space}*+
+ \dlineload{5}{rotation A}[rotation B]{initial point}{end point}[initial force value]
+ [end force value][force interval];
+
+ +*\textbf{\{6\} line load parallel the beam axis with rotation in space}*+
+ \dlineload{6}{rotation A}[rotation B]{initial point}{end point}[force interval]
+ [force length];
+\end{lstlisting}\vspace{-10mm}
+
+Internal forces (see \ref{sec:3dSchnittkraftverlauf})
+
+\begin{lstlisting}[emph={dinternalforces},backgroundcolor=\color{white}]
+ \dinternalforces{plane}[plane distance]{initial point}{end point}{initial value}{end value}
+ [parabola height][color][bend position];
+\end{lstlisting}\vspace{-10mm}
+
+Dimensioning (see \ref{sec:3dAbmessungen})
+
+\begin{lstlisting}[emph={ddimensioning},backgroundcolor=\color{white}]
+ \ddimensioning{plane}[plane distance]{initial point}{end point}{distance from point of origin}
+ [measure][help line length];
+\end{lstlisting}\vspace{-10mm}
+
+Labeling and notation (see \ref{sec:3dBezeichnungen})
+
+\begin{lstlisting}[emph={dnotation},backgroundcolor=\color{white}]
+ \dnotation{type}{insertion point}{obligatory}[optional][optional][optional][optional];
+
+ +*\textbf{\{1\} label}*+
+ \dnotation{1}{insertion point}{labelling}[orientation];
+
+ +*\textbf{\{2\} label with vertical mark}*+
+ \dnotation{2}{insertion point}{labelling}[orientation];
+
+ +*\textbf{\{3\} labeling with line between two points}*+
+ \dnotation{3}{initial point}{end point}[labelling][position][orientation];
+
+ +*\textbf{\{4\} label with mark orthogonal to a line}*+
+ \dnotation{4}{initial point}{end point}[labelling][position][orientation]
+ [text orientation];
+
+ +*\textbf{\{5\} label of a line}*+
+ \dnotation{5}{initial point}{end point}[labelling][position][orientation]
+ [text orientation];
+
+ +*\textbf{\{6\} label in a circle}*+
+ \dnotation{6}{insertion point}{labelling};
+\end{lstlisting}\vspace{-10mm}
+
+Additional symbols (see \ref{sec:3dZusaetzlicheSymbole})
+
+\begin{lstlisting}[emph={daddon},backgroundcolor=\color{white}]
+ \daddon{type}{plane}[plane distance]{obligatory}{obligatory}{obligatory}[optional];
+
+ +*\textbf{\{1\} symbol for parallel lines}*+
+ \daddon{1}{plane}[plane distance]{insertion point}{end point}{position};
+
+ +*\textbf{\{2\} Symbol for orthogonal lines}*+
+ \daddon{2}{plane}[plane distance]{insertion point}{initial point}{end point}
+ [orientation];
+
+ +*\textbf{\{3\} arc symbol}*+
+ \daddon{3}{plane}[plane distance]{insertion point}{initial point}{end point}
+ [orientation];
+\end{lstlisting}\vspace{-10mm}
+
+
+
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% contents: Introduction %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Introduction}
+\label{chap:einleitung}
+
+The following work is a manual for a library of symbols for structural analysis. This library is based on the PGF/\tikzsym environment. Accordingly, commands from these packages are used. Nevertheless, comprehensive knowledge of \tikzsym is not necessary in order to use this library. If the referenced commands in this manual are not enough for the interested reader, the \tikzsym manual from Till Tantau is suggested.
+
+% Die folgende Arbeit stellt ein Manual für die im Bachelor Projekt erstellte Bibliothek von baustatischen Symbolen dar. Diese Bibliothek wurde mit dem System PGF/\tikzsym erstellt und enthält dementsprechende Befehle aus den betreffenden Packages. Jedoch ist eine umfassende Kenntnis von \tikzsym nicht notwendig um die Bibliothek bedienen zu können. Falls die hier erwähnte Befehle nicht ausreichen, wird dem interessierten Leser das \tikzsym Manual von Till Tantau nahe gelegt. %\cite{script:pgf}
+
+
+\section{How to read this manual?}
+
+This manual describes the use of the library for symbols for structural analysis. To ensure an easy use of the elements and to keep the clarity, this manual follows the structure of the ``\tikzsym and PGF Manual'' and starts with the essential components (command list, elements) and subsequently deals with the ``whole schmear''. Finally, everything is repeated and summarized in form of a brief tutorial.
+
+If the required packages have not yet been installed, you should read before starting, the installation chapter.
+
+\subsection{A few explanations} All images in this manual were created with
+\tikzsym or the element library. The code used for this, is specified for each
+image.
+
+\hfill
+\begin{minipage}[t]{0.1\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw (-.2,.2) circle (2pt)
+ (.2,.2) circle (2pt);
+ \draw (0,0) circle (5mm)
+ (-.3,-.1) .. controls (0,-.3) .. (.3,-.1);
+ \end{tikzpicture}
+\end{minipage}
+%
+\begin{minipage}{0.7\linewidth}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \filldraw (-.2,.2) circle (2pt)
+ (.2,.2) circle (2pt);
+ \draw (0,0) circle (5mm)
+ (-.3,-.1) .. controls (0,-.3) .. (.3,-.1);
+ \end{tikzpicture}
+\end{lstlisting}
+\end{minipage}
+
+
+Special additions which are needed for a better understanding are shown in orange, but are not in the sample code available.
+
+\hfill
+\begin{minipage}{0.1\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt)
+ (1,1) circle (2pt)
+ (2,1) circle (2pt)
+ (2,0) circle (2pt);
+ \draw (0,0) .. controls (1,1) and (2,1) .. (2,0);
+ \end{tikzpicture}
+\end{minipage}
+\hfill
+\begin{minipage}{0.7\linewidth}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \draw (0,0) .. controls (1,1) and (2,1) .. (2,0);
+ \end{tikzpicture}
+\end{lstlisting}
+\end{minipage}
+
+
+\subsection{Additional help}
+
+Is the manual not enough, occur some ambiguities or some \tikzsym commands are unclear, please have a look in the ``\tikzsym and PGF Manual'' von Till Tantau.
+
+Should you have any further questions, please do not hesitate to contact me.
+
+\section{Installation}
+\label{sec:Installation}
+
+Actually, we can hardly speak of an installation since only the necessary package \lstinline|\usepackage{structuralanalysis}| must be installed.
+
+Is the package installed or the style file i stored in the main file folder, so the library can be imported by \lstinline|\usepackage{structuralanalysis}|, as a following example shows:
+
+\begin{lstlisting}
+%------------
+% header
+%
+\documentclass[
+ a4paper, % defines the paper size: a4paper (default), a5paper
+ BCOR20mm, % correction
+ twoside, % changes to a two-page-layout (alternatively: oneside)
+ halfparskip, % insert an empty line between two paragraphs (alternatively: parskip, ...)
+ openright, % chapter starts on the right page
+]{scrreprt}
+
+%------------
+% packages
+%
+\usepackage{structuralanalysis}
+\end{lstlisting}
+
+\section{Additional necessary packages}
+\label{sec:WeitereNotwendigePackages}
+
+To use all commands and options of \tikzsym, possibly some packages need to be reloaded. These missing files (or their names) appear in the error log, when you convert the file. However, for the package described in this manual, it is sufficient to use the library and the \tikzsym standard commands.
+
+
+\part{2D Library}
+\label{part:2dlib}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% contents: Elemente %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Elements}
+\label{sec:Elemente}
+
+%================================================
+% Allgemeines zu den Elementen
+%================================================
+
+\section{General information about the elements}
+\label{sec:AllgemeinesZuDenElementen}
+
+\subsection{Order}
+\label{sec:Reihenfolge}
+
+The library provides a number of standard elements available to the user. For example, bearings, joints, forces, etc. Since \tikzsym displayes those elements at the bottom which are entered first, it must be ensured that the element insert in the correct order. The following order is recommended:
+
+\begin{enumerate}
+ \item Points \lstinline|\point|
+ \item Beams and bars \lstinline|\beam|
+ \item Supports and bearings \lstinline|\support|
+ \item Joints \lstinline|\hinge|
+ \item Force and temperature \lstinline|\load| respectively \lstinline|\lineload| and \lstinline|\temperature|
+ \item Internal forces \lstinline|\internalforces|
+ \item Dimensioning \lstinline|\dimensioning|
+ \item Range of the influence line \lstinline|\influenceline|
+ \item Labeling \lstinline|\notation|
+ \item Additional symbols \lstinline|\addon|
+\end{enumerate}
+
+\subsection{Input}
+\label{sec:Eingabe}
+
+In addition to the correct order also the correct input for the elements matters.
+
+Basically, one can distinguish between the mandatory input $\{~\}$ and the optional input $[~]$. The first values must be entered compulsory. By contrast, nothing has to be entered for the optional input. Additional features (eg. rotation) can be activated when entering optional parameters.
+
+For illustration a small example of a single force
+
+\begin{lstlisting}
+ \load{type}{insertion point}[rotation][length or included angle][loaddistance];
+\end{lstlisting}
+
+
+When entering size values the base unit is always predefined in $[cm]$. Percentage values $\%$ are always specified as decimal values; for example, $100\% = 1.0 $ and $ 10 \% $ corresponds to $ 0.1 $.
+
+Another important note is, that every \tikzsym command has to be completed with an semicolon ``;''. If this semicolon is not set, the command can not be performed, this leads finally to an error message by the compilation.
+
+%================================================
+% Die Elemente
+%================================================
+
+\section{The elements}
+\label{sec:DieElemente}
+
+
+%------------------------------------------------
+% point
+%------------------------------------------------
+
+\subsection{Points}
+\label{sec:Punkte}
+\begingroup
+\lstinline[emph={point}]|\point{name}{x-coordiante}{y-coordiante};|
+
+
+\leftskip=7mm In order to be able, to place elements, points must be defined previously. For the labeling a short and precise name should be chosen. Because other elements will reference back to these points, in the later stages of the construction. Since \tikzsym uses Cartesian coordinates, this must be entered in accordance with the coordinate system. This means that is first entry corresponds to the x-coordinate and the second to the y-coordinate.
+
+\leftskip=7mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt) (2,1) circle (2pt) (4,.5) circle (2pt);
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.65\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% beam
+%------------------------------------------------
+
+\subsection{Beams and bars}
+\label{sec:BalkenUndStabe}
+
+\begingroup
+\lstinline[emph={beam}]|\beam{type}{initial point}{end point}[rounded initial point][rounded end point];|
+
+
+\leftskip=7mm The library includes several types of beams and bars. These are determined by the type. To construct such a beam or bar, two points must first be defined, the starting point and the end point. Furthermore, is an optional available to round the ends of the bars. $[0]$ or no entry means the corresponding end of the beam is not rounded, $[1]$ the end is rounded. This option is especially needed when multiple bars meet with different angles.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={beam}]|\beam{1}{initial point}{end point}[rounded initial point][rounded end point];|
+
+
+\leftskip=14mm Type $1$ is a bending beam with characteristic fiber\footnote{The characteristic fiber acts as a local coordinate system of the beam.}. Thereby, the characteristic fiber is always below the bar, when you follow the input convention mentioned above (start point - end point).
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={beam}]|\beam{2}{initial point}{end point}[rounded initial point][rounded end point];|
+
+\leftskip=14mm Type $2$ describes a truss rod. Accordingly there is no characteristic fiber. This means, that order of the input points (starting point - end point) does not matter.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{2}{a}{b}[0][1];
+ \beam{2}{b}{c}[1];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{2}{a}{b}[0][1];
+ \beam{2}{b}{c}[1];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={beam}]|\beam{3}{initial point}{end point};|
+
+\leftskip=14mm Here (type $3$) is an invisible bar or beam. Since this is plotted as a dashed lines, there is no option to round the ends.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{3}{a}{b};
+ \beam{3}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{3}{a}{b};
+ \beam{3}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={beam}]|\beam{4}{initial point}{end point}[rounded initial point][rounded end point];|
+
+
+\leftskip=14mm Type $4$ has the same look and the same properties as type $1$, but no characteristic fiber. This corresponds to a bending beam without characteristics fiber.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{4}{a}{b};
+ \beam{4}{b}{c};
+ \draw[orange,normalLine] (1.7,.7) rectangle (2.3,1.3);
+ \node[orange] (x) at (2,1.7) {no rounded end points};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{4}{a}{b};
+ \beam{4}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% support
+%------------------------------------------------
+
+\subsection{Supports and Bearings}
+\label{sec:Lager}
+
+\begingroup
+\lstinline[emph={support}]|\support{type}{insertion point}[rotation];|
+
+\leftskip=7mm In the library the most common types of bearings and springs are available. Similar to all remaining elements the type can be changed by the type variable. Similarly, an insertion point is required to initialize a bearing or a spring. As an optional parameter the rotation is available. Here the angle is counted from the x-axis.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={support}]|\support{1}{insertion point}[rotation];|
+
+\leftskip=14mm Type $1$ is a fixed bearing, which can absorb both horizontal and vertical forces, but no moments.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \draw[orange,dashed](0,0) -- (7mm,0mm)(0,0)--(30: 7mm);
+ \draw[orange,->] (.7,0) arc (0:30:7mm);
+ \node[orange] (x) at (1.1,.2) {$30°$};
+ \point{a}{0}{0};
+ \support{1}{a}[30];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \support{1}{a}[30];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={support}]|\support{2}{insertion point}[rotation];|
+
+\leftskip=14mm Type $2$ is a floating bearing, which can absorb forces only in one direction and no moments.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \support{2}{a};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \support{2}{a};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={support}]|\support{3}{insertion point}[rotation];|
+
+
+\leftskip=14mm Type $3$ is a fixed support which can absorb all forces and moments.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \support{3}{a};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \support{3}{a};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={support}]|\support{4}{insertion point}[rotation];|
+
+\leftskip=14mm Type $4$ is also a fixed support. However, these can only absorb forces in one direction and moments.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \support{4}{a}[90];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \support{4}{a}[90];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={support}]|\support{5}{insertion point}[rotation];|
+
+
+\leftskip=14mm Type $5$ describes a spring.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \support{5}{a};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \support{5}{a};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={support}]|\support{6}{insertion point}[rotation];|
+
+\leftskip=14mm Type $6$ describes a torsion spring.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \support{6}{a}[-45];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \support{6}{a}[-45];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% hinge
+%------------------------------------------------
+
+\subsection{Joints and Hinges}
+\label{sec:Gelenke}
+
+\begingroup
+\lstinline[emph={hinge}]|\hinge{type}{insertion point}[optional][optional][optional];|
+
+
+\leftskip=7mm The above described bearings might be combined with the following joints. The library contains different types of joints. Beside the insertion point, several other parameters are available. However, the optional parameter are mainly dependent on the type of joint.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={hinge}]|\hinge{1}{insertion point};|
+
+\leftskip=14mm The basic version of a joint is the type $1$. This is a full joint, which requires only an insertion point.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \hinge{1}{b};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1]; \beam{1}{b}{c}[1];
+ \hinge{1}{b};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={hinge}]|\hinge{2}{insertion point}[initial point][end point][orientation];|
+
+
+\leftskip=14mm In addition to the insertion point, for type $2$ - the half-hinge - the start and end point have to be specify, for the purpose of orientation. This information is marked as optional by $[~]$, but must be completed in order to generate such a half-hinge. The joint is inserted at the insertion point and stretches between the start and the end point. The input $[0]$ or no input in the orientation means that the half-hinge on the lower side, ie on the side of the characteristic fiber. A $[1]$ in contrast means the exact opposite.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \hinge{2}{b}[a][c][1];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1]; \beam{1}{b}{c}[1];
+ \hinge{2}{b}[a][c][1];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={hinge}]|\hinge{3}{insertion point}[rotation];|
+
+\leftskip=14mm Type $3$ describes a shear hinge. There is an additional option for rotating the hinge. The rotation works similar to the rotation of the supports.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{0};
+ \point{c}{4}{0};
+ \beam{1}{a}{b};
+ \beam{1}{b}{c};
+ \hinge{3}{b};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{0}; \point{c}{4}{0};
+ \beam{1}{a}{b}; \beam{1}{b}{c};
+ \hinge{3}{b};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={hinge}]|\hinge{4}{insertion point}[rotation];|
+
+\leftskip=14mm For Type $4$, the normal force hinge, applies the same as for the shear hinge.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{0};
+ \point{c}{4}{0};
+ \beam{1}{a}{b};
+ \beam{1}{b}{c};
+ \hinge{4}{b};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{0}; \point{c}{4}{0};
+ \beam{1}{a}{b}; \beam{1}{b}{c};
+ \hinge{4}{b};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={hinge}]|\hinge{5}{insertion point}[initial point][end point];|
+
+
+\leftskip=14mm To achieve a stiffening of a corner, the Type $5$ is applied. In addition to the insertion point, type $5$ requires the input of the start and the end point, similar to the half hinge. This information is marked as optional, by $[~]$, but must be completed in order to generate such a stiff corner.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \hinge{5}{b}[a][c];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1]; \beam{1}{b}{c}[1];
+ \hinge{5}{b}[a][c];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% load
+%------------------------------------------------
+
+\subsection{Single load}
+\label{sec:Einzellast}
+
+\begingroup
+\lstinline[emph={load}]|\load{type}{insertion point}[rotation][length or included angle][loaddistance];|
+
+\leftskip=7mm The single load command includes both individual forces and moments. To place such an element it is necessary to define an insertion point. The moments can be plotted in a clockwise or counter clockwise directional. As an optional parameter the rotation is available.
+Here the angle is counted from the x-axis.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={load}]|\load{1}{insertion point}[rotation][length][loaddistance];|
+
+\leftskip=14mm The first type describes a single force. In addition to the optional parameter of rotation, there is a parameter to change the length of the force, as well as an optional parameter which regulates the distance to the beam axis. Per default the distance to the beam axis is the radius of a joint.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \hinge{1}{b};
+ \load{1}{b}[29.5][.5];
+ \load{1}{a}[90];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1]; \beam{1}{b}{c}[1];
+ \hinge{1}{b};
+ \load{1}{b}[29.5][.5];
+ \load{1}{a};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={load}]|\load{2}{insertion point}[rotation][included angle][loaddistance];|
+
+\leftskip=14mm Type $2$, describes a moment that is oriented clockwise. In addition to the optional parameter rotation there is further parameter to specify the included angle and the radius of the moment.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \load{2}{b}[0][180];
+ \load{2}{a}[75];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1]; \beam{1}{b}{c}[1];
+ \load{2}{b}[0][180];
+ \load{2}{a}[75];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+
+\hspace{7mm}\lstinline[emph={load}]|\load{3}{insertion point}[rotation][included angle][loaddistance];|
+
+
+\leftskip=14mm Type $3$ describes a moment that is oriented counterclockwise. Otherwise, the same conditions apply as for type $2$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \load{3}{b}[0][180];
+ \load{3}{a}[75];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1]; \beam{1}{b}{c}[1];
+ \load{3}{b}[0][180];
+ \load{3}{a}[75];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% lineload
+%------------------------------------------------
+
+\subsection{Line loads}
+\label{sec:Linienlast}
+
+\begingroup
+\lstinline[emph={lineload}]|\lineload{type}{initial point}{end point}[optional][optional][optional][optional];|
+
+\leftskip=7mm In the library four types of line loads are available. These are determined by their type. Two points (start and end point) must be defined in advance, similar as with the beam and bar elements. The optional properties are mainly dependent on the type of the line load.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={lineload}]|\lineload{1}{initial point}{end point}[initial force value][end force value][force interval];|
+
+\leftskip=14mm Type $1$ is a linear load that is normal to the beam axis. Optionally, the sizes of the initial force and the final force can be adjusted. Is one of the parameters set to $[0]$, the result is a triangular load. The last parameter controls the distance between the individual forces.
+
+\leftskip=14mm\begin{minipage}[c]{0.31\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{1}{a}{b}[0];
+ \lineload{1}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.6\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{1}{a}{b}[0];
+ \lineload{1}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={lineload}]|\lineload{2}{initial point}{end point}[initial force value][end force value][force interval];|
+
+\leftskip=14mm For type $2$, the forces are parallel to the y-axis. The optional parameters are the same as for type $1$.
+
+\leftskip=14mm\begin{minipage}[c]{0.31\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{2}{a}{b}[0];
+ \lineload{2}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.6\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{2}{a}{b}[0];
+ \lineload{2}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={lineload}]|\lineload{3}{initial point}{end point}[initial force value][end force value][force interval];|
+
+\leftskip=14mm Type $3$ is a projection of the forces on the beam. In addition to the start and end force size, the vertical distance to the starting point can also be specified optionally.
+
+\leftskip=14mm\begin{minipage}[c]{0.31\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{3}{a}{b}[0][1][1];
+ \lineload{3}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.6\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{3}{a}{b}[0][1][1];
+ \lineload{3}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={lineload}]|\lineload{4}{initial point}{end point}[force interval][force length];|
+
+\leftskip=14mm A line load along the bar axis is described by type $4$. In addition to the start and end points, the number of forces and its length can be changed optionally. This line load is always located above the bar. To change the direction, start and end points must be exchanged.
+
+\leftskip=14mm\begin{minipage}[c]{0.31\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{4}{a}{b};
+ \lineload{4}{c}{b}[.3][.25];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.6\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \lineload{4}{a}{b};
+ \lineload{4}{c}{b}[.3][.25];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% temperature
+%------------------------------------------------
+
+\subsection{Temperatur}
+\label{sec:Temperatur}
+
+\begingroup
+\begin{lstlisting}[emph={temperature},backgroundcolor=\color{white}]
+ \temperature{initial point}{end point}{temperature_below}{temperature_above}
+ [temperature_position][temperature_value_below][temperature_value_above]
+ [text_orientation_below][text_orientation_above];
+\end{lstlisting}
+\vspace{-5mm}
+\leftskip=7mm The load temperature is described in its own command, because several optional settings can be made (see above). Same as with the line loads, the starting point and the end point of the bar has to be entered, where the temperature load act on. This is followed by the obligatory declaration of the temperature input variables, starting with the temperature at the bottom side of the bar. Optionally, the position of the temperature can be changed. By default, the temperature will be positioned at the center of the beam. Furthermore, there is also the possibility of labeling the temperature. The entries of the text are equal to a \LaTeX input. As a further optional input, the alignment of the text can be modified. Here, \tikzsym commands must be used, these are in section \ref{sec:OrientierungVonTextelementen} described.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{4}{0};
+ \beam{1}{a}{b};
+ \temperature{a}{b}{-.5}{.5}[.3][$T_i$][$T_a$];
+ \temperature{a}{b}{.2}{.7}[.6][$10°C$][$30°C$];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{4}{0};
+ \beam{1}{a}{b};
+ \temperature{a}{b}{-.5}{.5}[.3][$T_i$][$T_a$];
+ \temperature{a}{b}{.2}{.7}[.6][$10°C$][$30°C$];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% internalforces
+%------------------------------------------------
+
+\subsection{Internal forces}
+\label{sec:Schnittkraftverlauf}
+
+\begingroup
+\lstinline[emph={internalforces}]|\internalforces{initial point}{end point}{initial value}{end value}[parabola height][color][bend position];|
+
+
+\leftskip=7mm Same as with the temperature, there are no different types of internal forces. With this function, linear and quadratic curves internal forces can be displayed. The entries are made as repeatedly shown above. First, the start and end points must be determined. Thereafter, the start and end values must be entered. Optional the parabola down can be enter. If there is no entry or the entry is equal to $[0]$, than it is a linear function. Also optionally, the color can be determined. Here the most common colors are available and addressed with the color name. The last optional parameter is used to edit the parabola down and if necessary to adapt the plot to another function.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \internalforces{a}{b}{.5}{-1}[-.4][blue];
+ \internalforces{b}{c}{-1}{0};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \internalforces{a}{b}{.5}{-1}[-.4][blue];
+ \internalforces{b}{c}{-1}{0};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% dimensioning
+%------------------------------------------------
+
+\subsection{Dimensioning}
+\label{sec:Abmessungen}
+
+\begingroup
+\lstinline[emph={dimensioning}]|\dimensioning{type}{initial point}{end point}{distance from point of origin}[measure];|
+
+\leftskip=7mm Basically, three kinds of dimensions can be distinguished in the program, the horizontal and vertical dimension and a dimension of a shift. As with the line loads, also here the the start and end point is required. However, the distance between the the dimension line and the the corresponding points is not entered directly, but the dimension line refers to the coordinate origin. Optional a label can be inserted at any dimension line.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dimensioning}]|\dimensioning{1}{initial point}{end point}{distance from point of origin}[measure];|
+
+\leftskip=14mm The first type describes the horizontal dimension.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \dimensioning{1}{a}{b}{-.5}[$2~m$];
+ \dimensioning{1}{b}{c}{-.5}[$2~m$];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{.5};
+ \beam{1}{a}{b}[0][1]; \beam{1}{b}{c}[1];
+ \dimensioning{1}{a}{b}{-.5}[$2~m$];
+ \dimensioning{1}{b}{c}{-.5}[$2~m$];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dimensioning}]|\dimensioning{2}{initial point}{end point}{distance from point of origin}[measure];|
+
+\leftskip=14mm Type $2$ describe the vertical dimension.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \beam{1}{a}{b};
+ \dimensioning{2}{a}{b}{-.5}[$1~m$];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \beam{1}{a}{b};
+ \dimensioning{2}{a}{b}{-.5}[$1~m$];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dimensioning}]|\dimensioning{3}{initial point}{end point}{distance from inital point}[measure];|
+
+
+\leftskip=14mm With type $3$, a shift is marked. Unlike type $1$ and $2$ the distance is not determined from the origin, but from the initial point.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{3}{0};
+ \begin{scope}[dashed]
+ \support{1}{a};
+ \hinge{1}{a};
+ \end{scope}
+ \support{1}{b};
+ \hinge{1}{b};
+ \dimensioning{3}{a}{b}{.5}[$\Delta s$];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1};
+ \begin{scope}[dashed]
+ \support{1}{a};
+ \hinge{1}{a};
+ \end{scope}
+ \support{1}{b}; \hinge{1}{b};
+ \dimensioning{3}{a}{b}{.5}[$\Delta s$];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% influenceline
+%------------------------------------------------
+
+\subsection{Range of the influence line}
+\label{sec:BereichDerEinflusslinie}
+
+\begingroup
+\lstinline[emph={influenceline}]|\influenceline{initial point}{end point}{distance from initial point}[arrow position];|
+
+\leftskip=7mm A special case of dimension is the range of the influence line. In addition to the start or end point of the vertical distance from the starting point must be specified. Optionally the position of the arrow symbol can be moved.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \influenceline{a}{c}{1.5}[.4];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \influenceline{a}{c}{1.5}[.4];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% notation
+%------------------------------------------------
+
+\subsection{Labeling and notation}
+\label{sec:Bezeichnungen}
+
+\begingroup
+\lstinline[emph={notation}]|\notation{type}{insertion point}{}[][][];|
+
+
+\leftskip=7mm With the element \lstinline|\notation| various kinds of labels can be insert. Because different input parameters are require, these are explained in detail for the individual types. Furthermore, in all types the optional parameters \lstinline|orientation| is used. Here, the \tikzsym commands must be used, these are described in Section \ref{sec:OrientierungVonTextelementen}.
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={notation}]|\notation{1}{insertion point}{labelling}[orientation];|
+
+\leftskip=14mm Type $1$ is a normal labeling. Only the insertion point and the corresponding text must be specified. The optional parameter orientation can be changed. The default setting is \lstinline|above right|, which means top right.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt);
+ \point{a}{0}{0};
+ \notation{1}{a}{type 1};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \notation{1}{a}{type 1};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={notation}]|\notation{2}{insertion point}{labelling}[orientation];|
+
+\leftskip=14mm Type $2$ has besides the label additional a line to mark the appropriate place. This line is always parallel to the y-axis.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt);
+ \point{a}{0}{0};
+ \notation{2}{a}{type 2}[below right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \notation{2}{a}{type 2}[below right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={notation}]|\notation{3}{initial point}{end point}[labelling][position][orientation];|
+
+
+\leftskip=14mm Type $3$ is an extension of type $2$. As with the other line elements the start point and end point must be specified. The mark is located in the middle of the two points. An optional parameter is the position of the mark which can be changed.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \notation{3}{a}{b}[$i$];
+ \notation{3}{b}{c}[type 3][.3][above right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \notation{3}{a}{b}[$i$];
+ \notation{3}{b}{c}[type 3][.3][above right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={notation}]|\notation{4}{initial point}{end point}[labelling][position][orientation][text orientation];|
+
+\leftskip=14mm Type $4$ is placed on a line, like type $3$. Instead of a mark, the text is enclosed in a square. The other parameters are the same as in type $3$. In addition, with the last parameter, the text alignment can be changed. Is the parameter equal to $[1]$, the text is placed parallel to the x-axis.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \notation{4}{a}{b}[$3$];
+ \notation{4}{b}{c}[$4$][.7];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \notation{4}{a}{b}[$3$];
+ \notation{4}{b}{c}[$4$][.7];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={notation}]|\notation{5}{initial point}{end point}[labelling][position][orientation][text orientation];|
+
+\leftskip=14mm Type $5$ corresponds to the types $3$ and $4$, but here only the text is displayed and no additional symbols. Thus, the same requirements as in the previous type can be applied.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{1};
+ \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \notation{5}{a}{b}[$3$][.5][above][1];
+ \notation{5}{b}{c}[$4$][.7];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1}; \point{c}{4}{1};
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1];
+ \notation{5}{a}{b}[$3$][.5][above][1];
+ \notation{5}{b}{c}[$4$][.7];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={notation}]|\notation{6}{insertion point}{labelling};|
+
+\leftskip=14mm The last type $6$, is similar to the type $1$. Only in this case, the text is framed by a circle. Furthermore, no orientation of the text can be made.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \notation{6}{a}{+};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \notation{6}{a}{+};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% addon
+%------------------------------------------------
+
+\subsection{Additional symbols}
+\label{sec:ZusatzlicheSymbole}
+
+\begingroup
+\lstinline[emph={addon}]|\addon{type}{insertion point}{}{}[];|
+
+
+\leftskip=7mm Among these elements fall all symbols that you can not assign to the above introduced elements. Since these types of items require different input parameters, these are explained in detail for each individual types.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={addon}]|\addon{1}{insertion point}{end point}{position};|
+
+\leftskip=14mm Type $1$ is a symbol for parallel bars. First the start and end points of the bar must be specified and then the positioning of the symbol must be set.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{4}{0};
+ \point{c}{0}{1};
+ \point{d}{4}{1};
+ \beam{2}{a}{b};
+ \beam{2}{c}{d};
+ \addon{1}{a}{b}{.3};
+ \addon{1}{c}{d}{.6};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{4}{0};
+ \point{c}{0}{1}; \point{d}{4}{1};
+ \beam{2}{a}{b}; \beam{2}{c}{d};
+ \addon{1}{a}{b}{.3};
+ \addon{1}{c}{d}{.6};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={addon}]|\addon{2}{insertion point}{initial point}{end point}[orientation];|
+
+\leftskip=14mm Type $2$ represents the symbol of two originally bars. Here, also the insertion point must be specified in addition to the start and end points. The orientation of the symbol can be changed, by setting an optional parameter to $[-1]$
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{2}{0};
+ \point{c}{4}{0};
+ \point{d}{2}{1};
+ \beam{2}{a}{c};
+ \beam{2}{b}{d};
+ \addon{2}{b}{a}{d}[-1];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{0}; \point{c}{4}{0};
+ \point{d}{2}{1};
+ \beam{2}{a}{c};
+ \beam{2}{b}{d};
+ \addon{2}{b}{a}{d}[-1];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={addon}]|\addon{3}{insertion point}{initial point}{end point}[orientation];|
+
+\leftskip=14mm Type $3$ is the symbol for an arbitrary angle. The same approaches as for Type $2$ can be applied. With the optional parameter it can be distinguished between an acute angle or an obtuse angle. Depending on the case the parameter has to chanced to $[-1]$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{3}{0};
+ \point{c}{2.5}{1};
+ \beam{2}{a}{b};
+ \beam{2}{b}{c};
+ \addon{3}{b}{a}{c}[-1];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{3}{0}; \point{c}{2.5}{1};
+ \beam{2}{a}{b};
+ \beam{2}{b}{c};
+ \addon{3}{b}{a}{c}[-1];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%================================================
+% Nuetzliche TikZ Befehle
+%================================================
+
+\section{Useful \tikzsym commands}
+\label{sec:NützlicheTikZBefehle}
+
+%------------------------------------------------
+% Orientierung von Textelementen
+%------------------------------------------------
+
+\subsection{Orientation of text elements}
+\label{sec:OrientierungVonTextelementen}
+
+\tikzsym provides some useful commands for labels, especially in the context of ``nodes''. These commands can be used in the same way for some labeling elements in this library.
+
+\begingroup
+\lstinline[emph={tikz,above}]|/tikz/above=<offset>|
+
+\leftskip=7mm With \lstinline|above| the text is placed above a corresponding point. The offset distance can be specified optional. If no \lstinline|<offset>| is specified, the system default values are used.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt) (2,0) circle (2pt);
+ \point{a}{0}{0};
+ \point{b}{2}{0};
+ \notation{1}{a}{above}[above];
+ \notation{1}{b}{above}[above=2mm];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{0};
+ \notation{1}{a}{above}[above];
+ \notation{1}{b}{above}[above=2mm];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,below}]|/tikz/below=<offset>|
+
+
+\leftskip=7mm \lstinline|below| positions the text below a selected point, otherwise the same properties as \lstinline|above| can be used.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,left}]|/tikz/left=<offset>|
+
+\leftskip=7mm \lstinline|left| positions the text left to a selected point, otherwise the same properties as \lstinline|above| can be used.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,right}]|/tikz/right=<offset>|
+
+\leftskip=7mm \lstinline|right| positions the text right to a selected point, otherwise the same properties as \lstinline|above| can be used.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,above,left}]|/tikz/above left=<offset>|
+
+\leftskip=7mm A combination of \lstinline|above| and \lstinline|left| places the text to the top left over a corresponding point. Similarly, the offset distance can be specified as an option again. If no \lstinline |<offset>| specified, the system defaults are used.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt);
+ \point{a}{0}{0};
+ \notation{1}{a}{above left}[above left];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \notation{1}{a}{above left}[above left];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,above,right}]|/tikz/above right=<offset>|
+
+
+\leftskip=7mm The same as \lstinline|above left| just in the right direction.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt);
+ \point{a}{0}{0};
+ \notation{1}{a}{above right}[above right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0};
+ \notation{1}{a}{above right}[above right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,below,left}]|/tikz/below left=<offset>|
+
+\leftskip=7mm There is an arrangement at the bottom left.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,below,right}]|/tikz/below right=<offset>|
+
+\leftskip=7mm There is an arrangement at the bottom right.
+
+\endgroup
+
+%------------------------------------------------
+% Gruppieren
+%------------------------------------------------
+
+\subsection{Grouping}
+\label{sec:Gruppierung}
+
+To group objects and assign features, there is the environment \lstinline|scope|.
+
+\begin{lstlisting}[emph={scope},backgroundcolor=\color{white}]
+\begin{scope}[<options>]
+ <enviroment contents>
+\end{scope}
+\end{lstlisting}
+\vspace{-7mm}
+\begingroup
+\leftskip=7mm All \lstinline|<options>| are locally limited to those elements that are within the scope.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{3}{0};
+ \begin{scope}[dashed,color=red]
+ \support{1}{a};
+ \hinge{1}{a};
+ \end{scope}
+ \support{1}{b};
+ \hinge{1}{b};
+ \dimensioning{3}{a}{b}{.5}[$\Delta s$];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{2}{1};
+ \begin{scope}[dashed,color=red]
+ \support{1}{a};
+ \hinge{1}{a};
+ \end{scope}
+ \support{1}{b}; \hinge{1}{b};
+ \dimensioning{3}{a}{b}{.5}[$\Delta s$];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% scaling
+%------------------------------------------------
+
+\subsection{Scaling}
+\label{sec:scaling}
+
+This command is not provided in the \tikzsym package, but it was written for the library to accordingly scale the lengths.
+
+\begingroup
+\lstinline[emph={tikz,structuralanalysis,scaling}]|/tikz/structuralanalysis/scaling{scalingParameter};|
+
+\leftskip=7mm This command only scales the length of the system, i.e. scaling the distances between individual points. This enables the user to create larger system, but still be printable on paper without reducing to symbols size.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \scaling{.5};
+ \point{a}{0}{0};
+ \point{b}{4}{0};
+ \beam{2}{a}{b};
+ \support{3}{a}[-90];
+ \support{3}{b}[90];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \scaling{.5};
+ \point{a}{0}{0}; \point{b}{4}{0};
+ \beam{2}{a}{b};
+ \support{3}{a}[-90]; \support{3}{b}[90];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \point{a}{0}{0};
+ \point{b}{4}{0};
+ \beam{2}{a}{b};
+ \support{3}{a}[-90];
+ \support{3}{b}[90];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \point{a}{0}{0}; \point{b}{4}{0};
+ \beam{2}{a}{b};
+ \support{3}{a}[-90]; \support{3}{b}[90];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% Hilfslinien
+%------------------------------------------------
+
+\subsection{Guides}
+\label{sec:Hilfslinien}
+
+\begingroup
+\lstinline[emph={help, lines}]|\draw[help lines,<options>] (<coordinates>) grid (<coordinates>);|
+
+\leftskip=7mm To simplify the construction, it is often useful to insert appropriate guides. The distances between the grid lines can be changed with the command \lstinline|step=<offset>|.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \draw[help lines,step=.5] (-1,-1) grid (1,1);
+ \point{a}{0}{0};
+ \support{1}{a};
+ \hinge{1}{a};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \draw[help lines,step=.5] (-1,-1) grid (1,1);
+ \point{a}{0}{0};
+ \support{1}{a};
+ \hinge{1}{a};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Tutorial %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Tutorial}
+\label{sec:Tutorial}
+
+In the following tutorial, the program code is only shown for the currently treated aspects, because of the limited space. However, at the end the full code is provided.
+
+\section{Roof construction}
+\label{sec:Dachkonsturktion}
+
+In this tutorial, the basic principles of designing with \tikzsym and ``structuralanalysis'' are treated. Step by Step, a roof structure should be created. The final result is shown below.
+
+\begin{tikzpicture}[framed]
+ \scaling{.65};
+
+ \point{a}{0}{1}; %2
+ \point{b}{3}{1}; %3
+ \point{c}{11}{3}; %4
+ \point{d}{19}{1}; %5
+ \point{e}{22}{1}; %6
+ \point{f}{3}{0}; %1
+ \point{g}{11}{-2}; %8
+ \point{h}{19}{0}; %7
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+
+ \notation{4}{f}{g}[$S$];
+
+\end{tikzpicture}
+
+\subsection{Start of the consturction}
+\label{sec:StartDerKonstruktion}
+
+In order to create the desired roof structure, a file has to be created first. In this example, it is a \LaTeX ~file. However, the library can also be used with \TeX ~and ~Con\TeX files.
+
+\begin{lstlisting}
+\documentclass{scrreprt} % say
+
+\usepackage{structuralanalysis}
+
+\begin{document}
+ \begin{tikzpicture}
+ % here we construct our structure
+ \end{tikzpicture}
+\end{document}
+\end{lstlisting}
+
+\subsection{First steps}
+\label{sec:ErsteSchritte}
+
+First, we have to specify corresponding points with the command \lstinline|\point|. On this basis, the remaining library elements are placed. Since the points are not shown in the graph, it is recommended to create a helping grid, to predict the distances and sizes. The basic size of a grid element is $1~cm $ by $1 ~cm $.
+
+\begin{minipage}[c]{0.65\linewidth}
+ \begin{tikzpicture}[framed]
+ \draw[help lines] (0,0) grid (9,1);
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.35\linewidth}\begin{lstlisting}
+\begin{tikzpicture}
+ \draw[help lines]
+ (0,0) grid (9,1);
+\end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+Here, it is obvious that the roof structure with a width of $ 22 ~cm $ does not fit on this page. In order not to change all the dimensions recalculating all distances, the command \lstinline|scaling| can be used. Hereby, the distances are scaled depending on the desired scaling factor. However, the symbols and the entries remain unchanged.
+
+Note, since the help grid is a function of \tikzsym, the scaling command can not be used for the guides. If we recalculate the size of the grid we get following situation:
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.35\linewidth}\begin{lstlisting}
+\begin{tikzpicture}
+ \scaling{.45};
+ \draw[help lines,step=.45]
+ (0,-.9) grid (9.9,1.35);
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+Now the points of the structure can be easily entered. Since the points, as mentioned above, are not visible, they are identified by illustration as orange dots.
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \filldraw [orange] (a) circle (2pt);
+ \filldraw [orange] (b) circle (2pt);
+ \filldraw [orange] (c) circle (2pt);
+ \filldraw [orange] (d) circle (2pt);
+ \filldraw [orange] (e) circle (2pt);
+ \filldraw [orange] (f) circle (2pt);
+ \filldraw [orange] (g) circle (2pt);
+ \filldraw [orange] (h) circle (2pt);
+
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.35\linewidth}\begin{lstlisting}
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\subsection{Roof structure}
+\label{sec:Dachdecken}
+
+After the foundation stone was laid by the points, we can start to connect the points with beams and bars. In the library bars are with or without characteristics fiber available. With the command \lstinline|\beam| they can be brought to `` paper''.
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \filldraw [orange] (f) circle (4pt);
+ \filldraw [orange] (g) circle (4pt);
+ \filldraw [orange] (h) circle (4pt);
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.35\linewidth}\begin{lstlisting}
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+If the edges are not rounded, as it has been happened above, there is no smooth transition of the beams (see orange dots). However, at these points it does not matter, because in a later phase joints are placed above.
+
+\subsection{Bearings and joints}
+\label{sec:LagerUndGelenke}
+
+In order to provide more flexibility, and to keep the number of macros as low as possible, their are own commands available for the bearings and the joints. Bearings are built with the command \lstinline|\support|. However, the corresponding joint must independently created with the command \lstinline|\hinge|. This allows to combine different bearings with different joints. The important thing is always that the bearing has to be created first and only then the joints should be implemented. This is necessary, because \tikzsym puts the recently drawn figures on the top.
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.35\linewidth}\begin{lstlisting}
+ \support{1}{f};
+ \support{2}{h};
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+After the bearings are created, we can start with drawing the joints. As with most elements the library provides a set of different types of joints. For instance, the point $c$ is described by a half-joint.
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.35\linewidth}\begin{lstlisting}
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\subsection{Snow on the roof}
+\label{sec:SchneeAmDach}
+
+With the insertion of the joints, the construction is completed and can now be loaded. Besides single loads \lstinline|\load| are line loads \lstinline|\lineload| and temperature loads \lstinline|\temperature| available.
+
+\begin{minipage}[c]{0.65\linewidth}
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+\end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.35\linewidth}\begin{lstlisting}
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\subsection{Range of the influence line and roof dimensions}
+\label{sec:Dachabmessungen}
+
+\begin{minipage}[c]{0.55\linewidth}
+
+Actually, the roof is already finished and ready for use. However, for the purpose of an overview, we can include the corresponding measures with the command \lstinline|\dimensioning|. Similarly, the range of influence line can be defined.
+
+\end{minipage}
+\begin{minipage}[c]{0.45\linewidth}\begin{lstlisting}
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+\end{tikzpicture}
+
+\subsection{The finished roof}
+\label{sec:DasFertigeDach}
+
+\begin{minipage}[c]{0.55\linewidth}
+Now the only missing parts are the names of nodes and bars, then roof construction is completed. To achieve the best possible appearance of the labels, can the labels (\lstinline|\notation|) the position can be shifted with an optional parameter.
+
+\end{minipage}
+\begin{minipage}{0.45\linewidth}\begin{lstlisting}
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+ \notation{4}{f}{g}[$S$];
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\begin{tikzpicture}[framed]
+ \scaling{.45};
+ \draw[help lines,step=.45] (0,-.9) grid (9.9,1.35);
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+ \notation{4}{f}{g}[$S$];
+
+\end{tikzpicture}
+
+
+Now the guides can be deleted and the scaling factor can be chosen so that the entire page is filled.
+
+\subsection{Roof construction with source code}
+\label{sec:DachkonstruktionSamtQuellcode}
+
+\begin{tikzpicture}[framed]
+ \scaling{.65};
+
+ \point{a}{0}{1}; %2
+ \point{b}{3}{1}; %3
+ \point{c}{11}{3}; %4
+ \point{d}{19}{1}; %5
+ \point{e}{22}{1}; %6
+ \point{f}{3}{0}; %1
+ \point{g}{11}{-2}; %8
+ \point{h}{19}{0}; %7
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+
+ \notation{4}{f}{g}[$S$];
+
+\end{tikzpicture}
+
+\begin{minipage}[t]{0.45\linewidth}\begin{lstlisting}
+\begin{tikzpicture}
+ \scaling{.65};
+
+ \point{a}{0}{1};
+ \point{b}{3}{1};
+ \point{c}{11}{3};
+ \point{d}{19}{1};
+ \point{e}{22}{1};
+ \point{f}{3}{0};
+ \point{g}{11}{-2};
+ \point{h}{19}{0};
+
+ \beam{1}{a}{b}[0][1];
+ \beam{1}{b}{c}[1][1];
+ \beam{1}{c}{d}[1][1];
+ \beam{1}{d}{e}[1][0];
+ \beam{1}{f}{b};
+ \beam{1}{d}{h};
+ \beam{2}{f}{g};
+ \beam{2}{g}{h};
+ \beam{2}{g}{c};
+
+ \support{1}{f};
+ \support{2}{h};
+
+ \hinge{1}{f};
+ \hinge{1}{h};
+
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\linewidth}\begin{lstlisting}
+ \hinge{1}{g};
+ \hinge{2}{c}[b][d];
+
+ \lineload{2}{a}{b}[1][1][.5];
+ \lineload{2}{b}{c};
+
+ \dimensioning{1}{a}{b}{-2.5}[$3,0$];
+ \dimensioning{1}{b}{c}{-2.5}[$8,0$];
+ \dimensioning{1}{c}{d}{-2.5}[$8,0$];
+ \dimensioning{1}{d}{e}{-2.5}[$3,0$];
+ \dimensioning{2}{f}{a}{-1}[$1,0$];
+ \dimensioning{2}{g}{f}{-1}[$2,0$];
+ \dimensioning{2}{a}{c}{-1}[$2,0$];
+
+ \influenceline{a}{e}{3}[.3];
+
+ \notation{1}{a}{$1$}[left];
+ \notation{1}{b}{$2$}[below right=2mm];
+ \notation{1}{c}{$3$};
+ \notation{1}{d}{$4$}[above];
+ \notation{1}{e}{$5$}[above];
+ \notation{1}{f}{$6$}[left=2mm];
+ \notation{1}{g}{$7$}[below=2mm];
+ \notation{1}{h}{$8$}[right=2mm];
+ \notation{4}{f}{g}[$S$];
+
+\end{tikzpicture}
+
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+
+\part{3D Library}
+\label{part:3dlib}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% contents: Elemente %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Elements}
+\label{sec:3dElemente}
+
+%================================================
+% Allgemeines zu den Elementen
+%================================================
+
+\section{General information about the elements}
+\label{sec:3dAllgemeinesZuDenElementen}
+\subsection{Order}
+\label{sec:3dReihenfolge}
+
+The library provides a number of standard elements available to the user. For example, bearings, joints, forces, etc. Since \tikzsym displayes those elements at the bottom which are entered first, it must be ensured that the element insert in the correct order. The following order is recommended:
+
+\begin{enumerate}
+ \item Points \lstinline|\dpoint|
+ \item Beams and bars \lstinline|\dbeam|
+ \item Axis \lstinline|\daxis|
+ \item Supports and bearings \lstinline|\dsupport|
+ \item Joints \lstinline|\dhinge|
+ \item Force and moments \lstinline|\dload| respectively \lstinline|\dlineload|
+ \item Internal forces \lstinline|\dinternalforces|
+ \item Dimensioning \lstinline|\ddimensioning|
+ \item Labeling \lstinline|\dnotation|
+ \item Additional symbols \lstinline|\daddon|
+\end{enumerate}
+
+\subsection{Input}
+\label{sec:3dEingabe}
+
+In addition to the correct order also the correct input for the elements matters.
+
+Basically, one can distinguish between the mandatory input $\{~\}$ and the optional input $[~]$. The first values must be entered compulsory. By contrast, nothing has to be entered for the optional input. Additional features (eg. rotation) can be activated when entering optional parameters.
+
+For illustration a small example of a single force
+
+\begin{lstlisting}
+ \dload{type}{insertion point}[rotation A][rotation B][load length][load distance];
+\end{lstlisting}
+
+When entering size values the base unit is always predefined in $[cm]$. Percentage values $\%$ are always specified as decimal values; for example, $100\% = 1.0 $ and $ 10 \% $ corresponds to $ 0.1 $.
+
+Another important note is, that every \tikzsym command has to be completed with an semicolon ``;''. If this semicolon is not set, the command can not be performed, this leads finally to an error message by the compilation.
+
+\subsection{Planes and spatial elements}
+\label{sec:3dEbenenUndRaumlicheElemente}
+
+In the 3D case, a specification is made between elements on a plane and spatial elements. The first kind of elements are parallel to a coordinate plan, i.e. parallel to $xy$-plane, $xz$-plane or $yz$-plane. Beside those three coordinate planes, \tikzsym also recognizes the planes $yx$, $zx$ and $zy$. Hereby, the difference is that the orientation of the object will change.
+
+All elements are called spatial elements, if there are no parallels to the planes mentioned above. The orientation of those elements is based on spherical coordinates or with corresponding rotations. Using spherical coordinates, the first entry always describes the angle form the zenith to the equator, the second one the angle around the equator.
+
+\subsection{TikZ Environment}
+\label{sec:3dTikZUmgebung}
+
+To ensure a adequate view for the construction of the structure, a initial coordinate system has to be loaded in the \tikzsym environment. This can be done with the option \lstinline|[coords]| an looks like this:
+
+\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+
+ \end{tikzpicture
+\end{lstlisting}\vspace{-7mm}
+%
+With the command \lstinline|\setcoords| (see \ref{sec:3dsetcoords}), the orientation of the coordinates can be modified.
+
+%================================================
+% Die Elemente
+%================================================
+
+\section{The 3d elements}
+\label{sec:Die3DElemente}
+
+
+%------------------------------------------------
+% dpoint
+%------------------------------------------------
+
+\subsection{Points}
+\label{sec:3dPunkte}
+\begingroup
+\lstinline[emph={dpoint}]|\dpoint{name}{x-coordiante}{y-coordiante}{z-coordinate};|
+
+\leftskip=7mm In order to be able, to place elements, points must be defined previously. For the labeling a short and precise name should be chosen. Because other elements will reference back to these points, in the later stages of the construction. Since \tikzsym uses Cartesian coordinates, this must be entered in accordance with the coordinate system. This means that is first entry corresponds to the x-coordinate and the second to the y-coordinate and the third to the z-coordinate. Because, the points are not shown in the drawing, with the command \lstinline|\showpoint| (see \ref{sec:3dshowpoint}) there is the possibility to show the labels of the points.
+
+\leftskip=7mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \filldraw [orange] (0,0,0) circle (2pt) (0,3,-1) circle (2pt) (1.5,3,-1) circle (2pt);
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \showpoint;
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.65\linewidth}\begin{lstlisting}
+ \showpoint
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\newpage
+
+%------------------------------------------------
+% dbeam
+%------------------------------------------------
+
+\subsection{Beams and bars}
+\label{sec:3dBalkenUndStaebe}
+
+\begingroup
+\lstinline[emph={dbeam}]|\dbeam{type}{initial point}{end point}[rounded initial point][rounded end point];|
+
+\leftskip=7mm The library includes several types of beams and bars. These are determined by the type. To construct such a beam or bar, two points must first be defined, the starting point and the end point. Furthermore, is an optional available to round the ends of the bars. $[0]$ or no entry means the corresponding end of the beam is not rounded, $[1]$ the end is rounded. This option is especially needed when multiple bars meet with different angles.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dbeam}]|\dbeam{1}{initial point}{end point}[rounded initial point][rounded end point];|
+
+\leftskip=14mm Type $1$ is a bending beam. In the 3-dimensional space the characteristic fiber\footnote{The characteristic fiber acts as a local coordinate system of the beam.} is renounced.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \showpoint;
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \showpoint
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dbeam}]|\dbeam{2}{initial point}{end point}[rounded initial point][rounded end point];|
+
+\leftskip=14mm Type $2$ describes a truss rod. Accordingly there is no characteristic fiber. This means, that order of the input points (starting point - end point) does not matter.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{2}{a}{b}[0][1];
+ \dbeam{2}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{2}{a}{b}[0][1];
+ \dbeam{2}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dbeam}]|\dbeam{3}{initial point}{end point};|
+
+\leftskip=14mm Here (type $3$) is an invisible bar or beam. Since this is plotted as a dashed lines, there is no option to round the ends.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{3}{a}{b};
+ \dbeam{3}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{3}{a}{b};
+ \dbeam{3}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\newpage
+
+%------------------------------------------------
+% daxis
+%------------------------------------------------
+
+\subsection{Axes}
+\label{sec:3dAchsen}
+
+\begingroup
+\begin{lstlisting}[emph={daxis},backgroundcolor=\color{white}]
+\daxis{type}{obligatory}[optional][optional][optional][optional][optional]
+ [optional][optional];
+\end{lstlisting}\vspace{-10mm}
+
+\leftskip=7mm In principle, both global and local axes are available. In the case of local systems a distinction is made between axes in a plane and spatial axes. In both, the global as well as at the local axis systems, with optional parameters the positions and the labels of the axes can be changed. To change the axis names themselves, the command \lstinline|\setaxis| has to be used (see \ref{sec:3dsetaxis}). Using the command \lstinline|\dscaling{3}{scaling value}| it is possible to scale the axes (see \ref{sec:3dscaling}).
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={daxis}]|\daxis{1}{insertion point}[X-orientation][Y-orientation][Z-orientation];|
+
+
+\leftskip=14mm Type $1$ is a global coordinate system. Where the insertion point indicates the origin of the system. With the optional parameters, the orientation of axes label can be changed.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\begin{lstlisting}[emph={daxis},backgroundcolor=\color{white}]
+ \daxis{2}{plane}[insertion point][end point][position][x-orientation][y-orientation]
+ [z-orientation][change y with z];
+\end{lstlisting}\vspace{-10mm}
+
+\leftskip=14mm Type $2$ this is a local coordinate system of axes in a plane (see \ref{sec:3dEbenenUndRaumlicheElemente}). Contrary to the global axes, a start and end point must be selected. Furthermore, the position of the axis can be changed. Likewise, the orientation of the labeling is changeable. The last optional parameter is used to interchange the $y$ with the $z$ axis.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b};
+ \dbeam{1}{b}{c};
+ \daxis{2}{yz}[a][b][.5][above right][left][below];
+ \daxis{2}{xz}[b][c][.5][right][left][below left=-1mm];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b};
+ \dbeam{1}{b}{c};
+ \daxis{2}{yz}[a][b][.5][above right][left][below];
+ \daxis{2}{xz}[b][c][.5][right][left][below left=-1mm];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\begin{lstlisting}[emph={daxis},backgroundcolor=\color{white}]
+ \daxis{3}{rotation A}[insertion point][end point][position][rotation 1][rotation 2]
+ [rotation 3][rotation B];
+\end{lstlisting}\vspace{-10mm}
+
+Type $3$ describes a local axis in space. Contrary to type $2$ not the plane but but the rotations is specified. With rotation $A$ and $B$, the position of the local axis system is defined. Both angles describe the spherical coordinates originating the insert point. With the rotation angles $1$, $2$ and $3$ the local coordinate system is rotated. With angle $1$ the axis is rotated around the $z$-axis. With angle $2$ the rotation around the $y$-axis is defined. And with angle $3$ the rotation of the not yet turned $z$-axis is specified. Since the commands are limited to 9 variables, the position of the labels for the coordinate system must be changed with the command \lstinline|\setaxis{4}| (see \ref{sec:3dsetaxis}).
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{c};
+ \setaxis{4}[above right][above][above];
+ \daxis{3}{0}[a][c][.4][63.43][18.43];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{c};
+ \setaxis{4}[above right][above][above];
+ \daxis{3}{0}[a][c][.4][63.43][18.43];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+
+
+%------------------------------------------------
+% support
+%------------------------------------------------
+
+\subsection{Supports}
+\label{sec:3dLager}
+
+\begingroup
+\lstinline[emph={dsupport}]|\dsupport{type}{insertion point}[optional][optional][optional][optional];|
+
+\leftskip=7mm In the library the most common types of supports and springs are available. Similar to all remaining elements the type can be changed by the type variable. Similarly, an insertion point is required to initialize a bearing or a spring. As an optional parameter the orientation of the pendulum rod can be changed.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dsupport}]|\dsupport{1}{insertion point}[x-direction][y-direction][z-direction];|
+
+\leftskip=14mm Type $1$ is a fixed support, which can absorb forces in all directions, but no moments. The pendulum rod can be switched off with the parameter $[0]$. Respectively, with a negative value $[-1]$ the direction can be chanced.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dsupport{1}{a}[1][1][-1];
+ \dsupport{1}{b}[0];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dsupport{1}{a}[1][1][-1];
+ \dsupport{1}{b}[0];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dsupport}]|\dsupport{2}{insertion point}[plane];|
+
+\leftskip=14mm Type $2$ is a fixed support which can absorb all forces and moments. This support has to be placed parallel to an coordinate plane.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dsupport{2}{a}[xy];
+ \dsupport{2}{b}[yz];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dsupport{2}{a}[xy];
+ \dsupport{2}{b}[yz];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dsupport}]|\dsupport{3}{insertion point}[x-direction][y-direction][z-direction];|
+
+\leftskip=14mm Type $3$ is similar to type $1$. This fixed support is needed as a base for a forked support (see \ref{sec:3dGelenke}).
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dsupport{3}{a};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dsupport{3}{a};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dsupport}]|\dsupport{4}{insertion point}[x-direction][y-direction][z-direction];|
+
+\leftskip=14mm Type $4$ is similar to type $1$. Here, the pendulum rods are springs.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dsupport{4}{a}[0][1][-1];
+ \dsupport{1}{a}[1][0][0];
+ \dsupport{4}{b}[0][0];
+ \dsupport{1}{b}[0][1][0];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dsupport{4}{a}[0][1][-1]; \dsupport{1}{a}[1][0][0];
+ \dsupport{4}{b}[0][0]; \dsupport{1}{b}[0][1][0];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dsupport}]|\dsupport{5}{insertion point}[x-direction][y-direction][z-direction];|
+
+\leftskip=14mm A fixed support with springs for a forked support is type $5$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dsupport{5}{a}[1][0];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dsupport{5}{a}[1][0];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+
+\endgroup
+
+
+%------------------------------------------------
+% hinge
+%------------------------------------------------
+
+\subsection{Joints and Hinges}
+\label{sec:3dGelenke}
+
+\begingroup
+\lstinline[emph={\dhinge}]|\dhinge{type}{insertion point}[optional][optional][optional];|
+
+\leftskip=7mm The above described bearings might be combined with the following joints. The library contains different types of joints. Beside the insertion point, several other parameters are available. However, the optional parameter are mainly dependent on the type of joint.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dhinge}]|\dhinge{1}{insertion point};|
+
+\leftskip=14mm The basic version of a joint is the type $1$. This is a full joint, which requires only an insertion point.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dhinge{1}{b};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dhinge{1}{b};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dhinge}]|\dhinge{2}{insertion point}[initial point][end point][orientation];|
+
+\leftskip=14mm In addition to the insertion point, for type $2$ - the half-hinge - the start and end point have to be specify, for the purpose of orientation. This information is marked as optional by $[~]$, but must be completed in order to generate such a half-hinge. The joint is inserted at the insertion point and stretches between the start and the end point. The input $[0]$ or no input in the orientation means that the half-hinge is placed inside. A $[1]$ in contrast means the exact opposite.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dhinge{2}{b}[a][c];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dhinge{2}{b}[a][c];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dhinge}]|\dhinge{3}{insertion point}[rotation];|
+
+\leftskip=14mm Type $3$ describes a forked hinge and has to be used with the commands \lstinline|\dsupport{3}| and/or \lstinline|\dsupport{5}|. As additional parameter the rotation of the fork can be chanced.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dsupport{3}{a};
+ \dhinge{3}{a}[35];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dsupport{3}{a};
+ \dhinge{3}{a}[35];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dhinge}]|\dhinge{4}{insertion point}[initial point][end point];|
+
+\leftskip=14mm To achieve a stiffening of a corner, the Type $4$ is applied. In addition to the insertion point, type $4$ requires the input of the start and the end point, similar to the half hinge. This information is marked as optional, by $[~]$, but must be completed in order to generate such a stiff corner.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dhinge{4}{b}[a][c];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dhinge{4}{b}[a][c];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% load
+%------------------------------------------------
+
+\subsection{Single load}
+\label{sec:3dEinzellast}
+
+\begingroup
+\lstinline[emph={dload}]|\dload{type}{insertion point}[rotation A][rotation B][load length][load distance];|
+
+\leftskip=7mm The single load command includes both individual forces and moments. To place such an element it is necessary to define an insertion point. The orientation of the singe loads and the moments are defined by spherical coordinates. As an optional parameter the length of the vector and the distance to the insertion point can be changed. Per default the distance to the beam axis is the radius of a joint.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dload}]|\dload{1}{insertion point}[rotation A][rotation B][load length][load distance];|
+
+\leftskip=14mm The first type describes a single force. With the optional parameters the orientation can be changed. Rotation $A$ describes the angle form the zenith to the equator, and rotation $B$ the angle around the equator.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \begin{scope}[canvas is xz plane at y=0]
+ \draw [smallLine,dotted] (1.15,0) arc (0:90:1.15);
+ \draw [smallLine,<->] (0,1.15) arc (90:30:1.15);
+ \draw (60:1.15) node [above right=-.5mm]{$60^\circ$};
+ \end{scope}
+ \begin{scope}[canvas is xy plane at z=0]
+ \draw [smallLine,dotted] (1.15,0) arc (0:90:1.15);
+ \draw [smallLine,<->] (1.15,0) arc (0:30:1.15);
+ \draw (20:1.15) node [right]{$30^\circ$};
+ \end{scope}
+ \begin{scope}[dashed]
+ \dscaling{3}{1.2};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{1}{a}[60][30];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{1}{a}[60][30];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dload}]|\dload{2}{insertion point}[rotation A][rotation B][load length][load distance];|
+
+\leftskip=14mm Type $2$, describes a force pointing away from the insertion point.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{2}{a}[60][30][1.5][.5];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{2}{a}[60][30][1.5][.5];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+
+\hspace{7mm}\lstinline[emph={dload}]|\dload{3}{insertion point}[rotation A][rotation B][load length][load distance];|
+
+\leftskip=14mm Type $3$ is similar to type $1$, and describes a moment pointing to the insertion point. The properties are the same as above.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{3}{a}[60][30];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{3}{a}[60][30];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+
+\hspace{7mm}\lstinline[emph={dload}]|\dload{4}{insertion point}[rotation A][rotation B][load length][load distance];|
+
+\leftskip=14mm Type $4$ is similar to type $2$, and describes a moment pointing away from the insertion point. The properties are the same as above.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{4}{a}[60][30];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dhinge{1}{a};
+ \dload{4}{a}[60][30];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% lineload
+%------------------------------------------------
+
+\subsection{Line loads}
+\label{sec:3dLinienlast}
+
+\begingroup
+\begin{lstlisting}[emph={dlineload},backgroundcolor=\color{white}]
+\dlineload{type}{obligatory}[optional]{initial point}{end point}[optional][optional][optional]
+ [optional];
+\end{lstlisting}\vspace{-10mm}
+
+\leftskip=7mm In the library four types of line loads are available. These are determined by their type. Two points (start and end point) must be defined in advance, similar as with the beam and bar elements. The optional properties are mainly dependent on the type of the line load. The first four types of line loads are elements on a plane and the last one is an element in space (see \ref{sec:3dEbenenUndRaumlicheElemente}).
+
+\endgroup
+
+\begingroup
+\begin{lstlisting}[emph={dlineload},backgroundcolor=\color{white}]
+ \dlineload{1}{plane}[plane distance]{initial point}{end point}[initial force value]
+ [end force value][force interval];
+\end{lstlisting}\vspace{-10mm}
+
+\leftskip=14mm Type $1$ is a linear load that is perpendicular to the beam axis. Besides the start and the end point also the corresponding coordinate plane has to be specified. Optionally, the sizes of the initial force and the final force can be adjusted. Is one of the parameters set to $[0]$, the result is a triangular load. The last parameter controls the distance between the individual forces.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dlineload{1}{yz}{a}{b}[.5][.5];
+ \dlineload{1}{zx}{b}{c}[.5][0][.3];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dlineload{1}{yz}{a}{b}[.5][.5];
+ \dlineload{1}{zx}{b}{c}[.5][0][.3];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\begin{lstlisting}[emph={dlineload},backgroundcolor=\color{white}]
+ \dlineload{2}{plane}[plane distance]{initial point}{end point}[initial force value]
+ [end force value][force interval];
+\end{lstlisting}\vspace{-10mm}
+
+\leftskip=14mm For type $2$, the forces are parallel the corresponding global axis. The optional parameters are the same as for type $1$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dlineload{2}{yz}{a}{b}[.5][.5];
+ \dlineload{2}{xz}{b}{c}[.5][0][.3];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dlineload{2}{yz}{a}{b}[.5][.5];
+ \dlineload{2}{xz}{b}{c}[.5][0][.3];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\begin{lstlisting}[emph={dlineload},backgroundcolor=\color{white}]
+ \dlineload{3}{plane}[plane distance]{initial point}{end point}[initial force value]
+ [end force value][lineload distance from inital point][force interval];
+\end{lstlisting}\vspace{-10mm}
+
+\leftskip=14mm Type $3$ is a projection of the forces on the beam. In addition to the start and end force size, the vertical distance to the starting point can also be specified optionally.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dlineload{3}{yz}{a}{b}[.5][.5];
+ \dlineload{3}{xz}{b}{c}[.5][0][1][.3];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dlineload{3}{yz}{a}{b}[.5][.5];
+ \dlineload{3}{xz}{b}{c}[.5][0][1][.3];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dlineload}]|\dlineload{4}{plane}[plane distance]{initial point}{end point}[force interval][force length];|
+
+\leftskip=14mm A line load along the bar axis is described by type $4$. In addition to the start and end points, the number of forces and its length can be changed optionally. This orientation depends on the chosen coordinate plane. To change the direction, start and end points must be exchanged.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dlineload{4}{yz}{a}{b};
+ \dlineload{4}{xz}{c}{b}[.3][.25];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dlineload{4}{yz}{a}{b};
+ \dlineload{4}{xz}{c}{b}[.3][.25];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\begin{lstlisting}[emph={dlineload},backgroundcolor=\color{white}]
+ \dlineload{5}{rotation A}[rotation B]{initial point}{end point}[initial force value]
+ [end force value][force interval];
+\end{lstlisting}\vspace{-10mm}
+
+\leftskip=14mm Type $5$ is contrary to the line loads mentioned above, a spatial load and thus independent of the different coordinate planes. Type $5$ is similar to $1$ and $2$ a force, which is directed to the beam axis. The optional specification of the rotation angle allow to changed the alignment of the line load, similar to the single load. Otherwise, the same parameters as above apply.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dlineload{5}{0}{a}{b}[.5][.5];
+ \dlineload{5}{45}[45]{b}{c}[.5][0][.3];
+ \dlineload{5}{145}[35]{b}{c}[.5][0][.3];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dlineload{5}{0}{a}{b}[.5][.5];
+ \dlineload{5}{45}[45]{b}{c}[.5][0][.3];
+ \dlineload{5}{145}[35]{b}{c}[.5][0][.3];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dlineload}]|\dlineload{6}{rotation A}[rotation B]{initial point}{end point}[force interval][force length];|
+
+\leftskip=14mm Type $6$ describes as Type $4$, a line load along the rod axis. But instead of defining a plane, for the alignment of the line load, the orientation can be specified with the corresponding rotation angles (see above). Otherwise, the parameters are the same as by type $4$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dlineload{6}{0}{a}{b};
+ \dlineload{6}{90}[90]{c}{b}[.3][.25];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dlineload{6}{0}{a}{b};
+ \dlineload{6}{90}[90]{c}{b}[.3][.25];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+
+%------------------------------------------------
+% dinternalforces
+%------------------------------------------------
+
+\subsection{Internal forces}
+\label{sec:3dSchnittkraftverlauf}
+
+\begingroup
+\begin{lstlisting}[emph={dinternalforces},backgroundcolor=\color{white}]
+\dinternalforces{plane}[plane distance]{initial point}{end point}{initial value}{end value}
+ [parabola height][color][bend position];
+\end{lstlisting}\vspace{-7mm}
+
+\leftskip=7mm With this function, linear and quadratic curves internal forces can be displayed. The entries are made as repeatedly shown above. First, the start and end points must be determined. Thereafter, the start and end values must be entered. Optional the parabola down can be enter. If there is no entry or the entry is equal to $[0]$, than it is a linear function. Also optionally, the color can be determined. Here the most common colors are available and addressed with the color name. The last optional parameter is used to edit the parabola down and if necessary to adapt the plot to another function.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dinternalforces{yz}{a}{b}{.5}{-1}[-.4][blue];
+ \dinternalforces{xz}{b}{c}{1}{0};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dinternalforces{yz}{a}{b}{.5}{-1}[-.4][blue];
+ \dinternalforces{xz}{b}{c}{1}{0};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\newpage
+
+%------------------------------------------------
+% dimensioning
+%------------------------------------------------
+
+\subsection{Dimensioning}
+\label{sec:3dAbmessungen}
+
+\begingroup
+\begin{lstlisting}[emph={ddimensioning},backgroundcolor=\color{white}]
+\ddimensioning{plane}[plane distance]{initial point}{end point}{distance from point of origin}
+ [measure][help line length];
+\end{lstlisting}\vspace{-7mm}
+
+\leftskip=7mm Basically, due to the right choice of the coordinate plane, all dimensions can be distinguished in the program. As with the line loads, also here the the start and end point is required. However, the distance between the the dimension line and the the corresponding points is not entered directly, but the dimension line refers to the coordinate origin. Therefore, it is necessary to specify the coordinate plane. Optional a label can be inserted at any dimension line. Also some help lines for the dimension can be plotted.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \ddimensioning{yz}{a}{b}{.5}[$3m$];
+ \ddimensioning{zy}{a}{b}{3.3}[$1m$];
+ \ddimensioning{xz}[3]{b}{c}{.5}[$1.5m$][1.5];
+ \ddimensioning{xy}[-1]{b}{c}{0}[$1.5m$][3];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \ddimensioning{yz}{a}{b}{.5}[$3m$];
+ \ddimensioning{zy}{a}{b}{3.3}[$1m$];
+ \ddimensioning{xz}[3]{b}{c}{.5}[$1.5m$][1.5];
+ \ddimensioning{xy}[-1]{b}{c}{0}[$1.5m$][3];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\vspace{7mm}
+
+%------------------------------------------------
+% dnotation
+%------------------------------------------------
+
+\subsection{Labeling and notation}
+\label{sec:3dBezeichnungen}
+
+\begingroup
+\lstinline[emph={dnotation}]|\dnotation{type}{insertion point}{obligatory}[optional][optional][optional][optional];|
+
+\leftskip=7mm With the element \lstinline|\dnotation| various kinds of labels can be insert. Because different input parameters are require, these are explained in detail for the individual types. Furthermore, in all types the optional parameters \lstinline|orientation| is used. Here, the \tikzsym commands must be used, these are described in Section \ref{sec:OrientierungVonTextelementen}.
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dnotation}]|\dnotation{1}{insertion point}{labelling}[orientation];|
+
+\leftskip=14mm Type $1$ is a normal labeling. Only the insertion point and the corresponding text must be specified. The optional parameter orientation can be changed. The default setting is \lstinline|above right|, which means top right.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \filldraw [orange] (0,0,0) circle (2pt);
+ \dpoint{a}{0}{0}{0};
+ \dnotation{1}{a}{Typ 1};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dnotation{1}{a}{Typ 1};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dnotation}]|\dnotation{2}{insertion point}{labelling}[orientation];|
+
+\leftskip=14mm Type $2$ has besides the label additional a line to mark the appropriate place.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0,0) circle (2pt);
+ \dpoint{a}{0}{0}{0};
+ \dnotation{2}{a}{Typ 2}[below right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dnotation{2}{a}{Typ 2}[below right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dnotation}]|\dnotation{3}{initial point}{end point}[labelling][position][orientation];|
+
+\leftskip=14mm Type $3$ is an extension of type $2$. As with the other line elements the start point and end point must be specified. The mark is located in the middle of the two points. An optional parameter is the position of the mark which can be changed.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dnotation{3}{a}{b}[$i$][.5][above right];
+ \dnotation{3}{b}{c}[Typ 3][.3][above right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dnotation{3}{a}{b}[$i$][.5][above right];
+ \dnotation{3}{b}{c}[Typ 3][.3][above right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dnotation}]|\dnotation{4}{initial point}{end point}[labelling][position][orientation][text orientation];|
+
+\leftskip=14mm Type $4$ is placed on a line, like type $3$. Instead of a mark, the text is enclosed in a square. The other parameters are the same as in type $3$. In addition, with the last parameter, the text alignment can be changed. Is the parameter equal to $[1]$, the text is placed parallel to the z-axis.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dnotation{4}{a}{b}[$3$];
+ \dnotation{4}{b}{c}[$4$][.7];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dnotation{4}{a}{b}[$3$];
+ \dnotation{4}{b}{c}[$4$][.7];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dnotation}]|\dnotation{5}{initial point}{end point}[labelling][position][orientation][text orientation];|
+
+\leftskip=14mm Type $5$ corresponds to the types $3$ and $4$, but here only the text is displayed and no additional symbols. Thus, the same requirements as in the previous type can be applied.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dnotation{5}{a}{b}[$3$][.5][above][1];
+ \dnotation{5}{b}{c}[$4$][.7];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dnotation{5}{a}{b}[$3$][.5][above][1];
+ \dnotation{5}{b}{c}[$4$][.7];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={dnotation}]|\dnotation{6}{insertion point}{labelling};|
+
+\leftskip=14mm The last type $6$, is similar to the type $1$. Only in this case, the text is framed by a circle. Furthermore, no orientation of the text can be made.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dnotation{6}{a}{+};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dnotation{6}{a}{+};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\newpage
+
+%------------------------------------------------
+% daddon
+%------------------------------------------------
+
+\subsection{Additional symbols}
+\label{sec:3dZusaetzlicheSymbole}
+
+\begingroup
+\lstinline[emph={daddon}]|\daddon{type}{plane}[plane distance]{obligatory}{obligatory}{obligatory}[optional];|
+
+\leftskip=7mm Among these elements fall all symbols that you can not assign to the above introduced elements. Since these types of items require different input parameters, these are explained in detail for each individual types. However, all elements have in common that the corresponding coordination plane must be specified (see \ref{sec:3dEbenenUndRaumlicheElemente}).
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={daddon}]|\daddon{1}{plane}[plane distance]{insertion point}{end point}{position};|
+
+\leftskip=14mm Type $1$ is a symbol for parallel bars. First the start and end points of the bar must be specified and then the positioning of the symbol must be set.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dpoint{d}{0}{0}{1};
+ \dpoint{e}{0}{3}{0};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \dbeam{1}{d}{e};
+ \daddon{1}{xy}{a}{b}{.5};
+ \daddon{1}{xy}{d}{e}{.5};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dpoint{d}{0}{0}{1}; \dpoint{e}{0}{3}{0};
+ \dbeam{1}{a}{b}[0][1]; \dbeam{1}{b}{c};
+ \dbeam{1}{d}{e};
+ \daddon{1}{xy}{a}{b}{.5};
+ \daddon{1}{xy}{d}{e}{.5};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={daddon}]|\daddon{2}{plane}[plane distance]{insertion point}{initial point}{end point}[orientation];|
+
+\leftskip=14mm Type $2$ represents the symbol of two originally bars. Here, also the insertion point must be specified in addition to the start and end points. The orientation of the symbol can be changed, by setting an optional parameter to $[-1]$
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dpoint{d}{0}{0}{-1};
+ \dbeam{1}{a}{b};
+ \dbeam{1}{b}{c};
+ \dbeam{3}{b}{d};
+ \dbeam{3}{d}{a};
+ \daddon{2}{yz}{d}{a}{b}[-1];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1}; \dpoint{d}{0}{0}{-1};
+ \dbeam{1}{a}{b}; \dbeam{1}{b}{c};
+ \dbeam{3}{b}{d}; \dbeam{3}{d}{a};
+ \daddon{2}{yz}{d}{a}{b}[-1];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\hspace{7mm}\lstinline[emph={daddon}]|\daddon{3}{plane}[plane distance]{insertion point}{initial point}{end point}[orientation];|
+
+\leftskip=14mm Type $3$ is the symbol for an arbitrary angle. The same approaches as for Type $2$ can be applied. With the optional parameter it can be distinguished between an acute angle or an obtuse angle. Depending on the case the parameter has to chanced to $[-1]$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \begin{scope}[orange]
+ \dscaling{3}{.6};
+ \daxis{1}{0,0,0}[right][above][right];
+ \end{scope}
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dpoint{d}{0}{0}{-1};
+ \dbeam{1}{a}{b};
+ \dbeam{1}{b}{c};
+ \dbeam{3}{b}{d};
+ \dbeam{3}{d}{a};
+ \dscaling{6}{3};
+ \daddon{3}{yz}{b}{a}{d}[-1];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1}; \dpoint{d}{0}{0}{-1};
+ \dbeam{1}{a}{b}; \dbeam{1}{b}{c};
+ \dbeam{3}{b}{d}; \dbeam{3}{d}{a};
+ \dscaling{6}{3};
+ \daddon{3}{yz}{b}{a}{d}[-1];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%================================================
+% Nuetzliche TikZ Befehle
+%================================================
+
+\section{Useful \tikzsym commands}
+\label{sec:3dNuetzlicheTikZBefehle}
+
+%------------------------------------------------
+% Orientierung von Textelementen
+%------------------------------------------------
+
+\subsection{Orientation of text elements}
+\label{sec:3dOrientierungVonTextelementen}
+
+\tikzsym provides some useful commands for labels, especially in the context of ``nodes''. These commands can be used in the same way for some labeling elements in this library.
+
+\begingroup
+\lstinline[emph={tikz,above}]|/tikz/above=<offset>|
+
+\leftskip=7mm With \lstinline|above| the text is placed above a corresponding point. The offset distance can be specified optional. If no \lstinline |<offset>| is specified, the system default values are used.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt) (2,0) circle (2pt);
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{2}{0}{0};
+ \dnotation{1}{a}{above}[above];
+ \dnotation{1}{b}{above}[above=2mm];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{2}{0}{0};
+ \dnotation{1}{a}{above}[above];
+ \dnotation{1}{b}{above}[above=2mm];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,below}]|/tikz/below=<offset>|
+
+\leftskip=7mm \lstinline|below| positions the text below a selected point, otherwise the same properties as \lstinline|above| can be used.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,left}]|/tikz/left=<offset>|
+
+\leftskip=7mm \lstinline|left| positions the text left to a selected point, otherwise the same properties as \lstinline|above| can be used.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,right}]|/tikz/right=<offset>|
+
+\leftskip=7mm \lstinline|right| positions the text right to a selected point, otherwise the same properties as \lstinline|above| can be used.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,above,left}]|/tikz/above left=<offset>|
+
+\leftskip=7mm A combination of \lstinline|above| and \lstinline|left| places the text to the top left over a corresponding point. Similarly, the offset distance can be specified as an option again. If no \lstinline |<offset>| specified, the system defaults are used.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt);
+ \dpoint{a}{0}{0}{0};
+ \dnotation{1}{a}{above left}[above left];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \dpoint{a}{0}{0}{0};
+ \dnotation{1}{a}{above left}[above left];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,above,right}]|/tikz/above right=<offset>|
+
+\leftskip=7mm The same as \lstinline|above left| just in the right direction.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \filldraw [orange] (0,0) circle (2pt);
+ \dpoint{a}{0}{0}{0};
+ \dnotation{1}{a}{above right}[above right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \dpoint{a}{0}{0};
+ \dnotation{1}{a}{above right}[above right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,below,left}]|/tikz/below left=<offset>|
+
+\leftskip=7mm There is an arrangement at the bottom left.
+
+\endgroup
+
+\begingroup
+\lstinline[emph={tikz,below,right}]|/tikz/below right=<offset>|
+
+\leftskip=7mm There is an arrangement at the bottom right.
+
+\endgroup
+
+%------------------------------------------------
+% Gruppieren
+%------------------------------------------------
+
+\subsection{Grouping}
+\label{sec:3dGruppierung}
+
+To group objects and assign features, there is the environment \lstinline|scope|.
+
+\begin{lstlisting}[emph={scope},backgroundcolor=\color{white}]
+\begin{scope}[<options>]
+ <enviroment contents>
+\end{scope}
+\end{lstlisting}
+\vspace{-7mm}
+\begingroup
+\leftskip=7mm All \lstinline|<options>| are locally limited to those elements that are within the scope.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \begin{scope}[dashed,color=red]
+ \dsupport{1}{a};
+ \dhinge{1}{a};
+ \end{scope}
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \begin{scope}[dashed,color=red]
+ \dsupport{1}{a};
+ \dhinge{1}{a};
+ \end{scope}
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+
+This following commands are not provided in the \tikzsym package, but they were written for the library to simplify the handling of elements.
+
+%------------------------------------------------
+% setcoords
+%------------------------------------------------
+
+\subsection{setcoords}
+\label{sec:3dsetcoords}
+
+\begingroup
+\lstinline[emph={tikz,setcoords}]|/tikz/setcoords{x-angle}{y-angle}[x-direction][y-direction][z-direction][z-angle]|
+
+\leftskip=7mm In order to choose an appropriate view, the coordinate system can be rotated and scaled. However, this must be done before the \lstinline|tikzpicture| environment is started. The angles are measured from the horizon.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \setcoords{-130}{-10}[.5][.7][.5]
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \daxis{1}{a};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \setcoords{-130}{-10}[.5][.7][.5]
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \daxis{1}{a};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% setaxis
+%------------------------------------------------
+
+\subsection{setaxis}
+\label{sec:3dsetaxis}
+
+\begingroup
+\lstinline[emph={tikz,setaxis}]|/tikz/setaxis{type}[optional][optional][optional][optional][optional][optional]|
+
+
+\leftskip=7mm This command can change the orientation of the axes labeling. This applies to both global and local axes systems.
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={setaxis}]|\setaxis{1}|
+
+\leftskip=14mm Type $1$ sets the labeling back to the default settings. Thereby, global axes are labeled with $x$, $y$ and $z$, and local axes with $x^\prime$ $y^\prime$ und $z^\prime$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \setaxis{1}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \daxis{1}{a}[right][above right][left];
+ \daxis{2}{yz}[a][b][.2][above][above][right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \setaxis{1}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \daxis{1}{a}[right][above right][left];
+ \daxis{2}{yz}[a][b][.2][above][above][right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={setaxis}]|\setaxis{2}|
+
+\leftskip=14mm With type $2$ global axes are labeled with $X$, $Y$ and $Z$, and locale axes with $x$ $y$ and $z$.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \setaxis{2}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \daxis{1}{a}[right][above right][left];
+ \daxis{2}{yz}[a][b][.2][above][above][right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \setaxis{2}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \daxis{1}{a}[right][above right][left];
+ \daxis{2}{yz}[a][b][.2][above][above][right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={setaxis}]|\setaxis{3}[X-labelling][Y-labelling][Z-labelling][x-labelling][y-labelling][z-labelling]|
+
+\leftskip=14mm Using type $3$ the labeling of the global and local axes can be chosen individually.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \setaxis{3}[$A$][$B$][$C$][$a$][$b$][$c$]
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \daxis{1}{a}[right][above right][left];
+ \daxis{2}{yz}[a][b][.2][above][above][right];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \setaxis{3}[$A$][$B$][$C$][$a$][$b$][$c$]
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \daxis{1}{a}[right][above right][left];
+ \daxis{2}{yz}[a][b][.2][above][above][right];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={setaxis}]|\setaxis{4}[x-orientation][y-orientation][z-orientation];|
+
+\leftskip=14mm With type $4$ the orientation of the labels for the local and the global axes can be changed.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \daxis{3}{0}[a][b][.2];
+ \end{tikzpicture}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \setaxis{4}[right][above right][above];
+ \daxis{3}{0}[a][b][.2];
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{2}{0};
+ \setaxis{4}[right][above right][above];
+ \daxis{3}{0}[a][b][.2];
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% showpoint
+%------------------------------------------------
+
+\subsection{showpoint}
+\label{sec:3dshowpoint}
+
+\begingroup
+\lstinline[emph={tikz,dscaling}]|/tikz/showpoint|
+
+\leftskip=7mm With the command \lstinline|/showpoint|, the labels of the according points can be displayed. This allows an easier overview, especially for complex systems.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \showpoint
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \showpoint
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{0}{3}{-1};
+ \dpoint{c}{1.5}{3}{-1};
+ \dbeam{1}{a}{b}[0][1];
+ \dbeam{1}{b}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+%------------------------------------------------
+% dscaling
+%------------------------------------------------
+
+\subsection{dscaling}
+\label{sec:3dscaling}
+
+\begingroup
+\lstinline[emph={tikz,dscaling}]|/tikz/dscaling{type}{scalingParameter};|
+
+\leftskip=7mm With this command the lengths of objects can be scaled.
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={dscaling}]|/dscaling{1}{scalingParameter};|
+
+\leftskip=14mm The type $1$ command only scales the length of the system, i.e. scaling the distances between individual points. This enables the user to create larger system, but still be printable on paper without reducing to symbols size.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{2}{0}{0};
+ \dbeam{1}{a}{b};
+ \dhinge{1}{a};
+ \dhinge{1}{b};
+ \dscaling{1}{2};
+ \dpoint{a}{0}{-.5}{0};
+ \dpoint{b}{2}{-.5}{0};
+ \dbeam{1}{a}{b};
+ \dhinge{1}{a};
+ \dhinge{1}{b};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{2}{0}{0};
+ \dbeam{1}{a}{b}; \dhinge{1}{a}; \dhinge{1}{b};
+ \dscaling{1}{2};
+ \dpoint{a}{0}{-.5}{0}; \dpoint{b}{2}{-.5}{0};
+ \dbeam{1}{a}{b}; \dhinge{1}{a}; \dhinge{1}{b};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={dscaling}]|/dscaling{2}{scalingParameter};|
+
+\leftskip=14mm Type $2$ enables the scaling of supports and hinges.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed]
+ \dpoint{a}{0}{0}{0};
+ \dsupport{1}{a};
+ \dhinge{1}{a};
+ \dscaling{2}{.7};
+ \dpoint{b}{1.7}{0}{0};
+ \dsupport{1}{b};
+ \dhinge{1}{b};
+ \dscaling{2}{.5};
+ \dpoint{c}{3}{0}{0};
+ \dsupport{1}{c};
+ \dhinge{1}{c};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}
+ \dpoint{a}{0}{0}{0}; \dsupport{1}{a}; \dhinge{1}{a};
+ \dscaling{2}{.7};
+ \dpoint{b}{1.7}{0}{0}; \dsupport{1}{b}; \dhinge{1}{b};
+ \dscaling{2}{.5};
+ \dpoint{c}{3}{0}{0}; \dsupport{1}{c}; \dhinge{1}{c};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={dscaling}]|/dscaling{3}{scalingParameter};|
+
+\leftskip=14mm With type $3$ the axes system can be scaled.
+
+\leftskip=14mm\begin{minipage}[c]{0.3\linewidth}
+ \begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \daxis{1}{a};
+ \dscaling{3}{.6};
+ \dpoint{b}{1.7}{.7}{0};
+ \daxis{1}{b};
+ \end{tikzpicture}
+\end{minipage}
+\begin{minipage}{0.61\linewidth}\begin{lstlisting}
+ \begin{tikzpicture}[coords]
+ \dpoint{a}{0}{0}{0};
+ \daxis{1}{a};
+ \dscaling{3}{.6};
+ \dpoint{b}{1.7}{.7}{0};
+ \daxis{1}{b};
+ \end{tikzpicture}\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+\endgroup
+
+\begingroup
+\leftskip=7mm\lstinline[emph={dscaling}]|/dscaling{4}{scalingParameter};|
+
+\leftskip=14mm Type $4$ enables the scaling of single and line loads.
+
+\leftskip=7mm\lstinline[emph={dscaling}]|/dscaling{5}{scalingParameter};|
+
+\leftskip=14mm Type $5$ enables the scaling of the dimensioning.
+
+\leftskip=7mm\lstinline[emph={dscaling}]|/dscaling{6}{scalingParameter};|
+
+\leftskip=14mm Type $6$ enables the scaling of the additional symbols.
+
+\endgroup
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% contents: Tutorial %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\chapter{Tutorial}
+\label{sec:3dTutorial}
+
+In the following tutorial, the program code is only shown for the currently treated aspects, because of the limited space. However, at the end the full code is provided.
+
+\section{Structural design}
+\label{sec:3dTragwerkskonstruktion}
+
+In this tutorial, the basic principles of designing 3D structures with \tikzsym and ``stanli'' are treated. Step by Step, a structural design should be created. The final result is shown below.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\begin{tikzpicture}[framed,coords]
+
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+
+ \dlineload{5}{0}{f}{b}[.5][.5][.11];
+ \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11];
+ \dlineload{5}{0}{d}{j}[.5][.5][.11];
+
+ \ddimensioning{xy}{f}{g}{4.5}[$3~m$];
+ \ddimensioning{xy}{g}{h}{4.5}[$3~m$];
+ \ddimensioning{xy}{h}{i}{4.5}[$3~m$];
+ \ddimensioning{xy}{i}{j}{4.5}[$3~m$];
+ \ddimensioning{yx}{e}{j}{13}[$3~m$];
+
+ \dnotation{1}{f}{$q=10~kN/m$}[above left=3mm];
+ \dnotation{1}{b}{$A$}[below left];
+ \dnotation{1}{h}{$C$}[right=2mm];
+ \dnotation{1}{d}{$B$}[below left];
+\end{tikzpicture}
+
+\subsection{Start of the consturction}
+\label{sec:3dStartDerKonstruktion}
+
+
+In order to create the desired structural design, a file has to be created first. In this example, it is a \LaTeX ~file. However, the library can also be used with \TeX ~and ~Con\TeX files.
+
+\begin{lstlisting}
+\documentclass{scrreprt}
+
+\usepackage{stanli}
+
+\begin{document}
+ \begin{tikzpicture}[corrds]
+ % here we construct our structure
+ \end{tikzpicture}
+\end{document}
+\end{lstlisting}\vspace{-7mm}
+
+\subsection{Preparation}
+\label{sec:3dVorbereitung}
+
+Before starting the construction, relevant settings has to be made in advance. Among others, a new coordinate system with \lstinline|\setcoords| will be introduced. Likewise, the labeling of the global and local axes can be changed.
+
+\begin{lstlisting}
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\begin{tikzpicture}[corrds]
+ % here we construct our structure
+\end{tikzpicture}
+\end{lstlisting}\vspace{-7mm}
+
+\subsection{Placing points}
+\label{sec:3dPunkteSetzen}
+
+First, we have to specify corresponding points with the command \lstinline|\dpoint|. On this basis, the remaining library elements are placed. Since the points are not shown in the graph, it is recommended to display the point labels during the construction phase. This can be done with the command \lstinline|\showpoint|.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+\end{tikzpicture}
+
+\begin{lstlisting}
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[coords]
+% Points
+ \dpoint{a}{0}{0}{0}; \dpoint{b}{3}{0}{0}; \dpoint{c}{6}{0}{0}; \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0}; \dpoint{f}{0}{3}{0}; \dpoint{g}{3}{3}{0}; \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0}; \dpoint{j}{12}{3}{0};
+\end{lstlisting}\vspace{-7mm}
+
+\newpage
+
+\subsection{The construction}
+\label{sec:3dDieKonstruktion}
+
+After the foundation stone was laid by the points, we can start to connect the points with beams and bars. In the library different beams and bars are available. With the command \lstinline|\dbeam| they can be brought to `` paper''.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+\end{tikzpicture}
+
+\begin{lstlisting}
+% Beams
+ \dbeam{1}{f}{b}; \dbeam{1}{b}{h}; \dbeam{1}{h}{d}; \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e}; \dbeam{3}{f}{j}; \dbeam{3}{a}{f}; \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h}; \dbeam{3}{d}{i}; \dbeam{3}{e}{j};
+\end{lstlisting}\vspace{-7mm}
+
+\subsection{Axes for the overview}
+\label{sec:3dAchsenfurUbersicht}
+
+
+In order not to lose the overview, it is advisable to display a global axis system already at the beginning. The local axes can be added later.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[framed,coords]
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+\end{tikzpicture}
+
+\begin{lstlisting}
+% Global coordinate system
+ \daxis{1}{a};
+\end{lstlisting}\vspace{-7mm}
+
+
+\subsection{Supports and joints}
+\label{sec:3dLagerUndGelenke}
+\vspace*{-5mm}
+In order to provide more flexibility, and to keep the number of macros as low as possible, their are own commands available for the supports and the joints. Supports are built with the command \lstinline|\dsupport|. However, the corresponding joint must independently created with the command \lstinline|\dhinge|. This allows to combine different bearings with different joints. The important thing is always that the bearing has to be created first and only then the joints should be implemented. This is necessary, because \tikzsym puts the recently drawn figures on the top.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[framed,coords]
+
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+\end{tikzpicture}
+
+\begin{lstlisting}
+% Supports
+ \dsupport{1}{b}; \dsupport{1}{h}[0][0]; \dsupport{1}{d}[0];
+
+% Joints
+ \dhinge{2}{b}[f][h][1]; \dhinge{2}{h}[b][d][1]; \dhinge{2}{d}[h][j][1];
+\end{lstlisting}\vspace{-7mm}
+
+\vspace*{-7mm}
+\subsection{Loads}
+\label{sec:3dSchneeAmDach}
+\vspace*{-5mm}
+
+With the insertion of the joints, the construction is completed and can now be loaded. Besides single loads \lstinline|\dload| are line loads \lstinline|\dlineload| available. Because the loads are not parallel to one of the main coordinate plains, a line load in space (type $5$) has to be used.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[framed,coords]
+
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+
+
+ \dlineload{5}{0}{f}{b}[.5][.5][.11];
+ \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11];
+ \dlineload{5}{0}{d}{j}[.5][.5][.11];
+
+\end{tikzpicture}
+
+\begin{lstlisting}
+% Loads
+ \dlineload{5}{0}{f}{b}[.5][.5][.11]; \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11]; \dlineload{5}{0}{d}{j}[.5][.5][.11];
+\end{lstlisting}\vspace*{-1.1cm}
+
+\subsection{Dimensions}
+\label{sec:3dDachabmessungen}
+\vspace*{-2mm}
+Actually, the structural design is already finished and ready for use. However, for the purpose of an overview, we can include the corresponding measures with the command \lstinline|\ddimensioning|.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[framed,coords]
+
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+
+
+ \dlineload{5}{0}{f}{b}[.5][.5][.11];
+ \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11];
+ \dlineload{5}{0}{d}{j}[.5][.5][.11];
+
+ \ddimensioning{xy}{f}{g}{4.5}[$3~m$];
+ \ddimensioning{xy}{g}{h}{4.5}[$3~m$];
+ \ddimensioning{xy}{h}{i}{4.5}[$3~m$];
+ \ddimensioning{xy}{i}{j}{4.5}[$3~m$];
+ \ddimensioning{yx}{e}{j}{13}[$3~m$];
+\end{tikzpicture}
+
+\begin{lstlisting}
+% Dimensions
+ \ddimensioning{xy}{f}{g}{4.5}[$3~m$]; \ddimensioning{xy}{g}{h}{4.5}[$3~m$];
+ \ddimensioning{xy}{h}{i}{4.5}[$3~m$]; \ddimensioning{xy}{i}{j}{4.5}[$3~m$];
+ \ddimensioning{yx}{e}{j}{13}[$3~m$];
+\end{lstlisting}\vspace*{-7mm}
+
+\vspace*{-5mm}
+\subsection{The finished construction}
+\label{sec:3dDasFertigeDach}
+\vspace*{-2mm}
+Now the only missing parts are the names of nodes and bars, then the construction is completed. To achieve the best possible appearance of the labels, can the labels (\lstinline|\dnotation|) the position can be shifted with an optional parameter.
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\showpoint
+\begin{tikzpicture}[framed,coords]
+
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+
+ \dlineload{5}{0}{f}{b}[.5][.5][.11];
+ \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11];
+ \dlineload{5}{0}{d}{j}[.5][.5][.11];
+
+ \ddimensioning{xy}{f}{g}{4.5}[$3~m$];
+ \ddimensioning{xy}{g}{h}{4.5}[$3~m$];
+ \ddimensioning{xy}{h}{i}{4.5}[$3~m$];
+ \ddimensioning{xy}{i}{j}{4.5}[$3~m$];
+ \ddimensioning{yx}{e}{j}{13}[$3~m$];
+
+ \dnotation{1}{f}{$q=10~kN/m$}[above left=3mm];
+ \dnotation{1}{b}{$A$}[below left];
+ \dnotation{1}{h}{$C$}[right=2mm];
+ \dnotation{1}{d}{$B$}[below left];
+\end{tikzpicture}
+
+\begin{lstlisting}
+% Labels
+ \dnotation{1}{f}{$q=10~kN/m$}[above left=3mm]; \dnotation{1}{b}{$A$}[below left];
+ \dnotation{1}{h}{$C$}[right=2mm]; \dnotation{1}{d}{$B$}[below left];
+\end{lstlisting}\vspace*{-7mm}
+
+Now the point labeling can be switched off and the construction is finished.
+\subsection{Structural design with source code}
+\label{sec:3dTragwerkskonstruktionSamtQuellcode}
+
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+\renewcommand{\DshowPointParameter}{0}
+\begin{tikzpicture}[framed,coords]
+
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+ \daxis{1}{a};
+
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+
+ \dlineload{5}{0}{f}{b}[.5][.5][.11];
+ \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11];
+ \dlineload{5}{0}{d}{j}[.5][.5][.11];
+
+ \ddimensioning{xy}{f}{g}{4.5}[$3~m$];
+ \ddimensioning{xy}{g}{h}{4.5}[$3~m$];
+ \ddimensioning{xy}{h}{i}{4.5}[$3~m$];
+ \ddimensioning{xy}{i}{j}{4.5}[$3~m$];
+ \ddimensioning{yx}{e}{j}{13}[$3~m$];
+
+ \dnotation{1}{f}{$q=10~kN/m$}[above left=3mm];
+ \dnotation{1}{b}{$A$}[below left];
+ \dnotation{1}{h}{$C$}[right=2mm];
+ \dnotation{1}{d}{$B$}[below left];
+\end{tikzpicture}
+
+
+\begin{minipage}[t]{0.45\linewidth}\begin{lstlisting}
+\setcoords{-25}{10}[1][1.2]
+\setaxis{2}
+%\showpoint
+\begin{tikzpicture}[coords]
+
+% Points
+ \dpoint{a}{0}{0}{0};
+ \dpoint{b}{3}{0}{0};
+ \dpoint{c}{6}{0}{0};
+ \dpoint{d}{9}{0}{0};
+ \dpoint{e}{12}{0}{0};
+ \dpoint{f}{0}{3}{0};
+ \dpoint{g}{3}{3}{0};
+ \dpoint{h}{6}{3}{0};
+ \dpoint{i}{9}{3}{0};
+ \dpoint{j}{12}{3}{0};
+
+% Global coordinate system
+ \daxis{1}{a};
+
+% Beams
+ \dbeam{1}{f}{b};
+ \dbeam{1}{b}{h};
+ \dbeam{1}{h}{d};
+ \dbeam{1}{d}{j};
+ \dbeam{3}{a}{e};
+ \dbeam{3}{f}{j};
+ \dbeam{3}{a}{f};
+ \dbeam{3}{b}{g};
+ \dbeam{3}{c}{h};
+ \dbeam{3}{d}{i};
+ \dbeam{3}{e}{j};
+
+
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+\hfill
+\begin{minipage}[t]{0.45\linewidth}\begin{lstlisting}
+% Supports
+ \dsupport{1}{b};
+ \dsupport{1}{h}[0][0];
+ \dsupport{1}{d}[0];
+
+% Joints
+ \dhinge{2}{b}[f][h][1];
+ \dhinge{2}{h}[b][d][1];
+ \dhinge{2}{d}[h][j][1];
+
+
+% Loads
+ \dlineload{5}{0}{f}{b}[.5][.5][.11];
+ \dlineload{5}{0}{b}{h}[.5][.5][.11];
+ \dlineload{5}{0}{h}{d}[.5][.5][.11];
+ \dlineload{5}{0}{d}{j}[.5][.5][.11];
+
+% Dimensions
+ \ddimensioning{xy}{f}{g}{4.5}[$3~m$];
+ \ddimensioning{xy}{g}{h}{4.5}[$3~m$];
+ \ddimensioning{xy}{h}{i}{4.5}[$3~m$];
+ \ddimensioning{xy}{i}{j}{4.5}[$3~m$];
+ \ddimensioning{yx}{e}{j}{13}[$3~m$];
+
+% Labels
+ \dnotation{1}{f}{$q=10~kN/m$}[above left=3mm];
+ \dnotation{1}{b}{$A$}[below left];
+ \dnotation{1}{h}{$C$}[right=2mm];
+ \dnotation{1}{d}{$B$}[below left];
+
+\end{tikzpicture}
+\end{lstlisting}\vspace{-7mm}
+\end{minipage}
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/structmech/README.md b/graphics/pgf/contrib/structmech/README.md
new file mode 100644
index 0000000000..7424ead97b
--- /dev/null
+++ b/graphics/pgf/contrib/structmech/README.md
@@ -0,0 +1,31 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Copyright (C) 2018 Theodore Chang
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+------
+
+**structmech** is a collection of several TikZ commands that allows users to draw basic elements in material/structural mechanics. With one single command, it is capable of drawing member forces, nodal forces/displacements, various boundary conditions, internal force distributions, etc.
+
+Please feel free to redistribute and/or expand the functionality. Please contact me at:
+
+[tlcfem@gmail.com](mailto:tlcfem@gmail.com)
+
+tlc
+
+05/29/2018
+
+
+
diff --git a/graphics/pgf/contrib/structmech/doc/structmech.pdf b/graphics/pgf/contrib/structmech/doc/structmech.pdf
new file mode 100644
index 0000000000..ccf117258a
--- /dev/null
+++ b/graphics/pgf/contrib/structmech/doc/structmech.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/structmech/doc/structmech.tex b/graphics/pgf/contrib/structmech/doc/structmech.tex
new file mode 100644
index 0000000000..9cf875ffe3
--- /dev/null
+++ b/graphics/pgf/contrib/structmech/doc/structmech.tex
@@ -0,0 +1,486 @@
+\documentclass[10pt,a4paper]{article}
+\usepackage[margin=30mm]{geometry}
+\usepackage{amsmath,fancyvrb,float,hyperref,structmech}
+\usepackage{mathpazo}
+\title{structmech\\\large{}A TikZ command set for structural mechanics drawings}
+\author{Theodore Chang\footnote{E-mail: \href{tlcfem@gmail.com}{tlcfem@gmail.com}}\\[2mm]\normalsize{}University of Canterbury, Christchurch, NZ}
+\date{\normalsize{}v1.0 released on \today}
+\newcommand*{\Highlight}[1]{\colorbox{cyan}{\color{red}\texttt{#1}}}
+\begin{document}
+\maketitle
+\section{Introduction}
+When I was preparing lecture notes on structural mechanics related topics, it took me a lot of time to draw simple beam systems and distributions of internal forces, such as shear force diagram (SFD) and bending moment diagram (BMD), using basic TikZ. I thus tried to write some generalised commands that can draw key elements with simple syntax. That's how this package is created. This package is under GPL v3 license and/or later version. Please feel free to redistribute, expand or rewrite the functionality.
+\section{Options}
+To load the package, please use the following command in the preamble.
+\begin{Verbatim}[frame=single,label=Syntax]
+\usepackage[key=val]{structmech}
+\end{Verbatim}
+Some options are available for controlling the parameters used during plotting, they are:
+\begin{enumerate}
+\item \Highlight{fill} defines the default fill patch colour, any predefined colour value is acceptable.
+\item \Highlight{line} defines the default line colour, any predefined colour value is acceptable.
+\item \Highlight{node} defines the nodal force/displacement colour, any predefined colour value is acceptable.
+\item \Highlight{axis} defines the axial force/displacement colour, any predefined colour value is acceptable.
+\item \Highlight{rotation} defines the rotation force/displacement colour, any predefined colour value is acceptable.
+\item \Highlight{convention} defines the sign convention, value \Highlight{convention=sign} draws all quantities along the positive direction and indicates the negative quantities with minus sign $-$, value \Highlight{convention=direction} labels all numbers as positive values but draws the negative quantities along the negative direction.
+\item \Highlight{showvalue} defines whether to show the values when plotting the diagrams of the internal forces, possible values are \Highlight{showvalue=on} and \Highlight{showvalue=off}.
+\item \Highlight{absvalue} defines whether to show the absolute values when plotting the diagrams of the internal forces, possible values are \Highlight{absvalue=on} and \Highlight{absvalue=off}.
+\item \Highlight{opacity} defines the fill patch opacity, default value is $0.4$.
+\item \Highlight{linewidth} defines the line width, default value is $0.4$ millimetre.
+\end{enumerate}
+These options can be changed in the document via the following command.
+\begin{Verbatim}[frame=single,label=Syntax]
+\setstructmech{key=val}
+\end{Verbatim}
+Here are some examples that use the basic force command to show how the user can control the property of the diagram elements. Other options can be changed in a similar fashion.
+\begin{Verbatim}[frame=single,label=Example]
+\setstructmech{axis=red}
+\BasicForce{0,0}{3,0}{}
+\setstructmech{axis=blue,rotation=green}
+\BasicForce{4,0}{7,0}{}
+\setstructmech{axis=black}
+\BasicForce{8,0}{11,0}{}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\setstructmech{axis=red}
+\BasicForce{0,0}{3,0}{}
+\setstructmech{axis=blue,rotation=green}
+\BasicForce{4,0}{7,0}{}
+\setstructmech{axis=black}
+\BasicForce{8,0}{11,0}{}
+\end{tikzpicture}
+\end{figure}
+\section{Nodal Forces/Displacements}
+\begin{Verbatim}[frame=single,label=Syntax]
+\NodalForce[1]{2}[3][4][5]{6}[7]
+\end{Verbatim}
+\begin{itemize}
+\item[][1] --- optional, colour of arrows, any existing colour value is acceptable, default value is the colour defined by the \Highlight{node} option.
+\item[]\{2\} --- node coordinate pair, accepts two coordinates of the target node in the form of \Highlight{$x,y$}.
+\item[][3] --- optional, label for local horizontal force/displacement, if not assigned or left blank, only the arrow (without label) will be drew, assign \Highlight{N} for drawing nothing along horizontal direction.
+\item[][4] --- optional, label for local vertical force/displacement, if not assigned or left blank, only the arrow (without label) will be drew, assign \Highlight{N} for drawing nothing along horizontal direction.
+\item[][5] --- optional, label for local rotational force/displacement, if not assigned or left blank, only the arrow (without label) will be drew, assign \Highlight{N} for drawing nothing along horizontal direction.
+\item[]\{6\} --- optional, rotation, default value is \Highlight{$0$}.
+\item[][7] --- optional, scale, default value is \Highlight{$1$}.
+\end{itemize}
+\begin{Verbatim}[frame=single,label=Example]
+\NodalForce{0,0}
+\NodalForce[red]{2,0}
+\NodalForce[blue]{4,0}[][][]
+\setstructmech{node=green}
+\NodalForce{6,0}[N]
+\NodalForce{8,0}[][N]
+\NodalForce{10,0}[][][N]
+\NodalForce{12,0}[N][]
+\setstructmech{node=orange}
+\setstructmech{convention=direction}
+\NodalForce{0,-3}[-V_1][-V_2][-V_3]
+\setstructmech{convention=sign}
+\NodalForce{2.5,-3}[-V_1][-V_2][-V_3]
+\NodalForce{4.5,-3}[V_1][V_2][V_3]{60}
+\NodalForce{7,-3}{150}[1.3]
+\NodalForce{9,-3}[N][V_2]{90}[1.6]
+\NodalForce[cyan]{12.5,-4}[V_1][V_2][V_3]{-60}[2]
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\NodalForce{0,0}
+\NodalForce[red]{2,0}
+\NodalForce[blue]{4,0}[][][]
+\setstructmech{node=green}
+\NodalForce{6,0}[N]
+\NodalForce{8,0}[][N]
+\NodalForce{10,0}[][][N]
+\NodalForce{12,0}[N][]
+\setstructmech{node=orange}
+\setstructmech{convention=direction}
+\NodalForce{0,-3}[-V_1][-V_2][-V_3]
+\setstructmech{convention=sign}
+\NodalForce{2.5,-3}[-V_1][-V_2][-V_3]
+\NodalForce{4.5,-3}[V_1][V_2][V_3]{60}
+\NodalForce{7,-3}{150}[1.3]
+\NodalForce{9,-3}[N][V_2]{90}[1.6]
+\NodalForce[cyan]{12.5,-4}[V_1][V_2][V_3]{-60}[2]
+\end{tikzpicture}
+\end{figure}
+\section{Member Forces/Displacements}
+\begin{Verbatim}[frame=single,label=Syntax]
+\BasicForce[1]{2}{3}{4}{5}[6][7][8]
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, the number of forces to draw, \Highlight{1} for axial force only, \Highlight{2L} for lower end bending moment only, \Highlight{2H} for high end bending moment only, \Highlight{2} for both two end moments, \Highlight{3} for all three force components, default value is \Highlight{3}.
+\item[]\{2\} --- the coordinates of the lower end in the form of \Highlight{$x,y$}.
+\item[]\{3\} --- the coordinates of the high end in the form of \Highlight{$x,y$}.
+\item[]\{4\} --- label for the member, leave blank if not required.
+\item[]\{5\} --- optional, further adjustment of the member label, parameters used for TikZ positioning are acceptable, such as \Highlight{right=2mm} or \Highlight{anchor=north}, the default value is \Highlight{above=2mm}, leave blank if not required.
+\item[][6] --- label for the first force drew, available for all four values for the first parameter \Highlight{\#1}, leave blank if not required.
+\item[][7] --- label for the second force drew, available for \Highlight{\#1=2}, leave blank if not required.
+\item[][8] --- label for the third force drew, available for \Highlight{\#1=3}, leave blank if not required.
+\end{enumerate}
+The colours of three components can be configured using global options. Here are a few examples, please find out the order and the difference in the following fourteen examples.
+\begin{Verbatim}[frame=single,label=Example]
+\BasicForce{0,0}{3,0}{}
+\BasicForce[1]{5,0}{8,0}{a}[U_1]
+\BasicForce[1]{0,2}{3,2}{}
+\BasicForce[2]{5,2}{8,2}{a}[U_1][U_2]
+\setstructmech{axis=red,rotation=green}
+\BasicForce[2]{0,4}{3,4}{}
+\BasicForce[2L]{5,4}{8,4}{a}[U_1]
+\BasicForce[3]{0,6}{3,6}{}
+\BasicForce[2H]{5,6}{8,6}{a}[U_1]
+\BasicForce[2L]{0,8}{3,8}{}
+\BasicForce{5,8}{8,8}{a}[U_1][U_2][U_3]
+\BasicForce[2H]{0,10}{3,10}{}
+\BasicForce{5,10}{8,10}{a}{above left=2mm and 6mm}[U_1][U_2][U_3]
+\setstructmech{convention=direction}
+\BasicForce[3]{0,12}{3,12}{a}[-U_1][-U_2][-U_3]
+\BasicForce[3]{5,12}{8,12}{a}[U_1][U_2][-U_3]
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\draw[dashed](-1,1)--(9,1)(-1,3)--(9,3)(-1,5)--(9,5)(-1,7)--(9,7)(-1,9)--(9,9)(-1,11)--(9,11);
+\draw[line width=.6mm](-1,0)--(9,0)(-1,2)--(9,2)(-1,4)--(9,4)(-1,6)--(9,6)(-1,8)--(9,8)(-1,10)--(9,10)(-1,12)--(9,12);
+\BasicForce{0,0}{3,0}{}
+\BasicForce[1]{5,0}{8,0}{a}[U_1]
+\BasicForce[1]{0,2}{3,2}{}
+\BasicForce[2]{5,2}{8,2}{a}[U_1][U_2]
+\setstructmech{axis=red,rotation=green}
+\BasicForce[2]{0,4}{3,4}{}
+\BasicForce[2L]{5,4}{8,4}{a}[U_1]
+\BasicForce[3]{0,6}{3,6}{}
+\BasicForce[2H]{5,6}{8,6}{a}[U_1]
+\BasicForce[2L]{0,8}{3,8}{}
+\BasicForce{5,8}{8,8}{a}[U_1][U_2][U_3]
+\BasicForce[2H]{0,10}{3,10}{}
+\BasicForce{5,10}{8,10}{a}{above left=2mm and 6mm}[U_1][U_2][U_3]
+\setstructmech{convention=direction}
+\BasicForce[3]{0,12}{3,12}{a}[-U_1][-U_2][-U_3]
+\BasicForce[3]{5,12}{8,12}{a}[U_1][U_2][-U_3]
+\end{tikzpicture}
+\end{figure}
+\section{Uniformly Distributed Load}
+\begin{Verbatim}[frame=single,label=Syntax]
+\UDL[1]{2}{3}[4]{5}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, flip the side, assign value \Highlight{F} if the default behaviour is not the one you want.
+\item[]\{2\} --- the coordinates of the lower end node in form of \Highlight{$x,y$}.
+\item[]\{3\} --- the coordinates of the higher end node in form of \Highlight{$x,y$}.
+\item[][4] --- optional, label.
+\item[]\{5\} --- optional, scale, default value is \Highlight{$1$}.
+\end{enumerate}
+\begin{Verbatim}[frame=single,label=Example]
+\UDL{-4,0}{-1,4}[10]
+\UDL{-2,0}{1,4}[-10]
+\setstructmech{fill=red,convention=direction}
+\UDL{0,0}{3,4}[-10]
+\setstructmech{fill=red,convention=sign}
+\UDL[F]{1,0}{4,4}
+\UDL{6,0}{9,4}{2}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\draw[line width=.6mm](-4,0)--++(3,4)(-2,0)--++(3,4)(0,0)--++(3,4)(1,0)--++(3,4)(6,0)--++(3,4);
+\UDL{-4,0}{-1,4}[10]
+\UDL{-2,0}{1,4}[-10]
+\setstructmech{fill=red,convention=direction}
+\UDL{0,0}{3,4}[-10]
+\setstructmech{fill=red,convention=sign}
+\UDL[F]{1,0}{4,4}
+\UDL{6,0}{9,4}{2}
+\end{tikzpicture}
+\end{figure}
+\section{Supports}
+\subsection{Hinge/Fixed/Roller/Slider Support}
+\begin{Verbatim}[frame=single,label=Syntax]
+\HingeSupport[1]{2}{3}
+\FixedSupport[1]{2}{3}
+\RollerSupport[1]{2}{3}
+\SliderSupport[1]{2}{3}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, rotation, default value is \Highlight{$0$}.
+\item[]\{2\} --- node coordinates in form of \Highlight{$x,y$}.
+\item[]\{3\} --- optional, scale, default value is \Highlight{$1$}.
+\end{enumerate}
+\begin{Verbatim}[frame=single,label=Example]
+\HingeSupport{0,0}
+\HingeSupport[75]{2,0}{1.5}
+\HingeSupport[150]{2,2}{2}
+\HingeSupport[225]{0,2}{2.5}
+\FixedSupport{4,0}
+\FixedSupport[75]{6,0}{1.5}
+\FixedSupport[150]{6,2}{2}
+\FixedSupport[225]{4,2}{2.5}
+\setstructmech{linewidth=.2mm,line=red}
+\RollerSupport{6,-5}
+\RollerSupport[75]{8,-5}{1.5}
+\RollerSupport[150]{8,-3}{2}
+\RollerSupport[225]{6,-3}{2.5}
+\SliderSupport{0,-5}
+\SliderSupport[75]{2,-5}{1.5}
+\SliderSupport[150]{2,-3}{2}
+\SliderSupport[225]{0,-3}{2.5}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\HingeSupport{0,0}
+\HingeSupport[75]{2,0}{1.5}
+\HingeSupport[150]{2,2}{2}
+\HingeSupport[225]{0,2}{2.5}
+\draw
+ (0,0)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (2,0)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (2,2)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (0,2)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--cycle;
+\FixedSupport{6,0}
+\FixedSupport[75]{8,0}{1.5}
+\FixedSupport[150]{8,2}{2}
+\FixedSupport[225]{6,2}{2.5}
+\setstructmech{linewidth=.2mm,line=red}
+\draw
+ (6,0)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (8,0)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (8,2)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (6,2)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--cycle;
+\RollerSupport{6,-5}
+\RollerSupport[75]{8,-5}{1.5}
+\RollerSupport[150]{8,-3}{2}
+\RollerSupport[225]{6,-3}{2.5}
+\draw
+ (6,-5)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (8,-5)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (8,-3)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (6,-3)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--cycle;
+\SliderSupport{0,-5}
+\SliderSupport[75]{2,-5}{1.5}
+\SliderSupport[150]{2,-3}{2}
+\setstructmech{linewidth=.2mm}
+\SliderSupport[225]{0,-3}{2.5}
+\draw
+ (0,-5)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (2,-5)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (2,-3)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--
+ (0,-3)node[draw,fill=white,circle,inner sep=0,minimum size=2mm]{}--cycle;
+\end{tikzpicture}
+\end{figure}
+\subsection{Sleeve Support}
+\begin{Verbatim}[frame=single,label=Syntax]
+\SleeveSupport[1]{2}[3]{4}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, rotation.
+\item[]\{2\} --- node coordinates in form of \Highlight{$x,y$}.
+\item[][3] --- optional, gap width.
+\item[]\{4\} --- optional, scale.
+\end{enumerate}
+\begin{Verbatim}[frame=single,label=Example]
+\SleeveSupport{0,0}
+\SleeveSupport[75]{2,0}{1.5}
+\SleeveSupport[150]{2,2}{2}
+\SleeveSupport[225]{0,2}[.12]{2.5}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\SleeveSupport{0,0}
+\SleeveSupport[90]{2,0}{1.5}
+\SleeveSupport[180]{2,2}{2}
+\SleeveSupport[270]{0,2}[.12]{2.5}
+\draw
+ (0,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}--
+ (2,0)node[draw,fill=white,inner sep=0,minimum size=3mm]{}--
+ (2,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}--
+ (0,2)node[draw,fill=white,inner sep=0,minimum size=3mm]{}--cycle;
+\end{tikzpicture}
+\end{figure}
+\subsection{Rigid Constraint}
+\begin{Verbatim}[frame=single,label=Syntax]
+\Rigid[1]{2}{3}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, rotation.
+\item[]\{2\} --- node coordinates in form of \Highlight{$x,y$}.
+\item[]\{3\} --- optional, scale.
+\end{enumerate}
+The colour is controlled by the \Highlight{fill} option instead of the \Highlight{line} option due to the fill patch is used in this command.
+\begin{Verbatim}[frame=single,label=Example]
+\Rigid{0,0}
+\Rigid[-90]{2,0}{1.5}
+\setstructmech{fill=yellow}
+\Rigid[0]{2,2}{2}
+\Rigid[90]{0,2}{2.5}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\Rigid{0,0}
+\Rigid[-90]{2,0}{1.5}
+\setstructmech{fill=green}
+\Rigid[0]{2,2}{2}
+\Rigid[90]{0,2}{2.5}
+\draw
+ (0,0)node[draw,fill=white,inner sep=0,minimum size=2mm]{}--
+ (2,0)node[draw,fill=white,inner sep=0,minimum size=2mm]{}--
+ (2,2)node[draw,fill=white,inner sep=0,minimum size=2mm]{}--
+ (0,2)node[draw,fill=white,inner sep=0,minimum size=2mm]{}--cycle;
+\end{tikzpicture}
+\end{figure}
+\section{Coordinate System Frame}
+\begin{Verbatim}[frame=single,label=Syntax]
+\CoorOrigin[1]{2}[3][4]{5}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, rotation, default value is \Highlight{$0$}.
+\item[]\{2\} --- node coordinates in form of \Highlight{$x,y$}.
+\item[][3] --- optional, label for $x$ axis, default value is \Highlight{$x$}.
+\item[][4] --- optional, label for $y$ axis, default value is \Highlight{$y$}.
+\item[]\{5\} --- optional, scale.
+\end{enumerate}
+\begin{Verbatim}[frame=single,label=Example]
+\CoorOrigin{0,0}
+\CoorOrigin[75]{4,0}[\xi][\eta]{1.5}
+\CoorOrigin[150]{8,0}{2}
+\CoorOrigin[225]{12,0}{2.5}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\CoorOrigin{0,0}
+\CoorOrigin[75]{4,0}[\xi][\eta]{1.5}
+\CoorOrigin[150]{8,0}{2}
+\CoorOrigin[225]{12,0}[x(\xi)][y(\eta)]{2.5}
+\end{tikzpicture}
+\end{figure}
+\section{Internal Force Diagram}
+\subsection{Linear Internal Force}
+\begin{Verbatim}[frame=single,label=Syntax]
+\IForceA[1]{2}{3}{4}{5}{6}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, fill colour.
+\item[]\{2\} --- node coordinates of the lower end in form of \Highlight{$x,y$}.
+\item[]\{3\} --- node coordinates of the higher end in form of \Highlight{$x,y$}.
+\item[]\{4\} --- force value of the lower end, can be negative.
+\item[]\{5\} --- force value of the higher end, can be negative.
+\item[]\{6\} --- optional, scale.
+\end{enumerate}
+Caveat: it shall be noted that all internal forces follow the sign convention that is adopted in finite element method, instead of the one used in material mechanics. All quantities are defined in the local coordinate system.
+\begin{Verbatim}[frame=single,label=Example]
+\IForceA{0,0}{0,4}{1}{-2}
+\setstructmech{absvalue=on}
+\IForceA[blue]{0,4}{4,4}{2}{-0.5}{0.5}
+\IForceA[cyan]{4,4}{4,0}{0.5}{2}
+\setstructmech{showvalue=off,opacity=.8}
+\IForceA[red]{4,0}{0,0}{-1}{-1}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\draw[line width=.4mm](0,0)rectangle(4,4);
+\IForceA{0,0}{0,4}{1}{-2}
+\setstructmech{absvalue=on}
+\IForceA[blue]{0,4}{4,4}{2}{-0.5}{0.5}
+\IForceA[cyan]{4,4}{4,0}{0.5}{2}
+\setstructmech{showvalue=off,opacity=.8}
+\IForceA[red]{4,0}{0,0}{-1}{-1}
+\end{tikzpicture}
+\end{figure}
+\subsection{Parabolic Internal Force}
+\begin{Verbatim}[frame=single,label=Syntax]
+\IForceB[1]{2}{3}{4}{5}{6}{7}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, fill colour.
+\item[]\{2\} --- node coordinates of the lower end in form of \Highlight{$x,y$}.
+\item[]\{3\} --- node coordinates of the higher end in form of \Highlight{$x,y$}.
+\item[]\{4\} --- bending moment value of the lower end, can be negative.
+\item[]\{5\} --- bending moment value of the higher end, can be negative.
+\item[]\{6\} --- the increment of the moment value of the centre point.
+\item[]\{7\} --- optional, scale.
+\end{enumerate}
+It should be noted that parameter \Highlight{\#6} defines the difference of the true moment value and the corresponding value of an assumed linear distribution. The positive value indicates that the parabola bends towards the local positive direction. Since this command draws a parabola, the load should be a uniformly distributed load. So this value \Highlight{\#6} is $\pm\dfrac{wl^2}{8}$, the sign depends on the direction of the UDL.
+\begin{Verbatim}[frame=single,label=Example]
+\draw[line width=.4mm](0,0)rectangle(4,4);
+\IForceB{0,0}{0,4}{1}{-4}{1}{0.5}
+\IForceB[red]{0,4}{4,4}{-2}{-1}{-2}{0.5}
+\setstructmech{absvalue=on}
+\IForceB[purple]{4,4}{4,0}{3}{-1}{2}{0.5}
+\setstructmech{showvalue=off,opacity=.8}
+\IForceB[cyan]{4,0}{0,0}{1.5}{0}{2}{0.5}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\draw[line width=.4mm](0,0)rectangle(4,4);
+\IForceB{0,0}{0,4}{1}{-4}{1}{0.5}
+\IForceB[red]{0,4}{4,4}{-2}{-1}{-2}{0.5}
+\setstructmech{absvalue=on}
+\IForceB[purple]{4,4}{4,0}{3}{-1}{2}{0.5}
+\setstructmech{showvalue=off,opacity=1}
+\IForceB[cyan]{4,0}{0,0}{1.5}{0}{2}{0.5}
+\end{tikzpicture}
+\end{figure}
+\section{Beam Deformation (Perpendicular)}
+\begin{Verbatim}[frame=single,label=Syntax]
+\BeamDeformP[1]{2}{3}{4}[5]{6}[7]{8}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, line colour.
+\item[]\{2\} --- node coordinates of the lower end in form of \Highlight{$x,y$}.
+\item[]\{3\} --- node coordinates of the higher end in form of \Highlight{$x,y$}.
+\item[]\{4\} --- perpendicular displacement of the lower end, can be negative, leave zero if not required.
+\item[][5] --- optional, rotation value of the lower end, can be negative.
+\item[]\{6\} --- perpendicular displacement of the high end, can be negative, leave zero if not required.
+\item[][7] --- optional, rotation value of the high end, can be negative.
+\item[]\{8\} --- optional, scale.
+\end{enumerate}
+Caveat: This command draws deformation based on local coordinate system. The translations are perpendicular to the member cord.
+\begin{Verbatim}[frame=single,label=Example]
+\BeamDeformP{0,0}{0,4}{.5}{-1}
+\BeamDeformP[blue]{0,4}{4,4}{0}[30]{0}[50]{1}
+\setstructmech{linewidth=.6mm}
+\BeamDeformP[red]{4,4}{4,0}{.5}[30]{0}[50]{2}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\draw[line width=.4mm](0,0)rectangle(4,4);
+\BeamDeformP{0,0}{0,4}{.5}{-1}
+\BeamDeformP[blue]{0,4}{4,4}{0}[30]{0}[50]{1}
+\setstructmech{linewidth=.6mm}
+\BeamDeformP[red]{4,4}{4,0}{.5}[30]{0}[50]{2}
+\end{tikzpicture}
+\end{figure}
+\section{Beam Deformation (Rotation Only)}
+\begin{Verbatim}[frame=single,label=Syntax]
+\BeamDeformR[1]{2}{3}[4][5]{6}
+\end{Verbatim}
+\begin{enumerate}
+\item[][1] --- optional, line colour.
+\item[]\{2\} --- node coordinates of the lower end in form of \Highlight{$x,y$}.
+\item[]\{3\} --- node coordinates of the higher end in form of \Highlight{$x,y$}.
+\item[][4] --- optional, rotation value of the lower end, can be negative.
+\item[][5] --- optional, rotation value of the high end, can be negative.
+\item[]\{6\} --- optional, scale.
+\end{enumerate}
+Caveat: If the nodal translations are expressed as global values, they can be readily combined into parameters \Highlight{\#2} and \Highlight{\#3}, so there is no need to provide another command to plot the deformation in the global coordinate system.
+\begin{Verbatim}[frame=single,label=Example]
+\BeamDeformR{0,0}{0,4}[50][30]
+\BeamDeformR[blue]{0,4}{4,4}[20][30]{2}
+\end{Verbatim}
+\begin{figure}[H]
+\centering
+\begin{tikzpicture}
+\draw[line width=.4mm](0,0)rectangle(4,4);
+\BeamDeformR{0,0}{0,4}[50][30]
+\BeamDeformR[blue]{0,4}{4,4}[20][30]{2}
+\end{tikzpicture}
+\end{figure}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/structmech/tex/structmech.sty b/graphics/pgf/contrib/structmech/tex/structmech.sty
new file mode 100644
index 0000000000..bb7356bf5f
--- /dev/null
+++ b/graphics/pgf/contrib/structmech/tex/structmech.sty
@@ -0,0 +1,427 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Copyright (C) 2018 Theodore Chang
+%%
+%% This program is free software: you can redistribute it and/or modify
+%% it under the terms of the GNU General Public License as published by
+%% the Free Software Foundation, either version 3 of the License, or
+%% (at your option) any later version.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+%% GNU General Public License for more details.
+%%
+%% You should have received a copy of the GNU General Public License
+%% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% structmech: A TikZ command set for structural mechanics drawings
+% v1.0 by tlc
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{structmech}[2018/05/29 v1.0 structmech: A TikZ command set for structural mechanics drawings]
+\RequirePackage{ifthen}
+\RequirePackage{kvoptions}
+\RequirePackage{tikz}
+\RequirePackage{xkeyval}
+\RequirePackage{xparse}
+\RequirePackage{xstring}
+\usetikzlibrary{calc,decorations.pathreplacing,positioning}
+\DeclareOptionX<structmech>{fill}[black]{\def\fillColor{#1}}
+\DeclareOptionX<structmech>{line}[black]{\def\lineColor{#1}}
+\DeclareOptionX<structmech>{node}[black]{\def\nodeColor{#1}}
+\DeclareOptionX<structmech>{axis}[black]{\def\axisColor{#1}}
+\DeclareOptionX<structmech>{rotation}[black]{\def\rotationColor{#1}}
+\DeclareOptionX<structmech>{convention}[sign]{\IfStrEq{#1}{sign}{\def\convention{sign}}{\def\convention{direction}}}
+\DeclareOptionX<structmech>{showvalue}[on]{\IfStrEq{#1}{on}{\def\showvalue{on}}{\def\showvalue{off}}}
+\DeclareOptionX<structmech>{absvalue}[off]{\IfStrEq{#1}{on}{\def\absvalue{on}}{\def\absvalue{off}}}
+\DeclareOptionX<structmech>{opacity}[.4]{\def\fillOpacity{#1}}
+\DeclareOptionX<structmech>{linewidth}[.4mm]{\def\lineWidth{#1}}
+\ExecuteOptionsX<structmech>{fill,line,node,axis,rotation,convention,showvalue,absvalue,opacity,linewidth}
+\ProcessOptionsX<structmech>
+\tikzset{
+ NOFILL/.style={fill=none,fill opacity=1},
+ DIAGRAM/.style={draw=\lineColor,fill=\fillColor,fill opacity=\fillOpacity},
+ROTATION/.style={draw=\rotationColor,line width=\lineWidth,->},
+ FIXED/.style={postaction={draw,decorate,decoration={border,pre length=1mm,post length=1mm,angle=-60,amplitude=1mm,segment length=1mm}}}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command Zero: Set options.
+% \setstructmech{1}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\setstructmech}{m}{\ExecuteOptionsX<structmech>{#1}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 1: Label All Nodal Forces.
+% \NodalForce[1]{2}[3][4][5]{6}[7]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\NodalForce}{O{\nodeColor} m O{} O{} O{} G{0} O{1}}{
+\begin{scope}[rotate around={#6:(#2)},shift={(#2)},scale=#7]
+\IfEq{#3}{}
+ {\draw[#1,line width=\lineWidth,->](-1,0)--(-.2,0);}
+ {\IfEq{#3}{N}
+ {}
+ {\IfStrEq{\convention}{sign}
+ {\draw[#1,line width=\lineWidth,->](-1,0)--(-.2,0);\node[fill=none,#1]at(-1.4,0){\footnotesize$#3$};}
+ {\StrLeft{#3}{1}[\SS]\IfStrEq{\SS}{-}
+ {\draw[#1,line width=\lineWidth,->](-.2,0)--(-1,0);\node[fill=none,#1]at(-1.4,0){\footnotesize$\StrDel[1]{#3}{-}$};}
+ {\draw[#1,line width=\lineWidth,->](-1,0)--(-.2,0);\node[fill=none,#1]at(-1.4,0){\footnotesize$#3$};}
+ }
+ }
+ }
+\IfEq{#4}{}
+ {\draw[#1,line width=\lineWidth,->](0,-1)--(0,-.2);}
+ {\IfEq{#4}{N}
+ {}
+ {\IfStrEq{\convention}{sign}
+ {\draw[#1,line width=\lineWidth,->](0,-1)--(0,-.2);\node[fill=none,#1]at(0,-1.4){\footnotesize$#4$};}
+ {\StrLeft{#4}{1}[\SS]\IfStrEq{\SS}{-}
+ {\draw[#1,line width=\lineWidth,->](0,-.2)--(0,-1);\node[fill=none,#1]at(0,-1.4){\footnotesize$\StrDel[1]{#4}{-}$};}
+ {\draw[#1,line width=\lineWidth,->](0,-1)--(0,-.2);\node[fill=none,#1]at(0,-1.4){\footnotesize$#4$};}
+ }
+ }
+ }
+\IfEq{#5}{}
+ {\draw[#1,line width=\lineWidth,->](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];}
+ {\IfEq{#5}{N}
+ {}
+ {\IfStrEq{\convention}{sign}
+ {\draw[#1,line width=\lineWidth,->](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];\node[#1,fill=none]at(-.5303,.5303){\footnotesize$#5$};}
+ {\StrLeft{#5}{1}[\SS]\IfStrEq{\SS}{-}
+ {\draw[#1,line width=\lineWidth,<-](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];\node[#1,fill=none]at(-.5303,.5303){\footnotesize$\StrDel[1]{#5}{-}$};}
+ {\draw[#1,line width=\lineWidth,->](.2121,-.2121)arc[#1,start angle=-45,end angle=135,radius=3mm];\node[#1,fill=none]at(-.5303,.5303){\footnotesize$#5$};}
+ }
+ }
+ }
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 2: Label Element Forces.
+% \BasicForce[1]{2}{3}{4}{5}[6][7][8]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\BasicForce}{O{3} m m m G{above=2mm} o o o}{
+\coordinate(A)at(#2);
+\coordinate(B)at(#3);
+\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\let\Angle\pgfmathresult
+\tikzset{
+EndRotA/.style={start angle=\Angle+90,end angle=\Angle+270,radius=3mm},
+EndRotB/.style={start angle=\Angle-90,end angle=\Angle+90,radius=3mm},
+EndRotC/.style={start angle=\Angle+270,end angle=\Angle+90,radius=3mm},
+EndRotD/.style={start angle=\Angle+90,end angle=\Angle-90,radius=3mm},
+}
+\IfEq{#1}{1}
+ {
+ \IfNoValueTF{#6}
+ {\draw[\axisColor,line width=\lineWidth,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$};}
+ {\IfStrEq{\convention}{sign}
+ {\draw[\axisColor,line width=\lineWidth,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};}
+ {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-}
+ {\draw[\axisColor,line width=\lineWidth,>-<](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$\StrDel[1]{#6}{-}$};}
+ {\draw[\axisColor,line width=\lineWidth,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};}
+ }
+ }
+ }
+ {}
+\IfEq{#1}{2L}
+ {
+ \draw[\axisColor,draw=none](#2)--(#3)node[midway,fill=none,#5]{$#4$};
+ \IfNoValueTF{#6}
+ {\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ {\IfStrEq{\convention}{sign}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle-90:.6)$){\footnotesize$\StrDel[1]{#6}{-}$};\draw[ROTATION]($(#2)+(\Angle-90:.3)$)arc[EndRotC];}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ }
+ }
+ }
+ {}
+\IfEq{#1}{2H}
+ {
+ \draw[\axisColor,draw=none](#2)--(#3)node[midway,fill=none,#5]{$#4$};
+ \IfNoValueTF{#6}
+ {\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ {\IfStrEq{\convention}{sign}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#6$};\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle+90:.6)$){\footnotesize$\StrDel[1]{#6}{-}$};\draw[ROTATION]($(#3)+(\Angle+90:.3)$)arc[EndRotD];}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#6$};\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ }
+ }
+ }
+ {}
+\IfEq{#1}{2}
+ {
+ \draw[\axisColor,draw=none](#2)--(#3)node[midway,fill=none,#5]{$#4$};
+ \IfNoValueTF{#6}
+ {\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ {\IfStrEq{\convention}{sign}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle-90:.6)$){\footnotesize$\StrDel[1]{#6}{-}$};\draw[ROTATION]($(#2)+(\Angle-90:.3)$)arc[EndRotC];}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#6$};\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ }
+ }
+ \IfNoValueTF{#7}
+ {\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ {\IfStrEq{\convention}{sign}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#7$};\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ {\StrLeft{#7}{1}[\SS]\IfStrEq{\SS}{-}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle+90:.6)$){\footnotesize$\StrDel[1]{#7}{-}$};\draw[ROTATION]($(#3)+(\Angle+90:.3)$)arc[EndRotD];}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#7$};\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ }
+ }
+ }
+ {}
+\IfEq{#1}{3}
+ {
+ \IfNoValueTF{#6}
+ {\draw[\axisColor,line width=\lineWidth,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$};}
+ {\IfStrEq{\convention}{sign}
+ {\draw[\axisColor,line width=\lineWidth,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};}
+ {\StrLeft{#6}{1}[\SS]\IfStrEq{\SS}{-}
+ {\draw[\axisColor,line width=\lineWidth,>-<](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$\StrDel[1]{#6}{-}$};}
+ {\draw[\axisColor,line width=\lineWidth,<->](#2)--(#3)node[midway,fill=none,#5]{$#4$}node[midway,fill=white]{\footnotesize$#6$};}
+ }
+ }
+ \IfNoValueTF{#7}
+ {\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ {\IfStrEq{\convention}{sign}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#7$};\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ {\StrLeft{#7}{1}[\SS]\IfStrEq{\SS}{-}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle-90:.6)$){\footnotesize$\StrDel[1]{#7}{-}$};\draw[ROTATION]($(#2)+(\Angle-90:.3)$)arc[EndRotC];}
+ {\node[fill=none,\rotationColor]at($(#2)+(\Angle+90:.6)$){\footnotesize$#7$};\draw[ROTATION]($(#2)+(\Angle+90:.3)$)arc[EndRotA];}
+ }
+ }
+ \IfNoValueTF{#8}
+ {\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ {\IfStrEq{\convention}{sign}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#8$};\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ {\StrLeft{#8}{1}[\SS]\IfStrEq{\SS}{-}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle+90:.6)$){\footnotesize$\StrDel[1]{#8}{-}$};\draw[ROTATION]($(#3)+(\Angle+90:.3)$)arc[EndRotD];}
+ {\node[fill=none,\rotationColor]at($(#3)+(\Angle-90:.6)$){\footnotesize$#8$};\draw[ROTATION]($(#3)+(\Angle-90:.3)$)arc[EndRotB];}
+ }
+ }
+ }
+ {}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 3: Hinge support
+% \HingeSupport[1]{2}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\HingeSupport}{O{0} m G{1}}{
+\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3]
+\draw[line width=\lineWidth](0,0)--++(-.25,-.4)--++(.5,0)--cycle;
+\draw[line width=\lineWidth,FIXED](-.4,-.4)--++(.8,0);
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 4: UDL
+% \UDL[1]{2}{3}[4]{5}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\makeatletter
+\NewDocumentCommand{\UDL}{O{N} m m O{} G{1}}{
+\IfEq{#1}{F}{\def\FAC{-1}}{\def\FAC{1}}
+\coordinate(A)at(#2);
+\coordinate(B)at(#3);
+\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\let\Angle\pgfmathresult
+\pgfpointdiff{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274}
+\let\Length\pgfmathresult
+\draw[\fillColor,fill=\fillColor,fill opacity=\fillOpacity](#2)--(#3)--($(#3)+(\Angle+\FAC*90:#5)$)--($(#2)+(\Angle+\FAC*90:#5)$)--cycle;
+\IfNoValueTF{#4}
+ {}
+ {\IfStrEq{\convention}{sign}
+ {\node[NOFILL]at($(#2)!.5!(#3)+(\Angle+\FAC*90:1.2*#5)$)[rotate=\Angle]{$#4$};}
+ {\StrLeft{#4}{1}[\SS]\IfStrEq{\SS}{-}
+ {\node[NOFILL]at($(#2)!.5!(#3)+(\Angle+\FAC*90:1.2*#5)$)[rotate=\Angle]{$\StrDel[1]{#4}{-}$};}
+ {\node[NOFILL]at($(#2)!.5!(#3)+(\Angle+\FAC*90:1.2*#5)$)[rotate=\Angle]{$#4$};}
+ }
+ }
+\foreach\x in{0,.1,.2,...,1}{
+\coordinate(C)at($(#2)!\x!(#3)$);
+\IfNoValueTF{#4}
+ {\draw[<-](C)--++($(\Angle+\FAC*90:#5)$);}
+ {\IfStrEq{\convention}{sign}
+ {\draw[<-](C)--++($(\Angle+\FAC*90:#5)$);}
+ {\StrLeft{#4}{1}[\SS]\IfStrEq{\SS}{-}
+ {\draw[->](C)--++($(\Angle+\FAC*90:#5)$);}
+ {\draw[<-](C)--++($(\Angle+\FAC*90:#5)$);}
+ }
+ }
+};
+}
+\makeatother
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 5: Fixed support
+% \FixedSupport[1]{2}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\FixedSupport}{O{0} m G{1}}{
+\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3]
+\draw[draw=\lineColor,line width=\lineWidth,FIXED](-.4,0)--++(.8,0);
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 6: Roller support
+% \RollerSupport[1]{2}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\RollerSupport}{O{0} m G{1}}{
+\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3]
+\draw[draw=\lineColor,line width=\lineWidth]
+ (0,0)--++(-.25,-.3)--++(.5,0)--cycle
+ (-.15,-.35)circle(.05)
+ (+.15,-.35)circle(.05);
+\draw[draw=\lineColor,line width=\lineWidth,FIXED]
+ (-.4,-.4)--++(.8,0);
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 7: Slider support
+% \SliderSupport[1]{2}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\SliderSupport}{O{0} m G{1}}{
+\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3]
+\draw[draw=\lineColor,line width=\lineWidth]
+ (-.25,-.1/#3)--++(.5,0)
+ (-.15,-.14/#3)--++(0,-.22)
+ (+.15,-.14/#3)--++(0,-.22);
+\draw[draw=\lineColor,line width=\lineWidth,fill=white]
+ (-.15,-.14/#3)circle(.04)++(0,-.22)circle(.04)
+ (+.15,-.14/#3)circle(.04)++(0,-.22)circle(.04);
+\draw[draw=\lineColor,line width=\lineWidth,FIXED]
+ (-.4,-.14/#3-.26)--++(.8,0);
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 8: Sleeve support
+% \SleeveSupport[1]{2}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\SleeveSupport}{O{0} m O{.4} G{1}}{
+\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#4]
+\draw[draw=\lineColor,line width=\lineWidth,FIXED](#3/2,-.4)--++(0,.8)(-#3/2,.4)--++(0,-.8);
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 9: Coordinate system frame
+% \CoorOrigin[1]{2}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\CoorOrigin}{O{0} m O{x} O{y} G{1}}{
+\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#5]
+\draw[draw=\lineColor,line width=\lineWidth,->](-.2,0)--++(1,0);\node[fill=none,draw=none]at(1.1,0){\footnotesize$#3$};
+\draw[draw=\lineColor,line width=\lineWidth,->](0,-.2)--++(0,1);\node[fill=none,draw=none]at(0,1.1){\footnotesize$#4$};
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 10: Rigid constraint
+% \Rigid[1]{2}{3}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\Rigid}{O{0} m G{1}}{
+\begin{scope}[rotate around={#1:(#2)},shift={(#2)},scale=#3]
+\draw[draw=\fillColor,fill=\fillColor,rounded corners=.2mm](0,0)--(.25,.4)--(.4,.25)--cycle;
+\end{scope}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 11: Linear Internal Force
+% \IForceA[1]{2}{3}{4}{5}{6}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\makeatletter
+\NewDocumentCommand{\IForceA}{O{\fillColor} m m m m G{1}}{
+\coordinate(A)at(#2);
+\coordinate(B)at(#3);
+\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\let\Angle\pgfmathresult
+\coordinate(C)at($(A)+(\Angle+90:#4*#6)$);
+\coordinate(D)at($(B)+(\Angle-90:#5*#6)$);
+\draw[#1,fill=#1,fill opacity=\fillOpacity](A)--(C)--(D)--(B)--cycle;
+\pgfpointdiff{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274}
+\let\Length\pgfmathresult
+\IfStrEq{\showvalue}{on}{
+\StrLeft{#4}{1}[\SA]
+\IfStrEq{\SA}{-}
+ {\IfStrEq{\absvalue}{on}
+ {\node[NOFILL]at($(C)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$\StrDel[1]{#4}{-}$};}
+ {\node[NOFILL]at($(C)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#4$};}
+ }
+ {\node[NOFILL]at($(C)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#4$};}
+\StrLeft{#5}{1}[\SB]
+\IfStrEq{\SB}{-}
+ {\IfStrEq{\absvalue}{on}
+ {\node[NOFILL]at($(D)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$\StrDel[1]{#5}{-}$};}
+ {\node[NOFILL]at($(D)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#5$};}
+ }
+ {\node[NOFILL]at($(D)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#5$};}
+}{}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 12: Parabolic Internal Force
+% \IForceB[1]{2}{3}{4}{5}{6}{7}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\IForceB}{O{\fillColor} m m m m m G{1}}{
+\coordinate(A)at(#2);\coordinate(B)at(#3);
+% original cord
+\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\let\Angle\pgfmathresult
+\coordinate(C)at($(A)+(\Angle+90:#4*#7)$);
+\coordinate(D)at($(B)+(\Angle-90:#5*#7)$);
+% inclined cord
+\pgfmathanglebetweenpoints{\pgfpointanchor{C}{center}}{\pgfpointanchor{D}{center}}
+\let\AngleB\pgfmathresult
+% original length
+\pgfpointdiff{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274}
+\let\Length\pgfmathresult
+% inclined length
+\pgfpointdiff{\pgfpointanchor{C}{center}}{\pgfpointanchor{D}{center}}
+\pgfmathparse{veclen(\pgf@x,\pgf@y)/28.45274}
+\let\LengthB\pgfmathresult
+% center of inclined cord
+\coordinate(G)at($(C)+(\AngleB:\LengthB/2)$);
+\pgfmathsetmacro\height{#6*#7};
+\begin{scope}[rotate around={\AngleB:(G)},shift={(G)}]
+\draw[#1,fill=#1,fill opacity=\fillOpacity](-.5*\LengthB,0)parabola bend(0,\height)(.5*\LengthB,0)--++(\Angle-\AngleB+90:#5*#7)--($(-.5*\LengthB,0)+(\Angle-\AngleB-90:#4*#7)$)--cycle;
+\end{scope}
+\IfStrEq{\showvalue}{on}{
+\StrLeft{#4}{1}[\SA]
+\IfStrEq{\SA}{-}
+ {\IfStrEq{\absvalue}{on}
+ {\node[NOFILL]at($(C)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$\StrDel[1]{#4}{-}$};}
+ {\node[NOFILL]at($(C)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#4$};}
+ }
+ {\node[NOFILL]at($(C)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#4$};}
+\StrLeft{#5}{1}[\SB]
+\IfStrEq{\SB}{-}
+ {\IfStrEq{\absvalue}{on}
+ {\node[NOFILL]at($(D)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$\StrDel[1]{#5}{-}$};}
+ {\node[NOFILL]at($(D)+(\Angle+90:\Length/8)$)[rotate=\Angle]{$#5$};}
+ }
+ {\node[NOFILL]at($(D)+(\Angle-90:\Length/8)$)[rotate=\Angle]{$#5$};}
+}{}
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 13: Beam Deformation (perpendicular)
+% \BeamDeformP[1]{2}{3}{4}[5]{6}[7]{8}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\BeamDeformP}{O{\fillColor} m m m O{0} m O{0} G{1}}{
+\coordinate(A)at(#2);\coordinate(B)at(#3);
+% original cord
+\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\let\Angle\pgfmathresult
+\coordinate(C)at($(A)+(\Angle+90:#4*#8)$);
+\coordinate(D)at($(B)+(\Angle-90:#6*#8)$);
+\pgfmathanglebetweenpoints{\pgfpointanchor{C}{center}}{\pgfpointanchor{D}{center}}
+\let\AngleB\pgfmathresult
+\draw[#1,line width=\lineWidth](C)to[out=\AngleB+#5*#8,in=180+\AngleB+#7*#8](D);
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Command 13: Beam Deformation (Rotation Only)
+% \BeamDeformR[1]{2}{3}[4][5]{6}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NewDocumentCommand{\BeamDeformR}{O{\fillColor} m m O{0} O{0} G{1}}{
+\coordinate(A)at(#2);\coordinate(B)at(#3);
+% original cord
+\pgfmathanglebetweenpoints{\pgfpointanchor{A}{center}}{\pgfpointanchor{B}{center}}
+\let\Angle\pgfmathresult
+\draw[#1,line width=\lineWidth](A)to[out=\Angle+#4*#6,in=180+\Angle+#5*#6](B);
+}
+\makeatother \ No newline at end of file
diff --git a/graphics/pgf/contrib/ticollege/README b/graphics/pgf/contrib/ticollege/README
new file mode 100644
index 0000000000..e96a9f7635
--- /dev/null
+++ b/graphics/pgf/contrib/ticollege/README
@@ -0,0 +1,22 @@
+************* Fichier README pour ticollege.sty **********************
+
+Objectif
+-----
+Cette extension utilise TikZ pour dessiner des touches d'une
+calculatrice scientifique (non graphique), des item de menus, l'affichage de calcul sur un écran, ainsi qu'une calculatrice en grand ou petit format.
+
+Licence
+-------
+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.
+
+Documentation
+-------------
+La documentation de l'extension se trouve dans le répertoire /doc/.
+
+Merci d'utiliser ticollege.sty.
+
+Philippe De Sousa
+Evry (91), France
+philou.desousa@gmail.com
diff --git a/graphics/pgf/contrib/ticollege/doc/IndexHead.ist b/graphics/pgf/contrib/ticollege/doc/IndexHead.ist
new file mode 100644
index 0000000000..dc83e642d7
--- /dev/null
+++ b/graphics/pgf/contrib/ticollege/doc/IndexHead.ist
@@ -0,0 +1,10 @@
+headings_flag 1
+heading_prefix "\n \\item {\\fontfamily{pzc}\\large\\selectfont\\qquad{} "
+heading_suffix "}"
+symhead_positive "Symboles"
+symhead_negative "symboles"
+numhead_positive "Nombres"
+numhead_negative "nombres"
+delim_0 " \\dotfill\\ "
+delim_1 " \\dotfill\\ "
+delim_2 " \\dotfill\\ "
diff --git a/graphics/pgf/contrib/ticollege/doc/ticollege-doc.pdf b/graphics/pgf/contrib/ticollege/doc/ticollege-doc.pdf
new file mode 100644
index 0000000000..cb7c546656
--- /dev/null
+++ b/graphics/pgf/contrib/ticollege/doc/ticollege-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/ticollege/doc/ticollege-doc.tex b/graphics/pgf/contrib/ticollege/doc/ticollege-doc.tex
new file mode 100644
index 0000000000..fb9e74b68c
--- /dev/null
+++ b/graphics/pgf/contrib/ticollege/doc/ticollege-doc.tex
@@ -0,0 +1,676 @@
+\documentclass[10pt,french,a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{mathpazo}
+\usepackage[euler-digits]{eulervm}
+\usepackage[dvipsnames,table]{xcolor}
+\usepackage{ticollege}
+\usepackage[margin=2cm]{geometry}
+\usepackage{tabularx,titlesec,wrapfig}
+\usepackage{babel}
+\usepackage[pdfborder={0 0 0},bookmarksnumbered,pdfpagelabels]{hyperref}
+\usepackage{tcolorbox}
+\tcbuselibrary{listingsutf8,documentation}
+\tcbset{color key=blue,color value=ForestGreen,index colorize=true,doclang/keys=options,doclang/key=option,doclang/values=valeurs,doclang/value=valeur}
+\usepackage{makeidx}
+\makeindex
+
+\newcommand*\Speciale{Cette option n'a aucune incidence sur le style \docValue{arrows}.\xspace}
+\newcommand*\Couleur[1]{L'option \docAuxKey{color #1} est également disponible.\xspace}
+
+%%% FORMAT SECTIONS DE mathbook.cls de Stéphane PASQUET
+
+% couleurs section
+\definecolor{section@title@color}{cmyk}{1,0.2,0.3,0.1}
+\definecolor{subsection@title@color}{cmyk}{0,0.6,0.9,0}
+\definecolor{shadow@color}{cmyk}{.07,0,0,0.49}
+% fontes section
+\def\sectiontitle@font{\fontfamily{ugq}\selectfont}
+\def\subsectiontitle@font{\fontfamily{ugq}\selectfont}
+% Décalages numéro de sections / titres des sections
+\newlength\decalnumsec
+\newlength\decalnumsubsec
+\setlength{\decalnumsec}{-0.5em}
+\setlength{\decalnumsubsec}{-0.5em}
+\newlength\decalxtitlesubsec
+\setlength{\decalxtitlesubsec}{\parindent}
+% Espace entre le numéro de section et le titre
+\newlength\spacetitlesec
+\newlength\spacetitlesubsec
+\setlength{\spacetitlesec}{0.5em}
+\setlength{\spacetitlesubsec}{0.2em}
+
+%%%%%%%%%%%%% Titre de section
+
+\renewcommand{\thesection}{\Roman{section}}
+\titleformat{\section}[block]
+{%
+ \bfseries\Large
+ \color{section@title@color}
+ \sectiontitle@font
+}
+{
+\raisebox{\decalnumsec}
+{%
+\begin{tikzpicture}
+\node (numsec) {\sectiontitle@font\thesection};
+\fill[rounded corners=2pt,fill=shadow@color] ($(numsec.north west)+(2pt,-2pt)$) -- ($(numsec.north east)+(1mm,0mm)+(2pt,-2pt)$) -- ($(numsec.south east)+(2pt,-2pt)$) -- ($(numsec.south west)+(-1mm,0)+(2pt,-2pt)$) -- cycle;
+\fill[rounded corners=2pt,fill=section@title@color] (numsec.north west) -- ($(numsec.north east)+(1mm,0mm)$) -- (numsec.south east) -- ($(numsec.south west)+(-1mm,0)$) -- cycle;
+\node[white] at (numsec) {\sectiontitle@font\thesection};
+\end{tikzpicture}
+}
+}
+{\spacetitlesec}
+{}
+
+%%%%%%%%%%%%% Titre de subsection
+
+\renewcommand{\thesubsection}{\arabic{subsection}}
+\titleformat{\subsection}[block]
+{%
+ \hspace*{\decalxtitlesubsec}
+ \bfseries\large
+ \color{subsection@title@color}
+ \subsectiontitle@font
+}
+{
+ \raisebox{\decalnumsubsec}
+ {%
+ \begin{tikzpicture}
+ \node (numsec) {\subsectiontitle@font\thesubsection};
+ \fill[rounded corners=2pt,fill=shadow@color] ($(numsec.north west)+(2pt,-2pt)$) -- ($(numsec.north east)+(1mm,0mm)+(2pt,-2pt)$) -- ($(numsec.south east)+(2pt,-2pt)$) -- ($(numsec.south west)+(-1mm,0)+(2pt,-2pt)$) -- cycle;
+ \fill[rounded corners=2pt,fill=subsection@title@color] (numsec.north west) -- ($(numsec.north east)+(1mm,0mm)$) -- (numsec.south east) -- ($(numsec.south west)+(-1mm,0)$) -- cycle;
+ \node[white] at (numsec) {\subsectiontitle@font\thesubsection};
+ \end{tikzpicture}
+ }
+}
+{%
+ \spacetitlesubsec
+}
+{%
+ %\itemclass{subsection@title@color}{\subsection@font}
+}
+
+\begin{document}
+\thispagestyle{empty}
+
+\begin{center}
+ \begin{tcolorbox}[enhanced,lifted shadow={1mm}{-2mm}{3mm}{0.1mm}{black!50!white},width=0.65\linewidth]
+ \Huge\bfseries\centering ticollege.sty
+ \end{tcolorbox}\vspace{\stretch{1}}
+
+ \TiCCalc[title=documentation]\bigskip
+
+ \today, version 1.0\medskip
+
+ Philippe \bsc{De Sousa} (\href{mailto:philou.desousa@gmail.com}{philou.desousa@gmail.com})
+\end{center}\vspace{\stretch{1}}
+
+\begin{center}
+ \small\bfseries
+ Résumé
+\end{center}
+
+\begin{center}
+ \begin{minipage}{0.9\linewidth}
+ \small\parindent=15pt
+ \begin{wrapfigure}{l}{0.9cm}
+ \TiCCalc*
+ \end{wrapfigure}
+ En collège, les enseignants sont souvent amenés à travailler avec les élèves sur une calculatrice scientifique. La technologie d'aujourd'hui nous permet de vidéo-projeter la calculatrice et certains logiciels permettent de manipuler en même temps que les élèves pour leur montrer les différentes fonctionnalités de toutes les touches.\par\smallskip
+ Mais une fois chez eux, comment se souvenir de ce qui a été fait en classe ?\par\smallskip
+ J'ai créé ce package en m'appuyant sur un modèle de calculatrice répandu au collège afin de constituer des fiches méthodes que les élèves pourront utiliser à la maison et conserver d'année en année.\par
+ \textsf{ticollege.sty} s'appuie beaucoup sur mon précédent package \textsf{tipfr.sty} pour les calculatrices graphiques. Il y a donc de nombreuses similitudes dans l'utilisation des deux packages et, pour un souci d'utilisation commune, j'ai été amené à nommer différemment des commandes effectuant le même travail.
+ \end{minipage}
+\end{center}\clearpage
+
+\tableofcontents
+\vspace*{2cm}
+
+\section{Les touches}
+
+\subsection{Dessiner une touche}
+
+\begin{docCommand}{TiC}{\oarg{options}}
+ Voici la commande qui fournit tous les dessins de touche. L'appel à la commande \cs{TiC} sans aucune option réalise la touche $\sin$ par défaut.
+\end{docCommand}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC
+\end{dispExample*}
+\medbreak
+
+Pour obtenir d'autres types de touches, on utilise alors différentes options auxquelles on spécifie une valeur :\medbreak
+
+\begin{docKey}{style}{=\meta{text}}{valeur par défaut : \docValue{general}}
+Crée un dessin de touche selon le style précisé. Les différentes valeurs sont :
+\end{docKey}
+\begin{description}
+ \item[\docValue{general}] dessine une touche aux bords arrondis pour les touches de fonctions ;
+ \item[\docValue{number}] dessine une touche de forme différentes pour indiquer les chiffres ;
+ \item[\docValue{arrows}] dessine la touche qui représente les quatres flèches de la calculatrice.
+\end{description}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[style=general]
+\TiC[style=number]
+\TiC[style=arrows]
+\end{dispExample*}
+\medbreak
+
+Le style \docValue{number} admet des variantes avec un bord arrondi.
+
+\begin{docKey}{rounded}{=\meta{text}}{valeur par défaut : \docValue{none}}
+Arrondis une touche sur le côté gauche ou droit. Cette option n'a d'incidence que sur le style \docValue{number}.
+\end{docKey}
+\begin{description}
+ \item[\docValue{none}] la touche est rectangulaire ;
+ \item[\docValue{left}] touche arrondie à gauche ;
+ \item[\docValue{right}] touche arrondie à droite.
+\end{description}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[style=number, rounded=left, principal=1]
+\TiC[style=number, rounded=none, principal=2]
+\TiC[style=number, rounded=right, principal=3]
+\end{dispExample*}
+\medbreak
+
+Hormis pour les touches flèches, on constate que la valeur principale par défaut est $\sin$. L'exemple précédent nous montre qu'il est possible de modifier ce texte. De plus, sa position et sa taille sont également modifiable.\medbreak
+
+\begin{docKey}{principal}{=\meta{text}}{valeur par défaut : \docValue{sin}}
+Précise le \meta{text} à mettre à l'intérieur d'une touche. \Speciale
+\end{docKey}
+
+La commande \cs{Aff} a été créée pour dessiner le symbole suivant : \raisebox{-0.5em}{\Aff}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal=stats]
+\TiC[style=number, principal=2]
+\TiC[principal=\Aff]
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{position}{=\meta{nombre}}{valeur par défaut : \docValue{0.9}}
+Permet d'ajuster la position du texte principal à l'intérieur de la touche. \Speciale
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal=op]
+\TiC[principal=op, position = 0.5]
+\TiC[principal=op, position = 1.1]
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{fontsize}{=\meta{dim}}{valeur par défaut : \docValue{6pt}}
+ L'option \docAuxKey{fontsize} permet de modifier ponctuellement la taille de la fonte utilisée dans la touche. \Speciale
+\end{docKey}
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal={$\triangleright$ simp}]
+\TiC[principal={$\triangleright$ simp}, fontsize=5pt, position=1]
+\qquad
+\TiC[style=number, principal=2]
+\TiC[style=number, principal=2,fontsize=9pt]
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{raise}{=\meta{dim}}{valeur par défaut : \docValue{0ex}}
+Permet d'ajuster la hauteur de la touche par rapport à la ligne de base. Les valeurs négatives sont autorisées.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[style=arrows]
+\TiC[style=general]
+\TiC[style=arrows, raise=-0.25cm]
+\end{dispExample*}
+\medbreak
+
+Les touches ne sont pas uniquement composées de leur texte principal. Parfois, elles possèdent une fonction exécutée appelée à l'aide de la touche
+\TiC[principal=2nde, colour text=black, colour key=TIJaune, raise=-1ex].
+
+\begin{docKey}{second}{=\meta{text}}{\sffamily fonction inactive par défaut}
+ \'Ecrit en couleur un texte secondaire centré au dessus de la touche. \Speciale
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal=suppr, second=insérer, position=1]
+\end{dispExample*}
+\medbreak
+
+Les commandes \cs{TiRacine}, \cs{ContrastDown}, \cs{ContrastUp} et \cs{Div} ont été créées pour dessiner différents symboles existant sur la calculatrice :
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal={\large :}, second=\Div]
+\TiC[principal=$x^n$, second={\TiRacine[n]}]
+\TiC[principal=$x^2$, second={\TiRacine}]
+\TiC[principal=$-$, second=\ContrastDown]
+\TiC[principal=$+$, second=\ContrastUp]
+\end{dispExample*}
+\medbreak
+
+Pour finir sur le dessin d'une touche, on peut spécifier la couleur du texte principal et celle du texte secondaire ainsi que la couleur de la touche. Les couleurs \docValue{TIJaune}, \docValue{TIRouge} et \docValue{TIOrange} ont été créées à cette occasion.\medbreak
+
+\begin{docKey}{colour text}{=\meta{colour}}{valeur par défaut : \docValue{white}}
+ Modifie la couleur du texte principal de la touche. \Couleur{text} \Speciale
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal=\textit{cos}, position=1, second=\textit{arccos}]
+\TiC[principal=\textit{cos}, position=1, second=\textit{arccos}, colour text=black]
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{colour second}{=\meta{colour}}{valeur par défaut : \docValue{TIOrange}}
+ Modifie la couleur du texte secondaire de la touche. \Couleur{second} \Speciale
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal=\textit{cos}, position=1, second=\textit{arccos}]
+\TiC[principal=\textit{cos}, position=1, second=\textit{arccos}, colour second=black]
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{colour key}{=\meta{colour}}{valeur par défaut : \docValue{TIRouge}}
+ Modifie la couleur de la touche. \Couleur{key}
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[style=arrows, colour key=TIOrange]
+\TiC[principal=2nde, colour key=TIJaune, colour text=black]
+\TiC[style=number, principal=2, fontsize=9pt, colour key=white, colour text=black]
+\end{dispExample*}
+\medbreak
+
+\subsection{Entourer une touche}
+
+\begin{docKey}{circle}{=\docValue*{true|false}}{valeur par défaut : \docValue{false}}
+ Permet d'entourer la touche à l'aide d'un cercle dont on peut alors préciser le rayon, l'épaisseur et la couleur.
+\end{docKey}
+
+\begin{docKey}{radius}{=\meta{dim}}{valeur par défaut : \docValue{20pt}}
+ On spécifie ici le rayon du cercle qui ne sera pris en compte que si \docAuxKey{circle}=\docValue{true}.
+\end{docKey}
+
+\begin{docKey}{colour circle}{=\meta{colour}}{valeur par défaut : \docValue{red}}
+ On spécifie ici la couleur du cercle qui ne sera prise en compte que si \docAuxKey{circle}=\docValue{true}. \Couleur{circle}
+\end{docKey}
+
+\begin{docKey}{thickness}{=\meta{dim}}{valeur par défaut : \docValue{1pt}}
+ On spécifie ici l'épaisseur du cercle qui ne sera prise en compte que si \docAuxKey{circle}=\docValue{true}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[principal=$x^2$, second={\TiRacine}, circle=true, thickness=0.5pt]
+\TiC[style=arrows, colour key=TIOrange, circle=true, radius=25pt, colour circle=blue]
+\end{dispExample*}
+\medbreak
+
+Chaque petite flèche du style \docValue{arrows} peut-être entouré individuellement. La couleur et l'épaisseur du cercle sont modifiables mais cette fois, le rayon du cercle est fixé.
+
+\begin{docKey}{circleup}{=\docValue*{true|false}}{valeur par défaut : \docValue{false}}
+Entoure la petite flèche du haut.
+\end{docKey}
+
+\begin{docKey}{circledown}{=\docValue*{true|false}}{valeur par défaut : \docValue{false}}
+Entoure la petite flèche du bas.
+\end{docKey}
+
+\begin{docKey}{circleleft}{=\docValue*{true|false}}{valeur par défaut : \docValue{false}}
+Entoure la petite flèche de gauche.
+\end{docKey}
+
+\begin{docKey}{circleright}{=\docValue*{true|false}}{valeur par défaut : \docValue{false}}
+Entoure la petite flèche de droite.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiC[style=arrows, colour key=TIOrange, circleup=true]
+\TiC[style=arrows, colour key=TIOrange, circledown=true, colour circle=blue]
+\TiC[style=arrows, colour key=TIOrange, circleleft=true, circleright=true, colour circle=purple]
+\end{dispExample*}
+\medbreak
+
+\subsection{Nommer une touche}\label{subsec:NomTouche}
+
+\begin{docKey}{name}{=\meta{text}}{valeur par défaut : \docValue{NOM}}
+ La touche sera référencée à l'aide d'un n{\oe}ud nommé \meta{text}.
+\end{docKey}
+
+\begin{dispExample}
+Pour éteindre la calculatrice, on utilise la séquence suivante :
+\begin{center}
+ \TiC[principal=2nde, colour text=black, colour key=TIJaune]
+ \TiC[principal=on, second=off, name=ON]
+\end{center}
+\begin{tikzpicture}[overlay, remember picture, >=latex']
+ \draw[red, line width=1pt] ($(ON)+(0,0.4)$) circle (7pt);
+ \draw[blue, line width=0.5pt, <-, rounded corners=10pt]
+ ($(ON)+(0.4,0.4)$) -- ++(1,0)
+ node[right] {\textsf{off} permet d'éteindre la calculatrice};
+\end{tikzpicture}
+\end{dispExample}
+
+Les touches sont définies au sein d'un environnement \texttt{tikzpicture}. Afin de pouvoir s'y référer à l'intérieur d'un autre environnement de ce type, il faudra penser à utiliser les options \texttt{overlay} et \texttt{remember picture}. De plus, au minimum deux compilations seront nécessaires.
+
+
+
+\section{Créer des menus}
+
+En plus des différentes touches de la calculatrice, on pourra parler aux élèves des menus affichés par la calculatrice
+
+\begin{docCommand}{TiCMenu}{\oarg{options}\marg{nom}}
+ Cette commande écrit \meta{nom} en majuscule dans une fonte à chasse fixe de type {\ttfamily machine à écrire} pour nommer un menu de calculatrice. Ce nom est enfermé dans une boîte à fond blanc exactement à sa taille.
+\end{docCommand}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCMenu{Math} \TiCMenu{num} \TiCMenu{rnd} \TiCMenu{pol}
+\end{dispExample*}
+\medbreak
+
+La taille peut être modifiée à l'aide de l'option suivante
+
+\begin{docKey}{size}{=\meta{dim}}{valeur par défaut : \docValue{15pt}}
+ Si l'unité de mesure n'est pas spécifié dans \meta{dim}, alors le \texttt{pt} sera utilisé par défaut.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCMenu[size=1cm]{Math}
+\TiCMenu{num}
+\TiCMenu[size=8]{rnd}
+\TiCMenu[size=8pt]{pol}
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{select}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Permet d'écrire le nom du menu en blanc sur fond noir pour signifier qu'il est sélectionné.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCMenu{Math} \TiCMenu{num}
+\TiCMenu[select=true]{rnd}
+\TiCMenu{pol}
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{colour box}{=\meta{colour}}{valeur par défaut : \docValue{white}}
+ Détermine la couleur la boîte contenant le texte du menu lorsque celui-ci \textit{n'est pas} sélectionné. \Couleur{box}
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCMenu{Math} \TiCMenu{num}
+\TiCMenu[select=true]{rnd}
+\TiCMenu[colour box=red]{pol}
+\end{dispExample*}
+\medbreak
+
+\begin{docKey}{text}{=\meta{text}}{valeur par défaut : \docValue{\symbol{92}unskip}}
+ Cette dernière option permet de spécifier si un texte doit être écrit à côté du nom du menu. Pratique pour les menus sous forme de listes verticales. Le \meta{text} est sensible à l'option \docAuxKey{size}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCMenu[size=10pt, text={PGCD(}]{1 :}\par
+\TiCMenu[size=10pt, select=true, text=PPCM(]{2 :}\par
+\TiCMenu[size=10pt, text={abs(}]{3 :}
+\end{dispExample*}
+
+Voilà par exemple les quatres menus disponibles avec la touche \TiC[principal={maths},second={système}, raise=-1ex] :
+\begin{center}\renewcommand\tabcolsep{-7pt}
+ \begin{tabular}{*{4}{llll|}}
+ \TiCMenu[size=10,select=true]{Maths} & \TiCMenu[size=10]{num} & \TiCMenu[size=10]{rnd} & \TiCMenu[size=10]{pol} &
+ \TiCMenu[size=10]{Maths} & \TiCMenu[size=10,select=true]{num} & \TiCMenu[size=10]{rnd} & \TiCMenu[size=10]{pol} &
+ \TiCMenu[size=10]{Maths} & \TiCMenu[size=10]{num} & \TiCMenu[size=10,select=true]{rnd} & \TiCMenu[size=10]{pol} &
+ \TiCMenu[size=10]{Maths} & \TiCMenu[size=10]{num} & \TiCMenu[size=10]{rnd} & \TiCMenu[size=10,select=true]{pol} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\TiCMenu[select=true, size=9, text=PGCD(]{1 :}} &
+ \multicolumn{4}{l|}{\TiCMenu[select=true, size=9, text=arrondi(]{1 :}} &
+ \multicolumn{4}{l|}{\TiCMenu[select=true, size=9, text=rand]{1 :}} &
+ \multicolumn{4}{l|}{\TiCMenu[select=true, size=9, text={R$\blacktriangleright$P$r$}]{1 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\TiCMenu[size=9, text=PPCM(]{2 :}} &
+ \multicolumn{4}{l|}{\TiCMenu[size=9, text=reste(]{2 :}} &
+ \multicolumn{4}{l|}{\TiCMenu[size=9, text=randn(]{2 :}} &
+ \multicolumn{4}{l|}{\TiCMenu[size=9, text={R$\blacktriangleright$P$\theta$}]{2 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\TiCMenu[size=9, text=abs(]{3 :}} &
+ \multicolumn{4}{l|}{\TiCMenu[size=9, text=partEnt(]{3 :}} &
+ \multicolumn{4}{l|}{} &
+ \multicolumn{4}{l|}{\TiCMenu[size=9, text={P$\blacktriangleright$R$x$}]{3 :}}
+%
+ \end{tabular}
+\end{center}
+
+
+\section{Afficher un écran}
+\subsection{Généralités}
+
+\begin{docCommand}{TiCScreen}{\oarg{options}\marg{expression/résultat}}
+ Cette commande permet d'afficher un écran de calculatrice.
+\end{docCommand}
+
+\begin{dispExample*}{center lower}
+\TiCScreen{}
+\end{dispExample*}
+
+On peut modifier l'aspect général à l'aide des options suivantes :
+
+\begin{docKey}{colour screen}{=\meta{colour}}{valeur par défaut : \docValue{ForestGreen}\docValue*{!15}}
+ Détermine la couleur de fond de l'écran. \Couleur{screen}
+\end{docKey}
+
+\begin{docKey}{screenname}{=\meta{text}}{valeur par défaut : \docValue{ecran}}
+ Donne un nom à l'écran afin de pouvoir s'y référencer plus tard avec des environnements \texttt{tikzpicture}. Les mêmes précautions que pour les touches doivent être prises (voir sous-section \ref{subsec:NomTouche} page \pageref{subsec:NomTouche}).
+\end{docKey}
+
+\begin{docKey}{width}{=\meta{number}}{valeur par défaut : \docValue{4}}
+Permet de fixer la longueur de l'écran. L'unité de mesure est le \texttt{cm}.
+\end{docKey}
+
+\begin{docKey}{height}{=\meta{number}}{valeur par défaut : \docValue{1}}
+Permet de fixer la largeur de l'écran. L'unité de mesure est le \texttt{cm}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCScreen[width=3, screenname=first]{}
+\TiCScreen[width=3, colour screen=blue!50, screenname=second]{}
+\tikz[remember picture, overlay]{\draw (first.center) circle (5pt);}
+\tikz[remember picture, overlay]{\draw (second.north west) -- (second.south east);}
+\end{dispExample*}
+
+\subsection{\'Ecran de calculs}
+
+Revenons sur l'argument obligatoire de la commande \cs{TiCScreen}. Cet argument est une liste de couples \meta{expression/résultat} séparés par une virgule.\par
+On peut ne rien écrire à la place de \meta{expression} ou \meta{résultat} mais, dans ce cas, il ne faut pas mettre d'espace non plus. Les deux peuvent être laissés vides mais alors rien ne se passe (pas de création de ligne vide).\par
+On pensera à utiliser des accolades si l'expression ou le résultat utilise les symboles \texttt{,} ou \texttt{/}.\medbreak
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCScreen[colour screen=blue!10, height=2, width=6]%
+{%
+3+2/5,
+/,
+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16%
+$\blacktriangleright$/5050}
+\end{dispExample*}
+\medbreak
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCScreen[colour screen=blue!10, height=2, width=6]%
+{%
+$\frac 35$/{0,6},
+{0,6 $\blacktriangleright$\unskip f\unskip$\triangleleft \triangleright$ \unskip d}/{$\downarrow\frac{6}{10}$}
+}
+\end{dispExample*}
+\medbreak
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCScreen[colour screen=blue!10]%
+{%
+{$\frac{6}{10}$ $\blacktriangleright$\unskip simp}/
+{\raisebox{0.5ex}{\scriptsize Fac=2} $\frac{3}{5}$}
+}
+\end{dispExample*}
+\medbreak
+
+\begin{dispExample*}{center lower}
+\TiCScreen[width=6,height=3]{
+{\renewcommand\tabcolsep{-7pt}
+ \begin{tabular}{llll}
+ \TiCMenu[size=10,select=true]{Maths} & \TiCMenu[colour box={ForestGreen!15}, size=10]{num} & \TiCMenu[colour box={ForestGreen!15}, size=10]{rnd} & \TiCMenu[colour box={ForestGreen!15}, size=10]{pol} \\[-8pt]
+ \multicolumn{4}{l}{\TiCMenu[select=true, size=9, text=PGCD(]{1 :}} \\[-8pt]
+ \multicolumn{4}{l}{\TiCMenu[colour box={ForestGreen!15}, size=9, text=PPCM(]{2 :}} \\[-8pt]
+ \multicolumn{4}{l}{\TiCMenu[colour box={ForestGreen!15}, size=9, text=abs(]{3 :}}
+ \end{tabular}
+}/{}
+}
+\end{dispExample*}
+
+\section{La calculatrice}
+\subsection{Version grand format}
+
+\begin{docCommand}{TiCCalc}{\oarg{options}}
+ Cette commande permet d'afficher la calculatrice en entier. Chaque touche a été nommée individuellement pour pouvoir s'y référer. Le tableau suivant donne le nom de chaque touche.
+\end{docCommand}
+
+\noindent%
+\begin{tabularx}{\linewidth}{>{\bfseries}c *{8}{>{\centering\arraybackslash} X}}
+ \hline
+ Touche & \TiC[principal=2nde, colour key=TIJaune, colour text=black, name=scd] &
+ \TiC[principal=mode, second=quitter, name=mode] &
+ \TiC[principal=suppr, second=insérer, name=supp, position=1.1] &
+ \TiC[principal={$\boldsymbol{\frac{n}{d}}$}, second={$\boldsymbol{f \triangleleft\triangleright d}$}, fontsize=7pt, name=nd] &
+ \TiC[principal=stats, second=stats calc, name=stats] &
+ \TiC[principal={$\boldsymbol{f(x)}$}, second=expr, name=fx] &
+ \TiC[principal={$\triangleright$ simp}, second={$\triangleright$ décomp}, name=simp, fontsize=5pt]&
+ \TiC[principal={$\times 10^n$}, second={$\frac1x$}, name=pdix]\\
+\hline
+ Nom & scd & mode & supp & nd & stats & fx & simp & pdix\\
+\hline\hline
+ Touche & \TiC[principal=op, second=déf op, name=op, position=1.1] &
+ \TiC[principal=maths, second=système, name=math] &
+ \TiC[principal=annul, name=annul] &
+ \TiC[principal={\large$\pi$}, second=angle, name=pi] &
+ \TiC[principal={\itshape sin}, second={\itshape arcsin}, name=sin] &
+ \TiC[principal={\itshape cos}, second={\itshape arccos}, name=cos] &
+ \TiC[principal={\itshape tan}, second={\itshape arctan}, name=tan] &
+ \TiC[principal=$\div$, second=\Div, colour key=TIOrange, name=div] \\
+\hline
+ Nom & op & math & annul & pi & sin & cos & tan & div \\
+\hline\hline
+ Touche & \TiC[principal={$x^n$}, second={\TiRacine[n]}, name=pow] &
+ \TiC[principal=\%, second={$\triangleright$ \%}, name=pcent] &
+ \TiC[principal={(}, second={$\triangleright a\, \cdot 10^n$}, name=PO] &
+ \TiC[principal={)}, second={$\triangleright$ norm}, name=PF] &
+ \TiC[principal=$\times$, colour key=TIOrange, name=times] &
+ \TiC[principal={$x^2$}, second={\TiRacine}, name=sqr] &
+ \TiC[style=number, principal=7, rounded=left, colour key=white, colour text=black, name=T7] &
+ \TiC[style=number, principal=8, colour key=white, colour text=black, name=T8] \\
+\hline
+ Nom & pow & pcent & PO & PF & times & sqr & T7 & T8 \\
+\hline\hline
+ Touche & \TiC[style=number, principal=9, rounded=right, colour key=white, colour text=black, name=T9] &
+ \TiC[principal=$-$, second=\ContrastDown, colour key=TIOrange, name=sub] &
+ \TiC[principal={$x^{yzt}_{abc}$}, second={eff var}, name=var] &
+ \TiC[style=number, principal=4, rounded=left, colour key=white, colour text=black, name=T4] &
+ \TiC[style=number, principal=5, colour key=white, colour text=black, name=T5] &
+ \TiC[style=number, principal=6, rounded=right, colour key=white, colour text=black, name=T6] &
+ \TiC[principal=$+$, second=\ContrastUp, colour key=TIOrange, name=plus] &
+ \TiC[principal={sto $\triangleright$}, second={rap var}, name=sto] \\
+\hline
+ Nom & T9 & sub & var & T4 & T5 & T6 & plus & sto \\
+\hline\hline
+ Touche & \TiC[style=number, principal=1, rounded=left, colour key=white, colour text=black, name=T1] &
+ \TiC[style=number, principal=2, colour key=white, colour text=black, name=T2] &
+ \TiC[style=number, principal=3, rounded=right, colour key=white, colour text=black, name=T3] &
+ \TiC[principal=\Aff, colour key=TIOrange, name=aff] &
+ \TiC[principal={on}, second={off}, name=on] &
+ \TiC[style=number, principal=0, second=réinit, rounded=left, colour key=white, colour text=black, name=T0] &
+ \TiC[style=number, principal={,}, fontsize=9pt, position=1.2, second={;}, colour key=white, colour text=black, name=virgule] &
+ \TiC[style=number, principal=(--), second=rép, rounded=right, colour key=white, colour text=black, name=minus] \\
+\hline
+ Nom & T1 & T2 & T3 & aff & on & T0 & virgule & minus \\
+\hline\hline
+ Touche & \TiC[principal=entrer, colour key=TIOrange, fontsize=5pt, name=entrer] & \textbf{Nom} & entrer &
+ \textbf{Touche} & \multicolumn{2}{c}{\TiC[style=arrows, colour key=TIOrange, name=arrows, raise=-0.3cm]} & \textbf{Nom} & arrows
+\end{tabularx}\label{tableau}
+
+\begin{docKey}{title}{=\meta{text}}{valeur par défaut : \docValue{TI-Collège}}
+ Permet de spécifier un titre au-dessus de l'écran de la calculatrice.
+\end{docKey}
+
+\begin{docKey}{colour calc}{=\meta{colour}}{valeur par défaut : \docValue{TIOrange}\docValue*{!50}}
+ Détermine la couleur de la calculatrice. \Couleur{calc}
+\end{docKey}
+
+\begin{dispListing}
+\TiCCalc[title=Structure, colour calc=brown!20]
+\begin{tikzpicture}[overlay, remember picture]
+ \draw[blue, line width=1pt,rounded corners = 5pt]
+ ($(T0) + (-0.6,-0.3)$) -|
+ ($(T9) + (0.5,0.4)$) -| cycle;
+ \node[blue] at ($(virgule)+(0,-0.65)$) {\textbf Touches numériques};
+\end{tikzpicture}
+\end{dispListing}
+
+\begin{center}
+\TiCCalc[title=Structure, colour calc=brown!20]
+\begin{tikzpicture}[overlay, remember picture]
+ \draw[blue, line width=1pt,rounded corners = 5pt]
+ ($(T0) + (-0.6,-0.3)$) -|
+ ($(T9) + (0.5,0.4)$) -| cycle;
+ \node[blue] at ($(virgule)+(0,-0.65)$) {\textbf Touches numériques};
+\end{tikzpicture}
+\end{center}
+
+\subsection{Version petit format}
+
+\begin{docCommand}{TiCCalc*}{\oarg{options}}
+ Cette commande permet d'afficher une calculatrice en petit format à utiliser dans des fiches méthodes par exemple.
+\end{docCommand}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCCalc*
+\end{dispExample*}
+
+L'aspect de la calculatrice est modifiable.
+
+\begin{docKey}{calcscale}{=\meta{number}}{valeur par défaut : \docValue{0.5}}
+Permet de modifier la taille de la calculatrice. Plus la calculatrice est petite, moins les dessins de touches seront précis.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCCalc*[calcscale=1]
+\TiCCalc*[calcscale=0.25]
+\end{dispExample*}
+
+\begin{docKey}{calcrotate}{=\meta{number}}{valeur par défaut : \docValue{-30}}
+Permet de changer l'angle d'affichage de la calculatrice.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCCalc*[calcrotate=0] \textbf{Méthode}
+\qquad
+\TiCCalc*[calcrotate=90] \textbf{Méthode}
+\par\bigskip
+\TiCCalc*[calcrotate=-30]
+\hspace{-1em}\textbf{Méthode}
+\qquad
+\rotatebox{90}{\textbf{Méthode}}
+\TiCCalc*[calcrotate=0]
+\end{dispExample*}
+
+\begin{docKey}{calcraise}{=\meta{dim}}{valeur par défaut : \docValue{-2ex}}
+Permet de modifier la hauteur de la calculatrice en fonction de la ligne de base.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\TiCCalc*[calcrotate=0, calcraise=0ex] \textbf{Méthode}
+\qquad
+\rotatebox{90}{\textbf{Méthode}}
+\TiCCalc*[calcrotate=0, calcraise=1ex]
+\end{dispExample*}
+
+
+\clearpage
+
+\printindex
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/ticollege/latex/ticollege.sty b/graphics/pgf/contrib/ticollege/latex/ticollege.sty
new file mode 100644
index 0000000000..aaf7aa7151
--- /dev/null
+++ b/graphics/pgf/contrib/ticollege/latex/ticollege.sty
@@ -0,0 +1,454 @@
+%---------------
+% Licence
+%---------------
+%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.
+
+
+\def\fileversion{1.0}
+\def\filedate{2015/02/15}
+\def\fileauthor{Philippe DE SOUSA}
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{ticollege}[%
+ \filedate\space v\fileversion\space
+ LaTeX package by \fileauthor]
+\RequirePackage[dvipsnames,table]{xcolor}
+\RequirePackage[zerostyle=d]{newtxtt}
+\@ifpackageloaded{tikz}{}{\RequirePackage{tikz}}
+\usetikzlibrary{calc,shapes,arrows,shadows,backgrounds,babel}
+\@ifpackageloaded{ifthen}{}{\RequirePackage{ifthen}}
+\@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}}
+\@ifpackageloaded{mathtools}{}{\RequirePackage{mathtools}}
+\@ifpackageloaded{amssymb}{}{\RequirePackage{amssymb}}
+\@ifpackageloaded{multido}{}{\RequirePackage{multido}}
+\@ifpackageloaded{multirow}{}{\RequirePackage{multirow}}
+
+%% 15 février 2015 : v1.0
+
+
+%%-----------------------------
+%-- Couleurs
+%%-----------------------------
+\definecolor{TIRouge}{RGB}{215,64,45}
+\definecolor{TIOrange}{RGB}{239,148,69}
+\definecolor{TIJaune}{RGB}{254,212,75}
+
+%%-----------------------------
+%-- Symboles particuliers
+%%-----------------------------
+
+% définition de la racine carrée
+\newcommand*\TiRacine[1][]{$\sqrt[#1]{\phantom{x}}$}
+% définition des dessins de contrast
+\newcommand*{\ContrastUp}{
+ \tikz{
+ \draw[orange] (0,0) circle[radius = 0.2];
+ \fill[orange] (0,0.2) arc[radius=0.2, start angle=90, end angle=-90] -- cycle;
+ \fill[orange] (0.45,0) -- ++(150:0.2) -- ++(0,-0.2) -- cycle;
+ }
+}
+\newcommand*{\ContrastDown}{
+ \tikz{
+ \draw[orange] (0,0) circle[radius = 0.2];
+ \fill[orange] (0,0.2) arc[radius=0.2, start angle=90, end angle=-90] -- cycle;
+ \fill[orange] (-0.45,0) -- ++(30:0.2) -- ++(0,-0.2) -- cycle;
+ }
+}
+% définition du symbole aff
+\newcommand*{\Aff}{
+ \tikz[scale=0.7]{
+ \draw (0,0) node[scale=0.7] {\scriptsize\textsf{aff}};
+ \draw[->, >=latex'] ({0.5*cos(40)},{0.4*sin(140)}) arc[x radius=0.5, y radius=0.4, start angle=40, end angle=140];
+ \draw[->, >=latex'] ({0.5*cos(220)},{0.4*sin(320)}) arc[x radius=0.5, y radius=0.4, start angle=220, end angle=320];
+ }
+}
+
+% définition du symbole de la division posée
+\newcommand*{\Div}{\tikz{\draw[thick] (0,0) -- (0,0.5) (0,0.35)--(0.2,0.35);}}
+
+
+%%-----------------------------
+%--- Définitions auxiliaires + xkeyval
+%%-----------------------------
+
+% création de booléen pour tester les styles de touche
+\newcommand*{\TiCDef@Bool}[1]{%
+\newboolean{#1}
+\setboolean{#1}{false}
+}
+\newcommand*{\TiCDefBool}[1]{\TiCDef@Bool{#1}}
+
+\TiCDefBool{TiCChiffre}
+\TiCDefBool{TiCGeneral}
+\TiCDefBool{TiCFleches}
+\TiCDefBool{TiCModeSeconde}
+\TiCDefBool{ArrondiToucheGauche}
+\TiCDefBool{ArrondiToucheDroit}
+% pour entourer une touche :
+\define@boolkey{PresetTiC}{circle}[false]{}
+% pour entourer la touche de flèche
+\define@boolkey{PresetTiC}{circleup}[false]{}
+\define@boolkey{PresetTiC}{circleleft}[false]{}
+\define@boolkey{PresetTiC}{circleright}[false]{}
+\define@boolkey{PresetTiC}{circledown}[false]{}
+
+% Définitions des styles disponibles
+\define@choicekey{PresetTiC}{style}%
+ {general, number, arrows}%
+ {\ifthenelse{\equal{\string #1}{\string number}}%
+ {\setboolean{TiCChiffre}{true}}
+ {\setboolean{TiCChiffre}{false}}%
+ \ifthenelse{\equal{\string #1}{\string general}}%
+ {\setboolean{TiCGeneral}{true}}
+ {\setboolean{TiCGeneral}{false}}%
+ \ifthenelse{\equal{\string #1}{\string arrows}}%
+ {\setboolean{TiCFleches}{true}}
+ {\setboolean{TiCFleches}{false}}%
+ }
+
+% Définitions des touches arrondis
+\define@choicekey{PresetTiC}{rounded}%
+ {left, right, none}%
+ {\ifthenelse{\equal{\string #1}{\string left}}%
+ {\setboolean{ArrondiToucheGauche}{true}}
+ {\setboolean{ArrondiToucheGauche}{false}}%
+ \ifthenelse{\equal{\string #1}{\string right}}%
+ {\setboolean{ArrondiToucheDroit}{true}}
+ {\setboolean{ArrondiToucheDroit}{false}}%
+ \ifthenelse{\equal{\string #1}{\string none}}%
+ {\setboolean{ArrondiToucheDroit}{false}\setboolean{ArrondiToucheGauche}{false}}
+ {\relax}%
+ }
+
+% Définitions des keys
+% les couleurs
+\define@key{PresetTiC}{color key}{\def\Couleur@Touche{#1}}
+\define@key{PresetTiC}{colour key}{\def\Couleur@Touche{#1}}
+\define@key{PresetTiC}{color text}{\def\Couleur@Texte{#1}}
+\define@key{PresetTiC}{colour text}{\def\Couleur@Texte{#1}}
+\define@key{PresetTiC}{color second}{\def\Couleur@Seconde{#1}}
+\define@key{PresetTiC}{colour second}{\def\Couleur@Seconde{#1}}
+\define@key{PresetTiC}{colour circle}{\def\Couleur@Cercle{#1}}
+\define@key{PresetTiC}{color circle}{\def\Couleur@Cercle{#1}}
+% taille du texte
+\define@key{PresetTiC}{fontsize}{\def\Font@Size{#1}}
+% hauteur de la touche
+\define@key{PresetTiC}{raise}{\def\Hauteur@Touche{#1}}
+% texte principal de la touche
+\define@key{PresetTiC}{principal}{\def\Le@Principal{\fontsize{\Font@Size}{\Font@Size}\selectfont\color{\Couleur@Texte} #1}}
+% position du texte principal à l'interieur de la touche
+\define@key{PresetTiC}{position}{\def\La@Position{#1}}
+% nom de la touche pour des utilisations dans tikzpicture
+\define@key{PresetTiC}{name}{\def\Le@Nom{#1}}
+% pour entourer une touche
+\define@key{PresetTiC}{radius}{\def\Le@Rayon{#1}}
+\define@key{PresetTiC}{thickness}{\def\Ep@isseur{#1}}
+% texte secondaire
+\define@key{PresetTiC}{second}{\ifthenelse{\equal{\string #1}{\string pasdeseconde}}%
+ {\setboolean{TiCModeSeconde}{false}}%
+ {\def\Mode@Seconde{\fontsize{\Font@Size}{\Font@Size}\selectfont\color{\Couleur@Seconde} #1}
+ \setboolean{TiCModeSeconde}{true}}%
+ }
+
+% configurations par défaut
+\presetkeys{PresetTiC}{style=general, principal=sin, second=pasdeseconde,
+ position=0.9, raise=0ex, fontsize=6pt, name=NOM,
+ rounded=none, colour second=TIOrange, colour key=TIRouge, colour text=white,
+ circle=false, radius=20pt, colour circle=red, thickness=1pt,
+ circleup=false, circleleft=false, circledown=false, circleright=false}{}
+
+
+
+
+%%-----------------------------
+% commande \TiC dont la forme dépend du style choisi
+%%-----------------------------
+
+\newcommand*\TiC[1][]{%
+\setkeys{PresetTiC}{#1}%
+%%-----------------------------
+% Touche colorée pour les fonctions
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{TiCGeneral}}%
+ {\unskip
+ \begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=\Couleur@Touche] (0.35,1) -- ++(1,0) arc[start angle = 90, end angle = -90, x radius = 0.35, y radius = 0.5]
+ -- ++(-1,0) arc[start angle=270, end angle=90, x radius = 0.35, y radius = 0.5] -- cycle;
+ \path (0.85,1) -- (0.85,0.5) node[pos=\La@Position] (c) {\bfseries \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@PresetTiC@circle\draw[\Couleur@Cercle,line width=\Ep@isseur] (c) circle[radius=\Le@Rayon];\fi
+ \ifthenelse{\boolean{TiCModeSeconde}} %
+ {\node[above] at (0.85,1) {\bfseries\sffamily\Mode@Seconde};} %
+ {}
+ \end{tikzpicture}
+ }%
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche colorée pour les chiffres
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{TiCChiffre}}%
+ {\ifthenelse{\boolean{ArrondiToucheGauche}}%
+ {\unskip%
+ \begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=\Couleur@Touche] (0.85,1) -| ++(-0.5,0) arc[start angle = 90, end angle = 270, x radius = 0.35, y radius = 0.5] -| ++(0.5,0);
+ \draw[fill=\Couleur@Touche, rounded corners=1.5pt] (0.8,0) -| (1.7,0.5) |- ++(-0.3,0.5) -- (0.8,1);
+ \node (c) at (0.85,0.5) {\bfseries \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@PresetTiC@circle\draw[\Couleur@Cercle,line width=\Ep@isseur] (c) circle[radius=\Le@Rayon];\fi
+ \ifthenelse{\boolean{TiCModeSeconde}} %
+ {\node[above] at (0.85,1) {\bfseries\sffamily\Mode@Seconde};} %
+ {}
+ \end{tikzpicture}}%
+ {\ifthenelse{\boolean{ArrondiToucheDroit}}%
+ {\unskip%
+ \begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=\Couleur@Touche] (0.85,1) -| ++(0.5,0) arc[start angle = 90, end angle = -90, x radius = 0.35, y radius = 0.5] -| ++(-0.85,0);
+ \draw[fill=\Couleur@Touche, rounded corners=1.5pt] (0.85,0) -| (0,0.5) |- ++(0.3,0.5) -- (0.85,1);
+ \node (c) at (0.85,0.5) {\bfseries \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@PresetTiC@circle\draw[\Couleur@Cercle,line width=\Ep@isseur] (c) circle[radius=\Le@Rayon];\fi
+ \ifthenelse{\boolean{TiCModeSeconde}} %
+ {\node[above] at (0.85,1) {\bfseries\sffamily\Mode@Seconde};} %
+ {}
+ \end{tikzpicture}}%
+ {\unskip%
+ \begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=\Couleur@Touche, rounded corners=1.5pt] (0.85,1) -| ++(0.85,-0.5) |- ++(-0.85,-0.5) -| ++(-0.85,0.5) |- ++(0.3,0.5) -- cycle;
+ \node (c) at (0.85,0.5) {\bfseries \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@PresetTiC@circle\draw[\Couleur@Cercle,line width=\Ep@isseur] (c) circle[radius=\Le@Rayon];\fi
+ \ifthenelse{\boolean{TiCModeSeconde}} %
+ {\node[above] at (0.85,1) {\bfseries\sffamily\Mode@Seconde};} %
+ {}
+ \end{tikzpicture}}}}%
+ {\unskip}
+}%
+%%-----------------------------
+% Touche colorée pour les flèches
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{TiCFleches}}%
+ {\unskip
+ \begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=\Couleur@Touche] (0,1) -- ++(1,0) arc[start angle = 90, end angle = -90, radius = 1]
+ -- ++(-1,0) arc[start angle=270, end angle=90, radius = 1] -- cycle;
+ \draw[fill=\Couleur@Touche, scale=0.25] (0.5,1) -- ++(3,0) arc[start angle = 90, end angle = -90, radius = 1]
+ -- ++(-3,0) arc[start angle=270, end angle=90, radius = 1] -- cycle;
+ \fill[white] (0.5,0.75) -- ++(-60:0.3) -- ++(-0.3,0) -- cycle; %up
+ \fill[yscale=-1,white] (0.5,0.75) -- ++(-60:0.3) -- ++(-0.3,0) -- cycle; % down
+ \fill[white] (-0.75,0) -- ++(-30:0.3) -- ++(0,0.3) -- cycle; % left
+ \fill[white] (1.75,0) -- ++(150:0.3) -- ++(0,-0.3) -- cycle; % right
+ \coordinate (FLE) at (0.5,0);
+ \ifKV@PresetTiC@circle\draw[\Couleur@Cercle,line width=\Ep@isseur] (FLE) circle[radius=\Le@Rayon];\fi
+ \coordinate (FLH) at (0.5,0.6);
+ \coordinate (FLB) at (0.5,-0.6);
+ \coordinate (FLD) at (1.6,0);
+ \coordinate (FLG) at (-0.6,0);
+ \ifKV@PresetTiC@circledown\draw[\Couleur@Cercle,line width=\Ep@isseur] (FLB) circle (5pt);\fi
+ \ifKV@PresetTiC@circleleft\draw[\Couleur@Cercle,line width=\Ep@isseur] (FLG) circle (5pt);\fi
+ \ifKV@PresetTiC@circleup\draw[\Couleur@Cercle,line width=\Ep@isseur] (FLH) circle (5pt);\fi
+ \ifKV@PresetTiC@circleright\draw[\Couleur@Cercle,line width=\Ep@isseur] (FLD) circle (5pt);\fi
+ \end{tikzpicture}
+ }%
+ {\unskip}%
+}%
+}
+
+%%-----------------------------
+%------ CALCULATRICE ----------
+%%-----------------------------
+
+% options de la commande \Calculator*
+\define@key{TiCalc}{calcscale}{\def\Calc@Echelle{#1}}
+\define@key{TiCalc}{calcrotate}{\def\Calc@Rotation{#1}}
+\define@key{TiCalc}{calcraise}{\def\Calc@Position{#1}}
+% options de la commande \Calculator
+\define@key{TiCalc}{colour calc}{\def\Couleur@Calc{#1}}
+\define@key{TiCalc}{color calc}{\def\Couleur@Calc{#1}}
+\define@key{TiCalc}{title}{\def\Titre@Calc{#1}}
+
+% configurations par défaut pour \Calculatrice*
+\presetkeys{TiCalc}{calcscale=0.5,calcrotate=-30,calcraise=-2ex, colour calc=TIOrange!50, title=TI-Collège}{}
+%
+%%-----------------------------
+%-------- Grand format --------
+%%-----------------------------
+\newcommand{\Calculator@nostar}[1][]{
+\setkeys{TiCalc}{#1}%
+\begin{tikzpicture}[remember picture]
+ \renewcommand{\tabcolsep}{-3pt}
+ \node (tabcalc) at (0,0) {
+ \begin{tabular}{*{5}{c}}
+ \TiC[principal=2nde, colour key=TIJaune, colour text=black, name=scd] &
+ \TiC[principal=mode, second=quitter, name=mode] &
+ \TiC[principal=suppr, second=insérer, name=supp, position=1.1] &
+ \multicolumn{2}{c}{\multirow{3}{*}{\TiC[style=arrows, colour key=TIOrange, name=arrows]}} \\
+ %
+ \TiC[principal={$\boldsymbol{\frac{n}{d}}$}, second={$\boldsymbol{f \triangleleft\triangleright d}$}, fontsize=7pt, name=nd] &
+ \TiC[principal=stats, second=stats calc, name=stats] &
+ \TiC[principal={$\boldsymbol{f(x)}$}, second=expr, name=fx] & & \\
+ %
+ \TiC[principal={$\triangleright$ simp}, second={$\triangleright$ décomp}, name=simp, fontsize=5pt] &
+ \TiC[principal={$\times 10^n$}, second={$\frac1x$}, name=pdix] &
+ \TiC[principal=op, second=déf op, name=op, position=1.1] &
+ \TiC[principal=maths, second=système, name=math] &
+ \TiC[principal=annul, name=annul] \\
+ %
+ \TiC[principal={\large$\pi$}, second=angle, name=pi] &
+ \TiC[principal={\itshape sin}, second={\itshape arcsin}, name=sin] &
+ \TiC[principal={\itshape cos}, second={\itshape arccos}, name=cos] &
+ \TiC[principal={\itshape tan}, second={\itshape arctan}, name=tan] &
+ \TiC[principal=$\div$, second=\Div, colour key=TIOrange, name=div] \\
+ %
+ \TiC[principal={$x^n$}, second={\TiRacine[n]}, name=pow] &
+ \TiC[principal=\%, second={$\triangleright$ \%}, name=pcent] &
+ \TiC[principal={(}, second={$\triangleright a\, \cdot 10^n$}, name=PO] &
+ \TiC[principal={)}, second={$\triangleright$ norm}, name=PF] &
+ \TiC[principal=$\times$, colour key=TIOrange, name=times] \\
+ %
+ \TiC[principal={$x^2$}, second={\TiRacine}, name=sqr] &
+ \TiC[style=number, principal=7, rounded=left, colour key=white, colour text=black, name=T7] &
+ \TiC[style=number, principal=8, colour key=white, colour text=black, name=T8] &
+ \TiC[style=number, principal=9, rounded=right, colour key=white, colour text=black, name=T9] &
+ \TiC[principal=$-$, second=\ContrastDown, colour key=TIOrange, name=sub] \\
+ %
+ \TiC[principal={$x^{yzt}_{abc}$}, second={eff var}, name=var] &
+ \TiC[style=number, principal=4, rounded=left, colour key=white, colour text=black, name=T4] &
+ \TiC[style=number, principal=5, colour key=white, colour text=black, name=T5] &
+ \TiC[style=number, principal=6, rounded=right, colour key=white, colour text=black, name=T6] &
+ \TiC[principal=$+$, second=\ContrastUp, colour key=TIOrange, name=plus] \\
+ %
+ \TiC[principal={sto $\triangleright$}, second={rap var}, name=sto] &
+ \TiC[style=number, principal=1, rounded=left, colour key=white, colour text=black, name=T1] &
+ \TiC[style=number, principal=2, colour key=white, colour text=black, name=T2] &
+ \TiC[style=number, principal=3, rounded=right, colour key=white, colour text=black, name=T3] &
+ \TiC[principal=\Aff, colour key=TIOrange, name=aff] \\
+ %
+ \TiC[principal={on}, second={off}, name=on] &
+ \TiC[style=number, principal=0, second=réinit, rounded=left, colour key=white, colour text=black, name=T0] &
+ \TiC[style=number, principal={,}, fontsize=9pt, position=1.2, second={;}, colour key=white, colour text=black, name=virgule] &
+ \TiC[style=number, principal=(--), second=rép, rounded=right, colour key=white, colour text=black, name=minus] &
+ \TiC[principal=entrer, colour key=TIOrange, fontsize=5pt, name=entrer] \\
+ \end{tabular}%
+ };
+ % Ecran
+ \node (ecran) at ($(tabcalc.north west)+(0.2,0)$) [inner sep=0pt,rectangle,
+ minimum width=5.5cm,minimum height=2cm,anchor=south west] {};
+ \draw[fill=ForestGreen!15] ($(tabcalc.north west)+(0.2,0)$) rectangle ($(tabcalc.north east)+(-0.2,2)$);
+ % Corps de la calculatrice
+ \begin{scope}[on background layer]
+ \draw[fill=\Couleur@Calc, rounded corners=25pt]
+ ($(ecran.north) + (0.5,1.25)$) -|
+ ($(tabcalc.east) + (0.25,0)$) |-
+ ($(tabcalc.south) + (0,-0.25)$) -|
+ ($(tabcalc.west) + (-0.25,0)$) |-
+ ($(ecran.north) + (-0.5,1.25)$) -- cycle;
+ \node at ($(ecran.north) + (0,0.5)$) {{\Large\bfseries\sffamily \Titre@Calc}};
+ \end{scope}
+\end{tikzpicture}
+}
+
+%%-----------------------------
+%-------- Petit format --------
+%%-----------------------------
+\newcommand*{\Calculator@star}[1][]{%
+\setkeys{TiCalc}{#1}%
+\raisebox{\Calc@Position}{%
+\begin{tikzpicture}[x=0.5cm,scale=\Calc@Echelle,rotate=\Calc@Rotation]
+ \draw[fill=black, rounded corners=3pt] (0,0) rectangle (2.1,1.5);
+ \draw[white,fill=white] (0.1,1.15) rectangle (2,1.4);
+ \fill[white] (1.55,0.9) ellipse[x radius=0.4, y radius=0.1];
+ \fill[white,rounded corners=2] (0.1,0.8) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (0.6,0.8) rectangle ++(0.4,0.2);
+%%
+ \fill[white,rounded corners=2] (0.1,0.45) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (0.6,0.45) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.1,0.45) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.6,0.45) rectangle ++(0.4,0.2);
+%%
+ \fill[white,rounded corners=2] (0.1,0.1) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (0.6,0.1) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.1,0.1) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.6,0.1) rectangle ++(0.4,0.2);
+%%
+\end{tikzpicture}%
+}
+}
+
+%%-----------------------------
+%\TiCCalc = Grand format-
+%\TiCCalc* = Petit format-
+%%-----------------------------
+\newcommand*\TiCCalc{\@ifstar{\Calculator@star}{\Calculator@nostar}}
+
+%%-----------------------------
+%------ ECRAN ------------------
+%%-----------------------------
+
+
+\newcounter{TiCLineCommand}
+\setcounter{TiCLineCommand}{0}
+\newcounter{TiCLineResult}
+\setcounter{TiCLineResult}{0}
+
+% Définition des keys
+\define@key{TiCScreen}{color screen}{\def\Couleur@Ecran{#1}}
+\define@key{TiCScreen}{colour screen}{\def\Couleur@Ecran{#1}}
+\define@key{TiCScreen}{screenname}{\def\Nom@Ecran{#1}}
+\define@key{TiCScreen}{width}{\def\L@ngueur{#1}}
+\define@key{TiCScreen}{height}{\def\H@uteur{#1}}
+
+% Configurations par défaut
+\presetkeys{TiCScreen}{colour screen=ForestGreen!15,
+ screenname=ecran,
+ width=4, height=1}{}
+
+% Commande \Ecran
+\newcommand*\TiCScreen[2][]{%
+\setcounter{TiCLineCommand}{0}
+\setcounter{TiCLineResult}{0}
+\setkeys{TiCScreen}{#1}
+\begin{tikzpicture}[remember picture]
+ \node (\Nom@Ecran) at (0,0) [inner sep=0pt, draw, fill=\Couleur@Ecran, rectangle, minimum width=\L@ngueur cm,
+ minimum height=\H@uteur cm,anchor=south west] {};
+ \clip (0,0) rectangle (\L@ngueur,\H@uteur);
+ \foreach \command/\result in {#2}
+ {\ifx\command\empty {\addtocounter{TiCLineResult}{-1}\addtocounter{TiCLineCommand}{1}} \else
+ \node[anchor=north west] at ($(\Nom@Ecran.north west)+(0,-\theTiCLineCommand/2)$) {\texttt{\command}};
+ \addtocounter{TiCLineCommand}{2}\fi
+ \ifx\result\empty {\addtocounter{TiCLineCommand}{-1}\addtocounter{TiCLineResult}{1}} \else
+ \node[anchor=north east] at ($(\Nom@Ecran.north east)+(0,-0.5-\theTiCLineResult/2)$) {\texttt{\result}};
+ \addtocounter{TiCLineResult}{2}\fi}
+\end{tikzpicture}
+}
+
+%%-----------------------------
+%------ MENU ------------------
+%%-----------------------------
+
+% Définitions des options
+\define@boolkey{TiCMenu}{select}[false]{}
+\define@key{TiCMenu}{size}{\def\t@ille{#1}}
+\define@key{TiCMenu}{text}{\def\@texte{#1}}
+\define@key{TiCMenu}{colour box}{\def\Couleur@Boite{#1}}
+\define@key{TiCMenu}{color box}{\def\Couleur@Boite{#1}}
+
+% Valeurs par défaut
+\presetkeys{TiCMenu}{select=false,text=\unskip,colour box=white}{size=15pt}
+
+% Définition de la touche \Menu
+\newcommand\TiC@Menu[2][]{
+\setlength{\fboxsep}{0pt} \setlength{\fboxrule}{0.5pt}
+\setkeys{TiCMenu}{#1}
+\ifKV@TiCMenu@select \tikz[font=\ttfamily\bfseries]{\node (texte)
+{\fontsize{\t@ille}{0}\selectfont\colorbox{black}{\color{white}\protect\uppercase{#2}}};\draw
+(texte) node[right=10pt] {\fontsize{\t@ille}{0}\selectfont\@texte};} \else
+\tikz[font=\ttfamily\bfseries]{\node (texte)
+{\fontsize{\t@ille}{0}\selectfont\colorbox{\Couleur@Boite}{\color{black}\protect\uppercase{#2}}};\draw
+(texte) node[right=10pt] {\fontsize{\t@ille}{0}\selectfont\@texte};} \fi }
+
+\newcommand\TiCMenu[2][]{\TiC@Menu[#1]{#2}}
diff --git a/graphics/pgf/contrib/tikz-3dplot/CHANGELOG b/graphics/pgf/contrib/tikz-3dplot/CHANGELOG
new file mode 100644
index 0000000000..951f54c75a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-3dplot/CHANGELOG
@@ -0,0 +1,5 @@
+Package Name: tikz-3dplot
+Author Name: Jeff Hein
+License: LaTeX Project Public License
+
+Changes: see tikz-3dplot_changelog.tex for details
diff --git a/graphics/pgf/contrib/tikz-3dplot/README b/graphics/pgf/contrib/tikz-3dplot/README
new file mode 100644
index 0000000000..658efae422
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-3dplot/README
@@ -0,0 +1,13 @@
+Package Name: tikz-3dplot
+
+Author Name: Jeff Hein
+
+License: LaTeX Project Public License
+
+Description: The tikz-3dplot package provides straightforward ways to define three-dimensional
+coordinate frames through which to plot in TikZ. The user can specify the orientation of the
+main coordinate frame, and use standard TikZ commands and coordinates to render their
+tikzfigure. A secondary coordinate frame is provided to allow rotations and translations with
+respect to the main coordinate frame. In addition, The tikz-3dplot package can also handle
+plotting user-specified functions in spherical polar coordinates, where both the radius and
+fill color can be expressed as parametric functions of polar angles.
diff --git a/graphics/pgf/contrib/tikz-3dplot/externalize_images.bat b/graphics/pgf/contrib/tikz-3dplot/externalize_images.bat
new file mode 100644
index 0000000000..027f298413
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-3dplot/externalize_images.bat
@@ -0,0 +1,7 @@
+rem to externalize a figure, un-rem the figure you wish, and run this batch file.
+
+pdflatex --jobname=Figures/threedsurfaceplot tikz-3dplot_documentation.tex
+pdflatex --jobname=Figures/examplesurfaceplot tikz-3dplot_documentation.tex
+pdflatex --jobname=Figures/examplesurfaceplotrange tikz-3dplot_documentation.tex
+pdflatex --jobname=Figures/exampleshowargcolorguide tikz-3dplot_documentation.tex
+pdflatex --jobname=Figures/alphabetagamma tikz-3dplot_documentation.tex
diff --git a/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot.sty b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot.sty
new file mode 100644
index 0000000000..f06ed0091d
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot.sty
@@ -0,0 +1,931 @@
+%% tikz-3dplot.sty
+%% Copyright 2010 Jeffrey D. Hein
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Jeffrey D. Hein.
+%
+% This work consists of the files 3dplot.sty and 3dplot_documentation.tex
+
+%Description
+%-----------
+
+%tikz-3dplot.sty - package for plotting three dimensional axes and coordinates in TikZ. The user can specify orientation of the display, and also define rotated coordinate systems within the 3d display coordinate system.
+
+%Created 2009-11-07 by Jeff Hein. Last updated: 2010-07-30
+%----------------------------------------------------------
+
+%Requirements
+%------------
+%This requires the tikz package.
+
+%Update Notes
+%------------
+
+%see the documentation for update notes
+
+
+\RequirePackage{pgf}
+\RequirePackage{ifthen}
+
+%Style definitions and includes
+%------------------------------
+\usetikzlibrary{calc,3d,arrows}
+
+\tikzset{tdplot_screen_coords/.style={x={(1 cm,0 cm)},y={(0 cm, 1 cm)},z={(-1 cm, -1 cm)}}}%
+
+\pgfmathsetmacro{\tdplotlowerphi}{0}
+\pgfmathsetmacro{\tdplotupperphi}{360}
+\pgfmathsetmacro{\tdplotlowertheta}{0}
+\pgfmathsetmacro{\tdplotuppertheta}{180}
+%\pgfmathsetmacro{\tdplotlinewidth}{.25pt}
+
+%Commands
+%--------
+
+%\tdplotsinandcos{sin}{cos}{theta}
+%determines the sin and cos of the specified angle (in degrees).
+%#1: returns sin(#3)
+%#2: returns cos(#3)
+%#3: user-specified angle
+\newcommand{\tdplotsinandcos}[3]{%
+\pgfmathsetmacro{#1}{sin(#3)}%
+\pgfmathsetmacro{#2}{cos(#3)}%
+}
+
+%\tdplotmult{result}{multiplicand}{multiplicator}
+%determines the multiplication of specified values.
+%#1: returns #2*#3
+%#2: user-specified multiplicand
+%#3: user-specified multiplicator
+\newcommand{\tdplotmult}[3]{%
+\pgfmathsetmacro{#1}{#2*#3}%
+}
+
+%\tdplotdiv{result}{dividend}{divisor}
+%determines the division of specified values.
+%#1: returns #2/#3
+%TODO: handle divide by zero?
+%#2: user-specified dividend
+%#3: user-specified divisor
+\newcommand{\tdplotdiv}[3]{%
+\pgfmathsetmacro{#1}{#2/#3}%
+}
+
+%\tdplotcheckdiff{first value}{right value}{tolerance}{true code}{false code}
+%compares two values to within specified tolerance. Executes either the true code or false code depending on the comparison result.
+%#1: value 1 to compare
+%#2: value 2 to compare
+%#3: tolerance
+%#4: true condition result
+%#5: false condition result
+\newcommand{\tdplotcheckdiff}[5]{%
+%
+ %\pgfmathsubtract{#2}{#1}
+ %\pgfmathparse{ abs(#2 - #1)}
+
+ %\typeout{ #2, #1, \pgfmathresult, #3 }
+
+ \pgfmathparse{ abs(#2 - #1)<#3 }
+
+ %\typeout{ \pgfmathresult }
+ \ifthenelse{\equal{\pgfmathresult}{1}}{#4}{#5}
+}
+
+%\tdplotsetdisplay{\theta_d}{\phi_d}
+%generates the coordinate transformation for defining a TikZ 3d plot display coordinates.
+%#1: user-specified \theta_d, defining the angle through which the system is rotated about the x-axis. 0 points the z-axis "out of the page", while 90 points the z-axis vertically upward on the page.
+%#2: user-specified \phi_d, defining the angle through which the system is rotated about the z-axis. 0 points the x-axis to the right.
+\newcommand{\tdplotsetmaincoords}[2]{%
+%perform some trig for the display transformation
+%
+%
+%store the user-specified angles for possible future use
+\pgfmathsetmacro{\tdplotmaintheta}{#1}
+\pgfmathsetmacro{\tdplotmainphi}{#2}
+%
+%
+\tdplotcalctransformmainscreen
+%
+%now here is where the output is performed
+\tikzset{tdplot_main_coords/.style={x={(\raarot cm,\rbarot cm)},y={(\rabrot cm, \rbbrot cm)},z={(\racrot cm, \rbcrot cm)}}}%
+}
+
+
+%This performs the calculation to define the main coordinate frame orientation style, and is also used to transform a coordinate from the main coordinate frame the the screen coordinate frame
+\newcommand{\tdplotcalctransformmainscreen}{%
+%
+%TODO: choose less obvious macro names? or look into scoping?
+\tdplotsinandcos{\sintheta}{\costheta}{\tdplotmaintheta}%
+\tdplotsinandcos{\sinphi}{\cosphi}{\tdplotmainphi}%
+%
+\tdplotmult{\stsp}{\sintheta}{\sinphi}%
+\tdplotmult{\stcp}{\sintheta}{\cosphi}%
+\tdplotmult{\ctsp}{\costheta}{\sinphi}%
+\tdplotmult{\ctcp}{\costheta}{\cosphi}%
+%
+%determine rotation matrix elements for display transformation
+\pgfmathsetmacro{\raarot}{\cosphi}%
+\pgfmathsetmacro{\rabrot}{\sinphi}%
+%NOTE: \rac is zero for this rotation, where z^c always points vertical on the page
+\pgfmathsetmacro{\racrot}{0}%
+\pgfmathsetmacro{\rbarot}{-\ctsp}%
+\pgfmathsetmacro{\rbbrot}{\ctcp}%
+\pgfmathsetmacro{\rbcrot}{\sintheta}%
+%NOTE: third row of rotation matrix not needed for display since screen z is always flat on the page. It is, however, needed when performing further transformations using the Euler transformation.
+\pgfmathsetmacro{\rcarot}{\stsp}%
+\pgfmathsetmacro{\rcbrot}{-\stcp}%
+\pgfmathsetmacro{\rccrot}{\costheta}%
+%
+}
+
+
+
+
+%determines the rotation matrix for transformation from the rotation coordinate frame to the main coordinate frame. This also defines the rotation to produce the rotated coordinate frame.
+\newcommand{\tdplotcalctransformrotmain}{%
+%perform some trig for the Euler transformation
+\tdplotsinandcos{\sinalpha}{\cosalpha}{\tdplotalpha}
+\tdplotsinandcos{\sinbeta}{\cosbeta}{\tdplotbeta}
+\tdplotsinandcos{\singamma}{\cosgamma}{\tdplotgamma}
+%
+\tdplotmult{\sasb}{\sinalpha}{\sinbeta}
+\tdplotmult{\sbsg}{\sinbeta}{\singamma}
+\tdplotmult{\sasg}{\sinalpha}{\singamma}
+\tdplotmult{\sasbsg}{\sasb}{\singamma}
+%
+\tdplotmult{\sacb}{\sinalpha}{\cosbeta}
+\tdplotmult{\sacg}{\sinalpha}{\cosgamma}
+\tdplotmult{\sbcg}{\sinbeta}{\cosgamma}
+\tdplotmult{\sacbsg}{\sacb}{\singamma}
+\tdplotmult{\sacbcg}{\sacb}{\cosgamma}
+%
+\tdplotmult{\casb}{\cosalpha}{\sinbeta}
+\tdplotmult{\cacb}{\cosalpha}{\cosbeta}
+\tdplotmult{\cacg}{\cosalpha}{\cosgamma}
+\tdplotmult{\casg}{\cosalpha}{\singamma}
+%
+\tdplotmult{\cacbsg}{\cacb}{\singamma}
+\tdplotmult{\cacbcg}{\cacb}{\cosgamma}
+%
+%determine rotation matrix elements for Euler transformation
+\pgfmathsetmacro{\raaeul}{\cacbcg - \sasg}
+\pgfmathsetmacro{\rabeul}{-\cacbsg - \sacg}
+\pgfmathsetmacro{\raceul}{\casb}
+\pgfmathsetmacro{\rbaeul}{\sacbcg + \casg}
+\pgfmathsetmacro{\rbbeul}{-\sacbsg + \cacg}
+\pgfmathsetmacro{\rbceul}{\sasb}
+\pgfmathsetmacro{\rcaeul}{-\sbcg}
+\pgfmathsetmacro{\rcbeul}{\sbsg}
+\pgfmathsetmacro{\rcceul}{\cosbeta}
+%
+%DEBUG: display euler matrix elements
+%\raaeul\ \rabeul\ \raceul
+%
+%\rbaeul\ \rbbeul\ \rbceul
+%
+%\rcaeul\ \rcbeul\ \rcceul
+}
+
+
+%determines the rotation matrix for transformation from the main coordinate frame to the rotated coordinate frame.
+\newcommand{\tdplotcalctransformmainrot}{%
+%perform some trig for the Euler transformation
+\tdplotsinandcos{\sinalpha}{\cosalpha}{\tdplotalpha}
+\tdplotsinandcos{\sinbeta}{\cosbeta}{\tdplotbeta}
+\tdplotsinandcos{\singamma}{\cosgamma}{\tdplotgamma}
+%
+\tdplotmult{\sasb}{\sinalpha}{\sinbeta}
+\tdplotmult{\sbsg}{\sinbeta}{\singamma}
+\tdplotmult{\sasg}{\sinalpha}{\singamma}
+\tdplotmult{\sasbsg}{\sasb}{\singamma}
+%
+\tdplotmult{\sacb}{\sinalpha}{\cosbeta}
+\tdplotmult{\sacg}{\sinalpha}{\cosgamma}
+\tdplotmult{\sbcg}{\sinbeta}{\cosgamma}
+\tdplotmult{\sacbsg}{\sacb}{\singamma}
+\tdplotmult{\sacbcg}{\sacb}{\cosgamma}
+%
+\tdplotmult{\casb}{\cosalpha}{\sinbeta}
+\tdplotmult{\cacb}{\cosalpha}{\cosbeta}
+\tdplotmult{\cacg}{\cosalpha}{\cosgamma}
+\tdplotmult{\casg}{\cosalpha}{\singamma}
+%
+\tdplotmult{\cacbsg}{\cacb}{\singamma}
+\tdplotmult{\cacbcg}{\cacb}{\cosgamma}
+%
+%determine rotation matrix elements for Euler transformation
+\pgfmathsetmacro{\raaeul}{\cacbcg - \sasg}
+\pgfmathsetmacro{\rabeul}{\sacbcg + \casg}
+\pgfmathsetmacro{\raceul}{-\sbcg}
+\pgfmathsetmacro{\rbaeul}{-\cacbsg - \sacg}
+\pgfmathsetmacro{\rbbeul}{-\sacbsg + \cacg}
+\pgfmathsetmacro{\rbceul}{\sbsg}
+\pgfmathsetmacro{\rcaeul}{\casb}
+\pgfmathsetmacro{\rcbeul}{\sasb}
+\pgfmathsetmacro{\rcceul}{\cosbeta}
+%
+%DEBUG: display euler matrix elements
+%\raaeul\ \rabeul\ \raceul
+%
+%\rbaeul\ \rbbeul\ \rbceul
+%
+%\rcaeul\ \rcbeul\ \rcceul
+}
+
+%transforms a coordinate from the main coordinate frame to the rotated coordinate frame
+\newcommand{\tdplottransformmainrot}[3]{%
+ \tdplotcalctransformmainrot
+
+ \pgfmathsetmacro{\tdplotresx}{\raaeul * #1 + \rabeul * #2 + \raceul * #3}
+ \pgfmathsetmacro{\tdplotresy}{\rbaeul * #1 + \rbbeul * #2 + \rbceul * #3}
+ \pgfmathsetmacro{\tdplotresz}{\rcaeul * #1 + \rcbeul * #2 + \rcceul * #3}
+}
+
+%transforms a coordinate from the rotated coordinate frame to the main coordinate frame
+\newcommand{\tdplottransformrotmain}[3]{%
+ \tdplotcalctransformrotmain
+
+ \pgfmathsetmacro{\tdplotresx}{\raaeul * #1 + \rabeul * #2 + \raceul * #3}
+ \pgfmathsetmacro{\tdplotresy}{\rbaeul * #1 + \rbbeul * #2 + \rbceul * #3}
+ \pgfmathsetmacro{\tdplotresz}{\rcaeul * #1 + \rcbeul * #2 + \rcceul * #3}
+}
+
+
+%transforms a coordinate from the main coordinate frame to the rotated coordinate frame
+\newcommand{\tdplottransformmainscreen}[3]{%
+ \tdplotcalctransformmainscreen
+
+ \pgfmathsetmacro{\tdplotresx}{\raarot * #1 + \rabrot * #2 + \racrot * #3}
+ \pgfmathsetmacro{\tdplotresy}{\rbarot * #1 + \rbbrot * #2 + \rbcrot * #3}
+}
+
+
+
+%\tdplotsetrotatedcoords{\alpha}{\beta}{\gamma}
+%generates the coordinate transformation for the rotated coordinate system within the display coordinate system. This should be called only after the display coordinate system has been defined. If the display coordinate system changes, this will have to be updated.
+%#1: user-specified euler angle \alpha.
+%#2: user-specified euler angle \beta.
+%#3: user-specified euler angle \gamma.
+\newcommand{\tdplotsetrotatedcoords}[3]{%
+%
+\pgfmathsetmacro{\tdplotalpha}{#1}
+\pgfmathsetmacro{\tdplotbeta}{#2}
+\pgfmathsetmacro{\tdplotgamma}{#3}
+%
+\tdplotcalctransformrotmain
+
+%
+%now, determine master rotation matrix to define euler-rotated coordinates within the display coordinate frame
+\tdplotmult{\raaeaa}{\raarot}{\raaeul}
+\tdplotmult{\rabeba}{\rabrot}{\rbaeul}
+\tdplotmult{\raceca}{\racrot}{\rcaeul}
+%
+\tdplotmult{\raaeab}{\raarot}{\rabeul}
+\tdplotmult{\rabebb}{\rabrot}{\rbbeul}
+\tdplotmult{\racecb}{\racrot}{\rcbeul}
+%
+\tdplotmult{\raaeac}{\raarot}{\raceul}
+\tdplotmult{\rabebc}{\rabrot}{\rbceul}
+\tdplotmult{\racecc}{\racrot}{\rcceul}
+%
+\tdplotmult{\rbaeaa}{\rbarot}{\raaeul}
+\tdplotmult{\rbbeba}{\rbbrot}{\rbaeul}
+\tdplotmult{\rbceca}{\rbcrot}{\rcaeul}
+%
+\tdplotmult{\rbaeab}{\rbarot}{\rabeul}
+\tdplotmult{\rbbebb}{\rbbrot}{\rbbeul}
+\tdplotmult{\rbcecb}{\rbcrot}{\rcbeul}
+%
+\tdplotmult{\rbaeac}{\rbarot}{\raceul}
+\tdplotmult{\rbbebc}{\rbbrot}{\rbceul}
+\tdplotmult{\rbcecc}{\rbcrot}{\rcceul}
+%
+%the third row is not needed for screen display
+%\tdplotmult{\rcaeaa}{\rcarot}{\raaeul}
+%\tdplotmult{\rcbeba}{\rcbrot}{\rbaeul}
+%\tdplotmult{\rcceca}{\rccrot}{\rcaeul}
+%
+%\tdplotmult{\rcaeab}{\rcarot}{\rabeul}
+%\tdplotmult{\rcbebb}{\rcbrot}{\rbbeul}
+%\tdplotmult{\rccecb}{\rccrot}{\rcbeul}
+%
+%\tdplotmult{\rcaeac}{\rcarot}{\raceul}
+%\tdplotmult{\rcbebc}{\rcbrot}{\rbceul}
+%\tdplotmult{\rccecc}{\rccrot}{\rcceul}
+%
+%set up the master rotation matrix elements
+\pgfmathsetmacro{\raarc}{\raaeaa + \rabeba + \raceca}
+\pgfmathsetmacro{\rabrc}{\raaeab + \rabebb + \racecb}
+\pgfmathsetmacro{\racrc}{\raaeac + \rabebc + \racecc}
+\pgfmathsetmacro{\rbarc}{\rbaeaa + \rbbeba + \rbceca}
+\pgfmathsetmacro{\rbbrc}{\rbaeab + \rbbebb + \rbcecb}
+\pgfmathsetmacro{\rbcrc}{\rbaeac + \rbbebc + \rbcecc}
+%the third row is not needed for screen display
+%\pgfmathsetmacro{\rcarc}{\rcaeaa + \rcbeba + \rcceca}
+%\pgfmathsetmacro{\rcbrc}{\rcaeab + \rcbebb + \rccecb}
+%\pgfmathsetmacro{\rccrc}{\rcaeac + \rcbebc + \rccecc}
+%
+%DEBUG: display master matrix elements
+%\raarc\ \rabrc\ \racrc
+%
+%\rbarc\ \rbbrc\ \rbcrc
+%
+%\rcarc\ \rcbrc\ \rccrc
+%
+\tikzset{tdplot_rotated_coords/.append style={x={(\raarc cm,\rbarc cm)},y={(\rabrc cm, \rbbrc cm)},z={(\racrc cm, \rbcrc cm)}}}%
+}
+
+%\tdplotsetrotatedcoordsorigin{point}
+%this translates the rotated coordinate system to the specified point.
+%#1: user-specified coordinate
+\newcommand{\tdplotsetrotatedcoordsorigin}[1]{%
+%\pgfmathsetmacro{\tdplotrotatedcoordsorigin}{#1}%
+\tikzset{tdplot_rotated_coords/.append style={shift=#1}}%
+}
+
+%\tdplotresetrotatedcoordsorigin
+%this resets the rotated coordinate system translation back to the origin of the main coordinate system
+\newcommand{\tdplotresetrotatedcoordsorigin}{%
+%\pgfmathsetmacro{\tdplotrotatedcoordsorigin}{#1}%
+\tikzset{tdplot_rotated_coords/.append style={shift={(0,0,0)}}}%
+}
+
+%\tdplotsetthetaplanecoords{\phi}
+%this places the rotated coordinate system such that it's x'-y' plane coincides with a "theta plane" for the main coordinate system: This plane contains the z axis, and lies at angle \phi from the x axis.
+%#1: user-specified \phi angle from x-axis
+\newcommand{\tdplotsetthetaplanecoords}[1]{%
+%
+ \tdplotresetrotatedcoordsorigin
+ \tdplotsetrotatedcoords{270 + #1}{270}{0}%
+}
+%note: the following rotation permutes the x, y, and z axes in forward progression. Any value of \alpha greater than 270 will rotate the axes further, allowing for easy selection of the ``theta plane''.
+%\tdplotsetrotatedcoords{270}{270}{00}
+
+%note: the following rotation permutes the x,y, and z axes in backward progression.
+%\tdplotsetrotatedcoords{0}{90}{90}
+
+%\tdplotsetrotatedthetaplanecoords{\phi'}
+%this places the rotated coordinate system into the "theta plane" for the current rotated coordinate system, at user-specified angle \phi'. Note that it replaces the current rotated coordinate system
+%#1: user-specified \phi' angle from x'-axis
+\newcommand{\tdplotsetrotatedthetaplanecoords}[1]{%
+ \tdplotsetrotatedcoords{\tdplotalpha}{\tdplotbeta}{\tdplotgamma + #1}%
+ %
+ %permute the coordinates
+ \tikzset{tdplot_rotated_coords/.append style={y={(\raarc cm,\rbarc cm)},z={(\rabrc cm, \rbbrc cm)},x={(\racrc cm, \rbcrc cm)}}}%
+}
+
+%\tdplotsetcoord{point}{r}{theta}{phi}
+%sets a 3d point using spherical polar coordinates. This also generates xy, xz, and yz projections of this point using appropriately named points
+%#1: name of point to set
+%#2: user-specified r coordinate
+%#3: user-specified \theta coordinate
+%#4: user-specified \phi coordinate
+\newcommand{\tdplotsetcoord}[4]{%
+%
+%do some trig to determine angular part of coordinate
+\tdplotsinandcos{\sinthetavec}{\costhetavec}{#3}%
+\tdplotsinandcos{\sinphivec}{\cosphivec}{#4}%
+\tdplotmult{\stcpv}{\sinthetavec}{\cosphivec}%
+\tdplotmult{\stspv}{\sinthetavec}{\sinphivec}%
+%
+%assign the point
+\coordinate (#1) at ($#2*(\stcpv,\stspv,\costhetavec)$);
+%assign the xy, xz, and yz projections of the point
+\coordinate (#1xy) at ($#2*(\stcpv,\stspv,0)$);
+\coordinate (#1xz) at ($#2*(\stcpv,0,\costhetavec)$);
+\coordinate (#1yz) at ($#2*(0,\stspv,\costhetavec)$);
+%assign the x, y, and z projections of the point
+\coordinate (#1x) at ($#2*(\stcpv,0,0)$);
+\coordinate (#1y) at ($#2*(0,\stspv,0)$);
+\coordinate (#1z) at ($#2*(0,0,\costhetavec)$);
+}
+
+\newcommand{\tdplotsimplesetcoord}[4]{%
+%
+%do some trig to determine angular part of coordinate
+\tdplotsinandcos{\sinthetavec}{\costhetavec}{#3}%
+\tdplotsinandcos{\sinphivec}{\cosphivec}{#4}%
+\tdplotmult{\stcpv}{\sinthetavec}{\cosphivec}%
+\tdplotmult{\stspv}{\sinthetavec}{\sinphivec}%
+%
+%assign the point
+\coordinate (#1) at ($#2*(\stcpv,\stspv,\costhetavec)$);
+}
+
+
+%\tdplotdrawarc[coordinate system, draw styles]{center}{r}{angle start}{angle end}{label options}{label}
+%draws an arc and puts a label in the center with specified node options
+%#1: Optional, specifies the coordinate system and any draw style
+%#2: center point of arc
+%#3: radius of arc
+%#4: start angle
+%#5: end angle
+%#6: label options
+%#7: label
+% \tdplotdrawarc{(O)}{0.2}{0}{\phivec}{anchor=north}{$\phi$}
+\newcommand{\tdplotdrawarc}[7][tdplot_main_coords]{%
+\pgfmathsetmacro{\tdplottemp}{#5 + #4}
+\tdplotdiv{\tdplottemp}{\tdplottemp}{2}
+\path[#1] #2 + (\tdplottemp:#3) node[#6]{#7};
+\draw[#1] #2 + (#4:#3) arc (#4:#5:#3);
+}
+
+\def\tdplotdefinepoints(#1,#2,#3)(#4,#5,#6)(#7,#8,#9){%
+ \pgfmathsetmacro{\tdplotvertexx}{#1}
+ \pgfmathsetmacro{\tdplotvertexy}{#2}
+ \pgfmathsetmacro{\tdplotvertexz}{#3}
+ \pgfmathsetmacro{\tdplotax}{#4}
+ \pgfmathsetmacro{\tdplotay}{#5}
+ \pgfmathsetmacro{\tdplotaz}{#6}
+ \pgfmathsetmacro{\tdplotbx}{#7}
+ \pgfmathsetmacro{\tdplotby}{#8}
+ \pgfmathsetmacro{\tdplotbz}{#9}
+}%
+
+
+%draws an arc using three specified points
+%\tdplotdrawpolytopearc[thick]{1}{anchor=west}{$\theta$}
+\newcommand{\tdplotdrawpolytopearc}[4][]{%
+
+ %determine vector lengths
+ \pgfmathsetmacro{\ax}{\tdplotax - \tdplotvertexx}
+ \pgfmathsetmacro{\ay}{\tdplotay - \tdplotvertexy}
+ \pgfmathsetmacro{\az}{\tdplotaz - \tdplotvertexz}
+
+ \pgfmathsetmacro{\bx}{\tdplotbx - \tdplotvertexx}
+ \pgfmathsetmacro{\by}{\tdplotby - \tdplotvertexy}
+ \pgfmathsetmacro{\bz}{\tdplotbz - \tdplotvertexz}
+
+ %determine normal to vectors
+ \tdplotcrossprod(\ax,\ay,\az)(\bx,\by,\bz)
+
+ %DEBUG: show the cross product
+ %\draw[->,blue] (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz)
+ -- ++(\tdplotresx,\tdplotresy,\tdplotresz);
+
+ %get angles for this vector
+ \tdplotgetpolarcoords{\tdplotresx}{\tdplotresy}{\tdplotresz}
+
+ \typeout{angles for cross product: phi: \tdplotresphi theta: \tdplotrestheta}
+
+ %place the rotated coordinate system so that the z' axis points along this vector
+ \tdplotsetrotatedcoords{\tdplotresphi}{\tdplotrestheta}{0}
+ \coordinate (Vertex) at (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz);
+ \tdplotsetrotatedcoordsorigin{(Vertex)}
+
+ %DEBUG: show the rotated coordinate system
+ %\draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x'$};
+ %\draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y'$};
+ %\draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z'$};
+
+ %calculate the start angle of the arc
+ \tdplottransformmainrot{\ax}{\ay}{\az}
+ \tdplotgetpolarcoords{\tdplotresx}{\tdplotresy}{\tdplotresz}
+ \pgfmathsetmacro{\tdplotstartphi}{\tdplotresphi}
+
+
+ %calculate the end angle of the arc
+ \tdplottransformmainrot{\bx}{\by}{\bz}
+ \tdplotgetpolarcoords{\tdplotresx}{\tdplotresy}{\tdplotresz}
+
+ %draw the arc
+ \pgfmathparse{\tdplotstartphi < \tdplotresphi}
+ \ifthenelse{\equal{\pgfmathresult}{1}}%
+ {}%
+ {
+ \pgfmathsetmacro{\tdplotstartphi}{\tdplotstartphi - 360}
+ }
+
+ %\typeout{startphi: \tdplotstartphi}
+ %\typeout{endphi: \tdplotresphi}
+
+ \draw[tdplot_rotated_coords,#1] (0,0,0) + (\tdplotstartphi:#2) arc (\tdplotstartphi:\tdplotresphi:#2);
+
+ \pgfmathsetmacro{\tdplotresphi}{(\tdplotresphi + \tdplotstartphi)/2}
+
+ \draw[tdplot_rotated_coords] (0,0,0) + (\tdplotresphi:#2) node[#3]{#4};
+}
+
+
+% \tdplotsphericalsurfaceplot[fill mode]{theta step size}{phi step size}{r}
+%draws a surface in spherical polar coordinates given by r(\theta,\phi), where angular ranges and steps are defined.
+%#1: draw styles
+%#2: theta segments
+%#3: phi segments
+%#4: r(\tdplottheta,\tdplotphi)
+%#5: stroke color
+%#6: fill color
+%#7: x axis instructions, to be rendered when \phi = 0
+%#8: y axis instructions, to be rendered when \phi = 90
+%#9: z axis instructions, to be rendered when plotting is half done
+%TODO: fix axes drawing function when the main display axis phi is at 0, 90, etc.
+\newcommand{\tdplotsphericalsurfaceplot}[9][literal]{%
+%
+ \typeout{3dplot: processing 3d surface plot...}
+
+ %retrieve the angular step sizes
+ \pgfmathsetmacro{\origviewthetastep}{360/#2}
+ \pgfmathsetmacro{\origviewphistep}{360/#3}
+
+ %determing the angular starting point, based on the step size and display orientation
+ \pgfmathparse{ mod(90 + \tdplotmainphi,\origviewphistep)}
+ \pgfmathsetmacro{\originalphi}{90 + \tdplotmainphi - \pgfmathresult}
+
+ \pgfmathparse{ mod(\tdplotmaintheta,\origviewthetastep)}
+ \pgfmathsetmacro{\originaltheta}{\tdplotmaintheta - \pgfmathresult}
+
+
+ %this fudge factor helps when properly rendering x and y axes
+ \pgfmathsetmacro{\tdplotsuperfudge}{\originaltheta > 90}
+
+ %draw back part of shape, doing left and right side individually
+ \foreach \leftright in {1,-1}
+ {
+ \pgfmathsetmacro{\viewphistart}{\originalphi}
+ \pgfmathsetmacro{\viewphistep}{\leftright * \origviewphistep}
+ \pgfmathsetmacro{\viewphiinc}{\viewphistart + \viewphistep}
+ \pgfmathsetmacro{\viewphiend}{\viewphistart + \leftright * 90 - \viewphistep}
+
+ %sweep over phi
+ \foreach \curphi in{\viewphistart,\viewphiinc,...,\viewphiend}
+ {
+ %draw upper and lower parts individually, starting at the point opposite display angle
+ \foreach \topbottom in {1,-1}
+ {
+ \pgfmathsetmacro{\viewthetastep}{\topbottom * \origviewthetastep}
+ \pgfmathsetmacro{\viewthetastart}{180 - \originaltheta}
+
+ \ifnum \topbottom=1
+ \pgfmathsetmacro{\viewthetaend}{180 - \origviewthetastep}
+ \else
+ \pgfmathsetmacro{\viewthetaend}{\origviewthetastep}
+ \fi
+ \pgfmathsetmacro{\viewthetainc}{\viewthetastart + \viewthetastep}
+
+ %perform the rendering of each slice of phi over a range of theta angles
+ \tdplotdosurfaceplot{#4}{#7}{#8}{#5}{#6}{#1}
+ }
+ }
+ }
+
+ %now that the back half is done, draw the z axis
+ \begin{scope}[opacity=1]
+ #9 %draw z axis content
+ \end{scope}
+
+ %next, draw front part of shape, doing left and right sides individually. This is essentially the same process as before
+ \pgfmathsetmacro{\tdplotsuperfudge}{\originaltheta < 90}
+ \foreach \leftright in {1,-1}
+ {
+ \pgfmathsetmacro{\viewphistep}{\leftright * \origviewphistep}
+ \pgfmathsetmacro{\viewphistart}{\originalphi + \leftright * 90}
+ \pgfmathsetmacro{\viewphiinc}{\viewphistart + \viewphistep}
+ \pgfmathsetmacro{\viewphiend}{\viewphistart + \leftright * 90 - \viewphistep}
+
+ %sweep over phi
+ \foreach \curphi in{\viewphistart,\viewphiinc,...,\viewphiend}
+ {
+ %draw upper and lower parts individually, starting at the either the north or south pole
+ \foreach \topbottom in {1,-1}
+ {
+ \pgfmathsetmacro{\viewthetastep}{-\topbottom * \origviewthetastep}
+ \ifnum \topbottom=1
+ \pgfmathsetmacro{\viewthetastart}{180}
+ \else
+ \pgfmathsetmacro{\viewthetastart}{0}
+ \fi
+
+ \pgfmathsetmacro{\viewthetaend}{\originaltheta - \viewthetastep}
+ \pgfmathsetmacro{\viewthetainc}{\viewthetastart + \viewthetastep}
+
+ %perform the rendering
+ \tdplotdosurfaceplot{#4}{#7}{#8}{#5}{#6}{#1}
+ }
+ }
+ }
+}
+
+%sets the angular range of the polar plot to user-specified values
+\newcommand{\tdplotsetpolarplotrange}[4]{%
+ \pgfmathsetmacro{\tdplotlowerphi}{#3}
+ \pgfmathsetmacro{\tdplotupperphi}{#4}
+ \pgfmathsetmacro{\tdplotlowertheta}{#1}
+ \pgfmathsetmacro{\tdplotuppertheta}{#2}
+}
+
+\newcommand{\tdplotresetpolarplotrange}{%
+ \pgfmathsetmacro{\tdplotlowerphi}{0}
+ \pgfmathsetmacro{\tdplotupperphi}{360}
+ \pgfmathsetmacro{\tdplotlowertheta}{0}
+ \pgfmathsetmacro{\tdplotuppertheta}{180}
+}
+
+
+
+%internal command, performs the actual rendering for the \tdplotsphericalsurfaceplot command
+%TODO: find proper syntax and format for internal commands not intended to be used by the general user
+\newcommand{\tdplotdosurfaceplot}[6]{%
+
+ \pgfmathsetmacro{\nextphi}{\curphi + \tdplotsuperfudge*\viewphistep}
+
+ \begin{scope}[opacity=1]
+
+ %\typeout{ ----------------------------------- }
+
+ %check if the current phi angle is in position to draw the x axis
+ \tdplotcheckdiff{\nextphi}{360}{\origviewphistep}{#2}{}
+ \tdplotcheckdiff{\nextphi}{0}{\origviewphistep}{#2}{}
+
+ %check if the current phi angle is in position to draw the y axis
+ \tdplotcheckdiff{\nextphi}{90}{\origviewphistep}{#3}{}
+ \tdplotcheckdiff{\nextphi}{450}{\origviewphistep}{#3}{}
+ \end{scope}
+
+ %do the theta sweep
+ \foreach \curtheta in{\viewthetastart,\viewthetainc,...,\viewthetaend}
+ {
+
+ %convert phi, theta coords into longitude, latitude to make use of pgfpointspherical coordinates
+ \pgfmathsetmacro{\curlongitude}{90 - \curphi}
+ \pgfmathsetmacro{\curlatitude}{90 - \curtheta}
+
+ %If sweeping to the right, shift the value of phi to the lower value of phi.
+ \ifthenelse{\equal{\leftright}{-1.0}}%
+ {%
+ \pgfmathsetmacro{\curphi}{\curphi - \origviewphistep}
+ }{}
+ %\fi
+
+ \pgfmathsetmacro{\tdplottheta}{mod(\curtheta,360)}
+ \pgfmathsetmacro{\tdplotphi}{mod(\curphi,360)}
+
+ \pgfmathparse{\tdplotphi < 0}
+ \ifthenelse{\equal{\pgfmathresult}{1}}{
+ \pgfmathsetmacro{\tdplotphi}{\tdplotphi + 360}
+ }{}%
+
+ %test to see if this value is within the specified angular range
+ \pgfmathparse{\tdplottheta > \tdplotuppertheta}
+ \pgfmathsetmacro{\logictest}{1 - \pgfmathresult}
+
+ \pgfmathparse{\tdplottheta < \tdplotlowertheta}
+ \pgfmathsetmacro{\logictest}{\logictest * (1 - \pgfmathresult)}
+
+ \pgfmathsetmacro{\tdplottheta}{\tdplottheta + \viewthetastep}
+ \pgfmathparse{\tdplottheta > \tdplotuppertheta}
+ \pgfmathsetmacro{\logictest}{\logictest * (1 - \pgfmathresult)}
+
+ \pgfmathparse{\tdplottheta < \tdplotlowertheta}
+ \pgfmathsetmacro{\logictest}{\logictest * (1 - \pgfmathresult)}
+
+ \pgfmathparse{\tdplotphi > \tdplotupperphi}
+ \pgfmathsetmacro{\logictest}{\logictest * (1 - \pgfmathresult)}
+
+ \pgfmathparse{\tdplotphi < \tdplotlowerphi}
+ \pgfmathsetmacro{\logictest}{\logictest * (1 - \pgfmathresult)}
+
+ \pgfmathsetmacro{\tdplotphi}{\tdplotphi + \viewphistep}
+
+ \pgfmathparse{\tdplotphi < 0}
+ \ifthenelse{\equal{\pgfmathresult}{1}}{
+ \pgfmathsetmacro{\tdplotphi}{\tdplotphi + 360}
+ }{}%
+
+ \pgfmathparse{\tdplotphi > \tdplotupperphi}
+ \pgfmathsetmacro{\logictest}{\logictest * (1 - \pgfmathresult)}
+
+ \pgfmathparse{\tdplotphi < \tdplotlowerphi}
+ \pgfmathsetmacro{\logictest}{\logictest * (1 - \pgfmathresult)}
+
+
+ \pgfmathsetmacro{\tdplottheta}{\curtheta}
+ \pgfmathsetmacro{\tdplotphi}{\curphi}
+
+ %if using fill color parametric to angles
+ \ifthenelse{\equal{#6}{parametricfill}}{%
+ %and, if it's being plotted
+ \ifthenelse{\equal{\logictest}{1.0}}{%
+ \pgfmathsetmacro{\radius}{#1}
+ \pgfmathsetmacro{\tdplotr}{\radius*360} %factor of 360 lets the radius change hue through one full cycle for each unit radius
+
+ \pgfmathlessthan{\radius}{0}
+ \pgfmathsetmacro{\phaseshift}{180 * \pgfmathresult}
+
+ \pgfmathsetmacro{\colorarg}{#5}
+ \pgfmathsetmacro{\colorarg}{\colorarg + \phaseshift}
+ \pgfmathsetmacro{\colorarg}{mod(\colorarg,360)}
+
+ \pgfmathlessthan{\colorarg}{0}
+ \pgfmathsetmacro{\colorarg}{\colorarg + 360*\pgfmathresult}
+
+ \pgfmathdivide{\colorarg}{360}
+ \definecolor{tdplotfillcolor}{hsb}{\pgfmathresult, 1, 1}
+ \color{tdplotfillcolor}
+ }{}%
+ }%
+ {%
+ \pgfsetfillcolor{#5}
+ }
+ \pgfsetstrokecolor{#4}
+
+ \ifthenelse{\equal{\leftright}{-1.0}}%
+ {%
+ \pgfmathsetmacro{\curphi}{\curphi + \origviewphistep}
+ }{}
+ %\fi
+
+ %if this section is being plotted
+ \ifthenelse{\equal{\logictest}{1.0}}{%
+ \pgfmathsetmacro{\radius}{abs(#1)}
+ \pgfpathmoveto{\pgfpointspherical{\curlongitude}{\curlatitude}{\radius}}
+
+ \pgfmathsetmacro{\tdplotphi}{\curphi + \viewphistep}
+ \pgfmathsetmacro{\radius}{abs(#1)}
+ \pgfpathlineto{\pgfpointspherical{\curlongitude - \viewphistep}{\curlatitude}{\radius}}
+
+ \pgfmathsetmacro{\tdplottheta}{\curtheta + \viewthetastep}
+ \pgfmathsetmacro{\radius}{abs(#1)}
+ \pgfpathlineto{\pgfpointspherical{\curlongitude - \viewphistep}{\curlatitude - \viewthetastep}{\radius}}
+
+ \pgfmathsetmacro{\tdplotphi}{\curphi}
+ \pgfmathsetmacro{\radius}{abs(#1)}
+ \pgfpathlineto{\pgfpointspherical{\curlongitude}{\curlatitude - \viewthetastep}{\radius}}
+ \pgfpathclose
+
+ \pgfusepath{fill,stroke}
+ }{}
+ }
+}
+
+%\tdplotshowargcolorguide{x position}{y position}{x size}{y size}
+%#1: screen x position
+%#2: screen y position
+%#3: x size (susceptible to scale)
+%#4: y size (susceptible to scale)
+\newcommand{\tdplotshowargcolorguide}[4]{
+
+\pgfmathsetmacro{\tdplotx}{#1}
+\pgfmathsetmacro{\tdploty}{#2}
+\pgfmathsetmacro{\tdplothuestep}{5}
+\pgfmathsetmacro{\tdplotxsize}{#3}
+\pgfmathsetmacro{\tdplotysize}{#4}
+
+\pgfmathsetmacro{\tdplotyscale}{\tdplotysize/360}
+
+\foreach \tdplotphi in {0,\tdplothuestep,...,360}
+{
+ \pgfmathdivide{\tdplotphi}{360}
+ \definecolor{tdplotfillcolor}{hsb}{\pgfmathresult, 1, 1}
+ \color{tdplotfillcolor}
+
+ \pgfmathsetmacro{\tdplotstarty}{\tdploty + \tdplotphi * \tdplotyscale}
+ \pgfmathsetmacro{\tdplotstopy}{\tdplotstarty + \tdplothuestep * \tdplotyscale}
+ \pgfmathsetmacro{\tdplotstartx}{\tdplotx}
+ \pgfmathsetmacro{\tdplotstopx}{\tdplotx + \tdplotxsize}
+ \filldraw[tdplot_screen_coords] (\tdplotstartx,\tdplotstarty) rectangle (\tdplotstopx,\tdplotstopy);
+}
+
+ \pgfmathsetmacro{\tdplotstopy}{\tdploty + (360+\tdplothuestep)*\tdplotyscale }
+ \pgfmathsetmacro{\tdplotstopx}{\tdplotx + \tdplotxsize}
+
+\draw[tdplot_screen_coords] (\tdplotx,\tdploty) rectangle (\tdplotstopx,\tdplotstopy);
+
+\node[tdplot_screen_coords,anchor=west,xshift=5pt] at (\tdplotstopx,\tdploty) {$0$};
+\node[tdplot_screen_coords,anchor=west,xshift=5pt] at (\tdplotstopx,\tdplotstopy) {$2\pi$};
+
+ \pgfmathsetmacro{\tdplotstopy}{\tdploty + (360+\tdplothuestep)/2*\tdplotyscale }
+\node[tdplot_screen_coords,anchor=west, xshift=5pt] at (\tdplotstopx, \tdplotstopy) {$\pi$};
+}
+
+
+%\tdplotgetpolarcoords{\vx}{\vy}{\vz}
+%determines the theta and phi angle associated with the specified x, y, and z components of a vector
+\newcommand{\tdplotgetpolarcoords}[3]{%
+%
+ \pgfmathsetmacro{\vxcalc}{#1}
+ \pgfmathsetmacro{\vycalc}{#2}
+ \pgfmathsetmacro{\vzcalc}{#3}
+%
+ \pgfmathsetmacro{\vcalc}{ sqrt((\vxcalc)^2 + (\vycalc)^2 + (\vzcalc)^2) }
+% \pgfmathsetmacro{\vcalc}{ (\vxcalc^2 + \vycalc^2 + \vzcalc^2)^.5 }
+
+ \pgfmathsetmacro{\vxycalc}{ sqrt((\vxcalc)^2 + (\vycalc)^2) }
+% \pgfmathsetmacro{\vxycalc}{ (\vxcalc^2 + \vycalc^2)^.5 }
+
+ \pgfmathsetmacro{\tdplotrestheta}{asin(\vxycalc/\vcalc)}
+%
+ %check for angles larger than 90
+ \pgfmathparse{\vzcalc < 0}
+ \ifthenelse{\equal{\pgfmathresult}{1}}%
+ {%
+ \pgfmathsetmacro{\tdplotrestheta}{180 - \tdplotrestheta}
+ }
+ {}
+%
+ %check for special case: vx = 0
+ \ifthenelse{\equal{\vxcalc}{0.0}}%
+ {%
+ %check the sign of vy, and set angle appropriately
+ \pgfmathparse{\vycalc < 0}
+ \ifthenelse{\equal{\pgfmathresult}{1}}%
+ {%
+ \pgfmathsetmacro{\tdplotresphi}{270}
+ }
+ {%
+ \pgfmathparse{\vycalc > 0}
+ \ifthenelse{\equal{\pgfmathresult}{1}}%
+ {%
+ %\typeout{\vycalc}
+ \pgfmathsetmacro{\tdplotresphi}{90}
+ }
+ {%
+ %\typeout{OVER HERE!!!!}
+ \pgfmathsetmacro{\tdplotresphi}{0}
+ }
+ }
+ }
+ {%
+ %perform the arctan calculation
+ \pgfmathsetmacro{\tdplotresphi}{atan(\vycalc/\vxcalc)}
+%
+ %check if vx is less than zero, to properly identify the quadrant
+ \pgfmathparse{\vxcalc < 0}
+ %\typeout{x: \vxcalc\ y: \vycalc\ Raw phi: \tdplotresphi\ math result: \pgfmathresult}
+ \ifthenelse{\equal{\pgfmathresult}{1}}%
+ {%
+ %\typeout{HERE!}
+ %increase by half a rotation if necessary
+ \pgfmathsetmacro{\tdplotresphi}{\tdplotresphi+180}
+ }
+ {
+ %\typeout{SPOON!}
+ }
+
+ %ensure the angle lies between 0 and 360 degrees
+ \pgfmathparse{\tdplotresphi < 0}
+ \ifthenelse{\equal{\pgfmathresult}{1}}%
+ {%
+ \pgfmathsetmacro{\tdplotresphi}{\tdplotresphi+360}
+ }
+ {}
+ }
+}
+
+
+% \tdplotcrossprod(\ax,\ay,\az)(\bx,\by,\bz)
+\def\tdplotcrossprod(#1,#2,#3)(#4,#5,#6){%
+ \pgfmathsetmacro{\tdplotresx}{#2 * #6 - #3 * #5}
+ \pgfmathsetmacro{\tdplotresy}{#3 * #4 - #1 * #6}
+ \pgfmathsetmacro{\tdplotresz}{#1 * #5 - #2 * #4}
+
+}
+
+%\newcommand{\tdplottransform
+%
+%
+%\newcommand{\tdplotgetplane}{
+%
+%}
+
+
+%Notes
+%-----
+
+%PROBLEM:
+%the line-by-line coordinate transformation does not accept predefined points. It only works with literal points. Example:
+%\begin{tikzpicture}[smooth]
+% \draw plot coordinates{(1,0)(2,0.5)(3,0)(3,1)};
+% \draw[x={(0cm,1cm)},y={(1cm,0cm)},color=red] plot coordinates{(1,0)(2,0.5)(3,0)(3,1)};
+%\end{tikzpicture}
+%
+%\begin{tikzpicture}[smooth]
+% \coordinate (A) at (1,0);
+% \coordinate (B) at (2,0.5);
+% \coordinate (C) at (3,0);
+% \coordinate (D) at (3,1);
+% \draw plot coordinates{(A)(B)(C)(D)};
+% \draw[x={(0cm,1cm)},y={(1cm,0cm)},color=red] plot coordinates{(A)(B)(C)(D)};
+%\end{tikzpicture}
+%SOLUTION: none so far, other than use literal points.
+
+
+%PROBLEM:
+% \node[tdplot_rotated_coords,anchor=south west] at (\thetavec/2:.5){$\theta$};
+%it looks like the \node command can't be placed properly when a shift={} is defined in a style?
+%SOLUTION: Use something like this instead:
+%\draw[tdplot_rotated_coords] (O) + (\thetavec/2:.5) node[anchor=south west]{$\theta$};
+
+
+%PROBLEM:
+ %\draw[-stealth,color=orange] (0,0,0) -- (xyz spherical cs:radius=.5,longitude=60,latitude=120);
+%this gives the compile error: Undefined control sequence. <argument> \tikz@cs@radius. Not sure if this is due to some missing code in the TikZ 3d library.
+%SOLUTION: none found yet.
diff --git a/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.pdf b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.pdf
new file mode 100644
index 0000000000..c6515f9c87
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.tex b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.tex
new file mode 100644
index 0000000000..785388f606
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation.tex
@@ -0,0 +1,1997 @@
+%% tikz-3dplot_documentation.tex
+%% Copyright 2010-2012 Jeffrey D. Hein
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Jeffrey D. Hein.
+%
+% This work consists of the files tikz-3dplot.sty and tikz-3dplot_documentation.tex
+
+%Description
+%-----------
+
+%tikz-3dplot_documentation.tex - documentation for tikz-3dplot.sty: package for plotting three dimensional axes and coordinates in TikZ. The user can specify orientation of the display, and also define rotated coordinate systems within the 3d display coordinate system.
+
+%Created 2009-11-07 by Jeff Hein. Last updated: 2010-07-30
+%----------------------------------------------------------
+
+%Requirements
+%------------
+%This requires the tikz package.
+
+%Update Notes
+%------------
+
+%As of Jan 17, 2010, this package has been renamed from ``3dplot'' to ``tikz-3dplot''.
+
+
+\documentclass[10pt,letterpaper,oneside]{memoir}
+
+\usepackage{tikz} %for TikZ graphics
+\usepackage{tikz-3dplot} %for tikz-3dplot functionality
+\usepackage{amsmath} %for align equation environment
+\usepackage{url}
+
+\pgfrealjobname{tikz-3dplot_documentation}
+
+\usepackage[pdftex]{hyperref}
+\hypersetup{pdftitle={The tikz-3dplot Package}}
+\hypersetup{pdfauthor={Jeff Hein}}
+\hypersetup{pdfsubject={LaTeX}}
+\hypersetup{pdfcreator={Jeff Hein}}
+\hypersetup{colorlinks=true}
+\hypersetup{citecolor=darkgreen}
+
+
+
+\input{tikz-3dplot_documentation_figures.tex}
+
+
+\newcommand{\tikzname}{Ti\emph{k}Z}
+\newcommand{\tdplot}{\texttt{tikz-3dplot}}
+
+
+\title{The \texttt{\tdplot} Package}
+
+\author{Jeff Hein\\ \url{http://tikz3dplot.wordpress.com}}
+
+
+
+
+\newcommand{\tdplotlocation}{\url{http://www.ctan.org}}
+
+\settocdepth{subsection}
+
+\setsecnumdepth{subsection}
+\maxsecnumdepth{subsection}
+\settocdepth{subsection}
+\maxtocdepth{subsection}
+
+
+\newif\ifscratch %for doing scratchpad work, this cuts out the rest of the document
+
+
+%**************** Example Box *********************
+
+\definecolor{shadecolor}{rgb}{0.90,0.90,0.90}
+%this defines an environment for presenting code in an indented, shaded, verbatim, multipage region. Requires framed, alltt, and color environments, and \definecolor{shadecolor}{rgb}{0.90,0.90,0.90}
+
+%this sets the verbatim font and size, based on the memoir class usage
+\setverbatimfont{\normalfont\ttfamily\footnotesize}
+%this turns tabs on in the verbatim environment
+\tabson[4]
+%this sets the frequency of line numbers displayed in a boxedverbatim environment
+%\linenumberfrequency{1}
+%this sets the font size of line numbers in a boxedverbatim environment
+\linenumberfont{\normalfont\ttfamily\tiny}
+%this positions line numbers outside the box of a boxedverbatim environment
+%\bvnumbersoutside
+%this turns off the box of a boxedverbatim environment
+\nobvbox
+
+
+\begin{document}
+
+\input{Scratchpad.tex}
+
+
+
+\ifscratch
+ \end{document}
+\fi
+
+
+\frontmatter
+\pagestyle{empty}
+
+\maketitle
+
+
+
+\begin{figure}[h]
+ \begin{center}
+ \tdplotmainfig
+ \threedsurfaceplot
+
+ \threedalphabetagamma
+ %A 3d coordinate system rendered in \tikzname using the \tdplot\ package. The user can specify the display perspective by specifying angles $\theta_d$ and $\phi_d$, which rotate the coordinate frame from the ``standard'' display position where $x$ points to the right, $y$ points up.
+ \end{center}
+\end{figure}
+
+\cleardoublepage
+
+{
+
+ \input{ tikz-3dplot_changelog.tex }
+
+ \vfill
+ \parindent=0pt
+ Copyright 2010-2012 Jeff Hein
+
+ \medskip
+ Permission is granted to distribute and/or modify \emph{both
+ the documentation and the code} under the conditions of the LaTeX
+ Project Public License, either version 1.3 of this license or (at
+ your option) any later version. The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+
+ \clearpage
+}
+
+\pagenumbering{roman}
+\tableofcontents
+\cleardoublepage
+\pagenumbering{arabic}
+
+\mainmatter
+
+\pagestyle{plain}
+
+\chapter{Introduction}\label{cha:intro}
+
+\section{Overview of the \tdplot\ Package}
+The \tdplot\ package offers commands and coordinate transformation styles for \tikzname, providing relatively straightforward tools to draw three-dimensional coordinate systems and simple three-dimensional diagrams. The package is currently in its infancy, and is subject to change. Comments or suggestions are encouraged.
+
+This document describes the basics of the \tdplot\ package and provides information about the various available commands. Examples are given where possible.
+
+\subsection{What \tdplot\ is}
+
+\tdplot\ provides commands to easily specify coordinate transformations for \tikzname, allowing for relatively easy plotting. I needed to draw accurate 3d vector images for a physics thesis, and this package was developed to meet this need.
+
+Various plotting commands are used to identify coordinate locations using spherical polar or Cartesian coordinates. Coordinate transformation commands allow for the calculation of a coordinate in one frame based on its values in another frame. Some drawing commands have been developed to assist in the rendering of arcs. These commands do the number crunching required to position and render the arcs. These commands are discussed in Section \ref{sec:tdplotcommands}.
+
+In addition, the \verb|\tdplotsphericalsurfaceplot| was developed to render three-dimensional surfaces in spherical polar coordinates, where the radius is expressed in terms of a user-defined function of $\theta$ and $\phi$. With this function, the surface hue can be given explicitly, or expressed as a user-defined function of $r$, $\theta$, and $\phi$. This command is discussed in Section \ref{sec:spherical_surface_plot}.
+
+\begin{figure}[ht]
+ \begin{center}
+ \threedconventions
+ \end{center}
+ \caption{\tdplot\ coordinate and positive angle convention.}\label{fig:conventions}
+\end{figure}
+
+In \tdplot, a right-handed coordinate system convention is used. In addition, all positive angles constitute a right-hand screw sense of rotation (see Figure \ref{fig:conventions}). This means that a positive rotation about a given axis refers to a clockwise rotation when viewing along the direction the axis, or counterclockwise when viewing against the direction of the axis.
+
+\subsection{What \tdplot\ is not}
+
+\tdplot\ does not, in general, consider polygons, surfaces, or object opacity. The one exception is the \verb|\tdplotsphericalsurfaceplot| command, specifically designed to render spherical polar surfaces. The \verb|\tdplotsphericalsurfaceplot| command is discussed in Section \ref{sec:spherical_surface_plot}.
+
+Tools like Sketch by Gene Ressler are better suited for more rigorous surface rendering. These can be found at \url{http://www.frontiernet.net/~eugene.ressler/}
+
+\subsection{Similar Work}
+
+To my knowledge, there is no other package available which allows straightforward rendering of 3d coordinates in \tikzname, directly in a \LaTeX\ document. Since this project is in its infancy, this may be subject to change based on feedback.
+
+\subsubsection{Sketch}
+
+The Sketch project can provide three-dimensional rendering of axes, points, and lines, but (as far as I understand the program) cannot draw arcs without using a series of line segments. Further, Sketch requires an external program to render the image, while \tdplot\ can be developed and maintained right in a \LaTeX\ document.
+
+\subsubsection{\TeX ample.net}
+
+There are a variety of \tikzname\ examples listed at \url{http://www.texample.net/tikz/examples}. Some of these examples gave me inspiration to make this package. Some examples of note include the following:
+
+\begin{itemize}
+ \item 3D cone
+ \begin{description}
+ \item[Author:] Eugene Ressler
+ \item[url:] \url{http://www.texample.net/tikz/examples/3d-cone/}
+ \item[Notes:] This demonstrates the use of Sketch in TikZ figures.
+ \end{description}
+ \item Annotated 3D box
+ \begin{description}
+ \item[Author] Alain Matthes
+ \item[url] \url{http://www.texample.net/tikz/examples/annotated-3d-box/}
+ \item[Notes] This example demonstrates the direct use of coordinate transformations, as well as performing math directly within coordinates.
+ \end{description}
+ \item Cluster of atoms
+ \begin{description}
+ \item[Author] Agustin E. Bolzan
+ \item[url] \url{http://www.texample.net/tikz/examples/clusters-of-atoms/}
+ \item[Notes] This uses shifts and slants rather than rotations to render an isometric look.
+ \end{description}
+ \item Plane partition
+ \begin{description}
+ \item[Author] Jang Soo Kim
+ \item[url] \url{http://www.texample.net/tikz/examples/plane-partition/}
+ \item[Notes] This example draws solid surfaces with coordinate axes defined by rotations around the \tikzname\ standard coordinate frame.
+ \end{description}
+ \item Spherical and cartesian grids
+ \begin{description}
+ \item[Author] Marco Miani
+ \item[url] \url{http://www.texample.net/tikz/examples/spherical-and-cartesian-grids/}
+ \item[Notes] This example renders arcs and lines in three dimensions using explicit calculations. It takes into account the opacity of the spherical example, by showing hidden lines behind the sphere as dashed lines.
+ \end{description}
+ \item Stereographic and cylindrical map projections
+ \begin{description}
+ \item[Author] Thomas M. Trzeciak
+ \item[url] \url{http://www.texample.net/tikz/examples/map-projections/}
+ \item[Notes] This example illustrates the use of coordinate transformations to draw planes and arcs for spherical coordinates.
+ \end{description}
+\end{itemize}
+
+
+\section{Installing the \tdplot\ Package}
+
+Get a copy of \tdplot\ from \tdplotlocation. Place the style file in the same directory as your \LaTeX\ project. In your preamble, add the following line:
+%
+\begin{shaded}
+\begin{verbatim}
+\usepackage{tikz-3dplot}
+\end{verbatim}
+\end{shaded}
+
+Make sure this line is written after all other required packages.
+
+
+\subsection{\tdplot\ Requirements}
+
+To use this package, the following other packages must be loaded in the preamble first:
+\begin{itemize}
+\item \tikzname
+\item \texttt{ifthen} (for the \texttt{tdplotsphericalsurfaceplot} command)
+\end{itemize}
+
+
+\subsection{\tdplot\ Package Options}
+
+Currently there are no options available for the \tdplot\ package.
+
+\section{Using the \tdplot\ Package}
+
+\tdplot\ provides styles and commands which are useful in a \texttt{tikzpicture} environment. These commands and styles are described in Chapter \ref{cha:using_tdplot}.
+
+
+
+
+
+
+
+
+
+\chapter{Overview of 3d in \tdplot}\label{cha:overview3d}
+
+\section{\tikzname\ 3d Plotting} \label{sec:tikzplotting}
+
+When setting up a tikzpicture or a drawing style, the $x$, $y$, and $z$ axes can be specified directly in terms of the original coordinate system. The following example shows how a \texttt{tikzpicture} environment can be configured to use customized axes.
+
+\begin{shaded}
+\begin{verbatim}
+\begin{tikzpicture}[%
+ x={(\raarot cm,\rbarot cm)},%
+ y={(\rabrot cm, \rbbrot cm)},%
+ z={(\racrot, \rbcrot cm)}]
+\end{verbatim}
+\end{shaded}
+
+In this example, the terms \verb|\raarot| and so on specify how the coordinates are represented in the original \tikzname\ coordinate system, and are calculated by the \tdplot\ package. Note that units are explicitly required so \tikzname\ understands that these are absolute coordinates, not scales on the existing axis. See the PGF manual Version 2.00, section 21.2 on pages 217-218 for details on \tikzname\ coordinate transformations.
+
+\section{The \tdplot\ Main Coordinate System}\label{sec:main_theory}
+
+\tdplot\ offers two coordinate systems, namely the \emph{main} coordinate system $(x,y,z)$, and the \emph{rotated} coordinate system $(x',y',z')$. The latter system is described in Section \ref{sec:rotated_theory}.
+
+As the name suggests, the main coordinate system provides a user-specified transformation to render 3d points in a \texttt{tikzpicture} environment. The orientation of the main coordinate system is defined by the angles $\theta_{d}$ and $\phi_{d}$. In the unrotated ($\theta_{d} = \phi_{d} = 0$) position, the $xy$ plane of the main coordinate system coincides with the default orientation for a \texttt{tikzpicture} environment, while $z$ points ``out of the page''.
+%
+The coordinate system is positioned by the following operations:
+%
+\begin{itemize}
+ \item Rotate the coordinate system about the body $x$ axis by the amount $\theta_d$, and
+ \item Rotate the coordinate system about the (rotated) body $z$ axis by the amount $\phi_d$.
+\end{itemize}
+
+In this rotation sense, the $z$ axis will always point in the vertical page direction. This transformation is given by the rotation matrix $R_d(\theta_d,\phi_d)$, as
+%
+\begin{align}\begin{split}
+ R^d(\theta_d,\phi_d) &= R^{z'}(\phi_d)R^{x}(\theta_d)\\
+ &= \begin{pmatrix}
+ \cos\phi_d & -\sin\phi_d & 0\\
+ \sin\phi_d & \cos\phi_d & 0\\
+ 0 & 0 & 1
+ \end{pmatrix}
+ \begin{pmatrix}
+ 1 & 0 & 0\\
+ 0 & \cos\theta_d & -\sin\theta_d\\
+ 0 & \sin\theta_d & \cos\theta_d\\
+ \end{pmatrix}\\
+ &= \begin{pmatrix}
+ \cos\phi_d & \sin\phi_d & 0\\
+ -\cos\theta_d\sin\phi_d & \cos\theta_d\cos\phi_d & -\sin\theta_d\\
+ \sin\theta_d\sin\phi_d & -\sin\theta_d\cos\phi_d & \cos\theta_d\\
+ \end{pmatrix}
+\end{split}\end{align}
+
+\begin{figure}[b]
+ \begin{center}
+ \threedcoord{0}{0}
+ \threedcoord{10}{50}
+ \threedcoord{30}{110}
+
+ \threedcoord{40}{150}
+ \threedcoord{60}{170}
+ \threedcoord{90}{180}
+ \end{center}
+ \caption{Examples of coordinate systems for various choices of $\theta_d$ and $\phi_d$.}
+\end{figure}
+
+Using this matrix, the \tikzname\ coordinate transformation can be applied as described in Section \ref{sec:tikzplotting} by the various matrix elements, as
+%
+\begin{align}\begin{split}
+ x &= (R^d_{1,1}, R^d_{2,1})\\
+ y &= (R^d_{1,2}, R^d_{2,2})\\
+ z &= (R^d_{1,3}, R^d_{2,3})
+\end{split}\end{align}
+
+Note that the third row of the rotation matrix is not needed for this transformation, since a screen coordinate is a 2d value. Once the transformed axes have been established, any 3d coordinate specified in \tikzname\ will adhere to the transformation, yielding a 3D representation. Lines and nodes can readily be drawn by using these 3d coordinates.
+
+This coordinate transformation is accessible through \tdplot\ using the command \texttt{tdplotsetmaincoords}, as described in Chapter \ref{cha:using_tdplot}.
+
+\section{The \tdplot\ Rotated Coordinate System}\label{sec:rotated_theory}
+
+Along with the main coordinate system, described in Section \ref{sec:main_theory}, \tdplot\ offers a \emph{rotated} coordinate system that is defined with respect to the main coordinate system. This system can be rotated to any position using Euler rotations, and can be translated so the origin of the rotated coordinate system sits on an arbitrary point in the main coordinate system.
+
+Three rotations can be performed to give any arbitrary orientation of a rotated coordinate system. By convention, the following rotations are chosen:
+%
+\begin{itemize}
+ \item Rotate by angle $\gamma$ about the world $z$ axis,
+ \item Rotate by angle $\beta$ about the (unrotated) world $y$ axis, and
+ \item Rotate by angle $\alpha$ about the (unrotated) world $z$ axis.
+\end{itemize}
+
+These rotations are shown in Figure \ref{fig:euler_angles}.
+
+\begin{figure}[h]
+ \begin{center}
+ \threedalphabetagamma
+ \end{center}
+ \caption{Positioning the rotated coordinate frame $(x', y', z')$ using Euler angles $(\alpha, \beta, \gamma)$.}\label{fig:euler_angles}
+\end{figure}
+
+
+This rotation matrix $D(\alpha,\beta,\gamma)$ is given by
+%
+\begin{align}\begin{split}
+ D(\alpha,\beta,\gamma) &= R^z(\alpha)R^y(\beta)R^z(\gamma)\\
+ &= \begin{pmatrix}
+ \cos\alpha & -\sin\alpha & 0\\
+ \sin\alpha & \cos\alpha & 0\\
+ 0 & 0 & 1\\
+ \end{pmatrix}
+ \begin{pmatrix}
+ \cos\beta & 0 & \sin\beta \\
+ 0 & 1 & 0 \\
+ -\sin\beta & 0 & \cos\beta\\
+ \end{pmatrix}
+ \begin{pmatrix}
+ \cos\gamma & -\sin\gamma & 0\\
+ \sin\gamma & \cos\gamma & 0\\
+ 0 & 0 & 1\\
+ \end{pmatrix}\\
+ &= \begin{pmatrix}
+ \cos\alpha\cos\beta\cos\gamma - \sin\alpha\sin\gamma & -\cos\alpha\cos\beta\sin\gamma - \sin\alpha\cos\gamma & \cos\alpha\sin\beta\\
+ \sin\alpha\cos\beta\cos\gamma + \cos\alpha\sin\gamma & -\sin\alpha\cos\beta\sin\gamma + \cos\alpha\cos\gamma & \sin\alpha\sin\beta\\
+ -\sin\beta\cos\gamma & \sin\beta\sin\gamma & \cos\beta
+ \end{pmatrix}
+\end{split}\end{align}
+
+To define the rotated coordinate frame, this rotation matrix is applied after rotation matrix $R^d(\theta_d,\phi_d)$ used to define the main coordinate frame. The full transformation for the rotated coordinate frame is then given by
+%
+\begin{align}
+ R'^d(\theta_d,\phi_d,\alpha,\beta,\gamma) &= D(\alpha,\beta,\gamma)R^d(\theta_d,\phi_d)
+\end{align}
+
+Using this matrix, the \tikzname\ coordinate transformation can be applied as described in Section \ref{sec:tikzplotting} by the various matrix elements, as
+%
+\begin{align}\begin{split}
+ x' &= (R'^d_{1,1}, R'^d_{2,1})\\
+ y' &= (R'^d_{1,2}, R'^d_{2,2})\\
+ z' &= (R'^d_{1,3}, R'^d_{2,3})
+\end{split}\end{align}
+
+This coordinate transformation is accessible through \tdplot\ using the command \texttt{tdplotsetrotatedcoords}, as described in Chapter \ref{cha:using_tdplot}.
+
+\begin{figure}[h]
+ \begin{center}
+ \threedrotcoordsystem
+ \end{center}
+ \caption{The rotated coordinate frame $(x', y', z')$ displayed within the main coordinate frame $(x,y,z)$. Both are completely specified by user-defined angles: $(\theta_d, \phi_d)$ for the main coordinate frame, and $(\alpha, \beta, \gamma)$ for the rotated coordinate frame.}
+\end{figure}
+
+
+\section{Arcs in 3d, and the ``Theta Plane''}
+
+Arcs can be drawn in \tikzname\ using commands described in the PGF manual Version 2.00, section 2.10 on pages 25-26. However, the arc commands accept 2d coordinates, and thus can only be drawn in the $xy$ plane.
+
+To draw an arc in any position other than within the $xy$ plane of the main coordinate frame, the rotated coordinate frame must be used, where the $x'y'$ plane lies in the desired orientation within the main coordinate frame. Such an arc is needed, for example, when illustrating the polar angle $\theta$ of some vector. This $\theta$ arc exists in a plane which contains the $z$ axis, and is rotated about the $z$ axis by the angle $\phi$ from the $xz$ plane. For lack of a better name, this plane is referred to as the ``theta plane'' within a given coordinate system.
+
+\begin{figure}[h]
+ \begin{center}
+ \threedthetaarc
+ \end{center}
+ \caption{Drawing arcs outside the $xy$ plane by using a rotated coordinate frame in the ``theta plane'' of the main coordinate frame.}
+\end{figure}
+
+As described in Chapter \ref{cha:using_tdplot}, \tdplot\ offers the commands \texttt{tdplotsetthetaplanecoords} and \texttt{tdplotsetrotatedthetaplanecoords} to easily configure the rotated coordinate frame to lie within the desired theta plane.
+
+
+
+
+
+
+
+
+\chapter{Using the \tdplot\ Package} \label{cha:using_tdplot}
+
+The \tdplot\ package was developed to handle the number crunching described in Chapter \ref{cha:overview3d}, and provide a relatively simple and straightforward front-end for users.
+
+The main and rotated coordinate frames are configured by using commands described in Section \ref{sec:tdplotcommands}. These commands generate \tikzname\ styles which can be used either in defining the \texttt{tikzpicture} environment, or directly in any \tikzname\ command. The styles are described further in Section \ref{sec:tikzstyles}.
+
+\section{The \tdplot\ \tikzname\ Styles} \label{sec:tikzstyles}
+
+
+\subsection{\texttt{tdplot\_main\_coords}}
+
+The \verb|tdplot_main_coords| style stores the coordinate transformation required to generate the main coordinate system. This style can either be used when the \texttt{tikzpicture} environment is started, or when an individual \tikzname\ plotting command is used.
+
+\subsection{\texttt{tdplot\_rotated\_coords}}
+
+The \verb|tdplot_rotated_coords| style stores the coordinate transformation (translation and rotation) required to generate the rotated coordinate system within the main coordinate system. This style can either be used when the \texttt{tikzpicture} environment is started, or when an individual \tikzname\ plotting command is used.
+
+\subsection{\texttt{tdplot\_screen\_coords}}
+
+The \verb|tdplot_screen_coords| style provides the standard, unrotated \tikzname\ coordinate frame. This is useful to escape out of the user-defined 3d coordinates used at the beginning of the \texttt{tikzpicture} environment, and place something on an absolute scale in the figure. Tables, legends, and captions contained within the same figure as a 3d plot can make use of this style.
+
+%\section{The \tdplot\ Macros} \label{sec:tdplotmacros}
+%
+%\tdplot\ uses various macros to perform all its number crunching. Some of these are only used ``under the hood'', where the user would never need to know about them, while others are required to pass numbers to, or receive results from, the \tdplot\ commands.
+%
+%Since my knowledge of LaTeX is limited, there is probably a more streamlined and efficient way I can handle all this. As such, feedback and suggestions are welcome.
+%
+%\subsection{``Input'' Macros}
+%
+%These macros must be defined by the user before calling the corresponding command. In some cases, they are defined explicitly by another command, as described in the following section.
+%
+%\begin{center}
+% \begin{tabular}{c p{4in}}
+% \hline
+% \textbf{Macro} & \textbf{Notes}\\
+% \hline
+%
+% \hline
+% \end{tabular}
+%\end{center}
+%
+%\subsection{''Output'' Macros}
+%
+%These macros are defined as a result of calling a command. These can either be used directly by the user, or by subsequent \tdplot\ commands.
+%
+%\begin{center}
+% \begin{tabular}{c p{4in}}
+% \hline
+% \textbf{Macro} & \textbf{Notes}\\
+% \hline
+% \verb|\tdplotresx| & Result x value
+%
+% \hline
+% \end{tabular}
+%\end{center}
+%
+%\subsection{``Under the Hood'' Macros}
+%
+%These are macros which are not necessary to know about. They are used so \tdplot\ can perform its task, and are not used outside the commands.
+%
+%\begin{center}
+% \begin{tabular}{c p{4in}}
+% \hline
+% \textbf{Macro} & \textbf{Notes}\\
+% \hline
+% \verb|\lowerphi| & Lower $\phi$ limit for \verb|\tdplotsphericalsurfaceplot| polar plot.\\
+% \verb|\upperphi| & Upper $\phi$ limit for \verb|\tdplotsphericalsurfaceplot| polar plot.\\
+% \verb|\lowertheta| & Lower $\theta$ limit for \verb|\tdplotsphericalsurfaceplot| polar plot.\\
+% \verb|\uppertheta| & Upper $\theta$ limit for \verb|\tdplotsphericalsurfaceplot| polar plot.\\
+% \hline
+% \end{tabular}
+%\end{center}
+
+\section{The \tdplot\ Commands} \label{sec:tdplotcommands}
+
+This section lists the various commands provided by the \tdplot\ package. Examples are provided where it is useful.
+
+\section{Coordinate Configuration Commands}
+
+\subsection{\texttt{tdplotsetmaincoords}}
+
+\begin{description}
+ \item[Description:] Generates the style \verb|tdplot_main_coords| which provides the coordinate transformation for the main coordinate frame, based on a user-specified orientation $(\theta_d,\phi_d)$. $\theta_d$ denotes the rotation around the $x$ axis, while $\phi_d$ denotes the rotation around the $z$ axis. Note that $(0,0)$ is the default orientation, where $x$ points right, $y$ points up, and $z$ points ``out of the page''.
+
+ \item[Syntax:] \verb|\tdplotsetmaincoords{| $\theta_d$ \verb|}{| $\phi_d$ \verb|}|
+
+ \item[Parameters:]~
+ \begin{description}
+ \item[$\theta_d$] The angle (in degrees) through which the coordinate frame is rotated about the $x$ axis.
+ \item[$\phi_d$] The angle (in degrees) through which the coordinate frame is rotated about the $z$ axis.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+\end{tikzpicture}
+\end{shaded}
+
+\end{description}
+
+\subsection{\texttt{tdplotsetrotatedcoords}}
+
+\begin{description}
+ \item[Description:] Generates the style \verb|tdplot_rotated_coords| which provides the coordinate transformation for rotated coordinate frame within the current main coordinate frame, based on user-specified Euler angles $(\alpha,\beta,\gamma)$. Rotations use the $z(\alpha)y(\beta)z(\gamma)$ convention of Euler rotations, where the system is rotated by $\gamma$ about the $z$ axis, then $\beta$ about the (world) $y$ axis, and then $\alpha$ about the (world) $z$ axis.
+ \item[Syntax:] \verb|\tdplotsetrotatedcoords{|$\alpha$\verb|}{|$\beta$\verb|}{|$\gamma$\verb|}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[$\alpha$] The angle (in degrees) through which the rotated frame is rotated about the world $z$ axis.
+ \item[$\beta$] The angle (in degrees) through which the rotated frame is rotated about the world $y$ axis.
+ \item[$\gamma$] The angle (in degrees) through which the rotated frame is rotated about the world $z$ axis.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{60}{40}{30}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) --
+ (.7,0,0) node[anchor=north]{$x'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) --
+ (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) --
+ (0,0,.7) node[anchor=south]{$z'$};
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{60}{40}{30}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (.7,0,0) node[anchor=north]{$x'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.7) node[anchor=south]{$z'$};
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+\subsection{\texttt{tdplotsetrotatedcoordsorigin}}
+
+\begin{description}
+ \item[Description:] Sets the origin of the rotated coordinate system specified by \verb|tdplot_rotated_coords| using a user-defined point. This point can be either a literal or predefined point.
+ \item[Syntax:] \verb|\tdplotsetrotatedcoordsorigin{point}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[\texttt{point}] A point predefined using the \tikzname\ \verb|\coordinate| command.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{60}{40}{30}
+
+ \coordinate (Shift) at (0.5,0.5,0.5);
+ \tdplotsetrotatedcoordsorigin{(Shift)}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) --
+ (.7,0,0) node[anchor=north]{$x'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) --
+ (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) --
+ (0,0,.7) node[anchor=south]{$z'$};
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{60}{40}{30}
+
+ \coordinate (Shift) at (0.5,0.5,0.5);
+ \tdplotsetrotatedcoordsorigin{(Shift)}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (.7,0,0) node[anchor=north]{$x'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.7) node[anchor=south]{$z'$};
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+\subsection{\texttt{tdplotresetrotatedcoordsorigin}}
+
+\begin{description}
+ \item[Description:] Resets the origin of the rotated coordinate system back to the origin of the main coordinate system.
+ \item[Syntax:] \verb|\tdplotresetrotatedcoordsorigin|
+ \item[Parameters:] None
+\end{description}
+
+\subsection{\texttt{tdplotsetthetaplanecoords}}
+
+\begin{description}
+ \item[Description:] Generates a rotated coordinate system such that the $x'y'$ plane is coplanar to a plane containing the polar angle $\theta$ projecting from the main coordinate system $z$ axis. This coordinate system is particularly useful for drawing within this ``theta plane'', as \tikzname\ draws arcs in the $xy$ plane. As with \texttt{tdplotsetrotatedcoords}, this coordinate system is accessible through the \verb|tdplot_rotated_coords| style. Note that any rotated coordinate frame offset previously set by \texttt{tdplotsetrotatedcoordsorigin} is automatically reset when this command is used.
+ \item[Syntax:] \verb|\tdplotsetthetaplanecoords{|$\phi$\verb|}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[$\phi$] The angle (in degrees) through which the ``theta plane'' makes with the $xz$ plane of the main coordinate system.
+ \end{description}
+ \item[Example:]~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{70}{110}
+
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetcoord{P}{.8}{50}{70}
+
+ %draw a vector from origin to point (P)
+ \draw[-stealth,color=red] (O) -- (P);
+
+ %draw projection on xy plane, and a connecting line
+ \draw[dashed, color=red] (O) -- (Pxy);
+ \draw[dashed, color=red] (P) -- (Pxy);
+
+
+ \tdplotsetthetaplanecoords{70}
+
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0)
+ -- (.2,0,0) node[anchor=east]{$x'$};
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0)
+ -- (0,.2,0) node[anchor=north]{$y'$};
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0)
+ -- (0,0,.2) node[anchor=west]{$z'$};
+
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{70}{110}
+
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetcoord{P}{.8}{50}{70}
+
+ \coordinate (O) at (0,0,0);
+
+ %draw a vector from origin to point (P)
+ \draw[-stealth,color=red] (O) -- (P);
+
+ %draw projection on xy plane, and a connecting line
+ \draw[dashed, color=red] (O) -- (Pxy);
+ \draw[dashed, color=red] (P) -- (Pxy);
+
+ \tdplotsetthetaplanecoords{70}
+
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0)
+ -- (.2,0,0) node[anchor=east]{$x'$};
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0)
+ -- (0,.2,0) node[anchor=north]{$y'$};
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0)
+ -- (0,0,.2) node[anchor=west]{$z'$};
+
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+\subsection{\texttt{tdplotsetrotatedthetaplanecoords}}
+
+\begin{description}
+ \item[Description:] Just like \texttt{tdplotsetthetaplanecoords}, except this works for the rotated coordinate system. Generates a rotated coordinate system such that the $x'-y'$ plane is coplanar to a plane containing the polar angle $\theta'$ projecting from the current rotated coordinate system $z'$ axis. Note that the current rotated coordinate system is overwritten by this theta plane coordinate system after the command is completed.
+ \item[Syntax:] \verb|\tdplotsetrotatedthetaplanecoords{|$\phi'$\verb|}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[$\phi'$] The angle (in degrees) through which the ``theta plane'' makes with the $x'-z'$ plane of the current rotated coordinate system.
+ \end{description}
+ \item[Example:]~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \coordinate (Shift) at (2,2,2);
+
+ \tdplotsetrotatedcoords{-20}{10}{0}
+ \tdplotsetrotatedcoordsorigin{(Shift)}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (1,0,0) node[anchor=south east]{$x'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,1,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,1) node[anchor=south]{$z'$};
+
+ \tdplotsetrotatedthetaplanecoords{30}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (.5,0,0) node[anchor=south east]{$x''$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.5,0) node[anchor=west]{$y''$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.5) node[anchor=south]{$z''$};
+\end{tikzpicture}
+\end{verbatim}
+\ifpdf
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \coordinate (Shift) at (2,2,2);
+
+ \tdplotsetrotatedcoords{-20}{10}{0}
+ \tdplotsetrotatedcoordsorigin{(Shift)}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (1,0,0) node[anchor=south east]{$x'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,1,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z'$};
+
+ \tdplotsetrotatedthetaplanecoords{30}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[anchor=south east]{$x''$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[anchor=west]{$y''$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[anchor=south]{$z''$};
+\end{tikzpicture}
+\fi
+\end{shaded}
+
+\end{description}
+
+\subsection{\texttt{tdplotcalctransformmainrot}}
+
+\begin{description}
+ \item[Description:] Calculates the rotation matrix used to transform a coordinate from the main coordinate frame to the rotated coordinate frame. The matrix elements are stored in the macros \verb|\raaeul| through \verb|\rcceul|. This transformation is accessed using \verb|\tdplottransformmainrot|.
+\end{description}
+
+
+\subsection{\texttt{tdplotcalctransformrotmain}}
+
+\begin{description}
+ \item[Description:] Calculates the rotation matrix used to define the rotated coordinate frame, as well as transform a coordinate from the rotated coordinate frame to the main coordinate frame. The matrix elements are stored in the macros \verb|\raaeul| through \verb|\rcceul|. This transformation is used in the \verb|\tdplotsetrotatedcoords| command, and is accessed using \verb|\tdplottransformrotmain|.
+\end{description}
+
+\subsection{\texttt{tdplotcalctransformmainscreen}}
+
+\begin{description}
+ \item[Description:] Calculates the rotation matrix used to define the main coordinate frame, as well as transform a coordinate from the main coordinate frame to the screen coordinate frame. The matrix elements are stored in the macros \verb|\raarot| through \verb|\rccrot|. This transformation is used in the \verb|\tdplotsetmaincoords| command, and is accessed using \verb|\tdplottransformmainscreen|.
+\end{description}
+
+
+\section{Point Calculation Commands}
+
+\subsection{\texttt{tdplotsetcoord}}
+
+\begin{description}
+ \item[Description:] Generates a TikZ coordinate of specified name, along with coordinates for the $x-$, $y-$, $z-$, $xy-$, $xz-$, and $yz-$ projections of the coordinate, based on user-specified spherical coordinates. Note that this coordinate only works in the main coordinate system. All points in the rotated coordinate system must be specified as literal points.
+ \item[Syntax:] \verb|\tdplotsetcoord{point}{|$r$\verb|}{|$\theta$\verb|}{|$\phi$\verb|}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[\texttt{point}] The name of the TikZ coordinate to be assigned. Note that the $()$ parentheses must be excluded.
+ \item[$r$] Point radius.
+ \item[$\theta$] Point polar angle.
+ \item[$\phi$] Point azimuthal angle.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{60}{130}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \coordinate (O) at (0,0,0);
+
+ \tdplotsetcoord{P}{.8}{55}{60}
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \draw[-stealth,color=red] (O) -- (P);
+
+ \draw[dashed, color=red] (O) -- (Px);
+ \draw[dashed, color=red] (O) -- (Py);
+ \draw[dashed, color=red] (O) -- (Pz);
+ \draw[dashed, color=red] (Px) -- (Pxy);
+ \draw[dashed, color=red] (Py) -- (Pxy);
+ \draw[dashed, color=red] (Px) -- (Pxz);
+ \draw[dashed, color=red] (Pz) -- (Pxz);
+ \draw[dashed, color=red] (Py) -- (Pyz);
+ \draw[dashed, color=red] (Pz) -- (Pyz);
+ \draw[dashed, color=red] (Pxy) -- (P);
+ \draw[dashed, color=red] (Pxz) -- (P);
+ \draw[dashed, color=red] (Pyz) -- (P);
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{60}{130}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \coordinate (O) at (0,0,0);
+
+ \tdplotsetcoord{P}{.8}{55}{60}
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \draw[-stealth,color=red] (O) -- (P);
+
+ \draw[dashed, color=red] (O) -- (Px);
+ \draw[dashed, color=red] (O) -- (Py);
+ \draw[dashed, color=red] (O) -- (Pz);
+ \draw[dashed, color=red] (Px) -- (Pxy);
+ \draw[dashed, color=red] (Py) -- (Pxy);
+ \draw[dashed, color=red] (Px) -- (Pxz);
+ \draw[dashed, color=red] (Pz) -- (Pxz);
+ \draw[dashed, color=red] (Py) -- (Pyz);
+ \draw[dashed, color=red] (Pz) -- (Pyz);
+ \draw[dashed, color=red] (Pxy) -- (P);
+ \draw[dashed, color=red] (Pxz) -- (P);
+ \draw[dashed, color=red] (Pyz) -- (P);
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+\subsection{\texttt{tdplottransformmainrot}}
+
+\begin{description}
+ \item[Description:] Transforms a coordinate from the main coordinate frame to the rotated coordinate frame. This command cannot use a \tikzname\ coordinate, and does not account for a shifted rotated coordinate frame. The results are stored in the \verb|\tdplotresx|, \verb|\tdplotresy|, and \verb|\tdplotresz| macros.
+ \item[Syntax:] \verb|\tdplottransformmainrot{x}{y}{z}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[x] The x-component of the coordinate in the main coordinate frame.
+ \item[y] The y-component of the coordinate in the main coordinate frame.
+ \item[z] The z-component of the coordinate in the main coordinate frame.
+ \end{description}
+ \item[Output:] The following macros are assigned:
+ \begin{description}
+ \item[\texttt{tdplotresx}] The transformed coordinate x component in the rotated coordinate frame.
+ \item[\texttt{tdplotresy}] The transformed coordinate y component in the rotated coordinate frame.
+ \item[\texttt{tdplotresz}] The transformed coordinate z component in the rotated coordinate frame.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{50}{140}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{2}
+ \pgfmathsetmacro{\ay}{2}
+ \pgfmathsetmacro{\az}{1}
+
+ \tdplotsetrotatedcoords{20}{40}{00}
+
+ \draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0)
+ -- (.7,0,0) node[anchor=east]{$x'$};
+ \draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.7) node[anchor=south]{$z'$};
+
+
+ \tdplottransformmainrot{\ax}{\ay}{\az}
+
+ \draw[tdplot_rotated_coords,->,blue!50] (0,0,0)
+ -- (\tdplotresx,\tdplotresy,\tdplotresz);
+
+ \node[tdplot_main_coords,anchor=south]
+ at (\ax,\ay,\az){Main coords: (\ax, \ay, \az)};
+ \node[tdplot_rotated_coords,anchor=north]
+ at (\tdplotresx,\tdplotresy,\tdplotresz)
+ {Rotated coords: (\tdplotresx, \tdplotresy, \tdplotresz)};
+
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{50}{140}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{2}
+ \pgfmathsetmacro{\ay}{2}
+ \pgfmathsetmacro{\az}{1}
+
+ \tdplotsetrotatedcoords{20}{40}{00}
+
+ \draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0)
+ -- (.7,0,0) node[anchor=east]{$x'$};
+ \draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.7) node[anchor=south]{$z'$};
+
+
+ \tdplottransformmainrot{\ax}{\ay}{\az}
+
+ \draw[tdplot_rotated_coords,->,blue!50] (0,0,0)
+ -- (\tdplotresx,\tdplotresy,\tdplotresz);
+
+ \node[tdplot_main_coords,anchor=south]
+ at (\ax,\ay,\az){Main coords: (\ax, \ay, \az)};
+ \node[tdplot_rotated_coords,anchor=north]
+ at (\tdplotresx,\tdplotresy,\tdplotresz)
+ {Rotated coords: (\tdplotresx, \tdplotresy, \tdplotresz)};
+
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+\subsection{\texttt{tdplottransformrotmain}}
+
+\begin{description}
+ \item[Description:] Transforms a coordinate from the rotated coordinate frame to the main coordinate frame. This command cannot use a \tikzname\ coordinate, and does not account for a shifted rotated coordinate frame. The results are stored in the \verb|\tdplotresx|, \verb|\tdplotresy|, and \verb|\tdplotresz| macros.
+ \item[Syntax:] \verb|\tdplottransformrotmain{x}{y}{z}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[x] The x-component of the coordinate in the rotated coordinate frame.
+ \item[y] The y-component of the coordinate in the rotated coordinate frame.
+ \item[z] The z-component of the coordinate in the rotated coordinate frame.
+ \end{description}
+ \item[Output:] The following macros are assigned:
+ \begin{description}
+ \item[\texttt{tdplotresx}] The transformed coordinate x component in the main coordinate frame.
+ \item[\texttt{tdplotresy}] The transformed coordinate y component in the main coordinate frame.
+ \item[\texttt{tdplotresz}] The transformed coordinate z component in the main coordinate frame.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{50}{140}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{-.75}
+ \pgfmathsetmacro{\ay}{2.5}
+ \pgfmathsetmacro{\az}{0}
+
+ \tdplotsetrotatedcoords{20}{40}{00}
+
+ \draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0)
+ -- (.7,0,0) node[anchor=east]{$x'$};
+ \draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.7) node[anchor=south]{$z'$};
+
+
+ \tdplottransformrotmain{\ax}{\ay}{\az}
+
+ \draw[tdplot_main_coords,->,blue!50] (0,0,0)
+ -- (\tdplotresx,\tdplotresy,\tdplotresz);
+
+ \node[tdplot_rotated_coords,anchor=north]
+ at (\ax,\ay,\az){Rotated coords: (\ax, \ay, \az)};
+ \node[tdplot_main_coords,anchor=south]
+ at (\tdplotresx,\tdplotresy,\tdplotresz)
+ {Main coords: (\tdplotresx, \tdplotresy, \tdplotresz)};
+
+
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{50}{140}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{-.75}
+ \pgfmathsetmacro{\ay}{2.5}
+ \pgfmathsetmacro{\az}{0}
+
+ \tdplotsetrotatedcoords{20}{40}{00}
+
+ \draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0)
+ -- (.7,0,0) node[anchor=east]{$x'$};
+ \draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.7) node[anchor=south]{$z'$};
+
+
+ \tdplottransformrotmain{\ax}{\ay}{\az}
+
+ \draw[tdplot_main_coords,->,blue!50] (0,0,0)
+ -- (\tdplotresx,\tdplotresy,\tdplotresz);
+
+ \node[tdplot_rotated_coords,anchor=north]
+ at (\ax,\ay,\az){Rotated coords: (\ax, \ay, \az)};
+ \node[tdplot_main_coords,anchor=south]
+ at (\tdplotresx,\tdplotresy,\tdplotresz)
+ {Main coords: (\tdplotresx, \tdplotresy, \tdplotresz)};
+
+
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+\subsection{\texttt{tdplottransformmainscreen}}
+
+\begin{description}
+ \item[Description:] Transforms a coordinate from the main coordinate frame to the screen coordinate frame. This command cannot use a \tikzname\ coordinate. The results are stored in the \verb|\tdplotresx| and \verb|\tdplotresy| macros.
+ \item[Syntax:] \verb|\tdplottransformmainscreen{x}{y}{z}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[x] The x-component of the coordinate in the main coordinate frame.
+ \item[y] The y-component of the coordinate in the main coordinate frame.
+ \item[z] The z-component of the coordinate in the main coordinate frame.
+ \end{description}
+ \item[Output:] The following macros are assigned:
+ \begin{description}
+ \item[\texttt{tdplotresx}] The transformed coordinate x component in the screen coordinate frame.
+ \item[\texttt{tdplotresy}] The transformed coordinate y component in the screen coordinate frame.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{50}{140}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{2}
+ \pgfmathsetmacro{\ay}{3}
+ \pgfmathsetmacro{\az}{1}
+
+ \tdplottransformmainscreen{\ax}{\ay}{\az}
+
+ \draw[tdplot_screen_coords,->,blue!50] (0,0)
+ -- (\tdplotresx,\tdplotresy);
+
+ \node[tdplot_main_coords,anchor=south]
+ at (\ax,\ay,\az){Main coords: (\ax, \ay, \az)};
+ \node[tdplot_screen_coords,anchor=north]
+ at (\tdplotresx,\tdplotresy)
+ {Screen coords: (\tdplotresx, \tdplotresy)};
+
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{50}{140}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{2}
+ \pgfmathsetmacro{\ay}{3}
+ \pgfmathsetmacro{\az}{1}
+
+ \tdplottransformmainscreen{\ax}{\ay}{\az}
+
+ \draw[tdplot_screen_coords,->,blue!50] (0,0)
+ -- (\tdplotresx,\tdplotresy);
+
+ \node[tdplot_main_coords,anchor=south]
+ at (\ax,\ay,\az){Main coords: (\ax, \ay, \az)};
+ \node[tdplot_screen_coords,anchor=north]
+ at (\tdplotresx,\tdplotresy)
+ {Screen coords: (\tdplotresx, \tdplotresy)};
+
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+\subsection{\texttt{tdplotgetpolarcoords}}
+
+\begin{description}
+ \item[Description:] Calculates the $\theta$ polar coordinate for the specified point. The result is specified in the \verb|\tdplotrestheta| macro.
+ \item[Syntax:] \verb|\tdplotgetpolarcoords{x}{y}{z}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[x] The x-component of the coordinate.
+ \item[y] The y-component of the coordinate.
+ \item[z] The z-component of the coordinate.
+ \end{description}
+ \item[Output:]
+ \begin{description}
+ \item[\texttt{tdplotrestheta}] The $\theta$ polar coordinate.
+ \item[\texttt{tdplotresphi}] The $\phi$ polar coordinate.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (3,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,3,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,3) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{1}
+ \pgfmathsetmacro{\ay}{1}
+ \pgfmathsetmacro{\az}{1}
+
+ \draw[->,red] (0,0,0) -- (\ax,\ay,\az);
+
+ \draw[dashed,red] (0,0,0) -- (\ax,\ay,0) -- (\ax,\ay,\az);
+
+ \tdplotgetpolarcoords{\ax}{\ay}{\az}
+
+ \tdplotsetthetaplanecoords{\tdplotresphi}
+
+ \tdplotdrawarc[tdplot_rotated_coords]{(0,0,0)}{1}{0}%
+ {\tdplotrestheta}{anchor=west}{$\theta = \tdplotrestheta$}
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{70}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (3,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,3,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,3) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{1}
+ \pgfmathsetmacro{\ay}{1}
+ \pgfmathsetmacro{\az}{1}
+
+ \draw[->,red] (0,0,0) -- (\ax,\ay,\az);
+
+ \draw[dashed,red] (0,0,0) -- (\ax,\ay,0) -- (\ax,\ay,\az);
+
+ \tdplotgetpolarcoords{\ax}{\ay}{\az}
+
+ \tdplotdrawarc{(0,0,0)}{1}{0}%
+ {\tdplotresphi}{anchor=north}{$\phi = \tdplotresphi$}
+
+ \tdplotsetthetaplanecoords{\tdplotresphi}
+
+ \tdplotdrawarc[tdplot_rotated_coords]{(0,0,0)}{1}{0}%
+ {\tdplotrestheta}{anchor=west}{$\theta = \tdplotrestheta$}
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+\subsection{\texttt{tdplotcrossprod}}
+
+\begin{description}
+ \item[Description:] Calculates the cross product of two vectors specified by two coordinates with respect to the origin. The result vector is specified by the coordinates \verb|\tdplotresx|, \verb|\tdplotresy|, and \verb|\tdplotresz| with respect to the origin.
+ \item[Syntax:] \verb|\tdplotcrossprod(|$a_x$\verb|,|$a_y$\verb|,|$a_z$\verb|)(|$b_x$\verb|,|$b_y$\verb|,|$b_z$\verb|)|
+ \item[Parameters:]~
+ \begin{description}
+ \item[$a_x$] The x-component of the first vector with respect to the origin.
+ \item[$a_y$] The y-component of the first vector with respect to the origin.
+ \item[$a_z$] The z-component of the first vector with respect to the origin.
+ \item[$b_x$] The x-component of the second vector with respect to the origin.
+ \item[$b_y$] The y-component of the second vector with respect to the origin.
+ \item[$b_z$] The z-component of the second vector with respect to the origin.
+ \end{description}
+ \item[Output:] The following macros are assigned.
+ \begin{description}
+ \item[\texttt{tdplotresx}] The x-component of the cross product with respect to the origin.
+ \item[\texttt{tdplotresy}] The y-component of the cross product with respect to the origin.
+ \item[\texttt{tdplotresz}] The z-component of the cross product with respect to the origin.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{50}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (3,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,3,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,3) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{1}
+ \pgfmathsetmacro{\ay}{1}
+ \pgfmathsetmacro{\az}{.4}
+ \pgfmathsetmacro{\bx}{-1}
+ \pgfmathsetmacro{\by}{1}
+ \pgfmathsetmacro{\bz}{.6}
+
+ \tdplotcrossprod(\ax,\ay,\az)(\bx,\by,\bz)
+
+ \draw[->,red] (0,0,0) -- (\ax,\ay,\az) node[anchor=west]{$\vec{A}$};
+ \draw[dashed,red] (0,0,0) -- (\ax,\ay,0) -- (\ax,\ay,\az);
+ \draw[->,green!50!black] (0,0,0) --
+ (\bx,\by,\bz) node[anchor=south west]{$\vec{B}$};
+ \draw[dashed,green!50!black] (0,0,0) -- (\bx,\by,0) -- (\bx,\by,\bz);
+
+ \draw[->,blue] (0,0,0) -- (\tdplotresx,\tdplotresy,\tdplotresz)
+ node[anchor=south east]{$\vec{A}\times\vec{B}$};
+ \draw[dashed,blue] (0,0,0) -- (\tdplotresx,\tdplotresy,0)
+ -- (\tdplotresx,\tdplotresy,\tdplotresz);
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{50}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (3,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,3,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,3) node[anchor=south]{$z$};
+
+ \pgfmathsetmacro{\ax}{1}
+ \pgfmathsetmacro{\ay}{1}
+ \pgfmathsetmacro{\az}{.4}
+ \pgfmathsetmacro{\bx}{-1}
+ \pgfmathsetmacro{\by}{1}
+ \pgfmathsetmacro{\bz}{.6}
+
+ \tdplotcrossprod(\ax,\ay,\az)(\bx,\by,\bz)
+
+ \draw[->,red] (0,0,0) -- (\ax,\ay,\az) node[anchor=west]{$\vec{A}$};
+ \draw[dashed,red] (0,0,0) -- (\ax,\ay,0) -- (\ax,\ay,\az);
+ \draw[->,green!50!black] (0,0,0) --
+ (\bx,\by,\bz) node[anchor=south west]{$\vec{B}$};
+ \draw[dashed,green!50!black] (0,0,0) -- (\bx,\by,0) -- (\bx,\by,\bz);
+
+ \draw[->,blue] (0,0,0) -- (\tdplotresx,\tdplotresy,\tdplotresz)
+ node[anchor=south east]{$\vec{A}\times\vec{B}$};
+ \draw[dashed,blue] (0,0,0) -- (\tdplotresx,\tdplotresy,0)
+ -- (\tdplotresx,\tdplotresy,\tdplotresz);
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+\subsection{\texttt{tdplotdefinepoints}}
+
+\begin{description}
+ \item[Description:] Assigns the values of three coordinates, to be used in the \verb|\tdplotdrawpolytopearc|
+ \item[Syntax:] \verb|\tdplotdefinepoints(|$v_x$\verb|,|$v_y$\verb|,|$v_z$\verb|)(|$a_x$\verb|,|$a_y$\verb|,|$a_z$\verb|)(|$b_x$\verb|,|$b_y$\verb|,|$b_z$\verb|)|
+ \item[Parameters:]~
+ \begin{description}
+ \item[$v_x$] The x-component of the vertex.
+ \item[$v_y$] The y-component of the vertex.
+ \item[$v_z$] The z-component of the vertex.
+ \item[$a_x$] The x-component of the first point.
+ \item[$a_y$] The y-component of the first point.
+ \item[$a_z$] The z-component of the first point.
+ \item[$b_x$] The x-component of the second point.
+ \item[$b_y$] The y-component of the second point.
+ \item[$b_z$] The z-component of the second point.
+ \end{description}
+ \item[Output:] The following macros are assigned:
+ \begin{description}
+ \item[\texttt{tdplotvertexx}] The x-component of the vertex.
+ \item[\texttt{tdplotvertexy}] The y-component of the vertex.
+ \item[\texttt{tdplotvertexz}] The z-component of the vertex.
+ \item[\texttt{tdplotax}] The x-component of the first point.
+ \item[\texttt{tdplotay}] The y-component of the first point.
+ \item[\texttt{tdplotaz}] The z-component of the first point.
+ \item[\texttt{tdplotbx}] The x-component of the second point.
+ \item[\texttt{tdplotby}] The y-component of the second point.
+ \item[\texttt{tdplotbz}] The z-component of the second point.
+ \end{description}\end{description}
+
+
+\section{Drawing Commands}
+
+Along with all the conventional \tikzname\ drawing commands, the following \tdplot\ commands can be used.
+
+\subsection{\texttt{tdplotdrawarc}}
+
+\begin{description}
+ \item[Description:] Draws an arc in the $xy$ (or optionally $x'y'$) plane starting from the specified polar angle $\phi$, of specified radius and angular length, at specified center point, and labels the arc with specified node text and options. By default, draws in the main coordinate frame, but can draw in the rotated coordinate frame by specifying \verb|tdplot_rotated_coords| in the option field.
+ \item[Syntax:] \verb|\tdplotdrawarc[coordinate system, draw styles]{center}{r}|\\\verb|{angle start}{angle end}{label options}{label}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[(\textit{Optional}) coordinate system,draw styles] Optional argument containing the name of the coordinate system to use (default is main coordinate system), and any optional draw styles.
+ \item[center] Center point through which to draw the arc. If using the rotated coordinate system, this must be a literal value.
+ \item[r] The arc radius of curvature.
+ \item[angle start] the initial angle (in degrees) through which to draw. 0 points along the $x$ (or $x'$) axis.
+ \item[angle end] the final angle (in degrees) through which to draw.
+ \item[label options] any style options for a \tikzname \verb|\node| object. If none, make sure to leave a blank delimiter \verb|{}| in its place.
+ \item[label] any text for the \tikzname\ \verb|\node| which appears at the center of the arc. If none, make sure to leave a blank delimiter \verb|{}| in its place.
+ \end{description}
+ \item[Example:]~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{60}{110}
+%
+\pgfmathsetmacro{\rvec}{.8}
+\pgfmathsetmacro{\thetavec}{30}
+\pgfmathsetmacro{\phivec}{60}
+%
+\begin{tikzpicture}[scale=5,tdplot_main_coords]
+
+ \coordinate (O) at (0,0,0);
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}
+ \draw[-stealth,color=red] (O) -- (P);
+ \draw[dashed, color=red] (O) -- (Pxy);
+ \draw[dashed, color=red] (P) -- (Pxy);
+
+ \tdplotdrawarc{(O)}{0.2}{0}{\phivec}{anchor=north}{$\phi$}
+
+ \tdplotsetthetaplanecoords{\phivec}
+
+ \tdplotdrawarc[tdplot_rotated_coords]{(0,0,0)}{0.5}{0}%
+ {\thetavec}{anchor=south west}{$\theta$}
+
+ \draw[dashed,tdplot_rotated_coords] (\rvec,0,0) arc (0:90:\rvec);
+ \draw[dashed] (\rvec,0,0) arc (0:90:\rvec);
+
+ \tdplotsetrotatedcoords{\phivec}{\thetavec}{0}
+ \tdplotsetrotatedcoordsorigin{(P)}
+
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (.5,0,0) node[anchor=north west]{$x'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.5,0) node[anchor=west]{$y'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.5) node[anchor=south]{$z'$};
+
+ \draw[-stealth,color=blue,tdplot_rotated_coords] (0,0,0) -- (.2,.2,.2);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (0,0,0) -- (.2,.2,0);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (.2,.2,0) -- (.2,.2,.2);
+
+ \tdplotdrawarc[tdplot_rotated_coords,color=blue]{(0,0,0)}{0.2}{0}%
+ {45}{anchor=north west,color=black}{$\phi'$}
+
+ \tdplotsetrotatedthetaplanecoords{45}
+
+ \tdplotdrawarc[tdplot_rotated_coords,color=blue]{(0,0,0)}{0.2}{0}%
+ {55}{anchor=south west,color=black}{$\theta'$}
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{60}{110}
+%
+\pgfmathsetmacro{\rvec}{.8}
+\pgfmathsetmacro{\thetavec}{30}
+\pgfmathsetmacro{\phivec}{60}
+%
+\begin{tikzpicture}[scale=5,tdplot_main_coords]
+
+ \coordinate (O) at (0,0,0);
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}
+ \draw[-stealth,color=red] (O) -- (P);
+ \draw[dashed, color=red] (O) -- (Pxy);
+ \draw[dashed, color=red] (P) -- (Pxy);
+
+ \tdplotdrawarc{(O)}{0.2}{0}{\phivec}{anchor=north}{$\phi$}
+
+ \tdplotsetthetaplanecoords{\phivec}
+
+ \tdplotdrawarc[tdplot_rotated_coords]{(0,0,0)}{0.5}{0}{\thetavec}{anchor=south west}{$\theta$}
+
+ \draw[dashed,tdplot_rotated_coords] (\rvec,0,0) arc (0:90:\rvec);
+ \draw[dashed] (\rvec,0,0) arc (0:90:\rvec);
+
+ \tdplotsetrotatedcoords{\phivec}{\thetavec}{0}
+ \tdplotsetrotatedcoordsorigin{(P)}
+
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[anchor=north west]{$x'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[anchor=west]{$y'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[anchor=south]{$z'$};
+
+ \draw[-stealth,color=blue,tdplot_rotated_coords] (0,0,0) -- (.2,.2,.2);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (0,0,0) -- (.2,.2,0);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (.2,.2,0) -- (.2,.2,.2);
+
+ \tdplotdrawarc[tdplot_rotated_coords,color=blue]{(0,0,0)}{0.2}{0}{45}{anchor=north west,color=black}{$\phi'$}
+
+ \tdplotsetrotatedthetaplanecoords{45}
+
+ \tdplotdrawarc[tdplot_rotated_coords,color=blue]{(0,0,0)}{0.2}{0}{55}{anchor=south west,color=black}{$\theta'$}
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+\subsection{\texttt{tdplotdrawpolytopearc}}
+
+\begin{description}
+ \item[Description:] Draws an arc using three user-specified points and a radius. A vertex determines the center of curvature, while two points define the angular extent and the plane of the arc. The three points must be specified in the corresponding macros before this command is issued.
+ \item[Prerequisites:] The three points must be specified by using the \verb|\tdplotdefinepoints| command.
+ \item[Syntax:] \verb|\tdplotdrawpolytopearc[draw style]{r}{label options}{label}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[(\textit{Optional}) draw styles] Optional argument containing draw styles for rendering the arc.
+ \item[r] The arc radius of curvature.
+ \item[label options] any style options for a \tikzname \verb|\node| object. If none, make sure to leave a blank delimiter \verb|{}| in its place.
+ \item[label] any text for the \tikzname\ \verb|\node| which appears at the center of the arc. If none, make sure to leave a blank delimiter \verb|{}| in its place.
+ \end{description}
+ \item[Example:]~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (5,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,5,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,5) node[anchor=south]{$z$};
+
+ \tdplotdefinepoints(2,2,2)(3,5,1)(-1,5,3)
+
+ \draw[dashed] (0,0,0) -- (\tdplotvertexx,\tdplotvertexy,0) --
+ (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz);
+ \draw[dashed] (0,0,0) -- (\tdplotax,\tdplotay,0)
+ -- (\tdplotax,\tdplotay,\tdplotaz);
+ \draw[dashed] (0,0,0) -- (\tdplotbx,\tdplotby,0)
+ -- (\tdplotbx,\tdplotby,\tdplotbz);
+
+ \draw[->,red] (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz)
+ -- (\tdplotax,\tdplotay,\tdplotaz);
+ \draw[->,green!50!black] (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz)
+ -- (\tdplotbx,\tdplotby,\tdplotbz);
+
+ \node[anchor=east] at (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz){Vertex};
+ \node[anchor=north west] at (\tdplotax,\tdplotay,\tdplotaz){A};
+ \node[anchor=south west] at (\tdplotbx,\tdplotby,\tdplotbz){B};
+
+ \tdplotdrawpolytopearc[thick]{1}{anchor=west}{$\theta$}
+\end{tikzpicture}
+\end{verbatim}
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (5,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,5,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,5) node[anchor=south]{$z$};
+
+ \tdplotdefinepoints(2,2,2)(3,5,1)(-1,5,3)
+
+ \draw[dashed] (0,0,0) -- (\tdplotvertexx,\tdplotvertexy,0) --
+ (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz);
+ \draw[dashed] (0,0,0) -- (\tdplotax,\tdplotay,0)
+ -- (\tdplotax,\tdplotay,\tdplotaz);
+ \draw[dashed] (0,0,0) -- (\tdplotbx,\tdplotby,0)
+ -- (\tdplotbx,\tdplotby,\tdplotbz);
+
+ \draw[->,red] (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz)
+ -- (\tdplotax,\tdplotay,\tdplotaz);
+ \draw[->,green!50!black] (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz)
+ -- (\tdplotbx,\tdplotby,\tdplotbz);
+
+ \node[anchor=east] at (\tdplotvertexx,\tdplotvertexy,\tdplotvertexz){Vertex};
+ \node[anchor=north west] at (\tdplotax,\tdplotay,\tdplotaz){A};
+ \node[anchor=south west] at (\tdplotbx,\tdplotby,\tdplotbz){B};
+
+ \tdplotdrawpolytopearc[thick]{1}{anchor=west}{$\theta$}
+\end{tikzpicture}
+\end{shaded}
+\end{description}
+
+
+
+
+
+
+%make more!
+%\subsection{}
+
+%\begin{description}
+% \item[Description:]
+% \item[Syntax:]
+% \item[Parameters:]
+% \begin{description}
+% \item[]
+% \end{description}
+%\end{description}
+
+\section{The \texttt{tdplotsphericalsurfaceplot} Command}\label{sec:spherical_surface_plot}
+
+The \verb|\tdplotsphericalsurfaceplot| command is quite complicated, and it seemed appropriate to occupy its own section. This command was initially developed to provide a method of rendering complex polar functions, $z = z(\theta,\phi)$, where the magnitude of the function is expressed by the radius, and the phase of the function is expressed by the hue, as
+%
+\begin{align}\begin{split}
+ r &= \left|z(\theta,\phi)\right|\\
+ hue &= \mathrm{Arg}\left[z(\theta,\phi)\right]
+\end{split}\end{align}
+
+The command has been generalized so that the hue can be specified in terms of the three polar coordinates, as
+%
+\begin{align}\begin{split}
+ r &= f(\theta,\phi)\\
+ hue &= g(r,\theta,\phi)
+\end{split}\end{align}
+
+\subsection{How \texttt{tdplotsphericalsurfaceplot} Works}
+
+To achieve the illusion of a 3d surface with proper persistence of vision, the \tdplot\ package divides the drawing task into smaller sections. This division ensures the surface on the far side of the viewing perspective is properly occluded from view.
+
+For a given perspective assigned by the main coordinate frame, a ``view orientation'' can be defined, giving the angles $(\theta_{view},\phi_{view})$ that describe the orientation of the view. These angles determine how to dubdivide the surface rendering process. The following divisions are made:
+%
+\begin{itemize}
+ \item Divide the surface into ``front'' and ``back'', where the back is drawn before the front.
+ \item Subdivide into ``left'' and ``right''.
+ \item Subdivide further into ''top'' and ''bottom''.
+\end{itemize}
+
+The entire back half is drawn before the front half. For each half, the entire left or right side is drawn. For each side, all $\theta$ angles are drawn in wedges for each $\phi$ angle. When the back half is rendered, the $\theta$ angle is swept from $\theta_{view}$ toward the poles. When the front half is rendered, the $\theta$ angle is swept from the poles toward $\theta_{view}$.
+
+During this process, the $x$, $y$, and $z$ axes are drawn at the appropriate time, ensuring the axes are occluded properly by the shape. The draw instructions for these axes are specified as user-defined parameters for this command.
+
+\subsection{Using \texttt{tdplotsphericalsurfaceplot}}
+
+\begin{description}
+ \item[Description:] Draws a user-specified spherical polar function, with user-specified fill hues. Angular range to be displayed is specified with the \verb|\tdplotsetpolarplotrange| command. The line thickness can be specified by issuing the \verb|\pgfsetlinewidth| PGF macro.
+ \item[Syntax:] \verb|\tdplotsphericalsurfaceplot[fill color style]{theta steps}{phi steps}{function}|\\\verb|{line color}{fill color}{x axis}{y axis}{z axis}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[(\emph{Optional}) fill color style] Specifies whether \texttt{fill color} is a function of (\verb|\tdplotr|, \verb|\tdplottheta|, \verb|\tdplotphi|), or a direct \tikzname\ color. Set to \texttt{parametricfill} to enable functional coloring.
+ \item[theta steps] The number of steps used to render the surface along the $\theta$ direction. For best results, this number should not be smaller than 12, and should be a factor of 360.
+ \item[phi steps] The number of steps used to render the surface along the $\phi$ direction. For best results, this number should not be smaller than 12, and should be a factor of 360.
+ \item[function] A mathematical expression, containing the variables \verb|\tdplottheta| and \verb|\tdplotphi|, used to define the radius of the surface for given angles. Note that the absolute value of the function is plotted.
+ \item[line color] \tikzname\ color expression for surface lines.
+ \item[fill color] When the option \textit{parametricfill} is used then this can be some mathematical expression containing \verb|\tdplottheta| and \verb|\tdplotphi|. If not, then this can be any \tikzname\ expression for color. Note that if the function specified by \texttt{function} is negative, a shift of 180 is applied to the color. To avoid this, make sure \texttt{function} is always positive.
+ \item[x axis] Any draw commands used to render the $x$ axis.
+ \item[y axis] Any draw commands used to render the $y$ axis.
+ \item[z axis] Any draw commands used to render the $z$ axis.
+ \end{description}
+ \item[Example:]~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{70}{135}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords, fill opacity=.5]
+\pgfsetlinewidth{.2pt}
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+{sin(\tdplottheta)*cos(\tdplottheta)}{black}{\tdplotphi}%
+ {\draw[color=black,thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};}%
+ \node[tdplot_screen_coords,fill opacity=1] at (0,-1) {Parametric Fill in $\phi$};
+\end{tikzpicture}
+\begin{tikzpicture}[scale=2,tdplot_main_coords,line join=bevel,fill opacity=.8]
+\pgfsetlinewidth{.1pt}
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+{0.5*abs(cos(\tdplottheta))}{black}{2*abs(\tdplotr)}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (0,0,1) node[anchor=south]{$z$};}%
+ \node[tdplot_screen_coords,fill opacity=1] at (0,-1) {Parametric Fill in $r$};
+\end{tikzpicture}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords, fill opacity=.7]
+\pgfsetlinewidth{.4pt}
+\tdplotsphericalsurfaceplot{72}{24}%
+{0.5*cos(\tdplottheta)^2}{black}{red!80!black}%
+ {\draw[color=black,thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};}%
+
+ \node[tdplot_screen_coords,fill opacity=1] at (0,-1) {Solid Fill};
+\end{tikzpicture}
+\end{verbatim}
+\ifpdf
+\beginpgfgraphicnamed{Figures/examplesurfaceplot}
+\tdplotsetmaincoords{70}{135}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords, fill opacity=.5]
+\pgfsetlinewidth{.2pt}
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+{sin(\tdplottheta)*cos(\tdplottheta)}{black}{\tdplotphi}%
+ {\draw[color=black,thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};}%
+ \node[tdplot_screen_coords,fill opacity=1] at (0,-1) {Parametric Fill in $\phi$};
+\end{tikzpicture}
+\begin{tikzpicture}[scale=2,tdplot_main_coords,line join=bevel,fill opacity=.8]
+\pgfsetlinewidth{.1pt}
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+{0.5*abs(cos(\tdplottheta))}{black}{2*abs(\tdplotr)}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (0,0,1) node[anchor=south]{$z$};}%
+ \node[tdplot_screen_coords,fill opacity=1] at (0,-1) {Parametric Fill in $r$};
+\end{tikzpicture}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords, fill opacity=.7]
+\pgfsetlinewidth{.4pt}
+\tdplotsphericalsurfaceplot{72}{24}%
+{0.5*cos(\tdplottheta)^2}{black}{red!80!black}%
+ {\draw[color=black,thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};}%
+
+ \node[tdplot_screen_coords,fill opacity=1] at (0,-1) {Solid Fill};
+\end{tikzpicture}
+\endpgfgraphicnamed
+\fi
+\end{shaded}
+\end{description}
+
+\subsection{The \texttt{tdplotsetpolarplotrange} Command}
+
+\begin{description}
+ \item[Description:] Defines the range of angles to be displayed when using \verb|\tdplotsphericalsurfaceplot|
+ \item[Syntax:] \verb|\tdplotsetpolarplotrange{lowertheta}{uppertheta}{lowerphi}{upperphi}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[lowertheta] The lower limit for \verb|\tdplottheta|, in degrees.
+ \item[uppertheta] The upper limit for \verb|\tdplottheta|, in degrees.
+ \item[lowerphi] The lower limit for \verb|\tdplotphi|, in degrees.
+ \item[upperphi] The upper limit for \verb|\tdplotphi|, in degrees.
+ \end{description}
+ \item[Example:]~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords,%
+ fill opacity=.5]
+
+\tdplotsetpolarplotrange{90}{180}{180}{360}
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+{.5}{black}{\tdplotphi + 3*\tdplottheta}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0)
+ -- (0,0,1) node[anchor=south]{$z$};}%
+\end{tikzpicture}
+\end{verbatim}
+\ifpdf
+\beginpgfgraphicnamed{Figures/examplesurfaceplotrange}
+\tdplotsetmaincoords{70}{135}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords, fill opacity=.5]
+
+\tdplotsetpolarplotrange{90}{180}{180}{360}
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+{.5}{black}{\tdplotphi + 3*\tdplottheta}%
+ {\draw[color=black,thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};}%
+\end{tikzpicture}
+\endpgfgraphicnamed
+\fi
+\end{shaded}
+\end{description}
+
+\subsection{The \texttt{tdplotresetpolarplotrange} Command}
+
+\begin{description}
+ \item[Description:] Resets the range of angles to the default full range when using \verb|\tdplotsphericalsurfaceplot|
+ \item[Syntax:] \verb|\tdplotresetpolarplotrange|
+\end{description}
+
+\subsection{The \texttt{tdplotshowargcolorguide} Command}
+
+\begin{description}
+ \item[Description:] Draws a ``color guide'' table which associates the hue of a parametric polar plot with an angle. Guide is drawn at user-specified screen coordinates with user-specified size. This guide is intended to illustrate the complex phase representation of the surface for a given $\theta$ and $\phi$ coordinate.
+ \item[Syntax:] \verb|\tdplotshowargcolorguide{x position}{y position}{x size}{y size}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[x position] The x screen coordinate to place the lower-left corner of the guide.
+ \item[y position] The y screen coordinate to place the lower-left corner of the guide.
+ \item[x size] The width of the color guide.
+ \item[y size] The height of the color guide.
+ \end{description}
+ \item[Example:] ~
+\begin{shaded}
+\begin{verbatim}
+\tdplotsetmaincoords{40}{0}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords,%
+ fill opacity=1]
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+ {sqrt(15/2)/2*sin(\tdplottheta)^2}{black}%
+ {2*\tdplotphi - 6 * \tdplottheta}{}{}{}%
+\tdplotshowargcolorguide{3}{-.2}{.1}{1}
+\end{tikzpicture}
+\end{verbatim}
+\ifpdf
+\beginpgfgraphicnamed{Figures/exampleshowargcolorguide}
+\tdplotsetmaincoords{40}{0}
+\begin{tikzpicture}[scale=2,line join=bevel,tdplot_main_coords, fill opacity=1]
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+{sqrt(15/2)/2*sin(\tdplottheta)^2}{black}{2*\tdplotphi - 6 * \tdplottheta}{}{}{}%
+\tdplotshowargcolorguide{3}{-.2}{.1}{1}
+\end{tikzpicture}
+\endpgfgraphicnamed
+\fi
+\end{shaded}
+\end{description}
+
+\section{Miscellaneous Math Commands}
+
+The following commands are used to streamline the \tdplot\ calculations in the background. There is generally no need to use these directly, but may be useful on their own for any desired calculations.
+
+\subsection{\texttt{tdplotsinandcos}}
+
+\begin{description}
+ \item[Description:] Determines the sine and cosine of the specified angle, and stores in specified macros.
+ \item[Syntax:] \verb|\tdplotsinandcos{sintheta}{costeta}{theta}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[\texttt{sintheta}] A macro (eg. \verb|\sintheta|) to store the sine of \texttt{theta}.
+ \item[\texttt{costheta}] A macro (eg. \verb|\costheta|) to store the cosine of \texttt{theta}.
+ \item[\texttt{theta}] An angle (in degrees) to calculate. Can be a macro or literal value.
+ \end{description}
+\end{description}
+
+\subsection{\texttt{tdplotmult}}
+
+\begin{description}
+ \item[Description:] Determines the product of two specified values, and stores the result in the specified macro.
+ \item[Syntax:] \verb|\tdplotmult{result}{multiplicand}{multiplicator}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[\texttt{result}] A macro (eg. \verb|\result|) to store the product of \texttt{multiplicand * multiplicator}.
+ \item[\texttt{multiplicand}] The multiplicand of the product. Can be a macro or literal value.
+ \item[\texttt{multiplicator}] The multiplicator of the product. Can be a macro or literal value.
+ \end{description}
+\end{description}
+
+\subsection{\texttt{tdplotdiv}}
+
+\begin{description}
+ \item[Description:] Determines the quotient of two specified values, and stores the result in the specified macro.
+ \item[Syntax:] \verb|\tdplotdiv{result}{dividend}{divisor}|
+ \item[Parameters:]~
+ \begin{description}
+ \item[\texttt{result}] A macro (eg. \verb|\result|) to store the quotient of \texttt{dividend / divisor}.
+ \item[\texttt{dividend}] The dividend of the quotient. Can be a macro or literal value.
+ \item[\texttt{divisor}] The divisor of the quotient. Can be a macro or literal value.
+ \end{description}
+\end{description}
+
+\chapter{Known Issues}
+
+There are various issues that have been found while developing the \tdplot\ package. Some of these are currently open problems which will hopefully be resolved. Feedback and suggestions are welcome.
+
+\section{Predefined Points Don't Work in Rotated Frame}
+
+When a coordinate is defined using the \tikzname\ command \verb|\coordinate|, it will be transformed by the transformation specified at the beginning of the \texttt{tikzpicture} environment. These coordinates will not work for transformations applied at the actual \verb|\draw| command.
+
+This problem seems to be inherant with \tikzname\ itself. By way of example, the following code is taken right from the PGF manual Version 2.00, section 21.2 on page 218:
+
+\begin{shaded}
+\begin{verbatim}
+Case A:
+%this one works fine using literal coordinates
+\begin{tikzpicture}[smooth]
+ \draw plot coordinates{(1,0)(2,0.5)(3,0)(3,1)};
+ \draw[x={(0cm,1cm)},y={(1cm,0cm)},color=red]
+ plot coordinates{(1,0)(2,0.5)(3,0)(3,1)};
+\end{tikzpicture}
+
+Two distinct paths shown. All is good.
+
+Case B:
+%this one does not work using predefined coordinates
+\begin{tikzpicture}[smooth]
+ \coordinate (A) at (1,0);
+ \coordinate (B) at (2,0.5);
+ \coordinate (C) at (3,0);
+ \coordinate (D) at (3,1);
+ \draw plot coordinates{(A)(B)(C)(D)};
+ \draw[x={(0cm,1cm)},y={(1cm,0cm)},color=red] plot coordinates{(A)(B)(C)(D)};
+\end{tikzpicture}
+
+Both paths draw overtop each other, and the coordinates are not transformed!
+\end{verbatim}
+
+Case A:
+%this one works fine using literal coordinates
+\begin{tikzpicture}[smooth]
+ \draw plot coordinates{(1,0)(2,0.5)(3,0)(3,1)};
+ \draw[x={(0cm,1cm)},y={(1cm,0cm)},color=red] plot coordinates{(1,0)(2,0.5)(3,0)(3,1)};
+\end{tikzpicture}
+
+Two distinct paths shown. All is good.
+
+Case B:
+%this one does not work using predefined coordinates
+\begin{tikzpicture}[smooth]
+ \coordinate (A) at (1,0);
+ \coordinate (B) at (2,0.5);
+ \coordinate (C) at (3,0);
+ \coordinate (D) at (3,1);
+ \draw plot coordinates{(A)(B)(C)(D)};
+ \draw[x={(0cm,1cm)},y={(1cm,0cm)},color=red] plot coordinates{(A)(B)(C)(D)};
+\end{tikzpicture}
+
+Both paths draw overtop each other, and the coordinates are not transformed!
+\end{shaded}
+
+
+\section{\texttt{node} Command and \texttt{shift=(P)} Issues}
+
+When placing a node in a shifted coordinate frame, the \verb|\node| command will not position properly. As a workaround, the \verb|\draw| command must be used to position the node. By way of example.
+\begin{shaded}
+\begin{verbatim}
+Case A:
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \coordinate (P) at (3,3,3);
+ \tdplotsetrotatedcoords{0}{0}{0}
+ \tdplotsetrotatedcoordsorigin{(P)}
+
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (.5,0,0) node[anchor=north]{$x'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.5,0) node[anchor=south west]{$y'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.5) node[anchor=south east]{$z'$};
+
+ \node[tdplot_rotated_coords] at (30:.5){$\theta_{bad}$};
+ \draw[tdplot_rotated_coords] (0,0,0) + (30:.5) node{$\theta_{good}$};
+\end{tikzpicture}
+
+Here, the rotated coordinate frame is shifted by amount (P) within the main%
+coordinate frame. The node labelled $\theta_{bad}$ does not accept any%
+positioning coordinates.
+
+Case B:
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+% \coordinate (P) at (3,3,3);
+ \tdplotsetrotatedcoords{0}{0}{0}
+% \tdplotsetrotatedcoordsorigin{(P)}
+
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (.5,0,0) node[anchor=north]{$x'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,.5,0) node[anchor=south west]{$y'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0)
+ -- (0,0,.5) node[anchor=south east]{$z'$};
+
+ \node[tdplot_rotated_coords] at (30:.5){$\theta_{bad}$};
+ \draw[tdplot_rotated_coords] (0,0,0) + (30:.5) node{$\theta_{good}$};
+\end{tikzpicture}
+
+Here, the shift is removed from the rotated coordinate frame. The %
+previously failing \verb|\node| command works properly.
+\end{verbatim}
+Case A:
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \coordinate (P) at (3,3,3);
+ \tdplotsetrotatedcoords{0}{0}{0}
+ \tdplotsetrotatedcoordsorigin{(P)}
+
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[anchor=north]{$x'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[anchor=south west]{$y'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[anchor=south east]{$z'$};
+
+ \node[tdplot_rotated_coords] at (30:.5){$\theta_{bad}$};
+ \draw[tdplot_rotated_coords] (0,0,0) + (30:.5) node{$\theta_{good}$};
+\end{tikzpicture}
+
+Here, the rotated coordinate frame is shifted by amount (P) within the main coordinate frame. The node labelled $\theta_{bad}$ does not accept any positioning coordinates.
+
+Case B:
+\tdplotsetmaincoords{60}{110}
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+% \coordinate (P) at (3,3,3);
+ \tdplotsetrotatedcoords{0}{0}{0}
+% \tdplotsetrotatedcoordsorigin{(P)}
+
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[anchor=north]{$x'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[anchor=south west]{$y'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[anchor=south east]{$z'$};
+
+ \node[tdplot_rotated_coords] at (30:.5){$\theta_{bad}$};
+ \draw[tdplot_rotated_coords] (0,0,0) + (30:.5) node{$\theta_{good}$};
+\end{tikzpicture}
+
+Here, the shift is removed from the rotated coordinate frame. The previously failing \verb|\node| command works properly.
+\end{shaded}
+
+\section{PGF \texttt{xyz spherical} Coordinate System}
+
+I have recently heard about the \texttt{xyz spherical} coordinate system offered by PGF. Unfortunately, when I try to use it, I get compile errors. I haven't spent much time looking into it though, so I'm probably just doing something silly.
+\begin{shaded}
+\begin{verbatim}
+\draw[-stealth,color=orange] (0,0,0)
+ -- (xyz spherical cs:radius=.5,longitude=60,latitude=120);
+%this gives the following compile error using MikTeX 2.8:
+% Undefined control sequence. <argument> \tikz@cs@radius.
+\end{verbatim}
+\end{shaded}
+
+\chapter{TODO list}
+
+This chapter contains notes and jots of ideas of things to do which can expand or improve the \tdplot package.
+
+\begin{itemize}
+ \item Figure out how to work in a variable scope that doesn't interfere with other packages.
+ \item Find a way to check if TikZ is loaded, and give a compile error if necessary.
+ \item Find a way to use predefined coordinates in rotated or translated coordinate frames, instead of just literal coordinates.
+ \item Generalize matrix math if such a package exists.
+ \item Look into using TikZ spherical polar coordinates explicitly to streamline coordinate definitions.
+ \item Find a way to extract coordinate components defined by the \verb|\coordinate| command and use them in macros defined by the \verb|\pgfmathsetmacro| and \verb|\pgfmathparse| commands.
+\end{itemize}
+
+
+
+
+
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation_figures.tex b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation_figures.tex
new file mode 100644
index 0000000000..17bb4b993c
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-3dplot/tikz-3dplot_documentation_figures.tex
@@ -0,0 +1,281 @@
+\newcommand{\tdplotmainfig}{%
+%Angle Definitions
+%-----------------
+%
+%set the plot display orientation
+%synatax: \tdplotsetdisplay{\theta_d}{\phi_d}
+\tdplotsetmaincoords{60}{110}
+%
+%define polar coordinates for some vector
+%TODO: look into using 3d spherical coordinate system
+\pgfmathsetmacro{\rvec}{.8}
+\pgfmathsetmacro{\thetavec}{30}
+\pgfmathsetmacro{\phivec}{60}
+%
+%start tikz picture, and use the tdplot_main_coords style to implement the display coordinate transformation provided by 3dplot
+\begin{tikzpicture}[scale=3,tdplot_main_coords]
+
+ %set up some coordinates
+ %-----------------------
+ \coordinate (O) at (0,0,0);
+
+ %determine a coordinate (P) using (r,\theta,\phi) coordinates. This command also determines (Pxy), (Pxz), and (Pyz): the xy-, xz-, and yz-projections of the point (P).
+ %synatax: \tdplotsetcoord{Coordinate name without parentheses}{r}{\theta}{\phi}
+ \tdplotsetcoord{P}{\rvec}{\thetavec}{\phivec}
+
+ %draw figure contents
+ %--------------------
+
+ %draw the main coordinate system axes
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ %draw a vector from origin to point (P)
+ \draw[-stealth,color=red] (O) -- (P);
+
+ %draw projection on xy plane, and a connecting line
+ \draw[dashed, color=red] (O) -- (Pxy);
+ \draw[dashed, color=red] (P) -- (Pxy);
+
+ %draw the angle \phi, and label it
+ %syntax: \tdplotdrawarc[coordinate frame, draw options]{center point}{r}{angle}{label options}{label}
+ \tdplotdrawarc{(O)}{0.2}{0}{\phivec}{anchor=north}{$\phi$}
+
+
+ %set the rotated coordinate system so the x'-y' plane lies within the "theta plane" of the main coordinate system
+ %syntax: \tdplotsetthetaplanecoords{\phi}
+ \tdplotsetthetaplanecoords{\phivec}
+
+ %draw theta arc and label, using rotated coordinate system
+ \tdplotdrawarc[tdplot_rotated_coords]{(0,0,0)}{0.5}{0}{\thetavec}{anchor=south west}{$\theta$}
+
+ %draw some dashed arcs, demonstrating direct arc drawing
+ \draw[dashed,tdplot_rotated_coords] (\rvec,0,0) arc (0:90:\rvec);
+ \draw[dashed] (\rvec,0,0) arc (0:90:\rvec);
+
+ %set the rotated coordinate definition within display using a translation coordinate and Euler angles in the "z(\alpha)y(\beta)z(\gamma)" euler rotation convention
+ %syntax: \tdplotsetrotatedcoords{\alpha}{\beta}{\gamma}
+ \tdplotsetrotatedcoords{\phivec}{\thetavec}{0}
+
+ %translate the rotated coordinate system
+ %syntax: \tdplotsetrotatedcoordsorigin{point}
+ \tdplotsetrotatedcoordsorigin{(P)}
+
+ %use the tdplot_rotated_coords style to work in the rotated, translated coordinate frame
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[anchor=north west]{$x'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[anchor=west]{$y'$};
+ \draw[thick,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[anchor=south]{$z'$};
+
+ %WARNING: coordinates defined by the \coordinate command (eg. (O), (P), etc.) cannot be used in rotated coordinate frames. Use only literal coordinates.
+
+ %draw some vector, and its projection, in the rotated coordinate frame
+ \draw[-stealth,color=blue,tdplot_rotated_coords] (0,0,0) -- (.2,.2,.2);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (0,0,0) -- (.2,.2,0);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (.2,.2,0) -- (.2,.2,.2);
+
+ %show its phi arc and label
+ \tdplotdrawarc[tdplot_rotated_coords,color=blue]{(0,0,0)}{0.2}{0}{45}{anchor=north west,color=black}{$\phi'$}
+
+ %change the rotated coordinate frame so that it lies in its theta plane. Note that this overwrites the original rotated coordinate frame
+ %syntax: \tdplotsetrotatedthetaplanecoords{\phi'}
+ \tdplotsetrotatedthetaplanecoords{45}
+
+ %draw theta arc and label
+ \tdplotdrawarc[tdplot_rotated_coords,color=blue]{(0,0,0)}{0.2}{0}{55}{anchor=south west,color=black}{$\theta'$}
+
+\end{tikzpicture}
+}
+
+\newcommand{\threedcoord}[2]{%
+\tdplotsetmaincoords{#1}{#2}
+\begin{tikzpicture}[tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+\end{tikzpicture}
+}
+
+\newcommand{\threedrotcoordsystem}{%
+\tdplotsetmaincoords{50}{140}
+\begin{tikzpicture}[scale=5,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{34}{26}{12}
+
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (.5,0,0) node[anchor=north east]{$x'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,.5,0) node[anchor=north west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.5) node[anchor=south]{$z'$};
+
+\end{tikzpicture}
+}
+
+\newcommand{\threedconventions}{%
+\tdplotsetmaincoords{50}{110}
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \draw[color=blue] (0,0,0) -- (.5,.5,0);
+
+ \draw[color=blue,->] (.5,0,0) arc (0:45:.5);
+\end{tikzpicture}
+}
+
+
+\newcommand{\threedalphabetagamma}{%
+\beginpgfgraphicnamed{Figures/alphabetagamma}
+\tdplotsetmaincoords{50}{140}
+%
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{0}{0}{30}
+
+ \draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0) -- (.7,0,0) node[anchor=north]{$x'$};
+ \draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0) -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.7) node[anchor=west]{$z'$};
+
+ \tdplotdrawarc[color=orange!50!black]{(0,0,0)}{.4}{0}{30}{anchor=north east}{$\gamma$}
+\end{tikzpicture}
+%
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{0}{0}{30}
+
+ \draw[dashed,color=red,tdplot_rotated_coords] (0,0,0) -- (.5,0,0);
+ \draw[dashed,color=green!50!black,tdplot_rotated_coords] (0,0,0) -- (0,.5,0);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (0,0,0) -- (0,0,.5);
+
+ \tdplotsetrotatedcoords{0}{40}{30}
+
+ \draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0) -- (.7,0,0) node[anchor=north]{$x'$};
+ \draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0) -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.7) node[anchor=south]{$z'$};
+
+ \tdplotsetthetaplanecoords{0}
+ \tdplotdrawarc[tdplot_rotated_coords,color=orange!50!black]{(0,0,0)}{.4}{0}{40}{anchor=south}{$\beta$}
+
+\end{tikzpicture}
+%
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetrotatedcoords{0}{40}{30}
+
+ \draw[dashed,color=red,tdplot_rotated_coords] (0,0,0) -- (.5,0,0);
+ \draw[dashed,color=green!50!black,tdplot_rotated_coords] (0,0,0) -- (0,.5,0);
+ \draw[dashed,color=blue,tdplot_rotated_coords] (0,0,0) -- (0,0,.5);
+
+ \tdplotsetrotatedcoords{60}{0}{0}
+ \draw[dotted,color=blue,tdplot_rotated_coords] (0,0,0) -- (.4,0,0);
+ \tdplotsetrotatedcoords{60}{40}{30}
+
+ \draw[thick,color=red,tdplot_rotated_coords,->] (0,0,0) -- (.7,0,0) node[anchor=north]{$x'$};
+ \draw[thick,color=green!50!black,tdplot_rotated_coords,->] (0,0,0) -- (0,.7,0) node[anchor=west]{$y'$};
+ \draw[thick,color=blue,tdplot_rotated_coords,->] (0,0,0) -- (0,0,.7) node[anchor=south]{$z'$};
+
+
+ \tdplotdrawarc[color=orange!50!black]{(0,0,0)}{.2}{0}{60}{anchor=north east}{$\alpha$}
+\end{tikzpicture}
+\endpgfgraphicnamed
+}
+
+\newcommand{\threedthetaarc}{%
+%
+\tdplotsetmaincoords{70}{110}
+%
+\begin{tikzpicture}[scale=5,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \tdplotsetcoord{P}{.8}{50}{70}
+
+ %draw a vector from origin to point (P)
+ \draw[-stealth,color=red] (O) -- (P);
+
+ %draw projection on xy plane, and a connecting line
+ \draw[dashed, color=red] (O) -- (Pxy);
+ \draw[dashed, color=red] (P) -- (Pxy);
+
+
+ \tdplotsetthetaplanecoords{70}
+
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0) -- (.2,0,0) node[anchor=east]{$x'$};
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0) -- (0,.2,0) node[anchor=north]{$y'$};
+ \draw[tdplot_rotated_coords,color=blue,thick,->] (0,0,0) -- (0,0,.2) node[anchor=west]{$z'$};
+
+
+ \tdplotdrawarc[tdplot_rotated_coords,color=orange!50!black]{(0,0,0)}{.4}{0}{50}{anchor=north east}{$\theta$}
+\end{tikzpicture}
+}
+
+\newcommand{\threedparamplot}{%
+%
+\beginpgfgraphicnamed{Figures/threedparamplot}
+\tdplotsetmaincoords{70}{110}
+%
+\begin{tikzpicture}[scale=2,tdplot_main_coords]
+ \draw[thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};
+ \draw[thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};
+ \draw[thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};
+
+ \pgfplothandlerlineto
+ \pgfplotfunction{\thetaen}{0,6,...,360}{%
+ \pgfpointxyz{cos(\thetaen)}%
+ {sin(\thetaen)}%
+ {\thetaen/400}
+ }
+ \pgfusepath{stroke}
+
+\end{tikzpicture}
+\endpgfgraphicnamed
+}
+
+\newcommand{\threedsurfaceplot}{%
+\beginpgfgraphicnamed{Figures/threedsurfaceplot}
+%
+\tdplotsetmaincoords{70}{135}
+%
+\begin{tikzpicture}[scale=3,line join=bevel,tdplot_main_coords, fill opacity=.6]
+
+\tdplotsphericalsurfaceplot[parametricfill]{72}{36}%
+%{0.3}{black}{red}%
+%{0.5*sin(\tdplottheta)*sin(\tdplottheta)}{black}{red}%
+%{0.5*sin(\tdplottheta)*sin(\tdplottheta)*sin(\tdplotphi)*sin(\tdplotphi)}{black}{red}%
+%{0.5*cos(\tdplottheta)*cos(\tdplottheta)}{black}{red}%
+%{0.25*cos(\tdplottheta)}{black}{red}%
+{(sin(\tdplottheta)*cos(\tdplottheta))}{black}{\tdplotphi}%
+%{ .15*(3*cos(\tdplottheta)*cos(\tdplottheta) - 1 )^2}{black}{\tdplotphi}
+ {\draw[color=black,thick,->] (0,0,0) -- (1,0,0) node[anchor=north east]{$x$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,1,0) node[anchor=north west]{$y$};}%
+ {\draw[color=black,thick,->] (0,0,0) -- (0,0,1) node[anchor=south]{$z$};}%
+
+\end{tikzpicture}
+\endpgfgraphicnamed
+
+}
+
+\newcommand{\colortest}{%
+\begin{tikzpicture}
+ \foreach \thetawheel in {0,1,...,360}
+ {
+ %\tdplotcalcrgb{\thetawheel}
+ \pgfmathdivide{\thetawheel}{360}
+ \definecolor{tdplotcolor}{hsb}{\pgfmathresult, 1, 1}
+ \color{tdplotcolor}
+ \filldraw(\thetawheel:3) circle (1pt);
+ }
+\end{tikzpicture}
+}
diff --git a/graphics/pgf/contrib/tikz-bayesnet/LICENSE_GPL b/graphics/pgf/contrib/tikz-bayesnet/LICENSE_GPL
new file mode 100644
index 0000000000..94a9ed024d
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/LICENSE_GPL
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/graphics/pgf/contrib/tikz-bayesnet/LICENSE_LPPL b/graphics/pgf/contrib/tikz-bayesnet/LICENSE_LPPL
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/LICENSE_LPPL
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/graphics/pgf/contrib/tikz-bayesnet/README b/graphics/pgf/contrib/tikz-bayesnet/README
new file mode 120000
index 0000000000..92cacd2853
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/README
@@ -0,0 +1 @@
+README.rst \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-bayesnet/README.rst b/graphics/pgf/contrib/tikz-bayesnet/README.rst
new file mode 100644
index 0000000000..e65c6f7734
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/README.rst
@@ -0,0 +1,120 @@
+BayesNet
+========
+
+TikZ library for drawing Bayesian networks, graphical models and (directed) factor
+graphs in LaTeX.
+
+Contents
+--------
+
+Provides the following node styles:
+
+* :code:`latent`
+
+* :code:`obs`
+
+* :code:`det`
+
+* :code:`const`
+
+* :code:`factor`
+
+* :code:`plate`
+
+* :code:`gate`
+
+Provides the following commands (note that any of the arguments can be
+empty):
+
+* :code:`\factor [options] {name} {caption} {inputs} {outputs}`
+
+* :code:`\plate [options] {name} {fitlist} {caption}`
+
+* :code:`\gate [options] {name} {fitlist} {inputs}`
+
+* :code:`\vgate {name} {fitlist-left} {caption-left} {fitlist-right}
+ {caption-right} {inputs}`
+
+* :code:`\hgate {name} {fitlist-top} {caption-top} {fitlist-bottom}
+ {caption-bottom} {inputs}`
+
+* :code:`\edge [options] {inputs} {outputs}`
+
+* :code:`\factoredge [options] {inputs} {factors} {outputs}`
+
+Usage
+-----
+
+Install the package by copying tikzlibrarybayesnet.code.tex to your
+LaTeX system or copy the file into projects that are using it. To use
+the library in your LaTeX file
+
+.. code-block:: python
+
+ \usepackage{tikz}
+ \usetikzlibrary{bayesnet}
+
+Compile the LaTeX example:
+
+.. code-block:: none
+
+ pdflatex example.tex
+
+and see the resulting PDF file example.pdf.
+
+Example
+-------
+
+.. figure:: http://i.imgur.com/CzNyk.png
+ :align: center
+ :alt: Bayesian network.
+
+ PCA model as a Bayesian network and a directed factor graph.
+
+.. figure:: http://i.imgur.com/CBZqL.png
+ :align: center
+ :alt: Citation influence model
+
+ Directed factor graph of the citation influence model.
+
+
+Related projects
+----------------
+
+This library is derived from a technical report "Directed Factor Graph
+Notation for Generative Models" and the accompanying TikZ macros by
+Laura Dietz 2010 (http://people.cs.umass.edu/~dietz/).
+
+GraphViz (http://www.graphviz.org/) is a more general open source
+graph visualization software. It uses DOT file format to describe the
+structure of the graph. The DOT file can be converted to LaTeX using
+:code:`dot2tex` (http://www.fauskes.net/code/dot2tex/).
+
+UAI (http://graphmod.ics.uci.edu/uai08/FileFormat) is a simple text
+file format to describe Markov networks. The UAI file format can be
+converted to DOT file format using :code:`uai2dot`
+(https://github.com/drewfrank/uai2dot).
+
+License
+-------
+
+| Copyright (C) 2010-2011 Laura Dietz
+| Copyright (C) 2012 Jaakko Luttinen jaakko.luttinen@aalto.fi
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The license is in the file
+LICENSE_LPPL and the latest version of this license is in
+http://www.latex-project.org/lppl.txt and version 1.3 or later is part
+of all distributions of LaTeX version 2005/12/01 or later.
+
+This work is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation, either version 3 of the License, or (at your
+option) any later version. This work is distributed in the hope that
+it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
+the GNU General Public License for more details. See the license in
+the file LICENSE_GPL or visit <http://www.gnu.org/licenses/>.
+
+
diff --git a/graphics/pgf/contrib/tikz-bayesnet/example.tex b/graphics/pgf/contrib/tikz-bayesnet/example.tex
new file mode 100644
index 0000000000..19381bd8a1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/example.tex
@@ -0,0 +1,158 @@
+% example.tex
+%
+% Copyright (C) 2010,2011 Laura Dietz
+% Copyright (C) 2012 Jaakko Luttinen
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU General Public License.
+%
+% See the files LICENSE_LPPL and LICENSE_GPL for more details.
+
+\documentclass[a4paper]{article}
+
+\usepackage{tikz}
+\usetikzlibrary{bayesnet}
+%\pgfrealjobname{example} % name of this file
+
+\title{Graphical Models in Tikz}
+\author{Laura Dietz, Jaakko Luttinen}
+
+\begin{document}
+
+\maketitle
+
+TikZ examples for graphical models (Bayesian networks) and directed
+factor graphs \cite{Dietz:2010}.
+
+% A table of node types
+\begin{table}[ht]
+ \caption{Node types}
+ \begin{center}
+ \begin{tabular}{llc}
+ Type & Syntax & Output
+ \\
+ \hline
+ Latent variable &
+ \texttt{\textbackslash node[latent]} &
+ \tikz{ %
+ \node[latent] {$x$}; %
+ }
+ \\
+ Observed variable &
+ \texttt{\textbackslash node[obs]} &
+ \tikz{ %
+ \node[obs] {$y$}; %
+ }
+ \\
+ Deterministic &
+ \texttt{\textbackslash node[det]} &
+ \tikz{ %
+ \node[det] {dot} ; %
+ }
+ \\
+ Constant &
+ \texttt{\textbackslash node[const]} &
+ \tikz{ %
+ \node[const] {$a$}; %
+ }
+ \\
+ Factor &
+ \texttt{\textbackslash node[factor]} &
+ \tikz{ %
+ \node[factor] [label=$\mathcal{N}$] {}; %
+ }
+ \\
+ Factor with nodes &
+ &
+ \tikz{ %
+ \node[obs] (y) {$y$} ; %
+ \node[latent, left=of y, yshift=0.5cm] (mu) {$\mu$} ; %
+ \node[latent, left=of y, yshift=-0.5cm] (tau) {$\tau$} ; %
+ \factor[left=of y] {y-factor} {$\mathcal{N}$} {} {};
+ \factoredge {mu,tau} {y-factor} {y} ; %
+ }
+ \\
+ Plate &
+ \texttt{\textbackslash plate} &
+ \tikz{ %
+ \node[latent] (x) {$x_m$}; %
+ \plate {} {(x)} {$m \in \mathcal{M}$}; %
+ }
+ \\
+ Gate &
+ &
+ \tikz{
+ % Nodes
+ \node[obs] (k) {$k$}; %
+ \node[latent, above=2 of k] (l) {$\lambda$}; %
+ \factor[above=0.8 of k] {k-f} {Multi} {} {}; %
+ \node[latent, right=of k-f] (paa) {$\phi$}; %
+ %\node[latent, right=of k-f] (p) {$\phi$}; %
+ % Connections
+ \factoredge {paa} {k-f} {k} ; %
+ % Gate
+ \gate {} {(k-f)(k-f-caption)} {l} ; %
+ }
+ \end{tabular}
+ \end{center}
+\end{table}
+
+
+% Simple Bayesian network
+\begin{figure}[ht]
+ \begin{center}
+ \begin{tabular}{cc}
+ \input{model_pca} &
+ \input{model_pca2}
+ \end{tabular}
+ \end{center}
+ \caption{PCA model as a Bayesian network and a directed factor
+ graph.}
+\end{figure}
+
+% Latent Dirichlet allocation
+\begin{figure}[ht]
+ \begin{center}
+ \input{model_lda}
+ \end{center}
+ \caption{Latent Dirichlet allocation as directed factor graph.}
+\end{figure}
+
+% Citation influence model
+\begin{figure}[ht]
+ \begin{center}
+ \input{model_citation_influence}
+ \end{center}
+ \caption{Citation influence model with own topics \cite{Dietz:2007}
+ as directed factor graph.}
+\end{figure}
+
+\clearpage
+
+\begin{thebibliography}{9}
+
+\bibitem{Dietz:2010}
+ Laura Dietz,
+ \emph{Directed Factor Graph Notation for Generative Models}.
+ Technical Report. 2010
+
+% Laura Dietz, Steffen Bickel, Tobias Scheffer.
+% Unsupervised Prediction of Citation Influences.
+% In: Proceedings of International Conference on Machine Learning. 2007
+\bibitem{Dietz:2007}
+ Laura Dietz, Steffen Bickel, Tobias Scheffer,
+ \emph{Unsupervised Prediction of Citation Influences}.
+ In: Proceedings of International Conference on Machine
+ Learning. 2007
+
+
+\end{thebibliography}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: tex-pdf
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-bayesnet/model_citation_influence.tex b/graphics/pgf/contrib/tikz-bayesnet/model_citation_influence.tex
new file mode 100644
index 0000000000..5df66a5a19
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/model_citation_influence.tex
@@ -0,0 +1,135 @@
+% model_citation_influence.tex
+%
+% Copyright (C) 2010,2011 Laura Dietz
+% Copyright (C) 2012 Jaakko Luttinen
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU General Public License.
+%
+% See the files LICENSE_LPPL and LICENSE_GPL for more details.
+
+% Citation influence model
+% Cite this model as
+% Laura Dietz, Steffen Bickel, Tobias Scheffer.
+% Unsupervised Prediction of Citation Influences.
+% In: Proceedings of International Conference on Machine Learning. 2007
+
+%\beginpgfgraphicnamed{model-citation-influence}
+\begin{tikzpicture}
+
+ % Layout the variables
+ \matrix[row sep=0.5cm, column sep=1.2cm] (LDA)
+ { %
+ & %
+ & %
+ \node[latent] (gamma) {$\gamma$} ; & %
+ \node[latent] (lambda) {$\lambda$} ; & %
+ \node[latent] (psi) {$\psi$} ; %
+ \\
+ \\
+ \node[latent] (theta) {$\theta$} ; & %
+ & %
+ \node[latent] (C) {$C$} ; & %
+ \node[latent] (S) {$S$} ; & %
+ \\
+ & %
+ & %
+ \factor {T-f1} {Multi} {} {}; & %
+ & %
+ \factor {T-f2} {below:Multi} {} {}; & %
+ \\
+ \node[latent] (T') {$T'$} ; & %
+ & %
+ \node[latent] (T) {$T$} ; & %
+ \\
+ \factor {W'-f} {Multi} {} {}; & %
+ \node[latent] (phi) {$\phi$} ; & %
+ \factor {W-f} {Multi} {} {}; %
+ \\
+ \node[obs] (W') {$W'$} ; & %
+ & %
+ \node[obs] (W) {$W$} ;
+ \\
+ };
+
+ % Remaining factors
+ \factor[above=of T'] {T'-f} {left:Multi} {} {}; %
+ \factor[above=of theta] {theta-f} {left:Dir} {} {}; %
+ \factor[above=of C] {C-f} {left:Multi} {} {}; %
+ \factor[above=of S] {S-f} {left:Bern} {} {}; %
+ \factor[above=of gamma] {gamma-f} {left:Dir} {} {}; %
+ \factor[above=of lambda] {lambda-f} {left:Beta} {} {}; %
+ \factor[above=of psi] {psi-f} {left:Dir} {} {}; %
+ \factor[above=of phi] {phi-f} {left:Dir} {} {}; %
+
+ % Hyperparameters
+ \node[const, above=of theta] (atheta) {$\alpha_\theta$}; %
+ \node[const, above=of phi] (aphi) {$\alpha_\phi$}; %
+ \node[const, above=of gamma] (agamma) {$\alpha_\gamma$}; %
+ \node[const, above=of lambda, xshift=-0.5cm] (alambda1)
+ {$\alpha_{\lambda_\theta}$}; %
+ \node[const, above=of lambda, xshift=0.5cm] (alambda2)
+ {$\alpha_{\lambda_\psi}$}; %
+ \node[const, above=of psi] (apsi) {$\alpha_\psi$}; %
+
+ % Factor connections
+ \factoredge {phi} {W'-f} {W'} ; %
+ \factoredge {phi} {W-f} {W} ; %
+ \factoredge {theta} {T'-f} {T'} ; %
+ \factoredge {theta} {T-f1} {T} ; %
+ \factoredge {psi} {T-f2} {T} ; %
+ \factoredge {atheta} {theta-f} {theta} ; %
+ \factoredge {gamma} {C-f} {C} ; %
+ \factoredge {lambda} {S-f} {S} ; %
+ \factoredge {agamma} {gamma-f} {gamma} ; %
+ \factoredge {alambda1,alambda2} {lambda-f} {lambda} ; %
+ \factoredge {apsi} {psi-f} {psi} ; %
+ \factoredge {aphi} {phi-f} {phi} ; %
+
+ % Gates
+ \gate {W'-gate} {(W'-f)(W'-f-caption)} {T'} ; %
+ \gate {W-gate} {(W-f)(W-f-caption)} {T} ; %
+ \gate {T-gate} {(T-f1)(T-f1-caption)} {C} ;
+ \vgate {T-vgate} %
+ {(T-gate)} {$S=0$} %
+ {(T-f2)(T-f2-caption)} {$S=1$} %
+ {S} ; %
+
+ % Plates
+ \plate {LDA1} { %
+ (T')(T'-f)(T'-f-caption) %
+ (W')(W'-gate) %
+ } {$\forall w' \in c$} ; %
+
+ \plate {LDA2} { %
+ (LDA1) %
+ (theta)(theta-f)(theta-f-caption) %
+ } {$\forall c \in \mathcal{C}$} ; %
+
+ \plate {} { %
+ (phi)(phi-f)(phi-f-caption) %
+ } {$\forall t \in \mathcal{T}$} ; %
+
+ \plate {P1} { %
+ (W)(W-gate) %
+ (T)(T-vgate) %
+ (C)(C-f)(C-f-caption) %
+ (S)(S-f)(S-f-caption) %
+ } {$\forall w \in d$} ;
+
+ \plate {} { %
+ (P1) %
+ (gamma)(gamma-f)(gamma-f-caption) %
+ (lambda)(lambda-f)(lambda-f-caption) %
+ (psi)(psi-f)(psi-f-caption) %
+ } {$\forall d \in \mathcal{D}$} ; %
+
+\end{tikzpicture}
+%\endpgfgraphicnamed
+
+%%% Local Variables:
+%%% mode: tex-pdf
+%%% TeX-master: "example"
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-bayesnet/model_lda.tex b/graphics/pgf/contrib/tikz-bayesnet/model_lda.tex
new file mode 100644
index 0000000000..92e9acc4a2
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/model_lda.tex
@@ -0,0 +1,62 @@
+% model_lda.tex
+%
+% Copyright (C) 2010,2011 Laura Dietz
+% Copyright (C) 2012 Jaakko Luttinen
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU General Public License.
+%
+% See the files LICENSE_LPPL and LICENSE_GPL for more details.
+
+% Latent Diriclet allocation model
+
+%\beginpgfgraphicnamed{model-lda}
+\begin{tikzpicture}[x=1.7cm,y=1.8cm]
+
+ % Nodes
+
+ \node[obs] (X) {$X$} ; %
+ \node[latent, above=of X] (T) {$T$} ; %
+ \node[latent, above=of T] (theta) {$\theta$}; %
+ \node[const, above=of theta] (atheta) {$\alpha_\theta$};
+
+
+ % Factors
+ \factor[above=of X] {X-f} {Multi} {} {} ; %
+ \factor[above=of T] {T-f} {left:Multi} {} {} ; %
+ \factor[above=of theta] {theta-f} {left:Dir} {} {} ; %
+
+ % More nodes
+ \node[latent, right=of X-f] (phi) {$\phi$}; %
+ \node[const, above=of phi] (aphi) {$\alpha_\phi$}; %
+
+ \factor[above=of phi] {phi-f} {right:Dir} {} {} ; %
+
+ \factoredge {theta} {T-f} {T} ; %
+ \factoredge {atheta} {theta-f} {theta} ; %
+ \factoredge {phi} {X-f} {X} ; %
+ \factoredge {aphi} {phi-f} {phi} ; %
+
+ \gate {X-gate} {(X-f)(X-f-caption)} {T}
+
+ \plate {plate1} { %
+ (X)(X-gate) %
+ (T)(T-f)(T-f-caption) %
+ } {$\forall 1 \leq i \leq n_d$}; %
+ \plate {} { %
+ (plate1) %
+ (theta)(theta-f)(theta-f-caption) %
+ } {$\forall d \in \mathcal{D}$} ; %
+ \plate {} { %
+ (phi)(phi-f)(phi-f-caption) %
+ } {$\forall t \in \mathcal{T}$} ; %
+
+\end{tikzpicture}
+%\endpgfgraphicnamed
+
+%%% Local Variables:
+%%% mode: tex-pdf
+%%% TeX-master: "example"
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-bayesnet/model_pca.tex b/graphics/pgf/contrib/tikz-bayesnet/model_pca.tex
new file mode 100644
index 0000000000..6385827bff
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/model_pca.tex
@@ -0,0 +1,36 @@
+% model_pca.tex
+%
+% Copyright (C) 2012 Jaakko Luttinen
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU General Public License.
+%
+% See the files LICENSE_LPPL and LICENSE_GPL for more details.
+
+% PCA model
+
+%\beginpgfgraphicnamed{model-pca}
+\begin{tikzpicture}
+
+ % Define nodes
+ \node[obs] (y) {$y$};
+ \node[latent, above=of y, xshift=-1.2cm] (w) {$\mathbf{w}$};
+ \node[latent, above=of y, xshift=1.2cm] (x) {$\mathbf{x}$};
+ \node[latent, right=2cm of y] (t) {$\tau$};
+
+ % Connect the nodes
+ \edge {x,w,t} {y} ; %
+
+ % Plates
+ \plate {yx} {(x)(y)} {$N$} ;
+ \plate {} {(w)(y)(yx.north west)(yx.south west)} {$M$} ;
+
+\end{tikzpicture}
+%\endpgfgraphicnamed
+
+%%% Local Variables:
+%%% mode: tex-pdf
+%%% TeX-master: "example"
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-bayesnet/model_pca2.tex b/graphics/pgf/contrib/tikz-bayesnet/model_pca2.tex
new file mode 100644
index 0000000000..188d030ad4
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/model_pca2.tex
@@ -0,0 +1,71 @@
+% model_pca2.tex
+%
+% Copyright (C) 2010,2011 Laura Dietz
+% Copyright (C) 2012 Jaakko Luttinen
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU General Public License.
+%
+% See the files LICENSE_LPPL and LICENSE_GPL for more details.
+
+% PCA model
+
+%\beginpgfgraphicnamed{model-pca}
+\begin{tikzpicture}
+
+ % Define nodes
+
+ % Y
+ \node[obs] (y) {$y$}; %
+ \factor[above=of y] {y-f} {left:$\mathcal{N}$} {} {} ; %
+
+ % W and X
+ \node[det, above=of y] (dot) {dot} ; %
+ \node[latent, above left=1.2 of dot] (w) {$\mathbf{w}$}; %
+ \node[latent, above right=1.2 of dot] (x) {$\mathbf{x}$}; %
+
+ % W hyperparameters
+ \node[const, above=1.2 of w, xshift=-0.5cm] (mw) {$\mu_w$} ; %
+ \node[const, above=1.2 of w, xshift=0.5cm] (aw) {$\alpha_w$} ; %
+
+ % X hyperparameters
+ \node[const, above=1.2 of x, xshift=-0.5cm] (mx) {$\mu_x$} ; %
+ \node[const, above=1.2 of x, xshift=0.5cm] (ax) {$\alpha_x$} ; %
+
+ % noise
+ \node[latent, right=2.5cm of y-f] (t) {$\tau$}; %
+ \node[const, above=of t, xshift=-0.5cm] (at) {$\alpha_\tau$} ; %
+ \node[const, above=of t, xshift=0.5cm] (bt) {$\beta_\tau$} ; %
+
+ % Factors
+ \factor[above=of w] {w-f} {left:$\mathcal{N}$} {mw,aw} {w} ; %
+ \factor[above=of x] {x-f} {left:$\mathcal{N}$} {mx,ax} {x} ; %
+ \factor[above=of t] {t-f} {left:$\mathcal{G}$} {at,bt} {t} ; %
+ \factoredge {dot,t} {y-f} {y} ; %
+
+ % Connect w and x to the dot node
+ \edge[-] {w,x} {dot} ;
+
+ % Plates
+ \plate {yx} { %
+ (y)(y-f)(y-f-caption) %
+ (x)(x-f)(x-f-caption) %
+ (dot) %
+ } {$N$} ;
+ \plate {} {%
+ (y)(y-f)(y-f-caption) %
+ (w)(w-f)(w-f-caption) %
+ (dot) %
+ (yx.north west)(yx.south west) %
+ } {$M$} ;
+
+\end{tikzpicture}
+%\endpgfgraphicnamed
+
+%%% Local Variables:
+%%% mode: tex-pdf
+%%% TeX-master: "example"
+%%% End:
+
diff --git a/graphics/pgf/contrib/tikz-bayesnet/tikzlibrarybayesnet.code.tex b/graphics/pgf/contrib/tikz-bayesnet/tikzlibrarybayesnet.code.tex
new file mode 100644
index 0000000000..4253532c9f
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-bayesnet/tikzlibrarybayesnet.code.tex
@@ -0,0 +1,140 @@
+% tikzlibrary.code.tex
+%
+% Copyright 2010-2011 by Laura Dietz
+% Copyright 2012 by Jaakko Luttinen
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU General Public License.
+%
+% See the files LICENSE_LPPL and LICENSE_GPL for more details.
+
+% Load other libraries
+\usetikzlibrary{shapes}
+\usetikzlibrary{fit}
+\usetikzlibrary{chains}
+\usetikzlibrary{arrows}
+
+% Latent node
+\tikzstyle{latent} = [circle,fill=white,draw=black,inner sep=1pt,
+minimum size=20pt, font=\fontsize{10}{10}\selectfont, node distance=1]
+% Observed node
+\tikzstyle{obs} = [latent,fill=gray!25]
+% Constant node
+\tikzstyle{const} = [rectangle, inner sep=0pt, node distance=1]
+% Factor node
+\tikzstyle{factor} = [rectangle, fill=black,minimum size=5pt, inner
+sep=0pt, node distance=0.4]
+% Deterministic node
+\tikzstyle{det} = [latent, diamond]
+
+% Plate node
+\tikzstyle{plate} = [draw, rectangle, rounded corners, fit=#1]
+% Invisible wrapper node
+\tikzstyle{wrap} = [inner sep=0pt, fit=#1]
+% Gate
+\tikzstyle{gate} = [draw, rectangle, dashed, fit=#1]
+
+% Caption node
+\tikzstyle{caption} = [font=\footnotesize, node distance=0] %
+\tikzstyle{plate caption} = [caption, node distance=0, inner sep=0pt,
+below left=5pt and 0pt of #1.south east] %
+\tikzstyle{factor caption} = [caption] %
+\tikzstyle{every label} += [caption] %
+
+\tikzset{>={triangle 45}}
+
+%\pgfdeclarelayer{b}
+%\pgfdeclarelayer{f}
+%\pgfsetlayers{b,main,f}
+
+% \factoredge [options] {inputs} {factors} {outputs}
+\newcommand{\factoredge}[4][]{ %
+ % Connect all nodes #2 to all nodes #4 via all factors #3.
+ \foreach \f in {#3} { %
+ \foreach \x in {#2} { %
+ \draw[-,#1] (\x) edge[-] (\f) ; %
+ } ;
+ \foreach \y in {#4} { %
+ \draw[->,#1] (\f) -- (\y) ; %
+ } ;
+ } ;
+}
+
+% \edge [options] {inputs} {outputs}
+\newcommand{\edge}[3][]{ %
+ % Connect all nodes #2 to all nodes #3.
+ \foreach \x in {#2} { %
+ \foreach \y in {#3} { %
+ \draw[->,#1] (\x) -- (\y) ;%
+ } ;
+ } ;
+}
+
+% \factor [options] {name} {caption} {inputs} {outputs}
+\newcommand{\factor}[5][]{ %
+ % Draw the factor node. Use alias to allow empty names.
+ \node[factor, label={[name=#2-caption]#3}, name=#2, #1,
+ alias=#2-alias] {} ; %
+ % Connect all inputs to outputs via this factor
+ \factoredge {#4} {#2-alias} {#5} ; %
+}
+
+% \plate [options] {name} {fitlist} {caption}
+\newcommand{\plate}[4][]{ %
+ \node[wrap=#3] (#2-wrap) {}; %
+ \node[plate caption=#2-wrap] (#2-caption) {#4}; %
+ \node[plate=(#2-wrap)(#2-caption), #1] (#2) {}; %
+}
+
+% \gate [options] {name} {fitlist} {inputs}
+\newcommand{\gate}[4][]{ %
+ \node[gate=#3, name=#2, #1, alias=#2-alias] {}; %
+ \foreach \x in {#4} { %
+ \draw [-*,thick] (\x) -- (#2-alias); %
+ } ;%
+}
+
+% \vgate {name} {fitlist-left} {caption-left} {fitlist-right}
+% {caption-right} {inputs}
+\newcommand{\vgate}[6]{ %
+ % Wrap the left and right parts
+ \node[wrap=#2] (#1-left) {}; %
+ \node[wrap=#4] (#1-right) {}; %
+ % Draw the gate
+ \node[gate=(#1-left)(#1-right)] (#1) {}; %
+ % Add captions
+ \node[caption, below left=of #1.north ] (#1-left-caption)
+ {#3}; %
+ \node[caption, below right=of #1.north ] (#1-right-caption)
+ {#5}; %
+ % Draw middle separation
+ \draw [-, dashed] (#1.north) -- (#1.south); %
+ % Draw inputs
+ \foreach \x in {#6} { %
+ \draw [-*,thick] (\x) -- (#1); %
+ } ;%
+}
+
+% \hgate {name} {fitlist-top} {caption-top} {fitlist-bottom}
+% {caption-bottom} {inputs}
+\newcommand{\hgate}[6]{ %
+ % Wrap the left and right parts
+ \node[wrap=#2] (#1-top) {}; %
+ \node[wrap=#4] (#1-bottom) {}; %
+ % Draw the gate
+ \node[gate=(#1-top)(#1-bottom)] (#1) {}; %
+ % Add captions
+ \node[caption, above right=of #1.west ] (#1-top-caption)
+ {#3}; %
+ \node[caption, below right=of #1.west ] (#1-bottom-caption)
+ {#5}; %
+ % Draw middle separation
+ \draw [-, dashed] (#1.west) -- (#1.east); %
+ % Draw inputs
+ \foreach \x in {#6} { %
+ \draw [-*,thick] (\x) -- (#1); %
+ } ;%
+}
+
diff --git a/graphics/pgf/contrib/tikz-cd/README.md b/graphics/pgf/contrib/tikz-cd/README.md
new file mode 100644
index 0000000000..b988d1dc06
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-cd/README.md
@@ -0,0 +1,16 @@
+tikz-cd — Commutative diagrams with TikZ
+========================================
+
+The general-purpose drawing package [TikZ][pgf] can be used to typeset
+commutative diagrams and other kinds of mathematical pictures,
+generating high-quality results. This TikZ library facilitates the
+creation of such diagrams by providing a convenient set of macros and
+reasonable default settings. It can be used in plain TeX, LaTeX and
+ConTeXt. See [the manual][tikz-cd-doc] for further details and many
+examples.
+
+This software is distributed under the terms of the GNU General Public
+License, version 3 or later.
+
+[pgf]: https://ctan.org/pkg/pgf
+[tikz-cd-doc]: http://mirrors.ctan.org/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdf
diff --git a/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdf b/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdf
new file mode 100644
index 0000000000..e4f8c8d40d
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.tex b/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.tex
new file mode 100644
index 0000000000..b2e6cd6652
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-cd/tikz-cd-doc.tex
@@ -0,0 +1,1450 @@
+% Copyright 2011, 2012, 2014, 2018 by Augusto Stoffel
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+% ------------------------------------------------------------------------
+%
+% This document requires the file pgfmanual-en-macros.tex (distributed
+% with pgf) to compile. To get cross-references to the pgf manual,
+% compile it and copy all resulting .aux files to the directory of
+% tikz-cd-doc.tex.
+
+\def\pgfautoxrefs{1}
+
+\documentclass[a4paper]{ltxdoc}
+\usepackage[hyphens]{url}
+
+\def\xcolorversion{2.00}
+
+\usepackage[version=latest]{pgf}
+
+\usepackage{xkeyval,calc,listings,tikz,fp}
+
+\usepackage{hyperref}
+\hypersetup{%
+ colorlinks=false, % use true to enable colors below:
+ linkcolor=blue,%red,
+ filecolor=blue,%magenta,
+ pagecolor=blue,%red,
+ urlcolor=blue,%cyan,
+ citecolor=blue,
+ pdfborder=0 0 0,
+}
+
+% We need lots of libraries...
+\usetikzlibrary{
+ arrows,
+ arrows.meta,
+ calc,
+ fit,
+ patterns,
+ plotmarks,
+ shapes.geometric,
+ shapes.misc,
+ shapes.symbols,
+ shapes.arrows,
+ shapes.callouts,
+ shapes.multipart,
+ shapes.gates.logic.US,
+ shapes.gates.logic.IEC,
+ circuits.logic.US,
+ circuits.logic.IEC,
+ circuits.logic.CDH,
+ circuits.ee.IEC,
+ datavisualization,
+ datavisualization.formats.functions,
+ er,
+ automata,
+ backgrounds,
+ chains,
+ topaths,
+ trees,
+ petri,
+ mindmap,
+ matrix,
+ calendar,
+ folding,
+ fadings,
+ shadings,
+ spy,
+ through,
+ turtle,
+ positioning,
+ scopes,
+ decorations.fractals,
+ decorations.shapes,
+ decorations.text,
+ decorations.pathmorphing,
+ decorations.pathreplacing,
+ decorations.footprints,
+ decorations.markings,
+ shadows,
+ lindenmayersystems,
+ intersections,
+ fixedpointarithmetic,
+ fpu,
+ svg.path,
+ external,
+}
+
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage{amsmath,amssymb}
+\usepackage{xxcolor}
+\usepackage{pifont}
+\usepackage{makeidx}
+\usepackage{tikz-cd,xr,multicol,microtype}
+
+
+\IfFileExists{pgfmanual-en-macros}
+ {\input{pgfmanual-en-macros}}
+ {\PackageError{tikz-cd-doc}{
+This document requires the file pgfmanual-en-macros.tex (distributed
+with pgf) to compile. Please place a copy of that file in the current
+directory}{}}
+
+\IfFileExists{pgfmanual.aux}
+ {\externaldocument[pgfman-]{pgfmanual}}
+ {\PackageWarning{tikz-cd-doc}{
+Couldn't find pgfmanual.aux. To get cross-references to the pgf
+manual, compile it and copy all resulting .aux files to the current
+directory}{}}
+
+\makeindex
+
+% Global styles:
+\tikzset{
+ every plot/.style={prefix=plots/pgf-},
+ shape example/.style={
+ color=black!30,
+ draw,
+ fill=yellow!30,
+ line width=.5cm,
+ inner xsep=2.5cm,
+ inner ysep=0.5cm}
+}
+
+\hypersetup{unicode,
+ pdftitle={tikzcd: Commutative diagrams with TikZ},
+ pdfkeywords={Commutative diagrams; TeX; LaTeX; ConTeXt; TikZ; pgf; tikz-cd; tikzcd},
+ }
+
+\pgfkeys{
+ /pdflinks/search key prefixes in=
+ {/tikz/commutative diagrams/},%,/tikz/,/pgf/} % This really needs to be commented out!
+ /pdflinks/internal link prefix=tikzcd,
+ %
+ /pdflinks/warnings=false,
+ % for debugging:
+ /pdflinks/show labels=false,
+}
+
+\tikzset{/codeexample/every codeexample/.append style={/tikz/commutative diagrams/background color=graphicbackground}}
+
+\tikzset{gray x/.tip={Rays[color=gray]}}
+
+\newcommand{\displayarrow}[2][]{%
+ \index{#2@\protect\texttt{#2} arrow tip}%
+ \index{Arrow tips!#2@\protect\texttt{#2}}%
+ \texttt{#2} & yields \tikz[baseline=-axis_height] \draw[{#2}-{#2}, line width=rule_thickness, #1] (0,0) -- (1,0);}
+
+\newcommand{\displayarrowstyle}[1]{
+ \def\mykey{/tikz/commutative diagrams/#1}%
+ \def\mypath{}%
+ \def\myname{}%
+ \firsttimetrue%
+ %\pgfmanualdecomposecount=0\relax%
+ \decompose/tikz/commutative diagrams/#1/\nil%
+ \texttt{#1} & yields
+ \tikz[baseline=-axis_height, line width=rule_thickness] \draw[arrows=gray
+ x-gray x,commutative diagrams/.cd, #1] (0,0) -- (0.6,0);}
+
+\begin{document}
+\begin{center}
+\vspace*{1em}
+\tikz\node[scale=1.2]{%
+ \color{gray}\Huge\ttfamily \char`\{\textcolor{red!75!black}{tikzcd}\char`\}};
+
+\vspace{0.5em}
+{\Large\bfseries Commutative diagrams with \tikzname}
+
+\vspace{1em}
+{Version 0.9f \qquad November 19, 2018}
+\end{center}
+
+\vspace{1.5em}
+The general-purpose drawing package Ti\emph{k}Z can be used to typeset
+commutative diagrams and other kinds of mathematical pictures,
+generating high-quality results. The present package facilitates the
+creation of such diagrams by providing a convenient set of macros and
+reasonable default settings. Familiarity with Ti\emph{k}Z is helpful
+but not necessary, since the examples contained here cover the most
+common situations.
+
+This software is distributed under the terms of the GNU General Public
+License, version 3 or later.
+
+\tableofcontents
+
+\setcounter{section}{-1}
+\section{Disclaimer}
+\label{sec:disclaimer}
+
+Before version 1.0 of this package is released, minor modifications
+and bug fixes may be performed. All documents making an orthodox use
+of this package will continue to compile and generate essentially the
+same output. However, if you have strict stability requirements (for
+instance, if you want to assure no page break changes will happen in
+your documents), keep a copy of the current version of the file
+\texttt{tikzlibrarycd.code.tex} in your document's directory.
+
+\section{Getting started}
+\label{sec:basic-usage}
+
+To invoke this package in \LaTeX, type
+
+\begin{verse}
+ \index{tikz-cd@\protect\texttt{tikz-cd} package}%
+ \index{Packages and files!tikz-cd@\protect\texttt{tikz-cd}}%
+ |\usepackage{tikz-cd}|%
+\end{verse}
+or load \tikzname{} and then type
+\begin{verse}%
+ \index{cd@\protect\texttt{cd} library}%
+ \index{Libraries!cd@\protect\texttt{cd}}%
+ |\usetikzlibrary{cd}|%
+\end{verse}
+
+\subsection{Creating a diagram}
+\label{sec:creating-diagrams}
+
+The basic tool to create a commutative diagram is the following
+environment.
+
+\begin{environment}{{tikzcd}\opt{\oarg{options}}}
+\end{environment}
+
+The environment contents should describe a matrix, as in \LaTeX's
+familiar |{tabular}| environment. The optional argument
+\meta{options} may be used to modify the appearance of the diagram.
+Any of the customization keys described in this manual, as well as
+those originally provided by \tikzname{}, can be used here. Arrows
+between matrix entries can be created with the |\arrow| command
+described below.
+
+Everything inside |{tikzcd}| is typeset in math mode, but you will
+probably want to use it inside an |{equation}| environment or
+|\[| \dots |\]|,
+so that the diagram is placed on a new line and centered.
+
+It is important to note that \textsc{dvi} viewers will not display
+diagrams correctly. It is necessary to convert the \textsc{dvi} file
+to \textsc{pdf} or \textsc{ps} format---or, even better, use a tool
+that generates \textsc{pdf} files directly, such as \texttt{pdflatex}.
+
+\subsection{Inserting arrows}
+\label{sec:inserting-arrows}
+
+Inside the |{tikzcd}| environment, the following synonymous commands
+are provided to produce arrows.
+
+\begin{pgfmanualentry}
+ \extractcommand\arrow|[|\meta{options}|]|\@@
+ \extractcommand\ar|[|\meta{options}|]|\@@
+ \pgfmanualbody
+\end{pgfmanualentry}
+
+Here, \meta{options} is a comma-separated list of options which can be
+used to specify the arrow target, add labels, change arrow tips, and
+perform additional modifications.
+
+The arrow target can be specified by a direction parameter, which
+consists of a string of characters |r|, |l|, |d|, |u| (standing for
+right, left, down and up). Labels can be placed on an arrow by means
+of the quotes syntax, described in detail in the \pgfname{} manual
+\cite[\S\ref*{pgfman-section-label-quotes}]{pgfman}. Notice the use
+of |"\phi"| in the example below.
+
+\begin{codeexample}[]
+ \begin{tikzcd}
+ A \arrow[rd] \arrow[r, "\phi"] & B \\
+ & C
+ \end{tikzcd}
+\end{codeexample}
+
+To further modify the appearance of an arrow, note that \meta{options}
+may contain any key that can be passed to \tikzname's |\path| command.
+Similarly, a label can receive additional options via the syntax
+\begin{verse}
+ |"|\meta{label text}|"|\opt{\meta{label options}}.
+\end{verse}
+Both \meta{label text} and \meta{label options} need to be enclosed in
+curly braces if they contain commas.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, "\phi"] \arrow[d, red]
+ & B \arrow[d, "\psi" red] \\
+ C \arrow[r, red, "\eta" blue]
+ & D
+\end{tikzcd}
+\end{codeexample}
+
+Arrows can have an arbitrary number of labels, by repeated use of
+arguments in quotes. The example below shows how to control the
+positioning of labels. Notice in particular that an apostrophe as
+\meta{label option} causes the label to be placed on the opposite side
+of the arrow.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, "\phi" near start, "\psi"', "\eta" near end] & B
+\end{tikzcd}
+\end{codeexample}
+
+We provide two real-life examples.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ T
+ \arrow[drr, bend left, "x"]
+ \arrow[ddr, bend right, "y"]
+ \arrow[dr, dotted, "{(x,y)}" description] & & \\
+ & X \times_Z Y \arrow[r, "p"] \arrow[d, "q"]
+ & X \arrow[d, "f"] \\
+ & Y \arrow[r, "g"]
+ & Z
+\end{tikzcd}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzcd}[column sep=tiny]
+ & \pi_1(U_1) \ar[dr] \ar[drr, "j_1", bend left=20]
+ &
+ &[1.5em] \\
+ \pi_1(U_1\cap U_2) \ar[ur, "i_1"] \ar[dr, "i_2"']
+ &
+ & \pi_1(U_1) \ast_{ \pi_1(U_1\cap U_2)} \pi_1(U_2) \ar[r, dashed, "\simeq"]
+ & \pi_1(X) \\
+ & \pi_1(U_2) \ar[ur]\ar[urr, "j_2"', bend right=20]
+ &
+ &
+\end{tikzcd}
+\end{codeexample}
+
+\subsection{Changing arrow tips}
+\label{sec:changing-arrow-tips}
+
+A set of |\arrow| options is provided to create different kinds of
+arrows. Some of these options have a short descriptive name, such as
+|hook|, and others are named after \TeX{} arrow-producing commands
+(without a ``|\|''), like |dashrightarrow|.%|
+
+\begin{codeexample}[]
+ \begin{tikzcd}
+ X \arrow[r, hook] \arrow[dr, dashrightarrow]
+ & \bar{X} \arrow[d]\\
+ & Y
+ \end{tikzcd}
+\end{codeexample}
+
+The following list shows all available arrow types (each of them is a
+style key located in |/tikz/commutative diagrams|).
+
+\begin{multicols}{2}\raggedcolumns
+ \subsubsection*{Basic arrows}
+ \begin{tabular}{ll}
+ \displayarrowstyle{to head}\\
+ \displayarrowstyle{rightarrow}\\
+ \displayarrowstyle{leftarrow}\\
+ \displayarrowstyle{leftrightarrow}\\
+ \displayarrowstyle{Rightarrow}\\
+ \displayarrowstyle{Leftarrow}\\
+ \displayarrowstyle{Leftrightarrow}
+ \end{tabular}
+
+ \subsubsection*{Arrows from bar}
+ \begin{tabular}{ll}
+ \displayarrowstyle{maps to}\\
+ \displayarrowstyle{mapsto}\\
+ \displayarrowstyle{mapsfrom}\\
+ \displayarrowstyle{Mapsto}\\
+ \displayarrowstyle{Mapsfrom}\\
+ \end{tabular}
+
+ \subsubsection*{Arrows with hook}
+ \begin{tabular}{ll}
+ \displayarrowstyle{hook}\\
+ \displayarrowstyle{hook'}\\
+ \displayarrowstyle{hookrightarrow}\\
+ \displayarrowstyle{hookleftarrow}\\
+ \end{tabular}
+
+ \subsubsection*{Arrows with tail}
+ \begin{tabular}{ll}
+ \displayarrowstyle{tail}\\
+ \displayarrowstyle{rightarrowtail}\\
+ \displayarrowstyle{leftarrowtail}\\
+ \end{tabular}
+
+ \subsubsection*{Two-headed arrows}
+ \begin{tabular}{ll}
+ \displayarrowstyle{two heads}\\
+ \displayarrowstyle{twoheadrightarrow}\\
+ \displayarrowstyle{twoheadleftarrow}\\
+ \end{tabular}
+
+ \subsubsection*{Harpoons}
+ \begin{tabular}{ll}
+ \displayarrowstyle{harpoon}\\
+ \displayarrowstyle{harpoon'}\\
+ \displayarrowstyle{rightharpoonup}\\
+ \displayarrowstyle{rightharpoondown}\\
+ \displayarrowstyle{leftharpoonup}\\
+ \displayarrowstyle{leftharpoondown}\\
+ \end{tabular}
+
+ \subsubsection*{Dashed arrows}
+ \begin{tabular}{ll}
+ \displayarrowstyle{dashed}\\
+ \displayarrowstyle{dashrightarrow}\\
+ \displayarrowstyle{dashleftarrow}\\
+ \end{tabular}
+
+ \subsubsection*{Squiggly arrows}
+ \begin{tabular}{ll}
+ \displayarrowstyle{squiggly}\\
+ \displayarrowstyle{rightsquigarrow}\\
+ \displayarrowstyle{leftsquigarrow}\\
+ \displayarrowstyle{leftrightsquigarrow}
+ \end{tabular}
+
+ \subsubsection*{Non-arrows}
+ \begin{tabular}{ll}
+ \displayarrowstyle{no head}\\
+ \displayarrowstyle{no tail}\\
+ \displayarrowstyle{dash}\\
+ \displayarrowstyle{equal}\\
+ \end{tabular}
+\end{multicols}
+
+A gray cross (\tikz \path[/pgf/tips=true,gray x-] (0,0) -- (1mm,0);)
+in the samples above indicates that the corresponding tip is kept
+unchanged. This allows several arrow styles to be superimposed.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, tail, two heads, dashed] & B
+\end{tikzcd}
+\end{codeexample}
+
+% It is also possible to select arrow tips using \tikzname{}'s |arrow|
+% option directly (e.g., by saying |right hook->|). However, the method
+% described here above is more appropriate, as it abstracts the choice
+% of an actual arrow tip design (see also the |arrow style| key below),
+% and is arguably better from the mnemonic standpoint.
+
+
+\subsection{Alternative syntax for arrows}
+\label{sec:altern-synt-arrows}
+
+The following forms of the arrow command were used before the
+appearance of the quotes syntax for labels, and now may seem somewhat
+convoluted. They are nonetheless still available for backwards
+compatibility.
+
+\begin{command}{\arrow\opt{\oarg{options}}\marg{direction}\meta{labels}}
+\end{command}
+
+Here, \meta{direction} is a string containing the characters |r|, |l|,
+|d|, |u| and is used to determine the arrow target. Alternatively,
+you can specify an explicit matrix cell by replacing \meta{direction}
+with something of the form \meta{row number}\texttt{-}\meta{column
+ number}, or the name of a node. The trailing \meta{labels} can be the
+empty string or of the form
+\begin{verse}
+ \opt{\oarg{label options}}\marg{label text}\meta{more labels}.
+\end{verse}
+The equivalent command |\ar| can also be used in this form. Here is
+an example.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow{d} \arrow{r}[near start]{\phi}[near end]{\psi}
+ & B \arrow[red]{d}{\xi} \\
+ C \arrow[red]{r}[blue]{\eta}
+ & D
+\end{tikzcd}
+\end{codeexample}
+
+There are further shortened forms:
+\begin{pgfmanualentry}
+ \extractcommand\rar\opt{\oarg{options}}\meta{labels}\@@
+ \extractcommand\lar\opt{\oarg{options}}\meta{labels}\@@
+ \extractcommand\dar\opt{\oarg{options}}\meta{labels}\@@
+ \extractcommand\uar\opt{\oarg{options}}\meta{labels}\@@
+ \extractcommand\drar\opt{\oarg{options}}\meta{labels}\@@
+ \extractcommand\urar\opt{\oarg{options}}\meta{labels}\@@
+ \extractcommand\dlar\opt{\oarg{options}}\meta{labels}\@@
+ \extractcommand\ular\opt{\oarg{options}}\meta{labels}\@@
+ \pgfmanualbody
+\end{pgfmanualentry}
+The first one is equivalent to
+\begin{verse}
+ |\arrow|{\oarg{options}}|{r}|\meta{labels}
+\end{verse}
+and the other ones work analogously.
+
+\subsection{Usage in plain \TeX{}}
+\label{sec:usage-plain-tex}
+
+To use this software in plain \TeX{}, load \tikzname{} and the
+\texttt{cd} library by saying
+\begin{verse}
+ |\input tikz.tex|\\
+ \index{cd@\protect\texttt{cd} library}%
+ \index{Libraries!cd@\protect\texttt{cd}}%
+ |\usetikzlibrary{cd}|
+\end{verse}
+The |{tikzcd}| environment should then be replaced by the following:
+\begin{plainenvironment}{{tikzcd}\opt{\oarg{options}}}
+\end{plainenvironment}
+All other functions of this library work as described in this manual
+without change.
+
+\subsection{Usage in Con\TeX t}
+\label{sec:usage-plain-context}
+
+To use this software in Con\TeX t, load \tikzname{} and then the
+\texttt{cd} library by saying
+\begin{verse}
+ |\usemodule[tikz]|\\
+ \index{cd@\protect\texttt{cd} library}%
+ \index{Libraries!cd@\protect\texttt{cd}}%
+ |\usetikzlibrary[cd]|
+\end{verse}
+The |{tikzcd}| environment should then be replaced by the following:
+\begin{contextenvironment}{{tikzcd}\opt{\oarg{options}}}
+\end{contextenvironment}
+Moreover, you may replace the column and row separators |&|, |\\| by
+their Con\TeX t analogues |\NC|, |\NR|. However, you should use |\NC|
+only \emph{between} cells, and not before the first column or after
+the last column, as in usual Con\TeX t tables. Similarly, |\NR|
+should be used only between rows.
+
+All other functions of this library work as described in this manual
+without change.
+
+\section{Controlling the appearance of diagrams}
+\label{sec:chang-appe-diagr}
+
+This section describes a number of customization keys defined by this
+package. All keys are located in the path |/tikz/commutative diagrams|.
+Options passed to |{tikzcd}| or |\arrow| are searched for
+in that path, and, if not found there, in |/tikz|. To set options
+globally, it is convenient to use the following command.
+
+\begin{command}{\tikzcdset\marg{options}}
+ Executes \meta{options} in the path |/tikz/commutative diagrams|.
+\end{command}
+
+Besides the keys described in this manual, numerous \tikzname\
+parameters can affect the appearance of a diagram. However, only a
+few of them (namely those appearing in |every diagram|, |every cell|,
+|every arrow|, and |every label| below) are reinitialized when
+|{tikzcd}| is called. This means that modifying a certain \tikzname\
+parameter globally may or may not affect the output of |{tikzcd}|.
+
+We also point out that besides the options and styles provided by this
+package, several keys defined by \tikzname{} are useful for arrows.
+Some examples are \texttt{dashed}, |dotted|, and its relatives,
+|line width=|\meta{dimension}, |color=|\meta{color}, |bend right|, |bend left|,
+|in=|\meta{angle}, |out=|\meta{angle}, |loop|, etc. See the
+\pgfname{} manual~\cite[\S\ref*{pgfman-section-cap-joins} and
+\S\ref*{pgfman-library-to-paths}]{pgfman}. Likewise, \tikzname{}
+provides several keys that are useful for labels, such as |above|,
+|below|, |left|, |right|, |swap| (which makes the label be placed on
+the right side of the arrow, relative to its direction), |sloped|,
+|pos=|\meta{fraction}, |near start|, |near end|, |inner sep=|\meta{dimension},
+|font=|\meta{font command}, |text width=|\meta{dimension}, etc. See the \pgfname{}
+manual~\cite[\S\ref*{pgfman-section-nodes}, esp.\
+\S\ref*{pgfman-section-pos-option}]{pgfman}.
+
+\subsection{General options}
+\label{sec:general-options}
+
+\begin{stylekey}{/tikz/commutative diagrams/every diagram}
+ This style is applied to every |{tikzcd}| environment. Initially, it
+ contains the following:
+\begin{verse}
+|row sep=normal||,|\\
+|column sep=normal||,|\\
+|/tikz/baseline=0pt|
+\end{verse}
+\end{stylekey}
+
+The |baseline=0pt| setting is used to make equation numbers be placed
+correctly (as an exception, one-row diagrams are anchored at their
+matrix base, which is exactly what you want).
+
+\begin{key}{/tikz/commutative diagrams/diagrams=\meta{options}}
+ This key appends \meta{options} to the style |every diagram|.
+\end{key}
+
+\begin{stylekey}{/tikz/commutative diagrams/every matrix}
+ This style is applied to the \tikzname{} matrix created internally
+ by |{tikzcd}|. Initially, it contains the following:
+\begin{verse}
+|/tikz/inner sep=0pt|
+\end{verse}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/commutative diagrams/every cell}
+ This style is applied to every \tikzname{} matrix cell created by
+ |{tikzcd}|. Initially, it contains the following:
+\begin{verse}
+|/tikz/shape=asymmetrical rectangle||,|\\
+|/tikz/inner xsep=1ex||,|\\
+|/tikz/inner ysep=0.85ex|
+\end{verse}
+\end{stylekey}
+
+The |asymmetrical rectangle| shape is described in
+\S\ref{sec:asymm-rect-shape}. The |inner xsep|, |inner ysep| options
+determine the spacing between a diagram entry and any arrows reaching
+it.
+
+\begin{key}{/tikz/commutative diagrams/cells=\meta{options}}
+ This key appends \meta{options} to the style |every cell|.
+\end{key}
+
+\def\printsepaux+#1em{#1\,em}
+\def\printsep#1#2{\edef\temp{\pgfkeysvalueof{/tikz/commutative diagrams/#1 sep/#2}}\expandafter\printsepaux\temp}
+
+\begin{key}{/tikz/commutative diagrams/row sep=\meta{size}}
+ This key acts as a ``frontend'' to \tikzname's |/tikz/row sep| key. If
+ the key
+ \begin{verse}
+ |/tikz/commutative diagrams/row sep/|\meta{size}
+ \end{verse}
+ stores a \meta{value}, then it is read and
+ |/tikz/row sep|=\meta{value} is set. If the key above is not
+ initialized, then \meta{size} is presumed to be a dimension, and
+ |/tikz/row sep|=\meta{size} is set.
+
+ The initially available sizes, and their values, are
+ the following:
+ \begin{center}
+ \begin{tabular}{cccccc}
+ |tiny| & |small| & |scriptsize| & |normal| & |large| & |huge| \\
+ \printsep{row}{tiny} & \printsep{row}{small} & \printsep{row}{scriptsize} & \printsep{row}{normal} & \printsep{row}{large} & \printsep{row}{huge}
+ \end{tabular}
+ \end{center}
+\end{key}
+
+Notice that setting, say, |row sep=1cm| globally with |\tikzcdset| will
+have no effect, since the |row sep| option is re-set at the beginning
+of each diagram. To make all diagrams have |row sep| equal to 1\,cm,
+you can modify the meaning of |normal| by saying
+\begin{verse}
+|\tikzcdset{row sep/normal=1cm}|.
+\end{verse}
+You can also create new sizes, but note that \pgfname\ requires new keys to be
+initialized explicitly. For example, to create a size |my size|,
+meaning 1\,ex, you should use
+\begin{verse}
+|\tikzcdset{row sep/my size/.initial=1ex}|.
+\end{verse}
+
+\begin{key}{/tikz/commutative diagrams/column sep=\meta{size}}
+ This works analogously to the |row sep| key above. The sizes available
+ initially are the following:
+ \begin{center}
+ \begin{tabular}{cccccc}
+ |tiny| & |small| & |scriptsize| & |normal| & |large| & |huge| \\
+ \printsep{column}{tiny} & \printsep{column}{small} & \printsep{column}{scriptsize} & \printsep{column}{normal} & \printsep{column}{large} & \printsep{column}{huge}
+ \end{tabular}
+ \end{center}
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/sep=\meta{size}}
+ This key sets |row sep=|\meta{size}, |column sep=|\meta{size}.
+\end{key}
+
+In the examples below, the triangular diagrams would look too wide or
+too tall if the column or row separation were not set appropriately.
+
+\begin{codeexample}[]
+\begin{tikzcd}[column sep=small]
+ & A \arrow[dl] \arrow[dr] & \\
+ B \arrow{rr} & & C
+\end{tikzcd}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzcd}[row sep=tiny]
+ & B \arrow[dd] \\
+ A \arrow[ur] \arrow[dr] & \\
+ & C
+\end{tikzcd}
+\end{codeexample}
+
+Section \ref*{pgfman-section-matrices}.3.2 of the \pgfname{} manual
+\cite{pgfman} contains further details on the spacing of matrix cells.
+
+\begin{stylekey}{/tikz/commutative diagrams/cramped}
+ By default, a generous amount of white space is added around diagram
+ cells, which is appropriate for large, displayed diagrams. The
+ present style removes some of this extra white space, and is
+ intended for smaller diagrams that should blend with the surrounding
+ text, or very wide material that wouldn't fit the page otherwise.
+\end{stylekey}
+
+The picture below shows the (somewhat subtle) difference
+between the cramped and the non-cramped styles.
+
+\begin{codeexample}[pre=\minipage{6cm},post=\endminipage]
+This \begin{tikzcd} A \arrow[r] & B \end{tikzcd} is a regular diagram.\\
+This \begin{tikzcd}[cramped, sep=small] A \arrow[r] & B \end{tikzcd} is a cramped diagram.\\
+This $A \to B$ is just a formula.
+\end{codeexample}
+
+Keep in mind that while there are some legitimate uses for |{tikzcd}|
+diagrams on inline formulas, standard \LaTeX\ constructs such as
+|\overset| and |\xrigthtarrow| are often sufficient and should be
+preferred.
+
+\begin{key}{/tikz/commutative diagrams/math mode=\meta{boolean}
+ (default true)}
+ This key determines whether or not the contents of a diagram are
+ typeset in math mode. If set globally or diagram-wise, it affects
+ both the diagram entries and arrow labels. If used with |\arrow|,
+ it affects only its labels.
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/background color=\meta{color} (initially white)}
+ This key stores the name of a color, and is read by
+ styles that fill the background, such as |description| and |crossing over|.
+ It does not cause the background of diagrams to be filled.
+\end{key}
+
+\subsection{Global options for arrows}
+\label{sec:options-arrows}
+
+\begin{stylekey}{/tikz/commutative diagrams/every arrow}
+ This style is applied to every |\arrow|. Initially, it contains the
+ following:
+\begin{verse}
+|/tikz/draw,|\\
+|/tikz/line width=rule_thickness||,|\\
+|rightarrow|
+\end{verse}
+\end{stylekey}
+
+\begin{key}{/tikz/commutative diagrams/arrows=\meta{options}}
+ This key appends \meta{options} to the style |every arrow|.
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/arrow style=\meta{style}}
+ This key determines which collection of arrow tips is used by the
+ arrow tip selection styles listed in
+ \S\ref{sec:changing-arrow-tips}. The initial setting is suitable
+ for documents using the Computer Modern font at any size. The
+ available choices for \meta{style} are:
+ \begin{description}
+ \item[\texttt{Latin Modern}] A small variant of the initial
+ settings, intended for documents using the Latin Modern font at
+ any size.
+ \item[\texttt{math font}] This setting uses the |Glyph| meta arrow
+ tip described in \S\ref{sec:font-arrow-tips}.
+ \item[\texttt{tikz}] This setting uses the arrow tips defined in
+ \tikzname's |arrows.meta| library. It honors the option
+ |/tikz/>|.
+ \end{description}
+
+ This key is usually invoked in the document preamble, and should be
+ set only once.
+\end{key}
+
+If you are using a font different from Computer Modern or Latin
+Modern, you may find the best results by selecting the |math font|
+style. As detailed in \S\ref{sec:font-arrow-tips}, this is not
+guaranteed to work perfectly with all fonts, but gives good results in
+many cases. If the \texttt{math font} style gives unsatisfactory
+results, you can try selecting the \texttt{tikz} style, and setting
+|/tikz/>| to the value that best matches your font (among those shown
+in \cite[\S\ref*{pgfman-section-arrows-meta}]{pgfman}).
+
+\begin{codeexample}[]
+% in preamble
+\tikzcdset{
+ arrow style=tikz,
+ diagrams={>={Straight Barb[scale=0.8]}}
+}
+
+% in document body
+\begin{tikzcd}
+ A \arrow[r, tail] \arrow[rd] & B \arrow[d, two heads]\\
+ & D
+\end{tikzcd}
+\end{codeexample}
+
+\subsection{Absolute placement of arrows}
+\label{sec:absol-positioning}
+
+The usual behavior of |\arrow| is to produce an arrow starting at the
+diagram entry where the command appears, and ending at an entry whose
+location is specified relative to that. The following keys override
+this behavior, allowing source and target to be selected explicitly.
+
+\begin{key}{/tikz/commutative diagrams/from=\meta{argument}}
+ If \meta{argument} is of the form \meta{row
+ number}\texttt{-}\meta{column number}, or if it is a string of
+ characters |r|, |l|, |d|, |u|, this key sets the arrow source to be
+ the corresponding cell in the diagram matrix. Otherwise, it assumes
+ the argument is the name of a node and sets the arrow source to
+ \meta{argument}.
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/to=\meta{argument}}
+ Similar to |from|, but refers to the arrow target.
+\end{key}
+
+Recall that it is possible to give a specific entry of a \tikzname{}
+matrix a name by using the \verb!|[!\meta{options}\verb!]|! syntax, as
+done for entry $C$ in the example below. You must be careful not to
+create nodes whose name contains only the characters |l|, |r|, |u|,
+|d| if you want to refer to them using |from| or |to|. The following
+illustrates several different uses of these keys.
+
+{\catcode`\|=12
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[to=Z, red] \arrow[to=2-2, blue]
+ & B \\
+ |[alias=Z]| C
+ & D
+ \arrow[from=ul, to=1-2, purple]
+\end{tikzcd}
+\end{codeexample}
+}
+
+In the next examples, empty labels are used to create nodes for later
+reference. The |draw=red| option is used to show where these empty
+nodes are located, but of course you want to remove that when using
+this technique.
+
+\begin{codeexample}[]
+\begin{tikzcd}[column sep=scriptsize]
+ A \arrow[dr] \arrow[rr, ""{name=U, below, draw=red}]{}
+ & & B \arrow[dl] \\
+ & C \arrow[Rightarrow, from=U, "\psi"]
+\end{tikzcd}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, bend left=50, ""{name=U, below, draw=red}]
+ \arrow[r, bend right=50, ""{name=D, draw=red}]
+ & B
+ \arrow[Rightarrow, from=U, to=D]
+\end{tikzcd}
+\end{codeexample}
+
+\subsection{Phantom arrows}
+\label{sec:phantom-arrows}
+
+Sometimes it is necessary to insert a symbol outside the grid
+subjacent to the diagram. The easiest way to achieve this is as a
+label to an invisible arrow.
+
+\begin{stylekey}{/tikz/commutative diagrams/phantom}
+ Creates an invisible arrow. Labels to this arrow are not invisible.
+ They will be anchored at their center and typeset in full size
+ (i.e., with |\textstyle|). To get smaller labels, as in ordinary
+ arrows, use the |\scriptstyle| command.
+\end{stylekey}
+
+In the picture below, the arrow containing the |phantom| option goes from
+$A$ to $D$, and the |\ulcorner| symbol ($\ulcorner$) is inserted
+closer to the starting point $A$.
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r] \arrow[d] \arrow[dr, phantom, "\ulcorner", very near start]
+ & B \arrow[d] \\
+ C \arrow[r]
+ & D
+\end{tikzcd}
+\end{codeexample}
+
+\subsection{Fine-tuning the placement of arrows}
+\label{sec:fine-tuning-arrows}
+
+\begin{key}{/tikz/commutative diagrams/shift left=\meta{dimension}
+ (default 0.56ex)}
+ Shifts arrows by \meta{dimension} to the left, relative to the arrow
+ direction. A dimensionless argument causes that multiple of the
+ default value to be used.
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/shift right=\meta{dimension}
+ (default 1)}
+ A shortcut to |shift left=-|\meta{dimension}.
+\end{key}
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, red, shift left=1.5ex] \arrow[r]
+ \arrow[dr, blue, shift right=1.5ex] \arrow[dr]
+ & B \arrow[d, purple, shift left=1.5ex] \arrow[d]\\
+ & C
+\end{tikzcd}
+\end{codeexample}
+
+The default values of |shift left| and |shift right| are appropriate
+for a pair of parallel arrows, and dimensionless arguments are useful
+to create sets of multiple parallel arrows.
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r]
+ & B \arrow[r, shift left]
+ \arrow[r, shift right]
+ & C \arrow[r]
+ \arrow[r, shift left=2]
+ \arrow[r, shift right=2]
+ & \cdots
+\end{tikzcd}
+\end{codeexample}
+
+\begin{key}{/tikz/commutative diagrams/shift=\marg{coordinate}}
+ Shifts arrows by \meta{coordinate}.
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/xshift=\meta{dimension}}
+ Shifts arrows right by \meta{dimension}.
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/yshift=\meta{dimension}}
+ Shifts arrows up by \meta{dimension}.
+\end{key}
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, yshift=0.7ex] \arrow[r, yshift=-0.7ex]
+ & B \arrow[d, xshift=0.7ex] \arrow[d, xshift=-0.7ex] \\
+ & C
+\end{tikzcd}
+\end{codeexample}
+
+\begin{key}{/tikz/commutative diagrams/start anchor=\opt{{\ttfamily\char`\{}\ooarg{coordinate transformations}}\meta{anchor}\opt{\ttfamily\char`\}}}
+ This key specifies at which anchor of the source node the arrow
+ should start. Optionally, additional coordinate transformations can
+ be supplied. An empty \meta{anchor} argument causes no anchor to be
+ specified, which is the usual behavior.
+\end{key}
+
+\begin{key}{/tikz/commutative diagrams/end anchor=\opt{{\ttfamily\char`\{}\ooarg{coordinate transformations}}\meta{anchor}\opt{\ttfamily\char`\}}}
+ This key works analogously, but refers to the target node of the arrow.
+\end{key}
+
+See the picture on \S\ref{sec:asymm-rect-shape} for some of the
+possible values for \meta{anchor}.
+\begin{codeexample}[]
+\begin{tikzcd}[cells={nodes={draw=gray}}]
+ A \arrow[r, black]
+ \arrow[r, blue, end anchor=north east]
+ \arrow[r,
+ red,
+ start anchor={[xshift=-1ex]},
+ end anchor={[yshift=2ex]north east}]
+ & B
+\end{tikzcd}
+\end{codeexample}
+
+\begin{key}{/tikz/commutative diagrams/shorten=\meta{dimension}}
+ This key shortens each end of the arrow by \meta{dimension}.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, shift left]
+ \ar[r, shorten=2mm, shift right]
+ & B
+\end{tikzcd}
+\end{codeexample}
+\end{key}
+
+Note that the ends of an arrow can be shortened individually using
+\tikzname's built-in keys |shorten <| and |shorten >|.
+
+\subsection{Three-dimensional diagrams}
+\label{sec:crossing-over}
+
+\begin{stylekey}{/tikz/commutative diagrams/crossing over}
+ This style makes a thicker line, with color |background color|, to
+ be drawn under the current arrow, simulating the effect of its
+ passing over other arrows.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[dr] & B \arrow[dl, crossing over] \\
+ C & D
+\end{tikzcd}
+\end{codeexample}
+\end{stylekey}
+
+Note that, since arrows are drawn in the order they are read, it may
+be necessary to defer the drawing of certain arrows to achieve the
+desired result. This can be done using the |from| key, as shown in the
+following picture.
+
+\begin{codeexample}[]
+\begin{tikzcd}[row sep=scriptsize, column sep=scriptsize]
+ & f^* E_V \arrow[dl] \arrow[rr] \arrow[dd] & & E_V \arrow[dl] \arrow[dd] \\
+ f^* E \arrow[rr, crossing over] \arrow[dd] & & E \\
+ & U \arrow[dl] \arrow[rr] & & V \arrow[dl] \\
+ M \arrow[rr] & & N \arrow[from=uu, crossing over]\\
+\end{tikzcd}
+\end{codeexample}
+
+\begin{key}{/tikz/commutative diagrams/crossing over clearance=\meta{dimension}
+ (initially 1.5ex)}
+ This key specifies the width of the background-colored line drawn
+ under a |crossing over| arrow.
+\end{key}
+
+\subsection{Options for labels}
+\label{sec:options-labels}
+
+\begin{stylekey}{/tikz/commutative diagrams/every label}
+ This style is applied to every label produced with |\arrow|. It is initially set
+ to
+
+\begin{verse}
+|/tikz/auto,|\\
+|/tikz/font=|\meta{something}|,|\\
+|/tikz/inner sep=0.5ex|
+\end{verse}
+where \meta{something} is something that makes |\scriptstyle| be
+applied to labels in math mode.
+\end{stylekey}
+
+The key |/tikz/auto| makes the label be placed on the left side of the
+arrow, relative to its direction. The key |/tikz/inner sep| controls
+the distance between a label and the corresponding arrow.
+
+\begin{key}{/tikz/commutative diagrams/labels=\meta{options}}
+ This key appends \meta{options} to |every label|.
+\end{key}
+
+\begin{stylekey}{/tikz/commutative diagrams/marking}
+ This style causes the label to be placed over the arrow. It is
+ useful to decorate arrows using ordinary math symbols.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, "/" marking]
+ \arrow[rd, "\circ" marking]
+ & B \\
+ & C
+\end{tikzcd}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/commutative diagrams/description}
+ This style causes the label to be placed over the arrow, with the
+ background filled. The clearance around the label is determined by
+ \texttt{/tikz/inner sep}.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r, "\phi" description] & B
+\end{tikzcd}
+\end{codeexample}
+\end{stylekey}
+
+\section{Advanced usage}
+\label{sec:advanced-usage}
+
+This section provides further details on the functioning of this
+package, with the aim of allowing the advanced user to make a more or
+less arbitrary use of other \tikzname{} features within |{tikzcd}|.
+
+\subsection{Internals of \texttt{tikzcd} and the arrow commands}
+\label{sec:intern-arrow-comm}
+
+The |{tikzcd}| environment works by substituting code of the form
+\begin{verse}
+ |\begin{tikzcd}[|\meta{options}|]|\\
+ \hspace*{1.5ex} \meta{contents}\\
+ |\end{tikzcd}|
+\end{verse}
+with roughly the following:
+\begin{verse}
+ |\begin{tikzpicture}[|\meta{options}|]|\\
+ \hspace*{1.5ex}| \matrix[matrix of nodes] {|\\
+ \hspace*{3ex}| |\meta{contents} |\\|\\
+ \hspace*{1.5ex}| };|\\
+ \hspace*{1.5ex}| |\meta{paths}\\
+ |\end{tikzpicture}|
+\end{verse}
+
+Not shown above are a number of initialization procedures, such as
+defining |\arrow| and its relatives, as well as applying the default
+settings specified by |every diagram| and its relatives. Note that
+the next-row command |\\| for the last row is inserted by |{tikzcd}|,
+and therefore should not be present in \meta{contents}. Notice also
+that you can use the key |execute at end picuture| in \meta{options}
+to have arbitrary \tikzname{} code executed after a diagram is drawn.
+
+Initially, \meta{paths} is the empty string. A command
+|\arrow[|\meta{options}|]| does nothing at the point it is inserted,
+and causes the following code to be appended to \meta{paths}:
+\begin{verse}
+ |\path[|\meta{options}|] (|\meta{source~node}|) to (|\meta{target~node}|);|
+\end{verse}
+By default, \meta{source node} and \meta{target node} refer to the
+node corresponding to the matrix cell where the command |\arrow| is
+present. This can be changed using the |from| and |to| keys, or a
+direction argument (a string consisting of characters |r|, |l|, |d|,
+|u|).
+
+\subsection{Tweaking \texttt{to} paths}
+\label{sec:tweaking-to-paths}
+
+Recall that the \texttt{to} path operation used in the paths created by
+|\arrow| can take a number of options, as described in
+\S\ref*{pgfman-library-to-paths} of the \pgfname{} manual~\cite{pgfman}. In particular, the
+key |/tikz/to path| determines the path that is actually drawn, and
+can be used to do all sorts of fiddling.
+
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[dr, controls={+(1.5,0.5) and +(-1,0.8)}]
+ \arrow[dr, dashed, to path=|- (\tikztotarget)]
+ & \\
+ & B \arrow[loop right]
+\end{tikzcd}
+\end{codeexample}%|
+
+The following example shows how to produce a ``snake'' map. The arrow
+with the |phantom| option (going from $B$ to $E$) has the sole purpose
+of creating a coordinate, named |Z|, lying halfway between these two
+cells. The arrow starting at $C$ has target $D$, so the macros
+|\tikztostart| and |\tikztotarget| will expand to the nodes
+corresponding to these two cells in the argument of |to path|. Notice
+also the use of |\tikztonodes| at the point where we want the label to
+be inserted.
+\begin{codeexample}[]
+\begin{tikzcd}
+ A \arrow[r]
+ & B \arrow[r]
+ \arrow[d, phantom, ""{coordinate, name=Z}]
+ & C \arrow[dll,
+ "\delta",
+ rounded corners,
+ to path={ -- ([xshift=2ex]\tikztostart.east)
+ |- (Z) [near end]\tikztonodes
+ -| ([xshift=-2ex]\tikztotarget.west)
+ -- (\tikztotarget)}] \\
+ D \arrow[r]
+ & E \arrow[r]
+ & F
+\end{tikzcd}
+\end{codeexample}
+
+\subsection{Drawing diagrams directly with Ti\emph{k}Z}
+\label{sec:draw-diagr-directly}
+
+If you find that this package is not flexible enough for some
+particular application, you can use the methods described in
+\cite{lenders}, \cite{milne} and draw diagrams directly with
+\tikzname. In this case, you can still use the styles provided here
+to obtain pictures with a uniform appearance throughout your document.
+The pictures below show how this can be done (the second one is
+adapted from \cite{milne}).
+
+\begin{codeexample}[]
+\begin{tikzpicture}[commutative diagrams/every diagram]
+ \matrix[matrix of math nodes, name=m, commutative diagrams/every cell] {
+ X & \bar X \\
+ & Y \\};
+ \path[commutative diagrams/.cd, every arrow, every label]
+ (m-1-1) edge[commutative diagrams/hook] (m-1-2)
+ edge[commutative diagrams/dashed] (m-2-2)
+ (m-1-2) edge (m-2-2);
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[commutative diagrams/every diagram]
+ \node (P0) at (90:2.3cm) {$X\otimes (Y\otimes (Z\otimes T))$};
+ \node (P1) at (90+72:2cm) {$X\otimes ((Y\otimes Z)\otimes T))$} ;
+ \node (P2) at (90+2*72:2cm) {\makebox[5ex][r]{$(X\otimes (Y\otimes Z))\otimes T$}};
+ \node (P3) at (90+3*72:2cm) {\makebox[5ex][l]{$((X\otimes Y)\otimes Z)\otimes T$}};
+ \node (P4) at (90+4*72:2cm) {$(X\otimes Y)\otimes (Z\otimes T)$};
+
+ \path[commutative diagrams/.cd, every arrow, every label]
+ (P0) edge node[swap] {$1\otimes\phi$} (P1)
+ (P1) edge node[swap] {$\phi$} (P2)
+ (P2) edge node {$\phi\otimes 1$} (P3)
+ (P4) edge node {$\phi$} (P3)
+ (P0) edge node {$\phi$} (P4);
+\end{tikzpicture}
+\end{codeexample}
+
+\subsection{Issues with active characters}
+\label{sec:issues-with-active-ampersand}
+
+By default, \tikzname{} makes the character |&| active inside
+matrices, and this causes the error message
+\begin{verse}
+ |! Package pgfbasematrix Error: Single ampersand used with wrong catcode.|
+\end{verse}
+when |{tikzcd}| is used inside the argument to a macro such as a Beamer
+frame or a footnote. One solution to this problem is to call |{tikzcd}|
+with the option |ampersand replacement=\&|, and replace all
+occurrences of |&| with |\&| in the diagram. This procedure is also
+needed if you want to use matrices in a diagram cell or label.
+
+\begin{codeexample}[/tikz/commutative diagrams/diagrams={column sep=large}]
+\begin{tikzcd}[ampersand replacement=\&]
+ A \oplus B \ar[r, "{\begin{pmatrix} e & f \\ g & h \end{pmatrix}}"]
+ \& C \oplus D
+\end{tikzcd}
+\end{codeexample}
+
+An alternative fix to this issue that does not require replacing |&|
+with a different column separator consists in adding the following
+line to your document after all packages have been loaded:
+\begin{verse}
+ |\def\temp{&} \catcode`&=\active \let&=\temp|
+\end{verse}
+However, this may interfere in unexpected ways with other
+packages. Use this trick at your own risk.
+
+A different but related issue is that some packages, notably
+\texttt{babel}, modify the catcodes of certain characters in a way
+that may upset \tikzname's parser. To fix this, add
+\begin{verse}
+ |\usetikzlibrary{babel}|
+\end{verse}
+to your document preamble.
+
+\section{Additional goodies}
+\label{sec:general-infra}
+
+This package provides some general \pgfname\ infrastructure to achieve
+its goals. These additional goodies are documented in this section.
+
+\subsection{The \texttt{asymmetrical rectangle} shape}
+\label{sec:asymm-rect-shape}
+
+The following shape is used inside |{tikzcd}| to ensure that arrows
+between nodes in the same row are perfectly horizontal, even if the
+nodes contain text with different heights and depths.
+
+\begin{shape}{asymmetrical rectangle}
+ This shape is similar to the |rectangle| shape, but its |center| is
+ located at a fixed distance of the |base|, as determined by the
+ |center yshift| key, rather than lying at the shape's geometric
+ center. The numerical anchors, as well as |east| and |west|, are
+ modified accordingly, and there are anchors called |real center|,
+ |real east|, and |real west| matching |rectangle|'s original
+ definitions. All other anchors provided by |rectangle| are
+ available and remain unmodified.
+\end{shape}
+
+\begin{key}{/tikz/commutative diagrams/center yshift=\meta{dimension}
+ (initially axis\_height)}
+ Determines the distance between |asymmetrical rectangle|'s |base|
+ and |center| anchors.
+\end{key}
+
+The picture below shows some of the available anchors.
+
+\begin{center}\Huge
+ \begin{tikzpicture}
+ \node[name=s,shape=asymmetrical rectangle,shape example]
+ {Asymmetrical rectangle\vrule width 1pt height 2cm}; \foreach
+ \anchor/\placement in {north west/above left, north/above, north
+ east/above right, west/left, center/right, east/right, real
+ west/left, real center/right, real east/right, base west/left,
+ base/right, base east/right, south west/below left, south/below,
+ south east/below right, text/left, 10/right, 130/above,
+ 230/below, -10/below} \draw[shift=(s.\anchor)] plot[mark=x]
+ coordinates{(0,0)} node[\placement] {\scriptsize\texttt{\anchor}};
+ \end{tikzpicture}
+\end{center}
+
+% This shape is used for |{tikzcd}|'s matrix cells to ensure arrows
+% between nodes in the same row are drawn horizontally. When
+% \tikzname{} draws a path between two nodes, it chooses endpoints lying
+% on their borders in such a way that the path points towards the
+% \texttt{center} of the nodes. With the \texttt{rectangle} shape, the
+% anchor \texttt{center} lies halfway between two nonadjacent vertices
+% and therefore its position depends on the height and depth of the
+% text, potentially causing slanted lines to be draw. The picture
+% above, for instance, has a humongous ascender (namely, the rule after
+% the word ``rectangle''), so its \texttt{real center} lies well above
+% its \texttt{center}.
+
+\subsection{Reading font parameters}
+\label{sec:read-font-param}
+
+The following are |pgfmath| functions used to access relevant math
+font parameters. They take no arguments, but the result depends of
+the currently selected font size.
+
+\begin{math-function}{axis\_height}
+Returns the axis height parameter (a.k.a.\ $\sigma_{22}$) of the document's math font.
+\end{math-function}
+
+\begin{math-function}{rule\_thickness}
+Returns the fraction rule thickness (a.k.a.\ $\xi_8$) of the document's math font.
+\end{math-function}
+
+\subsection{Computer Modern arrow tips}
+\label{sec:comp-modern-arrow}
+
+The following arrow tips mimic the Computer Modern designs. It is
+useful to know that at size 10\,pt, the Computer Modern arrow stems
+are 0.4\,pt thick; for other font sizes, scale this parameter
+accordingly, or set \texttt{line width=rule\_thickness}.
+
+Notice that by using the mechanism explained in
+\S\ref{sec:changing-arrow-tips}, it is not necessary, and in fact not
+advisable, to directly refer to the arrow tips listed in this section
+inside a |{tikzcd}|.
+
+\begin{multicols}{2}\raggedcolumns
+ \begin{tabular}{ll}
+ \displayarrow{cm to}\\
+ \displayarrow[/tikz/commutative diagrams/double line]{cm implies}\\
+ \displayarrow[line width=1.5*rule_thickness]{cm bold to}\\
+ \displayarrow{cm double to}\\
+ \displayarrow{cm to reversed}\\
+ \end{tabular}
+
+ \begin{tabular}{ll}
+ \displayarrow{cm bar}\\
+ \displayarrow{cm left to}\\
+ \displayarrow{cm right to}\\
+ \displayarrow{cm left hook}\\
+ \displayarrow{cm right hook}\\
+ \end{tabular}
+\end{multicols}
+
+% Incidentally, \tikzname's original \texttt{to} arrow tip seems to be
+% based on the pre-1992 version of Computer Modern, which, in spite of
+% its author's wish \cite{knuth}, can still be found in many systems.
+% \TeX{}Live, for instance, distributed the old version up until 2007 or
+% 2008. Therefore, an up-to-date \TeX{} distribution may be necessary
+% to get matching arrows in formulas and diagrams.
+
+\subsection{Glyph arrow tips}
+\label{sec:font-arrow-tips}
+
+As an attempt to provide a general solution to the problem of having
+matching arrow tips in text and pictures, this feature produces arrow
+tips that consist of (pieces of) font glyphs carefully placed at the
+endpoints of the path. To activate it in |{tikzcd}| diagrams, refer
+to the |arrow style| key.
+
+\begin{arrowtipsimple}{Glyph}
+ An arrow tip made from a piece of text. It accepts the following
+parameters.
+
+\begin{key}{/pgf/arrow keys/glyph math command=\meta{name}}
+ The name of a command (to be used inside |$\csname| \dots
+ |\endcsname$|) producing the desired glyph.
+\end{key}
+
+\begin{key}{/pgf/arrow keys/glyph length=\meta{dimension} (initially 1ex)}
+ The length of the portion of the glyph not clipped away. Also used
+ to set the `tip end' parameter.
+\end{key}
+
+\begin{key}{/pgf/arrow keys/glyph axis=\meta{dimension} (initially axis\_height)}
+ A vertical displacement applied to the glyph in order to make the
+ glyph's central axis (typically an arrow stem) aligned with the
+ path.
+\end{key}
+
+\begin{key}{/pgf/arrow keys/glyph shorten=\meta{dimension} (initially -0.1ex)}
+ An additional amount by which the end of the path is shortened.
+ This is used to compensate for the gap that usually exists between
+ the tip end and the glyph's bounding box.
+\end{key}
+\end{arrowtipsimple}
+
+Below are some usage examples. Notice that glyph arrow tips do not
+scale with \pgfname{} line width but their size depends on the current
+font size, so you will probably want to set \texttt{line
+ width=rule\_thickness} when using them. Also, contrarily to the
+arrow parameters defined by the \texttt{arrows.meta} library, the
+parameters described above are evaluated only at the time the arrow
+tip is drawn, so they can (and should) be given in the units em or ex.
+
+\begin{codeexample}[]
+\tikzset{
+ math to/.tip={Glyph[glyph math command=rightarrow]},
+ loop/.tip={Glyph[glyph math command=looparrowleft, swap]},
+ weird/.tip={Glyph[glyph math command=Rrightarrow, glyph length=1.5ex]},
+ pi/.tip={Glyph[glyph math command=pi, glyph length=1.5ex, glyph axis=0pt]},
+}
+
+\begin{tikzpicture}[line width=rule_thickness]
+ \draw[loop-math to, bend left] (0,2) to (1,2);
+ \draw[math to-weird] (0,1) to (1,1);
+ \draw[pi-pi] (0,0) to (1,0);
+\end{tikzpicture}
+\end{codeexample}
+
+It is important to be aware of some drawbacks of this feature. First,
+the transition between a line and the arrow tip may become visible
+with some printers (especially in low resolutions or draft mode) and
+document viewers, as you may be able to see in the samples above.
+Second, these rather long tips may
+(\tikz[baseline=-axis_height]\draw[dash pattern=on 0.8ex off
+0.4ex,-{Glyph[glyph math command=rightarrow]}] (0,0) -- (3.4ex,0);) or may
+not (\tikz[baseline=-axis_height]\draw[dash pattern=on 0.8ex off
+0.4ex,-{Glyph[glyph math command=rightarrow]}] (0,0) -- (4ex,0);) fit
+nicely with dashed or curved lines. Finally, the method used to place
+the arrow tip at the end of a stroked path and clip away the arrow
+stem makes certain assumptions about the font design and could fail in
+cases where unusual design choices are made.
+
+\begin{thebibliography}{9}
+\bibitem{lenders}
+ Felix Lenders,
+ \emph{Commutative diagrams using \tikzname}.
+ Available at \url{http://www.felixl.de/commu.pdf}.
+\bibitem{milne}
+ James Milne,
+ \emph{Guide to commutative diagrams}.
+ Available at \url{http://www.jmilne.org/not/CDGuide.html}.
+\bibitem{pgfman}
+ Till Tantau,
+ \emph{The \tikzname{} and \pgfname{} packages: Manual for version 3.0.1a}.
+ Available at \url{http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}.
+\end{thebibliography}
+
+\printindex
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: tex
+%%% mode: auto-fill
+%%% End: \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-cd/tikz-cd.sty b/graphics/pgf/contrib/tikz-cd/tikz-cd.sty
new file mode 100644
index 0000000000..00837096e4
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-cd/tikz-cd.sty
@@ -0,0 +1,20 @@
+% Copyright 2011, 2012, 2014, 2018 by Augusto Stoffel
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+\ProvidesPackage{tikz-cd}[2018/11/19 v0.9f Commutative diagrams with TikZ]
+\RequirePackage{tikz}[2013/12/13] % pgf version 3.0.0 required
+\usetikzlibrary{cd}
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-cd/tikzlibrarycd.code.tex b/graphics/pgf/contrib/tikz-cd/tikzlibrarycd.code.tex
new file mode 100644
index 0000000000..1879a235a7
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-cd/tikzlibrarycd.code.tex
@@ -0,0 +1,573 @@
+% tikzlibrarycd.code.tex [2018/11/19 v0.9f Commutative diagrams with TikZ]
+%
+% Copyright 2011, 2012, 2014, 2018 by Augusto Stoffel
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+\usetikzlibrary{matrix,quotes,arrows.meta}
+
+\newif\iftikzcd@mathmode
+
+\def\tikzcdset{\pgfqkeys{/tikz/commutative diagrams}}
+
+\tikzcdset{
+ arrows/.code={\tikzcdset{every arrow/.append style={#1}}},
+ labels/.code={\tikzcdset{every label/.append style={#1}}},
+ cells/.code={\tikzcdset{every cell/.append style={#1}}},
+ diagrams/.code={\tikzcdset{every diagram/.append style={#1}}},
+ execute before arrows/.code={%
+ \expandafter\def%
+ \expandafter\tikzcd@before@paths@hook%
+ \expandafter{\tikzcd@before@paths@hook#1}},
+ to/.code={\tikzcd@setarrowend\tikzcd@ar@target{#1}},
+ from/.code={\tikzcd@setarrowend\tikzcd@ar@start{#1}},
+ shorten/.style={
+ /tikz/shorten <=#1,
+ /tikz/shorten >=#1},
+ description/.style={
+ /tikz/anchor=center,
+ /tikz/fill=\pgfkeysvalueof{/tikz/commutative diagrams/background color}},
+ marking/.style={
+ /tikz/font=,
+ /tikz/sloped,
+ /tikz/shape=asymmetrical rectangle,
+ /tikz/anchor=center},
+ phantom/.style={
+ /tikz/draw=none,
+ /tikz/commutative diagrams/labels={
+ /tikz/font=,
+ /tikz/anchor=center}},
+ crossing over/.style={
+ /tikz/preaction={
+ /tikz/draw=\pgfkeysvalueof{/tikz/commutative diagrams/background color},
+ /tikz/arrows=-,
+ /tikz/line width=\pgfkeysvalueof{/tikz/commutative diagrams/crossing over clearance}}},
+ cramped/.code={\tikzcdset{
+ every matrix/.append style={inner sep=+-0.3em},
+ every cell/.append style={inner sep=+0.3em}}},
+ row sep/.code={\tikzcd@sep{row}{#1}},
+ column sep/.code={\tikzcd@sep{column}{#1}},
+ sep/.code={\tikzcdset{row sep={#1},column sep={#1}}},
+ math mode/.is if=tikzcd@mathmode,
+ arrow style/.is choice}
+
+\def\tikzcd@sep#1#2{%
+ \pgfkeysifdefined{/tikz/commutative diagrams/#1 sep/#2}%
+ {\pgfkeysgetvalue{/tikz/commutative diagrams/#1 sep/#2}\tikzcd@temp%
+ \pgfkeysalso{/tikz/#1 sep/.expand once=\tikzcd@temp}}%
+ {\pgfkeysalso{/tikz/#1 sep={#2}}}}
+
+\def\tikzcd@setarrowend#1#2{%
+ \pgfutil@ifundefined{pgf@sh@ns@\tikzcdmatrixname-#2}%
+ {%
+ \c@pgf@counta=0%
+ \c@pgf@countb=0%
+ \let\tikzcd@temp=\tikzcd@parse%
+ \expandafter\tikzcd@temp#2\relax%
+ \ifx\tikzcd@temp\pgfutil@empty% true if it was a direction parameter
+ \advance\c@pgf@counta by\tikzcd@currentrow%
+ \advance\c@pgf@countb by\tikzcd@currentcolumn%
+ \edef#1{\tikzcdmatrixname-\the\c@pgf@counta-\the\c@pgf@countb}%
+ \else%
+ \def#1{#2}%
+ \fi%
+ }{%
+ \def#1{\tikzcdmatrixname-#2}%
+ }}
+
+% The unknown key handler and direction argument parser
+\tikzcdset{
+ .unknown/.code={%
+ \ifpgfkeysaddeddefaultpath%
+ \c@pgf@counta=0%
+ \c@pgf@countb=0%
+ \let\tikzcd@temp=\tikzcd@parse%
+ \expandafter\tikzcd@temp\pgfkeyscurrentname\relax%
+ \ifx\tikzcd@temp\pgfutil@empty% true if it was a direction parameter
+ \advance\c@pgf@counta by\tikzcd@currentrow%
+ \advance\c@pgf@countb by\tikzcd@currentcolumn%
+ \edef\tikzcd@ar@target{\tikzcdmatrixname-\the\c@pgf@counta-\the\c@pgf@countb}%
+ \else%
+ \pgfqkeys{/tikz}{\pgfkeyscurrentname={#1}}%
+ \fi%
+ \else%
+ \def\pgfutilnext{\pgfkeysvalueof{/handlers/.unknown/.@cmd}#1\pgfeov}\pgfutilnext%
+ \fi}}
+
+\def\tikzcd@parse#1{% parser for arrow direction argument
+ \ifx#1r\advance\c@pgf@countb by1\else%
+ \ifx#1d\advance\c@pgf@counta by1\else%
+ \ifx#1l\advance\c@pgf@countb by-1\else%
+ \ifx#1u\advance\c@pgf@counta by-1\else%
+ \ifx#1\relax\let\tikzcd@temp\pgfutil@empty%
+ \else\let\tikzcd@temp\pgfutil@gobble@until@relax\fi\fi\fi\fi\fi%
+ \tikzcd@temp}
+
+% The `tikzcd' environment
+\def\tikzcd{%
+ \iffalse{\fi\ifnum0=`}\fi% standard trick to allow nesting of tabular-like environments (cf. the tabularx manual)
+ \pgfutil@ifnextchar&% if we get an & here, it will be returned with the wrong catcode to the input stream
+ {\expandafter\tikzcd@@\expandafter\pgfmatrixnextcell\pgfutil@gobble}%
+ {\tikzcd@@}}
+
+\def\tikzcd@@{\pgfutil@ifnextchar[{\tikzcd@handle@shortcuts@next\tikzcd@}{\tikzcd@[]}}
+
+\def\tikzcd@[#1]{%
+ \tikzpicture[/tikz/commutative diagrams/.cd,every diagram,#1]%
+ \ifx\arrow\tikzcd@arrow%
+ \pgfutil@packageerror{tikz-cd}{Diagrams cannot be nested}{}%
+ \fi%
+ \let\arrow\tikzcd@arrow%
+ \let\ar\tikzcd@arrow%
+ \def\rar{\tikzcd@xar{r}}%
+ \def\lar{\tikzcd@xar{l}}%
+ \def\dar{\tikzcd@xar{d}}%
+ \def\uar{\tikzcd@xar{u}}%
+ \def\urar{\tikzcd@xar{ur}}%
+ \def\ular{\tikzcd@xar{ul}}%
+ \def\drar{\tikzcd@xar{dr}}%
+ \def\dlar{\tikzcd@xar{dl}}%
+ \global\let\tikzcd@savedpaths\pgfutil@empty%
+ \matrix[%
+ /tikz/matrix of \iftikzcd@mathmode math \fi nodes,%
+ /tikz/every cell/.append code={\tikzcdset{every cell}},%
+ /tikz/commutative diagrams/.cd,every matrix]%
+ \bgroup}
+
+\def\endtikzcd{%
+ \pgfmatrixendrow\egroup%
+ \pgfextra{\global\let\tikzcdmatrixname\tikzlastnode};%
+ \tikzcdset{\the\pgfmatrixcurrentrow-row diagram/.try}%
+ \begingroup%
+ \pgfkeys{% `quotes' library support
+ /handlers/first char syntax/the character "/.initial=\tikzcd@forward@quotes,%
+ /tikz/edge quotes mean={%
+ edge node={node [execute at begin node=\iftikzcd@mathmode$\fi,%$
+ execute at end node=\iftikzcd@mathmode$\fi,%$
+ /tikz/commutative diagrams/.cd,every label,##2]{##1}}}}%
+ \let\tikzcd@errmessage\errmessage% improve error messages
+ \def\errmessage##1{\tikzcd@errmessage{##1^^J...^^Jl.\tikzcd@lineno\space%
+ I think the culprit is a tikzcd arrow in cell \tikzcd@currentrow-\tikzcd@currentcolumn}}%
+ \tikzcd@before@paths@hook%
+ \tikzcd@savedpaths%
+ \endgroup%
+ \endtikzpicture%
+ \ifnum0=`{}\fi}
+
+% The arrow commands
+\def\tikzcd@arrow{%
+ \relax% this was added to avoid errors when a cell starts with \arrow, but it seems unnecessary now
+ \edef\tikzcd@temp{%
+ \noexpand\def\noexpand\tikzcd@currentcolumn{\the\pgfmatrixcurrentcolumn}%
+ \noexpand\def\noexpand\tikzcd@currentrow{\the\pgfmatrixcurrentrow}%
+ \noexpand\def\noexpand\tikzcd@lineno{\the\inputlineno}}%
+ \expandafter\pgfutil@g@addto@macro\expandafter\tikzcd@savedpaths\expandafter{\tikzcd@temp}%
+ \pgfutil@ifnextchar[{\tikzcd@handle@shortcuts@next\tikzcd@@arrow}{\tikzcd@ar@old[]}}
+
+\def\tikzcd@@arrow[#1]{\pgfutil@ifnextchar\bgroup{\tikzcd@ar@old[#1]}{\tikzcd@ar@new[#1]}}
+
+\def\tikzcd@ar@new[#1]{% new syntax
+ \pgfutil@g@addto@macro\tikzcd@savedpaths{%
+ \path[/tikz/commutative diagrams/.cd,every arrow,#1]%
+ (\tikzcd@ar@start\tikzcd@startanchor) to (\tikzcd@ar@target\tikzcd@endanchor); }}
+
+\def\tikzcd@ar@old[#1]#2{% old syntax
+ \pgfutil@ifnextchar[%
+ {\tikzcd@handle@shortcuts@next\tikzcd@ar@getlabel{to={#2},#1}}%
+ {\pgfutil@ifnextchar\bgroup%
+ {\tikzcd@ar@getlabel{to={#2},#1}[]}%
+ {\tikzcd@ar@new[to={#2},#1]}}}
+
+\def\tikzcd@ar@getlabel#1[#2]#3{%
+ \pgfutil@ifnextchar[%
+ {\tikzcd@handle@shortcuts@next\tikzcd@ar@getlabel{#1,"{#3}"{#2}}}%
+ {\pgfutil@ifnextchar\bgroup%
+ {\tikzcd@ar@getlabel{#1,"{#3}"{#2}}[]}%
+ {\tikzcd@ar@new[#1,"{#3}"{#2}]}}}
+
+\def\tikzcd@xar#1{\relax\pgfutil@ifnextchar[{\tikzcd@handle@shortcuts@next\tikzcd@@xar{#1}}{\tikzcd@arrow[]{#1}}}
+\def\tikzcd@@xar#1[#2]{\tikzcd@arrow[#2]{#1}}
+
+\def\tikzcd@handle@shortcuts@next{% expand next macro using standard catcodes
+ \iftikz@handle@active@code%
+ \begingroup%
+ \tikz@switchoff@shorthands\expandafter%
+ \endgroup\expandafter%
+ \fi}
+
+\def\tikzcd@ar@target{\tikzcdmatrixname-\tikzcd@currentrow-\tikzcd@currentcolumn}
+\def\tikzcd@ar@start{\tikzcdmatrixname-\tikzcd@currentrow-\tikzcd@currentcolumn}
+
+\def\tikzcd@forward@quotes#1{\tikzset{every to/.append style={#1}}}
+
+\let\tikzcd@before@paths@hook\pgfutil@empty
+
+% `start anchor', `end anchor', and `shift' keys
+\def\tikzcd@setanchor#1[#2]#3\relax{%
+ \ifx\relax#2\relax\else%
+ \tikzcdset{@#1transform/.append style={#2},@shiftabletopath}%
+ \fi%
+ \ifx\relax#3\relax%
+ \pgfutil@namelet{tikzcd@#1anchor}{pgfutil@empty}%
+ \else%
+ \pgfutil@namedef{tikzcd@#1anchor}{.#3}%
+ \fi}
+
+\tikzcdset{
+ @shiftabletopath/.style={
+ /tikz/execute at begin to={%
+ \begingroup%
+ \def\tikz@tonodes{coordinate[pos=0,commutative diagrams/@starttransform/.try](tikzcd@nodea) %
+ coordinate[pos=1,commutative diagrams/@endtransform/.try](tikzcd@nodeb)}%
+ \path (\tikztostart) \tikz@to@path;%
+ \endgroup%
+ \def\tikztostart{tikzcd@nodea}%
+ \def\tikztotarget{tikzcd@nodeb}%
+ \tikzset{insert path={(tikzcd@nodea)}}},
+ /tikz/commutative diagrams/@shiftabletopath/.code={}},
+ start anchor/.code={%
+ \pgfutil@ifnextchar[{\tikzcd@setanchor{start}}{\tikzcd@setanchor{start}[]}#1\relax},%]
+ end anchor/.code={%
+ \pgfutil@ifnextchar[{\tikzcd@setanchor{end}}{\tikzcd@setanchor{end}[]}#1\relax},%]
+ start anchor=,
+ end anchor=,
+ shift left/.style={
+ /tikz/commutative diagrams/@shiftabletopath,
+ /tikz/execute at begin to={%
+ \pgfpointnormalised{%
+ \pgfpointdiff{\pgfpointanchor{tikzcd@nodeb}{center}}{\pgfpointanchor{tikzcd@nodea}{center}}}%
+ \pgfgetlastxy{\tikzcd@x}{\tikzcd@y}%
+ \pgfmathparse{#1}%
+ \ifpgfmathunitsdeclared\else
+ \pgfmathparse{\pgfmathresult*\pgfkeysvalueof{/tikz/commutative diagrams/shift left/.@def}}
+ \fi
+ \coordinate (tikzcd@nodea) at ([shift={(\pgfmathresult*\tikzcd@y,-\pgfmathresult*\tikzcd@x)}]tikzcd@nodea);%
+ \coordinate (tikzcd@nodeb) at ([shift={(\pgfmathresult*\tikzcd@y,-\pgfmathresult*\tikzcd@x)}]tikzcd@nodeb);%
+ \tikzset{insert path={(tikzcd@nodea)}}}},
+ shift right/.style={
+ /tikz/commutative diagrams/shift left={-(#1)}},
+ transform nodes/.style={
+ /tikz/commutative diagrams/@shiftabletopath,
+ /tikz/commutative diagrams/@starttransform/.append style={#1},
+ /tikz/commutative diagrams/@endtransform/.append style={#1}},
+ shift/.style={
+ /tikz/shift={#1},% we need this for labels to receive a shift
+ /tikz/commutative diagrams/transform nodes={/tikz/shift={#1}}},
+ xshift/.style={
+ /tikz/xshift={#1},
+ /tikz/commutative diagrams/transform nodes={/tikz/xshift={#1}}},
+ yshift/.style={
+ /tikz/yshift={#1},
+ /tikz/commutative diagrams/transform nodes={/tikz/yshift={#1}}}}
+
+% pgfmath functions to obtain math fontdimens
+\pgfutil@ifluatex
+
+ \directlua{tex.enableprimitives('tikzcd@', {'Umathaxis', 'Umathfractionrule'})}
+
+ \pgfmathdeclarefunction{axis_height}{0}{%
+ \begingroup%
+ $\relax$% update fontdimens
+ \pgfmathreturn\the\tikzcd@Umathaxis\textstyle%
+ \endgroup}
+
+ \pgfmathdeclarefunction{rule_thickness}{0}{%
+ \begingroup%
+ $\relax$%
+ \pgfmathreturn\the\tikzcd@Umathfractionrule\textstyle%
+ \endgroup}
+
+\else% if using (pdf)tex
+
+ \pgfmathdeclarefunction{axis_height}{0}{%
+ \begingroup%
+ $\relax$% update fontdimens
+ \pgfmathreturn\the\fontdimen22\textfont2%
+ \endgroup}
+
+ \pgfmathdeclarefunction{rule_thickness}{0}{%
+ \begingroup%
+ $\relax$%
+ \pgfmathreturn\the\fontdimen8\textfont3%
+ \endgroup}
+
+\fi
+
+% The shape used inside matrices
+\pgfdeclareshape{asymmetrical rectangle} {
+ \inheritsavedanchors[from={rectangle}]
+ \inheritanchor[from={rectangle}]{base}
+ \inheritanchor[from={rectangle}]{north}
+ \inheritanchor[from={rectangle}]{south}
+ \inheritanchor[from={rectangle}]{base west}
+ \inheritanchor[from={rectangle}]{north west}
+ \inheritanchor[from={rectangle}]{south west}
+ \inheritanchor[from={rectangle}]{base east}
+ \inheritanchor[from={rectangle}]{north east}
+ \inheritanchor[from={rectangle}]{south east}
+ \inheritanchor[from={rectangle}]{mid}
+ \inheritanchor[from={rectangle}]{mid west}
+ \inheritanchor[from={rectangle}]{mid east}
+ \inheritbackgroundpath[from={rectangle}]
+ \anchor{center}{\pgf@anchor@rectangle@center\pgfmathsetlength\pgf@y%
+ {\pgfkeysvalueof{/tikz/commutative diagrams/center yshift}}}
+ \anchor{west}{\pgf@anchor@rectangle@west\pgfmathsetlength\pgf@y%
+ {\pgfkeysvalueof{/tikz/commutative diagrams/center yshift}}}
+ \anchor{east}{\pgf@anchor@rectangle@east\pgfmathsetlength\pgf@y%
+ {\pgfkeysvalueof{/tikz/commutative diagrams/center yshift}}}
+ \anchor{real center}{\pgf@anchor@rectangle@center}
+ \anchor{real west}{\pgf@anchor@rectangle@west}
+ \anchor{real east}{\pgf@anchor@rectangle@east}
+ \anchorborder{%
+ \pgfmathsetlength\pgfutil@tempdima%
+ {\pgfkeysvalueof{/tikz/commutative diagrams/center yshift}}%
+ \pgf@xb=\pgf@x% xb/yb is target
+ \pgf@yb=\pgf@y%
+ \southwest%
+ \pgf@xa=\pgf@x% xa/ya is se
+ \pgf@ya=\pgf@y%
+ \northeast%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \pgf@xc=.5\pgf@x% x/y is half width/height
+ \pgf@yc=.5\pgf@y%
+ \advance\pgf@xa by\pgf@xc% xa/ya becomes center
+ \advance\pgf@ya by\pgf@yc%
+ \ifdim\pgf@yb>0pt%
+ \northeast%
+ \pgf@yc=\pgf@y%
+ \advance\pgf@yc by-\pgfutil@tempdima%
+ \else%
+ \southwest%
+ \pgf@yc=-\pgf@y%
+ \advance\pgf@yc by\pgfutil@tempdima%
+ \fi
+ \edef\pgf@marshal{%
+ \noexpand\pgfpointborderrectangle
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}
+ {\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
+ }%
+ \pgf@process{\pgf@marshal}%
+ \advance\pgf@x by\pgf@xa%
+ \advance\pgf@y by\pgfutil@tempdima%
+ }%
+}%
+
+% Computer modern arrow tips
+\pgfkeys{
+ cm to/.tip={Computer Modern Rightarrow[length=+0pt 6.2]},
+ cm bold to/.tip={cm to[scale=0.667]},
+ cm double to/.tip={cm to[sep=+0pt -2.6]cm to},
+ cm bar/.tip={Bar[width=+0pt 8.2 0.89,line cap=round]},
+ cm left hook/.tip={Hooks[width=+0pt 10.8,length=+0pt 3.6,harpoon,line cap=round]},
+ cm implies/.tip={Implies},
+ cm left to/.tip={cm to[left]},
+ cm right to/.tip={cm to[right]},
+ cm right hook/.tip={cm left hook[swap]},
+ cm to reversed/.tip={cm to[reversed]},
+ cm */.tip={Circle[length=+0pt 7.6]},
+ cm o/.tip={cm *[open]},
+ cm |/.tip={cm bar}}%|
+
+% The `Glyph' meta arrow tip
+\pgfqkeys{/pgf/arrow keys}{
+ glyph math command/.code={% if csname #1 is undefined, we want it to remain so
+ \pgfarrowsaddtooptions{\def\tikzcd@glyph{$\begingroup\expandafter\endgroup\csname #1\endcsname$}}},
+ glyph axis/.code={\pgfarrowsaddtooptions{\pgfmathsetlengthmacro\tikzcd@glyph@axis{#1}}},
+ glyph length/.code={\pgfarrowsaddtooptions{\pgfmathsetlengthmacro\tikzcd@glyph@len{#1}}},
+ glyph shorten/.code={\pgfarrowsaddtooptions{\pgfmathsetlengthmacro\tikzcd@glyph@shorten{#1}}}}
+
+\pgfdeclarearrow{
+ name=Glyph,
+ cache=false,
+ bending mode=none,
+ parameters={\tikzcd@glyph@len,\tikzcd@glyph@shorten},
+ setup code={%
+ \pgfarrowssettipend{\tikzcd@glyph@len\advance\pgf@x by\tikzcd@glyph@shorten}},
+ defaults={
+ glyph axis=axis_height,
+ glyph length=+0.9ex,
+ glyph shorten=+-0.1ex},
+ drawing code={%
+ \pgfpathrectangle{\pgfpoint{+0pt}{+-1ex}}{\pgfpoint{+\tikzcd@glyph@len}{+2ex}}%
+ \pgfusepathqclip%
+ \pgftransformxshift{+\tikzcd@glyph@len}%
+ \pgftransformyshift{+-\tikzcd@glyph@axis}%
+ \pgftext[right,base]{\tikzcd@glyph}}}
+
+% Arrow tip selection styles
+\tikzcdset{
+ double line/.code={\tikzset{%
+ double equal sign distance,
+ double=\pgfkeysvalueof{/tikz/commutative diagrams/background color}}},
+ dashed/.style={/tikz/dash pattern={on 7\pgflinewidth off 4\pgflinewidth}},
+ tikzcd to/.tip={cm to},
+ tikzcd bar/.tip={cm bar},
+ tikzcd left hook/.tip={cm left hook},
+ tikzcd double to/.tip={cm double to},
+ tikzcd implies/.tip={Implies},
+ tikzcd right hook/.tip={tikzcd left hook[swap]},
+ tikzcd left to/.tip={tikzcd to[harpoon]},
+ tikzcd right to/.tip={tikzcd left to[swap]},
+ tikzcd to reversed/.tip={tikzcd to[reversed]},
+ tikzcd cap/.tip={},
+ tikzcd implies cap/.tip={},
+ tikzcd implies bar/.tip={tikzcd bar},
+ no tail/.code={\pgfsetarrowsstart{tikzcd cap}},
+ to head/.code={\pgfsetarrowsend{tikzcd to}},
+ maps to/.code={\pgfsetarrowsstart{tikzcd bar}},
+ hook/.code={\pgfsetarrowsstart{tikzcd right hook}},
+ hook'/.code={\pgfsetarrowsstart{tikzcd left hook}},
+ harpoon/.code={\pgfsetarrowsend{tikzcd left to}},
+ harpoon'/.code={\pgfsetarrowsend{tikzcd right to}},
+ two heads/.code={\pgfsetarrowsend{tikzcd double to}},
+ tail/.code={\pgfsetarrowsstart{tikzcd to reversed}},
+ rightarrow/.code={\pgfsetarrows{tikzcd cap-tikzcd to}},
+ Rightarrow/.code={\tikzcdset{double line}\pgfsetarrows{tikzcd implies cap-tikzcd implies}},
+ leftarrow/.code={\pgfsetarrows{tikzcd to-tikzcd cap}},
+ Leftarrow/.code={\tikzcdset{double line}\pgfsetarrows{tikzcd implies-tikzcd implies cap}},
+ leftrightarrow/.code={\pgfsetarrows{tikzcd to-tikzcd to}},
+ Leftrightarrow/.code={\tikzcdset{double line}\pgfsetarrows{tikzcd implies-tikzcd implies}},
+ mapsto/.code={\pgfsetarrows{tikzcd bar-tikzcd to}},
+ mapsfrom/.code={\pgfsetarrows{tikzcd to-tikzcd bar}},
+ Mapsto/.code={\tikzcdset{double line}\pgfsetarrows{tikzcd implies bar-tikzcd implies}},
+ Mapsfrom/.code={\tikzcdset{double line}\pgfsetarrows{tikzcd implies-tikzcd implies bar}},
+ hookrightarrow/.code={\pgfsetarrows{tikzcd right hook-tikzcd to}},
+ hookleftarrow/.code={\pgfsetarrows{tikzcd to-tikzcd left hook}},
+ rightharpoonup/.code={\pgfsetarrows{tikzcd cap-tikzcd left to}},
+ rightharpoondown/.code={\pgfsetarrows{tikzcd cap-tikzcd right to}},
+ leftharpoonup/.code={\pgfsetarrows{tikzcd right to-tikzcd cap}},
+ leftharpoondown/.code={\pgfsetarrows{tikzcd left to-tikzcd cap}},
+ rightarrowtail/.code={\pgfsetarrows{tikzcd to reversed-tikzcd to}},
+ leftarrowtail/.code={\pgfsetarrows{tikzcd to-tikzcd to reversed}},
+ twoheadrightarrow/.code={\pgfsetarrows{tikzcd cap-tikzcd double to}},
+ twoheadleftarrow/.code={\pgfsetarrows{tikzcd double to-tikzcd cap}},
+ no head/.code={\pgfsetarrowsend{tikzcd cap}},
+ dash/.code={\pgfsetarrows{tikzcd cap-tikzcd cap}},
+ dashrightarrow/.code={\tikzcdset{rightarrow,dashed}},
+ dashleftarrow/.code={\tikzcdset{leftarrow,dashed}},
+ equal/.code={\tikzcdset{double line}\pgfsetarrows{tikzcd implies cap-tikzcd implies cap}},
+ equals/.code={\tikzcdset{equal}},
+ rightsquigarrow/.code={\tikzcdset{rightarrow,squiggly}},
+ leftsquigarrow/.code={\tikzcdset{leftarrow,squiggly}},
+ leftrightsquigarrow/.code={\tikzcdset{leftrightarrow,squiggly}},
+ squiggly/.code={%
+ \pgfutil@ifundefined{tikz@library@decorations.pathmorphing@loaded}%
+ {\pgfutil@packageerror{tikz-cd}{You need to say %
+ \string\usetikzlibrary{decorations.pathmorphing} to use squiggly arrows}{}}{}%
+ \pgfkeysalso{
+ /tikz/decorate,
+ /tikz/decoration={
+ zigzag,
+ segment length=9.25\pgflinewidth,
+ amplitude=1.9\pgflinewidth,
+ post=lineto, post length=6\pgflinewidth,
+ pre=lineto, pre length=6\pgflinewidth,
+ #1}}}}
+
+% The `Latin Modern' arrow style
+\pgfkeysdef{/tikz/commutative diagrams/arrow style/Latin Modern}{%
+ \tikzcdset{
+ tikzcd bar/.tip={Bar[width=+0pt 12 .992,line cap=round]},
+ tikzcd left hook/.tip={Hooks[width=+0pt 15,length=+0pt 4.2,arc=190,harpoon,line cap=round]}}}
+
+% The `tikz' arrow style
+\pgfkeysdef{/tikz/commutative diagrams/arrow style/tikz}{%
+ \tikzcdset{
+ tikzcd to/.tip={>},
+ tikzcd bar/.tip={Bar[width=+3pt 4 0.9]},
+ tikzcd left hook/.tip={Hooks[harpoon]},
+ tikzcd double to/.tip={tikzcd to[]tikzcd to}}}
+
+% The `math font' arrow style
+%
+% If your font does not define the command \mapsfrom, do so by saying
+% \def\mapsfrom{\pgfpicture\pgfsetbaseline{+0pt}\pgftransformxscale{-1}\pgftext[base]{$\mapsto$}\endpgfpicture}
+%
+% The method used to guess the correct value of `double distance'
+% inside the `double line' style is not robust at all. If it fails,
+% set
+% \tikzcdset{double line/.append style={double distance=2*rule_thickness}}
+% and find the correct value for `double distance' by trial and error
+% (or measure the distance between the \Rightarrow stems in a font
+% editor).
+%
+\pgfkeysdef{/tikz/commutative diagrams/arrow style/math font}{%
+ \tikzcdset{
+ tikzcd to/.tip={Glyph[glyph math command=rightarrow]},
+ tikzcd cap/.tip={Glyph[glyph math command=leftarrow]},
+ tikzcd to reversed/.tip={Glyph[glyph math command=leftarrowtail]},
+ tikzcd bar/.tip={Glyph[glyph math command=mapsfrom]},
+ tikzcd left hook/.tip={Glyph[glyph math command=hookleftarrow]},
+ tikzcd right hook/.tip={Glyph[glyph math command=hookleftarrow, swap]},
+ tikzcd implies/.tip={Glyph[glyph math command=Rightarrow, glyph length=1.2ex]},
+ tikzcd implies cap/.tip={Glyph[glyph math command=Leftarrow]},
+ tikzcd implies bar/.tip={Glyph[glyph math command=Mapsfrom]},
+ tikzcd double to/.tip={Glyph[glyph math command=twoheadrightarrow, glyph length=1.4ex]},
+ tikzcd left to/.tip={Glyph[glyph math command=rightharpoonup]},
+ tikzcd right to/.tip={Glyph[glyph math command=rightharpoonup,swap]},
+ double line/.append code={\tikzset{double distance={2*(height("$=$")-axis_height-rule_thickness)}}},
+ dashed/.code={\tikzset{dash pattern=on 0.8ex off 0.4ex, dash phase=0.8ex}},
+ squiggly/.default={pre length=1ex, post length=1ex}}}
+
+% Default settings
+\tikzcdset{
+ every arrow/.style={
+ /tikz/draw,
+ /tikz/line width=rule_thickness,
+ /tikz/commutative diagrams/rightarrow},
+ every label/.style={
+ /tikz/auto,
+ /tikz/font=\everymath\expandafter{\the\everymath\scriptstyle},
+ /tikz/inner sep=+0.5ex},
+ every cell/.style={
+ /tikz/shape={asymmetrical rectangle},
+ /tikz/inner xsep=+1ex,
+ /tikz/inner ysep=+0.85ex},
+ every matrix/.style={/tikz/inner sep=+0pt},
+ every diagram/.style={
+ /tikz/commutative diagrams/row sep=normal,
+ /tikz/commutative diagrams/column sep=normal,
+ /tikz/baseline=+0pt},
+ 1-row diagram/.style={/tikz/baseline/.expanded=(\tikzcdmatrixname.base)},
+ math mode=true,
+ center yshift/.initial=axis_height,
+ row sep/huge/.initial=+3.6em,
+ row sep/large/.initial=+2.7em,
+ row sep/normal/.initial=+1.8em,
+ row sep/scriptsize/.initial=+1.35em,
+ row sep/small/.initial=+0.9em,
+ row sep/tiny/.initial=+0.45em,
+ column sep/huge/.initial=+4.8em,
+ column sep/large/.initial=+3.6em,
+ column sep/normal/.initial=+2.4em,
+ column sep/scriptsize/.initial=+1.8em,
+ column sep/small/.initial=+1.2em,
+ column sep/tiny/.initial=+0.6em,
+ crossing over clearance/.initial=+1.5ex,
+ shift left/.default=+0.56ex,
+ shift right/.default=1,
+ background color/.initial=white}
+
+% ConTeXt-specific stuff
+\pgfutil@IfUndefined{starttikzpicture}{}{%
+ \def\starttikzcd{\tikzcd}
+ \def\stoptikzcd{\endtikzcd}
+ \tikzcdset{
+ every matrix/.append code={%
+ \def\NC{\pgfmatrixnextcell}%
+ \def\NR{\pgfmatrixendrow}}}
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-dependency/AUTHORS b/graphics/pgf/contrib/tikz-dependency/AUTHORS
new file mode 100644
index 0000000000..83cca7e46e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/AUTHORS
@@ -0,0 +1 @@
+Daniele Pighin <daniele.pighin@gmail.com>
diff --git a/graphics/pgf/contrib/tikz-dependency/LICENSE b/graphics/pgf/contrib/tikz-dependency/LICENSE
new file mode 100644
index 0000000000..9787aa0cb5
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/LICENSE
@@ -0,0 +1,31 @@
+Licenses for the TikZ-dependency package
+========================================
+
+Different parts of the TikZ-dependency package are distributed
+under different licenses:
+
+1. The code of the package (i.e., tikz-dependency.sty) is
+ dual-license. This means that you can decide which license you
+ wish to use when using the TikZ-dependency package.
+ The two options are:
+
+ a) You can use the GNU Public License, version 2.
+ b) You can use the LaTeX Project Public License, version 1.3c.
+
+2. The original documentation of the package (i.e., the file
+ tikz-dependency-doc.tex) is also dual-license. Again, you can
+ choose between two options:
+
+ a) You can use the GNU Free Documentation License, version 1.2.
+ b) You can use the LaTeX Project Public License, version 1.3c.
+
+The following files are intellectual property of Till Tantau and/or
+Christian Feuersänger:
+
+ - pgfmanual.code.tex
+ - pgfmanual.prettyprinter.code.tex
+ - pgfmanual-en-macros.tex
+ - pgfmanual.pdflinks.code.tex
+
+They follow the same licensing scheme of tikz-dependency-doc.tex,
+but credits should go to the respective authors.
diff --git a/graphics/pgf/contrib/tikz-dependency/README b/graphics/pgf/contrib/tikz-dependency/README
new file mode 100644
index 0000000000..12e1bb07fc
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/README
@@ -0,0 +1,47 @@
+**TikZ-dependency** -- A library to draw dependency graphs
+==========================================================
+
+TikZ-dependency allows you to draw dependency graphs with little or
+no effort. It also comes with a lot of styling facilities, to let you
+personalize the look and feel of the graphs at your liking.
+
+The package has a very easy to learn, high level interface that can be
+used to draw simple dependency trees, complex non projective graphs,
+bubble parses, and in general any kind of graph which is based on a
+sequence of nodes and edges among these.
+
+Read the documentation in
+
+> tikz-dependency-doc.pdf
+
+for installation and usage instructions.
+
+Licensing information is in the file
+
+> LICENSE
+
+Do not hesistate to contact me for comments, bug reports or
+feature requests. Thanks for using tikz-dependency!
+
+Changelog
+---------
+
+* **Version 1.2** (Jul 5, 2012)
+
+ - Added "edge height" to override the behavior of the edge-drawing algorithm and explicitly set
+ the height of an edge
+ - Incorporated patch by Tetsuo Kiso that fixes error in the handling of "edge end offset x"
+
+* **Version 1.1** (Jan 17, 2012)
+
+ - Added the possibility to use simple arcs as edges (keys: "arc edge"/"segmented edge")
+ - Added "edge start x offset" and "edge end x offset" to fine tune edge start/end point position
+ - Added \depstyle to define styles more easily
+ - Added "simple" theme, based on the parse on page 1 of [Nivre and McDonald, ACL-HLT 2008]
+ - Added instructions to draw bubble parses
+ - Fixed bug that would cause groupedges not to be straight under some circumstances
+
+* **Version 1.0** (Nov 26, 2011)
+
+ - First public release
+
diff --git a/graphics/pgf/contrib/tikz-dependency/VERSION b/graphics/pgf/contrib/tikz-dependency/VERSION
new file mode 100644
index 0000000000..5625e59da8
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/VERSION
@@ -0,0 +1 @@
+1.2
diff --git a/graphics/pgf/contrib/tikz-dependency/pgfmanual-en-macros.tex b/graphics/pgf/contrib/tikz-dependency/pgfmanual-en-macros.tex
new file mode 100644
index 0000000000..fb85bcd885
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/pgfmanual-en-macros.tex
@@ -0,0 +1,1209 @@
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+% $Header: /cvsroot/pgf/pgf/doc/generic/pgf/macros/pgfmanual-en-macros.tex,v 1.45 2009/11/15 13:13:24 ludewich Exp $
+
+
+
+\providecommand\href[2]{\texttt{#1}}
+\providecommand\hypertarget[2]{\texttt{#1}}
+\providecommand\hyperlink[2]{\texttt{#1}}
+
+
+\colorlet{examplefill}{yellow!80!black}
+\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8}
+\definecolor{codebackground}{rgb}{0.8,0.8,1}
+
+\newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist}
+\newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt\item\strut{#1}\par\topsep=0pt}
+\newcommand\pgfmanualbody{\parskip3pt}
+
+
+
+\newenvironment{pgflayout}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\texttt{\string\pgfpagesuselayout\char`\{\declare{#1}\char`\}}\oarg{options}}
+ \index{#1@\protect\texttt{#1} layout}%
+ \index{Page layouts!#1@\protect\texttt{#1}}%
+ \pgfmanualpdflabel{#1}{}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{command}[1]{
+ \begin{pgfmanualentry}
+ \extractcommand#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{commandlist}[1]{%
+ \begin{pgfmanualentry}
+ \foreach \xx in {#1} {%
+ \expandafter\extractcommand\xx\@@
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+
+% \begin{internallist}[register]{\pgf@xa}
+% \end{internallist}
+%
+% \begin{internallist}[register]{\pgf@xa,\pgf@xb}
+% \end{internallist}
+\newenvironment{internallist}[2][register]{%
+ \begin{pgfmanualentry}
+ \foreach \xx in {#2} {%
+ \expandafter\extractinternalcommand\expandafter{\xx}{#1}%
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+\def\extractinternalcommand#1#2{%
+ \pgfmanualentryheadline{Internal #2 \declare{\texttt{\string#1}}}%
+ \removeats{#1}%
+ \index{Internals!\strippedat @\protect\myprintocmmand{\strippedat}}%
+ \index{\strippedat @\protect\myprintocmmand{\strippedat}}%
+ \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+}
+
+%% MW: START MATH MACROS
+\def\mvar#1{{\ifmmode\textrm{\textit{#1}}\else\rmfamily\textit{#1}\fi}}
+
+\makeatletter
+
+\def\extractmathfunctionname#1{\extractmathfunctionname@#1(,)\tmpa\tmpb}
+\def\extractmathfunctionname@#1(#2)#3\tmpb{\def\mathname{#1}}
+
+\makeatother
+
+\newenvironment{math-function}[1]{
+ \def\mathdefaultname{#1}
+ \extractmathfunctionname{#1}
+ \edef\mathurl{{math:\mathname}}\expandafter\hypertarget\expandafter{\mathurl}{}%
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\texttt{#1}}%
+ \index{\mathname @\protect\texttt{\mathname} math function}%
+ \index{Math functions!\mathname @\protect\texttt{\mathname}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\pgfmanualemptytext{}
+\def\pgfmanualvbarvbar{\char`\|\char`\|}
+
+\newenvironment{math-operator}[4][]{%
+ \begin{pgfmanualentry}
+ \csname math#3operator\endcsname{#2}{#4}
+ \def\mathtest{#4}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \def\mathtype{(#3 operator)}
+ \else%
+ \def\mathtype{(#3 operator; uses the \texttt{#4} function)}
+ \fi%
+ \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
+ \def\mathtest{#1}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \index{#2@\protect\texttt{#2} #3 math operator}%
+ \index{Math operators!#2@\protect\texttt{#2}}%
+ \fi%
+ \pgfmanualbody
+}
+{\end{pgfmanualentry}}
+
+\newenvironment{math-operators}[5][]{%
+ \begin{pgfmanualentry}
+ \csname math#4operator\endcsname{#2}{#3}
+ \def\mathtest{#5}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \def\mathtype{(#4 operators)}
+ \else%
+ \def\mathtype{(#4 operators; use the \texttt{#5} function)}
+ \fi%
+ \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
+ \def\mathtest{#1}%
+ \ifx\mathtest\pgfmanualemptytext%
+ \index{#2#3@\protect\texttt{#2\protect\ #3} #4 math operators}%
+ \index{Math operators!#2#3@\protect\texttt{#2\protect\ #3}}%
+ \fi%
+ \pgfmanualbody
+}
+{\end{pgfmanualentry}}
+
+\def\mathinfixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}%
+ \def\mathexample{\mvar{x}\space\texttt{#1}\space\mvar{y}}%
+}
+
+\def\mathprefixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}%
+ \def\mathexample{\texttt{#1}\mvar{x}}%
+}
+
+\def\mathpostfixoperator#1#2{%
+ \def\mathoperator{\texttt{#1}}
+ \def\mathexample{\mvar{x}\texttt{#1}}%
+}
+
+\def\mathgroupoperator#1#2{%
+ \def\mathoperator{\texttt{#1\ #2}}%
+ \def\mathexample{\texttt{#1}\mvar{x}\texttt{#2}}%
+}
+
+\expandafter\let\csname matharray accessoperator\endcsname=\mathgroupoperator
+\expandafter\let\csname matharrayoperator\endcsname=\mathgroupoperator
+
+\def\mathconditionaloperator#1#2{%
+ \def\mathoperator{#1\space#2}
+ \def\mathexample{\mvar{x}\ \texttt{#1}\ \mvar{y}\ {\texttt{#2}}\ \mvar{z}}
+}
+
+\newcommand\mathcommand[1][\mathdefaultname]{%
+ \expandafter\makemathcommand#1(\empty)\stop%
+ \expandafter\extractcommand\mathcommandname\@@%
+ \medskip
+}
+\makeatletter
+
+\def\makemathcommand#1(#2)#3\stop{%
+ \expandafter\def\expandafter\mathcommandname\expandafter{\csname pgfmath#1\endcsname}%
+ \ifx#2\empty%
+ \else%
+ \@makemathcommand#2,\stop,
+ \fi}
+\def\@makemathcommand#1,{%
+ \ifx#1\stop%
+ \else%
+ \expandafter\def\expandafter\mathcommandname\expandafter{\mathcommandname{\ttfamily\char`\{#1\char`\}}}%
+ \expandafter\@makemathcommand%
+ \fi}
+\makeatother
+
+\def\calcname{\textsc{calc}}
+%% MW: END MATH MACROS
+
+
+\def\extractcommand#1#2\@@{%
+ \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}%
+ \removeats{#1}%
+ \index{\strippedat @\protect\myprintocmmand{\strippedat}}
+ \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+}
+
+
+% \begin{environment}{{name}\marg{arguments}}
+\renewenvironment{environment}[1]{
+ \begin{pgfmanualentry}
+ \extractenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractenvironement#1#2\@@{%
+ \pgfmanualentryheadline{{\ttfamily\char`\\begin\char`\{\declare{#1}\char`\}}#2}%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\end\char`\{\declare{#1}\char`\}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+}
+
+
+\newenvironment{plainenvironment}[1]{
+ \begin{pgfmanualentry}
+ \extractplainenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractplainenvironement#1#2\@@{%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\#1}}#2}%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\end#1}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}%
+}
+
+
+\newenvironment{contextenvironment}[1]{
+ \begin{pgfmanualentry}
+ \extractcontextenvironement#1\@@
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\extractcontextenvironement#1#2\@@{%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\start#1}}#2}%
+ \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
+ \pgfmanualentryheadline{{\ttfamily\declare{\char`\\stop#1}}}%
+ \index{#1@\protect\texttt{#1} environment}%
+ \index{Environments!#1@\protect\texttt{#1}}}
+
+
+\newenvironment{shape}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{Shape {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} shape}%
+ \index{Shapes!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{shading}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{Shading {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} shading}%
+ \index{Shadings!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{dataformat}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{Format {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} format}%
+ \index{Formats!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{handler}[1]{
+ \begin{pgfmanualentry}
+ \extracthandler#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\gobble#1{}
+\def\extracthandler#1#2\@nil{%
+ \pgfmanualentryheadline{Key handler \meta{key}{\ttfamily/\declare{#1}}#2}%
+ \index{\gobble#1@\protect\texttt{#1} handler}%
+ \index{Key handlers!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{/handlers/#1}%
+}
+
+
+\makeatletter
+
+
+\newenvironment{stylekey}[1]{
+ \begin{pgfmanualentry}
+ \def\extrakeytext{style, }
+ \extractkey#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\def\choicesep{$\vert$}%
+\def\choicearg#1{\texttt{#1}}
+
+\newif\iffirstchoice
+
+% \mchoice{choice1,choice2,choice3}
+\newcommand\mchoice[1]{%
+ \begingroup
+ \firstchoicetrue
+ \foreach \mchoice@ in {#1} {%
+ \iffirstchoice
+ \global\firstchoicefalse
+ \else
+ \choicesep
+ \fi
+ \choicearg{\mchoice@}%
+ }%
+ \endgroup
+}%
+
+% \begin{key}{/path/x=value}
+% \begin{key}{/path/x=value (initially XXX)}
+% \begin{key}{/path/x=value (default XXX)}
+\newenvironment{key}[1]{
+ \begin{pgfmanualentry}
+ \def\extrakeytext{}
+ %\def\altpath{\emph{\color{gray}or}}%
+ \extractkey#1\@nil%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+% \insertpathifneeded{a key}{/pgf} -> assign mykey={/pgf/a key}
+% \insertpathifneeded{/tikz/a key}{/pgf} -> assign mykey={/tikz/a key}
+%
+% #1: the key
+% #2: a default path (or empty)
+\def\insertpathifneeded#1#2{%
+ \def\insertpathifneeded@@{#2}%
+ \ifx\insertpathifneeded@@\empty
+ \def\mykey{#1}%
+ \else
+ \insertpathifneeded@#2\@nil
+ \ifpgfutil@in@
+ \def\mykey{#2/#1}%
+ \else
+ \def\mykey{#1}%
+ \fi
+ \fi
+}%
+\def\insertpathifneeded@#1#2\@nil{%
+ \def\insertpathifneeded@@{#1}%
+ \def\insertpathifneeded@@@{/}%
+ \ifx\insertpathifneeded@@\insertpathifneeded@@@
+ \pgfutil@in@true
+ \else
+ \pgfutil@in@false
+ \fi
+}%
+
+% \begin{keylist}[default path]
+% {/path/option 1=value,/path/option 2=value2}
+% \end{keylist}
+\newenvironment{keylist}[2][]{%
+ \begin{pgfmanualentry}
+ \def\extrakeytext{}%
+ \foreach \xx in {#2} {%
+ \expandafter\insertpathifneeded\expandafter{\xx}{#1}%
+ \expandafter\extractkey\mykey\@nil%
+ }%
+ \pgfmanualbody
+}{%
+ \end{pgfmanualentry}
+}%
+
+\def\extractkey#1\@nil{%
+ \pgfutil@in@={#1}%
+ \ifpgfutil@in@%
+ \extractkeyequal#1\@nil
+ \else%
+ \pgfutil@in@{(initial}{#1}%
+ \ifpgfutil@in@%
+ \extractequalinitial#1\@nil%
+ \else
+ \pgfmanualentryheadline{{\ttfamily\declare{#1}}\hfill(\extrakeytext no value)}%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \def\myname{}%
+ \firsttimetrue%
+ \decompose#1/\nil%
+ \fi
+ \fi%
+}
+
+\def\extractkeyequal#1=#2\@nil{%
+ \pgfutil@in@{(default}{#2}%
+ \ifpgfutil@in@%
+ \extractdefault{#1}#2\@nil%
+ \else%
+ \pgfutil@in@{(initial}{#2}%
+ \ifpgfutil@in@%
+ \extractinitial{#1}#2\@nil%
+ \else
+ \pgfmanualentryheadline{{\ttfamily\declare{#1}=}#2\hfill(\extrakeytext no default)}%
+ \fi%
+ \fi%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \def\myname{}%
+ \firsttimetrue%
+ \decompose#1/\nil%
+}
+
+\def\extractdefault#1#2(default #3)\@nil{%
+ \pgfmanualentryheadline{{\ttfamily\declare{#1}\opt{=}}\opt{#2}\hfill (\extrakeytext default {\ttfamily#3})}%
+}
+
+\def\extractinitial#1#2(initially #3)\@nil{%
+ \pgfmanualentryheadline{{\ttfamily\declare{#1}=}#2\hfill (\extrakeytext no default, initially {\ttfamily#3})}%
+}
+
+\def\extractequalinitial#1 (initially #2)\@nil{%
+ \pgfmanualentryheadline{{\ttfamily\declare{#1}}\hfill (\extrakeytext initially {\ttfamily#2})}%
+ \def\mykey{#1}%
+ \def\mypath{}%
+ \def\myname{}%
+ \firsttimetrue%
+ \decompose#1/\nil%
+}
+
+% Introduces a key alias '/#1/<name of current key>'
+% to be used inside of \begin{key} ... \end{key}
+\def\keyalias#1{\vspace{-3pt}\item{\small alias {\ttfamily/#1/\myname}}\vspace{-2pt}\par
+ \pgfmanualpdflabel{/#1/\myname}{}%
+}
+
+\newif\iffirsttime
+
+\makeatother
+
+\def\decompose/#1/#2\nil{%
+ \def\test{#2}%
+ \ifx\test\empty%
+ % aha.
+ \index{#1@\protect\texttt{#1} key}%
+ \index{\mypath#1@\protect\texttt{#1}}%
+ \def\myname{#1}%
+ \else%
+ \iffirsttime
+ \begingroup
+ % also make a pdf link anchor with full key path.
+ \def\hyperlabelwithoutslash##1/\nil{%
+ \pgfmanualpdflabel{##1}{}%
+ }%
+ \hyperlabelwithoutslash/#1/#2\nil
+ \endgroup
+ \def\mypath{#1@\protect\texttt{/#1/}!}%
+ \firsttimefalse
+ \else
+ \expandafter\def\expandafter\mypath\expandafter{\mypath#1@\protect\texttt{#1/}!}%
+ \fi
+ \def\firsttime{}
+ \decompose/#2\nil%
+ \fi%
+}
+
+\def\indexkey#1{%
+ \def\mypath{}%
+ \decompose#1/\nil%
+}
+
+\newenvironment{predefinedmethod}[1]{
+ \begin{pgfmanualentry}
+ \extractpredefinedmethod#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractpredefinedmethod#1(#2)\@nil{%
+ \pgfmanualentryheadline{Method \declare{\ttfamily #1}\texttt(#2\texttt) \hfill(predefined for all classes)}
+ \index{#1@\protect\texttt{#1} method}%
+ \index{Methods!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+}
+
+
+\newenvironment{ooclass}[1]{
+ \begin{pgfmanualentry}
+ \def\currentclass{#1}
+ \pgfmanualentryheadline{Class \declare{\texttt{#1}}}
+ \index{#1@\protect\texttt{#1} class}%
+ \index{Class #1@Class \protect\texttt{#1}}%
+ \index{Classes!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{method}[1]{
+ \begin{pgfmanualentry}
+ \extractmethod#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractmethod#1(#2)\@nil{%
+ \def\test{#1}
+ \ifx\test\currentclass
+ \pgfmanualentryheadline{Constructor \declare{\ttfamily #1}\texttt(#2\texttt)}
+ \else
+ \pgfmanualentryheadline{Method \declare{\ttfamily #1}\texttt(#2\texttt)}
+ \fi
+ \index{#1@\protect\texttt{#1} method}%
+ \index{Methods!#1@\protect\texttt{#1}}
+ \index{Class \currentclass!#1@\protect\texttt{#1}}%
+ \pgfmanualpdflabel{#1}{}%
+}
+
+\newenvironment{attribute}[1]{
+ \begin{pgfmanualentry}
+ \extractattribute#1\@nil
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\def\extractattribute#1=#2;\@nil{%
+ \def\test{#2}%
+ \ifx\test\@empty
+ \pgfmanualentryheadline{Private attribute \declare{\ttfamily #1} \hfill (initially empty)}
+ \else
+ \pgfmanualentryheadline{Private attribute \declare{\ttfamily #1} \hfill (initially {\ttfamily #2})}
+ \fi
+ \index{#1@\protect\texttt{#1} attribute}%
+ \index{Attributes!#1@\protect\texttt{#1}}
+ \index{Class \currentclass!#1@\protect\texttt{#1}}%
+ \pgfmanualpdflabel{#1}{}%
+}
+
+
+
+\newenvironment{predefinednode}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{Predefined node {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} node}%
+ \index{Predefined node!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{coordinatesystem}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{Coordinate system {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} coordinate system}%
+ \index{Coordinate systems!#1@\protect\texttt{#1}}
+ \pgfmanualpdflabel{#1}{}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{snake}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{Snake {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} snake}%
+ \index{Snakes!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{decoration}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{Decoration {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} decoration}%
+ \index{Decorations!#1@\protect\texttt{#1}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\def\pgfmanualbar{\char`\|}
+\makeatletter
+\newenvironment{pathoperation}[3][]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textcolor{gray}{{\ttfamily\char`\\path}\
+ \ \dots}
+ \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
+ \def\pgfmanualtest{#1}%
+ \ifx\pgfmanualtest\@empty%
+ \index{#2@\protect\texttt{#2} path operation}%
+ \index{Path operations!#2@\protect\texttt{#2}}%
+ \pgfmanualpdflabel{#2}{}%
+ \fi%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\newenvironment{datavisualizationoperation}[3][]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\textcolor{gray}{{\ttfamily\char`\\datavisualization}\
+ \ \dots}
+ \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
+ \def\pgfmanualtest{#1}%
+ \ifx\pgfmanualtest\@empty%
+ \index{#2@\protect\texttt{#2} (data visualization)}%
+ \index{Data visualization!#2@\protect\texttt{#2}}%
+ \pgfmanualpdflabel{#2}{}%
+ \fi%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+\makeatother
+
+\def\extractcommand#1#2\@@{%
+ \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}%
+ \removeats{#1}%
+ \index{\strippedat @\protect\myprintocmmand{\strippedat}}
+ \pgfmanualpdflabel{\textbackslash\strippedat}{}%
+}
+
+\def\doublebs{\texttt{\char`\\\char`\\}}
+
+
+\newenvironment{package}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepackage\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX}}
+ \index{#1@\protect\texttt{#1} package}%
+ \index{Packages and files!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\input \declare{#1}.tex\space\space\space \char`\%\space\space plain \TeX}}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usemodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t}}
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{pgfmodule}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}}
+ \index{#1@\protect\texttt{#1} module}%
+ \index{Modules!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}}
+ \pgfmanualbody
+ \pgfmanualpdflabel{#1}{}%
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{pgflibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space and pure pgf}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space Con\TeX t\space and pure pgf}}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space
+ \char`\%\space\space \LaTeX\space and plain \TeX\space when using \tikzname}}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space
+ \char`\%\space\space Con\TeX t\space when using \tikzname}}
+ \pgfmanualbody
+ \pgfmanualpdflabel{#1}{}%
+}
+{
+ \end{pgfmanualentry}
+}
+
+\newenvironment{tikzlibrary}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space \LaTeX\space and plain \TeX}}
+ \index{#1@\protect\texttt{#1} library}%
+ \index{Libraries!#1@\protect\texttt{#1}}%
+ \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}}
+ \pgfmanualbody
+ \pgfmanualpdflabel{#1}{}%
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+
+\newenvironment{filedescription}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{File {\ttfamily\declare{#1}}}%
+ \index{#1@\protect\texttt{#1} file}%
+ \index{Packages and files!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+\newenvironment{packageoption}[1]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{{\ttfamily\char`\\usepackage[\declare{#1}]\char`\{pgf\char`\}}}
+ \index{#1@\protect\texttt{#1} package option}%
+ \index{Package options for \textsc{pgf}!#1@\protect\texttt{#1}}%
+ \pgfmanualbody
+}
+{
+ \end{pgfmanualentry}
+}
+
+
+
+\newcommand\opt[1]{{\color{black!50!green}#1}}
+\newcommand\ooarg[1]{{\ttfamily[}\meta{#1}{\ttfamily]}}
+
+\def\opt{\afterassignment\pgfmanualopt\let\next=}
+\def\pgfmanualopt{\ifx\next\bgroup\bgroup\color{black!50!green}\else{\color{black!50!green}\next}\fi}
+
+
+
+\def\beamer{\textsc{beamer}}
+\def\pdf{\textsc{pdf}}
+\def\eps{\texttt{eps}}
+\def\pgfname{\textsc{pgf}}
+\def\tikzname{Ti\emph{k}Z}
+\def\pstricks{\textsc{pstricks}}
+\def\prosper{\textsc{prosper}}
+\def\seminar{\textsc{seminar}}
+\def\texpower{\textsc{texpower}}
+\def\foils{\textsc{foils}}
+
+{
+ \makeatletter
+ \global\let\myempty=\@empty
+ \global\let\mygobble=\@gobble
+ \catcode`\@=12
+ \gdef\getridofats#1@#2\relax{%
+ \def\getridtest{#2}%
+ \ifx\getridtest\myempty%
+ \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1}
+ \else%
+ \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1\protect\printanat}
+ \getridofats#2\relax%
+ \fi%
+ }
+
+ \gdef\removeats#1{%
+ \let\strippedat\myempty%
+ \edef\strippedtext{\stripcommand#1}%
+ \expandafter\getridofats\strippedtext @\relax%
+ }
+
+ \gdef\stripcommand#1{\expandafter\mygobble\string#1}
+}
+
+\def\printanat{\char`\@}
+
+\def\declare{\afterassignment\pgfmanualdeclare\let\next=}
+\def\pgfmanualdeclare{\ifx\next\bgroup\bgroup\color{red!75!black}\else{\color{red!75!black}\next}\fi}
+
+
+\let\textoken=\command
+\let\endtextoken=\endcommand
+
+\def\myprintocmmand#1{\texttt{\char`\\#1}}
+
+\def\example{\par\smallskip\noindent\textit{Example: }}
+\def\themeauthor{\par\smallskip\noindent\textit{Theme author: }}
+
+
+\def\indexoption#1{%
+ \index{#1@\protect\texttt{#1} option}%
+ \index{Graphic options and styles!#1@\protect\texttt{#1}}%
+}
+
+\def\itemcalendaroption#1{\item \declare{\texttt{#1}}%
+ \index{#1@\protect\texttt{#1} date test}%
+ \index{Date tests!#1@\protect\texttt{#1}}%
+}
+
+
+
+\def\class#1{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}%
+\extractclass#1@\par\topsep=0pt}
+\def\endclass{\endlist}
+\def\extractclass#1#2@{%
+\item{{{\ttfamily\char`\\documentclass}#2{\ttfamily\char`\{\declare{#1}\char`\}}}}%
+ \index{#1@\protect\texttt{#1} class}%
+ \index{Classes!#1@\protect\texttt{#1}}}
+
+\def\partname{Part}
+
+\makeatletter
+\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index}
+ %This index contains pointers to all the commands and configuration keys
+ %described somewhere in the documentation. In addition, it contains some
+ %keywords that, hopefully, will make it easier to find what you are looking
+ %for.
+ %%index should also contain carefully selected keywords. This index is
+ %%not a good index.
+ %\bigskip
+}
+\c@IndexColumns=2
+ \def\theindex{\@restonecoltrue
+ \columnseprule \z@ \columnsep 29\p@
+ \twocolumn[\index@prologue]%
+ \parindent -30pt
+ \columnsep 15pt
+ \parskip 0pt plus 1pt
+ \leftskip 30pt
+ \rightskip 0pt plus 2cm
+ \small
+ \def\@idxitem{\par}%
+ \let\item\@idxitem \ignorespaces}
+ \def\endtheindex{\onecolumn}
+\def\noindexing{\let\index=\@gobble}
+
+
+
+\newcommand\symarrow[1]{
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}
+ \texttt{#1}& yields thick
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+\newcommand\symarrowdouble[1]{
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}
+ \texttt{#1}& yields thick
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+ and thin
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}, double
+ \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and
+ \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\sarrow[2]{
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}
+ \index{#2@\protect\texttt{#2} arrow tip}%
+ \index{Arrow tips!#2@\protect\texttt{#2}}
+ \texttt{#1-#2}& yields thick
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\sarrowdouble[2]{
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}
+ \index{#2@\protect\texttt{#2} arrow tip}%
+ \index{Arrow tips!#2@\protect\texttt{#2}}
+ \texttt{#1-#2}& yields thick
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and thin
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}, double
+ \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture} and
+ \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
+ \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
+ \end{tikzpicture}
+}
+
+\newcommand\carrow[1]{
+ \index{#1@\protect\texttt{#1} arrow tip}%
+ \index{Arrow tips!#1@\protect\texttt{#1}}
+ \texttt{#1}& yields for line width 1ex
+ \begin{tikzpicture}[arrows={#1-#1},line width=1ex,baseline]
+ \useasboundingbox (0pt,-0.5ex) rectangle (1.5cm,2ex);
+ \draw (0pt,.5ex) -- (1.5cm,.5ex);
+ \end{tikzpicture}
+}
+\def\myvbar{\char`\|}
+\newcommand\plotmarkentry[1]{%
+ \index{#1@\protect\texttt{#1} plot mark}%
+ \index{Plot marks!#1@\protect\texttt{#1}}
+ \texttt{\char`\\pgfuseplotmark\char`\{\declare{#1}\char`\}} &
+ \tikz\draw[color=black!25] plot[mark=#1,mark options={fill=examplefill,draw=black}] coordinates{(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
+}
+\newcommand\plotmarkentrytikz[1]{%
+ \index{#1@\protect\texttt{#1} plot mark}%
+ \index{Plot marks!#1@\protect\texttt{#1}}
+ \texttt{mark=\declare{#1}} & \tikz\draw[color=black!25]
+ plot[mark=#1,mark options={fill=examplefill,draw=black}]
+ coordinates {(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
+}
+
+
+
+\ifx\scantokens\@undefined
+ \PackageError{pgfmanual-macros}{You need to use extended latex
+ (elatex) or (pdfelatex) to process this document}{}
+\fi
+
+\begingroup
+\catcode`|=0
+\catcode`[= 1
+\catcode`]=2
+\catcode`\{=12
+\catcode `\}=12
+\catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]]
+|endgroup
+
+% define \returntospace.
+%
+% It should define NEWLINE as {}, spaces and tabs as \space.
+\begingroup
+\catcode`\^=7
+\catcode`\^^M=13
+\catcode`\^^I=13
+\catcode`\ =13%
+\gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^I=13\def^^I{\space}}
+\gdef\showreturn{\show^^M}
+\endgroup
+
+\begingroup
+\catcode`\%=13
+\catcode`\^^M=13
+\gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}}
+\gdef\@gobble@till@return#1^^M{}
+\gdef\@gobble@till@return@ignore#1^^M{\ignorespaces}
+\gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}}
+\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par}
+\endgroup
+
+% Define tab-implementation functions
+% \codeexample@tabinit@replacementchars@
+% and
+% \codeexample@tabinit@catcode@
+%
+% They should ONLY be used in case that tab replacement is active.
+%
+% This here is merely a preparation step.
+%
+% Idea:
+% \codeexample@tabinit@catcode@ will make TAB active
+% and
+% \codeexample@tabinit@replacementchars@ will insert as many spaces as
+% /codeexample/tabsize contains.
+{
+\catcode`\^^I=13
+% ATTENTION: do NOT use tabs in these definitions!!
+\gdef\codeexample@tabinit@replacementchars@{%
+ \begingroup
+ \count0=\pgfkeysvalueof{/codeexample/tabsize}\relax
+ \toks0={}%
+ \loop
+ \ifnum\count0>0
+ \advance\count0 by-1
+ \toks0=\expandafter{\the\toks0\ }%
+ \repeat
+ \xdef\codeexample@tabinit@replacementchars@@{\the\toks0}%
+ \endgroup
+ \let^^I=\codeexample@tabinit@replacementchars@@
+}%
+\gdef\codeexample@tabinit@catcode@{\catcode`\^^I=13}%
+}%
+
+% Called after any options have been set. It assigns
+% \codeexample@tabinit@catcode
+% and
+% \codeexample@tabinit@replacementchars
+% which are used inside of
+%\begin{codeexample}
+% ...
+%\end{codeexample}
+%
+% \codeexample@tabinit@catcode is either \relax or it makes tab
+% active.
+%
+% \codeexample@tabinit@replacementchars is either \relax or it inserts
+% a proper replacement sequence for tabs (as many spaces as
+% configured)
+\def\codeexample@tabinit{%
+ \ifnum\pgfkeysvalueof{/codeexample/tabsize}=0\relax
+ \let\codeexample@tabinit@replacementchars=\relax
+ \let\codeexample@tabinit@catcode=\relax
+ \else
+ \let\codeexample@tabinit@catcode=\codeexample@tabinit@catcode@
+ \let\codeexample@tabinit@replacementchars=\codeexample@tabinit@replacementchars@
+ \fi
+}
+
+\pgfqkeys{/codeexample}{%
+ width/.code= {\setlength\codeexamplewidth{#1}},
+ graphic/.code= {\colorlet{graphicbackground}{#1}},
+ code/.code= {\colorlet{codebackground}{#1}},
+ execute code/.is if=code@execute,
+ code only/.code= {\code@executefalse},
+ pre/.store in=\code@pre,
+ post/.store in=\code@post,
+ % #1 is the *complete* environment contents as it shall be
+ % typeset. In particular, the catcodes are NOT the normal ones.
+ typeset listing/.code= {#1},
+ render instead/.store in=\code@render,
+ vbox/.code= {\def\code@pre{\vbox\bgroup\setlength{\hsize}{\linewidth-6pt}}\def\code@post{\egroup}},
+ ignorespaces/.code= {\let\@gobble@till@return=\@gobble@till@return@ignore},
+ leave comments/.code= {\def\code@catcode@hook{\catcode`\%=12}\let\commenthandler=\relax\let\typesetcomment=\relax},
+ tabsize/.initial=0,% FIXME : this here is merely used for indentation. It is just a TAB REPLACEMENT.
+ every codeexample/.style={width=4cm+7pt},
+}
+
+\let\code@pre\pgfutil@empty
+\let\code@post\pgfutil@empty
+\let\code@render\pgfutil@empty
+\def\code@catcode@hook{}
+
+\newdimen\codeexamplewidth
+\newif\ifcode@execute
+\newbox\codeexamplebox
+\def\codeexample[#1]{%
+ \begingroup%
+ \code@executetrue
+ \pgfqkeys{/codeexample}{every codeexample,#1}%
+ \codeexample@tabinit% assigns \codeexample@tabinit@[catcode,replacementchars]
+ \parindent0pt
+ \begingroup%
+ \par%
+ \medskip%
+ \let\do\@makeother%
+ \dospecials%
+ \obeylines%
+ \@vobeyspaces%
+ \catcode`\%=13%
+ \catcode`\^^M=13%
+ \code@catcode@hook%
+ \codeexample@tabinit@catcode
+ \relax%
+ \find@example}
+\def\endofcodeexample#1{%
+ \endgroup%
+ \ifcode@execute%
+ \setbox\codeexamplebox=\hbox{%
+ \ifx\code@render\pgfutil@empty%
+ {%
+ {%
+ \returntospace%
+ \commenthandler%
+ \xdef\code@temp{#1}% removes returns and comments
+ }%
+ \catcode`\^^M=9%
+ \colorbox{graphicbackground}{\color{black}\ignorespaces%
+ \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}%
+ }%
+ \else%
+ \colorbox{graphicbackground}{\color{black}\ignorespaces%
+ \code@render}%
+ \fi%
+ }%
+ \ifdim\wd\codeexamplebox>\codeexamplewidth%
+ \def\code@start{\par}%
+ \def\code@flushstart{}\def\code@flushend{}%
+ \def\code@mid{\parskip2pt\par\noindent}%
+ \def\code@width{\linewidth-6pt}%
+ \def\code@end{}%
+ \else%
+ \def\code@start{%
+ \linewidth=\textwidth%
+ \parshape \@ne 0pt \linewidth
+ \leavevmode%
+ \hbox\bgroup}%
+ \def\code@flushstart{\hfill}%
+ \def\code@flushend{\hbox{}}%
+ \def\code@mid{\hskip6pt}%
+ \def\code@width{\linewidth-12pt-\codeexamplewidth}%
+ \def\code@end{\egroup}%
+ \fi%
+ \code@start%
+ \noindent%
+ \begin{minipage}[t]{\codeexamplewidth}\raggedright
+ \hrule width0pt%
+ \footnotesize\vskip-1em%
+ \code@flushstart\box\codeexamplebox\code@flushend%
+ \vskip-1ex
+ \leavevmode%
+ \end{minipage}%
+ \else%
+ \def\code@mid{\par}
+ \def\code@width{\linewidth-6pt}
+ \def\code@end{}
+ \fi%
+ \code@mid%
+ \colorbox{codebackground}{%
+ \begin{minipage}[t]{\code@width}%
+ {%
+ \let\do\@makeother
+ \dospecials
+ \frenchspacing\@vobeyspaces
+ \normalfont\ttfamily\footnotesize
+ \typesetcomment%
+ \codeexample@tabinit@replacementchars
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi}%
+ \obeylines
+ \everypar \expandafter{\the\everypar \unpenalty}%
+ \pgfkeysvalueof{/codeexample/typeset listing/.@cmd}{#1}\pgfeov
+ }
+ \end{minipage}}%
+ \code@end%
+ \par%
+ \medskip
+ \end{codeexample}
+}
+
+\def\endcodeexample{\endgroup}
+
+
+\makeatother
+
+\usepackage{pgfmanual}
+
+\makeatletter
+% \pgfautoxrefs will be defined by 'make dist'
+\pgfutil@ifundefined{pgfautoxrefs}{%
+ \def\pgfmanualpdflabel#1#2{#2}% NO-OP
+ \def\pgfmanualpdfref#1#2{#2}%
+ \pgfkeys{
+ /pdflinks/codeexample links=false,% DISABLED.
+ }%
+}{}
+\makeatother
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "beameruserguide"
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-dependency/pgfmanual.code.tex b/graphics/pgf/contrib/tikz-dependency/pgfmanual.code.tex
new file mode 100644
index 0000000000..0160878cb9
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/pgfmanual.code.tex
@@ -0,0 +1,65 @@
+% Copyright 2009 by Till Tantau and Christian Feuersänger
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\input pgfmanual.prettyprinter.code.tex
+\input pgfmanual.pdflinks.code.tex
+
+% TODO for auto xrefs:
+% 1. check the already identified labels, preferrably using
+% /pdflinks/show labels=true
+% and the image externalization debug mode (see pgfmanual-en-main.tex)
+% (to strip almost all images away)
+%
+% 2. Insert '\declareandlabel' in the document whenever something has been
+% defined in the text, so it should get a pdf anchor (see
+% pgfmanual.pdflinks.code.tex )
+%
+% 2.1 perhaps insert \pgfmanualpdflabel{<label>}{} where needed.
+%
+% 3. Verify that the |...| commands occuring in situations where catcodes can't
+% be changed (footnotes or macro arguments) work as expected.
+%
+% 4. Consider telling the pretty printer that several control sequences
+% have arguments which are options (see below for the predefined list).
+% This may apply to \pgfpageslogicalpageoptions or so.
+%
+% 5. @Christian: consider extensions of the parser such that it identifies path commands (at least partially)
+%
+%
+
+\def\pgfmanual@warning#1{\immediate\write16{! Package pgfmanual Warning: #1}}%
+
+
+\pgfkeys{
+ % set this to 'false' to disable auto reference generation.
+ % However, a little bit runtime overhead will still remain
+ % (and the \pgfmanualpdflabel commands will still be used)
+ /pdflinks/codeexample links=true,
+ %
+ /codeexample/prettyprint/cs arguments/tikzset/.initial=1,
+ /codeexample/prettyprint/cs/tikzset/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualprettyprintpgfkeys{#2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/usetikzlibrary/.initial=1,
+ /codeexample/prettyprint/cs/usetikzlibrary/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualpdfref{#2}{#2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/usepgflibrary/.initial=1,
+ /codeexample/prettyprint/cs/usepgflibrary/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualpdfref{#2}{#2}\pgfmanualclosebrace},
+ %
+ %
+ %
+ % whenever an unqualified key is found, the following key prefix
+ % list is tried to find a match.
+ /pdflinks/search key prefixes in={/tikz/,/pgf/,/depgraph/},
+ %
+ % the link prefix written to the pdf file:
+ /pdflinks/internal link prefix=pgf,
+ %
+ /pdflinks/warnings=false,
+ % for debugging:
+ /pdflinks/show labels=false,
+}%
+
diff --git a/graphics/pgf/contrib/tikz-dependency/pgfmanual.pdflinks.code.tex b/graphics/pgf/contrib/tikz-dependency/pgfmanual.pdflinks.code.tex
new file mode 100644
index 0000000000..e507d30e85
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/pgfmanual.pdflinks.code.tex
@@ -0,0 +1,414 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008/2009 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% This file provides an interface to the
+% pgfmanual.prettyprint.code.tex thing -- it allows to
+% *generate pdf crossrefs inside of codeexamples automatically*
+% without any user input.
+%
+% Thus, you write
+% \begin{codeexample}[]
+% \begin{tikzpicture}[options]
+% \end{tikzpicture}
+% \end{codeexample}
+% and pdf cross references to the definitions of 'tikzpicture'
+% and any options will be generated automatically.
+%
+% Furthermore, pdf cross references will be generated for everything
+% within vertical bars, |....|.
+%
+%
+%
+%
+%
+% The only necessary thing is that \pgfmanualpdflabel has been called
+% for every (fully qualified) key, control sequence, environment or
+% whatever.
+
+\newif\ifpgfmanualpdfwarnings
+\pgfmanualpdfwarningstrue
+
+\newif\ifpgfmanualshowlabels
+
+\pgfkeys{%
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualprettyprintpgfkeys{#2}\pgfmanualclosebrace},
+ %
+ /codeexample/prettyprint/autolinks/.style={%
+ /codeexample/prettyprint/key name/.code={\pgfmanualpdfref{##1}{##1}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\pgfmanualpdfref{##1}{##1}/\pgfmanualpdfref{/handlers/##2}{##2}},
+ /codeexample/prettyprint/key value display only/.code={\pgfmanualprettyprintcode{##1}},
+ /codeexample/prettyprint/cs/.code={\pgfmanualpdfref{##1}{##1}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\pgfmanualpdfref{##1}{##1}\{\pgfmanualprettyprintcode{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\pgfmanualpdfref{##1}{##1}\{\pgfmanualprettyprintpgfkeys{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={##1\{\pgfmanualpdfref{##2}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={##1\{\pgfmanualpdfref{##2}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\begingroup\pgfkeyssetvalue{/pdflinks/search key prefixes in}{}\pgfmanualpdfref{##1}{##1}\endgroup},
+ /codeexample/prettyprint/point/.code={##1},%
+ /codeexample/prettyprint/point with cs/.code 2 args={(\pgfmanualpdfref{##1}{##1}:##2},%
+ },%
+ /codeexample/prettyprint/autolinks,
+}%
+
+\pgfkeys{
+ %
+ % Enables or disables the parsing of codeexamples.
+ /pdflinks/codeexample links/.is if=pgfmanualprettyenabled,
+ /pdflinks/codeexample links/.default=true,
+ %
+ % whenever an unqualified key is found, the following key prefix
+ % list is tried to find a match.
+ /pdflinks/search key prefixes in/.initial={/tikz/,/pgf/},
+ %
+ % Enables or disables warnings for failed auto links:
+ /pdflinks/warnings/.is if=pgfmanualpdfwarnings,
+ /pdflinks/warnings/.default=true,
+ %
+ % Shows the autogenerated labels. This is useful to check if the
+ % 'search key prefixes in' worked as it ought to.
+ /pdflinks/show labels/.is if=pgfmanualshowlabels,
+ /pdflinks/show labels/.default=true,
+ /pdflinks/show labels=false,
+ % will be invoked with '#1' set to the generated label.
+ /pdflinks/show labels code/.code={
+ \hbox to 0pt{%
+ \vbox to 0pt{\hsize=0pt
+ \vskip-\baselineskip
+ \hbox to \hsize{%
+ \hss
+ {\footnotesize\ttfamily\textcolor{red}{#1}}%
+ \hss
+ }%
+ \vss
+ }%
+ \vbox to 0pt{\hsize=0pt
+ \vss
+ \hbox to \hsize{%
+ \hss
+ {\footnotesize\ttfamily\textcolor{red}{$\vert$}}%
+ \hss
+ }%
+ }%
+ \vsize=0pt
+ }%
+ },
+ %
+ % the link prefix written to the pdf file:
+ /pdflinks/internal link prefix/.initial=pgf,
+}
+
+\gdef\pgfmanualpdf@installreplacements{%
+ \def\marg##1{{##1}}%
+ \def\oarg##1{[##1]}%
+ \def\meta##1{<##1>}%
+ \def\x{x}%
+ \def\textbackslash{<CS>}%
+ \def\\{\textbackslash}%
+ \def\space{:}%
+ \edef\ {\space}%
+ \edef\#{}%
+ \def\printanat{@}%
+ \def\protect{}%
+ \def\textasciicircum{o}%
+ \expandafter\edef\pgfmanual@verb@activebar{\pgfmanual@verb@bar}%
+}%
+
+% Defines a new pdf cross ref label for use with \pgfmanualpdfref.
+%
+% Usage:
+% \pgfmanualpdflabel{<label>}{<text>}
+% #1: the label.
+% The text #2 will be shown in the resulting pdf (if it is not empty).
+%
+% There is also support for catcode changes if <label> contains
+% something which shouldn't be written as-is into .aux files:
+% \pgfmanualpdflabel[\catcode`\|=12 ]{|-}{}
+% -> this will write
+% \begingroup \catcode `\|=12
+% <code to deal with the label |- >
+% \endgroup
+% into the .aux file.
+%
+\def\pgfmanualpdflabel{\pgfutil@ifnextchar[{\pgfmanualpdflabel@opt}{\pgfmanualpdflabel@opt[]}}%
+\def\pgfmanualpdflabel@opt[#1]#2#3{%
+ \begingroup
+ %
+ \def\pgfmanualpdf@catcode{#1}%
+ \pgfmanualpdf@catcode
+ %
+ \pgfmanualpdflabel@generate{#2}{#3}%
+ %
+ % this is pgfplots-specific: pgfplots supports generic styles which
+ % contain '\x' where '\x' iterates through 'x,y,z'.
+ \pgfutil@in@\x{#2}%
+ \ifpgfutil@in@
+ \def\x{y}%
+ \pgfmanualpdflabel@generate{#2}{#3}%
+ \def\x{z}%
+ \pgfmanualpdflabel@generate{#2}{#3}%
+ \fi
+ \endgroup
+}%
+\def\pgfmanualpdflabel@generate#1#2{%
+ \pgfmanual@handlespeciallabeltokens@in{#1}%
+ %
+ \def\pgfmanualpdflabel@generateone{0}%
+ \pgfutil@ifundefined{pgfd@lbl@\pgfmanualpdflabel@@}{%
+ % ok, no such label is known.
+ \def\pgfmanualpdflabel@generateone{1}%
+ }{%
+ \if\csname pgfd@lbl@\pgfmanualpdflabel@@\endcsname a% "a"ux
+ % ah, it is "just" known from a previous run, but there is
+ % no code in the pdf! Write it!
+ \def\pgfmanualpdflabel@generateone{1}%
+ \else
+ % ok, we already wrote one before. Skip.
+ \fi
+ }%
+ \if\pgfmanualpdflabel@generateone1%
+ \ifpgfmanualshowlabels
+ \pgfkeysvalueof{/pdflinks/show labels code/.@cmd}{\pgfmanualpdflabel@@}\pgfeov
+ \fi
+ %
+ \if@filesw
+ \ifx\pgfmanualpdf@catcode\pgfutil@empty
+ \else
+ \toks0=\expandafter{\pgfmanualpdf@catcode}%
+ \immediate\write\@auxout{%
+ \noexpand\begingroup
+ \the\toks0
+ }%
+ \fi
+ \immediate\write\@auxout{%
+ \noexpand\expandafter\noexpand\gdef
+ \noexpand\csname pgfd@lbl@\pgfmanualpdflabel@@\noexpand\endcsname{a}% a = known in "a"ux file
+ }%
+ \ifx\pgfmanualpdf@catcode\pgfutil@empty
+ \else
+ \immediate\write\@auxout{\noexpand\endgroup}%
+ \fi
+ \fi
+ \expandafter\gdef\csname pgfd@lbl@\pgfmanualpdflabel@@\endcsname{w}% 1. remember the label AND remember that we "w"rote it into the pdf.
+ \edef\pgfmanualpdflabel@@{\pgfkeysvalueof{/pdflinks/internal link prefix}.\pgfmanualpdflabel@@}%
+ \expandafter\hypertarget\expandafter{\pgfmanualpdflabel@@}{#2}%
+ \else
+ #2%
+ \fi
+}%
+
+% A pdf reference to label `#1' with (TeX) text `#2'.
+% @see also \verbpdfref.
+\def\pgfmanualpdfref#1#2{%
+ \begingroup
+ \pgfmanual@handlespeciallabeltokens@in{#1}%
+ %
+ \ifcsname pgfd@lbl@\pgfmanualpdflabel@@\endcsname
+ \else
+ \global\let\pgfmanual@glob=\pgfmanualpdflabel@@
+ \def\pgfmanual@tempa{\foreach \prefix in }%
+ \pgfkeysgetvalue{/pdflinks/search key prefixes in}\pgfmanual@tempb
+ \expandafter\pgfmanual@tempa\expandafter{\pgfmanual@tempb}{%
+ \edef\pgfmanualpdflabel@@{\prefix\pgfmanualpdflabel@@}%
+ \expandafter\pgfmanual@handlespeciallabeltokens@in\expandafter{\pgfmanualpdflabel@@}%
+ \ifcsname pgfd@lbl@\pgfmanualpdflabel@@\endcsname
+ \xdef\pgfmanual@glob{\pgfmanualpdflabel@@}%
+ \breakforeach
+ \fi
+ }%
+ \let\pgfmanualpdflabel@@=\pgfmanual@glob
+ \ifcsname pgfd@lbl@\pgfmanualpdflabel@@\endcsname
+ \else
+ \ifpgfmanualpdfwarnings
+ \begingroup
+ \toks0={#1}%
+ \pgfmanual@warning{pgfmanualpdfref{\the\toks0 }: target label does not exist.}%
+ \endgroup
+ \fi
+ #2%
+ \let\pgfmanualpdflabel@@=\pgfutil@empty
+ \fi
+ \fi
+ \ifx\pgfmanualpdflabel@@\pgfutil@empty
+ \else
+ \expandafter\pgfmanualpdfref@\expandafter{\pgfmanualpdflabel@@}{#2}%
+ \fi
+ \endgroup
+}%
+\def\pgfmanualpdfref@#1#2{%
+ \pgfkeysgetvalue{/pdflinks/internal link prefix}\pgfmanual@temp
+ \expandafter\hyperlink\expandafter{\pgfmanual@temp.#1}{#2}%
+ \ifpgfmanualshowlabels
+ \pgfkeysvalueof{/pdflinks/show labels code/.@cmd}{#1}\pgfeov
+ \fi
+}%
+
+% Handles special tokens in a pdf label which should be treated with
+% care.
+%
+% For example, backslashes might produce problems.
+% This occurs quite frequently with automatically generated hyperrefs
+% inside of codeexamples where \pgfmanualpdfref will be invoked -
+% there, we get the catcode 12 backslashes.
+% Check for them!
+%
+% #1: a token list which shall be used either as cross ref or as
+% label.
+%
+% On output, the macro \pgfmanualpdflabel@@ will be '\edef'ed to the
+% new, possibly modified value.
+\def\pgfmanual@handlespeciallabeltokens@in#1{%
+ \begingroup
+ \pgfmanualpdf@installreplacements
+ \expandafter\pgfutil@in@\pgfmanual@pretty@backslash{#1}%
+ \ifpgfutil@in@
+ % assume the backslash is the first char and substitute it:
+ \pgfmanualpdfref@substitute@backslash#1\relax
+ \else
+ \edef\pgfmanualpdflabel@@{#1}%
+ \fi
+ \def\pgfmanual@tmp{\pgfutilstrreplace{ }{\space}}%
+ \expandafter\pgfmanual@tmp\expandafter{\pgfmanualpdflabel@@}%
+ \edef\pgfmanualpdflabel@@{\pgfretval}%
+ \pgfmath@smuggleone\pgfmanualpdflabel@@
+ \endgroup
+}%
+
+\expandafter\def\expandafter\pgfmanualpdfref@substitute@backslash\expandafter#\expandafter1\pgfmanual@pretty@backslash#2\relax{%
+ \edef\pgfmanualpdflabel@@{#1\textbackslash #2}%
+}%
+
+% Typesets '#1' in red,\texttt like every declaration. It will also
+% generate a pdf cross ref anchor for #1.
+%
+% WARNING: this changes catcodes! In case this is not acceptable in
+% your context, you will need to generate a \pgfmanualpdflabel
+% manually.
+%
+% \declareandlabel{\controlsequence} can be used as |\controlsequence|
+\def\declareandlabel{%
+ \begingroup
+ \pgfmanual@verb@preparecatcodes@
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{%
+ \pgfmanualpdflabel##1{\texttt{\declare##1}}% mark: '##1' contains already braces.
+ \endgroup
+ }%
+ \pgfmanualprettyprintercollectargcount1{\relax}%
+}
+
+%
+% \verbpdfref{\controlsequence more stuff}
+% is the same as writing |\controlsequence more stuff|, but the
+% *complete* argument is supposed to be one label.
+%
+% The difference to \pgfmanualpdfref{...}{} is that the argument is
+% supposed to be verbatim text.
+\def\verbpdfref{%
+ \begingroup
+ \pgfmanual@verb@preparecatcodes@
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{%
+ \pgfmanualpdfref##1{\texttt{##1}}% mark: '##1' contains already braces.
+ \endgroup
+ }%
+ \pgfmanualprettyprintercollectargcount1{\relax}%
+}
+
+% Prepare active vertical bars, |....| for auto-pretty cross
+% referencing.
+%
+% Example:
+% |\pgfkeys| -> will generate a hyperref!
+{
+ \catcode`\|=12
+ \gdef\pgfmanual@verb@bar{|}%
+% \gdef\pgfmanual@verb@collect#1|{%
+% % this command will also handle control sequences.
+% \texttt{\pgfmanualprettyprintpgfkeys{#1}}%
+% \endgroup
+% }%
+ \catcode`\|=13
+ \gdef\pgfmanual@verb@activebar{|}%
+}
+\def\pgfmanual@verb{%
+ \begingroup
+ \pgfmanual@verb@preparecatcodes@
+ \toksdef\t@pgfmanual@verb=0
+ \t@pgfmanual@verb={}%
+ \pgfmanual@verb@collect
+}
+% this version of \pgfmanual@verb@collect is less efficient than the
+% one uncommented above. BUT: it can auto-detect the case when
+% |...| has been provided somewhere where I can't change catcodes!
+% The other one would simply fail to compile.
+\def\pgfmanual@verb@collect#1{%
+ \def\pgfmanual@temp{#1}%
+ \ifx\pgfmanual@temp\pgfmanual@verb@bar
+ % ok, finish:
+ \edef\pgfmanual@verb@collect@next{%
+ % this command will also handle control sequences.
+ \noexpand\endgroup
+ \noexpand\texttt{\noexpand\pgfmanualprettyprintpgfkeys{\the\t@pgfmanual@verb}}%
+ }%
+ \else
+ \ifx\pgfmanual@temp\pgfmanual@verb@activebar
+ % ohoh... that should not happen! It means someone invoked
+ % |...| within an argument; I couln't change catcodes.
+ % Ok, resort to a simple fallback solution.
+ % FIXME : I have just realized that THIS DOESN'T PRESERVE SPACES
+ \edef\pgfmanual@verb@collect@next{%
+ \noexpand\endgroup
+ \noexpand\texttt{\the\t@pgfmanual@verb}%
+ }%
+ \else
+ \t@pgfmanual@verb=\expandafter{\the\t@pgfmanual@verb #1}%
+ \let\pgfmanual@verb@collect@next=\pgfmanual@verb@collect
+ \fi
+ \fi
+ \pgfmanual@verb@collect@next
+}%
+
+\AtBeginDocument{%
+ \ifpgfmanualprettyenabled
+ \catcode`\|=13
+ \expandafter\let\pgfmanual@verb@activebar=\pgfmanual@verb
+ \fi
+}%
+
+\def\pgfmanual@verb@preparecatcodes@{%
+ \let\do\@makeother%
+ \dospecials%
+ \catcode`\%=12 % THATS IMPORTANT! Do *not* handle comments!
+ % these catcodes are expected by the pretty printer...
+ %\catcode`\^^M=13
+ \catcode`\ =13
+ \catcode`\^^I=13
+ \expandafter\def\pgfmanual@pretty@activespace{\space}%
+ \expandafter\def\pgfmanual@pretty@activetab{\space\space\space\space}%
+}%
+\endinput
+% vi: ts=4 sw=4
diff --git a/graphics/pgf/contrib/tikz-dependency/pgfmanual.prettyprinter.code.tex b/graphics/pgf/contrib/tikz-dependency/pgfmanual.prettyprinter.code.tex
new file mode 100644
index 0000000000..85482fedaa
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/pgfmanual.prettyprinter.code.tex
@@ -0,0 +1,1095 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2007/2008/2009 by Christian Feuersänger.
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+% this is some kind of "plug-in" for pgfmanual-en-macros.tex which
+% provides pretty printing of the code lines in 'codeexample'.
+%
+% It requires to be invoked with \pgfmanualprettyprintcode{#1} at the
+% right place.
+%
+% ATTENTION:
+% this is NOT a sophisticated syntax highlighter like lstlistings!
+% It has rather strict assumptions about how to use it (the input must
+% have been read verbatim, for example).
+
+% Special code for syntax highlighting:
+%
+%
+% USER INTERFACE
+\pgfkeys{%
+ % this is the public hook into
+ % \begin{codeexample}...\end{codeexample} which triggers pretty
+ % printing:
+ /codeexample/typeset listing/.code= {\pgfmanualprettyprintcode{#1}},
+ %
+ % this key will be invoked whenever a key in key-value context has been identified.
+ %
+ % It won't be invoked for handled keys like |my style/.style=....|, see below.
+ %
+ % #1 will be the keys name.
+ /codeexample/prettyprint/key name/.code={#1},
+ %
+ % A variant which will be used instead of |key name| if the key
+ % has a key handler. For example, when the pretty printer finds
+ % |my style/.style|, it will call
+ % |key name with handler={my style}{.style}.
+ /codeexample/prettyprint/key name with handler/.code 2 args={#1/#2},
+ %
+ % Will be invoked whenever the value of a key has been found.
+ % It will be invoked AFTER 'key name' and not at all if there was
+ % no value.
+ %
+ % #1: the key's name
+ % #2: the key's value.
+ %
+ % The default implementation checks if there is a special handler
+ % for the key name '#1', in
+ % /codeexample/prettyprint/key value/#1.
+ % For example:
+ % /codeexample/prettyprint/key value/my key/.code 2 args={name=#1, value =#2}
+ % If such a key exists, it will be invoked with {#1}{#2} as
+ % arguments. Otherwise, the generic method
+ % /codeexample/prettyprint/key value with style detection={#1}{#2}
+ % will be invoked.
+ /codeexample/prettyprint/key value/.code 2 args={%
+ \pgfkeysifdefined{/codeexample/prettyprint/key value/#1}{%
+ \pgfkeysalso{/codeexample/prettyprint/key value/#1={#1}{#2}}%
+ }{%
+ \pgfkeysalso{/codeexample/prettyprint/key value with style detection={#1}{#2}}%
+ }%
+ },
+ % A helper macro for the default 'key value' implementation.
+ /codeexample/prettyprint/key value with style detection/.code 2 args={%
+ \pgfutil@in@{style}{#1}%
+ \ifpgfutil@in@
+ \pgfmanualprettyprintpgfkeys{#2}%
+ \else
+ \pgfkeysalso{/codeexample/prettyprint/key value display only={#2}}%
+ \fi
+ },%
+ %
+ % Will be invoked by the default 'key value' implementation to
+ % typeset the value as such.
+ /codeexample/prettyprint/key value display only/.code={#1},
+ %
+ % Used to typeset a single word. A word is something which has not
+ % been identified in any other context; a maximal sequence of
+ % non-white-space tokens.
+ /codeexample/prettyprint/word/.code={#1},
+ %
+ % A two-argument code key which invokes '#1' if spaces shall
+ % delimit words and '#2' if not.
+ % This may be useless. Handle with care!
+ /codeexample/prettyprint/if space is word delim/.code 2 args={%
+ #1%
+ },%
+ %
+ % A three-argument code key which should invoke '#2' if the single
+ % token '#1' is a word delimiter and '#3' if that is not the case.
+ % Note that '#1' doesn't have the usual catcodes (see the
+ % \pgfmanual@pretty@** macros)!
+ % Furthermore, white spaces are treated separately.
+ /codeexample/prettyprint/if is word delim/.code args={#1#2#3}{%
+ \edef\pgfmanual@check{,;().;\pgfmanual@pretty@lbrace\pgfmanual@pretty@rbrace}%
+ \def\pgfmanual@check@{\pgfutil@in@{#1}}%
+ \expandafter\pgfmanual@check@\expandafter{\pgfmanual@check}%
+ \ifpgfutil@in@ #2\else #3\fi
+ },%
+ %
+ % Used to typeset a single control sequence.
+ % #1 is the control sequence's name as a sequence of catcode 12
+ % tokens.
+ /codeexample/prettyprint/cs/.code={#1},
+ %
+ % Used to typeset a single control sequence together with one or
+ % more arguments.
+ %
+ % #1 is the control sequence's name (including the backslash as
+ % literal string) and
+ % #2,#3,...,#9 are the arguments. The number of arguments depends
+ % on the 'cs arguments/<CS NAME>' key; it contains the integer
+ % number.
+ %
+ % For example, if
+ % |cs arguments/pgfkeys/.initial=1|,
+ % the pretty printer invokes
+ % |cs with args={\pgfkeys}{<argument>}.
+ %
+ % If
+ % |cs arguments/mycommand/.initial=2|,
+ % the pretty printer invokes
+ % |cs with args={\pgfkeys}{<argument1>}{<argument2>}.
+ % In this case, 'cs with args' needs to be defined in a way which
+ % allows to deal with 3 arguments.
+ %
+ % Please note that the value do not contain braces! The braces
+ % need to be inserted manually.
+ %
+ % Special cases:
+ % 1. If end-of-input is encountered BEFORE the expected number of
+ % arguments has been found, the following happens:
+ % - if not even one (partial) argument has been found, the
+ % /codeexample/prettyprint/cs/.@cmd key will be used instead.
+ % - the \ifpgfmanualprettyprinterarghasunmatchedbraces boolean
+ % indicates if the trailing brace is missing.
+ /codeexample/prettyprint/cs with args/.code 2 args={#1\{#2\pgfmanualclosebrace},
+ %
+ % For every identified control sequence, the key
+ % /codeexample/prettyprint/cs arguments/<CSNAME>
+ % will be checked. If it exists, it contains an integer with the
+ % number of arguments it takes.
+ % The <CSNAME> must not contain the '\'.
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ %
+ % For every identified control sequence, the key
+ % /codeexample/prettyprint/cs/<CSNAME>/.@cmd
+ % will be checked. If it exists, it will be used instead of
+ % 'cs with args' (with the same special case restrictions for
+ % early end-of-input).
+ %
+ % The <CSNAME> must not contain the '\'.
+ %
+ % This allows special treatment for special
+ % commands like \pgfkeys:
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={#1\{\pgfmanualprettyprintpgfkeys{#2}\pgfmanualclosebrace},
+ %
+ % recognise environments:
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={#1\{#2\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={#1\{#2\pgfmanualclosebrace},
+ %
+ % a point coordinate (#1)
+ % Note that '#1' will contain the braces (if there was one),
+ /codeexample/prettyprint/point/.code={#1},%
+ %
+ % a point coordinate with explicit coordinate system: (#1:#2)
+ % Note that '#2' will contain the terminating brace (if there was one)
+ % #1: the coordinate system name (*without* the leading brace).
+ % The leading brace must be re-inserted by this style.
+ /codeexample/prettyprint/point with cs/.code 2 args={(#1:#2},%
+ % the same with specialised code:
+ %/codeexample/prettyprint/point with cs/<CS NAME>/.code 2 args={(#1:#2},%
+ %
+ %
+ % A predefined style which colors every identified token. It's
+ % purpose is only debugging.
+ /codeexample/prettyprint/colored/.style={%
+ /codeexample/prettyprint/key name/.code={\textcolor{red!75!black}{##1}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\textcolor{red!75!black}{##1}/\textcolor{red!90!black}{##2}},
+ /codeexample/prettyprint/key value display only/.code={\textcolor{yellow}{##1}},
+ /codeexample/prettyprint/cs/.code={\textcolor{green}{##1}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/pgfkeys/.initial=1,
+ /codeexample/prettyprint/cs/pgfkeys/.code 2 args={\textcolor{green}{##1}\{\pgfmanualprettyprintpgfkeys{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/begin/.initial=1,
+ /codeexample/prettyprint/cs/begin/.code 2 args={\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/end/.initial=1,
+ /codeexample/prettyprint/cs/end/.code 2 args={\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\textcolor{brown}{##1}},
+ /codeexample/prettyprint/point/.code={\textcolor{red}{##1}},%
+ /codeexample/prettyprint/point with cs/.code 2 args={(\textcolor{green}{##1}:\textcolor{red}{##2}},%
+ },%
+ % A further debuggin helper.
+ /codeexample/prettyprint/colored and verbose/.style={%
+ /codeexample/prettyprint/colored,
+ /codeexample/prettyprint/key name/.code={\message{[key name=##1]}\textcolor{red!75!black}{##1}},
+ /codeexample/prettyprint/key name with handler/.code 2 args={\message{[key name with handler=##1/##2]}\textcolor{red!75!black}{##1}/\textcolor{red!90!black}{##2}},
+ /codeexample/prettyprint/key value display only/.code={\def\temp{##1}\message{[key value=\meaning\temp]}\textcolor{yellow}{##1}},
+ /codeexample/prettyprint/cs/.code={\message{[cs=##1]}\textcolor{green}{##1}},
+ /codeexample/prettyprint/cs with args/.code 2 args={\def\temp{##2}\message{[cs with args={##1}{\meaning\temp}]}\textcolor{green}{##1}\{\textcolor{orange}{##2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/word/.code={\message{[word=##1]}\textcolor{brown}{##1}},
+ /codeexample/prettyprint/point/.code={\message{[point=##1]}\textcolor{red}{##1}},%
+ /codeexample/prettyprint/point with cs/.code 2 args={\message{[point with cs={##1}{##2}]}(\textcolor{green}{##1}:\textcolor{red}{##2}},%
+ },%
+ %/codeexample/prettyprint/colored,
+ %/codeexample/prettyprint/colored and verbose,
+}%
+
+\newif\ifpgfmanualprettyenabled
+\pgfmanualprettyenabledtrue
+
+% User interface command to handle unmatched braces:
+%
+% It expands to '\}' unless the preceding argument had unmatched braces.
+\def\pgfmanualclosebrace{%
+ \ifpgfmanualprettyprinterarghasunmatchedbraces
+ \else
+ \}%
+ \fi
+}%
+
+
+% Typesets '#1', possibly using some sort of pretty printer.
+%
+% The argument '#1' is expected to be a long token list in which
+% 1. all characters have catcode 11 or 12 (normal letters),
+% 2. white spaces, tabs and newlines have catcode 13 (are active).
+%
+% @see \pgfmanualprettyprintpgfkeys
+\long\def\pgfmanualprettyprintcode#1{%
+%\def\temp{#1}\message{STARTING PRETTY PRINTING for \meaning\temp}%
+ \ifpgfmanualprettyenabled
+ \begingroup
+ \pgfmanualprettyprintstyles
+ \pgfmanual@pretty@mainloop#1\pgfmanual@EOI
+ \endgroup
+ \else
+ #1%
+ \fi
+}%
+% DISABLE:
+%\long\def\pgfmanualprettyprintcode#1{#1}%
+
+\def\pgfmanualprettyprintstyles{%
+%\tracingmacros=2 \tracingcommands=2 \message{PRETTYPRINT INIT}%
+ \def\{{\pgfmanual@pretty@lbrace}%
+ \def\}{\pgfmanual@pretty@rbrace}%
+ \pgfmanual@pretty@installcommenthandler
+ \let\pgfmanualprettyprintstyles=\relax
+}%
+
+
+\newif\ifpgfmanualprettycommentactive
+
+% we can't use the \@typeset@till@return method for comments because
+% the pretty printer needs full control over the token list.
+%
+% We try a replacement here.
+%
+% FIXME
+% THIS INTRODUCES A NEW GROUP! Does that hurt the pretty printer??
+%
+\def\pgfmanual@pretty@installcommenthandler{%
+ \expandafter\def\pgfmanual@pretty@activepercent{%
+ \begingroup
+ \pgfmanualprettycommentactivetrue
+ \expandafter\let\pgfmanual@pretty@activenl=\pgfmanual@pretty@recoveraftercomment
+ \expandafter\def\pgfmanual@pretty@activepercent{\%}%
+ %\tt
+ \% %
+ }%
+}%
+\def\pgfmanual@pretty@recoveraftercomment{%
+ \endgroup
+ \pgfmanual@pretty@activenl
+}%
+
+\def\pgfmanual@EOI{\pgfmanual@EOI}%
+
+{
+ \catcode`\[=0
+ \catcode`\\=12
+ [gdef[pgfmanual@pretty@backslash{\}%
+}
+\begingroup
+ \catcode`\:=12
+ \catcode`\(=12
+ \catcode`\)=12
+ \gdef\pgfmanual@pretty@colon{:}%
+ \gdef\pgfmanual@pretty@lroundbrace{(}%
+ \gdef\pgfmanual@pretty@rroundbrace{)}%
+ \catcode`\[=1
+ \catcode`\]=2
+ \catcode`\{=12
+ \catcode`\}=12
+ \gdef\pgfmanual@pretty@lbrace[{]%
+ \gdef\pgfmanual@pretty@rbrace[}]%
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\[=12
+ \catcode`\]=12
+ \catcode`\,=12
+ \catcode`\ =10\relax\gdef\pgfmanual@pretty@space{ }%
+ \gdef\pgfmanual@pretty@lbracket{[}%
+ \gdef\pgfmanual@pretty@rbracket{]}%
+ \gdef\pgfmanual@pretty@comma{,}%
+ \catcode`\==12
+ \gdef\pgfmanual@pretty@eq{=}%
+\endgroup
+\begingroup
+ \catcode`\%=12
+ \gdef\pgfmanual@pretty@percent{%}
+ \catcode`\%=13
+ \gdef\pgfmanual@pretty@activepercent{%}
+ \catcode`\^^M=13
+ \gdef\pgfmanual@pretty@activenl{^^M}\endgroup
+\begingroup
+\catcode`\^^I=13\relax\gdef\pgfmanual@pretty@activetab{^^I}%
+\catcode`\ =13\relax\gdef\pgfmanual@pretty@activespace{ }\endgroup
+
+% loops through all tokens.
+% #1 is a single token.
+\def\pgfmanual@pretty@mainloop{%
+ \def\pgfmanual@pretty@mainloop@currentword{}%
+ \pgfmanual@pretty@mainloop@
+}%
+\long\def\pgfmanual@pretty@mainloop@#1{%
+ \def\pgfmanual@loc@TMPa{#1}%
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@mainloop@
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@EOI
+ % stop iteration.
+ \pgfmanual@pretty@mainloop@finishword
+ \let\pgfmanual@pretty@mainloop@NEXT=\relax
+ \else
+ \ifpgfmanualprettycommentactive
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@lbracket%
+ % we found the start of OPTIONS '[ ... ]'.
+ \pgfmanual@pretty@mainloop@finishword
+ % Attempt syntax highlighting for pgfkeys:
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@pgfkeys
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@backslash
+ % we found the start of a control sequence '\command'
+ \pgfmanual@pretty@mainloop@finishword
+ %
+ % collect the control sequence name into
+ % \pgfmanual@loc@TMPa, but without the backslash:
+ \let\pgfmanual@loc@TMPa=\pgfutil@empty
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@collectcs@loop
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@lroundbrace%
+ \pgfmanual@pretty@mainloop@finishword
+ \let\pgfmanual@pretty@mainloop@NEXT=\pgfmanual@pretty@collectpoint
+ \else
+ \def\pgfmanual@isspace{0}%
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL) or comment
+ \def\pgfmanual@isspace{1}%
+ \else
+ \ifnum10=\catcode`#1
+ \def\pgfmanual@isspace{1}%
+ \fi
+ \fi
+ \if\pgfmanual@isspace1%
+ \pgfkeysvalueof{/codeexample/prettyprint/if space is word delim/.@cmd}{%
+ \pgfmanual@pretty@mainloop@finishword
+ #1% ok, show it.
+ }{%
+ % collect the word.
+ \expandafter\def\expandafter\pgfmanual@pretty@mainloop@currentword\expandafter{\pgfmanual@pretty@mainloop@currentword #1}%
+ }%
+ \else
+ \pgfkeysvalueof{/codeexample/prettyprint/if is word delim/.@cmd}{#1}{%
+ \pgfmanual@pretty@mainloop@finishword
+ #1% ok, show the delimiter.
+ }{%
+ % collect the word.
+ \expandafter\def\expandafter\pgfmanual@pretty@mainloop@currentword\expandafter{\pgfmanual@pretty@mainloop@currentword #1}%
+ }\pgfeov%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@mainloop@NEXT
+}%
+
+\def\pgfmanual@pretty@mainloop@finishword{%
+ \ifx\pgfmanual@pretty@mainloop@currentword\pgfutil@empty
+ \else
+ \def\pgfmanual@loc@TMPa{\pgfkeysvalueof{/codeexample/prettyprint/word/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPa\pgfmanual@pretty@mainloop@currentword\pgfeov
+ \let\pgfmanual@pretty@mainloop@currentword=\pgfutil@empty
+ \fi
+}%
+
+\def\pgfmanual@pretty@collectpoint{%
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@collectargs@finish@collectpoint
+ \expandafter\pgfmanualprettyprintercollectupto\pgfmanual@pretty@rroundbrace
+ {\afterpgfmanual@pretty@collectpoint}%
+}
+
+{
+\catcode`\:=12
+\gdef\pgfmanual@pretty@collectargs@finish@collectpoint#1{%
+ \expandafter\pgfutil@in@\pgfmanual@pretty@colon{#1}%
+ \ifpgfutil@in@
+ \def\pgfmanual@pretty@collectpoint@getcoordsystem##1:##2\relax{%
+ \begingroup
+ \pgfmanual@pretty@restorespaces
+ % remove active spaces from ##1:
+ \xdef\pgfmanual@pretty@glob@TMPa{##1}%
+ \endgroup
+ \pgfkeysifdefined{/codeexample/prettyprint/point with cs/\pgfmanual@pretty@glob@TMPa/.@cmd}{%
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/point with cs/\pgfmanual@pretty@glob@TMPa/.@cmd}}%
+ }{%
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/point with cs/.@cmd}}%
+ }%
+ \expandafter\def\expandafter\pgfmanual@loc@TMPa\expandafter{\expandafter{\pgfmanual@pretty@glob@TMPa}{##2}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa\pgfeov
+ }%
+ \ifpgfmanualprettyprinterfoundterminator
+ \pgfmanual@pretty@collectpoint@getcoordsystem#1)\relax
+ \else
+ \pgfmanual@pretty@collectpoint@getcoordsystem#1\relax
+ \fi
+ \else
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/point/.@cmd}}%
+ \ifpgfmanualprettyprinterfoundterminator
+ \pgfmanual@loc@TMPb(#1)\pgfeov
+ \else
+ \pgfmanual@loc@TMPb(#1\pgfeov
+ \fi
+ \fi
+}%
+}
+\def\afterpgfmanual@pretty@collectpoint{\pgfmanual@pretty@mainloop}%
+
+% loops through all tokens, assembling the cs name as it goes.
+% #1 is a single token.
+\def\pgfmanual@pretty@collectcs@loop#1{%
+ \let\pgfmanual@pretty@collectcs@loop@NEXT=\pgfmanual@pretty@collectcs@loop
+ \def\pgfmanual@loc@TMPb{#1}%
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@EOI
+ \def\pgfmanual@pretty@collectcs@loop@NEXT{\pgfmanual@pretty@collectcs@loop@END #1}%
+ \else
+ % a csname may only use letters. And: only letters have a
+ % positive lcccode!
+ \ifnum\lccode`#1=0
+ \ifx\pgfmanual@loc@TMPb @%
+ % ok, we may also accept an `@':
+ \edef\pgfmanual@loc@TMPa{\pgfmanual@loc@TMPa #1}%
+ \else
+ % This here is the first non-letter.
+ \def\pgfmanual@pretty@collectcs@loop@NEXT{\pgfmanual@pretty@collectcs@loop@END #1}%
+ \fi
+ \else
+ % continue iterating and assemble the csname...
+ \edef\pgfmanual@loc@TMPa{\pgfmanual@loc@TMPa #1}%
+ \fi
+ \fi
+ \pgfmanual@pretty@collectcs@loop@NEXT
+}%
+\def\afterpgfmanual@pretty@cs{\pgfmanual@pretty@mainloop}%
+
+\def\pgfmanual@pretty@collectcs@loop@END{%
+ \pgfkeysifdefined{/codeexample/prettyprint/cs arguments/\pgfmanual@loc@TMPa}{%
+ % oh. The collected control sequence expects arguments. That
+ % means a lot of work since there are no nestable braces in
+ % the token list! All of them have catcode 12... we need to do
+ % that manually.
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@collectargs@finish@cs
+ \def\pgfmanual@pretty@collectcs@loop@END@next{%
+ \pgfmanualprettyprintercollectargcount
+ {\pgfkeysvalueof{/codeexample/prettyprint/cs arguments/\pgfmanual@loc@TMPa}}%
+ {\afterpgfmanual@pretty@cs}%
+ }%
+ }{%
+ % re-insert the backslash:
+ \edef\pgfmanual@loc@TMPa{\pgfmanual@pretty@backslash \pgfmanual@loc@TMPa}%
+ % ok, report the macro and continue with the main loop.
+ \def\pgfmanual@loc@TMPb{\pgfkeysvalueof{/codeexample/prettyprint/cs/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa\pgfeov
+ \let\pgfmanual@pretty@collectcs@loop@END@next=\afterpgfmanual@pretty@cs
+ }%
+ \pgfmanual@pretty@collectcs@loop@END@next
+}%
+
+\newif\ifpgfmanualprettyprinterarghasunmatchedbraces
+
+% Collects arguments inside of a token list, dealing with nested
+% catcode-12-braces.
+%
+% #1: is the NUMBER of arguments to collect.
+% #2: is TeX code which shall be invoked after
+% \pgfmanualprettyprinterhandlecollectedargs has been invoked (see
+% below).
+%
+% PRECONDITION:
+% there is a large token list following
+% \pgfmanualprettyprintercollectargcount with balanced braces. The braces
+% have \catcode 12.
+% POSTCONDITION:
+% 1. the arguments will be collected as
+% '<result> := {<first arg>}{<second arg>}',
+% 2.1 the macro \pgfmanualprettyprinternumcollectedargs will contain
+% the *actual* number of *completely* collected arguments,
+% 2.2 the if \ifpgfmanualprettyprinterarghasunmatchedbraces will be
+% set to \c true if the last found argument had an unmatched brace,
+% 3. then, \pgfmanualprettyprinterhandlecollectedargs{<result>} will be
+% invoked. Just define \pgfmanualprettyprinterhandlecollectedargs
+% properly.
+% Afterwards, #2 will be invoked to recover from the argument
+% collection.
+%
+%
+% Example:
+% \pgfmanualprettyprintercollectargcount{2}{\donnextstep}
+% {_12 first argument }_12 {_12 second argument }_12 next tokens%
+%
+% will result in the expansion
+% \pgfmanualprettyprinterhandlecollectedargs{{_1 first argument }_2 {_1 second argument }_2 }
+% \donnextstep
+% next tokens
+%
+%
+%
+% ATTENTION:
+% \pgfmanualprettyprinterhandlecollectedargs will be invoked with a SINGLE
+% argument. The argument as such will contain extra braces, one pair
+% of braces for each of the #1 arguments. These braces will have
+% catcode 1 and 2, i.e. they can *really* be used in TeX. Thus, the
+% finish routine will be invoked with
+% \pgfmanualprettyprinterhandlecollectedargs{{<arg>}}
+% for one argument and with
+% \pgfmanualprettyprinterhandlecollectedargs{{<first arg>}{<second arg>}}
+% for two and more arguments. Note the extra set of braces for one
+% arg.
+% It might happen that not all arguments have been found if
+% end-of-input occured before. The
+% \pgfmanualprettyprinterhandlecollectedargs routine has to check
+% this using the macro \pgfmanualprettyprinternumcollectedargs which
+% contains the actual number of collected args.
+%
+% @remark This macro checks for the end-of-input indicator, \pgfmanual@EOI. In case it encounters
+% \pgfmanual@EOI, it
+% 1. stops collecting, leaving the \pgfmanual@EOI as next token to be read,
+% 2. sets \ifpgfmanualprettyprinterarghasunmatchedbraces to \iftrue if necessary,
+% 3. assigns \pgfmanualprettyprinternumcollectedargs
+% 4. invokes the finish routine.
+% The \pgfmanual@EOI needs to be collected by following routines in
+% this case. You can also use \pgfutil@ifnextchar\pgfmanual@EOI{}{} in
+% following routines to check for \pgfmanual@EOI.
+\def\pgfmanualprettyprintercollectargcount#1#2{%
+ \pgfmanualprettyprinterarghasunmatchedbracesfalse
+ \begingroup
+ \edef\pgfmanual@loc@csargcount{#1}%
+ \toksdef\t@afterpgfmanualprettyprinterhandlecollected=10
+ \t@afterpgfmanualprettyprinterhandlecollected={#2}%
+ \let\c@pgfmanual@pretty@openbracecount=\c@pgf@counta
+ \let\c@pgfmanual@pretty@curargcount=\c@pgf@countb
+ % I will track open braces and the number of completely
+ % collected arguments here:
+ \c@pgfmanual@pretty@openbracecount=0
+ \c@pgfmanual@pretty@curargcount=0
+ %
+ % and I will accumulate the argument token lists as such here:
+ \toksdef\t@pgfmanual@currentarg=0
+ \toksdef\t@pgfmanual@allargs=1
+ \t@pgfmanual@currentarg={}%
+ \t@pgfmanual@allargs={}%
+ %
+ \pgfmanual@pretty@collectargs@loop
+}%
+
+% loops through all tokens, collecting the required number of
+% arguments. This involves to track nested braces manually.
+% #1 is a single token.
+\def\pgfmanual@pretty@collectargs@loop#1{%
+ \let\pgfmanual@pretty@collectargs@loop@NEXT=\pgfmanual@pretty@collectargs@loop
+ \def\pgfmanual@loc@TMPc{#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@EOI
+ \ifnum\c@pgfmanual@pretty@openbracecount>0
+ \ifpgfmanualpdfwarnings
+ \pgfplots@warning{The pretty printer did not found the closing curly brace!? This will potentially lead to display errors}%
+ \fi
+ \fi
+ \edef\pgfmanual@pretty@collectargs@loop@NEXT{%
+ \noexpand\endgroup
+ \ifnum\c@pgfmanual@pretty@openbracecount>0
+ \noexpand\pgfmanualprettyprinterarghasunmatchedbracestrue
+ \fi
+ \noexpand\def\noexpand\pgfmanualprettyprinternumcollectedargs{\the\c@pgfmanual@pretty@curargcount}%
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@allargs\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ \noexpand\pgfmanual@EOI% <- put this token back into token list!
+ }%
+ \else
+ \ifpgfmanualprettycommentactive
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activenl
+ \pgfmanualprettycommentactivefalse
+ \fi
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activepercent
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \pgfmanualprettycommentactivetrue
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@lbrace
+ \advance\c@pgfmanual@pretty@openbracecount by1
+ \ifnum\c@pgfmanual@pretty@openbracecount>1
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@rbrace
+ \advance\c@pgfmanual@pretty@openbracecount by-1
+ \ifnum\c@pgfmanual@pretty@openbracecount=0
+ % we have one complete argument ready!
+ % append it -- with REAL braces if needed:
+ \edef\pgfmanual@loc@TMPc{\the\t@pgfmanual@allargs{\the\t@pgfmanual@currentarg}}%
+ \t@pgfmanual@allargs=\expandafter{\pgfmanual@loc@TMPc}%
+ \t@pgfmanual@currentarg={}%
+ %
+ % check it we need more arguments:
+ \advance\c@pgfmanual@pretty@curargcount by1
+ \ifnum\c@pgfmanual@pretty@curargcount=\pgfmanual@loc@csargcount\relax
+ \edef\pgfmanual@pretty@collectargs@loop@NEXT{%
+ \noexpand\endgroup
+ \noexpand\def\noexpand\pgfmanualprettyprinternumcollectedargs{\the\c@pgfmanual@pretty@curargcount}%
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@allargs}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ }%
+ \fi
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \else
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL) or comment
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifnum10=\catcode`#1
+ % we found a white space (space, TAB
+ % or NL) with unexpected catcode
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifnum\c@pgfmanual@pretty@openbracecount=0
+ \ifpgfmanualpdfwarnings
+ \begingroup
+ \toks4{#1}%
+ \pgfplots@warning{The pretty printer did not find the expected \pgfmanual@loc@csargcount\space arguments (only token \the\toks4 )}%
+ \endgroup
+ \fi
+ \edef\pgfmanual@pretty@collectargs@loop@NEXT{%
+ \noexpand\endgroup
+ \noexpand\def\noexpand\pgfmanualprettyprinternumcollectedargs{\the\c@pgfmanual@pretty@curargcount}%
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@allargs\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ \noexpand#1% <- put this token back into token list!
+ }%
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@collectargs@loop@NEXT
+}%
+
+\newif\ifpgfmanualprettyprinterfoundterminator
+
+% Collects tokens inside of a token list up to a single delimiting token, dealing with nested
+% catcode-12-braces.
+%
+% #1: is the end token, the delimiter. It won't be collected.
+% #2: is code to invoke after
+% \pgfmanualprettyprinterhandlecollectedargs has been invoked.
+%
+% PRECONDITION:
+% there is a large token list following
+% \pgfmanualprettyprintercollectargcount with balanced braces. The braces
+% have \catcode 12.
+% POSTCONDITION:
+% - the arguments will be collected as
+% '<result> := <token list>'
+% and then, \pgfmanualprettyprinterhandlecollectedargs{<result>} will be
+% invoked. Just define \pgfmanualprettyprinterhandlecollectedargs
+% properly.
+% Then, #2 will be invoked.
+% - The boolean \ifpgfmanualprettyprinterfoundterminator will be set to true if and only if '#1' has been found.
+%
+% @see \pgfmanualprettyprintercollectargcount for more details.
+%
+\def\pgfmanualprettyprintercollectupto#1#2{%
+ \pgfmanualprettyprinterarghasunmatchedbracesfalse
+ \pgfmanualprettyprinterfoundterminatortrue
+ \begingroup
+ \def\pgfmanual@loc@delimittoken{#1}%
+ \toksdef\t@afterpgfmanualprettyprinterhandlecollected=10
+ \t@afterpgfmanualprettyprinterhandlecollected={#2}%
+ %
+ \let\c@pgfmanual@pretty@openbracecount=\c@pgf@counta
+ % I will track open braces here:
+ \c@pgfmanual@pretty@openbracecount=0
+ %
+ % and I will accumulate the argument token lists as such here:
+ \toksdef\t@pgfmanual@currentarg=0
+ \t@pgfmanual@currentarg={}%
+ %
+ \pgfmanual@pretty@collectupto@loop
+}%
+
+% loops through all tokens, collecting the required number of
+% arguments. This involves to track nested braces manually.
+% #1 is a single token.
+\def\pgfmanual@pretty@collectupto@loop#1{%
+ \let\pgfmanual@pretty@collectupto@loop@NEXT=\pgfmanual@pretty@collectupto@loop
+ \def\pgfmanual@loc@TMPc{#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@EOI
+ \edef\pgfmanual@pretty@collectupto@loop@NEXT{%
+ \noexpand\endgroup
+ \ifnum\c@pgfmanual@pretty@openbracecount>0
+ \noexpand\pgfmanualprettyprinterarghasunmatchedbracestrue
+ \fi
+ \noexpand\pgfmanualprettyprinterfoundterminatorfalse
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ \noexpand\pgfmanual@EOI% <- put this token back into token list!
+ }%
+ \else
+ \ifpgfmanualprettycommentactive
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activenl
+ \pgfmanualprettycommentactivefalse
+ \fi
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@activepercent
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \pgfmanualprettycommentactivetrue
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@lbrace
+ \advance\c@pgfmanual@pretty@openbracecount by1
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@pretty@rbrace
+ \advance\c@pgfmanual@pretty@openbracecount by-1
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \else
+ \ifx\pgfmanual@loc@TMPc\pgfmanual@loc@delimittoken
+ \ifnum\c@pgfmanual@pretty@openbracecount=0
+ % do NOT include the delimit token.
+ \edef\pgfmanual@pretty@collectupto@loop@NEXT{%
+ \noexpand\endgroup
+ \noexpand\pgfmanualprettyprinterhandlecollectedargs{\the\t@pgfmanual@currentarg}%
+ \the\t@afterpgfmanualprettyprinterhandlecollected
+ }%
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \else
+ \t@pgfmanual@currentarg=\expandafter{\the\t@pgfmanual@currentarg#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@collectupto@loop@NEXT
+}%
+
+\def\pgfmanual@pretty@collectargs@finish@cs#1{%
+ \def\pgfmanual@pretty@collectargs@finish@cs@hasargs{1}%
+ \ifnum\pgfmanualprettyprinternumcollectedargs=0
+ \ifpgfmanualprettyprinterarghasunmatchedbraces
+ \else
+ \def\pgfmanual@pretty@collectargs@finish@cs@hasargs{0}%
+ \fi
+ \fi
+ \if\pgfmanual@pretty@collectargs@finish@cs@hasargs1%
+ % report the macro and its arguments:
+ \pgfkeysifdefined{/codeexample/prettyprint/cs/\pgfmanual@loc@TMPa/.@cmd}{%
+ % oh, we have a separate routine for this macro! Ok, use it:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/cs/\pgfmanual@loc@TMPa/.@cmd}}%
+ }{%
+ % use the generic routine:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/cs with args/.@cmd}}%
+ }%
+ % re-insert the backslash:
+ \edef\pgfmanual@loc@TMPa{{\pgfmanual@pretty@backslash\pgfmanual@loc@TMPa}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa #1\pgfeov
+ \else
+ % Oh. We probably got |\pgfkeys| instead of |\pgfkeys{arg}|
+ % re-insert the backslash:
+ \edef\pgfmanual@loc@TMPa{{\pgfmanual@pretty@backslash\pgfmanual@loc@TMPa}}%
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/cs/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa\pgfeov
+ #1\relax% simply typeset any encountered tokens after the control sequence.
+ \fi
+}%
+
+% A user macro which pretty prints a set of keys.
+%
+% If '#1' is NOT an argument for \pgfkeys,
+% \pgfmanualprettyprintpgfkeys will try to recognise at least control
+% sequences (in the same way as usual). Thus, you can even use this
+% method if there *could* be pgfkeys arguments in an automated pretty
+% printing environment.
+%
+% However, '#1' should only have catcode 12 characters with the
+% exception of catcode 13 for newlines, spaces and comments.
+\long\def\pgfmanualprettyprintpgfkeys#1{%
+ \ifpgfmanualprettyenabled
+ \begingroup
+ \pgfmanualprettyprintstyles
+ \pgfmanual@pretty@pgfkeys@loop#1\pgfmanual@EOI
+ \endgroup
+ \else
+ #1%
+ \fi
+}
+
+\def\pgfmanual@pretty@pgfkeys{%
+ \let\pgfmanualprettyprinterhandlecollectedargs=\pgfmanual@pretty@pgfkeys@start
+ \pgfmanualprettyprintercollectupto]{\pgfmanual@pretty@mainloop}%%
+}%
+\long\def\pgfmanual@pretty@pgfkeys@start#1{%
+ [%
+ \pgfmanual@pretty@pgfkeys@loop#1\pgfmanual@EOI
+ ]%
+}%
+% iterates through single tokens, detecting key names and values while
+% it goes.
+\long\def\pgfmanual@pretty@pgfkeys@loop#1{%
+ \def\pgfmanual@loc@TMPa{#1}%
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@EOI
+ \def\pgfmanual@pretty@pgfkeys@loop@NEXT{\relax}%
+ \else
+ \def\pgfmanual@pretty@pgfkeys@loop@NEXT{\pgfmanual@pretty@pgfkeys@loop}%
+ \ifpgfmanualprettycommentactive
+ #1%
+ \else
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL) or comment
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@comma%
+ %\let\pgfmanual@pretty@pgfkeys@loop@NEXT=\pgfmanual@pretty@pgfkeys@checkforEOI
+ ,%
+ \else
+ \ifnum10=\catcode`#1
+ % another white space... I thought they'd have
+ % catcode 13. doesn't matter.
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@lbrace
+ % braces may not occur in the first place -
+ % but there are circumstances where it is
+ % convenient to deal with them here (when
+ % processing arguments of styles)
+ % Do it.
+ #1%
+ \else
+ \ifx\pgfmanual@loc@TMPa\pgfmanual@pretty@rbrace
+ #1%
+ \else
+ % found the beginning of a key!
+ % We will collect the key name into
+ % \toks0.
+ \toks0={}%
+ %
+ % Handle it:
+ % FIXME what if we found an opening brace!?
+ \def\pgfmanual@pretty@pgfkeys@loop@NEXT{\pgfmanual@pretty@pgfkeys@collectkey #1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@pgfkeys@loop@NEXT
+}%
+\def\pgfmanual@pretty@pgfkeys@collectkey#1{%
+ \def\pgfmanual@loc@TMPb{#1}%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@collectkey}%
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@EOI
+ % finish key name.
+ \edef\pgfmanual@loc@TMPb{\the\toks0 }%
+ \ifx\pgfmanual@loc@TMPb\pgfutil@empty
+ \else
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ \fi
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\relax}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@eq
+ % finish key name.
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ % now, we do the same with the value - we collect it into
+ % \toks0.
+ \toks0={}%
+ \def\pgfmanual@pretty@pgfkeys@collectvalue@hasconsumedspaces{0}%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@collectvalue}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@comma
+ % finish key name.
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@loop}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@activenl
+ % finish key name before newline. This is not
+ % necessarily as in TeX, but its simpler here
+ % because we don't need special cases for comments
+ % and we don't need to gobble following white
+ % spaces.
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@loop}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@backslash
+ % This is confusing. I simply try to invoke
+ % the control sequence code and recover as
+ % good as possible. Let's see if that's
+ % useful.
+ \edef\pgfmanual@loc@TMPb{\the\toks0 }%
+ \ifx\pgfmanual@loc@TMPb\pgfutil@empty
+ \else
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ \fi
+ %
+ % we found the start of a control sequence '\command':
+ %
+ % collect the control sequence name into
+ % \pgfmanual@loc@TMPa, but without the backslash:
+ \begingroup
+ \let\pgfmanual@loc@TMPa=\pgfutil@empty
+ \def\afterpgfmanual@pretty@cs{%
+ \endgroup
+ \pgfmanual@pretty@pgfkeys@loop
+ }%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@collectcs@loop}%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@lbrace
+ % Braces in key names are allowed (if they
+ % are not the first character of a key
+ % name)
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{%
+ \toks1={##1}%
+ \edef\pgfmanual@loc@TMPc{%
+ \the\toks0 \pgfmanual@pretty@lbrace \the\toks1
+ \ifpgfmanualprettyprinterarghasunmatchedbraces
+ \else
+ \pgfmanual@pretty@rbrace
+ \fi
+ }%
+ \toks0=\expandafter{\pgfmanual@loc@TMPc}%
+ }%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{%
+ \pgfmanualprettyprintercollectargcount{1}{\pgfmanual@pretty@pgfkeys@collectkey}%
+ #1%
+ }%
+ \else
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@pretty@rbrace
+ \expandafter\pgfmanual@pretty@pgfkeys@processkey\expandafter{\the\toks0 }%
+ #1%
+ \def\pgfmanual@pretty@pgfkeys@collectkey@next{\pgfmanual@pretty@pgfkeys@loop}%
+ \else
+ \toks0=\expandafter{\the\toks0 #1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \pgfmanual@pretty@pgfkeys@collectkey@next
+}%
+\def\pgfmanual@pretty@pgfkeys@collectvalue#1{%
+ \def\pgfmanual@loc@TMPb{#1}%
+ \let\pgfmanual@pretty@pgfkeys@collectvalue@next=\pgfmanual@pretty@pgfkeys@collectvalue
+ \ifx\pgfmanual@loc@TMPb\pgfmanual@EOI
+ % the key value is empty.
+ %\expandafter\pgfmanual@pretty@pgfkeys@processvalue\expandafter{\the\toks0 }%
+ \let\pgfmanual@pretty@pgfkeys@collectvalue@next=\relax
+ \else
+ \def\pgfmanual@pretty@isconsumed{0}%
+ \if\pgfmanual@pretty@pgfkeys@collectvalue@hasconsumedspaces0%
+ \ifnum13=\catcode`#1
+ % we found a white space (space, TAB or NL)
+ #1%
+ \def\pgfmanual@pretty@isconsumed{1}%
+ \else
+ \ifnum10=\catcode`#1
+ % another white space... I thought they'd have
+ % catcode 13. doesn't matter.
+ \def\pgfmanual@pretty@isconsumed{1}%
+ #1%
+ \fi
+ \fi
+ \fi
+ \if\pgfmanual@pretty@isconsumed0%
+ \def\pgfmanualprettyprinterhandlecollectedargs##1{\pgfmanual@pretty@pgfkeys@processvalue{##1}}% the braces will be handled separately.
+ \def\pgfmanual@pretty@pgfkeys@collectvalue@next{%
+ \pgfmanualprettyprintercollectupto,{\afterpgfmanual@pretty@collectargs@finish@value}#1%
+ }%
+ \fi
+ \fi
+ \pgfmanual@pretty@pgfkeys@collectvalue@next
+}%
+\def\afterpgfmanual@pretty@collectargs@finish@value{%
+ \pgfutil@ifnextchar\pgfmanual@EOI{%
+ \pgfmanual@pretty@pgfkeys@loop
+ }{%
+ \pgfmanual@pretty@pgfkeys@loop,% re-insert the gobbled comma here!
+ }%
+}%
+
+{\catcode`\^^M=13 \catcode`\ =13\relax\catcode`\%=13\relax\gdef\pgfmanual@pretty@restorespaces{\def%{\pgfmanual@pretty@percent}\def^^M{\pgfmanual@pretty@space}\def {\pgfmanual@pretty@space}}}
+
+% #1: the key's name
+\def\pgfmanual@pretty@pgfkeys@processkey#1{%
+ \begingroup
+ \pgfmanual@pretty@restorespaces
+ % remember this key name! It is used when we are dealing with
+ % its value later... (if it has a value)
+ \xdef\pgfmanual@pretty@pgfkeys@collectkey@keyname{#1}%
+ \endgroup
+ %
+ % check if it is a handled key. FIXME: this could be done in a
+ % rigorous way! This here assumes that all key handlers start with
+ % '.' and the '.' occurs never right after a '/' otherwise:
+ \def\pgfmanual@loc@TMPa{\pgfutil@in@{/.}}%
+ \expandafter\pgfmanual@loc@TMPa\expandafter{\pgfmanual@pretty@pgfkeys@collectkey@keyname}%
+ \ifpgfutil@in@
+ % split into key name and handler name...
+ \def\pgfmanual@pretty@splitit##1/.##2\relax{%
+ \def\pgfmanual@loc@TMPb{{##1}{.##2}}%
+ }%
+ \expandafter\pgfmanual@pretty@splitit\pgfmanual@pretty@pgfkeys@collectkey@keyname\relax
+ %
+ % report key name AND handler:
+ \def\pgfmanual@loc@TMPa{\pgfkeysvalueof{/codeexample/prettyprint/key name with handler/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPa\pgfmanual@loc@TMPb\pgfeov
+ \else
+ % report key name ...
+ \def\pgfmanual@loc@TMPa{\pgfkeysvalueof{/codeexample/prettyprint/key name/.@cmd}}%
+ \expandafter\pgfmanual@loc@TMPa\pgfmanual@pretty@pgfkeys@collectkey@keyname\pgfeov
+ \fi
+}
+\def\pgfmanual@pretty@pgfkeys@processvalue#1{%
+ % report or process the value, depending on the keyname.
+ % After all, it *may* be a style which needs to be pretty printed
+ % as well.
+ \pgfkeysifdefined{/codeexample/prettyprint/key value/\pgfmanual@pretty@pgfkeys@collectkey@keyname/.@cmd}{%
+ % oh, we have a separate routine for this macro! Ok, use it:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/key value/\pgfmanual@pretty@pgfkeys@collectkey@keyname/.@cmd}}%
+ }{%
+ % use the generic routine:
+ \edef\pgfmanual@loc@TMPb{\noexpand\pgfkeysvalueof{/codeexample/prettyprint/key value/.@cmd}}%
+ }%
+ \edef\pgfmanual@loc@TMPa{{\pgfmanual@pretty@pgfkeys@collectkey@keyname}}%
+ \expandafter\pgfmanual@loc@TMPb\pgfmanual@loc@TMPa{#1}\pgfeov
+}
+
diff --git a/graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.pdf b/graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.pdf
new file mode 100644
index 0000000000..df00646802
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.tex b/graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.tex
new file mode 100644
index 0000000000..bbda74f013
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/tikz-dependency-doc.tex
@@ -0,0 +1,1684 @@
+% Copyright 2011 by Daniele Pighin
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/tikz-dependency/licenses/LICENSE for more details.
+
+\documentclass[a4paper]{ltxdoc}
+\def\pgfautoxrefs{1}
+
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage[utf8]{inputenc}
+
+\usepackage{makeidx}
+\makeindex
+
+\usepackage{hyperref}
+\hypersetup{%
+ pdftitle={The tikz-dependency package v2.0},
+ pdfsubject={A latex package based on tikz to draw dependency graphs},
+ pdfauthor={Daniele Pighin},
+ pdfkeywords={dependency parses, latex, tikz, pgf},
+ colorlinks=true, % use true to enable colors below:
+ linkcolor=blue,%red,
+ filecolor=blue,%magenta,
+ urlcolor=blue,%cyan,
+ citecolor=blue,
+ pdfborder=0 0 0,
+}
+\usepackage{tikz}
+\makeatletter
+\input{pgfmanual.code}
+\makeatother
+%\usepackage{pgfmanual}
+\usepackage{calc} % NEEDED by pgfmanual-en-macros
+\input{pgfmanual-en-macros}
+
+\usepackage{tikz-dependency}
+\usetikzlibrary{spy}
+%\usepackage{palatino}
+
+\newcommand{\pipeescape}{\catcode`\|=12}
+
+\newcommand{\cmdname}[1]{\texttt{\color{red!75!black}\detokenize{#1}}}
+
+\def\pkgname{\tikzname{}\texttt{-dependency}}
+
+\newcommand{\options}[1][key-value-pairs]{\opt{\oarg{#1}}}
+
+\newcommand{\note}[2]{
+ \begin{quote}
+ \textbf{#1}\par
+ #2
+ \end{quote}
+}
+
+\title{The \pkgname{} package}
+\author{\normalsize Daniele Pighin\\\footnotesize{\href{mailto:daniele.pighin@gmail.com}{\texttt{daniele.pighin@gmail.com}}}\\\footnotesize{\url{http://danielepighin.net/cms}}}
+\date{Version 1.1, January 2012}
+
+\makeatletter
+\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8}
+\def\tikzcd@bgcolor{graphicbackground}
+\makeatother
+
+\setlength{\parskip}{1ex}
+\setlength{\parindent}{0pt}
+
+\newcommand{\displayarrow}[2][]{\texttt{#2} & yelds \tikz[baseline=-2.5pt] \draw[#2-#2, line width=0.44pt, #1] (0,0) -- (1,0);}
+\newcommand{\displayarrowstyle}[2][]{\texttt{#2} & yelds \tikz[baseline=-2.5pt] \draw[/commutative diagrams/current arrows, #2, #1] (0,0) -- (0.4,0);}
+
+\begin{document}
+
+\maketitle
+
+If your work is in any way connected with linguistics or natural
+language processing, chances are high that the moment will come when you will have
+to draw a dependency graph:
+\begin{center}
+\resizebox{\linewidth}{!}{
+{\pipeescape%
+ \begin{dependency}[label style={font=\bfseries,fill=black,text=white}]
+ \tikzstyle{root}=[fill=yellow, text=black, font=\bfseries]
+ \tikzstyle{postag}=[font=\tiny]
+ \tikzset{arg/.style={rounded corners,inner sep=.4ex,top color=#1!60,draw=#1!60!black}}
+ \tikzset{rolelab/.style={inner sep=1ex,top color=#1!60,draw=#1!60!black,text=black}}
+ \begin{deptext}[column sep=.4cm, row sep=.5ex, row 1/.style = postag]
+ NN \& MD \& VB \& PRP\$ \& NN \& RBR \\
+ \pkgname \& will \& make \& your \& life \& easier \\
+ \end{deptext}
+ \deproot[label style=root]{3}{root}
+ \depedge{3}{1}{nsubj}
+ \depedge{3}{2}{aux}
+ \depedge{5}{4}{poss}
+ \depedge{3}{5}{dobj}
+ \depedge{3}{6}{advmod}
+ \wordgroup[arg=green]{2}{3}{3}{pred}
+ \wordgroup[arg=red]{2}{1}{1}{a0}
+ \wordgroup[arg=blue]{2}{4}{6}{a1}
+ \groupedge[edge below,red!60!black,label style={rolelab=red}]{pred}{a0}{ARG0}{5ex}
+ \groupedge[edge below,blue!60!black,label style={rolelab=blue}]{pred}{a1}{ARG1}{5ex}
+ \end{dependency}%
+} % pipeescape
+\quad
+\begin{dependency}[theme = simple]
+ \begin{deptext}[column sep=1em]
+ A \& hearing \& is \& scheduled \& on \& the \& issue \& today \& . \\
+ \end{deptext}
+ \deproot{3}{ROOT}
+ \depedge{2}{1}{ATT}
+ \depedge[edge start x offset=-6pt]{2}{5}{ATT}
+ \depedge{3}{2}{SBJ}
+ \depedge{3}{9}{PU}
+ \depedge{3}{4}{VC}
+ \depedge{4}{8}{TMP}
+ \depedge{5}{7}{PC}
+ \depedge[arc angle=50]{7}{6}{ATT}
+ \end{dependency}
+} % resizebox
+\end{center}
+
+\begin{center}
+\resizebox{\linewidth}{!}{%
+\depstyle{inner bubble}{draw=gray!80, minimum height=20pt, rounded corners=8pt, inner sep=2pt, top color=gray!40, bottom color=white}
+\depstyle{outer bubble}{draw=gray!80, minimum height=26pt, rounded corners=10pt, inner sep=5pt, top color=white, bottom color=gray!40}
+\depstyle{ungrammatical}{edge below, edge style = {ultra thick, red}, label style = {below, text=red}, text only label}
+\begin{dependency}[hide label, arc edge,
+ edge vertical padding=-2pt,
+ group style=outer bubble]
+ \begin{deptext}[column sep=1.4em]
+ a \& student \& whose \& mother \& and \& his \& father \& peter \& knows \\
+ \end{deptext}
+ \wordgroup{1}{3}{7}{chubby}
+ \wordgroup{1}{1}{2}{first} \depedge{2}{1}{}
+ \wordgroup[inner bubble]{1}{3}{4}{second} \depedge{4}{3}{}
+ \wordgroup[inner bubble]{1}{6}{7}{third} \depedge{7}{6}{}
+ \wordgroup{1}{8}{8}{fourth}
+ \wordgroup{1}{9}{9}{fifth}
+ \groupedge{fifth}{fourth}{}{0}
+ \groupedge[ungrammatical]{first}{second}{ungrammatical}{.5cm}
+ \groupedge[edge above]{second}{fifth}{}{1.5cm}
+ \groupedge[edge above]{fifth}{chubby}{}{1cm}
+\end{dependency}%
+\quad%
+\begin{dependency}[edge style={green!60!black,very thick},
+ label style={fill=blue!60,font=\bfseries,text=white}]
+ \tikzstyle{POS}=[font=\footnotesize\bfseries,text=blue!60!black]
+ \tikzstyle{word}=[draw=blue!60!black, shade, text=black,
+ rotate=45, anchor=north east, inner sep=1ex,
+ font=\normalsize, top color=blue!60, rounded corners]
+ \begin{deptext}[column sep=.5cm, row sep=0, nodes={POS}]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ \node [word] {My}; \&
+ \node [word] {dog}; \&
+ \node [word] {also}; \&
+ \node [word] {likes}; \&
+ \node [word] {eating}; \&
+ \node [word] {sausage}; \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge[edge style={blue!60!black,ultra thick},
+ label style={fill=green!60,font=\bfseries,text=black, rotate=10}]{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}%
+} %resizebox
+\end{center}
+
+\tikzname{} already has all the needed facilities to draw and style a dependency
+graph, but diving into the documentation just to understand how to draw one or two
+trees may turn out to be rather overwhelming.
+
+\pkgname{} is pretty flexible, and it can easily be used to draw quite complex graphs around sequences
+of tokens, not necessarily related to dependency parsing or to language, as shown in this useless toy example:
+
+\begin{center}
+{\pipeescape
+\begin{dependency}
+ \tikzstyle{default}=[fill=white, draw=black, text = blue, solid]
+ \tikzstyle{pinky}=[fill=pink, draw=pink!60!black, text = black, solid]
+ \tikzstyle{wasp}=[fill=black, draw=orange, text = yellow, solid]
+ \tikzstyle{cooltext}=[draw=#1!60!black, thick, shade, top color=#1!60, bottom color=white, rounded corners = 2pt]
+ \depkeys{label style=default, edge below, font=\footnotesize}
+ \begin{deptext}[column sep = 5pt, nodes={cooltext=orange}]
+ You \&[.3cm] can \&[.8cm] |[cooltext=blue]| easily \& exaggerate \& if \& you \& feel \& like \&[1cm] doing \& so \\
+ \end{deptext}
+ \depedge[hide label, dotted]{1}{2}{}
+ \depedge{1}{3}{link1}
+ \depedge[edge unit distance=1.25ex]{1}{10}{link2}
+ \depedge[edge above, label style={pinky}]{3}{2}{link3}
+ \depedge[edge above]{8}{6}{link4}
+ \depedge[edge unit distance=5ex, edge above, dotted]{8}{6}{or this?}
+ \depedge[label style={inner sep=1.5ex, scale=1.1}]{8}{9}{$\frac{e^{f(x)}}{g(x)}$}
+ \depedge[edge unit distance=4ex, label style={wasp}]{8}{10}{link6}
+ \depedge{5}{8}{link7}
+ \node (comment) [above of = \wordref{1}{1}] {Look at this one!};
+ \draw [->,out=-90,in=135] (comment) to (\wordref{1}{2});
+\end{dependency}
+ }
+\end{center}
+
+Hopefully, this package will make your life a little bit easier, and allow you to draw a
+dependency graph without too much \tikzname{} prior knowledge.
+It will also allow you to draw cute graphs, which won't increase your impact
+factor but may help making your papers look more pleasant and elegant.
+
+\thispagestyle{empty}
+
+\newpage
+
+\tableofcontents
+
+\thispagestyle{empty}
+
+\newpage
+
+\section{Installation}\label{sec:installation}
+
+The simplest and fastest way to get things working is to copy the style file
+|tikz-dependency.sty| in the root directory of your latex project.
+
+Alternatively, you can install it as you would install any other \LaTeX\ package, by copying it in some directory searched by \LaTeX{} and running |texhash|.
+The |texmf| directory under your home directory is most likely one of such directories (even though there are chances that it does not exist).
+If there is no |texmf| directory under your home, than create it:
+\begin{codeexample}[code only]
+$ cd ~
+$ mkdir -p texmf
+\end{codeexample}
+
+Extract the \pkgname{} under this directory:
+\begin{codeexample}[code only]
+$ cd texmf
+$ tar xvzf /path/to/tikz-dependency.tar.gz
+\end{codeexample}
+
+Run |texhash| to let \LaTeX{} know about the newly installed package:
+\begin{codeexample}[code only]
+$ texhash texmf
+\end{codeexample}
+That should do it. Refer to \LaTeX\ documentation for more details or in case of non-standard \LaTeX{} installations.
+
+Please, note that PGF/\tikzname{} version 2.10 is required for \pkgname{} to work as expected.
+
+If \tikzname{} is not installed on your system, you can easily install it in the same way.
+Visit \url{http://sourceforge.net/projects/pgf/} with your favorite browser, download the latest version of the package and uncompress in some of the directories searched by \LaTeX{}. The |texmf| directory under your home directory should be a good place to start:
+\begin{codeexample}[code only]
+$ cd ~
+$ unzip /path/to/pgf_version.zip -d texmf
+\end{codeexample}
+Run |texhash|:
+\begin{codeexample}[code only]
+$ texhash texmf
+\end{codeexample}
+Everything should be fine now. For more detailed instructions on how to install \tikzname{}, please refer to its manual at \url{http://ftp.gui.uva.es/sites/ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf}.
+
+To use \pkgname{}, the first thing that you will need to do is to require it in your preamble:
+\begin{codeexample}[code only]
+\usepackage{tikz-dependency}
+\end{codeexample}
+\pkgname{} will automatically load \tikzname{} and its other requirements.
+
+
+\section{A step-by-step introduction}\label{sec:stepbystep}
+
+In this section you will see how simple it is to draw a dependency graph. We will go throw all the required steps one by one, from the creation of a suitable environment, to the actual drawing of the graph, to the optional steps that can make your graph look nicer.
+
+We will start by trying to reproduce the following example:
+
+\begin{center}
+ \begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \end{dependency}
+\end{center}
+
+But first let's agree on some terminology. I will call \textbf{words}\index{terminology!word} the tokens of the sentence, and \textbf{dependencies}\index{terminology!dependency} the relations between words. A dependency actually consists of two entities: the \textbf{edge}\index{terminology!edge} between the two words and its \textbf{label}\index{terminology!label}, which is the type of the relation.
+
+\subsection{An environment to draw dependency graphs}
+
+The first step will be to create a suitable environment to draw your dependency graphs.
+
+\begin{environment}{{dependency}\options}
+ All the commands and configuration keys that you will see in this document are available within a |dependency| environment. Since it is an overloaded version of |tikzpicture|, all the things that you would do within a |tikzpicture| environment (such as drawing paths, edges, nodes, whatever) you can also do within a |dependency|. At the moment, the only reason why you'd rather use a |dependency| environment is because you can pass it some optional configuration keys (i.e., \options) that can affect the style of the whole dependency graph. The documentation of these configuration keys is scattered around the documentation, though many of them are described in Section~\ref{sec:styling}.
+\end{environment}
+
+So, to draw a new dependency tree you will generally start by writing something like this:
+
+\begin{codeexample}[]
+\begin{dependency}
+ % The code to actually draw the
+ % dependency graph will go here
+\end{dependency}
+\end{codeexample}
+
+At this stage it looks pretty empty, so let's get started and fill it up with some contents.
+
+\subsection{Writing the sentence}
+
+\begin{environment}{{deptext}\options}
+ The |deptext| environment is used to lay out the words of the parsed sentence.
+
+ Within |deptext|, you will write a sentence separating each word with \cmdname{\&}\index{\texttt{\textbackslash\&}}\index{word separator}, similarly to what you would do in a |tabular| environment. Please, not that in this
+ case the separator is actually a \LaTeX\ command (i.e., a backslash followed by an ampersand), and
+ not just a simple ampersand. To terminate the sentence, add the command \cmdname{\\}\index{\texttt{\textbackslash\textbackslash}}\index{line separator} (i.e., two consecutive backslashes) after the last word, just as you would do to end a row in a table. The \options\ can bee used to change the way the sentence looks, and more details about it are coming soon.
+\end{environment}
+
+After adding the |deptext| environment with the text of our example sentence, the incomplete dependency graph would look like this:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+\end{dependency}
+\end{codeexample}
+
+For the \tikzname{}-savvy user, |deptext| is just a wrapper around \tikzname{}'s own matrix environment. The matrix is a matrix of nodes, with nodes in empty cells and some default styling. All the \options\ passed to the |deptext| are first parsed by \pkgname, then handed to the underlying |matrix|. If you know what you are doing and you want more control on the final result, you can have it.
+
+\subsection{Adding dependencies}\label{sec:adding-dependencies}
+
+\begin{command}{\depedge\options\marg{from-word}\marg{to-word}\marg{label}}
+
+This command is used to add dependencies between words. The \options\ argument is optional, and it can be used for styling the edge and its label (again, we will come to that part shortly). The three
+mandatory arguments define the origin and destination of the dependency edge, and the label of the
+dependency. The arguments \marg{from-word} and \marg{to-word} are the offsets of the words to be linked, counting from 1. \marg{label} is just any string, to be used as a label for the edge.
+|\depedge| commands should be issued \emph{after} closing the |deptext| environment.
+\end{command}
+
+To draw an edge between the words \emph{eating} and \emph{sausage} in the example, you would set \marg{from-word} to 5, \marg{to-word} to 6 and \marg{label} to \emph{dobj}. After adding this first edge, the example looks as follows:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+By repeating this operation for all the dependencies in the sentence, we end up with a first complete version
+of the dependency tree:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+As you can see, \pkgname{} automatically does some basic routing of the edges of the graph, by drawing
+dependency edges higher or lower depending on how far apart the two words are. The graph looks decent at
+this stage, but it looks a little bit cramped and it could definitely use some more space between the words.
+
+\subsection{Getting word spacing right}
+
+You can either add some space between all words, or you can add some space between two specific words. Let's see how it is done.
+
+\subsubsection{Setting the space between every two words}
+
+When I first introduced the |deptext| environment, I said in passing that it can take some optional arguments. Since |deptext| is a wrapper around \tikzname{}'s own |matrix|, if you know some \tikzname{} you can pass to |deptext| any key-value pairs that |matrix| would understand. If you have absolutely no idea of how optional parameters (key-value configuration options) work in \tikzname{}, you are warmly invited to take a look at Appendix~\ref{sec:tikz}. If you do not understand what is going on, you will be able to copy the example but your ability to exploit the flexibility of the package will be largely impaired.
+
+As far as we are concerned here, what we want to discuss is the |/tikz/column sep| configuration key, which can be used to add more space between all the words in the sentence.
+
+In this documentation, I will always use the fully qualified name of a key when documenting it (see, for example, the description of |/tikz/column sep| immediately below. Anyway, you are not required to use the fully qualified name of keys when using them, and using their base name (e.g., |column sep|) is sufficient. In fact, in the examples I will generally use the shorter form.
+
+\begin{key}{/tikz/column sep=\meta{length} (default 0cm)}
+If you want to add, say, 0.2cm between every two words, you can do it so by passing |column sep=0.2cm| as the optional argument of the |deptext| environment.
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+It looks better already, but the fact that some dependency labels are longer than the horizontal segment of the edge doesn't look to nice. So, we could increase the space between all the words, for example to 0.7cm:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.7cm]
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\end{key}
+
+Now the labels are fine, but the words are a little bit too far apart, at least for my taste. So I would rather go back to |/tikz/column sep=0.2|, and find a more precise way of spacing only the problematic word pairs. In this case, they are adjacent words connected by a dependency with a long label, i.e., \emph{My/dog}, \emph{also/likes} and \emph{likes/eating}.
+
+\subsubsection{Spacing word individually}
+
+Additional space between two words can be added by using the optional argument of the \cmdname{\&} command that we used to separate words. For example, writing \cmdname{\&}|[0.5cm]| will add 0.5cm to the default word spacing set with via the |column sep| option. If we take care of the three problematic pairs individually, we can obtain something like this:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\subsection{Adding a root node}
+
+If you want to add a \index{root node} to the dependency graph, you can do so by means of the |\deproot| command.
+
+\begin{command}{\deproot\options\marg{root-offset}\marg{label}}
+ It is basically a variant of |\depedge|. Instead of connecting two words, it will create a node labeled \meta{label} just above the word having offset \meta{root-offset}, and an arrow between them. In our example, the root word is the verb \emph{likes}, which occupies the fourth position:
+\end{command}
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \deproot{4}{root}
+\end{dependency}
+\end{codeexample}
+
+This completes the crash course on the basics of dependency graph drawing. The next sections will tell you how to control edge positioning, how to build more complicated graphs with several layers of text, how to style the graphs to your liking and how to include your graphs in larger pictures.
+
+\section{Multiple layers of text}
+
+When drawing a dependency graph it is common to have a layer of part-of-speech (POS) tags just above the words. Achieving this with \pkgname{} is pretty straightforward. Since the |deptext| environment is already a matrix, all you have to do is to add another row of text to the matrix:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.5cm]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+In this case, we have added the POS tags on top of the words. Of course, we could have also added them below:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \& sausage \\
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\begin{key}{/tikz/row sep=\meta{length} (default 0cm)}
+ Similarly to how you can increase the space between columns in a matrix, you can also increase inter-row spacing. For example, to add 0.5ex between every two rows you can add |row sep=0.5ex| to the optional argument of the |deptext| environment:
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.7cm, row sep=.5ex]
+ My \& dog \& also \& likes \& eating\\
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG\\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \qquad
+\end{dependency}
+\quad
+\begin{dependency}
+ \begin{deptext}[column sep=.7cm, row sep=2ex]
+ My \& dog \& also \& likes \& eating\\
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG\\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+\end{key}
+
+\section{More control over edges}
+
+In Section~\ref{sec:adding-dependencies} I hinted to the fact that the height of the horizontal segment of a dependency edge is proportional to the distance between the linked words. As you may have already guessed, this can be a problem for \index{long dependencies}. Consider the following example, in which I added some more words and a long dependency:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \& and \& more \& words \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \deproot{4}{root}
+ \depedge{9}{1}{rather-long}
+\end{dependency}
+\end{codeexample}
+
+To decide how high a dependency should be drawn, \pkgname{} uses the formula $s\vert x-y \vert$, where $x$ and $y$ are the offsets of the two words, and $s$ is the value of the optional parameter |/depgraph/edge unit distance|.
+
+\begin{key}{/depgraph/edge unit distance=\meta{length} (default 3ex)}
+
+ This key represents the distance of the horizontal segment of the edge between two adjacent words. That is, if two words are 5 positions apart, the distance of the edge will be 5 times the value of |/depgraph/edge unit distance|. Whenever you draw a edge with |\depedge| you can override this value as part of the optional argument of the command. For example, by changing its value in the previous and setting it to |1.5ex| it is possible to halve the total height of the problematic edge:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \& and \& more \& words \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \deproot{4}{root}
+ \depedge[edge unit distance=1.5ex]{9}{1}{rather-long}
+\end{dependency}
+\end{codeexample}
+
+|/depgraph/edge unit distance| can also be used to tune the distance of the root node\index{root node!distance} from the sentence. By default, the root node is set at a distance equal to 4 times the value of the parameter. By changing its value you can bring it closer of further:
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] \dots \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \deproot[edge unit distance=4ex]{4}{root}
+\end{dependency}
+\quad
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] \dots \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \deproot[edge unit distance=2ex]{4}{root}
+\end{dependency}
+\end{codeexample}
+
+\end{key}
+
+\begin{key}{/depgraph/edge height=\meta{length} (default 0pt)}
+
+ \textit{[New in version 1.2]}
+ As an alternative, |edge height| allows you to set explicitly the height of an edge.
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \& and \& more \& words \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \deproot{4}{root}
+ \depedge[edge height=12ex]{9}{1}{rather-long}
+\end{dependency}
+\end{codeexample}
+
+Setting |edge height| overrides the automatic calculation of the edge height. If you set |edge height| at the |dependency| level, all edges will be drawn at the same height, e.g.:
+
+\begin{codeexample}[]
+\begin{dependency}[edge height=2cm]
+ \begin{deptext}[column sep=0.2cm]
+ My \&[.5cm] dog \& also \&[.7cm] likes \&[.4cm] eating \& sausage \& and \& more \& words \\
+ \end{deptext}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \deproot{4}{root}
+\end{dependency}
+\end{codeexample}
+
+\noindent so maybe this is something that you will want to do only in very special cases.
+
+\end{key}
+
+At this point, you may be wondering: why are we always drawing dependencies above the text? Indeed, turning links around is not only possible, but also quite easy, and the next key-value pairs allow you to control this behaviour.
+
+\begin{keylist}{/depgraph/edge above=\meta{boolean} (default true),/depgraph/edge below=\meta{boolean} (default false)}
+ These two keys control the position of the links, which can be drawn either above or below the layer(s) of text. You can pass any of them as part of the optional arguments of the |dependency| environment, and change the position of all the links in the graph at once. Writing the name of the key is sufficient, so writing |edge below=true| or just |edge below| produces the same result:
+\begin{codeexample}[]
+\begin{dependency}[edge below]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \& sausage \\
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+|/depgraph/edge below| and |/depgraph/edge above| can also be used to control the positioning of individual edges. In this case, you won't pass the keys to the |dependency| environment, but instead to a specific |\depedge| or |\deproot| whose behaviour you want to modify.
+Say that you wanted all the edges to be drawn below, but the \emph{root} and \emph{poss} edges should be on top. You can pass |/depgraph/edge below| to |dependency|, and |/depgraph/edge above| to the two |\depedge|s to be placed above:
+\begin{codeexample}[]
+\begin{dependency}[edge below]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \& sausage \\
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ \end{deptext}
+ \deproot[edge above]{4}{root}
+ \depedge[edge above]{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+\end{keylist}
+
+Other than |/depgraph/edge unit distance|, three more parameters can affect the way edges are drawn. As shown in Figure\ref{fig:edgedrawingparameters}, they control several aspects related to the spacing among edges and between edges and text, plus the inclination of the non-horizontal segments of the edge. All these properties can be set both at the |dependency| level (which will affect all the edges in the graph) or at the |\depedge| level, which will only affect individual links.
+
+\begin{figure}
+\begin{center}
+\def\zw{10cm}
+\def\zh{5cm}
+\def\zx{3cm}
+\def\zy{-3.5cm}
+\begin{dependency}[spy using overlays={magnification=5, width=\zw, height=\zh}]
+ \tikzset{postag/.style = {font=\tiny}}
+ \begin{deptext}[column sep=.5cm, row sep=.1em, row 1/.style = postag]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \spy [draw=green, pink!80!black, connect spies]
+ on ($(\wordref{1}{4}.north) + (0,1ex)$)
+ in node [draw] at (\zx,\zy);
+ \node (bl) at ($(\zx,\zy) - .5*(\zw,\zh)$) {};
+ \node (tr) at ($(\zx,\zy) + .5*(\zw,\zh)$) {};
+ \draw[step=.2cm, help lines, pink] (bl) grid (tr);
+ \draw[step=1cm, pink] (bl) grid (tr);
+ \draw [blue, thick, |-|] ($(bl)+(4.26,1.5)$)
+ -- node [below left,font=\bfseries\ttfamily\small] {edge horizontal padding} ++(.75,0);
+ \draw [blue, thick, |-|] ($(bl)+(5.7,4.1)$)
+ -- node [above,font=\bfseries\ttfamily\small] {edge slant} ++(.6,0);
+ \draw [blue, thick, dotted] ($(bl)+(5.7,1.8)$) -- ++(0,2.3);
+ \draw [blue, thick, |-|] ($(bl)+(6.1,1.7)$)
+ -- node [right,font=\bfseries\ttfamily\small] {edge vertical padding} ++(0,-.7);
+\end{dependency}
+\end{center}
+\caption{Edge-drawing parameters.}\label{fig:edgedrawingparameters}
+\end{figure}
+
+\begin{key}{/depgraph/edge slant=\meta{length} (default 3pt)}
+ |/depgraph/edge slant| controls the slant of the diagonal segments in a dependency edge. As shown in Figure~\ref{fig:edgedrawingparameters}, what it actually controls is the horizontal offset between the initial (final) of the edge and its first (second) corner. By default it is set to |3pt|, which makes the segments just slightly sloped. By setting it to |0|, you can make the lateral segments completely vertical; by increasing its value you can make the edges look less slender.
+\begin{codeexample}[]
+\begin{dependency}[edge slant=0] %edge slant=0
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\quad
+\begin{dependency}[edge slant=10pt] %edge slant=10pt
+ \begin{deptext}[column sep=.3cm]
+ My \&[.4cm] dog \& also \&[.7cm] likes \&[.5cm] eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+\end{key}
+
+
+\begin{key}{/depgraph/edge horizontal padding=\meta{length} (default 4pt)}
+ \pkgname{} employs a very simple strategy to avoid edges outgoing from and incoming into a word to start/terminate on the same spot, thus making it easier to understand the direction of a dependency. The algorithm is very simple: all incoming links arrive in the middle of a word; all outgoing links heading left leave the node from a point which is a little bit to the left; all those heading right leave from a spot a little bit to the right. |/depgraph/edge horizontal padding| is the value of this ``little bit''. By setting it to |0|, all the edges will come and go from the same spot in the middle of the word. By increasing its value, the incoming and outgoing edges on a word will look more apart.
+\begin{codeexample}[]
+\begin{dependency}[edge horizontal padding=0] %edge horizontal padding=0
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\quad
+\begin{dependency}[edge horizontal padding=10pt] %edge horizontal padding=10pt
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \&[.2cm] likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/depgraph/edge vertical padding=\meta{length} (default 0ex)}
+ |/depgraph/edge vertical padding| is the extra distance between a word and incoming/outgoing edges. By increasing (decreasing) its value, you can send the edges further (bring them closer) to the text.
+\begin{codeexample}[]
+\begin{dependency}[edge vertical padding=-.5ex] %edge vertical padding=-.5ex
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\quad
+\begin{dependency}[edge vertical padding=1ex] %edge horizontal padding=1ex
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \&[.2cm] likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+\end{key}
+
+It may be worth repeating that even though you will generally want to set this properties at the |dependency| level, you can very well set them individually for each edge. And of course, you can combine them with all the properties that we saw before (e.g., |/depgraph/edge below|):
+\begin{codeexample}[]
+\begin{dependency}[edge vertical padding=.5ex]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \&[.3cm] likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge[edge vertical padding=0]{2}{1}{poss}
+ \depedge[edge below, edge vertical padding=.3cm]{4}{2}{nsubj}
+ \depedge[edge horizontal padding=10pt]{4}{3}{advmod}
+ \depedge[edge slant=0]{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+
+\begin{keylist}[/depgraph]{arc edge=\meta{boolean} (default false),segmented edge=\meta{boolean} (default true)}
+ This key allows you to switch between the default, fancier edge shape (|/depgraph/segmented edge|) and the traditional arc-shaped edges used in dependency parsing literature. Can be used either within |dependency| (affect all the edges in the graph) or individual |\depedge| commands. Local overrides are also possible (as shown in the rightmost example).
+\begin{codeexample}[]
+\begin{dependency}[arc edge]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\quad
+\begin{dependency}[segmented edge]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \&[.2cm] likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge[arc edge]{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+\end{keylist}
+
+\begin{key}{/depgraph/arc angle=\meta{decimal} (default 60)}
+ When using |/depgraph/arc edge|, this key controls the angle with which edges enter and exit the nodes. It has no effect when the edge is drawn using |/depgraph/segmented edge|.
+\begin{codeexample}[]
+\begin{dependency}[arc edge, arc angle=80]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\quad
+\begin{dependency}[arc edge, arc angle = 40]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \&[.2cm] likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/depgraph/text only label=\meta{boolean} (default false)}
+ At least in my opinion, heavily drawn and filled labels don't look very well with |arc edge|. This flag allows you to show only the text of the label, without drawing the node around it. To prevent the label to be drawn just over the edge line, you may want to add either |above| or |below| to the |label style|, as in this example:
+\begin{codeexample}[]
+ \begin{dependency}[arc edge, arc angle=80, text only label, label style={above}]
+ \begin{deptext}[column sep=.7cm]
+ My \& dog \& also \& likes \& eating \\
+ PRP\$ \& NN \& RB \& VBZ \& VBG \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge[label style={below}]{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+\end{dependency}
+\end{codeexample}
+\end{key}
+
+\begin{keylist}[/depgraph]{edge start offset x=\meta{length} (default 0),edge end offset x=\meta{length} (default 0)}
+ When using arc edges, some edges may overlap as in the following example:
+\begin{codeexample}[]
+\begin{dependency}[theme = simple]
+ \begin{deptext}[column sep=1em]
+ A \& hearing \& is \& scheduled \& on \& the \& issue \& today \& . \\
+ \end{deptext}
+ \deproot{3}{ROOT}
+ \depedge{2}{1}{ATT}
+ \depedge{2}{5}{ATT}
+ \depedge{3}{2}{SBJ}
+ \depedge{3}{9}{PU}
+ \depedge{3}{4}{VC}
+ \depedge{4}{8}{TMP}
+ \depedge{5}{7}{PC}
+ \depedge[arc angle=50]{7}{6}{ATT}
+\end{dependency}
+\end{codeexample}
+
+These two keys allow you to shift the start/end point of the edge horizontally by the specified amount, so as to untangle the graph:
+
+\begin{codeexample}[]
+\begin{dependency}[theme = simple]
+ \begin{deptext}[column sep=1em]
+ A \& hearing \& is \& scheduled \& on \& the \& issue \& today \& . \\
+ \end{deptext}
+ \deproot{3}{ROOT}
+ \depedge{2}{1}{ATT}
+ \depedge[edge start x offset=-6pt]{2}{5}{ATT}
+ \depedge{3}{2}{SBJ}
+ \depedge{3}{9}{PU}
+ \depedge{3}{4}{VC}
+ \depedge{4}{8}{TMP}
+ \depedge{5}{7}{PC}
+ \depedge[arc angle=50]{7}{6}{ATT}
+\end{dependency}
+\end{codeexample}
+
+\end{keylist}
+
+\section{Node groups and group linking}
+
+Another thing that you may want to do is to annotate relations between groups of nodes. I added this functionality thinking about semantic parsing, so that it would be possible to annotate on the same graph the syntactic and semantic layers of a sentence. You can think of many other ways of exploiting the functionality and use it for your own specific needs. Two new commands can be used to define word groups and to connect them.
+
+\begin{command}{\wordgroup\options\marg{row-offset}\marg{word-offset-beg}\marg{word-offset-end}\marg{gid}}
+
+ This command creates a group spanning the words in the \marg{row-offset}-th row of the matrix from position \marg{word-offset-beg} to position \marg{word-offset-end}. \marg{gid} is a unique identifier for the group, that will be used to connect groups. From \tikzname{}' point of view, it is just the name of the node enclosing the group, so you can directly use it as you would use any other node.
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ % group on 2nd row, from word 4 to word 4, labeled "pred"
+ \wordgroup{2}{4}{4}{pred}
+ % group on 2nd row, from word 1 to word 2, labeled "a0"
+ \wordgroup{2}{1}{2}{a0}
+ % group on 2nd row, from word 5 to word 6, labeled "a1"
+ \wordgroup{2}{5}{6}{a1}
+\end{dependency}
+\end{codeexample}
+\end{command}
+
+\begin{command}{\groupedge\options\marg{from-gid}\marg{to-gid}\marg{label}\marg{height}}
+
+ This command draws an edge with label \marg{label} from the group identified with \marg{from-gid} to the group identified \marg{to-grid}. The horizontal segment of the edge will be \marg{height} distant from the words. Just as |\depedge|, also |\groupedge| honors the global edge positioning set via |dependency|. Also in this case, you can use the keys |/depgraph/edge below| and |/depgraph/edge above| to override the directive locally. More generally, all the key-value pairs that can be passed to |\depedge| (e.g., |edge slant|) can also be used with |\groupedge|. The two macros actually do the same thing, with the difference that |\depedge| automatically calculates a default height for the edge based on the word-distance between its endpoints.
+\begin{codeexample}[]
+ \begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \wordgroup{2}{4}{4}{pred}
+ \wordgroup{2}{1}{2}{a0}
+ \wordgroup{2}{5}{6}{a1}
+ \groupedge[edge below]{pred}{a0}{ARG0}{4ex} % pred -> a0 (ARG0, 4ex)
+ \groupedge[edge below]{pred}{a1}{ARG1}{6ex} % pred -> a1 (ARG1, 6ex)
+\end{dependency}
+\end{codeexample}
+\end{command}
+
+\section{Styling text, edges and labels}\label{sec:styling}
+
+This section covers the ways in which you can customize the look of the building blocks of the dependency graph: words, groups, edges and edge labels. Styling requires some basic knowledge of \tikzname{} styling facilities. For those who really don't want to read to read the glorious manual of \tikzname{}\footnote{\url{http://ftp.gui.uva.es/sites/ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf}} (you really should, for your own sake), in Appendix~\ref{sec:tikz} I do my best to try to summarize a minimum of information that should be enough to get you started.
+
+\subsection{Using themes}
+
+\index{themes}\index{theming}The simplest way to change the look and feel of your dependency graphs is to use a pre-defined \emph{theme}.
+
+\begin{key}{/depgraph/theme=\meta{theme name} (default default)}
+ By passing this option to |dependency|, you can completely change the appearence of the graphs. At the moment of writing, the following five themes have been defined: |default|, |simple|, |night|, |brazil|, |grassy|, |iron|, |copper|. They look like this:
+
+\begin{codeexample}[]
+\begin{dependency}[theme=default]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{dependency}[theme=simple]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{dependency}[theme=night]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{dependency}[theme=brazil]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{dependency}[theme=grassy]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{dependency}[theme=iron]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{dependency}[theme=copper]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+\end{key}
+
+\begin{keylist}[/depgraph]{edge theme=\meta{theme name} (default default),label theme=\meta{theme name} (default default),text theme=\meta{theme name} (default default)}
+ Each of the aforementioned themes is actually a combination of three themes with the same name: one for edges, one for edge labels and one for the sentence text. These three themes can also be applied independently. So, for example, you could apply the |iron| theme globally and then use |copper| to draw the labels:
+\begin{codeexample}[]
+\begin{dependency}[theme=iron, label theme=copper]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+\end{keylist}
+
+Edges and labels can be styled locally, by passing the desired |theme|, |label theme| or |edge theme| to specific edges. In the following example, I will use |iron| as the base |theme|, globally overriding the |label theme| with |copper| and using |grassy| as the |theme| and |label theme| two special edges:
+\begin{codeexample}[]
+\begin{dependency}[theme=iron, label theme=copper]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge[theme=grassy]{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge[label theme=grassy]{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+\subsection{Styling elements individually}
+
+\begin{keylist}{/depgraph/hide label=\meta{boolean} (default false),/depgraph/show label=\meta{boolean} (default true)}
+ By default, all labels are visible. Add |hide label| to the \options{} of |\depedge| or |\groupedge| to prevent the bounding box and the text of the label to be drawn.
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge[hide label]{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+If added to the options of |dependency|, all the labels will be suppressed. Local overriding is still possible by adding the |/depgraph/show label| key:
+\begin{codeexample}[]
+\begin{dependency}[hide label]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge[show label]{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+Please, note that the labels are still there, only they are transparent.
+\end{keylist}
+
+
+\begin{stylekey}{/depgraph/edge style=\meta{style} (default \{\})}
+ This style is applied to all the edges drawn by \pkgname{}. By setting its value you can alter the appearance of the dependency edges. The default style applied to every edge is:
+\begin{codeexample}[code only]
+\pgfkeys{%
+ /depgraph/reserved/edge style/.style = {%
+ ->, >=stealth, %arrow properties
+ black, solid, line cap=round, %line properties
+ rounded corners=2, %make corners round
+ },%
+}
+\end{codeexample}
+By setting |edge style| at the |dependency| level, all the edges in the graph are affected:
+\begin{codeexample}[]
+\begin{dependency}[edge style={red,densely dotted}]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+As always, local settings at the edge level take precedence over global settings:
+\begin{codeexample}[]
+\begin{dependency}[edge style={green!60!black,very thick}]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge[edge style={blue!60!black,ultra thick}]{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/depgraph/label style=\meta{style} (default \{\})}
+ The default style applied to every label is the following:
+\begin{codeexample}[code only]
+\pgfkeys{%
+ /depgraph/reserved/label style/.style = {%
+ draw, solid, black, %the outline of the label
+ scale=.7, %scale down the text, to make it smaller than the sentence text
+ text=black, %color of the text
+ text height=1.5ex, %needed to center text vertically
+ text depth=0.25ex, %needed to center text vertically
+ inner sep=.5ex, %padding between the text and the border of the node
+ fill=white, %background color
+ outer sep=0pt,
+ rounded corners=2pt,
+ anchor=mid,
+ },%
+}
+\end{codeexample}
+The look of labels can be changed by defining the |label style| style, either locally to each edge or globally:
+\begin{codeexample}[]
+\begin{dependency}[edge style={green!60!black,very thick},
+ label style={fill=yellow!60,font=\bfseries,thick}]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge[edge style={blue!60!black,ultra thick},
+ label style={fill=green!60,font=\bfseries,text=black}]{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/depgraph/group style=\meta{style} (default \{\})}
+ By default, when you create a group you will only see a box with rounded corners around the selected words:
+\begin{codeexample}[]
+ \begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \wordgroup{2}{1}{2}{a0}
+ \wordgroup{2}{5}{6}{a1}
+\end{dependency}
+\end{codeexample}
+The |group style| property allows you to redefine this style according to your taste and needs:
+\begin{codeexample}[]
+ \begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.5ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \wordgroup[group style={fill=orange!40, draw=brown, inner sep=.6ex}]{2}{1}{2}{a0}
+\end{dependency}
+\end{codeexample}
+Please, keep in mind that a group is just a box drawn \emph{underneath} the word nodes. They have no text themselves, as the text that they surround is actually the text of some word node. Therefore, you cannot use |group style| to change in any way the rendering of the words they group.
+\end{stylekey}
+
+\begin{stylekey}{/tikz/nodes=\meta{style} (default \{\})}
+ This is an \tikzname{} style key used to render the nodes within a given scope. By using it within a |deptext|, you can assign a style to all the nodes in the matrix, i.e. the words in the sentence:
+\begin{codeexample}[]
+\begin{dependency}[edge style={green!60!black,very thick},
+ label style={fill=blue!60,font=\bfseries,text=white}]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex,
+ nodes={draw=red!80!black, shade, top color=red!60, rounded corners}]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge[edge style={blue!60!black,ultra thick},
+ label style={fill=green!60,font=\bfseries,text=black}]{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+The style can be overridden on a per-node basis, by using a special syntax understood by matrix that allows to set style properties of each node individually. To to so, you need to add \cmdname{|[}|<style>|\cmdname{]|} before every word that you want to restyle, where \meta{style} is a style definition. The following example shows how you would apply a different style to all the nodes in the second row:
+{\pipeescape
+\begin{codeexample}[]
+\begin{dependency}[edge style={green!60!black,very thick},
+ label style={fill=blue!60,font=\bfseries,text=white}]
+ \tikzstyle{POS}=[font=\footnotesize\bfseries,text=blue!60!black]
+ \tikzstyle{word}=[draw=blue!60!black, shade, text=black,
+ rotate=45, anchor=north east, inner sep=1ex,
+ font=\normalsize, top color=blue!60, rounded corners]
+ \begin{deptext}[column sep=.5cm, row sep=0, nodes={POS}]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ |[word]| My \& |[word]| dog \& |[word]| also \&
+ |[word]| likes \& |[word]| eating \& |[word]| sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge[edge style={blue!60!black,ultra thick},
+ label style={fill=green!60,font=\bfseries,text=black, rotate=10}]{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+}
+When using this syntax, you should always consider that the |nodes| style is in any case applied to \emph{every node} in the |matrix|, then the style specified for each node (if any) is appended. This fact has the subtle implication that all the nodes inherit all the properties set via |nodes|, and per-node styles must explicitly overwrite all the properties that they don't need to use. As a rule of thumb, you should use |nodes| to set properties that all the nodes will share, and then use per-node options to add or override options.
+\end{stylekey}
+
+\subsection{Defining your own styles}
+
+\begin{command}{\depstyle\marg{style-name}\marg{style-definition}}
+
+ Defining your own styles is a convenient way of using a consistent look for all your graphs across a document, at the same time avoiding a lot of unnecessary typing. |\depstyle| is a wrapper around |\tikzset| (see Section~\ref{sec:tikz}) with the advantage that you do not have to prepend |/depgraph| to all the styling keys that are defined by \pkgname{}. |\depstyle| automatically forwards to \tikzname{} all the keys that it does not how to handle.
+
+ In the following example I will define and use two styles. The first style results in thick blue edges, labels with a thick red outline, blue text and white background; the second style also uses a predefined themes.
+
+\begin{codeexample}[]
+\depstyle{red and blue}{edge style = {thick, blue},
+ label style = {thick, draw=red, text=blue, fill=white}}
+\depstyle{collage}{edge theme = grassy, label style={draw=orange,trapezium}}
+\begin{dependency}[red and blue]
+ \begin{deptext}[column sep=.5cm, row sep=.5ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \&[.2cm] VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge[collage]{4}{5}{xcomp}
+ \depedge[collage]{5}{6}{dobj}
+\end{dependency}
+\end{codeexample}
+
+Note how the labels in the style |collage| inherit the background and the text color of |red and blue| labels. This happens because the |red and blue| style is applied at the |dependency| level, meaning that it is applied to all the labels. Then, the |collage| style is applied to the labels of the last two edges. Since this style only overrides the color of the outline (|draw|), all the other properties are inherited from |red and blue|.
+\end{command}
+
+\section{Interaction with \tikzname{}}
+
+Some function make it possible to reference the nodes in the graph so that it is easier to extend the graph with \tikzname{} drawing capabilities. Understanding what is going on here requires at least some basic knowledge of how to draw nodes and paths in \tikzname{}.
+
+\begin{command}{\matrixref}
+ Returns a reference to the |\matrix| used to lay out the sentence. You can use it to position other elements in the picture relative to it.
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \foreach \a/\pos in {south/below of,north/above of,east/right of,west/left of} {
+ \node (tmp) at (\matrixref.\a) [draw, circle, fill=red, inner sep=1pt] {};
+ \node (tmp2) [\pos = tmp] {\a} -- (tmp);
+ \draw [->] (tmp2) -- (tmp);
+ };
+\end{dependency}
+\end{codeexample}
+
+\end{command}
+
+\begin{command}{\wordref\marg{row-offset}\marg{word-offset}}
+
+ Returns the reference to the matrix node in row \marg{row-offset} and column \marg{word-offset}.
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \node (silly1) [above right of = \wordref{1}{6}, xshift = 2cm] {Top right};
+ \node (silly2) [below left of = \wordref{2}{1}, xshift = -2cm] {Bottom left};
+ \draw [->, very thick, red] (silly1) -- (\wordref{1}{6});
+ \draw [->, very thick, red] (silly2) -- (\wordref{2}{1});
+\end{dependency}
+\end{codeexample}
+\end{command}
+
+\begin{command}{\rootref}
+ Returns a reference to the node holding the root label.
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \node (silly) [above right of = \rootref, xshift = 3cm] {This is the root node!};
+ \draw [->, very thick, red] (silly) -- (\rootref);
+ \draw [thick, blue] (\rootref)--(\wordref{1}{2})--(\wordref{2}{6})--(\rootref);
+\end{dependency}
+\end{codeexample}
+
+\end{command}
+
+\begin{commandlist}{\storelabelnode\marg{macro},\storefirstcorner\marg{macro},\storesecondcorner\marg{macro}}
+ After adding a new edge with |\depedge| or |\groupedge|, three commands allow you to store the name of the nodes used to draw the label end the corners of the dependency edge. |\storelabelnode| can be used to store the name of the label in the macro \meta{macro}. You can then use \meta{macro} just as you would use any node, to draw something involving the label node. |\storefirstcorner| and |\storesecondcorner| work exactly in the same way, but they hold they point to the nodes holding the coordinates of the edge corners.
+
+\begin{codeexample}[]
+\begin{dependency}
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \& VBG \& NN \\
+ My \& dog \& also \& likes \& eating \& sausage \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \storelabelnode\firstlab
+ \storefirstcorner\firstcorner
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+ \depedge{4}{5}{xcomp}
+ \depedge{5}{6}{dobj}
+ \storelabelnode\secondlab
+ \storesecondcorner\secondcorner
+ \draw [<->,out=90,in=-90, thick, red] (\firstlab) to
+ node [fill=red, text=white, font=\bfseries, above, near start, sloped]
+ {labels!} (\secondlab);
+ \draw [<->, out=-90,in=90, thick, blue!60] (\firstcorner) to
+ node [fill=blue!60, text=white, font=\bfseries, above, near end, sloped]
+ {edge corners!} (\secondcorner);
+\end{dependency}
+\end{codeexample}
+\end{commandlist}
+
+\section{Answers to frequent or interesting questions}
+
+This section shows practical examples of how to achieve specific results with \pkgname{} that may not seem that obvious.
+
+\subsection{How do I change the shape of label nodes?}
+
+By default, \pkgname{} uses \tikzname{}'s |rounded corners| shape to draw the labels, but you can use every shape that you want. By default, \tikzname{} defines the |rectangle|, |rounded corners| and |circle| shapes. More shapes are available via the |shapes| library, which \pkgname{} already loads for you. As always, for more information you can refer to \tikzname{} manual.
+
+To change the shape of labels, you simply add the shape name to, |edge style|, as in the following examples:
+
+\begin{codeexample}[]
+\begin{dependency}[label style = {circle}]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \\
+ My \& dog \& also \& likes \& \dots \\
+ \end{deptext}
+ \deproot{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+\end{dependency}
+\qquad
+\begin{dependency}[label style = {trapezium}]
+ \begin{deptext}[column sep=.5cm, row sep=.1ex]
+ PRP\$ \& NN \& RB \&[.5cm] VBZ \\
+ My \& dog \& also \& likes \& \dots \\
+ \end{deptext}
+ \deproot[label style = {star}]{4}{root}
+ \depedge{2}{1}{poss}
+ \depedge{4}{2}{nsubj}
+ \depedge{4}{3}{advmod}
+\end{dependency}
+\end{codeexample}
+
+\subsection{How do I draw bubble parses?}
+
+Until a user of \pkgname{} asked me how to draw them, I was not even aware that these things existed. Anyway, it turns out that is quite simple to draw bubble parses with \pkgname{}, and that |\wordgroup| is basically all you need.
+
+Until I or someone else writes some facilities to explicitly support these beauties, you will have to take care of the details explicitly. What you have to do is:
+\begin{itemize}
+ \item use |\wordgroup| to create bubbles;
+ \item use |inner sep| and |minimum height| with |group style| to create bubbles of the desired size;
+ \item increase the values of |inner sep| and |minimum height| for more external bubbles;
+ \item use |\groupedge| to create edges between bubbles.
+\end{itemize}
+\noindent The follow example should give you a good starting point:
+
+\begin{codeexample}[]
+\depstyle{inner bubble}{draw=gray!80, minimum height=20pt, rounded corners=8pt,
+ inner sep=2pt, top color=gray!40, bottom color=white}
+\depstyle{outer bubble}{draw=gray!80, minimum height=26pt, rounded corners=10pt,
+ inner sep=5pt, top color=white, bottom color=gray!40}
+\depstyle{ungrammatical}{edge below, edge style = {ultra thick, red},
+ label style = {below, text=red}, text only label}
+\begin{dependency}[hide label, arc edge,
+ edge vertical padding=-2pt,
+ group style=outer bubble]
+ \begin{deptext}[column sep=1.4em]
+ a \& student \& whose \& mother \& and \& his \& father \& peter \& knows \\
+ \end{deptext}
+ \wordgroup{1}{3}{7}{chubby}
+ \wordgroup{1}{1}{2}{first} \depedge{2}{1}{}
+ \wordgroup[inner bubble]{1}{3}{4}{second} \depedge{4}{3}{}
+ \wordgroup[inner bubble]{1}{6}{7}{third} \depedge{7}{6}{}
+ \wordgroup{1}{8}{8}{fourth}
+ \wordgroup{1}{9}{9}{fifth}
+ \groupedge{fifth}{fourth}{}{0}
+ \groupedge[ungrammatical]{first}{second}{ungrammatical}{.5cm}
+ \groupedge[edge above]{second}{fifth}{}{1.5cm}
+ \groupedge[edge above]{fifth}{chubby}{}{1cm}
+\end{dependency}%
+\end{codeexample}
+
+When using |fill| or |shade| with |\wordgroup|, as in the example, be aware of the fact that the nodes are drawn in the order that you write them down. For this reason, larger bubbles should always be drawn first, and the contained bubbles afterwards. Otherwise, the inner bubbles will be covered by the outer one.
+
+\appendix
+
+\section{\tikzname{} crash course} \label{sec:tikz}
+
+\textbf{Disclaimer.} \textit{I am making a lot of rough simplifications here to make it possible to explain everything in as little space as possible. I really invite you to read the full version of the manual, if you haven't already. It is the only way to really appreciate the elegance and the full potential of \tikzname{}.}
+
+\vspace{1cm}
+
+PGF/\tikzname{} is a set of lower/higher level macros that allow you to draw extremely refined and sophisticated graphics directly in \LaTeX{}. If you don't know anything about it, then you are really missing on something, and you should run and check the manual\footnote{\url{http://ftp.gui.uva.es/sites/ctan.org/graphics/pgf/base/doc/generic/pgf/pgfmanual.pdf}}. I am repeating myself, but you really should.
+
+\subsection{\texttt{\textbackslash pgfkeys} and \texttt{\textbackslash tikzset}}
+
+\index{key!key-value pairs}
+\tikzname{} is basically built on top of |pgfkeys|, which is a very flexible and sophisticated system to store key-value pairs. \tikzname{} (and derived packages such as \pkgname{}) use this system for setting local or global variables, and to pass optional arguments to commands (macros) that can take a large number of configuration option.
+
+The definition of virtually all \tikzname{} macros follows the template:
+
+\cmdname\somecommand\options\marg{first}\dots\marg{last}
+
+The first argument, optional, is a set of key-value pairs that can be used to set a bunch of options. It is thus possible to reduce to a minimum the number of mandatory arguments \marg{first}\dots\marg{last}, and keep a macro's interface lighter and simpler to use. A command first parses the key-value pairs, then do what it has to do based on the updated state of these variables.
+
+Key names and values can contain spaces, values can be assigned via the |=| sign and commas can be used to separate assignments. Curly braces can be used for grouping values. So, for example, the assignment |variable one = {a, b}, vartwo = c| would result in the set |{a, b}| being assigned to |variable one| and |c| to |vartwo|.
+
+The function which is responsible for parsing key-value pairs is |\pgfkeys|:
+
+\begin{command}{\pgfkeys\marg{keys}}
+ The |\pgfkeys| command parses a string containing a sequence of keys and stores their value, e.g.:
+\begin{codeexample}[code only]
+ \pgfkeys{a=1, b=2, c={d=3,e=4}}
+\end{codeexample}
+In this case, the value of the key |a| is set to |a| and |b| to 2. |c| contains two keys, |d| and |e|, whose values are |3| and |4|, respectively. How this values can be accessed is of no interest for the scope of this document. We only want to be able to set those keys. Please, note that you can only set the values for keys that already exist. How a key can be created is also of no interest for us, as we only want to be able to change the values of existing keys.
+\end{command}
+
+Keys can be arranged hierarchically, as in a directory structure. This property allows every sub-package to define its own protected space of keys, making it less likely to cause interaction problems. All \tikzname{} keys are stored under the root key |/tikz/|. So, for example, |/tikz/fill=blue| assigns the value |blue| to the |fill| key within the namespace |/tikz/|. \pkgname{} defines its own namespace, which is |/depgraph/|, and defines its own subset of keys that interact with \tikzname{}' own.
+
+As a convenience function, \tikzname{} also defines the following macro:
+
+\begin{command}{\tikzset\marg{keys}}
+ |\tikzset| is just a wrapper around |\pgfkeys|, that prefixes all keys with |/tikz/|. The two following instructions are (for us) equivalent:
+\begin{codeexample}[code only]
+ \pgfkeys{/tikz/text=red, /tikz/fill=white}
+ \tikzset{text=red, fill=white}
+\end{codeexample}
+\end{command}
+
+Some keys only have a name\index{key!without a value} and no value. Without going into details, it won't hurt to know that such keys are either \emph{binary}\index{key!binary} flags or one of a set of alternative options (\emph{choice} keys)\index{key!choice}, so that activating one automatically deactivates the other alternatives in the set.
+
+Conveniently, |\pgfkeys| also define an inheritance mechanism that allows sub-packages to consume the keys that they can understand, and then pass on to \tikzname{} all the keys that haven't been handled. This fact also makes it possible for a user to specify a key without using its fully qualified name. When introducing a key for the first time, I generally use its fully qualified name, just to make it clear where it belongs. In the examples, though, I generally prefer to use a more compact notation and only use the ``base name'' of the keys.
+
+\subsection{Basic styling notions}
+
+A style is a set of key-value pairs (we have seen many already in the previous pages) that define the properties of some graphical object. As an example, |{draw=red, thick}| is a style (we will soon come to the meaning of these properties).
+
+The simplest way to define a new style is with the |\tikzstyle| command:
+
+\begin{command}{\tikzstyle\marg{name}=\options}
+ \index{style!define new}
+ Here, \marg{name} is just an identifier for your style (such as |my style|, or |very cool|, whatever). \options{} is a sequence of comma separated key-value pairs, e.g.:
+\begin{codeexample}[code only]
+ \tikzstyle{my cool style} = [draw=black, fill=red]
+\end{codeexample}
+\index{style!update definition}
+Once a style is defined, you can ``add'' things to the style in at least two ways:
+\begin{itemize}
+ \item By using the same syntax as before, but adding a |+| between \marg{name} and the |=| sign, e.g.,:
+\begin{codeexample}[code only]
+ % before: my cool style = {draw=black, fill=red}
+ \tikzstyle{my cool style} += [thick]
+ % after: my cool style = {draw=black, fill=red, thick}
+\end{codeexample}
+ \item By setting (via |\tikzset|) the special sub-property |.append style| of an already existent style, e.g.:
+\begin{codeexample}[code only]
+ % before: my cool style = {draw=black, fill=red, thick}
+ \tikzset{my cool style/.append style = {dotted}}
+ % after: my cool style = {draw=black, fill=red, thick, dotted}
+\end{codeexample}
+\end{itemize}
+\end{command}
+
+A dependency graph is built using two \tikzname{} primitives: \emph{nodes}\index{node} and \emph{paths}\index{path}. Dependency edges are paths. Edge labels and words in the sentence are nodes containing text. Word groups are also nodes, which are drawn on the layer \emph{underneath} the word nodes. They have no text themselves, as the text that they surround is actually the text of some word node.
+
+Nodes have an \emph{outline}\index{outline} (i.e., a contour) and an \emph{area}\index{area} (the space inside the contour), and (generally) contain some text. All these properties can be styled independently, and the styling can be done either globally (in a way that affects all the graphics within a given scope) or locally (i.e., for each node individually). The same applies to paths, even though in this case you only have the outline to play with.
+
+Let's briefly dive through the most relevant key-value pairs that can be used to configure these properties. My purpose here is just to provide a compact reference to understand the examples in the documentation.
+
+\subsubsection{Outline properties}
+These describe the properties of lines. They apply to edges and to the contour of nodes (such as labels and words in the sentence)
+\begin{key}{/tikz/draw=\meta{color-spec}}
+ This key tells tikz to actually draw the outline of a shape with the given color. If draw is not set, then the outline is not drawn. By default, outlines are not drawn. \meta{color-spec} can be a color name, such as |red|, |green| or |blue|, or a more complicated expression, such as |red!60!black|, which means ``make a new color made of red for 60\% of red, of black for the rest''. Colors can be specified in many other ways, which we won't cover here.
+
+\end{key}
+\begin{keylist}[/tikz]{circle,ellipse,rectangle}
+ Selecting one of this properties allows you to use a different shape to draw a node. When |draw| is selected, by default the node will be drawn as a |rectangle|.
+\end{keylist}
+\begin{key}{/tikz/rounded corners=\meta{length}}
+ This property allows you to make corners round. The value that you assign to it is the amount of roundness.
+\end{key}
+\begin{keylist}[/tikz]{very thin,thin,thick,very thick}
+ Can be used to set the width of a line. |thin| is the default value (corresponding to |0.4pt|).
+\end{keylist}
+\begin{keylist}[/tikz]{solid,dotted,loosely dotted,densely dotted,dashed,loosely dashed,densely dashed}
+Set the kind of line to be used to draw the outline. |solid| is the default (i.e. a continuous line).
+\end{keylist}
+
+\subsubsection{Area properties}
+These describe the properties of areas. They apply to the background of nodes (such as labels, words in the sentence and word groups).
+\begin{key}{/tikz/fill=\meta{color-spec}}
+ This key tells tikz to fill the inside of a shape (or a node) with a solid color. Color specification is the same as for |/tikz/draw|.
+\end{key}
+\begin{key}{/tikz/shade}
+ Instead of filling the area with a solid color, fill it with a gradient.
+\end{key}
+\begin{keylist}[/tikz]{top color=\meta{color-spec},bottom color=\meta{color-spec},left color=\meta{color-spec},right color=\meta{color-spec}}
+ Use these two keys to set up either a vertical or an horizontal gradient. Setting any of these properties automatically activates |shade|.
+\end{keylist}
+\begin{key}{/tikz/inner sep=\meta{length}}
+ This parameter controls the distance between the outline of a node and its contents (e.g., the text inside the node).
+\end{key}
+\begin{keylist}[/tikz]{minimum height=\meta{length},minimum width=\meta{length}}
+ By default, the size of a node is determined based on its content, i.e., it is just as big as to fit what's inside (plus padding and spacing, e.g., |inner sep|). By setting these keys, you can force a node to be at least as tall and/or wide as requested.
+\end{keylist}
+
+\subsubsection{Text properties}
+These describe the properties of text boxes. They apply to the text of the sentence (the rows if the |matrix| wrapped by |deptext|) and to labels.
+\begin{key}{/tikz/text=\meta{color}}
+ This key sets the color to be used to render the text.
+\end{key}
+\begin{key}{/tikz/font=\meta{fontmacros}}
+ Set the font size/family/series/shape to be user to render the text. Every combination of these standard \LaTeX{} macros is a valid value for \meta{fontmacros}:
+ |\normalsize|,
+ |\small|,
+ |\footnotesize|,
+ |\tiny|,
+ |\large|,
+ |\huge|,
+ |\rmfamily|,
+ |\ttfamily|,
+ |\sffamily|,
+ |\mdseries|,
+ |\bfseries|,
+ |\upshape|,
+ |\itshape|,
+ |\scshape|,
+ |\slshape|.
+\end{key}
+
+\printindex
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-dependency/tikz-dependency.sty b/graphics/pgf/contrib/tikz-dependency/tikz-dependency.sty
new file mode 100644
index 0000000000..bd2022398a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dependency/tikz-dependency.sty
@@ -0,0 +1,319 @@
+% Copyright 2011 by Daniele Pighin
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/tikz-dependency/licenses/LICENSE for more details.
+%
+% Changelog
+%
+% 1.2 (Nov 3, 2016)
+% - It's been a while :) Integrated a patch submitted by Jan Strunk <jan.strunk@uni-koeln.de>
+% (thanks a lot Jan!) fixing a bug with the behavior of "edge end x offset".
+%
+% 1.1 (Jan 17, 2012)
+% - Added the possibility to use simple arcs as edges (keys: arc edge/segmented edge)
+% - Added "edge start x offset" and "edge end x offset" to fine tune edge start/end point position
+% - Added \depstyle to define styles more easily
+% - Added "simple" theme, based on the parse on page 1 of [Nivre and McDonald, 2008 ACL-HLT]
+% - Added instructions to draw bubble parses
+% - Fixed bug that would cause groupedges not to be straight under some circumstances;
+%
+% 1.0 (Nov 26, 2011)
+% - First public release
+
+\ProvidesPackage{tikz-dependency}[2011/01/08 v1.1 Macros to draw dependency trees]
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+
+\RequirePackage{tikz,environ}
+\usetikzlibrary{matrix,arrows,backgrounds,calc,patterns,positioning,fit,shapes}
+
+\pgfdeclarelayer{depgroups}
+\pgfsetlayers{depgroups,main}
+
+\newcounter{dt@labelid}
+\newif\ifdt@linkbelow
+\newif\ifdt@arcedge
+\tikzset{
+ /depgraph/.cd,
+ /depgraph/.search also = {/tikz},
+ dep id/.code = {\def\dt@depid{#1}},
+ dep id = dependency,
+ % fix the distance of the edge
+ edge height/.code = {\pgfmathsetlengthmacro{\dt@linkheight}{#1}},
+ edge height = 0pt,
+ % the distant of the horizontal line of the edge style for two adjacent words
+ edge unit distance/.code = {\pgfmathsetlengthmacro{\dt@linkstep}{#1}},
+ edge unit distance = 3ex,
+ % the horizontal offset defining the trapezoidal look
+ edge slant/.code = {\pgfmathsetlengthmacro{\dt@linkslant}{#1}},
+ edge slant = 3pt,
+ % the horizontal offset defining the starting/ending position of the edge style
+ edge horizontal padding/.code = {\pgfmathsetlengthmacro{\dt@linkoffset}{#1}},
+ edge horizontal padding = 4pt,
+ % vertical offset of the edge style from the word
+ edge vertical padding/.code = {\pgfmathsetlengthmacro{\dt@linkdist}{#1}},
+ edge vertical padding = 0ex,
+ % should links be placed above or below the sentence
+ edge below/.is if = dt@linkbelow,
+ edge below/.default=true,
+ edge above/.code = {\dt@linkbelowfalse},
+ % arc edge
+ arc edge/.is if = dt@arcedge,
+ segmented edge/.code = {\dt@arcedgefalse},
+ arc angle/.store in = \dt@arcangle,
+ arc angle = 60,
+ % an explicit offset to compensate the x position of the edge
+ edge start x offset/.code = {\pgfmathsetlengthmacro{\dt@EdgeStartOffsetX}{#1}},
+ edge start x offset = 0,
+ edge end x offset/.code = {\pgfmathsetlengthmacro{\dt@EdgeEndOffsetX}{#1}},
+ edge end x offset = 0,
+ % the layer that links should connect
+ % (should be set to "1" for edge above, and to the number of rows
+ % in the matrix for edge below)
+ target layer/.store in = \dt@tgtlayer,
+ target layer/.default = 0,
+ target layer = 0,
+ % styling options
+ reserved/edge style/.style = {->, >=stealth, black, solid, rounded corners = 2, line cap = round, segmented edge},
+ edge style/.style = {reserved/edge style/.append style = {#1}},
+ reserved/label style/.style = {
+ anchor = mid,
+ draw, solid,
+ black,
+ scale = .7,
+ text height = 1.5ex, text depth = 0.25ex, % needed to center text vertically
+ inner sep=.5ex,
+ outer sep = 0pt,
+ rounded corners = 2pt,
+ text = black,
+ fill = white},
+ label style/.style = {reserved/label style/.append style = {#1}},
+ hide label/.style = {reserved/label style/.append style = {opacity = 0, text opacity = 0}},
+ show label/.style = {reserved/label style/.append style = {opacity = 1, text opacity = 1}},
+ text only label/.style = {reserved/label style/.append style = {opacity=0, text opacity=1}},
+ reserved/text style/.style = {
+ text height=1.5ex, text depth = 0.25ex, % needed to center text vertically
+ inner sep = .5ex},
+ text style/.style = {reserved/text style/.append style = {#1}},
+ % group styling
+ reserved/group style/.style = {
+ inner sep = 0,
+ draw, solid,
+ outer sep = .5ex,
+ rounded corners = 2pt},
+ group style/.style = {reserved/group style/.append style = {#1}},
+ % themes for text
+ text theme/.is choice,
+ text theme/default/.style = {text style={black}},
+ text theme/brazil/.style = {text style={blue!60!black}},
+ text theme/iron/.style = {text style={black!80}},
+ text theme/copper/.style = {text style={brown!60!black}},
+ text theme/night/.style = {text style={black}},
+ text theme/grassy/.style = {text style={green!40!black}},
+ text theme/simple/.style = {text style={black}},
+ % themes for labels
+ label theme/.is choice,
+ label theme/default/.style = {label style={fill=white, draw=black}},
+ label theme/night/.style = {label style={text=white, fill=black, font=\bfseries}},
+ label theme/brazil/.style = {label style={thick, black, fill=yellow, text=black, font=\bfseries}},
+ label theme/iron/.style = {label style={top color=black!60, bottom color=black!80, draw=black!80, text=white, font=\bfseries}},
+ label theme/copper/.style = {label style={top color=brown!80!pink, bottom color=brown!60!black, draw=brown!80, text=white, font=\bfseries}},
+ label theme/grassy/.style = {label style={bottom color=green!60!black, top color=green!20!black, draw=green!40!black, text=white, font=\bfseries}},
+ label theme/simple/.style = {label style={draw=none,fill=none,above,font=\scriptsize}},
+ % themes for edges
+ edge theme/.is choice,
+ edge theme/default/.style = {edge style={thin,black}},
+ edge theme/night/.style = {edge style={thick}},
+ edge theme/brazil/.style = {edge style={thick,green!60!black}},
+ edge theme/iron/.style = {edge style={thick, black!80}},
+ edge theme/copper/.style = {edge style={thick, brown!80}},
+ edge theme/grassy/.style = {edge style={thick, green!40!black}},
+ edge theme/simple/.style = {arc edge, arc angle=79},
+ % themes styles
+ theme/.style = {label theme = #1, edge theme = #1, text theme = #1},
+}
+
+\newcommand{\depstyle}[2]{\tikzset{#1/.style = {/depgraph/.cd, #2}}}
+
+
+\newenvironment{dependency}[1][]{%
+ \begin{tikzpicture}[/depgraph/.cd, #1]
+ \begin{scope}
+}{%
+ \end{scope}%
+ \end{tikzpicture}%
+}
+
+\NewEnviron{deptext}[1][]{%
+ \begin{scope}
+ \matrix (\dt@depid)[%
+ nodes = {/depgraph/reserved/text style},
+ column sep = 0,
+ row sep = -.5ex,
+ matrix of nodes,
+ ampersand replacement = \&,
+ nodes in empty cells,
+ #1] {
+ \BODY%
+ };%
+ \pgfmathtruncatemacro\dt@tmp{\pgfmatrixcurrentrow}
+ \xdef\dt@numrows{\dt@tmp}
+ \end{scope}%
+}
+
+\newcommand{\depkeys}[1]{\tikzset{/depgraph/.cd, #1}}
+
+\newcommand{\settgtlayer}{%
+ \ifnum\dt@tgtlayer=0%
+ \ifdt@linkbelow%
+ \pgfmathtruncatemacro{\dt@tgtlayer}{\dt@numrows}%
+ \else%
+ \pgfmathtruncatemacro{\dt@tgtlayer}{1}%
+ \fi%
+ \fi%
+}
+
+\newcommand{\deproot}[3][]{% options, root offset, root reserved/label style
+ \begin{scope}
+ \depkeys{#1}
+ \pgfmathsetmacro{\offa}{#2}
+ \settgtlayer
+ \def\anchorpoint{north}
+ \ifdt@linkbelow
+ \def\anchorpoint{south}
+ \fi
+ \def\source{\dt@depid-\dt@tgtlayer-#2}
+
+ \ifdim\dt@linkheight=0pt
+ \pgfmathsetmacro{\distance}{\dt@linkstep * 4}
+ \else
+ \pgfmathsetlengthmacro{\distance}{\dt@linkheight}
+ \fi
+ \pgfmathsetlengthmacro{\dt@startdist}{\dt@linkdist}
+ \ifdt@linkbelow
+ \pgfmathsetmacro{\distance}{-(\dt@linkstep * 4)}
+ \pgfmathsetlengthmacro{\dt@startdist}{-\dt@startdist}
+ \fi
+ \node at (\source) (\rootref) [yshift=\distance, /depgraph/.cd, reserved/label style, #1] {#3};
+ \draw [/depgraph/.cd, reserved/edge style, #1] (\rootref) -- ($(\source.\anchorpoint) + (0, \dt@startdist)$);
+ \end{scope}
+}
+
+\newcommand{\depedge}[4][]{% options, source offset, target offset, dep name
+ \begin{scope}
+ \depkeys{#1}
+ \pgfmathsetmacro{\offa}{#2}
+ \pgfmathsetmacro{\offb}{#3}
+ \settgtlayer
+ \def\source{\wordref{\dt@tgtlayer}{#2}}
+ \def\dest{\wordref{\dt@tgtlayer}{#3}}
+ \def\depname{#4}
+ \ifdim\dt@linkheight=0pt
+ \pgfmathsetlengthmacro{\distance}{abs(\offb - \offa)*\dt@linkstep}
+ \else
+ \pgfmathsetlengthmacro{\distance}{\dt@linkheight}
+ \fi
+ \groupedge[#1]{\source}{\dest}{\depname}{\distance}
+ \end{scope}}
+
+\newlength{\xca}
+\newlength{\yca}
+\newlength{\xcb}
+\newlength{\ycb}
+
+\newcommand{\wordref}[2]{\dt@depid-#1-#2}
+
+\newcommand{\rootref}{\dt@depid-root}
+
+\newcommand{\matrixref}{\dt@depid}
+
+% \storelabelnode
+%
+% \edef#1 the name of the last reserved/label style, stored in \dt@lastlabel
+%
+% #1 - a macro
+\newcommand{\storelabelnode}[1]{\edef#1{\dt@lastlabel}}
+
+\newcommand{\storefirstcorner}[1]{\edef#1{\dt@lastlabel-edge-first-corner}}
+\newcommand{\storesecondcorner}[1]{\edef#1{\dt@lastlabel-edge-second-corner}}
+
+\newcommand{\wordgroup}[5][]{% options, layer, col-start, col-end, identifier
+ \begin{scope}[/depgraph/.cd, #1]
+ \pgfonlayer{depgroups}
+ \node (#5) [fit = (\wordref{#2}{#3}) (\wordref{#2}{#4}), /depgraph/.cd, reserved/group style, #1] {};
+ \endpgfonlayer
+ \end{scope}
+}
+
+\newcommand{\groupedge}[5][]{% options, source, target, depname, distance
+ \begin{scope}[/depgraph/.cd, #1]
+ \def\anchorpoint{north}
+ \ifdt@linkbelow
+ \def\anchorpoint{south}
+ \fi
+ \pgfextractx{\xca}{\pgfpointanchor{#2}{\anchorpoint}}
+ \pgfextractx{\xcb}{\pgfpointanchor{#3}{\anchorpoint}}
+ \pgfextracty{\yca}{\pgfpointanchor{#2}{\anchorpoint}}
+ \pgfextracty{\ycb}{\pgfpointanchor{#3}{\anchorpoint}}
+ \pgfmathsetlengthmacro{\ydiff}{\yca-\ycb}
+ \ifdim\xca>\xcb
+ \pgfmathsetlengthmacro{\doff}{-\dt@linkoffset}
+ \pgfmathsetlengthmacro{\dslant}{-\dt@linkslant}
+ \else
+ \pgfmathsetlengthmacro{\doff}{\dt@linkoffset}
+ \pgfmathsetlengthmacro{\dslant}{\dt@linkslant}
+ \fi
+ \addtocounter{dt@labelid}{1}
+ \xdef\dt@lastlabel{\dt@depid-\the\value{dt@labelid}}
+ \pgfmathsetlengthmacro{\dt@startdist}{\dt@linkdist}
+ \pgfmathsetlengthmacro{\dt@enddist}{#5}
+ \ifdt@linkbelow
+ \pgfmathsetlengthmacro{\dt@startdist}{-\dt@startdist}
+ \pgfmathsetlengthmacro{\dt@enddist}{-\dt@enddist}
+ \fi
+
+ % Calculate edge anchors. -edge-first-corner and -edge-second-corner are only
+ % meaningful for segmented edge, but we also draw the nodes for arc edge, someone
+ % may always find these anchors useful...
+ \node (\dt@lastlabel-edge-origin) [coordinate] at ($(#2.\anchorpoint) + (\doff,\dt@startdist) + (\dt@EdgeStartOffsetX,0)$) {};
+ \node (\dt@lastlabel-edge-first-corner) [coordinate] at ($(\dt@lastlabel-edge-origin) + (\dslant,\dt@enddist)$) {};
+ \node (\dt@lastlabel-edge-second-corner) [coordinate] at ($(#3.\anchorpoint) + (\dt@EdgeEndOffsetX,0) + (-\dslant,\dt@enddist+\dt@startdist+\ydiff)$) {};
+ \node (\dt@lastlabel-edge-endpoint) [coordinate] at ($(#3.\anchorpoint) + (0,\dt@startdist) + (\dt@EdgeEndOffsetX,0)$) {};
+
+ \ifdt@arcedge
+ % link above, left to right
+ \pgfmathsetmacro{\dt@arcin}{180-\dt@arcangle}
+ \pgfmathsetmacro{\dt@arcout}{\dt@arcangle}
+ \ifdt@linkbelow
+ % link below
+ \pgfmathsetmacro{\dt@arcin}{-\dt@arcin}
+ \pgfmathsetmacro{\dt@arcout}{-\dt@arcout}
+ \fi
+ \ifdim\xca>\xcb
+ % right to left
+ \pgfmathsetmacro{\dt@temp}{\dt@arcin}
+ \pgfmathsetmacro{\dt@arcin}{\dt@arcout}
+ \pgfmathsetmacro{\dt@arcout}{\dt@temp}
+ \fi
+ %\draw [/depgraph/.cd, reserved/edge style, rounded corners = #5/5, #1]
+ \draw [out=\dt@arcout, in=\dt@arcin,/depgraph/.cd, reserved/edge style, rounded corners = #5/5, #1]
+ (\dt@lastlabel-edge-origin)
+ to node (\dt@lastlabel) [/depgraph/.cd, #1, reserved/label style] {#4}
+ (\dt@lastlabel-edge-endpoint);
+
+ \else
+ \draw [/depgraph/.cd, reserved/edge style, rounded corners = #5/5, #1]
+ (\dt@lastlabel-edge-origin) --
+ (\dt@lastlabel-edge-first-corner) --
+ (\dt@lastlabel-edge-second-corner) --
+ (\dt@lastlabel-edge-endpoint);
+ \node (\dt@lastlabel) [/depgraph/.cd, #1, reserved/label style] at
+ ($ .5*(\dt@lastlabel-edge-second-corner) + .5*(\dt@lastlabel-edge-first-corner) $)
+ {#4};
+ \fi
+ \end{scope}
+}
+
diff --git a/graphics/pgf/contrib/tikz-dimline/README b/graphics/pgf/contrib/tikz-dimline/README
new file mode 100644
index 0000000000..65359014f4
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dimline/README
@@ -0,0 +1,73 @@
+# Technical dimension lines in Tikz
+
+
+Dimension lines are drawn segments that indicate the measurement of a
+feature. The line has an arrow at both ends to show that the dimension
+displayed covers the entire span of that line. The direction of the line
+(vertical, horizontal or diagonal) shows the direction of the
+measurement. Dimension lines are kept outside of the object illustrated,
+typically connected to other lines that display the area where that
+measurement applies. This keeps the illustration clear.
+
+
+
+## Installation
+
+To install the `tkiz-dimline` package copy its directory to either to:
+
+- `$TEXHOME/tex/latex/`
+- `$TEXMFHOME/tex/latex/`
+- `~/texmf/tex/latex/`
+- `~/Library/texmf/tex/latex/`
+
+## Usage
+
+
+````Tex
+\begin{tikzpicture}[scale=2]
+ \draw[line width=1pt] (0,0) -- (0,4) -- (.5,4) -- (.5,5) -- (1.,5)
+ -- (1.,4) -- (1.5,4) -- (1.5,0) -- cycle;
+
+ \draw node (A) at (2.5,0) {};
+
+ \dimline[line style = {line width=0.7},
+ extension start length=-0.24,
+ extension end length=-0.24] {(A)}{($ (A) + (0,4) $)}{$4.0$};
+
+ \dimline[line style = {red, line width=0.7},
+ extension start length=0,
+ extension end length=0] {(0,2)}{(1.5, 2)}{ $\diameter 1.5$};
+
+ \dimline[label style={above=0.5ex,},
+ extension start path = {(0,6) (0,5.7) (0.5,5.4) (0.5,5.05)},
+ extension end path = {(1.5,6) (1.5,5.7) (1,5.4) (1,5.05)},]
+ {(0,6)}{(1.5,6)}{$\diameter 0.5$};
+\end{tikzpicture}
+````
+
+See [tikz-dimline-doc.pdf](tikz-dimline-doc.pdf) for further help.
+
+
+## Example
+
+Global dimension line
+
+![Dimension line example 1](dimline1.png)
+
+Normal arrow details
+
+![Dimension line example 2](dimline2.png)
+
+Reversed arrow details
+
+![Dimension line example 3](dimline3.png)
+
+
+
+## License
+
+This program is free software. It comes without any warranty, to the extent
+permitted by applicable law. You can redistribute it and/or modify it under
+the terms of the Do What The Fuck You Want To Public License, Version 2, as
+published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+details.
diff --git a/graphics/pgf/contrib/tikz-dimline/dimline1.png b/graphics/pgf/contrib/tikz-dimline/dimline1.png
new file mode 100644
index 0000000000..e65a82dff1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dimline/dimline1.png
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-dimline/dimline2.png b/graphics/pgf/contrib/tikz-dimline/dimline2.png
new file mode 100644
index 0000000000..af3af3b9e7
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dimline/dimline2.png
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-dimline/dimline3.png b/graphics/pgf/contrib/tikz-dimline/dimline3.png
new file mode 100644
index 0000000000..134f6f8ee8
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dimline/dimline3.png
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.pdf b/graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.pdf
new file mode 100644
index 0000000000..b64b87f0d6
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.tex b/graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.tex
new file mode 100644
index 0000000000..63b3ca9b48
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dimline/tikz-dimline-doc.tex
@@ -0,0 +1,422 @@
+
+\documentclass[a4paper]{article}
+
+\usepackage[all]{nowidow}
+\widowpenalty10000
+\clubpenalty10000
+
+
+%% See http://tex.stackexchange.com/questions/78334/print-system-information-in-latex-doc
+\RequirePackage{ifxetex}
+\ifxetex
+\RequirePackage{fontspec}
+\RequirePackage{xltxtra}
+\newcommand{\myxetex}{\XeLaTeX}
+\newcommand{\compilator}{\XeLaTeX{}}
+\newcommand{\cversion}{\the\XeTeXversion\XeTeXrevision}
+
+\else
+\RequirePackage[utf8]{inputenc}
+\newcommand{\myxetex}{\texttt{XeLaTeX}}
+\newcommand{\compilator}{\LaTeX{}}
+\makeatletter
+\newcommand{\cversion}{
+\ifnum\pdftexversion<100 %
+ \the\pdftexversion.\pdftexrevision
+ \else
+ \ifnum\pdftexversion<130 %
+ \expandafter\@car\the\pdftexversion\@empty\@nil.%
+ \expandafter\@cdr\the\pdftexversion\@empty\@nil
+ \pdftexrevision
+ \else
+ \expandafter\@car\the\pdftexversion\@empty\@nil.%
+ \expandafter\@cdr\the\pdftexversion\@empty\@nil.%
+ \pdftexrevision
+ \fi
+ \fi
+}
+\makeatother
+\fi
+
+\makeatletter
+\newcommand{\tcbversion}{\tcb@version}
+\makeatother
+
+\RequirePackage{etoolbox}
+
+\RequirePackage{minted}
+
+
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+\usetikzlibrary{fit,spy}
+\usetikzlibrary{intersections}
+
+\usepackage{pgfplots}
+
+\RequirePackage{tcolorbox}
+\tcbuselibrary{skins,listings}
+\tcbuselibrary{minted}
+\tcbuselibrary{documentation}
+
+%% Diameter
+\usepackage{ wasysym }
+
+\usepackage{tikz-dimline}
+
+
+%%\tikzset{every picture/.append style={scale=0.5}}
+%% \tikzset{global scale/.style={
+%% scale=0.5,
+%% every node/.style={scale=0.5}
+%% }
+%% }
+
+%\tcbset{listing engine=latex}
+\newminted[srcGrid]{latex}{baselinestretch=0.5,fontsize=\footnotesize}
+
+
+\newtcblisting{exampleB}[2][]{%
+ colframe=red!50!yellow!50!black,
+ colback=white,
+ coltitle=red!50!yellow!3!white,
+ bicolor,colbacklower=red!50!yellow!5!white,
+ fonttitle=\sffamily\bfseries,
+ center upper,
+ minted language=latex,
+ minted options={baselinestretch=0.5,fontsize=\scriptsize},
+ %%lefthand ratio=0.33,
+ %%sidebyside,
+ text and listing,
+ title=#2,#1}
+
+\newtcblisting{exampleA}[2][]{%
+ colframe=red!50!yellow!50!black,
+ colback=white,
+ coltitle=red!50!yellow!3!white,
+ bicolor,colbacklower=red!50!yellow!5!white,
+ fonttitle=\sffamily\bfseries,
+ center upper,
+ minted language=latex,
+ minted options={baselinestretch=0.5,fontsize=\scriptsize},
+ %%lefthand ratio=0.33,
+ %%sidebyside,
+ listing,
+ title=#2,#1}
+
+
+%% \newtcblisting{exampleA}[2][]{%
+%% colframe=red!50!yellow!50!black,
+%% colback=white,
+%% coltitle=red!50!yellow!3!white,
+%% bicolor,colbacklower=red!50!yellow!5!white,
+%% fonttitle=\sffamily\bfseries,
+%% sidebyside,text and listing,
+%% title=#2,#1}
+
+
+
+
+
+\BeforeBeginEnvironment{srcGrid}{%
+\begin{tcolorbox}[boxrule=0.5pt,left=1mm,width=\linewidth]}
+\AfterEndEnvironment{srcGrid}{\end{tcolorbox}}%
+
+
+
+
+
+%% \AtBeginEnvironment{exampleB}{}
+%% \AtEndEnvironment{exampleB}{}
+
+
+%% \BeforeBeginEnvironment{srcGrid}{%
+%% \begin{exampleB}[boxrule=0.5pt,left=1mm,width=\linewidth]{}}
+%% \AfterEndEnvironment{srcGrid}{\end{exampleB}}%
+
+
+
+%% Just to draw a help grid
+%% \helpgrid{Xa}{Ya}{Xb}{Yb}
+\makeatletter
+\newcommand{\helpgrid@do@nothing}[1]{#1}%
+\newcommand{\helpgrid}[4]{%
+ \pgfplotsifinaxis{%
+ \let\helpgrid@internal\pgfplotsextra%
+ }{%
+ \let\helpgrid@internal\helpgrid@do@nothing%
+ }%
+
+ \begin{scope}
+
+ \coordinate (a) at (#1,#2) {};
+ \coordinate (b) at (#3,#4) {};
+
+ \draw[step=1,gray!10,very thin] (a) grid (b);
+
+ \foreach \x in {#1,...,#3}
+ \node[anchor=north,gray!20] at (\x, 0) {\tiny{\x}};
+
+ \foreach \y in {#2,...,#4}
+ \node[anchor=east,gray!20] at (0, \y) {\texttt{\tiny{$\y$}}};
+ \end{scope}
+}%
+\makeatother
+
+
+\newcommand{\PGF}{\textsc{PGF}}
+\newcommand{\TikZ}{Ti\textcolor{orange}{\emph{k}}Z}
+
+
+
+\title{
+ \texttt{dimline}\\
+ Technical dimension lines using \PGF/\TikZ\\
+}
+\author{Sébastien Gross\\ \texttt{<seb•$\alpha\tau$•chezwam•$\partial\theta\tau$•org>}}
+\date{\csname ver@tikz-dimline.sty\endcsname}
+
+\begin{document}
+
+\maketitle
+
+
+\let\thefootnote\relax\footnotetext{This documentation was compiled on
+ {\platformname} using {\compilator} {\cversion}, {\PGF} {\pgfversion},
+ \texttt{tcolorbox} {\tcbversion} on {\today}.}
+
+
+Dimension lines are drawn segments that indicate the measurement of a
+feature. The line has an arrow at both ends to show that the dimension
+displayed covers the entire span of that line. The direction of the line
+(vertical, horizontal or diagonal) shows the direction of the
+measurement. Dimension lines are kept outside of the object illustrated,
+typically connected to other lines that display the area where that
+measurement applies. This keeps the illustration clear.
+
+\begin{tcolorbox}[title={Contents},fonttitle=\bfseries\Large,
+ colback=yellow!10!white,colframe=red!50!black,before=\par\bigskip\noindent]
+ \makeatletter
+ \@starttoc{toc}
+ \makeatother
+ %\tableofcontents
+\end{tcolorbox}
+
+
+\newpage
+
+
+
+\section{Overview}
+
+\begin{exampleB}{}
+
+\begin{tikzpicture}[scale=2]
+ \draw[line width=1pt] (0,0) -- (0,4) -- (.5,4) -- (.5,5) -- (1.,5)
+ -- (1.,4) -- (1.5,4) -- (1.5,0) -- cycle;
+
+ \draw node (A) at (2.5,0) {};
+
+ \dimline[line style = {line width=0.7},
+ extension start length=-0.24,
+ extension end length=-0.24] {(A)}{($ (A) + (0,4) $)}{$4.0$};
+
+ \dimline[line style = {red, line width=0.7},
+ extension start length=0,
+ extension end length=0] {(0,2)}{(1.5, 2)}{ $\diameter 1.5$};
+
+ \dimline[label style={above=0.5ex,},
+ extension start path = {(0,6) (0,5.7) (0.5,5.4) (0.5,5.05)},
+ extension end path = {(1.5,6) (1.5,5.7) (1,5.4) (1,5.05)},]
+ {(0,6)}{(1.5,6)}{$\diameter 0.5$};
+\end{tikzpicture}
+\end{exampleB}
+
+
+\let\thefootnote\relax\footnotetext{The \texttt{wasysym} package is required to have \texttt{\textbackslash diameter} command.}
+
+
+\newpage
+
+
+\section{Installation}
+
+To install the \verb"tkiz-dimline" package copy its directory to either to
+\begin{itemize}
+\item \verb"$TEXHOME/tex/latex/"
+\item \verb"$TEXMFHOME/tex/latex/"
+\item \verb"~/texmf/tex/latex/"
+\item \verb"~/Library/texmf/tex/latex/"
+\end{itemize}
+
+\section{Usage}
+
+\subsection{command}
+\begin{docCommand}{dimline}{\oarg{key path}\marg{start}\marg{end}\marg{label}}
+ Creates a new dimension line from \meta{start} to \meta{end} with
+ \meta{label}. An optional \meta{key path} can be used to customise the
+ dimension line.
+
+ This command has to be called within a \docAuxEnvironment*{tikzpicture}
+ environment.
+
+\end{docCommand}
+
+\subsection{options}
+\begin{docKey}{color}{=\meta{color}}{black}
+ Dimension line color.
+\end{docKey}
+\begin{docKey}{line style}{=\meta{style}}{not set}
+ Dimension line style, identical to {\PGF} line style.
+\end{docKey}
+\begin{docKey}{label style}{=\meta{style}}{not set}
+ Dimension label style, identical to {\PGF} label style.
+\end{docKey}
+
+\begin{docKey}{extension start length}{=\meta{size}}{1cm}
+ Length of the extention line at the start point.
+\end{docKey}
+
+\begin{docKey}{extension end length}{=\meta{size}}{1cm}
+ Identical to \refKey*{extension start length}, but for the end point.
+\end{docKey}
+
+\begin{docKey}{extension start angle}{=\meta{angle}}{-90}
+ Angle between the dimension line and the extention line at the start
+ point. You dont't want to change that value unless you really know what
+ you are doing. You would rather have a look to \refKey*{extension start
+ path} and \refKey*{extension end path}.
+\end{docKey}
+
+\begin{docKey}{extension end angle}{=\meta{angle}}{90}
+ Identical to \refKey*{extension start angle}, but for the end point.
+\end{docKey}
+
+\begin{docKey}{extension start style}{=\meta{style}}{not set}
+ Style for the extension line at the start point.
+\end{docKey}
+
+\begin{docKey}{extension end style}{=\meta{style}}{not set}
+ Identical to \refKey*{extension start style}, but for the end point.
+\end{docKey}
+
+\begin{docKey}{extension start path}{=\meta{path}}{not set}
+ Path (coordinates relative to the current
+ \docAuxEnvironment*{tkizpicture}) for the extension line at the start
+ point.
+\end{docKey}
+
+\begin{docKey}{extension end path}{=\meta{path}}{not set}
+ Identical to \refKey*{extension start path}, but for the end point.
+\end{docKey}
+
+
+\begin{docKey}{arrows}{=\meta{arrows spec}}{dimline-dimline}
+ Arrows used for the dimension line. \docAuxKey{dimline-dimline} is used
+ for standard arrows. Use \docAuxKey{dimeline reverse-dimline reverse} to
+ reverse the arrow heads.
+\end{docKey}
+
+
+
+\section{Examples}
+
+On following examples \docAuxCommand{helpgrid} is only used for a labeled
+grid. This not mandatory you can dicard this line. See source of this
+documentation to see how \docAuxCommand{helpgrid} command is defined.
+
+
+
+\subsection{Basic usage}
+
+This is a very simple usage. It just draws a dimension line (using default
+values) between 2 points with a label on it. Note that the dimension starts
+at the border of the side tick mark, not at the end of the arrow.
+
+\begin{exampleB}{}
+ \begin{tikzpicture}[spy using outlines={circle, magnification=25, size=6cm,
+ connect spies}]
+ \helpgrid{-1}{-1}{5}{4}
+ \draw[line width=0.01,color=red] plot[mark=+] coordinates{(3,3)} {};
+ \draw[line width=0.01,color=green] plot[mark=x] coordinates{(3,3)} {};
+ \dimline[line style = {line width=0.5}]{(0,0)}{(3,3)}{Label};
+ \spy [blue] on (2.975,2.975) in node [fill=white] at (6.5,1.5);
+ \end{tikzpicture}
+\end{exampleB}
+
+
+\subsection{Reverse arrows}
+
+Sometimes, shuch as for very small dimensions, you need to reverse the
+arrows. You can then use a \docAuxKey{dimeline reverse} arrow.
+
+\begin{exampleB}{}
+ \begin{tikzpicture}[spy using outlines={circle, magnification=25, size=6cm,
+ connect spies}]
+ \helpgrid{-1}{-1}{5}{4}
+ \draw[line width=0.01,color=red] plot[mark=+] coordinates{(3,3)} {};
+ \draw[line width=0.01,color=green] plot[mark=x] coordinates{(3,3)} {};
+
+ \dimline[line style = {line width=0.5,
+ arrows=dimline reverse-dimline reverse}]{(0,0)}{(3,3)}{Label};
+ \spy [blue] on (3.025,3.025) in node [fill=white] at (6.5,1.5);
+ \end{tikzpicture}
+\end{exampleB}
+
+\subsection{Styling your dimension lines}
+
+You can customize your dimension lines like any other \TikZ{} environment.
+\begin{exampleB}{}
+ \begin{tikzpicture}[scale=0.5]
+ \helpgrid{-1}{-1}{4}{7}
+ \draw (0,0) -- (0,4) -- (.5,4) -- (.5,5) -- (1.,5) -- (1.,4) -- (1.5,4) -- (1.5,0)
+ -- cycle;
+ \dimline[color=blue,
+ extension start length=-0.25, extension end length=-0.25]{(2.75,0)}{(2.75,4)}{4.0};
+ \dimline[color=red,
+ line style={arrows=dimline reverse-dimline reverse},
+ label style={above=0.8ex,font=\tiny},
+ extension start length=1,
+ extension end length=1]{(0.5,5.6)}{(1.0,5.6)}{0.5};
+ \end{tikzpicture}
+\end{exampleB}
+
+
+\subsection{Complex extension lines}
+
+This example shows you how to use both a \docAuxKey{extension start path}
+and \docAuxKey{extension end path}. This is useful if you want to enlarge a
+small dimension area.
+
+\begin{exampleB}{}
+ \begin{tikzpicture}[scale=0.5]
+ \helpgrid{-1}{-1}{4}{7}
+ \draw (0,0) -- (0,4) -- (.5,4) -- (.5,5) -- (1.,5) -- (1.,4) -- (1.5,4) -- (1.5,0)
+ -- cycle;
+
+ \draw[color=red] node (A) at (2.5,0) {} node [yshift=1ex,xshift=-1ex]
+ at (A) {\tiny{A}};
+ \dimline[color=blue,
+ line style = {line width=0.7},
+ extension start length=-0.24,
+ extension end length=-0.24] {(A)}{($ (A) + (0,4) $)}{4.0};
+ \dimline[label style={above=0.5ex, fill=blue!10,},
+ extension start path = {(0,6) (0,5.7) (0.5,5.4) (0.5,5.05)},
+ extension start style = { green },
+ extension end path = {(1.5,6) (1.5,5.7) (1,5.4) (1,5.05)},]
+ {(0,6)}{(1.5,6)}{0.5};
+ \draw[color=red,line width=0.01] plot[mark=x] coordinates{(A)} {};
+ \end{tikzpicture}
+\end{exampleB}
+
+\section{License}
+
+This program is free software. It comes without any warranty, to the extent
+permitted by applicable law. You can redistribute it and/or modify it under
+the terms of the Do What The Fuck You Want To Public License, Version 2, as
+published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+details.
+
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-dimline/tikz-dimline.sty b/graphics/pgf/contrib/tikz-dimline/tikz-dimline.sty
new file mode 100644
index 0000000000..e8d9750cec
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-dimline/tikz-dimline.sty
@@ -0,0 +1,189 @@
+%% Dimension line for LaTeX/TikZ
+%% Copyright © 2013 Sébastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>
+%%
+%% This file may be distributed and/or modified
+%%
+%% 1. under the LaTeX Project Public License and/or
+%% 2. under the WTF Public License.
+%%
+%%
+%% This simplify the creation drawing of dimension arrows.
+%%
+%%
+%% To install it copy the tango directory to either:
+%% - $TEXHOME/tex/latex/
+%% - ~/texmf/tex/latex/
+%% - ~/Library/texmf/tex/latex
+%%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-dimline}[2013/03/13 v1.0 initial version]
+
+\RequirePackage{tikz}
+\RequirePackage{pgfplots}
+\RequirePackage{ifthen}
+
+\usetikzlibrary{calc,decorations.markings,arrows}
+
+\makeatletter
+
+
+
+\pgfkeys {
+ /dimline/.cd,
+ execute style/.style = {#1},
+ execute macro/.style = {/dimline/execute style/.expand once=#1},
+}
+
+
+\newdimen\dimline@arrow@linewidth
+
+\pgfarrowsdeclare{dimline}{dimline}
+{
+ \arrowsize=1\pgflinewidth
+ \pgfarrowsleftextend{0\arrowsize}
+ \pgfarrowsrightextend{5\arrowsize}
+} {
+ \arrowsize=1\pgflinewidth
+ \pgfsetdash{}{0pt} % do not dash
+ % |
+ \pgfsetlinewidth{.5\arrowsize}
+ \pgfpathmoveto{\pgfpoint{4.75\arrowsize}{3\arrowsize}}
+ \pgfpathlineto{\pgfpoint{4.75\arrowsize}{-3\arrowsize}}
+ \pgfusepathqstroke
+ % >
+ \pgfsetlinewidth{0.01pt}
+ \pgfpathmoveto{\pgfpoint{4.5\arrowsize}{0pt}}
+ \pgfpathlineto{\pgfpoint{-3\arrowsize}{2\arrowsize}}
+ \pgfpathlineto{\pgfpoint{-3\arrowsize}{-2\arrowsize}}
+ \pgfpathclose
+ \pgfusepathqfillstroke
+}
+
+
+\pgfarrowsdeclare{dimline reverse}{dimline reverse}
+{
+ \arrowsize=1\pgflinewidth
+ \pgfarrowsleftextend{-5\arrowsize}
+ \pgfarrowsrightextend{0\arrowsize}
+} {
+ \arrowsize=1\pgflinewidth
+ \pgfsetdash{}{0pt} % do not dash
+ % |
+ \pgfsetlinewidth{0.5\arrowsize}
+ \pgfpathmoveto{\pgfpoint{-0.25\arrowsize}{3\arrowsize}}
+ \pgfpathlineto{\pgfpoint{-0.25\arrowsize}{-3\arrowsize}}
+ \pgfusepathqstroke
+ % >
+ \pgfsetlinewidth{0.01pt}
+ \pgfpathmoveto{\pgfpoint{0pt}{0pt}}
+ \pgfpathlineto{\pgfpoint{7.5\arrowsize}{2\arrowsize}}
+ \pgfpathlineto{\pgfpoint{7.5\arrowsize}{-2\arrowsize}}
+ \pgfpathclose
+ \pgfusepathqfillstroke
+}
+
+
+% measure lenght
+% http://tex.stackexchange.com/questions/123913
+
+
+\newcommand{\dimline@do@nothing}[1]{#1}%
+% http://tex.stackexchange.com/questions/58283/tikz-how-to-determine-the-vector-between-two-co-ordinates
+
+
+% #1: optional keys parameters
+% #2: start point
+% #3: end point
+% #4: text
+\newcommand{\dimline}[4][]{%
+
+ \pgfplotsifinaxis{%
+ \let\dimline@internal\pgfplotsextra%
+ }{%
+ \let\dimline@internal\dimline@do@nothing%
+ }%
+
+ \dimline@internal{
+ \pgfkeys{
+ dimline/.is family,
+ dimline,
+ color/.initial = black,
+ extension start length/.initial=1cm,
+ extension end length/.initial=1cm,
+ extension start angle/.initial=-90,
+ extension end angle/.initial=90,
+ line style/.initial = {},
+ label style/.initial = {},
+ extension style/.initial = {},
+ extension start style/.initial = {},
+ extension start path/.initial = {},
+ extension end style/.initial = {},
+ extension end path/.initial = {},
+ #1,
+ line style/.get = \dimline@line@style,
+ label style/.get = \dimline@label@style,
+ extension style/.get = \dimline@extension@style,
+ extension start style/.get = \dimline@extension@start@style,
+ extension start path/.get = \dimline@extension@start@path,
+ extension end style/.get = \dimline@extension@end@style,
+ extension end path/.get = \dimline@extension@end@path,
+ }
+
+ \begin{scope} [
+ line/.style = {
+ color=\pgfkeysvalueof{/dimline/color},
+ arrows=dimline-dimline,
+ /dimline/execute macro = \dimline@line@style,
+ },
+ extension/.style = {
+ color=\pgfkeysvalueof{/dimline/color}!40, line width=0.01,
+ /dimline/execute macro = \dimline@extension@style,
+ },
+ extension start/.style = {
+ extension,
+ /dimline/execute macro = \dimline@extension@start@style
+ },
+ extension end/.style = {
+ extension,
+ /dimline/execute macro = \dimline@extension@end@style,
+ },
+ label/.style = {
+ fill=white, align=center, sloped=true, pos=0.5,
+ /dimline/execute macro = \dimline@label@style
+ },
+ ]
+
+ \coordinate (a) at #2 {};
+ \coordinate (b) at #3 {};
+
+ \ifthenelse{\equal{\dimline@extension@start@path}{}}{
+ \coordinate (a to b) at ($(a)!\pgfkeysvalueof{/dimline/extension start length}!\pgfkeysvalueof{/dimline/extension start angle}:(b)$);
+ \draw [extension start] (a.center) -- (a to b);
+ } {
+ \draw [extension start] plot coordinates {\dimline@extension@start@path};
+ }
+
+ \ifthenelse{\equal{\dimline@extension@end@path}{}}{
+ \coordinate (b to a) at ($(b)!\pgfkeysvalueof{/dimline/extension end length}!\pgfkeysvalueof{/dimline/extension end angle}:(a)$);
+ \draw [extension end] (b.center) -- (b to a);
+ } {
+ \draw [extension end] plot coordinates {\dimline@extension@end@path};
+ }
+
+ \draw[line] (a.center) -- (b.center) node[label] {#4};
+ \end{scope}
+ }
+}
+
+
+
+\@ifclassloaded{beamer}{%
+ \renewcommand<>{\dimline}[4][]{\only#5{\beameroriginal{\dimline}[#1]{#2}{#3}{#4}}}
+}
+\makeatother
+
+
+\endinput
+%% tikz-dimline.sty ends here.
+
diff --git a/graphics/pgf/contrib/tikz-feynhand/README.md b/graphics/pgf/contrib/tikz-feynhand/README.md
new file mode 100644
index 0000000000..0f0b848fb6
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/README.md
@@ -0,0 +1,48 @@
+
+The package Tikz-FeynHand https://ctan.org/pkg/tikz-feynhand let's you draw Feynman diagrams using TikZ.
+
+It is a low-end modification of the package TikZ-Feynman at https://ctan.org/pkg/tikz-feynman,
+one of whose principal advantages is the automatic generation of diagrams, for which it needs LuaTex.
+FeynHand only provides the manual mode and hence runs in LaTex without any reference to LuaTex.
+
+In addition it provides some NEW STYLES for vertices and propagators,
+alternative SHORTER KEYWORDS in addition to TikZ-Feynman's longer ones,
+some shortcut commands for QUICKLY CUSTOMIZING the diagrams' look,
+and the new feature to put one propagator "ON TOP" of another.
+
+It also includes a quick USER GUIDE for getting started,
+with many examples and a 5-minute introduction to TikZ.
+
+
+
+ FILES
+-------
+
+1. tikz-feynhand.sty - the tex style file of the package
+2. tikzlibraryfeynhand.code.tex - code file
+3. tikzfeynhand.keys.code.tex - defines Tikz keys
+4. tikz-feynhand.userguide.pdf - a userguide for the package
+5. tikz-feynhand.userguide.tex - the tex source of the userguide
+6. changes.txt - lists changes since last version
+7. shell_escape.jpg - a TexWorks screenshot for the userguide
+8. README.md - this file
+
+
+
+LICENSE
+-------
+
+Copyright (C) 2019 Max Dohse
+Copyright (C) 2016 Joshua Ellis
+
+This whole package (code and documentation)
+may be redistributed and/or modified under the terms of the
+GNU General Public License as published by the Free Software Foundation, either
+version 3 of the License, or (at your option) any later version.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Max Dohse.
+
+This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/graphics/pgf/contrib/tikz-feynhand/changes.txt b/graphics/pgf/contrib/tikz-feynhand/changes.txt
new file mode 100644
index 0000000000..aad3cfddb7
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/changes.txt
@@ -0,0 +1,88 @@
+LIST OF CHANGES
+
+by which this package tikz-feynhand (Version 1.1.0 of 2019/08/19)
+which is available at https://ctan.org/pkg/tikz-feynhand
+
+was obtained from Version 1.0.0
+
+==========================================================================
+
+All file names and line numbers below refer to the files of Version 1.1.0.
+
+==============================================
+ FILE: tikz-feynhand.sty
+
++ no changes
+
+==============================================
+ FILE: tikzlibraryfeynhand.code.tex
+
++ line 228: inserted:
+
+%% Slash
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@slash{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{slash@@}}
+ {\tikzfeynhand@key@opt{slash@@}[]}}
+\pgfkeyslet{/tikzfeynhand/slash/.@cmd}{\tikzfeynhand@slash}
+
+%% Backslash
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@backslash{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{backslash@@}}
+ {\tikzfeynhand@key@opt{backslash@@}[]}}
+\pgfkeyslet{/tikzfeynhand/backslash/.@cmd}{\tikzfeynhand@backslash}
+
+
+==============================================
+ FILE: tikzfeynhand.keys.code.tex
+
++ line 629: inserted:
+
+ %% Slashes
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ slash/.search also={/tikzfeynhand,/tikz},
+ %% Parameters
+ slash/size/.store in=\tikzfeynhand@slash@size,
+ slash/size=5\feynhandlinesize,
+ slash/style/.store in=\tikzfeynhand@slash@style,
+ slash/style={},
+ %% Styles
+ slash@@/.style args={[#1]#2}{
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ markings,
+ mark=at position #2 with {
+ \tikzfeynhandset{slash/.cd,#1}
+ \draw [\tikzfeynhand@slash@style] (-\tikzfeynhand@slash@size, -2*\tikzfeynhand@slash@size) -- (\tikzfeynhand@slash@size, 2*\tikzfeynhand@slash@size);
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ slash@@/.default={[]0.5},
+ %%
+ %% Backslashes
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ backslash/.search also={/tikzfeynhand,/tikz},
+ %% Parameters
+ backslash/size/.store in=\tikzfeynhand@backslash@size,
+ backslash/size=5\feynhandlinesize,
+ backslash/style/.store in=\tikzfeynhand@backslash@style,
+ backslash/style={},
+ %% Styles
+ backslash@@/.style args={[#1]#2}{
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ markings,
+ mark=at position #2 with {
+ \tikzfeynhandset{backslash/.cd,#1}
+ \draw [\tikzfeynhand@backslash@style] (-\tikzfeynhand@backslash@size, 2*\tikzfeynhand@backslash@size) -- (\tikzfeynhand@backslash@size, -2*\tikzfeynhand@backslash@size);
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ backslash@@/.default={[]0.5},
diff --git a/graphics/pgf/contrib/tikz-feynhand/shell_escape.jpg b/graphics/pgf/contrib/tikz-feynhand/shell_escape.jpg
new file mode 100644
index 0000000000..66e8da4072
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/shell_escape.jpg
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.sty b/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.sty
new file mode 100644
index 0000000000..205b451fa7
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.sty
@@ -0,0 +1,48 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-FeynHand, Version 1.1.0 of 2019/08/19
+% Feynhand Diagrams with TikZ (LaTex manual version)
+% Copyright (C) 2019 Max Dohse
+% Copyright (C) 2016 Joshua Ellis
+%
+%
+% This LaTeX file and the whole package are free:
+% you can redistribute it and/or modify it under the
+% terms of the GNU General Public License as published by the Free Software Foundation,
+% either version 3 of the License, or (at your option) any later version.
+%
+%
+% This file is a modification of the file tikz-feynman.sty
+% of the package tikz-feynman (version 1.1.0 of 2016/02/05)
+% which is available online at https://ctan.org/pkg/tikz-feynman
+% for a list of changes, see the file CHANGES.TXT
+%
+% available at https://ctan.org/pkg/tikz-feynhand
+% The Current Maintainer of this work is Max Dohse.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\tikzfeynhand@date{2019/08/19}
+\def\tikzfeynhand@version@major{1}
+\def\tikzfeynhand@version@minor{1}
+\def\tikzfeynhand@version@patch{0}
+\edef\tikzfeynhand@version{\tikzfeynhand@version@major.\tikzfeynhand@version@minor.\tikzfeynhand@version@patch}
+
+\ProvidesPackage{tikz-feynhand}[\tikzfeynhand@date v\tikzfeynhand@version Feynman diagrams with TikZ (LaTex manual version)]
+
+\RequirePackage{tikz}[2013/12/13] % v3.0.0
+\RequirePackage{pgfopts}
+
+\usetikzlibrary{feynhand}
+\usetikzlibrary{graphs}
+
+\endinput
+
+% Local Variables:
+% TeX-master: "tikz-feynhand"
+% End:
diff --git a/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.pdf b/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.pdf
new file mode 100644
index 0000000000..2935127011
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.tex b/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.tex
new file mode 100644
index 0000000000..25de1e773e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/tikz-feynhand.userguide.tex
@@ -0,0 +1,2174 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-FeynHand
+% Feynman Diagrams with TikZ (LaTex manual version)
+% Copyright (C) 2019 Max Dohse
+%
+% available at https://ctan.org/pkg/tikz-feynhand
+%
+% This LaTeX file is free: you can redistribute it and/or modify it under the
+% terms of the GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option) any later
+% version.
+%
+% This is distributed in the hope that it will be useful, but WITHOUT ANY
+% WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+% A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%
+%
+\pdfoutput=1
+\pdfcompresslevel=9
+% highest compression level for text and image (0, ..., 9)
+%
+\documentclass[10pt,letterpaper,twoside,notitlepage]{article}
+%
+% __________________________________________________________
+%
+\usepackage{amsfonts}
+\usepackage[intlimits]{amsmath}
+\usepackage{amssymb}
+\usepackage{amsxtra}
+\usepackage[dvipsnames]{xcolor}
+\usepackage{colordvi}
+\usepackage{colortbl}
+\usepackage{float}
+\usepackage{floatflt}
+\usepackage{graphicx}
+\usepackage{hhline}
+\usepackage[compat=1.1.0]{tikz-feynhand}
+\usepackage{xspace}
+\usepackage[bookmarks=true,%
+ bookmarksnumbered=true,%
+ bookmarksopen=true,%
+ allbordercolors=lime!60!white]%
+ {hyperref}
+%
+% __________________________________________________________
+%
+\providecommand{\nc}{\newcommand}
+\nc{\redcol}{\color{red!80!black}\,}
+\nc{\vercol}{\color{green!24!black}\,}
+\nc{\blucol}{\color{blue!40!black}\,}
+\nc{\brocol}{\color{red!30!black}\,}
+\nc{\txcol}{\color{black}\,\xspace}
+
+\nc{\itembf}[1][+]{\item[\textbf{#1}]}
+
+% __________________________________________________________
+%
+\setcounter{secnumdepth}{3}
+% sections etc. are numerated down to level 3 = SUBSUBSECTION
+\setcounter{tocdepth}{3}
+% table of contents lists headlines down to level 3
+
+\numberwithin{figure}{section}
+% figure numbers are in format (#section.#figure)
+
+%% ======= PAGE LAYOUT ===============================
+
+%\usepackage{showframe} % shows frames for margins
+\usepackage{geometry}
+\geometry{letterpaper,
+ top=19mm, bottom=18mm,
+ inner=20mm, outer=20mm,
+ marginparsep=2mm, marginparwidth=12mm}
+
+\setlength{\parindent}{5mm}
+% width of indentation in the first line of paragraph
+\setlength{\parskip}{0mm}
+% vertical distance separating two paragraphs
+
+%% ======= BEGIN DOCUMENT ============================
+%
+\tikzexternalize[prefix=tikzgraphics/]
+%\tikzset{external/force remake} % forces refresh of all external TikZ graphics
+%
+\begin{document}%
+%
+%
+% =====================================================================
+% ===== TITLE STUFF ===========================================
+%%
+\thispagestyle{empty}
+%
+\begin{centering}
+ \Large\bfseries%
+ TikZ-FeynHand: Basic User Guide%
+ \vspace{1mm}\\
+ \large\mdseries%
+ Max Dohse%
+ \vspace{1mm}\\
+ \normalsize%
+ \today
+ \vspace{1mm}\\
+ \small\itshape
+ Written at Instituto de F\'isica y Matem\'aticas (IFM-UMSNH),
+ Universidad Michoacana de San Nicol\'as de Hidalgo,\\
+ Edificio C-3, Ciudad Universitaria,
+ 58040 Morelia, Michoac\'an, M\'exico.
+ \vspace{1.5mm}\\
+\end{centering}
+%
+% ===== QUICK REFERENCE =============================================
+%
+\hrule
+\vspace{3mm}
+{\centering\Large\bfseries Quick Reference\vspace{-2mm}\\}
+%
+\noindent
+\textbf{Environment}\\
+\vercol\verb!\begin{feynhand}... \end{feynhand}!\txcol
+enclosed in \vercol\verb!\begin{tikzpicture}[OPTIONS] ... \end{tikzpicture}!\txcol\\
+OPTIONS: \vercol\verb!baseline=1cm, baseline=(v.base), node distance = 2cm!\txcol,
+no options are mandatory.
+\vspace{1.5mm}\\
+%
+\noindent
+\textbf{Vertices}\\
+\blucol\verb!\vertex (v0) at (x0,y0);!\txcol\\
+\blucol\verb!\vertex [particle] (v1) at (x1,y1) {e$^-$};!\txcol\\
+\blucol\verb!\vertex [STYLE] (v2) at (x2,y2)! \redcol\verb!{}!\blucol\verb!;!\txcol\\
+STYLE options: \blucol\verb!dot, ringdot, squaredot, crossdot, blob, blobring, blobgray, blobNW, blobNE!\txcol\\
+If STYLE option omitted/empty: nothing is drawn, vertex only defined for later use (drawing propagators).
+\vspace{1.5mm}\\
+%
+\noindent
+\textbf{Propagators}\\
+\vercol\verb!\propag [STYLE] (v1) to [EDGE] (v2);!\txcol\qquad\qquad
+(If STYLE option omitted/empty: straight line is drawn.)\\
+\vercol\verb!\graph {(v1) --[STYLE, EDGE] (v2) --[STYLE, EDGE] (v3) --[STYLE, EDGE] (v4)};!\txcol
+\\[1mm]
+Short STYLE options: \vercol\verb!fer, antfer, pho, bos, chabos, antbos, sca, chasca, antsca,!\\
+\textcolor{white}{Short STYLE options:}
+\verb!glu, gho, chagho, antgho, maj, antmaj, plain, mom, revmom!\txcol\\
+EDGE options: \vercol\verb!edge label, in, out, looseness, half left, quarter right!\txcol
+\\
+Crossing propagators:\quad
+STYLE option \redcol\verb!top!\txcol,
+for example: \vercol\verb!\propag[fer,! \redcol\verb!top!\vercol\verb!] (a) to (b);!\txcol
+\vspace{1.5mm}\\
+%
+\noindent
+\textbf{Customize}\\
+\blucol\verb!\setlength{\feynhanddotsize}{LENGTH}!\txcol\\
+analogue:
+\blucol\verb!\feynhandblobsize, \feynhandlinesize, \feynhandarrowsize, \feynhandtopsep!\txcol\\
+\blucol\verb!\renewcommand{\feynhandtopsepcolor}{COLOR}!\txcol\\
+\blucol\verb!\tikzfeynhandset{every STYLE={/tikz/color=COLOR},}!\txcol\\
+\vspace{0mm}
+%
+% =====================================================================
+\hrule
+\vspace{2mm}
+
+{\centering Version 1.1.0 -
+ available at\qquad \texttt{https://ctan.org/pkg/tikz-feynhand}\\}
+
+\vspace{1mm}
+
+\hrule
+% ===== TABEL OF CONTENTS ===========================================
+%
+\vspace{-2mm}
+\tableofcontents
+%
+% =====================================================================
+%
+% ===== MAIN PART ============================================
+%
+% =====================================================================
+%
+\section{Goals and related software}
+\label{sec:_goals}
+%
+\noindent
+\textbf{TikZ-FeynHand} is a low-end version of Joshua Ellis' original
+\textbf{TikZ-Feynman} package \cite{tikzfeynman} (Version 1.1.0),
+which has provided efficient new ways of drawing beautiful Feynman diagrams automatically
+(and manually).
+FeynHand is a modification for those users who want \textbf{easy access} to TikZ-Feynman's
+drawing styles \textbf{in LaTex without any reference to LuaTex},
+and who want to \textbf{customize the diagrams} more easily.
+FeynHand thus aims to be an alternative way to access
+the manual mode of its big brother TikZ-Feynman.
+
+The drawing styles of TikZ-FeynHand are available through simple commands
+following the \textbf{syntax conventions of TikZ,}
+which uses Tex-like commands to create graphics.
+Since there are still \textbf{journals} which do not yet support TikZ in submissions,
+TikZ is capable of creating separate PDF graphic files,
+which can then be submitted with the article.
+This is called \textbf{externalizing the graphics} and is outlined in
+Appendix~\ref{Apx_tikzbasics_externalize},
+see also Section~50.4 in the TikZ/PGF Manual~\cite{tikz}.
+\\[1.5mm]
+%
+\noindent
+The \textbf{GENERAL WORKFLOW} for creating a diagram with TikZ-FeynHand is the following:
+\begin{itemize}
+\itembf[0.]
+ Initialize the \vercol\verb$feynhand$\txcol environment
+ inside the \vercol\verb$tikzpicture$\txcol environment\\
+ (in turn typically within a \vercol\verb$figure$\txcol or some math environment).
+ %
+ \itembf[1.]
+ Set the positions of the vertices and the styles they are drawn in.
+ %
+ \itembf[2.]
+ Insert the propagator lines between the vertices.
+ %
+ \itembf[x.]
+ Draw extra objects (like coordinate systems).
+ %
+\end{itemize}
+%
+FeynHand offers additonal shorter versions of TikZ-Feynmans TikZ-keys,
+because I find some of them quite long, e.g.~\vercol\verb$anti charged boson$\txcol.
+With little practice and efficient use of copy and paste,
+the ease of creating diagrams by hand is similar in both packages.
+FeynHand contains a few tweaks that are handy for me and might be for others.
+\\[1mm]
+The other main \textbf{features of FeynHand that differ from TikZ-Feynman}
+(Version 1.1.0) are listed below.
+%
+\begin{itemize}
+ %
+ \item
+ Package does neither load the Tex package \vercol\verb$ifluatex$\txcol,\\
+ nor TikZ-Feynman's Lua patches \vercol\verb$tikzfeynman.patch.x.x.x.lua$\txcol.
+ %
+ \item
+ No extra \vercol\verb$\diagram$\txcol environment is needed,
+ since everything is placed by hand.
+ %
+ \item
+ \vercol\verb$top$\txcol style option for crossing propagators introduced,
+ see Section~\ref{sec:_feynmandiagrams_propagators_top}.
+ %
+ \item
+ Some additional vertex and propagator styles are available,
+ see Sections~\ref{sec:_feynmandiagrams_vertices}
+ and \ref{sec:_feynmandiagrams_propagators}.
+ %
+ \item
+ Shortcut commands for quickly customizing the diagrams' look,
+ see Section~\ref{sec:_feynmandiagrams_customizing}.
+ %
+ \item
+ For brevity, we access/leave math mode via \$ instead of the \vercol\verb$\($\txcol
+ and \vercol\verb$\)$\txcol suggested in TikZ-Feynman's manual.\\
+ However, this is rather a personal preference and the opinions on this topic are divided.
+ %
+\end{itemize}
+%
+This user guide just describes briefly \textbf{how to quickly use FeynHand.}
+There is also a three-page introduction to TikZ in Appendix~\ref{Apx_tikzbasics}.
+For more information on TikZ-Feynman's capabilities and commands,
+we recommend its elaborate documentation \cite{tikzfeynman},
+in particular Section~3, and also recommend the introduction
+and extensive manual of TikZ \cite{tikz}.
+%
+In all commands and keys mentioned in \cite{tikzfeynmanArticle}
+and the corresponding files, the string \vercol\verb$feynman$\txcol has been replaced
+by \vercol\verb$feynhand$\txcol in the FeynHand package,
+in order to prevent any clash of variable names,
+if both TikZ-Feynman and FeynHand are used together in the same LaTex document.
+%
+% =====================================================================
+%
+\subsection*{Acknowledgments}
+%
+\noindent
+I am grateful to Joshua Ellis for friendly advice
+and for writing TikZ-Feynman in the first place.\\
+I am also thankful to Till Tantau and all collaborators for writing TikZ/PGF.
+%
+%
+% =====================================================================
+%
+\subsection*{Citations}
+%
+\noindent
+If you use TikZ-FeynHand for any publication, please be so kind to\\
+cite both Joshua Ellis' original manual \cite{tikzfeynmanArticle} as well as this userguide.
+%
+% =====================================================================
+%
+\subsection*{License}
+%
+\noindent
+This PDF and the whole package are free: you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later version.
+%
+% =====================================================================
+%
+\newpage
+\section{Feynman diagrams with TikZ-FeynHand}
+\label{sec:_feynmandiagrams}
+%
+% =====================================================================
+%
+\subsection{Environment}
+\label{sec:_feynmandiagrams_environment}
+%
+\noindent
+The \blucol\verb$feynhand$\txcol package is loaded as usual
+with \blucol\verb$\usepackage{tikzfeynhand}$\txcol.
+All FeynHand commands are used within the \blucol\verb$feynhand$\txcol
+environment, which needs to be placed inside the \blucol\verb$tikzpicture$\txcol
+environment%
+\footnote{It is possible to define \texttt{feynhand} such that it includes \texttt{tikzpicture}.
+ We decide against this so that \texttt{feynhand}
+ can be used as a scope inside \texttt{tikzpicture}.
+ Further, doing so would make externalizing the graphics more difficult.}.
+%
+Of course, all \textbf{TikZ commands remain available} within \blucol\verb$feynhand$\txcol,
+and TikZ commands can also be placed outside of \blucol\verb$feynhand$\txcol
+inside the \blucol\verb$tikzpicture$\txcol enclosing it.
+
+The \textbf{coordinate system} used by TikZ is the usual cartesian (x,y)-plane,
+with the x-axis pointing horizontally to the right
+and the y-axis pointing vertically upwards on the page.
+The default coordinate unit is centimeters.
+We recall that all TikZ and/or FeynHand commands must \textbf{end with
+a \;;\; (semicolon).}
+
+When we want to use captions and labels, we enclose \blucol\verb$feynhand$\txcol
+in the \blucol\verb$figure$\txcol environment as below.
+%
+\blucol\begin{verbatim}
+\begin{figure}
+ \centering
+ \begin{tikzpicture}
+ \begin{feynhand}
+
+ ... FeynHand and/or TikZ commands ...
+
+ \end{feynhand}
+ \end{tikzpicture}
+ \caption{A diagram drawn with TikZ.}
+ \label{Fig:_diagram1}
+\end{figure}
+\end{verbatim}\txcol
+%
+% ---------------------------------------------------------------
+\vspace{-5mm}
+\subsection{Equations involving Feynman diagrams}
+%
+The \vercol\verb$feynhand$\txcol environment can also be used directly
+in math environments. For example, the code below produces the (nonsense) equation below it.
+For the \vercol\verb$baseline$\txcol option of the
+\vercol\verb$tikzpicture$\txcol environment, see Section~12.2.1
+in the TikZ/PGF Manual \cite{tikz}.
+In the first diagram we have set it to the y-coordinate of the vertex (o),
+and in the second we have set it to the value y=-0.3cm.
+That is, in each diagram the corresponding horizontal lines of constant y-coordinate
+are aligned with the baseline of the math environment.
+%
+\vercol\begin{verbatim}
+\begin{align*}
+ \int dx\; f(x) = \alpha
+ \begin{tikzpicture}[baseline=(o.base)]
+ \begin{feynhand}
+ \vertex (a) at (-1,-1); \vertex (b) at (1,-1); \vertex (c) at (0,1);
+ \vertex [dot, Blue] (o) at (0,0) {}; \propag [fermion, Blue] (a) to (o);
+ \propag [anti fermion, Blue] (b) to (o); \propag [fermion, Blue] (c) to (o);
+ \end{feynhand}
+ \end{tikzpicture}
+ - 2i\,e
+ \begin{tikzpicture}[baseline=-0.3cm]
+ \begin{feynhand}
+ \vertex (a) at (-1,-1); \vertex (b) at (1,-1); \vertex (c) at (0,1);
+ \vertex [dot, Orange] (o) at (0,0) {}; \propag [photon, Orange] (a) to (o);
+ \propag [photon, Orange] (b) to (o); \propag [photon, Orange] (c) to (o);
+ \end{feynhand}
+ \end{tikzpicture}
+\end{align*}
+\end{verbatim}\txcol
+%
+\vspace{-13mm}
+%
+\begin{align*}
+ \int\!\! dx\; f(x) = \alpha
+ \tikzsetnextfilename{baseline_obase}
+ %\tikzset{external/force remake}
+ \begin{tikzpicture}[baseline=(o.base)]
+ \begin{feynhand}
+ \vertex (a) at (-1,-1); \vertex (b) at (1,-1); \vertex (c) at (0,1);
+ \vertex [dot, blue] (o) at (0,0) {}; \propag [fermion, Blue] (a) to (o);
+ \propag [anti fermion, Blue] (b) to (o); \propag [fermion, Blue] (c) to (o);
+ \end{feynhand}
+ \end{tikzpicture}
+ - 2i\,e
+ \tikzsetnextfilename{baseline_03cm}
+ \begin{tikzpicture}[baseline=-0.3cm]
+ \begin{feynhand}
+ \vertex (a) at (-1,-1); \vertex (b) at (1,-1); \vertex (c) at (0,1);
+ \vertex [dot, orange] (o) at (0,0) {}; \propag [photon, Orange] (a) to (o);
+ \propag [photon, Orange] (b) to (o); \propag [photon, Orange] (c) to (o);
+ \end{feynhand}
+ \end{tikzpicture}
+\end{align*}
+%
+% =====================================================================
+%
+\subsection{Vertices}
+\label{sec:_feynmandiagrams_vertices}
+%
+\noindent
+The \vercol\verb$\vertex$\txcol command is the same as in TikZ-Feynman,
+and essentially consists of the command \vercol\verb$node$\txcol of TikZ.
+By declaring a vertex, we mean defining its name and its position
+in the coordinate system, and specifying how the vertex is to be drawn,
+see below for examples.
+The vertices' names are mere labels for later reference
+(just like equation labels in Latex)
+and don't show up anywhere in the graph.
+The idea is now to use the vertices' names as a reference for their
+coordinates. This makes their use and modification much easier.
+For example, we can draw a line from vertex (a) to (b) by
+\vercol\verb$\draw (a) to (b);$\txcol
+see Section~\ref{sec:_feynmandiagrams_propagators}.
+
+Below we list the available vertex styles.
+Some users like to draw a gap in propagator lines which cross each other
+without any interaction being implied there.
+This can be done using gap vertices,
+see Section~\ref{sec:_feynmandiagrams_propagators_top}.
+%
+% ------------------------------------------------------
+\subsubsection*{Bare vertex}
+%
+\noindent
+This is the basic vertex: nothing is drawn at the vertex itself,
+it merely connects propagator lines.
+Note that we do not put an empty argument \redcol\verb${}$\txcol at the end.
+\vspace{2mm}\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \vertex (c1) at (4,0.5); \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_bare}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex (b) at (2,0);
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Particle vertex}
+%
+\noindent
+Particle vertices are usually used only for incoming
+and outgoing particles. \\
+For intermediate particles, see propagator edge labels in
+Section~\ref{sec:_feynmandiagrams_proplabelsmomentum}.
+\vspace{2mm}\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [particle] (a) at (0,0) {e$^-$};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_particle}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [particle] (a) at (0,0) {e$^-$};
+ \vertex (b) at (2,0);
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Dot vertex}
+%
+\noindent
+Some users like to place dots on vertices in order to emphasize
+that an interaction occurs there.\\
+Note the empty argument \redcol\verb${}$\txcol at the end -
+without the dots/blobs will not appear!
+\vspace{2mm}\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [dot] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_dot}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [dot] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Ring dot vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [ringdot] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_ringdot}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [ringdot] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Square dot vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [squaredot] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_squaredot}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [squaredot] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Crossed dot vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [crossdot] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_crossdot}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [crossdot] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Blob vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [blob] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_blob}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [blob] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Ring blob vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [ringblob] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_ringblob}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [ringblob] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Gray blob vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [grayblob] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_grayblob}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [grayblob] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{NorthWest blob vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [NWblob] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_NWblob}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [NWblob] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{NorthEast blob vertex}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ ...
+ \vertex [NEblob] (b) at (2,0) {};
+ ...
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{vertex_NEblob}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0);
+ \vertex [NEblob] (b) at (2,0) {};
+ \vertex (c1) at (4,0.5);
+ \vertex (c2) at (4,-0.5);
+ \propag [plain] (a) to (b);
+ \propag [plain] (b) to (c1);
+ \propag [plain] (b) to (c2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection{Relative vertex placement}
+\label{sec:_feynmandiagrams_vertices_relative}
+%
+\noindent
+Above we have always placed the vertices using absolute coordinate values.
+Relative placement is done using the keys
+\blucol\verb$above, below, left, right$\txcol.
+When combined, the vertical key must come first, as in
+\blucol\verb$above right$\txcol.\\
+
+\noindent
+\begin{minipage}{0.75\linewidth}
+\blucol\begin{verbatim}
+ \vertex [dot] (a1) {};
+ \vertex [ringdot] (a2) [above right = of a1] {};
+ \propag [plain] (a1) to (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.2\linewidth}
+\tikzsetnextfilename{vertex_relative_1}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [dot] (a1) {};
+ \vertex [ringdot] (a2) [above right = of a1] {};
+ \propag [plain] (a1) to (a2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+
+\noindent
+The node distance used by these keys can be set
+by calling \blucol\verb$\begin{tikzpicture}[node distance = 2cm]$\txcol
+or \blucol\verb$\begin{feynhand}[node distance = 2cm]$\txcol.
+Moreover, we can specify the absolute distances relative to a vertex:\\
+
+\noindent
+\begin{minipage}{0.75\linewidth}
+\blucol\begin{verbatim}
+ \vertex [dot] (a1) {};
+ \vertex [dot] (a2) [right = 1.5cm of a1] {};
+ \propag [gluon] (a1) to (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.2\linewidth}
+\tikzsetnextfilename{vertex_relative_2}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [dot] (a1) {};
+ \vertex [dot] (a2) [right = 1.5cm of a1] {};
+ \propag [gluon] (a1) to (a2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+\begin{minipage}{0.75\linewidth}
+\blucol\begin{verbatim}
+ \vertex [ringdot] (a1) {};
+ \vertex [ringdot] (a2) [above right = 0.5cm and 2cm of a1] {};
+ \propag [photon] (a1) to (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.2\linewidth}
+\tikzsetnextfilename{vertex_relative_3}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [ringdot] (a1) {};
+ \vertex [ringdot] (a2) [above right = 0.5cm and 2cm of a1] {};
+ \propag [photon] (a1) to (a2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+
+
+
+%
+% =====================================================================
+%
+\subsection{Propagators}
+\label{sec:_feynmandiagrams_propagators}
+%
+\noindent
+You can draw propagators between vertices with FeynHand's \vercol\verb$\propag$\txcol command,
+whose long version \vercol\verb$\propagator$\txcol also works.
+Both are just TikZ' \vercol\verb$\draw$\txcol command,
+and thus can access all styles defined in TikZ-Feynman.
+The minimal example \vercol\verb$\propag[fer] (a) to (b);$\txcol
+draws a fermion propagator from vertex (a) and (b).
+Below we list all propagator styles and draw examples.
+FeynHand uses intuitive 3/6-letter versions, but also keeps TikZ-Feynman's longer ones:
+%
+\setlength{\extrarowheight}{3pt}
+\begin{table}[H]
+ \centering
+ \begin{tabular}{r>{\qquad} r}
+ \hline
+ Short Version & Long Version
+ \\
+ \hhline{==}
+ \verb$\propag$ & \verb$\propagator$\\
+ \hline
+ \verb$fer$ & \verb$fermion$\\
+ \verb$antfer$ & \verb$anti fermion$\\
+ \hline
+ \verb$pho$ & \verb$photon$\\
+ \hline
+ \verb$bos$ & \verb$boson$\\
+ \verb$chabos$ & \verb$charged boson$\\
+ \verb$antbos$ & \verb$anti charged boson$\\
+ \hline
+ \verb$glu$ & \verb$gluon$\\
+ \hline
+ %
+ \end{tabular}
+ \qquad\qquad\qquad
+ \begin{tabular}{r>{\qquad} r}
+ \hline
+ Short Version & Long Version
+ \\
+ \hhline{==}
+ \verb$sca$ & \verb$scalar$\\
+ \verb$chasca$ & \verb$charged scalar$\\
+ \verb$antsca$ & \verb$anti charged scalar$\\
+ \hline
+ \verb$gho$ & \verb$ghost$\\
+ \verb$chagho$ & \verb$charged ghost$\\
+ \verb$antgho$ & \verb$anti charged ghost$\\
+ \hline
+ \verb$maj$ & \verb$majorana$\\
+ \verb$antmaj$ & \verb$anti majorana$\\
+ \hline
+ %
+ \end{tabular}
+\end{table}
+%
+%
+% ------------------------------------------------------
+\subsubsection*{Fermions}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[fer] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_fermion}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[fer] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+\\
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propagator[antfer] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_antfer}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propagator[antfer] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Gluons}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[glu] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_gluon}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[glu] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \propag[glu] (a) to [out=0, in=180] (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_gluon_out_in}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \propag[gluon] (a) to [out=0, in=180] (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+% ------------------------------------------------------
+\subsubsection*{Bosons (photons are just bosons)}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[bos] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_boson}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[bos] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[pho] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_photon}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[pho] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,-1);
+ \propag[bos] (a) to [out=0, in=90] (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_boson_out_in}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,-1);
+ \propag[bos] (a) to [out=0, in=90] (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+% ------------------------------------------------------
+\subsubsection*{Charged bosons}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[chabos] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_chabos}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[chabos] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antbos] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_antbos}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antbos] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+% ------------------------------------------------------
+\newpage
+\subsubsection*{Scalars}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[sca] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_scalar}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[sca] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \propag[sca] (a) to [out=0, in=180] (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_scalar_out_in}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \propag[sca] (a) to [out=0, in=180] (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+% ------------------------------------------------------
+\vspace{-6mm}
+\subsubsection*{Charged scalars}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[chasca] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_chasca}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[chasca] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antsca] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_antsca}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antsca] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+% ------------------------------------------------------
+\subsubsection*{Ghosts}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[gho] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_ghost}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[gho] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \propag[gho] (a) to [out=0, in=180] (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_ghost_out_in}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \propag[gho] (a) to [out=0, in=180] (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% ------------------------------------------------------
+\subsubsection*{Charged ghosts}
+%
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[chagho] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_chaghost}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[chagho] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antgho] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_antghost}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antgho] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+% ------------------------------------------------------
+\subsubsection*{Majorana}
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[maj] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_major}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[maj] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antmaj] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_antmaj}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[antmaj] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+%
+% ------------------------------------------------------
+\subsubsection*{Linked propagators}
+%
+\noindent
+We can also draw "chains" of propagators from one vertex to the next to the next etc.~using
+TikZ' \blucol\verb$\graph$\txcol command.
+Then, all style options are attached to the connector \blucol\verb$--$\txcol
+as in the following example.
+\\
+
+%
+\begin{minipage}{0.75\linewidth}
+\blucol\begin{verbatim}
+ \graph {(a0) --[fer,green!50!black]
+ (a1) --[glu,red]
+ (a2) --[chabos,blue] (a3)};
+
+ \graph {(b0) --[fer, red, in=180, out=270, insertion=0.8]
+ (b1) --[glu, edge label =$k$]
+ (b2) --[chabos, blue, mom={[arrow style=blue] $q$}] (b3)};
+\end{verbatim}\txcol
+\end{minipage}
+%
+%
+\begin{minipage}{0.23\linewidth}
+\tikzsetnextfilename{propag_chain}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a0) at (0,2); \vertex (a1) at (1,2);
+ \vertex (a2) at (2,2); \vertex (a3) at (3,2);
+ \vertex (b0) at (0,1); \vertex (b1) at (1,0);
+ \vertex (b2) at (2,0); \vertex (b3) at (3,1);
+ \graph {(a0) --[fer, green!50!black] (a1) --[glu, red] (a2) --[chabos, blue] (a3)};
+ \graph {(b0) --[fer, red, in=180, out=270, insertion=0.8]
+ (b1) --[glu, edge label =$k$] (b2) --[chabos, blue, mom={[arrow style=blue] $q$}] (b3)};
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% --------------------------------------------------------------------------------
+\subsubsection{Keys: In, Out, Looseness, Left/Right, Half/Quarter}
+\label{sec:_feynmandiagrams_keysinoutetc}
+%
+\noindent
+The keys \vercol\verb$in, out$\txcol specify the angle
+at which the line leaves and enters the vertices.
+The angle is with respect to the coordinate system:
+0 degrees is right, 90 up, 180 left, 270 down.
+\vspace{2mm}\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[fer] (a) to [out=90, in=90] (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_keys_out_in}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \propag[fer] (a) to [out=90, in=90] (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+The key \vercol\verb$looseness$\txcol specifies
+how loose (distant) the arc is bending away
+from the straight line connecting the vertices.
+Its default value is 1.
+\vspace{2mm}\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \vertex (c) at (3,0); \vertex (d) at (5,0);
+ \propag[fer] (a) to [in=90, out=90] (b);
+ \propag[fer] (c) to [in=90, out=90, looseness=1.5] (d);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_keys_looseness}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \vertex (c) at (3,0); \vertex (d) at (5,0);
+ \propag[fer] (a) to [in=90, out=90] (b);
+ \propag[fer] (c) to [in=90, out=90, looseness=1.5] (d);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+The keys \vercol\verb$half left, half right, quarter left, quarter right$\txcol
+specify that the line is a half/quarter circle bending to the left/right
+with respect to the line's direction.
+\vspace{2mm}\\
+%
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \vertex (c) at (3,1); \vertex (d) at (5,1);
+ \propag[fer] (a) to [half left] (b);
+ \propag[fer] (c) to [half right, looseness=1.5] (d);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_keys_half}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \vertex (c) at (3,1); \vertex (d) at (5,1);
+ \propag[fer] (a) to [half left] (b);
+ \propag[fer] (c) to [half right, looseness=1.5] (d);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+\begin{minipage}{0.7\linewidth}
+\vercol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \vertex (c) at (3,1); \vertex (d) at (4,0);
+ \propag[fer] (a) to [quarter left] (b);
+ \propag[fer] (c) to [quarter right, looseness=1.5] (d);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.25\linewidth}
+\tikzsetnextfilename{propag_keys_quarter}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,0);
+ \vertex (c) at (3,1); \vertex (d) at (4,0);
+ \propag[fer] (a) to [quarter left] (b);
+ \propag[fer] (c) to [quarter right, looseness=1.5] (d);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% --------------------------------------------------------------------------------
+\vspace{-6mm}
+\newpage\subsubsection{Propagator labels and momentum arrows}
+\label{sec:_feynmandiagrams_proplabelsmomentum}
+%
+\noindent
+In order to include a label to a propagator line,
+we can use TikZ's \blucol\verb!edge label!\txcol key,
+see Section~14.13 in the TikZ/PGF Manual \cite{tikz}.
+\blucol\verb!edge label!\txcol sets a propagator label
+to the left of the propagator line, and the primed version
+\blucol\verb!edge label'!\txcol sets one to its right,
+see the following example.
+Left and right are relative with respect to the line's direction.
+\vspace{2mm}\\
+%
+\begin{minipage}{0.83\linewidth}
+\blucol\begin{verbatim}
+ \vertex (a1) at (0,0); \vertex (a2) at (1,1.5);
+ \vertex (b1) at (1.5,1.5); \vertex (b2) at (2.5,0);
+ \propag [fer, Orange] (a1) to [edge label = $k$] (a2);
+ \propag [fer, Blue] (b1) to [edge label'= $p'$] (b2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{propag_label}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a1) at (0,0); \vertex (a2) at (1,1.5);
+ \vertex (b1) at (1.5,1.5); \vertex (b2) at (2.5,0);
+ \propag [fer, RedOrange] (a1) to [edge label = $k$] (a2);
+ \propag [fer, Blue] (b1) to [edge label'= $p'$] (b2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+In order to add arrows indicating the momentum's direction to a propagator line,
+we can use the key \blucol\verb!momentum!\txcol.
+The key \blucol\verb!reversed momentum!\txcol draws the arrow in the reverse direction,
+and a prime changes the side on which the arrow appears, as above.
+FeynHand also offers the 3/6-letter shorthands \blucol\verb!mom!\txcol
+and \blucol\verb!revmom!\txcol.
+The momentum arrows \emph{do not} inherit the drawing style of the propagator line,
+and hence their style can be specified by an extra argument.
+\vspace{2mm}\\
+%
+\begin{minipage}{0.83\linewidth}
+\blucol\begin{verbatim}
+ \vertex (a1) at (0,0); \vertex (a2) at (1,1.5);
+ \vertex (b1) at (1.5,1.5); \vertex (b2) at (2.5,0);
+ \propag [fer, Orange, mom={[arrow style=Orange] $k$}] (a1) to (a2);
+ \propag [fer, Blue, revmom'={[arrow style=Blue] $p'$}] (b1) to (b2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{propag_arrows}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a1) at (0,0); \vertex (a2) at (1,1.5);
+ \vertex (b1) at (1.5,1.5); \vertex (b2) at (2.5,0);
+ \propag [fer, RedOrange, mom={[arrow style=RedOrange] $k$}] (a1) to (a2);
+ \propag [fer, Blue, revmom'={[arrow style=Blue] $p'$}] (b1) to (b2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+Note that \blucol\verb!edge label!\txcol
+is an option of the \blucol\verb!to!\txcol key,
+whereas \blucol\verb!momentum!\txcol is an option
+of the \blucol\verb!\propag!\txcol command.
+%
+% -------------------------------------------------------------------------------------------------------
+\vspace{-3mm}
+\subsubsection{Insertions}
+\label{sec:_feynmandiagrams_propagators_insertions}
+%
+\noindent
+Insertions can be placed on propagator lines as in the examples below.
+The values indicate the fraction of the propagator line's length
+at which the insertion marks are drawn.
+\\
+%
+\begin{minipage}{0.83\linewidth}
+\vercol\begin{verbatim}
+ \vertex [dot] (a1) at (0,0) {}; \vertex [dot] (a2) at (2,0) {};
+ \propag [chabos, red, insertion=0.25, insertion=0.75] (a1) to (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{propag_insertion_1}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [dot] (a1) at (0,0) {};
+ \vertex [dot] (a2) at (2,0) {};
+ \propag [chabos, red, insertion=0.25, insertion=0.75] (a1) to (a2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+\begin{minipage}{0.83\linewidth}
+\vercol\begin{verbatim}
+ \vertex [ringdot] (a1) at (0,0) {}; \vertex [ringdot] (a2) at (2,0) {};
+ \propag [chabos, red, insertion={[size=6pt,style=Green]0.25}] (a1) to (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{propag_insertion_2}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [ringdot] (a1) at (0,0) {};
+ \vertex [ringdot] (a2) at (2,0) {};
+ \propag [chabos, red, insertion={[size=6pt,style=Green]0.25}] (a1) to (a2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% -------------------------------------------------------------------------------------------------------
+\vspace{-3mm}
+\subsubsection{Slashes and backslashes}
+\label{sec:_feynmandiagrams_propagators_slashes}
+%
+\noindent
+Back/slashes work like insertions:
+\\
+%
+\begin{minipage}{0.83\linewidth}
+\vercol\begin{verbatim}
+ \vertex [dot] (a1) at (0,0) {}; \vertex [dot] (a2) at (2,0) {};
+ \propag [chabos, red, slash=0.25, slash=0.75] (a1) to (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{propag_slash_1}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [dot] (a1) at (0,0) {};
+ \vertex [dot] (a2) at (2,0) {};
+ \propag [chabos, red, slash=0.25, slash=0.75] (a1) to (a2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+\begin{minipage}{0.83\linewidth}
+\vercol\begin{verbatim}
+ \vertex [ringdot] (a1) at (0,0) {}; \vertex [ringdot] (a2) at (2,0) {};
+ \propag [chabos, red, backslash={[size=6pt,style=Green]0.25}] (a1) to (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{propag_slash_2}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex [ringdot] (a1) at (0,0) {};
+ \vertex [ringdot] (a2) at (2,0) {};
+ \propag [chabos, red, backslash={[size=6pt,style=Green]0.25}] (a1) to (a2);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+
+%
+% -------------------------------------------------------------------------------------------------------
+\newpage\subsubsection{Crossing propagators (one on top of the other)}
+\label{sec:_feynmandiagrams_propagators_top}
+%
+\noindent
+Crossings often indicate that the propagators merely cross on paper
+without any physical interaction being implied.
+First, draw the propagator line to become crossed/interrupted,
+then draw the crossing propagator on top of it by specifying
+the additional style key \blucol\verb$top$\txcol.
+For more intricate networks of crossing propagators, you can place auxiliary vertices
+to break the propagators into parts if necessary,
+and then place the respective parts on top of each other.
+
+If due to the crossings you wish to move the arrows of charged particles,
+specify \blucol\verb$with arrow=VALUE$\txcol,
+respectively \blucol\verb$with reversed arrow=VALUE$\txcol for antiparticles.
+\blucol\verb$VALUE$\txcol must be a number between 0 and 1,
+and indicates the fraction of propagator length at which TikZ inserts the arrow.
+The default value of \blucol\verb$VALUE$\txcol is 0.5.
+\vspace{-1mm}\\
+%
+\begin{minipage}{0.8\linewidth}
+\blucol\begin{verbatim}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \vertex (c) at (0,1); \vertex (d) at (2,0);
+ \propag [chabos, Orange, with arrow=0.25] (c) to (d);
+ \propag [fer, Blue, top] (a) to (b);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.15\linewidth}
+\tikzsetnextfilename{propag_gap_up}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \vertex (c) at (0,1); \vertex (d) at (2,0);
+ \propag [chabos, Orange, with arrow=0.25] (c) to (d);
+ \propag [fer, Blue, top] (a) to (b);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\vspace{-5mm}
+\\
+%
+\begin{minipage}{0.8\linewidth}
+\blucol\begin{verbatim}
+ ...
+ \propag[gluon, blue] (a) to [out=0, in=180] (b);
+ \propag[gluon, top] (c) to [out=0, in=180] (d);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.15\linewidth}
+\tikzsetnextfilename{propag_gluon_gap}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \begin{feynhand}
+ \vertex (a) at (0,0); \vertex (b) at (2,1);
+ \vertex (c) at (0,1); \vertex (d) at (2,0);
+ \propag[gluon, blue] (a) to [out=0, in=180] (b);
+ \propag[gluon, top] (c) to [out=0, in=180] (d);
+ \end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\vspace{-3mm}
+%
+%
+% =====================================================================
+%
+\subsection{Customizing styles}
+\label{sec:_feynmandiagrams_customizing}
+%
+FeynHand provides the following shortcuts for quickly modifying styles.
+Note that any change of these lengths at some point in the code
+affects all diagrams that come after this point.
+Also recall that if you externalize graphics (see Sec.~\ref{Apx_tikzbasics_externalize}),
+then TikZ refreshes pictures \emph{only} when their source code is changed.
+Hence to see the effect of such length changes,
+delete the external PDF-files or use \vercol\verb$\tikzset{external/force remake}$\txcol.
+%
+\begin{itemize}
+ \item
+ \vercol\verb$\setlength{\feynhanddotsize}{2mm}$\txcol
+ sets the diameter of the dots to 2mm (default: 1.5mm).
+ %
+ \item
+ \vercol\verb$\setlength{\feynhandblobsize}{10mm}$\txcol
+ sets the diameter of the blobs to 10mm (default: 7.5mm).
+ %
+ \item
+ \vercol\verb$\setlength{\feynhandlinesize}{2pt}$\txcol
+ sets the thickness of the propagator lines to 2pt (default: 0.5pt).\\
+ Also the lines of dots and blobs use this thickness.\\
+ The momentum arrows' line thickness scales as 0.64 times this value.
+ Also the amplitudes\\
+ and section lengths of the boson and photon waves
+ and of the gluon curls scale with this value.
+ %
+ \item
+ \vercol\verb$\setlength{\feynhandarrowsize}{8pt}$\txcol
+ sets the size of the arrows to 8pt (default: 6pt)\\
+ on all charged propagator lines
+ \vercol\verb$(fer, antfer, chabos, antbos, chasca, antsca, chagho, antgho)$\txcol\\
+ and majorana lines \vercol\verb$(maj, antmaj).$\txcol
+ The momentum arrows' tip size scales as 0.8 times this value.
+ %
+ \item
+ \vercol\verb$\setlength{\feynhandtopsep}{8pt}$\txcol
+ sets the width of the crossing gap for propagators on top of each other.
+ The default value is \vercol\verb$18\feynhandlinesize$\txcol.
+ %
+ \item
+ \vercol\verb$\renewcommand{\feynhandtopsepcolor}{yellow}$\txcol
+ sets the color of the crossing gap (default is white).
+ %
+\end{itemize}
+%
+\noindent
+\begin{minipage}{0.6\linewidth}
+Example diagram drawn with default values:
+\end{minipage}
+%
+\begin{minipage}{0.38\linewidth}
+\tikzsetnextfilename{tikz_customize_default}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+\begin{feynhand}
+ \vertex [ringdot] (a) at (0,0) {};
+ \vertex [NWblob] (b) at (2,0) {};
+ \vertex [crossdot] (c1) at (4,0.5) {};
+ \vertex [dot] (c2) at (5,-0.5) {};
+ \vertex [dot] (d) at (3,-0.5) {};
+ \propag [chasca, Green] (a) to (b);
+ \propag [gluon, Blue] (b) to (c2);
+ \propag [fer, top] (d) to (c1);
+ \propag [chabos, RedOrange, momentum={[arrow style=RedOrange] $k$}] (b) to (c1);
+\end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+\\
+\noindent
+\begin{minipage}{0.6\linewidth}
+Same diagram (same TikZ/FeynHand code) drawn after setting:
+\vercol\begin{verbatim}
+\setlength{\feynhanddotsize}{2mm}
+\setlength{\feynhandblobsize}{10mm}
+\setlength{\feynhandlinesize}{1pt}
+\setlength{\feynhandarrowsize}{9pt}
+\setlength{\feynhandtopsep}{3mm}
+\renewcommand{\feynhandtopsepcolor}{yellow}
+\end{verbatim}\txcol
+\end{minipage}
+%
+\setlength{\feynhanddotsize}{2mm}
+\setlength{\feynhandblobsize}{10mm}
+\setlength{\feynhandlinesize}{1pt}
+\setlength{\feynhandarrowsize}{9pt}
+\setlength{\feynhandtopsep}{3mm}
+\renewcommand{\feynhandtopsepcolor}{yellow}
+%
+\begin{minipage}{0.38\linewidth}
+\tikzsetnextfilename{tikz_customize_big}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+\begin{feynhand}
+ \vertex [ringdot] (a) at (0,0) {};
+ \vertex [NWblob] (b) at (2,0) {};
+ \vertex [crossdot] (c1) at (4,0.5) {};
+ \vertex [dot] (c2) at (5,-0.5) {};
+ \vertex [dot] (d) at (3,-0.5) {};
+ \propag [chasca, Green] (a) to (b);
+ \propag [gluon, Blue] (b) to (c2);
+ \propag [fer, top] (d) to (c1);
+ \propag [chabos, RedOrange, momentum={[arrow style=RedOrange] $k$}] (b) to (c1);
+\end{feynhand}
+\end{tikzpicture}
+\end{minipage}
+%
+% set again the default values
+\setlength{\feynhanddotsize}{1.5mm}
+\setlength{\feynhandblobsize}{7.5mm}
+\setlength{\feynhandlinesize}{0.5pt}
+\setlength{\feynhandarrowsize}{6pt}
+\setlength{\feynhandtopsep}{18\feynhandlinesize}
+\renewcommand{\feynhandtopsepcolor}{white}
+\vspace{-4mm}
+\\
+The color of a vertex/propagator style can be set for all subsequent diagrams
+in the current local Tex group (e.g. document or equation, figure, minipage environment)
+by the command \vercol\verb$\tikzfeynhandset$\txcol with the key \vercol\verb$every$\txcol:
+%
+\vercol\begin{verbatim}
+\tikzfeynhandset{every particle={/tikz/color=blue}, every dot={/tikz/color=red},}
+\tikzfeynhandset{every fermion={/tikz/color=green},}
+\end{verbatim}\txcol
+
+%
+% =====================================================================
+% =====================================================================
+% ===== APPENDICES ============================================
+%
+%\newpage
+\appendix
+%
+\section{TikZ Basics}
+\label{Apx_tikzbasics}
+%
+This appendix summarizes a few things that can be done with TikZ,
+just enough for getting started quickly.\\
+You can discover much more, and I recommend
+becoming familiar with the TikZ/PGF Manual \cite{tikz} bit by bit.
+
+% =====================================================================
+\subsection{Environment}
+\label{Apx_tikzbasics_environment}
+%
+\noindent
+All TikZ commands are used within the
+\brocol\verb$tikzpicture$\txcol environment.
+All TikZ commands that we mention are understood
+as appearing in this environment.
+When we want to use captions and labels, we enclose it in the
+\brocol\verb$figure$\txcol environment, but it can be called
+anywhere in the text or math of a Tex document:\\
+
+\noindent
+\begin{minipage}{0.6\linewidth}
+\brocol\begin{verbatim}
+\begin{figure}
+ \centering
+%\tikzset{external/force remake}
+ \begin{tikzpicture}
+
+ ... TikZ commands ...
+
+ \end{tikzpicture}
+ \caption{A diagram drawn with TikZ.}
+ \label{Fig:_diagram1}
+\end{figure}
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.39\linewidth}
+\brocol\begin{verbatim}
+\begin{align*}
+ \int dx\; f(x) =
+ \alpha
+%\tikzset{external/force remake}
+ \begin{tikzpicture}
+
+ ... TikZ commands ...
+
+ \end{tikzpicture}
+\end{align*}
+\end{verbatim}\txcol
+\end{minipage}
+%
+% =====================================================================
+\subsection{Layers}
+\label{Apx_tikzbasics_layers}
+%
+\noindent
+In general, objects that are drawn later in the code appear
+on top of objects that are drawn earlier (if they overlap).
+If we need to declare explicitly which objects
+we want to appear on top of other objects,
+then we can use layers.
+
+Layers are first declared with \brocol\verb$\pgfdeclarelayer$\txcol
+as in the following example, and then their order is set up
+from backmost to foremost with \brocol\verb$\pgfsetlayers$\txcol.
+The layer \brocol\verb$main$\txcol is predefined and does not need
+to be declared, but it must always be included in the order setup,
+for example:
+%
+\brocol\begin{verbatim}
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{foreground}
+\pgfsetlayers{background,main,foreground}
+\end{verbatim}\txcol
+%
+All drawing commands by default are placed on the layer
+\brocol\verb$main$\txcol.
+For placing them on other layers, they must be enclosed in the
+\brocol\verb$\pgfonlayer$\txcol environment as in the following example
+(the \brocol\verb$opacity$\txcol option is optional).\\
+
+\noindent
+\begin{minipage}{0.83\linewidth}
+\brocol\begin{verbatim}
+ \begin{pgfonlayer}{foreground}
+ \filldraw[fill=Orange, draw=Red, opacity=0.7] (1,0) circle [radius=6mm];
+ \end{pgfonlayer}
+ \filldraw[fill=Blue, draw=black] (1,0) circle [radius=9mm];
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{tikz_layers}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \pgfdeclarelayer{foreground}
+ \pgfsetlayers{main,foreground}
+ \begin{pgfonlayer}{foreground}
+ \filldraw[fill=Orange,draw=Red, opacity=0.7] (1,0) circle [radius=6mm];
+ \end{pgfonlayer}
+ \filldraw[fill=Yellow,draw=black] (0,0) circle [radius=8mm];
+\end{tikzpicture}
+\end{minipage}
+%
+% =====================================================================
+\subsection{Drawing objects}
+\label{Apx_tikzbasics_drawing}
+%
+\noindent
+All drawing commands must end with a \;;\; (semicolon).
+%
+% =====================================================================
+\subsubsection{Text and formulas}
+%
+\noindent
+Plain text and LaTex math formulas can be inserted anywhere
+in the graphic with TikZ' \brocol\verb$node$\txcol command.
+The text is centered at the node's coordinates:\\
+
+\noindent
+\begin{minipage}{0.83\linewidth}
+\brocol\begin{verbatim}
+ \filldraw[fill=Yellow, draw=Red] (0,0) circle [radius=1cm];
+ \node at (-0.8,-0.3) {\textcolor{Blue}{\bfseries Yes! $\alpha^2$}};
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{tikz_text_math}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \filldraw[fill=Yellow, draw=Red] (0,0) circle [radius=1cm];
+ \node at (-0.8,-0.3) {\textcolor{Blue}{\bfseries Yes! $\alpha^2$}};
+\end{tikzpicture}
+\end{minipage}
+%
+%
+% =====================================================================
+\subsubsection{Lines: straight and smooth}
+%
+\noindent
+A straight line from node (a) to node (b) is drawn by\\
+
+\noindent
+\begin{minipage}{0.83\linewidth}
+\brocol\begin{verbatim}
+ \draw [Red, line width = 2pt] (a1) to (a2);
+ \draw (b1) to [Blue] (b2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{tikz_lines_straight}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \node (a1) at (0,0) {};
+ \node (a2) at (1,0.5) {};
+ \node (b1) at (2,0) {};
+ \node (b2) at (3,0.5) {};
+ \draw [Red, line width = 2pt] (a1) to (a2);
+ \draw (b1) to [Blue] (b2);
+\end{tikzpicture}
+\end{minipage}
+%
+A smooth curve which leaves (a) at an angle of 45 degrees
+and enters (b) at 180 degrees is drawn by\\
+
+\noindent
+\begin{minipage}{0.83\linewidth}
+\brocol\begin{verbatim}
+ \draw [Green, line width=1mm] (a1) to [out=45, in=180] (a2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.16\linewidth}
+\tikzsetnextfilename{tikz_lines_in_out}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \node (a1) at (0,0) {};
+ \node (a2) at (1,0.5) {};
+ \draw [Green, line width=1mm] (a1) to [out=45, in=180] (a2);
+\end{tikzpicture}
+\end{minipage}
+\\
+\noindent
+The angles are with respect to the coordinate system, that is:
+0 degrees points right, 90 up, 180 left and 270 down.
+%
+%
+% =====================================================================
+\subsubsection{Lines with arrows}
+%
+Lines can be equipped with arrows by specifying this
+in the options of \brocol\verb$\draw$\txcol as inthe examples below.
+The most basic arrow styles are:
+\brocol\verb$>, Latex, Stealth, Circle, Bar$\txcol.
+Note the extra curly braces!\\
+
+\noindent
+\begin{minipage}{0.87\linewidth}
+\brocol\begin{verbatim}
+\draw [->] (a1) to (a2);
+\draw [<->,Red, line width = 1pt] (b1) to [out=45, in=135] (b2);
+\draw [{Circle[width=5pt,length=5pt]}-{Latex[length=8pt,width=6pt]}] (c1) to (c2);
+\draw [{Bar[Red,width=8pt]}-{Stealth[length=8pt, width=6pt]}] (d1) to (d2);
+\end{verbatim}\txcol
+\end{minipage}
+%
+\begin{minipage}{0.12\linewidth}
+\tikzsetnextfilename{tikz_arrows}
+%\tikzset{external/force remake}
+\begin{tikzpicture}
+ \node (a1) at (0,0) {};
+ \node (a2) at (2,0) {};
+ \node (b1) at (0,-0.7) {};
+ \node (b2) at (2,-0.7) {};
+ \node (c1) at (0,-1) {};
+ \node (c2) at (2,-1) {};
+ \node (d1) at (0,-1.5) {};
+ \node (d2) at (2,-1.5) {};
+ \draw [->] (a1) to (a2);
+ \draw [<->,Red, line width = 1pt] (b1) to [out=45, in=135] (b2);
+ \draw [{Circle[width=5pt,length=5pt]}-{Latex[length=8pt, width=6pt]}] (c1) to (c2);
+ \draw [{Bar[Red,width=8pt]}-{Stealth[length=8pt, width=6pt]}] (d1) to (d2);
+\end{tikzpicture}
+\end{minipage}
+%
+% =====================================================================
+\subsection{Externalizing graphics}
+\label{Apx_tikzbasics_externalize}
+%
+\noindent
+Externalizing means that TikZ creates a separate PDF file
+for each \brocol\verb$tikzpicture$\txcol environment
+which it encounters in the document.
+That is, when a \brocol\verb$tikzpicture$\txcol is encountered,
+TikZ checks whether there is already a corresponding PDF,
+and if so, then it includes this PDF with \brocol\verb$\includegraphics$\txcol
+and ignores the code in the \brocol\verb$tikzpicture$\txcol,
+else it creates the corresponding PDF such that it can be used
+in the next LaTex run.
+Using the external PDFs can speed up the LaTex runs significantly.
+TikZ also takes care of vertically positioning the externalized PDFs
+according to the \brocol\verb$baseline$\txcol option
+when it is used with \brocol\verb$tikzpicture$\txcol
+(this is what the .dpth files are for).
+TikZ recognizes automatically when the TikZ code of a graphic has been modified,
+and generates fresh PDFs \emph{only} for these modified graphics in the next LaTex run.
+
+In order to activate externalizing, we need to load the library with
+\brocol\verb$\usetikzlibrary{external}$\txcol
+(which both TikZ-Feynman and FeynHand do automatically)
+and put a \brocol\verb$\tikzexternalize[prefix=graphics/tikz/]$\txcol
+somewhere above the \brocol\verb$\begin{document}$\txcol command.
+Here, we use the \brocol\verb$prefix$\txcol option
+for telling TikZ that we want the external files to be created
+in the subdirectory \brocol\verb$graphics/tikz/$\txcol of the current dirctory.
+It may come in handy to have the TikZ-generated files
+in a subfolder separate from the other external graphic files.
+For example, in order to assure that the final document contains
+the final version of all graphics, we can force TikZ to refresh them
+by deleting all external PDFs created by TikZ.
+Having these in the separate subfolder avoids deleting graphics from other sources.
+Alternatively, we can include \brocol\verb$\tikzset{external/force remake}$\txcol
+in the document's preamble to force refresh all external PDFs.
+Including \brocol\verb$\tikzset{external/force remake}$\txcol
+in a local Tex group force refreshes all external PDFs in this group
+(e.g.~an equation, figure or minipage environment).
+
+We also have to tell LaTex to use shell escaping
+in order to enable it to create the external files.
+TexLive ships with the TexWorks editor, in which this can be achieved
+by going to the Edit menu and selecting Preferences.
+Next choose the Typesetting rider, select PdfLatex in
+the Processing Tools window, and add the argument
+-shell-escape by clicking on the + button.
+Then, move it to the top of the list by clicking on the up-arrow button.
+This should look somewhat like Figure~\ref{Fig:_shell_escape}.
+%
+\begin{figure}
+ \centering
+ \includegraphics[width=0.7\linewidth]{shell_escape.jpg}
+ \caption{TexWorks screenshot.}
+ \label{Fig:_shell_escape}
+\end{figure}
+
+TikZ creates filenames automatically for the externalized PDFs.
+For later use of these, it is often preferrable
+to specify these filenames by hand with the
+\brocol\verb$\tikzsetnextfilename$\txcol command,
+which needs to be placed right above
+the \brocol\verb$\begin{tikzpicture}$\txcol
+of the corresponding graphic.
+For example, \brocol\verb$\tikzsetnextfilename{scatter}$\txcol
+tells TikZ to store the next graphic as \brocol\verb$scatter.pdf$\txcol
+
+Apart from speeding up LaTex runs, the external files can also be used
+for submissions to journals which do not support TikZ.
+One way of doing this works without modifying the graphics' code:
+Instead of \brocol\verb$\usepackage{tikz}$\txcol
+respectively \brocol\verb$\usepackage{feynhand}$\txcol
+we put \brocol\verb$\usepackage{tikzexternal}$\txcol
+and include the file \brocol\verb$tikzexternal.sty$\txcol
+in our submissions. It basically tells LaTex to ignore
+the code in the \brocol\verb$tikzpicture$\txcol environments
+and to use the external PDFs instead.
+%
+If this does not work, then another way is to replace the figures'
+\brocol\verb$tikzpicture$\txcol environments by
+\brocol\verb$\includegraphics{tikz/filename.pdf}$\txcol
+and the equations' \brocol\verb$tikzpicture$\txcol environments
+by \brocol\verb$\vcenterbox{\includegraphics{tikz/filename.pdf}}$\txcol
+commands, having defined in the preamble:
+%
+\brocol
+\begin{verbatim}
+ \graphicspath{{graphics/}} % mind the double brackets!
+ \newcommand{\vcenterbox}[2][0.5]{\raisebox{-#1\height}{#2}}
+ % \vcenterbox centers the box's content (argument #2) vertically on the baseline.
+ % The optional argument #1 is for fine adjustment:
+ % values between 0 and 0.5 raise the box's center above the baseline,
+ % values between 0.5 and 1 push the box's center below the baseline.
+\end{verbatim}
+\txcol
+%
+% =====================================================================
+% =====================================================================
+% ===== BIBLIOGRAPHY ==========================================
+%
+\begin{thebibliography}{}
+%
+\bibitem{tikz} J.~Cr{\'emer}: A very minimal introduction to TikZ,\;
+ T.~Tantau et al.: TikZ {\&} PGF Manual,\newline
+ both available at \texttt{https://www.ctan.org/pkg/pgf}
+%
+\bibitem{tikzfeynman} J.~Ellis: TikZ-Feynman package documentation,%\newline
+ available at \texttt{https://www.ctan.org/pkg/tikz-feynman}
+%
+\bibitem{tikzfeynmanArticle} J.~Ellis: TikZ-Feynman: Feynman diagrams with TikZ,
+ Computer Physics Comm. \textbf{210}, p.103-123, 2017.\newline
+ \texttt{https://doi.org/10.1016/j.cpc.2016.08.019}\newline
+ \texttt{http://arxiv.org/abs/1601.05437}
+%
+\end{thebibliography}{}
+%
+%
+% =====================================================================
+%
+\end{document}
+%
+%
+
diff --git a/graphics/pgf/contrib/tikz-feynhand/tikzfeynhand.keys.code.tex b/graphics/pgf/contrib/tikz-feynhand/tikzfeynhand.keys.code.tex
new file mode 100644
index 0000000000..50b6de23f2
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/tikzfeynhand.keys.code.tex
@@ -0,0 +1,955 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-FeynHand, Version 1.1.0 of 2019/08/19
+% Feynhand Diagrams with TikZ (LaTex manual version)
+% Copyright (C) 2019 Max Dohse
+% Copyright (C) 2016 Joshua Ellis
+%
+%
+% This LaTeX file and the whole package are free:
+% you can redistribute it and/or modify it under the
+% terms of the GNU General Public License as published by the Free Software Foundation,
+% either version 3 of the License, or (at your option) any later version.
+%
+% This file is a modification of the file tikzfeynman.keys.code.tex
+% of the package tikz-feynman (version 1.1.0 of 2016/02/05)
+% which is available online at https://ctan.org/pkg/tikz-feynman
+% for a list of changes, see the file CHANGES.TXT
+%
+% available at https://ctan.org/pkg/tikz-feynhand
+% The Current Maintainer of this work is Max Dohse.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Lengths
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newlength{\feynhanddotsize}
+\setlength{\feynhanddotsize}{1.5mm}
+
+\newlength{\feynhandblobsize}
+\setlength{\feynhandblobsize}{7.5mm}
+
+\newlength{\feynhandlinesize}
+\setlength{\feynhandlinesize}{0.5pt}
+
+\newlength{\feynhandarrowsize}
+\setlength{\feynhandarrowsize}{6pt}
+
+\newlength{\feynhandtopsep}
+\setlength{\feynhandtopsep}{18\feynhandlinesize}
+
+%% Colors
+\newcommand{\feynhandtopsepcolor}{white}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Shapes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Crossed Circle
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfdeclareshape{crossed circle}
+{
+ \inheritsavedanchors[from=circle]
+ \inheritanchorborder[from=circle]
+ \inheritanchor[from=circle]{north}
+ \inheritanchor[from=circle]{north west}
+ \inheritanchor[from=circle]{north east}
+ \inheritanchor[from=circle]{center}
+ \inheritanchor[from=circle]{west}
+ \inheritanchor[from=circle]{east}
+ \inheritanchor[from=circle]{mid}
+ \inheritanchor[from=circle]{mid west}
+ \inheritanchor[from=circle]{mid east}
+ \inheritanchor[from=circle]{base}
+ \inheritanchor[from=circle]{base west}
+ \inheritanchor[from=circle]{base east}
+ \inheritanchor[from=circle]{south}
+ \inheritanchor[from=circle]{south west}
+ \inheritanchor[from=circle]{south east}
+
+ \inheritbackgroundpath[from=circle]
+
+ \foregroundpath{
+ % Compute south west
+ \centerpoint
+ \pgf@xc=\radius
+ \advance\pgf@x by-0.707107\pgf@xc
+ \advance\pgf@y by-0.707107\pgf@xc
+ \pgf@xa=\pgf@x \pgf@ya=\pgf@y % Store coordinates
+ % Compute north east point
+ \centerpoint
+ \pgf@xc=\radius
+ \advance\pgf@x by0.707107\pgf@xc
+ \advance\pgf@y by0.707107\pgf@xc
+ \pgf@xb=\pgf@x \pgf@yb=\pgf@y % Store coordinates
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
+ \pgfsetarrowsstart{}
+ \pgfsetarrowsend{}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Decorations
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Complete Sines
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Complete sines replaces the path with a whole number of sine waves.
+%% Thanks to http://tex.stackexchange.com/a/134516/26980
+\pgfdeclaredecoration{complete sines}{initial}
+{
+ %% Begin by computing the overall path length and find how many sine waves we
+ %% can fit in. Nothing happens beyond the computation.
+ \state{initial}[
+ width=+0pt,
+ next state=move,
+ persistent precomputation={
+ \def\tikzfeynhand@cs@angle@step{30}
+ \def\tikzfeynhand@cs@current@angle{0}
+ \pgfmathsetlengthmacro{\tikzfeynhand@cs@points@per@step}{
+ \pgfdecoratedinputsegmentlength
+ / int(\pgfdecoratedinputsegmentlength
+ / \pgfdecorationsegmentlength)
+ / 360
+ * \tikzfeynhand@cs@angle@step}
+ },
+ ]{}
+ %% Move to the origin to the path
+ \state{move}[
+ width=+\tikzfeynhand@cs@points@per@step,
+ next state=draw
+ ]{
+ \pgfpathmoveto{\pgfpointorigin}
+ }
+ %% Draw the sine wave itself. This computes the value every 20 degrees and draws straight edges.
+ \state{draw}[
+ width=+\tikzfeynhand@cs@points@per@step,
+ switch if less than=1.25*\tikzfeynhand@cs@points@per@step to final, % <- bit of a hack
+ persistent postcomputation={
+ \pgfmathparse{mod(\tikzfeynhand@cs@current@angle+\tikzfeynhand@cs@angle@step, 360)}
+ \let\tikzfeynhand@cs@current@angle=\pgfmathresult%
+ },
+ ]{
+% \pgfmathparse{sin(\tikzfeynhand@cs@current@angle) * \pgfmetadecorationsegmentamplitude / 2}
+ \pgfmathparse{sin(\tikzfeynhand@cs@current@angle) * 3 * \feynhandlinesize / 2}
+ \tikz@decoratepathfalse
+ \pgfpathlineto{\pgfqpoint{0pt}{\pgfmathresult pt}}%
+ }
+
+ \state{final}{
+ \ifdim\pgfdecoratedremainingdistance>0pt\relax
+ \pgfpathlineto{\pgfpointdecoratedpathlast}
+ \fi
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Keys
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\tikzfeynhandset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Hooks
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ execute at begin feynhand/.code={},
+ execute at end feynhand/.code={},
+ every feynhand/.style={/tikzfeynhand/every feynhand@@/.append style={#1}},
+ every feynhand@@/.style={
+ /tikzfeynhand/.cd,
+ },
+ execute at begin feynhand@@/.code={} %% Internal version
+ execute at end feynhand@@/.code={}, %% Internal version
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Vertices
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ every vertex@@/.style={
+ /tikz/shape=coordinate,
+ },
+ every vertex/.style={/tikzfeynhand/every vertex@@/.append style={#1}},
+ vertex/.style={
+ /tikzfeynhand/every vertex@@,
+ },
+ %% DOTS + friends
+ every dot@@/.style={
+ /tikz/shape=circle,
+ /tikz/draw,
+ /tikz/fill,
+ /tikz/inner sep=0pt,
+ /tikz/outer sep=0pt,
+ /tikz/minimum size=\feynhanddotsize,
+ /tikz/line width = \feynhandlinesize,
+ },
+ every dot/.style={/tikzfeynhand/every dot@@/.append style={#1}},
+ dot/.style={
+ /tikzfeynhand/every dot@@,
+ },
+ every squaredot@@/.style={
+ /tikz/shape=rectangle,
+ },
+ every squaredot/.style={/tikzfeynhand/every squaredot@@/.append style={#1}},
+ squaredot/.style={
+ /tikzfeynhand/every dot@@,
+ /tikzfeynhand/every squaredot@@,
+ },
+ every ringdot@@/.style={
+ /tikz/fill=none,
+ },
+ every ringdot/.style={/tikzfeynhand/every ringdot@@/.append style={#1}},
+ ringdot/.style={
+ /tikzfeynhand/every dot@@,
+ /tikzfeynhand/every ringdot@@,
+ },
+ every crossdot@@/.style={
+ /tikz/fill=none,
+ /tikz/shape=crossed circle,
+ /tikz/minimum size=2\feynhanddotsize,
+ },
+ every crossdot/.style={/tikzfeynhand/every crossdot@@/.append style={#1}},
+ crossdot/.style={
+ /tikzfeynhand/every dot@@,
+ /tikzfeynhand/every crossdot@@,
+ },
+ %% BLOBS -------------------------------------------------
+ every blob@@/.style={
+ /tikz/shape=circle,
+ /tikz/draw,
+ /tikz/fill,
+ /tikz/outer sep={0.5*\the\feynhandlinesize},
+ /tikz/inner sep=0pt,
+ /tikz/minimum size=\feynhandblobsize,
+ /tikz/line width = \feynhandlinesize,
+ },
+ every blob/.style={/tikzfeynhand/every blob@@/.append style={#1}},
+ blob/.style={
+ /tikzfeynhand/every blob@@,
+ /tikz/fill=black,
+ },
+ every ringblob@@/.style={
+ },
+ every ringblob/.style={/tikzfeynhand/every ringblob@@/.append style={#1}},
+ ringblob/.style={
+ /tikzfeynhand/every blob@@,
+ /tikzfeynhand/every ringblob@@,
+ /tikz/fill=white,
+ },
+ every NWblob@@/.style={
+ },
+ every NWblob/.style={/tikzfeynhand/every NWblob@@/.append style={#1}},
+ NWblob/.style={
+ /tikzfeynhand/every blob@@,
+ /tikzfeynhand/every NWblob@@,
+ /tikz/fill=none,
+ /tikz/pattern=north west lines,
+ },
+ every NEblob@@/.style={
+ },
+ every NEblob/.style={/tikzfeynhand/every NEblob@@/.append style={#1}},
+ NEblob/.style={
+ /tikzfeynhand/every blob@@,
+ /tikzfeynhand/every NEblob@@,
+ /tikz/fill=none,
+ /tikz/pattern=north east lines,
+ },
+ every grayblob@@/.style={
+ },
+ every grayblob/.style={/tikzfeynhand/every grayblob@@/.append style={#1}},
+ grayblob/.style={
+ /tikzfeynhand/every blob@@,
+ /tikzfeynhand/every grayblob@@,
+ /tikz/fill=gray!50!white,
+ },
+ %% PARTICLES
+ every particle@@/.style={
+ /tikz/shape=rectangle,
+ /tikz/draw=none,
+ /tikz/fill=none,
+ /tikz/inner sep=0.3333em,
+ /tikz/outer sep={0.5*\the\feynhandlinesize},
+ },
+ every particle/.style={/tikzfeynhand/every particle@@/.append style={#1}},
+ particle/.style args={#1}{
+ /tikzfeynhand/every particle@@,
+ },
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Edge styles
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Arrow Style
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ arrow size/.store in=\tikzfeynhand@arrow@size,
+ arrow size=\feynhandarrowsize,
+ with arrow/.style={
+ /tikz/decoration={
+ markings,
+ mark=at position #1 with {
+ \node[
+ transform shape,
+ %xshift=0.5mm,
+ xshift=-0.166666\feynhandarrowsize,
+ fill,
+ inner sep=0mm,
+ minimum width = \tikzfeynhand@arrow@size,
+ draw=none,
+ isosceles triangle
+ ] { };
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ with reversed arrow/.style={
+ /tikz/decoration={
+ markings,
+ mark=at position #1 with {
+ \node[
+ transform shape,
+ %xshift=0.5mm,
+ xshift=0.166666\feynhandarrowsize,
+ rotate=180,
+ fill,
+ inner sep=0mm,
+ minimum width = \tikzfeynhand@arrow@size,
+ draw=none,
+ isosceles triangle
+ ] { };
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ %% Base Edge Styles
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ every edge@@/.style={},
+ every edge/.style={/tikzfeynhand/every edge@@/.append style={#1}},
+ %% Specific Styles
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ every plain@@/.style={
+ /tikz/draw=none,
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ },
+ },
+ every plain/.style={/tikzfeynhand/every plain@@/.append style={#1}},
+ plain/.style={
+ /tikzfeynhand/every plain@@,
+ },
+ every top@@/.style={
+ /tikz/preaction={draw=\feynhandtopsepcolor,line width=\feynhandtopsep}
+ },
+ every top/.style={/tikzfeynhand/every top@@/.append style={#1}},
+ top/.style={
+ /tikzfeynhand/every top@@,
+ },
+ every boson@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ complete sines,
+ amplitude=3\feynhandlinesize,
+ segment length=7.5\feynhandlinesize,
+ },
+ /tikz/decorate=true,
+ },
+ },
+ every boson/.style={/tikzfeynhand/every boson@@/.append style={#1}},
+ boson/.style={
+ /tikzfeynhand/every boson@@,
+ },
+ every charged boson@@/.style={
+ /tikzfeynhand/with arrow=0.5,
+ },
+ every charged boson/.style={/tikzfeynhand/every charged boson@@/.append style={#1}},
+ charged boson/.style={
+ /tikzfeynhand/boson,
+ /tikzfeynhand/every charged boson@@,
+ },
+ every anti charged boson@@/.style={
+ /tikzfeynhand/with reversed arrow=0.5,
+ },
+ every anti charged boson/.style={/tikzfeynhand/every anti charged boson@@/.append style={#1}},
+ anti charged boson/.style={
+ /tikzfeynhand/boson,
+ /tikzfeynhand/every anti charged boson@@,
+ },
+ every photon@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ complete sines,
+ amplitude=3\feynhandlinesize,
+ segment length=7.5\feynhandlinesize,
+ },
+ /tikz/decorate=true,
+ },
+ },
+ every photon/.style={/tikzfeynhand/every photon@@/.append style={#1}},
+ photon/.style={
+ /tikzfeynhand/every photon@@,
+ },
+ every scalar@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/dashed,
+ /tikz/line width = \feynhandlinesize,
+ },
+ },
+ every scalar/.style={/tikzfeynhand/every scalar@@/.append style={#1}},
+ scalar/.style={
+ /tikzfeynhand/every scalar@@,
+ },
+ every charged scalar@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikzfeynhand/with arrow=0.5,
+ },
+ },
+ every charged scalar/.style={/tikzfeynhand/every charged scalar@@/.append style={#1}},
+ charged scalar/.style={
+ /tikzfeynhand/scalar,
+ /tikzfeynhand/every charged scalar@@,
+ },
+ every anti charged scalar@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikzfeynhand/with reversed arrow=0.5,
+ },
+ },
+ every anti charged scalar/.style={/tikzfeynhand/every anti charged scalar@@/.append style={#1}},
+ anti charged scalar/.style={
+ /tikzfeynhand/scalar,
+ /tikzfeynhand/every anti charged scalar@@,
+ },
+ every ghost@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/dotted,
+ /tikz/line width = 2\feynhandlinesize,
+ },
+ },
+ every ghost/.style={/tikzfeynhand/every ghost@@/.append style={#1}},
+ ghost/.style={
+ /tikzfeynhand/every ghost@@,
+ },
+ every charged ghost@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikzfeynhand/with arrow=0.5,
+ },
+ },
+ every charged ghost/.style={/tikzfeynhand/every charged ghost@@/.append style={#1}},
+ charged ghost/.style={
+ /tikzfeynhand/ghost,
+ /tikzfeynhand/every charged ghost@@,
+ },
+ every anti charged ghost@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikzfeynhand/with reversed arrow=0.5,
+ },
+ },
+ every anti charged ghost/.style={/tikzfeynhand/every anti charged ghost@@/.append style={#1}},
+ anti charged ghost/.style={
+ /tikzfeynhand/ghost,
+ /tikzfeynhand/every anti charged scalar@@,
+ },
+ every fermion@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/line width = \feynhandlinesize,
+ /tikzfeynhand/with arrow=0.5,
+ },
+ },
+ every fermion/.style={/tikzfeynhand/every fermion@@/.append style={#1}},
+ fermion/.style={
+ /tikzfeynhand/every fermion@@,
+ },
+ every anti fermion@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/line width = \feynhandlinesize,
+ /tikzfeynhand/with reversed arrow=0.5,
+ },
+ },
+ every anti fermion/.style={/tikzfeynhand/every anti fermion@@/.append style={#1}},
+ anti fermion/.style={
+ /tikzfeynhand/every anti fermion@@,
+ },
+ every majorana@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikzfeynhand/with arrow=0.33,
+ /tikzfeynhand/with reversed arrow=0.73,
+ /tikz/line width = \feynhandlinesize,
+ },
+ },
+ every majorana/.style={/tikzfeynhand/every majorana@@/.append style={#1}},
+ majorana/.style={
+ /tikzfeynhand/every majorana@@,
+ },
+ every anti majorana@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikzfeynhand/with reversed arrow=0.33,
+ /tikzfeynhand/with arrow=0.73,
+ /tikz/line width = \feynhandlinesize,
+ },
+ },
+ every anti majorana/.style={/tikzfeynhand/every anti majorana@@/.append style={#1}},
+ anti majorana/.style={
+ /tikzfeynhand/every anti majorana@@,
+ },
+ every gluon@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ coil,
+ aspect=1.2,
+ mirror,
+ amplitude=3\feynhandlinesize,
+ segment length=8\feynhandlinesize,
+ },
+ /tikz/decorate=true,
+ },
+ },
+ every gluon/.style={/tikzfeynhand/every gluon@@/.append style={#1}},
+ gluon/.style={
+ /tikzfeynhand/every gluon@@,
+ },
+ % short versions of style names
+ pho/.style={
+ /tikzfeynhand/photon,
+ },
+ bos/.style={
+ /tikzfeynhand/boson,
+ },
+ antbos/.style={
+ /tikzfeynhand/anti charged boson,
+ },
+ chabos/.style={
+ /tikzfeynhand/charged boson,
+ },
+ sca/.style={
+ /tikzfeynhand/scalar,
+ },
+ chasca/.style={
+ /tikzfeynhand/charged scalar,
+ },
+ antsca/.style={
+ /tikzfeynhand/anti charged scalar,
+ },
+ fer/.style={
+ /tikzfeynhand/fermion,
+ },
+ antfer/.style={
+ /tikzfeynhand/anti fermion,
+ },
+ gho/.style={
+ /tikzfeynhand/ghost,
+ },
+ chagho/.style={
+ /tikzfeynhand/charged ghost,
+ },
+ antgho/.style={
+ /tikzfeynhand/anti charged ghost,
+ },
+ glu/.style={
+ /tikzfeynhand/gluon,
+ },
+ maj/.style={
+ /tikzfeynhand/majorana,
+ },
+ antmaj/.style={
+ /tikzfeynhand/anti majorana,
+ },
+ %% Insertions
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ insertion/.search also={/tikzfeynhand,/tikz},
+ %% Parameters
+ insertion/size/.store in=\tikzfeynhand@insertion@size,
+ insertion/size=5\feynhandlinesize,
+ insertion/style/.store in=\tikzfeynhand@insertion@style,
+ insertion/style={},
+ %% Styles
+ insertion@@/.style args={[#1]#2}{
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ markings,
+ mark=at position #2 with {
+ \tikzfeynhandset{insertion/.cd,#1}
+ \draw [\tikzfeynhand@insertion@style] (-\tikzfeynhand@insertion@size, -\tikzfeynhand@insertion@size) -- (\tikzfeynhand@insertion@size, \tikzfeynhand@insertion@size);
+ \draw [\tikzfeynhand@insertion@style] (-\tikzfeynhand@insertion@size, \tikzfeynhand@insertion@size) -- (\tikzfeynhand@insertion@size, -\tikzfeynhand@insertion@size);
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ insertion@@/.default={[]0.5},
+ %%
+ %% Slashes
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ slash/.search also={/tikzfeynhand,/tikz},
+ %% Parameters
+ slash/size/.store in=\tikzfeynhand@slash@size,
+ slash/size=5\feynhandlinesize,
+ slash/style/.store in=\tikzfeynhand@slash@style,
+ slash/style={},
+ %% Styles
+ slash@@/.style args={[#1]#2}{
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ markings,
+ mark=at position #2 with {
+ \tikzfeynhandset{slash/.cd,#1}
+ \draw [\tikzfeynhand@slash@style] (-\tikzfeynhand@slash@size, -2*\tikzfeynhand@slash@size) -- (\tikzfeynhand@slash@size, 2*\tikzfeynhand@slash@size);
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ slash@@/.default={[]0.5},
+ %%
+ %% Backslashes
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ backslash/.search also={/tikzfeynhand,/tikz},
+ %% Parameters
+ backslash/size/.store in=\tikzfeynhand@backslash@size,
+ backslash/size=5\feynhandlinesize,
+ backslash/style/.store in=\tikzfeynhand@backslash@style,
+ backslash/style={},
+ %% Styles
+ backslash@@/.style args={[#1]#2}{
+ /tikz/line width = \feynhandlinesize,
+ /tikz/decoration={
+ markings,
+ mark=at position #2 with {
+ \tikzfeynhandset{backslash/.cd,#1}
+ \draw [\tikzfeynhand@backslash@style] (-\tikzfeynhand@backslash@size, 2*\tikzfeynhand@backslash@size) -- (\tikzfeynhand@backslash@size, -2*\tikzfeynhand@backslash@size);
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ backslash@@/.default={[]0.5},
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Momentum arrows
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ momentum/.search also={/tikzfeynhand,/tikz},
+ %% Parameters
+ momentum/label distance/.store in=\tikzfeynhand@momentum@label@distance,
+ momentum/label distance=0pt,
+ momentum/arrow distance/.store in=\tikzfeynhand@momentum@arrow@distance,
+ momentum/arrow distance={\the\feynhandarrowsize},
+ momentum/arrow shorten/.store in=\tikzfeynhand@momentum@arrow@shorten,
+ momentum/arrow shorten=0.2,
+ momentum/label style/.store in=\tikzfeynhand@momentum@label@style,
+ momentum/label style={},
+ momentum/arrow style/.store in=\tikzfeynhand@momentum@arrow@style,
+ momentum/arrow style={},
+ momentum/arrow thickness/.store in=\tikzfeynhand@momentum@arrow@thickness,
+ momentum/arrow thickness={0.64*\the\feynhandlinesize},
+ momentum/arrow size/.store in=\tikzfeynhand@momentum@arrow@size,
+ momentum/arrow size={0.8*\the\feynhandarrowsize},
+ %% Styles
+ momentum@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst)
+ .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
+ .. (\tikzinputsegmentlast)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@26)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ momentum'@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst)
+ .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
+ .. (\tikzinputsegmentlast)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@26)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ reversed momentum@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast)
+ .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta)
+ .. (\tikzinputsegmentfirst)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@26)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ reversed momentum'@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5,
+ auto,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast)
+ .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta)
+ .. (\tikzinputsegmentfirst)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten + (1-2 * \tikzfeynhand@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@26)$)
+ node [pos=0.5,
+ auto,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynhandset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynhand@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynhand@momentum@arrow@shorten] (tf@m@2);
+ \draw [-{Stealth[length=\tikzfeynhand@momentum@arrow@size]},
+ line width=\tikzfeynhand@momentum@arrow@thickness,
+ \tikzfeynhand@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynhand@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynhand@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynhand@momentum@label@distance,
+ \tikzfeynhand@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Modifiers
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ half left/.style={
+ /tikz/bend left=90,
+ },
+ half right/.style={
+ /tikz/bend right=90,
+ },
+ quarter left/.style={
+ /tikz/bend left=45,
+ },
+ quarter right/.style={
+ /tikz/bend right=45,
+ },
+}
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-feynhand/tikzlibraryfeynhand.code.tex b/graphics/pgf/contrib/tikz-feynhand/tikzlibraryfeynhand.code.tex
new file mode 100644
index 0000000000..02f3495735
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynhand/tikzlibraryfeynhand.code.tex
@@ -0,0 +1,280 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-FeynHand, Version 1.1.0 of 2019/08/19
+% Feynhand Diagrams with TikZ (LaTex manual version)
+% Copyright (C) 2019 Max Dohse
+% Copyright (C) 2016 Joshua Ellis
+%
+% This LaTeX file and the whole package are free:
+% you can redistribute it and/or modify it under the
+% terms of the GNU General Public License as published by the Free Software Foundation,
+% either version 3 of the License, or (at your option) any later version.
+%
+% This file is a modification of the file tikzlibraryfeynman.code.tex
+% of the package tikz-feynman (version 1.1.0 of 2016/02/05)
+% which is available online at https://ctan.org/pkg/tikz-feynman
+% for a list of changes, see the file CHANGES.TXT
+%
+% available at https://ctan.org/pkg/tikz-feynhand
+% The Current Maintainer of this work is Max Dohse.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Pre-requisites
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usetikzlibrary{
+ arrows.meta,
+ calc,
+ decorations,
+ decorations.markings,
+ decorations.pathmorphing,
+ decorations.pathreplacing,
+ external,
+ patterns,
+ positioning,
+ shapes.geometric,
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Function definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Miscellaneous functions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@empty{}
+
+%% Key Manager
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Setup the tikz-feynhand key family
+\pgfkeys{
+ /tikzfeynhand/.is family,
+ /tikzfeynhand/.search also={/tikz},
+}
+
+%% |\tikzfeynhandset| allows keys that belong with tikz-feynhand to be easily set.
+\def\tikzfeynhandset{\pgfqkeys{/tikzfeynhand}}
+
+%% Version check
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check which version is expected and which is installed
+\def\tikzfeynhand@compat@parse#1.#2.#3\pgfeov{
+ \edef\tikzfeynhand@compat@major{#1}
+ \edef\tikzfeynhand@compat@minor{#2}
+ \edef\tikzfeynhand@compat@patch{#3}
+ \edef\tikzfeynhand@compat{#1.#2.#3}
+}
+\let\tikzfeynhand@compat=\tikzfeynhand@empty
+\pgfkeyslet{/tikzfeynhand/compat/.@cmd}{\tikzfeynhand@compat@parse}
+\ProcessPgfPackageOptions{/tikzfeynhand}
+
+\AtBeginDocument{
+ \ifx\tikzfeynhand@version\tikzfeynhand@compat\else
+ \ifx\tikzfeynhand@compat\tikzfeynhand@empty
+ \PackageWarning{tikz-feynhand}{Consider loading TikZ-Feynhand with \string\usepackage[compat=\tikzfeynhand@version]{tikz-feynhand} so that you can be warned if TikZ-Feynhand changes.}
+ \else
+ \ifx\tikzfeynhand@compat@major\tikzfeynhand@version@major
+ \ifx\tikzfeynhand@compat@minor\tikzfeynhand@version@minor
+ \ifx\tikzfeynhand@compat@patch\tikzfeynhand@version@patch\else
+ \PackageInfo{tikz-feynhand}{The preamble requested version \tikzfeynhand@compat, but the system version is \tikzfeynhand@version. This should cause no issue.}
+ \fi
+ \else
+ \PackageWarning{tikz-feynhand}{The preamble requested version \tikzfeynhand@compat, but the system version is \tikzfeynhand@version. This may change some diagrams.}
+ \fi
+ \else
+ \PackageError{tikz-feynhand}{The preamble requested version \tikzfeynhand@compat, but the system version is \tikzfeynhand@version. They are most likely incompatible. Please download the appropriate version from jpellis.me/projects/tikz-feynhand.}
+ \fi
+ \fi
+ \fi
+}
+
+%% Feynhand Environment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Provide `\begin{feynhand} ... \end{feynhand}` within TikZ pictures.
+\tikzaddtikzonlycommandshortcutlet\feynhand\tikzfeynhand@environment@feynhand
+\tikzaddtikzonlycommandshortcutlet\endfeynhand\endtikzfeynhand@environment@feynhand
+
+%% \begin{feynhand}...\end{feynhand}
+\def\tikzfeynhand@environment@feynhand{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@environment@feynhand@opt}
+ {\tikzfeynhand@environment@feynhand@opt[]}}
+
+\def\tikzfeynhand@environment@feynhand@opt[#1]{%
+ \begingroup
+ %% Local overrides
+ \let\tikz@@scan@fig=\tikzfeynhand@scan@fig
+ %% Local commands
+ \let\vertex=\tikzfeynhand@commands@vertex
+ \let\propagator=\tikzfeynhand@commands@propagator
+ \let\propag=\propagator
+ %% Opening hooks
+ \scope
+ \tikzfeynhand@tikz@search@tikzfeynhand
+ \pgfkeys{/tikzfeynhand/every feynhand@@,#1}
+ \pgfkeysvalueof{/tikzfeynhand/execute at begin feynhand@@}%
+ \pgfkeysvalueof{/tikzfeynhand/execute at begin feynhand}%
+ }
+
+\def\endtikzfeynhand@environment@feynhand{%
+ %% Closing hooks
+ \pgfkeysvalueof{/tikzfeynhand/execute at end feynhand}%
+ \pgfkeysvalueof{/tikzfeynhand/execute at end feynhand@@}%
+ \endscope
+ \endgroup
+ }
+
+%%% Allow empty nodes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\iftikzfeynhandallowemptynode
+\newif\iftikzfeynhandvertex
+\def\tikzfeynhand@scan@fig{%
+ \pgfutil@ifnextchar a{\tikz@fig@scan@at}
+ {\pgfutil@ifnextchar({\tikz@fig@scan@name}
+ {\pgfutil@ifnextchar[{\tikz@fig@scan@options}%
+ {\pgfutil@ifnextchar\bgroup{\tikz@fig@main}%
+ {\iftikzfeynhandvertex%
+ \tikzset{/tikzfeynhand/every vertex@@}%
+ \iftikzfeynhandallowemptynode%
+ \else%
+ \tikzset{/tikzfeynhand/particle}%
+ \fi%
+ \fi%
+ \tikz@fig@main{}
+ }
+ }
+ }
+ }
+}
+
+%% Include /tikzfeynhand in the search path
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@tikz@search@tikzfeynhand{%
+ \pgfkeys{/tikz/.unknown/.code=%
+ \let\tikz@key\pgfkeyscurrentname%
+ %% Is it a tikzfeynhand key?
+ \pgfkeys{/tikzfeynhand/\tikz@key/.try={##1}}%
+ \ifpgfkeyssuccess%
+ \else%
+ %% Is it a pgf key?
+ \pgfkeys{/pgf/\tikz@key/.try={##1}}%
+ \ifpgfkeyssuccess%
+ \else%
+ \expandafter\pgfutil@in@\expandafter!\expandafter{\tikz@key}%
+ \ifpgfutil@in@%
+ %% this is a color!
+ \expandafter\tikz@addoption\expandafter{\expandafter\tikz@compat@color@set\expandafter{\tikz@key}}%
+ \edef\tikz@textcolor{\tikz@key}%
+ \else%
+ \pgfutil@doifcolorelse{\tikz@key}
+ {%
+ \expandafter\tikz@addoption\expandafter{\expandafter\tikz@compat@color@set\expandafter{\tikz@key}}%
+ \edef\tikz@textcolor{\tikz@key}%
+ }%
+ {%
+ %% Ok, second chance: This might be an arrow specification:
+ \expandafter\pgfutil@in@\expandafter-\expandafter{\tikz@key}%
+ \ifpgfutil@in@%
+ %% Ah, an arrow spec!
+ \expandafter\tikz@processarrows\expandafter{\tikz@key}%
+ \else%
+ %% Ok, third chance: A shape!
+ \expandafter\ifx\csname pgf@sh@s@\tikz@key\endcsname\relax%
+ \pgfkeys{/errors/unknown key/.expand
+ once=\expandafter{\expandafter/\expandafter t\expandafter
+ i\expandafter k\expandafter z\expandafter/\tikz@key}{##1}}%
+ \else%
+ \edef\tikz@shape{\tikz@key}%
+ \fi%
+ \fi%
+ }%
+ \fi%
+ \fi%
+ \fi%
+ }
+}
+
+
+%% Vertex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% SEE ALSO \vertex above!
+%% Adapted from |\coordinate| code
+\def\tikzfeynhand@commands@vertex{%
+ \path \pgfextra{\tikzfeynhandallowemptynodetrue}
+ \pgfextra{\tikzfeynhandvertextrue}
+ node}
+
+%% Propagators
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\tikzfeynhand@commands@propagator}[1][]{\draw [#1]}
+
+%% Optional argument in style key
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@key@opt#1[#2]#3\pgfeov{%
+ \tikzfeynhandset{#1={[#2]#3}}}
+
+%% Insertion
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@insertion{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{insertion@@}}
+ {\tikzfeynhand@key@opt{insertion@@}[]}}
+\pgfkeyslet{/tikzfeynhand/insertion/.@cmd}{\tikzfeynhand@insertion}
+
+%% Slash
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@slash{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{slash@@}}
+ {\tikzfeynhand@key@opt{slash@@}[]}}
+\pgfkeyslet{/tikzfeynhand/slash/.@cmd}{\tikzfeynhand@slash}
+
+%% Backslash
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@backslash{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{backslash@@}}
+ {\tikzfeynhand@key@opt{backslash@@}[]}}
+\pgfkeyslet{/tikzfeynhand/backslash/.@cmd}{\tikzfeynhand@backslash}
+
+%% Momentum
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynhand@momentum@std{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{momentum@@}}
+ {\tikzfeynhand@key@opt{momentum@@}[]}}
+\pgfkeyslet{/tikzfeynhand/momentum/.@cmd}{\tikzfeynhand@momentum@std}
+
+\def\tikzfeynhand@momentum@stdp{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{momentum'@@}}
+ {\tikzfeynhand@key@opt{momentum'@@}[]}}
+\pgfkeyslet{/tikzfeynhand/momentum'/.@cmd}{\tikzfeynhand@momentum@stdp}
+
+\def\tikzfeynhand@momentum@stdr{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{reversed momentum@@}}
+ {\tikzfeynhand@key@opt{reversed momentum@@}[]}}
+\pgfkeyslet{/tikzfeynhand/reversed momentum/.@cmd}{\tikzfeynhand@momentum@stdr}
+
+\def\tikzfeynhand@momentum@stdrp{%
+ \pgfutil@ifnextchar[{\tikzfeynhand@key@opt{reversed momentum'@@}}
+ {\tikzfeynhand@key@opt{reversed momentum'@@}[]}}
+\pgfkeyslet{/tikzfeynhand/reversed momentum'/.@cmd}{\tikzfeynhand@momentum@stdrp}
+
+% short versions of momentum styles
+\pgfkeyslet{/tikzfeynhand/rmomentum/.@cmd}{\tikzfeynhand@momentum@stdr}
+\pgfkeyslet{/tikzfeynhand/rmomentum'/.@cmd}{\tikzfeynhand@momentum@stdrp}
+
+\pgfkeyslet{/tikzfeynhand/mom/.@cmd}{\tikzfeynhand@momentum@std}
+\pgfkeyslet{/tikzfeynhand/mom'/.@cmd}{\tikzfeynhand@momentum@stdp}
+
+\pgfkeyslet{/tikzfeynhand/revmom/.@cmd}{\tikzfeynhand@momentum@stdr}
+\pgfkeyslet{/tikzfeynhand/revmom'/.@cmd}{\tikzfeynhand@momentum@stdrp}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Styles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input tikzfeynhand.keys.code.tex
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-feynman/LICENSE b/graphics/pgf/contrib/tikz-feynman/LICENSE
new file mode 100644
index 0000000000..7c85a26f9a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/LICENSE
@@ -0,0 +1,1051 @@
+This documentation may be redistributed and/or modified under the terms of the
+GNU General Public License as published by the Free Software Foundation, either
+version 3 of the License, or (at your option) any later version.
+
+The code of this package may be distributed and/or modified under the conditions
+of the LaTeX Project Public License, either version 1.3 of this license or (at
+your option) any later version.
+
+A copy of both licenses are included hereunder:
+
+################################################################################
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+################################################################################
+
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/graphics/pgf/contrib/tikz-feynman/README.md b/graphics/pgf/contrib/tikz-feynman/README.md
new file mode 100644
index 0000000000..d37e445bfd
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/README.md
@@ -0,0 +1,115 @@
+[Ti*k*Z-Feynman](http://www.jpellis.me/projects/tikz-feynman) [![ctan.org](https://img.shields.io/ctan/v/tikz-feynman.svg)](https://ctan.org/pkg/tikz-feynman) [![Travis](https://img.shields.io/travis/JP-Ellis/tikz-feynman/master.svg)](https://travis-ci.org/JP-Ellis/tikz-feynman)
+=============================================================
+
+Ti*k*Z-Feynman is a LaTeX package allowing Feynman diagrams to be easily
+generated within LaTeX with minimal user instructions and without the need of
+external programs. It builds upon the Ti*k*Z package and leverages the graph
+placement algorithms from Ti*k*Z in order to automate the placement of many
+vertices. Ti*k*Z-Feynman still allows fine-tuned placement of vertices so that
+even complex diagrams can still be generated with ease.
+
+Ti*k*Z-Feynman is made available through the
+[Comprehensive TeX Archive Network (CTAN)][ctan] and comes with some thorough
+[documentation][documentation] containing a tutorial and many examples. Please
+refer to the [project page][projectpage] for additional information.
+
+Ti*k*Z-Feynman is open source and contribution are welcome. If you have any
+suggestions, feature requests, or have found any bugs, feel free to create a new
+issue or pull request on Github.
+
+Below are a few example to demonstrate how easy diagram can be, and how
+extensible it can be. Many more are given in the
+[documentation][documentation]:
+
+<p align="center"><img src="./images/qed.png" alt="QED Example" width=300px /></p>
+```latex
+\feynmandiagram [horizontal=a to b] {
+ i1 -- [fermion] a -- [fermion] i2,
+ a -- [photon] b,
+ f1 -- [fermion] b -- [fermion] f2,
+};
+```
+
+<p align="center"><img src="./images/penguin.png" alt="Penguin Example" width=300px /></p>
+```latex
+\feynmandiagram [large, vertical=e to f] {
+ a -- [fermion] b -- [photon, momentum=\(k\)] c -- [fermion] d,
+ b -- [fermion, momentum'=\(p_{1}\)] e -- [fermion, momentum'=\(p_{2}\)] c,
+ e -- [gluon] f,
+ h -- [fermion] f -- [fermion] i;
+};
+```
+
+<p align="center"><img src="./images/mixing.png" alt="Mixing Example" width=490px /></p>
+```latex
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a1) {\(\overline b\)};
+ \vertex[right=1cm of a1] (a2);
+ \vertex[right=1cm of a2] (a3);
+ \vertex[right=1cm of a3] (a4) {\(b\)};
+ \vertex[right=1cm of a4] (a5);
+ \vertex[right=2cm of a5] (a6) {\(u\)};
+
+ \vertex[below=2em of a1] (b1) {\(d\)};
+ \vertex[right=1cm of b1] (b2);
+ \vertex[right=1cm of b2] (b3);
+ \vertex[right=1cm of b3] (b4) {\(\overline d\)};
+ \vertex[below=2em of a6] (b5) {\(\overline d\)};
+
+ \vertex[above=of a6] (c1) {\(\overline u\)};
+ \vertex[above=2em of c1] (c3) {\(d\)};
+ \vertex at ($(c1)!0.5!(c3) - (1cm, 0)$) (c2);
+
+ \diagram* {
+ {[edges=fermion]
+ (b1) -- (b2) -- (a2) -- (a1),
+ (b5) -- (b4) -- (b3) -- (a3) -- (a4) -- (a5) -- (a6),
+ },
+ (a2) -- [boson, edge label=\(W\)] (a3),
+ (b2) -- [boson, edge label'=\(W\)] (b3),
+
+ (c1) -- [fermion, out=180, in=-45] (c2) -- [fermion, out=45, in=180] (c3),
+ (a5) -- [boson, bend left, edge label=\(W^{-}\)] (c2),
+ };
+
+ \draw [decoration={brace}, decorate] (b1.south west) -- (a1.north west)
+ node [pos=0.5, left] {\(B^{0}\)};
+ \draw [decoration={brace}, decorate] (c3.north east) -- (c1.south east)
+ node [pos=0.5, right] {\(\pi^{-}\)};
+ \draw [decoration={brace}, decorate] (a6.north east) -- (b5.south east)
+ node [pos=0.5, right] {\(\pi^{+}\)};
+ \end{feynman}
+\end{tikzpicture}
+```
+
+ [ctan]: https://ctan.org/pkg/tikz-feynman
+ [documentation]: http://www.jpellis.me/projects/tikz-feynman/tikz-feynman/tikz-feynman.pdf
+ [projectpage]: http://www.jpellis.me/projects/tikz-feynman
+
+
+Licence
+-------
+
+Ti*k*Z-Feynman
+
+Feynman Diagrams with Ti*k*Z
+
+Copyright (C) 2016 Joshua Ellis
+
+
+This *documentation* may be redistributed and/or modified under the terms of the
+GNU General Public License as published by the Free Software Foundation, either
+version 3 of the License, or (at your option) any later version.
+
+The *code of this package* may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Joshua Ellis.
+
+This package is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE.
diff --git a/graphics/pgf/contrib/tikz-feynman/references.bib b/graphics/pgf/contrib/tikz-feynman/references.bib
new file mode 100644
index 0000000000..7e222288ef
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/references.bib
@@ -0,0 +1,122 @@
+@article{feynmf,
+ author = "Ohl, Thorsten",
+ title = "{Drawing Feynman diagrams with LaTeX and Metafont}",
+ journal = "Computer Physics Communications",
+ volume = 90,
+ year = 1995,
+ pages = "340-354",
+ doi = "10.1016/0010-4655(95)90137-S",
+ eprint = "hep-ph/9505351",
+ archivePrefix ="arXiv",
+ primaryClass = "hep-ph",
+ reportNumber = "IKDA-95-20",
+}
+
+@article{axodraw,
+ title = "Axodraw",
+ journal = "Computer Physics Communications",
+ volume = 83,
+ number = 1,
+ pages = "45 - 58",
+ year = 1994,
+ issn = "0010-4655",
+ doi = "10.1016/0010-4655(94)90034-5",
+ author = "J.A.M. Vermaseren",
+}
+
+@article{jaxodrawV1,
+ author = "Binosi, D. and Theussl, L.",
+ title = "{JaxoDraw: A Graphical user interface for drawing Feynman
+ diagrams}",
+ journal = "Computer Physics Communications",
+ volume = 161,
+ year = 2004,
+ pages = "76-86",
+ doi = "10.1016/j.cpc.2004.05.001",
+ eprint = "hep-ph/0309015",
+ archivePrefix ="arXiv",
+ primaryClass = "hep-ph",
+ reportNumber = "FTUV-03-0902",
+ SLACcitation = "%%CITATION = HEP-PH/0309015;%%"
+}
+
+@article{jaxodrawV2,
+ author = "Binosi, D. and Collins, J. and Kaufhold, C. and Theussl, L.",
+ title = "{JaxoDraw: A Graphical user interface for drawing Feynman
+ diagrams. Version 2.0 release notes}",
+ journal = "Computer Physics Communications",
+ volume = 180,
+ year = 2009,
+ pages = "1709-1715",
+ doi = "10.1016/j.cpc.2009.02.020",
+ eprint = "0811.4113",
+ archivePrefix ="arXiv",
+ primaryClass = "hep-ph",
+ reportNumber = "ECT*-08-10",
+ SLACcitation = "%%CITATION = ARXIV:0811.4113;%%"
+}
+
+@article{hu2005,
+ title = {Efficient, high-quality force-directed graph drawing},
+ author = {Hu, Yifan},
+ journal = {Mathematica Journal},
+ volume = 10,
+ number = 1,
+ pages = {37--71},
+ year = 2005,
+ publisher = {Redwood City, Ca.: Advanced Book Program, Addison-Wesley
+ Pub. Co., c1990-}
+}
+
+@article{eades1991,
+ author = "Peter,Eades and Kozo,Sugiyama",
+ title = "How to Draw a Directed Graph",
+ journal = "Journal of Information Processing",
+ year = 1991,
+ volume = 13,
+ number = 4,
+ pages = "424--437",
+}
+
+@phdthesis{pohlmann2011,
+ title = {Configurable graph drawing algorithms for the {TikZ} graphics
+ description language},
+ author = {Pohlmann, Jannis},
+ year = 2011,
+ school = {Institute of Theoretical Computer Science, Universit{\"a}t zu
+ L{\"u}beck, L{\"u}beck, Germany},
+ url =
+ {http://www.tcs.uni-luebeck.de/downloads/papers/2011/2011-configurable-graph-drawing-algorithms-jannis-pohlmann.pdf}
+}
+
+@Misc{tikz,
+ author = {Till Tantau},
+ title = {The {TikZ} and {PGF} Packages},
+ year = 2015,
+ url = {http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf},
+}
+
+@article{PhysRev.76.769,
+ title = {Space-Time Approach to Quantum Electrodynamics},
+ author = {Feynman, R. P.},
+ journal = {Phys. Rev.},
+ volume = 76,
+ issue = 6,
+ pages = {769--789},
+ numpages = 0,
+ year = 1949,
+ month = {Sep},
+ publisher = {American Physical Society},
+ doi = {10.1103/PhysRev.76.769},
+ url = {http://link.aps.org/doi/10.1103/PhysRev.76.769}
+}
+
+@article{tikz-feynman,
+ title = {Tik{Z}-{F}eynman: {F}eynman diagrams with {T}ik{Z}},
+ author = {Ellis, Joshua},
+ archivePrefix = {arXiv},
+ year = 2016,
+ eprint = {1601.05437},
+ primaryClass = {hep-ph},
+ url = {http://arxiv.org/abs/1601.05437},
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf b/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf
new file mode 100644
index 0000000000..8b80a306ea
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-feynman/tikz-feynman.sty b/graphics/pgf/contrib/tikz-feynman/tikz-feynman.sty
new file mode 100644
index 0000000000..4586f34c25
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/tikz-feynman.sty
@@ -0,0 +1,41 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-Feynman
+% Feynman Diagrams with TikZ
+% Copyright (C) 2015 Joshua Ellis
+%
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX
+% Project Public License, either version 1.3 of this license or (at your option)
+% any later version.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Joshua Ellis.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the LaTeX Project Public License for more
+% details.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\tikzfeynman@date{2016/02/05}
+\def\tikzfeynman@version@major{1}
+\def\tikzfeynman@version@minor{1}
+\def\tikzfeynman@version@patch{0}
+\edef\tikzfeynman@version{\tikzfeynman@version@major.\tikzfeynman@version@minor.\tikzfeynman@version@patch}
+
+\ProvidesPackage{tikz-feynman}[\tikzfeynman@date v\tikzfeynman@version Feynman diagrams with TikZ]
+
+\RequirePackage{tikz}[2013/12/13] % v3.0.0
+\RequirePackage{ifluatex}
+\RequirePackage{pgfopts}
+
+\usetikzlibrary{feynman}
+
+\endinput
+
+% Local Variables:
+% TeX-master: "tikz-feynman"
+% End:
diff --git a/graphics/pgf/contrib/tikz-feynman/tikz-feynman.tex b/graphics/pgf/contrib/tikz-feynman/tikz-feynman.tex
new file mode 100644
index 0000000000..c4c96d61aa
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/tikz-feynman.tex
@@ -0,0 +1,1830 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-Feynman
+% Feynman Diagrams with TikZ
+% Copyright (C) 2015 Joshua Ellis
+%
+%
+% This LaTeX file is free: you can redistribute it and/or modify it under the
+% terms of the GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option) any later
+% version.
+%
+% This is distributed in the hope that it will be useful, but WITHOUT ANY
+% WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+% A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% HEADER
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\pgfautoxrefs{1}
+\documentclass[a4paper,final]{ltxdoc}
+
+\usepackage{etex}
+
+%% Formatting
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage[vmargin=4cm, hmargin=3cm]{geometry} % Customize text width, page height, margins, etc.
+% \usepackage{multicol} % {multicols}{n} environment
+% \usepackage{pdflscape} % {landscape} environment
+
+%\usepackage{setspace} % Line spacing
+%\singlespacing % 1-spacing (default)
+%\onehalfspacing % 1,5-spacing
+%\doublespacing % 2-spacing
+
+\usepackage{fontspec} % Allows other fonts to be specified
+\setmainfont{EB Garamond}[
+ Contextuals={Alternate},
+ Numbers=OldStyle,
+]
+\setmonofont{Inconsolata-g}[
+ Scale=MatchLowercase,
+]
+\newfontface\swshape{EB Garamond 12 Italic}[Style=Swash]
+
+\usepackage{microtype} % Fine small typographical details
+\usepackage{titlesec} % Change section heading font
+\titleformat*{\section}{\huge\scshape}
+\titleformat*{\subsection}{\Large\scshape}
+\titleformat*{\subsubsection}{\large\scshape}
+\titleformat*{\paragraph}{\scshape}
+
+\usepackage[perpage]{footmisc}
+\usepackage{enumitem} % Easily customize lists
+\setlist[description]{font=\normalfont\scshape}
+
+%% Change the Table of Contents fonts
+\usepackage{tocloft}
+\renewcommand{\cftsecfont}{\normalfont\scshape}
+\setlength\cftbeforesecskip{0pt}
+\setcounter{tocdepth}{2}
+
+%% Language
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage[UKenglish]{babel} % Set up the language
+\usepackage{csquotes}
+\usepackage{siunitx} % Provides \SI{1}{\metre}, also \ang{90}.
+\usepackage{textcomp}
+
+%% Graphics & Figure
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{graphicx} % Allow graphics to be included
+\usepackage{xcolor} % Define and use colours
+% \usepackage{subcaption} % Subfigures inside a figure
+
+% Keep all pictures in the './img/' sub-directory.
+\graphicspath{{./img/}}
+
+\usepackage{tikz} % Powerful drawing language
+\usepackage{tikz-feynman}
+\makeatletter
+\tikzfeynmanset{compat=\tikzfeynman@version@major.\tikzfeynman@version@minor.\tikzfeynman@version@patch}
+\makeatother
+
+%% TikZ pictures and plots can significantly increase the time it takes to
+%% produce the output. The `external` TikZ library library defers the creation
+%% of these figures to a sub-process which creates a separate PDF file which is
+%% then simply imported into the main document. To call the sub-process, you
+%% have to execute the appropriate makefile. If you are using LatexMk, you can
+%% use the `.latexmkrc` to automatically do this for you.
+%%
+%% The following setup works on Linux, and should work on OS X too.
+% \usetikzlibrary{external}
+% \tikzexternalize[shell escape=-shell-escape, prefix=pgf-img/]
+% \immediate\write18{mkdir -p pgf-img}
+% \tikzset{
+% external/mode=list and make,
+% external/system call={
+% lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname="\image" "\texsource" || rm "\image.pdf"},
+% }
+
+%% Math Packages
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{amsmath} % The core math package
+\usepackage{amssymb} % Defines additional math fonts
+\usepackage{mathtools} % Various extra maths functions
+% \usepackage{cancel} % Show cancellations with \cancel{}
+% \usepackage{autonum} % Only number referenced equations (must be loaded after cleverref)
+\usepackage{dsfont}
+
+\usepackage[cmintegrals,varg]{newtxmath} % Nice math with Garamond
+
+%% Define \withnumber which forces the line to have number
+\newcommand{\withnumber}{\refstepcounter{equation}\tag{\theequation}}
+
+%% Allows page breaks in math (1 = avoid if possible, 4 = whenever)
+%% Page breaks can be avoided at particular places by using \\*
+\allowdisplaybreaks[2]
+
+\DeclarePairedDelimiter{\angles}{\langle}{\rangle}
+
+%% Tables
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{array} % New column types, including >{}x<{}
+\usepackage{booktabs} % Provides nicer horizontal lines
+\usepackage{multirow} % Allows cells to span multiple rows
+%\usepackage{longtable} % Allows for tables to span multiple pages
+
+%% Define the maths version of clr columns.
+\newcolumntype{C}{>{\(}c<{\)}}
+\newcolumntype{L}{>{\(}l<{\)}}
+\newcolumntype{R}{>{\(}r<{\)}}
+
+%% Other Packages
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\usepackage{listings} % Code listings
+\usepackage{minted} % Use Pygments
+\usepackage{fp} % Floating point arithmetics
+\usepackage{makeidx} % Index creation
+\usepackage{xr} % Cross-referencing
+\usepackage[orig,UKenglish]{isodate} % Handle dates
+
+\usepackage{hyperref} % Automatically inserts hyperlinks.
+\usepackage{cleveref} % Use `\cref{}` to reference anything
+
+\usepackage{autonum}
+
+%% Bibliography
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% hyperref should be loaded first
+\usepackage[
+ backend=biber,
+ style=phys,
+ autocite=inline,
+ biblabel=brackets,
+ eprint=true,
+ doi=true,
+ isbn=true,
+]{biblatex}
+
+\addbibresource{references.bib}
+
+%% Other modifications
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Modify the skip after each paragraph
+\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
+\setlength{\parindent}{0pt}
+
+\providecommand{\LuaTeX}{Lua\TeX}
+\providecommand{\tikzfeynmanname}{\tikzname-Feynman}
+\providecommand{\pgfmanual}{\href{http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}{\tikzname{} manual}}
+
+\IfFileExists{pgfmanual-en-macros}{
+ \let\attribute\relax
+ \input{pgfmanual-en-macros}
+}{
+ \PackageError{tikz-feynman-manual}{
+This document requires the file pgfmanual-en-macros.tex (distributed
+with pgf) to compile. Please place a copy of that file in the current
+directory}{}}
+
+\makeindex
+
+\pgfkeys{
+ /pdflinks/search key prefixes in={/tikzfeynman/}
+ /pdflinks/internal link prefix=tikzfeynman,
+ %
+ /pdflinks/warnings=false,
+ % for debugging:
+ /pdflinks/show labels=false,
+}
+
+\makeatletter
+%% Make table of content heading smaller
+\renewcommand\tableofcontents{%
+ \section*{\normalfont\large\scshape\contentsname}%
+ \vspace{-1.5\baselineskip}%
+ \@starttoc{toc}%
+}
+\makeatother
+
+%% Define some slightly nicer colors
+\definecolor{link-color}{RGB}{96 0 0}
+\definecolor{cite-color}{RGB}{0 96 0}
+\definecolor{file-color}{RGB}{0 0 96}
+\definecolor{url-color}{RGB}{0 0 96}
+\definecolor{link-border-color}{RGB}{255 159 159}
+\definecolor{cite-border-color}{RGB}{159 255 159}
+\definecolor{file-border-color}{RGB}{159 159 255}
+\definecolor{url-border-color}{RGB}{159 159 255}
+
+\hypersetup{
+ pdfborder=0 0 0,
+}
+
+%% Change the abstract style
+\renewenvironment{abstract}{
+ \begin{center}
+ \begin{minipage}{0.9\textwidth}
+ \begin{center}
+ \Large
+ Abstract
+ \end{center}\vspace*{-1em}
+ \rule{\textwidth}{1pt}
+}{
+ \par\noindent
+ \rule{\textwidth}{1pt}
+ \end{minipage}
+ \end{center}
+}
+
+%% Put the abstract only on the arXiv version
+\newif\ifarxiv
+\arxivfalse
+
+%% Acknowledgements go in two different places depending on whether it is the
+%% arXiv version or not. Have the common code here.
+\def\acknowledgements{
+ \subsection*{Acknowledgements}
+ \label{subsec:acknowledgements}
+
+ The original proof-of-concept for using \tikzname{} to draw Feynman diagrams
+ was done by the user `\href{http://tex.stackexchange.com/users/2552}{Jake}' on
+ the \TeX{} StackExchange. His original answer can be viewed at:
+ \url{http://tex.stackexchange.com/a/87395/26980}.
+
+ I must also thank all the people who have used the development versions of
+ \tikzfeynmanname{} and offered suggestions to improve it and found bugs for me
+ to fix.
+}
+
+%% Center codeexample
+\makeatletter
+\let\codeexample@orig=\codeexample
+\let\endcodeexample@orig=\endcodeexample
+\def\codeexample{
+ \begin{center}
+ \codeexample@orig
+}
+\def\endcodeexample{
+ \endcodeexample@orig
+ \end{center}
+}
+
+%% Document Information
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+\newcommand{\@keywords}{}
+\newcommand{\keywords}[1]{\renewcommand{\@keywords}{#1}}
+\newcommand{\@institution}{}
+\newcommand{\institution}[1]{\renewcommand{\@institution}{#1}}
+
+\AtBeginDocument{
+ \hypersetup{
+ pdftitle={\@title},
+ pdfauthor={\@author},
+ pdfkeywords={\@keywords},
+ }
+}
+\makeatother
+
+\title{\tikzfeynmanname}
+\author{Joshua \textsc{Ellis}}
+\institution{
+ ARC Centre of Excellence for Particle Physics at the Terascale \\
+ School of Physics, The University of Melbourne \textsc{vic} 3010, Australia
+}
+\keywords{Feynman diagram, TeX, LaTeX, TikZ, pgf, TikZ-Feynman}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% DOCUMENT
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+\pagenumbering{roman}
+
+\begin{titlepage}
+ \makeatletter
+ \begin{center}
+ \vspace*{1em}
+ \tikz\node[scale=1.5]{%
+ \color{gray}\Huge\ttfamily \char`\{\textcolor{red!75!black}{\@title}\char`\}};
+
+
+ \vspace{0.5em}
+ {\huge Feynman diagrams with \tikzname}
+
+ \vspace{0.7em}
+ {Version \texttt{\tikzfeynman@version} \qquad \origdate\printdateTeX{\tikzfeynman@date}}
+
+ \vspace{1.3em}
+ {by \@author} \\[1em]
+ {\@institution}
+ \end{center}
+ \makeatother
+
+ \vfill
+
+\begin{codeexample}[graphic=white]
+\feynmandiagram [large, vertical=e to f] {
+ a -- [fermion] b -- [photon, momentum=\(k\)] c -- [fermion] d,
+ b -- [fermion, momentum'=\(p_{1}\)] e -- [fermion, momentum'=\(p_{2}\)] c,
+ e -- [gluon] f,
+ h -- [fermion] f -- [fermion] i;
+};
+\end{codeexample}
+
+ \vfill
+
+ \begin{multicols}{2}
+ \tableofcontents
+ \end{multicols}
+\end{titlepage}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% CONTENT
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\pagenumbering{arabic}
+
+\ifarxiv
+\begin{abstract}
+ \tikzfeynmanname{} is a \LaTeX{} package allowing Feynman diagrams to be
+ easily generated within \LaTeX{} with minimal user instructions and without
+ the need of external programs. It builds upon the \tikzname{} package and
+ leverages the graph placement algorithms from \tikzname{} in order to automate
+ the placement of many vertices. \tikzfeynmanname{} still allows fine-tuned
+ placement of vertices so that even complex diagrams can be generated with
+ ease.
+\end{abstract}
+\fi
+
+\section{Introduction}
+\label{sec:introduction}
+
+\tikzfeynmanname{} provides a new way to draw Feynman diagrams in \LaTeX{} that
+does not rely on external programs and uses a clear extensible syntax.
+
+\ifarxiv\else
+If you use \tikzfeynmanname{} in an academic setting, please cite:
+\begin{quote}
+ \fullcite{tikz-feynman}
+\end{quote}
+\fi
+
+Feynman diagrams provide a description of interactions of subatomic particles in
+a form that is clearer and more succinct than the corresponding mathematical
+description. They were introduced by \citeauthor{PhysRev.76.769} and first
+appear in his paper \citetitle{PhysRev.76.769} \cite{PhysRev.76.769}. Since
+then, \LaTeX{} has become widely used to type-set scientific papers and
+currently, two leading methods of drawing Feynman diagrams in \LaTeX{} are
+\href{https://www.ctan.org/pkg/feynmf}{|feynMF|/|feynMP|} \cite{feynmf} and
+\href{https://www.ctan.org/pkg/axodraw}{|AxoDraw|} \cite{axodraw}, with the
+latter also featuring a \textsc{gui} front-end called
+\href{http://jaxodraw.sourceforge.net}{|JaxoDraw|} \cite{jaxodrawV1,jaxodrawV2}.
+
+Both |feynMF|/|feynMP| and |AxoDraw| have quite complicated syntax. As an
+example, the code to generate an \(\ell\ell \to \ell\ell\) scattering Feynman
+diagram in each package is:
+\begin{center}
+ \begin{tabular}{p{0.3\linewidth} p{0.27\linewidth} p{0.34\linewidth}}
+ |AxoDraw| & |feynMF|/|feynMP| & \tikzfeynmanname{} \\[-2em]
+\begin{codeexample}[execute code=false]
+\begin{picture}
+\ArrowLine(190,270)(160,300)
+\ArrowLine(160,240)(190,270)
+\ArrowLine(270,300)(240,270)
+\ArrowLine(240,270)(270,240)
+\Photon(190,270)(240,270){4}{4.5}
+\Vertex(190,270){1.5}
+\Vertex(240,270){1.5}
+\end{picture}
+\end{codeexample}
+ &
+\begin{codeexample}[execute code=false]
+\begin{fmfchar*}(40,30)
+\fmfpen{thick}
+\fmfleft{i1,i2}
+\fmfright{o1,o2}
+\fmf{fermion}{i1,v1,o1}
+\fmf{fermion}{i2,v2,o2}
+\fmf{photon,label=$q$}{v1,v2}
+\fmfdot{v1,v2}
+\end{fmfchar*}
+\end{codeexample}
+ &
+\begin{codeexample}[execute code=false]
+\feynmandiagram [horizontal=a to b] {
+ i1 -- [fermion] a -- [fermion] i2,
+ a -- [photon] b,
+ f1 -- [fermion] b -- [fermion] f2,
+};
+\end{codeexample} \\[-2em]
+ \end{tabular}
+\end{center}
+The learning curves for both |AxoDraw| and |feynMF|/|feynMP| are quite steep,
+and although this is partly resolved by using |JaxoDraw|, this requires an
+external program. In addition, the creation of Feynman diagrams in
+|feynMF|/|feynMP| requires further processing outside of \LaTeX{}.
+
+\tikzfeynmanname{} on the other hand uses a clear syntax and delegates the
+positioning of vertices to algorithms originally developed by
+\citeauthor{hu2005} \cite{hu2005}, and \citeauthor{eades1991} \cite{eades1991},
+both of which were implemented into \tikzname{} by \citeauthor{pohlmann2011}
+\cite{pohlmann2011}. Since \tikzfeynmanname{} is built on \tikzname{}, users
+can harness the power and extensibilty of \tikzname{} \cite{tikz} making it easy
+to extend to accommodate individual needs. In order to produce more complicated
+diagrams, relative or absolute positioning of vertices can also be used in
+\tikzfeynmanname{} so that any diagram can be generated with relative ease.
+
+\tikzfeynmanname{} is made available through the
+\href{https://ctan.org/pkg/tikz-feynman}{Comprehensive \TeX{} Archive Network
+ (\textsc{ctan})}\footnote{\url{https://ctan.org/pkg/tikz-feynman}} and can
+also be downloaded from the
+\href{http://www.jpellis.me/projects/tikz-feynman}{project
+ page}\footnote{\url{http://www.jpellis.me/projects/tikz-feynman}}. The
+project is open source and contributions are welcome. The management of bugs
+and feature requests is done at
+\href{https://github.com/JP-Ellis/tikz-feynman}{Github}\footnote{\url{https://github.com/JP-Ellis/tikz-feynman}}.
+
+\tikzfeynmanname{}'s versioning will approximately follow
+\href{http://semverg.org}{semantic versioning}. This means that changes in the
+third number (|1.0.0| to |1.0.1|) will consist of bug fixes and very minor
+changes but they should not change the output otherwise\footnote{That is, with
+ the exception of the bug that they are fixing.}. Changes in the second number
+(|1.0.0| to |1.1.0|) will consist of new features but everything should be
+backwards compatible. Finally, changes in the first number (|1.0.0| to |2.0.0|)
+indicates a major change in the package and code written for |1.0.0| is not
+guaranteed to work on |2.0.0|. The intended version of this package to use
+should be indicated when the package is loaded with
+|\usepackage[compat=x.y.z]{tikz-feynman}| so the user may be informed of any
+discrepancyx. If needed, earlier versions may be downloaded from the
+\href{http://www.jpellis.me/projects/tikz-feynman}{project
+ page}\footnote{\url{http://www.jpellis.me/projects/tikz-feynman}}.
+
+\subsection*{Licence}
+\label{subsec:licence}
+
+This \emph{documentation} may be redistributed and/or modified under the terms
+of the \textsc{gnu} General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later
+version.
+
+The \emph{code of this package} may be distributed and/or modified under the
+conditions of the \LaTeX{} Project Public License, either version 1.3 of this
+license or (at your option) any later version.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Joshua Ellis.
+
+This package is distributed in the hope that it will be useful, but
+\textsc{without any warranty}; without even the implied warranty of
+\textsc{merchantability} or \textsc{fitness for a particular purpose}.
+
+\ifarxiv\else
+\acknowledgements
+\fi
+
+
+\clearpage
+\section{Tutorial}
+\label{sec:tutorial}
+
+\subsection{Loading the Package}
+\label{sibsec:loading_the_package}
+
+After installing the package, the \tikzfeynmanname{} package can be loaded with
+|\usepackage{tikz-feynman}| in the preamble. It is recommend that you also
+specify the version of \tikzfeynmanname{} to use with the optional package
+argument |compat|: |\usepackage[compat=1.1.0]{tikz-feynman}|. This ensures that
+any new versions of \tikzfeynmanname{} do not produce any undesirable changes
+without warning.
+
+\subsection{A First Diagram}
+\label{subsec:a_first_diagram}
+
+Feynman diagrams can be declared with the |\feynmandiagram| command. It is
+analogous to the |\tikz| command from \tikzname~and requires a final semi-colon
+(|;|) to finish the environment. For example, a simple \(s\)-channel diagram
+is:
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 -- [fermion] a -- [fermion] i2,
+ a -- [photon] b,
+ f1 -- [fermion] b -- [fermion] f2,
+};
+\end{codeexample}
+
+Let's go through this example line by line:
+\begin{description}
+\item[Line 1] |\feynmandiagram| introduces the Feynman diagram and allows for
+ optional arguments to be given in the brackets \texttt{[\meta{options}]}. In
+ this instance, |horizontal=a to b| orients the algorithm outputs such that the
+ line through vertices |a| and |b| is horizontal.
+\item[Line 2] The left fermion line is drawn by declaring three vertices (|i1|,
+ |a| and |i2|) and connecting them with edges |--|. Just like the
+ |\feynmandiagram| command above, each edge also take optional arguments
+ specified in brackets \texttt{[\meta{options}]}. In this instance, we want
+ these edges to have arrows to indicate that they are fermion lines, so we add
+ the |fermion| style to them.
+
+ As you will see later on, optional arguments can also be given to the vertices
+ in exactly the same way.
+\item[Line 3] This edge connects vertices |a| and |b| with an edge styled as a
+ photon. Since there is already a vertex labelled |a|, the algorithm will
+ connect it to a new vertex labeled |b|.
+\item[Line 4] This line is analogous to line 2 and introduces two new vertices,
+ |f1| and |f2|. It re-uses the previously labelled |b| vertex.
+\item[Line 5] Finish the declaration of the Feynman diagram. The final
+ semi-colon (|;|) is important.
+\end{description}
+
+The name given to each vertex in the graph does not matter. So in this example,
+|i1|, |i2| denote the initial particles; |f1|, |f2| denotes the final particles;
+and |a|, |b| are the end points of the propagator. The only important aspect is
+that what we called |a| in line 2 is also |a| in line 3 so that the underlying
+algorithm treats them as the same vertex.
+
+The order in which vertices are declared does not matter as the default
+algorithm re-arranges everything\footnote{It is possible for the algorithm to
+ get a litte confused in some circumstances, but these cases should be rather
+ rare. For some algorithms (such as the |layered~layout|), the order in which
+ vertices are introduces \emph{does} matter. This is documented in
+ \cref{subsubsec:diagram_keys}.}. For example, one might prefer to draw the
+fermion lines all at once, as with the following example (note also that the way
+we named vertices is completely different):
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=f2 to f3] {
+ f1 -- [fermion] f2 -- [fermion] f3 -- [fermion] f4,
+ f2 -- [photon] p1,
+ f3 -- [photon] p2,
+};
+\end{codeexample}
+
+As a final remark, the calculation of where vertices should be placed is usually
+done through an algorithm written in Lua. As a result, \LuaTeX{} is required in
+order to make use of these algorithms. If \LuaTeX{} is not used,
+\tikzfeynmanname{} will default to a more rudimentary algorithm and will warn
+the user instead.
+
+\subsection{Adding Styles}
+\label{subsec:adding_styles}
+
+So far, the examples have only used the |photon| and |fermion| styles. The
+\tikzfeynmanname{} package comes with quite a few extra styles for edges and
+vertices which are all documented over in \cref{sec:documentation}. As an
+example, it is possible to add momentum arrows with |momentum=|\meta{text}, and
+in the case of end vertices, the particle can be labelled with
+|particle=|\meta{text}. As an example, we take the generic \(s\)-channel
+diagram from \cref{subsec:a_first_diagram} and make it a \(e^{+}e^{-} \to
+\mu^{+}\mu^{-}\) diagram:
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 [particle=\(e^{-}\)] -- [fermion] a -- [fermion] i2 [particle=\(e^{+}\)],
+ a -- [photon, edge label=\(\gamma\), momentum'=\(k\)] b,
+ f1 [particle=\(\mu^{+}\)] -- [fermion] b -- [fermion] f2 [particle=\(\mu^{-}\)],
+};
+\end{codeexample}
+In addition to the style keys documented below, style keys from \tikzname{} can
+be used as well:
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 [particle=\(e^{-}\)] -- [fermion, very thick] a -- [fermion, opacity=0.2] i2 [particle=\(e^{+}\)],
+ a -- [red, photon, edge label=\(\gamma\), momentum'={[arrow style=red]\(k\)}] b,
+ f1 [particle=\(\mu^{+}\)] -- [fermion, opacity=0.2] b -- [fermion, very thick] f2 [particle=\(\mu^{-}\)],
+};
+\end{codeexample}
+For a list of all the various styles that \tikzname{} provides, have a look at
+the \pgfmanual; it is extremely thorough and provides many usage examples.
+
+\tikzfeynmanname{} also supports combining styles together which can be useful
+in certain new models such as supersymmetry:
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 [particle=\(\tilde W\)] -- [plain, boson] a -- [anti fermion] i2 [particle=\(q\)],
+ a -- [charged scalar, edge label=\(\tilde q\)] b,
+ f1 [particle=\(\tilde g\)] -- [plain, gluon] b -- [fermion] [particle=\(q\)],
+};
+\end{codeexample}
+
+\subsection{When the Algorithm Isn't Enough}
+\label{subsec:when_the_algorithm_isnt_enough}
+
+By default, the |\feynmandiagram| and |\diagram| commands use the
+|spring layout| algorithm to place all the edges\footnote{For more details on
+ this layout and any other graph layouts available, see
+ \cref{subsubsec:diagram_keys}}. The |spring layout| algorithm attempts to
+`spread out' the diagram as much as possible which---for most simpler
+diagrams---gives a satisfactory result; however in some cases, this does not
+produce the best diagram and this section will look at alternatives. There are
+three main alternatives:
+\begin{description}
+\item[Add invisible edges] While still using the default algorithm, it is
+ possible to force certain vertices to be closer together by adding extra edges
+ and making them invisible through |draw=none|. The algorithm will treat these
+ extra edges in the same way, but they are simply not drawn at the end;
+
+\item[Use a different algorithm] In some circumstances, other algorithms may be
+ better suited. Some of the other graph layout algorithms are listed in
+ \cref{subsubsec:diagram_keys}, and an exhaustive list of all algorithms and
+ their parameters is given in the \pgfmanual;
+
+\item[Manual placement] As a last resort, very complicated or unusual diagrams
+ will require each vertex to be manually placed.
+\end{description}
+
+\subsubsection{Invisible Edges}
+\label{subsubsec:invisible_edges}
+
+The underlying algorithm treats all edges in exactly the same way when
+calculating where to place all the vertices, and the actual drawing of the
+diagram (after the placements have been calculated) is done separately.
+Consequently, it is possible to add edges to the algorithm, but prevent them
+from being drawn by adding |draw=none| to the edge style.
+
+This is particularly useful if you want to ensure that the initial or final
+states remain closer together than they would have otherwise as illustrated in
+the following example (note that |opacity=0.2| is used instead of |draw=none| to
+illustrate where exactly the edge is located).
+
+\begin{codeexample}[]
+% No invisible to keep the two photons together
+\feynmandiagram [small, horizontal=a to t1] {
+ a [particle=\(\pi^{0}\)] -- [scalar] t1 -- t2 -- t3 -- t1,
+ t2 -- [photon] p1 [particle=\(\gamma\)],
+ t3 -- [photon] p2 [particle=\(\gamma\)],
+};
+\end{codeexample}
+\begin{codeexample}[]
+% Invisible edge ensures photons are parallel
+\feynmandiagram [small, horizontal=a to t1] {
+ a [particle=\(\pi^{0}\)] -- [scalar] t1 -- t2 -- t3 -- t1,
+ t2 -- [photon] p1 [particle=\(\gamma\)],
+ t3 -- [photon] p2 [particle=\(\gamma\)],
+ p1 -- [opacity=0.2] p2,
+};
+\end{codeexample}
+
+\subsubsection{Alternative Algorithms}
+\label{subsubsec:alternative_algorithms}
+
+The graph drawing library from \tikzname{} has several different algorithms to
+position the vertices\footnote{See \cref{subsubsec:diagram_keys} for some
+ alternative algorithms.} By default, |\diagram| and |\feynmandiagram| use the
+|spring layout| algorithm to place the vertices. The |spring layout| attempts
+to spread everything out as much as possible which, in most cases, gives a nice
+diagram; however, there are certain cases where this does not work. A good
+example where the |spring layout| doesn't work are decays where we have the
+decaying particle on the left and all the daughter particles on the right.
+\begin{codeexample}[]
+% Using the default spring layout
+\feynmandiagram [horizontal=a to b] {
+ a [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f1 [particle=\(\nu_{\mu}\)],
+ b -- [boson, edge label=\(W^{-}\)] c,
+ f2 [particle=\(\overline \nu_{e}\)] -- [fermion] c -- [fermion] f3 [particle=\(e^{-}\)],
+};
+\end{codeexample}
+\begin{codeexample}[]
+% Using the layered layout
+\feynmandiagram [layered layout, horizontal=a to b] {
+ a [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f1 [particle=\(\nu_{\mu}\)],
+ b -- [boson, edge label'=\(W^{-}\)] c,
+ c -- [anti fermion] f2 [particle=\(\overline \nu_{e}\)],
+ c -- [fermion] f3 [particle=\(e^{-}\)],
+};
+\end{codeexample}
+You may notice that in addition to adding the |layered layout| style to
+|\feynmandiagram|, we also changed the order in which we specify the vertices.
+This is because the |layered layout| algorithm does pay attention to the order
+in which vertices are declared (unlike the default |spring layout|); as a
+result, |c--f2, c--f3| has a different meaning to |f2--c--f3|. In the former
+case, |f2| and |f3| are both on the layer below |c| as desired; whilst the
+latter case places |f2| on the layer above |c| (that, the same layer as where
+the \(W^{-}\) originates).
+
+\subsubsection{Manual Placement}
+\label{subsubsec:manual_placement}
+
+In more complicated diagrams, it is quite likely that none of the algorithms
+work, no matter how many invisible edges are added. In such cases, the vertices
+have to be placed manually. \tikzfeynmanname{} allows for vertices to be
+manually placed by using the |\vertex| command.
+
+The |\vertex| command is available only within the |feynman| environment (which
+itself is only available inside a |tikzpicture|). The |feynman| environment
+loads all the relevant styles from \tikzfeynmanname{} and declares additional
+\tikzfeynmanname-specific commands such as |\vertex| and |\diagram|. This is
+inspired from PGFPlots and its use of the |axis| environment.
+
+The |\vertex| command is very much analogous to the |\node| command from
+\tikzname{}, with the notable exception that the vertex contents are optional;
+that is, you need not have |{|\meta{text}|}| at the end. In the case where |{}|
+is specified, the vertex automatically is given the |particle| style, and
+otherwise it is a usual (zero-sized) vertex.
+
+To specify where the vertices go, it is possible to give explicit coordinates
+though it is probably easiest to use the |positioning| library from \tikzname{}
+which allows vertices to be placed relative to existing vertices\footnote{The
+ \pgfmanual{} has some extensive documentation explaining how to use the
+ |positioning| library.}. By using relative placements, it is possible to
+easily tweak one part of the graph and everything will adjust accordingly---the
+alternative being to manually adjust the coordinates of every affected vertex.
+
+Finally, once all the vertices have been specified, the |\diagram*| command is
+used to specify all the edges. This works in much the same way as |\diagram|
+(and also |\feynmandiagram|), except that it uses an very basic algorithm
+to place new nodes and allows existing (named) nodes to be included. In order
+to refer to an existing node, the node must be given in parentheses.
+
+This whole process of specifying the nodes and then drawing the edges between
+them is shown below for the muon decay:
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a) {\(\mu^{-}\)};
+ \vertex [right=of a] (b);
+ \vertex [above right=of b] (f1) {\(\nu_{\mu}\)};
+ \vertex [below right=of b] (c);
+ \vertex [above right=of c] (f2) {\(\overline \nu_{e}\)};
+ \vertex [below right=of c] (f3) {\(e^{-}\)};
+
+ \diagram* {
+ (a) -- [fermion] (b) -- [fermion] (f1),
+ (b) -- [boson, edge label'=\(W^{-}\)] (c),
+ (c) -- [anti fermion] (f2),
+ (c) -- [fermion] (f3),
+ };
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\clearpage
+\section{Documentation}
+\label{sec:documentation}
+
+\subsection{Commands \emph{\&} Environments}
+\label{subsec:commands}
+
+\begin{command}{\tikzfeynmanset\marg{options}}
+ This command will process \meta{options} using |\pgfkeys| with the default
+ path set to |/tikzfeynman|. Typically, \meta{options} will be a
+ comma-separated list of the form \meta{key}|=|\meta{value}, though the full
+ power of the mechanism behind |\pgfkeys| can be used (see the \pgfmanual{} for
+ a complete description).
+
+ Typically, this is used in the preamble of the document to add or change
+ certain keys for the whole document.
+\end{command}
+
+\begin{command}{\feynmandiagram\opt{\oarg{TikZ options}\oarg{diagram options}}\marg{diagram instructions}}
+ This commands creates a |{tikzpicture}| and |{feynman}| environment, and
+ places a |\diagram| inside with the provided \meta{diagram instruction}.
+ Please refer to the documentation for |\diagram| for the \meta{diagram
+ instruction} syntax.
+
+ The optional arguments specified in \meta{tikz options} are passed on to the
+ |{tikzpicture}|, and the \meta{diagram options} are passed on to |\diagram|.
+ If only one optional argument is given, then the optional arguments are given
+ to both. A single optional argument will usually suffice as most keys are
+ recognized by both commands; however, in the event that a key is not
+ recognized, both options are provided.
+\end{command}
+
+\begin{environment}{{feynman}\opt{\oarg{options}}}
+ The |{feynman}| environment is where all the drawing of Feynman diagrams takes
+ place. It makes all the \tikzfeynmanname{} styles available and defines
+ commands such as |\vertex| and |\diagram| which are otherwise unavailable
+ outside of this environment. The |{feynman}| environment is only accessible
+ within the |{tikzpicture}| environment.
+
+ Options which are passed in \meta{options} apply for the whole environment in
+ the same way that the |{scope}| environment work in \tikzname.
+
+ \begin{command}{\vertex\opt{\oarg{options}} (\meta{name}) \opt{at (\meta{coordinate})} \opt{\marg{contents}};}
+ Defines a new vertex with the provided \meta{name}. If \meta{contents} is
+ not provided, the resulting vertex will have zero size. On the other hand,
+ if \meta{contents} is provided, the |particle=|\meta{contents} style is
+ applied. Additional styles can be applied to the vertex through
+ \meta{options}.
+
+ The final semicolon (|;|) is vital for this command since without it, the
+ \LaTeX{} engine will not know when the |\vertex| command ends.
+ Additionally, this command \emph{cannot} be chained like one can do with the
+ inbuilt \tikzname{} commands.
+
+ This command is only available with the |{feynman}| environment.
+ \end{command}
+
+ \begin{command}{\diagram\opt{\oarg{options}}\marg{diagram instructions}}
+ Begins a new diagram using the |spring layout|. Keys passed through
+ \meta{options} can include general \tikzname{} keys, graph-specific keys and
+ any applicable \tikzfeynmanname{} keys too. Other algorithms (such as |tree
+ layout|) can be passed through \meta{options} and that will override the
+ |spring layout|.
+
+ The syntax for the \meta{diagram instructions} is thoroughly described in
+ the \pgfmanual, but in the context of this package, it will usually suffice
+ to know the following:
+ \begin{itemize}
+ \item Vertices within the graph are specified with no delimiters (i.e.~no
+ parenthesis, no brackets) and only require spaces around either side. In
+ order to refer to a vertex defined outside of the |\diagram| command, its
+ name must be given in parenthesis: |(|\meta{name}|)|. Note that in order
+ to refer to external vertices, one must use |\diagram*| as most algorithms
+ (including the default |spring layout|) are incompatible with vertices
+ defined outside of the algorithm.
+
+ When a vertex name is used multiple times, the underlying algorithm will
+ consider them to be the same vertex and introduces additional edges.
+
+ Options can be given to the vertex in brackets after the name: \meta{name}
+ |[|\meta{options}|]|. For vertices defined outside of the |\diagram|
+ command, these options should be specified when the vertex is first
+ declared.
+
+ \item The edges between each pair of vertices is specified with |--|, and
+ these can be chained together: \verb|a -- b -- c|. In order to pass a
+ style to the edge, it is specified in brackets after the dashed:
+ |-- | \oarg{options}. For example, to make on edge red, one would use
+ |-- [red]|.
+
+ \item A comma (|,|)---or equivalently a semicolon (|;|)---specifies the end
+ of a sequence of edges and vertices and allows for another sequence to be
+ started. So \verb|a -- b, c -- d| will create two disconnected edges.
+
+ \item Subgroups (aking to scopes in \tikzname) are specified with braces:
+ |{|\oarg{options}\meta{diagram instructions}|}|. This can be quite
+ useful when a lot of edges or nodes share a common style. For example,
+ one could use |{[edges={fermion}]|\verb| a -- b -- c, x -- y -- z}| and
+ every edge will have the |fermion| style applied automatically.
+
+ Another useful feature of subgroups is that an edge to a group will create
+ an edge to each vertex in that subgroup as shown below. The example also
+ shows how they can be nested which in some cases (such as with a
+ |layered layout|) can be extremely useful.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, horizontal=a1 to b3] {
+ a1 -- {b1, b2, b3 -- {c1, c2 -- d1}}
+};
+\end{codeexample}
+ \end{itemize}
+ \end{command}
+
+ \begin{command}{\diagram*\opt{\oarg{options}}\marg{diagram instructions}}
+ Same as |\diagram|, but instead of using the |spring layout| algorithm to
+ place the vertices, this uses the most basic algorithm. This basic
+ algorithm in most cases will not produce a satisfactory diagram, but is
+ intended to be used with vertices are declared and positioned outside of the
+ |\diagram*| command. Essentially, |\diagram*| should be used only to
+ connect existing vertices.
+ \end{command}
+\end{environment}
+
+
+
+\subsection{Keys \emph{\&} Styles}
+\label{subsec:Keys}
+
+The various styles and options that allow the Feynman diagrams to be customized
+are defined in what \tikzname{} calls \emph{keys}. The documentation includes
+all keys which are defined within \tikzfeynmanname{} which all begin with the
+prefix |/tikzfeynman|. In addition, a few of the keys from \tikzname{} itself
+which are particularly useful to \tikzfeynmanname{} are documented and these are
+prefixed with |/tikz| or |/graph drawing|. Please refer to the \pgfmanual{} for
+a more in thorough documentation of the \tikzname{} keys.
+
+
+\tikzfeynmanname{} provides many |every |\meta{key} which allow every instance
+of \meta{key} to be modified. For example, to make every diagram red except for
+small diagrams which should be blue, then one would add to the preamble:
+\begin{codeexample}[execute code=false]
+\tikzfeynmanset{
+ every diagram={red},
+ every small={blue},
+}
+\end{codeexample}
+If you are completely unhappy with a particular inbuilt style, you can define
+your own style with with \meta{key}|/.style={...}| as shown in the
+following example:
+\begin{codeexample}[execute code=false]
+\tikzfeynmanset{
+ myblob/.style={
+ shape=circle,
+ draw=blue,
+ fill=red,
+ }
+}
+\end{codeexample}
+
+All the keys defined here are made available inside the |{feynman}| environment
+and inside |\feynmandiagram|; but if you wish to access them outside of this
+(say, in a regular |{tikzpicture}| environment), you will need to specify the
+full path with the leading |/tikzfeynman|.
+
+\subsubsection{Feynman Keys}
+\label{subsubsec:feynman_keys}
+
+\begin{keylist}{%
+ /tikzfeynman/execute at begin feynman=\marg{\TeX{} code},
+ /tikzfeynman/execute at end feynman=\marg{\TeX{} code}}
+ Allows for custom code to be executed at the start or end of each |{feynman}|
+ environment.
+\end{keylist}
+
+\begin{key}{/tikzfeynman/every feynman=\meta{styles}}
+ Set of styles which are applied to every |{feynman}| environments (and
+ consequently, every apply inside all |\feynmandiagram| too). The style also
+ applies to regular \tikzname{} commands used inside the |{feynman}|
+ environment.
+
+\begin{codeexample}[]
+\tikzfeynmanset{every feynman={red}}
+\begin{tikzpicture}
+ \node at (0, 0.5) {This is not red};
+ \begin{feynman}
+ \node at (0, -0.5) {This is red};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{stylekey}{/tikzfeynman/inline=\meta{node}}
+ A style used to display a Feynman diagram inline (typically in an equation),
+ and aligning such that its vertical placement is at the node specified. The
+ node specification must enclosed in parentheses. For nodes which contain text
+ (such as when the |particle| style is applied), it is possible to use the
+ baseline of the text inside the node to line up with the baseline of the
+ equation by using |(|\meta{node}|.base)| as demonstrated in the following
+ example. Note that this key applies additional styles to make the diagram fit
+ in an equation more nicely; if you do not wish to have these additional
+ styles, use the |baseline| key.
+
+ \begin{equation}
+ \feynmandiagram [inline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+ \end{equation}
+
+\begin{codeexample}[execute code=false]
+\begin{equation}
+ \feynmandiagram [inline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+\end{equation}
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikz/baseline=\meta{node}}
+ Changes the vertical alignment of the Feynman diagram such that it diagram's
+ baseline is at the node specified. This works in the same was as
+ |inline=|\meta{node}, but it does not apply any additional styles (notice how
+ the following example is larger than the one above).
+ \begin{equation}
+ \feynmandiagram [baseline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+ \end{equation}
+
+\begin{codeexample}[execute code=false]
+\begin{equation}
+ \feynmandiagram [baseline=(d.base), horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d [particle=\(\gamma\)],
+ };
+ = i g_{e} \gamma^{\mu}
+\end{equation}
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{%
+ /graph drawing/horizontal=\meta{node} to \meta{node},
+ /graph drawing/horizontal'=\meta{node} to \meta{node},
+ /graph drawing/vertical=\meta{node} to \meta{node},
+ /graph drawing/vertical'=\meta{node} to \meta{node}}
+ The underlying algorithm will arrange all the nodes relative to each other,
+ but beyond that it has no idea how the overall graph should be oriented.
+ By using one of the above keys, the final output of the algorithm is oriented
+ and/or mirrored such that the two nodes specified are on the same horizontal
+ (or vertical) line. The two nodes need not actually be connected by an edge
+ for this to work.
+
+ The two \meta{node} specifications should \emph{not} be enclosed in
+ parentheses, unlike the |inline| and |baseline| keys.
+
+ The |horizontal'| and |vertical'| keys work in the same was as |horizontal|
+ and |vertical|, but with a flip.
+
+\begin{codeexample}[]
+\feynmandiagram [inline=(b), horizontal=a to b, red] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\feynmandiagram [inline=(b), horizontal'=a to b, blue] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\feynmandiagram [inline=(b), vertical=a to b, green!40!black] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\feynmandiagram [inline=(b), vertical=b to a, black] {
+ a -- b -- {c [particle=\(c\)], d [particle=\(d\)]}
+};
+\end{codeexample}
+\end{keylist}
+
+\subsubsection{Diagram Keys}
+\label{subsubsec:diagram_keys}
+
+\begin{key}{/tikzfeynman/every diagram=\meta{styles}}
+ Set of styles which are applied to every diagram; that is, to everything
+ inside the |\feynmandiagram|, |\diagram| and |\diagram*| commands but not the
+ general |{feynman}| environment (see \cref{subsubsec:feynman_keys} for that).
+
+\begin{codeexample}[]
+\tikzfeynmanset{every diagram={red}}
+\feynmandiagram [small, horizontal=d to b] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{%
+ /tikzfeynman/small,
+ /tikzfeynman/medium,
+ /tikzfeynman/large}
+ Changes the default separation between the vertices and changes the size of
+ arrows, blobs, and other shapes to fit different context. The |small| size is
+ best used with when the diagram is quite simple and doesn't have too many
+ annotations (such as momentum arrows and particle labels). The |medium| size
+ is the default and is usually large enough that even diagrams with many labels
+ and momentum arrows do not become too cluttered. Finally the |large| key is
+ best for large illustrations as used on the title page of this document.
+
+\begin{codeexample}[]
+\feynmandiagram [baseline=(b), small, horizontal=d to b, red] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\feynmandiagram [baseline=(b), medium, horizontal=d to b, green!40!black] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\feynmandiagram [baseline=(b), large, horizontal=d to b, blue] {
+ a -- [fermion] b -- [fermion] c,
+ b -- [boson] d,
+};
+\end{codeexample}
+\end{keylist}
+
+There are several algorithms which are available to place the vertices which are
+all provided within the |graph drawing| library from \tikzname. Below are
+listed a few of these layouts which are more relevant for drawing Feynman
+diagrams. For a more complete description of how these algorithm work, please
+refer to the \pgfmanual{}. Please note that most graph drawing algorithms are
+implemented in Lua and thus require \LuaTeX{} in order to work. If \LuaTeX{} is
+not used, \tikzfeynmanname{} will default to a more rudimentary algorithm and
+will warn the user instead.
+
+\begin{key}{/graph drawing/spring layout=\opt{\meta{string}}}
+ Uses Hu's spring layout \cite{hu2005} as implemented by Pohlmann
+ \cite{pohlmann2011}. This models each edge as springs and attempts to spread
+ everything out as much as possible. This is the default layout.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=c to d] {
+ {a, b} -- c -- d -- {e, f},
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/graph drawing/spring electrical layout=\opt{\meta{string}}}
+ Uses Hu's spring electrical layout \cite{hu2005} as implemented by Pohlmann
+ \cite{pohlmann2011}. This models each edge as springs and gives each vertex a
+ charge. This algorithm allows for the charge of a particular vertex to be
+ adjusted using the |electric charge| key (the default is |1|).
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle,
+ small, horizontal=c to d,
+ spring electrical layout
+ ] {
+ {a, b [electric charge=2]} -- c -- d -- {e, f [electric charge=0.1]},
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/graph drawing/layered layout=\opt{\meta{string}}}
+ Uses the Sugiyama layout algorithm \cite{eades1991} as implemented by Pohlmann
+ \cite{pohlmann2011} in order to place the node.
+
+ When an edge is specified, the first vertex is always located on the layer
+ above the second vertex. This creates a hierarchy of vertices which is
+ particularly useful for decays.
+
+ Two vertices can be forced to be on the same layer with the
+ |/graph drawing/same layer| key.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, layered layout] {
+ a -- b -- {c, d -- {e, f}},
+};
+\end{codeexample}
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, layered layout] {
+ a -- b -- {c -- {c1, c2}, d -- {d1, d2}},
+ {[same layer] c1, d},
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/graph drawing/tree layout=\opt{\meta{string}}}
+ Uses the Reingold--Tilform algorithm in order to place the node. This works
+ in a similar way to the layered layout, but has quite a lot of additional
+ options to handle missing children in the tree. Please refer to the
+ \pgfmanual{} for a thorough description of these additional features.
+
+ When an edge is specified, the first vertex is always located on the layer
+ above the second vertex. This creates a hierarchy of vertices which is
+ particularly useful for decays.
+
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, tree layout] {
+ a -- b -- {c, d -- {e, f}},
+};
+\end{codeexample}
+\begin{codeexample}[]
+\feynmandiagram [nodes=circle, small, horizontal=a to b, tree layout] {
+ a -- b -- {c -- {c1, c2}, d -- {d1, d2}},
+};
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{%
+ /tikz/graphs/edges=\meta{options},
+ /tikz/graphs/nodes=\meta{options}}
+ Just like it is possible to change the shape of every vertex or edge in the
+ whole document, it is also possible to change the shape of every vertex or
+ edge in a single diagram by modifying these keys and adding the desired
+ styles.
+\end{keylist}
+
+\subsubsection{Vertex Keys}
+\label{subsubsec:vertex_keys}
+
+\begin{key}{/tikzfeynman/vertex}
+ The default, base style applied to every vertex initially. Other styles
+ are subsequently added. This sets the vertex |shape| to be a |coordinate|,
+ that is, a null shape with no size or width.
+\end{key}
+
+\begin{key}{/tikzfeynman/every \meta{vertex shape}=\meta{styles}}
+ The style of specific vertices can be modified by changing the appropriate
+ |every |\meta{vertex shape} key. For example, in order to change the style of
+ every |dot|-styled vertex, you can modify the |every dot| key, or to modify
+ every vertex globally, the |every vertex| key can be modified.
+
+\begin{codeexample}[]
+\tikzfeynmanset{
+ every vertex={red, dot},
+ every particle={blue},
+ every blob={draw=green!40!black, pattern color=green!40!black},
+}
+\feynmandiagram [horizontal=a to b] {
+ a [particle={\(\gamma, Z\)}] -- [boson] b [blob],
+ c -- [fermion] b -- [fermion] d,
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/dot}
+ Modifies the vertex so that it has a small filled circle.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/square dot}
+ Modifies the vertex so that it has a small filled square.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [square dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/empty dot}
+ Modifies the vertex so that it has a small empty circle.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [empty dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/crossed dot}
+ Modifies the vertex so that it has a small circle with a cross inside.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [crossed dot] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/blob}
+ Modifies the vertex so that it is a large blob, usually used to denote an
+ effective operator.
+
+\begin{codeexample}[]
+\feynmandiagram [small] {
+ a -- b [blob] -- {c, d}
+};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/particle=\meta{name}}
+ Modifies the vertex so that it shows \meta{name}. This is intended to label
+ initial and final particles, but it should not be used on internal vertices as
+ it will result in the lines at the vertex having a gap. For propagators (the
+ |edge label| key is much more appropriate).
+
+ Note that if \meta{name} contains characters such as brackets (|[]|) or
+ commas (|,|), the whole \meta{name} has to be enclosed in braces (|{}|);
+ otherwise, the parser will interpret the comma as the end of the \meta{name}
+ and the start of the next key, or the closing bracket as the end of all
+ optional arguments.
+
+\begin{codeexample}[]
+\feynmandiagram [small, horizontal=a to b] {
+ a [particle={\(\gamma, Z\)}] -- [boson] b -- {c, d},
+};
+\end{codeexample}
+\end{key}
+
+
+\subsubsection{Edge Keys}
+\label{subsubsec:edge_keys}
+
+Just like with the various vertex keys, each edge type has a corresponding
+|every |\meta{edge type}; however, due to the existence of very similar keys
+such as |scalar|, |charged scalar| and |anti charged scalar|, more specific keys
+inherit styles from less specific ones. For example, styles in |every scalar|
+will apply to |charged scalar| and |anti charged scalar|.
+
+The edge styles do not override each other and instead stack. This means that
+an edge styled with both |boson| and |fermion| will consist of a straight line
+with a wavy line on top and an error. If not styles are provided, then a simple
+solid line is drawn.
+
+\begin{key}{/tikzfeynman/every edge=\meta{styles}}
+ A style to apply to every edge initially.
+\end{key}
+
+\begin{stylekey}{/tikzfeynman/every \meta{edge style}=\meta{styles}}
+ The style of specific edges can be modified by changing the appropriate
+ |every |\meta{edge style} key. For example, in order to make a global change
+ to every |boson|, you can modify the |every boson| key.
+
+\begin{codeexample}[]
+\tikzfeynmanset{
+ every edge={green},
+ every boson={red},
+ every photon={blue},
+}
+\feynmandiagram [small] {
+ a [particle=\(a\)] -- [boson] o -- [photon] b [particle=\(b\)],
+ f1 [particle=\(c\)] -- [fermion] o -- [scalar] f2 [particle=\(d\)],
+};
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikzfeynman/plain}
+ Draws a simple solid line. This style is identical to the default style
+ applied if no other style is used, but is provided so that it can be combined
+ with other styles.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [plain] b};
+\feynmandiagram [horizontal=a to b] {a -- [plain, gluon] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/boson}
+ Draws a sinusoidal line to denote a boson.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [boson] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/charged boson}
+ Draws a sinusoidal line with an arrow to denote a charged boson.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [charged boson] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti charged boson}
+ Draws a sinusoidal line with an arrow pointing the other way to to denote a
+ anti charged boson.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti charged boson] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/photon}
+ Draws a sinusoidal line to denote a photon.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [photon] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/scalar}
+ Draws a dashed line to denote a scalar.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [scalar] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/charged scalar}
+ Draws a dashed line with an arrow to denote a charged scalar.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [charged scalar] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti charged scalar}
+ Draws a dashed line with an arrow pointing the other way to denote a charged
+ scalar antiparticle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti charged scalar] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/ghost}
+ Draws a dotted line to denote a ghost.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [ghost] b};
+\end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikzfeynman/fermion}
+ Draws a solid line with an arrow to denote a fermion.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [fermion] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti fermion}
+ Draws a solid line with an arrow pointing the other way to denote an antifermion.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti fermion] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/majorana}
+ Draws a solid line with two arrows pointing to the center to denote an
+ Majorana particle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [majorana] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/anti majorana}
+ Draws a solid line with two arrows pointing to the ends to denote a Majorana
+ particle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [anti majorana] b};
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikzfeynman/gluon}
+ Draws a coiled line to denote a gluon.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [gluon] b};
+\end{codeexample}
+\end{key}
+
+\begin{keylist}{%
+ /tikz/edge label=\meta{text},
+ /tikz/edge label'=\meta{text}}
+ Places a label halfway along the edge with the given text. The primed key
+ switches which side of the edge the label is placed.
+\end{keylist}
+
+\begin{key}{/tikzfeynman/insertion=\opt{\oarg{options}}\meta{distance}}
+ Places an insertion (for mass or momentum insertion) along an edge. The
+ distance specifies how far along the edge the insertion should be placed such
+ that |0| and |1| respectively correspond to the start and the end of the edge.
+
+ Multiple insertions can be placed along a single edge by repeating the style
+ key.
+
+ Through the \meta{options} argument, the insertion size and style can be
+ changed.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [insertion=0.33, insertion=0.67] b};
+\end{codeexample}
+
+ \begin{key}{/tikzfeynman/insertion/size=\meta{distance} (initially 3pt)}
+ Specifies how big the insertion should be. The length of each edge starting
+ from the center will be \(\sqrt{2} \times \meta{distance}\).
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [insertion={[size=10pt]0.4}] b};
+\end{codeexample}
+ \end{key}
+
+ \begin{key}{/tikzfeynman/insertion/style=\meta{distance} (initially \normalfont empty)}
+ Specifies additional styles to applying to the lines of the insertion.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {a -- [insertion={[style=red]0.4}] b};
+\end{codeexample}
+ \end{key}
+\end{key}
+
+\subsubsection{Momentum Keys}
+\label{subsubsec:momentum_keys}
+
+\begin{keylist}{%
+ /tikzfeynman/momentum=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/momentum'=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/reversed momentum=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/reversed momentum'=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/rmomentum=\opt{\oarg{options}}\meta{text},
+ /tikzfeynman/rmomentum'=\opt{\oarg{options}}\meta{text}}
+ Places a momentum arrow on the specified edge with label given by \meta{text}.
+ The primed (|'|) version place the momentum arrow on the other side of the
+ edge; that is, if the momentum arrow was on the right, it will be placed on
+ the left of the edge. The |reversed momentum| and |reversed momentum'| keys
+ are analogous to |momentum| and |momentum'| except that the momentum arrow
+ points in the opposite direction. Finally, the |rmomentum| and |rmomentum'|
+ are aliases of |reversed momentum| and |reversed momentum'|.
+
+ Note that due to the way the arrow is drawn, it doesn't inherit styles of the
+ edge. As a result, they have to be re-specified through \meta{options}.
+
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=a to b] {
+ a -- [red, fermion, edge label'=\(ab\), momentum={[arrow style=red]\(p_{ab}\)}] b
+ -- [blue, photon, edge label'=\(bc\)] c
+ -- [green!40!black, scalar, momentum=\(p_{cd}\)] d,
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=b to c] {
+ a -- [photon, momentum=\(p\)] b
+ -- [fermion, half left, looseness=1.5, momentum=\(k\)] c
+ -- [fermion, half left, looseness=1.5, momentum=\(k-p\)] b,
+ c -- [photon, momentum=\(p\)] d,
+};
+\end{codeexample}
+
+The \meta{options} allows for the following options to customize the appearance
+of the momentum arrows. These can be either set globally with the usual
+|\tikzfeynmanset|, or can be set on a individual basis through the
+\meta{options} argument of the |momentum| key. In the latter case, only the
+\meta{key} in |/tikzfeynman/momentum/|\meta{key} is required.
+
+\begin{key}{/tikzfeynman/momentum/label distance=\meta{distance} (initially 0pt)}
+ Set the separation between the text and the arrow. Note that the text is
+ still surrounded by an |inner sep=0.3333em| by default so the default
+ distance of |0pt| will not result in the momentum label touching the arrow.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/arrow distance=\meta{distance} (initially 3mm)}
+ Set the separation between the edge and the arrow.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/arrow shorten=\meta{distance} (initially 0.15)}
+ Specify the fraction of the total edge length by which the momentum arrow is
+ shortened at each end.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/label style=\meta{style} (initially \normalfont empty)}
+ Define styles to apply to the momentum label node.
+\end{key}
+
+\begin{key}{/tikzfeynman/momentum/arrow style=\meta{style} (initially \normalfont empty)}
+ Define style to apply to the momentum arrow.
+\end{key}
+\end{keylist}
+
+\subsubsection{Modifier Keys}
+\label{subsubsec:modifier_keys}
+
+Modifier keys serve only to slightly modify a small feature of the edge.
+
+\begin{keylist}{%
+ /tikzfeynman/half left,
+ /tikzfeynman/half right,
+ /tikzfeynman/quarter left,
+ /tikzfeynman/quarter right}
+ Modifies the edge so that it bends left or right in such a way that it
+ completes half a circle, or a quarter of a circle.
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ a -- [red, fermion, half left] b -- [blue, fermion, half left] a,
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to c] {
+ a -- [red!0!blue, fermion, quarter left] b
+ -- [red!33!blue, fermion, quarter left] c
+ -- [red!66!blue, fermion, quarter left] d
+ -- [red!100!blue, fermion, quarter left] a,
+};
+\end{codeexample}
+\end{keylist}
+
+\begin{keylist}{%
+ /tikz/out=\meta{angle},
+ /tikz/in=\meta{angle}}
+ Specifies the angle at which the edge leaves the first vertex in an edge and
+ the angle at which it enters the second vertex in an edge.
+\end{keylist}
+
+\begin{key}{/tikz/relative=\opt{\meta{true or false}} (default true)}
+ If |relative| is set to |false|, the angle is relative to the paper whilst when
+ |relative| is set to |true|, the angle is relative to the straight line
+ joining the two vertices.
+\end{key}
+
+\begin{key}{/tikz/looseness=\meta{number} (initially 1)}
+ As the name suggests, this specifies how `loose' or `tight' a curve is
+ connecting two vertices.
+\end{key}
+
+\clearpage
+\section{Examples}
+\label{sec:examples}
+
+Below are a few diagrams which demonstrate how the package can be used in some
+more practical examples..
+
+\begin{description}
+\item[Vertex Rule] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ a [particle=\(Z\)] -- [photon, momentum=\(p_{1}\)] b,
+ f1 [particle=\(\overline f\)]
+ -- [fermion, rmomentum'=\(p_{3}\)] b
+ -- [fermion, momentum=\(p_{2}\)] f2 [particle=\(f\)],
+};
+\end{codeexample}
+
+\item[Tree Level Diagrams] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [horizontal=a to b] {
+ i1 [particle=\(e^{-}\)] -- [fermion] a -- [fermion] i2 [particle=\(e^{+}\)],
+ a -- [photon, edge label=\(\gamma\)] b,
+ f1 [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f2 [particle=\(\mu^{+}\)],
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [vertical'=a to b] {
+ i1 [particle=\(e^{-}\)]
+ -- [fermion] a
+ -- [fermion] f1 [particle=\(e^{-}\)],
+ a -- [photon, edge label=\(\gamma\)] b,
+ i2 [particle=\(e^{+}\)]
+ -- [anti fermion] b
+ -- [anti fermion] f2 [particle=\(e^{+}\)],
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \diagram [vertical'=a to b] {
+ i1 [particle=\(e^{-}\)]
+ -- [fermion] a
+ -- [draw=none] f1 [particle=\(e^{+}\)],
+ a -- [photon, edge label'=\(p\)] b,
+ i2 [particle=\(e^{+}\)]
+ -- [anti fermion] b
+ -- [draw=none] f2 [particle=\(e^{-}\)],
+ };
+ \diagram* {
+ (a) -- [fermion] (f2),
+ (b) -- [anti fermion] (f1),
+ };
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\item[Loops] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=b to c] {
+ a -- [photon, momentum=\(p\)] b
+ -- [fermion, half left, momentum=\(k\)] c
+ -- [fermion, half left, momentum=\(k-p\)] b,
+ c -- [photon, momentum=\(p\)] d,
+};
+\end{codeexample}
+
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=a to b] [edges=gluon] {
+ {i1, i2} -- a -- [half left] b -- [half left] a,
+ b -- {f1, f2},
+};
+\end{codeexample}
+
+\newpage
+\item[Box Diagrams] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\feynmandiagram [layered layout, horizontal=a to b] {
+ % Draw the top and bottom lines
+ i1 [particle=\(d\)]
+ -- [fermion] a
+ -- [photon, edge label=\(W^{-}\)] b
+ -- [fermion] f1 [particle=\(\mu^{-}\)],
+ i2 [particle=\(\overline s\)]
+ -- [anti fermion] c
+ -- [photon, edge label'=\(W^{+}\)] d
+ -- [anti fermion] f2 [particle=\(\mu^{+}\)],
+ % Draw the two internal fermion lines
+ { [same layer] a -- [fermion, edge label'=\(q\)] c },
+ { [same layer] b -- [anti fermion, edge label=\(\nu_{\mu}\)] d},
+};
+\end{codeexample}
+
+\newpage
+\item[Meson decay and mixing] \hspace*{0pt} \newline
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a1) {\(\overline b\)};
+ \vertex[right=1.5cm of a1] (a2);
+ \vertex[right=1cm of a2] (a3);
+ \vertex[right=1.5cm of a3] (a4) {\(\overline u\)};
+
+ \vertex[below=2em of a1] (b1) {\(d\)};
+ \vertex[below=2em of a4] (b2) {\(d\)};
+
+ %% See section 13.5 of PGF/TikZ manual
+ \vertex at ($(a2)!0.5!(a3)!0.5cm!90:(a3)$) (d);
+ %% Equivalent way to obtain (d):
+ % \vertex at ($(b2)!0.5!(b3) + (0, -0.5cm)$) (d);
+ \vertex[above=of a4] (c1) {\(u\)};
+ \vertex[above=2em of c1] (c3) {\(\overline d\)};
+ \vertex at ($(c1)!0.5!(c3) - (1cm, 0)$) (c2);
+
+ \diagram* {
+ (a4) -- [fermion] (a3) -- [fermion] (a2) -- [fermion] (a1),
+ (b1) -- [fermion] (b2),
+ (c3) -- [fermion, out=180, in=45] (c2) -- [fermion, out=-45, in=180] (c1),
+ (a2) -- [boson, quarter left] (d) -- [boson, quarter left] (a3),
+ (d) -- [boson, bend left, edge label=\(W^{+}\)] (c2),
+ };
+
+ \draw [decoration={brace}, decorate] (b1.south west) -- (a1.north west)
+ node [pos=0.5, left] {\(B^{0}\)};
+ \draw [decoration={brace}, decorate] (c3.north east) -- (c1.south east)
+ node [pos=0.5, right] {\(\pi^{+}\)};
+ \draw [decoration={brace}, decorate] (a4.north east) -- (b2.south east)
+ node [pos=0.5, right] {\(\pi^{-}\)};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\newpage
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a1) {\(\overline b\)};
+ \vertex[right=1cm of a1] (a2);
+ \vertex[right=1cm of a2] (a3);
+ \vertex[right=1cm of a3] (a4) {\(b\)};
+ \vertex[right=1cm of a4] (a5);
+ \vertex[right=2cm of a5] (a6) {\(u\)};
+
+ \vertex[below=2em of a1] (b1) {\(d\)};
+ \vertex[right=1cm of b1] (b2);
+ \vertex[right=1cm of b2] (b3);
+ \vertex[right=1cm of b3] (b4) {\(\overline d\)};
+ \vertex[below=2em of a6] (b5) {\(\overline d\)};
+
+ \vertex[above=of a6] (c1) {\(\overline u\)};
+ \vertex[above=2em of c1] (c3) {\(d\)};
+ \vertex at ($(c1)!0.5!(c3) - (1cm, 0)$) (c2);
+
+ \diagram* {
+ {[edges=fermion]
+ (b1) -- (b2) -- (a2) -- (a1),
+ (b5) -- (b4) -- (b3) -- (a3) -- (a4) -- (a5) -- (a6),
+ },
+ (a2) -- [boson, edge label=\(W\)] (a3),
+ (b2) -- [boson, edge label'=\(W\)] (b3),
+
+ (c1) -- [fermion, out=180, in=-45] (c2) -- [fermion, out=45, in=180] (c3),
+ (a5) -- [boson, bend left, edge label=\(W^{-}\)] (c2),
+ };
+
+ \draw [decoration={brace}, decorate] (b1.south west) -- (a1.north west)
+ node [pos=0.5, left] {\(B^{0}\)};
+ \draw [decoration={brace}, decorate] (c3.north east) -- (c1.south east)
+ node [pos=0.5, right] {\(\pi^{-}\)};
+ \draw [decoration={brace}, decorate] (a6.north east) -- (b5.south east)
+ node [pos=0.5, right] {\(\pi^{+}\)};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\newpage
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \begin{feynman}
+ \vertex (a1) {\(\overline b\)};
+ \vertex[right=2cm of a1] (a2);
+ \vertex[right=0.5cm of a2] (a3);
+ \vertex[right=0.5cm of a3] (a4);
+ \vertex[right=2cm of a4] (a5) {\(\overline s\)};
+
+ \vertex[below=2cm of a1] (b1) {\(d\)};
+ \vertex[below=2cm of a5] (b2) {\(d\)};
+
+ \vertex[below=1.5em of a5] (c1) {\(s\)};
+ \vertex[above=1.5em of b2] (c3) {\(\overline s\)};
+ \vertex at ($(c1)!0.5!(c3) - (1cm, 0)$) (c2);
+
+ \diagram* {
+ {[edges=fermion]
+ (a5) -- (a4) -- (a3) -- (a2) -- (a1),
+ },
+ (b1) -- [fermion] (b2),
+ (c3) -- [fermion, out=180, in=-60] (c2) -- [fermion, out=60, in=180] (c1),
+ (a3) -- [gluon, bend right] (c2),
+ (a4) -- [boson, out=90, in=90, looseness=2.0, edge label'=\(W^{+}\)] (a2)
+ };
+
+ \draw [decoration={brace}, decorate] (b1.south west) -- (a1.north west)
+ node [pos=0.5, left] {\(B^{0}\)};
+ \draw [decoration={brace}, decorate] (a5.north east) -- (c1.south east)
+ node [pos=0.5, right] {\(\phi\)};
+ \draw [decoration={brace}, decorate] (c3.north east) -- (b2.south east)
+ node [pos=0.5, right] {\(K^{0}\)};
+ \end{feynman}
+\end{tikzpicture}
+\end{codeexample}
+
+\end{description}
+
+%% Index
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\printindex
+
+%% Bibliography (and acknowledgements)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\pagestyle{plain}
+
+\ifarxiv
+\acknowledgements
+\fi
+
+\printbibliography
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-feynman/tikzfeynman.keys.code.tex b/graphics/pgf/contrib/tikz-feynman/tikzfeynman.keys.code.tex
new file mode 100644
index 0000000000..14e5f9315e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/tikzfeynman.keys.code.tex
@@ -0,0 +1,815 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-Feynman
+% Feynman Diagrams with TikZ
+% Copyright (C) 2015 Joshua Ellis
+%
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX
+% Project Public License, either version 1.3 of this license or (at your option)
+% any later version.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Joshua Ellis.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the LaTeX Project Public License for more
+% details.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Shapes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Crossed Circle
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfdeclareshape{crossed circle}
+{
+ \inheritsavedanchors[from=circle]
+ \inheritanchorborder[from=circle]
+ \inheritanchor[from=circle]{north}
+ \inheritanchor[from=circle]{north west}
+ \inheritanchor[from=circle]{north east}
+ \inheritanchor[from=circle]{center}
+ \inheritanchor[from=circle]{west}
+ \inheritanchor[from=circle]{east}
+ \inheritanchor[from=circle]{mid}
+ \inheritanchor[from=circle]{mid west}
+ \inheritanchor[from=circle]{mid east}
+ \inheritanchor[from=circle]{base}
+ \inheritanchor[from=circle]{base west}
+ \inheritanchor[from=circle]{base east}
+ \inheritanchor[from=circle]{south}
+ \inheritanchor[from=circle]{south west}
+ \inheritanchor[from=circle]{south east}
+
+ \inheritbackgroundpath[from=circle]
+
+ \foregroundpath{
+ % Compute south west
+ \centerpoint
+ \pgf@xc=\radius
+ \advance\pgf@x by-0.707107\pgf@xc
+ \advance\pgf@y by-0.707107\pgf@xc
+ \pgf@xa=\pgf@x \pgf@ya=\pgf@y % Store coordinates
+ % Compute north east point
+ \centerpoint
+ \pgf@xc=\radius
+ \advance\pgf@x by0.707107\pgf@xc
+ \advance\pgf@y by0.707107\pgf@xc
+ \pgf@xb=\pgf@x \pgf@yb=\pgf@y % Store coordinates
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
+ \pgfsetarrowsstart{}
+ \pgfsetarrowsend{}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Decorations
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Complete Sines
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Complete sines replaces the path with a whole number of sine waves.
+%% Thanks to http://tex.stackexchange.com/a/134516/26980
+\pgfdeclaredecoration{complete sines}{initial}
+{
+ %% Begin by computing the overall path length and find how many sine waves we
+ %% can fit in. Nothing happens beyond the computation.
+ \state{initial}[
+ width=+0pt,
+ next state=move,
+ persistent precomputation={
+ \def\tikzfeynman@cs@angle@step{30}
+ \def\tikzfeynman@cs@current@angle{0}
+ \pgfmathsetlengthmacro{\tikzfeynman@cs@points@per@step}{
+ \pgfdecoratedinputsegmentlength
+ / int(\pgfdecoratedinputsegmentlength
+ / \pgfdecorationsegmentlength)
+ / 360
+ * \tikzfeynman@cs@angle@step}
+ },
+ ]{}
+ %% Move to the origin to the path
+ \state{move}[
+ width=+\tikzfeynman@cs@points@per@step,
+ next state=draw
+ ]{
+ \pgfpathmoveto{\pgfpointorigin}
+ }
+ %% Draw the sine wave itself. This computes the value every 20 degrees and draws straight edges.
+ \state{draw}[
+ width=+\tikzfeynman@cs@points@per@step,
+ switch if less than=1.25*\tikzfeynman@cs@points@per@step to final, % <- bit of a hack
+ persistent postcomputation={
+ \pgfmathparse{mod(\tikzfeynman@cs@current@angle+\tikzfeynman@cs@angle@step, 360)}
+ \let\tikzfeynman@cs@current@angle=\pgfmathresult%
+ },
+ ]{
+ \pgfmathparse{sin(\tikzfeynman@cs@current@angle) * \pgfmetadecorationsegmentamplitude / 2}
+ \tikz@decoratepathfalse
+ \pgfpathlineto{\pgfqpoint{0pt}{\pgfmathresult pt}}%
+ }
+
+ \state{final}{
+ \ifdim\pgfdecoratedremainingdistance>0pt\relax
+ \pgfpathlineto{\pgfpointdecoratedpathlast}
+ \fi
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Keys
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\tikzfeynmanset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Hooks
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ execute at begin feynman/.code={},
+ execute at end feynman/.code={},
+ every feynman/.style={/tikzfeynman/every feynman@@/.append style={#1}},
+ every feynman@@/.style={
+ /tikzfeynman/.cd,
+ /tikzfeynman/medium,
+ },
+ execute at begin feynman@@/.code={} %% Internal version
+ execute at end feynman@@/.code={}, %% Internal version
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Diagrams
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ every diagram/.style={/tikzfeynman/every diagram@@/.append style={#1}},
+ every diagram@@/.style={
+ /tikzfeynman/.cd,
+ .search also={/tikz/graphs, /tikz},
+ nodes={
+ /tikzfeynman/.cd,
+ /tikzfeynman/.search also={/tikz/graphs, /tikz},
+ /tikzfeynman/every vertex@@,
+ /tikzfeynman/every vertex},
+ edges={
+ /tikzfeynman/.cd,
+ /tikzfeynman/.search also={/tikz/graphs, /tikz},
+ /tikzfeynman/every edge@@,
+ /tikzfeynman/every edge},
+ /tikzfeynman/medium,
+ },
+ every inline/.style={/tikzfeynman/inline@@/.append style={#1}},
+ every inline@@/.style={
+ /tikzfeynman/small,
+ },
+ inline/.style={
+ /tikz/baseline={#1},
+ /tikzfeynman/every inline@@,
+ },
+ every small/.style={/tikzfeynman/small@@/.append style={#1}},
+ every small@@/.style={
+ /tikz/node distance=1cm,
+ /graph drawing/node distance=1.25cm,
+ /graph drawing/level distance=1cm,
+ /graph drawing/sibling distance=1.5cm,
+ /tikzfeynman/every dot@@/.append style={/tikz/minimum size=1mm},
+ /tikzfeynman/every crossed dot@@/.append style={/tikz/minimum size=2mm},
+ /tikzfeynman/every blob@@/.append style={/tikz/minimum size=0.5cm},
+ /tikzfeynman/arrow size=1.2pt,
+ /tikzfeynman/insertion/size=2.5pt,
+ },
+ small/.style={/tikzfeynman/every small@@},
+ every medium/.style={/tikzfeynman/medium@@/.append style={#1}},
+ every medium@@/.style={
+ /tikz/node distance=1.5cm,
+ /graph drawing/node distance=1.9cm,
+ /graph drawing/level distance=1.5cm,
+ /graph drawing/sibling distance=2.25cm,
+ },
+ medium/.style={/tikzfeynman/every medium@@},
+ every large/.style={/tikzfeynman/large@@/.append style={#1}},
+ every large@@/.style={
+ /tikz/node distance=2cm,
+ /graph drawing/node distance=2.5cm,
+ /graph drawing/level distance=2cm,
+ /graph drawing/sibling distance=3cm,
+ /tikz/graphs/edges={thick},
+ /tikzfeynman/every dot@@/.append style={/tikz/minimum size=2mm},
+ /tikzfeynman/every crossed dot@@/.append style={/tikz/minimum size=4mm},
+ /tikzfeynman/every blob@@/.append style={/tikz/minimum size=1cm},
+ /tikzfeynman/arrow size=1.6pt,
+ /tikzfeynman/insertion/size=4pt,
+ },
+ large/.style={/tikzfeynman/every large@@},
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Vertices
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ every vertex@@/.style={
+ /tikz/shape=coordinate,
+ },
+ every vertex/.style={/tikzfeynman/every vertex@@/.append style={#1}},
+ vertex/.style={
+ /tikzfeynman/every vertex@@,
+ },
+ every dot@@/.style={
+ /tikz/shape=circle,
+ /tikz/graphs/as={},
+ /tikz/draw,
+ /tikz/fill,
+ /tikz/inner sep=0pt,
+ /tikz/outer sep=0pt,
+ /tikz/minimum size=1.5mm,
+ },
+ every dot/.style={/tikzfeynman/every dot@@/.append style={#1}},
+ dot/.style={
+ /tikzfeynman/every dot@@,
+ },
+ every square dot@@/.style={
+ /tikz/shape=rectangle,
+ },
+ every square dot/.style={/tikzfeynman/every square dot@@/.append style={#1}},
+ square dot/.style={
+ /tikzfeynman/every dot@@,
+ /tikzfeynman/every square dot@@,
+ },
+ every empty dot@@/.style={
+ /tikz/fill=none,
+ },
+ every empty dot/.style={/tikzfeynman/every empty dot@@/.append style={#1}},
+ empty dot/.style={
+ /tikzfeynman/every dot@@,
+ /tikzfeynman/every empty dot@@,
+ },
+ every crossed dot@@/.style={
+ /tikz/fill=none,
+ /tikz/shape=crossed circle,
+ /tikz/minimum size=3mm,
+ },
+ every crossed dot/.style={/tikzfeynman/every crossed dot@@/.append style={#1}},
+ crossed dot/.style={
+ /tikzfeynman/every dot@@,
+ /tikzfeynman/every crossed dot@@,
+ },
+ every blob@@/.style={
+ /tikz/shape=circle,
+ /tikz/graphs/as={},
+ /tikz/draw,
+ /tikz/fill=none,
+ /tikz/outer sep=0.5\pgflinewidth,
+ /tikz/inner sep=0pt,
+ /tikz/minimum size=0.75cm,
+ /tikz/pattern=north west lines,
+ },
+ every blob/.style={/tikzfeynman/every blob@@/.append style={#1}},
+ blob/.style={
+ /tikzfeynman/every blob@@,
+ },
+ every particle@@/.style={
+ /tikz/shape=rectangle,
+ /tikz/draw=none,
+ /tikz/fill=none,
+ /tikz/inner sep=0.3333em,
+ /tikz/outer sep=0.5\pgflinewidth,
+ },
+ every particle/.style={/tikzfeynman/every particle@@/.append style={#1}},
+ particle/.style args={#1}{
+ /tikzfeynman/every particle@@,
+ /tikz/graphs/as={#1},
+ },
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Edge styles
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Arrow Style
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ arrow size/.store in=\tikzfeynman@arrow@size,
+ arrow size=1.5pt,
+ with arrow/.style={
+ /tikz/decoration={
+ markings,
+ mark=at position #1 with {
+ \node[
+ transform shape,
+ xshift=-0.5mm,
+ fill,
+ inner sep=\tikzfeynman@arrow@size,
+ draw=none,
+ isosceles triangle
+ ] { };
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ with reversed arrow/.style={
+ /tikz/decoration={
+ markings,
+ mark=at position #1 with {
+ \node[
+ transform shape,
+ xshift=-0.5mm,
+ rotate=180,
+ fill,
+ inner sep=\tikzfeynman@arrow@size,
+ draw=none,
+ isosceles triangle
+ ] { };
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ %% Base Edge Styles
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ every edge@@/.style={},
+ every edge/.style={/tikzfeynman/every edge@@/.append style={#1}},
+ %% Specific Styles
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ every plain@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw
+ },
+ },
+ every plain/.style={/tikzfeynman/every plain@@/.append style={#1}},
+ plain/.style={
+ /tikzfeynman/every plain@@,
+ },
+ every boson@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/decoration={
+ complete sines,
+ amplitude=1mm,
+ segment length=2mm,
+ },
+ /tikz/decorate=true,
+ },
+ },
+ every boson/.style={/tikzfeynman/every boson@@/.append style={#1}},
+ boson/.style={
+ /tikzfeynman/every boson@@,
+ },
+ every charged boson@@/.style={
+ /tikzfeynman/with arrow=0.5,
+ },
+ every charged boson/.style={/tikzfeynman/every charged boson@@/.append style={#1}},
+ charged boson/.style={
+ /tikzfeynman/boson,
+ /tikzfeynman/every charged boson@@,
+ },
+ every anti charged boson@@/.style={
+ /tikzfeynman/with reversed arrow=0.5,
+ },
+ every anti charged boson/.style={/tikzfeynman/every anti charged boson@@/.append style={#1}},
+ anti charged boson/.style={
+ /tikzfeynman/boson,
+ /tikzfeynman/every anti charged boson@@,
+ },
+ every photon@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/decoration={
+ complete sines,
+ amplitude=1mm,
+ segment length=2mm,
+ },
+ /tikz/decorate=true,
+ },
+ },
+ every photon/.style={/tikzfeynman/every photon@@/.append style={#1}},
+ photon/.style={
+ /tikzfeynman/every photon@@,
+ },
+ every scalar@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/dashed,
+ },
+ },
+ every scalar/.style={/tikzfeynman/every scalar@@/.append style={#1}},
+ scalar/.style={
+ /tikzfeynman/every scalar@@,
+ },
+ every charged scalar@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikzfeynman/with arrow=0.5,
+ },
+ },
+ every charged scalar/.style={/tikzfeynman/every charged scalar@@/.append style={#1}},
+ charged scalar/.style={
+ /tikzfeynman/scalar,
+ /tikzfeynman/every charged scalar@@,
+ },
+ every anti charged scalar@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikzfeynman/with reversed arrow=0.5,
+ },
+ },
+ every anti charged scalar/.style={/tikzfeynman/every anti charged scalar@@/.append style={#1}},
+ anti charged scalar/.style={
+ /tikzfeynman/scalar,
+ /tikzfeynman/every anti charged scalar@@,
+ },
+ every ghost@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/dotted,
+ /tikz/thick,
+ },
+ },
+ every ghost/.style={/tikzfeynman/every ghost@@/.append style={#1}},
+ ghost/.style={
+ /tikzfeynman/every ghost@@,
+ },
+ every fermion@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikzfeynman/with arrow=0.5,
+ },
+ },
+ every fermion/.style={/tikzfeynman/every fermion@@/.append style={#1}},
+ fermion/.style={
+ /tikzfeynman/every fermion@@,
+ },
+ every anti fermion@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikzfeynman/with reversed arrow=0.5,
+ },
+ },
+ every anti fermion/.style={/tikzfeynman/every anti fermion@@/.append style={#1}},
+ anti fermion/.style={
+ /tikzfeynman/every anti fermion@@,
+ },
+ every majorana@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikzfeynman/with arrow=0.33,
+ /tikzfeynman/with reversed arrow=0.73,
+ },
+ },
+ every majorana/.style={/tikzfeynman/every majorana@@/.append style={#1}},
+ majorana/.style={
+ /tikzfeynman/every majorana@@,
+ },
+ every anti majorana@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikzfeynman/with reversed arrow=0.33,
+ /tikzfeynman/with arrow=0.73,
+ },
+ },
+ every anti majorana/.style={/tikzfeynman/every anti majorana@@/.append style={#1}},
+ anti majorana/.style={
+ /tikzfeynman/every anti majorana@@,
+ },
+ every gluon@@/.style={
+ /tikz/draw=none,
+ /tikz/decoration={name=none},
+ /tikz/postaction={
+ /tikz/draw,
+ /tikz/decoration={
+ coil,
+ aspect=0.75,
+ mirror,
+ segment length=1.5mm
+ },
+ /tikz/decorate=true,
+ },
+ },
+ every gluon/.style={/tikzfeynman/every gluon@@/.append style={#1}},
+ gluon/.style={
+ /tikzfeynman/every gluon@@,
+ },
+ %% Insertions
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ insertion/.search also={/tikzfeynman,/tikz},
+ %% Parameters
+ insertion/size/.store in=\tikzfeynman@insertion@size,
+ insertion/size=3pt,
+ insertion/style/.store in=\tikzfeynman@insertion@style,
+ insertion/style={},
+ %% Styles
+ insertion@@/.style args={[#1]#2}{
+ /tikz/decoration={
+ markings,
+ mark=at position #2 with {
+ \tikzfeynmanset{insertion/.cd,#1}
+ \draw [\tikzfeynman@insertion@style] (-\tikzfeynman@insertion@size, -\tikzfeynman@insertion@size) -- (\tikzfeynman@insertion@size, \tikzfeynman@insertion@size);
+ \draw [\tikzfeynman@insertion@style] (-\tikzfeynman@insertion@size, \tikzfeynman@insertion@size) -- (\tikzfeynman@insertion@size, -\tikzfeynman@insertion@size);
+ },
+ },
+ /tikz/postaction={
+ /tikz/decorate=true,
+ },
+ },
+ insertion@@/.default={[]0.5},
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Momentum arrows
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ momentum/.search also={/tikzfeynman,/tikz},
+ %% Parameters
+ momentum/label distance/.store in=\tikzfeynman@momentum@label@distance,
+ momentum/label distance=0pt,
+ momentum/arrow distance/.store in=\tikzfeynman@momentum@arrow@distance,
+ momentum/arrow distance=3mm,
+ momentum/arrow shorten/.store in=\tikzfeynman@momentum@arrow@shorten,
+ momentum/arrow shorten=0.15,
+ momentum/label style/.store in=\tikzfeynman@momentum@label@style,
+ momentum/label style={},
+ momentum/arrow style/.store in=\tikzfeynman@momentum@arrow@style,
+ momentum/arrow style={},
+ %% Styles
+ momentum@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst)
+ .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
+ .. (\tikzinputsegmentlast)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@26)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ momentum'@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst)
+ .. controls (\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb)
+ .. (\tikzinputsegmentlast)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@26)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentfirst) -- (\tikzinputsegmentlast)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ reversed momentum@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast)
+ .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta)
+ .. (\tikzinputsegmentfirst)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@26)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@1)$)
+ node [pos=0.5, auto, swap,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ reversed momentum'@@/.style args={[#1]#2}{
+ /tikz/preaction={
+ /tikz/decoration={
+ show path construction,
+ moveto code={},
+ lineto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5,
+ auto,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ curveto code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast)
+ .. controls (\tikzinputsegmentsupportb) and (\tikzinputsegmentsupporta)
+ .. (\tikzinputsegmentfirst)
+ { \foreach \i in {1, ..., 50} {
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten + (1-2 * \tikzfeynman@momentum@arrow@shorten)*\i/50] (tf@m@\i) } };
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$)
+ foreach \i [count=\j from 3] in {2, ..., 24} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@25)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@26)$)
+ node [pos=0.5,
+ auto,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@arrow@style] {#2}
+ foreach \i [count=\j from 27] in {26, ..., 49} {
+ -- ($(tf@m@\i)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@\j)$)
+ }
+ -- ($(tf@m@50)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@49)$);
+ },
+ closepath code={
+ \tikzfeynmanset{momentum/.cd,#1}
+ \path (\tikzinputsegmentlast) -- (\tikzinputsegmentfirst)
+ coordinate [pos=\tikzfeynman@momentum@arrow@shorten] (tf@m@1)
+ coordinate [pos=1 - \tikzfeynman@momentum@arrow@shorten] (tf@m@2);
+ \draw [-Stealth, \tikzfeynman@momentum@arrow@style]
+ ($(tf@m@1)!\tikzfeynman@momentum@arrow@distance!90:(tf@m@2)$)
+ -- ($(tf@m@2)!\tikzfeynman@momentum@arrow@distance!-90:(tf@m@1)$)
+ node [pos=0.5, auto,
+ outer sep=\tikzfeynman@momentum@label@distance,
+ \tikzfeynman@momentum@label@style] {#2};
+ },
+ },
+ /tikz/decorate=true,
+ },
+ },
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %% Modifiers
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ half left/.style={
+ /tikz/bend left=90,
+ /tikz/looseness=1.5,
+ },
+ half right/.style={
+ /tikz/bend right=90,
+ /tikz/looseness=1.5,
+ },
+ quarter left/.style={
+ /tikz/bend left=45,
+ },
+ quarter right/.style={
+ /tikz/bend right=45,
+ },
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Graceful Failure of LuaTeX keys
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@luatex@required@path{
+ \PackageWarning{tikz-feynman}{The key you tried to use '\pgfkeyscurrentpath/\pgfkeyscurrentname' requires LuaTeX. It will be ignored.}
+}
+\def\tikzfeynman@luatex@required@key{
+ \PackageWarning{tikz-feynman}{The key you tried to use '\pgfkeyscurrentpath' requires LuaTeX. It will be ignored.}
+}
+
+\ifluatex\else
+ \pgfkeys{
+ /graph drawing/.unknown/.code=\tikzfeynman@luatex@required@path,
+ /tikz/graphs/.unknown/.code=\tikzfeynman@luatex@required@path,
+ /tikz/horizontal/.code=\tikzfeynman@luatex@required@key,
+ /tikz/horizontal'/.code=\tikzfeynman@luatex@required@key,
+ /tikz/vertical/.code=\tikzfeynman@luatex@required@key,
+ /tikz/vertical'/.code=\tikzfeynman@luatex@required@key,
+ /tikz/tree layout/.code=\tikzfeynman@luatex@required@key,
+ /tikz/spring layout/.code=\tikzfeynman@luatex@required@key,
+ /tikz/layered layout/.code=\tikzfeynman@luatex@required@key,
+ /tikz/spring electrical layout/.code=\tikzfeynman@luatex@required@key,
+ /tikz/electric charge/.code=\tikzfeynman@luatex@required@key,
+ }
+ % \tikzfeynmanset{
+ % horizontal/.code={The key 'horizontal' requires LuaTeX. It will be ignored.},
+ % }
+\fi
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.0.lua b/graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.0.lua
new file mode 100644
index 0000000000..54f0da080e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.0.lua
@@ -0,0 +1,1005 @@
+-- This patched version of the createVertex function simply ensures that the
+-- path is never empty. This works fine for TikZ version 3.0.0.
+--
+-- Later versions (should) have a more thorough patch by Till which is
+-- incompatible with this override unfortunately.
+--
+-- #############################################################################
+--
+-- Copyright 2012 by Till Tantau
+--
+-- This file may be distributed an/or modified
+--
+-- 1. under the LaTeX Project Public License and/or
+-- 2. under the GNU Public License
+--
+-- See the file doc/generic/pgf/licenses/LICENSE for more information
+
+-- @release $Header: /cvsroot/pgf/pgf/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToDisplay.lua,v 1.12 2013/12/20 14:44:46 tantau Exp $
+
+
+
+---
+-- This class provides the interface between a display
+-- layer (like \tikzname\ or a graph editor) and graph drawing
+-- system. Another class, |InterfaceToAlgorithms|, binds the algorithm
+-- layer (which are written in Lua) to the graph drawing system.
+--
+-- The functions declared here are independent of the actual display
+-- layer. Rather, the differences between the layers are encapsulated
+-- by subclasses of the |Binding| class, see that class for
+-- details. Thus, when a new display layer is written, the present
+-- class is \emph{used}, but not \emph{modified}. Instead, only a new
+-- binding is created and all display layer specific interaction is
+-- put there.
+--
+-- The job of this class is to provide convenient methods that can be
+-- called by the display layer. For instance, it provides methods for
+-- starting a graph drawing scope, managing the stack of such scope,
+-- adding a node to a graph and so on.
+
+local InterfaceToDisplay = {}
+
+-- Namespace
+require("pgf.gd.interface").InterfaceToDisplay = InterfaceToDisplay
+
+
+-- Imports
+local InterfaceCore = require "pgf.gd.interface.InterfaceCore"
+local Scope = require "pgf.gd.interface.Scope"
+
+local Binding = require "pgf.gd.bindings.Binding"
+
+local Sublayouts = require "pgf.gd.control.Sublayouts"
+local LayoutPipeline = require "pgf.gd.control.LayoutPipeline"
+
+local Digraph = require "pgf.gd.model.Digraph"
+local Vertex = require "pgf.gd.model.Vertex"
+local Edge = require "pgf.gd.model.Edge"
+local Collection = require "pgf.gd.model.Collection"
+
+local Storage = require "pgf.gd.lib.Storage"
+local LookupTable = require "pgf.gd.lib.LookupTable"
+local Event = require "pgf.gd.lib.Event"
+
+local lib = require "pgf.gd.lib"
+
+
+-- Forward declarations
+local get_current_options_table
+local render_collections
+local push_on_option_stack
+local vertex_created
+
+-- Local objects
+
+local phase_unique = {} -- a unique handle
+local collections_unique = {} -- a unique handle
+local option_cache = nil -- The option cache
+
+
+
+
+---
+-- Initiliaze the binding. This function is called once by the display
+-- layer at the very beginning. For instance, \tikzname\ does the
+-- following call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--InterfaceToDisplay.bind(require "pgf.gd.bindings.BindingToPGF")
+--\end{codeexample}
+--
+-- Inside this call, many standard declarations will be executed, that
+-- is, the declared binding will be used immediately.
+--
+-- Subsequently, the |binding| field of the |InterfaceCore| can be used.
+--
+-- @param class A subclass of |Binding|.
+
+function InterfaceToDisplay.bind(class)
+ assert (not InterfaceCore.binding, "binding already initialized")
+
+ -- Create a new object
+ InterfaceCore.binding = setmetatable({}, class)
+
+ -- Load these libraries, which contain many standard declarations:
+ require "pgf.gd.model.library"
+ require "pgf.gd.control.library"
+end
+
+
+
+
+---
+-- Start a graph drawing scope. Note that this is not the same as
+-- starting a subgraph / sublayout, which are local to a graph drawing
+-- scope: When a new graph drawing scope is started, it is pushed on
+-- top of a stack of graph drawing scopes and all other ``open''
+-- scopes are no longer directly accessible. All method calls to an
+-- |Interface...| object will refer to this newly created scope until
+-- either a new scope is opened or until the current scope is closed
+-- once more.
+--
+-- Each graph drawing scope comes with a syntactic digraph that is
+-- build using methods like |addVertex| or |addEdge|.
+--
+-- @param height The to-be-used height of the options stack. All
+-- options above this height will be popped prior to attacking the
+-- options to the syntactic digraph.
+
+function InterfaceToDisplay.beginGraphDrawingScope(height)
+
+ -- Create a new scope table
+ local scope = Scope.new {}
+
+ -- Setup syntactic digraph:
+ local g = scope.syntactic_digraph
+
+ g.options = get_current_options_table(height)
+ g.syntactic_digraph = g
+ g.scope = scope
+
+ -- Push scope:
+ InterfaceCore.scopes[#InterfaceCore.scopes + 1] = scope
+end
+
+
+
+---
+-- Arranges the current graph using the specified algorithm and options.
+--
+-- This function should be called after the graph drawing scope has
+-- been opened and the syntactic digraph has been completely
+-- specified. It will now start running the algorithm specified
+-- through the |algorithm_phase| options.
+--
+-- Internally, this function creates a coroutine that will run the current graph
+-- drawing algorithm. Coroutines are needed since a graph drawing
+-- algorithm may choose to create a new node. In this case, the
+-- algorithm needs to be suspended and control must be returned back
+-- to the display layer, so that the node can be typeset in order to
+-- determine the precise size information. Once this is done, control
+-- must be passed back to the exact point inside the algorithm where
+-- the node was created. Clearly, all of these actions are exactly
+-- what coroutines are for.
+--
+-- @return Time it took to run the algorithm
+
+function InterfaceToDisplay.runGraphDrawingAlgorithm()
+
+ -- Time things
+ local start = os.clock()
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ assert(not scope.coroutine, "coroutine already created for current gd scope")
+
+ -- The actual drawing function
+ local function run ()
+ if #scope.syntactic_digraph.vertices == 0 then
+ -- Nothing needs to be done
+ return
+ end
+
+ LayoutPipeline.run(scope)
+ end
+
+ scope.coroutine = coroutine.create(run)
+
+ -- Run it:
+ InterfaceToDisplay.resumeGraphDrawingCoroutine()
+
+ -- End timing:
+ local stop = os.clock()
+
+ return stop - start
+end
+
+
+---
+-- Resume the graph drawing coroutine.
+--
+-- This function is the work horse of the coroutine management. It
+-- gets called whenever control passes back from the display layer to
+-- the algorithm level. We resume the graph drawing coroutine so that the
+-- algorithm can start/proceed. The tricky part is when the algorithm
+-- yields, but is not done. In this case, the code needed for creating
+-- a new node is passed back to the display layer through the binding,
+-- which must then execute the code and then resuming the coroutine.
+--
+function InterfaceToDisplay.resumeGraphDrawingCoroutine()
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Asserts
+ assert(scope.coroutine, "coroutine not created for current gd scope")
+
+ -- Run
+ local ok, text = coroutine.resume(scope.coroutine)
+ assert(ok, text)
+ if coroutine.status(scope.coroutine) ~= "dead" then
+ -- Ok, ask binding to continue
+ binding:resumeGraphDrawingCoroutine(text)
+ end
+end
+
+
+
+--- Ends the current graph drawing scope.
+--
+function InterfaceToDisplay.endGraphDrawingScope()
+ assert(#InterfaceCore.scopes > 0, "no gd scope open")
+ InterfaceCore.scopes[#InterfaceCore.scopes] = nil -- pop
+end
+
+
+
+
+---
+-- Creates a new vertex in the syntactic graph of the current graph
+-- drawing scope. The display layer should call this function for each
+-- node of the graph. The |name| must be a unique string identifying
+-- the node. The newly created vertex will be added to the syntactic
+-- digraph. The binding function |everyVertexCreation| will then be
+-- called, allowing the binding to store information regarding the newly
+-- created vertex.
+--
+-- For each vertex an event will be created in the event
+-- sequence. This event will have the kind |"node"| and its
+-- |parameter| will be the vertex.
+--
+-- @param name Name of the vertex.
+--
+-- @param shape The shape of the vertex such as |"circle"| or
+-- |"rectangle"|. This shape may help a graph drawing algorithm
+-- figuring out how the node should be placed.
+--
+-- @param path A |Path| object representing the vertex's path.
+--
+-- @param height The to-be-used height of the options stack. All
+-- options above this height will be popped prior to attacking the
+-- options to the syntactic digraph.
+--
+-- @param binding_infos These options are passed to and are specific
+-- to the current |Binding|.
+--
+-- @param anchors A table of anchors (mapping anchor positions to
+-- |Coordinates|).
+
+
+function InterfaceToDisplay.createVertex(name, shape, path, height, binding_infos, anchors)
+
+ -- The path should never be empty, so we create a trivial path in the provided
+ -- path is empty. This occurs with the ‘coordinate‘ shape for example.
+ if #path == 0 then
+ path:appendMoveto(0, 0)
+ path:appendClosepath()
+ end
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Does vertex already exist?
+ local v = scope.node_names[name]
+ assert (not v or not v.created_on_display_layer, "node already created")
+
+ -- Create vertex
+ if not v then
+ v = Vertex.new {
+ name = name,
+ shape = shape,
+ kind = "node",
+ path = path,
+ options = get_current_options_table(height),
+ anchors = anchors,
+ }
+
+ vertex_created(v,scope)
+ else
+ assert(v.kind == "subgraph node", "subgraph node expected")
+ v.shape = shape
+ v.path = path
+ v.anchors = anchors
+ end
+
+ v.created_on_display_layer = true
+
+ -- Call binding
+ binding.storage[v] = binding_infos
+ binding:everyVertexCreation(v)
+end
+
+
+-- This is a helper function
+function vertex_created(v,scope)
+
+ -- Create Event
+ local e = InterfaceToDisplay.createEvent ("node", v)
+ v.event = e
+
+ -- Create name lookup
+ scope.node_names[v.name] = v
+
+ -- Add vertex to graph
+ scope.syntactic_digraph:add {v}
+
+ -- Add to collections
+ for _,c in ipairs(v.options.collections) do
+ LookupTable.addOne(c.vertices, v)
+ end
+
+end
+
+
+
+---
+-- Creates a new vertex in the syntactic graph of the current graph
+-- drawing scope that is a subgraph vertex. Such a vertex
+-- ``surrounds'' the vertices of a subgraph. The special property of a
+-- subgraph node opposed to a normal node is that it is created only
+-- after the subgraph has been laid out. However, the difference to a
+-- collection like |hyper| is that the node is availble immediately as
+-- a normal node in the sense that you can connect edges to it.
+--
+-- What happens internally is that subgraph nodes get ``registered''
+-- immediately both on the display level and on the algorithm level,
+-- but the actual node is only created inside the layout pipeline
+-- using a callback of the binding. The present function is used to
+-- perform this registering. The node creation happens when the
+-- innermost layout in which the subgraph node is declared has
+-- finished. For each subgraph node, a collection is created that
+-- contains all vertices (and edges) being part of the subgraph. For
+-- this reason, this method is a |push...| method, since it pushes
+-- something on the options stack.
+--
+-- The |init| parameter will be used during the creation of the node,
+-- see |Binding:createVertex| for details on the fields. Note that
+-- |init.text| is often not displayed for such ``vast'' nodes as those
+-- created for whole subgraphs, but a shape may use it nevertheless
+-- (for instance, one might display this text at the top of the node
+-- or, in case of a \textsc{uml} package, in a special box above the
+-- actual node).
+--
+-- The |init.generated_options| will be augmented by additional
+-- key--value pairs when the vertex is created:
+--
+-- \begin{itemize}
+-- \item The key |subgraph point cloud| will have as its value a
+-- string that is be a list of points (without
+-- separating commas) like |"(10pt,20pt)(0pt,0pt)(30pt,40pt)"|, always in
+-- this syntax. The list will contain all points inside the
+-- subgraph. In particular, a bounding box around these points will
+-- encompass all nodes and bend points of the subgraph.
+-- The bounding box of this point cloud is guaranteed to be centered on
+-- the origin.
+-- \item The key |subgraph bounding box width| will have as its value
+-- the width of a bounding box (in \TeX\ points, as a string with the
+-- suffix |"pt"|).
+-- \item The key |subgraph bounding box height| stores the height of a
+-- bounding box.
+-- \end{itemize}
+--
+-- @param name The name of the node.
+-- @param height Height of the options stack. Note that this method
+-- pushes something (namely a collection) on the options stack.
+-- @param info A table passed to |Binding:createVertex|, see that function.
+--
+function InterfaceToDisplay.pushSubgraphVertex(name, height, info)
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Does vertex already exist?
+ assert (not scope.node_names[name], "node already created")
+
+ -- Create vertex
+ local v = Vertex.new {
+ name = name,
+ kind = "subgraph node",
+ options = get_current_options_table(height-1)
+ }
+
+ vertex_created(v,scope)
+
+ -- Store info
+ info.generated_options = info.generated_options or {}
+ info.name = name
+ v.subgraph_info = info
+
+ -- Create collection and link it to v
+ local _, _, entry = InterfaceToDisplay.pushOption(InterfaceCore.subgraph_node_kind, nil, height)
+ v.subgraph_collection = entry.value
+ v.subgraph_collection.subgraph_node = v
+
+ -- Find parent collection in options stack:
+ local collections = v.options.collections
+ for i=#collections,1,-1 do
+ if collections[i].kind == InterfaceCore.sublayout_kind then
+ v.subgraph_collection.parent_layout = collections[i]
+ break
+ end
+ end
+end
+
+
+
+---
+-- Add options for an already existing vertex.
+--
+-- This function allows you to add options to an already existing
+-- vertex. The options that will be added are all options on the
+-- current options stack; they will overwrite existing options of the
+-- same name. For collections, the vertex stays in all collections it
+-- used to, it is only added to all collections that are currently on
+-- the options stack.
+--
+-- @param name Name of the vertex.
+-- @param height The option stack height.
+
+function InterfaceToDisplay.addToVertexOptions(name, height)
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+
+ -- Does vertex already exist?
+ local v = assert (scope.node_names[name], "node is missing, cannot add options")
+
+ v.options = get_current_options_table(height, v.options)
+
+ -- Add to collections
+ for _,c in ipairs(v.options.collections) do
+ LookupTable.addOne(c.vertices, v)
+ end
+
+end
+
+
+
+
+
+---
+-- Creates a new edge in the syntactic graph of the current graph
+-- drawing scope. The display layer should call this function for each
+-- edge that is created. Both the |from| vertex and the |to| vertex
+-- must exist (have been created through |createVertex|) prior to your
+-- being able to call this function.
+--
+-- After the edge has been created, the binding layer's function
+-- |everyEdgeCreation| will be called, allowing the binding layer to
+-- store information about the edge.
+--
+-- For each edge an event is created, whose kind is |"edge"| and whose
+-- |parameter| is a two-element array whose first entry is the edge's
+-- arc in the syntactic digraph and whose second entry is the position
+-- of the edge in the arc's array of syntactic edges.
+--
+-- @param tail Name of the node the edge begins at.
+-- @param head Name of the node the edge ends at.
+-- @param direction Direction of the edge (e.g. |--| for an undirected edge
+-- or |->| for a directed edge from the first to the second
+-- node).
+-- @param height The option stack height, see for instance |createVertex|.
+--
+-- @param binding_infos These options will be stored in the |storage|
+-- of the vertex at the field index by the binding.
+
+function InterfaceToDisplay.createEdge(tail, head, direction, height, binding_infos)
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Does vertex already exist?
+ local h = scope.node_names[head]
+ local t = scope.node_names[tail]
+ assert (h and t, "attempting to create edge between nodes that are not in the graph")
+
+ -- Create Arc object
+ local arc = scope.syntactic_digraph:connect(t, h)
+
+ -- Create Edge object
+ local edge = Edge.new {
+ head = h,
+ tail = t,
+ direction = direction,
+ options = get_current_options_table(height)
+ }
+
+ -- Add to arc
+ arc.syntactic_edges[#arc.syntactic_edges+1] = edge
+
+ -- Create Event
+ local e = InterfaceToDisplay.createEvent ("edge", { arc, #arc.syntactic_edges })
+ edge.event = e
+
+ -- Make part of collections
+ for _,c in ipairs(edge.options.collections) do
+ LookupTable.addOne(c.edges, edge)
+ end
+
+ -- Call binding
+ binding.storage[edge] = binding_infos
+ binding:everyEdgeCreation(edge)
+
+end
+
+
+
+
+
+---
+-- Push an option to the stack of options.
+--
+-- As a graph is parsed, a stack of ``current options''
+-- is created. To add something to this table, the display layers may
+-- call the method |pushOption|. To pop something from this stack,
+-- just set the |height| value during the next push to the position to
+-- which you actually wish to push something; everything above and
+-- including this position will be popped from the stack.
+--
+-- When an option is pushed, several additional options may also be
+-- pushed, namely whenever the option has a |use| field set. These
+-- additional options may, in turn, also push new options. Because of
+-- this, this function returns a new stack height, representing the
+-- resulting stack height.
+--
+-- In addition to this stack height, this function returns a Boolean
+-- value indicating whether a ``main algorithm phase was set.'' This
+-- happens whenever a key is executed (directly or indirectly through
+-- the |use| field) that selects an algorithm for the ``main''
+-- algorithm phase. This information may help the caller to setup the
+-- graph drawing scopes correctly.
+--
+-- @param key A parameter (must be a string).
+-- @param value A value (can be anything). If it is a string, it will
+-- be converted to whatever the key expects.
+-- @param height A stack height at which to insert the key. Everything
+-- above this height will be removed.
+--
+-- @return A new stack height
+-- @return A Boolean that is |true| iff the main algorithm phase was
+-- set by the option or one option |use|d by it.
+-- @return The newly created entry on the stack. If more entries are
+-- created through the use of the |use| field, the original entry is
+-- returned nevertheless.
+
+
+function InterfaceToDisplay.pushOption(key, value, height)
+ assert(type(key) == "string", "illegal key")
+
+ local key_record = assert(InterfaceCore.keys[key], "unknown key")
+ local main_phase_set = false
+
+ if value == nil and key_record.default then
+ value = key_record.default
+ end
+
+ -- Find out what kind of key we are pushing:
+
+ if key_record.algorithm then
+ -- Push a phase
+ if type(InterfaceCore.algorithm_classes[key]) == "function" then
+ -- Call the constructor function
+ InterfaceCore.algorithm_classes[key] = InterfaceCore.algorithm_classes[key]()
+ end
+
+ local algorithm = InterfaceCore.algorithm_classes[key]
+
+ assert (algorithm, "algorithm class not found")
+
+ push_on_option_stack(phase_unique,
+ { phase = key_record.phase, algorithm = algorithm },
+ height)
+
+ if key_record.phase == "main" then
+ main_phase_set = true
+ end
+
+ elseif key_record.layer then
+ -- Push a collection
+ local stack = InterfaceCore.option_stack
+ local scope = InterfaceCore.topScope()
+
+ -- Get the stack above "height":
+ local options = get_current_options_table(height-1)
+
+ -- Create the collection event
+ local event = InterfaceToDisplay.createEvent ("collection", key)
+
+ -- Create collection object:
+ local collection = Collection.new { kind = key, options = options, event = event }
+
+ -- Store in collections table of current scope:
+ local collections = scope.collections[key] or {}
+ collections[#collections + 1] = collection
+ scope.collections[key] = collections
+
+ -- Build collection tree
+ collection:registerAsChildOf(options.collections[#options.collections])
+
+ -- Push on stack
+ push_on_option_stack(collections_unique, collection, height)
+
+ else
+
+ -- A normal key
+ push_on_option_stack(key, InterfaceCore.convert(value, InterfaceCore.keys[key].type), height)
+
+ end
+
+ local newly_created = InterfaceCore.option_stack[#InterfaceCore.option_stack]
+
+ -- Now, push use keys:
+ local use = key_record.use
+ if key_record.use then
+ local flag
+ for _,u in ipairs(InterfaceCore.keys[key].use) do
+ local use_k = u.key
+ local use_v = u.value
+ if type(use_k) == "function" then
+ use_k = use_k(value)
+ end
+ if type(use_v) == "function" then
+ use_v = use_v(value)
+ end
+ height, flag = InterfaceToDisplay.pushOption(use_k, use_v, height+1)
+ main_phase_set = main_phase_set or flag
+ end
+ end
+
+ return height, main_phase_set, newly_created
+end
+
+
+---
+-- Push a layout on the stack of options. As long as this layout is on
+-- the stack, all vertices and edges will be part of this layout. For
+-- details on layouts, please see |Sublayouts|.
+--
+-- @param height A stack height at which to insert the key. Everything
+-- above this height will be removed.
+
+function InterfaceToDisplay.pushLayout(height)
+ InterfaceToDisplay.pushOption(InterfaceCore.sublayout_kind, nil, height)
+end
+
+
+
+---
+-- Creates an event and adds it to the event string of the current scope.
+--
+-- @param kind Name/kind of the event.
+-- @param parameters Parameters of the event.
+--
+-- @return The newly pushed event
+--
+function InterfaceToDisplay.createEvent(kind, param)
+ local scope = InterfaceCore.topScope()
+ local n = #scope.events + 1
+ local e = Event.new { kind = kind, parameters = param, index = n }
+ scope.events[n] = e
+
+ return e
+end
+
+
+
+---
+-- This method allows you to query the table of all declared keys. It
+-- contains them both as an array and also as a table index by the
+-- keys's names. In particular, you can then iterate over it using
+-- |ipairs| and you can check whether a key is defined by accessing
+-- the table at the key's name. Each entry of the table is the
+-- original table passed to |InterfaceToAlgorithms.declare|.
+--
+-- @return A lookup table of all declared keys.
+
+function InterfaceToDisplay.getDeclaredKeys()
+ return InterfaceCore.keys
+end
+
+
+
+
+---
+-- Renders the graph.
+--
+-- This function is called after the graph has been laid out by the
+-- graph drawing algorithms. It will trigger a sequence of calls to
+-- the binding layer that will, via callbacks, start rendering the
+-- whole graph.
+--
+-- In detail, this function calls:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--local binding = InterfaceCore.binding
+--
+--binding:renderStart()
+--render_vertices()
+--render_edges()
+--render_collections()
+--binding:renderStop()
+--\end{codeexample}
+--
+-- Here, the |render_...| functions are local, internal functions that are,
+-- nevertheless, documented here.
+--
+-- @param name Returns the algorithm class that has been declared using
+-- |declare| under the given name.
+
+function InterfaceToDisplay.renderGraph()
+ local scope = InterfaceCore.topScope()
+ local syntactic_digraph = scope.syntactic_digraph
+
+ local binding = InterfaceCore.binding
+
+ binding:renderStart()
+ render_vertices(syntactic_digraph.vertices)
+ render_edges(syntactic_digraph.arcs)
+ render_collections(scope.collections)
+ binding:renderStop()
+end
+
+
+
+
+
+---
+-- Render the vertices after the graph drawing algorithm has
+-- finished. This function is local and internal and included only for
+-- documenting the call graph.
+--
+-- When the graph drawing algorithm is done, the interface will start
+-- rendering the vertices by calling appropriate callbacks of the
+-- binding layer.
+--
+-- Consider the following code:
+--\begin{codeexample}[code only]
+--\graph [... layout] {
+-- a -- b -- c -- d;
+--};
+--\end{codeexample}
+--
+-- In this case, after the graph drawing algorithm has run, the
+-- present function will call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--local binding = InterfaceCore.binding
+--
+--binding:renderVerticesStart()
+--binding:renderVertex(vertex_a)
+--binding:renderVertex(vertex_b)
+--binding:renderVertex(vertex_c)
+--binding:renderVertex(vertex_d)
+--binding:renderVerticesStop()
+--\end{codeexample}
+--
+-- @param vertices An array of all vertices in the syntactic digraph.
+
+function render_vertices(vertices)
+ InterfaceCore.binding:renderVerticesStart()
+ for _,vertex in ipairs(vertices) do
+ InterfaceCore.binding:renderVertex(vertex)
+ end
+ InterfaceCore.binding:renderVerticesStop()
+end
+
+
+---
+-- Render the collections whose layer is not |0|. This local, internal
+-- function is called to render the different collection kinds.
+--
+-- Collection kinds rendered in the order provided by the |layer|
+-- field passed to |declare| during the declaration of the colleciton
+-- kind, see also |declare_collection|. If several collection kinds
+-- have the same layer, they are rendered in lexicographical ordering
+-- (to ensure that they are always rendered in the same order).
+--
+-- Consider the following code:
+--\begin{codeexample}[code only, tikz syntax=false]
+--declare { key = "hyper", layer = 1 }
+--\end{codeexample}
+-- you can say on the \tikzname\ layer
+--\begin{codeexample}[code only]
+--\graph {
+-- a, b, c, d;
+-- { [hyper] a, b, c }
+-- { [hyper] b, c, d }
+--};
+--\end{codeexample}
+--
+-- In this case, after the graph drawing algorithm has run, the
+-- present function will call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--local binding = InterfaceCore.binding
+--
+--binding:renderCollectionStartKind("hyper", 1)
+--binding:renderCollection(collection_containing_abc)
+--binding:renderCollection(collection_containing_bcd)
+--binding:renderCollectionStopKind("hyper", 1)
+--\end{codeexample}
+--
+-- @param collections The |collections| table of the current scope.
+
+function render_collections(collections)
+ local kinds = InterfaceCore.collection_kinds
+ local binding = InterfaceCore.binding
+
+ for i=1,#kinds do
+ local kind = kinds[i].kind
+ local layer = kinds[i].layer
+
+ if layer ~= 0 then
+ binding:renderCollectionStartKind(kind, layer)
+ for _,c in ipairs(collections[kind] or {}) do
+ binding:renderCollection(c)
+ end
+ binding:renderCollectionStopKind(kind, layer)
+ end
+ end
+end
+
+
+---
+-- Render the syntactic edges of a graph after the graph drawing
+-- algorithm has finished. This function is local and internal and included only
+-- for documenting the call graph.
+--
+-- When the graph drawing algorithm is done, the interface will first
+-- rendering the vertices using |render_vertices|, followed by calling
+-- this function, which in turn calls appropriate callbacks to the
+-- binding layer.
+--
+-- Consider the following code:
+--\begin{codeexample}[code only]
+-- \graph [... layout] {
+-- a -- b -- c -- d;
+-- };
+--\end{codeexample}
+--
+-- In this case, after the graph drawing algorithm has run, the
+-- present function will call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+-- local binding = InterfaceCore.binding
+--
+-- binding:renderEdgesStart()
+-- binding:renderEdge(edge_from_a_to_b)
+-- binding:renderEdge(edge_from_b_to_c)
+-- binding:renderEdge(edge_from_c_to_d)
+-- binding:renderEdgesStop()
+--\end{codeexample}
+--
+-- @param arcs The array of arcs of the syntactic digraph.
+
+function render_edges(arcs)
+ InterfaceCore.binding:renderEdgesStart()
+ for _,a in ipairs(arcs) do
+ for _,e in ipairs (a.syntactic_edges) do
+ InterfaceCore.binding:renderEdge(e)
+ end
+ end
+ InterfaceCore.binding:renderEdgesStop()
+end
+
+
+local aliases = InterfaceCore.option_aliases
+local option_initial = InterfaceCore.option_initial
+
+local option_metatable = {
+ __index =
+ function (t, key)
+ local k = aliases[key]
+ if k then
+ local v = (type(k) == "string" and t[k]) or (type(k) == "function" and k(t)) or nil
+ if v ~= nil then
+ return v
+ end
+ end
+ return option_initial[key]
+ end
+}
+
+
+---
+-- Get the current options table.
+--
+-- An option table can be accessed like a normal table; however, there
+-- is a global fallback for this table. If an index is not defined,
+-- the value of this index in the global fallback table is used. (This
+-- reduces the overall amount of option keys that need to be stored
+-- with object.)
+--
+-- (This function is local and internal and included only for documentation
+-- purposes.)
+--
+-- @param height The stack height for which the option table is
+-- required.
+-- @param table If non |nil|, the options will be added to this
+-- table.
+--
+-- @return The option table as described above.
+
+function get_current_options_table (height, table)
+ local stack = InterfaceCore.option_stack
+ assert (height >= 0 and height <= #stack, "height value out of bounds")
+
+ if height == InterfaceCore.option_cache_height and not table then
+ return option_cache
+ else
+ -- Clear superfluous part of stack
+ for i=#stack,height+1,-1 do
+ stack[i] = nil
+ end
+
+ -- Build options table
+ local cache
+ if not table then
+ cache = setmetatable(
+ {
+ algorithm_phases = setmetatable({}, InterfaceCore.option_initial.algorithm_phases),
+ collections = {}
+ }, option_metatable)
+ else
+ cache = lib.copy(table)
+ cache.algorithm_phases = lib.copy(cache.algorithm_phases)
+ cache.collections = lib.copy(cache.collections)
+ end
+
+ local algorithm_phases = cache.algorithm_phases
+ local collections = cache.collections
+ local keys = InterfaceCore.keys
+
+ local function handle (k, v)
+ if k == phase_unique then
+ algorithm_phases[v.phase] = v.algorithm
+ elseif k == collections_unique then
+ LookupTable.addOne(collections, v)
+ else
+ cache[k] = v
+ end
+ end
+
+ for _,s in ipairs(stack) do
+ handle (s.key, s.value)
+ end
+
+ -- Cache it, if this was not added:
+ if not table then
+ InterfaceCore.option_cache_height = height
+ option_cache = cache
+ end
+
+ return cache
+ end
+end
+
+
+
+-- A helper function
+
+function push_on_option_stack(key, value, height)
+ local stack = InterfaceCore.option_stack
+
+ assert (type(height) == "number" and height > 0 and height <= #stack + 1,
+ "height value out of bounds")
+
+ -- Clear superfluous part of stack
+ for i=#stack,height+1,-1 do
+ stack[i] = nil
+ end
+
+ stack[height] = { key = key, value = value }
+ InterfaceCore.option_cache_height = nil -- invalidate cache
+end
+
+
+
+-- Done
+
+return InterfaceToDisplay
diff --git a/graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.1.lua b/graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.1.lua
new file mode 100644
index 0000000000..acecd80b99
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/tikzfeynman.patch.3.0.1.lua
@@ -0,0 +1,1037 @@
+-- This patched version of the createVertex function simply ensures that the
+-- path is never empty. This works fine for TikZ version 3.0.1 and 3.0.1a.
+--
+-- Later versions (should) have a more thorough patch by Till which is
+-- incompatible with this override unfortunately.
+--
+-- #############################################################################
+--
+-- Copyright 2012 by Till Tantau
+--
+-- This file may be distributed an/or modified
+--
+-- 1. under the LaTeX Project Public License and/or
+-- 2. under the GNU Public License
+--
+-- See the file doc/generic/pgf/licenses/LICENSE for more information
+
+-- @release $Header: /cvsroot/pgf/pgf/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToDisplay.lua,v 1.14 2014/03/19 09:20:59 tantau Exp $
+
+-- Print anything - including nested tables
+function table_print (tt, indent, done)
+ done = done or {}
+ indent = indent or 0
+ if type(tt) == "table" then
+ for key, value in pairs (tt) do
+ io.write(string.rep (" ", indent)) -- indent it
+ if type (value) == "table" and not done [value] then
+ done [value] = true
+ io.write(string.format("[%s] => table\n", tostring (key)));
+ io.write(string.rep (" ", indent+2)) -- indent it
+ io.write("(\n");
+ table_print (value, indent + 4, done)
+ io.write(string.rep (" ", indent+2)) -- indent it
+ io.write(")\n");
+ else
+ io.write(string.format("[%s] => %s\n",
+ tostring (key), tostring(value)))
+ end
+ end
+ else
+ io.write(tt .. "\n")
+ end
+end
+
+---
+-- This class provides the interface between a display
+-- layer (like \tikzname\ or a graph editor) and graph drawing
+-- system. Another class, |InterfaceToAlgorithms|, binds the algorithm
+-- layer (which are written in Lua) to the graph drawing system.
+--
+-- The functions declared here are independent of the actual display
+-- layer. Rather, the differences between the layers are encapsulated
+-- by subclasses of the |Binding| class, see that class for
+-- details. Thus, when a new display layer is written, the present
+-- class is \emph{used}, but not \emph{modified}. Instead, only a new
+-- binding is created and all display layer specific interaction is
+-- put there.
+--
+-- The job of this class is to provide convenient methods that can be
+-- called by the display layer. For instance, it provides methods for
+-- starting a graph drawing scope, managing the stack of such scope,
+-- adding a node to a graph and so on.
+
+local InterfaceToDisplay = {}
+
+-- Namespace
+require("pgf.gd.interface").InterfaceToDisplay = InterfaceToDisplay
+
+
+-- Imports
+local InterfaceCore = require "pgf.gd.interface.InterfaceCore"
+local Scope = require "pgf.gd.interface.Scope"
+
+local Binding = require "pgf.gd.bindings.Binding"
+
+local Sublayouts = require "pgf.gd.control.Sublayouts"
+local LayoutPipeline = require "pgf.gd.control.LayoutPipeline"
+
+local Digraph = require "pgf.gd.model.Digraph"
+local Vertex = require "pgf.gd.model.Vertex"
+local Edge = require "pgf.gd.model.Edge"
+local Collection = require "pgf.gd.model.Collection"
+
+local Storage = require "pgf.gd.lib.Storage"
+local LookupTable = require "pgf.gd.lib.LookupTable"
+local Event = require "pgf.gd.lib.Event"
+
+local lib = require "pgf.gd.lib"
+
+
+-- Forward declarations
+local get_current_options_table
+local render_collections
+local push_on_option_stack
+local vertex_created
+
+-- Local objects
+
+local phase_unique = {} -- a unique handle
+local collections_unique = {} -- a unique handle
+local option_cache = nil -- The option cache
+
+
+
+
+---
+-- Initiliaze the binding. This function is called once by the display
+-- layer at the very beginning. For instance, \tikzname\ does the
+-- following call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--InterfaceToDisplay.bind(require "pgf.gd.bindings.BindingToPGF")
+--\end{codeexample}
+--
+-- Inside this call, many standard declarations will be executed, that
+-- is, the declared binding will be used immediately.
+--
+-- Subsequently, the |binding| field of the |InterfaceCore| can be used.
+--
+-- @param class A subclass of |Binding|.
+
+function InterfaceToDisplay.bind(class)
+ assert (not InterfaceCore.binding, "binding already initialized")
+
+ -- Create a new object
+ InterfaceCore.binding = setmetatable({}, class)
+
+ -- Load these libraries, which contain many standard declarations:
+ require "pgf.gd.model.library"
+ require "pgf.gd.control.library"
+end
+
+
+
+
+---
+-- Start a graph drawing scope. Note that this is not the same as
+-- starting a subgraph / sublayout, which are local to a graph drawing
+-- scope: When a new graph drawing scope is started, it is pushed on
+-- top of a stack of graph drawing scopes and all other ``open''
+-- scopes are no longer directly accessible. All method calls to an
+-- |Interface...| object will refer to this newly created scope until
+-- either a new scope is opened or until the current scope is closed
+-- once more.
+--
+-- Each graph drawing scope comes with a syntactic digraph that is
+-- build using methods like |addVertex| or |addEdge|.
+--
+-- @param height The to-be-used height of the options stack. All
+-- options above this height will be popped prior to attacking the
+-- options to the syntactic digraph.
+
+function InterfaceToDisplay.beginGraphDrawingScope(height)
+
+ -- Create a new scope table
+ local scope = Scope.new {}
+
+ -- Setup syntactic digraph:
+ local g = scope.syntactic_digraph
+
+ g.options = get_current_options_table(height)
+ g.syntactic_digraph = g
+ g.scope = scope
+
+ -- Push scope:
+ InterfaceCore.scopes[#InterfaceCore.scopes + 1] = scope
+end
+
+
+
+---
+-- Arranges the current graph using the specified algorithm and options.
+--
+-- This function should be called after the graph drawing scope has
+-- been opened and the syntactic digraph has been completely
+-- specified. It will now start running the algorithm specified
+-- through the |algorithm_phase| options.
+--
+-- Internally, this function creates a coroutine that will run the current graph
+-- drawing algorithm. Coroutines are needed since a graph drawing
+-- algorithm may choose to create a new node. In this case, the
+-- algorithm needs to be suspended and control must be returned back
+-- to the display layer, so that the node can be typeset in order to
+-- determine the precise size information. Once this is done, control
+-- must be passed back to the exact point inside the algorithm where
+-- the node was created. Clearly, all of these actions are exactly
+-- what coroutines are for.
+--
+-- @return Time it took to run the algorithm
+
+function InterfaceToDisplay.runGraphDrawingAlgorithm()
+
+ -- Time things
+ local start = os.clock()
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ assert(not scope.coroutine, "coroutine already created for current gd scope")
+
+ -- The actual drawing function
+ local function run ()
+ if #scope.syntactic_digraph.vertices == 0 then
+ -- Nothing needs to be done
+ return
+ end
+
+ LayoutPipeline.run(scope)
+ end
+
+ scope.coroutine = coroutine.create(run)
+
+ -- Run it:
+ InterfaceToDisplay.resumeGraphDrawingCoroutine()
+
+ -- End timing:
+ local stop = os.clock()
+
+ return stop - start
+end
+
+
+---
+-- Resume the graph drawing coroutine.
+--
+-- This function is the work horse of the coroutine management. It
+-- gets called whenever control passes back from the display layer to
+-- the algorithm level. We resume the graph drawing coroutine so that the
+-- algorithm can start/proceed. The tricky part is when the algorithm
+-- yields, but is not done. In this case, the code needed for creating
+-- a new node is passed back to the display layer through the binding,
+-- which must then execute the code and then resuming the coroutine.
+--
+function InterfaceToDisplay.resumeGraphDrawingCoroutine()
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Asserts
+ assert(scope.coroutine, "coroutine not created for current gd scope")
+
+ -- Run
+ local ok, text = coroutine.resume(scope.coroutine)
+ assert(ok, text)
+ if coroutine.status(scope.coroutine) ~= "dead" then
+ -- Ok, ask binding to continue
+ binding:resumeGraphDrawingCoroutine(text)
+ end
+end
+
+
+
+--- Ends the current graph drawing scope.
+--
+function InterfaceToDisplay.endGraphDrawingScope()
+ assert(#InterfaceCore.scopes > 0, "no gd scope open")
+ InterfaceCore.scopes[#InterfaceCore.scopes] = nil -- pop
+end
+
+
+
+
+---
+-- Creates a new vertex in the syntactic graph of the current graph
+-- drawing scope. The display layer should call this function for each
+-- node of the graph. The |name| must be a unique string identifying
+-- the node. The newly created vertex will be added to the syntactic
+-- digraph. The binding function |everyVertexCreation| will then be
+-- called, allowing the binding to store information regarding the newly
+-- created vertex.
+--
+-- For each vertex an event will be created in the event
+-- sequence. This event will have the kind |"node"| and its
+-- |parameter| will be the vertex.
+--
+-- @param name Name of the vertex.
+--
+-- @param shape The shape of the vertex such as |"circle"| or
+-- |"rectangle"|. This shape may help a graph drawing algorithm
+-- figuring out how the node should be placed.
+--
+-- @param path A |Path| object representing the vertex's path.
+--
+-- @param height The to-be-used height of the options stack. All
+-- options above this height will be popped prior to attacking the
+-- options to the syntactic digraph.
+--
+-- @param binding_infos These options are passed to and are specific
+-- to the current |Binding|.
+--
+-- @param anchors A table of anchors (mapping anchor positions to
+-- |Coordinates|).
+
+
+function InterfaceToDisplay.createVertex(name, shape, path, height, binding_infos, anchors)
+
+ -- The path should never be empty, so we create a trivial path in the provided
+ -- path is empty. This occurs with the ‘coordinate‘ shape for example.
+ if #path == 0 then
+ path:appendMoveto(0, 0)
+ path:appendClosepath()
+ end
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Does vertex already exist?
+ local v = scope.node_names[name]
+ assert (not v or not v.created_on_display_layer, "node already created")
+
+ -- Create vertex
+ if not v then
+ v = Vertex.new {
+ name = name,
+ shape = shape,
+ kind = "node",
+ path = path,
+ options = get_current_options_table(height),
+ anchors = anchors,
+ }
+
+ vertex_created(v,scope)
+ else
+ assert(v.kind == "subgraph node", "subgraph node expected")
+ v.shape = shape
+ v.path = path
+ v.anchors = anchors
+ end
+
+ v.created_on_display_layer = true
+
+ -- Call binding
+ binding.storage[v] = binding_infos
+ binding:everyVertexCreation(v)
+end
+
+
+-- This is a helper function
+function vertex_created(v,scope)
+
+ -- Create Event
+ local e = InterfaceToDisplay.createEvent ("node", v)
+ v.event = e
+
+ -- Create name lookup
+ scope.node_names[v.name] = v
+
+ -- Add vertex to graph
+ scope.syntactic_digraph:add {v}
+
+ -- Add to collections
+ for _,c in ipairs(v.options.collections) do
+ LookupTable.addOne(c.vertices, v)
+ end
+
+end
+
+
+
+---
+-- Creates a new vertex in the syntactic graph of the current graph
+-- drawing scope that is a subgraph vertex. Such a vertex
+-- ``surrounds'' the vertices of a subgraph. The special property of a
+-- subgraph node opposed to a normal node is that it is created only
+-- after the subgraph has been laid out. However, the difference to a
+-- collection like |hyper| is that the node is availble immediately as
+-- a normal node in the sense that you can connect edges to it.
+--
+-- What happens internally is that subgraph nodes get ``registered''
+-- immediately both on the display level and on the algorithm level,
+-- but the actual node is only created inside the layout pipeline
+-- using a callback of the binding. The present function is used to
+-- perform this registering. The node creation happens when the
+-- innermost layout in which the subgraph node is declared has
+-- finished. For each subgraph node, a collection is created that
+-- contains all vertices (and edges) being part of the subgraph. For
+-- this reason, this method is a |push...| method, since it pushes
+-- something on the options stack.
+--
+-- The |init| parameter will be used during the creation of the node,
+-- see |Binding:createVertex| for details on the fields. Note that
+-- |init.text| is often not displayed for such ``vast'' nodes as those
+-- created for whole subgraphs, but a shape may use it nevertheless
+-- (for instance, one might display this text at the top of the node
+-- or, in case of a \textsc{uml} package, in a special box above the
+-- actual node).
+--
+-- The |init.generated_options| will be augmented by additional
+-- key--value pairs when the vertex is created:
+--
+-- \begin{itemize}
+-- \item The key |subgraph point cloud| will have as its value a
+-- string that is be a list of points (without
+-- separating commas) like |"(10pt,20pt)(0pt,0pt)(30pt,40pt)"|, always in
+-- this syntax. The list will contain all points inside the
+-- subgraph. In particular, a bounding box around these points will
+-- encompass all nodes and bend points of the subgraph.
+-- The bounding box of this point cloud is guaranteed to be centered on
+-- the origin.
+-- \item The key |subgraph bounding box width| will have as its value
+-- the width of a bounding box (in \TeX\ points, as a string with the
+-- suffix |"pt"|).
+-- \item The key |subgraph bounding box height| stores the height of a
+-- bounding box.
+-- \end{itemize}
+--
+-- @param name The name of the node.
+-- @param height Height of the options stack. Note that this method
+-- pushes something (namely a collection) on the options stack.
+-- @param info A table passed to |Binding:createVertex|, see that function.
+--
+function InterfaceToDisplay.pushSubgraphVertex(name, height, info)
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Does vertex already exist?
+ assert (not scope.node_names[name], "node already created")
+
+ -- Create vertex
+ local v = Vertex.new {
+ name = name,
+ kind = "subgraph node",
+ options = get_current_options_table(height-1)
+ }
+
+ vertex_created(v,scope)
+
+ -- Store info
+ info.generated_options = info.generated_options or {}
+ info.name = name
+ v.subgraph_info = info
+
+ -- Create collection and link it to v
+ local _, _, entry = InterfaceToDisplay.pushOption(InterfaceCore.subgraph_node_kind, nil, height)
+ v.subgraph_collection = entry.value
+ v.subgraph_collection.subgraph_node = v
+
+ -- Find parent collection in options stack:
+ local collections = v.options.collections
+ for i=#collections,1,-1 do
+ if collections[i].kind == InterfaceCore.sublayout_kind then
+ v.subgraph_collection.parent_layout = collections[i]
+ break
+ end
+ end
+end
+
+
+
+---
+-- Add options for an already existing vertex.
+--
+-- This function allows you to add options to an already existing
+-- vertex. The options that will be added are all options on the
+-- current options stack; they will overwrite existing options of the
+-- same name. For collections, the vertex stays in all collections it
+-- used to, it is only added to all collections that are currently on
+-- the options stack.
+--
+-- @param name Name of the vertex.
+-- @param height The option stack height.
+
+function InterfaceToDisplay.addToVertexOptions(name, height)
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+
+ -- Does vertex already exist?
+ local v = assert (scope.node_names[name], "node is missing, cannot add options")
+
+ v.options = get_current_options_table(height, v.options)
+
+ -- Add to collections
+ for _,c in ipairs(v.options.collections) do
+ LookupTable.addOne(c.vertices, v)
+ end
+
+end
+
+
+
+
+
+---
+-- Creates a new edge in the syntactic graph of the current graph
+-- drawing scope. The display layer should call this function for each
+-- edge that is created. Both the |from| vertex and the |to| vertex
+-- must exist (have been created through |createVertex|) prior to your
+-- being able to call this function.
+--
+-- After the edge has been created, the binding layer's function
+-- |everyEdgeCreation| will be called, allowing the binding layer to
+-- store information about the edge.
+--
+-- For each edge an event is created, whose kind is |"edge"| and whose
+-- |parameter| is a two-element array whose first entry is the edge's
+-- arc in the syntactic digraph and whose second entry is the position
+-- of the edge in the arc's array of syntactic edges.
+--
+-- @param tail Name of the node the edge begins at.
+-- @param head Name of the node the edge ends at.
+-- @param direction Direction of the edge (e.g. |--| for an undirected edge
+-- or |->| for a directed edge from the first to the second
+-- node).
+-- @param height The option stack height, see for instance |createVertex|.
+--
+-- @param binding_infos These options will be stored in the |storage|
+-- of the vertex at the field index by the binding.
+
+function InterfaceToDisplay.createEdge(tail, head, direction, height, binding_infos)
+
+ -- Setup
+ local scope = InterfaceCore.topScope()
+ local binding = InterfaceCore.binding
+
+ -- Does vertex already exist?
+ local h = scope.node_names[head]
+ local t = scope.node_names[tail]
+ assert (h and t, "attempting to create edge between nodes that are not in the graph")
+
+ -- Create Arc object
+ local arc = scope.syntactic_digraph:connect(t, h)
+
+ -- Create Edge object
+ local edge = Edge.new {
+ head = h,
+ tail = t,
+ direction = direction,
+ options = get_current_options_table(height)
+ }
+
+ -- Add to arc
+ arc.syntactic_edges[#arc.syntactic_edges+1] = edge
+
+ -- Create Event
+ local e = InterfaceToDisplay.createEvent ("edge", { arc, #arc.syntactic_edges })
+ edge.event = e
+
+ -- Make part of collections
+ for _,c in ipairs(edge.options.collections) do
+ LookupTable.addOne(c.edges, edge)
+ end
+
+ -- Call binding
+ binding.storage[edge] = binding_infos
+ binding:everyEdgeCreation(edge)
+
+end
+
+
+
+
+
+---
+-- Push an option to the stack of options.
+--
+-- As a graph is parsed, a stack of ``current options''
+-- is created. To add something to this table, the display layers may
+-- call the method |pushOption|. To pop something from this stack,
+-- just set the |height| value during the next push to the position to
+-- which you actually wish to push something; everything above and
+-- including this position will be popped from the stack.
+--
+-- When an option is pushed, several additional options may also be
+-- pushed, namely whenever the option has a |use| field set. These
+-- additional options may, in turn, also push new options. Because of
+-- this, this function returns a new stack height, representing the
+-- resulting stack height.
+--
+-- In addition to this stack height, this function returns a Boolean
+-- value indicating whether a ``main algorithm phase was set.'' This
+-- happens whenever a key is executed (directly or indirectly through
+-- the |use| field) that selects an algorithm for the ``main''
+-- algorithm phase. This information may help the caller to setup the
+-- graph drawing scopes correctly.
+--
+-- @param key A parameter (must be a string).
+-- @param value A value (can be anything). If it is a string, it will
+-- be converted to whatever the key expects.
+-- @param height A stack height at which to insert the key. Everything
+-- above this height will be removed.
+--
+-- @return A new stack height
+-- @return A Boolean that is |true| iff the main algorithm phase was
+-- set by the option or one option |use|d by it.
+-- @return The newly created entry on the stack. If more entries are
+-- created through the use of the |use| field, the original entry is
+-- returned nevertheless.
+
+
+function InterfaceToDisplay.pushOption(key, value, height)
+ assert(type(key) == "string", "illegal key")
+
+ local key_record = assert(InterfaceCore.keys[key], "unknown key")
+ local main_phase_set = false
+
+ if value == nil and key_record.default then
+ value = key_record.default
+ end
+
+ -- Find out what kind of key we are pushing:
+
+ if key_record.algorithm then
+ -- Push a phase
+ if type(InterfaceCore.algorithm_classes[key]) == "function" then
+ -- Call the constructor function
+ InterfaceCore.algorithm_classes[key] = InterfaceCore.algorithm_classes[key]()
+ end
+
+ local algorithm = InterfaceCore.algorithm_classes[key]
+
+ assert (algorithm, "algorithm class not found")
+
+ push_on_option_stack(phase_unique,
+ { phase = value or key_record.phase, algorithm = algorithm },
+ height)
+
+ if key_record.phase == "main" then
+ main_phase_set = true
+ end
+
+ elseif key_record.layer then
+ -- Push a collection
+ local stack = InterfaceCore.option_stack
+ local scope = InterfaceCore.topScope()
+
+ -- Get the stack above "height":
+ local options = get_current_options_table(height-1)
+
+ -- Create the collection event
+ local event = InterfaceToDisplay.createEvent ("collection", key)
+
+ -- Create collection object:
+ local collection = Collection.new { kind = key, options = options, event = event }
+
+ -- Store in collections table of current scope:
+ local collections = scope.collections[key] or {}
+ collections[#collections + 1] = collection
+ scope.collections[key] = collections
+
+ -- Build collection tree
+ collection:registerAsChildOf(options.collections[#options.collections])
+
+ -- Push on stack
+ push_on_option_stack(collections_unique, collection, height)
+
+ else
+
+ -- A normal key
+ push_on_option_stack(key, InterfaceCore.convert(value, InterfaceCore.keys[key].type), height)
+
+ end
+
+ local newly_created = InterfaceCore.option_stack[#InterfaceCore.option_stack]
+
+ -- Now, push use keys:
+ local use = key_record.use
+ if key_record.use then
+ local flag
+ for _,u in ipairs(InterfaceCore.keys[key].use) do
+ local use_k = u.key
+ local use_v = u.value
+ if type(use_k) == "function" then
+ use_k = use_k(value)
+ end
+ if type(use_v) == "function" then
+ use_v = use_v(value)
+ end
+ height, flag = InterfaceToDisplay.pushOption(use_k, use_v, height+1)
+ main_phase_set = main_phase_set or flag
+ end
+ end
+
+ return height, main_phase_set, newly_created
+end
+
+
+---
+-- Push a layout on the stack of options. As long as this layout is on
+-- the stack, all vertices and edges will be part of this layout. For
+-- details on layouts, please see |Sublayouts|.
+--
+-- @param height A stack height at which to insert the key. Everything
+-- above this height will be removed.
+
+function InterfaceToDisplay.pushLayout(height)
+ InterfaceToDisplay.pushOption(InterfaceCore.sublayout_kind, nil, height)
+end
+
+
+
+---
+-- Creates an event and adds it to the event string of the current scope.
+--
+-- @param kind Name/kind of the event.
+-- @param parameters Parameters of the event.
+--
+-- @return The newly pushed event
+--
+function InterfaceToDisplay.createEvent(kind, param)
+ local scope = InterfaceCore.topScope()
+ local n = #scope.events + 1
+ local e = Event.new { kind = kind, parameters = param, index = n }
+ scope.events[n] = e
+
+ return e
+end
+
+
+
+---
+-- This method allows you to query the table of all declared keys. It
+-- contains them both as an array and also as a table index by the
+-- keys's names. In particular, you can then iterate over it using
+-- |ipairs| and you can check whether a key is defined by accessing
+-- the table at the key's name. Each entry of the table is the
+-- original table passed to |InterfaceToAlgorithms.declare|.
+--
+-- @return A lookup table of all declared keys.
+
+function InterfaceToDisplay.getDeclaredKeys()
+ return InterfaceCore.keys
+end
+
+
+
+
+---
+-- Renders the graph.
+--
+-- This function is called after the graph has been laid out by the
+-- graph drawing algorithms. It will trigger a sequence of calls to
+-- the binding layer that will, via callbacks, start rendering the
+-- whole graph.
+--
+-- In detail, this function calls:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--local binding = InterfaceCore.binding
+--
+--binding:renderStart()
+--render_vertices()
+--render_edges()
+--render_collections()
+--binding:renderStop()
+--\end{codeexample}
+--
+-- Here, the |render_...| functions are local, internal functions that are,
+-- nevertheless, documented here.
+--
+-- @param name Returns the algorithm class that has been declared using
+-- |declare| under the given name.
+
+function InterfaceToDisplay.renderGraph()
+ local scope = InterfaceCore.topScope()
+ local syntactic_digraph = scope.syntactic_digraph
+
+ local binding = InterfaceCore.binding
+
+ binding:renderStart()
+ render_vertices(syntactic_digraph.vertices)
+ render_edges(syntactic_digraph.arcs)
+ render_collections(scope.collections)
+ binding:renderStop()
+end
+
+
+
+
+
+---
+-- Render the vertices after the graph drawing algorithm has
+-- finished. This function is local and internal and included only for
+-- documenting the call graph.
+--
+-- When the graph drawing algorithm is done, the interface will start
+-- rendering the vertices by calling appropriate callbacks of the
+-- binding layer.
+--
+-- Consider the following code:
+--\begin{codeexample}[code only]
+--\graph [... layout] {
+-- a -- b -- c -- d;
+--};
+--\end{codeexample}
+--
+-- In this case, after the graph drawing algorithm has run, the
+-- present function will call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--local binding = InterfaceCore.binding
+--
+--binding:renderVerticesStart()
+--binding:renderVertex(vertex_a)
+--binding:renderVertex(vertex_b)
+--binding:renderVertex(vertex_c)
+--binding:renderVertex(vertex_d)
+--binding:renderVerticesStop()
+--\end{codeexample}
+--
+-- @param vertices An array of all vertices in the syntactic digraph.
+
+function render_vertices(vertices)
+ InterfaceCore.binding:renderVerticesStart()
+ for _,vertex in ipairs(vertices) do
+ InterfaceCore.binding:renderVertex(vertex)
+ end
+ InterfaceCore.binding:renderVerticesStop()
+end
+
+
+---
+-- Render the collections whose layer is not |0|. This local, internal
+-- function is called to render the different collection kinds.
+--
+-- Collection kinds rendered in the order provided by the |layer|
+-- field passed to |declare| during the declaration of the colleciton
+-- kind, see also |declare_collection|. If several collection kinds
+-- have the same layer, they are rendered in lexicographical ordering
+-- (to ensure that they are always rendered in the same order).
+--
+-- Consider the following code:
+--\begin{codeexample}[code only, tikz syntax=false]
+--declare { key = "hyper", layer = 1 }
+--\end{codeexample}
+-- you can say on the \tikzname\ layer
+--\begin{codeexample}[code only]
+--\graph {
+-- a, b, c, d;
+-- { [hyper] a, b, c }
+-- { [hyper] b, c, d }
+--};
+--\end{codeexample}
+--
+-- In this case, after the graph drawing algorithm has run, the
+-- present function will call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+--local binding = InterfaceCore.binding
+--
+--binding:renderCollectionStartKind("hyper", 1)
+--binding:renderCollection(collection_containing_abc)
+--binding:renderCollection(collection_containing_bcd)
+--binding:renderCollectionStopKind("hyper", 1)
+--\end{codeexample}
+--
+-- @param collections The |collections| table of the current scope.
+
+function render_collections(collections)
+ local kinds = InterfaceCore.collection_kinds
+ local binding = InterfaceCore.binding
+
+ for i=1,#kinds do
+ local kind = kinds[i].kind
+ local layer = kinds[i].layer
+
+ if layer ~= 0 then
+ binding:renderCollectionStartKind(kind, layer)
+ for _,c in ipairs(collections[kind] or {}) do
+ binding:renderCollection(c)
+ end
+ binding:renderCollectionStopKind(kind, layer)
+ end
+ end
+end
+
+
+---
+-- Render the syntactic edges of a graph after the graph drawing
+-- algorithm has finished. This function is local and internal and included only
+-- for documenting the call graph.
+--
+-- When the graph drawing algorithm is done, the interface will first
+-- rendering the vertices using |render_vertices|, followed by calling
+-- this function, which in turn calls appropriate callbacks to the
+-- binding layer.
+--
+-- Consider the following code:
+--\begin{codeexample}[code only]
+-- \graph [... layout] {
+-- a -- b -- c -- d;
+-- };
+--\end{codeexample}
+--
+-- In this case, after the graph drawing algorithm has run, the
+-- present function will call:
+--
+--\begin{codeexample}[code only, tikz syntax=false]
+-- local binding = InterfaceCore.binding
+--
+-- binding:renderEdgesStart()
+-- binding:renderEdge(edge_from_a_to_b)
+-- binding:renderEdge(edge_from_b_to_c)
+-- binding:renderEdge(edge_from_c_to_d)
+-- binding:renderEdgesStop()
+--\end{codeexample}
+--
+-- @param arcs The array of arcs of the syntactic digraph.
+
+function render_edges(arcs)
+ InterfaceCore.binding:renderEdgesStart()
+ for _,a in ipairs(arcs) do
+ for _,e in ipairs (a.syntactic_edges) do
+ InterfaceCore.binding:renderEdge(e)
+ end
+ end
+ InterfaceCore.binding:renderEdgesStop()
+end
+
+
+local aliases = InterfaceCore.option_aliases
+local option_initial = InterfaceCore.option_initial
+
+local option_metatable = {
+ __index =
+ function (t, key)
+ local k = aliases[key]
+ if k then
+ local v = (type(k) == "string" and t[k]) or (type(k) == "function" and k(t)) or nil
+ if v ~= nil then
+ return v
+ end
+ end
+ return option_initial[key]
+ end
+}
+
+
+---
+-- Get the current options table.
+--
+-- An option table can be accessed like a normal table; however, there
+-- is a global fallback for this table. If an index is not defined,
+-- the value of this index in the global fallback table is used. (This
+-- reduces the overall amount of option keys that need to be stored
+-- with object.)
+--
+-- (This function is local and internal and included only for documentation
+-- purposes.)
+--
+-- @param height The stack height for which the option table is
+-- required.
+-- @param table If non |nil|, the options will be added to this
+-- table.
+--
+-- @return The option table as described above.
+
+function get_current_options_table (height, table)
+ local stack = InterfaceCore.option_stack
+ assert (height >= 0 and height <= #stack, "height value out of bounds")
+
+ if height == InterfaceCore.option_cache_height and not table then
+ return option_cache
+ else
+ -- Clear superfluous part of stack
+ for i=#stack,height+1,-1 do
+ stack[i] = nil
+ end
+
+ -- Build options table
+ local cache
+ if not table then
+ cache = setmetatable(
+ {
+ algorithm_phases = setmetatable({}, InterfaceCore.option_initial.algorithm_phases),
+ collections = {}
+ }, option_metatable)
+ else
+ cache = lib.copy(table)
+ cache.algorithm_phases = lib.copy(cache.algorithm_phases)
+ cache.collections = lib.copy(cache.collections)
+ end
+
+ local algorithm_phases = cache.algorithm_phases
+ local collections = cache.collections
+ local keys = InterfaceCore.keys
+
+ local function handle (k, v)
+ if k == phase_unique then
+ algorithm_phases[v.phase] = v.algorithm
+ local phase_stack = v.phase .. " stack"
+ local t = rawget(algorithm_phases, phase_stack)
+ if not t then
+ t = algorithm_phases[phase_stack]
+ assert(type(t) == "table", "unknown phase")
+ t = lib.copy(t)
+ algorithm_phases[phase_stack] = t
+ end
+ t[#t + 1] = v.algorithm
+ elseif k == collections_unique then
+ LookupTable.addOne(collections, v)
+ else
+ cache[k] = v
+ end
+ end
+
+ for _,s in ipairs(stack) do
+ handle (s.key, s.value)
+ end
+
+ -- Cache it, if this was not added:
+ if not table then
+ InterfaceCore.option_cache_height = height
+ option_cache = cache
+ end
+
+ return cache
+ end
+end
+
+
+
+-- A helper function
+
+function push_on_option_stack(key, value, height)
+ local stack = InterfaceCore.option_stack
+
+ assert (type(height) == "number" and height > 0 and height <= #stack + 1,
+ "height value out of bounds")
+
+ -- Clear superfluous part of stack
+ for i=#stack,height+1,-1 do
+ stack[i] = nil
+ end
+
+ stack[height] = { key = key, value = value }
+ InterfaceCore.option_cache_height = nil -- invalidate cache
+end
+
+
+
+-- Done
+
+return InterfaceToDisplay
diff --git a/graphics/pgf/contrib/tikz-feynman/tikzlibraryfeynman.code.tex b/graphics/pgf/contrib/tikz-feynman/tikzlibraryfeynman.code.tex
new file mode 100644
index 0000000000..76ca76e5ea
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-feynman/tikzlibraryfeynman.code.tex
@@ -0,0 +1,336 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ-Feynman
+% Feynman Diagrams with TikZ
+% Copyright (C) 2015 Joshua Ellis
+%
+%
+% This work may be distributed and/or modified under the conditions of the LaTeX
+% Project Public License, either version 1.3 of this license or (at your option)
+% any later version.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Joshua Ellis.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+% FOR A PARTICULAR PURPOSE. See the LaTeX Project Public License for more
+% details.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Pre-requisites
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usetikzlibrary{
+ arrows.meta,
+ calc,
+ decorations,
+ decorations.markings,
+ decorations.pathmorphing,
+ decorations.pathreplacing,
+ graphs,
+ patterns,
+ positioning,
+ shapes.geometric,
+}
+\ifluatex
+ \usetikzlibrary{
+ graphdrawing
+ }
+ \usegdlibrary{
+ circular,
+ force,
+ layered,
+ trees
+ }
+\fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Function definitions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Miscellaneous functions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@empty{}
+
+%% Key Manager
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Setup the tikz-feynman key family
+\pgfkeys{
+ /tikzfeynman/.is family,
+ /tikzfeynman/.search also={/tikz},
+}
+
+%% |\tikzfeynmanset| allows keys that belong with tikz-feynman to be easily set.
+\def\tikzfeynmanset{\pgfqkeys{/tikzfeynman}}
+
+%% Luatex Waring
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check if we are using luatex
+\newif\iftikzfeynman@warn@luatex%
+\tikzfeynmanset{
+ warn luatex/.is if=tikzfeynman@warn@luatex,
+ warn luatex=true,
+}
+
+\AtBeginDocument{
+ \ifluatex\else
+ \iftikzfeynman@warn@luatex
+ \PackageWarning{tikz-feynman}{LuaTeX is required if you wish to have vertices automatically placed. You can disable this warning by setting /tikzfeynman/warn luatex=false}
+ \fi
+ \fi
+}
+
+%% Version check
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Check which version is expected and which is installed
+\def\tikzfeynman@compat@parse#1.#2.#3\pgfeov{
+ \edef\tikzfeynman@compat@major{#1}
+ \edef\tikzfeynman@compat@minor{#2}
+ \edef\tikzfeynman@compat@patch{#3}
+ \edef\tikzfeynman@compat{#1.#2.#3}
+}
+\let\tikzfeynman@compat=\tikzfeynman@empty
+\pgfkeyslet{/tikzfeynman/compat/.@cmd}{\tikzfeynman@compat@parse}
+\ProcessPgfPackageOptions{/tikzfeynman}
+
+\AtBeginDocument{
+ \ifx\tikzfeynman@version\tikzfeynman@compat\else
+ \ifx\tikzfeynman@compat\tikzfeynman@empty
+ \PackageWarning{tikz-feynman}{Consider loading TikZ-Feynman with \string\usepackage[compat=\tikzfeynman@version]{tikz-feynman} so that you can be warned if TikZ-Feynman changes.}
+ \else
+ \ifx\tikzfeynman@compat@major\tikzfeynman@version@major
+ \ifx\tikzfeynman@compat@minor\tikzfeynman@version@minor
+ \ifx\tikzfeynman@compat@patch\tikzfeynman@version@patch\else
+ \PackageInfo{tikz-feynman}{The preamble requested version \tikzfeynman@compat, but the system version is \tikzfeynman@version. This should cause no issue.}
+ \fi
+ \else
+ \PackageWarning{tikz-feynman}{The preamble requested version \tikzfeynman@compat, but the system version is \tikzfeynman@version. This may change some diagrams.}
+ \fi
+ \else
+ \PackageError{tikz-feynman}{The preamble requested version \tikzfeynman@compat, but the system version is \tikzfeynman@version. They are most likely incompatible. Please download the appropriate version from jpellis.me/projects/tikz-feynman.}
+ \fi
+ \fi
+ \fi
+}
+
+%% Override Lua code if necessary
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@apply@patch#1{
+ \directlua{require("tikzfeynman.patch.#1.lua")}
+}
+
+%% Version 3.0.0, 3.0.1 and 3.0.1a need to be patched.
+\ifluatex
+ \def\tikzfeynman@temp{3.0.0}
+ \ifx\pgfversion\tikzfeynman@temp
+ \tikzfeynman@apply@patch{3.0.0}
+ \else
+ \def\tikzfeynman@temp{3.0.1}
+ \ifx\pgfversion\tikzfeynman@temp
+ \tikzfeynman@apply@patch{3.0.1}
+ \else
+ \def\tikzfeynman@temp{3.0.1a}
+ \ifx\pgfversion\tikzfeynman@temp
+ \tikzfeynman@apply@patch{3.0.1}
+ \fi
+ \fi
+ \fi
+\fi
+
+%% Feynman Environment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Provide `\begin{feynman} ... \end{feynman}` within TikZ pictures.
+\tikzaddtikzonlycommandshortcutlet\feynman\tikzfeynman@environment@feynman
+\tikzaddtikzonlycommandshortcutlet\endfeynman\endtikzfeynman@environment@feynman
+
+%% \begin{feynman}...\end{feynman}
+\def\tikzfeynman@environment@feynman{%
+ \pgfutil@ifnextchar[{\tikzfeynman@environment@feynman@opt}
+ {\tikzfeynman@environment@feynman@opt[]}}
+
+\def\tikzfeynman@environment@feynman@opt[#1]{%
+ \begingroup
+ %% Local overrides
+ \let\tikz@@scan@fig=\tikzfeynman@scan@fig
+ \let\tikzfeynman@orig@graph=\graph
+ %% Local commands
+ \let\vertex=\tikzfeynman@commands@vertex
+ \let\diagram=\tikzfeynman@commands@diagram
+ \let\graph=\tikzfeynman@commands@graph
+ %% Opening hooks
+ \scope
+ \tikz@lib@ignore@sizetrue
+ \tikzfeynman@tikz@search@tikzfeynman
+ \pgfkeys{/tikzfeynman/every feynman@@,#1}
+ \pgfkeysvalueof{/tikzfeynman/execute at begin feynman@@}%
+ \pgfkeysvalueof{/tikzfeynman/execute at begin feynman}%
+}
+
+\def\endtikzfeynman@environment@feynman{%
+ %% Closing hooks
+ \pgfkeysvalueof{/tikzfeynman/execute at end feynman}%
+ \pgfkeysvalueof{/tikzfeynman/execute at end feynman@@}%
+ \endscope
+ \endgroup
+}
+
+%% \feynmandiagram
+\def\feynmandiagram{%
+ \pgfutil@ifnextchar[{\feynmandiagram@opt}
+ {\feynmandiagram@opt[]}}
+\def\feynmandiagram@opt[#1]{%
+ \pgfutil@ifnextchar[{\feynmandiagram@opt@opt[#1]}
+ {\feynmandiagram@opt@opt[#1][#1]}}
+\def\feynmandiagram@opt@opt[#1][#2]{%
+ \tikz [/tikzfeynman/.cd,#1]
+ \graph [/tikzfeynman/.cd,/tikzfeynman/every diagram@@,/tikz/graphs/spring layout,#2]}
+
+%% Allow empty nodes
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\iftikzfeynmanallowemptynode
+\newif\iftikzfeynmanvertex
+\def\tikzfeynman@scan@fig{%
+ \pgfutil@ifnextchar a{\tikz@fig@scan@at}
+ {\pgfutil@ifnextchar({\tikz@fig@scan@name}
+ {\pgfutil@ifnextchar[{\tikz@fig@scan@options}%
+ {\pgfutil@ifnextchar\bgroup{\tikz@fig@main}%
+ {\iftikzfeynmanvertex%
+ \tikzset{/tikzfeynman/every vertex@@}%
+ \iftikzfeynmanallowemptynode%
+ \else%
+ \tikzset{/tikzfeynman/particle}%
+ \fi%
+ \fi%
+ \tikz@fig@main{}}}}}}%}}
+
+%% Include /tikzfeynman in the search path
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@tikz@search@tikzfeynman{%
+ \pgfkeys{/tikz/.unknown/.code=%
+ \let\tikz@key\pgfkeyscurrentname%
+ %% Is it a tikzfeynman key?
+ \pgfkeys{/tikzfeynman/\tikz@key/.try={##1}}%
+ \ifpgfkeyssuccess%
+ \else%
+ %% Is it a pgf key?
+ \pgfkeys{/pgf/\tikz@key/.try={##1}}%
+ \ifpgfkeyssuccess%
+ \else%
+ \expandafter\pgfutil@in@\expandafter!\expandafter{\tikz@key}%
+ \ifpgfutil@in@%
+ %% this is a color!
+ \expandafter\tikz@addoption\expandafter{\expandafter\tikz@compat@color@set\expandafter{\tikz@key}}%
+ \edef\tikz@textcolor{\tikz@key}%
+ \else%
+ \pgfutil@doifcolorelse{\tikz@key}
+ {%
+ \expandafter\tikz@addoption\expandafter{\expandafter\tikz@compat@color@set\expandafter{\tikz@key}}%
+ \edef\tikz@textcolor{\tikz@key}%
+ }%
+ {%
+ %% Ok, second chance: This might be an arrow specification:
+ \expandafter\pgfutil@in@\expandafter-\expandafter{\tikz@key}%
+ \ifpgfutil@in@%
+ %% Ah, an arrow spec!
+ \expandafter\tikz@processarrows\expandafter{\tikz@key}%
+ \else%
+ %% Ok, third chance: A shape!
+ \expandafter\ifx\csname pgf@sh@s@\tikz@key\endcsname\relax%
+ \pgfkeys{/errors/unknown key/.expand
+ once=\expandafter{\expandafter/\expandafter t\expandafter
+ i\expandafter k\expandafter z\expandafter/\tikz@key}{##1}}%
+ \else%
+ \edef\tikz@shape{\tikz@key}%
+ \fi%
+ \fi%
+ }%
+ \fi%
+ \fi%
+ \fi%
+ }
+}
+
+
+%% Vertex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Adapted from |\coordinate| code
+\def\tikzfeynman@commands@vertex{
+ \path \pgfextra{\tikzfeynmanallowemptynodetrue}
+ \pgfextra{\tikzfeynmanvertextrue}
+ node}
+
+%% Diagram
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@commands@diagram{\@ifstar
+ \tikzfeynman@commands@diagram@star%
+ \tikzfeynman@commands@diagram@nostar}
+
+\def\tikzfeynman@commands@diagram@nostar{%
+ \pgfutil@ifnextchar[{\tikzfeynman@commands@diagram@nostar@opt}
+ {\tikzfeynman@commands@diagram@nostar@opt[]}}
+\def\tikzfeynman@commands@diagram@nostar@opt[#1]{%
+ \tikzfeynman@orig@graph [/tikzfeynman/every diagram@@,/tikz/graphs/spring layout,#1]}
+
+\def\tikzfeynman@commands@diagram@star{%
+ \pgfutil@ifnextchar[{\tikzfeynman@commands@diagram@star@opt}
+ {\tikzfeynman@commands@diagram@star@opt[]}}
+\def\tikzfeynman@commands@diagram@star@opt[#1]{%
+ \tikzfeynman@orig@graph [/tikzfeynman/every diagram@@,#1]}
+
+%% Graph
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@commands@graph{%
+ \pgfutil@ifnextchar[{\tikzfeynman@commands@graph@opt}
+ {\tikzfeynman@commands@graph@opt[]}}
+\def\tikzfeynman@commands@graph@opt[#1]{%
+ \PackageWarning{tikz-feynman}{It is not recommended to use \string\graph. Use \string\diagram\space or \string\diagram* instead.}
+ \tikzfeynman@orig@graph [/tikzfeynman/every diagram@@,#1]}
+
+%% Optional argument in style key
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@key@opt#1[#2]#3\pgfeov{%
+ \tikzfeynmanset{#1={[#2]#3}}}
+
+%% Insertion
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@insertion{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{insertion@@}}
+ {\tikzfeynman@key@opt{insertion@@}[]}}
+\pgfkeyslet{/tikzfeynman/insertion/.@cmd}{\tikzfeynman@insertion}
+
+%% Momentum
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\tikzfeynman@momentum@std{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{momentum@@}}
+ {\tikzfeynman@key@opt{momentum@@}[]}}
+\pgfkeyslet{/tikzfeynman/momentum/.@cmd}{\tikzfeynman@momentum@std}
+
+\def\tikzfeynman@momentum@stdp{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{momentum'@@}}
+ {\tikzfeynman@key@opt{momentum'@@}[]}}
+\pgfkeyslet{/tikzfeynman/momentum'/.@cmd}{\tikzfeynman@momentum@stdp}
+
+\def\tikzfeynman@momentum@stdr{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{reversed momentum@@}}
+ {\tikzfeynman@key@opt{reversed momentum@@}[]}}
+\pgfkeyslet{/tikzfeynman/reversed momentum/.@cmd}{\tikzfeynman@momentum@stdr}
+\pgfkeyslet{/tikzfeynman/rmomentum/.@cmd}{\tikzfeynman@momentum@stdr}
+
+\def\tikzfeynman@momentum@stdrp{%
+ \pgfutil@ifnextchar[{\tikzfeynman@key@opt{reversed momentum'@@}}
+ {\tikzfeynman@key@opt{reversed momentum'@@}[]}}
+\pgfkeyslet{/tikzfeynman/reversed momentum'/.@cmd}{\tikzfeynman@momentum@stdrp}
+\pgfkeyslet{/tikzfeynman/rmomentum'/.@cmd}{\tikzfeynman@momentum@stdrp}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Styles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\input tikzfeynman.keys.code.tex
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-imagelabels/Makefile b/graphics/pgf/contrib/tikz-imagelabels/Makefile
new file mode 100644
index 0000000000..f7eae370cc
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-imagelabels/Makefile
@@ -0,0 +1,17 @@
+SUBDIRS := $(sort $(dir $(wildcard samples/*/*)))
+NAME = tikz-imagelabels
+
+.PHONY: all $(SUBDIRS) clean
+
+all: $(SUBDIRS)
+ latex $(NAME).ins
+ pdflatex --interaction=nonstopmode $(NAME).dtx
+ pdflatex --interaction=nonstopmode $(NAME).dtx
+ makeindex -s gglo.ist -o $(NAME).gls $(NAME).glo
+ pdflatex --interaction=nonstopmode $(NAME).dtx
+ pdflatex --interaction=nonstopmode $(NAME).dtx
+
+$(SUBDIRS): ; $(MAKE) -C $@ $(MAKECMDGOALS)
+
+clean: $(SUBDIRS)
+ --@rm -rf *.aux *.glo *.gls *.ilg *.log *.out *.toc
diff --git a/graphics/pgf/contrib/tikz-imagelabels/README.md b/graphics/pgf/contrib/tikz-imagelabels/README.md
new file mode 100644
index 0000000000..7635030f79
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-imagelabels/README.md
@@ -0,0 +1,6 @@
+# tikz-imagelabels package
+
+This `LaTeX` package uses `TikZ` to draw labels and annotations on top of images.
+To generate the files, run the makefile with `make`. This produces
+* the `.sty` file
+* the documentation PDF file
diff --git a/graphics/pgf/contrib/tikz-imagelabels/pleiades.jpg b/graphics/pgf/contrib/tikz-imagelabels/pleiades.jpg
new file mode 100644
index 0000000000..79f5e062d9
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-imagelabels/pleiades.jpg
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.dtx b/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.dtx
new file mode 100644
index 0000000000..239221f278
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.dtx
@@ -0,0 +1,713 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2019 by Tobias Plüss <tpluess@ieee.org>
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[2011/06/27]
+%<package>\ProvidesPackage{tikz-imagelabels}
+%<package> [2019/06/27 v0.2 put labels on images using TikZ]
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\RecordChanges
+
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{hyperref}
+\usepackage{url}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{tikz-imagelabels}
+\usepackage{float}
+\usepackage{parskip}
+
+% default position for floats: H
+\makeatletter
+\renewcommand{\fps@figure}{H}
+\renewcommand{\fps@table}{H}
+\makeatother
+
+\setlength{\parindent}{0pt}
+
+\def\pkg{\texttt{tikz-imagelabels}}
+\def\tkz{Ti\emph{k}Z}
+
+\begin{document}
+ \DocInput{tikz-imagelabels.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v0.1}{2019/01/04}{Submission to CTAN}
+%
+% \GetFileInfo{tikz-imagelabels.sty}
+%
+% \title{The \texttt{tikz-imagelabels} package\thanks{This document corresponds
+% to \texttt{tikz-imagelabels}~\fileversion, dated~\filedate.}}
+% \author{Tobias Plüss}
+% \date{\filedate}
+% \thispagestyle{empty}
+% \maketitle
+%
+% \begin{abstract}
+% This package allows to put annotations (arrows, labels) on top of
+% images using Ti\emph{k}Z.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \PrintChanges
+%
+% \StopEventually{}
+%
+% \section{Introduction}
+%
+% For manuals, scientific reports and the like, one often needs to add
+% annotations to an image (mostly a photograph) to label different items.
+% An example of this is shown in \autoref{fig:pleiades}, which shows the names
+% of the different stars in a star constellation. The package \pkg{} allows to
+% produce this kind of illustration.
+%
+% \begin{figure}
+% \centering
+% \begin{annotationimage}{width=6cm}{pleiades.jpg}
+% \draw[annotation left = {Atlas at 0.3}] to (0.11,0.4);
+% \draw[annotation left = {Pleione at 0.55}] to (0.11,0.49);
+% \draw[annotation left = {Alcyone at 0.8}] to (0.39,0.45);
+% \draw[annotation below = {Merope at 0.5}] to (0.58,0.28);
+% \draw[annotation right = {Electra at 0.3}] to (0.84,0.45);
+% \draw[annotation right = {Caleano at 0.75}] to (0.85,0.64);
+% \draw[annotation above = {Maia at 0.4}] to (0.67,0.72);
+% \draw[annotation above = {Taygeta at 0.9}] to (0.78,0.82);
+% \draw[image label = {M45 at south east}];
+% \end{annotationimage}
+% \caption{The Pleiades, also known as M45. Image source: \url{http://hubblesite.org/newscenter/archive/releases/2004/20/image/a/}}
+% \label{fig:pleiades}
+% \end{figure}
+%
+% But why does this task deserve its own \LaTeX{} package? there are several
+% reasons:
+% \begin{itemize}
+% \item One does not need to edit the image in an external graphics
+% program. They can be input directly into your \LaTeX{} document.
+%
+% \item Since the labels and annotations are processed by \LaTeX{}, all the
+% font settings and the like remain consistent through the whole the document.
+% However, of course the \pkg{} package allows to configure the style.
+%
+% \item The annotations stay rock-solid if the image needs to be rescaled
+% later.
+%
+% \item Since the arrows are processed by \tkz{}, they are vector
+% graphics and thus, issues with scaling or unsharp/blurry labels, which would
+% result if one labels the image in a graphics software, are avoided.
+% \end{itemize}
+%
+% \clearpage
+% \autoref{fig:pleiades} was created with the following code:
+% \begin{verbatim}
+% \begin{annotationimage}{width=6cm}{pleiades.jpg}
+% \draw[annotation left = {Atlas at 0.3}] to (0.11,0.4);
+% \draw[annotation left = {Pleione at 0.55}] to (0.11,0.49);
+% \draw[annotation left = {Alcyone at 0.8}] to (0.39,0.45);
+% \draw[annotation below = {Merope at 0.5}] to (0.58,0.28);
+% \draw[annotation right = {Electra at 0.3}] to (0.84,0.45);
+% \draw[annotation right = {Caleano at 0.75}] to (0.85,0.64);
+% \draw[annotation above = {Maia at 0.4}] to (0.67,0.72);
+% \draw[annotation above = {Taygeta at 0.9}] to (0.78,0.82);
+% \draw[image label = {M45 at south east}];
+% \end{annotationimage}
+% \end{verbatim}
+%
+% \section{Usage}
+%
+% \subsection{Inclusion of the image}
+%
+% \DescribeEnv{annotationimage}
+% To include an image, the |annotationimage| environment is used. It
+% has the following syntax:
+%
+% |annotationimage|\oarg{grid}\marg{options}\marg{file name}
+%
+% The \meta{grid} is an optional parameter. If this parameter is present, i.e.
+% if it has the value |[grid]|, then a coordinate grid is visible. The
+% coordinate grid is used to find the coordinates of the points to be labelled.
+% If the parameter \meta{grid} is omitted, no coordinate grid is drawn. The code
+%
+% \begin{verbatim}
+% \begin{annotationimage}[grid]{width=6cm}{pleiades.jpg}
+% \end{annotationimage}
+% \end{verbatim}
+%
+% produces the image shown in \autoref{fig:grid-example}.
+%
+% \begin{figure}
+% \centering
+% \begin{annotationimage}[grid]{width=6cm}{pleiades.jpg}
+% \end{annotationimage}
+% \caption{Example of an image with coordinate grid}
+% \label{fig:grid-example}
+% \end{figure}
+%
+% \meta{options} is any set of options understood by the
+% |\includegraphics| command, e.g. |width=|, |height=| and so on. It may also be
+% left empty, but in this case, the curly braces need to be there, though.
+%
+% The \meta{file name} is, obviously, the file name of the image. Like for the
+% \meta{options}, any image format supported by |\includegraphics| may be used.
+%
+% \subsection{Adding a label}
+%
+% A label (like the ``M45'' in \autoref{fig:pleiades}) can be added to the image
+% using following |\draw| macro:
+%
+% |\draw[image label = {|\meta{text}| at |\meta{placement}|}];|
+%
+% The \meta{text} parameter is obvious. It contains the text to be put into the
+% label.
+%
+% The \meta{placement} dictates the placement of the label. It may be one of
+% |north west|, |north|, |north east|, |east|, |south east|, |south|,
+% |south west| or |west|. Also |center| is possible, even though it possibly
+% doesn't make a lot of sense. \autoref{fig:label_example} shows an example
+% with several labels.
+%
+% \begin{figure}
+% \centering
+% \begin{annotationimage}{width=6cm}{example-image}
+% \draw[image label = {north at north}];
+% \draw[image label = {north east at north east}];
+% \draw[image label = {east at east}];
+% \draw[image label = {south east at south east}];
+% \draw[image label = {south at south}];
+% \draw[image label = {south west at south west}];
+% \draw[image label = {west at west}];
+% \draw[image label = {north west at north west}];
+% \draw[image label = {center at center}];
+% \end{annotationimage}
+% \caption{Example for the placement labels}
+% \label{fig:label_example}
+% \end{figure}
+%
+% The label in \autoref{fig:pleiades} was drawn using the following code:
+%
+% |\draw[image label = {M45 at south east}];|
+%
+% \changes{v0.2}{2019/06/27}{add coordinate labels}
+% Another kind of label is the so-called ``coordinate label''. In contrast to
+% the image label, it may be positioned at arbitrary coordinates. The syntax is
+% similar to the |image label|:
+%
+% |\draw[coordinate label = {|\meta{text}| at (|\meta{coordinate}|)}];|
+%
+% An example of some coordinate labels is shown in \autoref{fig:coord-labels}.
+%
+% \begin{figure}
+% \centering
+% \begin{annotationimage}{width=6cm}{pleiades.jpg}
+% \draw[coordinate label = {1 at (0.1,0.3)}];
+% \draw[coordinate label = {2 at (0.4,0.6)}];
+% \draw[coordinate label = {3 at (0.65,0.25)}];
+% \draw[coordinate label = {4 at (0.9,0.4)}];
+% \draw[coordinate label = {5 at (0.62,0.62)}];
+% \draw[coordinate label = {6 at (0.83,0.8)}];
+% \draw[image label = {M45 at south east}];
+% \end{annotationimage}
+% \caption{Example of using coordinate labels}
+% \label{fig:coord-labels}
+% \end{figure}
+%
+% \autoref{fig:coord-labels} was created using the following code:
+% \begin{verbatim}
+% \draw[coordinate label = {1 at (0.1,0.3)}];
+% \draw[coordinate label = {2 at (0.4,0.6)}];
+% \draw[coordinate label = {3 at (0.65,0.25)}];
+% \draw[coordinate label = {4 at (0.9,0.4)}];
+% \draw[coordinate label = {5 at (0.62,0.62)}];
+% \draw[coordinate label = {6 at (0.83,0.8)}];
+% \draw[image label = {M45 at south east}];
+% \end{verbatim}
+%
+% \subsection{Adding annotations}
+%
+% An annotation is added with the aid of the \tkz{} macro |\draw|. The syntax is
+% as follows:
+%
+% |\draw[annotation |\meta{placement}| = {|\meta{text}| at |\meta{position}|}] to (|\meta{x}|, |\meta{y}|);|
+%
+% The \meta{placement} is one of: |above|, |right|, |below| or |left|. It tells
+% on which side of the image the annotation will appear. \meta{above} and
+% \meta{below} basically determine the $y$ coordinate of the text, while
+% \meta{left} and \meta{right} determine the $x$ coordinate of the text. The
+% remaining coordinate is determined using the \meta{position}.
+%
+% The \meta{text} is the actual text of the annotation.
+%
+% The \meta{x} and \meta{y} parameters are the actual coordinates where the
+% arrow should point to. Note that \pkg{} will automatically insert a small
+% distance between the arrow's tip and the coordinate given, such that the
+% arrow is close to the coordinate but does not cover it.
+%
+% For example, the code
+%
+% |\draw[annotation left = {Atlas at 0.3}] to (0.11,0.4);|
+%
+% draws the text ``Atlas'' on the left-hand side of the image, at $y=0.3$. The
+% arrow will point towards coordinate $(0.11, 0.4)$ but ends shortly before this
+% coordinate such that the interesting feature to be labelled is not covered by
+% the arrow's tip.
+%
+% \section{Configuring styles}
+%
+% \DescribeMacro{\imagelabelset}
+% Various options, like font size and so on, can be configured with the
+% |\imagelabelset| macro. It uses the key-value syntax from \tkz{}, e.g.:
+%
+% |\imagelabelset{|\meta{key}| = |\meta{value}|, ...}|
+%
+% Multiple \meta{key} and \meta{value} pairs may be combined. The following
+% sections list all possible configurations.
+%
+% |\imagelabelset| can be put anywhere, but it makes sense to put it into the
+% preamble of a document to ensure all images have the same look.
+%
+% There is also a default style. If no |\imagelabelset| command is present, the
+% default values for all options are taken. The default style used is as
+% follows:
+%
+% \begin{verbatim}
+% \imagelabelset{
+% coarse grid color = red,
+% fine grid color = gray,
+% image label font = \sffamily\bfseries\small,
+% image label distance = 2mm,
+% image label back = black,
+% image label text = white,
+% coordinate label font = \sffamily\bfseries\scriptsize,
+% coordinate label distance = 2mm,
+% coordinate label back = black,
+% coordinate label text = white,
+% annotation font = \normalfont\small,
+% arrow distance = 1.5mm,
+% border thickness = 0.6pt,
+% arrow thickness = 0.4pt,
+% tip size = 1.2mm,
+% outer dist = 0.5cm,
+% }
+% \end{verbatim}
+%
+% The individual keys are described in the following sections.
+%
+% \subsection{Grid color}
+%
+% In most cases, it will not be necessary to adjust the grid colors. However,
+% depending on the image, it may be desirable to do so. This is exactly what the
+% \meta{coarse grid color} and \meta{fine grid color} are used for. Any color
+% specification compatible to \tkz{} may be used. The defaults are red for the
+% coarse grid and gray for the fine grid.
+%
+% \subsection{Font and color for the labels}
+%
+% The font for the image labels may be configured with \meta{image label font}.
+% By default, the image labels are typeset with bold, small, sans-serif font.
+%
+% The background color of the image labels may be set using the
+% \meta{image label back} kay, whereas the text color is specified with the
+% \meta{image label text} key. Defaults for the background color and for the
+% text color are black and white, respectively.
+%
+% \subsection{Distance of image labels to the image border}
+%
+% The \meta{image label distance} key configures the distance, $d$, from the
+% image's border to the border of the image label, as shown in
+% \autoref{fig:imagelabeldistance_example}. By default, it is set to 2\,mm.
+%
+% \begin{figure}
+% \centering
+% \imagelabelset{
+% image label distance = 1cm}
+% \begin{annotationimage}{width=5cm}{example-image}
+% \draw[image label = {Label at south east}];
+% \draw[>=latex, red, <->] (1,0.3) -- ++(-1cm,0) node[above, midway] {$d$};
+% \draw[>=latex, red, <->] (0.7,0) -- ++(0,1cm) node[midway, right] {$d$};
+% \end{annotationimage}
+% \caption{Illustration of the \meta{image label distance}}
+% \label{fig:imagelabeldistance_example}
+% \end{figure}
+%
+% \subsection{Font for annotations}
+%
+% The font used for annotations is set by \meta{annotation font}. By default,
+% the |\normalfont| is used with small size.
+%
+% \subsection{Distance of arrow tips}
+%
+% As mentioned earlier, the arrows are shortened such that their tips don't
+% cover the desired point. \autoref{fig:arrowdistance_example} illustrates this.
+% All the arrows point to the same coordinate, $(0.5, 0.5)$, but they end at
+% the distance $x$ away from the point. This distance may be configured using
+% the \meta{arrow distance}. By default, this distance is set to 1.5\,mm. This
+% ensures that the arrow tips are close enough to the interesting features, but
+% not so close that they cover important parts of the image.
+%
+% \begin{figure}
+% \centering
+% \imagelabelset{arrow distance = 1cm}
+% \begin{annotationimage}{width=5cm}{example-image}
+% \draw[annotation right = {text at 0.5}] to (0.5,0.5);
+% \draw[annotation left = {text at 0.1}] to (0.5,0.5);
+% \draw[annotation left = {text at 0.7}] to (0.5,0.5);
+% \draw[annotation below = {text at 0.4}] to (0.5,0.5);
+% \draw[annotation above = {text at 0.8}] to (0.5,0.5);
+% \draw[red] (0.5,0.5) circle[radius = 1cm];
+% \draw[>=latex, red, <->] (0.5,0.5) -- ++(60:1cm) node[midway, left] {$x$};
+% \end{annotationimage}
+% \caption{Illustration of the \meta{arrow distance}}
+% \label{fig:arrowdistance_example}
+% \end{figure}
+%
+% \subsection{Thickness and size of the arrows}
+%
+% The arrows themselves consist of two parts: the inner part, which is the
+% actual arrow, and the border, which is, by default, a white border around the
+% arrow. The border is required to ensure that each arrow is visible, no matter
+% on what background it is drawn. The thickness of the black line can be
+% configured using the \meta{arrow thickness}, whose default value is 0.4\,pt.
+% The thickness of the border around the arrow is configured with the
+% \meta{border thickness}, having a default value of 0.6\,pt.
+%
+% The size of the round dot at the end of the arrows is configured using the
+% \meta{tip size}. \autoref{fig:arrowthickness_tipsize_example} illustrates
+% both, the \meta{arrow thickness}, and the \meta{tip size}, as parameters
+% $a$ and $b$, respectively.
+%
+% \begin{figure}
+% \centering
+% \imagelabelset{arrow thickness = 1cm, tip size = 2cm, arrow distance=0}
+% \let\tikzset\imagelabelset
+% \begin{tikzpicture}
+% \draw[annotation arrow] (0,0) -- (4cm,0);
+% \draw[>=latex, red, <->] (0.5,-0.5) -- ++(0,1cm) node[right, midway] {$a$};
+% \draw[>=latex, red, <->] (3cm,-1cm) -- ++(0,2cm) node[right, midway] {$b$};
+% \end{tikzpicture}
+% \caption{Illustration of the \meta{arrow thickness}, $a$, and
+% the \meta{tip size}, $b$}
+% \label{fig:arrowthickness_tipsize_example}
+% \end{figure}
+%
+% \subsection{Distance of annotation texts from the image}
+%
+% The parameter \meta{outer dist} configures how far away from the image the
+% annotation texts will be positioned. By default, this value is 0.5\,cm.
+%
+% \section{Implementation}
+% The only packages required are |tikz| and |xifthen|. If not already loaded,
+% they will be loaded automatically.
+% \begin{macrocode}
+\RequirePackage{tikz}
+\RequirePackage{xifthen}
+% \end{macrocode}
+% Some \tkz{} libraries are also reuiqred for proper operation.
+% \begin{macrocode}
+\usetikzlibrary{
+ arrows.meta,
+ calc,
+ positioning,
+ decorations,
+ decorations.markings,
+ math,
+}
+% \end{macrocode}
+% \subsection{Configuration}
+% For the |\imagelabelset| command, a |pgfkeys| family is defined. All
+% configurations (e.g. \meta{tip size} and so on) and styles are stored in the
+% PGF key |/imagelabels|. This ensures that these configurations don't overwrite
+% any other parameters the user may have set elsewhere.
+% \begin{macrocode}
+\pgfkeys{
+ /imagelabels/.is family,
+ /imagelabels/.search also={/tikz},
+}
+
+\def\imagelabelset{\pgfqkeys{/imagelabels}}
+% \end{macrocode}
+% Then, a set of macros is created which stores the values for the individual
+% configuration options.
+% \begin{macrocode}
+\imagelabelset{
+ coarse grid color/.store in = \maingridcolor,
+ fine grid color/.store in = \finegridcolor,
+}
+
+\imagelabelset{
+ image label font/.store in = \imagelabelfont,
+ image label distance/.store in = \imagelabelsep,
+ image label back/.store in = \imagelabelback,
+ image label text/.store in = \imagelabeltext,
+}
+
+\imagelabelset{
+ coordinate label font/.store in = \coordinatelabelfont,
+ coordinate label distance/.store in = \coordinatelabelsep,
+ coordinate label back/.store in = \coordinatelabelback,
+ coordinate label text/.store in = \coordinatelabeltext,
+}
+
+\imagelabelset{
+ annotation font/.store in = \annotationfont,
+ arrow distance/.store in = \arrowdistance,
+ arrow thickness/.store in = \arrowthickness,
+ tip size/.store in = \tipsize,
+ border thickness/.store in = \borderthickness,
+ outer dist/.store in = \labeloutersep,
+}
+% \end{macrocode}
+%
+% \subsection{Default configuration}
+% The default configuration is set. This will ensure that each of the previously
+% defined macros has a valid initial value, which may be overwritten by the
+% user.
+% \begin{macrocode}
+\imagelabelset{
+ coarse grid color = red,
+ fine grid color = gray,
+ image label font = \sffamily\bfseries\small,
+ image label distance = 2mm,
+ image label back = black,
+ image label text = white,
+ coordinate label font = \sffamily\bfseries\scriptsize,
+ coordinate label distance = 2mm,
+ coordinate label back = black,
+ coordinate label text = white,
+ annotation font = \normalfont\small,
+ arrow distance = 1.5mm,
+ border thickness = 0.6pt,
+ arrow thickness = 0.4pt,
+ tip size = 1.2mm,
+ outer dist = 0.5cm,
+}
+% \end{macrocode}
+%
+% \subsection{Environment declaration}
+% Next, the |annotationimage| environment is declared. It takes 3 arguments,
+% the first of which is optional. If it is omitted, its default value is empty.
+% \begin{macrocode}
+\newenvironment{annotationimage}[3][]{
+% \end{macrocode}
+% Each time a new |annotationimage| environment is opened, this code will ensure
+% that all the definitions stored under the PGF key |/imagelabels| are loaded.
+% Then, a new |tikzpicture| is created.
+% \begin{macrocode}
+\let\tikzset\imagelabelset
+ \begin{tikzpicture}
+% \end{macrocode}
+% The 2nd and 3rd arguments to the |annotationimage| are the size/scaling
+% options for the image, as well as the actual image file. Thus, a new \tkz{}
+% node called |image| is created; the node's content is the image.
+% \begin{macrocode}
+ \node[anchor=south west, inner sep=0]
+ (image) at (0,0) {\includegraphics[#2]{#3}};
+% \end{macrocode}
+% Using a scope ensures that the top-right corner always has coordinate $(1,1)$.
+% \begin{macrocode}
+ \begin{scope}[x={(image.south east)},y={(image.north west)}]
+% \end{macrocode}
+% Next, the first (optional) argument's value is checked. If the user said
+% |[grid]| to the first argument, the following code is executed.
+% \begin{macrocode}
+ \ifthenelse{\equal{#1}{grid}}{%
+% \end{macrocode}
+% This actually draws the coordinate grid.
+% \begin{macrocode}
+ \draw[very thin, draw=\finegridcolor, step=0.02]
+ (0,0) grid (1,1);
+ \draw[thin, draw=\maingridcolor, xstep=0.1, ystep=0.1]
+ (0,0) grid (1,1);
+% \end{macrocode}
+% then, the labels are put to the coordinate axes.
+% \begin{macrocode}
+ \foreach \x in {0,1,...,9} {
+ \node [anchor=north] at (\x/10,0) {\tiny 0.\x};
+ }
+ \node [anchor=north] at (1,0) {\tiny 1};
+
+ \foreach \y in {0,1,...,9} {
+ \node [anchor=east] at (0,\y/10) {\tiny 0.\y};
+ }
+ \node [anchor=east] at (0,1) {\tiny 1};
+ }{}
+}
+{
+% \end{macrocode}
+% Each time the |annotationimage| environment is closed, the previously opened
+% |scope| and |tikzpicture| environments need to be closed as well.
+% \begin{macrocode}
+ \end{scope}
+ \end{tikzpicture}}
+% \end{macrocode}
+%
+% \subsection{Style definitions for the annotations}
+% What follows is the definition of the styling for the annotations.
+% \begin{macrocode}
+\imagelabelset{
+% \end{macrocode}
+% This is the style for the annotation arrow itself.
+% \begin{macrocode}
+ annotation arrow/.style =
+ {
+% \end{macrocode}
+% The |preaction| first draws a thick white arrow. This arrow will become the
+% border.
+% \begin{macrocode}
+ preaction =
+ {
+ draw,
+ -{Circle[fill=white, length=\tipsize+2*\borderthickness,
+ width=\tipsize+2*\borderthickness]},
+ line width = 2*\borderthickness + \arrowthickness,
+ white,
+ shorten >= \arrowdistance,
+ },
+% \end{macrocode}
+% After the |preaction| has been performed, this will actually draw the
+% ``normal'' arrow.
+% \begin{macrocode}
+ draw,
+ -{Circle[fill=black, length=\tipsize, width=\tipsize]},
+ black,
+ line width = \arrowthickness,
+ shorten >= \borderthickness + \arrowdistance,
+ },
+% \end{macrocode}
+% All the annotation texts have a common style. This ensures they have the same
+% font etc. Setting the |inner sep| to 0.5\,ex ensures that the distance between
+% the text and the arrow is somewhat aesthetic. It is an empirically determined
+% value.
+% \begin{macrocode}
+ annotation node/.style =
+ {
+ font=\annotationfont,
+ inner sep = 0.5ex,
+ },
+% \end{macrocode}
+% Next comes the styles for the different annotation placements. For an
+% annotation being below the image, this style applies.
+% \begin{macrocode}
+ annotation below/.style args = {#1 at #2}{
+% \end{macrocode}
+% Using the annotation arrow style tells \tkz{} to draw an arrow as specified
+% above, using the geometry defined with |\imagelabelset|.
+% \begin{macrocode}
+ annotation arrow,
+% \end{macrocode}
+% After the arrow has been drawn, a further path is inserted, which is the
+% actual annotation text. For the annotations being above and below the image
+% special care must be taken: a |\strut| is appended to the label text to ensure
+% that texts being on the same side of the image are on the same line. Without
+% the strut, the texts may be differently aligned, depending on their letters --
+% e.g. letters ``p'' and ``g'' go slightly further down in the $y$ direction
+% than ``a'' or ``b''.
+% \begin{macrocode}
+ insert path = {
+ (#2,0) ++ (0,-\labeloutersep)
+ node[anchor = north, annotation node] {#1\strut}
+ }
+ },
+% \end{macrocode}
+% The remaining annotation styles are defined similarly.
+% \begin{macrocode}
+ annotation above/.style args = {#1 at #2}{
+ annotation arrow,
+ insert path = {
+ (#2,1.0) ++ (0,\labeloutersep)
+ node[anchor = south, annotation node] {#1\strut}
+ }
+ },
+ annotation left/.style args = {#1 at #2}{
+ annotation arrow,
+ insert path = {
+ (0,#2) ++ (-\labeloutersep,0)
+ node[anchor = east, annotation node] {#1}
+ }
+ },
+ annotation right/.style args = {#1 at #2}{
+ annotation arrow,
+ insert path = {
+ (1.0,#2) ++ (\labeloutersep,0)
+ node[anchor = west, annotation node] {#1}
+ }
+ },
+}
+% \end{macrocode}
+%
+% \subsection{Style definitions for the labels}
+% Next follows the style definition for the image labels. A general style
+% defines the appearance and color.
+% \begin{macrocode}
+\imagelabelset{
+ image label style/.style = {
+ rectangle,
+ minimum width = 5mm,
+ minimum height = 5mm,
+ fill = \imagelabelback,
+ text = \imagelabeltext,
+ font = \imagelabelfont,
+ },
+ coordinate label style/.style = {
+ rectangle,
+ minimum width = 3mm,
+ minimum height = 3mm,
+ fill = \coordinatelabelback,
+ text = \coordinatelabeltext,
+ font = \coordinatelabelfont,
+ },
+% \end{macrocode}
+% On the other hand, the |image label| style defines the actual image labels.
+% \begin{macrocode}
+ image label/.style args = {#1 at #2}{
+ insert path = {
+ (image.#2) node[outer sep = \imagelabelsep,
+ anchor=#2, image label style] {#1}
+ }
+ },
+ coordinate label/.style args = {#1 at (#2)}{
+ insert path = {
+ node[outer sep = \coordinatelabelsep,
+ anchor=center, coordinate label style] at (#2) {#1}
+ }
+ },
+}
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.ins b/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.ins
new file mode 100644
index 0000000000..bd19ab2356
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.ins
@@ -0,0 +1,57 @@
+%%
+%% Copyright (C) 2018 by Tobias Plüss <tpluess@ieee.org>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+
+\input docstrip
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2019 by Tobias Plüss <tpluess@ieee.org>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+\endpreamble
+
+
+\keepsilent
+\askforoverwritefalse
+
+\usedir{tex/latex/tikz-imagelabels}
+
+% the package
+\generate{\file{tikz-imagelabels.sty}{\from{tikz-imagelabels.dtx}{package}}}
+
+% message
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* tikz-imagelabels.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* tikz-imagelabels.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile
diff --git a/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.pdf b/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.pdf
new file mode 100644
index 0000000000..18288bce16
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-imagelabels/tikz-imagelabels.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-inet/README b/graphics/pgf/contrib/tikz-inet/README
new file mode 100644
index 0000000000..9969d5a3a2
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-inet/README
@@ -0,0 +1,7 @@
+Name of package: tkz-inet
+Author's name: Marc de Falco
+
+The purpose of this package is to extend tikz with some macros in order to
+draw interaction nets.
+
+License: LaTeX Projet Public License
diff --git a/graphics/pgf/contrib/tikz-inet/tikz-inet-doc.pdf b/graphics/pgf/contrib/tikz-inet/tikz-inet-doc.pdf
new file mode 100644
index 0000000000..ec185b9ce1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-inet/tikz-inet-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-inet/tikz-inet-doc.tex b/graphics/pgf/contrib/tikz-inet/tikz-inet-doc.tex
new file mode 100644
index 0000000000..9ee1a52db9
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-inet/tikz-inet-doc.tex
@@ -0,0 +1,343 @@
+% Copyright 2008 by Marc de Falco
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+\documentclass[10pt,a4paper]{article}
+\usepackage[fancy,color=orange]{tikz-inet}
+\usetikzlibrary{calc}
+\usepackage{ifthen}
+
+\usepackage{fancyvrb}
+\usepackage{a4wide}
+\usepackage{pgffor}
+
+\newenvironment{outputverbat}{%
+ \VerbatimEnvironment\begin{VerbatimOut}{\jobname.tmp}}
+ {\end{VerbatimOut}}
+\newcommand{\code}[1][0.5]{
+ \fbox{
+ \begin{minipage}{#1\textwidth}
+ \VerbatimInput[gobble=4,fontsize=\footnotesize]{\jobname.tmp}
+ \end{minipage}
+ }
+}
+\newcommand{\picturefancy}
+ {\begin{tikzpicture}\input{\jobname.tmp}\end{tikzpicture}}
+\newcommand{\picturenofancy}
+ {\begin{tikzpicture}\inetnofancy\input{\jobname.tmp}%
+ \inetfancy\end{tikzpicture}}
+\newenvironment{exampleH}{\VerbatimEnvironment\begin{outputverbat}}
+ {\end{outputverbat}
+ \begin{center}
+ \begin{tabular}{c|cc}\picturefancy & \picturenofancy & \code\end{tabular}
+ \end{center}}
+\newenvironment{exampleHv}{\VerbatimEnvironment\begin{outputverbat}}
+ {\end{outputverbat}
+ \begin{center}
+ \begin{tabular}{c}
+ \begin{tabular}{r|l}
+ \picturefancy & \picturenofancy
+ \end{tabular}
+ \\ \hline \\ \code[1]\end{tabular}
+ \end{center}}
+\newenvironment{exampleVv}{\VerbatimEnvironment\begin{outputverbat}}
+ {\end{outputverbat}
+ \begin{center}
+ \begin{tabular}{rl}
+ \begin{tabular}{c}
+ \picturefancy \\ \hline \\ \picturenofancy
+ \end{tabular}
+ & \code
+ \end{tabular}
+ \end{center}}
+
+\begin{document}
+
+\title{The package \textsf{tikz-inet}}
+\author{Marc de Falco}
+\maketitle
+
+\begin{abstract}
+ The purpose of this package is to extend tikz
+ with some simple macros in order to draw interaction
+ nets.
+\end{abstract}
+
+\section*{Changelog}
+\newcommand{\changeitem}[2]{\item \textbf{#1} \textit{#2}}
+\begin{itemize}
+ \changeitem{0.1}{initial release}
+\end{itemize}
+
+\section*{TODO}
+\begin{itemize}
+ \item add support for proofnets
+\end{itemize}
+
+\section{Installation}
+Install this package in your ressource directory or the root of your
+document directory.
+
+This package obviously needs tikz and pgf, but \textbf{this package needs
+the version, at least, 2.0 of them}.
+
+\section{Usage}
+\subsection{Loading the package}
+The command to load the package is the usual
+
+\verb+\usepackage[<+\emph{options}\verb+>]{tikz-inet}+
+
+where \emph{options} are a comma separated list of keys ranging in
+
+\begin{description}
+ \item[fancy] Select a fancier style suitable for talks but
+ likely to frighten referees
+ \item[color=] The global color used by the fancy style, must
+ be xcolor compliant color
+ \item[angle=] The default orientation of cells, in degrees (default to $0$, that is a cell pointing downward)
+\end{description}
+
+\subsection{Cell nodes}
+The cells are displayed using the internal node system of tikz.
+A special shape \emph{cellule} is inherited from the tikz shape
+isosceles triangle, thus sharing the original anchors.
+
+A macro is defined to encapsulate the node creation.
+
+\verb+\inetcell[+\emph{tikz display keys}\verb+](+\emph{node name}%
+\verb+){+\emph{symbol}\verb+}[+\emph{angle}\verb+]+
+
+Every parameter is optional but the symbol.
+
+\begin{description}
+ \item[symbol] The symbol of the cell, that is the text displayed
+ in the center of the cell. This text is not assumed to be
+ in math mode.
+ \item[node name] This is the name of the node that will be
+ used for referencing it or connecting wires. This name
+ default to the symbol, which is a convenient way to make simple
+ drawings, this can lead to some error as soon as the symbol
+ is not simple, like a math text.
+ \item[angle] The angle of the principal port of the cell,
+ defaults to $0$ which means that the cell has a downward
+ orientation with the principal port on the right.
+
+ Special values $U,D,L$ and $R$ are defined for up, down, left and right
+ orientation of the cell.
+ \item[tikz display keys] This additional display keys are
+ appended to the one used by the package and given to the
+ node construction. As it is appended after, it can be used to
+ redefine all display options.
+
+ A special key \verb+arity+ allows to define arity based anchors
+ for ports. This is not really useful in most cases as the
+ three predefined anchors are more likely to suit your need.
+\end{description}
+
+When using this macro a lot of parameters are given to tikz, one of
+them is the current cell display style. More on this can be found later.
+
+\subsubsection{Ports}
+Some anchors are named in order to reflect ports of the cell:
+\begin{description}
+ \item[pal] the apex of the triangle, where lies the principal port
+ \item[middle pax] an auxiliary port aligned with the principal port
+ \item[left pax, right pax] auxiliaries ports on each side of the opposite
+ edge of the apex
+ \item[pax $n$, $1 \le n \le arity$] numbered auxiliary ports associated
+ with the arity key.
+\end{description}
+
+Each anchor has a sibling a bit off the cell, it allows nice curving when
+branching wires. To get this special anchor, just add \verb+above+ to the
+other ones: e.g. \verb+above middle pax+
+
+\begin{center}
+\begin{tikzpicture}
+ \LARGE
+ \inetcell(c){Cell symbol}[90]
+ \fill (c.pal) circle (2pt)
+ node[above]{\footnotesize pal};
+ \fill (c.above pal) circle (2pt)
+ node[right]{\footnotesize above pal};
+ \fill (c.left pax) circle (2pt)
+ node[above left]{\footnotesize left pax};
+ \fill (c.above left pax) circle (2pt)
+ node[below left]{\footnotesize above left pax};
+ \fill (c.middle pax) circle (2pt)
+ node[above left]{\footnotesize middle pax};
+ \fill (c.above middle pax) circle (2pt)
+ node[below left]{\footnotesize above middle pax};
+ \fill (c.right pax) circle (2pt)
+ node[below left]{\footnotesize right pax};
+ \fill (c.above right pax) circle (2pt)
+ node[above left]{\footnotesize above right pax};
+ \foreach \x in {1,...,4} {
+ \fill (c.pax \x) circle (2pt)
+ node[right]{\footnotesize pax \x};
+ }
+\end{tikzpicture}
+\end{center}
+
+\subsection{Wires}
+Wires macros help connecting ports by taking into account the current
+wire display style and dealing implicitly with the \emph{above} anchors.
+The wires are displayed on a layer below the main one, so cells are always
+on top of layers. To change this you have to use \verb+\pgfsetlayers+.
+
+\verb+\inetwire[+\emph{tikz extra display keys}\verb+](cell1.port1)(cell2.port2)+
+
+The arguments are self-explanatory: this wire will connect the port \verb+port1+
+of \verb+cell1+ with the port \verb+port2+ of \verb+cell2+. It uses the current
+wire style.
+
+\verb+\inetloop[+\emph{tikz extra display keys}\verb+]+
+
+draws a loop, that is a circle with the current wire style
+
+\verb+\inetwirecoords[+\emph{tikz extra display keys}\verb+](A)(B)+
+
+draws a wire from node A to node B with the current wire style. It's useful
+to add extra wires non linking cell ports while using the current wire style.
+
+\verb+\inetwirefree[+\emph{tikz extra display keys}\verb+](cell.port)+
+
+draws a wire from \verb+port+ of \verb+cell+ to \verb+above port+
+of the same cell, with
+the current wire style. It allows fast declaration of free ports.
+
+\subsection{Boxes}
+Boxes uses the current box style when being displayed, they lie on a
+layer below the wire layer.
+
+\verb+\inetbox[+\emph{tikz extra display keys}\verb+]{+\emph{space
+separated list of cells in the box}\verb+}(+\emph{box node name}+\verb+)+
+display a box containing the given cells
+
+\verb+\inetprombox[+\emph{tikz extra display keys}\verb+]{+\emph{space
+separated list of cells in the box}\verb+}(+\emph{promotion cell
+node name}+\verb+)+: display a box and add a promotion cell below it,
+the name of the box is \verb+bname+ where \verb+name+ is the name
+of the promotion cell.
+
+
+
+\subsection{Other macros}
+\verb+\inetnofancy+, \verb+inetfancy+: hotswap the current display style
+
+\verb+\inetcellstyle+,\verb+\inetwirestyle+,\verb+\inetboxstyle+: get
+the currently used style for each type of drawing. \textbf{Don't renew this
+command to define your own style!}
+
+\verb+\inetcolor+: the current color for the fancy style, also passed
+as an argument of the non fancy style.
+
+If you want to call a style you have to give an argument, unless you have
+redefined the fancy styles to not use it. For a cell like element you have
+to give the key \verb+\inetcellstyle=\inetcolor+.
+
+\subsubsection{Tikz styles}
+This package define six styles :
+\begin{itemize}
+ \item \emph{cellstyle} and \emph{fancycellstyle}
+ \item \emph{wirestyle} and \emph{fancywirestyle}
+ \item \emph{boxstyle} and \emph{fancyboxstyle}
+\end{itemize}
+You can redefine this styles as for any other tikz styles with the
+command:
+
+\verb+\tikzset{+\emph{the style name}\verb+/.style={+\emph{tikz display keys}\verb+}}+
+
+\section{Examples}
+\subsection{Basic}
+ All examples are shown with the \textsf{fancy} key on the left.
+
+ \begin{exampleH}
+ \inetcell{A}
+ \end{exampleH}
+
+ \begin{exampleVv}
+ \matrix[row sep=0.5cm]{
+ \inetcell{A} & & \inetcell{B} \\
+ & \inetcell{C} & \\
+ };
+ \inetwirefree(A.middle pax)
+ \inetwirefree(B.middle pax)
+ \inetwirefree(C.pal)
+ \inetwire(A.pal)(C.right pax)
+ \inetwire(B.pal)(C.left pax)
+ \inetbox{(A) (B)}(b)
+ \end{exampleVv}
+
+\subsection{Style variations}
+
+ \begin{exampleVv}
+ \matrix{
+ \inetcell{A} &
+ \inetcell[fancycellstyle=green]{B} \\
+ \inetcell[bottom color=green]{C} &
+ \inetcell[draw=black]{D} \\
+ \inetcell[very thick]{E} &
+ \inetnofancy \inetcell{F} \inetfancy \\
+ };
+ \end{exampleVv}
+
+\subsection{Special cases}
+ \begin{exampleVv}
+ \inetcell{A}
+ \inetprombox{(A)}(pa)
+ \inetcell[at=(bpa.east),right=5pt]{B}
+ \inetwire(B.middle pax)(A.middle pax)
+ \inetprombox{(bpa)(pa)(B)}(p)
+ \inetwire(A.pal)(pa.middle pax)
+ \inetwirefree(pa.pal)
+ \inetwirefree(p.pal)
+ \inetwire(B.pal)(p.middle pax)
+ \end{exampleVv}
+
+ \begin{exampleVv}
+ \newcount\angle
+ \foreach \x in {1,...,12} {
+ \pgfmathsetcount{\angle}{360*\x/12+90}
+ \inetcell[\inetcellstyle=green!\x0,
+ at=(\the\angle-90:1.5cm)]
+ (c\x){A}[\angle]
+ }
+ \end{exampleVv}
+
+ \begin{exampleHv}
+ \newcount\angle
+ \newcount\order
+ \order=10
+ \newcount\arity
+ \pgfmathsetcount{\arity}{\order-1}
+ \foreach \x in {1,...,\order} {
+ \foreach \y/\symbol in {0/!,1/?} {
+ \pgfmathsetcount{\angle}
+ {(180*(2*\x+\y))/\order+90}
+ \inetcell[at=(\the\angle-90:\the\order*1.8ex),
+ arity=\order-1](c\y\x){\symbol}[\angle]
+ \inetwirefree(c\y\x.pal)
+ }
+ }
+
+ \newcount\nextcell
+ \newcount\nextport
+ \newcount\depth
+ \foreach \x in {1,...,\order} {
+ \foreach \y in {1,...,\arity} {
+ \pgfmathsetcount{\nextcell}
+ {mod(\x+\y-1,\order)+1}
+ \pgfmathsetcount{\nextport}
+ {\arity-\y+1}
+ \pgfmathsetcount{\depth}{(\x-1)*100/\order}
+ \inetwire[\inetwirestyle=\inetcolor!\the\depth!black]%
+ (c0\x.pax \y)(c1\the\nextcell.pax \the\nextport)
+ }
+ }
+ \end{exampleHv}
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-inet/tikz-inet.sty b/graphics/pgf/contrib/tikz-inet/tikz-inet.sty
new file mode 100644
index 0000000000..69a54dd721
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-inet/tikz-inet.sty
@@ -0,0 +1,401 @@
+% Copyright 2008 by Marc de Falco
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-inet}[2008/06/02 v0.1 tikz interaction nets library]
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+
+% We need this to load the \emph{isosceles triangle} shape
+\usetikzlibrary{shapes.geometric}
+\usetikzlibrary{shadows}
+\usetikzlibrary{positioning}
+\usetikzlibrary{matrix}
+\usetikzlibrary{fit}
+
+\pgfkeys{/pgf/.cd,
+ arity/.initial=4,
+}
+
+% The definition of the shape of a cell
+\pgfdeclareshape{cellule}{
+ \savedmacro\arity{%
+ \pgfmathtruncatemacro\arity{\pgfkeysvalueof{/pgf/arity}}%
+ }
+
+ \inheritsavedanchors[from=isosceles triangle]
+ \inheritanchorborder[from=isosceles triangle]
+ \inheritanchor[from=isosceles triangle]{center}
+ \inheritanchor[from=isosceles triangle]{left corner}
+ \inheritanchor[from=isosceles triangle]{right corner}
+ \inheritanchor[from=isosceles triangle]{south}
+ \inheritanchor[from=isosceles triangle]{west}
+ \inheritanchor[from=isosceles triangle]{north east}
+ \inheritanchor[from=isosceles triangle]{north west}
+ \inheritanchor[from=isosceles triangle]{south east}
+ \inheritanchor[from=isosceles triangle]{south west}
+ \inheritanchor[from=isosceles triangle]{east}
+ \inheritanchor[from=isosceles triangle]{north}
+ \inheritanchor[from=isosceles triangle]{lower left}
+ \inheritanchor[from=isosceles triangle]{apex}
+
+ \anchor{above pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{
+ \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+ \pgfpointlineattime{0.5}
+ {\lowerleftanchor}{\lowerrightanchor}
+ }
+ }
+ {\centerpoint}
+ }{\centerpoint}{\rotate}
+ }
+
+
+ \anchor{above middle pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{
+ \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+ \pgfpointlineattime{0.5}
+ {\lowerleftanchor}{\lowerrightanchor}
+ }
+ }
+ {\centerpoint}
+ }{\centerpoint}{\rotate}
+ }
+
+ \anchor{pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{\pgfpointlineattime{0.5}
+ {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+ {\centerpoint}{\rotate}
+ }
+
+
+ \anchor{middle pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{\pgfpointlineattime{0.5}
+ {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+ {\centerpoint}{\rotate}
+ }
+
+ \anchor{above left pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{
+ \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+ \pgfpointlineattime{0.25}
+ {\lowerleftanchor}{\lowerrightanchor}
+ }
+ }
+ {\centerpoint}
+ }{\centerpoint}{\rotate}
+ }
+
+
+ \anchor{left pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{\pgfpointlineattime{0.25}
+ {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+ {\centerpoint}{\rotate}
+ }
+
+ \anchor{above right pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{
+ \pgfpointadd{\pgfpoint{-2ex}{0cm}}{
+ \pgfpointlineattime{0.75}
+ {\lowerleftanchor}{\lowerrightanchor}
+ }
+ }
+ {\centerpoint}
+ }{\centerpoint}{\rotate}
+ }
+
+
+ \anchor{right pax}{
+ \trianglepoints
+ \pgfmathrotatepointaround{
+ \pgfpointadd{\pgfpointlineattime{0.75}
+ {\lowerleftanchor}{\lowerrightanchor}}{\centerpoint}}
+ {\centerpoint}{\rotate}
+ }
+
+ \anchor{above pal}{
+ \trianglepoints
+ \pgfpointadd{\centerpoint}{
+ \pgfmathrotatepointaround{
+ \pgfpointadd{\pgfpoint{2ex}{0cm}}{\apexanchor}}
+ {\pgfpointorigin}{\rotate}
+ }
+ }
+
+
+ \anchor{pal}{
+ \trianglepoints
+ \pgfpointadd{\centerpoint}{
+ \pgfmathrotatepointaround{
+ \pgfpointadd{\pgfpoint{-0.07cm}{0cm}}{\apexanchor}
+ }{\pgfpointorigin}{\rotate}
+ }
+ }
+
+
+ \backgroundpath{
+ \trianglepoints{
+ \pgftransformshift{\centerpoint}
+ \pgftransformrotate{\rotate}
+ \pgfpathmoveto{\apex}
+ \pgfpathlineto{
+ \pgfpointlineattime{0.8}{\apex}{\lowerleft}
+ }
+ \pgfpathcurveto{
+ \pgfpointlineattime{0.9}{\apex}{\lowerleft}
+ }{
+ \pgfpointlineattime{0.1}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+ }{
+ \pgfpointlineattime{0.2}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+ }
+ \pgfpathlineto{
+ \pgfpointlineattime{0.8}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+ }
+ \pgfpathcurveto{
+ \pgfpointlineattime{0.9}{\lowerleft}{\lowerleft\pgf@y-\pgf@y}
+ }{
+ \pgfpointlineattime{0.1}{\lowerleft\pgf@y-\pgf@y}{\apex}
+ }{
+ \pgfpointlineattime{0.2}{\lowerleft\pgf@y-\pgf@y}{\apex}
+ }
+
+ \pgfpathclose
+ }
+ }
+
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@cellule\endcsname{%
+ \c@pgf@counta\arity\relax%
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>0\relax%
+ \pgfutil@ifundefined{pgf@anchor@cellule@pax\space\the\c@pgf@counta}{%
+ % I HATE TeX
+ \expandafter\xdef\csname pgf@anchor@cellule@pax\space\the\c@pgf@counta\endcsname{%
+ \noexpand\pgfmathadd@{\noexpand\arity}{-1}%
+ \noexpand\c@pgf@countb=\noexpand\pgfmathresult%
+ \noexpand\pgfmathadd@{\the\c@pgf@counta}{-1}%
+ \noexpand\pgfmathdivide@{\noexpand\pgfmathresult}%
+ {\noexpand\the\c@pgf@countb}%
+ \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{0.5}%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{0.25}%
+ \noexpand\let\noexpand\time\noexpand\pgfmathresult%
+ \noexpand\trianglepoints%
+ \noexpand\pgfmathrotatepointaround{%
+ \noexpand\pgfpointadd{%
+ \noexpand\pgfpointlineattime%
+ {\noexpand\time}%
+ {\noexpand\lowerleftanchor}%
+ {\noexpand\lowerrightanchor}%
+ }{\noexpand\centerpoint}%
+ }{\noexpand\centerpoint}{\noexpand\rotate}%
+ }%
+ \expandafter\xdef\csname pgf@anchor@cellule@above pax\space\the\c@pgf@counta\endcsname{%
+ \noexpand\pgfmathadd@{\noexpand\arity}{-1}%
+ \noexpand\c@pgf@countb=\noexpand\pgfmathresult%
+ \noexpand\pgfmathadd@{\the\c@pgf@counta}{-1}%
+ \noexpand\pgfmathdivide@{\noexpand\pgfmathresult}%
+ {\noexpand\the\c@pgf@countb}%
+ \noexpand\pgfmathmultiply@{\noexpand\pgfmathresult}{0.5}%
+ \noexpand\pgfmathadd@{\noexpand\pgfmathresult}{0.25}%
+ \noexpand\let\noexpand\time\noexpand\pgfmathresult%
+ \noexpand\trianglepoints
+ \noexpand\pgfmathrotatepointaround{%
+ \noexpand\pgfpointadd{%
+ \noexpand\pgfpointadd{
+ \noexpand\pgfpoint{-2ex}{0cm}}{%
+ \noexpand\pgfpointlineattime%
+ {\noexpand\time}%
+ {\noexpand\lowerleftanchor}%
+ {\noexpand\lowerrightanchor}%
+ }%
+ }{\noexpand\centerpoint}%
+ }%
+ {\noexpand\centerpoint}%
+ {\noexpand\rotate}%
+ }%
+ }{\c@pgf@counta0\relax}%
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop%
+ }%
+
+}
+
+\newcommand\inetoptions{\setkeys{inet}}
+\newcommand{\inetcolor}{red}
+\define@key{inet}{color}{\renewcommand{\inetcolor}{#1}}
+\newcommand{\inet@defaultangle}{0}
+\define@key{inet}{defaultangle}{\renewcommand{\inet@defaultangle}{#1}}
+
+\newcount\inet@angle
+\inet@angle=0
+
+\tikzset{wirestyle/.style = {draw, line width=0.15ex, line cap=rect}}
+\tikzset{cellstyle/.style = {
+ draw, line width=0.2ex, fill=white,
+ inner sep=0.2ex,
+ }}
+\tikzset{boxstyle/.style = {draw,line width=0.1ex}}
+\tikzfading[name=inet fading,
+ left color=transparent!0,
+ right color=transparent!100]
+\tikzset{fancywirestyle/.style = {draw, line width=0.15ex,
+ draw=black!50!#1,
+ double=white!50!#1,double distance=0.2ex,
+ }}
+\tikzset{fancycellstyle/.style={%
+ general shadow={fill, shadow scale=1.0,%
+ shadow xshift=0.3ex,shadow yshift=-0.3ex,opacity=0.2},
+ line width=0.15ex,%
+ inner sep=0.2ex,%
+ draw=black!50!#1,%
+ top color=#1,%
+ bottom color=white,%!80!#1,%
+ shading angle=\inet@angle,%
+ }}
+\tikzset{fancyboxstyle/.style = {line width=0.2ex,fill opacity=0.5,
+ fill=white!20!#1,draw=black!30!#1}}
+
+\newif\ifinet@fancy\inet@fancyfalse
+
+\DeclareOption{fancy}{\inet@fancytrue}
+\DeclareOption{nofancy}{\inet@fancyfalse}
+
+\newcommand{\inetfancy}{\inet@fancytrue}
+\newcommand{\inetnofancy}{\inet@fancyfalse}
+
+\newcommand{\inetsetfancycellstyle}[1]{
+ \tikzset{fancycellstyle/.style = {#1}}%
+}
+\newcommand{\inetsetfancywirestyle}[1]{
+ \tikzset{fancycellstyle/.style = {#1}}%
+}
+
+\DeclareOption*{\expandafter\inetoptions\expandafter{\CurrentOption}}
+\ProcessOptions\relax
+
+\pgfdeclarelayer{wire layer}
+\pgfdeclarelayer{box layer}
+\pgfsetlayers{box layer,wire layer,main}
+
+\makeatletter
+
+\newcommand{\inetcellstyle}{%
+ \ifinet@fancy fancycellstyle\else cellstyle\fi%
+}
+
+\newcommand{\inetwirestyle}{%
+ \ifinet@fancy fancywirestyle\else wirestyle\fi%
+}
+
+\newcommand{\inetboxstyle}{%
+ \ifinet@fancy fancyboxstyle\else boxstyle\fi%
+}
+
+
+\newcommand{\inetcell}[1][]{%
+ \@ifnextchar({%
+ \inetcell@ii[#1]%
+ }{%
+ \inetcell@iib[#1]%
+ }%
+}
+
+\def\inetcell@iib[#1]#2{%
+ \inetcell@ii[#1](#2){#2}%
+}
+
+\def\inetcell@ii[#1](#2)#3{%
+ \@ifnextchar[{\inetcell@iii[#1](#2){#3}%
+ }{\inetcell@iii[#1](#2){#3}[\inet@defaultangle]}%
+}
+
+\def\inetcell@iii[#1](#2)#3[#4]{%
+ \ifthenelse{\equal{#4}{U}}{\inet@angle=180}{%
+ \ifthenelse{\equal{#4}{D}}{\inet@angle=0}{%
+ \ifthenelse{\equal{#4}{L}}{\inet@angle=270}{%
+ \ifthenelse{\equal{#4}{R}}{\inet@angle=90}{\inet@angle=#4}%
+ }%
+ }%
+ }%
+ \node[%
+ \inetcellstyle=\inetcolor%
+ ,shape border rotate=\inet@angle-90%
+ ,cellule, isosceles triangle apex angle=60,%
+ shape border uses incircle, #1] (#2) {#3};%
+}
+
+\def\inetwirecoords(#1)(#2){%
+ \begin{pgfonlayer}{wire layer}%
+ \draw[\ifinet@fancy fancywirestyle\else wirestyle\fi=\inetcolor]%
+ (#1) -- (#2);%
+ \end{pgfonlayer}
+}
+
+\def\inetwire{%
+ \@ifnextchar[{\inetwire@i}{\inetwire@i[]}%
+}
+
+\def\inetwire@i[#1](#2.#3)(#4.#5){%
+ \begin{pgfonlayer}{wire layer}%
+ \draw[\inetwirestyle=\inetcolor,#1]%
+ (#2.#3) .. controls (#2.above #3) and (#4.above #5) .. (#4.#5);%
+ \end{pgfonlayer}%
+}
+
+\def\inetwirefree{%
+ \@ifnextchar[{\inetwirefree@i}{\inetwirefree@i[]}%
+}
+\def\inetwirefree@i[#1](#2.#3){%
+ \begin{pgfonlayer}{wire layer}%
+ \draw[\ifinet@fancy fancywirestyle\else wirestyle\fi=\inetcolor,#1]%
+ (#2.#3) -- (#2.above #3);%
+ \end{pgfonlayer}%
+}
+
+\newcommand{\inetloop}[1][]{%
+ \begin{pgfonlayer}{wire layer}%
+ \node[\ifinet@fancy fancywirestyle\else wirestyle\fi=\inetcolor,%
+ #1,circle,inner sep=6pt] {};
+ \end{pgfonlayer}%
+}
+
+\newcommand{\inetbox}[1][]{%
+ \inetbox@i[#1]%
+}
+
+\def\inetbox@i[#1]#2(#3){%
+ \begin{pgfonlayer}{box layer}%
+ \node[\ifinet@fancy fancyboxstyle\else boxstyle\fi=\inetcolor,
+ fit=#2,inner sep=10pt,#1] (#3) {};%
+ \end{pgfonlayer}%
+}
+
+\newcommand{\inetprombox}[1][]{%
+ \inetprombox@i[#1]%
+}
+\def\inetprombox@i[#1]#2(#3){%
+ \inetbox@i[#1]{#2}(b#3)%
+ \inetcell[above=-4ex of b#3.south](#3){$!$}%
+ %\inetcell[above=-4ex of $(b#3.south west)!.75!(b#3.south)$](#3){$!$}%
+}
+
+\makeatother
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-kalender/README.md b/graphics/pgf/contrib/tikz-kalender/README.md
new file mode 100644
index 0000000000..1d19e619b5
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/README.md
@@ -0,0 +1,87 @@
+## A LaTeX based calendar using TikZ
+
+For usage see the example files »tikz-kalender-example1.tex«,
+»tikz-kalender-example2.tex«, and »*.events«. See also my [Git
+repository](https://github.com/rolfn/kalenderRN). The Code is inspired by this
+[document](http://www.texample.net/tikz/examples/a-calender-for-doublesided-din-a4/)
+and has the »Creative Commons attribution license (CC-BY-SA)«.
+
+The class »tikz-kalender« requires the package »tikz« and the tkiz libraries
+»calc« and »calendar«.
+
+### Short Description
+
+#### Keys for the macro \setup
+
+`\setup[key1=value1,key2=value2,..]`
+
+##### General
+
+* `year=`_year of the calendar_
+* `yearText=`_text for the year_ (default: 4-digit current year)
+* `title=`_title of the calendar_
+* `events=`_list of files with events or periods_ (without the ending `.events`)
+* `showweeknumbers=`_true or empty or false_ (showing the number of the week)
+* `lang=`_language for marking_ (option passed to package babel)
+* `paper=`_papersize abbreviation_ (understandable by package geometry;
+default: a4)
+* `print=`_true or empty or false_ (printer-friendly orientation for
+double-side printing; default: false)
+* `xcoloroptions=`_options_ (passed to package xcolor; default: svgnames)
+
+##### Color definitions
+
+* `titleColor=...` (default: dark)
+* `eventColor=...` (default: medium)
+* `periodColor=...` (default: period)
+* `monthBGcolor=...` (background; default: dark)
+* `monthColor=...` (default: white)
+* `workdayColor=...`
+* `saturdayColor=...` (default: bright)
+* `sundayColor=...` (default: medium)
+
+The default colors:
+
+* dark: `{HTML}{A57C00}`
+* medium: `dark!35`
+* bright: `dark!20`
+* period: `gray!30`
+
+##### Font definitions
+
+* `titleFont=...`
+* `yearFont=...`
+* `monthFont=...`
+* `dayFont=...`
+* `dayNbFont=...`
+* `weekNbFont=...`
+* `eventFont=...`
+
+##### Examples
+
+* `titleFont={\fontsize{1.2em}{1.2em}}`
+* `yearFont={\itshape}`
+* `titleColor=IndianRed3` (required `xcoloroptions={x11names}`)
+
+#### Macros \event and \period inside of events files
+
+##### Examples
+
+* `\event{\year-10-09}{John Lennon (1940)}`; uncolored every year event
+
+* `\event*{2016-03-27}{Ostersonntag}`; event colored with the color defined
+by the key `eventColor` (general holiday)
+
+* `\event*{2016-07-10}{Fußball-EM: Endspiel}[color=DarkTurquoise]`;
+colored event with a special color
+
+* `\period{2016-12-23}{2017-01-03}`; period colored with the color defined
+by the key `periodColor`
+
+* `\period{2016-02-01}{2016-02-06}[color=LightGreen]`; period colored with a
+special color
+
+* `\period{2016-09-12}{2016-10-04}[color=red!30,name=Urlaub]`; named period
+colored with a special color
+
+Rolf Niepraschk, 2018-04-01
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/Feiertage-2016.events b/graphics/pgf/contrib/tikz-kalender/doc/Feiertage-2016.events
new file mode 100644
index 0000000000..99be5b7aaa
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/Feiertage-2016.events
@@ -0,0 +1,18 @@
+
+% Jährlich wiederkehrende Termine sollten das Makro \year enthalten.
+% Yearly events should contain the macro \year.
+
+\event*{\year-01-01}{Neujahr}
+\event*{2016-03-25}{Karfreitag}
+\event*{2016-03-27}{Ostersonntag}
+\event*{2016-03-28}{Ostermontag}
+\event*{\year-05-01}{Tag der Arbeit}
+\event*{2016-05-05}{Himmelfahrt}
+\event{2016-05-15}{Pfingstsonntag}
+\event*{2016-05-16}{Pfingstmontag}
+\event*{\year-10-03}{Tag der deutschen Einheit}
+\event{\year-12-24}{Heiligabend}
+\event*{\year-12-25}{1. Weihnachtstag}
+\event*{\year-12-26}{2. Weihnachtstag}
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/Geburtstage.events b/graphics/pgf/contrib/tikz-kalender/doc/Geburtstage.events
new file mode 100644
index 0000000000..f15685f9fb
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/Geburtstage.events
@@ -0,0 +1,8 @@
+
+% Jährlich wiederkehrende Termine sollten das Makro \year enthalten.
+% Yearly events should contain the macro \year.
+
+\event{\year-03-14}{Albert Einstein (1879)}
+\event{\year-10-09}{John Lennon (1940)}
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/Schulferien-2016.events b/graphics/pgf/contrib/tikz-kalender/doc/Schulferien-2016.events
new file mode 100644
index 0000000000..ba111846f2
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/Schulferien-2016.events
@@ -0,0 +1,9 @@
+
+\period{2016-02-01}{2016-02-06}[color=LightGreen]% Winterferien in Berlin
+\period{2016-03-21}{2016-04-02}[color=LightGreen]% Osterferien in Berlin
+\period{2016-05-17}{2016-05-18}[color=LightGreen]% Pfingstferien in Berlin
+\period{2016-07-21}{2016-09-02}[color=LightGreen]% Sommerferien in Berlin
+\period{2016-10-17}{2016-10-28}[color=LightGreen]% Herbstferien in Berlin
+\period{2016-12-23}{2017-01-03}[color=LightGreen]% Weihnachtsferien in Berlin
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/Sonstiges.events b/graphics/pgf/contrib/tikz-kalender/doc/Sonstiges.events
new file mode 100644
index 0000000000..06f96d0f63
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/Sonstiges.events
@@ -0,0 +1,4 @@
+
+\event*{2016-07-10}{Fußball-EM: Endspiel}[color=DarkTurquoise]
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/Urlaub.events b/graphics/pgf/contrib/tikz-kalender/doc/Urlaub.events
new file mode 100644
index 0000000000..51fd4adbe4
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/Urlaub.events
@@ -0,0 +1,4 @@
+
+\period{2016-09-12}{2016-10-04}[color=red!30,name=Urlaub]
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.pdf b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.pdf
new file mode 100644
index 0000000000..67f3b893a1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.tex b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.tex
new file mode 100644
index 0000000000..9b3cd290eb
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example1.tex
@@ -0,0 +1,15 @@
+\listfiles
+\documentclass{tikz-kalender}
+
+% a simple calender
+
+\setup{%
+,year=2016
+,title={Termine}
+,events={Schulferien-2016,Feiertage-2016,Geburtstage,Urlaub,Sonstiges}
+}
+
+\begin{document}
+ \makeKalender
+\end{document}
+
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.pdf b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.pdf
new file mode 100644
index 0000000000..6147347480
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.tex b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.tex
new file mode 100644
index 0000000000..8b08e56618
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/doc/tikz-kalender-example2.tex
@@ -0,0 +1,36 @@
+\listfiles
+
+\documentclass{tikz-kalender}
+
+% all options:
+\setup{%
+,lang=german% language for day names and month names; default: english
+,paper=a0% papersize understandable by the geometry package; default: a4
+,year=2016% base of the calender calculation
+,yearFont={\itshape}% additional font definition
+,yearText={}%default: the content of the year option
+,title={2016}
+,titleFont={\fontsize{1.4em}{1.4em}}% ~140% of default
+,titleColor=IndianRed3
+,showweeknumbers% default: false
+,events={Geburtstage}% events and periods (files with ending ".events")
+,print=true% printer-friendly orientation (double-side printing)
+,xcoloroptions={x11names}% additional options; default: svgnames
+%,monthFont% additional font definition
+%,dayFont% additional font definition
+%,dayNbFont% additional font definition
+%,weekNbFont% additional font definition
+%,eventFont% additional font definition
+%,eventColor% additional font definition
+%,periodColor% additional font definition
+%,monthBGcolor% additional font definition
+%,monthColor% additional font definition
+%,workdayColor% additional font definition
+%,saturdayColo% additional font definitionr
+%,sundayColor% additional font definition
+}
+
+\begin{document}
+ \makeKalender
+\end{document}
+
diff --git a/graphics/pgf/contrib/tikz-kalender/tikz-kalender-translation.clo b/graphics/pgf/contrib/tikz-kalender/tikz-kalender-translation.clo
new file mode 100644
index 0000000000..e119dfc6b1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/tikz-kalender-translation.clo
@@ -0,0 +1,22 @@
+\ProvidesFile{tikz-kalender-translation.clo}[2019/06/05 v1.0c
+ Calendar translations (RN)]
+
+% shorter strings than the default definitions
+
+\deftranslation[to=English]{Mon}{Mo}% Monday
+\deftranslation[to=English]{Tue}{Tu}% Tuesday
+\deftranslation[to=English]{Wed}{We}% Wednesday
+\deftranslation[to=English]{Thu}{Th}% Thursday
+\deftranslation[to=English]{Fri}{Fr}% Friday
+\deftranslation[to=English]{Sat}{Sa}% Saturday
+\deftranslation[to=English]{Sun}{Su}% Sunday
+
+\deftranslation[to=Polish]{Mon}{Po}% Poniedziałek
+\deftranslation[to=Polish]{Tue}{Wt}% Wtorek
+\deftranslation[to=Polish]{Wed}{\'{S}r}% Åšroda
+\deftranslation[to=Polish]{Thu}{Cz}% Czwartek
+\deftranslation[to=Polish]{Fri}{Pi}% PiÄ…tek
+\deftranslation[to=Polish]{Sat}{So}% Sobota
+\deftranslation[to=Polish]{Sun}{Ni}% Niedziela
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-kalender/tikz-kalender.cls b/graphics/pgf/contrib/tikz-kalender/tikz-kalender.cls
new file mode 100644
index 0000000000..cba4d247b1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-kalender/tikz-kalender.cls
@@ -0,0 +1,384 @@
+%
+% Author: Rolf Niepraschk, https://github.com/rolfn/kalenderRN
+%
+% inspired by http://www.texample.net/tikz/examples/a-calender-for-doublesided-din-a4/
+% Original author: Robert Krause
+% License: Creative Commons attribution license (CC-BY-SA)
+
+\setcounter{errorcontextlines}{100}
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesClass{tikz-kalender}[2019/06/05 v0.4e Calendar class (RN)]
+
+\DeclareOption*{\OptionNotUsed}
+\ProcessOptions\relax
+
+\newcommand*\RN@events@files{}
+\newcommand*\RN@titleFont{}
+\newcommand*\RN@yearFont{}
+\newcommand*\RN@monthFont{}
+\newcommand*\RN@dayFont{}
+\newcommand*\RN@dayNbFont{}
+\newcommand*\RN@weekNbFont{}
+\newcommand*\RN@eventFont{}
+\newcommand*\RN@normalFont{}
+\newcommand*\RN@title{}
+\newcommand*\RN@year{}\edef\RN@year{\the\numexpr\year}
+\newcommand*\RN@yearText{\RN@year}
+\newcommand*\RN@period@name{}
+\newcommand*\RN@xcolorOptions{}
+\newcommand*\RN@events@I{}
+\newcommand*\RN@events@II{}
+\newcommand*\RN@backgrounds{}
+\newcommand*\RN@periods{}
+\newcommand*\RN@tempa{}
+\newcommand*\RN@tempb{}
+
+\newcommand*\RN@titleColor{dark}
+\newcommand*\RN@eventColor{medium}
+\newcommand*\RN@monthBGcolor{dark}
+\newcommand*\RN@monthColor{white}
+\newcommand*\RN@workdayColor{none}
+\newcommand*\RN@saturdayColor{bright}
+\newcommand*\RN@sundayColor{medium}
+\newcommand*\RN@periodColor{period}
+
+\newcounter{weeknumber}
+\newsavebox\RN@pageI
+\newsavebox\RN@pageII
+\newsavebox\RN@tempbox
+
+\newdimen\RN@xunit
+\newdimen\RN@yunit
+\newdimen\RN@calheight
+\newdimen\RN@calwidth
+\newdimen\RN@daywidth
+\newdimen\RN@daysep
+\newdimen\RN@dayheight
+\newdimen\RN@eventwidthL
+\newdimen\RN@eventwidthS
+
+\newif\ifRN@showweeknumbers \RN@showweeknumbersfalse
+\newif\ifRN@print \RN@printfalse
+\newif\ifRN@XeOrLua \RN@XeOrLuafalse
+\RequirePackage{ifluatex,ifxetex}
+\ifxetex\RN@XeOrLuatrue\else\ifluatex\RN@XeOrLuatrue\fi\fi
+
+\LoadClass{article}
+
+\RequirePackage{pgfkeys,etoolbox,ragged2e}
+
+\pgfkeys{
+ /RN/.cd,
+ showweeknumbers/.is if = RN@showweeknumbers,
+ print/.is if = RN@print,
+ events/.store in=\RN@events@files,
+ titleFont/.store in=\RN@titleFont,
+ yearFont/.store in=\RN@yearFont,
+ monthFont/.store in=\RN@monthFont,
+ dayFont/.store in=\RN@dayFont,
+ dayNbFont/.store in=\RN@dayNbFont,
+ weekNbFont/.store in=\RN@weekNbFont,
+ eventFont/.store in=\RN@eventFont,% ???
+ title/.store in=\RN@title,
+ year/.store in=\RN@year,
+ yearText/.store in=\RN@yearText,
+ titleColor/.store in=\RN@titleColor,
+ eventColor/.store in=\RN@eventColor,
+ periodColor/.store in=\RN@periodColor,
+ monthBGcolor/.store in=\RN@monthBGcolor,
+ monthColor/.store in=\RN@monthColor,
+ workdayColor/.store in=\RN@workdayColor,
+ saturdayColor/.store in=\RN@saturdayColor,
+ sundayColor/.store in=\RN@sundayColor,
+ xcoloroptions/.code={\PassOptionsToPackage{#1}{xcolor}},
+ lang/.code={\PassOptionsToPackage{#1}{babel}%
+ \PassOptionsToPackage{#1}{translator}},
+ paper/.code={\PassOptionsToPackage{#1paper}{geometry}}
+}
+
+\newcommand*\setup[1]{\pgfqkeys{/RN}{#1}}
+
+\PassOptionsToPackage{a4paper}{geometry}
+\PassOptionsToPackage{svgnames}{xcolor}
+
+\ifRN@XeOrLua
+ \RequirePackage{fontspec,unicode-math}
+ \setmathfont{latinmodern-math}[%
+ Extension=.otf,math-style=ISO,bold-style=ISO,
+ ]
+ \setsansfont{texgyreheros}[%
+ Extension=.otf,Ligatures=TeX,
+ UprightFont= *-regular,
+ BoldFont=*-bold,
+ ItalicFont=*-italic,
+ BoldItalicFont=*-bolditalic
+ ]
+\else
+ \RequirePackage[T1]{fontenc}
+ \RequirePackage{textcomp}
+ \RequirePackage{lmodern}
+ \RequirePackage{tgheros}
+\fi
+
+\renewcommand*\familydefault{\sfdefault}
+
+\AtEndPreamble{% "etoolbox"
+ \ifRN@print
+ \RequirePackage{graphicx}
+ \PassOptionsToPackage{portrait}{geometry}
+ \else
+ \PassOptionsToPackage{landscape}{geometry}
+ \fi
+ \RequirePackage[margin={0mm,0mm}]{geometry}
+ \ifRN@XeOrLua\else
+ \@ifpackageloaded{inputenc}{}{\RequirePackage[utf8]{inputenc}}%
+ \fi
+ \RequirePackage{babel,translator,tikz}
+ \@ifpackagelater{pgf}{2019/05/10}{}{%
+ \def\pgfutil@translate#1{\translate{#1}}%
+ % Correct the wrong definition in `pgfutil-latex.def'
+ }%
+ \input{tikz-kalender-translation.clo}
+ \usetikzlibrary{calendar}
+}
+
+\AtBeginDocument{%
+ \definecolor{dark}{HTML}{A57C00}
+ \colorlet{medium}{dark!35}
+ \colorlet{bright}{dark!20}
+ \colorlet{period}{gray!30}
+ \RN@calwidth=\ifRN@print\paperheight\else\paperwidth\fi
+ \RN@calheight=\ifRN@print\paperwidth\else\paperheight\fi
+ \@tempcnta=\RN@calwidth
+ \divide\@tempcnta by \@M %
+ \RN@xunit=\@tempcnta sp % 0.0845pt (a4)
+ \@tempcnta=\RN@calheight
+ \divide\@tempcnta by \@M %
+ \RN@yunit=\@tempcnta sp % 0.05974pt (a4)
+ \RN@daywidth=1515\RN@xunit% 45mm (a4)
+ \RN@daysep=118\RN@xunit % 3.5mm (a4)
+ \RN@dayheight=192\RN@xunit% 5.7mm (a4)
+ \RN@setFont{RN@dayFont}{134}% 8pt (a4)
+ \RN@setFont{RN@dayNbFont}{167}% 10pt (a4)
+ \RN@setFont{RN@eventFont}{134}% 8pt (a4)
+ \RN@setFont[\normalfont]{RN@normalFont}{167}% 10pt (a4)
+ \RN@setFont{RN@weekNbFont}{134}% 8pt (a4)
+ \RN@setFont[\bfseries]{RN@monthFont}{167}% 10pt (a4)
+ \RN@setFont[\bfseries]{RN@titleFont}{666}% 40pt (a4)
+ \RN@setFont[\bfseries]{RN@yearFont}{1000}% 60pt (a4)
+ \RN@normalFont
+ \settowidth\@tempdima{\RN@formatDayNb{99}\RN@formatDay{0}}%
+ \RN@eventwidthL=\dimexpr\RN@daywidth-\@tempdima
+ \settowidth\@tempdima{\setcounter{weeknumber}{99}%
+ \RN@formatWeekNb{weeknumber}%
+ }
+ \RN@eventwidthS=\dimexpr\RN@eventwidthL-\@tempdima
+}
+
+\pgfkeys{%
+ /RN/.is family, /RN,
+ period/.cd,
+ color/.estore in=\RN@periodColor,
+ name/.estore in=\RN@period@name
+}
+\pgfkeys{%
+ /RN/.is family, /RN,
+ event/.cd,
+ color/.estore in = \RN@eventColor
+}
+
+\newcommand\RN@formatTitle[3]{%
+ \raisebox{-.3\height}{\parbox[b]{#1}{%
+ \color{\RN@titleColor}%
+ \makebox[0pt][l]{\RN@yearFont#2}\hfill
+ \RN@titleFont#3\hfill\mbox{}%
+ }}%
+}
+\newcommand*\RN@formatDayNb[1]{%
+ \RN@dayNbFont#1\hspace{50\RN@xunit}%
+}
+\newcommand*\RN@formatDay[1]{%
+ \RN@dayFont\pgfcalendarweekdayshortname{#1}%
+}
+\newcommand*\RN@formatWeekNb[1]{%
+ \hspace{30\RN@xunit}\RN@weekNbFont
+ \raisebox{.15ex}{[\raisebox{-.15ex}{\arabic{#1}}]}%
+ \hspace{20\RN@xunit}%
+}
+\newcommand*\RN@formatEvent[2]{%
+ \RN@eventFont
+ \def\RN@tempa{\strut#2}%
+ \settowidth\@tempdima{\mbox{\RN@tempa}}%
+ \ifdim\@tempdima>#1 %
+ \@tempdimb=\dimexpr\f@size pt %
+ \@tempdimb=.8\@tempdimb%
+ \def\RN@tempa{\fontsize{\@tempdimb}{1.1\@tempdimb}\selectfont#2}%
+ \fi
+ \makebox[-50\RN@xunit][r]{\raisebox{0.55\totalheight}[\totalheight]{%
+ \parbox[c]{#1}{\raggedleft\hskip\z@\RN@tempa}}}% \nointerlineskip
+}
+
+\newcommand*\RN@setFont[3][]{%
+ \@tempdima=#3\RN@yunit \@tempdimb=1.2\@tempdima %
+ \expandafter\protected@edef\csname#2\endcsname{\noexpand\fontsize
+ {\the\@tempdima}{\the\@tempdimb}#1\csname#2\endcsname\noexpand\selectfont}%
+}
+
+\newcommand*\period[2]{%
+ \@ifnextchar[{\RN@period@i{#1}{#2}}{\RN@period@i{#1}{#2}[]}%
+}
+\newcommand*\RN@period@i{}
+\def\RN@period@i#1#2[#3]{%
+ \begingroup
+ \pgfkeys{/RN/period/.cd, #3}%
+ \edef\@tempa{%
+ \noexpand\ifdate{between=#1 and #2}{%
+ \noexpand\tikzset{every day/.style={fill=\RN@periodColor}}}{}%
+ }%
+ \expandafter\g@addto@macro\expandafter\RN@periods\expandafter{\@tempa}%
+ \ifx\RN@period@name\@empty\else
+ \pgfcalendar{}{#1}{#2}{%
+ \edef\RN@tempa{\pgfcalendarcurrentyear-\pgfcalendarcurrentmonth-%
+ \pgfcalendarcurrentday}%
+ \let\RN@event@ii=\RN@event@ii@orig% activate temporarily
+ % period name as event entry for event-less days
+ \event{\RN@tempa}{\RN@period@name}%
+ }%
+ \fi
+ \endgroup
+}
+
+\newcommand*\event{%
+ \@ifstar{\@tempswatrue\RN@event@i}{\@tempswafalse\RN@event@i}%
+}
+\newcommand*\RN@event@i[2]{%
+ \@ifnextchar[{\RN@event@ii{#1}{#2}}{\RN@event@ii{#1}{#2}[]}%
+}
+
+\newcommand*\RN@event@ii{}%
+\def\RN@event@ii#1#2[#3]{%
+ \begingroup
+ \pgfkeys{/RN/event/.cd, #3}%
+ \@tempdima=\RN@eventwidthL
+ \ifRN@showweeknumbers
+ \pgfcalendarifdate{#1}{Monday}{\@tempdima=\RN@eventwidthS}{}%
+ \fi
+ \@ifundefined{event@#1}{%
+ \expandafter\protected@xdef\csname event@#1\endcsname{#2}%
+ \protected@edef\@tempa{\noexpand\@ifundefined{pgf@sh@ns@cal-#1}{}{%
+ \noexpand\node[anchor=south west,inner sep=0pt] at (cal-#1.south east){%
+ \noexpand\RN@formatEvent{\the\@tempdima}{%
+ \noexpand\csname event@#1\endcsname}};%
+ }
+ }%
+ \pgfcalendarifdate{#1}{at most=06-last}% first half-year?
+ {\expandafter\g@addto@macro\expandafter\RN@events@I\expandafter{\@tempa}}%
+ {\expandafter\g@addto@macro\expandafter\RN@events@II\expandafter{\@tempa}}%
+ }{%
+ \expandafter\protected@xdef\csname event@#1\endcsname{%
+ #2, \csname event@#1\endcsname}%
+ }
+ \if@tempswa
+ \edef\@tempa{%
+ \noexpand\ifdate{equals=#1}{\noexpand\tikzset{%
+ every day/.style={fill=\RN@eventColor}}}{}%
+ }%
+ \expandafter\g@addto@macro\expandafter\RN@backgrounds\expandafter{\@tempa}%
+ \fi
+ \endgroup
+}
+
+\let\RN@event@ii@orig=\RN@event@ii
+
+\newcommand\RN@makeKalender[2]{%
+ \sbox\RN@tempbox{%
+ \begin{tikzpicture}[every day/.style={anchor=north}]%
+ \calendar[dates=#1 to #2,name=cal,day text={\%d=},%day yshift=3em,% ????
+ day code={%
+ \node[name=\pgfcalendarsuggestedname,every day,%
+ shape=rectangle,minimum height=\RN@dayheight,%
+ text width=\RN@daywidth,draw=black
+ ]{\RN@formatDayNb{\tikzdaytext}%
+ \RN@formatDay{\pgfcalendarcurrentweekday}%
+ \ifRN@showweeknumbers
+ \ifdate{Monday}{\stepcounter{weeknumber}%
+ \RN@formatWeekNb{weeknumber}}{}%
+ \fi};
+ },%
+ execute before day scope={%
+ \ifdate{day of month=1}{%
+ \pgftransformxshift{\dimexpr\RN@daywidth+\RN@daysep}%
+ % Print month name
+ \draw (0,0)node [shape=rectangle,minimum height=\RN@dayheight,%
+ text width=\RN@daywidth,fill=\RN@monthBGcolor,%
+ draw=\RN@monthBGcolor,text=\RN@monthColor,text centered]{%
+ \RN@monthFont\pgfcalendarmonthname{\pgfcalendarcurrentmonth}};
+ }{}%
+ \ifdate{workday}{\tikzset{every day/.style=%
+ {fill=\RN@workdayColor}}}{}%
+ %\RN@periods
+ \ifdate{Saturday}{\tikzset{every day/.style=%
+ {fill=\RN@saturdayColor}}}{}%
+ \ifdate{Sunday}{\tikzset{every day/.style=%
+ {fill=\RN@sundayColor}}}{}%
+ \RN@backgrounds
+ \RN@periods
+ %\RN@backgrounds
+ },%
+ execute at begin day scope={%
+ \pgftransformyshift{-\pgfcalendarcurrentday\RN@dayheight}%
+ }%
+ ];%
+ \pgfcalendarifdate{#1}{at most=06-last}{\RN@events@I}{\RN@events@II}%
+ \end{tikzpicture}%
+ }%
+ \parbox[c][\RN@calheight]{\RN@calwidth}{%
+ \vfill
+ \centering
+ \RN@formatTitle{\wd\RN@tempbox}{\RN@yearText}{\RN@title}%
+ \vfill
+ \usebox\RN@tempbox
+ \vfill
+ }%
+}
+
+\newcommand*\makeKalender{%
+ \pgfcalendarifdate{\RN@year-01-01}{Tuesday,Wednesday,Thursday}{%
+ \setcounter{weeknumber}{1}}{\setcounter{weeknumber}{0}}%
+ \begingroup%
+ \let\year=\RN@year
+ \def\RN@event@ii##1##2[##3]{}% 1st loop: only the periods
+ \def\do##1{\InputIfFileExists{##1.events}{}{}}%
+ \expandafter\docsvlist\expandafter{\RN@events@files}%
+ \endgroup
+ \begingroup
+ \let\year=\RN@year
+ \def\RN@period@i##1##2[##3]{}% 2nd loop: only the events
+ \def\do##1{\InputIfFileExists{##1.events}{}{}}%
+ \expandafter\docsvlist\expandafter{\RN@events@files}%
+ \endgroup
+ \sbox{\RN@pageI}{\RN@makeKalender{\RN@year-01-01}{\RN@year-06-30}}%
+ \sbox{\RN@pageII}{\RN@makeKalender{\RN@year-07-01}{\RN@year-12-31}}%
+ \ifRN@print
+ \rotatebox[origin=c]{90}{\usebox\RN@pageI}%
+ \else
+ \usebox\RN@pageI
+ \fi
+ \newpage
+ \ifRN@print
+ \rotatebox[origin=c]{-90}{\usebox\RN@pageII}%
+ \else
+ \usebox\RN@pageII
+ \fi
+}
+
+\setlength\parindent{0pt}
+\pagestyle{empty}
+
+\endinput
+%%
+%% End of file `tikz-kalender.cls'.
+
+
+
+
diff --git a/graphics/pgf/contrib/tikz-karnaugh/README.txt b/graphics/pgf/contrib/tikz-karnaugh/README.txt
new file mode 100644
index 0000000000..95c350d15a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-karnaugh/README.txt
@@ -0,0 +1,23 @@
+Copyright (C) 2017 by Luis Paulo Laus, <laus@utfpr.edu.br>
+------------------------------------------------------------
+
+The tikz-karnaugh package may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1 of this license or (at your option) any later version. The latest version of this license is in:
+ http://www.latex-project.org/lppl.txt and version 1 or
+later is part of all distributions of LaTeX version 1999/12/01 or later.
+
+ Version 1.2 of 19 March 2018
+
+------------------------------------------------------------
+
+The tikz-karnaugh package is a LaTeX used to draw Karnaugh maps. It uses TikZ to produce high quality graph up to 12 variables, but this limit depends on the TeX memory usage and can be different for you. It is very good for presentation since TikZ allows for a better control over the final appearance of the map. You can control colour, styles and distances.
+
+It can be considered an upgrade of Andreas W. Wieland's karnaugh package towards TikZ supporting. Also, complex maps with solution (prime implicants) pointed out can be generated with external java software.
+
+It supports both American and traditional styles, though American style requires a litter extra effort.
+
+------------------------------------------------------------
+
+If you are interest in generating the documentation departing from tikz-relay-doc.tex you are going to need pgfmanual-en-macros available at ctan:/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+http://mirrors.ctan.org/tex-archive/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+
+------------------------------------------------------------ \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.pdf b/graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.pdf
new file mode 100644
index 0000000000..86a0572dd1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.tex b/graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.tex
new file mode 100644
index 0000000000..6a8d637d83
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-karnaugh/doc/tikz-karnaugh-doc.tex
@@ -0,0 +1,771 @@
+%% This is file `tikz-karnaugh-doc.tex'
+%% Version: 1.2
+%% Version date: 2018-03-19
+%%
+%% Copyright (C) 2017 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software `tikzlibrarykarnaugh.code.tex' and its
+%% accompanying documentation and `The Copyright Holder' referring to the
+%% person Luis Paulo Laus.
+%%
+%% This software is based on Andreas W. Wieland's kvmacros.tex to whom
+%% the author wished to express his gratitude.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+\pdfminorversion=5
+\pdfobjcompresslevel=2
+\documentclass[a4paper]{ltxdoc}
+\usepackage[hyphens]{url}
+\usepackage[version=latest]{pgf}
+\usepackage{calc,listings,tikz}
+
+% if you need an index.
+\usepackage{makeidx}
+
+% for cross-references:
+\usepackage[pdfborder=0 0 0]{hyperref}
+ \hypersetup{%
+ colorlinks=true, % use true to enable colors below:
+ linkcolor=blue,%red,
+ filecolor=blue,%magenta,
+ pagecolor=blue,%red,
+ urlcolor=blue,%cyan,
+ citecolor=blue,
+ pdfborder=0 0 0, % PDF link-darstellung, falls colorlinks=false. 0 0 0: nix. 0 0 1: default.
+ pdfsubject={Karnaugh Maps with LaTeX and TikZ},
+ pdfauthor={Luis Paulo Laus},
+ pdftitle={Typesetting Karnaugh Maps with LaTeX and TikZ},
+ pdfkeywords={Karnaugh Maps,LaTeX,TikZ},
+ }
+
+% We need lots of libraries...
+\usetikzlibrary{backgrounds}
+
+\newif\ifgdccodebasic
+\newif\ifgdccodeogdf
+
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage{amsmath,amssymb}
+\usepackage{xxcolor}
+%% \usepackage{pifont}
+%\usepackage{tgpagella} % no ligatures (test)
+\usepackage{enumitem}
+\usepackage[T1]{fontenc}
+
+% this is due to some stupidity in pgfmanual-en-macros.tex:
+% if this macro is not defined, the automatic cross-referencing is
+% disabled:
+\def\pgfautoxrefs{1}
+
+\input{pgfmanual-en-macros} % Borrowed from TikZ/PGF
+%% ctan:/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+%% http://mirrors.ctan.org/tex-archive/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+
+
+% this here allows automatic cross referencing:
+\RequirePackage{pgfmanual}
+
+% this here configures automatic cross referencing.
+% It works for ANY package that uses pgfkeys and is independent on tikz/pgf.
+\pgfkeys{
+ % whenever an unqualified key is found, the following key prefix
+ % list is tried to find a match.
+ /pdflinks/search key prefixes in={/tikz/,/pgf/},
+ %
+ % the link prefix written to the pdf file:
+ /pdflinks/internal link prefix=pgfp,
+ %
+ /pdflinks/codeexample links=true,
+ /pdflinks/warnings=false, % for debugging
+ /pdflinks/show labels=false,% for debugging
+}
+
+% belongs to \usepackage{makeindex}
+\makeindex
+
+\makeatletter
+\renewcommand*\l@section[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \setlength\@tempdima{2.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
+ \endgroup
+ \fi}
+\renewcommand*\l@subsection{\@dottedtocline{2}{2.5em}{3.3em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{5.8em}{4.2em}}
+\def\@pnumwidth{2.2em}
+\makeatother
+
+
+% Global styles:
+\tikzset{
+ every plot/.style={prefix=plots/pgf-},
+ shape example/.style={
+ color=black!30,
+ draw,
+ fill=yellow!30,
+ line width=.5cm,
+ inner xsep=2.5cm,
+ inner ysep=0.5cm}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file really starts here, all the above is for pgfmanual
+% compatibility
+\input ../tex/tikzlibrarykarnaugh.code
+
+\sloppy
+\begin{document}
+\title{Typesetting Karnaugh Maps with \LaTeX\ and \tikzname}
+\author{Luis Paulo Laus\\e-mail: \texttt{laus@utfpr.edu.br}}
+\date{Version: 1.2, Version date: 2018-03-19}
+
+\maketitle
+
+
+\section{Abstract}
+
+Karnaugh maps are used to simplify logic equations leading to the most compact expression of two levels for a given truth table. The drawing of them used to be a boring, annoying and error-prone task. This set of macros intend to simplify the task. They can typeset Karnaugh maps with up to twelve variables\footnote{The actual limit may be different for you.}, which is more than you might likely need\footnote{A twelve variables map contains of 4096 cells in a $64\times64$ grid. They are simply too big to handle manually and you should consider to use a software.}. You only have to provide a list of variable identifiers plus the truth table of your logic function. The macros also allow to highlight the simplifications of your logic function directly within a Karnaugh map. This package is based on \verb|kvmacros.tex| from \verb|karnaugh| package referred herein as ``the original one''. The modifications carried out intended to use \tikzname\ instead of native \LaTeX\ commands allowing easier customisation, easier extension when you need to draw other elements along with the map and leading to higher graph quality.
+
+
+\section{Introduction}
+
+Karnaugh maps and Veitch charts are used to simplify logic equations. They are map representations of logic functions, and in that they are equivalent. Veitch charts are not supported by this package, but it should not be a big problem to port Andreas W. Wieland's \verb|veitch| macro, available in \verb|karnaugh| package, if you need it.
+Please note that this package, including its documentation, is based on Andreas W. Wieland's previous work and the author wishes to register his acknowledgment.
+
+
+\subsection{Comparison with Other Packages}
+
+If you ask yourself ``why another Karnaugh map typesetting package?'' the answer is easy: because I was not completely happy with the packages available I know and those are:
+\begin{enumerate}
+\item \verb|karnaugh|: it is a great package that uses native \LaTeX\ commands to draw the map. It supports Karnaugh maps and Veitch charts. It employs a recursive algorithm with no size limit\footnote{It works until you blow the memory out which will happen about ten to twelve variables.} which leads to an interesting kind of symmetry. Remember, Karnaugh maps are all about symmetry. It is not customisable, for instance, one cannot change the distance between bars\footnote{Those bars have been underappreciated along the history. Karnaugh (1953) himself called them ``simplified labels'' and used them only to replace the Gray coded numbers showing around the map. Their true strength is the ease way they point out which variable belong to a prime implicant and which does not. An approach much easier than interpreting the Gray coded numbers.} (the marks showing around the map with variable identifiers on them) and if the variable identifier is long it will overlap another bar. Also, I want to use \tikzname\ to draw colourful semi-transparent figures on to top of the map to highlight groups (prime implicants) and, although it is possible, it is rather difficult and the result is not very good because they always look a bit off. I have a long-time experience with this package and I have also written a java program to draw the maps because, though typesetting simple maps is easy, highlighting the prime implicants is not.
+\item \verb|karnaughmap|: it uses \tikzname\ so you got a lot of options for customisation. It is limited to eight variable which, to be honest, should be enough for anyone. The problem is that it only draws bars (those marking mentioned above) up to four variables. Also, the order in which the variable list is inputted is different from the order employed by \verb|karnaugh|.
+\item \verb|askmaps|: this package generates configurable American style Karnaugh maps for 2, 3, 4 and 5 variables. In America, instead of bars denoting the one value of variables, they use Gray coded binaries on the top and left side of the map. This behaviour can be mimic with \verb|tikz-karnaugh| (see Section~\ref{sec:american}), though, in my twenty years of experience teaching the subject, I have found out that bars are much more intuitive. The \verb|askmaps| contains four macros, one for each number of variables, and it can be used to highlight the prime implicants in the very same way that \verb|karnaugh| does.
+\item \verb|karnaugh-map|: uses \tikzname\ to draw up to four maps of four variables leading to a 3D six variables map. It contains commands for drawing implicants on top of the map. Like \verb|askmaps|, this package uses Gray code instead of bars.
+\end{enumerate}
+
+With \verb|tikz-karnaugh| you can typeset big (up to twelve variables or 4096 cells) good looking maps. Using a java software, you can do it automatically, including highlighting the solution.
+
+
+\subsection{Introductory example}
+
+Let us start with an introduction on how to use these macros. The first thing you have to do is to load \tikzname. For this type |\usepackage{tikz}| in the preamble of your document. Then, if the package is somewhere \TeX\ can find it, load the library with the command |\usetikzlibrary{karnaugh}|. If it is not, you can use something like |\input tikzlibrarykarnaugh.code|. You may need to provide the full or relative path to file |tikzlibrarykarnaugh.code.tex|.
+
+Suppose now you have a logic function~$f$ with the following truth table:
+
+\begin{center}
+ \catcode`\|=12
+\begin{tabular}{lr}
+ \begin{tabular}[t]{r|cccc|c}
+Index & $a$ & $b$ & $c$ & $d$ & $f$\\
+\hline
+0 & 0 & 0 & 0 & 0 & 1\\
+1 & 0 & 0 & 0 & 1 & 1\\
+2 & 0 & 0 & 1 & 0 & 1\\
+3 & 0 & 0 & 1 & 1 & 0\\
+4 & 0 & 1 & 0 & 0 & 0\\
+5 & 0 & 1 & 0 & 1 & 1\\
+6 & 0 & 1 & 1 & 0 & 1\\
+7 & 0 & 1 & 1 & 1 & 0\\
+ \end{tabular}
+ &
+ \begin{tabular}[t]{r|cccc|c}
+Index & $a$ & $b$ & $c$ & $d$ & $f$\\
+\hline
+8 & 1 & 0 & 0 & 0 & 0\\
+9 & 1 & 0 & 0 & 1 & 1\\
+10 & 1 & 0 & 1 & 0 & 1\\
+11 & 1 & 0 & 1 & 1 & 0\\
+12 & 1 & 1 & 0 & 0 & 0\\
+13 & 1 & 1 & 0 & 1 & 1\\
+14 & 1 & 1 & 1 & 0 & 1\\
+15 & 1 & 1 & 1 & 1 & 0\\
+ \end{tabular}
+\end{tabular}
+ \catcode`\|=13
+\end{center}
+
+This logic function can easily be put into a Karnaugh map by using the
+|\karnaughmap| macro in a \tikzname\ environment (|\begin{tikzpicture}|) or inline command (|\tikz|). The |\karnaughmap| macro has five mandatory parameters:
+\begin{enumerate}
+\item the number of variables in the map;
+\item an identifier for the function;
+\item a list of variable identifiers for the variables;
+\item the list of values of $f$ for each line in the truth table; and
+\item a possibly empty set of \tikzname\ commands that will be drown before the function values so the values will appear on top of them.
+\end{enumerate}
+
+The variable identifiers in the third parameter are ordered from highest to lowest significance (the same way as in the truth table, with $a$ having a significance of $2^3=8$ and $d$ having a significance of $2^0=1$). The list of values of $f$ was read from lowest to highest index. The fifth parameter remains empty in this example, it will be discussed further on:
+
+\begin{codeexample}[width=5.2cm]
+\tikz[karnaugh,enable indices]
+ \karnaughmap{4}{f(a,b,c,d)}{abcd}{1110 0110 0110 0110}{};
+\end{codeexample}
+
+The indices in the upper left corner of each cell correspond to the indices in the truth table:\footnote{The indices can easily be calculated from the variable value in the truth table, e.g., row~11: the index equals $2^{3}\,a+2^{2}\,b+2^{1}\,c+2^{0}\,d=8\,a+4\,b+2\,c+1\,d=8+2+1=11$.}
+
+The macros that read the variable list and the list of logic values (i.e., parameters \#3 and \#4) work recursively.
+
+Each entry has to be one character long and spaces are allowed\footnote{White spaces are really usable to make the string more readable leading to fast verification.}, otherwise -- like a variable identifier enclosed in \$s -- you have to put it into curly brackets:
+
+\begin{codeexample}[width=5.5cm]
+\begin{tikzpicture}[karnaugh]
+ \karnaughmap{4}{$f(a,b,c,d)$}{{$a$}{$b$}{$c$}{$d$}}%
+ {0110 0110 0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+
+Observe that the labels are all in math mode in this example. Also, a \tikzname\ environment was used so there is no semicolon (;) in the end of |\karnaughmap| macro. Moreover, the indices were omitted by removing |enable indices| from the options list.
+
+
+\section{Karnaugh Map Library}
+\begin{pgflibrary}{karnaugh}
+This library provides \TeX\ macros to typeset Karnaugh maps.
+This library defines the following key:
+
+\begin{key}{/tikz/karnaugh}
+This key should be passed as an option to a picture or a scope that contains a map, i.e., that calls |\karnaughmap| macro. It will do some internal setups.
+\end{key}
+
+\begin{command}{{\karnaughmap}\marg{num var}\marg{function}\marg{var list}\marg{contents}\marg{decoration}}
+This macro creates a Kanaugh map of \meta{num var} variables for variable \meta{function} as a function of the variables listed in \meta{var list} for the values given in \meta{content} and applying the specified \meta{decoration}. Any but the first parameter can be empty.
+\end{command}
+
+\begin{command}{{\karnaughmapvert}\marg{num var}\marg{function}\marg{var list}\marg{contents}\marg{decoration}}
+Similar to |\karnaughmap|, but map will be transposed (like in matrix transposition).
+\end{command}
+
+\begin{stylekey}{/tikz/every karnaugh (initially \normalfont empty)}
+The style automatically applied to every Karnaugh map. Can be globaly set using |\tikzset|.
+\end{stylekey}
+
+\begin{command}{{\kmindexcounter}}
+A \TeX\ counter for cell index. See |kmcell/.style| for an example of application.
+\end{command}
+
+\begin{command}{{\kmunitlength}=\marg{length}}
+This length sets the size of an individual cell in the map. Must be set before |karnaugh| is used.
+\end{command}
+
+\begin{key}{/tikz/disable bars=\meta{boolean} (default true, initially false)}
+Boolean switch that disables the typesetting of all bars and the function identifier. Usable when you want an American style map. The initial value is |false| meaning that the bars will be typeset unless they are explicitly disabled.
+\begin{codeexample}[width=4.8cm]
+\begin{tikzpicture}[karnaugh,disable bars]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}Note that |$f(a,b,c)$| and |{$a$}{$b$}{$c$}| are not used and could be empty.
+\end{key}
+
+\begin{stylekey}{/tikz/kmbar (initially {$\mid$-$\mid$})}
+The style used for the top and side bars related to the variables and denoting the rows and columns for which the respective variable is~1. The initial value is \verb!|-|! meaning they all will be represented as a line with T chapped tips.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,kmbar/.style={blue,<->}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/kmbar label (initially \normalfont empty)}
+The style used for the variable identifiers on the bars.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,
+ kmbar label/.style={blue,font=\Large}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikz/kmbar sep=\meta{width} (initially 0.2\char`\\|kmunitlength|)}
+The distance between the bar closer to the map and the map itself. It depends mainly on the line tip used in |kmlines/.style|.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,kmbar sep=1\kmunitlength]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/kmbar top sep=\meta{width} (initially 1\char`\\|kmunitlength|)}
+The distance between two bars on top of map. It depends mainly on the font height used in |kmbar label/.style|.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,kmbar top sep=2\kmunitlength]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/kmbar left sep=\meta{width} (initially 1\char`\\|kmunitlength|)}
+The distance between two bars at the left side of map. It depends mainly on the variable identifier width and the font size used in |kmbar label/.style|.
+\begin{codeexample}[width=7.1cm]
+\begin{tikzpicture}[karnaugh,kmbar left sep=2\kmunitlength]
+ \karnaughmap{4}{$f(a,b,c,d)$}{{$a$}{$b$}{$c$}{$d$}}%
+ {0110 0110 0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/enable indices=\meta{boolean} (default true, initially false)}
+Boolean switch that enables the typesetting of all indices. The initial value is |false| meaning that the indices will not be typeset unless they are explicitly enabled.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,enable indices]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{stylekey}{/tikz/kmindex (initially {red,font=\string\tiny})}
+The style used for cell index if enable (see also |enable indices|).
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,enable indices,
+ kmindex/.style={blue,font=\scriptsize\itshape}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikz/kmindexposx=\meta{dimension} (initially 0.2\char`\\|kmunitlength|)}
+The horizontal distance from the cell left side to the index centre.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,enable indices,
+ kmindexposx=.8\kmunitlength]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/kmindexposy=\meta{dimension} (initially 0.8\char`\\|kmunitlength|)}
+The vertical distance from the cell bottom to the index centre.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,enable indices,
+ kmindexposy=.2\kmunitlength]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{command}{{/tikz/kmindexpos}=\marg{x coordinate}\marg{y coordinate}}
+Sets |\kmindexposx| and |\kmindexposy| to |x| and |y| coordinates measured in |\kmunitlength| from the cell bottom left corner.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,enable indices,
+ kmindexpos={0.8}{0.2}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{command}
+
+\begin{key}{/tikz/binary index=\meta{boolean} (default true, initially false)}
+Boolean switch that sets the index presentation to binary code. It is convenient to also set the index coordinates. In the following example, the significance order is $a$, $b$ and $c$, meaning, $a$ is the most significant bit and $c$ is the least significant bit. Therefore, the left most bit of the indices is one only in the two left columns below $a$ bar, the middle bit is one in the bottom row as $b$ bar extends and the right most bit is one in the central columns below $c$ bar.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,enable indices,
+ binary index,kmindexpos={0.5}{0.8}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{stylekey}{/tikz/kmcell (initially \normalfont empty)}
+The style used for cell contents.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,kmcell/.style={blue,font=\Large}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+
+Some interesting applications of |kmcell/.style| involves the cell index given by |\the\kmindexcounter|. You can name every cell for future use or place a label within the cell index just like |enable indices| does. In the following example, |kmcell/.style| is used to place a label within each cell with the decimal value of the cell index and |enable indices| is for the binary value. Moreover, the cell content is also a number that correspond to the cell index (manually placed) just to show the correlation.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,enable indices,
+ binary index,kmindexpos={0.5}{0.8},
+ kmcell/.style={label={[font=\scriptsize,blue,
+ label distance=-0.3\kmunitlength]
+ below left:\the\kmindexcounter}, green!60!black}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0123 4567}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/kmvar (initially \normalfont empty)}
+The style used for the variable name (function) of the map.
+\begin{codeexample}[width=6.9cm]
+\begin{tikzpicture}[karnaugh,kmvar/.style={blue,font=\Large}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/kmbox (initially \normalfont empty)}
+The style used for the box surrounding the map.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,kmbox/.style={blue,very thick}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/kmlines (initially \normalfont empty)}
+The style used for the lines separating adjacent rows and columns inside the map.
+\begin{codeexample}[width=6.4cm]
+\begin{tikzpicture}[karnaugh,kmlines/.style={blue,very thick}]
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+You can add options to the graphics by setting the |every karnaugh| style which is automaticaly applied.
+
+\end{pgflibrary}
+
+
+\section{Marking simplifications}
+
+The already mentioned fifth parameter can be used if you want to draw something inside the Karnaugh map. For example, this is useful if you want to show how you simplified a logic function highlighting the prime implicants:
+
+\begin{codeexample}[width=5.3cm]
+\begin{tikzpicture}[karnaugh,x=1\kmunitlength,y=1\kmunitlength,
+ thick,
+ grp/.style n args={3}{#1,fill=#1!30,
+ minimum width=#2\kmunitlength,
+ minimum height=#3\kmunitlength,
+ rounded corners=0.2\kmunitlength,
+ fill opacity=0.6,
+ rectangle,draw}]
+ \karnaughmap{4}{$f(a,b,c,d)$}{{$a$}{$b$}{$c$}{$d$}}%
+ {0110 0110 0110 0110}%
+ {
+ \node[grp={blue}{0.9}{1.9}](n000) at (0.5,2.0) {};
+ \node[grp={blue}{0.9}{1.9}](n001) at (3.5,2.0) {};
+ \draw[blue] (n000.north) to [bend left=25] (n001.north)
+ (n000.south) to [bend right=25] (n001.south);
+ \node[grp={red}{1.9}{0.9}](n100) at (2.0,3.5) {};
+ \node[grp={red}{1.9}{0.9}](n110) at (2.0,0.5) {};
+ \draw[red] (n100.west) to [bend right=25] (n110.west)
+ (n100.east) to [bend left=25] (n110.east);
+ }
+\end{tikzpicture}
+\end{codeexample}
+
+\noindent{}and the corresponding expression is:\[f(a,b,c,d) = {\color{blue}c\,\bar{d}} + {\color{red}\bar{c}\,d}\]where colours were used to relate the subexpression with the prime implicant highlighted on the map.
+
+Instead of \LaTeX's graphics macros\footnote{As in the original package.} you can use \tikzname\ for this purpose. In this example, a new style |grp| was defined in order to draw semi-transparent rectangles with a specified colour, width and height (both given in |\kmunitlength|). The Karnaugh map has its datum at the lower left point \emph{exactly}. The centre point coordinates of those rectangles are specified using the |at| command. The length of a single cell within the Karnaugh map is equal to |\kmunitlength|. Thus, the |x| and |y| units are set to |1\kmunitlength| so the coordinates can be written without the unit and the rectangles will fall in the precise position even if one changes the map size by changing the |\kmunitlength|.
+
+
+\section{Adjusting the map size}
+
+Possibly the most important feature that you can change is the size of the diagrams and it is done by changing the size of the cells within the map, simply by typing:
+
+\begin{codeexample}[width=8.1cm]
+\kmunitlength=14mm
+\begin{tikzpicture}[karnaugh]
+ \karnaughmap{4}{$f$}{abcd}{0110 0110 0110 0110}{}
+\end{tikzpicture}
+\end{codeexample}
+\kmunitlength=8mm
+
+The setting of the |\kmunitlength| remains active until you change it again;\footnote{Or, of course, until you leave the group in which you redefined the value.} the default |\kmunitlength| is 8\,mm:
+
+
+\section{Complete example}
+
+In this and in the next sections, examples of how individual variables and cell contents can be format are presented. The syntax relies on square brackets (|[]|) to enclose \tikzname\ features that change the appearance and add more graphs to an individual variable or cell content. Let us see a more interesting and colourful example:
+
+\begin{codeexample}[code only]
+\kmunitlength=2.5em
+\begin{tikzpicture}[karnaugh,x=1\kmunitlength,y=1\kmunitlength,
+ thick,
+ grp/.style n args={3}{#1,fill=#1!30,
+ minimum width=#2\kmunitlength,
+ minimum height=#3\kmunitlength,
+ rounded corners=0.2\kmunitlength,
+ fill opacity=0.6,
+ rectangle,draw},
+ kmbar/.style={blue,<->,double=white,semithick},
+ kmbar left sep=1.2\kmunitlength,
+ kmbar sep=0.4\kmunitlength,
+ kmbar label/.style={red!70!black,font=\large},
+ kmindex/.style={orange,font=\tiny},
+ enable indices,
+ kmcell/.style={cyan!80!black},
+ kmbox/.style={brown,thick},
+ kmlines/.style={brown,thin},
+ kmvar/.style={green!70!black,font=\huge},
+ lbl/.style={left,align=right,text width=1.5\kmunitlength}]
+ \karnaughmap{6}{$z_{0}$}{%
+ {$x_{5}$}{$x_{2}$}{$x_{4}$}{$x_{1}$}%
+ {[yellow!70!black,name=Nv,|-|,double=red,very thick,
+ label={[font=\tiny,green!50!black]above:var.},
+ text=blue!60!red]$x_{3}$}%
+ {$x_{0}$}}%
+ {--1{}1{}1{}-11-1{}1{}1-{}1{}{}1-1-{}1-{}-1-1%
+ {[red,name=Nc,label={[name=Nl,orange!90!black,
+ label distance=1\kmunitlength]left:Special},
+ circle,inner sep=2pt,draw=green!70!blue]1}%
+ --{}1{}-11{}-{}1--1{}1{}{}111-{}1{}--1}%
+ {
+ \node[grp={blue}{1.9}{0.9}](n000) at (1.0,7.5) {};
+ \node[grp={blue}{1.9}{0.9}](n002) at (7.0,7.5) {};
+ \node[grp={blue}{1.9}{1.9}](n010) at (1.0,4.0) {};
+ \node[grp={blue}{1.9}{1.9}](n012) at (7.0,4.0) {};
+ \node[grp={blue}{1.9}{0.9}](n030) at (1.0,0.5) {};
+ \node[grp={blue}{1.9}{0.9}](n032) at (7.0,0.5) {};
+ \draw[blue] (n000.east) to [bend left=25] (n002.west)
+ (n010.east) to [bend left=25] (n012.west)
+ (n030.east) to [bend right=25] (n032.west)
+ (n000.south) to [bend right=25] (n010.north)
+ (n002.south) to [bend left=25] (n012.north)
+ (n010.south) to [bend right=25] (n030.north)
+ (n012.south) to [bend left=25] (n032.north);
+ \node[grp={red}{0.8}{7.8}](n100) at (0.5,4.0) {};
+ \node[grp={red}{0.8}{7.8}](n101) at (3.5,4.0) {};
+ \draw[red] (n100.north) to [bend left=25] (n101.north)
+ (n100.south) to [bend right=25] (n101.south);
+ \node[grp={orange}{1.9}{1.9}](n200) at (5.0,6.0) {};
+ \node[grp={orange}{1.9}{1.9}](n220) at (5.0,2.0) {};
+ \draw[orange] (n200.west) to [bend right=25] (n220.west)
+ (n200.east) to [bend left=25] (n220.east);
+ \node[grp={teal}{1.8}{1.8}](n300) at (6.0,6.0) {};
+ \node[grp={teal}{1.8}{1.8}](n320) at (6.0,2.0) {};
+ \draw[teal] (n300.west) to [bend right=25] (n320.west)
+ (n300.east) to [bend left=25] (n320.east);
+ }
+ \draw[<-] (Nv) -- +(-1,1) node[lbl]{variable on its bar};
+ \draw[<-] (Nc) -- +(-1,-1) node[lbl]{special cell};
+ \draw[<-] (Nl.120) -- +(-1.1,3.5) node[lbl]{label for special cell};
+\end{tikzpicture}
+\end{codeexample}
+
+The corresponding Karnaugh map looks like this:
+
+\begin{center}
+\kmunitlength=2.5em
+\begin{tikzpicture}[karnaugh,x=1\kmunitlength,y=1\kmunitlength,
+ thick,
+ grp/.style n args={3}{#1,fill=#1!30,
+ minimum width=#2\kmunitlength,
+ minimum height=#3\kmunitlength,
+ rounded corners=0.2\kmunitlength,
+ fill opacity=0.6,
+ rectangle,draw},
+ kmbar/.style={blue,<->,double=white,semithick},
+ kmbar left sep=1.2\kmunitlength,
+ kmbar sep=0.4\kmunitlength,
+ kmbar label/.style={red!70!black,font=\large},
+ kmindex/.style={orange,font=\tiny},
+ enable indices,
+ kmcell/.style={cyan!80!black},
+ kmbox/.style={brown,thick},
+ kmlines/.style={brown,thin},
+ kmvar/.style={green!70!black,font=\huge},
+ lbl/.style={left,align=right,text width=1.5\kmunitlength}]
+ \karnaughmap{6}{$z_{0}$}{%
+ {$x_{5}$}{$x_{2}$}{$x_{4}$}{$x_{1}$}%
+ {[yellow!70!black,name=Nv,|-|,double=red,very thick,
+ label={[font=\tiny,green!50!black]above:var.},
+ text=blue!60!red]$x_{3}$}%
+ {$x_{0}$}}%
+ {--1{}1{}1{}-11-1{}1{}1-{}1{}{}1-1-{}1-{}-1-1%
+ {[red,name=Nc,label={[name=Nl,orange!90!black,
+ label distance=1\kmunitlength]left:Special},
+ circle,inner sep=2pt,draw=green!70!blue]1}%
+ --{}1{}-11{}-{}1--1{}1{}{}111-{}1{}--1}%
+ {
+ \node[grp={blue}{1.9}{0.9}](n000) at (1.0,7.5) {};
+ \node[grp={blue}{1.9}{0.9}](n002) at (7.0,7.5) {};
+ \node[grp={blue}{1.9}{1.9}](n010) at (1.0,4.0) {};
+ \node[grp={blue}{1.9}{1.9}](n012) at (7.0,4.0) {};
+ \node[grp={blue}{1.9}{0.9}](n030) at (1.0,0.5) {};
+ \node[grp={blue}{1.9}{0.9}](n032) at (7.0,0.5) {};
+ \draw[blue] (n000.east) to [bend left=25] (n002.west)
+ (n010.east) to [bend left=25] (n012.west)
+ (n030.east) to [bend right=25] (n032.west)
+ (n000.south) to [bend right=25] (n010.north)
+ (n002.south) to [bend left=25] (n012.north)
+ (n010.south) to [bend right=25] (n030.north)
+ (n012.south) to [bend left=25] (n032.north);
+ \node[grp={red}{0.8}{7.8}](n100) at (0.5,4.0) {};
+ \node[grp={red}{0.8}{7.8}](n101) at (3.5,4.0) {};
+ \draw[red] (n100.north) to [bend left=25] (n101.north)
+ (n100.south) to [bend right=25] (n101.south);
+ \node[grp={orange}{1.9}{1.9}](n200) at (5.0,6.0) {};
+ \node[grp={orange}{1.9}{1.9}](n220) at (5.0,2.0) {};
+ \draw[orange] (n200.west) to [bend right=25] (n220.west)
+ (n200.east) to [bend left=25] (n220.east);
+ \node[grp={teal}{1.8}{1.8}](n300) at (6.0,6.0) {};
+ \node[grp={teal}{1.8}{1.8}](n320) at (6.0,2.0) {};
+ \draw[teal] (n300.west) to [bend right=25] (n320.west)
+ (n300.east) to [bend left=25] (n320.east);
+ }
+ \draw[<-] (Nv) -- +(-1,1) node[lbl]{variable on its bar};
+ \draw[<-] (Nc) -- +(-1,-1) node[lbl]{special cell};
+ \draw[<-] (Nl.120) -- +(-1.1,3.5) node[lbl]{label for special cell};
+\end{tikzpicture}
+\end{center}
+end the logic expression\footnote{This is not of any importance here, but I couldn't hold myself back. By the way, if you are curious, there are another two minimal solutions.} is \[z = {\color{blue}\bar{x}_{3}\,\bar{x}_{1}} + {\color{red}\bar{x}_{2}\,\bar{x}_{0}} + {\color{orange}x_{3}\,x_{2}\,x_{1}} + {\color{teal}x_{3}\,x_{2}\,x_{0}}.\]
+
+You may notice that the zeros were omitted (replaced by |{}| in the list). Also, the cell~34 is special beause \verb|{[red,name=Nc,| \verb|label={[name=Nl,orange!90!black,| \verb|label distance=|\verb|1\kmunitlength| \verb|]left:| \verb|Special},| \verb|circle,| \verb|inner sep=2pt,| \verb|draw=green!70!blue]1}|. You can put almost anything inside a cell using curly brackets and you can customize the cell style using square brackets. The format is: \verb|{[opt]string}| where |opt| is an optional set of styles (among other \tikzname\ parameters) which will be passed as the last option of \tikzname\ command |\node| and |string| will be written inside the cell by that command. To use this syntax, it is imperative that the very first character after the opening curly brackets (|{|) be the opening square brackets (|[|). Matching pairs of square brackets are allowed inside the optional sequence provided that they are protected inside a pair of curly brackets. In this case, the proper content of cell~34 is just the number~1 near the end, all the rest is the style applied to this single~1, therefore coded between square brackets. The style uses \tikzname\ syntax in order to change colour, font size, add a label, add figure, add decoration and name it for future reference. In this case, two nodes are named |Nc| and |Nl| for future reference. Near the \tikzname\ environment end, those names are used to place arrows pointing to the nodes with a description. The |\draw| command that draws those arrows cannot be placed inside the fifth argument of macro |\karnaughmap| because the fifth argument is typeset before the cells contents (the fourth argument), therefore no name would be created at the time the fifth argument is typeset.
+
+The variables identifiers (the third argument) can also be formatted individually using style, but note that the custom style will be applied to both the bar line and the node for the variable identifier. If a bar gets segmented, just like $x_3$ bar, the named node will be the top most if the bar is vertical or the right most if the bar is horizontal. The $x_3$ bar is different from the other bars because \verb?[yellow!70!black,name=Nv,|-|,double=red,? \verb|very thick,| \verb|label={[font=\tiny,green!50!black]above:var.},| \verb|text=blue!60!red]| changes its appearance. The node name |Nv| is also not available at the time the fifth argument is typeset. So any command that makes use of it will need to be placed after the end of macro |\karnaughmap|.
+
+The distance between bars on the left side was set to |1.2\kmunitlength| to prevent overlapping between $x_3$ (the label) and $x_4$ bar and $x_4$ and $x_5$ bar, but the distance between the bars on top was left unchanged. The distance between the map and the bars closest to it was set to |0.4\kmunitlength| to prevent overlapping between the bar tip (\tikz[baseline] \draw[blue,->,double=white,semithick] (0,0.6ex) -- (0.5cm,0.6ex);) and the map itself.
+
+The indices can be computed by \[32\,x_{5}+8\,x_{4}+2\,x_{3}+16\,x_{2}+4\,x_{1}+1\,x_{0}\] which is a bit bizarre. The truth table values ought to be arranged according to this index order. This bizarreness is the price we pay to have the variables placed in positions which are more intuitive. See Section~\ref{sec:remarks} for a java software that can help on this matter.
+
+
+\section{American style\label{sec:american}}
+
+If you really want an American style map and you are not afraid of admitting it publicly, you can still use this package to typeset it. The first thing to do is to disable the bars and the function identifiers. Therefore, this option has to be included in the \tikzname\ environment: |disable bars|.
+
+Then you will need rows and columns labels in Gray code and a caption for the map and variables identifiers. In the last example, these can be achieved by appending the following code in the fifth argument of the |karnaughmap| macro:
+\begin{codeexample}[code only]
+ \draw[kmbox] (0,8) --
+ node[below left,magenta]{$x_5,x_4,x_3$}
+ node[above right,violet]{$x_2,x_1,x_0$} +(-1,1)
+ node[above left,green!70!black] {$z_0$};
+ \foreach \x/\l in %
+ {0/000,1/001,2/011,3/010,4/110,5/111,6/101,7/100} {
+ \node[violet] at (\x+0.5,8.2) {\l};
+ \node[magenta] at (-0.4,7.5-\x) {\l};
+ }
+\end{codeexample}
+
+The result should be:
+
+\begin{center}
+\kmunitlength=2.5em
+\begin{tikzpicture}[karnaugh,x=1\kmunitlength,y=1\kmunitlength,
+ thick,
+ grp/.style n args={3}{#1,fill=#1!30,
+ minimum width=#2\kmunitlength,
+ minimum height=#3\kmunitlength,
+ rounded corners=0.2\kmunitlength,
+ fill opacity=0.6,
+ rectangle,draw},
+ disable bars,enable indices,
+ kmindex/.style={orange,font=\tiny},
+ kmcell/.style={cyan!80!black},
+ kmbox/.style={brown,thick},
+ kmlines/.style={brown,thin}]
+ \karnaughmap{6}{$z_{0}$}{%
+ {$x_{5}$}{$x_{2}$}{$x_{4}$}{$x_{1}$}{$x_{3}$}{$x_{0}$}}%
+ {--1{}1{}1{}-11-1{}1{}1-{}1{}{}1-1-{}1-{}-1-11%
+ --{}1{}-11{}-{}1--1{}1{}{}111-{}1{}--1}%
+ {
+ \node[grp={blue}{1.9}{0.9}](n000) at (1.0,7.5) {};
+ \node[grp={blue}{1.9}{0.9}](n002) at (7.0,7.5) {};
+ \node[grp={blue}{1.9}{1.9}](n010) at (1.0,4.0) {};
+ \node[grp={blue}{1.9}{1.9}](n012) at (7.0,4.0) {};
+ \node[grp={blue}{1.9}{0.9}](n030) at (1.0,0.5) {};
+ \node[grp={blue}{1.9}{0.9}](n032) at (7.0,0.5) {};
+ \draw[blue] (n000.east) to [bend left=25] (n002.west)
+ (n010.east) to [bend left=25] (n012.west)
+ (n030.east) to [bend right=25] (n032.west)
+ (n000.south) to [bend right=25] (n010.north)
+ (n002.south) to [bend left=25] (n012.north)
+ (n010.south) to [bend right=25] (n030.north)
+ (n012.south) to [bend left=25] (n032.north);
+ \node[grp={red}{0.8}{7.8}](n100) at (0.5,4.0) {};
+ \node[grp={red}{0.8}{7.8}](n101) at (3.5,4.0) {};
+ \draw[red] (n100.north) to [bend left=25] (n101.north)
+ (n100.south) to [bend right=25] (n101.south);
+ \node[grp={orange}{1.9}{1.9}](n200) at (5.0,6.0) {};
+ \node[grp={orange}{1.9}{1.9}](n220) at (5.0,2.0) {};
+ \draw[orange] (n200.west) to [bend right=25] (n220.west)
+ (n200.east) to [bend left=25] (n220.east);
+ \node[grp={teal}{1.8}{1.8}](n300) at (6.0,6.0) {};
+ \node[grp={teal}{1.8}{1.8}](n320) at (6.0,2.0) {};
+ \draw[teal] (n300.west) to [bend right=25] (n320.west)
+ (n300.east) to [bend left=25] (n320.east);
+ \draw[kmbox] (0,8) --
+ node[below left,magenta]{$x_5,x_4,x_3$}
+ node[above right,violet]{$x_2,x_1,x_0$} +(-1,1)
+ node[above left,green!70!black] {$z_0$};
+ \foreach \x/\l in %
+ {0/000,1/001,2/011,3/010,4/110,5/111,6/101,7/100} {
+ \node[violet] at (\x+0.5,8.2) {\l};
+ \node[magenta] at (-0.4,7.5-\x) {\l};
+ }
+ }
+\end{tikzpicture}
+\end{center}
+
+Note, however, that the index inside a cell does not match the Gray code value of the respective row and column\footnote{Do not use a Gray code table to compute the index.}. The indices can still be computed by \[32\,x_{5}+8\,x_{4}+2\,x_{3}+16\,x_{2}+4\,x_{1}+1\,x_{0}.\]
+
+
+\section{Vertical mode}
+
+For an odd number of variables, the Karnaugh map is rectangular and macro |karnaughmap| will typeset it twice as wide as it is high (not taking into account the bars). Like this single variable map:
+
+\begin{codeexample}[width=3cm]
+\tikz[karnaugh,enable indices]%
+ \karnaughmap{1}{$f(a)$}{{$a$}}{10}{};
+\end{codeexample}
+
+This layout is good for presentations because the projection area is usually wider than higher. Paper sheets, on the other hand, are usually higher than wider, so for a big map you may need something like\footnote{Or you can use landscape.}:
+
+\begin{codeexample}[width=3cm]
+\tikz[karnaugh,enable indices]%
+ \karnaughmapvert{1}{$f(a)$}{{$a$}}{10}{};
+\end{codeexample}
+
+This is called, for lack of a better name, vertical mode\footnote{Not to be confused with \TeX\ vertical mode.} and it is done by the |karnaughmapvert| macro. Note that |karnaughmapvert| macro arranges the variables in a different order. Compare the two square (four variables) maps below in the normal (on the left) and vertical mode (on the right) paying attention to the indices and variables identifier.
+
+\begin{center}
+\begin{tabular}{ccc}
+\tikz[karnaugh,enable indices]%
+ \karnaughmap{4}{$f(a,b,c,d)$}{{$a$}{$b$}{$c$}{$d$}}{0101 1011 1011 1101}{};
+ & \hspace{5mm} &
+\tikz[karnaugh,enable indices]%
+ \karnaughmapvert{4}{$f(a,b,c,d)$}{{$a$}{$b$}{$c$}{$d$}}{0101 1011 1011 1101}{};\\
+Normal (horizontal) mode & & Vertical mode
+\end{tabular}
+\end{center}
+
+The indices are calculated in the same way, but their position inside the map are different because the variables positions are different. It is like one map is mirrored and then rotated 90$^o$ (mirrored horizontally and rotated clockwise or mirrored vertically and rotated counterclockwise.) Exactly like matrix transposition.
+
+One interesting application of vertical mode is when you want to keep consistency in variable identifier position among maps with odd and even number of variables. For example, if you want the most significant variable $a$ appearing on top of the maps you can use normal (horizontal) mode for maps of odd number of variables and vertical mode for even amounts, like this:
+
+\begin{center}
+\begin{tabular}[t]{ccc}
+\tikz[karnaugh,enable indices]%
+ \karnaughmap{3}{$f(a,b,c)$}{{$a$}{$b$}{$c$}}{0101 1011}{};
+ & \hspace{5mm} &
+\tikz[karnaugh,enable indices]%
+ \karnaughmapvert{4}{$g(a,b,c,d)$}{{$a$}{$b$}{$c$}{$d$}}{0101 1011 1011 1101}{};\\
+Normal (horizontal) mode & & Vertical mode
+\end{tabular}
+\end{center}
+
+A more general approach is to use the java software described in Section~\ref{sec:remarks} to create maps with arbitrary variables positioning. Suppose that you desire the most significant variable $a$ to appear at the left side of a three variables map. You can do the opposite of what was done in the last example, but you will end up with a vertical map of three variables and maybe it is not what you want. Using the software described in Section~\ref{sec:remarks} allows $a$ to be placed at the left in a normal (horizontal) mode map. This will change the indices because it reorders the truth tablet such that $a$ will no longer be the most significant variable, but without changing the logic function.
+
+
+\section{If you use the original version of the macros\ldots}
+
+\ldots{} you certainly have noticed a number of changes. The most important one is that now you control the appearance of cell, index, etc. by changing the style and not through macros. Also, you need a \tikzname\ picture environment or inline command.
+
+
+\section{Final remarks\label{sec:remarks}}
+
+This is not even nearly all you need to know about the usage of these macros, but it is a good start. In case you find a bug, or if you have comments or suggestions, please send me an e-mail.
+
+The maximum size map I could produce was a Karnaugh map with 12~variables; with bigger maps I only exceeded \TeX's main memory. This is due to the macros' recursive algorithm. Quite likely you will exceed \TeX's capacity with even smaller maps if they occur in large documents.
+
+If you need help to typeset Karnaugh maps with or without the prime implicants highlighted, you can try |JQM - Java Quine McCluskey| for minimization of Boolean functions available on \url{https://sourceforge.net/projects/jqm-java-quine-mccluskey/}. It can generate the solution and create the corresponding map based on a given truth table.
+One very useful feature of this software is that you can reorder the variables on the map to suite your particular application instead of rely exclusively on the macro to scatter your variables around.
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-karnaugh/tex/tikzlibrarykarnaugh.code.tex b/graphics/pgf/contrib/tikz-karnaugh/tex/tikzlibrarykarnaugh.code.tex
new file mode 100644
index 0000000000..5ff82dab66
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-karnaugh/tex/tikzlibrarykarnaugh.code.tex
@@ -0,0 +1,475 @@
+%% This is file `tikzlibrarykarnaugh.code.tex' formerly known as `tikz-karnaugh.tex',
+%% Version: 1.2
+%% Version date: 2018-03-19
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software
+%% `tikzlibrarykarnaugh.code.tex'
+%% and its accompanying documentation and `The Copyright Holder'
+%% referring to the person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+\typeout{}
+\typeout{Macros for typesetting Karnaugh maps}
+\typeout{Version 1.2 of 19 March 2018}
+\typeout{by Luis Paulo Laus, laus@utfpr.edu.br}
+\typeout{}
+%%
+%% Change History:
+%% 1.0: 22 December 2017: Original Version ported from kvmacros.tex
+%% 1.1: 10 January 2018: new style for the map outer box. Support for
+%% options in the identifiers and values lists. New vertical mode.
+%% New keys to enable indices and disable bars. Macro file renamed
+%% to proper tikz library file name.
+%% 1.2: 19 March 2018: stop using \pgftransformshift, new kmindexpos
+%% (kmindexposx and kmindexposy) to control index position, cell
+%% typesetting order switched (first content then index), parameter
+%% names changed to include ``km'' letters, new binary index mode
+%%
+%% Setting up some TikZ parameters for Karnaugh Maps
+%%
+\tikzset{
+ karnaugh/.style={
+ disable bars/.is if=disablebars,
+ kmbar/.style={|-|},
+ kmbar label/.style={},
+ kmbar sep/.initial=0.2\kmunitlength,
+ kmbar top sep/.initial=1\kmunitlength,
+ kmbar left sep/.initial=1\kmunitlength,
+ enable indices/.is if=enableindices,
+ kmindex/.style={red,font=\tiny},
+ kmindexposx/.initial=0.2\kmunitlength,
+ kmindexposy/.initial=0.8\kmunitlength,
+ kmindexpos/.style 2 args={kmindexposx={##1\kmunitlength},kmindexposy={##2\kmunitlength}},
+ binary index/.is if=indexbin,
+ kmcell/.style={},
+ kmvar/.style={},
+ kmbox/.style={},
+ kmlines/.style={},
+ every karnaugh/.try,
+ }
+}
+
+%%
+%% New ifs for the options above
+%%
+\newif\ifenableindices
+\enableindicesfalse
+\newif\ifdisablebars
+\disablebarsfalse
+\newif\ifindexbin
+\indexbinfalse
+%%
+%% We need a fixed dimension for a single field in a Karnaugh map
+%% and also an auxiliary dimension to place the bars.
+%%
+\newdimen\kmunitlength
+\newdimen\kmtemplength
+\kmunitlength=8mm
+%%
+%% First, we have to introduce some counters:
+%%
+%% \kmrecursiondepth is used to control the recursion of the
+%% \karnaughmakemap macro.
+%%
+\newcount\kmrecursiondepth
+%%
+%% The \kmindexcounter is needed for the indices in the fields of the
+%% diagrams.
+%%
+\newcount\kmindexcounter
+%%
+%% \kmxsize and \kmysize store the dimensions of an entire diagram.
+%%
+\newcount\kmxsize
+\newcount\kmysize
+%%
+%% Some counters are necessary to compute the bars for the variable
+%% identifiers:
+%%
+\newcount\kmvarno
+\newcount\kmxvarno
+\newcount\kmyvarno
+\newcount\kmbarstart
+\newcount\kmbarlength
+\newcount\kmbarnum
+\newcount\kmbarmove
+\newcount\kmtemppos
+%%
+%% Single cells in a diagram should be indexed, which makes the map easier to
+%% use (ok, not really, but it might be useful).
+%%
+\def\kmcurrentindex{\kmcurrentindexdec}
+\def\kmcurrentindexdec{%
+\the\kmindexcounter\global\advance\kmindexcounter by 1}%
+
+\def\kmcurrentindexbin{%
+\pgfmathdectobase\mynumber{\the\kmindexcounter}{2} \mynumber\global\advance\kmindexcounter by 1}%
+
+%%
+%% We need a macro that computes the powers of two:
+%%
+\def\kmpoweroftwo#1#2{{% Computes #1=2^#2, both of which have to be counters
+ \ifnum#2>0
+ \global\multiply#1 by 2
+ \advance#2 by -1
+ \kmpoweroftwo{#1}{#2}
+ \fi}}
+%%
+%% The macros \kmargumentstring and \kmsetoptstr are needed to
+%% process the variable-length parameters in \karnaughmap:
+%%
+\def\kmargumentstring#1{\gdef\kmstringbuf{#1{}\noexpand\end}}
+%%
+%% The macro \kmsetoptstr reads one token from the list of parameters in
+%% \karnaughmap in the form <[opt]>srt and sets the optional style kmtempsty
+%% and saves its contents of the string srt in macro \kmstr
+%%
+\def\kmsetoptstr{\expandafter\kmgetonetok\kmstringbuf}
+%%
+%% The macros \kmgetonetok, \kmsplittok and \kmoptstrmake are
+%% auxiliary macros used to split the token and save to contents
+%%
+\def\kmgetonetok#1#2\end{\expandafter\kmsplittok#1{}\end \gdef\kmstringbuf{#2\noexpand\end}}
+\def\kmsplittok#1#2\end{\ifx#1[ \kmoptstrmake#2\end \else \kmoptstrmake]#1#2\end \fi}
+\def\kmoptstrmake#1]#2\end{\tikzset{kmtempsty/.style={#1}} \edef\kmstr{#2}}%\typeout{Teste #1 e #2}}
+%%\def\kmoptstrmake#1]#2\end{Test: #1 and #2.\par}
+%%
+%% The macro \karnaughmakemap calls itself recursively until the parameter #1
+%% equals 1, whereupon it draws one cell contents in a node and, if enabled,
+%% another node with the index.
+%%
+\def\karnaughmakemap#1#2#3#4{{%
+ \kmrecursiondepth #1\relax
+ \ifnum\kmrecursiondepth>1
+ \divide\kmrecursiondepth by 2
+ \edef\tempx{#3}
+ \edef\tempy{#4}
+ \kmtemppos=\tempx\relax
+ \advance\kmtemppos by \kmrecursiondepth
+ \edef\tempxs{\the\kmtemppos}
+ \kmtemppos=\tempy\relax
+ \advance\kmtemppos by \kmrecursiondepth
+ \edef\tempys{\the\kmtemppos}
+
+ \ifcase#2
+%%
+%% The parameter #2 of \karnaughmakemap is needed because the inner Karnaugh
+%% maps need to be mirrored. This is achieved by the following case-statement,
+%% which orders the inner Karnaugh maps properly:
+%% +---+---+
+%% | 0 | 1 |
+%% +---+---+
+%% | 2 | 3 |
+%% +---+---+
+%%
+%% Case 0: top-left Karnaugh map
+ \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}%
+ \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}%
+ \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \or
+%% Case 1: top-right Karnaugh map
+ \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}%
+ \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}%
+ \or
+%% Case 2: bottom-left Karnaugh map
+ \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}%
+ \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}%
+ \or
+%% Case 3: bottom-right Karnaugh map
+ \karnaughmakemap{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \karnaughmakemap{\kmrecursiondepth}{2}{\tempx}{\tempy}%
+ \karnaughmakemap{\kmrecursiondepth}{1}{\tempxs}{\tempys}%
+ \karnaughmakemap{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \fi
+ \else
+ \kmsetoptstr{} % reads argument as <[opt]>str
+ \node[kmcell,kmtempsty,shift={(0.5\kmunitlength,0.5\kmunitlength)}] at (#3\kmunitlength,#4\kmunitlength){\kmstr};%
+ \ifenableindices
+ \node[kmindex,shift={(\pgfkeysvalueof{/tikz/kmindexposx},\pgfkeysvalueof{/tikz/kmindexposy})}]
+ at (#3\kmunitlength,#4\kmunitlength) {\kmcurrentindex};
+ \fi
+ \fi}}%
+%%
+%% \karnaughmaketopbar typesets the variable bars of a Karnaugh map that are
+%% located on top of the diagram:
+%%
+\def\karnaughmaketopbar{%
+ \kmbarstart=1
+ \kmpoweroftwo{\kmbarstart}{\kmxvarno} % \kmybarstart is the start
+% position for the \foreach
+ \kmbarlength=\kmbarstart
+ \multiply\kmbarlength by 2 % \kmbarlength is the length of a bar
+ \kmbarmove=\kmbarstart
+ \multiply\kmbarmove by 4 % This is the move distance for the \draw.
+ \kmbarnum=\kmxsize
+ \divide\kmbarnum by \kmbarmove % This is the number of repetitions for
+% the \foreach.
+% The highest-order variable bar needs a special treatment:
+ \ifnum\kmbarnum=0\kmbarnum=1\divide\kmbarlength by 2\fi
+ \advance\kmbarmove by \kmbarstart
+ \kmtemplength=\pgfkeysvalueof{/tikz/kmbar top sep}
+ \multiply \kmtemplength by \kmxvarno
+ \advance \kmtemplength by \pgfkeysvalueof{/tikz/kmbar sep}
+ \advance \kmtemplength by \kmysize\kmunitlength
+ \kmsetoptstr % reads argument as <[opt]>str
+ \ifnum\kmbarnum=1
+ \draw[kmbar,xshift=\kmbarstart\kmunitlength,yshift=\kmtemplength,kmtempsty]
+ (0,0) -- node[above, kmbar label,kmtempsty]{\kmstr} (\kmbarlength\kmunitlength,0);
+ \else
+ \foreach \x in {\kmbarstart,\kmbarmove,...,\kmxsize}
+ \draw[kmbar,xshift=\x\kmunitlength,yshift=\kmtemplength,kmtempsty]
+ (0,0) -- node[above, kmbar label,kmtempsty]{\kmstr} (\kmbarlength\kmunitlength,0);
+ \fi
+}
+%%
+%% \karnaughmakeleftbar typesets the variable bars of a Karnaugh map that are
+%% located on the left of the diagram:
+%%
+\def\karnaughmakeleftbar{%
+ \kmbarstart=1
+ \kmpoweroftwo{\kmbarstart}{\kmyvarno} % \kmbarstart is the start
+% position for the \foreach
+ \kmbarlength=\kmbarstart
+ \multiply\kmbarlength by 2 % \kmbarlength is the length of a bar
+ \kmbarmove=\kmbarstart
+ \multiply\kmbarmove by 4 % This now is the move distance for the
+% \foreach.
+ \kmbarnum=\kmysize
+ \divide\kmbarnum by \kmbarmove % This now is the number of
+% repetitions for the \draw.
+%The highest-order variable bar needs a special treatment:
+ \ifnum\kmbarnum=0\kmbarstart=0\kmbarnum=1\divide\kmbarlength by 2\fi
+ \advance\kmbarmove by \kmbarstart
+ \kmtemplength=-\pgfkeysvalueof{/tikz/kmbar left sep}
+ \multiply \kmtemplength by \kmyvarno
+ \advance \kmtemplength by -\pgfkeysvalueof{/tikz/kmbar sep}
+ \kmsetoptstr % reads argument as <[opt]>str
+ \ifnum\kmbarnum=1
+ \draw[kmbar,yshift=\kmbarstart\kmunitlength,xshift=\kmtemplength,kmtempsty]
+ (0,0) -- node[left,kmbar label,kmtempsty]{\kmstr} (0,\kmbarlength\kmunitlength);
+ \else
+ \foreach \y in {\kmbarstart,\kmbarmove,...,\kmysize}
+ \draw[kmbar,yshift=\y\kmunitlength,xshift=\kmtemplength,kmtempsty]
+ (0,0) -- node[left,kmbar label,kmtempsty]{\kmstr} (0,\kmbarlength\kmunitlength);
+ \fi
+}
+%% \karnaughmakebars calls \karnaughmaketopbar or \karnaughmakeleftbar
+%% depending on whether \kmvarno is odd or even.
+%%
+\def\karnaughmakebars{%
+ \ifnum\kmvarno>0
+ \let\next=\karnaughmakebars
+ \ifodd\kmvarno % We have to make a bar at the top
+ \advance\kmxvarno by -1
+ \karnaughmaketopbar
+ \else % We have to make a bar at the left
+ \advance\kmyvarno by -1
+ \karnaughmakeleftbar
+ \fi
+ \advance\kmvarno by -1
+ \else
+ \let\next=\relax
+ \fi
+ \next
+}
+%%
+%% \karnaughmap is the macro that a user calls if he wants to draw a
+%% Karnaugh map:
+%%
+\def\karnaughmap#1#2#3#4#5{%
+%%
+%% #1 is the number of variables in the Karnaugh map
+%% #2 is the identifier of the function
+%% #3 is the list of identifiers of those variables
+%% #4 is the list of tokens that have to be written into the map
+%% #5 a possibly empty set of TikZ commands that will be drown before
+%% the function values so the values will appear on top of them
+%%
+ \ifenableindices\ifindexbin\gdef\kmcurrentindex{\kmcurrentindexbin}\pgfmathsetbasenumberlength{#1}\else\gdef\kmcurrentindex{\kmcurrentindexdec}\fi\fi
+ \kmvarno=#1 % \kmvarno is the total number of variables
+ \kmyvarno=#1 % \kmyvarno is the number of variable bars at the left
+ \divide\kmyvarno by 2
+ \kmxvarno=#1 % \kmxvarno is the number of variable bars on top
+ \advance\kmxvarno by -\kmyvarno
+ \kmxsize=1
+ \kmpoweroftwo{\kmxsize}{\kmxvarno}
+ \kmysize=1
+ \kmpoweroftwo{\kmysize}{\kmyvarno}
+ \kmtemppos=\kmxsize
+ \advance\kmtemppos by -1
+ \foreach \x in {1,...,\kmtemppos}
+ \draw[kmlines] (\x\kmunitlength,0) -- (\x\kmunitlength,\kmysize\kmunitlength);
+ \kmtemppos=\kmysize
+ \advance\kmtemppos by -1
+ \ifnum\kmtemppos>0
+ \foreach \y in {1,...,\kmtemppos}
+ \draw[kmlines] (0,\y\kmunitlength) -- (\kmxsize\kmunitlength,\y\kmunitlength);
+ \fi
+ \draw[kmbox] (0,0) rectangle (\kmxsize\kmunitlength,\kmysize\kmunitlength);
+ #5
+ \ifdisablebars\relax\else
+ \node[kmvar,above left] at (0,\kmysize\kmunitlength){#2};
+ \kmargumentstring{#3}
+ \karnaughmakebars
+ \fi
+ \kmvarno=#1 % \kmvarno is the total number of variables
+ \kmindexcounter=0
+ \kmargumentstring{#4}
+ \karnaughmakemap{\the\kmysize}{0}{0}{0}
+ \ifodd\kmvarno
+ \divide\kmxsize by 2
+ \karnaughmakemap{\the\kmysize}{1}{\the\kmxsize}{0}
+ \fi
+}%
+%% Vertical Mode
+%% The next three macros are similar to the ones for normal mode.
+%% The macro \karnaughmakemapvert calls itself recursively until the parameter #1
+%% equals 1, whereupon it draws one cell contents in a node and, if enabled,
+%% another node with the index.
+%%
+\def\karnaughmakemapvert#1#2#3#4{{%
+ \kmrecursiondepth #1\relax
+ \ifnum\kmrecursiondepth>1
+ \divide\kmrecursiondepth by 2
+ \edef\tempx{#3}
+ \edef\tempy{#4}
+ \kmtemppos=\tempx\relax
+ \advance\kmtemppos by \kmrecursiondepth
+ \edef\tempxs{\the\kmtemppos}
+ \kmtemppos=\tempy\relax
+ \advance\kmtemppos by \kmrecursiondepth
+ \edef\tempys{\the\kmtemppos}
+
+ \ifcase#2
+%%
+%% The parameter #2 of \karnaughmakemapvert is needed because the inner Karnaugh
+%% maps need to be mirrored. This is achieved by the following case-statement,
+%% which orders the inner Karnaugh maps properly:
+%% +---+---+
+%% | 0 | 2 |
+%% +---+---+
+%% | 1 | 3 |
+%% +---+---+
+%%
+%% Case 0: top-left Karnaugh map
+ \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}%
+ \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}%
+ \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \or
+%% Case 1: bottom-left Karnaugh map
+ \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}%
+ \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}%
+ \or
+%% Case 2: top-right Karnaugh map
+ \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}%
+ \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}%
+ \or
+%% Case 3: bottom-right Karnaugh map
+ \karnaughmakemapvert{\kmrecursiondepth}{3}{\tempxs}{\tempy}%
+ \karnaughmakemapvert{\kmrecursiondepth}{2}{\tempxs}{\tempys}%
+ \karnaughmakemapvert{\kmrecursiondepth}{1}{\tempx}{\tempy}%
+ \karnaughmakemapvert{\kmrecursiondepth}{0}{\tempx}{\tempys}%
+ \fi
+ \else
+ \kmsetoptstr{} % reads argument as <[opt]>str
+ \node[kmcell,kmtempsty,shift={(0.5\kmunitlength,0.5\kmunitlength)}] at (#3\kmunitlength,#4\kmunitlength){\kmstr};
+ \ifenableindices
+ \node[kmindex,shift={(\pgfkeysvalueof{/tikz/kmindexposx},\pgfkeysvalueof{/tikz/kmindexposy})}]
+ at (#3\kmunitlength,#4\kmunitlength) {\kmcurrentindex};
+ \fi
+ \fi}}%
+%%
+%% \karnaughmakebarsvert calls \karnaughmaketopbar or \karnaughmakeleftbar
+%% depending on whether \kmvarno is odd or even.
+%%
+\def\karnaughmakebarsvert{%
+ \ifnum\kmvarno>0
+ \let\next=\karnaughmakebarsvert
+ \ifodd\kmvarno % We have to make a bar at the left
+ \advance\kmyvarno by -1
+ \karnaughmakeleftbar
+ \else % We have to make a bar at the top
+ \advance\kmxvarno by -1
+ \karnaughmaketopbar
+ \fi
+ \advance\kmvarno by -1
+ \else
+ \let\next=\relax
+ \fi
+ \next
+}
+%%
+%% \karnaughmapvert is the macro that a user calls if he wants to draw a
+%% Karnaugh map in vertical mode (not be confused with TeX vertical mode):
+%%
+\def\karnaughmapvert#1#2#3#4#5{%
+%%
+%% #1 is the number of variables in the Karnaugh map
+%% #2 is the identifier of the function
+%% #3 is the list of identifiers of those variables
+%% #4 is the list of tokens that have to be written into the map
+%% #5 a possibly empty set of TikZ commands that will be drown before
+%% the function values so the values will appear on top of them
+%%
+ \ifenableindices\ifindexbin\gdef\kmcurrentindex{\kmcurrentindexbin}\pgfmathsetbasenumberlength{#1}\else\gdef\kmcurrentindex{\kmcurrentindexdec}\fi\fi
+ \kmvarno=#1 % \kmvarno is the total number of variables
+ \kmxvarno=#1 % \kmxvarno is the number of variable bars on top
+ \divide\kmxvarno by 2
+ \kmyvarno=#1 % \kmyvarno is the number of variable bars at the left
+ \advance\kmyvarno by -\kmxvarno
+ \kmxsize=1
+ \kmpoweroftwo{\kmxsize}{\kmxvarno}
+ \kmysize=1
+ \kmpoweroftwo{\kmysize}{\kmyvarno}
+ \kmtemppos=\kmxsize
+ \advance\kmtemppos by -1
+ \ifnum\kmtemppos>0
+ \foreach \x in {1,...,\kmtemppos}
+ \draw[kmlines] (\x\kmunitlength,0) -- (\x\kmunitlength,\kmysize\kmunitlength);
+ \fi
+ \kmtemppos=\kmysize
+ \advance\kmtemppos by -1
+ \foreach \y in {1,...,\kmtemppos}
+ \draw[kmlines] (0,\y\kmunitlength) -- (\kmxsize\kmunitlength,\y\kmunitlength);
+ \draw[kmbox] (0,0) rectangle (\kmxsize\kmunitlength,\kmysize\kmunitlength);
+ #5
+ \ifdisablebars\relax\else
+ \node[kmvar,above left] at (0,\kmysize\kmunitlength){#2};
+ \kmargumentstring{#3}
+ \karnaughmakebarsvert
+ \fi
+ \kmvarno=#1 % \kmvarno is the total number of variables
+ \kmindexcounter=0
+ \kmargumentstring{#4}
+ \ifodd\kmvarno
+ \divide\kmysize by 2
+ \karnaughmakemapvert{\the\kmxsize}{0}{0}{\the\kmysize}
+ \karnaughmakemapvert{\the\kmxsize}{1}{0}{0}
+ \else
+ \karnaughmakemapvert{\the\kmxsize}{0}{0}{0}
+ \fi
+}%
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ladder/README.txt b/graphics/pgf/contrib/tikz-ladder/README.txt
new file mode 100644
index 0000000000..c91ee1802a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ladder/README.txt
@@ -0,0 +1,34 @@
+Copyright (C) 2018 by Luis Paulo Laus, <laus@utfpr.edu.br>
+------------------------------------------------------------
+
+The tikz-ladder package may be distributed and/or modified
+under the conditions of the LaTeX Project Public License,
+either version 1 of this license or (at your option) any later
+version. The latest version of this license is in:
+ http://www.latex-project.org/lppl.txt and version 1 or
+later is part of all distributions of LaTeX version 1999/12/01
+or later.
+
+ Version 1.1 2018-02-06
+
+------------------------------------------------------------
+
+Ladder diagram (LD) is a graphical programming language
+that has evolved from electrical wiring diagrams for relay
+control systems used with programmable controllers (PLC)
+as described in the international standard IEC-61131-3. A
+LD program enables the programmable controller to test
+and modify data by means of standardized graphic symbols.
+These symbols are laid out in networks in a manner similar
+to a ``rung'' of a relay ladder logic diagram. This library
+provides TikZ symbols to draw high quality ladder diagrams.
+All standard and some non-standard symbols are possible,
+including all kinds of contacts, coils and blocks. I decided
+to write this package, despite of the fact that there is
+available another package named `ladder' that also uses TikZ
+to typeset ladder diagrams, because that package seems to
+lack support for blocks. The tikz-ladder, on the contrary,
+supports all features described in IEC-61131-3, namely,
+blocks (for functions and function blocks), contacts and coils.
+
+------------------------------------------------------------ \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.pdf b/graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.pdf
new file mode 100644
index 0000000000..139ee83b06
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.tex b/graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.tex
new file mode 100644
index 0000000000..7cc809da1b
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ladder/doc/tikz-ladder-doc.tex
@@ -0,0 +1,856 @@
+%% This is file `tikz-ladder-doc.tex'
+%% Version: 1.1
+%% Version date: 2018-02-06
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software `tikzlibraryladder.code.tex' and its
+%% accompanying documentation and `The Copyright Holder' referring to the
+%% person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+\documentclass[a4paper]{ltxdoc}
+\usepackage[hyphens]{url}
+\usepackage[pdfborder={0 0 0}]{hyperref}
+\usepackage[version=latest]{pgf}
+\usepackage{calc,listings,tikz}
+
+\usepackage{hyperref}
+\hypersetup{%
+ colorlinks=false, % use true to enable colors below:
+ linkcolor=blue,%red,
+ filecolor=blue,%magenta,
+ urlcolor=blue,%cyan,
+ citecolor=blue,
+ pdfborder=0 0 0,
+}
+
+% We need lots of libraries...
+\usetikzlibrary{backgrounds}
+
+\newif\ifgdccodebasic
+\newif\ifgdccodeogdf
+
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage{amsmath,amssymb}
+\usepackage{xxcolor}
+%% \usepackage{pifont}
+%\usepackage{tgpagella} % no ligatures (test)
+\usepackage{makeidx}
+\usepackage{enumitem}
+\usepackage[T1]{fontenc}
+
+\input{pgfmanual-en-macros} % Borrowed from TikZ/PGF
+
+\makeindex
+
+\makeatletter
+\renewcommand*\l@section[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \setlength\@tempdima{2.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
+ \endgroup
+ \fi}
+\renewcommand*\l@subsection{\@dottedtocline{2}{2.5em}{3.3em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{5.8em}{4.2em}}
+\def\@pnumwidth{2.2em}
+\makeatother
+
+
+% Global styles:
+\tikzset{
+ every plot/.style={prefix=plots/pgf-},
+ shape example/.style={
+ color=black!30,
+ draw,
+ fill=yellow!30,
+ line width=.5cm,
+ inner xsep=2.5cm,
+ inner ysep=0.5cm}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file really starts here, all the above is for pgfmanual
+% compatibility
+% \usetikzlibrary{circuits.plc.ladder}
+\input ../tex/tikzlibrarycircuits.plc.ladder.code
+% some new lenghts
+\newlength{\ladderskip}
+\setlength{\ladderskip}{5\tikzcircuitssizeunit} % 5\tikzcircuitssizeunit = 35pt
+\newlength{\ladderrungsep}
+\setlength{\ladderrungsep}{.2\ladderskip}
+\def\ladderrungend#1{\pgftransformyshift{-#1\ladderskip-\ladderrungsep}}
+
+\begin{document}
+
+\title{Typesetting Ladder Diagrams with \LaTeX{} and \tikzname{}}
+\author{Luis Paulo Laus\\e-mail: \texttt{laus@utfpr.edu.br}}
+\date{Version: 1.1, Version date: 2018-02-06}
+
+\maketitle
+
+\section{Abstract}
+Ladder diagram (LD) is a graphical programming language that has evolved from electrical wiring diagrams for relay control systems used with programmable controllers (PLC\footnote{Formerly known as programable logic controllers.}) as described in the international standard IEC-61\,131-3. A LD program enables the programmable controller to test and modify data by means of standardized graphic symbols. These symbols are laid out in networks in a manner similar to a ``rung'' of a relay ladder logic diagram. This library provides \tikzname\ symbols to draw high quality ladder diagrams. All standard and some non-standard symbols are possible, including all kids of contacts, coils and blocks. I decided to write this package, despite of the fact that there is available another package named |ladder| that also uses \tikzname\ to typeset ladder diagrams, because that package seems\footnote{Sorry, but the documentation is in French and I limited myself to look at the figures.} to lack support for blocks. The |tikz-ladder|, on the contrary, supports all features described in IEC-61\,131-3, namely, blocks (for functions and function blocks), contacts and coils.
+
+
+\section{Ladder Diagram}
+According to IEC-61\,131-3, the usage of letters, semigraphic or graphic for the representation of graphical elements is implementer specific and not a normative requirement. This poses a problem for creating a package for typesetting ladder diagrams in agreement to a standard that should be used by everyone: you can do whatever you want. Thus, this package provides \tikzname\ symbols for typesetting ladder diagram as close as possible to the standard, but not to close since a program in the standard would look like:
+\begin{center}
+\begin{minipage}{5cm}
+\begin{verbatim}
+| a b c d |
++--( )--| |--+--( )---( )--+
+| | e |
+| +-----( )-----+
+| |
+\end{verbatim}
+\end{minipage}
+\end{center}
+and it is probably not what you want. With this package, you can produce something like\footnote{This slightly awkward example was extracted from~[IEC-61\,131-3/2013, p. 218]; and explained by: ``In the rung shown above, the value of the Boolean output $a$ is always |TRUE|, while the value of outputs $c$, $d$ and $e$ upon completion of an evaluation of the rung is equal to the value of the input $b$.''. In 2013 version there is typo: the $a$ is missing. The 2003 version is correct.}:
+
+\begin{center}
+\begin{tikzpicture} [circuit plc ladder,thick,x=\ladderskip,y=\ladderskip]
+ \draw(0,0)
+ to [coil={info={$a$}}] ++(1,0)
+ to [contact NO={info={$b$}}] ++(1,0) coordinate(node1)
+ to [coil={info={$c$}}] ++(1,0)
+ to [coil={info={$d$}}] ++(1,0) coordinate(laddertopright);
+ \draw(node1) -- ++(0,-1)
+ to [coil={info={$e$}}] ++(2,0);
+% power rails
+ \draw let \p1=(laddertopright) in
+ (0,\y1+0.7\ladderskip) -- (0,-\ladderskip-\ladderrungsep)
+ (\x1,\y1+0.7\ladderskip) -- (\x1,-\ladderskip-\ladderrungsep);
+\end{tikzpicture}
+\end{center}
+
+
+\section{Ladder Diagram Library}
+
+\begin{pgflibrary}{circuits.plc.ladder}
+This library provides graphics for ladder diagram related to programable controllers (PLC) and according to the international standard IEC-61\,131-3. The library was written to extend the standard \tikzname-library |circuit|. The reader is urged to read the Section~``Circuit Libraries'' of \tikzname\ manual.
+This library defines the following key:
+
+\begin{key}{/tikz/circuit plc ladder}
+This style calls |circuit plc ladder| and installs ladder diagram graphics for symbols like contacts, coils and blocks.
+\end{key}
+In the next sections a description of the library features is provided.
+\end{pgflibrary}
+
+
+\section{Contacts}
+A contact is an element which imparts a state to the horizontal link on its right side which is equal to the Boolean |AND| of the state of the horizontal link at its left side with an appropriate function of an associated Boolean input, output, or memory variable. A contact does not modify the value of the associated Boolean variable.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit plc ladder]
+ \node[name=s, shape=contact ladder, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=6cm]{};
+\foreach \anchor/\placement in {center/above, 30/above right, north/above, south/below, east/left,
+ west/right, north east/above, south east/below, south west/below, north west/above,input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+All kinds of standardized contacts can be represented: normally open contact (NO); normally closed contact (NC); positive transition-sensing contact (P); negative transition-sensing contact (N); compare contacts both typed and overloaded (for typesetting purposes it makes no difference.) In the following examples, the Boolean variable associated with the contact is indicated by ``***''.
+
+Normally open contact (NO):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [contact NO={info={***}}] ++(2,0);
+\end{codeexample}
+
+Normally closed contact (NC):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [contact NC={info={***}}] ++(2,0);
+\end{codeexample}
+
+Variation of normally closed contact (NC):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [var contact NC={info={***}}] ++(2,0);
+\end{codeexample}
+
+Positive transition-sensing contact (P):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [contact P={info={***}}] ++(2,0);
+\end{codeexample}
+
+Negative transition-sensing contact (N):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [contact N={info={***}}] ++(2,0);
+\end{codeexample}
+
+Compare contact (typed):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [contact NO={
+ info={\scriptsize intvalue1},
+ info'={\scriptsize intvalue2},
+ symbol={\tiny$\genfrac{}{}{0pt}{}{>}{\text{Int}}$}}] ++(2,0);
+\end{codeexample}
+
+Compare contact (overloaded):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [contact NO={
+ info={\scriptsize value1},
+ info'={\scriptsize value2},
+ symbol={\tiny$\genfrac{}{}{0pt}{}{<>}{}$}}] ++(2,0);
+\end{codeexample}
+
+There are two possibilities for normally closed contact. It is not recommended to mix them in the same document unless to explain their equivalence.
+
+\subsection{Keys for contacts}
+
+The most common key used with contacts is |info| which sets the variable name associated with the contacts. One may also need |info'| and |name|; both standard keys. In addition to the keys described in Section~''Circuit Libraries'' of ``The TikZ and PGF Packages -- Manual for version 3.0.1a'', contacts accept:
+\begin{key}{/tikz/symbol=\meta{name}}
+This key sets the information, usually a single letter or comparison symbol, that will appear between the vertical lines. Usable for drawing compare contacts.
+\end{key}
+
+
+\section{Coils}
+
+A coil copies the state of the link on its left to the link on its right without modification, and stores an appropriate function of the state or transition of the left link into the associated Boolean variable.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit plc ladder]
+ \node[name=s, shape=coil ladder, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=6cm]{};
+\foreach \anchor/\placement in {center/above, 30/above right, north/above, south/below, east/left,
+ west/right, north east/above, south east/below, south west/below, north west/above,input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+ \draw[thin]([yshift=-4mm]s.south east) -- ++(0,-0.9) coordinate(x1) -- ++(0.2,0)
+ ([yshift=-4mm]$0.2*(s.south west) + 0.8*(s.south east)$) -- ++(0,-0.9) coordinate(x2) -- ++(-0.2,0)
+ (x2) -- ++(0,-0.2);
+ \draw[thin,<->] (x1) -- (x2) node[midway,above]{0.2};
+ \draw[thin]([yshift=-4mm]s.south east) -- ++(0,-1.5) coordinate(x1) -- ++(0.2,0)
+ (x1) -- ++(0,-0.2) ([yshift=-4mm]s.south west) -- ++(0,-1.5) coordinate(x2) -- ++(-0.2,0)
+ (x2) -- ++(0,-0.2);
+ \draw[thin,<->] (x1) -- (x2) node[midway,above]{1};
+\end{tikzpicture}
+\end{codeexample}
+The |coil ladder curvature| controls how round the coils look like. The default value is 0.2 as indicated above; 0.5 makes a round coil like\footnote{It can be used to draw relay coils according to NEMA -- National Electrical Manufacturers Association.}:
+
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil R={info={Motor},
+ coil ladder curvature=0.5,
+ minimum size=2.4\tikzcircuitssizeunit}] ++(2,0);
+\end{codeexample}
+
+Note that it is also necessary to set the |minimum size| because coils have a proportion of $2.4\times2$. If you do this frequently, you can set the style for the coils like:
+
+\begin{codeexample}[code only]
+every coil R/.style={coil ladder curvature=0.5,minimum size=2.4\tikzcircuitssizeunit}
+\end{codeexample}
+
+Values above 0.5, although possible, lead to estrange figures.
+
+All kind of standardized coils are supported: coil (normal); negated coil (normally activated, NA); set (latch) coil; reset (unlatch) coil; positive transition-sensing coil; and negative transition-sensing coil. In the following examples, the Boolean variable associated with the coil is indicated by ``***''.
+
+Coil (normally deactivated):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil={info={***}}] ++(2,0);
+\end{codeexample}
+
+Negated coil (normally activated, NA):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil NA={info={***}}] ++(2,0);
+\end{codeexample}
+
+Variation of negated coil (normally activated, NA):
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [var coil NA={info={***}}] ++(2,0);
+\end{codeexample}
+
+Set (latch) coil:
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil S={info={***}}] ++(2,0);
+\end{codeexample}
+
+Reset (unlatch) coil:
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil R={info={***}}] ++(2,0);
+\end{codeexample}
+
+Positive transition-sensing coil:
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil={info={***},symbol=P}] ++(2,0);
+\end{codeexample}
+
+Negative transition-sensing coil:
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil={info={***},symbol=N}] ++(2,0);
+\end{codeexample}
+
+Note that positive and negative transition-sensing coils are not supported directly because, to be honest, no one uses them. Their symbols have to be coined using a normal coil and the parameter |symbol|.
+
+There are two possibilities for negated coil (NA). It is not recommended to mix them in the same document unless to explain their equivalence.
+
+It is possible, though not recommend because it disagrees with IEC-61\,131-3, to use non-standard coils, e.g., some people uses L (for latch) and U (for unlatch) instead of, S and U, respectively. This is achieved by setting the |symbol| of a |coil| like:
+
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil={info={***},symbol=L}] ++(2,0);
+\end{codeexample}
+\noindent{}The same trick used for positive and negative transition-sensing coils.
+
+
+\subsection{Keys for coils}
+
+The most common key used with coils is |info| which sets the variable name associated with the coil. One may also need |info'|, |name| and |minimum size|; all standard keys. In addition to the keys described in Section~``Circuit Libraries'' of ``The TikZ and PGF Packages -- Manual for version 3.0.1a'', coils accept:
+\begin{key}{/tikz/symbol=\meta{name}}
+This key sets the information, usually a single letter, that will appear between the parenthesis. Usable for non-standard or rarely used coils lake positive and negative transition-sensing coils.
+\begin{codeexample}[width=2.3cm]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil={info={***},symbol=L}] ++(2,0);
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/coil ladder curvature=\meta{curvature index} (initially 0.2)}
+This key sets the curvature index, a number between 0.001 and 0.5 (in practice, though higher values are permitted) that defined how much the parentheses will be bent. It is the fraction of the total coil width occupied by one parenthesis. Usable for drawing electric coils in NEMA standard. In this case, |minimum size| will have to adjusted in order to correct the coil aspect ratio.
+\begin{codeexample}[width=2.3cm,leave comments]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil={info={\%Q0.0},
+ coil ladder curvature=0.1}] ++(2,0);
+\end{codeexample}
+\begin{codeexample}[width=2.3cm,leave comments]
+\tikz[circuit plc ladder,thick]
+ \draw(0,0) to [coil={info={\%Q0.0},
+ coil ladder curvature=0.3}] ++(2,0);
+\end{codeexample}
+\end{key}
+
+
+\section{Blocks}
+
+Blocks are used to represent all other features besides contacts and coils, namely functions and function blocks, mainly: timers, counters, communication, string treatment, arithmetic and logical operations. Blocks can have many inputs and outputs. The first input and output shall be aligned with the rung line. This is done automatically and explains why the |center| anchor is not on the centre of the rectangle. For the exact rectangle centre use the |block center| anchor.
+
+Next, a block for a counter is represented with the anchors, you can see the input |>A| causes a clock input indication and the symbol |>| itself is gobbled. The input and output names are not accordingly to the standard IEC-61\,131-3.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[circuit plc ladder]
+ \node[name=s, shape=block ladder, shape example, minimum width=8cm, minimum height=8cm, inner xsep=1cm,
+ inner ysep=1cm, input sep=2cm, output sep=4cm, inputs={>A,B,C}, clksize=2cm, outputs={X,Y}, symbol
+ color=black!30, symbol={\textcolor{red}{SYMBOL}}] {block \vrule width1pt height2cm};
+ \foreach \anchor/\placement in {center/right, block center/above,text/left, 0/left, 15/above right, 60/above,
+ 270/above, 300/above, mid/above, mid east/right, mid west/left, base/below,
+ base east/below right, base west/left, north/above, south/below, east/left, west/right,
+ north east/above right, south east/below, south west/below, north west/above, input 1/left,
+ input 2/left, input 3/left, output 1/right, output 2/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+In the following subsections the standard names are employed accordingly to IEC-61\,131-3.
+
+\subsection{Keys for blocks}
+
+The three most common keys used with blocks are |symbol| which sets the block type, |name| which sets a \tikzname\ label to be used in future references, particularly to access the inputs and outputs, and |info| which sets the variable name associated with the POU (program organization unit) represented by the block. One may also need |info'| and |minimum width|; all standard keys. In addition to the keys described in Section~``Circuit Libraries'' of ``The TikZ and PGF Packages -- Manual for version 3.0.1a'', blocks accept:
+\begin{key}{/tikz/symbol=\meta{name}}
+This key sets the information that appears inside the block rectangle, on the top. It specifies the POU type represented by the block.
+\end{key}
+
+\begin{key}{/tikz/symbol color=\meta{colour}}
+This key sets the colour used for all texts inside the block: symbol, inputs and outputs. In a |beamer| presentation it can be override for a particular input/output by forcing the text colour like this: |{\textcolor{blue}{Q}}|. For other document classes, you need to use a box:
+\begin{codeexample}[width=4.4cm]
+\newsavebox{\myeqbox} % only once, preferable in the document preamble
+\savebox{\myeqbox}{\textcolor{blue}{Q}}
+\tikz[circuit plc ladder,thick] \draw[orange](0,0) to [block={violet,
+ info={[blue]$CT1$},inputs={>CU,R,PV}, outputs={\usebox{\myeqbox},CV},
+ symbol=CTU\_SINT, symbol color=red, minimum width=2.4cm}] ++(4,0);
+\end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikz/clksize=\meta{width} (initially 0.8\\|tikzcircuitssizeunit|)}
+This key sets the size for the clock input indicator (|>|).
+\begin{codeexample}[]
+\tikz[circuit plc ladder,thick] \draw(0,0) to [block={
+ info=$CT1$,inputs={>$CU$,R,PV}, outputs={Q,CV},
+ symbol=CTU\_SINT, clksize=0.4cm,
+ minimum width=2.4cm}] ++(4,0);
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/input sep=\meta{width} (initially 1.6\\|tikzcircuitssizeunit|)}
+This key sets the vertical distance between two consecutive inputs.
+\begin{codeexample}[width=5.3cm]
+\begin{tikzpicture}[circuit plc ladder,thick]
+ \draw(0,0) to [contact NO={info={$I1$}}] ++(1,0)
+ to [block={info=$TM1$,symbol=TON,
+ inputs={EN,IN,PT},outputs={ENO,Q,ET},
+ name=TM1,minimum width=1.6cm,
+ input sep=1cm,output sep=1cm}] ++(3,0)
+ to [coil={info={$M$}}] ++(1,0);
+ \draw(0,-1) to [contact NO={info={$I2$}}] ++(1,0) -- (TM1.input 2)
+ (TM1.output 2) -- (4,-1) to [coil={info={$R$}}] ++(1,0)
+ (TM1.input 3) -- +(-3mm,0)node[left]{T\#3s} (0,1) -- +(0,-3.5);
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/output sep=\meta{width} (initially 1.6\\|tikzcircuitssizeunit|)}
+This key sets the vertical distance between two consecutive outputs (see example above).
+\end{key}
+
+\begin{key}{/tikz/input=\meta{inputs} (initially |{IN}|)}
+This key sets the input names that appear inside the block. It is a comma separated list of inputs. Clock inputs are indicated by the first character being |>|. Coordinates for future external connection are automatically generated in the form \emph{name}.|input|~$n$, where $n$ is the input number starting in 1. An empty input can be generated by |{~}|. The minimal number of inputs is one, an empty list of inputs generates an error.
+\end{key}
+
+\begin{key}{/tikz/output=\meta{outputs} (initially |{Q}|)}
+This key sets the output names that appear inside the block. It is a comma separated list of outputs. Coordinates for future external connection are automatically generated in the form \emph{name}.|output|~$n$, where $n$ is the output number starting in 1. An empty output can be generated by |{}|. The minimal number of outputs is one, an empty list of outputs generates an error.
+\end{key}
+
+
+\subsection{Timers}
+The standard IEC-61\,131-3 specifies three timers as follows:
+
+\noindent{}On-delay:
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={IN,PT},outputs={Q,ET},
+ symbol=TON,minimum width=18mm] (tp1) {};
+\draw (tp1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (tp1.input 2) -- +(-5mm,0) node[left]{TIME}
+ (tp1.output 1) -- +(5mm,0) node[right]{BOOL}
+ (tp1.output 2) -- +(5mm,0) node[right]{TIME};
+\end{codeexample}
+
+\noindent{}Off-delay:
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={IN,PT},outputs={Q,ET},
+ symbol=TOF,minimum width=18mm] (tp1) {};
+\draw (tp1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (tp1.input 2) -- +(-5mm,0) node[left]{TIME}
+ (tp1.output 1) -- +(5mm,0) node[right]{BOOL}
+ (tp1.output 2) -- +(5mm,0) node[right]{TIME};
+\end{codeexample}
+
+\noindent{}Pulse:
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={IN,PT},outputs={Q,ET},
+ symbol=TP,minimum width=18mm] (tp1) {};
+\draw (tp1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (tp1.input 2) -- +(-5mm,0) node[left]{TIME}
+ (tp1.output 1) -- +(5mm,0) node[right]{BOOL}
+ (tp1.output 2) -- +(5mm,0) node[right]{TIME};
+\end{codeexample}
+
+\subsection{Counters}
+The clock input is indicated by the character |>| which need to be the very first one in the input description of a clock input. You can use any number of clock inputs and they can appear in any order. For instance, the inputs of an up-down counter with enable input shall be declare as |inputs={EN,>CU,>CD,R,LD,PV}|.
+
+The standard IEC-61\,131-3 specifies three counters. In the following examples, the symbol ``*'' indicates the numerical type of the counter (like |INT|, |DINT|, etc.).
+
+\noindent{}Up-Counter:
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={>CU,R,PV},outputs={Q,CV},
+ symbol=CTU\_*,minimum width=20mm] (ct1) {};
+\draw (ct1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 2) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 3) -- +(-5mm,0) node[left,yshift=-0.4ex]{*}
+ (ct1.output 1) -- +(5mm,0) node[right]{BOOL}
+ (ct1.output 2) -- +(5mm,0) node[right,yshift=-0.4ex]{*};
+\end{codeexample}
+
+\noindent{}Down-counters:
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={>CD,LD,PV},outputs={Q,CV},
+ symbol=CTD\_*,minimum width=20mm] (ct1) {};
+\draw (ct1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 2) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 3) -- +(-5mm,0) node[left,yshift=-0.4ex]{*}
+ (ct1.output 1) -- +(5mm,0) node[right]{BOOL}
+ (ct1.output 2) -- +(5mm,0) node[right,yshift=-0.4ex]{*};
+\end{codeexample}
+
+\noindent{}Up-down counters:
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={>CU,>CD,R,LD,PV},outputs={QU,QD,CV},
+ symbol=CTUD\_*,minimum width=20mm] (ct1) {};
+\draw (ct1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 2) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 3) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 4) -- +(-5mm,0) node[left]{BOOL}
+ (ct1.input 5) -- +(-5mm,0) node[left,yshift=-0.4ex]{*}
+ (ct1.output 1) -- +(5mm,0) node[right]{BOOL}
+ (ct1.output 2) -- +(5mm,0) node[right]{BOOL}
+ (ct1.output 3) -- +(5mm,0) node[right,yshift=-0.4ex]{*};
+\end{codeexample}
+
+\subsection{Standard bistable function blocks}
+
+Bistable function block (set dominant): |RS(S1,R, Q1)|
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={S1,R},outputs={Q1},
+ symbol=SR,minimum width=18mm] (sr1) {};
+\draw (sr1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.input 2) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.output 1) -- +(5mm,0) node[right]{BOOL};
+\end{codeexample}
+
+\noindent{}Bistable function block (set dominant) with long input names: |RS(SET1,RESET, Q1)|
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={SET1,RESET},outputs={Q1},
+ symbol=SR,minimum width=18mm] (sr1) {};
+\draw (sr1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.input 2) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.output 1) -- +(5mm,0) node[right]{BOOL};
+\end{codeexample}
+
+\noindent{}Bistable function block (reset dominant): |RS(S,R1, Q1)|
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={S,R1},outputs={Q1},
+ symbol=SR,minimum width=18mm] (sr1) {};
+\draw (sr1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.input 2) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.output 1) -- +(5mm,0) node[right]{BOOL};
+\end{codeexample}
+
+\noindent{}Bistable function block (reset dominant) with long input names\footnote{Here we have a clear inconsistency between the text description that presents the input |RESET1| and graphical representation where it is |R1|. It is probably just a typo, but the form presented in~[IEC-61\,131-3/2013, p. 112] was kept unchanged.}: |RS(SET,RESET1, Q1)|
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={SET,R1},outputs={Q1},
+ symbol=SR,minimum width=18mm] (sr1) {};
+\draw (sr1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.input 2) -- +(-5mm,0) node[left]{BOOL}
+ (sr1.output 1) -- +(5mm,0) node[right]{BOOL};
+\end{codeexample}
+
+
+\subsection{Standard edge detection function blocks}
+
+Rising edge detector: |R_TRIG(CLK, Q)|
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={CLK},outputs={Q},
+ symbol=R\_TRIG,minimum width=20mm] (ed1) {};
+\draw (ed1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (ed1.output 1) -- +(5mm,0) node[right]{BOOL};
+\end{codeexample}
+
+\noindent{}Falling edge detector: |F_TRIG(CLK, Q)|
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+\node[block,inputs={CLK},outputs={Q},
+ symbol=F\_TRIG,minimum width=20mm] (ed1) {};
+\draw (ed1.input 1) -- +(-5mm,0) node[left]{BOOL}
+ (ed1.output 1) -- +(5mm,0) node[right]{BOOL};
+\end{codeexample}
+
+
+\subsection{Call representation}
+
+A call is used to execute a function, a function block instance, or a method of a function block or class. They are represented by blocks.
+
+The proper map for in-out variables (|VAR_IN_OUT|) needs special care. This map is represented by a line internal to the block connecting the left and right side of the in-out variable. The problem is that |tikz-ladder| only creates anchors at the left side of the inputs and right side of outputs. We need the opposite. This situation can be overcome in either two ways: using |calc| library to add and subtract a suitable distance to/from the standard anchors; creating two coordinates related to the input and output anchors but dislocated a suitable amount towards the interior of the block. Using |calc| library, one examples is:
+\begin{codeexample}[width=6cm,pre={\begin{tikzpicture}[circuit plc ladder,thick]},post=\end{tikzpicture}]
+ \draw(0,0)
+ to [contact NO={info={cond}}] ++(1,0)
+ to [block={inputs={EN,A,C},outputs={ENO,B,C},
+ symbol=myFB, info=myInst, name=mf1,
+ minimum width=1.6cm,
+ input sep=1.2em, output sep=1.2em}] ++(3,0)
+ to [coil={info={X}}] +(1,0);
+ \draw (mf1.input 2) -- +(-0.3cm,0) node[left]{v1}
+ (mf1.input 3) -- +(-0.3cm,0) node[left]{v3}
+ (mf1.output 2) -- +(0.3cm,0) node[right]{v2}
+ (mf1.output 3) -- +(0.3cm,0)
+ ($(mf1.input 3) + (1em,0)$) -- ($(mf1.output 3) - (1em,0)$);
+\end{codeexample}
+
+If you prefer to use the |\coordinate| command, place:
+\begin{codeexample}[code only]
+ \coordinate[xshift=1em] (p1) at (mf1.input 3);
+ \coordinate[xshift=-1em] (p2) at (mf1.output 3);
+\end{codeexample}
+\noindent{}between the two |\draw| commands and replace de last code line by \verb|(p1) -- (p2);|.
+
+
+\section{Design Guidance\label{guidance}}
+This section brings some recommendations that reflect the way I produce ladder diagrams. It may or may not work for you. Feel free to e-mail me if you have better ideas.
+
+The first thing to consider is that, as the manual says, ``\tikzname\ \emph{ist kein Zeichenprogramm}'' which translates to ``\tikzname\ \emph{is not a drawing program}''. You shall start with a draft of you diagram and then codify it using \tikzname. Generally, a handmade pencil sketch will do. In this draft, you shall use node names for future reference.
+
+The second thing to consider is that |tikz-ladder| uses the |\tikzcircuitssizeunit| to keep all figures proportional. Therefore, when you consider any dimension related to symbol size it is good idea to set that dimension in respect to |\tikzcircuitssizeunit|, i.e., using |\tikzcircuitssizeunit| as the length unit\footnote{Therefore, all the examples in the previous sections should be reviewed.}. The default value of |\tikzcircuitssizeunit| is 7\,pt or approximately 2.46\,mm and it can be set by the |circuit symbol unit| key among several other keys. Even better, you can establish your own length unit and set $x$ and $y$ to that length unit. In this way you will be working on a grid; if it is too big or too small you will have to change a single declaration. The |\tikzcircuitssizeunit| is too small for that purpose, so I use and recommend |5\tikzcircuitssizeunit| instead. Moreover, I like to leave a small space between rungs, so a second new length can be used to keep this amount. Again, you can adjust it globally. Thus, just after loading the |tikz-ladder| library I use to declare:
+\begin{codeexample}[code only]
+\newlength{\ladderskip}
+\setlength{\ladderskip}{5\tikzcircuitssizeunit} % 5\tikzcircuitssizeunit = 35pt
+\newlength{\ladderrungsep}
+\setlength{\ladderrungsep}{.2\ladderskip}
+\def\ladderrungend#1{\pgftransformyshift{-#1\ladderskip-\ladderrungsep}}
+\end{codeexample}
+\noindent{}where:
+\begin{description}[align=right,leftmargin=3.2cm,labelwidth=3cm,labelsep=2mm]
+\item[|ladderskip|] is the length that controls all distances in the diagram;
+\item[|ladderrungsep|] is the additional separation between two successive rungs; and
+\item[|ladderrungend|] is a macro that marks the end of a rung. Actually, it leaves a space and set the new vertical datum. The parameter of this macros is the number of rows the ending rung has plus some extra space if you like it.
+\end{description}
+
+To keeps track of a few rows in a rung is easy, but to place manually everything in the diagram is not. So, I devised a strategy: draw one rung at a time and move the datum (reset the origin) at the end of every rung, thus I can start fresh another rung. This is done by macro |\ladderrungend| which resets the vertical reference to a vertical position $n$ rows below the current position (plus some inter rung space). The macro also serves to \emph{mark} rung end in the code (\tikzname\ ``program'') that generates the diagram making it more readable.
+
+The options passed to the \tikzname\ environment in the next example are \verb|[circuit plc ladder,thick,| \verb|x=\ladderskip, y=\ladderskip]| meaning it is a ladder diagram and $x$ and $y$ length unit are both set to |1\ladderskip|.
+
+\begin{codeexample}[]
+\begin{tikzpicture} [circuit plc ladder,thick,x=\ladderskip,y=\ladderskip]
+ \draw(0,0)
+ to [contact NO={info={E}}] ++(1,0) --++(1,0)
+ to [block={inputs={IN,PT},outputs={Q,ET},symbol=TOF,name=tp1,
+ minimum width=1.2\ladderskip,
+ input sep=0.3\ladderskip, output sep=0.3\ladderskip}] ++(2,0)
+ to [coil={info={T}}] +(1,0) coordinate(laddertopright);
+ \draw (tp1.output 2) -- +(0.3\ladderskip,0)
+ (tp1.input 2) -- +(-0.3\ladderskip,0) node[left]{T\#3s};
+\ladderrungend{1.2}
+ \draw(0,0)
+ to [contact NO={info={I}}] ++(1,0)
+ to [contact NC={info={M}}] ++(1,0) coordinate(laddercoil) -- ++(2,0)
+ to [coil={info={Q}}] ++(1,0);
+ \draw(0,-1)
+ to [contact NC={info={I}}] ++(1,0)
+ to [contact NO={info={Q}}] ++(1,0) -- (laddercoil);
+\ladderrungend{2}
+ \draw(0,0)
+ to [contact NO={info={I}}] ++(1,0)
+ to [contact NO={info={M}}] ++(1,0) coordinate(laddercoil) -- ++(2,0)
+ to [coil={info={M}}] ++(1,0);
+ \draw(0,-1)
+ to [contact NC={info={I}}] ++(1,0)
+ to [contact NO={info={Q}}] ++(1,0) -- (laddercoil);
+\ladderrungend{2}
+% power rails
+ \draw let \p1=(laddertopright) in
+ (0,\y1+0.7\ladderskip) -- (0,\ladderskip)
+ (\x1,\y1+0.7\ladderskip) -- (\x1,\ladderskip);
+\end{tikzpicture}
+\end{codeexample}
+
+In the example, the first row has a timer, so an extra space is needed and for this 1.2 is given to |\ladderrungend|. Note that the |\draw (tp1.output 2)|\ldots\ is not the start of a new row (the first rung has only one row); it is used solely to place the timer terminals for PT and ET.
+
+Every rung starts with |\draw(0,0)| to mark the first position. The next row of the same rung will start with |\draw(0,-1)| and so forth.
+
+All contacts and coils are placed by something like, e.g., \verb|to [contact NC={info={$I$}}] ++(1,0)|. The |to| command places the element between the current position and the next position which is one length unit at the right of the current position. Blocks are bigger and need more space, so after a block use |++(2,0)|.
+When a row is connected to a row above it, it is wise to mark the connection point on the row above using, e.g., |coordinate(laddercoil)|. Thus, the current row can be connected by |-- (laddercoil)| or \verb!-| (laddercoil)!. If there are several rows, connect only the last one.
+
+You also may need some fillers like |-- ++(2,0)| because the row (or rung) is shorter than the others or because you want to leave some space before a block.
+
+The last thing to do is to draw the power rails. For this, the end of the first row of the first rung was marked with |coordinate(laddertopright)|. In the example, both left and right power rails were drawn. To draw only the left one (mandatory\footnote{Actually, the standard reads ``The right power rail may be explicit or implied''.}), remove the \verb|(\x1,\y1+0.7\ladderskip) -- (\x1,\ladderskip)|.
+
+You may need to change the diagram size. There are a few options: place it into |\resizebox|; use the key |scale|; and change the |\tikzcircuitssizeunit| through the key |circuit symbol unit|. Placing into a |\resizebox| changes everything and it is the preferable option for presentations. The key |scale| only changes the space between symbols, but the font size, line width and symbol sizes are all kept the same. Changing the |\tikzcircuitssizeunit| keeps the font size and line width, but changes the symbols size and, if you were careful, the distance between symbols.
+
+To shrink the diagram to half its normal size, place these commands before your |\begin{tikzpicture}|. Note that you will have to undo this after the diagram.
+
+\begin{codeexample}[code only]
+\tikzset{circuit symbol unit=3.5pt}
+\setlength{\ladderskip}{5\tikzcircuitssizeunit} % 5\tikzcircuitssizeunit = 35pt
+\setlength{\ladderrungsep}{.2\ladderskip}
+\tiny
+\end{codeexample}
+
+Both |\ladderskip| and |\ladderrungsep| were redefined, also the font size was changed. Incidentally, |\tiny| means 50\% of the current size. The result should be:
+\begin{center}
+\tikzset{circuit symbol unit=3.5pt}
+\setlength{\ladderskip}{5\tikzcircuitssizeunit} % 5\tikzcircuitssizeunit = 35pt
+\setlength{\ladderrungsep}{.2\ladderskip}
+\tiny
+\begin{tikzpicture} [circuit plc ladder,thick,x=\ladderskip,y=\ladderskip,execute at end picture=%
+{
+\begin{pgfonlayer}{background}
+\path[fill=graphicbackground]
+($(current bounding box.south west) + (-0.2,-0.2)$) rectangle
+($(current bounding box.north east) + (0.2,0.2)$);
+\end{pgfonlayer}
+}]
+ \draw(0,0)
+ to [contact NO={info={E}}] ++(1,0) --++(1,0)
+ to [block={inputs={IN,PT},outputs={Q,ET},symbol=TOF,name=tp1,
+ minimum width=1.2\ladderskip,
+ input sep=0.3\ladderskip, output sep=0.3\ladderskip}] ++(2,0)
+ to [coil={info={T}}] +(1,0) coordinate(laddertopright);
+ \draw (tp1.output 2) -- +(0.3\ladderskip,0)
+ (tp1.input 2) -- +(-0.3\ladderskip,0) node[left]{T\#3s};
+\ladderrungend{1.2}
+ \draw(0,0)
+ to [contact NO={info={I}}] ++(1,0)
+ to [contact NC={info={M}}] ++(1,0) coordinate(laddercoil) -- ++(2,0)
+ to [coil={info={Q}}] ++(1,0);
+ \draw(0,-1)
+ to [contact NC={info={I}}] ++(1,0)
+ to [contact NO={info={Q}}] ++(1,0) -- (laddercoil);
+\ladderrungend{2}
+ \draw(0,0)
+ to [contact NO={info={I}}] ++(1,0)
+ to [contact NO={info={M}}] ++(1,0) coordinate(laddercoil) -- ++(2,0)
+ to [coil={info={M}}] ++(1,0);
+ \draw(0,-1)
+ to [contact NC={info={I}}] ++(1,0)
+ to [contact NO={info={Q}}] ++(1,0) -- (laddercoil);
+\ladderrungend{2}
+% power rails
+ \draw let \p1=(laddertopright) in
+ (0,\y1+0.7\ladderskip) -- (0,\ladderskip)
+ (\x1,\y1+0.7\ladderskip) -- (\x1,\ladderskip);
+\end{tikzpicture}
+\end{center}
+\normalsize
+
+\tikzset{circuit symbol unit=7pt}
+\setlength{\ladderskip}{5\tikzcircuitssizeunit} % 5\tikzcircuitssizeunit = 35pt
+\setlength{\ladderrungsep}{.2\ladderskip}
+
+This may not be the best way to perform big adjustments, but it can help in some occasions where a small adjust is needed. Also, if you do it frequently, consider to write a macro to encapsulate the feature.
+
+
+\subsection{Directly represented variables (\%)}
+
+Direct representation of a single-element variable shall be provided by a special symbol formed by the concatenation of:
+\begin{itemize}
+\item a percent sign ``\%'' and
+\item location prefixes I, Q or M and
+\item a size prefix X (or none), B, W, D, or L and
+\item one or more (hierarchical addressing) unsigned integers that shall be separated by periods ``.''.
+\end{itemize}
+EXAMPLES:
+\begin{itemize}
+\item \%MW1.7.9
+\item \%ID12.6
+\item \%QL20
+\end{itemize}
+
+The character \% must be preceded by a backslash ``|\%|''. It also possible to place an illustrative text along with the |info|, usually above it. In the following example, the user-friendly variable names are placed in blue above each directly represented variable. The label distance is set globally to |-4pt| to save space. Even so it is necessary that the second row be drawn |1.2\ladderskip| below the first one.
+
+\begin{codeexample}[leave comments]
+\begin{tikzpicture} [circuit plc ladder,thick,
+ x=\ladderskip,y=\ladderskip,label distance=-4pt]
+ \draw(0,0)
+ to [contact NO={info={[label={[blue]$b_1$}]\%I0.1}}] ++(1,0)
+ coordinate(laddercoil)
+ to [contact NC={info={[label={[blue]$b_0$}]\%I0.0}}] ++(1,0)
+ to [coil={info={[label={[blue]$K_1$}]\%Q0.0}}] ++(1,0)
+ coordinate(laddertopright);
+ \draw(0,-1.2)
+ to [contact NO={info={[label={[blue]$K_1$}]\%Q0.0}}] ++(1,0)
+ -- (laddercoil);
+\ladderrungend{2.2}
+ \draw let \p1=(laddertopright) in
+ (0,\y1+0.7\ladderskip) -- (0,\ladderskip)
+ (\x1,\y1+0.7\ladderskip) -- (\x1,\ladderskip);
+\end{tikzpicture}
+\end{codeexample}
+
+
+\section{NEMA}
+
+It is possible to typeset NEMA -- National Electrical Manufacturers Association -- standard diagrams using this package. The main difference is that coils are represented by \tikz[circuit plc ladder,thick,baseline]\draw(0,0) to [coil={coil ladder curvature=0.5, minimum size=2.4\tikzcircuitssizeunit}] ++(1,0);
+instead of \tikz[circuit plc ladder,thick,baseline]\draw(0,0) to [coil] ++(1,0);
+.
+You can replace all coil symbols for circles globally placing the following keys in the document preamble:
+
+\begin{codeexample}[code only]
+\tikzset{
+ coil NA/.style={coil={#1,symbol={$/$}}},
+ every coil/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5},
+ every coil S/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5},
+ every coil R/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5},
+ every coil NA/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5}
+}
+\end{codeexample}
+
+Than you produce:
+\tikzset{
+ coil NA/.style={coil={#1,symbol={$/$}}},
+ every coil/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5},
+ every coil S/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5},
+ every coil R/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5},
+ every coil NA/.style={minimum size=2.4\tikzcircuitssizeunit,coil ladder curvature=0.5}
+}
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture} [circuit plc ladder,thick,
+ x=\ladderskip,y=\ladderskip]
+ \draw(0,0)
+ to [contact NO={info={$a$}}] ++(1,0)
+ to [contact NO={info={$c$}}] ++(1,0) -- ++(1,0)
+ to [coil={info={$Q$}}] ++(1,0)
+ coordinate(laddertopright);
+ \draw(1,0) -- ++(0,-1)
+ to [contact NO={info={$d$}}] ++(1,0)
+ to [contact NO={info={$e$}}] ++(1,0) -- ++(0,1);
+ \draw(0,-2)
+ to [contact NO={info={$b$}}] ++(1,0) -| ++(1,1);
+\ladderrungend{3}
+% power rails
+ \draw let \p1=(laddertopright) in
+ (0,\y1+0.7\ladderskip) -- (0,\ladderskip)
+ (\x1,\y1+0.7\ladderskip) -- (\x1,\ladderskip);
+\end{tikzpicture}
+\end{codeexample}
+
+To test all coils:
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture} [circuit plc ladder,thick,
+ x=\ladderskip,y=\ladderskip]
+ \draw(0,0)
+ to [coil={info={$a$}}] ++(1,0)
+ to [coil S={info={$b$}}] ++(1,0)
+ to [coil R={info={$c$}}] ++(1,0)
+ to [coil NA={info={$d$}}] ++(1,0);
+\end{tikzpicture}
+\end{codeexample}
+
+If, however, you have lots of diagrams you better of redefining the coil graphic which is likely the most used one (not to say the only one). It is because the algorithm used to draw coils uses arcs, which are less efficient than circles. Thus, place this key in you document preamble:
+
+\begin{codeexample}[code only]
+\tikzset{
+ set coil graphic={
+ circuit symbol lines,
+ fill=none,
+ circuit symbol size=width 2.4 height 2.4,
+ transform shape,
+ shape=circle ee,
+ node contents=\pgfkeysvalueof{/pgf/ladder symbol}
+ }
+}
+\end{codeexample}
+
+
+\section{Known Issues}
+The |center| anchor of block symbol is not in the centre and it is disturbing, to say the least. This is due \tikzname\ positioning algorithm and it is unlike to change. The way the library was written also annoys me: it seems that the official libraries are written in two separated files: one for \tikzname\ stuff and another for \pgfname, but I don't know how to separate it, thus we have a single file (at least for now).
+
+
+\section{Final Remarks}
+
+This package has been tested and used for more than three years, so I do believe it is mature by now and I decided to share it. On the other hand, I was the only person who used it\footnote{Not entirely true, two people asked me for the package, but I never heard from them again.}, therefore idiosyncrasies were not detected.
+
+Any comments, suggestions, and feedbacks are welcomed. I will do my best to answer as soon as possible. My contact e-mail is in the first page.
+
+It should be great if someone with experience in writing \tikzname\ libraries could have a look in the code and point out error or improvements to be made.
+
+Typesetting ladder diagrams may be boring and time consuming. One thing you can try is \verb|JQM - Java Quine McCluskey| for minimization of Boolean functions available on \url{https://sourceforge.net/projects/jqm-java-quine-mccluskey/}. It can generate the solution and create the corresponding ladder diagram based on a given truth table. Unfortunately, it does not place blocks, so the example in Section~\ref{guidance} was generated with it, but the rung with the timer had to be done manually and also some fillers had to be added manually.
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ladder/tex/tikzlibrarycircuits.plc.ladder.code.tex b/graphics/pgf/contrib/tikz-ladder/tex/tikzlibrarycircuits.plc.ladder.code.tex
new file mode 100644
index 0000000000..b4b9c965ac
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ladder/tex/tikzlibrarycircuits.plc.ladder.code.tex
@@ -0,0 +1,628 @@
+%% This is file `tikzlibrarycircuits.plc.ladder.code.tex'
+%% Version: 1.1
+%% Version date: 2018-02-06
+%%
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software
+%% `tikzlibrarycircuits.plc.ladder.code.tex'
+%% and its accompanying documentation and `The Copyright Holder'
+%% referring to the person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+%% Change History:
+%% 1.0: 10 January 2018: Original Version
+%% 1.1: 06 February 2018: Macro file renamed to proper TikZ library file name.
+%% Parent library changed from `circuit.ee' to `circuits'.
+%% Bug fixes: added \pgfusepathqstroke where is was missing,
+%% block anchors reworked.
+
+\usetikzlibrary{circuits}
+%
+% Setting up an ladder
+%
+\tikzset{
+ circuit plc ladder/.style={
+ circuit,
+ inputs/.style={block ladder inputs={##1}},
+ outputs/.style={block ladder outputs={##1}},
+ input sep/.style={block ladder input sep={##1}},
+ output sep/.style={block ladder output sep={##1}},
+ clksize/.style={block ladder clksize={##1}},
+ symbol/.style={ladder symbol={##1}},
+ symbol color/.style={ladder symbol color={##1}},
+ every circuit plc ladder/.try
+ }
+}
+
+\makeatletter
+
+\newif\ifpgfnormallyclosednegated%
+\pgfkeys{
+ /pgf/crossed ladder/.is if=pgfnormallyclosednegated,%
+}
+
+\pgfkeys{/pgf/.cd,
+ contact ladder symbol/.initial=, % no value
+ contact NC ladder symbol/.initial=, % no value
+ var contact NC ladder symbol/.initial=$/$,
+ contact N ladder symbol/.initial=N,
+ contact P ladder symbol/.initial=P,
+ coil ladder symbol/.initial=, % no value
+ coil NA ladder symbol/.initial=, % no value
+ var coil NA ladder symbol/.initial=$/$,
+ coil S ladder symbol/.initial=S,
+ coil R ladder symbol/.initial=R,
+ coil ladder curvature/.initial=0.2, % parameter for ( and ) in coils
+ ladder symbol color/.initial=, % no value
+ ladder symbol/.initial=,
+ block ladder input sep/.initial=1.6\tikzcircuitssizeunit,
+ block ladder output sep/.initial=1.6\tikzcircuitssizeunit,
+ block ladder inputs/.initial={IN},
+ block ladder outputs/.initial={Q},
+ block ladder clksize/.initial=0.8\tikzcircuitssizeunit,
+ block ladder symbol/.initial=TON, % blocks like TON, TOF, TP, ADD, CDU, CDUD\_*
+}
+
+% Internal macro for parsing inputs, outputs and clock inputs (no short version).
+%
+\expandafter\ifx\csname pgf@lib@sh@ladder@parseinout\endcsname\relax%
+\def\pgf@lib@sh@ladder@parseinout#1{%
+ \edef\pgf@lib@sh@temp{\pgfkeysvalueof{/pgf/block ladder \pgf@lib@sh@ladder@inout}}%
+ \c@pgf@counta#1\relax%
+ \c@pgf@countb0\relax%
+ \expandafter\pgfutil@in@\expandafter,\expandafter{\pgf@lib@sh@temp}%
+ \let\pgf@lib@sh@next\pgf@lib@sh@ladder@parseinout@long%
+ \pgf@lib@sh@next%
+}
+\def\pgf@lib@sh@ladder@parseinout@long{%
+ \expandafter\pgf@lib@sh@ladder@parseinout@@long\pgf@lib@sh@temp,\pgf@stop,%
+}
+\def\pgf@lib@sh@ladder@parseinout@@long#1,{%
+ \ifx#1\pgf@stop%
+ \expandafter\edef\csname pgf@lib@sh@ladder@num\pgf@lib@sh@ladder@inout\endcsname{\the\c@pgf@countb}%
+ \let\pgf@lib@sh@next\relax%
+ \else%
+ \ifnum\c@pgf@countb=\c@pgf@counta%
+ \expandafter\edef\csname pgf@lib@sh@ladder@num\pgf@lib@sh@ladder@inout\endcsname{\the\c@pgf@countb}%
+ \let\pgf@lib@sh@next\relax%
+ \else%
+ \advance\c@pgf@countb1\relax%
+ \def\pgf@lib@sh@temp{#1}%
+ \expandafter\pgf@sh@resavedmacro\expandafter{\csname \pgf@lib@sh@ladder@inout-\the\c@pgf@countb\endcsname}{%
+ \expandafter\def\csname \pgf@lib@sh@ladder@inout-\the\c@pgf@countb\endcsname{\expandafter\pgf@lib@sh@temp}}%
+ \let\pgf@lib@sh@next\pgf@lib@sh@ladder@parseinout@@@long%
+ \fi%
+ \fi%
+ \pgf@lib@sh@next%
+}
+\def\pgf@lib@sh@ladder@parseinout@@@long{%
+ \pgfutil@ifnextchar x{\pgf@lib@sh@ladder@parseinout@@long}%
+ {\pgf@lib@sh@ladder@parseinout@@long}%
+}
+\fi%
+
+
+% Adjust the width and height of the ladder block symbol.
+\def\pgf@lib@sh@ladder@dimensions{
+ \pgf@x.5\wd\pgfnodeparttextbox
+ \pgf@y.5\ht\pgfnodeparttextbox
+ \advance\pgf@y.5\dp\pgfnodeparttextbox
+
+ %
+ % Adjust the height for the number of inputs and for the width and height of the ladder block symbol.
+ %
+ \c@pgf@counta\pgf@lib@sh@ladder@numinputs
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/block ladder input sep}}
+ \edef\inputsep{\the\pgf@yb}
+ \addtosavedmacro\inputsep
+ \pgf@ya\pgf@yb
+ \advance\c@pgf@counta-1\relax
+ \multiply\pgf@yb\c@pgf@counta
+ \c@pgf@counta\pgf@lib@sh@ladder@numoutputs
+ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/block ladder output sep}}
+ \edef\outputsep{\the\pgf@yc}
+ \addtosavedmacro\outputsep
+ \pgf@ya\pgf@yc
+ \advance\c@pgf@counta-1\relax
+ \multiply\pgf@yc\c@pgf@counta
+ \ifdim\pgf@yb<\pgf@yc% the highest between inputs and outputs
+ \pgf@yb\pgf@yc
+ \fi
+ % now the symbol width and height
+ \setbox\pgf@hbox\hbox{{$\mathrm{\pgfkeysvalueof{/pgf/ladder symbol}}$}}% add braces as color-aftergroup-fix TT (error when contains \_)
+% \setbox\pgf@hbox\hbox{{$\ensuremath{\mathrm{\pgfkeysvalueof{/pgf/ladder symbol}}$}}}% add braces as color-aftergroup-fix TT
+% \setbox\pgf@hbox\hbox{{$\mathrm{TESTE}$}}% add braces as color-aftergroup-fix TT
+% \typeout{Test \the\wd\pgf@hbox \the\ht\pgf@hbox \the\dp\pgf@hbox}
+ \pgf@xc.5\wd\pgf@hbox
+ \pgf@yc\ht\pgf@hbox
+ \advance\pgf@yc\dp\pgf@hbox
+ \advance\pgf@yc1pt
+ \advance\pgf@yb0.5\pgf@yc
+ \advance\pgf@yc2pt
+ \edef\symbolypos{\the\pgf@yc}
+ \addtosavedmacro\symbolypos
+ \advance\pgf@yc0.5\pgf@yc
+ \advance\pgf@yc\pgf@yb
+ \advance\pgf@yc0pt
+ \pgf@yc.5\pgf@yc
+ \ifdim\pgf@x<\pgf@xc
+ \pgf@x\pgf@xc
+ \fi
+ \ifdim\pgf@y<\pgf@yc
+ \pgf@y\pgf@yc
+ \fi
+ \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/inner xsep}}
+ \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/inner ysep}}
+
+ %
+ % Adjust for minimum height and width.
+ %
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifdim\pgf@x<.5\pgf@xa%
+ \pgf@x.5\pgf@xa%
+ \fi%
+ \ifdim\pgf@y<.5\pgf@ya%
+ \pgf@y.5\pgf@ya%
+ \fi%
+ %
+ % Take into account the outer sep.
+ %
+ \pgfmathaddtolength\pgf@x{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@y{\pgfkeysvalueof{/pgf/outer ysep}}%
+ %
+ \edef\halfwidth{\the\pgf@x}%
+ \edef\halfheight{\the\pgf@y}%
+ \addtosavedmacro\halfwidth%
+ \addtosavedmacro\halfheight%
+
+ \advance\pgf@yb\pgf@y
+ \advance\pgf@yb-\pgf@yc
+ \edef\boxdepth{\the\pgf@yb}% below 1st input
+ \addtosavedmacro\boxdepth
+}%
+
+
+\def\pgf@lib@sh@ladder@inputanchor#1{%
+ \dimensions%
+ \pgfpointorigin%
+ \advance\pgf@x-\halfwidth%
+ %
+ \pgfutil@tempdima\inputsep%
+ \multiply\pgfutil@tempdima#1\relax%
+ \advance\pgf@y-\pgfutil@tempdima%
+ \advance\pgf@y\inputsep%
+}
+
+\def\pgf@lib@sh@ladder@outputanchor#1{%
+ \dimensions%
+ \pgfpointorigin%
+ \advance\pgf@x\halfwidth%
+ %
+ \pgfutil@tempdima\outputsep%
+ \multiply\pgfutil@tempdima#1\relax%
+ \advance\pgf@y-\pgfutil@tempdima%
+ \advance\pgf@y\outputsep%
+}
+
+\def\pgfutil@first@until@relax#1#2\relax{#1}
+
+% Shapes
+% block
+\pgfdeclareshape{block ladder}{
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@block ladder\endcsname{%
+ \def\pgf@lib@sh@ladder@inout{inputs}
+ \pgf@lib@sh@ladder@parseinout{1024}% Maximum 1024 (!) inputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@ladder@numinputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@block ladder@input \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@block ladder@input \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@ladder@inputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@ladder@numinputs<1\relax%
+ \pgferror{A block must have at least one input}%
+ \fi%
+ %
+ \def\pgf@lib@sh@ladder@inout{outputs}
+ \pgf@lib@sh@ladder@parseinout{1024}% Maximum 1024 (!) outputs.
+ %
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\pgf@lib@sh@ladder@numoutputs%
+ \else%
+ \pgfutil@ifundefined{pgf@anchor@block ladder@output \pgfmathcounter}{%
+ \expandafter\xdef\csname pgf@anchor@block ladder@output \pgfmathcounter\endcsname{%
+ \noexpand\pgf@lib@sh@ladder@outputanchor{\pgfmathcounter}%
+ }%
+ }{}%
+ \repeatpgfmathloop%
+ \ifnum\pgf@lib@sh@ladder@numoutputs<1\relax%
+ \pgferror{A block must have at least one output}%
+ \fi%
+ }%
+
+ \savedmacro\numinputs{\let\numinputs\pgf@lib@sh@ladder@numinputs}%
+ \savedmacro\numoutputs{\let\numoutputs\pgf@lib@sh@ladder@numoutputs}%
+ \savedmacro\dimensions{%
+ \pgf@lib@sh@ladder@dimensions%
+ }
+ \savedanchor\centerpoint{%
+ \pgfpointorigin
+ }
+ \savedanchor\midpoint{%
+ \pgfpointorigin
+ \advance\pgf@y-.5\ht\pgfnodeparttextbox
+ \advance\pgf@y.5\dp\pgfnodeparttextbox
+ \pgfmathaddtolength\pgf@y{+0.5ex}%
+ }
+ \savedanchor\basepoint{%
+ \pgfpointorigin
+ \advance\pgf@y-.5\ht\pgfnodeparttextbox
+ \advance\pgf@y.5\dp\pgfnodeparttextbox
+ }
+ \savedanchor\textpoint{%
+ \pgfpointorigin
+ \advance\pgf@x-.5\wd\pgfnodeparttextbox
+ \advance\pgf@y-.5\ht\pgfnodeparttextbox
+ \advance\pgf@y.5\dp\pgfnodeparttextbox
+ }
+ \anchor{center}{\pgfpointorigin}%
+ \anchor{block center}{\dimensions\pgfpointorigin\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{text}{\dimensions\textpoint\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{mid}{\dimensions\midpoint\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{mid west}{\dimensions\midpoint\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth\advance\pgf@x-\halfwidth}%
+ \anchor{mid east}{\dimensions\midpoint\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth\advance\pgf@x\halfwidth}%
+ \anchor{base}{\dimensions\basepoint\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{base west}{\dimensions\basepoint\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth\advance\pgf@x-\halfwidth}%
+ \anchor{base east}{\dimensions\basepoint\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth\advance\pgf@x\halfwidth}%
+ \anchor{north}{\dimensions\pgfpointorigin\advance\pgf@y\halfheight\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{south}{\dimensions\pgfpointorigin\advance\pgf@y-\boxdepth}%
+ \anchor{east}{\dimensions\pgfpointorigin\advance\pgf@x\halfwidth\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{west}{\dimensions\pgfpointorigin\advance\pgf@x-\halfwidth\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{north east}{\dimensions\pgfpointorigin\advance\pgf@x\halfwidth\advance\pgf@y\halfheight\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{north west}{\dimensions\pgfpointorigin\advance\pgf@x-\halfwidth\advance\pgf@y\halfheight\advance\pgf@y\halfheight\advance\pgf@y-\boxdepth}%
+ \anchor{south east}{\dimensions\pgfpointorigin\advance\pgf@x\halfwidth\advance\pgf@y-\boxdepth}%
+ \anchor{south west}{\dimensions\pgfpointorigin\advance\pgf@x-\halfwidth\advance\pgf@y-\boxdepth}%
+ \backgroundpath{%
+ \dimensions%
+ \pgf@xc\halfwidth%
+ \pgf@yc\halfheight%
+ \pgfmathaddtolength\pgf@xc{-\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathaddtolength\pgf@yc{-\pgfkeysvalueof{/pgf/outer ysep}}%
+
+ \pgf@yb\boxdepth%
+ \pgfmathaddtolength\pgf@yb{-\pgfkeysvalueof{/pgf/outer ysep}}%
+ {%
+ \pgfpathrectangle{\pgfqpoint{-\pgf@xc}{-\pgf@yb}}%
+ {%
+ \pgf@x2.0\pgf@xc%
+ \pgf@y2.0\pgf@yc%
+ }%
+ \pgfpathclose%
+ }%
+ }
+ \foregroundpath{
+ \dimensions%
+ {%
+ %
+ % Write block type (symbol)
+ %
+ \pgf@yc\symbolypos
+ \expandafter\pgftext\expandafter[/pgf/text/at=\pgfqpoint{0pt}{\pgf@yc},/pgf/text/center]{%
+ \pgfkeysgetvalue{/pgf/ladder symbol color}{\pgf@lib@sh@temp}%
+ \ifx\pgf@lib@sh@temp\pgfutil@empty%
+ \else%
+ \expandafter\color\expandafter{\pgf@lib@sh@temp}%
+ \fi%
+ {\pgfkeysvalueof{/pgf/ladder symbol}}%
+ }%
+ % Draw inputs.
+ %
+ \pgf@xc-\halfwidth%
+ \pgfmathaddtolength\pgf@xc{\pgfkeysvalueof{/pgf/outer xsep}}
+ \pgf@xa\pgf@xc
+ \pgfmathaddtolength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}
+ \pgf@yc\inputsep%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numinputs%
+ \else%
+ \advance\pgf@yc-\inputsep%
+ \edef\pgf@lib@sh@temp{\csname inputs-\pgfmathcounter\endcsname}
+ \pgf@xb\pgf@xc
+ \if>\expandafter\pgfutil@first@until@relax\pgf@lib@sh@temp\relax
+ \edef\pgf@lib@sh@temp{\expandafter\expandafter\expandafter\pgfutil@gobble\pgf@lib@sh@temp}
+ \pgf@ya\pgf@yc
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/block ladder clksize}}
+ \pgfmathaddtolength\pgf@ya{0.5\pgf@yb}
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfmathaddtolength\pgf@ya{-0.5\pgf@yb}
+ \pgfmathaddtolength\pgf@xa{\pgf@yb}
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfmathaddtolength\pgf@ya{-0.5\pgf@yb}
+ \pgfmathaddtolength\pgf@xa{-\pgf@yb}
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfmathaddtolength\pgf@xb{\pgf@yb}
+ \pgfpathclose
+ \fi
+ \expandafter\pgftext\expandafter[/pgf/text/at=\pgfqpoint{\pgf@xb}{\pgf@yc},/pgf/text/left]{%
+ \pgfkeysgetvalue{/pgf/ladder symbol color}{\pgf@lib@sh@@temp}%
+ \ifx\pgf@lib@sh@@temp\pgfutil@empty%
+ \else%
+ \expandafter\color\expandafter{\pgf@lib@sh@@temp}%
+ \fi%
+ {\pgf@lib@sh@temp}%
+ }%
+ \repeatpgfmathloop%
+ % Draw outputs.
+ %
+ \pgf@xc\halfwidth%
+ \pgfmathaddtolength\pgf@xc{-\pgfkeysvalueof{/pgf/inner xsep}}
+ \pgfmathaddtolength\pgf@xc{-\pgfkeysvalueof{/pgf/outer xsep}}
+ \pgf@yc\outputsep%
+ \pgfmathloop%
+ \ifnum\pgfmathcounter>\numoutputs%
+ \else%
+ \advance\pgf@yc-\outputsep%
+ \expandafter\pgftext\expandafter[/pgf/text/at=\pgfqpoint{\pgf@xc}{\pgf@yc},/pgf/text/right]{%
+ \pgfkeysgetvalue{/pgf/ladder symbol color}{\pgf@lib@sh@temp}%
+ \ifx\pgf@lib@sh@temp\pgfutil@empty%
+ \else%
+ \expandafter\color\expandafter{\pgf@lib@sh@temp}%
+ \fi%
+ {\csname outputs-\pgfmathcounter\endcsname}%
+ }%
+ \repeatpgfmathloop%
+ }%
+ }
+ \anchorborder{%
+ \dimensions%
+ \pgfextract@process\externalpoint{}%
+ \ifdim\pgf@y<0pt%
+ \pgf@process{\pgfpointborderrectangle{\externalpoint}{\pgfqpoint{\halfwidth}{\boxdepth}}}%
+ \else%
+ \pgf@yc\halfheight
+ \advance\pgf@yc\halfheight\advance\pgf@yc-\boxdepth
+ \pgf@process{\pgfpointborderrectangle{\externalpoint}{\pgfqpoint{\halfwidth}{\pgf@yc}}}%
+ \fi%
+ }%
+}
+
+
+
+
+% contact
+\pgfdeclareshape{contact ladder}
+{
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{input}
+ \inheritanchor[from=rectangle]{output}
+ \inheritanchorborder[from=rectangle] % New:
+ \anchor{input}{
+ \pgf@process{\northeast}%
+ \pgf@ya=.5\pgf@y%
+ \pgf@process{\southwest}%
+ \pgf@y=.5\pgf@y%
+ \advance\pgf@y by \pgf@ya%
+ }
+ \anchor{output}{%
+ \pgf@process{\southwest}%
+ \pgf@ya=.5\pgf@y%
+ \pgf@process{\northeast}%
+ \pgf@y=.5\pgf@y%
+ \advance\pgf@y by \pgf@ya%
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }
+
+ \backgroundpath{
+ \pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
+ \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
+ \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \ifpgfnormallyclosednegated
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \else
+ \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \fi
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
+ \pgfusepathqstroke
+ }
+ \foregroundpath{
+ \pgftransformshift{\centerpoint}
+ \pgftext{\pgfkeysvalueof{/pgf/ladder symbol}}
+ }
+}
+
+% coil
+\pgfdeclareshape{coil ladder}
+{
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{input}
+ \inheritanchor[from=rectangle]{output}
+ \inheritanchorborder[from=rectangle] % New:
+ \anchor{input}{
+ \pgf@process{\northeast}%
+ \pgf@ya=.5\pgf@y%
+ \pgf@process{\southwest}%
+ \pgf@y=.5\pgf@y%
+ \advance\pgf@y by \pgf@ya%
+ }
+ \anchor{output}{%
+ \pgf@process{\southwest}%
+ \pgf@ya=.5\pgf@y%
+ \pgf@process{\northeast}%
+ \pgf@y=.5\pgf@y%
+ \advance\pgf@y by \pgf@ya%
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x.5\wd\pgfnodeparttextbox%
+ \pgf@y.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y-.5\dp\pgfnodeparttextbox%
+ }
+
+ \backgroundpath{
+ \pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
+ \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
+ \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+
+ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/coil ladder curvature}\pgf@xb-\pgfkeysvalueof{/pgf/coil ladder curvature}\pgf@xa} % uses a reduction of 20% (by default) for beginning of the arcs, if it is 0.5 and width=height we got a circle, do not set to zero
+ \pgfmathsetlength\pgf@yc{.5\pgf@yb-.5\pgf@ya}
+ \pgfmathsetlength\pgf@ya{0.5\pgf@xc + 0.5\pgf@yc*\pgf@yc / \pgf@xc} % radius
+ \advance\pgf@xa by \pgf@xc
+ \advance\pgf@xb by-\pgf@xc
+ \pgfmathsetlength\pgf@yc{\pgf@yc / \pgf@ya}
+ \pgfmathasin{\pgf@yc}
+ \pgfmathsetlength\pgf@yc{\pgfmathresult} % angle
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpatharc{180-\pgf@yc}{180+\pgf@yc}{\pgf@ya}
+ \ifpgfnormallyclosednegated
+ \pgfsetbeveljoin
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \else
+ \pgfpathmoveto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \fi
+ \pgfpatharc{\pgf@yc}{-\pgf@yc}{\pgf@ya}
+ \pgfusepathqstroke
+ }
+ \foregroundpath{
+ \pgftransformshift{\centerpoint}
+ \pgftext{\pgfkeysvalueof{/pgf/ladder symbol}}
+ }
+}
+\makeatother
+
+\tikzset{
+ circuit declare symbol=contact NO,
+ circuit declare symbol=contact NC,
+ circuit declare symbol=var contact NC,
+ circuit declare symbol=contact P,
+ circuit declare symbol=contact N,
+ circuit declare symbol=coil,
+ circuit declare symbol=coil NA,
+ circuit declare symbol=var coil NA,
+ circuit declare symbol=coil S,
+ circuit declare symbol=coil R,
+ circuit declare symbol=block,
+ set contact NO graphic={
+ circuit symbol lines,
+ circuit symbol size=width 1.5 height 2,
+ transform shape,
+ shape=contact ladder
+ },
+ set contact NC graphic={
+ circuit symbol lines,
+ circuit symbol size=width 1.5 height 2,
+ transform shape,
+ crossed ladder=true,
+ shape=contact ladder
+ },
+ set var contact NC graphic={
+ circuit symbol lines,
+ circuit symbol size=width 1.5 height 2,
+ transform shape,
+ ladder symbol=\pgfkeysvalueof{/pgf/var contact NC ladder symbol},
+ shape=contact ladder
+ },
+ set contact P graphic={
+ circuit symbol lines,
+ circuit symbol size=width 1.5 height 2,
+ transform shape,
+ ladder symbol=\pgfkeysvalueof{/pgf/contact P ladder symbol},
+ shape=contact ladder
+ },
+ set contact N graphic={
+ circuit symbol lines,
+ circuit symbol size=width 1.5 height 2,
+ transform shape,
+ ladder symbol=\pgfkeysvalueof{/pgf/contact N ladder symbol},
+ shape=contact ladder
+ },
+ set coil graphic={
+ circuit symbol lines,
+ fill=none,
+ circuit symbol size=width 2.4 height 2,
+ transform shape,
+ shape=coil ladder
+ },
+ set coil NA graphic={
+ circuit symbol lines,
+ circuit symbol size=width 2.4 height 2,
+ crossed ladder=true,
+ transform shape,
+ shape=coil ladder
+ },
+ set var coil NA graphic={
+ circuit symbol lines,
+ circuit symbol size=width 2.4 height 2,
+ ladder symbol=\pgfkeysvalueof{/pgf/var coil NA ladder symbol},
+ transform shape,
+ shape=coil ladder
+ },
+ set coil S graphic={
+ circuit symbol lines,
+ circuit symbol size=width 2.4 height 2,
+ ladder symbol=\pgfkeysvalueof{/pgf/coil S ladder symbol},
+ transform shape,
+ shape=coil ladder
+ },
+ set coil R graphic={
+ circuit symbol lines,
+ circuit symbol size=width 2.4 height 2,
+ ladder symbol=\pgfkeysvalueof{/pgf/coil R ladder symbol},
+ transform shape,
+ shape=coil ladder
+ },
+ set block graphic={
+ circuit symbol lines,
+ circuit symbol size=width 2.4 height 2,
+ ladder symbol=\pgfkeysvalueof{/pgf/block ladder symbol},
+ transform shape,
+ inner sep=.5ex,
+ shape=block ladder,
+ every ladder block/.try
+ }
+}
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-layers/README b/graphics/pgf/contrib/tikz-layers/README
new file mode 100644
index 0000000000..8b259f82bf
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-layers/README
@@ -0,0 +1,21 @@
+LaTeX package: tikz-layers
+
+Enables extra (and useful) layers for pgf/tikz graphics.
+
+Dependencies: TikZ package
+
+Copyright 2018 Rui Moutinho
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2005/12/01 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Rui Moutinho.
+
+Contact: rumout@gmail.com \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-layers/manifest.txt b/graphics/pgf/contrib/tikz-layers/manifest.txt
new file mode 100644
index 0000000000..127655df78
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-layers/manifest.txt
@@ -0,0 +1,2 @@
+tikz-layers.sty
+tikz-layers-doc.pdf
diff --git a/graphics/pgf/contrib/tikz-layers/tikz-layers-doc.pdf b/graphics/pgf/contrib/tikz-layers/tikz-layers-doc.pdf
new file mode 100644
index 0000000000..65253cb0a1
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-layers/tikz-layers-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-layers/tikz-layers.sty b/graphics/pgf/contrib/tikz-layers/tikz-layers.sty
new file mode 100644
index 0000000000..169556156e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-layers/tikz-layers.sty
@@ -0,0 +1,34 @@
+%% tikz-layers.sty
+%% Copyright 2018 Rui Moutinho
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Rui Moutinho.
+%
+% This work consists of the files listed on manifest.txt.
+
+\ProvidesPackage{tikz-layers}[2018/02/15 v0.9 Installs basic layers via TikZ]
+
+\RequirePackage{tikz}
+\usetikzlibrary{backgrounds}
+
+\pgfdeclarelayer{behind}
+\pgfdeclarelayer{above}
+\pgfdeclarelayer{glass}
+
+\pgfsetlayers{background,behind,main,above,glass}
+
+\tikzset{
+ on layer/.style = {execute at begin scope={\pgfonlayer{#1}}, execute at end scope={\endpgfonlayer}},
+ on behind layer/.style = {on layer=behind},
+ on above layer/.style = {on layer=above},
+ on glass layer/.style = {on layer=glass},
+}
diff --git a/graphics/pgf/contrib/tikz-nef/LICENSE b/graphics/pgf/contrib/tikz-nef/LICENSE
new file mode 100644
index 0000000000..c20a0e4744
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-nef/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Jan Gosmann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/graphics/pgf/contrib/tikz-nef/README.md b/graphics/pgf/contrib/tikz-nef/README.md
new file mode 100644
index 0000000000..f0dec40afe
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-nef/README.md
@@ -0,0 +1,46 @@
+# tikz-nef
+The *nef* TikZ library provides predefined styles and shapes to create diagrams
+ for neural networks constructed with the methods of the Neural Engineering
+ Framework (NEF) [1].
+
+![Gated difference integrator example.](https://raw.githubusercontent.com/jgosmann/tikz-nef/master/example-net.png)
+
+The example above was generated with this code:
+
+```latex
+\begin{tikzpicture}[nef]
+ \graph {
+ input [ext] -> gate [ens] -> integrator/$x$ [ens] -> output [ext];
+ integrator -> [bend right, "$-1$"] gate;
+ integrator -> [recurrent] integrator;
+ store -> [inhibit] gate;
+ };
+\end{tikzpicture}
+```
+
+The following styles are supported:
+
+* ea: ensemble array
+* ens: ensemble
+* ext: external input or output
+* inhibt: inhibitory connection
+* net: network
+* pnode: pass-through node
+* rect: rectification ensemble
+* recurrent: recurrent connection
+
+## Installation
+
+While this package is not available in [CTAN](https://ctan.org/) follow these
+instruction:
+
+1. Create the required installation directory (if not already existing):
+ `mkdir -p "$(kpsewhich -var-value TEXMFHOME)/tex/generic"`
+2. `cd "$(kpsewhich -var-value TEXMFHOME)/tex/generic"`
+3. `git clone https://github.com/jgosmann/tikz-nef.git`
+
+## References
+
+[1]: Chris Eliasmith and Charles H. Anderson. Neural engineering: Computation,
+ representation, and dynamics in neurobiological systems. MIT Press,
+ Cambridge, MA, 2003.
diff --git a/graphics/pgf/contrib/tikz-nef/example-net.tex b/graphics/pgf/contrib/tikz-nef/example-net.tex
new file mode 100644
index 0000000000..f91c2015ee
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-nef/example-net.tex
@@ -0,0 +1,20 @@
+\RequirePackage{luatex85}
+\documentclass{standalone}
+
+\usepackage{fontspec}
+
+\usepackage{tikz}
+\usetikzlibrary{graphs}
+\usetikzlibrary{nef}
+\usetikzlibrary{quotes}
+
+\begin{document}
+\begin{tikzpicture}[nef]
+ \graph {
+ input [ext] -> gate [ens] -> integrator/$x$ [ens] -> output [ext];
+ integrator -> [bend right, "$-1$"] gate;
+ integrator -> [recurrent] integrator;
+ store -> [inhibit] gate;
+ };
+\end{tikzpicture}
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-nef/nef.bib b/graphics/pgf/contrib/tikz-nef/nef.bib
new file mode 100644
index 0000000000..0d3c33c240
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-nef/nef.bib
@@ -0,0 +1,16 @@
+
+@book{eliasmith2003,
+ address = {Cambridge, MA},
+ title = {Neural Engineering: Computation, Representation, and Dynamics in Neurobiological Systems},
+ isbn = {978-0-262-55060-4},
+ shorttitle = {Neural {{Engineering}}},
+ abstract = {A synthesis of current approaches to adapting engineering tools to the study of neurobiological systems.},
+ timestamp = {2017-01-27T23:37:38Z},
+ publisher = {{MIT Press}},
+ author = {Eliasmith, Chris and Anderson, Charles H.},
+ year = {2003},
+ keywords = {verified},
+ file = {Neural Engineering - Eliasmith, Aug 1 2004.pdf:/Volumes/Home/blubb/Library/Application Support/Zotero/Profiles/b4t24zu4.default/zotero/storage/FCD2HVIA/Neural Engineering - Eliasmith, Aug 1 2004.pdf:application/pdf}
+}
+
+
diff --git a/graphics/pgf/contrib/tikz-nef/tikz-nef-doc.pdf b/graphics/pgf/contrib/tikz-nef/tikz-nef-doc.pdf
new file mode 100644
index 0000000000..c78204e0a7
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-nef/tikz-nef-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-nef/tikz-nef-doc.tex b/graphics/pgf/contrib/tikz-nef/tikz-nef-doc.tex
new file mode 100644
index 0000000000..319575b044
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-nef/tikz-nef-doc.tex
@@ -0,0 +1,133 @@
+\documentclass{ltxdoc}
+
+\usepackage{fontspec}
+
+\GetFileInfo{tikzlibrarynef.code.tex}
+
+\title{The \textsf{nef} TikZ library\thanks{This document corresponds to \textsf{tikz-nef}~\fileversion, dated~\filedate.}}
+\author{Jan Gosmann \\ \texttt{jan@hyper-world.de}}
+
+\usepackage[backend=biber]{biblatex}
+\usepackage{tikz}
+\usetikzlibrary{graphs}
+\usetikzlibrary{nef}
+\usetikzlibrary{quotes}
+
+\addbibresource{nef.bib}
+
+\newcommand{\nef}{\emph{nef}}
+
+\begin{document}
+\maketitle
+\begin{abstract}
+ The \nef\ TikZ library provides predefined styles and shapes to create diagrams for neural networks constructed with the methods of the Neural Engineering Framework (NEF)~\cite{eliasmith2003}.
+\end{abstract}
+\tableofcontents
+
+\section{Usage}
+
+To use the \nef\ TikZ library load the \emph{tikz} package and the library with:
+\begin{verbatim}
+ \usepackage{tikz}
+ \usetikzlibrary{nef}
+\end{verbatim}
+
+\subsection{Global styles}
+\paragraph{nef}
+This style provides basic general settings like minimum node sizes and arrow tips for the diagrams. It also sets some layout options on for graphs. The style can be applied to the \texttt{tikzpicture} environment or to more narrow scopes.
+
+\subsection{Node styles and shapes}
+\begin{figure}
+ \centering
+ \begin{tikzpicture}
+ \matrix [row sep=4pt, column sep=4pt] {
+ \node {Style/shape}; & & \node [right] {Usage}; \\
+ \node {\texttt{ea}}; & \node [nef,ea] {}; & \node [right] {ensemble array}; \\
+ \node {\texttt{ens}}; & \node [nef,ens] {ens}; & \node [right] {ensemble}; \\
+ \node {\texttt{ext}}; & \node [nef,ext] {ext}; & \node [right] {external inputs and outputs}; \\
+ \node {\texttt{net}}; & \node [nef,net] {net}; & \node [right] {network}; \\
+ \node {\texttt{pnode}}; & \node [nef,pnode] {}; & \node [right] {pass-through node}; \\
+ \node {\texttt{rect}}; & \node [nef,rect] {}; & \node [right] {rectification ensemble}; \\
+ };
+ \end{tikzpicture}
+ \caption{Node styles and shapes.}
+\end{figure}
+
+\paragraph{ea}
+Use this style for ensemble arrays.
+
+\paragraph{ens}
+Use this style for single ensembles.
+
+\paragraph{ext}
+Use this style for inputs and outputs external to the displayed network.
+
+\paragraph{net}
+Use this style for networks.
+
+\paragraph{pnode}
+Use this style for pass-through nodes.
+
+\paragraph{rect}
+Use this style for rectification ensembles (i.e., all encoders are 1).
+
+\subsection{Edge styles}
+\begin{figure}
+ \centering
+ \begin{tikzpicture}
+ \matrix [row sep=4pt, column sep=4pt] {
+ \node {Style}; & & \node [right] {Usage}; \\
+ \node {\texttt{inhibit}}; & \draw (-10pt, 0) -- (10pt, 0) [inhibit]; & \node [right] {inhibitory connection}; \\
+ \node {\texttt{modulatory}}; & \draw (-10pt, 0) -- (10pt, 0) [modulatory]; & \node [right] {modulatory connection}; \\
+ \node {\texttt{recurrent}}; & \node (ens) [nef,ens] {}; \path [nef] (ens) edge [nef,recurrent] (ens) ; & \node [right] {recurrent connection}; \\
+ };
+ \end{tikzpicture}
+ \caption{Edge styles.}
+\end{figure}
+
+\paragraph{inhibit}
+Use this style for inhibitory connections.
+
+\paragraph{modulatory}
+Use this style for modulatory connections.
+
+\paragraph{recurrent}
+Use this style for recurrent connections. It will add a loop above an ensemble or network.
+
+
+
+\section{Examples}
+
+\subsection{Gated difference integrator (working memory)}
+\begin{center}
+ \begin{tikzpicture}[nef]
+ \graph {
+ input [ext] -> gate [ens] -> integrator/$x$ [ens] -> output [ext];
+ integrator -> [bend right, "$-1$"] gate;
+ integrator -> [recurrent] integrator;
+ store -> [inhibit] gate;
+ };
+ \end{tikzpicture}
+\end{center}
+
+\begin{verbatim}
+\usepackage{tikz}
+\usetikzlibrary{graphs}
+\usetikzlibrary{nef}
+\usetikzlibrary{quotes}
+
+%% ....
+
+\begin{tikzpicture}[nef]
+ \graph {
+ input [ext] -> gate [ens] -> integrator/$x$ [ens] -> output [ext];
+ integrator -> [bend right, "$-1$"] gate;
+ integrator -> [recurrent] integrator;
+ store -> [inhibit] gate;
+ };
+\end{tikzpicture}
+\end{verbatim}
+
+
+\printbibliography{}
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-nef/tikzlibrarynef.code.tex b/graphics/pgf/contrib/tikz-nef/tikzlibrarynef.code.tex
new file mode 100644
index 0000000000..7b86c940ee
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-nef/tikzlibrarynef.code.tex
@@ -0,0 +1,42 @@
+\def\fileversion{v0.1}
+\def\filedate{2017/03/29}
+
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{shadows}
+\usetikzlibrary{shapes.geometric}
+
+\pgfdeclareshape{rectification}{
+ \inheritsavedanchors[from=circle]
+ \inheritanchorborder[from=circle]
+ \inheritanchor[from=circle]{center}
+ \inheritanchor[from=circle]{north}
+ \inheritanchor[from=circle]{south}
+ \inheritanchor[from=circle]{west}
+ \inheritanchor[from=circle]{east}
+ \backgroundpath{
+ \pgfsetarrows{-}
+ \pgfpathcircle{\pgfpoint{0}{0}}{\radius} \pgfusepath{stroke,clip}
+ \pgfpathmoveto{\pgfpoint{-\radius}{-0.25 * \radius}}
+ \pgfpathlineto{\pgfpoint{0}{-0.25 * \radius}}
+ \pgfpathlineto{\pgfpoint{\radius}{\radius - 0.25 * \radius}}
+ }
+}
+
+\tikzset{
+ nef/.style={
+ minimum width=1.5em, minimum height=1.5em,
+ every path/.style={>=Latex},
+ graphs/every graph/.style={grow right sep=15mm, branch down sep=15mm, nodes={anchor=center}, edge quotes={above, node font=\footnotesize}},
+ },
+ ext/.style={draw=none},
+ net/.style={draw, rounded corners=0.5em},
+ ens/.style={draw, circle, inner sep=0.25ex},
+ pnode/.style={draw, circle, fill=black, minimum width=0.75em, minimum height=0.75em},
+ rect/.style={draw, shape=rectification, inner sep=0.25ex},
+ ea/.style={draw, fill=white, circle, inner sep=0.05em, double copy shadow={opacity=0.6, shadow yshift=-0.3ex, shadow xshift=0.3ex}},
+ recurrent/.style={loop above, min distance=2em, in=120, out=60},
+ inhibit/.style={-Circle},
+ modulatory/.style={-{Arc Barb[reversed]}}
+}
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-network/README.md b/graphics/pgf/contrib/tikz-network/README.md
new file mode 100644
index 0000000000..f208c960b3
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/README.md
@@ -0,0 +1,71 @@
+# tikz-network - A tool to visualize complex networks in LaTeX.
+
+## Summary
+
+**tikz-network** is an open source software project for visualizing graphs and
+networks in LaTeX. It aims to provide a simple and easy tool to create,
+visualize and modify complex networks. The packaged is based on the PGF/TikZ
+languages for producing vector graphics from a geometric/algebraic
+description. Particular focus is made on the software usability and
+interoperability with other tools. Simple networks can be directly created
+within LaTeX, while more complex networks can be imported from external
+sources (e.g. igraph, networkx, QGIS, ...). Additionally, **tikz-network**
+supports visualization of multilayer networks in two and three dimensions.
+
+## Purpose
+
+In recent years, complex network theory becomes more and more popular within the
+scientific community. Besides a solid mathematical base on which these theories
+are built on, a visual representation of the networks allow communicating
+complex relationships to a broad audience.
+
+Nowadays, a variety of great visualization tools are available, which helps to
+structure, filter, manipulate and of course to visualize the networks. However,
+they come with some limitations, including the need for specific software tools,
+difficulties to embed the outputs properly in a LaTeX file (e.g. font type,
+font size, additional equations and math symbols needed,...) and challenges
+in the post-processing of the graphs, without rerunning the software tools
+again.
+
+In order to overcome this issues, the package **tikz-network*** was
+created. Since LaTeX is a standard for scientific publications and widely
+used, there is a high chance that users are already familiar with the syntax and
+the structure of this language. Beside LaTeX, no other software tool is
+needed. The commands of **tikz-network** are kept simple but allow a high
+control over the produced output. Post-processing of the network (e.g. adding
+drawings, images, texts, equations,...) can be done easily, due to the
+compatibility with PGF/TikZ (Tantau 2015). Also, the embedding of
+the network visualization into the LaTeX-environment enables the use of the
+fonts, font sizes, mathematical symbols, hyperlinks, references,..., as used
+in the document. Additional features are the three-dimensional visualization of
+(multilayer) networks, and the compatible with other layout and visualization
+tools (e.g. igraph, netwrokx, QGIS, ...).
+
+## Additional information and examples
+
+- The usage of the package is documented in the
+ [manual](https://github.com/hackl/tikz-network/blob/master/manual.pdf)
+ ([arXiv](https://arxiv.org/pdf/1709.06005.pdf)).
+- The current developer version of the package is available on
+ [GitHub](https://github.com/hackl/tikz-network).
+- [There](https://github.com/hackl/tikz-network/tree/master/examples), also
+ additional (more complex) examples can be found.
+- To convert networks from Python into TikZ an API for the package is available
+ under <https://pypi.org/project/network2tikz/> or
+ <https://github.com/hackl/network2tikz>
+
+## License
+
+Copyright (c) 2019 [Juergen Hackl](mailto:hackl.j@gmx.at)
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation, either version 3 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/graphics/pgf/contrib/tikz-network/data/edges.csv b/graphics/pgf/contrib/tikz-network/data/edges.csv
new file mode 100644
index 0000000000..2d510439ad
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/edges.csv
@@ -0,0 +1,7 @@
+u,v,label,lw,color ,opacity,bend, R , G , B ,Direct
+A,B, ab ,.5,red , 1 , 30, 0,120,255,false
+B,C, bc ,.7,blue , 1 , -60, 76, 55,255,false
+B,D, bd ,.5,blue , .5 , -60, 76, 55,255,false
+A,E, ae , 1,green , 1 , 75,255, 0, 0,true
+C,E, ce , 2,orange, 1 , 0,150,150,150,false
+A,A, aa ,.3,black , .5 , 75,255, 0 ,0,false
diff --git a/graphics/pgf/contrib/tikz-network/data/front.pdf b/graphics/pgf/contrib/tikz-network/data/front.pdf
new file mode 100644
index 0000000000..b7ce38fa22
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/front.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-network/data/ml_edges.csv b/graphics/pgf/contrib/tikz-network/data/ml_edges.csv
new file mode 100644
index 0000000000..bfb4a7d461
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/ml_edges.csv
@@ -0,0 +1,12 @@
+u,v,label,lw,color ,opacity,bend,Direct
+A,B, ab ,.5,red , 1 , 30,false
+B,C, bc ,.7,blue , 1 , -60,false
+A,E, ae , 1,green , 1 , 45,true
+C,E, ce , 2,orange, 1 , 0,false
+A,A, aa ,.3,black , .5 , 75,false
+C,G, cg , 1,blue , .5 , 0,false
+E,H, eh , 1,gray , .5 , 0,false
+F,A, fa ,.7,red , .7 , 0,true
+D,F, df ,.7,cyan , 1 , 30,true
+F,H, fh ,.7,purple, 1 , 60,false
+D,G, dg ,.7,blue , .7 , 60,false
diff --git a/graphics/pgf/contrib/tikz-network/data/ml_edges_simple.csv b/graphics/pgf/contrib/tikz-network/data/ml_edges_simple.csv
new file mode 100644
index 0000000000..397a4590ab
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/ml_edges_simple.csv
@@ -0,0 +1,12 @@
+u,v
+A,B
+B,C
+A,E
+C,E
+A,A
+C,G
+E,H
+F,A
+D,F
+F,H
+D,G
diff --git a/graphics/pgf/contrib/tikz-network/data/ml_vertices.csv b/graphics/pgf/contrib/tikz-network/data/ml_vertices.csv
new file mode 100644
index 0000000000..e3f6ff0b69
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/ml_vertices.csv
@@ -0,0 +1,9 @@
+id, x, y ,size, color,opacity,label,layer
+ A, 0, 0, .4 , green, .9 , a , 1
+ B, 1, .7, .6 , , .5 , b , 1
+ C, 2, 1, .8 ,orange, .3 , c , 1
+ D, 2, 0, .5 , red, .7 , d , 2
+ E,.2,1.5, .5 , gray, , e , 1
+ F,.1, .5, .7 , blue, .3 , f , 2
+ G, 2, 1, .4 , cyan, .7 , g , 2
+ H, 1, 1, .4 ,yellow, .7 , h , 2
diff --git a/graphics/pgf/contrib/tikz-network/data/ml_vertices_simple.csv b/graphics/pgf/contrib/tikz-network/data/ml_vertices_simple.csv
new file mode 100644
index 0000000000..0b4e379723
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/ml_vertices_simple.csv
@@ -0,0 +1,9 @@
+id, x, y ,layer
+ A, 0, 0, 1
+ B, 1, .7, 1
+ C, 2, 1, 1
+ D, 2, 0, 2
+ E,.2,1.5, 1
+ F,.1, .5, 2
+ G, 2, 1, 2
+ H, 1, 1, 2
diff --git a/graphics/pgf/contrib/tikz-network/data/plane.png b/graphics/pgf/contrib/tikz-network/data/plane.png
new file mode 100644
index 0000000000..64642850e9
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/plane.png
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-network/data/vertices.csv b/graphics/pgf/contrib/tikz-network/data/vertices.csv
new file mode 100644
index 0000000000..b11ef550ca
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/vertices.csv
@@ -0,0 +1,6 @@
+id, x, y ,size, color,opacity,label,IdAsLabel,NoLabel
+ A, 0, 0, .4 , green, .9 , a , false , false
+ B, 1, .7, .6 , , .5 , b , false , false
+ C, 2, 1, .8 ,orange, .3 , c , false , true
+ D, 2, 0, .5 , red, .7 , d , true , false
+ E,.2,1.5, .5 , gray, , e , false , false
diff --git a/graphics/pgf/contrib/tikz-network/data/vertices_RGB.csv b/graphics/pgf/contrib/tikz-network/data/vertices_RGB.csv
new file mode 100644
index 0000000000..c36ef27305
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/data/vertices_RGB.csv
@@ -0,0 +1,6 @@
+id, x, y ,size, color,opacity,label, R , G , B
+ A, 0, 0, .4 , green, .9 , a ,255, 0, 0
+ B, 1, .7, .6 , , .5 , b , 0,255, 0
+ C, 2, 1, .8 ,orange, .3 , c , 0, 0,255
+ D, 2, 0, .5 , red, .7 , d , 10,120,255
+ E,.2,1.5, .5 , gray, , e , 76, 55,255
diff --git a/graphics/pgf/contrib/tikz-network/tikz-network.pdf b/graphics/pgf/contrib/tikz-network/tikz-network.pdf
new file mode 100644
index 0000000000..1554bd045f
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/tikz-network.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-network/tikz-network.sty b/graphics/pgf/contrib/tikz-network/tikz-network.sty
new file mode 100644
index 0000000000..b40d157cec
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/tikz-network.sty
@@ -0,0 +1,1400 @@
+% ============================================================================
+% File : tikz-network.sty -- Library for plotting networks in TikZ
+% Author : Juergen Hackl <hackl.j@gmx.at>
+% Creation : 2017-02-28
+% Time-stamp: <Thu 2019-08-15 10:57 juergen>
+% Version : 1.1 (2019-08-15)
+%
+% Copyright (c) 2019 Juergen Hackl <hackl.j@gmx.at>
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+% ============================================================================
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-network}[2019/08/15 tikz-network v1.1]
+
+%=============================================================================
+% Used packages
+%=============================================================================
+\RequirePackage{etex}
+\RequirePackage{xifthen}
+\RequirePackage{xkeyval}[2005/11/25]
+\RequirePackage{tikz}
+\RequirePackage{datatool}
+\RequirePackage{graphicx}
+\RequirePackage{trimspaces}
+\usetikzlibrary{arrows}
+\usetikzlibrary{positioning}
+\usetikzlibrary{3d}
+\usetikzlibrary{fit}
+\usetikzlibrary{calc}
+\usetikzlibrary{backgrounds}
+\usetikzlibrary{arrows.meta}
+\usetikzlibrary{shapes.geometric}
+%=============================================================================
+
+
+%=============================================================================
+% Predefined variables
+%=============================================================================
+
+%<--------------------------------------------------------------------------->
+% Vertex
+%<--------------------------------------------------------------------------->
+\definecolor{vertexfill}{HTML}{abd7e6}
+\newcommand*{\DefaultUnit}{cm}
+\newcommand*{\DistanceScale}{1}
+\newcommand*{\VertexShape}{circle}
+\newcommand*{\VertexInnerSep}{2pt}
+\newcommand*{\VertexOuterSep}{0pt}
+\newcommand*{\VertexMinSize}{0.6\DefaultUnit}
+\newcommand*{\VertexLineWidth}{1pt}
+\newcommand*{\VertexLineColor}{black}
+\newcommand*{\VertexLineOpacity}{1}
+\newcommand*{\VertexTextColor}{black}
+\newcommand*{\VertexFillColor}{vertexfill}
+\newcommand*{\VertexFillOpacity}{1}
+\newcommand*{\VertexTextFont}{\scriptsize}%\tiny}
+\newcommand*{\VertexTextRotation}{0}
+\newcommand*{\VertexTextOpacity}{1}
+
+%<--------------------------------------------------------------------------->
+% Edge
+%<--------------------------------------------------------------------------->
+\newcommand*{\EdgeArrow}{-latex}
+\newcommand*{\EdgeLineWidth}{1.5pt}
+\newcommand*{\EdgeColor}{black!75}
+\newcommand*{\EdgeOpacity}{1}
+\newcommand*{\EdgeTextFillColor}{white}
+\newcommand*{\EdgeTextFillOpacity}{1}
+\newcommand*{\EdgeInnerSep}{0pt}
+\newcommand*{\EdgeOuterSep}{1pt}
+\newcommand*{\EdgeTextRotation}{0}
+\newcommand*{\EdgeTextOpacity}{1}
+\newcommand*{\EdgeTextFont}{\scriptsize}
+
+
+%<--------------------------------------------------------------------------->
+% Plane
+%<--------------------------------------------------------------------------->
+\newcommand*{\PlaneLineWidth}{1.5pt}
+\newcommand*{\PlaneLineColor}{black}
+\newcommand*{\PlaneLineOpacity}{1}
+\newcommand*{\PlaneGridLineWidth}{.5pt}
+\newcommand*{\PlaneGridColor}{black}
+\newcommand*{\PlaneGridOpacity}{.5}
+\newcommand*{\PlaneFillColor}{vertexfill}
+\newcommand*{\PlaneFillOpacity}{.3}
+\newcommand*{\PlaneWidth}{5\DefaultUnit}
+\newcommand*{\PlaneHeight}{5\DefaultUnit}
+
+
+%<--------------------------------------------------------------------------->
+% Text
+%<--------------------------------------------------------------------------->
+
+\newcommand*{\TextInnerSep}{2pt}
+\newcommand*{\TextOuterSep}{0pt}
+\newcommand*{\TextFont}{\normalsize}
+\newcommand*{\TextColor}{black}
+\newcommand*{\TextRotation}{0}
+\newcommand*{\TextOpacity}{1}
+
+
+%<--------------------------------------------------------------------------->
+% Network
+%<--------------------------------------------------------------------------->
+\newcommand*{\NetworkLayerDistance}{-2}
+\newcommand*{\xAngle}{-12}
+\newcommand*{\xLength}{1}
+\newcommand*{\yAngle}{37}
+\newcommand*{\yLength}{1}
+\newcommand*{\zAngle}{90}
+\newcommand*{\zLength}{1}
+
+
+\tikzset{edge canvas/.style={}}
+
+\tikzset{multilayer 2d/.style={y={(0:1cm)},x={(90:1cm)},z={(90:0cm)},every
+ node/.append style={transform shape},}}
+
+
+\def\Origin{\draw [->] (0,0,0) -- (2,0,0) node [at end, right] {$y$};
+\draw [->] (0,0,0) -- (0,2,0) node [at end, right] {$x$};
+\draw [->] (0,0,0) -- (0,0,2) node [at end, left] {$z$};}
+
+
+%=============================================================================
+% Predefined Styles
+%=============================================================================
+
+%<--------------------------------------------------------------------------->
+% Init Default Vertex Style
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {DVS} {Shape}{}
+\define@cmdkey [NW] {DVS} {MinSize}{}
+\define@cmdkey [NW] {DVS} {LineWidth}{}
+\define@cmdkey [NW] {DVS} {LineColor}{}
+\define@cmdkey [NW] {DVS} {LineOpacity}{}
+\define@cmdkey [NW] {DVS} {FillColor}{}
+\define@cmdkey [NW] {DVS} {FillOpacity}{}
+\define@cmdkey [NW] {DVS} {TextColor}{}
+\define@cmdkey [NW] {DVS} {TextFont}{}
+\define@cmdkey [NW] {DVS} {TextRotation}{}
+\define@cmdkey [NW] {DVS} {TextOpacity}{}
+\define@cmdkey [NW] {DVS} {InnerSep}{}
+\define@cmdkey [NW] {DVS} {OuterSep}{}
+\presetkeys [NW] {DVS} {Shape = \VertexShape,
+ MinSize = \VertexMinSize,
+ LineWidth = \VertexLineWidth,
+ LineColor = \VertexLineColor,
+ FillColor = \VertexFillColor,
+ LineOpacity = \VertexLineOpacity,
+ FillOpacity = \VertexFillOpacity,
+ InnerSep = \VertexInnerSep,
+ OuterSep = \VertexOuterSep,
+ TextColor = \VertexTextColor,
+ TextRotation = \VertexTextRotation,
+ TextOpacity = \VertexTextOpacity,
+ TextFont = \VertexTextFont}{}
+
+%<--------------------------------------------------------------------------->
+% Init Default Edge Style
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {DES} {Arrow}{}
+\define@cmdkey [NW] {DES} {LineWidth}{}
+\define@cmdkey [NW] {DES} {Color}{}
+\define@cmdkey [NW] {DES} {Opacity}{}
+\define@cmdkey [NW] {DES} {TextFillColor}{}
+\define@cmdkey [NW] {DES} {TextFillOpacity}{}
+\define@cmdkey [NW] {DES} {TextFont}{}
+\define@cmdkey [NW] {DES} {TextRotation}{}
+\define@cmdkey [NW] {DES} {TextOpacity}{}
+\define@cmdkey [NW] {DES} {InnerSep}{}
+\define@cmdkey [NW] {DES} {OuterSep}{}
+\presetkeys [NW] {DES} {Arrow = \EdgeArrow,
+ LineWidth = \EdgeLineWidth,
+ Color = \EdgeColor,
+ Opacity = \EdgeOpacity,
+ TextFillColor = \EdgeTextFillColor,
+ TextFillOpacity = \EdgeTextFillOpacity,
+ InnerSep = \EdgeInnerSep,
+ OuterSep = \EdgeOuterSep,
+ TextRotation = \EdgeTextRotation,
+ TextOpacity = \EdgeTextOpacity,
+ TextFont = \EdgeTextFont}{}
+
+
+%<--------------------------------------------------------------------------->
+% Init Default Plane Style
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {DPS} {LineWidth}{}
+\define@cmdkey [NW] {DPS} {LineColor}{}
+\define@cmdkey [NW] {DPS} {LineOpacity}{}
+\define@cmdkey [NW] {DPS} {GridLineWidth}{}
+\define@cmdkey [NW] {DPS} {GridColor}{}
+\define@cmdkey [NW] {DPS} {GridOpacity}{}
+\define@cmdkey [NW] {DPS} {FillColor}{}
+\define@cmdkey [NW] {DPS} {FillOpacity}{}
+\presetkeys [NW] {DPS} {LineWidth = \PlaneLineWidth,
+ LineColor = \PlaneLineColor,
+ LineOpacity = \PlaneLineOpacity,
+ GridLineWidth = \PlaneGridLineWidth,
+ GridColor = \PlaneGridColor,
+ GridOpacity = \PlaneGridOpacity,
+ FillColor = \PlaneFillColor,
+ FillOpacity = \PlaneFillOpacity}{}
+
+
+%<--------------------------------------------------------------------------->
+% Init Default Text Style
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {DTS} {InnerSep}{}
+\define@cmdkey [NW] {DTS} {OuterSep}{}
+\define@cmdkey [NW] {DTS} {TextFont}{}
+\define@cmdkey [NW] {DTS} {TextColor}{}
+\define@cmdkey [NW] {DTS} {TextRotation}{}
+\define@cmdkey [NW] {DTS} {TextOpacity}{}
+\presetkeys [NW] {DTS} {InnerSep = \TextInnerSep,
+ OuterSep = \TextOuterSep,
+ TextFont = \TextFont,
+ TextColor = \TextColor,
+ TextRotation = \TextRotation,
+ TextOpacity = \TextOpacity}{}
+
+
+
+%<--------------------------------------------------------------------------->
+% Init Default Coordinates 3D
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {COS} {xAngle}{}
+\define@cmdkey [NW] {COS} {xLength}{}
+\define@cmdkey [NW] {COS} {yAngle}{}
+\define@cmdkey [NW] {COS} {yLength}{}
+\define@cmdkey [NW] {COS} {zAngle}{}
+\define@cmdkey [NW] {COS} {zLength}{}
+\presetkeys [NW] {COS} {xAngle = \xAngle,
+ xLength = \xLength,
+ yAngle = \yAngle,
+ yLength = \yLength,
+ zAngle = \zAngle,
+ zLength = \zLength}{}
+
+%<--------------------------------------------------------------------------->
+% Default Style
+%<--------------------------------------------------------------------------->
+\newcommand*{\SetVertexStyle}[1][]{\NW@SetVertexStyleDefault[#1]}%
+\def\NW@SetVertexStyleDefault[#1]{%
+\setkeys[NW]{DVS}{#1}%
+\tikzset{VertexStyle/.style = {draw,
+ shape = \cmdNW@DVS@Shape,
+ color = \cmdNW@DVS@LineColor,
+ fill = \cmdNW@DVS@FillColor,
+ inner sep = \cmdNW@DVS@InnerSep,
+ outer sep = \cmdNW@DVS@OuterSep,
+ minimum size = \cmdNW@DVS@MinSize,
+ line width = \cmdNW@DVS@LineWidth,
+ font = \cmdNW@DVS@TextFont,
+ fill opacity = \cmdNW@DVS@FillOpacity,
+ draw opacity = \cmdNW@DVS@LineOpacity}}
+\tikzset{LabelStyle/.style={ \cmdNW@DVS@TextColor,
+ font = \cmdNW@DVS@TextFont,
+ rotate = \cmdNW@DVS@TextRotation,
+ opacity = \cmdNW@DVS@TextOpacity,}}
+}%
+
+\newcommand*{\SetEdgeStyle}[1][]{\NW@SetEdgeStyleDefault[#1]}%
+\def\NW@SetEdgeStyleDefault[#1]{%
+\setkeys[NW]{DES}{#1}%
+\tikzset{EdgeStyle/.style = {\cmdNW@DES@Arrow,
+ line width = \cmdNW@DES@LineWidth,
+ color = \cmdNW@DES@Color,
+ opacity = \cmdNW@DES@Opacity}}
+\tikzset{EdgeLabelStyle/.style={circle,
+ fill = \cmdNW@DES@TextFillColor,
+ fill opacity = \cmdNW@DES@TextFillOpacity,
+ inner sep = \cmdNW@DES@InnerSep,
+ outer sep = \cmdNW@DES@OuterSep,
+ rotate = \cmdNW@DES@TextRotation,
+ text opacity = \cmdNW@DES@TextOpacity,
+ font = \cmdNW@DES@TextFont}}
+}%
+
+
+\newcommand*{\SetPlaneStyle}[1][]{\NW@SetPlaneStyleDefault[#1]}%
+\def\NW@SetPlaneStyleDefault[#1]{%
+\setkeys[NW]{DPS}{#1}%
+\tikzset{PlaneBorderStyle/.style = {draw,
+ line width = \cmdNW@DPS@LineWidth,
+ color = \cmdNW@DPS@LineColor,
+ draw opacity = \cmdNW@DPS@LineOpacity}}
+\tikzset{PlaneFillStyle/.style = {
+ fill = \cmdNW@DPS@FillColor,
+ fill opacity = \cmdNW@DPS@FillOpacity}}
+\tikzset{PlaneGridStyle/.style = {draw,
+ line width = \cmdNW@DPS@GridLineWidth,
+ color = \cmdNW@DPS@GridColor,
+ opacity = \cmdNW@DPS@GridOpacity}}
+}%
+
+
+\newcommand*{\SetTextStyle}[1][]{\NW@SetTextStyleDefault[#1]}%
+\def\NW@SetTextStyleDefault[#1]{%
+\setkeys[NW]{DTS}{#1}%
+\tikzset{TextStyle/.style = {inner sep = \cmdNW@DTS@InnerSep,
+ outer sep = \cmdNW@DTS@OuterSep,
+ color = \cmdNW@DTS@TextColor,
+ rotate = \cmdNW@DTS@TextRotation,
+ text opacity = \cmdNW@DTS@TextOpacity,
+ font = \cmdNW@DTS@TextFont}}
+}%
+
+
+\tikzset{
+ multilayer/.code={%
+ \ifthenelse{\equal{#1}{3d}}{
+ \tikzset{edge canvas/.style={canvas is yx plane at z=0}}
+ \tikzset{multilayer 3d}
+ }{
+ \tikzset{edge canvas/.style={}}
+ \tikzset{multilayer 2d}
+ }
+ },
+ }
+
+
+
+\newcommand*{\SetCoordinates}[1][]{\NW@SetCoordinates[#1]}%
+\def\NW@SetCoordinates[#1]{%
+\setkeys[NW]{COS}{#1}%
+\tikzset{multilayer 3d/.style={
+ y={(\cmdNW@COS@xAngle:\cmdNW@COS@xLength \DefaultUnit)},
+ x={(\cmdNW@COS@yAngle:\cmdNW@COS@yLength \DefaultUnit)},
+ z={(\cmdNW@COS@zAngle:\cmdNW@COS@zLength \DefaultUnit)},
+ every node/.append style={transform shape},
+ }}
+%\tikzset{edge canvas/.style={canvas is yx plane at z=0}}
+}%
+
+
+%<--------------------------------------------------------------------------->
+% Apply default settings
+%<--------------------------------------------------------------------------->
+
+\SetCoordinates
+\SetVertexStyle
+\SetEdgeStyle
+\SetPlaneStyle
+\SetTextStyle
+
+%<--------------------------------------------------------------------------->
+% Redefine settings
+%<--------------------------------------------------------------------------->
+
+\newcommand*{\SetLayerDistance}[1]{\renewcommand{\NetworkLayerDistance}{#1}}
+\newcommand*{\SetDefaultUnit}[1]{\renewcommand{\DefaultUnit}{#1}}
+\newcommand*{\SetDistanceScale}[1]{\renewcommand{\DistanceScale}{#1}}
+\newcommand*{\SetPlaneWidth}[1]{\renewcommand{\PlaneWidth}{#1}}
+\newcommand*{\SetPlaneHeight}[1]{\renewcommand{\PlaneHeight}{#1}}
+\newcommand*{\EdgesInBG}{\presetkeys [NW] {edge} {NotInBG = false}{}}
+\newcommand*{\EdgesNotInBG}{\presetkeys [NW] {edge} {NotInBG = true}{}}
+
+%=============================================================================
+% Vertex and Edge creation
+%=============================================================================
+
+%<--------------------------------------------------------------------------->
+% Init Vertex
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {vertex} {x}{}
+\define@cmdkey [NW] {vertex} {y}{}
+\define@cmdkey [NW] {vertex} {label}{}
+\define@cmdkey [NW] {vertex} {size}{}
+\define@cmdkey [NW] {vertex} {color}{}
+\define@cmdkey [NW] {vertex} {opacity}{}
+\define@cmdkey [NW] {vertex} {style}{}
+\define@cmdkey [NW] {vertex} {layer}{}
+\define@cmdkey [NW] {vertex} {shape}{}
+\define@cmdkey [NW] {vertex} {fontsize}{}
+\define@cmdkey [NW] {vertex} {fontcolor}{}
+\define@cmdkey [NW] {vertex} {fontscale}{}
+\define@boolkey [NW] {vertex} {RGB}[true]{}
+\define@boolkey [NW] {vertex} {IdAsLabel}[true]{}
+\define@boolkey [NW] {vertex} {NoLabel}[true]{}
+\define@boolkey [NW] {vertex} {Math}[true]{}
+\define@boolkey [NW] {vertex} {Network}[true]{}
+\define@boolkey [NW] {vertex} {Pseudo}[true]{}
+\define@cmdkey [NW] {vertex} {distance}{}
+\define@cmdkey [NW] {vertex} {position}{}
+\presetkeys [NW] {vertex} {Network = false,}{}
+
+
+%<--------------------------------------------------------------------------->
+% Vertex
+%<--------------------------------------------------------------------------->
+\newcommand*{\Vertex}[1][]{\@vertex[#1]}%
+\def\@vertex[#1]#2{%
+ \setkeys[NW]{vertex}{#1}%
+ % Check if Vertex is used in a network, if so no default settings are
+ % necessary, otherwise default settings are applied.
+ \ifNW@vertex@Network
+ \cmdNW@vertex@opacity
+ \else
+ \setkeys[NW]{vertex}{x = {0},
+ y = {0},
+ label = {},
+ size = {},
+ color = {},
+ opacity = {},
+ layer = {},
+ shape = {},
+ style = {},
+ fontsize = {},
+ fontcolor = {},
+ fontscale = {},
+ NoLabel = false,
+ IdAsLabel = false,
+ Math = false,
+ RGB = false,
+ Pseudo = false,
+ distance = {0},
+ position = {center},}
+ \setkeys[NW]{vertex}{#1}%
+ \fi
+ \@@vertex{#2}%
+}
+\def\@@vertex#1{%
+ \def\vstyle{VertexStyle}
+ \begin{scope}
+ % [
+ % scale=1,yshift=0,every node/.append style={yslant=0.5,xslant=-1},yslant=0.5,xslant=-1
+ % ]
+ % If option NoLabel is true, no labels are printed in the network
+ \ifNW@vertex@NoLabel
+ \def\vertex@L{}%
+ \def\vertex@Name{}%
+ \else
+ % if IdAsLabel is true, the label of the vertex is equal to the vertex id
+ \ifNW@vertex@IdAsLabel
+ \def\vertex@Name{#1}
+ \def\vertex@L{\vertex@Name}
+ % Otherwise the label is equal to the label if it is non empty
+ \else
+ \ifthenelse{\not\equal{\cmdNW@vertex@label}{}}{
+ \def\vertex@L{\cmdNW@vertex@label}
+ \def\vertex@Name{#1}
+ }{
+ \def\vertex@Name{#1}
+ \def\vertex@L{}
+ }
+ \fi
+ \fi
+ % Check if Math is true, if so the label will be in math mode
+ \ifNW@vertex@Math
+ \def\vertex@Label{$\vertex@L$}%
+ \else
+ \def\vertex@Label{\vertex@L}%
+ \fi
+ % Check if the size of the vertex is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@vertex@size}{}}{
+ \tikzset{LocalVertexSize/.style={minimum size = \cmdNW@vertex@size
+ \DefaultUnit}}
+ }{
+ \tikzset{LocalVertexSize/.style={}}
+ }
+ % Check if the font size of the vertex label is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@vertex@fontsize}{}}{
+ \tikzset{LocalVertexFontSize/.style={font = \cmdNW@vertex@fontsize}}
+ }{
+ \tikzset{LocalVertexFontSize/.style={}}
+ }
+ % Check if the font scale of the vertex label is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@vertex@fontscale}{}}{
+ \tikzset{LocalVertexFontScale/.style={scale = \cmdNW@vertex@fontscale}}
+ }{
+ \tikzset{LocalVertexFontScale/.style={}}
+ }
+ % Check if the opacity of the vertex is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@vertex@opacity}{}}{
+ \tikzset{LocalVertexOpacity/.style={fill opacity = \cmdNW@vertex@opacity}}
+ }{
+ \tikzset{LocalVertexOpacity/.style={}}
+ }
+ % Check if the shape of the vertex is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@vertex@shape}{}}{
+ \tikzset{LocalVertexShape/.style={shape = \cmdNW@vertex@shape}}
+ }{
+ \tikzset{LocalVertexShape/.style={}}
+ }
+ % Check if the color of the vertex is redefined, if so the new style is
+ % used. If the option RGB is true, RGB values can be used to define the
+ % color of the vertex entered in the form {R,G,B}. If RGB is not true the
+ % default colors of tikz can be used (e.g. blue!50!green)
+ \ifNW@vertex@RGB
+ \ifthenelse{\not\equal{\cmdNW@vertex@color}{}}{
+ \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@vertex@color}
+ \tikzset{LocalVertexFill/.style={fill = LocalColor}}
+ }{
+ \tikzset{LocalVertexFill/.style={}}
+ }
+ \ifthenelse{\not\equal{\cmdNW@vertex@fontcolor}{}}{
+ \pgfutil@definecolor{LocalFontColor}{RGB}{\cmdNW@vertex@fontcolor}
+ \tikzset{LocalVertexFontColor/.style={color = LocalFontColor}}
+ }{
+ \tikzset{LocalVertexFontColor/.style={}}
+ }
+ \else
+ \ifthenelse{\not\equal{\cmdNW@vertex@color}{}}{
+ \tikzset{LocalVertexFill/.style={fill = \cmdNW@vertex@color}}
+ }{
+ \tikzset{LocalVertexFill/.style={}}
+ }
+ \ifthenelse{\not\equal{\cmdNW@vertex@fontcolor}{}}{
+ \tikzset{LocalVertexFontColor/.style={color = \cmdNW@vertex@fontcolor}}
+ }{
+ \tikzset{LocalVertexFontColor/.style={}}
+ }
+
+ \fi
+ % Define empty style for the vertex
+ \ifNW@vertex@Pseudo
+ \tikzset{LocalPseudo/.style={opacity = 0}}
+ \else
+ \tikzset{LocalPseudo/.style={}}
+ \fi
+ % Define local style for the label
+ \tikzset{LocalLabel/.style={label = {[LabelStyle, LocalVertexFontColor,
+ LocalVertexFontSize, LocalVertexFontScale, label
+ distance=\cmdNW@vertex@distance]\cmdNW@vertex@position:\vertex@Label}}}
+ \ifthenelse{\equal{\cmdNW@vertex@layer}{}}{
+ \protected@edef\@tempa{%
+ \noexpand\node[\vstyle,LocalVertexSize,LocalVertexOpacity,LocalVertexFill,LocalVertexShape,LocalLabel,\cmdNW@vertex@style,LocalPseudo](#1)%
+ at (\cmdNW@vertex@x*\DistanceScale\DefaultUnit,\cmdNW@vertex@y*\DistanceScale\DefaultUnit){}}%
+ \@tempa;
+ }{
+ \begin{scope}[canvas is yx plane at z=(\cmdNW@vertex@layer-1)*\NetworkLayerDistance]
+ \protected@edef\@tempa{%
+ \noexpand\node[\vstyle,LocalVertexSize,LocalVertexOpacity,LocalVertexFill,LocalVertexShape,LocalLabel,\cmdNW@vertex@style,LocalPseudo](#1)%
+ at (\cmdNW@vertex@x*\DistanceScale\DefaultUnit,\cmdNW@vertex@y*\DistanceScale\DefaultUnit){}}%
+ \@tempa;
+ \end{scope}
+ }
+ \end{scope}
+}
+
+%<--------------------------------------------------------------------------->
+% Init Edge
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {edge} {label}{}
+\define@cmdkey [NW] {edge} {lw}{}
+\define@cmdkey [NW] {edge} {color}{}
+\define@cmdkey [NW] {edge} {opacity}{}
+\define@cmdkey [NW] {edge} {style}{}
+\define@cmdkey [NW] {edge} {fontcolor}{}
+\define@cmdkey [NW] {edge} {fontsize}{}
+\define@cmdkey [NW] {edge} {fontscale}{}
+\define@boolkey [NW] {edge} {RGB}[true]{}
+\define@boolkey [NW] {edge} {Math}[true]{}
+\define@boolkey [NW] {edge} {Direct}[true]{}
+\define@boolkey [NW] {edge} {Network}[true]{}
+\define@cmdkey [NW] {edge} {bend}{}
+\define@cmdkey [NW] {edge} {position}{}
+\define@cmdkey [NW] {edge} {distance}{}
+\define@cmdkey [NW] {edge} {loopsize}{}
+\define@cmdkey [NW] {edge} {loopposition}{}
+\define@cmdkey [NW] {edge} {loopshape}{}
+\define@boolkey [NW] {edge} {NotInBG}[true]{}
+\define@cmdkey [NW] {edge} {path}{}
+\presetkeys [NW] {edge} {Network = false,}{}
+% NotInBG = false,}{}
+
+%<--------------------------------------------------------------------------->
+% Edge
+%<--------------------------------------------------------------------------->
+\newcommand*{\Edge}[1][]{\@edge[#1]}%
+\def\@edge[#1](#2)(#3){%
+ \setkeys[NW]{edge}{#1}%
+ % Check if Vertex is used in a network, if so no default settings are
+ % necessary, otherwise default settings are applied.
+ \ifNW@edge@Network
+ \else
+ \setkeys[NW]{edge}{label = {},
+ lw = {},
+ path = {},
+ color = {},
+ opacity = {},
+ style = {},
+ fontcolor = {},
+ fontsize = {},
+ fontscale = {},
+ RGB = false,
+ Math = false,
+ Direct = false,
+ NotInBG = false,
+ bend = {0},
+ loopsize = {1\DefaultUnit},
+ position = {},
+ loopposition= {0},
+ loopshape = {90},
+ distance = {.5}}
+ \setkeys[NW]{edge}{#1}%
+ \fi
+ \def\estyle{EdgeStyle}
+ %
+ \ifNW@edge@NotInBG
+ \tikzset{EdgeInBG/.style={}}
+ \else
+ \tikzset{EdgeInBG/.style={on background layer}}
+ \fi
+ \begin{scope}[edge canvas,EdgeInBG]
+ % [
+ % scale=1,yshift=0,every node/.append style={yslant=0.5,xslant=-1},yslant=0.5,xslant=-1
+ % ]
+ % Check if Direct is true, if so use default arrow style
+ \ifNW@edge@Direct
+ \tikzset{LocalArrow/.style={}}
+ \else
+ \tikzset{LocalArrow/.style={-}}
+ \fi
+ % Check if the line width of the vertex is redefined, if so the new style is
+ % used
+ \ifthenelse{\not\equal{\cmdNW@edge@lw}{}}{
+ \tikzset{LocalEdgeLW/.style={line width = \cmdNW@edge@lw}}
+ }{
+ \tikzset{LocalEdgeLW/.style={}}
+ }
+ % Check if the opacity of the vertex is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@edge@opacity}{}}{
+ \tikzset{LocalEdgeOpacity/.style={opacity = \cmdNW@edge@opacity}}
+ \tikzset{LocalTextOpacity/.style={text opacity = \cmdNW@edge@opacity}}
+ }{
+ \tikzset{LocalEdgeOpacity/.style={}}
+ \tikzset{LocalTextOpacity/.style={}}
+ }
+ % Check if the font size of the edge is redefined, if so the new style is
+ % used
+ \ifthenelse{\not\equal{\cmdNW@edge@fontsize}{}}{
+ \tikzset{LocalEdgeFontSize/.style={font = \cmdNW@edge@fontsize}}
+ }{
+ \tikzset{LocalEdgeFontSize/.style={}}
+ }
+ % Check if the font scale of the edge is redefined, if so the new style is
+ % used
+ \ifthenelse{\not\equal{\cmdNW@edge@fontscale}{}}{
+ \tikzset{LocalEdgeFontScale/.style={scale = \cmdNW@edge@fontscale}}
+ }{
+ \tikzset{LocalEdgeFontScale/.style={}}
+ }
+ % Check if the color of the vertex is redefined, if so the new style is
+ % used. If the option RGB is true, RGB values can be used to define the
+ % color of the vertex entered in the form {R,G,B}. If RGB is not true the
+ % default colors of tikz can be used (e.g. blue!50!green)
+ \ifNW@edge@RGB
+ \ifthenelse{\not\equal{\cmdNW@edge@color}{}}{
+ \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@edge@color}
+ \tikzset{LocalEdgeColor/.style={color = LocalColor}}
+ }{
+ \tikzset{LocalEdgeColor/.style={}}
+ }
+ \ifthenelse{\not\equal{\cmdNW@edge@fontcolor}{}}{
+ \pgfutil@definecolor{LocalFontColor}{RGB}{\cmdNW@edge@fontcolor}
+ \tikzset{LocalEdgeFontColor/.style={text = LocalFontColor}}
+ }{
+ \tikzset{LocalEdgeFontColor/.style={}}
+ }
+
+ \else
+ \ifthenelse{\not\equal{\cmdNW@edge@color}{}}{
+ \tikzset{LocalEdgeColor/.style={color = \cmdNW@edge@color}}
+ }{
+ \tikzset{LocalEdgeColor/.style={}}
+ }
+ \ifthenelse{\not\equal{\cmdNW@edge@fontcolor}{}}{
+ \tikzset{LocalEdgeFontColor/.style={text = \cmdNW@edge@fontcolor}}
+ }{
+ \tikzset{LocalEdgeFontColor/.style={}}
+ }
+
+ \fi
+ % Check if Math is true, if so the label will be in math mode
+ \ifNW@edge@Math
+ \def\edge@L{$\cmdNW@edge@label$}%
+ \else
+ \def\edge@L{\cmdNW@edge@label}%
+ \fi
+ % Check if a label is assigned, if so create a label variable
+ \ifthenelse{\not\equal{\cmdNW@edge@label}{}}{ \def\edge@Label{node[EdgeLabelStyle,LocalTextOpacity,LocalEdgeFontColor,LocalEdgeFontSize,LocalEdgeFontScale,pos=\cmdNW@edge@distance,\cmdNW@edge@position]{\edge@L}}
+ }{
+ \def\edge@Label{}
+ }
+ % Check if it is a self loop or a normal edge
+ % Normal edge
+ \ifthenelse{\not\equal{#2}{#3}}{
+ \ifthenelse{\not\equal{\cmdNW@edge@path}{}}{
+ \def\edge@pts{}%
+ \@for\tmp:=\cmdNW@edge@path\do{
+ \edef\edge@pts{\edge@pts (\tmp) --}
+ }
+ \protected@edef\@tempa{%
+ \noexpand\draw[\estyle,LocalEdgeLW,LocalEdgeOpacity,LocalEdgeColor,LocalArrow,\cmdNW@edge@style] (#2) -- \edge@pts (#3)} \@tempa;
+ }{
+ \protected@edef\@tempa{%
+ \noexpand\path[\estyle,LocalEdgeLW,LocalEdgeOpacity,LocalEdgeColor,LocalArrow,\cmdNW@edge@style] (#2) edge [bend left = \cmdNW@edge@bend] \edge@Label (#3)}%
+ \@tempa;
+ }
+ }{% Self loop
+ \protected@edef\@tempa{%
+ \noexpand\path[\estyle,LocalEdgeLW,LocalEdgeOpacity,LocalEdgeColor,LocalArrow,\cmdNW@edge@style]
+ (#2) edge [in=-\cmdNW@edge@loopshape/2+\cmdNW@edge@loopposition,out=\cmdNW@edge@loopshape/2+\cmdNW@edge@loopposition,loop,distance=\cmdNW@edge@loopsize,] \edge@Label (#3)}%
+ \@tempa;
+ }
+ \end{scope}
+}
+
+
+%=============================================================================
+% Vertices and Edges creation
+%=============================================================================
+
+%<--------------------------------------------------------------------------->
+% Init Vertices
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {vertices} {layer}{}
+\define@cmdkey [NW] {vertices} {size}{}
+\define@cmdkey [NW] {vertices} {color}{}
+\define@cmdkey [NW] {vertices} {opacity}{}
+\define@cmdkey [NW] {vertices} {style}{}
+\define@cmdkey [NW] {vertices} {shape}{}
+\define@boolkey [NW] {vertices} {RGB}[true]{}
+\define@boolkey [NW] {vertices} {IdAsLabel}[true]{}
+\define@boolkey [NW] {vertices} {NoLabel}[true]{}
+\define@boolkey [NW] {vertices} {Math}[true]{}
+\define@boolkey [NW] {vertices} {Pseudo}[true]{}
+\presetkeys [NW] {vertices} {layer = {},
+ opacity = {},
+ size = {},
+ color = {},
+ style = {},
+ shape = {},
+ RGB = false,
+ IdAsLabel = false,
+ NoLabel = false,
+ Math = false,
+ Pseudo = false,}{}
+
+\newcommand*{\setkeysexpanded}[2]{%
+ \expandafter\setkeysexpandedaux\expandafter{#2}{#1}}
+\newcommand*{\setkeysexpandedaux}[2]{%
+ \setkeys[NW]{#2}{#1}}
+
+% \newcommand*{\setkeysexpandedx}[2]{%
+% \expandafter\setkeysexpandedauxx\expandafter{#2}{#1}}
+% \newcommand*{\setkeysexpandedauxx}[2]{%
+% \setkeys[NW]{#2}{#1}}
+
+
+
+%<--------------------------------------------------------------------------->
+% Vertices
+%<--------------------------------------------------------------------------->
+\newcommand*{\Vertices}[1][]{\@vertices[#1]}%
+\def\@vertices[#1]#2{%
+ \setkeys[NW]{vertices}{#1}%
+ \@@vertices{#2}%
+}
+\def\@@vertices#1{%
+ % Check if data base already exist
+ \DTLifdbexists{#1}{}{
+ % create dummy data base to store name
+ \DTLnewdb{#1}
+ % delete existing vertices data base
+ \DTLifdbexists{vertices}{
+ \DTLgdeletedb{vertices}
+ }{}
+ % Load data file for vertices
+ \DTLloaddb[noheader=false]{vertices}{#1}
+ }
+ % Define variables to store option values
+ \def\vertex@Options{}%
+ \def\vertex@id{}%
+ \def\vertex@rgbValues{}%
+ % Go through each row and create vertices
+ \DTLforeach*{vertices}{}{%
+ % reset storage variable to default values
+ \edef\vertex@Options{x=0,y=0,label={},size={},color={},fontcolor={},fontsize={},fontscale={},
+ opacity={},layer={},style={},NoLabel=false,IdAsLabel=false,
+ Math=false,RGB=false,Pseudo=false,distance={0},position={center},shape={},}%
+ \edef\vertex@rgbValues{}%
+ % Go through each row element
+ \DTLforeachkeyinrow{\thisValue}{
+ % Remove leading and trailing spaces
+ \trim@spaces@in\dtlkey
+ \DTLifeq{\dtlkey}{id}{
+ % Assign vertex id to storage variable
+ \edef\vertex@id{\thisValue}%
+ }{
+ \DTLifeq{\dtlkey}{R}{
+ \edef\vertex@rgbValues{\vertex@rgbValues \thisValue,}
+ }{
+ \DTLifeq{\dtlkey}{G}{
+ \edef\vertex@rgbValues{\vertex@rgbValues \thisValue,}
+ }{
+ \DTLifeq{\dtlkey}{B}{
+ \edef\vertex@rgbValues{\vertex@rgbValues \thisValue,}
+ }{
+ % Assign option to storage variable
+ \edef\vertex@Options{\vertex@Options \dtlkey=\thisValue,}
+ }}}}
+ }
+ % Add general settings for the Vertex
+ % NoLabel
+ \ifNW@vertices@NoLabel
+ \edef\vertex@Options{\vertex@Options NoLabel=true,}
+ \fi
+ % Pseudo
+ \ifNW@vertices@Pseudo
+ \edef\vertex@Options{\vertex@Options Pseudo=true,}
+ \fi
+ % IdAsLabel
+ \ifNW@vertices@IdAsLabel
+ \edef\vertex@Options{\vertex@Options IdAsLabel=true,}
+ \fi
+ % Math
+ \ifNW@vertices@Math
+ \edef\vertex@Options{\vertex@Options Math=true,}
+ \fi
+ % RGB
+ \ifNW@vertices@RGB
+ \edef\vertex@Options{\vertex@Options RGB=true,color={\vertex@rgbValues},}
+ \fi
+ % opacity
+ \ifthenelse{\not\equal{\cmdNW@vertices@opacity}{}}
+ {
+ \edef\vertex@Options{\vertex@Options opacity=\cmdNW@vertices@opacity,}
+ }{}
+ % size
+ \ifthenelse{\not\equal{\cmdNW@vertices@size}{}}
+ {
+ \edef\vertex@Options{\vertex@Options size=\cmdNW@vertices@size,}
+ }{}
+ % shape
+ \ifthenelse{\not\equal{\cmdNW@vertices@shape}{}}
+ {
+ \edef\vertex@Options{\vertex@Options shape=\cmdNW@vertices@shape,}
+ }{}
+ % color
+ \ifthenelse{\not\equal{\cmdNW@vertices@color}{}}
+ {
+ \edef\vertex@Options{\vertex@Options color=\cmdNW@vertices@color,}
+ }{}
+ \ifthenelse{\not\equal{\cmdNW@vertices@style}{}}{
+ \edef\vertex@Options{\vertex@Options style={\cmdNW@vertices@style},}
+ }{}
+ % Apply settings for the Vertex
+ \setkeysexpanded{vertex}{\vertex@Options}%
+ \ifthenelse{\not\equal{\cmdNW@vertices@layer}{}}{
+ \ifthenelse{\equal{\cmdNW@vertices@layer}{\cmdNW@vertex@layer}}{
+ \Vertex[Network]{\vertex@id}
+ }{}
+ }{
+ \Vertex[Network]{\vertex@id}
+ }
+ % Create Vertex
+ }
+% Delete data base
+% \DTLgdeletedb{#1}
+}
+
+%<--------------------------------------------------------------------------->
+% Init Edges
+%<--------------------------------------------------------------------------->
+\def\myvariable{\KeySettingCommand{false}}
+\define@cmdkey [NW] {edges} {layer}{}
+\define@cmdkey [NW] {edges} {vertices}{}
+\define@cmdkey [NW] {edges} {style}{}
+\define@cmdkey [NW] {edges} {lw}{}
+\define@cmdkey [NW] {edges} {color}{}
+\define@cmdkey [NW] {edges} {opacity}{}
+\define@boolkey [NW] {edges} {RGB}[true]{}
+\define@boolkey [NW] {edges} {Math}[true]{}
+\define@boolkey [NW] {edges} {Direct}[true]{}
+\define@boolkey [NW] {edges} {NoLabel}[true]{}
+\define@boolkey [NW] {edges} {NotInBG}[true]{}
+\presetkeys [NW] {edges} {layer = {},
+ vertices = {},
+ style = {},
+ lw = {},
+ color = {},
+ opacity = {},
+ RGB = false,
+ Math = false,
+ Direct = false,
+ NoLabel = false,
+ NotInBG = false,}{}
+
+\newcommand{\shortcut}[1]{%
+ \@tempswafalse
+ \@for\next:=#1\do
+ {\if@tempswa+\else\@tempswatrue\fi\textbf{\next}}%
+}
+
+\newcounter{LayerCounter}
+
+
+\newcommand\myfunc[1]{\setcounter{LayerCounter}{0}\@for\tmp:=#1\do{
+\stepcounter{LayerCounter}
+\arabic{LayerCounter}-a-\textbf{\tmp}}
+}
+
+
+%<--------------------------------------------------------------------------->
+% Edges
+%<--------------------------------------------------------------------------->
+\newcommand*{\Edges}[1][]{\@edges[#1]}%
+\def\@edges[#1]#2{%
+ \setkeys[NW]{edges}{#1}%
+ \@@edges{#2}%
+}
+\def\@@edges#1{%
+\begin{scope}
+ % Check if data base already exist
+ \DTLifdbexists{#1}{}{
+ % create dummy data base to store name
+ \DTLnewdb{#1}
+ % delete existing vertices data base
+ \DTLifdbexists{edges}{
+ \DTLgdeletedb{edges}
+ }{}
+ % Load data file for vertices
+ \DTLloaddb[noheader=false]{edges}{#1}
+ }
+
+ % % Load data file for vertices
+ % \DTLloaddb[noheader=false]{#1}{#1}
+ % Define variables to store option values
+ \def\edge@Options{}%
+ \def\edge@u{}%
+ \def\edge@v{}%
+ \def\edge@u@layer{}%
+ \def\edge@v@layer{}%
+ \def\edge@rgbValues{}%
+ \def\u@layer{}%
+ \def\v@layer{}%
+ %
+ % Assign where the edges are drawn from to
+ \ifthenelse{\not\equal{\cmdNW@edges@layer}{}}{
+ % set layer count back to 0
+ \setcounter{LayerCounter}{0}
+ \@for\tmp:=\cmdNW@edges@layer\do{
+ \stepcounter{LayerCounter}
+ \ifthenelse{\value{LayerCounter}=1}{
+ \edef\u@layer{\tmp}%
+ }{
+ \edef\v@layer{\tmp}%
+ }
+ }
+ }{}
+ % Go through each row and create edges
+ \DTLforeach*{edges}{}{%
+ % reset storage variable to default values
+ \edef\edge@Options{label = {}, lw = {}, color = {}, opacity = {}, style =
+ {}, RGB = false, Math = false, Direct = false, NotInBG = false, bend = {0}, loopsize =
+ {1\DefaultUnit}, position = {}, loopposition = {0}, loopshape = {90},
+ distance = {.5}, path = {}, fontcolor = {}, fontsize = {}, fontscale ={},}
+ \edef\edge@rgbValues{}%
+ % Go through each row element
+ \DTLforeachkeyinrow{\thisValue}{
+ % Remove leading and trailing spaces
+ \trim@spaces@in\dtlkey
+ \DTLifeq{\dtlkey}{u}{
+ % Assign edge id to storage variable
+ \edef\edge@u{\thisValue}%
+ }{
+ \DTLifeq{\dtlkey}{v}{
+ \edef\edge@v{\thisValue}%
+ }{
+ \DTLifeq{\dtlkey}{R}{
+ \edef\edge@rgbValues{\edge@rgbValues \thisValue,}
+ }{
+ \DTLifeq{\dtlkey}{G}{
+ \edef\edge@rgbValues{\edge@rgbValues \thisValue,}
+ }{
+ \DTLifeq{\dtlkey}{B}{
+ \edef\edge@rgbValues{\edge@rgbValues \thisValue,}
+ }{
+ % Assign option to storage variable
+ \edef\edge@Options{\edge@Options \dtlkey=\thisValue,}
+ }}}}}
+ }
+ % Add general settings for the Edges
+ % NoLabel
+ \ifNW@edges@NoLabel
+ \edef\edge@Options{\edge@Options label={},}
+ \fi
+ % Direct
+ \ifNW@edges@Direct
+ \edef\edge@Options{\edge@Options Direct=true,}
+ \fi
+ % Math
+ \ifNW@edges@Math
+ \edef\edge@Options{\edge@Options Math=true,}
+ \fi
+ % RGB
+ \ifNW@edges@RGB
+ \edef\edge@Options{\edge@Options RGB=true,color={\edge@rgbValues},}
+ \fi
+ \ifthenelse{\not\equal{\cmdNW@edges@style}{}}{
+ \edef\edge@Options{\edge@Options style={\cmdNW@edges@style},}
+ }{}
+ % lw
+ \ifthenelse{\not\equal{\cmdNW@edges@lw}{}}
+ {
+ \edef\edge@Options{\edge@Options lw=\cmdNW@edges@lw,}
+ }{}
+ % color
+ \ifthenelse{\not\equal{\cmdNW@edges@color}{}}
+ {
+ \edef\edge@Options{\edge@Options color=\cmdNW@edges@color,}
+ }{}
+ % opacity
+ \ifthenelse{\not\equal{\cmdNW@edges@opacity}{}}
+ {
+ \edef\edge@Options{\edge@Options opacity=\cmdNW@edges@opacity,}
+ }{}
+ % NoLabel
+ \ifNW@edges@NotInBG
+ \edef\edge@Options{\edge@Options NotInBG=true,}
+ \fi
+ % Apply settings for the Edge
+ \setkeysexpanded{edge}{\edge@Options}%
+ % Create Edge
+ \ifthenelse{\equal{\cmdNW@edges@layer}{}}{
+ \Edge[Network](\edge@u)(\edge@v)
+ }{
+ \ifthenelse{\not\equal{\cmdNW@edges@vertices}{}}{
+ % Generate pseudo vertices
+ \Vertices[Pseudo,NoLabel]{\cmdNW@edges@vertices}
+ % Delete existing vertices data base
+ \DTLifdbexists{vertices}{
+ \DTLgdeletedb{vertices}
+ }{}
+ % Load data file for vertices
+ \DTLloaddb[noheader=false]{vertices}{\cmdNW@edges@vertices}
+ }{}
+ % find assigned layer to the used vertices
+ \DTLforeach*{vertices}{\id=id,\layer=layer}{%
+ \ifthenelse{\equal{\id}{\edge@u}}{
+ \edef\edge@u@layer{\layer}%
+ \dtlbreak
+ }{}
+ }
+ \DTLforeach*{vertices}{\id=id,\layer=layer}{%
+ \ifthenelse{\equal{\id}{\edge@v}}{
+ \edef\edge@v@layer{\layer}%
+ \dtlbreak
+ }{}
+ }
+ % if the edge is an intra layer edge
+ \ifthenelse{\equal{\u@layer}{\v@layer}}{
+ \ifthenelse{\equal{\u@layer}{\edge@u@layer}}{
+ \ifthenelse{\equal{\v@layer}{\edge@v@layer}}{
+ \Edge[Network](\edge@u)(\edge@v)
+ }{}
+ }{}
+ }{
+ \ifthenelse{\equal{\u@layer}{\edge@u@layer}}{
+ \ifthenelse{\equal{\v@layer}{\edge@v@layer}}{
+ \Edge[Network](\edge@u)(\edge@v)
+ }{}
+ }{}
+ \ifthenelse{\equal{\v@layer}{\edge@u@layer}}{
+ \ifthenelse{\equal{\u@layer}{\edge@v@layer}}{
+ \Edge[Network](\edge@u)(\edge@v)
+ }{}
+ }{}
+
+ }
+
+ }
+ }
+\end{scope}
+% Delete data base
+% \DTLgdeletedb{#1}
+}
+
+
+%<--------------------------------------------------------------------------->
+% Init Layer
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {layer} {layer}{}
+\define@cmdkey [NW] {layer} {z}{}
+\define@cmdkey [NW] {layer} {opacity}{}
+\presetkeys [NW] {layer} {layer = {1},
+ opacity = {},
+ z = {},}{}
+
+%<--------------------------------------------------------------------------->
+% Layer
+%<--------------------------------------------------------------------------->
+%\def\@layer{canvas is yx plane at z=-3,}
+
+\def\@layer[#1]#2{
+\setkeys[NW]{layer}{#1}
+\ifthenelse{\not\equal{\cmdNW@layer@z}{}}{
+ \tikzset{LocalLayerZ/.style={canvas is yx plane at z=\cmdNW@layer@z}}
+}{
+ \tikzset{LocalLayerZ/.style={canvas is yx plane at z=(\cmdNW@layer@layer-1)*\NetworkLayerDistance}}
+}
+\ifthenelse{\not\equal{\cmdNW@layer@opacity}{}}{
+ \tikzset{LocalLayerOpacity/.style={fill opacity = \cmdNW@layer@opacity}}
+}{
+ \tikzset{LocalLayerOpacity/.style={}}
+}
+\begin{scope}[LocalLayerZ,LocalLayerOpacity]
+}
+%\newcommand*{\Layer}[1][]{\@layer[#1]}%
+\newenvironment{Layer}[1][]{\@layer[#1]1}{\end{scope}}
+%\def\@layer[#1]#2{}
+% \newcommand*{\Edges}[1][]{\@edges[#1]}%
+% \def\@edges[#1]#2{%
+% \setkeys[NW]{edges}{#1}%
+% \@@edges{#2}%
+% }
+% \def\@@edges#1{%
+
+
+
+%<--------------------------------------------------------------------------->
+% Init Plane
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {plane} {x}{}
+\define@cmdkey [NW] {plane} {y}{}
+\define@cmdkey [NW] {plane} {width}{}
+\define@cmdkey [NW] {plane} {height}{}
+\define@cmdkey [NW] {plane} {color}{}
+\define@cmdkey [NW] {plane} {opacity}{}
+\define@cmdkey [NW] {plane} {style}{}
+\define@cmdkey [NW] {plane} {layer}{}
+\define@cmdkey [NW] {plane} {grid}{}
+\define@cmdkey [NW] {plane} {image}{}
+\define@boolkey [NW] {plane} {RGB}[true]{}
+\define@boolkey [NW] {plane} {InBG}[true]{}
+\define@boolkey [NW] {plane} {NoFill}[true]{}
+\define@boolkey [NW] {plane} {NoBorder}[true]{}
+\define@boolkey [NW] {plane} {ImageAndFill}[true]{}
+\presetkeys [NW] {plane} {x = {0},
+ y = {0},
+ width = {\PlaneWidth},
+ height = {\PlaneHeight},
+ color = {},
+ opacity = {},
+ style = {},
+ layer = {1},
+ grid = {},
+ image = {},
+ RGB = false,
+ InBG = false,
+ NoFill = false,
+ NoBorder= false,
+ ImageAndFill= false,}{}
+
+
+%<--------------------------------------------------------------------------->
+% Plane
+%<--------------------------------------------------------------------------->
+\newcommand*{\Plane}[1][]{\@plane[#1]}%
+\def\@plane[#1]{%
+ \setkeys[NW]{plane}{#1}%
+ \ifNW@plane@ImageAndFill
+ \setkeys[NW]{plane}{#1}%
+ \else
+ \ifthenelse{\not\equal{\cmdNW@plane@image}{}}{
+ \setkeys[NW]{plane}{#1,NoFill}
+ }{}
+ \fi
+ \@@plane%
+}
+\def\@@plane{%
+ % Draw Plane on the Background layer
+ \ifNW@plane@InBG
+ \tikzset{InBGStyle/.style={on background layer}}
+ \else
+ \tikzset{InBGStyle/.style={}}
+ \fi
+ \begin{scope}[InBGStyle]
+ % Check if the color of the plane is redefined, if so the new style is
+ % used. If the option RGB is true, RGB values can be used to define the
+ % color of the plane entered in the form {R,G,B}. If RGB is not true the
+ % default colors of tikz can be used (e.g. blue!50!green)
+ \ifNW@plane@RGB
+ \ifthenelse{\not\equal{\cmdNW@plane@color}{}}{
+ \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@plane@color}
+ \tikzset{LocalPlaneFill/.style={fill = LocalColor}}
+ }{
+ \tikzset{LocalPlaneFill/.style={}}
+ }
+ \else
+ \ifthenelse{\not\equal{\cmdNW@plane@color}{}}{
+ \tikzset{LocalPlaneFill/.style={fill = \cmdNW@plane@color}}
+ }{
+ \tikzset{LocalPlaneFill/.style={}}
+ }
+ \fi
+ % Check if the opacity of the plane is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@plane@opacity}{}}{
+ \tikzset{LocalPlaneOpacity/.style={fill opacity = \cmdNW@plane@opacity}}
+ }{
+ \tikzset{LocalPlaneOpacity/.style={}}
+ }
+ \begin{scope}[canvas is yx plane at z=(\cmdNW@plane@layer-1)*\NetworkLayerDistance]
+ % Draw the fill of the Plane
+ \ifNW@plane@NoFill
+ \else
+ \protected@edef\@tempa{%
+ \noexpand\fill[PlaneFillStyle,LocalPlaneFill,LocalPlaneOpacity](\cmdNW@plane@x*\DistanceScale,\cmdNW@plane@y*\DistanceScale)
+ rectangle ++ (\cmdNW@plane@width*\DistanceScale,\cmdNW@plane@height*\DistanceScale)}%
+ \@tempa;
+ \fi
+ % Draw image on the Plane
+ \ifthenelse{\not\equal{\cmdNW@plane@image}{}}{
+ %\protected@edef\@tempa{%
+ %\noexpand
+ \node[inner sep=0pt,LocalPlaneOpacity] at
+ ($(\cmdNW@plane@width/2,\cmdNW@plane@height/2)+(\cmdNW@plane@x,\cmdNW@plane@y)$)
+ {\includegraphics[width=\cmdNW@plane@width\DefaultUnit,height=\cmdNW@plane@height\DefaultUnit]{\cmdNW@plane@image}};
+ %}%
+ %\@tempa;
+ }{}
+ % Draw grid on the Plane
+ \ifthenelse{\not\equal{\cmdNW@plane@grid}{}}{
+ \protected@edef\@tempa{%
+ \noexpand\draw[PlaneGridStyle,step=\cmdNW@plane@grid*\DistanceScale](\cmdNW@plane@x*\DistanceScale,\cmdNW@plane@y*\DistanceScale)
+ grid ++ (\cmdNW@plane@width*\DistanceScale,\cmdNW@plane@height*\DistanceScale)}%
+ \@tempa;
+ }{}
+ % Draw the border of the Plane
+ \ifNW@plane@NoBorder
+ \else
+ \protected@edef\@tempa{%
+ \noexpand\draw[PlaneBorderStyle,\cmdNW@plane@style](\cmdNW@plane@x*\DistanceScale,\cmdNW@plane@y*\DistanceScale)
+ rectangle ++ (\cmdNW@plane@width*\DistanceScale,\cmdNW@plane@height*\DistanceScale)}%
+ \@tempa;
+ \fi
+ \end{scope}
+\end{scope}
+}
+
+
+%<--------------------------------------------------------------------------->
+% Init Text
+%<--------------------------------------------------------------------------->
+\define@cmdkey [NW] {text} {x}{}
+\define@cmdkey [NW] {text} {y}{}
+\define@cmdkey [NW] {text} {layer}{}
+\define@cmdkey [NW] {text} {color}{}
+\define@cmdkey [NW] {text} {opacity}{}
+\define@cmdkey [NW] {text} {rotation}{}
+\define@cmdkey [NW] {text} {fontsize}{}
+\define@cmdkey [NW] {text} {anchor}{}
+\define@cmdkey [NW] {text} {position}{}
+\define@cmdkey [NW] {text} {distance}{}
+\define@cmdkey [NW] {text} {style}{}
+\define@cmdkey [NW] {text} {width}{}
+\define@boolkey [NW] {text} {RGB}[true]{}
+\presetkeys [NW] {text} {x = {0},
+ y = {0},
+ layer = {},
+ color = {},
+ opacity = {},
+ fontsize = {},
+ anchor = {},
+ position = {},
+ rotation = {},
+ distance = {0\DefaultUnit},
+ style = {},
+ width = {},
+ RGB = false,}{}
+
+
+%<--------------------------------------------------------------------------->
+% Text
+%<--------------------------------------------------------------------------->
+\newcommand*{\Text}[1][]{\@text[#1]}%
+\def\@text[#1]#2{%
+ \setkeys[NW]{text}{#1}%
+ \@@text{#2}%
+}
+\def\@@text#1{%
+ % Check if the color of the text is redefined, if so the new style is
+ % used. If the option RGB is true, RGB values can be used to define the
+ % color of the text entered in the form {R,G,B}. If RGB is not true the
+ % default colors of tikz can be used (e.g. blue!50!green)
+ \ifNW@text@RGB
+ \ifthenelse{\not\equal{\cmdNW@text@color}{}}{
+ \pgfutil@definecolor{LocalColor}{RGB}{\cmdNW@text@color}
+ \tikzset{LocalTextColor/.style={color = LocalColor}}
+ }{
+ \tikzset{LocalTextColor/.style={}}
+ }
+ \else
+ \ifthenelse{\not\equal{\cmdNW@text@color}{}}{
+ \tikzset{LocalTextColor/.style={color = \cmdNW@text@color}}
+ }{
+ \tikzset{LocalTextColor/.style={}}
+ }
+ \fi
+ % Check if the opacity of the text is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@text@opacity}{}}{
+ \tikzset{LocalTextOpacity/.style={text opacity = \cmdNW@text@opacity}}
+ }{
+ \tikzset{LocalTextOpacity/.style={}}
+ }
+ % Check if the rotation of the text is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@text@rotation}{}}{
+ \tikzset{LocalTextRotation/.style={rotate = \cmdNW@text@rotation}}
+ }{
+ \tikzset{LocalTextRotation/.style={}}
+ }
+ % Check if the font size of the text is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@text@fontsize}{}}{
+ \tikzset{LocalTextFontSize/.style={font = \cmdNW@text@fontsize}}
+ }{
+ \tikzset{LocalTextFontSize/.style={}}
+ }
+ % Check if the position of the text is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@text@position}{}}{
+ \tikzset{LocalTextPosition/.style={\cmdNW@text@position = \cmdNW@text@distance}}
+ }{
+ \tikzset{LocalTextPosition/.style={}}
+ }
+ % Check if the anchor of the text is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@text@anchor}{}}{
+ \tikzset{LocalTextAnchor/.style={anchor = \cmdNW@text@anchor}}
+ }{
+ \tikzset{LocalTextAnchor/.style={}}
+ }
+ % Check if the text width of the text is redefined, if so the new style is used
+ \ifthenelse{\not\equal{\cmdNW@text@width}{}}{
+ \tikzset{LocalTextWidth/.style={text width = \cmdNW@text@width}}
+ }{
+ \tikzset{LocalTextWidth/.style={}}
+ }
+ \ifthenelse{\equal{\cmdNW@text@layer}{}}{
+ \protected@edef\@tempa{%
+ \noexpand\node[TextStyle, LocalTextColor, LocalTextOpacity,
+ LocalTextFontSize, LocalTextRotation, LocalTextPosition,
+ LocalTextAnchor, LocalTextWidth, \cmdNW@text@style] at
+ (\cmdNW@text@x*\DistanceScale,\cmdNW@text@y*\DistanceScale){#1}
+ }\@tempa;%
+ }{
+ \begin{scope}[canvas is yx plane at z=(\cmdNW@text@layer-1)*\NetworkLayerDistance]
+ \protected@edef\@tempa{%
+ \noexpand\node[TextStyle, LocalTextColor, LocalTextOpacity,
+ LocalTextFontSize, LocalTextRotation, LocalTextPosition,
+ LocalTextAnchor, LocalTextWidth, \cmdNW@text@style] at
+ (\cmdNW@text@x*\DistanceScale,\cmdNW@text@y*\DistanceScale){#1}
+ }\@tempa;%
+ \end{scope}
+ }
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+\endinput
+%=============================================================================
+% eof
+%
+% Local Variables:
+% mode: latex
+% mode: flyspell
+% mode: auto-fill
+% fill-column: 80
+% TeX-master: t
+% End:
diff --git a/graphics/pgf/contrib/tikz-network/tikz-network.tex b/graphics/pgf/contrib/tikz-network/tikz-network.tex
new file mode 100644
index 0000000000..7d20f095f0
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-network/tikz-network.tex
@@ -0,0 +1,3955 @@
+% =============================================================================
+% File : tikz-network.tex -- The manual for the package tikz-network
+% Author : Juergen Hackl <hackl.j@gmx.at>
+% Creation : 2018-07-30
+% Time-stamp: <Thu 2019-08-15 11:22 juergen>
+%e
+% Copyright (c) 2019 Juergen Hackl <hackl.j@gmx.at>
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+% =============================================================================
+
+\documentclass[a4paper,twosided,notoc]{tufte-book}
+\usepackage{siunitx}
+\hypersetup{colorlinks}% uncomment this line if you prefer colored hyperlinks (e.g., for onscreen viewing)
+
+%%
+% Book metadata
+\title{tikz-network\\manual}
+\author[J\"urgen Hackl]{J\"urgen Hackl}
+\publisher{Version 1.1}
+
+%%
+% If they're installed, use Bergamo and Chantilly from www.fontsite.com.
+% They're clones of Bembo and Gill Sans, respectively.
+%\IfFileExists{bergamo.sty}{\usepackage[osf]{bergamo}}{}% Bembo
+%\IfFileExists{chantill.sty}{\usepackage{chantill}}{}% Gill Sans
+
+%\usepackage{microtype}
+
+\usepackage{framed}
+\definecolor{shadecolor}{HTML}{abd7e6}%{cmyk}{0.49,0.22,.15,0}
+\definecolor{hlcolor}{HTML}{057498}%{cmyk}{0.49,0.22,.15,0}
+\FrameSep0pt
+
+\usepackage{tikz}
+\usetikzlibrary{backgrounds}
+\tikzset{background rectangle/.style={fill=yellow!30}}
+
+
+%%
+% Just some sample text
+\usepackage{lipsum}
+
+%%
+% For nicely typeset tabular material
+\usepackage{booktabs}
+\usepackage{tabularx}
+
+%%
+% For graphics / images
+\usepackage{graphicx}
+\setkeys{Gin}{width=\linewidth,totalheight=\textheight,keepaspectratio}
+\graphicspath{{data/}}
+
+% The fancyvrb package lets us customize the formatting of verbatim
+% environments. We use a slightly smaller font.
+\usepackage{fancyvrb}
+\fvset{fontsize=\normalsize}
+
+%%
+% Prints argument within hanging parentheses (i.e., parentheses that take
+% up no horizontal space). Useful in tabular environments.
+\newcommand{\hangp}[1]{\makebox[0pt][r]{(}#1\makebox[0pt][l]{)}}
+
+%%
+% Prints an asterisk that takes up no horizontal space.
+% Useful in tabular environments.
+\newcommand{\hangstar}{\makebox[0pt][l]{*}}
+
+%%
+% Prints a trailing space in a smart way.
+\usepackage{xspace}
+
+%%
+% needed for its \numberwithin command
+\usepackage{amsmath}
+
+%%
+% Some shortcuts for Tufte's book titles. The lowercase commands will
+% produce the initials of the book title in italics. The all-caps commands
+% will print out the full title of the book in italics.
+\newcommand{\vdqi}{\textit{VDQI}\xspace}
+\newcommand{\ei}{\textit{EI}\xspace}
+\newcommand{\ve}{\textit{VE}\xspace}
+\newcommand{\be}{\textit{BE}\xspace}
+\newcommand{\VDQI}{\textit{The Visual Display of Quantitative Information}\xspace}
+\newcommand{\EI}{\textit{Envisioning Information}\xspace}
+\newcommand{\VE}{\textit{Visual Explanations}\xspace}
+\newcommand{\BE}{\textit{Beautiful Evidence}\xspace}
+
+\newcommand{\TL}{Tufte-\LaTeX\xspace}
+
+% Prints the month name (e.g., January) and the year (e.g., 2008)
+\newcommand{\monthyear}{%
+ \ifcase\month\or January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or
+ December\fi\space\number\year
+}
+
+
+% Prints an epigraph and speaker in sans serif, all-caps type.
+\newcommand{\openepigraph}[2]{%
+ %\sffamily\fontsize{14}{16}\selectfont
+ \begin{fullwidth}
+ \sffamily\large
+ \begin{doublespace}
+ \noindent\allcaps{#1}\\% epigraph
+ \noindent\allcaps{#2}% author
+ \end{doublespace}
+ \end{fullwidth}
+}
+
+% Inserts a blank page
+\newcommand{\blankpage}{\newpage\hbox{}\thispagestyle{empty}\newpage}
+
+\usepackage{units}
+
+% Typesets the font size, leading, and measure in the form of 10/12x26 pc.
+\newcommand{\measure}[3]{#1/#2$\times$\unit[#3]{pc}}
+
+% Macros for typesetting the documentation
+\newcommand{\hlred}[1]{\textcolor{hlcolor}{#1}}% prints in red
+\newcommand{\hangleft}[1]{\makebox[0pt][r]{#1}}
+\newcommand{\hairsp}{\hspace{1pt}}% hair space
+\newcommand{\hquad}{\hskip0.5em\relax}% half quad space
+\newcommand{\TODO}{\textcolor{red}{\bf TODO!}\xspace}
+\newcommand{\na}{\quad--}% used in tables for N/A cells
+\providecommand{\XeLaTeX}{X\lower.5ex\hbox{\kern-0.15em\reflectbox{E}}\kern-0.1em\LaTeX}
+\newcommand{\tXeLaTeX}{\XeLaTeX\index{XeLaTeX@\protect\XeLaTeX}}
+% \index{\texttt{\textbackslash xyz}@\hangleft{\texttt{\textbackslash}}\texttt{xyz}}
+\newcommand{\tuftebs}{\symbol{'134}}% a backslash in tt type in OT1/T1
+\newcommand{\doccmdnoindex}[2][]{\texttt{\tuftebs#2}}% command name -- adds backslash automatically (and doesn't add cmd to the index)
+\newcommand{\doccmddef}[2][]{%
+ \hlred{\texttt{\tuftebs#2}}\label{cmd:#2}%
+ \ifthenelse{\isempty{#1}}%
+ {% add the command to the index
+ \index{#2 command@\protect\hangleft{\texttt{\tuftebs}}\texttt{#2}}% command name
+ }%
+ {% add the command and package to the index
+ \index{#2 command@\protect\hangleft{\texttt{\tuftebs}}\texttt{#2} (\texttt{#1} package)}% command name
+ \index{#1 package@\texttt{#1} package}\index{packages!#1@\texttt{#1}}% package name
+ }%
+}% command name -- adds backslash automatically
+\newcommand{\doccmd}[2][]{%
+ \texttt{\tuftebs#2}%
+ \ifthenelse{\isempty{#1}}%
+ {% add the command to the index
+ \index{#2 command@\protect\hangleft{\texttt{\tuftebs}}\texttt{#2}}% command name
+ }%
+ {% add the command and package to the index
+ \index{#2 command@\protect\hangleft{\texttt{\tuftebs}}\texttt{#2} (\texttt{#1} package)}% command name
+ \index{#1 package@\texttt{#1} package}\index{packages!#1@\texttt{#1}}% package name
+ }%
+}% command name -- adds backslash automatically
+\newcommand{\docopt}[1]{\ensuremath{\langle}\textrm{\textit{#1}}\ensuremath{\rangle}}% optional command argument
+\newcommand{\docarg}[1]{\textrm{\textit{#1}}}% (required) command argument
+%%%\newenvironment{docspec}{\begin{shaded}\begin{quotation}\ttfamily\parskip0pt\parindent0pt\ignorespaces}{\end{quotation}\end{shaded}}% command specification environment
+\newenvironment{docspecdef}{\begin{quotation}\ttfamily\parskip0pt\parindent0pt\ignorespaces}{\end{quotation}}% command specification environment
+\newcommand{\docenv}[1]{\texttt{#1}\index{#1 environment@\texttt{#1} environment}\index{environments!#1@\texttt{#1}}}% environment name
+\newcommand{\docenvdef}[1]{\hlred{\texttt{#1}}\label{env:#1}\index{#1 environment@\texttt{#1} environment}\index{environments!#1@\texttt{#1}}}% environment name
+\newcommand{\docpkg}[1]{\texttt{#1}\index{#1 package@\texttt{#1} package}\index{packages!#1@\texttt{#1}}}% package name
+\newcommand{\doccls}[1]{\texttt{#1}}% document class name
+\newcommand{\docclsopt}[1]{\texttt{#1}\index{#1 class option@\texttt{#1} class option}\index{class options!#1@\texttt{#1}}}% document class option name
+\newcommand{\docclsoptdef}[1]{\hlred{\texttt{#1}}\label{clsopt:#1}\index{#1 class option@\texttt{#1} class option}\index{class options!#1@\texttt{#1}}}% document class option name defined
+\newcommand{\docmsg}[2]{\bigskip\begin{fullwidth}\noindent\ttfamily#1\end{fullwidth}\medskip\par\noindent#2}
+\newcommand{\docfilehook}[2]{\texttt{#1}\index{file hooks!#2}\index{#1@\texttt{#1}}}
+\newcommand{\doccounter}[1]{\texttt{#1}\index{#1 counter@\texttt{#1} counter}}
+
+%%
+% Example environment
+
+% Create counter
+\newcounter{doccount}
+
+\newenvironment{docspec}{%
+ \bigskip\noindent% create a vertical offset to previous material
+ \refstepcounter{doccount}% increment the environment's counter
+ \llap{\parbox{1.5cm}{\hfill\small\thedoccount}\hspace{2mm}}\vspace{-9mm}
+ \begin{shaded}
+ }
+ {\vspace{-5mm}\end{shaded}}% command specification environment
+\numberwithin{doccount}{chapter}
+
+% Numerate the sections
+\setcounter{secnumdepth}{2}
+
+\setcounter{tocdepth}{3}
+
+\newenvironment{docspeca}{\begin{shaded}}
+ {\vspace{-5mm}\end{shaded}}% command specification environment
+
+
+
+\usepackage{etoolbox}
+
+\makeatletter
+\patchcmd{\ttlh@hang}{\parindent\z@}{\parindent\z@\leavevmode}{}{}
+%\patchcmd{\ttlh@hang}{\noindent}{}{}{}
+\patchcmd{\ttlh@hang}{\noindent}{}{}{}
+\makeatother
+
+
+% chapter format
+\titleformat{\chapter}%
+ {\huge\rmfamily\itshape}% format applied to label+text
+ {\llap{\parbox{1.5cm}{\hfill\itshape\huge\thechapter}\hspace{2mm}}}% label
+ {0em}% horizontal separation between label and title body
+ {}% before the title body
+ []% after the title body
+
+% section format
+\titleformat{\section}%
+ {\normalfont\Large\itshape}% format applied to label+text
+ {\llap{\parbox{1.0cm}{\hfill\thesection}\hspace{2mm}}}% label
+ {0em}% horizontal separation between label and title body
+ {}% before the title body
+ []% after the title body
+
+% subsection format
+\titleformat{\subsection}%
+ {\normalfont\large\itshape}% format applied to label+text
+ {\llap{\parbox{1.5cm}{\hfill\thesubsection}\hspace{2mm}}}% label
+ {0em}% horizontal separation between label and title body
+ {}% before the title body
+ []% after the title body
+
+\newcommand{\pkg}{\doccls{tikz-network}\xspace}
+\newcommand{\tikzsym}{Ti\emph{k}Z }
+
+\usepackage{listings}
+\lstset{ %
+basicstyle=\small\linespread{.8}\ttfamily,
+commentstyle=\itshape\color{black!70},
+stepnumber=2,
+showspaces=false,
+showstringspaces=false,
+showtabs=false,
+tabsize=2,
+captionpos=b,
+breaklines=true,
+breakatwhitespace=false,
+title=\lstname,
+escapeinside={+*}{*+},
+morekeywords={*,...},
+stringstyle=\ttfamily,
+emphstyle={\color{red}\bfseries},
+}
+
+\usepackage{tikz-network}
+
+
+% Generates the index
+\usepackage{makeidx}
+\makeindex
+
+\renewcommand{\chaptermark}[1]{%
+\markboth{#1}{}}
+
+\fancyhead[LE]{\thepage\quad\smallcaps{\newlinetospace{\leftmark}}}
+
+\begin{document}
+
+
+%\maketitle
+
+\thispagestyle{empty}
+
+ \begin{fullwidth}%
+\sffamily%
+ \fontsize{18}{20}\selectfont\par\noindent\textcolor{darkgray}{\allcaps{\thanklessauthor}}%
+ \vspace{11.5pc}%
+ \fontsize{36}{40}\selectfont\par\noindent\textcolor{darkgray}{\allcaps{\thanklesstitle}}%
+\vspace{3cm}
+\begin{center}
+\includegraphics[width=14cm]{data/front.pdf}%
+\end{center}
+\vfill%
+ \fontsize{14}{16}\selectfont\par\noindent\allcaps{\thanklesspublisher}%
+ \end{fullwidth}%
+
+
+\newpage
+
+\begin{fullwidth}
+% \begin{tikzpicture}[remember picture, overlay]
+% \node[rectangle,inner sep=2pt,fill=red!30,draw=black,text width=12cm] at ($(current page.center)+(0,6)$) {%
+% The \pkg package is still under development. Hence, changes in the commands and functionality cannot be excluded.
+% };
+% \end{tikzpicture}
+
+~\vfill
+\thispagestyle{empty}
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{\baselineskip}
+
+
+\par\smallcaps{\pkg}
+\par\smallcaps{\thanklesspublisher}
+\par\smallcaps{\url{https://github.com/hackl/tikz-network}}
+
+\par\textit{Released, \monthyear}
+
+Copyright \copyright\ \the\year\ \thanklessauthor
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see \url{https://www.gnu.org/licenses/}.
+
+
+\end{fullwidth}
+
+\begin{fullwidth}
+\tableofcontents
+\end{fullwidth}
+
+\cleardoublepage
+\chapter{Introduction}
+
+In recent years, complex network theory becomes more and more popular within the scientific community. Besides a solid mathematical base on which these theories are built on, a visual representation of the networks allow communicating complex relationships to a broad audience.
+
+Nowadays, a variety of great visualization tools are available, which helps to structure, filter, manipulate and of course to visualize the networks. However, they come with some limitations, including the need for specific software tools, difficulties to embed the outputs properly in a \LaTeX~file (e.g. font type, font size, additional equations and math symbols needed, \dots) and challenges in the post-processing of the graphs, without rerunning the software tools again.
+
+In order to overcome this issues, the package \pkg was created. Some of the features are:
+
+\begin{itemize}
+\item \LaTeX~ is a standard for scientific publications and widely used
+\item beside \LaTeX~ no other software is needed
+\item no programming skills are needed
+\item simple to use but allows 100\% control over the output
+\item easy for post-processing (e.g. adding drawings, texts, equations,\dots)
+\item same fonts, font sizes, mathematical symbols, \dots as in the document
+\item no quality loss of the output due to the pdf format
+\item networks are easy to adapt or modify for lectures or small examples
+\item able to visualize larger networks
+\item three-dimensional visualization of (multilayer) networks
+\item compatible with other visualization tools
+\end{itemize}
+\newpage
+
+\section{How to read this manual?}
+
+The aim of this manual is to describe the use of the \pkg library for visualizing networks. To ensure an easy use of the elements and to keep the clarity, this manual is structured as follows:
+\begin{itemize}
+\item In Chapter \ref{chap:simple_networks} the elements to create simple networks (by hand) in a plane are explained. Thereby, the use of the commands \doccmd{Vertex} and \doccmd{Edge} are shown.
+\item How to create complex networks from external files\footnote{e.g. \doccls{igraph} or \doccls{networkx}} are explained in Chapter \ref{chap:complex_networks}. The main commands, therefore are \doccmd{Vertices} and \doccmd{Edges} which are using the same options as in the simple case.
+\item In Chapter \ref{chap:multilayer_networks}, the visualization of multilayer networks is explained. Additional visualization tools such as \doccmd{Plane} and \docenv{Layer} are introduced.
+\item The default settings used and how they can be modified is explained in Chapter \ref{chap:default_settings}.
+\item Information about troubleshooting and support is given in Chapter \ref{chap:troubleshooting}
+\item Since this is the alpha version (0.1) of the package, features which will be probably added and commands which have to be fixed are listed in Appendix \ref{chap:todo}.
+\end{itemize}
+
+\subsection{A few explanations}
+
+The images in this manual are created with the \pkg library or \tikzsym. The code used for this is
+specified for each image.
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}%[framed]
+ \filldraw (-.2,.2) circle (2pt) (.2,.2) circle (2pt);
+ \draw (0,0) circle (5mm) (-.3,-.1) .. controls (0,-.3) .. (.3,-.1);
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \filldraw (-.2,.2) circle (2pt) (.2,.2) circle (2pt);
+ \draw (0,0) circle (5mm) (-.3,-.1) .. controls (0,-.3) .. (.3,-.1);
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+Special additions which are needed for a better understanding are shown in orange but are not in the sample code available.
+
+\begin{marginfigure}[23mm]
+\centering
+ \begin{tikzpicture}%[framed]
+ \filldraw [orange] (0,0) circle (2pt)
+ (1,1) circle (2pt)
+ (2,1) circle (2pt)
+ (2,0) circle (2pt);
+ \draw (0,0) .. controls (1,1) and (2,1) .. (2,0);
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \draw (0,0) .. controls (1,1) and (2,1) .. (2,0);
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\subsection{Inputs}
+\label{sec:inputs}
+
+The commands in the \pkg library (e.g. \doccmd{Vertex}, \doccmd{Edge}) always start with capital letters and DO NOT need a semicolon <<;>> at the end. Boolean arguments start also with capital letters (e.g. \docopt{NoLabel}). Arguments which need an user input, use are written in small letters (e.g. \docopt{color}).
+
+Basically, one can distinguish between the mandatory argument $\{~\}$ and the optional argument $[~]$. The first values must be entered compulsory. By contrast, nothing has to be entered for the optional input. Additional features (e.g. \docopt{size})) can be activated when entering optional parameters.
+
+When entering size values the base unit is always predefined in $[cm]$\footnote{The default unit can be changed with \doccmd{SetDefaultUnit}; see Section~\ref{sec:gerneral_settings}}, except for line widths which are dedined in $[pt]$. Percentage values $\%$ are always specified as decimal values; for example, $100\% = 1.0 $ and $ 10 \% $ corresponds to $ 0.1 $.
+
+
+\subsection{Additional help}
+
+Is the manual not enough, occur some ambiguities or some \tikzsym commands are unclear, please have a look in the ``\tikzsym and PGF Manual'' from Till Tantau\footnote{\url{http://mirror.switch.ch/ftp/mirror/tex/graphics/pgf/base/doc/pgfmanual.pdf}}.
+
+Should you have any further questions, please do not hesitate to contact me.
+
+\section{Installation}
+\label{sec:Installation}
+
+Actually, we can hardly speak of an installation since only the necessary package \pkg must be loaded in the preamble of your document.
+
+The current release of the package is available via CTAN\footnote{\url{https://ctan.org/pkg/tikz-network}}. A release candidate for the next version of \pkg is available on github\footnote{\url{https://github.com/hackl/}}
+
+Is the package installed or the style file is stored in the folder of the main file, so the library can be imported, as the following example shows:
+
+\begin{docspec}
+\begin{lstlisting}
+ % ------------
+ % header
+ \documentclass{scrreprt}
+
+ % ------------
+ % packages
+ \usepackage{tikz-network}
+\end{lstlisting}
+\end{docspec}
+
+\section{Additional necessary packages}
+
+To use all commands and options of \tikzsym, possibly some packages need to be reloaded. These missing files (or their names) appear in the error log when you convert the file. However, for the package described in this manual, it is sufficient to use the library and the \tikzsym standard commands.
+
+\chapter{Simple Networks}
+\label{chap:simple_networks}
+
+\section{Vertex}
+\label{sec:vertex}
+On essential command is \doccmddef{Vertex}, which allow placing vertices in the document and modify their appearance.
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{local options}]\{\docarg{Name}\}
+\end{docspecdef}
+In order to be able to place a vertex, a non-empty \docarg{Name} argument is required. This argument defines the vertex's reference name, which must be unique. Mathematical symbols are not allowed as name as well as no blank spaces. The \docarg{Name} should not be confused with the \docopt{label}, that is used for display; for example one may want to display $A_1$ while the name will be \docarg{A1}.
+
+For a \doccmd{Vertex} the following options are available:
+
+\begin{table}[h]\index{Vertex!options}
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{lccl}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+ x & 0 & measure& x-coordinate \\
+ y & 0 & measure& y-coordinate \\
+ size & \{\} & measure& diameter of the circle\\
+ color & \{\} & color & fill color of vertex\\
+ opacity & \{\} & number & opacity of the fill color \\
+ shape & \{\} & string & shape of the vertex\\
+ label & \{\} & string & label \\
+ fontsize & \{\} & string & font size of the label\\
+ fontcolor & \{\} & color & font color of the label\\
+ fontscale & \{\} & number & scale of the label\\
+ position & center& value$^a$ & label position\\
+ distance & 0 & measure & label distance from the center \\
+ style & \{\} & string & additional \tikzsym styles \\
+ layer & \{\} & number & assigned layer of the vertex \\
+ \midrule
+ NoLabel & false & Boolean & delete the label \\
+ IdAsLabel & false & Boolean & uses the \docarg{Name} as label \\
+ Math & false & Boolean & displays the label in math mode \\
+ RGB & false & Boolean & allow RGB colors \\
+ Pseudo & false & Boolean & create a pseudo vertex\\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \\$^a$ either measure or string
+ \end{center}
+ \caption{Local options for the \doccmd{Vertex} command.}
+ \label{tab:vertex_options}
+\end{table}
+
+The order how the options are entered does not matter. Changes to the default Vertex layout can be made with \doccmd{SetVertexStyle}\footnote{see Section \ref{sec:vertex_style}}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{x}=\docarg{measure},\docopt{y}=\docarg{measure}]\{\docarg{Name}\}
+\end{docspecdef}
+
+The location of the vertices are determined by Cartesian coordinates in \docopt{x} and \docopt{y}. The coordinates are optional. If no coordinates are determined the vertex will be placed at the origin ($0,0$). The entered \docarg{measures} are in default units (\si{cm}). Changing the unites (locally) can be done by adding the unit to the \docarg{measure}\footnote{e.g. x=\SI{1}{in}}. Changes to the default setting can be made with \doccmd{SetDefaultUnit}\footnote{see Section \ref{sec:gerneral_settings}}.
+
+%\newpage
+\begin{marginfigure}[6mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Vertex[x=1,y=1]{B}
+ \Vertex[x=2]{C}
+ \node at (0,0)[font=\footnotesize,orange]{\textbf{A}};
+ \node at (1,1)[font=\footnotesize,orange]{\textbf{B}};
+ \node at (2,0)[font=\footnotesize,orange]{\textbf{C}};
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Vertex[x=1,y=1]{B}
+ \Vertex[x=2]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{size}=\docarg{measure}]\{\docarg{Name}\}
+\end{docspecdef}
+
+The diameter of the vertex can be changed with the option \docopt{size}. Per default a vertex has \SI{0.6}{cm} in diameter. Also, here the default units are \si{cm} and have not to be added to the \docarg{measure}.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[size=.3]{A}
+ \Vertex[x=1,size=.7]{B}
+ \Vertex[x=2.3,size=1]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[size=.3]{A}
+ \Vertex[x=1,size=.7]{B}
+ \Vertex[x=2.3,size=1]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{color}=\docarg{color}]\{\docarg{Name}\}
+\end{docspecdef}
+
+To change the fill color of each vertex individually, the option \docopt{color} has to be used. Without the option \docopt{RGB} set, the default \tikzsym and \LaTeX~ colors can be applied.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[color = blue]{A}
+ \Vertex[x=1,color=red]{B}
+ \Vertex[x=2,color=green!70!blue]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[color = blue]{A}
+ \Vertex[x=1,color=red]{B}
+ \Vertex[x=2,color=green!70!blue]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{opacity}=\docarg{number}]\{\docarg{Name}\}
+\end{docspecdef}
+
+With the option \docopt{opacity} the opacity of the vertex fill color can be modified. The range of the \docarg{number} lies between $0$ and $1$. Where $0$ represents a fully transparent fill and $1$ a solid fill.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \draw[thick,orange,dashed] (-.5,0) -- (2.5,0);
+ \Vertex[opacity = 1]{A}
+ \Vertex[x=1,opacity =.7]{B}
+ \Vertex[x=2,opacity =.2]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[opacity = 1]{A}
+ \Vertex[x=1,opacity =.7]{B}
+ \Vertex[x=2,opacity =.2]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{shape}=\docarg{string}]\{\docarg{Name}\}
+\end{docspecdef}
+
+With the option \docopt{shape} the shape of the vertex can be modified. Thereby the shapes implemented in \tikzsym can be used, including: \docarg{circle}, \docarg{rectangle}, \docarg{diamond}, \docarg{trapezium}, \docarg{semicircle}, \docarg{isosceles triangle}, \dots.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[shape = rectangle]{A}
+ \Vertex[x=1,shape = diamond]{B}
+ \Vertex[x=2,shape = isosceles triangle]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[shape = rectangle]{A}
+ \Vertex[x=1,shape = diamond]{B}
+ \Vertex[x=2,shape = isosceles triangle]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{label}=\docarg{string}]\{\docarg{Name}\}
+\end{docspecdef}
+
+In \pkg there are several ways to define the labels of the vertices and edges. The common way is via the option \docopt{label}. Here, any \docarg{string} argument can be used, including blank spaces. The environment \$ \$ can be used to display mathematical expressions.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[label=foo]{A}
+ \Vertex[x=1,label=bar]{B}
+ \Vertex[x=2,label=$u_1$]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[label=foo]{A}
+ \Vertex[x=1,label=bar]{B}
+ \Vertex[x=2,label=$u_1$]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{label}=\docarg{string},\docopt{fontsize}=\docarg{string}]\{\docarg{Name}\}
+\end{docspecdef}
+
+The font size of the \docopt{label} can be modified with the option \docopt{fontsize}. Here common \LaTeX~ font size commands\footnote{e.g. \doccmd{tiny}, \doccmd{scriptsize}, \doccmd{footnotesize}, \doccmd{small}, \dots.} can be used to change the size of the label.
+
+\begin{marginfigure}[10mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[label=foo,fontsize=\normalsize]{A}
+ \Vertex[x=1,label=bar,fontsize=\tiny]{B}
+ \Vertex[x=2,label=$u_1$,fontsize=\large]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[label=foo,fontsize=\normalsize]{A}
+ \Vertex[x=1,label=bar,fontsize=\tiny]{B}
+ \Vertex[x=2,label=$u_1$,fontsize=\large]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{label}=\docarg{string},\docopt{fontcolor}=\docarg{color}]\{\docarg{Name}\}
+\end{docspecdef}
+
+The color of the \docopt{label} can be changed with the option \docopt{fontcolor}. Currently, only the default \tikzsym and \LaTeX~ colors are supported\footnote{\TODO Add RGB option!}.
+
+\begin{marginfigure}[8mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[label=foo,fontcolor=blue]{A}
+ \Vertex[x=1,label=bar,fontcolor=magenta]{B}
+ \Vertex[x=2,label=$u_1$,fontcolor=red]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[label=foo,fontcolor=blue]{A}
+ \Vertex[x=1,label=bar,fontcolor=magenta]{B}
+ \Vertex[x=2,label=$u_1$,fontcolor=red]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{label}=\docarg{string},\docopt{fontscale}=\docarg{number}]\{\docarg{Name}\}
+\end{docspecdef}
+
+Contrary to the option \docopt{fontsize}, the option \docopt{fontscale} does not change the font size itself but scales the curent font size up or down. The \docarg{number} defines the scale, where numbers between $0$ and $1$ down scale the font and numbers greater then $1$ up scale the label. For example $0.5$ reduces the size of the font to $50\%$ of its originial size, while $1.2$ scales the font to $120\%$.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[label=foo,fontscale=0.5]{A}
+ \Vertex[x=1,label=bar,fontscale=1]{B}
+ \Vertex[x=2,label=$u_1$,fontscale=2]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[label=foo,fontscale=0.5]{A}
+ \Vertex[x=1,label=bar,fontscale=1]{B}
+ \Vertex[x=2,label=$u_1$,fontscale=2]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{label}=\docarg{string},\docopt{position}=\docarg{value},\docopt{distance}=\docarg{number}]\{\docarg{Name}\}
+\end{docspecdef}
+
+Per default the \docopt{position} of the \docopt{label} is in the \docarg{center} of the vertex. Classical \tikzsym commands\footnote{e.g. \docarg{above}, \docarg{below}, \docarg{left}, \docarg{right}, \docarg{above left}, \docarg{above right},\dots} can be used to change the \docopt{position} of the \docopt{label}. Instead, using such command, the position can be determined via an angle, by entering a \docarg{number} between $-360$ and $360$. The origin ($0^\circ$) is the $y$ axis. A positive \docarg{number} change the \docopt{position} counter clockwise, while a negative \docarg{number} make changes clockwise.
+
+With the option, \docopt{distance} the distance between the vertex and the label can be changed.
+
+\begin{marginfigure}[31mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[label=A,position=below]{A}
+ \Vertex[x=1,label=B,position=below,distance=2mm]{B}
+ \Vertex[x=2,label=C,position=30,distance=1mm]{C}
+ \draw[orange,dashed](2,0) --++ (7mm,0mm)(2,0)--++(30:7mm);
+ \draw[orange,->] (2.5,0) arc (0:30:5mm);
+ \node[orange] (x) at (2.6,-.2) {$30^\circ$};
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[label=A,position=below]{A}
+ \Vertex[x=1,label=B,position=below,distance=2mm]{B}
+ \Vertex[x=2,label=C,position=30,distance=1mm]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{style}=\{\docarg{string}\}]\{\docarg{Name}\}
+\end{docspecdef}
+
+Any other \tikzsym style option or command can be entered via the option \docopt{style}. Most of these commands can be found in the ``\tikzsym and PGF Manual''. Contain the commands additional options (e.g.\docopt{shading}=\docarg{ball}), then the argument for the \docopt{style} has to be between $\{~\}$ brackets.
+
+\begin{marginfigure}[32mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[style={color=green}]{A}
+ \Vertex[x=1,style=dashed]{B}
+ \Vertex[x=2,style={shading=ball}]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[style={color=green}]{A}
+ \Vertex[x=1,style=dashed]{B}
+ \Vertex[x=2,style={shading=ball}]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{IdAsLabel}]\{\docarg{Name}\}
+\end{docspecdef}
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{NoLabel},\docopt{label}=\docarg{string}]\{\docarg{Name}\}
+\end{docspecdef}
+
+\docopt{IdAsLabel} is a Boolean option which assigns the \docarg{Name} of the vertex as label. On the contrary, \docopt{NoLabel} suppress all labels.
+
+\begin{marginfigure}[32mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[IdAsLabel]{A}
+ \Vertex[x=1,label=B,NoLabel]{B}
+ \Vertex[x=2,IdAsLabel,NoLabel]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[IdAsLabel]{A}
+ \Vertex[x=1,label=B,NoLabel]{B}
+ \Vertex[x=2,IdAsLabel,NoLabel]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{Math},\docopt{label}=\docarg{string}]\{\docarg{Name}\}
+\end{docspecdef}
+
+The option \docopt{Math} allows transforming labels into mathematical expressions without using the \$~\$ environment. In combination with \docopt{IdAsLabel} allows this option also mathematical expressions by the definition of the vertex \docarg{Name}.
+
+%\newpage
+\begin{marginfigure}[32mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[IdAsLabel]{A1}
+ \Vertex[x=1,label=B_1,Math]{B}
+ \Vertex[x=2,Math,IdAsLabel]{C_1}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[IdAsLabel]{A1}
+ \Vertex[x=1,label=B_1,Math]{B}
+ \Vertex[x=2,Math,IdAsLabel]{C_1}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{RGB},\docopt{color}=\docarg{RGB values}]\{\docarg{Name}\}
+\end{docspecdef}
+
+In order to display RGB colors for the vertex fill color, the option \docopt{RGB} has to be entered. In combination with this option, the \docopt{color} hast to be a list with the \docarg{RGB
+values}, separated by <<,>> and within $\{~\}$.\footnote{e.g. the RGB code for white: $\{255,255,255\}$}
+
+\begin{marginfigure}[4mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex[RGB,color={127,201,127}]{A}
+ \Vertex[x=1,RGB,color={190,174,212}]{B}
+ \Vertex[x=2,RGB,color={253,192,134}]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex[RGB,color={127,201,127}]{A}
+ \Vertex[x=1,RGB,color={190,174,212}]{B}
+ \Vertex[x=2,RGB,color={253,192,134}]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{Pseudo}]\{\docarg{Name}\}
+\end{docspecdef}
+
+The option \docopt{Pseudo} creates a pseudo vertex, where only the vertex name and the vertex coordinate will be drawn. Edges etc, can still be assigned to this vertex.
+
+\begin{marginfigure}[32mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Vertex[x=2,Pseudo]{B}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Vertex[x=2,Pseudo]{B}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{layer}=\docarg{number}]\{\docarg{Name}\}
+\end{docspecdef}
+
+With the option \docopt{layer} the vertex can be assigned to a specific layer. More about this option and the use of layers is explained in Chapter~\ref{chap:multilayer_networks}.
+
+\newpage
+
+\section{Edge}
+\label{sec:edge}
+
+The second essential command is an \doccmddef{Edge}, which allow connecting two vertices.
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{local options}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+Edges can be generated between one or two vertices. In the first case, a self-loop will be generated. As mandatory arguments the \docarg{Names} of the vertices which should be connected must be entered between $(~)$ brackets. In case of a directed edge, the order is important. An edge is created from \docarg{Vertex i} (origin) to \docarg{Vertex j} (destination).
+
+For an \doccmd{Edge} the following options are available:
+
+\begin{table}[h]\index{Edge!options}
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{lccl}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+ lw & \{\} & measure & line width of the edge \\
+ color & \{\} & color & edge color\\
+ opacity & \{\} & number & opacity of the edge \\
+ bend & 0 & number & angle out/in of the vertex \\
+ label & \{\} & string & label \\
+ fontsize & \{\} & string & font size of the label\\
+ fontcolor & \{\} & color & font color of the label\\
+ fontscale & \{\} & number & scale of the label\\
+ position & \{\} & string & label position\\
+ distance & 0.5 & number & label distance from vertex i\\
+ style & \{\} & string & additional \tikzsym styles \\
+ \midrule
+ path & \{\} & list & path over several vertices\\
+ \midrule
+ loopsize & 1cm & measure & size parameter of the self-loop\\
+ loopposition& 0 & number & orientation of the self-loop \\
+ loopshape & 90 & number & loop angle out/in of the vertex \\
+ \midrule
+ Direct & false & Boolean & allow directed edges \\
+ Math & false & Boolean & displays the label in math mode \\
+ RGB & false & Boolean & allow RGB colors \\
+ NotInBG & false & Boolean & edge is not in the background layer\\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \end{center}
+ \caption{Local options for the \doccmd{Edge} command.}
+ \label{tab:edge_options}
+\end{table}
+
+The options \docopt{loopsize}, \docopt{loopposition}, and \docopt{loopsize} are only for self-loops available.
+
+\begin{docspecdef}
+ \doccmd{Edge}(\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+An edge is created between \docarg{Vertex i} and \docarg{Vertex j}.
+
+\begin{marginfigure}[28mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge(A)(B)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge(A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{lw}=\docarg{measure}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+The line width of an edge can be modified with the option \docopt{lw}. Here, the unit of the \docarg{measure} has to be specified. The default value is \SI{1.5}{pt}.
+
+\newpage
+\begin{marginfigure}[6mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[lw=3pt](A)(B)
+ \Edge[lw=5pt](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[lw=3pt](A)(B)
+ \Edge[lw=5pt](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+%\newpage
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{color}=\docarg{color}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+To change the line color of each edge individually, the option \docopt{color} has to be used. Without the option \docopt{RGB} set, the default \tikzsym and \LaTeX~ colors can be applied.
+
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[color=red](A)(B)
+ \Edge[color=green!70!blue](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[color=red](A)(B)
+ \Edge[color=green!70!blue](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{opacity}=\docarg{number}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+With the option \docopt{opacity} the opacity of the edge line can be modified. The range of the \docarg{number} lies between $0$ and $1$. Where $0$ represents a fully transparent fill and $1$ a solid fill.
+
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \fill [orange] (.9,.2) rectangle (1.1,-.7);
+ \EdgesNotInBG
+ \Edge[opacity=.7](A)(B)
+ \Edge[opacity=.2](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[opacity=.7](A)(B)
+ \Edge[opacity=.2](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{bend}=\docarg{number}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+The shape of the edge can be modified with the \docopt{bend} option. If nothing is specified a straight edge, between the vertices, is drawn. The \docarg{number} defines the angle in which the edge is diverging from its straight connection. A positive \docarg{number} bend the edge counter clockwise, while a negative \docarg{number} make changes clockwise.
+
+\begin{marginfigure}[32mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Vertex[x=2]{B}
+ \Edge[bend=45](A)(B)
+ \Edge[bend=-70](A)(B)
+ \draw[orange,dashed](0,0) -- (20mm,0mm)(0,0)--(45:10mm);
+ \draw[orange,->] (.5,0) arc (0:45:5mm);
+ \draw[orange,dashed](0,0)--(-70:10mm);
+ \draw[orange,->] (.5,0) arc (0:-70:5mm);
+ \node[orange] (x) at (1,.25) {$45^\circ$};
+ \node[orange] (x) at (1,-.35) {$70^\circ$};
+ \draw[orange,dashed] (2,0)--++(135:10mm);
+ \draw[orange,->] (1.5,0) arc (180:135:5mm);
+ \draw[orange,dashed] (2,0)--++(-110:10mm);
+ \draw[orange,->] (1.5,0) arc (-180:-110:5mm);
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[bend=45](A)(B)
+ \Edge[bend=-70](A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{label}=\docarg{string}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+An edge is labeled with the option \docopt{label}. For the label any \docarg{string} argument can be used, including blank spaces. The environment \$ \$ can be used to display mathematical expressions.
+
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[label=X](A)(B)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[label=X](A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{label}=\docarg{string},\docopt{fontsize}=\docarg{string}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+The font size of the \docopt{label} can be modified with the option \docopt{fontsize}. Here common \LaTeX~ font size commands\footnote{e.g. \doccmd{tiny}, \doccmd{scriptsize}, \doccmd{footnotesize}, \doccmd{small}, \dots.} can be used to change the size of the label.
+
+\begin{marginfigure}[25mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,fontsize=\large](A)(B)
+ \Edge[label=Y,fontsize=\tiny](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,fontsize=\large](A)(B)
+ \Edge[label=Y,fontsize=\tiny](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{label}=\docarg{string},\docopt{fontcolor}=\docarg{color}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+The color of the \docopt{label} can be changed with the option \docopt{fontcolor}. Currently, only the default \tikzsym and \LaTeX~ colors are supported \footnote{\TODO Add RGB option!}.
+
+\begin{marginfigure}[1mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,fontcolor=blue](A)(B)
+ \Edge[label=Y,fontcolor=red](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,fontcolor=blue](A)(B)
+ \Edge[label=Y,fontcolor=red](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{label}=\docarg{string},\docopt{fontscale}=\docarg{color}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+Contrary to the option \docopt{fontsize}, the option \docopt{fontscale} does not change the font size itself but scales the curent font size up or down. The \docarg{number} defines the scale, where numbers between $0$ and $1$ down scale the font and numbers greater then $1$ up scale the label. For example $0.5$ reduces the size of the font to $50\%$ of its originial size, while $1.2$ scales the font to $120\%$.
+
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,fontscale=.5](A)(B)
+ \Edge[label=Y,fontscale=1.2](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,fontscale=.5](A)(B)
+ \Edge[label=Y,fontscale=2](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{label}=\docarg{string},\docopt{position}=\docarg{string}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+Per default the \docopt{label} is positioned in between both vertices in the center of the line. Classical \tikzsym commands\footnote{e.g. \docarg{above}, \docarg{below}, \docarg{left}, \docarg{right}, \docarg{above left}, \docarg{above right},\dots} can be used to change the \docopt{position} of the \docopt{label}.
+%\newpage
+
+\begin{marginfigure}[6mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,position=above](A)(B)
+ \Edge[label=Y,position={below left=2mm}](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[label=X,position=above](A)(B)
+ \Edge[label=Y,position={below left=2mm}](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{label}=\docarg{string},\docopt{distance}=\docarg{number}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+The label position between the vertices can be modified with the \docopt{distance} option. Per default the \docopt{label} is centered between both vertices. The position is expressed as the percentage of the length between the vertices, e.g. of \docopt{distance}=$0.7$, the label is placed at 70\% of the edge length away of \docarg{Vertex i}.
+
+\newpage
+\begin{marginfigure}[6mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[label=X,distance=.7](A)(B)
+ \draw[orange,|->|] (.3,-.5) --++ (0.98,0) node[pos=.5,above]{$0.7$};
+ \draw[orange,|<->|] (.3,.5) --++ (1.4,0) node[pos=.5,below]{$1.0$};
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[label=X,distance=.7](A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{style}=\docarg{string}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+Any other \tikzsym style option or command can be entered via the option \docopt{style}. Most of these commands can be found in the ``\tikzsym and PGF Manual''. Contain the commands additional options (e.g.\docopt{shading}=\docarg{ball}), then the argument for the \docopt{style} has to be between $\{~\}$ brackets.
+
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[style={dashed}](A)(B)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[style={dashed}](A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{path}=\docarg{list}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+In order to draw a finite sequence of edges which connect a sequence of vertices and/or coordinates, the option \docopt{path} can be used\footnote{\TODO currently labels and bend edges are not supported!}. The argument for this option has to be a list element indicated by $\{~\}$ brackets, containing the \docarg{Names} of the intermediated vertices. New coordinates, i.e. there is no vertex located, can be insert with $\{\docopt{x},\docopt{y}\}$. Arguments of the list, have to be seperated by commas <<,>>.
+
+
+\begin{marginfigure}[18mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[path={A,{0,-1},C,B}](A)(B)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[path={A,{0,-1},C,B}](A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+%\newpage
+
+\begin{docspecdef}
+ \doccmd{Edge}(\docarg{Vertex i})(\docarg{Vertex i})
+\end{docspecdef}
+
+Self-loops are created by using the same vertex as origin and destination. Beside the options explained above, there are three self-loop specific options: \docopt{loopsize}, \docopt{loopposition}, and \docopt{loopshape}.
+
+\begin{marginfigure}[28mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Edge(A)(A)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Edge(A)(A)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{loopsize}=\docarg{measure}](\docarg{Vertex i})(\docarg{Vertex i})
+\end{docspecdef}
+
+With the option \docopt{loopsize} the length of the edge can be modified. The \docarg{measure} value has to be insert together with its units. Per default the \docopt{loopsize} is \SI{1}{cm}.
+
+\newpage
+\begin{marginfigure}[2mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=1.3]{B}
+ \Edge[loopsize=.5cm](A)(A)
+ \Edge[loopsize=1.5cm](B)(B)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=1.3]{B}
+ \Edge[loopsize=.5cm](A)(A)
+ \Edge[loopsize=1.5cm](B)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{loopposition}=\docarg{number}](\docarg{Vertex i})(\docarg{Vertex i})
+\end{docspecdef}
+
+The position of the self-loop is defined via the rotation angle around the vertex. The origin ($0^\circ$) is the $y$ axis. A positive \docarg{number} change the \docopt{loopposition} counter clockwise, while a negative \docarg{number} make changes clockwise.
+
+\begin{marginfigure}[28mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Vertex[x=1.5]{B}
+ \Edge[loopposition=45](A)(A)
+ \Edge[loopposition=-70](B)(B)
+ \draw[orange,dashed](0,0) -- (10mm,0mm)(0,0)--(45:10mm);
+ \draw[orange,->] (.5,0) arc (0:45:5mm);
+ \node[orange] (x) at (1,.35) {$45^\circ$};
+ \draw[orange,dashed](1.5,0)--++(-70:10mm);
+ \draw[orange,dashed](1.5,0)--++(10mm,0);
+ \draw[orange,->] (1.9,0) arc (0:-70:5mm);
+ \node[orange] (x) at (2.3,-.45) {$70^\circ$};
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=1.5]{B}
+ \Edge[loopposition=45](A)(A)
+ \Edge[loopposition=-70](B)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{loopshape}=\docarg{number}](\docarg{Vertex i})(\docarg{Vertex i})
+\end{docspecdef}
+
+The shape of the self-loop is defined by the enclosing angle. The shape can be changed by decreasing or increasing the argument value of the \docopt{loopshape} option.
+
+\begin{marginfigure}[28mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Edge[loopshape=45](A)(A)
+ \draw[orange,dashed](0,0) -- (-22.5:13mm)(0,0)--(22.5:13mm);
+ \draw[orange,->] (1.2,0) arc (0:22.5:12mm);
+ \draw[orange,->] (1.2,0) arc (0:-22.5:12mm);
+ \node[orange] (x) at (1.5,0) {$45^\circ$};
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A}
+ \Edge[loopshape=45](A)(A)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+%\newpage
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{Direct}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+Directed edges are created by enabling the option \docopt{Direct}. The arrow is drawn from \docarg{Vertex i} to \docarg{Vertex j}.
+
+\begin{marginfigure}[28mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[Direct](A)(B)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[Direct](A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Edge}[Math, label=\docopt{string}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+The option \docopt{Math} allows transforming labels into mathematical expressions without using the \$~\$ environment.
+
+\begin{marginfigure}[28mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[Math,label=X_1](A)(B)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B}
+ \Edge[Math,label=X_1](A)(B)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[RBG, color=\docopt{RGB value}](\docarg{Vertex i})(\docarg{Vertex j})
+\end{docspecdef}
+
+In order to display RGB colors for the line color of the edge, the option \docopt{RGB} has to be entered. In combination with this option, the \docopt{color} hast to be a list with the \docarg{RGB
+values}, separated by <<,>> and within $\{~\}$.\footnote{e.g. the RGB code for white: $\{255,255,255\}$}
+
+\newpage
+
+\begin{marginfigure}[10mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[RGB,color={127,201,127}](A)(B)
+ \Edge[RGB,color={253,192,134}](A)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=2,y=-1]{C}
+ \Edge[RGB,color={127,201,127}](A)(B)
+ \Edge[RGB,color={253,192,134}](A)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edge}[\docopt{NotInBG}]\{\docarg{filename}\}
+\end{docspecdef}
+
+Per default, the edge is drawn on the background layer of the \docarg{tikzpicture}. I.e. objects which are created after the edges appear also on top of them. To turn this off, the option \docopt{NotInBG} has to be enabled. Changes to the default setting can be made with \doccmd{EdgesNotInBG} or \doccmd{EdgesInBG}\footnote{See Section \ref{sec:edge_style}}.
+
+\begin{marginfigure}[6mm]
+\centering
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=1,y=-.5]{C}
+ \Vertex[y=-1]{D} \Vertex[x=2,y=-1]{E}
+ \Edge[bend=-30](A)(B)
+ \Edge[bend=30,NotInBG](D)(E)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertex{A} \Vertex[x=2]{B} \Vertex[x=1,y=-.5]{C}
+ \Vertex[y=-1]{D} \Vertex[x=2,y=-1]{E}
+ \Edge[bend=-30](A)(B)
+ \Edge[bend=30,NotInBG](D)(E)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\newpage
+\section{Text}
+\label{sec:text}
+
+While \tikzsym offers multiple ways to label objects and create text elements, a simplified command \doccmddef{Text} is implemented, which allow placing and modifying text to the networks.
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{local options}]\{\docarg{string}\}
+\end{docspecdef}
+In order to be able to create a text, a non-empty \docarg{string} argument is required. This argument is the actual text added to the figure. Mathematical symbols are entered in the same way as in a normal \LaTeX~document, i.e. between \$~\$.
+
+For a \doccmd{Text} the following options are available:
+
+\begin{table}[h]\index{Text!options}
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{lccl}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+ x & 0 & measure & x-coordinate \\
+ y & 0 & measure & y-coordinate \\
+ fontsize & \{\} & fontsize & font size of the text\\
+ color & \{\} & color & color of the text\\
+ opacity & \{\} & number & opacity of the text \\
+ position & center& string & position of the text to the origin\\
+ distance & \SI{0}{cm} & measure & distance from the origin \\
+ rotation & 0 & number & rotation of the text \\
+ anchor & \{\} & string & anchor of the text \\
+ width & \{\} & number & width of the text box \\
+ style & \{\} & string & additional \tikzsym styles \\
+ layer & \{\} & number & assigned layer of the text \\
+ \midrule
+ RGB & false & Boolean & allow RGB colors \\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \end{center}
+ \caption{Local options for the \doccmd{Text} command.}
+ \label{tab:text_options}
+\end{table}
+
+The order how the options are entered does not matter. Changes to the default Text layout can be made with \doccmd{SetTextStyle}\footnote{see Section \ref{sec:text_style}}
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{x}=\docarg{measure},\docopt{y}=\docarg{measure}]\{\docarg{string}\}
+\end{docspecdef}
+
+The location of the text is determined by Cartesian coordinates in \docopt{x} and \docopt{y}. The coordinates are optional. If no coordinates are determined the text will be placed at the origin ($0,0$). The entered \docarg{measures} are in default units (\si{cm}). Changing the unites (locally) can be done by adding the unit to the \docarg{measure}\footnote{e.g. x=\SI{1}{in}}. Changes to the default setting can be made with \doccmd{SetDefaultUnit}\footnote{see Section \ref{sec:gerneral_settings}}.
+
+\begin{marginfigure}[6mm]
+\centering
+ \begin{tikzpicture}
+ \Text{A}
+ \Text[x=1,y=1]{B}
+ \Text[x=2]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text{A}
+ \Text[x=1,y=1]{B}
+ \Text[x=2]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{fontsize}=\docarg{font size}]\{\docarg{string}\}
+\end{docspecdef}
+
+The font size of the text can be changed with the option \docopt{fontsize}. Per default the font size of the text is defined as \doccmd{normalsize}.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Text[fontsize=\small]{A}
+ \Text[x=1,fontsize=\LARGE]{B}
+ \Text[x=2,fontsize=\Huge]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[fontsize=\small]{A}
+ \Text[x=1,fontsize=\LARGE]{B}
+ \Text[x=2,fontsize=\Huge]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{color}=\docarg{color}]\{\docarg{string}\}
+\end{docspecdef}
+
+To change the text color individually, the option \docopt{color} has to be used. Without the option \docopt{RGB} set, the default \tikzsym and \LaTeX~ colors can be applied.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Text[color = blue]{A}
+ \Text[x=1,color=red]{B}
+ \Text[x=2,color=green!70!blue]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[color = blue]{A}
+ \Text[x=1,color=red]{B}
+ \Text[x=2,color=green!70!blue]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{opacity}=\docarg{number}]\{\docarg{string}\}
+\end{docspecdef}
+
+With the option \docopt{opacity} the opacity of the text can be modified. The range of the \docarg{number} lies between $0$ and $1$. Where $0$ represents a fully transparent text and $1$ a solid text.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \draw[thick,orange,dashed] (-.5,0) -- (2.5,0);
+ \Text[opacity = 1]{A}
+ \Text[x=1,opacity =.7]{B}
+ \Text[x=2,opacity =.2]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[opacity = 1]{A}
+ \Text[x=1,opacity =.7]{B}
+ \Text[x=2,opacity =.2]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{position}=\docarg{string},\docopt{distance}=\docarg{measure}]\{\docarg{string}\}
+\end{docspecdef}
+
+Per default the \docopt{position} of the text is in the \docarg{center} of the origin. Classical \tikzsym commands\footnote{e.g. \docarg{above}, \docarg{below}, \docarg{left}, \docarg{right}, \docarg{above left}, \docarg{above right},\dots} can be used to change the \docopt{position} of the text.
+
+With the option, \docopt{distance} the distance between the text and the origin can be changed.
+
+\begin{marginfigure}[20mm]
+\centering
+ \begin{tikzpicture}
+ \filldraw [orange] (0,0) circle (2pt);
+ \draw[<-,orange] (0.1,0) --++ (0.5,0) node [pos=1,right]{origin ($0,0$)};
+ \Text[position=above]{above}
+ \Text[position=below]{below}
+ \Text[position=left,distance=5mm]{left}
+ \Text[position=above right,distance=5mm]{above right}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[position=above]{above}
+ \Text[position=below]{below}
+ \Text[position=left,distance=5mm]{left}
+ \Text[position=above right,distance=5mm]{above right}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{rotation}=\docarg{number}]\{\docarg{string}\}
+\end{docspecdef}
+
+With the \docopt{rotation}, the text can be rotated by entering a \docarg{number} between $-360$ and $360$. The origin ($0^\circ$) is the $y$ axis. A positive \docarg{number} change the \docopt{position} counter clockwise, while a negative \docarg{number} make changes clockwise.
+
+\begin{marginfigure}[31mm]
+\centering
+ \begin{tikzpicture}
+ \Text[rotation = 30]{A}
+ \Text[x=1,rotation = 45]{B}
+ \Text[x=2,rotation = 75]{C}
+ \draw[orange,dashed](2,0) --++ (7mm,0mm)(2,0)--++(75:7mm);
+ \draw[orange,->] (2.5,0) arc (0:75:5mm);
+ \node[orange] (x) at (2.6,-.2) {$75^\circ$};
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[rotation=30]{A}
+ \Text[x=1,rotation=45]{B}
+ \Text[x=2,rotation=75]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+\newpage
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{anchor}=\docarg{string}]\{\docarg{string}\}
+\end{docspecdef}
+
+With the option \docopt{anchor} the alignment of the text can be changed. Per default the text will be aligned centered. Classical \tikzsym commands\footnote{e.g. \docarg{north}, \docarg{east}, \docarg{south}, \docarg{west}, \docarg{north east}, \docarg{north west},\dots} can be used to change the alignment of the text.
+
+\begin{marginfigure}[5mm]
+\centering
+ \begin{tikzpicture}
+ \filldraw [orange] (0,0) circle (2pt);
+ \filldraw [orange] (1,0) circle (2pt);
+ \filldraw [orange] (2,0) circle (2pt);
+ \Text[anchor=north east]{NE}
+ \Text[x=1,anchor = south]{S}
+ \Text[x=2,anchor =south west]{SW}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[anchor=north east]{NE}
+ \Text[x=1,anchor = south]{S}
+ \Text[x=2,anchor =south west]{SW}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{width}=\docarg{measure}]\{\docarg{string}\}
+\end{docspecdef}
+
+With the option \docopt{width} enabled, the text will break after the entered \docarg{measure}.
+
+\begin{marginfigure}[25mm]
+\centering
+ \begin{tikzpicture}
+ \draw[|<->|,orange] (-1.25,.7) --++ (2.5,0) node [pos=.5,above]{2.5cm};
+ \Text[width=2.5cm]{This might be a very long text.}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[width=2.5cm]{This might be a very long text.}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{style}=\{\docarg{string}\}]\{\docarg{string}\}
+\end{docspecdef}
+
+Any other \tikzsym style option or command can be entered via the option \docopt{style}. Most of these commands can be found in the ``\tikzsym and PGF Manual''. Contain the commands additional options (e.g.\docopt{fill}=\docarg{red}), then the argument for the \docopt{style} has to be between $\{~\}$ brackets.
+
+\begin{marginfigure}[32mm]
+\centering
+ \begin{tikzpicture}
+ \Text[style={draw,rectangle}]{A}
+ \Text[x=1,style={fill=red}]{B}
+ \Text[x=2,style={fill=blue,circle,opacity=.3}]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[style={draw,rectangle}]{A}
+ \Text[x=1,style={fill=red}]{B}
+ \Text[x=2,style={fill=blue,circle,opacity=.3}]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Text}[\docopt{RGB},\docopt{color}=\docarg{RGB values}]\{\docarg{string}\}
+\end{docspecdef}
+
+In order to display RGB colors for the text color, the option \docopt{RGB} has to be entered. In combination with this option, the \docopt{color} hast to be a list with the \docarg{RGB values}, separated by <<,>> and within $\{~\}$.\footnote{e.g. the RGB code for white: $\{255,255,255\}$}
+
+\begin{marginfigure}[7mm]
+\centering
+ \begin{tikzpicture}
+ \Text[RGB,color={127,201,127}]{A}
+ \Text[x=1,RGB,color={190,174,212}]{B}
+ \Text[x=2,RGB,color={253,192,134}]{C}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Text[RGB,color={127,201,127}]{A}
+ \Text[x=1,RGB,color={190,174,212}]{B}
+ \Text[x=2,RGB,color={253,192,134}]{C}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{layer}[\docopt{layer}=\docarg{number}]\{\docarg{string}\}
+\end{docspecdef}
+
+With the option \docopt{layer} the text can be assigned to a specific layer. More about this option and the use of layers is explained in Chapter~\ref{chap:multilayer_networks}.
+
+\chapter{Complex Networks}
+\label{chap:complex_networks}
+
+While in Chapter~\ref{chap:simple_networks} the building blocks of the networks are introduced, here the main strength of the \pkg package is explained. This includes creating networks based on data, obtained from other sources (e.g. Python, R, GIS). The idea is that the layout will be done by this external sources and \pkg is used make some changes and to recreate the networks in \LaTeX.
+
+\section{Vertices}
+\label{sec:vertices}
+
+The \doccmddef{Vertices} command is the extension of the \doccmd{Vertex} command. Instead of a single vertex, a set of vertices will be drawn. This set of vertices is defined in an external file but can be modified with \doccmd{Vertices}.
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{global options}]\{\docarg{filename}\}
+\end{docspecdef}
+
+The vertices have to be stored in a clear text file\footnote{e.g. .txt, .tex, .csv, .dat, \dots}, preferentially in a \texttt{.csv} format. The first row should contain the headings, which are equal to the options defined in Table \ref{tab:vertex_options}. Option are separated by a comma <<,>>. Each new row is corresponds to a new vertex.
+\marginnote[8mm]{File: vertices.csv}
+\begin{docspec}
+\begin{lstlisting}
+id, x, y ,size,color ,opacity,label,IdAsLabel,NoLabel
+ A, 0, 0, .4 ,green , .9 , a , false , false
+ B, 1, .7, .6 , , .5 , b , false , false
+ C, 2, 1, .8 ,orange, .3 , c , false , true
+ D, 2, 0, .5 ,red , .7 , d , true , false
+ E,.2,1.5, .5 ,gray , , e , false , false
+\end{lstlisting}
+\end{docspec}
+
+Only the \docopt{id} value is mandatory for a vertex and corresponds to the \docarg{Name} argument of a single \doccmd{Vertex}. Therefore, the same rules and naming conventions apply as for the \docarg{Name} argument: no mathematical expressions, no blank spaces, and the \docopt{id} must be unique! All other options are optional. No specific order of the options must be maintained. If no value is entered for an option, the default value will be chosen\footnote{\TODO This is NOT valid for Boolean options, here values for all vertices have to be entered.}. The \docarg{filename} should not contain blank spaces or special characters. The vertices are drawn by the command \doccmd{Vertex} with the \docarg{filename} plus file format (e.g. \texttt{.csv}). If the vertices file is not in the same directory as the main \LaTeX~file, also the path has to be specified.
+
+\newpage
+\begin{marginfigure}[2mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+Predefined \doccmd{Vertex} options can be overruled by the \docopt{global options} of the \doccmd{Vertices} command; I.e. these options apply for all vertices in the file. For the \doccmd{Vertices} the following options are available:
+
+\begin{table}[h]\index{Vertices!options}
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{lccl}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+ size & \{\} & measure& diameter of the circles\\
+ color & \{\} & color & fillcolor of vertices\\
+ opacity & \{\} & number & opacity of the fill color \\
+ style & \{\} & string & additional \tikzsym styles \\
+ layer & \{\} & number & assigned layer of the vertices \\
+ \midrule
+ NoLabel & false & Boolean & delete the labels \\
+ IdAsLabel & false & Boolean & uses the \docarg{Names} as labels \\
+ Math & false & Boolean & displays the labels in math mode \\
+ RGB & false & Boolean & allow RGB colors \\
+ Pseudo & false & Boolean & create a pseudo vertices\\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \end{center}
+ \caption{Global options for the \doccmd{Vertices} command.}
+ \label{tab:vertices_options}
+\end{table}
+
+The use of these options are similar to the options for a single \doccmd{Vertex} defined in Section~\ref{sec:vertex}.
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{size}=\docarg{measure}]\{\docarg{filename}\}
+\end{docspecdef}
+
+The diameter of the vertices can be changed with the option \docopt{size}. Per default a vertex has \SI{0.6}{cm} in diameter. Also, here the default units are \si{cm} and have not to be added to the \docarg{measure}.
+
+\begin{marginfigure}[28mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices[size=.6]{data/vertices.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices[size=.6]{data/vertices.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{color}=\docarg{color}]\{\docarg{filename}\}
+\end{docspecdef}
+
+To change the fill color for all vertices, the option \docopt{color} has to be used. Without the option \docopt{RGB} set, the default \tikzsym and \LaTeX~ colors can be applied.
+
+\begin{marginfigure}[22mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices[color=green!70!blue]{data/vertices.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices[color=green!70!blue]{data/vertices.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{opacity}=\docarg{number}]\{\docarg{filename}\}
+\end{docspecdef}
+
+With the option \docopt{opacity} the opacity of all vertices fills colors can be modified. The range of the \docarg{number} lies between $0$ and $1$. Where $0$ represents a fully transparent fill and $1$ a solid fill.
+
+\newpage
+\begin{marginfigure}[2mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices[opacity=.3]{data/vertices.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices[opacity=.3]{data/vertices.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{style}=\docarg{string}]\{\docarg{filename}\}
+\end{docspecdef}
+
+Any other \tikzsym style option or command can be entered via the option \docopt{style}. Most of these commands can be found in the ``\tikzsym and PGF Manual''. Contain the commands additional options (e.g.\docopt{shading}=\docarg{ball}), then the argument for the \docopt{style} has to be between $\{~\}$ brackets.
+
+\begin{marginfigure}[25mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices[style={shading=ball,blue}]{data/vertices.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices[style={shading=ball,blue}]{data/vertices.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{IdAsLabel}]\{\docarg{filename}\}
+\end{docspecdef}
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{NoLabel}]\{\docarg{filename}\}
+\end{docspecdef}
+
+\docopt{IdAsLabel} is a Boolean option which assigns the \docopt{id} of the single vertices as labels. On the contrary, \docopt{NoLabel} suppress all labels.
+
+\begin{marginfigure}[22mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices[IdAsLabel]{data/vertices.csv}
+ %\node at (2,1)[font=\scriptsize]{C};
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices[IdAsLabel]{data/vertices.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{marginfigure}[2mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices[NoLabel]{data/vertices.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices[NoLabel]{data/vertices.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{RGB}]\{\docarg{filename}\}
+\end{docspecdef}
+
+In order to display RGB colors for the vertex fill colors, the option \docopt{RGB} has to be entered. Additionally, the RGB values have to be specified in the file where the vertices are stored. Each value has its own column with the caption \docopt{R}, \docopt{G}, and \docopt{B}.
+
+\marginnote[8mm]{File: vertices\_RGB.csv}
+\begin{docspec}
+\begin{lstlisting}
+id, x, y ,size, color,opacity,label, R , G , B
+ A, 0, 0, .4 , green, .9 , a ,255, 0, 0
+ B, 1, .7, .6 , , .5 , b , 0,255, 0
+ C, 2, 1, .8 ,orange, .3 , c , 0, 0,255
+ D, 2, 0, .5 , red, .7 , d , 10,120,255
+ E,.2,1.5, .5 , gray, , e , 76, 55,255
+\end{lstlisting}
+\end{docspec}
+
+The ``normal'' color definition can also be part of the vertex definition. If the option \docopt{RGB} is not set, then the colors under \docopt{color} are applied.
+
+\newpage
+\begin{marginfigure}[3mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices[RGB]{data/vertices_RGB.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices[RGB]{data/vertices_RGB.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{Pseudo}]\{\docarg{filename}\}
+\end{docspecdef}
+
+The option \docopt{Pseudo} creates a pseudo vertices, where only the names and the coordinates of the vertices wil be drawn. Edges etc, can still be assigned to these vertices.
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{layer}=\docarg{number}]\{\docarg{filename}\}
+\end{docspecdef}
+
+With the option \docopt{layer}, only the vertices on the selected layer are plotted. More about this option and the use of layers is explained in Chapter~\ref{chap:multilayer_networks}.
+
+\newpage
+\section{Edges}
+\label{sec:edges}
+
+The \doccmddef{Edges} command is the extension of the \doccmd{Edge} command. Instead of a single edge, a set of edges will be drawn. This set of edges is defined in an external file but can be modified with \doccmd{Edges}.
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{global options}]\{\docarg{filename}\}
+\end{docspecdef}
+
+Like the vertices, the edges have to be stored in a clear text file\footnote{e.g. .txt, .tex, .csv, .dat, \dots}, preferentially in a \texttt{.csv} format. The first row should contain the headings, which are equal to the options defined in Table \ref{tab:edge_options}. Option are separated by a comma <<,>>. Each new row is corresponds to a new edge.
+
+\marginnote[8mm]{File: edges.csv}
+\begin{docspec}
+\begin{lstlisting}
+u,v,label,lw,color ,opacity,bend, R , G , B ,Direct
+A,B, ab ,.5,red , 1 , 30, 0,120,255,false
+B,C, bc ,.7,blue , 1 , -60, 76, 55,255,false
+B,D, bd ,.5,blue , .5 , -60, 76, 55,255,false
+A,E, ae , 1,green , 1 , 75,255, 0, 0,true
+C,E, ce , 2,orange, 1 , 0,150,150,150,false
+A,A, aa ,.3,black , .5 , 75,255, 0 ,0,false
+\end{lstlisting}
+\end{docspec}
+
+The mandatory values are the \docopt{u} and \docopt{v} argument, which corresponds to the \docarg{Vertex i} and \docarg{Vertex j} arguments of a single \doccmd{Edge}. Edges can only create if a vertex exists with the same \docarg{Name}. All other options are optional. No specific order of the options must be maintained. If no value is entered for an option, the default value will be chosen\footnote{\TODO This is NOT valid for Boolean options, here values for all vertices have to be entered.}. The \docarg{filename} should not contain blank spaces or special characters. The edges are drawn by the command \doccmd{Edges} with the \docarg{filename} plus file format (e.g. \texttt{.csv}). If the edges file is not in the same directory as the main \LaTeX~file, also the path has to be specified. In order to draw edges, first, the vertices have to be generated. Only then, edges can be assigned.
+
+\begin{marginfigure}[18mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+Predefined \doccmd{Edge} options can be overruled by the \docopt{global options} of the \doccmd{Edges} command; I.e. these options apply for all edges in the file. For the \doccmd{Edges} the following options are available:
+
+\newpage
+\begin{table}[h]\index{Edges!options}
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{lccl}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+ lw & \{\} & measure & line width of the edge \\
+ color & \{\} & color & edge color\\
+ opacity & \{\} & number & opacity of the edge \\
+ style & \{\} & string & additional \tikzsym styles \\
+ vertices & \{\} & file & vertices were the edges are assigned to\\
+ layer & \{\} & number & edges in specific layers \\
+ \midrule
+ Direct & false & Boolean & allow directed edges \\
+ Math & false & Boolean & displays the labels in math mode \\
+ NoLabel & false & Boolean & delete the labels\\
+ RGB & false & Boolean & allow RGB colors \\
+ NotInBG & false & Boolean & edges are not in the background layer\\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \end{center}
+ \caption{Global options for the \doccmd{Edges} command.}
+ \label{tab:edges_options}
+\end{table}
+
+The use of these options are similar to the options for a single \doccmd{Edge} defined in Section~\ref{sec:edge}.
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{lw}=\docarg{measure}]\{\docarg{filename}\}
+\end{docspecdef}
+
+The line width of the edges can be modified with the option \docopt{lw}. Here, the unit of the \docarg{measure} can be specified, otherwise, it is in \si{pt}.
+
+\begin{marginfigure}[35mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[lw=2.5]{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[lw=2.5]{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{color}=\docarg{color}]\{\docarg{filename}\}
+\end{docspecdef}
+
+To change the line color of all edges, the option \docopt{color} has to be used. Without the option \docopt{RGB} set, the default \tikzsym and \LaTeX~ colors can be applied.
+
+\begin{marginfigure}[20mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[color=green!70!blue]{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[color=green!70!blue]{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{opacity}=\docarg{number}]\{\docarg{filename}\}
+\end{docspecdef}
+
+With the option \docopt{opacity} the opacity of all edge lines can be modified. The range of the \docarg{number} lies between $0$ and $1$. Where $0$ represents a fully transparent fill and $1$ a solid fill.
+
+\begin{marginfigure}[20mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[opacity=0.3]{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[opacity=0.3]{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\newpage
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{style}=\docarg{string}]\{\docarg{filename}\}
+\end{docspecdef}
+
+Any other \tikzsym style option or command can be entered via the option \docopt{style}. Most of these commands can be found in the ``\tikzsym and PGF Manual''.
+
+\begin{marginfigure}[25mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[style={dashed}]{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[style={dashed}]{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{Direct}]\{\docarg{filename}\}
+\end{docspecdef}
+
+Directed edges are created by enabling the option \docopt{Direct}. The arrow is drawn from \docopt{u} to \docopt{v}.
+
+\begin{marginfigure}[15mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[Direct]{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[Direct]{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edges}[Math]\{\docarg{filename}\}
+\end{docspecdef}
+
+The option \docopt{Math} allows transforming labels into mathematical expressions without using the \$~\$ environment.
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{NoLabel}]\{\docarg{filename}\}
+\end{docspecdef}
+
+The option \docopt{NoLabel} suppress all edge labels.
+
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[NoLabel]{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[NoLabel]{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{RGB}]\{\docarg{filename}\}
+\end{docspecdef}
+
+In order to display RGB colors for the edge line colors, the option \docopt{RGB} has to be entered. Additionally, the RGB values have to be specified in the file where the vertices are stored. Each value has its own column with the caption \docopt{R}, \docopt{G}, and \docopt{B}. The ``normal'' color definition can also be part of the vertex definition. If the option \docopt{RGB} is not set, then the colors under \docopt{color} are applied.
+
+\begin{marginfigure}[34mm]
+\centering
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[RGB]{data/edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}
+ \Vertices{data/vertices.csv}
+ \Edges[RGB]{data/edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{NotInBG}]\{\docarg{filename}\}
+\end{docspecdef}
+
+Per default, the edges are drawn on the background layer of the \docarg{tikzpicture}. I.e. objects which are created after the edges appear also on top of them. To turn this off, the option \docopt{NotInBG} has to be enabled.
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{vertices}=\docarg{filename}]\{\docarg{filename}\}
+\end{docspecdef}
+
+Edges can be assigned to a specific set of \doccmd{Vertices} with the option \docopt{vertices}. Thereby the argument \docarg{filename} is the same as used for the \doccmd{Vertices} command. This option might be necessary if multiple \doccmd{Vertices} are created and edges are assigned at the end.
+
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{layer}=\{\docarg{{layer $\alpha$}},\docarg{{layer $\beta$}}\}]\{\docarg{filename}\}
+\end{docspecdef}
+
+With the option \docopt{layer} only the edges between layer $\alpha$ and $\beta$ are plotted. The argument is a tuple of both layers indicated by $\{~,~\}$. More about this option and the use of layers is explained in Chapter~\ref{chap:multilayer_networks}.
+
+
+
+\chapter{Multilayer Networks}
+\label{chap:multilayer_networks}
+
+One of the main purposes of the \pkg package is the illustration of multilayer network structures. Thereby, all the previous commands can be used. A multilayer network is represented as a three-dimensional object, where each layer is located at a different $z$ plane. In order to enable this functionality, the option \docopt{multilayer} has to be used at the beginning of the \docenvdef{tikzpicture}.
+
+\section{Simple Networks}
+\label{sec:simple_networks}
+
+
+\begin{docspecdef}
+ \doccmd{Vertex}[\docopt{layer}=\docarg{number}]\{\docarg{Name}\}
+\end{docspecdef}
+
+With the option \docopt{layer} the vertex can be assigned to a specific layer. Layers are defined by numbers (e.g. $1$, $2$, $3$,\dots). Working with the \docopt{multilayer} option, each \doccmd{Vertex} has to be assigned to a specific layer. For the edge assignment no additional information is needed.
+
+\begin{marginfigure}[45mm]
+\centering
+ \begin{tikzpicture}[multilayer]
+ \begin{Layer}[layer=2]
+ \draw[orange,very thick] (0,0) rectangle (2.5,1);
+ \draw[step=.5, orange,draw opacity=.5] (0,0) grid (2.5,1);
+ \end{Layer}
+ \Vertex[x=.5,y=.5,IdAsLabel,layer=1]{A}
+ \Vertex[x=1.5,y=.5,IdAsLabel,layer=1]{B}
+ \Vertex[x=1.5,y=.5,IdAsLabel,layer=2]{C}
+ \Edge[bend=60](A)(B)
+ \Edge(C)(C)
+ \Edge[style=dashed](B)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer]
+ \Vertex[x=0.5,IdAsLabel,layer=1]{A}
+ \Vertex[x=1.5,IdAsLabel,layer=1]{B}
+ \Vertex[x=1.5,IdAsLabel,layer=2]{C}
+ \Edge[bend=60](A)(B)
+ \Edge[style=dashed](B)(C)
+ \Edge(C)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+Enabling the option \docopt{multilayer}, returns the network in a two-dimensional plane, like the networks discussed before. Setting the argument \docopt{multilayer}=\docarg{3d}, the network is rendered in a three-dimensional representation. Per default, the layer with the lowest number is on the top. This and the spacing between the layers can be changed with the command \doccmd{SetLayerDistance}.
+
+\begin{marginfigure}[45mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \begin{Layer}[layer=1]
+ \draw[orange,very thick] (0,0) rectangle (2.5,1);
+ \draw[step=.5, orange,draw opacity=.5] (0,0) grid (2.5,1);
+ \node at (0,0)[below right,orange]{Layer 1};
+ \end{Layer}
+ \begin{Layer}[layer=2]
+ \draw[orange,very thick] (0,0) rectangle (2.5,1);
+ \draw[step=.5, orange,draw opacity=.5] (0,0) grid (2.5,1);
+ \node at (0,0)[below right,orange]{Layer 2};
+ \end{Layer}
+ \Vertex[x=0.5,y=.5,IdAsLabel,layer=1]{A}
+ \Vertex[x=1.5,y=.5,IdAsLabel,layer=1]{B}
+ \Vertex[x=1.5,y=.5,IdAsLabel,layer=2]{C}
+ \Edge[bend=60](A)(B)
+ \Edge(C)(C)
+ \Edge[style=dashed](B)(C)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Vertex[x=0.5,IdAsLabel,layer=1]{A}
+ \Vertex[x=1.5,IdAsLabel,layer=1]{B}
+ \Vertex[x=1.5,IdAsLabel,layer=2]{C}
+ \Edge[bend=60](A)(B)
+ \Edge[style=dashed](B)(C)
+ \Edge(C)(C)
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\section{Complex Networks}
+
+Similar as in Chapter \ref{chap:complex_networks} introduced, layers can be assigned to the vertices by adding a column \docopt{layer} to the file where the vertices are stored.
+
+\marginnote[8mm]{File: ml\_vertices.csv}
+\begin{docspec}
+\begin{lstlisting}
+id, x, y ,size, color,opacity,label,layer
+ A, 0, 0, .4 , green, .9 , a , 1
+ B, 1, .7, .6 , , .5 , b , 1
+ C, 2, 1, .8 ,orange, .3 , c , 1
+ D, 2, 0, .5 , red, .7 , d , 2
+ E,.2,1.5, .5 , gray, , e , 1
+ F,.1, .5, .7 , blue, .3 , f , 2
+ G, 2, 1, .4 , cyan, .7 , g , 2
+ H, 1, 1, .4 ,yellow, .7 , h , 2
+\end{lstlisting}
+\end{docspec}
+
+\marginnote[8mm]{File: ml\_edges.csv}
+\begin{docspec}
+\begin{lstlisting}
+u,v,label,lw,color ,opacity,bend,Direct
+A,B, ab ,.5,red , 1 , 30,false
+B,C, bc ,.7,blue , 1 , -60,false
+A,E, ae , 1,green , 1 , 45,true
+C,E, ce , 2,orange, 1 , 0,false
+A,A, aa ,.3,black , .5 , 75,false
+C,G, cg , 1,blue , .5 , 0,false
+E,H, eh , 1,gray , .5 , 0,false
+F,A, fa ,.7,red , .7 , 0,true
+D,F, df ,.7,cyan , 1 , 30,true
+F,H, fh ,.7,purple, 1 , 60,false
+D,G, dg ,.7,blue , .7 , 60,false
+\end{lstlisting}
+\end{docspec}
+
+With the commands \doccmd{Vertices} and \doccmd{Edges}, the network can be created automatically. Again the \doccmd{Vertices} vertices should be performed first and then the command \doccmd{Edges}.
+
+\begin{marginfigure}[25mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \Vertices[NoLabel,opacity=0]{data/ml_vertices.csv}
+ \begin{Layer}[layer=2]
+ \draw[orange,very thick] (-.5,-.5) rectangle (2.5,2);
+ \draw[step=.5, orange,draw opacity=.5] (-.5,-.5) grid (2.5,2);
+ \node at (-.5,-.5)[below right,orange]{Layer 2};
+ \end{Layer}
+ \Edges[NotInBG,layer={2,2}]{data/ml_edges.csv}
+ \Edges[NotInBG,layer={1,2}]{data/ml_edges.csv}
+ \Vertices[layer=2]{data/ml_vertices.csv}
+ \begin{Layer}[layer=1]
+ \draw[orange,very thick,fill=white,fill opacity=.7] (-.5,-.5) rectangle (2.5,2);
+ \draw[step=.5, orange,draw opacity=.5] (-.5,-.5) grid (2.5,2);
+ \node at (-.5,-.5)[below right,orange]{Layer 1};
+ \end{Layer}
+ \Edges[NotInBG,layer={1,1}]{data/ml_edges.csv}
+ \Vertices[layer=1]{data/ml_vertices.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Vertices{data/ml_vertices.csv}
+ \Edges{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Vertices}[\docopt{layer}=\docarg{number}]\{\docarg{filename}\}
+\end{docspecdef}
+\begin{docspecdef}
+ \doccmd{Edges}[\docopt{layer}=\{\docarg{{layer $\alpha$}},\docarg{{layer $\beta$}}\}]\{\docarg{filename}\}
+\end{docspecdef}
+
+With the \doccmd{Vertices} option \docopt{layer} only the vertices on the selected layer are plotted. While, with the \doccmd{Edges} option \docopt{layer}, the edges between layer $\alpha$ and $\beta$ are plotted. The argument is a tuple of both layers indicated by $\{~,~\}$.
+
+\begin{marginfigure}[30mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \begin{Layer}[layer=1]
+ \draw[orange,very thick,fill=white,fill opacity=.7] (-.5,-.5) rectangle (2.5,2);
+ \draw[step=.5, orange,draw opacity=.5] (-.5,-.5) grid (2.5,2);
+ \node at (-.5,-.5)[below right,orange]{Layer 1};
+ \end{Layer}
+ \Vertices[layer=1]{data/ml_vertices.csv}
+ \Edges[NotInBG,layer={1,1}]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Vertices[layer=1]{data/ml_vertices.csv}
+ \Edges[layer={1,1}]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\newpage
+
+Plotting edges without defining first the vertices can be done with the \doccmd{Edges} option \docopt{vertices}. This allows modifying specific sets of Edges.
+
+\begin{marginfigure}[15mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \Edges[vertices=data/ml_vertices.csv,layer={1,2},style=dashed]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Edges[vertices=data/ml_vertices.csv,
+ layer={1,2},style=dashed]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\section{Layers and Layouts}
+
+Besides adding vertices and edges to specific layers, every other \tikzsym object can be drawn on such a layer using the \docenvdef{Layer} environment. With the option \docopt{layer}=\docarg{layer $\alpha$}, the position of the canvas can be assigned to the specific layer.
+
+\begin{docspecdef}
+ \doccmd{begin}\{\docenv{Layer}\}[\docopt{layer}=\docarg{layer $\alpha$}]
+
+ \doccmd{end}\{\docenv{Layer}\}
+\end{docspecdef}
+
+\begin{marginfigure}[40mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \begin{Layer}[layer=1]
+ \draw[very thick] (-.5,-.5) rectangle (2.5,2);
+ \node at (-.5,-.5)[below right]{Layer 1};
+ \end{Layer}
+ \Vertices[layer=1]{data/ml_vertices.csv}
+ \Edges[layer={1,1}]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \begin{Layer}[layer=1]
+ \draw[very thick] (-.5,-.5) rectangle (2.5,2);
+ \node at (-.5,-.5)[below right]{Layer 1};
+ \end{Layer}
+ \Vertices[layer=1]{data/ml_vertices.csv}
+ \Edges[layer={1,1}]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{SetLayerDistance}\{\docarg{measure}\}
+\end{docspecdef}
+
+With the command \doccmddef{SetLayerDistance} the distance between the layers and their orientation can be modified. Per default the distance is set to $-2$\doccmd{DefaultUnit} (here \si{cm}). A negative number implies that layers with a higher number will be stacked below layers with a smaller number.
+
+\begin{docspecdef}
+ \doccmd{SetCoordinates}[\docopt{xAngle}=\docarg{number},\docopt{yAngle}=\docarg{number},\docopt{zAngle}=\docarg{number}, \docopt{xLength}=\docarg{number},\docopt{yLength}=\docarg{number},\docopt{zLength}=\docarg{number}]
+\end{docspecdef}
+
+The perspective of the three-dimensional plot can be modified by changing the orientation of the coordinate system, which is done with the command \doccmddef{SetCoordinates}. Here the angle and the length of each axis can be modified. Angles are defined as a \docarg{number} in the range between $-360$ and $360$. Per default, the lengths of the axes are defined by the identity matrix, i.e. no distortion. If the length ratio is changed $x$, $y$, and/or $z$ values are distorted. The \doccmd{SetCoordinates} command has to be entered before the \docopt{multilayer} option is called!
+
+\begin{marginfigure}[25mm]
+\centering
+\SetCoordinates[xAngle=-30,yLength=1.2,xLength=.8]
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \begin{Layer}[layer=1]
+ \draw[orange,very thick,fill=white,fill opacity=.7] (-.5,-.5) rectangle (2.5,2);
+ \draw[step=.5, orange,draw opacity=.5] (-.5,-.5) grid (2.5,2);
+ \node at (-.5,-.5)[below right,orange]{Layer 1};
+ \end{Layer}
+ \Vertices[layer=1]{data/ml_vertices.csv}
+ \Edges[NotInBG,layer={1,1}]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \SetCoordinates[xAngle=-30,yLength=1.2,xLength=.8]
+ \begin{tikzpicture}[multilayer=3d]
+ \Vertices[layer=1]{data/ml_vertices.csv}
+ \Edges[layer={1,1}]{data/ml_edges.csv}
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+\newpage
+\section{Plane}
+
+To support the illustration of multilayer networks, the background of the layer can be simply visualized with the command \doccmddef{Plane}, which allow to draw boundaries, grids and include images to the layer.
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{options}]
+\end{docspecdef}
+No obligatory arguments are needed. For a \doccmd{Plane} the following options are available:
+
+\begin{table}[h]\index{Plane!options}
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{lccl}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+ x & 0 & measure& x-coordinate of the origin\\
+ y & 0 & measure& y-coordinate of the origin\\
+ width & \SI{5}{cm} & measure& width of the plane\\
+ height & \SI{5}{cm} & measure& height of the plane\\
+ color & vertexfill & color & fill color of the plane \\
+ opacity & 0.3 & number & opacity of the fill color \\
+ grid & \{\} & measure& spacing of the grid\\
+ image & \{\} & file & path to the image file \\
+ style & \{\} & string & additional \tikzsym styles \\
+ layer & 1 & number & layer where the plane is located\\
+ \midrule
+ RGB & false & Boolean & allow RGB colors \\
+ NoFill & false & Boolean & disable fill color \\
+ NoBorder & false & Boolean & disable border line \\
+ ImageAndFill&false & Boolean & allow image and fill color \\
+ InBG & false & Boolean & plane is in the background layer\\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \\$^a$ either measure or string
+ \end{center}
+ \caption{Options for the \doccmd{Plane} command.}
+ \label{tab:plane_options}
+\end{table}
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{x}=\docarg{measure},\docopt{y}=\docarg{measure},\docopt{width}=\docarg{measure},\docopt{height}=\docarg{measure}]
+\end{docspecdef}
+
+A \doccmd{Plane} is a rectangle with origin (\docopt{x},\docopt{y}), a given \docopt{width} and \docopt{height}. The origin is defined in the left lower corner and per default $(0,0)$. The plane is default \SI{5}{cm} (width) by \SI{5}{cm} (height). This default options can be changed with \doccmd{SetPlaneWidth} and \doccmd{SetPlaneHeight}\footnote{See Section \ref{sec:plane_style}.}
+
+\begin{marginfigure}%[45mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5]
+ \begin{Layer}[layer=1]
+ \filldraw [orange] (-.5,-.5) circle (3pt);
+ \node [orange,anchor=south west] at (-.5,-.5) {origin};
+ \draw[|<->|,orange] (-.5,-.8) --++ (3,0) node [pos=.5,below]{width};
+ \draw[|<->|,orange] (2.8,-.5) --++ (0,2.5) node [pos=.5,below,sloped]{height};
+ \end{Layer}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{color}=\docarg{color}]
+\end{docspecdef}
+
+To change the fill color of each plane individually, the option \docopt{color} has to be used. Without the option \docopt{RGB} set, the default \tikzsym and \LaTeX~ colors can be applied. Per default the default vertex color is used.
+
+\begin{marginfigure}[22mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,color=green!70!blue]
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,color=green!70!blue]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\newpage
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{opacity}=\docarg{number}]
+\end{docspecdef}
+
+With the option \docopt{opacity} the opacity of the plane fill color can be modified. The range of the \docarg{number} lies between $0$ and $1$. Where $0$ represents a fully transparent fill and $1$ a solid fill. Per default the opacity is set to $0.3$.
+
+\begin{marginfigure}[22mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,opacity=.7]
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,opacity=.7]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{grid}=\docarg{measure}]
+\end{docspecdef}
+
+With the option \docopt{grid} a grid will be drawn on top of the plane. The argument of this option defines the spacing between the grid lines. The entered \docarg{measures} are in default units (\si{cm}). Changing the unites (locally) can be done by adding the unit to the \docarg{measure}\footnote{e.g. x=\SI{5}{mm}}. Changes to the default setting can be made with \doccmd{SetDefaultUnit}\footnote{see Section \ref{sec:gerneral_settings}}.
+
+\begin{marginfigure}%[22mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,grid=5mm]
+ \begin{Layer}[layer=1]
+ \draw[<->,orange] (2,-.7) --++ (.5,0) node [pos=.5,below]{5mm};
+ \draw[<->,orange] (2.7,-.5) --++ (0,.5) node [pos=.5,below,sloped]{5mm};
+ \end{Layer}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,grid=5mm]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{image}=\docarg{file}]
+\end{docspecdef}
+
+An image can be assigned to a plane with the option \docopt{image}. The argument is the file name and the folder where the image is stored. The width and height of the figure is scaled to the size of the plane. Without the option \docopt{ImageAndFill} the image overwrite the color options.
+
+\begin{marginfigure}[22mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,image=data/plane.png]
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,image=data/plane.png]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{style}=\docarg{string}]
+\end{docspecdef}
+
+Any other \tikzsym style option or command can be entered via the option \docopt{style}. Most of these commands can be found in the ``\tikzsym and PGF Manual''. Contain the commands additional options (e.g.\docopt{inner color}=\docarg{color}), then the argument for the \docopt{style} has to be between $\{~\}$ brackets.
+
+\begin{marginfigure}[22mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,style={dashed,inner color=white,outer color=red!80}]
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,style={dashed,inner color=white,outer color=red!80}]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{layer}=\docarg{number}]
+\end{docspecdef}
+
+With the option \docopt{layer}=\docarg{layer $\alpha$}, the position of the plane can be assigned to a specific layer. Per default the plane is drawn on layer $1$.
+
+\newpage
+\begin{marginfigure}%[22mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,color=green,layer=2]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5]
+ \Text[x=-.5,y=-.5,layer=2,color=orange,anchor=north west,fontsize=\normalsize]{Layer 2}
+ \Text[x=-.5,y=-.5,layer=1,color=orange,anchor=north west,fontsize=\normalsize]{Layer 2}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,color=green,layer=2]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{RGB},\docopt{color}=\docarg{RGB values}]
+\end{docspecdef}
+
+In order to display RGB colors for the plane fill color, the option \docopt{RGB} has to be entered. In combination with this option, the \docopt{color} hast to be a list with the \docarg{RGB
+values}, separated by <<,>> and within $\{~\}$.\footnote{e.g. the RGB code for white: $\{255,255,255\}$}
+
+\begin{marginfigure}
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,RGB,color={0,0,0}]
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,RGB,color={0,0,0}]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{NoFill}]
+\end{docspecdef}
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{NoBorder}]
+\end{docspecdef}
+
+\docopt{NoFill} is a Boolean option which disables the fill color of the plane and \docopt{NoBorder} is a Boolean option which suppress the border line of the plane.
+
+\begin{marginfigure}[16mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,layer=2,NoFill]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,NoBorder]
+ \Text[x=-.5,y=-.5,layer=2,color=orange,anchor=north west,fontsize=\normalsize]{Layer 2}
+ \Text[x=-.5,y=-.5,layer=1,color=orange,anchor=north west,fontsize=\normalsize]{Layer 2}
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \SetLayerDistance{-1.5}
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,layer=2,NoFill]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,NoBorder]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{ImageAndFill}]
+\end{docspecdef}
+
+With the option \docopt{ImageAndFill} both, image and fill color can be drawn on a plane. The option \docopt{opacity} is applied to both objects.
+
+\begin{marginfigure}[18mm]
+\centering
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,image=data/plane.png,color=red,opacity=.4,ImageAndFill]
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspec}
+\begin{lstlisting}
+ \begin{tikzpicture}[multilayer=3d]
+ \Plane[x=-.5,y=-.5,width=3,height=2.5,image=data/plane.png,color=red,opacity=.4,ImageAndFill]
+ \end{tikzpicture}
+\end{lstlisting}
+\end{docspec}
+
+\begin{docspecdef}
+ \doccmd{Plane}[\docopt{InBG}]
+\end{docspecdef}
+
+A plane is drawn on the current layer of the \docarg{tikzpicture}. I.e. objects which are created after the plane appear on top of it and objects created before below of it. With the option \docopt{InBG} enabled, the plane is drawn on the background layer of the \docarg{tikzpicture}.
+
+\chapter{Default Settings}
+\label{chap:default_settings}
+
+In order to customize the look of the networks, each layout setting used can be modified and adapted. There are three categories: General settings, vertex style, and edge style.
+
+\section{General Settings}
+\label{sec:gerneral_settings}
+
+With the general settings mainly the sizes, distances and measures of the networks can be modified.
+
+\begin{docspecdef}
+ \doccmd{SetDefaultUnit}\{\docarg{unit}\}
+\end{docspecdef}
+
+The command \doccmddef{SetDefaultUnit} allows to change the units used for drawing the network\footnote{Except the line width, which are defined in \si{pt}.}, including diameters of the vertices, $x$ and $y$ coordinates or the distance between the layers. The default unit is \si{cm}.
+
+\begin{docspecdef}
+ \doccmd{SetDistanceScale}\{\docarg{number}\}
+\end{docspecdef}
+
+With the command \doccmddef{SetDistanceScale}, the distance between the vertices can be scaled. Per default \SI{1}{cm} entered corresponds to \SI{1}{cm} drawn, i.e. \doccmd{SetDistanceScale}\{1\}. Decreasing or increasing the scale changes the drawing distances between the vertices.
+
+\begin{docspecdef}
+ \doccmd{SetLayerDistance}\{\docarg{measure}\}
+\end{docspecdef}
+
+With the command \doccmddef{SetLayerDistance} the distance between the layers and their orientation can be modified. Per default, the distance is set to $-2$. A negative number implies that layers with a higher number will be stacked below layers with a smaller number.
+
+\begin{docspecdef}
+ \doccmd{SetCoordinates}[\docopt{xAngle}=\docarg{number},\docopt{yAngle}=\docarg{number},\docopt{zAngle}=\docarg{number}, \docopt{xLength}=\docarg{number},\docopt{yLength}=\docarg{number},\docopt{zLength}=\docarg{number}]
+\end{docspecdef}
+
+The perspective of the three-dimensional plot can be modified by changing the orientation of the coordinate system, which is done with the command \doccmddef{SetCoordinates}. Here the angle and the length of each axis can be modified. Angles are defined as a \docarg{number} in the range between $-360$ and $360$. Per default, the length of the axes are defined by the identity matrix, i.e. no distortion. If the length ratio is changed $x$, $y$, and/or $z$ values are distorted. The \doccmd{SetCoordinates} command has to be entered before the \docopt{multilayer} option is called!
+
+\section{Vertex Style}
+\label{sec:vertex_style}
+
+The appearance of the vertices can be modified with the command \doccmddef{SetVertexStyle}. This command will change the default settings of the vertices in the network.
+
+\begin{docspecdef}
+ \doccmd{SetVertexStyle}[\docarg{document options}]
+\end{docspecdef}
+
+The following options are available:
+
+\begin{table}[h]\index{Vertex!style}
+ \footnotesize%
+ \begin{center}
+ \begin{tabularx}{\textwidth}{lccX}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+Shape & circle & text & shape of the vertex \\
+InnerSep & 2pt & measure & separation space which will be added inside the shape \\
+OuterSep & 0pt & measure & separation space outside the background path \\
+MinSize & 0.6\doccmd{DefaultUnit} & measure & diameter (size) of the vertex \\
+FillColor & vertexfill & color & color of the vertex \\
+FillOpacity & 1 & number & opacity of the vertex \\
+LineWidth & 1pt & measure & line width of the vertex boundary \\
+LineColor & black & color & line color of the vertex boundary \\
+LineOpacity & 1 & number & line opacity of the vertex boundary \\
+TextFont & \doccmd{scriptsize} & fontsize & font size of the vertex label \\
+TextColor & black & color & color of the vertex label \\
+TextOpacity & 1 & number & opacity of the vertex label \\
+TextRotation & 0 & number & initial rotation of the vertex \\
+ \bottomrule
+ \end{tabularx}
+ \scriptsize
+ \end{center}
+ \caption{Document style options for the vertices.}
+ \label{tab:vertex_style}
+\end{table}
+
+
+\section{Edge Style}
+\label{sec:edge_style}
+
+The appearance of the edges can be modified with the command \doccmddef{SetEdgeStyle}. This command will change the default settings of the edges in the network.
+
+\begin{docspecdef}
+ \doccmd{SetEdgeStyle}[\docarg{document options}]
+\end{docspecdef}
+
+The following options are available:
+
+\begin{table}[h]\index{Edge!style}
+ \footnotesize%
+ \begin{center}
+ \begin{tabularx}{\textwidth}{lccX}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+LineWidth & 1.5pt & measure & width of the edge \\
+Color & black!75 & color & color of the edge \\
+Opacity & 1 & number & opacity of the edge \\
+Arrow & -latex & text & arrow shape of the directed edge \\
+TextFont & \doccmd{scriptsize} & fontsize & font size of the edge label \\
+TextOpacity & 1 & number & opacity of the edge label \\
+TextFillColor & white & color & fill color of the edge label \\
+TextFillOpacity & 1 & number & fill opacity of the edge label \\
+InnerSep & 0pt & measure & separation space which will be added inside the shape \\
+OuterSep & 1pt & measure & separation space outside the background path \\
+TextRotation & 0 & number & initial rotation of the edge label \\
+ \bottomrule
+ \end{tabularx}
+ \scriptsize
+ \end{center}
+ \caption{Document style options for the edges.}
+ \label{tab:edge_style}
+\end{table}
+
+\begin{docspecdef}
+ \doccmd{EdgesNotInBG}
+\end{docspecdef}
+
+\begin{docspecdef}
+ \doccmd{EdgesInBG}
+\end{docspecdef}
+
+Per default edges are drawn on the background layer, with the command \doccmddef{EdgesNotInBG} this can be disabled, while the command \doccmddef{EdgesInBG} restores the default setting.
+
+\section{Text Style}
+\label{sec:text_style}
+
+The appearance of the text can be modified with the command \doccmddef{SetTextStyle}. This command will change the default settings of the text.
+
+\begin{docspecdef}
+ \doccmd{SetTextStyle}[\docarg{document options}]
+\end{docspecdef}
+
+The following options are available:
+
+\begin{table}[h]\index{Text!style}
+ \footnotesize%
+ \begin{center}
+ \begin{tabularx}{\textwidth}{lccX}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+TextFont & \doccmd{normalsize} & fontsize & font size of the text \\
+TextOpacity & 1 & number & opacity of the text \\
+TextColor & black & color & color of the text \\
+TextOpacity & 1 & number & opacity of the text \\
+InnerSep & 2pt & measure & separation space which will be added inside the shape \\
+OuterSep & 0pt & measure & separation space outside the background path \\
+TextRotation & 0 & number & initial rotation of the text \\
+ \bottomrule
+ \end{tabularx}
+ \scriptsize
+ \end{center}
+ \caption{Document style options for the planes.}
+ \label{tab:plane_style}
+\end{table}
+
+
+\section{Plane Style}
+\label{sec:plane_style}
+
+The appearance of the planes can be modified with the command \doccmddef{SetPlaneStyle}. This command will change the default settings of the planes.
+
+\begin{docspecdef}
+ \doccmd{SetPlaneStyle}[\docarg{document options}]
+\end{docspecdef}
+
+The following options are available:
+
+\begin{table}[h]\index{Plane!style}
+ \footnotesize%
+ \begin{center}
+ \begin{tabularx}{\textwidth}{lccX}
+ \toprule
+ Option & Default & Type &Definition \\
+ \midrule
+LineWidth & 1.5pt & measure & width of the border line \\
+LineColor & black & color & color of the border line \\
+LineOpacity & 1 & number & opacity of the border line \\
+FillColor & vertexfill & color & fill color of the plane \\
+FillOpacity & 0.3 & number & fill opacity of the plane \\
+GridLineWidth & 0.5pt & measure & width of the grid lines \\
+GridColor & black & color & color of the grid lines \\
+GridOpacity & 0.5 & number & opacity of the grid lines \\
+ \bottomrule
+ \end{tabularx}
+ \scriptsize
+ \end{center}
+ \caption{Document style options for the planes.}
+ \label{tab:plane_style}
+\end{table}
+
+\begin{docspecdef}
+ \doccmd{SetPlaneWidth}\{\docarg{measure}\}
+\end{docspecdef}
+\begin{docspecdef}
+ \doccmd{SetPlaneHeight}\{\docarg{measure}\}
+\end{docspecdef}
+
+With the commands \doccmd{SetPlaneWidth} and \doccmd{SetPlaneHeight} the default size of the planes can be modified.
+
+
+
+
+\chapter{Troubleshooting and Support}
+\label{chap:troubleshooting}
+
+\section{\pkg Website}\label{sec:website}
+The website for the \pkg packages is located at
+\url{https://github.com/hackl/tikz-network}. There, you'll find the actual version of the source code, a bug tracker, and the documentation.
+
+\section{Getting Help}\label{sec:getting-help}
+If you've encountered a problem with one of the \pkg commands, have a
+question, or would like to report a bug, please send an email to me or visit our website.
+
+To help me troubleshoot the problem more quickly, please try to compile your
+document using the \docclsopt{debug} class option and send the generated
+\texttt{.log} file to the mailing list with a brief description of the problem.
+
+
+\section{Errors, Warnings, and Informational Messages}\label{sec:tl-messages}
+The following is a list of all of the errors, warnings, and other messages generated by the \pkg classes and a brief description of their meanings.
+\index{error messages}\index{warning messages}\index{debug messages}
+
+% Errors
+\docmsg{Error: ! TeX capacity exceeded, sorry [main memory size=5000000].}{%
+The considered network is to large and \texttt{pdflatex} runs out of memory. This problem can be solved by using \texttt{lualatex} or \texttt{xetex} instead.}
+
+\section{Package Dependencies}\label{sec:dependencies}
+The following is a list of packages that the \pkg package rely upon. Packages marked with an asterisk are optional.
+\begin{multicols}{2}
+ \begin{itemize}
+ \item etex
+ \item xifthen
+ \item xkeyval
+ \item datatool
+ \item tikz
+ \begin{itemize}
+ \item arrows
+ \item positioning
+ \item 3d
+ \item fit
+ \item calc
+ \item backgrounds
+ \end{itemize}
+ \end{itemize}
+\end{multicols}
+
+\appendix
+\chapter{ToDo}
+\label{chap:todo}
+
+\section{Code to fix}
+\begin{itemize}
+\item change default entries for Boolean options in the vertices file.
+\end{itemize}
+
+\section{Documentation}
+\begin{itemize}
+\item add indices to the manual.
+\item extended tutorial/example to the document.
+\item clean-up and document the .sty file.
+\end{itemize}
+
+\section{Features}
+\begin{itemize}
+\item add a spherical coordinate system
+\end{itemize}
+
+\section{Add-ons}
+\begin{itemize}
+\item add QGIS to tikz-network compiler
+\end{itemize}
+
+
+\chapter{Add-ons}
+\label{chap:todo}
+
+\section{Python networks to \tikzsym with network2tikz}
+\label{sec:python_to_tikz}
+
+\subsection{Introduction}
+
+\texttt{\href{https://github.com/hackl/network2tikz}{network2tikz}} is a Python tool for converting network visualizations into \pkg figures, for native inclusion into your LaTeX documents.
+
+\texttt{network2tikz} works with Python 3 and supports (currently) the following Python network modules:
+
+\begin{itemize}
+\item \texttt{\href{https://github.com/hackl/cnet}{cnet}}
+\item \texttt{\href{http://igraph.org/python/}{python-igraph}}
+\item \texttt{\href{https://networkx.github.io/}{networkx}}
+\item \texttt{\href{https://github.com/IngoScholtes/pathpy}{pathpy}}
+\item default node/edge lists
+\end{itemize}
+
+The output of \texttt{network2tikz} is a \pkg figure. Because you are not only getting an image of your network, but also the LaTeX source file, you can easily post-process the figures (e.g. adding drawings, texts, equations,...).
+
+Since \textit{a picture is worth a thousand words} a small example:
+
+\begin{marginfigure}[65mm]
+\centering
+ \begin{tikzpicture}[scale=.8]
+ %\clip (0,0) rectangle (6,6);
+ \Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}
+ \Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}
+ \Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}
+ \Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}
+ \Edge[,bend=-8.531](a)(c)
+ \Edge[,bend=-8.531](c)(d)
+ \Edge[,bend=-8.531](d)(b)
+ \Edge[,bend=-8.531](a)(b)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspeca}
+\begin{lstlisting}
+#!/usr/bin/python -tt
+# -*- coding: utf-8 -*-
+
+nodes = ['a','b','c','d']
+edges = [('a','b'), ('a','c'), ('c','d'),('d','b')]
+gender = ['f', 'm', 'f', 'm']
+colors = {'m': 'blue', 'f': 'red'}
+
+style = {}
+style['node_label'] = ['Alice', 'Bob', 'Claire', 'Dennis']
+style['node_color'] = [colors[g] for g in gender]
+style['node_opacity'] = .5
+style['edge_curved'] = .1
+
+from network2tikz import plot
+plot((nodes,edges),'network.tex',**style)
+\end{lstlisting}
+\end{docspeca}
+
+(see above) gives
+
+\begin{docspeca}
+\begin{lstlisting}
+\documentclass{standalone}
+\usepackage{tikz-network}
+\begin{document}
+\begin{tikzpicture}
+\clip (0,0) rectangle (6,6);
+\Vertex[x=0.785,y=2.375,color=red,opacity=0.5,label=Alice]{a}
+\Vertex[x=5.215,y=5.650,color=blue,opacity=0.5,label=Bob]{b}
+\Vertex[x=3.819,y=0.350,color=red,opacity=0.5,label=Claire]{c}
+\Vertex[x=4.654,y=2.051,color=blue,opacity=0.5,label=Dennis]{d}
+\Edge[,bend=-8.531](a)(c)
+\Edge[,bend=-8.531](c)(d)
+\Edge[,bend=-8.531](d)(b)
+\Edge[,bend=-8.531](a)(b)
+\end{tikzpicture}
+\end{document}
+\end{lstlisting}
+\end{docspeca}
+
+Tweaking the plot is straightforward and can be done as part of your LaTeX workflow.
+
+
+\subsection{Installation}
+
+\texttt{network2tikz} is available from the \href{https://pypi.org/project/network2tikz/}{Python Package Index}, so simply type
+
+\begin{docspeca}
+\begin{lstlisting}
+pip install -U network2tikz
+\end{lstlisting}
+\end{docspeca}
+
+to install/update. If your are intersted in the development version of the module check out the \href{https://github.com/hackl/network2tikz}{github repository}.
+
+\subsection{Usage}
+
+\begin{enumerate}
+\item Generate, manipulation, and study of the structure, dynamics, and functions of your complex networks as usual, with your preferred python module.
+
+\item Instead of the default plot functions (e.g. \texttt{igraph.plot()} or \texttt{networkx.draw()}) invoke \texttt{network2tikz} by
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(G,'mytikz.tex')
+\end{lstlisting}
+\end{docspeca}
+
+to store your network visualisation as the TikZ file \texttt{mytikz.tex}. Load the module with:
+
+\begin{docspeca}
+\begin{lstlisting}
+from network2tikz import plot
+\end{lstlisting}
+\end{docspeca}
+
+\textbf{Advanced usage:}
+
+Of course, you always can improve your plot by manipulating the generated LaTeX file, but why not do it directly in Python? To do so, all visualization options available in \pkg are also implemented in \texttt{network2tikz}. The appearance of the plot can be modified by keyword arguments.\footnote{For a detailed explanation, please see Section \ref{sec:plot_function}.}
+
+\begin{docspeca}
+\begin{lstlisting}
+my_style = {}
+plot(G,'mytikz.tex',**my_style)
+\end{lstlisting}
+\end{docspeca}
+
+The arguments follow the options described above in the manual.
+
+Additionally, if you are more interested in the final output and not only the \texttt{.tex} file, used
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(G,'mypdf.pdf')
+\end{lstlisting}
+\end{docspeca}
+
+to save your plot as a pdf, or
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(G)
+\end{lstlisting}
+\end{docspeca}
+
+to create a temporal plot and directly show the result, i.e. similar to the matplotlib function \texttt{show()}. Finally, you can also create a node and edge list, which can be read and easily modified (in a post-processing step) as showd above.
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(G,'mycsv.csv')
+\end{lstlisting}
+\end{docspeca}
+
+\item Compile the figure or add the contents of \texttt{mytikz.tex} into your LaTeX source code. With the option \docopt{standalone}=\docarg{false} only the \tikzsym figure will be saved, which can then be easily included in your \LaTeX~ document via \doccmd{input}\{\texttt{/path/to/mytikz.tex}\}.
+
+\subsection{Simple example}
+
+For illustration purpose, a similar network as in the \href{http://igraph.org/python/doc/tutorial/tutorial.html}{python-igraph tutorial} is used. If you are using another Python network module, and like to follow this example, please have a look at the \href{https://github.com/hackl/network2tikz/tree/master/examples}{provided examples}.
+
+\end{enumerate}
+
+
+Create network object and add some edges.
+
+\begin{docspeca}
+\begin{lstlisting}
+#!/usr/bin/python -tt
+# -*- coding: utf-8 -*-
+
+import igraph
+from network2tikz import plot
+
+net = igraph.Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3),
+ (5,6), (6,6)],directed=True)
+\end{lstlisting}
+\end{docspeca}
+
+Adding node and edge properties.
+
+\begin{docspeca}
+\begin{lstlisting}
+net.vs["name"] = ["Alice", "Bob", "Claire", "Dennis", "Esther", "Frank", "George"]
+net.vs["age"] = [25, 31, 18, 47, 22, 23, 50]
+net.vs["gender"] = ["f", "m", "f", "m", "f", "m", "m"]
+net.es["is_formal"] = [False, False, True, True, True, False, True, False,
+ False, False]
+\end{lstlisting}
+\end{docspeca}
+
+Already now the network can be plotted.
+\begin{marginfigure}[5mm]
+\centering
+ \begin{tikzpicture}[scale=.8]
+%\clip (0,0) rectangle (6,6);
+\Vertex[x=3.629,y=0.350]{a}
+\Vertex[x=3.449,y=5.457]{b}
+\Vertex[x=2.647,y=5.650]{c}
+\Vertex[x=1.013,y=3.477]{d}
+\Vertex[x=4.987,y=2.834]{e}
+\Vertex[x=4.490,y=5.182]{f}
+\Vertex[x=2.808,y=4.470]{g}
+\Edge[](a)(b)
+\Edge[](a)(c)
+\Edge[](c)(d)
+\Edge[](d)(e)
+\Edge[](e)(c)
+\Edge[](c)(f)
+\Edge[](f)(a)
+\Edge[](f)(g)
+\Edge[](g)(d)
+\Edge[](g)(g)
+ \end{tikzpicture}
+\end{marginfigure}
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(net)
+\end{lstlisting}
+\end{docspeca}
+
+Per default, the node positions are assigned uniform random. In order to create a layout, the layout methods of the network packages can be used. Or the position of the nodes can be directly assigned, in form of a dictionary, where the key is the node id and the value is a tuple of the node position in $x$ and $y$.
+
+\begin{docspeca}
+\begin{lstlisting}
+layout = {0: (4.3191, -3.5352), 1: (0.5292, -0.5292),
+ 2: (8.6559, -3.8008), 3: (12.4117, -7.5239),
+ 4: (12.7, -1.7069), 5: (6.0022, -9.0323),
+ 6: (9.7608, -12.7)}
+plot(net,layout=layout)
+\end{lstlisting}
+\end{docspeca}
+
+\begin{marginfigure}[5mm]
+\centering
+ \begin{tikzpicture}[scale=.8]
+\clip (0,0) rectangle (6,6);
+\Vertex[x=2.000,y=4.341]{a}
+\Vertex[x=0.350,y=5.650]{b}
+\Vertex[x=3.889,y=4.225]{c}
+\Vertex[x=5.524,y=2.604]{d}
+\Vertex[x=5.650,y=5.137]{e}
+\Vertex[x=2.733,y=1.947]{f}
+\Vertex[x=4.370,y=0.350]{g}
+\Edge[](a)(b)
+\Edge[](a)(c)
+\Edge[](c)(d)
+\Edge[](d)(e)
+\Edge[](e)(c)
+\Edge[](c)(f)
+\Edge[](f)(a)
+\Edge[](f)(g)
+\Edge[](g)(d)
+\Edge[](g)(g)
+ \end{tikzpicture}
+\end{marginfigure}
+
+
+This should open an external pdf viewer showing a visual representation of the network, something like the one on the following figure:
+
+We can simply re-using the previous layout object here, but we also specified that we need a bigger plot ($8 \times 8$ cm) and a larger margin around the graph to fit the self loop and potential labels (1 cm).\footnote{Per default, all size values are based on cm, and all line widths are defined in pt units. With the general option \docopt{units} this can be changed, see Section \ref{sec:plot_function}.}
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(net, layout=layout, canvas=(8,8), margin=1)
+\end{lstlisting}
+\end{docspeca}
+
+\begin{marginfigure}[5mm]
+\centering
+ \begin{tikzpicture}[scale=.8]
+%\clip (0,0) rectangle (8.0,8.0);
+\Vertex[x=2.868,y=5.518]{a}
+\Vertex[x=1.000,y=7.000]{b}
+\Vertex[x=5.006,y=5.387]{c}
+\Vertex[x=6.858,y=3.552]{d}
+\Vertex[x=7.000,y=6.419]{e}
+\Vertex[x=3.698,y=2.808]{f}
+\Vertex[x=5.551,y=1.000]{g}
+\Edge[](a)(b)
+\Edge[](a)(c)
+\Edge[](c)(d)
+\Edge[](d)(e)
+\Edge[](e)(c)
+\Edge[](c)(f)
+\Edge[](f)(a)
+\Edge[](f)(g)
+\Edge[](g)(d)
+\Edge[](g)(g)
+ \end{tikzpicture}
+\end{marginfigure}
+
+In to keep the properties of the visual representation of your network separate from the network itself. You can simply set up a Python dictionary containing the keyword arguments you would pass to \texttt{plot} and then use the double asterisk (\texttt{**}) operator to pass your specific styling attributes to \texttt{plot}:
+
+\begin{docspeca}
+\begin{lstlisting}
+color_dict = {'m': 'blue', 'f': 'red'}
+visual_style = {}
+
+# Node options
+visual_style['vertex_size'] = .5
+visual_style['vertex_color'] = [color_dict[g] for g in net.vs['gender']]
+visual_style['vertex_opacity'] = .7
+visual_style['vertex_label'] = net.vs['name']
+visual_style['vertex_label_position'] = 'below'
+
+# Edge options
+visual_style['edge_width'] = [1 + 2 * int(f) for f in net.es('is_formal')]
+visual_style['edge_curved'] = 0.1
+
+# General options and plot command.
+visual_style['layout'] = layout
+visual_style['canvas'] = (8,8)
+visual_style['margin'] = 1
+
+# Plot command
+plot(net,**visual_style)
+\end{lstlisting}
+\end{docspeca}
+
+\begin{marginfigure}[5mm]
+\centering
+ \begin{tikzpicture}[scale=.8]
+%\clip (0,0) rectangle (8.0,8.0);
+\Vertex[x=2.868,y=5.518,size=0.5,color=red,opacity=0.7,label=Alice,position=below]{a}
+\Vertex[x=1.000,y=7.000,size=0.5,color=blue,opacity=0.7,label=Bob,position=below]{b}
+\Vertex[x=5.006,y=5.387,size=0.5,color=red,opacity=0.7,label=Claire,position=below]{c}
+\Vertex[x=6.858,y=3.552,size=0.5,color=blue,opacity=0.7,label=Dennis,position=below]{d}
+\Vertex[x=7.000,y=6.419,size=0.5,color=red,opacity=0.7,label=Esther,position=below]{e}
+\Vertex[x=3.698,y=2.808,size=0.5,color=blue,opacity=0.7,label=Frank,position=below]{f}
+\Vertex[x=5.551,y=1.000,size=0.5,color=blue,opacity=0.7,label=George,position=below]{g}
+\Edge[,lw=1.0,bend=-8.531,Direct](a)(b)
+\Edge[,lw=1.0,bend=-8.531,Direct](a)(c)
+\Edge[,lw=3.0,bend=-8.531,Direct](c)(d)
+\Edge[,lw=3.0,bend=-8.531,Direct](d)(e)
+\Edge[,lw=3.0,bend=-8.531,Direct](e)(c)
+\Edge[,lw=1.0,bend=-8.531,Direct](c)(f)
+\Edge[,lw=3.0,bend=-8.531,Direct](f)(a)
+\Edge[,lw=1.0,bend=-8.531,Direct](f)(g)
+\Edge[,lw=1.0,bend=-8.531,Direct](g)(g)
+\Edge[,lw=1.0,bend=-8.531,Direct](g)(d)
+ \end{tikzpicture}
+\end{marginfigure}
+
+
+Beside showing the network, we can also generate the latex source file, which can be used and modified later on. This is done by adding the output file name with the ending \texttt{'.tex'}.
+
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(net,'network.tex',**visual_style)
+\end{lstlisting}
+\end{docspeca}
+
+produces
+
+\begin{fullwidth}
+\begin{minipage}{17cm}
+\begin{docspeca}
+\begin{lstlisting}
+\documentclass{standalone}
+\usepackage{tikz-network}
+\begin{document}
+\begin{tikzpicture}
+\clip (0,0) rectangle (8.0,8.0);
+\Vertex[x=2.868,y=5.518,size=0.5,color=red,opacity=0.7,label=Alice,position=below]{a}
+\Vertex[x=1.000,y=7.000,size=0.5,color=blue,opacity=0.7,label=Bob,position=below]{b}
+\Vertex[x=5.006,y=5.387,size=0.5,color=red,opacity=0.7,label=Claire,position=below]{c}
+\Vertex[x=6.858,y=3.552,size=0.5,color=blue,opacity=0.7,label=Dennis,position=below]{d}
+\Vertex[x=7.000,y=6.419,size=0.5,color=red,opacity=0.7,label=Esther,position=below]{e}
+\Vertex[x=3.698,y=2.808,size=0.5,color=blue,opacity=0.7,label=Frank,position=below]{f}
+\Vertex[x=5.551,y=1.000,size=0.5,color=blue,opacity=0.7,label=George,position=below]{g}
+\Edge[,lw=1.0,bend=-8.531,Direct](a)(b)
+\Edge[,lw=1.0,bend=-8.531,Direct](a)(c)
+\Edge[,lw=3.0,bend=-8.531,Direct](c)(d)
+\Edge[,lw=3.0,bend=-8.531,Direct](d)(e)
+\Edge[,lw=3.0,bend=-8.531,Direct](e)(c)
+\Edge[,lw=1.0,bend=-8.531,Direct](c)(f)
+\Edge[,lw=3.0,bend=-8.531,Direct](f)(a)
+\Edge[,lw=1.0,bend=-8.531,Direct](f)(g)
+\Edge[,lw=1.0,bend=-8.531,Direct](g)(g)
+\Edge[,lw=1.0,bend=-8.531,Direct](g)(d)
+\end{tikzpicture}
+\end{document}
+\end{lstlisting}
+\end{docspeca}
+\end{minipage}
+\end{fullwidth}
+
+Instead of the tex file, a node and edge list can be generates, which can also be used with the library.
+
+
+\begin{docspeca}
+\begin{lstlisting}
+plot(net,'network.csv',**visual_style)
+\end{lstlisting}
+\end{docspeca}
+
+The node list \texttt{network\_nodes.csv}.
+
+\begin{docspeca}
+\begin{lstlisting}
+id,x,y,size,color,opacity,label,position
+a,2.868,5.518,0.5,red,0.7,Alice,below
+b,1.000,7.000,0.5,blue,0.7,Bob,below
+c,5.006,5.387,0.5,red,0.7,Claire,below
+d,6.858,3.552,0.5,blue,0.7,Dennis,below
+e,7.000,6.419,0.5,red,0.7,Esther,below
+f,3.698,2.808,0.5,blue,0.7,Frank,below
+g,5.551,1.000,0.5,blue,0.7,George,below
+\end{lstlisting}
+\end{docspeca}
+
+The edge list \texttt{network\_edges.csv}.
+
+\begin{docspeca}
+\begin{lstlisting}
+u,v,lw,bend,Direct
+a,b,1.0,-8.531,true
+a,c,1.0,-8.531,true
+c,d,3.0,-8.531,true
+d,e,3.0,-8.531,true
+e,c,3.0,-8.531,true
+c,f,1.0,-8.531,true
+f,a,3.0,-8.531,true
+f,g,1.0,-8.531,true
+g,g,1.0,-8.531,true
+g,d,1.0,-8.531,true
+\end{lstlisting}
+\end{docspeca}
+
+\subsection{The plot function in detail}
+\label{sec:plot_function}
+
+\begin{docspecdef}
+ \texttt{network2tikz.plot}(\docarg{network}, \docopt{filename}=\docarg{None}, \docopt{type}= \docarg{None}, \docopt{**kwds})
+\end{docspecdef}
+
+\textbf{Parameters}
+
+\begin{description}
+\item[network] : network object
+
+Network to be drawn. The network can be a \texttt{cnet}, \texttt{networkx}, \texttt{igraph}, \texttt{pathpy} object, or a tuple of a node list and edge list.
+
+\item[filename] : file, string or None, optional (default = None)
+
+ File or filename to save. The file ending specifies the output. i.e. is the file ending with \texttt{.tex} a tex file will be created; if the file ends with '.pdf' a pdf is created; if the file ends with \texttt{.csv}, two csv files are generated \texttt{filename\_nodes.csv} and \texttt{filename\_edges.csv}. If the filename is a tuple of strings, the first entry will be used to name the node list and the second entry for the edge list; and if no ending and no type is defined a temporary pdf file is compiled and shown.
+
+\item[type] : str or None, optional (default = None)
+
+ Type of the output file. If no ending is defined trough the filename, the type of the output file can be specified by the type option. Currently the following output types are supported: \texttt{'tex'}, \texttt{'pdf'}, \texttt{'csv'} and \texttt{'dat'}.
+
+\item[kwds] : keyword arguments, optional (default= no attributes)
+
+ Attributes used to modify the appearance of the plot. For details see below.
+
+\end{description}
+
+\textbf{Keyword arguments for node styles}
+
+\begin{description}
+\item[node\_size] : size of the node. The default is 0.6 cm.
+
+\item[node\_color] : color of the nodes. The default is light blue. Colors can
+ be specified either by common color names, or by 3-tuples of floats
+ (ranging between 0 and 255 for the R, G and B components).
+
+\item[node\_opacity] : opacity of the nodes. The default is 1. The range of the
+ number lies between 0 and 1. Where 0 represents a fully transparent fill
+ and 1 a solid fill.
+
+\item[node\_label] : labels drawn next to the nodes.
+
+\item[node\_label\_position] : Per default the position of the label is in the
+ center of the node. Classical \tikzsym commands can be used to change the
+ position of the label. Instead, using such command, the position can be
+ determined via an angle, by entering a number between -360 and 360. The
+ origin (0) is the $y$ axis. A positive number change the position counter
+ clockwise, while a negative number make changes clockwise.
+
+\item[node\_label\_distance] : distance between the node and the label.
+
+\item[node\_label\_color] : color of the label.
+
+\item[node\_label\_size] : font size of the label.
+
+\item[node\_shape] : shape of the vertices. Possibilities are:
+ 'circle', 'rectangle', 'triangle', and any other Tikz shape
+
+\item[node\_style] : Any other Tikz style option or command can be entered via
+ the option style. Most of these commands can be found in the "TikZ and
+ PGF Manual". Contain the commands additional options (e.g. shading =
+ ball), then the argument for the style has to be between \{ \} brackets.
+
+\item[node\_layer] : the node can be assigned to a specific layer.
+
+\item[node\_label\_off] : is Boolean option which suppress all labels.
+
+\item[node\_label\_as\_id] : is a Boolean option which assigns the node id as label.
+
+\item[node\_math\_mode] : is a Boolean option which transforms the labels into
+ mathematical expressions without using the \$ \$ environment.
+
+\item[node\_pseudo] : is a Boolean option which creates a pseudo node, where only
+ the node name and the node coordinate will be provided.
+\end{description}
+
+\textbf{Keyword arguments for edge styles}
+
+\begin{description}
+\item[edge\_width] : width of the edges. The default unit is point (pt).
+
+\item[edge\_color] : color of the edges. The default is gray. Colors can
+ be specified either by common color names, or by 3-tuples of floats
+ (ranging between 0 and 255 for the R, G and B components).
+
+\item[edge\_opacity] : opacity of the edges. The default is 1. The range of the
+ number lies between 0 and 1. Where 0 represents a fully transparent fill
+ and 1 a solid fill.
+
+\item[edge\_curved] : whether the edges should be curved. Positive numbers
+ correspond to edges curved in a counter-clockwise direction, negative
+ numbers correspond to edges curved in a clockwise direction. Zero
+ represents straight edges.
+
+\item[edge\_label] : labels drawn next to the edges.
+
+\item[edge\_label\_position] : Per default the label is positioned in between
+ both nodes in the center of the line. Classical Tikz commands can be used to
+ change the position of the label.
+
+\item[edge\_label\_distance] : The label position between the nodes can be
+ modified with the distance option. Per default the label is centered
+ between both nodes. The position is expressed as the percentage of the
+ length between the nodes, e.g. of distance = 0.7, the label is placed at
+ 70\% of the edge length away of Vertex i.
+
+\item[edge\_label\_color] : color of the label.
+
+\item[edge\_label\_size] : font size of the label.
+
+\item[edge\_style] : Any other Tikz style option or command can be entered via
+ the option style. Most of these commands can be found in the "TikZ and
+ PGF Manual". Contain the commands additional options (e.g. shading =
+ ball), then the argument for the style has to be between \{ \} brackets.
+
+\item[edge\_arrow\_size] : arrow size of the edges.
+
+\item[edge\_arrow\_width] : width of the arrowhead on the edge.
+
+\item[edge\_loop\_size] : modifies the length of the edge. The measure value has
+ to be insert together with its units. Per default the loop size is 1 cm.
+
+\item[edge\_loop\_position] : The position of the self-loop is defined via the
+ rotation angle around the node. The origin (0) is the y axis. A positive
+ number change the loop position counter clockwise, while a negative
+ number make changes clockwise.
+
+\item[edge\_loop\_shape] : The shape of the self-loop is defined by the enclosing
+ angle. The shape can be changed by decreasing or increasing the argument
+ value of the loop shape option.
+
+\item[edge\_directed] : is a Boolean option which transform edges to directed
+ arrows. If the network is already defined as directed network this option
+ is not needed, except to turn off the direction for one or more edges.
+
+\item[edge\_math\_mode] : is a Boolean option which transforms the labels into
+ mathematical expressions without using the \$ \$ environment.
+
+\item[edge\_not\_in\_bg] : Per default, the edge is drawn on the background layer
+ of the tikz picture. I.e. objects which are created after the edges
+ appear also on top of them. To turn this off, the option edge\_not\_in\_bg
+ has to be enabled.
+
+\end{description}
+
+\textbf{Keyword arguments for layout styles}
+
+\begin{description}
+\item[layout] : dict or string, optional (default = None)
+ A dictionary with the node positions on a 2-dimensional plane. The
+ key value of the dict represents the node id while the value
+ represents a tuple of coordinates (e.g. n = (x,y)). The initial
+ layout can be placed anywhere on the 2-dimensional plane.
+
+ Instead of a dictionary, the algorithm used for the layout can be defined
+ via a string value. Currently, supported are:
+
+ \begin{description}
+ \item[Random layout], where the nodes are uniformly at random placed in the
+ unit square. This algorithm can be enabled with the keywords:
+ ``Random'', ``random'', ``rand'', or \texttt{None}.
+
+ \item[Fruchterman-Reingold force-directed algorithm]. In this algorithm, the
+ nodes are represented by steel rings and the edges are springs between
+ them. The attractive force is analogous to the spring force and the
+ repulsive force is analogous to the electrical force. The basic idea is
+ to minimize the energy of the system by moving the nodes and changing
+ the forces between them. This algorithm can be enabled with the
+ keywords: ``Fruchterman-Reingold'', ``fruchterman\_reingold'', ``fr'',
+ ``spring\_layout'', ``spring layout'', ``FR''.
+
+ \end{description}
+
+ \begin{table}[h]
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{ll}
+ \toprule
+ Keys & Other valid keys \\
+ \midrule
+ Random & Random, random, rand, None \\
+ Fruchterman-Reingold & Fruchterman-Reingold, fruchterman\_reingold, fr \\
+ & spring\_layout, spring layout, FR \\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \end{center}
+ \caption{Algorithms keyword naming convention.}
+ \label{tab:algo_keywords}
+\end{table}
+
+\item[force] : float, optional (default = None)
+ Optimal distance between nodes. If None the distance is set to
+ $1/\sqrt{n}$ where $n$ is the number of nodes. Increase this value to move
+ nodes farther apart.
+
+\item[positions] : dict or None optional (default = None)
+ Initial positions for nodes as a dictionary with node as keys and values
+ as a coordinate list or tuple. If None, then use random initial
+ positions.
+
+\item[fixed] : list or None, optional (default = None)
+ Nodes to keep fixed at initial position.
+
+\item[iterations] : int, optional (default = 50)
+ Maximum number of iterations taken
+
+\item[threshold]: float, optional (default = 1e-4)
+ Threshold for relative error in node position changes. The iteration
+ stops if the error is below this threshold.
+
+\item[weight] : string or None, optional (default = None)
+ The edge attribute that holds the numerical value used for the edge
+ weight. If None, then all edge weights are 1.
+
+\item[dimension] : int, optional (default = 2)
+ Dimension of layout. Currently, only plots in 2 dimension are supported.
+
+\item[seed] : int or None, optional (default = None)
+ Set the random state for deterministic node layouts. If int, \texttt{seed} is
+ the seed used by the random number generator, if None, the a random seed
+ by created by the numpy random number generator is used.
+\end{description}
+
+\textbf{Keyword arguments for general options}
+
+\begin{description}
+\item[units] : string or tuple of strings, optional (default = ('cm','pt'))
+ Per default, all size values are based on cm, and all line widths are
+ defined in pt units. Whit this option the input units can be
+ changed. Currently supported are: Pixel 'px', Points 'pt',
+ Millimeters 'mm', and Centimeters 'cm'. If a single value is entered as
+ unit all inputs have to be defined using this unit. If a tuple of units
+ is given, the sizes are defined with the first entry the line widths with
+ the second entry.
+
+\item[layout] : dict
+ A dictionary with the node positions on a 2-dimensional plane. The
+ key value of the dict represents the node id while the value
+ represents a tuple of coordinates (e.g. n = (x,y)). The initial
+ layout can be placed anywhere on the 2-dimensional plane.
+
+\item[margins] : None, int, float or dict, optional (default = None)
+ The margins define the 'empty' space from the canvas border. If no
+ margins are defined, the margin will be calculated based on the maximum
+ node size, to avoid clipping of the nodes. If a single int or float is
+ defined all margins using this distances. To define different the margin
+ sizes for all size a dictionary with in the form of
+ \texttt{\{'top':2,'left':1,'bottom':2,'right':.5\}} has to be used.
+
+\item[canvas] : None, tuple of int or floats, optional (default = (6,6))
+ Canvas or figure\_size defines the size of the plot. The values entered as
+ a tuple of numbers where the first number is width of the figure and the
+ second number is the height of the figure. If the option \texttt{units} is not
+ used the size is specified in cm. Per default the canvas is $6 \times 6$ cm.
+
+\item[keep\_aspect\_ratio] : bool, optional (default = True)
+ Defines whether to keep the aspect ratio of the current layout. If
+ \texttt{False}, the layout will be rescaled to fit exactly into the
+ available area in the canvas (i.e. removed margins). If \texttt{True}, the
+ original aspect ratio of the layout will be kept and it will be
+ centered within the canvas.
+
+\item[standalone] : bool, optional (default = True)
+ If this option is true, a standalone latex file will be created. i.e. the
+ figure can be compiled from this output file. If standalone is false,
+ only the tikz environment is stored in the tex file, and can be imported
+ in an existing tex file.
+
+\item[clean] : bool, optional (default = True)
+ Whether non-pdf files created that are created during compilation should
+ be removed.
+
+\item[clean\_tex] : bool, optional (default = True)
+ Also remove the generated tex file.
+
+\item[compiler] : str or None, optional (default = None)
+ The name of the LaTeX compiler to use. If it is None, cnet will choose a
+ fitting one on its own. Starting with \texttt{latexmk} and then \texttt{pdflatex}.
+
+\item[compiler\_args] : list or None, optional (default = None)
+ Extra arguments that should be passed to the LaTeX compiler. If this is
+ None it defaults to an empty list.
+
+\item[silent] : bool, optional (default = True)
+ Whether to hide compiler output or not.
+
+\end{description}
+
+\textbf{Keyword naming convention}
+
+In the style dictionary multiple keywords can be used to address attributes. These keywords will be converted to an unique key word, used in the remaining code. This allows to keep the keywords used in \texttt{igraph}.
+
+\begin{table}[h]\index{Edge!options}
+ \footnotesize%
+ \begin{center}
+ \begin{tabular}{ll}
+ \toprule
+ Keys & Other valid keys \\
+ \midrule
+ node & vertex, v, n \\
+ edge & link, l, e \\
+ margins & margin \\
+ canvas & bbox, figure\_size \\
+ units & unit \\
+ fixed & fixed\_nodes, fixed\_vertices, fixed\_n, fixed\_v\\
+ positions & initial\_positions, node\_positions, vertex\_positions, n\_positions, v\_positions\\
+ \bottomrule
+ \end{tabular}
+ \scriptsize
+ \end{center}
+ \caption{Keyword naming convention.}
+ \label{tab:keywords}
+\end{table}
+
+
+%%
+% The back matter contains appendices, bibliographies, indices, glossaries, etc.
+
+
+
+
+
+
+
+\backmatter
+
+\bibliography{sample-handout}
+\bibliographystyle{plainnat}
+
+
+\printindex
+
+\end{document}
+
+% =============================================================================
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-opm/LICENSE b/graphics/pgf/contrib/tikz-opm/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-opm/LICENSE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/graphics/pgf/contrib/tikz-opm/README b/graphics/pgf/contrib/tikz-opm/README
new file mode 100644
index 0000000000..352ca2674c
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-opm/README
@@ -0,0 +1,12 @@
+[[tikz-opm]]
+tikz-opm
+--------
+
+A tikz library for OPM diagrams.
+
+
+See tikz-opm.pdf for how to use it.
+
+The git repo for tikz-opm is at
+ git@github.com:lehoff/tikz-opm.git
+feel free to fork and send pull requests.
diff --git a/graphics/pgf/contrib/tikz-opm/tikz-opm.pdf b/graphics/pgf/contrib/tikz-opm/tikz-opm.pdf
new file mode 100644
index 0000000000..bdd9d9e955
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-opm/tikz-opm.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-opm/tikz-opm.sty b/graphics/pgf/contrib/tikz-opm/tikz-opm.sty
new file mode 100644
index 0000000000..e67a006c54
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-opm/tikz-opm.sty
@@ -0,0 +1,178 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-opm}[2014/01/23 v0.1.1 OPM Digrams]
+
+
+\RequirePackage{tikz}
+\usetikzlibrary{shapes.geometric}
+\usetikzlibrary{calc, positioning}
+\usepgflibrary{shapes.multipart, arrows}
+
+\RequirePackage{makeshape}
+\RequirePackage{amsmath}
+
+% Keys for tikzopm triangles
+%
+% /pgf/tikzopmGeneralization : side length (of the triangle)
+\pgfkeys{/opm/.cd,
+ side length/.code=#1,
+ side length/.default=15pt,
+ side length/.initial=15pt}
+%\pgfkeys{/opm/side length=12pt}
+
+\def\defaulttriangleanchors{%
+ \savedanchor{\upper}{%
+ \pgfpoint{0pt}{.5\pgf@ya}%
+ \mincorrect{\pgf@y}{\pgfshapeminheight}%
+ \advance\pgf@y by -2\pgfshapeouterysep%
+ }%
+
+ \anchor{north}{\upper}%
+ \anchor{north west}{\upper}%
+ \anchor{north east}{\upper}%
+ \anchor{south west}{\pgfpoint{-7.5pt}{-.5\pgf@ya}}%
+ \anchor{south}{\pgfpoint{0pt}{-.5\pgf@ya}}%
+ \anchor{west}{\pgfpoint{-7.5pt}{-.5\pgf@ya}}%
+ \anchor{south east}{\pgfpoint{7.5pt}{-.5\pgf@ya}}%
+ \anchor{east}{\pgfpoint{7.5pt}{-.5\pgf@ya}}%
+ \anchor{center}{\pgfpointorigin}%
+}
+
+\def\defaulttrianglelengths{%
+ \pgfmathsetlength{\pgf@xa}{15pt}%\pgfkeysvalueof{/opm/side length}}%
+ \pgfmathsetlength{\pgf@ya}{ sqrt(3) * \pgf@xa / 2 }%
+}
+
+\def\trianglepath{%
+ \defaulttrianglelengths%
+ \pgfpathmoveto{\pgfpoint{0pt}{\pgf@ya}}%
+ \pgfpathlineto{\pgfpoint{-.5\pgf@xa}{0}}%
+ \pgfpathlineto{\pgfpoint{.5\pgf@xa}{0}}%
+ \pgfpathclose%
+ }
+
+\pgfdeclareshape{tikzopmGeneralization}%
+{ \nodeparts{}% this is a symbol only
+ %% xa: length
+ %% ya: height
+ \defaulttrianglelengths%
+ \defaulttriangleanchors%
+
+ %% draw the triangle
+ \backgroundpath{
+ \trianglepath%
+ \pgfusepath{stroke}%
+ }%
+}
+
+\pgfdeclareshape{tikzopmAggregation}%
+{ \nodeparts{}%
+ \defaulttrianglelengths%
+ \defaulttriangleanchors%
+
+ \backgroundpath{%
+ \trianglepath%
+ \pgfusepath{fill}}
+}
+
+\pgfdeclareshape{tikzopmExhibition}{%
+ \nodeparts{}%
+ \defaulttrianglelengths%
+ \defaulttriangleanchors%
+
+ \backgroundpath{%
+ \defaulttrianglelengths%
+ \trianglepath\pgfusepath{stroke}%
+ \pgfpathmoveto{\pgfpoint{0pt}{.7\pgf@ya}}%
+ \pgfpathlineto{\pgfpoint{-4pt}{.15\pgf@ya}}%
+ \pgfpathlineto{\pgfpoint{4pt}{.15\pgf@ya}}%
+ \pgfpathclose\pgfusepath{fill}%
+ }%
+}
+
+\pgfdeclareshape{tikzopmInstantiation}{%
+ \nodeparts{}%
+ \defaulttrianglelengths%
+ \defaulttriangleanchors%
+
+ \backgroundpath{%
+ \defaulttrianglelengths%
+ \trianglepath\pgfusepath{stroke}%
+ \pgfpathmoveto{\pgfpoint{0pt}{0pt}}%
+ \pgfpathlineto{\pgfpoint{-4pt}{.5\pgf@ya}}%
+ \pgfpathlineto{\pgfpoint{4pt}{.5\pgf@ya}}%
+ \pgfpathclose\pgfusepath{fill}%
+ }%
+}
+
+% \pgfdeclareshap{tikzopmInstance}{%
+% \nodeparts{text,instanceof}%
+% %
+% % Anchors
+% %
+% \savedanchor\centerpoint{%
+% \pgf@x=.5\wd\gpfnodeparttextbox%
+% \pgfmathsetlength{\pgf@y}{\pgfkeysvalueof{/pgf/inner ysep}}%
+% \pgf@y=-\pgf@y%
+% \advance\pgf@y by-\dp\pgfnodeparttextbox%
+% \advance\pgf@y by-.5\pgflinewidth%
+% }%
+
+% \newcommand{\opmInstance}[4]{%
+% \node [shape=rectangle, draw, font=\scriptsize, #4] (#1-inner) {#3};%
+% \node [shape=rectangle, draw, minimum height=25pt,
+% at=(#1-inner.northwest] (#1) {#2};%
+% }
+
+\newcommand{\opmInstance}[2]{%
+ \ensuremath{\genfrac{}{}{0pt}{}{\text{#1}}{\text{\tiny #2}}}}
+
+\tikzset{every edge/.style={draw, thick}}
+\tikzset{opmentity/.style={draw, thick}}
+
+
+\tikzset{opminstance/.style={shape=rectangle, draw}}
+\tikzset{opmobject/.style={shape=rectangle, opmentity}}
+%\tikzset{opmobjectwithstate/.style={shape=rectangle, opmentity,text depth=8ex}}
+
+\tikzset{opmstate/.style={opmentity, shape=rectangle, rounded corners=6pt}}
+\tikzset{opmprocess/.style={shape=ellipse, opmentity}}
+\tikzset{opmgeneralization/.style={shape=tikzopmGeneralization, draw, yshift=15pt}}
+\tikzset{opmaggregation/.style={shape=tikzopmAggregation, draw, yshift=15pt}}
+\tikzset{opmexhibition/.style={shape=tikzopmExhibition, draw, yshift=15pt}}
+\tikzset{opminstantiation/.style={shape=tikzopmInstantiation, draw, yshift=15pt}}
+
+%% edge styles
+\tikzset{opmrelatesto/.style={-angle 45, draw, thick}}
+\tikzset{opmbidirrelate/.style={left to-left to, draw, thick}}
+
+%% the requires version allows for a more DSL like style
+\tikzset{opminstrument/.style={-o, thick}}
+\tikzset{opmrequires/.style={o-, thick}}
+
+%% the handles version allows for a more DSL like style
+\tikzset{opmagent/.style={-*, thick}}
+\tikzset{opmhandles/.style={-*, thick}}
+
+\tikzset{opminput/.style={-open triangle 45, thick}}
+
+\tikzset{opmoutput/.style={-open triangle 45,thick}}
+
+%% the consumes version allows for a more DSL like style
+\tikzset{opmconsumption/.style={-open triangle 45, thick}}
+\tikzset{opmconsumes/.style={open triangle 45-, thick}}
+
+%% the yields version allows for a more DSL like style
+\tikzset{opmresult/.style={-open triangle 45, thick}}
+\tikzset{opmyields/.style={-open triangle 45, thick}}
+
+%% the affects version allows for a more DSL like style
+\tikzset{opmeffect/.style={open triangle 45-open triangle 45, thick}}
+\tikzset{opmaffects/.style={open triangle 45-open triangle 45, thick}}
+
+\pgfarrowsdeclarecombine*{twoopentriang}{twoopentriang}%
+{open triangle 45}{open triangle 45}
+{open triangle 45}{open triangle 45}
+\tikzset{dbla/.style={postaction={draw,shorten >=-1pt, -open triangle 45}}}
+%% the invkoes version allows for a more DSL like style
+\tikzset{opminvocation/.style={-twoopentriang, thick}}
+\tikzset{opminvokes/.style={-twoopentriang, thick}}
diff --git a/graphics/pgf/contrib/tikz-opm/tikz-opm.tex b/graphics/pgf/contrib/tikz-opm/tikz-opm.tex
new file mode 100644
index 0000000000..c876728b69
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-opm/tikz-opm.tex
@@ -0,0 +1,321 @@
+\documentclass{article}
+
+\usepackage{tikz-opm}
+\usepackage{a4wide}
+\usepackage{etoolbox}
+
+\usepackage[T1]{fontenc}
+\usepackage{dejavu}
+
+\usepackage{showexpl}
+
+\lstset{basicstyle=\ttfamily\small,
+ explpreset={rframe={}}}
+
+\usetikzlibrary{fit}
+
+\title{\texttt{tikz-opm}: creating Object Process Methodology diagrams with Tikz\\
+Version 0.1.1}
+
+\author{Torben Hoffmann \\ e-mail: \texttt{torben.lehoff@gmail.com}}
+
+\begin{document}
+\maketitle
+
+\tikzset{every node/.style={font={\usefont{T1}{DejaVuSerifCondensed-TLF}{m}{n}}}}
+
+\label{sec:tikz-opm:-creating}
+
+
+
+The \texttt{tikz-opm} package allows you to create nice OPM diagrams
+using a number of relatively simple commands.
+
+The package does not attempt to do any clever things - I am not
+clever enough to encode smart placement of things like the aggregation
+symbol below the object it applies to. Sorry.
+
+But it does allow you to most of the important things from OPM
+displayed in your diagram, so that is pretty good.
+
+
+
+First we start out with the picture from the front of the OPM book:
+
+\begin{LTXexample}[caption=OPM book front page,pos=t, varwidth=false]
+\begin{tikzpicture}
+ \node [opmobject] (object) {Object};
+ \node [opmaggregation, below=of object] (object-aggr) {};
+ \path (object) edge (object-aggr);
+ \node [opmobject, below=of object-aggr] (system) {System};
+ \path (object-aggr) edge (system);
+ \node [opmprocess, below left=of system] (commercializing)
+ {Commercializing};
+ \path (system) edge [opmagent] (commercializing);
+ \node [opmaggregation, below=of system] (system-aggr) {};
+ \node [opmobject, below=of system-aggr] (product) {Product};
+ \path (system) edge (system-aggr) edge (product);
+ \path (commercializing) edge[opmoutput] (product.north west);
+ \node [opmgeneralization, below right=25pt of system, xshift=10pt] (system-gen) {};
+ \node [opmobject, below=15pt of system-gen] (function) {Function};
+ \draw [thick] (system.east) -| (system-gen.north);
+ \path (system-gen.south) edge (function);
+ \node [opmprocess, below=of function, yshift=-20pt] (benefitting) {Benefitting};
+ \path (function) edge[opmagent] (benefitting);
+ \node [opmobject, right=of function] (beneficiary) {Beneficiary};
+ \path (benefitting) edge[opmeffect] (beneficiary);
+\end{tikzpicture}
+\end{LTXexample}
+
+\section{Catalog of OPM symbols}
+\label{sec:catalog-opm-symbols}
+
+\lstset{
+ explpreset={rframe={},width=0.3\linewidth}}
+
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop]
+ \begin{tikzpicture}
+ %start
+ \node [opmobject] (object) {Object};
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (processing) {Process(ing)};
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, caption=Aggregation
+ for object, pos=t]
+ \begin{tikzpicture}
+ %start
+ \node [opmobject] (root) {Root};
+ \node [opmaggregation, below=of root] (root-aggr) {};
+ \path (root) edge (root-aggr);
+ \node [opmobject, below left=of root-aggr] (part-a) {Part A};
+ \node [opmobject, below right=of root-aggr] (part-b) {Part B};
+ \path (root-aggr) edge (part-a);
+ \draw [thick] (root-aggr.east) -| (part-b.north);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+Note that in order to get the more traditional vertial/horizontal
+lines with right angles one has to use \verb|draw| and the \verb,-|,
+operator.
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Aggregation for process]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (root) {Rooting};
+ \node [opmaggregation, below=of root] (root-aggr) {};
+ \path (root) edge (root-aggr);
+ \node [opmprocess, below left=of root-aggr] (part-a) {Part Aing};
+ \node [opmprocess, below right=of root-aggr] (part-b) {Part Bing};
+ \path (root-aggr) edge (part-a);
+ \draw [thick] (root-aggr.east) -| (part-b.north);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Exhibition]
+ \begin{tikzpicture}
+ %start
+ \node [opmobject] (root) {Root};
+ \node [opmexhibition, below=of root] (root-aggr) {};
+ \path (root) edge (root-aggr.north);
+ \node [opmobject, below left=of root-aggr] (part-a) {Attr A};
+ \node [opmprocess, below right=of root-aggr] (part-b) {Operating};
+ \path (root-aggr) edge (part-a);
+ \draw [thick] (root-aggr.east) -| (part-b.north);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+Note that one could equally well have a Rooting process instead of
+Root in exhibition.
+
+
+%%% GENERALIZATION
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Generalization for object]
+ \begin{tikzpicture}
+ %start
+ \node [opmobject] (root) {Root};
+ \node [opmgeneralization, below=of root] (root-aggr) {};
+ \path (root) edge (root-aggr.north);
+ \node [opmobject, below left=of root-aggr] (part-a) {Spec A};
+ \node [opmobject, below right=of root-aggr] (part-b) {Spec B};
+ \path (root-aggr) edge (part-a);
+ \draw [thick] (root-aggr.east) -| (part-b.north);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Generalization for process]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (root) {Rooting};
+ \node [opmgeneralization, below=of root] (root-aggr) {};
+ \path (root) edge (root-aggr.north);
+ \node [opmprocess, below left=of root-aggr] (part-a) {Spec Aing};
+ \node [opmprocess, below right=of root-aggr] (part-b) {Spec Bing};
+ \path (root-aggr) edge (part-a);
+ \draw [thick] (root-aggr.east) -| (part-b.north);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+%% INSTANTIATION
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Instantiation for object]
+ \begin{tikzpicture}
+ %start
+ \node [opmobject] (root) {Root};
+ \node [opminstantiation, below=of root] (root-aggr) {};
+ \path (root) edge (root-aggr.north);
+ \node [opmobject, below left=of root-aggr] (part-a) {Instance A};
+ \node [opmobject, below right=of root-aggr] (part-b) {Instance B};
+ \path (root-aggr) edge (part-a);
+ \draw [thick] (root-aggr.east) -| (part-b.north);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Instantiation for process]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (root) {Rooting};
+ \node [opminstantiation, below=of root] (root-aggr) {};
+ \path (root) edge (root-aggr.north);
+ \node [opmprocess, below left=of root-aggr] (part-a) {Instance Aing};
+ \node [opmprocess, below right=of root-aggr] (part-b) {Instance Bing};
+ \path (root-aggr) edge (part-a);
+ \draw [thick] (root-aggr.east) -| (part-b.north);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Consumption]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (processing) {Processing};
+ \node [opmobject, right=of processing] (object) {Object};
+ \path (processing) edge[opmconsumes] (object);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Result]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (processing) {Processing};
+ \node [opmobject, right=of processing] (object) {Object};
+ \path (processing) edge[opmyields] (object);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Effect]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (processing) {Processing};
+ \node [opmobject, right=of processing] (object) {Object};
+ \path (processing) edge[opmaffects] (object);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Agent]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (processing) {Processing};
+ \node [opmobject, left=of processing] (object) {Object};
+ \path (object) edge[opmhandles] (processing);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Instrument]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (processing) {Processing};
+ \node [opmobject, left=of processing] (object) {Object};
+ \path (processing) edge[opmrequires] (object);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=Invocation]
+ \begin{tikzpicture}
+ %start
+ \node [opmprocess] (x-processing) {X Processing};
+ \node [opmprocess, right=of x-processing] (y-processing) {Y Processing};
+ \path (x-processing) edge[opminvokes] (y-processing);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+Note that the version with two arrow heads have been chosen since it
+is easier to work with than with the lightning zig-zag line that OPM
+uses in the book.
+
+\begin{LTXexample}[rangeprefix=\%, rangesuffix=,
+ includerangemarker=false, linerange=start-stop, pos=t,
+ caption=State]
+ \begin{tikzpicture}
+ %start
+ \node [opmstate] (nonexistent) {nonexistent};
+ \node [opmstate, right=of nonexistent] (existent) {existent};
+ \node [opmobject, fit=(nonexistent) (existent), text depth=5ex] (object) {Object};
+
+ \node [opmprocess, below=of object] (constructing) {Constructing};
+ \path (constructing) edge[opmconsumes] (nonexistent);
+ \path (constructing) edge[opmyields] (existent);
+ %stop
+ \end{tikzpicture}
+\end{LTXexample}
+
+This is not optimal, so I could do with some help on making this
+drawing nicer. Using \verb|text depth=5ex| is a very crude way of scaling the object
+box. Putting the \verb|text depth| inside a Tikz style does not help
+\emph{unless} one ensures that it is called after the \verb|fit| key.
+
+\end{document}
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/tikz-optics/README b/graphics/pgf/contrib/tikz-optics/README
new file mode 100644
index 0000000000..8eef41cee9
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-optics/README
@@ -0,0 +1,4 @@
+The tikz library optics is designed to easily draw optical setups with tikz. It provides shapes for lens, mirror, etc. The geometrically (in)correct computation of light rays through the setup is left to the user. When installed, the library can then be loaded through the command `\usetikzlibrary{optics}` in any tex file. To install it, the file `tikzlibraryoptics.code.tex` should be placed wherever TeX can find it, for example in your `TEXMFHOME` folder (see the documentation for details). Alternatively, you can directly `\input` it in your tex file.
+
+The library is subject to either the LaTeX Project Public Li­cense (LPPL 1.3) or the GNU General Public License (GNU GPL 2).
+The documentation is subject toeither the LaTeX Project Public Li­cense (LPPL 1.3) or the GNU Free Documentation License (GNU FDL 1.3). \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-optics/tikz-optics.pdf b/graphics/pgf/contrib/tikz-optics/tikz-optics.pdf
new file mode 100644
index 0000000000..27064c7582
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-optics/tikz-optics.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-optics/tikz-optics.tex b/graphics/pgf/contrib/tikz-optics/tikz-optics.tex
new file mode 100644
index 0000000000..16a21a1d70
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-optics/tikz-optics.tex
@@ -0,0 +1,2316 @@
+\iffalse
+The tikzoptics library documentation
+
+Copyright (C) 2013-2016 by
+ Michel Fruchart <michel.fruchart@ens-lyon.org>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), version 1.3c, which can be
+found at the address:
+https://www.latex-project.org/lppl/lppl-1-3c/
+
+Alternatively, it may be distributed and/or modified under the conditions of
+the GNU Free Documentation License (GNU FDL), version 1.3, which can be found
+at the address:
+https://www.gnu.org/licenses/fdl-1.3.en.html
+or any later version published by the Free Software Foundation.
+\fi
+% allow compression of cross references.
+\pdfminorversion=5
+\pdfobjcompresslevel=2
+\documentclass[a4paper]{ltxdoc}
+\usepackage{etex}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[french]{babel}
+
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage{amsmath}
+
+%\usepackage{makeidx}
+\usepackage[version=3]{mhchem}
+
+\usepackage{csquotes}
+
+\usepackage{xkeyval,calc,listings}
+\usepackage[svgnames,x11names]{xcolor}
+\usepackage{xxcolor} % tikz
+
+\usepackage{tikz}
+\usetikzlibrary{shapes,shapes.misc,shapes.geometric}
+\usetikzlibrary{arrows}
+\usetikzlibrary{calc}
+\usetikzlibrary{positioning}
+\usetikzlibrary{decorations,decorations.markings,decorations.pathreplacing,decorations.pathmorphing}
+\usetikzlibrary{patterns}
+\usetikzlibrary{intersections}
+\usetikzlibrary{matrix}
+\usetikzlibrary{fit}
+\usetikzlibrary{ocgx}
+
+
+\usepackage{fancyvrb}
+
+
+\usepackage[framemethod=tikz,usetwoside=false]{mdframed}
+
+\usepackage{fourier-orns}
+\usepackage{lmodern}
+\usepackage[charter]{mathdesign}
+\usepackage{charter}
+\def\rmdefault{bch} % not scaled
+\def\sfdefault{SourceSansPro-TLF}
+
+\usepackage{textcomp}
+\usepackage[detect-all=true]{siunitx}
+\sisetup{
+ math-micro=\muup,
+ math-ohm =\Omegaup,
+ text-micro={\fontfamily{mdbch}\textmu},
+ text-ohm ={\fontfamily{mdbch}\textohm}
+}
+
+\usepackage{attachfile2}
+\attachfilesetup{color=blue}
+
+
+\usepackage[protrusion=true,expansion,kerning=true,final,verbose=false,babel=false]{microtype}
+\DisableLigatures{encoding=T1,family=tt*}
+
+
+% corrige l'interaction foireuse entre tikz et babel[french]
+\AtBeginEnvironment{tikzpicture}{\shorthandoff{:;!}}
+\AtBeginEnvironment{pgfpicture}{\shorthandoff{:;!}}
+
+
+% This is not the standard way to load a tikzlibrary
+% but I want to make sure that the documentation loads
+% the corresponding library (and not e.g. the production version).
+\input{../tikzlibraryoptics.code.tex}
+
+
+\usepackage{hyperref}
+\usepackage{bookmark}
+\hypersetup{%
+ colorlinks=true,
+ linkcolor=blue,
+ filecolor=blue,
+ urlcolor=blue,
+ citecolor=blue,
+ pdfborder=0 0 0,
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros du manuel pgf/tikz (version : texlive 2012)
+% cf. http://tex.stackexchange.com/questions/72999/is-there-a-listings-configuration-for-tikz-as-used-in-pgf-tikz-manual
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\pgfautoxrefs{1}
+\def\pgfmanual@warning#1{\immediate\write16{! Package pgfmanual Warning: #1}}%
+
+\input{macros/pgfmanual-en-macros}
+\input{macros/pgfmanual.prettyprinter.code.tex}
+\input{macros/pgfmanual.pdflinks.code.tex}
+
+
+\pgfkeys{
+ % set this to 'false' to disable auto reference generation.
+ % However, a little bit runtime overhead will still remain
+ % (and the \pgfmanualpdflabel commands will still be used)
+ /pdflinks/codeexample links=true,
+ %
+ /codeexample/prettyprint/cs arguments/tikzset/.initial=1,
+ /codeexample/prettyprint/cs/tikzset/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualprettyprintpgfkeys{#2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/usetikzlibrary/.initial=1,
+ /codeexample/prettyprint/cs/usetikzlibrary/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualpdfref{#2}{#2}\pgfmanualclosebrace},
+ /codeexample/prettyprint/cs arguments/usepgflibrary/.initial=1,
+ /codeexample/prettyprint/cs/usepgflibrary/.code 2 args={\pgfmanualpdfref{#1}{#1}\{\pgfmanualpdfref{#2}{#2}\pgfmanualclosebrace},
+ %
+ %
+ %
+ % whenever an unqualified key is found, the following key prefix
+ % list is tried to find a match.
+ /pdflinks/search key prefixes in={/tikz/,/pgf/,/tikz/optics/,/tikz/dim/arrow/,},
+ %
+ % the link prefix written to the pdf file:
+ /pdflinks/internal link prefix=tikzopt,
+ %
+ /pdflinks/warnings=false,
+ % for debugging:
+ /pdflinks/show labels=false,
+}%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Global styles from pgf/tikz manual (version : texlive 2012)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\tikzset{
+ every plot/.style={prefix=plots/pgf-},
+ shape example/.style={
+ color=black!30,
+ draw,
+ fill=yellow!30,
+ line width=.5cm,
+ inner xsep=2.5cm,
+ inner ysep=0.5cm},
+ line shape example/.style={
+ color=black!30,
+ draw,
+% fill=black!30, % utile à quoi ?
+ line width=.5cm,
+ inner xsep=2.5cm,
+ inner ysep=0.5cm}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Specific environnements
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Environnement |example only| : aspect similaire à codeexample, mais avec seulement l'exemple (quand le code est trop long)
+\newmdenv[
+ backgroundcolor=graphicbackground,
+ linewidth=0pt,
+ innerleftmargin=0.09cm,innerrightmargin=0.09cm,innertopmargin=0.09cm,
+ leftmargin=0pt,rightmargin=0pt,
+ skipabove=5pt, skipbelow=-2pt,
+ ]{example only}
+
+% Environnement |warning|
+\colorlet{warningbackground}{red!30}
+\makeatletter
+\newenvironment{warning}{%
+\mdfsetup{%
+ backgroundcolor=warningbackground,
+ skipabove=5pt,
+ topline=false,bottomline=false,rightline=false,
+ innerbottommargin=4pt,innertopmargin=0.18cm,
+ leftmargin=0cm, innerleftmargin=0.3cm
+ rightmargin=0cm,innerrightmargin=0.3cm,
+ linewidth=1pt,linecolor=none, topline=false, bottomline=false,
+ }%
+\begin{mdframed}%
+\setlength{\parindent}{0pt}%
+\danger\,%
+}%
+{%
+\end{mdframed}%
+}%
+
+% Environnement |update|
+\colorlet{updatebackground}{blue!30}
+\newenvironment{update}{%
+\mdfsetup{%
+ backgroundcolor=updatebackground,
+ skipabove=5pt,
+ topline=false,bottomline=false,rightline=false,
+ innerbottommargin=4pt,innertopmargin=0.18cm,
+ leftmargin=0cm, innerleftmargin=0.3cm
+ rightmargin=0cm,innerrightmargin=0.3cm,
+ linewidth=1pt,linecolor=none, topline=false, bottomline=false,
+ }%
+\begin{mdframed}%
+\setlength{\parindent}{0pt}%
+\danger\,%
+}%
+{%
+\end{mdframed}%
+}%
+\makeatother
+
+\begin{document}
+
+\VerbatimFootnotes
+
+\title{optics --- une bibliothèque tikz pour les schémas d'optique}
+\author{Michel Fruchart \\
+\href{mailto:michel (dot) fruchart [at] ens-lyon (dot) org}{\texttt{michel (dot) fruchart [at] ens-lyon (dot) org}}}
+
+\date{\tikzopticsversiondate{} -- version \tikzopticsversion \\[0.15cm]
+\large\href{https://github.com/fruchart/tikz-optics}{\texttt{https://github.com/fruchart/tikz-optics}}}
+
+\maketitle
+
+\section{Introduction}
+
+Le but de cette bibliothèque est de permettre de facilement faire des schémas optiques avec tikz, c'est-à-dire de dessiner lentilles, miroirs, etc. Le tracé géométriquement correct (ou non) des rayons est laissé à l'utilisateur.
+
+
+\subsection{Legal matters}
+
+Cette bibliothèque peut être distribuée et modifiée sous les conditions de la licence LaTeX Project Public License (LPPL), version 1.3c\footnote{\url{http://latex-project.org/lppl/lppl-1-3c.txt}}. Elle peut aussi être distribuée et modifiée sous les conditions de la licence GNU General Public License (GNU GPL), soit la version 2\footnote{\url{http://www.gnu.org/licenses/gpl-2.0.en.html}}, soit toute version ultérieure publiée par la Free Software Foundation. Sa documentation, que vous êtes en train de lire, peut être distribuée sous les conditions de la licence LaTeX Project Public License (LPPL), version 1.3c\footnote{\url{http://latex-project.org/lppl/lppl-1-3c.txt}}. Elle peut aussi être distribuée et modifiée sous les conditions de la licence GNU Free Documentation License (GNU FDL), soit la version 1.3\footnote{\url{https://www.gnu.org/licenses/fdl-1.3.en.html}}, soit toute version ultérieure publiée par la Free Software Foundation.
+
+\subsection{Installation de la bibliothèque}
+
+Cette bibliothèque est une \enquote{bibliothèque tikz}. Il y a deux façons de l'utiliser :
+\begin{itemize}
+ \item en ajoutant le fichier |tikzlibraryoptics.code.tex| dans un dossier où \TeX{} peut le trouver, par exemple dans votre dossier |TEXMFHOME|\footnote{Pour savoir où il se trouve, on peut utiliser la commande \verb|kpsewhich -var-value TEXMFHOME|. }, puis en utilisant la commande |\usetikzlibrary{optics}| ;
+ \item en incluant directement le fichier |tikzlibraryoptics.code.tex| contenant la bibliothèque grâce à la commande |\input|.
+\end{itemize}
+
+Si la bibliothèque est placée dans un dossier |TEXMF|, disons |/home/agamemnon/texmf/|, il faut respecter la structure TDS de ces répertoires\footnote{Voir par exemple \url{https://www.ctan.org/TDS-guidelines}}. En pratique, le fichier |tikzlibraryoptics.code.tex| doit être placé dans le dossier |home/agamemnon/texmf/tex/latex/|, ou dans un sous-dossier comme |home/agamemnon/texmf/tex/latex/tikzoptics|. Le plus simple est d'utiliser le contenu de l'archive |tikzoptics.tds.zip|, qui est structuré comme il se doit et peut directement être ajouté dans le dossier |TEXMF| (comme |/home/agamemnon/texmf/|).
+
+\subsection{Utilisation de la bibliothèque}
+
+\begin{key}{/tikz/use optics}
+Après avoir installé la bibliothèque, il suffit de la charger grace à la commande |\usetikzlibrary{optics}|, puis d'utiliser l'option |use optics| sur une |tikzpicture| pour pouvoir utiliser les commandes\footnote{L'option \texttt{use optics} charge les éléments pertinents de \texttt{/tikz/optics/} dans \texttt{/tikz/}, ce qui permet de les utiliser directement. Séparer a priori les commandes dans des espaces de noms différents permet de réduire le risque de collision de noms.}
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+ \node[lens] at (0,0) {};
+ \node[mirror] at (1cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+Si l'option |use optics| n'est pas utilisée, le code plantera lamentablement (dans les cas favorables) ou aura un comportement inattendu (dans les cas moins favorables).
+\end{key}
+
+\subsection{Élements sur les \texttt{node} de tikz et leur placement}
+
+\emph{Pour plus de détails, lire le manuel de tikz.}
+
+En deux mots, une |node| est en gros un objet, qui peut avoir une certaine forme (|shape|). À différents endroits de cette |node| sont définies des ancres (|anchor|). Au contraire d'une |node| qui est en quelque sorte étendue spatialement, ces ancres représentent des points précis sur le canevas de dessin. La |node| a un nom (facultatif) qui permet d'y faire référence dans la suite du dessin, par exemple pour accéder aux coordonnées d'une ancre.
+
+La syntaxe minimale pour créer une |node| est |\node {};|, mais cela n'est pas très utile. Il faut spécifier où se trouve la |node| en écrivant |\node at |\meta{position}| {};| (où \meta{position} est une coordonnée, comme |(0,1cm)|). Cela n'est toujours pas très utile car rien n'est dessiné. C'est le rôle des |shape| que de déterminer ce qui est dessiné.
+
+Dessinons ainsi un rectangle rouge en |(0,0)| (ici, c'est le centre du canevas), et de côté |1cm|\footnote{Dans cette documentation, les longueurs ne sont généralement pas écrites avec les conventions du système international, mais avec les conventions habituelles pour du code tikz.}
+
+%
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}
+ \draw[style=help lines,gray!50] (-2cm,-2cm) grid[step=0.5cm] (2cm,2cm);
+ \node[rectangle,minimum height=1cm,minimum width=1cm,draw=red] at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+%
+J'ai ajouté une grille de pas |0.5cm| pour mieux voir les coordonnées. Dans cet exemple, c'est le centre du rectangle qui est placé au point |(0,0)|. Pour être plus précis, il s'agit de son ancre |center|. C'est le comportement par défaut, mais tout l'intérêt est qu'on peut placer les autres ancres définies par la |shape| au point spécifié. Ajoutons donc à ce dessin un rectangle bleu dont le bas est situé en |(0,0)|. Comme nous allons avoir plusieurs |node| qui partagent les caractéristiques |rectangle,minimum height=1cm,minimum width=1cm|, je les ai placées dans un \emph{style} que j'ai appelé |joli rectangle| (il ne faudrait pas l'appeler |rectangle| car cela existe déjà). Comme le bas est représenté par l'ancre |south|, il faut ajouter l'option |anchor=south| à la |node|:
+%
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}
+ \draw[style=help lines,gray!50] (-2cm,-2cm) grid[step=0.5cm] (2cm,2cm);
+ \tikzstyle{joli rectangle}=[rectangle,minimum height=1cm,minimum width=1cm]
+ \node[joli rectangle,draw=red] at (0,0) {};
+ \node[joli rectangle,draw=blue,anchor=south] at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+%
+J'aimerais maintenant tracer un trait noir entre coin en haut à gauche du carré bleu et le coin en bas à droite du carré rouge. Pour cela, il faut pouvoir accéder aux ancres |north west| (en haut à gauche) et |south east| (en bas à droite) des deux |nodes|. Nous allons donc donner un nom à chacune de ces |nodes|, par exemple |Esther| et |Athalie|:
+%
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}
+ \draw[style=help lines,gray!50] (-2cm,-2cm) grid[step=0.5cm] (2cm,2cm);
+ \tikzstyle{joli rectangle}=[rectangle,minimum height=1cm,minimum width=1cm]
+ \node[joli rectangle,draw=red]
+ (Esther) at (0,0) {};
+ \node[joli rectangle,draw=blue,anchor=south]
+ (Athalie) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+%
+Pour le moment, cela ne change absolument rien au dessin, mais on peut désormais accéder aux ancres nécessaires par |(Athalie.north west)| et |(Esther.south east)| et dessiner le trait voulu.
+%
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}
+ \draw[style=help lines,gray!50] (-2cm,-2cm) grid[step=0.5cm] (2cm,2cm);
+ \tikzstyle{joli rectangle}=[rectangle,minimum height=1cm,minimum width=1cm]
+ \node[joli rectangle,draw=red]
+ (Athalie) at (0,0) {};
+ \node[joli rectangle,draw=blue,anchor=south]
+ (Esther) at (0,0) {};
+ \draw (Esther.north west) --(Athalie.south east);
+\end{tikzpicture}
+\end{codeexample}
+%
+
+Pour placer les points, il est possible d'utiliser une options du genre |left=of (autre node)|, ou encore |above=5mm of (Esther)|. C'est ce qu'on fait dans l'exemple \ref{sec:exemple_dispersion} p.~\pageref{sec:exemple_dispersion}.
+
+\subsection{Programmer des images : faire des calculs avec tikz}
+
+\emph{Pour plus de détails, lire le manuel de tikz.}
+
+Un des principaux avantages\footnote{Un des principaux inconvénients est que cela demande un peu plus de travail, surtout au début.} d'utiliser du code pour générer des schémas est que cela permet de concevoir les schémas comme un programme informatique. Ainsi, on gagne plusieurs choses :
+\begin{itemize}
+ \item en utilisant des variables pour représenter les longueurs et angles du schéma, on peut facilement l'ajuster immédiatement ainsi que le modifier plus tard au besoin ;
+ \item en utilisant des styles pour l'aspect visuel (couleurs, hachures, etc.), il est plus facile de maintenir une cohérence visuelle entre différents schémas. La modification du style se répercutant sur tous les schémas (tant qu'il n'est pas défini à nouveau), on peut facilement décider de changer le bleu représentant l'eau, ou bien, si on veut distribuer un document en noir et blanc, de la représenter par un motif (|pattern|) approprié ;
+ \item on peut utiliser les diverses ressources de la programmation que sont les boucles, les conditions, et les calculs pour effectuer des tâches répétitives ou complexes ;
+ \item il est possible de réutiliser\footnote{J'aimerais ajouter \enquote{facilement} ici, mais ça n'est hélas pas le cas. Le plus simple est de définir une macro contenant le bout de schéma, et cette méthode marche très bien, mais elle a certaines limites.} des bouts de schéma
+\end{itemize}
+
+Le but de cette section est de rappeler rapidement comment faire des calculs avec |pgfmath|. Une référence complète se trouve dans le manuel de |tikz|. Les commandes principales que nous allons utiliser sont la boucle |\foreach|, et les commandes de calcul |\pgfmathcalc| et |\pgfmathresult|, |\pgfmathdef|, et |\pgfmathsetlength|.
+
+\subsubsection{Calculs}
+
+La commande |\pgfmathcalc{<expression>}| parse calcule l'|<expression>| qui lui est donnée (selon des règles qui sont spécifiées dans le manuel de tikz) et enregistre le résultat dans la macro |\pgfmathresult|. Si on a besoin de garder ce résultat, il faut le copier dans une autre macro (disons par exemple |\reflexionAngle|) en utilisant |\let\reflexionAngle\pgfmathresult|. La syntaxe des expressions mathématiques est assez naturelle. Pour les détails, je vous renvoie au manuel tikz ; voici néanmoins quelques exemples\footnote{Pour essayer une expression mathématique, le plus simple est d'écrire \verb-\pgfmathparse{2+2}\pgfmathresult-
+dans le corps d'un document tex : cela affichera \texttt{\pgfmathparse{2+2}\pgfmathresult} dans le pdf. Ici, j'ai omis les \verb+\pgfmathresult+ pour plus de clareté, mais la commande \verb+\pgfmathparse+ n'affiche rien toute seule !
+} :
+
+\begin{codeexample}[post={\pgfmathresult}]
+\pgfmathparse{5*6+3}
+\end{codeexample}
+
+\begin{codeexample}[post={\pgfmathresult}]
+\pgfmathparse{(4^2 + 4)/2}
+\end{codeexample}
+
+\begin{codeexample}[post={\pgfmathresult}]
+\pgfmathparse{factorial(4)}
+\end{codeexample}
+
+\begin{codeexample}[post={\pgfmathresult}]
+% les angles sont en degres !
+\pgfmathparse{cos(45)}
+\end{codeexample}
+
+\begin{codeexample}[post={\pgfmathresult}]
+% r convertit les degres en radians
+\pgfmathparse{cos(pi/4 r)}
+\end{codeexample}
+
+\begin{codeexample}[post={\pgfmathresult}]
+\pgfmathparse{abs(-sqrt(2)/2)}
+\end{codeexample}
+
+Des fonctions comme |acos|, |sinh|, |ln|, etc. sont disponibles\footnote{Des outils rudimentaires pour travailler avec des vecteurs et un générateur de nombres pseudo-aléatoires existent aussi.}. Il est possible de définir des fonctions via la commande |\pgfmathdeclarefunction| ou la clé |/pgf/declare function|, en fournissant éventuellement une implémentation bas niveau :
+
+
+\begin{example only}
+\shorthandoff{;:}
+\pgfkeys{/pgf/declare function={f(\x)=1.7280+0.01345/(\x^2);}}
+\pgfmathparse{f(1)}
+\pgfmathresult
+\end{example only}
+
+\begin{codeexample}[code only]
+\pgfkeys{/pgf/declare function={f(\x)=1.7280+0.01345/(\x^2);}}
+\pgfmathparse{f(1)}
+\pgfmathresult
+\end{codeexample}
+
+À partir de tikz 3.0, la bibliothèque tikz |math| permet de simplifier l'écriture des calculs.
+
+Il existe aussi des fonctions logiques, et les opérateurs booléens habituels (|not(x)=!x|, \verb+or(x,y)=x||y+, |and(x,y)=x&&y|). Par convention, le booléen |true| est représenté par |1| et |false| par |0|. On a alors divers outils avec plusieurs syntaxes :
+
+
+\begin{codeexample}[post={\pgfmathresult}]
+\pgfmathparse{2 <= 4}
+\end{codeexample}
+
+\begin{codeexample}[post={\pgfmathresult}]
+\pgfmathparse{greater(1,2)}
+\end{codeexample}
+
+\begin{codeexample}[post={\pgfmathresult}]
+\pgfmathparse{not(1.5 == 0 && 1.5 <= 2)}
+\end{codeexample}
+
+La commande |\pgfmathsetmacro{<macro>}{<expression>}| parse l'|<expression>| mathématique de la même manière que |\pgfmathcalc|, et enregistre le résultat du calcul dans |<macro>|. Par exemple, |\pgfmathsetmacro{\transitionProbability}{0.5+0.1}| enregistre |0.6| dans |\transitionProbability|. Par contre, si le résultat du calcul est une chaîne de caractères, il faut utiliser quelque chose comme |\pgfmathparse{<expression>}\let<macro>\pgfmathresult|.
+
+La commande |\pgfmathtruncatemacro| s'utilise comme |\pgfmathsetmacro|, mais elle renvoie un entier (le résultat tronqué), qui peut être utilisé dans une boucle, ou dans une condition. Par exemple, |\pgfmathtruncatemacro\nmax{5/4}| stocke |1| dans |\nmax|.
+
+\paragraph{Une remarque sur les définitions et les groupes.} |\pgfmathsetmacro| et les commandes assimilées utilisent la primitive TeX |\def| pour définir les macros, ce qui fait qu'on peut redéfinir une macro sans se préoccuper de savoir si elle existait déjà ou non. De manière générale, je préfère utiliser |\def| plutôt que |\newcommand| pour définir et modifier des variables, car elles peuvent devoir changer lors du tracé du dessin. Cela implique de veiller à ne pas redéfinir des commandes existantes par erreur, mais cela évite aussi beaucoup de tracas. Dans la mesure où le contenu d'une |tikzpicture| est contenu à l'intérieur d'un groupe, les éventuelles redéfinitions intempestives n'ont de conséquences qu'à l'intérieur du dessin. Cela veut aussi dire que pour accèder à une variable définie dans une |tikzpicture|, il faut ajouter un |\global| quelque part.
+
+\subsubsection{Conditions}
+
+Quelques mots sur les fonctions logiques de tikz et leur utilisation.
+
+Une expression comme |greater(\x,pi)| est évaluée à |1| si |\x| est plus grand que $\pi$, et à |0| sinon. Toutes les fonctions logiques se comportent de cette manière. Cela permet de définir des fonctions par morceaux, etc. Pour exécuter du code latex sous condition, une méthode (parmi d'autres) consiste en ce qui suit :
+
+
+\begin{example only}
+\foreach \x in {1,2,3,4}
+{
+\pgfmathparse{greater(\x,pi)}
+\ifnum\pgfmathresult=1
+\x{} est plus grand que $\pi$ ;
+\else
+\x{} est plus petit que $\pi$ ;
+\fi
+}
+\end{example only}
+%
+\begin{codeexample}[code only]
+\foreach \x in {1,2,3,4}
+{
+ \pgfmathparse{greater(\x,pi)}
+ \ifnum\pgfmathresult=1
+ \x{} est plus grand que $\pi$ ;
+ \else
+ \x{} est plus petit que $\pi$ ;
+ \fi
+}
+\end{codeexample}
+
+
+%
+Il peut être nécessaire de stocker le résultat de |\pgfmathresult| dans une macro ; la commande |\pgfmathsetmacro| stockerait |1.0| ou |0.0| (des flottants au lieu d'entiers), qui ne peuvent pas être traités par |\ifnum| : il faut donc faire appel à |\pgfmathtruncateresult|. Ainsi, le code suivant reproduit le même résultat :
+%
+\begin{example only}
+\foreach \x in {1,2,3,4}
+{
+ \pgfmathtruncatemacro\plusGrandQuePi{greater(\x,pi)}
+ \ifnum\plusGrandQuePi=1
+ \x{} est plus grand que $\pi$ ;
+ \else
+ \x{} est plus petit que $\pi$ ;
+ \fi
+ }
+\end{example only}
+%
+\begin{codeexample}[code only]
+\foreach \x in {1,2,3,4}
+{
+ \pgfmathtruncatemacro\plusGrandQuePi{greater(\x,pi)}
+ \ifnum\plusGrandQuePi=1
+ \x{} est plus grand que $\pi$ ;
+ \else
+ \x{} est plus petit que $\pi$ ;
+ \fi
+}
+\end{codeexample}
+
+On peut aussi vouloir spécifier un aspect visuel selon une condition. Une méthode consiste à définir des styles, qu'on assigne selon la condition. Ici, nous tirons un certain nombre de points au hasard dans un carré. Nous voulons distinguer les points qui se trouvent dans un certain cercle des autres. Pour cela, on définit deux styles |inside| et |outside|. Pour le moment, nous allons colorer les points dedans en rouge et deux dehors en bleu :
+
+\begin{codeexample}[code only]
+\tikzset{inside/.style={red},outside/.style={blue}}
+\end{codeexample}
+
+Ensuite, il suffit d'utiliser la fonction |ifthenelse| pour définir une macro |\pointStyle| qui vaut |inside| ou |outside|, selon la position du point situé en |(\posx,\posy)|. Dans l'exemple qui suit, je me suis rendu compte que les couleurs ne se voient pas quand on imprime en noir et blanc, et j'ai donc dessiné des croix rouges ainsi que des plus bleus en modifiant les styles |inside| et |outside| :
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \tikzset{inside/.style={red,mark=x},outside/.style={blue,mark=+}}
+ \newdimen\radius
+ \pgfmathsetlength\radius{1cm}
+ \pgfmathsetmacro\k{2}
+ \pgfmathtruncatemacro\NumberOfPoints{15}
+
+ \draw (0,0) circle(\radius);
+ \draw (-\k*\radius,-\k*\radius) rectangle (\k*\radius,\k*\radius);
+
+ \newdimen\posx
+ \newdimen\posy
+ \foreach \nil in {1,2,...,\NumberOfPoints}
+ {
+ \pgfmathsetlength\posx{\k*\radius*rand}
+ \pgfmathsetlength\posy{\k*\radius*rand}
+ \pgfmathparse{ifthenelse(veclen(\posx,\posy)<\radius,"inside", "outside")}
+ \let\pointStyle\pgfmathresult
+ \draw[\pointStyle] plot (\posx,\posy);
+ }
+\end{tikzpicture}
+\end{codeexample}
+
+\subsubsection{Boucles \texttt{foreach}}
+
+La boucle |\foreach| s'utilise grossièrement de la manière suivante :
+%
+\begin{codeexample}[]
+\foreach \x in {1,2,...,10} {\x,}
+\end{codeexample}
+%
+\begin{codeexample}[]
+\foreach \x in {0.42,0.5,12.56} {\x,}
+\end{codeexample}
+%
+Il y a un certain nombre de subtilités dans la syntaxe qui permettent de faire des choses élaborées : je vous renvoie au manuel de tikz qui y consacre un chapitre entier ainsi qu'aux exemples. Remarquez que les boucles peuvent être imbriquées.
+
+Dans l'exemple (inutile) suivant, nous voulons placer une barre tous les |\shift| sur un trait de longueur |\length|. De plus, on veut qu'un trait sur deux soit rouge, et l'autre bleu. On calcule donc le nombre |\imax| de traits à dessiner, puis on utilise une boucle. Dans la boucle, on utilise la parité de la variable de boucle |\i| pour savoir si la barre doit être rouge ou bleue.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \pgfmathsetmacro\length{4}
+ \pgfmathsetmacro\shift{0.5}
+ \pgfmathtruncatemacro\imax{\length/\shift}
+
+ \draw (0,0) -- (\length,0);
+ \foreach \i in {0,1,2,...,\imax}
+ {
+ \pgfmathparse{ifthenelse(equal(mod(\i,2),0),"red","blue")}
+ \let\chunkStyle\pgfmathresult
+ \draw[\chunkStyle] (\i*\shift cm,-0.3cm) -- (\i*\shift cm,0.3cm);
+ }
+\end{tikzpicture}
+\end{codeexample}
+
+\subsubsection{Les longueurs}
+
+En tikz, on travaille toujours, de manière implicite ou explicite, avec des longueurs (et des angles). Par exemple, la coordonnée |(1,2)| signifie généralement |(1cm,2cm)| (en fait, |(1,2)| est vu comme une coordonnée dans un système dont les vecteurs unité ont, par défaut, une longueur d'un centimètre, mais qui peuvent être modifiés).
+Le plus souvent, il est raisonnable de préciser explicitement les unités et donc de travailler avec des longueurs.
+
+En (la)tex, les longueurs doivent être déclarées avant d'être utilisées, et contrairement aux macros, il n'est pas d'usage de les déclarer et de les définir en même temps. La commande |\newdimen{<longueur>}| permet de déclarer une longueur\footnote{Pour la même raison que je préfère \texttt{\textbackslash{}def} à \texttt{\textbackslash{}newcommand} pour définir des variables dans les dessins, je préfère \texttt{\textbackslash{}newdimen} à \texttt{\textbackslash{}newlength}.}. Pour lui donner une valeur, le plus simple est d'utiliser la commande |\pgfmathsetlength{<longueur>}{<expression math>}|, qui parse l'|<expression math>| et l'enregistre dans |<longueur>|. Ainsi,
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \newdimen\hauteurFente
+ \pgfmathsetlength\hauteurFente{3cm}
+ \newdimen\largeurFente
+ \pgfmathsetlength\largeurFente{0.25cm}
+ \newdimen\ecartFentes
+ \pgfmathsetlength\ecartFentes{0.5cm}
+
+ \coordinate (L) at (-\ecartFentes/2,0);
+ \coordinate (R) at (\ecartFentes/2,0);
+ \foreach \x in {L,R}
+ \draw[shift={(\x)}] (-\largeurFente/2,-\hauteurFente/2)
+ rectangle (\largeurFente/2,\hauteurFente/2);
+\end{tikzpicture}
+\end{codeexample}
+
+La commande |\pgfmathsetlength| suppose qu'une grandeur sans unité est donnée en points (|pt|). Ainsi, |\pgfmathsetlength\hauteurFente{3}| équivaut à |\pgfmathsetlength\hauteurFente{3pt}|. Néanmoins, il n'est pas une bonne idée de ne pas spécifier l'unité.
+
+Les fonctions de comparaison de |pgfmath| (comme |greater|, |less|, |equal|) peuvent être utilisées avec des longueurs : par exemple, |\pgfmathparse{2cm <= 4cm}| donne |1|, alors que |\pgfmathparse{2cm <= 4pt}| donne |0|.
+
+\subsubsection{Un prisme}
+
+Armés de ces outils, nous pouvons dessiner le parcours de rayons lumineux à travers un prisme en verre. Quelques calculs d'optique géométrique permettent de déterminer les coordonnées nécessaires au tracé, et on obtient ainsi la figure suivante :
+
+\begin{example only}
+\begin{center}
+\begin{tikzpicture}
+ \newdimen\hauteurVerre
+ \newdimen\largeurVerre
+ \newdimen\distanceSource
+ \newdimen\hauteurSource
+ \newdimen\distanceEcran
+ \pgfmathsetlength\hauteurVerre{2cm}
+ \pgfmathsetlength\largeurVerre{1cm}
+ \pgfmathsetlength\distanceSource{1cm}
+ \pgfmathsetlength\hauteurSource{1cm}
+ \pgfmathsetmacro\glassIndex{1.74}
+ \pgfmathsetlength\distanceEcran{1cm}
+
+ \coordinate (A) at (0,\hauteurVerre);
+ \coordinate (B) at (0,0);
+ \coordinate (C) at (\largeurVerre,0);
+
+ % couleur des rayons
+ \colorlet{current ray color}{red}
+
+ % dessin du prisme
+ \draw (A) -- (B) -- (C) -- cycle;
+
+ % source
+ \coordinate (S) at (-\distanceSource,\hauteurSource);
+
+ % tracé des rayons
+ \foreach \x in {-0.1,0,0.1,0.2,...,1}
+ {
+ \pgfmathsetmacro\inAngle{atan((\hauteurSource-\x*\hauteurVerre)/\distanceSource)}
+ % si le rayon ne croise pas le prisme, pas de déflexion du rayon
+ \pgfmathtruncatemacro\noDeflexion{or(notgreater(\x,0),notless(\x,1))}
+ \ifnum\noDeflexion=1
+ \draw[dashed,current ray color] (S)
+ -- (\distanceEcran,{tan(\inAngle)*(\distanceEcran+\largeurVerre+\distanceSource)});
+ \else
+ \pgfmathsetmacro\midAngle{asin((1/\glassIndex)*sin(\inAngle))}
+ \pgfmathsetmacro\y{\x*(1+\largeurVerre/\hauteurVerre*tan(\midAngle))^(-1)}
+ \pgfmathsetmacro\appexAngle{atan(\largeurVerre/\hauteurVerre)}
+ \pgfmathsetmacro\snellSine{\glassIndex*sin(-\appexAngle+\midAngle)}
+
+ % est-ce que le rayon coupe le bas du prisme ?
+ \pgfmathtruncatemacro\goesOut{greater(\y,1)}
+ \ifnum\goesOut=1
+ % je ne dessine pas les rayons qui couperaient le bas du prisme
+ \else
+ % est-ce qu'il y a réflexion totale ?
+ \pgfmathtruncatemacro\totalReflexion{notgreater(abs(\snellSine),1)}
+ \ifnum\totalReflexion=1
+ \newdimen\screenY
+ \pgfmathsetlength\screenY{
+ (1-\y)*\hauteurVerre + tan(asin(\snellSine)+\appexAngle)*
+ (\largeurVerre+\distanceEcran - \largeurVerre*\y)
+ }
+ \draw[current ray color] (S) -- (\largeurVerre*0,{(1-\x)*\hauteurVerre})
+ -- (\largeurVerre*\y,{(1-\y)*\hauteurVerre})
+ -- (\largeurVerre+\distanceEcran,\screenY);
+ \else
+ \draw[dotted,current ray color] (S) -- (\largeurVerre*0,{(1-\x)*\hauteurVerre})
+ -- (\largeurVerre*\y,{(1-\y)*\hauteurVerre});
+ \fi
+ \fi
+ \fi
+ }
+\end{tikzpicture}
+\end{center}
+\end{example only}
+
+Comme nous avons utilisé des paramètres ajustables, il est très facile d'adapter le code de manière à tracer les rayons pour plusieurs longueurs d'ondes (en utilisant la loi de Cauchy) :
+
+\begin{example only}
+\begin{center}
+\input{prisme_dispersion.pgf}
+\end{center}
+\end{example only}
+%
+Le code servant à générer cette figure étant un peu long, je ne l'ai pas inclus dans le corps du document, mais en pièce jointe : \textattachfile[]{prisme_dispersion.pgf}{prisme\_dispersion.pgf}.
+
+
+\section{Exemples}
+
+\subsection{Image d'une fente sur un écran}
+
+Reproduisons un schéma optique simple (qu'il faudrait que je scanne).
+
+La première étape est de placer tous les éléments. On commence de manière très logique par la lampe, qu'on place en |(0,0)|. Ensuite, tous les éléments sont placé à droite les uns des autres. Par exemple, l'anticalorique est placé à |0.5cm| de la sortie de la lampe (ancre |aperture east| de la |node| |QI|) par l'option |right=0.5cm of (QI.aperture east)|. L'écran et la lentille sont situés relativement à la fente parce que j'ai jugé ça plus pratique pour les modifier indépendamment, mais ce genre de choix dépend de l'humeur et de la situation. J'ai nommé les différents éléments de manière peu cohérente pour souligner que les noms des |nodes| sont très libres : on peut y mettre des espaces, des accents\footnote{Vous remarquerez que je n'utilise pas d'accents dans les exemples de code. C'est parce que le code qui traite ces exemples n'est pas capable de les traiter. Par contre, il n'y a aucun problème à les utiliser dans tikz (une |node| peut s'appeler \texttt{(écran)} sans aucun problème, par exemple).}, etc. Il faut juste éviter d'y mettre de point, virgule, double-point, etc. qui ont un sens particulier (le point sépare le nom d'une |node| de celui de l'ancre visée, par exemple).
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+ \node[halogen lamp] (quartz iode) at (0,0) {Q.I.};
+ \node[heat filter,right=0.5cm of quartz iode.aperture east] (AC) {};
+ \node[slit,right=0.75cm of AC] (fente) {};
+ \node[lens,right=2cm of fente] (L) {};
+ \node[screen,right=5cm of fente] (screen) {};
+\end{tikzpicture}
+\end{codeexample}
+
+%
+Une deuxième étape consiste à tracer les rayons lumineux. Ici, on a de la chance car toutes les positions nécessaires sont des ancres des différentes |node|. Par exemple, |(L.lens south)| est située juste avant le bas de |L| de manière à ce que le dessin soit joli (mais on peut quand même accéder à ce bas via |(L.south)| - l'idée est qu'il s'agit alors du bas du support annulaire de la lentille). On relie donc les ancres par des |--| dans une commande |\draw|.
+%
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+ \node[halogen lamp] (quartz iode) at (0,0) {Q.I.};
+ \node[heat filter,right=0.5cm of quartz iode.aperture east] (AC) {} ;
+ \node[slit,right=0.75cm of AC] (fente) {};
+ \node[lens,right=2cm of fente] (L) {};
+ \node[screen,right=5cm of fente] (screen) {};
+
+ \draw[red] (fente.slit north) -- (L.lens north) -- (screen.center)
+ (fente.slit south) -- (L.lens south) -- (screen.center);
+\end{tikzpicture}
+\end{codeexample}
+%
+Il faut ensuite ajouter les étiquettes des différents éléments. Cela est fait via l'option \verb|label|, de la forme \verb|label=|\meta{texte}, ou plus généralement \verb|label=[|\meta{opts}\verb|]|\meta{pos}\verb|:|\meta{texte}. En particulier, pour pouvoir sauter une ligne, il faut par exemple utiliser l'option |align=center|.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+ \node[halogen lamp] (quartz iode) at (0,0) {Q.I.};
+ \node[heat filter,right=0.5cm of quartz iode.aperture east,label={below:AC}] (AC) {} ;
+ \node[slit,right=0.75cm of AC,label={below:fente}] (fente) {};
+ \node[lens,right=2cm of fente,label={[align=center]below:achromat \\ $(L)$}] (L) {};
+ \node[screen,right=5cm of fente,label={below:\'ecran}] (screen) {};
+
+ \draw[red] (fente.slit north) -- (L.lens north) -- (screen.center)
+ (fente.slit south) -- (L.lens south) -- (screen.center);
+\end{tikzpicture}
+\end{codeexample}
+
+Enfin, on ajoute les flèches. Pour ce faire, je définis une coordonnée (c'est une |node| qui n'a qu'une seule ancre et qui ne dessine rien) et j'utilise la position verticale de cette coordonnée (point 1) ainsi que les positions horizontales des (centres des) divers objets (point 2), grace à la syntaxe \texttt{(point 1 -\textbar{} point 2)}.
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+ \node[halogen lamp] (quartz iode) at (0,0) {Q.I.};
+ \node[heat filter,right=0.5cm of quartz iode.aperture east,label={below:AC}] (AC) {} ;
+ \node[slit,right=0.75cm of AC,label={below:fente}] (fente) {};
+ \node[lens,right=2cm of fente,label={[align=center]below:achromat \\ $(L)$}] (L) {};
+ \node[screen,right=5cm of fente,label={below:\'ecran}] (screen) {};
+
+ \draw[red] (fente.slit north) -- (L.lens north) -- (screen.center)
+ (fente.slit south) -- (L.lens south) -- (screen.center);
+
+ \coordinate (arrow origin) at (0,1.5cm);
+
+ \draw[>=technical,<->] (arrow origin -| fente) -- (arrow origin -| L) node[midway,above] {$d$};
+ \draw[>=technical,<->] (arrow origin -| L) -- (arrow origin -| screen) node[midway,above] {$D$};
+\end{tikzpicture}
+\end{codeexample}
+
+Quand le style sera au point, il sera possible d'utiliser |dim arrow| pour indiquer les dimensions au lieu de cette méthode légèrement plus laborieuse.
+
+
+
+\subsection{Des interférences}
+
+Ici, je n'ai pas utilisé |right=of| et ses amis pour placer les |nodes|, mais des calculs de coordonnées.
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+ \node[laser] (L) at (0,0) {\ce{HeNe}};
+ \node[semi-transparent mirror,rotate=45] (ST) at ($(L)+(3cm,0)$) {};
+ \node[above] at (ST.north) {s\'eparatrice};
+ \node[mirror,rotate=-135] (M1) at ($(ST)+(0,-3cm)$) {};
+ \node[mirror,rotate=-45] (M2) at ($(M1)+(5cm,0)$) {};
+ \node[sensor line,rotate=45,anchor=pixel 3 west,label={[label distance=0.5cm]above right:Caliens}]
+ (Caliens) at ($(ST)+(5cm,0)$) {};
+ \draw[red] (L.aperture east) -- (ST.center) -- (M1.center) -- (M2.center) -- (Caliens.pixel 3 west);
+ \draw[red] (L.aperture east) -- (ST.center) -- (Caliens.pixel 3 west);
+\end{tikzpicture}
+\end{codeexample}
+
+On a utilisé |anchor=pixel 3 west| pour que le centre du capteur soit placé au point |($(ST)+(5cm,0)$)|.
+
+Plusieurs possibilités pour ajouter un label sont illustrées : créer une |node| au bon endroit avec le texte voulu (ici \emph{séparatrice}), et utiliser la clé \verb|label| (cf. manuel pgf/tikz).
+
+\subsection{De la dispersion}
+\label{sec:exemple_dispersion}
+
+La syntaxe |($(A)!0.6!(B)$)| (\emph{partway modifiers}, lisez le manuel tikz pour les détails) permet de déterminer un point situé à la distance |0.6| entre les points |(A)| et |(B)| (|0| correspond à |(A)| et |1| à |(B)|).
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+ % [align=center] permet les labels multiligne
+ % [font=\footnotesize] fait un texte plus petit
+ \tikzset{every label/.style={align=center,font=\footnotesize}}
+
+ \node[halogen lamp] (S) at (0,0) {QI};
+ \node[heat filter, right=of S] (AC) {};
+ \node[diaphragm, right=0.1cm of AC] (diaphragme) {};
+ \node[slit, right=0.5cm of diaphragme,label={south:{trou \\ \SI{5}{\milli\meter}}}] (T) {};
+ \node[lens,right=2cm of T] (L) {};
+ \node[screen,right=2cm of L] (ecran) {};
+
+ \draw[red]
+ (T.slit north) -- (L.lens north) -- (ecran.center)
+ (T.slit south) -- (L.lens south) -- (ecran.center);
+
+ \draw[blue]
+ (T.slit north) -- (L.lens north) -- ($(ecran.north)!0.6!(ecran.south)$)
+ (T.slit south) -- (L.lens south) -- ($(ecran.north)!0.4!(ecran.south)$);
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsection{Un téléscope de Cassegrain}
+
+Pour dessiner un miroir troué, on utilise la commande |\clip| de tikz (qu'on place dans un |scope| dont le seul contenu est affecté par le |\clip|). On trace alors les rayons à la main, sans se soucier de l'exactitude du schéma.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+% mirror with hole
+\begin{scope}
+ \clip (-0.75cm,-2.2cm) rectangle (1cm,0-0.33cm) (-0.75cm,2.2cm) rectangle (1cm,0+0.33cm);
+ \node[spherical mirror, object height=4cm, spherical mirror angle=50] (M1) at (0cm,0) {};
+\end{scope}
+
+% small mirror
+\node[convex mirror, spherical mirror orientation=rtl,
+ object height=1cm, spherical mirror angle=90] (M2) at (-4cm,0) {};
+
+% convergence point
+\coordinate (F) at (1cm,0);
+
+% red ray
+\begin{scope}[red]
+ \draw[-<-] (M1.22) coordinate (P1) -- +(-5cm,0);
+ \draw[->-] (P1) -- (M2.30) coordinate (Q1);
+ \draw[->-] (Q1) -- ($(Q1)!1.25!(F)$) coordinate (R1);
+\end{scope}
+
+% blue ray
+\begin{scope}[blue]
+ \draw[-<<-] (M1.-22) coordinate (P2) -- +(-5cm,0);
+ \draw[->>-] (P2) -- (M2.-30) coordinate (Q2);
+ \draw[->>-] (Q2) -- ($(Q2)!1.25!(F)$) coordinate (R2);
+\end{scope}
+
+% violet ray
+\begin{scope}[violet]
+ \draw[-<-] (M1.22) coordinate (P3) -- +(175:5cm);
+ \draw (P3) -- (M2.22) coordinate (Q3);
+ \draw (Q3) -- ($(Q3)!1.25!($(F)+(0,-0.15cm)$)$) coordinate (R3);
+\end{scope}
+
+% sensor
+\node[generic sensor, anchor=aperture west] at ($(R1)!0.5!(R2)$) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\subsection{De l'optique géométrique et des calculs}
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+ \node[lens,draw focal points,focal length=1.5cm,object height=2cm] (L) at (0,0) {};
+ \coordinate (P) at (-2cm,0.5cm);
+ \coordinate (Q) at (-2cm,-0.5cm);
+ \draw[red,shorten >=-1cm] (P) -- ($(L.north)!(P)!(L.south)$) -- (L.east focus);
+ \draw[red,shorten >=-1cm] (Q) -- ($(L.north)!(Q)!(L.south)$) -- (L.east focus);
+ \node[screen] at (2.45cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+ Cet exemple n'est pas très propre, car j'ai dû allonger manuellement les rayons pour qu'ils aillent jusqu'à l'écran. La méthode suivante, qui consiste à calculer le point d'intersection grâce à une fonction |\toVerticalProjection|, est beaucoup plus propre:
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics]
+ \node[lens,draw focal points,focal length=1.5cm,object height=2cm] (L) at (0,0) {} ;
+ \coordinate (P) at (-2cm,0.5cm) ;
+ \coordinate (Q) at (-2cm,-0.5cm) ;
+ \node[screen] (S) at (2.5cm,0) {};
+
+ \def\toVerticalProjection#1#2#3{let \p{1} = #1, \p{2} = #2, \p{3} = #3 in
+ -- (\x{3},{\y{1}+(\y{2}-\y{1})/(\x{2}-\x{1})*(\x{3}-\x{1})})}
+
+ \draw[red] (P) -- ($(L.north)!(P)!(L.south)$) coordinate (Plens)
+ \toVerticalProjection{(Plens)}{(L.east focus)}{(S)};
+
+ \draw[red] (Q) -- ($(L.north)!(Q)!(L.south)$) coordinate (Qlens)
+ \toVerticalProjection{(Qlens)}{(L.east focus)}{(S)};
+
+\end{tikzpicture}
+\end{codeexample}
+
+\subsection{De la biréfringence avec un interféromètre de Michelson}
+
+\input{birefringence_michelson.pgf}
+
+Cet exemple utilise des intersections pour tracer des rayons lumineux : la syntaxe n'est pas la plus agréable et concise qu'on puisse concevoir, mais elle marche.
+Cet exemple est aussi l'occasion de montrer l'utilisation du package \texttt{ocgx} avec \texttt{tikz}.
+Le code de la figure est dans le fichier \textattachfile[]{birefringence_michelson.pgf}{birefringence\_michelson.pgf}.
+
+
+\section{Référence}
+
+\subsection{Généralités}
+
+\subsubsection{Options communes}
+
+Certaines options sont communes à beaucoup des |shapes| (à l'exception notable des lampes et capteurs).
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| contrôle la hauteur de la plupart des objets (c'est le cas si rien n'est précisé).
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[lens, object height=1cm] (L1) at (0,0) {};
+ \node[lens, object height=2cm] (L2) at (3cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/optics/object aspect ratio=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/object aspect ratio})}
+ L'option |object aspect ratio| contrôle le rapport d'aspect de la plupart des objets ayant une largeur. Si \meta{number} vaut |1|, la largeur de l'objet est égale à sa hauteur.
+ Si \meta{number}|=1/2|, la largeur de l'objet vaut la moitié de sa hauteur.
+ Quand \meta{number or length} est un nombre sans dimension (e.g. |0.5|), il est interprété comme un rapport d'aspect, relatif à la hauteur. Quand il s'agit d'une longueur dimensionnée (e.g. |1cm|), il est directement interprété comme la largeur (\emph{width}) de l'objet.
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[polarizer, object aspect ratio=0.2] (L1) at (0,0) {};
+ \node[polarizer, object aspect ratio=0.5] (L2) at (4cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{stylekey}{/tikz/optics/object width}
+ L'option |object width| est un alias pour |object aspect ratio|.
+\end{stylekey}
+
+\subsubsection{Longueurs absolues et relatives}
+
+Les divers éléments ont plusieurs longueurs ajustables. La plupart du temps, il n'est nécessaire de spécifier qu'une seule longueur (généralement la hauteur de l'objet) de manière absolue, c'est-à-dire avec une unité de longueur (|cm|, |pt|, |em|, etc.). Les autres longueurs peuvent être spécifiées en unité de cette longueur absolue de référence (il faut alors spécifier un nombre), ou, si cela s'avère plus pratique, comme des longueurs absolues (il faut alors spécifier une unité). Voici un exemple avec |slit height|, qui peut être spécifié relativement à |object height|.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[style=help lines,gray!50]
+ (-3cm,-2cm) grid[step=0.5cm] (2cm,2cm);
+ \node[slit,object height=2cm,slit height=0.5,red,very thick]
+ at (-2cm,0) {};
+ \node[slit,object height=2cm,slit height=0.25,blue,very thick]
+ at (-1cm,0) {};
+ \node[slit,object height=2cm,slit height=0.5cm,violet,very thick]
+ at (0cm,0) {};
+ \node[slit,object height=2cm,slit height=1cm,orange,very thick]
+ at (1cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+L'intérêt d'utiliser des longueurs \emph{relatives} est que la \emph{forme générale} d'un objet n'est pas modifiée par un changement d'échelle (il n'y a qu'à changer la longueur absolue de référence).
+
+Les éléments optiques ont plusieurs \enquote{hauteurs}. La hauteur totale est toujours appelée |objet height|, mais par exemple la taille d'une fente est appelée |slit height|, la taille (sans conséquence sur le dessin, mais qui affecte les ancres) d'une lentille sur son support est appelée |lens height|, etc.
+
+% Note : je ne sais pas si je change les |aspect ratio| par un |object width| qui accepte un \meta{number or length} ...
+% => C'est fait pour un bon nombre de trucs.
+
+
+\subsection{Éléments optiques}
+
+\subsubsection{Lentille}
+
+\begin{shape}{lens}
+Dessine une lentille.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[lens] (L) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[lens,draw focal points] (L) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+ \begin{stylekey}{/tikz/optics/draw focal points=\meta{style} (default empty)}
+ On peut tracer les foyers avec |draw focal points|. En donnant \meta{style} en argument à la clé |draw docal points|,
+ on peut déterminer comment sont tracés les foyers. Par exemple \texttt{draw focal points={red}} les trace en rouge, et \texttt{draw focal points={circle,draw=none,fill=blue}} trace un cercle rempli en bleu.
+ \end{stylekey}
+
+ \begin{codeexample}[width=6cm]
+ \begin{tikzpicture}[use optics,scale=.5]
+ \node[lens,draw focal points={red}]
+ (L1) at (0,0) {};
+ \node[lens,draw focal points={circle,draw=none,fill=blue}]
+ (L2) at (3cm,0) {};
+ \end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| est applicable.
+\end{key}
+
+\begin{key}{/tikz/optics/focal length=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/focal length})}
+ L'option |focal length| contrôle la distance focale de la lentille.
+
+ \begin{codeexample}[width=6cm,pre={\tikzset{every lens node/.append style={optics,draw focal points}}}]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[lens, focal length=1cm] (L1) at (0,0) {};
+ \node[lens, focal length=2cm] (L2) at (0,5cm) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikz/optics/lens height=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/lens height})}
+ L'option |lens height| contrôle la hauteur de la lentille. Il s'agit soit une longueur abolue (avec unité), soit d'une longueur relative mesurée par rapport à la hauteur totale de la lentille avec support.
+
+ \begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[lens] (L1) at (1cm,0) {};
+ \node[lens, lens height=0.5] (L2) at (-1cm,0) {};
+ \draw[red] (0,0) -- (L1.lens north) (0,0) -- (L1.lens south);
+ \draw[green] (0,0) -- (L2.lens north) (0,0) -- (L2.lens south);
+\end{tikzpicture}
+ \end{codeexample}
+
+ % Serait-il plus judicieux d'avoir un système de coordonnées sur la lentille, genre |(L1.0)| pour le centre, |(L1.1)| pour le haut, |(L1.0.5)| pour un point en haut, à mi-lentille, |(L1.-1)| pour le bas, etc. ? Ou est-ce que |($(L1.north)!0.1!(L1.south)$)| suffit amplement ?
+\end{key}
+
+
+\begin{key}{/tikz/optics/lens type}
+ L'option |lens type| contrôle le type de lentille. Utiliser |lens type=converging| permet de dessiner une lentille convergente (c'est l'option par défaut), alors que |lens type=diverging| permet de dessiner une lentille divergente.
+
+ \begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[lens,lens type=converging] (L1) at (-1cm,0) {};
+ \node[lens,lens type=diverging] (L2) at (1cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+La figure suivante récapitule les ancres définies par |lens|.
+
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[name=s,lens,object height=7cm,focal length=3cm,
+lens height=0.5,line shape example] {};
+\foreach \anchor/\placement in
+{north/above,south/below,lens north/right,lens south/right,center/right,
+east focus/above,west focus/above}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+Les clés |east focus| et |west focus| ont pour synonyme |east focal point| et |west focal point|, respectivement.
+
+
+On peut utiliser la clé \texttt{tikz} \texttt{anchor=} pour placer les lentilles les unes par rapport aux autres.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[lens,draw focal points={red}]
+ (L1) at (0,0) {};
+ \node[lens,draw focal points={circle,draw=blue},
+ focal length=0.5cm,anchor=west focus]
+ (L2) at (L1.east focus) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+\subsubsection{Fente}
+
+\begin{shape}{slit}
+Dessine une fente.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[slit] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| est applicable.
+\end{key}
+
+
+\begin{key}{/tikz/optics/slit height=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/slit height})}
+La clé |slit height| définit la hauteur de la fente (s'il s'agit d'une longueur relative, elle est exprimée en unités de la hauteur de l'objet).
+Par exemple, \meta{number}|=0.5| donne une fente faisant la moitié de la hauteur du support. De même, \meta{length}|=1cm| donne une fente de |1cm|. Les valeurs de \meta{number} doivent être inférieures à l'unité, et celles de \meta{length} inférieures à celles de |object height|, sans quoi les résultats ne sont pas garantis.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[slit, slit height=0.5] (S) at (0,0) {};
+ \node[slit, slit height=0.3] (S) at (1cm,0) {};
+ \node[slit, slit height=0.1] (S) at (2cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+La figure suivante récapitule les ancres définies par |slit|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[name=s,slit,object height=8cm,
+slit height=0.2,line shape example] {};
+\foreach \anchor/\placement in
+{north/above,south/below,slit north/right,slit south/right,center/left,
+slit center/right}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+\subsubsection{Double fente}
+
+
+\begin{shape}{double slit}
+Dessine une fente double.
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[double slit] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| est applicable.
+\end{key}
+
+
+\begin{key}{/tikz/optics/slit height=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/slit height})}
+La clé |slit height| définit la hauteur d'une fente (s'il s'agit d'une longueur relative, elle est en unités de la hauteur de l'objet).
+Chacune des fentes a une hauteur \meta{number or length}.
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5,optics/slit separation=0.5]
+ \node[double slit, slit height=0.075] (S) at (0,0) {};
+ \node[double slit, slit height=0.1] (S) at (1cm,0) {};
+ \node[double slit, slit height=0.2] (S) at (2cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/optics/slit separation=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/slit separation})}
+La clé |slit separation| définit la distance entre les deux fentes (s'il s'agit d'une longueur relative, elle est en unités de la hauteur de l'objet).
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[double slit, slit separation=0.1] (S) at (0,0) {};
+ \node[double slit, slit separation=0.2] (S) at (1cm,0) {};
+ \node[double slit, slit separation=0.3] (S) at (2cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+
+
+La figure suivante récapitule les ancres définies par |double slit|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[double slit,name=s,object height=8cm, slit height=0.15,
+slit separation=0.5, line shape example] {};
+\foreach \anchor/\placement in
+{north/above,south/below,center/left,
+slit 1 north/right,slit 1 south/right,slit 1 center/right,
+slit 2 north/right,slit 2 south/right,slit 2 center/right}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+
+\subsubsection{Miroir}
+
+
+\begin{shape}{mirror}
+Dessine un miroir plan.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[mirror] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| est applicable.
+\end{key}
+
+\begin{key}{/tikz/optics/mirror decoration separation=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/mirror decoration separation})}
+Correspond à la clé |/pgf/decoration/segment length| pour la décoration |border| utilisée pour dessiner le miroir (cf. manuel de pgf/tikz).
+La valeur correspondant à |/pgf/decoration/segment length| est obtenue en multipliant \meta{number} par la hauteur du miroir.
+\end{key}
+
+\begin{key}{/tikz/optics/mirror decoration amplitude=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/mirror decoration amplitude})}
+Correspond à la clé |/pgf/decoration/amplitude| pour la décoration |border| utilisée pour dessiner le miroir (cf. manuel de pgf/tikz).
+La valeur correspondant à |/pgf/decoration/amplitude| est obtenue en multipliant \meta{number} par la hauteur du miroir.
+\end{key}
+
+
+La figure suivante récapitule les ancres définies par |mirror|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[mirror,name=s,object height=8cm,line shape example,
+mirror decoration separation=0.141, mirror decoration amplitude=0.2] {};
+\foreach \anchor/\placement in
+{north/above,south/below,center/right}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+La clé |focus| a pour synonyme |focal point|.
+
+\end{shape}
+
+\subsubsection{Miroir sphérique}
+
+\begin{shape}{spherical mirror}
+Dessine un miroir sphérique (concave ou convexe).
+
+\begin{warning}
+ Cette partie n'est pas encore au point et peut changer sans préavis.
+\end{warning}
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[spherical mirror] (M) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ La clé |object height| est applicable.
+\end{key}
+
+\begin{key}{/tikz/optics/spherical mirror angle=\meta{angle} (initially \pgfkeysvalueof{/tikz/optics/spherical mirror angle})}
+ La clé |spherical mirror angle| contrôle l'angle d'ouverture du miroir sphérique (un arc de cercle de hauteur spécifiée par |object height| et d'ouverture angulaire \meta{angle} est dessiné).
+ Attention à ne pas choisir $\meta{angle}=0$ : utiliser un miroir plat |mirror| à la place.
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+ \node[spherical mirror, spherical mirror angle=60] at (0,0) {};
+ \node[spherical mirror, spherical mirror angle=120] at (2cm,0) {};
+ \node[spherical mirror, spherical mirror angle=180] at (4cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{warning}
+ La fonction |from_radius| est expérimentale.
+\end{warning}
+
+Il peut être utile de spécifier non pas l'angle d'ouverture, mais le rayon de courbure du miroir ; dans ce but, une fonction |from_radius(R)| calcule l'angle d'ouverture correspondant au rayon |R|, à hauteur |/tikz/optics/object height| imposée. Bien entendu, il n'est pas possible que la hauteur soit supérieure au double du rayon du miroir.
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+ \node[spherical mirror, object height=2cm,
+ spherical mirror angle=from_radius(3cm),
+ draw mirror focus, draw mirror center={red}] (M) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/optics/spherical mirror type}
+ La clé |spherical mirror type| contrôle le type de miroir : utiliser |spherical mirror type=concave| donne un miroir concave (c'est l'option par défaut), alors que |spherical mirror type=convex| donne un miroir convexe.
+ Il est plus commode d'utiliser les styles |convex mirror| et |concave mirror|, qui sont des raccourcis pour cette clé.
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+ \node[convex mirror, label={[label distance=0.25cm]south:convex mirror}] at (0cm,0) {};
+ \node[concave mirror, label={[label distance=0.25cm]south:concave mirror}] at (4cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{stylekey}{/tikz/optics/concave mirror}
+ Le style |concave mirror| correspond à |spherical mirror, spherical mirror type=concave|, et dessine un miroir concave. Voir |spherical mirror type| pour un exemple.
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/convex mirror}
+ Le style |convex mirror| correspond à |spherical mirror, spherical mirror type=convex|, et dessine un miroir convexe. Voir |spherical mirror type| pour un exemple.
+\end{stylekey}
+
+
+\begin{key}{/tikz/optics/spherical mirror orientation=\meta{type} (initially |ltr|)}
+ La clé |spherical mirror orientation| contrôle l'orientation de miroir (i.e. dans quel sens on suppose que la lumière se propage). Les valeurs possibles sont |ltr| (\enquote{left to right}) et |rtl| (\enquote{right to left}).
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+ \node[spherical mirror, spherical mirror orientation=ltr] at (0cm,0) {};
+ \node[spherical mirror, spherical mirror orientation=rtl] at (2cm,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+La décoration du miroir (hachures) est contrôlée par les mêmes clés que celle de |mirror| : |mirror decoration separation| et |mirror decoration amplitude|.
+
+
+La figure suivante récapitule certaines des ancres définies par |spherical mirror|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[spherical mirror,name=s,object height=8cm,line shape example,
+mirror decoration separation=0.141, mirror decoration amplitude=0.2] {};
+\foreach \anchor/\placement in
+{north/above,south/below,center/below right,
+east/below right,
+west/below,
+north east/above right,
+north west/above left,
+south east/below right,
+south west/below left,
+mirror center/left,
+arc start/above,
+arc end/below,
+arc center/right,
+27/right,
+focus/above}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+Avec les miroirs sphériques, les \enquote{border anchor} de tikz sont particulièrement utiles. Des ancres numériques (de la forme |node.27|) sont définies, qui permettent d'accèder au bord de la |shape| dans la direction angulaire correspondante (ici à \ang{27}). Rappelons que dans tikz, les angles sont comptés dans le sens trigonométrique à partir de l'axe $Ox$, et exprimés en degrés. Suit un exemple, où on a dessiné le cercle sous-jacent.
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]]
+\coordinate (O) at (0,0);
+\node[circle,draw, inner sep=0, outer sep=0,minimum height=2cm, densely dashed, gray!60] (C) at (O) {};
+\node[spherical mirror,draw,object height=2cm,anchor=mirror center,
+ spherical mirror angle=180] (M) at (O) {};
+\draw[blue] (O) -- (M.0);
+\draw[violet] (O) -- (M.45);
+\draw[red] (O) -- (M.90);
+\draw[orange] (O) -- (M.135);
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{warning}
+ Pour le moment, les angles supérieurs à $\pm$|spherical mirror angle|$/2$ sont traités comme si le miroir était un cercle entier (et pas un arc). Il n'est pas garanti que ce comportement soit maintenu.
+\end{warning}
+
+\end{shape}
+
+
+\begin{stylekey}{/tikz/optics/draw mirror center=\meta{style}}
+ Le style |draw mirror center| permet de dessiner le centre du miroir (avec le style \meta{style} s'il est spécifié).
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+\node[concave mirror,draw mirror center, draw mirror focus={red}] {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/draw mirror focus=\meta{style}}
+ Le style |draw mirror focus| permet de dessiner le foyer du miroir (avec le style \meta{style} s'il est spécifié). Voir |draw mirror center| pour un exemple.
+\end{stylekey}
+
+\subsubsection{Polariseur}
+
+\begin{shape}{polarizer}
+Dessine un polariseur.
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[polarizer] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| est applicable.
+\end{key}
+
+
+\begin{key}{/tikz/optics/object aspect ratio=\meta{number} (initially \pgfkeysvalueof{/tikz/optics/object aspect ratio})}
+ L'option |object aspect ratio| contrôle le rapport d'aspect du polariseur. Si \meta{number} vaut |1|, la largeur de l'objet est égale à sa hauteur.
+ Si \meta{number}|=1/2|, la largeur du polariseur vaut la moitié de sa hauteur
+
+ \begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[polarizer, object aspect ratio=0.2] (L1) at (0,0) {};
+ \node[polarizer, object aspect ratio=0.5] (L2) at (4cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+
+La figure suivante récapitule les ancres définies par |polarizer|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[polarizer,name=s,object height=8cm,object aspect ratio=0.4,shape example] {};
+\foreach \anchor/\placement in
+{north/above,south/below,east/right,west/left,center/below,
+north east/right,north west/left,south east/right,south west/left}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+
+\subsubsection{Séparateur de faisceau}
+
+\begin{stylekey}{/tikz/optics/beam splitter}
+Dessine un séparateur de faisceau. Les options et ancres sont les mêmes que pour |polarizer|.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[beam splitter] at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{stylekey}
+
+
+\subsubsection{Prisme à vision directe}
+
+\begin{shape}{double amici prism}
+Dessine un prisme à vision directe (double prisme d'Amici).
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[double amici prism] (PVD) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{key}{/tikz/optics/prism height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/prism height})}
+ La clé |prism height| contrôle la hauteur des trois prismes identiques constituant le PVD (la longueur d'un côté est donc $2/\sqrt{3}$ fois cette hauteur).
+
+ \begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[double amici prism, prism height=1cm] (PVD1) at (0,0) {};
+ \node[double amici prism, prism height=0.5cm] (PVD2) at (4cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikz/optics/prism apex angle=\meta{angle} (initially \pgfkeysvalueof{/tikz/optics/prism apex angle})}
+ La clé |prism apex angle| contrôle l'angle au sommet des trois prismes identiques. \meta{angle} est exprimé en degrés. Si \meta{angle} vaut |60|, les prismes sont des triangles isocèles.
+
+ \begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[double amici prism, prism apex angle=40] (PVD1) at (0,0) {};
+ \node[double amici prism, prism apex angle=60] (PVD2) at (4cm,0) {};
+ \node[double amici prism, prism apex angle=80] (PVD3) at (10cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+
+La figure suivante récapitule les ancres définies par |double amici prism|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[double amici prism,name=s,prism height=4.5cm,shape example] {};
+\foreach \anchor/\placement in
+{north/above,south/below,east/right,west/left,center/below,
+north east/right,north west/left,south east/right,south west/left}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+
+\subsubsection{Élément générique fin}
+
+\begin{shape}{thin optics element}
+Dessine un élement générique (utilisé pour des éléments plus spécifiques).
+Cette |shape| peut être utile pour dessiner un objet non prévu, en lui donnant un style pertinent.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[thin optics element] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| est applicable.
+\end{key}
+
+La figure suivante récapitule les ancres définies par |thin optics element|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[thin optics element,name=s,object height=8cm,line shape example] {};
+\foreach \anchor/\placement in
+{north/above,south/below,center/right}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+\subsubsection{Élément générique épais}
+
+\begin{shape}{thick optics element}
+Dessine un élément générique épais.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[thick optics element] at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{key}{/tikz/optics/object height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/object height})}
+ L'option |object height| est applicable.
+\end{key}
+
+
+\begin{key}{/tikz/optics/object aspect ratio=\meta{number or length} (initially 0.05)}
+ L'option |object aspect ratio| contrôle le rapport d'aspect de l'objet.
+\end{key}
+
+
+
+
+La figure suivante récapitule les ancres définies par |thick optics element|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[thick optics element,name=s,object height=8cm,shape example,object aspect ratio=0.2] {};
+\foreach \anchor/\placement in
+{north/above,south/below,east/right,west/left,center/below,
+north east/right,north west/left,south east/right,south west/left}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+\subsubsection{Anticalorique}
+
+\begin{stylekey}{/tikz/optics/heat filter}
+Le style |heat filter| permet de dessiner un filtre anticalorique. Les options de |thick optics element| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[heat filter] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+
+\subsubsection{Écran}
+
+
+\begin{stylekey}{/tikz/optics/screen}
+Le style |screen| permet de dessiner un écran. Les options de |thin optics element| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[screen] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Réseau de diffraction}
+
+\begin{stylekey}{/tikz/optics/diffraction grating}
+Le style |diffraction grating| permet de dessiner un réseau de diffraction. Les options de |thin optics element| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[diffraction grating] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Grille}
+
+\begin{stylekey}{/tikz/optics/grid}
+Le style |grid| permet de dessiner une grille. Les options de |thin optics element| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[grid] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Lame semi-réfléchissante}
+
+\begin{stylekey}{/tikz/optics/semi-transparent mirror}
+Le style |semi-transparent mirror| permet de dessiner un miroir semi-réfléchissant. Les options de |thin optics element| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[semi-transparent mirror] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Diaphragme}
+
+\begin{stylekey}{/tikz/optics/diaphragm}
+Le style |diaphragm| permet de dessiner un diaphragme (c'est un |slit| avec une fente large). Les options de |slit| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[diaphragm] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+
+\subsection{Lampes et capteurs}
+
+\subsubsection{Entrée/sortie optique générique}
+
+\begin{shape}{generic optics io}
+Dessine un système entrée-sortie générique (utilisé pour des objets plus spécifiques).
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{key}{/tikz/optics/io body height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/io body height})}
+ La clé |io body height| contrôle la taille de la lampe. En particulier, \meta{length} spécifie la hauteur du corps de la lampe,
+ et les autres longueurs sont spécifiées relativement à celle-ci. En modifiant \meta{length}, on modifie donc la taille de la lampe
+ sans la déformer.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io, io body height=1cm] (L1) at (0,0) {};
+ \node[generic optics io, io body height=2cm] (L2) at (10cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/optics/io body aspect ratio=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/io body aspect ratio})}
+ La clé |io body aspect ratio| contrôle le rapport d'aspect de la lampe. Si \meta{number} vaut |1|, la largeur de la lampe est égale à sa hauteur.
+ Si \meta{number}|=1/2|, la largeur de la lampe vaut la moitié de sa hauteur
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io, io body aspect ratio=1] (L1) at (0,0) {};
+ \node[generic optics io, io body aspect ratio=2] (L2) at (8cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+\begin{stylekey}{/tikz/optics/io body width=\meta{number or length}}
+La clé |io body width| est un alias pour |io body aspect ratio|.
+\end{stylekey}
+
+
+\begin{key}{/tikz/optics/io aperture width=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/io aperture width})}
+ La clé |io aperture width| contrôle la largeur du système de sortie de la lampe (qui représente un condenseur, une lentille de collimation, etc.), en unités de la hauteur du corps de la lampe. Si \meta{number}|=0|, le système de sortie n'est pas affiché.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io, io aperture width=0] at (0,0) {};
+ \node[generic optics io, io aperture width=0.1] at (8cm,0) {};
+ \node[generic optics io, io aperture width=0.5] at (16cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+
+
+\begin{key}{/tikz/optics/io aperture height=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/io aperture height})}
+ La clé |io aperture width| contrôle la hauteur du système de sortie de la lampe (qui représente un condenseur, une lentille de collimation, etc.), en unités de la hauteur du corps de la lampe.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io, io aperture height=0.5] at (0,0) {};
+ \node[generic optics io, io aperture height=0.8] at (8cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikz/optics/io aperture shift=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/io aperture shift})}
+ L'option |io aperture shift| contrôle le décalage du système de sortie de la lampe par rapport au centre, en unités de la hauteur du corps de la lampe.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5,
+optics,io body height=2cm,io body aspect ratio=0.5,io aperture height=0.3, io aperture width=0.1]
+ \node[generic optics io,io aperture shift=-0.25] at (-5cm,0) {};
+ \node[generic optics io,io aperture shift=0] at (0,0) {};
+ \node[generic optics io,io aperture shift=0.25] at (5cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+On peut afficher du texte dans le corps d'une lampe en utilisant le texte de la |node|.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io] at (-5cm,0) {Q.I.};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/io orientation=\meta{type} (initially |ltr|)}
+ La clé |io orientation| détermine le sens dans lequel est dessiné l'objet (avec l'ouverture à droite (au niveau de l'ancre |east|) quand elle vaut |ltr| et à gauche (au niveau de l'ancre |west|) quand elle vaut |rtl|). Les noms correspondent à \enquote{left to right} et \enquote{right to left}.
+ Seules les arguments |ltr| et |rtl| sont autorisés. La différence avec |rotate| est que |io orientation| modifie les ancres.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io] at (0,0) {};
+ \node[generic optics io,io orientation=ltr] at (5cm,0) {};
+ \node[generic optics io,io orientation=rtl] at (10cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+On peut afficher du texte dans le corps d'une lampe en utilisant le texte de la |node|.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic optics io] at (-5cm,0) {Q.I.};
+\end{tikzpicture}
+\end{codeexample}
+
+
+La figure suivante récapitule les ancres définies par |generic optics io|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[generic optics io,name=s,io body height=4cm,io aperture width=0.7,io body aspect ratio=1.8,shape example] {};
+\foreach \anchor/\placement in
+{body north/above,body south/below,body east/above right,body west/right,body center/below,
+body north east/above,body north west/above,body south east/below,body south west/below,
+aperture north/above,aperture south/below,aperture east/right,aperture west/left,aperture center/below,
+aperture north east/right,aperture north west/left,aperture south east/right,aperture south west/left}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+Notons que les ancres |body east| et |aperture west| correspondent au même point. Les deux sont définies dans un souci de cohérence. Une ancre |east| est définie comme |body east| ou |aperture east| en fonction de la valeur de |io orientation| de manière à ce que |east| soit la clé la plus à l'est (à droite). La même chose a lieu pour l'ancre |west|.
+
+La figure suivante récapitule les ancres définies par |generic optics io, io orientation=rtl|.
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[generic optics io,name=s,io body height=4cm,io aperture width=0.7,io body aspect ratio=1.8,
+io orientation=rtl,shape example] {};
+\foreach \anchor/\placement in
+{body north/above,body south/below,body east/above right,body west/above right,body center/below,
+body north east/above,body north west/above,body south east/below,body south west/below,
+aperture north/above,aperture south/below,aperture east/right,aperture west/left,aperture center/below,
+aperture north east/right,aperture north west/left,aperture south east/right,aperture south west/left}
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+
+\subsubsection{Ligne de capteurs}
+
+
+\begin{shape}{sensor line}
+Dessine une ligne de capteurs (type Caliens).
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[sensor line] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/optics/sensor line height=\meta{length} (initially \pgfkeysvalueof{/tikz/optics/sensor line height})}
+ La clé |sensor line height| contrôle la taille de la ligne de capteurs. En particulier, \meta{length} spécifie la hauteur du corps de la ligne,
+ et les autres longueurs peuvent être spécifiées relativement à celle-ci (en ne donnant pas d'unité). Dans ce cas, en modifiant \meta{length}, on modifie donc la taille de la ligne de capteurs
+ sans la déformer.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[sensor line, sensor line height=1cm] (L1) at (0,0) {};
+ \node[sensor line, sensor line height=2cm] (L2) at (4cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/optics/sensor line aspect ratio=\meta{number} (initially \pgfkeysvalueof{/tikz/optics/sensor line aspect ratio})}
+ La clé |sensor line aspect ratio| contrôle le rapport d'aspect de la ligne de capteurs.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[sensor line, sensor line aspect ratio=0.2] (L1) at (0,0) {};
+ \node[sensor line, sensor line aspect ratio=0.4] (L2) at (4cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikz/optics/sensor line pixel number=\meta{number} (initially \pgfkeysvalueof{/tikz/optics/sensor line pixel number})}
+ La clé |sensor line pixel number| contrôle le nombre de pixels \meta{number} de la ligne de capteurs.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[sensor line, sensor line pixel number=2] at (0,0) {};
+ \node[sensor line, sensor line pixel number=4] at (4cm,0) {};
+ \node[sensor line, sensor line pixel number=10] at (8cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikz/optics/sensor line pixel width=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/sensor line pixel width})}
+ La clé |sensor line pixel width| contrôle la largeur des pixels : \meta{number or length} est la largeur d'un pixel (par rapport à la largeur du capteur si elle est relative).
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[sensor line, sensor line pixel width=0.3] at (0,0) {};
+ \node[sensor line, sensor line pixel width=0.8] at (4cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+\begin{key}{/tikz/optics/sensor line inner ysep=\meta{number or length} (initially \pgfkeysvalueof{/tikz/optics/sensor line inner ysep})}
+ La clé |sensor line inner ysep| contrôle la séparation entre les bords haut et bas du capteur et les pixels. Si \meta{number or length} est une hauteur relative, elle est comptée par rapport à la hauteur du capteur. La hauteur des pixels est calculée de manière à ce qu'il y en ait un nombre |sensor line pixel number|, en tenant compte de cette séparation.
+
+ \begin{codeexample}[]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[sensor line,sensor line inner ysep=0] at (0,0) {};
+ \node[sensor line,sensor line inner ysep=0.1] at (4cm,0) {};
+ \node[sensor line,sensor line inner ysep=0.2] at (8cm,0) {};
+\end{tikzpicture}
+ \end{codeexample}
+\end{key}
+
+
+Les ancres |north|, |south|, |east|, |west|, |center|, |north east|, |north west|, |south east|, |south west|, ainsi que
+|pixel <i> <anchor>| où |<anchor>| vaut |north|, |south|, etc. et où |<i>| est le numéro du pixel considéré
+(allant de |1| à |sensor line pixel number|) sont définies. Par exemple, on peut utiliser |pixel 3 west|.
+
+La figure suivante récapitule les ancres définies par |sensor line| définies globalement ainsi que pour le pixel 4 (en rouge).
+
+\begin{codeexample}[]
+\Huge
+\begin{tikzpicture}[use optics]
+\node[sensor line,name=s,sensor line height=10cm,sensor line aspect ratio=0.8,
+sensor line inner ysep=0.1,sensor line pixel number=5, shape example] {};
+\foreach \anchor/\placement in
+{north/above,south/below,east/right,west/left,center/below,
+north east/right,north west/left,south east/right,south west/left}
+
+\draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+
+\foreach \anchor/\placement in
+{pixel 4 north/above,pixel 4 south/below,pixel 4 east/right,pixel 4 west/left,pixel 4 center/below,
+pixel 4 north east/right,pixel 4 north west/left,pixel 4 south east/right,pixel 4 south west/left}
+% manque pixel <i> <subanchor>
+\draw[red,shift=(s.\anchor)] plot[mark=x,red] coordinates{(0,0)}
+node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+
+\end{tikzpicture}
+\end{codeexample}
+
+\end{shape}
+
+
+Remarques :
+\begin{itemize}
+ \item Quand les ancres |east| et |west| ne sont pas définies explicitement, elles sont en fait des alias pour |center|. Cela permet aux clés |right=of...| et assimilées de fonctionner correctement.
+\end{itemize}
+
+
+
+\subsubsection{Capteur générique}
+
+\begin{stylekey}{/tikz/optics/generic sensor}
+Le style |generic sensor| permet de dessiner un capteur. Les options de |generic optics io| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic sensor] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Lampe générique}
+
+\begin{stylekey}{/tikz/optics/generic lamp}
+Le style |generic lamp| permet de dessiner une lampe. Les options de |generic optics io| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[generic lamp] (S) at (0,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Lampe QI}
+
+\begin{stylekey}{/tikz/optics/halogen lamp}
+Le style |halogen lamp| permet de dessiner une lampe de type \enquote{lampe halogène Quartz Iode}. Les options de |generic optics io| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[halogen lamp] (S) at (0,0) {};
+ \node[halogen lamp] (S) at (5cm,0) {QI};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Lampe spectrale}
+
+\begin{stylekey}{/tikz/optics/spectral lamp}
+Le style |spectral lamp| permet de dessiner une lampe de type \enquote{lampe spectrale}. Les options de |generic optics io| sont applicables. Par ailleurs, un style est automatiquement appliqué pour autoriser le texte multiligne.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[spectral lamp] (S) at (0,0) {};
+ \node[spectral lamp] (S) at (5cm,0) {\ce{Hg} \\ BP};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsubsection{Laser}
+
+\begin{stylekey}{/tikz/optics/laser}
+Le style |laser| permet de dessiner un laser. Les options de |generic optics io| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[laser] (S) at (0,0) {};
+ \node[laser] (S) at (5cm,0) {\ce{HeNe}};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/laser'}
+Le style |laser'| permet de dessiner un laser sans \enquote{orifice de sortie} (i.e. |io aperture width=0pt|). Les options de |generic optics io| sont applicables.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics,scale=.5]
+ \node[laser'] (S) at (0,0) {\ce{Nd}:YAG};
+ \draw[green] (S.aperture east) -- +(2cm,0);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsection{Divers}
+
+
+
+\subsubsection{Marquer des rayons}
+
+\begin{update}
+ 2014-12-07 : cette partie a été substantiellement modifiée.
+\end{update}
+
+\begin{warning}
+ Cette partie n'est pas encore stable. Les raccourcis |->-|, etc. ne devraient normalement pas changer
+\end{warning}
+
+Les flèches pour marquer les rayons sont conçues pour se trouver \emph{vraiment} au milieu du rayon (contrairement à ce qui arrive en utilisant simplement |\arrow{>>}| avec |put arrow|).
+
+\begin{stylekey}{/tikz/optics/->-}
+ Ce style ajoute une flèche au milieu du chemin.
+ \begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[->-] (0,0) -- (1.5cm,1cm);
+\end{tikzpicture}
+ \end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/-<-}
+ Ce style ajoute une flèche au milieu du chemin, dans le sens opposé à |->-|.
+ \begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[-<-] (0,0) -- (1.5cm,1cm);
+\end{tikzpicture}
+ \end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/->>-}
+ Ce style ajoute une double flèche au milieu du chemin.
+ \begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[->>-] (0,0) -- (1.5cm,1cm);
+\end{tikzpicture}
+ \end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/-<<-}
+ Ce style ajoute une double flèche au milieu du chemin, dans le sens opposé à |-<<-|.
+ \begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[-<<-] (0,0) -- (1.5cm,1.1cm);
+\end{tikzpicture}
+ \end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/->n-=\{n=\meta{num}, \meta{specs}\}}
+ Ce style ajoute \meta{num} flèches au milieu du chemin. Les spécifications \meta{specs} sont appliquées aux flèches, suivant la syntaxe de |put arrow|.
+ \begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[->n-={n=4}] (0,0) -- (1.5cm,1cm);
+\end{tikzpicture}
+ \end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/optics/-<n-={n=\meta{num}, \meta{specs}}}
+ Ce style ajoute \meta{num} flèches au milieu du chemin, dans le sens opposé à |->n-|.
+ \begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[-<n-={n=6}] (0,0) -- (1.5cm,1cm);
+\end{tikzpicture}
+ \end{codeexample}
+\end{stylekey}
+
+Des raccourcis allant de |->-| à |->>>>-| (idem pour |-<-|) sont disponibles. Les styles |->-|, |-<-|, etc. utilisent le style |put arrow| avec la flèche |multiple ray arrow|. Ils peuvent donc être configurés en suivant la syntaxe de |put arrow|, par exemple
+
+\begin{codeexample}[width=4cm]
+\begin{tikzpicture}[use optics]
+ \draw[->>-={at=0.25}, ->-={at=0.75}] (0,0) -- (1.5cm,1cm) -- (3cm, 0);
+\end{tikzpicture}
+\end{codeexample}
+
+Cela marche aussi avec |->n-| et |-<n-|.
+
+\begin{codeexample}[width=4cm]
+\begin{tikzpicture}[use optics]
+ \draw[->n-={n=5, at=0.2, style=red}] (0,0) -- (1.5cm,1cm);
+\end{tikzpicture}
+\end{codeexample}
+
+\subsubsection{Placer des choses sur les chemins}
+
+\begin{update}
+ 2014-12-07 : cette partie a été substantiellement modifiée.
+\end{update}
+
+\begin{warning}
+ Cette partie n'est pas encore stable. Tout risque de changer à tout moment.
+\end{warning}
+
+\begin{key}{/tikz/put arrow}
+La clé |put arrow| permet d'ajouter facilement une flèche sur un chemin.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[put arrow] (0,0) -- (1.5cm,1cm);
+\end{tikzpicture}
+\end{codeexample}
+
+Par défaut, la flèche est |\arrow{>}| et elle est placée au milieu du chemin.
+Pour contrôler ces paramètres, il faut utiliser les sous-clés suivantes :
+
+\begin{key}{/tikz/put arrow/pos=\meta{pos} (initially \pgfkeysvalueof{/tikz/put arrow/pos})}
+ Positionne la flèche à la position \meta{pos} sur le chemin (par exemple, \meta{pos}|=0.5| place la flèche au milieu du chemin).
+\end{key}
+
+\begin{key}{/tikz/put arrow/at}
+ Alias pour |/tikz/put arrow/pos|.
+\end{key}
+
+\begin{key}{/tikz/put arrow/arrow=\meta{arrow specification}}
+ Utilise la flèche définie par \meta{arrow specification} (par exemple |stealth| ou |latex|).
+\end{key}
+
+\begin{key}{/tikz/put arrow/arrow'=\meta{arrow specification}}
+ Utilise la flèche définie par \meta{arrow specification} (par exemple |stealth| ou |latex|), mais avec une flèche inversée.
+\end{key}
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[put arrow={arrow'=stealth}] (0,0) -- (1cm,1cm);
+ \draw[put arrow={at=0.2}] (2cm,0) -- (3cm,1cm);
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{key}{/tikz/put arrow/style=\meta{style}}
+ Le |\meta{style}| est passé à |\arrow[|\meta{style}|]| pour dessiner les flèches.
+\end{key}
+
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[use optics]
+ \draw[red,put arrow={arrow=latex}]
+ (0,0) -- (1cm,1cm);
+ \draw[red,put arrow={arrow=latex,style={blue}}]
+ (1cm,0) -- (2cm,1cm);
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{stylekey}{/tikz/put arrow/every arrow}
+ Il s'agit d'un style passé à toutes les flèches dessinées par |put arrow| (dans la portée du style). Il faut utiliser |every arrow/.style={|\meta{style}|}| (ou |append style|, etc.).
+\end{stylekey}
+
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[use optics]
+ \draw[red,put arrow={arrow=latex}]
+ (0,0) -- (1cm,1cm);
+ \draw[red, put arrow/every arrow/.style={blue},
+ put arrow={at=0.2}, put arrow={at=0.5}, put arrow={at=0.8}]
+ (1cm,0) -- (2cm,1cm);
+ \draw[red, >=latex, put arrow/every arrow/.style={blue},
+ put arrow={at=0.2}, put arrow={at=0.5}, put arrow={at=0.8}]
+ (2cm,0) -- (3cm,1cm);
+\end{tikzpicture}
+\end{codeexample}
+
+
+
+Les différentes flèches utilisables sont détaillées dans le manuel de pgf/tikz.
+
+Pour un contrôle plus fin, il faut utiliser la bibliothèque tikz |markings|.
+
+Par ailleurs, pour flécher des rayons lumineux, des styles spécifiques |->-|, |-<-|, |->>-| et |-<<-| ont été définis.
+
+\end{key}
+
+\subsubsection{Placer des coordonnées sur les chemins}
+
+\begin{key}{/tikz/put coordinate=\meta{coordinate} at \meta{position}}
+
+Le style |put coordinate| crée une coordonnée nommée \meta{coordinate}
+à l'abscisse curviligne \meta{position} sur le chemin auquel est appliqué le style.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[use optics]
+ \draw[put coordinate=P at 0.3,put coordinate=Q at 0.7] (0,0)
+ to[bend left] (2cm,0);
+ \draw[red] (P) -- (1cm,-1cm);
+ \draw[blue] (Q) -- (1cm,-1cm);
+\end{tikzpicture}
+\end{codeexample}
+
+\end{key}
+
+\subsubsection{Indiquer des dimensions sur les schémas}
+
+\begin{warning}
+ Cette partie est expérimentale et sujette à beaucoup de changements brusques sans préavis.
+\end{warning}
+
+Commençons par un exemple.
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}
+\draw[fill=yellow!30]
+ (-1cm,0) coordinate (A) -- (1cm,0) coordinate (B)
+ -- (1cm,1.5cm) coordinate (B') -- (0.25cm,2.5cm) coordinate (b)
+ -- (-0.25cm,2.5cm) coordinate (a) -- (-1cm,1.5cm) coordinate (A')
+ -- cycle;
+
+\draw (A) to[dim arrow'={label'=$D$}] (B);
+\draw (A) to[dim arrow={label=$H$}] (A');
+\draw (a) to[short dim arrow={label=$d$,label near middle}] (b);
+\draw (B') to[dim arrow'={label'=$h$}] (b -| B');
+\end{tikzpicture}
+\end{codeexample}
+
+
+
+\begin{stylekey}{/tikz/dim arrow=\meta{sous-clés}}
+ Le style |dim arrow| permet d'indiquer des dimensions sur les schémas. Il s'applique à un |to path|. Par exemple,
+
+ \begin{codeexample}[width=4cm]
+\begin{tikzpicture}[use optics]
+ \node[circle,fill=red,inner sep=2pt] (a) at (0,0) {};
+ \node[circle,fill=red,inner sep=2pt] (b) at (2cm,0) {};
+ \draw (a.center) to[dim arrow={label=$\ell$}] (b.center);
+\end{tikzpicture}
+ \end{codeexample}
+
+ La flèche de dimension est décalée par rapport aux positions de départ et d'arrivée de manière à ne pas se superposer
+ à l'objet dont on veut marquer la dimension.
+
+ Plusieurs sous-clés permettent de spécifier des options en écriant |dim arrow={|\meta{sous-clés}|}|.
+
+ \begin{key}{/tikz/dim arrow/label=\meta{text}}
+ La clé |label| permet de spécifier le \meta{texte} à afficher sur la flèche, qui est positionné à gauche de la flèche par rapport au sens du chemin (via |/tikz/auto=left|).
+ \end{key}
+
+ \begin{key}{/tikz/dim arrow/label'=\meta{text}}
+ La clé |label'| a le même rôle que |label|, mais le \meta{texte} est affiché à droite dans le sens du chemin.
+ \end{key}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[rectangle, draw=black, fill=yellow!30, minimum width=1cm, minimum height=1cm] (R) at (0,0) {};
+
+ \draw (R.north east) to[dim arrow'={label'=$\ell'$}] (R.south east);
+ \draw (R.north east) to[dim arrow'={label=$\ell$}] (R.south east);
+\end{tikzpicture}
+\end{codeexample}
+
+ \begin{key}{/tikz/dim arrow/label text=\meta{text}}
+ La clé |label text| permet de spécifier le \meta{texte} à afficher sur la flèche sans modifier son positionnement.
+ \end{key}
+
+ \begin{stylekey}{/tikz/dim arrow/label style}
+ La clé |label style| permet de spécifier le style avec lequel le label doit être dessiné.
+ À moins de le faire exprès, il n'est pas conseillé de remplacer ce style (qui est utilisé pour placer le label), mais plutôt d'y ajouter des spécifications grace à |/.append style|.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[rectangle, draw=black, fill=yellow!30, minimum width=1cm, minimum height=1cm] (R) at (0,0) {};
+
+ \draw (R.north east)
+ to[dim arrow={label=$L$, label style/.append style=red}] (R.south east);
+ \draw (R.north west)
+ to[dim arrow'={label'=$L$}, red] (R.south west);
+\end{tikzpicture}
+\end{codeexample}
+ \end{stylekey}
+
+ \begin{key}{/tikz/dim arrow/raise=\meta{length} (initially \pgfkeysvalueof{/tikz/dim arrow/raise})}
+ La clé |raise| permet de spécifier la distance \meta{length} à laquelle doit être dessinée la flèche de dimension par rapport au chemin initial.
+ \begin{codeexample}[]
+\begin{tikzpicture}
+ \node[rectangle, draw=black, fill=yellow!30, minimum width=1cm, minimum height=1cm] (R) at (0,0) {};
+
+ \draw (R.north east)
+ to[dim arrow={label=$\ell$, raise=0.5cm}, black] (R.south east);
+ \draw (R.north east)
+ to[dim arrow={label=$\ell$, raise=1cm}, red] (R.south east);
+\end{tikzpicture}
+\end{codeexample}
+ \end{key}
+
+ \begin{stylekey}{/tikz/dim arrow/no raise}
+ Équivalent à |raise=0|. (Est-ce bien utile ?)
+ \end{stylekey}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/dim arrow'=\meta{sous-clés}}
+ Le style |dim arrow'| a le même rôle que |dim arrow|, mais la valeur initiale de |/tikz/dim arrow/raise| est de |-|\texttt{\pgfkeysvalueof{/tikz/dim arrow/raise}} au lieu de \texttt{\pgfkeysvalueof{/tikz/dim arrow/raise}}.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[rectangle, draw=black, fill=yellow!30, minimum width=1cm, minimum height=1cm] (R) at (0,0) {};
+
+ \draw (R.north east) to[dim arrow'={label=$\ell$}, black] (R.south east);
+ \draw (R.north east) to[dim arrow={label=$\ell$}, red] (R.south east);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+
+\begin{stylekey}{/tikz/short dim arrow=\meta{sous-clés}}
+ Le style |short dim arrow| a le même but que |dim arrow|, mais dans le cas où la dimension à marquer est petite, et où il faut que les flèches soient à l'extérieur.
+
+ \begin{codeexample}[width=4cm]
+\begin{tikzpicture}[use optics]
+ \node[circle,fill=red,inner sep=2pt] (a) at (0,0) {};
+ \node[circle,fill=red,inner sep=2pt] (b) at (1cm,0) {};
+ \draw (a.center)
+ to[short dim arrow={label=$\ell$}]
+ (b.center);
+\end{tikzpicture}
+ \end{codeexample}
+
+ Les options de |/tikz/dim arrow| s'appliquent, ainsi que quelques options supplémentaires.
+
+ \begin{key}{/tikz/dim arrow/label near start}
+ La clé |label near start| permet de placer l'étiquette donnant la dimension vers le début du chemin.
+ C'est le comportement par défaut.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[rectangle, draw=black, fill=yellow!30, minimum width=1cm, minimum height=0.5cm] (R) at (0,0) {};
+
+ \draw (R.north east) to[short dim arrow={label=$\ell$}] (R.south east);
+\end{tikzpicture}
+\end{codeexample}
+ \end{key}
+
+ \begin{key}{/tikz/dim arrow/label near end}
+ La clé |label near end| permet de placer l'étiquette donnant la dimension vers la fin du chemin.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[rectangle, draw=black, fill=yellow!30, minimum width=1cm, minimum height=0.5cm] (R) at (0,0) {};
+
+ \draw (R.north east)
+ to[short dim arrow={label=$\ell$, label near end}] (R.south east);
+\end{tikzpicture}
+\end{codeexample}
+ \end{key}
+
+ \begin{key}{/tikz/dim arrow/label near middle}
+ La clé |label near middle| permet de placer l'étiquette donnant la dimension vers le milieu du chemin.
+ Dans ce cas, l'étiquette n'est pas décalée par rapport à la flèche (parce qu'il n'y a pas de superposition) ; cela peut être rétabli en spécifiant |/tikz/dim arrow/label style| explicitement.
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[rectangle, draw=black, fill=yellow!30, minimum width=1cm, minimum height=0.5cm] (R) at (0,0) {};
+
+ \draw (R.north east)
+ to[short dim arrow={label=$\ell$, label near middle}] (R.south east);
+\end{tikzpicture}
+\end{codeexample}
+ \end{key}
+
+
+
+ \begin{key}{/tikz/dim arrow/arrow length=\meta{length} (initially \pgfkeysvalueof{/tikz/dim arrow/arrow length})}
+ La clé |arrow length| permet spécifier la taille \meta{length} des flèches extérieures.
+ \end{key}
+\end{stylekey}
+
+\begin{stylekey}{/tikz/short dim arrow'=\meta{sous-clés}}
+ Le style |short dim arrow'| a le même rôle que |short dim arrow|, mais la valeur initiale de |/tikz/dim arrow/raise| est de |-0.5cm| au lieu de |0.5cm|.
+
+ \begin{codeexample}[width=4cm]
+\begin{tikzpicture}[use optics]
+ \coordinate (a) at (0,0);
+ \coordinate (b) at (1cm,0);
+ \draw[red,mark=x, draw=none] plot coordinates {(a) (b)};
+ \draw (a.center) to[short dim arrow, blue] (b.center);
+ \draw (a.center) to[short dim arrow', red] (b.center);
+\end{tikzpicture}
+ \end{codeexample}
+\end{stylekey}
+
+\section{Remerciements}
+
+Je remercie les collègues et amis qui ont essuyé les plâtres en utilisant les premières versions de cette bibliothèque, et en particulier les auteurs du livre \emph{Physique expérimentale}\footnote{\url{http://www.physique-experimentale.com/}} pour lequel la bibliothèque a été développée.
+
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-optics/tikzlibraryoptics.code.tex b/graphics/pgf/contrib/tikz-optics/tikzlibraryoptics.code.tex
new file mode 100644
index 0000000000..72f0d6491a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-optics/tikzlibraryoptics.code.tex
@@ -0,0 +1,2496 @@
+\iffalse
+The tikzoptics library
+
+Copyright (C) 2013-2016 by
+ Michel Fruchart <michel.fruchart@ens-lyon.org>
+
+This work may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), version 1.3c, which can be
+found at the address:
+https://www.latex-project.org/lppl/lppl-1-3c/
+
+Alternatively, it may be distributed and/or modified under the conditions of
+the GNU General Public License (GNU GPL), version 2, which can be found
+at the address:
+https://www.gnu.org/licenses/gpl-2.0.en.html
+or any later version published by the Free Software Foundation.
+\fi
+\makeatletter
+
+
+\def\tikzopticsversion{0.2.3}
+\def\tikzopticsversiondate{2017-03-11}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% errors from this library
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\opticserror#1{\pgfutil@packageerror{tikz/optics}{#1}{}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% handler |collect unknowns|
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% from http://tex.stackexchange.com/questions/81821/filtering-options-with-pgfkeys/81985#81985
+% used by /tikz/optics/->n-
+%
+\pgfkeys{
+ /handlers/.collect unknowns/.style = {
+ unknown options/.initial = {},
+ .unknown/.code = {%
+ \letcs\reserved{pgfk@\pgfkeyscurrentpath/unknown options}%
+ \csedef{pgfk@\pgfkeyscurrentpath/unknown options}{%
+ \ifx\reserved\empty\else\expandonce\reserved,\fi
+ \expandonce\pgfkeyscurrentname
+ \ifx\pgfkeysnovalue##1\else=\expandonce\pgfkeyscurrentvalue\fi
+ }%
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% defining |optics| family
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfkeys{
+ /tikz/.cd,
+ optics/.is family,
+ optics/.search also={/tikz},
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% [use optics]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfkeys{
+ /tikz/use optics/.append code={
+ \pgfkeys{
+ /tikz/.cd,
+ % shapes
+ % FIXME il ne devrait pas y avoir de logique (ni de valeurs par défaut) ici, seulement l'export dans l'espace de nom commun
+ lens/.prefix style={shape=lens,optics,draw},
+ slit/.prefix style={shape=slit,optics,draw},
+ double slit/.prefix style={shape=double slit,optics,draw},
+ thin optics element/.prefix style={shape=thin optics element,optics,draw},
+ polarizer/.prefix style={shape=polarizer,optics,draw,object aspect ratio=0.1},
+ generic optics io/.prefix style={shape=generic optics io,optics,draw},
+ sensor/.prefix style={shape=sensor,optics,object aspect ratio=1,draw},
+ sensor line/.prefix style={shape=sensor line,optics,draw},
+ mirror/.prefix style={shape=mirror,optics,draw},
+ spherical mirror/.prefix style={shape=spherical mirror,optics,draw},
+ thick optics element/.prefix style={shape=thick optics element,optics,draw,object aspect ratio=0.1},
+ heat filter/.prefix style={shape=thick optics element,optics,draw, object aspect ratio=0.05},
+ double amici prism/.prefix style={shape=double amici prism,optics,draw, prism height=1cm, prism apex angle=60},
+ % styles
+ screen/.prefix style={optics,/tikz/optics/screen},
+ diffraction grating/.style={optics,/tikz/optics/diffraction grating},
+ grid/.style={optics, /tikz/optics/grid},
+ semi-transparent mirror/.style={optics, /tikz/optics/semi-transparent mirror},
+ diaphragm/.style={optics, /tikz/optics/diaphragm},
+ beam splitter/.prefix style={optics,/tikz/optics/beam splitter},
+ generic lamp/.prefix style={optics,/tikz/optics/generic lamp},
+ generic sensor/.prefix style={optics,/tikz/optics/generic sensor},
+ halogen lamp/.prefix style={optics,/tikz/optics/halogen lamp},
+ spectral lamp/.prefix style={optics,/tikz/optics/spectral lamp},
+ laser/.prefix style={optics,/tikz/optics/laser},
+ laser'/.prefix style={optics,/tikz/optics/laser'},
+ concave mirror/.prefix style={optics, /tikz/optics/concave mirror},
+ convex mirror/.prefix style={optics, /tikz/optics/convex mirror},
+ % arrows (styles)
+ ->-/.prefix style={optics,/tikz/optics/->-={##1}},
+ -<-/.prefix style={optics,/tikz/optics/-<-={##1}},
+ ->>-/.prefix style={optics,/tikz/optics/->>-={##1}},
+ -<<-/.prefix style={optics,/tikz/optics/-<<-={##1}},
+ ->>>-/.prefix style={optics,/tikz/optics/->>>-={##1}},
+ -<<<-/.prefix style={optics,/tikz/optics/-<<<-={##1}},
+ ->>>>-/.prefix style={optics,/tikz/optics/->>>>-={##1}},
+ -<<<<-/.prefix style={optics,/tikz/optics/-<<<<-={##1}},
+ ->n-/.prefix style={optics,/tikz/optics/->n-={##1}},
+ -<n-/.prefix style={optics,/tikz/optics/-<n-={##1}},
+ }
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% We need some existing tikz libraries and tex packages.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usetikzlibrary{decorations,decorations.markings, decorations.pathreplacing}
+\usepackage{etoolbox}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Key |object height|
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\pgfkeys{/tikz/optics/.cd,
+ object height/.initial=2cm,
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [thin optics element]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfdeclareshape{thin optics element}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/object height}}%
+ }
+
+ \savedanchor{\north}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{north}{\north}
+
+ \savedanchor{\south}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south}{\south}
+
+ \anchor{east}{\center}
+ \anchor{west}{\center}
+
+ \anchorborder{%
+ \pgf@xb=\pgf@x% xb/yb is target
+ \pgf@yb=\pgf@y%
+ \south%
+ \pgf@xa=\pgf@x% xa/ya is se
+ \pgf@ya=\pgf@y%
+ \north%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \pgf@xc=.5\pgf@x% x/y is half width/height
+ \pgf@yc=.5\pgf@y%
+ \advance\pgf@xa by\pgf@xc% xa/ya becomes center
+ \advance\pgf@ya by\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpointborderrectangle
+ {\noexpand\pgfpoint{\the\pgf@xb}{\the\pgf@yb}}
+ {\noexpand\pgfpoint{\the\pgf@xc}{\the\pgf@yc}}%
+ }%
+ \pgf@process{\pgf@marshal}%
+ \advance\pgf@x by\pgf@xa%
+ \advance\pgf@y by\pgf@ya%
+ }
+
+ \backgroundpath
+ {
+ \north \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \south \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ }
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [lens]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\iftikz@optics@lens@converging
+\tikz@optics@lens@convergingtrue
+
+% keys
+% - focal lens is used to define anchors |east focus| and |west focus|
+% - lens height is used to define anchors |lens north| and |lens south|
+% - lens type (converging or diverging)
+\pgfkeys{/tikz/optics/.cd,
+ focal length/.initial=1cm,
+ lens height/.initial=0.8,
+ lens type/.is choice,
+ lens type/converging/.code={\tikz@optics@lens@convergingtrue},
+ lens type/diverging/.code={\tikz@optics@lens@convergingfalse}
+}
+\pgfdeclareshape{lens}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\focalLength{%
+ \edef\focalLength{\pgfkeysvalueof{/tikz/optics/focal length}}%
+ }
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/object height}}%
+ }
+
+ \savedmacro\lensHeight{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/lens height}}%
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\lensHeight}{\pgfkeysvalueof{/tikz/optics/lens height}}%
+ \else%
+ \pgfmathsetlengthmacro{\lensHeight}{\pgfkeysvalueof{/tikz/optics/lens height}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ }
+
+ \savedanchor{\lensnorth}{
+ \pgfpointorigin
+ \pgf@y=\lensHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{lens north}{\lensnorth}
+
+ \savedanchor{\lenssouth}{
+ \pgfpointorigin
+ \pgf@y=\lensHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{lens south}{\lenssouth}
+
+ \savedanchor{\north}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{north}{\north}
+
+ \savedanchor{\south}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south}{\south}
+
+ \savedanchor{\eastfocal}{
+ \pgf@x=\focalLength%
+ \pgf@y=0cm%
+ }
+ \anchor{east focal point}{\eastfocal}
+ \anchor{east focus}{\eastfocal}
+
+
+ \savedanchor{\westfocal}{
+ \pgf@x=-\focalLength%
+ \pgf@y=0cm%
+ }
+ \anchor{west focal point}{\westfocal}
+ \anchor{west focus}{\westfocal}
+
+ \anchor{east}{\center}
+ \anchor{west}{\center}
+
+ \inheritanchorborder[from=thin optics element]
+
+ \backgroundpath
+ {
+ \north \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \south \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+
+ \iftikz@optics@lens@converging
+ \pgfsetarrowsstart{lens arrow}
+ \pgfsetarrowsend{lens arrow}
+ \else
+ \pgfsetarrowsstart{lens arrow reversed}
+ \pgfsetarrowsend{lens arrow reversed}
+ \fi
+ }
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [slit]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% keys : slit height
+\pgfkeys{/tikz/optics/.cd,
+ slit height/.initial=0.1
+}
+
+\pgfdeclareshape{slit}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+ \anchor{slit center}{\center}
+ % TODO par cohérence ?
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/object height}}%
+ }
+
+ \savedmacro\slitHeight{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/slit height}}%
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\slitHeight}{\pgfkeysvalueof{/tikz/optics/slit height}}%
+ \else%
+ \pgfmathsetlengthmacro{\slitHeight}{\pgfkeysvalueof{/tikz/optics/slit height}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ }
+
+ \savedanchor{\north}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{north}{\north}
+
+ \savedanchor{\south}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south}{\south}
+
+ \savedanchor{\slitnorth}{
+ \pgf@x=0cm%
+ \pgf@y=\slitHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{slit north}{\slitnorth}
+
+ \savedanchor{\slitsouth}{
+ \pgf@x=0cm%
+ \pgf@y=\slitHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{slit south}{\slitsouth}
+
+ \anchor{east}{\center}
+ \anchor{west}{\center}
+
+ \inheritanchorborder[from=thin optics element]
+
+ \backgroundpath
+ {
+ % erreurs possibles dans la spécification du dessin
+ \pgfmathparse{notless(\slitHeight, \objectHeight)}
+ \ifnum\pgfmathresult=1
+ \opticserror{<slit height> should be strictly lower than <object height> (in slit)}
+ \fi
+ \north \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \slitnorth \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+
+ \south \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \slitsouth \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ }
+}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [double slit]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% keys :
+% - slit height : (relative) height of the holes (each)
+% - slit separation : (relative) distance between the centers of the holes
+\pgfkeys{/tikz/optics/.cd,
+ object height/.initial=2cm,
+ slit height/.initial=0.075,
+ slit separation/.initial=0.2
+}
+
+\pgfdeclareshape{double slit}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/object height}}%
+ }
+
+ \savedmacro\slitHeight{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/slit height}}%
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\slitHeight}{\pgfkeysvalueof{/tikz/optics/slit height}}%
+ \else%
+ \pgfmathsetlengthmacro{\slitHeight}{\pgfkeysvalueof{/tikz/optics/slit height}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ }
+
+ \savedmacro\slitSeparation{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/slit separation}}%
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\slitSeparation}{\pgfkeysvalueof{/tikz/optics/slit separation}}%
+ \else%
+ \pgfmathsetlengthmacro{\slitSeparation}{\pgfkeysvalueof{/tikz/optics/slit separation}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ }
+
+ \savedmacro\macro@slitOneCenter{
+ \def\macro@slitOneCenter{
+ \pgfpointorigin
+ \pgf@ya=\slitSeparation
+ \pgf@ya=0.5\pgf@ya
+ \advance \pgf@y by \pgf@ya
+ }
+ }
+
+ \savedmacro\macro@slitTwoCenter{
+ \def\macro@slitTwoCenter{
+ \pgfpointorigin
+ \pgf@ya=\slitSeparation
+ \pgf@ya=-0.5\pgf@ya
+ \advance \pgf@y by \pgf@ya
+ }
+ }
+
+ \savedanchor{\north}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{north}{\north}
+
+ \savedanchor{\south}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south}{\south}
+
+ % slit 1
+ \savedanchor{\slitOneCenter}{
+ \macro@slitOneCenter
+ }
+ \anchor{slit 1 center}{\slitOneCenter}
+
+ \savedanchor{\slitOneNorth}{
+ \macro@slitOneCenter
+ \pgf@ya = \slitHeight
+ \pgf@ya = 0.5\pgf@ya
+ \advance \pgf@y by \pgf@ya
+ }
+ \anchor{slit 1 north}{\slitOneNorth}
+
+ \savedanchor{\slitOneSouth}{
+ \macro@slitOneCenter
+ \pgf@ya = \slitHeight
+ \pgf@ya = -0.5\pgf@ya
+ \advance \pgf@y by \pgf@ya
+ }
+ \anchor{slit 1 south}{\slitOneSouth}
+
+ % slit 2
+ \savedanchor{\slitTwoCenter}{
+ \macro@slitTwoCenter
+ }
+ \anchor{slit 2 center}{\slitTwoCenter}
+
+ \savedanchor{\slitTwoNorth}{
+ \macro@slitTwoCenter
+ \pgf@ya = \slitHeight
+ \pgf@ya = 0.5\pgf@ya
+ \advance \pgf@y by \pgf@ya
+ }
+ \anchor{slit 2 north}{\slitTwoNorth}
+
+ \savedanchor{\slitTwoSouth}{
+ \macro@slitTwoCenter
+ \pgf@ya = \slitHeight
+ \pgf@ya = -0.5\pgf@ya
+ \advance \pgf@y by \pgf@ya
+ }
+ \anchor{slit 2 south}{\slitTwoSouth}
+
+ \anchor{east}{\center}
+ \anchor{west}{\center}
+
+ \inheritanchorborder[from=thin optics element]
+
+ \backgroundpath
+ {
+ % erreurs possibles dans les spécifications du dessin
+ \pgfmathparse{notgreater(\slitSeparation, \slitHeight)}
+ \ifnum\pgfmathresult=1
+ \opticserror{<slit separation> should be strictly lower than <slit height> (in double slit)}
+ \fi
+ \pgfmathparse{notless(\slitSeparation+\slitHeight, \objectHeight)}
+ \ifnum\pgfmathresult=1
+ \opticserror{<slit height> plus <slit separation> should be strictly lower than <object height> (in double slit)}
+ \fi
+ \north \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \slitOneNorth \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+
+ \slitOneSouth \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \slitTwoNorth \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+
+ \slitTwoSouth \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \south \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ }
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [mirror]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% keys
+% - mirror decoration separation
+% - mirror decoration amplitude
+\pgfkeys{/tikz/optics/.cd,
+ object height/.initial=2cm,
+ mirror decoration separation/.initial=0.15cm,
+ mirror decoration amplitude/.initial=0.125cm,
+}
+
+\pgfdeclareshape{mirror}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/object height}}%
+ }
+
+ \savedanchor{\north}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{north}{\north}
+
+ \savedanchor{\south}{
+ \pgf@x=0cm%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south}{\south}
+
+ \anchor{east}{\center}
+ \anchor{west}{\center}
+
+ % bof
+ \inheritanchorborder[from=thin optics element]
+
+ \backgroundpath
+ {
+ \north \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \south \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ % We use a border decoration to make a mirror (hachures).
+ % First set the decoration parameters :
+ % - decoration angle
+ % l'angle est 45-180 et on multiplie l'amplitude par -1 pour que la décoration commence et finisse par un trait (c'est un peu louche mais bon)
+ \def\pgfdecorationsegmentangle{45-180}%
+ % - decoration step length
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/mirror decoration separation}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentlength}{\pgfkeysvalueof{/tikz/optics/mirror decoration separation}}%
+ \else%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentlength}{\pgfkeysvalueof{/tikz/optics/mirror decoration separation}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ % magouillons pour que \pgfdecorationsegmentlength soit un multiple de la longueur ...
+ \pgfmathsetmacro\initialstep{\pgfdecorationsegmentlength}
+ \pgfmathsetmacro\totallength{\pgfkeysvalueof{/tikz/optics/object height}}
+ \pgfmathsetmacro\newstep{\totallength/floor(\totallength/\initialstep)}
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentlength}{\newstep}
+ % fin magouille
+ % - decoration amplitude
+ % on multiplie par -1 pour que ça aille dans le bon sens (pour éviter des problèmes louches)
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/mirror decoration amplitude}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentamplitude}{-1*\pgfkeysvalueof{/tikz/optics/mirror decoration amplitude}}%
+ \else%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentamplitude}{-1*\pgfkeysvalueof{/tikz/optics/mirror decoration amplitude}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ % Use decoration.
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ \pgfdecoratecurrentpath{border} %
+ % dessin du miroir (trait)
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [spherical mirror]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% keys :
+% - spherical mirror angle : the aperture angle of the mirror
+% - spherical mirror type (concave or convex)
+% - spherical mirror orientation (ltr or rtl)
+% The properties of the decoration are controled by the same parameters as in [mirror].
+% Height is controled by |object height|, as usual.
+\pgfkeys{/tikz/optics/spherical mirror angle/.initial=150}
+
+\newif\iftikz@optics@sphericalmirror@concave
+\tikz@optics@sphericalmirror@concavetrue
+\pgfkeys{/tikz/optics/.cd,
+ spherical mirror type/.is choice,
+ spherical mirror type/concave/.code={\tikz@optics@sphericalmirror@concavetrue},
+ spherical mirror type/convex/.code={\tikz@optics@sphericalmirror@concavefalse}
+}
+
+\newif\iftikz@optics@sphericalmirror@ltr
+\tikz@optics@sphericalmirror@ltrtrue
+\pgfkeys{/tikz/optics/.cd,
+ spherical mirror orientation/.is choice,
+ spherical mirror orientation/ltr/.code={\tikz@optics@sphericalmirror@ltrtrue},
+ spherical mirror orientation/rtl/.code={\tikz@optics@sphericalmirror@ltrfalse}
+}
+
+% shortcuts (styles) : [concave mirror] and [convex mirror]
+\pgfkeys{/tikz/optics/.cd,
+ concave mirror/.style={optics, spherical mirror, /tikz/optics/spherical mirror type=concave},
+ convex mirror/.style={optics, spherical mirror, /tikz/optics/spherical mirror type=convex},
+}
+
+\pgfdeclareshape{spherical mirror}{%
+ \savedmacro\installsphericalmirrorparameters{%
+ %
+ % Define a \centerpoint
+ %
+ \pgfextract@process\centerpoint{%
+ \pgfpointorigin
+ }%
+ %
+ % Define height
+ %
+ \pgfmathsetlengthmacro\height{\pgfkeysvalueof{/tikz/optics/object height}}%
+ %
+ % Function to define angle from radius
+ % use e.g. [spherical mirror angle=from_radius(2cm)] instead of e.g. [spherical mirror angle=90]
+ % This can seem somewhat ridiculous as we will undo this when calculating \radius, however it helps providing a simpler API.
+ % This function has to be defined before parsing \pgfkeysvalueof{/tikz/optics/spherical mirror angle}.
+ %
+ \pgfmathdeclarefunction{from_radius}{1}{
+ \begingroup
+ \pgfmathparse{notless(2*#1,\height)}
+ \ifnum\pgfmathresult=0
+ \opticserror{(in /tikz/optics/spherical mirror angle=from_radius(R)) : for a spherical mirror, the radius R cannot be smaller than half the height </tikz/optics/object height>. Set a bigger radius of a smaller height.}
+ \fi
+ \newdimen\angle
+ \pgfmathsetlength\angle{2*asin(\height/(2*#1))}
+ \pgf@x=\angle
+ \pgfmathreturn\pgf@x
+ \endgroup
+ }
+ %
+ % Define angle
+ %
+ \pgfmathsetmacro\angle{\pgfkeysvalueof{/tikz/optics/spherical mirror angle}}
+ %
+ % Compute radius from height and angle
+ %
+ \pgfmathsetlengthmacro\radius{\height/(2*sin(\angle/2))}
+ %
+ % Half of the sector angle is more useful.
+ %
+ \pgfmathmod{\angle}{360}%
+ \ifdim\pgfmathresult pt<0pt\relax%
+ \pgfmathadd@{\pgfmathresult}{360}%
+ \fi%
+ \let\angle\pgfmathresult%
+ \pgfmathdivide@{\pgfmathresult}{2}%
+ \let\halfangle\pgfmathresult%
+ %
+ % Get the start and end angles of the arc.
+ %
+ \iftikz@optics@sphericalmirror@concave
+ \iftikz@optics@sphericalmirror@ltr
+ \pgfmathsetmacro\startangle{-\halfangle}
+ \pgfmathsetmacro\endangle{+\halfangle}
+ \else
+ \pgfmathsetmacro\startangle{180-\halfangle}
+ \pgfmathsetmacro\endangle{180+\halfangle}
+ \fi
+ \else
+ \iftikz@optics@sphericalmirror@ltr
+ \pgfmathsetmacro\startangle{180-\halfangle}
+ \pgfmathsetmacro\endangle{180+\halfangle}
+ \else
+ \pgfmathsetmacro\startangle{-\halfangle}
+ \pgfmathsetmacro\endangle{+\halfangle}
+ \fi
+ \fi
+ %
+ % Calculate R cos(angle/2) and R sin(angle/2)
+ %
+ \pgfmathabs@{\halfangle}%
+ \pgfmathcos@{\pgfmathresult}%
+ \let\coshalfangle\pgfmathresult%
+ \pgfmathabs@{\halfangle}%
+ \pgfmathsin@{\pgfmathresult}%
+ \let\sinhalfangle\pgfmathresult%
+ \pgfmathsetlength\pgf@xa{\radius*\coshalfangle}
+ \edef\rcoshalfangle{\the\pgf@xa}%
+ \pgfmathsetlength\pgf@xa{\radius*\sinhalfangle}
+ \edef\rsinhalfangle{\the\pgf@xa}%
+ %
+ % Calculate the arc coordinates
+ %
+ \pgfextract@process\arcstart{%
+ \pgfqpointpolar{\startangle}{\radius}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \pgfextract@process\arcend{%
+ \pgfqpointpolar{\endangle}{\radius}%
+ \pgf@xa\pgf@x%
+ \pgf@ya\pgf@y%
+ \centerpoint%
+ \advance\pgf@x\pgf@xa%
+ \advance\pgf@y\pgf@ya%
+ }%
+ \def\convexrtlsetx#1#2{
+ \iftikz@optics@sphericalmirror@concave%
+ \iftikz@optics@sphericalmirror@ltr%
+ \advance\pgf@x by #1
+ \else% % => rtl
+ \advance\pgf@x by #2
+ \fi%
+ \else% % => convex
+ \iftikz@optics@sphericalmirror@ltr%
+ \advance\pgf@x by #2
+ \else% % => rtl
+ \advance\pgf@x by #1
+ \fi%
+ \fi%
+ }
+ \def\convexrtlinvert{%
+ \iftikz@optics@sphericalmirror@concave%
+ \iftikz@optics@sphericalmirror@ltr%
+ %nothing
+ \else% % => rtl
+ \pgf@x=-\pgf@x%
+ \fi%
+ \else% % => convex
+ \iftikz@optics@sphericalmirror@ltr%
+ \pgf@x=-\pgf@x%
+ \else% % => rtl
+ %nothing
+ \fi%
+ \fi%
+ }%
+ %
+ % Save everything.
+ % "NB \addtosavedmacro is currently experimental. May get changed." d'après le code où je l'ai piqué
+ %
+ \addtosavedmacro{\radius}%
+ %
+ \addtosavedmacro{\rcoshalfangle}%
+ \addtosavedmacro{\rsinhalfangle}%
+ %
+ \addtosavedmacro{\endangle}%
+ \addtosavedmacro{\startangle}%
+ %
+ \addtosavedmacro{\centerpoint}%
+ \addtosavedmacro{\arcstart}%
+ \addtosavedmacro{\arcend}%
+ \addtosavedmacro{\convexrtlinvert}%
+ %
+ }%
+ %
+ % Define anchors
+ %
+ \savedanchor\mirrorcenterpoint{%
+ \pgfpointorigin
+ }%
+ \savedanchor\centerpoint{%
+ \pgfpointorigin%
+ \advance\pgf@x by \radius%
+ \advance\pgf@x by \rcoshalfangle%
+ \iftikz@optics@sphericalmirror@concave%
+ \iftikz@optics@sphericalmirror@ltr%
+ %nothing
+ \else% % => rtl
+ \pgf@x=-\pgf@x%
+ \fi%
+ \else% % => convex
+ \iftikz@optics@sphericalmirror@ltr%
+ \pgf@x=-\pgf@x%
+ \else% % => rtl
+ %nothing
+ \fi%
+ \fi%
+ \divide\pgf@x by 2%
+ }%
+ \savedanchor\focalpoint{%
+ \pgfpointorigin%
+ \pgf@xa=\radius%
+ \advance\pgf@x by .5\pgf@xa%
+ \iftikz@optics@sphericalmirror@concave%
+ \iftikz@optics@sphericalmirror@ltr%
+ %nothing
+ \else% % => rtl
+ \pgf@x=-\pgf@x%
+ \fi%
+ \else% % => convex
+ \iftikz@optics@sphericalmirror@ltr%
+ \pgf@x=-\pgf@x%
+ \else% % => rtl
+ %nothing
+ \fi%
+ \fi%
+ }%
+ \savedanchor\north{%
+ \pgfpointorigin
+ \pgf@xa=0pt
+ \advance\pgf@xa by \rcoshalfangle
+ \advance\pgf@xa by \radius
+ \divide\pgf@xa by 2
+ \advance\pgf@x by \pgf@xa
+ \advance\pgf@y by \rsinhalfangle
+ \convexrtlinvert
+ }%
+ \savedanchor\arccenter{%
+ \centerpoint
+ \advance\pgf@x by \radius
+ \convexrtlinvert
+ }
+ \savedanchor\south{%
+ \pgfpointorigin
+ \pgf@xa=0pt
+ \advance\pgf@xa by \rcoshalfangle
+ \advance\pgf@xa by \radius
+ \divide\pgf@xa by 2
+ \advance\pgf@x by \pgf@xa
+ \advance\pgf@y by -\rsinhalfangle
+ \convexrtlinvert
+ }
+ \savedanchor\east{%
+ \pgfpointorigin
+ \convexrtlsetx{\radius}{\rcoshalfangle}
+ \convexrtlinvert
+ }
+ \savedanchor\west{%
+ \pgfpointorigin
+ \convexrtlsetx{\rcoshalfangle}{\radius}
+ \convexrtlinvert
+ }
+ \savedanchor\northwest{%
+ \pgfpointorigin
+ \convexrtlsetx{\rcoshalfangle}{\radius}
+ \advance\pgf@y by \rsinhalfangle
+ \convexrtlinvert
+ }
+ \savedanchor\southwest{%
+ \pgfpointorigin
+ \convexrtlsetx{\rcoshalfangle}{\radius}
+ \advance\pgf@y by -\rsinhalfangle
+ \convexrtlinvert
+ }
+ \savedanchor\northeast{%
+ \pgfpointorigin
+ \convexrtlsetx{\radius}{\rcoshalfangle}
+ \advance\pgf@y by \rsinhalfangle
+ \convexrtlinvert
+ }
+ \savedanchor\southeast{%
+ \pgfpointorigin
+ \convexrtlsetx{\radius}{\rcoshalfangle}
+ \advance\pgf@y by -\rsinhalfangle
+ \convexrtlinvert
+ }
+ \anchor{arc start}{%
+ \installsphericalmirrorparameters%
+ \arcstart%
+ }
+ \anchor{arc end}{%
+ \installsphericalmirrorparameters%
+ \arcend%
+ }
+ \anchor{focal point}{%
+ \installsphericalmirrorparameters%
+ \focalpoint
+ }
+ \anchor{focus}{%
+ \installsphericalmirrorparameters%
+ \focalpoint
+ }
+ \anchor{mirror center}{\mirrorcenterpoint}
+ \anchor{center}{\centerpoint}
+ \anchor{arc center}{\arccenter}
+ \anchor{north}{\north}%
+ \anchor{south}{\south}%
+ \anchor{east}{\east}%
+ \anchor{west}{\west}%
+ \anchor{north west}{\northwest}%
+ \anchor{south west}{\southwest}%
+ \anchor{north east}{\northeast}%
+ \anchor{south east}{\southeast}%
+ %
+ % Draw backgroundpath
+ %
+ \backgroundpath{%
+ \installsphericalmirrorparameters%
+ % We use a border decoration to make a mirror.
+ % First set the decoration parameters :
+ % - decoration angle
+ \iftikz@optics@sphericalmirror@concave
+ \def\pgfdecorationsegmentangle{45}%
+ \else
+ \def\pgfdecorationsegmentangle{-90-45}%
+ \fi
+ % - decoration step length
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/mirror decoration separation}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentlength}{\pgfkeysvalueof{/tikz/optics/mirror decoration separation}}%
+ \else%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentlength}{\pgfkeysvalueof{/tikz/optics/mirror decoration separation}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ % magouillons pour que \pgfdecorationsegmentlength soit un multiple de la longueur ...
+ \pgfmathsetmacro\initialstep{\pgfdecorationsegmentlength}
+ \pgfmathsetmacro\totallength{(2*pi/360)*\angle*\radius}
+ \pgfmathsetmacro\newstep{\totallength/floor(\totallength/\initialstep)}
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentlength}{\newstep}
+ % fin magouille
+ % - decoration amplitude
+ % on multiplie par -1 pour que ça aille dans le bon sens sans devoir modifier l'angle (pour éviter des problèmes louches)
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/mirror decoration amplitude}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentamplitude}{-1*\pgfkeysvalueof{/tikz/optics/mirror decoration amplitude}}%
+ \else%
+ \pgfmathsetlengthmacro{\pgfdecorationsegmentamplitude}{-1*\pgfkeysvalueof{/tikz/optics/mirror decoration amplitude}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ % Now use decoration.
+ % Draw decoration of path : an arc of radius \radius from \arcstart to \arcend
+ \pgfpathmoveto{\arcstart}%
+ \pgfpatharc{\startangle}{\endangle}{\radius}%
+ \pgfdecoratecurrentpath{border} %
+ % Now draw the path.
+ \pgfpathmoveto{\arcstart}%
+ \pgfpatharc{\startangle}{\endangle}{\radius}%
+ }
+ %
+ % Anchor border
+ % This is needed for anchors .<angle> (like mirror.0, mirror.90, etc.) to work.
+ %
+ \anchorborder{%
+ % Save x and y
+ \edef\externalx{\the\pgf@x}%
+ \edef\externaly{\the\pgf@y}%
+ \installsphericalmirrorparameters%
+ % Use circular border
+ \pgfpointborderellipse{ \pgfpoint{\externalx}{\externaly} }{ \pgfpoint{\radius}{\radius} }%
+ }%
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [thick optics element]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% keys :
+% - object aspect ratio (alias : object width)
+% ar = largeur/hauteur => largeur = ar * hauteur
+\pgfkeys{/tikz/optics/.cd,
+ object aspect ratio/.initial=0.2,
+ object width/.style={/tikz/optics/object aspect ratio=#1}
+}
+
+\pgfdeclareshape{thick optics element}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/object height}}%
+ }
+
+ \savedmacro\objectWidth{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/object aspect ratio}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\objectWidth}{\pgfkeysvalueof{/tikz/optics/object aspect ratio}}%
+ \else%
+ \pgfmathsetlengthmacro{\objectWidth}{\pgfkeysvalueof{/tikz/optics/object aspect ratio}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ }
+
+ \savedanchor{\northeast}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ \pgf@x=0.5\pgf@x%
+ }
+ \anchor{north east}{\northeast}
+
+ \savedanchor{\southwest}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ \pgf@x=-0.5\pgf@x%
+ }
+ \anchor{south west}{\southwest}
+
+ \anchor{north}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{south}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{east}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{west}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{north west}{
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{south east}{
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \inheritanchorborder[from=rectangle]
+
+ \backgroundpath
+ {
+ % rectangle
+ \pgfpathrectanglecorners{\northeast}{\southwest}
+ }
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [polarizer]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfdeclareshape{polarizer}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/object height}}%
+ }
+
+ \savedmacro\objectWidth{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/object aspect ratio}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\objectWidth}{\pgfkeysvalueof{/tikz/optics/object aspect ratio}}%
+ \else%
+ \pgfmathsetlengthmacro{\objectWidth}{\pgfkeysvalueof{/tikz/optics/object aspect ratio}*\pgfkeysvalueof{/tikz/optics/object height}}%
+ \fi%
+ }
+
+ \savedanchor{\northeast}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ \pgf@x=0.5\pgf@x%
+ }
+ \anchor{north east}{\northeast}
+
+ \savedanchor{\southwest}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ \pgf@x=-0.5\pgf@x%
+ }
+ \anchor{south west}{\southwest}
+
+ \anchor{north}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{south}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{east}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{west}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{north west}{
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{south east}{
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \inheritanchorborder[from=rectangle]
+
+ \backgroundpath
+ {
+ % rectangle
+ \pgfpathrectanglecorners{\northeast}{\southwest}
+
+ % diagonale du polariseur
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}}
+ }
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [double amici prism]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% keys :
+% - prism height
+% - prism apex angle
+\pgfkeys{/tikz/optics/.cd,
+ prism height/.initial=1.5cm,
+ prism apex angle/.initial=60,
+}
+% Idea : we get
+% apexAngle
+% prismHeight
+% demiPrismWidth = tan(apexAngle/2)*prismHeight
+%
+% so we compute
+%
+% C = (0,0)
+% NE = (demiPrismWidth,0.5*prismHeight)
+% SW = (-2*demiPrismWidth,-0.5*prismHeight)
+% NW = (-demiPrismWidth,0.5*prismHeight)
+% SE = (2*demiPrismWidth,-0.5*prismHeight)
+%
+% N = (0,0.5*prismHeight)
+% S = (0,-0.5*prismHeight)
+% E = (3*0.5*demiPrismWidth,0)
+% W = (-3.0.5*demiPrismWidth,0)
+\pgfdeclareshape{double amici prism}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\prismHeight{%
+ \edef\prismHeight{\pgfkeysvalueof{/tikz/optics/prism height}}%
+ }
+
+ \savedmacro\apexAngle{%
+ \pgfmathsetlengthmacro{\apexAngle}{\pgfkeysvalueof{/tikz/optics/prism apex angle}}
+ }
+
+ \savedmacro\demiPrismWidth{%
+ \pgfmathsetlengthmacro{\demiPrismWidth}{tan(0.5*\pgfkeysvalueof{/tikz/optics/prism apex angle})*\pgfkeysvalueof{/tikz/optics/prism height}}
+ }
+
+ \savedanchor{\northeast}{
+ \pgf@x=\demiPrismWidth%
+ \pgf@y=\prismHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{north east}{\northeast}
+
+ \savedanchor{\southwest}{
+ \pgf@x=\demiPrismWidth%
+ \pgf@y=\prismHeight%
+ \pgf@x=-2\pgf@x%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south west}{\southwest}
+
+ \savedanchor{\northwest}{
+ \pgf@x=\demiPrismWidth%
+ \pgf@y=\prismHeight%
+ \pgf@x=-\pgf@x%
+ \pgf@y=0.5\pgf@y%
+ }
+ \anchor{north west}{\northwest}
+
+ \savedanchor{\southeast}{
+ \pgf@x=\demiPrismWidth%
+ \pgf@y=\prismHeight%
+ \pgf@x=2\pgf@x%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south east}{\southeast}
+
+ \anchor{north}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \savedanchor{\south}{
+ \pgfpointorigin
+ \pgf@y=\prismHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+ \anchor{south}{\south}
+
+ \anchor{east}{
+ \southeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \advance\pgf@x by\pgf@xb
+ \pgf@x=0.5\pgf@x
+ \pgf@y=\pgf@ya
+ \advance\pgf@y by\pgf@yb
+ \pgf@y=0.5\pgf@y
+ }
+
+ \anchor{west}{
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \advance\pgf@x by\pgf@xb
+ \pgf@x=0.5\pgf@x
+ \pgf@y=\pgf@ya
+ \advance\pgf@y by\pgf@yb
+ \pgf@y=0.5\pgf@y
+ }
+
+ \inheritanchorborder[from=rectangle]
+
+ \backgroundpath
+ {
+ \northwest
+ \pgfpathmoveto{\pgfpoint{\pgf@x}{\pgf@y}}
+ \southwest
+ \pgfpathlineto{\pgfpoint{\pgf@x}{\pgf@y}}
+ \southeast
+ \pgfpathlineto{\pgfpoint{\pgf@x}{\pgf@y}}
+ \northeast
+ \pgfpathlineto{\pgfpoint{\pgf@x}{\pgf@y}}
+ \pgfpathclose
+ %
+ % FIXME : ceci devrait s'appliquer seulement au triangle intérieur -> un fgpath ou assimilé
+ \pgfsetbeveljoin
+ \northwest
+ \pgfpathmoveto{\pgfpoint{\pgf@x}{\pgf@y}}
+ \south
+ \pgfpathlineto{\pgfpoint{\pgf@x}{\pgf@y}}
+ \northeast
+ \pgfpathlineto{\pgfpoint{\pgf@x}{\pgf@y}}
+ }
+}
+
+
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [generic optics io]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% keys :
+% - io body height : height of the body of the io body
+% - io body aspect ratio (alias io body width) : width/height of the body of the io body
+% - io aperture width : width of the output device (condenser, etc.) [in units of io body height]
+% - io aperture height : height of the output device (condenser, etc.) [in units of io body height]
+% - io aperture shift : vertical shift of the output device [in units of io body height]
+% - io orientation (ltr or rtl)
+\pgfkeys{/tikz/optics/.cd,
+ io body height/.initial=0.75cm,
+ io body aspect ratio/.initial=2,
+ io aperture width/.initial=0.33,
+ io aperture height/.initial=0.66,
+ io aperture shift/.initial=0,
+}
+\pgfkeys{/tikz/optics/io body width/.style={/tikz/optics/io body aspect ratio=#1}}
+%
+\newif\if@tikz@optics@io@ltr
+\@tikz@optics@io@ltrtrue
+%
+\pgfkeys{/tikz/optics/io orientation/.is choice}
+\pgfkeys{/tikz/optics/io orientation/ltr/.code={\@tikz@optics@io@ltrtrue}}
+\pgfkeys{/tikz/optics/io orientation/rtl/.code={\@tikz@optics@io@ltrfalse}}
+%
+\pgfdeclareshape{generic optics io}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/io body height}}%
+ }
+
+ \savedmacro\objectWidth{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/io body aspect ratio}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\objectWidth}{\pgfkeysvalueof{/tikz/optics/io body aspect ratio}}%
+ \else%
+ \pgfmathsetlengthmacro{\objectWidth}{\pgfkeysvalueof{/tikz/optics/io body aspect ratio}*\pgfkeysvalueof{/tikz/optics/io body height}}%
+ \fi%
+ }
+
+ \savedmacro\outHeight{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/io aperture height}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\outHeight}{\pgfkeysvalueof{/tikz/optics/io aperture height}}%
+ \else%
+ \pgfmathsetlengthmacro{\outHeight}{\pgfkeysvalueof{/tikz/optics/io aperture height}*\pgfkeysvalueof{/tikz/optics/io body height}}%
+ \fi%
+ }
+
+ \savedmacro\outWidth{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/io aperture width}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\outWidth}{\pgfkeysvalueof{/tikz/optics/io aperture width}}%
+ \else%
+ \pgfmathsetlengthmacro{\outWidth}{\pgfkeysvalueof{/tikz/optics/io aperture width}*\pgfkeysvalueof{/tikz/optics/io body height}}%
+ \fi%
+ }
+
+ \savedmacro\outShift{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/io aperture shift}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\outShift}{\pgfkeysvalueof{/tikz/optics/io aperture shift}}%
+ \else%
+ \pgfmathsetlengthmacro{\outShift}{\pgfkeysvalueof{/tikz/optics/io aperture shift}*\pgfkeysvalueof{/tikz/optics/io body height}}%
+ \fi%
+ }
+
+ \savedanchor{\bodynortheast}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ \pgf@x=0.5\pgf@x%
+ }
+ \anchor{body north east}{\bodynortheast}
+
+ \savedanchor{\bodysouthwest}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ \pgf@x=-0.5\pgf@x%
+ }
+ \anchor{body south west}{\bodysouthwest}
+
+ \savedanchor{\outnortheast}{
+ \if@tikz@optics@io@ltr
+ % Left To Right (LTR)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \advance\pgf@x by\outWidth
+ \else
+ % Right To Left (RTL)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \pgf@x=-\pgf@x%
+ \fi
+ \pgf@y=0pt%
+ \advance\pgf@y by\outHeight
+ \pgf@y=0.5\pgf@y%
+ \advance\pgf@y by\outShift
+ }
+ \anchor{aperture north east}{\outnortheast}
+
+ \savedanchor{\outsouthwest}{
+ \if@tikz@optics@io@ltr
+ % Left To Right (LTR)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \else
+ % Right To Left (RTL)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \advance\pgf@x by\outWidth
+ \pgf@x=-\pgf@x%
+ \fi
+ \pgf@y=0pt%
+ \advance\pgf@y by\outHeight
+ \pgf@y=-0.5\pgf@y%
+ \advance\pgf@y by\outShift
+ }
+ \anchor{aperture south west}{\outsouthwest}
+
+ \savedanchor{\outcenter}{
+ \if@tikz@optics@io@ltr
+ % Left To Right (LTR)
+ \pgf@x=\objectWidth%
+ \advance\pgf@x by\outWidth
+ \else
+ % Right To Left (RTL)
+ \pgf@x=\objectWidth%
+ \advance\pgf@x by\outWidth
+ \pgf@x=-\pgf@x%
+ \fi
+ \pgf@x=0.5\pgf@x%
+ \pgf@y=0pt%
+ \advance\pgf@y by\outShift
+ }
+ \anchor{aperture center}{\outcenter}
+
+
+ \anchor{body center}{\center}
+
+ \anchor{text}{
+ \pgfpointorigin
+ \advance\pgf@x by -.5\wd\pgfnodeparttextbox%
+ \advance\pgf@y by -.5\ht\pgfnodeparttextbox%
+ \advance\pgf@y by +.5\dp\pgfnodeparttextbox%
+ }
+
+ \anchor{body north}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodynortheast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+ % north = body north
+ \anchor{north}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodynortheast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{body south}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodysouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+ % south = body south
+ \anchor{south}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodysouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{body east}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodynortheast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{body west}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodysouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{body north west}{
+ \bodynortheast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodysouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{body south east}{
+ \bodynortheast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \bodysouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+
+ \anchor{aperture north}{
+ \outcenter \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \outnortheast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{aperture south}{
+ \outcenter \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \outsouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{aperture east}{
+ \outcenter \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \outnortheast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{aperture west}{
+ \outcenter \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \outsouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{aperture north west}{
+ \outnortheast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \outsouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{aperture south east}{
+ \outnortheast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \outsouthwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{center}{\center}
+
+ \savedanchor{\realeast}{
+ \pgfpointorigin
+ \if@tikz@optics@io@ltr
+ % Left To Right (LTR)
+ %ltr : aperture east (<- out north east)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \advance\pgf@x by\outWidth
+ %\pgf@y=0pt%
+ \else
+ % Right To Left (rtl)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \fi
+ }
+ \anchor{east}{\realeast}
+
+ \savedanchor{\realwest}{
+ \pgfpointorigin
+ \if@tikz@optics@io@ltr
+ % Left To Right (LTR)
+ \pgf@x=\objectWidth%
+ \pgf@x=-0.5\pgf@x%
+ \else
+ % Right To Left (rtl)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \advance\pgf@x by\outWidth
+ \pgf@x=-\pgf@x%
+ \fi
+ }
+ \anchor{west}{\realwest}
+
+ % this is used only for the anchorborder
+ \savedanchor{\anchorbordersouthwest}{
+ \if@tikz@optics@io@ltr
+ % Left To Right (LTR)
+ \pgf@x=\objectWidth%
+ \pgf@x=-0.5\pgf@x%
+ \else
+ % Right To Left (rtl)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \advance\pgf@x by\outWidth
+ \pgf@x=-\pgf@x%
+ \fi
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ }
+
+ % this is used only for the anchorborder
+ \savedanchor{\anchorbordernortheast}{
+ \if@tikz@optics@io@ltr
+ % Left To Right (LTR)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ \advance\pgf@x by\outWidth
+ \else
+ % Right To Left (RTL)
+ \pgf@x=\objectWidth%
+ \pgf@x=0.5\pgf@x%
+ %\pgf@x=-\pgf@x%
+ \fi
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ }
+
+ % anchorborder
+ % c'est celui de rectangle, mais un peu ajusté
+ \anchorborder{%
+ \pgf@xb=\pgf@x% xb/yb is target
+ \pgf@yb=\pgf@y%
+ \anchorbordersouthwest%
+ \pgf@xa=\pgf@x% xa/ya is se
+ \pgf@ya=\pgf@y%
+ \anchorbordernortheast%
+ \advance\pgf@x by-\pgf@xa%
+ \advance\pgf@y by-\pgf@ya%
+ \pgf@xc=.5\pgf@x% x/y is half width/height
+ \pgf@yc=.5\pgf@y%
+ \advance\pgf@xa by\pgf@xc% xa/ya becomes center
+ \advance\pgf@ya by\pgf@yc%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpointborderrectangle
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}
+ {\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}%
+ }%
+ \pgf@process{\pgf@marshal}%
+ % \advance\pgf@x by\pgf@xa%
+ % \advance\pgf@y by\pgf@ya%
+ }
+
+ \backgroundpath
+ {
+ % corps
+ \pgfpathrectanglecorners{\bodynortheast}{\bodysouthwest}
+ % out
+ \pgfpathrectanglecorners{\outnortheast}{\outsouthwest}
+
+ %\pgfusepath{draw}
+ % il ne faut PAS mettre ça pour pouvoir utiliser des styles correctement après (genre double)
+ }
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Sensors
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Shape [sensor line]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Sensor line.
+%
+% This defines anchors center, north, south, east, west, north east
+% north west, south east, south west, as well as
+% pixel <i> <subanchor> with <subanchor> is any of the former.
+% ça va être horrible à faire
+%
+% keys :
+% - sensor line height
+% - sensor line aspect ratio (largeur en unités de la hauteur du capteur)
+% - sensor line pixel number
+% - sensor line pixel width (en unités de la largeur du capteur)
+% - sensor line inner ysep (en unités de la hauteur du capteur)
+\pgfkeys{/tikz/optics/.cd,
+ sensor line height/.initial=2cm,
+ sensor line aspect ratio/.initial=0.2,
+ sensor line pixel number/.initial=5,
+ sensor line pixel width/.initial=0.4,
+ sensor line inner ysep/.initial=0.05, % entre le bord et les capteurs
+}
+
+\pgfdeclareshape{sensor line}
+{
+ \savedanchor{\center}{
+ \pgfpointorigin
+ }
+ \anchor{center}{\center}
+
+ \savedmacro\objectHeight{%
+ \edef\objectHeight{\pgfkeysvalueof{/tikz/optics/sensor line height}}%
+ }
+
+ \savedmacro\objectWidth{%
+ \pgfmathsetlengthmacro{\objectWidth}{\pgfkeysvalueof{/tikz/optics/sensor line aspect ratio}*\pgfkeysvalueof{/tikz/optics/sensor line height}}
+ }
+
+ \savedmacro\pixelNumber{%
+ \pgfmathtruncatemacro\pixelNumber{\pgfkeysvalueof{/tikz/optics/sensor line pixel number}}%
+ }
+
+ \savedmacro\innerysep{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/sensor line inner ysep}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\innerysep}{\pgfkeysvalueof{/tikz/optics/sensor line inner ysep}}%
+ \else%
+ \pgfmathsetlengthmacro{\innerysep}{\pgfkeysvalueof{/tikz/optics/sensor line inner ysep}*\pgfkeysvalueof{/tikz/optics/sensor line height}}%
+ \fi%
+ }
+
+ \savedmacro\pixelWidth{%
+ \pgfmathparse{\pgfkeysvalueof{/tikz/optics/sensor line pixel width}}
+ \ifpgfmathunitsdeclared%
+ \pgfmathsetlengthmacro{\pixelWidth}{\pgfkeysvalueof{/tikz/optics/sensor line pixel width}}%
+ \else%
+ \pgfmathsetlengthmacro{\pixelWidth}{\pgfkeysvalueof{/tikz/optics/sensor line pixel width}*\objectWidth}%
+ \fi%
+ }
+
+ \savedmacro\pixelHeight{%
+ \pgfmathparse{(\objectHeight-2*\innerysep)/\pixelNumber}
+ \edef\pixelHeight{\pgfmathresult pt}%
+ }
+
+ \savedanchor{\northeast}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=0.5\pgf@y%
+ \pgf@x=0.5\pgf@x%
+ }
+ \anchor{north east}{\northeast}
+
+ \savedanchor{\southwest}{
+ \pgf@x=\objectWidth%
+ \pgf@y=\objectHeight%
+ \pgf@y=-0.5\pgf@y%
+ \pgf@x=-0.5\pgf@x%
+ }
+ \anchor{south west}{\southwest}
+
+ \anchor{north}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{south}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ \anchor{east}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{west}{
+ \center \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{north west}{
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xb
+ \pgf@y=\pgf@ya
+ }
+
+ \anchor{south east}{
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@yb
+ }
+
+ % ok, idée :
+ % HAUT (north) du pixel n (allant de 1 à N)
+ % \objectHeight/2 - \innerysep - (n-1) * \pixelHeight
+ % BAS (south) du pixel n
+ % \objectHeight/2 - \innerysep - n * \pixelHeight
+ % west = le même que la boite, donc utiliser \southwest
+ % east = west + \pixelWidth
+
+ % Le but de ce code est de définir des ancres
+ % pixel <i> <pos>
+ % pour <i> = 4, 2, ..., \pixelNumber
+ % et <pos> = north, south, east, west, north west, south west, north east south east, center
+ % Comme \pixelNumber est défini dynamiquement, il faut passer par cette horreur.
+ % Le code est inspiré de pfglibraryshapes.geometric.code.tex (shape regular polygon).
+ \expandafter\pgfutil@g@addto@macro\csname pgf@sh@s@sensor line\endcsname{%
+ \c@pgf@counta\pixelNumber\relax%
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>0\relax%
+ \pgfutil@ifundefined{pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space north west}{%
+ %
+ % ...(manually \xdef as \gdef is normally used by \anchor)...
+ %
+ %
+ % pixel surface north
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space north\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pixelWidth
+ \noexpand\pgf@x=.5\noexpand\pgf@x
+ \noexpand\advance\noexpand\pgf@x by\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface north east
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space north east\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pixelWidth
+ \noexpand\advance\noexpand\pgf@x by\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface north west
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space north west\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface south
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space south\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pixelWidth
+ \noexpand\pgf@x=.5\noexpand\pgf@x
+ \noexpand\advance\noexpand\pgf@x by\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber-1)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface south east
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space south east\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pixelWidth
+ \noexpand\advance\noexpand\pgf@x by\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber-1)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface south west
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space south west\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber-1)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface east
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space east\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pixelWidth
+ \noexpand\advance\noexpand\pgf@x by\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber-0.5)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface center
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space center\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pixelWidth
+ \noexpand\pgf@x=.5\noexpand\pgf@x
+ \noexpand\advance\noexpand\pgf@x by\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber-0.5)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ %
+ %
+ % pixel surface west
+ \expandafter\xdef\csname pgf@anchor@sensor line@pixel\space\the\c@pgf@counta\space west\endcsname{%
+ \noexpand\northeast \noexpand\pgf@xa=\noexpand\pgf@x \noexpand\pgf@ya=\noexpand\pgf@y
+ \noexpand\southwest \noexpand\pgf@xb=\noexpand\pgf@x \noexpand\pgf@yb=\noexpand\pgf@y
+ \noexpand\pgf@x=\noexpand\pgf@xb
+ \noexpand\pgf@y=\noexpand\pgf@ya
+ \noexpand\newdimen\noexpand\temp@y
+ \noexpand\pgfmathsetlength\noexpand\temp@y{(\the\c@pgf@counta-\noexpand\pixelNumber-0.5)*\noexpand\pixelHeight-\noexpand\innerysep}
+ \noexpand\advance\noexpand\pgf@y by\noexpand\temp@y
+ }%
+ }{\c@pgf@counta0\relax}%
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop%
+ }%
+
+ \inheritanchorborder[from=rectangle]
+
+ \backgroundpath
+ {
+ % rectangle contour
+ \pgfpathrectanglecorners{\northeast}{\southwest}
+
+ % dessin des pixels
+ \c@pgf@counta\pixelNumber\relax%
+ \pgfmathloop%
+ \ifnum\c@pgf@counta>0\relax%
+ \newdimen\pixel@northeast@x
+ \newdimen\pixel@northeast@y
+ \newdimen\pixel@southwest@x
+ \newdimen\pixel@southwest@y
+ \northeast \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \southwest \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ % calcul pixel@northeast
+ %% calcul x
+ \pixel@northeast@x=\pgf@xb
+ \advance\pixel@northeast@x by\pixelWidth
+ %% calcul y
+ \pixel@northeast@y=\pgf@ya
+ \newdimen\temp@y
+ \pgfmathsetlength\temp@y{(\the\c@pgf@counta-\pixelNumber)*\pixelHeight-\innerysep}
+ \advance\pixel@northeast@y by\noexpand\temp@y
+ % calcul pixel@southwest
+ \pixel@southwest@x=\pgf@xb
+ \pixel@southwest@y=\pgf@ya
+ \newdimen\temp@y
+ \pgfmathsetlength\temp@y{(\the\c@pgf@counta-\pixelNumber-1)*\pixelHeight-\innerysep}
+ \advance\pixel@southwest@y by\temp@y
+ % dessin
+ \pgfpathrectanglecorners{\pgfpoint{\pixel@northeast@x}{\pixel@northeast@y}}{\pgfpoint{\pixel@southwest@x}{\pixel@southwest@y}}
+ \advance\c@pgf@counta-1\relax%
+ \repeatpgfmathloop%
+ }
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Styles defining optics elements in terms of the existing shapes.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Style [screen]
+\pgfkeys{/tikz/optics/screen/.style={thin optics element, very thick}}
+% Style [diffraction grating]
+\pgfkeys{/tikz/optics/diffraction grating/.style={thin optics element, /tikz/optics/cheating dash={on 4pt off 2pt}}}
+% Style [grid]
+\pgfkeys{/tikz/optics/grid/.style={thin optics element, /tikz/optics/cheating dash={on 4pt off 2pt}, ultra thick}}
+% Style [semi-transparent mirror]
+\pgfkeys{/tikz/optics/semi-transparent mirror/.style={thin optics element, densely dotted, thick}}
+% Style [diaphragm]
+\pgfkeys{/tikz/optics/diaphragm/.style={slit,/tikz/optics/slit height=0.4}}
+
+
+% Style [generic lamp]
+\pgfkeys{/tikz/optics/generic lamp/.style={shape=generic optics io,optics,draw}}
+% Style [generic sensor]
+\pgfkeys{/tikz/optics/generic sensor/.style={shape=generic optics io,optics,io orientation=rtl,draw, io body height=1cm, io body aspect ratio=0.5, io aperture width=0.15}}
+% Style [halogen lamp]
+\pgfkeys{/tikz/optics/halogen lamp/.style={/tikz/optics/generic lamp, io body height=0.75cm, io body aspect ratio=2,io aperture width=0.33,io aperture height=0.66,io aperture shift=0}}
+% Style [spectral lamp]
+\pgfkeys{/tikz/optics/spectral lamp/.style={/tikz/optics/generic lamp, io body height=2.25cm, io body aspect ratio=2/3,io aperture width=0.11,io aperture height=0.22,io aperture shift=0.25,/tikz/optics/io multiline}}
+% Style [laser]
+\pgfkeys{/tikz/optics/laser/.style={/tikz/optics/generic lamp, io body height=0.5cm, io body aspect ratio=3,io aperture width=0.22,io aperture height=0.5,io aperture shift=0}}
+% Style [laser']
+\pgfkeys{/tikz/optics/laser'/.style={/tikz/optics/generic lamp, io body height=0.5cm, io body aspect ratio=3,io aperture width=0,io aperture height=0.5,io aperture shift=0}}
+% Style [beam splitter]
+\pgfkeys{/tikz/optics/beam splitter/.style={shape=polarizer, optics, draw, object height=1cm, object aspect ratio=1}}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Helper style to draw correctly dashed paths.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% source : http://tex.stackexchange.com/questions/133271/can-tikz-dashed-lines-emulate-pstricks-dashed-lines
+% le but est d'avoir des dash symétriques par rapport au milieu et surtout avec un trait entier de chaque côté
+\tikzset{
+ /tikz/optics/cheating dash/.code args={on #1 off #2}{
+ % Use csname so catcode of @ doesn't have do be changed.
+ \csname tikz@addoption\endcsname{%
+ \pgfgetpath\currentpath%
+ \pgfprocessround{\currentpath}{\currentpath}%
+ \csname pgf@decorate@parsesoftpath\endcsname{\currentpath}{\currentpath}%
+ \pgfmathparse{\csname pgf@decorate@totalpathlength\endcsname-#1}\let\rest=\pgfmathresult%
+ \pgfmathparse{#1+#2}\let\onoff=\pgfmathresult%
+ \pgfmathparse{max(floor(\rest/\onoff), 1)}\let\nfullonoff=\pgfmathresult%
+ \pgfmathparse{max((\rest-\onoff*\nfullonoff)/\nfullonoff+#2, #2)}\let\offexpand=\pgfmathresult%
+ \pgfsetdash{{#1}{\offexpand}}{0pt}}%
+ }
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Helper style for multiline io elements.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfkeys{/tikz/optics/io multiline/.code={\newdimen\tmplen\pgfmathsetlength{\tmplen}{\pgfkeysvalueof{/tikz/optics/io body aspect ratio}*\pgfkeysvalueof{/tikz/optics/io body height}}\tikzset{text width=\the\tmplen,align=center}}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Helper styles to mark interesing points
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% Style [mark point]
+% Describes how interesting points should be drawn (e.g. by [draw focal points], [draw mirror focus], [draw mirror center])
+\pgfkeys{/tikz/optics/mark point/.style={optics/mark a cross}}
+
+% Style [draw focal points]
+% Should be applied to a [shape=lens] node to draw its focal points according to the style [mark point].
+\pgfkeys{/tikz/optics/draw focal points/.style={append after command={
+ \pgfextra{
+ \begin{pgfinterruptpath}
+ \node[/tikz/optics/mark point,#1] at (\tikzlastnode.west focal point) {};
+ \node[/tikz/optics/mark point,#1] at (\tikzlastnode.east focal point) {};
+ \end{pgfinterruptpath}
+ }
+ }
+}}
+
+% Style [draw mirror focus]
+% Should be applied to a [shape=spherical mirror] node to draw its focal point according to the style [mark point].
+\pgfkeys{/tikz/optics/draw mirror focus/.style={append after command={
+ \pgfextra{
+ \begin{pgfinterruptpath}
+ \node[/tikz/optics/mark point,#1] at (\tikzlastnode.focus) {};
+ \end{pgfinterruptpath}
+ }
+ }
+}}
+
+% Style [draw mirror center]
+% Should be applied to a [shape=spherical mirror] node to draw its center according to the style [mark point].
+\pgfkeys{/tikz/optics/draw mirror center/.style={append after command={
+ \pgfextra{
+ \begin{pgfinterruptpath}
+ \node[/tikz/optics/mark point,#1] at (\tikzlastnode.mirror center) {};
+ \end{pgfinterruptpath}
+ }
+ }
+}}
+
+% Style [mark a cross]
+% Draws a cross at the node
+\pgfkeys{/tikz/optics/mark a cross/.style={cross out,draw,inner sep=0pt,minimum width=2pt,minimum height=2pt}}
+
+% idée : utiliser pgfextra pour les flèches, si on peut avoir les deux dernières nodes ?
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Helper styles to easily put things on paths.
+% It is often needed in optics to have e.g. arrows in the middle of a path.
+% It is often needed everywhere to be able to put a coordinate somewhere on
+% a path.
+% This is the aim of these helpers.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Style [put coordinate]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Le style [put coordinate=<coord> at <pos>] crée une node[coordinate]
+% à l'abscisse curviligne <pos> sur le chemin auquel est appliqué le style.
+%
+% Exemple :
+% \draw[put coordinate=P at 0.3] (0,0) to[bend left] (2cm,0);
+% \draw[red] (P) -- (0,0);
+%
+\tikzset{
+ put coordinate/.style args={#1 at #2}{decoration={markings, mark=at position #2 with {\node[coordinate] (#1) {};}},postaction={decorate}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Style [put arrow]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The aim of this horrible mess is that I want expansion to take place at the right time, so I can ask for something like
+% \draw[/tikz/optics/->-={at=0.25}, /tikz/optics/->-={at=0.75}] (0,0) -- (2cm,2cm) -- (4cm,0);
+% and have it work. Obviously, I want more complicated things (several arrows with different directions, colors, number of >, etc. on the same path).
+% With a naive implementation, this does not work and the last setting always wins.
+% A possible solution would be positional arguments, however keywords arguments are Better (tm).
+% Hence the need to take care of expansion order, so the specifications apply only to the currently drawn arrow tip.
+% The main idea behing this code is to use Magic (tm) so that Things Work (tm) and never touch it again.
+% However, it is obvious from a trivial application of Murphy Law that this will backfire sometime.
+% Indeed, a key with positional arguments are used internally (|ordered draw key|), which is called from the parsed arguments.
+\tikzset{/tikz/put arrow/.cd,
+ pos/.initial=0.5,
+ at/.style={pos=#1},
+ pos var/.initial={},
+ style/.initial={},
+ style var/.initial={},
+ postaction style/.initial={}, % more expansion magic needed for ->n- and friends (\arrow[thing=stuff] does not seem to work, probably because of the =)
+ arrow macro/.initial={arrow},
+ arrow macro var/.initial={},
+ arrow type/.initial={>},
+ arrow type var/.initial={},
+ reversed/.style={arrow macro=arrowreversed},
+ arrow/.style={arrow type=#1},
+ arrow'/.style={arrow type=#1, reversed},
+ every arrow/.style={},
+}
+
+\tikzset{put arrow/.code={
+ % parse arguments correctly
+ \tikzset{/tikz/put arrow/.cd, #1}
+ \tikzset{/tikz/put arrow/pos var/.expand once={\pgfkeysvalueof{/tikz/put arrow/pos}}}
+ \tikzset{/tikz/put arrow/style var/.expanded={\pgfkeysvalueof{/tikz/put arrow/style}}}
+ \tikzset{/tikz/put arrow/arrow macro var/.expand once={\pgfkeysvalueof{/tikz/put arrow/arrow macro}}}
+ \tikzset{/tikz/put arrow/arrow type var/.expand once={\pgfkeysvalueof{/tikz/put arrow/arrow type}}}
+ % call |ordered draw key| which does the real job
+ \tikzset{/tikz/put arrow/ordered draw key/.expanded=%
+ {\pgfkeysvalueof{/tikz/put arrow/pos var}}%
+ {\pgfkeysvalueof{/tikz/put arrow/style var}}%
+ {\pgfkeysvalueof{/tikz/put arrow/arrow macro var}}%
+ {\pgfkeysvalueof{/tikz/put arrow/arrow type var}}%
+ {\pgfkeysvalueof{/tikz/put arrow/postaction style}}%
+ }
+ % restore initial values
+ \tikzset{/tikz/put arrow/pos=0.5}
+ \tikzset{/tikz/put arrow/style={}}
+ \tikzset{/tikz/put arrow/arrow macro={arrow}}
+ \tikzset{/tikz/put arrow/arrow type={>}}
+}}
+
+\tikzset{/tikz/put arrow/ordered draw key/.code n args={5}{
+ \tikzset{postaction={#5,decorate, decoration={markings, mark=at position #1 with {\csname #3\endcsname[/tikz/put arrow/every arrow,#2]{#4}};}}}
+}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Styles to mark light rays
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\tikzset{/tikz/optics/multiple ray arrow/.cd,
+ n/.initial=1,
+ n var/.initial=1,
+ set n/.code={\pgfsetarrowoptions{multiple ray arrow}{#1}},
+}
+
+
+\pgfkeys{
+ /tikz/optics/.cd,
+ use ray arrow >/.code 2 args={
+ \pgfsetarrowoptions{ray arrow@length}{4pt}
+ \pgfsetarrowoptions{ray arrow@angle}{50}
+ \tikzset{/tikz/put arrow/postaction style/.expanded={/tikz/optics/multiple ray arrow/set n=#1}}
+ \tikzset{/tikz/put arrow/.expanded={arrow={multiple ray arrow}, #2}}
+ },
+ use ray arrow </.code 2 args={
+ \pgfsetarrowoptions{ray arrow@length}{4pt}
+ \pgfsetarrowoptions{ray arrow@angle}{50}
+ \tikzset{/tikz/put arrow/postaction style/.expanded={/tikz/optics/multiple ray arrow/set n=#1}}
+ \tikzset{/tikz/put arrow/.expanded={arrow'={multiple ray arrow}, #2}}
+ },
+ ->n-/.code={
+ \tikzset{/tikz/optics/multiple ray arrow/.cd, .collect unknowns,%
+ #1,
+ unknown options/.get = \arrowkeys}
+ \tikzset{/tikz/optics/multiple ray arrow/n var/.expand once={\pgfkeysvalueof{/tikz/optics/multiple ray arrow/n}}}
+ \tikzset{/tikz/optics/use ray arrow >={\pgfkeysvalueof{/tikz/optics/multiple ray arrow/n var}}{\arrowkeys}}
+ },
+ -<n-/.code={
+ \tikzset{/tikz/optics/multiple ray arrow/.cd, .collect unknowns,%
+ #1,
+ unknown options/.get = \arrowkeys}
+ \tikzset{/tikz/optics/multiple ray arrow/n var/.expand once={\pgfkeysvalueof{/tikz/optics/multiple ray arrow/n}}}
+ \tikzset{/tikz/optics/use ray arrow <={\pgfkeysvalueof{/tikz/optics/multiple ray arrow/n var}}{\arrowkeys}}
+ },
+ %
+ ->-/.style={/tikz/optics/->n-={n=1, #1}},
+ -<-/.style={/tikz/optics/-<n-={n=1, #1}},
+ ->>-/.style={/tikz/optics/->n-={n=2, #1}},
+ -<<-/.style={/tikz/optics/-<n-={n=2, #1}},
+ ->>>-/.style={/tikz/optics/->n-={n=3, #1}},
+ -<<<-/.style={/tikz/optics/-<n-={n=3, #1}},
+ ->>>>-/.style={/tikz/optics/->n-={n=4, #1}},
+ -<<<<-/.style={/tikz/optics/-<n-={n=4, #1}},
+}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Styles [dim arrow] and [short dim arrow]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\dimarrow@short@position{0}
+\newif\ifdimarrow@nearstart
+\dimarrow@nearstarttrue
+\tikzset{%
+ /tikz/dim arrow/.code={\tikzset{draw,/tikz/dim arrow/draw dim arrow}\pgfkeys{/tikz/dim arrow/.cd,#1}},
+ /tikz/dim arrow'/.code={\pgfkeysgetvalue{/tikz/dim arrow/raise}{\tmp@tdar}\tikzset{draw,/tikz/dim arrow/draw dim arrow,/tikz/dim arrow/raise=-\tmp@tdar}\pgfkeys{/tikz/dim arrow/.cd,#1}},
+ /tikz/short dim arrow/.code={\tikzset{draw,/tikz/dim arrow/draw short dim arrow}\pgfkeys{/tikz/dim arrow/.cd,#1}},
+ /tikz/short dim arrow'/.code={\pgfkeysgetvalue{/tikz/dim arrow/raise}{\tmp@tdar}\tikzset{draw,/tikz/dim arrow/draw short dim arrow,/tikz/dim arrow/raise=-\tmp@tdar}\pgfkeys{/tikz/dim arrow/.cd,#1}},
+ /tikz/dim arrow/.cd,
+ raise/.initial={0.5cm},
+ no raise/.style={raise=0},
+ label/.code={\pgfkeys{/tikz/dim arrow/label text=#1}},
+ label'/.code={\pgfkeys{/tikz/dim arrow/label text=#1,/tikz/dim arrow/label style/.append style={swap},}},
+ label text/.initial={},
+ label style/.style={},
+ label near start/.code={\def\dimarrow@short@position{0}}, % only short
+ label near middle/.code={\def\dimarrow@short@position{2}}, % only short
+ label near end/.code={\def\dimarrow@short@position{1}}, % only short
+ arrow length/.initial={5mm}, % only for short
+ draw short dim arrow/.style={to path={\pgfextra{%
+ \let\tikz@mode@save=\tikz@mode%
+ \let\tikz@options@save=\tikz@options%
+ \newdimen\labelTotalRaise
+ \pgfmathsetlength\labelTotalRaise{\pgfkeysvalueof{/tikz/dim arrow/raise}}
+ \pgfinterruptpath
+ \draw[>=technical,->|] \pgfextra{\let\tikz@mode=\tikz@mode@save\let\tikz@options=\tikz@options@save}
+ let
+ \p1=($(\tikztostart)!\pgfkeysvalueof{/tikz/dim arrow/raise}!90:(\tikztotarget)$),
+ \p2=($(\tikztotarget)!\pgfkeysvalueof{/tikz/dim arrow/raise}!-90:(\tikztostart)$)
+ in ($(\p1)!-\pgfkeysvalueof{/tikz/dim arrow/arrow length}!(\p2)$) -- ($(\p1)!0!(\p2)$);
+ \draw[>=technical,->|] \pgfextra{\let\tikz@mode=\tikz@mode@save\let\tikz@options=\tikz@options@save}
+ let
+ \p1=($(\tikztostart)!\pgfkeysvalueof{/tikz/dim arrow/raise}!90:(\tikztotarget)$),
+ \p2=($(\tikztotarget)!\pgfkeysvalueof{/tikz/dim arrow/raise}!-90:(\tikztostart)$)
+ in ($(\p2)!-\pgfkeysvalueof{/tikz/dim arrow/arrow length}!(\p1)$) -- ($(\p2)!0!(\p1)$);
+ \ifnum\dimarrow@short@position=0
+ \path let
+ \p1=($(\tikztostart)!\labelTotalRaise!90:(\tikztotarget)$),
+ \p2=($(\tikztotarget)!\labelTotalRaise!-90:(\tikztostart)$)
+ in let
+ \p3=($(\p1)!-1*\pgfkeysvalueof{/tikz/dim arrow/arrow length}!(\p2)$),
+ \p4=($(\p1)!-0*\pgfkeysvalueof{/tikz/dim arrow/arrow length}!(\p2)$)
+ in
+ (\p3) -- (\p4) node[pos=0.5,auto=left,/tikz/dim arrow/label style] {\pgfkeysvalueof{/tikz/dim arrow/label text}};
+ \fi
+ \ifnum\dimarrow@short@position=1
+ \path let
+ \p1=($(\tikztostart)!\labelTotalRaise!90:(\tikztotarget)$),
+ \p2=($(\tikztotarget)!\labelTotalRaise!-90:(\tikztostart)$)
+ in let
+ \p3=($(\p2)!-1*\pgfkeysvalueof{/tikz/dim arrow/arrow length}!(\p1)$),
+ \p4=($(\p2)!-0*\pgfkeysvalueof{/tikz/dim arrow/arrow length}!(\p1)$)
+ in
+ (\p4) -- (\p3) node[pos=0.5,auto=left,/tikz/dim arrow/label style] {\pgfkeysvalueof{/tikz/dim arrow/label text}};
+ \fi
+ \ifnum\dimarrow@short@position=2
+ \path let
+ \p1=($(\tikztostart)!\labelTotalRaise!90:(\tikztotarget)$),
+ \p2=($(\tikztotarget)!\labelTotalRaise!-90:(\tikztostart)$)
+ in
+ (\p1) -- (\p2) node[pos=0.5,/tikz/dim arrow/label style] {\pgfkeysvalueof{/tikz/dim arrow/label text}};
+ \fi
+ \endpgfinterruptpath
+ }(\tikztostart) (\tikztotarget) \tikztonodes
+ }
+ },
+ draw dim arrow/.style={to path={\pgfextra{%
+ \let\tikz@mode@save=\tikz@mode%
+ \let\tikz@options@save=\tikz@options%
+ \newdimen\labelTotalRaise
+ \pgfmathsetlength\labelTotalRaise{\pgfkeysvalueof{/tikz/dim arrow/raise}}
+ \pgfinterruptpath
+ \draw[>=technical,|<->|] \pgfextra{\let\tikz@mode=\tikz@mode@save\let\tikz@options=\tikz@options@save}
+ let
+ \p1=($(\tikztostart)!\pgfkeysvalueof{/tikz/dim arrow/raise}!90:(\tikztotarget)$),
+ \p2=($(\tikztotarget)!\pgfkeysvalueof{/tikz/dim arrow/raise}!-90:(\tikztostart)$)
+ in (\p1) -- (\p2);
+ \path let
+ \p1=($(\tikztostart)!\labelTotalRaise!90:(\tikztotarget)$),
+ \p2=($(\tikztotarget)!\labelTotalRaise!-90:(\tikztostart)$)
+ in (\p1) -- (\p2) node[pos=0.5,auto=left,/tikz/dim arrow/label style] {\pgfkeysvalueof{/tikz/dim arrow/label text}};
+ % rq : inner sep controle la distance chemin-node
+ \endpgfinterruptpath
+ }(\tikztostart) (\tikztotarget) \tikztonodes
+ }
+ },
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Arrows
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Arrow lens arrow
+% used to draw lenses (perhaps not the best idea).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfsetarrowoptions{lens arrow@length}{6pt}
+\pgfsetarrowoptions{lens arrow@angle}{50}
+\pgfarrowsdeclare{lens arrow}{lens arrow}
+{
+ \pgfarrowsleftextend{0pt}
+ \pgfarrowsrightextend{0pt}
+}
+{
+ \pgfsetroundcap
+ \pgfsetmiterjoin
+ \pgfmathsetlength{\pgfutil@tempdimb}{\pgfgetarrowoptions{lens arrow@length}*sin(\pgfgetarrowoptions{lens arrow@angle}/2)}
+ \def\arrow@origin{\pgfpoint{0pt}{0pt}}
+ \pgfutil@tempdima=\pgfgetarrowoptions{lens arrow@length}%
+ \pgfmathsetmacro{\tmp@lens@angle}{90+\pgfgetarrowoptions{lens arrow@angle}}
+ \pgfmathsetmacro{\tmp@lens@anglediv}{\pgfgetarrowoptions{lens arrow@angle}/2}
+ \advance\pgfutil@tempdima by -1.5\pgflinewidth%
+ \pgfmathsetlength{\pgfutil@tempdima}{\pgfutil@tempdima/cos(\pgfgetarrowoptions{lens arrow@angle}/2)}
+ \pgfpathmoveto{\pgfpointadd{\arrow@origin}{\pgfqpointpolar{\tmp@lens@angle}{\pgfutil@tempdima}}}
+ \pgfpathlineto{\arrow@origin}
+ \pgfpathlineto{\pgfpointadd{\arrow@origin}{\pgfqpointpolar{-\tmp@lens@angle}{\pgfutil@tempdima}}}
+ \pgfusepathqstroke
+}
+\pgfarrowsdeclarereversed{lens arrow reversed}{lens arrow reversed}{lens arrow}{lens arrow}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Ray arrow
+% It is useful to have an arrow which goes on the exact middle of a path.
+% This is used on ->-, etc.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% flèche utilisée pour marquer les rayons lumineux (avec les styles ->-, etc.)
+\pgfsetarrowoptions{ray arrow@length}{4pt}
+\pgfsetarrowoptions{ray arrow@angle}{45}
+
+\makeatletter
+
+\pgfsetarrowoptions{multiple ray arrow}{0}
+\pgfarrowsdeclare{multiple ray arrow}{multiple ray arrow}
+{
+ \pgfarrowsleftextend{0pt}
+ \pgfarrowsrightextend{0pt}
+}
+{
+ \pgfsetroundcap
+ \pgfsetmiterjoin
+ \pgfutil@tempdima=\pgfgetarrowoptions{ray arrow@length}%
+ \pgfmathsetmacro{\tmp@ray@angle}{90+\pgfgetarrowoptions{ray arrow@angle}}
+ \pgfmathsetmacro{\tmp@ray@anglediv}{\pgfgetarrowoptions{ray arrow@angle}/2}
+ \advance\pgfutil@tempdima by -1.5\pgflinewidth%
+ \pgfmathsetlength{\pgfutil@tempdima}{\pgfutil@tempdima/cos(\pgfgetarrowoptions{ray arrow@angle}/2)}
+ %
+ \foreach \i in {1,...,\pgfgetarrowoptions{multiple ray arrow}}
+ {
+ \pgfmathsetlength{\pgfutil@tempdimb}{(2*\i-\pgfgetarrowoptions{multiple ray arrow})*\pgfgetarrowoptions{ray arrow@length}*sin(\pgfgetarrowoptions{ray arrow@angle}/2)}
+ %
+ \def\arrow@origin{\pgfpoint{\pgfutil@tempdimb}{0pt}}
+ %
+ \pgfpathmoveto{\pgfpointadd{\arrow@origin}{\pgfqpointpolar{\tmp@ray@angle}{\pgfutil@tempdima}}}
+ \pgfpathlineto{\arrow@origin}
+ \pgfpathlineto{\pgfpointadd{\arrow@origin}{\pgfqpointpolar{-\tmp@ray@angle}{\pgfutil@tempdima}}}
+ \pgfusepathqstroke
+ }
+}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Arrow technical
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\makeatletter
+\pgfarrowsdeclare{technical}{technical}
+{%
+ \pgfutil@tempdima=0.48pt%
+ \pgfutil@tempdimb=\pgflinewidth%
+ \ifdim\pgfinnerlinewidth>0pt%
+ \pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
+ \fi%
+ \advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
+ \pgfarrowsleftextend{+-3\pgfutil@tempdima}%
+ \pgfarrowsrightextend{+8\pgfutil@tempdima}%
+}
+{%
+ \pgfutil@tempdima=0.48pt%
+ \pgfutil@tempdimb=\pgflinewidth%
+ \ifdim\pgfinnerlinewidth>0pt%
+ \pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
+ \fi%
+ \advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
+ \pgfpathmoveto{\pgfqpoint{8\pgfutil@tempdima}{0pt}}%
+ \pgfpathlineto{\pgfqpoint{-3\pgfutil@tempdima}{3\pgfutil@tempdima}}%
+ \pgfpathlineto{\pgfpointorigin}%
+ \pgfpathlineto{\pgfqpoint{-3\pgfutil@tempdima}{-3\pgfutil@tempdima}}%
+ \pgfusepathqfill%
+}
+
+\pgfarrowsdeclare{technical reversed}{technical reversed}
+{%
+ \pgfutil@tempdima=0.48pt%
+ \pgfutil@tempdimb=\pgflinewidth%
+ \ifdim\pgfinnerlinewidth>0pt%
+ \pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
+ \fi%
+ \advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
+ \pgfarrowsleftextend{-8\pgfutil@tempdima}
+ \pgfarrowsrightextend{-8\pgfutil@tempdima}
+}
+{%
+ \pgfutil@tempdima=0.48pt%
+ \pgfutil@tempdimb=\pgflinewidth%
+ \ifdim\pgfinnerlinewidth>0pt%
+ \pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth-.4*\pgfinnerlinewidth}%
+ \fi%
+ \advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
+ \pgfpathmoveto{\pgfqpoint{-8\pgfutil@tempdima}{0pt}}%
+ \pgfpathlineto{\pgfqpoint{3\pgfutil@tempdima}{3\pgfutil@tempdima}}%
+ \pgfpathlineto{\pgfpointorigin}%
+ \pgfpathlineto{\pgfqpoint{3\pgfutil@tempdima}{-3\pgfutil@tempdima}}%
+ \pgfusepathqfill%
+}
+
+
+% Changelog:
+% 2013-10-21 : ajout du style |distance arrow| et de la décoration |line| correspondante.
+% 2013-11-19 : suppression de |distance arrow| et ajout à la place de |dim arrow| et assimilés
+% 2013-11-22 : choix entre distances relatives et absolues (http://www.texample.net/tikz/examples/supersonic-nozzle/)
+% 2013-11-24 : styles de flèches |->-|, |-<-|, |->>-|, |-<<-| (et flèches pgf |ray arrow|, etc. correspondantes)
+% 2013-11-24 : flèches pgf |lens arrow| et |lens arrow reversed|
+% 2013-11-24 : |generic optics element| -> |thin optics element| et |thick optics element| ; conséquences. |beam splitter|
+% 2014-01-01 : ajout de |double amici prism|, |optics| -> |use optics| et |one arrow| -> |put arrow| ; |mark a *| supprimés
+% 2014-03-19 : anchorborder pour |generic optics io| (les labels devraient donc être placés correctement)
+% |io body aspect ratio| accepte désormais aussi des longueurs absolues, ajout d'un alias |io body width| pour |io body aspect ratio|
+% 2014-06-26 : modification du code des flèches |->-|, |->>-|, etc. et ajout de |->>>-|, |->>>>-|,|->n-=<nombre>| (idem dans l'autre sens)
+% 2014-07-08 : ajout de |arrow style| à |put arrow|
+% 2014-09-20 : ajout de |spherical mirror| et quelques modifications à |mirror| (ajustement de la décoration et de ses réglages par défaut)
+% 2014-09-22 : ajustements de |spherical mirror| (concave et convexe), et ajout des styles correspondants |convex mirror| et |concave mirror|
+% 2014-09-24 : ajustements de |spherical mirror| (ltr/rtl) ; correction des ancres de generic optics io (aperture north, aperture center, aperture south étaient incorrectes)
+% 2014-09-25 : corrections à |spherical mirror| (ltr/rtl vs concave/convex) ;
+% 2014-10-02 : ajout d'une fonction |from_radius| pour définir l'angle d'ouverture de |spherical mirror|, encore des corrections à |spherical mirror| (ltr/rtl vs concave/convex) ;
+% macro pour les messages d'erreur
+% 2014-10-03 : vérifications de cohérence des grandeurs pour |slit| et |double slit| ; messages d'erreur au besoin
+% 2014-12-07 : modifications substantielles à |put arrow| et |optics/->n-|, etc. pour pouvoir avoir plusieurs flèches sur le même chemin ; la compatibilité arrière est brisée.
+% 2014-12-11 : nettoyage
+% 2015-03-10 : ajout d'un alias |object width| pour |object aspect ratio|, qui accepte désormais aussi des longueurs absolues
+% 2015-06-13 : mise en cohérence des noms des points focaux pour le miroir et la lentille (désormais, "focus" et "focal point")
+% 2016-11-21 : appel aux biblothèques tikz |decorations| et |decorations.pathreplacing| qui sont nécessaires
+\makeatother \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-page/Makefile b/graphics/pgf/contrib/tikz-page/Makefile
new file mode 100644
index 0000000000..79df540a65
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-page/Makefile
@@ -0,0 +1,49 @@
+##
+
+
+export TEXMFHOME="~/texmf:"
+PACKAGE = tikz-page
+
+cleanext := $(wildcard *.dvi *.aux *.glo *.ilg *.ind *.toc *.hd *.idx *.listing *.log *.out _minted-*)
+
+listings := $(wildcard $(PACKAGE)-*.tex wildcard $(PACKAGE)-*.md5 wildcard $(PACKAGE)-*.pdf)
+
+objects := $(PACKAGE).sty $(PACKAGE).pdf
+
+LATEX := $(shell which latex)
+PDFLATEX := $(shell which pdflatex)
+PANDOC := $(shell which pandoc)
+
+CTANDIR := $(PACKAGE)
+CTANDIST = Makefile README.md README \
+ tikz-page.pdf tikz-page.dtx tikz-page.sty \
+ example.png
+
+all: $(objects) README
+
+%.sty: %.dtx
+ $(RM) -f $@
+ $(LATEX) '\let\install=y\input{$<}'
+
+%.pdf: %.dtx
+ TEXMFHOME="~/texmf:" $(PDFLATEX) -shell-escape $<
+ makeindex -s gind.ist $(PACKAGE).idx
+ TEXMFHOME="~/texmf:" $(PDFLATEX) -shell-escape $<
+ #$(PDFLATEX) -shell-escape $<
+
+clean:
+ $(RM) -fr $(cleanext) $(listings) $(PACKAGE).zip
+
+distclean: clean
+ $(RM) -f $(objects) README $(CTANDIR)
+
+README: README.md
+ $(PANDOC) -t plain -o $@ $<
+
+CTAN: all README clean
+ mkdir -p $(CTANDIR)
+ cp $(CTANDIST) $(CTANDIR)
+ zip -ll -q -r -X $(CTANDIR).zip $(CTANDIR)
+
+
+.PHONY: %.dty
diff --git a/graphics/pgf/contrib/tikz-page/README b/graphics/pgf/contrib/tikz-page/README
new file mode 100644
index 0000000000..4a87e5194b
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-page/README
@@ -0,0 +1,108 @@
+
+
+TIKZ PAGE
+
+
+Small macro to help building nice and complex page layout materials.
+
+
+Build
+
+You can build the whole package using the make command.
+
+
+Installation
+
+To install the tkiz-page package copy its directory to either to:
+
+- $TEXHOME/tex/latex/
+- $TEXMFHOME/tex/latex/
+- ~/texmf/tex/latex/
+- ~/Library/texmf/tex/latex/
+
+
+Usage
+
+A simple page:
+
+ \documentclass{article}
+ \usepackage{tikz-page}
+ \usepackage{lipsum}
+ \newcommand{\tikzpagelayout}{
+ \tpshowframes
+ \tikzpageputanchors
+ }
+ \pagestyle{plain}
+ \begin{document}
+ \lipsum
+ \end{document}
+
+A more complex document:
+
+ \documentclass{article}
+ \usepackage{tikz-page}
+ \usepackage{lipsum}
+ \definecolor{halfgray}{gray}{0.55}
+ \newcommand\anglei{-45}
+ \newcommand\angleii{45}
+ \newcommand\angleiii{225}
+ \newcommand\angleiv{135}
+ \newcommand{\tikzpagelayout}{
+ \tpflip{
+ \coordinate (aux1) at ([yshift=-15pt]page.northeast);
+ \coordinate (aux2) at ([yshift=-410pt]page.northeast);
+ \coordinate (aux3) at ([xshift=-4.5cm]page.northeast);
+ \coordinate (aux4) at ([yshift=-150pt]page.northeast);
+ }{
+ \coordinate (aux1) at ([yshift=-15pt]page.northwest);
+ \coordinate (aux2) at ([yshift=-410pt]page.northwest);
+ \coordinate (aux3) at ([xshift=4.5cm]page.northwest);
+ \coordinate (aux4) at ([yshift=-150pt]page.northwest);
+ \renewcommand\anglei{-135}
+ \renewcommand\angleii{135}
+ \renewcommand\angleiii{-45}
+ \renewcommand\angleiv{45}
+ }
+ \begin{scope}[halfgray!40,line width=12pt,rounded corners=12pt]
+ \draw (aux1) -- coordinate (a) ++(\angleiii:5) -- ++(\anglei:5.1) coordinate (b);
+ \draw[shorten <= -10pt] (aux3) -- (a) -- (aux1);
+ \draw[opacity=0.6,halfgray,shorten <= -10pt] (b) -- ++(\angleiii:2.2) -- ++(\anglei:2.2);
+ \end{scope}
+ \draw[halfgray,line width=8pt,rounded corners=8pt,shorten <= -10pt]
+ (aux4) -- ++(\angleiii:0.8) -- ++(\anglei:0.8);
+ \begin{scope}[halfgray!70,line width=6pt,rounded corners=8pt]
+ \draw[shorten <= -10pt] (aux2) -- ++(\angleiii:3) coordinate[pos=0.45] (c) -- ++(\anglei:3.1);
+ \draw (aux2) -- (c) -- ++(\angleiv:2.5) -- ++(\angleii:2.5) -- ++(\anglei:2.5) coordinate[pos=0.3] (d);
+ \draw (d) -- +(\angleii:1);
+ \end{scope}
+ }
+ \pagestyle{plain}
+ \begin{document}
+ \lipsum
+ \end{document}
+
+See tikz-page.pdf for further help.
+
+
+Example
+
+[tikz example]
+
+
+License
+
+This program is free software. It comes without any warranty, to the
+extent permitted by applicable law. You can redistribute it and/or
+modify it under the terms of the Do What The Fuck You Want To Public
+License, Version 2, as published by Sam Hocevar. See
+http://sam.zoy.org/wtfpl/COPYING for more details.
+
+This file may be distributed and/or modified under the conditions of the
+LaTeX Project Public License, either version 1.3c of this license or (at
+your option) any later version. The latest version of this license is
+in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX version
+2006/05/20 or later.
diff --git a/graphics/pgf/contrib/tikz-page/README.md b/graphics/pgf/contrib/tikz-page/README.md
new file mode 100644
index 0000000000..875d80bf63
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-page/README.md
@@ -0,0 +1,107 @@
+# Tikz page
+
+Small macro to help building nice and complex page layout materials.
+
+
+## Build
+
+You can build the whole package using the `make` command.
+
+## Installation
+
+To install the `tkiz-page` package copy its directory to either to:
+
+- `$TEXHOME/tex/latex/`
+- `$TEXMFHOME/tex/latex/`
+- `~/texmf/tex/latex/`
+- `~/Library/texmf/tex/latex/`
+
+
+## Usage
+
+A simple page:
+
+````Tex
+\documentclass{article}
+\usepackage{tikz-page}
+\usepackage{lipsum}
+\newcommand{\tikzpagelayout}{
+ \tpshowframes
+ \tikzpageputanchors
+}
+\pagestyle{plain}
+\begin{document}
+\lipsum
+\end{document}
+````
+
+A more complex document:
+
+```Tex
+\documentclass{article}
+\usepackage{tikz-page}
+\usepackage{lipsum}
+\definecolor{halfgray}{gray}{0.55}
+\newcommand\anglei{-45}
+\newcommand\angleii{45}
+\newcommand\angleiii{225}
+\newcommand\angleiv{135}
+\newcommand{\tikzpagelayout}{
+ \tpflip{
+ \coordinate (aux1) at ([yshift=-15pt]page.northeast);
+ \coordinate (aux2) at ([yshift=-410pt]page.northeast);
+ \coordinate (aux3) at ([xshift=-4.5cm]page.northeast);
+ \coordinate (aux4) at ([yshift=-150pt]page.northeast);
+ }{
+ \coordinate (aux1) at ([yshift=-15pt]page.northwest);
+ \coordinate (aux2) at ([yshift=-410pt]page.northwest);
+ \coordinate (aux3) at ([xshift=4.5cm]page.northwest);
+ \coordinate (aux4) at ([yshift=-150pt]page.northwest);
+ \renewcommand\anglei{-135}
+ \renewcommand\angleii{135}
+ \renewcommand\angleiii{-45}
+ \renewcommand\angleiv{45}
+ }
+ \begin{scope}[halfgray!40,line width=12pt,rounded corners=12pt]
+ \draw (aux1) -- coordinate (a) ++(\angleiii:5) -- ++(\anglei:5.1) coordinate (b);
+ \draw[shorten <= -10pt] (aux3) -- (a) -- (aux1);
+ \draw[opacity=0.6,halfgray,shorten <= -10pt] (b) -- ++(\angleiii:2.2) -- ++(\anglei:2.2);
+ \end{scope}
+ \draw[halfgray,line width=8pt,rounded corners=8pt,shorten <= -10pt]
+ (aux4) -- ++(\angleiii:0.8) -- ++(\anglei:0.8);
+ \begin{scope}[halfgray!70,line width=6pt,rounded corners=8pt]
+ \draw[shorten <= -10pt] (aux2) -- ++(\angleiii:3) coordinate[pos=0.45] (c) -- ++(\anglei:3.1);
+ \draw (aux2) -- (c) -- ++(\angleiv:2.5) -- ++(\angleii:2.5) -- ++(\anglei:2.5) coordinate[pos=0.3] (d);
+ \draw (d) -- +(\angleii:1);
+ \end{scope}
+}
+\pagestyle{plain}
+\begin{document}
+\lipsum
+\end{document}
+```
+
+See [tikz-page.pdf](tikz-page.pdf) for further help.
+
+
+## Example
+
+![tikz example](example.png)
+
+## License
+
+This program is free software. It comes without any warranty, to the extent
+permitted by applicable law. You can redistribute it and/or modify it under
+the terms of the Do What The Fuck You Want To Public License, Version 2, as
+published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+details.
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3c of this license
+or (at your option) any later version. The latest version of this
+license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX
+version 2006/05/20 or later.
diff --git a/graphics/pgf/contrib/tikz-page/example.png b/graphics/pgf/contrib/tikz-page/example.png
new file mode 100644
index 0000000000..c711a2d542
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-page/example.png
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-page/tikz-page.dtx b/graphics/pgf/contrib/tikz-page/tikz-page.dtx
new file mode 100644
index 0000000000..27ffe0b964
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-page/tikz-page.dtx
@@ -0,0 +1,871 @@
+% \iffalse meta-comment % -*- latex -*-
+%
+%<*ignore>
+\begingroup
+ \catcode123=1 %
+ \catcode125=2 %
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase 0\ifx\install y1\fi\expandafter
+ \ifx\csname processbatchFile\endcsname\relax\else1\fi
+ \ifx\fmtname\x\else 1\fi\relax
+\else\csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/tikz-page}
+
+\let\MetaPrefix\relax
+\preamble
+This is a generated file.
+
+Copyright © 2016 by Sébastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>
+
+This program is free software. It comes without any warranty, to the extent
+permitted by applicable law. You can redistribute it and/or modify it under
+the terms of the Do What The Fuck You Want To Public License, Version 2, as
+published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+details.
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3c of this license
+or (at your option) any later version. The latest version of this
+license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of LaTeX
+version 2006/05/20 or later.
+
+\endpreamble%
+\let\MetaPrefix\DoubleperCent
+
+
+\generate{\file{tikz-page.sty}{\from{tikz-page.dtx}{tikz-page}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* tikz-page.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file mypackage.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+%<*driver>
+\ProvidesFile{tikz-page.drv}
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\usepackage[english]{babel}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{tcolorbox}
+\tcbuselibrary{listings,documentation}
+\tcbuselibrary{documentation,listings,minted}
+\tcbuselibrary{breakable}
+\tcbuselibrary{skins,raster}
+\tcbset{listing engine=minted}
+\usepackage{url}
+\usepackage{minted}
+\usepackage{calc}
+\usepackage{makeidx}
+\usepackage[textpos]{tikz-page}
+\renewcommand{\headrulewidth}{0pt}
+\makeindex
+\definecolor{halfgray}{gray}{0.55}
+\newcommand\anglei{-45}
+\newcommand\angleii{45}
+\newcommand\angleiii{225}
+\newcommand\angleiv{135}
+\newcommand{\pagedecoration}{
+ \tpflip{
+ \coordinate (aux1) at ([yshift=-15pt]page.northeast);
+ \coordinate (aux2) at ([yshift=-410pt]page.northeast);
+ \coordinate (aux3) at ([xshift=-4.5cm]page.northeast);
+ \coordinate (aux4) at ([yshift=-150pt]page.northeast);
+ }{
+ \coordinate (aux1) at ([yshift=-15pt]page.northwest);
+ \coordinate (aux2) at ([yshift=-410pt]page.northwest);
+ \coordinate (aux3) at ([xshift=4.5cm]page.northwest);
+ \coordinate (aux4) at ([yshift=-150pt]page.northwest);
+ \renewcommand\anglei{-135}
+ \renewcommand\angleii{135}
+ \renewcommand\angleiii{-45}
+ \renewcommand\angleiv{45}
+ }
+ \begin{scope}[halfgray!40,line width=12pt,rounded corners=12pt]
+ \draw (aux1) -- coordinate (a) ++(\angleiii:5) -- ++(\anglei:5.1) coordinate (b);
+ \draw[shorten <= -10pt] (aux3) -- (a) -- (aux1);
+ \draw[opacity=0.6,halfgray,shorten <= -10pt] (b) -- ++(\angleiii:2.2) -- ++(\anglei:2.2);
+ \end{scope}
+ \draw[halfgray,line width=8pt,rounded corners=8pt,shorten <= -10pt]
+ (aux4) -- ++(\angleiii:0.8) -- ++(\anglei:0.8);
+ \begin{scope}[halfgray!70,line width=6pt,rounded corners=8pt]
+ \draw[shorten <= -10pt] (aux2) -- ++(\angleiii:3) coordinate[pos=0.45] (c) -- ++(\anglei:3.1);
+ \draw (aux2) -- (c) -- ++(\angleiv:2.5) -- ++(\angleii:2.5) -- ++(\anglei:2.5) coordinate[pos=0.3] (d);
+ \draw (d) -- +(\angleii:1);
+ \end{scope}
+}
+
+\newcommand{\tikzpagelayout}{
+ \pagedecoration
+ \node [,outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage};
+ \node [,outer sep=0,inner sep=0,anchor=base, rotate=90, color=black!10] at (page.left south) {\footnotesize{tikz-page \pkgfileversion}};
+}
+\fancypagestyle{plain}{
+ \fancyhf{}
+ \chead{\tikzpage}
+}
+\fancypagestyle{titlepage}{
+ \fancyhf{}
+ \chead{\tikzpage}
+}
+\pagestyle{plain}
+\begin{document}
+\DocInput{tikz-page.dtx}
+\printindex
+
+\end{document}
+%</driver>
+%<*README>
+
+%</README>
+
+% \fi
+
+% \iffalse
+%% DeclareTCBListing{macrocode} leave a blank line after code.
+% \fi
+
+% \expandafter \let \csname macrocode\endcsname \relax \expandafter \let \csname endmacrocode\endcsname \relax
+% \expandafter \let \csname macrocode*\endcsname \relax \expandafter \let \csname endmacrocode*\endcsname \relax
+% \newminted[macrocode]{latex}{breaklines,breakafter=()/+-\\,baselinestretch=0.5,fontsize=\footnotesize,linenos,numbersep=3mm,firstnumber=last}
+%
+% \BeforeBeginEnvironment{macrocode}{%
+% \begin{tcolorbox}[boxrule=0.1pt,colframe=red!75!black,left=8mm,width=\linewidth,breakable=true,colback=white,enhanced]}
+% \AfterEndEnvironment{macrocode}{\end{tcolorbox}}%
+
+
+% \newminted[example]{latex}{breaklines,breakafter=()/+-\\,baselinestretch=0.5,fontsize=\footnotesize}
+% \BeforeBeginEnvironment{example}{%
+% \begin{tcolorbox}[boxrule=0.1pt,colframe=red!75!black,left=8mm,width=\linewidth,breakable=true,colback=white,enhanced]}
+% \AfterEndEnvironment{example}{\end{tcolorbox}}%
+
+% \tcbset{
+% tpexample/.style = {%
+% enhanced jigsaw,
+% lower separated=false,
+% leftlower=0pt,
+% rightlower=0pt,
+% boxrule=0.1pt,
+% breakable=true,
+% colframe=red!75!black,
+% colback=white,
+% listing engine=minted,
+% minted options={breaklines,breakafter=()/+-\\,baselinestretch=0.5,fontsize=\footnotesize},
+% listing and comment,
+% pdf comment,
+% compilable listing,
+% run pdflatex}
+% }
+
+
+% \iffalse
+%<*tikz-page>
+% \fi
+\def\pkgfileversion{1.0}
+\def\pkgfiledate{2016/08/22}
+% \iffalse
+%</tikz-page>
+% \fi
+
+% \title{the \textsc{tikz-page} package }
+% \author {Sébastien Gross <seb chezwam org>}
+% \date{This file describes version \pkgfileversion\ (\pkgfiledate)}
+% \maketitle
+% \tableofcontents
+
+
+% \section{Introduction}
+
+% There are many ways to embelish a page with \LaTeX. One of the most
+% easiest way is to use |fancyhdr| which allows to redefine both headers and
+% footer. The |geometry| package is also useful to setup correct margins. If
+% you need to put some background materials this might become painful,
+% especially if you need your background to reach the page borders.
+
+% There are some trick that help you in this task. |tikz-page| helps you in
+% this way by the use of semeral mechanisms. Either you can use plain |tikz|
+% picture on the background of your page, or use the \meta{textpos} option
+% which enables absolute |textpos| positionning. Each method has its
+% benefits and nuisances. With |tikz| you have to compile your document
+% twice (which can be painful while you are designing your page layout) and
+% with |textpos| you can get some incompatibility issues (please refer to
+% |textpos| documentation).
+
+% |tikz-page| is trying to give you best of both world by creating a new
+% page object in a |tikzpicture| with many anchors. So you can easily place
+% your page material at its correct position.
+
+
+% \section{Usage}
+
+% Basically you only need to add \mintinline{latex}{\usepackage{tikz-page}}
+% at the begining of your document. Then you have to declare a
+% \docAuxCommand{tikzpagelayout} command which is executed inside the
+% background |tikzpicture|. Thus you can access the |page| shape and all its
+% anchors. For example the following simple example add the page number to
+% the footer center:
+
+% \iffalse
+%<*example>
+% \fi
+% \begin{example}
+\newcommand{tikzpagelayout}{%
+ \node [outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage};
+}
+% \end{example}
+% \iffalse
+%</example>
+% \fi
+
+
+% If you want to simulate the default |fancyhdr| behaviour you can define the
+% \docAuxCommand{tikzpagelayout} as following:
+
+
+% \iffalse
+%<*example>
+% \fi
+% \begin{example}
+\newcommand{tikzpagelayout}{%
+ \node [outer sep=0,inner sep=0, anchor=mid east] at (page.header east) {\tpflip{\sl\leftmark}{\sl\rightmark}};
+ \node [outer sep=0,inner sep=0, anchor=mid west] at (page.header west) {\tpflip{\sl\rightmark}{\sl\leftmark}};
+ \node [,outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage};
+% \end{example}
+% \iffalse
+%</example>
+% \fi
+
+% A minimum working example:
+% \iffalse
+%<*example>
+% \fi
+%\begin{tcblisting}{tpexample}
+\documentclass{article}
+\usepackage{tikz-page}
+\usepackage{lipsum}
+\newcommand{\tikzpagelayout}{
+ \tpshowframes
+ \tikzpageputanchors
+}
+\pagestyle{plain}
+\begin{document}
+\lipsum
+\end{document}
+% \end{tcblisting}
+% \iffalse
+%</example>
+% \fi
+
+
+% A more complex example\cite{Graphical Decoration}:
+% \iffalse
+%<*example>
+% \fi
+%\begin{tcblisting}{tpexample}
+\documentclass{article}
+\usepackage{tikz-page}
+\usepackage{lipsum}
+\definecolor{halfgray}{gray}{0.55}
+\newcommand\anglei{-45}
+\newcommand\angleii{45}
+\newcommand\angleiii{225}
+\newcommand\angleiv{135}
+\newcommand{\tikzpagelayout}{
+ \tpflip{
+ \coordinate (aux1) at ([yshift=-15pt]page.northeast);
+ \coordinate (aux2) at ([yshift=-410pt]page.northeast);
+ \coordinate (aux3) at ([xshift=-4.5cm]page.northeast);
+ \coordinate (aux4) at ([yshift=-150pt]page.northeast);
+ }{
+ \coordinate (aux1) at ([yshift=-15pt]page.northwest);
+ \coordinate (aux2) at ([yshift=-410pt]page.northwest);
+ \coordinate (aux3) at ([xshift=4.5cm]page.northwest);
+ \coordinate (aux4) at ([yshift=-150pt]page.northwest);
+ \renewcommand\anglei{-135}
+ \renewcommand\angleii{135}
+ \renewcommand\angleiii{-45}
+ \renewcommand\angleiv{45}
+ }
+ \begin{scope}[halfgray!40,line width=12pt,rounded corners=12pt]
+ \draw (aux1) -- coordinate (a) ++(\angleiii:5) -- ++(\anglei:5.1) coordinate (b);
+ \draw[shorten <= -10pt] (aux3) -- (a) -- (aux1);
+ \draw[opacity=0.6,halfgray,shorten <= -10pt] (b) -- ++(\angleiii:2.2) -- ++(\anglei:2.2);
+ \end{scope}
+ \draw[halfgray,line width=8pt,rounded corners=8pt,shorten <= -10pt]
+ (aux4) -- ++(\angleiii:0.8) -- ++(\anglei:0.8);
+ \begin{scope}[halfgray!70,line width=6pt,rounded corners=8pt]
+ \draw[shorten <= -10pt] (aux2) -- ++(\angleiii:3) coordinate[pos=0.45] (c) -- ++(\anglei:3.1);
+ \draw (aux2) -- (c) -- ++(\angleiv:2.5) -- ++(\angleii:2.5) -- ++(\anglei:2.5) coordinate[pos=0.3] (d);
+ \draw (d) -- +(\angleii:1);
+ \end{scope}
+}
+\pagestyle{plain}
+\begin{document}
+\lipsum
+\end{document}
+% \end{tcblisting}
+% \iffalse
+%</example>
+% \fi
+
+
+
+% \iffalse
+%<*tikz-page>
+% \fi
+
+% \iffalse
+%% Reset the FancyVerbLine counter to have the correct lines number in front
+%% of implementation.
+% \fi
+% \setcounter{FancyVerbLine}{0}
+
+% \section{Implementation}
+
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-page}[\pkgfiledate\space (v\pkgfileversion)]
+% \end{macrocode}
+
+% The \meta{textpos} option can be used if you want to use |textpos|
+% \meta{overlay} option instead of |current page| to position the page
+% layout. Beware that |textpos| with \meta{overlay} option maybe incompatible
+% with some other packages. On the other hand |tikz| |current page| requires
+% at least 2 compilation to work correctly. Thus you might want to use
+% \meta{textpos} at conception time and remove this option for your final
+% build or if you have incompatibility issues.
+
+% \begin{macrocode}
+\newif\if@tp@use@textpos\@tp@use@textposfalse
+\DeclareOption{textpos}{\@tp@use@textpostrue}
+\ProcessOptions
+
+\if@tp@use@textpos
+\RequirePackage[absolute]{textpos}
+\fi
+% \end{macrocode}
+
+% \begin{macrocode}
+\RequirePackage{fancyhdr}
+\RequirePackage{tikz}
+\usetikzlibrary{plotmarks,calc,shapes,positioning,decorations.text}
+\RequirePackage{graphicx}
+\RequirePackage{calc}
+% \end{macrocode}
+
+
+\makeatletter
+
+% All margin sizes are defined in\docLength{@tp@left@margin},
+% \docLength{@tp@right@margin}, \docLength{@tp@top@margin},
+% \docLength{@tp@bottom@margin} their values are computed by the
+% \refCom{tp@compute@margins}.
+
+% \begin{macrocode}
+\newlength{\@tp@left@margin}
+\newlength{\@tp@right@margin}
+\newlength{\@tp@top@margin}
+\newlength{\@tp@bottom@margin}
+% \end{macrocode}
+
+
+% \begin{docCommand}{@tp@create@length}{\marg{block name}\marg{length name}}
+
+% Generate a \cs{tp@\meta{block name}@\meta{length name}} length. This
+% command is intended to be only used to create block length defined below.
+
+% \begin{macrocode}
+\newcommand\@tp@create@length[2]{%
+ \expandafter\newskip\csname tp@#1@#2\endcsname%
+}%
+% \end{macrocode}
+% \end{docCommand}
+%
+
+% For each standard blocks in the page (|page|, |body|, |marginpar|,
+% |header|, |footer|) and additionnal blocks (|top|, |right|, |bottom|,
+% |left|), 6 lenths are computed in order to define their anchors. Each
+% length is defined using the \refCom{@tp@create@length} macro.
+
+% \begin{macrocode}
+\foreach\@@tp@element in {page,body,marginpar,header,footer,top,right,bottom,left}{%
+ \foreach\@@tp@len in {xmin,xmax,xmid,ymin,ymax,ymid}{%
+ \@tp@create@length{\@@tp@element}{\@@tp@len}%
+}}%
+% \end{macrocode}
+
+% \begin{docCommand}{tcflip}{\marg{odd page code}\marg{even page code}}
+% Execute \meta{odd page even code} on odd pages and \meta{even page code}
+% on even ones.
+% \end{docCommand}
+% \begin{macrocode}
+\newcommand{\tpflip}[2]{\ifodd\thepage#1\else#2\fi}
+% \end{macrocode}
+
+% \begin{docCommand}{tp@compute@margins}{}
+%
+% This is where the magic happens. This command sets all \cs{tp@\meta{block
+% name}@\meta{length name}} lengths.
+%
+% \end{docCommand}
+
+% \begin{macrocode}
+\def\tp@compute@margins{%
+ \setlength{\tp@page@xmin}{0pt}%
+ \setlength{\tp@page@ymin}{0pt}%
+ \setlength{\tp@page@xmax}{\paperwidth}%
+ \setlength{\tp@page@ymax}{\paperheight}%
+ \setlength{\tp@page@xmid}{\dimexpr(\tp@page@xmin+\tp@page@xmax)/2\relax}%
+ \setlength{\tp@page@ymid}{\dimexpr(\tp@page@ymin+\tp@page@ymax)/2\relax}%
+ %
+ \setlength\@tp@left@margin{\dimexpr(1in+\hoffset+\tpflip{\oddsidemargin}{\evensidemargin})\relax}%
+ \setlength\@tp@right@margin{\dimexpr(\paperwidth-\@tp@left@margin-\textwidth)\relax}%
+ \setlength\@tp@top@margin{\dimexpr(1in+\voffset+\topmargin+\headheight+\headsep)\relax}%
+ \setlength\@tp@bottom@margin{\dimexpr(\paperheight-(\textheight+\@tp@top@margin))\relax}%
+ %% Body computation
+ \setlength\tp@body@xmin{\dimexpr\tp@page@xmin+\@tp@left@margin\relax}%
+ \setlength\tp@body@xmax{\dimexpr\tp@page@xmax-\@tp@right@margin\relax}%
+ \setlength\tp@body@xmid{\dimexpr((\tp@body@xmax+\tp@body@xmin)/2)\relax}%
+ \setlength\tp@body@ymax{\dimexpr(\tp@page@ymax-\@tp@top@margin)\relax}%
+ \setlength\tp@body@ymin{\dimexpr\tp@body@ymin+\@tp@bottom@margin\relax}%
+ \setlength\tp@body@ymid{\dimexpr(\tp@body@ymin+(\tp@body@ymax-\tp@body@ymin)/2)\relax}%
+ %
+ %% Margin computation
+ %
+ \tpflip{%
+ \setlength\tp@marginpar@xmin{\dimexpr\tp@body@xmax+\marginparsep\relax}
+ \setlength\tp@marginpar@xmax{\dimexpr\tp@marginpar@xmin+\marginparwidth\relax}%
+ }{%
+ \setlength\tp@marginpar@xmax{\dimexpr\tp@body@xmin-\marginparsep\relax}%
+ \setlength\tp@marginpar@xmin{\dimexpr\tp@marginpar@xmax-\marginparwidth\relax}%
+ }%
+ \setlength\tp@marginpar@xmid{\dimexpr((\tp@marginpar@xmax+\tp@marginpar@xmin)/2)\relax}%
+ \setlength\tp@marginpar@ymax{\tp@body@ymax}%
+ \setlength\tp@marginpar@ymin{\tp@body@ymin}%
+ \setlength\tp@marginpar@ymid{\tp@body@ymid}%
+ %
+ %% header
+ %
+ \setlength\tp@header@xmax{\tp@body@xmax}%
+ \setlength\tp@header@xmin{\tp@body@xmin}%
+ \setlength\tp@header@xmid{\tp@body@xmid}%
+ \setlength\tp@header@ymin{\dimexpr\tp@body@ymax+\headsep\relax}%
+ \setlength\tp@header@ymax{\dimexpr\tp@header@ymin+\headheight\relax}%
+ \setlength\tp@header@ymid{\dimexpr((\tp@header@ymax+\tp@header@ymin)/2)\relax}%
+ %
+ %% footer
+ %
+ \setlength\tp@footer@xmax{\tp@body@xmax}%
+ \setlength\tp@footer@xmin{\tp@body@xmin}%
+ \setlength\tp@footer@xmid{\tp@body@xmid}%
+ \setlength\tp@footer@ymin{\dimexpr\tp@body@ymin-\footskip\relax}%
+ \setlength\tp@footer@ymax{\tp@footer@ymin}%
+ \setlength\tp@footer@ymid{\dimexpr((\tp@footer@ymax+\tp@footer@ymin)/2)\relax}%
+ %%
+ %% blocks%
+ %%
+ \setlength\tp@top@xmin{\tp@page@xmin}%
+ \setlength\tp@top@xmax{\tp@page@xmax}%
+ \setlength\tp@top@xmid{\dimexpr((\tp@top@xmax+\tp@top@xmin)/2)\relax}%
+ \setlength\tp@top@ymin{\tp@body@ymax}%
+ \setlength\tp@top@ymax{\tp@page@ymax}%
+ \setlength\tp@top@ymid{\dimexpr((\tp@top@ymax+\tp@top@ymin)/2)\relax}%
+ %%
+ \setlength\tp@bottom@xmin{\tp@page@xmin}%
+ \setlength\tp@bottom@xmax{\tp@page@xmax}%
+ \setlength\tp@bottom@xmid{\dimexpr((\tp@bottom@xmax+\tp@bottom@xmin)/2)\relax}%
+ \setlength\tp@bottom@ymin{\tp@page@ymin}%
+ \setlength\tp@bottom@ymax{\tp@body@ymin}%
+ \setlength\tp@bottom@ymid{\dimexpr((\tp@bottom@ymax+\tp@bottom@ymin)/2)\relax}%
+ %%
+ \setlength\tp@left@xmin{\tp@page@xmin}%
+ \setlength\tp@left@xmax{\tp@body@xmin}%
+ \setlength\tp@left@xmid{\dimexpr((\tp@left@xmax+\tp@left@xmin)/2)\relax}%
+ \setlength\tp@left@ymin{\tp@body@ymin}%
+ \setlength\tp@left@ymax{\tp@body@ymax}%
+ \setlength\tp@left@ymid{\dimexpr((\tp@left@ymax+\tp@left@ymin)/2)\relax}%
+ %%
+ \setlength\tp@right@xmin{\tp@body@xmax}%
+ \setlength\tp@right@xmax{\tp@page@xmax}%
+ \setlength\tp@right@xmid{\dimexpr((\tp@right@xmax+\tp@right@xmin)/2)\relax}%
+ \setlength\tp@right@ymin{\tp@body@ymin}%
+ \setlength\tp@right@ymax{\tp@body@ymax}%
+ \setlength\tp@right@ymid{\dimexpr((\tp@right@ymax+\tp@right@ymin)/2)\relax}%
+}%% \end{macrocode}
+
+% \begin{docCommand}{@tp@genanchors}{\marg{block name}}
+% Generate all 9 anchors (|northwest|, |north|, |northest|, |west|,
+% |center|, |east|, |southwest|, |south|, |southest|) for \meta{block name}.
+% \end{docCommand}
+
+% \begin{macrocode}
+\def\@tp@genanchors#1{%
+ \anchor{#1 north}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}%
+ \anchor{#1 south}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}%
+ \anchor{#1 west}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}%
+ \anchor{#1 northwest}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}%
+ \anchor{#1 southwest}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}%
+ \anchor{#1 east}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}%
+ \anchor{#1 northeast}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}%
+ \anchor{#1 southeast}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}%
+ \anchor{#1 center}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}%
+}%
+% \end{macrocode}
+
+% \begin{macrocode}
+\newcommand\tp@pgfdeclareanchoralias[3]{%
+ \expandafter\def\csname pgf@anchor@#1@#3\expandafter\endcsname
+ \expandafter{\csname pgf@anchor@#1@#2\endcsname}}
+% \end{macrocode}
+
+% \begin{macrocode}
+\pgfdeclareshape{page}{
+ \backgroundpath{
+ \pgfpathmoveto{\pgfpoint{\tp@page@xmin}{\tp@page@ymin}}
+ \pgfpathlineto{\pgfpoint{\tp@page@xmin}{\tp@page@ymax}}
+ \pgfpathlineto{\pgfpoint{\tp@page@xmax}{\tp@page@ymax}}
+ \pgfpathlineto{\pgfpoint{\tp@page@xmax}{\tp@page@xmin}}
+ \pgfpathclose
+ }
+ %% basic anchors
+ \anchor{north}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymax}%
+ \anchor{south}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymin}%
+ \anchor{west}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymid}%
+ \anchor{northwest}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymax}%
+ \anchor{southwest}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymin}%
+ \anchor{east}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymid}%
+ \anchor{northeast}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymax}%
+ \anchor{southeast}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymin}%
+ %\anchor{center}{\pgfpointorigin}
+ \anchor{center}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymid}
+ \anchor{origin}{\pgfpointorigin}%\pgf@x=0pt \pgf@y=0pt}
+ \@tp@genanchors{page}
+ %% Body anchors
+ \@tp@genanchors{body}
+ \@tp@genanchors{marginpar}
+ \@tp@genanchors{header}
+ \@tp@genanchors{footer}
+ \@tp@genanchors{top}
+ \@tp@genanchors{bottom}
+ \@tp@genanchors{left}
+ \@tp@genanchors{right}
+}
+% \end{macrocode}
+
+
+%Create a new |tpx| mark to show anchor location when using
+%\refCom{tikzpageputanchors} to display anchors on the page.
+%
+% \begin{macrocode}
+\newdimen\tp@linewidth
+\newdimen\tp@marksize
+\setlength\tp@marksize{3pt}
+\pgfdeclareplotmark{tpx}{
+ \setlength{\tp@linewidth}{\pgflinewidth}
+ \pgfsetlinewidth{0.1pt}
+ \pgfpathmoveto{\pgfpoint{-\tp@marksize}{-\tp@marksize}}
+ \pgfpathlineto{\pgfpoint{\tp@marksize}{\tp@marksize}}
+ \pgfpathmoveto{\pgfpoint{-\tp@marksize}{\tp@marksize}}
+ \pgfpathlineto{\pgfpoint{\tp@marksize}{-\tp@marksize}}
+ \pgfusepathqstroke
+ \setlength{\pgflinewidth}{\tp@linewidth}
+}
+% \end{macrocode}
+
+
+% Anchors can be displayed block by block (using
+% \cs{tikzpageputanchorsdefaults}, \cs{tikzpageputanchors}
+% \cs{tikzpageputanchorsmarginpar}, \cs{tikzpageputanchorsheader},
+% \cs{tikzpageputanchorsfooter}, \cs{tikzpageputanchorstop},
+% \cs{tikzpageputanchorsright}, \cs{tikzpageputanchorsbottom},
+% \cs{tikzpageputanchorsleft}) or globally (using \refCom{tikzpageputanchors}).
+
+% \begin{macrocode}
+\def\tikzpageputanchorsdefaults{
+ \foreach \anchor/\placement in {%
+ northwest/below right%
+ ,north/below%
+ ,northeast/below left%
+ ,west/right%
+ ,center/below%
+ ,east/left%
+ ,southwest/above right%
+ ,south/above%
+ ,southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsbody{
+ \foreach \anchor/\placement in {%
+ body northwest/below right%
+ ,body north/below%
+ ,body northeast/below left%
+ ,body west/right%
+ ,body center/below%
+ ,body east/left%
+ ,body southwest/above right%
+ ,body south/above%
+ ,body southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+
+\def\tikzpageputanchorsmarginpar{
+ \foreach \anchor/\placement in {%
+ marginpar northwest/below left%
+ ,marginpar north/left%
+ ,marginpar northeast/above left%
+ ,marginpar west/below%
+ ,marginpar center/below%
+ ,marginpar east/above%
+ ,marginpar southwest/below right%
+ ,marginpar south/right%
+ ,marginpar southeast/above right%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+
+\def\tikzpageputanchorsheader{
+ \foreach \anchor/\placement in {%
+ header northwest/above right%
+ ,header north/above%
+ ,header northeast/above left%
+ ,header west/right%
+ ,header center/right%
+ ,header east/left%
+ ,header southwest/below right%
+ ,header south/below%
+ ,header southeast/below left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+
+\def\tikzpageputanchorsfooter{
+ \foreach \anchor/\placement in {%
+ footer northwest/above right%
+ ,footer north/above%
+ ,footer northeast/above left%
+ ,footer west/right%
+ ,footer center/right%
+ ,footer east/left%
+ ,footer southwest/below right%
+ ,footer south/below%
+ ,footer southeast/below left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorstop{
+ \foreach \anchor/\placement in {%
+ top northwest/below right%
+ ,top north/below%
+ ,top northeast/below left%
+ ,top west/right%
+ ,top center/below%
+ ,top east/left%
+ ,top southwest/above right%
+ ,top south/above%
+ ,top southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+
+\def\tikzpageputanchorsbottom{
+ \foreach \anchor/\placement in {%
+ bottom northwest/below right%
+ ,bottom north/below%
+ ,bottom northeast/below left%
+ ,bottom west/right%
+ ,bottom center/below%
+ ,bottom east/left%
+ ,bottom southwest/above right%
+ ,bottom south/above%
+ ,bottom southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+
+\def\tikzpageputanchorsleft{
+ \foreach \anchor/\placement in {%
+ left northwest/below left%
+ ,left north/left%
+ ,left northeast/above left%
+ ,left west/below%
+ ,left center/below%
+ ,left east/above%
+ ,left southwest/below right%
+ ,left south/right%
+ ,left southeast/above right%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsright{
+ \foreach \anchor/\placement in {%
+ right northwest/below left%
+ ,right north/left%
+ ,right northeast/above left%
+ ,right west/below%
+ ,right center/below%
+ ,right east/above%
+ ,right southwest/below right%
+ ,right south/right%
+ ,right southeast/above right%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}};
+}
+% \end{macrocode}
+
+% \begin{docCommand}{tikzpageputanchors}{}
+% A simple short hand to display all anchors at once.
+% \end{docCommand}
+% \begin{macrocode}
+\def\tikzpageputanchors{
+ \tikzpageputanchorsdefaults
+ \tikzpageputanchorsbody
+ \tikzpageputanchorsmarginpar
+ \tikzpageputanchorsheader
+ \tikzpageputanchorsfooter
+ \tikzpageputanchorstop
+ \tikzpageputanchorsbottom
+ \tikzpageputanchorsleft
+ \tikzpageputanchorsright
+}
+% \end{macrocode}
+
+
+
+% \begin{docCommand}{tpshowframes}{}
+%
+% Display |top|, |right|, |bottom| and |left| block using a specific
+% background. This can be used in conjunction with \refCom{tikzpageputanchors} for
+% debuging purposes.
+%
+% \end{docCommand}
+% \begin{macrocode}
+\def\tpshowframes{
+ \draw[fill=blue!50, opacity=.3, draw] (page.bottom northwest) rectangle (page.bottom southeast);
+ \draw[fill=yellow!50, opacity=.3, draw] (page.top northwest) rectangle (page.top southeast);
+ \draw[fill=red!50, opacity=.3, draw] (page.left northwest) rectangle (page.left southeast);
+ \draw[fill=green!50, opacity=.3, draw] (page.right northwest) rectangle (page.right southeast);
+}
+% \end{macrocode}
+
+
+% \begin{docCommand}{tpfancyhdrdefault}{}
+% An example to display headers and footer as |fancyhdr| does.
+% \end{docCommand}
+% \begin{macrocode}
+\def\tpfancyhdrdefault{
+ \node [outer sep=0,inner sep=0, anchor=mid] at (page.header center) {};
+ \node [outer sep=0,inner sep=0, anchor=mid east] at (page.header east) {\tpflip{\sl\leftmark}{\sl\rightmark}};
+ \node [outer sep=0,inner sep=0, anchor=mid west] at (page.header west) {\tpflip{\sl\rightmark}{\sl\leftmark}};
+ \node [outer sep=0,inner sep=0, anchor=base east] at (page.footer east) {};
+ \node [,outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage};
+ \node [outer sep=0,inner sep=0, anchor=base west] at (page.footer west) {};
+}
+% \end{macrocode}
+
+% \begin{docCommand}{tikzpage}{}
+% Generate a |tikzpicture| for the whole page. if a \cs{tikzpagelayout}
+% command exists, it will be executed.
+% \end{docCommand}
+% \begin{macrocode}
+\newcommand{\tikzpage}{
+ \if@tp@use@textpos
+ \begin{textblock*}{\textwidth}[0,0](0pt,0pt)%
+ \fi
+ \tp@compute@margins%
+ \if@tp@use@textpos
+ \begin{tikzpicture}[]%
+ \clip (0,0) rectangle (\paperwidth, \paperheight);
+ \else
+ \begin{tikzpicture}[remember picture, overlay]%
+ \fi
+ \if@tp@use@textpos
+ \node[anchor=origin,shape=page] (page) {};
+ \else
+ \node[anchor=origin,shape=page] (page) at (current page.south west) {};
+ \fi
+ \@ifundefined{tikzpagelayout}{}{\tikzpagelayout}
+ \end{tikzpicture}%
+ \if@tp@use@textpos
+ \end{textblock*}%
+ \fi
+}
+% \end{macrocode}
+
+
+\fancypagestyle{plain}{
+ \fancyhf{}
+ \chead{\tikzpage}
+}
+\fancypagestyle{empty}{
+ \fancyhf{}
+ \chead{\tikzpage}
+}
+
+
+%
+\makeatother
+% \iffalse
+%</tikz-page>
+% \fi
+%
+% \Finale
+%
+%
+% \iffalse
+% <*example>
+% \fi
+% \begin{thebibliography}{9}
+
+% \bibitem{Graphical Decoration} Trying to do graphical decorations in
+% “ClassicThesis style†\url{http://tex.stackexchange.com/questions/86294}
+% \end{thebibliography}
+% \iffalse
+% </example>
+% \fi
+
+\endinput
diff --git a/graphics/pgf/contrib/tikz-page/tikz-page.pdf b/graphics/pgf/contrib/tikz-page/tikz-page.pdf
new file mode 100644
index 0000000000..9367deae08
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-page/tikz-page.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-page/tikz-page.sty b/graphics/pgf/contrib/tikz-page/tikz-page.sty
new file mode 100644
index 0000000000..fb13b4db43
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-page/tikz-page.sty
@@ -0,0 +1,452 @@
+%%
+%% This is file `tikz-page.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tikz-page.dtx (with options: `tikz-page')
+%% This is a generated file.
+%%
+%% Copyright © 2016 by Sébastien Gross <seb•ɑƬ•chezwam•ɖɵʈ•org>
+%%
+%% This program is free software. It comes without any warranty, to the extent
+%% permitted by applicable law. You can redistribute it and/or modify it under
+%% the terms of the Do What The Fuck You Want To Public License, Version 2, as
+%% published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more
+%% details.
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3c of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2006/05/20 or later.
+%%
+
+
+%% DeclareTCBListing{macrocode} leave a blank line after code.
+
+
+
+
+\def\pkgfileversion{1.0}
+\def\pkgfiledate{2016/08/22}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+%% Reset the FancyVerbLine counter to have the correct lines number in front
+%% of implementation.
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-page}[\pkgfiledate\space (v\pkgfileversion)]
+
+
+\newif\if@tp@use@textpos\@tp@use@textposfalse
+\DeclareOption{textpos}{\@tp@use@textpostrue}
+\ProcessOptions
+
+\if@tp@use@textpos
+\RequirePackage[absolute]{textpos}
+\fi
+
+\RequirePackage{fancyhdr}
+\RequirePackage{tikz}
+\usetikzlibrary{plotmarks,calc,shapes,positioning,decorations.text}
+\RequirePackage{graphicx}
+\RequirePackage{calc}
+
+\makeatletter
+
+
+\newlength{\@tp@left@margin}
+\newlength{\@tp@right@margin}
+\newlength{\@tp@top@margin}
+\newlength{\@tp@bottom@margin}
+
+
+
+\newcommand\@tp@create@length[2]{%
+ \expandafter\newskip\csname tp@#1@#2\endcsname%
+}%
+
+
+\foreach\@@tp@element in {page,body,marginpar,header,footer,top,right,bottom,left}{%
+ \foreach\@@tp@len in {xmin,xmax,xmid,ymin,ymax,ymid}{%
+ \@tp@create@length{\@@tp@element}{\@@tp@len}%
+}}%
+
+\newcommand{\tpflip}[2]{\ifodd\thepage#1\else#2\fi}
+
+
+\def\tp@compute@margins{%
+ \setlength{\tp@page@xmin}{0pt}%
+ \setlength{\tp@page@ymin}{0pt}%
+ \setlength{\tp@page@xmax}{\paperwidth}%
+ \setlength{\tp@page@ymax}{\paperheight}%
+ \setlength{\tp@page@xmid}{\dimexpr(\tp@page@xmin+\tp@page@xmax)/2\relax}%
+ \setlength{\tp@page@ymid}{\dimexpr(\tp@page@ymin+\tp@page@ymax)/2\relax}%
+ %
+ \setlength\@tp@left@margin{\dimexpr(1in+\hoffset+\tpflip{\oddsidemargin}{\evensidemargin})\relax}%
+ \setlength\@tp@right@margin{\dimexpr(\paperwidth-\@tp@left@margin-\textwidth)\relax}%
+ \setlength\@tp@top@margin{\dimexpr(1in+\voffset+\topmargin+\headheight+\headsep)\relax}%
+ \setlength\@tp@bottom@margin{\dimexpr(\paperheight-(\textheight+\@tp@top@margin))\relax}%
+ %% Body computation
+ \setlength\tp@body@xmin{\dimexpr\tp@page@xmin+\@tp@left@margin\relax}%
+ \setlength\tp@body@xmax{\dimexpr\tp@page@xmax-\@tp@right@margin\relax}%
+ \setlength\tp@body@xmid{\dimexpr((\tp@body@xmax+\tp@body@xmin)/2)\relax}%
+ \setlength\tp@body@ymax{\dimexpr(\tp@page@ymax-\@tp@top@margin)\relax}%
+ \setlength\tp@body@ymin{\dimexpr\tp@body@ymin+\@tp@bottom@margin\relax}%
+ \setlength\tp@body@ymid{\dimexpr(\tp@body@ymin+(\tp@body@ymax-\tp@body@ymin)/2)\relax}%
+ %
+ %% Margin computation
+ %
+ \tpflip{%
+ \setlength\tp@marginpar@xmin{\dimexpr\tp@body@xmax+\marginparsep\relax}
+ \setlength\tp@marginpar@xmax{\dimexpr\tp@marginpar@xmin+\marginparwidth\relax}%
+ }{%
+ \setlength\tp@marginpar@xmax{\dimexpr\tp@body@xmin-\marginparsep\relax}%
+ \setlength\tp@marginpar@xmin{\dimexpr\tp@marginpar@xmax-\marginparwidth\relax}%
+ }%
+ \setlength\tp@marginpar@xmid{\dimexpr((\tp@marginpar@xmax+\tp@marginpar@xmin)/2)\relax}%
+ \setlength\tp@marginpar@ymax{\tp@body@ymax}%
+ \setlength\tp@marginpar@ymin{\tp@body@ymin}%
+ \setlength\tp@marginpar@ymid{\tp@body@ymid}%
+ %
+ %% header
+ %
+ \setlength\tp@header@xmax{\tp@body@xmax}%
+ \setlength\tp@header@xmin{\tp@body@xmin}%
+ \setlength\tp@header@xmid{\tp@body@xmid}%
+ \setlength\tp@header@ymin{\dimexpr\tp@body@ymax+\headsep\relax}%
+ \setlength\tp@header@ymax{\dimexpr\tp@header@ymin+\headheight\relax}%
+ \setlength\tp@header@ymid{\dimexpr((\tp@header@ymax+\tp@header@ymin)/2)\relax}%
+ %
+ %% footer
+ %
+ \setlength\tp@footer@xmax{\tp@body@xmax}%
+ \setlength\tp@footer@xmin{\tp@body@xmin}%
+ \setlength\tp@footer@xmid{\tp@body@xmid}%
+ \setlength\tp@footer@ymin{\dimexpr\tp@body@ymin-\footskip\relax}%
+ \setlength\tp@footer@ymax{\tp@footer@ymin}%
+ \setlength\tp@footer@ymid{\dimexpr((\tp@footer@ymax+\tp@footer@ymin)/2)\relax}%
+ %%
+ %% blocks%
+ %%
+ \setlength\tp@top@xmin{\tp@page@xmin}%
+ \setlength\tp@top@xmax{\tp@page@xmax}%
+ \setlength\tp@top@xmid{\dimexpr((\tp@top@xmax+\tp@top@xmin)/2)\relax}%
+ \setlength\tp@top@ymin{\tp@body@ymax}%
+ \setlength\tp@top@ymax{\tp@page@ymax}%
+ \setlength\tp@top@ymid{\dimexpr((\tp@top@ymax+\tp@top@ymin)/2)\relax}%
+ %%
+ \setlength\tp@bottom@xmin{\tp@page@xmin}%
+ \setlength\tp@bottom@xmax{\tp@page@xmax}%
+ \setlength\tp@bottom@xmid{\dimexpr((\tp@bottom@xmax+\tp@bottom@xmin)/2)\relax}%
+ \setlength\tp@bottom@ymin{\tp@page@ymin}%
+ \setlength\tp@bottom@ymax{\tp@body@ymin}%
+ \setlength\tp@bottom@ymid{\dimexpr((\tp@bottom@ymax+\tp@bottom@ymin)/2)\relax}%
+ %%
+ \setlength\tp@left@xmin{\tp@page@xmin}%
+ \setlength\tp@left@xmax{\tp@body@xmin}%
+ \setlength\tp@left@xmid{\dimexpr((\tp@left@xmax+\tp@left@xmin)/2)\relax}%
+ \setlength\tp@left@ymin{\tp@body@ymin}%
+ \setlength\tp@left@ymax{\tp@body@ymax}%
+ \setlength\tp@left@ymid{\dimexpr((\tp@left@ymax+\tp@left@ymin)/2)\relax}%
+ %%
+ \setlength\tp@right@xmin{\tp@body@xmax}%
+ \setlength\tp@right@xmax{\tp@page@xmax}%
+ \setlength\tp@right@xmid{\dimexpr((\tp@right@xmax+\tp@right@xmin)/2)\relax}%
+ \setlength\tp@right@ymin{\tp@body@ymin}%
+ \setlength\tp@right@ymax{\tp@body@ymax}%
+ \setlength\tp@right@ymid{\dimexpr((\tp@right@ymax+\tp@right@ymin)/2)\relax}%
+}%% \end{macrocode}
+
+
+\def\@tp@genanchors#1{%
+ \anchor{#1 north}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}%
+ \anchor{#1 south}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}%
+ \anchor{#1 west}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}%
+ \anchor{#1 northwest}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}%
+ \anchor{#1 southwest}{\pgf@x=\csname tp@#1@xmin\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}%
+ \anchor{#1 east}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}%
+ \anchor{#1 northeast}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymax\endcsname}%
+ \anchor{#1 southeast}{\pgf@x=\csname tp@#1@xmax\endcsname \pgf@y=\csname tp@#1@ymin\endcsname}%
+ \anchor{#1 center}{\pgf@x=\csname tp@#1@xmid\endcsname \pgf@y=\csname tp@#1@ymid\endcsname}%
+}%
+
+\newcommand\tp@pgfdeclareanchoralias[3]{%
+ \expandafter\def\csname pgf@anchor@#1@#3\expandafter\endcsname
+ \expandafter{\csname pgf@anchor@#1@#2\endcsname}}
+
+\pgfdeclareshape{page}{
+ \backgroundpath{
+ \pgfpathmoveto{\pgfpoint{\tp@page@xmin}{\tp@page@ymin}}
+ \pgfpathlineto{\pgfpoint{\tp@page@xmin}{\tp@page@ymax}}
+ \pgfpathlineto{\pgfpoint{\tp@page@xmax}{\tp@page@ymax}}
+ \pgfpathlineto{\pgfpoint{\tp@page@xmax}{\tp@page@xmin}}
+ \pgfpathclose
+ }
+ %% basic anchors
+ \anchor{north}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymax}%
+ \anchor{south}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymin}%
+ \anchor{west}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymid}%
+ \anchor{northwest}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymax}%
+ \anchor{southwest}{\pgf@x=\tp@page@xmin \pgf@y=\tp@page@ymin}%
+ \anchor{east}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymid}%
+ \anchor{northeast}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymax}%
+ \anchor{southeast}{\pgf@x=\tp@page@xmax \pgf@y=\tp@page@ymin}%
+ %\anchor{center}{\pgfpointorigin}
+ \anchor{center}{\pgf@x=\tp@page@xmid \pgf@y=\tp@page@ymid}
+ \anchor{origin}{\pgfpointorigin}%\pgf@x=0pt \pgf@y=0pt}
+ \@tp@genanchors{page}
+ %% Body anchors
+ \@tp@genanchors{body}
+ \@tp@genanchors{marginpar}
+ \@tp@genanchors{header}
+ \@tp@genanchors{footer}
+ \@tp@genanchors{top}
+ \@tp@genanchors{bottom}
+ \@tp@genanchors{left}
+ \@tp@genanchors{right}
+}
+
+\newdimen\tp@linewidth
+\newdimen\tp@marksize
+\setlength\tp@marksize{3pt}
+\pgfdeclareplotmark{tpx}{
+ \setlength{\tp@linewidth}{\pgflinewidth}
+ \pgfsetlinewidth{0.1pt}
+ \pgfpathmoveto{\pgfpoint{-\tp@marksize}{-\tp@marksize}}
+ \pgfpathlineto{\pgfpoint{\tp@marksize}{\tp@marksize}}
+ \pgfpathmoveto{\pgfpoint{-\tp@marksize}{\tp@marksize}}
+ \pgfpathlineto{\pgfpoint{\tp@marksize}{-\tp@marksize}}
+ \pgfusepathqstroke
+ \setlength{\pgflinewidth}{\tp@linewidth}
+}
+
+
+\def\tikzpageputanchorsdefaults{
+ \foreach \anchor/\placement in {%
+ northwest/below right%
+ ,north/below%
+ ,northeast/below left%
+ ,west/right%
+ ,center/below%
+ ,east/left%
+ ,southwest/above right%
+ ,south/above%
+ ,southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsbody{
+ \foreach \anchor/\placement in {%
+ body northwest/below right%
+ ,body north/below%
+ ,body northeast/below left%
+ ,body west/right%
+ ,body center/below%
+ ,body east/left%
+ ,body southwest/above right%
+ ,body south/above%
+ ,body southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsmarginpar{
+ \foreach \anchor/\placement in {%
+ marginpar northwest/below left%
+ ,marginpar north/left%
+ ,marginpar northeast/above left%
+ ,marginpar west/below%
+ ,marginpar center/below%
+ ,marginpar east/above%
+ ,marginpar southwest/below right%
+ ,marginpar south/right%
+ ,marginpar southeast/above right%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsheader{
+ \foreach \anchor/\placement in {%
+ header northwest/above right%
+ ,header north/above%
+ ,header northeast/above left%
+ ,header west/right%
+ ,header center/right%
+ ,header east/left%
+ ,header southwest/below right%
+ ,header south/below%
+ ,header southeast/below left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsfooter{
+ \foreach \anchor/\placement in {%
+ footer northwest/above right%
+ ,footer north/above%
+ ,footer northeast/above left%
+ ,footer west/right%
+ ,footer center/right%
+ ,footer east/left%
+ ,footer southwest/below right%
+ ,footer south/below%
+ ,footer southeast/below left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorstop{
+ \foreach \anchor/\placement in {%
+ top northwest/below right%
+ ,top north/below%
+ ,top northeast/below left%
+ ,top west/right%
+ ,top center/below%
+ ,top east/left%
+ ,top southwest/above right%
+ ,top south/above%
+ ,top southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsbottom{
+ \foreach \anchor/\placement in {%
+ bottom northwest/below right%
+ ,bottom north/below%
+ ,bottom northeast/below left%
+ ,bottom west/right%
+ ,bottom center/below%
+ ,bottom east/left%
+ ,bottom southwest/above right%
+ ,bottom south/above%
+ ,bottom southeast/above left%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsleft{
+ \foreach \anchor/\placement in {%
+ left northwest/below left%
+ ,left north/left%
+ ,left northeast/above left%
+ ,left west/below%
+ ,left center/below%
+ ,left east/above%
+ ,left southwest/below right%
+ ,left south/right%
+ ,left southeast/above right%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchorsright{
+ \foreach \anchor/\placement in {%
+ right northwest/below left%
+ ,right north/left%
+ ,right northeast/above left%
+ ,right west/below%
+ ,right center/below%
+ ,right east/above%
+ ,right southwest/below right%
+ ,right south/right%
+ ,right southeast/above right%
+ } \draw[red,shift=(page.\anchor)] plot[mark=tpx%% my plot mark
+ ] coordinates{(0,0)}
+ node[blue,\placement, rotate=90] {\scriptsize\texttt{(page.\anchor)}};
+}
+
+\def\tikzpageputanchors{
+ \tikzpageputanchorsdefaults
+ \tikzpageputanchorsbody
+ \tikzpageputanchorsmarginpar
+ \tikzpageputanchorsheader
+ \tikzpageputanchorsfooter
+ \tikzpageputanchorstop
+ \tikzpageputanchorsbottom
+ \tikzpageputanchorsleft
+ \tikzpageputanchorsright
+}
+
+\def\tpshowframes{
+ \draw[fill=blue!50, opacity=.3, draw] (page.bottom northwest) rectangle (page.bottom southeast);
+ \draw[fill=yellow!50, opacity=.3, draw] (page.top northwest) rectangle (page.top southeast);
+ \draw[fill=red!50, opacity=.3, draw] (page.left northwest) rectangle (page.left southeast);
+ \draw[fill=green!50, opacity=.3, draw] (page.right northwest) rectangle (page.right southeast);
+}
+
+\def\tpfancyhdrdefault{
+ \node [outer sep=0,inner sep=0, anchor=mid] at (page.header center) {};
+ \node [outer sep=0,inner sep=0, anchor=mid east] at (page.header east) {\tpflip{\sl\leftmark}{\sl\rightmark}};
+ \node [outer sep=0,inner sep=0, anchor=mid west] at (page.header west) {\tpflip{\sl\rightmark}{\sl\leftmark}};
+ \node [outer sep=0,inner sep=0, anchor=base east] at (page.footer east) {};
+ \node [,outer sep=0,inner sep=0,anchor=base] at (page.footer center) {\thepage};
+ \node [outer sep=0,inner sep=0, anchor=base west] at (page.footer west) {};
+}
+
+\newcommand{\tikzpage}{
+ \if@tp@use@textpos
+ \begin{textblock*}{\textwidth}[0,0](0pt,0pt)%
+ \fi
+ \tp@compute@margins%
+ \if@tp@use@textpos
+ \begin{tikzpicture}[]%
+ \clip (0,0) rectangle (\paperwidth, \paperheight);
+ \else
+ \begin{tikzpicture}[remember picture, overlay]%
+ \fi
+ \if@tp@use@textpos
+ \node[anchor=origin,shape=page] (page) {};
+ \else
+ \node[anchor=origin,shape=page] (page) at (current page.south west) {};
+ \fi
+ \@ifundefined{tikzpagelayout}{}{\tikzpagelayout}
+ \end{tikzpicture}%
+ \if@tp@use@textpos
+ \end{textblock*}%
+ \fi
+}
+
+\fancypagestyle{plain}{
+ \fancyhf{}
+ \chead{\tikzpage}
+}
+\fancypagestyle{empty}{
+ \fancyhf{}
+ \chead{\tikzpage}
+}
+
+\makeatother
+
+
+\endinput
+%%
+%% End of file `tikz-page.sty'.
diff --git a/graphics/pgf/contrib/tikz-palattice/Makefile b/graphics/pgf/contrib/tikz-palattice/Makefile
new file mode 100644
index 0000000000..b985a3967a
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/Makefile
@@ -0,0 +1,40 @@
+latex = pdflatex
+packagename = tikz-palattice
+INSTALL_PATH = /usr/local/share/texmf/tex/latex
+e1 = example1_linear
+e2 = example2_circular
+e3 = example3_coordinates
+e4 = example4_labels
+e5 = elsa
+doc = tikz-palattice_documentation
+
+all: doc allexamples
+doc: $(doc).pdf
+allexamples: $(e1).pdf $(e2).pdf $(e3).pdf $(e4).pdf $(e5).pdf
+
+
+$(e1).pdf: $(e1).tex
+ $(latex) $<
+
+$(e2).pdf: $(e2).tex
+ $(latex) $<
+
+$(e3).pdf: $(e3).tex
+ $(latex) $<
+
+$(e4).pdf: $(e4).tex
+ $(latex) $<
+
+$(e5).pdf: $(e5).tex
+ $(latex) $<
+
+$(doc).pdf: $(doc).tex $(e1).pdf $(e5).pdf
+ $(latex) $<
+
+
+install:
+ install -m 644 -p -D -v tikz-palattice.sty $(INSTALL_PATH)/$(packagename)/$(packagename).sty
+ mktexlsr
+
+clean:
+ rm $(e1).pdf $(e2).pdf $(e3).pdf $(e4).pdf $(e5).pdf
diff --git a/graphics/pgf/contrib/tikz-palattice/README b/graphics/pgf/contrib/tikz-palattice/README
new file mode 100644
index 0000000000..cefce969a9
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/README
@@ -0,0 +1,13 @@
+Package Name: tikz-palattice
+
+Author Name: Jan Schmidt
+
+License: LaTeX Project Public License 1.3
+
+Description: The tikz-palattice package allows for drawing a map of a particle accelerator just by
+giving a list of elements - similar to lattice files for simulation software. The
+package includes 12 common element types like dipoles, quadrupoles, cavities or screens,
+as well as automatic labels with element names, a legend, a rule and an environment to
+fade out parts of the accelerator. The coordinate of any element can be saved and used
+for custom tikz drawings or annotations. Thereby, lattices can be connected to draw
+injection/extraction or even a complete accelerator facility. \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-palattice/elsa.tex b/graphics/pgf/contrib/tikz-palattice/elsa.tex
new file mode 100644
index 0000000000..859e296dee
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/elsa.tex
@@ -0,0 +1,952 @@
+%% elsa.tex
+%% Copyright 2017 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 5 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex and elsa.tex
+
+
+\documentclass[tikz]{standalone}
+%\usepackage[ngerman]{babel}
+\usepackage[english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{iflang}
+\usepackage{tikz-palattice}
+
+\sisetup{range-units=single, range-phrase=\,-\,, detect-weight=true, detect-family=true}
+\addto\extrasngerman{\sisetup{locale = DE}}
+\addto\extrasenglish{\sisetup{locale = US}}
+
+\def\scale{0.5}
+
+\tikzset{biggestlabel/.style={font=\bfseries\Huge,scale=2.5, align=center,faded}}
+\tikzset{biglabel/.style={font=\bfseries\Huge,scale=2, align=center,faded}}
+\tikzset{mediumlabel/.style={font=\huge,scale=2, align=center,faded}}
+\tikzset{smalllabel/.style={font=\Large,scale=2.2, align=center,faded}}
+\tikzset{experimentlabel/.style={mediumlabel, fill=white, fill opacity=0.7, text opacity=1}}
+
+
+
+% ---------------------------------------------------------------------
+% The lattice data given in this file is designated for drawing a map
+% and should not be used for any calculations or simulation!
+% ---------------------------------------------------------------------
+
+\begin{document}
+\begin{lattice}[\scale]
+\def\quadl{0.2}
+\setelementcolor{dipole}{blue!55!cyan!90}[blue!55!cyan!90]
+\setelementcolor{solenoid}{cyan}
+\setlinecolor{drift}{red!70!black}
+\def\photonbeam{black}
+% "switch labels off":
+%\setlabelcolor{white}
+
+\drawrule{(58,-7)}[5][3][0.3]
+\setangle{180}
+\start{(0,0)}
+
+%-----------------------------------
+%LINAC2
+%-----------------------------------
+\northlabels
+\source{}{1}
+\savecoordinate{PolQ}[center]
+\drift{2.5}
+\drift{0.5} % wand
+\source{}{0.2}
+\drift{0.8}
+\savecoordinate{L2label}
+\cavity{}{3.85}
+\drift{0.35}
+\quadrupole{Q1}{\quadl}
+\drift{0.5}
+\quadrupole{Q2}{\quadl}
+\drift{0.35}
+\quadrupole{Q3}{\quadl}
+\drift{0.3}
+\dipole{M90}{0.5}{-90}
+\drift{0.3}
+\quadrupole{Q4}{\quadl}
+\drift{0.75}
+\quadrupole{Q5}{\quadl}
+\drift{1.9}
+\quadrupole{Q6}{\quadl}
+\drift{3.55}
+\quadrupole{Q7}{\quadl}
+\drift{2.1}
+\corrector{KD}{\quadl}
+\drift{2.1}
+\dipole{}{0.4}{0}[r][0.3] % M3
+\savecoordinate{M3}[center]
+\drift{0.4}
+\quadrupole{Q8}{\quadl}
+\drift{3}
+\savecoordinate{BoosterInj}
+
+%title
+\node[mediumlabel, anchor=north, yshift=-1cm] at (L2label)
+{LINAC 2\\{\Large \SI{26}{\MeV}}};
+\node[mediumlabel, anchor=west, xshift=4mm] at (PolQ)
+{\IfLanguageName{ngerman}{Quelle}{Source of} pol.
+ $e^-$};
+
+
+%-----------------------------------
+%LINAC1
+%lattice backwards to set start at M3
+%-----------------------------------
+\goto{M3}
+\setangle{-180}
+\northlabels
+\drift{0.44}
+\quadrupole{Q7}{\quadl}
+\drift{0.2}
+\quadrupole{Q6}{\quadl}
+\drift{0.35}
+\turnlabels
+\dipole{M2}{0.3}{45}
+\drift{1.1}
+\dipole{M1}{0.3}{45}
+\savecoordinate{M1}[center]
+\southlabels
+\drift{0.58}
+\quadrupole{Q5}{\quadl}
+\drift{0.36}
+\quadrupole{Q4}{\quadl}
+\drift{0.58}
+\quadrupole{Q3}{\quadl}
+\drift{0.38}
+\cavity{}{0.67}[0.3] %EKS
+\drift{0.1}
+\dipole{EKS}{0.2}{0}
+\rotate{60}
+\drift{0.15}
+\rotate{-60}
+\dipole{}{0.2}{0}
+\rotate{-60}
+\drift{0.15}
+\rotate{60}
+\dipole{}{0.2}{0}
+\drift{0.07}
+\quadrupole{Q2}{\quadl}
+\drift{0.13}
+\quadrupole{Q1}{\quadl}
+\drift{0.16}
+\savecoordinate{L1label}
+\cavity{}{2.73}
+\drift{0.35}
+\dipole{}{0.35}{0}
+\drift{0.17}
+\drift{1.3}
+\rotate{180}
+\source{}{0.5}
+
+%title
+\node[mediumlabel, xshift=-1cm, anchor=east] at (L1label)
+{LINAC 1\\{\Large \SI{20}{\MeV}}};
+
+
+%-----------------------------
+%LINAC1-Bestrahlungsplatz
+%-----------------------------
+\goto{M1}
+\setangle{90}
+\northlabels
+\drift{0.25}
+\drift{0.37}
+\quadrupole{QT1}{\quadl}
+\drift{0.2}
+\quadrupole{QT2}{\quadl}
+\drift{0.45}
+\savecoordinate{bestrahlung}
+\beamdump{}{0.5}
+%title
+\node[smalllabel, yshift=5mm, anchor=east, text width=3cm] at (bestrahlung)
+{\IfLanguageName{ngerman}{Bestrahlungs\-platz}{irradiation area}};
+
+
+%-----------------------------
+%Booster
+%-----------------------------
+% custom legend entry for combined function magnets
+\addlegendentry{Combined Function}{fill=green!55!black}
+\begin{scope}
+\setelementcolor{dipole}{green!55!black}[green!55!black]
+\goto{BoosterInj}
+\southlabels
+%\marker{Start}[0.5]
+\setlabeldistance{0.5}
+\kicker{INJSEPT}{0.88}
+\savecoordinate{links}
+\drift{0.44725}
+\dipole{M1}{4.0056}{-30}[s][0.6]
+\drift{1.7945}
+\dipole{M2}{4.0056}{-30}[s][0.6]
+\drift{0.35975}
+\kicker{B1}{0.3875}
+\drift{0.3}
+\kicker{K1}{0.3875}
+\drift{0.35975}
+\dipole{M3}{4.0056}{-30}[s][0.6]
+\drift{0.35975}
+\kicker{B2}{0.3875}
+\drift{0.3}
+\kicker{S1}{0.3875}
+\drift{0.35975}
+\dipole{M4}{4.0056}{-30}[s][0.6]
+\drift{0.4295}
+\corrector{VC1}{0.13}
+\drift{0.245}
+\kicker{S2}{0.63}
+\drift{0.36}
+\dipole{M5}{4.0056}{-30}[s][0.6]
+\drift{0.34225}
+\kicker{S3}{1.08}
+\savecoordinate{Booster_extract}[center]
+\drift{0.37225}
+\dipole{M6}{4.0056}{-30}[s][0.6]
+\drift{0.38725}
+\corrector{VC2}{0.13}
+\drift{0.315}
+\kicker{B3}{0.6}
+\savecoordinate{rechts}
+\drift{0.36225}
+\dipole{M7}{4.0056}{-30}[s][0.6]
+\drift{0.49225}
+\corrector{VC3}{0.13}
+\drift{0.295}
+\kicker{K2}{0.45}
+\drift{0.42725}
+\dipole{M8}{4.0056}{-30}[s][0.6]
+\drift{0.86225}
+\kicker{K3}{0.45}
+\drift{0.48225}
+\dipole{M9}{4.0056}{-30}[s][0.6]
+\drift{0.44725}
+\cavity{DORIS}{0.9}
+\drift{0.44725}
+\dipole{M10}{4.0056}{-30}[s][0.6]
+\drift{1.7945}
+\dipole{M11}{4.0056}{-30}[s][0.6]
+\drift{1.7945}
+\dipole{M12}{4.0056}{-30}[s][0.6]
+\drift{0.46725}
+\end{scope}
+
+%title
+\path (links) -- (rechts) node[midway,biggestlabel, text width=6cm] {Booster-
+ Synchrotron\\{\SIrange{0.5}{1.2}{\GeV}}}; %\\{\it\SI{120}{\GeV\per\s}}
+
+
+
+%-----------------------------
+% Transferkanal Booster->ELSA
+%-----------------------------
+\goto{Booster_extract}
+\setangle{-47}
+\northlabels
+\drift{2}
+\corrector{KV1}{0.25}
+\drift{0.16}
+\quadrupole{QA}{0.48}
+\drift{0.16}
+\corrector{KV2}{0.25}
+\turnlabels
+\drift{1.4}
+\corrector{KV3}{0.25}
+\drift{0.16}
+\quadrupole{QB}{0.48}
+\drift{3.67}
+\quadrupole{QC}{0.48}
+\drift{0.16}
+\corrector{}{0.25}
+\drift{1.9}
+\savecoordinate{ELSA_inject}
+
+
+
+%-----------------------------
+% Stretcherring
+%-----------------------------
+\goto{ELSA_inject}
+\setangle{-55}
+\setlabeldistance{0.5}
+\northlabels
+
+% "end" put at beginning to start at injection
+\drift{0.2325}
+\screen{}[0.025] %BPM31
+\drift{0.01665}
+\quadrupole{QD31}{0.4997}
+\drift{0.02115}
+%\marker{IC31}
+\drift{0.28}
+\dipole{M31}{2.875}{15}
+\drift{0.2765}
+\corrector{KV31}{0.13}
+\drift{0.1615}
+\corrector{MSI31}{0.6}
+\drift{0.2745}
+%\marker{IC32}
+\drift{0.01915}
+\quadrupole{QF32}{0.4997}
+\drift{0.01115}
+\screen{}[0.025] %BPM32
+\drift{0.1005}
+\sextupole{SX32}{0.287}
+\drift{0.2069}
+\quadrupole{LQ32}{0.45}[0.2]
+\drift{0.5296}
+\corrector{KV32}{0.13}
+\drift{0.35375}
+\quadrupole{SQ32}{0.45}
+\drift{1.382}
+\quadrupole{TJQ32}{0.5515}[0.2]
+\drift{0.12625}
+
+% usual start
+%\marker{start}[0.5]
+\drift{0.013}
+%\marker{IC01}
+\drift{0.02115}
+\quadrupole{QD1}{0.4997}
+\drift{0.00365}
+\screen{}[0.025] %BPM01
+\drift{0.6285}
+\corrector{KV01}{0.13}
+\drift{1.30675}
+\quadrupole{SQ1}{0.45}
+\drift{1.01375}
+\quadrupole{LQ1}{0.45}[0.2]
+\drift{0.2065}
+\sextupole{SX1}{0.287}
+\drift{0.0825}
+%\marker{IC02}
+\drift{0.05415}
+\quadrupole{QF2}{0.4997}
+\drift{0.00615}
+\screen{}[0.025] %BPM02
+\drift{0.2145}
+\corrector{IJK2}{0.73}
+\drift{0.0595}
+\corrector{KV02}{0.13}
+\drift{0.2962}
+\dipole{M2}{2.875}{15}
+\drift{0.2803}
+%\marker{IC03}
+\drift{0.02115}
+\begin{scope}
+ \rotatelabels{55}[west]
+ \quadrupole{QD3}{0.4997}
+ \drift{0.00865}
+ \screen{}[0.025] %BPM03
+ \drift{0.103}
+ \sextupole{SD3}{0.287}
+ \drift{0.1025}
+ \corrector{KV03}{0.13}
+ \drift{3.011}
+ \corrector{IJK3}{0.73}
+ \drift{0.2195}
+ % \marker{IC04}
+ \drift{0.02115}
+ \quadrupole{QF4}{0.4997}
+ \drift{0.01115}
+ \screen{}[0.025] %BPM04
+ \drift{0.1005}
+ \sextupole{SF4}{0.287}
+ \drift{0.1995}
+ \corrector{KV04}{0.13}
+ \drift{0.7082}
+\end{scope}
+\dipole{M4}{2.875}{15}
+\drift{0.2803}
+%\marker{IC05}
+\drift{0.02115}
+\begin{scope}
+ \rotatelabels{90}[west]
+ \quadrupole{QD5}{0.4997}
+ \drift{0.00365}
+ \screen{}[0.025] %BPM05
+ \drift{0.1545}
+ \corrector{KV05}{0.13}
+ \drift{1.1482}
+\end{scope}
+\dipole{M5}{2.875}{15}
+\drift{0.2803}
+%\marker{IC06}
+\drift{0.02115}
+\begin{scope}
+ \rotatelabels{90}[west]
+ \quadrupole{QF6}{0.4997}
+ \drift{0.00615}
+ \screen{}[0.025] %BPM06
+ \drift{0.1745}
+ \kicker{MSE6}{0.65}
+ \drift{0.139}
+ % \marker{ICMSE6}
+ \drift{0.0185}
+ \corrector{KV06}{0.13}
+ \drift{0.3182}
+\end{scope}
+\dipole{M6}{2.875}{15}
+\drift{0.2803}
+%\marker{IC07}
+\drift{0.02115}
+\quadrupole{QD7}{0.4997}
+\drift{0.00865}
+\screen{}[0.025] %BPM07
+\drift{0.185}
+\kicker{MSE7}{0.9}
+\savecoordinate{ELSA_extract_neu}
+
+
+\drift{0.3427}
+\dipole{M7}{2.875}{15}
+\savecoordinate{sylibeamline}[center]
+
+
+\drift{0.2803}
+%\marker{IC08}
+\drift{0.02115}
+\quadrupole{QF8}{0.4997}
+\drift{0.01115}
+\screen{}[0.025] %BPM08
+\drift{0.971}
+\corrector{KV08}{0.13}
+\drift{0.3242}
+\dipole{M8}{2.875}{15}
+\drift{0.30145}
+\quadrupole{QD9}{0.4997}
+\drift{0.00365}
+\screen{}[0.025] %BPM09
+\drift{0.2727}
+\dipole{M9}{2.875}{15}
+\drift{0.3473}
+\corrector{KV09}{0.13}
+\drift{0.963}
+%\marker{IC10}
+\drift{0.02115}
+\quadrupole{QF10}{0.4997}
+\drift{0.00615}
+\screen{}[0.025] %BPM10
+\drift{0.2702}
+\dipole{M10}{2.875}{15}
+\drift{0.6963}
+\corrector{KV10}{0.13}
+\drift{0.2115}
+\sextupole{SD10}{0.287}
+\drift{0.105}
+\screen{}[0.025] %BPM11
+\drift{0.00665}
+\quadrupole{QD11}{0.4997}
+\drift{0.02115}
+%\marker{IC11}
+\drift{0.2802}
+\dipole{M11}{2.875}{15}
+\drift{0.7103}
+\corrector{KV11}{0.13}
+\drift{0.1975}
+\sextupole{SF11}{0.287}
+\drift{0.1075}
+\screen{}[0.025] %BPM12
+\drift{0.00415}
+\quadrupole{QF12}{0.4997}
+\drift{0.02115}
+%\marker{IC12}
+\drift{0.2802}
+\dipole{M12}{2.875}{15}
+\drift{1.1563}
+\corrector{KV12}{0.13}
+\drift{0.154}
+%\marker{IC13}
+\drift{0.02115}
+\quadrupole{QD13}{0.4997}
+\drift{0.00365}
+\screen{}[0.025] %BPM13
+\drift{0.2727}
+\dipole{M13}{2.875}{15}
+\drift{0.7263}
+\corrector{KV13}{0.13}
+\drift{0.584}
+%\marker{IC14}
+\drift{0.02115}
+\quadrupole{QF14}{0.4997}
+\savecoordinate{rechts}
+
+
+\drift{0.00615}
+\screen{}[0.025] %BPM14
+\drift{3.6265}
+\corrector{KV14}{0.13}
+\drift{0.829}
+%\marker{IC15}
+\drift{0.02115}
+\quadrupole{QD15}{0.4997}
+\drift{0.00865}
+\screen{}[0.025] %BPM15
+\drift{0.2677}
+\dipole{M15}{2.875}{15}
+\drift{1.1483}
+\corrector{KV15}{0.13}
+\drift{0.162}
+%\marker{IC16}
+\drift{0.02115}
+\quadrupole{QF16}{0.4997}
+\drift{0.01115}
+\screen{}[0.025] %BPM16
+\drift{0.1005}
+\sextupole{SX16}{0.287}
+\drift{0.2065}
+\quadrupole{LQ16}{0.45}[0.2]
+\drift{0.3075}
+\cavity{PETRA1}{1.6}
+\drift{0.93725}
+\quadrupole{TJQD16}{0.5515}[0.2]
+\drift{0.12475}
+\screen{}[0.025] %BPM17
+\drift{0.01165}
+\quadrupole{QD17}{0.4997}
+\drift{0.02115}
+%\marker{IC17}
+\drift{0.429}
+\cavity{PETRA2}{1.6}
+\drift{0.311}
+\corrector{KV17}{0.13}
+\drift{1.0665}
+\quadrupole{LQ17}{0.45}[0.2]
+\drift{0.2065}
+\sextupole{SX17}{0.287}
+\drift{0.0825}
+%\marker{IC18}
+\drift{0.05415}
+\quadrupole{QF18}{0.4997}
+\drift{0.00615}
+\screen{}[0.025] %BPM18
+\drift{0.962}
+\corrector{KV18}{0.13}
+\drift{0.3382}
+\dipole{M18}{2.875}{15}
+\drift{0.2803}
+%\marker{IC19}
+\drift{0.02115}
+\begin{scope}
+ \rotatelabels{60}[east]
+ \quadrupole{QD19}{0.4997}
+ \drift{0.00865}
+ \screen{}[0.025] %BPM19
+ \drift{0.103}
+ \sextupole{SD19}{0.287}
+ \drift{0.2105}
+ \corrector{KV19}{0.13}
+ \drift{0.507}
+ \screen{}[0] %FMON
+ \drift{2.943}
+ \sextupole{SF19}{0.287}
+ \drift{0.1075}
+ \screen{}[0.025] %BPM20
+ \drift{0.00415}
+ \quadrupole{QF20}{0.4997}
+ \drift{0.02115}
+ % \marker{IC20}
+ \drift{0.985}
+ \corrector{KV20}{0.13}
+ \drift{0.3252}
+\end{scope}
+\dipole{M20}{2.875}{15}
+\begin{scope}
+ \rotatelabels{90}[east]
+ \drift{0.2803}
+ % \marker{IC21}
+ \drift{0.02115}
+ \quadrupole{QD21}{0.4997}
+ \drift{0.00365}
+ \screen{}[0.025] %BPM21
+ \drift{0.1765}
+ \corrector{KV21}{0.13}
+ \drift{1.126}
+\end{scope}
+\dipole{M21}{2.875}{15}
+\begin{scope}
+ \rotatelabels{90}[east]
+ \drift{0.2805}
+ % \marker{IC22}
+ \drift{0.02115}
+ \quadrupole{QF22}{0.4997}
+ \drift{0.00615}
+ \screen{}[0.025] %BPM22
+ \drift{0.1315}
+ \kicker{MSE22}{0.65}
+ \drift{0.165}
+ % \marker{ICMSE22}
+ \drift{0.0005}
+ \corrector{KV22}{0.13}
+ \drift{0.3535}
+\end{scope}
+\dipole{M22}{2.875}{15}
+\drift{0.28}
+%\marker{IC23}
+\drift{0.02115}
+\quadrupole{QD23}{0.4997}
+\drift{0.00865}
+\screen{}[0.025] %BPM23
+\drift{0.1765}
+\kicker{MSE23}{0.9}
+\savecoordinate{ELSA_extract}
+
+
+\drift{0.351}
+\dipole{M23}{2.875}{15}
+\drift{0.2805}
+%\marker{IC24}
+\drift{0.02115}
+\quadrupole{QF24}{0.4997}
+\drift{0.01115}
+\screen{}[0.025] %BPM24
+\drift{0.886}
+\corrector{KV24}{0.13}
+\drift{0.4095}
+\dipole{M24}{2.875}{15}
+\drift{0.2645}
+\screen{}[0.025] %BPM25
+\drift{0.01165}
+\quadrupole{QD25}{0.4997}
+\savecoordinate{compton}[center]
+
+
+\drift{0.02115}
+%\marker{IC25}
+\drift{0.28}
+\dipole{M25}{2.875}{15}
+\drift{0.6985}
+\corrector{KV25}{0.13}
+\drift{0.612}
+%\marker{IC26}
+\drift{0.02115}
+\quadrupole{QF26}{0.4997}
+\drift{0.00615}
+\screen{}[0.025] %BPM26
+\drift{0.2705}
+\dipole{M26}{2.875}{15}
+\drift{0.729}
+\corrector{KV26}{0.13}
+\drift{0.178}
+\sextupole{SD26}{0.287}
+\drift{0.1055}
+\screen{}[0.025] %BPM27
+\drift{0.00665}
+\quadrupole{QD27}{0.4997}
+\drift{0.02115}
+%\marker{IC27}
+\drift{0.28}
+\dipole{M27}{2.875}{15}
+\drift{0.7025}
+\corrector{KV27}{0.13}
+\drift{0.2055}
+\sextupole{SF27}{0.287}
+\drift{0.1075}
+\screen{}[0.025] %BPM28
+\drift{0.00415}
+\quadrupole{QF28}{0.4997}
+\drift{0.02115}
+%\marker{IC28}
+\drift{0.2805}
+\dipole{M28}{2.875}{15}
+\drift{1.159}
+\corrector{KV28}{0.13}
+\drift{0.151}
+%\marker{IC29}
+\drift{0.02115}
+\quadrupole{QD29}{0.4997}
+\drift{0.00365}
+\screen{}[0.025] %BPM29
+\drift{0.2725}
+\dipole{M29}{2.875}{15}
+\drift{0.3105}
+\corrector{KV29}{0.13}
+\drift{0.0455}
+\corrector{IJK29}{0.73}
+\drift{0.2245}
+%\marker{IC30}
+\drift{0.02115}
+\quadrupole{QF30}{0.4997}
+\savecoordinate{links}
+
+
+\drift{0.00615}
+\screen{}[0.025] %BPM30
+\drift{3.0545}
+\corrector{KV30}{0.13}
+\drift{0.248}
+\corrector{MSI30}{0.9}
+\resetlabeldistance
+
+%title - aligned between M29 and QF14 via \savecoordinate
+\draw[draw=none] (links) -- (rechts) node[midway, biggestlabel]
+{ELSA Stretcherring\\{\SIrange{0.5}{3.2}{\GeV}}}; %\\{\it\SI{6}{\GeV\per\s}}
+
+
+%-----------------------
+% Compton-Polarimeter
+%-----------------------
+\begin{scope}
+ \setlinecolor{drift}{\photonbeam}
+ \goto{compton}
+ \drift{13.7}
+ \savecoordinate{comptonlabel}
+ \beamdump{}{1.6}[0.7]
+ \goto{compton}
+ \rotate{180}
+ \drift{3.9}
+ \beamdump{}{0.25}[0.25]
+\end{scope}
+%title
+\node[smalllabel, anchor=east, text width=4cm] at (comptonlabel)
+{Compton-\\{Polarimeter}};
+
+%------------------------------
+% Syli-Beamline (Streak-Kamera)
+%------------------------------
+\begin{scope}
+ \setlinecolor{drift}{\photonbeam}
+ \goto{sylibeamline}
+ \rotate{-11.5}
+ \drift{12.5}
+ \savecoordinate{sylilabel}
+ \beamdump{}{1.25}[0.5]
+\end{scope}
+% title
+\node[smalllabel, anchor=west, yshift=1cm, text width=4cm] at (sylilabel)
+{\IfLanguageName{ngerman}{Synchrotronlicht}{synchrotron light}\\\IfLanguageName{ngerman}{Diagnoseplatz}{diagnostic area}};
+
+
+%-----------------------
+%Extraktion + CB
+%-----------------------
+\goto{ELSA_extract}
+\southlabels
+\rotate{-8}
+\drift{0.2}
+%----
+%\dipole{M23}{0.9}{1.60428}
+\drift{0.9}
+\rotate{1.60428}
+%----
+\drift{1.08}
+\rotatelabels{90}[west]
+\corrector{SSV1}{0.34}
+\drift{0.1}
+\corrector{SSH1}{0.34}
+\drift{0.36}
+\quadrupole{QF1}{0.4749}
+\drift{0.39}
+\solenoid{}{2}
+\drift{0.38}
+\quadrupole{QD1}{0.4749}
+\drift{0.25}
+\corrector{SSH2}{0.34}
+\drift{0.1}
+\corrector{SSV2}{0.34}
+\drift{0.6}
+\rotatelabels{0}
+\turnlabels
+\dipole{MB1}{1.08}{10.7716}[r][0.6]
+\savecoordinate{MB1}[center]
+\drift{0.41}
+\quadrupole{QN1}{0.3}[0.2]
+\drift{0.93}
+\quadrupole{QN2}{0.3}[0.2]
+\drift{0.33}
+\dipole{MB3}{1.08012}{2.92208}[r][0.6]
+\drift{0.42}
+\corrector{SSH3}{0.34}
+\drift{1.61}
+\quadrupole{QF2}{0.4749}
+\drift{2.218}
+\rotatelabels{0}[west]
+\corrector{SSV3}{0.2}
+\rotatelabels{0}
+\drift{0.242}
+\quadrupole{QD2}{0.4749}
+\drift{1.6515}
+\savecoordinate{CBphotons}
+\begin{labeldistance}{1}
+ \dipole{Tagger}{1.26}{8.99544}[r][1.2]
+ \drift{1.34}
+ \dipole{M5}{1.26}{6.1994}[r][1.2]
+\end{labeldistance}
+\drift{5.7}
+\savecoordinate{CBlabel}
+\drift{5.7}
+\beamdump{}{1}[1]
+
+%Photon-Beamline
+\goto{CBphotons}
+\begin{scope}
+\setlinecolor{drift}{\photonbeam}
+\drift{16}
+\beamdump{\IfLanguageName{ngerman}{Photonenkamera}{photon camera}}{0.4}[0.2]
+\end{scope}
+
+%title
+\node[experimentlabel, anchor=center, yshift=0.6cm] at (CBlabel) {Crystal Barrel (E1)};
+\node[biglabel, yshift=3.8cm,xshift=-3cm, text width=7cm] at (CBlabel)
+{\IfLanguageName{ngerman}{Hadronenphysik- Experimente}{hadron physics experiments}};
+
+
+%-------------------
+%BGO-OD
+%-------------------
+ \goto{MB1}
+ \rotate{-10.8-11}
+ \southlabels
+ \drift{1.03}
+ \dipole{MB2}{1.08166}{-11}[r][0.6]
+ \drift{1.06}
+ \quadrupole{QF2}{0.45}
+ \drift{1.32}
+ \rotatelabels{90}[west]
+ \corrector{SSH3}{0.34}
+ \drift{0.1}
+ \corrector{SSV3}{0.34}
+ \rotatelabels{0}
+ \drift{1.76}
+ \quadrupole{QD2}{0.45}
+ \drift{0.95}
+ \begin{scope}
+ \setlabeldistance{0.7}
+ \dipole{Tagger}{1.34}{0}[r][1]
+ \end{scope}
+
+ % photon beamline
+ \begin{scope}
+ \setlinecolor{drift}{\photonbeam}
+ \drift{6.95}
+ \dipole{}{1.61}{0}[r][3.64] %spektrometer
+ \savecoordinate{BGOlabel}
+ \drift{3.13}
+ \beamdump{\IfLanguageName{ngerman}{Photonenkamera}{photon camera}}{0.4}[0.2]
+ \end{scope}
+
+ % title
+ \node[experimentlabel, anchor=center, xshift=1cm,yshift=-0.4cm] at (BGOlabel) {BGO-OD (E2)};
+
+
+%-----------------------------
+%neue externe Strahlführung
+%-----------------------------
+\goto{ELSA_extract_neu}
+\southlabels
+\rotate{-5.44}
+\drift{2.55}
+\begin{scope}
+\setlabelfont{\footnotesize}
+\rotatelabels{-90}[west]
+\corrector{SSH1}{0.34}[0.29]
+\end{scope}
+\drift{0.225}
+\begin{scope}
+\setlabelfont{\footnotesize}
+\rotatelabels{-90}[west]
+\corrector{SSV1}{0.2}[0.162]
+\end{scope}
+\drift{0.26856}
+\quadrupole{QF1}{0.5}[0.266]
+\drift{0.1435}
+\begin{scope}
+\setlabelfont{\scriptsize}
+\northlabels
+\setlabeldistance{0.2}
+\screen{CS1}[0.2]
+\end{scope}
+\drift{5.3035}
+\begin{scope}
+\setlabelfont{\footnotesize}
+\northlabels
+\rotatelabels{-90}[east]
+\corrector{SSH2}{0.2}[0.22]
+\end{scope}
+\drift{0.16}
+\begin{scope}
+\setlabelfont{\footnotesize}
+\northlabels
+\rotatelabels{-90}[east]
+\corrector{SSV2}{0.2}[0.175]
+\end{scope}
+\drift{0.16}
+\quadrupole{QD2}{0.4997}[0.61]
+\drift{0.11309}
+\begin{scope}
+\setlabelfont{\scriptsize}
+\northlabels
+\screen{CS2}[0.2]
+\end{scope}
+\drift{0.8032}
+\begin{labeldistance}{1.2}
+ \dipole{MB}{1.50274}{-12}[r][2]
+\end{labeldistance}
+\drift{0.41180}
+\begin{scope}
+\setlabelfont{\scriptsize}
+\northlabels
+\screen{CS3}[0.2]
+\end{scope}
+\drift{0.50289}
+\quadrupole{QF3}{0.4997}[0.61]
+\drift{0.22983}
+\begin{scope}
+\setlabelfont{\footnotesize}
+\northlabels
+\rotatelabels{-90}[east]
+\corrector{SSH3}{0.2}[0.22]
+\drift{0.31732}
+\end{scope}
+\begin{scope}
+\setlabelfont{\footnotesize}
+\northlabels
+\rotatelabels{-90}[east]
+\corrector{SSV3}{0.2}[0.175]
+\end{scope}
+\drift{0.74414}
+\begin{scope}
+\setlabelfont{\scriptsize}
+\northlabels
+\cavity{IR}{0.130}[0.168]
+\end{scope}
+\drift{0.34731}
+\quadrupole{QD4}{0.4997}[0.61]
+\drift{0.113094}
+\begin{scope}
+\setlabelfont{\scriptsize}
+\northlabels
+\screen{CS4}[0.2]
+\end{scope}
+\drift{0.653}
+\savecoordinate{NEWSFlabel}
+\setlinecolor{drift}{dotted}
+\drift{6.45}
+\beamdump{}{0.5}
+ %title
+ \node[experimentlabel, fill=none,anchor=north, yshift=-4mm, text width=7cm] at (NEWSFlabel)
+ {\IfLanguageName{ngerman}{Messplatz für}{Area
+ for}\\\IfLanguageName{ngerman}{Detektortests}{Detector
+ Tests} (E3)};
+
+%---------------------------
+% legend shows all element types occuring before this commmand
+\legend{(67,46)}[3]
+\end{lattice}
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-palattice/example1_linear.tex b/graphics/pgf/contrib/tikz-palattice/example1_linear.tex
new file mode 100644
index 0000000000..8dfdaafba0
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/example1_linear.tex
@@ -0,0 +1,53 @@
+%% example1_linear.tex
+%% Copyright 2015 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 5 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex and elsa.tex
+
+\documentclass[]{standalone}
+\usepackage[ngerman]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{tikz-palattice}
+
+
+\begin{document}
+
+\begin{lattice}
+ \source{MySource}{0.4}
+ \drift{0.167}
+ \quadrupole{Q1}{0.4}
+ \drift{0.1}
+ \kicker{VC1}{0.1}
+ \drift{0.29}
+ \drift{0.2}
+ \screen{S1}
+ \drift{0.2}
+ \quadrupole{Q2}{0.4}
+ \drift{0.3}
+ \marker{marker 1}[1.2]
+ \drift{1.16}[Space left!]
+ \marker{marker 2}[1.2]
+ \drift{0.15}
+ \cavity{Acceleration?}{2}
+ \drift{0.63}
+ \dipole{M1}{0.5}{90}[r]
+ \drift{0.3}
+ \quadrupole{Q42}{0.4}
+ \drift{0.3}
+\end{lattice}
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-palattice/example2_circular.tex b/graphics/pgf/contrib/tikz-palattice/example2_circular.tex
new file mode 100644
index 0000000000..3bf446797f
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/example2_circular.tex
@@ -0,0 +1,60 @@
+%% example2_circular.tex
+%% Copyright 2015 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 5 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex and elsa.tex
+
+\documentclass[]{standalone}
+\usepackage[ngerman]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{tikz-palattice}
+
+
+\begin{document}
+
+\begin{lattice}
+ \setlinecolor{drift}{red}
+
+ \drift{1}
+ \dipole{M1}{2}{45}
+ \drift{1}
+ \dipole{M2}{2}{45}
+ \drift{1}
+ \setelementcolor{dipole}{green!50!black} % change color of all following dipoles
+ \dipole{M3}{2}{45}
+ \drift{1}
+ \dipole{M4}{2}{45}
+ \drift{1}
+ \begin{scope} % color change only applied within scope
+ \setelementcolor{dipole}{red}[red] % optional 3rd argument sets top color -> no (visible) color gradient
+ \dipole{M5}{2}{45}
+ \end{scope}
+ \drift{1}
+ \dipole{M6}{2}{45}
+ \drift{1}
+ \resetelementcolor{dipole} % reset color of following dipoles to default
+ \dipole{M7}{2}{45}[r] % rectangle dipole type
+ \drift{1}
+ \dipole{M8}{2}{45}[br] % bend rectangle dipole type
+
+ \drawrule{(1,-0.5)}
+\end{lattice}
+
+\end{document}
+
+
+
diff --git a/graphics/pgf/contrib/tikz-palattice/example3_coordinates.tex b/graphics/pgf/contrib/tikz-palattice/example3_coordinates.tex
new file mode 100644
index 0000000000..228e11b958
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/example3_coordinates.tex
@@ -0,0 +1,242 @@
+%% example3_coordinates.tex
+%% Copyright 2017 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 5 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex and elsa.tex
+
+\documentclass[a4paper]{scrartcl}
+\usepackage[english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{subcaption}
+\usepackage{verbatim}
+\usepackage{tikz-palattice}
+
+
+% compile twice to connect lattices!
+
+
+\title{Two more lattices}
+\subtitle{scaling lattices and accessing coordinates}
+\date{}
+
+\begin{document}
+\maketitle
+
+\begin{figure}[h]
+\centering
+\begin{subfigure}{.45\textwidth}
+ \centering
+ % this is the ring from example 2, but plotted smaller (30%).
+ % the element sizes (in meter) are the same - as the rule indicates.
+ \begin{lattice}[0.3]
+ \setlabelfont{\tiny}
+ \begin{labeldistance}{0.3}
+ \drift{1}
+ \dipole{M1}{2}{45}
+ \drift{1}
+ \turnlabels
+ \dipole{M2}{2}{45}
+ \turnlabels
+ \drift{1}
+ \dipole{M3}{2}{45}
+ \drift{1}
+ \savecoordinate{myCoord1}[center]
+ \dipole{M4}{2}{45}
+ \drift{1}
+ \dipole{M5}{2}{45}
+ \drift{1}
+ \dipole{M6}{2}{45}
+ \drift{1}
+ \savecoordinate{myCoord2}[center]
+ \dipole{M7}{2}{45}
+ \drift{1}
+ \dipole{M8}{2}{45}
+ \drawrule{(-2.5,-1)}[2]
+ \end{labeldistance}
+ % custom drawing using saved coordinates (to center of drifts)
+ \draw[->, thick] (myCoord2) -- (myCoord1) node[midway,fill=white,rotate=20] {signal};
+ \end{lattice}
+\end{subfigure}
+%
+%
+%
+\begin{subfigure}{.45\textwidth}
+ \centering
+ \begin{lattice}
+ \setangle{70}
+ \northlabels %labels to the left
+ \drift{0.5}
+ \quadrupole{QF1}{0.3}
+ \drift{0.2}
+ \kicker{}{0.1}
+ \drift{0.07}
+ \quadrupole{QD2}{0.3}
+ \drift{0.4}
+ \setelementcolor{kicker}{cyan}
+ \kicker{Septum}{0.5}
+ \resetelementcolor{kicker}
+ \savecoordinate{Septum}[center] %save to connect other beamline
+ \drift{0.8}
+ \kicker{}{0.1}
+ \drift{0.37}
+ \quadrupole{QD3}{0.2}
+ \drift{0.17}
+ \kicker{}{0.1}
+ \drift{0.1}
+ \sextupole{SF1}{0.2}
+ \drift{0.27}
+ \dipole{MB1}{0.2}{30}[s][0.4]
+ \drift{0.2}
+
+ % now go back to saved coordinate and continue with another beamline
+ \goto{Septum}
+ \rotate{-20}
+ \southlabels %labels to the right
+ \drift{0.6}
+ \kicker{SS1}{0.2}
+ \drift{0.2}
+ \kicker{SSH1}{0.2}
+ \drift{0.3}
+ \dipole{M1}{0.2}{-30}[r][0.4]
+ \begin{fade} %fade out this part
+ \drift{0.2}
+ \dipole{M2}{0.2}{50}[r][0.4]
+ \drift{0.2}
+ \dipole{M3}{0.2}{-20}[r][0.4]
+ \drift{0.7}
+ \end{fade}
+
+ \drawrule{(-0.75,-0.2)}[0.8]
+ \end{lattice}
+\end{subfigure}
+\caption{A figure with two lattices}
+\label{fig:lattices}
+\end{figure}
+
+
+
+
+
+
+\clearpage
+\begin{figure}
+\centering
+\begin{subfigure}[b]{.45\textwidth}
+ \centering
+ \begin{lattice}
+ \rotate{90}
+ \northlabels %labels to the left
+ \drift{0.5}
+ \quadrupole{QF1}{0.3}
+ \drift{0.2}
+ \kicker{}{0.1}
+ \drift{0.07}
+ \quadrupole{QD2}{0.3}
+ \drift{0.4}
+ \setelementcolor{kicker}{cyan}
+ \kicker{Septum}{0.5}
+ \resetelementcolor{kicker}
+ \savecoordinate{Septum}[center] %save to connect other beamline
+ \drift{0.8}
+ \kicker{}{0.1}
+ \drift{0.37}
+ \quadrupole{QD3}{0.2}
+ \drift{0.17}
+ \kicker{}{0.1}
+ \drift{0.1}
+ \sextupole{SF1}{0.2}
+ \drift{0.27}
+ \dipole{MB1}{0.2}{30}[s][0.4]
+ \drift{0.2}
+
+ % now go back to saved coordinate and continue with another beamline
+ \goto{Septum}
+ \rotate{-20}
+ \southlabels %labels to the right
+ \drift{0.6}
+ \kicker{SS1}{0.2}
+ \drift{0.2}
+ \kicker{SSH1}{0.2}
+ \drift{0.3}
+ \dipole{M1}{0.2}{-30}[r][0.4]
+ \begin{fade} %fade out this part
+ \drift{0.2}
+ \dipole{M2}{0.2}{50}[r][0.4]
+ \drift{0.2}
+ \dipole{M3}{0.2}{-20}[r][0.4]
+ \drift{0.7}
+ \end{fade}
+ \legend{(0,6.5)}
+ \end{lattice}
+ \caption{one lattice environment and goto}
+\end{subfigure}
+%
+\begin{subfigure}[b]{.45\textwidth}
+\centering
+ \begin{lattice}
+ \rotate{90}
+ \northlabels %labels to the left
+ \drift{0.5}
+ \quadrupole{QF1}{0.3}
+ \drift{0.2}
+ \kicker{}{0.1}
+ \drift{0.07}
+ \quadrupole{QD2}{0.3}
+ \drift{0.4}
+ \setelementcolor{kicker}{cyan}
+ \kicker{Septum}{0.5}
+ \resetelementcolor{kicker}
+ \savecoordinate{Septum}[center] %save to connect other beamline
+ \drift{0.8}
+ \kicker{}{0.1}
+ \drift{0.37}
+ \quadrupole{QD3}{0.2}
+ \drift{0.17}
+ \kicker{}{0.1}
+ \drift{0.1}
+ \sextupole{SF1}{0.2}
+ \drift{0.27}
+ \dipole{MB1}{0.2}{30}[s][0.4]
+ \drift{0.2}
+ \end{lattice}
+ %
+ %now draw second lattice and connect them using the saved coordinate
+ \begin{lattice}[1][overlay]
+ \start{(Septum)}
+ \rotate{70}
+ \drift{0.6}
+ \kicker{SS1}{0.2}
+ \drift{0.2}
+ \kicker{SSH1}{0.2}
+ \drift{0.3}
+ \dipole{M1}{0.2}{-30}[r][0.4]
+ \begin{fade} %fade out this part
+ \drift{0.2}
+ \dipole{M2}{0.2}{50}[r][0.4]
+ \drift{0.2}
+ \dipole{M3}{0.2}{-20}[r][0.4]
+ \drift{0.7}
+ \end{fade}
+ \legend{(-1,6.5)}
+ \end{lattice}
+ \caption{two lattice environments and start}
+\end{subfigure}
+\caption{Two ways to connect lattices}
+\label{fig:twoways}
+\end{figure}
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-palattice/example4_labels.tex b/graphics/pgf/contrib/tikz-palattice/example4_labels.tex
new file mode 100644
index 0000000000..bfd312ba24
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/example4_labels.tex
@@ -0,0 +1,308 @@
+%% example4_labels.tex
+%% Copyright 2015 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 5 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex and elsa.tex
+
+\documentclass[]{standalone}
+\usepackage[ngerman]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{tikz-palattice}
+
+
+\begin{document}
+\begin{lattice}[0.5]
+\drawrule{(-9,-11)}[5][3][0.2]
+
+\northlabels % labels "inside" ring
+\setlabeldistance{0.5}
+\rotate{-35}
+\marker{start}[0.5]
+
+\drift{0.03415}
+\quadrupole{QD1}{0.4997}
+\drift{0.19515}
+\kicker{KV01}{0.1}
+\drift{1.79875}
+\quadrupole{SQ1}{0.45}[0.2]
+\drift{1.01375}
+\quadrupole{LQ1}{0.45}[0.2]
+\drift{0.2065}
+\sextupole{SX1}{0.287}
+\drift{0.13665}
+\quadrupole{QF2}{0.4997}
+\drift{1.05365}
+\kicker{KV02}{0.1}
+\drift{0.3077}
+\dipole{M2}{2.875}{15}
+\drift{0.30145}
+\quadrupole{QD3}{0.4997}
+\drift{0.13665}
+\sextupole{SD3}{0.287}
+\drift{0.4305}
+\kicker{KV03}{0.1}
+\drift{1.84183}
+\drift{1.84183}
+
+% labels rotated (with manually set anchor)
+\rotatelabels{65}[west]
+\quadrupole{QF4}{0.4997}
+\drift{0.13665}
+\sextupole{SF4}{0.287}
+\drift{0.214}
+\kicker{KV04}{0.1}
+\drift{0.7237}
+\rotatelabels{0}
+
+\dipole{M4}{2.875}{15}
+\drift{0.30145}
+\quadrupole{QD5}{0.4997}
+\drift{0.09715}
+
+% labels with changed fontsize
+\setlabelfont{\tiny}
+\kicker{KV05}{0.1}
+\setlabelfont{\normalsize}
+
+\drift{1.2642}
+\dipole{M5}{2.875}{15}
+\drift{0.30145}
+\quadrupole{QF6}{0.4997}
+\drift{0.94465}
+\kicker{KV06}{0.1}
+\drift{0.4167}
+\dipole{M6}{2.875}{15}
+\drift{0.30145}
+
+%labels rotated (with manually set anchor) within scope (forget changes after scope)
+\begin{scope}
+\rotatelabels{-65}[east]
+\quadrupole{QD7}{0.4997}
+\drift{0.19415}
+\kicker{KV07}{0.1}
+\end{scope}
+
+
+\drift{1.1672}
+\dipole{M7}{2.875}{15}
+\drift{0.30145}
+\quadrupole{QF8}{0.4997}
+\drift{1.02365}
+\kicker{KV08}{0.1}
+\drift{0.3377}
+\dipole{M8}{2.875}{15}
+\drift{0.30145}
+\quadrupole{QD9}{0.4997}
+\drift{0.30135}
+\dipole{M9}{2.875}{15}
+\drift{0.3208}
+\kicker{KV09}{0.1}
+\drift{1.04065}
+\quadrupole{QF10}{0.4997}
+\drift{0.30135}
+\dipole{M10}{2.875}{15}
+\drift{0.7203}
+\kicker{KV10}{0.1}
+\drift{0.2175}
+\sextupole{SD10}{0.287}
+\drift{0.13665}
+\quadrupole{QD11}{0.4997}
+\drift{0.30135}
+\dipole{M11}{2.875}{15}
+\drift{0.7208}
+\kicker{KV11}{0.1}
+\drift{0.217}
+\sextupole{SF11}{0.287}
+\drift{0.13665}
+\quadrupole{QF12}{0.4997}
+\drift{0.30135}
+\dipole{M12}{2.875}{15}
+\drift{1.1743}
+\kicker{KV12}{0.1}
+\drift{0.18715}
+\quadrupole{QD13}{0.4997}
+\drift{0.30135}
+\dipole{M13}{2.875}{15}
+\drift{0.7398}
+\kicker{KV13}{0.1}
+\drift{0.62165}
+\quadrupole{QF14}{0.4997}
+\savecoordinate{rechts}
+\drift{1.86133}
+\drift{1.86133}
+\kicker{KV14}{0.1}
+\drift{0.81515}
+\quadrupole{QD15}{0.4997}
+\drift{0.30135}
+\dipole{M15}{2.875}{15}
+\drift{0.9368}
+\kicker{KV15}{0.1}
+\drift{0.42465}
+\quadrupole{QF16}{0.4997}
+\drift{0.13665}
+\sextupole{SX16}{0.287}
+\drift{0.2065}
+\quadrupole{LQ16}{0.45}[0.2]
+\drift{0.3075}
+\cavity{PETRA1}{1.6}
+\drift{0.93725}
+\quadrupole{TJQD16}{0.5515}[0.2]
+\drift{0.1614}
+
+% turn labels to other side and back
+\turnlabels
+\quadrupole{QD17}{0.4997}
+\turnlabels
+
+\drift{0.10615}
+\kicker{KV17}{0.1}
+\drift{0.244}
+\cavity{PETRA2}{1.6}
+\drift{1.43175}
+\drift{0.07575}
+\quadrupole{LQ17}{0.45}[0.2]
+\drift{0.2065}
+\sextupole{SX17}{0.287}
+\drift{0.13665}
+\quadrupole{QF18}{0.4997}
+\drift{0.41665}
+\kicker{KV18}{0.1}
+\drift{0.9447}
+\dipole{M18}{2.875}{15}
+\drift{0.30145}
+
+%labels rotated (with manually set anchor) within scope (forget changes after scope)
+\begin{scope}
+\rotatelabels{65}[east]
+\quadrupole{QD19}{0.4997}
+\drift{0.13665}
+\sextupole{SD19}{0.287}
+\drift{0.1965}
+\kicker{KV19}{0.1}
+\end{scope}
+
+\drift{1.747}
+\drift{1.747}
+\sextupole{SF19}{0.287}
+\drift{0.13665}
+
+% turn labels to other side within scope (no second \turnlabels needed)
+\begin{scope}
+\turnlabels
+\quadrupole{QF20}{0.4997}
+\end{scope}
+
+\drift{0.22565}
+\kicker{KV20}{0.1}
+
+\drift{1.1357}
+\dipole{M20}{2.875}{15}
+\drift{0.30145}
+
+%labels in other distance to elements
+\begin{labeldistance}{0.8}
+ \quadrupole{QD21}{0.4997}
+\end{labeldistance} %back to previous label distance (same as \setlabeldistance within scope)
+
+\drift{0.21015}
+\kicker{KV21}{0.1}
+\drift{1.151}
+\dipole{M21}{2.875}{15}
+\drift{0.30165}
+\quadrupole{QF22}{0.4997}
+\drift{0.99865}
+\kicker{KV22}{0.1}
+\drift{0.363}
+\dipole{M22}{2.875}{15}
+\drift{0.30115}
+\quadrupole{QD23}{0.4997}
+\drift{1.46115}
+\dipole{M23}{2.875}{15}
+\drift{0.30165}
+\quadrupole{QF24}{0.4997}
+\drift{0.99265}
+\kicker{KV24}{0.1}
+\drift{0.369}
+\dipole{M24}{2.875}{15}
+\drift{0.30115}
+\quadrupole{QD25}{0.4997}
+\drift{0.30115}
+\dipole{M25}{2.875}{15}
+\drift{0.716}
+\kicker{KV25}{0.1}
+\drift{0.64565}
+\quadrupole{QF26}{0.4997}
+\drift{0.30165}
+\dipole{M26}{2.875}{15}
+\drift{0.723}
+\kicker{KV26}{0.1}
+\drift{0.214}
+\sextupole{SD26}{0.287}
+\drift{0.13715}
+\quadrupole{QD27}{0.4997}
+\drift{0.30115}
+\dipole{M27}{2.875}{15}
+\drift{0.728}
+\kicker{KV27}{0.1}
+\drift{0.21}
+\sextupole{SF27}{0.287}
+\drift{0.13665}
+\quadrupole{QF28}{0.4997}
+\drift{0.30165}
+\dipole{M28}{2.875}{15}
+\drift{1.168}
+\kicker{KV28}{0.1}
+\drift{0.19315}
+\quadrupole{QD29}{0.4997}
+\drift{0.30115}
+\dipole{M29}{2.875}{15}
+\savecoordinate{links}
+\drift{0.318}
+\kicker{KV29}{0.1}
+\drift{1.04365}
+\quadrupole{QF30}{0.4997}
+\drift{1.56882}
+\drift{1.56882}
+\kicker{KV30}{0.1}
+\drift{1.40015}
+\quadrupole{QD31}{0.4997}
+\drift{0.30115}
+\dipole{M31}{2.875}{15}
+\drift{0.307}
+\kicker{KV31}{0.1}
+\drift{1.05465}
+\quadrupole{QF32}{0.4997}
+\drift{0.13665}
+\sextupole{SX32}{0.287}
+\drift{0.2069}
+\quadrupole{LQ32}{0.45}[0.2]
+\drift{0.5031}
+\kicker{KV32}{0.1}
+\drift{0.41025}
+\quadrupole{SQ32}{0.45}
+\drift{1.382}
+\quadrupole{TJQ32}{0.5515}[0.2]
+\drift{0.12625}
+
+% legend shows all element types occuring before this commmand
+\legend{(35,38)}[2]
+
+%title - aligned between M29 and QF14 via \savecoordinate
+\draw[draw=none] (links) -- (rechts) node[midway, font=\bfseries\Huge,scale=2, align=center]
+{ELSA Stretcherring\\{\SIrange[range-units=single,detect-weight=true]{0.5}{3.2}{\GeV}}};
+\end{lattice}
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-palattice/example5_legend.tex b/graphics/pgf/contrib/tikz-palattice/example5_legend.tex
new file mode 100644
index 0000000000..1f23d65662
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/example5_legend.tex
@@ -0,0 +1,112 @@
+%% example5_legend.tex
+%% Copyright 2017 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 6 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex example5_legend.tex and elsa.tex
+
+\documentclass[]{standalone}
+\usepackage[english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage{tikz-palattice}
+
+
+
+
+\begin{document}
+
+\begin{lattice}
+ \rotate{-90}
+ \drift{0.167}
+ \quadrupole{Q1}{0.4}
+ \drift{0.1}
+ \kicker{C1}{0.1}
+ \drift{0.29}
+ \drift{0.2}
+ \screen{S1}
+ \drift{0.2}
+ \quadrupole{Q2}{0.4}
+ \drift{0.1}
+ \kicker{C2}{0.1}
+ \drift{0.2}
+ \setlegendtext{quadrupole}{argh}
+ \addlegendentry{Vthe Quad}{}
+ \addlegendentry{Vein sextU}{cyan, bottom color=violet, top color=white}
+ \addlegendentry{VCombined Function}{fill=green!40!black}
+
+ \completelegend{(0.8,0)}
+\end{lattice}
+
+
+\end{document}
+
+
+
+
+
+
+ % \global\let\legprevi\legindex%
+ % \pgfmathsetmacro{\legindex}{\legindex+1} \global\let\legindex\pgfmathresult%
+
+
+ % \def\q{{1.2,1.5,3.1,0}}
+ % \draw (-0.5,0) -- (-0.5,-{\q[0]});
+ % \draw (-0.6,0) -- (-0.6,-{\q[1]});
+ % \draw (-0.7,0) -- (-0.7,-{\q[2]});
+
+ % \pgfkeyssetvalue{/pal/legend/dipole}{tolle Fahrt}
+ % \pgfkeyssetvalue{/pal/legend/quadrupole}{tolle Wurst}
+ % \pgfkeyssetvalue{/pal/legend/quadrupole/.style}{fill=yellow}
+ % \node[draw] at (2,-4) {\pgfkeysvalueof{/pal/legend/dipole}};
+ % \node[draw] at (2,-5) {\pgfkeysvalueof{/pal/legend/quadrupole}};
+
+% \tikzset{
+% /pal/List/.initial = {erstens},
+% /pal/List/.append = {,roms},
+% }
+% \edef\mylist{\pgfkeysvalueof{/pal/List}}
+
+% \node[align=center] at (2,-4) {%
+% \foreach \txt in \mylist {\txt, }
+% };
+
+% \pgfkeys{
+% /tikz/.cd,
+% execute style/.style = {#1},
+% execute macro/.style = {execute style/.expand once=#1},
+% /test/hallo/.store in = \hallo
+% }
+% \pgfkeys{/test/.cd, hallo = {red,font=\bf,draw}}
+% \node[execute macro=\hallo] at (2,-4) {Törö!};
+
+
+
+% \matrix [matrix, draw, ampersand replacement=\&, matrix anchor=north west, anchor=west,column sep=2mm] (legend) at (1,-2)
+% {
+ % \draw[/legimg/quadrupole] (0,-0.15) rectangle (0.5,0.15); \& \node {\pgfkeysvalueof{/legtxt/quadrupole}}; \\
+ % \draw[/legimg/sextupole] (0,-0.15) rectangle (0.5,0.15); \& \node {\pgfkeysvalueof{/legtxt/sextupole}}; \\
+%};
+
+ % \pgfmathsetmacro{\legprevi}{0}
+ % \pgfmathsetmacro{\legindex}{1}
+ % \node[draw, anchor=north west] at (1,-2) {
+ % \begin{tikzpicture}[start chain=going below,node distance=2mm]
+ % \foreach \ele in \mylist {%
+ % \node[on chain, /legimg/\ele, draw,minimum width=5mm, minimum height=3mm] (n) {};%
+ % \node[anchor=west,xshift=2mm] at (n.east) {\pgfkeysvalueof{/legtxt/\ele}};%
+ % }
+ % \end{tikzpicture}
+ %; \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-palattice/tikz-palattice.sty b/graphics/pgf/contrib/tikz-palattice/tikz-palattice.sty
new file mode 100644
index 0000000000..242c0cd85e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/tikz-palattice.sty
@@ -0,0 +1,713 @@
+%% tikz-palattice.sty
+%% Copyright 2017 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 5 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex and elsa.tex
+
+\ProvidesPackage{tikz-palattice}[2017/03/09 v2.3]
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+\RequirePackage{siunitx}
+\RequirePackage{xargs}
+\RequirePackage{etoolbox}
+\RequirePackage{iflang}
+\usetikzlibrary{calc,positioning,fit,chains}
+\usetikzlibrary{scopes}
+\pgfdeclarelayer{background}
+\pgfsetlayers{background,main}
+
+
+
+
+%---lattice environment---
+\newenvironmentx{lattice}[2][1=1, 2=]{%
+%begin
+\tikzpicture[node distance=0mm, remember picture, #2]
+\newdimen\labeldist
+\newdimen\savelabeldist
+\newdimen\corners;
+\newdimen\elementheight;
+\newdimen\elementwidth;
+\newdimen\markerlen;
+\pgfmathsetmacro{\scal}{#1*0.1};
+\def\labelfont{\normalsize};
+\def\labelcolor{black};
+\def\labelang{-90};
+\def\marklabelang{+90};
+\def\labelrot{0};
+\providetoggle{userlabelanchor}
+\settoggle{userlabelanchor}{false}
+\pgfmathsetlength{\labeldist}{\scal*20cm*0.35};
+\pgfmathsetlength{\savelabeldist}{\scal*20cm*0.35};
+\pgfmathtruncatemacro{\i}{0};
+\pgfmathtruncatemacro{\j}{0};
+\global\def\angle{0}
+\node (nodeeast0) [start] at (0,0) {};
+\coordinate (east\j) at (nodeeast\j.center); %\declarecoords ("east" only
+\global\providetoggle{dip} \global\settoggle{dip}{false}
+\global\providetoggle{quad} \global\settoggle{quad}{false}
+\global\providetoggle{sext} \global\settoggle{sext}{false}
+\global\providetoggle{kick} \global\settoggle{kick}{false}
+\global\providetoggle{correct} \global\settoggle{correct}{false}
+\global\providetoggle{sol} \global\settoggle{sol}{false}
+\global\providetoggle{cav} \global\settoggle{cav}{false}
+\global\providetoggle{sourc} \global\settoggle{sourc}{false}
+\global\providetoggle{scree} \global\settoggle{scree}{false}
+\global\providetoggle{valv} \global\settoggle{valv}{false}
+% custom legend
+\pgfkeys{/pal/customlegendkeys/.initial = {nix}}
+\def\emptycustomlegendkeys{nix}
+}{%
+%end
+\endtikzpicture
+}
+
+
+
+%---general settings---
+\newcommand{\rotate}[1]{\pgfmathparse{\angle+#1} \global\let\angle\pgfmathresult}
+\newcommand{\setangle}[1]{\pgfmathparse{#1} \global\let\angle\pgfmathresult}
+\newcommand{\start}[1]{%
+ \tikzset{x=2cm,y=2cm}
+ \node (nodeeast0) [start] at #1 {};
+ \coordinate (east\j) at (nodeeast\j.center);
+ \tikzset{x=1cm,y=1cm}
+}
+
+\newcommandx{\savecoordinate}[2][2=east]{%
+\global\csedef{angle#1}{\angle}
+\coordinate (#1) at (#2\i);
+}
+
+\newcommand{\goto}[1]{%
+\coordinate (east\j) at (#1);
+%\node[fill=yellow] at (Septum) {\csuse{angle#1}};
+\pgfmathparse{\csuse{angle#1}} \global\let\angle\pgfmathresult
+%\expandafter\global\csname angle#1\endcsname{\angle}
+}
+
+
+
+%---color settings---
+\newcommandx{\setelementcolor}[3][3=white]{%
+\tikzset{#1/.append style={bottom color=#2, top color=#3, fadeElement}}}
+\newcommand{\resetelementcolor}[1]{\tikzset{#1/.style={default_#1}}}
+\newcommand{\setlinecolor}[2]{\tikzset{#1/.append style={#2, faded}}}
+\newcommand{\resetlinecolor}[1]{\tikzset{#1/.style={default_#1}}}
+
+\newenvironmentx{fade}[1][1=0.25]{%
+\tikzset{faded/.style={opacity=#1, color=gray}}
+\tikzset{fadeElement/.style={faded, color=gray,bottom color=gray,top color=white}}
+}{%
+\tikzset{faded/.style={opacity=1.0}} % color not set
+\tikzset{fadeElement/.style={faded}}
+}
+
+
+%---label settings---
+\newenvironment{labeldistance}[1]{%
+ \pgfmathsetlength{\savelabeldist}{\labeldist}
+ \pgfmathsetlength{\labeldist}{\scal*20cm*#1};
+}{%
+ \pgfmathsetlength{\labeldist}{\savelabeldist};
+}
+
+\newcommand{\setlabeldistance}[1]{%
+\pgfmathsetlength{\savelabeldist}{\labeldist}
+\pgfmathsetlength{\labeldist}{\scal*20cm*#1};}
+\newcommand{\resetlabeldistance}{\pgfmathsetlength{\labeldist}{\savelabeldist};}
+\newcommand{\setlabelfont}[1]{\def\labelfont{#1}}
+\newcommand{\setlabelcolor}[1]{\def\labelcolor{#1}}
+
+\newcommand{\turnlabels}{%
+\ifthenelse{\labelang = -90}{%
+\def\labelang{+90} \def\marklabelang{-90}}{%
+\def\labelang{-90} \def\marklabelang{+90}}}
+
+\newcommand{\southlabels}{\def\labelang{-90} \def\marklabelang{+90}}
+\newcommand{\northlabels}{\def\labelang{+90} \def\marklabelang{-90}}
+
+\newcommandx{\rotatelabels}[2][2=notset]{%
+ \def\labelrot{#1}
+ \ifthenelse{\equal{#2}{notset}}{%
+ \settoggle{userlabelanchor}{false}
+ }{%
+ \settoggle{userlabelanchor}{true}
+ \def\labelanchor{#2}}
+}
+
+
+
+% rule (maßstab)
+\newcommandx{\drawrule}[4][2=1, 3=1, 4=0.06]{%
+ \coordinate (rule0) at ($(0,0)!\scal*20!#1$);
+ \tikzset{rule/.append style={line width=20pt*#4*10*\scal}}
+ \draw[rule] (rule0) --++(#2*20cm*\scal,0) coordinate (rule1) --++(0,#4*20cm*\scal)
+ --++(-#2*20cm*\scal,0) --++(0,-#4*20cm*\scal);
+ \draw[rule,fill=white] (rule1) --++(#2*20cm*\scal,0) coordinate (rule2) --++(0,#4*20cm*\scal)
+ --++(-#2*20cm*\scal,0) --++(0,-#4*20cm*\scal);
+ \draw[rule] (rule2) --++(#2*20cm*\scal,0) coordinate (rule3) --++(0,#4*20cm*\scal)
+ --++(-#2*20cm*\scal,0) --++(0,-#4*20cm*\scal);
+ \foreach \x in {0,1,2,3} {%
+ \pgfmathsetmacro{\len}{#2*\x}
+ \path [draw=none] (rule\x) --+ (-90:0.06*\labeldist/\scal) node[label, black, scale=#3, anchor=north]
+ {\SI[zero-decimal-to-integer, round-mode=places, round-precision=1]{\len}{\meter}};
+ \draw [black,line width=30pt*#4*10*\scal] (rule\x) --+ (-90:1mm);
+ \draw [black,line width=30pt*#4*10*\scal] (rule\x) --+ (90:#4*20cm*\scal+1mm);
+ }
+}
+
+
+
+% legend text defaults
+\IfLanguageName{ngerman}{%
+\pgfkeyssetvalue{/pal/legendtxt/dipole}{Dipol}
+\pgfkeyssetvalue{/pal/legendtxt/quadrupole}{Quadrupol}
+\pgfkeyssetvalue{/pal/legendtxt/sextupole}{Sextupol}
+\pgfkeyssetvalue{/pal/legendtxt/kicker}{Kicker}
+\pgfkeyssetvalue{/pal/legendtxt/corrector}{Korrektor}
+\pgfkeyssetvalue{/pal/legendtxt/solenoid}{Solenoid}
+\pgfkeyssetvalue{/pal/legendtxt/cavity}{Hochfrequenz}
+\pgfkeyssetvalue{/pal/legendtxt/source}{Quelle}
+\pgfkeyssetvalue{/pal/legendtxt/screen}{Schirm}
+\pgfkeyssetvalue{/pal/legendtxt/valve}{Ventil}
+}{%
+\pgfkeyssetvalue{/pal/legendtxt/dipole}{Dipole}
+\pgfkeyssetvalue{/pal/legendtxt/quadrupole}{Quadrupole}
+\pgfkeyssetvalue{/pal/legendtxt/sextupole}{Sextupole}
+\pgfkeyssetvalue{/pal/legendtxt/kicker}{Kicker}
+\pgfkeyssetvalue{/pal/legendtxt/corrector}{Corrector}
+\pgfkeyssetvalue{/pal/legendtxt/solenoid}{Solenoid}
+\pgfkeyssetvalue{/pal/legendtxt/cavity}{Cavity}
+\pgfkeyssetvalue{/pal/legendtxt/source}{Source}
+\pgfkeyssetvalue{/pal/legendtxt/screen}{Screen}
+\pgfkeyssetvalue{/pal/legendtxt/valve}{Valve}
+}
+
+% change legend text
+\newcommand{\setlegendtext}[2]{%
+ \pgfkeys{/pal/legendtxt/#1=#2}
+}
+
+
+% add custom legend entry
+\newcommand{\addlegendentry}[2]{%
+ \pgfkeys{/pal/customlegendkeys/.get = \lktemp}
+ \ifdefequal{\lktemp}{\emptycustomlegendkeys}{%
+ \pgfkeyssetvalue{/pal/customlegendkeys}{#1}%
+ }{%
+ \pgfkeys{/pal/customlegendkeys/.append = {,#1}}%
+ }%
+ \pgfkeys{/pal/customlegendimg/#1/.style = {#2}}%
+}
+
+
+%legend (types that occured in the lattice before this command)
+\newcommandx{\legend}[2][2=1]{%
+\coordinate (legendstart) at ($(0,0)!\scal*20!#1$);
+\pgfmathsetmacro{\savescal}{\scal}
+\pgfmathsetmacro{\saveang}{\angle}
+\pgfmathsetmacro{\scal}{0.05}
+\pgfmathsetmacro{\angle}{-90}
+\def\h{0.4}
+\def\l{0.3}
+\def\dist{0.18}
+\savecoordinate{_here_}
+\coordinate (east\j) at (legendstart);
+\coordinate (legendstart') at ($(legendstart) + (-\h*\scal*15*#2,\dist*\scal*15*#2)$);
+\coordinate (legendstart'') at ($(legendstart) + (\h*\scal*15*#2,\dist*\scal*15*#2)$);
+\edef\points{(legendstart') (legendstart'')}
+\begin{scope}[scale=#2, every node/.style={scale=#2}]
+\tikzset{drift/.append style={draw=none}}
+\northlabels%
+\setlabelcolor{black}%
+\setlabeldistance{\h}%
+\setlabelfont{\normalsize}%
+ \iftoggle{dip}{\dipole{\pgfkeysvalueof{/pal/legendtxt/dipole}}{\l}{0}[r][\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{quad}{\quadrupole{\pgfkeysvalueof{/pal/legendtxt/quadrupole}}{\l}[\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{sext}{\sextupole{\pgfkeysvalueof{/pal/legendtxt/sextupole}}{\l}[\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{correct}{\corrector{\pgfkeysvalueof{/pal/legendtxt/corrector}}{\l}[\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{kick}{\kicker{\pgfkeysvalueof{/pal/legendtxt/kicker}}{\l}[\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{cav}{\cavity{\pgfkeysvalueof{/pal/legendtxt/cavity}}{\l}[\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{sol}{\solenoid{\pgfkeysvalueof{/pal/legendtxt/solenoid}}{\l}[\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{sourc}{\source{\pgfkeysvalueof{/pal/legendtxt/source}}{\l}[\h]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{scree}{\screen{\pgfkeysvalueof{/pal/legendtxt/screen}}[\l]\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}}{}%
+ \iftoggle{valv}{\drift{\dist}\valve{\pgfkeysvalueof{/pal/legendtxt/valve}}\xdef\points{(elementlabel\j)
+ \points}\drift{\dist}\drift{\dist}}{}%
+\end{scope}
+ % custom entries (addlegendentry)
+ \edef\mylist{\pgfkeysvalueof{/pal/customlegendkeys}}%
+ \ifdefequal{\mylist}{\emptycustomlegendkeys}{}{%
+ \node[anchor=north west,inner sep=0,outer sep=0,xshift=#2*-2mm] at (east\j) {
+ \begin{tikzpicture}[start chain=going below,node distance=2mm,scale=#2,transform shape]
+ \foreach \ele in \mylist {%
+ \node[on chain, draw, thin,/pal/customlegendimg/\ele, minimum width=\h*10mm, minimum height=\l*10mm] (n) {};%
+ \node[anchor=west,xshift=5.15mm] (ntxt) at (n.center) {\ele};%
+ \xdef\points{($(ntxt.south east)+#2*(2mm,-2mm)$)\points}%
+ }
+ \end{tikzpicture}
+ };
+ }
+\node[draw=black, rounded corners, fit=\points] {};
+\pgfmathsetmacro{\scal}{\savescal}
+\pgfmathsetmacro{\angle}{\saveang}
+%\tikzset{drift/.append style={draw=black}}
+\coordinate (east\j) at (_here_);
+}
+
+%complete legend (all types)
+\newcommandx{\completelegend}[2][2=1]{%
+ \settoggle{dip}{true}
+ \settoggle{quad}{true}
+ \settoggle{sext}{true}
+ \settoggle{kick}{true}
+ \settoggle{correct}{true}
+ \settoggle{sol}{true}
+ \settoggle{cav}{true}
+ \settoggle{sourc}{true}
+ \settoggle{scree}{true}
+ \settoggle{valv}{true}
+ \legend{#1}[#2]
+}
+
+
+%---commands for internal use---
+\newcommand{\updatelabelanchor}{%
+ \pgfmathtruncatemacro\iang{\angle}
+ % handle angle not in [0,360] ([-720,+1080] handled)
+ \ifthenelse{\iang<0}{\pgfmathtruncatemacro\iang{\iang+360}}{}
+ \ifthenelse{\iang<0}{\pgfmathtruncatemacro\iang{\iang+360}}{}
+ \ifthenelse{\iang>360}{\pgfmathtruncatemacro\iang{\iang-360}}{}
+ \ifthenelse{\iang>360}{\pgfmathtruncatemacro\iang{\iang-360}}{}
+ % set label anchor according to angle
+ \iftoggle{userlabelanchor}{}{% %if labelanchor is set by user just use the set value
+ \ifthenelse{\labelang = -90}{%
+ \def\labelanchor{north};
+ \ifthenelse{\iang > 30}{\def\labelanchor{west}}{}
+ \ifthenelse{\iang > 150}{\def\labelanchor{south}}{}
+ \ifthenelse{\iang > 210}{\def\labelanchor{east}}{}
+ \ifthenelse{\iang > 330}{\def\labelanchor{north}}{}
+ }{%
+ \def\labelanchor{south};
+ \ifthenelse{\iang > 30}{\def\labelanchor{east}}{}
+ \ifthenelse{\iang > 150}{\def\labelanchor{north}}{}
+ \ifthenelse{\iang > 210}{\def\labelanchor{west}}{}
+ \ifthenelse{\iang > 330}{\def\labelanchor{south}}{}
+ }
+ }
+}
+
+\newcommand{\updatemarkerlabelanchor}{%
+ \pgfmathtruncatemacro\iang{\angle}
+ % handle angle not in [0,360] ([-720,+1080] handled)
+ \ifthenelse{\iang<0}{\pgfmathtruncatemacro\iang{\iang+360}}{}
+ \ifthenelse{\iang<0}{\pgfmathtruncatemacro\iang{\iang+360}}{}
+ \ifthenelse{\iang>360}{\pgfmathtruncatemacro\iang{\iang-360}}{}
+ \ifthenelse{\iang>360}{\pgfmathtruncatemacro\iang{\iang-360}}{}
+ % set label anchor according to angle
+ \ifthenelse{\marklabelang = +90}{%
+ \def\labelanchor{south};
+ \ifthenelse{\iang > 30}{\def\labelanchor{east}}{}
+ \ifthenelse{\iang > 150}{\def\labelanchor{north}}{}
+ \ifthenelse{\iang > 210}{\def\labelanchor{west}}{}
+ \ifthenelse{\iang > 330}{\def\labelanchor{south}}{}
+ }{%
+ \def\labelanchor{north};
+ \ifthenelse{\iang > 30}{\def\labelanchor{west}}{}
+ \ifthenelse{\iang > 150}{\def\labelanchor{south}}{}
+ \ifthenelse{\iang > 210}{\def\labelanchor{east}}{}
+ \ifthenelse{\iang > 330}{\def\labelanchor{north}}{}
+ }
+}
+
+
+\newcommand{\elementlabel}[1]{%
+ \updatelabelanchor
+ \path [draw=none] (center\j) --+ (\angle\labelang:\labeldist) node[label] (elementlabel\j) {#1};
+}
+
+\newcommand{\jinc}{\pgfmathparse{int(\i+1)} \global\let\j\pgfmathresult}
+\newcommand{\iinc}{\global\let\i\j}
+\newcommand{\angleinc}[1]{\pgfmathparse{\angle+#1} \global\let\angle\pgfmathresult}
+\newcommand{\declarecoords}{\coordinate (east\j) at (nodeeast\j.center); \coordinate (center\j) at (nodecenter\j.center);}
+
+
+
+
+
+% ----- element commands -----
+% drift
+\newcommandx{\drift}[2][2=]{%
+\jinc
+\begin{pgfonlayer}{background}
+ \draw[drift] (east\i) --++ (\angle:#1*10cm*\scal) node[] (nodecenter\j) {} --++
+ (\angle:#1*10cm*\scal) node[] (nodeeast\j) {};
+\end{pgfonlayer}{background}
+\declarecoords
+\elementlabel{#2};
+\iinc;
+}
+
+%rectangle-element (used for quad,sext,kicker,cavity,...)
+\newcommandx{\rectangleelement}[4]{%
+\pgfmathsetlength{\corners}{(#2)>=0.4 ? (1mm*10*\scal) : 0mm};
+\pgfmathsetlength{\elementheight}{#3*20cm*\scal};
+\draw[drift] (east\i) --++ (\angle:#2*10cm*\scal) node[] (nodecenter\j) {} --++
+(\angle:#2*10cm*\scal) node[] (nodeeast\j) {};
+\draw[#4] (east\i) --++ (0,\elementheight/2) --++ (#2*20cm*\scal,0) --++
+(0,-\elementheight) --++ (-#2*20cm*\scal,0) --++ (0,\elementheight/2);
+}
+
+
+%dipole (br,r,s)
+\newcommandx{\dipole}[5][4=s, 5=0.6]{%
+\jinc
+\pgfmathsetlength{\corners}{(#2)>=0.4 ? (1mm*10*\scal) : 0mm};
+\pgfmathsetlength{\elementheight}{#5*20cm*\scal};
+\def\winkel{#3}
+\ifthenelse{\equal{#3}{0}}{
+ \rectangleelement{#1}{#2}{#5}{dipole}
+}{
+ \newdimen\radius
+ \newdimen\ri
+ \newdimen\ra
+ \pgfmathsetlength{\radius}{(#2*20cm*\scal)/rad(\winkel)}; % bogenlänge
+ \pgfmathsetlength{\ri}{\radius-0.5*\elementheight}
+ \pgfmathsetlength{\ra}{\radius+0.5*\elementheight}
+
+ % draw bend beampipe
+ \draw[drift,rotate=\angle] (east\i) arc (-90:(-90+\winkel/2):\radius) node[] (nodecenter\j) {};
+ \draw[drift,rotate=\angle] (nodecenter\j) arc ((-90+\winkel/2):(-90+\winkel):\radius) node[] (nodeeast\j) {};
+
+ % [r]ectangle
+ \ifthenelse{\equal{#4}{r}}{
+ \angleinc{0.5*#3}
+ \newdimen\straightlength
+ \pgfmathsetlength{\straightlength}{sin(\winkel/2)*2*\radius} % sekante des kreisbogens
+ \draw[dipole] (east\i) --++ (0,-\elementheight/2) --++ (\straightlength,0) --++
+ (0,\elementheight) --++ (-\straightlength,0) --++ (0,-\elementheight/2);
+ }{
+ % [s]ector
+ \ifthenelse{\equal{#4}{s}}{%
+ \draw[dipole] (east\i) -- ++
+ (0,-\elementheight/2) arc (-90:(-90+\winkel):\ra) -- ++(\winkel+90:\elementheight) arc
+ ((-90+\winkel):-90:\ri) -- cycle;
+ \angleinc{0.5*\winkel}
+ }{
+ % [b]end[r]ectangle
+ \angleinc{0.5*#3}
+ \draw[dipole] (east\i) -- ++
+ (0,-\elementheight/2) arc (-90-\winkel/2:-90+\winkel/2:\radius) -- ++(0,\elementheight) arc
+ (-90+\winkel/2:-90-\winkel/2:\radius) -- cycle;
+ }
+ }
+}
+
+\declarecoords
+\elementlabel{#1};
+\iinc
+\global\settoggle{dip}{true}
+\angleinc{0.5*\winkel}
+}
+
+
+%quadrupole
+\newcommandx{\quadrupole}[3][3=0.5]{%
+\jinc
+\rectangleelement{#1}{#2}{#3}{quadrupole}
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{quad}{true}
+}
+
+%sextupole
+\newcommandx{\sextupole}[3][3=0.3]{%
+\jinc
+\rectangleelement{#1}{#2}{#3}{sextupole}
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{sext}{true}
+}
+
+%kicker
+\newcommandx{\kicker}[3][3=0.25]{%
+\jinc
+\rectangleelement{#1}{#2}{#3}{kicker}
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{kick}{true}
+}
+
+% corrector
+\newcommandx{\corrector}[3][3=0.25]{%
+\jinc
+\rectangleelement{#1}{#2}{#3}{corrector}
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{correct}{true}
+}
+
+%cavity
+\newcommandx{\cavity}[3][3=0.45]{%
+\jinc
+\rectangleelement{#1}{#2}{#3}{cavity}
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{cav}{true}
+}
+
+%solenoid
+\newcommandx{\solenoid}[3][3=0.2]{%
+\jinc
+\rectangleelement{#1}{#2}{#3}{solenoid}
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{sol}{true}
+}
+
+%beamdump
+\newcommandx{\beamdump}[3][3=0.5]{%
+\jinc
+\rectangleelement{#1}{#2}{#3}{beamdump}
+\declarecoords
+\elementlabel{#1}
+\iinc
+%\global\settoggle{}{true} no legend for beamdump
+}
+
+%source
+\newcommandx{\source}[3][3=0.5]{%
+\jinc
+\pgfmathsetlength{\corners}{(#2)>=0.4 ? (1mm*10*\scal) : 0mm};
+\pgfmathsetlength{\elementheight}{#3*20cm*\scal};
+\draw[drift] (east\i) --++ (\angle:#2*10cm*\scal) node[] (nodecenter\j) {} --++
+(\angle:#2*10cm*\scal) node[] (nodeeast\j) {};
+\draw[source] (east\i) --++ (0,\elementheight/2) --++ (#2*20cm*\scal,-\elementheight/2)
+--++ (-#2*20cm*\scal,-\elementheight/2) --++ (0,\elementheight/2);
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{sourc}{true}
+}
+
+%screen
+\newcommandx{\screen}[2][2=0.2]{%
+\jinc
+\pgfmathsetlength{\corners}{(#2)>=0.4 ? (1mm*10*\scal) : 0mm};
+\newdimen\radius
+\pgfmathsetlength{\radius}{#2*20cm*\scal/2};
+\draw[drift] (east\i) --++ (\angle:#2*10cm*\scal) node[] (nodecenter\j) {} --++
+(\angle:#2*10cm*\scal) node[] (nodeeast\j) {};
+\draw[screen] (nodecenter\j.center) circle (\radius);
+\draw[screen] (nodecenter\j.center) --++ (45:\radius);
+\draw[screen] (nodecenter\j.center) --++ (45+180:\radius);
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{scree}{true}
+}
+
+%valve
+\newcommandx{\valve}[2][2=0.01]{%
+\jinc
+\rectangleelement{#1}{#2}{0.15}{valve}
+\declarecoords
+\elementlabel{#1}
+\iinc
+\global\settoggle{valv}{true}
+}
+
+
+%marker
+\newcommandx{\marker}[2][2=0.35]{%
+\pgfmathsetlength{\markerlen}{#2*20cm*\scal};
+\updatemarkerlabelanchor
+\draw [marker] (east\i) --+ (\angle-90:\markerlen); % half length (=> 10cm)
+\draw [marker] (east\i) --+ (\angle+90:\markerlen);
+\draw [draw=none] (east\i) --+ (\angle\marklabelang:\markerlen+0.5*\labeldist) node[label] {#1};
+}
+
+
+
+
+
+% ----- styles -----
+%faded (for global fade setting)
+\tikzset{faded/.style={
+opacity=1
+}}
+\tikzset{fadeElement/.style={
+faded
+}}
+
+%element (for all, except drift)
+\tikzset{element/.style={
+rounded corners=\corners,
+line width=0.8pt*10*\scal, draw=black,
+top color=white,
+anchor=west,
+rotate=\angle,
+fadeElement %must be last to overwrite other settings
+}}
+
+%dipole
+\tikzset{default_dipole/.style={
+bottom color=blue,
+element,
+},
+dipole/.style={default_dipole}
+}
+
+
+%quadrupole
+\tikzset{default_quadrupole/.style={
+bottom color=yellow,
+element
+},
+quadrupole/.style={default_quadrupole}
+}
+
+%sextupole
+\tikzset{default_sextupole/.style={
+bottom color=violet!70!black,
+element
+},
+sextupole/.style={default_sextupole}
+}
+
+%kicker
+\tikzset{default_kicker/.style={
+bottom color=red!90!black,
+element
+},
+kicker/.style={default_kicker}
+}
+
+%corrector
+\tikzset{default_corrector/.style={
+bottom color=orange!90!black,
+element
+},
+corrector/.style={default_corrector}
+}
+
+%cavity
+\tikzset{default_cavity/.style={
+bottom color=brown!80!black,
+element
+},
+cavity/.style={default_cavity}
+}
+
+%solenoid
+\tikzset{default_solenoid/.style={
+bottom color=green!70!black,
+element
+},
+solenoid/.style={default_solenoid}
+}
+
+%beamdump
+\tikzset{default_beamdump/.style={
+bottom color=gray,
+element
+},
+beamdump/.style={default_beamdump}
+}
+
+%source
+\tikzset{default_source/.style={
+bottom color=gray,
+element
+},
+source/.style={default_source}
+}
+
+%screen
+\tikzset{default_screen/.style={
+bottom color=white,
+element
+},
+screen/.style={default_screen}
+}
+
+%valve
+\tikzset{default_valve/.style={
+bottom color=gray,
+element,
+top color=gray,
+draw=none
+},
+valve/.style={default_valve}
+}
+
+
+
+%drift
+\tikzset{default_drift/.style={
+line width=0.8pt*10*\scal, draw=black,
+faded %must be last to overwrite other settings
+},
+drift/.style={default_drift}
+}
+
+%text label
+\tikzset{label/.style={
+text=\labelcolor,
+font=\labelfont,
+rotate=\labelrot,
+anchor=\labelanchor,
+faded %must be last to overwrite other settings
+}}
+
+%marker (line)
+\tikzset{default_marker/.style={
+red, densely dashed,
+faded %must be last to overwrite other settings
+},
+marker/.style={default_marker}
+}
+
+%rule
+\tikzset{rule/.style={
+draw=black,
+fill=black,
+faded %must be last to overwrite other settings
+}}
+
+%start
+\tikzset{start/.style={%
+draw=none,
+anchor=center,
+scale=0.1,
+faded %must be last to overwrite other settings
+}}
diff --git a/graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.pdf b/graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.pdf
new file mode 100644
index 0000000000..dda15d351c
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.tex b/graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.tex
new file mode 100644
index 0000000000..27353ba462
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-palattice/tikz-palattice_documentation.tex
@@ -0,0 +1,767 @@
+%% tikz-palattice_documentation.tex
+%% Copyright 2017 J. Schmidt
+%% tikz-palattice LaTeX package
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is J. Schmidt.
+%
+% This work consists of the files tikz-palattice.sty and tikz-palattice_documentation.tex
+% and the 5 example files example1_linear.tex, example2_circular.tex,
+% example3_coordinates.tex, example4_labels.tex and elsa.tex
+
+\documentclass[a4paper]{scrartcl}
+\usepackage[english]{babel}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{subcaption}
+\usepackage{amsmath}
+\usepackage{textcomp}
+\usepackage{marvosym}
+\usepackage{amssymb}
+\usepackage[colorlinks]{hyperref}
+\usepackage{siunitx}
+\usepackage{listings}
+\usepackage{xcolor}
+\usepackage{tikz-palattice}
+
+\newcommand{\option}[1]{{\color{blue}$\langle$\textit{#1}$\rangle$}}
+\newcommand{\optiondef}[2]{{\color{green!50!black}$\langle$\textit{#1=#2}$\rangle$}}
+\newcommand{\tikzlabel}{Ti\textit{k}Z}
+
+\author{Jan Schmidt <janschmidt@mailbox.org>}
+\date{v2.3 (March 9, 2017)}
+\title{tikz-palattice - draw particle accelerator lattices with \tikzlabel}
+
+\hypersetup{
+ pdftitle={tikz-palattice - draw particle accelerator lattices with \tikzlabel},
+ pdfauthor={Jan Schmidt}
+}
+
+\begin{document}
+
+\definecolor{keycolor}{RGB}{172, 42, 42}
+\lstset{
+basicstyle=\small\sffamily,
+backgroundcolor=\color{gray!20},
+%numbers=left,
+numberstyle=\tiny,
+breaklines=true,
+%frame=l,
+xleftmargin=\parindent,
+columns=fullflexible,
+showstringspaces=false,
+keywordstyle=\bfseries\color{keycolor},
+commentstyle=\color{black!50},
+identifierstyle=,%\color{blue},
+stringstyle=,
+escapeinside={(*}{*)}
+}
+
+\maketitle
+
+\begin{abstract}
+ The tikz-palattice package allows for drawing a map of a particle accelerator just by
+ giving a list of elements - similar to lattice files for simulation software. The
+ package includes 12 common element types like dipoles, quadrupoles, cavities or screens,
+ as well as automatic labels with element names, a legend, a rule and an environment to
+ fade out parts of the accelerator. The coordinate of any element can be saved and used
+ for custom tikz drawings or annotations. Thereby, lattices can be connected to draw
+ injection/extraction or even a complete accelerator facility.
+\end{abstract}
+
+
+\begin{figure}[h]
+ \centering
+ \includegraphics[width=\textwidth]{elsa.pdf}
+ \caption{The Electron Stretcher Facility ELSA at Bonn University, drawn with
+ tikz-palattice}
+\label{fig:elsa}
+\end{figure}
+
+
+\clearpage
+\parindent=0pt
+Copyright 2017 Jan Schmidt
+
+\medskip
+Permission is granted to distribute and/or modify both the documentation and the code
+under the conditions of the LaTeX Project Public License, either version 1.3 of this
+license or (at your option) any later version. The latest version of this license is in
+http://www.latex-project.org/lppl.txt
+
+\tableofcontents
+
+\section{Installation}
+\label{sec-1}
+\subsection{Copy tikz-palattice.sty}
+\label{sec-1-1}
+You just need to copy the lattice.sty file to a place where your \LaTeX{} installation can recognize it.
+This can be
+\begin{itemize}
+\item the same folder as your .tex document or
+\item in the \LaTeX{} system or user tree.
+\end{itemize}
+E.g. to add it to the system tree for texlive under ubuntu:
+\begin{lstlisting}
+sudo mkdir -p /usr/local/share/texmf/tex/latex/lattice/
+sudo cp lattice.sty /usr/local/share/texmf/tex/latex/lattice/
+sudo mktexlsr
+\end{lstlisting}
+For this path there is also a Makefile prepared, so just enter
+\begin{lstlisting}
+sudo make install
+\end{lstlisting}
+Otherwise read the documentation of your \LaTeX{} distribution.
+
+\subsection{Required packages}
+\label{sec-1-2}
+\begin{itemize}
+\item tikz
+\item siunitx
+\item ifthen
+\item xargs
+\item etoolbox
+\item iflang
+\end{itemize}
+
+\lstset{language=[LaTeX]TeX}
+
+\section{Basic Usage}
+\label{sec:remarks}
+
+Basically, an accelerator lattice is drawn by writing element commands one after the
+other. White spaces and newlines are ignored. Usually you will use one \lstinline+drift+
+and one other element alternately:
+
+\begin{minipage}[c]{0.5\textwidth}
+\begin{lstlisting}
+ \begin{lattice}
+ \source{Gun}{0.4}
+ \drift{0.267}
+ \quadrupole{Q1}{0.4}
+ \drift{0.29}
+ \dipole{M1}{0.8}{30}
+ \drift{0.29}
+ \kicker{VC1}{0.1}
+ \drift{0.2}
+ \end{lattice}
+\end{lstlisting}
+\end{minipage}
+%
+\begin{minipage}[c]{0.5\textwidth}
+ \begin{center}
+ \begin{lattice}
+ \source{Gun}{0.4}
+ \drift{0.267}
+ \quadrupole{Q1}{0.4}
+ \drift{0.29}
+ \dipole{M1}{0.8}{30}
+ \drift{0.29}
+ \kicker{VC1}{0.1}
+ \drift{0.2}
+ \end{lattice}
+ \end{center}
+\end{minipage}
+
+
+Descriptions of the commands are given in section \ref{sec-5}. There are 5 examples coming
+with this package. Some of the drawings are shown in this document. Please look at the
+separate tex-files for the source code.
+
+\paragraph{Some general remarks:}
+\begin{itemize}
+\item it is recommended to draw lattices using \lstinline+\documentclass{standalone}+
+ especially for larger beamlines.
+\item lengths are set in meter, so you write \{1.32\} for \SI{1.32}{\m}.
+\item beamline with angle \SI{0}{\degree} goes to the right, positive angles bend counter clockwise.
+\item some commands use the \tikzlabel{} \textit{north/east/south/west} terms. \textit{east}
+ of an element is always where the beam leaves the element (downstream) and \textit{west} is where the
+ beam enters the element (upstream).
+\item settings (colors, font, rotatelabel,\ldots{}) changed within a \verb+scope+ environment are set back to the previous values outside of \verb+scope+
+\item picture scale: for lattice scale=1 an element of 1m length is plotted with \SI{2}{\cm} length
+\end{itemize}
+
+Below, the arguments of commands are given in angle brackets. The values after an equal
+sign are default values of optional arguments. E.g. \optiondef{scale}{1} indicates that
+the default value of "scale" is 1.
+
+
+
+\section{The lattice Environment}
+\label{sec-4}
+
+To draw a lattice just add
+\begin{lstlisting}
+\usepackage{tikz-palattice}
+\end{lstlisting}
+to your preambel and use the lattice environment with
+\begin{lstlisting}
+ \begin{lattice}[(*\optiondef{scale}{1}*)][(*\optiondef{tikz options}{}*)]
+ ...
+ \end{lattice}
+\end{lstlisting}
+The \lstinline+lattice+ environment contains a \lstinline+tikzpicture+ environment in
+which the lattice is drawn using usual tikz commands. The \lstinline+lattice+ environment
+has 2 optional arguments:
+\begin{enumerate}
+\item \optiondef{scale}{1} scales whole picture (default is 1).
+\item \optiondef{tikz options}{} gives any options for the \lstinline+tikzpicture+ (e.g.
+ overlay, default is none).
+\end{enumerate}
+
+
+\section{Within lattice Environment}
+\label{sec-5}
+
+\subsection{Elements}
+\label{sec-5-1}
+
+ Here is a list of all implemented element types. The element names are self-explanatory:
+\begin{lstlisting}
+ \drift{(*\option{length/m}*)}[(*\optiondef{name}{}*)]
+ \dipole{(*\option{name}*)}{(*\option{arc length/m}*)}{(*\option{bending angle/deg}*)}[(*\optiondef{type}{s}*)][(*\optiondef{thickness/m}{0.6}*)]
+ \quadrupole{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.5}*)]
+ \sextupole{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.3}*)]
+ \corrector{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.25}*)]
+ \kicker{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.25}*)]
+ \cavity{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.45}*)]
+ \solenoid{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.2}*)]
+ \beamdump{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.5}*)]
+ \source{(*\option{name}*)}{(*\option{length/m}*)}[(*\optiondef{thickness/m}{0.5}*)]
+ \screen{(*\option{name}*)}[(*\optiondef{length/m}{0.2}*)]
+ \valve{(*\option{name}*)}
+ \marker{(*\option{name}*)}[(*\optiondef{length/m}{0.35}*)] % a line perpendicular to the beamline, see Fig. (*\ref{fig:example1}*)
+\end{lstlisting}
+
+
+\subsubsection{Dipole Types}
+The \lstinline+dipole+ option \optiondef{type}{s} allows to select different dipole
+shapes. It is shown in example~2. Possible values are:
+
+\def\dipang{30}
+\def\dipl{1.5}
+\def\dipthick{0.3}
+\begin{minipage}[c]{0.33\textwidth}
+ \centering
+ \begin{lattice}
+ \setangle{-\dipang/2}
+ \drift{0.1}
+ \dipole{s: sector magnet}{\dipl}{\dipang}[s][\dipthick]
+ \drift{0.1}
+ \end{lattice}
+\end{minipage}
+\begin{minipage}[c]{0.33\textwidth}
+ \centering
+ \begin{lattice}
+ \setangle{-\dipang/2}
+ \drift{0.1}
+ \dipole{r: rectangle magnet}{\dipl}{\dipang}[r][\dipthick]
+ \drift{0.1}
+ \end{lattice}
+\end{minipage}
+\begin{minipage}[c]{0.33\textwidth}
+ \centering
+ \begin{lattice}
+ \setangle{-\dipang/2}
+ \drift{0.1}
+ \dipole{br: bend rectangle magnet}{\dipl}{\dipang}[br][\dipthick]
+ \drift{0.1}
+ \end{lattice}
+\end{minipage}
+
+If you use any other letters, also the default (s) is used.
+
+
+\begin{figure}
+ \centering
+ \includegraphics[width=10cm]{example1_linear}
+ \caption{Example 1}
+ \label{fig:example1}
+\end{figure}
+
+
+\subsection{Orientation of the lattice}
+\label{sec-5-2}
+
+\begin{lstlisting}
+ \start{(*\option{coordinate/m}*)}
+\end{lstlisting}
+sets starting point of the lattice. Use it before the first element. \option{coordinate/m}
+is of form (x,y) or any tikz label, e.g. (mylabel.east) You can use this with
+\lstinline+\savecoordinate+ (section \ref{sec:coords}) to connect lattices, but it is
+recommended to do this via \lstinline+\goto+ (see below). Both are shown in example 3.
+
+\begin{lstlisting}
+ \rotate{(*\option{angle/deg}*)}
+\end{lstlisting}
+bends the beamline by the given angle.
+
+\begin{lstlisting}
+ \setangle{(*\option{angle/deg}*)}
+\end{lstlisting}
+sets the beamline angle to the given angle. The next element is drawn with beam axis in
+this direction.
+
+\begin{lstlisting}
+ \goto{(*\option{coordinate name}*)}
+\end{lstlisting}
+sets current position and angle to values saved
+with \lstinline+\savecoordinate+ (section \ref{sec:coords}).
+Use this to connect lattices and draw injection, extraction or even a complete accelerator
+facility. This is shown in example 3.
+
+\begin{figure}[h]
+ \centering
+ % this is the ring from example 2, but plotted smaller (30%).
+ % the element sizes (in meter) are the same - as the rule indicates.
+ \begin{lattice}[0.27]
+ \setlabelfont{\tiny}
+ \begin{labeldistance}{0.3}
+ \drift{1}
+ \dipole{M1}{2}{45}
+ \drift{1}
+ \turnlabels
+ \dipole{M2}{2}{45}
+ \turnlabels
+ \drift{1}
+ \dipole{M3}{2}{45}
+ \drift{1}
+ \savecoordinate{myCoord1}[center]
+ \dipole{M4}{2}{45}
+ \drift{1}
+ \dipole{M5}{2}{45}
+ \drift{1}
+ \dipole{M6}{2}{45}
+ \drift{1}
+ \savecoordinate{myCoord2}[center]
+ \dipole{M7}{2}{45}
+ \drift{1}
+ \dipole{M8}{2}{45}
+ \drawrule{(-2.5,-1)}[2]
+ \end{labeldistance}
+ % custom drawing using saved coordinates (to center of drifts)
+ \draw[->, thick] (myCoord2) -- (myCoord1) node[midway,fill=white,rotate=20] {signal};
+ \end{lattice}
+\caption{From example 3}
+\label{fig:fromexample3}
+\end{figure}
+
+
+\newpage
+\subsection{Rule and Legend}
+\label{sec:rule-legend}
+
+\begin{lstlisting}
+ \drawrule{(*\option{position/m}*)}[(*\optiondef{tick distance/m}{1}*)][(*\optiondef{scale}{1}*)][(*\optiondef{height/m}{0.1}*)]
+\end{lstlisting}
+draws a rule to visualize the size of the lattice. Coordinate is of form (x,y) or any tikz
+label, e.g. (mylabel.east)
+
+\begin{lstlisting}
+ \legend{(*\option{position/m}*)}[(*\optiondef{scale}{1}*)]
+\end{lstlisting}
+draws a legend with all element types that occur in the lattice before this command.
+The given \option{position/m} is north west (upper left corner) of the legend box.
+The scale option scales the whole box including the text, which has the usual label
+textsize if scale=1.
+
+\begin{lstlisting}
+ \completelegend{(*\option{position/m}*)}[(*\optiondef{scale}{1}*)]
+\end{lstlisting}
+is similar to \lstinline+\legend+, but shows all element types.
+
+The legend can be customized with the following two commands.
+Here is an example for legend customizations:
+
+\begin{minipage}[c]{0.5\textwidth}
+\begin{lstlisting}
+ \begin{lattice}
+ \drift{0.2}
+ \quadrupole{Q1}{0.4}
+ \drift{0.1}
+ \kicker{C1}{0.1}
+ \drift{0.5}
+ \screen{S1}
+ \drift{0.2}
+ \setlegendtext{quadrupole}{I am focusing}
+ \addlegendentry{What's that?}{cyan, fill=violet}
+ \legend{(0.2,-1)}
+ \end{lattice}
+\end{lstlisting}
+\end{minipage}
+%
+\begin{minipage}[c]{0.5\textwidth}
+ \begin{center}
+ \begin{lattice}
+ \drift{0.2}
+ \quadrupole{Q1}{0.4}
+ \drift{0.1}
+ \kicker{C1}{0.1}
+ \drift{0.5}
+ \screen{S1}
+ \drift{0.2}
+ \setlegendtext{quadrupole}{I am focusing}
+ \addlegendentry{What's that?}{cyan, fill=violet}
+ \legend{(0.2,-1)}
+ \end{lattice}
+ \end{center}
+\end{minipage}
+
+\begin{lstlisting}
+ \setlegendtext{(*\option{type}*)}{(*\option{text}*)}
+\end{lstlisting}
+allows to change the text shown in the legend for element type \option{type}. The legend
+is automatically translated to German if \textit{ngerman} is set with the babel package.
+
+\begin{lstlisting}
+ \addlegendentry{(*\option{text}*)}{(*\option{style}*)}
+\end{lstlisting}
+adds a custom entry to the legend. The style of the legend image can set with
+\option{style}. All style options for a tikz node are allowed. All custom legend entries
+appear below the normal entries.
+
+
+
+
+
+
+\subsection{Labels}
+\label{sec:labels}
+Every element has a text label showing the given element name. The position and
+orientation of the label is set automatically according to the current angle of the
+beamline. Several commands to modify the labels manually are described below. If you want
+to disable labels, leave the element names blank or set the label color (section
+\ref{sec:colors}) to your background color.
+
+\begin{lstlisting}
+ \turnlabels
+\end{lstlisting}
+moves labels to other side of elements (swap with marker labels), while
+\begin{lstlisting}
+ \northlabels
+ \southlabels
+\end{lstlisting}
+explicitly sets the labels to north or south (see section \ref{sec:remarks}) of the
+elements. It is recommended to use these and not \lstinline+\turnlabels+, because
+otherwise the label position at a certain element is determined by the number of
+\lstinline+\turnlabels+ commands before this element.
+
+\begin{lstlisting}
+ \rotatelabels{(*\option{angle/deg}*)}[(*\optiondef{anchor}{}*)]
+\end{lstlisting}
+allows rotation of element labels.
+The \optiondef{anchor}{} sets the center of rotation (north, center, south west,
+\ldots{}). West corresponds to the labels first character. By default the anchor is set
+automatically depending on the current angle of the beamline.
+
+\begin{lstlisting}
+ \begin{labeldistance}{(*\option{distance/m}*)}
+ ...
+ \end{labeldistance}
+\end{lstlisting}
+sets the distance of text labels to the element center for all elements within this
+environment. Default is 0.35.
+
+\begin{lstlisting}
+ \setlabeldistance{(*\option{distance/m}*)}
+ \resetlabeldistance
+\end{lstlisting}
+sets the distance of text labels to the element center for all following elements. the
+reset command sets the default value. Default is 0.35.
+
+\begin{lstlisting}
+ \setlabelfont{(*\option{fontsize}*)}
+\end{lstlisting}
+sets the text label font size. Default is \lstinline+\normalsize+.
+
+
+
+\subsection{Colors}
+\label{sec:colors}
+The colors can be changed at any point of the lattice. A setting is valid until the next
+color command. The reset commands set the according default color. Use a \lstinline+scope+
+environment to change a color for a section of a lattice.
+
+\begin{lstlisting}
+ \setlinecolor{(*\option{type}*)}{(*\option{color}*)}
+ \resetlinecolor{(*\option{type}*)}
+\end{lstlisting}
+for \option{type} drift and marker.
+
+\begin{lstlisting}
+ \setelementcolor{(*\option{type}*)}{(*\option{color}*)}[(*\optiondef{gradient color}{white}*)]
+ \resetelementcolor{(*\option{type}*)}
+\end{lstlisting}
+for all element types. Set \optiondef{gradient color}{white} equal to \option{color} to
+"disable" the gradient.
+
+\begin{lstlisting}
+ \setlabelcolor{(*\option{color}*)}
+\end{lstlisting}
+for textlabels. Set to background color to hide text labels.
+
+
+
+\subsection{Fade Out}
+\label{sec:fade-out}
+
+\begin{lstlisting}
+ \begin{fade}[(*\optiondef{opacity}{0.25}*)]
+ ...
+ \end{fade}
+\end{lstlisting}
+ reduces the opacity of all elements within the environment and sets all colors to gray.
+ So you can fade out regions of the lattice - e.g. for presentations.
+ This can also be used to completely hide regions by setting \optiondef{opacity}{0.25} to
+ zero.
+
+ Custom drawings and annotations (see section \ref{sec:coords}) can also be faded out
+ automatically. The tikz style \lstinline{faded} provides the appropriate settings: Add
+ \lstinline{faded} to the style of any tikz drawing or node within the \lstinline{lattice}
+ environment. If it is drawn within a \lstinline{fade} environment, it is faded out. Else
+ its style is not changed:
+
+\begin{minipage}[c]{0.6\textwidth}
+\begin{lstlisting}
+ \begin{lattice}
+ \tikzset{mynode/.style={
+ anchor=west,xshift=7mm,font=\bf,red}}
+ \setangle{-90}
+ \drift{0.2}
+ \sextupole{S1}{0.2}
+ \drift{0.267}
+ \begin{fade}[0.4]
+ \quadrupole{Q1}{0.4}
+ \savecoordinate{Q1}[center]
+ \node[mynode,faded] at (Q1) {a quadrupole!};
+ \drift{0.29}
+ \end{fade}
+ \kicker{VC1}{0.1}
+ \savecoordinate{kick}[center]
+ \node[mynode,faded] at (kick) {a kicker!};
+ \drift{0.2}
+ \dipole{M1}{0.8}{30}
+ \drift{0.29}
+ \end{lattice}
+\end{lstlisting}
+\end{minipage}
+%
+\begin{minipage}[c]{0.4\textwidth}
+ \begin{center}
+ \begin{lattice}
+ \tikzset{mynode/.style={anchor=west,xshift=7mm,font=\bf,red}}
+ \setangle{-90}
+ \drift{0.2}
+ \sextupole{S1}{0.2}
+ \drift{0.267}
+ \begin{fade}[0.4]
+ \quadrupole{Q1}{0.4}
+ \savecoordinate{Q1}[center]
+ \node[mynode,faded] at (Q1) {a quadrupole!};
+ \drift{0.29}
+ \end{fade}
+ \kicker{VC1}{0.1}
+ \savecoordinate{kick}[center]
+ \node[mynode,faded] at (kick) {a kicker!};
+ \drift{0.2}
+ \dipole{M1}{0.8}{30}
+ \drift{0.29}
+ \end{lattice}
+ \end{center}
+\end{minipage}
+
+
+\clearpage
+\subsection{Access lattice Coordinates}
+\label{sec:coords}
+You can use element coordinates to draw anything you want using pgf/tikz.
+
+\begin{lstlisting}
+ \savecoordinate{(*\option{name}*)}[(*\optiondef{position}{east}*)]
+\end{lstlisting}
+saves the coordinate of the previous element to access it later. Position specifies the
+exact place of the element. \textit{east} and \textit{center} are available (see section
+\ref{sec:remarks}).
+
+\begin{itemize}
+\item you can use all tikz/pgf commands within the lattice environment to draw anything.
+\item You can use this to connect multiple beamlines \textbf{within a lattice environment} with
+ \lstinline+\goto{name}+ (recommended, Figure \ref{fig:twoways} (a)).
+\item You can use this to connect \textbf{multiple lattice environments} with
+ \lstinline+\start{name}+. Use the tikz overlay option. (Figure \ref{fig:twoways} (b))
+\end{itemize}
+
+
+
+
+\begin{figure}[h]
+\centering
+\begin{subfigure}[b]{.45\textwidth}
+ \centering
+ \begin{lattice}[0.8]
+ \rotate{90}
+ \turnlabels %labels to the left
+ \drift{0.5}
+ \quadrupole{QF1}{0.3}
+ \drift{0.2}
+ \kicker{}{0.1}
+ \drift{0.07}
+ \quadrupole{QD2}{0.3}
+ \drift{0.4}
+ \setelementcolor{kicker}{cyan}
+ \kicker{Septum}{0.5}
+ \resetelementcolor{kicker}
+ \savecoordinate{Septum}[center] %save to connect other beamline
+ \drift{0.8}
+ \kicker{}{0.1}
+ \drift{0.37}
+ \quadrupole{QD3}{0.2}
+ \drift{0.17}
+ \kicker{}{0.1}
+ \drift{0.1}
+ \sextupole{SF1}{0.2}
+ \drift{0.27}
+ \dipole{MB1}{0.2}{30}[s][0.4]
+ \drift{0.2}
+
+ % now go back to saved coordinate and continue with another beamline
+ \goto{Septum}
+ \rotate{-20}
+ \turnlabels %labels to the right
+ \drift{0.6}
+ \kicker{SS1}{0.2}
+ \drift{0.2}
+ \kicker{SSH1}{0.2}
+ \drift{0.3}
+ \dipole{M1}{0.2}{-30}[r][0.4]
+ \begin{fade} %fade out this part
+ \drift{0.2}
+ \dipole{M2}{0.2}{50}[r][0.4]
+ \drift{0.2}
+ \dipole{M3}{0.2}{-20}[r][0.4]
+ \drift{0.7}
+ \end{fade}
+ \legend{(0,6.5)}
+ \end{lattice}
+ \caption{one lattice environment and goto}
+\end{subfigure}
+%
+\begin{subfigure}[b]{.45\textwidth}
+\centering
+ \begin{lattice}[0.8]
+ \rotate{90}
+ \turnlabels %labels to the left
+ \drift{0.5}
+ \quadrupole{QF1}{0.3}
+ \drift{0.2}
+ \kicker{}{0.1}
+ \drift{0.07}
+ \quadrupole{QD2}{0.3}
+ \drift{0.4}
+ \setelementcolor{kicker}{cyan}
+ \kicker{Septum}{0.5}
+ \resetelementcolor{kicker}
+ \savecoordinate{Septum}[center] %save to connect other beamline
+ \drift{0.8}
+ \kicker{}{0.1}
+ \drift{0.37}
+ \quadrupole{QD3}{0.2}
+ \drift{0.17}
+ \kicker{}{0.1}
+ \drift{0.1}
+ \sextupole{SF1}{0.2}
+ \drift{0.27}
+ \dipole{MB1}{0.2}{30}[s][0.4]
+ \drift{0.2}
+ \end{lattice}
+ %
+ %now draw second lattice and connect them using the saved coordinate
+ \begin{lattice}[0.8][overlay]
+ \start{(Septum)}
+ \rotate{70}
+ \drift{0.6}
+ \kicker{SS1}{0.2}
+ \drift{0.2}
+ \kicker{SSH1}{0.2}
+ \drift{0.3}
+ \dipole{M1}{0.2}{-30}[r][0.4]
+ \begin{fade} %fade out this part
+ \drift{0.2}
+ \dipole{M2}{0.2}{50}[r][0.4]
+ \drift{0.2}
+ \dipole{M3}{0.2}{-20}[r][0.4]
+ \drift{0.7}
+ \end{fade}
+ \legend{(-1,6.5)}
+ \end{lattice}
+ \caption{two lattice environments and start}
+\end{subfigure}
+\caption{From example 3: Two ways to connect lattices}
+\label{fig:twoways}
+\end{figure}
+
+
+
+\clearpage
+\section{Changelog}
+\label{sec:changelog}
+v2.1 from 2015/02/23 is the first published version.
+
+\paragraph{v2.2 from 2015/03/01}
+\begin{itemize}
+\item added \lstinline+\northlabels+ and \lstinline+\southlabels+
+\item minor legend improvements (label position is now independent of current lattice settings)
+\item minor documentation improvements
+\end{itemize}
+
+\paragraph{v2.21 from 2015/03/18}
+\begin{itemize}
+\item added \lstinline+faded+ style (apply fade out to custom annotations)
+\item fixed sector dipole drawing
+\item documentation fixes
+\end{itemize}
+
+\paragraph{v2.3 from 2017/03/09}
+\begin{itemize}
+\item added \lstinline+\setlegendtext+ and \lstinline+\addlegendentry+
+\item German legend translation via babel (\textit{ngerman})
+\item legend fixes
+\end{itemize}
+
+
+\section{TODO}
+\label{sec:todo}
+
+\paragraph{What is missing?}
+\begin{itemize}
+\item The look of the elements can be improved
+\item More element types can be added
+\item \ldots{}
+\end{itemize}
+
+I am not an \TeX{} programmer. I basically used the \tikzlabel{} commands and wrote a
+bunch of macros. So there is:
+\begin{itemize}
+\item no error handling implemented
+\item no dedicated scoping of internal macros (use of lattice with documentclass standalone recommended)
+\end{itemize}
+
+\paragraph{Known issues:}
+\begin{itemize}
+\item A circular lattice can have a significant offset (no closed circle), if the dipole
+ bending angles are not integer. Probably, this is due to rounding or calculation
+ accuracy.
+\item Please report bugs!
+\end{itemize}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-qtree/README b/graphics/pgf/contrib/tikz-qtree/README
new file mode 100644
index 0000000000..3bff4d3477
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/README
@@ -0,0 +1,49 @@
+tikz-qtree
+David Chiang <chiang at isi dot edu>
+Version 1.2 (22 Apr 2012)
+
+This package provides a macro for drawing trees with TikZ using the
+easy syntax of Alexis Dimitriadis' Qtree. It improves on TikZ's
+standard tree-drawing facility by laying out tree nodes without
+collisions; it improves on Qtree by adding lots of features from TikZ
+(for example, edge labels, arrows between nodes); and it improves on
+pst-qtree in being usable with pdfTeX and XeTeX.
+
+Please see tikztree-manual.pdf for instructions and examples.
+
+Version history:
+1.2 (2012/04/20)
+ - level-specific styles (thanks to Andrew Stacey)
+
+1.12 (2011/10/10)
+ - fixed bug that was inserting spaces
+
+1.11 (2010/12/25):
+ - options don't break options for standard TikZ trees
+
+1.1 (2009/12/25):
+ - much deeper trees can be typeset without exceeding capacity
+ - sideways trees
+ - extra package for improved Qtree compatibility
+ - connections can be drawn to whole subtrees instead of nodes
+
+1 (2009/12/22):
+ - initial release
+
+-----
+
+Copyright (C) 2002, 2009 by David Chiang
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
diff --git a/graphics/pgf/contrib/tikz-qtree/pgfsubpic.sty b/graphics/pgf/contrib/tikz-qtree/pgfsubpic.sty
new file mode 100644
index 0000000000..500470afc4
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/pgfsubpic.sty
@@ -0,0 +1,4 @@
+\RequirePackage{pgf}
+
+\input{pgfsubpic.tex}
+\endinput
diff --git a/graphics/pgf/contrib/tikz-qtree/pgfsubpic.tex b/graphics/pgf/contrib/tikz-qtree/pgfsubpic.tex
new file mode 100644
index 0000000000..baa35846ff
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/pgfsubpic.tex
@@ -0,0 +1,209 @@
+% pgfsubpic.tex
+% Version 1.1, 25 Dec 2009
+
+% Copyright 2009 by David Chiang
+
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+% New in version 1.1:
+% - the ability to save a subpicture in local variables
+% - nodes in subpictures are tracked if the subpicture is placed with arbitrary transforms
+% - new \pgffitsubpicture macro to transform a subpicture (preserving aspect) to fit in a desired box
+
+\newdimen\pgf@subpicminx
+\newdimen\pgf@subpicminy
+\newdimen\pgf@subpicmaxx
+\newdimen\pgf@subpicmaxy
+
+% Special virtual node for current subpicture's bounding box
+\expandafter\def\csname pgf@sh@ns@current subpicture\endcsname{rectangle}
+\expandafter\def\csname pgf@sh@np@current subpicture\endcsname{%
+ \def\southwest{\pgfqpoint{\pgf@subpicminx}{\pgf@subpicminy}}%
+ \def\northeast{\pgfqpoint{\pgf@subpicmaxx}{\pgf@subpicmaxy}}%
+}
+\expandafter\def\csname pgf@sh@nt@current subpicture\endcsname{{\pgf@pt@aa}{\pgf@pt@ab}{\pgf@pt@ba}{\pgf@pt@bb}{\the\pgf@pt@x}{\the\pgf@pt@y}} % the transformation at invocation time
+\expandafter\def\csname pgf@sh@pi@current subpicture\endcsname{\pgfpictureid}
+
+% Create a pgfpicture inside an hbox for delayed placement
+\def\pgfsubpicture{%
+\expandafter\global\expandafter\setbox\pgf@hbox=\hbox\bgroup
+\pgfinterruptpicture
+\pgfpicture
+\relax % not sure why. otherwise a curly brace immediately after causes an error
+}
+
+\def\endpgfsubpicture{
+\global\pgf@subpicminx=\pgf@picminx
+\global\pgf@subpicminy=\pgf@picminy
+\global\pgf@subpicmaxx=\pgf@picmaxx
+\global\pgf@subpicmaxy=\pgf@picmaxy
+\global\edef\subpictureid{\pgfpictureid}%
+\pgfsetbaseline{\pgf@picminy}%
+\endpgfpicture%
+\endpgfinterruptpicture%
+\egroup
+}
+
+% Allocate registers for saving a subpicture. #1 is text, not a control sequence.
+\def\pgfnewsubpicture#1{%
+\expandafter\newbox\csname pgf@subpic@hbox@#1\endcsname
+\expandafter\newdimen\csname pgf@subpic@minx@#1\endcsname
+\expandafter\newdimen\csname pgf@subpic@miny@#1\endcsname
+\expandafter\newdimen\csname pgf@subpic@maxx@#1\endcsname
+\expandafter\newdimen\csname pgf@subpic@maxy@#1\endcsname
+}
+
+% saved subpictures are local to the current group
+\def\pgfsavesubpicture#1{%
+\expandafter\setbox\csname pgf@subpic@hbox@#1\endcsname\box\pgf@hbox
+\csname pgf@subpic@minx@#1\endcsname\pgf@subpicminx
+\csname pgf@subpic@miny@#1\endcsname\pgf@subpicminy
+\csname pgf@subpic@maxx@#1\endcsname\pgf@subpicmaxx
+\csname pgf@subpic@maxy@#1\endcsname\pgf@subpicmaxy
+\expandafter\edef\csname pgf@subpic@id@#1\endcsname{\subpictureid}%
+}
+
+% place current subpicture into named subpicture
+\def\pgfmergesubpicture#1{%
+\begin{pgfsubpicture}
+% place current subpicture
+\pgfplacesubpicture
+% override containing picture
+\expandafter\xdef\csname pgf@sh@pi@\subpictureid\endcsname{\csname pgf@subpic@id@#1\endcsname}%
+% copy contents of #1
+\pgfrestoresubpicture{#1}
+\pgflowlevelobj{\pgftransformshift{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}}{\pgfqbox\pgf@hbox}
+\pgfpathrectanglecorners{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}{\pgfqpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}%
+\pgfusepath{use as bounding box}%
+%
+\end{pgfsubpicture}
+\expandafter\setbox\csname pgf@subpic@hbox@#1\endcsname\box\pgf@hbox
+\csname pgf@subpic@minx@#1\endcsname\pgf@subpicminx
+\csname pgf@subpic@miny@#1\endcsname\pgf@subpicminy
+\csname pgf@subpic@maxx@#1\endcsname\pgf@subpicmaxx
+\csname pgf@subpic@maxy@#1\endcsname\pgf@subpicmaxy
+% but don't save the new picture id, keep the existing one
+}
+
+\def\pgfrestoresubpicture#1{%
+\edef\act{\global\noexpand\setbox\pgf@hbox\noexpand\box\csname pgf@subpic@hbox@#1\endcsname}\act
+\expandafter\global\expandafter\pgf@subpicminx\csname pgf@subpic@minx@#1\endcsname
+\expandafter\global\expandafter\pgf@subpicminy\csname pgf@subpic@miny@#1\endcsname
+\expandafter\global\expandafter\pgf@subpicmaxx\csname pgf@subpic@maxx@#1\endcsname
+\expandafter\global\expandafter\pgf@subpicmaxy\csname pgf@subpic@maxy@#1\endcsname
+\xdef\subpictureid{\csname pgf@subpic@id@#1\endcsname}%
+}
+
+% Place a previously-created subpicture, lining up its origin with the current origin
+\def\pgfplacesubpicture{
+\pgfscope
+% expand current bounding box to accommodate subpicture
+\pgfpathrectanglecorners{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}{\pgfqpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}%
+\pgfusepath{use as bounding box}%
+%
+% make the subpicture a node in the containing picture
+\expandafter\gdef\csname pgf@sh@ns@\subpictureid\endcsname{rectangle}%
+\expandafter\xdef\csname pgf@sh@np@\subpictureid\endcsname{%
+ \noexpand\def\noexpand\southwest{\noexpand\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}%
+ \noexpand\def\noexpand\northeast{\noexpand\pgfqpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}%
+}%
+\pgfgettransform\pgf@temp
+\expandafter\xdef\csname pgf@sh@nt@\subpictureid\endcsname{\pgf@temp}%
+\expandafter\xdef\csname pgf@sh@pi@\subpictureid\endcsname{\pgfpictureid}%
+%
+% align origin of subpicture with origin
+\pgftransformshift{\pgfqpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}%
+\pgfqboxsynced{\pgf@hbox}%
+\endpgfscope
+}
+
+% Hook onto existing macro \pgf@shape@interpictureshift.
+% This is called whenever we look up an anchor of a node.
+% This hook recursively checks to see if the node's picture
+% is a subpicture of another, and if so, adjusts its position accordingly.
+
+% This is slow. It makes drawing trees O(n^2) in the depth of the tree.
+% The alternative is to store, for each picture, a list of the nodes
+% inside it. But this way doesn't require us to hijack \pgfnode, and
+% is robust to re-placement of a subpicture. A compromise would be
+% to store, for each picture, a list of the *subpictures* inside it.
+
+\let\orig@pgf@shape@interpictureshift\pgf@shape@interpictureshift
+\def\unwind@subpic#1{%
+% is #1 the current picture?
+\edef\subpicid{#1}%
+\ifx\subpicid\pgfpictureid
+% yes, we're done
+\else
+% does #1 have a parent picture?
+\expandafter\ifx\csname pgf@sh@pi@#1\endcsname\relax
+% no, the original node was not inside the current picture
+\fallback
+\else
+% yes, apply transform and move up to parent picture
+{%
+ \pgfsettransform{\csname pgf@sh@nt@#1\endcsname}%
+ \pgf@pos@transform{\pgf@x}{\pgf@y}%
+ \global\pgf@x=\pgf@x
+ \global\pgf@y=\pgf@y
+}%
+\unwind@subpic{\csname pgf@sh@pi@#1\endcsname}%
+\fi
+\fi
+}
+\def\pgf@shape@interpictureshift#1{%
+\edef\fallback{\pgf@x=\the\pgf@x\pgf@y=\the\pgf@y\noexpand\orig@pgf@shape@interpictureshift{#1}}%
+\unwind@subpic{\csname pgf@sh@pi@#1\endcsname}%
+}
+
+% \pgffitsubpicture{sw}{ne}
+% Make the subpicture fit in the rectangle from sw to ne, preserving its aspect ratio.
+\def\pgffitsubpicture#1#2{%
+% current size
+\pgfpointdiff{\pgfpointanchor{current subpicture}{south west}}{\pgfpointanchor{current subpicture}{north east}}%
+\pgf@xa=\pgf@x \pgf@ya=\pgf@y
+% desired size
+\pgf@process{\pgfpointdiff{#1}{#2}}%
+\pgf@xb=\pgf@x \pgf@yb=\pgf@y
+\pgfmathparse{min(\pgf@xb/\pgf@xa,\pgf@yb/\pgf@ya)}%
+\pgfmathparse{min(1,\pgfmathresult)}%
+\pgftransformscale{\pgfmathresult}%
+%
+% current position
+\pgfpointanchor{current subpicture}{center}%
+\pgf@xa=\pgf@x \pgf@ya=\pgf@y
+% desired position
+% we scaled transform, so apply reverse scaling to argument
+\pgfmathparse{1/\pgfmathresult}%
+\pgf@process{\pgfpointscale{\pgfmathresult}{\pgfpointlineattime{0.5}{#1}{#2}}}%
+\pgf@xb=\pgf@x \pgf@yb=\pgf@y
+\pgfpointdiff{\pgfpoint{\pgf@xa}{\pgf@ya}}{\pgfpoint{\pgf@xb}{\pgf@yb}}%
+\pgftransformshift{\pgfpoint{\pgf@x}{\pgf@y}}%
+}
+
+% utility functions -- not currently used
+
+\def\pgfnodedelete#1{%
+\expandafter\global\expandafter\let\csname pgf@sh@ns@#1\endcsname\relax
+\expandafter\global\expandafter\let\csname pgf@sh@np@#1\endcsname\relax
+\expandafter\global\expandafter\let\csname pgf@sh@nt@#1\endcsname\relax
+\expandafter\global\expandafter\let\csname pgf@sh@pi@#1\endcsname\relax
+\expandafter\global\expandafter\let\csname pgf@sh@ma@#1\endcsname\relax
+}
+
+\def\pgfnodeifexists#1#2#3{%
+\expandafter\ifx\csname pgf@sh@ns@#1\endcsname\relax#3\else#2\fi
+}
+
diff --git a/graphics/pgf/contrib/tikz-qtree/pgftree.sty b/graphics/pgf/contrib/tikz-qtree/pgftree.sty
new file mode 100644
index 0000000000..1c30ea4f8c
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/pgftree.sty
@@ -0,0 +1,6 @@
+\RequirePackage{pgf}
+\RequirePackage{pgffor}
+\RequirePackage{pgfsubpic}
+
+\input{pgftree.tex}
+\endinput
diff --git a/graphics/pgf/contrib/tikz-qtree/pgftree.tex b/graphics/pgf/contrib/tikz-qtree/pgftree.tex
new file mode 100644
index 0000000000..7f67c8ff52
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/pgftree.tex
@@ -0,0 +1,215 @@
+% pgftree.tex
+% Version 1.2, 20 Apr 2012
+
+% Copyright 2009 by David Chiang
+
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+% New in version 1.2:
+% - level-specific styles (thanks to Andrew Stacey)
+
+% New in version 1.1:
+% - major restructuring to not do arbitrary nesting of subpicture environments
+% - sideways trees
+
+% To do:
+% - trees with all leaves at same level
+% - if \nodename does not exist as desired, wrap inside a rectangle node
+% - don't use pgfsubpic internals
+
+\newdimen\levelsep \levelsep=30pt
+\newdimen\subtreesep \subtreesep=2pt
+\newdimen\smuggle@levelsep
+\newdimen\smuggle@subtreesep
+\newdimen\this@levelsep
+\newdimen\this@subtreesep
+
+\def\leveldirection{down}
+\def\siblingdirection{right}
+
+% definitions of growing directions
+\def\pgftree@levelshift{\csname pgftree@levelshift@\leveldirection\endcsname}
+\def\pgftree@parentanchor{\csname pgftree@parentanchor@\leveldirection\endcsname}
+\def\pgftree@childanchor{\csname pgftree@childanchor@\leveldirection\endcsname}
+% these assume that the current subpicture is the child
+\def\pgftree@presiblingshift{\csname pgftree@presiblingshift@\siblingdirection\endcsname}
+\def\pgftree@postsiblingshift{\csname pgftree@postsiblingshift@\siblingdirection\endcsname}
+
+\def\pgftree@levelshift@down{\pgfpoint{0}{-\levelsep}}
+\def\pgftree@parentanchor@down{south}
+\def\pgftree@childanchor@down{north}
+
+\def\pgftree@levelshift@up{\pgfpoint{0}{\levelsep}}
+\def\pgftree@parentanchor@up{north}
+\def\pgftree@childanchor@up{south}
+
+\def\pgftree@levelshift@right{\pgfpoint{\levelsep}{0}}
+\def\pgftree@parentanchor@right{east}
+\def\pgftree@childanchor@right{west}
+
+\def\pgftree@levelshift@left{\pgfpoint{-\levelsep}{0}}
+\def\pgftree@parentanchor@left{west}
+\def\pgftree@childanchor@left{east}
+
+\def\pgftree@presiblingshift@right{\pgf@process{\pgf@x-\pgf@subpicminx \advance\pgf@x\subtreesep \pgf@y 0pt}}
+\def\pgftree@postsiblingshift@right{\pgf@process{\pgf@x\pgf@subpicmaxx \pgf@y 0pt}}
+
+\def\pgftree@presiblingshift@left{\pgf@process{\pgf@x-\pgf@subpicmaxx \advance\pgf@x-\subtreesep \pgf@y 0pt}}
+\def\pgftree@postsiblingshift@left{\pgf@process{\pgf@x\pgf@subpicminx \pgf@y 0pt}}
+
+\def\pgftree@presiblingshift@up{\pgf@process{\pgf@x 0pt \pgf@y-\pgf@subpicminy \advance\pgf@y\subtreesep}}
+\def\pgftree@postsiblingshift@up{\pgf@process{\pgf@x 0pt \pgf@y\pgf@subpicmaxy}}
+
+\def\pgftree@presiblingshift@down{\pgf@process{\pgf@x 0pt \pgf@y-\pgf@subpicmaxy \advance\pgf@y-\subtreesep}}
+\def\pgftree@postsiblingshift@down{\pgf@process{\pgf@x 0pt \pgf@y\pgf@subpicminy}}
+
+% for convenience if you are using \pgftree directly
+\def\drawnode#1{\pgfnode{rectangle}{base}{#1}{\nodename}{\pgfusepath{discard}}}
+\def\drawedge{%
+\pgfpathmoveto{\pgfpointanchor{\parentnodename}{\pgftree@parentanchor}}%
+\pgfpathlineto{\pgfpointanchor{\nodename}{\pgftree@childanchor}}%
+\pgfusepath{stroke}}
+
+% local variables that we need to assign to inside a \pgfforeach
+\newdimen\pgftree@childx
+\newdimen\pgftree@savechildx
+\newdimen\pgftree@childy
+\newdimen\pgftree@savechildy
+\newcount\pgftree@childi
+\newcount\pgftree@savechildi
+\newcount\pgftree@level
+\newdimen\pgftree@depth
+
+%%% \pgftree{subtree}
+
+\def\pgftree#1{%
+\def\nodename{r}%
+\pgftree@level=0\relax
+\pgftree@depth=0pt\relax
+#1%
+\pgfplacesubpicture
+}
+
+%%% \pgfsubtree{root}{subtrees}
+% The first argument draws the root node using PGF/TikZ commands.
+% The node must be named \nodename.
+
+% The second argument is a sequence of 3n tokens.
+% Token 3n-2 draws the nth edge. It should draw an edge from \parentnodename to \nodename.
+% Token 3n-1 is a hook that can change \levelsep or \subtreesep for child n only.
+% Token 3n draws the nth subtree. Its root must be named \nodename.
+
+\pgfnewsubpicture{children}
+\newdimen\pgftree@lastchildx
+\newdimen\pgftree@lastchildy
+
+\def\pgfsubtree#1#2{%
+\let\parentnodename\nodename
+\pgftree@savechildx=\pgftree@childx
+\pgftree@savechildy=\pgftree@childy
+\pgftree@savechildi=\pgftree@childi
+% Build subpicture with all the children and their subtrees
+{\pgftree@childx=0pt%
+\pgftree@childy=0pt%
+\pgftree@childi=0%
+\process@children #2}%
+\begin{pgfsubpicture}%
+% Create node
+#1%
+\ifnum\pgftree@childi>0%
+% Place children
+{% center so that parent is midway between origins of first and last children
+\pgftransformshift{\pgfpointscale{-0.5}{\pgfqpoint{\the\pgftree@childx}{\the\pgftree@childy}}}%
+\pgfplacesubpicture}%
+% Draw the edges
+{\pgftree@childi=0%
+\process@edges #2}%
+\fi
+\end{pgfsubpicture}%
+\global\pgftree@childi=\pgftree@savechildi
+\global\pgftree@childx=\pgftree@savechildx
+\global\pgftree@childy=\pgftree@savechildy
+}
+
+\def\process@children{%
+\pgfutil@ifnextchar\egroup
+{% No more children, step back to origin of last child
+\global\pgftree@childx\pgftree@lastchildx
+\global\pgftree@childy\pgftree@lastchildy
+\global\pgftree@childi\pgftree@childi
+\ifnum\pgftree@childi>0%
+\pgfrestoresubpicture{children}% pass children back to caller
+\fi
+}%
+{\@process@children}%
+}
+\def\@process@children#1#2#3{%
+% #1 is the edge, #2 is the hook, #3 is the child
+{% call hook to get \levelsep and \subtreesep
+% and put them in \this@levelsep and \this@subtreesep
+% to hide them from descendants
+#2%
+\global\smuggle@levelsep\levelsep
+\global\smuggle@subtreesep\subtreesep}%
+\this@levelsep\smuggle@levelsep
+\this@subtreesep\smuggle@subtreesep
+% Build the current child
+{\edef\nodename{\parentnodename-\the\pgftree@childi}%
+\advance\pgftree@level by 1\relax
+\advance\pgftree@depth by \this@levelsep
+#3}%
+\begin{pgfsubpicture}%
+% Place current child
+{%
+% The \levelsep and \subtreesep set in #2 apply only here
+\levelsep\this@levelsep
+\subtreesep\this@subtreesep
+\ifnum\pgftree@childi>0% the first child is always at 0
+\pgftree@presiblingshift \global\advance\pgftree@childx\pgf@x \global\advance\pgftree@childy\pgf@y
+\fi
+\pgftransformshift{\pgftree@levelshift}%
+\pgftransformshift{\pgfqpoint{\the\pgftree@childx}{\the\pgftree@childy}}%
+\pgfplacesubpicture
+\global\pgftree@lastchildx\pgftree@childx
+\global\pgftree@lastchildy\pgftree@childy
+\pgftree@postsiblingshift \global\advance\pgftree@childx\pgf@x \global\advance\pgftree@childy\pgf@y
+}%
+% Save the augmented row of children back into "children"
+\end{pgfsubpicture}
+\ifnum\pgftree@childi>0%
+\pgfmergesubpicture{children}
+\else
+\pgfsavesubpicture{children}%
+\fi
+\advance\pgftree@childi by 1%
+\process@children
+}
+
+\def\process@edges{%
+\pgfutil@ifnextchar\egroup
+{}%
+{\@process@edges}%
+}
+\def\@process@edges#1#2#3{%
+\edef\nodename{\parentnodename-\the\pgftree@childi}%
+#1%
+\advance\pgftree@childi by 1%
+\process@edges
+}
+
+\def\subtreeof#1{%
+% the subpicture which contains a node also contains exactly its subtree
+\csname pgf@sh@pi@#1\endcsname
+}
diff --git a/graphics/pgf/contrib/tikz-qtree/tikz-qtree-compat.sty b/graphics/pgf/contrib/tikz-qtree/tikz-qtree-compat.sty
new file mode 100644
index 0000000000..f60ae32838
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/tikz-qtree-compat.sty
@@ -0,0 +1,72 @@
+% tikz-qtree-compat.tex
+% Version 1.1, 25 Dec 2009
+
+\RequirePackage{tikz-qtree}
+
+\let\orig@Tree\Tree
+\def\Tree{\automath \qtreeprimes@internal \orig@Tree}
+
+\def\qsetw#1{\message{\noexpand\qsetw is not supported, sorry!}}
+\def\faketreewidth#1{\message{\noexpand\faketreewidth is not supported, sorry!}}
+\def\qbalance{\message{\noexpand\qbalance is not supported, sorry!}}
+\def\qframesubtree{\message{\noexpand\qframesubtree is not supported, sorry!}}
+
+% Implement \qroof as a fancy leaf node
+\newtoks\@qrooflabel
+
+\def\qroof#1.{%
+\begin{tikzpicture}[baseline]
+{\pgftransformshift{\pgftree@levelshift}%
+\node(qroofbot){#1};}
+\@qroof
+}
+\def\@qroof{\@ifnextchar\egroup{%
+% since we are putting the qroof inside a node, we already have an inner sep
+% so for the purposes of defining our bounding box, we must eliminate inner sep
+\begin{pgfsubpicture}
+\node [inner sep=0pt] {\the\@qrooflabel};%
+\end{pgfsubpicture}
+\pgfpathrectanglecorners{\pgfpoint{\the\pgf@subpicminx}{\the\pgf@subpicminy}}{\pgfpoint{\the\pgf@subpicmaxx}{\the\pgf@subpicmaxy}}%
+\pgfusepath{use as bounding box}%
+\node (qrooftop) {\the\@qrooflabel};
+\draw \roof@edge{qrooftop}{qroofbot};%
+\end{tikzpicture}}
+{\@@qroof}}
+\def\@@qroof#1{\expandafter\@qrooflabel\expandafter{\the\@qrooflabel #1}\@qroof}
+
+%%% This is lifted straight from qtree.sty
+
+% and another odd convenience:
+%
+% Make _, ^ go into math mode automatically in the scope of \automath
+%
+{ % Temporarily change catcodes
+\catcode`\_=\active
+\catcode`\^=\active
+
+ \global\def\automath{%
+ \catcode`\_=\active
+ \catcode`\^=\active
+ \def_##1{\@ifnextchar^{\automath@two_{##1}}{\ensuremath{\sb{##1}}}}%
+ \def^##1{\@ifnextchar_{\automath@two^{##1}}{\ensuremath{\sp{##1}}}}}
+}
+\def\automath@two#1#2#3#4{\ensuremath{#1{#2}\relax #3{#4}}}
+% Restore default catcodes for ^, _
+\def\noautomath{\catcode`\_=8 \catcode`\^=7 }
+
+
+% Let \0, \1, \2 produce ^0, $'$, $''$
+% The \rlap results in better centering of the label (ignoring the
+% superscript)
+\def\qtreeprimes@internal{%
+ \def\0{\ifmmode ^0\else \rlap{$^0$}\fi}%
+ \def\1{\ifmmode '\else \rlap{$'$}\fi}%
+ \def\2{\ifmmode ''\else \rlap{$''$}\fi}%
+}
+
+% Same commands, but without the \rlap feature
+\def\qtreeprimes{%
+ \def\0{\ensuremath{^0}}%
+ \def\1{\ensuremath{'}}%
+ \def\2{\ensuremath{''}}}
+
diff --git a/graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.pdf b/graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.pdf
new file mode 100644
index 0000000000..37348bbb5b
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.tex b/graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.tex
new file mode 100644
index 0000000000..26bc978f3e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/tikz-qtree-manual.tex
@@ -0,0 +1,402 @@
+\documentclass{article}
+
+\usepackage{mathspec,xltxtra}
+
+\setmainfont[Mapping=tex-text]{DejaVu Serif}
+\setmonofont[Scale=0.95]{DejaVu Sans Mono}
+\newfontfamily\verbfont[Scale=0.8]{DejaVu Sans Mono}
+\newfontfamily\ar[Script=Arabic]{DejaVu Sans}
+\newfontfamily\ja{Hiragino Maru Gothic Pro}
+\newfontfamily\javerbfont[Scale=0.85,LetterSpace=5.0]{Hiragino Maru Gothic Pro}
+\setmathrm{DejaVu Serif} \setmathfont(Digits,Latin){DejaVu Serif}
+
+\usepackage{tikz}
+\usepackage{tikz-qtree}
+
+\usepackage{fullpage}
+
+\usepackage{fancyvrb,fvrb-ex}
+\fvset{gobble=0,xleftmargin=0.5in,xrightmargin=2.75in,formatcom=\verbfont}
+\VerbatimFootnotes
+
+\newcommand\tikztree{\texttt{tikz-qtree}}
+
+\tikzset{>=latex}
+
+\title{\tikztree: better trees with TikZ}
+\author{David Chiang\\\texttt{chiang@isi.edu}}
+\date{Version 1.2 (22 Apr 2012)}
+
+\begin{document}
+
+\maketitle
+
+The \tikztree{} package provides a macro for drawing trees with
+TikZ\footnote{\texttt{http://sourceforge.net/projects/pgf/}} using the
+easy syntax of Alexis Dimitriadis'
+Qtree\footnote{\texttt{http://www.ling.upenn.edu/advice/latex/qtree/}}. It
+improves on TikZ's standard tree-drawing facility by laying out tree
+nodes without collisions; it improves on Qtree by adding lots of
+features from TikZ; and it improves on \verb|pst-qtree| in being
+usable with pdf\TeX{} and
+\XeTeX{}.\footnote{Although \XeTeX{} works with \verb|pst-qtree| using the \verb|xetex-pstricks| package. For typesetting very large trees or a large number of trees, this may be the better option.}
+
+\section{Basics}
+
+To load the package in \LaTeX{}:
+\begin{Verbatim}
+\usepackage{tikz}
+\usepackage{tikz-qtree}
+\end{Verbatim}
+%
+The simplest usage is identical to Qtree:
+\begin{center}
+\begin{SideBySideExample}
+\Tree [.S [.NP [.Det the ] [.N cat ] ]
+ [.VP [.V sat ]
+ [.PP [.P on ]
+ [.NP [.Det the ] [.N mat ] ] ] ] ]
+\end{SideBySideExample}
+\end{center}
+Subtrees are delimited by square brackets. A subtree's root label is
+joined by a dot (\verb|.|) to its opening bracket.\footnote{You can
+also write the label after the closing bracket instead of the opening
+bracket, or both, or neither. Please see the Qtree documentation for
+details.} As in Qtree, spaces are required after every (internal or
+leaf) node label.
+
+\verb|\Tree| works inside or outside a
+\verb|tikzpicture| environment, but many of the features described
+below require the explicit \verb|tikzpicture| environment.
+
+\goodbreak
+
+\section{Tree options}
+
+Some options for standard TikZ trees work for \verb|\Tree| as
+well:
+\begin{itemize}
+\item \verb|level distance|: vertical distance between the anchors of a parent and its children
+\item \verb|sibling distance|: horizontal distance between the boundaries of sister subtrees (not the anchors of their roots, as in standard TikZ trees). Note that TikZ nodes already have some horizontal space around them (\verb|inner xsep|, by default \verb|0.3333em|), so even \verb|sibling distance=0pt| leaves some room.
+\end{itemize}
+These are set either by writing
+\verb|\tikzset{|\textit{option}\verb|=|\textit{value}\verb|}| or by
+writing \verb|[|\textit{option}\verb|=|\textit{value}\verb|]| after a
+\verb|\begin{tikzpicture}| or \verb|\begin{scope}|.\footnote{Allowing
+options after \verb|\Tree| would have made sense, but there would be
+no way to disambiguate the two uses of square brackets.} For example:
+
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{level distance=60pt}
+\Tree [.NP [.Adj tall ] [.N tree ] ]
+\end{tikzpicture}
+%
+\begin{tikzpicture}[sibling distance=72pt]
+\Tree [.NP [.Adj fat ] [.N tree ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+The \verb|grow=|\textit{direction}\/ and \verb|grow'=|\textit{direction}\/ options control the orientation of trees just as for standard TikZ trees. However, \textit{direction}\/ must be one of \verb|up|, \verb|down|, \verb|left|, or \verb|right|. The difference between \verb|grow| and \verb|grow'| is that \verb|grow| places children counterclockwise with respect to their parent and \verb|grow'| places them clockwise:
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}[grow'=down]
+\Tree [.NP [.Adj reverse ] [.N tree ] ]
+\end{tikzpicture}
+%
+\begin{tikzpicture}[grow'=up]
+\Tree [.NP [.Adj upside-down ] [.N tree ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\vspace{3ex}
+\begin{SideBySideExample}
+\begin{tikzpicture}[grow=left]
+\tikzset{level distance=60pt,sibling distance=18pt}
+\tikzset{execute at begin node=\strut}
+\Tree [.NP [.Adj sideways ] [.N tree ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+Note that in sideways trees, \verb|level distance| is horizontal and \verb|sibling distance| is vertical. Sideways trees do take a little extra adjusting to look right, since the defaults are geared towards vertically growing trees. The meaning of the option \verb|execute at begin node=\strut| is, before typesetting the label of every node, insert the command \verb|\strut|, which is an invisible box that maximizes the height and depth of the node.
+
+\section{Styles}
+
+\subsection{Node styles}
+
+The following TikZ styles are automatically applied to tree nodes,
+providing a hook for you to change the appearance of nodes or particular kinds of nodes:
+\begin{itemize}
+\item \verb|every tree node| applies to every node (default: \verb|anchor=base|)
+\item \verb|every internal node| applies to every internal node
+\item \verb|every leaf node| applies to every leaf node
+\item \texttt{every level $n$ node} applies to every node at level $n$, where $n=0$ is the root
+\end{itemize}
+
+The options for nodes are all handled by TikZ and are
+described in detail in the TikZ documentation. For example, if you
+have a font named \verb|\ar| and want to set all the leaf labels in
+this font:
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{grow'=down}
+\tikzset{every leaf node/.style={font=\ar}}
+\Tree [.S [.NP القط ]
+ [.VP [.V وجلس ]
+ [.PP [.P على ] [.NP حصيرة ] ] ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+You can make the nodes in a sideways tree line up on their left edge using \verb|anchor=base west|:
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{grow'=right,level distance=32pt}
+\tikzset{execute at begin node=\strut}
+\tikzset{every tree node/.style={anchor=base west}}
+\Tree [.S [.NP [.Det the ] [.N cat ] ]
+ [.VP [.V sat ]
+ [.PP [.P on ]
+ [.NP [.Det the ] [.N mat ] ] ] ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+In Qtree, it was allowed to use a line break (\verb|\\|) inside a node. TikZ nodes by default don't allow this, but the \verb|align| option (in PGF/TikZ version 2.1 or later) enables it as a side effect:\footnote{Thanks to Alan Munn for figuring this out. Prior to PGF/TikZ version 2.1, the fix was to use the options \verb|text width=2em,text centered|.}
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{every tree node/.style={align=center,anchor=north}}
+\Tree [.S [.NP Det\\the N\\cat ]
+ [.VP V\\sat
+ [.PP P\\on
+ [.NP Det\\the N\\mat ] ] ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+\subsection{Edge styles}
+
+The \verb|edge from parent| style applies to every edge (default value: \verb|draw|). By defining this style, you can change the appearance of all the edges in a tree. For example, if you want the edges to be a little darker:
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{edge from parent/.append style={very thick}}
+\Tree [.S [.NP [.Det the ] [.N cat ] ]
+ [.VP [.V sat ]
+ [.PP [.P on ]
+ [.NP [.Det the ] [.N mat ] ] ] ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+Note that we must say \verb|.append style| instead of just \verb|.style|, in order to retain the \verb|draw| option without which the edge will be invisible.
+As a more complex example, edges have an
+\verb|edge from parent path| option which lets you change the shape of
+the edge. Its value is a TikZ path expressed in terms of
+\verb|\tikzparentnode|, the parent node, and \verb|\tikzchildnode|,
+the child node.
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{edge from parent/.style=
+ {draw,
+ edge from parent path={(\tikzparentnode.south)
+ -- +(0,-8pt)
+ -| (\tikzchildnode)}}}
+\Tree [.S [.NP [.Det the ] [.N cat ] ]
+ [.VP [.V sat ]
+ [.PP [.P on ]
+ [.NP [.Det the ] [.N mat ] ] ] ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+\subsection{Node placement styles}
+
+The following styles aren't applied to nodes, but affect the placement of nodes. By defining these styles, you can change the options \verb|level distance| or \verb|sibling distance| for different parts of the tree.\footnote{Thanks to Andrew Stacey for helping with the implementation.}
+\begin{itemize}
+\item \texttt{level $n$} applies to the placement of level $n$ (relative to level $n-1$)
+\item \texttt{level $n$+} applies to level $n$ and below
+\item \verb|interior| applies to the placement of internal nodes (except the root)
+\item \verb|frontier| applies to the placement of leaves
+\end{itemize}
+
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{level 1/.style={level distance=36pt}}
+\tikzset{level 2/.style={level distance=32pt}}
+\tikzset{level 3+/.style={level distance=28pt}}
+\Tree [.S [.NP [.Det the ] [.N cat ] ]
+ [.VP [.V sat ]
+ [.PP [.P on ]
+ [.NP [.Det the ] [.N mat ] ] ] ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+In this context, you can also set the option \verb|distance from root|, which positions a level relative to the root instead of the parent level. This is particularly useful for aligning all the leaf nodes:
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\tikzset{frontier/.style={distance from root=150pt}}
+\Tree [.S [.NP [.Det the ] [.N cat ] ]
+ [.VP [.V sat ]
+ [.PP [.P on ]
+ [.NP [.Det the ] [.N mat ] ] ] ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+Unfortunately, the depth of the deepest leaf node is a global property of the tree and not easy to know during tree rendering, so you do have to specify the absolute depth of the leaf nodes. It will typically be an integer multiple of \verb|level distance|.
+
+\section{Embedding TikZ nodes}
+
+Inside a \verb|\Tree|, in place of a node label, you can use a TikZ
+\verb|\node| command.\footnote{\verb|\Tree| specifically watches out
+for the token \verb|\node|; do not use \verb|\path node| or other
+equivalents.}
+\begin{quote}
+\verb|\node [|\textit{options}\verb|] (|\textit{name}\verb|) {|\textit{label}\verb|};|
+\end{quote}
+Don't forget the terminating semicolon. The
+\verb|[|\textit{options}\verb|]|, which are optional, let you change
+the appearance of the node; for example, the \verb|draw| option draws
+a border around the node. The \verb|(|\textit{name}\verb|)|, which is
+also optional, can be used for drawing lines/arrows to/from the node.
+\begin{center}
+\begin{Example}
+\begin{tikzpicture}
+\Tree [.CP [.NP \node(wh){what}; ]
+ [.C$'$ [.I did ]
+ [.\node[draw]{IP};
+ [.NP [.Det the ] [.N cat ] ]
+ [.VP [.V sit ]
+ [.PP [.P on ]
+ [.\node[draw]{NP};
+ [.NP [.Det a ] [.N book ] ]
+ [.PP [.P about ] [.NP \node(t){$t$}; ] ] ] ] ] ] ] ]
+\draw[semithick,->] (t)..controls +(south west:5) and +(south:5)..(wh);
+\end{tikzpicture}
+\end{Example}
+\end{center}
+
+You can also refer to the whole subtree rooted at the node named \textit{name}\/ using \verb|\subtreeof{|\textit{name}\verb|}|:
+\begin{center}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\Tree [.S [.NP [.Det the ] [.N cat ] ]
+ [.\node(site){VP}; [.V sat ] ] ]
+\begin{scope}[shift={(1in,0.5in)}]
+\Tree [.\node(root){VP}; VP$^\ast$
+ [.PP [.P on ]
+ [.NP [.Det the ] [.N mat ] ] ] ]
+\end{scope}
+\draw[->](\subtreeof{root}.140)..
+ controls +(west:1) and +(east:1)..(site);
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+\noindent Another example for machine translation people:
+\begin{center}
+\fvset{formatcom=\javerbfont}
+\begin{SideBySideExample}
+\begin{tikzpicture}
+\begin{scope}[frontier/.style={distance from root=150pt}]
+\Tree [.S [.NP [.Det \node(e1){the}; ]
+ [.N \node(e2){cat}; ] ]
+ [.VP [.V \node(e3){sat}; ]
+ [.PP [.P \node(e4){on}; ]
+ [.NP [.Det \node(e5){the}; ]
+ [.N \node(e6){mat}; ] ] ] ] ]
+\end{scope}
+\begin{scope}[xshift=9pt,yshift=-5in,grow'=up,
+ frontier/.style={distance from root=150pt}]
+\tikzset{every leaf node/.style={font=\ja}}
+\Tree [.S [.NP \node(j1){猫ãŒ}; ]
+ [.VP [.PP [.NP [.NP \node(j2){マット}; ]
+ [.Part \node(j3){ã®}; ]
+ [.NP \node(j4){上}; ] ]
+ [.P \node(j5){ã«}; ] ]
+ [.V \node(j6){土}; ] ] ]
+\end{scope}
+\begin{scope}[dashed]
+\draw (e1)--(j1);
+\draw (e2)--(j1);
+\draw (e3)--(j6);
+\draw (e4)--(j4);
+\draw (e4)--(j5);
+\draw (e5)--(j2);
+\draw (e6)--(j2);
+\end{scope}
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+
+\section{Explicit edges}
+
+The edge from a parent to a child node is normally automatically drawn
+for you, but you can do it yourself with an \verb|\edge| command
+\emph{before}\/ the corresponding child node. It is similar to the
+TikZ \verb|edge from parent| command.\footnote{Except that a TikZ
+\texttt{edge from parent} comes after the child node. I thought it was
+more logical to put it before.}
+\begin{quote}
+\verb|\edge [|\textit{options}\verb|];|
+\end{quote}
+Again, don't forget the semicolon. The
+\verb|[|\textit{options}\verb|]|, which are optional, let you change
+the appearance of the edge, as described above.
+
+There is a predefined edge style \verb|roof| that draws a triangle-shaped edge over a node, like Qtree's \verb|\qroof|:
+\begin{center}
+\begin{Example}
+\begin{tikzpicture}[level distance=40pt]
+\Tree [.S [.NP [.N this ] ]
+ [.VP [.V is ]
+ [.NP \edge[roof]; {a noun phrase the complexity of which
+ is too great for me to parse} ] ] ]
+\end{tikzpicture}
+\end{Example}
+\end{center}
+
+You can also add a label to the edge, using the following syntax:
+\begin{quote}
+\verb|\edge [|\textit{options}\verb|] node [|\textit{options}\verb|] {|\textit{label}\verb|};|
+\end{quote}
+Typically one will use the \verb|auto| option for edge labels, which
+places the label to the side of the edge.
+\begin{center}
+\begin{SideBySideExample}[xrightmargin=1.25in]
+\newcommand{\initial}[1]{\ensuremath{\alpha_{\textrm{\scriptsize #1}}}}
+\newcommand{\auxiliary}[1]{\ensuremath{\beta_{\textrm{\scriptsize #1}}}}
+\begin{tikzpicture}[level distance=36pt,sibling distance=12pt]
+\Tree [.\initial{sat}
+ \edge node[auto=right]{1}; \initial{cat}
+ \edge[dashed] node[auto=left]{2};
+ [.\auxiliary{on}
+ \edge node[auto=left]{2}; \initial{mat} ] ]
+\end{tikzpicture}
+\end{SideBySideExample}
+\end{center}
+The fact that \verb|auto=left| draws a label on the right and
+\verb|auto=right| draws a label on the left makes sense if you think
+about the tree growing from the root to the leaves.
+
+\section{Qtree compatibility}
+
+For basic trees, \tikztree{} can be used as a drop-in replacement for Qtree, but most of Qtree's advanced features are either not accessed in the same way in \tikztree{} or not implemented at all. There is a package \verb|tikz-qtree-compat| which can be loaded to improve compatibility. Supported so far are:
+\begin{itemize}
+\item Superscripts and subscripts outside of math mode, and \verb|\automath|
+\item The \verb|\0|, \verb|\1|, and \verb|\2| commands, and \verb|\qtreeprimes|
+\item The \verb|\qroof| command
+\end{itemize}
+For unsupported commands, warning messages are printed, but your file should compile.
+
+\section*{Acknowledgements}
+This was all Dan Gildea's idea. Thanks to Alan Munn for his very helpful suggestions, and to Andrew Stacey for modifications.
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikz-qtree/tikz-qtree.sty b/graphics/pgf/contrib/tikz-qtree/tikz-qtree.sty
new file mode 100644
index 0000000000..8f572cdb8e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/tikz-qtree.sty
@@ -0,0 +1,4 @@
+\RequirePackage{tikz}
+\RequirePackage{pgftree}
+\input{tikz-qtree.tex}
+\endinput
diff --git a/graphics/pgf/contrib/tikz-qtree/tikz-qtree.tex b/graphics/pgf/contrib/tikz-qtree/tikz-qtree.tex
new file mode 100644
index 0000000000..c28db5bae6
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-qtree/tikz-qtree.tex
@@ -0,0 +1,204 @@
+% tikz-qtree.tex
+% Version 1.2, 20 Apr 2012
+
+% Copyright (C) 2002, 2009 by David Chiang
+
+% This program is free software; you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation; either version 2 of the License, or
+% (at your option) any later version.
+
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+
+% You should have received a copy of the GNU General Public License along
+% with this program; if not, write to the Free Software Foundation, Inc.,
+% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+% New in version 1.2:
+% - level-specific styles (thanks to Andrew Stacey)
+
+% New in version 1.11:
+% - make options compatible with standard tikz trees
+
+% New in version 1.1:
+% - sideways trees
+
+%% These macros facilitate building up an object recursively before
+%% putting it into the input stream.
+
+\newtoks\@result
+\def\@call#1#2{\let\@cont=#2\bgroup\@result={}#1}
+\def\@return{\global\@result=\@result\egroup\@cont}
+
+\def\@ifequal#1#2{\edef\testa{#1}\edef\testb{#2}\ifx\testa\testb}
+
+%% scan a tree: this just scans a subtree and then puts it onto the
+%% input stream
+
+\def\Tree{\@call\@subtree\@Tree}
+\def\@Tree{%
+%\showthe\@result %debug
+\ifpgfpicture % is there a test for tikzpicture?
+\pgftree{\the\@result}%
+\else
+\tikzpicture[baseline]\pgftree{\the\@result}\endtikzpicture
+\fi
+}
+
+%% scan a subtree
+\newtoks\child@list
+\newtoks\root@node
+
+\def\@subtree[{%
+\root@node={}%
+\pgfutil@ifnextchar.{\@call\@interior\@@subtree}{\@@@subtree}}
+\def\@@subtree{%
+\root@node=\@result
+\@@@subtree
+}
+\def\@@@subtree{%
+\@call\@children\@@@@subtree
+}
+\def\@@@@subtree]{%
+\child@list=\@result
+\pgfutil@ifnextchar.{\@call\@interior\@@@@@subtree}{\@@@@@@subtree}}
+\def\@@@@@subtree{%
+%%% Check for mismatch.
+\@ifequal{\the\root@node}{\pgfutil@empty}%
+ \root@node=\@result
+\fi
+\@ifequal{\the\root@node}{\the\@result}\else
+ \message{Warning: mismatched labels, \the\root@node{} and \the\@result.}%
+\fi
+\@@@@@@subtree
+}
+\def\@@@@@@subtree{%
+\@ifequal{\the\root@node}{\pgfutil@empty}%
+\edef\act{\noexpand\@result={%
+\noexpand\subtree@hook
+\noexpand\pgfsubtree{\noexpand\path coordinate (\noexpand\nodename);}{\the\child@list}}}%
+\else
+\edef\act{\noexpand\@result={%
+\noexpand\subtree@hook
+\noexpand\pgfsubtree{\the\root@node}{\the\child@list}}}%
+\fi
+\act
+\@return}
+
+%% scan a sequence of subtrees or leaves
+
+\newif\ifscanned@edge
+
+\def\@children{%
+\scanned@edgefalse
+\child@list{}%
+\@@children}
+\def\@@children{%
+\pgfutil@ifnextchar]{\@result\child@list\@return}{% end of children
+\pgfutil@ifnextchar\edge{% explicit edge
+\ifscanned@edge
+\message{Warning: more than one edge given for a single child}\let\next\@@children % ignore
+\else
+\scanned@edgetrue\let\next\@@@children
+\fi
+\@call\@edge\next}{%
+% else, a real node is next
+\ifscanned@edge\else % no explicit edge, supply default
+\expandafter\child@list\expandafter{\the\child@list{\edge@adapter{}}}%
+\fi
+\scanned@edgefalse
+\pgfutil@ifnextchar[{% subtree
+\expandafter\child@list\expandafter{\the\child@list{\level@hook\interior@hook}}%
+\@call\@subtree\@@@children}%
+{% leaf
+\expandafter\child@list\expandafter{\the\child@list{\level@hook\frontier@hook}}%
+\@call\@leaf\@@@children}%
+}}}
+\def\@@@children{%
+% wrap child inside curly braces
+\expandafter\@result\expandafter{\expandafter{\the\@result}}%
+\edef\act{\noexpand\child@list{\the\child@list \the\@result}}\act
+\@@children
+}
+
+\def\@interior.{\@result{\node[alias=\nodename][every tree node,every internal node,every level \the\pgftree@level\space node/.try]}\@label}
+
+\def\@leaf{\@call\@label\@@leaf}
+\def\@@leaf{\edef\act{\noexpand\@result{%
+\noexpand\subtree@hook
+\noexpand\pgfsubtree{\noexpand\node[alias=\noexpand\nodename][every tree node,every leaf node,every level \noexpand\the\pgftree@level\space node/.try]\the\@result}{}}}\act\@return}
+
+\def\@edge\edge #1;{%
+\@result{\edge@adapter{#1}}%
+\@return}
+\def\edge@adapter#1{%
+\let\tikzparentnode\parentnodename
+\let\tikzchildnode\nodename
+\path edge from parent #1;%
+}
+
+\def\level@hook{%
+{\advance\pgftree@level by 1\relax
+\xdef\@act{\noexpand\tikzset{level \the\pgftree@level/.try}}}\@act}
+\def\subtree@hook{%
+%\edef\act{\noexpand\tikzset{every tree node/.append code={\noexpand\tikzset{every level \the\pgftree@level+ node/.try}}}}\act
+{\advance\pgftree@level by 1\relax
+\xdef\@act{\noexpand\tikzset{level \the\pgftree@level+/.try}}}\@act
+}
+\def\interior@hook{\tikzset{interior/.try}}
+\def\frontier@hook{\tikzset{frontier/.try}}
+
+% a label is either text or PGF/TikZ code starting with \node
+\def\@label{\pgfutil@ifnextchar\node{\@litlabel}{\@@label}}
+\def\@@label#1 {%
+\expandafter\@result\expandafter{\the\@result{#1};}%
+\@return}
+
+% try to copy \node command into \@result without stripping braces
+\def\@litlabel\node{\@@litlabel}
+\def\@@litlabel{\pgfutil@ifnextchar\bgroup{\@@@litlabel}{\@@@@litlabel}}
+\def\@@@litlabel#1{\expandafter\@result\expandafter{\the\@result {#1}}\@@litlabel}
+\def\@@@@litlabel#1;{\expandafter\@result\expandafter{\the\@result #1;}\@return}
+
+% predefined edges
+
+\def\tree@edge#1#2{(#1.\pgftree@parentanchor) -- (#2.\pgftree@childanchor)}
+
+\def\roof@edge#1#2{\csname roof@edge@\leveldirection\endcsname{#1}{#2}}
+\def\roof@edge@down#1#2{(#1.south) -- (#2.north west) -- (#2.north east) -- cycle}
+\def\roof@edge@up#1#2{(#1.north) -- (#2.south west) -- (#2.south east) -- cycle}
+\def\roof@edge@left#1#2{(#1.west) -- (#2.north east) -- (#2.south east) -- cycle}
+\def\roof@edge@right#1#2{(#1.east) -- (#2.north west) -- (#2.south west) -- cycle}
+
+%%% Options
+\pgfkeysgetvalue{/tikz/level distance/.@cmd}{\orig@leveldistance}
+\tikzoption{level distance}{\pgfmathsetlength\levelsep{#1}\orig@leveldistance#1\pgfeov}
+\tikzoption{distance from root}{\pgfmathsetlength\levelsep{#1}\advance\levelsep by -\pgftree@depth}
+\pgfkeysgetvalue{/tikz/sibling distance/.@cmd}{\orig@siblingdistance}
+\tikzoption{sibling distance}{\pgfmathsetlength\subtreesep{#1}\orig@siblingdistance#1\pgfeov} % different semantics
+
+% I don't really like this scheme
+\pgfkeysgetvalue{/tikz/grow/.@cmd}{\orig@grow}
+\tikzoption{grow}{\csname grow@#1\endcsname\orig@grow#1\pgfeov}
+\pgfkeysgetvalue{/tikz/grow'/.@cmd}{\orig@growprime}
+\tikzoption{grow'}{\csname growprime@#1\endcsname\orig@growprime#1\pgfeov}
+\def\grow@up{\def\leveldirection{up}\def\siblingdirection{left}}
+\def\grow@down{\def\leveldirection{down}\def\siblingdirection{right}}
+\def\growprime@up{\def\leveldirection{up}\def\siblingdirection{right}}
+\def\growprime@down{\def\leveldirection{down}\def\siblingdirection{left}}
+\def\grow@left{\def\leveldirection{left}\def\siblingdirection{down}}
+\def\grow@right{\def\leveldirection{right}\def\siblingdirection{up}}
+\def\growprime@left{\def\leveldirection{left}\def\siblingdirection{up}}
+\def\growprime@right{\def\leveldirection{right}\def\siblingdirection{down}}
+
+% defaults appropriate for linguistic trees
+\def\tikz@edge@to@parent@path{\tree@edge{\tikzparentnode}{\tikzchildnode}}
+\tikzset{every tree node/.style={anchor=base}}
+\tikzset{every leaf node/.style={}}
+\tikzset{every internal node/.style={}}
+
+% predefined roof style
+\tikzset{roof/.style={edge from parent path=\roof@edge{\tikzparentnode}{\tikzchildnode}}}
diff --git a/graphics/pgf/contrib/tikz-relay/README.txt b/graphics/pgf/contrib/tikz-relay/README.txt
new file mode 100644
index 0000000000..c7897d621e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-relay/README.txt
@@ -0,0 +1,20 @@
+Copyright (C) 2018 by Luis Paulo Laus, <laus@utfpr.edu.br>
+------------------------------------------------------------
+
+The tikz-relay package may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1 of this license or (at your option) any later version. The latest version of this license is in:
+ http://www.latex-project.org/lppl.txt and version 1 or
+later is part of all distributions of LaTeX version 1999/12/01 or later.
+
+Version: 1.2
+Version date: 2018-06-13
+
+------------------------------------------------------------
+
+This package contains a collection of symbols for typesetting electrical wiring diagrams for relay control systems. The symbols are meant to be in agreement with international standard IEC-60617 which is worldwide adopted with perhaps the exception of USA. It extends and modify, when needed, the TikZ-libray circuits.ee.IEC. A few non-standard symbols are also included mainly to be used in presentations, particularly with beamer package.
+
+------------------------------------------------------------
+
+If you are interest in generating the documentation departing from tikz-relay-doc.tex you are going to need pgfmanual-en-macros available at ctan:/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+http://mirrors.ctan.org/tex-archive/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+
+------------------------------------------------------------ \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.pdf b/graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.pdf
new file mode 100644
index 0000000000..091c8ef9aa
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.tex b/graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.tex
new file mode 100644
index 0000000000..ebf5cf47f7
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.tex
@@ -0,0 +1,146 @@
+%% This is file `BeamerAnimation.tex'
+%% Version: 1.0.1
+%% Version date: 2018-02-19
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software `tikzlibrarysfc.code.tex' and its
+%% accompanying documentation and `The Copyright Holder' referring to the
+%% person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+
+\documentclass{beamer}
+\usepackage{tikz,units}
+\usetikzlibrary{backgrounds, circuits.ee.IEC.relay}
+
+\makeatletter
+\newcommand*{\overlaynumber}{\number\beamer@slideinframe}
+\makeatother
+
+\tikzset{ % alt and visible (overlay)
+ alt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
+ },
+ visible/.code args={<#1>#2}{%
+ \alt<#1>{\pgfkeysalso{#2}}{}
+ }
+}
+
+\colorlet{LBlue}{blue!20}
+\colorlet{LRed}{red!20}
+
+\begin{document}
+
+\begin{frame}{Four-Step Sequencer \overlaynumber{}}
+\noindent \begin{center}
+\hspace*{-0.05\textwidth}\resizebox{1.1\textwidth}{!}{
+\begin{tikzpicture}[circuit ee IEC relay,thick,x=6\tikzcircuitssizeunit,y=5\tikzcircuitssizeunit]
+
+ \draw(-1.5,0) node[left]{$\unit[0]{V}$} --+(9,0)
+ (-1.5,4) node[left]{$\unit[+24]{V}$} --+(9,0);
+
+ \draw (0,0)
+ node[contact]{}
+ to [relay coil={info=$K_1$,name=k11,alt={<1,2,7-17>{}{fill=LRed}}}] ++(0,1)
+ to [break contact={info=$K_2$,name=k24,alt={<1-5,11-20>{}{activated}}}] ++(0,1)
+ node[contact,name=N1]{}
+ to [make contact={info=$K_4$,name=k43,alt={<1-13,19-20>{}{activated}}}] ++(0,1)
+ to [make contact={push button={info=$b_1$},name=b1,alt={<1-16,20>{}{activated}}}] ++(0,1)
+ node[contact]{};
+ \draw (N1) -- ++(1,0)
+ to [make contact={info=$K_1$,name=k12,alt={<1,2,7-17>{}{activated}}}] ++(0,1) -- ++(0,1)
+ node[contact]{};
+ \draw (N1) -- ++(-1,0)
+ to [make contact={push button={info=$b_S$},name=bs,alt={<1,4-20>{}{activated}}}] ++(0,2)
+ node[contact]{};
+ \draw (2,0)
+ node[contact]{}
+ to [relay coil={info=$K_2$,name=k21,alt={<1-5,11-20>{}{fill=LRed}}}] ++(0,1)
+ to [break contact={info=$K_3$,name=k34,alt={<1-9,15-20>{}{activated}}}] ++(0,1)
+ node[contact,name=N1]{}
+ to [make contact={info=$K_1$,name=k13,alt={<1,2,7-17>{}{activated}}}] ++(0,1)
+ to [make contact={push button={info=$b_2$},name=b2,alt={<1-4,8-20>{}{activated}}}] ++(0,1)
+ node[contact]{};
+ \draw (N1) -- ++(1,0)
+ to [make contact={info=$K_2$,name=k22,alt={<1-5,11-20>{}{activated}}}] ++(0,1) -- ++(0,1)
+ node[contact]{};
+ \draw (4,0)
+ node[contact]{}
+ to [relay coil={info=$K_3$,name=k31,alt={<1-9,15-20>{}{fill=LRed}}}] ++(0,1)
+ to [break contact={info=$K_4$,name=k44,alt={<1-13,19-20>{}{activated}}}] ++(0,1)
+ node[contact,name=N1]{}
+ to [make contact={info=$K_2$,name=k23,alt={<1-5,11-20>{}{activated}}}] ++(0,1)
+ to [make contact={push button={info=$b_3$},name=b3,alt={<1-8,12-20>{}{activated}}}] ++(0,1)
+ node[contact]{};
+ \draw (N1) -- ++(1,0)
+ to [make contact={info=$K_3$,name=k32,alt={<1-9,15-20>{}{activated}}}] ++(0,1) -- ++(0,1)
+ node[contact]{};
+ \draw (6,0) node[contact]{}
+ to [relay coil={info=$K_4$,name=k41,alt={<1-13,19-20>{}{fill=LRed}}}] ++(0,1)
+ to [break contact={info=$K_1$,name=k14,alt={<1,2,7-17>{}{activated}}}] ++(0,1)
+ node[contact,name=N1]{}
+ to [make contact={info=$K_3$,name=k33,alt={<1-9,15-20>{}{activated}}}] ++(0,1)
+ to [make contact={push button={info=$b_4$},name=b4,alt={<1-12,16-20>{}{activated}}}] ++(0,1)
+ node[contact]{};
+ \draw (N1) -- ++(1,0)
+ to [make contact={info=$K_4$,name=k42,alt={<1-13,19-20>{}{activated}}}] ++(0,1) -- ++(0,1)
+ node[contact]{};
+ \begin{pgfonlayer}{background}
+ \visible<2-3>{
+ \draw[fill=LBlue,LBlue](bs) circle (0.4);
+ }
+ \visible<3-6,18-20>{
+ \draw[fill=LBlue,LBlue](k11) circle (0.4);
+ \draw[fill=LBlue,LBlue](k12) circle (0.4);
+ \draw[fill=LBlue,LBlue](k13) circle (0.4);
+ \draw[fill=LBlue,LBlue](k14) circle (0.4);
+ }
+ \visible<5-7>{
+ \draw[fill=LBlue,LBlue](b2) circle (0.4);
+ }
+ \visible<6-10>{
+ \draw[fill=LBlue,LBlue](k21) circle (0.4);
+ \draw[fill=LBlue,LBlue](k22) circle (0.4);
+ \draw[fill=LBlue,LBlue](k23) circle (0.4);
+ \draw[fill=LBlue,LBlue](k24) circle (0.4);
+ }
+ \visible<9-11>{
+ \draw[fill=LBlue,LBlue](b3) circle (0.4);
+ }
+ \visible<10-14>{
+ \draw[fill=LBlue,LBlue](k31) circle (0.4);
+ \draw[fill=LBlue,LBlue](k32) circle (0.4);
+ \draw[fill=LBlue,LBlue](k33) circle (0.4);
+ \draw[fill=LBlue,LBlue](k34) circle (0.4);
+ }
+ \visible<13-15>{
+ \draw[fill=LBlue,LBlue](b4) circle (0.4);
+ }
+ \visible<14-18>{
+ \draw[fill=LBlue,LBlue](k41) circle (0.4);
+ \draw[fill=LBlue,LBlue](k42) circle (0.4);
+ \draw[fill=LBlue,LBlue](k43) circle (0.4);
+ \draw[fill=LBlue,LBlue](k44) circle (0.4);
+ }
+ \visible<17-19>{
+ \draw[fill=LBlue,LBlue](b1) circle (0.4);
+ }
+ \end{pgfonlayer}
+\end{tikzpicture}}
+\par\bigskip
+Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+\end{center}
+\end{frame}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.pdf b/graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.pdf
new file mode 100644
index 0000000000..5e5474edaa
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.tex b/graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.tex
new file mode 100644
index 0000000000..acf93711c8
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-relay/doc/tikz-relay-doc.tex
@@ -0,0 +1,960 @@
+%% This is file `tikz-relay-doc.tex'
+%% Version: 1.2
+%% Version date: 2018-06-13
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software `tikzlibrarysfc.code.tex' and its
+%% accompanying documentation and `The Copyright Holder' referring to the
+%% person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+% to allow compression of cross references.
+% both pgfmanual and pgfplots manual would be MUCH larger without it.
+\pdfminorversion=5
+\pdfobjcompresslevel=2
+\documentclass[a4paper]{ltxdoc}
+\usepackage[hyphens]{url}
+\usepackage[version=latest]{pgf}
+\usepackage{calc,listings,tikz,units}
+\usepackage{pdfpages}
+% if you need an index.
+\usepackage{makeidx}
+
+% for cross-references:
+\usepackage[pdfborder=0 0 0]{hyperref}
+ \hypersetup{%
+ colorlinks=true, % use true to enable colors below:
+ linkcolor=blue,%red,
+ filecolor=blue,%magenta,
+ pagecolor=blue,%red,
+ urlcolor=blue,%cyan,
+ citecolor=blue,
+ %frenchlinks=false, % small caps instead of colors
+ pdfborder=0 0 0, % PDF link-darstellung, falls colorlinks=false. 0 0 0: nix. 0 0 1: default.
+ %plainpages=false, % Das ist notwendig, wenn die Seitenzahlen z.T. in Arabischen und z.T. in römischen Ziffern gemacht werden.
+ %pdfsubject=,
+ }
+
+% this is due to some stupidity in pgfmanual-en-macros.tex:
+% if this macro is not defined, the automatic cross-referencing is
+% disabled:
+\def\pgfautoxrefs{1}
+
+% We need lots of libraries\ldots
+\usetikzlibrary{backgrounds,circuits.logic.IEC}
+
+\newif\ifgdccodebasic
+\newif\ifgdccodeogdf
+
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage{amsmath,amssymb}
+\usepackage{xxcolor}
+%% \usepackage{pifont}
+\usepackage{tgpagella} % no ligatures (test)
+\usepackage{makeidx}
+\usepackage{enumitem}
+\usepackage[T1]{fontenc}
+\usepackage[latin9]{inputenc}
+
+
+\input{pgfmanual-en-macros} % Borrowed from TikZ/PGF manual
+% look at ctan:/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+% http://mirrors.ctan.org/tex-archive/graphics/pgf/base/doc/macros/pgfmanual-en-macros.tex
+
+
+\makeatletter
+% the index of PGF contains
+% ----
+% This index only contains automatically generated entries. A good index should
+% also contain carefully selected keywords. This index is not a good index.
+% ---
+% use this line to reset that entry:
+\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index}
+}
+\makeatother
+
+
+% this here allows automatic cross referencing:
+\RequirePackage{pgfmanual}
+
+% this here configures automatic cross referencing.
+% It works for ANY package that uses pgfkeys and is independent on tikz/pgf.
+\pgfkeys{
+ % whenever an unqualified key is found, the following key prefix
+ % list is tried to find a match.
+ /pdflinks/search key prefixes in={/tikz/,/pgf/},
+ %
+ % the link prefix written to the pdf file:
+ /pdflinks/internal link prefix=pgfp,
+ %
+ /pdflinks/codeexample links=true,
+ /pdflinks/warnings=false, % for debugging
+ /pdflinks/show labels=false,% for debugging
+}
+
+% belongs to \usepackage{makeindex}
+\makeindex
+
+\makeatletter
+\renewcommand*\l@section[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \setlength\@tempdima{2.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
+ \endgroup
+ \fi}
+\renewcommand*\l@subsection{\@dottedtocline{2}{2.5em}{3.3em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{5.8em}{4.2em}}
+\def\@pnumwidth{2.2em}
+\makeatother
+
+
+% Global styles:
+\tikzset{
+ every plot/.style={prefix=plots/pgf-},
+ shape example/.style={
+ color=black!30,
+ draw,
+ fill=yellow!30,
+ line width=.5cm,
+ inner xsep=2.5cm,
+ inner ysep=0.5cm}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file really starts here, all the above is for pgfmanual
+% compatibility
+%\usetikzlibrary{circuits.ee.IEC.relay}
+\input ../tex/tikzlibrarycircuits.ee.IEC.relay.code
+\tikzset{circuit symbol unit=2.5mm}
+\sloppy
+
+\tikzset{help lines/.style={blue!20,very thin}}
+
+%\tikzset{circuit symbol open/.style={draw=blue,fill=blue!10},circuit symbol filled/.style={fill=blue,draw},circuit symbol lines/.style={draw=orange},circuit symbol wires/.style={ultra thick,draw=violet}}
+
+% counter for automatic placement
+\newcount\xpos
+\newcount\ypos
+
+\begin{document}
+
+\title{Typesetting Electrical Wiring Diagrams for \emph{Relay} Control Systems with \LaTeX{} and \tikzname{}}
+\author{Luis Paulo Laus\\e-mail: \texttt{laus@utfpr.edu.br}}
+\date{Version: 1.2, Version date: 2018-06-13}
+
+\maketitle
+
+\section{Abstract}
+
+This package contains a collection of symbols for typesetting electrical wiring diagrams for relay control systems. The symbols are meant to be in agreement with international standard IEC~60\,617 which is worldwide adopted with perhaps the exception of USA. It extends and modify, when needed, the \tikzname-libray |circuits.ee.IEC|. A few non-standard symbols are also included mainly to be used in presentations, particularly with |beamer| package.
+
+\section{Introduction}
+Relay control system has been gradually replaced by PLC (Programable Controllers) software. However, small automation systems are usually implemented using relay control systems and the descriptions of PLC connection to external components are done using the same symbols as in relay control systems. Relay control systems are traditionally introduced in the very begin of industrial automation disciplines. This package provides symbols to represent those systems accordingly to IEC~60\,617.
+
+Very unfortunately, the author has no access to the current version of that standard. The standards consulted during the elaboration of this package are:
+\begin{itemize}
+\item IEC~60\,617-2/1996 Graphical symbols for diagrams -- Part 2: Symbol elements, qualifying symbols and other symbols having general application;
+\item IEC~60\,617-4/1996 Graphical symbols for diagrams -- Part 4: Passive components;
+\item IEC~60\,617-8/1996 Graphical symbols for diagrams -- Part 8: Measuring instruments, lamps and signalling devices;
+\item IEC~60\,617-7/1996 Graphical symbols for diagrams -- Part 7: Switchgear, controlgear and protective devices.
+\end{itemize}
+All of the aforementioned standards have been withdrawn and correspond to edition~2 of IEC~60\,617. The up-to-date edition, at the moment this document was written, is IEC~60\,617:2012~DB. The author trust that the symbols in this package have not been modified between versions, but without access to the new edition it is impossible to say for sure. One indication that improves confidence in the up-to-dateness of this package is the fact that the current editions is based in editions~2 and 3 and the blunt fact that symbols, once adopted, tend to remain unchanged over time. There are also other libraries with free access\footnote{See, for instance, \url{https://symbols.radicasoftware.com/stencil/IEC.html} and \url{https://www.tracepartsonline.net/} and search for ``CEI IEC''.} that show symbols with the same form they appear herein. Please, report any inaccuracy and out-to-date symbols.
+
+You can also help if you have access to the current standard and can verify and report the accuracy of the information presented herein. Particularly regarding the dimensions employed in the graphs. Some of them were devised using soundings geometrical rules, but many (like circle diameters) were estimated using poor resolution graphics.
+
+The international standard IEC~60\,617 is worldwide adopted with perhaps the exception of USA which uses NEMA -- National Electrical Manufacturers Association. If you are interested in NEMA standard you should refer to |tikz-ladder| package. This package is meant to be used for PLC programming, but can also be used for relay control systems.
+
+
+\section{Relay Library}
+\begin{pgflibrary}{circuits.ee.IEC.relay}
+This library provides graphics for electrical wiring diagrams for relay control systems according to the international standard IEC~60\,617. The library was written to extend the \tikzname-library |circuit.ee.IEC|. The reader is urged to read the Section~``Circuit Libraries'' of \tikzname\ manual.
+This library defines the following key:
+
+\begin{key}{/tikz/circuit ee IEC relay}
+This key should be passed as an option to a picture or a scope that contains a diagram. It will do some internal setups.
+\end{key}
+
+\begin{key}{/tikz/activated}
+Adding this key to a contact symbol will ``activate the contact'' so that a |make contact| will close, a |break contact| will open and a |change-over contact| will change. The ``activated'' symbols are not in accordance with IEC~60\,617 because contact shall be drawn in the deactivated position, but sometimes we need to illustrate how a circuit works and this comes in handy. The main purpose is for \beamer\ presentations, see Section~\ref{sec:beamer} for details and further examples. Compare deactivated (normal) and activated break contact:
+\begin{codeexample}[width=3cm]
+\tikz[circuit ee IEC relay]
+ \draw (0,0) to[break contact] (0,1.5)
+ (1,0) to[break contact,activated] (1,1.5);
+\end{codeexample}
+\end{key}
+
+\begin{key}{/tikz/term=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}}
+ This key is meant to place text information about the upper terminal of the component. It has nearly the same effect as the |label| key, only the placement position is change and following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every term (initially {font=\string\scriptsize})}
+ Set this style to configure the styling of term labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ The \meta{options} and \meta{angle} are passed directly to the |label| command. For a detailed discussion of the |label| option refer to the \tikzname\ manual.
+
+ The use of this key is exemplified in Section~\ref{sec:labels}.
+\end{key}
+
+\begin{key}{/tikz/term'=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}}
+ This key is similar to |term|, but it is meant to place text information about the lower terminal of the component. It has nearly the same effect as the |label| key, only the placement position is change and following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every term' (initially {font=\string\scriptsize})}
+ Set this style to configure the styling of term' labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ The \meta{options} and \meta{angle} are passed directly to the |label| command. For a detailed discussion of the |label| option refer to the \tikzname\ manual.
+
+ The use of this key is exemplified in Section~\ref{sec:labels}.
+\end{key}
+
+\begin{key}{/tikz/term''=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}}
+ This key is similar to |term|, but it is meant to place text information about the upper left terminal of the component mainly for |change over contact|. It has nearly the same effect as the |label| key, only the placement position is change and following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every term'' (initially {font=\string\scriptsize})}
+ Set this style to configure the styling of term'' labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ The \meta{options} and \meta{angle} are passed directly to the |label| command. For a detailed discussion of the |label| option refer to the \tikzname\ manual.
+
+ The use of this key is exemplified in Section~\ref{sec:labels}.
+\end{key}
+
+\end{pgflibrary}
+
+
+\section{Convention}
+In this library, the |mid| anchor is used to place annotations, which are secondary symbols placed on top of another symbol, on contacts and the |north| or |south| anchor on |relay coil|. The key |info|, as described in Section~``Circuit Libraries'' of \tikzname\ manual, is used to place the component identification. Observe that the |info| has to be provide for the annotation, if any, or for the symbol itself if the annotation is placed at right side of the symbol. The keys |term|, |term'| and |term''| are used to place terminal numbers by the side of component terminals. See Section~\ref{sec:labels} for details and examples.
+
+\section{Symbols}
+\begin{minipage}{\linewidth}
+The symbols in this library are:
+\begin{center}
+\begin{tabular}{lcc}
+\emph{key} & IEC~60\,617 \emph{number} & \emph{Appearance}\\
+|/tikz/resistor| & 04-01-01 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[resistor] (0,1);}\\
+|/tikz/fuse| & 07-21-01 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[fuse] (0,1);}\\
+|/tikz/inductor IEC relay graphic| & 04-A3-01 &
+\tikz[circuit ee IEC relay,set inductor graphic = inductor IEC relay graphic,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[inductor] (0,1);}\\
+|/tikz/bulb| & 08-10-01 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[bulb] (0,1);}\\
+|/tikz/magnetic sensor| & 02-08-02 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[magnetic sensor] (0,1);}\\
+|/tikz/thermic sensor| & 02-08-01 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[thermic sensor] (0,1);}\\
+|/tikz/make contact| & 07-02-01 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[make contact] (0,1);}\\
+|/tikz/break contact| & 07-02-03 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[break contact] (0,1);}\\
+|/tikz/change over contact| & 07-02-04 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[change over contact] (0,1);}\\
+|/tikz/relay coil| & 07-15-01 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[relay coil] (0,1);}\\
+|/tikz/proximity sensor coil| & 07-19-01 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[proximity sensor coil] (0,1);}\\
+|/tikz/mechanical interlock| & 02-12-11 &
+\tikz[circuit ee IEC relay,baseline=0cm] {\draw[help lines] (-1.25,-0.5) grid[step=\tikzcircuitssizeunit] +(2.5,1); \draw[dashed] (-0.75,0) to[mechanical interlock] (0.75,0);}\\
+|/tikz/horn| & 08-10-05 &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-0.75,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[horn] (0,1);}\\
+|/tikz/var horn IEC relay graphic| & 08-10-05 &
+\tikz[circuit ee IEC relay,set horn graphic = var horn IEC relay graphic,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[horn] (0,1);}
+\end{tabular}
+\end{center}
+\bigskip\end{minipage}
+\begin{center}
+\begin{tabular}{lcc}
+\emph{key} & IEC~60\,617 \emph{number} & \emph{Appearance}\\
+|/tikz/buzzer| & NA &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.25) grid[step=\tikzcircuitssizeunit] +(2.5,1.5); \draw (0,0) to[buzzer] (0,1);}\\
+|/tikz/loud speaker| & NA &
+\tikz[circuit ee IEC relay,baseline=.5cm] {\draw[help lines] (-1.25,-0.75) grid[step=\tikzcircuitssizeunit] +(2.5,2.5); \draw (0,0) to[loud speaker] (0,1);}
+\end{tabular}
+\end{center}
+Three symbols, |resistor|, |inductor| and |bulb| are already defined in \tikzname-library |circuits.ee.IEC|. They are redefined in this package because their proportion was not in agreement with IEC~60\,617. The symbols |inductor| is listed in Annex~A of IEC~60\,617 implying it is deleted and should appear in old diagrams or documentation explaining is it obsolete. To use this symbol set the option \verb|set inductor graphic = inductor IEC relay graphic| either globally with |tikzset| or locally as option of a picture or a scope.
+
+``Change over contact'' is short for ``change-over break before make contact''. The symbols |make contact|, |break contact| and |change over contact| can be activated (the contact changes the position) and this feature is needed for creating presentations. See Section~\ref{sec:beamer} for details.
+
+This list may look short, but several other symbols are possible combining these symbols with annotation. In fact, it is annotation that empowers this library.
+
+
+\subsection{Annotation for relay coils}
+\begin{minipage}{\linewidth}
+The |relay coil| can be used alone or combined with annotations to form:
+\begin{center}
+\hspace*{-3ex}\begin{tikzpicture}[circuit ee IEC relay,thick,x=16\tikzcircuitssizeunit,y=\tikzcircuitssizeunit]
+ \draw[help lines] (-0.5,-38) grid[step=\tikzcircuitssizeunit] +(4,45);
+ \global\xpos=0
+ \global\ypos=0
+ \foreach \x in {, slow operating, slow releasing, slow operating and slow releasing, high speed, mechanically latched, alternating current, polarized, electronic, remanent, var remanent, thermal, unaffected by alternating current, mechanically resonant, solenoid valve, pulse counter}
+ {
+ \ifnum \xpos>3 \global\xpos=0 \global\advance\ypos by 11 \fi
+ \node[below,align=center,text width=20\tikzcircuitssizeunit] at (\the\xpos,-\the\ypos) {\verb|\x|};
+ \draw (\the\xpos,-\the\ypos) to[relay coil={\x}] (\the\xpos,6-\the\ypos);
+ \global\advance\xpos by 1
+ }
+\end{tikzpicture}
+\end{center}
+\bigskip\end{minipage}
+Note that symbol |relay coil| is used to produce the graphic for other devices which in fact are not relays at all.
+
+
+\subsection{Annotation for contacts}
+\begin{minipage}{\linewidth}
+The contacts can be used alone or combined with annotations to form:
+\begin{center}
+\begin{tikzpicture}[circuit ee IEC relay,thick,x=16\tikzcircuitssizeunit,y=\tikzcircuitssizeunit]
+ \draw[help lines] (-0.5,-82) grid[step=\tikzcircuitssizeunit] +(4,89);
+ \global\xpos=0
+ \global\ypos=0
+ \foreach \x in {, manually operated, protected manually operated, var push button, push button, pull switch, turn switch, emergency switch, pedal operated, lever operated, crank operated, key operated, removable handle, proximity switch, touch switch, magnetic switch, position switch, roller, level switch, var level switch, thermal switch, delayed activation, delayed deactivation, delayed both, static switch, circuit breaker, counter switch, pressure switch, emergency pull switch, var emergency pull switch, emergency turn switch, var emergency turn switch}
+ {
+ \ifnum \xpos>3 \global\xpos=0 \global\advance\ypos by 11 \fi
+ \node[below,align=center,text width=14\tikzcircuitssizeunit] at (\the\xpos,-\the\ypos) {\verb|\x|};
+ \draw (\the\xpos,-\the\ypos) to[make contact={\x}] (\the\xpos,6-\the\ypos);
+ \global\advance\xpos by 1
+ }
+\end{tikzpicture}
+\end{center}
+\bigskip\end{minipage}
+Temperature sensitive switch is indicated by either the Greek capital letter $\Theta$ or by the operating temperature conditions written at the right side of the contact and it can be achieved using the |info'| key. It is also usual to indicate pressure sensitive switch with roman letter P or by the operating pressure conditions in the same way.
+
+Some symbols can be obtained by combining in this library with symbol from the \tikzname-library |circuit.ee.IEC|, for instance, a static switch, passing current in one direction only (IEC symbol 07-25-03) can be drawn using a |make contact| and a |diode| as:
+\begin{center}
+\begin{tikzpicture}[circuit ee IEC relay,thick,
+ x=4\tikzcircuitssizeunit,
+ y=2\tikzcircuitssizeunit]
+ \draw[help lines] (-0.5,-.5) grid[step=\tikzcircuitssizeunit] +(2,4);
+ \draw (0,0) -- ++(0,.5)
+ to [diode={scale=-1}] ++(0,1)
+ to [make contact] ++(0,1) -- ++(0,.5);
+ \draw (1,0) -- ++(0,.5)
+ to [diode] ++(0,1)
+ to [make contact] ++(0,1) -- ++(0,.5);
+\end{tikzpicture}
+\end{center}
+
+In this case, the space or grid should be treated very carefully.
+
+\subsection{Annotation self-placement}
+\begin{minipage}{\linewidth}
+For contacts, the |mid| anchor is used to place the annotation at correct position. For instance, a |push button| applied to all kinds of contacts produces:
+\begin{center}
+\begin{tikzpicture}[circuit ee IEC relay,thick,x=10\tikzcircuitssizeunit,y=3\tikzcircuitssizeunit]
+ \draw[help lines] (-0.5,-0.3334) grid[step=\tikzcircuitssizeunit] +(5.7,3);
+ \global\xpos=0
+ \global\ypos=0
+ \foreach \x/\s in {make contact, make contact/activated, break contact, break contact/activated, change over contact, change over contact/activated}
+ {
+ \ifnum \xpos>5 \global\xpos=0 \global\advance\ypos by 3 \fi
+ \draw (\the\xpos,-\the\ypos) to[\x={push button,\s}] (\the\xpos,2-\the\ypos);
+ \global\advance\xpos by 1
+ }
+\end{tikzpicture}
+\end{center}
+\bigskip\end{minipage}
+
+In the case of a |position switch|, |delayed activation|, |delayed deactivation|, |delayed both| and |static switch|, the orientation is also adjusted with the help of |input| anchor:
+\begin{center}
+\begin{tikzpicture}[circuit ee IEC relay,thick,x=10\tikzcircuitssizeunit,y=3\tikzcircuitssizeunit]
+ \draw[help lines] (-0.5,-0.3334) grid[step=\tikzcircuitssizeunit] +(5.7,3);
+ \global\xpos=0
+ \global\ypos=0
+ \foreach \x/\s in {make contact, make contact/activated, break contact, break contact/activated, change over contact, change over contact/activated}
+ {
+ \ifnum \xpos>5 \global\xpos=0 \global\advance\ypos by 3 \fi
+ \draw (\the\xpos,-\the\ypos) to[\x={position switch,\s}] (\the\xpos,2-\the\ypos);
+ \global\advance\xpos by 1
+ }
+\end{tikzpicture}
+\end{center}
+
+\noindent{}and
+
+\begin{center}
+\begin{tikzpicture}[circuit ee IEC relay,thick,x=10\tikzcircuitssizeunit,y=3\tikzcircuitssizeunit]
+ \draw[help lines] (-0.5,-0.3334) grid[step=\tikzcircuitssizeunit] +(5.7,3);
+ \global\xpos=0
+ \global\ypos=0
+ \foreach \x/\s in {make contact, make contact/activated, break contact, break contact/activated, change over contact, change over contact/activated}
+ {
+ \ifnum \xpos>5 \global\xpos=0 \global\advance\ypos by 3 \fi
+ \draw (\the\xpos,-\the\ypos) to[\x={delayed both,\s}] (\the\xpos,2-\the\ypos);
+ \global\advance\xpos by 1
+ }
+\end{tikzpicture}
+\end{center}
+
+Annotations can be mirrored using the apostrophe ('), e.g., a position switch, mechanically operated in both directions with two separate circuits would be:
+\begin{codeexample}[width=2.3cm]
+\begin{tikzpicture}[circuit ee IEC relay,thick]
+ \draw
+ (0,0) to[break contact={name=sw1,position switch,position switch'}] ++(0,2)
+ (2,0) to[make contact={name=sw2,position switch,position switch'}] ++(0,2);
+ \draw[dashed] (sw1.south) -- (sw2.north);
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsection{Change over contact}
+Change over contact, or more exactly, ``change-over break before make contact'' is the only contact in this library that has three terminals. The bottom and top right terminal are connected in the usual way, namely, using the command |to|. To allow the user access to the top left terminal, an anchor named\footnote{The same name convention adopted in \tikzname-library |circuits.ee.IEC| is used here: the symbol default orientations make the component appear as rotated $90^{\circ}$ clockwise. The terminals on the left (bottom in the normal orientation) are named inputs and anchors with names starting with |input| are automatically placed. The terminals on the right (top in the normal orientation) are the outputs and anchors with names starting with |output| are automatically placed.} |output 1| is automatically placed. To use this anchor, the contact has to be named. The reference is available in the same and subsequent paths. Therefore,
+
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[circuit ee IEC relay,thick]
+ \draw (0,0) to[change over contact={name=sw1}] ++(0,2) coordinate(n1)
+ (sw1.output 1) -- (sw1.output 1 |- n1);
+ \draw[{<[sep=2pt]}-,red,thin] (sw1.output 1) -- ++(-0.5,0)
+ node[left]{3$^{\mathrm{rd}}$ term.};
+\end{tikzpicture}
+\end{codeexample}
+
+\noindent{}where \verb|(n1)| is used to store the coordinates of the second point making it possible to draw a vertical line with the same vertical level\footnote{In this case, the second point coordinates are known to be \verb|(0,2)|, but in general it is a good idea to use the command |coordinate| to store the information for future use. This allows for the contact to be moved easily when needed.}. The second part of the |\draw| command just draws a line from |(sw1.output 1)| to \verb!(sw1.output 1 |- n1)!, a point with $x$ coordinate equal to |(sw1.output 1)|${}_{x}$ and $y$ coordinate equal to |(n1)|${}_{y}$. Refer to Section~``Coordinates at Intersections'' of \tikzname\ manual for details. This example also uses relative points; refer to Section~``Special Syntax for Specifying Points'' of \tikzname\ manual for details. The use of relative coordinates and anchor allows the easy repositioning of the elements. Keep in mind that:
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[thick]
+ \coordinate (n1) at (0,0); \coordinate(n2) at (1.3,1);
+ \draw node[red]{$\times$}
+ (n1) -- (n1 |- n2) node[draw=violet]{} node[above left] {\verb!|-!} -- (n2)
+ (n1) -- (n1 -| n2) node[draw=orange]{} node[below right]{\verb!-|!} -- (n2)
+ node[blue]{$\times$};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\section{Labels\label{sec:labels}}
+You can place information at the left side of a symbol using |info| and at the right side with |info'|. Note that, if the symbol has an annotation at is left side and you want to use |info|, you have to use |info| in the annotation. The same is valid for |info'| if the annotation is at the right side of the symbol.
+For instance, a relay coil named K1 is labelled as:
+\begin{codeexample}[width=2.5cm]
+\tikz[circuit ee IEC relay,thick]
+ \draw (0,0) to[relay coil={info=K1}] (0,1);
+\end{codeexample}
+\noindent{}but a slow operating relay coil has to be labelled in the |slow operating| key as:
+\begin{codeexample}[width=2.5cm]
+\tikz[circuit ee IEC relay,thick]
+ \draw (0,0) to[relay coil={slow operating={info=K2}}] (0,1);
+\end{codeexample}
+\noindent{}failing to do so produces incorrect labelling position as:
+\begin{codeexample}[width=2.5cm]
+\tikz[circuit ee IEC relay,thick,red]
+ \draw (0,0) to[relay coil={slow operating,info=K2}] (0,1);
+\end{codeexample}
+\noindent{}In the last case, the |info| is applied to |relay coil|, not to the annotation |slow operating|.
+
+On the other hand, if the annotation is placed at right of the symbol, like a solenoid valve, the |info| is placed in the symbol itself (not in the annotation):
+\begin{codeexample}[width=3cm]
+\tikz[circuit ee IEC relay,thick]
+ \draw (0,0) to[relay coil={solenoid valve,info=Y2}] (0,1);
+\end{codeexample}
+
+The same reasoning applies to the right side using |info'| key: if there is an annotation at the right side, use the |info'| inside the annotation key:
+\begin{codeexample}[width=4.5cm]
+\tikz[circuit ee IEC relay,thick]
+ \draw (0,0)
+ to[relay coil={solenoid valve={info'={[blue]RELEASE}},info=Y2}] (0,1);
+\end{codeexample}
+\noindent{}but if there is no annotation or the annotation is on the left side, use the |info'| inside the symbol:
+\begin{codeexample}[width=3.8cm]
+\tikz[circuit ee IEC relay,thick]
+ \draw (0,0)
+ to[relay coil={slow operating={info=K2},info'={[blue]START}}] (0,1);
+\end{codeexample}
+
+It also possible to label the terminals for assembling reference. There are three specially designed keys for it:
+
+\begin{description}[align=right,leftmargin=14mm,labelwidth=12mm,labelsep=2mm]
+\item [{term}] places a label at the top right side of the symbol. It is meant to identify the top terminal. Because of \tikzname\ convention, an anchor named |output| is placed on this terminal;
+\item [{term'}] places a label at the bottom right side of the symbol. It is meant to identify the bottom terminal. Because of \tikzname\ convention, an anchor named |input| is placed on this terminal;
+\item [{term''}] places a label at the top left side of the symbol. It is meant to identify the top left terminal of a change over contact. Because of \tikzname\ convention, an anchor named |output 1| is placed on this terminal. Key term'' places the label such that a line to |output 1| can be drawn vertically or horizontally without crossing the label.
+\end{description}
+Each one of these three keys can be individually styled using the style, e.g., |every term'/.style|.
+
+A slow operating relay coil:
+\begin{codeexample}[width=2.5cm]
+\tikz[circuit ee IEC relay,thick]
+ \draw (0,0) to[relay coil={slow operating={info=K2},term=A1,term'=A2}] (0,1);
+\end{codeexample}
+A change over contact of the same relay:
+\begin{codeexample}[width=2.5cm]
+\tikz[circuit ee IEC relay,thick]
+ \draw (0,0) to[change over contact={info=K2,
+ term=34,term'=31,term''=32}] (0,1);
+\end{codeexample}
+
+
+\section{Design Guidance\label{sec:guidance}}
+This section brings some recommendations that reflect the way I produce diagrams for relay control systems. It may or may not work for you. Feel free to e-mail me if you have better ideas.
+
+The first thing to consider is that, as the manual says, ``\tikzname\ \emph{ist kein Zeichenprogramm}'' which translates to ``\tikzname\ \emph{is not a drawing program}''. You shall start with a draft of you diagram and then codify it using \tikzname. Generally, a handmade pencil sketch will do. In this draft, you shall use node names for future reference. For instance, the |contact| named |N1| below is used as a connection point for the latching contact of relay $K_1$; contacts |N0L| and |N24L| are used for power rails (left side).
+
+\begin{codeexample}[width=2.5cm]
+\begin{tikzpicture}[circuit ee IEC relay,thick]
+ \draw (0,0)
+ node[contact,name=N0L]{}
+ to [relay coil={info=$K_1$}] ++(0,1)
+ to [break contact={thermal switch={info=$F_R$}}] ++(0,1)
+ to [break contact={push button={info=$b_0$}}] ++(0,1)
+ node[contact,name=N1]{}
+ to [make contact={push button={info=$b_1$}}] ++(0,1)
+ node[contact,name=N24L]{};
+ \node[left,red] at(N1) {N1};
+ \node[left,red] at(N0L) {N0L};
+ \node[left,red] at(N24L) {N24L};
+\end{tikzpicture}
+\end{codeexample}
+
+The second thing to consider is that |tikz-relay| uses the |\tikzcircuitssizeunit| to keep all figures proportional. Therefore, when you consider any dimension related to symbol size it is good idea to set that dimension in respect to |\tikzcircuitssizeunit|, i.e., using |\tikzcircuitssizeunit| as the unit of length. The default value of |\tikzcircuitssizeunit| is 7\,pt or approximately 2.46\,mm and it can be set by the |circuit symbol unit| key among several other keys. You can think of |\tikzcircuitssizeunit| as the module size $M$ in IEC~60\,617.
+Most symbols presented in the IEC~60\,617 are draw using $M=\unit[2.5]{mm}$. This can be achieved placing the command \verb|\tikzset{circuit symbol unit=2.5mm}| in the document preamble which changes |\tikzcircuitssizeunit| to \the\tikzcircuitssizeunit\ document wide (not too different from the default value though). You can establish your own length unit and set $x$ and $y$ to that length unit. In this way you will be working on a grid; if it is too big or too small you will have to change a single declaration.
+
+Finishing up the previous example, the |x| grid is set to five |\tikzcircuitssizeunit| to allow horizontal space for labels and |y| grid is set to four |\tikzcircuitssizeunit| because the symbols used in control circuit schematics are two |\tikzcircuitssizeunit| tall, so there will be one |\tikzcircuitssizeunit| above and below the symbol. Starting at |N1|, the latching contact of $K_1$ is placed one horizontal length unit aside $b_1$.
+
+\begin{codeexample}[width=4.1cm]
+\begin{tikzpicture}[circuit ee IEC relay,thick,
+ x=5\tikzcircuitssizeunit,y=4\tikzcircuitssizeunit]
+ \draw (0,0)
+ node[contact,name=N0L]{}
+ to [relay coil={info=$K_1$}] ++(0,1)
+ to [break contact={thermal switch={info=$F_R$}}] ++(0,1)
+ to [break contact={push button={info=$b_0$}}] ++(0,1)
+ node[contact,name=N1]{}
+ to [make contact={push button={info=$b_1$}}] ++(0,1)
+ node[contact,name=N24L]{};
+ \draw (N1) -- ++(1,0)
+ to [make contact={info=$K_1$}] ++(0,1)
+ node[contact,name=N24R]{};
+% power rails
+ \draw (N24L) ++(-0.8,0) node[left]{$\unit[+24]{V}$} -- (N24R) -- ++(0.3,0)
+ (N0L) ++(-0.8,0) node[left]{$\unit[0]{V}$} -- (N0L -| N24R) -- ++(0.3,0);
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}Power rails are placed using named nodes. This is not really necessary since the beginning and end of the power rails lines can be determined easily because we are working on a grid.
+
+Because of the direction chosen when the symbols were first defined in \tikzname, we start from the bottom moving to the top of the diagram. This is not mandatory, although changing the direction requires that all symbols and annotations be negatively scaled (locally rotated by $180^{\circ}$), for instance, the last example would be:
+
+\begin{codeexample}[width=4.1cm]
+\begin{tikzpicture}[circuit ee IEC relay,thick,
+ x=5\tikzcircuitssizeunit,y=4\tikzcircuitssizeunit,
+ every circuit symbol/.style={scale=-1},
+ every circuit annotation/.style={scale=-1}]
+ \draw (0,0)
+ node[contact,name=N24L]{}
+ to [make contact={push button={info=$b_1$}}] ++(0,-1)
+ node[contact,name=N1]{}
+ to [break contact={push button={info=$b_0$}}] ++(0,-1)
+ to [break contact={thermal switch={info=$F_R$}}] ++(0,-1)
+ to [relay coil={info=$K_1$}] ++(0,-1)
+ node[contact,name=N0L]{};
+ \draw (1,0)
+ node[contact,name=N24R]{}
+ to [make contact={info=$K_1$}] ++(0,-1) -- (N1);
+% power rails
+ \draw (N24L) ++(-0.8,0) node[left]{$\unit[+24]{V}$} -- (N24R) -- ++(0.3,0)
+ (N0L) ++(-0.8,0) node[left]{$\unit[0]{V}$} -- (N0L -| N24R) -- ++(0.3,0);
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}where \verb|every circuit symbol/.style={scale=-1}| and \verb|every circuit annotation/.style={scale=-1}| were used to scale the symbols and annotations, respectively. This example produces the very same diagram, but we start at the top and work down to the bottom.
+
+\subsection{Some tricks}
+Power circuits schematics use a more diverse variety of symbol height than control circuit schematics. Thus, it is better to set the grid to a smaller value. This allows for a higher control over the symbols distance. For each symbol, consider its height and allow some extra space between symbols.
+
+Some symbols like relay coils for power circuits schematics are not available, thus we can draw a square by the side of the relay contacts connecting it to the right most contact using a dashed line. The |mid| anchor is perfect for that. Actually, we shall start at the |mid| anchor of the right most contact and draw a dashed line to the left using relative coordinates, at the end of the dashed line we place a square node with no text inside, but with a label above (or left) identifying the relay coil.
+
+The inductors look a bit odd: the semicircles end in very sharp corners. It is better to change the |line joint| to |bevel|.
+
+You can use different styles for |info| and |info'|, and also for |term|, |term'| and |term''|, but it is usually a bad idea. It is normally best to set a style for one of these keys and copy it to the others.
+
+For example, a star-delta motor starter has power circuit schematic like:
+
+% Power Circuit Schematic
+
+\begin{codeexample}[width=4.5cm]
+\begin{tikzpicture}[circuit ee IEC relay,thick,
+ x=\tikzcircuitssizeunit,
+ y=1.2\tikzcircuitssizeunit,
+ every inductor/.style={line join=bevel},
+ every term/.style={gray,font=\scriptsize},
+ every term'/.style=every term,
+ every term''/.style=every term]
+ \draw (0,0)
+ to[make contact={term=1,term'=2}] ++(0,4)
+ -- ++(0,1)
+ node[contact,name=N1R]{}
+ -- ++(0,4)
+ to [inductor={name=LR,term=1,term'=4}] ++(0,5)
+ node[contact,name=N2R]{}
+ to [thermic sensor={info=$F_R$,term=1,term'=2}] ++(0,3)
+ to [make contact={term=1,term'=2}] ++(0,4)
+ to [fuse={info={$\unit[3\times5]{A}$}}] ++(0,4)
+ node[above]{R};
+ \draw (0,0) -- ++(4,0) node[contact]{}
+ to[make contact={term=3,term'=4}] ++(0,4)
+ -- ++(0,1)
+ node[contact,name=N1S]{}
+ -- ++(0,4)
+ to [inductor={name=LS,term=2,term'=5}] ++(0,5)
+ node[contact,name=N2S]{}
+ to [thermic sensor={term=3,term'=4}] ++(0,3)
+ to[make contact={term=3,term'=4}] ++(0,4)
+ to [fuse] ++(0,4)
+ node[above]{S};
+ \draw (4,0) -- ++(4,0)
+ to[make contact={name=K2T,term=5,term'=6}] ++(0,4)
+ -- ++(0,1)
+ node[contact,name=N1T]{}
+ -- ++(0,4)
+ to [inductor={name=LT,term=3,term'=6}] ++(0,5)
+ node[contact,name=N2T]{}
+ to [thermic sensor={term=5,term'=6}] ++(0,3)
+ to[make contact={name=K1T,term=5,term'=6}] ++(0,4)
+ to [fuse] ++(0,4)
+ node[above]{T};
+ \draw
+ (N1R) -- ++(2,0)
+ to[make contact={term=3,term'=4}] ++(0,4) |- (N2S)
+ (N1S) -- ++(2,0)
+ to[make contact={name=K3T,term=5,term'=6}] ++(0,4) |- (N2T)
+ (N1T) -| ++(2,-6) -| ++(-15,6) -- ++(3,0)
+ to[make contact={term=1,term'=2}] ++(0,4) |- (N2R);
+ \draw[dashed](K1T.mid) --++(-10,0) % relay coils
+ node[left,draw,solid,minimum size=3mm,label={[above]:$K_1$}]{};
+ \draw[dashed](K2T.mid) --++(-10,0)
+ node[left,draw,solid,minimum size=3mm,label={[above]:$K_2$}]{};
+ \draw[dashed](K3T.mid) --++(-10,0)
+ node[left,draw,solid,minimum size=3mm,label={[above]:$K_3$}]{};
+\end{tikzpicture}
+\end{codeexample}
+
+Control circuit schematics can use a much bigger grid space because the symbol heights are the same, i.e. always two units of length. When setting the |x| unit of length, you need to consider the space occupied by labels and annotations.
+
+Sometimes we need to place a symbol upside-down. This is the case of the star-delta motor starter control circuit schematic in which a change-over contact is used to change from $K_2$ to $K_3$. To achieved the correct orientation, a negative |y| scaling is set by |yscale=-1|. This contact is named |t1| for future reference, in this case, to access the |output 1| and connect it to $K_2$. If you think it is against IEC~60\,617 rules to drawn the change-over contact upset-down you will end up with a terrible layout because of the position of the common terminal.
+
+The relay coil $K_3$ is also placed using top-down direction and, consequently, it has to be negatively scaled (mirrored). In this case, we need to mirror the symbol in both |x| and |y| direction so the terminal and symbol identification will be correctly located. So, |scale=-1| is used.
+
+The power rails are drawn using grid coordinates. A fuse is place in the top power rail.
+
+% Control Circuit Schematic
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay,thick,
+ x=9\tikzcircuitssizeunit,
+ y=5\tikzcircuitssizeunit,
+ every term/.style={gray,font=\scriptsize},
+ every term'/.style=every term,
+ every term''/.style=every term]
+ \draw (0,0)
+ node[contact]{}
+ to [relay coil={info=$K_1$,term=A1,term'=A2}] ++(0,1) -- ++(0,1)
+ node[contact,name=N1]{}
+ to [break contact={thermal switch={info=$F_R$},term=21,term'=22}] ++(0,1)
+ to [break contact={push button={info=$b_0$},term=11,term'=12}] ++(0,1)
+ node[contact,name=N2]{}
+ to [make contact={push button={info=$b_1$},term=13,term'=14}] ++(0,1)
+ node[contact,name=N3]{};
+ \draw (N2) -- ++(1,0)
+ to [make contact={info=$K_1$,term=13,term'=14}] ++(0,1)
+ node[contact]{};
+ \draw (1,0)
+ node[contact]{}
+ to [relay coil={slow operating={info=$T_1$},term=A1,term'=A2}] ++(0,1) -- ++(0,1)
+ node[contact,name=N4]{} --(N1);
+ \draw (N4) -- ++(2,0)
+ to [change over contact={yscale=-1,info=$T_1$,name=t1,term=24,term'=21,term''=22}] ++(0,-1)
+ to [relay coil={scale=-1,info=$K_3$,term=A1,term'=A2}] ++(0,-1)
+ node[contact]{};
+ \draw (2,0)
+ node[contact]{}
+ to [relay coil={info=$K_2$,term=A1,term'=A2}] ++(0,1) |- (t1.output 1);
+ \draw(-0.8,0) node[left]{$\unit[0]{V}$} -- +(4.2,0) % power rails
+ (-0.8,5) node[left]{$\unit[+24]{V}$} to[fuse={info={$\unit[2]{A}$}}] (N3) -- +(3.4,0);
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsection{Beamer presentation with overlay\label{sec:beamer}}
+
+Perhaps the most important feature of \beamer\ is its capacity of creating a series of slides based in one slide for, e.g., showing one concept step by step. It is called \emph{overlay}. Unfortunately, \beamer\ overlay and \tikzname\ present some compatibility issues when overlay macros are typed in the options list of a \tikzname\ command. This can be solved setting two \tikzname\ keys that takes advantage of the fact that |\pgfkeysalso| doesn't change the path.
+
+\begin{codeexample}[code only]
+\tikzset{ % alt and visible (overlay)
+ alt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
+ },
+ visible/.code args={<#1>#2}{%
+ \alt<#1>{\pgfkeysalso{#2}}{}
+ }
+}
+\end{codeexample}
+Once these keys are in place, they can be used instead of |\visible| and |\alt| macros with a syntax slightly different. The following example creates three slides to illustrate how a push button works with a |break contact| and, when pushed, |break contact| is |activated|. Bellow, the result is shown side by side:
+
+\begin{codeexample}[width=6.8cm,render instead={\begin{tikzpicture}[circuit ee IEC relay,thick,y=3\tikzcircuitssizeunit]
+ \node[ground={point down,name=gnd}] at(0,0) {};
+ \draw(gnd)
+ to ++ (0,0.5)
+ to[bulb={info=L1,fill=yellow}] ++ (0,1)
+ to[break contact={push button={info=B1}}] ++ (0,1)
+ -- ++ (0,0.5) node[current direction={point up}]{} node[right]{12V};
+ \node[red,font=\small\itshape,below=4mm] at(gnd) {slide 1};
+ \node[ground={point down,name=gnd}] at(2cm,0) {};
+ \draw(gnd)
+ to ++ (0,0.5)
+ to[bulb={info=L1}] ++ (0,1)
+ to[break contact={push button={info=B1},activated}] ++ (0,1)
+ -- ++ (0,0.5) node[current direction={point up}]{} node[right]{12V};
+ \node[red,font=\small\itshape,below=4mm] at(gnd) {slide 2};
+ \node[ground={point down,name=gnd}] at(4cm,0) {};
+ \draw(gnd)
+ to ++ (0,0.5)
+ to[bulb={info=L1,fill=yellow}] ++ (0,1)
+ to[break contact={push button={info=B1}}] ++ (0,1)
+ -- ++ (0,0.5) node[current direction={point up}]{} node[right]{12V};
+ \node[red,font=\small\itshape,below=4mm] at(gnd) {slide 3};
+\end{tikzpicture}}]\begin{tikzpicture}[circuit ee IEC relay,thick,
+ y=3\tikzcircuitssizeunit]
+ \node[ground={point down,name=gnd}] at(0,0) {};
+ \draw(gnd)
+ to ++ (0,0.5)
+ to[bulb={info=L1,visible={<1,3>{fill=yellow}}}] ++ (0,1)
+ to[break contact={push button={info=B1},
+ alt={<2>{activated}{}}}] ++ (0,1)
+ -- ++ (0,0.5) node[current direction={point up}]{}
+ node[right]{12V};
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}During the presentation you can say that ``pressing B1 the lamp~L1 turns off, releasing it turns L1 on again''. One cool trick is to move forward and backward between slides~2 and 3.
+
+To draw this example, we start with the schematics and once it is ready the animation part is done by placing keys |visible| and |alt| in suitable locations. The filling of L2 is visible only in slide~1 and 3. B1 appears differently depending on the slide. For slides~1 and 3, B1 is a normal break contact (closed), but in slide~2 it is an ``activated'' break contact which is open. Note that key |bulb| receives or not the key |fill|. Similarly, the key |break contact| receives or not the key |activated| (the key |visible| could be used instead of |alt|).
+
+When developing ``animations'', you may need to know the overlay number. It can be printed, say in the frame title, using macro |\overlaynumber|; type this in the document preamble:
+
+\begin{codeexample}[code only]
+\makeatletter
+\newcommand*{\overlaynumber}{\number\beamer@slideinframe}
+\makeatother
+\end{codeexample}
+
+If you need to generate a handout, the |visible| argument will be drawn as well as the \emph{first} argument of |alt| no matter what is the overlay specification (the thing between |<| and |>| signs). Therefore, the above example would appear like:
+\begin{codeexample}[width=2.5cm]
+\begin{tikzpicture}[circuit ee IEC relay,thick,
+ y=3\tikzcircuitssizeunit]
+ \node[ground={point down,name=gnd}] at(0,0) {};
+ \draw(gnd)
+ to ++ (0,0.5)
+ to[bulb={info=L1,fill=yellow}] ++ (0,1)
+ to[break contact={push button={info=B1},activated}] ++ (0,1)
+ -- ++ (0,0.5) node[current direction={point up}]{}
+ node[right]{12V};
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}and it does not match any of the previous slides\footnote{It is just wrong.}. Keep in mind that you shall finish the schematic in the regular form (without any activated contact) and then |activated| can be inserted always as the second argument of |alt|; the first argument shall be left empty, e.g., \verb|alt{<1,3>{}{activated}}|. Alternatively, you can use, e.g., \verb|alt{<1,3>{activated=false}{activated=true}}|. The slide numbers enlisted in the overlay specification shall correspond to slides in which the contact is \emph{not} activated.
+
+The ``correct'' diagram that works both in |beamer| and |handout| modes is:
+
+\begin{codeexample}[code only]
+\begin{tikzpicture}[circuit ee IEC relay,thick,
+ y=3\tikzcircuitssizeunit]
+ \node[ground={point down,name=gnd}] at(0,0) {};
+ \draw(gnd)
+ to ++ (0,0.5)
+ to[bulb={info=L1,visible={<1,3>{fill=yellow}}}] ++ (0,1)
+ to[break contact={push button={info=B1},
+ alt={<1,3>{}{activated}}}] ++ (0,1)
+ -- ++ (0,0.5) node[current direction={point up}]{}
+ node[right]{12V};
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}The handout will show a lighted lamp in series with a disactivated break contact. If you do not want that the lamp appears lighted, use \verb|alt={<2>{}{fill=yellow}}| instead of |visible|. So, the lamp will not the lighted in slide~2 (implying it will in slides~1 and 3) and it will not be lighted in the handout as well.
+
+A complete, though minimalistic, example is provided in a separated file\footnote{This file should be in the same folder you have found this document, if not try \url{http://repositorios.cpai.unb.br/ctan/graphics/pgf/contrib/tikz-relay/doc/BeamerAnimation.tex}.}: ``BeamerAnimation.tex'', which is listed in Appendix~A for your convenience. In this example, a four-step sequencer is animated. A total of twenty slides are generated based in a single schematic. The frame title includes the macro |\overlaynumber| which generates the slide number and shall be removed once the presentation is ready. So, all slides would look like the same slide, but with animation on it.
+
+
+\subsection{Adjusting the diagram size}
+
+The diagram size can be adjusted setting |x| and |y| units. Mainly, you change those to control the space between symbols, not the diagram size in total\footnote{The total size will change, but it is more like a collateral damage than intentional deed.}. If your diagram is too big, consider to use a landscape page.
+
+For presentations, adjustments can be done using |resizebox|. Note that you should only use |resizebox| if your diagram is slightly bigger than the presentation area. If it is too much bigger, the use of |resizebox| will render small symbols leading to readability problems. In this case, on option is to divide the diagram in smaller pieces. Also, you should reconsider way you need such a big diagram in a presentation. Usually, small examples are better to clarify your point.
+
+It is not a good idea to change the diagram size setting |\tikzcircuitssizeunit| using |circuit symbol unit|. |\tikzcircuitssizeunit| shall be set document wise in the document preamble and kept unchanged.
+
+
+\section{Shapes}
+This is rather technical material, but it is here anyway and you may use it to modify or extend the library. It that case, if you need help, please do not hesitate in contacting the author.
+
+Several anchors are defined for each symbol (or, more exactly, shapes). The mechanism \tikzname\ uses to place anchors and define borders is sophisticated. It takes into account the line width (or an optional additional space defined by |outer sep|\footnote{See Section~``Common Options: Separations, Margins, Padding and Border Rotation'' of \tikzname\ manual.}) to place the anchors just on the line border of the symbol. Something called ``anchor border'' is also defined in the same manner. Anchor border is use to place labels around the symbol and interrupt the line directed to the symbol. Remember that a symbol is usually placed by command |to| which interrupts the path line the symbol is placed on. It makes perfect sense for symbols that encloses some area, like |proximity sensor coil| and |relay coil| and even for symbols that, although they do not enclose an area, defines some intuitive border, like |magnetic sensor| and |thermic sensor|. But it makes little sense for contacts.
+
+Contacts can be considered an especial case of symbols. They have no defined border, no intuitive notion of inside and outside. The \tikzname-library |circuits| places them in a category called ``wires''. The normal anchors (north, south, south west, etc.) have no practical use. Even so, they need a |center| anchor, used to place the symbol, and a |mid| anchor, used to place annotations. They also need an anchor border in order to interrupt the line during placement (and also for label positioning). The anchor border controls the gap that appears on the line. Thus, it is defined as the symbol size. In other words, the symbol size is an invisible border a bit smaller than the actual symbol because the inclined line which represents the movable contact have an addendum that protrudes beyond the symbol border.
+
+Outer separation is also undesired when placing contact. If the normal treatment were dispensed for contacts, setting the outer separation to any positive number would disrupt the line connected to the symbol. Instead of setting the outer separation to zero, the shape code that produces contacts simply disregards the outer separation when drawing the component.
+
+All symbols below but the |mechanical interlock| look rotated $90^{ \circ}$ because \tikzname\ uses this orientation to place the symbol in a line.
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, shape=make contact IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=3cm]{};
+ \foreach \anchor/\placement in {center/above, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, activated, shape=make contact IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=3cm]{};
+ \foreach \anchor/\placement in {center/above, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, shape=break contact IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=3cm]{};
+ \foreach \anchor/\placement in {center/above, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, activated, shape=break contact IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=3cm]{};
+ \foreach \anchor/\placement in {center/above, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, shape=change over contact IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=6cm]{};
+ \foreach \anchor/\placement in {center/above, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right, output 1/below right, output 2/above right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, activated, shape=change over contact IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=6cm]{};
+ \foreach \anchor/\placement in {center/above, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right, output 1/below right, output 2/above right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, shape=magnetic sensor IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=6cm]{};
+ \foreach \anchor/\placement in {center/above, 15/above right, 330/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, shape=thermic sensor IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=6cm]{};
+ \foreach \anchor/\placement in {center/above, 15/above right, 330/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, mid/above, input/left,output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, shape=proximity sensor coil IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=6cm]{};
+ \foreach \anchor/\placement in {center/above, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, input/left, output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit ee IEC relay]
+ \node[name=s, shape=mechanical interlock IEC relay, shape example, inner xsep=1cm, inner ysep=1cm, minimum width=6cm, minimum height=5.2cm]{};
+ \foreach \anchor/\placement in {center/above, mid/below, 30/above right, 358/below right,
+ north/above, north east/above, north west/above,
+ south/below, south east/below, south west/below,
+ east/left, west/right, input/left, output/right}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\section{Known Issues}
+This library is base in withdrawn standards and the current standardized symbols might be different. It is also rather incomplete; so many symbols are missing, though in my best knowledge the missing symbols are rarely used. Let me know if you need a symbol, I will do my best to implement it.
+
+If you want the report a bug or have any suggestion, please feel free to send me an e-mail. Contact details are in the first page. Every feedback is important.
+
+
+\section{Final Remarks}
+
+This package has been tested and used for more than three years, so I do believe it is mature by now and I decided to share it. On the other hand, I was the only person who used it, therefore idiosyncrasies were not detected.
+
+Any comments, suggestions, request for a missing symbols and feedback are welcomed. I will do my best to answer as soon as possible. My contact e-mail is in the first page.
+
+It should be great if someone with experience in writing \tikzname\ libraries could have a look in the code and point out error or improvements to be made.
+
+\appendix
+\newgeometry{left=1cm,right=1cm,top=1.5cm,bottom=1.5cm,nohead}
+\section*{Appendix A -- Beamer Example of a Four Step Sequencer}
+
+In this example, the animations is done in two layers: the schematics is drawn on foreground with contact and filling animation; on the background, circles (actually, ellipses since |x| and |y| scales are different) are drawn in light blue to highlight with contact or coil that has been activated because several of them changes from one slide to the next. In order to place the ellipses in the precise position, every contact and coil is named.
+
+At first, only one coil and the contacts respective to one step are drawn, then they are copy three times and the information is changed as needed. Finally, the $b_s$ is added. When the schematics is done, the animation part is made adding the |alt| key in the foreground and the |\visible| macro in the background.
+
+After the \LaTeX\ code, the slides were included for reference. They shall be found as a separated PDF file in the same folder you have found this document.
+
+\lstinputlisting[language={[LaTeX]TeX},basicstyle={\small},breakautoindent=true]{BeamerAnimation.tex}
+\clearpage
+\eject \pdfpagewidth=128mm \pdfpageheight=96mm
+\includepdf[pages=-,offset=-116 285,noautoscale]{BeamerAnimation.pdf}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-relay/tex/tikzlibrarycircuits.ee.IEC.relay.code.tex b/graphics/pgf/contrib/tikz-relay/tex/tikzlibrarycircuits.ee.IEC.relay.code.tex
new file mode 100644
index 0000000000..4f78fb77ac
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-relay/tex/tikzlibrarycircuits.ee.IEC.relay.code.tex
@@ -0,0 +1,1047 @@
+%% This is file `tikzlibrarycircuits.ee.IEC.relay.code.tex'
+%% Version: 1.2
+%% Version date: 2018-06-13
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software
+%% `tikzlibrarycircuits.ee.IEC.relay.code.tex'
+%% and its accompanying documentation and `The Copyright Holder'
+%% referring to the person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+%% Change History:
+%% 1.0: 05 February 2018: Original Version
+%% 1.1: 19 February 2018: new annotations: delayed activation,
+%% delayed deactivation, delayed both,
+%% touch switch, magnetic switch,
+%% static switch, polarized relay,
+%% remanent, electronic, pulse counter,
+%% counter switch, var level switch,
+%% pedal operated, lever operated,
+%% key operated, removable handle,
+%% crank operated, pressure switch and
+%% protected manually operated;
+%% new symbol: mechanical interlock;
+%% fix annotations separation.
+%% 1.2: 13 June 2018: new shape for mechanical interlock;
+%% new symbol for horn, var horn,
+%% buzzer, loud speaker
+%% new annotations: emergency pull
+%% switch, var emergency pull switch,
+%% emergency turn switch, var emergency
+%% turn switch, var remanent, thermal,
+%% unaffected by alternating current,
+%% mechanically resonant
+%%
+\usetikzlibrary{circuits.ee.IEC}
+\usepgflibrary{shapes.geometric}
+
+\makeatletter
+
+%% if contacts are activated or not, default is not
+\newif\ifcontact@activated
+\contact@activatedfalse
+
+\def\tikz@lib@relay@lar@plain[#1]#2\pgf@stop{\tikzset{label={[label position=357,every term/.try,#1]#2}}}
+\def\tikz@lib@relay@lbr@plain[#1]#2\pgf@stop{\tikzset{label={[label position=183,every term'/.try,#1]#2}}}
+\def\tikz@lib@relay@lal@plain[#1]#2\pgf@stop{\tikzset{label={[label position=63,every term''/.try,#1]#2}}}
+
+\pgfdeclareshape{magnetic sensor IEC relay}
+{
+ \savedanchor\northeast{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=\pgf@xa%
+ \advance\pgf@x by .5\pgf@xb%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \pgf@y=\pgf@ya%
+ }
+ \savedanchor\southwest{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=-\pgf@xa%
+ \advance\pgf@x by -.5\pgf@xb%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=-\pgf@ya%
+ \advance\pgf@y by-\pgf@yb%
+ }
+
+ \inheritsavedanchors[from=circle ee]
+ \inheritanchor[from=circle ee]{center}
+ \inheritanchor[from=circle ee]{south}
+ \inheritanchor[from=circle ee]{east}
+ \inheritanchor[from=circle ee]{west}
+ \inheritanchor[from=circle ee]{south east}
+ \inheritanchor[from=circle ee]{south west}
+ \inheritanchor[from=circle ee]{input}
+ \inheritanchor[from=circle ee]{output}
+ \inheritanchor[from=rectangle ee]{north}
+ \inheritanchor[from=rectangle ee]{north east}
+ \inheritanchor[from=rectangle ee]{north west}
+ \anchor{mid}{\centerpoint\advance\pgf@y by-\radius}
+
+ \anchorborder{%
+ \ifdim\pgf@y<0pt%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \edef\pgf@marshal{%
+ \noexpand\pgfpointborderellipse
+ {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}
+ {\noexpand\pgfqpoint{\radius}{\radius}}%
+ }%
+ \pgf@marshal%
+ \else%
+ % tricky... simpilfy to the origin...
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\northeast}%
+ \advance\pgf@y by0.5pt%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
+ \fi%
+ }
+
+ \backgroundpath{
+ \pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
+ \pgf@xa=\pgf@x
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{0pt}}
+ \pgfpatharc{0}{180}{\pgf@xa}
+ \pgfusepathqstroke
+ }
+}
+
+\pgfdeclareshape{thermic sensor IEC relay}
+{
+ \savedanchor\northeast{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=\pgf@xa%
+ \advance\pgf@x by .5\pgf@xb%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \pgf@y=\pgf@ya%
+ }
+ \savedanchor\southwest{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=-\pgf@xa%
+ \advance\pgf@x by -.5\pgf@xb%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=-\pgf@ya%
+ \advance\pgf@y by-\pgf@yb%
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=0pt%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=-\pgf@ya%
+ \advance\pgf@y by-\pgf@yb%
+ }
+
+ \anchor{center}{\pgfpointorigin}
+ \anchor{mid}{\centerpoint}
+ \inheritanchor[from=rectangle ee]{north}
+ \inheritanchor[from=rectangle ee]{south}
+ \inheritanchor[from=rectangle ee]{east}
+ \inheritanchor[from=rectangle ee]{west}
+ \inheritanchor[from=rectangle ee]{north east}
+ \inheritanchor[from=rectangle ee]{north west}
+ \inheritanchor[from=rectangle ee]{south east}
+ \inheritanchor[from=rectangle ee]{south west}
+ \anchor{input}{%
+ \pgf@process{\southwest}%
+ \pgf@y=0pt%
+ }
+ \anchor{output}{%
+ \pgf@process{\northeast}%
+ \pgf@y=0pt%
+ }
+
+ \anchorborder{%
+ \ifdim\pgf@y<0pt%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\southwest}%
+ \pgf@xa=-\pgf@x%
+ \pgf@ya=-\pgf@y%
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
+ \else%
+ % tricky... simpilfy to the origin...
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\northeast}%
+ \advance\pgf@y by0.5pt%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
+ \fi%
+ }
+
+ \backgroundpath{
+ \pgf@process{\pgfpointadd{\southwest}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}
+ \pgf@xa=\pgf@x
+ \pgf@xb=-\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{0pt}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{0pt}}
+ \pgfusepathqstroke
+ }
+}
+
+% af:=30*PI/180; a:=1/3; l:=a+2/cos(af); x:=l*cos(af)-1; y:=l*sin(af);c:=tan(af); float([x,y,c, l]);
+\pgfdeclareshape{make contact IEC relay}
+{
+ \savedanchor\northeast{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=.5\pgf@xa%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
+ }
+ \savedanchor\southwest{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=-.5\pgf@xa%
+ \pgf@y=0pt%
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=0pt
+ \ifcontact@activated
+ \pgf@y=0pt%
+ \else
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=0.5773503\pgf@ya%
+ \fi
+ }
+
+ \anchor{center}{\pgfpointorigin}
+ \anchor{mid}{\centerpoint}
+ \inheritanchor[from=rectangle ee]{north}
+ \inheritanchor[from=rectangle ee]{south}
+ \inheritanchor[from=rectangle ee]{east}
+ \inheritanchor[from=rectangle ee]{west}
+ \inheritanchor[from=rectangle ee]{north east}
+ \inheritanchor[from=rectangle ee]{north west}
+ \inheritanchor[from=rectangle ee]{south east}
+ \inheritanchor[from=rectangle ee]{south west}
+ \anchor{input}{\southwest}
+ \anchor{output}{%
+ \pgf@process{\northeast}%
+ \pgf@xa=\pgf@x%
+ \pgf@process{\southwest}%
+ \pgf@x=\pgf@xa%
+ }
+
+ \anchorborder{%
+ \ifdim\pgf@y<0pt%
+ % tricky... simpilfy to the origin...
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\southwest}%
+ \advance\pgf@y by-0.5pt%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{-\pgf@xa}{-\pgf@ya}}}%
+ \else%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\northeast}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=1.321367\pgf@y%
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
+ \fi%
+ }
+
+ \backgroundpath{
+ \pgf@process{\northeast}
+ \pgf@xa=-\pgf@x
+ \ifcontact@activated
+ \pgf@xb=\pgf@x \pgf@yb=0pt
+ \else
+ \pgf@xb=1.288675\pgf@x \pgf@yb=1.321367\pgf@y
+ \fi
+ % Fixed point
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{0pt}}
+ % Moving point
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \pgfusepathqstroke
+ }
+}
+
+
+% af:=arctan(1/3); a:=1-2*tan(af); l:=a+2/cos(af); x:=l*cos(af)-1; y:=-l*sin(af); c:=-tan(af); float([x,y,c]);
+% af:=arctan(1/3); a:=1-2*tan(af); l:=a+2/cos(af); af:=arctan(2/3); x:=l*cos(af)-1; y:=l*sin(af); c:=-tan(af); float([x,y,c]);
+\pgfdeclareshape{break contact IEC relay}
+{
+ \savedanchor\northeast{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=.5\pgf@xa%
+ \pgf@y=0pt%
+ }
+ \savedanchor\southwest{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=-.5\pgf@xa%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=-\pgf@ya%
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=0pt
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \ifcontact@activated
+ \pgf@y=-0.666667\pgf@ya%
+ \else
+ \pgf@y=-0.333333\pgf@ya%
+ \fi
+ }
+
+ \anchor{center}{\pgfpointorigin}
+ \anchor{mid}{\centerpoint}
+ \inheritanchor[from=rectangle ee]{north}
+ \inheritanchor[from=rectangle ee]{south}
+ \inheritanchor[from=rectangle ee]{east}
+ \inheritanchor[from=rectangle ee]{west}
+ \inheritanchor[from=rectangle ee]{north east}
+ \inheritanchor[from=rectangle ee]{north west}
+ \inheritanchor[from=rectangle ee]{south east}
+ \inheritanchor[from=rectangle ee]{south west}
+ \anchor{input}{%
+ \pgf@process{\southwest}%
+ \pgf@xa=\pgf@x%
+ \pgf@process{\northeast}%
+ \pgf@x=\pgf@xa%
+ }
+ \anchor{output}{\northeast}
+
+ \anchorborder{%
+ \ifdim\pgf@y<0pt%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\southwest}%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=1.354311\pgf@y% maximum distance used to prevent jump
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{-\pgf@xa}{-\pgf@ya}}}%
+ \else%
+ % tricky... simpilfy to the origin...
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\southwest}%
+ \pgf@xa=-\pgf@x%
+ \pgf@ya=-0.488067\pgf@y% 1.321367-0.5-0.333333
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{\pgf@xa}{\pgf@ya}}}%
+ \fi%
+ }
+
+ \backgroundpath{
+ \pgf@process{\southwest}
+ \pgf@xa=-\pgf@x \pgf@ya=\pgf@y
+ \ifcontact@activated
+ \pgf@xb=-1.031466\pgf@x \pgf@yb=1.354311\pgf@y
+ \else
+ \pgf@xb=-1.316228\pgf@x \pgf@yb=0.772076\pgf@y
+ \fi
+ % Fixed
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{0pt}}
+ \pgfusepathqstroke
+ % Moving
+ \pgfpathmoveto{\pgfqpoint{-\pgf@xa}{0pt}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \pgfusepathqstroke
+ }
+}
+
+
+% af:=arctan(2/3); a:=2*tan(af)-1; l:=a+2/cos(af); x:=l*cos(af)-1; y:=l*sin(af); c:=tan(af); float([x,y/2,c/2]);
+\pgfdeclareshape{change over contact IEC relay}
+{
+ \savedanchor\northeast{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=.5\pgf@xa%
+ \pgfmathsetlength\pgf@y{\pgfkeysvalueof{/pgf/minimum height}}%
+ }
+ \savedanchor\southwest{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=-.5\pgf@xa%
+ \pgf@y=0pt%
+ }
+ \savedanchor\centerpoint{%
+ \pgf@x=0pt
+ \ifcontact@activated
+ \pgf@y=0pt
+ \else
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=0.333333\pgf@ya%
+ \fi
+ }
+
+ \anchor{center}{\pgfpointorigin}
+ \anchor{mid}{\centerpoint}
+ \inheritanchor[from=rectangle ee]{north}
+ \inheritanchor[from=rectangle ee]{south}
+ \inheritanchor[from=rectangle ee]{east}
+ \inheritanchor[from=rectangle ee]{west}
+ \inheritanchor[from=rectangle ee]{north east}
+ \inheritanchor[from=rectangle ee]{north west}
+ \inheritanchor[from=rectangle ee]{south east}
+ \inheritanchor[from=rectangle ee]{south west}
+ \anchor{input}{\southwest}
+ \anchor{output}{%
+ \pgf@process{\northeast}%
+ \pgf@xa=\pgf@x%
+ \pgf@process{\southwest}%
+ \pgf@x=\pgf@xa%
+ }
+ \anchor{output 2}{% alias for output
+ \pgf@process{\northeast}%
+ \pgf@xa=\pgf@x%
+ \pgf@process{\southwest}%
+ \pgf@x=\pgf@xa%
+ }
+ \anchor{output 1}{\northeast}% the thrird, normaly closed, terminal
+
+ \anchorborder{%
+ \ifdim\pgf@y<0pt%
+ % tricky... simpilfy to the origin...
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\southwest}%
+ \advance\pgf@y by-0.5pt%
+ \pgf@xa=\pgf@x%
+ \pgf@ya=\pgf@y%
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\pgfqpoint{-\pgf@xa}{-\pgf@ya}}}%
+ \else%
+ \pgf@xc=\pgf@x%
+ \pgf@yc=\pgf@y%
+ \pgf@process{\pgfpointborderrectangle{\pgfqpoint{\pgf@xc}{\the\pgf@yc}}{\northeast}}%
+ \fi%
+ }
+
+ \backgroundpath{
+ \pgf@process{\northeast}
+ \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \ifcontact@activated
+ \pgf@xb=\pgf@x \pgf@yb=0pt
+ \else
+ \pgf@xb=1.27735\pgf@x \pgf@yb=0.759117\pgf@y
+ \fi
+ % Fixed
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xa}{.5\pgf@ya}}
+ \pgfusepathqstroke
+ % Moving
+ \pgfpathmoveto{\pgfqpoint{-\pgf@xa}{0pt}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
+ \pgfusepathqstroke
+ }
+}
+
+
+\pgfdeclareshape{proximity sensor coil IEC relay}
+{
+ \inheritsavedanchors[from=rectangle ee]
+ \inheritanchor[from=rectangle ee]{center}
+ \inheritanchor[from=rectangle ee]{north}
+ \inheritanchor[from=rectangle ee]{south}
+ \inheritanchor[from=rectangle ee]{east}
+ \inheritanchor[from=rectangle ee]{west}
+ \inheritanchor[from=rectangle ee]{north east}
+ \inheritanchor[from=rectangle ee]{north west}
+ \inheritanchor[from=rectangle ee]{south east}
+ \inheritanchor[from=rectangle ee]{south west}
+ \inheritanchor[from=rectangle ee]{input}
+ \inheritanchor[from=rectangle ee]{output}
+ \inheritanchorborder[from=rectangle ee]
+ \backgroundpath{
+ \pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
+ \pgf@xa=-\pgf@x \pgf@ya=-\pgf@y
+ \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{0pt}}
+ \pgfpathlineto{\pgfqpoint{0pt}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{0pt}}
+ \pgfpathlineto{\pgfqpoint{0pt}{\pgf@yb}}
+ \pgfpathclose
+ }
+ \foregroundpath{
+ \pgf@process{\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{\pgfkeysvalueof{/pgf/outer xsep}}{\pgfkeysvalueof{/pgf/outer ysep}}}}}
+ \pgf@xa=-\pgf@x \pgf@ya=-\pgf@y
+ \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{0.75\pgf@xa}{0.25\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{0.75\pgf@xb}{0.25\pgf@ya}}
+ \pgfpathmoveto{\pgfqpoint{0.75\pgf@xa}{0.25\pgf@yb}}
+ \pgfpathlineto{\pgfqpoint{0.75\pgf@xb}{0.25\pgf@yb}}
+ \pgfusepathqstroke
+ }
+}
+
+
+% w= 0.8; h = w/2*tan(60*PI/180);
+\pgfdeclareshape{mechanical interlock IEC relay}
+{
+ \savedanchor\northeast{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=.5\pgf@xa%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=.5\pgf@ya%
+ }
+ \savedanchor\southwest{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=-.5\pgf@xa%
+ \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/minimum height}}%
+ \pgf@y=-.5\pgf@ya%
+ }
+ \savedanchor\savedoutput{%
+ \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/minimum width}}%
+ \pgf@x=.25\pgf@xa%
+ \pgf@y=0pt%
+ }
+
+ \anchor{center}{\pgfpointorigin}
+ \anchor{mid}{\pgfpointorigin}
+ \inheritanchor[from=rectangle ee]{north}
+ \inheritanchor[from=rectangle ee]{south}
+ \inheritanchor[from=rectangle ee]{east}
+ \inheritanchor[from=rectangle ee]{west}
+ \inheritanchor[from=rectangle ee]{north east}
+ \inheritanchor[from=rectangle ee]{north west}
+ \inheritanchor[from=rectangle ee]{south east}
+ \inheritanchor[from=rectangle ee]{south west}
+ \anchor{output}{\savedoutput}
+ \anchor{input}{%
+ \pgf@process{\savedoutput}%
+ \pgf@x=-\pgf@x%
+ }
+ \anchor{east}{\savedoutput}
+ \anchor{west}{%
+ \pgf@process{\savedoutput}%
+ \pgf@x=-\pgf@x%
+ }
+
+ \anchorborder{%
+ \pgf@xa=\pgf@x%
+ \pgf@process{\savedoutput}%
+ \ifdim\pgf@xa<0pt%
+ \pgf@x=-\pgf@x%
+ \fi%
+ }
+
+ \backgroundpath{
+ \pgf@process{\northeast}
+ \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{-\pgf@xa}{\pgf@ya}}
+ \pgfpathlineto{\pgfqpoint{0pt}{-\pgf@ya}}
+ \pgfpathclose
+ }
+}
+
+\makeatother
+
+\tikzset{
+ circuit declare symbol=fuse,
+ circuit declare symbol=horn,
+ circuit declare symbol=buzzer,
+ circuit declare symbol=loud speaker,
+ circuit declare symbol=magnetic sensor,
+ circuit declare symbol=thermic sensor,
+ circuit declare symbol=change over contact,
+ circuit declare symbol=relay coil,
+ circuit declare symbol=proximity sensor coil,
+ circuit declare symbol=mechanical interlock,
+ % annotations for contact
+ % 0.5773503+0.8+0.3+0.9+0.3+0.7-1.321367
+ circuit declare annotation={manually operated}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.8\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.7\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,0) -- ++(-1\tikzcircuitssizeunit,0)}] ()
+ },
+ % 0.5773503+0.8+0.3+0.9+0.3+0.7-0.2+0.5-1.321367
+ circuit declare annotation={protected manually operated}{2.5559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.8\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.7\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,0) -- ++(-1\tikzcircuitssizeunit,0) ++(-.5\tikzcircuitssizeunit,-.2\tikzcircuitssizeunit) -- ++ (.3\tikzcircuitssizeunit,0) -- ++ (0,.5\tikzcircuitssizeunit) -- ++ (1.4\tikzcircuitssizeunit,0) -- ++ (0,-.5\tikzcircuitssizeunit) -- ++ (.3\tikzcircuitssizeunit,0) }] ()
+ },
+ % 0.5773503+0.8+0.3+0.9+0.3+0.7-1.321367
+ circuit declare annotation={push button}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.8\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.7\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,-0.5\tikzcircuitssizeunit) -- ++(0,0.5\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) -- ++(0,-0.5\tikzcircuitssizeunit)}] ()
+ },
+ % thick 0.8pt (0.114286), 0.5773503+1.25+2*0.114286-1.321367
+ circuit declare annotation={var push button}{0.7345553\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,line to,->] ++(0,1.25\tikzcircuitssizeunit)
+ ++(-0.7\tikzcircuitssizeunit,1.25\tikzcircuitssizeunit+1.5*\pgflinewidth) edge[circuit symbol lines/.try,line to,line width=1.5*\pgflinewidth] ++(1.4\tikzcircuitssizeunit,0)
+ },
+ % 0.5773503+0.6+0.3+0.6+0.3+0.6+0.6-1.321367
+ circuit declare annotation={pull switch}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,0.6\tikzcircuitssizeunit) -- ++(0,-0.6\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={turn switch}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,-0.6\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit)}] ()
+ },
+ % 0.5773503+0.6+0.3+0.6+0.45+0.45+0.6226497+0.9-sqrt(0.9^2-0.8^2)-1.321367
+ circuit declare annotation={emergency switch}{2.766322437\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,line join=bevel,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0,0.6226497\tikzcircuitssizeunit)}] () edge[circuit symbol open/.try,line join=bevel,to path={++(0.8\tikzcircuitssizeunit,3.0226497\tikzcircuitssizeunit) arc[start angle=27, delta angle=126, radius=0.9\tikzcircuitssizeunit] --cycle}] ()
+ },
+ circuit declare annotation={emergency pull switch}{4.566322437\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,line join=bevel,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0,0.6226497\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,0.6\tikzcircuitssizeunit) -- ++(0,-0.6\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,-0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) } ] () edge[circuit symbol open/.try,line join=bevel,to path={++(0.8\tikzcircuitssizeunit,4.8226497\tikzcircuitssizeunit) arc[start angle=27, delta angle=126, radius=0.9\tikzcircuitssizeunit] --cycle}] ()
+ },
+ circuit declare annotation={var emergency pull switch}{2.766322437\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,line join=bevel,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- +(0,0.6226497\tikzcircuitssizeunit) ++(0,-1.5\tikzcircuitssizeunit) -- ++(0.6\tikzcircuitssizeunit,0) ++(0.3\tikzcircuitssizeunit,0) -- ++(0.6\tikzcircuitssizeunit,0) ++(0.3\tikzcircuitssizeunit,0) -- ++(0.6\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,0.6\tikzcircuitssizeunit) -- ++(0,-0.6\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit)}] () edge[circuit symbol open/.try,line join=bevel,to path={++(0.8\tikzcircuitssizeunit,3.0226497\tikzcircuitssizeunit) arc[start angle=27, delta angle=126, radius=0.9\tikzcircuitssizeunit] --cycle}] ()
+ },
+ circuit declare annotation={emergency turn switch}{4.566322437\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,line join=bevel,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0,0.6226497\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,-0.6\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,-0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) } ] () edge[circuit symbol open/.try,line join=bevel,to path={++(0.8\tikzcircuitssizeunit,4.8226497\tikzcircuitssizeunit) arc[start angle=27, delta angle=126, radius=0.9\tikzcircuitssizeunit] --cycle}] ()
+ },
+ circuit declare annotation={var emergency turn switch}{2.766322437\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,line join=bevel,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- ++(0.75\tikzcircuitssizeunit,0.45\tikzcircuitssizeunit) -- +(0,0.6226497\tikzcircuitssizeunit) ++(0,-1.5\tikzcircuitssizeunit) -- ++(0.6\tikzcircuitssizeunit,0) ++(0.3\tikzcircuitssizeunit,0) -- ++(0.6\tikzcircuitssizeunit,0) ++(0.3\tikzcircuitssizeunit,0) -- ++(0.6\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,-0.6\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) -- ++(0,0.6\tikzcircuitssizeunit)}] () edge[circuit symbol open/.try,line join=bevel,to path={++(0.8\tikzcircuitssizeunit,3.0226497\tikzcircuitssizeunit) arc[start angle=27, delta angle=126, radius=0.9\tikzcircuitssizeunit] --cycle}] ()
+ },
+ % 0.5773503+1.4+1+1-1.321367
+ circuit declare annotation={thermal switch}{2.6559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [annotation arrow,-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={--++(0,1.4\tikzcircuitssizeunit)--++(\tikzcircuitssizeunit,0)--++(0,\tikzcircuitssizeunit)--++(-\tikzcircuitssizeunit,0)--++(0,\tikzcircuitssizeunit)}] ()
+ },
+ % 0.5773503+2.6+0.4-1.321367
+ circuit declare annotation={roller}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol open/.try,to path={++(0,2.6\tikzcircuitssizeunit) circle(0.4\tikzcircuitssizeunit)}] () edge[circuit symbol lines/.try,to path={-- ++(0,0.7\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.7\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.6\tikzcircuitssizeunit)}] ()
+ },
+ % 0.5773503+0.5+0.3+0.5+0.85+0.85-1.321367
+ circuit declare annotation={removable handle}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol open/.try,to path={-- ++(0,0.5\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.5\tikzcircuitssizeunit) -- ++(-0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit)-- ++(-0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit) -- cycle}] ()
+ },
+ % 0.5773503+0.5+0.3+0.5+0.85+0.85-1.321367
+ circuit declare annotation={proximity switch}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol open/.try,to path={-- ++(0,0.5\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.5\tikzcircuitssizeunit) -- ++(-0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit)-- ++(-0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit) -- cycle (\tikzlastnode.mid) ++(-0.65\tikzcircuitssizeunit,1.95\tikzcircuitssizeunit) --+(1.3\tikzcircuitssizeunit,0) ++(0,0.4\tikzcircuitssizeunit) --+(1.3\tikzcircuitssizeunit,0)}] ()
+ },
+ % 0.5773503+0.5+0.3+0.5+0.85+0.85-1.321367
+ circuit declare annotation={touch switch}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol open/.try,line join=bevel,to path={-- ++(0,0.5\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.5\tikzcircuitssizeunit) -- ++(-0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit)-- ++(-0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit) -- cycle (\tikzlastnode.mid) ++(-0.65\tikzcircuitssizeunit,1.95\tikzcircuitssizeunit) --+(1.3\tikzcircuitssizeunit,0) ++(0,0.4\tikzcircuitssizeunit) --+(1.3\tikzcircuitssizeunit,0) ++(-0.2\tikzcircuitssizeunit,0.65\tikzcircuitssizeunit) -- ++(1.7\tikzcircuitssizeunit,0)}] ()
+ },
+ % 0.5773503+3.4226497+1-1.321367
+ circuit declare annotation={magnetic switch}{3.678633\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol open/.try,to path={-- ++(0,0.5\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.5\tikzcircuitssizeunit) -- ++(-0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,0.85\tikzcircuitssizeunit)-- ++(0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit)-- ++(-0.85\tikzcircuitssizeunit,-0.85\tikzcircuitssizeunit) -- cycle (\tikzlastnode.mid) ++(-0.65\tikzcircuitssizeunit,1.95\tikzcircuitssizeunit) --+(1.3\tikzcircuitssizeunit,0) ++(0,0.4\tikzcircuitssizeunit) --+(1.3\tikzcircuitssizeunit,0)}] () edge[circuit symbol filled/.try,to path={++(0.5\tikzcircuitssizeunit,3.4226497\tikzcircuitssizeunit) -- ++(0.5\tikzcircuitssizeunit,0) -- ++(0,1\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) -- ++(0,-1\tikzcircuitssizeunit) -- ++(0.5\tikzcircuitssizeunit,0) -- ++(0,0.5\tikzcircuitssizeunit) -- ++(1\tikzcircuitssizeunit,0) --cycle}] ()
+ },
+ % 0.5773503+3+1-1.321367
+ circuit declare annotation={level switch}{3.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.8\tikzcircuitssizeunit) ++(.5\tikzcircuitssizeunit,\tikzcircuitssizeunit) -- ++(.5\tikzcircuitssizeunit,0)}] () edge[circuit symbol open/.try,to path={++(0,2\tikzcircuitssizeunit) arc[start angle=-53, delta angle=106, radius=1.25\tikzcircuitssizeunit] arc[start angle=127, delta angle=106, radius=1.25\tikzcircuitssizeunit] --cycle}] ()
+ },
+ circuit declare annotation={var level switch}{3.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.8\tikzcircuitssizeunit) ++(.5\tikzcircuitssizeunit,\tikzcircuitssizeunit) -- ++(.5\tikzcircuitssizeunit,0)}] () edge[circuit symbol open/.try,to path={++(0,3\tikzcircuitssizeunit) ellipse({0.5\tikzcircuitssizeunit} and {\tikzcircuitssizeunit})}] ()
+ },
+ % 0.5773503+2+2-1.321367
+ circuit declare annotation={counter switch}{3.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- +(0,0.8\tikzcircuitssizeunit)}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(-\tikzcircuitssizeunit,2\tikzcircuitssizeunit) --++(0,2\tikzcircuitssizeunit) -- ++(2\tikzcircuitssizeunit,0) --++(0,-2\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(0,3\tikzcircuitssizeunit) circle(0.4\tikzcircuitssizeunit)}] ()
+ },
+ % 0.5773503+0.9+0.3+0.8+2-1.321367
+ circuit declare annotation={pressure switch}{3.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- +(0,0.8\tikzcircuitssizeunit) node[left,draw,minimum size=2\tikzcircuitssizeunit,rotate=270,circuit symbol open/.try]{P}}] ()
+ },
+ % 0.5773503+2+0.577350+0.433013-1.321367
+ circuit declare annotation={pedal operated}{2.2663463\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.6\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.5\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.588671\tikzcircuitssizeunit) (\tikzlastnode.mid) ++(0.5\tikzcircuitssizeunit,2\tikzcircuitssizeunit) -- ++(150:1.154701\tikzcircuitssizeunit) -- ++(60:.5\tikzcircuitssizeunit)}] ()
+ },
+ % 0.5773503+3-1.321367; 8/10*(tan(60*PI/180)-1); print(Unquoted, float(%)); dd:=3-8/10*(1-1/tan(60*PI/180)); print(Unquoted, float(%)); -8/10+2/10*sin(60*PI/180); print(Unquoted, float(%)); 2+2/10+2/10*cos(60*PI/180); print(Unquoted, float(%)); float((dd-0.3-0.3-0.7-0.7)); print(Unquoted, float(%));
+ circuit declare annotation={lever operated}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.7\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.7\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.66188\tikzcircuitssizeunit) (\tikzlastnode.mid) +(0.585641\tikzcircuitssizeunit,3\tikzcircuitssizeunit) -- +(-0.626795\tikzcircuitssizeunit, 2.3\tikzcircuitssizeunit)}] () edge[circuit symbol open/.try,to path={++(-.8\tikzcircuitssizeunit,2.2\tikzcircuitssizeunit) circle(0.2\tikzcircuitssizeunit)}] ()
+ },
+ % 0.5773503+3-1.321367;
+ circuit declare annotation={key operated}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.7\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.8\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.3\tikzcircuitssizeunit)}] () edge[circuit symbol open/.try,to path={++(.4\tikzcircuitssizeunit,2.6\tikzcircuitssizeunit) circle(0.4\tikzcircuitssizeunit) (\tikzlastnode.mid) ++(0,2.8\tikzcircuitssizeunit) -- ++(0,-0.4\tikzcircuitssizeunit) -- ++(-0.8\tikzcircuitssizeunit,-0.2\tikzcircuitssizeunit) -- ++(0,0.8\tikzcircuitssizeunit) -- cycle}] ()
+ },
+ % 0.5773503+0.9+0.3+0.8+1-1.321367
+ circuit declare annotation={crank operated}{2.2559833\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.mid) edge[circuit symbol lines/.try,to path={-- ++(0,0.9\tikzcircuitssizeunit) ++(0,0.3\tikzcircuitssizeunit) -- ++(0,0.8\tikzcircuitssizeunit) -- ++(-\tikzcircuitssizeunit,0) -- ++(0,\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={position switch}{0pt}
+ {
+ [transform shape]
+ [-]
+ edge[circuit symbol wires/.try,to path={let \p1=(\tikzlastnode.mid), \p2=($(\tikzlastnode.mid) - (\tikzlastnode.input)$), \n2 = {veclen(\x2,\y2)}, \p2= ($0.5*\tikzcircuitssizeunit/\n2*(\p2)$) in ($(\p1)+(\p2)$) -- ++(-\y2,\x2) -- ($(\p1)-(\p2)$)}] ()
+ },
+ circuit declare annotation={circuit breaker}{0pt}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.south west) edge[circuit symbol lines/.try,to path={++(2.4\tikzcircuitssizeunit,0.4\tikzcircuitssizeunit) -- ++(-0.8\tikzcircuitssizeunit,-0.8\tikzcircuitssizeunit) ++(0.8\tikzcircuitssizeunit,0) -- ++(-0.8\tikzcircuitssizeunit,0.8\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={static switch}{0pt}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.input) edge[circuit symbol lines/.try,to path={++(0,\tikzcircuitssizeunit) -- ++(0,-2\tikzcircuitssizeunit)}] ()
+ },
+ % 1.8+0.8-1.321367
+ circuit declare annotation={delayed activation}{1.278633\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ edge[circuit symbol lines/.try,to path={(\tikzlastnode.south west) ++(1.8\tikzcircuitssizeunit,1.8\tikzcircuitssizeunit) arc[start angle=0, delta angle=180, radius=0.8\tikzcircuitssizeunit] let \p1=(\tikzlastnode.mid), \p2=($(\tikzlastnode.mid) - (\tikzlastnode.input)$), \p2= ($0.2*\tikzcircuitssizeunit/\x2*(\p2)$) in ($(\p1)+(\p2)$) -- ($(\tikzlastnode.south west) + (1.2\tikzcircuitssizeunit,2.574597\tikzcircuitssizeunit)$) ($(\p1)-(\p2)$) -- ($(\tikzlastnode.south west) + (0.8\tikzcircuitssizeunit,2.574597\tikzcircuitssizeunit)$)} ] ()
+ },
+ % 3.4-1.321367
+ circuit declare annotation={delayed deactivation}{2.078633\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ edge[circuit symbol lines/.try,to path={(\tikzlastnode.south west) ++(0.2\tikzcircuitssizeunit,3.4\tikzcircuitssizeunit) arc[start angle=180, delta angle=180, radius=0.8\tikzcircuitssizeunit] let \p1=(\tikzlastnode.mid), \p2=($(\tikzlastnode.mid) - (\tikzlastnode.input)$), \p2= ($0.2*\tikzcircuitssizeunit/\x2*(\p2)$) in ($(\p1)+(\p2)$) -- ($(\tikzlastnode.south west) + (1.2\tikzcircuitssizeunit,2.574597\tikzcircuitssizeunit)$) ($(\p1)-(\p2)$) -- ($(\tikzlastnode.south west) + (0.8\tikzcircuitssizeunit,2.574597\tikzcircuitssizeunit)$)}] ()
+ },
+ circuit declare annotation={delayed both}{2.078633\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ edge[circuit symbol lines/.try,to path={(\tikzlastnode.south west) ++(0.2\tikzcircuitssizeunit,3.4\tikzcircuitssizeunit) arc[start angle=180, delta angle=180, radius=0.8\tikzcircuitssizeunit] (\tikzlastnode.south west) ++(1.8\tikzcircuitssizeunit,1.8\tikzcircuitssizeunit) arc[start angle=0, delta angle=180, radius=0.8\tikzcircuitssizeunit] let \p1=(\tikzlastnode.mid), \p2=($(\tikzlastnode.mid) - (\tikzlastnode.input)$), \p2= ($0.2*\tikzcircuitssizeunit/\x2*(\p2)$) in ($(\p1)+(\p2)$) -- ($(\tikzlastnode.south west) + (1.2\tikzcircuitssizeunit,2.574597\tikzcircuitssizeunit)$) ($(\p1)-(\p2)$) -- ($(\tikzlastnode.south west) + (0.8\tikzcircuitssizeunit,2.574597\tikzcircuitssizeunit)$)} ] ()
+ },
+ % annotations for relay coil
+ circuit declare annotation={solenoid valve}{2.5\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.south) edge[circuit symbol open/.try,every relay coil/.try,to path={-- ++(0,-.5\tikzcircuitssizeunit) ++(0,-.3\tikzcircuitssizeunit) -- ++(0,-.5\tikzcircuitssizeunit) ++(0,-.3\tikzcircuitssizeunit) -- ++(0,-.4\tikzcircuitssizeunit) --++(\tikzcircuitssizeunit,-0.5\tikzcircuitssizeunit) --++(0,\tikzcircuitssizeunit) --++(-2\tikzcircuitssizeunit,-\tikzcircuitssizeunit) --++(0,\tikzcircuitssizeunit) --++(\tikzcircuitssizeunit,-0.5\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={pulse counter}{2\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.south) edge[circuit symbol open/.try,every relay coil/.try,to path={++(-\tikzcircuitssizeunit,.5\pgflinewidth) --++(0,-2\tikzcircuitssizeunit) -- ++(2\tikzcircuitssizeunit,0) --++(0,2\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(0,.5\pgflinewidth-\tikzcircuitssizeunit) circle(0.4\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={slow operating}{1\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(0,\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) --++(0,-\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(-2\tikzcircuitssizeunit,\tikzcircuitssizeunit) ++(0,-\tikzcircuitssizeunit) -- ++(2\tikzcircuitssizeunit,\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={slow releasing}{1\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[every relay coil/.try,circuit symbol filled/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth)
+--++(0,\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) --++(0,-\tikzcircuitssizeunit) --cycle}] ()
+ },
+ circuit declare annotation={slow operating and slow releasing}{2\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(0,\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) --++(0,-\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(-2\tikzcircuitssizeunit,\tikzcircuitssizeunit) ++(0,-\tikzcircuitssizeunit) -- ++(2\tikzcircuitssizeunit,\tikzcircuitssizeunit)}] () edge[every relay coil/.try,circuit symbol filled,to path={++(\tikzcircuitssizeunit,\tikzcircuitssizeunit-.5\pgflinewidth) --++(0,\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) --++(0,-\tikzcircuitssizeunit) --cycle}] ()
+ },
+ circuit declare annotation={high speed}{1\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol open/.try,every relay coil/.try,to path={++(0,-.5\pgflinewidth) --++(0,\tikzcircuitssizeunit) --++(\tikzcircuitssizeunit,0) -- ++(0,-\tikzcircuitssizeunit) --++(-2\tikzcircuitssizeunit,0) --++(0,\tikzcircuitssizeunit) --++(\tikzcircuitssizeunit,0)}] ()
+ },
+ circuit declare annotation={mechanically latched}{1.73\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(0,1.73\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) --++(0,-1.73\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,line join=bevel,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(-\tikzcircuitssizeunit,1.73\tikzcircuitssizeunit) --++(-\tikzcircuitssizeunit,-1.73\tikzcircuitssizeunit) --cycle}] ()
+ },
+ circuit declare annotation={alternating current}{2\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) -- ++(0,2\tikzcircuitssizeunit) --++(-2\tikzcircuitssizeunit,0) --++(0,-2\tikzcircuitssizeunit) --++(2\tikzcircuitssizeunit,0)
+ (\tikzlastnode.north) ++(0,\tikzcircuitssizeunit-.5\pgflinewidth) arc [start angle=135, end angle=225, radius=0.5\tikzcircuitssizeunit]
+ (\tikzlastnode.north) ++(0,\tikzcircuitssizeunit-.5\pgflinewidth) arc [start angle=-45, end angle=45, radius=0.5\tikzcircuitssizeunit]}] ()
+ },
+ circuit declare annotation={polarized}{1\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol filled/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(0,\tikzcircuitssizeunit) -- ++(-0.5\tikzcircuitssizeunit,0) --++(0,-0.5\tikzcircuitssizeunit) -- ++(-1\tikzcircuitssizeunit,0) --++(0,0.5\tikzcircuitssizeunit) -- ++(-0.5\tikzcircuitssizeunit,0) --++(0,-\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(0.5\tikzcircuitssizeunit,-.5\pgflinewidth+0.5\tikzcircuitssizeunit) --++(0,0.5\tikzcircuitssizeunit) --++(-\tikzcircuitssizeunit,0) --++(0,-0.5\tikzcircuitssizeunit) --cycle}] ()
+ },
+ circuit declare annotation={remanent}{1\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(0,\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) --++(0,-\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(-2\tikzcircuitssizeunit,\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={var remanent}{1.5\tikzcircuitssizeunit}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.north) edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,-.5\pgflinewidth) --++(0,1.5\tikzcircuitssizeunit) -- ++(-2\tikzcircuitssizeunit,0) --++(0,-1.5\tikzcircuitssizeunit) --cycle}] () edge[circuit symbol open/.try,every relay coil/.try,to path={++(.5\tikzcircuitssizeunit,-.5\pgflinewidth) --++(0,.5\tikzcircuitssizeunit) --++(-\tikzcircuitssizeunit,.5\tikzcircuitssizeunit) --++(0,.5\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={electronic}{0pt}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.center) edge[circuit symbol open/.try,every relay coil/.try,to path={-- +(0,\tikzcircuitssizeunit) ++(0.5\tikzcircuitssizeunit,0) -- ++(-\tikzcircuitssizeunit,0) ++(.3\tikzcircuitssizeunit,0) -- +(-.5\tikzcircuitssizeunit,-.5\tikzcircuitssizeunit) ++(.4\tikzcircuitssizeunit,0) -- +(.5\tikzcircuitssizeunit,-.5\tikzcircuitssizeunit)}] ()
+ },
+ circuit declare annotation={thermal}{0pt}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.center) edge[circuit symbol open/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,0) -- ++(-.5\tikzcircuitssizeunit,0) -- ++(0,-\tikzcircuitssizeunit) -- ++(-\tikzcircuitssizeunit,0) -- ++(0,\tikzcircuitssizeunit) -- ++(-.5\tikzcircuitssizeunit,0)}] ()
+ },
+ circuit declare annotation={unaffected by alternating current}{0pt}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.center) edge[circuit symbol filled/.try,every relay coil/.try,to path={++(\tikzcircuitssizeunit,2\tikzcircuitssizeunit) --++(-.5\tikzcircuitssizeunit,0) -- ++(0,-4\tikzcircuitssizeunit) -- ++(.5\tikzcircuitssizeunit,0)--cycle}] () edge[circuit symbol filled/.try,every relay coil/.try,to path={++(-\tikzcircuitssizeunit,2\tikzcircuitssizeunit) --++(.5\tikzcircuitssizeunit,0) -- ++(0,-4\tikzcircuitssizeunit) -- ++(-.5\tikzcircuitssizeunit,0)--cycle}] ()
+ },
+ circuit declare annotation={mechanically resonant}{0pt}
+ {
+ [transform shape]
+ [-]
+ (\tikzlastnode.south) edge[circuit symbol lines/.try,every relay coil/.try,to path={++(0,.5\pgflinewidth) --++(0,-.6\tikzcircuitssizeunit) ++(0,-.4\tikzcircuitssizeunit) --++(0,-\tikzcircuitssizeunit) ++(0,-.4\tikzcircuitssizeunit) --++(0,-\tikzcircuitssizeunit)
+ (\tikzlastnode.south) ++(0,-1.5\tikzcircuitssizeunit+.5\pgflinewidth) arc [start angle=200, end angle=340, radius=0.5\tikzcircuitssizeunit]
+ (\tikzlastnode.south) ++(0,-1.5\tikzcircuitssizeunit+.5\pgflinewidth) arc [start angle=20, end angle=160, radius=0.5\tikzcircuitssizeunit]}] ()
+ },
+}
+
+\tikzset{
+ magnetic sensor IEC relay graphic/.style={
+ circuit symbol wires,
+ circuit symbol size=width 1 height 1,
+ transform shape,
+ shape=magnetic sensor IEC relay,
+ outer sep=0pt,
+ cap=round},
+ thermic sensor IEC relay graphic/.style={
+ circuit symbol wires,
+ circuit symbol size=width 1 height 1,
+ transform shape,
+ shape=thermic sensor IEC relay,
+ outer sep=0pt,
+ cap=round},
+ make contact IEC relay graphic/.style={
+ circuit symbol wires,
+ circuit symbol size=width 2 height 1,
+ transform shape,
+ shape=make contact IEC relay,
+ outer sep=0pt,
+ cap=round},
+ break contact IEC relay graphic/.style={
+ circuit symbol wires,
+ circuit symbol size=width 2 height 1,
+ transform shape,
+ shape=break contact IEC relay,
+ outer sep=0pt,
+ cap=round},
+ change over contact IEC relay graphic/.style={
+ circuit symbol wires,
+ circuit symbol size=width 2 height 2,
+ transform shape,
+ shape=change over contact IEC relay,
+ outer sep=0pt,
+ cap=round},
+ relay coil IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 2 height 4,
+ shape=rectangle ee,
+ transform shape},
+ proximity sensor coil IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 1.6 height 1.6,
+ shape=proximity sensor coil IEC relay,
+ transform shape},
+ % modifications
+ resistor IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 3 height 1,
+ shape=rectangle ee,
+ transform shape
+ },
+ inductor IEC relay graphic/.style={
+ circuit symbol filled,
+ circuit symbol size=width 3 height 1,
+ transform shape,
+ shape=rectangle ee
+ },
+ bulb IEC relay graphic/.style={
+ circuit symbol lines,
+ circuit symbol size=width 2 height 2,
+ shape=generic circle IEC,
+ /pgf/generic circle IEC/before background={
+ \pgfpathmoveto{\pgfpointpolar{-135}{1pt}}
+ \pgfpathlineto{\pgfpointpolar{45}{1pt}}
+ \pgfpathmoveto{\pgfpointpolar{-45}{1pt}}
+ \pgfpathlineto{\pgfpointpolar{135}{1pt}}
+ \pgfusepathqstroke
+ },
+ transform shape
+ },
+ fuse IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 3 height 1,
+ shape=rectangle ee,
+ append after command={%
+ \bgroup
+ edge[circuit symbol wires, to path={%
+ (\tikzlastnode.input) -- (\tikzlastnode.output)
+ }] ()
+ \egroup%
+ },
+ transform shape
+ },
+ horn IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 2 height 2,
+ shape=rectangle ee,
+ append after command={%
+ \bgroup
+ edge[circuit symbol open, to path={%
+ (0.3333\tikzcircuitssizeunit,-\tikzcircuitssizeunit) -- (0.8956\tikzcircuitssizeunit,-4.4689\tikzcircuitssizeunit) -- (-1\tikzcircuitssizeunit,-5\tikzcircuitssizeunit) -- (-0.3333\tikzcircuitssizeunit,-\tikzcircuitssizeunit) -- cycle}] ()
+ \egroup%
+ },
+ transform shape
+ },
+ var horn IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 2 height 2,
+ shape=rectangle ee,
+ append after command={%
+ \bgroup
+ edge[circuit symbol open, to path={%
+ (0.5\tikzcircuitssizeunit,-\tikzcircuitssizeunit) -- (\tikzcircuitssizeunit,-2\tikzcircuitssizeunit) -- (-\tikzcircuitssizeunit,-2\tikzcircuitssizeunit) -- (-0.5\tikzcircuitssizeunit,-\tikzcircuitssizeunit) -- cycle}] ()
+ \egroup%
+ },
+ transform shape
+ },
+ buzzer IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 2 height 2,
+ shape=rectangle ee,
+ append after command={%
+ \bgroup
+ edge[circuit symbol lines, to path={%
+ (\tikzcircuitssizeunit,-\tikzcircuitssizeunit) -- (-\tikzcircuitssizeunit,-2\tikzcircuitssizeunit)}] ()
+ \egroup%
+ },
+ transform shape
+ },
+ loud speaker IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 3 height 2,
+ shape=rectangle ee,
+ append after command={%
+ \bgroup
+ edge[circuit symbol open, to path={%
+ (1.5\tikzcircuitssizeunit,-\tikzcircuitssizeunit) -- (3.5\tikzcircuitssizeunit,-2.5\tikzcircuitssizeunit) -- (-3.5\tikzcircuitssizeunit,-2.5\tikzcircuitssizeunit) -- (-1.5\tikzcircuitssizeunit,-\tikzcircuitssizeunit) -- cycle}] ()
+ \egroup%
+ },
+ transform shape
+ },
+ mechanical interlock IEC relay graphic/.style={
+ circuit symbol open,
+ circuit symbol size=width 0.8 height 0.69282032,
+ inner sep=0pt,
+ shape=mechanical interlock IEC relay,
+ transform shape
+ }
+}
+
+
+\makeatletter
+\tikzset{
+ circuit ee IEC relay/.style=
+ {
+ circuit ee IEC,
+ % modifications
+ set resistor graphic = resistor IEC relay graphic,
+ set bulb graphic = bulb IEC relay graphic,
+ % aditions
+ set fuse graphic = fuse IEC relay graphic,
+ set horn graphic = horn IEC relay graphic,
+ set buzzer graphic = buzzer IEC relay graphic,
+ set loud speaker graphic = loud speaker IEC relay graphic,
+ set magnetic sensor graphic = magnetic sensor IEC relay graphic,
+ set thermic sensor graphic = thermic sensor IEC relay graphic,
+ set make contact graphic = make contact IEC relay graphic,
+ set break contact graphic = break contact IEC relay graphic,
+ % change-over break before make contact
+ set change over contact graphic = change over contact IEC relay graphic,
+ set relay coil graphic = relay coil IEC relay graphic,
+ set proximity sensor coil graphic = proximity sensor coil IEC relay graphic,
+ set mechanical interlock graphic = mechanical interlock IEC relay graphic,
+ % terminal info
+ term/.code={\pgfutil@ifnextchar[\tikz@lib@relay@lar@plain{\tikz@lib@relay@lar@plain[]}##1\pgf@stop},
+ term'/.code={\pgfutil@ifnextchar[\tikz@lib@relay@lbr@plain{\tikz@lib@relay@lbr@plain[]}##1\pgf@stop},
+ term''/.code={\pgfutil@ifnextchar[\tikz@lib@relay@lal@plain{\tikz@lib@relay@lal@plain[]}##1\pgf@stop},
+ every term/.style={font=\scriptsize},
+ every term'/.style={font=\scriptsize},
+ every term''/.style={font=\scriptsize},
+ activated/.is if=contact@activated,
+ every circuit ee IEC relay/.try
+ }
+}
+\makeatother
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-sfc/README.txt b/graphics/pgf/contrib/tikz-sfc/README.txt
new file mode 100644
index 0000000000..cb7b9b92e0
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-sfc/README.txt
@@ -0,0 +1,33 @@
+Copyright (C) 2018 by Luis Paulo Laus, <laus@utfpr.edu.br>
+------------------------------------------------------------
+
+The tikz-sfc package may be distributed and/or modified
+under the conditions of the LaTeX Project Public License,
+either version 1 of this license or (at your option) any later
+version. The latest version of this license is in:
+ http://www.latex-project.org/lppl.txt and version 1 or
+later is part of all distributions of LaTeX version 1999/12/01
+or later.
+
+Version: 1.0.1
+Version date: 2018-12-15
+
+------------------------------------------------------------
+
+Sequential Function Chart (SFC) describes the behaviour of a
+control program. It is derived from Petri Nets and GRAFCET.
+This package contains a set of symbols that simplifies the
+drawing of SFC diagrams with emphasis in readability and in
+agreement with the international standard IEC 61 131-3. It
+extends the TikZ-library circuits which defines general keys
+for creating circuits. All graphic elements of SFC are
+supported by tikz-sfc: steps (normal and initial),
+transitions, actions and actions qualifiers (with and without
+time duration) are supported. The placement of all actions
+associated with a step is done automatically. Comments can
+also be placed automatically in a suitable location near the
+element they refer to. The final appearance of each element
+can be fine-tuned individually or in group.
+
+------------------------------------------------------------
+
diff --git a/graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.pdf b/graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.pdf
new file mode 100644
index 0000000000..9ba9055347
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.tex b/graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.tex
new file mode 100644
index 0000000000..c464ff2851
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-sfc/doc/BeamerAnimation.tex
@@ -0,0 +1,90 @@
+%% This is file `BeamerAnimation.tex'
+%% Version: 1.0.1
+%% Version date: 2018-15-12
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software `tikzlibrarycircuits.plc.sfc.code.tex'
+%% and its accompanying documentation and `The Copyright Holder' referring to
+%% the person Luis Paulo Laus.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+
+\documentclass{beamer}
+\usepackage{tikz,units}
+\usetikzlibrary{backgrounds, circuits.plc.sfc}
+
+\makeatletter
+\newcommand*{\overlaynumber}{\number\beamer@slideinframe}
+\makeatother
+
+\tikzset{ % alt and visible (overlay)
+ alt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
+ },
+ visible/.code args={<#1>#2}{%
+ \alt<#1>{\pgfkeysalso{#2}}{}
+ }
+}
+
+\colorlet{LBlue}{blue!20}
+\colorlet{LRed}{red!30}
+
+\begin{document}
+
+\begin{frame}{Delta-star motor starter with dead time in SFC: \overlaynumber{}}
+\begin{columns}[c]
+
+\column{0.4\textwidth}
+
+\noindent \begin{center}
+\begin{tikzpicture}[circuit plc sfc,thick,x=2.6\tikzcircuitssizeunit,
+ y=1.3\tikzcircuitssizeunit,sfcaqw=9\tikzcircuitssizeunit]
+ \draw (0,0)
+ to [flow direction={pos=0.95}] ++(0,-1)
+ to [sfcstepi={info=O,visible={<1,2,7>{fill=LBlue}}}] ++(0,-4)
+ node [sfctransition={info=b1 AND NOT b0},name=t1,visible={<2>{red}}] {}
+ to [sfcstep={info=I,visible={<3-6>{fill=LBlue}},
+ sfcaction={info=K1,qualifier=N,visible={<3-6>{fill=LBlue}}},
+ sfcaction={info=K2,qualifier=L,time=T\#3s,visible={<3>{fill=LBlue}}},
+ sfcaction={info=K3,qualifier=D,time=T\#3s400ms,visible={<5-6>{fill=LBlue}}}}] ++(0,-4)
+ node [sfctransition={info=b0},name=t2,visible={<6>{red}}]{}
+ |- ++(-1,-1) |- (0,0);
+ \begin{pgfonlayer}{background}
+\visible<2>{
+ \draw[fill=LRed,LRed](t1) circle (0.4);
+}
+\visible<6>{
+ \draw[fill=LRed,LRed](t2) circle (0.4);
+}
+ \end{pgfonlayer}
+\end{tikzpicture}
+\par\end{center}
+\column{0.6\textwidth}
+Delta-star with dead time:
+\begin{itemize}[<+->]
+\item initially, the motor is off
+\item b1 is pressed
+\item K1 and K2 are activated -- star
+\item after $\unit[3]{s}$, K2 is deactivated -- dead time
+\item after $\unit[0.4]{s}$, K3 is activated -- delta
+\item b0 is pressed
+\item motor is off
+\end{itemize}
+\end{columns}
+\noindent \begin{center}
+\par\bigskip
+Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+\end{center}
+\end{frame}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.pdf b/graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.pdf
new file mode 100644
index 0000000000..89a16cb9b6
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.tex b/graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.tex
new file mode 100644
index 0000000000..66b0662291
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-sfc/doc/tikz-sfc-doc.tex
@@ -0,0 +1,780 @@
+%% This is file `tikz-sfc-doc.tex'
+%% Version: 1.0.1
+%% Version date: 2018-15-12
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software `tikzlibrarycircuits.plc.sfc.code.tex'
+%% and its accompanying documentation and `The Copyright Holder' referring to
+%% the person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+\documentclass[a4paper]{ltxdoc}
+\usepackage[hyphens]{url}
+\usepackage[pdfborder={0 0 0}]{hyperref}
+\usepackage[version=latest]{pgf}
+\usepackage{calc,listings,tikz}
+\usepackage{pdfpages}
+
+\usepackage{hyperref}
+\hypersetup{%
+ colorlinks=false, % use true to enable colors below:
+ linkcolor=blue,%red,
+ filecolor=blue,%magenta,
+ urlcolor=blue,%cyan,
+ citecolor=blue,
+ pdfborder=0 0 0,
+}
+
+% We need lots of libraries\ldots
+\usetikzlibrary{backgrounds,circuits.logic.IEC}
+
+\newif\ifgdccodebasic
+\newif\ifgdccodeogdf
+
+\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead]{geometry}
+\usepackage{amsmath,amssymb}
+\usepackage{xxcolor}
+\usepackage{pifont}
+%% \usepackage{tgpagella} % no ligatures (test)
+\usepackage{makeidx}
+\usepackage{enumitem}
+\usepackage[T1]{fontenc}
+\usepackage[latin9]{inputenc}
+
+
+\input{pgfmanual-en-macros} % Borrowed from TikZ/PGF
+
+\makeindex
+
+\makeatletter
+\renewcommand*\l@section[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \setlength\@tempdima{2.5em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode \bfseries
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
+ \endgroup
+ \fi}
+\renewcommand*\l@subsection{\@dottedtocline{2}{2.5em}{3.3em}}
+\renewcommand*\l@subsubsection{\@dottedtocline{3}{5.8em}{4.2em}}
+\def\@pnumwidth{2.2em}
+\makeatother
+
+
+% Global styles:
+\tikzset{
+ every plot/.style={prefix=plots/pgf-},
+ shape example/.style={
+ color=black!30,
+ draw,
+ fill=yellow!30,
+ line width=.5cm,
+ inner xsep=2.5cm,
+ inner ysep=0.5cm}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file really starts here, all the above is for pgfmanual
+% compatibility
+% \usetikzlibrary{circuits.plc.sfc}
+\input ../tex/tikzlibrarycircuits.plc.sfc.code
+% \usetikzlibrary{circuits.plc.ladder} % used in examples
+\input ../../tikz-ladder/tex/tikzlibrarycircuits.plc.ladder.code
+\sloppy
+
+\begin{document}
+
+\title{Typesetting Sequential Function Chart (SFC) with \LaTeX{} and \tikzname{}}
+\author{Luis Paulo Laus\\e-mail: \texttt{laus@utfpr.edu.br}}
+\date{Version: 1.0, Version date: 2018-01-16}
+
+\maketitle
+
+\section{Abstract}
+Sequential Function Chart (SFC) describes the behaviour of a control program. It is derived from Petri Nets and GRAFCET. This package contains a set of symbols that simplifies the drawing of SFC diagrams with emphasis in readability and in agreement with the international standard IEC~61\,131-3. It extends the \tikzname-library |circuits| which defines general keys for creating circuits. All graphic elements of SFC are supported by |tikz-sfc|: steps (normal and initial), transitions, actions and actions qualifiers (with and without time duration) are supported. The placement of all actions associated with a step is done automatically. Comments can also be placed automatically in a suitable location near the element they refer to. The final appearance of each element can be fine-tuned individually or in group.
+
+\section{Introduction\label{sec:introduction}}
+IEC~61\,131-3 Sequential Function Chart (SFC) describes the behaviour of a control program. It is derived from Petri Nets and IEC~60\,848 GRAFCET, with the changes necessary to convert the representation from a documentation standard to a set of execution control elements.
+
+The GRAFCET language, described by IEC~60\,848, has served as foundation of SFC
+language of IEC standard 61\,131-3, but the syntax and the semantics defined by each of the two standards are nevertheless distinct because their scopes are different. GRAFCET is regarded as a \emph{specification language} and SFC as an \emph{implementation of the language for programming}. Many features of GRAFCET are not supported in SFC, but all GRAFCET functionalities can be implemented in SFC, although not directly. Particularly, assignation condition, time dependent assignation condition, delayed action, time limited action, stored actions, action on activation, action on deactivation, action at the clearing and action on event are all done, one way or another, in SFC using action qualifiers\footnote{This package typesets qualifiers in the agreement with the international standard IEC 61 131-3/2013. The lack of qualifier support in GRAFCET and in particular in the |grafcet| package is the main reason to have a different package for SFC.} (mainly). Consequently, the graphical representation of those features is fairly different. If you are interested in GRAFCET, refer to Robert Papanicola's |grafcet| package\footnote{The |grafcet| package uses a very different approach in the user interface. It is based in writing down a sequence of macro calls. The |tikz-sfc| uses the \tikzname-library |circuits| interface in which you place symbols along a path.}.
+
+SFC structures the internal organization of a program, and helps to decompose a control problem into manageable parts, while maintaining the overview.
+
+SFC consists of steps and transitions interconnected by directed links. Associated with each step is a set of actions, and with each transition is associated a transition condition. Each step represents a particular state of the systems being controlled. A transition is associated with a condition, which, when true, causes the step before the transition to be deactivated, and the next step to be activated. Steps are linked to actions, performing a certain control action. An action qualifier can be used in the association of a step with an action. Each element can be programmed in any of the standard languages defined in IEC~61\,131-3, including SFC itself.
+
+Steps (normal and initial), transitions, actions and actions qualifiers (with and without time) are shown in the example below for a star-delta motor starter with dead time.
+
+\begin{codeexample}[width=4.5cm]
+\begin{tikzpicture}[circuit plc sfc,thick,x=2.6\tikzcircuitssizeunit,
+ y=1.3\tikzcircuitssizeunit,sfcaqw=8\tikzcircuitssizeunit]
+ \draw (0,0)
+ to [flow direction={pos=0.95}] ++(0,-1)
+ to [sfcstepi={info=O}] ++(0,-4)
+ node [sfctransition={info=b1 AND NOT b0}] {}
+ to [sfcstep={info=I,
+ sfcaction={info=K1,qualifier=N},
+ sfcaction={info=K2,qualifier=L,time=T\#3s},
+ sfcaction={info=K3,qualifier=D,time=T\#3s400ms}}] ++(0,-4)
+ node [sfctransition={info=b0}]{}
+ |- ++(-1,-1) |- (0,0);
+\end{tikzpicture}
+\end{codeexample}
+
+\section{SFC Library}
+\begin{pgflibrary}{circuits.plc.sfc}
+This library provides graphics for Sequential Function Chart (SFC) related to programable controllers (PLC) and according to the international standard IEC-61\,131-3. The library was written to extend the standard \tikzname\-library |circuit|. The reader is urged to read the Section~``Circuit Libraries'' of \tikzname\ manual.
+This library defines the following keys:
+
+\begin{key}{/tikz/circuit plc sfc}
+This key should be passed as an option to a picture or a scope that contains a SFC. It will do some internal setups.
+\end{key}
+
+\begin{key}{/tikz/sfcaqw=\meta{width} (initially 0\char`\\|tikzcircuitssizeunit|)}
+This key sets the qualifier width. See Section~\ref{sec:actions} for details.
+\end{key}
+
+\begin{key}{/tikz/sfcanw=\meta{width} (initially 2.6\char`\\|tikzcircuitssizeunit|)}
+This key sets the action name width. See Section~\ref{sec:actions} for details.
+\end{key}
+
+\begin{key}{/tikz/sfcah=\meta{height} (initially 2.6\char`\\|tikzcircuitssizeunit|)}
+This key sets the action height. See Section~\ref{sec:actions} for details.
+\end{key}
+
+\begin{key}{/tikz/time=\meta{time}}
+This key sets the action duration time to be used with qualifier D, L, DS, SD, LS. See Section~\ref{sec:actions} for details.
+\end{key}
+
+\begin{key}{/tikz/qualifier=\meta{qualifier}}
+This key sets the action qualifier. See Section~\ref{sec:actions} for details.
+\end{key}
+
+\begin{stylekey}{/tikz/flow direction arrow}
+The value of this key will be used for the arrow tip for |flow direction| as depicted in |direction ee| shape in \tikzname\ manual.
+\end{stylekey}
+\end{pgflibrary}
+
+
+\section{Convention}
+In this package, the main information about the language element is written with |info|=\meta{text} and comments with |info'|=\meta{comment}. The |tikz-sfc| package takes care of placing those texts in the appropriated position. For steps and actions, |info| places the \meta{text} inside the block that represents the element. For transitions, |info| places the \meta{text} at the right side of the transition symbol. Comments are placed at left side of steps and transitions and right side of actions. This behaviour can be override using the \meta{angle} option. For instance, if you want to place a comment at the right side of a step, you need to type something like \verb|info'={right:(* first step *)}|. See Section~``The Label Option'' in \tikzname\ manual for details.
+
+
+\section{Steps}
+A step represents a situation in which the behaviour of a program organization unit (POU) with respect to its inputs and outputs follows a set of rules defined by the associated actions of the step. A step is either active or inactive. At any given moment, the state of the program organization unit is defined by the set of active steps and the values of its internal and output variables.
+
+A step shall be represented graphically by a block containing a step name in the form of an identifier. The directed link(s) into the step can be represented graphically by a vertical line attached to the top of the step. The directed link(s) out of the step can be represented by a vertical line attached to the bottom of the step.
+
+The initial state of the program organization unit is represented by the initial values of its internal and output variables, and by its set of initial steps, i.e., the steps which are initially active. Each SFC network shall have exactly one initial step.
+
+The graphical form with directed links of an initial step and a step (normal\footnote{A step which is not initial is just called ``step'', the ``normal'' is unappropriated, that is why is was written between parenthesis. This document is full of pedantic comments like this.}) are shown below:
+
+\begin{center}
+\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit]
+ \draw (0,0)
+ to [sfcstepi={info=S0}] (0,-4);
+ \draw (2,0)
+ to [sfcstep={info=S1}] (2,-4);
+\end{tikzpicture}
+\end{center}
+
+One or more actions (actually, action blocks) can be associated with a step. See Section~\ref{sec:actions} for details.
+
+The initial size of all steps is $2.6\times2.6$|\tikzcircuitssizeunit|. This size and other features can be changed globally using the style |every sfcstepi/.style| for initial steps and |every sfcstep/.style| for steps. For example, to change the size of all steps to $1\times 1$|cm|, the line colour to red, fill them in light blue and change the distance\footnote{The default value is six times the inner separation which, by its time, is half the line width. Thus, just divide the desire among by six.} between the lines of the initial step to 1.8\,mm, you can place |every sfcstep/.style={red, fill=blue!20, minimum width=1cm, minimum height=1cm, inner sep=0.3mm},every sfcstepi/.style=every sfcstep| as an option to your \tikzname\ command. You can also use the command |\tikzset| to set it document wide.
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,
+ every sfcstep/.style={red, fill=blue!20, minimum width=1cm,
+ minimum height=1cm, inner sep=0.3mm},
+ every sfcstepi/.style=every sfcstep]
+ \draw (0,0)
+ to [sfcstepi={info=S0}] (0,-4);
+ \draw (2,0)
+ to [sfcstep={info=S1}] (2,-4);
+\end{tikzpicture}
+\end{codeexample}
+
+Every step need a step name and it is placed inside the block by the |info| key.
+\begin{key}{/tikz/info=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}}
+ This key has nearly the same effect as the |label| key, only the placement position is change to the block centre and following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every info}
+ Set this style to configure the styling of info labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ The \meta{options} and \meta{angle} are passed directly to the
+ |label| command.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,
+ every info/.style=red]
+ \draw (0,0)
+ to [sfcstepi={info=S0}] (0,-4);
+ \draw (2,0)
+ to [sfcstep={info=S1}] ++(0,-4);
+\end{tikzpicture}
+\end{codeexample}
+
+ For a detailed discussion of the |label| option refer to the \tikzname\ manual.
+\end{key}
+
+\begin{key}{/tikz/info'=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}}
+ This key is meant to place a comment at the \emph{left} side of the step\footnote{Note that, IEC~61\,131 does allow comments, but it is not clear where they are allowed.}. It has nearly the same effect as the |label| key, only the placement position is change and following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every info'}
+ Set this style to configure the styling of info' labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ The \meta{options} and \meta{angle} are passed directly to the |label| command.
+\begin{codeexample}[width=3.2cm]
+\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,
+ every info'/.style={red,font=\ttfamily,text width=2cm}]
+ \draw (0,0)
+ to [sfcstepi={info=S0,info'={(* initial step *)}}] (0,-4);
+ \draw (0,-5)
+ to [sfcstep={info=S1,info'={(* step or ``normal'' step *)}}] ++(0,-4);
+\end{tikzpicture}
+\end{codeexample}
+ For a detailed discussion of the |label| option refer to the \tikzname\ manual. % \ttfamily, \bfseries, \large, \scshape, \itshape, \fontfamily{ptm}
+\end{key}
+
+
+\section{Transitions}
+A transition represents the condition whereby control passes from one or more steps preceding the transition to one or more successor steps along the corresponding directed link. The transition shall be represented by a horizontal line across the vertical directed link.
+
+The direction of evolution following the directed links shall be from the bottom of the predecessor step(s) to the top of the successor step(s).
+
+Each transition shall have an associated transition condition which is the result of the evaluation of a single Boolean expression. A transition condition which is always true shall be represented by the symbol 1 or the keyword TRUE.
+
+A transition condition can be associated with a transition by one of the following means, as
+shown in example bellow\footnote{Textual representation of transition is not covered herein. Connector, though possible, is not covered herein.}:
+\begin{enumerate}
+\item By placing the appropriate Boolean expression in the Structured Text (ST) language physically or logically adjacent to the vertical directed link.
+\item By a ladder diagram network in the Ladder Diagram (LD) language physically or logically adjacent to the vertical directed link.
+\item By a network in the Function Block Diagram (FBD) language, physically or logically adjacent to the vertical directed link.
+\end{enumerate}
+
+\begin{codeexample}[width=6cm]
+\begin{tikzpicture}[circuit plc ladder, circuit logic IEC, circuit plc sfc, thick,
+ y=1.3\tikzcircuitssizeunit, x=2.6\tikzcircuitssizeunit,
+ sfcaqw=2.6\tikzcircuitssizeunit]
+ \draw (0,0) node[above,blue]{ST}
+ to [sfcstep={info=S1}] ++(0,-4)
+ to [sfctransition={name=t1,info=b1 AND b2}] ++(0,-2)
+ to [sfcstep={info=S2}] ++(0,-4);
+ \pgftransformyshift{-16\tikzcircuitssizeunit}
+ \draw (0,0) node[above,blue]{LD}
+ to [sfcstep={info=S1}] ++(0,-4)
+ to [sfctransition={name=t1}] ++(0,-2)
+ to [sfcstep={info=S2}] ++(0,-4);
+ \draw (t1)
+ to [contact NO={info'=b2}] ++(-2,0)
+ to [contact NO={info'=b1}] ++(-2,0) ++(0,2) -- +(0,-4);
+ \pgftransformyshift{-16\tikzcircuitssizeunit}
+ \draw (0,0) node[above,blue]{FBD}
+ to [sfcstep={info=S1}] ++(0,-4)
+ to [sfctransition={name=t1}] ++(0,-2)
+ to [sfcstep={info=S2}] ++(0,-4);
+ \node[and gate={name=a1}] at ($(t1)-(2,0)$) {};
+ \draw (a1.input 1) -- ++(-1,0) node[left]{b1}
+ (a1.input 2) -- ++(-1,0) node[left]{b2}
+ (a1.output) -- (t1);
+\end{tikzpicture}
+\end{codeexample}
+
+For Ladder Diagram (LD) language typesetting refer to, for instance, package |tikz-ladder| and its documentation. For Function Block Diagram (FBD) language typesetting refer to \tikzname-library |circuits.logic.IEC| in the \tikzname\ manual. In this case, in order to conform \tikzname-library |circuits.logic.IEC| with IEC~61\,131-3 you need to place the following command in the document preamble:
+
+\begin{codeexample}[code only]
+\tikzset{every circuit symbol/.style={
+ logic gate inverted radius=0.8ex,
+ and gate IEC symbol = {$\char`\&$},
+ nand gate IEC symbol = {$\char`\&$},
+ or gate IEC symbol = {$>=1$},
+ nor gate IEC symbol = {$>=1$},
+ xor gate IEC symbol = {$=2k+1$},
+ xnor gate IEC symbol = {$=2k+1$},
+ not gate IEC symbol = {},
+ buffer gate IEC symbol = {}
+ }}
+\end{codeexample}
+\noindent{}or, if the textual Boolean function names are preferred:
+
+\begin{codeexample}[code only]
+\tikzset{every circuit symbol/.style={
+ logic gate inverted radius=0.8ex,
+ and gate IEC symbol = {AND},
+ nand gate IEC symbol = {AND},
+ or gate IEC symbol = {OR},
+ nor gate IEC symbol = {OR},
+ xor gate IEC symbol = {XOR},
+ xnor gate IEC symbol = {XOR},
+ not gate IEC symbol = {},
+ buffer gate IEC symbol = {NOT}
+ }}
+\end{codeexample}
+\noindent{}Note that, in this case, |buffer gate| is meant for |NOT| function (a block with the word ``NOT'' inside of it). The |not gate| produces an empty rectangle with a circle in the output to represent the negation.
+
+Transitions are affected by the following keys:
+
+\begin{stylekey}{/tikz/every sfctransition}
+ Set this style to configure the styling of transitions.
+\begin{codeexample}[width=1.5cm]
+\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,
+ every sfctransition/.style={red}]
+ \draw (0,0)
+ to [sfctransition={info=b1}] ++(0,-1);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{key}{/tikz/info=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}}
+ This key is meant to place a Boolean expression in the Structured Text (ST) language at the \emph{right} side of the transition to depict the transition condition. It has nearly the same effect as the |label| key, only the placement position is change and following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every info}
+ Set this style to configure the styling of info labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ The \meta{options} and \meta{angle} are passed directly to the |label| command.
+\begin{codeexample}[width=3.4cm]
+\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,
+ every info/.style={red}]
+ \draw (0,0)
+ to [sfcstep={info=S1}] ++(0,-4)
+ to [sfctransition={info=b1 AND b2}] ++(0,-1)
+ to [sfcstep={info=S2}] ++(0,-4);
+\end{tikzpicture}
+\end{codeexample}
+ Note that this key affects all |info| keys, including those used in steps. For a detailed discussion of the |label| option refer to the \tikzname\ manual.
+\end{key}
+
+\begin{key}{/tikz/info'=\opt{|[|\meta{options}|]|\meta{angle}|:|}\meta{text}}
+ This key is meant to place a comment at the \emph{left} side of the transition\footnote{Note that, IEC~61\,131 does allow comments, but it is not clear where they are allowed.}. It has nearly the same effect as the |label| key, only the placement position is change and following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every info'}
+ Set this style to configure the styling of info' labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ The \meta{options} and \meta{angle} are passed directly to the |label| command.
+\begin{codeexample}[width=5cm]
+\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,
+ every info'/.style={red,font=\ttfamily}]
+ \draw (0,0)
+ to [sfcstep={info=S1, info'={(* S1 *)}}] ++(0,-4)
+ to [sfctransition={info=b1 AND b2, info'={(* t1 *)}}] ++(0,-1)
+ to [sfcstep={info=S2, info'={(* S2 *)}}] ++(0,-4);
+\end{tikzpicture}
+\end{codeexample}
+ Note that this key affects all |info'| keys, including those used in steps. For a detailed discussion of the |label| option refer to the \tikzname\ manual.
+\end{key}
+
+
+
+\section{Flow direction}
+
+When necessary for clarity, an arrow can be used to indicate control flow. When this feature is used, the arrow shall be located in the middle of the line, or at least not at the line ends\footnote{IEC~61\,131-3/2013 demands that ``When this feature is used, the corresponding character shall be located between two ``-'' characters, that is, in the character sequence ``|-<-|'' or ``|->-|''\ldots'' indicating that the arrow shall not be in the end of a line.}.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit plc sfc,thick,circuit symbol unit=9pt,
+ x=1.2cm, y=1.3\tikzcircuitssizeunit]
+ \node[sfcstepi={info=S11},name=n0]{};
+ \draw (n0)
+ to [sfctransition={info=t21}] ++(0,-3) coordinate(n1)
+ to [sfcstep={info=S12}] ++(0,-4)
+ node [sfctransition={info=t22}]{}
+ to [sfcstep={info=S13}] ++(0,-4) coordinate(n2) -- ++(0,-1)
+ node [sfctransition={info=t23}]{}
+ to [sfcstep={info=S14}] ++(0,-4)
+ (n2) -| ++(1,-1)
+ node [sfctransition={info=t24}]{}
+ -- ++(0,-1) to [flow direction] +(1,0) |- ($(n1)+(2,0)$) to [flow direction] (n1);
+\end{tikzpicture}
+\end{codeexample}
+
+There are two symbols for indicating flow directions:
+
+|/tikz/flow direction|: \tikz[circuit plc sfc,baseline] \draw (0,0.6ex) to [flow direction] (1,0.6ex); and
+
+|/tikz/flow direction'|: \tikz[circuit plc sfc,baseline] \draw (0,0.6ex) to [flow direction'] (1,0.6ex);
+
+In other words, the apostrophe (|'|) reverts the arrow direction.
+
+The |to| command is used to place the arrow between two coordinates and the position of the arrow can be fine-tuned with |pos| key. Do not use \verb|pos=1|, it makes impossible for the internal algorithm to establish the correct orientation.
+
+If there is nothing beyond the next coordinates, |pos| behaves quit predictably:
+
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0}] (0,-1);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0.05}] (0,-1);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0.5}] (0,-1);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0.95}] (0,-1);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,red,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=1}] (0,-1);
+\end{codeexample}
+\noindent{}where~ \tikz[y=1.3\tikzcircuitssizeunit,>=stealth]\draw[thin,black,|<->|] (0,0) -- (0,-1); ~is one unit of length long and serves to indicate where the \verb|\draw| command starts and ends. It points out that the \verb|pos| stablishes the arrow centre (not its tip as intuition might suggest).
+
+Care should be taken when the next command is also a |to| because the next length will not be taken into account for the placement of the arrow. This can be misleading:
+
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0}] ++(0,-1) to [sfcstepi={info=S1}] ++(0,-4);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0.05}] ++(0,-1) to [sfcstepi={info=S1}] ++(0,-4);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0.5}] ++(0,-1) to [sfcstepi={info=S1}] ++(0,-4);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,>=stealth]},post={\draw[thin,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=0.95}] ++(0,-1) to [sfcstepi={info=S1}] ++(0,-4);
+\end{codeexample}
+\begin{codeexample}[width=1cm,pre={\begin{tikzpicture}[circuit plc sfc,thick,y=1.3\tikzcircuitssizeunit,red,>=stealth]},post={\draw[thin,black,|<->|] (0.3,0) -- (0.3,-1);\end{tikzpicture}}]
+\draw (0,0) to [flow direction={pos=1}] ++(0,-1) to [sfcstepi={info=S1}] ++(0,-4);
+\end{codeexample}
+
+Note that the distance considered by |pos| is not from |(0,0)| to top of the initial step block, but from |(0,0)| to |(0,-1)| which, in this case, is a point half the way from |(0,0)| to top of the step block. The arrow need to be placed near |(0,-1)|, but since \verb|pos=1| turns the arrow around, the solution is to use \verb|pos=0.95|.
+
+\section{Divergence of sequence with left to right priority}
+A selection between several sequences is represented by as many transition symbols, under the horizontal line, as there are different possible evolutions. The asterisk denotes left-to-right priority of transition evaluations. To place an asterisk, we use the symbol |sfcstar|:
+
+\begin{codeexample}[]
+\begin{tikzpicture}[circuit plc sfc,thick,x=2.6\tikzcircuitssizeunit,
+ y=1.3\tikzcircuitssizeunit]
+ \draw (0,0)
+ to [sfcstep={info=S1,pos=0.4},sfcstar={name=divORC,pos=0.8}] ++(0,-5)
+ node [sfctransition={info=t2}]{}
+ to [sfcstep={info=S3}] ++(0,-4)
+ (divORC) -- ++(-2.2,0) ++(0.2,0) -- ++(0,-1)
+ node [sfctransition={info=t1}]{}
+ to [sfcstep={info=S2}] ++(0,-4)
+ (divORC) -- ++(2.2,0) ++(-0.2,0) -- ++(0,-1)
+ node [sfctransition={info=t3}]{}
+ to [sfcstep={info=S4}] ++(0,-4);
+\end{tikzpicture}
+\end{codeexample}
+
+The asterisk has to be placed with the special syntax |to| in order to interrupt the lines near it. Thus, the first |to| command places both the step~S1 and the asterisk. To leave enough room, the usual distance of four units of length were increased to five units of length. The step is placed two units of length bellow the line start ($5\cdot 0.4=2$) and de asterisk is place one unit of length above the transition ($5-5\cdot 0.8=1$). See Section~\ref{sec:guidance} for hints on how to set the unit of length to a sensible value.
+
+
+\section{Actions\label{sec:actions}}
+One or more actions (actually, action blocks) can be associated with a step. Each association is done by the annotation\footnote{The |sfcaction| style is not an annotation any longer, but it was initially written as an annotation and behaves like one. The main difference from a real annotation is that there is not |sfcaction'| to place a mirrored action.} |sfcaction|. The first action associated with the step will be placed at the right side of the step and a line will be drawn connecting the action and the step. The distance between the step and the action is controlled by |label distance|. The default distance is |2\tikzcircuitssizeunit|. Any further actions will be placed bellow the last action associated with the step. The action template is:
+\begin{center}
+\begin{tikzpicture}[circuit plc sfc,thick]
+ \node[sfcstep={gray,info={[gray]$s$},sfcaction={info={[name=ac]$a$},qualifier=$q$,time=$t$,sfcaqw=4\tikzcircuitssizeunit}}] {};
+ \draw[|<->|,thin] ($(ac.south west) - (6\tikzcircuitssizeunit-\pgflinewidth,5mm)$) -- node[above]{$d$} ($(ac.south west) - (4\tikzcircuitssizeunit-2\pgflinewidth,5mm)$);
+ \draw[|<->|,thin] ($(ac.south west) - (4\tikzcircuitssizeunit-\pgflinewidth,5mm)$) -- node[above]{$x$} ($(ac.south west) - (-2\pgflinewidth,5mm)$);
+ \draw[|<->|,thin] ($(ac.south west) - (-\pgflinewidth,5mm)$) -- node[above]{$w$} ($(ac.south east) - (\pgflinewidth,5mm)$);
+ \draw[|<->|,thin] ($(ac.south east) + (5mm,\pgflinewidth)$) -- node[above,rotate=90]{$2h$} ($(ac.north east) + (5mm,-\pgflinewidth)$);
+\end{tikzpicture}
+\end{center}
+\noindent{}where:
+\begin{description}[align=right,leftmargin=8mm,labelwidth=6mm,labelsep=2mm]
+\item[$s$] is the associated step;
+\item[$q$] is the action qualifier set by key |qualifier|. The style for all qualifiers can be set by \verb|every sfcqualifier/.style|. Accordingly to the standard IEC~61\,131-3, the valid qualifier are: (none), N, R, S, L, D, P, SD, DS, SL, P1 and P0. No test is performed, however, to reinforce this rule and it is the user responsibility to cope with the standard in this respect;
+\item[$t$] is the duration time (to be used with qualifiers: L, D, SD, DS, and SL) and set by key |time|. Again, no test is performed and any qualifier can be associated with a time, even if it is not in accordance to the standard implying in a syntax error. The style for all duration times can be set by \verb|every sfctime/.style|. Remember that the symbol \# shall be preceded by a |\|, e.g., to obtain T\#3s type |T\#3s|;
+\item[$a$] the action name set by key |info|. The style for all action names can be set by \verb|every sfcactionname/.style|;
+\item[$d$] the horizontal distance between the step and the action(s) associated with the step. This can be set globally using something like \verb|every sfcaction/.style={label distance=1cm}| or individually placing a label distance specification on the desired |sfcaction| -- this potentially breaks multiple actions alignment on the same step;
+\item[$x$] the qualifier width set, usually globally, by key |sfcaqw|;
+\item[$w$] the action name width set, usually globally, by key |sfcanw|; and
+\item[$h$] the single line action height set, usually globally, by key |sfcah|. Actions with time association have a height of $2h$ and this is done automatically.
+\end{description}
+Initially, the qualifier width, $x$ in the figure, |sfcaqw| is set to zero because either qualifiers are not used (defaulted to ``null qualifier'') or it needs to be set manually to match the biggest qualifier or qualifier duration. It is possible to set |sfcaqw| individually, but usually it is not desirable.
+
+In the first example, for instance, the qualifier width |sfcaqw| is set to |8\tikzcircuitssizeunit| to leave room for the duration time of T\#3s400ms, then three actions were associated with step~|I|.
+
+\begin{stylekey}{/tikz/every sfcaction}
+ Set this style to configure the styling of action blocks. The horizontal distance between the step and the actions is controlled by |label distance|, here is place to adjust it globally.
+\end{stylekey}
+
+\begin{stylekey}{/tikz/every sfcqualifier}
+ Set this style to configure the styling of action qualifiers.
+\end{stylekey}
+
+\begin{stylekey}{/tikz/every sfctime}
+ Set this style to configure the styling of action qualifier time durations.
+\end{stylekey}
+
+\begin{stylekey}{/tikz/every sfcactionname}
+ Set this style to configure the styling of action names.
+\end{stylekey}
+
+\begin{key}{/tikz/info=\opt{|[|\meta{options}|]|}\meta{text}}
+ This key is meant to place the action name inside the action block. The following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every info}
+ Set this style to configure the styling of info labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+ \end{stylekey}
+ Note that this key affects all |info| keys, including those used in steps and transitions.
+\end{key}
+
+\begin{key}{/tikz/info'=\opt{|[|\meta{options}|]|}\meta{text}}
+ This key is meant to place a comment at the \emph{right} side of the action\footnote{Note that, IEC~61\,131 does allow comments, but it is not clear where they are allowed.}. The following style is used additionally and automatically:
+ \begin{stylekey}{/tikz/every info'}
+ Set this style to configure the styling of info' labels. Since this
+ key is \emph{not} used with normal labels, it provides an easy way
+ of changing the way info labels look without changing other
+ labels.
+\begin{codeexample}[width=7.3cm]
+\begin{tikzpicture}[circuit plc sfc,thick,
+ x=2.6\tikzcircuitssizeunit,
+ y=1.3\tikzcircuitssizeunit,
+ sfcaqw=8\tikzcircuitssizeunit,
+ every info'/.style={blue,font=\ttfamily,
+ text width=2.2cm}]
+ \draw (0,0)
+ to [flow direction={pos=0.95}] ++(0,-1)
+ to [sfcstepi={info=O,info'=
+{[text width=]right:(* K1{,} K2 and K3 are all OFF *)}}]
+ ++(0,-4)
+ node [sfctransition={info=b1 AND NOT b0}] {}
+ to [sfcstep={info=I,
+ sfcaction={info=K1,qualifier=N,
+ info'=(* main relay ON *)},
+ sfcaction={info=K2,qualifier=L,time=T\#3s,
+ info'={[red](* star for 3s *)}},
+ sfcaction={info=K3,qualifier=D,time=T\#3s400ms,
+ info'=(* delta{,} after 0.4s dead time *)}}
+ ] ++(0,-4)
+ node [sfctransition={info=b0}]{}
+ |- ++(-1,-1) |- (0,0);
+\end{tikzpicture}
+\end{codeexample}
+ \end{stylekey}
+ Note that this key affects all |info'| keys, including those used in steps and transitions. Also, observe that the commas in ``K1, K2 and\ldots'' and ``delta, after\ldots'' are surrounded by curly brackets. This is also necessary for colon (:) and equal sign (=). However, the colon in |[text width=]right:(* K1{,}|\ldots it is not meant to be printed, it is a \meta{angle} specification marker and such as it is not surrounded by curly brackets.
+\end{key}
+
+
+\section{Design Guidance\label{sec:guidance}}
+
+This section brings some recommendations that reflect the way I produce SFC diagrams. It may or may not work for you. Feel free to e-mail me if you have better ideas.
+
+The first thing to consider is that, as the manual says, ``\tikzname\ \emph{ist kein Zeichenprogramm}'' which translates to ``\tikzname\ \emph{is not a drawing program}''. You shall start with a draft of you chart and then codify it using \tikzname. Generally, a handmade pencil sketch will do. In this draft, you shall use node names for future reference.
+
+The second thing to consider is that |tikz-sfc| uses the |\tikzcircuitssizeunit| to keep all figures proportional. Therefore, when you consider any dimension related to symbol size it is good idea to set that dimension in respect to |\tikzcircuitssizeunit|, i.e., using |\tikzcircuitssizeunit| as the unit of length. The default value of |\tikzcircuitssizeunit| is 7\,pt or approximately 2.46\,mm and it can be set by the |circuit symbol unit| key among several other keys.
+
+Steps and transitions are placed along a vertical line. An even space between them are desired. The |to| command is used to interrupt the line and place the symbol between two coordinates. Since a transition is only and horizontal line crossing the vertical line, it does not matter if the vertical line is interrupted or not. Thus, it is possible to employ the command |node| to place a transition. In this way, the transition centre coordinates will be precisely known, but the centre coordinates of the step will be in the middle point of two known points. For a single sequence, it makes sense to place all transitions and then connect them with evenly spaced steps. This is rarely the case, however. Commonly, it is necessary to place an initial step in the begin of a line and dummy nodes (coordinate point) for loops.
+
+Since steps are basically squares measuring $2.6\times 2.6$|\tikzcircuitssizeunit|, one possible solution is to set the vertical unit of length to half of this distance. Thus, if two transitions are place four units of length apart, it leaves one unit of length between each transition and the step between them. This is why you've been seen |y=1.3\tikzcircuitssizeunit| in the examples.
+
+For instance:
+\begin{codeexample}[width=2cm]
+\begin{tikzpicture}[circuit plc sfc,thick,x=1cm,
+ y=1.3\tikzcircuitssizeunit]
+ \node[sfcstepi={info=S7},name=n0]{};
+ \draw (n0)
+ to [sfctransition={info=t5}] ++(0,-3) coordinate(n1)
+ to [sfcstep={info=S8}] ++(0,-4)
+ node [sfctransition={info=t6}]{}
+ to [sfcstep={info=S9}] ++(0,-4)
+ node [sfctransition={info=t7}]{}
+ -- +(0,-1) coordinate(n2) (n1) to [flow direction'] ++(-1,0) |- (n2);
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}the initial step S7 is drawn with command |\node| and named n0 for future reference. Note that |\node| requires an argument, in this case an empty text |{}|. Then, starting from n0 (the initial step name for drawing purposes) a descending vertical line is drawn. Three units of length below the centre of n0, n1 is placed. Between n0 and n1 the transition with receptivity t5 is placed. Here is the beauty of the placement algorithm: the distance between n0 centre and n1 is 3 units, but the distance between n0 border and n1 is only 2 unit (the height of n0 is 2 units, so 1 unit from the centre to the border); t5 is placed between the border (not the centre) of n0 and n1. This will certainly cause you troubles soon or later. Now, S8 is placed between n1 and an unnamed point 4 units below n1. At this point, t6 is place. All the same for S9 and t7. After placing t7, we move down one vertical unit and place n2 (for future reference). Then restarting at n1 we move left one horizontal unit of length and place an arrow pointing right (with |flow direction'|) between this location and n1. Finally, we move to n2, but not in a straight line, with the commando \verb!|- (n2)!.
+
+There are, of course, other ways of drawing this chart. For instance, the last line could be replaced by \verb!|- +(-1,-1) -- ($(n1)+(-1,0)$) to [flow direction] (n1);!. Thus, after placing t7, we move down one vertical unit and left one horizontal unit (\verb!|- +(-1,-1)!); then move up to a point aligned with n1, one horizontal unit at its left computed by |($(n1)+(-1,0)$)|; then finally go to n1 placing an arrow on the path (|flow direction|). In both cases, we do not have to know the distance between t7 and n1, so additional steps and transitions can be inserted in the middle of the chart without the need to change the loop.
+
+The distance between every feature, disregarding the line width, is one unit of length.
+
+Suppose now that we need to associate actions with S8. The first one will be placed at S8 right side, but the second will be aligned with t6. Since t6 is a simple and, more important, small expression, it causes no harm.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[circuit plc sfc,thick,x=1cm,
+ y=1.3\tikzcircuitssizeunit]
+ \node[sfcstepi={info=S7},name=n0]{};
+ \draw (n0)
+ to [sfctransition={info=t5}] ++(0,-3) coordinate(n1)
+ to [sfcstep={info=S8,sfcaction={info=A},sfcaction={info=B}}] ++(0,-4)
+ node [sfctransition={info=t6}]{}
+ to [sfcstep={info=S9}] ++(0,-4)
+ node [sfctransition={info=t7}]{}
+ |- +(-1,-1) -- ($(n1)+(-1,0)$) to [flow direction] (n1);
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}but what if t6 were a long expression like, e.g., |b1 AND b2|? In this case, a filler is needed to create a dead space between S8 and the following transition.
+
+\begin{codeexample}[width=3.5cm]
+\begin{tikzpicture}[circuit plc sfc,thick,x=1cm,
+ y=1.3\tikzcircuitssizeunit]
+ \node[sfcstepi={info=S7},name=n0]{};
+ \draw (n0)
+ to [sfctransition={info=t5}] ++(0,-3) coordinate(n1)
+ to [sfcstep={info=S8,sfcaction={info=A},sfcaction={info=B}}] ++(0,-4) -- ++(0,-2)
+ node [sfctransition={info=b1 AND b2}]{}
+ to [sfcstep={info=S9}] ++(0,-4)
+ node [sfctransition={info=t7}]{}
+ |- +(-1,-1) -- ($(n1)+(-1,0)$) to [flow direction] (n1);
+\end{tikzpicture}
+\end{codeexample}
+
+The filler |-- ++(0,-2)| is placed just after the second coordinate used to draw S8. The rule of thumb for fillers is to allow \emph{two} vertical units for every action exciding the first one, \emph{four} if the action involves duration (key |time| is used). If the first action also involves duration, add \emph{two} vertical units.
+
+
+\subsection{Divergence and convergence}
+
+Divergence and convergence can be exclusive (single line) or simultaneous (double line). They both can be done using the |\coordinate| command to place points during the construction of the path, then using those points to draw the divergence and convergence lines. In the following example, the second |\draw| command extends every horizontal line by half unit of length in both directions.
+
+\begin{codeexample}[width=5.5cm]
+\begin{tikzpicture}[circuit plc sfc,thick,
+ x=1.3\tikzcircuitssizeunit,
+ y=1.3\tikzcircuitssizeunit]
+ \draw (0,0)
+ to [flow direction={pos=0.95}] ++(0,-1)
+ to [sfcstepi={info=S1}] ++(0,-4)
+ node[sfctransition={info=t1}]{} -- ++(0,-1)
+ ++(4,0) coordinate(N2) ++(-8,0) coordinate(N1)
+ to [sfcstep={info=S2}] ++(0,-4)
+ node[sfctransition={info=t2}]{} -- ++(0,-1)
+ ++(2,0) coordinate(N4) ++(-4,0) coordinate(N3)
+ to [sfcstep={info=S4}] ++(0,-4) -- ++(0,-2) coordinate(N7)
+ (N4) to [sfcstep={info=S5}] ++(0,-4) -- ++(4,-1)
+ -- ++(0,-1) coordinate(N9)
+ ++(-6,0) -- ++(0,-1) node[sfctransition={info=t4}]{}
+ to [sfcstep={info=S8}] ++(0,-4) coordinate(N11)
+ (N2) to [sfcstep={info=S3}] ++(0,-4)
+ node[sfctransition={info=t3}]{} -- ++(0,-1)
+ ++(2,0) coordinate(N6) ++(-4,0) coordinate(N5)
+ to [sfcstep={info=S6}] ++(0,-4)
+ --++(-4,-1) --++(0,-1) coordinate(N8)
+ (N6) to [sfcstep={info=S7}] ++(0,-4) -- ++(0,-2) coordinate(N10)
+ ++(-2,0) -- ++(0,-1) node[sfctransition={info=t5}]{}
+ to [sfcstep={info=S9}] ++(0,-4) coordinate(N12)
+ ++(-4,0) to[sfctransition={info=t6}] ++(0,-2)
+ -- ++(-8,0) |- (0,0);
+ \draw[double=graphicbackground]
+ (N1) ++(-0.5,0) -- (N2) -- ++(0.5,0)
+ (N3) ++(-0.5,0) -- (N4) -- ++(0.5,0)
+ (N5) ++(-0.5,0) -- (N6) -- ++(0.5,0)
+ (N7) ++(-0.5,0) -- (N8) -- ++(0.5,0)
+ (N9) ++(-0.5,0) -- (N10) -- ++(0.5,0)
+ (N11) ++(-0.5,0) -- (N12) -- ++(0.5,0);
+ \foreach \x in {1,...,12}
+ \node[label={[label distance=-4pt,above right, red,font=\tiny]N\x},
+ circle,inner sep=1pt,draw=red,thin] at (N\x) {};
+\end{tikzpicture}
+\end{codeexample}
+\noindent{}The |\foreach| command is used to print small circles marking the nodes with node names in tiny red letters and those are not part of the chart, yet they do nicely for debug purposes. By the way, |graphicbackground| is the background colour of the examples in the document.
+
+\subsection{Beamer presentation with overlay}
+
+Perhaps the most important feature of \beamer\ is its capacity of creating a series of slides based in one slide for, e.g., showing one concept step by step. It is called overlay. Unfortunately, \beamer\ overlay and \tikzname\ present some compatibilities issues when overlay macros are typed in the options list of a \tikzname\ command. This can be solved setting two \tikzname\ keys that takes advantage of the fact that |\pgfkeysalso| doesn't change the path.
+
+\begin{codeexample}[code only]
+\tikzset{ % alt and visible (overlay)
+ alt/.code args={<#1>#2#3}{%
+ \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}
+ },
+ visible/.code args={<#1>#2}{%
+ \alt<#1>{\pgfkeysalso{#2}}{}
+ }
+}
+\end{codeexample}
+
+Once these keys are in place, they can be used instead of |\visible| and |\alt| with a syntax slightly different. The following example creates two slides, one with S1 active and the other with S2 active (activations are shown by filling the steps in light blue). Bellow, the result is shown side by side:
+
+\begin{codeexample}[width=5.6cm,render instead={\begin{tikzpicture}[circuit plc sfc,thick,x=2.6\tikzcircuitssizeunit,
+ y=1.3\tikzcircuitssizeunit]
+ \draw
+ (0,0) to [flow direction={pos=0.95}] ++(0,-1)
+ to [sfcstepi={info=S1,fill=blue!20}] ++(0,-4)
+ node [sfctransition={info=b1}]{}
+ to [sfcstep={info=S2,sfcaction={info=A}}]
+ ++(0,-4)
+ node [sfctransition={info=b0}]{}
+ -- ++(0,-1) node[red,font=\small\itshape,below=4mm]{slide 1} -- ++(-1,0) |- (0,0);
+ \draw
+ (5,0) to [flow direction={pos=0.95}] ++(0,-1)
+ to [sfcstepi={info=S1}] ++(0,-4)
+ node [sfctransition={info=b1}]{}
+ to [sfcstep={info=S2,sfcaction={info=A},fill=blue!20}]
+ ++(0,-4)
+ node [sfctransition={info=b0}]{}
+ -- ++(0,-1) node[red,font=\small\itshape,below=4mm]{slide 2} -- ++(-1,0) |- (5,0);
+\end{tikzpicture}}]
+\begin{tikzpicture}[circuit plc sfc,thick,
+ x=2.6\tikzcircuitssizeunit,
+ y=1.3\tikzcircuitssizeunit]
+ \draw
+ (0,0) to [flow direction={pos=0.95}] ++(0,-1)
+ to [sfcstepi={info=S1,
+ visible={<1>{fill=blue!20}}}] ++(0,-4)
+ node [sfctransition={info=b1}]{}
+ to [sfcstep={info=S2,sfcaction={info=A},
+ visible={<2>{fill=blue!20}}}] ++(0,-4)
+ node [sfctransition={info=b0}]{}
+ |- ++(-1,-1) |- (0,0);
+\end{tikzpicture}
+\end{codeexample}
+Thus, you can explain that, initially, S1 is active, pressing the push button b1 the transition fires deactivating S1 and activating S2 that turns on motor A. The S1 light blue background is visible in slide~1, but it is not in slide~2; conversely, S2 background is visible only on slide~2. One cool trick is that you can press push button b0 returning to slide~1.
+
+
+\subsection{Adjusting the diagram size}
+The diagram size can be adjusted in two ways: fully or just the distance between the elements.
+
+Typing the key \verb|circuit symbol unit=|\meta{dimension} in \tikzname\ options before setting anything using |\tikzcircuitssizeunit| will adjust everything but the font size and line width.
+
+To adjust the horizontal distance between the symbols, set the $x$ unit of length with \verb|x=|\meta{dimension}. For vertical distances use \verb|y=|\meta{dimension}. The default procedure adopted in this document is to set \verb|y=1.3\tikzcircuitssizeunit| in order to get a nice vertical distance between the elements. Usually, only the fillers will need to be rethought after a change in |y| and it can be done multiply the old filler distance by the ratio between the old and new values of |y|.
+
+
+\section{Known Issues}
+The user interface is a bit inconsistent: texts are treated differently depending on where they should appear. Normally, |info| and |info'| keys are used to place text on the chart, but sometimes actions need one or two extra text (qualifier and time duration) and it is done by other keys, namely, |qualifier| and |time|. The problem is that these keys do not accept optional arguments like |info| and |info'|. It is possible to modify those keys to deal with optional arguments, but there is price to pay.
+
+The keys |info| and |info'|, largely employ to place text, actually uses the |label| interface. This is great because you can pass an optional list of configurations. The trade-off is that you have to be careful when writing the text, particularly you need to surround the commas, colons\footnote{If you literally mean ``:'' and not a \meta{angle} specification.} and equal signs in curly brackets. This is due to |\pgfkeys|.
+
+If you want the report a bug or have any suggestion, please feel free to send me an e-mail. Contact details are in the first page. Every feedback is important.
+
+
+\section{Final Remarks}
+
+This package has been tested and used for more than three years, so I do believe it is mature by now and I decided to share it. On the other hand, I was the only person who used it, therefore idiosyncrasies were not detected.
+
+Any comments, suggestions, and feedbacks are welcomed. I will do my best to answer as soon as possible. My contact e-mail is in the first page.
+
+It should be great if someone with experience in writing \tikzname\ libraries could have a look in the code and point out error or improvements to be made.
+
+
+\appendix
+\newgeometry{left=1cm,right=1cm,top=1.5cm,bottom=1.5cm,nohead}
+\section*{Appendix A -- Beamer example of delta-star motor starter with dead time in SFC}
+
+In this example, the animation is done in two layers: the chart is drawn on foreground with step, transitions, actions and animation (filling and colouring); on the background, circles (actually, ellipses since |x| and |y| scales are different) are drawn in light red to highlight the activated transition. In order to place the ellipses in the precise position, every transition is named.
+
+At first, only the SFC is drawn and the example of Section~\ref{sec:introduction} is used as starting point. Since the fonts used in the beamer presentation are different in size, it is necessary the adjust the chart size. In this particular, |sfcaqw| was increased to |9\tikzcircuitssizeunit|. When the chart is done, the animation part is made adding the |visible| key in the foreground and the |\visible| macro in the background.
+
+Macro |\overlaynumber|, placed in the |frame| title, is used in the development phase to show the slide number in a sequence (animation). It helps the development of animated slides because you can see the slide number to be used with |visible| and |alt| keys or |\visible| and |\alt| macros.
+
+After the \LaTeX\ code, the slides were included for reference. They shall be found as a separated PDF file in the same folder you have found this document.
+
+\lstinputlisting[language={[LaTeX]TeX},basicstyle={\small},breakautoindent=true]{BeamerAnimation.tex}
+\clearpage
+\eject \pdfpagewidth=128mm \pdfpageheight=96mm
+\includepdf[pages=-,offset=-116 285,noautoscale]{BeamerAnimation.pdf}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-sfc/tex/tikzlibrarycircuits.plc.sfc.code.tex b/graphics/pgf/contrib/tikz-sfc/tex/tikzlibrarycircuits.plc.sfc.code.tex
new file mode 100644
index 0000000000..34db33d0f5
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-sfc/tex/tikzlibrarycircuits.plc.sfc.code.tex
@@ -0,0 +1,180 @@
+%% This is file `tikzlibrarycircuits.plc.sfc.code.tex'
+%% Version: 1.0.1
+%% Version date: 2018-12-15
+%%
+%% Copyright (C) 2018 by Luis Paulo Laus, laus@utfpr.edu.br
+%%
+%% This package 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; either
+%% version 1 of the License, or (at your option) any later version,
+%% with `The Package' referring to the software
+%% `tikzlibrarycircuits.plc.sfc.code.tex'
+%% and its accompanying documentation and `The Copyright Holder'
+%% referring to the person Luis Paulo Laus.
+%%
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For error reports, comments or suggestions in case of UNCHANGED
+%% versions send mail to:
+%% laus@utfpr.edu.br
+%%
+%%
+%% Change History:
+%% 1.0: 16 January 2018: Original Version
+%% 1.0.1: 15 December 2018: correction and extension of documentation
+%% including a new full example.
+%%
+\usetikzlibrary{circuits}
+\usepgflibrary{shapes.gates.ee}
+\makeatletter
+\newcount\sfc@act@pos
+\def\tikz@lib@sfc@lct@plain[#1]#2\pgf@stop{\tikzset{label={[label position=center,every info/.try,#1]#2}}}
+\def\tikz@lib@sfc@lrg@plain[#1]#2\pgf@stop{\tikzset{label={[label position=right,every info/.try,#1]#2}}}
+\def\tikz@lib@sfc@llf@plain[#1]#2\pgf@stop{\tikzset{label={[label position=left,every info'/.try,#1]#2}}}
+\def\tikz@lib@sfc@action@lrg@plain[#1]#2\pgf@stop{\tikzset{sfc@actcommentopt/.style={#1},sfc@actcomment=#2}}
+\def\tikz@lib@sfc@action@lct@plain[#1]#2\pgf@stop{\tikzset{sfc@actnameopt/.style={#1},sfc@actname=#2}}
+
+\pgfdeclareshape{sfcstepi}
+{
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+ \inheritbackgroundpath[from=rectangle]
+ \behindbackgroundpath{
+ \pgfpathrectanglecorners
+ {\pgfpointadd{\southwest}{\pgfpoint{6*\pgfkeysvalueof{/pgf/inner xsep}}{6*\pgfkeysvalueof{/pgf/inner ysep}}}}
+ {\pgfpointadd{\northeast}{\pgfpointscale{-1}{\pgfpoint{6*\pgfkeysvalueof{/pgf/inner xsep}}{6*\pgfkeysvalueof{/pgf/inner ysep}}}}}
+ }
+}
+
+%% Really dirt trick to customize info and info' keys in an action.
+\def\sfc@copycode#1#2{
+ \pgfkeyssetvalue{/tikz/#1/.@cmd}{\expandafter\pgfkeysvalueof{/tikz/#2/.@cmd}}%
+ \pgfkeyssetvalue{/tikz/#1/.@body}{\expandafter\pgfkeysvalueof{/tikz/#2/.@body}}%
+}
+
+\tikzset{
+ circuit plc sfc/.style=
+ {
+ circuit,
+ circuit declare symbol=sfctransition,
+ sfc@actinfo/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@action@lct@plain{\tikz@lib@sfc@action@lct@plain[]}##1\pgf@stop},
+ sfc@actinfo'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@action@lrg@plain{\tikz@lib@sfc@action@lrg@plain[]}##1\pgf@stop},
+ set sfctransition graphic={draw,fill,shape=rectangle,circuit symbol size=width 1 height 0,
+ info/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@lrg@plain{\tikz@lib@sfc@lrg@plain[]}####1\pgf@stop},
+ info'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@llf@plain{\tikz@lib@sfc@llf@plain[]}####1\pgf@stop}},
+ sfcaqw/.initial=0\tikzcircuitssizeunit, % qualifier width
+ sfcanw/.initial=2.6\tikzcircuitssizeunit, % action name width
+ sfcah/.initial=2.6\tikzcircuitssizeunit, % action height
+ time/.initial=, % action duration to be used with qualifier D, L, DS, SD, LS
+ qualifier/.initial=, % action qualifier
+ sfc@actname/.initial=, % action name
+ sfc@actnameopt/.style=, % action name options
+ sfc@actcomment/.initial=, % action comment
+ sfc@actcommentopt/.style=, % action comment options
+ circuit declare symbol=sfcstep,
+ set sfcstep graphic={draw,shape=rectangle,minimum size=2.6\tikzcircuitssizeunit,
+ /utils/exec={\global\sfc@act@pos=0},
+ info/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@lct@plain{\tikz@lib@sfc@lct@plain[]}####1\pgf@stop},
+ info'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@llf@plain{\tikz@lib@sfc@llf@plain[]}####1\pgf@stop}},
+ circuit declare symbol=sfcstepi,
+ set sfcstepi graphic={draw,shape=sfcstepi,minimum size=2.6\tikzcircuitssizeunit,
+ /utils/exec={\global\sfc@act@pos=0},
+ info/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@lct@plain{\tikz@lib@sfc@lct@plain[]}####1\pgf@stop},
+ info'/.code={\pgfutil@ifnextchar[\tikz@lib@sfc@llf@plain{\tikz@lib@sfc@llf@plain[]}####1\pgf@stop}},
+ circuit declare symbol=sfcstar,
+ set sfcstar graphic={shape=circle,label={center:$*$},minimum size=1.2ex},
+ sfcaction/.style={
+ append after command={%
+ \bgroup
+ [current point is local=true]
+ [every circuit annotation/.try]
+ [annotation arrow,-]
+ [label distance=2\tikzcircuitssizeunit]
+ [/utils/exec={\sfc@copycode{info}{sfc@actinfo}\sfc@copycode{info'}{sfc@actinfo'}}]
+ [/utils/exec={\pgftransformresetnontranslations}]
+ edge[every sfcaction/.try, ##1, to path={%
+ \ifnum\sfc@act@pos=0%
+ (\tikzlastnode.east) -- ++(\tikz@label@distance,0)
+ \else%
+ ($(\tikzlastnode.east) + (\tikz@label@distance,-\the\sfc@act@pos*\pgfkeysvalueof{/tikz/sfcah})$)
+ \fi%
+ \pgfextra{\edef\pgf@testq{\pgfkeysvalueof{/tikz/qualifier}} \edef\pgf@testt{\pgfkeysvalueof{/tikz/time}} \edef\pgf@testc{\pgfkeysvalueof{/tikz/sfc@actcomment}}}%
+ \ifx\pgf@testq\pgfutil@empty
+ node[/utils/exec={\global\advance\sfc@act@pos by1\relax},##1,every sfcactionname/.try,sfc@actnameopt/.try,draw,right,minimum height=\pgfkeysvalueof{/tikz/sfcah},
+ minimum width=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actname}}
+ \ifx\pgf@testc\pgfutil@empty \else
+ node[every info'/.try,sfc@actcommentopt/.try,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actcomment}}
+ \fi
+ \else
+ \ifx\pgf@testt\pgfutil@empty
+ node[/utils/exec={\global\advance\sfc@act@pos by1\relax},every sfcactionname/.try,##1,sfc@actnameopt/.try,draw,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw},
+ minimum height=\pgfkeysvalueof{/tikz/sfcah},minimum width=\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actname}}
+ node[every sfcqualifier/.try,##1,draw,right,minimum height=\pgfkeysvalueof{/tikz/sfcah},
+ minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{\pgfkeysvalueof{/tikz/qualifier}}
+ \ifx\pgf@testc\pgfutil@empty \else
+ node[every info'/.try,sfc@actcommentopt/.try,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actcomment}}
+ \fi
+ \else
+ node[/utils/exec={\global\advance\sfc@act@pos by2\relax},##1,draw,right,yshift=-0.5*\pgfkeysvalueof{/tikz/sfcah}),
+ minimum height=2*\pgfkeysvalueof{/tikz/sfcah},minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{}
+ node[every sfcactionname/.try,##1,sfc@actnameopt/.try,draw,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw},yshift=-0.5*\pgfkeysvalueof{/tikz/sfcah},
+ minimum height=2*\pgfkeysvalueof{/tikz/sfcah},minimum width=\pgfkeysvalueof{/tikz/sfcanw}]{\pgfkeysvalueof{/tikz/sfc@actname}}
+ node[every sfcqualifier/.try,right,minimum height=\pgfkeysvalueof{/tikz/sfcah},
+ minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{\pgfkeysvalueof{/tikz/qualifier}}
+ node[every sfctime/.try,right,yshift=-\pgfkeysvalueof{/tikz/sfcah},minimum height=\pgfkeysvalueof{/tikz/sfcah},
+ minimum width=\pgfkeysvalueof{/tikz/sfcaqw}]{\pgfkeysvalueof{/tikz/time}}
+ \ifx\pgf@testc\pgfutil@empty \else
+ node[every info'/.try,sfc@actcommentopt/.try,right,xshift=\pgfkeysvalueof{/tikz/sfcaqw}+\pgfkeysvalueof{/tikz/sfcanw},
+ yshift=-0.5*\pgfkeysvalueof{/tikz/sfcah}]{\pgfkeysvalueof{/tikz/sfc@actcomment}}
+ \fi
+ \fi
+ \fi
+ }] ()
+ \tikz@after@path%
+ \egroup%
+ }
+ },
+ circuit declare symbol=flow direction,
+ circuit declare symbol=flow direction',
+ set flow direction graphic = flow direction sfc graphic,
+ set flow direction' graphic = flow direction' sfc graphic,
+ flow direction sfc graphic/.style = {
+ shape=direction ee,
+ circuit symbol filled,
+ flow direction arrow,
+ minimum width = .5*\the\tikzcircuitssizeunit+.3*\the\pgflinewidth,
+ minimum height = .5*\the\tikzcircuitssizeunit+.3*\the\pgflinewidth,
+ transform shape
+ },
+ flow direction' sfc graphic/.style = {
+ flow direction sfc graphic,
+ rotate=180
+ },
+ flow direction arrow/.style = {
+ /utils/exec={\pgfsetarrowoptions{direction ee}{1.3065*.5*\the\tikzcircuitssizeunit+1.3065*.3*\the\pgflinewidth}},
+ >=direction ee,
+ direction ee arrow = direction ee,
+ },
+ every circuit plc sfc/.try
+ }
+}
+\makeatother
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-timing/README b/graphics/pgf/contrib/tikz-timing/README
new file mode 100644
index 0000000000..d5546fa384
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-timing/README
@@ -0,0 +1,57 @@
+--------------------------------------------------------------
+ tikz-timing
+--------------------------------------------------------------
+
+This package provides macros and an environment to generate timing diagrams
+(digital waveforms) without much effort. The TikZ (pgf) package is used to
+produce the graphics. The diagrams may be inserted into text (paragraphs,
+\hbox, etc.) and into tikzpictures. A tabular-like environment is provided to
+produce larger timing diagrams.
+
+Copyright (C) 2009-2017 Martin Scharrer
+E-mail: martin@scharrer-online.de
+WWW: http://latex.scharrer-online.de/tikz-timing/
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3c or later is part of all distributions of LaTeX
+version 2008/05/04 or later.
+
+This work has the LPPL maintenance status `maintained'.
+
+The Current Maintainer of this work is Martin Scharrer.
+
+This work consists of the files tikz-timing.dtx, tikz-timing.ins
+and the derived file tikz-timing.sty.
+
+
+Tiny example:
+~~~~~~~~~~~~~
+In text:
+ \texttiming{HLHLHLHLHLHL}
+Inside tikzpicture:
+ \timing [settings] (1,2) {HLHLHLHLHL};
+
+
+INSTALL:
+~~~~~~~~
+From the .dtx file (if you don't get the .sty files directly):
+==================
+Unpack the zip file and run:
+ [pdf]latex tikz-timing.ins
+Place the tikz-timing.sty file into your TEXMF tree, e.g. in
+ $TEXMF/tex/latex/tikz-timing
+
+DOCUMENTATION:
+~~~~~~~~~~~~~~
+To create the documentation:
+
+ [pdf]latex tikz-timing.dtx
+ makeindex -s gind.ist -o tikz-timing.ind tikz-timing.idx
+ makeindex -s gglo.ist -o tikz-timing.gls tikz-timing.glo
+ [pdf]latex tikz-timing.dtx
+ [pdf]latex tikz-timing.dtx
+
diff --git a/graphics/pgf/contrib/tikz-timing/tikz-timing.dtx b/graphics/pgf/contrib/tikz-timing/tikz-timing.dtx
new file mode 100644
index 0000000000..f972865720
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-timing/tikz-timing.dtx
@@ -0,0 +1,8539 @@
+% \iffalse meta-comment
+%<=*COPYRIGHT>
+%% Copyright (C) 2009-2012 by Martin Scharrer <martin@scharrer-online.de>
+%% ----------------------------------------------------------------------
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Martin Scharrer.
+%%
+%% This work consists of the files tikz-timing.dtx and tikz-timing.ins
+%% and the derived filebase tikz-timing*.sty.
+%%
+%<=/COPYRIGHT>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{tikz-timing.dtx}[%
+%<=*DATE>
+ 2017/12/20
+%<=/DATE>
+%<=*VERSION>
+ v0.7f
+%<=/VERSION>
+ DTX-File of 'tikz-timing' package.]
+\newif\ifprintversion % \fi
+\ifdefined\printversion
+ \printversiontrue
+\fi
+
+\RequirePackage{filecontents}
+\begin{filecontents}{ydoc.cfg}
+ % Intensionally empty
+\end{filecontents}
+
+\ifprintversion
+ \documentclass{ltxdoc}
+ \let\chapter\section
+ \let\section\subsection
+ \let\subsection\subsubsection
+\else
+ \documentclass[landscape,12pt]{scrreprt}
+ \usepackage{ydoc}
+\fi
+\GetFileInfo{tikz-timing.dtx}
+\usepackage{tikz-timing}[\filedate]
+
+\usepackage{hyperref}
+\usepackage{atbegshi}
+\usetikztiminglibrary{arrows,either,overlays,clockarrows,columntype}
+\usetikztiminglibrary{nicetabs,counters,advnodes,interval,ifsym}
+\tikzset{timing/no nice tabs}
+\tikzset{timing/interval/normal}
+\tikzset{timing/nodes/old center}
+\usetikzlibrary{plotmarks}
+\makeatother
+%%%^^A\usepackage[electronic]{ifsym}
+\usepackage{calc}
+\usepackage{graphicx}
+\usepackage{xcolor}
+\usepackage{tabularx}
+\usepackage{array}
+\usepackage{flafter,fnpos}
+\usepackage{booktabs}
+\usepackage{supertabular}
+%\usepackage{xtab}
+\usepackage{amsmath}
+\usepackage{flafter}
+\usepackage{placeins}
+\makeFNbottom
+\makeFNbelow
+\usepackage{microtype}[2005/10/28]
+\DisableLigatures{encoding = T1, family = tt* }%
+\newsavebox{\mysb}
+\newsavebox{\sba}
+\newsavebox{\sbb}
+
+\def\topfraction{0.91}
+\def\bottomfraction{0.95}
+\def\floatpagefraction{0.98}
+\def\textfraction{0.05}
+\setcounter{bottomnumber}{2}
+
+\usepackage{listings}
+\lstset{basicstyle=\ttfamily}
+
+\usepackage{shortvrb}
+\usepackage{newverbs}
+\MakeSpecialShortVerb{\qverb}{\"}
+
+\def\NewIn#1{
+ \marginpar{\strut\raggedleft\raisebox{.125ex}{\textcolor{black}{\emph{New in #1}}}}%
+}
+
+\def\ExtIn#1{
+ \marginpar{\strut\raggedleft\textcolor{black}{\emph{Extended in #1}}}%
+}
+
+\iffalse
+\def\thesection{\texorpdfstring{\LARGE\texttiming[X]{D{\arabic{section}}.1X[black]}}{\arabic{section}}}
+\def\thesubsection{\texorpdfstring{\Large\texttiming[X]{D{\arabic{section}}D{\arabic{subsection}}.1X[black]}}{\arabic{section}.\arabic{subsection}}}
+\def\thesubsubsection{\texorpdfstring{\large\texttiming[X]{D{\arabic{section}}D{\arabic{subsection}}D{\arabic{subsubsection}}.1X[black]}}
+{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}}
+
+ %\def\timingsectionformat#1{%
+ % \sbox{\mysb}{\tikz \draw node [timing/d/text] {#1};}%
+ % \texttiming{ $ \wd\mysb / \tikztiming@xunit $ DD{#1} }%
+ %}
+
+\renewcommand\section{\@startsection {section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\Large\bfseries\sffamily}}
+ %[#1]{\texorpdfstring{\larger\timingsectionformat{#2}}{#2}}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\large\bfseries\sffamily}}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\normalfont\normalsize\bfseries\sffamily}}
+\fi
+
+\let\envv\env
+\let\css\cs
+\def\lib{\texttt}
+\def\library#1#2{\section{#2}\label{lib:#1}}
+
+\usepackage{xspace}
+\def\ie{i.e.\xspace}
+\def\eg{e.g.\xspace}
+
+\makeatletter
+% The following code is only needed to produce package examples and therefor not
+% included in the style file but might be written to an additional file.
+% \iffalse
+%</driver>
+%<*examplecode>
+% \fi
+%
+% \begin{environment}{tikztimingexampletable}
+% \begin{macrocode}
+\newenvironment{tikztimingexampletable}{%
+ \begingroup
+ \let\tikztimingtable@row\tikztimingexampletable@row
+ \tikzset{timing/nice tabs}
+ \tikztimingtable
+}{%
+ \extracode
+ \tableheader{Characters}{Resulting Diagram}%
+ \tablerules
+\endtikztimingtable
+\endgroup
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\tikztimingexampletable@row}[1]{Row content}
+% \begin{macrocode}
+\long\def\tikztimingexampletable@row#1\\{%
+ \def\tikztiming@text{#1}%
+ \@onelevel@sanitize\tikztiming@text
+ \tikztimingtable@row@@{\ttfamily\tikztiming@text}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingfullexampletable}
+% \begin{macrocode}
+\def\tikztimingfullexampletable{%^^A
+ \begin{tikzpicture}[timing/picture,x=1em,y=1em,font=\sffamily]
+ \tikzset{timing/d/background/.style={fill={gray!25},fill opacity=0.5}}%
+ \let\chars\tikztiming@chars@default
+ \node (charnode) at (0,0) {%
+ \scalebox{0.4}%
+ {\rotatebox{-45}{$\frac{\mbox{\rotatebox{45}{to}}}%
+ {\mbox{\rotatebox{45}{from}}}$}}%
+ };
+ \coordinate (charnodex) at (0.25,0);%
+ \coordinate (charnodey) at (0,0);%
+ \expandafter\foreach
+ \expandafter\tchar
+ \expandafter i\expandafter n\expandafter{\chars} {%
+ \path (charnodex) ++(+2,0) node (charnodex) {\strut\tchar};
+ \path (charnodey) ++(0,-2) node (charnodey) {\strut\tchar};
+ }%
+ \draw [line width=\heavyrulewidth] (charnodex) +(+1,+1) -- (-1,+1);
+ \draw [line width=\lightrulewidth] (charnodex) +(+1,-1) -- (-1,-1);
+ \draw [line width=\lightrulewidth] (charnodey) +(+1,-0.6) -- (+1,-1.4)
+ (+1,-0.6) -- (+1,+0.6);
+ \draw [line width=\heavyrulewidth] (charnodey) ++(-1,-1) -- +($ (2,0) +
+ (charnodex) $);
+ %
+ \path (1.5,-2) node (charnodex) {\strut};
+ \coordinate (charnodex) at (charnodex.base);
+ \coordinate (charnodey) at ($ (charnodex.base) + (0,2) $);
+ \def\@tempa{\timing at (charnodey)}
+ \foreach\xchar in \chars {
+ \foreach\ychar in \chars {
+ \path (charnodey) +(0,-2) node (charnodey) {};
+ \draw [xstep={\timingwidth/2.},ystep={\timingheight/2.},timing/grid,
+ shift={(charnodey)}]
+ (0,0) grid +(2,1);
+ \expandafter\@tempa\expandafter{\ychar\xchar};
+ }
+ \path (charnodex) ++(+2,0) node (charnodex) {};
+ \path (charnodex) ++(0,2) node (charnodey) {};
+ }
+ \end{tikzpicture}%^^A
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</examplecode>
+%<*driver>
+% \fi
+
+\makeatother
+\EnableCrossrefs
+%\CodelineIndex
+\RecordChanges
+\OnlyDescription
+\listfiles
+
+\DeleteShortVerb{\|}
+\def\pipe{|}
+\def\Pipe{{\normalfont\normalcolor\pipe}}
+\MakeShortVerb{\|}
+
+\begin{document}
+ \DocInput{tikz-timing.dtx}
+ \PrintChanges
+ %\newpage\PrintIndex
+\end{document}
+%</driver>
+%<*doc>
+% \fi
+%
+% \CheckSum{5720}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+%
+% \GetFileInfo{tikz-timing.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment,\def,\edef,\xdef,\DeclareRobustCommand}
+% \DoNotIndex{\expandafter,\if,\else,\fi,\ifnum,\ifx,\let,\global,\long}
+% \DoNotIndex{\newcounter,\newcount,\message,\meaning,\noexpand,\relax,\value}
+% \DoNotIndex{\setcounter,\addtocounter,\advance,\afterassignment,\AtEndOfPackage}
+% \DoNotIndex{\ProvidesPackage,\providecommand,\RequirePackage,\empty,\begin,\end}
+% \DoNotIndex{\begingroup,\bgroup,\egroup,\endgroup,\csname,\endcsname,\@tempa}
+% \DoNotIndex{\ignorespaces,\lccode,\sffamily,\@gobble,\@ifundefined,\@for,\or}
+% \DoNotIndex{\@firstoftwo,\@ifnextchar,\@namedef,\@nameuse,\@secondoftwo}
+% \DoNotIndex{\@temptokena,\toks@,\BODY,\do,\g@addto@macro,\lowercase,\uppercase,\the}
+% \DoNotIndex{\height,\width,\slope,\style,\draw,\path,\newdraw,\newdrawns}
+% \DoNotIndex{\dslope,\zslope}
+%
+% \ifpdf
+% \hypersetup{%
+% pdfauthor = {Martin Scharrer <martin@scharrer-online.de>},
+% pdftitle = {The tikz-timing package, \fileversion\ from \filedate},
+% pdfsubject = {Documentation of LaTeX package tikz-timing which allows the
+% easy creation of timing diagrams inside tikz pictures or text.},
+% pdfkeywords = {tikz-timing, timing diagram, LaTeX}
+% }%
+% \fi
+%
+% \unless\ifprintversion
+% \begingroup
+% \makeatletter
+% \title{{\tikz[baseline=(N.base),timing/picture,timing/z/.style={},%
+% timing/unit=1.44*\f@size pt,timing/d/text/.style={},timing/d/background/.style={fill=black!10},timing/inline node/.append style={rectangle,inner sep=0pt,outer sep=0pt}]
+% \timing at (0,0) {1L N[shift={(0,0.5)}]{\strut The} .9L 3d{[alias=N]\strut tikz} $.5em/\xunit$Z 5d{\strut timing} 1.75H N[shift={(0,-0.5)}]{Package} 1.75H } ;}}
+% \author{Martin Scharrer}
+% \date{Version \fileversion\ -- \filedate}
+% \thispagestyle{empty}
+% \begin{titlepage}
+% \sffamily\bfseries
+% \parindent=0pt
+% \centering
+% \vspace*{2cm}
+% \resizebox{.75\textwidth}{!}{\Huge\@title}
+% \par\vspace*{.75cm}
+% \Large A \LaTeX\ Package for Timing Diagrams
+% \par\vspace*{1.5cm}
+% {\LARGE\@date}
+% \par\vspace*{2cm}
+% {\LARGE\@author
+% \par\smallskip}
+% {\Large\href{mailto:martin@scharrer-online.de}{martin@scharrer-online.de}
+% \par\vspace*{1.25cm}}
+% {\Large
+% WWW: \url{http://latex.scharrer-online.de/tikz-timing}\\[.5ex]
+% CTAN: \url{http://www.ctan.org/pkg/tikz-timing}\\[1.2ex]
+% \par\smallskip}
+% \end{titlepage}
+% \clearpage
+% \endgroup
+%
+% \else
+%
+% \null
+% \vspace*{-2em}
+% \begin{center}
+% \sffamily
+% \tikzset{timing/z/.style={black},
+% timing/intext/.style={timing,line width=0.1ex}}
+% {\LARGE\sffamily The \raisebox{-0.66ex}{\Huge\textsf
+% {\texttiming[z]{3d{\strut tikz}z5d{\strut timing}0.2z}}} package}\\[3ex]
+% {\large Version \fileversion\ -- \filedate}\\[2ex]
+% {\large Martin Scharrer \\\normalsize
+% \url{martin@scharrer-online.de}\\[.8ex]
+% WWW: \url{http://latex.scharrer-online.de/tikz-timing}\\[.5ex]
+% CTAN: \url{http://www.ctan.org/pkg/tikz-timing}\\[1.2ex]}
+% \end{center}
+% \vspace{1.2em}%
+% \fi
+%
+% ^^A\vfill \noindent
+% ^^A\textbf{Note to Advanced Users:} This is a new package which internal
+% ^^Amacros might still change. Please only rely on the user macros for now.
+%
+% \clearpage
+% \enlargethispage{\baselineskip}
+% {\let\csd
+% \texttt\tableofcontents
+% \listof{example}{List of Examples}
+% }
+% \addtocontents{toc}{\vspace*{-1.5em}}
+%
+% \chapter{Introduction}
+% This package uses the \pkg[pgf]{tikz} package to produce timing diagrams
+% inside text or \envv{tikzpicture} environments. Also a tabular-like
+% environment is provided to produce a larger timing diagram with multiple
+% labeled signals and the possibility to add own drawing material.
+% Additional optional functionality is provided by libraries.
+%
+% The signal levels of the timing diagram can be given by corresponding
+% characters/letters like "H" for \emph{Logical High} or "L" for
+% \emph{Logical Low}. So e.g.\ "{HLZXD}" gives `\texttiming{HLZXD}'.
+% In order to fit (in)to normal text the diagram size (\ie its height, width and line width)
+% is defined relatively to the currently active font size. The diagram height is about the height of an
+% uppercase "X" (+$2\times\frac12$ line width). This way the diagrams
+% can also be scaled using font size commands like \cs{small}.
+% (Example: {\sffamily
+% \large X\texttiming{LH}X
+% \normalsize X\texttiming{LH}X
+% \small X\texttiming{LH}X
+% \footnotesize X\texttiming{LH}X
+% \scriptsize X\texttiming{LH}X
+% \tiny X\texttiming{LH}X
+% })
+% \makeatletter
+% \def\iex#1{^^A
+% \def\@tempa{#1}\@onelevel@sanitize\@tempa
+% `\texttt{\@tempa}'~$\rightarrow$~`\texttiming{#1}'}
+% \makeatother
+% A single timing character produces a diagram with a width identical to its height
+% (\iex{H}). Longer diagrams can be produces by either
+% using the same character multiple times (\iex{HHH})
+% or writing the width as number in front of the character (\iex{3.2H}).
+% For (partial) compatibility with similar packages lowercase characters only produce
+% a signal with half the width (\iex{h}, \iex{3.2h}).
+%
+% Recurring character combinations can be repeated using character groups
+% (\iex{3{hlz}}) or be defined as so called \emph{meta-characters}
+% ({\tikztimingmetachar{Y}{hlz} "Y"="hlz", \iex{3Y}}),
+% which are similar to a \TeX~macro.
+% Since v0.7 meta-characters can also include macro arguments.
+%
+% Additional features are the inclusion of in-line TikZ styles (\iex{H ;[orange] L}),
+% in-line nodes (\iex{2H N[rectangle](Name){Text} 2L}), automatic width calculations
+% ("H $ 1+\mymacro-\slope $ L "~$\rightarrow$~`\texttiming{H2.5L}')
+% and much more.
+%
+% \iffalse
+% \medskip
+% \DeleteShortVerb{\|}
+% \centerline{\texttiming[D]{
+% 2{12{[yscale=.9,shift={(0,.05)}]D{}}
+% 13{[yscale=1.1,shift={(0,-.05)}]D{}};}
+% $\dslope$ D{}
+% }}
+% \MakeShortVerb{\|}
+% \medskip
+% \fi
+%
+% \iffalse
+% The package is build to make it possible to define new characters from scratch
+% or as modified copy of other characters. However, no user macros nor
+% documentation for this are provided at the moment. Interested \LaTeX\ users
+% should look at the default definitions at the end of the source code.
+% \fi
+%
+% \iffalse
+% \section{Similar Packages}
+% There a some packages which target the same application like the package
+% presented by this document.
+%
+% \begin{description}
+% \itempkg{ifsym} This package (using the |electronic| option) provides a
+% special font which contains graphical representation of the logical levels
+% high and low at the corresponding letter "H" and "L". The lower case
+% versions have only half the width of the uppercase ones. Also a transition
+% can be added using the "|" character which will (sometimes) be added
+% automatically between |HL| and |LH|.
+% The diagrams are created using the command |\textifsym|\marg{characters},
+% e.g.\ \verb+\textifsym{H|L|h|l|H|L}+ results in
+% \DeleteShortVerb{\|} `\textifsym{H|L|h|l|H|L}'.
+% \MakeShortVerb{\|}
+%
+% There is no support for transition slopes and no support for new
+% user-defined logical levels.
+%
+% \itempkg[(CTAN)]{timing} This package also provides a font for the logical
+% levels but supports transition slopes and larger timing diagrams. This
+% package seems not been updated for a while.
+%
+% \itempkgnoctan[(TikZ Example Page)]{timing}%
+% {http://www.texample.net/tikz/examples/timing-diagram/} This package is
+% accidentally also called "timing.sty" and is not published on CTAN but on
+% the TikZ example website. It is a small package which is meant as an
+% example for the graphics package \texttt{tikz} which is used to draw the
+% diagram. The logical levels must be provided using macros like
+% `|\bit|\marg{0 or 1}\marg{length}'.
+% \end{description}
+% \fi
+%
+% \clearpage
+% \section{Changelog}
+% \begingroup
+% \renewcommand{\changes}[3]{\paragraph{#1 from #2}\begin{itemize}\item #3\end{itemize}}
+% \newenvironment{Changes}[2]{\paragraph{#1 from #2}\begin{itemize}\let\change\item}{\end{itemize}}
+%
+% \changes{v0.3}{2009/04/24}{First released version}
+% \changes{v0.4}{2009/05/03}{Added output routine which combines successive
+% occurrences of the same character. This improves screen display quality and
+% reduces rendering time and file size.
+% \item Removed own macros for lowercase characters. They
+% are now handled by the uppercase macros which receive half of the width.
+% Exceptions are possible like for the `m' character.
+% \item Added parser for rows in \env{tikztimingtable}.
+% This makes the syntax much more stable. Also replaced row counter with TikZ
+% coordinates which is more user-friendly.
+% \item User macros to draw grids and lines inside table.
+% \item In-line Nodes, \eg to mark positions inside the diagram.}
+% \changes{v0.4a}{2009/05/05}{Added \cs{tablerules} macro. Changed default style
+% of inline nodes to \texttt{coordinate}.}
+% \changes{v0.5}{2009/05/15}{Added PGF shape for timing diagrams. Added
+% meta-characters. Changed `M' character to use PGF decorations. Added special
+% `B' character to reduce width of next character. Changed \cs{timing} syntax to
+% include an `at' before the coordinate. Bug fix for use with the `calc'
+% package.}
+% \changes{v0.6}{2009/07/27}{Added ``forward'' modifier `\texttt{F}' as reverse
+% version of the ``backward'' modifier `\texttt{B}'.
+% \item Added support for
+% lower-case modifiers ``\texttt{b}', `\texttt{f}' and \texttt{n}'.
+% \item Added libaries for characters `\texttt{A}'/`\texttt{W}' for arrows and
+% '\texttt{E}' for uncertain low-to-high and high-to-low transitions.}
+% \changes{v0.6a}{2009/07/28}{Added library for overlay modifier `\texttt{O}'.}
+%
+% \begin{Changes}{v0.7}{2009/12/05}
+% \change New libraries:
+% \begin{description}
+% \item[\lib{clockarrows}] Library for clock arrows.
+% \item[\lib{columntype}] Library providing a timing column type for |tabular|.
+% \item[\lib{nicetabs}] Library to format \cs{tikztimingtable} like a |booktab| |tabular|.
+% \item[\lib{counters}] Library to defined counter characters which display an incrementing
+% counter value every time there are used.
+% \item[\lib{advnodes}] Library for advanced nodes with multiple anchor points.
+% \item[\lib{ifsym}] Library providing the same timing symbols and characters as the |ifsym| package
+% when loaded with the |electronic| option.
+% \end{description}
+% \change Additional experimental libraries:
+% \begin{description}
+% \item[\lib{interval}] Library to change color of "ZL", "ZH" etc. transitions to
+% indicate borders of an interval.
+% \item[\lib{beamer}] Library providing some marginal beamer overlay support.
+% \end{description}
+% \change \lib{overlays} library:
+% \begin{itemize}
+% \item Overlays can now be cascaded, \ie an overlay can be inside another one.
+% \item The second braces around the second part are now optional.
+% \item Fixed issues with "T" and "C" characters inside overlays.
+% \end{itemize}
+% \change Meta-characters can now have arguments.
+% \change Added more variety for in-line options: "[[ ]]", "[+ +]" and "[| |]".
+% \change Handling of in-line options and nodes got modified. Options are now placed directly
+% where placed and are valid until the next ";". Please note that |[/utils/exec={..}]| now
+% needs to be written as \verb+[|/utils/exec={..}|]+. Otherwise it is re-executed every time
+% the drawing path is renewed.
+% \change Added star version of \cs{tablegrid}.
+% \change Added background to "E" character (\lib{either} library).
+% \change Some fixes for placing of "D{}" texts.
+% \change Fixed wrong slopes (\eg |lslope| instead of |zslope|) for some transitions.
+% \change Major changes on internal character definition macros, parser and output routine.
+% \change Fixed problems with expanding code content in user input.
+% \change The \cs{texttiming} macro now uses a \cs{timing} macro internally.
+% \change The \cs{timing} macro is now only defined inside |tikzpictures|.
+% This includes |tikztimingtable|.
+% \change Added TikZ style |timing/draw grid| for grids behind \cs{timing} macros.
+% \change Replaced macros \cs{texttimingbefore}, \cs{texttimingafter} and \cs{texttiminggrid} with
+% TikZ settings "timing/before text", "timing/after text" and "timing/draw grid".
+% \change Added separators "timing/outer sep" around \cs{texttiming}.
+% \change Graphical improvements for `double line' characters like "D", "U" and "E".
+% The whole character including both edges is drawn in a single process.
+% \change Character width can now be scaled using |wscale|.
+% \change Character width can now be calculated by placing code inside "$ $".
+% \change Fixed issue with \cs{horlines} macro.
+% \change The \env{tikztimingtable} environment and associated macros got enhanced:
+% \begin{itemize}
+% \item The content is no longer read as macro argument and can now include paragraphs.
+% \item Multiple |extracode| sections can be now included between rows, not only a single
+% section at the very end.
+% \item A \env{extracode} environment has been added. Both macro and environment have now
+% an optional argument for TikZ settings.
+% \item Added \cs{tableheader} macro to label both columns. The \cs{tablerules} macro got
+% adjusted to detect the header line and draw also a middle line.
+% \item Added \env{background} environment to draw things in the background.
+% \item Fixed broken optional argument of \cs{tablegrid}.
+% \item Added macro \cs{marknodes} and associated |debug/nodes| style to mark in-line nodes
+% for debug purposes/orientation during the diagram creation.
+% \end{itemize}
+% \end{Changes}
+% \changes{v0.7d}{2011/01/09}{Fix for end macro of extracode environment to support etoolbox's environment hooks.}
+% \changes{v0.7e}{2017/12/10}{Fixed advnodes library to support current PGF version.}
+% \changes{v0.7e}{2017/12/10}{Documentation update: added usage as float with caption due to user request.}
+% \changes{v0.7f}{2017/12/20}{Documentation update: added description of several existing styles.}
+%
+%
+% \endgroup
+%
+% \section{Dependencies}
+% \dots
+%
+% \clearpage
+% \chapter{Usage}
+%
+% \section{Timing Characters}
+% The logic levels are described by so called \emph{timing characters}. Actually
+% all of them are letters, but the general term \emph{character} is used here.
+% Table~\ref{tab:chars} shows all by default defined logic characters and
+% Table~\ref{tab:full} all possible two-character transitions. Additional
+% functionality is provided by the \emph{modifiers} shown in
+% Table~\ref{tab:modifiers}.
+%
+% \sbox{\sba}{%^^A
+% \sffamily
+% \tikzset{timing/draw grid}
+% \begin{tabular}{clccc}
+% \toprule
+% Character & Description & Diagram & Transition \\
+% & & & Example \\
+% \midrule
+% \texttt{H} & High & \texttiming{H} & \texttiming[L]{H} \\
+% \texttt{L} & Low & \texttiming{L} & \texttiming[H]{L} \\
+% \texttt{Z} & High Impedance & \texttiming{Z} & \texttiming[L]{Z} \\
+% \texttt{X} & Undefined / Don't Care & \texttiming{X} & \texttiming[L]{X} \\
+% \texttt{D} & Data / Double & \texttiming{D} & \texttiming[L]{D{A}D} \\
+% \texttt{U} & Unknown Data & \texttiming{U} & \texttiming[D]{U} \\
+% \texttt{T} & Toggle & \texttiming{L} or \texttiming{H} & \texttiming{TTTT} \\
+% \texttt{C} & Clock (no slope) & \texttiming{L} or \texttiming{H} & \texttiming{CCCC} \\
+% \texttt{M} & Metastable Condition & \texttiming{M} & \texttiming[H]{Ml} \\
+% \midrule
+% \texttt{G} & Glitch (zero width) & \texttiming{G} & \texttiming{HGH} \\
+% \texttt{S} & Space (nothing) & \texttiming{S} & \texttiming{HSL} \\
+% \bottomrule
+% \end{tabular}
+% }%^^A
+%
+% \sbox{\sbb}{%^^A
+% \tikzset{timing/draw grid}
+% \sffamily\small
+% \tikztimingfullexampletable
+% }%^^A
+%
+% \ifprintversion
+%
+% \begin{table}
+% \centering
+% \caption{Timing Characters}\label{tab:chars}
+% \usebox{\sba}
+% \end{table}
+%
+% \begin{table}
+% \caption{Overview over all transitions.}
+% \label{tab:full}
+% \usebox{\sbb}
+% \end{table}
+%
+% \else
+%
+% \begin{table}
+% \sffamily
+% \centering
+% \pgfmathparse{max(\wd\sba+\wd\sbb+1em,\textwidth)}%^^A
+% \makebox[\textwidth][c]{%^^A
+% \begin{minipage}{\wd\sba}
+% \caption{Timing Characters}
+% \label{tab:chars}
+% \usebox{\sba}
+% \end{minipage}%^^A
+% \hspace{1em}\hfill
+% \begin{minipage}{\wd\sbb}
+% \caption{Overview over all transitions.}
+% \label{tab:full}
+% \usebox{\sbb}
+% \end{minipage}%^^A
+% }%^^A
+% \end{table}
+%
+% \fi
+%
+% \clearpage
+% \DeleteShortVerb{\|}
+% \begingroup^^A{table}[b]
+% \tikzset{timing/draw grid}
+% \let\normalfont\sffamily
+% \sffamily\centering
+% \makeatletter
+%
+% \tablecaption{Modifiers for Timing Characters.}
+% \label{tab:modifiers}
+% \def\en{\,\textsf{--}\,}
+% \let\origtabular\tabular
+% \let\endorigtabular\endtabular
+% \def\tabular{\begingroup
+% \setbox\mysb\hbox\bgroup
+% \origtabular}%
+% \def\endtabular{\endorigtabular\egroup\makebox[\textwidth][c]{\usebox\mysb}
+% \endgroup}%
+% \tablefirsthead{%
+% \toprule
+% \normalfont
+% Modifier Syntax & Description \\
+% \midrule
+% }%
+% \tablehead{%
+% \multicolumn{2}{c}%
+% {\raisebox{\belowcaptionskip}{\tablename\ \thetable{} --
+% continued from previous page}} \\
+% \toprule
+% \normalfont
+% Modifier Syntax & Description \\
+% \midrule
+% }%
+% \tabletail{%
+% \bottomrule
+% ^^A\multicolumn{2}{r}{Continued on next page}\\
+% }
+% \tablelasttail{%
+% \bottomrule
+% }
+% \def\Example#1{\def\@tempa{#1}\@onelevel@sanitize\@tempa
+% \hbox{\emph{E.g.:} `\hbox{\texttt{\@tempa}}' $\to$ \texttiming{#1}}}
+% \begin{supertabular}{>{\ttfamily}l>{\raggedright\arraybackslash}p{.85\textwidth}}
+% D\{\}D & Produces transition between two data values. \Example{D{}D} \\
+% D\{\meta{Text}\} & Adds \meta{text} into a data signal using a node.
+% \Example{D{A}D{B}} \\
+% D\{[\meta{\scriptsize
+% \raisebox{-1ex}{\shortstack{TikZ\\Settings}}}]\meta{Text}\} & Adds \meta{text}
+% using the given node \meta{settings}. \Example{D{[blue]A}} \\
+% \meta{\small number}\meta{\small character} & Sets width of next signal to
+% given number. Half of it if character is in lower case.
+% \Example{2.6H5.2l}\\
+% \meta{\small integer}\{\meta{\small characters}\} & Repeats the given
+% characters \texttt{\meta{int}} times. \Example{5{hl}}\\
+% \{ \meta{\small characters} \} & Encloses characters in a local scope. Options inside are only
+% local to the scope. This also applies to the effect of `\texttt{;}' and similar modifiers.
+% \Example{H {[blue] LH} L}\\
+% \midrule
+% \meta{\small number}B & Su\underline{b}tracts the given number from the width
+% of the next character. ``\textit{\texttt{B}ackwards}''
+% \Example{H.5BL}\\
+% \meta{\small number}F & Adds the given number to the width of the next
+% character. ``\textit{\texttt{F}orwards}'' \Example{H.5FL}\\
+% N\oarg{\tiny Settings}\parg{\tiny Name}\marg{\tiny Content} & Adds node at
+% current position. All three arguments are optional. \Example{H N(a1) L}\\
+% \midrule
+% {}[\meta{TikZ Keys}] & Executes given TikZ settings during the drawing
+% process. This settings will be re-executed when the internal drawing path is renewed which
+% can cause side-effects. \Example{H[blue]LH} \\
+% {}[|\meta{TikZ Keys}|] & Executes given TikZ settings during the drawing
+% process like \texttt{[ ]} but does not re-executes them.
+% {\Example{D{.} [|/utils/exec={\def\m{...}}|] D{.} D{.}}} \\
+% {}[!\meta{TikZ Keys}!] & Executes given TikZ settings during the
+% \emph{parsing} process. Because this makes only sense for internal settings
+% the default path is `\texttt{/tikz/timing}', not `\texttt{/tikz}' like in all
+% other settings macros. \Example{H[!wscale=2.5!]LH} \\
+% {}[[\meta{TikZ Keys}]] & Executes given TikZ settings first during the
+% parsing process and again during the drawing process. This is for settings
+% which are needed for width calculations and again for the drawing code, \eg
+% the slope values. \Example{H[[timing/slope=.5]]L $\slope$H} \\
+% \midrule
+% !\{\meta{code}\} & Places given code into the internal \envv{tikzpicture}.
+% See Example~\ref{exa:adv}. \\
+% @\{\meta{code}\} & Executes the given code immediately during the parsing
+% process. This can be used to change parsing parameters. To execute code during
+% the drawing process use \verb+[|/utils/exec=+\meta{code}\verb+|]+ instead.
+% \Example{L @{\setwscale{2}} H} \\
+% \texttt{\$}\meta{math expression}\texttt{\$} & Takes a valid \texttt{pgfmath}
+% expression (See \pkg{pgf} manual), evaluates it and places the result back in
+% the input string so it can be used as width for the next character. The macros
+% \cs{slope}=\cs{lslope}, \cs{dslope}, \cs{zslope} and \cs{wscale} can be used
+% to access the corresponding values. \Example{D{} $ \dslope $ D{} D} \\
+% \midrule
+% ; & Renews the internal drawing path which ends the scope of all options
+% given by \texttt{[\,]}. \Example{H;[blue]L;H} \\
+% , & Same as `\texttt{;}', but timing specific options (atm.: slopes and line
+% width) are restored for the new path. \Example{[line width=1pt]L,H;L} \\
+% \end{supertabular}
+% \endgroup
+% \MakeShortVerb{\|}
+%
+% \clearpage
+% \section{Macro for use in Text Mode}
+% \vspace{-\bigskipamount}%
+% \DescribeMacro\texttiming[<initial~character/TikZ Settings>]{<characters>}
+% This macro places a single timing diagram line into the current text. The
+% signals have the same height as a uppercase letter (like `X') of the current
+% font, \ie they scale with the font size.
+% The macro argument must contain only valid logic characters and modifiers
+% which define the logical levels of the diagram line.
+%
+% An initial character can be given as an optional argument. No logic level will
+% be drawn for this character. Instead it will be used to define the initial
+% position of the signal so that the diagram line will start with a transition
+% from the initial to the first character. However, if the optional argument
+% holds more than a single character it is taken as TikZ settings for the
+% diagram. The initial character can then be given using the key
+% `|timing/initchar=|\meta{char}'.
+%
+% \par\medskip\noindent
+% \begin{minipage}{\textwidth}\noindent
+% \textit{Examples:}\\*[\smallskipamount]\hspace*{\parindent}%
+% \begin{minipage}{\textwidth-4\parindent}
+% \small |\texttiming{HLZDZLH}|^^A
+% \phantom{\texttt{[L]}} gives `\texttiming{HLZDZLH}', with grid:
+% `{\let\texttimingbefore\texttiminggrid\texttiming{HLZDZLH}}'.\\
+% |\texttiming[L]{HLZDZLH}| ^^A
+% gives `\texttiming[L]{HLZDZLH}', with grid:
+% `{\let\texttimingbefore\texttiminggrid\texttiming[L]{HLZDZLH}}'.\\
+% |\texttiming[green]{HLZDZLH}| ^^A
+% gives `\texttiming[green]{HLZDZLH}'\\
+% |\texttiming[green,timing/initchar=L]{HLZDZLH}| ^^A
+% gives `\texttiming[green,timing/initchar=L]{HLZDZLH}'
+% \end{minipage}
+% \end{minipage}
+%
+% \DescribeMacro\texttimingbefore!{\hspace{2em}\textbf{Deprecated!}\hspace{8em}(\emph{defaults to}: \meta{empty})}!
+% \DescribeMacro\texttimingafter!{\hspace{2.5em}\textbf{Deprecated!}\hspace{8em}(\emph{defaults to}: \meta{empty})}!
+% This two macros are executed before and after every timing diagram line
+% created by \cs{texttiming} macro inside the same \envv{tikzpicture}
+% environment and can be used to add drawing macros. The argument of the
+% \cs{texttiming} macro is already processed before any of these macros are
+% expanded, therefore this macros can access the width of the diagram.
+%
+% These macros should not be used directly in newer code but instead the new
+% TikZ styles "timing/before text" and "timing/after text". For backward
+% compatibility these styles default to the two macros.
+%
+% {\small
+% (Deprecated) Example: |\let\texttimingbefore\texttiminggrid| adds a grid into the
+% background of the \cs{texttiming} diagram.}
+%
+% \DescribeMacro\texttiminggrid!\hspace{2.5em}\textbf{Deprecated!}!
+% This macro should only be used inside \cs{texttimingbefore} or
+% \cs{texttimingafter} and draws a grid of the full size of the
+% \cs{texttiming} diagram.
+% For newer code the TikZ styles "timing/draw grid" and "timing/no grid"
+% should be used instead, \eg
+% |\tikzset{timing/intext/.append style={timing/draw grid}}| or simply enable the grid globally
+% for all in-text and other timing diagrams with |\tikzset{timing/draw grid}|.
+%
+%
+% \newpage
+% \section{Macro for use inside TikZ-Pictures}
+%
+% \DescribeMacro\timing[<TikZ Keys>]~'at'~(<TikZ Coordinate>)~{[<initial character>]<characters>}';'
+% This macro does the same as \cs{texttiming} but is designed to be used inside
+% a \envv{tikzpicture} environment and only there. Like normal TikZ macros
+% (\css{path}, \css{drawn}, \css{node}) it allows an optional argument with TikZ
+% settings and an optional TikZ-coordinate. However, a own argument parser, not
+% the one used by TikZ, is used to detect and read these optional arguments.
+% Therefore the order of the arguments is mandatory and must not be reversed.
+% This small limitation might be overcome in future versions of this package.
+%
+% Please note that the optional initial character may be given \emph{inside} and
+% at the very start of the mandatory argument, not before it. This is necessary
+% because of several technical reasons.
+%
+% Example: |\tikz \timing [green] at (1,2) {HLZDZLH};|\phantom{\texttt{[L]}}
+% gives `\tikz \timing [green] at (1,2) {HLZDZLH};'.
+%
+% Example: |\tikz \timing [green] at (1,2) {[L]HLZDZLH};| gives `\tikz \timing
+% [green] at (1,2) {[L]HLZDZLH};'.
+%
+% \ifprintversion\else
+% \clearpage
+% \fi
+% \subsection*{Timing Shape Anchors}\label{sec:timingshape}
+% Every timing diagram line produced by \cs{timing}, which includes the rows in
+% \env{tikztimingtable}, is also a PGF shape (node) with several anchors. These
+% are shown in Figure~\ref{fig:shape}.
+% The shape is very similar to the standard |rectangle| shape but does not
+% provide a |text| anchor. In addition to the standard points of the compass
+% anchors of TikZ the three logic levels |low|, |mid| and |high| can be used in
+% combination with |start|, |mid| and |end|. An extra |origin| anchor is
+% located at the lower left, also called |south west| corner where the diagram
+% originates. The two anchors called |start| and |end| are provided to mark the
+% start and end of the timing signal. There are either located at the low,
+% middle or high logic level dependent on the used first (or initial) and last
+% timing character.
+%
+% In order to use the timing node it has to be named which can be done using the
+% `\texttt{name=\meta{name}}' option inside the optional argument. The rows of a
+% \env{tikztimingtable} are automatically named as `|row|\meta{row number}'
+% where the first row has the number 1.
+%
+% ^^AFurther details how to use a shape inside a TikZ or PGF picture can be
+% ^^Afound in the PGF manual Section~15 and~59, respectively.
+%
+% \begin{figure}
+% \centering
+% \resizebox{\textwidth}{!}{%^^A
+% \begin{tikzpicture}[timing,y=1.5cm,x=1.5cm,timing/slope=0]
+% \timing [y=1.5cm,x=1.5cm,gray,thick] at (0,0) {HLHLHL};
+% \node[name=s,shape=tikztiming@shape,anchor=origin] at (0,0) {};
+% \foreach \anchor/\placement in
+% {north west/above left, north/above, north east/above right,
+% west/left, center/right, east/right,
+% mid west/right, mid/left, mid east/left,
+% base west/left, base/left, base east/above right,
+% south west/below left, south/below, south east/below right,
+% low start/below right, mid start/below right, high start/above right,
+% low mid/above right, high mid/right,
+% low end/below left, mid end/below left, high end/above left,
+% start/left, end/right, origin/right}
+% \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+% node[\placement] {\tiny\texttt{(s.\anchor)}};
+% \end{tikzpicture}%^^A
+% }
+% \caption[Timing Shape Anchors]{Timing Shape Anchors. The \texttt{start} and
+% \texttt{end} anchors mark the start and end of the timing
+% signal.}\label{fig:shape}
+% \end{figure}
+%
+%
+% \clearpage
+% \section{Table for Timing Diagrams}
+% \begin{DescribeEnv}{tikztimingtable}[<TikZ settings for whole table>]\relax
+% \MacroArgs {<Signal Name>}~~'&'~~[<{\small Init.~Char./TikZ Keys for Row}>] <Characters> ~~'\\' \\
+% \dots\\
+% \hspace*{-1em}\Macro\extracode~~'% Optional' \\
+% <additional code>
+% \end{DescribeEnv}
+% This environment can be used to typeset multi-line timing diagrams. The
+% syntax is like the one for a \envv{tabular} environment with two columns. The
+% first column is for the signal name and the second one are the logic
+% characters which would be placed inside the argument of a \cs{texttiming} or
+% \cs{timing} macro.
+% If the second column starts with an optional argument it is either taken as
+% initial character if it holds only a single character or as row wide settings
+% otherwise.
+% The whole table will be drawn inside a \envv{tikzpicture} environment using
+% multiple \cs{timing} and \cs{node} macros for the timing signals and their
+% names, respectively. Additional \pkg{tikz} drawing code can be insert at the
+% end of the table using \cs{extracode}.
+%
+% \DescribeMacro\extracode[TikZ Keys]
+% This macro is only defined inside a \env{tikztimingtable} environment. In earlier
+% versions of this package it could only be used after the last table line (\ie after a |\\|).
+% If used there all code between it and the |\end{tikztimingtable}| will be placed inside the same
+% \envv{tikzpicture}. This allows to add some drawing lines or a grid to the
+% picture. The macro does \emph{not} start a TikZ |scope| or a \TeX\ group by itself.
+% The optional \meta{settings} therefore affect all following code until the end of the picture.
+%
+% It is also possible to draw something behind the timing diagram by
+% using using the \env{background} environment or the PGF background layer:\\[\smallskipamount]
+% |\begin{pgfonlayer}{background}|\ldots|\end{pgfonlayer}|
+%
+% \DescribeMacro\endextracode
+% From\NewIn{v0.7} version 0.7 on it is possible to add further timing rows after an |extracode| section by using
+% \cs{endextracode}. Everything after this macro is taken as part of a new row. It is allowed to use
+% this macro direct before \cs{end}\env{tikztimingtable}. This makes it possible to use \cs{extracode}
+% anywhere inside the table, including at the very start before any rows are processed. Early
+% insertion of extra code is necessary for \eg limiting the bounding box or setting up a clipping path.
+%
+% \DescribeEnv[<extra drawing code>]{extracode}[<TikZ settings>]
+% Instead\NewIn{v0.7} of using \cs{extracode} \dots \cs{endextracode}, which is actual plain\TeX\ syntax, this
+% \LaTeX\ style environment can be used. Like any environment it creates a \TeX\ group around its
+% content, but no TikZ |scope| is created to allow drawing code (\eg clipping paths) to affect the
+% rest of the table. The optional \meta{settings}, however, only affect the environment content.
+%
+% Please note that while \Macro\endextracode is optional if \Macro\extracode is used at the end of the table,
+% a \Macro\begin{extracode} must always be closed by \Macro\end{extracode}.
+%
+% \subsection*{Macros for \cs{extracode} Section}
+% The following macros are only defined inside a \env{tikztimingtable} after the
+% macro \cs{extracode}. They are useful for drawing additional material.
+%
+% \DescribeMacro\tablegrid*[<TikZ Keys>]
+% After \css{extracode} this macro draws a grid in the background of the table.
+% A separate grid is drawn for each row. The normal version draws all grids with
+% the width of the widest row while the star version draws them with the width
+% of the corresponding row. Because this macro draws material into the |background|
+% layer it must not be placed inside a |pgfonlayer| environment itself.
+%
+% \DescribeMacro\fulltablegrid[<TikZ Keys>]
+% After \css{extracode} this macro draws a big grid over all rows in the
+% background of the table.
+%
+% \DescribeMacro\nrows
+% Returns the number of rows in the current table. Useful for use in
+% \cs{horlines}.
+%
+% \DescribeMacro\rowdist
+% \DescribeMacro\coldist
+% This macros return the row and column distance. There are useful for drawing
+% additional material relative to the rows and columns. This values can be set
+% (\eg in the optional argument of the table) using the \texttt{timing/rowdist}
+% and \texttt{timing/coldist} settings which are explained in
+% Section~\ref{sec:styles}.
+%
+% \DescribeMacro\twidth
+% Returns the width (as multiple of the `period width') of the longest timing
+% diagram line in the table. Example: If the longest line would be
+% "H 2.3L z" than \cs{twidth} would be $1+2.3+0.5=3.8$.
+%
+% \DescribeMacro\horlines[<TikZ Keys>]{<list>}
+% Draws horizontal lines, optionally with the given \meta{Settings}, at the base
+% line of the rows given by \meta{list}. The PGF macro
+% \css{foreach}\footnote{See the \texttt{pgf} manual for more details.} is
+% internally used so the list can include not only row numbers as integer but
+% also fractional numbers and the "..." operator to auto-increment the
+% numbers. Please note that all numbers in the list are multiplied by
+% \cs{rowdist}.
+% If the list is empty the default "1,2,...,\nrows" is used which draws lines
+% for all rows.
+%
+% \DescribeMacro\vertlines[<TikZ Keys>]{<list>}
+% Like \cs{horlines} but draws vertical lines and the listed numbers a relative
+% to the basic width.
+% If the list is empty the default "0,1,...,\twidth" is used which draws lines
+% after every period width.
+%
+% \DescribeMacro\tableheader[<TikZ Keys>]{<Description Title>}{<Signal Title>}
+% This macro adds a table head row on top of the table. The two mandatory
+% arguments provide the header text for the description and signal columns.
+%
+% \DescribeMacro\tablerules[<TikZ Keys>]
+% This macro adds top and bottom rules to the table in the same (or at least
+% very similar) way as the \texttt{booktabs} package is doing it for normal
+% \texttt{tabular}s. The current bounding box is used to calculate the needed
+% rule length, which makes this macro position dependent if further code
+% changes the bounding box. If the \cs{tableheader} macro was used beforehand it
+% also draws a thinner horizontal line (like \texttt{booktabs} \cs{midrule})
+% between the table head and body.
+%
+% \DescribeEnv[<drawing commands>]{background}[<TikZ Keys>]
+% This environment can be used to draw material on the |background| layer and is
+% an abbreviation for:\\[\medskipamount]
+% | \begin{pgfonlayer}{background}|\\
+% | \begin{scope}|\oarg{TikZ Keys}\\
+% | |\meta{drawing commands}\\
+% | \end{scope}|\\
+% | \end{pgfonlayer}|
+%
+% \subsection*{Scaling the Table}
+% The standard "scale" setting of TikZ will not scale all parts of the table correctly,
+% \eg the line width and nodes will keep their original size. However there are scaled
+% relative to the font size (which needs to be set using \texttt{timing/font}).
+% If the timing diagrams should be scaled the keys \texttt{timing/unit}, \texttt{timing/xunit} and/or
+% \texttt{timing/yunit} can be used.
+%
+% Alternatively the table can be scaled using the
+% \cs{scalebox}\marg{factor}\marg{content} macro from the \pkg{graphicx} package or
+% be placed inside a scaled \cs{node} inside another \env{tikzpicture} environment.
+%
+% \subsection*{Positions \& Nodes inside the Table}
+%
+% \subsubsection*{Coordinates}
+% The first row starts at $y=0$ and the next rows are each
+% |-1*\rowdist| lower than the previous one.
+% The vertical unit is 1 \textsf{signal height} and the default row distance is
+% `2' (=$2\times$\textsf{signal height}). This means that a normal table with
+% three rows goes from $y=+1$ (base line at 0 + 1 \textsf{signal height}) to
+% $y=-4$ (first row:~+0, second row:~-2, third row:~-4). This are relative to
+% the middle of the drawn lines, \ie the bounding box is
+% $2\times\frac{\text{\textsf{line width}}}{2}=1\times $\textsf{line width}
+% higher.
+%
+% The timing column starts at $x=0$ and goes into the positive range while
+% scaled using the period width. Example: |HHHh| has a width of 3.5.
+% The label column starts at $x=-$|\coldist| and the text is right align with
+% the right border at this position.
+% See Figure~\ref{fig:distnodestable} for an illustration.
+%
+% \subsubsection*{Nodes}
+% Each timing line is a timing node (see section~\ref{sec:timingshape})
+% labeled (not fully correctly) as `|row|\meta{number}', where the first row has the number 1 and the last
+% one the number provided in \cs{nrows}, but can also accessed using the alias "last row".
+% The corresponding labels are normal rectangle nodes named "label0", "label1", \dots,
+% `|label|\cs{nrows}'/"last label".
+%
+% Both groups of `rows' and `labels' are enclosed in a rectangle node called "all rows" and
+% "all labels", respectively. These nodes can be used to draw material relative to the rows,
+% \eg the macros \cs{tableheader} and \cs{tablerules} are making use of them.
+% The headers added by \cs{tableheader} are rectangle nodes names "label header" and "row header"
+% and are placed between the x-coordinates of the inner and outer border of "all labels" and "all rows"
+% respectively. By default the TikZ settings "pos=0" and "anchor=base east"/"anchor=base west", respectively,
+% are applied to place them in the inner border, but this
+% can be changed using the styles "timing/table/header" and/or "timing/table/label header"/"timing/table/row header".
+% All nodes are shown in Figure~\ref{fig:distnodestable}.
+%
+%
+% \begin{figure}
+% \centering
+% \scalebox{1.15}{\Huge
+% \begin{tikztimingtable}[semitransparent]
+% First Row & H L H L H L \\
+% Second Row & H L H L H L \\
+% $\vdots$\hspace*{2em} & 3S N[rectangle,above,inner sep=0pt]{$\vdots$} 3S \\
+% Last Row & H L H L H L \\
+% \begin{extracode}
+% \tableheader[draw=black,densely dashed,thin]{Label}{Timing}
+% \tablerules
+% \useasboundingbox (current bounding box.south west) rectangle (current bounding box.north east);
+% \begin{background}[black,densely dashed,thin,opacity=1]
+% \normalsize
+% \draw (row1.north west) rectangle (row1.south east);
+% \draw (row2.north west) rectangle (row2.south east);
+% \draw (last row.north west) rectangle (last row.south east);
+% \node [right] at (row1.east) {row1};
+% \node [right] at (row2.east) {row2};
+% \node [right] at (last row.east) {row\cs{nrows}};
+% \node [below right] at (last row.east) {last row\large\strut};
+%
+% \path let \p1 = (label header.west), \p2 = (row header.east), \p3 = (all labels.west), \p4 = (all rows.east) in
+% node [left] at (\x3,\y1) {label header}
+% node [right] at (\x4,\y2) {row header}
+% ;
+% \begin{scope}[solid,semithick,black!80]\tiny
+% \draw [|->] let \p1 = (label header.south east), \p2 = (all labels.west) in
+% (\x1+.5\pgflinewidth,\y1-2pt) node [below left=-.4ex] {0}
+% -- node [below=-.4ex,midway] {pos} (\x2,\y1-2pt) node [below right=-.4ex] {~\rlap{1}}
+% ;
+% \draw [|->] let \p1 = (row header.south west), \p2 = (all rows.east) in
+% (\x1-.5\pgflinewidth,\y1-2pt) node [below right=-.4ex] {0}
+% -- node [below=-.4ex,midway] {pos} (\x2,\y1-2pt) node [below left=-.4ex] {\llap{1}\,~}
+% ;
+% \end{scope}
+%
+% \draw [dotted,color=green] (all rows.south west) rectangle (all rows.north east);
+% \node [below right,green] at (all rows.east) {all rows};
+%
+% \draw (label1.north west) rectangle (label1.south east);
+% \draw (label2.north west) rectangle (label2.south east);
+% \draw (last label.north west) rectangle (last label.south east);
+% \path let \p1 = (label1.west), \p2 = (label2.west), \p3 = (last label.west), \p4 = (all labels.west) in
+% node [left] at (\x4,\y1) {label1}
+% node [left] at (\x4,\y2) {label2}
+% node [left] at (\x4,\y3) {label\cs{nrows}}
+% node [below left] at (\x4,\y3) {last label\large\strut}
+% ;
+%
+% \draw [dotted,color=green] (all labels.south west) rectangle (all labels.north east);
+% \node [below left,green] at (all labels.west) {all labels};
+%
+% \begin{scope}[help lines]
+% \draw (all rows.north west) -- +(0,3.25);
+% \draw (all rows.north east) -- +(0,3.25);
+% \draw (all labels.north west) -- +(0,3);
+% \draw (all labels.north east) -- +(0,3);
+% \end{scope}
+%
+% \begin{scope}[solid,thick]
+% \draw [fill] (0,0) circle (1pt) node [below right=-2pt] {\tiny origin};
+% \draw [>=stealth,->] (-.25,0) -- (.4,0);
+% \draw [>=stealth,->] (0,-.25) -- (0,.4);
+% \end{scope}
+%
+% \begin{scope}[dotted,gray]
+% \draw (row1.south west) -- (label1.base west);
+% \end{scope}
+%
+% \begin{scope}[solid]
+% \draw (row1.north east) -- ++(5em,0) coordinate (O) -- +(5pt,0);
+% \draw (row1.south east) -- ++(5em,0) coordinate (A) -- +(5pt,0);
+% \draw (row2.south east) -- ++(5em,0) coordinate (B) -- +(5pt,0);
+% \draw [<->] (A) -- node[midway,right] {\cs{rowdist}} (B);
+% \draw [<->] (O) -- node[midway,right] {\cs{yunit}} (A);
+%
+% \draw (row1.south east) -- ++(0,1.5) coordinate (A) -- +(0,5pt);
+% \draw (row1.south east) ++(-1,1) -- ++(0,0.5) coordinate (B) -- +(0,5pt);
+% \draw [<->] (B) -- (A) node[right] {\cs{xunit}};
+%
+% \draw (row1.north west) -- ++(0,7em) coordinate (A) -- +(0,5pt);
+% \draw let \p1 = (row1.north west), \p2 = (label1.north east) in
+% (\x2,\y2) -- (\x2,\y1+7em) coordinate (B) -- +(0,5pt);
+% \draw [<->] (B) -- (A) node[right] {\cs{coldist}};
+% \end{scope}
+% \end{background}
+% \end{extracode}
+% \end{tikztimingtable}%^^A
+% }%^^A
+% \caption{Distances and Nodes inside a \env{tikztimingtable}}\label{fig:distnodestable}
+% \end{figure}
+%
+% \clearpage
+% \section{Macros for use inside the Character String}\label{sec:maccharstr}
+% The modifiers "@" and `\texttt{\$}' allow the user to include macros. These
+% macros are evaluated when the |tikz-timing| parser encounters them in the
+% input character string, \ie before any diagram element is drawn or any single
+% bracket "[ ]" options are processed. Therefore their values should be set
+% either outside the |tikz-timing| diagram or with the "[! .. !]" or
+% "[[ .. ]]" option blocks.
+%
+% The following macros are provided for the user.
+%
+% \DescribeMacro\tikztimingsetwscale{<math expression>}
+% \DescribeMacro\setwscale{<math expression>}
+% This macro\NewIn{v0.7}, which can be called |\setwscale| for short inside modifier code,
+% sets the |wscale| value. This value is used during the parsing process to
+% scale the width of the characters, \eg |wscale=3.2| makes |1H| as long as
+% |3.2H| normally would be. Slopes are not affected, but the `width' values of
+% meta-characters are. It can also be set with the |timing/wscale| TikZ setting.
+% The current value can be accessed using \cs{wscale}.
+%
+% \DescribeMacro\wscale
+% Returns the current width scaling "wscale" value.
+%
+% \DescribeMacro\xunit
+% \DescribeMacro\yunit
+% This dimension registers can be used to access the x- and y-unitlength of the timing diagram.
+% Assignments to these registers do not change the scaling!
+%
+% \DescribeMacro\slope
+% \DescribeMacro\lslope!\hspace{.6em}\small(alias)!
+% Returns the current logic slope, \ie the slope between |L| and |H|
+% levels.
+% Set by the |timing/lslope| or indirectly by the |timing/slope| TikZ setting.
+% See Table~\ref{tab:styles} for more information.
+%
+% \DescribeMacro\zslope
+% Returns the current Z slope. Set by the |timing/zslope| or indirectly by the
+% |timing/slope| TikZ setting.
+%
+% \DescribeMacro\dslope
+% Returns the current Z slope. Set by the |timing/dslope| or indirectly by the
+% |timing/slope| TikZ setting.
+%
+% \subsection*{Examples:}
+% Changing the slope and using its value to calculate the width of a
+% character:\\
+% |\texttiming{ HLHLHL [[timing/slope=.5]] H $\slope$L }|\\
+% gives:
+% {\texttiming{ HLHLHL [[timing/slope=.5]] H $\slope$L }}
+% \\*[\smallskipamount]
+% Changing the width scaling for a curtain group of characters:\\*
+% |\texttiming|\ignorespaces
+% |{ HL [!wscale=\wscale/3!] 3D{a} Z D Z [!wscale=3*\wscale!] HL }|\\*
+% gives:
+% {\texttiming{ HL [!wscale=\wscale/3!] 3D{a} Z D Z [!wscale=3*\wscale!] HL }}
+%
+% \clearpage
+% \section{Meta-Characters}
+% It is possible to define recurring groups of characters and modifiers as so
+% called \emph{meta-characters}. These characters are than expanded to the group
+% whenever they appear inside the character list. Please note that like for
+% groups a numeric factor before such a meta-character is taken as a repetition
+% factor not as a width. The meta-character is case sensitive and the other case
+% is not affected by the definition, \ie the lower- and uppercase versions of
+% one character can have complete different meanings. It is possible to redefine
+% normal characters (only one or both cases) as meta-characters, which
+% suppresses its normal meaning. Using the meta-character in its own definition
+% group causes a infinite loop which will lead to an \TeX\ error.
+%
+% \DescribeMacro\tikztimingmetachar{<Meta-Character>}[<Number of arguments>]{<Character Group>}
+% This macro defines the given \meta{meta-character} to be identical to the
+% given \meta{character group}. Alternatively this can also be done using the
+% TikZ style `|timing/metachar=|\marg{Meta-Character}\oarg{Number of
+% arguments}\marg{Character~Group}'.
+%
+% An empty group deletes the meta-character, which might be necessary in cases
+% when normal characters are temporary redefined as meta-characters. However, if
+% the group only contains spaces the meta-character is practically ignored.
+%
+% Because the meta-character is simply expanded to its character list, the first
+% character of this list might be combined with identical characters placed before the meta-character.
+% For example, after a meta-character "Y" got defined as "2D{A} 2D{B}" the characters "DY" will first be expanded to
+% "D2D{A} 2D{B}" and then combined to "3D{A} 2D{B}". This might not be the wanted behaviour and can be avoided by terminating the leading "D" with
+% its own braces: "D{}Y".
+%
+% \subsection*{Meta-Characters with Arguments}
+% The\NewIn{v0.7}
+% replacement text of meta-character can now include macro arguments.
+% This allows the creation of more complex and flexible meta-characters. The
+% optional argument \meta{Number of arguments} selects the number of macro
+% arguments in the same way it does for \cs{newcommand}. However, the first
+% argument |#1| is always set to the given `width' of the meta-character, \ie
+% the number value preceding it. All further arguments are read as normal for
+% macros from the text after the meta-character. It is recommended to enclose
+% them in braces.
+%
+% The default behaviour of meta-character without arguments is, as mentioned
+% above, to repeat the replacement group by the preceding number (`width'). This
+% is now archived by defining them internally as `|#1|\marg{Character Group}',
+% which creates a repetition group. Users which want to include an own argument
+% but still want to repeat the group need to define a meta-character with at
+% least two arguments and define it as "#1{ .. #2 .. }". If the repetition is
+% not wanted the |#1| argument can be used as a real width for one or more group
+% internal characters: "{Y}[1]{Z #1D Z}", so "4Y" will give "Z 4D Z"
+% instead of "4{Z D Z}".
+%
+% Also the modifier "@" (see Table~\ref{tab:modifiers}) together with the
+% \cs{setwscale} macro can be used to scale the whole group dependent on the
+% first argument:\\
+% "{Y}[1]{ @{\setwscale{#1*\wscale}} Z 2D Z @{\setwscale{\wscale/#1}} }", so
+% "4Y" is equivalent to "4Z 8D 4Z".
+%
+% The new `\texttt{\$}' modifier can be used to calculate the width of the group
+% characters: |{Y}[1]{$#1/3$D{A} $#1/3$D{B} $#1/3$D{C}}|, so "4Y" results in
+% "1.333D{A} 1.333D{B} 1.333D{C}".
+%
+%
+% \bigskip
+% \noindent
+% \textit{Examples:}\\*[\medskipamount]
+% |\tikztimingmetachar{Y}{2D 0.5U 2D{}} \texttiming{ZZ Y Z 3Y ZZ}|\\
+% gives:
+% {\tikztimingmetachar{Y}{2D 0.5U 2D{}} \texttiming{ZZ Y Z 3Y ZZ}}
+% \\[\bigskipamount]
+% |\tikztimingmetachar{Y}{2D{Text}} \tikztimingmetachar{y}{1D{\tiny Text}}|
+% |\texttiming{ZZ Y Z 3y ZZ}|\\
+% gives:
+% {\tikztimingmetachar{Y}{2D{Text}} \tikztimingmetachar{y}{1D{\tiny Text}}
+% \texttiming{ZZ Y Z 3y ZZ}}
+% \\[\bigskipamount]
+% \DeleteShortVerb{\|}
+% \MakeShortVerb{\`}
+% `\newcounter{mycount}`\\
+% `\tikztimingmetachar{Q}{2D{\stepcounter{mycount}\arabic{mycount}}}`\\
+% `\tikztimingmetachar{R}{[| /utils/exec=\setcounter{mycount}{0} |]}`\\
+% `\texttiming{ 5Q R 3Q R 10Q }`\\
+% gives:
+% {\newcounter{mycount}%
+% \tikztimingmetachar{Q}{2D{\stepcounter{mycount}\arabic{mycount}}}%
+% \tikztimingmetachar{R}{[| /utils/exec=\setcounter{mycount}{0} |]}%
+% \texttiming{ 5Q R 3Q R 10Q }}
+% \DeleteShortVerb{\`}
+% \MakeShortVerb{\|}
+% \\[\bigskipamount]
+% Redefining the glitch "G" character:\\
+% |\tikztimingmetachar{G}{.1T.1T .2B} \tikztimingmetachar{g}{.1T.1T}|\\
+% |\texttiming{ 10{H G L G} H } % With correction of width `.2B'|\\
+% |\texttiming{ 10{H g L g} H } % Without correction|\\
+% |\texttiming{ 10{H L } H } % For comparison|\\
+% gives:\\
+% {\let\texttimingbefore\texttiminggrid
+% \tikztimingmetachar{G}{.1T.1T .2B} \tikztimingmetachar{g}{.1T.1T}%
+% \texttiming{ 10{H G L G} H }\\
+% \texttiming{ 10{H g L g} H }\\
+% \texttiming{ 10{H L } H }}
+% \\[\bigskipamount]
+% |\tikztimingmetachar{J}[2]{ 1.8D{#2} .2D{} }|\\
+% |\texttiming{ D{} J{A} J{B} J{C} D }|\\
+% gives:
+% {\tikztimingmetachar{J}[2]{ 1.8D{\strut #2} .2D{} }%
+% \texttiming{ D{} J{A} J{B} J{C} D }}
+% \\[\bigskipamount]
+% |\tikztimingmetachar{Y}[3]{#1{ D{\strut #2} D{#3} }}|\\
+% |\texttiming{ Z 2Y{a}{b} Z 4Y{1}{2} Z}|\\
+% gives:
+% {\tikztimingmetachar{Y}[3]{#1{ D{#2} D{#3} }}%
+% \texttiming{ Z 2Y{a}{b} Z 4Y{1}{2} Z}}
+% \\[\bigskipamount]
+% |\tikztimingmetachar{Y}[3]{ .2D .2B #1d{\strut #2} .2D .2B #1d{\strut #3} }|\\
+% |\texttiming{ Z 2Y{a}{b} Z 4Y{1}{2} Z}|\\
+% gives:
+% {\tikztimingmetachar{Y}[3]{ .2D .2B #1d{\strut #2} .2D .2B #1d{\strut #3} }%
+% \texttiming{ Z 2Y{a}{b} Z 4Y{1}{2} Z}}
+% \\[\bigskipamount]
+% Mata-chars to set the width scaling. Because the scaling also affects the
+% meta-char width (|#1|) argument a compensation is needed to achieve absolute
+% values (|W|) instead of relative ones (|w|).\\
+% |\tikztimingmetachar{w}[1]{ [! wscale=#1 !] } % relative|\\
+% |\tikztimingmetachar{W}[1]{ [! wscale=#1/\wscale !] } % absolute|\\
+% |\texttiming{ HL .2w HLHLH 3w LH 1W LH }|\\
+% gives:
+% {\tikztimingmetachar{w}[1]{ [! wscale=#1 !] }%
+% \tikztimingmetachar{W}[1]{ [! wscale=#1/\wscale !] }\\
+% \texttiming{ HL .2w HLHLH 3w LH 1W LH }}
+%
+% \clearpage
+% \section{Floating timing diagrams with captions}
+% The timing diagrams can also be typeset as floats with (or without) a caption like a |figure|.
+% This can be easily achieved by using the \pkg{caption} package as shown in the following example document.
+%
+% \par\vspace{3\baselineskip}\par
+%
+% \begin{lstlisting}[gobble=4,language={[latex]tex},frame=single]
+% \documentclass{article}
+% \usepackage{tikz-timing}
+% \usepackage{caption}
+%
+% \DeclareCaptionType{timingdiag}[Timing diagram][List of Timing Diagrams]
+%
+% \begin{document}
+% \listoftimingdiags
+%
+% \begin{timingdiag}[!ht]
+% \centering
+% (timing code)
+% \caption{Some timing diagram caption}
+% \label{tim:foobar}
+% \end{timingdiag}
+%
+% \end{document}
+% \end{lstlisting}
+%
+%
+% \chapter{TikZ Keys for Styles, Settings and Actions}\label{sec:styles}
+% TikZ itself uses the |pgfkeys| package to define and apply drawing styles and settings.
+% The same method is also used for |tikz-timing| which
+% places all of the keys under the ``subdirectory'' "timing" in
+% the main ``directory'' `tikz', which is the default when \css{tikzset} is
+% used.
+% This keys are simply called \emph{TikZ Keys} throughout this manual and
+% can be used in all places where \meta{TikZ Keys} is mentioned, while some only make sense at specific
+% places.
+% Three types of keys
+% are used by this package: styles, settings and actions.
+%
+% Styles simply define the style in which a certain element is drawn, \eg in which color or line width.
+% This styles are defined and can be redefined using
+% \css{tikzset}|{|\meta{style name}|/.style=|\meta{value}|}|. However, while some styles
+% are initial empty, some hold internal settings and therefore user styles should only be added
+% using `|.append style=|\meta{value}'.
+%
+% Settings are TikZ keys which await an argument and set an internal macro or length. They are
+% like \cs{setlength} and \cs{renewcommand}. They should only by used as stated and not be redefined like styles as
+% shown above.
+%
+% Action are TikZ keys which perform a drawing or other action on the current element, either directly or
+% by en-/disable an internal setting which then in turn triggers the drawing process. Therefore some
+% actions can be globally and/or locally but others only make sense if used locally on a single |tikz-timing|
+% macro or environment or even a scope inside a \env{tikztimingtable}.
+% Action can be very similar to settings but they always execute code instead of only setting/redefining it.
+% The actions are defined and can be redefined using
+% \css{tikzset}|{|\meta{action name}|/.code=|\meta{code}|}|%
+%
+% \begingroup
+% \def\C{Action}
+% \def\S{Style}
+% \def\s{Setting}
+% \def\en{\,\textsf{--}\,}
+%
+% \section*{General}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing & \S & Base settings like signal height and period width.\\
+% timing/font=\meta{font commands} & \s & Sets the normal \texttt{font} key and sets \texttt{x}/\texttt{y} keys to 1.6ex.\\
+% timing/intext & \S & Used for \cs{texttiming}. Depends on \texttt{timing}.\\
+% timing/picture & \S & Usable for own \texttt{tikzpictures} to set timing settings.\\
+% timing/inline node & \S & Used for nodes created by the \texttt{N} character. Defaults to \texttt{coordinate}.\\
+% timing/every char & \S & Used in the \cs{draw} TikZ command for every drawn timing character.\\
+% timing/every bg & \S & Used for every background path of characters like \texttt{D}.\\
+% timing/text format=\meta{code} & \s & Sets formatting code for the text of characters like \texttt{D}. The code is placed directly for the text wrapped in braces, so that the code can be a macro awaiting the text as an argument. By default the code is empty.\\
+% \midrule
+% timing/initchar=\meta{char} & \s & Sets initial character. Only valid as first optional argument in table rows or in \cs{texttiming}.\\
+% \midrule
+% timing/metachar=\marg{C}\oarg{\#arg}\marg{G}& \s& Sets meta-character \meta{C} to character group \meta{G}.\\
+% \midrule
+% timing/before & \C & Code executed direct before the timing TikZ code inside the internal
+% \cs{tikzpicture}. \\
+% timing/after & \C & Code executed direct after the timing TikZ code inside the internal
+% \cs{tikzpicture}.\\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Scaling}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/unit=\meta{length expression} & \s & Sets both the x- and y-unitlength. \\
+% timing/xunit=\meta{length expression} & \s & Sets the x-unitlength (\texttt{\textbackslash xunit}) for the timing diagrams. \\
+% timing/yunit=\meta{length expression} & \s & Sets the y-unitlength (\texttt{\textbackslash yunit}) for the timing diagrams. \\
+% timing/font=\meta{code} & \s & Can be used to set font macros. Needs to be used instead of the normal TikZ \texttt{font} as it resets \texttt{unit}
+% etc.\ if it is font sized dependent.\\
+% timing/wscale=\meta{math expression} & \s & Sets the width-scale \texttt{\textbackslash wscale} by calling \texttt{\textbackslash tikztimingsetwscale}. See section~\ref{sec:maccharstr} for further details. \\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Slopes}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/slope=\meta{0.0\en1.0} & \s & Sets slope for logic transitions. \newline This also sets \texttt{dslope=2*slope}, \texttt{zslope=slope/2}.\\
+% timing/lslope=\meta{0.0\en1.0} & \s & Sets slope for logic transitions only. Default: 0.1\\
+% timing/dslope=\meta{0.0\en1.0} & \s & Sets slope for data transitions. Default: 0.2\\
+% timing/zslope=\meta{0.0\en1.0} & \s & Sets slope for Z transitions. Default: 0.05\\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Texttiming}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/outer sep=\meta{dim} & \s & Sets outer separation around \cs{texttiming} macros. \\
+% timing/outer xsep=\meta{dim} & \s & See above. Only X-Coordinate. (Default:~0pt) \\
+% timing/outer ysep=\meta{dim} & \s & See above. Only Y-Coordinate. (Default:~0pt) \\
+% \midrule
+% timing/before text & \C & Code executed direct before the timing TikZ code inside the internal
+% \cs{tikzpicture} for \cs{texttiming}. This code is executed just after the \texttt{timing/before} code. Defaults
+% to \cs{texttimingbefore}.\\
+% timing/after text & \C & Code executed direct after the timing TikZ code inside the internal
+% \cs{tikzpicture}. This code is executed just before the \texttt{timing/after} code. Defaults to
+% \cs{texttimingafter}.\\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Grid}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/grid & \S & Style used for drawing grids. Depends on \texttt{help lines} and \texttt{timing}. \\
+% timing/draw grid & \C & Enables background grids for \cs{timing} macros. \\
+% timing/no grid & \C & Disabled background grids for \cs{timing} macros. \\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Table}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/name & \S & Used for the signal name column in \env{tikztimingtable}.\\
+% timing/table & \S & Used for \env{tikztimingtable}. Depends on \texttt{timing}.\\
+% timing/table/grid & \S & Used for table grid. Depends on \texttt{timing/grid}.\\
+% timing/table/lines & \S & Used for \cs{horlines} and \cs{vertlines}. \\
+% timing/table/rules & \S & Used for \cs{tablerules} for top and bottom lines. \\
+% timing/table/midrules & \S & Used for \cs{tablerules} between table head and body. \\
+% timing/table/header & \S & Used for \cs{tableheader}. Defaults to \texttt{timing/name}.\\
+% timing/table/label header & \S & Used for label header in \cs{tableheader}. \\
+% timing/table/row header & \S & Used for timing row header in \cs{tableheader}. \\
+% \midrule
+% timing/rowdist=\meta{distance} & \s & Sets (baseline) distance between rows in a tikztimingtable. Default: 2 (=$2\times$signal height)\\
+% timing/coldist=\meta{distance} & \s & Sets distance between columns in a tikztimingtable. Default: 1 (=$1\times$period width)\\
+% \midrule
+% timing/before table & \C & Code placed before the tables TikZ code inside the internal
+% \texttt{tikzpicture}.\\
+% timing/after table & \C & Code placed after the tables TikZ code at the end of the
+% internal \texttt{tikzpicture}.\\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Character Styles}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/\meta{lowercase char} & \s & Style for character \meta{char}. Not used for `\texttt{H}' and `\texttt{L}'. \\
+% timing/\meta{lc char}/background & \s & Background style for characters `\texttt{D}' and `\texttt{U}'. \\
+% timing/\meta{lc char}/text & \s & Text style for character \meta{char}. Only defined for `\texttt{D}'. \\
+% \midrule
+% timing/text format=\meta{macros} & \s & Define macros which are placed before the text of `\texttt{D\{text\}}'. The text is enclosed in braces to
+% allow the last macro to take it as an argument. A \cs{strut} is a good choice to ensure a common baseline.\\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Debug}
+% Some debug settings for users (first group) and the package developer (last group).
+%
+% \medskip\noindent
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/debug/nodes & \C & Enables marking of named inline nodes. \\
+% timing/debug/node & \S & Format style for inline node marker label, which itself is a TikZ node. \\
+% timing/debug/markcmd=\meta{code} & \s & TikZ drawing code to draw marker (except label). The code can access the node name as \cs{N}. \\
+% timing/debug/scope & \S & Format for scope of node markers. \\
+% \midrule
+% timing/debug/level=\meta{integer} & \s & Sets debug output level. This is only important for developers. \\
+% \bottomrule
+% \end{tabularx}
+%
+% \section*{Other}
+% \begin{tabularx}{\textwidth}{>{\ttfamily}ll>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Key & Type & Description \\
+% \midrule
+% timing/expand count=\meta{integer} & \s & Sets the maximum expand count for the underlying
+% \texttt{tikzpicture}. TikZ only expands the content this number of times. The TikZ default value
+% of 100 is to small for timing diagrams and is changed to 1000 by default. This should be raised
+% (only) if TikZ throws an to-many-expands error.\\
+% \bottomrule
+% \end{tabularx}
+%
+% \endgroup
+%
+% \clearpage
+% \chapter{Libraries for Further Characters}
+% All default timing characters described in Table~\ref{tab:chars} are always
+% made available by this package. Further, less-common characters are provided
+% by libraries which are loaded with the macro
+% \cs{usetikztiminglibrary}\marg{library}. This is done to hold the memory
+% usage of this package small and reduce the risk of collisions with
+% user-defined (meta-)characters.
+% The full syntax for the above macro is
+% \cs{usetikztiminglibrary}\oarg{options}\marg{library,\dots}\oarg{date}, like
+% the one for \cs{usepackage}.
+% The date is used as a version number like for packages and is identical to the date
+% of the |tikztiming| package.
+%
+% \clearpage
+% \library{arrows}{Arrows}
+% The library "arrows" enables two characters "A" and "W" which draw
+% vertical up and down \textit{A}rro\!\textit{W}s. Such arrows are used in
+% timing diagrams to mark special polarized events, like clock edges of another
+% signal.
+%
+% The width provided with these character is added as whitespace after the
+% ``zero-width'' arrow: "A2AA" results in `\texttiming{A2AA}'. This space
+% can be avoided by specifying the width to zero: "0A". Like the "C" and
+% "T" characters the subsequent arrow characters are not combined into one.
+%
+% The arrow tips can be changed using the TikZ styles for this characters. See
+% section~\ref{sec:styles} for more information. The "A" and "W" character should
+% only be used which each each other, but not together with any other characters
+% except with "S" (space).
+%
+% \begin{table}[H]
+% \centering
+% \caption{Examples for Arrow Characters.}\label{tab:arrows}
+% \begin{tikztimingexampletable}
+% 0A \\
+% AAA \\
+% 3A \\
+% 3{A} \\
+% 3A 3A \\
+% 3a 3a \\
+% AW AW \\
+% 3{AW} \\
+% 3{aw} \\
+% 2S 2A 3W A W \\
+% \extracode
+% \tablegrid*
+% \end{tikztimingexampletable}
+% \end{table}
+%
+% \clearpage
+% \library{either}{Either High or Low}
+% The library "either" enables the "E" character which stands for
+% `\textit{either high or low}'. This character is designed to be used with the
+% "H" and "L" characters to display a uncertainty of a transition.
+% Sometimes a, e.g.\ low signal can go either to high or stay at low for a
+% certain time before it definitely goes to high. In this case both (or more)
+% possible transitions can be drawn using this character.
+% Like the "C" and "T" characters subsequent "E" characters are not
+% combined into one.
+%
+% The drawing style can be changed using the |timing/e| and
+% |timing/e/background| TikZ style.
+%
+% \begin{table}[H]
+% \centering
+% \caption{Examples for the `\texttt{E}' Character.}\label{tab:either}
+% \begin{tikztimingexampletable}[timing/e/background/.style={fill=black!20}]
+% L E H \\
+% L D H \\
+% H E L \\
+% H D L \\
+% L E E H \\
+% L 3{.25E} H \\
+% H E E L \\
+% L EEE HH EEE L \\
+% l e e h \\
+% h e e l \\
+% H 2E L \\
+% H 2{E} L \\
+% H 5{e} L \\
+% H E E H \\
+% L E E L \\
+% \end{tikztimingexampletable}
+% \par\medskip
+% \makebox[\textwidth][c]{%
+% \begin{tabular}{lc}
+% \toprule
+% Settings (\texttt{timing/e/.cd}) & Resulting Diagram (\texttt{LL EE HH}) \\
+% \midrule
+% \texttt{.style=\{dotted,gray\}} & \texttiming[timing/e/.style={dotted,gray}]{LL EE HH} \\
+% \texttt{background/.style=\{fill=gray\}} & \texttiming[timing/e/background/.style={fill=gray}]{LL EE HH} \\
+% \bottomrule
+% \end{tabular}
+% }%
+% \end{table}
+%
+% \clearpage
+% \library{overlays}{Overlays}
+% The library "overlays" enables the "O" character which allows the
+% overlaying of timing characters, i.e.~different groups of timing characters
+% are drawn on top of each other. This is not to be confused with `dynamic' overlay
+% provided by the presentation class |beamer|. The |tikz-timing| library \lib{beamer} provides
+% some support for such overlays.
+%
+% The "O" character awaits a set of character
+% enclosed by braces which are drawn as normal. The position before the "O"
+% character is then restored and the following characters are drawn over them.
+% Older versions of this character awaited a second set of characters in braces
+% but this braces are now optional. The exact syntax is:\\[\smallskipamount]
+% \hspace*{2em} \meta{chars before} |O|\marg{background chars} \marg{foreground
+% chars} \meta{chars after}\\[\smallskipamount]
+% or, without second set of braces, but equal:\\[\smallskipamount]
+% \hspace*{2em} \meta{chars before} |O|\marg{background chars} \meta{foreground
+% chars, \dots}\\[\smallskipamount]
+%
+% It is the responsibility of the user to make sure that the lines drawn by the
+% first set reconnect to the main lines or do something else useful. The
+% modifier ";" can be used to restart the drawn line, e.g.\ to change to a
+% different color. This is not done automatically to give the user the freedom
+% if and where this should happen. It is recommended to start and end the set
+% with characters identical with the main line to avoid ugly connection points.
+%
+% Please note that the width of the first argument is ignored and does not count to the
+% total width of the diagram line. The characters following the overlay should therefore
+% be as wide or wider as the one of the overlay, otherwise the bounding box and background grid
+% will be incorrect.
+%
+% Overlays can be cascaded\NewIn{v0.7}, \ie an overlay can be included in the first argument
+% of another overlay.
+%
+% \begin{table}[H]
+% \centering
+% \caption{Examples for the `\texttt{O}' Overlay Character.}\label{tab:overlays}
+% \ifprintversion
+% \begin{tikztimingexampletable}[timing/draw grid]
+% LLL O{HH}{LL} HHH \\
+% LLL O{HHH}{LL} HHH \\
+% LLL O{;[gray]HH.1H;}{LLH} HH \\
+% LL O{L;[gray]HH.1H;}{LLLH} HH \\
+% DD{} O{zd}{D}d 2D \\
+% ZZ O{Z D Z}{Z 1.1M .9Z} ZZ \\
+% ZZ O{d Z}O{DZ}{dD} ZZ \\
+% ZZ O{dDZ}O{DZ}{dZ} ZZ \\
+% ZZ 3D O{dDZ}{DZ} ZZ \\
+% ZZ 3D O{dDZ}O{DZ}{dZ} ZZ \\
+% ZZ 3D O{3D} DZZ \\
+% Z O{DD} ZDDD O{DDZZ} DZ 2S \\
+% Z O{6D Z}{Z 4D Z} Z \\
+% Z O{8D Z}O{Z 6D Z}{2Z 4D 2Z} Z \\
+% \end{tikztimingexampletable}
+% \else
+% \begin{tikztimingexampletable}[timing/draw grid]
+% LLL O{HH}{LL} HHH \\
+% LLL O{HHH}{LL} HHH \\
+% LLL O{;[gray]HH.1H;}{LLH} HH \\
+% LL O{L;[gray]HH.1H;}{LLLH} HH \\
+% DD{} O{zd}{D}d 2D \\
+% ZZ O{Z D Z}{Z 1.1M .9Z} ZZ \\
+% ZZ O{d Z}O{DZ}{dD} ZZ \\
+% \end{tikztimingexampletable}
+% \begin{tikztimingexampletable}[timing/draw grid]
+% ZZ O{dDZ}O{DZ}{dZ} ZZ \\
+% ZZ 3D O{dDZ}{DZ} ZZ \\
+% ZZ 3D O{dDZ}O{DZ}{dZ} ZZ \\
+% ZZ 3D O{3D} DZZ \\
+% Z O{DD} ZDDD O{DDZZ} DZ 2S \\
+% Z O{6D Z}{Z 4D Z} Z \\
+% Z O{8D Z}O{Z 6D Z}{2Z 4D 2Z} Z \\
+% \end{tikztimingexampletable}
+% \fi
+% \end{table}
+%
+% \clearpage
+% \library{clockarrows}{Clock Arrows}
+% The library "clockarrows"\NewIn{v0.7} is changing the "C" clock character to contain
+% arrows which mark the rising and/or falling clock edge. By default the rising
+% edges are marked. To simplify the implementation only the transition from a
+% "C" to another "C" character contains the arrows but not transitions from
+% or to different characters, like "HCH" or "LCL".
+%
+% The arrows can be controlled using the TikZ styles shown in
+% Table~\ref{tab:clockarrowstyles} below. This styles can also be used as
+% library options. The key ``directory'' "timing/c" must be dropped for
+% options, e.g.\\\hspace*{2em}
+% \cs{usetikztiminglibrary}|[rising arrows]{clockarrows}|.
+
+% \begin{table}[H]
+% \centering
+% \caption{TikZ Styles for Clock Arrows.}
+% \label{tab:clockarrowstyles}
+% \makebox[\textwidth][c]{%
+% \begin{tabularx}{1\textwidth}{>{\ttfamily}l>{\raggedright\arraybackslash}X}
+% \toprule
+% \normalfont TikZ Style & Description \\
+% \midrule
+% timing/c/rising arrows & Mark (only) rising edges with arrows.\\
+% timing/c/falling arrows & Mark (only) falling edges with arrows.\\
+% timing/c/dual arrows & Mark both rising and falling edges with arrows.\\
+% timing/c/no arrows & Do not mark any edges with arrows. (Default)\\
+% \midrule
+% timing/c/arrow & Style for arrows. Can be modified to change arrow tip etc. (Default: \{\})\\
+% timing/c/arrow pos=\meta{0.\!-\!\!-1.} & Position of arrows, i.e.\ its tip, on the edge.
+% May needs adjustment if different arrow tip shapes are selected. (Default: 0.95)\\
+% timing/c/arrow tip=\meta{name} & Tip shape of arrows. See the PGF manual for the list of arrow tips. (Default: `\texttt{to}')\\
+% \bottomrule
+% \end{tabularx}}
+% \end{table}
+%
+% \begin{table}[H]
+% \caption{Examples for the Clock Arrows.}\label{tab:clockarrows}
+% \tikzset{timing/c/dual arrows}%
+% \centering
+% \ifprintversion
+% \begin{tabular}{lc}
+% \toprule
+% Settings (\texttt{timing/c/.cd}) & Resulting Diagram (\texttt{11\{C\}}) \\
+% \midrule
+% \texttt{rising arrows} & \texttiming[timing/c/rising arrows]{10{C}} \\
+% \texttt{falling arrows} & \texttiming[timing/c/falling arrows]{10{C}} \\
+% \texttt{no arrows} & \texttiming[timing/c/no arrows]{10{C}} \\
+% \texttt{dual arrows} & \texttiming[timing/c/dual arrows]{10{C}} \\
+% \midrule
+% \texttt{arrow pos=.5} & \texttiming[timing/c/arrow pos=.5]{10{C}} \\
+% \texttt{arrow tip=latex} & \texttiming[timing/c/arrow tip=latex]{10{C}} \\
+% \texttt{arrow tip=stealth} & \texttiming[timing/c/arrow tip=stealth]{10{C}} \\
+% \bottomrule
+% \end{tabular}
+% \else
+% \begin{minipage}[t]{.49\textwidth}
+% \vspace{0pt}\centering
+% \begin{tabular}{lc}
+% \toprule
+% Settings (\texttt{timing/c/.cd}) & Resulting Diagram (\texttt{11\{C\}}) \\
+% \midrule
+% \texttt{rising arrows} & \texttiming[timing/c/rising arrows]{10{C}} \\
+% \texttt{falling arrows} & \texttiming[timing/c/falling arrows]{10{C}} \\
+% \texttt{no arrows} & \texttiming[timing/c/no arrows]{10{C}} \\
+% \texttt{dual arrows} & \texttiming[timing/c/dual arrows]{10{C}} \\
+% \bottomrule
+% \end{tabular}
+% \end{minipage}
+% \hfill
+% \begin{minipage}[t]{.49\textwidth}
+% \vspace{0pt}\centering
+% \begin{tabular}{lc}
+% \toprule
+% Settings (\texttt{timing/c/.cd}) & Resulting Diagram (\texttt{11\{C\}}) \\
+% \midrule
+% \texttt{arrow pos=.7} & \texttiming[timing/c/arrow pos=.7]{10{C}} \\
+% \texttt{arrow pos=.4} & \texttiming[timing/c/arrow pos=.4]{10{C}} \\
+% \texttt{arrow tip=latex} & \texttiming[timing/c/arrow tip=latex]{10{C}} \\
+% \texttt{arrow tip=stealth} & \texttiming[timing/c/arrow tip=stealth]{10{C}} \\
+% \bottomrule
+% \end{tabular}
+% \fi
+% \end{minipage}
+% \end{table}
+%
+% \clearpage
+% \library{columntype}{Column Type}
+% The library "columntype"\NewIn{v0.7} uses the \pkg{array} package to define a new
+% |tabular| column type for timing characters. The tabular column can then hold
+% timing characters like the \env{tikztimingtable}. An initial option block
+% "[...]" is taken as initial character or diagram line wide settings. The
+% main difference between these two table types is that \env{tikztimingtable}
+% creates a big common |tikzpicture| with one coordinate system with potential
+% extra drawing code and the column type creates single pictures for each
+% diagram line without common coordinate system.
+%
+% By default the letter "T" and left alignment are used for the timing column
+% type. The TikZ style |timing/columntype=|\marg{letter}\marg{alignment} can be
+% used to select different column letters and alignments. The \meta{alignment}
+% represents here the \emph{real} column letter like "l", "c" or "r".
+% Additional column code can be added using the `|>|\marg{code}' and
+% `|<|\marg{code}' argument of the \pkg{array} package.
+% \iffalse
+% \noindent\textbf{Examples:}\\
+% \hspace*{1em}|\tikzset{timing/columntype={T}{r}}| \hspace{2em} Change to right
+% alignment.\\
+% \hspace*{1em}|\tikzset{timing/columntype={I}{>{code}c<{code}}| \hspace{2em}
+% Defines letter "I" to create centered timing diagrams with some code before
+% and after it.
+% \fi
+%
+% More complex column types (\eg one holding |@{..}| or |!{..}| arguments,
+% multiple columns, etc.) must be defined manually using \pkg{array}'s
+% \cs{newcolumntype} macro. The default definition is equal
+% to\\[\smallskipamount]
+% \hspace*{2em}|\newcolumntype{T}{>{\celltiming}l<{\endcelltiming}}|.
+%
+% \smallskip
+% The default "T" definition can be suppressed by using either the library
+% option |notype| or a different |type| (equal to |timing/columntype|):
+% \\[\smallskipamount]
+% \hspace*{2em}|\usetikzlibrary[type={U}{l}]{columntype}|\\[\smallskipamount]
+%
+% \bigskip
+% \begin{figure}
+% \makeatletter
+% \let\tikztiming@embedexample\empty
+% \makeatother
+% \centering
+% \begin{examplecode}
+% \begin{tabular}{lcT}
+% \toprule
+% Description & Num & \multicolumn{1}{l}{Signal} \\
+% \midrule
+% Example & A & HLHZLHL \\
+% Example & B & [][green] HLHZLHL \\
+% Example & C & [green] HLHZLHL \\
+% \bottomrule
+% \end{tabular}
+% \end{examplecode}
+% \caption{Example for use of Timing Column Type.}\label{exa:columntype}
+% \end{figure}
+%
+% \clearpage
+% \library{nicetabs}{Nice Timing Tables}
+% The library "nicetabs"\NewIn{v0.7} uses the settings of the \pkg{array} and
+% \pkg{booktabs} packages to improve the layout of \env{tikztimingtables}. The
+% resulting table matches a \env{tabular}|{rT}| table which uses the above
+% packages and the |columntype| library. The table macros \cs{tabcolsep},
+% \cs{arraystretch} and \cs{extrarowheight} are obeyed.
+%
+% The original table layout is designed to produce integer coordinates between
+% the rows to simplify the drawing of extra drawings (see \cs{extracode}). The
+% improved layout will cause non-integer coordinates, but in-line nodes and the
+% \cs{rowdist} and \cs{coldist} macros can be used to draw extra material
+% relatively to the rows.
+%
+% The TikZ styles "timing/nice tabs" (default) and "timing/no nice tabs" can
+% be used to activate and deactivate the layout, \eg for each table. Both
+% settings can be given as a library option, but without the "timing/" path.
+%
+% \bigskip
+% \begin{table}[H]
+% \caption{Timing tables using `nice' (left) and normal (right) Layout. For
+% comparison a \texttt{\{tabular\}\{rT\}} table is placed in grey below the
+% left table.}^^A
+% \hbox{}\hfill
+% \begin{tikzpicture}
+% \node [gray] {\sffamily\ignorespaces
+% \begin{tabular}{rT}
+% \toprule
+% Name & \multicolumn{1}{l}{Timing} \\
+% \midrule
+% Example & HLHLLHHH \\
+% Example & HLHLLHHH \\
+% Example & HLHLLHHH \\
+% \bottomrule
+% \end{tabular}^^A
+% };
+% \node {\ignorespaces
+% \begin{tikztimingtable}[timing/nice tabs]
+% Example & HLHLLHHH \\
+% Example & HLHLLHHH \\
+% Example & HLHLLHHH \\
+% \extracode
+% \tableheader{Name}{Timing}
+% \tablerules
+% \end{tikztimingtable}^^A
+% };
+% \end{tikzpicture}
+% \hfill
+% \begin{tikztimingtable}[timing/no nice tabs]
+% Example & HLHLLHHH \\
+% Example & HLHLLHHH \\
+% Example & HLHLLHHH \\
+% \extracode
+% \tableheader{Name}{Timing}
+% \tablerules
+% \end{tikztimingtable}
+% \hfill\hbox{}^^A
+% \end{table}
+%
+% \clearpage
+% \library{counters}{Counter Character}
+% The library "counters"\NewIn{v0.7}\ExtIn{v0.7a} allows the easy definition
+% of meta-characters which
+% implement up-counters. These characters show the counter value using the
+% "D{}" character and increment it by one every time they are used. A second
+% character can be defined to (re-)set the counter to a specific value. The
+% counter values can be decimal (base-10, default), hexadecimal (base-16) or any
+% other base from 2 to 36. By default the lower case version of the counter
+% character is defined to produce the same output only with half the width.
+%
+% Counter characters are defined using the TikZ key
+% `\texttt{timing/counter/new=}\linebreak[3]\ignorespaces
+% \texttt{\{char=\meta{char},\meta{settings}\}}' which can also be written as
+% "timing/new counter". The \meta{settings} are TikZ keys themselves and are
+% shown by Table~\ref{tab:countersettings}. One or more "new" keys (path
+% "timing/counter" removed) can be given as library options.
+% The counter values are global like normal \LaTeX\ counters. They should be reset
+% in every timing diagram line before they are used.
+%
+% \subsubsection*{Counter Style}
+% The styles `\texttt{timing/counter/\meta{char}}' and `\texttt{timing/counter/\meta{char}/text}'
+% (both initially empty) are used to format the graphic and text style of this counter, respectively.
+% Because the "D{}" character is used internally the above styles need to change the corresponding
+% "D" styles. This changes are only local and do not affect further `real' "D" characters.
+%
+% The settings "fg style", "bg style" and "text style" can be used to quickly define the
+% foreground (\ie line), background and text style of the counter. While the "text style" setting
+% simple sets the `\texttt{timing/counter/\meta{char}/text}' style, the other two are a shortcut for
+% \\*[\smallskipamount]
+% | \tikzset{timing/counter/|\meta{char}|/.style={%|\\
+% | timing/d/.style=|\marg{fg style}|,|\\
+% | timing/d/background/.style=|\marg{bg style}|,|\\
+% | }}|\\
+% \par\medskip
+%
+% \subsubsection*{Additional Macros}
+% \DescribeMacro\tikztimingcounter{<char>}
+% \DescribeMacro\tikztimingsetcounter{<char>}{<pgfmath expression>}
+% The value of counter \meta{char} can be read or set using this macros.
+%
+% \begin{table}
+% \caption{Settings for Counter Meta-Characters}
+% \label{tab:countersettings}
+% \makebox[\textwidth][c]{%
+% \begin{tabularx}{1\textwidth}{>{\ttfamily}lX}
+% \toprule
+% \multicolumn{1}{l}{Key name} & Description \\
+% \midrule
+% char=\meta{char} & Defines the given \meta{char} to be a counter
+% meta-character. If it is a upper case character the lower case character
+% will produce the same output but with the half width, as long this is not
+% overwritten with the \texttt{half with char} key. \\
+% half width char=\meta{char} & Defines the given \meta{char} to be the half
+% width version of the counter value. By default this is the lower case
+% version of the counter character given with \texttt{char}. An empty value
+% for \meta{char} deactivates the definition of a half width character.\\
+% reset char=\meta{char}
+% & Defines the given \meta{char} to (re-)set the counter value to the `width'
+% of the character, \ie the number preceding it. The lower case version of
+% the reset \meta{char} is not defined.\\
+% reset type=\small\meta{width\Pipe arg\Pipe both\Pipe Both}
+% & Defines the type of the reset character, \ie how the reset value is obtained.
+% {\begin{tabular}{>{\ttfamily}ll}
+% width & Width is reset value: `\meta{value}\meta{char}', \eg `\texttt{0R}'.
+% Value can not be negative.\\
+% arg & Reset value is provided as argument: `\meta{char}\marg{value}', \eg
+% `\texttt{R\{-1\}}'.\\
+% both & Uppercase \meta{char} is \texttt{width}-type, lowercase \meta{char}
+% is \texttt{arg}-type reset char.\\
+% Both & Lowercase \meta{char} is \texttt{width}-type, uppercase \meta{char}
+% is \texttt{arg}-type reset char.\\
+% \end{tabular}} \\
+% base=\meta{Num 2-36} & Defines the numeric base of the counter. If not used the
+% base 10 is used.\\
+% \midrule
+% increment=\small\meta{pgfmath expression} &
+% Sets the increment which is added every time the counter
+% character is used. This can be a formula which result is truncated
+% to a integer. The current counter value can be referenced as \cs{N}.
+% The increment can be negative which causes
+% the counter to count down. Default: 1\\
+% max value=\small\meta{pgfmath expression} & Sets the maximum counter value. Default: \emph{not set}\\
+% min value=\small\meta{pgfmath expression} & Sets the minimum counter value. Default: \emph{not set}\\
+% wraps=\meta{true\Pipe false} &
+% If set to \texttt{true} the counter wraps around, \ie it counts to the
+% minimum value when counting over the maximum value or the other
+% way around if \texttt{increment} is negative.
+% Initial value: \texttt{false}. Default value: \texttt{true}\\
+% \midrule
+% bg style=\meta{TikZ style(s)} & Sets the background style of the counter.\\
+% fg style=\meta{TikZ style(s)} & Sets the foreground (line etc.) style of the counter.\\
+% text style=\meta{TikZ style(s)} & Sets the text style of the counter.\\
+% text format=\meta{\TeX code} & Sets the format code of the counter value. This should be a macro which receives
+% the counter value as first argument.\\
+% \bottomrule
+% \end{tabularx}
+% }%
+% \end{table}
+%
+% \subsubsection*{Examples:}
+% \noindent
+% Counter character "Q" with base 16 (hexadecimal). "R" resets the
+% counter. The counter value should be in blue text typer font.\\*\noindent
+% |\tikzset{timing/new counter={char=Q,base=16,reset char=R}}|\\*\noindent
+% |\tikzset{timing/counter/Q/text/.style={font=\ttfamily,blue}}|\\*\noindent
+% |\texttiming{ 3Q 3{Q} R 12{Q} 2R Q qq 0R 3{Q} }|\\*\noindent
+% gives: {%
+% \tikzset{timing/counter/new={char=Q,base=16,reset char=R}}%
+% \tikzset{timing/counter/Q/text/.style={font=\ttfamily,blue}}%
+% \texttiming{ 3Q 3{Q} R 12{Q} 2R Q qq 0R 3{Q} }%
+% }%
+%
+% \par\bigskip
+% \noindent
+% \begingroup
+% \lstset{basicstyle=\ttfamily\scriptsize}
+% \begin{examplecode}
+% \scalebox{2}{%
+% \begin{tikztimingtable}
+% Dec & [timing/counter/new={char=Q,max value=15, wraps,text style={font=\scriptsize}}] 33{Q}d\\
+% Bin & [timing/counter/new={char=Q,max value=15,base=2, digits=4,wraps,text style={font=\tiny,scale=.8}}] 33{Q}d\\
+% Oct & [timing/counter/new={char=Q,max value=15,base=8, digits=3,wraps,text style={font=\tiny}}] 33{Q}d\\
+% Hex & [timing/counter/new={char=Q,max value=15,base=16, wraps,text style={font=\scriptsize}}] 33{Q}d\\
+% \extracode
+% \begin{background}[shift={(0.1,0)},help lines]
+% \vertlines{}
+% \end{background}
+% \end{tikztimingtable}
+% }%
+% \end{examplecode}
+% \endgroup
+%
+% \clearpage
+% \library{advnodes}{Advanced Nodes}
+% The library "advnodes"\NewIn{v0.7} changes the in-line nodes, \ie the "N" character, to provide multiple
+% transition dependent and independent node anchors shown in Table~\ref{tab:advanchor}.
+%
+% Most transitions provide the three logic level anchors "low", "mid" and "high" which lie
+% on the drawn timing line. Transitions of `double line' characters like "D" can have
+% two low and/or high level anchors which are called "low2" and "high2".
+%
+% To align marker lines over multiple rows inside a \env{tikztimingtable} a set of transition
+% independent node anchors are provided: "LOW", "MID", "HIGH". This anchors lie all at the begin of the
+% transition at the appropriate logic levels.
+% With the normal coordinate-like in-line nodes the vertical node (center) position has to be taken into
+% account, while this advanced anchors do this automatically.
+%
+% Often marker lines should start and end with a little vertical offset from the timing diagram to be more distinguishable.
+% For this the two anchors "TOP" and "BOTTOM" exist. They lie above and below of "HIGH" and "LOW", respectively.
+% The vertical distance can be set using `|timing/nodes/offset=|\meta{dim.~or number}'.
+%
+% \textbf{Please note} that the node \emph{center} of advanced nodes will be different for some transitions.
+% The "center" anchor (used by default if no node anchor is provided) will be placed at the logical center of the
+% transition, \ie mostly in the middle of it. In order not to break existing diagrams which use nodes as references
+% to draw additional material an TikZ styles is provided to select between the old and new node centers. This styles
+% can be used globally or locally as required. The two explicit anchors "new center" and "old center" are also
+% provided. For existing documents with diagrams using normal nodes it is recommended
+% to switch to simple nodes or to the old node centers globally or select such a style for each old diagram.
+%
+% The following TikZ settings can be used with the library. The node style settings affect all new nodes after them.
+% The center settings affect all following \emph{references} (\eg "(NodeName)" or "(NodeName.center)") of advanced nodes.
+% The settings can be used as library options with the "timing/nodes/" part removed.
+%
+% \vfill\noindent
+% \begin{tabularx}{\textwidth}{>{\ttfamily}lX}
+% \toprule
+% \normalfont
+% TikZ Setting & Description \\
+% \midrule
+% timing/nodes/advanced & Selects advanced in-line nodes. (library default) \\
+% timing/nodes/simple & Selects simple coordinate-style in-line nodes. (package default) \\
+% \midrule
+% timing/nodes/new center & Center of in-line nodes is in the new position. (default for \texttt{advanced}) \\
+% timing/nodes/old center & Center of in-line nodes is in the old position. (always on for \texttt{simple}) \\
+% \midrule
+% timing/nodes/offset & Sets offset for \texttt{TOP} and \texttt{BOTTOM} anchors.
+% Can be a dimension with unit or a factor to the current \texttt{y} unit. (default: 0.25) \\
+% \bottomrule
+% \end{tabularx}
+%
+% \subsection*{Examples:}
+% "\usetikztiminglibrary[simple]{advnodes}"\ \ loads the library with nodes default to the old "simple" style.\\\noindent
+% "\usetikztiminglibrary[old center]{advnodes}"\ \ \ loads the library with advanced nodes with have the center at the same
+% place as the normal simple nodes. This is a good ``compatibility mode'' for existing pre-v0.7 diagrams.\\\noindent
+% "\begin{tikztimingtable}[timing/nodes/simple]"\ \ starts a timing table which uses simple nodes. \\\noindent
+% "\begin{tikztimingtable}[timing/nodes/.cd,advanced,old center]"\\\noindent starts a timing table which uses advanced nodes with old node centers.
+%
+%
+% \begin{table}
+% \caption{Transition Dependent Anchor Points of Advanced Nodes}^^A
+% \label{tab:advanchor}^^A
+% \makeatletter
+% \let\mid\relax
+%^^A
+% \tikzset{timing/draw grid}^^A
+% \tikzset{timing/.cd,
+% lslope=.5,
+% dslope=.5,
+% zslope=.5,
+% }^^A
+%^^A
+% \tikzset{^^A
+% marker/.style={opacity=.8,fill opacity=.8},
+% low/.style={marker,draw=red},
+% mid/.style={marker,draw=yellow},
+% high/.style={marker,draw=green},
+% low2/.style={marker,draw=red!50!black},
+% high2/.style={marker,draw=green!50!black},
+% LOW/.style={marker,CAPITAL,draw=red},
+% MID/.style={marker,CAPITAL,draw=yellow},
+% HIGH/.style={marker,CAPITAL,draw=green},
+% CAPITAL/.style={marker,mark=x,mark size=2\pgflinewidth},
+% origin/.style={marker,mark=x,draw=gray},
+% center/.style={marker,mark=+,draw=black},
+% old center/.style={marker,mark=+,mark size=2\pgflinewidth,draw=blue},
+% new center/.style={marker,mark size=\pgflinewidth,mark=*,fill=blue,draw=blue},
+% }^^A
+%^^A
+% \newcommand\namark[2][]{^^A
+% \draw[mark=o,mark size=3\pgflinewidth,#1] plot coordinates {(#2)}
+% }^^A
+%^^A
+% \def\NodeAnchors#1#2{^^A
+% \Huge
+% {\raisebox{-.5ex}{\scalebox{1}{^^A
+% \begin{tikzpicture}[timing/picture,line width=.5\pgflinewidth]
+% \let\pgf@sh@ma@A\@undefined
+% \timing [name=T] at (0,0) {#1 N(A) #2};
+% \useasboundingbox (T.south west) rectangle (T.north east);
+% ^^A
+% \pgf@sh@ma@A
+% \anchorpoints
+% \foreach \a in {LOW,MID,HIGH,old center,new center} {^^A
+% \namark[gray,\a]{A.\a};^^A
+% }^^A
+% \foreach \a in {low,mid,high,low2,high2} {^^A
+% \@ifundefined{\a}{}^^A
+% {\namark[semithick,\a]{A.\a};}^^A
+% }^^A
+% \namark[old center,blue]{A.old center};^^A
+% \end{tikzpicture}^^A
+% }}}^^A
+% \Huge\strut
+% }^^A
+%^^A
+% \def\bchars{,L,H,X,D,E}^^A
+% \def\achars{,L,H,X,D,D{A},E,0LE,0HE}^^A
+%^^A
+% \def\DA{D{A}}^^A
+% \def\tablecontent{^^A
+% \begin{tabular}{lrrrrrrrrrrrrrrrrrr}^^A
+% \toprule
+% \tikzpicture
+% \useasboundingbox (-1ex,-.5ex) rectangle (1ex,.5ex);
+% \node {^^A
+% \scalebox{0.4}^^A
+% {\rotatebox{-45}{$\frac{\mbox{\rotatebox{45}{to}}}^^A
+% {\mbox{\rotatebox{45}{from}}}$}}^^A
+% };^^A
+% \endtikzpicture
+% }
+%^^A
+% \def\atc#1{^^A
+% \begingroup
+% \edef\@tempa{#1}^^A
+% \expandafter\g@addto@macro\expandafter\tablecontent
+% \expandafter{\@tempa}^^A
+% \endgroup
+% }^^A
+%^^A
+% \foreach \b in \bchars {^^A
+% \atc{& \noexpand\multicolumn{1}{c}{\b}}^^A
+% }^^A
+%^^A
+% \atc{\noexpand\\ \noexpand\midrule}^^A
+%^^A
+% \foreach \a in \achars {^^A
+% \ifx\a\DA
+% \atc{D\noexpand\{A\noexpand\}}^^A
+% \else
+% \atc{\a}^^A
+% \fi
+% \foreach \b in \bchars {^^A
+% \atc{& \noexpand\NodeAnchors{\a}{\b}}^^A
+% ^^A \hbox to 5em{\llap{\a\b:} \NodeAnchors{\a}{\b}}^^A
+% }^^A
+% \atc{\noexpand\\}^^A
+% }^^A
+%^^A
+% \atc{^^A
+% \noexpand\bottomrule
+% \noexpand\end{tabular}^^A
+% }^^A
+%^^A
+% \sffamily\centering
+% \tablecontent
+%^^A
+% \def\legend#1#2{^^A
+% \namark[#1]{[shift={(0,.125ex)}]#2}; \node [right] at (#2) {\normalsize #1\strut}
+% }^^A
+% \par
+% \Huge
+% \begin{tikzpicture}[timing/picture,line width=.5\pgflinewidth]
+% \node [left] at (-1,0) {\large Legend:};
+% \legend{low}{0,0};
+% \legend{mid}{3,0};
+% \legend{high}{6,0};
+% \legend{low2}{0,-.8};
+% \legend{high2}{6,-.8};
+% \legend{LOW}{0,-1.6};
+% \legend{MID}{3,-1.6};
+% \legend{HIGH}{6,-1.6};
+% \legend{new center}{0,-2.4};
+% \legend{old center}{6,-2.4};
+% \end{tikzpicture}^^A
+% \end{table}
+%
+% \clearpage
+% \library{ifsym}{Compatibility Macros for \texttt{ifsym} package}
+% The library "ifsym"\NewIn{v0.7} provides macros and timing styles to emulate the behaviour of the \pkg{ifsym} package
+% when loaded with the |electronic| option. The \pkg{ifsym} package was an early inspiration to this package
+% and this library allows the usage of |ifsym| style timing symbol macros and characters
+% (`|\textifsym|\marg{characters}' which uses `|\texttiming[timing/ifsym]|\marg{characters}')
+% which are described in Table~\ref{tab:ifsymmacros} and Table~\ref{tab:ifsym}, respectively.
+% This is useful if old |ifsym| timing diagrams should be reused. The |tikz-timing| replacements are a very close match
+% and do not need a special font to be installed. The graphic quality should be equal or better than the original.
+% The intermixing of |ifsym| and |tikz-timing| style characters in a \cs{textifsym} macro
+% (the one provided by this library, not the one from the \pkg{ifsym} package) is supported but it is not guaranteed to work
+% 100\% properly. Please note that the "M" character is defined to use "X" in black.
+%
+% The library can be loaded with one of the options "provide" (default), "new", "renew" or "off", respectively.
+% These select if the macros should be defined using \cs{providecommand}, \cs{newcommand}, \cs{renewcommand}
+% or not at all. This can be useful if the \pkg{ifsym} package is loaded beforehand.
+%
+%
+% \sbox{\sba}{%^^A
+% \begin{tabular}{lll}
+% \toprule
+% Macro & Symbol & Description (trivial) \\
+% \midrule
+% \cs{RaisingEdge} & \RaisingEdge & Raising Edge \\
+% \cs{FallingEdge} & \FallingEdge & Falling Edge \\
+% \cs{ShortPulseHigh} & \ShortPulseHigh & Short Pulse High \\
+% \cs{ShortPulseLow} & \ShortPulseLow & Short Pulse Low \\
+% \cs{PulseHigh} & \PulseHigh & Normal Pulse High \\
+% \cs{PulseLow} & \PulseLow & Normal Pulse Low \\
+% \cs{LongPulseHigh} & \LongPulseHigh & Long Pulse High \\
+% \cs{LongPulseLow} & \LongPulseLow & Long Pulse Low \\
+% \bottomrule
+% \end{tabular}%^^A
+% }%^^A
+% ^^A
+% \sbox{\sbb}{%^^A
+% \begin{tabular}{>{\ttfamily}lll}
+% \toprule
+% \normalfont
+% Character & Symbol & Description \\
+% \midrule
+% l, h & \textifsym{l}, \textifsym{h} & Short low or high level signal. \\
+% L, H & \textifsym{L}, \textifsym{H} & Long low or high level signal. \\
+% \pipe & \textifsym{|} & Transition/glitch between L/H or H/L levels. \\
+% m, d & \textifsym{m}, \textifsym{d} & Short middle or double level signal. \\
+% M, D & \textifsym{M}, \textifsym{D} & Long middle or double level signal. \\
+% <, << & \textifsym{<}, \textifsym{<<} & Short or long slope between middle and double level. \\
+% >, >> & \textifsym{>}, \textifsym{>>} & Short or long slope between double and middle level. \\
+% \bottomrule
+% \end{tabular}
+% }%^^A
+%
+% \ifprintversion
+%
+% \begin{table}
+% \centering
+% \caption[ifsym style Timing Symbol Macros]{\texttt{ifsym} style Timing Symbol Macros}
+% \label{tab:ifsymmacros}
+% \usebox{\sba}%^^A
+% \end{table}
+%
+% \begin{table}
+% \centering
+% \caption[ifsym style Timing Characters]{\texttt{ifsym} style Timing Characters (from \pkg{ifsym} manual)}
+% \label{tab:ifsym}
+% \usebox{\sba}%^^A
+% \end{table}
+%
+% \else
+%
+% \begingroup
+% \expandafter\def\csname @captype\endcsname{table}%
+% \makebox[\textwidth][c]{%^^A
+% \let\tablecaption\caption
+% \begin{minipage}{\wd\sba}
+% \tablecaption[ifsym style Timing Symbol Macros]{\texttt{ifsym} style Timing Symbol Macros}%^^A
+% \label{tab:ifsymmacros}%^^A
+% \usebox{\sba}%^^A
+% \end{minipage}
+% \hspace{1em}\hfill
+% \begin{minipage}{\wd\sbb}
+% \tablecaption[ifsym style Timing Characters]{\texttt{ifsym} style Timing Characters (from \texttt{ifsym} manual)}%^^A
+% \label{tab:ifsym}%^^A
+% \usebox{\sbb}%^^A
+% \end{minipage}
+% }%^^A
+% \endgroup
+%
+% \fi
+%
+% \clearpage
+% \library{interval}{Intervals (experimental)}
+% \textbf{This library is under development and might change in the future.}
+%
+% The library "interval"\NewIn{v0.7} allows the drawing of intervals using the "H", "L", "Z" and "X" logic levels.
+% It provides modified definitions of X and Z transitions (e.g.~"LX", "XH") where the transition edges can
+% be coloured either way to indicate interval borders.
+%
+% The interval borders can be set using the `|timing/interval=|\marg{settings}' TikZ style. The
+% \meta{settings} are "lo" (left-open), "lc" (left-closed) and "ro" (right-open), "rc" (right-closed), which build the
+% following combinations: "{lo,ro}", "{lc,ro}", "{lo,rc}" and "{lc,rc}". However, every of them can also be set on its own,
+% e.g.\ "timing/interval={lc}" simply sets the interval to `left-closed' without changing the right border.
+%
+% The key "timing/interval/normal" (alternative: "timing/interval={normal}") sets the transitions back to their default.
+%
+% \par\medskip
+% \noindent
+% Examples:
+% \begingroup
+% \tikzset{timing/draw grid,timing/slope=0}\sffamily
+% \newcommand*\ttt[2][]{\texttiming[timing/interval={#1}]{#2}}
+% \newcommand*\extab[1]{%
+% \begin{tabular}{rcc}
+% & ro & rc \\
+% lo & \ttt[lo,ro]{#1} & \ttt[lo,rc]{#1} \\
+% lc & \ttt[lc,ro]{#1} & \ttt[lc,rc]{#1} \\
+% \end{tabular}
+% }
+% \extab{zlzlz}
+% \endgroup
+% \par\bigskip
+%
+% \noindent
+% A meta-character can be defined for quick changes if necessary:\\[\smallskipamount]
+% \begingroup
+% |\tikztimingmetachar{Y}{[timing/interval={lo,ro}]}|\\
+% |\tikztimingmetachar{y}{[timing/interval/normal]}|\\
+% |\texttiming[timing/draw grid]{ LZH Y HZH y LZH Y LZL } |\\
+% |\texttiming[timing/draw grid]{ LXH Y HXH y LXH Y LXL } |\\
+% gives:
+% \tikztimingmetachar{Y}{[timing/interval={lo,ro}]}
+% \tikztimingmetachar{y}{[timing/interval/normal]}
+% \texttiming[timing/draw grid]{ LZH Y HZH y LZH Y LZL }
+% \texttiming[timing/draw grid]{ LXH Y HXH y LXH Y LXL } \\
+% \endgroup
+%
+% \par\bigskip
+% \noindent
+% A further alternative is to use a meta-character with an argument.
+% Note that "#2" must be used, because "#1" holds the width, which is irrelevant here.
+% This definition is also provided by the `|timing/interval/metachar|=\meta{Character}' key.
+% \\[\smallskipamount]
+% \begingroup
+% |\tikztimingmetachar{I}[2]{[timing/interval={#2}]}|\\
+% or
+% |\tikzset{timing/interval/metachar=I}|\\
+% |\texttiming[timing/draw grid]{ LZH I{lo,rc} HZH I{ro} LZH I{normal} LZL } |\\
+% gives:
+% \tikztimingmetachar{I}[2]{[timing/interval={#2}]}
+% \texttiming[timing/draw grid]{ LZH I{lo,rc} HZH I{ro} LZH I{normal} LZL }\\
+% \endgroup
+%
+% \clearpage
+% \library{beamer}{Beamer Overlay Support (experimental)}
+% \textbf{This library is under development and might change in the future.}
+%
+% The library "beamer"\NewIn{v0.7} provides (at the moment) marginal support for overlays of the \pkg{beamer} class.
+% It allows the usage of beamer \emph{overlay specifications} (|<|\meta{spec}|>|) inside the timing string.
+% However, the current simple implementation might not work properly and cause strange results.
+% The support is designed for use inside \env{tikztimingtable}.
+% See the \pkg{beamer} manual for more informations about overlays specifications.
+%
+% \subsection*{Usage}
+% Insert an overlay specification, e.g.~|<|\meta{number}|>|, inside the timing string. It will affect the
+% rest of the timing characters of the current diagram line.
+% Unfortunate due to the global nature of overlays it also affects the rest of the table. Therefore all
+% diagram lines should end with a specification which turns overlays off, i.e. |<*>| or |<0->|. Otherwise
+% strange results can occur (e.g.~wrong/missing background graphics).
+%
+% \paragraph*{Example}
+% | Timing Table Row & H L <2> Z L H <3> D{last} Z <*> \\ |
+%
+% \subsection*{Display Rows Stepwise}
+% The rows of a \env{tikztimingtable} can be uncovered row-by-row using the way shown below. The signal names
+% must be enclosed into a \cs{mbox} because \cs{uncover} needs to be inside horizontal mode. Instead
+% of \cs{uncover} another beamer overlay command like \cs{only} or \cs{invisible} can be used. To highlight
+% the signal name use \cs{alert}|<|\meta{\dots}|>|\marg{signal name} inside \cs{uncover}.
+% At the moment there is no simple way to highlight the timing lines.
+%
+% \begin{lstlisting}[gobble=4]
+% \begin{tikztimingtable}
+% \mbox{\uncover<+->{Signal Name 1}} & <.-> HL <*> \\
+% \mbox{\uncover<+->{Signal Name 2}} & <.-> HL <*> \\
+% % ...
+% \mbox{\uncover<+->{Signal Name n}} & <.-> HL <*> \\
+% \end{tikztimingtable}
+% \end{lstlisting}
+%
+% \subsection*{Display Columns Stepwise}
+% Different sections (`columns') of timing diagrams in a \env{tikztimingtable} can be uncovered stepwise using the way shown below.
+% In this example the second section/column will be uncovered in the second slide. The first is always visible. Further sections/columns
+% can be uncovered in further slides.
+%
+% Please note that the total width of the table is constant and e.g.~\cs{tablerules} will always cover the full width independent of overlays.
+%
+% \begin{lstlisting}[gobble=4]
+% \begin{tikztimingtable}
+% Signal Name 1 & 10D{Sec. 1} <2> 10D{Sec. 2} <*> \\
+% Signal Name 2 & 10D{Sec. 1} <2> 10D{Sec. 2} <*> \\
+% % ...
+% Signal Name n & 10D{Sec. 1} <2> 10D{Sec. 2} <*> \\
+% \end{tikztimingtable}
+% \end{lstlisting}
+%
+% \subsection*{Overlay Extra Code}
+% The |beamer| overlay specifications can be used inside the \cs{extracode} section like in a normal \env{tikzpicture} environment.
+% However, in both cases strange results will occur if the end of the environment is hidden by an overlay specification. Due to this
+% reason it is recommended to only use overlay commands which affect only an argument, like \cs{only}|<|\meta{\dots}|>|\marg{code},
+% or to place a plain \cs{onlayer} before the end of the environment.
+%
+% \begin{lstlisting}[gobble=4]
+% \begin{tikztimingtable}
+% Signal Name 1 & 10D{Sec. 1} <2> 10D{Sec. 2} <*> \\
+% % ...
+% \extracode
+% % either
+% \draw<2> (0,0) -- (2,0); \only<3> { ... }
+% % or
+% \onlayer<2>
+% % and then at the very end:
+% \onlayer % or \onlayer<*>
+% \end{tikztimingtable}
+% \end{lstlisting}
+%
+% \clearpage
+% \chapter{Examples}
+% This section shows some examples by putting either the full source code or
+% only the needed characters beside the graphical result. Please note that the
+% displayed syntax is the one of \cs{timing} where the initial character is
+% declared as optional argument (\oarg{char}) \emph{inside}/\emph{together} with
+% the logic characters. The syntax of \cs{textttiming} is identical except the
+% initial character is given as a normal optional argument before the characters
+% argument.
+% All examples except Example~\ref{exa:adv} are attached in compilable form
+% to this PDF.
+% ^^A\\[\smallskipamount]
+% ^^A\emph{Example notation example:} "[c]cccc" means either
+% ^^A|\timing{[c]cccc};| or |\texttiming[c]{cccc}|.
+%
+% \DeleteShortVerb{\|}
+% \begin{exampletable}
+% \centering
+% \makeatletter
+% \let\tikztiming@embedexample\empty
+% \makeatother
+% \pgfmathsetbasenumberlength{2}
+% \newcounter{hexcount}
+% \addtocounter{hexcount}{+8}%
+% \newcommand{\hexcountmacro}{%
+% \pgfmathdectoBase\thehexcount{\value{hexcount}}{16}%
+% \hbox{\thehexcount}%
+% \addtocounter{hexcount}{+1}%
+% }
+% \caption{Initial Characters, Modifiers, TikZ Keys}\label{exa:adv}
+% \def\somemacro{}%
+% \def\code{}%
+% \makebox[\textwidth][c]{%
+% \begin{tikztimingexampletable}
+% HLZXDUTC \\
+% cccc \\
+% tttt \\
+% [c]cccc \\
+% 4{c} \\
+% 4c4c \\
+% 4{1.8c} \\
+% [d] 4{5D{Text}} 0.2D \\
+% 3.4H 0.6L \\
+% DDDUUUDDD \\
+% DDD{}DUUDD \\
+% 8{2D{\hexcountmacro}} \\
+% 3{2{0.25X 2.5D .25Z}} \\
+% DDD{} 3{0.2D{}} DDD \\
+% DDD{} 3{0.2D{}} 0.4D{} 0.6D{} DDD \\
+% HHHLLH SSSS HLLHHL \\
+% HHGHHGGHHLLGLLGH \\
+% ZZ G ZZ G XX G X \\
+% LLL 2{0.1H 0.1L} 0.6H HH \\
+% LLL [timing/slope=0.05] 4{.05H .05L} 0.6H HH\\
+% LLL 0.4U 0.6H HH \\
+% [L][timing/slope=1.0] HL HL HL HL HL \\
+% LLLLL !{-- +(.5,.5) -- ++(1,0)} HHHHHH \\
+% LLLLL [| /utils/exec={\somemacro\code} |] HHHHHH \\
+% LL [green] HH [brown] XX LL ZZ [orange] HH \\
+% [][line width=1pt] HLXZDU [line width=0.1pt] HLXZDU \\
+% [][line width=1pt] HLXZDU ,[line width=0.1pt] HLXZDU \\
+% [][line width=1pt] HLXZDU ;[line width=0.1pt] HLXZDU \\
+% \end{tikztimingexampletable}%
+% }
+% \\\scriptsize
+% \emph{Note:} Optional argument must be placed before macro argument if
+% \cs{texttiming} is used.
+%
+% \end{exampletable}
+% \MakeShortVerb{\|}
+%
+% \begin{example}
+% \centering
+% \begin{examplecode}
+% \begin{tikztimingtable}
+% Name & hLLLLh \\
+% Clock & 10{c} \\
+% Signal & z4D{Text}z \\
+% \end{tikztimingtable}
+% \end{examplecode}
+% \caption[tikztimingtable without extracode]{\env{tikztimingtable} without \cs{extracode}.}
+% \end{example}
+%
+% \begin{example}
+% \centering
+% \begin{examplecode}
+% \begin{tikztimingtable}
+% Name & hLLLLh \\
+% Clock & 10{c} \\
+% Signal & z4D{Text}z \\
+% \extracode
+% \draw (0,0) circle (0.2pt); % Origin
+% \begin{pgfonlayer}{background}
+% \vertlines[help lines]{0.5,4.5}
+% \end{pgfonlayer}
+% \end{tikztimingtable}
+% \end{examplecode}
+% \caption[tikztimingtable with extracode]{\env{tikztimingtable} with \cs{extracode}.}
+% \end{example}
+%
+% \begin{example}
+% \centering
+% \begin{examplecode}
+% \begin{tikzpicture}[x=4cm,y=4cm]
+% \draw (0,0) rectangle (1,1);
+% \draw (0.2,0.7) circle (10pt);
+% \begin{scope}[green]
+% \draw (0.1,0.1) -- +(0.8,0.2);
+% \timing at (0.3,0.4) {hlzhhlhhl};
+% \end{scope}
+% \timing [rotate=-30]
+% at (0.4,0.7) {HLZHHLHHL};
+% \end{tikzpicture}
+% \end{examplecode}
+% \caption[timing inside general tikzpicture]{\cs{timing} inside general \envv{tikzpicture}.}
+% \end{example}
+%
+% \begin{example}
+% \centering
+% \def\exampleextraheader{\noexpand\usetikztiminglibrary{advnodes}}
+% \begin{examplecode}
+% \Huge
+% \begin{tikzpicture}[timing/picture,thick,
+% timing/nodes/advanced]
+% \timing at (0,2) {hH N(A) LHLHL};
+% \timing[timing/slope=.25] at (0,0)
+% {HLL N(B) HHLl};
+% \draw [orange,semithick]
+% (A.mid) ellipse (.2 and .6)
+% (B.mid) ellipse (.2 and .6);
+% \draw [orange,semithick,->]
+% ($ (A.mid) - (0,.6) $)
+% parabola [bend pos=0.5]
+% ($ (B.mid) + (0,.6) $);
+% \end{tikzpicture}
+% \end{examplecode}
+% \caption{Using In-Line Nodes to draw Relationships.}\label{exa:inlinenodes}
+% \end{example}
+%
+% \begin{example}
+% \centering
+% \lstset{basicstyle=\scriptsize\ttfamily}
+% \begin{examplecode}
+% \def\degr{${}^\circ$}
+% \begin{tikztimingtable}
+% Clock 128\,MHz 0\degr & H 2C N(A1) 8{2C} N(A5) 3{2C} G \\
+% Clock 128\,MHz 90\degr & [C] 2{2C} N(A2) 8{2C} N(A6) 2{2C} C \\
+% Clock 128\,MHz 180\degr & C 2{2C} N(A3) 8{2C} N(A7) 2{2C} G \\
+% Clock 128\,MHz 270\degr & 3{2C} N(A4) 8{2C} N(A8) 2C C \\
+% Coarse Pulse & 3L 16H 6L \\
+% Coarse Pulse - Delayed 1 & 4L N(B2) 16H N(B6) 5L \\
+% Coarse Pulse - Delayed 2 & 5L N(B3) 16H N(B7) 4L \\
+% Coarse Pulse - Delayed 3 & 6L 16H 3L \\
+% \\
+% Final Pulse Set & 3L 16H N(B5) 6L \\
+% Final Pulse $\overline{\mbox{Reset}}$ & 6L N(B4) 16H 3L \\
+% Final Pulse & 3L N(B1) 19H N(B8) 3L \\
+% \extracode
+% \tablerules
+% \begin{pgfonlayer}{background}
+% \foreach \n in {1,...,8}
+% \draw [help lines] (A\n) -- (B\n);
+% \end{pgfonlayer}
+% \end{tikztimingtable}
+% \end{examplecode}
+% \caption{Using In-Line Nodes to draw Marker Lines.}
+% \end{example}
+%
+% \begin{example}
+% \centering
+% \lstset{basicstyle=\scriptsize\ttfamily}
+% \def\exampleextraheader{\noexpand\usetikztiminglibrary{advnodes,either}^^J
+% \noexpand\usepackage{amsmath}}
+% \begin{examplecode}
+% \def\degr#1{\makebox[2em][r]{#1}\ensuremath{{}^{\circ}}}%
+%
+% \begin{tikztimingtable}[%
+% timing/dslope=0.1, timing/.style={x=2ex,y=2ex}, x=2ex,
+% timing/rowdist=3ex,
+% timing/name/.style={font=\sffamily\scriptsize},
+% timing/nodes/advanced,
+% ]
+% Clock \degr{90} & l 2{C} N(A1) 5{C} \\
+% Clock \degr{180}& C 2{C} N(A2) 4{C} c\\
+% Clock \degr{270}& h 3{C} N(A3) 4{C} \\
+% Clock \degr{0} & [C] 2{C} N(A0) 2{C} N(A4) 3{C}c ;[dotted]
+% 2L; 2{C} N(A5) 3{C} \\
+% Start of T$_{\text{sw}}$ & 4S G N(start) \\
+% Input Pulse & 2.0L 2H 3.5L ;[dotted] 2L; 5L \\
+% Set 3 & 2.5L 2H 3.0L ;[dotted] 2L; 5L \\
+% Set 2 & 3.0L 2H 2.5L ;[dotted] 2L; 5L \\
+% Set 1 & 3.5L 2H 2.0L ;[dotted] 2L; 5L \\
+% Set 0 & 4.0L 2H 1.5L ;[dotted] 2L; 5L \\
+% Reset & 7.5L ;[dotted] 2L; 2L N(reset) 2H 1L \\
+% Final Pulse & 2.5L N(B1) e N(B2) e N(B3) e 3.5H; [dotted]
+% 2H; 2H 3L \\
+% Counter & N(x) 2D{Full} N(B0) 2D{0} N(B4) 2D{1} 1.5D;[dotted]
+% .25D{2} 1.75D{};
+% 2D{~D$_\text{M}$} N(B5) 2D{D$_\text{M}$+1} D N(y)\\
+% \extracode
+% %\tablegrid
+% \node[anchor=north] at ($ (x) ! .5 ! (y) - (0,.75) $)
+% {\scriptsize D$_\text{M}$ = MSBs of Duty Cycle};
+% \begin{background}[timing/picture,line width=.06ex,color=black!60]
+% \foreach \n in {0,...,5}
+% \draw (A\n.TOP) -- (B\n.BOTTOM);
+% \end{background}
+% \end{tikztimingtable}%
+% \end{examplecode}
+% \caption{Adjusting Diagram Parameters and using Advanced In-Line Nodes to draw Marker Lines.}
+% \end{example}
+%
+% \begin{example}
+% \centering
+% \lstset{basicstyle=\ttfamily\footnotesize}
+% \def\texta{}\def\textb{}^^A
+% \makeatletter
+% \ifpdf
+% \IfFileExists{SR_FF_timing_diagram.png}{^^A
+% \def\texta{ (left top)}\def\textb{ (left bottom)}^^A
+% \def\PrintExample{%
+% \begingroup
+% \BoxExample
+% \par\noindent
+% \centerline{%^^A
+% \minipage[c]{\wd\exampleresultbox}%^^A
+% \hbox to \textwidth{\hss\fbox{\usebox{\exampleresultbox}}}%^^A
+% \vspace*{1cm}%^^A
+% \hbox to \textwidth{\hss\fbox{\includegraphics[width=27ex]{SR_FF_timing_diagram.png}}}%^^A
+% \endminipage%
+% \hfill
+% \minipage[c]{\wd\examplecodebox}
+% \hbox{\usebox{\examplecodebox}}
+% \endminipage%
+% }
+% \endgroup
+% \par
+% }%^^A
+% }{}%^^A
+% \fi
+% \begin{examplecode}
+% \definecolor{bgblue}{rgb}{0.41961,0.80784,0.80784}%
+% \definecolor{bgred}{rgb}{1,0.61569,0.61569}%
+% \definecolor{fgblue}{rgb}{0,0,0.6}%
+% \definecolor{fgred}{rgb}{0.6,0,0}%
+% \begin{tikztimingtable}[timing/slope=0,
+% timing/coldist=2pt,xscale=2.05,yscale=1.1,semithick]
+% \scriptsize clock & 7{C}\\
+% S & .75L h 2.25L H LLl [fgblue]\\
+% R & 1.8L .8H 2.2L 1.4H 0.8L [fgblue]\\
+% Q & L .8H 1.7L 1.5H LL\\
+% $\overline{\mbox{Q}}$ & H .8L 1.7H 1.5L HH\\
+% Q & LHHHHLL[fgred]\\
+% $\overline{\mbox{Q}}$ & HLLLLHH[fgred]\\
+% \extracode
+% \makeatletter
+% \begin{pgfonlayer}{background}
+% \shade [right color=bgblue,left color=white]
+% (7,-8.45) rectangle (-1,-4.6);
+% \shade [right color=bgred,left color=white]
+% (7,-12.8) rectangle (-1,-8.6);
+% \begin{scope}[gray,semitransparent,semithick]
+% \horlines{}
+% \foreach \x in {1,...,6}
+% \draw (\x,1) -- (\x,-12.8);
+% % similar: \vertlines{1,...,6}
+% \end{scope}
+% \node [anchor=south east,inner sep=0pt]
+% at (7,-8.45) {\tiny clocked};
+% \node [anchor=south east,inner sep=0pt,fgred]
+% at (7,-12.8) {\tiny positive edge triggered};
+% \end{pgfonlayer}
+% \end{tikztimingtable}%
+% \end{examplecode}
+% \caption[SR flip-flop timing diagram]{SR flip-flop timing diagram\texta.
+% Redrawn from image\textb\\ {\small
+% \url{http://commons.wikimedia.org/wiki/File:SR_FF_timing_diagram.png}
+% }}
+% \end{example}
+%
+% \begin{example}
+% \centering
+% \lstset{basicstyle=\ttfamily\scriptsize}
+% \begin{examplecode}
+% \begin{tikztimingtable}[
+% timing/d/background/.style={fill=white},
+% timing/lslope=0.2,
+% timing/counter/new={char=Q,reset char=R},
+% ]
+% CPOL=0 & LL 15{T} LL \\
+% CPOL=1 & HH 15{T} HH \\
+% & H 17L H \\
+% \\
+% Cycle \# & U R 8{2Q} 2U \\
+% MISO & D{z} R 8{2Q} 2D{z} \\
+% MOSI & D{z} R 8{2Q} 2D{z} \\
+% \\
+% Cycle \# & UU R 8{2Q} U \\
+% MISO & D{z}U R 8{2Q} D{z} \\
+% MOSI & D{z}U R 8{2Q} D{z} \\
+% \extracode
+% % Add vertical lines in two colors
+% \begin{pgfonlayer}{background}
+% \begin{scope}[semitransparent,semithick]
+% \vertlines[red]{2.1,4.1,...,17.1}
+% \vertlines[blue]{3.1,5.1,...,17.1}
+% \end{scope}
+% \end{pgfonlayer}
+% % Add big group labels
+% \begin{scope}
+% [font=\sffamily\Large,shift={(-6em,-0.5)},anchor=east]
+% \node at ( 0, 0) {SCK}; \node at ( 0,-3 ) {SS};
+% \node at (1ex,-9) {CPHA=0}; \node at (1ex,-17) {CPHA=1};
+% \end{scope}
+% \end{tikztimingtable}%
+% \end{examplecode}
+% \caption[SPI Interface Timing]{SPI Interface Timing. Redrawn from
+% image {\small
+% \url{http://en.wikipedia.org/wiki/File:SPI_timing_diagram.svg}}}
+% \end{example}
+%
+% \clearpage
+% \StopEventually{}
+% \clearpage
+% \iffalse
+%</doc>
+% \fi
+%
+%
+% \chapter{Implementation}
+%
+% \subsection{Package Header}
+% \iffalse
+%<*tikz-timing.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ Digital Timing Diagrams using TikZ]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\RequirePackage{tikz}
+
+\usetikzlibrary{calc}
+\usetikzlibrary{backgrounds}
+\usetikzlibrary{decorations.pathmorphing}
+\ifx\collect@body\@undefined
+ \IfFileExists{environ.sty}
+ {\RequirePackage{environ}}
+ {\RequirePackage{amsmath}}
+\fi
+% \end{macrocode}
+%
+% \section{General Definitions}
+%
+% \begin{macrocode}
+\def\tikztimingwidth{0.0}
+\newcount\tikztiming@numint
+\newcount\tikztiming@numfrac
+\def\tikztiming@wscale{1.0}%
+\def\tikztimingsetwscale#1{%
+ \pgfmathparse{#1}%
+ \let\tikztiming@wscale\pgfmathresult
+}
+\def\tikztiming@num{0.0}%
+\let\tikztiming@back\empty
+\newlength\tikztiming@xunit
+\newlength\tikztiming@yunit
+\def\tikztiming@@xunit{1.6ex}%
+\def\tikztiming@@yunit{1.6ex}%
+\setlength{\tikztiming@xunit}{\tikztiming@@xunit}%
+\setlength{\tikztiming@yunit}{\tikztiming@@yunit}%
+
+\def\tikztiming@setnum#1{%
+ \pgfmathparse{#1}%
+ \global\let\tikztiming@num\pgfmathresult
+}
+
+\newcount\tikztiming@debug
+
+\def\tikztiming@xsep{0pt}
+\def\tikztiming@ysep{0pt}
+
+\newcounter{tikztiming@nrows}%
+\def\tikztiming@rowdist{2}%
+\def\tikztiming@coldist{1}%
+
+\def\tikztiming@prefix{tikztiming@trans@}%
+\def\tikztiming@ttt#1#2#3{#1#2#3}%
+\def\tikztiming@pfxtr{%
+ \tikztiming@prefix\expandafter\tikztiming@ttt
+}
+
+\def\timingwidth{1}%
+\def\timingheight{1}%
+% \end{macrocode}
+
+% \section{TikZ Style Settings}
+% \begin{macrocode}
+\tikzset{%
+ timing/.style={/tikz,
+ line cap=round, line join=round,
+ timing/adjust@xy,
+ every path/.append code={\tikz@expandcount=\tikztiming@expandcount\relax},
+ },%
+}
+\tikzset{%
+ timing/.cd,
+ adjust@xy/.style={%
+ /utils/exec={%
+ \tikz@textfont
+ \let\@tempa\fsize
+ \let\fsize\@tempdima
+ \fsize=\f@size pt\relax
+ \pgfmathsetlength{\tikztiming@xunit}{\tikztiming@@xunit}%
+ \pgfmathsetlength{\tikztiming@yunit}{\tikztiming@@yunit}%
+ \let\fsize\@tempa
+ },%
+ /tikz/x=\tikztiming@xunit, /tikz/y=\tikztiming@yunit,
+ },
+ expand count/.store in={\tikztiming@expandcount},
+ expand count=1000,
+ unit/.style={%
+ /utils/exec={%
+ \def\tikztiming@@xunit{#1}%
+ \let\tikztiming@@yunit\tikztiming@@xunit
+ },%
+ /tikz/timing/adjust@xy,%
+ },
+ xunit/.style={%
+ /utils/exec={%
+ \def\tikztiming@@xunit{#1}%
+ },%
+ /tikz/timing/adjust@xy,%
+ },
+ yunit/.style={%
+ /utils/exec={%
+ \def\tikztiming@@yunit{#1}%
+ },%
+ /tikz/timing/adjust@xy,%
+ },
+ font/.style={%
+ /tikz/font={#1},
+ /tikz/timing/adjust@xy
+ },%
+ initchar/.value required,
+ initchar/.code={\uppercase{\gdef\tikztiming@lastchar{#1}}},
+ metachar/.code={\tikztimingmetachar#1},
+ grid/.style={timing,help lines},
+ @grid/.code={\texttiminggrid},
+ draw grid/.style={%
+ timing/before text/.append style={timing/@grid},%
+ timing/before/.append style={timing/@grid}%
+ },
+ no grid/.style={timing/@grid/.code={}},
+ before/.code={},
+ after/.code={},
+ before text/.code={\texttimingbefore},
+ after text/.code={\texttimingafter},
+ picture/.style={timing,line width=0.15ex},
+ intext/.style={timing,line width=0.15ex},
+ inline node/.style={shape=coordinate},
+ inline node/from char/.store in=\tikztiming@node@fromchar,
+ inline node/to char/.store in=\tikztiming@node@tochar,
+ table/.style={font=\sffamily,timing,line width=0.15ex},
+ before table/.code={},
+ after table/.code={},
+ coord/.style={coordinate},
+ save/.style={coordinate},
+ restore/.style={/utils/exec={\expandafter\tikzset\expandafter{\tikztiming@saved@options}}},
+ option/.style={/utils/exec={\g@addto@macro\tikztiming@saved@options{#1,}},#1},
+ nooptions/.style={/utils/exec={\gdef\tikztiming@saved@options{}}},
+ popoptions/.style={/utils/exec={\tikztiming@popoptions}},
+ pushoptions/.style={/utils/exec={\tikztiming@pushoptions}},
+ name/.style={inner sep=0pt,outer sep=0pt,minimum size=0pt},
+ text format/.store in=\tikztiming@textformat,
+ @/.style={},
+ every char/.style={},
+ every bg/.style={},
+ D/.style={timing/d},
+ D/text/.style={timing/d/text},
+ D/background/.style={timing/d/background},
+ D@edge@/.style={timing/d@edge@},
+ D@edge@/text/.style={timing/d@edge@/text},
+ D@edge@/background/.style={timing/d@edge@/background},
+ U/.style={timing/u},
+ U/text/.style={timing/u/text},
+ U/background/.style={timing/u/background},
+ U@edge@/.style={timing/u@edge@},
+ U@edge@/text/.style={timing/u@edge@/text},
+ U@edge@/background/.style={timing/u@edge@/background},
+ H/.style={timing/h},
+ L/.style={timing/l},
+ E/.style={timing/e},
+ E/background/.style={timing/e/background},
+ M/decoration/.style={timing/m/decoration},
+ M/base/.style={timing/m/base},
+ M/.style={timing/m},
+ G/.style={timing/g},
+ Z/.style={timing/z},
+ T/.style={timing/t},
+ C/.style={timing/c},
+ X/.style={timing/x},
+ d/.style={},
+ d/text/.style={timing,scale=0.6,font=\sffamily},
+ d/background/.style={draw=none},
+ d@edge@/.style={timing/d},
+ d@edge@/text/.style={timing/d/text},
+ d@edge@/background/.style={timing/d/background},
+ u/.style={},
+ u/background/.style={draw=none,fill=gray},
+ u@edge@/.style={timing/u},
+ u@edge@/text/.style={timing/u/text},
+ u@edge@/background/.style={timing/u/background},
+ h/.style={},
+ l/.style={},
+ e/.style={},
+ e/background/.style={draw=none},
+ m/decoration/.style={decorate,%
+ decoration={zigzag,segment length=.25\tikztiming@xunit,
+ amplitude=.225\tikztiming@yunit}},
+ m/base/.style={black!40!brown},
+ m/.style={timing/m/base,timing/m/decoration},
+ g/.style={decorate=false},
+ z/.style={blue},
+ t/.style={},
+ c/.style={timing/lslope=0.0},
+ x/.style={red},
+ table/grid/.style={timing/grid},
+ table/lines/.style={},
+ table/rules/.style={line width=0.08em,line cap=butt},
+ table/midrules/.style={line width=0.05em,line cap=butt},
+ table/header/.style={timing/name},
+ table/label header/.style={},
+ table/row header/.style={},
+ slope/.code={%
+ \tikztimingsetslope{#1}%
+ \tikztimingsetdslope{2*#1}%
+ \tikztimingsetzslope{#1/2}%
+ },
+ lslope/.code={\tikztimingsetslope{#1}},
+ dslope/.code={\tikztimingsetdslope{#1}},
+ zslope/.code={\tikztimingsetzslope{#1}},
+ wscale/.code={\tikztimingsetwscale{#1}},
+ coldist/.store in=\tikztiming@coldist,
+ rowdist/.store in=\tikztiming@rowdist,
+ outer xsep/.store in=\tikztiming@xsep,
+ outer ysep/.store in=\tikztiming@ysep,
+ outer sep/.style={/tikz/timing/outer xsep=#1,/tikz/timing/outer ysep=#1},
+ %
+ debug/level/.code={\tikztiming@debug=#1\relax},
+ debug/level/.value required,
+ debug/scope/.style={font=\sffamily\tiny,gray},
+ debug/node/.style={above,inner sep=2pt},
+ debug/nodes/.style={%
+ /tikz/timing/after table/.append code={\tikztiming@marknodes{\tikztiming@namednodes}},
+ /tikz/timing/after text/.append code={\tikztiming@marknodes{\tikztiming@namednodes}}
+ },
+ debug/markcmd/.store in={\tikztiming@markcmd},
+}
+\tikzset{timing/inline node/.cd,
+ from char={}, to char={}
+}
+% \end{macrocode}
+%
+% \section{Text-Mode Macros}
+% \begin{macro}{\texttimingbefore}
+% This macro is executed inside the |tikzpicture| environment of \cs{texttiming}
+% before the timing diagram is drawn.
+% \begin{macrocode}
+\def\texttimingbefore{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\texttimingafter}
+% This macro is executed inside the |tikzpicture| environment of \cs{texttiming}
+% after the timing diagram is drawn.
+% \begin{macrocode}
+\def\texttimingafter{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\texttiminggrid}
+% Draws a background grid with the "timing/grid" setting. Should be used inside
+% \cs{texttimingbefore}.
+% \begin{macrocode}
+\def\texttiminggrid{%
+ \draw[xstep={\timingwidth/2.},ystep={\timingheight/2.},timing/grid] (0,0) grid
+ (\timingwidth*\tikztimingwidth,\timingheight);
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{User Level Macros}
+%
+% \begin{macro}{\texttiming}[2]{Optional initial character}{Timing characters}
+% This macro now only parses it optional argument to check if it is a initial
+% character or some style settings and then calls \cs{timing} appropriately.
+% \begin{macrocode}
+\DeclareRobustCommand*\texttiming[2][]{%
+ \begingroup
+ \let\tikztiming@lastchar\empty
+ \let\tikztiming@settings\empty
+ \tikzset{timing/before/.append style={timing/before text}}%
+ \tikzset{timing/after/.prefix style={timing/after text}}%
+ \ifx\relax#1\relax\else
+ \tikztiming@testoptarg#1\relax\relax%
+ \fi
+ \begin{tikzpicture}[timing/intext,baseline={(0,0)}]
+ \tikztiming@picinit
+ \def\@tempa{\expandafter\timing\expandafter[\tikztiming@settings] at (0,0)}%
+ \expandafter\@tempa\expandafter{\expandafter[\tikztiming@lastchar]#2};%
+ \end{tikzpicture}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testoptarg}
+% \begin{macrocode}
+\def\tikztiming@testoptarg#1#2\relax{%
+ \ifx\relax#2\relax
+ \uppercase{\def\tikztiming@lastchar{#1}}%
+ \else
+ \def\tikztiming@settings{#1#2}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@picinit}
+% For things which should only by initialised once per |tikzpicture|.
+% \begin{macrocode}
+\def\tikztiming@picinit{%
+ \global\let\tikztiming@namednodes\empty
+}
+\let\tikztiming@namednodes\empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@init}
+% \begin{macrocode}
+\def\tikztiming@init{%
+ \def\tikztiming@lastchar{@}%
+ \def\tikztiming@num{0}%
+ \let\tikztiming@currentchar\empty
+ \let\tikztiming@settings\empty
+ \let\tikztiming@fromchar\empty
+ \let\tikztiming@tochar\empty
+ \let\setwscale\tikztimingsetwscale
+ \def\wscale{\tikztiming@wscale}%
+ \let\xunit\tikztiming@xunit
+ \let\yunit\tikztiming@yunit
+ \def\slope{\timingslope}%
+ \def\lslope{\timingslope}%
+ \def\zslope{\timingzslope}%
+ \def\dslope{\timingdslope}%
+ \gdef\tikztiming@saved@settings{}%
+ \gdef\tikztiming@saved@options{}%
+ \gdef\tikztiming@oldnodecenter@{}%
+ \def\tikztimingwidth{0.0}%
+ \setcounter{tikztimingtrans}{-1}%
+ \setcounter{tikztimingtranspos}{0}%
+ \tikztiming@initstr{%
+ \useasboundingbox (0,0) rectangle (\tikztimingwidth,\timingheight);
+ \draw [timing/every char] (0,0)
+ coordinate (timing@refa)
+ coordinate (timing@ref) at (0,\timingheight/2)
+ coordinate (timing@refb) at (0,\timingheight)
+ coordinate (timing/start)
+ coordinate (timing/start base)
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@timing}
+% \begin{macrocode}
+\def\tikz@timing{%
+ \@ifnextchar{[}%
+ {\tikz@timing@}%
+ {\tikz@timing@[]}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@installcommands}
+% Add \cs{timing} to the TikZ internal |\tikz@installcommands| macro.
+% The |\timing| macro will be installed at the begin of the |tikzpicture|.
+% \begin{macrocode}
+\g@addto@macro\tikz@installcommands{%
+ \let\tikz@origtiming=\timing%
+ \let\timing=\tikz@timing%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@uninstallcommands}
+% Add \cs{timing} to the TikZ internal |\tikz@uninstallcommands| macro.
+% The |\timing| macro will be uninstalled at the begin of nodes.
+% \begin{macrocode}
+\g@addto@macro\tikz@uninstallcommands{%
+ \let\timing=\tikz@origtiming%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@timing@}[1]{Optional TikZ Keys}
+% \begin{macrocode}
+\def\tikz@timing@[#1]{%
+ \@ifnextchar{a}%
+ {\tikz@timing@at{#1}}%
+ {\PackageWarning{tikz-timing}{The \string\timing\space command awaits now an
+ `at' before the coordinate, like the \string\node\space command is doing.
+ Please update your source code to ensure compatibility with newer
+ versions}{}{}{}%
+ \@ifnextchar{+}%
+ {\tikz@timing@@{#1}}%
+ {\@ifnextchar(%)
+ {\tikz@timing@@{#1}}%
+ {\tikz@timing@@{#1}++(0,0)}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@timing@at}[1]{Optional TikZ Keys}
+% \begin{macrocode}
+\def\tikz@timing@at#1at#2(#3){%
+ \tikz@timing@@@{#1}{#2(#3)}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@timing@@}[3]{Optional TikZ Keys}{Potential `+' or
+% empty}{Coordinate}
+% \begin{macrocode}
+\def\tikz@timing@@#1#2(#3){%
+ \tikz@timing@@@{#1}{#2(#3)}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@timing@@@}[3]{Optional TikZ Keys}{Coordinate}{Timing
+% Characters}
+% \begin{macrocode}
+\def\tikz@timing@@@#1#2#3{%
+ \begingroup
+ \tikztiming@init
+ \let\tikz@alias=\pgfutil@empty%
+ \begin{scope}[shift={#2},timing,#1]%
+ \@ifnextchar{[}%
+ {\tikz@timing@@@init}%
+ {\tikz@timing@@@init[]}%
+ #3\relax
+ \tikzset{timing/before}%
+ \tikztiming@str;%
+ \path let \p1 = (timing/end top), \p2 = (timing/end base),
+ \p3 = (timing/end), \p4 = (timing/start) in
+ [/utils/exec={%
+ \xdef\tikztiming@northeast{\noexpand\pgfpoint{.5*\pgf@pt@aa*\x1}{.5*\pgf@pt@bb*\y1}}%
+ \xdef\tikztiming@startpoint{\noexpand\pgfpoint{\pgf@pt@aa*(\x4-.5*\x1)}{\pgf@pt@bb*(\y4-.5*\y1)}}%
+ \xdef\tikztiming@endpoint{\noexpand\pgfpoint{\pgf@pt@aa*(\x3-.5*\x1)}{\pgf@pt@bb*(\y3-.5*\y1)}}%
+ }];
+ \node [shape=tikztiming@shape,anchor=origin,#1] at (0,0) {};
+ \tikzset{timing/after}%
+ \end{scope}%
+ \endgroup
+ \tikz@timing@@@end
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@timing@@@end}
+% \begin{macrocode}
+\def\tikz@timing@@@end{%
+ \@ifnextchar{;}%
+ {\@gobble}%
+ {\PackageError{tikz-package}{Can not parse timing path}{}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikz@timing@@@init}[1]{Initial character.}
+% Opens a group which will end in \cs{tikztiming@parser@end}.
+% \begin{macrocode}
+\def\tikz@timing@@@init[#1]{%
+ \begingroup
+ \ifx\relax#1\relax\else
+ \uppercase{\def\tikztiming@lastchar{#1}}%
+ \fi
+ \@ifundefined{tikztiming@initcode@\tikztiming@lastchar}%
+ {}%
+ {\@nameuse{tikztiming@initcode@\tikztiming@lastchar}}%
+ \if @\tikztiming@lastchar\relax\else
+ \tikztiming@iftrans{@\tikztiming@lastchar}%
+ {\tikztiming@nameaddtostr{@}{\tikztiming@lastchar}{}}%
+ {\PackageWarning{tikz-timing}{Start value for timing character
+ '\tikztiming@lastchar' is not defined and will be ignored!}{}{}{}}%
+ \fi
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Internal Macros}
+%
+% \begin{macro}{\tikztiming@trans@}
+% \begin{macrocode}
+\def\tikztiming@trans@#1#2#3#4{%
+ \unexpanded\expandafter\expandafter\expandafter{%
+ \csname\tikztiming@prefix #2#3#4\endcsname{#1}{#2}{#3}{#4}
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@beforenextcode@D@edge@}
+% \begin{macrocode}
+\def\tikztiming@beforenextcode@D@edge@{%
+ \if D\tikztiming@currentchar\else
+ \gdef\tikztiming@lastchar{D}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@beforenextcode@U@edge@}
+% \begin{macrocode}
+\def\tikztiming@beforenextcode@U@edge@{%
+ \if U\tikztiming@currentchar\else
+ \gdef\tikztiming@lastchar{U}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@initcode@}
+% If empty init char was given, exchange it with "@".
+% \begin{macrocode}
+\def\tikztiming@initcode@{%
+ \gdef\tikztiming@lastchar{@}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@initcode@D}
+% \begin{macrocode}
+\def\tikztiming@initcode@D{%
+ \gdef\tikztiming@lastchar{D@edge@}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@initcode@U}
+% \begin{macrocode}
+\def\tikztiming@initcode@U{%
+ \gdef\tikztiming@lastchar{U@edge@}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@parser}
+% \begin{macrocode}
+\def\tikztiming@parser{%
+ \@ifnextchar\relax
+ {\tikztiming@parser@end}%
+ {\tikztiming@testfornum}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Add-to-Macro Macros}
+% \begin{macro}{\tikztiming@eaddto}[2]{Macro name}{Tokens to add to macro}
+% \begin{macrocode}
+\def\tikztiming@eaddto#1#2{%
+ \begingroup
+ \tikztiming@internaldefs
+ \@temptokena\expandafter{#1}%
+ \xdef#1{%
+ \the\@temptokena
+ #2%
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\iftrue
+% \end{macrocode}
+%
+% \begin{macro}{\tikztiming@initstr}
+% \begin{macrocode}
+\long\def\tikztiming@initstr{%
+ \def\tikztiming@str
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@eaddtostr}
+% \begin{macrocode}
+\def\tikztiming@eaddtostr{%
+ \tikztiming@eaddto\tikztiming@str
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@addtostr}
+% \begin{macrocode}
+\def\tikztiming@addtostr{%
+ \g@addto@macro\tikztiming@str
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\else
+% \end{macrocode}
+%
+% \begin{macro}{\tikztiming@str}
+% \begin{macrocode}
+\def\tikztiming@file{\jobname.ttg}
+\newwrite\tikztiming@fh
+\def\tikztiming@str{%
+ \tikztiming@addtostr{;}%
+ \immediate\closeout\tikztiming@fh
+ \begingroup
+ \makeatletter
+ \@@input\tikztiming@file\relax
+ \endgroup
+ \@ifnextchar;{\@gobble}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@initstr}
+% \begin{macrocode}
+\long\def\tikztiming@initstr{%
+ \immediate\openout\tikztiming@fh= \tikztiming@file\relax
+ \tikztiming@addtostr
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@eaddtostr}
+% \begin{macrocode}
+\long\def\tikztiming@eaddtostr#1{%
+ \begingroup
+ \tikztiming@internaldefs
+ \let\par\empty
+ \immediate\write\tikztiming@fh{#1}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@addtostr}
+% \begin{macrocode}
+\long\def\tikztiming@addtostr#1{%
+ \begingroup
+ \tikztiming@internaldefs
+ \let\par\empty
+ \immediate\write\tikztiming@fh{\unexpanded{#1}}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+%
+% \begin{macro}{\tikztiming@makeglobal}
+% \begin{macrocode}
+\def\tikztiming@makeglobal#1{%
+ \global\let#1#1\relax\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@iftrans}[1]{Characters}
+% \begin{macrocode}
+\def\tikztiming@trans{}%
+\def\tikztiming@iftrans#1{%
+ \tikztiming@iftrans@#1\empty\empty\empty\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@iftrans}[4]
+% {First character}{Second character}
+% {Next character or empty}{Eats token till end marker}
+% \begin{macrocode}
+\def\tikztiming@iftrans@#1#2#3#4\relax{%
+ \begingroup
+ \xdef\tikztiming@trans{#1#2}%
+ \ifx\tikztiming@trans\empty
+ \gdef\tikztiming@trans{{@}{}{@}}%
+ \else
+ \global\let\tikztiming@trans\relax
+ % Use triple macros before double macros
+ \@ifundefined{tikztiming@triple@#2}%
+ {\@ifundefined{\tikztiming@prefix#1#2}%
+ {}%
+ {\xdef\tikztiming@trans{{#1}{#2}{}}}%
+ }%
+ {%
+ \@ifundefined{\tikztiming@prefix#1#2#3}%
+ {}%
+ {\xdef\tikztiming@trans{{#1}{#2}{#3}}}%
+ }%
+ % If both do not exist, search for aliases:
+ \ifx\tikztiming@trans\relax
+ \@ifundefined{tikztiming@alias@#1}%
+ {\edef\chara{{#1}}}%
+ {\edef\chara{{#1},{\csname tikztiming@alias@#1\endcsname}}}%
+ \@ifundefined{tikztiming@alias@#2}%
+ {\edef\charb{{#2}}}%
+ {\edef\charb{{#2},{\csname tikztiming@alias@#2\endcsname}}}%
+ \@ifundefined{tikztiming@triple@#2}%
+ {\def\charc{\empty}}%
+ {%
+ \@ifundefined{tikztiming@alias@#3}%
+ {\edef\charc{{#3},}}%
+ {\edef\charc{{#3},{\csname tikztiming@alias@#3\endcsname},}}%
+ }%
+ \ifx\charb\empty
+ \def\charb{\empty}%
+ \fi
+ \let\tikztiming@next\relax
+ \foreach \b in \charb {%
+ \foreach \a in \chara {%
+ \foreach \c in \charc {%
+ %\message{ ^^J Testing: \a\b\c ^^J}%
+ \@ifundefined{\tikztiming@prefix\a\b\c}%
+ {}{%
+ \xdef\tikztiming@trans{{#1}{#2}{#3}}%
+ \expandafter\tikztimingcpy\expandafter
+ {\tikztiming@trans}{\a\b\c}%
+ \ifnum\tikztiming@debug>0
+ \message{^^J DEBUG: '#1#2#3' = '\a\b\c' ^^J}%
+ \fi
+ \expandafter\tikztiming@makeglobal
+ \csname\tikztiming@pfxtr\tikztiming@trans\endcsname
+ \ifnum\tikztiming@debug>1
+ \ifnum\tikztiming@debug>2
+ \expandafter\show\csname\tikztiming@pfxtr\tikztiming@trans\endcsname
+ \else
+ \message{^^J\tikztiming@trans:
+ \expandafter\meaning\csname\tikztiming@pfxtr\tikztiming@trans\endcsname^^J}%
+ \message{^^J\a\b\c:
+ \expandafter\meaning\csname\tikztiming@prefix\a\b\c\endcsname^^J}%
+ \fi
+ \fi
+ \global\let\tikztiming@next\breakforeach
+ }%
+ \tikztiming@next
+ }%
+ \tikztiming@next
+ }%
+ \tikztiming@next
+ }%
+ \fi
+ \fi
+ \endgroup
+ \ifx\tikztiming@trans\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@nameaddtostr}
+% {First character}{Second character}
+% {Optional next character}
+% \begin{macrocode}
+\def\tikztiming@nameaddtostr#1#2#3{%
+ \tikztiming@iftrans{{#1}{#2}{#3}}%
+ {%
+ %\edef\@tempa{\noexpand\tikztiming@trans@{\tikztiming@num}\tikztiming@trans}%
+ %\expandafter\tikztiming@addtostr
+ %\expandafter{\@tempa}%
+ \edef\@tempa{\noexpand\tikztiming@trans@{\tikztiming@num}\tikztiming@trans}%
+ %\tikztiming@eaddtostr{\@percentchar\space {#1}{#2}{#3}}%
+ \tikztiming@eaddtostr{\@tempa}%
+ %\tikztiming@eaddtostr{\tikztiming@trans@{\tikztiming@num}\tikztiming@trans}%
+ }%
+ {\PackageWarning{tikz-timing}{No transitions '#1#2' (or '#1#2#3') defined!}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@output@addcode}
+% Adds code to the output code buffer. The code will not be expanded, i.e.\ will
+% be protected from the expansion when the buffer is flushed.
+% \begin{macrocode}
+\def\tikztiming@output@addcode#1{%
+ \g@addto@macro\tikztiming@output@bufcode{\unexpanded{ #1 }}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@output@eaddcode}
+% Adds code to the output code buffer. The code will be expanded when the buffer
+% is flushed.
+% \begin{macrocode}
+\def\tikztiming@output@eaddcode#1{%
+ \g@addto@macro\tikztiming@output@bufcode{ #1 }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@output@Eaddcode}
+% Adds code to the output code buffer. The code will be expanded immediately and
+% again when the buffer is flushed.
+% \begin{macrocode}
+\def\tikztiming@output@Eaddcode{%
+ \tikztiming@eaddto\tikztiming@output@bufcode%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Output Routine}
+%
+% Init buffer macros:
+% \begin{macrocode}
+\def\tikztiming@output@bufchara{}%
+\def\tikztiming@output@bufcharb{}%
+\def\tikztiming@output@bufnum{0}%
+\def\tikztiming@output@bufcode{}%
+\def\tikztiming@output@nextchar{}%
+% \end{macrocode}
+%
+% \begin{macro}{\tikztiming@output}[2]{Character 1}{Character 2}
+% \begin{macrocode}
+\def\tikztiming@output#1#2{%
+ \edef\tikztiming@fromchar{#1}%
+ \edef\tikztiming@tochar{#2}%
+ \ifx\relax#2\relax
+ %\tikztiming@output@codeflush
+ \tikztiming@nameaddtostr{}{#1}{}%
+ \else
+ \ifcase0%
+ \ifx\tikztiming@output@bufchara\empty
+ \ifx\tikztiming@output@bufcharb\empty
+ 1%
+ \fi
+ \fi\relax
+ % not empty
+ \edef\tikztiming@output@currentchar{#2}%
+ \ifcase0%
+ \ifx\tikztiming@output@bufcode\empty% Stop combining if code was inserted
+ \expandafter\ifx\csname tikztiming@nocombine@#2\endcsname\relax
+ \ifx\tikztiming@output@currentchar\tikztiming@output@bufcharb
+ 2%
+ \fi
+ \fi
+ \else
+ 1%
+ \fi
+ \relax
+ \edef\tikztiming@output@nextchar{#2}%
+ \tikztiming@output@flush
+ \xdef\tikztiming@output@bufchara{#1}%
+ \xdef\tikztiming@output@bufcharb{#2}%
+ \or
+ \edef\tikztiming@output@nextchar{#2}%
+ \tikztiming@output@flush
+ \xdef\tikztiming@output@bufchara{#1}%
+ \xdef\tikztiming@output@bufcharb{#2}%
+ \or
+ \pgfmathparse{\tikztiming@output@bufnum + \tikztiming@num}%
+ \global\let\tikztiming@output@bufnum\pgfmathresult
+ \fi
+ \else % empty
+ \tikztiming@output@codeflush
+ \xdef\tikztiming@output@bufchara{#1}%
+ \xdef\tikztiming@output@bufcharb{#2}%
+ \global\let\tikztiming@output@bufnum\tikztiming@num
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@output@flush}
+% \begin{macrocode}
+\def\tikztiming@output@flush{%
+ \tikztiming@output@charflush
+ \tikztiming@output@codeflush
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@output@codeflush}
+% \begin{macrocode}
+\def\tikztiming@output@codeflush{%
+ \ifx\tikztiming@output@bufcode\empty\else
+ \tikztiming@eaddtostr{\tikztiming@output@bufcode}%
+ \global\let\tikztiming@output@bufcode\empty%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@output@charflush}
+% A group is used to protect the current value of |num| which is the length of
+% the new character after the flushed old character. This value will be assigned
+% to the new buffer length |bufnum|.
+% \begin{macrocode}
+\def\tikztiming@output@charflush{%
+ \begingroup
+ \let\tikztiming@num\tikztiming@output@bufnum
+ \tikztiming@nameaddtostr
+ {\tikztiming@output@bufchara}%
+ {\tikztiming@output@bufcharb}%
+ {\tikztiming@output@nextchar}%
+ \endgroup%
+ \gdef\tikztiming@output@nextchar{}%
+ \gdef\tikztiming@output@bufchara{}%
+ \gdef\tikztiming@output@bufcharb{}%
+ \global\let\tikztiming@output@bufnum\tikztiming@num
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Macros for Character Definitions}
+%
+% \begin{macro}{\tikztiming@nameedef}[4]{Macro name to be defined (without
+% prefix)}{Content of macro}
+% Defines internal tikztiming macro with name |\|\meta{prefix}\meta{name (\#2)}.
+% The macro definition (\#3) is expanded while the internal drawing definitions
+% are active.
+% \begin{macrocode}
+\newcommand\tikztiming@nameedef[4]{%
+ \def\@gtempa##1{#4}%
+ \begingroup
+ \tikztiming@internaldefs
+ \xdef\@gtempa##1##2##3##4{\@gtempa{\width}}%
+ \endgroup
+ \expandafter\let\csname\tikztiming@prefix#1#2#3\endcsname\@gtempa
+ \let\@gtempa\empty
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@namelet}[2]{Original Characters}{New Characters}
+% Only execute |\let| if the original macro is defined or the destination macro
+% is defined and would now set to undefined.
+% \begin{macrocode}
+\newcommand\tikztiming@namelet[2]{%
+ \ifcase0%
+ \@ifundefined{\tikztiming@prefix#2}%
+ {\@ifundefined{\tikztiming@prefix#1}%
+ {0}{1}%
+ }%
+ {1}%
+ \relax
+ \else
+ \expandafter\let
+ \csname\tikztiming@prefix#1\expandafter\endcsname
+ \csname\tikztiming@prefix#2\endcsname
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Parser}
+%
+% \begin{macro}{\tikztiming@parser@end}
+% \begin{macrocode}
+\def\tikztiming@parser@end{%
+ \def\tikztiming@output@nextchar{@}%
+ \let\tikztiming@fromchar\tikztiming@tochar
+ \edef\tikztiming@tochar{@}%
+ \tikztiming@output@flush
+ \global\let\tikztimingwidth\tikztimingwidth
+ \tikztiming@addtostr{ coordinate (timing/end)
+ let \p1 = (timing/start base), \p2 = (timing/end), \p3 = (0,1) in
+ coordinate (timing/end base) at (\x2,\y1)
+ coordinate (timing/end top) at (\x2,\y1+\y3)
+ }%
+ \endgroup
+ \tikztiming@endhook%
+}
+\let\tikztiming@endhook\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@parser@}[1]{Next Character}
+% \begin{macrocode}
+\def\tikztiming@parser@#1{%
+ \ifx\relax#1\empty
+ \expandafter\tikztiming@parser@end
+ \else
+ \tikztiming@iflower{#1}%
+ {\tikztiming@setnum{\tikztiming@num/2}}%
+ {}%
+ \ifx\tikztiming@back\empty\else
+ \tikztiming@setnum{\tikztiming@num - \tikztiming@back}%
+ \global\let\tikztiming@back\empty
+ \fi
+ \pgfmathparse{\tikztimingwidth + \tikztiming@num}%
+ \global\let\tikztimingwidth\pgfmathresult
+ \uppercase{\gdef\tikztiming@currentchar{#1}}%
+ \@nameuse{tikztiming@beforenextcode@\tikztiming@lastchar}%
+ \@nameuse{tikztiming@beforecode@\tikztiming@currentchar}%
+ \tikztiming@output{\tikztiming@lastchar}{\tikztiming@currentchar}%
+ \global\let\tikztiming@lastchar\tikztiming@currentchar
+ \@nameuse{tikztiming@aftercode@\tikztiming@currentchar}%
+ \expandafter\lowercase\expandafter{%
+ \expandafter\def\expandafter\@tempa
+ \expandafter{\tikztiming@currentchar}%
+ }%
+ \pgfkeysifdefined{/tikz/timing/\@tempa/text/.@cmd}%
+ {\expandafter\expandafter\expandafter\tikztiming@testfortext}%
+ {\expandafter\expandafter\expandafter\tikztiming@parser}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testfortext}
+% \begin{macrocode}
+\def\tikztiming@testfortext{%
+ \@ifnextchar\bgroup
+ {\tikztiming@handletext}%
+ {\tikztiming@parser}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@handletext}[1]{Text}
+% Looks ahead if the current character is the last one and sets the end-of-line
+% marker if so.
+%
+% This seems outdated because |handletext@| does not flush the output any more.
+% \begin{macrocode}
+\def\tikztiming@handletext#1{%
+ \@ifnextchar\relax
+ {\def\tikztiming@output@nextchar{@}\tikztiming@handletext@{#1}}%
+ {\def\tikztiming@output@nextchar{Z}\tikztiming@handletext@{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@handletext@}[1]{Text}
+% \begin{macrocode}
+\def\tikztiming@handletext@#1{%
+ \@ifnextchar{[}%
+ {\tikztiming@handletext@@}%
+ {\tikztiming@handletext@@[]}%
+ #1\tikztiming@endoftext
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@handletext@@}[2]{Optional Settings}{Text}
+% \begin{macrocode}
+\def\tikztiming@handletext@@[#1]#2\tikztiming@endoftext{%
+ \@ifnextchar{\relax}%
+ {\def\tikztiming@output@nextchar{@}%
+ \tikztiming@handletext@@@{#1}{#2}}%
+ {\tikztiming@handletext@@@{#1}{#2}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@handletext@@@}[2]{Optional Settings}
+% {Text}
+% \begin{macrocode}
+\def\tikztiming@handletext@@@#1#2{%
+ \expandafter\lowercase\expandafter{%
+ \expandafter\def\expandafter\@tempa
+ \expandafter{\tikztiming@currentchar}%
+ }%
+ \edef\@tempa{node [timing/\@tempa/text,}%
+ \expandafter\tikztiming@output@addcode\expandafter{%
+ \@tempa
+ #1] at ($ (timing@dstart) !.5! (timing@dend) $)
+ {\tikztiming@textformat{#2}}
+ }%
+ \ifcase0%
+ \if @\tikztiming@output@bufchara
+ 1%
+ \else
+ \ifx\tikztiming@output@bufchara\tikztiming@currentchar
+ 1%
+ \fi
+ \fi
+ \relax
+ \else
+ \fi
+ \xdef\tikztiming@output@bufcharb{\tikztiming@currentchar @edge@}%
+ \xdef\tikztiming@lastchar{\tikztiming@currentchar @edge@}%
+ \tikztiming@parser
+}
+\let\tikztiming@textformat\empty
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Definition of Modifiers}
+%
+% \begin{macro}{\tikztiming@defcode}[1]{Code Character}
+% \begin{macrocode}
+\def\tikztiming@defcode#1{%
+ \@namedef{tikztiming@code@\meaning#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{@}}
+% Simply executes given code. The |\relax| is added to have some protection
+% against user code manipulating the parser macro. The "@" character can be both
+% a letter (in style files) and a character (in user documents), so it is
+% defined twice.
+% \begin{macrocode}
+\tikztiming@defcode{@}#1{%
+ #1\relax
+ \tikztiming@parser
+}
+\begingroup
+ \expandafter\let\expandafter\temp
+ \csname tikztiming@code@\meaning @\endcsname
+ \makeatother
+ \expandafter\global\expandafter\let
+ \csname tikztiming@code@\meaning @\endcsname\temp
+\endgroup
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{DOLLAR}}
+% Takes the code between two dollar signs and parses it as math expression. The
+% result is put back on the input stream. This allows the calculation of
+% character width.
+% \begin{macrocode}
+\tikztiming@defcode$#1${%
+ \pgfmathparse{#1}%
+ \expandafter
+ \tikztiming@parser\pgfmathresult
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{,}}
+% \begin{macrocode}
+\tikztiming@defcode{,}{%
+ \tikztiming@output@eaddcode{%
+ \newdraw [timing/every char]
+ }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{;}}
+% \begin{macrocode}
+\tikztiming@defcode{;}{%
+ \endgroup\begingroup
+ \tikztiming@output@eaddcode{%
+ \newdrawns [timing/every char]
+ }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{N}}
+% \begin{macrocode}
+\tikztiming@defcode{N}{%
+ \@ifnextchar[%]
+ {\tikztiming@addnode@getoptions}%
+ {\tikztiming@addnode@getoptions[]}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{n}}
+% \begin{macrocode}
+\tikztiming@defcode{n}{%
+ \@ifnextchar[%]
+ {\tikztiming@addnode@getoptions}%
+ {\tikztiming@addnode@getoptions[]}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{B}}
+% \begin{macrocode}
+\tikztiming@defcode{B}{%
+ \pgfmathparse{\tikztiming@back+\tikztiming@num}%
+ \global\let\tikztiming@back\pgfmathresult
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{b}}
+% \begin{macrocode}
+\tikztiming@defcode{b}{%
+ \pgfmathparse{\tikztiming@back+\tikztiming@num/2}%
+ \global\let\tikztiming@back\pgfmathresult
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{F}}
+% \begin{macrocode}
+\tikztiming@defcode{F}{%
+ \pgfmathparse{\tikztiming@back-\tikztiming@num}%
+ \global\let\tikztiming@back\pgfmathresult
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode{f}}
+% \begin{macrocode}
+\tikztiming@defcode{f}{%
+ \pgfmathparse{\tikztiming@back-\tikztiming@num/2}%
+ \global\let\tikztiming@back\pgfmathresult
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tikztiming@defcode []}[1]{Options}
+% Single brackets are in-picture options.
+% Brackets and a "!" sign "[! !]" are parser options.
+% Double brackets are both.
+%
+% Brackets and "| |" signs "[| |]" are only-once in-picture options.
+% \begin{macrocode}
+\tikztiming@defcode[{%}]{
+ \@ifnextchar[%]
+ {\tikztiming@bothoption}%
+ {\@ifnextchar{!}%
+ {\tikztiming@parseroption}%
+ {\@ifnextchar{|}%
+ {\tikztiming@onceoption}%
+ {\tikztiming@addoption}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@parseroption}[1]{Options}
+% Sets the given options immediately, so that they are in affect for the rest of
+% the parser run.
+% \begin{macrocode}
+\def\tikztiming@parseroption!#1!]{%
+ \pgfqkeys{/tikz/timing}{#1}%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@addoption}[1]{Options}
+% Adds the options to the internal list of timing options.
+% \begin{macrocode}
+\def\tikztiming@addoption#1]{%
+ \tikztiming@output@addcode{ [timing/option={#1}] }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@bothoption}[1]{Options}
+% Does executes and adds the options to the output code buffer. This is
+% necessary for slopes if they are used in width calculations.
+% \begin{macrocode}
+\def\tikztiming@bothoption[#1]]{%
+ \tikzset{#1}%[
+ \tikztiming@addoption{#1}]%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@onceoption}[1]{Options}
+% Simply adds the options to the output code buffer.
+% \begin{macrocode}
+\def\tikztiming@onceoption|#1|]{%
+ \tikztiming@output@addcode{ [#1] }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Local Scopes, Push/Pop Options}
+%
+% \begin{macro}{\tikztiming@defcode bgroup}
+% \begin{macrocode}
+\tikztiming@defcode{\bgroup}{%
+ \tikztiming@output@eaddcode{%
+ [timing/pushoptions]
+ \newdraw [timing/every char]
+ }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@defcode egroup}
+% \begin{macrocode}
+\tikztiming@defcode{\egroup}{%
+ \tikztiming@output@eaddcode{%
+ [timing/popoptions]
+ \newdraw [timing/every char]
+ }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@popoptions}
+% \begin{macrocode}
+\def\tikztiming@popoptions{%
+ \expandafter\tikztiming@popoptions@\tikztiming@optionstack\relax
+}
+\def\tikztiming@optionstack{{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@popoptions@}
+% \begin{macrocode}
+\def\tikztiming@popoptions@#1#2\relax{%
+ \gdef\tikztiming@saved@options{#1}%
+ \gdef\tikztiming@optionstack{#2}%
+ \ifx\tikztiming@optionstack\empty
+ \gdef\tikztiming@optionstack{{}}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tikztiming@pushoptions}
+% \begin{macrocode}
+\def\tikztiming@pushoptions{%
+ \expandafter\expandafter\expandafter\gdef
+ \expandafter\expandafter\expandafter\tikztiming@optionstack
+ \expandafter\expandafter\expandafter{%
+ \expandafter\expandafter\expandafter{\expandafter\tikztiming@saved@options\expandafter}\tikztiming@optionstack}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Add-Node Macros}
+%
+% \begin{macro}{\tikztiming@addnode}[1]{Options}
+% \begin{macrocode}
+\def\tikztiming@addnode@getoptions[#1]{%
+ \@ifnextchar(%)
+ {\tikztiming@addnode@getname{#1}}%
+ {\tikztiming@addnode@getname{#1}()}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@addnode@getname}[2]{Previous read options}{Node name}
+% \begin{macrocode}
+\def\tikztiming@addnode@getname#1(#2){%
+ \@ifnextchar\bgroup
+ {\tikztiming@addnode@{#1}{#2}}%
+ {\tikztiming@addnode@{#1}{#2}{}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@addnode@}[3]{Options}{Node name}{Node text}
+% The |fromchar| and |tochar| macros are to be expanded in the output routine,
+% not inside this macro. They do not hold the correct values yet.
+% \begin{macrocode}
+\def\tikztiming@addnode@#1#2#3{%
+ \def\@tempa{#2}%
+ \ifx\@tempa\empty
+ \def\@tempa{ node [timing/inline node,%
+ timing/inline node/from char={\tikztiming@fromchar},%
+ timing/inline node/to char={\tikztiming@tochar},%
+ \unexpanded{#1}] }%
+ \def\@tempb{}%
+ \else
+ \def\@tempa{ node [timing/inline node,%
+ timing/inline node/from char={\tikztiming@fromchar},%
+ timing/inline node/to char={\tikztiming@tochar},%
+ \unexpanded{#1}] (\unexpanded{#2}) }%
+ \xdef\tikztiming@namednodes{\tikztiming@namednodes,#2}%
+ \fi
+ \expandafter\tikztiming@output@eaddcode\expandafter{\@tempa \unexpanded{{#3}}}%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@marknodes}[1]{Comma-separated list of node names}
+% \begin{macrocode}
+\newcommand*\tikztiming@marknodes[2][]{%
+ \scope[timing/debug/scope,#1]
+ \edef\@tempa{floor((\noexpand\y1-\tikztiming@xunit) / \tikztiming@rowdist\tikztiming@xunit) * \tikztiming@rowdist\tikztiming@xunit}%
+ \foreach \N in #2 {%
+ \ifx\N\empty\else
+ \tikztiming@markcmd
+ \path let \p1=(\N) in
+ node [timing/debug/node] at ($ (\x1,\noexpand\@tempa) + (0,1) $) {\N};
+ \fi
+ }%
+ \endscope
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@markcmd}
+% \begin{macrocode}
+\def\tikztiming@markcmd{ \draw (\N) circle (1pt); }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@mark@nodes}[1]{Comma-separated list of node names}
+% \begin{macrocode}
+\newcommand*\tikztiming@mark@nodes[2][]{%
+ \begingroup
+ \def\@tempa{#2}%
+ \ifx\@tempa\empty \let\@tempa\tikztiming@namednodes \fi
+ \ifx\@tempa\space \let\@tempa\tikztiming@namednodes \fi
+ \def\@tempb{\tikztiming@marknodes[#1]}%
+ \expandafter\@tempb\expandafter{\expandafter{\@tempa}}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Test for Code (`!' modifier)}
+%
+% \begin{macro}{\tikztiming@testforcode}
+% \begin{macrocode}
+\def\tikztiming@testforcode{%
+ \@ifnextchar{!}%
+ {\tikztiming@testforcode@}%
+ {\@ifundefined{tikztiming@code@\meaning\@let@token}%
+ {\tikztiming@parser@}%
+ {\expandafter\afterassignment
+ \csname tikztiming@code@\meaning\@let@token\endcsname
+ \let\@let@token=%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testforcode@}[1]{Character to gobble}
+% \begin{macrocode}
+\def\tikztiming@testforcode@#1{%
+ \@ifnextchar\bgroup
+ {\tikztiming@handlecode}%
+ {%
+ \PackageWarning{tikz-timing}{Missing braces after '!' character. Ignoring
+ this character}{}{}{}%
+ \tikztiming@parser
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@handlecode}[1]{Code to add to string}
+% \begin{macrocode}
+\def\tikztiming@handlecode#1{%
+ \tikztiming@output@addcode{ #1 }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Parser Macros: Numbers}
+%
+% \begin{macro}{\tikztiming@testfornum}
+% \begin{macrocode}
+\def\tikztiming@testfornum{%
+ \global\let\tikztiming@num\tikztiming@wscale
+ \let\tikztiming@numchars\empty
+ \tikztiming@numfrac0\relax
+ \afterassignment
+ \tikztiming@testfornum@
+ \tikztiming@numint0%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testfornumfrac}
+% \begin{macrocode}
+\def\tikztiming@testfornumfrac{%
+ \afterassignment
+ \tikztiming@testfornum@@@
+ \tikztiming@numfrac1%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@numloop}
+% \begin{macrocode}
+\def\tikztiming@numloop{%
+ \ifnum\tikztiming@numint>0%
+ \toks@\expandafter{\tikztiming@numchars}%
+ \xdef\tikztiming@numchars{%
+ \the\toks@
+ \the\@temptokena
+ }%
+ \advance\tikztiming@numint by -1\relax
+ \expandafter\tikztiming@numloop
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testfornum@}
+% The \cs{@let@token} set in \cs{tikztiming@parser} is used to handle "0"
+% which can not be detected using the \cs{tikztiming@numint} value.
+% \begin{macrocode}
+\def\tikztiming@testfornum@{%
+ \ifx0\@let@token
+ \let\tikztiming@next\tikztiming@testfornum@@
+ \else
+ \ifnum0<\tikztiming@numint
+ \let\tikztiming@next\tikztiming@testfornum@@
+ \else
+ \def\tikztiming@next{%
+ \@ifnextchar{.}%
+ {\expandafter\tikztiming@testfornumfrac\@gobble}%
+ {%
+ \tikztiming@numint1\relax
+ \tikztiming@numfrac0\relax
+ \global\let\tikztiming@num\tikztiming@wscale
+ \if@tikztiming@metachar
+ {\def\@tempa{\expandafter\expandafter\expandafter
+ \tikztiming@parser
+ \csname tikztiming@metachar@\meaning\@let@token\endcsname{1}}%
+ \expandafter\@tempa\@gobble
+ }%
+ {\tikztiming@testforcode}%
+ }%
+ }%
+ \fi\fi
+ \tikztiming@next
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testfornum@@}
+% \begin{macrocode}
+\def\tikztiming@testfornum@@{%
+ \@ifnextchar{.}%
+ {\expandafter\tikztiming@testfornumfrac\@gobble}%
+ {\tikztiming@testfornum@@@}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testfornum@@@}
+% \begin{macrocode}
+\def\tikztiming@testfornum@@@{%
+ \edef\tikztiming@num{\the\tikztiming@numint.\expandafter\@gobble\the\tikztiming@numfrac}%
+ \tikztiming@setnum{\tikztiming@wscale * \tikztiming@num}%
+ \@ifnextchar\bgroup
+ {%
+ \expandafter\tikztiming@numfrac\expandafter0\expandafter
+ \@gobble\the\tikztiming@numfrac\relax
+ \ifnum0=\tikztiming@numfrac\else
+ \pgfmathparse{round(\tikztiming@num)}%
+ \PackageWarning{tikz-timing}%
+ {Can not repeat group by a non-integer factor!^^J%
+ Rounding '\tikztiming@num' to '\pgfmathresult'.}{}{}{}%
+ \global\let\tikztiming@num\pgfmathresult
+ \fi
+ \tikztiming@testfornum@@@@
+ }%
+ {%
+ \if@tikztiming@metachar
+ {\def\@tempa{\expandafter\expandafter\expandafter
+ \tikztiming@parser
+ \csname tikztiming@metachar@\meaning\@let@token\expandafter\endcsname
+ \expandafter{\tikztiming@num}}%
+ \expandafter\@tempa\@gobble
+ }%
+ {\tikztiming@testforcode}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@testfornum@@@@}[1]{Characters and other tokens to
+% repeat}
+% \begin{macrocode}
+\def\tikztiming@testfornum@@@@#1{%
+ \begingroup
+ \@temptokena{#1}%
+ \tikztiming@numloop%
+ \endgroup
+ \tikztiming@numint1\relax
+ \tikztiming@numfrac0\relax
+ \expandafter\tikztiming@parser\tikztiming@numchars
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Meta-Characters}
+%
+% \begin{macro}{\tikztimingmetachar}[1]{Meta-character}
+% Checks if there is an optional argument and calls \cs{tikztiming@metachar}
+% appropriately.
+% \begin{macrocode}
+\def\tikztimingmetachar#1{%
+ \@ifnextchar{[}%]
+ {\tikztiming@metachar{#1}}%
+ {\tikztiming@metachar{#1}[]}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@metachar}[3]{Macro character}{Number of
+% Arguments}{Substituted Characters}
+% \begin{macrocode}
+\def\tikztiming@metachar#1[#2]#3{%
+ \ifx\relax#3\relax
+ \expandafter\let\csname tikztiming@metachar@\meaning#1\endcsname\@undefined
+ \else
+ \@namedef{tikztiming@metachar@\meaning#1}{}%
+ \ifx\relax#2\relax
+ \expandafter\renewcommand\expandafter*%
+ \csname tikztiming@metachar@\meaning#1\expandafter
+ \endcsname\expandafter[1]{##1{#3}}%
+ \else
+ \expandafter\renewcommand\expandafter*%
+ \csname tikztiming@metachar@\meaning#1\expandafter
+ \endcsname\expandafter[#2]{#3}%
+ \fi
+ \fi
+ \ifnum\tikztiming@debug=-1
+ \message{^^J Defined meta-char '#1' as:
+ \expandafter\meaning\csname tikztiming@metachar@\meaning#1\endcsname ^^J}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@tikztiming@metachar}[2]{True clause}{False clause}
+% Only works in an argument of |\@ifnextchar|. This macro sets the needed
+% |\@let@token| macro.
+% \begin{macrocode}
+\def\if@tikztiming@metachar#1#2{%
+ \@ifundefined{tikztiming@metachar@\meaning\@let@token}{#2}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Table environment}
+% \begin{macrocode}
+%\usetikzlibrary{backgrounds}
+\newcounter{tikztimingrows}
+% \end{macrocode}
+%
+% \begin{environment}{tikztimingtable}[1]{Optional settings}
+% \begin{macrocode}
+\def\abc{\tracingassigns=1}
+\newenvironment{tikztimingtable}[1][]{%
+ \begingroup
+ \setcounter{tikztiming@nrows}{0}%
+ \def\tikztiming@maxwidth{0.0}%
+ \let\extracode\tikztiming@extracode
+ \let\endextracode\tikztiming@endextracode
+ \let\tablegrid\tikztiming@tablegrid
+ \let\fulltablegrid\tikztiming@fulltablegrid
+ \let\horlines\tikztiming@horlines
+ \let\vertlines\tikztiming@vertlines
+ \let\marknodes\tikztiming@mark@nodes
+ \def\background{\pgfonlayer{background}\scope}%
+ \def\endbackground{\endscope\endpgfonlayer}%
+ \def\tablerules{\tikztiming@tablerules}%
+ \def\tableheader{\tikztiming@tableheader}%
+ \def\rowdist{\tikztiming@rowdist}%
+ \def\coldist{\tikztiming@coldist}%
+ \def\nrows{\the\c@tikztiming@nrows}%
+ \def\twidth{\tikztiming@maxwidth}%
+ \tikzpicture[timing/table,#1]%
+ \coordinate (@last row) at (0,\rowdist);
+ \coordinate (label@header) at ($ -1*(\tikztiming@coldist,0) + 1.5*(0,\tikztiming@rowdist) $);
+ \coordinate (diagram@header) at ($ 1.5*(0,\tikztiming@rowdist) $);
+ \coordinate (timing@table@bottom right) at (0,0);
+ \coordinate (timing@table@bottom left) at ($ -1*(\tikztiming@coldist,0) $);
+ \tikztiming@picinit
+ \tikzset{timing/before table}%
+ \tikztimingtable@checkrow
+}{%
+ \tikzset{timing/after table}%
+ \endtikzpicture
+ \endgroup
+}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\tikztiming@extracode}
+% Set "all rows" rectangle node using the auxiliary coordinates.
+% \begin{macrocode}
+\def\tikztiming@extracode{%
+ \path
+ let
+ \p1 = (row1.north west),
+ \p2 = (timing@table@bottom right),
+ \p3 = (\x2-\x1,\y1-\y2),
+ \p4 = (\pgf@pt@aa * \x3, \pgf@pt@bb * \y3)
+ in
+ node [shape=rectangle,anchor=north west,
+ minimum width=\x4,minimum height=\y4,
+ inner sep=0pt,outer sep=0pt]
+ at (\x1,\y1) (all rows) {}
+ ;
+ \path
+ let
+ \p0 = ($ -1*(\tikztiming@coldist,0) + (0,1) $),
+ \p1 = (label1.north east),
+ \p2 = (timing@table@bottom left),
+ \p3 = (\x0-\x2,\y1-\y2),
+ \p4 = (\pgf@pt@aa * \x3, \pgf@pt@bb * \y3)
+ in
+ node [shape=rectangle,anchor=north east,
+ minimum width=\x4,minimum height=\y4,
+ inner sep=0pt,outer sep=0pt]
+ at (\x1,\y1) (all labels) {}
+ ;
+ \@ifnextchar[{\tikztiming@oset}{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@endextracode}
+% Now empty because \cs{tikztimingtable@chkendec} handles the
+% continuation of the row scanning process.
+% \begin{macrocode}
+\def\tikztiming@endextracode{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingtable@checkrow}
+% Checks the next token to be either \cs{end}, \cs{extracode} or
+% \cs{begin}. In the case of the latter \cs{tikztimingtable@chkbegec}
+% is called to test if it is \cs{begin}|{extracode}|.
+% \begin{macrocode}
+\def\tikztimingtable@checkrow{%
+ \@ifnextchar\end
+ {\tikztimingtable@chkendec}%
+ {\ifx\@let@token\extracode
+ \let\tikztiming@next\empty
+ \else
+ \ifx\@let@token\begin
+ \def\tikztiming@next{\tikztimingtable@chkbegec}%
+ \else
+ \def\tikztiming@next{\tikztimingtable@row}%
+ \fi
+ \fi
+ \tikztiming@next
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingtable@chkbegec}
+% Checks if value of \cs{begin} is |{extracode}|. If so
+% it is executed, otherwise it is taken as normal row and so
+% \cs{tikztimingtable@row} is called.
+% \begin{macrocode}
+\def\tikztimingtable@chkbegec\begin#1{
+ \begingroup
+ \def\@tempa{#1}%
+ \def\@tempb{extracode}%
+ \ifx\@tempa\@tempb
+ \endgroup
+ \def\tikztiming@next{\begin{extracode}}%
+ \else
+ \endgroup
+ \def\tikztiming@next{\tikztimingtable@row\begin{#1}}%
+ \fi
+ \tikztiming@next
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingtable@chkendec}
+% Checks if value of \cs{end} is |{extracode}|. If so
+% it is executed, otherwise it is taken as normal row and so
+% \cs{tikztimingtable@row} is called.
+% \begin{macrocode}
+\def\tikztimingtable@chkendec\end#1{
+ \begingroup
+ \def\@tempa{#1}%
+ \def\@tempb{extracode}%
+ \ifx\@tempa\@tempb
+ \endgroup
+ \def\tikztiming@next{\end{extracode}\tikztimingtable@row}%
+ \else
+ \endgroup
+ \def\tikztiming@next{\end{#1}}%
+ \fi
+ \tikztiming@next
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@oset}
+% [1]{TikZ Keys}
+% Handle optional TikZ settings. The \cs{tikz@options} must be used
+% to ensure that the settings apply for the following graphic paths.
+% \begin{macrocode}
+\def\tikztiming@oset[#1]{%
+ \let\tikz@options\pgfutil@empty
+ \tikzset{#1}%
+ \tikz@options
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@emptycell}
+% Just used as marker. Needs unique definition.
+% \begin{macrocode}
+\def\tikztiming@emptycell{%
+ \@gobble{tikztiming@emptycell}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingtable@row}[1]{Row content}
+% \begin{macrocode}
+\long\def\tikztimingtable@row#1\\{%
+ \tikztimingtable@row@#1&\tikztiming@emptycell&\\
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingtable@row@}[3]{Cell 1}{Cell 2 or empty}{Potential
+% further cells}
+% \begin{macrocode}
+\long\def\tikztimingtable@row@#1&#2&#3\\{%
+ \ifx\\#3\\\else
+ \begingroup
+ \def\@tempa{\tikztiming@emptycell&}%
+ \def\@tempb{#3}%
+ \ifx\@tempa\@tempb\else
+ \PackageWarning{tikz-timing}{%
+ To many columns in tikztimingtable row! Only two are allowed%
+ }{}{}{}%
+ \fi
+ \endgroup
+ \fi
+ \ifx\tikztiming@emptycell#2%
+ \def\tikztiming@next{\tikztimingtable@row@@{#1}{}}%
+ \else
+ \def\tikztiming@next{\tikztimingtable@row@@{#1}{#2}}%
+ \fi
+ \tikztiming@next
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingtable@row@@}[2]{Name/Label}{Timing characters}
+% \begin{macrocode}
+\long\def\tikztimingtable@row@@#1#2{%
+ \addtocounter{tikztiming@nrows}{1}%
+ \coordinate (@last row) at ($ (@last row) - (0,\tikztiming@rowdist) $);
+ \node [anchor=base east,timing/name,alias=last label] (label\the\c@tikztiming@nrows)
+ at ($ (@last row) - (\tikztiming@coldist,0) $) {\ignorespaces #1\unskip\strut};
+ \path let \p1 = (timing@table@bottom left), \p2 = (last label.south west) in
+ coordinate (timing@table@bottom left) at ({min(\x1,\x2)},\y2);
+ %
+ \@ifnextchar{[}%
+ {\tikztiming@tabletiming}%
+ {\tikztiming@tabletiming[]}%
+ #2\relax
+ \path let \p1 = (timing@table@bottom right), \p2 = (timing/end base) in
+ coordinate (timing@table@bottom right) at ({max(\x1,\x2)},\y2);
+ %
+ \pgfmathparse{max(\tikztiming@maxwidth,\tikztimingwidth)}%
+ \let\tikztiming@maxwidth\pgfmathresult
+ \tikztimingtable@checkrow
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\tikztiming@tabletiming}
+% \begin{macrocode}
+\def\tikztiming@tabletiming[#1]#2\relax{%
+ \let\tikztiming@lastchar\empty
+ \let\tikztiming@settings\empty
+ \ifx\relax#1\relax\else
+ \tikztiming@testoptarg#1\relax\relax
+ \fi
+ \ifx\tikztiming@lastchar\empty
+ \def\tikztiming@lastchar{@}%
+ \fi
+ \edef\@tempa{\noexpand\timing
+ [name=row\the\c@tikztiming@nrows,alias=last row,%
+ \expandafter\unexpanded\expandafter{\tikztiming@settings}] at (@last row)}%
+ \expandafter\@tempa\expandafter{\expandafter[\tikztiming@lastchar]#2};
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\tikztiming@fulltablegrid}[1]{Optional settings}
+% \begin{macrocode}
+\newcommand*\tikztiming@fulltablegrid[1][]{%
+ \begin{pgfonlayer}{background}
+ \scope[xstep={\timingwidth/2.},ystep={\timingheight/2.},
+ shift={(all rows.south west)},timing/table/grid,#1]
+ \draw (0,0) grid ($ (all rows.north east) - (all rows.south west) $);
+ \endscope
+ \end{pgfonlayer}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@tablegrid}[1]{Optional settings}
+% \begin{macrocode}
+\def\tikztiming@tablegrid{%
+ \@ifnextchar{*}%
+ {\tikztiming@tablegrid@{row\row.high end}}%
+ {\tikztiming@tablegrid@{all rows.north east}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@tablegrid@@}[2]{Optional settings}{End point}
+% \begin{macrocode}
+\def\tikztiming@tablegrid@#1{%
+ \@ifnextchar{[}%]
+ {\tikztiming@tablegrid@@{#1}}%
+ {\tikztiming@tablegrid@@{#1}[]}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@tablegrid@@}[2]{Optional settings}{End point}
+% \begin{macrocode}
+\def\tikztiming@tablegrid@@#1[#2]{%
+ \begin{pgfonlayer}{background}
+ \scope[xstep={\timingwidth/2.},ystep={\timingheight/2.},timing/table/grid,#2]
+ \foreach \row in {1,...,\nrows} {%
+ \draw {[shift={(row\row.low start)}]
+ let \p1 = (#1) in (0,0) grid (\x1,1)};
+ }%
+ \endscope
+ \end{pgfonlayer}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@tableheader}
+% [3]{Optional Settings}{Text title}{Diagram title}
+% \begin{macrocode}
+\def\tikztiming@tableheader{%
+ \@ifnextchar[%]
+ {\tikztiming@tableheader@}%
+ {\tikztiming@tableheader@@{}[]}%
+}
+\def\tikztiming@tableheader@[#1]{%
+ \@ifnextchar[%]
+ {\tikztiming@tableheader@@{#1}}%
+ {\tikztiming@tableheader@@{#1}[]}%
+}
+\def\tikztiming@tableheader@@#1[#2]#3{%
+ \@ifnextchar[%]
+ {\tikztiming@tableheader@@@{#1}{#2}{#3}}%
+ {\tikztiming@tableheader@@@{#1}{#2}{#3}[]}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@tableheader}
+% [5]{Optional settings}{Optional label@header Settings}{Label title}{Optional Diagram title settings}{Diagram title}
+% \begin{macrocode}
+\def\tikztiming@tableheader@@@#1#2#3[#4]#5{%
+ \path
+ let
+ \p1 = (label@header),
+ \p2 = (all labels.east),
+ \p3 = (all labels.west)
+ in
+ (\x2,\y1) -- node [pos=0,anchor=base east,timing/table/header,timing/table/label header,#1,#2]
+ (label header) {\ignorespaces #3\unskip\strut} (\x3,\y1)
+ ;
+ \path
+ let
+ \p4 = (diagram@header),
+ \p5 = (all rows.west),
+ \p6 = (all rows.east)
+ in
+ (\x5,\y4) -- node [pos=0,anchor=base west,timing/table/header,timing/table/row header,#1,#4]
+ (row header) {\ignorespaces #5\unskip\strut} (\x6,\y4)
+ ;
+ \tikztiming@tableheadtrue
+}
+\newif\iftikztiming@tablehead
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@tablerules}[1]{Optional Settings}
+% \begin{macrocode}
+\newcommand*\tikztiming@tablerules[1][]{%
+ \begin{scope}[#1]
+ \coordinate (NW) at (current bounding box.north west);
+ \coordinate (SE) at (current bounding box.south east);
+ %
+ \draw [timing/table/rules]
+ let
+ \p1 = (NW),
+ \p2 = (SE),
+ \p3 = (@last row),
+ \p4 = (0,\rowdist)
+ in
+ ($ (\x1-\tabcolsep,\y3) - (0,.5*\y4) $) --
+ ($ (\x2+\tabcolsep,\y3) - (0,.5*\y4) $)
+ \iftikztiming@tablehead
+ (\x1-\tabcolsep,2.5*\y4) -- (\x2+\tabcolsep,2.5*\y4)
+ \fi
+ ;
+ \draw
+ \iftikztiming@tablehead [timing/table/midrules] \else [timing/table/rules] \fi
+ let
+ \p1 = (NW),
+ \p2 = (SE)
+ in
+ (\x1-\tabcolsep,\rowdist) -- (\x2+\tabcolsep,\rowdist)
+ ;
+ \end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@horlines}[2]{Optional Settings}{Row numbers}
+% \begin{macrocode}
+\newcommand*\tikztiming@horlines[2][]{%
+ \begingroup
+ \def\list{#2}%
+ \ifx\list\empty
+ \def\list{1,2,...,\nrows}%
+ \fi
+ \foreach \row in \list {%
+ \draw [timing/table/lines,#1] let
+ \p1 = (all rows.south east),
+ \p2 = (0,\rowdist)
+ in
+ ($ (0,\y2) - (0,\row * \y2) $) -- +(\x1,0);
+ }%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@vertlines}[2]{Optional Settings}{Column numbers}
+% \begin{macrocode}
+\newcommand*\tikztiming@vertlines[2][]{%
+ \begingroup
+ \def\list{#2}%
+ \ifx\list\empty
+ \def\list{0,1,...,\twidth}%
+ \fi
+ \draw [timing/table/lines,#1] let
+ \p1 = ($ (all rows.south east) - (0,2) $)
+ in
+ \foreach \clk in \list {
+ (\clk,+1.5) -- +(0,\y1)
+ }
+ ;
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Shapes}
+% \begin{macrocode}
+\pgfdeclareshape{tikztiming@shape}{%
+ \savedanchor\northeast{\tikztiming@northeast}%
+ \savedanchor\startpoint{\tikztiming@startpoint}%
+ \savedanchor\endpoint{\tikztiming@endpoint}%
+ \anchor{center}{\pgfpointorigin}%
+ \anchor{start}{\startpoint}%
+ \anchor{end}{\endpoint}%
+ %
+ \anchor{origin}{\northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }%
+ \anchor{east}{\northeast \pgf@y=0pt }%
+ \anchor{west}{\northeast \pgf@y=0pt \pgf@x=-\pgf@x }%
+ \anchor{north}{\northeast \pgf@x=0pt }%
+ \anchor{north west}{\northeast \pgf@x=-\pgf@x }%
+ \anchor{north east}{\northeast}
+ \anchor{high mid}{\northeast \pgf@x=0pt }%
+ \anchor{high start}{\northeast \pgf@x=-\pgf@x }%
+ \anchor{high end}{\northeast}
+ \anchor{south}{\northeast \pgf@x=0pt \pgf@y=-\pgf@y }%
+ \anchor{south west}{\northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }%
+ \anchor{south east}{\northeast \pgf@y=-\pgf@y }%
+ \anchor{low mid}{\northeast \pgf@x=0pt \pgf@y=-\pgf@y }%
+ \anchor{low start}{\northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }%
+ \anchor{low end}{\northeast \pgf@y=-\pgf@y }%
+ \anchor{mid}{\pgfpointorigin}%
+ \anchor{mid east}{\northeast \pgf@y=0pt }%
+ \anchor{mid west}{\northeast \pgf@y=0pt \pgf@x=-\pgf@x }%
+ \anchor{mid end}{\northeast \pgf@y=0pt }%
+ \anchor{mid start}{\northeast \pgf@y=0pt \pgf@x=-\pgf@x }%
+ \anchor{base}{\northeast \pgf@x=0pt \pgf@y=-\pgf@y }%
+ \anchor{base west}{\northeast \pgf@x=-\pgf@x \pgf@y=-\pgf@y }%
+ \anchor{base east}{\northeast \pgf@y=-\pgf@y }%
+ \anchorborder{%
+ \@tempdima=\pgf@x
+ \@tempdimb=\pgf@y
+ \pgfpointborderrectangle{\pgfpoint{\@tempdima}{\@tempdimb}}{\northeast}%
+ }%
+}
+% \end{macrocode}
+%
+% By default use the old node centers for backwards compatibility.
+% \begin{macrocode}
+\gdef\tikztiming@oldnodecenter@{}%
+\tikzset{timing/old@node@center/.code={\xdef\tikztiming@oldnodecenter@{%
+ ++($ (0,0) - #1 $)
+ [timing/no@old@node@center]}}%
+}%
+\tikzset{timing/no@old@node@center/.code={\gdef\tikztiming@oldnodecenter@{}}}%
+
+\def\tikztiming@oldnodecenter#1{%
+ [timing/old@node@center={#1}]
+ ++#1
+}
+
+% \end{macrocode}
+%
+% \section{Other Macros}
+%
+% \begin{macro}{\tikztiming@iflower}[1]{Character}
+% \begin{macrocode}
+\def\tikztiming@iflower#1{%
+ \begingroup
+ \edef\@tempa{`#1}%
+ \ifnum\@tempa=\lccode\@tempa
+ \endgroup
+ \expandafter
+ \@firstoftwo
+ \else
+ \endgroup
+ \expandafter
+ \@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@internaldefs}[3]{Character}{Character}{Character}
+% \begin{macrocode}
+\def\tikztiming@internaldefs{%
+ \let\draw\relax
+ \let\path\relax
+ \let\p\relax
+ \let\x\relax
+ \let\y\relax
+ \let\n\relax
+ \let\tikztiming@oldnodecenter\relax
+ \let\tikztiming@oldnodecenter@\relax
+ \def\width{####1*\noexpand\timingwidth}%
+ \def\fwidth{\noexpand\timingwidth}%
+ \def\height{\noexpand\timingheight}%
+ \def\slope{\noexpand\timingslope}%
+ \def\zslope{\noexpand\timingzslope}%
+ \def\dslope{\noexpand\timingdslope}%
+ \def\gslope{0}%
+ \def\style{timing/every char,timing/####3}%
+ \def\bgstyle{draw=none,timing/every bg,timing/####3/background}%
+ \def\nstyle{timing/every char,timing/####4}%
+ \def\newdraw{\tikztiming@newdraw}%
+ \def\newdrawns{\tikztiming@newdraw@nosave}%
+ \def\code##1{ [/utils/exec={\unexpanded{##1}}] }%
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\tikztimingsetslope}[1]{Slope value}
+% \begin{macrocode}
+\def\tikztimingsetslope#1{%
+ \pgfmathparse{min(1.0,{max(0.0,#1)})}%
+ \let\tikztiming@slope\pgfmathresult
+ \edef\timingslope{\tikztiming@slope*\noexpand\timingwidth}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingsetdslope}[1]{Slope value}
+% \begin{macrocode}
+\def\tikztimingsetdslope#1{%
+ \pgfmathparse{min(1.0,{max(0.0,#1)})}%
+ \let\tikztiming@dslope\pgfmathresult
+ \edef\timingdslope{\tikztiming@dslope*\noexpand\timingwidth}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingsetzslope}[1]{Slope value}
+% \begin{macrocode}
+\def\tikztimingsetzslope#1{%
+ \pgfmathparse{min(1.0,{max(0.0,#1)})}%
+ \let\tikztiming@zslope\pgfmathresult
+ \edef\timingzslope{\tikztiming@zslope*\noexpand\timingwidth}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\tikztimingsetslope{0.10}%
+\tikztimingsetdslope{0.20}%
+\tikztimingsetzslope{0.05}%
+% \end{macrocode}
+%
+% \section{Timing Character Definition Macros}
+%
+% \begin{macro}{\tikztiminguse}[1]{Character(s)}
+% \begin{macrocode}
+\def\tikztiminguse#1#2{%
+ \@nameuse{\tikztiming@prefix#1}{#2}{##2}{##3}{##4}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingdef}[1]{One till three characters}
+% \begin{macrocode}
+\def\tikztimingdef#1{%
+ \tikztimingdef@#1\empty\empty\relax
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingdef@}[3]{First character}{Second character or
+% empty}{Definition code}
+% \begin{macrocode}
+\def\tikztimingdef@#1#2#3\relax#4{%
+ \ifx\empty#2\empty
+ \tikztiming@nameedef{}{#1}{}{#4}%
+ \else
+ \tikztiming@nameedef{#1}{#2}{#3}{#4}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingcpy}[2]{New Character(s)}{Source Character(s)}
+% \begin{macrocode}
+\def\tikztimingcpy#1#2{%
+ \begingroup
+ \edef\tikztimingcpy@a{#1}%
+ \edef\tikztimingcpy@b{#2}%
+ \ifx\tikztimingcpy@a\tikztimingcpy@b
+ \endgroup
+ %\message{^^J Copy macro '#2' to '#1' skipped.^^J}%
+ \else
+ \endgroup
+ \@ifundefined{\tikztiming@pfxtr#2\empty\empty\empty}%
+ {\ifnum\tikztiming@debug>0\relax
+ \message{^^J Copy macro '#2' to '#1' failed.^^J}\fi}%
+ {\ifnum\tikztiming@debug>0\relax
+ \message{^^J Copy macro '#2' to '#1'.^^J}\fi
+ \expandafter\let
+ \csname\tikztiming@pfxtr#1\empty\empty\empty\expandafter\endcsname
+ \csname\tikztiming@pfxtr#2\empty\empty\empty\endcsname
+ }%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tikztiminglet}[2]{Original characters}{New characters}
+% \begin{macrocode}
+\def\tikztiminglet#1#2{%
+ \tikztiming@namelet{#1}{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tikztiming@chars}[1]{Comma to gobble}
+% Initial definition of character list. Will gobble the separation comma in
+% front of the first character which is added to the list.
+% \begin{macrocode}
+\def\tikztiming@chars#1{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@ifcharexists}[1]{Character to check if in list}
+% \begin{macrocode}
+\def\tikztiming@ifcharexists#1{%
+ \def\tikztiming@ifcharexists@##1,#1,##2\relax{%
+ \ifx\relax##2\relax%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }%
+ \expandafter\tikztiming@ifcharexists@
+ \expandafter,\tikztiming@chars,#1,\relax%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@addchar}[1]{Character}
+% \begin{macrocode}
+\def\tikztiming@addchar#1{%
+ \tikztiming@ifcharexists{#1}{%
+ \edef\tikztiming@chars{\tikztiming@chars,#1}%
+ }{}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingchar}[1]{New character}
+% \begin{macrocode}
+\def\tikztimingchar#1{%
+ \uppercase{%
+ \tikztiming@addchar{#1}%
+ \tikztimingchar@{#1}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\@namedef{\tikztiming@prefix @@}#1#2#3#4{ coordinate (timing/start)}%
+% \end{macrocode}
+%
+% \begin{macro}{\tikztimingchar@}[3]{Character}{Start position}{Character
+% drawing code}
+% \begin{macrocode}
+\def\tikztimingchar@#1#2#3{%
+ \tikztiming@nameedef{@}{#1}{}{#2 coordinate (timing/start) #3}%
+ \tikztimingdef{{#1}{#1}}{#3}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingecopy}[2]{New character}{Original character}
+% \begin{macrocode}
+\def\tikztimingecopy#1#2{%
+ \@namedef{tikztiming@alias@#1}{#2}%
+ \tikztiming@addchar{#1}%
+ \expandafter\let
+ \csname tikztiming@triple@#1\expandafter\endcsname
+ \csname tikztiming@triple@#2\endcsname
+ \expandafter\let
+ \csname tikztiming@nocombine@#1\expandafter\endcsname
+ \csname tikztiming@nocombine@#2\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@setref}[2]{Reference Name}{Shift Offset}
+% \begin{macrocode}
+\def\tikztiming@setref#1#2{%
+ coordinate (#1) coordinate (#1) at ([shift={(#2)}]#1)
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{NewDraw Macros}
+%
+% \begin{macro}{\tikztiming@newdraw}
+% \begin{macrocode}
+\def\tikztiming@newdraw{%
+ node [timing/save] (timing@save) {};%
+ \draw [timing/restore] (timing@save) ++(0,0)
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\tikztiming@newdraw@nosave}
+% \begin{macrocode}
+\def\tikztiming@newdraw@nosave{%
+ node [timing/coord] (timing@save) {};%
+ \draw [timing/nooptions] (timing@save) ++(0,0)
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@baseline}
+% \begin{macrocode}
+\def\tikztiming@baseline{%
+ node [timing/save] (timing@save) {};%
+ \draw [timing/restore] let \p1 = (timing@save) in (\x1,0) ++(0,0)
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Definition of Timing Characters}
+%
+% Pre-define list of timing characters to have it in a sorted fashion.
+% \begin{macrocode}
+\def\tikztiming@chars{H,L,Z,X,M,D,U,T,C}%
+% \end{macrocode}
+%
+% \subsection{Character `S'}
+% This character is now implemented as modifier to avoid hassle with triple
+% character transitions.
+% \begin{macrocode}
+\tikztiming@defcode{S}{%
+ \pgfmathparse{\tikztimingwidth + \tikztiming@num}%
+ \global\let\tikztimingwidth\pgfmathresult
+ \tikztiming@output@Eaddcode{%
+ coordinate (timing@ref) at ($ (timing@ref) + (\tikztiming@num,0) $)
+ coordinate (timing@refa) at ($ (timing@refa) + (\tikztiming@num,0) $)
+ coordinate (timing@refb) at ($ (timing@refb) + (\tikztiming@num,0) $)
+ ++(\tikztiming@num,0)
+ }%
+ \tikztiming@parser
+}
+
+\tikztiming@defcode{s}{%
+ \pgfmathparse{\tikztimingwidth + \tikztiming@num/2}%
+ \global\let\tikztimingwidth\pgfmathresult
+ \tikztiming@output@Eaddcode{%
+ coordinate (timing@ref) at ($ (timing@ref) + (\tikztiming@num/2,0) $)
+ coordinate (timing@refa) at ($ (timing@refa) + (\tikztiming@num/2,0) $)
+ coordinate (timing@refb) at ($ (timing@refb) + (\tikztiming@num/2,0) $)
+ ++(\tikztiming@num/2,0)
+ }%
+ \tikztiming@parser
+}
+% \end{macrocode}
+%
+% \subsection{Character `G'}
+% \begin{macrocode}
+\tikztiming@defcode{G}{%
+ \tikztiming@output@addcode{%
+ \tikztiming@glitch
+ }%
+ \tikztiming@parser
+}
+
+\tikztiming@defcode{g}{%
+ \tikztiming@output@addcode{%
+ \tikztiming@glitch
+ }%
+ \tikztiming@parser
+}
+
+\def\tikztiming@glitch{%
+ {[timing/every char,timing/g] let \p1 = +(0,0) in (\x1,0) -- (\x1,\timingheight)
+ coordinate (timing@dstart) at (\x1,\timingheight/2) (\x1,\y1)
+ }%
+}
+% \end{macrocode}
+%
+% \subsection{Character `H'}
+% \begin{macrocode}
+\tikztimingchar{H}{++(0,\height)}{[\style] -- ++(#1,0)}
+
+\tikztimingdef{HH}{
+ -- ++(#1,0)
+}
+
+\tikztimingdef{LH}{
+ -- +(\slope, \height)
+ -- ++(#1, \height)
+}
+
+\tikztimingdef{ZH}{
+ \newdraw [\style]
+ -- ++(\zslope,+\height/2.)
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{DH}{
+ \tikztiming@oldnodecenter@%
+ \newdraw [\style]
+ -- +(\dslope/2.,\height/2.)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+}
+
+% \end{macrocode}
+%
+% \subsection{Character `L'}
+% \begin{macrocode}
+\tikztimingdef{DL}{
+ \tikztiming@oldnodecenter@
+ \newdraw [\style]
+ -- +(\dslope/2.,-\height/2.)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+}
+
+% \end{macrocode}
+%
+% \subsection{Character `'}
+% \begin{macrocode}
+
+\tikztimingchar{L}{++(0,0)}{[\style] -- ++(#1,0)}
+
+\tikztimingchar{Z}{++(0,\height/2.)}{%
+ \newdraw [\style]
+ -- ++(#1,0)
+}
+
+\tikztimingchar{D}{++(0,\height/2.)}{
+ node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0)
+ -- +(#1,0)
+ -- +($ (#1,0) + 0.5*(\dslope,\height) $)
+ -- +(#1,\height)
+ -- +(0,\height)
+ -- cycle;
+ \draw [timing/restore,\style] (timing@save) ++(0,0)
+ node [timing/save] (timing@dstart) at +(-\dslope/2.,\height/2.0) {}
+ -- +(#1,0) ++(0,+\height)
+ -- ++(#1,0) ++(0,-\height)
+}
+
+\def\tikztiming@triple@D{}%
+\def\tikztiming@triple@D@edge@{}%
+\def\tikztiming@nocombine@D@edge@{}%
+\def\tikztiming@alias@D@edge@{D}%
+% \end{macrocode}
+%
+% \begin{macro}{\tikztiming@trans@D@fill}[2]{Original width}{Width to subtract}
+% \begin{macrocode}
+\def\tikztiming@trans@D@fill#1#2{%
+ node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0)
+ -- +(0.5*\dslope,-0.5*\height)
+ -- ++($ (#1,-0.5*\height) - (#2,0) $)
+ -- +(0.5*\dslope,0.5*\height)
+ -- +(0,\height)
+ -- ++($ (#2,\height) - (#1,0) + (0.5*\dslope,0) $)
+ -- cycle;
+ \draw [timing/restore,\style] (timing@save) ++(0,0)
+ node [timing/save] (timing@dstart) {}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\tikztimingdef{LL}{
+ -- ++(#1,0)
+}
+
+\tikztimingdef{HL}{
+ -- ++(\slope,-\height)
+ \tikztiminguse{HH}{#1-\slope}
+}
+
+
+\tikztimingdef{LZ}{
+ \newdraw [\style]
+ -- ++(\zslope,+\height/2.)
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+\tikztimingdef{HZ}{%
+ \newdraw [\style]
+ -- ++(\zslope,-\height/2.)
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+\tikztimingdef{ZL}{%
+ \newdraw [\style]
+ -- ++(\zslope,-\height/2.)
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{DZ}{
+ \tikztiming@oldnodecenter@
+ \newdraw [\style]
+ -- ($ (timing@ref) + (#1,0) $)
+}
+
+\def\tikztiming@chard#1{%
+ \newdraw [\style,preaction={\bgstyle}]
+ coordinate (timing@dstart)
+ -- +(\dslope/2,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(\dslope/2,-\height/2)
+ -- +(0,-\height)
+ -- ($ (timing@dstart) + (\dslope/2,-\height/2) $)
+ -- (timing@dstart)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ ++(\dslope/2,0)
+ coordinate (timing@dend)
+ \tikztiming@oldnodecenter{%
+ (-\dslope/2,-\height/2)
+ }%
+ \newdraw [timing/every char]
+}
+
+\def\tikztiming@chard@#1{%
+ \newdraw [\bgstyle]
+ -- +(\dslope/2,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(0,-\height)%
+ -- ($ (timing@save) + (\dslope/2,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ coordinate (timing@dstart)
+ -- +(\dslope/2,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ +(0,-\height)%
+ -- ($ (timing@save) + (\dslope/2,-\height/2) $)
+ -- (timing@save)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ \tikztiming@setref{timing@dend}{\dslope/2,0}
+ \tikztiming@oldnodecenter{%
+ (0,-\height/2)
+ }%
+ \newdraw [timing/every char]
+}
+
+\def\tikztiming@@chard#1{%
+ ++(0,\height/2)
+ \newdraw [\bgstyle]
+ -- +(0,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(\dslope/2,-\height/2)
+ -- +(0,-\height)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ +(0,0)
+ coordinate (timing/start)
+ +(-\dslope/2,0)
+ coordinate (timing@dstart)
+ +(0,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(\dslope/2,-\height/2)
+ -- +(0,-\height)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ ++(\dslope/2,0)
+ coordinate (timing@dend)
+ \tikztiming@oldnodecenter{%
+ (-\dslope/2,-\height/2)
+ }%
+ \newdraw [timing/every char]
+}
+
+\def\tikztiming@@chard@#1{%
+ ++(0,\height/2)
+ \newdraw [\bgstyle]
+ -- +(0,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(0,-\height)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ +(0,0)
+ coordinate (timing/start)
+ coordinate (timing@ref)
+ \tikztiming@setref{timing@dstart}{-\dslope/2,0}
+ +(0,\height/2)
+ -- +(#1,\height/2)
+ +(#1,-\height/2)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ ++(#1,\height/2)
+ coordinate (timing@ref)
+ \tikztiming@setref{timing@dend}{\dslope/2,0}
+ \tikztiming@oldnodecenter{%
+ (0,-\height/2)
+ }%
+ \newdraw [timing/every char]
+}
+
+\def\tikztiming@dchardu#1{%
+ \tikztiming@oldnodecenter@
+ \newdraw [\bgstyle]
+ -- +(0,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(\dslope/2,-\height/2)
+ -- +(0,-\height)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ +(0,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(\dslope/2,-\height/2)
+ -- +(0,-\height)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ ++(\dslope/2,0)
+ coordinate (timing@dend)
+ \tikztiming@oldnodecenter{%
+ (-\dslope/2,-\height/2)
+ }%
+ \newdraw [timing/every char]
+}
+
+\def\tikztiming@uchardd#1{%
+ \tikztiming@oldnodecenter@
+ \newdraw [\bgstyle]
+ -- +(\dslope/2,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(0,-\height)
+ -- ($ (timing@save) + (\dslope/2,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ coordinate (timing@dstart)
+ -- +(\dslope/2,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ +(0,-\height)
+ -- ($ (timing@save) + (\dslope/2,-\height/2) $)
+ -- (timing@save)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ coordinate [shift={(\dslope/2,0)}](timing@dend)
+ \tikztiming@oldnodecenter{%
+ ($ (0,0) - (0,\height/2) $)
+ }%
+ \newdraw [timing/every char]
+}
+
+\tikztimingdef{DD}{%
+ \tikztiming@dchardu{#1}%
+}
+
+\tikztimingdef{UU}{%
+ \tikztiming@dchardu{#1}%
+}
+
+\def\tikztiming@dchard@#1{%
+ \tikztiming@oldnodecenter@
+ \newdraw [\bgstyle]
+ -- +(0,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- +(0,-\height)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ +(0,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ +(0,-\height)
+ -- ($ (timing@save) + (0,-\height/2) $)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ \tikztiming@setref{timing@dend}{\dslope/2,0}
+ \tikztiming@oldnodecenter{%
+ (0,-\height/2)
+ }%
+ \newdraw [timing/every char]
+}
+
+\tikztimingdef{DD@}{
+ \tikztiming@dchard@{#1}%
+}
+
+\tikztimingcpy{DDD}{DD@}
+\tikztimingcpy{UUU}{DDD}
+
+\tikztimingdef{{D@edge@}{D@edge@}}{%
+ \tikztiming@oldnodecenter@
+ \tikztiming@chard{#1}%
+}%
+
+\tikztimingdef{@{D@edge@}}{%
+ \tikztiming@@chard@{#1}%
+}%
+
+\tikztimingdef{@{D@edge@}@}{%
+ \tikztiming@@chard@{#1}%
+}%
+
+\tikztimingdef{@{D@edge@}D}{%
+ \tikztiming@@chard{#1}%
+}
+
+\tikztimingdef{D{D@edge@}}{%
+ \tikztiming@dchardu{#1}%
+}
+
+\tikztimingdef{U{U@edge@}}{%
+ \tikztiming@dchardu{#1}%
+}
+
+\tikztimingdef{U{D@edge@}}{%
+ \tikztiming@oldnodecenter@
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{U{D@edge@}@}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{D{U@edge@}}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{D{U@edge@}@}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{D{D@edge@}@}{%
+ \tikztiming@dchard@{#1}%
+}%
+
+\tikztimingdef{U{U@edge@}@}{%
+ \tikztiming@dchard@{#1}%
+}%
+
+\tikztimingdef{{D@edge@}{D@edge@}@}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard@{#1}%
+}%
+
+\tikztimingdef{@{D@edge@}}{%
+ \tikztiming@@chard{#1}%
+}%
+
+\tikztimingdef{{D@edge@}D}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard{#1}%
+}%
+
+\tikztimingdef{{D@edge@}D@}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard@{#1}%
+}%
+
+\tikztimingdef{ZDZ}{
+ coordinate (timing@ref)
+ \tikztiming@chard{#1}
+}
+\tikztimingcpy{ZDX}{ZDZ}
+\tikztimingcpy{XDX}{ZDZ}
+\tikztimingcpy{XDZ}{ZDZ}
+
+\tikztimingdef{ZDD}{
+ coordinate (timing@ref)
+ \tikztiming@chard@{#1}
+}
+
+\tikztimingdef{ZDU}{
+ coordinate (timing@ref)
+ \tikztiming@chard{#1}
+}
+
+\tikztimingcpy{ZUD}{ZDU}
+\tikztimingcpy{ZUU}{ZDD}
+
+\tikztimingdef{ZD}{
+ coordinate (timing@ref)
+ \tikztiming@chard{#1}
+}
+
+\tikztimingdef{@DD}{%
+ \tikztiming@@chard@{#1}%
+}
+
+\tikztimingdef{ZD@}{%
+ coordinate (timing@ref)
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{HD@}{%
+ \tikztiming@setref{timing@ref}{0,-\height/2}
+ -- ++(\dslope/2, -\height/2)
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{TD@}{%
+ \tikztiming@setref{timing@ref}{0,-\height/2 * \value{tikztimingtrans}}
+ -- ++(\dslope/2, -\height/2 * \value{tikztimingtrans})
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{TD}{%
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \tikztiming@setref{timing@ref}{0,\height/2 * \value{tikztimingtrans}}
+ -- ++(\dslope/2, \height/2 * \value{tikztimingtrans})
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{TDD}{%
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \tikztiming@setref{timing@ref}{0,\height/2 * \value{tikztimingtrans}}
+ -- ++(\dslope/2, \height/2 * \value{tikztimingtrans})
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{TUD}{%
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \tikztiming@setref{timing@ref}{0,\height/2 * \value{tikztimingtrans}}
+ -- ++(\dslope/2, \height/2 * \value{tikztimingtrans})
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingcpy{TDU}{TUD}
+\tikztimingcpy{TUU}{TDD}
+
+\tikztimingdef{LD@}{%
+ \tikztiming@setref{timing@ref}{0,\height/2}
+ -- ++(\dslope/2, \height/2)
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{@D}{%
+ \tikztiming@@chard@{#1}%
+}
+
+\tikztimingdef{@D@}{%
+ \tikztiming@@chard@{#1}%
+}
+
+\tikztimingcpy{H{D@edge@}@}{HD@}
+\tikztimingcpy{L{D@edge@}@}{LD@}
+\tikztimingcpy{Z{D@edge@}@}{ZD@}
+\tikztimingcpy{T{D@edge@}@}{TD@}
+
+\tikztimingdef{@DZ}{%
+ \tikztiming@@chard{#1}%
+}
+\tikztimingdef{@DH}{%
+ \tikztiming@@chard{#1}%
+}
+\tikztimingdef{@DL}{%
+ \tikztiming@@chard{#1}%
+}
+\tikztimingdef{@DT}{%
+ \tikztiming@@chard{#1}%
+}
+
+\tikztimingdef{LD}{
+ \tikztiming@setref{timing@ref}{0,\height/2}
+ -- ++(\dslope/2, \height/2)
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{LDD}{
+ \tikztiming@setref{timing@ref}{0,\height/2}
+ -- ++(\dslope/2, \height/2)
+ \tikztiming@chard@{#1}
+}
+
+\tikztimingdef{LDU}{
+ \tikztiming@setref{timing@ref}{0,\height/2}
+ -- ++(\dslope/2, \height/2)
+ \tikztiming@chard{#1}
+}
+
+\tikztimingcpy{LUD}{LDU}
+\tikztimingcpy{LUU}{LDD}
+
+\tikztimingdef{HD}{
+ \tikztiming@setref{timing@ref}{0,-\height/2}
+ -- ++(\dslope/2, -\height/2)
+ \tikztiming@chard{#1}
+}
+
+\tikztimingdef{HDD}{
+ \tikztiming@setref{timing@ref}{0,-\height/2}
+ -- ++(\dslope/2, -\height/2)
+ \tikztiming@chard@{#1}
+}
+
+\tikztimingdef{HDU}{
+ \tikztiming@setref{timing@ref}{0,-\height/2}
+ -- ++(\dslope/2, -\height/2)
+ \tikztiming@chard{#1}
+}
+\tikztimingcpy{HUD}{HDU}
+\tikztimingcpy{HUU}{HDD}
+
+% \end{macrocode}
+%
+% \subsection{Character `M'}
+% \begin{macrocode}
+\tikztimingecopy{M}{Z}
+\tikztimingchar{M}{++(0,\height/2.)}{
+ \newdraw [\style]
+ -- ++(#1,0)
+ \newdraw [\style/base]
+}
+
+\tikztimingdef{ZM}{
+ \newdraw [\style]
+ -- ++(#1,0)
+ \newdraw [\style/base]
+}
+
+\tikztimingdef{LM}{
+ \newdraw [\style/base]
+ -- ++($ (1/8,0) + (0,\height/2) $)
+ \newdraw [\style]
+ -- ++($ (-1/8,0) + (#1,0) $)
+ \newdraw [\style/base]
+}
+
+\tikztimingdef{HM}{
+ \newdraw [\style/base]
+ -- ++($ (1/8,0) + (0,-1*\height/2) $)
+ \newdraw [\style]
+ -- ++($ (-1/8,0) + (#1,0) $)
+ \newdraw [\style/base]
+}
+
+\tikztimingdef{DM}{
+ \tikztiming@oldnodecenter@%
+ \newdraw [\style]
+ -- ($ (timing@ref) + (#1,0) $)
+ \newdraw [\style/base]
+}
+
+% \end{macrocode}
+%
+% \subsection{Character `T'}
+% \begin{macrocode}
+\newcounter{tikztimingtrans}
+\newcounter{tikztimingtranspos}
+
+\tikztimingchar{T}{++(0,0)}{
+ -- ++(#1,0)
+}
+\def\tikztiming@nocombine@T{}%
+
+\tikztimingdef{HT}{%
+ {[\style]
+ \code{\setcounter{tikztimingtrans}{-1}}
+ -- ++(\slope,\value{tikztimingtrans}*\height) -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{LT}{%
+ {[\style]
+ \code{\setcounter{tikztimingtrans}{+1}}
+ -- ++(\slope,\value{tikztimingtrans}*\height) -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{TL}{%
+ \code{\setcounter{tikztimingtranspos}{\value{tikztimingtrans}}%
+ \addtocounter{tikztimingtranspos}{+1}}
+ -- ++(\slope, -0.5*\value{tikztimingtranspos}*\height) -- ++($ (#1,0) - (\slope,0) $)
+}
+
+\tikztimingdef{TH}{%
+ \code{\setcounter{tikztimingtranspos}{\value{tikztimingtrans}}%
+ \addtocounter{tikztimingtranspos}{-1}}
+ -- ++(\slope, -0.5*\value{tikztimingtranspos}*\height) -- ++($ (#1,0) - (\slope,0) $)
+}
+
+\tikztimingdef{TZ}{%
+ \newdraw [\style]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++(\zslope,\value{tikztimingtrans}*\height/2.)
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{ZT}{%
+ \newdraw [timing/every char] {[\style]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++(\zslope,\value{tikztimingtrans}*\height/2.)
+ -- ++($ (#1,0) - (\zslope,0) $)
+ }
+}
+
+\tikztimingdef{TT}{%
+ {[\style]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++(\slope,\value{tikztimingtrans}*\height)
+ -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{DT}{
+ \code{\setcounter{tikztimingtrans}{-1}}
+ \tikztiming@oldnodecenter@%
+ \newdraw [timing/every char] {[\style]
+ -- +(\dslope/2.,-\height/2)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ }
+}
+
+\tikztimingdef{TM}{%
+ \newdraw [\style/base]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++($ (1/8,0) + (0,\value{tikztimingtrans}*\height/2) $)
+ \newdraw [\style]
+ -- ++($ (-1/8,0) + (#1,0) $)
+ \newdraw [\style/base]
+}
+% \end{macrocode}
+%
+% \subsection{Character `C'}
+% \begin{macrocode}
+\tikztimingecopy{C}{T}
+% \end{macrocode}
+%
+% \subsection{Character `U'}
+% \begin{macrocode}
+\tikztimingecopy{U}{D}
+
+\def\tikztiming@triple@U@edge@{}%
+\def\tikztiming@nocombine@U@edge@{}%
+\def\tikztiming@alias@U@edge@{D@edge@}%
+
+\tikztimingcpy{UU@}{DD@}%
+
+\tikztimingdef{UDU}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard{#1}%
+}
+\tikztimingcpy{DUD}{UDU}%
+
+\tikztimingdef{UDD}{%
+ \tikztiming@uchardd{#1}%
+}
+
+\tikztimingcpy{{D@edge@}DD}{UDD}
+\tikztimingcpy{{U@edge@}UU}{{D@edge@}DD}
+
+\tikztimingdef{H{D@edge@}}{
+ \tikztiming@setref{timing@ref}{0,-\height/2}
+ -- ++(\dslope/2, -\height/2)
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{L{D@edge@}}{
+ \tikztiming@setref{timing@ref}{0,\height/2}
+ -- ++(\dslope/2, \height/2)
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{Z{D@edge@}}{
+ coordinate (timing@ref)
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{T{D@edge@}}{
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \tikztiming@setref{timing@ref}{0,\height/2 * \value{tikztimingtrans}}
+ -- ++(\dslope/2, \height/2 * \value{tikztimingtrans})
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{{D@edge@}DU}{
+ \tikztiming@oldnodecenter@
+ \tikztiming@chard{#1}
+}
+\tikztimingcpy{{U@edge@}UD}{{D@edge@}DU}
+
+\tikztimingdef{DDU}{%
+ \tikztiming@dchardu{#1}
+}
+
+\tikztimingcpy{DUU}{UDD}%
+\tikztimingcpy{UUD}{DDU}%
+
+\tikztimingdef{@UU}{%
+ \tikztiming@@chard@{#1}%
+}
+
+\tikztimingdef{@UD}{%
+ \tikztiming@@chard{#1}%
+}
+
+\tikztimingdef{@DU}{%
+ \tikztiming@@chard{#1}%
+}
+
+\tikztimingdef{UD}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{DU}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard{#1}%
+}
+
+\tikztimingdef{UD@}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard@{#1}%
+}
+
+\tikztimingdef{DU@}{%
+ \tikztiming@oldnodecenter@%
+ \tikztiming@chard@{#1}%
+}
+
+% \end{macrocode}
+%
+% \subsection{Character `X'}
+% \begin{macrocode}
+\tikztimingecopy{X}{Z}
+% \end{macrocode}
+%
+% Save current list of characters as list of default characters.
+% \begin{macrocode}
+\let\tikztiming@chars@default\tikztiming@chars
+% \end{macrocode}
+%
+% \clearpage
+% \section{Libraries}
+%
+% \begin{macrocode}
+\newcommand*\usetikztiminglibrary[2][]{%
+ \edef\tikztiming@library@options{#1}%
+ \@ifnextchar{[}%]
+ {\tikztiming@library{#2}}%
+ {\tikztiming@library{#2}[]}%
+}
+\def\tikztiming@library#1[#2]{%
+ \edef\tikztiming@library@date{#2}%
+ \tikztiming@library@#1,\relax
+}
+% \end{macrocode}
+% Load the library as package. The \LaTeX\ core macro \cs{zap@space} is patched
+% to a no-op to keep spaces in the option text. Otherwise the option keys may
+% not contain spaces.
+% \begin{macrocode}
+\def\tikztiming@zap@space#1 \@empty{#1}
+
+\def\tikztiming@library@#1,{%
+ \IfFileExists{tikz-timing-#1.sty}%
+ { \let\tikztiming@orig@zap@space\zap@space
+ \let\zap@space\tikztiming@zap@space
+ \RequirePackage
+ [\tikztiming@library@options]%
+ {tikz-timing-#1}%
+ [\tikztiming@library@date]%
+ \let\zap@space\tikztiming@orig@zap@space
+ }%
+ {\PackageError{tikz-timing}%
+ {No tikz-timing library `#1' found!}{}%
+ }%
+ \@ifnextchar\relax{}{\tikztiming@library@}%
+}
+% \end{macrocode}
+% \iffalse
+%</tikz-timing.sty>
+% \fi
+%
+% \subsection{Libraries}
+%
+% \subsubsection{Either High or Low}
+% \iffalse
+%<*tikz-timing-either.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-either}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for uncertain transitions]
+% \end{macrocode}
+%
+% Provides character "E".
+% \begin{macrocode}
+\tikztimingchar{E}{
+ ++(0,0)
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+}{
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+ \tikztiminguse{D}{#1}%
+ \newdraw [\style]
+}
+\def\tikztiming@triple@E{}%
+
+\tikztimingdef{LE@}{%
+ \newdraw [\bgstyle]
+ -- ++(\slope,\height)%
+ -- ++($ (#1,0) - (\slope,0) $)%
+ -- ++(0,-\height)%
+ -- ++($ -1*(#1,0) $)%
+ \newdraw [\style]
+ -- ++(\slope,\height)%
+ -- ++($ (#1,0) - (\slope,0) $)%
+ ++($ -1*(#1,\height) $)%
+ -- ++($ 1*(#1,0) $)%
+ ++(0,.5\height)%
+ \newdraw [\nstyle]
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+}%
+
+\tikztimingdef{HE@}{%
+ \newdraw [\bgstyle]
+ -- ++(\slope,-\height)%
+ -- ++($ (#1,0) - (\slope,0) $)%
+ -- ++(0,\height)%
+ -- ++($ -1*(#1,0) $)%
+ \newdraw [\style]
+ -- ++(\slope,-\height)%
+ -- ++($ (#1,0) - (\slope,0) $)%
+ ++($ -1*(#1,-\height) $)%
+ -- ++($ 1*(#1,0) $)%
+ ++(0,-.5\height)%
+ \newdraw [\nstyle]
+ \code{\setcounter{tikztimingtranspos}{1}}%
+ \code{\setcounter{tikztimingtrans}{-1}}%
+}%
+
+\tikztimingdef{TE@}{%
+ \newdraw [\bgstyle]
+ -- ++(\slope,-\height * \value{tikztimingtrans})%
+ -- ++($ (#1,0) - (\slope,0) $)%
+ -- ++(0,\height * \value{tikztimingtrans})%
+ -- ++($ -1*(#1,0) $)%
+ \newdraw [\style]
+ -- ++(\slope,-\height * \value{tikztimingtrans})%
+ -- ++($ (#1,0) - (\slope,0) $)%
+ ++($ -1*(#1,-\height * \value{tikztimingtrans}) $)%
+ -- ++($ 1*(#1,0) $)%
+ ++(0,-1*\value{tikztimingtrans}*.5*\height)%
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{LEL}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\slope,\height)%
+ -- +(#1,\height)%
+ -- +($ (#1,0) + (\slope,0) $)%
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\slope,-\height/2)%
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{LEH}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\slope,\height)%
+ -- +($ (#1,\height) + (\slope,0) $)%
+ -- +(#1,0)%
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\slope,\height/2)%
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{HEH}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +($ (#1,0) + (\slope,0) $)%
+ -- +(#1,-\height)%
+ -- +(\slope,-\height)
+ -- +(0,0)
+ ++(#1,-\height/2) coordinate (timing@ref)
+ ++(\slope,\height/2)%
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{HEL}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(#1,0)
+ -- +($ (#1,-\height) + (\slope,0) $)%
+ -- +(\slope,-\height)
+ -- +(0,0)
+ ++(#1,-\height/2) coordinate (timing@ref)
+ ++(\slope,-\height/2)%
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{HET}{
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(#1,0)
+ {[\nstyle]
+ -- +($ (#1,-\height) + (\slope,0) $)%
+ }
+ -- +(\slope,-\height)
+ -- +(0,0)
+ {[\nstyle]
+ ++(#1,-\height/2) coordinate (timing@ref)
+ ++(\slope,-\height/2)%
+ }
+ \newdraw [\nstyle]
+ \code{\setcounter{tikztimingtrans}{-1}}%
+}
+
+\tikztimingdef{LET}{
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\slope,\height)%
+ {[\nstyle]
+ -- +($ (#1,\height) + (\slope,0) $)%
+ }
+ -- +(#1,0)%
+ -- +(0,0)
+ {[\nstyle]
+ ++(#1,\height/2)%
+ coordinate (timing@ref)
+ ++(\slope,\height/2)%
+ }
+ \newdraw [\nstyle]
+ \code{\setcounter{tikztimingtrans}{1}}%
+}
+
+\tikztimingdef{HEE}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(#1,0) coordinate (timing@refb)
+ \tikztiming@setref{timing@ref}{0,-\height/2}
+ -- +($ (#1,-\height) + (\slope,0) $) coordinate (timing@refa)
+ -- +(\slope,-\height)
+ -- +(0,0)
+ \tikztiming@setref{timing@ref}{#1,-\height/2}
+ ++($ (#1,-\height) + (\slope,0) $)%
+ \code{\setcounter{tikztimingtranspos}{1}}%
+ \code{\setcounter{tikztimingtrans}{-1}}%
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{LEE}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(#1,0) coordinate (timing@refa)
+ \tikztiming@setref{timing@ref}{0,\height/2}
+ -- +($ (#1,\height) + (\slope,0) $) coordinate (timing@refb)
+ -- +(\slope,\height)
+ -- +(0,0)
+ ++(#1,0) \tikztiming@setref{timing@ref}{0,\height/2}
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{TEE}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\slope, -\height * \value{tikztimingtrans})%
+ -- +($ (#1,0) + (\slope, -\height * \value{tikztimingtrans}) $)
+ -- +(#1,0)
+ -- +(0,0)%
+ \code{\setcounter{tikztimingtranspos}{\value{tikztimingtrans}}%
+ \addtocounter{tikztimingtranspos}{+1}}
+ +($ (#1,0) + (\slope/2 + \slope/2 * \value{tikztimingtrans}, -\height/2 * \value{tikztimingtranspos}) $)
+ coordinate (timing@refa)
+ +($ (#1,0) + (\slope/2 - \slope/2 * \value{tikztimingtrans}, \height - \height/2 * \value{tikztimingtranspos}) $)
+ coordinate (timing@refb)
+ ++(#1,0)
+ \tikztiming@setref{timing@ref}{0,-\height/2 * \value{tikztimingtrans}}
+ ++(
+ .5 * \slope + .5 * \value{tikztimingtrans} * \slope,
+ -.5 * \height - .5 * \value{tikztimingtrans} * \height
+ )
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \newdraw [\nstyle]
+}%
+
+
+\tikztimingdef{TEH}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- ++(\slope,-\height * \value{tikztimingtrans})
+ -- ++($ (#1,0) - (\slope/2 + \slope/2 * \value{tikztimingtrans},0) $)
+ -- ++(\slope * \value{tikztimingtrans},
+ \height * \value{tikztimingtrans})
+ -- ++($ -1*(#1,0) - (\slope/2 + \slope/2 * \value{tikztimingtrans},0) $)
+ ++($ (#1,-\height/2 * \value{tikztimingtrans}) $) coordinate (timing@ref)
+ ++(\slope,\height/2)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{TEL}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- ++(\slope,-\height * \value{tikztimingtrans})
+ -- ++($ (#1,0) - (\slope/2 - \slope/2 * \value{tikztimingtrans},0) $)
+ -- ++(-\slope * \value{tikztimingtrans},
+ \height * \value{tikztimingtrans})
+ -- ++($ -1*(#1,0) - (\slope/2 + -\slope/2 * \value{tikztimingtrans},0) $)
+ ++($ (#1,-\height/2 * \value{tikztimingtrans}) $) coordinate (timing@ref)
+ ++(\slope,-\height/2)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{TEZ}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- ++(\slope,-\height * \value{tikztimingtrans})
+ -- ++($ (#1,0) - (\slope,0) $)
+ -- ++(\zslope,
+ \height/2 * \value{tikztimingtrans})
+ -- ++(-\zslope,
+ \height/2 * \value{tikztimingtrans})
+ -- ++($ -1*(#1,0) $)
+ ++($ (#1,0) + (0,-\height/2 * \value{tikztimingtrans}) $)
+ coordinate (timing@ref)
+ ++(\zslope,0)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{TED}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- ++(\slope,-\height * \value{tikztimingtrans})
+ -- ++($ (#1,0) - (\slope,0) $)
+ -- ++(\dslope/2,
+ \height/2 * \value{tikztimingtrans})
+ -- ++(-\dslope/2,
+ \height/2 * \value{tikztimingtrans})
+ -- ++($ -1*(#1,0) $)
+ ++($ (#1,0) + (0,-\height/2 * \value{tikztimingtrans}) $)
+ coordinate (timing@ref)
+ ++(\dslope/2,0)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{TET}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\slope, -\height * \value{tikztimingtrans})%
+ {[\nstyle]
+ -- +($ (#1,0) + (\slope, -\height * \value{tikztimingtrans}) $)%
+ }
+ -- +(#1,0)%
+ -- +(0,0)%
+ {[\nstyle]
+ ++($ (#1,0) + (0, -\height/2 * \value{tikztimingtrans}) $)%
+ coordinate (timing@ref)
+ ++(\slope, -\height/2 * \value{tikztimingtrans})%
+ }
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{EEZ}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- (timing@refb)
+ -- ($ (timing@ref) + (#1,+\height/2) $)
+ -- ($ (timing@ref) + (#1,0) + (\zslope,0) $)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- (timing@refa)
+ ($ (timing@ref) + (#1,0) + (\zslope,0) $)
+ coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $)
+ \newdraw
+}%
+
+\tikztimingdef{EED}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- (timing@refb)
+ -- ($ (timing@ref) + (#1,+\height/2) $)
+ -- ($ (timing@ref) + (#1,0) + (\dslope/2,0) $)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- (timing@refa)
+ ($ (timing@ref) + (#1,0) + (\dslope/2,0) $)
+ coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $)
+ \newdraw
+}%
+
+
+\tikztimingdef{HEZ}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(#1,0)
+ -- +($ (#1,-\height/2) + (\zslope,0) $)%
+ -- +(#1,-\height)
+ -- +(\slope,-\height)
+ -- +(0,0)
+ ++(#1,-\height/2) coordinate (timing@ref)
+ ++(\zslope,0)%
+ \newdraw
+}%
+
+
+\tikztimingdef{LEZ}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\slope,\height)
+ -- +(#1,\height)
+ -- +($ (#1,\height/2) + (\zslope,0) $)%
+ -- +(#1,0)
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\zslope,0)%
+ \newdraw
+}%
+
+
+\tikztimingdef{LED}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\slope,\height)
+ -- +(#1,\height)
+ -- +($ (#1,\height/2) + (\dslope/2,0) $)%
+ -- +(#1,0)
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\dslope/2,0)%
+ \newdraw
+}%
+
+\tikztimingdef{HED}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(#1,0)
+ -- +($ (#1,-\height/2) + (\dslope/2,0) $)%
+ -- +(#1,-\height)
+ -- +(\slope,-\height)
+ -- +(0,0)
+ ++(#1,-\height/2) coordinate (timing@ref)
+ ++(\dslope/2,0)%
+ \newdraw
+}%
+
+
+\tikztimingdef{EZ}{%
+ \newdraw [\style]
+ -- ($ (timing@ref) + (#1,0) $)%
+}
+
+\tikztimingdef{EM}{%
+ \newdraw [\style]
+ -- ($ (timing@ref) + (#1,0) $)%
+ \newdraw [\style/base]
+}
+
+\tikztimingdef{EL}{%
+ -- ($ (timing@ref) + (#1,-\height/2) $)%
+}%
+\tikztimingdef{EH}{%
+ -- ($ (timing@ref) + (#1,+\height/2) $)%
+}%
+
+\tikztimingdef{ED@}{%
+ \tikztiming@chard@{#1}%
+}
+\tikztimingcpy{E{D@edge@}@}{ED@}
+
+\tikztimingdef{ED}{%
+ \tikztiming@chard{#1}%
+}
+\tikztimingcpy{E{D@edge@}}{ED}
+\tikztimingdef{EDD}{%
+ \tikztiming@chard@{#1}%
+}
+\tikztimingdef{EUU}{%
+ \tikztiming@chard@{#1}%
+}
+\tikztimingdef{EDU}{%
+ \tikztiming@chard{#1}%
+}
+\tikztimingdef{EUD}{%
+ \tikztiming@chard{#1}%
+}
+
+
+\tikztimingdef{DE@}{%
+ \tikztiming@oldnodecenter@%
+ \newdraw [\bgstyle]
+ -- +(\dslope/2,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)%
+ -- ($ (timing@ref) + (#1,-\height/2) $)%
+ -- ($ (timing@save) + (\dslope/2,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ -- +(\dslope/2,\height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)%
+ ($ (timing@ref) + (#1,-\height/2) $)%
+ -- ($ (timing@save) + (\dslope/2,-\height/2) $)
+ -- (timing@save)
+ ($ (timing@ref) + (#1,0) $)%
+ coordinate (timing@ref)
+}
+
+\tikztimingdef{EEE}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- (timing@refb)
+ -- ($ (timing@refb) + (#1,0) $)
+ -- ($ (timing@refa) + (#1,0) $)
+ -- (timing@refa)
+ ++(#1,0) coordinate (timing@refa)
+ coordinate (timing@refb) at ($ (timing@refb) + (#1,0) $)
+ coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $)
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{EET}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- (timing@refb)
+ {[\nstyle]
+ -- ($ (timing@ref) + (#1,+\height/2) + (\slope/2 + \slope/2 * \value{tikztimingtrans},0) $)
+ -- ($ (timing@ref) + (#1,-\height/2) + (\slope/2 - \slope/2 * \value{tikztimingtrans},0) $)
+ }
+ -- (timing@refa)
+ {[\nstyle]
+ ($ (timing@ref) + (#1,\height/2 * \value{tikztimingtrans}) + (\slope,0) $)
+ }
+ coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $)
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{EEL}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- (timing@refb)
+ -- ($ (timing@ref) + (#1,+\height/2) $)
+ -- ($ (timing@ref) + (#1,-\height/2) + (\slope,0) $)
+ -- (timing@refa)
+ ($ (timing@ref) + (#1,-\height/2) + (\slope,0) $)
+ coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $)
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{EEH}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- (timing@refb)
+ -- ($ (timing@ref) + (#1,+\height/2) + (\slope,0) $)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- (timing@refa)
+ ($ (timing@ref) + (#1,+\height/2) + (\slope,0) $)
+ coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $)
+ \newdraw [\nstyle]
+}%
+
+
+\tikztimingdef{EE@}{%
+ \newdraw [\bgstyle]
+ let \p0 = (timing@ref), \p1 = (timing@refa), \p2 = (timing@refb) in
+ -- (\p2)
+ -- ($ (\x0,\y2) + (#1,0) $)
+ -- +(0,\y1-\y2)
+ -- (\p1)
+ \newdraw [\style]
+ let \p0 = (timing@ref), \p1 = (timing@refa), \p2 = (timing@refb) in
+ -- (\p2)
+ -- ($ (\x0,\y2) + (#1,0) $)
+ +(0,\y1-\y2)
+ -- (\p1)
+ ($ (timing@ref) + (#1,0) $) coordinate (timing@ref)
+ \newdraw [\nstyle]
+}%
+
+\tikztimingdef{ZE@}{
+ \newdraw [\bgstyle]
+ -- +(\zslope,\height/2)
+ -- +(#1,\height/2)%
+ -- +(#1,-\height/2)%
+ -- +(\zslope,-\height/2)
+ -- +(0,0)
+ \newdraw [\style]
+ -- +(\zslope,\height/2)
+ -- +(#1,\height/2)%
+ +(#1,-\height/2)%
+ -- +(\zslope,-\height/2)
+ -- +(0,0)
+ ++(#1,0) coordinate (timing@ref)
+}
+
+\tikztimingdef{ZEH}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\zslope, \height/2)
+ -- +($ (#1,0) + (\slope, \height/2) $)
+ -- +(#1,-\height/2)
+ -- +(\zslope, -\height/2)
+ -- +(0,0)
+ ++(#1,0) coordinate (timing@ref)
+ ++(\slope, \height/2)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{ZEL}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\zslope, \height/2)
+ -- +(#1,\height/2)
+ -- +($ (#1,0) + (\slope, -\height/2) $)
+ -- +(\zslope, -\height/2)
+ -- +(0,0)
+ ++(#1,0) coordinate (timing@ref)
+ ++(\slope, -\height/2)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{ZET}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\zslope, \height/2)
+ {[\nstyle]
+ -- +($ (#1, \height/2) + (\slope/2 - \slope/2 * \value{tikztimingtrans}, 0) $)
+ -- +($ (#1,-\height/2) + (\slope/2 + \slope/2 * \value{tikztimingtrans}, 0) $)
+ }
+ -- +(\zslope, -\height/2)
+ -- +(0,0)
+ {[\nstyle]
+ ++(#1,0) coordinate (timing@ref)
+ ++(\slope,-\height/2 * \value{tikztimingtrans})
+ }
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{DET}{%
+ \tikztiming@oldnodecenter@%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\dslope/2, \height/2)
+ {[\nstyle]
+ -- ($ (timing@ref) + (#1, \height/2) + (\slope/2 - \slope/2 * \value{tikztimingtrans}, 0) $)
+ -- ($ (timing@ref) + (#1,-\height/2) + (\slope/2 + \slope/2 * \value{tikztimingtrans}, 0) $)
+ }
+ -- ($ (timing@save) + (\dslope/2, -\height/2) $)
+ -- (timing@save)
+ {[\nstyle]
+ ($ (timing@ref) + (#1,0) $) coordinate (timing@ref)
+ ++(\slope,-\height/2 * \value{tikztimingtrans})
+ }
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{ZEZ}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\zslope, \height/2)
+ -- +(#1,\height/2)
+ -- +($ (#1,0) + (\zslope, 0) $)
+ -- +(#1,-\height/2)
+ -- +(\zslope, -\height/2)
+ -- +(0,0)
+ ++(#1,0) coordinate (timing@ref)
+ ++(\zslope, 0)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{ZEE}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\zslope, \height/2)
+ -- +($ (#1,0) + (\slope, \height/2) $) coordinate (timing@refb)
+ -- +(#1,-\height/2) coordinate (timing@refa)
+ -- +(\zslope, -\height/2)
+ -- +(0,0)
+ +(#1,0) coordinate (timing@ref)
+ ++(#1,-\height/2)
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+}
+
+\tikztimingdef{DEE}{%
+ \tikztiming@oldnodecenter@
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\dslope/2, \height/2)
+ -- ($ (timing@ref) + (#1,0) + (\slope, \height/2) $) coordinate (timing@refb)
+ -- ($ (timing@ref) + (#1,-\height/2) $) coordinate (timing@refa)
+ -- ($ (timing@save) + (\dslope/2, -\height/2) $)
+ -- (timing@save)
+ coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $)
+ (timing@refa)
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+}
+
+
+\tikztimingdef{DED}{%
+ \tikztiming@oldnodecenter@%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\dslope/2, \height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- ($ (timing@ref) + (#1,0) + (\dslope/2,0) $)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- ($ (timing@save) + (\dslope/2, -\height/2) $)
+ -- (timing@save)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ ++(\dslope/2,0)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{ZED}{%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\zslope, \height/2)
+ -- +(#1,\height/2)
+ -- +($ (#1,0) + (\dslope/2, 0) $)
+ -- +(#1,-\height/2)
+ -- +(\zslope, -\height/2)
+ -- +(0,0)
+ ++(#1,0) coordinate (timing@ref)
+ ++(\dslope/2, 0)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{DEZ}{%
+ \tikztiming@oldnodecenter@
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\dslope/2, \height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- ($ (timing@ref) + (#1,0) + (\zslope, 0) $)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- ($ (timing@save) + (\dslope/2, -\height/2) $)
+ -- (timing@save)
+ ($ (timing@ref) + (#1,0) $)
+ coordinate (timing@ref)
+ ++(\zslope, 0)
+ \newdraw [\nstyle]
+}
+
+
+\tikztimingdef{DEH}{%
+ \tikztiming@oldnodecenter@%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\dslope/2, \height/2)
+ -- ($ (timing@ref) + (#1,0) + (\slope, \height/2) $)
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- ($ (timing@save) + (\dslope/2, -\height/2) $)
+ -- (timing@save)
+ ($ (timing@ref) + (#1,0) $) coordinate (timing@ref)
+ ++(\slope, \height/2)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{DEL}{%
+ \tikztiming@oldnodecenter@%
+ \newdraw [\style,preaction={\bgstyle}]
+ -- +(\dslope/2, \height/2)
+ -- ($ (timing@ref) + (#1,\height/2) $)
+ -- ($ (timing@ref) + (#1,0) + (\slope, -\height/2) $)
+ -- ($ (timing@save) + (\dslope/2, -\height/2) $)
+ -- (timing@save)
+ ($ (timing@ref) + (#1,0) $) coordinate (timing@ref)
+ ++(\slope, -\height/2)
+ \newdraw [\nstyle]
+}
+
+
+\tikztimingdef{@E}{%
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+ \tikztiminguse{@D}{#1}
+}
+
+\tikztimingdef{@DE}{%
+ \tikztiming@@chard{#1}%
+}
+\tikztimingdef{DDE}{
+ ++(0,-\height/2)
+ \tikztiming@oldnodecenter{%
+ (0,+\height/2)
+ }%
+ \tikztiming@@chard{#1}%
+}
+
+\tikztimingdef{@EH}{%
+ \tikztiming@setref{timing/start}{0,\height/2}
+ \newdraw [\bgstyle]
+ -- +(0,\height)
+ -- +($ (#1,\height) + (\slope,0) $)
+ -- +(#1,0)
+ -- +(0,0)
+ \newdraw [\style]
+ +(0,\height)
+ -- +($ (#1,\height) + (\slope,0) $)
+ -- +(#1,0)
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\slope,\height/2)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{@ET}{%
+ \tikztiming@setref{timing/start}{0,\height/2}
+ \newdraw [\bgstyle]
+ -- +(0,\height)
+ {[\nstyle]
+ -- ($ (timing@ref) + (#1,\height/2) + (\slope,0) $)
+ }
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- (timing@save)
+ \newdraw [\style]
+ +(0,\height)
+ {[\nstyle]
+ -- ($ (timing@ref) + (#1,\height/2) + (\slope,0) $)
+ }
+ -- ($ (timing@ref) + (#1,-\height/2) $)
+ -- (timing@save)
+ {[\nstyle]
+ ($ (timing@ref) + (#1,0) $) coordinate (timing@ref)
+ ++(\slope,\height/2)
+ }
+ \newdraw [\nstyle]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+}
+
+\tikztimingdef{ET}{%
+ {[\style]
+ -- ($ (timing@ref) + (#1,\height/2 * \value{tikztimingtrans}) $)
+ }
+}
+
+\tikztimingdef{@EL}{%
+ \tikztiming@setref{timing/start}{0,\height/2}
+ \newdraw [\bgstyle]
+ -- +(0,\height)
+ -- +(#1,\height)
+ -- +($ (#1,0) + (\slope,0) $)
+ -- +(0,0)
+ \newdraw [\style]
+ +(0,\height)
+ -- +(#1,\height)
+ -- +($ (#1,0) + (\slope,0) $)
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\slope,-\height/2)
+ \newdraw [\nstyle]
+}
+
+\tikztimingdef{@ED}{%
+ \tikztiming@setref{timing/start}{0,\height/2}
+ \newdraw [\bgstyle]
+ -- +(0,\height)
+ -- +(#1,\height)
+ -- +($ (#1,\height/2) + (\dslope/2,0) $)
+ -- +(#1,0)
+ -- +(0,0)
+ \newdraw [\style]
+ +(0,\height)
+ -- +(#1,\height)
+ -- +($ (#1,\height/2) + (\dslope/2,0) $)
+ -- +(#1,0)
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\dslope/2,0)
+}
+
+\tikztimingdef{@EZ}{%
+ \tikztiming@setref{timing/start}{0,\height/2}
+ \newdraw [\bgstyle]
+ -- +(0,\height)
+ -- +(#1,\height)
+ -- +($ (#1,\height/2) + (\zslope,0) $)
+ -- +(#1,0)
+ -- +(0,0)
+ \newdraw [\style]
+ +(0,\height)
+ -- +(#1,\height)
+ -- +($ (#1,\height/2) + (\zslope,0) $)
+ -- +(#1,0)
+ -- +(0,0)
+ ++(#1,\height/2) coordinate (timing@ref)
+ ++(\zslope,0)
+}
+
+
+\tikztimingdef{@EE}{%
+ \tikztiming@setref{timing/start}{0,\height/2}
+ \newdraw [\bgstyle]
+ -- +(0,\height)
+ -- +($ (#1,\height) + (\slope,0) $)
+ -- +(#1,0)
+ -- +(0,0)
+ \newdraw [\style]
+ +(0,\height)
+ -- +($ (#1,\height) + (\slope,0) $) coordinate (timing@refb)
+ -- +(#1,0) coordinate (timing@refa)
+ -- +(0,0)
+ ++(#1,0)
+ \tikztiming@setref{timing@ref}{0,\height/2}
+ \code{\setcounter{tikztimingtranspos}{0}}%
+ \code{\setcounter{tikztimingtrans}{1}}%
+}
+
+\def\tikztiming@nocombine@E{}%%
+% \end{macrocode}
+%
+% \iffalse
+%</tikz-timing-either.sty>
+% \fi
+%
+% \subsubsection{Clock Arrows}
+% \iffalse
+%<*tikz-timing-clockarrows.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-clockarrows}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for timing clock arrows]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tikztiming@iftrans{CC}%
+ {\let\tikztiming@trans@C@normal@C\tikztiming@trans@CC}%
+ {\PackageError{\@currname}{No 'CC' transition defined by the main tikz-timing
+ package.}{}}%
+\tikztiming@iftrans{HC}%
+ {\let\tikztiming@trans@H@normal@C\tikztiming@trans@HC}%
+ {\PackageError{\@currname}{No 'HC' transition defined by the main tikz-timing
+ package.}{}}%
+\tikztiming@iftrans{LC}%
+ {\let\tikztiming@trans@L@normal@C\tikztiming@trans@LC}%
+ {\PackageError{\@currname}{No 'LC' transition defined by the main tikz-timing
+ package.}{}}%
+
+\tikztimingdef{CC}{%
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ [timing/c/save]
+ \newdraw [\style,timing/c/restore,>=\noexpand\tikztiming@c@arrow@tip,timing/c/arrow@style]
+ -- ++(\slope*\noexpand\tikztiming@c@arrow@pos,\value{tikztimingtrans}*\height*\noexpand\tikztiming@c@arrow@pos)
+ ; \draw [timing/restore,timing/c/restore] (timing@save) ++(0,0) [\style]
+ -- ++(\slope,\value{tikztimingtrans}*\height)
+ -- ++($ (#1,0) - (\slope,0) $)
+}
+\let\tikztiming@trans@C@arrow@C\tikztiming@trans@CC
+
+\tikztimingdef{HC}{%
+ \code{\setcounter{tikztimingtrans}{-1}}
+ [timing/c/save]
+ \newdraw [\style,timing/c/restore,>=\noexpand\tikztiming@c@arrow@tip,timing/c/arrow@style]
+ -- ++(\slope*\noexpand\tikztiming@c@arrow@pos,\value{tikztimingtrans}*\height*\noexpand\tikztiming@c@arrow@pos)
+ ; \draw [timing/restore,timing/c/restore] (timing@save) ++(0,0) [\style]
+ -- ++(\slope,\value{tikztimingtrans}*\height)
+ -- ++($ (#1,0) - (\slope,0) $)
+}
+\let\tikztiming@trans@H@arrow@C\tikztiming@trans@HC
+
+\tikztimingdef{LC}{%
+ \code{\setcounter{tikztimingtrans}{+1}}
+ [timing/c/save]
+ \newdraw [\style,timing/c/restore,>=\noexpand\tikztiming@c@arrow@tip,timing/c/arrow@style]
+ -- ++(\slope*\noexpand\tikztiming@c@arrow@pos,\value{tikztimingtrans}*\height*\noexpand\tikztiming@c@arrow@pos)
+ ; \draw [timing/restore,timing/c/restore] (timing@save) ++(0,0) [\style]
+ -- ++(\slope,\value{tikztimingtrans}*\height)
+ -- ++($ (#1,0) - (\slope,0) $)
+}
+\let\tikztiming@trans@L@arrow@C\tikztiming@trans@LC
+
+
+\tikzset{timing/c/.cd,
+ rising arrows/.code={%
+ \let\tikztiming@trans@CC\tikztiming@trans@C@arrow@C%
+ \let\tikztiming@trans@LC\tikztiming@trans@L@arrow@C%
+ \let\tikztiming@trans@HC\tikztiming@trans@H@arrow@C%
+ \def\tikztiming@clockarrow@style{\ifnum1=\c@tikztimingtrans\tikzset{->,timing/c/arrow}\fi}%
+ },%
+ falling arrows/.code={%
+ \let\tikztiming@trans@CC\tikztiming@trans@C@arrow@C%
+ \let\tikztiming@trans@LC\tikztiming@trans@L@arrow@C%
+ \let\tikztiming@trans@HC\tikztiming@trans@H@arrow@C%
+ \def\tikztiming@clockarrow@style{\ifnum-1=\c@tikztimingtrans\tikzset{->,timing/c/arrow}\fi}%
+ },%
+ dual arrows/.code={%
+ \let\tikztiming@trans@CC\tikztiming@trans@C@arrow@C%
+ \let\tikztiming@trans@LC\tikztiming@trans@L@arrow@C%
+ \let\tikztiming@trans@HC\tikztiming@trans@H@arrow@C%
+ \def\tikztiming@clockarrow@style{\tikzset{->,timing/c/arrow}}%
+ },%
+ no arrows/.code={%
+ \let\tikztiming@trans@CC\tikztiming@trans@C@normal@C%
+ \let\tikztiming@trans@LC\tikztiming@trans@L@normal@C%
+ \let\tikztiming@trans@HC\tikztiming@trans@H@normal@C%
+ \def\tikztiming@clockarrow@style{}%
+ },%
+ arrow@style/.code={\tikztiming@clockarrow@style},%
+ arrow/.style={},%
+ arrow pos/.store in=\tikztiming@c@arrow@pos,
+ arrow tip/.store in=\tikztiming@c@arrow@tip,
+ save/.code={%
+ \global\let\tikztiming@clockarrow@savedstyle\tikztiming@clockarrow@style
+ \global\let\tikztiming@trans@saved@CC\tikztiming@trans@CC
+ \global\let\tikztiming@c@arrow@savedpos\tikztiming@c@arrow@pos
+ \global\let\tikztiming@c@arrow@savedtip\tikztiming@c@arrow@tip
+ },
+ restore/.code={%
+ \let\tikztiming@clockarrow@style\tikztiming@clockarrow@savedstyle
+ \let\tikztiming@trans@CC\tikztiming@trans@saved@CC
+ \let\tikztiming@c@arrow@pos\tikztiming@c@arrow@savedpos
+ \let\tikztiming@c@arrow@tip\tikztiming@c@arrow@savedtip
+ },
+}
+\tikzset{timing/c/.cd,
+ no arrows,
+ arrow pos=0.95,
+ arrow tip=to,
+}
+
+% \end{macrocode}
+% Use the \pkg{pgfopts} to handle the package options.
+% \begin{macrocode}
+\RequirePackage{pgfopts}
+\ProcessPgfOptions{/tikz/timing/c}
+% \end{macrocode}
+% \iffalse
+%</tikz-timing-clockarrows.sty>
+% \fi
+%
+% \subsubsection{Arrows}
+% \iffalse
+%<*tikz-timing-arrows.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-arrows}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for timing arrows]
+% \end{macrocode}
+%
+% This library is only defining the "A" and "W" basic transitions ("AA", "AW", "WA", "WW").
+% While "W" is simply a copy of "A" with a different style. Both simple draw a line from |low|
+% to |high| and than move the position to the right according to the |width| value and back to
+% the |low| position. The different arrow directions are done by different styles.
+% \begin{macrocode}
+\tikzset{timing/.cd,
+ A/.style={timing/a},
+ W/.style={timing/w},
+ a/.style={->},
+ w/.style={<-},
+}
+
+\tikztimingchar{A}{++(0,0)}{%
+ \newdraw [\style] -- ++(0,\height)
+ \newdraw [timing/every char] ++(#1,-\height)
+}
+\def\tikztiming@nocombine@A{}%
+
+\tikztimingecopy{W}{A}
+% \end{macrocode}
+%
+% \iffalse
+%</tikz-timing-arrows.sty>
+% \fi
+%
+% \subsubsection{Overlays}
+% \iffalse
+%<*tikz-timing-overlays.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-overlays}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for timing overlays]
+% \end{macrocode}
+%
+% \begin{macro}{\tikztiming@defcode{O}}
+% The last character before the "O" is saved and restored. Also the drawing
+% state is saved and restored by the \cs{tikztiming@overlay@begin} and
+% \cs{tikztiming@overlay@end} macros. The parser end macro
+% \cs{tikztiming@parser@end} which is triggered at the end of the overlay string
+% is redefined to avoid problems. The double \TeX\ group is necessary because
+% the overlay string can close and reopen the inner \TeX\
+% group.
+% \begin{macrocode}
+\tikztiming@defcode{O}#1{%
+ \ifx\relax#1\empty
+ \def\tikztiming@next{\tikztiming@parser#1}%
+ \else
+ \let\tikztiming@overlay@lastchar\tikztiming@lastchar
+ \let\tikztiming@overlay@width\tikztimingwidth
+ \tikztiming@output@addcode{\tikztiming@overlay@begin}%
+ \begingroup
+ \def\tikztiming@parser@end{%
+ \def\tikztiming@output@nextchar{@}%
+ \tikztiming@output@flush
+ }
+ \begingroup
+ \tikztiming@parser #1\relax
+ \endgroup
+ \endgroup
+ \tikztiming@output@addcode{\tikztiming@overlay@end}%
+ \global\let\tikztiming@lastchar\tikztiming@overlay@lastchar
+ \global\let\tikztimingwidth\tikztiming@overlay@width
+ \def\tikztiming@next{\expandafter\tikztiming@parser\@firstofone}%
+ \fi
+ \tikztiming@next
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Set the later expanded macros to some sane initial value.
+% \begin{macrocode}
+\let\tikztiming@overlay@save\empty
+\let\pgf@sh@nt@tikztiming@overlay@node\empty
+% \end{macrocode}
+%
+% \begin{macro}{\tikztiming@overlay@begin}
+% The drawing transition state (for "T", etc.) is saved and restored.
+% In order to be able to include an "O" inside the argument of another one the
+% overlay save node coordinates (\cs{pfg@sh@nt@tikztiming@overlay@node}) is also
+% saved and restored. The \cs{tikztiming@overlay@save} macro also includes an
+% self-assignment to its old version, which implements a stack. The macros must
+% be global because the overlay string can reopen a new TikZ path.
+% \begin{macrocode}
+\def\tikztiming@overlay@begin{
+ [/utils/exec={%
+ \xdef\tikztiming@overlay@save{%
+ \noexpand\global\noexpand\c@tikztimingtrans\the\c@tikztimingtrans\relax%
+ \noexpand\global\noexpand\c@tikztimingtranspos\the\c@tikztimingtranspos\relax%
+ \noexpand\gdef\noexpand\pgf@sh@nt@tikztiming@overlay@node
+ {\csname pgf@sh@nt@tikztiming@overlay@node\endcsname}%
+ \noexpand\gdef\noexpand\pgf@sh@nt@timing@refa
+ {\csname pgf@sh@nt@timing@refa\endcsname}%
+ \noexpand\gdef\noexpand\pgf@sh@nt@timing@refb
+ {\csname pgf@sh@nt@timing@refb\endcsname}%
+ \noexpand\gdef\noexpand\pgf@sh@nt@timing@ref
+ {\csname pgf@sh@nt@timing@ref\endcsname}%
+ \noexpand\gdef\noexpand\tikztiming@overlay@save{%
+ \expandafter\unexpanded\expandafter{\tikztiming@overlay@save}%
+ }%
+ }%
+ }]%
+ node [timing/save] (tikztiming@overlay@node) {}
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@overlay@end}
+% Start new drawing path, restore position and saved drawing state.
+% \begin{macrocode}
+\def\tikztiming@overlay@end{%
+ \tikztiming@newdraw (tikztiming@overlay@node)
+ [/utils/exec={\tikztiming@overlay@save}]
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \iffalse
+%</tikz-timing-overlays.sty>
+% \fi
+%
+% \subsubsection{Column Type}
+% \iffalse
+%<*tikz-timing-columntype.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-columntype}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for timing cell types]
+% \end{macrocode}
+%
+% The \pkg{array} package is needed to define the column type.
+% \begin{macrocode}
+\RequirePackage{array}
+
+\tikzset{timing/columntype/.code 2 args =
+ \newcolumntype{#1}{>{\celltiming}#2<{\endcelltiming}}%
+}%
+% \end{macrocode}
+%
+% The options |type| (calls |timing/columntype|) and |notype| are defined.
+% \begin{macrocode}
+\RequirePackage{pgfopts}
+\tikzset{timing/columntype/.cd,
+ type/.style 2 args={/tikz/timing/columntype={#1}{#2}},%
+ notype/.code={},
+ notype/.value forbidden={},
+}
+
+\ProcessPgfOptions{/tikz/timing/columntype}
+% \end{macrocode}
+% Use default settings if no options where given. This works because all options
+% so far will change the default type.
+% \begin{macrocode}
+\expandafter\ifx\csname opt@\@currname.\@currext\endcsname\empty
+ \tikzset{timing/columntype={T}{l}}%
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\celltiming}[1]{Some ignored tokens}
+% The macro first reads everything to the |\ignorespaces| placed by the
+% |tabular|. After placing the tokens except |\ignorespaces| back a
+% |tikzpicture| is started. The \cs{tikztiming@endhook} is defined to call
+% \cs{end@celltiming}.
+% After the usual init process the input is tested for an optional argument and
+% \cs{tikztiming@celltiming} is called accordantly.
+% \begin{macrocode}
+\def\celltiming#1\ignorespaces{%
+ #1%
+ \begin{tikzpicture}[timing/picture,baseline={(0,0)}]
+ \def\tikztiming@endhook{\end@celltiming}
+ \tikztiming@init
+ \let\tikztiming@settings\empty
+ \@ifnextchar{[}%
+ {\tikztiming@celltiming}%
+ {\tikztiming@celltiming[]}%
+}
+\let\endcelltiming\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@celltiming}[1]{Optional Initial Character or
+% Settings}
+% First the optional argument is tested to see if it is a single initial
+% character or some settings. The \cs{tikztiming@testoptarg} macro sets the
+% \cs{lastchar} and \cs{settings} macros to the appropriate values.
+%
+% If the \cs{lastchar} is empty it is set to the normal start value.
+%
+% Then a \pkg{pgf} scope with the potential user settings is started. The macros
+% |\unskip| and |\\| which are used internally by the |tabular| environment are
+% |\let| to |\relax| to work as end marker for the \cs{tikztiming@parser}. This
+% will not influence the table because they will revert to their original
+% definition at the end of the |tikzpicture| environment.
+%
+% Finally the \cs{tikztiming@parser} is called.
+% \begin{macrocode}
+\def\tikztiming@celltiming[#1]{%
+ \ifx\relax#1\relax\else
+ \tikztiming@testoptarg#1\relax\relax
+ \fi
+ \ifx\tikztiming@lastchar\empty
+ \def\tikztiming@lastchar{@}%
+ \fi
+ \expandafter\scope\expandafter[\tikztiming@settings]%
+ \begingroup
+ \let\unskip\relax
+ \let\\\relax
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\end@celltiming}
+% This macro is called from the \cs{tikztiming@endhook} which is located in
+% \cs{tikztiming@parser@end} when the end marker (|\relax| or alias) is
+% encountered. It executes the accumulated \cs{tikztiming@str} and places the
+% timing shape. Finally the |scope| and |tikzpicture| is closed.
+% \begin{macrocode}
+\def\end@celltiming{%
+ \tikzset{timing/before}%
+ \tikztiming@str;
+ \expandafter\node
+ \expandafter[\tikztiming@settings,shape=tikztiming@shape,anchor=origin] at (0,0) {};
+ \tikzset{timing/after}%
+ \endscope
+ \end{tikzpicture}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</tikz-timing-columntype.sty>
+% \fi
+%
+% \subsubsection{Nice Timing Tables}
+% \iffalse
+%<*tikz-timing-nicetabs.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-nicetabs}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for nice timing tables]
+% \end{macrocode}
+%
+% The dimensions of the following packages are used.
+% \begin{macrocode}
+\RequirePackage{array}
+\RequirePackage{booktabs}
+% \end{macrocode}
+
+%
+% \begin{macro}{\tikztiming@nicetabs@tableheader}[1]{Optional Settings}
+% Calculate separator heights and set nodes appropriately, then call
+% the normal table header macro.
+% \begin{macrocode}
+\newcommand*\tikztiming@nicetabs@tableheader[1][]{%
+ \path [timing/table/midrules] [/utils/exec=\xdef\@gtempa{\the\pgflinewidth}];
+ \path [timing/table/header,#1]
+ let \p1 = (0,\belowrulesep + \aboverulesep + \@gtempa
+ + \arraystretch\ht\strutbox + \arraystretch*\extrarowheight
+ + \arraystretch\dp\strutbox)
+ in
+ coordinate (diagram@header) at (0,\y1)
+ coordinate (label@header) at ($ -1*(\tikztiming@coldist,0) + (0,\y1) $)
+ ;
+ \tikztiming@normal@tableheader[#1]%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@nicetabs@tablerules}[1]{Optional Settings}
+% \begin{macrocode}
+\newcommand*\tikztiming@nicetabs@tablerules[1][]{%
+ \begin{scope}[#1]
+ \coordinate (NW) at (current bounding box.north west);
+ \coordinate (SE) at (current bounding box.south east);
+ %
+ \draw [timing/table/rules]
+ let
+ \p1 = (NW),
+ \p2 = (SE),
+ \p3 = (last label.base),
+ \p4 = ($ (0,\y3) - (0,\arraystretch\dp\strutbox + \aboverulesep +
+ .5\pgflinewidth) $)
+ in
+ (\x1-\tabcolsep,\y4) -- (\x2+\tabcolsep,\y4)
+ \iftikztiming@tablehead
+ let
+ \p5 = (diagram@header.base),
+ \p6 = ($ (0,\y5) + (0,\arraystretch\ht\strutbox + \arraystretch*\extrarowheight
+ + \belowrulesep + .5\pgflinewidth) $)
+ in
+ (\x1-\tabcolsep,\y6) -- (\x2+\tabcolsep,\y6)
+ \fi
+ ;
+ \draw
+ \iftikztiming@tablehead [timing/table/midrules] \else [timing/table/rules] \fi
+ let
+ \p1 = (NW),
+ \p2 = (SE),
+ \p3 = (0, \arraystretch\ht\strutbox + \arraystretch*\extrarowheight +
+ \belowrulesep + .5\pgflinewidth)
+ in
+ (\x1-\tabcolsep, \y3)
+ --
+ (\x2+\tabcolsep, \y3)
+ ;
+ \end{scope}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\let\tikztiming@normal@tableheader\tikztiming@tableheader
+\let\tikztiming@normal@tablerules\tikztiming@tablerules
+\let\tikztiming@normal@coldist\tikztiming@coldist
+\let\tikztiming@normal@rowdist\tikztiming@rowdist
+
+\tikzset{%
+ timing/no nice tabs/.code={%
+ \let\tikztiming@coldist\tikztiming@normal@coldist
+ \let\tikztiming@rowdist\tikztiming@normal@rowdist
+ \let\tikztiming@tableheader\tikztiming@normal@tableheader
+ \let\tikztiming@tablerules\tikztiming@normal@tablerules
+ },
+ timing/nice tabs/.code={%
+ \ifx\tikztiming@tableheader\tikztiming@nicetabs@tableheader\else
+ \let\tikztiming@normal@coldist\tikztiming@coldist
+ \let\tikztiming@normal@rowdist\tikztiming@rowdist
+ \fi
+ \def\tikztiming@rowdist{%
+ \arraystretch\ht\strutbox
+ +\arraystretch*\extrarowheight
+ +\arraystretch\dp\strutbox
+ }%
+ \def\tikztiming@coldist{2\tabcolsep}%
+ \let\tikztiming@tableheader\tikztiming@nicetabs@tableheader
+ \let\tikztiming@tablerules\tikztiming@nicetabs@tablerules
+ },
+ timing/nicetabs/no nice tabs/.style={/tikz/timing/no nice tabs},
+ timing/nicetabs/off/.style={/tikz/timing/no nice tabs},
+ timing/nicetabs/nice tabs/.style={/tikz/timing/nice tabs},
+ timing/nicetabs/on/.style={/tikz/timing/nice tabs},
+}
+%
+\tikzset{timing/nice tabs}%
+% \end{macrocode}
+%
+% Use the \pkg{pgfopts} to handle the package options.
+% \begin{macrocode}
+\RequirePackage{pgfopts}
+\ProcessPgfOptions{/tikz/timing/nicetabs}
+% \end{macrocode}
+% \iffalse
+%</tikz-timing-nicetabs.sty>
+% \fi
+%
+% \subsubsection{Counters}
+% \iffalse
+%<*tikz-timing-counters.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-counters}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for counter values]
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newif\if@tikztiming@counter@wraps
+
+\tikzset{%
+ timing/new counter/.style={timing/counter/new={#1}},
+ timing/counter/.cd,
+ new/.code={\tikztiming@counter@new{#1}},
+ new/.value required,
+ opt/.cd,
+ char/.initial=,
+ char/.value required,
+ reset char/.initial=,
+ reset char/.value required,
+ reset type/.is choice,
+ reset type/width/.code={\def\tikztiming@resettype{0}},
+ reset type/arg/.code={\def\tikztiming@resettype{1}},
+ reset type/both/.code={\def\tikztiming@resettype{2}},
+ reset type/Both/.code={\def\tikztiming@resettype{3}},
+ half width char/.initial=,
+ half width char/.value required,
+ base/.initial=10,
+ base/.value required,
+ increment/.initial=1,
+ increment/.value required,
+ max value/.initial=,
+ max value/.value required,
+ min value/.initial=,
+ min value/.value required,
+ wraps/.is if=@tikztiming@counter@wraps,
+ digits/.initial=,
+ digits/.value required,
+ fg style/.initial=,
+ bg style/.initial=,
+ text style/.initial=,
+ text format/.initial=,
+ fg style/.value required,
+ bg style/.value required,
+ text style/.value required,
+ text format/.value required,
+}
+\def\tikztiming@counter@textformat{}%
+% \end{macrocode}
+%
+% \begin{macro}{\tikztimingcounter}[1]{Counter Character}
+% \begin{macrocode}
+\def\tikztimingcounter#1{%
+ \csname tikztiming@counter@#1\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztimingsetcounter}[2]{Counter Character}{pgfmath expression}
+% \begin{macrocode}
+\def\tikztimingsetcounter#1#2{%
+ \begingroup
+ \pgfmathtruncatemacro\@tempa{#2}%
+ \expandafter\global\expandafter\let\csname tikztiming@counter@#1\endcsname\@tempa
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@new}[1]{Styles}
+% Most parts of this macro is enclosed in a group to keep most changes locally.
+% \begin{macrocode}
+\def\tikztiming@counter@new#1{%
+ \begingroup
+ \def\tikztiming@resettype{0}%
+% \end{macrocode}
+% The argument is taken as pgf keys relative to the "/tikz/timing/counter/opt" path.
+% The counter character is mandatory and an error is raised if it is not defined.
+% \begin{macrocode}
+ \pgfqkeys{/tikz/timing/counter/opt}{#1}%
+ \tikzset{timing/counter/opt/char/.get=\counterchar}%
+ \ifx\counterchar\empty
+ \PackageError{tikz-timing-counters}{Counter character must be given using
+ the 'char' key!}{}%
+ \endgroup
+ \else
+% \end{macrocode}
+% The counter boundary test code is now assembled in |\@tempb|.
+% If the "wraps" option was used the \cs{tikztiming@counter@wrap} macro is used with the
+% "min value" and "max value" as (expanded) arguments.
+% \begin{macrocode}
+ \pgfkeys{/tikz/timing/counter/opt/min value/.get=\min}%
+ \pgfkeys{/tikz/timing/counter/opt/max value/.get=\max}%
+ \if@tikztiming@counter@wraps
+ \ifx\min\empty
+ \def\min{0}%
+ \fi
+ \ifx\max\empty
+ \PackageError{tikz-timing-counters}{The option 'wraps' needs the option 'max value' to be set!}{}%
+ \fi
+ \def\@tempb{%
+ \noexpand\tikztiming@counter@wrap%
+ {\expandafter\unexpanded\expandafter{\min}}%
+ {\expandafter\unexpanded\expandafter{\max}}%
+ }%
+ \else
+% \end{macrocode}
+% Otherwise either the \cs{tikztiming@counter@maxsat}, \cs{tikztiming@counter@minsat} or \cs{tikztiming@counter@minmaxsat}
+% macro is used if "max value", "min value" or both are set, respectively.
+% \begin{macrocode}
+ \ifx\min\empty
+ \ifx\max\empty
+ \let\@tempb\empty
+ \else
+ \def\@tempb{%
+ \noexpand\tikztiming@counter@maxsat%
+ {\expandafter\unexpanded\expandafter{\max}}%
+ }%
+ \fi
+ \else
+ \ifx\max\empty
+ \def\@tempb{%
+ \noexpand\tikztiming@counter@minsat%
+ {\expandafter\unexpanded\expandafter{\min}}%
+ }%
+ \else
+ \def\@tempb{%
+ \noexpand\tikztiming@counter@minmaxsat%
+ {\expandafter\unexpanded\expandafter{\min}}%
+ {\expandafter\unexpanded\expandafter{\max}}%
+ }%
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% The counter styles are set up.
+% \begin{macrocode}
+ \pgfkeys{/tikz/timing/counter/opt/fg style/.get=\fgstyle}%
+ \pgfkeys{/tikz/timing/counter/opt/bg style/.get=\bgstyle}%
+ \pgfkeys{/tikz/timing/counter/opt/text style/.get=\textstyle}%
+ \pgfkeys{/tikz/timing/counter/opt/text format/.get=\textformat}%
+% \end{macrocode}
+% Finally the \cs{tikztiming@counter@new@} macro is called with most of the
+% settings as expanded arguments.
+% \begin{macrocode}
+ \pgfkeys{/tikz/timing/counter/opt/increment/.get=\increment}%
+ \edef\@tempa{%
+ \noexpand\tikztiming@counter@new@
+ {\pgfkeysvalueof{/tikz/timing/counter/opt/char}}%
+ {\pgfkeysvalueof{/tikz/timing/counter/opt/base}}%
+ {\pgfkeysvalueof{/tikz/timing/counter/opt/half width char}}%
+ {\pgfkeysvalueof{/tikz/timing/counter/opt/reset char}}%
+ {\pgfkeysvalueof{/tikz/timing/counter/opt/digits}}%
+ {\expandafter\unexpanded\expandafter{\increment}}%
+ {\@tempb}%
+ {\min}%
+ {\tikztiming@resettype}%
+ {\expandafter\unexpanded\expandafter{\fgstyle}}%
+ {\expandafter\unexpanded\expandafter{\bgstyle}}%
+ {\expandafter\unexpanded\expandafter{\textstyle}}%
+ {\expandafter\unexpanded\expandafter{\textformat}}%
+ }%
+ \expandafter\expandafter\expandafter\endgroup
+ \expandafter\@tempa
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@new@}[9]{Character}{Base}{Half Width
+% Character}{Reset Character}{Number of Digits}{Increment}{Boundary Code}{Min Value}{Reset Type}
+% \begin{macrocode}
+\def\tikztiming@counter@new@#1#2#3#4#5#6#7#8#9{%
+ \ifx\empty#8\empty
+ \@namedef{tikztiming@counter@#1}{0}%
+ \else
+ \expandafter
+ \pgfmathtruncatemacro\csname tikztiming@counter@#1\endcsname{#8}%
+ \fi
+ \tikztimingmetachar{#1}[1]{ { [timing/counter/#1] ##1D{[timing/counter/#1/text]\tikztiming@counter@vs{#1}{#2}{#5}{#6}{#7}} } }%
+ \ifx\empty#3\empty
+ \tikztiming@iflower{#1}{}%
+ {\lowercase{\tikztimingmetachar{#1}}[1]%
+ { { [timing/counter/#1] ##1d{[timing/counter/#1/text]\tikztiming@counter@vs{#1}{#2}{#5}{#6}{#7}}} }%
+ }%
+ \else
+ \tikztimingmetachar{#3}[1]{%
+ { [timing/counter/#1] ##1d{[timing/counter/#1/text]\tikztiming@counter@vs{#1}{#2}{#5}{#6}{#7}} }%
+ }%
+ \fi
+ \ifx\empty#4\empty\else
+ \ifcase0#9\relax
+ \tikztimingmetachar{#4}[1]{[|/utils/exec=\tikztiming@counter@reset{#1}{##1}|]}%
+ \or
+ \tikztimingmetachar{#4}[2]{[|/utils/exec=\tikztimingsetcounter{#1}{##2}|]}%
+ \or
+ \uppercase{\tikztimingmetachar{#4}}[1]{[|/utils/exec=\tikztiming@counter@reset{#1}{##1}|]}%
+ \lowercase{\tikztimingmetachar{#4}}[2]{[|/utils/exec=\tikztimingsetcounter{#1}{##2}|]}%
+ \or
+ \lowercase{\tikztimingmetachar{#4}}[1]{[|/utils/exec=\tikztiming@counter@reset{#1}{##1}|]}%
+ \uppercase{\tikztimingmetachar{#4}}[2]{[|/utils/exec=\tikztimingsetcounter{#1}{##2}|]}%
+ \fi
+ \fi
+ \tikztiming@counter@new@@{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@new@@}[5]{Character}{Foreground Style}{Background Style}{Text Style}
+% {Text format}
+% The counter styles are set up.
+% \begin{macrocode}
+\def\tikztiming@counter@new@@#1#2#3#4#5{%
+ \tikzset{timing/counter/#1/.style={}}%
+ \ifx\empty#2\empty\else
+ \tikzset{timing/counter/#1/.append style={%
+ /tikz/timing/d/.style={#2}%
+ }}%
+ \fi
+ \ifx\empty#3\empty\else
+ \tikzset{timing/counter/#1/.append style={%
+ /tikz/timing/d/background/.style={#3}%
+ }}%
+ \fi
+ \tikzset{timing/counter/#1/text/.style={#4}}%
+ \ifx\empty#5\empty\else
+ \tikzset{timing/counter/#1/.append style={%
+ /utils/exec={\def\tikztiming@counter@textformat{#5}}%
+ }}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@reset}[2]{Character to Reset}{Reset value}
+% The counter is set first using pgf to round the value correctly and then again
+% with \cs{setcounter} to make it global.
+% \begin{macrocode}
+\def\tikztiming@counter@reset#1#2{%
+ \begingroup
+ \pgfmathtruncatemacro\@tempa{round((#2)/\tikztiming@wscale)}%
+ \expandafter\global\expandafter\let\csname tikztiming@counter@#1\endcsname\@tempa
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@vs}[5]{Character}{Base}{Number of Digits}{Increment}{Boundary Code}
+% Note: \cs{pgfmathdectoBase} is only used for a base different to 10 to allow
+% negative number for decimal base.
+% \begin{macrocode}
+\def\tikztiming@counter@vs#1#2#3#4#5{%
+ \begingroup
+ \ifx\empty#3\empty\else
+ \pgfmathsetbasenumberlength{#3}%
+ \fi
+ \ifnum#2=10
+ \expandafter\expandafter\expandafter\tikztiming@counter@textformat
+ \expandafter\expandafter\expandafter{\csname tikztiming@counter@#1\endcsname}%
+ \else
+ \pgfmathdectoBase\pgfmathresult{\@nameuse{tikztiming@counter@#1}}{#2}%
+ \expandafter\tikztiming@counter@textformat\expandafter{\pgfmathresult}%
+ \fi
+ \edef\N{\@nameuse{tikztiming@counter@#1}}%
+ \pgfmathtruncatemacro\N{\N + #4}%
+ #5%
+ \expandafter\global\expandafter\let\csname tikztiming@counter@#1\endcsname\N
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% The following macros checks the boundaries of the counter value. The value is stored in the
+% macro \cs{N}, the boundaries are provided as arguments. If necessary the value can be
+% adjusted by changing \cs{N}. All values are taken as \emph{integers}.
+%
+% \begin{macro}{\tikztiming@counter@minsat}[1]{Minimum Value}
+% \begin{macrocode}
+\def\tikztiming@counter@minsat#1{%
+ \pgfmathtruncatemacro\MIN{#1}%
+ \ifnum\N<\MIN \let\N\MIN \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@maxsat}[1]{Maximum Value}
+% \begin{macrocode}
+\def\tikztiming@counter@maxsat#1{%
+ \pgfmathtruncatemacro\MAX{#1}%
+ \ifnum\N>\MAX \let\N\MAX \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@minmaxsat}[2]{Minimum Value}{Maximum Value}
+% \begin{macrocode}
+\def\tikztiming@counter@minmaxsat#1#2{%
+ \tikztiming@counter@minsat{#1}%
+ \tikztiming@counter@maxsat{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@counter@wrap}[2]{Minimum Value}{Maximum Value}
+% \begin{macrocode}
+\def\tikztiming@counter@wrap#1#2{%
+ \pgfmathtruncatemacro\MIN{#1}%
+ \pgfmathtruncatemacro\MAX{#2}%
+ \ifnum\N>\MAX
+ \pgfmathtruncatemacro\N{\MIN + (\N-\MAX-1)}%
+ \fi
+ \ifnum\N<\MIN
+ \pgfmathtruncatemacro\N{\MAX - (\MIN-\N+1)}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Use the \pkg{pgfopts} to handle the package options.
+% \begin{macrocode}
+\RequirePackage{pgfopts}
+\ProcessPgfOptions{/tikz/timing/counter}
+% \end{macrocode}
+% \iffalse
+%</tikz-timing-counters.sty>
+% \fi
+%
+% \subsubsection{Advanced Nodes}
+% \iffalse
+%<*tikz-timing-advnodes.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-advnodes}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for advanced nodes]
+% \end{macrocode}
+%
+% \begin{macrocode}
+
+\let\tikztiming@orig@oldnodecenter\tikztiming@oldnodecenter
+
+\tikzset{timing/nodes/.cd,
+ simple/.code={%
+ \let\tikztiming@oldnodecenter\tikztiming@orig@oldnodecenter
+ \tikzset{%
+ timing/inline node/.style={shape=coordinate},
+ }%
+ },
+ advanced/.code={%
+ \let\tikztiming@oldnodecenter\@gobble
+ \tikzset{%
+ timing/inline node/.style={shape=tikztiming coordinate},
+ timing/nodes/new center,
+ }%
+ },
+ old center/.code={%
+ \let\tikztiming@nodecenteranchor\tikztiming@old@nodecenteranchor
+ },%
+ new center/.code={%
+ \let\tikztiming@nodecenteranchor\empty
+ },%
+}
+\tikzset{timing/nodes/.cd,advanced,new center}
+
+\def\anchoralias#1#2{%
+ \expandafter\def
+ \csname pgf@anchor@\pgf@sm@shape@name @#1\expandafter\endcsname
+ \expandafter{\csname pgf@anchor@\pgf@sm@shape@name @#2\endcsname}%
+}
+
+\def\tikztiming@anchorpoint#1#2#3{%
+ \pgf@xa=#2\relax
+ \pgf@ya=#3\relax
+ \expandafter\edef\csname#1\endcsname{%
+ \pgf@x=\the\pgf@xa\relax
+ \pgf@y=\the\pgf@ya\relax
+ }%
+ \expandafter\addtosavedmacro\csname#1\endcsname
+}
+% \end{macrocode}
+%
+% \begin{macro}{\tikztiming@tryanchor@}[2]{From}{To}
+% \begin{macrocode}
+\def\tikztiming@tryanchor#1#2{%
+ \let\tikztiming@next\relax
+ \ifnum\tikztiming@debug>2
+ \message{^^J Try Anchor: '#1' '#2' ^^J }%
+ \def\tikztiming@next{\message{^^J TERM ^^J}}%
+ \fi
+ \ifx\relax#1\empty\else
+ \ifx\relax#2\empty\else
+ \def\tikztiming@next{%
+ \@ifundefined{tikztiming@anchors@#1@#2}%
+ {%
+ \edef\@tempa{%
+ {\csname tikztiming@alias@#1\endcsname}%
+ {\csname tikztiming@alias@#2\endcsname}%
+ }%
+ \expandafter\tikztiming@tryanchor@\@tempa{#1}{#2}%
+ }%
+ {\let\tikztiming@tryanchor\@gobbletwo
+ \ifnum\tikztiming@debug>2
+ \message{^^J Anchor: '#1' '#2' ^^J }%
+ \fi
+ \@nameuse{tikztiming@anchors@#1@#2}%
+ }%
+ }%
+ \fi\fi
+ \tikztiming@next
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikztiming@tryanchor@}[4]{Alias From}{Alias To}{From}{To}
+% \begin{macrocode}
+\def\tikztiming@tryanchor@#1#2#3#4{%
+ \tikztiming@tryanchor{#3}{#2}%
+ \tikztiming@tryanchor{#1}{#4}%
+ \tikztiming@tryanchor{#1}{#2}%
+ \let\tikztiming@tryanchor@\@gobblefour
+ \tikztiming@tryanchor{#3}{}%
+ \tikztiming@tryanchor{}{#4}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\pgfdeclareshape{tikztiming coordinate}{%
+ \savedmacro\anchorpoints{%
+ \let\anchorpoint\tikztiming@anchorpoint
+ \let\slope\@tempdima
+ \let\dslope\@tempdimb
+ \let\zslope\@tempdimc
+ \let\height\pgf@yb
+ \let\fromchar\tikztiming@node@fromchar
+ \let\tochar\tikztiming@node@tochar
+ %
+ \ifnum\tikztiming@debug>2
+ \message{^^J Node: \fromchar \tochar ^^J}%
+ \fi
+ %
+ \edef\@tempa{{timing/\tochar}}%
+ \expandafter\lowercase\expandafter
+ {\expandafter\tikzset\@tempa}%
+ \pgfpointxy{\timingslope}{0}%
+ \slope=\pgf@x\relax
+ \pgfpointxy{\timingdslope}{0}%
+ \dslope=\pgf@x\relax
+ \pgfpointxy{\timingzslope}{0}%
+ \zslope=\pgf@x\relax
+ \pgfpointxy{0}{\timingheight}%
+ \height=\pgf@y\relax
+ \edef\anchorpoints{%
+ \noexpand\pgf@yb=\the\height\relax
+ \let\noexpand\height\noexpand\pgf@yb
+ }%
+ %
+ \tikztiming@tryanchor{\fromchar}{\tochar}%
+ }
+ \savedanchor\lowpoint{%
+ \pgfpointanchor{timing/start base}{center}%
+ \pgf@x=0pt
+ }%
+ \anchor{origin}{%
+ \pgfpointorigin
+ \anchorpoints
+ \@nameuse{originoffset}
+ \pgf@x=-\pgf@x
+ \pgf@y=-\pgf@y
+ }%
+ \anchor{old center}{%
+ \pgfpointorigin
+ \tikztiming@old@nodecenteranchor
+ }%
+ \anchor{new center}{\pgfpointorigin}%
+ \anchor{center}{%
+ \pgfpointorigin
+ \tikztiming@nodecenteranchor
+ }%
+ \anchor{MID}{\tikztiming@useanchor{HIGH}\advance\pgf@y by -.5\height\relax }%
+ \anchor{LOW}{\tikztiming@useanchor{HIGH}\advance\pgf@y by -\height\relax }%
+ \anchor{HIGH}{\tikztiming@useanchor{HIGH}}%
+ \anchor{TOP}{%
+ \tikztiming@nodes@getoffset
+ \tikztiming@useanchor{HIGH}
+ \advance\pgf@y by \pgf@ya\relax
+ }%
+ \anchor{BOTTOM}{%
+ \tikztiming@nodes@getoffset
+ \tikztiming@useanchor{HIGH}
+ \advance\pgf@y by -\pgf@ya\relax
+ \advance\pgf@y by -\height\relax
+ }%
+ \anchor{mid}{\tikztiming@useanchor{mid}}%
+ \anchor{low}{\tikztiming@useanchor{low}}%
+ \anchor{high}{\tikztiming@useanchor{high}}%
+ \anchor{low2}{\tikztiming@useanchor{low2}}%
+ \anchor{high2}{\tikztiming@useanchor{high2}}%
+ %
+ \expandafter\anchorborder\expandafter{\csname pgf@anchor@\pgf@sm@shape@name @center\endcsname}%
+ %
+ \nodeparts{}%
+}
+
+\def\tikztiming@nodes@getoffset{%
+ \begingroup
+ \pgfpointxy{0}{1}%
+ \pgfmathsetresultunitscale{\pgf@y}%
+ \pgfpoint{0}{\tikztiming@nodes@offset}%
+ \global\pgf@ya=\pgf@y
+ \endgroup
+}
+
+\tikzset{%
+ timing/nodes/.cd,
+ offset/.store in=\tikztiming@nodes@offset,
+ offset=0.25,
+}
+
+\def\tikztiming@nodecenteranchor{}
+
+\def\tikztiming@old@nodecenteranchor{%
+ \anchorpoints
+ \@ifundefined{oldcenter}%
+ {\@nameuse{originoffset}%
+ \pgf@x=-\pgf@x\relax
+ \pgf@y=-\pgf@y\relax
+ }%
+ {\@nameuse{oldcenter}}%
+}
+
+\def\tikztiming@useanchor#1{%
+ \anchorpoints
+ \@ifundefined{#1}%
+ {\PackageError{tikz-timing}%
+ {No such anchor '#1' defined for this transition!}{}%
+ \pgfpointorigin
+ }%
+ {\@nameuse{#1}}%
+}
+
+\tikzset{%
+ every tikztiming coordinate node/.style={anchor=origin},
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def\tikztiming@anchors#1#2{%
+ \@namedef{tikztiming@anchors@#1@#2}%
+}
+\def\tikztiming@anchorslet#1#2#3#4{%
+ \expandafter\let
+ \csname tikztiming@anchors@#1@#2\expandafter\endcsname
+ \csname tikztiming@anchors@#3@#4\endcsname
+}
+
+\tikztiming@anchors{@}{D}{%
+ \anchorpoint{originoffset}{0pt}{.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{0pt}{.5\height}%
+ \anchorpoint{low}{0pt}{-.5\height}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{@}{H}{%
+ \anchorpoint{originoffset}{0pt}{\height}%
+ \anchorpoint{high}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{0pt}%
+}
+
+\tikztiming@anchors{@}{L}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+}
+
+\tikztiming@anchors{@}{T}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+}
+
+\tikztiming@anchors{@}{Z}{%
+ \anchorpoint{originoffset}{0pt}{.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{D}{D}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+ \anchorpoint{high}{0pt}{.5\height}%
+ \anchorpoint{low}{0pt}{-.5\height}%
+}
+
+\tikztiming@anchors{L}{H}{%
+ \anchorpoint{originoffset}{.5\slope}{.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{.5\slope}{.5\height}%
+ \anchorpoint{low}{-.5\slope}{-.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+}
+
+\tikztiming@anchors{E}{H}{%
+ \anchorpoint{originoffset}{-.5\slope}{-.5\height}%
+ \anchorpoint{oldcenter}{-.5\slope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{.5\slope}{.5\height}%
+ \anchorpoint{low}{-.5\slope}{-.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+}
+
+\tikztiming@anchors{T}{T}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \ifnum 1=\c@tikztimingtrans
+ \anchorpoint{originoffset}{.5\slope}{-.5\height}%
+ \anchorpoint{high}{-.5\slope}{.5\height}%
+ \anchorpoint{low}{.5\slope}{-.5\height}%
+ \else
+ \anchorpoint{originoffset}{.5\slope}{.5\height}%
+ \anchorpoint{high}{.5\slope}{.5\height}%
+ \anchorpoint{low}{-.5\slope}{-.5\height}%
+ \fi
+}
+\tikztiming@anchorslet{T}{E}{T}{T}%
+
+\tikztiming@anchors{T}{@}{%
+ \ifnum 1=\c@tikztimingtrans
+ \anchorpoint{high}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{0pt}%
+ \else
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+ \fi
+}
+
+\tikztiming@anchors{H}{H}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{high}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{0pt}%
+}
+
+\tikztiming@anchors{L}{L}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+}
+
+\tikztiming@anchors{Z}{Z}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{E}{E}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \ifnum 1=\c@tikztimingtrans
+ \anchorpoint{originoffset}{.5\slope}{.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \anchorpoint{high}{.5\slope}{.5\height}%
+ \anchorpoint{low}{-.5\slope}{-.5\height}%
+ \else
+ \anchorpoint{originoffset}{-.5\slope}{.5\height}%
+ \anchorpoint{oldcenter}{-.5\slope}{-.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \anchorpoint{high}{-.5\slope}{.5\height}%
+ \anchorpoint{low}{.5\slope}{-.5\height}%
+ \fi
+}
+
+\tikztiming@anchors{H}{L}{%
+ \anchorpoint{originoffset}{.5\slope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{-.5\slope}{.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \anchorpoint{low}{.5\slope}{-.5\height}%
+}
+\tikztiming@anchorslet{H}{E}{H}{L}%
+
+\tikztiming@anchors{E}{L}{%
+ \anchorpoint{originoffset}{-.5\slope}{.5\height}%
+ \anchorpoint{oldcenter}{-.5\slope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{-.5\slope}{.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \anchorpoint{low}{.5\slope}{-.5\height}%
+}
+
+\tikztiming@anchors{E}{T}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \ifnum 1=\c@tikztimingtrans
+ \anchorpoint{originoffset}{-.5\slope}{-.5\height}%
+ \anchorpoint{oldcenter}{-.5\slope}{-.5\height}%
+ \anchorpoint{high}{.5\slope}{.5\height}%
+ \anchorpoint{low}{-.5\slope}{-.5\height}%
+ \else
+ \anchorpoint{originoffset}{-.5\slope}{.5\height}%
+ \anchorpoint{oldcenter}{-.5\slope}{-.5\height}%
+ \anchorpoint{high}{-.5\slope}{.5\height}%
+ \anchorpoint{low}{.5\slope}{-.5\height}%
+ \fi
+}
+
+\tikztiming@anchors{E}{Z}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{oldcenter}{-\zslope}{-.5\height}%
+ \anchorpoint{HIGH}{-\zslope}{.5\height}%
+ \anchorpoint{high}{-\zslope}{.5\height}%
+ \anchorpoint{low}{-\zslope}{-.5\height}%
+}
+
+\tikztiming@anchors{Z}{D}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+ \anchorpoint{high}{.5\dslope}{.5\height}%
+ \anchorpoint{low}{.5\dslope}{-.5\height}%
+}
+
+\tikztiming@anchors{D}{Z}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\dslope}{.5\height}%
+ \anchorpoint{high}{-.5\dslope}{.5\height}%
+ \anchorpoint{low}{-.5\dslope}{-.5\height}%
+}
+
+\tikztiming@anchors{D}{H}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\dslope}{.5\height}%
+ \anchorpoint{high}{.5\dslope}{.5\height}%
+ \anchorpoint{high2}{-.5\dslope}{.5\height}%
+ \anchorpoint{low}{-.5\dslope}{-.5\height}%
+}
+
+\tikztiming@anchors{D}{L}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\dslope}{.5\height}%
+ \anchorpoint{high}{-.5\dslope}{.5\height}%
+ \anchorpoint{low2}{-.5\dslope}{-.5\height}%
+ \anchorpoint{low}{.5\dslope}{-.5\height}%
+}
+\tikztiming@anchorslet{D}{T}{D}{L}%
+
+\tikztiming@anchors{D@edge@}{D}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\dslope}{.5\height}%
+ \anchorpoint{high}{-.5\dslope}{.5\height}%
+ \anchorpoint{high2}{.5\dslope}{.5\height}%
+ \anchorpoint{low}{-.5\dslope}{-.5\height}%
+ \anchorpoint{low2}{.5\dslope}{-.5\height}%
+}
+\tikztiming@anchorslet{D}{U}{D@edge@}{D}
+\tikztiming@anchorslet{U}{D}{D@edge@}{D}
+\tikztiming@anchorslet{D}{D@edge@}{D@edge@}{D}
+\tikztiming@anchorslet{D@edge@}{D@edge@}{D@edge@}{D}
+\tikztiming@anchorslet{D}{E}{D@edge@}{D}
+\tikztiming@anchorslet{E}{D}{D@edge@}{D}
+
+\tikztiming@anchorslet{L}{E}{L}{H}%
+\tikztiming@anchorslet{L}{T}{L}{H}%
+\tikztiming@anchorslet{H}{T}{H}{L}%
+\tikztiming@anchorslet{T}{H}{H}{L}%
+
+\tikztiming@anchors{D}{D}{%
+ \anchorpoint{originoffset}{0pt}{0pt}%
+ \anchorpoint{oldcenter}{0pt}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{0pt}{.5\height}%
+ \anchorpoint{low}{0pt}{-.5\height}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+\tikztiming@anchorslet{D}{@}{D}{D}
+\tikztiming@anchorslet{E}{@}{D}{D}
+\tikztiming@anchorslet{U}{U}{D}{D}
+
+\tikztiming@anchorslet{@}{E}{@}{D}
+
+\tikztiming@anchors{L}{D}{%
+ \anchorpoint{originoffset}{.5\dslope}{.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{.5\dslope}{.5\height}%
+ \anchorpoint{low}{-.5\dslope}{-.5\height}%
+ \anchorpoint{low2}{.5\dslope}{-.5\height}%
+ \anchorpoint{HIGH}{-.5\dslope}{.5\height}%
+}
+
+\tikztiming@anchors{T}{D}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\dslope}{.5\height}%
+ \ifnum 1=\c@tikztimingtrans
+ \anchorpoint{originoffset}{.5\dslope}{-.5\height}%
+ \anchorpoint{high}{-.5\dslope}{.5\height}%
+ \anchorpoint{high2}{.5\dslope}{.5\height}%
+ \anchorpoint{low}{.5\dslope}{-.5\height}%
+ \else
+ \anchorpoint{originoffset}{.5\dslope}{.5\height}%
+ \anchorpoint{high}{.5\dslope}{.5\height}%
+ \anchorpoint{low}{-.5\dslope}{-.5\height}%
+ \anchorpoint{low2}{.5\dslope}{-.5\height}%
+ \fi
+}
+
+\tikztiming@anchors{H}{D}{%
+ \anchorpoint{originoffset}{.5\dslope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{-.5\dslope}{.5\height}%
+ \anchorpoint{high}{-.5\dslope}{.5\height}%
+ \anchorpoint{high2}{.5\dslope}{.5\height}%
+ \anchorpoint{low}{.5\dslope}{-.5\height}%
+}
+
+\tikztiming@anchors{Z}{E}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{\zslope}{.5\height}%
+ \anchorpoint{low}{\zslope}{-.5\height}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{Z}{H}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{\zslope}{.5\height}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{Z}{T}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+ \ifnum1=\c@tikztimingtrans\relax
+ \anchorpoint{low}{\zslope}{-.5\height}%
+ \else
+ \anchorpoint{high}{\zslope}{.5\height}%
+ \fi
+}
+
+\tikztiming@anchors{T}{H}{%
+ \ifnum1=\c@tikztimingtrans\relax
+ \anchorpoint{high}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{0pt}%
+ \else
+ \anchorpoint{originoffset}{.5\slope}{.5\height}%
+ \anchorpoint{low}{-.5\slope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{.5\slope}{.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \fi
+}
+
+\tikztiming@anchors{T}{L}{%
+ \ifnum1=\c@tikztimingtrans\relax
+ \anchorpoint{originoffset}{.5\slope}{-.5\height}%
+ \anchorpoint{low}{.5\slope}{-.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{-.5\slope}{.5\height}%
+ \anchorpoint{HIGH}{-.5\slope}{.5\height}%
+ \else
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+ \fi
+}
+
+\tikztiming@anchors{T}{Z}{%
+ \ifnum1=\c@tikztimingtrans\relax
+ \anchorpoint{high}{0pt}{0pt}%
+ \anchorpoint{mid}{\zslope}{-.5\height}%
+ \anchorpoint{HIGH}{0pt}{0pt}%
+ \else
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{mid}{\zslope}{.5\height}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+ \fi
+}
+
+\tikztiming@anchors{Z}{L}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{low}{\zslope}{-.5\height}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{H}{Z}{%
+ \anchorpoint{high}{0pt}{0pt}%
+ \anchorpoint{mid}{\zslope}{-.5\height}%
+ \anchorpoint{HIGH}{0pt}{0pt}%
+}
+
+\tikztiming@anchors{L}{Z}{%
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{mid}{\zslope}{.5\height}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+}
+
+\tikztiming@anchors{Z}{Z}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{H}{@}{%
+ \anchorpoint{high}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{0pt}%
+}
+
+\tikztiming@anchors{L}{@}{%
+ \anchorpoint{low}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{\height}%
+}
+
+\tikztiming@anchors{Z}{@}{%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+\tikztiming@anchors{}{@}{%
+ \anchorpoint{originoffset}{0pt}{.5\height}%
+ \anchorpoint{mid}{0pt}{0pt}%
+ \anchorpoint{high}{0pt}{.5\height}%
+ \anchorpoint{low}{0pt}{-.5\height}%
+ \anchorpoint{HIGH}{0pt}{.5\height}%
+}
+
+% \end{macrocode}
+%
+% Use the \pkg{pgfopts} to handle the package options.
+% \begin{macrocode}
+\RequirePackage{pgfopts}
+\ProcessPgfOptions{/tikz/timing/node}
+% \end{macrocode}
+% \iffalse
+%</tikz-timing-advnodes.sty>
+% \fi
+%
+% \subsubsection{Intervals}
+% \iffalse
+%<*tikz-timing-interval.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-interval}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for alternative Z transitions]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\tikztiming@linterval\relax
+\let\tikztiming@rinterval\relax
+
+\tikztimingdef{LZ}{
+ \tikztiming@rinterval
+ {\newdraw [\style]}
+ {-- ++(\zslope,+\height/2.)}
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{HZ}{%
+ \tikztiming@rinterval
+ {\newdraw [\style]}
+ {-- ++(\zslope,-\height/2.)}
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{TZ}{%
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \tikztiming@rinterval
+ {\newdraw [\style]}
+ {-- ++(\zslope,\value{tikztimingtrans}*\height/2.)}
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{ZL}{%
+ \tikztiming@linterval
+ {\newdraw}
+ {-- ++(\zslope,-\height/2.)}
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{ZH}{%
+ \tikztiming@linterval
+ {\newdraw}
+ {-- ++(\zslope,\height/2.)}
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{ZT}{%
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \tikztiming@linterval
+ {\newdraw [\style]}
+ {-- ++(\zslope,\value{tikztimingtrans}*\height/2.)}
+ -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\def\tikztiming@onetwo#1#2{#1#2}
+\def\tikztiming@twoone#1#2{#2#1}
+
+\let\tikztiming@linterval\tikztiming@onetwo
+\let\tikztiming@rinterval\tikztiming@onetwo
+
+\tikzset{timing/interval/.code={\pgfqkeys{/tikz/timing/interval}{#1}}}
+\tikzset{timing/interval/.cd,
+ lo/.style={/tikz/timing/interval/left open},
+ lc/.style={/tikz/timing/interval/left close},
+ ro/.style={/tikz/timing/interval/right open},
+ rc/.style={/tikz/timing/interval/right close},
+ left close/.code={\let\tikztiming@linterval\tikztiming@onetwo},
+ left open/.code={\let\tikztiming@linterval\tikztiming@twoone},
+ right open/.code={\let\tikztiming@rinterval\tikztiming@onetwo},
+ right close/.code={\let\tikztiming@rinterval\tikztiming@twoone},
+}
+\tikzset{
+ timing/interval/normal/.style={/tikz/timing/interval/left close,/tikz/timing/interval/right open},
+ timing/interval/verilog/.style={/tikz/timing/interval/normal},
+ timing/interval/metachar/.style={/tikz/timing/metachar={#1}[2]{[timing/interval={##2}]}},
+}
+
+% \end{macrocode}
+% \iffalse
+%</tikz-timing-interval.sty>
+% \fi
+%
+% \subsubsection{Beamer Overlay Support}
+% \iffalse
+%<*tikz-timing-beamer.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-beamer}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for beamer overlay support]
+% \end{macrocode}
+%
+% Experimental library for marginal beamer overlay support. It will change in future versions. Use at own risk!
+% \begin{macrocode}
+
+\PackageWarning{\@currname}{This library is experimental and will change in future versions!}{}{}
+
+\tikztiming@defcode<#1>{
+ \tikztiming@output@addcode{
+ node [timing/save] (timing@save) {};%
+ \onslide<#1>
+ \draw [timing/restore] (timing@save) ++(0,0)
+ }
+ \tikztiming@parser
+}
+% \end{macrocode}
+% \iffalse
+%</tikz-timing-beamer.sty>
+% \fi
+%
+% \subsubsection{Compatibility with \protect\pkg{ifsym} Macros}
+% \iffalse
+%<*tikz-timing-ifsym.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikz-timing-ifsym}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ tikz-timing library for ifsym compatible macros]
+% \end{macrocode}
+%
+%
+% Set up styles to match behaviour of \pkg{ifsym}. Slope and size is is adjusted.
+% The macros only have 60\% of the height.
+% \begin{macrocode}
+\tikzset{%
+ timing/ifsym/macro/.style={/tikz/timing/ifsym,/utils/exec={\pgfmathparse{.6*\f@size}\let\ysize\pgfmathresult},/tikz/y=\ysize},
+ timing/ifsym/.style={%
+ /tikz,timing/slope=0,x=\f@size,y=\f@size,line width=0.1ex,
+% \end{macrocode}
+% Define "|" to create a glitch. While it can be ignored in "H|L" or "L|H" it can
+% also be used like "L|L" and "H|H".
+% \begin{macrocode}
+ timing/metachar={|}{G},
+% \end{macrocode}
+% The "X" is used for "M" and is set to black.
+% \begin{macrocode}
+ timing/x/.style={},
+% \end{macrocode}
+% Define "M"/"m" to be equal to "X"/"x":
+% \begin{macrocode}
+ timing/metachar={M}[1]{#1X},
+ timing/metachar={m}[1]{#1x},
+% \end{macrocode}
+%
+% Code changes:
+% \begin{macrocode}
+ /utils/exec={%
+% \end{macrocode}
+%
+% The |setdslope| macro is redefined to allow value higher than 1.
+% \begin{macrocode}
+\def\tikztimingsetdslope##1{%
+ \pgfmathparse{max(0.0,##1)}%
+ \let\tikztiming@dslope\pgfmathresult
+ \edef\timingdslope{\tikztiming@dslope*\noexpand\timingwidth}%
+}
+% \end{macrocode}
+%
+% The "<" and ">" characters are defined as code characters. They
+% check if there appear twice which doubles their width.
+% A macro is used to remove the second appearance from the input.
+% \begin{macrocode}
+\tikztiming@defcode{<}{%
+ \@ifnextchar{<}%
+ {\tikztiming@ifsym@longslope{X}{D}}%
+ {\tikztiming@parser [timing/dslope=1] 0Xd;}%
+}%
+\tikztiming@defcode{>}{%
+ \@ifnextchar{>}%
+ {\tikztiming@ifsym@longslope{D}{X}}%
+ {\tikztiming@parser [timing/dslope=1] 0Dx;}%
+}%
+\def\tikztiming@ifsym@longslope##1##2##3{
+ \tikztiming@parser [timing/dslope=2.] 0##1 ##2;%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+ }},
+}
+% \end{macrocode}
+%
+% Define library options.
+% \begin{macrocode}
+\tikzset{%
+ timing/ifsym/.cd,
+ provide/.code={\let\tikztiming@ifsym@def\providecommand},
+ renew/.code={\let\tikztiming@ifsym@def\renewcommand},
+ new/.code={\let\tikztiming@ifsym@def\newcommand},
+ off/.code={\let\tikztiming@ifsym@def\@gobbletwo},
+}
+% \end{macrocode}
+%
+% Execute library options.
+% \begin{macrocode}
+\tikzset{timing/ifsym/provide}%
+\RequirePackage{pgfopts}
+\ProcessPgfOptions{/tikz/timing/ifsym}
+% \end{macrocode}
+%
+% Provide all timing symbol macros from |[electronic]{ifsym}|:
+% \begin{macrocode}
+\tikztiming@ifsym@def{\RaisingEdge}{\hbox{\texttiming[timing/ifsym/macro]{.4L .4H}}}
+\tikztiming@ifsym@def{\FallingEdge}{\hbox{\texttiming[timing/ifsym/macro]{.4H .4L}}}
+\tikztiming@ifsym@def{\ShortPulseHigh}{\hbox{\texttiming[timing/ifsym/macro]{.4L .2H .4L}}}
+\tikztiming@ifsym@def{\ShortPulseLow}{\hbox{\texttiming[timing/ifsym/macro]{.4H .2L .4H}}}
+\tikztiming@ifsym@def{\PulseHigh}{\hbox{\texttiming[timing/ifsym/macro]{.4L .6H .4L}}}
+\tikztiming@ifsym@def{\PulseLow}{\hbox{\texttiming[timing/ifsym/macro]{.4H .6L .4H}}}
+\tikztiming@ifsym@def{\LongPulseHigh}{\hbox{\texttiming[timing/ifsym/macro]{.4L H .4L}}}
+\tikztiming@ifsym@def{\LongPulseLow}{\hbox{\texttiming[timing/ifsym/macro]{.4H L .4H}}}
+% \end{macrocode}
+%
+% Provide \cs{textifsym} macro:
+% \begin{macro}{\textifsym}
+% \begin{macrocode}
+\tikztiming@ifsym@def{\textifsym}{\texttiming[timing/ifsym]}
+% \end{macrocode}
+% \end{macro}
+%
+% Clean-up:
+% \begin{macrocode}
+\let\tikztiming@ifsym@def\@undefined
+% \end{macrocode}
+% \iffalse
+%</tikz-timing-ifsym.sty>
+% \fi
+%
+%
+% \Finale
+% \endinput
diff --git a/graphics/pgf/contrib/tikz-timing/tikz-timing.ins b/graphics/pgf/contrib/tikz-timing/tikz-timing.ins
new file mode 100644
index 0000000000..e1a19135c6
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-timing/tikz-timing.ins
@@ -0,0 +1,48 @@
+\input ydocstrip.tex
+\keepsilent
+\askforoverwritefalse
+
+\generate{%
+ \file{tikz-timing.sty}{\from{tikz-timing.dtx}{tikz-timing.sty}}%
+ \file{tikz-timing-arrows.sty}{\from{tikz-timing.dtx}{tikz-timing-arrows.sty}}%
+ \file{tikz-timing-either.sty}{\from{tikz-timing.dtx}{tikz-timing-either.sty}}%
+ \file{tikz-timing-overlays.sty}{\from{tikz-timing.dtx}{tikz-timing-overlays.sty}}%
+ \file{tikz-timing-clockarrows.sty}{\from{tikz-timing.dtx}{tikz-timing-clockarrows.sty}}%
+ \file{tikz-timing-columntype.sty}{\from{tikz-timing.dtx}{tikz-timing-columntype.sty}}%
+ \file{tikz-timing-nicetabs.sty}{\from{tikz-timing.dtx}{tikz-timing-nicetabs.sty}}%
+ \file{tikz-timing-counters.sty}{\from{tikz-timing.dtx}{tikz-timing-counters.sty}}%
+ \file{tikz-timing-advnodes.sty}{\from{tikz-timing.dtx}{tikz-timing-advnodes.sty}}%
+ \file{tikz-timing-interval.sty}{\from{tikz-timing.dtx}{tikz-timing-interval.sty}}%
+ \file{tikz-timing-beamer.sty}{\from{tikz-timing.dtx}{tikz-timing-beamer.sty}}%
+ \file{tikz-timing-ifsym.sty}{\from{tikz-timing.dtx}{tikz-timing-ifsym.sty}}%
+% \file{tikz-timing-examplecode.sty}{\from{tikz-timing.dtx}{tikz-timing-examplecode.sty}}%
+}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* tikz-timing.sty *}
+\Msg{* tikz-timing-arrows.sty *}
+\Msg{* tikz-timing-either.sty *}
+\Msg{* tikz-timing-overlays.sty *}
+\Msg{* tikz-timing-clockarrows.sty *}
+\Msg{* tikz-timing-columntype.sty *}
+\Msg{* tikz-timing-nicetabs.sty *}
+\Msg{* tikz-timing-counters.sty *}
+\Msg{* tikz-timing-advnodes.sty *}
+\Msg{* tikz-timing-interval.sty *}
+\Msg{* tikz-timing-beamer.sty *}
+\Msg{* tikz-timing-ifsym.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file tikz-timing.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
+%% vim: ft=tex
diff --git a/graphics/pgf/contrib/tikz-timing/tikz-timing.pdf b/graphics/pgf/contrib/tikz-timing/tikz-timing.pdf
new file mode 100644
index 0000000000..b32170d789
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-timing/tikz-timing.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-truchet/README.md b/graphics/pgf/contrib/tikz-truchet/README.md
new file mode 100644
index 0000000000..ca529c6282
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-truchet/README.md
@@ -0,0 +1,6 @@
+# tikz-truchet LaTeX package
+
+`tikz-truchet` is a package for LaTeX that draws Truchet tiles, as used in Colin Beveridge's article [__Too good to be Truchet__](http://chalkdustmagazine.com/features/too-good-to-be-truchet/) in issue 08 of Chalkdust.
+
+## Licensing
+This work may be distributed and/or modified under the conditions of the [MIT license](LICENSE.txt).
diff --git a/graphics/pgf/contrib/tikz-truchet/tikz-truchet.dtx b/graphics/pgf/contrib/tikz-truchet/tikz-truchet.dtx
new file mode 100644
index 0000000000..0db3b06fb4
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-truchet/tikz-truchet.dtx
@@ -0,0 +1,446 @@
+%\iffalse meta-comment
+%Copyright (c) 2018 Matthew Scroggs
+%
+%Permission is hereby granted, free of charge, to any person obtaining a copy
+%of this software and associated documentation files (the "Software"), to deal
+%in the Software without restriction, including without limitation the rights
+%to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+%copies of the Software, and to permit persons to whom the Software is
+%furnished to do so, subject to the following conditions:
+%
+%The above copyright notice and this permission notice shall be included in all
+%copies or substantial portions of the Software.
+%
+%THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+%OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+%SOFTWARE.
+%\fi
+
+% \lstinline{tikz-truchet} is a package for \LaTeX{} that draws Truchet tiles,
+% as features in the article \emph{Too good to be Truchet} by Colin Beveridge\footnote{Chalkdust Magazine issue 08, Autumn 2018,
+% \url{http://chalkdustmagazine.com/features/too-good-to-be-truchet/}}.
+%\iffalse
+%<*documentation>
+\documentclass{article}
+\usepackage{tikz-truchet}
+\usepackage{doc}
+\usepackage{listings}
+\usepackage{url}
+\usepackage{hyperref}
+\lstset{basicstyle=\ttfamily\footnotesize,commentstyle=\color{red},language=[LaTeX]TeX}
+\title{tikz-truchet v\input{VERSION}}
+\author{Matthew W.~Scroggs}
+\begin{document}
+\maketitle
+ \DocInput{tikz-truchet.dtx}
+\end{document}
+%</documentation>
+%\fi
+%
+%\iffalse
+%<*truchet>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikz-truchet}[2019/02/12 tikz-truchet]
+
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+
+%\fi
+% Before starting, I recommend setting the following tikz options to make your pictures look nicer:
+%\begin{lstlisting}
+\tikzset{x=2cm,y=2cm,line cap=round,line join=round, every picture}
+%\end{lstlisting}
+%
+% \section{Squares}
+% \DescribeMacro{\truchetsquare}
+% You can draw square Truchet tile using the command \lstinline{\truchetsquare}.
+% The following code will produce the output below.
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \truchetsquare{b}{w}{b}{w}{b}
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}
+% \truchetsquare{b}{w}{b}{w}{b}
+% \end{tikzpicture}
+% \end{center}
+% The five inputs of the command are the colour (\lstinline{b} or \lstinline{w}) at the centre, the North East, North West, South West,
+% and South East corners (in that order)
+%
+% You can a square bracketed input to move the tiles. The tiles are 1 unit wide.
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \truchetsquare{b}{w}{b}{w}{b}
+ \truchetsquare[(1.2,0)]{w}{b}{w}{b}{w}
+ \truchetsquare[(0,-1.2)]{b}{b}{w}{b}{w}
+ \truchetsquare[(1.2,-1.2)]{w}{w}{b}{w}{b}
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}
+% \truchetsquare{b}{w}{b}{w}{b}
+% \truchetsquare[(1.2,0)]{w}{b}{w}{b}{w}
+% \truchetsquare[(0,-1.2)]{b}{b}{w}{b}{w}
+% \truchetsquare[(1.2,-1.2)]{w}{w}{b}{w}{b}
+% \end{tikzpicture}
+% \end{center}
+%
+%\iffalse
+\newcommand{\truchetsquare}[6][(0,0)]{
+ \begin{scope}[shift={#1}]
+ \ifthenelse{\equal{#2}{b}}{
+ \draw[black,fill=black] (0,0) rectangle (1,1);
+ }{
+ \draw[white,fill=white] (0,0) rectangle (1,1);
+ }
+ \ifthenelse{\equal{#3}{#2}}{}{
+ \ifthenelse{\equal{#3}{b}}{
+ \draw [black,fill=black,domain=0:90,line width=1pt] plot ({0.5*cos(\x)}, {1-0.5*sin(\x)}) -- (0,1) -- cycle;
+ }{
+ \draw [white,fill=white,domain=0:90,line width=1pt] plot ({0.5*cos(\x)}, {1-0.5*sin(\x)}) -- (0,1) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#4}{#2}}{}{
+ \ifthenelse{\equal{#4}{b}}{
+ \draw [black,fill=black,domain=0:90,line width=1pt] plot ({1-0.5*cos(\x)}, {1-0.5*sin(\x)}) -- (1,1) -- cycle;
+ }{
+ \draw [white,fill=white,domain=0:90,line width=1pt] plot ({1-0.5*cos(\x)}, {1-0.5*sin(\x)}) -- (1,1) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#5}{#2}}{}{
+ \ifthenelse{\equal{#5}{b}}{
+ \draw [black,fill=black,domain=0:90,line width=1pt] plot ({1-0.5*cos(\x)}, {0.5*sin(\x)}) -- (1,0) -- cycle;
+ }{
+ \draw [white,fill=white,domain=0:90,line width=1pt] plot ({1-0.5*cos(\x)}, {0.5*sin(\x)}) -- (1,0) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#6}{#2}}{}{
+ \ifthenelse{\equal{#6}{b}}{
+ \draw [black,fill=black,domain=0:90,line width=1pt] plot ({0.5*cos(\x)}, {0.5*sin(\x)}) -- (0,0) -- cycle;
+ }{
+ \draw [white,fill=white,domain=0:90,line width=1pt] plot ({0.5*cos(\x)}, {0.5*sin(\x)}) -- (0,0) -- cycle;
+ }
+ }
+ \draw[black,line width=1pt] (0,0) rectangle (1,1);
+ \end{scope}
+}
+%\fi
+%
+% \DescribeMacro{\diagonalsquare}
+% The command \lstinline{\diagonalsquare} can be used to draw a square tile that is half white and half black along a diagonal.
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \diagonalsquare{x}{w}{x}{b}
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}
+% \diagonalsquare{x}{w}{x}{b}
+% \end{tikzpicture}
+% \end{center}
+% The four inputs are the color (\lstinline{b} or \lstinline{w}), or \lstinline{x} if the colour changes at that corner, of
+% the North East, North West, South West, and South East corners (in that order).
+%
+% \DescribeMacro{\tileA}
+% \DescribeMacro{\tileB}
+% \DescribeMacro{\tileC}
+% \DescribeMacro{\tileD}
+% There are only five such tiles. They can be created using the convenience functions
+% \lstinline{\tileA},
+% \lstinline{\tileB},
+% \lstinline{\tileC}, and
+% \lstinline{\tileD}.
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \tileA
+ \tileB[(1.2,0)]
+ \tileC[(2.4,0)]
+ \tileD[(3.6,0)]
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}
+% \tileA
+% \tileB[(1.2,0)]
+% \tileC[(2.4,0)]
+% \tileD[(3.6,0)]
+% \end{tikzpicture}
+% \end{center}
+%
+%\iffalse
+\newcommand{\diagonalsquare}[5][(0,0)]{
+ \begin{scope}[shift={#1}]
+ \draw[white,fill=white] (0,0) rectangle (1,1);
+ \ifthenelse{\equal{#2}{b}}{
+ \draw [black,fill=black,line width=1pt] (0,0) -- (0,1) -- (1,1) -- cycle;
+ }{}
+ \ifthenelse{\equal{#3}{b}}{
+ \draw [black,fill=black,line width=1pt] (0,1) -- (1,1) -- (1,0) -- cycle;
+ }{}
+ \ifthenelse{\equal{#4}{b}}{
+ \draw [black,fill=black,line width=1pt] (1,1) -- (1,0) -- (0,0) -- cycle;
+ }{}
+ \ifthenelse{\equal{#5}{b}}{
+ \draw [black,fill=black,line width=1pt] (1,0) -- (0,0) -- (0,1) -- cycle;
+ }{}
+ \draw[black,line width=1pt] (0,0) rectangle (1,1);
+ \end{scope}
+}
+
+\newcommand{\tileA}[1][(0,0)]{\diagonalsquare[#1]{x}{w}{x}{b}}
+\newcommand{\tileB}[1][(0,0)]{\diagonalsquare[#1]{b}{x}{w}{x}}
+\newcommand{\tileC}[1][(0,0)]{\diagonalsquare[#1]{x}{b}{x}{w}}
+\newcommand{\tileD}[1][(0,0)]{\diagonalsquare[#1]{w}{x}{b}{x}}
+
+%\fi
+%
+% \section{Hexagons}
+% To draw hexagonal Truchet tiles, you can use the commands \lstinline{\truchethex} and \lstinline{\truchetsplithex}.
+%
+% \DescribeMacro{\truchethex}
+% The command \lstinline{\truchethex} takes 7 inputs: the colour (\lstinline{b} or \lstinline{w}) at the
+% centre, then all the corners starting at the top left and going clockwise. Again an argument can be passed in square
+% brackets to move the tile.
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \truchethex{b}{w}{b}{w}{b}{w}{b}
+ \truchethex[(2.2,0)]{w}{w}{b}{w}{b}{w}{b}
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}
+% \truchethex{b}{w}{b}{w}{b}{w}{b}
+% \truchethex[(2.2,0)]{w}{w}{b}{w}{b}{w}{b}
+% \end{tikzpicture}
+% \end{center}
+%
+% \DescribeMacro{\truchetsplithex}
+% The command \lstinline{\truchetsplithex} draws a Truchet tile split in half like the following.
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \truchetsplithex
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}
+% \truchetsplithex
+% \end{tikzpicture}
+% \end{center}
+%
+% \DescribeEnv{rotatehex}
+% The environment \lstinline{rotatehex} can be used to rotate a hexagonal tile about its centre. The angle should be given in degrees.
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}
+ \begin{rotatehex}{30}
+ \truchetsplithex
+ \end{rotatehex}
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}
+% \begin{rotatehex}{30}
+% \truchetsplithex
+% \end{rotatehex}
+% \begin{rotatehex}{30}
+% \truchetsplithex
+% \end{rotatehex}
+% \end{tikzpicture}
+% \end{center}
+%
+%\iffalse
+\newcommand{\truchetsplithex}[1][(0,0)]{
+ \begin{scope}[shift={#1}]
+ \draw[white,fill=white] (0,0) -- (1,0) -- (1.5,0.866) -- (1,1.732) -- (0,1.732) -- (-0.5,0.866) -- cycle;
+ \draw[black,fill=black] (0,0) -- (.5,0) -- (.5,1.732) -- (0,1.732) -- (-0.5,0.866) -- cycle;
+ \draw [black,fill=black,domain=120:240,line width=1pt] plot ({1.5+0.5*cos(\x)}, {0.866+0.5*sin(\x)}) -- (1.5,0.866) -- cycle;
+ \draw [white,fill=white,domain=-60:60,line width=1pt] plot ({-0.5+0.5*cos(\x)}, {0.866+0.5*sin(\x)}) -- (-0.5,0.866) -- cycle;
+ \draw[black,line width=1pt] (0,0) -- (1,0) -- (1.5,0.866) -- (1,1.732) -- (0,1.732) -- (-0.5,0.866) -- cycle;
+ \end{scope}
+}
+
+\newcommand{\truchethex}[8][(0,0)]{
+ \begin{scope}[shift={#1}]
+ \ifthenelse{\equal{#2}{b}}{
+ \draw[black,fill=black] (0,0) -- (1,0) -- (1.5,0.866) -- (1,1.732) -- (0,1.732) -- (-0.5,0.866) -- cycle;
+ }{
+ \draw[white,fill=white] (0,0) -- (1,0) -- (1.5,0.866) -- (1,1.732) -- (0,1.732) -- (-0.5,0.866) -- cycle;
+ }
+ \ifthenelse{\equal{#3}{#2}}{}{
+ \ifthenelse{\equal{#3}{b}}{
+ \draw [black,fill=black,domain=240:360,line width=1pt] plot ({0.5*cos(\x)}, {1.732+0.5*sin(\x)}) -- (0,1.732) -- cycle;
+ }{
+ \draw [white,fill=white,domain=240:360,line width=1pt] plot ({0.5*cos(\x)}, {1.732+0.5*sin(\x)}) -- (0,1.732) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#4}{#2}}{}{
+ \ifthenelse{\equal{#4}{b}}{
+ \draw [black,fill=black,domain=180:300,line width=1pt] plot ({1+0.5*cos(\x)}, {1.732+0.5*sin(\x)}) -- (1,1.732) -- cycle;
+ }{
+ \draw [white,fill=white,domain=180:300,line width=1pt] plot ({1+0.5*cos(\x)}, {1.732+0.5*sin(\x)}) -- (1,1.732) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#5}{#2}}{}{
+ \ifthenelse{\equal{#5}{b}}{
+ \draw [black,fill=black,domain=120:240,line width=1pt] plot ({1.5+0.5*cos(\x)}, {0.866+0.5*sin(\x)}) -- (1.5,0.866) -- cycle;
+ }{
+ \draw [white,fill=white,domain=120:240,line width=1pt] plot ({1.5+0.5*cos(\x)}, {0.866+0.5*sin(\x)}) -- (1.5,0.866) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#6}{#2}}{}{
+ \ifthenelse{\equal{#6}{b}}{
+ \draw [black,fill=black,domain=60:180,line width=1pt] plot ({1+0.5*cos(\x)}, {0.5*sin(\x)}) -- (1,0) -- cycle;
+ }{
+ \draw [white,fill=white,domain=60:180,line width=1pt] plot ({1+0.5*cos(\x)}, {0.5*sin(\x)}) -- (1,0) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#7}{#2}}{}{
+ \ifthenelse{\equal{#7}{b}}{
+ \draw [black,fill=black,domain=0:120,line width=1pt] plot ({0.5*cos(\x)}, {0.5*sin(\x)}) -- (0,0) -- cycle;
+ }{
+ \draw [white,fill=white,domain=0:120,line width=1pt] plot ({0.5*cos(\x)}, {0.5*sin(\x)}) -- (0,0) -- cycle;
+ }
+ }
+ \ifthenelse{\equal{#8}{#2}}{}{
+ \ifthenelse{\equal{#8}{b}}{
+ \draw [black,fill=black,domain=-60:60,line width=1pt] plot ({-0.5+0.5*cos(\x)}, {0.866+0.5*sin(\x)}) -- (-0.5,0.866) -- cycle;
+ }{
+ \draw [white,fill=white,domain=-60:60,line width=1pt] plot ({-0.5+0.5*cos(\x)}, {0.866+0.5*sin(\x)}) -- (-0.5,0.866) -- cycle;
+ }
+ }
+ \draw[black,line width=1pt] (0,0) -- (1,0) -- (1.5,0.866) -- (1,1.732) -- (0,1.732) -- (-0.5,0.866) -- cycle;
+ \end{scope}
+}
+
+
+\newenvironment{rotatehex}[1]{
+ \begin{scope}[shift={(0.5,0.866)}]
+ \begin{scope}[rotate=#1]
+ \begin{scope}[shift={(-0.5,-0.866)}]
+}{
+ \end{scope}
+ \end{scope}
+ \end{scope}
+}
+
+%\fi
+%
+% \section{Cubes}
+% \DescribeMacro{\truchetcube}
+% The command \lstinline{\truchetcube} can be used to draw Cubes with differently coloured faces.
+% The six inputs of the command are the colour (\lstinline{b} or \lstinline{w}) of the
+% bottom, front, right, back, left, and top faces of the cube (in that order).
+%\iffalse
+%<*example>
+%\fi
+\begin{lstlisting}
+\begin{tikzpicture}[x=1.2cm,y=1.2cm]
+\truchetcube{w}{w}{w}{w}{w}{w}
+\truchetcube[(0,-3cm)]{b}{b}{b}{b}{b}{b}
+\truchetcube[(2.4cm,0)]{w}{w}{w}{w}{w}{b}
+\truchetcube[(2.4cm,-3cm)]{b}{b}{b}{b}{b}{w}
+\end{tikzpicture}
+\end{lstlisting}
+%\iffalse
+%</example>
+%\fi
+% \begin{center}
+% \begin{tikzpicture}[x=1.2cm,y=1.2cm]
+% \truchetcube{w}{w}{w}{w}{w}{w}
+% \truchetcube[(0,-3cm)]{b}{b}{b}{b}{b}{b}
+% \truchetcube[(2.4cm,0)]{w}{w}{w}{w}{w}{b}
+% \truchetcube[(2.4cm,-3cm)]{b}{b}{b}{b}{b}{w}
+% \end{tikzpicture}
+% \end{center}
+%\iffalse
+
+\newcommand{\truchetcube}[7][(0,0)]{
+ \begin{scope}[shift={#1}]
+ %1.17,0.22
+ %-0.38,0.67
+ \coordinate (A) at (0,0);
+ \coordinate (B) at (1.17,0.22);
+ \coordinate (C) at (0.57,0.84);
+ \coordinate (D) at (-0.6,0.62);
+ \coordinate (E) at (0,1);
+ \coordinate (F) at (1.17,1.22);
+ \coordinate (G) at (0.57,1.84);
+ \coordinate (H) at (-0.6,1.62);
+ %faces
+ \ifthenelse{\equal{#2}{b}}
+ {\fill[fill=black,fill opacity=0.6] (A) -- (B) -- (C) -- (D) -- cycle;}
+ {\fill[fill=white,fill opacity=0.6] (A) -- (B) -- (C) -- (D) -- cycle;}
+ \ifthenelse{\equal{#3}{b}}
+ {\fill[fill=black,fill opacity=0.6] (A) -- (B) -- (F) -- (E) -- cycle;}
+ {\fill[fill=white,fill opacity=0.6] (A) -- (B) -- (F) -- (E) -- cycle;}
+ \ifthenelse{\equal{#4}{b}}
+ {\fill[fill=black,fill opacity=0.6] (B) -- (C) -- (G) -- (F) -- cycle;}
+ {\fill[fill=white,fill opacity=0.6] (B) -- (C) -- (G) -- (F) -- cycle;}
+ \ifthenelse{\equal{#5}{b}}
+ {\fill[fill=black,fill opacity=0.6] (C) -- (D) -- (H) -- (G) -- cycle;}
+ {\fill[fill=white,fill opacity=0.6] (C) -- (D) -- (H) -- (G) -- cycle;}
+ \ifthenelse{\equal{#6}{b}}
+ {\fill[fill=black,fill opacity=0.6] (D) -- (A) -- (E) -- (H) -- cycle;}
+ {\fill[fill=white,fill opacity=0.6] (D) -- (A) -- (E) -- (H) -- cycle;}
+ \ifthenelse{\equal{#7}{b}}
+ {\fill[fill=black,fill opacity=0.6] (E) -- (F) -- (G) -- (H) -- cycle;}
+ {\fill[fill=white,fill opacity=0.6] (E) -- (F) -- (G) -- (H) -- cycle;}
+ %edges
+ \draw[black,line width=1pt] (A) -- (B) -- (C) -- (D) -- cycle;
+ \draw[black,line width=1pt] (E) -- (F) -- (G) -- (H) -- cycle;
+ \draw[black,line width=1pt] (A) -- (E);
+ \draw[black,line width=1pt] (B) -- (F);
+ \draw[black,line width=1pt] (C) -- (G);
+ \draw[black,line width=1pt] (D) -- (H);
+ \end{scope}
+}
+
+%</truchet>
+%\fi
diff --git a/graphics/pgf/contrib/tikz-truchet/tikz-truchet.ins b/graphics/pgf/contrib/tikz-truchet/tikz-truchet.ins
new file mode 100644
index 0000000000..f04df041d7
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-truchet/tikz-truchet.ins
@@ -0,0 +1,30 @@
+\input{docstrip.tex}
+\keepsilent
+\usedir{tex/latex/tikz-truchet}
+\preamble
+Copyright (c) 2019 Matthew Scroggs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+\endpreamble
+\askforoverwritefalse
+\generate{
+ \file{tikz-truchet.sty}{\from{tikz-truchet.dtx}{truchet}}
+}
+\endbatchfile
diff --git a/graphics/pgf/contrib/tikz-truchet/tikz-truchet.pdf b/graphics/pgf/contrib/tikz-truchet/tikz-truchet.pdf
new file mode 100644
index 0000000000..644bc70f20
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-truchet/tikz-truchet.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzcodeblocks/README.md b/graphics/pgf/contrib/tikzcodeblocks/README.md
new file mode 100644
index 0000000000..fad51e469e
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/README.md
@@ -0,0 +1,31 @@
+# tikzcodeblocks
+
+
+|Package: | tikzcodeblocks – typesetting blockwise graphic programming languages|
+|------------|------------------------------------------------------------|
+|author: |Adrian Salamon |
+|email: |adriansalamon@gmail.com |
+|date: |2018-04-03 |
+|licence: |LaTeX Project Public License 1.3c |
+
+## What is tikzcodeblocks?
+tikzcodeblocks is a LaTeX package for typesetting blockwise graphic programming languages like scratch, nepo or pxt.
+
+## How to use tikzcodeblocks?
+Just load the package via `\usepackage{tikzcodeblocks}` and use `\begin{tikzpicture}[codeblocks]` in the document. For details have a look in the documentation.
+
+
+### Features
+
+- align colored blocks
+- change the color scheme
+- use jigsaw decorations to see vertical and horizontal relations
+- use predefined structures like loops and branches
+- print LED matrices
+- partly multi-language via babel
+- disable colors for printing
+- ...
+
+### Planed features
+
+- better multi-language / english support \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-einruecken.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-einruecken.tikz
new file mode 100644
index 0000000000..0bfb2f5fbd
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-einruecken.tikz
@@ -0,0 +1,8 @@
+\begin{tikzpicture}[codeblocks]
+\einruecken{
+ \node[grundlage,pinlow](grund){dauerhaft};
+}
+\node[logik,unter={grund}{1}{0}](wenn1){wenn \tikz\node[platzhalter,boden,keinezacken]{\dropdown{modus}}; \dropdown{=} \intbox{1} };
+
+%\draw[->] (grund.south west) |- (wenn1.west);
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-english.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-english.tikz
new file mode 100644
index 0000000000..c6222274f8
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-english.tikz
@@ -0,0 +1,10 @@
+\begin{otherlanguage}{english}
+\begin{tikzpicture}[codeblocks]
+\moveindent{
+ \node[start,pinlow](one){start};
+ }
+ \ifthenelseblocks[under={one}{1}{0}]{A=B}{\node{A++};}{\node{B-{}-};}{two}
+ \loopblocks[under={two}{0}{0}]{for}{A!=B}{\node{A-{}-};}{three}
+ \node[under={three}{0}{0},aktion,pinhigh]{\intbox{3}+\intbox[puzzlepiece]{5}};
+\end{tikzpicture}
+\end{otherlanguage} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-hello-world.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-hello-world.tikz
new file mode 100644
index 0000000000..894cd029f7
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-hello-world.tikz
@@ -0,0 +1,7 @@
+\documentclass{standalone}
+\usepackage{tikzcodeblocks}
+\begin{document}
+ \begin{tikzpicture}[codeblocks]
+ \node[mathe]{Hello World;};
+ \end{tikzpicture}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-umgebung.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-umgebung.tikz
new file mode 100644
index 0000000000..a2f4ea13e1
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-umgebung.tikz
@@ -0,0 +1,13 @@
+\begin{tikzpicture}[codeblocks,openroberta]
+\wenndann{\tikz\node[mathe,keinezacken]{A==B};}{
+ \node[aktion] (two) {mache das };
+ \node[mathe, unter={two}{0}{0}] (three) {und das };}
+{one}
+\node[mathe,unter={one}{0}{0}] (four) {später das }; % TODO: Ungenau. Warum nicht -1?
+\node[kontrolle,unter={four}{0}{0}] (five) {und danach das };
+
+\begin{pgfonlayer}{background}
+\node[logik, fit=(one) (two) (three)] {};
+\end{pgfonlayer}
+
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-zacken.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-zacken.tikz
new file mode 100644
index 0000000000..9921c5b576
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-openroberta-zacken.tikz
@@ -0,0 +1,7 @@
+\begin{tikzpicture}[codeblocks]
+\wenndann
+ {\tikz\node[mathe,keinezacken]{\intbox{2} \dropdown{<} \intbox{5}};}
+ {\node[bild]{zeige Bild \\\bild[0.4]{\fullled}};}
+ {one}
+\node[aktion,draw,unter={one}{0}{0}] (two) {spreche \stringbox{Hallo}};
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start-roberta.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start-roberta.tikz
new file mode 100644
index 0000000000..cd90a0c2f3
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start-roberta.tikz
@@ -0,0 +1,24 @@
+\begin{tikzpicture}[codeblocks,openroberta,scale=.90]
+
+\node[start,pinlow](start){start};
+\schleife[unter={start}{0}{0}]{wiederhole}{\intbox{4} mal}{\node[aktion]{setzte LED-Farbe auf \dropdown{Violett}};}{schl1}
+\wenndann[unter={schl1}{0}{0}]{\dropdown{wahr}}{\node[bild]{erstelle Bild: \bild[0.3]{\emptyled}};}{verz1}
+\node[variablen,unter={verz1}{0}{0}](plz1){ändere \dropdown{Platzhalter} auf \tikz\node[mathe,boden,keinezacken,puzzleteil]{\intbox{15}\dropdown{$\div$}\intbox{3}};};
+\node[aktion,unter={plz1}{0}{0}](bild1){Zeige LEDs:\\
+ \bild{
+ \X \X \X \X \X \\
+ \0 \X \X \X \0 \\
+ \0 \0 \X \0 \0 \\
+ \0 \X \X \X \0 \\
+ \X \X \X \X \X \\
+ }
+};
+
+\wenndannsonst[unter={bild1}{0}{0}]
+{\intbox{5}\dropdown{<}\intbox{5}}
+{\node[sensor]{setze \intbox{5}V an Ausgang \stringbox{powerOut}};}
+{\node[aktion,draw,](akt1){spiele Note \dropdown{C} für \dropdown{1/4}\,Takt};
+ \node[aktion,draw,pinhigh,unter={akt1}{0}{0}](akt2){spiele Note \dropdown{D} für \dropdown{1/4}\,Takt};}
+{wds1}
+
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start.tikz
new file mode 100644
index 0000000000..b3fe6ae050
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-start.tikz
@@ -0,0 +1,49 @@
+\begin{tikzpicture}[codeblocks,scale=.90]
+\node[grundlage] (start) {dauerhaft};
+ \node[schleife,unter={start}{1}{3}] (schleife1) {\intbox{4} mal wiederholen mache};
+ \node[grundlage,unter={schleife1}{1}{0.5}]
+(musik1) {setze LED-Farbe auf \dropdown{Violett}};
+ \node[musik, unter={musik1}{0}{1}]
+(musik2) {Spiele Note \dropdown{C} für \dropdown{1/16} Takt};
+ \node[logik, unter={musik2}{-1}{4.5}]
+(logik1) {wenn \boolbox{\dropdown{wahr}}};
+ \node[bild, unter={logik1}{1}{1}] (bild) {
+ erstelle Bild:\\
+ \bild{\emptyled}
+ };
+
+ \node[platzhalter, unter={bild}{-1}{3}] (platz1) {ändere \dropdown{Platzhalter} auf
+ \tikz[boden]\node[mathe]{\intbox{15}\dropdown{$\div$}\intbox{3}};
+ };
+ \node[grundlage,umgebung, unter={platz1}{0}{1}] (bildmalen){
+ Zeige LEDs:
+ \bild[0.3]{
+ \X \X \X \X \X \\
+ \0 \X \X \X \0 \\
+ \0 \0 \X \0 \0 \\
+ \0 \X \X \X \0 \\
+ \X \X \X \X \X \\
+ }
+ };
+\node[logik, unter={bildmalen}{0}{3}](log3wenndann) {Wenn \dropdown{5} \dropdown{<} \intbox{5} dann mache};
+ \node[motor, unter={log3wenndann}{1}{1}] (motorlogik1) {setze \intbox{5}V an Ausgang \stringbox{powerOut}};
+\node[logik, unter={motorlogik1}{-1}{0}] (log3sonst) {ansonsten mache};
+ \node[musik, unter={log3sonst}{1}{1}] (musiklogik2) {spiele Note \dropdown{C} für \dropdown{1/4} Takt};
+
+% Umgebungen setzen
+\begin{pgfonlayer}{background}
+ \node[grundlage,umgebung,fit= (start) (musiklogik2) (motorlogik1) (platz1)]{};
+ \node[schleife, umgebung, fit = (schleife1) (musik1)(musik2)] (schleife1fit) {};
+ \node[logik,umgebung, fit=(bild) (logik1)] (log1fit){};
+
+
+ \node[logik,umgebung,fit=(log3wenndann)(motorlogik1)(log3sonst)(musiklogik2)]{};
+
+ \node[umgebung, logik, fit=(log3wenndann) (motorlogik1)](log11){};
+ \node[umgebung, logik, fit=(log3sonst) (musiklogik2)](log22){};
+\end{pgfonlayer}
+
+% Puzzlenippel setzen
+%\setzenippel{start,schleife1,musik1,logik1,platz1,schleife1fit,log1fit,bildmalen,log3wenndann, log3sonst}
+
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verschachtelt-zacken.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verschachtelt-zacken.tikz
new file mode 100644
index 0000000000..3f80434de5
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verschachtelt-zacken.tikz
@@ -0,0 +1,8 @@
+\begin{tikzpicture}[codeblocks,minimum width=1.2cm]
+\einruecken{\node[kontrolle](eins){A\\ B};
+ \einruecken{\node[logik,unter={eins}{1}{0}](zwei){C\\ D};
+ \einruecken{\node[mathe,unter={zwei}{1}{0}](drei){E\\ F};}
+ \node[aktion,unter={drei}{1}{0}](vier){G\\ H};
+ }
+}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verzweigung.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verzweigung.tikz
new file mode 100644
index 0000000000..88014282cc
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/bsp-verzweigung.tikz
@@ -0,0 +1,13 @@
+\begin{tikzpicture}[codeblocks]
+\wenndannsonst[draw]
+ {\dropdown{A}~\dropdown{<}\,\intbox{5}} %wenn
+ { \node[aktion](akt1){i=i++};
+ \node[farbe,unter={akt1}{0}{0}](akt2){j=j++};} %dann
+ { \node[aktion,](akt1){erstelle Bild:\\
+ \bild[0.4]{\fullled}
+ };
+ \node[farbe,unter={akt1}{0}{0}](akt2){j=j--};
+ } % sonst-ende
+ {eins}; % eigener Name
+\node[aktion,unter={eins}{0}{0}]{weiter mit anderen sachen};
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzcodeblocks/examples/smarthome.tikz b/graphics/pgf/contrib/tikzcodeblocks/examples/smarthome.tikz
new file mode 100644
index 0000000000..d3e8c4c3c6
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/examples/smarthome.tikz
@@ -0,0 +1,101 @@
+\begin{tikzpicture}[codeblocks]
+\einruecken{\node[grundlage,pinlow] (start){beim Start};}
+ \node[platzhalter,unter={start}{1}{0}] (plz1){ändere \dropdown{modus} auf \intbox{1}};
+ \node[konsole,unter={plz1}{0}{0}] (ser1) {serial \\redirect to\\ \hspace{5em} TX \dropdown{C17}\\\hspace{5em} RX \dropdown{C16}\\ at baud rate \dropdown{9600}~};
+\end{tikzpicture}
+
+\begin{tikzpicture}[codeblocks]
+\wenndann[eingabe]
+ {Knopf \dropdown{A} gedrückt}
+ {
+ \node[konsole] (ser1) {serial write line \stringbox{test\_line}};
+ \node[steuerung, unter={ser1}{0}{0}] (wait1){Warte $\mu$ \intbox{300000}};
+ }
+ {buttonA}
+\end{tikzpicture}
+
+
+\begin{tikzpicture}[codeblocks]
+
+\schleife[konsole]{\usb{}}{serial on data recived \usb{} \dropdown{\#}}{
+ \node[platzhalter, unter={start}{1}{0}] (plz1) {ändere \dropdown{befehl} auf \tikz\node[konsole,boden,keinezacken,puzzleteil,]{\usb{} serial read until \dropdown{\#}};};
+ \wenndann[unter={plz1}{0}{0}]{\tikz\node[pins,boden,keinezacken,puzzleteil]{\dropdown{befehl}}; \dropdown{=} \stringbox{aus}}{
+ \node[pins] (pin1) {schreibe analogen Pin \dropdown{P2} auf \intbox{0}};
+ \node[pins,unter={pin1}{0}{0}] (pin2) {ändere \dropdown{modus} auf \intbox{0}};
+ }{wenn1}
+ \wenndann[unter={wenn1}{0}{0}]{\tikz\node[pins,boden,keinezacken,puzzleteil]{\dropdown{befehl}}; \dropdown{=} \stringbox{ein}}{
+ \node[pins] (pin2) {ändere \dropdown{modus} auf \intbox{1}};
+ }{wenn2}
+ \wenndann[unter={wenn2}{0}{0}]{\tikz\node[pins,boden,keinezacken,puzzleteil]{\dropdown{befehl}}; \dropdown{=} \stringbox{solar}}{
+ \node[pins] (pin3) {schreibe analogen Pin \dropdown{P2} auf \intbox{1023}};
+ \node[pins,unter={pin3}{0}{0}] (pin2) {ändere \dropdown{solar} auf \intbox{1}};
+ }{wenn3}
+ \wenndann[unter={wenn3}{0}{0}]{\tikz\node[pins,boden,keinezacken,puzzleteil]{\dropdown{befehl}}; \dropdown{=} \stringbox{solar\_aus}}{
+ \node[pins] (pin4) {schreibe analogen Pin \dropdown{P2} auf \intbox{0}};
+ }{wenn4}
+}%ende Schleifenrumpf
+{start}
+\end{tikzpicture}
+
+
+\begin{tikzpicture}[codeblocks,scale=0.72]
+\schleife[grundlage,keinezacken]{dauerhaft}{}{
+ \wenndannsonst[robertashape]{\tikz\node[platzhalter,boden,keinezacken,puzzleteil]{\dropdown{modus}}; \dropdown{=} \intbox{1}} %wenn außen
+ {
+ \wenndann{\tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$\leq$}\intbox{50}}
+ {\node[pins](pin1){schreibe analogen Ping \dropdown{P1} auf \intbox{1023}};
+ \node[grundlage,unter={pin1}{0}{0}](bild1){zeige LEDs\\\bild{\emptyled}};
+ }{wenn1}
+
+ \wenndann[unter={wenn1}{0}{0}]{\tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$>$}\intbox{50} \dropdown{und} \tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$\leq$}\intbox{100}}{
+ \node[pins](pin2){schreibe analogen Ping \dropdown{P1} auf \intbox{800}};
+ \node[grundlage,unter={pin2}{0}{0}](bild2){zeige LEDs\\
+ \bild{\0 \0 \0 \0 \0 \\
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \0 \0 \0 \\
+ \0 \X \0 \0 \0 \\
+ \X \X \0 \0 \0 \\
+ }};}{wenn2}
+
+ \wenndann[unter={wenn2}{0}{0}]{\tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$>$}\intbox{100} \dropdown{und} \tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$\leq$}\intbox{150}}{\node[pins](pin3){schreibe analogen Ping \dropdown{P1} auf \intbox{600}};
+ \node[grundlage,unter={pin3}{0}{0}](bild3){zeige LEDs\\
+ \bild{
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \X \0 \0 \\
+ \0 \X \X \0 \0 \\
+ \X \X \X \0 \0 \\
+ }};}{wenn3}
+
+ \wenndann[unter={wenn3}{0}{0}]{\tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$>$}\intbox{150} \dropdown{und} \tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$\leq$}\intbox{200}}{\node[pins](pin4){schreibe analogen Ping \dropdown{P1} auf \intbox{200}};
+ \node[grundlage,unter={pin4}{0}{0}](bild4){zeige LEDs\\
+ \bild{
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \0 \X \0 \\
+ \0 \0 \X \X \0 \\
+ \0 \X \X \X \0 \\
+ \X \X \X \X \0 \\
+ }};}{wenn4}
+
+ \wenndann[unter={wenn3}{0}{0}]{\tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$>$}\intbox{200} \dropdown{und} \tikz\node[eingabe,boden,keinezacken,puzzleteil]{Lichtstärke}; \dropdown{$\leq$}\intbox{255}}{\node[pins](pin5){schreibe analogen Ping \dropdown{P1} auf \intbox{0}};
+ \node[grundlage,unter={pin5}{0}{0}](bild5){zeige LEDs\\
+ \bild{
+ \0 \0 \0 \0 \X \\
+ \0 \0 \0 \X \X \\
+ \0 \0 \X \X \X \\
+ \0 \X \X \X \X \\
+ \X \X \X \X \X \\
+ }};}{wenn5}
+ }%dann außen
+ {\node[pins](pin6){schreibe analogen Ping \dropdown{P1} auf \intbox{0}};
+ \node[grundlage,unter={pin6}{0}{0}](bild5){zeige LEDs\\
+ \bild{
+ \X \0 \0 \0 \X \\
+ \0 \X \0 \X \0 \\
+ \0 \0 \X \0 \0 \\
+ \0 \X \0 \X \0 \\
+ \X \0 \0 \0 \X \\
+ }};}% sonst außen
+ {wenn}
+}{schleife1}
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.pdf b/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.pdf
new file mode 100644
index 0000000000..5250b45be2
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.tex b/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.tex
new file mode 100644
index 0000000000..7834c08bf5
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks-documentation.tex
@@ -0,0 +1,754 @@
+\documentclass[12pt,a4paper]{ltxdoc}
+
+% TODO: \ex schön machen
+% TODO: Beispielliste anlegen und am Ende anzeigen lassen
+% TODO: Eckige Boxen in Obenrobertamode ermöglichen
+
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[english,ngerman]{babel}
+
+\usepackage{standalone}
+
+\usepackage[%print
+]{tikzcodeblocks}
+\usepackage{todonotes}
+\usepackage{listings}
+\usepackage{lmodern} % für textbf in texttt
+\usepackage{wrapfig,booktabs}
+\usepackage[babel]{csquotes}
+\usepackage[right=2cm,left=4.5cm,bottom=3cm,top=2.5cm]{geometry}
+
+\definecolor{buw-gruen}{HTML}{446700}%89ba17
+
+\lstset{
+ basicstyle=\ttfamily,
+ breaklines=true,
+ %literate={ä}{{\"a}}1 {ü}{{\"u}}1 {ö}{{\"o}}1 {ß}{{\ss}}1 {Ä}{{\"A}}1 {Ü}{{\"Ü}}1 {Ö}{{\"O}}1,
+ tabsize=2,
+ language=[LaTeX]{TeX},
+ numbers=left, numberstyle=\tiny,%, stepnumber=5, numbersep=5pt,
+ keywordstyle=\color{red}, % keyword style
+ morekeywords={\node,\tikz},
+ commentstyle=\itshape\color{purple!40!black},
+ frame=L, % adds a frame around the code
+}
+
+\lstset{literate=
+ {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
+ {Ã}{{\'A}}1 {É}{{\'E}}1 {Ã}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
+ {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
+ {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
+ {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
+ {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ã}{{\"I}}1 {Ö}{{\"O}}1 {Ãœ}{{\"U}}1
+ {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
+ {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
+ {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
+ {ű}{{\H{u}}}1 {Å°}{{\H{U}}}1 {Å‘}{{\H{o}}}1 {Å}{{\H{O}}}1
+ {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
+ {€}{{\euro}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1
+ {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
+}
+
+\usepackage{enumitem}
+\usepackage{hyperref}
+
+\usepackage{comment}
+\usepackage{booktabs}
+\usepackage[nochapter]{vhistory} %TODO ersetzen oder selber implementieren
+
+\usepackage{array}
+\usepackage{subcaption}
+
+
+\title{TikZ Codeblocks v.\vhCurrentVersion}
+\author{Adrian Salamon}
+\date{\vhCurrentDate}
+
+
+\setlength{\parindent}{0em}
+
+
+\def\PrintDescribeMacro#1{\strut \MacroFont\textcolor{buw-gruen}{\string #1\ }}
+\let\PrintDescribeEnv\PrintDescribeMacro
+\let\PrintMacroName\PrintDescribeMacro
+\let\PrintEnvName\PrintDescribeEnv
+
+
+
+% Define own examples
+\usepackage{marginnote}
+\newcommand{\ex}[1]{\vspace*{1em} \marginnote{\textbf{\sffamily Bsp:} #1}}
+
+\newcommand{\hinweis}{\noindent{\huge!\,}\normalfont\textbf{\sffamily Hinweis:}}
+
+
+
+
+\begin{document}
+\maketitle
+\tableofcontents
+
+\section*{Versionshistorie}
+
+\begin{versionhistory}
+ \vhEntry{0.1 }{2017-07-06}{A. Salamon}{published}
+ \vhEntry{0.11}{2017-07-18}{A. Salamon}{update: shapes, translations and fix typos}
+ \vhEntry{0.12}{2018-04-03}{A. Salamon}{update: LED colors}
+\end{versionhistory}
+%
+ \begin{itemize}[leftmargin=*,noitemsep]
+ \item Translations
+ \begin{itemize}[noitemsep]
+ \item via \textbf{babel} for structures (if/wenn, then/dann\dots)
+ \item marcos and styles are now (partly) also in english\footnote{Feel free to contact me, if you are an english speaker and want to use everything in english.}
+ \end{itemize}
+ \item new Shapes
+ \begin{itemize}[noitemsep]
+ \item \tikz\node[codeblocks,musik,pinhigh]{pinhigh};
+ \item \tikz\node[codeblocks,start,pinlow]{pinlow};
+ \end{itemize}
+ \item Package option \texttt{print} gets rid of all colors: \tikz\node[codeblocks,print, aktion,]{no colors};
+ \item Open-Roberta colors are now more accurate and usable next to the standard colors. (see \ref{sec:robertacolors}.)
+ \end{itemize}
+ \begin{itemize}
+ \item fixed LED-Color for NEPO-Editor.
+ \item Nepo:
+ \begin{tikzpicture}[codeblocks,openroberta]
+ \node[bild]{\bild{\0 \X \0 \0 \\}};
+ \end{tikzpicture}
+ %
+ PXT: \begin{tikzpicture}[codeblocks]
+ \node[start]{\bild{\0 \X \0 \0 \\}};
+ \end{tikzpicture}
+ \end{itemize}
+
+%\begin{longtable}{llp}
+%0.1. & 2017-07-06 & looong\\
+%\end{longtable}
+
+\section{Präambel}
+
+Diese Sammlung von TikZ Stilen und Kommandos soll helfen, grafische Codeblöcke, wie beim Calliope mini Editor, der Sprache NEPO von Open Roberta oder der Programmierumgebung Scratch zu setzen. Sie ersetzt \textbf{nicht} die Auseinandersetzung mit TikZ und der entsprechenden Syntax. Die Positionierung, Benennung und Referenzierung der Elemente muss weiterhin manuell gestaltet werden.
+
+Dies ist eine Entwicklerversion. Bezeichner und Paketname können in späteren Versionen noch variieren.
+
+Fragen nehme ich gerne per \href{mailto:adriansalamon@gmail.com?subject=Question for tikzcodeblocks}{adriansalamon@gmail.com} entgegen.
+
+
+\subsection{Editoren mit graphischer Programmierung}
+
+\texttt{tikzcodeblocks} wurde erstellt, um Quelltexte auf Blockbasis für den Microcontroller Calliope mini zu setzen. Alle verwendeten Farben und Gestaltungen sind daher standardmäßig vom PXT Editor von Calliope inspiriert. Als alternative Farbgebung ist eine Variation nach Open Roberta implementiert (siehe \ref{sec:robertacolors}). Es lässt sich jedoch auch Code mit Farb- und Formgebungen anderer Editoren setzen.
+
+\begin{table}[hbt!]\centering
+\begin{tabular}{ll}
+ \toprule
+ Editor & URL \\ \midrule
+
+ PXT - Calliope & \url{http://pxt.calliope.cc/} \\
+ Open Roberta & \url{https://lab.open-roberta.org/} \\
+ Scratch & \url{https://scratch.mit.edu/projects/editor} \\
+ \bottomrule
+\end{tabular}
+\caption{Tabelle von Editoren mit graphischen Codeblöcken.}
+\end{table}
+
+
+
+\subsection{Alternativpakete}
+
+Während der Entwicklung dieses Paketes wurde das Paket \texttt{scratch}\footnote{\url{https://www.ctan.org/pkg/scratch?lang=de}.} veröffentlicht. Damit lässt sich graphischer Code in der Optik von Scratch sehr einfach setzen. Die Dokumentation des Pakets ist zur Zeit auf Französisch verfügbar.
+
+Ein Unterschied zwischen den Paketen \texttt{scratch} und \texttt{tikzcodeblocks} ist m.\,E. vor allem folgender: \texttt{scratch} lässt sich \textbf{nicht} in andere TikZ Umgebungen einbinden. Die einzelnen Objekte sind nicht als Nodes\footnote{In dieser Dokumentation wird die Bezeichnung \textbf{Node} für die Knoten in TikZ verwendet.} referenzierbar. Die Syntax ist jedoch deutlich schmaler als bei \texttt{tikzcodeblocks}. Ein Blick lohnt sich bestimmt für die meisten interessierten Nutzer.
+
+
+\subsection{Installation und Benutzung}
+
+Das Paket wird über die üblichen \LaTeX-Paketmanager installiert (z.\,B. \TeX{}Live)
+und per \DescribeMacro{tikzcodeblocks} \lstinline|\usepackage{tikzcodeblocks}| in die Präambel des gewünschten Dokuments eingebunden.
+
+\DescribeMacro{codeblocks} Mit \lstinline|\begin{tikzpicture}[codeblocks]| werden die Codeblock-Stile in die jeweilige tikzpicture-Umgebung geladen. Es setzt das Verhalten für \lstinline[language=TeX]|every Node|.
+
+% Nacktes Beispiel
+\begin{minipage}{0.6\textwidth}
+ \lstinputlisting[language={},morekeywords={usepackage, codeblocks}
+ ]{examples/bsp-hello-world.tikz}
+\end{minipage}
+\begin{minipage}{0.4\textwidth}
+\input{examples/bsp-hello-world.tikz}
+\end{minipage}
+
+
+\section{Beispielcode}
+
+Eine Beispiel zeigt Ergebnisse der Nutzung des Pakets.
+Der Quellcode zur Erstellung der Vektorgrafik folgt unter dem Beispiel.
+
+\begin{center}
+ \input{examples/bsp-start-roberta.tikz}
+\end{center}
+\lstinputlisting[basicstyle=\footnotesize \ttfamily]{examples/bsp-start-roberta.tikz}
+
+
+\subsection{English Codeexample}
+
+\begin{center}
+ \input{examples/bsp-english.tikz}
+\end{center}
+%
+\lstinputlisting[
+ basicstyle=\footnotesize \ttfamily,
+ language={},
+ morekeywords={
+ square,
+ moveindent,
+ under,
+ ifthenelsecode,
+ loopcode,
+ puzzlepiece,
+ otherlanuage}
+ ]{examples/bsp-english.tikz}
+
+\clearpage
+
+
+\section{Bausteine und Befehle}
+
+\subsection{Bausteinklassen nach PXT-Calliope Editor}
+
+% Hilfskonstruktionen für das schnelle Setzen aller Stile
+\newcommand{\trynode}[1]{\lstinline|#1|& \tikz\node[#1,codeblocks]{#1}; & \tikz\node[openroberta,#1,codeblocks,eckig,]{#1};\\}
+\newcommand{\trynodeOpenRoberta}[1]{\lstinline|#1|& \tikz\node[openroberta,#1,codeblocks,eckig,]{#1};\\}
+
+Die Klassen der Programmierbausteine werden nach folgendem Muster als TikZ-Style angegeben.
+
+\begin{quotation}
+ \lstinline|\node[STYLE] {Inhalt};|
+\end{quotation}
+
+Die Defaulteinstellung orientiert sich an den Farben und Formen des Calliope-PXT-Editors. Mithilfe des Stils \DescribeMacro{openroberta} \lstinline|openroberta| können alternative Farb- und Formdefinitionen geladen werden, die sich an der NEPO-Umgebung von Open-Roberta orientieren. Der Stil kann auch für eine ganze TikZ-Umgebung verwendet werden.
+
+\label{sec:robertacolors}
+\renewcommand{\arraystretch}{0.6}
+ \begin{longtable}{lll}
+ \toprule
+\sffamily Stilname & \sffamily pxt (Standard) & \sffamily openroberta\\ \midrule \endhead
+ \trynode{grundlage}
+ \trynode{eingabe}
+ \trynode{schleife}
+ \trynode{logik}
+ \trynode{musik}
+ \trynode{led}
+ \trynode{platzhalter}
+ \trynode{mathe}
+ \trynode{funk}
+ \trynode{motor}
+ \trynode{zeichenkette}
+ \trynode{spiel}
+ \trynode{bild}
+ \trynode{pins}
+ \trynode{konsole}
+ \trynode{steuerung}
+ \trynode{bluetooth}
+ % OopenRoberta
+ \trynode{start}
+ \trynode{aktion}
+ \trynode{sensor}
+ \trynode{kontrolle}
+ \trynode{liste}
+ \trynode{farbe}
+ \trynode{bild}
+ \trynode{variablen}
+ \trynode{funktion}
+ \trynode{nachricht}
+ \bottomrule
+
+ \end{longtable}
+
+\hinweis{In PXT und im Open-Roberta-Editor heißen die entsprechenden Einträge für Zeichenketten \enquote{Texte}. Der Style \enquote{Text} ist von TikZ jedoch bereits intern belegt und wird hier deswegen als \enquote{zeichenkette} verwendet.}
+
+
+Standardmäßig wird das Paket mit der PXT-Farbinformation geladen, um die Farben des PXT-Editors für Calliope zu verwenden.\footnote{Damit beide Stile problemlos ineinander überführt werden können, ohne dass bestimmte Stile in anderen Kontexten undefiniert sind, wurden einige Stile doppelt Zugeordnet: \texttt{pxt-grundlagen} = \texttt{openroberta-start}, \texttt{pxt-musik} = \texttt{openroberta-aktion}, etc.}
+
+Die Stile unterscheiden sich voneinander nur durch ihre Farben. \lstinline|openroberta| läd standardmäßig noch den Stil \lstinline|eckig|.
+
+
+\subsection{Skalierung}
+
+\ex{Skalierung} Die Skalierung des gesamten Bildes ist mit dem TikZ-Boardmittel \texttt{scale} möglich.
+
+\begin{minipage}{0.78\textwidth}
+\begin{lstlisting}[language={},morekeywords={scale}]
+\begin{tikzpicture}[codeblocks, scale=0.7]
+ \node[variablen]{Hello World;};
+\end{tikzpicture}
+%
+\begin{tikzpicture}[codeblocks, scale=1.3]
+ \node[variablen]{Hello World;};
+\end{tikzpicture}
+\end{lstlisting}
+\end{minipage}
+\begin{minipage}{0.2\textwidth}
+ \begin{tikzpicture}[codeblocks, scale=0.7]
+ \node[variablen]{Hello World;};
+ \end{tikzpicture}
+ %
+ \begin{tikzpicture}[codeblocks, scale=1.3]
+ \node[variablen]{Hello World;};
+ \end{tikzpicture}
+\end{minipage}
+
+
+
+
+\subsection{Farben}
+
+\subsubsection{Lokale Farbänderung}
+Lokale Überschreibungen sind -- wie üblich -- durch Angabe einer Farbe bei den entsprechenden Node-Attributen möglich.
+
+\ex{Lokale Farbänderung}
+{\tikz\node[codeblocks,fill=black,draw=red]{schwarzer Hintergrund - roter Rahmen};\\
+\lstinline|\node[fill=black,draw=red]{schwarzer Hintergrund - roter Rahmen}|
+}
+
+
+
+\subsubsection{Globale Farbänderung}
+
+\DescribeMacro{\setcolor}\label{sec:setcolor}%
+Der Befehl \cmd\setcolor\marg{farbreferenz}\marg{hexfarbcode} lässt zu, Farben dokumentenweit umzudefinieren.
+
+\ex{Globale Farbänderung}
+\tikz\node[codeblocks,logik,]{Alte Farbe}; \lstinline|\setcolor{logik-color}{ff0000}| \setcolor{logik-color}{ff0000} \tikz\node[codeblocks,logik,]{Neue Farbe!};
+\setcolor{logik-color}{006970}
+
+
+
+\subsubsection{Keine Farben (print)}
+
+Mit der Paketoption \lstinline[language={},morekeywords=print]|\usepackage[print]{tikzcodeblocks}| lassen sich alle Farben entfernen. Es werden lediglich Umrisse, sowie ausgefüllte LEDs gezeichnet. Die Schriftfarbe ist schwarz.
+
+\ex{print}
+\begin{tikzpicture}[codeblocks,print]
+\einruecken{
+ \node[aktion](one){\stringbox{myText}};
+}
+\node[musik,under={one}{1}{0}](two){\intbox{11}\dropdown{=}\boolbox{wahr}};
+\end{tikzpicture}
+
+\subsection{Boxen}
+Boxen werden innerhalb von Codeblöcken verwendet, um bestimmte Platzhalter und Datentypen zu kennzeichnen. Die Farben werden dabei teilweise in Abhängigkeit zum Parent (durch Durchsichtigkeit) gesetzt.
+
+\DescribeMacro{\dropdown{}}
+\DescribeMacro{\intbox{}}
+\DescribeMacro{\stringbox{}}
+\DescribeMacro{\boolbox{}}
+
+\begin{center}
+\begin{tabular}{m{0.32\linewidth}m{0.22\linewidth}m{0.22\linewidth}}
+ \toprule
+ \sffamily Code & \sffamily PXT & \sffamily Open Roberta \\\midrule
+ \lstinline|\dropdown{Dropdown}| & \tikz\node[codeblocks]{\dropdown{Dropdown}}; & \tikz\node[codeblocks,openroberta]{\dropdown{Dropdown}};\\
+ \lstinline|\intbox{5}| & \tikz\node[codeblocks]{\intbox{5}}; & \tikz\node[codeblocks,openroberta]{\intbox{5}}; \\
+ \lstinline|\stringbox{Text}| & \tikz\node[codeblocks]{\stringbox{Text}}; & \tikz\node[codeblocks,openroberta]{\stringbox{Text}}; \\
+ \lstinline|\boolbox{wahr}| & \tikz\node[codeblocks]{\boolbox{wahr}}; & \tikz\node[codeblocks,openroberta]{\boolbox{wahr}}; \\
+ \bottomrule
+\end{tabular}
+\end{center}
+
+\lstinline|\intbox|, \lstinline|\stringbox|, \lstinline|\boolbox| haben alle als optionales Argument die Möglichkeit Stile hinzuzufügen.
+
+
+\ex{optionales Argument bei Boxen}
+\begin{tabular}{rl}
+\intbox[]{42} & \lstinline|\intbox{42}| \\[1em]
+\intbox[puzzleteil]{42} &\lstinline|\intbox[puzzleteil]{42}|\\
+\end{tabular}
+
+
+\ex{Boxen mit Kapselung}
+\tikz\node[codeblocks,eingabe]{Meine \dropdown{Dropdown}-Box mit Wert \intbox{5}};\\
+\lstinline|\node[eingabe]{Meine \dropdown{Dropdown}-Box mit Wert \intbox{5}};|
+
+
+\hinweis{} Bei der Verwendung des Stils \texttt{openroberta} ändern sich auch entsprechend die Farben der int-, string- und boolboxen.
+
+
+\subsection{Bilder/LED-Matrix}
+
+\DescribeMacro{\bild} Mit \cmd\bild\oarg{skalierungsfaktor}\marg{Inhalt} lassen sich LED-Matrizen setzen. Es erwartet einen Tabelleninhalt. Jede Zeile muss entsprechend per \lstinline|\\| beendet werden. Zeilen und Spalten könen dabei unbegrenzt sein. Dabei gelten weiterhin folgende Befehle:
+ \begin{itemize}[noitemsep]
+ \item \DescribeMacro{\emptyled} \lstinline|\emptyled| setzt eine $5 \times 5$ LED-Matrix, bei der alle LEDs ausgeschaltet sind.\\ \bild{\emptyled}
+ \item \DescribeMacro{\fullled} \lstinline|\fullled| setzt eine $5 \times 5$ LED-Matrix, bei der alle LEDs angeschaltet sind.\\ \bild{\fullled}
+ \item \DescribeMacro{\X} \lstinline|\X| repräsentiert darin eine angeschaltete LED~~\bild{\X\\}
+ \item \DescribeMacro{\0} \lstinline|\0| repräsentiert darin eine ausgeschaltete LED~~\bild{\0\\}
+ \item Die Kombination von \lstinline|\bild{}|, \lstinline|\X|, und \lstinline|\0| ergiebt schließlich alle möglichen LED-Maritzen:
+
+\ex{Beliebige Matrix}
+\begin{minipage}[l]{0.6\textwidth}
+ \hspace*{-2cm}
+\begin{lstlisting}
+ \bild{
+ \X \X \X \X \0 \0 \\
+ \X \X \0 \X \0 \0 \\
+ }
+\end{lstlisting}
+ \end{minipage}
+ \begin{minipage}[c]{0.8\textwidth}
+ \bild{
+ \X \X \X \X \0 \0 \\
+ \X \X \0 \X \0 \0 \\
+ }
+ \end{minipage}
+
+\item \DescribeMacro{\bild} Mit dem optionalen Argument kann ein Skalierungsfaktor angegeben werden.
+
+\ex{Bildskalierung}
+
+\begin{tabular}{cc}
+ \bild[0.4]{\emptyled} & \bild[1.5]{\emptyled}\\
+ {\lstinline|\bild[0.4]{\emptyled}|} & {\lstinline|\bild[1.5]{\emptyled}|}\\
+\end{tabular}
+\end{itemize}
+
+\hinweis{} \lstinline|\X|, \lstinline|\0| sowie \lstinline|\emptyled| und \lstinline|\fullled| können nur innerhalb des \lstinline|\bild|-Kommandos verwendet werden.
+
+
+
+\subsection{Strukturen} \label{sec:strukturen}
+
+Strukturen helfen, die Positionierung von Nodes zu vereinfachen. Dafür können Verzweigungen und Schleifen verwendet werden. Damit muss nur noch in seltenen Fällen eine manuelle Positionierung von Nodes vorgenommen werden. Intern werden Tabellen verwendet.
+
+\subsubsection{Verzweigungen}
+
+\DescribeMacro{\wenndann} Über den Befehl \sloppy \cmd\wenndann\oarg{TikZ-Stil}\marg{TEXT: Bedingung}\marg{NODE: Anweisung}\marg{TEXT: Nodename} wird die Kontrollstruktur Verzweigung abgebildet. Der \lstinline|logik|-/bzw. \lstinline|kontrolle|-Stil wird automatisch gesetzt. Das letzte Argument ist die Bezeichnung des eigenen Nodenamen, damit nachfolgende Codeblöcke dies bei ihrerer Positionierung referenzieren können.
+
+\DescribeMacro{\wenndannsonst} \cmd\wenndannsonst\oarg{TikZ-Stil}\marg{TEXT: Bedingung}\marg{NODE: Dann-Anweisung}\marg{NODE: Sonst-Anweisung}\marg{TEXT: Nodename} verhält sich analog zu \cmd\wenndann, ist jedoch um einen Sonst-Block, der mit Nodes gefüllt wird, erweitert. Automatisch ergänzt werden die Wörter \enquote{wenn}, \enquote{dann} und \enquote{sonst}.
+
+\hinweis{Das optionale Argument ist oft notwendig, um die Verzweigung richtig in Relation zu vorherstehenden Blöcken zu positionieren. Siehe hierfür \ref{sec:unter}.}
+
+%\ex{Muster einer Verzweigungen}
+
+\begin{tabular}{lll}
+&\begin{tikzpicture}[codeblocks]
+\wenndann{TEXT: Bedingung}{\node[aktion]{NODE: Anweisung};}{name}
+\end{tikzpicture} &
+
+\begin{tikzpicture}[codeblocks]
+\wenndannsonst{TEXT: Bedingung}{\node[aktion]{NODE: Anweisung};}{\node[aktion]{NODE: Anweisung};}{name}
+\end{tikzpicture}\\
+Deutsch: &\lstinline|\wenndann| & \lstinline|\wenndannsonst|\\
+English: & \lstinline|\ifthenblocks| & \lstinline|\ifthenelseblocks| \\
+\end{tabular}
+
+
+\ex{Verzweigungen}
+\input{examples/bsp-verzweigung.tikz}
+\lstinputlisting[language={},morekeywords={wenndannsonst}]{examples/bsp-verzweigung.tikz}
+
+\hinweis{Sollen Nodes in Textfeldern gesetzt werden, so muss \lstinline|\tikz| vorgeschoben werden.}
+
+\subsubsection{Schleifen}
+
+
+\DescribeMacro{\schleife} Die Schleife nach dem Muster
+\cmd\schleife\oarg{TikZ-Stil}\marg{TEXT: Für/solange/etc.}\marg{TEXT: Bedingung}\marg{NODE: Anweisung}\marg{TEXT: Nodename} ist eine weitere vordefinierte Struktur. Automatisch ergänzt wird der Begriff \enquote{mache}.
+
+\ex{Muster: Schleifen}
+\begin{tabular}{ll}
+& \begin{tikzpicture}[codeblocks]
+\schleife{TEXT: Für/solange/etc}{TEXT:Bedingung}{\node[logik]{NODE: Anweisung};}{name}
+\end{tikzpicture}\\
+deutsch & \cmd\schleife\oarg{STIL}\marg{PRE}\marg{BED}\marg{ANW}\marg{NAME}\\
+english & \cmd\loopblocks\oarg{STYLE}\marg{PRE}\marg{COND}\marg{INST}\marg{NAME}\\\\
+\end{tabular}
+
+
+
+\ex{Schleifen}
+\begin{tikzpicture}[codeblocks]
+\schleife[draw]{Solange}{\tikz\node[logik,keinezacken]{\dropdown{A}~\dropdown{=}~\dropdown{B}};}{
+ \node[aktion]{A=B+B};}{schl1}
+
+\schleife[draw,unter={schl1}{0}{0}]{Für}{\intbox{int i=0}, \intbox{i<10}, \intbox{i++}}{
+ \node[aktion]{A=B+B};}{schl2}
+\end{tikzpicture}
+\begin{lstlisting}[morekeywords={schleife}]
+\schleife[draw]{Solange}{\tikz\node[logik,keinezacken]{\dropdown{A}~\dropdown{=}~\dropdown{B}};}{
+ \node[aktion]{A=B+B};}{schl1}
+
+\schleife[draw,unter={schl1}{0}{0}]{Für}{\intbox{int i=0}, \intbox{i<10}, \intbox{i++}}{
+ \node[aktion]{A=B+B};}{schl2}
+\end{lstlisting}
+
+
+\subsubsection{Branches, loops and the english language}
+\begin{otherlanguage}{english}
+ If you want to use this package in an english document just load \lstinline|\usepackage[english]{babel}| in the preamble. It will automatically set the outer words for branches and loops in english.
+\end{otherlanguage}
+
+\ex{English example}
+\begin{otherlanguage}{english}
+ \lstinline|\usepackage[english]{babel}|\\
+ \begin{tikzpicture}[codeblocks]
+ \wenndannsonst{A = B}{\node[aktion]{A++};}{\node[aktion]{B-{}-};}{name}
+ \end{tikzpicture}
+\end{otherlanguage}
+
+\begin{lstlisting}[]
+\begin{otherlanguage}{english}
+ \begin{tikzpicture}[codeblocks]
+ \wenndannsonst{A = B}{\node[aktion]{A++};}{\node[aktion]{B-{}-};}{name}
+ \end{tikzpicture}
+\end{otherlanguage}
+\end{lstlisting}
+
+\DescribeMacro{\ifthenblocks}
+\DescribeMacro{\ifthenelseblocks}
+\DescribeMacro{\loopblocks} To fit the commands to the english language please you can use |\ifthenblocks|, |\ifthenelseblocks| and |\loopblocks|. Notice the added \enquote{blocks}, because the \LaTeX Command \lstinline|\ifthenelse| is already used by the \texttt{ifthen}-Package.
+
+\begin{table}[htb] \centering
+\begin{tabular}{ll}
+\toprule
+english & german\\ \midrule
+\lstinline|\ifthenblocks| &\lstinline|\wenndann|\\
+\lstinline|\ifthenelseblocks| &\lstinline|\wenndannsonst|\\
+\lstinline|\loopblocks| &\lstinline|\schleife| \\ \bottomrule
+\end{tabular}
+\end{table}
+
+
+
+
+\section{Positioneriung der Nodes}
+
+\subsection{Manuelles Positionieren}\label{sec:unter}
+
+Mit konsequenter Verwendung der Strukturen ist manuelles Einrücken selten notwendig. Jedoch ist das Aneinanderketten der Nodes unabdinglich. Hierfür wird der Stil
+\DescribeMacro{unter} \texttt{unter=}\marg{NODE}\marg{X-Einzug-Faktor}\marg{Y-Einzug-Faktor} verwendet. Hierbei wird der Einzug als Ankerpunkt jeweils relativ zum Vorgänger gesetzt.
+
+ \vspace{1em}
+% \hspace*{-3cm}
+ \begin{tikzpicture}[codeblocks,scale=1.0]
+ \node[grundlage] (drueber) {Hier beginnt der Code};
+ \node[eingabe, unter={drueber}{1}{8}] (drunter){Das ist das letzte Kommando};
+
+ \draw[black, ->, rounded corners=0] (drueber) -- (drunter.165) node[midway, black,right] {Abstand 8 (\#3)};
+ \draw[black, ->, rounded corners=0] (drueber.south west) |- (drunter.west) node[midway, black,left] {Einzug 1 (\#2)};
+
+ \draw[black, ->, rounded corners=0] (drunter.east) |- (drueber.east) node[near start,right] {Bezug auf start-node (\#1)};
+
+ \end{tikzpicture}\vspace{2em}
+
+ \begin{lstlisting}[keywords={},morekeywords={drueber,drunter}]
+ \node[grundlage] (drueber) {Hier beginnt der Code};
+ \node[eingabe, unter={drueber}{1}{8}] (drunter){Das ist das letzte Kommando};
+ \end{lstlisting}
+
+ \hinweis{Dank der Verwendung von Kontrollstrukturen (siehe \ref{sec:strukturen}) ist manuelles Einrücken in der Regel nicht notwendig.}
+
+
+
+\subsubsection{Verschieben der Zacken bei manueller Einrückung}
+%\input{examples/bsp-openroberta-umgebung.tikz}
+%\lstinputlisting[language={},firstline=3, lastline=14,morekeywords={\einruecken}]{examples/bsp-openroberta-umgebung.tikz}
+
+\DescribeMacro{\einruecken} Über das Kommando \cmd\einruecken\marg{nodes} lässt sich der untere Zacken eines Nodes um genau einen Einzug verschieben (siehe: \ref{sec:unter};). Die obere Ausbuchtung bleibt an ihrem normalen Platz.
+
+\begin{otherlanguage}{english}
+ \DescribeMacro{\moveindent} The english equivalent to\cmd\einruecken{} is \cmd\moveindent.
+\end{otherlanguage}
+
+\vspace{1em}
+\begin{tikzpicture}[codeblocks]
+\node[kontrolle](eins){wenn\dots \\dann\dots};
+\einruecken{
+ \node[kontrolle, right=2cm of eins](zwei){wenn\dots \\dann\dots};
+}
+\draw[black,dashed,very thick,->] ($(eins.south west)+(1.5em,-0.2em)$)--($(zwei.south)+(0em,-0.2em)$) node[midway,below]{\normalfont Zacken verschiebt sich nach rechts};
+\end{tikzpicture}\hfil
+%
+%Verschachtelung mit Einrückung und Open Roberta Zacken
+\ex{Verschachteltes Einrücken}
+\input{examples/bsp-verschachtelt-zacken.tikz}
+\lstinputlisting[basicstyle=\footnotesize \ttfamily, keywords={},language={},morekeywords={einruecken},]{examples/bsp-verschachtelt-zacken.tikz}
+
+
+\ex{einruecken}
+\input{examples/bsp-einruecken.tikz}
+\lstinputlisting[keywords={},language={},morekeywords={einruecken},firstline={2},lastline={5}]{examples/bsp-einruecken.tikz}
+
+
+\subsection{Automatisches Einrücken}
+Siehe Strukturen \ref{sec:strukturen}!
+
+
+\clearpage
+\section{Dekorationen}
+
+\subsection{Puzzleoptik}
+\newcommand{\mydeco}[1]{
+ \tikz\node[codeblocks,mathe,#1](one){A+B};&#1
+}
+
+
+
+
+Um die Verzahnung der einzelnen Elemente darzustellen, wird standardmäßig eine Puzzleoptik verwendet, welche die \textit{vertikale} Beziehung der Bausteine zueinander verdeutlicht. Sie ist über die Form \DescribeMacro{robertashape} \lstinline|robertashape| definiert.
+
+Soll die \textit{horizontale} Beziehung von Bausteinen betont werden, so kann die Form \DescribeMacro{puzzleteil} \lstinline|puzzleteil| verwendet werden.
+
+\DescribeMacro{keinezacken} Mit dem Stil \lstinline|keinezacken| lassen sich alle vordefinierten Zacken entfernen. Dies ist v.\,A. bei verschachtelten Nodes notwendig. \lstinline|keinezacken| ist ein Alias für \lstinline|rectangle|.
+
+\DescribeMacro{eckig} Der Stil \lstinline|eckig| entfernt alle runde Ecken und orientiert sich damit stärker an dem Erscheinungsbild von Open Roberta.
+
+Für Start- und Endbausteine sind die Formen \DescribeMacro{pinlow}\lstinline|pinlow| und \DescribeMacro{pinhigh}\lstinline|pinhigh| definiert.
+
+%\begin{wraptable}{r}{0.6\textwidth}
+\begin{table}[htb!]
+ \begin{center}%\vspace*{-2.3em}
+ \begin{tabular}{rll}
+ \toprule
+ \textsf{Shape} & \textsf{deutsch} & \textsf{english}\\\midrule
+ \mydeco{} & \\
+ \mydeco{pinlow} & pinlow \\
+ \mydeco{pinhigh} & pinhigh\\
+ \mydeco{keinezacken} & nopins\\
+ \mydeco{eckig} & square\\
+ \mydeco{eckig, keinezacken} & square, nopins\\
+ \mydeco{puzzleteil} & puzzlepiece \\
+ \mydeco{puzzleteil, eckig} & puzzlepiece, square\\
+ \bottomrule
+ \end{tabular}
+ \caption{Übersicht über Blockformen}
+ \end{center}
+\end{table}
+%\end{wraptable}
+
+
+\ex{keinezacken}
+Der Stil \enquote{keinezacken} ist z.\,B. bei verschachtelten Nodes notwendig:
+
+\begin{tikzpicture}
+ \node[codeblocks,aktion](A){mache \tikz\node[mathe]{A=B};};
+ \node[codeblocks,aktion,right = 1cm of A](B){mache \tikz\node[mathe,keinezacken]{A=B};};
+
+\draw[->,very thick, dashed,black] (A)--(B);
+\end{tikzpicture}
+%
+\begin{lstlisting}[keywords={},morekeywords={keinezacken}]
+ \node[aktion]{mache \tikz\node[mathe,keinezacken]{A=B};};
+\end{lstlisting}
+
+
+\subsection{Symbole und kleine Elemente}
+
+\DescribeMacro{\usb} \lstinline|\usb| setzt ein \usb.
+
+\DescribeMacro{\farbe} \lstinline|\farbe{color}| setzt ein Quadrat mit der angegeben Farbe \farbe{buw-gruen}. Zu verwenden auch in Nodes: \tikz\node[farbe,puzzleteil]{~\farbe{yellow}};
+
+\clearpage
+
+
+\section{FAQ}
+
+\subsection{Wie kann ich für ein komplettes Dokument eine Farbe umdefinieren?}
+
+\DescribeMacro{\setcolor}
+\begin{longtable}{p{0.1\textwidth}p{0.9\textwidth}}
+Ist: & \tikz\node[codeblocks,logik,]{Alte Farbe};\\
+Soll: & \noindent\setcolor{logik-color}{ff0000}\tikz\node[codeblocks,logik,]{Neue Farbe!};\\
+Lösung: & \lstinline|\setcolor{logik-color}{ff0000}|
+\end{longtable}
+%
+% Globale Änderung wieder rückgängig machen
+\setcolor{logik-color}{006970}
+
+
+\subsection{Eine nested Box ist zu hoch/zu niedrig}
+
+
+\begin{longtable}{p{0.1\textwidth}p{0.9\textwidth}}
+Ist: & \begin{tikzpicture}[codeblocks]
+\einruecken{\node[grundlage,pinlow](grund){dauerhaft};}
+\node[logik,unter={grund}{1}{0}](wenn1){wenn \tikz\node[platzhalter,keinezacken]{\dropdown{modus}}; \dropdown{=} \intbox{1} };
+\end{tikzpicture}\\
+Soll: & \input{examples/bsp-einruecken.tikz}\\
+Lösung: &
+\noindent Verwende den Hilfstyle \lstinline|boden|:
+
+\lstinputlisting[keywords={},language={},morekeywords={boden},firstline={2},lastline={5}]{examples/bsp-einruecken.tikz}\\
+\end{longtable}
+
+
+
+
+
+\begin{comment}
+\subsection{Openroberta Stil hat hässliche Rundungen}
+
+\begin{tikzpicture}[codeblocks]
+ \node[musik,draw] (bad) {schlecht};
+ \node[musik,draw, rounded corners =0pt, right= 1.9em of bad] (good) {besser};
+
+ \draw[->,very thick,dashed, black] (bad)--(good);
+\end{tikzpicture}
+
+\begin{lstlisting}
+\begin{tikzpicture}[codeblocks,openroberta]
+ \node[musik,draw] (bad) {schlecht};
+ \node[musik,draw, rounded corners =0pt, right=of bad] (good) {besser};
+\end{lstlisting}
+
+Der Stil \enquote{musik} ist nicht für den Openroberta Style definiert\footnote{Es wurde sich an den Bezeichnern der Benutzeroberfläche orientiert}. U.u. wird auf den PXT Stil zurückgegriffen. Manuelles hinzufügen von \lstinline|rounded corners=0pt| ist ein lokaler hotfix.
+\end{comment}
+
+\subsection{Ich will einen Node innerhalb eines Nodes setzten}
+
+Verwende eine verschachtelte TikZ-Umgebung, z.\,B. mit dem \lstinline|\tikz|-Befehl:
+
+\begin{tikzpicture}[codeblocks]
+\node[logik]{außen:
+ \tikz\node[aktion]{innen};
+};
+\end{tikzpicture}
+
+\begin{lstlisting}
+\node[logik]{außen:
+ \tikz\node[aktion]{innen};
+};
+\end{lstlisting}
+
+
+%\todo{Keine Zacken aber Puzzleteil?
+%falsch: puzzleteil ->keinezacken
+%richtig: keinezacken,puzzleteil,}
+
+
+\subsection{Mein Block ist sehr klein und deswegen verformt}
+
+\begin{longtable}{p{0.1\textwidth}p{0.9\textwidth}}
+Ist: & \tikz\node[codeblocks,logik](one){1};\\
+Soll: & \tikz\node[codeblocks,logik,](one){2~~};
+ \tikz\node[codeblocks,logik, minimum width=1cm](one){3};\\
+Lösung: & Erweitere den Inhalt des Nodes um Whitespace/Phantome oder setzte \lstinline|minimum width| für den Node.
+
+\begin{lstlisting}
+\node[logik](one){2~~};
+\node[logik, minimum width=1cm](one){3};
+\end{lstlisting}
+\end{longtable}
+
+
+
+
+
+
+\section{Mehr Beispielcode}
+
+\subsection{Bsp: Calliope Smart Home}
+ \input{examples/smarthome.tikz}
+ \lstinputlisting[basicstyle=\footnotesize \ttfamily]{examples/smarthome.tikz}
+
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks.sty b/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks.sty
new file mode 100644
index 0000000000..35dcd987e5
--- /dev/null
+++ b/graphics/pgf/contrib/tikzcodeblocks/tikzcodeblocks.sty
@@ -0,0 +1,857 @@
+% -*- coding: utf-8; -*-
+
+% Adrian Salamon
+% Bergische Universitaet Wuppertal
+% since 2017-09-23
+% to 2018-04-03
+% LaTeX project public license, version 1.3c
+
+% % notes for further development:
+%
+% TODO: Versionnummerierung fixen (evtl besseres) Konzept finden
+% TODO: maybe remove LED-Background?
+%
+% % %
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikzcodeblocks}[2018/04/03 v.0.12 - TikZ Styles and macros for typesetting blockwise graphic programming languages like scratch, nepo or pxt]
+
+\RequirePackage{adjustbox}
+\RequirePackage{xcolor}
+\RequirePackage{colortbl}
+\RequirePackage{fontawesome}
+\RequirePackage{tikz}
+\RequirePackage{longtable}
+\usetikzlibrary{matrix, positioning, fit,calc,shapes,backgrounds,math,trees,decorations.markings,shapes,arrows.meta,arrows}
+\usetikzlibrary{decorations,decorations.pathmorphing}
+
+\RequirePackage{translations}
+
+\RequirePackage{xspace}
+\RequirePackage{ifthen}
+
+
+\newboolean{no-colors}
+\setboolean{no-colors}{false}
+
+\DeclareOption{print}{
+ \setboolean{no-colors}{true}
+}
+
+\ProcessOptions\relax
+
+% % %
+% Translations
+% % %
+
+\DeclareTranslationFallback {if}{if}
+\DeclareTranslation{English}{if}{if}
+\DeclareTranslation{German} {if}{wenn}
+
+\DeclareTranslationFallback {then}{then}
+\DeclareTranslation{English}{then}{then}
+\DeclareTranslation{German} {then}{dann}
+
+\DeclareTranslationFallback {else}{else}
+\DeclareTranslation{English}{else}{else}
+\DeclareTranslation{German} {else}{sonst}
+
+\DeclareTranslationFallback {do}{do}
+\DeclareTranslation{English}{do}{do}
+\DeclareTranslation{German} {do}{mache}
+
+
+
+
+% % %
+% Variables for intents and positioning
+% % %
+
+% xshift= \blockhspace
+% xshift= -\blockhspace
+\newlength{\blockhspace}
+\setlength{\blockhspace}{1em}
+\newlength{\blockvspace}
+\setlength{\blockvspace}{2pt}
+
+
+\newboolean{noIndentForPin}
+\setboolean{noIndentForPin}{true}
+\newcommand{\einruecken}[1]{\setboolean{noIndentForPin}{false}#1\setboolean{noIndentForPin}{true}}
+
+ % % %
+ % Colordefinitions like pxt.calliope.cc
+ % % %
+ %
+ \definecolor{grundlagen-color}{HTML}{54C9C9}
+ \definecolor{eingaben-color}{HTML}{C90072}
+ \definecolor{musik-color}{HTML}{DF4600}
+ \definecolor{led-color}{HTML}{8169E6}
+ \definecolor{schleifen-color}{HTML}{107C10}
+ \definecolor{logik-color}{HTML}{006970}
+ \definecolor{platzhalter-color}{HTML}{A80000}
+ \definecolor{mathematik-color}{HTML}{712672}
+ \definecolor{funk-color}{HTML}{E3008C}
+ \definecolor{motoren-color}{HTML}{008272}
+ \definecolor{text-color}{HTML}{996600}
+ \definecolor{spiel-color}{HTML}{008272}
+ \definecolor{bilder-color}{HTML}{5C2D91}
+ \definecolor{pins-color}{HTML}{A80000}
+ \definecolor{konsole-color}{HTML}{002050}
+ \definecolor{steuerung-color}{HTML}{42495F}
+ \definecolor{bluetooth-color}{HTML}{0082FB}
+ %
+ \definecolor{int-color}{HTML}{C6A8C7}
+ \definecolor{string-color}{HTML}{D6C299}
+ \definecolor{boolean-color}{HTML}{99C3C6}
+ \definecolor{color-color}{HTML}{BBE9E9}
+ % Fallback LED-BG
+ \definecolor{led-bg-color}{HTML}{54C9C9}
+ \definecolor{led-on-color}{HTML}{F6F0A6} %das hier ist NEPO color
+
+
+\pgfdeclarelayer{background}
+\pgfsetlayers{background,main}
+
+% allow local colordefinitions
+\newcommand{\setcolor}[2]{\definecolor{#1}{HTML}{#2}}
+
+
+% % %
+% Code-Block Objects
+% % %
+
+% global styles
+\tikzset{
+ codeblocks/.style = {
+ font = \ttfamily,rounded corners=2pt, rectangle,thick,
+ align=left,
+ node distance=6pt,
+ transform shape, % for scaling
+ anchor=base, baseline,
+ robertashape,
+ },
+ eckig/.style ={rounded corners = 0pt},
+ nocolor/.style={fill=white, text = black, draw = black!60},
+}
+
+% % PXT-Nodes % %
+%
+%
+% Colordefinitions like lab.open-roberta.org
+%
+\tikzset{
+%
+ grundlage/.style = {fill=grundlagen-color, text = white, draw = grundlagen-color!60!black,},
+ eingabe/.style = {fill=eingaben-color, text = white, draw = eingaben-color!60!black, },
+ schleife/.style = {fill=schleifen-color, text = white, draw = schleifen-color!60!black, },
+ logik/.style = {fill=logik-color, text = white, draw = logik-color!60!black, },
+ musik/.style = {fill=musik-color, text = white, draw = musik-color!60!black, },
+ led/.style = {fill=led-color, text = white, draw = led-color!60!black, },
+ platzhalter/.style = {fill=platzhalter-color, text = white, draw = platzhalter-color!60!black, },
+ mathe/.style = {fill=mathematik-color, text = white, draw = mathematik-color!60!black, },
+ funk/.style = {fill=funk-color, text = white, draw = funk-color!60!black, },
+ motor/.style = {fill=motoren-color, text = white, draw = motoren-color!60!black, },
+ zeichenkette/.style = {fill=text-color, text = white, draw = text-color!60!black, },
+ spiel/.style = {fill=spiel-color, text = white, draw = spiel-color!60!black, },
+ bild/.style = {fill=bilder-color, text = white, draw = bilder-color!60!black,align=left, },
+ pins/.style = {fill=pins-color, text = white, draw = pins-color!60!black, },
+ konsole/.style = {fill=konsole-color, text = white, draw = konsole-color!60!black, },
+ steuerung/.style = {fill=steuerung-color, text = white, draw = steuerung-color!60!black, },
+ bluetooth/.style = {fill=bluetooth-color, text = white, draw = bluetooth-color!60!black, },
+ %
+ % Fallback styles / for NEPO commandos
+ aktion/.style = {grundlage},
+ farbe/.style={grundlage},
+ %
+ kontrolle/.style = {schleife},
+ sensor/.style={pins},
+ start/.style={grundlage},
+ sensor/.style={eingabe},
+ liste/.style={konsole},
+ variablen/.style={platzhalter},
+ nachricht/.style={bluetooth},
+ funktion/.style={steuerung},
+}
+%
+% END PXT colors % % % %
+
+% % START OpenRoberta-Nodes colors %
+%
+% OpenRoberta Colors als package option:
+
+\tikzset{
+ define color/.code 2 args={
+ \definecolor{#1}{HTML}{#2}
+},
+openroberta/.style={
+ square, %keine Rundungen
+ define color={start-color}{E2001A},
+ define color={aktion-color}{F29400},
+ define color={sensoren-color}{8FA402},
+ define color={kontrolle-color}{EB6A0A},
+ define color={logik-color}{33B8CA},
+ define color={mathematik-color}{005A94},
+ define color={text-color}{BACC1E},
+ define color={listen-color}{39378B},
+ define color={farben-color}{EBC300},
+ define color={bilder-color}{DF01D7},
+ define color={led-bg-color}{DF01D7},
+ define color={led-on-color}{EDFEA0},
+ define color={led-off-color}{F299EF},
+ define color={variablen-color}{9085BA},
+ define color={funktionen-color}{179C7D},
+ define color={nachrichten-color}{FF69B4},
+ %
+ define color={int-color}{005A94},
+ define color={string-color}{BACC1E},
+ define color={boolean-color}{33B8CA},
+ define color={color-color}{EBC300},
+ %
+ start/.style = {fill=start-color, text = white, draw = start-color!60!black,},
+ aktion/.style = {fill=aktion-color, text = white, draw = aktion-color!60!black,},
+ sensor/.style = {fill=sensoren-color, text = white, draw = sensoren-color!60!black,},
+ kontrolle/.style = {fill=kontrolle-color, text = white, draw = kontrolle-color!60!black,},
+ logik/.style = {fill=logik-color, text = white, draw = logik-color!60!black,},
+ mathe/.style = {fill=mathematik-color, text = white, draw = mathematik-color!60!black,},
+ zeichenkette/.style = {fill=text-color, text = white, draw = text-color!60!black,},
+ liste/.style = {fill=listen-color, text = white, draw = listen-color!60!black,},
+ farbe/.style = {fill=farben-color, text = white, draw = farben-color!60!black,},
+ bild/.style = {fill=bilder-color, text = white, draw = bilder-color!60!black,},
+ variablen/.style = {fill=variablen-color, text = white, draw = variablen-color!60!black,},
+ funktion/.style = {fill=funktionen-color, text = white, draw = funktionen-color!60!black,},
+ nachricht/.style = {fill=nachrichten-color, text = white, draw = nachrichten-color!60!black,},
+ %
+ % Fallback styles / for PXT commandos
+ schleife/.style = {kontrolle},
+ pins/.style = {sensor},
+ grundlage/.style = {start},
+ eingabe/.style = {sensor},
+ konsole/.style = {liste},
+ platzhalter/.style= {variablen},
+ bluetooth/.style = {nachricht},
+ steuerung/.style = {funktion},
+ ledOn/.style = {node distance = 1mm, circle,radius=2mm,fill=led-on-color, draw=black,opacity=1,draw}, %TODO Color fixen
+ ledOff/.style = {node distance = 1mm, circle,radius=2mm,fill=led-off-color, draw=black,opacity=1,draw}, %TODO Color fixen
+ }%robertafarben
+}%tikzset
+%
+%
+% % % ENDE Open Roberta % % % % %
+
+
+
+% % global style definitions
+%
+\tikzset{
+ umgebung/.style = {draw,line width=2pt,transform shape=false}, % yshift ausgleich for each element
+% Pictures/LED-Matrix
+ ledOn/.style = {node distance = 1mm, circle, radius=2mm, fill=red, draw=black,opacity=1, draw},
+ ledOff/.style = {node distance = 1mm, circle, radius=2mm, fill=white, draw=black,opacity=0.7, draw},
+%
+% Boxes and smaller elements
+%
+ dropdown/.style = {
+ fill=white,
+ draw=none,
+ opacity=0.7, % Leider auch Schriftsichtbarkeit
+ rectangle,
+ rounded corners=2pt,
+ inner sep=2pt,
+ anchor = base,
+ text = black,
+ text depth=0.50ex,
+ },
+ intbox/.style = {
+ fill=int-color,
+ draw=none,
+ opacity=0.7, % Leider auch Schriftsichtbarkeit
+ rectangle,
+ rounded corners=2pt,
+ inner sep=3pt,
+ text = black,
+ anchor=west,
+ },
+ stringbox/.style = {
+ fill=string-color,
+ draw=none,
+ opacity=0.7, % Leider auch Schriftsichtbarkeit
+ rectangle,
+ rounded corners=2pt,
+ inner sep=3pt,
+ text = black,
+ anchor=west,
+ },
+ boolbox/.style = {
+ fill=color-color,
+ draw=none,
+ opacity=0.7, % Leider auch Schriftsichtbarkeit
+ rectangle,
+ rounded corners=2pt,
+ inner sep=3pt,
+ text = black,
+ anchor=west,
+ },
+%
+ ledanzeige/.style = {% LEDs Help
+ matrix of nodes,
+ row sep=4pt,
+ column sep=4pt,
+ ampersand replacement=\&,
+ anchor=base, fill=led-bg-color,
+ nopins
+ },
+%
+ boden/.style = {% Für Baseline anordnung der Dropdown
+ baseline,
+ anchor=base,
+ text height=1.7ex,
+ text depth=0.3ex,
+ minimum width=1em
+ },
+%
+ base/.style = {% Für Baseline anordnung der Dropdown
+ anchor=base, baseline},
+ keinezacken/.style = {% Für Deaktivierung der OpenRobertaZacken
+ rectangle},
+%
+% unter={NODENAME}{X-distance}{Y-distance}
+ unter/.style n args={3}{below right = #3\blockvspace and #2\blockhspace of #1.south west},
+%
+% https://tex.stackexchange.com/questions/223910/reference-a-nodes-color-by-using-node-name
+% get color of 'this' element
+every text node part/.add code={}{
+ \globalcolorstrue
+ \ifx\tikz@fillcolor\pgfutil@empty
+ \pgfutil@colorlet{\tikz@fig@name.fill}{.}
+ \else
+ \pgfutil@colorlet{\tikz@fig@name.fill}{\tikz@fillcolor}
+ \fi
+ \ifx\tikz@strokecolor\pgfutil@empty
+ \pgfutil@colorlet{\tikz@fig@name.draw}{.}
+ \else
+ \pgfutil@colorlet{\tikz@fig@name.draw}{\tikz@strokecolor}
+ \fi
+ \ifx\tikz@textcolor\pgfutil@empty
+ \pgfutil@colorlet{\tikz@fig@name.text}{.}
+ \else
+ \pgfutil@colorlet{\tikz@fig@name.text}{\tikz@textcolor}
+ \fi
+},
+} %end tikzset
+
+% % %
+% macros for boxes, LEDs, etc.
+% % %
+\newcommand{\dropdown}[1]{\hspace*{-0.5em}
+ \tikz[boden]\node[dropdown]{
+ #1\,\tikz[scale=0.3,baseline=-0.3em]
+ \draw [fill,rounded corners=0mm,]
+ (0,0)--(0.5,0)--(0.25,-0.5)--cycle;% Dreieck
+ };\hspace*{-0.5em}
+}
+
+\newcommand{\intbox}[2][]{
+ \tikz[anchor=center,baseline=-4.0pt,]\strut\node[intbox,#1,text width = {width("{#2}")+0.5em}]{ %this is tikz-magic... 1
+ \tikz[boden]\strut\node[fill=white,rounded corners=6pt,opacity=1,keinezacken,text width = {width("{#2}")-0.0em} %this is tikz-magic... 2
+ ]{
+ #2};
+ };\xspace
+}
+
+% Fix for print option at stringboxes
+\ifthenelse
+{\boolean{no-colors}}% if
+{\newcommand{\setupquotes}{\normalfont \bfseries \huge \vspace*{1em}\color{black}}}% then
+{\newcommand{\setupquotes}{\normalfont \bfseries \huge \vspace*{1em}\color{white}}}% else
+
+% box containing strings
+\newcommand{\stringbox}[2][]{
+ \begin{tikzpicture}[anchor=center,baseline=-4.0pt,]
+ \strut\node[stringbox,#1](string1){
+ {\setupquotes ``}\,\tikz[boden]\strut\node[yshift=0.5em,fill=white,rounded corners=2pt,opacity=1,keinezacken]{#2}
+ ;\setupquotes\,''\vspace*{-0.9em}};
+ \end{tikzpicture}
+}
+
+% box containing boolean
+\newcommand{\boolbox}[2][]{
+ \tikz[anchor=center,baseline=-4.0pt,]\strut\node[boolbox,#1]{
+ \tikz[boden]\strut\node[fill=white,rounded corners=2pt,opacity=1,keinezacken]{#2};
+ };
+}
+
+
+% % % % % % % %
+% Images / LEDs
+% Bilder / LEDs
+
+% container for pictures
+\newcommand{\bild}[2][1]{
+ \hspace*{-16pt} %macht es etwas kompakter
+ \scalebox{#1}[#1]{
+ \tikz\matrix[ledanzeige] %TODO: outer sep einfuegen/entfernen
+ {#2};
+ \hspace*{-16pt} % Ausgleich des zuvielen &
+ }
+}
+
+\newcommand{\0}{|[ledOff]|\&}
+\newcommand{\X}{|[ledOn]|\&}
+
+% template for all LEDs off
+\newcommand{\emptyled}
+{
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \0 \0 \0 \\
+ \0 \0 \0 \0 \0 \\
+}
+
+% template for all LEDs on
+\newcommand{\fullled}
+{
+ \X \X \X \X \X \\
+ \X \X \X \X \X \\
+ \X \X \X \X \X \\
+ \X \X \X \X \X \\
+ \X \X \X \X \X \\
+}
+
+%
+% % % % % END images
+
+
+% % % % % % % %
+% Structures: Branches and Loops
+% Strukturen: Wenn-Dann/ Wenn-Dann-Sonst / Schleife
+
+\def\myspace{\vspace{5pt}}
+\def\myshift{0.95em}
+
+\newcommand{\wenndann}[4][]{
+ \node[logik,#1](#4){%
+ %
+ \renewcommand{\arraystretch}{1}
+ \hspace*{-1em}\setboolean{noIndentForPin}{true}
+ \begin{tabular}{@{}ll}
+ \GetTranslation{if} &#2\myspace\\%\hline
+ \GetTranslation{then} &\begin{tikzpicture}[anchor=north,yshift=\myshift ]#3\end{tikzpicture}\myspace\\[0.5em]
+ \end{tabular}};
+}
+
+
+\newcommand{\wenndannsonst}[5][]{
+ \node[logik,#1](#5){%
+ %
+ \renewcommand{\arraystretch}{1}
+ \hspace*{-1em}\setboolean{noIndentForPin}{true}
+ \begin{tabular}{@{}ll}
+ \GetTranslation{if} &#2\myspace\\ %\hline
+ \GetTranslation{then} &\begin{tikzpicture}[anchor=north, yshift=\myshift ]#3\end{tikzpicture}\myspace\\
+ \GetTranslation{else}&\begin{tikzpicture}[anchor=north, yshift=\myshift ]#4\end{tikzpicture}\myspace\\
+ \end{tabular}};
+}
+
+
+\newcommand{\schleife}[5][]{
+ \node[kontrolle,#1](#5){\\
+ \renewcommand{\arraystretch}{1}
+ \hspace*{-1em}\setboolean{noIndentForPin}{true}
+ \begin{tabular}{@{}ll}
+ #2 & #3\\[0,5em]
+ \GetTranslation{do} & \begin{tikzpicture}[anchor=north, yshift=\myshift]#4\end{tikzpicture}\\
+ \end{tabular}
+ };
+}
+
+%
+% % % % % END structures
+
+
+
+% % % % % % % %
+% Shapes
+% Formen
+
+% Open Roberta Shapes with pins top and bottom
+%
+\pgfdeclareshape{robertashape}
+{
+ % This piece is from \pgflibarayshapes.code.tex
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+
+ \inheritbackgroundpath[from=rectangle]
+ \inheritbeforebackgroundpath[from=rectangle]
+ \inheritbehindforegroundpath[from=rectangle]
+ \inheritforegroundpath[from=rectangle]
+ \inheritbeforeforegroundpath[from=rectangle]
+
+ \backgroundpath{
+ %
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+
+ \xdef\blockhspaceoben{1\blockhspace}
+
+ \ifthenelse{\boolean{noIndentForPin}}{ % TODO Bedingungen verschönern? Aktuell globales boolean
+ \xdef\blockhspaceunten{\blockhspaceoben}}{
+ \xdef\blockhspaceunten{2*\blockhspaceoben}}
+
+ \def\dreieckseite{4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} %<-- south west
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceunten}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceunten+\dreieckseite}{\pgf@ya-\dreieckseite}} %Spitze unten
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceunten+2*\dreieckseite}{\pgf@ya}}
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} % south east
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} % north east
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceoben+2*\dreieckseite}{\pgf@yb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceoben+\dreieckseite}{\pgf@yb-\dreieckseite}} %Spitze oben
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceoben}{\pgf@yb}}
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} %<-- north west
+ \pgfpathclose
+ }
+}
+
+% % Open Roberta Shapes with pins ONLY bottom
+%
+\pgfdeclareshape{pinlow}
+{
+ % This piece is from \pgflibarayshapes.code.tex
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+
+ \inheritbackgroundpath[from=rectangle]
+ \inheritbeforebackgroundpath[from=rectangle]
+ \inheritbehindforegroundpath[from=rectangle]
+ \inheritforegroundpath[from=rectangle]
+ \inheritbeforeforegroundpath[from=rectangle]
+
+ \backgroundpath{
+ %
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+
+ \xdef\blockhspaceoben{1\blockhspace}
+
+ \ifthenelse{\boolean{noIndentForPin}}{ % TODO Bedingungen verschönern? Aktuell globales boolean
+ \xdef\blockhspaceunten{\blockhspaceoben}}{
+ \xdef\blockhspaceunten{2*\blockhspaceoben}}
+
+ \def\dreieckseite{4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} %<-- south west
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceunten}{\pgf@ya}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceunten+\dreieckseite}{\pgf@ya-\dreieckseite}} %Spitze unten
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceunten+2*\dreieckseite}{\pgf@ya}}
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} % south east
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} % north east
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} %<-- north west
+ \pgfpathclose
+ }
+}
+
+
+% % Open Roberta Shapes with pins ONLY top
+%
+\pgfdeclareshape{pinhigh}
+{
+ % This piece from \pgflibarayshapes.code.tex
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+
+ \inheritbackgroundpath[from=rectangle]
+ \inheritbeforebackgroundpath[from=rectangle]
+ \inheritbehindforegroundpath[from=rectangle]
+ \inheritforegroundpath[from=rectangle]
+ \inheritbeforeforegroundpath[from=rectangle]
+
+ \backgroundpath{
+ %
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+
+ \xdef\blockhspaceoben{1\blockhspace}
+
+ \ifthenelse{\boolean{noIndentForPin}}{ % TODO Bedingungen verschönern? Aktuell globales boolean
+ \xdef\blockhspaceunten{\blockhspaceoben}}{
+ \xdef\blockhspaceunten{2*\blockhspaceoben}}
+
+ \def\dreieckseite{4}
+
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} %<-- south west
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} % south east
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} % north east
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceoben+2*\dreieckseite}{\pgf@yb}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceoben+\dreieckseite}{\pgf@yb-\dreieckseite}} %Spitze oben
+ \pgfpathlineto{\pgfpoint{\pgf@xa+\blockhspaceoben}{\pgf@yb}}
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} %<-- north west
+ \pgfpathclose
+ }
+}
+
+
+
+% % puzzlepiece Shapes mit hole at left side
+%
+\pgfdeclareshape{puzzleteil}
+{
+ % This piece is from \pgflibarayshapes.code.tex
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{north west}
+ \inheritanchor[from=rectangle]{north east}
+ \inheritanchor[from=rectangle]{center}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{mid}
+ \inheritanchor[from=rectangle]{mid west}
+ \inheritanchor[from=rectangle]{mid east}
+ \inheritanchor[from=rectangle]{base}
+ \inheritanchor[from=rectangle]{base west}
+ \inheritanchor[from=rectangle]{base east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{south west}
+ \inheritanchor[from=rectangle]{south east}
+
+ \inheritbackgroundpath[from=rectangle]
+ \inheritbeforebackgroundpath[from=rectangle]
+ \inheritbehindforegroundpath[from=rectangle]
+ \inheritforegroundpath[from=rectangle]
+ \inheritbeforeforegroundpath[from=rectangle]
+
+ \backgroundpath{
+ %
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+
+
+ \pgfpathmoveto{\pgfpoint{\pgf@xa}{\pgf@ya}} %<-- south west
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@ya}} % south east
+ \pgfpathlineto{\pgfpoint{\pgf@xb}{\pgf@yb}} % north east
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb}} %<-- north west
+ % Anpassung
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb-4pt}}
+ %
+ \pgfpathlineto{\pgfpoint{\pgf@xa-5pt}{\pgf@yb-2pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa-5pt}{\pgf@yb-5pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa-5pt}{\pgf@yb-13pt}}
+ \pgfpathlineto{\pgfpoint{\pgf@xa}{\pgf@yb-11pt}}
+ \pgfpathclose
+ }
+}
+
+% % % % % END shapes
+
+
+% % colors
+%
+% print a small box with a certain color in it
+\newcommand{\farbe}[1]{\tikz\node[rectangle,minimum width=1em,minimum height = 1em,fill=#1]{};}
+
+% % symbols
+%
+\newcommand{\usb}{\faUsb} %USB-symbol
+
+% % Option: print (no-colors) % %
+%
+% TODO: Geht das mir einer Schleife?
+\ifthenelse{\boolean{no-colors}}{
+\tikzset
+ {
+ %
+ % pxt
+ %
+ grundlage/.append style={nocolor},
+ eingabe/.append style={nocolor},
+ schleife/.append style={nocolor},
+ logik/.append style={nocolor},
+ musik/.append style={nocolor},
+ led/.append style={nocolor},
+ platzhalter/.append style={nocolor},
+ mathe/.append style={nocolor},
+ funk/.append style={nocolor},
+ motor/.append style={nocolor},
+ zeichenkette/.append style={nocolor},
+ spiel/.append style={nocolor},
+ bild/.append style={nocolor},
+ pins/.append style={nocolor},
+ konsole/.append style={nocolor},
+ steuerung/.append style={nocolor},
+ bluetooth/.append style={nocolor},
+ %
+ % openroberta
+ %
+ start/.append style={nocolor},
+ aktion/.append style={nocolor},
+ sensor/.append style={nocolor},
+ kontrolle/.append style={nocolor},
+ logik/.append style={nocolor},
+ mathe/.append style={nocolor},
+ zeichenkette/.append style={nocolor},
+ liste/.append style={nocolor},
+ farbe/.append style={nocolor},
+ bild/.append style={nocolor},
+ variablen/.append style={nocolor},
+ funktion/.append style={nocolor},
+ nachricht/.append style={nocolor},
+ %
+ % Fallback styles / Für PXT Kommandos
+ schleife/.append style={nocolor},
+ pins/.append style={nocolor},
+ grundlage/.append style={nocolor},
+ eingabe/.append style={nocolor},
+ konsole/.append style={nocolor},
+ platzhalte/.append style={nocolor},
+ bluetooth/.append style={nocolor},
+ steuerung/.append style={nocolor},
+ %
+ % etc.
+ dropdown/.append style={fill=white, draw=black!60, opacity=1},
+ ledOn/.append style={nocolor},
+ ledOff/.append style={nocolor},
+ intbox/.append style={nocolor},
+ stringbox/.append style={nocolor},
+ boolbox/.append style={nocolor},
+ %TODO: Farben bei Openroberta LEDS entfernen
+ }
+}{}
+
+% (local) Style print
+\tikzset{
+ print/.style={
+ %
+ % pxt
+ %
+ grundlage/.append style={nocolor},
+ eingabe/.append style={nocolor},
+ schleife/.append style={nocolor},
+ logik/.append style={nocolor},
+ musik/.append style={nocolor},
+ led/.append style={nocolor},
+ platzhalter/.append style={nocolor},
+ mathe/.append style={nocolor},
+ funk/.append style={nocolor},
+ motor/.append style={nocolor},
+ zeichenkette/.append style={nocolor},
+ spiel/.append style={nocolor},
+ bild/.append style={nocolor},
+ pins/.append style={nocolor},
+ konsole/.append style={nocolor},
+ steuerung/.append style={nocolor},
+ bluetooth/.append style={nocolor},
+ %
+ % openroberta
+ %
+ start/.append style={nocolor},
+ aktion/.append style={nocolor},
+ sensor/.append style={nocolor},
+ kontrolle/.append style={nocolor},
+ logik/.append style={nocolor},
+ mathe/.append style={nocolor},
+ zeichenkette/.append style={nocolor},
+ liste/.append style={nocolor},
+ farbe/.append style={nocolor},
+ bild/.append style={nocolor},
+ variablen/.append style={nocolor},
+ funktion/.append style={nocolor},
+ nachricht/.append style={nocolor},
+ %
+ % Fallback styles / Für PXT Kommandos
+ schleife/.append style={nocolor},
+ pins/.append style={nocolor},
+ grundlage/.append style={nocolor},
+ eingabe/.append style={nocolor},
+ konsole/.append style={nocolor},
+ platzhalte/.append style={nocolor},
+ bluetooth/.append style={nocolor},
+ steuerung/.append style={nocolor},
+ %
+ % etc.
+ dropdown/.append style={fill=white, draw=black!60, opacity=1},
+ ledOn/.append style={nocolor},
+ intbox/.append style={nocolor},
+ stringbox/.append style={text-color=black, nocolor,}, % TODO: quotationmarks are still white...
+ boolbox/.append style={nocolor},
+ %TODO: Farben bei Openroberta LEDS entfernen
+ }
+}% print
+
+
+% % Redefine Commands for international usage ínto english language
+%
+
+% Controlstructures
+\newcommand{\ifthenblocks}{\wenndann}
+\newcommand{\ifthenelseblocks}{\wenndannsonst}
+\newcommand{\loopblocks}{\schleife}
+
+\newcommand{\moveindent}{\einruecken}
+
+%styles:
+\tikzset{
+ floor/.style={boden},
+ under/.style n args={3}{below right = #3\blockvspace and #2\blockhspace of #1.south west},
+ square/.style={eckig},
+ nopins/.style={keinezacken},
+ puzzlepiece/.style={puzzleteil},
+}
diff --git a/graphics/pgf/contrib/tikzducks/README.md b/graphics/pgf/contrib/tikzducks/README.md
new file mode 100644
index 0000000000..50f2844035
--- /dev/null
+++ b/graphics/pgf/contrib/tikzducks/README.md
@@ -0,0 +1,29 @@
+# Tikzducks
+
+This is a little LaTeX package for ducks to be used in TikZ pictures. The project is a continuation of https://tex.stackexchange.com/a/347458/36296
+
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/tikzducks/issues
+
+![This repository has an official duck seal of approval](https://i.stack.imgur.com/mSAtL.png)
+
+## A few examples:
+
+![tikz ducks](https://user-images.githubusercontent.com/8226363/33049537-e71e9dd0-ce60-11e7-8b4c-7e1de0177f14.png)
+
+## Video showcases
+
+There are several videos featuring the TikZducks, kindly contributed by Ulrike and Gert Fischer, Carla Maggi, Paulo Cereda and Prof. van Duck - many thanks to you all!
+
+[![The great TikZducks Christmas Extravaganza 2017](https://user-images.githubusercontent.com/8226363/43651585-1281b074-9743-11e8-97f5-bf70617738a5.png)](https://vimeo.com/246256860)
+[![International Pizza Day](https://user-images.githubusercontent.com/8226363/43651587-12c92daa-9743-11e8-83b5-7fd3a3ac19a3.png)](https://vimeo.com/254643482)
+[![Happy Groundhog Day](https://user-images.githubusercontent.com/8226363/43651589-12e84334-9743-11e8-9621-d5e6e53a0ca8.png)](https://vimeo.com/252719006)
+[![Aquarela with TikZducks](https://user-images.githubusercontent.com/8226363/43651586-12a6c008-9743-11e8-99d2-5a66e7f5f1ee.png)](https://vimeo.com/270727100)
+[![Saint Crispin's Day](https://user-images.githubusercontent.com/43832342/47496794-37d18600-d858-11e8-9e6e-777ffee1acdc.png)](https://vimeo.com/295353434)
+[![James Bond](https://user-images.githubusercontent.com/43832342/47496795-37d18600-d858-11e8-8c0c-20ea2d0a23cd.png)](https://vimeo.com/284348495)
+[![The great TikZlings Christmas Extravaganza 2018](https://user-images.githubusercontent.com/43832342/49704004-3cd27500-fc0d-11e8-9002-319a8e71aca7.png)](https://vimeo.com/305374856)
+
+
+
+The source code for the "The great TikZducks Christmas Extravaganza 2017" is available in https://github.com/cereda/duck-extravaganza, for "The great TikZlings Christmas Extravaganza 2018" it can be found at https://github.com/samcarter/Extravanganza2018 .
diff --git a/graphics/pgf/contrib/tikzducks/tikzducks-doc.pdf b/graphics/pgf/contrib/tikzducks/tikzducks-doc.pdf
new file mode 100644
index 0000000000..ba529426bb
--- /dev/null
+++ b/graphics/pgf/contrib/tikzducks/tikzducks-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzducks/tikzducks-doc.tex b/graphics/pgf/contrib/tikzducks/tikzducks-doc.tex
new file mode 100644
index 0000000000..afc6614307
--- /dev/null
+++ b/graphics/pgf/contrib/tikzducks/tikzducks-doc.tex
@@ -0,0 +1,1430 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Documentation for the tikzducks package
+% A package to bring rubber ducks into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzducks
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 1.1
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[parskip=half]{scrartcl}
+
+% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[english]{babel}
+\usepackage[bitstream-charter]{mathdesign}
+\usepackage{tikzducks}
+\usetikzlibrary{ducks}
+\usepackage[most]{tcolorbox}
+\usepackage[paper=a4paper,margin=3cm]{geometry}
+\usepackage{url}
+\usepackage{xspace}
+\usepackage{scrlayer-scrpage}
+\usepackage{marvosym}
+\usepackage{fontawesome}
+\usepackage[hang,flushmargin,bottom]{footmisc}
+\usepackage{imakeidx}
+\usepackage[colorlinks=true,breaklinks=true,urlcolor=duckblue,linkcolor=duckblue,citecolor=duckblue,filecolor=duckblue]{hyperref}
+
+% macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\CTAN}{\textsc{CTAN}\xspace}
+\newcommand{\TikZ}{Ti\emph{k}Z\xspace}
+\newcommand{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\newcommand{\miktex}{MiK\TeX\xspace}
+\newcommand{\texlive}{\TeX{}Live\xspace}
+
+% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{duckblue}{RGB}{0,70,140}
+\addtokomafont{sectioning}{\color{duckblue}}
+\addtokomafont{date}{\normalsize}
+\addtokomafont{author}{\normalsize}
+\setlength{\footnotemargin}{0.7em}
+
+\lstdefinestyle{duckstyle}{%
+ language={[latex]TeX},
+ tabsize=2,
+ breaklines,
+ basicstyle=\footnotesize\ttfamily,
+ commentstyle={\color{green!50!black}\slshape},
+ columns=fullflexible,
+ emphstyle=\color{orange!70!black},
+ emph=[1]{water,body,head,eye,pupil,bill,grumpy,tshirt,jacket,tie,cape,shorthair,longhair,crazyhair,recedinghair,eyebrow,beard,glasses,sunglasses,alien,hat,cap,santa,chef,cheese,graduate,tassel,beret,crown,unicorn,icecream,flavoura,flavourb,flavourc,book,bookcolour,signpost,signcolour,signback,magichat,magicstars,magicwand,witch,cricket,rollingpin,lightsaber,torch,cake,pizza,hockey,baguette,wing,football,mask,bunny,inear,necklace,milkshake,wine,peakedcap,prison,tophat,speech,bubblecolour,think,buttons,sheep,squareglasses,tail,basket,easter,egga,eggb,eggc,mohican,mullet,horsetail,darthvader,crozier,queencrown,kingcrown,wing,laughing,parrot,stethoscope,niuqelrah,harlequin,neckerchief,woggle,snowduck,invisible,strawhat,ribbon,vampire,parting,crystalball,helmet,shovel,pickaxe,bowtie,lapel,umbrella,umbrellaclosed,handbag,cocktail,viking,devil},
+ texcsstyle=*\color{duckblue}\bfseries,
+ keywordstyle=\color{red!60!black}\bfseries,
+ morekeywords={tikzpicture,picture,scope,patterns,calc,pgfinterruptboundingbox},
+ moretexcs={duck,picduck,path,definecolor,duckpathjacket,duckpathbody,duckpathgrumpybill,duckpathbill,duckpathtshirt,duckpathcape,duckpathshorthair,duckpathlonghair,duckpathcrazyhair,duckpathrecedinghair,duckpathcrown,scalebox,foreach,node,draw,PassOptionsToPackage,usetikzlibrary,selectcolormodel,colorlet,insignia,stripes,color,includegraphics,mcap,setboardfontcolors,setboardfontencoding,WhiteQueenOnWhite,WhiteKingOnWhite,superstripes,shuffleducks,randuck,randomhead,randomaccessories,duckpathmohican,duckpathmullet,duckpathqueencrown,duckpathkingcrown,duckpathdarthvader,duckpathhorsetail,tikzset,duckpathwing,shade},
+ delim ={[s][\ttfamily\color{green!50!black}]{$}{$}},
+ moredelim=[is][\footnotesize\ttfamily\color{orange!70!black}]{|}{|},
+ index=[1][emph]
+}
+
+\tcbset{%
+ colframe=duckblue,
+ arc=2mm,
+ fonttitle=\bfseries,
+ sidebyside,
+ listing options={style=duckstyle},
+ center lower,
+ righthand width=6.5cm,
+ bottom=0pt,
+ top=0pt,
+ before lower={%
+ \setlength{\parskip}{0.5cm}%
+ \spaceskip=5\fontdimen2\font%
+ },
+}
+
+\lstset{style=duckstyle}
+\pgfkeys{/duck/|stripes|/.style={stripes={#1}}}
+
+\pgfmathsetseed{2}
+\setlength{\footheight}{45pt}
+\newlength{\duckoffset}
+
+\cfoot{%
+ \tikzset{external/export=false}%
+ \shuffleducks
+ \begin{tikzpicture}[scale=0.5]
+ \duck[signpost=\scalebox{0.6}{\thepage},\randomhead]
+ \end{tikzpicture}
+}
+\pagestyle{scrheadings}
+\indexsetup{firstpagestyle=scrheadings}
+\makeindex[columns=3]
+
+\usetikzlibrary{external}
+\ifnum\pdfshellescape=1
+ \tikzexternalize[prefix=./tikzducks-doc-figures/]
+\fi
+
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{The \texorpdfstring{\tikzducks}{tikzducks} package}
+\subtitle{using ducks in \TikZ}
+\author{%
+ \texorpdfstring{\texttt{samcarter} (alias
+ \tikzset{external/export=false}%
+ \begin{tikzpicture}[scale=0.3,baseline=3pt]
+ \duck[body=yellow!50!brown!50!white,
+ longhair=red!50!brown,
+ jacket=blue!50!black]
+ \end{tikzpicture})\\[0.8em]
+ \url{https://github.com/samcarter/tikzducks}\\
+ \url{https://www.ctan.org/pkg/tikzducks}
+ }{samcarter}}
+\date{Version 1.1 -- \today}
+
+\begin{document}
+\maketitle
+\thispagestyle{scrheadings}
+
+\section{Introduc(k)tion}
+\label{intro}
+
+Rubber ducks can be made of latex, but can they also be made with \LaTeX? Yes! The \tikzducks package is a \LaTeX{} package for rubber ducks to be used in \TikZ pictures.
+This project is a continuation of an answer at TeX.Stackexchange: \href{tex.stackexchange.com/a/347458/36296}{How can we draw a duck?}.
+
+This package is work in progress (and will probably never be really finished as there is an infinite amount of things which could be added), therefore I would be happy to hear your feedback and ideas how to improve the package.
+The head version of the source code can be found on \url{github.com/samcarter/tikzducks}, including a bug tracker -- please make constructive use of it! A more stable package version can be found on \CTAN (\url{www.ctan.org/pkg/tikzducks}) and is included in both \miktex and \texlive as \tikzducks. If you seek any other assistance (not bug reports/feature requests), I suggest using the \href{https://tex.stackexchange.com/questions/tagged/tikzducks}{\texttt{\{tikzducks\}}-tag} on TeX.Stackexchange.
+
+\subsection{Acknowledgements}
+
+Without the friendly and helpful community of \href{https://tex.stackexchange.com/}{TeX.Stackexchange} this package would not exist. I would like to thank a few fellow users in particular:
+
+First of all
+%
+\href{https://tex.stackexchange.com/users/101651/carlatex}{Carla Maggi} for pointing out the overwhelming need of having a \tikzducks package and valuable contribution to the package code, in particular the \hyperref[sec:footballducks]{football ducks},
+%
+\href{https://tex.stackexchange.com/users/3094/paulo-cereda}{Paulo Cereda} for his contagious enthusiasm for ducks (\emph{Quack!}) and
+%
+\href{https://tex.stackexchange.com/users/2388/ulrike-fischer}{Ulrike Fischer} for her useful \TikZ advices and contributions to the package and coming to rescue for keyword highlighting in the package documentation.
+
+Many other users contributed to this package (in random order):
+%
+\href{https://tex.stackexchange.com/users/4427/egreg}{Enrico Gregorio} helped to implement the \lstinline|\tikzset{}| interface which makes it much easier to adjust the properties of the ducks to fit the user needs,
+%
+Andrew Stacey contributed the \TikZ Library ``ducks'',
+%
+\href{https://tex.stackexchange.com/users/51022/symbol-1}{Symbol~1} solved a few problems with default key values,
+%
+\href{https://tex.stackexchange.com/users/148434/mihikma}{Mihikma} created the duck's beard,
+%
+\href{https://github.com/yudai-nkt}{Yudai Nakata} helped with problems of \lstinline|\pdfrandomseed|
+%
+and last but not least my thanks go to \href{https://tex.stackexchange.com/users/5763/martin-schr%c3%b6der}{Martin Schr\"oder} for his feedback to the code review.
+
+\pagebreak
+The ducks mostly consist of basic geometric shapes drawn in \TikZ. Some of the more complex shapes (e.g.\ the different hair styles) are first drawn in \texttt{inkscape} (\url{https://inkscape.org}) and then exported to \TikZ paths using the \texttt{SVG to TikZ/PGF} extension (\url{https://github.com/kjellmf/svg2tikz}).
+
+\subsection{Dependencies}
+
+The \tikzducks package loads \TikZ, which in turn loads the \lstinline|xcolor| package (amongst others). If you require one of these packages to be loaded with some option, please consider loading it yourself before the \tikzducks package or use, e.g.
+
+\begin{lstlisting}[aboveskip=0em,morekeywords={xcolor,svgnames}]
+ \PassOptionsToPackage{svgnames}{xcolor}
+\end{lstlisting}
+It also uses the \lstinline|\usetikzlibrary{patterns}| and \lstinline|\usetikzlibrary{calc}|. Furthermore the packages \lstinline|ifpdf| and \lstinline|ifluatex| are necassary starting with version 0.5 of this package.
+
+\subsection{License}
+
+Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright}
+\texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
+
+The shown example ducks are purely fictional characters, any resemblance to real ducks or persons is purely coincidental and no copyright infringement is intended.
+
+\section{Usage}
+
+The basic usage is fairly simple, to draw a duck:
+\begin{tcblisting}{title={Basic duck}}
+\begin{tikzpicture}
+ \duck
+\end{tikzpicture}
+\end{tcblisting}
+
+To customise this basic duck, the package uses \lstinline|pgf| keys. For almost all parts the colour can be changed using \lstinline|<shape name>=<colour name>|. For example to change the colour of the duck:
+\begin{tcblisting}{title={Blue duck}}
+\begin{tikzpicture}
+ \duck[body=blue]
+\end{tikzpicture}
+\end{tcblisting}
+
+If the keyword consists of multiples words, it works both with and without spaces. In the following usually the version without spaces is given.
+
+\clearpage
+In addition to the keys defined in this package, all usual \TikZ and \lstinline|pgf| keys can also be used. For example if the size of the ducks should be changed or shifted:
+
+\begin{tcblisting}{title={Scaled duck and \emph{The Ugly Duckling}}, righthand width=3cm}
+\begin{tikzpicture}[scale=0.6]
+ \duck
+ \duck[xshift=90pt, scale=.3, yshift=150pt]
+ \duck[xshift=60pt, scale=.3, yshift=100pt]
+ \duck[body=gray!50!white,head=gray!50!white,
+ xshift=80pt, scale=.3, yshift=50pt]
+\end{tikzpicture}
+\end{tcblisting}
+
+To make the usage easier for the \TikZ-savvy users, Andrew Stacey contributed a \TikZ library. It can be loaded with \lstinline|\usetikzlibrary{ducks}|. In addition to the normal functionality of the \tikzducks package, the ducks are now also available as \lstinline|pic|. A short example:
+
+\begin{tcolorbox}[title={\TikZ library ``ducks''}]
+\begin{lstlisting}[morekeywords={ducks,duck,standalone,tikz,document}]
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usetikzlibrary{ducks}
+
+\begin{document}
+
+\begin{tikzpicture}
+\draw (0,0) pic[
+ duck/water=green,
+ duck/alien,
+ ] {duck};
+\draw (4,0) pic[
+ scale=1.4,
+ ] {duck};
+\end{tikzpicture}
+
+\end{document}
+\end{lstlisting}
+
+\tcblower
+\begin{tikzpicture}
+\draw (0,0) pic[
+ duck/water=green,
+ duck/alien,
+ ] {duck};
+\draw (2,1) pic[
+ scale=1.4,
+ ] {duck};
+\end{tikzpicture}
+\end{tcolorbox}
+
+For the \TeX{} purists, there is also a picture mode variant:
+
+{
+\setlength{\unitlength}{0.6mm}
+\begin{tcblisting}{title={\texttt{picture} mode duck}}
+\begin{picture}(42,44)
+ \picduck
+\end{picture}
+\end{tcblisting}
+}
+
+\clearpage
+\subsection{Body parts}
+
+The various parts of the duck can also be coloured independently, i.e.\ \lstinline|body|, \lstinline|head| or \lstinline|bill|:
+
+\begin{tcblisting}{title={Harlequin duck}}
+\begin{tikzpicture}
+ \duck[body=yellow,
+ head=yellow!50!orange,
+ bill=red,
+ eye=green]
+\end{tikzpicture}
+\end{tcblisting}
+
+Furthermore using the keywords \lstinline|grumpy|, \lstinline|laughing| or \lstinline|parrot| the shape of the bill can be changed:
+
+\begin{tcblisting}{title={Grumpy duck}}
+\begin{tikzpicture}
+ \duck[grumpy]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[grumpy, bill=cyan]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Laughing duck}}
+\begin{tikzpicture}
+ \duck[laughing]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[laughing, bill=red]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Parrot duck}}
+\begin{tikzpicture}
+ \duck[parrot]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[parrot, bill=blue]
+\end{tikzpicture}
+\end{tcblisting}
+
+For everybody suffering from anatidaephobia, there is also a special option to not draw the duck:
+\begin{tcblisting}{title={Invisible duck}}
+\begin{tikzpicture}
+ \duck[invisible]
+\end{tikzpicture}
+\end{tcblisting}
+
+This can also be useful to recycle some of the accessories presented in \ref{sec:accessories}.
+
+\clearpage
+\subsection{Hair styles}
+
+Some duck also like to have nice hair cuts, several different hair styles are available:
+\begin{tcblisting}{title={Hairy duck},righthand width=9cm}
+\begin{tikzpicture}
+ \duck[longhair]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[shorthair]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[crazyhair]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[recedinghair]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[mohican]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[mullet]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[parting]
+\end{tikzpicture}
+\end{tcblisting}
+
+And of course the colour of each hair style can be adjusted:
+\begin{tcblisting}{title={Coloured hair duck}}
+\begin{tikzpicture}
+ \duck[longhair=teal]
+\end{tikzpicture}
+\end{tcblisting}
+
+Eyebrows and a beard are also part of the package. The colour choice is more tricky for them -- if a colour is explicitly specified (\lstinline|eyebrow=<colour name>| or \lstinline|beard=<colour name>|) this colour is of course used, but if no colour is given, it first falls back to the hair colour and only if the duck does not have any hairs, the default colour is applied.
+
+\enlargethispage{2\baselineskip}
+
+\begin{tcblisting}{title={Eye brow duck}}
+\begin{tikzpicture}
+ \duck[eyebrow]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[longhair=blue,eyebrow]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[crazyhair=red,eyebrow=blue]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Beard duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[beard=white!80!brown]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[recedinghair=white,beard]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The beard is based on an answer by Mihikma, see \url{https://tex.stackexchange.com/a/401777/36296}}
+
+Please note that not all of the accessories, especially hats, shown in the following sections, will suite every hairstyle. In case the desired combination of hair style and hat does not work well, there is always the possibility to look up the original definition of the hat in the \lstinline|tikzducks| source code and recreate it with a more suitable position or size.
+
+\subsection{Clothing}
+
+A respectable duck needs a suitable wardrobe. It can choose from a \lstinline|tshirt|, a \lstinline|jacket|, a \lstinline|tie| or a \lstinline|bowtie|. In it's infinite wardrobe these items are available in all colours definable in the current colour model.
+
+\begin{tcblisting}{title={Dressed duck}}
+\begin{tikzpicture}
+ \duck[tshirt]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[jacket]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[tie]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[bowtie]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[cape]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[tshirt=lightgray,
+ jacket=blue!50!black,
+ tie=blue!80!black,
+ shorthair]
+\end{tikzpicture}
+\end{tcblisting}
+
+For more ways to customise the clothing also have a look at the \hyperref[sec:footballducks]{football ducks in Section \ref{sec:footballducks}}.
+
+\clearpage
+\subsection{Accessories}
+\label{sec:accessories}
+
+There is a multitude of things a duck might need. The following examples all also work without specifying a colour, but giving both an example with and one without explicit colour just makes this overview unnecessary long, so only one is given.
+
+\begin{tcblisting}{title={Swimming duck}}
+\begin{tikzpicture}
+ \duck[water=cyan!50!blue]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Alien duck}}
+\begin{tikzpicture}
+ \duck[alien=green!50!brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Hat duck}}
+\begin{tikzpicture}
+ \duck[hat=red!50!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Tophat duck}}
+\begin{tikzpicture}
+ \duck[tophat=blue!20!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Strawhat duck}}
+\begin{tikzpicture}
+ \duck[strawhat=brown!50!white, ribbon=gray]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Basecap duck}}
+\begin{tikzpicture}
+ \duck[cap=red!80!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Santa Duck}}
+\begin{tikzpicture}
+ \duck[santa=red!80!black,
+ beard=white!80!brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Graduate duck}}
+\begin{tikzpicture}
+ \duck[graduate=gray!20!black,tassel=red!70!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Beret duck}}
+\begin{tikzpicture}
+ \duck[beret=red!70!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Peaked cap duck}}
+\begin{tikzpicture}
+ \duck[peakedcap=blue!50!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Harlequin duck}}
+\begin{tikzpicture}
+ \duck[harlequin=blue,
+ niuqelrah=red]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Crown duck}}
+\begin{tikzpicture}
+\duck[body=black!75!white,
+ crown=yellow!70!brown]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[queencrown=gray]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[kingcrown=brown!70!red]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Knight duck}}
+\begin{tikzpicture}
+ \duck[helmet=gray]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Viking duck}}
+\begin{tikzpicture}
+ \duck[viking=gray]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Devil duck}}
+\begin{tikzpicture}
+ \duck[devil=red]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Unicorn duck}}
+\begin{tikzpicture}
+ \duck[body=pink,
+ unicorn=magenta!60!violet,
+ longhair=magenta!60!violet]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Bunny duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+\duck[body=white!80!brown, bill=white!60!brown, bunny]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[bunny=red,inear=blue]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{Unless an explicit colour is specified, the bunny ears will take the body colour as default colour, the inner parts will be drawn in a lighter shade.}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Sheep duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+\duck[body=white!80!brown, bill=white!60!brown, sheep]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The in-ear colour of the sheep chosen to be the same as the bill}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Horse duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+\duck[body=brown!80!white, longhair=brown!50!black, horsetail]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{If no colour is specified, the horse tail will have the same colour as the hair}
+
+\begin{tcblisting}{title={Witch duck}}
+\begin{tikzpicture}
+ \duck[witch=black!50!gray,
+ longhair=red!80!black,
+ jacket=black!50!gray,
+ magicwand]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Magic duck}}
+\begin{tikzpicture}
+ \duck[magichat,magicwand]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[magichat=teal,
+ magicstars=blue!30!cyan,
+ magicwand]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Glasses duck}}
+\begin{tikzpicture}
+ \duck[glasses=red!50!black]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[squareglasses=blue!50!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Sunglasses duck}}
+\begin{tikzpicture}
+ \duck[sunglasses=blue]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Superhero duck}}
+\begin{tikzpicture}
+ \duck[mask=teal,cape=teal]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Signpost duck}}
+\begin{tikzpicture}
+ \duck[signpost=42]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[signpost=\scalebox{0.4}{
+ \parbox{2cm}{\color{black}
+ \centering Science\\ first}},
+ signcolour=brown!70!gray,
+ signback=white!80!brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Speaking duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[speech={Bla},bubblecolour=cyan!20!white,laughing]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Thinking duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[think={Blub},bubblecolour=white!95!yellow]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{Both the speech and thought bubble are inspired by the wonderful \href{https://www.ctan.org/pkg/ducksay}{ducksay package}}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Buttons duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[buttons=brown!50!black]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[jacket=red,buttons]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{In case the duck is wearing a jacket, the buttons are positioned a bit lower}
+
+\begin{tcblisting}{title={Dinner jacket duck}}
+\begin{tikzpicture}
+ \duck[jacket=gray,lapel=black,buttons]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Book duck}}
+\begin{tikzpicture}
+ \duck[book=\scalebox{0.5}{\TeX}]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[book=\scalebox{0.6}{$\pi$}, bookcolour=blue!50!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Cricket duck}}
+\begin{tikzpicture}
+ \duck[cricket=red!50!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Hockey duck}}
+\begin{tikzpicture}
+ \duck[hockey=brown!70!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Football duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[football=white!85!yellow]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The football duck is simplified version from an answer by Carla Maggi, \url{https://tex.stackexchange.com/a/387126/36296}}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Lightsaber duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[lightsaber=red,darthvader=black!30!gray]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{Dedicated to the Counter Wizard (aka Christian Hupfer)}
+
+\begin{tcblisting}{title={Torch duck}}
+\begin{tikzpicture}
+ \duck[torch=black!30!gray]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Prison duck}}
+\begin{tikzpicture}
+ \duck[prison=gray]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Shepherd duck}}
+\begin{tikzpicture}
+ \duck[crozier=brown!80!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Necklace duck}}
+\begin{tikzpicture}
+ \duck[necklace=gray!20!white]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Icecream duck}}
+\begin{tikzpicture}
+ \duck[icecream]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[icecream=brown,
+ flavoura=green!50!brown,
+ flavourb=white,
+ flavourc=red]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Chef duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[chef=white!95!yellow,
+ rollingpin=brown!80!black]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The chef duck is based on an idea by Carla Maggi, please see the following link for a more sophisticated version of the toque and the rolling pin: \url{https://tex.stackexchange.com/a/387126/36296}}
+
+\begin{tcblisting}{title={Cake duck}}
+\begin{tikzpicture}
+ \duck[cake=red!50!violet!80!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Pizza duck}}
+\begin{tikzpicture}
+ \duck[pizza]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Baguette duck}}
+\begin{tikzpicture}
+ \duck[baguette=brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Cheese duck}}
+\begin{tikzpicture}
+ \duck[cheese=orange]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Milkshake duck}}
+\begin{tikzpicture}
+ \duck[milkshake=red!20!white]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Wine duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[wine=red!70!black]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{According to the resident Italian wine expert of the \href{https://chat.stackexchange.com/transcript/message/40103109}{ TeX.SE chatroom}, the duck is drinking a fine Brunello di Montalcino}
+
+\begin{tcblisting}{title={Cocktail duck}}
+\begin{tikzpicture}
+ \duck[cocktail]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Wing duck}}
+\begin{tikzpicture}
+ \duck[wing=yellow!90!brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Basket duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[basket=brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Easter duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[bunny,easter]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[bunny,easter=brown,
+ egga=cyan,eggb=orange,eggc=teal]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The basket and Easter basket was kindly contributed by Benito van der Zander}
+
+\begin{tcblisting}{title={Ducktor}}
+\begin{tikzpicture}
+ \duck[stethoscope=gray!80!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Neckerchief duck}}
+\begin{tikzpicture}
+ \duck[neckerchief=red!70!black,
+ woggle=blue!60!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Snow Duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[snowduck=white]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The snowduck is dedicated to all Japanese \TeX\ users}
+
+\begin{tcblisting}{title={Vampire Duck}}
+\begin{tikzpicture}
+ \duck[vampire=white]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[laughing, vampire=white]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Fortune Quacker$^{\thefootnote}$}}
+\begin{tikzpicture}
+ \duck[crystalball=cyan]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The crystal ball is kindly contributed by \href{https://tex.stackexchange.com/users/121799/marmot}{@marmot}}
+
+\begin{tcblisting}{title={Shovelling Duck}}
+\begin{tikzpicture}
+ \duck[shovel=gray]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[pickaxe=gray]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Umbrella Duck}}
+\begin{tikzpicture}
+ \duck[umbrella=cyan]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[umbrellaclosed=cyan]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Handbag Duck}}
+\begin{tikzpicture}
+ \duck[handbag=red!70!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\clearpage
+\section{Random ducks}
+With all these available accessories it might be hard to decide which one to choose, but don't worry the \tikzducks provide a solution for this dilemma, the random duck, or short \lstinline|\randuck|, which automatically creates a duck with a randomly chosen accessories and something on top of the head (hair, a hat, ears, alien antenna ...)
+
+\begin{tcblisting}{title={Random duck}}
+\begin{tikzpicture}
+ \randuck
+\end{tikzpicture}
+\end{tcblisting}
+
+In case the duck should not be completely random, but only some of the random elements are desired, these can be accessed independently by using \lstinline|\randomhead| and \lstinline|\randomaccessories| for a random headpiece and a random accessories, respectively. Small caveat: Before using \lstinline|\randomhead| or \lstinline|\randomaccessories|, \lstinline|\shuffleducks| has to be used to provide the random items (for \lstinline|\randuck| this is done automatically).
+
+\begin{tcblisting}{title={Random head gear and accessories}}
+\begin{tikzpicture}
+ \shuffleducks
+ \duck[\randomhead, \randomaccessories]
+\end{tikzpicture}
+\end{tcblisting}
+
+\section{Further customisation}
+
+This package will never be able to do everything every potential user might want to do, as this number quickly approaches $\infty$ -- but as the ducks are simply things inside \lstinline|tikzpicture|s, all the heavy weapons of the \TikZ package are available for further customisation.
+
+\begin{tcblisting}{title={Adding things to the duck}}
+\begin{tikzpicture}
+ \duck
+ \fill[blue] (2,0) rectangle (1,1);
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Monochrome duck}}
+\begin{tikzpicture}
+ \selectcolormodel{gray}
+ \duck
+\end{tikzpicture}
+\end{tcblisting}
+
+For convenience the more complex paths of this package are stored in macros, which can easily be reused:
+
+\begin{tcblisting}{title={Redraw parts}}
+\begin{tikzpicture}
+ \duck
+ \path[preaction={fill, red!50!black},pattern=fivepointed stars, pattern color=yellow]
+ \duckpathlonghair;
+\end{tikzpicture}
+\end{tcblisting}
+
+In detail, the following paths are available:
+
+\begin{lstlisting}[aboveskip=1.2em,breakindent=0pt]
+\duckpathbody, \duckpathgrumpybill, \duckpathbill, \duckpathtshirt, \duckpathjacket,\duckpathcape, \duckpathshorthair, \duckpathlonghair, \duckpathcrazyhair, \duckpathrecedinghair, \duckpathcrown, \duckpathmohican, \duckpathmullet, \duckpathqueencrown, \duckpathkingcrown, \duckpathdarthvader, \duckpathhorsetail
+\end{lstlisting}
+\enlargethispage*{\baselineskip}
+
+In case one of the other shapes is needed, please have a look at the package source code, which can be found in \lstinline|tikzducks.sty|.
+
+To ease the placement of further accessories, some particular spots of the duck are marked with \TikZ coordinates, namely the \lstinline|wing|, \lstinline|head|, \lstinline|bill| and \lstinline|tail|.
+
+{
+\footnotesize\ttfamily
+\begin{tcblisting}{title={\normalfont\normalsize\bfseries Coordinates}}
+\begin{tikzpicture}[scale=2]
+ \duck
+ \fill[black] (wing) circle (0.04);
+ \fill[black] (head) circle (0.04);
+ \fill[black] (bill) circle (0.04);
+ \fill[black] (tail) circle (0.04);
+ \node[xshift=15] at (wing) {Wing};
+ \node[xshift=15] at (head) {Head};
+ \node[xshift=18] at (bill) {Bill};
+ \node[xshift=15] at (tail) {Tail};
+\end{tikzpicture}
+\end{tcblisting}
+}
+An example making use this option are the \hyperref[starducks]{``Live long and prosper'' ducks}.
+
+To distinguish coordinates from multiple ducks in the same \lstinline|tikzpicture|, one can name the ducks using the option \lstinline[emph={name}]|name|. If this option is used, the coordinates are prefixed with the respective name and a dash: \lstinline|<name>-<coordinate>|.
+
+\begin{tcblisting}{title={Named coordinates},listing options={style={duckstyle}, emph={name,wing}}}
+\begin{tikzpicture}
+ \duck[name=foo]
+ \duck[name=bar,xshift=90pt,
+ scale=.3,yshift=150pt]
+ \draw (foo-wing) -- (bar-wing);
+\end{tikzpicture}
+\end{tcblisting}
+
+\clearpage
+\section{Football ducks -- contributed by Carla Maggi}
+\label{sec:footballducks}
+
+\tikzducks are huge sports fans! They do a lot of different sports themselves (see all the piece of sports equipment amongst the accessories), but to cheer their favourite teams, they need suitable fan clothing. In \href{https://tex.stackexchange.com/a/387126/36296}{The Duck Pond} Carla Maggi was so kind to contribute the necessary code to dress the ducks in their team's colours.
+
+\addtocounter{footnote}{1}
+A (non-representative) survey$^{\thefootnote}$\footnotetext[\thefootnote]{see the selection of jerseys in \url{https://tex.stackexchange.com/a/387126/36296}} showed that most sports jerseys can be emulated by drawing stripes of various colours, sizes and orientations -- and this is exactly what the \lstinline|stripes| macro does, drawing stripes across the shape of the duck's jacket. In order to preserve the whole flexibility of this powerful macro, it was integrated as an independent command into the \tikzducks package, this means it can simply be used on top of a drawn duck:
+
+\begin{tcblisting}{title={\texttt{stripes} macro}}
+\begin{tikzpicture}
+ \duck
+ \stripes
+\end{tikzpicture}
+\end{tcblisting}
+
+This may be impractical as the stripes are drawn on top of any accessories or hair the duck may have. Therefore the option \lstinline|stripes| let's you inject any code you would normally use to draw the stripes at the correct layer above the duck's clothing but beneath the hair and accessories:
+
+\begin{tcblisting}{title={Using \texttt{stripes} for \texttt{tikzducks}}}
+\begin{tikzpicture}
+ \duck[longhair,|stripes|={\stripes}]
+\end{tikzpicture}
+\end{tcblisting}
+
+Not all teams wear vertically stripped jerseys, therefore many parameters can be adjusted to best emulate your favourite teams jerseys. The available options are:
+
+\begin{tabular}{@{}ll@{}}
+ \lstinline|color| & colour of the stripes, default:
+ \lstinline|black| \\
+ \lstinline|distance| & periodicity length of the stripes, default:
+ \lstinline|0.3| \\
+ \lstinline|width| & stripe width, default: \lstinline|0.15| \\
+ \lstinline|height| & length of the stripes, default:
+ \lstinline|2.7| \\
+ \lstinline|initialx| & x coordinate of staring point, default:
+ \lstinline|0.1| \\
+ \lstinline|initialy| & y coordinate of staring point, default:
+ \lstinline|-0.3| \\
+ \lstinline|rotate| & rotation angle in degree, default:
+ \lstinline|-10|\\
+ \lstinline|emblem| & possibility to add logos etc., default: empty\\
+\end{tabular}
+
+Please note that the colour of the stripes only affects the stripes themselves, to influence the colour of the empty space between the stripes, clothe the duck with a \lstinline|tshirt| or \lstinline|jacket| of the desired colour underneath the stripes.
+
+\begin{tcblisting}{title={\texttt{stripes} options}}
+\begin{tikzpicture}
+ \duck[stripes]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \duck[|stripes|={
+ \stripes[color=blue]}]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[|stripes|={
+ \stripes[distance=0.6]}]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[|stripes|={
+ \stripes[width=0.03]}]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[|stripes|={\stripes[emblem={\includegraphics[width=0.3cm]{example-image-a}}]}]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[|stripes|={
+ \stripes[height=1.0]}]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[|stripes|={
+ \stripes[initialx=1]}]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[|stripes|={
+ \stripes[initialy=0.8]}]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[|stripes|={
+ \stripes[rotate=45]}]
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[|stripes|={
+ \stripes[rotate=-45]}]
+\end{tikzpicture}
+\end{tcblisting}
+
+For more complex or multicoloured designs the stripes can easily be stacked on top of each other:
+\begin{tcblisting}{title={multicoloured \texttt{stripes}}}
+\begin{tikzpicture}
+\duck[tshirt=red, |stripes|={
+\stripes[color=yellow, width=0.1]
+\stripes[color=orange, width=0.1, initialx=0.0]}]
+\end{tikzpicture}
+\end{tcblisting}
+
+\tcbset{righthand width=3cm}
+A few examples to see \lstinline|stripes| in action:
+\begin{tcblisting}{title={Inter duck}}
+\definecolor{blueinter}{RGB}{0,102,170}%
+\begin{tikzpicture}
+\duck[tshirt=black,|stripes|={\stripes[color=blueinter]},football]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Juve duck}}
+\begin{tikzpicture}
+\duck[tshirt=black,|stripes|={\stripes[color=white]},football]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Milan duck}}
+\begin{tikzpicture}
+\duck[tshirt=black,|stripes|={\stripes[color=red]},football]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={M\"{o}nchengladbach duck}}
+\definecolor{mggreen}{RGB}{37,166,89}%
+\begin{tikzpicture}
+\duck[tshirt=mggreen,|stripes|={\stripes},football]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Palmeiras duck}}
+\definecolor{verdep}{RGB}{0,100,55}%
+\begin{tikzpicture}
+\duck[tshirt=green,jacket=verdep,football]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Cagliari duck}}
+\definecolor{rossocagliari}{RGB}{149,20,38}%
+\definecolor{blucagliari}{RGB}{23,52,84}%
+\begin{tikzpicture}
+\duck[tshirt=white, jacket=blucagliari,|stripes|={
+\stripes[color=rossocagliari, width=0.46, distance=3]},football]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Sampdoria duck}}
+\begin{tikzpicture}
+\duck[tshirt=blue, jacket=blue,|stripes|={
+\stripes[color=white,rotate=-90,width=0.6,distance=1]
+\stripes[color=red,rotate=-90,width=0.2,distance=1.2]
+\stripes[color=black,rotate=-90,width=0.1,distance=1.3]
+},football]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Brescia duck}}
+\begin{tikzpicture}
+\duck[tshirt=blue, jacket=blue,|stripes|={
+ \stripes[color=white, rotate=-70, width=0.22,distance=1.1, initialy=0.01]
+ \stripes[color=white, rotate=40, width=0.2, distance=1.8, initialy=1.0,initialx=0.285]
+},football]
+\end{tikzpicture}
+\end{tcblisting}
+
+In case your favourite team is missing from the above examples, feel free to create an example and share it with the community in \href{https://tex.stackexchange.com/q/387047/36296}{The Duck Pond}.
+
+\clearpage
+\section{Showcase}
+
+\addtocounter{footnote}{1}
+In the following a few examples of possible duck customisations, some of which will require additional packages (which are stated as a comment at the start of the code). For more examples (or to show your own creations) please visit \href{https://tex.stackexchange.com/q/387047/36296}{The Duck Pond} or have a look at \href{https://vimeo.com/246256860}{The Great Christmas Extravaganza}$^{\thefootnote}$\footnotetext[\thefootnote]{the source code is available at \url{https://github.com/cereda/duck-extravaganza}}.
+
+\begin{tcblisting}{title={\texttt{samcarter} duck}}
+\begin{tikzpicture}
+ \duck[body=yellow!50!brown!50!white,
+ longhair=red!50!brown,
+ jacket=blue!50!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Paulo duck}}
+\begin{tikzpicture}
+ \duck[cap,cricket]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Party duck}}
+\begin{tikzpicture}
+ \duck[cake=violet,
+ magichat=violet,
+ magicstars=white!85!yellow]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Brazil duck}}
+\begin{tikzpicture}
+ \definecolor{brazilgreen}{RGB}{0,155,58}%
+ \definecolor{brazilyellow}{RGB}{254,223,0}%
+ \definecolor{brazilblue}{RGB}{0,39,118}%
+ \duck[body=brazilyellow,
+ shorthair=brazilgreen]
+ \path[preaction={fill, brazilblue},pattern=fivepointed stars, pattern color=white]
+ \duckpathjacket;
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Duck in black}}
+\begin{tikzpicture}
+ \duck[grumpy, body=yellow!50!brown!50!white, tshirt=white, jacket=black, tie=black, hat=black, sunglasses=black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Prof.\ van Duck}}
+\begin{tikzpicture}
+ \duck[body=yellow!50!brown!40!white,
+ crazyhair=gray!50!white,
+ eyebrow,
+ glasses=brown!70!black,
+ book=\scalebox{0.2}{$E=mc^2$},
+ bookcolour=red!20!brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Knuth duck}}
+\begin{tikzpicture}
+ \duck[body=yellow!50!red!20!white,
+ recedinghair=gray!50!white,
+ eyebrow,
+ tshirt=white!93!black,
+ jacket=red!50!black,
+ glasses=brown!70!lightgray,
+ book=\scalebox{0.5}{\TeX},
+ bookcolour=black!20!brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={May the Quack be with you}}
+\begin{tikzpicture}
+ \colorlet{skin}{white!45!gray!80!green}
+ \duck[lightsaber, body=skin, bill=gray!80!green,
+ tshirt=brown!50!black, jacket=brown!30!gray]
+ \fill[skin,rounded corners=3] (0.44,1.70) -- (0.25,2) -- (0.6,1.95);
+ \fill[skin,rounded corners=3] (1.34,1.60) -- (1.53,1.9) -- (1.16,1.85);
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[grumpy,lightsaber=red,cape=black!85!white,
+ body=black!70!white,darthvader=black!85!white]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \fill[brown!70!black] (0.5,1.65) circle (0.25);
+ \duck[jacket=white!95!brown, body=brown!50!white,
+ shorthair=brown!70!black, lightsaber=cyan]
+ \fill[brown!70!black] (1.3,1.6) circle (0.25);
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Ghost duck}}
+\colorlet{ghost}{white!98!gray}%
+\begin{tikzpicture}
+\duck[body=ghost,bill=ghost,prison=gray]
+\fill[ghost,rotate=-17](-0.1,0.7) rectangle (0.15,1.3);
+\fill[ghost,rotate=17] (1.6,0.7) rectangle (1.81,1.3);
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={67P/Churyumov-Gerasimenko duck$^{\thefootnote}$}}
+\begin{tikzpicture}[path image/.style={path picture={\foreach \j in {0,...,2}{\node at (0,\j) {\foreach \i in {1,...,5}{\includegraphics[height=1cm]{#1}}};}}}]
+\path (0.1,0.1) rectangle (2.1,2.12);
+\begin{pgfinterruptboundingbox}
+\path[path image=crinklepaper]
+ (0.90,1.50) ellipse (0.50 and 0.625);
+\path[path image=crinklepaper] \duckpathbody;
+\fill[gray!80!white] \duckpathbill;
+\fill[white!70!gray, rotate=-20]
+ (0.23,1.7675) ellipse (0.0893 and 0.125)
+ (-0.06,1.74) ellipse (0.0786 and 0.1143);
+\fill[black, rotate=-20]
+ (0.26,1.7575) ellipse (0.0357 and 0.0714)
+ (-0.03,1.73) ellipse (0.0286 and 0.0643);
+\end{pgfinterruptboundingbox}
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{If you try this at home, replace the \texttt{crinklepaper} with an image of the comet's surface, e.g. \url{https://arxiv.org/abs/1707.02945}}
+
+\begin{tcblisting}{title={With my username I had to...}}
+%\usepackage{marvosym}
+\definecolor{sgskin}{RGB}{222,197,159}%
+\definecolor{sgblond}{RGB}{238,203,96}%
+\colorlet{sggreen}{olive!50!black}
+\colorlet{sgbill}{sgskin!85!black}
+\colorlet{sgshirt}{sggreen!50!black}
+
+\begin{tikzpicture}
+ \duck[body=sgskin,bill=sgbill,tshirt=sgshirt,jacket=sggreen,cap=sggreen]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[body=sgskin,bill=sgbill,tshirt=sgshirt,jacket=sggreen,shorthair=sgblond]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[body=sgskin,bill=sgbill,tshirt=sgshirt,jacket=sggreen,parting=brown!70!black,glasses=brown!30!gray, book={\AA}, bookcolour=brown!50!black]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+ \duck[body=brown!80!black,bill=brown!65!black,tshirt=sgshirt,jacket=sggreen,grumpy]
+ \fill[sgblond, rotate=-10] (0.45,2.0) ellipse (0.12 and 0.05);
+ \node[rotate=170] at (0.8,1.89) {\scalebox{0.35}{\Leo}};
+\end{tikzpicture}
+\end{tcblisting}
+
+
+\begin{tcblisting}{title={Live long and prosper},label=starducks}
+%\usepackage{fontawesome}
+\definecolor{unigold}{RGB}{203,157,52}%
+\definecolor{uniblue}{RGB}{46,114,167}%
+\definecolor{unired}{RGB}{177,49,34}%
+
+\definecolor{skink}{RGB}{245,206,193}%
+\definecolor{skins}{RGB}{255,222,151}%
+\definecolor{skinu}{RGB}{146,113,96}%
+
+\newcommand*{\insignia}{\node[rotate=15] at (wing) {\color{yellow!80!brown}\faLocationArrow};}
+
+\begin{tikzpicture}
+\duck[tshirt=black!60!gray, jacket=unigold, body=skink, shorthair=brown!80!black, bill=skink!60!gray]
+\insignia
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[tshirt=black!60!gray, jacket=uniblue, body=skins, mullet=black!60!brown, bill=skins!60!gray]
+\fill[skins,rotate=175, xshift=-46, yshift=-74] (0.45,1.20)--(0.50,0.80)--(0.65,1.20);
+\fill[black!60!brown, rounded corners=1, rotate=70] (1.85,0.13) rectangle (1.91,-0.05);
+\fill[black!60!brown, rounded corners=1, rotate=90] (1.7,-0.75) rectangle (1.76,-0.97);
+\insignia
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[tshirt=black!60!gray, jacket=unired, body=skinu, longhair=black!60!brown, bill=skinu!70!black]
+\insignia
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={French duck}}
+\begin{tikzpicture}
+\duck[body=yellow!60!red!30!white,tshirt=white!90!yellow,|stripes|={\stripes[color=blue!70!black,rotate=-87,width=0.07,distance=0.12]},beret=blue!30!black,baguette=brown]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Bee duck}}
+\begin{tikzpicture}
+ \duck[|stripes|={\stripes[distance=0.4,width=0.2,rotate=0,initialx=0.15]},alien=black,laughing]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Jailbird duck}}
+\begin{tikzpicture}
+\duck[peakedcap=gray!40!black,tshirt=white,stripes={
+\stripes[rotate=100,color=gray!40!black]},prison=gray]
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Super duck brothers}}
+\newcommand{\superstripes}{\stripes[color=blue!80!black,width=3,height=1.0,rotate=5] \stripes[color=blue!80!black,width=0.1,rotate=0,distance=0.7,initialx=-1.1,height=2]}
+\begin{tikzpicture}
+\duck[tshirt=red!80!black,peakedcap=red!80!black,|stripes|={\superstripes}]
+\fill[white] (0.8,2) circle (0.13);
+\node[red!80!black,rotate=-25] at (0.8,2) {\scalebox{0.6}{\textsf{M}}};
+\end{tikzpicture}
+\begin{tikzpicture}
+\duck[tshirt=green!70!black,peakedcap=green!70!black, |stripes|={\superstripes}]
+\fill[white] (0.8,2) circle (0.13);
+\node[green!70!black,rotate=-25] at (0.8,2) {\scalebox{0.6}{\textsf{L}}};
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Princess duck}}
+\definecolor{pskin}{RGB}{255,200,184}%
+\definecolor{phair}{RGB}{249,249,139}%
+\begin{tikzpicture}
+\duck[body=pskin!80!white,longhair=phair,tshirt=magenta!60!white,jacket=magenta!40!white,necklace=white!85!yellow]
+\path (0.7,2) rectangle (1.4,2.55);
+\fill[yellow!80!orange,rotate=-10,xshift=-11,yshift=5] \duckpathcrown;
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={ZZZoro duck}}
+\begin{tikzpicture}
+\duck[cape=black,hat=black,mask=black]
+\node[rotate=-5] at (0.4,0.7) {\tiny\fontfamily{pzc}\selectfont \textbackslash ZZZ};
+\fill[black,rotate=24] (0.1,0.21) rectangle (1.1,0.23) (1.2,0.22) ellipse (0.15 and 0.03) (1.08,0.22) ellipse (0.03 and 0.15);
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Farm animals}}
+\definecolor{fskin}{RGB}{161,140,126}%
+\definecolor{fbill}{RGB}{238,212,191}%
+\definecolor{fhair}{RGB}{89,72,72}%
+\begin{tikzpicture}
+\duck[body=fskin,bill=fbill,shorthair=fhair,bunny,inear=fbill]
+\node[fskin,rotate=45,scale=3] at (1.7,1.55) {\textsf{s}};
+\fill[fhair,rotate=45] (2.4,0.13) ellipse (0.15 and 0.07);
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[body=white!80!brown, bill=white!60!brown, bunny, longhair=white!60!brown]
+\fill[white!60!brown] (tail) circle (0.2);
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[body=red!20!white,bill=red!30!white,shorthair=red!30!white,bunny=red!30!white,inear=red!30!white]
+\node[red!20!white,rotate=25,scale=3] at (1.7,1.51) {\textsf{s}};
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\duck[body=white!80!brown, bill=white!60!brown, sheep]
+\end{tikzpicture}
+
+\begin{tikzpicture}
+\begin{scope}[yshift=-6]
+\clip[rotate=-5] (0.68,2.38) ellipse (0.3 and 0.4);
+\fill[brown,rotate=-5](0.28,2.26)ellipse (0.3 and 0.4);
+\end{scope}
+\duck[body=brown,mohican=brown!50!black,horsetail]
+\begin{scope}[yshift=-5,xshift=1]
+\clip[rotate=-5] (0.68,2.38) ellipse (0.3 and 0.4);
+\fill[brown,rotate=-5](1.06,2.2) ellipse (0.3 and 0.4);
+\end{scope}
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Arara duck$^{\thefootnote}$}}
+\begin{tikzpicture}
+\duck[parrot,bill=gray!80!black]
+\shade[left color=cyan!90!blue,right color=blue!70!black] \duckpathwing;
+\shade[bottom color=yellow!70!brown, top color=green!40!teal] \duckpathcrazyhair;
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{In honour of the cool TeX automation tool arara, \url{https://github.com/cereda/arara}}
+
+\begin{tcblisting}{title={Duck Queen}}
+\definecolor{qskin}{RGB}{225,219,206}%
+\definecolor{qbill}{RGB}{170,123,154}%
+\definecolor{qdress}{RGB}{184,209,206}%
+\definecolor{qcrown}{RGB}{90,76,183}%
+\begin{tikzpicture}
+\duck[body=qskin,bill=qbill,jacket=qdress,tshirt=teal!30!qdress,shorthair=gray!60!white,necklace=gray!10!white,handbag=teal!30!qdress]
+\fill[gray!60!white,rotate=-30] (0.27,1.23) rectangle (0.37,0.65);
+\fill[qcrown,scale=0.23,rotate=-20,yshift=82,xshift=38] \duckpathqueencrown;
+\fill[qcrown,yshift=3] \duckpathkingcrown;
+\end{tikzpicture}
+\end{tcblisting}
+
+\begin{tcblisting}{title={Duck, MD}}
+\begin{tikzpicture}
+\duck[parting=brown!70!black, squareglasses,
+ tshirt=teal!50!white, jacket=white,
+ buttons=gray!50!white, stethoscope]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Duck scout with ``šátek'' and ``turbánek''$^{\thefootnote}$}}
+\begin{tikzpicture}
+\duck[head=yellow!60!brown!50!white,
+ tshirt=brown!80!gray!40!white,
+ cap=orange!50!yellow,
+ neckerchief=orange!50!yellow,
+ woggle=brown, bookcolour=brown!80!black,
+ book={\tiny\sffamily\scalebox{0.3}{\parbox{1.1cm}{\centering Scouting\\for\\Ducklings}}}]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{This is a very special duck, because yo' won the scout duck in the contest \href{https://tex.meta.stackexchange.com/q/7493/36296}{When will @egreg reach 654321}. In Czech, the neckerchief is called ``šátek'' and the woggle ``turbánek'', which means ``little turban''.}
+
+\begin{tcblisting}{title={My name is Duck, James Duck}}
+\begin{tikzpicture}
+\duck[tshirt,lapel,jacket=gray!50!black,cocktail,
+ buttons,bowtie,parting=brown!50!black]
+\end{tikzpicture}
+\end{tcblisting}
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Mary Duckings$^{\thefootnote}$}}
+\begin{tikzpicture}
+\duck[tshirt,bowtie=red!70!black,jacket=blue!50!black,umbrellaclosed=cyan!50!green,longhair=brown!60!black,hat=black]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{following an idea from Paulo}
+
+\clearpage
+\printindex
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzducks/tikzducks.sty b/graphics/pgf/contrib/tikzducks/tikzducks.sty
new file mode 100644
index 0000000000..f9a075af08
--- /dev/null
+++ b/graphics/pgf/contrib/tikzducks/tikzducks.sty
@@ -0,0 +1,1750 @@
+% !TeX root = ./testing/test.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzducks package
+% A package to bring rubber ducks into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzducks
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 1.1
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzducks}
+ [2019/04/07 v1.1 Draw rubber ducks in TikZ]
+
+\RequirePackage{tikz}
+\usetikzlibrary{patterns} % for the wizard hat
+\usetikzlibrary{calc} % for the sports jerseys
+
+\RequirePackage{ifluatex}
+\RequirePackage{ifxetex}
+
+%\pgfdeclarelayer{backgroundlayer}
+%\pgfdeclarelayer{bodylayer}
+%\pgfdeclarelayer{clothinglayer}
+%\pgfdeclarelayer{hairlayer}
+%\pgfdeclarelayer{hatlayer}
+%
+%\pgfsetlayers{backgroundlayer,bodylayer,clothinglayer,hairlayer,hatlayer,main}
+
+\newcommand*{\duck}[1][]{%
+ \begin{scope}%
+ \tikzset{/duck/.cd,#1}%
+ \duck@draw%
+ \end{scope}%
+}
+
+\newif\ifduck@name
+\newif\ifduck@invisible
+% Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifduck@water
+% body parts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifduck@grumpy
+\newif\ifduck@laughing
+\newif\ifduck@parrot
+% hair styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifduck@shorthair
+\newif\ifduck@longhair
+\newif\ifduck@crazyhair
+\newif\ifduck@recedinghair
+\newif\ifduck@eyebrow
+\newif\ifduck@beard
+\newif\ifduck@mohican
+\newif\ifduck@mullet
+\newif\ifduck@parting
+% clothing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifduck@tshirt
+\newif\ifduck@jacket
+\newif\ifduck@tie
+\newif\ifduck@cape
+\newif\ifduck@stripes
+\newif\ifduck@bowtie
+\newif\ifduck@lapel
+% Headgear %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifduck@alien
+\newif\ifduck@hat
+\newif\ifduck@cap
+\newif\ifduck@santa
+\newif\ifduck@unicorn
+\newif\ifduck@magichat
+\newif\ifduck@chef
+\newif\ifduck@witch
+\newif\ifduck@graduate
+\newif\ifduck@beret
+\newif\ifduck@crown
+\newif\ifduck@queencrown
+\newif\ifduck@kingcrown
+\newif\ifduck@peakedcap
+\newif\ifduck@bunny
+\newif\ifduck@tophat
+\newif\ifduck@darthvader
+\newif\ifduck@harlequin
+\newif\ifduck@strawhat
+\newif\ifduck@helmet
+\newif\ifduck@viking
+\newif\ifduck@devil
+% Accessories %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifduck@glasses
+\newif\ifduck@sunglasses
+\newif\ifduck@squareglasses
+\newif\ifduck@icecream
+\newif\ifduck@book
+\newif\ifduck@magicwand
+\newif\ifduck@cricket
+\newif\ifduck@rollingpin
+\newif\ifduck@signpost
+\newif\ifduck@lightsaber
+\newif\ifduck@cake
+\newif\ifduck@pizza
+\newif\ifduck@hockey
+\newif\ifduck@baguette
+\newif\ifduck@football
+\newif\ifduck@mask
+\newif\ifduck@necklace
+\newif\ifduck@milkshake
+\newif\ifduck@wine
+\newif\ifduck@prison
+\newif\ifduck@speech
+\newif\ifduck@think
+\newif\ifduck@torch
+\newif\ifduck@easter
+\newif\ifduck@basket
+\newif\ifduck@buttons
+\newif\ifduck@sheep
+\newif\ifduck@horsetail
+\newif\ifduck@crozier
+\newif\ifduck@davidlikespineapplepizza
+\newif\ifduck@wing
+\newif\ifduck@stethoscope
+\newif\ifduck@neckerchief
+\newif\ifduck@snowduck
+\newif\ifduck@vampire
+\newif\ifduck@crystalball
+\newif\ifduck@cheese
+\newif\ifduck@shovel
+\newif\ifduck@pickaxe
+\newif\ifduck@umbrella
+\newif\ifduck@umbrellaclosed
+\newif\ifduck@handbag
+\newif\ifduck@cocktail
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /duck/.search also={/tikz,/pgf},
+ /duck/.cd,
+ name/.code= \duck@nametrue \def\duck@name{#1},
+ invisible/.code = \duck@invisibletrue,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Environment
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ water/.code = \duck@watertrue
+ \def\duck@water{#1},
+ water/.default = blue,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body parts
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\duck@body{#1},
+ body = yellow!70!brown,
+ head/.code = \def\duck@head{#1},
+ eye/.code = \def\duck@eye{#1},
+ eye = white!85!yellow,
+ pupil/.code = \def\duck@pupil{#1},
+ pupil = black,
+ bill/.code = \def\duck@bill{#1},
+ bill = orange!50!brown,
+ grumpy/.code = \duck@grumpytrue,
+ laughing/.code = \duck@laughingtrue,
+ parrot/.code = \duck@parrottrue,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % clothing
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ tshirt/.code = \duck@tshirttrue
+ \def\duck@tshirt{#1},
+ tshirt/.default = white,
+ jacket/.code = \duck@jackettrue
+ \def\duck@jacket{#1},
+ jacket/.default = blue,
+ tie/.code = \duck@tietrue
+ \def\duck@tie{#1},
+ tie/.default = blue,
+ cape/.code = \duck@capetrue
+ \def\duck@cape{#1},
+ cape/.default = red,
+ stripes/.code = \duck@stripestrue
+ \def\duck@stripes{#1},
+ stripes/.default = \stripes ,
+ bowtie/.code = \duck@bowtietrue
+ \def\duck@bowtie{#1},
+ bow tie/.forward to = /duck/bowtie,
+ bowtie/.default = black,
+ lapel/.code = \duck@lapeltrue
+ \def\duck@lapel{#1},
+ lapel/.default = black,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % hair styles
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ shorthair/.code = \duck@shorthairtrue
+ \def\duck@hair{#1},
+ short hair/.forward to = /duck/shorthair,
+ shorthair/.default = brown,
+ longhair/.code = \duck@longhairtrue
+ \def\duck@hair{#1},
+ long hair/.forward to = /duck/longhair,
+ longhair/.default = brown,
+ crazyhair/.code = \duck@crazyhairtrue
+ \def\duck@hair{#1},
+ crazy hair/.forward to = /duck/crazyhair,
+ crazyhair/.default = brown,
+ recedinghair/.code = \duck@recedinghairtrue
+ \def\duck@hair{#1},
+ receding hair/.forward to = /duck/recedinghair,
+ recedinghair/.default = brown,
+ eyebrow/.code = \duck@eyebrowtrue
+ \def\duck@eyebrow{#1},
+ eyebrow/.default = brown,
+ beard/.code = \duck@beardtrue
+ \def\duck@beard{#1},
+ beard/.default = brown,
+ mohican/.code = \duck@mohicantrue
+ \def\duck@hair{#1},
+ mohican/.default = brown,
+ mullet/.code = \duck@mullettrue
+ \def\duck@hair{#1},
+ mullet/.default = brown,
+ parting/.code = \duck@partingtrue
+ \def\duck@hair{#1},
+ parting/.default = brown,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Headgear
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ alien/.code = \duck@alientrue
+ \def\duck@alien{#1},
+ alien/.default = green,
+ hat/.code = \duck@hattrue
+ \def\duck@hat{#1},
+ hat/.default = brown,
+ cap/.code = \duck@captrue
+ \def\duck@cap{#1},
+ cap/.default = blue,
+ santa/.code = \duck@santatrue
+ \def\duck@santa{#1},
+ santa/.default = red!80!black,
+ chef/.code = \duck@cheftrue
+ \def\duck@chef{#1},
+ chef/.default = gray!20!white,
+ graduate/.code = \duck@graduatetrue
+ \def\duck@graduate{#1},
+ graduate/.default = black,
+ tassel/.code = \def\duck@tassel{#1},
+ tassel = red,
+ beret/.code = \duck@berettrue
+ \def\duck@beret{#1},
+ beret/.default = black,
+ unicorn/.code = \duck@unicorntrue
+ \def\duck@unicorn{#1},
+ unicorn/.default = pink,
+ magichat/.code = \duck@magichattrue
+ \def\duck@magichat{#1},
+ magic hat/.forward to = /duck/magichat,
+ magichat/.default = violet,
+ magicstars/.code = \def\duck@magicstars{#1},
+ magic stars/.forward to = /duck/magicstars,
+ magicstars = yellow!80!brown,
+ witch/.code = \duck@witchtrue
+ \def\duck@witch{#1},
+ witch/.default = black,
+ crown/.code = \duck@crowntrue
+ \def\duck@crown{#1},
+ crown/.default = yellow,
+ queencrown/.code = \duck@queencrowntrue
+ \def\duck@queencrown{#1},
+ queen crown/.forward to = /duck/queencrown,
+ queencrown/.default = yellow,
+ kingcrown/.code = \duck@kingcrowntrue
+ \def\duck@kingcrown{#1},
+ king crown/.forward to = /duck/kingcrown,
+ kingcrown/.default = gray,
+ bunny/.code = \duck@bunnytrue
+ \def\duck@bunny{#1},
+ bunny/.default = \duck@body,
+ inear/.code = \def\duck@inear{#1},
+ in ear/.forward to = /duck/inear,
+ inear = \duck@bunny!50!white,
+ peakedcap/.code = \duck@peakedcaptrue
+ \def\duck@peakedcap{#1},
+ peaked cap/.forward to = /duck/peakedcap,
+ peakedcap/.default = blue,
+ tophat/.code = \duck@tophattrue
+ \def\duck@tophat{#1},
+ top hat/.forward to = /duck/tophat,
+ tophat/.default = black,
+ darthvader/.code = \duck@darthvadertrue
+ \def\duck@darthvader{#1},
+ darth vader/.forward to = /duck/darthvader,
+ darthvader/.default = black,
+ harlequin/.code = \duck@harlequintrue
+ \def\duck@harlequin{#1},
+ harlequin/.default = blue,
+ niuqelrah/.code = \def\duck@niuqelrah{#1},
+ niuqelrah = red,
+ strawhat/.code = \duck@strawhattrue
+ \def\duck@strawhat{#1},
+ straw hat/.forward to = /duck/strawhat,
+ strawhat/.default = gray!30!white,
+ ribbon/.code = \def\duck@ribbon{#1},
+ ribbon = black,
+ helmet/.code = \duck@helmettrue
+ \def\duck@helmet{#1},
+ helmet/.default = gray,
+ devil/.code = \duck@deviltrue
+ \def\duck@devil{#1},
+ devil/.default = red,
+ viking/.code = \duck@vikingtrue
+ \def\duck@viking{#1}
+ \duck@deviltrue
+ \def\duck@devil{brown!20!white},
+ viking/.default = gray,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Accessories
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ glasses/.code = \duck@glassestrue
+ \def\duck@glasses{#1},
+ glasses/.default = black,
+ sunglasses/.code = \duck@sunglassestrue
+ \def\duck@sunglasses{#1},
+ sunglasses/.default = black,
+ squareglasses/.code = \duck@squareglassestrue
+ \def\duck@squareglasses{#1},
+ square glasses/.forward to = /duck/squareglasses,
+ squareglasses/.default = black,
+ icecream/.code = \duck@icecreamtrue
+ \def\duck@cone{#1},
+ ice cream/.forward to = /duck/icecream,
+ icecream/.default = brown!60!gray,
+ flavoura/.code = \def\duck@flavoura{#1},
+ flavour a/.forward to = /duck/flavoura,
+ flavoura = brown!50!black,
+ flavourb/.code = \def\duck@flavourb{#1},
+ flavour b/.forward to = /duck/flavourb,
+ flavourb = white!70!brown,
+ flavourc/.code = \def\duck@flavourc{#1},
+ flavour c/.forward to = /duck/flavourc,
+ flavourc = red!50!white,
+ book/.code = \duck@booktrue
+ \def\duck@book{#1},
+ bookcolour/.code = \def\duck@bookcolour{#1},
+ book colour/.forward to = /duck/bookcolour,
+ book color/.forward to = /duck/bookcolour,
+ bookcolor/.forward to = /duck/bookcolour,
+ bookcolour = brown,
+ signpost/.code = \duck@signposttrue
+ \def\duck@signpost{#1},
+ sign post/.forward to = /duck/signpost,
+ signcolour/.code = \def\duck@signcolour{#1},
+ sign colour/.forward to = /duck/signcolour,
+ sign color/.forward to = /duck/signcolour,
+ signcolor/.forward to = /duck/signcolour,
+ signcolour = brown!50!black,
+ signback/.code = \def\duck@signback{#1},
+ sign back/.forward to = /duck/signback,
+ signback = green!40!black,
+ magicwand/.code = \duck@magicwandtrue,
+ magic want/.forward to = /duck/magicwand,
+ cricket/.code = \duck@crickettrue
+ \def\duck@cricket{#1},
+ cricket/.default = brown,
+ rollingpin/.code = \duck@rollingpintrue
+ \def\duck@rollingpin{#1},
+ rolling pin/.forward to = /duck/rollingpin,
+ rollingpin/.default = brown,
+ lightsaber/.code = \duck@lightsabertrue
+ \def\duck@lightsaber{#1},
+ light saber/.forward to = /duck/lightsaber,
+ lightsaber/.default = green,
+ cake/.code = \duck@caketrue
+ \def\duck@cake{#1},
+ cake/.default = violet,
+ pizza/.code = \duck@pizzatrue,
+ hockey/.code = \duck@hockeytrue
+ \def\duck@hockey{#1},
+ hockey/.default = brown,
+ baguette/.code = \duck@baguettetrue
+ \def\duck@baguette{#1},
+ baguette/.default = brown,
+ football/.code = \duck@footballtrue
+ \def\duck@football{#1},
+ football/.default = white,
+ mask/.code = \duck@masktrue
+ \def\duck@mask{#1},
+ mask/.default = black,
+ necklace/.code = \duck@necklacetrue
+ \def\duck@necklace{#1},
+ necklace/.default = white!80!gray,
+ milkshake/.code = \duck@milkshaketrue
+ \def\duck@milkshake{#1},
+ milkshake/.default = red!20!white,
+ wine/.code = \duck@winetrue
+ \def\duck@wine{#1},
+ wine/.default = red!70!black,
+ prison/.code = \duck@prisontrue
+ \def\duck@prison{#1},
+ prison/.default = gray,
+ speech/.code = \duck@speechtrue
+ \def\duck@speech{#1},
+ think/.code = \duck@thinktrue
+ \def\duck@think{#1},
+ bubblecolour/.code = \def\duck@bubblecolour{#1},
+ bubble colour/.forward to = /duck/bubblecolour,
+ bubble color/.forward to = /duck/bubblecolour,
+ bubblecolor/.forward to = /duck/bubblecolour,
+ bubblecolour = gray!30!white,
+ torch/.code = \duck@torchtrue
+ \def\duck@torch{#1},
+ torch/.default = gray,
+ basket/.code = \duck@baskettrue
+ \def\duck@basket{#1},
+ basket/.default = brown!70!gray,
+ easter/.code = \duck@eastertrue
+ \duck@baskettrue
+ \def\duck@basket{#1},
+ easter/.default = brown!70!gray,
+ egga/.code = \def\duck@egga{#1},
+ egg a/.forward to = /duck/egga,
+ egga = blue,
+ eggb/.code = \def\duck@eggb{#1},
+ egg b/.forward to = /duck/eggb,
+ eggb = green,
+ eggc/.code = \def\duck@eggc{#1},
+ egg c/.forward to = /duck/eggc,
+ eggc = red,
+ buttons/.code = \duck@buttonstrue
+ \def\duck@buttons{#1},
+ buttons/.default = black,
+ sheep/.code = \duck@sheeptrue
+ \def\duck@sheep{#1},
+ sheep/.default = \duck@body,
+ horsetail/.code = \duck@horsetailtrue
+ \def\duck@horsetail{#1},
+ horsetail/.default = brown,
+ crozier/.code = \duck@croziertrue
+ \def\duck@crozier{#1},
+ crozier/.default = brown,
+ davidlikespineapplepizza/.code = \duck@davidlikespineapplepizzatrue
+ \duck@speechtrue
+ \def\duck@speech{\scalebox{\scalingfactor}{\scalebox{0.9}{\tiny ih, che schifo!}}},
+ david likes pineapple pizza/.forward to = /duck/davidlikespineapplepizza,
+ wing/.code = \duck@wingtrue
+ \def\duck@wing{#1},
+ wing/.default = yellow!50!brown,
+ stethoscope/.code = \duck@stethoscopetrue
+ \def\duck@stethoscope{#1},
+ stethoscope/.default = gray,
+ neckerchief/.code = \duck@neckerchieftrue
+ \def\duck@neckerchief{#1},
+ neckerchief/.default = brown,
+ woggle/.code = \def\duck@woggle{#1},
+ woggle = brown!50!black,
+ snowduck/.code = \duck@snowducktrue
+ \def\duck@snowduck{#1}
+ \def\duck@eye{#1}
+ \def\duck@body{#1}
+ \duck@tophattrue
+ \def\duck@tophat{black}
+ \duck@buttonstrue
+ \def\duck@buttons{black},
+ snow duck/.forward to = /duck/snowduck,
+ snowduck/.default = gray!15!white,
+ vampire/.code = \duck@vampiretrue
+ \def\duck@vampire{#1},
+ vampire/.default = white!85!yellow,
+ crystalball/.code = \duck@crystalballtrue
+ \def\duck@crystalball{#1},
+ crystal ball/.forward to = /duck/crystalball,
+ crystalball/.default = cyan,
+ cheese/.code = \duck@cheesetrue
+ \def\duck@cheese{#1},
+ cheese/.default = orange,
+ shovel/.code = \duck@shoveltrue
+ \def\duck@shovel{#1},
+ shovel/.default = gray,
+ pickaxe/.code = \duck@pickaxetrue
+ \def\duck@pickaxe{#1},
+ pickaxe/.default = gray,
+ umbrella/.code = \duck@umbrellatrue
+ \def\duck@umbrella{#1},
+ umbrella/.default = cyan,
+ umbrellaclosed/.code = \duck@umbrellaclosedtrue
+ \def\duck@umbrellaclosed{#1},
+ umbrellaclosed/.default = cyan,
+ umbrella closed/.forward to = /duck/umbrellaclosed,
+ handbag/.code = \duck@handbagtrue
+ \def\duck@handbag{#1},
+ handbag/.default = red!70!black,
+ cocktail/.code = \duck@cocktailtrue,
+}
+
+\def\duck@draw{
+%\begin{scope}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@invisible
+\else
+ \path (0.1,0.1) rectangle (2.1,2.12);
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% defining some coordinates
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@name
+ \coordinate (\duck@name-wing) at (0.8,0.7);
+ \coordinate (\duck@name-head) at (0.9,2);
+ \coordinate (\duck@name-bill) at (0.5,1.3);
+ \coordinate (\duck@name-tail) at (1.82,1.41);
+\fi
+\coordinate (wing) at (0.8,0.7);
+\coordinate (head) at (0.9,2);
+\coordinate (bill) at (0.5,1.3);
+\coordinate (tail) at (1.82,1.41);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Environment
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{pgfonlayer}{backgroundlayer}
+%
+% water %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@water
+ \fill[\duck@water, even odd rule] (1.00,0.40) ellipse (0.88 and 0.35) (1.00,0.40) ellipse (0.75 and 0.25);
+ \fill[\duck@water, even odd rule] (1.00,0.40) ellipse (1.05 and 0.50) (1.00,0.40) ellipse (0.95 and 0.42);
+ \fill[\duck@water, even odd rule] (1.00,0.40) ellipse (1.23 and 0.63) (1.00,0.40) ellipse (1.17 and 0.57);
+ \fill[\duck@water, even odd rule] (1.00,0.40) ellipse (1.42 and 0.77) (1.00,0.40) ellipse (1.38 and 0.73);
+\fi
+%
+% sheep %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@sheep
+ \fill[\duck@sheep] (0.65,1.95) circle (0.15) (0.5,1.75) circle (0.15) (0.46,1.51) circle (0.15) (0.37,1.) circle (0.15) (0.23,0.8) circle (0.15) (0.2,0.6) circle (0.15) (0.25,0.45) circle (0.15) (0.35,0.30) circle (0.15) (0.55,0.25) circle (0.15) (0.75,0.2) circle (0.15) (0.95,0.16) circle (0.15) (1.15,0.2) circle (0.15) (1.35,0.23) circle (0.15) (1.55,0.3) circle (0.15) (1.75,0.38) circle (0.15) (1.95,0.5) circle (0.15) (2.05,0.65) circle (0.15) (2.1,0.85) circle (0.15) (2.05,1.0) circle (0.15) (2.0,1.15) circle (0.15) (1.85,1.35) circle (0.15) (1.6,1.25) circle (0.15) (1.35,1.25) circle (0.15) (1.3,1.5) circle (0.15) (1.3,1.7) circle (0.15) (1.2,1.9) circle (0.15) (0.85,2.05) circle (0.15) (1.05,2.0) circle (0.15);
+\fi
+%
+% devil (back horn) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@devil
+ \fill[\duck@devil] (0.7723,2.3756) .. controls (0.6369,2.1184) and (0.7916,2.0228) .. (0.8360,1.9897) .. controls (0.8744,1.9675) and (0.8774,1.9511) .. (0.8853,1.9173) .. controls (0.8853,1.8595) and (0.8407,1.8127) .. (0.7856,1.8127) .. controls (0.7535,1.8178) and (0.7240,1.8231) .. (0.6965,1.8545) .. controls (0.6965,1.8545) and (0.4451,2.2259) .. (0.7723,2.3756) -- cycle;
+\fi
+%
+%\end{pgfonlayer}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% body parts
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{pgfonlayer}{bodylayer}
+\ifduck@invisible
+\else
+%
+% body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{pgfinterruptboundingbox}
+ \fill[\duck@body] \duckpathbody;
+\end{pgfinterruptboundingbox}
+%
+% head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifdefined\duck@head\else\let\duck@head=\duck@body\fi
+\fill[\duck@head]
+ (0.90,1.50) ellipse (0.50 and 0.625);
+%
+% bill %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@grumpy
+ \fill[\duck@bill] \duckpathgrumpybill;
+\else
+ \ifduck@laughing
+ \fill[\duck@bill!80!black] (0.40,1.20) .. controls (0.54,1.36) and (0.65,1.31) .. (0.91,1.37) .. controls (0.45,1.06) and (0.36,1.18) .. (0.40,1.20) -- cycle;
+ \fill[\duck@bill]
+ (0.41,1.47) .. controls (0.64,1.53) and (0.54,1.30) ..
+ (0.91,1.37) .. controls (-0.02,1.10) and (0.28,1.37) ..
+ (0.41,1.47) -- cycle;
+ \else
+ \ifduck@parrot
+ \fill[\duck@bill!80!black]
+ (0.40,1.45) .. controls (0.51,1.48) and (0.54,1.44) .. (0.59,1.39) .. controls (0.63,1.34) and (0.69,1.34) .. (0.86,1.35) .. controls (0.43,1.15) and (0.37,1.13) .. (0.34,1.20) .. controls (0.52,1.27) and (0.34,1.40) .. (0.40,1.45) -- cycle;
+ \fill[\duck@bill]
+ (0.39,1.49) .. controls (0.50,1.52) and (0.54,1.44) .. (0.59,1.39) .. controls (0.63,1.34) and (0.68,1.34) .. (0.86,1.35) .. controls (0.43,1.15) and (0.54,1.40) .. (0.22,1.20) .. controls (0.24,1.52) and (0.39,1.49) .. (0.39,1.49) -- cycle;
+ \else
+ \fill[\duck@bill] \duckpathbill;
+ \fi
+ \fi
+\fi
+%
+% Superhero mask %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% has to be behind the eyes
+\ifduck@mask
+ \begin{scope}
+ \clip (0.90,1.50) ellipse (0.50 and 0.625);
+ \fill[\duck@mask,rotate=-15] (-0.1,1.59) rectangle (1.3,1.88);
+ \end{scope}
+\fi%
+%
+% right eye %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\duck@eye, rotate=-20]
+ (0.23,1.7675) ellipse (0.0893 and 0.125);
+\fill[\duck@pupil, rotate=-20]
+ (0.26,1.7575) ellipse (0.0357 and 0.0714);
+%
+% left eye %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\duck@eye, rotate=-20]
+ (-0.06,1.74) ellipse (0.0786 and 0.1143);
+\fill[\duck@pupil, rotate=-20]
+ (-0.03,1.73) ellipse (0.0286 and 0.0643);
+%
+\fi % from no duck
+%\end{pgfonlayer}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% clothing
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{pgfonlayer}{clothinglayer}
+%
+% tshirt %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@tshirt
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@tshirt] \duckpathtshirt;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% tie %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@tie
+ \fill[\duck@tie,rotate=-12] (0.32,0.7) rectangle (0.43,1.15);
+\fi
+%
+% jacket %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@jacket
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@jacket] \duckpathjacket;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% bowtie %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@bowtie
+ \fill[\duck@bowtie] (0.4382, 1.1105) .. controls (0.3984, 1.0671) and (0.3911, 0.9535) .. (0.4116, 0.9176) .. controls (0.4958, 0.9064) and (0.565, 0.9487) .. (0.565, 0.9487) -- (0.6448, 0.9398) .. controls (0.6448, 0.9398) and (0.6777, 0.8844) .. (0.804, 0.8689) .. controls (0.8323, 0.9056) and (0.8422, 1.0026) .. (0.8284, 1.0551) .. controls (0.7881, 1.0942) and (0.6537, 1.0285) .. (0.6537, 1.0285) -- (0.5739, 1.0374) .. controls (0.5739, 1.0374) and (0.5436, 1.0956) .. (0.4382, 1.1105) -- cycle;
+\fi
+%
+% lapel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@lapel
+ \fill[\duck@lapel] (0.490,1.145) .. controls (0.3984,1.13) and (0.3515,1.08) .. (0.3515,1.08) -- (0.4265,1.0192) -- (0.35,0.98) -- (0.513,0.700) -- (1.0089,0.9162) -- (0.9547,0.9868) -- (1.1194,0.9782) -- (1.0822,1.135) .. controls (0.9616,1.1) and (0.8648,1.0300) .. (0.513,0.700) -- cycle;
+\fi
+%
+% stripes for football jersey %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@stripes
+ \duck@stripes
+\fi
+%
+% superhero cape %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@cape
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@cape] \duckpathcape;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% necklace (not really clothing, but needs to be below the hair) %%%%%
+\ifduck@necklace
+ \fill[\duck@necklace] (0.5000,1.112) circle (0.032) (0.5100,1.050) circle (0.032) (0.5200,0.990) circle (0.032) (0.5400,0.931) circle (0.032) (0.5825,0.885) circle (0.032) (0.6450,0.885) circle (0.032) (0.7000,0.910) circle (0.032) (0.7500,0.945) circle (0.032) (0.8000,0.980) circle (0.032) (0.8500,1.020) circle (0.032) (0.9000,1.050) circle (0.032) (0.9500,1.080) circle (0.032) (1.0000,1.110) circle (0.032) (1.0550,1.130) circle (0.032) (1.1100,1.150) circle (0.032) (1.1650,1.165) circle (0.032) (1.2200,1.180) circle (0.032) (1.2750,1.195) circle (0.032) (1.3300,1.210) circle (0.032);
+\fi
+%
+% Scout neckerchief %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@neckerchief
+ \fill[\duck@neckerchief]
+ (0.3650,1.0892) .. controls (0.4127,1.1589) and (0.4900,1.1450) .. (0.4900,1.1450) .. controls (0.6500,0.9300) and (1.1366,1.2400) .. (1.3675,1.2649) .. controls (1.4131,1.2533) and (1.4052,1.2446) .. (1.4099,1.2124) .. controls (1.3028,1.0810) and (0.7415,0.8930) .. (0.6807,0.9076) .. controls (0.8257,0.7387) and (0.6347,0.7168) .. (0.7151,0.4426) .. controls (0.6059,0.5672) and (0.5513,0.6588) .. (0.5938,0.8388) .. controls (0.5871,0.6953) and (0.4493,0.7565) .. (0.4716,0.4967) .. controls (0.3682,0.6697) and (0.3820,0.7984) .. (0.5321,0.9351) .. controls (0.4635,0.9699) and (0.4115,1.0215) .. (0.3650,1.0892) -- cycle;
+ \fill[\duck@woggle, rounded corners=\scalingfactor*1, rotate=-10] (0.33,1.05) rectangle (0.55,0.98);
+\fi
+%
+% buttons (same argument as for the necklace)
+\ifduck@buttons
+ \ifduck@jacket
+ \fill[\duck@buttons] (0.49,0.6) circle (0.05) (0.46,0.45) circle (0.05) (0.45,0.3) circle (0.05);
+ \else
+ \fill[\duck@buttons] (0.53,0.75) circle (0.05) (0.5,0.6) circle (0.05) (0.47,0.45) circle (0.05);
+ \fi
+\fi
+%
+%\end{pgfonlayer}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% hair styles
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{pgfonlayer}{hairlayer}
+%
+% short hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@shorthair
+ \path (0.1,0.1) rectangle (2.1,2.25);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@hair] \duckpathshorthair;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% long hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@longhair
+ \path (0.1,0.1) rectangle (2.1,2.25);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@hair] \duckpathlonghair;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% crazy hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@crazyhair
+ \path (0.1,0.1) rectangle (2.1,2.4);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@hair] \duckpathcrazyhair;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% receding hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@recedinghair
+ \path (0.1,0.1) rectangle (2.1,2.18);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@hair] \duckpathrecedinghair;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% mohican hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@mohican
+ \path (0.1,0.1) rectangle (2.1,2.24);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@hair] \duckpathmohican;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% mullet hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@mullet
+ \path (0.1,0.1) rectangle (2.1,2.17);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@hair] \duckpathmullet;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% middle parting %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@parting
+ \path (0.1,0.1) rectangle (2.1,2.22);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@hair] (1.4053,1.5403) .. controls (1.5524,2.2939) and (0.3739,2.5180) .. (0.4084,1.6117) .. controls (0.4248,1.8921) and (0.7860,1.9734) .. (0.7860,1.9734) .. controls (1.1125,1.5754) and (1.3375,1.4715) .. (1.4053,1.5403) -- cycle;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% eye brow %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfkeys{/duck/eyebrow/.@def/.get=\duck@test}
+\ifx\duck@eyebrow\duck@test
+ \ifdefined\duck@hair\let\duck@eyebrow=\duck@hair\fi
+\fi%
+\ifduck@eyebrow
+ \fill[\duck@eyebrow, rounded corners=\scalingfactor*1, rotate=60] (1.92,0.21) rectangle (1.98,-0.01);
+ \fill[\duck@eyebrow, rounded corners=\scalingfactor*1, rotate=100] (1.67,-0.77) rectangle (1.73,-0.95);
+\fi
+%
+% beard %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfkeys{/duck/beard/.@def/.get=\duck@test}
+\ifx\duck@beard\duck@test
+ \ifdefined\duck@hair\let\duck@beard=\duck@hair\fi
+\fi%
+\ifduck@beard
+ \fill[\duck@beard] (1.3,1.3) circle (0.12) (1.2,1.15) circle (0.12) (0.5,1.05) circle (0.1) (0.525,0.90) circle (0.12) (0.525,0.75) circle (0.12) (0.65,0.65) circle (0.14) (0.75,0.75) circle (0.12) (0.85,0.85) circle (0.12) (0.95,0.95) circle (0.12) (1.05,1.05) circle (0.12) (1.15,1.25) circle (0.12) (1,1.20) circle (0.12) (0.85,1.20) circle (0.12) (0.75,1.15) circle (0.12) (0.65,1.10) circle (0.12) (0.58,1.07) circle (0.12) (0.44,1.46) circle (0.06) (0.52,1.45) circle (0.06) (0.6, 1.41) circle (0.06) (0.68,1.36) circle (0.06) (0.76,1.34) circle (0.06) (0.86,1.26) circle (0.12) (0.38,1.44) circle (0.03) (1,1.28) circle (0.12);
+ \fill[\duck@beard] (1.3,1.3) -- (0.5,1.05) -- (0.65,0.65) -- cycle;
+\fi%
+%
+%\end{pgfonlayer}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Headgear
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{pgfonlayer}{hatlayer}
+%
+% alien %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@alien
+ \fill[\duck@alien,rotate=-25] (0.09,2.1) rectangle (0.16,2.6);
+ \fill[\duck@alien,rotate=5] (0.79,1.86) rectangle (0.86,2.25);
+ \fill[\duck@alien] (1.20,2.30) circle (0.07);
+ \fill[\duck@alien] (0.62,2.35) circle (0.07);
+\fi
+%
+% hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@hat
+ \ifdefined\duck@hair % with hair
+ \fill[\duck@hat,rotate=-15] (0.44,2.1) ellipse (0.7 and 0.1);
+ \fill[\duck@hat,rotate=-15] (0.0,2.1) rectangle (0.88,2.4);
+ \fill[\duck@hat,rotate=-15] (0.44,2.4) ellipse (0.44 and 0.08);
+ \else % without hair
+ \fill[\duck@hat,rotate=-15] (0.44,2.1) ellipse (0.6 and 0.1);
+ \fill[\duck@hat,rotate=-15] (0.07,2.1) rectangle (0.81,2.4);
+ \fill[\duck@hat,rotate=-15] (0.44,2.4) ellipse (0.37 and 0.08);
+ \fi
+\fi
+%
+% cap %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@cap
+ \fill[\duck@cap, start angle=0, end angle=150, radius=0.5] (1.4,1.75) arc;
+ \fill[\duck@cap,rotate=-15] (0.3,2.05) ellipse (0.6 and 0.15);
+\fi
+%
+% Santa %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@santa
+ \fill[\duck@santa]
+ (0.430,1.803) .. controls (0.590,2.174) and (0.837,2.065) ..
+ (1.118,1.954) .. controls (1.679,1.731) and (1.328,1.193) ..
+ (1.647,1.057) .. controls (1.638,1.255) and (1.745,2.104) ..
+ (1.168,2.270) .. controls (0.867,2.356) and (0.536,2.280) ..
+ (0.430,1.803) -- cycle;
+ \fill[white!80!brown]
+ (0.44,1.733) .. controls (0.211,2.299) and (1.082,2.188) ..
+ (1.456,1.759) .. controls (1.534,1.637) and (1.480,1.545) ..
+ (1.400,1.566) .. controls (1.265,1.714) and (0.577,2.267) ..
+ (0.44,1.733) -- cycle;
+ \fill[white!80!brown] (1.6,1.0) circle (0.17);
+\fi
+%
+% Chef hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@chef
+ \fill[\duck@chef,rotate=-15] (0.44,2.1) ellipse (0.37 and 0.08);
+ \fill[\duck@chef,rotate=-15] (0.07,2.1) rectangle (0.81,2.55);
+ \fill[\duck@chef] (1.01,2.47) circle (0.17);
+ \fill[\duck@chef] (1.24,2.35) circle (0.15);
+ \fill[\duck@chef] (0.77,2.40) circle (0.12);
+ \fill[\duck@chef] (1.39,2.20) circle (0.12);
+\fi
+%
+% graduate hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@graduate
+ \fill[\duck@graduate,rotate=-15] (0.44,2.1) ellipse (0.37 and 0.1);
+ \fill[\duck@graduate,rotate=-15] (0.07,2.1) rectangle (0.81,2.3);
+ \fill[\duck@graduate] (0.3,2.25) -- (1.05,2.35) -- (1.7,1.95) -- (0.92,1.85) -- cycle;
+ \fill[\duck@tassel,rounded corners=\scalingfactor*1] (1.12,1.89) -- (1.01,2.1) -- (1.09,2.11) -- (1.2,1.9) -- (1.2,1.3) -- (1.12,1.3) -- cycle;
+ \fill[\duck@tassel] (1.16,1.3) ellipse (0.06 and 0.12);
+\fi
+%
+% beret %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@beret
+ \fill[\duck@beret,rotate=-25] (0.13,2.15) ellipse (0.5 and 0.17);
+ \fill[\duck@beret,rotate=-25] (0.13,2.25) ellipse (0.55 and 0.17);
+ \fill[\duck@beret,rotate=-25] (0.13,2.4) circle (0.08);
+\fi
+%
+% unicorn %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@unicorn
+ \fill[\duck@unicorn,rotate=25] (1.48,1.4375)--(1.60,1.9)--(1.72,1.4375);
+ \fill[\duck@body!100,rotate=25] (1.50,1.43)--(1.60,1.8375)--(1.70,1.43);
+\fi
+%
+% magic hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@magichat
+ \path[preaction={fill, \duck@magichat!100},rotate=-5,
+ pattern=fivepointed stars, pattern color=\duck@magicstars!100]
+ (0.36,1.95)--(0.86,2.95)--(1.20,1.85);
+\fi
+%
+% witch %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@witch
+ \fill[\duck@witch,rotate=-15] (0.44,2.13) ellipse (0.75 and 0.17);
+ \fill[\duck@witch,rotate=-15] (0.05,2.2)--(0.45,3.2)--(0.82,2.2);
+\fi
+%
+% crown %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@crown
+ \path (0.7,1.95) rectangle (1.4,2.45);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@crown] \duckpathcrown;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% Queen crown %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@queencrown
+ \fill[\duck@queencrown] \duckpathqueencrown;
+\fi
+%
+% King crown %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@kingcrown
+ \fill[\duck@kingcrown] \duckpathkingcrown;
+\fi
+%
+% Bunny ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@bunny
+ \path (0.55,1.9) rectangle (1.2,2.55);
+ \begin{pgfinterruptboundingbox}
+ \begin{scope}
+ \clip[rotate=-5] (0.68,2.38) ellipse (0.3 and 0.4);
+ \fill[\duck@bunny,rotate=-5] (1.06,2.2) ellipse (0.3 and 0.4) (0.28,2.26) ellipse (0.3 and 0.4);
+ \end{scope}
+
+ \begin{scope}
+ \clip[rotate=-5] (0.68,2.38) ellipse (0.25 and 0.35);
+ \fill[\duck@inear,rotate=-5] (1.06,2.2) ellipse (0.25 and 0.35) (0.28,2.26) ellipse (0.25 and 0.35);
+ \end{scope}
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% peaked cap %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@peakedcap
+ \fill[\duck@peakedcap,rotate=-15] (0.35,2.05) ellipse (0.5 and 0.15);
+ \fill[\duck@peakedcap,rotate=-25] (0.13,2.15) ellipse (0.5 and 0.17);
+ \fill[\duck@peakedcap,rotate=-35] (-0.25,2.2) ellipse (0.55 and 0.17);
+\fi
+%
+% tophat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@tophat
+ \fill[\duck@tophat,rotate=-15] (0.44,2.1) ellipse (0.48 and 0.1);
+ \fill[\duck@tophat,rotate=-15] (0.12,2.1) -- (0.75,2.1) -- (0.81,2.55) -- (0.07,2.55) -- cycle;
+ \fill[\duck@tophat,rotate=-15] (0.44,2.55) ellipse (0.37 and 0.08);
+\fi
+%
+% darth vader %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@darthvader
+ \path (0.1,0.1) rectangle (2.1,2.22);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@darthvader] \duckpathdarthvader;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% Harlequin duck %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@harlequin
+ \path (0.19,1.85) rectangle (1.85,2.67);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@harlequin] (0.6006,1.9719) .. controls (0.7432,1.8954) and (0.9320,1.8698) .. (0.9320,1.8698) -- (1.0404,2.3839) .. controls (0.9223,2.8873) and (0.1755,2.5634) .. (0.3019,2.2958) .. controls (0.5807,2.5024) and (0.7251,2.3376) .. (0.6006,1.9719) -- cycle;
+ \fill[\duck@niuqelrah] (1.2853,1.8902) .. controls (1.1177,1.8507) and (0.9278,1.8703) .. (0.9278,1.8703) -- (1.0404,2.3839) .. controls (1.3637,2.8347) and (1.9373,2.3532) .. (1.7049,2.1284) .. controls (1.5267,2.3895) and (1.3204,2.2666) .. (1.2853,1.8902) -- cycle;
+ \end{pgfinterruptboundingbox}
+ \fill[\duck@harlequin] (1.7,2.07) circle (0.1);
+ \fill[\duck@niuqelrah] (0.3,2.23) circle (0.1);
+\fi
+%
+% Straw hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@strawhat
+ \fill[\duck@strawhat,rotate=-15] (0.44,2.0) ellipse (0.75 and 0.1);
+ \fill[\duck@strawhat,rotate=-15] (0.1,2.05) rectangle (0.78,2.5);
+ \fill[\duck@strawhat,rotate=-15] (0.44,2.5) ellipse (0.34 and 0.08);
+ \fill[\duck@strawhat,rotate=-15] (-0.3,2.02) -- (1.18,2.02) -- (0.78,2.2) -- (0.1,2.2) -- cycle;
+ \fill[\duck@ribbon,rotate=-15] (0.44,2.2) ellipse (0.34 and 0.08);
+ \fill[\duck@ribbon,rotate=-15] (0.1,2.2) rectangle (0.78,2.3);
+ \fill[\duck@strawhat,rotate=-15] (0.44,2.3) ellipse (0.34 and 0.08);
+\fi
+%
+% helmet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@helmet
+ \fill[\duck@helmet] (1.4331,1.5155) .. controls (1.4365,1.7226) and (1.3866,2.0493) .. (1.0429,2.1279) .. controls (0.7050,2.2052) and (0.4794,1.9294) .. (0.4481,1.8183) .. controls (0.6062,1.8381) and (1.1506,1.7480) .. (1.4331,1.5155) -- cycle;
+ \fill[\duck@helmet!70!black] (1.0282,2.1360) .. controls (0.9395,2.1312) and (0.8696,2.0652) .. (0.8152,2.0010) .. controls (0.7824,1.9609) and (0.7546,1.9169) .. (0.7309,1.8709) .. controls (0.6510,1.8859) and (0.5703,1.8971) .. (0.4892,1.9024) .. controls (0.4595,1.8831) and (0.4114,1.7962) .. (0.4743,1.7961) .. controls (0.5446,1.7868) and (0.6149,1.7767) .. (0.6845,1.7629) .. controls (0.6647,1.7052) and (0.6469,1.6454) .. (0.6401,1.5851) -- (0.6583,1.5355) -- (0.7069,1.5673) .. controls (0.7193,1.6285) and (0.7363,1.6889) .. (0.7590,1.7471) .. controls (0.9991,1.6922) and (1.2114,1.6182) .. (1.4111,1.4722) .. controls (1.4369,1.4960) and (1.4536,1.5229) .. (1.4475,1.5553) .. controls (1.4417,1.5927) and (1.4030,1.6066) .. (1.3766,1.6276) .. controls (1.2054,1.7408) and (1.0085,1.8089) .. (0.8095,1.8546) .. controls (0.8733,1.9674) and (0.9684,2.0703) .. (1.0932,2.1138) .. controls (1.0751,2.1288) and (1.0515,2.1362) .. (1.0282,2.1360) -- cycle;
+ \fill[\duck@helmet!50!white] (0.502,1.845) circle (0.015) (0.586,1.835) circle (0.015) (0.684,1.822) circle (0.015) (0.791,1.799) circle (0.015) (0.899,1.770) circle (0.015) (1.003,1.741) circle (0.015) (1.099,1.706) circle (0.015) (1.185,1.673) circle (0.015) (1.276,1.629) circle (0.015) (1.360,1.581) circle (0.015) (0.676,1.606) circle (0.015) (0.695,1.666) circle (0.015) (0.714,1.729) circle (0.015) (0.784,1.889) circle (0.015) (0.835,1.968) circle (0.015) (0.896,2.034) circle (0.015) (0.957,2.081) circle (0.015) (1.020,2.115) circle (0.015) (1.422,1.535) circle (0.015) (0.502,1.845) circle (0.015);
+\fi
+%
+% Viking %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@viking
+ \fill[\duck@viking] (1.4331,1.5155) .. controls (1.4365,1.7226) and (1.3866,2.0493) .. (1.0429,2.1279) .. controls (0.7050,2.2052) and (0.4794,1.9294) .. (0.4481,1.8183) .. controls (0.6062,1.8381) and (1.1506,1.7480) .. (1.4331,1.5155) -- cycle;
+ \fill[\duck@viking!70!black] (1.0282,2.1360) .. controls (0.9395,2.1312) and (0.8696,2.0652) .. (0.8152,2.0010) .. controls (0.7824,1.9609) and (0.7546,1.9169) .. (0.7309,1.8709) .. controls (0.6510,1.8859) and (0.5703,1.8971) .. (0.4892,1.9024) .. controls (0.4595,1.8831) and (0.4114,1.7962) .. (0.4743,1.7961) .. controls (0.5446,1.7868) and (0.6149,1.7767) .. (0.6845,1.7629) .. controls (0.6845,1.7629) and (0.6845,1.7629) .. (0.7590,1.7471) .. controls (0.9991,1.6922) and (1.2114,1.6182) .. (1.4111,1.4722) .. controls (1.4369,1.4960) and (1.4536,1.5229) .. (1.4475,1.5553) .. controls (1.4417,1.5927) and (1.4030,1.6066) .. (1.3766,1.6276) .. controls (1.2054,1.7408) and (1.0085,1.8089) .. (0.8095,1.8546) .. controls (0.8733,1.9674) and (0.9684,2.0703) .. (1.0932,2.1138) .. controls (1.0751,2.1288) and (1.0515,2.1362) .. (1.0282,2.1360) -- cycle;
+ \fill[\duck@viking!50!white] (0.502,1.845) circle (0.015) (0.586,1.835) circle (0.015) (0.684,1.822) circle (0.015) (0.791,1.799) circle (0.015) (0.899,1.770) circle (0.015) (1.003,1.741) circle (0.015) (1.099,1.706) circle (0.015) (1.185,1.673) circle (0.015) (1.276,1.629) circle (0.015) (1.360,1.581) circle (0.015) (0.784,1.889) circle (0.015) (0.835,1.968) circle (0.015) (0.896,2.034) circle (0.015) (0.957,2.081) circle (0.015) (1.020,2.115) circle (0.015) (1.422,1.535) circle (0.015);
+\fi
+%
+% devil (front horn) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@devil
+ \fill[\duck@devil] (1.2185,2.3521) .. controls (1.3540,2.0950) and (1.1993,1.9994) .. (1.1548,1.9663) .. controls (1.1165,1.9441) and (1.1134,1.9277) .. (1.1056,1.8938) .. controls (1.1056,1.8361) and (1.1502,1.7893) .. (1.2052,1.7893) .. controls (1.2373,1.7944) and (1.2669,1.7996) .. (1.2944,1.8311) .. controls (1.2944,1.8311) and (1.5458,2.2025) .. (1.2185,2.3521) -- cycle;
+\fi
+%
+%\end{pgfonlayer}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Accessories
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% sunglasses %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@sunglasses
+ \fill[\duck@sunglasses,rotate=-17] (0.42,1.8) rectangle (0.8,1.84);
+ \fill[\duck@sunglasses,rotate=-17] (0.12,1.8) rectangle (0.22,1.84);
+ \fill[\duck@sunglasses,rotate=-20] (0.23,1.7675) circle (0.14);
+ \fill[\duck@sunglasses,rotate=-20] (-0.06,1.74) circle (0.13);
+\fi
+%
+% glasses %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@glasses
+ \fill[\duck@glasses,rotate=-17] (0.42,1.8) rectangle (0.8,1.84);
+ \fill[\duck@glasses,rotate=-17] (0.12,1.8) rectangle (0.22,1.84);
+ \fill[\duck@glasses,rotate=-20,even odd rule] (0.23,1.7675) circle (0.14) (0.23,1.7675) circle (0.11);
+ \fill[\duck@glasses,rotate=-20,even odd rule] (-0.06,1.74) circle (0.13) (-0.06,1.74) circle (0.095);
+\fi
+%
+% square glasses
+\ifduck@squareglasses
+ \fill[\duck@squareglasses,rotate=-17] (0.43,1.8) rectangle (0.8,1.84);
+ \fill[\duck@squareglasses,rotate=-17] (0.12,1.8) rectangle (0.22,1.84);
+ \fill[\duck@squareglasses,rotate=-20,rounded corners=\scalingfactor*2,even odd rule] (-0.16,1.62) -- (-0.18,1.85) -- (0.05,1.87) -- (0.04,1.62) -- cycle [rounded corners=\scalingfactor*1.5] (-0.14,1.64) -- (-0.16,1.83) -- (0.03,1.85) -- (0.02,1.64) -- cycle;
+ \fill[\duck@squareglasses,rotate=-20,rounded corners=\scalingfactor*2,even odd rule] (0.12,1.63) -- (0.10,1.88) -- (0.36,1.90) -- (0.35,1.65) -- cycle [rounded corners=\scalingfactor*1.5] (0.14,1.65) -- (0.12,1.86) -- (0.34,1.88) -- (0.33,1.67) -- cycle;
+\fi
+%
+% icecream %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@icecream
+ \fill[\duck@cone,rotate=-20] (0.35,1.20)--(0.50,0.60)--(0.75,1.20);
+ \fill[\duck@flavoura] (0.85,1.03) circle (0.12);
+ \fill[\duck@flavourb] (1.05,0.95) circle (0.12);
+ \fill[\duck@flavourc] (0.95,1.1) circle (0.12);
+\fi
+%
+% book %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@book
+ \fill[\duck@bookcolour,rotate=-20]
+ (0.40,1.20) rectangle (0.80,0.60);
+ \node[rotate=-20*\yscalefactor/\xscalefactor, color=white] at (0.88,0.70) {\duck@book};%
+\fi
+%
+% signpost %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@signpost
+ \fill[\duck@signcolour, rounded corners=\scalingfactor*1, rotate=-20] (0.8,0.75) rectangle (0.9,1.75);
+ \fill[\duck@signcolour, rounded corners=\scalingfactor*1, rotate=-20] (0.4,1.7) rectangle (1.3,2.4);
+ \fill[\duck@signback, rounded corners=\scalingfactor*1, rotate=-20] (0.45,1.75) rectangle (1.25,2.35);
+ \node[rotate=-20*\yscalefactor/\xscalefactor, color=white] at (1.5,1.65) {\duck@signpost};
+\fi
+%
+% speech bubble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@speech
+ \fill[\duck@bubblecolour] (-0.5,1.8) ellipse (0.7 and 0.3);
+ \fill[\duck@bubblecolour] (-0.2,1.54) -- (0.2,1.35) -- (0.0,1.6) -- cycle;
+ \node at (-0.5,1.8) {\duck@speech};
+\fi
+%
+% think bubble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@think
+ \fill[\duck@bubblecolour] (2,2.4) ellipse (0.7 and 0.35);
+ \fill[\duck@bubblecolour] (1.55,2.35) circle (0.25) (2.0,2.15) circle (0.25) (2.4,2.25) circle (0.25) (1.6,2.55) circle (0.25) (2.0,2.6) circle (0.25) (2.35,2.5) circle (0.25) (1.65,1.95) circle (0.1) (1.55,1.80) circle (0.06) (1.47,1.70) circle (0.03);
+ \node at (2,2.4) {\duck@think};
+\fi
+%
+% magic wand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@magicwand
+ \fill[black,rotate=-30] (0.27,1.23) rectangle (0.37,0.65);
+ \fill[white,rotate=-30] (0.27,1.13) rectangle (0.37,1.03);
+\fi
+%
+% cricket bat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@cricket
+ \fill[\duck@cricket, rounded corners=\scalingfactor*2, rotate=-30] (0.4,1.2) rectangle (0.7,2.2);
+ \fill[\duck@cricket, rounded corners=\scalingfactor*1, rotate=-30] (0.5,0.8) rectangle (0.6,1.3);
+\fi
+%
+% rollingpin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@rollingpin
+ \fill[\duck@rollingpin, rounded corners=\scalingfactor*2, rotate=-60] (-0.18,0.85) rectangle (0.08,1.75);
+ \fill[\duck@rollingpin, rounded corners=\scalingfactor*1, rotate=-60] (-0.1,0.65) rectangle (0.0,1.95);
+\fi
+%
+% lightsaber %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@lightsaber
+ \fill[\duck@lightsaber, rounded corners=\scalingfactor*1, rotate=-30] (0.5,0.9) rectangle (0.6,2.5);
+ \fill[gray!80!black, rounded corners=\scalingfactor*1, rotate=-30] (0.47,0.7) rectangle (0.63,1.2);
+\fi
+%
+% cake %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@cake
+ \fill[\duck@cake] (1.00,0.50) ellipse (0.4 and 0.2);
+ \fill[\duck@cake] (0.6,0.5) rectangle (1.4,0.7);
+ \fill[\duck@cake] (1.00,0.70) ellipse (0.4 and 0.2);
+ \fill[\duck@cake!50!white] (0.75,0.75) rectangle (0.8,0.95);
+ \fill[\duck@cake!50!white] (1.2,0.75) rectangle (1.25,0.95);
+ \fill[\duck@cake!50!white] (0.975,0.65) rectangle (1.025,0.85);
+ \fill[white!85!yellow] (1.0,0.93) ellipse (0.03 and 0.06);
+ \fill[white!85!yellow] (1.225,1.03) ellipse (0.03 and 0.06);
+ \fill[white!85!yellow] (0.775,1.03) ellipse (0.03 and 0.06);
+\fi
+%
+% pizza %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@pizza
+ \fill[brown] (1.00,0.60) ellipse (0.4 and 0.2);
+ \fill[red!70!black] (1.00,0.60) ellipse (0.34 and 0.16);
+ \fill[white!85!yellow] (1.15,0.65) ellipse (0.065 and 0.04);
+ \fill[white!85!yellow] (0.81,0.57) ellipse (0.065 and 0.04);
+ \fill[white!85!yellow] (0.95,0.68) ellipse (0.065 and 0.04);
+ \fill[white!85!yellow] (1.02,0.54) ellipse (0.065 and 0.04);
+ \fill[green!40!brown] (1.09,0.54) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=20] (1.0,0.34) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=-20] (0.9,1.05) ellipse (0.07 and 0.02);
+ \fill[green!40!brown] (1.00,0.60) ellipse (0.03 and 0.06);
+\fi
+% no pizza %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@davidlikespineapplepizza
+ \fill[brown] (1.00,0.60) ellipse (0.4 and 0.2);
+ \fill[red!70!black] (1.00,0.60) ellipse (0.34 and 0.16);
+ \fill[yellow!70!brown] (1.15,0.65) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (1.15,0.65) ellipse (0.04 and 0.03);
+ \fill[yellow!70!brown] (0.81,0.57) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (0.81,0.57) ellipse (0.04 and 0.03);
+ \fill[yellow!70!brown] (0.95,0.68) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (0.95,0.68) ellipse (0.04 and 0.03);
+ \fill[yellow!70!brown] (1.02,0.54) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (1.02,0.54) ellipse (0.04 and 0.03);
+ \fill[green!40!brown] (1.09,0.54) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=20] (1.0,0.34) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=-20] (0.9,1.05) ellipse (0.07 and 0.02);
+ \fill[green!40!brown] (1.00,0.60) ellipse (0.03 and 0.06);
+\fi
+%
+%
+%
+% Hockey stick %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@hockey
+ \fill[\duck@hockey, rounded corners=\scalingfactor*1, rotate=-30] (0.5,0.6) rectangle (0.6,2.1);
+ \fill[\duck@hockey, rounded corners=\scalingfactor*3] (0.2,0.2) rectangle (0.85,0.4);
+\fi
+%
+% baguette %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@baguette
+ \fill[\duck@baguette!70!white, rounded corners=\scalingfactor*4, rotate=-30] (0.4,0.72) rectangle (0.7,2.0);
+ \fill[\duck@baguette!80!black, rotate=5] (1.44,1.1) ellipse (0.1 and 0.03) (1.30,0.9) ellipse (0.1 and 0.03) (1.16,0.7) ellipse (0.1 and 0.03) (1.02,0.5) ellipse (0.1 and 0.03);
+\fi
+%
+% football %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@football
+ \fill[\duck@football] (1.2,0.33) circle (0.32);
+ \begin{scope}
+ \clip (1.2,0.33) circle (0.32);
+ \fill[black] (1.06,0.30) -- (1.01,0.17) -- (1.14,0.08) -- (1.26,0.14) -- (1.20,0.28) -- cycle (1.37,0.14) -- (1.46,0.27) -- (1.59,0.27) -- (1.41,0.04) -- cycle (1.28,0.38) -- (1.22,0.52) -- (1.33,0.61) -- (1.45,0.51) -- (1.43,0.37) -- cycle (0.87,0.44) -- (1.02,0.40) -- (1.10,0.53) -- (1.07,0.62) -- (0.94,0.57) -- cycle;
+ \end{scope}
+\fi
+%
+% milkshake %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@milkshake
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.55) ellipse (0.12 and 0.03);
+ \begin{scope}
+ \clip[rotate=-10] (0.58,0.5) rectangle (1.02,1.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.94) ellipse (0.18 and 0.4);
+ \fill[\duck@milkshake, rotate=-10] (0.8,0.94) ellipse (0.15 and 0.36);
+ \end{scope}
+ \fill[white!85!yellow] (0.83,0.92) circle (0.05) (0.88,0.9) circle (0.05) (0.93,0.92) circle (0.05) (0.99,0.91) circle (0.05) (1.06,0.86) circle (0.05) (1.13,0.87) circle (0.05) (0.85,0.99) circle (0.05) (0.9,0.98) circle (0.07) (1.0,0.98) circle (0.07) (1.1,0.95) circle (0.07);
+ \fill[red!90!black] (1.0,1.1) circle (0.05);
+ \fill[white!85!yellow] (0.94,1.05) circle (0.05) (1.03,1.03) circle (0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[red!90!black,rotate=20] (1.2,0.58) rectangle (1.22,0.85);
+\fi
+%
+% wine %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@wine
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.55) ellipse (0.12 and 0.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.7) ellipse (0.03 and 0.2);
+ \begin{scope}
+ \clip[rotate=-10] (0.58,0.5) rectangle (1.02,1.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,1.1) ellipse (0.18 and 0.4);
+ \end{scope}
+ \begin{scope}
+ \clip[rotate=-10] (0.58,0.5) rectangle (1.02,0.87);
+ \fill[\duck@wine, rotate=-10] (0.8,1.1) ellipse (0.15 and 0.36);
+ \end{scope}
+\fi
+%
+% prison duck %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@prison
+ \fill[\duck@prison] (1.5,0.25) circle (0.3);
+ \fill[\duck@prison, even odd rule] (1.2,0.1) ellipse (0.10 and 0.07) (1.2,0.1) ellipse (0.06 and 0.04) (1.05,-0.05) ellipse (0.10 and 0.07) (1.05,-0.05) ellipse (0.06 and 0.04) (0.87,-0.2) ellipse (0.10 and 0.07) (0.87,-0.2) ellipse (0.06 and 0.04);
+ \fill[\duck@prison, even odd rule] (0.72,-0.2) ellipse (0.10 and 0.07) (0.72,-0.2) ellipse (0.06 and 0.04);
+ \fill[\duck@prison,even odd rule,rotate=70](0.4,-1.05) ellipse (0.1 and 0.07) (0.4,-1.05) ellipse (0.06 and 0.04) (0.2,-0.95) ellipse (0.1 and 0.07) (0.2,-0.95) ellipse (0.06 and 0.04) (0.22,-0.58) ellipse (0.1 and 0.07) (0.22,-0.58) ellipse (0.06 and 0.04);
+ \fill[\duck@prison,even odd rule,rotate=110](-0.33,-0.55) ellipse (0.1 and 0.07) (-0.33,-0.55) ellipse (0.06 and 0.04);
+ \begin{scope}
+ \clip[rotate=-12] (0.45,0.15) rectangle (0.63,0.25);
+ \fill[\duck@prison,even odd rule,rotate=110](-0.07,-0.6) ellipse (0.1 and 0.07) (-0.07,-0.6) ellipse (0.06 and 0.04);
+ \end{scope}
+\fi
+%
+% torch %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@torch
+ \fill[red!50!yellow] \duckpathtorch;
+ \fill[red!25!yellow, scale=0.67, xshift=17, yshift=15] \duckpathtorch;
+ \fill[white!50!yellow, scale=0.4, xshift=53.5, yshift=45.3] \duckpathtorch;
+ \fill[\duck@torch,rounded corners=\scalingfactor*1]
+ (1.1,0.96) -- (0.77,0.25) -- (0.83,0.25) -- (1.3,0.86) -- cycle;
+ \fill[\duck@torch,rotate=-28]
+ (0.62,1.32) ellipse (0.2 and 0.08);
+\fi%
+%
+% sheep %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@sheep
+ \begin{scope}
+ \clip[rotate=-5] (1.2,1.7) ellipse (0.3 and 0.4);
+ \fill[\duck@bill,rotate=-5] (0.8,1.5) ellipse (0.3 and 0.4);
+ \end{scope}
+\fi
+%
+% basket %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@basket
+ \fill[\duck@basket, start angle=180, end angle=360, x radius=0.35, y radius=0.35] (0.65,0.61) arc -- cycle;
+ \fill[\duck@basket, start angle=180, end angle=0, even odd rule] [x radius=0.35, y radius=0.5] (0.65,0.6) arc -- cycle [x radius=0.3, y radius=0.45] (0.7,0.6) arc -- cycle;
+ \fill[\duck@basket, even odd rule] (1,0.6) ellipse (0.35 and 0.1) (1,0.6) ellipse (0.3 and 0.07);
+ \fill[\duck@basket!75!black] (1,0.6) ellipse (0.3 and 0.07);
+\fi%
+%
+% easter basket %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@easter
+ \begin{scope}
+ \clip [start angle=180, end angle=0, x radius=0.3, y radius=0.45] (0.7,0.6) arc -- cycle [start angle=180, end angle=360, x radius=0.3, y radius=0.07] (0.7,0.6) arc -- cycle;
+ \fill[\duck@eggb, rotate=-5] (0.95,0.72) ellipse (0.09 and 0.13);
+ \fill[\duck@egga, rotate=10] (0.94,0.42) ellipse (0.09 and 0.13);
+ \fill[\duck@eggc, rotate=-30] (0.7,1.08) ellipse (0.09 and 0.13);
+ \end{scope}
+\fi%
+%
+% horse tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfkeys{/duck/horsetail/.@def/.get=\duck@test}
+\ifx\duck@horsetail\duck@test
+ \ifdefined\duck@hair\let\duck@horsetail=\duck@hair\fi
+\fi%
+\ifduck@horsetail
+ \path (0.1,0.1) rectangle (2.82,2.14);
+ \begin{pgfinterruptboundingbox}
+ \fill[\duck@horsetail] \duckpathhorsetail;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% crozier %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@crozier
+ \begin{scope}
+ \clip [rotate=-20] (0.6,2.3) rectangle (1.1,1.999);
+ \fill[even odd rule,\duck@crozier] (1.5,1.6) circle (0.2) (1.5,1.6) circle (0.1);
+ \end{scope}
+ \fill[\duck@crozier,rotate=-20] (0.663,0.5) rectangle (0.763,2.0);
+\fi
+%
+% stethoscope %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@stethoscope
+ \fill[\duck@stethoscope,rounded corners=\scalingfactor*0.5,rotate=-18] (0.08,0.7) rectangle (0.13,1.24);
+ \fill[\duck@stethoscope] (0.35,0.7) circle (0.1);
+ \begin{scope}
+ \fill[\duck@stethoscope,rounded corners=\scalingfactor*0.5,rotate=-30] (0.53,1.3) rectangle (0.58,1.72);
+ \clip[rotate=-30] (0.36,0.89) -- (0.36,1.36) -- (0.79,1.36) -- (0.79,0.89) -- (0.65,0.89) -- (0.65,0.96) -- (0.5,0.96) -- (0.5,0.89) -- cycle ;
+ \fill [\duck@stethoscope,rounded corners=\scalingfactor*3,rotate=-30,even odd rule] (0.775,1.35) rectangle (0.375,0.9) [rounded corners=\scalingfactor*2] (0.725,1.3) rectangle (0.425,0.95);
+ \end{scope}
+\fi
+%
+% snow duck %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@snowduck
+ \fill[black, rotate=-25] (0.65,0.65) rectangle (0.7,1.8);
+ \fill[black, rotate=35] (1.55,0.15) rectangle (1.6,0.5);
+ \fill[black, rotate=-35] (0.4,1.7) rectangle (0.45,2.0);
+ \fill[black, rotate=-60] (-0.3,2.0) rectangle (-0.35,1.65);
+\fi
+%
+% vampire %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@vampire
+ \ifduck@laughing
+ \fill[\duck@vampire] (0.55,1.28) -- (0.575,1.22) -- (0.6,1.29) -- cycle;
+ \else
+ \fill[\duck@vampire] (0.6,1.20) -- (0.625,1.16) -- (0.65,1.223) -- cycle;
+ \fi
+\fi
+%
+% crystal ball %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@crystalball
+ \shade[ball color=\duck@crystalball,opacity=0.7] (0.93,0.5) circle (0.33);
+\fi
+%
+% Cheese %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@cheese
+ \begin{scope}[xshift=26,yshift=-2]
+ \fill[\duck@cheese] (-0.3200,0.8058) -- (0.0608,0.7220) -- (0.0608,0.6366) -- (-0.3200,0.5410) -- (0.2143,0.4236) .. controls (0.3395,0.4810) and (0.4241,0.5627) .. (0.4117,0.6253) -- (0.4117,0.7634) .. controls (0.4261,0.8618) and (0.2607,0.8954) .. (0.1907,0.8962) -- cycle;
+ \fill[\duck@cheese!35!white] (-0.3200,0.8057) -- (-0.3200,0.5410) -- (0.2143,0.4236) -- (0.2143,0.7381) -- cycle;
+ \fill[\duck@cheese] (-0.23,0.71) circle (0.04) (0.0,0.55) circle (0.04) (-0.23,0.58) circle (0.02) (-0.15,0.6) circle (0.02) (-0.1,0.7) circle (0.02) (0.1,0.65) circle (0.02) (0,0.65) circle (0.02) (0.1,0.5) circle (0.02) (0.07,0.55) circle (0.01) (0.12,0.6) circle (0.01) (-0.08,0.54) circle (0.01);
+ \end{scope}
+\fi
+%
+% shovel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@shovel
+ \fill[brown!80!black,rotate around={-23:(0.91, 0.88)}] (0.87, 0.28) rectangle ++(0.1,1.4);
+ \fill[\duck@shovel] (0.6133, 0.9536) .. controls (0.8388, 0.8117) and (0.9253, 0.7517) .. (1.1962, 0.6696) -- (0.8332, 0.1263) .. controls (0.6458, 0.11) and (0.5417, 0.1644) .. (0.4517, 0.3034) -- cycle;
+\fi
+%
+% pickaxe %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@pickaxe
+ \fill[brown!80!black,rotate around={-23:(0.91, 0.88)}] (0.87, 0.28) rectangle ++(0.1,1.4);
+ \fill[\duck@pickaxe] (-0.0085, 0.6858) .. controls (0.6422, 0.3523) and (0.7609, 0.3068) .. (1.4114, 0.1108) .. controls (0.6589, 0.1246) and (0.5556, 0.1887) .. (-0.0085, 0.6858) -- cycle;
+\fi
+%
+% umbrella %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@umbrella
+ \path (0.2,0.4) rectangle (2.22,2.7);
+ \begin{pgfinterruptboundingbox}
+ \fill[gray] (0.6922,0.5942) -- (0.7426,0.6103) .. controls (0.8276,0.3884) and (0.8855,0.4523) .. (0.9333,0.6543) -- (0.9334,0.6545) -- (0.9335,0.6547) .. controls (1.0347,1.0671) and (1.2906,1.9565) .. (1.2906,1.9565) -- (1.3415,1.9419) .. controls (1.3415,1.9419) and (1.0855,1.0519) .. (0.9849,0.6423) -- (0.9848,0.6420) .. controls (0.9240,0.3633) and (0.7874,0.3312) .. (0.6922,0.5942) -- cycle;
+ \fill[\duck@umbrella] (0.2185,1.9927) .. controls (0.3559,2.1962) and (0.6837,2.0720) .. (0.6761,1.8240) .. controls (0.8398,2.0111) and (1.1891,1.9216) .. (1.1685,1.6915) .. controls (1.3000,1.8765) and (1.6639,1.7626) .. (1.6607,1.5356) .. controls (1.7865,1.7271) and (2.1350,1.6950) .. (2.1626,1.4589) .. controls (2.4996,2.5771) and (0.5644,3.2631) .. (0.2185,1.9927) -- cycle;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% closed umbrella %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@umbrellaclosed
+ \fill[gray] (1.3401,0.6996) -- (1.2872,0.7019) .. controls (1.2840,0.9395) and (1.2076,0.8995) .. (1.0930,0.7264) -- (1.0929,0.7262) -- (1.0928,0.7261) .. controls (0.8555,0.3739) and (0.9223,0.4608) .. (0.9223,0.4608) -- (0.8795,0.4920) .. controls (0.8795,0.4920) and (0.8131,0.4057) .. (1.0488,0.7554) -- (1.0489,0.7556) .. controls (1.2022,0.9963) and (1.3414,0.9793) .. (1.3401,0.6996) -- cycle;
+ \fill[\duck@umbrellaclosed] (0.6827,0.1263) -- (0.8038,0.6188) -- (0.9548,0.6494) -- (0.9520,0.8231) -- (1.1945,0.6529) -- (1.0218,0.5885) -- (1.0465,0.4566) -- cycle;
+\fi
+%
+% handbag %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@handbag
+ \fill[\duck@handbag] (0.7811,0.1751) -- (1.4913,0.3097) -- (1.3315,0.7086) -- (0.7832,0.6152) -- cycle;
+ \fill[\duck@handbag!70!black] (0.8857,0.4354) .. controls (0.7861,0.9811) and (1.1796,1.0719) .. (1.2866,0.5155) -- (1.2043,0.4996) .. controls (1.1247,0.8952) and (0.9051,0.8883) .. (0.9676,0.4536) -- cycle;
+\fi
+%
+% cocktail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@cocktail
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.55) ellipse (0.12 and 0.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.7) ellipse (0.03 and 0.2);
+ \fill[cyan!10!white] (0.92,0.6) -- (0.75,0.9) -- (1.18,0.83) -- cycle;
+ \fill[gray!60!white] (0.928,0.64) -- (0.85,0.77) -- (1.08,0.77) -- cycle;
+ \fill[green!40!brown!60!white] (0.94,0.71) circle (0.04);
+ \fill[red!80!black] (0.94,0.72) circle (0.01);
+\fi
+%
+% wing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifduck@wing
+ \fill[\duck@wing] \duckpathwing;
+\fi
+%
+%
+%\draw (current bounding box.north west) rectangle (current bounding box.south east);% For debugging bounding boxes
+%
+%\end{scope}
+}% from `\def\duck@draw{` at the very beginning
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Random ducks
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifluatex
+ \let\pdfrandomseed\randomseed
+\fi
+
+\ifxetex
+ \pgfmathsetseed{\time}
+\else
+ \pgfmathsetseed{\number\pdfrandomseed}
+\fi
+
+\pgfmathdeclarerandomlist{head}{{shorthair}{longhair}{crazyhair}{mohican}{mullet}{beard}{alien}{hat}{cap}{santa}{chef}{graduate}{beret}{magichat}{witch}{crown}{bunny}{peakedcap}{tophat}{queencrown}{kingcrown}{harlequin}{strawhat}{parting}}
+\pgfmathdeclarerandomlist{accessories}{{glasses}{sunglasses}{icecream}{book}{signpost}{magicwand}{cricket}{rollingpin}{lightsaber}{cake}{pizza}{hockey}{baguette}{football}{mask}{necklace}{milkshake}{wine}{prison}{cape}{torch}{crozier}{easter}{stethoscope}{neckerchief}{cheese}{shovel}{pickaxe}{crystalball}}
+
+\newcommand{\shuffleducks}{%
+ \pgfmathrandomitem{\head}{head}%
+ \edef\randomhead{\head}%
+ \pgfmathrandomitem{\accessories}{accessories}%
+ \edef\randomaccessories{\accessories}%
+}
+
+\newcommand{\randuck}{%
+ \shuffleducks%
+ \duck[\randomhead, \randomaccessories]%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Defining some of the more complicate paths for easy reuse
+%
+% naming scheme is \duckpath<name>
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% body parts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\duckpathbody}{%
+ (0.513,1.145) .. controls (0.267, 1.102) and (-0.125,0.657) ..
+ (0.289,0.261) .. controls (0.704,-0.135) and ( 2.863,0.130) ..
+ (1.818,1.419) .. controls (0.938, 0.946) and ( 1.240,1.379) ..
+ (0.513,1.145) -- cycle
+}
+
+\newcommand{\duckpathgrumpybill}{%
+ (0.406,1.472) .. controls (0.643,1.530) and (0.643,1.530) ..
+ (0.800,1.300) .. controls (0.083,0.850) and (0.269,1.369) ..
+ (0.406,1.472) -- cycle
+}
+
+\newcommand{\duckpathbill}{%
+ (0.406,1.472) .. controls (0.643,1.530) and (0.541,1.303) ..
+ (0.910,1.370) .. controls (0.083,0.850) and (0.269,1.369) ..
+ (0.406,1.472) -- cycle
+}
+
+\newcommand{\duckpathwing}{%
+ (1.47,0.56) .. controls (1.51,0.59) and (1.57,0.62) ..
+ (1.60,0.66) .. controls (1.61,0.70) and (1.51,0.69) ..
+ (1.47,0.69) .. controls (1.48,0.72) and (1.41,0.76) ..
+ (1.37,0.74) .. controls (1.35,0.79) and (1.33,0.81) ..
+ (1.25,0.80) .. controls (1.25,0.86) and (1.18,0.88) ..
+ (1.15,0.88) .. controls (1.20,1.01) and (0.40,0.79) ..
+ (0.52,0.57) .. controls (0.63,0.26) and (1.22,0.43) ..
+ (1.47,0.56) -- cycle
+}
+
+% clothing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\duckpathtshirt}{%
+ (0.490,1.145) .. controls (0.267, 1.102) and (-0.125,0.657) ..
+ (0.289,0.261) .. controls (0.704,-0.135) and ( 2.863,0.130) ..
+ (1.818,1.419) .. controls (0.938, 0.976) and ( 1.240,1.279) ..
+ (0.590,1.000) -- cycle
+}
+
+\newcommand{\duckpathjacket}{%
+ (0.490,1.145) .. controls (0.267, 1.102) and (-0.125,0.657) ..
+ (0.289,0.261) .. controls (0.704,-0.135) and ( 2.863,0.130) ..
+ (1.818,1.419) .. controls (0.880, 0.946) and ( 1.240,1.378) ..
+ (0.513,0.700) -- cycle
+}
+
+% hair styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\duckpathshorthair}{%
+ (1.3947,1.4175) .. controls (1.4546,1.4518) and (1.4699,1.6566) ..
+ (1.4343,1.7992) .. controls (1.2528,2.5033) and (0.2339,2.2710) ..
+ (0.4151,1.5907) .. controls (0.4345,1.8709) and (0.7421,2.0999) ..
+ (0.9494,1.9054) .. controls (1.2241,1.6476) and (1.3316,1.3814) ..
+ (1.3947,1.4175) -- cycle
+}
+
+\newcommand{\duckpathlonghair}{%
+ (1.4508,0.7565) .. controls (1.5146,0.7888) and (1.5854,0.8216) ..
+ (1.6247,0.8831) .. controls (1.5859,0.8847) and (1.4726,0.9457) ..
+ (1.5587,0.9706) .. controls (1.6317,0.9685) and (1.7016,1.0046) ..
+ (1.7314,1.0734) .. controls (1.7931,1.1660) and (1.6616,1.1176) ..
+ (1.6277,1.1566) .. controls (1.6853,1.1741) and (1.7840,1.1829) ..
+ (1.8123,1.2244) .. controls (1.7022,1.2488) and (1.5688,1.2663) ..
+ (1.5063,1.3739) .. controls (1.4619,1.5143) and (1.4696,1.6649) ..
+ (1.4340,1.8076) .. controls (1.2524,2.5117) and (0.2335,2.2794) ..
+ (0.4060,1.5991) .. controls (0.4341,1.8793) and (0.6629,2.1130) ..
+ (0.9011,1.9578) .. controls (1.2427,1.7382) and (1.3350,1.4214) ..
+ (1.0905,1.0610) .. controls (1.0597,1.0109) and (1.1103,0.9166) ..
+ (1.1805,0.8670) .. controls (1.2507,0.8174) and (1.3503,0.7853) ..
+ (1.4508,0.7565) -- cycle
+}
+
+\newcommand{\duckpathcrazyhair}{%
+ (0.1977,1.9023) .. controls (0.2633,2.0599) and (0.4819,2.0547) ..
+ (0.4713,2.0879) .. controls (0.4647,2.2106) and (0.2516,2.2392) ..
+ (0.2516,2.2392) .. controls (0.4352,2.2933) and (0.7427,1.9304) ..
+ (0.5743,2.3885) .. controls (0.6017,2.3633) and (0.8307,2.1739) ..
+ (0.8082,2.4245) .. controls (0.8271,2.2885) and (0.9195,2.2400) ..
+ (0.9933,2.2673) .. controls (1.0814,2.6593) and (0.9688,2.0034) ..
+ (1.3350,2.3615) .. controls (1.3657,2.3292) and (1.1627,2.1043) ..
+ (1.3424,2.1387) .. controls (1.3102,1.8312) and (1.5049,2.2623) ..
+ (1.5049,2.2623) .. controls (1.5049,2.2623) and (1.4675,2.0493) ..
+ (1.4287,1.9560) .. controls (1.4287,1.9560) and (1.6830,1.9470) ..
+ (1.7178,1.8823) .. controls (1.1926,1.8054) and (2.0160,1.7277) ..
+ (1.4923,1.7275) .. controls (1.5366,1.6685) and (1.3013,1.6009) ..
+ (1.6500,1.5946) .. controls (0.8836,1.5797) and (1.2764,1.9221) ..
+ (0.8957,2.0442) .. controls (0.5516,2.0958) and (0.5228,1.8527) ..
+ (0.4695,1.7963) .. controls (0.4825,1.9607) and (0.3601,1.9095) ..
+ (0.1977,1.9023) -- cycle
+}
+
+\newcommand{\duckpathrecedinghair}{%
+ (1.3385,1.4841) .. controls (1.4243,1.4529) and (1.4877,1.7127) ..
+ (1.3964,1.8658) .. controls (1.1071,2.3511) and (0.5189,2.1609) ..
+ (0.4381,1.6816) .. controls (0.4575,1.9618) and (0.9007,2.2059) ..
+ (1.1308,2.0390) .. controls (1.4703,1.7469) and (1.0343,1.5949) ..
+ (1.3385,1.4841) -- cycle
+}
+
+\newcommand{\duckpathmohican}{%
+ (0.7632,1.7935) .. controls (0.9223,2.3084) and (1.3870,1.8580) ..
+ (1.3920,1.5854) .. controls (1.4233,2.1466) and (0.6812,2.5808) ..
+ (0.6725,1.8166) .. controls (0.6725,1.8166) and (0.7615,1.7926) ..
+ (0.7632,1.7935) -- cycle
+}
+
+\newcommand{\duckpathmullet}{%
+ (1.3723,1.2684) .. controls (1.3723,1.2684) and (1.5129,1.5571) ..
+ (1.4435,1.7815) .. controls (1.2652,2.3572) and (0.3342,2.2633) ..
+ (0.4106,1.5424) .. controls (0.4204,1.6825) and (0.5692,1.9195) ..
+ (0.5692,1.9195) .. controls (0.5692,1.9195) and (0.8475,1.8402) ..
+ (1.1031,1.7844) .. controls (1.0808,1.6260) and (1.1130,1.4754) ..
+ (1.1130,1.4754) .. controls (1.1956,1.4198) and (1.3001,1.3369) ..
+ (1.3723,1.2684) -- cycle
+}
+
+% Acessoires %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\duckpathqueencrown}{%
+ (0.7370,2.0732) .. controls (0.6966,2.2091) and (0.6769,2.3503) ..
+ (0.6354,2.4859) .. controls (0.6149,2.5164) and (0.5958,2.5732) ..
+ (0.6498,2.5808) .. controls (0.6973,2.5907) and (0.7091,2.5350) ..
+ (0.6926,2.5016) .. controls (0.6967,2.4544) and (0.7188,2.4109) ..
+ (0.7340,2.3665) .. controls (0.7415,2.3472) and (0.7619,2.2862) ..
+ (0.7676,2.3381) .. controls (0.7755,2.3852) and (0.7871,2.4329) ..
+ (0.7833,2.4808) .. controls (0.7597,2.5148) and (0.7834,2.5720) ..
+ (0.8294,2.5570) .. controls (0.8775,2.5457) and (0.8536,2.4937) ..
+ (0.8436,2.4638) .. controls (0.8502,2.3973) and (0.8640,2.3313) ..
+ (0.8798,2.2664) .. controls (0.9047,2.2750) and (0.9168,2.3261) ..
+ (0.9342,2.3514) .. controls (0.9492,2.3853) and (0.9714,2.4171) ..
+ (0.9773,2.4540) .. controls (0.9645,2.4873) and (0.9766,2.5358) ..
+ (1.0204,2.5303) .. controls (1.0646,2.5298) and (1.0691,2.4725) ..
+ (1.0443,2.4460) .. controls (1.0440,2.3935) and (1.0580,2.3419) ..
+ (1.0671,2.2905) .. controls (1.0706,2.2719) and (1.0788,2.2126) ..
+ (1.0985,2.2554) .. controls (1.1269,2.3087) and (1.1558,2.3623) ..
+ (1.1772,2.4187) .. controls (1.1697,2.4515) and (1.1716,2.5081) ..
+ (1.2210,2.5018) .. controls (1.2706,2.4969) and (1.2686,2.4403) ..
+ (1.2406,2.4126) .. controls (1.2279,2.3600) and (1.2211,2.3057) ..
+ (1.2172,2.2518) .. controls (1.2296,2.2439) and (1.2538,2.2943) ..
+ (1.2693,2.3112) .. controls (1.2908,2.3467) and (1.3228,2.3784) ..
+ (1.3316,2.4200) .. controls (1.3203,2.4624) and (1.3708,2.5014) ..
+ (1.4051,2.4678) .. controls (1.4448,2.4342) and (1.3945,2.3994) ..
+ (1.3765,2.3710) .. controls (1.3022,2.2536) and (1.2440,2.1265) ..
+ (1.1686,2.0097) .. controls (0.9649,1.9465) and (0.8367,1.9955) ..
+ (0.7370,2.0732) -- cycle
+}
+
+\newcommand{\duckpathkingcrown}{%
+ (0.6572,2.0396) .. controls (0.6637,2.0838) and (0.6716,2.1289) ..
+ (0.6684,2.1735) .. controls (0.6481,2.2496) and (0.5923,2.3131) ..
+ (0.5818,2.3921) .. controls (0.5738,2.4607) and (0.6167,2.5343) ..
+ (0.6862,2.5502) .. controls (0.7548,2.5703) and (0.8210,2.5304) ..
+ (0.8720,2.4881) .. controls (0.8984,2.4712) and (0.9239,2.4324) ..
+ (0.9486,2.4249) .. controls (0.9524,2.4691) and (0.9566,2.5158) ..
+ (0.9844,2.5527) .. controls (1.0052,2.5845) and (1.0390,2.6282) ..
+ (1.0820,2.6127) .. controls (1.1212,2.5899) and (1.1378,2.5421) ..
+ (1.1478,2.5003) .. controls (1.1576,2.4639) and (1.1336,2.4180) ..
+ (1.1349,2.3906) .. controls (1.2050,2.4269) and (1.2847,2.4629) ..
+ (1.3654,2.4429) .. controls (1.4292,2.4285) and (1.4864,2.3679) ..
+ (1.4793,2.2998) .. controls (1.4859,2.2404) and (1.4407,2.1925) ..
+ (1.4006,2.1551) .. controls (1.3681,2.1232) and (1.3290,2.0951) ..
+ (1.3072,2.0544) .. controls (1.2904,2.0121) and (1.2805,1.9674) ..
+ (1.2738,1.9225) .. controls (1.1221,1.8892) and (0.9586,1.8836) ..
+ (0.8112,1.9386) .. controls (0.7535,1.9608) and (0.6999,1.9945) ..
+ (0.6572,2.0396) -- cycle
+}
+
+\newcommand{\duckpathdarthvader}{%
+ (0.4264,1.9092) .. controls (0.4347,1.9248) and (0.4612,1.9186) ..
+ (0.4969,1.9783) .. controls (0.5499,2.0670) and (0.7559,2.2377) ..
+ (0.9889,2.2057) .. controls (1.2691,2.1668) and (1.4075,1.8829) ..
+ (1.4176,1.7421) .. controls (1.4279,1.5955) and (1.5246,1.3484) ..
+ (1.5246,1.3484) --
+ (0.9846,1.2036) .. controls (1.0898,1.2735) and (1.0667,1.5598) ..
+ (1.0555,1.6034) .. controls (0.9758,1.9147) and (0.8121,1.8681) ..
+ (0.7174,1.7694) .. controls (0.5671,2.0370) and (0.4103,1.7556) ..
+ (0.4132,1.472) --
+ (0.3529,1.415) .. controls (0.3529,1.43938) and (0.3893,1.8379)..
+ (0.4264,1.9092) -- cycle
+}
+
+\newcommand{\duckpathhorsetail}{%
+ (1.7248,1.3553) .. controls (2.0530,1.3369) and (2.1427,1.1604) ..
+ (2.2915,0.9970) .. controls (2.4759,0.7946) and (2.9531,0.8890) ..
+ (2.7668,0.9003) .. controls (2.4670,0.9184) and (2.5158,1.1488) ..
+ (2.3907,1.3152) .. controls (2.2788,1.4641) and (1.9414,1.5945) ..
+ (1.7248,1.3553) -- cycle
+}
+
+\newcommand{\duckpathcape}{%
+ (0.225,0.966) .. controls (1.314,0.961) and (2.070,0.650) ..
+ (2.042,1.245) .. controls (1.863,1.164) and (1.844,1.173) ..
+ (1.792,1.340) .. controls (1.635,1.235) and (1.620,1.268) ..
+ (1.567,1.393) .. controls (1.358,1.086) and (0.664,1.096) ..
+ (0.460,1.110) .. controls (0.461,1.133) and (0.305,1.077) ..
+ (0.235,0.966) -- cycle
+}
+
+\newcommand{\duckpathcrown}{%
+ (0.7365,2.0616) .. controls (0.7365,2.0616) and (0.7771,2.1763) ..
+ (0.6959,2.4650) -- (0.8895,2.2378) -- (1.0391,2.3943) --
+ (1.1260,2.1961) --
+ (1.3938,2.3318) .. controls (1.1927,2.1132) and (1.2194,1.9764) ..
+ (1.2194,1.9764) .. controls (1.0774,1.9202) and (0.8507,1.9601) ..
+ (0.7365,2.0616) -- cycle
+}
+
+\newcommand{\duckpathtorch}{%
+ (1.4338,1.0258) .. controls (1.4308,0.8877) and (1.3468,0.8997) ..
+ (1.2447,0.7481) .. controls (1.1427,0.8982) and (1.0721,0.8892) ..
+ (1.0646,1.0243) .. controls (1.0541,1.1714) and (1.2642,1.1654) ..
+ (1.2492,1.3860) .. controls (1.3093,1.3110) and (1.4383,1.2705) ..
+ (1.4338,1.0258) -- cycle
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Picture mode ducks
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\picduck}{%
+ % bill %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \qbezier(6.5,29.5)(-1,17.5)(16.8,27.3)
+ \qbezier(6.5,29.5)(9,30.5)(11.4,28.0)
+ \qbezier(11.4,28.0)(13.5,26.5)(16.8,27.3)
+ % head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \qbezier(06.5,29.5)(6,41.5)(16.8,42.4)
+ \qbezier(16.8,42.4)(29,41)(25.3,24)
+ % body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \qbezier(7.8,23.2)(8,22.8)(8,22.5)
+ \qbezier(8,22.5)(-5,9)(8,3)
+ \qbezier(8,3)(22,-2)(35,6.5)
+ \qbezier(35,6.5)(46,15)(35,28.3)
+ \qbezier(35,28.3)(30,25)(25.3,24)
+ % right eye %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \qbezier(13,32)(13.8,34.5)(16,34)
+ \qbezier(16,34)(17.3,33.2)(16.7,31)
+ \qbezier(16.7,31)(16,29.1)(14.5,29.3)
+ \qbezier(14.5,29.3)(12.7,29.5)(13,32)
+ \put(15.3,31.3){\circle*{1.8}}
+ % left eye %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \qbezier(7.7,33.2)(8.4,35.7)(10.3,35)
+ \qbezier(10.3,35)(11.2,34)(10.4,32.2)
+ \qbezier(10.4,32.2)(9.7,30.7)(8.7,30.7)
+ \qbezier(8.7,30.7)(7.2,30.9)(7.7,33.2)
+ \put(9.5,32.7){\circle*{1.5}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 32237378723223
+% 23737232212232237822
+% 3282232232232232232<3723
+% 382232232232232232232232232
+% 72232322323323223223223223282
+% 7503223223522332322322322322372
+% 9hklke23232<252<2322322322322323
+% 9jzltrg22320fklke23232232232232232
+% 0lzp ye252qkzliuk92323223223223223
+% 2dkfaw233<fzl, .g623232232232232282
+% 3<<432325<eklits9232322322322322322
+% ++#@o$;<32329edw22322322322322322323
+% o++oo@oooo%::12<<<<123223223223223223 328
+% o++o+oo+o+oooooO@=*:<32232232232232232 323782282
+% +o+oo+o+oooooo%-:12232232232232232232 23237322322373
+% ++@+++o o+%-:<32232232232232232232232 32237822322322322322
+% +oOoo&><<32232232232232232232232232282822322322322322322372
+% 37232232232232232232232232232232232232232232232232232237<
+% 728282232232232232232232232232232232232232232232232232232232
+% 282232232232232232232232232232232232232232232232232232232232232
+% 282232232232232232232232232232232232232232232232232232232232232282
+% 7322322322322322322322322322322322322322322322322322322322322322322
+% 23223223223223223223223223223223223223223223223223223223223223223223
+%322322322322322322322322322322322322322322322322322322322322322322322
+%322322322322322322322322322322322322322322322322322322322322322322322
+%232232232232232232232232232232232232232232232232232232232232232232282
+%82232232232232232232232232232232232232232232232232232232232232232282
+%3223223223223223223223223223223223223223223223223223223223223223282
+%273223223223223223223223223223223223223223223223223223223223223723
+% 273223223223223223223223223223223223223223223223223223223223723
+% 228223223223223223223223223223223223223223223223223223228232
+% 2822322322322322322322322322322322322322322322322378232
+% 2378223223223223223223223223223223223223223782232
+% 322378282232232232232232232232282878223223
+% 223232232282828282322322323223
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% stripes for sports jerseys
+%
+% code contributed by Carla Maggi
+% https://tex.stackexchange.com/a/387126/36296
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand*{\stripes}[1][]{\tikzset{%
+ /stripes/.cd,#1}\stripes@draw%
+}
+
+\tikzset{
+ /stripes/.cd,
+ color/.code = \def\stripes@color{#1},
+ distance/.code = \def\stripes@distance{#1},
+ width/.code = \def\stripes@width{#1},
+ height/.code = \def\stripes@height{#1},
+ initialx/.code = \def\stripes@initialx{#1},
+ initialy/.code = \def\stripes@initialy{#1},
+ rotate/.code = \def\stripes@rotate{#1},
+ emblem/.code = \def\stripes@emblem{#1},
+ % setting defaults %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ color = black,
+ distance = 0.3,
+ width = 0.15,
+ height = 2.7,
+ initialx = 0.1,
+ initialy = -0.3,
+ rotate = -10,
+ emblem = \empty
+}
+
+\def\stripes@draw{%
+ \path (0.1,0.1) rectangle (2.1,1.45);
+ \begin{pgfinterruptboundingbox}
+ \begin{scope}
+ \clip \duckpathjacket;
+ \foreach \shifta in {0,\stripes@distance,...,2.4}{%
+ \fill[\stripes@color,rotate around={\stripes@rotate:(1.2,0.9)}]
+ ($(\stripes@initialx,\stripes@initialy)+(\shifta,0)$) rectangle ($(\stripes@initialx,\stripes@initialy)+(\shifta,0)+(\stripes@width,\stripes@height)$);
+ }
+ \end{scope}
+ \end{pgfinterruptboundingbox}
+ \node at (wing) {\stripes@emblem };
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%.........................%%%%%%%%%%%%%%%%%%%.........................
+%....................%%%%%%%%%............%%%%%%%%....................
+%................%%%%%%....%%...................%%%%%%................
+%.............%%%%%.......%%%.......................%%%%%.............
+%...........%%%%........%%%%%%%%%...................%%%%%%%...........
+%.........%%%........%%%%%%%%%%%%%%%%..............%%%%%%%%%%.........
+%.......%%%.......%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%.......
+%......%%%...%%%%%%%%%%%%%%%%%%%%%%%%%%..............%%%%%%%%%%%......
+%.....%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%................%%%%%%%%%%%.....
+%...%%%%........%%%%%%%%%%%%%%%%%%%%%...................%%%%%%%%%%%...
+%...%%%..........%%%%%%%%%%%%%%%%%%%.....................%%%%%%%%%%...
+%..%%%............%%%%%%%%%%%%%%%%%.......................%%%%%%%%%%..
+%.%%%%............%%%%%%%%%%%%%%%%%........................%%%%%%%%%%.
+%.%%%..............%%%%%%%.......%%%......................%%%.....%%%.
+%%%%..............%%...............%%%...................%%%.......%%%
+%%%..............%%.................%%%..................%%.........%%
+%%%%............%%%...................%%%...............%%..........%%
+%%%%...........%%%.....................%%%.............%%...........%%
+%%%%%..........%%........................%%%%%%%%%%%%%%%%...........%%
+%%%%%........%%%........................%%%%%%%%%%%%%%%%%%.........%%%
+%.%%%%%%%%%%%%%%%......................%%%%%%%%%%%%%%%%%%%.........%%.
+%.%%%%%%%%%%%%%%%%.....................%%%%%%%%%%%%%%%%%%%........%%%.
+%..%%%%%%%%%%%%%%%%...................%%%%%%%%%%%%%%%%%%%%%.......%%..
+%...%%%%%%%%%%%%%%%%%................%%%%%%%%%%%%%%%%%%%%%%......%%...
+%...%%%%%%%%%%%%%%%%%%............%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%....
+%.....%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%....%%%.....
+%......%%%%%%%%%%%%%%%%................%%%%%%%%%%%%%%%%......%%%......
+%.......%%%%%%%%%%%%%%....................%%%%%%%%%%........%%%.......
+%.........%%%%%%%%%%%........................%%%%.........%%%.........
+%...........%%%%%%%%%........................%%........%%%%...........
+%.............%%%%%%%%%.....................%%......%%%%%.............
+%................%%%%%%%%.................%%%...%%%%%%................
+%....................%%%%%%%%......%%%%%%%%%%%%%%%....................
+%..........................%%%%%%%%%%%%%%%%%..........................
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/graphics/pgf/contrib/tikzducks/tikzlibraryducks.code.tex b/graphics/pgf/contrib/tikzducks/tikzlibraryducks.code.tex
new file mode 100644
index 0000000000..25927172f0
--- /dev/null
+++ b/graphics/pgf/contrib/tikzducks/tikzlibraryducks.code.tex
@@ -0,0 +1,27 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ library for the tikzducks package
+% A package to bring rubber ducks into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzducks
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 1.1
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{tikzducks}
+
+% This is all that is needed ...
+\tikzset{
+ duck/.pic={%
+ \duck@draw
+ },
+ duck/.search also={,/tikz,/pgf},
+}
+
+
diff --git a/graphics/pgf/contrib/tikzinclude/README b/graphics/pgf/contrib/tikzinclude/README
new file mode 100644
index 0000000000..9ee1e26e47
--- /dev/null
+++ b/graphics/pgf/contrib/tikzinclude/README
@@ -0,0 +1,8 @@
+This package addresses the problem of importing only one TikZ-image from
+a file holding multiple images (i.e. different versions of the same picture).
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is available at
+http://www.latex-project.org/lppl/.
diff --git a/graphics/pgf/contrib/tikzinclude/tikzinclude.dtx b/graphics/pgf/contrib/tikzinclude/tikzinclude.dtx
new file mode 100644
index 0000000000..17f20e8fc4
--- /dev/null
+++ b/graphics/pgf/contrib/tikzinclude/tikzinclude.dtx
@@ -0,0 +1,222 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2012 by Ferdinand Schwenk (me@nerdifand.de).
+% Copyright (C) 2012 by Benjamin Berg (benjamin@sipsolutions.net).
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. The latest version of this license is available at
+% http://www.latex-project.org/lppl/.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{tikzinclude.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{tikzinclude}
+%<*package>
+ [2012/22/02 v1.0 package for including only a specified tikz pictures from a file]
+%</package>
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{tikzinclude}[2012/12/23]
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{tikzinclude.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{70}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2012/12/23}{Initial version}
+%
+% \GetFileInfo{tikzinclude.dtx}
+%
+% \title{The \textsf{tikzinclude} package\thanks{This document
+% corresponds to \textsf{tikzinclude}~\fileversion, dated \filedate.}}
+% \author{Ferdinand Schwenk \texttt{me@nerdifand.de} \and
+% Benjamin Berg \texttt{benjamin@sipsolutions.net}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package addresses the problem of importing only one TikZ-image from
+% a file holding multiple images (i.e. different versions of the same picture).
+% \end{abstract}
+%
+% \section{Introduction}
+% Normaly I use one file per TikZ-image. This simplifies reusage of the images in
+% different documents.
+%
+% When drawing different versions of the same image, for example to highlight
+% parts of the image or provide localized versions, it is not practical to put
+% each of the version in a separate file. Doing this would increase the risk
+% of version mismatch.
+%
+% Because of this it can make sense to have all versions of one image or even
+% different images inside the same source file. However, simply doing this
+% makes it impossible to use the |\input| command as this would insert all
+% images at the same time. This package solves the issue by allowing the user
+% to only insert a single tikzpicture from a file.
+%
+% \section{Usage}
+%
+% To be able to select an image it necessary to name each drawing. This is done
+% by assigning a figure name to the TikZ-Key |/tikzinclude/figure| at the
+% beginning of the picture.
+%
+% \begin{verbatim}
+% \begin{tikzpicture}[/tikzinclude/figure=foo]
+% \node{foo};
+% \end{tikzpicture}
+% \end{verbatim}
+%
+% \DescribeMacro{\includetikzgraphics}
+% After naming the images it is now possible to only include a specific image
+% using the |\includetikzgraphics|\oarg{name}\marg{imagefile} command.\\
+% \meta{name} is the name of the image that should be included. If \meta{name}
+% is provided then only the picture with the given name is included, all other
+% pictures are dropped.
+% If \meta{name} is omitted all pictures in \meta{imagefile} are included. This
+% gives the same result as if |\input| was used.\\
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% The Package is depending on |ifthen| and |etoolbox|
+% \begin{macrocode}
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+%
+% Provide a new if condition that states if tikzinclude should be active or if
+% all pictures should be included.
+% \begin{macrocode}
+\newif\if@tikzinclude@active\@tikzinclude@activefalse
+% \end{macrocode}
+%
+% Store the original definition of |\pgfsys@typesetpicturebox|
+% \begin{macrocode}
+\let\@tikzinclude@typsetpicturebox\pgfsys@typesetpicturebox
+% \end{macrocode}
+%
+% \begin{macro}{\@tikzinclude@picture@started}
+% This internal macro sets |\par| to its original definition, if tikzinclude is
+% used. Otherwise it should not have been changed.
+% \begin{macrocode}
+\newcommand{\@tikzinclude@picture@started}{%
+ \if@tikzinclude@active%
+ \let\par\@tikzinclude@par%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tikzinclude@picture@ended}
+% This internal macro overwrites |\pgfsys@typesetpicturebox| with a macro that
+% drops the next box entirely and then resets the definition of
+% |\pgfsys@typesetpicturebox|. The overwrite only happens if the image should
+% be suppressed.
+% \begin{macrocode}
+\newcommand{\@tikzinclude@picture@ended}{%
+ \if@tikzinclude@active%
+ \ifthenelse{%
+ \equal{\pgfkeysvalueof{/tikzinclude/figure}}{\pgfkeysvalueof{/tikzinclude/select}}%
+ }%
+ {}%
+ {%
+ \global\def\pgfsys@typesetpicturebox##1{%
+ \global\let\pgfsys@typesetpicturebox\@tikzinclude@typsetpicturebox%
+ }%
+ }%
+ \fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Some hooks need to be installed.
+% \begin{macrocode}
+\BeforeBeginEnvironment{tikzpicture}{\if@tikzinclude@active%
+ \whileboolexpr{test{\ifdimgreater{\lastskip}{0pt}}}{\unskip}\fi}%
+ \AtBeginEnvironment{tikzpicture}{\@tikzinclude@picture@started%
+}
+\AtEndEnvironment{tikzpicture}{\@tikzinclude@picture@ended}
+\AfterEndEnvironment{tikzpicture}{\ignorespaces}
+% \end{macrocode}
+%
+% Set the TikZ-Keys to empty values. This is necessary to suppress some
+% TikZ-warnings
+% \begin{macrocode}
+\pgfkeyssetvalue{/tikzinclude/figure}{}
+\pgfkeyssetvalue{/tikzinclude/select}{}
+% \end{macrocode}
+%
+% \begin{macro}{\includetikzgraphics}
+% First it is checked if \meta{name} is provided or not. If no name is given a
+% simple |\input| is performed.\\
+% If \meta{name} is given it needs to be assigned to |/tikzinclude/select|.
+% Any whitespace in the image file needs to be ignored, but whitespace inside
+% the images should be unchanged. Therefore the definition of |\par| is stored
+% and |\par| is overridden outside of any TikZ-environment.\par
+% Then tikzinclude is activated and the image file is included using the |\input|
+% command.
+% After the picture is included some additional whitespace needs to be erased.
+% To have a defined starting position and to avoid the deletion of whitespace
+% added by the user a 0pt kerning is inserted prior to the inclusion of the
+% image file.\\
+% The whitespace that needs to be removed is caused by newlines at the end
+% of TikZ-environments.\par
+% In the end all settings are restored.
+% \begin{macrocode}
+\newcommand\includetikzgraphics[2][]{%
+ \begingroup%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \input{#2}%
+ }%
+ {%
+ \let\@tikzinclude@par\par%
+ \def\par{}%
+ \pgfkeyssetvalue{/tikzinclude/select}{#1}%
+ \@tikzinclude@activetrue%
+ \kern0pt\input{#2}%
+ \whileboolexpr{test{\ifdimgreater{\lastskip}{0pt}}}{\unskip}%
+ \@tikzinclude@activefalse%
+ \let\par\@tikzinclude@par%
+ }%
+ \endgroup%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
+\endinput
+
diff --git a/graphics/pgf/contrib/tikzinclude/tikzinclude.ins b/graphics/pgf/contrib/tikzinclude/tikzinclude.ins
new file mode 100644
index 0000000000..9d56c0c9a0
--- /dev/null
+++ b/graphics/pgf/contrib/tikzinclude/tikzinclude.ins
@@ -0,0 +1,47 @@
+%%
+%% Copyright (C) 2012 by Ferdinand Schwenk (me@nerdifand.de).
+%% Copyright (C) 2012 by Benjamin Berg (benjamin@sipsolutions.net).
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is available at
+%% http://www.latex-project.org/lppl/.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/tikzinclude}
+
+\preamble
+
+Copyright (C) 2012 by Ferdinand Schwenk (me@nerdifand.de).
+Copyright (C) 2012 by Benjamin Berg (benjamin@sipsolutions.net).
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is available at
+http://www.latex-project.org/lppl/.
+
+\endpreamble
+
+\askforoverwritefalse
+
+\generate{\file{tikzinclude.sty}{\from{tikzinclude.dtx}{package}}}
+
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space tikzinclude.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the file tikzinclude.dtx}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+
+\endbatchfile
diff --git a/graphics/pgf/contrib/tikzinclude/tikzinclude.pdf b/graphics/pgf/contrib/tikzinclude/tikzinclude.pdf
new file mode 100644
index 0000000000..45dce754ff
--- /dev/null
+++ b/graphics/pgf/contrib/tikzinclude/tikzinclude.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzlings/README.md b/graphics/pgf/contrib/tikzlings/README.md
new file mode 100644
index 0000000000..0c93eac163
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/README.md
@@ -0,0 +1,20 @@
+# TikZlings
+A collection of animals and other beings from the tikz world
+
+Current version: 2019/04/07 v0.2
+
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+
+![tikzlings](https://github.com/samcarter/tikzlings/blob/master/Examples/tikzlings.png)
+
+### TikZlings in action
+
+Several TikZlings are featured in the following video:
+
+[![The great TikZlings Christmas Extravaganza 2018](https://user-images.githubusercontent.com/43832342/49704004-3cd27500-fc0d-11e8-9002-319a8e71aca7.png)](https://vimeo.com/305374856)
+
+The source code for the "The great TikZlings Christmas Extravaganza 2018" can be found at https://github.com/samcarter/Extravanganza2018 .
+
+
+
+
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-addons.sty b/graphics/pgf/contrib/tikzlings/tikzlings-addons.sty
new file mode 100644
index 0000000000..fb15b68719
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-addons.sty
@@ -0,0 +1,824 @@
+% !TeX root = ./testing/test.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-addons package (part of the tikzlings collection)
+% A package to draw litlle things with tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-addons}
+ [2019/04/07 v0.2 Draw additional items for the tikzlings]
+
+\RequirePackage{tikz}
+\usetikzlibrary{patterns} % for the wizard hat
+
+\newcommand*{\thing}[1][]{%
+ \begin{scope}%
+ \tikzset{/thing/.cd,#1}%
+ \thing@draw%
+ \end{scope}%
+}
+
+% Hats %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifthing@hat
+\newif\ifthing@tophat
+\newif\ifthing@beret
+\newif\ifthing@strawhat
+\newif\ifthing@harlequin
+\newif\ifthing@witch
+\newif\ifthing@magichat
+\newif\ifthing@crown
+\newif\ifthing@queencrown
+\newif\ifthing@kingcrown
+\newif\ifthing@santa
+\newif\ifthing@chef
+\newif\ifthing@graduate
+\newif\ifthing@alien
+% Communication %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifthing@book
+\newif\ifthing@signpost
+\newif\ifthing@speech
+\newif\ifthing@think
+% Food %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifthing@pizza
+\newif\ifthing@davidlikespineapplepizza
+\newif\ifthing@cheese
+\newif\ifthing@baguette
+\newif\ifthing@cake
+\newif\ifthing@icecream
+\newif\ifthing@milkshake
+\newif\ifthing@wine
+\newif\ifthing@cocktail
+% Sport %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifthing@cricket
+\newif\ifthing@hockey
+\newif\ifthing@football
+% Other %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifthing@crystalball
+\newif\ifthing@magicwand
+\newif\ifthing@rollingpin
+\newif\ifthing@lightsaber
+\newif\ifthing@torch
+\newif\ifthing@basket
+\newif\ifthing@easter
+\newif\ifthing@crozier
+\newif\ifthing@shovel
+\newif\ifthing@pickaxe
+\newif\ifthing@umbrella
+\newif\ifthing@umbrellaclosed
+\newif\ifthing@handbag
+
+\tikzset{%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % General
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /thing/.search also={%
+ /tikz,/pgf,
+ /bear,/coati,/koala,/marmot,/mouse,/owl,/penguin,/snowman,/mole,/sloth,/pig,/cat,/hippo,/rhino,/panda,
+ },
+ %/thing/.unknown/.code=\relax, % bad idea, prevents tikz/pgf keys
+ /thing/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Hats
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ hat/.code = \thing@hattrue
+ \def\thing@hat{#1},
+ hat/.default = blue!40!black,
+ tophat/.code = \thing@tophattrue
+ \def\thing@tophat{#1},
+ top hat/.forward to = /thing/tophat,
+ tophat/.default = black!90!white,
+ beret/.code = \thing@berettrue
+ \def\thing@beret{#1},
+ beret/.default = black,
+ strawhat/.code = \thing@strawhattrue
+ \def\thing@strawhat{#1},
+ straw hat/.forward to = /thing/strawhat,
+ strawhat/.default = gray!30!white,
+ ribbon/.code = \def\thing@ribbon{#1},
+ ribbon = black,
+ harlequin/.code = \thing@harlequintrue
+ \def\thing@harlequin{#1},
+ harlequin/.default = blue,
+ niuqelrah/.code = \def\thing@niuqelrah{#1},
+ niuqelrah = red,
+ witch/.code = \thing@witchtrue
+ \def\thing@witch{#1},
+ witch/.default = black,
+ magichat/.code = \thing@magichattrue
+ \def\thing@magichat{#1},
+ magic hat/.forward to = /thing/magichat,
+ magichat/.default = violet,
+ magicstars/.code = \def\thing@magicstars{#1},
+ magic stars/.forward to = /thing/magicstars,
+ magicstars = yellow!80!brown,
+ crown/.code = \thing@crowntrue
+ \def\thing@crown{#1},
+ crown/.default = yellow!90!orange,
+ queencrown/.code = \thing@queencrowntrue
+ \def\thing@queencrown{#1},
+ queen crown/.forward to = /thing/queencrown,
+ queencrown/.default = yellow,
+ kingcrown/.code = \thing@kingcrowntrue
+ \def\thing@kingcrown{#1},
+ king crown/.forward to = /thing/kingcrown,
+ kingcrown/.default = gray,
+ santa/.code = \thing@santatrue
+ \def\thing@santa{#1},
+ santa/.default = red!80!black,
+ chef/.code = \thing@cheftrue
+ \def\thing@chef{#1},
+ chef/.default = gray!20!white,
+ graduate/.code = \thing@graduatetrue
+ \def\thing@graduate{#1},
+ graduate/.default = black,
+ tassel/.code = \def\thing@tassel{#1},
+ tassel = red,
+ alien/.code = \thing@alientrue
+ \def\thing@alien{#1},
+ alien/.default = green,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Communication
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ book/.code = \thing@booktrue
+ \def\thing@book{#1},
+ bookcolour/.code = \def\thing@bookcolour{#1},
+ book colour/.forward to = /thing/bookcolour,
+ book color/.forward to = /thing/bookcolour,
+ bookcolor/.forward to = /thing/bookcolour,
+ bookcolour = brown,
+ signpost/.code = \thing@signposttrue
+ \def\thing@signpost{#1},
+ sign post/.forward to = /thing/signpost,
+ signcolour/.code = \def\thing@signcolour{#1},
+ sign colour/.forward to = /thing/signcolour,
+ sign color/.forward to = /thing/signcolour,
+ signcolor/.forward to = /thing/signcolour,
+ signcolour = brown!50!black,
+ signback/.code = \def\thing@signback{#1},
+ sign back/.forward to = /thing/signback,
+ signback = green!40!black,
+ speech/.code = \thing@speechtrue
+ \def\thing@speech{#1},
+ think/.code = \thing@thinktrue
+ \def\thing@think{#1},
+ bubblecolour/.code = \def\thing@bubblecolour{#1},
+ bubble colour/.forward to = /thing/bubblecolour,
+ bubble color/.forward to = /thing/bubblecolour,
+ bubblecolor/.forward to = /thing/bubblecolour,
+ bubblecolour = gray!30!white,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Food
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ pizza/.code = \thing@pizzatrue,
+ davidlikespineapplepizza/.code = \thing@davidlikespineapplepizzatrue
+ \thing@speechtrue
+ \def\thing@speech{\scalebox{\scalingfactor}{\scalebox{0.9}{\tiny ih, che schifo!}}},
+ david likes pineapple pizza/.forward to = /thing/davidlikespineapplepizza,
+ cheese/.code = \thing@cheesetrue
+ \def\thing@cheese{#1},
+ cheese/.default = yellow!30!orange!60!white,
+ baguette/.code = \thing@baguettetrue
+ \def\thing@baguette{#1},
+ baguette/.default = brown,
+ cake/.code = \thing@caketrue
+ \def\thing@cake{#1},
+ cake/.default = violet,
+ icecream/.code = \thing@icecreamtrue
+ \def\thing@cone{#1},
+ ice cream/.forward to = /thing/icecream,
+ icecream/.default = brown!60!gray,
+ flavoura/.code = \def\thing@flavoura{#1},
+ flavour a/.forward to = /thing/flavoura,
+ flavoura = brown!50!black,
+ flavourb/.code = \def\thing@flavourb{#1},
+ flavour b/.forward to = /thing/flavourb,
+ flavourb = white!70!brown,
+ flavourc/.code = \def\thing@flavourc{#1},
+ flavour c/.forward to = /thing/flavourc,
+ flavourc = red!50!white,
+ milkshake/.code = \thing@milkshaketrue
+ \def\thing@milkshake{#1},
+ milkshake/.default = red!20!white,
+ wine/.code = \thing@winetrue
+ \def\thing@wine{#1},
+ wine/.default = red!70!black,
+ cocktail/.code = \thing@cocktailtrue,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Sport
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ cricket/.code = \thing@crickettrue
+ \def\thing@cricket{#1},
+ cricket/.default = brown,
+ hockey/.code = \thing@hockeytrue
+ \def\thing@hockey{#1},
+ hockey/.default = brown,
+ football/.code = \thing@footballtrue
+ \def\thing@football{#1},
+ football/.default = white,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % other items
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ crystalball/.code = \thing@crystalballtrue
+ \def\thing@crystalball{#1},
+ crystal ball/.forward to = /thing/crystalball,
+ crystalball/.default = cyan,
+ magicwand/.code = \thing@magicwandtrue,
+ magic want/.forward to = /thing/magicwand,
+ rollingpin/.code = \thing@rollingpintrue
+ \def\thing@rollingpin{#1},
+ rolling pin/.forward to = /thing/rollingpin,
+ rollingpin/.default = brown,
+ lightsaber/.code = \thing@lightsabertrue
+ \def\thing@lightsaber{#1},
+ light saber/.forward to = /thing/lightsaber,
+ lightsaber/.default = green,
+ torch/.code = \thing@torchtrue
+ \def\thing@torch{#1},
+ torch/.default = gray,
+ basket/.code = \thing@baskettrue
+ \def\thing@basket{#1},
+ basket/.default = brown!70!gray,
+ easter/.code = \thing@eastertrue
+ \thing@baskettrue
+ \def\thing@basket{#1},
+ easter/.default = brown!70!gray,
+ egga/.code = \def\thing@egga{#1},
+ egg a/.forward to = /thing/egga,
+ egga = blue,
+ eggb/.code = \def\thing@eggb{#1},
+ egg b/.forward to = /thing/eggb,
+ eggb = green,
+ eggc/.code = \def\thing@eggc{#1},
+ egg c/.forward to = /thing/eggc,
+ eggc = red,
+ crozier/.code = \thing@croziertrue
+ \def\thing@crozier{#1},
+ crozier/.default = brown,
+ shovel/.code = \thing@shoveltrue
+ \def\thing@shovel{#1},
+ shovel/.default = gray,
+ pickaxe/.code = \thing@pickaxetrue
+ \def\thing@pickaxe{#1},
+ pickaxe/.default = gray,
+ umbrella/.code = \thing@umbrellatrue
+ \def\thing@umbrella{#1},
+ umbrella/.default = cyan,
+ umbrellaclosed/.code = \thing@umbrellaclosedtrue
+ \def\thing@umbrellaclosed{#1},
+ umbrellaclosed/.default = cyan,
+ umbrella closed/.forward to = /thing/umbrellaclosed,
+ handbag/.code = \thing@handbagtrue
+ \def\thing@handbag{#1},
+ handbag/.default = red!70!black,
+}
+
+\def\thing@draw{%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Hats
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@hat
+ \fill[\thing@hat,rotate around={-15:(-0.3,2.01)}] (-0.3,2.01) rectangle (0.46,2.31);
+ \fill[\thing@hat,rotate around={-15:(0.05,1.92)}] (0.05,1.92) ellipse (0.6 and 0.1);
+ \fill[\thing@hat,rotate around={-15:(0.14,2.2)}] (0.14,2.2) ellipse (0.37 and 0.08);
+\fi
+%
+% Tophat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@tophat
+ \fill[\thing@tophat,rotate around={-15:(0.1,1.94)}] (0.1,1.94) ellipse (0.48 and 0.1);
+ \fill[\thing@tophat,rotate around={-15:(0.15,2.165)}] (-0.17, 1.94) -- (0.46, 1.94) -- (0.52, 2.39) -- (-0.22, 2.39) -- cycle;
+ \fill[\thing@tophat,rotate around={-15:(0.21,2.385)}] (0.21,2.385) ellipse (0.37 and 0.08);
+\fi
+%
+% Beret %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@beret
+ \begin{scope}[xshift=-19,yshift=-2,rotate=10]
+ \fill[\thing@beret,rotate=-25] (0.13,2.15) ellipse (0.5 and 0.17);
+ \fill[\thing@beret,rotate=-25] (0.13,2.25) ellipse (0.55 and 0.17);
+ \fill[\thing@beret,rotate=-25] (0.13,2.4) circle (0.08);
+ \end{scope}
+\fi
+%
+% Straw hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@strawhat
+ \begin{scope}[xshift=-16,rotate=12,yshift=-1]
+ \fill[\thing@strawhat,rotate=-15] (0.44,2.0) ellipse (0.75 and 0.1);
+ \fill[\thing@strawhat,rotate=-15] (0.1,2.05) rectangle (0.78,2.5);
+ \fill[\thing@strawhat,rotate=-15] (0.44,2.5) ellipse (0.34 and 0.08);
+ \fill[\thing@strawhat,rotate=-15] (-0.3,2.02) -- (1.18,2.02) -- (0.78,2.2) -- (0.1,2.2) -- cycle;
+ \fill[\thing@ribbon,rotate=-15] (0.44,2.2) ellipse (0.34 and 0.08);
+ \fill[\thing@ribbon,rotate=-15] (0.1,2.2) rectangle (0.78,2.3);
+ \fill[\thing@strawhat,rotate=-15] (0.44,2.3) ellipse (0.34 and 0.08);
+ \end{scope}
+\fi
+%
+% Harlequin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@harlequin
+ \begin{scope}[xshift=-26]
+ \path (0.19,1.85) rectangle (1.85,2.67);
+ \begin{pgfinterruptboundingbox}
+ \fill[\thing@harlequin] (0.6006,1.9719) .. controls (0.7432,1.8954) and (0.9320,1.8698) .. (0.9320,1.8698) -- (1.0404,2.3839) .. controls (0.9223,2.8873) and (0.1755,2.5634) .. (0.3019,2.2958) .. controls (0.5807,2.5024) and (0.7251,2.3376) .. (0.6006,1.9719) -- cycle;
+ \fill[\thing@niuqelrah] (1.2853,1.8902) .. controls (1.1177,1.8507) and (0.9278,1.8703) .. (0.9278,1.8703) -- (1.0404,2.3839) .. controls (1.3637,2.8347) and (1.9373,2.3532) .. (1.7049,2.1284) .. controls (1.5267,2.3895) and (1.3204,2.2666) .. (1.2853,1.8902) -- cycle;
+ \end{pgfinterruptboundingbox}
+ \fill[\thing@harlequin] (1.7,2.07) circle (0.1);
+ \fill[\thing@niuqelrah] (0.3,2.23) circle (0.1);
+ \end{scope}
+\fi
+%
+% witch %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@witch
+ \begin{scope}[xshift=-26]
+ \fill[\thing@witch,rotate=-15] (0.44,2.13) ellipse (0.75 and 0.17);
+ \fill[\thing@witch,rotate=-15] (0.05,2.2)--(0.45,3.2)--(0.82,2.2);
+ \end{scope}
+\fi
+%
+% magic hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@magichat
+ \begin{scope}[xshift=-26]
+ \path[preaction={fill, \thing@magichat!100},rotate=-5,
+ pattern=fivepointed stars, pattern color=\thing@magicstars!100]
+ (0.36,1.95)--(0.86,2.95)--(1.20,1.85);
+ \end{scope}
+\fi
+%
+% crown %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@crown
+ \fill[\thing@crown] (-0.1885,2.0616) .. controls (-0.1885,2.0616) and (-0.1479,2.1763) .. (-0.2291,2.465) -- (-0.0355,2.2378) -- (0.1141,2.3943) -- (0.201,2.1961) -- (0.4688,2.3318) .. controls (0.2677,2.1132) and (0.2944,1.9764) .. (0.2944, 1.9764) .. controls (0.1524,1.9202) and (-0.0743,1.9601) .. (-0.1885,2.0616) -- cycle;
+\fi
+%
+% Queen crown %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@queencrown
+ \begin{scope}[xshift=-26]
+ \fill[\thing@queencrown] (0.7370,2.0732) .. controls (0.6966,2.2091) and (0.6769,2.3503) ..
+ (0.6354,2.4859) .. controls (0.6149,2.5164) and (0.5958,2.5732) ..
+ (0.6498,2.5808) .. controls (0.6973,2.5907) and (0.7091,2.5350) ..
+ (0.6926,2.5016) .. controls (0.6967,2.4544) and (0.7188,2.4109) ..
+ (0.7340,2.3665) .. controls (0.7415,2.3472) and (0.7619,2.2862) ..
+ (0.7676,2.3381) .. controls (0.7755,2.3852) and (0.7871,2.4329) ..
+ (0.7833,2.4808) .. controls (0.7597,2.5148) and (0.7834,2.5720) ..
+ (0.8294,2.5570) .. controls (0.8775,2.5457) and (0.8536,2.4937) ..
+ (0.8436,2.4638) .. controls (0.8502,2.3973) and (0.8640,2.3313) ..
+ (0.8798,2.2664) .. controls (0.9047,2.2750) and (0.9168,2.3261) ..
+ (0.9342,2.3514) .. controls (0.9492,2.3853) and (0.9714,2.4171) ..
+ (0.9773,2.4540) .. controls (0.9645,2.4873) and (0.9766,2.5358) ..
+ (1.0204,2.5303) .. controls (1.0646,2.5298) and (1.0691,2.4725) ..
+ (1.0443,2.4460) .. controls (1.0440,2.3935) and (1.0580,2.3419) ..
+ (1.0671,2.2905) .. controls (1.0706,2.2719) and (1.0788,2.2126) ..
+ (1.0985,2.2554) .. controls (1.1269,2.3087) and (1.1558,2.3623) ..
+ (1.1772,2.4187) .. controls (1.1697,2.4515) and (1.1716,2.5081) ..
+ (1.2210,2.5018) .. controls (1.2706,2.4969) and (1.2686,2.4403) ..
+ (1.2406,2.4126) .. controls (1.2279,2.3600) and (1.2211,2.3057) ..
+ (1.2172,2.2518) .. controls (1.2296,2.2439) and (1.2538,2.2943) ..
+ (1.2693,2.3112) .. controls (1.2908,2.3467) and (1.3228,2.3784) ..
+ (1.3316,2.4200) .. controls (1.3203,2.4624) and (1.3708,2.5014) ..
+ (1.4051,2.4678) .. controls (1.4448,2.4342) and (1.3945,2.3994) ..
+ (1.3765,2.3710) .. controls (1.3022,2.2536) and (1.2440,2.1265) ..
+ (1.1686,2.0097) .. controls (0.9649,1.9465) and (0.8367,1.9955) ..
+ (0.7370,2.0732) -- cycle;
+ \end{scope}
+\fi
+%
+% King crown %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@kingcrown
+ \begin{scope}[xshift=-26]
+ \fill[\thing@kingcrown] (0.6572,2.0396) .. controls (0.6637,2.0838) and (0.6716,2.1289) ..
+ (0.6684,2.1735) .. controls (0.6481,2.2496) and (0.5923,2.3131) ..
+ (0.5818,2.3921) .. controls (0.5738,2.4607) and (0.6167,2.5343) ..
+ (0.6862,2.5502) .. controls (0.7548,2.5703) and (0.8210,2.5304) ..
+ (0.8720,2.4881) .. controls (0.8984,2.4712) and (0.9239,2.4324) ..
+ (0.9486,2.4249) .. controls (0.9524,2.4691) and (0.9566,2.5158) ..
+ (0.9844,2.5527) .. controls (1.0052,2.5845) and (1.0390,2.6282) ..
+ (1.0820,2.6127) .. controls (1.1212,2.5899) and (1.1378,2.5421) ..
+ (1.1478,2.5003) .. controls (1.1576,2.4639) and (1.1336,2.4180) ..
+ (1.1349,2.3906) .. controls (1.2050,2.4269) and (1.2847,2.4629) ..
+ (1.3654,2.4429) .. controls (1.4292,2.4285) and (1.4864,2.3679) ..
+ (1.4793,2.2998) .. controls (1.4859,2.2404) and (1.4407,2.1925) ..
+ (1.4006,2.1551) .. controls (1.3681,2.1232) and (1.3290,2.0951) ..
+ (1.3072,2.0544) .. controls (1.2904,2.0121) and (1.2805,1.9674) ..
+ (1.2738,1.9225) .. controls (1.1221,1.8892) and (0.9586,1.8836) ..
+ (0.8112,1.9386) .. controls (0.7535,1.9608) and (0.6999,1.9945) ..
+ (0.6572,2.0396) -- cycle;
+ \end{scope}
+\fi
+%
+% Santa %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@santa
+ \begin{scope}[xshift=-26]
+ \fill[\thing@santa]
+ (0.430,1.803) .. controls (0.590,2.174) and (0.837,2.065) ..
+ (1.118,1.954) .. controls (1.679,1.731) and (1.328,1.193) ..
+ (1.647,1.057) .. controls (1.638,1.255) and (1.745,2.104) ..
+ (1.168,2.270) .. controls (0.867,2.356) and (0.536,2.280) ..
+ (0.430,1.803) -- cycle;
+ \fill[white!80!brown]
+ (0.44,1.733) .. controls (0.211,2.299) and (1.082,2.188) ..
+ (1.456,1.759) .. controls (1.534,1.637) and (1.480,1.545) ..
+ (1.400,1.566) .. controls (1.265,1.714) and (0.577,2.267) ..
+ (0.44,1.733) -- cycle;
+ \fill[white!80!brown] (1.6,1.0) circle (0.17);
+ \end{scope}
+\fi
+%
+% Chef hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@chef
+ \begin{scope}[xshift=-26]
+ \fill[\thing@chef,rotate=-15] (0.44,2.1) ellipse (0.37 and 0.08);
+ \fill[\thing@chef,rotate=-15] (0.07,2.1) rectangle (0.81,2.55);
+ \fill[\thing@chef] (1.01,2.47) circle (0.17);
+ \fill[\thing@chef] (1.24,2.35) circle (0.15);
+ \fill[\thing@chef] (0.77,2.40) circle (0.12);
+ \fill[\thing@chef] (1.39,2.20) circle (0.12);
+ \end{scope}
+\fi
+%
+% graduate hat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@graduate
+ \begin{scope}[xshift=-26]
+ \fill[\thing@graduate,rotate=-15] (0.44,2.1) ellipse (0.37 and 0.1);
+ \fill[\thing@graduate,rotate=-15] (0.07,2.1) rectangle (0.81,2.3);
+ \fill[\thing@graduate] (0.3,2.25) -- (1.05,2.35) -- (1.7,1.95) -- (0.92,1.85) -- cycle;
+ \fill[\thing@tassel,rounded corners=\scalingfactor*1] (1.12,1.89) -- (1.01,2.1) -- (1.09,2.11) -- (1.2,1.9) -- (1.2,1.3) -- (1.12,1.3) -- cycle;
+ \fill[\thing@tassel] (1.16,1.3) ellipse (0.06 and 0.12);
+ \end{scope}
+\fi
+%
+% alien %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@alien
+ \fill[\thing@alien,rotate around={15:(-0.175,2.115)}] (-0.2,1.93) rectangle (-0.15,2.3);
+ \fill[\thing@alien,rotate around={-15:(0.175,2.115)}] (0.2,1.93) rectangle (0.15,2.3);
+ \fill[\thing@alien] (-0.22,2.30) circle (0.07);
+ \fill[\thing@alien] (0.22,2.30) circle (0.07);
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Communication
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% book %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@book
+ \begin{scope}[xshift=-25,yshift=1]
+ \fill[\thing@bookcolour,rotate=-20]
+ (0.40,1.20) rectangle (0.80,0.60);
+ \node[rotate=-20*\yscalefactor/\xscalefactor, color=white] at (0.88,0.70) {\thing@book};%
+ \end{scope}
+\fi
+%
+% signpost %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@signpost
+ \begin{scope}[scale=1.7,xshift=-26,yshift=-7]
+ \fill[\thing@signcolour, rounded corners=\scalingfactor*1, rotate=-20] (0.8,0.75) rectangle (0.9,1.75);
+ \fill[\thing@signcolour, rounded corners=\scalingfactor*1, rotate=-20] (0.4,1.7) rectangle (1.3,2.4);
+ \fill[\thing@signback, rounded corners=\scalingfactor*1, rotate=-20] (0.45,1.75) rectangle (1.25,2.35);
+ \node[rotate=-20*\yscalefactor/\xscalefactor, color=white] at (1.5,1.65) {\thing@signpost};
+ \end{scope}
+\fi
+%
+% speech bubble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@speech
+ \begin{scope}[xshift=-26]
+ \fill[\thing@bubblecolour] (-0.5,1.8) ellipse (0.7 and 0.3);
+ \fill[\thing@bubblecolour] (-0.2,1.54) -- (0.2,1.35) -- (0.0,1.6) -- cycle;
+ \node at (-0.5,1.8) {\thing@speech};
+ \end{scope}
+\fi
+%
+% think bubble %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@think
+ \begin{scope}[xshift=-26]
+ \fill[\thing@bubblecolour] (2,2.4) ellipse (0.7 and 0.35);
+ \fill[\thing@bubblecolour] (1.55,2.35) circle (0.25) (2.0,2.15) circle (0.25) (2.4,2.25) circle (0.25) (1.6,2.55) circle (0.25) (2.0,2.6) circle (0.25) (2.35,2.5) circle (0.25) (1.65,1.95) circle (0.1) (1.55,1.80) circle (0.06) (1.47,1.70) circle (0.03);
+ \node at (2,2.4) {\thing@think};
+ \end{scope}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Food
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% pizza %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@pizza
+ \begin{scope}[xshift=-28,yshift=2]
+ \fill[brown] (1.00,0.60) ellipse (0.4 and 0.2);
+ \fill[red!70!black] (1.00,0.60) ellipse (0.34 and 0.16);
+ \fill[white!85!yellow] (1.15,0.65) ellipse (0.065 and 0.04);
+ \fill[white!85!yellow] (0.81,0.57) ellipse (0.065 and 0.04);
+ \fill[white!85!yellow] (0.95,0.68) ellipse (0.065 and 0.04);
+ \fill[white!85!yellow] (1.02,0.54) ellipse (0.065 and 0.04);
+ \fill[green!40!brown] (1.09,0.54) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=20] (1.0,0.34) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=-20] (0.9,1.05) ellipse (0.07 and 0.02);
+ \fill[green!40!brown] (1.00,0.60) ellipse (0.03 and 0.06);
+ \end{scope}
+\fi
+% no pizza %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@davidlikespineapplepizza
+ \begin{scope}[xshift=-28,yshift=2]
+ \fill[brown] (1.00,0.60) ellipse (0.4 and 0.2);
+ \fill[red!70!black] (1.00,0.60) ellipse (0.34 and 0.16);
+ \fill[yellow!70!brown] (1.15,0.65) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (1.15,0.65) ellipse (0.04 and 0.03);
+ \fill[yellow!70!brown] (0.81,0.57) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (0.81,0.57) ellipse (0.04 and 0.03);
+ \fill[yellow!70!brown] (0.95,0.68) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (0.95,0.68) ellipse (0.04 and 0.03);
+ \fill[yellow!70!brown] (1.02,0.54) ellipse (0.08 and 0.06);
+ \fill[red!70!black] (1.02,0.54) ellipse (0.04 and 0.03);
+ \fill[green!40!brown] (1.09,0.54) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=20] (1.0,0.34) ellipse (0.07 and 0.02);
+ \fill[green!40!brown,rotate=-20] (0.9,1.05) ellipse (0.07 and 0.02);
+ \fill[green!40!brown] (1.00,0.60) ellipse (0.03 and 0.06);
+ \end{scope}
+\fi
+%
+% Cheese %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@cheese
+ \fill[\thing@cheese] (-0.3200,0.8058) -- (0.0608,0.7220) -- (0.0608,0.6366) -- (-0.3200,0.5410) -- (0.2143,0.4236) .. controls (0.3395,0.4810) and (0.4241,0.5627) .. (0.4117,0.6253) -- (0.4117,0.7634) .. controls (0.4261,0.8618) and (0.2607,0.8954) .. (0.1907,0.8962) -- cycle;
+ \fill[\thing@cheese!35!white] (-0.3200,0.8057) -- (-0.3200,0.5410) -- (0.2143,0.4236) -- (0.2143,0.7381) -- cycle;
+ \fill[\thing@cheese] (-0.23,0.71) circle (0.04) (0.0,0.55) circle (0.04) (-0.23,0.58) circle (0.02) (-0.15,0.6) circle (0.02) (-0.1,0.7) circle (0.02) (0.1,0.65) circle (0.02) (0,0.65) circle (0.02) (0.1,0.5) circle (0.02) (0.07,0.55) circle (0.01) (0.12,0.6) circle (0.01) (-0.08,0.54) circle (0.01);
+\fi
+%
+% baguette %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@baguette
+ \begin{scope}[xshift=-38,yshift=7,rotate=-20]
+ \fill[\thing@baguette!70!white, rounded corners=\scalingfactor*4, rotate=-30] (0.4,0.72) rectangle (0.7,2.0);
+ \fill[\thing@baguette!80!black, rotate=5] (1.44,1.1) ellipse (0.1 and 0.03) (1.30,0.9) ellipse (0.1 and 0.03) (1.16,0.7) ellipse (0.1 and 0.03) (1.02,0.5) ellipse (0.1 and 0.03);
+ \end{scope}
+\fi
+%
+% cake %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@cake
+ \begin{scope}[xshift=-28]
+ \fill[\thing@cake] (1.00,0.50) ellipse (0.4 and 0.2);
+ \fill[\thing@cake] (0.6,0.5) rectangle (1.4,0.7);
+ \fill[\thing@cake] (1.00,0.70) ellipse (0.4 and 0.2);
+ \fill[\thing@cake!50!white] (0.75,0.75) rectangle (0.8,0.95);
+ \fill[\thing@cake!50!white] (1.2,0.75) rectangle (1.25,0.95);
+ \fill[\thing@cake!50!white] (0.975,0.65) rectangle (1.025,0.85);
+ \fill[white!85!yellow] (1.0,0.93) ellipse (0.03 and 0.06);
+ \fill[white!85!yellow] (1.225,1.03) ellipse (0.03 and 0.06);
+ \fill[white!85!yellow] (0.775,1.03) ellipse (0.03 and 0.06);
+ \end{scope}
+\fi
+%
+% icecream %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@icecream
+ \begin{scope}[xshift=-26]
+ \fill[\thing@cone,rotate=-20] (0.35,1.20)--(0.50,0.60)--(0.75,1.20);
+ \fill[\thing@flavoura] (0.85,1.03) circle (0.12);
+ \fill[\thing@flavourb] (1.05,0.95) circle (0.12);
+ \fill[\thing@flavourc] (0.95,1.1) circle (0.12);
+ \end{scope}
+\fi
+%
+% milkshake %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@milkshake
+ \begin{scope}[xshift=-26]
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.55) ellipse (0.12 and 0.03);
+ \begin{scope}
+ \clip[rotate=-10] (0.58,0.5) rectangle (1.02,1.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.94) ellipse (0.18 and 0.4);
+ \fill[\thing@milkshake, rotate=-10] (0.8,0.94) ellipse (0.15 and 0.36);
+ \end{scope}
+ \fill[white!85!yellow] (0.83,0.92) circle (0.05) (0.88,0.9) circle (0.05) (0.93,0.92) circle (0.05) (0.99,0.91) circle (0.05) (1.06,0.86) circle (0.05) (1.13,0.87) circle (0.05) (0.85,0.99) circle (0.05) (0.9,0.98) circle (0.07) (1.0,0.98) circle (0.07) (1.1,0.95) circle (0.07);
+ \fill[red!90!black] (1.0,1.1) circle (0.05);
+ \fill[white!85!yellow] (0.94,1.05) circle (0.05) (1.03,1.03) circle (0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[red!90!black,rotate=20] (1.2,0.58) rectangle (1.22,0.85);
+ \end{scope}
+\fi
+%
+% wine %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@wine
+ \begin{scope}[xshift=-26,yshift=2]
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.55) ellipse (0.12 and 0.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.7) ellipse (0.03 and 0.2);
+ \begin{scope}
+ \clip[rotate=-10] (0.58,0.5) rectangle (1.02,1.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,1.1) ellipse (0.18 and 0.4);
+ \end{scope}
+ \begin{scope}
+ \clip[rotate=-10] (0.58,0.5) rectangle (1.02,0.87);
+ \fill[\thing@wine, rotate=-10] (0.8,1.1) ellipse (0.15 and 0.36);
+ \end{scope}
+ \end{scope}
+\fi
+%
+% cocktail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@cocktail
+\begin{scope}[xshift=-26,yshift=3]
+ \fill[cyan!10!white, rotate=-10] (0.8,0.50) ellipse (0.17 and 0.05);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.55) ellipse (0.12 and 0.03);
+ \fill[cyan!10!white, rotate=-10] (0.8,0.7) ellipse (0.03 and 0.2);
+ \fill[cyan!10!white] (0.92,0.6) -- (0.75,0.9) -- (1.18,0.83) -- cycle;
+ \fill[gray!60!white] (0.928,0.64) -- (0.85,0.77) -- (1.08,0.77) -- cycle;
+ \fill[green!40!brown!60!white] (0.94,0.71) circle (0.04);
+ \fill[red!80!black] (0.94,0.72) circle (0.01);
+ \end{scope}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Sport
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% cricket bat %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@cricket
+ \begin{scope}[xshift=-26]
+ \fill[\thing@cricket, rounded corners=\scalingfactor*2, rotate=-30] (0.4,1.2) rectangle (0.7,2.2);
+ \fill[\thing@cricket, rounded corners=\scalingfactor*1, rotate=-30] (0.5,0.8) rectangle (0.6,1.3);
+ \end{scope}
+\fi
+%
+% Hockey stick %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@hockey
+ \begin{scope}[xshift=-22]
+ \fill[\thing@hockey, rounded corners=\scalingfactor*1, rotate=-30] (0.5,0.6) rectangle (0.6,2.1);
+ \fill[\thing@hockey, rounded corners=\scalingfactor*3] (0.2,0.2) rectangle (0.85,0.4);
+ \end{scope}
+\fi
+%
+% football %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@football
+ \begin{scope}[xshift=-26]
+ \fill[\thing@football] (1.2,0.33) circle (0.32);
+ \begin{scope}
+ \clip (1.2,0.33) circle (0.32);
+ \fill[black] (1.06,0.30) -- (1.01,0.17) -- (1.14,0.08) -- (1.26,0.14) -- (1.20,0.28) -- cycle (1.37,0.14) -- (1.46,0.27) -- (1.59,0.27) -- (1.41,0.04) -- cycle (1.28,0.38) -- (1.22,0.52) -- (1.33,0.61) -- (1.45,0.51) -- (1.43,0.37) -- cycle (0.87,0.44) -- (1.02,0.40) -- (1.10,0.53) -- (1.07,0.62) -- (0.94,0.57) -- cycle;
+ \end{scope}
+ \end{scope}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% other items
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% crystal ball %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@crystalball
+ \shade[ball color=\thing@crystalball,opacity=0.7] (0,0.8) circle (0.33);
+\fi
+%
+% magic wand %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@magicwand
+ \begin{scope}[xshift=-16,yshift=2]
+ \fill[black,rotate=-30] (0.27,1.23) rectangle (0.37,0.65);
+ \fill[white,rotate=-30] (0.27,1.13) rectangle (0.37,1.03);
+ \end{scope}
+\fi
+%
+% rollingpin %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@rollingpin
+ \begin{scope}[xshift=-30,yshift=2]
+ \fill[\thing@rollingpin, rounded corners=\scalingfactor*2, rotate=-60] (-0.18,0.85) rectangle (0.08,1.75);
+ \fill[\thing@rollingpin, rounded corners=\scalingfactor*1, rotate=-60] (-0.1,0.65) rectangle (0.0,1.95);
+ \end{scope}
+\fi
+%
+% lightsaber %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@lightsaber
+ \begin{scope}[xshift=-26]
+ \fill[\thing@lightsaber, rounded corners=\scalingfactor*1, rotate=-30] (0.5,0.9) rectangle (0.6,2.5);
+ \fill[gray!80!black, rounded corners=\scalingfactor*1, rotate=-30] (0.47,0.7) rectangle (0.63,1.2);
+ \end{scope}
+\fi
+%
+% torch %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@torch
+ \begin{scope}[xshift=-26]
+ \fill[red!50!yellow]
+ (1.4338,1.025) .. controls (1.4308,0.8877) and (1.3468,0.8997) ..
+ (1.2447,0.748) .. controls (1.1427,0.8982) and (1.0721,0.8892) ..
+ (1.0646,1.024) .. controls (1.0541,1.1714) and (1.2642,1.1654) ..
+ (1.2492,1.386) .. controls (1.3093,1.3110) and (1.4383,1.2705) ..
+ (1.4338,1.025) -- cycle;
+ \fill[red!25!yellow, scale=0.67, xshift=17, yshift=15]
+ (1.4338,1.025) .. controls (1.4308,0.8877) and (1.3468,0.8997) ..
+ (1.2447,0.748) .. controls (1.1427,0.8982) and (1.0721,0.8892) ..
+ (1.0646,1.024) .. controls (1.0541,1.1714) and (1.2642,1.1654) ..
+ (1.2492,1.386) .. controls (1.3093,1.3110) and (1.4383,1.2705) ..
+ (1.4338,1.025) -- cycle;
+ \fill[white!50!yellow, scale=0.4, xshift=53.5, yshift=45.3]
+ (1.4338,1.025) .. controls (1.4308,0.8877) and (1.3468,0.8997) ..
+ (1.2447,0.748) .. controls (1.1427,0.8982) and (1.0721,0.8892) ..
+ (1.0646,1.024) .. controls (1.0541,1.1714) and (1.2642,1.1654) ..
+ (1.2492,1.386) .. controls (1.3093,1.3110) and (1.4383,1.2705) ..
+ (1.4338,1.025) -- cycle;
+ \fill[\thing@torch,rounded corners=\scalingfactor*1]
+ (1.1,0.96) -- (0.77,0.25) -- (0.83,0.25) -- (1.3,0.86) -- cycle;
+ \fill[\thing@torch,rotate=-28] (0.62,1.32) ellipse (0.2 and 0.08);
+ \end{scope}
+\fi%
+%
+% basket %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@basket
+ \begin{scope}[xshift=-28.5]
+ \fill[\thing@basket, start angle=180, end angle=360, x radius=0.35, y radius=0.35] (0.65,0.61) arc -- cycle;
+ \fill[\thing@basket, start angle=180, end angle=0, even odd rule] [x radius=0.35, y radius=0.5] (0.65,0.6) arc -- cycle [x radius=0.3, y radius=0.45] (0.7,0.6) arc -- cycle;
+ \fill[\thing@basket, even odd rule] (1,0.6) ellipse (0.35 and 0.1) (1,0.6) ellipse (0.3 and 0.07);
+ \fill[\thing@basket!75!black] (1,0.6) ellipse (0.3 and 0.07);
+ \end{scope}
+\fi%
+%
+% easter basket %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@easter
+ \begin{scope}[xshift=-28.5]
+ \begin{scope}
+ \clip [start angle=180, end angle=0, x radius=0.3, y radius=0.45] (0.7,0.6) arc -- cycle [start angle=180, end angle=360, x radius=0.3, y radius=0.07] (0.7,0.6) arc -- cycle;
+ \fill[\thing@eggb, rotate=-5] (0.95,0.72) ellipse (0.09 and 0.13);
+ \fill[\thing@egga, rotate=10] (0.94,0.42) ellipse (0.09 and 0.13);
+ \fill[\thing@eggc, rotate=-30] (0.7,1.08) ellipse (0.09 and 0.13);
+ \end{scope}
+ \end{scope}
+\fi%
+%
+% crozier %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@crozier
+ \begin{scope}[xshift=-20]
+ \begin{scope}
+ \clip [rotate=-20] (0.6,2.3) rectangle (1.1,1.999);
+ \fill[even odd rule,\thing@crozier] (1.5,1.6) circle (0.2) (1.5,1.6) circle (0.1);
+ \end{scope}
+ \fill[\thing@crozier,rotate=-20] (0.663,0.5) rectangle (0.763,2.0);
+ \end{scope}
+\fi
+%
+% shovel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@shovel
+ \fill[brown!80!black,rotate around={-23:(0.11, 0.8)}] (0.07,0.2) rectangle ++(0.1,1.4);
+ \fill[\thing@shovel] (-0.21, 0.86) .. controls (0.02, 0.72) and (0.11, 0.66) .. (0.38, 0.58) -- (0.01, 0.04) .. controls (-0.17, 0.02) and (-0.28, 0.07) .. (-0.37, 0.21) -- cycle;
+\fi
+%
+% pickaxe %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@pickaxe
+ \fill[brown!80!black,rotate around={-23:(0.11, 0.8)}] (0.07,0.2) rectangle ++(0.1,1.4);
+ \fill[\thing@pickaxe] (-0.77, 0.57) .. controls (-0.14, 0.25) and (-0.02, 0.21) .. (0.60, 0.02) .. controls (-0.12, 0.03) and (-0.22, 0.10) .. (-0.77, 0.57) -- cycle;
+\fi
+%
+% umbrella %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@umbrella
+ \path (-0.8, 0.4) rectangle (1.2200000000000002, 2.7);
+ \begin{pgfinterruptboundingbox}
+ \fill[gray] (-0.3078, 0.5942) -- (-0.2574, 0.6103) .. controls (-0.1724, 0.3884) and (-0.1145, 0.4523) .. (-0.0667, 0.6543) -- (-0.0666, 0.6545) -- (-0.0665, 0.6547) .. controls (0.0347, 1.0671) and (0.2906, 1.9565) .. (0.2906, 1.9565) -- (0.3415, 1.9419) .. controls (0.3415, 1.9419) and (0.0855, 1.0519) .. (-0.0151, 0.6423) -- (-0.0152, 0.642) .. controls (-0.076, 0.3633) and (-0.2126, 0.3312) .. (-0.3078, 0.5942) -- cycle;
+ \fill[\thing@umbrella] (-0.7815, 1.9927) .. controls (-0.6441, 2.1962) and (-0.3163, 2.072) .. (-0.3239, 1.824) .. controls (-0.1602, 2.0111) and (0.1891, 1.9216) .. (0.1685, 1.6915) .. controls (0.3000, 1.8765) and (0.6639, 1.7626) .. (0.6607, 1.5356) .. controls (0.7865, 1.7271) and (1.135, 1.695) .. (1.1626, 1.4589) .. controls (1.4996, 2.5771) and (-0.4356, 3.2631) .. (-0.7815, 1.9927) -- cycle;
+ \end{pgfinterruptboundingbox}
+\fi
+%
+% closed umbrella %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@umbrellaclosed
+ \fill[gray] (0.5401, 0.7996) -- (0.4872, 0.8019) .. controls (0.484, 1.0395) and (0.4076, 0.9995) .. (0.293, 0.8264) -- (0.2929, 0.8262) -- (0.2928, 0.8261) .. controls (0.0555, 0.4739) and (0.1223, 0.5608) .. (0.1223, 0.5608) -- (0.0795, 0.592) .. controls (0.0795, 0.592) and (0.0131, 0.5057) .. (0.2488, 0.8554) -- (0.2489, 0.8556) .. controls (0.4022, 1.0963) and (0.5414, 1.0793) .. (0.5401, 0.7996) -- cycle;
+ \fill[\thing@umbrellaclosed] (-0.1173, 0.2263) -- (0.0038, 0.7188) -- (0.1548, 0.7494) -- (0.152, 0.9231) -- (0.3945, 0.7529) -- (0.2218, 0.6885) -- (0.2465, 0.5566) -- cycle;
+\fi
+%
+% handbag %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifthing@handbag
+ \fill[\thing@handbag] (0.5189, 0.1751) -- (-0.1913, 0.3097) -- (-0.0315, 0.7086) -- (0.5168, 0.6152) -- cycle;
+ \fill[\thing@handbag!70!black] (0.4143, 0.4354) .. controls (0.5139, 0.9811) and (0.1204, 1.0719) .. (0.0134, 0.5155) -- (0.0957, 0.4996) .. controls (0.1753, 0.8952) and (0.3949, 0.8883) .. (0.3324, 0.4536) -- cycle;
+\fi
+%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-bears.sty b/graphics/pgf/contrib/tikzlings/tikzlings-bears.sty
new file mode 100644
index 0000000000..c84c0a2b0a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-bears.sty
@@ -0,0 +1,128 @@
+% !TeX root = ./examples/bear.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-bears package (part of the tikzlings collection)
+% A package to bring little teddy bears into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-bears}
+ [2019/04/07 v0.2 Draw teddy bears in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\bear}[1][]{%
+ \begin{scope}%
+ \tikzset{/bear/.cd,#1}%
+ \bear@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifbear@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /bear/.search also={/tikz,/pgf,/thing},
+ /bear/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\bear@body{#1},
+ body = brown,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \bear@threeDtrue,
+}
+
+\def\bear@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.8, 0.0) rectangle (0.8, 2.13);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifbear@threeD
+ \def\bear@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\bear@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0.925)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bear@part@draw[\bear@body!70!black,rotate around={-50:(0.525,0.9)}] (0.525,0.9) ellipse (0.35 and 0.15);
+\bear@part@draw[\bear@body!70!black,rotate around={50:(-0.525,0.9)}] (-0.525,0.9) ellipse (0.35 and 0.15);
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bear@part@draw[\bear@body!70!black] (0,0.75) ellipse (0.55 and 0.65);
+\bear@part@draw[\bear@body!50!white] (0,0.7) ellipse (0.35 and 0.4);
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bear@part@draw[\bear@body!70!black] (0.425, 0.3) circle (0.28);
+\bear@part@draw[\bear@body!70!black] (-0.425, 0.3) circle (0.28);
+\bear@part@draw[\bear@body!50!white] (0.425, 0.3) circle (0.17);
+\bear@part@draw[\bear@body!50!white] (-0.425, 0.3) circle (0.17);
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bear@part@draw[\bear@body!70!black] (0.375, 1.95) circle (0.15);
+\bear@part@draw[\bear@body!70!black] (-0.375, 1.95) circle (0.15);
+\bear@part@draw[\bear@body!50!white] (0.375, 1.95) circle (0.1);
+\bear@part@draw[\bear@body!50!white] (-0.375, 1.95) circle (0.1);
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bear@part@draw[\bear@body!70!black] (0, 1.55) circle (0.5);
+%
+% Muzzle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bear@part@draw[\bear@body!50!white] (0, 1.4) ellipse (0.28 and 0.2);
+\bear@part@draw[\bear@body!70!white!80!red] (0, 1.5) ellipse (0.15 and 0.08);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\bear@part@draw[\bear@body!30!black] (-0.155, 1.7) circle (0.05);
+\bear@part@draw[\bear@body!30!black] (0.155, 1.7) circle (0.05);
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw[\bear@body!30!black,line width=\scalingfactor*0.4pt] (0.145, 1.38) arc [start angle=-20, end angle=-160, radius=0.16];
+%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-cats.sty b/graphics/pgf/contrib/tikzlings/tikzlings-cats.sty
new file mode 100644
index 0000000000..40787eabe5
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-cats.sty
@@ -0,0 +1,232 @@
+% !TeX root = ./examples/cat.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-cats package (part of the tikzlings collection)
+% A package to bring little cats into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-cats}
+ [2019/04/07 v0.2 Drawing cats in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\RequirePackage{ifluatex}
+\RequirePackage{ifxetex}
+
+\ifluatex
+ \let\pdfrandomseed\randomseed
+\fi
+
+\ifxetex
+ \pgfmathsetseed{\time}
+\else
+ \pgfmathsetseed{\number\pdfrandomseed}
+\fi
+
+\newcommand*{\cat}[1][]{%
+ \begin{scope}%
+ \tikzset{/cat/.cd,#1}%
+ \ifcat@schroedinger
+ \pgfmathparse{int(random(0,1))}
+ \let\cat@random=\pgfmathresult
+ \ifnum\cat@random=1
+ \cat@tombstone%
+ \else
+ \cat@draw%
+ \fi
+ \else
+ \cat@draw%
+ \fi
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifcat@threeD
+\newif\ifcat@schroedinger
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /cat/.search also={/tikz,/pgf,/thing},
+ /cat/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\cat@body{#1},
+ body = gray!30!black,
+ whiskers/.code = \def\cat@whiskers{#1},
+ whiskers = gray!50!white,
+ eyes/.code = \def\cat@eyes{#1},
+ eyes = yellow!80!orange,
+ pupil/.code = \def\cat@pupil{#1},
+ pupil = black,
+ pupilwidth/.code = \def\cat@pupil@width{#1}\edef\cat@pupil@offset{\strip@pt\dimexpr#1pt/4},
+ pupil width/.forward to = /cat/pupilwidth,
+ narrow pupils/.style = {pupil width = 0.005},
+ medium pupils/.style = {pupil width = 0.015},
+ wide pupils/.style = {pupil width = 0.025},
+ very wide pupils/.style = {pupil width = 0.050},
+ pupil width = 0.015,
+ paws/.code = \def\cat@paws{#1},
+ paws = \cat@body,
+ nose/.code = \def\cat@nose{#1},
+ nose = red!40!white!80!gray,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \cat@threeDtrue,
+ schroedinger/.code = \cat@schroedingertrue,
+}
+
+\def\cat@draw{%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.56,0.1) rectangle (1.63, 2.22);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifcat@threeD
+ \def\cat@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\cat@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{pgfinterruptboundingbox}
+ \cat@part@draw[\cat@body] (0.3, 0.5) .. controls (0.55, 0.87) and (0.73, 1.50) .. (1.05, 1.65) .. controls (1.32, 1.77) and (1.76, 1.34) .. (1.56,1.33) .. controls (0.92, 2.03) and (0.86, 0.60) .. (0.5, 0.37) -- cycle;
+\end{pgfinterruptboundingbox}
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cat@part@draw[\cat@body] (0.5462, 0.7155) .. controls (0.5462, 0.1823) and (0.3259, 0.17) .. (0, 0.17) .. controls (-0.3259, 0.17) and (-0.5462, 0.1823) .. (-0.5462, 0.7155) .. controls (-0.5554, 1.2487) and (-0.3075, 1.6768) .. (0, 1.6768) .. controls (0.3075, 1.6768) and (0.5554, 1.2487) .. (0.5462, 0.7155) -- cycle;
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cat@part@draw[\cat@body]
+(0.12, 2.0392) .. controls (0.16, 2.1584) and (0.37, 2.22) .. (0.37, 2.20) .. controls (0.37, 2.2) and (0.39, 1.9) .. (0.2721, 1.9) .. controls (0.1891, 1.88) and (0.12, 1.88) .. (0.12, 2.0392) -- cycle;
+\cat@part@draw[\cat@body]
+(-0.12, 2.0392) .. controls (-0.16, 2.1584) and (-0.37, 2.22) .. (-0.37, 2.20) .. controls (-0.37, 2.2) and (-0.39, 1.9) .. (-0.2721, 1.9) .. controls (-0.1891, 1.88) and (-0.12, 1.88) .. (-0.12, 2.0392) -- cycle;
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cat@part@draw[\cat@body] (0,1.64) circle (0.44);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cat@part@draw[\cat@eyes] (-0.1014, 1.7491) .. controls (-0.1014, 1.7491) and (-0.1451, 1.7171) .. (-0.1841, 1.7284) .. controls (-0.2231, 1.7397) and (-0.2427, 1.79) .. (-0.2427, 1.79) .. controls (-0.2427, 1.79) and (-0.1992, 1.8221) .. (-0.1602, 1.8108) .. controls (-0.1212, 1.7995) and (-0.1014, 1.7491) .. (-0.1014, 1.7491) -- cycle;
+\cat@part@draw[\cat@eyes] (0.1014, 1.7491) .. controls (0.1014, 1.7491) and (0.1451, 1.7171) .. (0.1841, 1.7284) .. controls (0.2231, 1.7397) and (0.2427, 1.79) .. (0.2427, 1.79) .. controls (0.2427, 1.79) and (0.1992, 1.8221) .. (0.1602, 1.8108) .. controls (0.1212, 1.7995) and (0.1014, 1.7491) .. (0.1014, 1.7491) -- cycle;
+%
+% Pupils %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cat@part@draw[\cat@pupil]
+ (-0.1720, 1.8071)
+ .. controls (-0.1720+\cat@pupil@width, 1.7827+\cat@pupil@offset) and (-0.1720+\cat@pupil@width, 1.7584-\cat@pupil@offset) .. (-0.1720, 1.7341)
+ .. controls (-0.1720-\cat@pupil@width, 1.7584-\cat@pupil@offset) and (-0.1720-\cat@pupil@width, 1.7827+\cat@pupil@offset) .. (-0.1720, 1.8071)
+ -- cycle;
+\cat@part@draw[\cat@pupil]
+ ( 0.1720, 1.8071)
+ .. controls ( 0.1720+\cat@pupil@width, 1.7827+\cat@pupil@offset) and ( 0.1720+\cat@pupil@width, 1.7584-\cat@pupil@offset) .. ( 0.1720, 1.7341)
+ .. controls ( 0.1720-\cat@pupil@width, 1.7584-\cat@pupil@offset) and ( 0.1720-\cat@pupil@width, 1.7827+\cat@pupil@offset) .. ( 0.1720, 1.8071)
+ -- cycle;
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw[\cat@whiskers,line width=\scalingfactor*0.2pt] (-0.16, 1.527) .. controls (-0.16, 1.527) and (-0.062, 1.420) .. ( 0.000, 1.556) .. controls ( 0.062, 1.420) and ( 0.16, 1.527) .. ( 0.16, 1.527);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cat@part@draw[\cat@nose] (-0.069, 1.6452) .. controls (-0.0524, 1.6613) and (0.0524, 1.6613) .. (0.069, 1.6452) .. controls (0.08, 1.625) and (0.0206, 1.55) .. (0, 1.55) .. controls (-0.0206, 1.55) and (-0.08, 1.625) .. (-0.069, 1.6452) -- cycle;
+%
+% Wiskers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\cat@whiskers] (0.0788, 1.5946) .. controls (0.1658, 1.6099) and (0.2086, 1.5439) .. (0.2956, 1.5286) -- (0.2956, 1.5386) .. controls (0.2097, 1.5537) and (0.1648, 1.6097) .. (0.0788, 1.5946) -- cycle;
+\fill[\cat@whiskers] (-0.0788, 1.5946) .. controls (-0.1658, 1.6099) and (-0.2087, 1.5439) .. (-0.2956, 1.5286) -- (-0.2956, 1.5386) .. controls (-0.2097, 1.5537) and (-0.1648, 1.6097) .. (-0.0788, 1.5946) -- cycle;
+\fill[\cat@whiskers] (0.0752, 1.6081) .. controls (0.1583, 1.6383) and (0.2171, 1.6109) .. (0.3002, 1.5807) -- (0.3002, 1.5907) .. controls (0.2174, 1.6208) and (0.158, 1.6382) .. (0.0752, 1.6081) -- cycle;
+\fill[\cat@whiskers] (-0.0752, 1.6081) .. controls (-0.1583, 1.6383) and (-0.2171, 1.6109) .. (-0.3002, 1.5807) -- (-0.3002, 1.5907) .. controls (-0.2174, 1.6208) and (-0.158, 1.6382) .. (-0.0752, 1.6081) -- cycle;
+\fill[\cat@whiskers] (0.0671, 1.6243) .. controls (0.1414, 1.6725) and (0.2182, 1.6964) .. (0.2925, 1.6482) -- (0.2925, 1.6582) .. controls (0.2179, 1.7066) and (0.1417, 1.6727) .. (0.0671, 1.6243) -- cycle;
+\fill[\cat@whiskers] (-0.0671, 1.6243) .. controls (-0.1414, 1.6725) and (-0.2182, 1.6964) .. (-0.2925, 1.6482) -- (-0.2925, 1.6582) .. controls (-0.2179, 1.7066) and (-0.1417, 1.6727) .. (-0.0671, 1.6243) -- cycle;
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\cat@part@draw[\cat@paws] (-0.255,0.3) circle (0.18);
+\cat@part@draw[\cat@paws] (0.255,0.3) circle (0.18);
+%
+}
+
+\def\cat@tombstone{%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.55,0.39) rectangle (0.55, 2.06);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Drawing the tomebstone
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Stone %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[gray] (-0.55,0.4) rectangle (0.55,1.5);
+\fill[gray] (0,1.5) circle (0.55);
+\node[scale=\scalingfactor] at (0,1.3) {R.I.P.};
+%
+% soil %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[brown!65!black] (1,0.15) arc [start angle=50, end angle=130, radius=1.56] -- cycle;
+%
+% flower
+\draw[green!50!brown,line width=\scalingfactor*0.4pt] (-0.01,0.3) arc [start angle=-15, end angle=30, radius=0.7];
+\fill[green!50!brown] (-0.1377, 0.7384) .. controls (-0.1775, 0.5828) and (-0.1479, 0.4649) .. (0.0072, 0.4246) .. controls (0.0570, 0.5636) and (-0.1529, 0.6447) .. (-0.1377, 0.7384) -- cycle;
+\fill[green!50!brown] (0.1527, 0.7334) .. controls (0.1925, 0.5778) and (0.1629, 0.4599) .. (0.0178, 0.4196) .. controls (-0.0420, 0.5586) and (0.1679, 0.6397) .. (0.1527, 0.7334) -- cycle;
+\foreach \i in {0,51.42857,...,359}{
+ \fill[yellow!50!white,rotate around={\i:(-0.0865, 0.8219)}] (-0.087, 0.822) .. controls (-0.087, 0.822) and (-0.1635, 0.6638) .. (-0.0818, 0.6653) .. controls (-0.0066, 0.6646) and (-0.087, 0.822) .. (-0.087, 0.822) -- cycle;
+}
+%
+}
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-coatis.sty b/graphics/pgf/contrib/tikzlings/tikzlings-coatis.sty
new file mode 100644
index 0000000000..1a262ca947
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-coatis.sty
@@ -0,0 +1,176 @@
+% !TeX root = ./examples/coati.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-coatis package (part of the tikzlings collection)
+% A package to bring little coatis into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-coatis}
+ [2019/04/07 v0.2 Drawing coatis in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\coati}[1][]{%
+ \begin{scope}%
+ \tikzset{/coati/.cd,#1}%
+ \coati@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifcoati@threeD
+\newif\ifcoati@sideward
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /coati/.search also={/tikz,/pgf,/thing},
+ /coati/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\coati@body{#1},
+ body = brown!50!darkgray!97!yellow,
+ rotatehead/.code = \def\coati@rotatehead{#1},
+ rotate head/.forward to = /coati/rotatehead,
+ rotatehead = 0,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \coati@threeDtrue,
+ sideward/.code = \coati@sidewardtrue,
+}
+
+\def\coati@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.84,0.1) rectangle (1.63,2.26);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifcoati@threeD
+ \def\coati@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\coati@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\coati@part@draw[\coati@body!80!white] (0.255,0.2) ellipse (0.23 and 0.09);
+\coati@part@draw[\coati@body!80!white] (-0.255,0.2) ellipse (0.23 and 0.09);
+%
+% Tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\coati@part@draw[\coati@body!50!darkgray] (0.3, 0.5) .. controls (0.55, 0.87) and (0.73, 1.50) .. (1.05, 1.65) .. controls (1.32, 1.77) and (1.76, 1.34) .. (1.56,1.33) .. controls (0.92, 2.03) and (0.86, 0.60) .. (0.5, 0.37) -- cycle;
+\begin{scope}
+ \clip (0.3, 0.5) .. controls (0.55, 0.87) and (0.73, 1.50) .. (1.05, 1.65) .. controls (1.32, 1.77) and (1.76, 1.34) .. (1.56,1.33) .. controls (0.92, 2.03) and (0.86, 0.60) .. (0.5, 0.37) -- cycle;
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-30:(0.8,1.15)}] (0.6,1.1) rectangle ++(0.4,0.1);
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-30:(0.9,1.35)}] (0.7,1.3) rectangle ++(0.4,0.1);
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-50:(1.0,1.5)}] (0.8,1.45) rectangle ++(0.4,0.1);
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-80:(1.2,1.6)}] (1.0,1.55) rectangle ++(0.4,0.1);
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-130:(1.5,1.5)}] (1.3,1.45) rectangle ++(0.4,0.1);
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-30:(0.55,0.65)}] (0.35,0.6) rectangle ++(0.4,0.1);
+\end{scope}
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\coati@part@draw[\coati@body!80!white,rotate around={70:(-0.625,1)}] (-0.625,1) ellipse (0.42 and 0.13);
+\coati@part@draw[\coati@body!80!white,rotate around={-70:(0.625,1)}] (0.625,1) ellipse (0.42 and 0.13);
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\coati@part@draw[\coati@body!50!darkgray] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{scope}[rotate around={\coati@rotatehead:(0,1.68)}]
+%
+% Sidewards head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifcoati@sideward
+ %
+ % Left Ear %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-16:(-0.212, 2.135)}] (-0.212, 2.135) ellipse (0.09 and 0.12);
+ \coati@part@draw[\coati@body!80!white,rotate around={-16:(-0.212, 2.135)}] (-0.212, 2.135) ellipse (0.065 and 0.09);
+ %
+ % Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!45!white!95!orange] (0.4808, 1.7911) .. controls (0.5682, 1.2837) and (-0.3468, 1.3575) .. (-0.6360, 1.3679) .. controls (-0.7582, 1.4729) and (-0.5198, 1.7911) .. (-0.5198, 1.7911) .. controls (-0.3597, 2.2914) and (0.3207, 2.2914) .. (0.4808, 1.7911) -- cycle;
+ %
+ % Cheek %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!80!white] (0.30, 1.4552) .. controls (0.30, 1.4552) and (0.1016, 1.7565) .. (-0.0005, 1.7581) -- (-0.6360, 1.3679) .. controls (-0.3083, 1.3437) and (0.0283, 1.332) .. (0.30, 1.4552) -- cycle;
+ \coati@part@draw[\coati@body!80!white] (-0.4166, 1.9824) .. controls (-0.4166, 1.9824) and (-0.2413, 1.9758) .. (-0.2226, 1.9112) -- (-0.6875, 1.4906) .. controls (-0.6875, 1.4906) and (-0.5712, 1.7549) .. (-0.4166, 1.9824) -- cycle;
+ % Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!50!black] (-0.605, 1.453) circle (0.09);
+ %
+ % Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!50!black] (0.007, 1.624) ellipse (0.04 and 0.06);
+ \coati@part@draw[\coati@body!50!black] (-0.38, 1.865) ellipse (0.035 and 0.055);
+ %
+ % Right Ear %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!45!white!95!orange,rotate around={-16:(0.417, 1.875)}] (0.417, 1.875) ellipse (0.1 and 0.14);
+ \coati@part@draw[\coati@body!80!white,rotate around={-16:(0.417, 1.875)}] (0.417, 1.875) ellipse (0.07 and 0.10);
+%
+% Normal Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\else
+ %
+ % Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!45!white!95!orange] (0.5, 1.8) .. controls (0.5, 1.58) and (0.2, 1.25) .. (0, 1.16) .. controls (-0.2, 1.25) and (-0.5, 1.58) .. (-0.5, 1.8) .. controls (-0.34, 2.3) and (0.34, 2.3) .. (0.5, 1.8) -- cycle;
+ %
+ % Cheeks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!80!white] (-0.4935, 1.7443) .. controls (-0.4935, 1.7443) and (-0.1917, 1.7798) .. (-0.1371, 1.7333) .. controls (-0.07, 1.2) and (-0.07, 1.2) .. (-0.07, 1.2) .. controls (-0.259, 1.3169) and (-0.46, 1.5665) .. (-0.4935, 1.7443) -- cycle;
+ \coati@part@draw[\coati@body!80!white] (0.4935, 1.7443) .. controls (0.4935, 1.7443) and (0.1917, 1.7798) .. (0.1371, 1.7333) .. controls (0.07, 1.2) and (0.07, 1.2) .. (0.07, 1.2) .. controls (0.259, 1.3169) and (0.46, 1.5665) .. (0.4935, 1.7443) -- cycle;
+ %
+ % Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!50!black] (0, 1.248) circle (0.09);
+ %
+ % Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!50!black] (0.23, 1.62) circle (0.05);
+ \coati@part@draw[\coati@body!50!black] (-0.23, 1.62) circle (0.05);
+ %
+ % Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \coati@part@draw[\coati@body!45!white!95!orange] (0.44, 2.02) circle (0.12);
+ \coati@part@draw[\coati@body!80!white] (0.44, 2.02) circle (0.09);
+ \coati@part@draw[\coati@body!45!white!95!orange] (-0.44, 2.02) circle (0.12);
+ \coati@part@draw[\coati@body!80!white] (-0.44, 2.02) circle (0.09);
+ %
+\fi
+\end{scope}
+%
+}
+
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-doc.pdf b/graphics/pgf/contrib/tikzlings/tikzlings-doc.pdf
new file mode 100644
index 0000000000..394f05561a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-doc.tex b/graphics/pgf/contrib/tikzlings/tikzlings-doc.tex
new file mode 100644
index 0000000000..11b06c3f7d
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-doc.tex
@@ -0,0 +1,1311 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Documentation for the tikzlings package
+% A collection of packages to draw animals in tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[parskip=half]{scrartcl}
+
+% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[english]{babel}
+\usepackage[svgnames]{xcolor}
+\usepackage[bitstream-charter]{mathdesign}
+\usepackage{tikzlings}
+\usepackage[most]{tcolorbox}
+\usepackage[paper=a4paper,margin=3cm]{geometry}
+\usepackage{url}
+\usepackage{xspace}
+\usepackage{scrlayer-scrpage}
+\usepackage[hang,flushmargin,bottom]{footmisc}
+\usepackage[%
+ colorlinks=true,
+ breaklinks=true,
+ allcolors=SteelBlue!50!black
+]{hyperref}
+
+% macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\CTAN}{\textsc{CTAN}\xspace}
+\newcommand{\TikZ}{Ti\emph{k}Z\xspace}
+\newcommand{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\newcommand{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
+\newcommand{\tikzlings}{Ti\emph{k}Zlings\xspace}
+\newcommand{\miktex}{MiK\TeX\xspace}
+\newcommand{\texlive}{\TeX{}Live\xspace}
+
+% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\addtokomafont{sectioning}{\color{SteelBlue}}
+\addtokomafont{date}{\normalsize}
+\addtokomafont{author}{\normalsize}
+
+\deftocheading{toc}{}%
+\setcounter{tocdepth}{1}
+
+\newcommand*\gobbleentrynumber[1]{}
+\newcommand*\mytocformat[1]{#1}
+\newcommand*\mytocpageformat[1]{#1}
+\RedeclareSectionCommand[
+ toclinefill=\TOCLineLeaderFill,
+ tocnumwidth=0pt,
+ tocentrynumberformat=\gobbleentrynumber,
+ tocentryformat=\mytocformat,
+ tocpagenumberformat=\mytocpageformat,
+ tocbeforeskip=0.8ex plus 1pt minus 1pt
+]{section}
+
+\makeatletter
+\renewcommand{\sectionlinesformat}[4]{%
+\ifstr{#1}{section}{%
+ \parbox[t]{\linewidth}{%
+ \raggedsection\@hangfrom{\hskip #2#3}{#4}\par%
+ \kern-.75\ht\strutbox\rule{\linewidth}{.8pt}%
+ }%
+ }{%
+ \@hangfrom{\hskip #2#3}{#4}}%
+}
+\makeatother
+
+\renewcommand*{\subsectionformat}{}
+\renewcommand*{\sectionformat}{}
+
+\setlength{\footnotemargin}{0.7em}
+
+\colorlet{blue}{SteelBlue}
+
+\lstdefinestyle{duckstyle}{%
+ language={[latex]TeX},
+ tabsize=2,
+ breaklines,
+ basicstyle=\ttfamily,
+ commentstyle={\color{green!50!black}\slshape},
+ columns=fullflexible,
+ alsodigit={-},
+ alsoletter={3},
+ emphstyle=\color{red!60!black},
+ emph=[1]{
+ tikzlings,
+ tikzlings-marmots, tikzlings-bears, tikzlings-coatis, tikzlings-koalas, tikzlings-marmots, tikzlings-owls, tikzlings-penguins, tikzlings-snowmans, tikzlings-mice, tikzlings-moles, tikzlings-sloths, tikzlings-pigs, tikzlings-cats, tikzlings-hippos, tikzlings-rhinos, tikzlings-pandas,
+ body, 3D, rotatehead, sideward, blush, sleeping, whiskers, teeth, shadow, askphil, leftstep, rightstep, eye, nose, pupil, bill, feet, belly, ask, phil, mouth, buttons, rotatearms, eyes, paws,
+ scale, yshift, xshift, rotate, hands, muzzle, schroedinger, toes,
+ hat, tophat, beret, strawhat, ribbon, harlequin, niuqelrah, witch, magichat, magicstars, crown, queencrown, kingcrown, santa, chef, graduate, tassel, alien, book, bookcolour, signpost, signcolour, signback, speech, think, bubblecolour, pizza, cheese, baguette, cake, icecream, flavoura, flavourb, flavourc, milkshake, wine, cricket, hockey, football, crystalball, magicwand, rollingpin, lightsaber, torch, basket, easter, egga, eggb, eggc, crozier, shovel, pickaxe, umbrella, umbrellaclosed, handbag, cocktail, pupilwidth,
+ },
+ texcsstyle=*\color{SteelBlue!50!black}\bfseries,
+ keywordstyle=\color{red!60!black}\bfseries,
+ morekeywords={tikzpicture},
+ moretexcs={
+ usepackage, usetikzlibrary, marmot, coati, bear, koala, owl, penguin, thing, tikzling, snowman, mouse, moles, sloth, pig, cat, hippo, rhino, panda,
+ },
+ delim ={[s][\ttfamily\color{green!50!black}]{$}{$}},
+ moredelim=[is][\footnotesize\ttfamily\color{orange!70!black}]{|}{|},
+ index=[1][emph]
+}
+
+\tcbset{%
+ colframe=SteelBlue!50!black,
+ arc=0mm,
+ fonttitle=\bfseries,
+ sidebyside,
+ listing options={style=duckstyle},
+ center lower,
+ righthand width=6.5cm,
+ bottom=0pt,
+ top=0pt,
+ tikz lower,
+ height plus=3cm,
+ colback=SteelBlue!30!white
+}
+
+\lstset{style=duckstyle}
+
+\pgfmathsetseed{2}
+\setlength{\footheight}{50pt}
+
+\cfoot{\thepage}
+\pagestyle{scrheadings}
+
+\makeatletter
+\renewcommand*{\coati}[1][]{%
+ \begin{scope}%
+ \path (-1.63,0.1) rectangle (1.63,2.26);
+ \tikzset{/coati/.cd,#1}%
+ \coati@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\renewcommand*{\mouse}[1][]{%
+ \begin{scope}%
+ \path (-1.6,0.1) rectangle (0.905, 2.17);
+ \tikzset{/mouse/.cd,#1}%
+ \mouse@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\renewcommand*{\cat}[1][]{%
+ \begin{scope}%
+ \tikzset{/cat/.cd,#1}%
+ \ifcat@schroedinger
+ \pgfmathparse{int(random(0,1))}
+ \let\cat@random=\pgfmathresult
+ \ifnum\cat@random=1
+ \cat@tombstone%
+ \else%
+ \path (-1.6,0.1) rectangle (0.905, 2.17);
+ \cat@draw%
+ \fi%
+ \else%
+ \path (-1.6,0.1) rectangle (0.905, 2.17);
+ \cat@draw%
+ \fi
+ \end{scope}%
+ \thing[#1]%
+}
+\makeatother
+
+\cfoot{%
+ \begin{tikzpicture}[scale=0.5]
+ \tikzling[signpost={\thepage}]
+ \end{tikzpicture}
+}
+
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{The \texorpdfstring{\tikzlings}{tikzlings} package}
+\subtitle{drawing animals and beings in \TikZ}
+\author{%
+ \texorpdfstring{\texttt{samcarter}\\[0.8em]
+ \url{https://github.com/samcarter/tikzlings}\\
+ \url{https://www.ctan.org/pkg/tikzlings}
+ }{samcarter}}
+\date{Version 0.2 -- \today}
+
+\begin{document}
+\maketitle
+\thispagestyle{scrheadings}
+
+\section*{Introduction}
+\label{intro}
+
+The \tikzlings are a collection of little animals (and beings) drawn in \TikZ. It is the next evolutionary phase of the \tikzmarmots package extending it with further animals (and beings) and also adding the ability to natively use many of the accessories known from the \tikzducks package.
+
+This package is work in progress, therefore I would be happy to hear your feedback and ideas how to improve the package.
+The head version of the source code can be found on \url{github.com/samcarter/tikzlings}, including a bug tracker -- please make constructive use of it!
+A more stable package version can be found on \CTAN (\url{https://www.ctan.org/pkg/tikzlings}) and is included in both \miktex and \texlive as \tikzlings.
+
+\subsection*{Acknowledgements}
+
+I'd like to thank the friendly and helpful community of \href{https://tex.stackexchange.com/}{TeX.Stackexchange} for their suggestions, feedback and help to create this package and find a suitable name for it. As a thank you all the \tikzlings have a name which is in some way or another connected to the users of TeX.SE.
+
+\subsection*{License}
+
+Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright}
+\texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
+
+\clearpage
+\section*{The \tikzlings}
+
+The \tikzlings package is a collection of packages. It can either be loaded as a whole with \lstinline|\usepackage{tikzlings}| or the subpackages containing the individual animals (and beings) can be used separately, e.g.\ by loading \lstinline|\usepackage{tikzlings-marmots}|.
+
+The basic usage is the same for all animals (and beings). Inside a \lstinline|tikzpicture|, the \tikzlings can be added via \color{SteelBlue!50!black}\lstinline|\<name_of_the_tikzling>|\color{black}. For example
+
+\begin{tcblisting}{}
+\marmot
+\end{tcblisting}
+
+will produce a marmot. All usual \TikZ and \lstinline|pgf| keys can be passed as optional argument to change the appearance. For example scaling and rotating the \tikzlings can be done by
+
+\begin{tcblisting}{}
+\penguin[rotate=30,scale=0.5]
+\end{tcblisting}
+
+In addition to the standard options provided by \TikZ each \tikzlings also comes with some additional options which are listed in the following sections. If these additional options consist of multiple words they are available both with and without spaces, for example \lstinline|askphil| and \lstinline|ask phil| will be treated as the same.
+
+\subsection*{List of all \tikzlings:}
+
+\begingroup
+ \hypersetup{hidelinks}
+ \tableofcontents
+\endgroup
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Bear
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Bear]{B\"ar, the teddy bear}
+
+\emph{If you look very closely at the group picture in \href{https://www.tug.org/TUGboat/tb39-2/tb122wright-tug18.pdf}{TUG goes to Rio} you can spot the real B\"ar in it}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-bears}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\bear
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic teddy bear can be modified by changing its colour:
+\begin{tcblisting}{}
+\bear[body=blue]
+\end{tcblisting}
+
+The key \lstinline|3D| will make the teddy bear 3-dimensional:
+\begin{tcblisting}{}
+\bear[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Cat
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Cat]{MisTi$k$zelees, the cat}
+
+\emph{Named after the worlds best singing cat}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-cats}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\cat
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic cat can be modified by changing its colour:
+\begin{tcblisting}{}
+\cat[body=blue]
+\end{tcblisting}
+
+In addition to the colour of the body, the colour of various body parts can be adjusted:
+\begin{tcblisting}{}
+\cat[eyes=green]
+\end{tcblisting}
+\begin{tcblisting}{}
+\cat[pupil=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\cat[nose=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\cat[whiskers=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\cat[paws=red]
+\end{tcblisting}
+
+The shape of the \lstinline|pupil| can be changed with the \lstinline|pupilwidth| option:
+\begin{tcblisting}{}
+\cat[pupilwidth=0.015]
+\end{tcblisting}
+
+Additionally several predefined widths exist:
+\begin{tcolorbox}
+\begin{lstlisting}[morekeywords={narrow,medium,wide,very,pupils}]
+\cat[narrow pupils]
+
+\cat[medium pupils]
+
+\cat[wide pupils]
+
+\cat[very wide pupils]
+\end{lstlisting}
+
+\tcblower
+\begin{tikzpicture}[yshift=2.4cm,xshift=1.8cm]
+\cat[narrow pupils]
+\cat[medium pupils,xshift=2.5cm]
+\cat[wide pupils,yshift=-2.5cm]
+\cat[very wide pupils,xshift=2.5cm,yshift=-2.5cm]
+\end{tikzpicture}
+\end{tcolorbox}
+
+
+There is also the special option \lstinline|schroedinger|. This cat is both alive and death as long as you did not compile your document.
+Be prepared for a possibly disturbing scene when you open the pdf, this option is not suited for sensitive \tikzlings.
+\begin{tcblisting}{}
+\cat[schroedinger]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the cat 3-dimensional:
+\begin{tcblisting}{}
+\cat[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Coati
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Coati]{007, the coati}
+
+\emph{Named after a coati living in the zoo of M\"onchengladbach}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-coatis}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\coati
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic coati can be modified by changing its colour:
+\begin{tcblisting}{}
+\coati[body=blue]
+\end{tcblisting}
+
+The head of the coati can be rotated, but please don't overdo this, otherwise his neck might break!
+\begin{tcblisting}{}
+\coati[rotatehead=-15]
+\end{tcblisting}
+
+For the head an alternative sidewards facing head is available. It can be combined with the \lstinline|rotatehead| option.
+\begin{tcblisting}{}
+\coati[sideward]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the coati 3-dimensional:
+\begin{tcblisting}{}
+\coati[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Hippo
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Hippo]{Sieglinde, the hippo}
+
+\emph{For the winner of the 2019 Groundhog Challenge}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-hippos}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\hippo
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic hippo can be modified by changing its colour:
+\begin{tcblisting}{}
+\hippo[body=blue]
+\end{tcblisting}
+
+The hippo can also do its nails:
+\begin{tcblisting}{}
+\hippo[toes=red]
+\end{tcblisting}
+
+The key \lstinline|3D| will make the hippo 3-dimensional:
+\begin{tcblisting}{}
+\hippo[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Koala
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Koala]{Will, the koala}
+
+\emph{The koala was generously contributed by the TeX.Stackexchange user marmot and is named in honour of a \LaTeX{} developer from Down Under}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-koalas}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\koala
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic koala can be modified by changing its colour:
+\begin{tcblisting}{}
+\koala[body=blue]
+\end{tcblisting}
+
+It can also blush
+\begin{tcblisting}{}
+\koala[blush]
+\end{tcblisting}
+
+and if tired, it is going to take a nap:
+\begin{tcblisting}{}
+\koala[sleeping]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the koala 3-dimensional:
+\begin{tcblisting}{}
+\koala[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Marmot
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Marmot]{Phil, the marmot}
+
+\emph{Phil got his name from Punxsutawney Phil, the famous weather forecasting groundhog}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-marmots}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\marmot
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic marmot can be modified by changing its colour:
+\begin{tcblisting}{}
+\marmot[body=blue]
+\end{tcblisting}
+
+It can also blush
+\begin{tcblisting}{}
+\marmot[blush]
+\end{tcblisting}
+
+and whiskers can be added:
+\begin{tcblisting}{}
+\marmot[whiskers=gray]
+\end{tcblisting}
+
+Some marmots even show their chisel teeth:
+\begin{tcblisting}{}
+\marmot[teeth=white]
+\end{tcblisting}
+
+or can cast a shadow:
+\begin{tcblisting}{}
+\marmot[shadow]
+\end{tcblisting}
+
+This ability is important if you want to ask Punxsutawney Phil\footnote{\url{https://en.wikipedia.org/wiki/Punxsutawney_Phil}} on Groundhog Day how the weather is going to be. With a probability derived from the statistics of 120 Groundhog Days\footnote{\url{https://www.livescience.com/32974-punxsutawney-phil-weather-prediction-accuracy.html}} the option \lstinline|askphil| might or might not result in a shadow.
+\begin{tcblisting}{}
+\marmot[askphil]
+\end{tcblisting}
+
+If a good weather prognosis is derived, the happy marmot can dance by lifting up its left and right foot:
+\begin{tcblisting}{}
+\marmot[leftstep]
+\marmot[rightstep,xshift=2cm]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the marmot 3-dimensional:
+\begin{tcblisting}{}
+\marmot[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Mouse
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Mole]{Wilhelm, the mole}
+
+\emph{The mole was added in celebration of the international mole day and is named after the chemist Wilhelm Ostwald}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-moles}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\textcolor{red!60!black}{\textbf{Attention:} In contrast to the other \tikzlings the macro name is the plural form to avoid conflicts with \lstinline|siunitx| and similar packages.}
+\begin{tcblisting}{}
+\moles
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic mouse can be modified by changing its colour:
+\begin{tcblisting}{}
+\moles[body=blue]
+\end{tcblisting}
+
+In addition to the colour of the body, the colour of various body parts can be adjusted:
+\begin{tcblisting}{}
+\moles[muzzle=red]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\moles[hands=red]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\moles[feet=red]
+\end{tcblisting}
+
+The key \lstinline|3D| will make the mole 3-dimensional:
+\begin{tcblisting}{}
+\moles[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Mouse
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Mouse]{Tokz, the mouse}
+
+\emph{The idea for the mouse came from an Italian TeX.Stackexchange user -- Tokz is a combination of the Italian word for mouse and \TikZ}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-mice}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\mouse
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic mouse can be modified by changing its colour:
+\begin{tcblisting}{}
+\mouse[body=blue]
+\end{tcblisting}
+
+The rotation angle of its arms can be adjusted:
+\begin{tcblisting}{}
+\mouse[rotatearms=40]
+\end{tcblisting}
+
+The key \lstinline|3D| will make the mouse 3-dimensional:
+\begin{tcblisting}{}
+\mouse[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Owl
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Owl]{Jake, the owl}
+
+\emph{The owl Jake was inspired by the avatar of one of the top users of TeX.Stackexchange}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-owls}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\owl
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic owl can be modified by changing its colour:
+\begin{tcblisting}{}
+\owl[body=blue]
+\end{tcblisting}
+
+In addition to the colour of the body, the colour of various body parts can be adjusted:
+\begin{tcblisting}{}
+\owl[eye=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\owl[pupil=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\owl[bill=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\owl[feet=red]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the owl 3-dimensional:
+\begin{tcblisting}{}
+\owl[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Panda
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Panda]{..., the panda}
+
+\emph{....}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-pandas}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\panda
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic panda can be modified by changing its colour:
+\begin{tcblisting}{}
+\panda[body=blue]
+\end{tcblisting}
+
+The key \lstinline|3D| will make the panda 3-dimensional:
+\begin{tcblisting}{}
+\panda[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Penguin
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Penguin]{Tux, the penguin}
+
+\emph{Dedicated to the Linux mascot}
+
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-penguins}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\penguin
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic penguin can be modified by changing its colour:
+\begin{tcblisting}{}
+\penguin[body=blue]
+\end{tcblisting}
+
+In addition to the colour of the body, the colour of various body parts can be adjusted:
+\begin{tcblisting}{}
+\penguin[eye=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\penguin[pupil=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\penguin[bill=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\penguin[belly=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\penguin[feet=red]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the penguin 3-dimensional:
+\begin{tcblisting}{}
+\penguin[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Pig
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Pig]{Ms Piggy, the pig}
+
+\emph{Added on February 5th, 2019 to commemorate the Chinese year of the pig}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-pigs}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\pig
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic pig can be modified by changing its colour:
+\begin{tcblisting}{}
+\pig[body=blue]
+\end{tcblisting}
+
+The key \lstinline|3D| will make the pig 3-dimensional:
+\begin{tcblisting}{}
+\pig[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Rhino
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Rhino]{D\"urer, the rhino}
+
+\emph{Named after Albert D\"urer who painted an amazing rhino merely based on stories}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-rhinos}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\rhino
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic rhino can be modified by changing its colour:
+\begin{tcblisting}{}
+\rhino[body=blue]
+\end{tcblisting}
+
+The hippo can also do its nails:
+\begin{tcblisting}{}
+\rhino[toes=red]
+\end{tcblisting}
+
+The key \lstinline|3D| will make the rhino 3-dimensional:
+\begin{tcblisting}{}
+\rhino[3D]
+\end{tcblisting}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Sloth
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Sloth]{Riley, the sloth}
+
+\emph{One of the regulars in the TeX.Stackexchange chat once met a sloth called Riley}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-sloths}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\sloth
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic sloth can be modified by changing its colour:
+\begin{tcblisting}{}
+\sloth[body=blue]
+\end{tcblisting}
+
+If tired, the sloth can take a nap:
+\begin{tcblisting}{}
+\sloth[sleeping]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the sloth 3-dimensional:
+
+\begin{tcblisting}{}
+\sloth[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Snowman
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Snowman]{Yuki, the snowman}
+
+\emph{Yuki is the transcription of the Japanese word for snow}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings-snowmans}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\snowman
+\end{tcblisting}
+
+\subsection{Options}
+
+The basic snowman can be modified by changing its colour:
+\begin{tcblisting}{}
+\snowman[body=blue]
+\end{tcblisting}
+
+In addition to the colour of the body, the colour of various body parts can be adjusted:
+\begin{tcblisting}{}
+\snowman[eye=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\snowman[nose=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\snowman[mouth=red]
+\end{tcblisting}
+\begin{tcblisting}{}
+\snowman[buttons=red]
+\end{tcblisting}
+
+Finally the key \lstinline|3D| will make the snowman 3-dimensional:
+
+\begin{tcblisting}{}
+\snowman[3D]
+\end{tcblisting}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Random Tikzling
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section[Ti\emph{k}Zlings]{... , the Ti\emph{k}Zling}
+
+\emph{The inventor of the word \tikzlings has yet to come up with a name for the Ti\emph{k}Zling}
+
+\subsection{Package name}
+
+\begin{tcolorbox}[lower separated=false, lefthand width=.8\linewidth]
+\vspace*{0.5cm}
+\lstinline|\usepackage{tikzlings}|
+\vspace*{0.5cm}
+\end{tcolorbox}
+
+\subsection{Basic Usage}
+
+\begin{tcblisting}{}
+\tikzling
+\end{tcblisting}
+
+\subsection{Options}
+
+Only options common for all \tikzlings are supported for the \lstinline|\tikzling|. These are the ability to change the body colour
+\begin{tcblisting}{}
+\tikzling[body=blue]
+\end{tcblisting}
+
+and the \lstinline|3D| key, which will make the Ti\emph{k}Zlings 3-dimensional:
+\begin{tcblisting}{}
+\tikzling[3D]
+\end{tcblisting}
+
+If an option of a specific tikzlings is used (for example \lstinline|sleeping| which only the koala can do) this only works if your are lucky and the koala is drawn, in all other cases it will result in an error.
+
+In addition all usual \TikZ and \lstinline|pgf| keys can be used in the optional argument as well as the accessories presented in the following section.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Accessories
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Accessories}
+
+To customise the \tikzlings the package provides a number of accessories which can be added to all the \tikzlings simply by adding the respective keyword as optional argument:
+
+\begin{tcblisting}{}
+\bear[hat]
+\end{tcblisting}
+
+For most of these items, the colour can be customised:
+
+\begin{tcblisting}{}
+\koala[crown=orange!50!yellow]
+\end{tcblisting}
+
+Unfortunately it is very difficult to create accessories that will fit all the different shapes of the \tikzlings. Therefore it is also possible to add them separately as optional argument of the \lstinline|\thing| macro, which allows more control of their size and placement:
+
+\begin{tcblisting}{}
+\owl
+\thing[tophat,scale=1.5,yshift=-0.6cm,xshift=-0.05cm]
+\end{tcblisting}
+
+A list of all available accessories is given below. For completeness the default colours for each key are shown, but actually it is unnecessary unless it should be changed. In case more than one key is shown, all but the first are optional.
+
+\subsection{Hats}
+
+\begin{tcblisting}{}
+\penguin[
+ hat=blue!40!black
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\snowman[
+ tophat=black!90!white
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\mouse[
+ beret=black
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\owl[
+ strawhat=gray!30!white,
+ ribbon=black
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\coati[
+ harlequin=blue,
+ niuqelrah=red
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\cat[
+ witch=gray
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\bear[
+ magichat=violet,
+ magicstars=yellow!80!brown
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\penguin[
+ crown=yellow!90!orange
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\koala[
+ queencrown=yellow
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\marmot[
+ kingcrown=gray
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\mouse[
+ santa=red!80!black
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\bear[
+ chef=gray!20!white
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\snowman[
+ graduate=black,
+ tassel=red
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\penguin[
+ alien=green
+]
+\end{tcblisting}
+
+\subsection{Communication}
+
+\begin{tcblisting}{}
+\coati[
+ book={\tiny\TeX},
+ bookcolour=brown
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\pig[
+ signpost={\TeX},
+ signcolour= brown!50!black,
+ signback=green!40!black
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\bear[
+ speech={\TeX},
+ bubblecolour=gray!30!white
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\penguin[
+ think={\TeX},
+ bubblecolour=gray!30!white
+]
+\end{tcblisting}
+
+\subsection{Food}
+
+\begin{tcblisting}{}
+\koala[
+ pizza
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\mouse[
+ cheese=yellow!30!orange!60!white
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\coati[
+ baguette=brown
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\moles[
+ cake=violet
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\marmot[
+ icecream=brown!60!gray,
+ flavoura=brown!50!black,
+ flavourb=white!70!brown,
+ flavourc=red!50!white
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\penguin[
+ milkshake=red!20!white
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\owl[
+ wine=red!70!black
+]
+\end{tcblisting}
+
+\subsection{Sports}
+
+\begin{tcblisting}{}
+\coati[
+ cricket=brown
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\hippo[
+ hockey=brown
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\koala[
+ football=white
+]
+\end{tcblisting}
+
+\subsection{Other items}
+
+\begin{tcblisting}{}
+\marmot[
+ crystalball=cyan
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\bear[
+ magicwand
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\coati[
+ rollingpin=brown
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\penguin[
+ lightsaber=green
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\snowman[
+ torch=gray
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\mouse[
+ basket=brown!70!gray
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\sloth[
+ easter=brown!70!gray,
+ egga=blue,
+ eggb=green,
+ eggc=red
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\koala[
+ crozier=brown
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\snowman[
+ shovel=gray
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\penguin[
+ pickaxe=gray
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\rhino[
+ umbrella=cyan
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\marmot[
+ umbrellaclosed=cyan
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\mouse[
+ handbag=red!70!black
+]
+\end{tcblisting}
+
+\begin{tcblisting}{}
+\bear[
+ cocktail
+]
+\end{tcblisting}
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-hippos.sty b/graphics/pgf/contrib/tikzlings/tikzlings-hippos.sty
new file mode 100644
index 0000000000..61d7eb7aeb
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-hippos.sty
@@ -0,0 +1,141 @@
+% !TeX root = ./examples/hippo.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-hippos package (part of the tikzlings collection)
+% A package to bring little hippos into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-hippos}
+ [2019/04/07 v0.2 Drawing hippos in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\hippo}[1][]{%
+ \begin{scope}%
+ \tikzset{/hippo/.cd,#1}%
+ \hippo@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifhippo@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /hippo/.search also={/tikz,/pgf,/thing},
+ /hippo/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\hippo@body{#1},
+ body = gray,
+ toes/.code = \def\hippo@toes{#1},
+ toes = \hippo@body!55!white,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \hippo@threeDtrue,
+}
+
+\def\hippo@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.625,0.1) rectangle (0.625, 2.17);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifhippo@threeD
+ \def\hippo@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\hippo@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hippo@part@draw[\hippo@body,rotate around={-30:(0.23,2.03)}] (0.23,2.03) ellipse (0.09 and 0.13);
+\hippo@part@draw[\hippo@body,rotate around={30:(-0.23,2.03)}] (-0.23,2.03) ellipse (0.09 and 0.13);
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hippo@part@draw[\hippo@body!55!white] ( 0.6, 0.8 ) .. controls ( 0.6 , 0.4) and ( 0.35, 0.19) .. ( 0.0, 0.19) .. controls (-0.35, 0.19) and (-0.6 , 0.4) .. (-0.6, 0.8 ) .. controls (-0.6 , 1.3) and (-0.35, 1.65) .. ( 0.0, 1.65) .. controls ( 0.35, 1.65) and ( 0.6 , 1.3) .. ( 0.6, 0.8) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hippo@part@draw[\hippo@body,rotate around={90:(0.35,1.0)}] (0.35,1.0) ellipse (0.24 and 0.13);
+\hippo@part@draw[\hippo@body,rotate around={-90:(-0.35,1.0)}] (-0.35,1.0) ellipse (0.24 and 0.13);
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hippo@part@draw[\hippo@body!55!white] (0, 1.76) circle (0.36);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[white] (-0.11, 1.83) ellipse (0.08 and 0.12);
+\fill[white] (0.11, 1.83) ellipse (0.08 and 0.12);
+\fill[black] (-0.105, 1.78) ellipse (0.04 and 0.07);
+\fill[black] (0.105, 1.78) ellipse (0.04 and 0.07);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\hippo@part@draw[\hippo@body!80!white] (0, 1.55) ellipse (0.42 and 0.2);
+\hippo@part@draw[\hippo@body!70!black] (-0.07, 1.63) circle (0.035);
+\hippo@part@draw[\hippo@body!70!black] (0.07, 1.63) circle (0.035);
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifhippo@threeD
+ \draw[black,line width=\scalingfactor*0.4pt] (0.125, 1.5) arc [start angle=-50, end angle=-130, radius=0.2] ;
+ \else
+ \draw[\hippo@body!70!black,line width=\scalingfactor*0.4pt] (0.125, 1.5) arc [start angle=-50, end angle=-130, radius=0.2] ;
+ \fi
+ %
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{scope}
+ \clip (-0.5,0.4) rectangle (0.5,0.13);
+ \hippo@part@draw[\hippo@body] (-0.25,0.15) ellipse (0.16 and 0.17);
+ \hippo@part@draw[\hippo@body] (0.25,0.15) ellipse (0.16 and 0.17);
+ \hippo@part@draw[\hippo@toes] (0.25,0.13) ellipse (0.05 and 0.1);
+ \hippo@part@draw[\hippo@toes] (0.13,0.11) ellipse (0.05 and 0.1);
+ \hippo@part@draw[\hippo@toes] (0.37,0.11) ellipse (0.05 and 0.1);
+ \hippo@part@draw[\hippo@toes] (-0.25,0.13) ellipse (0.05 and 0.1);
+ \hippo@part@draw[\hippo@toes] (-0.13,0.11) ellipse (0.05 and 0.1);
+ \hippo@part@draw[\hippo@toes] (-0.37,0.11) ellipse (0.05 and 0.1);
+\end{scope}
+%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-koalas.sty b/graphics/pgf/contrib/tikzlings/tikzlings-koalas.sty
new file mode 100644
index 0000000000..206a291895
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-koalas.sty
@@ -0,0 +1,172 @@
+% !TeX root = ./examples/koala.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-koalas package (part of the tikzlings collection)
+% A package to bring little koalas into tikz
+% Created by @marmot (https://tex.stackexchange.com/a/448397/36296)
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-koalas}
+ [2019/04/07 v0.2 Drawing koalas in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+\usetikzlibrary{shadows.blur}
+\usetikzlibrary{fadings}
+
+\tikzfading[name=koala@blush,inner color=transparent!50,outer color=transparent!100]
+
+\newcommand*{\koala}[1][]{%
+ \begin{scope}%
+ \tikzset{/koala/.cd,#1}%
+ \koala@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifkoala@blush
+\newif\ifkoala@sleeping
+\newif\ifkoala@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /koala/.search also={/tikz,/pgf,/thing},
+ /koala/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\koala@body{#1},
+ body = gray!75!white,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ blush/.code = \koala@blushtrue,
+ sleeping/.code = \koala@sleepingtrue,
+ 3D/.code = \koala@threeDtrue,
+}
+
+\def\koala@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.88,0.1) rectangle (0.88, 2.35);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifkoala@threeD
+ \def\koala@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\koala@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\koala@part@draw[\koala@body!50!black] (0.255,0.2) ellipse (0.23 and 0.09);
+\koala@part@draw[\koala@body!50!black] (-0.255,0.2) ellipse (0.23 and 0.09);
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\koala@part@draw[\koala@body] (0.405, 2.1) ellipse (0.3 and 0.23);
+\koala@part@draw[\koala@body!40!white] (0.405, 2.1) ellipse (0.15 and 0.12);
+\koala@part@draw[\koala@body] (-0.405, 2.1) ellipse (0.3 and 0.23);
+\koala@part@draw[\koala@body!40!white] (-0.405, 2.1) ellipse (0.15 and 0.12);
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\koala@part@draw[\koala@body,rotate around={70:(-0.625,1)}] (-0.625,1) ellipse (0.42 and 0.13);
+\koala@part@draw[\koala@body!50!black,rotate around={-20:(-0.745,0.65)}] (-0.745,0.65) ellipse (0.12 and 0.08);
+\koala@part@draw[\koala@body,rotate around={-70:(0.625,1)}] (0.625,1) ellipse (0.42 and 0.13);
+\koala@part@draw[\koala@body!50!black,rotate around={20:(0.745,0.65)}] (0.745,0.65) ellipse (0.12 and 0.08);
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\koala@part@draw[\koala@body] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
+%
+% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\koala@part@draw[\koala@body!40!white] ( 0.425, 0.71) .. controls ( 0.425, 0.41) and ( 0.255, 0.27) .. ( 0 , 0.27) .. controls (-0.255, 0.27) and (-0.425, 0.41) .. (-0.425, 0.71) .. controls (-0.425, 1.01) and (-0.255, 1.20) .. ( 0 , 1.20) .. controls ( 0.225, 1.20) and ( 0.425, 1.01) .. ( 0.425, 0.71) -- cycle;
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\koala@part@draw[\koala@body] (0,1.67) ellipse (0.55 and 0.45);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\koala@part@draw[\koala@body!40!black] (-0.1501, 1.5609) .. controls (-0.1784, 1.4833) and (-0.0827, 1.4108) .. ( 0.0000, 1.4108) .. controls ( 0.0827, 1.4108) and ( 0.1784, 1.4833) .. ( 0.1501, 1.5609) .. controls ( 0.1290, 1.6191) and ( 0.1187, 1.6573) .. ( 0.0750, 1.7010) .. controls ( 0.0336, 1.7424) and (-0.0336, 1.7424) .. (-0.0750, 1.7010) .. controls (-0.1187, 1.6573) and (-0.1290, 1.6191) .. (-0.1501, 1.5609) -- cycle;
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifkoala@sleeping
+ \fill[\koala@body!50!black] (0.2534, 1.675) rectangle ++(0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={20:(0.2925, 1.6925)}] (0.29, 1.68) rectangle ++(0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={-20:(0.2143, 1.6925)}] (0.2168, 1.68) rectangle ++(0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={40:(0.3255, 1.7025)}] (0.323, 1.69) rectangle ++(0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={-40:(0.1813, 1.7025)}] (0.1838, 1.69) rectangle ++(0.005, 0.03);
+ \fill[\koala@body!50!black] (-0.2534, 1.675) rectangle ++(-0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={-20:(-0.2925, 1.6925)}] (-0.29, 1.68) rectangle ++(-0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={20:(-0.2143, 1.6925)}] (-0.2168, 1.68) rectangle ++(-0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={-40:(-0.3255, 1.7025)}] (-0.323, 1.69) rectangle ++(-0.005, 0.03);
+ \fill[\koala@body!50!black,rotate around={40:(-0.1813, 1.7025)}] (-0.1838, 1.69) rectangle ++(-0.005, 0.03);
+ \fill[\koala@body!50!black, even odd rule] (0.3331, 1.741) .. controls (0.3331, 1.685) and (0.1737, 1.685) .. (0.1737, 1.741) .. controls (0.1737, 1.848) and (0.3331, 1.848) .. (0.3331, 1.741) -- cycle (0.328, 1.741) .. controls (0.323, 1.705) and (0.184, 1.705) .. (0.179, 1.741) .. controls (0.184, 1.843) and (0.323, 1.843) .. (0.328, 1.741) -- cycle;
+ \fill[\koala@body!50!black, even odd rule] (-0.3331, 1.741) .. controls (-0.3331, 1.685) and (-0.1737, 1.685) .. (-0.1737, 1.741) .. controls (-0.1737, 1.848) and (-0.3331, 1.848) .. (-0.3331, 1.741) -- cycle (-0.328, 1.741) .. controls (-0.323, 1.705) and (-0.184, 1.705) .. (-0.179, 1.741) .. controls (-0.184, 1.843) and (-0.323, 1.843) .. (-0.328, 1.741) -- cycle;
+\else
+ \koala@part@draw[black] (-0.255, 1.74) circle (0.08);
+ \koala@part@draw[black] (0.255, 1.74) circle (0.08);
+ \fill[white] (-0.27, 1.76) circle (0.015);
+ \fill[white] (0.24, 1.76) circle (0.015);
+\fi
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifkoala@threeD
+ \draw[black,line width=\scalingfactor*0.4pt] (0.115, 1.39) arc [start angle=-40, end angle=-140, radius=0.16];
+\else
+ \draw[\koala@body!40!black,line width=\scalingfactor*0.4pt] (0.115, 1.39) arc [start angle=-40, end angle=-140, radius=0.16];
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% optional
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Blushed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifkoala@blush
+ \fill[red,path fading=koala@blush] (-0.3, 1.52) circle (0.1);
+ \fill[red,path fading=koala@blush] (0.3, 1.52) circle (0.1);
+\fi
+%
+}
+
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-marmots.sty b/graphics/pgf/contrib/tikzlings/tikzlings-marmots.sty
new file mode 100644
index 0000000000..abbeb4a1fb
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-marmots.sty
@@ -0,0 +1,223 @@
+% !TeX root = ./examples/marmot.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-marmots package (part of the tikzlings collection)
+% A package to bring little marmots into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-marmots}
+ [2019/04/07 v0.2 Drawing marmots in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+\usetikzlibrary{shadows.blur}
+\usetikzlibrary{fadings}
+
+\tikzfading[name=marmot@blush,inner color=transparent!50,outer color=transparent!100]
+
+\RequirePackage{ifluatex}
+\RequirePackage{ifxetex}
+
+\ifluatex
+ \let\pdfrandomseed\randomseed
+\fi
+
+\ifxetex
+ \pgfmathsetseed{\time}
+\else
+ \pgfmathsetseed{\number\pdfrandomseed}
+\fi
+
+\newcommand*{\marmot}[1][]{%
+ \begin{scope}%
+ \tikzset{/marmot/.cd,#1}%
+ \marmot@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifmarmot@blush
+\newif\ifmarmot@whiskers
+\newif\ifmarmot@teeth
+\newif\ifmarmot@threeD
+\newif\ifmarmot@shadow
+\newif\ifmarmot@askphil
+\newif\ifmarmot@leftstep
+\newif\ifmarmot@rightstep
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /marmot/.search also={/tikz,/pgf,/thing},
+ /marmot/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\marmot@body{#1},
+ body = brown,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ blush/.code = \marmot@blushtrue,
+ whiskers/.code = \marmot@whiskerstrue
+ \def\marmot@whiskers{#1},
+ whiskers/.default = gray,
+ teeth/.code = \marmot@teethtrue
+ \def\marmot@teeth{#1},
+ teeth/.default = white,
+ 3D/.code = \marmot@threeDtrue,
+ shadow/.code = \marmot@shadowtrue,
+ askphil/.code = \marmot@askphiltrue,
+ ask phil/.forward to = /marmot/askphil,
+ leftstep/.code = \marmot@leftsteptrue,
+ left step/.forward to = /marmot/leftstep,
+ rightstep/.code = \marmot@rightsteptrue,
+ right step/.forward to = /marmot/rightstep,
+}
+
+\def\marmot@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.625,0.1) rectangle (0.905, 2.17);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@threeD
+ \def\marmot@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\marmot@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% shadow
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\ifmarmot@askphil
+ \pgfmathparse{int(random(1,120))}
+ \let\marmot@random=\pgfmathresult
+ \ifnum\marmot@random>17
+ \marmot@shadowtrue
+ \fi
+\fi
+%
+\ifmarmot@shadow
+ \fill[opacity=0,blur shadow,rotate around={-80:(0.3,0.5)}] (0.3,0.5) ellipse (0.28 and 0.8);
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@leftstep
+ \marmot@part@draw[\marmot@body!50!black] (-0.255,0.25) ellipse (0.23 and 0.09);
+\else
+ \marmot@part@draw[\marmot@body!50!black] (-0.255,0.2) ellipse (0.23 and 0.09);
+\fi
+
+\ifmarmot@rightstep
+ \marmot@part@draw[\marmot@body!50!black] (0.255,0.25) ellipse (0.23 and 0.09);
+\else
+ \marmot@part@draw[\marmot@body!50!black] (0.255,0.2) ellipse (0.23 and 0.09);
+\fi
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body!50!black] (0.255,2.03) ellipse (0.09 and 0.13);
+\marmot@part@draw[\marmot@body!50!black] (-0.255,2.03) ellipse (0.09 and 0.13);
+%
+% Tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body!50!black] (0.885, 0.67) .. controls (0.865, 0.4) and (0.345, 0.24) .. (0.335, 0.44) .. controls (0.315, 0.56) and (0.445, 0.51) .. (0.575, 0.53) .. controls (0.695, 0.54) and (0.885, 0.72) .. (0.885, 0.67) -- cycle;
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
+%
+% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body!50!white] (0.425, 0.71) .. controls (0.425, 0.41) and (0.245, 0.37) .. (0, 0.37) .. controls (-0.245, 0.37) and (-0.425, 0.41) .. (-0.425, 0.71) .. controls (-0.425, 1.01) and (-0.225, 1.26) .. (0, 1.26) .. controls (0.225, 1.26) and (0.425, 1.01) .. (0.425, 0.71) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body!50!black,rotate around={70:(0.385,0.93)}] (0.385,0.93) ellipse (0.24 and 0.13);
+\marmot@part@draw[\marmot@body!50!black,rotate around={-70:(-0.385,0.93)}] (-0.385,0.93) ellipse (0.24 and 0.13);
+%
+% Muzzle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body!50!white] (0,1.47) ellipse (0.23 and 0.13);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body!50!black] (0,1.6) circle (0.08);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw[\marmot@body!50!black] (-0.155,1.77) circle (0.05);
+\marmot@part@draw[\marmot@body!50!black] (0.155,1.77) circle (0.05);
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\marmot@body!50!black] (0.145,1.51) arc [start angle=-20, end angle=-160, radius=0.16] -- (-0.14,1.51) -- (-0.14,1.51) arc [start angle=-160, end angle=-20, radius=0.144] -- cycle ;
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% optional
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Blushed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@blush
+ \fill[red,path fading=marmot@blush] (-0.295,1.6) circle (0.1);
+ \fill[red,path fading=marmot@blush] (0.295,1.6) circle (0.1);
+\fi
+%
+% Wiskers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@whiskers
+ \fill[\marmot@whiskers] (0.0788, 1.6146) .. controls (0.1658, 1.6299) and (0.2086, 1.5639) .. (0.2956, 1.5486) -- (0.2956, 1.5586) .. controls (0.2097, 1.5737) and (0.1648, 1.6297) .. (0.0788, 1.6146) -- cycle;
+ \fill[\marmot@whiskers] (-0.0788, 1.6146) .. controls (-0.1658, 1.6299) and (-0.2087, 1.5639) .. (-0.2956, 1.5486) -- (-0.2956, 1.5586) .. controls (-0.2097, 1.5737) and (-0.1648, 1.6297) .. (-0.0788, 1.6146) -- cycle;
+ \fill[\marmot@whiskers] (0.0752, 1.6281) .. controls (0.1583, 1.6583) and (0.2171, 1.6309) .. (0.3002, 1.6007) -- (0.3002, 1.6107) .. controls (0.2174, 1.6408) and (0.158, 1.6582) .. (0.0752, 1.6281) -- cycle;
+ \fill[\marmot@whiskers] (-0.0752, 1.6281) .. controls (-0.1583, 1.6583) and (-0.2171, 1.6309) .. (-0.3002, 1.6007) -- (-0.3002, 1.6107) .. controls (-0.2174, 1.6408) and (-0.158, 1.6582) .. (-0.0752, 1.6281) -- cycle;
+ \fill[\marmot@whiskers] (0.0671, 1.6443) .. controls (0.1414, 1.6925) and (0.2182, 1.7164) .. (0.2925, 1.6682) -- (0.2925, 1.6782) .. controls (0.2179, 1.7266) and (0.1417, 1.6927) .. (0.0671, 1.6443) -- cycle;
+ \fill[\marmot@whiskers] (-0.0671, 1.6443) .. controls (-0.1414, 1.6925) and (-0.2182, 1.7164) .. (-0.2925, 1.6682) -- (-0.2925, 1.6782) .. controls (-0.2179, 1.7266) and (-0.1417, 1.6927) .. (-0.0671, 1.6443) -- cycle;
+\fi
+%
+% Teeth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@teeth
+ \fill[\marmot@body!50!black] (0.048,1.413) rectangle (-0.048,1.373);
+ \fill[\marmot@teeth] (-0.045,1.407) rectangle (-0.004,1.376);
+ \fill[\marmot@teeth] (0.045,1.407) rectangle (0.004,1.376);
+\fi
+%
+}
+
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-mice.sty b/graphics/pgf/contrib/tikzlings/tikzlings-mice.sty
new file mode 100644
index 0000000000..f7fa99eb88
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-mice.sty
@@ -0,0 +1,138 @@
+% !TeX root = ./examples/mouse.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-mice package (part of the tikzlings collection)
+% A package to bring little mice into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-mice}
+ [2019/04/07 v0.2 Drawing mice in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\mouse}[1][]{%
+ \begin{scope}%
+ \tikzset{/mouse/.cd,#1}%
+ \mouse@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifmouse@threeD
+\newif\ifmouse@rotatearms
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /mouse/.search also={/tikz,/pgf,/thing},
+ /mouse/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\mouse@body{#1},
+ body = gray!90!white,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \mouse@threeDtrue,
+ rotatearms/.code = \mouse@rotatearmstrue
+ \def\mouse@rotatearms{#1},
+ rotate arms/.forward to = /mouse/rotatearms,
+ rotatearms = 20,
+}
+
+\def\mouse@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.625,0.1) rectangle (0.905, 2.17);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmouse@threeD
+ \def\mouse@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\mouse@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body!65!white] (-0.255,0.2) ellipse (0.23 and 0.09);
+\mouse@part@draw[\mouse@body!65!white] (0.255,0.2) ellipse (0.23 and 0.09);
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body!65!white] (0.36, 2.17) circle (0.28);
+\mouse@part@draw[\mouse@body] (0.36, 2.17) circle (0.15);
+\mouse@part@draw[\mouse@body!65!white] (-0.36, 2.17) circle (0.28);
+\mouse@part@draw[\mouse@body] (-0.36, 2.17) circle (0.15);
+%
+% Tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body!65!white] (0.348, 0.475) .. controls (0.598, 0.844) and (0.778, 1.475) .. (1.099, 1.625) .. controls (1.369, 1.745) and (1.677, 1.309) .. (1.609, 1.305) .. controls (0.933, 2.178) and (0.771, 0.676) .. (0.411, 0.446) -- cycle;
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body!65!white] (0.5, 1.8) .. controls (0.5, 1.58) and (0.2, 1.25) .. (0, 1.16) .. controls (-0.2, 1.25) and (-0.5, 1.58) .. (-0.5, 1.8) .. controls (-0.34, 2.3) and (0.34, 2.3) .. (0.5, 1.8) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body!65!white,rotate around={-\mouse@rotatearms:(0.47,1.15)}] (0.47,0.93) ellipse (0.13 and 0.24);
+\mouse@part@draw[\mouse@body!65!white,rotate around={\mouse@rotatearms:(-0.47,1.15)}] (-0.47,0.93) ellipse (0.13 and 0.24);
+%
+% Wiskers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\mouse@body!50!black] (0.0788, 1.2046) .. controls (0.1658, 1.2199) and (0.2086, 1.1539) .. (0.2956, 1.1386) -- (0.2956, 1.1486) .. controls (0.2097, 1.1637) and (0.1648, 1.2197) .. (0.0788, 1.2046) -- cycle;
+\fill[\mouse@body!50!black] (-0.0788, 1.2046) .. controls (-0.1658, 1.2199) and (-0.2087, 1.1539) .. (-0.2956, 1.1386) -- (-0.2956, 1.1486) .. controls (-0.2097, 1.1637) and (-0.1648, 1.2197) .. (-0.0788, 1.2046) -- cycle;
+\fill[\mouse@body!50!black] (0.0752, 1.2181) .. controls (0.1583, 1.2483) and (0.2171, 1.2209) .. (0.3002, 1.1907) -- (0.3002, 1.2007) .. controls (0.2174, 1.2308) and (0.158, 1.2482) .. (0.0752, 1.2181) -- cycle;
+\fill[\mouse@body!50!black] (-0.0752, 1.2181) .. controls (-0.1583, 1.2483) and (-0.2171, 1.2209) .. (-0.3002, 1.1907) -- (-0.3002, 1.2007) .. controls (-0.2174, 1.2308) and (-0.158, 1.2482) .. (-0.0752, 1.2181) -- cycle;
+\fill[\mouse@body!50!black] (0.0671, 1.2343) .. controls (0.1414, 1.2825) and (0.2182, 1.3064) .. (0.2925, 1.2582) -- (0.2925, 1.2682) .. controls (0.2179, 1.3166) and (0.1417, 1.2827) .. (0.0671, 1.2343) -- cycle;
+\fill[\mouse@body!50!black] (-0.0671, 1.2343) .. controls (-0.1414, 1.2825) and (-0.2182, 1.3064) .. (-0.2925, 1.2582) -- (-0.2925, 1.2682) .. controls (-0.2179, 1.3166) and (-0.1417, 1.2827) .. (-0.0671, 1.2343) -- cycle;
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body!50!black] (0, 1.248) circle (0.09);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mouse@part@draw[\mouse@body!50!black] (0.23, 1.68) circle (0.05);
+\mouse@part@draw[\mouse@body!50!black] (-0.23, 1.68) circle (0.05);
+%
+}
+
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-moles.sty b/graphics/pgf/contrib/tikzlings/tikzlings-moles.sty
new file mode 100644
index 0000000000..b59e022fd5
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-moles.sty
@@ -0,0 +1,144 @@
+% !TeX root = ./examples/mole.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-moles package (part of the tikzlings collection)
+% A package to bring little moles into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-moles}
+ [2019/04/07 v0.2 Drawing moles in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\moles}[1][]{%
+ \begin{scope}%
+ \tikzset{/mole/.cd,#1}%
+ \mole@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifmole@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /mole/.search also={/tikz,/pgf,/thing},
+ /mole/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\mole@body{#1},
+ body = gray,
+ feet/.code = \def\mole@feet{#1},
+ feet = red!20!white!50!brown,
+ hands/.code = \def\mole@hands{#1},
+ hands = red!20!white!50!brown,
+ muzzle/.code = \def\mole@muzzle{#1},
+ muzzle = red!20!white!50!brown,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \mole@threeDtrue,
+}
+
+\def\mole@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.625,0.1) rectangle (0.905, 2.17);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmole@threeD
+ \def\mole@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\mole@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@feet] (-0.255,0.2) ellipse (0.23 and 0.09);
+\mole@part@draw[\mole@feet] (0.255,0.2) ellipse (0.23 and 0.09);
+%
+% Tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@body] (0.885, 0.67) .. controls (0.865, 0.4) and (0.345, 0.24) .. (0.335, 0.44) .. controls (0.315, 0.56) and (0.445, 0.51) .. (0.575, 0.53) .. controls (0.695, 0.54) and (0.885, 0.72) .. (0.885, 0.67) -- cycle;
+%
+% Hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@body] (-0.09, 2.06) .. controls (-0.09, 2.06) and (-0.13, 2.25) .. (-0.07, 2.27) .. controls (-0.09, 2.13) and (0.04, 2.08) .. (0.04, 2.08) .. controls (0.04, 2.08) and (0.02, 2.20) .. (0.06, 2.21) .. controls (0.06, 2.11) and (0.13, 2.08) .. (0.13, 2.08) -- cycle;
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@body] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
+%
+% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@body!50!white] (0.425, 0.71) .. controls (0.425, 0.41) and (0.245, 0.37) .. (0, 0.37) .. controls (-0.245, 0.37) and (-0.425, 0.41) .. (-0.425, 0.71) .. controls (-0.425, 1.01) and (-0.225, 1.26) .. (0, 1.26) .. controls (0.225, 1.26) and (0.425, 1.01) .. (0.425, 0.71) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@body,rotate around={70:(0.37,0.86)}] (0.37,0.86) ellipse (0.27 and 0.13);
+\mole@part@draw[\mole@body,rotate around={-70:(-0.37,0.86)}] (-0.37,0.86) ellipse (0.27 and 0.13);
+%
+% Hands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[white] (-0.37,0.6) -- (-0.32,0.53) -- (-0.3,0.6) -- (-0.23,0.55) -- (-0.23,0.64) -- (-0.16,0.59) -- (-0.18,0.67) -- cycle;
+\fill[white] (0.37,0.6) -- (0.32,0.53) -- (0.3,0.6) -- (0.23,0.55) -- (0.23,0.64) -- (0.16,0.59) -- (0.18,0.67) -- cycle;
+\mole@part@draw[\mole@hands,rotate around={70:(0.285,0.65)}] (0.285,0.65) ellipse (0.08 and 0.13);
+\mole@part@draw[\mole@hands,rotate around={-70:(-0.285,0.65)}] (-0.285,0.65) ellipse (0.08 and 0.13);
+%
+% Muzzle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@muzzle] ( 0.22, 1.46) .. controls ( 0.22, 1.50) and ( 0.22, 1.53) .. ( 0.17, 1.56) .. controls ( 0.11, 1.58) and ( 0.05, 1.66) .. ( 0.00, 1.66) .. controls (-0.05, 1.66) and (-0.11, 1.58) .. (-0.17, 1.56) .. controls (-0.22, 1.53) and (-0.22, 1.50) .. (-0.22, 1.46) .. controls (-0.22, 1.39) and (-0.14, 1.33) .. ( 0.00, 1.33) .. controls ( 0.14, 1.33) and ( 0.22, 1.39) .. ( 0.22, 1.46) -- cycle;
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\mole@part@draw[\mole@body!60!black] (0,1.67) circle (0.055);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmole@threeD
+ \fill[\mole@body!60!black,rotate around={-15:(-0.165,1.79)}] (-0.165,1.79) ellipse (0.055 and 0.015);
+ \fill[\mole@body!30!black,rotate around={15:(0.165,1.79)}] (0.165,1.79) ellipse (0.055 and 0.015);
+\else
+ \fill[\mole@body!60!black,rotate around={-15:(-0.165,1.79)}] (-0.165,1.79) ellipse (0.055 and 0.015);
+ \fill[\mole@body!60!black,rotate around={15:(0.165,1.79)}] (0.165,1.79) ellipse (0.055 and 0.015);
+\fi
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw[\mole@body!60!black, line width=\scalingfactor*0.4pt] (0.145,1.51) arc [start angle=-20, end angle=-160, radius=0.16] ;
+%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-owls.sty b/graphics/pgf/contrib/tikzlings/tikzlings-owls.sty
new file mode 100644
index 0000000000..b54f37f88a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-owls.sty
@@ -0,0 +1,136 @@
+% !TeX root = ./examples/owl.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-owls package (part of the tikzlings collection)
+% A package to draw litlle owls with tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-owls}
+ [2019/04/07 v0.2 Draw owls in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\owl}[1][]{%
+ \begin{scope}%
+ \tikzset{/owl/.cd,#1}%
+ \owl@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifowl@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /owl/.search also={/tikz,/pgf,/thing},
+ /owl/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\owl@body{#1},
+ body = brown!70!black,
+ eye/.code = \def\owl@eye{#1},
+ eye = white!90!gray,
+ pupil/.code = \def\owl@pupil{#1},
+ pupil = brown!30!black,
+ bill/.code = \def\owl@bill{#1},
+ bill = orange,
+ feet/.code = \def\owl@feet{#1},
+ feet = orange,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \owl@threeDtrue,
+}
+
+\def\owl@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.73, 0.08) rectangle (0.73, 2.24);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifowl@threeD
+ \def\owl@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\owl@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0.925)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\owl@part@draw[\owl@body,rotate around={-80:(0.575,0.8)}] (0.575,0.8) ellipse (0.38 and 0.1);
+\owl@part@draw[\owl@body,rotate around={80:(-0.575,0.8)}] (-0.575,0.8) ellipse (0.38 and 0.1);
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\owl@part@draw[\owl@body] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\owl@part@draw[\owl@body] (-0.6361, 1.777) .. controls (-0.6361, 1.777) and (-0.7586, 1.9603) .. (-0.6759, 2.2145) .. controls (-0.3248, 1.912) and (0.3248, 1.912) .. (0.6759, 2.2145) .. controls (0.7586, 1.9603) and (0.6361, 1.777) .. (0.6361, 1.777);
+%
+% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\owl@part@draw[\owl@body!50!white] (0.425,0.5) .. controls (0.425,0.31) and (0.245,0.27) .. (0,0.27) .. controls (-0.245,0.27) and (-0.425,0.31) .. (-0.425,0.5) .. controls (-0.425,0.81) and (-0.225,0.98) .. (0,0.98) .. controls (0.225,0.98) and (0.425,0.81) .. (0.425,0.5) -- cycle;
+%
+% head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\owl@part@draw[\owl@body] (0,1.55) ellipse (0.7 and 0.55);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\owl@eye] (-0.28, 1.6) circle (0.22);
+\owl@part@draw[\owl@pupil] (-0.28, 1.6) circle (0.15);
+\fill[\owl@eye] (0.28, 1.6) circle (0.22);
+\owl@part@draw[\owl@pupil] (0.28, 1.6) circle (0.15);
+\owl@part@draw[white] (0.25, 1.64) circle (0.03);
+\owl@part@draw[white] (-0.31, 1.64) circle (0.03);
+%
+% Bill %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\owl@part@draw[\owl@bill] (0, 1.4) -- (-0.1, 1.3) -- (0, 1.15) -- (0.1, 1.3) -- cycle;
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\owl@part@draw[\owl@feet] (0.175,0.2) ellipse (0.03 and 0.1);
+\owl@part@draw[\owl@feet,rotate around={20:(0.225,0.21)}] (0.225,0.21) ellipse (0.03 and 0.1);
+\owl@part@draw[\owl@feet,rotate around={40:(0.275,0.23)}] (0.275,0.23) ellipse (0.03 and 0.1);
+\owl@part@draw[\owl@feet] (-0.175,0.2) ellipse (0.03 and 0.1);
+\owl@part@draw[\owl@feet,rotate around={-20:(-0.225,0.21)}] (-0.225,0.21) ellipse (0.03 and 0.1);
+\owl@part@draw[\owl@feet,rotate around={-40:(-0.275,0.23)}] (-0.275,0.23) ellipse (0.03 and 0.1);
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-pandas.sty b/graphics/pgf/contrib/tikzlings/tikzlings-pandas.sty
new file mode 100644
index 0000000000..1361cd2df7
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-pandas.sty
@@ -0,0 +1,128 @@
+% !TeX root = ./examples/panda.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-pandas package (part of the tikzlings collection)
+% A package to bring little pandas into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-pandas}
+ [2019/04/07 v0.2 Drawing pandas in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\panda}[1][]{%
+ \begin{scope}%
+ \tikzset{/panda/.cd,#1}%
+ \panda@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifpanda@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /panda/.search also={/tikz,/pgf,/thing},
+ /panda/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\panda@body{#1},
+ body = white!90!black,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \panda@threeDtrue,
+}
+
+\def\panda@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.62,0.05) rectangle (0.62, 2.18);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifpanda@threeD
+ \def\panda@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\panda@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\panda@part@draw[\panda@body!55!white] (0,0.78) ellipse (0.57 and 0.65);
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{scope}[yshift=-0.08cm]
+\panda@part@draw[black,rotate around={70:(0.28,0.93)}] (0.28,0.93) ellipse (0.24 and 0.13);
+\panda@part@draw[black,rotate around={-70:(-0.28,0.93)}] (-0.28,0.93) ellipse (0.24 and 0.13);
+\end{scope}
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\panda@part@draw[black] (0.32, 0.27) circle (0.2);
+\panda@part@draw[black] (-0.32, 0.27) circle (0.2);
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\panda@part@draw[black] (0.32, 2) circle (0.15);
+\panda@part@draw[black] (-0.32, 2) circle (0.15);
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\panda@part@draw[\panda@body!55!white] (0.4897, 1.5886) .. controls (0.4614, 1.8238) and (0.25, 2.1172) .. (0, 2.1134) .. controls (-0.25, 2.1172) and (-0.4614, 1.8238) .. (-0.4897, 1.5886) .. controls (-0.5261, 1.3269) and (-0.2748, 1.2377) .. (0, 1.2377) .. controls (0.2748, 1.2377) and (0.5261, 1.3269) .. (0.4897, 1.5886) -- cycle;
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\panda@part@draw[black] (0.3732, 1.6905) .. controls (0.3498, 1.767) and (0.2032, 1.8059) .. (0.0944, 1.7715) .. controls (-0.0145, 1.7371) and (0.173, 1.5479) .. (0.2508, 1.5443) .. controls (0.3286, 1.5407) and (0.3965, 1.614) .. (0.3732, 1.6905) -- cycle;
+\panda@part@draw[black] (-0.3732, 1.6905) .. controls (-0.3498, 1.767) and (-0.2032, 1.8059) .. (-0.0944, 1.7715) .. controls (0.0145, 1.7371) and (-0.173, 1.5479) .. (-0.2508, 1.5443) .. controls (-0.3286, 1.5407) and (-0.3965, 1.614) .. (-0.3732, 1.6905) -- cycle;
+\panda@part@draw[white] (-0.18, 1.7) circle (0.05);
+\panda@part@draw[white] (0.18, 1.7) circle (0.05);
+\panda@part@draw[black] (0.17, 1.695) circle (0.02);
+\panda@part@draw[black] (-0.17, 1.695) circle (0.02);
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw[black,line width=\scalingfactor*0.2pt] (-0.16, 1.477) .. controls (-0.16, 1.477) and (-0.062, 1.37) .. (0, 1.506) .. controls (0.062, 1.37) and (0.16, 1.477) .. (0.16, 1.477);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\panda@part@draw[black] (0,1.55) ellipse (0.07 and 0.04);
+%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-penguins.sty b/graphics/pgf/contrib/tikzlings/tikzlings-penguins.sty
new file mode 100644
index 0000000000..70d90092fa
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-penguins.sty
@@ -0,0 +1,128 @@
+% !TeX root = ./examples/pingu.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-penguins package (part of the tikzlings collection)
+% A package to bring penguins into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-penguins}
+ [2019/04/07 v0.2 Draw penguins in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\penguin}[1][]{%
+ \begin{scope}%
+ \tikzset{/penguin/.cd,#1}%
+ \penguin@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifpenguin@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /penguin/.search also={/tikz,/pgf,/thing},
+ /penguin/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\penguin@body{#1},
+ body = black,
+ belly/.code = \def\penguin@belly{#1},
+ belly = white!95!black,
+ feet/.code = \def\penguin@feet{#1},
+ feet = yellow!50!orange,
+ bill/.code = \def\penguin@bill{#1},
+ bill = orange,
+ eye/.code = \def\penguin@eye{#1},
+ eye = white!95!black,
+ pupil/.code = \def\penguin@pupil{#1},
+ pupil = black,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \penguin@threeDtrue,
+}
+
+\def\penguin@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.865, 0.15) rectangle (0.865, 2.13);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifpenguin@threeD
+ \def\penguin@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\penguin@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0.925)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\penguin@part@draw[\penguin@body,rotate around={-50:(0.575,1.2)}] (0.575,1.2) ellipse (0.38 and 0.1);
+\penguin@part@draw[\penguin@body,rotate around={50:(-0.575,1.2)}] (-0.575,1.2) ellipse (0.38 and 0.1);
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\penguin@part@draw[\penguin@body] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
+%
+% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\penguin@part@draw[\penguin@belly] (0, 0.6) ellipse (0.48 and 0.35);
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\penguin@part@draw[\penguin@feet]
+(-0.265, 0.3941) .. controls (-0.283, 0.4505) and (-0.373, 0.6014) .. (-0.470, 0.6533) .. controls (-0.571, 0.7075) and (-0.576, 0.6369) .. (-0.554, 0.596) .. controls (-0.526, 0.5416) and (-0.573, 0.5302) .. (-0.602, 0.5384) .. controls (-0.695, 0.5653) and (-0.767, 0.5169) .. (-0.684, 0.434) .. controls (-0.664, 0.4137) and (-0.587, 0.3557) .. (-0.699, 0.3492) .. controls (-0.772, 0.345) and (-0.779, 0.268) .. (-0.689, 0.2445) .. controls (-0.597, 0.2206) and (-0.476, 0.2043) .. (-0.34, 0.2096) .. controls (-0.252, 0.2131) and (-0.237, 0.3059) .. (-0.265, 0.3941) -- cycle;
+\penguin@part@draw[\penguin@feet]
+(0.265, 0.3941) .. controls (0.283, 0.4505) and (0.3725, 0.6014) .. (0.469, 0.6533) .. controls (0.571, 0.7075) and (0.5756, 0.6369) .. (0.554, 0.596) .. controls (0.526, 0.5416) and (0.5733, 0.5302) .. (0.602, 0.5384) .. controls (0.695, 0.5653) and (0.7672, 0.5169) .. (0.684, 0.434) .. controls (0.663, 0.4137) and (0.587, 0.3557) .. (0.699, 0.3492) .. controls (0.772, 0.345) and (0.7789, 0.268) .. (0.689, 0.2445) .. controls (0.597, 0.2206) and (0.4764, 0.2043) .. (0.34, 0.2096) .. controls (0.252, 0.2131) and (0.2368, 0.3059) .. (0.265, 0.3941) -- cycle;
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\penguin@eye,rotate around={-10:(-0.175,1.64)}] (-0.175,1.64) ellipse (0.1 and 0.15);
+\fill[\penguin@pupil,rotate around={-3:(-0.145,1.625)}] (-0.145,1.625) ellipse (0.0357 and 0.0714);
+\fill[\penguin@eye,rotate around={10:(0.175,1.64)}] (0.175,1.64) ellipse (0.1 and 0.15);
+\fill[\penguin@pupil,rotate around={3:(0.145,1.625)}] (0.145,1.625) ellipse (0.0357 and 0.0714);
+%
+% Bill %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\penguin@part@draw[\penguin@bill] (0.323, 1.4591) .. controls (0.1467, 1.3257) and (0.1066, 1.4365) .. (0, 1.4358) .. controls (-0.1066, 1.4365) and (-0.1467, 1.3257) .. (-0.323, 1.4591) .. controls (-0.1267, 1.075) and (0.1267, 1.075) .. (0.323, 1.4591) -- cycle;
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-pigs.sty b/graphics/pgf/contrib/tikzlings/tikzlings-pigs.sty
new file mode 100644
index 0000000000..8ebc701955
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-pigs.sty
@@ -0,0 +1,134 @@
+% !TeX root = ./examples/pig.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-pigs package (part of the tikzlings collection)
+% A package to bring little pigs into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-pigs}
+ [2019/04/07 v0.2 Drawing pigs in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+\definecolor{pigdark}{RGB}{241,164,142}
+
+\newcommand*{\pig}[1][]{%
+ \begin{scope}%
+ \tikzset{/pig/.cd,#1}%
+ \pig@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifpig@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /pig/.search also={/tikz,/pgf,/thing},
+ /pig/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\pig@body{#1},
+ body = pigdark,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \pig@threeDtrue,
+}
+
+\def\pig@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.625,0.1) rectangle (0.905, 2.27);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifpig@threeD
+ \def\pig@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\pig@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw[\pig@body,line width=\scalingfactor*0.8pt] (0.8471, 0.5927) .. controls (0.8549, 0.4832) and (0.8046, 0.4105) .. (0.7319, 0.4079) .. controls (0.6592, 0.4052) and (0.6142, 0.4365) .. (0.5964, 0.5024) .. controls (0.5786, 0.5682) and (0.6252, 0.6291) .. (0.6794, 0.6342) .. controls (0.7335, 0.6394) and (0.7561, 0.6114) .. (0.7663, 0.5661) .. controls (0.7765, 0.5208) and (0.746, 0.458) .. (0.7192, 0.4319) .. controls (0.6924, 0.4058) and (0.7073, 0.4182) .. (0.6604, 0.3859) .. controls (0.6134, 0.3536) and (0.4367, 0.3643) .. (0.3877, 0.5055);
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pig@part@draw[\pig@body!55!white] ( 0.6, 0.8 ) .. controls ( 0.6 , 0.4) and ( 0.35, 0.16) .. ( 0.0, 0.16) .. controls (-0.35, 0.16) and (-0.6 , 0.4) .. (-0.6, 0.8 ) .. controls (-0.6 , 1.3) and (-0.35, 1.5) .. ( 0.0, 1.5) .. controls ( 0.35, 1.5) and ( 0.6 , 1.3) .. ( 0.6, 0.75) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pig@part@draw[\pig@body] (-0.2402, 0.9823) .. controls (-0.2994, 1.0582) and (-0.3721, 1.0651) .. (-0.4024, 0.9978) .. controls (-0.4327, 0.9305) and (-0.4092, 0.8145) .. (-0.35, 0.7386) .. controls (-0.3311, 0.7145) and (-0.3101, 0.6964) .. (-0.289, 0.6862) .. controls (-0.2755, 0.7023) and (-0.2498, 0.7563) .. (-0.2498, 0.7563) .. controls (-0.2498, 0.7563) and (-0.1790, 0.731) .. (-0.1611, 0.746) .. controls (-0.1611, 0.746) and (-0.1809, 0.9064) .. (-0.2402, 0.9823) -- cycle;
+\pig@part@draw[\pig@body] (0.2402, 0.9823) .. controls (0.2994, 1.0582) and (0.3721, 1.0651) .. (0.4024, 0.9978) .. controls (0.4327, 0.9305) and (0.4092, 0.8145) .. (0.35, 0.7386) .. controls (0.3311, 0.7145) and (0.3101, 0.6964) .. (0.289, 0.6862) .. controls (0.2755, 0.7023) and (0.2498, 0.7563) .. (0.2498, 0.7563) .. controls (0.2498, 0.7563) and (0.1790, 0.731) .. (0.1611, 0.746) .. controls (0.1611, 0.746) and (0.1809, 0.9064) .. (0.2402, 0.9823) -- cycle;
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pig@part@draw[\pig@body!55!white] (0,1.64) ellipse (.5 and .5);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pig@part@draw[gray] (-0.09, 1.82) circle (0.02);
+\pig@part@draw[gray] ( 0.09, 1.82) circle (0.02);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pig@part@draw[\pig@body] (0, 1.62) ellipse (0.18 and 0.14);
+\pig@part@draw[gray] (-0.06, 1.62) circle (0.035);
+\pig@part@draw[gray] ( 0.06, 1.62) circle (0.035);
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifpig@threeD
+ \draw[gray!70!black,line width=\scalingfactor*0.4pt] (0.105, 1.46) arc [start angle=-50, end angle=-130, radius=0.16] ;
+\else
+ \draw[gray,line width=\scalingfactor*0.4pt] (0.105, 1.46) arc [start angle=-50, end angle=-130, radius=0.16] ;
+\fi
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pig@part@draw[\pig@body] (0.22, 2.0392) .. controls (0.22, 2.1584) and (0.49460, 2.255) .. (0.49460, 2.255) .. controls (0.49460, 2.255) and (0.5300, 1.86) .. (0.3721, 1.86) .. controls (0.2891, 1.86) and (0.22, 1.9201) .. (0.22, 2.0392) -- cycle;
+\pig@part@draw[\pig@body!55!white] (0.22, 2.0392) .. controls (0.26, 2.1584) and (0.47, 2.22) .. (0.47, 2.20) .. controls (0.47, 2.2) and (0.49, 1.9) .. (0.3721, 1.9) .. controls (0.2891, 1.88) and (0.22, 1.88) .. (0.22, 2.0392) -- cycle;
+\pig@part@draw[\pig@body] (-0.22, 2.0392) .. controls (-0.22, 2.1584) and (-0.49460, 2.255) .. (-0.49460, 2.255) .. controls (-0.49460, 2.255) and (-0.5300, 1.86) .. (-0.3721, 1.86) .. controls (-0.2891, 1.86) and (-0.22, 1.9201) .. (-0.22, 2.0392) -- cycle;
+\pig@part@draw[\pig@body!55!white] (-0.22, 2.0392) .. controls (-0.26, 2.1584) and (-0.47, 2.22) .. (-0.47, 2.20) .. controls (-0.47, 2.2) and (-0.49, 1.9) .. (-0.3721, 1.9) .. controls (-0.2891, 1.88) and (-0.22, 1.88) .. (-0.22, 2.0392) -- cycle;
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pig@part@draw[\pig@body] (0.3216,0.15) arc (-15:195:0.12) -- (0.16,0.15) to [bend left] (0.25,0.15) -- cycle;
+\pig@part@draw[\pig@body] (-0.3216,0.15) arc (195:-15:0.12) -- (-0.16,0.15) to[bend right] (-0.25,0.15) --cycle;
+%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-rhinos.sty b/graphics/pgf/contrib/tikzlings/tikzlings-rhinos.sty
new file mode 100644
index 0000000000..dabbd15f17
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-rhinos.sty
@@ -0,0 +1,142 @@
+% !TeX root = ./examples/rhino.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-rhinos package (part of the tikzlings collection)
+% A package to bring little rhinos into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-rhinos}
+ [2019/04/07 v0.2 Drawing rhinos in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\rhino}[1][]{%
+ \begin{scope}%
+ \tikzset{/rhino/.cd,#1}%
+ \rhino@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifrhino@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /rhino/.search also={/tikz,/pgf,/thing},
+ /rhino/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\rhino@body{#1},
+ body = gray,
+ toes/.code = \def\rhino@toes{#1},
+ toes = \rhino@body!55!white,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \rhino@threeDtrue,
+}
+
+\def\rhino@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.625,0.1) rectangle (0.625, 2.17);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifrhino@threeD
+ \def\rhino@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\rhino@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\rhino@part@draw[\rhino@body] (-0.1772, 2.0686) .. controls (-0.2057, 2.1602) and (-0.3552, 2.2076) .. (-0.3552, 2.1922) .. controls (-0.3552, 2.1922) and (-0.3694, 1.9615) .. (-0.2855, 1.9615) .. controls (-0.2264, 1.9462) and (-0.1772, 1.9462) .. (-0.1772, 2.0686) -- cycle;
+\rhino@part@draw[\rhino@body] (0.1772, 2.0686) .. controls (0.2057, 2.1602) and (0.3552, 2.2076) .. (0.3552, 2.1922) .. controls (0.3552, 2.1922) and (0.3694, 1.9615) .. (0.2855, 1.9615) .. controls (0.2264, 1.9462) and (0.1772, 1.9462) .. (0.1772, 2.0686) -- cycle;
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\rhino@part@draw[\rhino@body!55!white] ( 0.55, 0.8 ) .. controls ( 0.55 , 0.4) and ( 0.35, 0.19) .. ( 0.0, 0.19) .. controls (-0.35, 0.19) and (-0.55 , 0.4) .. (-0.55, 0.8 ) .. controls (-0.55 , 1.3) and (-0.35, 1.65) .. ( 0.0, 1.65) .. controls ( 0.35, 1.65) and ( 0.55 , 1.3) .. ( 0.55, 0.75) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\rhino@part@draw[\rhino@body,rotate around={90:(0.3,1.0)}] (0.3,1.0) ellipse (0.24 and 0.13);
+\rhino@part@draw[\rhino@body,rotate around={-90:(-0.3,1.0)}] (-0.3,1.0) ellipse (0.24 and 0.13);
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\rhino@part@draw[\rhino@body!55!white] (0, 1.76) circle (0.36);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[white] (-0.11, 1.83) ellipse (0.08 and 0.12);
+\fill[white] (0.11, 1.83) ellipse (0.08 and 0.12);
+\fill[black] (-0.105, 1.78) ellipse (0.04 and 0.07);
+\fill[black] (0.105, 1.78) ellipse (0.04 and 0.07);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\rhino@part@draw[\rhino@body!80!white] (0, 1.55) ellipse (0.36 and 0.2);
+%
+% Horn %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\rhino@part@draw[white!95!yellow] (0, 1.7911) .. controls (-0.0231, 1.7372) and (-0.0463, 1.6832) .. (-0.0642, 1.6274) .. controls (-0.0687, 1.6132) and (-0.0724, 1.5981) .. (-0.0678, 1.5834) .. controls (-0.0603, 1.552) and (-0.0287, 1.5287) .. (0, 1.531) .. controls (0.0287, 1.5287) and (0.0603, 1.552) .. (0.0678, 1.5834) .. controls (0.0724, 1.5981) and (0.0687, 1.6132) .. (0.0642, 1.6274) .. controls (0.0463, 1.6832) and (0.0231, 1.7372) .. (0, 1.7911) -- cycle;
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifrhino@threeD
+ \draw[black,line width=\scalingfactor*0.4pt] (0.125, 1.5) arc [start angle=-50, end angle=-130, radius=0.2] ;
+ \else
+ \draw[\rhino@body!70!black,line width=\scalingfactor*0.4pt] (0.125, 1.5) arc [start angle=-50, end angle=-130, radius=0.2] ;
+ \fi
+ %
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{scope}
+ \clip (-0.5,0.4) rectangle (0.5,0.13);
+ \rhino@part@draw[\rhino@body] (-0.25,0.15) ellipse (0.16 and 0.17);
+ \rhino@part@draw[\rhino@body] (0.25,0.15) ellipse (0.16 and 0.17);
+ \rhino@part@draw[\rhino@toes] (0.25,0.13) ellipse (0.05 and 0.1);
+ \rhino@part@draw[\rhino@toes] (0.13,0.11) ellipse (0.05 and 0.1);
+ \rhino@part@draw[\rhino@toes] (0.37,0.11) ellipse (0.05 and 0.1);
+ \rhino@part@draw[\rhino@toes] (-0.25,0.13) ellipse (0.05 and 0.1);
+ \rhino@part@draw[\rhino@toes] (-0.13,0.11) ellipse (0.05 and 0.1);
+ \rhino@part@draw[\rhino@toes] (-0.37,0.11) ellipse (0.05 and 0.1);
+\end{scope}
+%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-sloths.sty b/graphics/pgf/contrib/tikzlings/tikzlings-sloths.sty
new file mode 100644
index 0000000000..7d774bec90
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-sloths.sty
@@ -0,0 +1,171 @@
+% !TeX root = ./examples/sloth.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-sloths package (part of the tikzlings collection)
+% A package to bring little sloths into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-sloths}
+ [2019/04/07 v0.2 Drawing sloths in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\definecolor{slothcol}{RGB}{168,156,123}
+
+\newcommand*{\sloth}[1][]{%
+ \begin{scope}%
+ \tikzset{/sloth/.cd,#1}%
+ \sloth@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifsloth@sleeping
+\newif\ifsloth@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /sloth/.search also={/tikz,/pgf,/thing},
+ /sloth/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\sloth@body{#1},
+ body = slothcol,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ sleeping/.code = \sloth@sleepingtrue,
+ 3D/.code = \sloth@threeDtrue,
+}
+
+\def\sloth@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.7,0.12) rectangle (0.7, 2.27);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifsloth@threeD
+ \def\sloth@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\sloth@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\sloth@part@draw[\sloth@body!85!black] (0.53,0.85) .. controls (0.53,0.29) and (0.32,0.22) .. (0,0.22) .. controls (-0.32,0.22) and (-0.53,0.29) ..
+(-0.53,0.85) .. controls (-0.53,1.41) and (-0.32,1.87) .. (0,1.87) .. controls (0.33,1.87) and (0.53,1.41) .. (0.53,0.85) -- cycle;
+%
+% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\sloth@part@draw[\sloth@body]
+( 0.50,1.67) .. controls ( 0.50,1.91) and ( 0.27,2.10) ..
+( 0.00,2.10) .. controls (-0.27,2.10) and (-0.50,1.91) .. (-0.50,1.67) .. controls (-0.50,1.43) and (-0.33,1.28) ..
+( 0.00,1.28) .. controls ( 0.33,1.28) and ( 0.50,1.43) ..
+( 0.50,1.67) -- cycle;
+\sloth@part@draw[\sloth@body!50!white] ( 0.40,1.67) .. controls ( 0.40,1.90) and ( 0.12,2.09) .. ( 0.00,1.93) .. controls (-0.12,2.09) and (-0.40,1.90) .. (-0.40,1.67) .. controls (-0.40,1.45) and (-0.25,1.38) .. ( 0.00,1.38) .. controls ( 0.25,1.38) and ( 0.40,1.45) .. ( 0.40,1.67) -- cycle;
+%
+% behind the eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\sloth@body!60!black] (0.3785,1.5336) .. controls (0.3012,1.5864) and (0.1829,1.6693) .. (0.1377,1.7234) .. controls (0.1184,1.7464) and (0.1624,1.8242) .. (0.1906,1.8137) .. controls (0.2673,1.7851) and (0.3597,1.7125) .. (0.3994,1.6531) .. controls (0.4129,1.6328) and (0.3785,1.5336) .. (0.3785,1.5336) -- cycle;
+\fill[\sloth@body!60!black] (-0.3785,1.5336) .. controls (-0.3012,1.5864) and (-0.1829,1.6693) .. (-0.1377,1.7234) .. controls (-0.1184,1.7464) and (-0.1624,1.8242) .. (-0.1906,1.8137) .. controls (-0.2673,1.7851) and (-0.3597,1.7125) .. (-0.3994,1.6531) .. controls (-0.4129,1.6328) and (-0.3785,1.5336) .. (-0.3785,1.5336) -- cycle;
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifsloth@sleeping
+ \fill[\sloth@body!50!white] (0.237, 1.743) .. controls (0.237, 1.712) and (0.157, 1.712) .. (0.157, 1.743) .. controls (0.157, 1.802) and (0.237, 1.802) .. (0.237, 1.743) -- cycle;
+ \fill[\sloth@body!50!white] (-0.237, 1.743) .. controls (-0.237, 1.712) and (-0.157, 1.712) .. (-0.157, 1.743) .. controls (-0.157, 1.802) and (-0.237, 1.802) .. (-0.237, 1.743) -- cycle;
+ %
+ \fill[\sloth@body!50!white] (0.195, 1.705) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={22:(0.195, 1.76)}] (0.195, 1.705) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={44:(0.195, 1.76)}] (0.195, 1.701) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={-22:(0.195, 1.76)}] (0.195, 1.705) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={-44:(0.195, 1.76)}] (0.195, 1.705) rectangle ++(0.005, 0.02);
+ %
+ \fill[\sloth@body!50!white] (-0.195, 1.705) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={22:(-0.195, 1.76)}] (-0.195, 1.705) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={44:(-0.195, 1.76)}] (-0.195, 1.705) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={-22:(-0.195, 1.76)}] (-0.195, 1.705) rectangle ++(0.005, 0.02);
+ \fill[\sloth@body!50!white,rotate around={-44:(-0.195, 1.76)}] (-0.195, 1.701) rectangle ++(0.005, 0.02);
+\else
+ \sloth@part@draw[black] (0.193,1.75) circle (0.04);
+ \sloth@part@draw[black] (-0.193,1.75) circle (0.04);
+ \fill[white] (-0.2 ,1.765) circle (0.006);
+ \fill[white] ( 0.186,1.765) circle (0.006);
+\fi
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\sloth@part@draw[\sloth@body!40!black] (0,1.665) ellipse (0.078 and 0.048);
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw[\sloth@body!40!black,line width=\scalingfactor*0.4pt] (0.115, 1.55) arc [start angle=-40, end angle=-140, radius=0.16];
+%
+% Hair %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\sloth@part@draw[\sloth@body] (-0.1128,2.0724) .. controls (-0.1128,2.0724) and (-0.1499,2.2329) .. (-0.0972,2.2525) .. controls (-0.1082,2.1318) and (-0.0047,2.0839) .. (-0.0047,2.0839) .. controls (-0.0047,2.0839) and (-0.0219,2.1866) .. (0.0145,2.1933) .. controls (0.0142,2.1159) and (0.0770,2.0884) .. (0.0770,2.0884) -- cycle;
+%
+% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\sloth@part@draw[\sloth@body!70!white] (0.36, 0.74) .. controls (0.36, 0.49) and (0.22, 0.41) .. (0, 0.41) .. controls (-0.22, 0.41) and (-0.36, 0.49) .. (-0.36, 0.74) .. controls (-0.36, 1) and (-0.22, 1.16) .. (0, 1.16) .. controls (0.22, 1.16) and (0.36, 1) .. (0.36, 0.74) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\sloth@part@draw[\sloth@body] (-0.50, 1.24) .. controls (-0.54, 1.24) and (-0.55, 1.20) .. (-0.56, 1.17) .. controls (-0.61, 1.06) and (-0.63, 0.95) .. (-0.64, 0.83) .. controls (-0.64, 0.80) and (-0.64, 0.77) .. (-0.63, 0.74) .. controls (-0.57, 0.66) and (-0.47, 0.60) .. (-0.38, 0.56) .. controls (-0.31, 0.54) and (-0.23, 0.52) .. (-0.16, 0.54) .. controls (-0.12, 0.54) and (-0.10, 0.59) .. (-0.13, 0.61) .. controls (-0.17, 0.68) and (-0.24, 0.73) .. (-0.30, 0.77) .. controls (-0.34, 0.79) and (-0.38, 0.81) .. (-0.42, 0.83) .. controls (-0.41, 0.92) and (-0.41, 1.01) .. (-0.42, 1.09) .. controls (-0.43, 1.14) and (-0.44, 1.19) .. (-0.48, 1.23) .. controls (-0.48, 1.24) and (-0.49, 1.24) .. (-0.50, 1.24) -- cycle;
+\sloth@part@draw[\sloth@body] (0.50, 1.24) .. controls (0.54, 1.24) and (0.55, 1.20) .. (0.56, 1.17) .. controls (0.61, 1.06) and (0.63, 0.95) .. (0.64, 0.83) .. controls (0.64, 0.80) and (0.64, 0.77) .. (0.63, 0.74) .. controls (0.57, 0.66) and (0.47, 0.60) .. (0.38, 0.56) .. controls (0.31, 0.54) and (0.23, 0.52) .. (0.16, 0.54) .. controls (0.12, 0.54) and (0.10, 0.59) .. (0.13, 0.61) .. controls (0.17, 0.68) and (0.24, 0.73) .. (0.30, 0.77) .. controls (0.34, 0.79) and (0.38, 0.81) .. (0.42, 0.83) .. controls (0.41, 0.92) and (0.41, 1.01) .. (0.42, 1.09) .. controls (0.43, 1.14) and (0.44, 1.19) .. (0.48, 1.23) .. controls (0.48, 1.24) and (0.49, 1.24) .. (0.50, 1.24) -- cycle;
+%
+\fill[\sloth@body!50!black,rotate around={110:(0.15, 0.61)}] (0.15, 0.61) ellipse (0.017 and 0.07);
+\fill[\sloth@body!50!black,rotate around={117:(0.17, 0.57)}] (0.17, 0.57) ellipse (0.015 and 0.07);
+\fill[\sloth@body!50!black,rotate around={125:(0.19, 0.53)}] (0.19, 0.53) ellipse (0.012 and 0.062);
+%
+\fill[\sloth@body!50!black,rotate around={-110:(-0.15, 0.61)}] (-0.15, 0.61) ellipse (0.017 and 0.07);
+\fill[\sloth@body!50!black,rotate around={-117:(-0.17, 0.57)}] (-0.17, 0.57) ellipse (0.015 and 0.07);
+\fill[\sloth@body!50!black,rotate around={-125:(-0.19, 0.53)}] (-0.19, 0.53) ellipse (0.012 and 0.062);
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\sloth@part@draw[\sloth@body,rotate around={25:(0.33,0.31)}] (0.33,0.31) ellipse (0.25 and 0.13);
+\sloth@part@draw[\sloth@body,rotate around={-25:(-0.33,0.31)}] (-0.33,0.31) ellipse (0.25 and 0.13);
+\fill[\sloth@body!50!black,rotate around={-10:(-0.125,0.265)}] (-0.125,0.265) ellipse (0.07 and 0.019);
+\fill[\sloth@body!50!black,rotate around={-16:(-0.14,0.21)}] (-0.14,0.21) ellipse (0.07 and 0.017);
+\fill[\sloth@body!50!black,rotate around={-22:(-0.16,0.165)}] (-0.16,0.165) ellipse (0.07 and 0.015);
+\fill[\sloth@body!50!black,rotate around={10:(0.125,0.265)}] (0.125,0.265) ellipse (0.07 and 0.019);
+\fill[\sloth@body!50!black,rotate around={16:(0.14,0.21)}] (0.14,0.21) ellipse (0.07 and 0.017);
+\fill[\sloth@body!50!black,rotate around={22:(0.16,0.165)}] (0.16,0.165) ellipse (0.07 and 0.015);
+%
+}
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings-snowmans.sty b/graphics/pgf/contrib/tikzlings/tikzlings-snowmans.sty
new file mode 100644
index 0000000000..c084e99bcb
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings-snowmans.sty
@@ -0,0 +1,132 @@
+% !TeX root = ./examples/snowman.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings-snowmans package (part of the tikzlings collection)
+% A package to bring snowmans into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings-snowmans}
+ [2019/04/07 v0.2 Draw snowmans in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-addons}
+
+\newcommand*{\snowman}[1][]{%
+ \begin{scope}%
+ \tikzset{/snowman/.cd,#1}%
+ \snowman@draw%
+ \end{scope}%
+ \thing[#1]%
+}
+
+\newif\ifsnowman@threeD
+
+\tikzset{
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % Pass unknown keys on to tikz
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ /snowman/.search also={/tikz,/pgf,/thing},
+ /snowman/.cd,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % body
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ body/.code = \def\snowman@body{#1},
+ body = white!95!black,
+ eye/.code = \def\snowman@eye{#1},
+ eye = black,
+ nose/.code = \def\snowman@nose{#1},
+ nose = orange,
+ mouth/.code = \def\snowman@mouth{#1},
+ mouth = black,
+ buttons/.code = \def\snowman@buttons{#1},
+ buttons = black,
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %
+ % options
+ %
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 3D/.code = \snowman@threeDtrue,
+}
+
+\def\snowman@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (-0.75, 0.0) rectangle (0.75, 2.13);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% store the current scale factor
+% from https://github.com/samcarter/tikzlings/issues/3#issuecomment-461373494
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfgettransformentries{\tmpscaleA}{\tmpscaleB}{\tmpscaleC}{\tmpscaleD}{\tmp}{\tmp}%
+\pgfmathsetmacro{\scalingfactor}{sqrt(abs(\tmpscaleA*\tmpscaleD-\tmpscaleB*\tmpscaleC))}%
+\pgfmathsetmacro{\xscalefactor}{\tmpscaleA}
+\pgfmathsetmacro{\yscalefactor}{\tmpscaleD}
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifsnowman@threeD
+ \def\snowman@part@draw[##1]{\shade[ball color=##1]}
+\else
+ \def\snowman@part@draw[##1]{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0.925)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\snowman@part@draw[\snowman@body,rotate around={-50:(0.5,1.1)}] (0.5,1.1) ellipse (0.3 and 0.12);
+\snowman@part@draw[\snowman@body,rotate around={50:(-0.5,1.1)}] (-0.5,1.1) ellipse (0.3 and 0.12);
+%
+% Body + Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\snowman@part@draw[\snowman@body] (0,0.5) ellipse (0.6 and 0.5);
+\snowman@part@draw[\snowman@body] (0,1.1) ellipse (0.5 and 0.4);
+\snowman@part@draw[\snowman@body] (0,1.7) circle (0.4);
+%
+% Mouth% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\fill[\snowman@mouth] (0,1.5) circle (0.016);
+\fill[\snowman@mouth] (0.04,1.507) circle (0.016);
+\fill[\snowman@mouth] (-0.04,1.507) circle (0.016);
+\fill[\snowman@mouth] (0.08,1.522) circle (0.016);
+\fill[\snowman@mouth] (-0.08,1.522) circle (0.016);
+\fill[\snowman@mouth] (0.12,1.543) circle (0.016);
+\fill[\snowman@mouth] (-0.12,1.543) circle (0.016);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\snowman@part@draw[\snowman@eye] (-0.155,1.8) circle (0.04);
+\snowman@part@draw[\snowman@eye] (0.155,1.8) circle (0.04);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\snowman@part@draw[\snowman@nose] (0,1.67) circle (0.05) (0,1.72) -- (0,1.62) -- (0.15,1.64) -- cycle;
+%
+% buttons %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\snowman@part@draw[\snowman@buttons] (0,1.15) circle (0.04);
+\snowman@part@draw[\snowman@buttons] (0,0.95) circle (0.04);
+\snowman@part@draw[\snowman@buttons] (0,0.75) circle (0.04);
+%
+}
diff --git a/graphics/pgf/contrib/tikzlings/tikzlings.sty b/graphics/pgf/contrib/tikzlings/tikzlings.sty
new file mode 100644
index 0000000000..5a4499a590
--- /dev/null
+++ b/graphics/pgf/contrib/tikzlings/tikzlings.sty
@@ -0,0 +1,67 @@
+% !TeX root = ./examples/tikzlings.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzlings
+% A collection of packages to draw animals in tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzlings
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 0.2
+% April 7, 2019
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzlings}
+ [2019/04/07 v0.2 Collection of packages to draw animals and other beings in TikZ]
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% load sub-packages
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{tikz}
+\RequirePackage{tikzlings-bears}
+\RequirePackage{tikzlings-penguins}
+\RequirePackage{tikzlings-marmots}
+\RequirePackage{tikzlings-owls}
+\RequirePackage{tikzlings-koalas}
+\RequirePackage{tikzlings-coatis}
+\RequirePackage{tikzlings-snowmans}
+\RequirePackage{tikzlings-mice}
+\RequirePackage{tikzlings-moles}
+\RequirePackage{tikzlings-sloths}
+\RequirePackage{tikzlings-pigs}
+\RequirePackage{tikzlings-cats}
+\RequirePackage{tikzlings-hippos}
+\RequirePackage{tikzlings-rhinos}
+\RequirePackage{tikzlings-pandas}
+\RequirePackage{tikzlings-addons}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Drawing a random tikzling
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{ifluatex}
+\RequirePackage{ifxetex}
+
+\ifluatex
+ \let\pdfrandomseed\randomseed
+\fi
+
+\ifxetex
+ \pgfmathsetseed{\time}
+\else
+ \pgfmathsetseed{\number\pdfrandomseed}
+\fi
+
+\pgfmathdeclarerandomlist{tikzlings}{{\bear}{\penguin}{\marmot}{\owl}{\koala}{\coati}{\snowman}{\mouse}{\moles}{\sloth}{\pig}{\cat}{\hippo}{\rhino}}
+
+\newcommand{\tikzling}[1][]{%
+ \pgfmathrandomitem{\tikzling@random}{tikzlings}%
+ \tikzling@random[#1]
+}
diff --git a/graphics/pgf/contrib/tikzmark/README b/graphics/pgf/contrib/tikzmark/README
new file mode 100644
index 0000000000..ef4d2e566d
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmark/README
@@ -0,0 +1,10 @@
+----------------------------------------------------------------
+tikzmark --- remembering absolute positioning with TikZ
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+The tikzmark package defines a command to "remember" a position
+on a page for later (or earlier) use, primarily (but not
+exclusively) with TikZ.
diff --git a/graphics/pgf/contrib/tikzmark/tikzmark.dtx b/graphics/pgf/contrib/tikzmark/tikzmark.dtx
new file mode 100644
index 0000000000..2cdf663e41
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmark/tikzmark.dtx
@@ -0,0 +1,1950 @@
+% \iffalse meta-comment
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+tikzmark --- remembering absolute positioning with TikZ
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+The tikzmark package defines a command to "remember" a position
+on a page for later (or earlier) use, primarily (but not
+exclusively) with TikZ.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+tikzmark --- remembering absolute positioning with TikZ.
+E-mail: loopspace@mathforge.org
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2011-2018 by Andrew Stacey <loopspace@mathforge.org>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Andrew Stacey.
+
+This work consists of the file tikzmark.dtx
+and the derived files tikzmark.ins,
+ tikzmark.pdf,
+ tikzlibrarytikzmark.code.tex, and
+ tikzmarklibrarylistings.code.tex
+
+\endpostamble
+\usedir{tex/latex/tikzmark}
+\generate{
+ \file{tikzlibrarytikzmark.code.tex}{\from{\jobname.dtx}{tikzlibrary}}
+}
+\generate{
+ \file{tikzmarklibrarylistings.code.tex}{\from{\jobname.dtx}{listings}}
+}
+%\generate{
+% \file{tikzmarklibraryhighlight.code.tex}{\from{\jobname.dtx}{highlight}}
+%}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/tikzmark}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/demopkg}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{amsmath}
+%\usepackage{morefloats}
+\usepackage{listings}
+\usepackage{tikz}
+\usetikzlibrary{fit,arrows,tikzmark,shadows,decorations.pathreplacing,calc}
+\usetikzmarklibrary{listings}
+
+%\usepackage[numbered]{hypdoc}
+\definecolor{lstbgcolor}{rgb}{0.9,0.9,0.9}
+
+\usepackage{listings}
+\lstloadlanguages{[LaTeX]TeX}
+\lstset{gobble=2,breakatwhitespace=true,breaklines=true,language=TeX}
+
+\usepackage{fancyvrb}
+
+\usepackage[hyperindex=false]{hyperref}
+
+\newenvironment{example}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}[gobble=2]{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+% \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+
+ \fbox{\begin{minipage}{.9\linewidth}
+ \input{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+\newenvironment{justexample}
+ {\VerbatimEnvironment
+ \begin{VerbatimOut}[gobble=2]{example.out}}
+ {\end{VerbatimOut}
+ \begin{center}
+% \setlength{\parindent}{0pt}
+ \fbox{\begin{minipage}{.9\linewidth}
+ \lstset{breakatwhitespace=true,breaklines=true,language=TeX,basicstyle=\small}
+ \lstinputlisting[]{example.out}
+ \end{minipage}}
+\end{center}
+}
+
+ \newcommand\balloon[4]{%
+ \pgfmathtruncatemacro\firstline{%
+ #3-1
+ }%
+ \iftikzmark{line-#2-\firstline-start}{%
+ \iftikzmark{line-#2-#3-first}{%
+ \xdef\blines{({pic cs:line-#2-\firstline-start} -| {pic cs:line-#2-#3-first})}%
+ }{%
+ \iftikzmark{line-#2-#3-start}{%
+ \xdef\blines{({pic cs:line-#2-\firstline-start} -| {pic cs:line-#2-#3-start})}%
+ }{%
+ \xdef\blines{(pic cs:line-#2-\firstline-start)}%
+ }%
+ }%
+ }{%
+ \xdef\blines{}%
+ }%
+ \foreach \k in {#3,...,#4} {%
+ \iftikzmark{line-#2-\k-first}{%
+ \xdef\blines{\blines (pic cs:line-#2-\k-first) }
+ }{}
+ \iftikzmark{line-#2-\k-end}{%
+ \xdef\blines{\blines (pic cs:line-#2-\k-end) }
+ }{}
+ }%
+ \ifx\blines\empty
+ \else
+ \edef\temp{\noexpand\tikz[remember picture,overlay]{\noexpand\node[fit={\blines},balloon] (#1) {}}}%
+ \temp
+ \fi
+ }
+ \tikzset{
+ line/.style={
+ draw,
+ rounded corners=3pt,
+ -latex
+ },
+ balloon/.style={
+ draw,
+ fill=blue!20,
+ opacity=0.4,
+ inner sep=4pt,
+ rounded corners=2pt
+ },
+ comment/.style={
+ draw,
+ fill=blue!70,
+ text=white,
+ text width=3cm,
+ minimum height=1cm,
+ rounded corners,
+ drop shadow,
+ align=left,
+ font=\scriptsize
+ },
+ }
+
+\DisableCrossrefs
+% \CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1119}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{1.0}{2012/11/08}{Converted to DTX file}
+% \changes{1.1}{2013/04/22}{Fix bug relating to active semi-colon}
+% \changes{1.2}{2016/04/07}{Tikzmark works inside tikzpicture, added easy suffix and prefix for tikzmarks}
+% \changes{1.3}{2017/06/01}{Tikzmark no longer uses semi-colon (too many issues with catcodes) and fix for beamer-awareness}
+% \changes{1.4}{2017/10/29}{Bug fixes: spurious characters in aux file, tikzmark prefix/suffix ignored in iftikzmark test}
+% \changes{1.5}{2018/09/09}{Reintroduced the original command (now as tikzmarknode) with a mathchoice hack for different math modes}
+% \changes{1.6}{2018/10/18}{Added the ability to save node information between runs and between TeX documents}
+% \changes{1.7}{2019/05/07}{Added conditions to test if a tikzmark is on a particular page}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \title{The \textsf{tikzmark} package}
+% \author{Andrew Stacey \\ \url{loopspace@mathforge.org}}
+% \date{v1.7~from 2019/05/07}
+%
+%
+% \maketitle
+%
+%
+% \section{Introduction}
+%
+% The \Verb+\tikzmark+ macro burst onto the scene in a blaze of glory on \href{http://tex.stackexchange.com}{TeX-SX}.
+% Since then, it has proved embarrassingly (to its original author) popular.
+% The idea behind it is extremely simple: that the machinery underneath TikZ provides a way to ``mark'' a point on a page for further use.
+% This functionality is already provided by several other packages.
+% The point of this one is that as TikZ can provide this feature, if already loading TikZ then it makes sense to use the TikZ version than another version.
+% Moreover, if the goal is to use these marks with some TikZ code then this version is already set up for that purpose (not that it would be exactly difficult to add this to any of the other implementations).
+%
+% \section{Use}
+%
+% Using the \Verb+\tikzmark+ is extremely simple.
+% You need to load the \Verb+tikz+ package and then load \Verb+tikzmark+ as a \Verb+tikzlibrary+.
+% Thus in your preamble you should have something like:
+%
+% \begin{lstlisting}
+% \usepackage{tikz}
+% \usetikzlibrary{tikzmark}
+% \end{lstlisting}
+%
+% In your document, you can now type \Verb+\tikzmark{<name>}+ at a point that you want to remember.
+% This will save a mark with name \Verb+<name>+ for use later (or earlier).
+% To use it in a \Verb+\tikz+ or \Verb+tikzpicture+, simply use the \Verb+pic+ coordinate system:
+%
+% \begin{lstlisting}
+% \tikz[remember picture] \draw[overlay] (0,0) -- (pic cs:<name>);
+% \end{lstlisting}
+%
+% There are two important points to note:
+%
+% \begin{enumerate}
+% \item The enveloping \Verb+\tikz+ or \Verb+tikzpicture+ must have the key \Verb+remember picture+ set.
+%
+% This is because of how TikZ coordinates work.
+% The coordinates inside a TikZ picture are relative to its origin, so that origin can move around on the page and not affect the internals of the picture.
+% To use a point outside the picture, therefore, the current picture not only has to know where that point is on the page it also has to know where it itself is on the page.
+% Hence the \Verb+remember picture+ key must be set.
+% \item The drawing command must have the \Verb+overlay+ key set (or be in a scope or picture where it is set).
+%
+% This is to keep the bounding box of the current picture under control.
+% Otherwise, it would grow to encompass the remembered point as well as the current picture.
+% (This isn't necessary if the remembered point is inside the current picture.)
+% \end{enumerate}
+%
+%
+%
+% \section{History}
+%
+% I wrote the original \Verb+\tikzmark+ macro in 2009 for use in lecture slides prepared with the \Verb+beamer+ package.
+% Its original definition was:
+%
+% \begin{lstlisting}
+% \newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
+% \end{lstlisting}
+%
+% Its first use was in the (inelegant) code:
+%
+% \begin{lstlisting}
+% \begin{frame}
+% \frametitle{Structure of Continuous Functions}
+%
+% \begin{tikzpicture}[overlay, remember picture]
+% \useasboundingbox (0,0);
+% \draw<2-|trans: 0|handout: 0>[red,->] (bsp) .. controls +(-1,-1) and ($(cnvs.north)+(1,1)$) .. ($(cnvs.north)+(0,1)$) .. controls ($(cnvs.north)+(-1,1)$) and +(-1,0) .. (cnvs.north);
+% \draw<3-|trans: 0|handout: 0>[green!50!black,->] (cplt) .. controls +(-1,-1) and +(-1,0) .. (mcplt.north);
+% \draw<4-|trans: 0|handout: 0>[blue,->] (norm) .. controls +(-1,-.5) and ($(nvs.north)+(0,1.5)$) .. ($(nvs.north)+(0,1.5)$) .. controls ($(nvs.north)+(-1.5,1.5)$) and +(-1.5,0) .. (nvs.north);
+% \draw<5-|trans: 0|handout: 0>[purple,->] (vector) .. controls +(-1,-1) and ($(vsp.north)+(2,2)$) .. ($(vsp.north)+(0,2)$) .. controls ($(vsp.north)+(-2,2)$) and +(-2,0) .. (vsp.north);
+% \end{tikzpicture}
+%
+% \begin{theorem}
+% \centering
+% \(\big(C([0,1],\R),d_\infty\big)\) \\
+% is a \\
+% \alert{Banach\tikzmark{bsp} space}
+% \end{theorem}
+%
+% \pause
+% \bigskip
+%
+% \begin{itemize}
+% \item[\tikzmark{cnvs}] {\color<.(2)->{green!50!black}Comp\tikzmark{cplt}lete} {\color<.(3)->{blue}nor\tikzmark{norm}med} {\color<.(4)->{purple}vector\tikzmark{vector} space}.
+%
+% \bigskip
+% \bigskip
+% \pause
+%
+% \begin{itemize}[<+->]
+% \item[\tikzmark{mcplt}] {\color{green!50!black}Cauchy sequences converge.}
+% \medskip
+% \item[\tikzmark{nvs}] {\color{blue}Metric from a norm.}
+% \medskip
+% \item[\tikzmark{vsp}] {\color{purple}Functions behave like vectors.}
+% \end{itemize}
+% \end{itemize}
+%
+% \end{frame}
+% \end{lstlisting}
+%
+% This produced, on the final slide, Figure~\ref{fig:tikzmarkex}.
+%
+% \begin{figure}
+% \centering
+% \includegraphics{tikzmarkExample}
+% \caption{First use of tikzmark}
+% \label{fig:tikzmarkex}
+% \end{figure}
+%
+% Its first appearance on \href{http://tex.stackexchange.com}{TeX-SX} was in an \href{http://tex.stackexchange.com/a/316/86}{answer} to a question about how to put overlapping braces on a mathematical text.
+% This was in July 2010.
+% The opening statement of the answer was not overly encouraging: ``This may not be the best solution\dots''.
+% And for a macro that would go on to become quite ubiquitous, its initial appearance only garnered it 2 votes.
+%
+% However, it started out in life as a useful macro for me and as such I found more uses for it in my own code and thus more opportunity for using it to answer questions on TeX-SX.
+% The one that seems to have been where it got noticed came in \href{http://tex.stackexchange.com/a/1570/86}{August 2010}, again about putting braces in text but in a more complicated fashion.
+% From this answer, it got picked up, picked over, and picked apart.
+% A common use was in highlighting or adding marks to text.
+%
+% Gradually, as it got used, it developed.
+% A major revision dates from an answer given in \href{http://tex.stackexchange.com/a/50054/86}{March 2012} where the question was actually about \Verb+\tikzmark+.
+% This version added two important features: a TikZ coordinate system for referencing saved marks directly and the ability to refer to marks earlier in the document than they are defined (the mechanism for remembering points uses the \Verb+aux+ file anyway so this was more about exposing the information earlier than anything complicated).
+% Then in October 2012 there was a \href{http://tex.stackexchange.com/q/79121/86}{question} where it would have been useful to remember which page the mark was on and a \href{http://tex.stackexchange.com/q/79762/86}{question} where for some reason using the \Verb+\tikz+ macro didn't work so the \Verb+\pgfmark+ macro was introduced.
+%
+% By this point, the \Verb+\tikzmark+ command had morphed considerably from its original definition.
+% Experience has shown that on the TeX-SX site it has continued to be used in its original form as well as its current form.
+% I've therefore taken the decision to reintroduce a form of the original command, now called \Verb+\tikzmarknode+.
+% It goes beyond the original version in that it uses some \Verb+\mathchoice+ trickery (inspired by \href{https://tex.stackexchange.com/a/122419/86}{this answer} from Heiko Oberdiek) to hopefully correctly choose the correct math style.
+%
+% The original reason for not using nodes inside \Verb+\tikzmark+ was to be able to use the information from a \Verb+\tikzmark+ before the point where it was defined (via information saved into the \Verb+aux+ file).
+% Thanks to a \href{https://tex.stackexchange.com/a/415862/86}{question on TeX-SX} about saving node information, I've developed code that solves that issue with nodes.
+% As it fits in the general concept of this package, I've added that code to the \Verb+\tikzmark+ package.
+%
+% \section{Usage}
+%
+% This package defines the following commands and usable stuff.
+%
+% \begin{enumerate}
+% \item \Verb+\tikzmark+\oarg{drawing command}\marg{name}
+%
+% The mandatory argument is the name of the mark to be used to refer back to this point later.
+%
+% The \Verb+\tikzmark+ command can take an optional parameter which is some drawing command that can be put in a \Verb+\tikz ... ;+ command.
+% This drawing command can be used to place a node or something similar at the marked point, or to set some \Verb+\tikzset+ keys.
+% Sometimes this can be useful.
+% Note, though, that if this is used to define an offset coordinate then this will only be available in the document \emph{after} the \Verb+\tikzmark+ command, even on later runs.
+%
+% If the \Verb+beamer+ class is loaded then this command is made overlay-aware.
+%
+% \item \Verb+\tikzmark+\marg{name}\marg{coordinate}
+%
+% v1.2 of the \Verb+tikzmark+ package introduced a new variant of \Verb+\tikzmark+ which works inside a \Verb+tikzpicture+.
+% One feature of \Verb+\tikzmark+ which isn't part of TikZ's normal coordinate remembering system is the ability to use a \Verb+\tikzmark+ coordinate before it is defined (due to the use of the \Verb+aux+ file).
+% This is potentially useful to have inside a \Verb+tikzpicture+ and so it is now possible to use \Verb+\tikzmark+ inside a \Verb+tikzpicture+.
+% The syntax is slightly different as we need to specify the coordinates of a point to remember.
+%
+% This was inspired by the question \href{http://tex.stackexchange.com/q/295903/86}{Refer to a node in tikz that will be defined ``in the future'' (two passes)?} on TeX-SX.
+%
+% \item \Verb+\pgfmark+\marg{name}
+%
+% This is a more basic form of the \Verb+\tikzmark+ which doesn't use any of the \Verb+\tikz+ overhead.
+% One advantage of this command is that it doesn't create an \Verb+hbox+.
+% It does, however, insert a \Verb+whatsit+ into the stream so it will, for example, stop two vertical spaces either side of it being merged.
+% This can't be avoided.
+%
+% If the \Verb+beamer+ class is loaded then this command is made overlay-aware.
+%
+% \item \Verb+\iftikzmark+\marg{name}\marg{true code}\marg{false code}
+%
+% This is a conditional to test if a particular mark is available.
+% It executes \Verb+true code+ if it is and \Verb+false code+ if not.
+%
+% \item \Verb+\iftikzmarkexists+\marg{name}
+%
+% This is a conditional to test if a particular mark is available which works with the lower level \TeX\ \Verb+\else+ and \Verb+\fi+.
+%
+% \item \Verb+\iftikzmarkoncurrentpage+\marg{name}
+%
+% This is a conditional to test if a particular mark is on the current page; it works with the lower level \TeX\ \Verb+\else+ and \Verb+\fi+.
+%
+% \item \Verb+\iftikzmarkonpage+\marg{name}\marg{page}
+%
+% This is a conditional to test if a particular mark is on a given page; it works with the lower level \TeX\ \Verb+\else+ and \Verb+\fi+.
+%
+% \item \Verb+\tikzmarknode+\oarg{options}\marg{name}\marg{contents}
+%
+% This is a reincarnation of the original \Verb+\tikzmark+ command which places its contents inside a \Verb+\tikz+ node. It also defines a \Verb+tikzmark+ with the same name. Using a sneaky trick with \Verb+\mathchoice+, it works inside a math environment. The spacing either side might not be quite right as although it detects the math style it doesn't got beyond that. The \Verb+options+ are passed to the node.
+%
+% Two styles are attempted, one on the surrounding picture and one on the node, which are:
+%
+% \begin{itemize}
+% \item \Verb+every tikzmarknode picture+
+% \item \Verb+every tikzmarknode+
+% \end{itemize}
+%
+% To refer to the \emph{node}, use usual TikZ coordinates.
+% To refer to the underlying \emph{tikzmark}, use the special tikzmark coordinates (see below).
+%
+% \item \Verb+(pic cs:<name>)+ or \Verb+(pic cs:<name>,<coordinate>)+
+%
+% This is the method for referring to a position remembered by \Verb+\tikzmark+ (or \Verb+\pgfmark+) as a coordinate in a \Verb+tikzpicture+ environment (or \Verb+\tikz+ command).
+% If the extra \Verb+coordinate+ is specified then this is used in case the mark \Verb+name+ has not yet been defined (this can be useful for defining code that does something sensible on the first run).
+%
+% \item \Verb+/tikz/save picture id=<name>+
+%
+% This is the TikZ key that is used by \Verb+\tikzmark+ to actually save the connection between the name and the picture coordinate.
+% It can be used on an arbitrary picture to save its origin as a tikzmark.
+%
+% \item \Verb+/tikz/if picture id=#1#2#3+
+%
+% This is a key equivalent of the \Verb+\iftikzmark+ command.
+%
+% \item \Verb+/tikz/if tikzmark on current page=#1#2#3+
+%
+% This is a key equivalent of the \Verb+\iftikzmarkoncurrentpage+ command.
+% If true, the keys in \Verb+#2+ are executed, otherwise the keys in \Verb+#3+.
+%
+% \item \Verb+/tikz/if tikzmark on page=#1#2#3#4+
+%
+% This is a key equivalent of the \Verb+\iftikzmarkonpage+ command.
+%
+% \item \Verb+/tikz/next page+, \Verb+/tikz/next page vector+
+%
+% It is possible to refer to a mark on a different page to the current page.
+% When this is done, the mark is offset by a vector stored in the key \Verb+/tikz/next page vector+.
+% The key \Verb+/tikz/next page+ can be used to set this to certain standard vectors by specifying where the ``next page'' is considered as lying corresponding to the current page.
+% Possible values are (by default) \Verb+above+, \Verb+below+, \Verb+left+, \Verb+right+, and \Verb+ignore+.
+% (The last one sets the vector to the zero vector.)
+%
+% \item \Verb+/tikz/tikzmark prefix=<prefix>+ and \Verb+/tikz/tikzmark suffix=<suffix>+
+%
+% These keys allow for the automatic addition of a prefix and/or suffix to each \Verb+\tikzmark+ name.
+% The prefix and suffix are added both at time of definition and of use, so providing one is in the same scope there is no difference in at the user level when using prefixes and suffixes.
+% What it can be useful for is to make the \Verb+\tikzmark+ names unique.
+% In particular, if the \Verb+beamer+ class is loaded then an automatic suffix is added corresponding to the overlay.
+% This means that if a slide consists of several overlays with \Verb+\tikzmark+s on them, and the positions of the \Verb+\tikzmark+s move then the resulting pictures should look right.
+% Without the automatic suffix, only the final positions of the marks would be used throughout.
+%
+% This was inspired by the question \href{http://tex.stackexchange.com/q/302517/86}{using tikzmark subnode with overlays beamer} on TeX-SX.
+%
+% \item \Verb+\subnode[options]{name}{content}+
+%
+% This produces a pseudo-node named \Verb+name+ around the \Verb+content+.
+% The design purpose of this is to create a ``subnode'' inside a TikZ node.
+% As far as TikZ is concerned, the contents of a node is just a box.
+% It therefore does not know anything about it beyond its external size and so cannot easily determine the coordinates of pieces inside.
+% The \Verb+\subnode+ command boxes its contents and saves the position of that box and its dimensions.
+% This information is stored in the same way that PGF stores the necessary information about a node.
+% It is therefore possible to use ordinary node syntax (within a \Verb+tikzpicture+) to access this information.
+% Thus after \Verb+\node {a \subnode{a}{sub} node};+ it is possible to use \Verb+a+ as a node.
+% The \Verb+options+ are passed to the node construction mechanism, but note that the only sensible options are those that affect the size and shape of the node: drawing options are ignored (except in so far as they affect the size -- as an example, \Verb+line width+ affects the node size).
+%
+% There are two important points to make about this.
+% The first is that, as with all the \Verb+tikzmark+ macros, the information is always one compilation old.
+% The second is that the pseudo-node is purely about coordinates: the path information is not used and the contents are not moved.
+% This is partly for reasons of implementation: the pseudo-node is constructed when TikZ is not in ``picture mode''.
+% But also interleaving the background path of the pseudo-node and any containing node would be problematic and so is best left to the user.
+%
+% The simplest way to turn a pseudo-node into a more normal node is to use the \Verb+fit+ library.
+% Using the above example, \Verb+\node[fit=(a),draw,inner sep=0pt] {};+ would draw a rectangle around the word \Verb+sub+ of exactly the same size as would appear had a normal node been created.
+%
+% Using a sneaky trick with \Verb+\mathchoice+, \Verb+subnode+ works inside a math environment. The spacing either side might not be quite right as although it detects the math style it doesn't got beyond that.
+%
+% \item \emph{Node saving}
+%
+% The node saving system takes the information stored about a node and saves it for later use.
+% That later use can be in the same document, in which case it should be saved just to the memory of the current TeX process, or it can be used earlier in the same document or another document altogether (in particular, if the nodes are defined in a \Verb+tikzpicture+ that has been externalised, this can be used to import the node information into the main file) in which cases the node data is saved to a file.
+%
+% When working with files, nodes are saved and restored in bulk.
+% When working in memory, nodes are saved and restored in named lists.
+% Nodes are not actually saved until the end of the tikzpicture in which they are defined, meaning that if saving to memory then all the nodes in a tikzpicture will belong to the same list.
+%
+% The keys for working with saving and restoring nodes are as follows.
+%
+% \begin{itemize}
+% \item \Verb+save node+
+%
+% This is the key to put on a node that is to be saved.
+%
+% \item \Verb+set node group=<name>+
+%
+% Nodes are grouped together into a list that can be saved either to a file or for use later on in the document.
+% This sets the name for the current group.
+%
+% \item \Verb+restore nodes from list=<name>+
+%
+% This restores the node information from the named list to the current \Verb+tikzpicture+.
+% This is required both for when the node information comes from a file or from earlier in the same document.
+%
+% \item \Verb+save nodes to file+
+%
+% This is a \Verb+true/false+ key which determines whether to save the node information to a file.
+%
+% \item \Verb+set saved nodes file name=<name>+
+%
+% This sets the file name for the saved nodes (the extension will be \Verb+.nodes+.
+% The default is to use the current \TeX\ filename.
+% This is set globally, and once the file is opened then changing the name will have no effect.
+% (The file is not opened until it is actually needed to avoid creating empty files unnecessarily.)
+%
+% \item \Verb+restore nodes from file=<name>+
+%
+% This loads the node information from the file into the current document.
+%
+% The \Verb+<name>+ can have the syntax \Verb+[options]{name}+, where \Verb+options+ can be used to influence how the nodes are restored.
+% The key \Verb+transform saved nodes+ (see below) can be given here.
+% Another useful key is the \Verb+name prefix+ key which is applied to all restored nodes.
+%
+% \item \Verb+transform saved nodes+
+%
+% A particular use-case for restoring saved nodes is to safely include one \Verb+tikzpicture+ inside another by creating an image out of the inner picture and including it back in as a picture inside a node.
+% In that situation, restoring the nodes from the inner picture can make it possible to refer to coordinates from the inner picture to the outer one.
+% If there is a transformation in place on the containing node, this key applies that transformation to all the nodes in the inner picture.
+%
+% \end{itemize}
+% \end{enumerate}
+%
+% \section{Examples and Extras}
+%
+% The \Verb+\tikzmark+ command has been used in numerous answers on \href{http://tex.stackexchange.com}{TeX-SX}.
+% The plan is to gather some of these into extra libraries which can be loaded via \Verb+\usetikzmarklibrary+.
+%
+% At present, this is the code listings library (which works with the \Verb+listings+ package).
+% One that is in development (as it has featured much on the TeX-SX website) is highlighting, however this is not so straightforward to implement so is still under development.
+%
+% \subsection{Basic Examples}
+%
+% A simple example of the \Verb+\tikzmark+ macro is the following.
+%
+% \begin{example}
+% \[
+% \tikzmark{a} e^{i \pi/2} = i
+% \]
+%
+% This\tikz[remember picture,overlay,baseline=0pt] \draw[->] (0,1em) to[bend left] ([shift={(-1ex,1ex)}]pic cs:a); is an important equation.
+% \end{example}
+%
+% \begin{example}
+% \begin{itemize}
+% \item A first item,\tikzmark{b}
+% \item A second item,\tikzmark{c}
+% \item A third item.\tikzmark{d}
+% \end{itemize}
+% \begin{tikzpicture}[remember picture,overlay]
+% \draw[decorate,decoration={brace}] ({pic cs:c} |- {pic cs:b}) +(0,1em) -- node[right,inner sep=1em] {some items} ({pic cs:c} |- {pic cs:d});
+% \end{tikzpicture}
+% \end{example}
+%
+% \begin{example}
+% \begin{tikzpicture}[remember picture]
+% \node (a) at (0,0) {This has a \subnode{sub}{subnode} in it};
+% \draw[->] (0,-1) to[bend right] (sub);
+% \end{tikzpicture}
+% \end{example}
+%
+% An example using \Verb+\tikzmark+ inside a \Verb+tikzpicture+
+%
+% \begin{example}
+% \tikzset{tikzmark prefix=ex3-}
+% \begin{tikzpicture}[remember picture,overlay]
+% \draw[->,line width=1mm,cyan] (pic cs:a) to[bend left] (pic cs:b);
+% \end{tikzpicture}
+%
+% By placing the \tikzmark{a}code before the marks, the arrow goes under the subsequent text and picture.
+%
+% \begin{tikzpicture}
+% \filldraw[fill=gray] (0,0) circle[radius=1cm];
+% \tikzmark{b}{(-1,-1)}
+% \end{tikzpicture}
+% \end{example}
+%
+% The \Verb+\tikmarknode+ puts a node around some text, which can be referred to later, and adds a \Verb+\tikzmark+ at its origin.
+%
+% \begin{example}
+% Putting a node around \tikzmarknode{txt}{some text} means we can connect text together, including in maths:
+% \[
+% \tikzmarknode{a}{\sum_{k=1}^n} k^{\tikzmarknode{b}{2}}
+% \]
+%
+% \begin{tikzpicture}[remember picture,overlay]
+% \draw[->] (txt) -- (a);
+% \draw[->] (a.south) to[out=-90,in=-45] (b.south east);
+% \end{tikzpicture}
+% \end{example}
+%
+% The syntax for saving node data is illustrated by the following example.
+%
+% File \Verb+firstpicture.tex+:
+%
+% \begin{justexample}
+% \documentclass[tikz,border=10pt]{standalone}
+% \usetikzlibrary{tikzmark,shapes.geometric}
+% \begin{document}
+% \begin{tikzpicture}[save nodes to file]
+% \node[draw,rotate=-30,save node](1) at (-2,0) {1};
+% \draw[->] (0,0) -- (1);
+% \node[draw,ellipse,save node] (c) at (current bounding box.center) {};
+% \end{tikzpicture}
+% \end{document}
+% \end{justexample}
+%
+% File \Verb+secondpicture.tex+:
+%
+% \begin{justexample}
+% \documentclass[tikz,border=10pt]{standalone}
+% \usetikzlibrary{tikzmark,shapes.geometric}
+% \begin{document}
+% \begin{tikzpicture}[save nodes to file]
+% \node[draw,rotate=-70,save node] (2) at (2,0) {2};
+% \draw[->] (0,0) -- (2);
+% \node[draw,ellipse,save node] (c) at (current bounding box.center) {};
+% \end{tikzpicture}
+% \end{document}
+% \end{justexample}
+%
+% Main file:
+%
+% \begin{justexample}
+% \documentclass{article}
+% \usepackage{tikz}
+% \usetikzlibrary{tikzmark}
+%
+% \begin{document}
+% \begin{tikzpicture}
+%
+% \node[draw,
+% rotate=30,
+% restore nodes from file={[transform saved nodes,name prefix=pic-1-]{firstpicture}}
+% ] (a-1) at (-2,-3) {\includegraphics{firstpicture.pdf}};
+%
+% \node[draw,
+% rotate=70,
+% restore nodes from file={[transform saved nodes,name prefix=pic-2-]{secondpicture}}
+% ] (a-2) at (+2,+2) {\includegraphics{secondpicture.pdf}};
+%
+% \draw[red] (pic-1-1.north west) -- (pic-1-1.north east) -- (pic-1-1.south east) -- (pic-1-1.south west) -- cycle;
+% \draw[red] (pic-2-2.north west) -- (pic-2-2.north east) -- (pic-2-2.south east) -- (pic-2-2.south west) -- cycle;
+%
+% \node[red] at (pic-1-1) {1};
+% \node[red] at (pic-2-2) {2};
+%
+% \draw (a-1) circle[radius=5pt];
+% \draw (a-2) circle[radius=5pt];
+%
+% \draw (pic-1-1) -- (pic-2-2);
+% \end{tikzpicture}
+% \end{document}
+% \end{justexample}
+%
+% This produces:
+%
+% \begin{center}
+% \fbox{\includegraphics{tikzrefextnodes}}
+% \end{center}
+%
+% \subsection{Code Listings}
+%
+% If the \Verb+listings+ package has been loaded then issuing
+%
+% \Verb+\usetikzmarklibrary{listings}+
+%
+% \noindent will load in some code to add marks to \Verb+lstlisting+ environments.
+% This code places a mark at three places on a line of code in a \Verb+listings+ environment.
+% The marks are placed at the start of the line, the first non-whitespace character, and the end of the line (if the line is blank the latter two are not placed).
+% (This has not been extensively tested, it works by adding code to various ``hooks'' that are made available by the \Verb+listings+ package; it is quite possible that the hooks chosen are both wrong and insufficient to cover all desired cases.)
+%
+%
+% These are inspired by questions such as \href{http://tex.stackexchange.com/q/79762/86}{Marking lines in listings} and \href{http://tex.stackexchange.com/q/86309/86}{Macros for code annotations}.
+%
+% In more detail, the \Verb+listings+ library places lots of marks around the code.
+% The marks are:
+%
+% \begin{itemize}
+% \item \Verb+line-<name>-<number>-start+ at the start of each line.
+% \item \Verb+line-<name>-<number>-end+ at the end of each line.
+% \item \Verb+line-<name>-<number>-first+ at the first non-space character of the line (assuming it exists).
+% \end{itemize}
+%
+% The line numbers \emph{should} match up with the line numbers in the code in that any initial offset is also applied.
+%
+% Not every mark is available on every line.
+% If a line is blank, in particular, it will only have a \Verb+start+ mark.
+% The following example shows this, where the red dots are the \Verb+start+, the blue are \Verb+end+, and the green are \Verb+first+.
+%
+% \begin{example}
+% \begin{tikzpicture}[remember picture]
+% \foreach \k in {0,...,7} {
+% \iftikzmark{line-code-\k-start}{\fill[red,overlay] (pic cs:line-code-\k-start) circle[radius=4pt];}{\message{No start for \k}}
+% \iftikzmark{line-code-\k-end}{\fill[blue,overlay] (pic cs:line-code-\k-end) circle[radius=2pt];}{\message{No end for \k}}
+% \iftikzmark{line-code-\k-first}{\fill[green,overlay] (pic cs:line-code-\k-first) circle[radius=2pt];}{\message{No first for \k}}
+% }
+% \draw[->,overlay] (0,0) -- (pic cs:line-code-5-first);
+% \draw[->,overlay] (0,0) -- (pic cs:line-code-5-start);
+% \draw[->,overlay] (0,0) -- (pic cs:line-code-5-end);
+% \node[above] at (0,0) {Line 5};
+% \end{tikzpicture}
+%
+% \begin{lstlisting}[language=c,name=code,numbers=left]
+% #include <stdio.h>
+%
+% int main(void)
+% {
+% printf("hello, world\n");
+% return 0;
+% }
+% \end{lstlisting}
+% \end{example}
+%
+% This example puts a fancy node behind certain lines of the code, computing the necessary extents.
+%
+% \begin{example}
+% \balloon{comment}{more code}{3}{3}
+% \balloon{comment}{more code}{7}{8}
+% \begin{lstlisting}[language=c,name=more code,numbers=left,firstnumber=3]
+% #include <stdio.h>
+%
+% int main(void)
+% {
+% printf("hello, world\n");
+% return 0;
+% }
+% \end{lstlisting}
+% \end{example}
+%
+%
+%
+% \section{Acknowledgements}
+%
+% The \Verb+\tikzmark+ macro has been used and abused by many users of \href{http://tex.stackexchange.com}{TeX-SX}.
+% Of particular note (but in no particular order) are \href{https://tex.stackexchange.com/users/4301/peter-grill}{Peter Grill}, \href{https://tex.stackexchange.com/users/3954/gonzalo-medina}{Gonzalo Medina}, \href{https://tex.stackexchange.com/users/13304/claudio-fiandrino}{Claudio Fiandrino}, \href{https://tex.stackexchange.com/users/3235/percusse}{percusse}, and \href{https://tex.stackexchange.com/users/121799/marmot}{marmot}.
+% I would also like to mention \href{https://tex.stackexchange.com/users/1090/david-carlisle}{David Carlisle} whose knowledge of TikZ continues to astound us all.
+%
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \iffalse
+%<*tikzlibrary>
+% \fi
+% \subsection{Main Code}
+%
+%
+% The \Verb+save nodes+ code uses \LaTeX3.
+% \begin{macrocode}
+\RequirePackage{expl3, l3keys2e, xparse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tikzset{%
+ remember picture with id/.style={%
+ remember picture,
+ overlay,
+ save picture id=#1,
+ },
+% \end{macrocode}
+% Not totally happy with using \Verb+every picture+ here as it's too easily overwritten by the user.
+% Maybe it would be better to patch \Verb+endtikzpicture+ directly.
+% \begin{macrocode}
+ every picture/.append style={%
+ execute at end picture={%
+ \ifpgfrememberpicturepositiononpage%
+ \edef\pgf@temp{%
+ \noexpand\write\noexpand\pgfutil@auxout{%
+ \string\savepicturepage%
+ {\pgfpictureid}{\noexpand\arabic{page}}%
+ }%
+ }%
+ \pgf@temp
+ \fi%
+ },
+ },
+% \end{macrocode}
+% The positions are already recorded in the \Verb+aux+ file, all we really need to do is provide them with better names.
+% \begin{macrocode}
+ save picture id/.code={%
+ \protected@write\pgfutil@auxout{}{%
+ \string\savepointas%
+ {\tikzmark@pp@name{#1}}{\pgfpictureid}{0pt}{0pt}}%
+ },
+% \end{macrocode}
+% Provides a way to test if a picture has already been saved (in particular, can avoid errors on first runs)
+% \begin{macrocode}
+ if picture id/.code args={#1#2#3}{%
+ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{%
+ \pgfkeysalso{#3}%
+ }{
+ \pgfkeysalso{#2}%
+ }
+ },
+% \end{macrocode}
+% Page handling
+% \begin{macrocode}
+ next page/.is choice,
+ next page vector/.initial={\pgfqpoint{0pt}{0pt}},
+ next page/below/.style={%
+ next page vector={\pgfqpoint{0pt}{-\the\paperheight}}%
+ },
+ next page/above/.style={%
+ next page vector={\pgfqpoint{0pt}{\the\paperheight}}%
+ },
+ next page/left/.style={%
+ next page vector={\pgfqpoint{-\the\paperwidth}{0pt}}%
+ },
+ next page/right/.style={%
+ next page vector={\pgfqpoint{\the\paperwidth}{0pt}}%
+ },
+ next page/ignore/.style={%
+ next page vector={\pgfqpoint{0pt}{0pt}}%
+ },
+ if tikzmark on current page/.code n args={3}{%
+ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{%
+ \pgfkeysalso{#3}%
+ }{%
+ \@ifundefined{save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname}{%
+ \pgfkeysalso{#3}%
+ }{%
+ \ifnum\csname save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname\endcsname=\the\value{page}\relax%
+ \pgfkeysalso{#2}%
+ \else
+ \pgfkeysalso{#3}%
+ \fi
+ }%
+ }%
+ },
+ if tikzmark on page/.code n args={4}{%
+ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{%
+ \pgfkeysalso{#4}%
+ }{%
+ \@ifundefined{save@pg@\csname save@pt@\tikzmark@pp@name{#1}@label\endcsname}{%
+ \pgfkeysalso{#4}%
+ }{%
+ \ifnum\csname save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname\endcsname=#2\relax%
+ \pgfkeysalso{#3}%
+ \else
+ \pgfkeysalso{#4}%
+ \fi
+ }%
+ }%
+ },
+% \end{macrocode}
+% Prefix and suffix for tikzmark names, shamelessly borrowed from the main tikz code
+% \begin{macrocode}
+ tikzmark prefix/.initial=,%
+ tikzmark suffix/.initial=,%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\tikzmark@pp@name}
+% \begin{macrocode}
+\def\tikzmark@pp@name#1{%
+ \csname pgfk@/tikz/tikzmark prefix\endcsname%
+ #1%
+ \csname pgfk@/tikz/tikzmark suffix\endcsname%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\savepointas}
+% This is what gets written to the \Verb+aux+ file.
+% \begin{macrocode}
+\def\savepointas#1#2#3#4{%
+ \expandafter\gdef\csname save@pt@#1\endcsname{#2}%
+ \expandafter\gdef\csname save@pt@#1@offset\endcsname%
+ {\pgfqpoint{#3}{#4}}%
+}
+\def\savepicturepage#1#2{%
+ \expandafter\gdef\csname save@pg@#1\endcsname{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikzmarkalias}
+% Alias a tikzmark to another name (used in tikzmarknode)
+% \begin{macrocode}
+\def\tikzmarkalias#1#2{%
+ \pgf@node@gnamelet{save@pt@#1}{save@pt@#2}%
+ \pgf@node@gnamelet{save@pt@#1@offset}{save@pt@#2@offset}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tmk@labeldef}
+% Auxiliary command for the coordinate system.
+% \begin{macrocode}
+\def\tmk@labeldef#1,#2\@nil{%
+ \edef\tmk@label{\tikzmark@pp@name{#1}}%
+ \def\tmk@def{#2}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{pic}
+% This defines the new coordinate system.
+% \begin{macrocode}
+\tikzdeclarecoordinatesystem{pic}{%
+ \pgfutil@in@,{#1}%
+ \ifpgfutil@in@%
+ \tmk@labeldef#1\@nil
+ \else
+ \tmk@labeldef#1,(0pt,0pt)\@nil
+ \fi
+ \@ifundefined{save@pt@\tmk@label}{%
+ \tikz@scan@one@point\pgfutil@firstofone\tmk@def
+ }{%
+ \pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}%
+ \save@orig@pic%
+ \pgfsys@getposition{\pgfpictureid}\save@this@pic%
+ \pgf@process{\pgfpointorigin\save@this@pic}%
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process{\pgfpointorigin\save@orig@pic}%
+ \advance\pgf@x by -\pgf@xa
+ \advance\pgf@y by -\pgf@ya
+ \pgf@xa=\pgf@x
+ \pgf@ya=\pgf@y
+ \pgf@process%
+ {\pgfpointorigin\csname save@pt@\tmk@label @offset\endcsname}%
+ \advance\pgf@xa by \pgf@x
+ \advance\pgf@ya by \pgf@y
+ \@ifundefined{save@pg@\csname save@pt@\tmk@label\endcsname}{}{%
+ \@ifundefined{save@pg@\pgfpictureid}{}{%
+ \pgfkeysvalueof{/tikz/next page vector}%
+ \edef\tmk@pg{\the\numexpr \csname save@pg@\csname save@pt@\tmk@label\endcsname\endcsname - \csname save@pg@\pgfpictureid\endcsname\relax}%
+ \advance \pgf@xa by %
+ \tmk@pg\pgf@x\relax
+ \advance \pgf@ya by %
+ \tmk@pg\pgf@y\relax
+ }%
+ }%
+ \pgf@x=\pgf@xa
+ \pgf@y=\pgf@ya
+ \pgftransforminvert
+ \pgf@pos@transform{\pgf@x}{\pgf@y}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikzmark}
+% The active/non-active semi-colon is proving somewhat hazardous to \Verb+\tikzmark+ (see \href{http://tex.stackexchange.com/q/110014/86}{ Tikzmark and french seem to conflict} and \href{http://tex.stackexchange.com/q/335485/86}{Clash between tikzmark, babel package (french) and babel tikzlibrary}) so \Verb+\tikzmark+ now uses the brace-delimited version of the \Verb+\tikz+ command.
+%
+% This version is for when we're outside a tikzpicture environment
+% \begin{macrocode}
+\newcommand\tikzmark@outside[2][]{%
+\tikz[remember picture with id=#2]{#1}%
+}
+% \end{macrocode}
+% This is for when we're inside a tikzpicture environment
+% \begin{macrocode}
+\def\tikzmark@inside#1#2{%
+ \tikzset{remember picture}%
+ \tikz@scan@one@point\pgfutil@firstofone#2\relax
+ \protected@write\pgfutil@auxout{}{%
+ \string\savepointas{\tikzmark@pp@name{#1}}{\pgfpictureid}{\the\pgf@x}{\the\pgf@y}}%
+}
+% \end{macrocode}
+% And finally, the ultimate invoker:
+% \begin{macrocode}
+\def\tikzmark{%
+ \ifx\pgfpictureid\@undefined
+ \let\tikzmark@next=\tikzmark@outside
+ \else
+ \relax
+ \ifx\scope\tikz@origscope\relax
+ \let\tikzmark@next=\tikzmark@outside
+ \else
+ \let\tikzmark@next=\tikzmark@inside
+ \fi
+ \fi
+ \tikzmark@next%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfmark}
+% \begin{macrocode}
+\newcommand\pgfmark[1]{%
+ \bgroup
+ \global\advance\pgf@picture@serial@count by1\relax%
+ \edef\pgfpictureid{pgfid\the\pgf@picture@serial@count}%
+ \pgfsys@markposition{\pgfpictureid}%
+ \edef\pgf@temp{%
+ \noexpand\write\noexpand\pgfutil@auxout{%
+ \string\savepicturepage{\pgfpictureid}{\noexpand\arabic{page}}}}%
+ \pgf@temp
+ \protected@write\pgfutil@auxout{}{%
+ \string\savepointas{\tikzmark@pp@name{#1}}{\pgfpictureid}{0pt}{0pt}}%
+ \egroup
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% If the beamer class is used, make the commands overlay aware.
+% \begin{macro}{\tikzmark<>}
+% \begin{macrocode}
+\@ifclassloaded{beamer}{
+ \renewcommand<>{\tikzmark@outside}[2][]{%
+ \only#3{\beameroriginal{\tikzmark@outside}[{#1}]{#2}}%
+ }
+ \renewcommand<>{\tikzmark@inside}[2]{%
+ \only#3{\beameroriginal{\tikzmark@inside}{#1}{#2}}%
+ }
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pgfmark<>}
+% \begin{macrocode}
+\@ifclassloaded{beamer}{
+ \renewcommand<>{\pgfmark}[1]{\only#2{\beameroriginal{\pgfmark}{#1}}}
+}{}
+% \end{macrocode}
+% \end{macro}
+%
+% If beamer is loaded, add a suffix based on the frame number
+% \begin{macrocode}
+\@ifclassloaded{beamer}{
+ \tikzset{
+ tikzmark suffix=-\the\beamer@slideinframe
+ }
+}{}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\iftikzmark}
+% \begin{macrocode}
+\newif\iftikzmark@
+\newcommand\iftikzmark[3]{%
+ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{%
+ #3%
+ }{%
+ #2%
+ }%
+}%
+% \end{macrocode}
+%
+% A version suitable for \Verb+\if ... \else ... \fi+.
+% \begin{macrocode}
+\newcommand\iftikzmarkexists[1]{%
+ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{%
+ \tikzmark@false%
+ }{%
+ \tikzmark@true%
+ }%
+ \iftikzmark@
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\iftikzmarkonpage}
+% \begin{macrocode}
+\newcommand\iftikzmarkonpage[2]{%
+ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{%
+ \tikzmark@false
+ }{%
+ \@ifundefined{save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname}{%
+ \tikzmark@false
+ }{%
+ \ifnum\csname save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname\endcsname=#2\relax%
+ \tikzmark@true
+ \else
+ \tikzmark@false
+ \fi
+ }%
+ }%
+ \iftikzmark@
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iftikzmarkoncurrentpage}
+% \begin{macrocode}
+\newcommand\iftikzmarkoncurrentpage[1]{%
+ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{%
+ \tikzmark@false
+ }{%
+ \@ifundefined{save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname}{%
+ \tikzmark@false
+ }{%
+ \ifnum\csname save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname\endcsname=\the\value{page}\relax%
+ \tikzmark@true
+ \else
+ \tikzmark@false
+ \fi
+ }%
+ }%
+ \iftikzmark@
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subnode}
+% Note: much of this code was inevitably adapted from the node defining code in the TikZ/PGF sources.
+% \begin{macrocode}
+\def\subnode@#1#2#3{%
+ \begingroup
+ \pgfmark{#2}%
+ \setbox\pgfnodeparttextbox=\hbox\bgroup #3\egroup
+ \def\tikz@fig@name{#2}%
+ \tikzset{every subnode/.try,#1}%
+ \pgfpointorigin
+ \tikz@scan@one@point\pgfutil@firstofone(pic cs:#2)\relax
+ \advance\pgf@x by .5\wd\pgfnodeparttextbox
+ \advance\pgf@y by .5\ht\pgfnodeparttextbox
+ \advance\pgf@y by -.5\dp\pgfnodeparttextbox
+ \pgftransformshift{}%
+ \setbox\@tempboxa=\hbox\bgroup
+ {%
+ \let\pgf@sh@savedmacros=\pgfutil@empty% MW
+ \let\pgf@sh@savedpoints=\pgfutil@empty%
+ \def\pgf@sm@shape@name{rectangle}% CJ % TT added prefix!
+ \pgf@sh@s@rectangle%
+ \pgf@sh@savedpoints%
+ \pgf@sh@savedmacros% MW
+ \pgftransformshift{%
+ \pgf@sh@reanchor{rectangle}{center}%
+ \pgf@x=-\pgf@x%
+ \pgf@y=-\pgf@y%
+ }%
+ \expandafter\pgfsavepgf@process\csname pgf@sh@sa@\tikz@fig@name\endcsname{%
+ \pgf@sh@reanchor{rectangle}{center}% FIXME : this is double work!
+ }%
+ % Save the saved points and the transformation matrix
+ \edef\pgf@node@name{\tikz@fig@name}%
+ \ifx\pgf@node@name\pgfutil@empty%
+ \else%
+ \expandafter\xdef\csname pgf@sh@ns@\pgf@node@name\endcsname{rectangle}%
+ \edef\pgf@sh@@temp{%
+ \noexpand\gdef\expandafter\noexpand\csname pgf@sh@np@\pgf@node@name\endcsname}%
+ \expandafter\pgf@sh@@temp\expandafter{%
+ \pgf@sh@savedpoints}%
+ \edef\pgf@sh@@temp{%
+ \noexpand\gdef\expandafter\noexpand\csname pgf@sh@ma@\pgf@node@name\endcsname}% MW
+ \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@savedmacros}% MW
+ \pgfgettransform\pgf@temp
+ \expandafter\xdef\csname pgf@sh@nt@\pgf@node@name\endcsname{\pgf@temp}%
+ \expandafter\xdef\csname pgf@sh@pi@\pgf@node@name\endcsname{\pgfpictureid}%
+ \fi%
+ }%
+ \egroup
+ \box\pgfnodeparttextbox
+ \endgroup
+}
+
+\newcommand\subnode[3][]{%
+ \ifmmode
+ \mathchoice{%
+ \subnode@{#1}{#2-d}{\(\displaystyle #3\)}%
+ }{%
+ \subnode@{#1}{#2-t}{\(\textstyle #3\)}%
+ }{%
+ \subnode@{#1}{#2-s}{\(\scriptstyle #3\)}%
+ }{%
+ \subnode@{#1}{#2-ss}{\(\scriptscriptstyle #3\)}%
+ }%
+ \let\pgf@nodecallback\pgfutil@gobble
+ \def\tzmk@prfx{pgf@sys@pdf@mark@pos@pgfid}%
+ \edef\tzmk@pic{\tzmk@prfx\the\pgf@picture@serial@count}
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+ \edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-1\relax}%
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-2\relax}%
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-3\relax}%
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+% \pgfnodealias{#2}{#2-t}% %% Fallback
+ \else
+ \pgfnodealias{#2}{#2-d}%
+ \tikzmarkalias{#2}{#2-d}%
+ \fi
+ \else
+ \pgfnodealias{#2}{#2-t}%
+ \tikzmarkalias{#2}{#2-t}%
+ \fi
+ \else
+ \pgfnodealias{#2}{#2-s}%
+ \tikzmarkalias{#2}{#2-s}%
+ \fi
+ \else
+ \pgfnodealias{#2}{#2-ss}%
+ \tikzmarkalias{#2}{#2-ss}%
+ \fi
+ \else
+ \subnode@{#1}{#2}{#3}%
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikzmarknode}
+% The \Verb+\tikzmark+ macro has changed considerably since its first inception, but there does still seem to be a use for the original version which put stuff inside a node. This command reintroduces that command.
+%
+% It does its best to work inside a math environment by a sneaky trick involving \Verb+\mathchoice+: the \Verb+remember picture+ key means that only the picture id of the typeset box is saved to the aux file. So comparing the possible picture ids of the four options with the one read from the aux file, we can figure out which box was actually used.
+% \begin{macrocode}
+\def\tikzmarknode@#1#2#3{%
+ \tikz[%
+ remember picture,
+ baseline=(#2.base),
+ save picture id={#2},
+ every tikzmarknode picture/.try
+ ] {
+ \node[
+ anchor=base,
+ inner sep=0pt,
+ minimum width=0pt,
+ name={#2},
+ node contents={#3},
+ every tikzmarknode/.try,
+ #1
+ ]}%
+}
+
+\newcommand\tikzmarknode[3][]{%
+ \ifmmode
+ \mathchoice{%
+ \tikzmarknode@{#1}{#2-d}{\(\displaystyle #3\)}%
+ }{%
+ \tikzmarknode@{#1}{#2-t}{\(\textstyle #3\)}%
+ }{%
+ \tikzmarknode@{#1}{#2-s}{\(\scriptstyle #3\)}%
+ }{%
+ \tikzmarknode@{#1}{#2-ss}{\(\scriptscriptstyle #3\)}%
+ }%
+ \let\pgf@nodecallback\pgfutil@gobble
+ \def\tzmk@prfx{pgf@sys@pdf@mark@pos@pgfid}%
+ \edef\tzmk@pic{\tzmk@prfx\the\pgf@picture@serial@count}%
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+ \edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-1\relax}%
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-2\relax}%
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-3\relax}%
+ \expandafter\ifx\csname\tzmk@pic\endcsname\relax
+ % No fallback due to potential nested mathchoices
+ \else
+ \pgfnodealias{#2}{#2-d}%
+ \tikzmarkalias{#2}{#2-d}%
+ \fi
+ \else
+ \pgfnodealias{#2}{#2-t}%
+ \tikzmarkalias{#2}{#2-t}%
+ \fi
+ \else
+ \pgfnodealias{#2}{#2-s}%
+ \tikzmarkalias{#2}{#2-s}%
+ \fi
+ \else
+ \pgfnodealias{#2}{#2-ss}%
+ \tikzmarkalias{#2}{#2-ss}%
+ \fi
+ \else
+ \tikzmarknode@{#1}{#2}{#3}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\usetikzmarklibrary}
+% \begin{macrocode}
+\def\usetikzmarklibrary{%
+ \pgfutil@ifnextchar[{\use@tikzmarklibrary}{\use@@tikzmarklibrary}%
+ }%}
+\def\use@tikzmarklibrary[#1]{\use@@tikzmarklibrary{#1}}
+\def\use@@tikzmarklibrary#1{%
+ \edef\pgf@list{#1}%
+ \pgfutil@for\pgf@temp:=\pgf@list\do{%
+ \expandafter\pgfkeys@spdef\expandafter\pgf@temp\expandafter{\pgf@temp}%
+ \ifx\pgf@temp\pgfutil@empty
+ \else
+ \expandafter\ifx\csname tikzmark@library@\pgf@temp @loaded\endcsname\relax%
+ \expandafter\global\expandafter\let%
+ \csname tikzmark@library@\pgf@temp @loaded\endcsname=\pgfutil@empty%
+ \expandafter\edef\csname tikzmark@library@#1@atcode\endcsname{\the\catcode`\@}
+ \expandafter\edef\csname tikzmark@library@#1@barcode\endcsname{\the\catcode`\|}
+ \catcode`\@=11
+ \catcode`\|=12
+ \pgfutil@InputIfFileExists{tikzmarklibrary\pgf@temp.code.tex}{}{
+ \PackageError{tikzmark}{I did not find the tikzmark extras library '\pgf@temp'.}{}
+ }%
+ \catcode`\@=\csname tikzmark@library@#1@atcode\endcsname
+ \catcode`\|=\csname tikzmark@library@#1@barcode\endcsname
+ \fi%
+ \fi
+ }%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The \Verb+save node+ code is written in \LaTeX3.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+% We save our information in a ``property list'', which is L3's
+% version of an associative array or dictionary. They keys will give
+% the ability to store several groups of nodes and restore them at
+% will.
+% \begin{macrocode}
+\prop_new:N \g__sn_prop
+% \end{macrocode}
+% We'll need a couple of spare token lists
+% \begin{macrocode}
+\tl_new:N \l__sn_tmpa_tl
+\tl_new:N \l__sn_tmpb_tl
+% \end{macrocode}
+%
+% Another useful token list
+% \begin{macrocode}
+\tl_new:N \l__open_bracket_tl
+\tl_set:Nn \l__open_bracket_tl {[} %]
+% \end{macrocode}
+%
+% This token list is used for our current node group name
+% \begin{macrocode}
+\tl_new:N \l__sn_group_tl
+% \end{macrocode}
+%
+% We store up the nodes in a list and save them at the end of a given tikzpicture.
+% \begin{macrocode}
+\clist_new:N \l__sn_nodes_clist
+% \end{macrocode}
+%
+% This boolean is for whether we save to a file or not.
+% \begin{macrocode}
+\bool_new:N \l__sn_file_bool
+% \end{macrocode}
+%
+% This boolean is for whether we are in the preamble or not.
+% \begin{macrocode}
+\bool_new:N \g__sn_preamble_bool
+\bool_set_true:N \g__sn_preamble_bool
+% \end{macrocode}
+%
+% \begin{macrocode}
+\msg_new:nnn {tikzmark} {no file} {File~ "#1"~ doesn't~ exist.}
+\msg_new:nnn {tikzmark} {loading nodes} {Loading~ nodes~ from~ "#1".}
+% \end{macrocode}
+%
+% Dimensions and token lists for shifting
+% \begin{macrocode}
+\dim_new:N \l__sn_x_dim
+\dim_new:N \l__sn_y_dim
+\dim_new:N \l__sn_xa_dim
+\dim_new:N \l__sn_ya_dim
+\tl_new:N \l__sn_centre_tl
+
+\tl_new:N \l__sn_transformation_tl
+\tl_set:Nn \l__sn_transformation_tl {{1}{0}{0}{1}{0pt}{0pt}}
+% \end{macrocode}
+%
+% Set up a stream for saving the nodes data to a file
+% \begin{macrocode}
+\iow_new:N \g__sn_stream
+\bool_new:N \g__sn_stream_bool
+\tl_new:N \g__sn_filename_tl
+\tl_gset:Nx \g__sn_filename_tl {\c_sys_jobname_str}
+
+\cs_new_nopar:Npn \sn_open_stream:
+{
+ \bool_if:NF \g__sn_stream_bool
+ {
+ \iow_open:Nn \g__sn_stream {\tl_use:N \g__sn_filename_tl .nodes}
+ \bool_gset_true:N \g__sn_stream_bool
+ }
+}
+
+\AtEndDocument
+{
+ \ExplSyntaxOn
+ \bool_if:NT \g__sn_stream_bool
+ {
+ \iow_close:N \g__sn_stream
+ }
+ \ExplSyntaxOff
+}
+% \end{macrocode}
+%
+% LaTeX3 wrappers around some PGF functions (to avoid @-catcode issues)
+% \begin{macrocode}
+\makeatletter
+\cs_set_eq:NN \tikz_set_node_name:n \tikz@pp@name
+\cs_set_eq:NN \tikz_fig_must_be_named: \tikz@fig@mustbenamed
+
+\cs_new_nopar:Npn \tikz_scan_point:n #1
+{
+ \tikz@scan@one@point\pgfutil@firstofone#1\relax
+}
+
+\cs_new_nopar:Npn \tikz_scan_point:NNn #1#2#3
+{
+ \tikz@scan@one@point\pgfutil@firstofone#3\relax
+ \dim_set_eq:NN #1 \pgf@x
+ \dim_set_eq:NN #2 \pgf@y
+}
+
+\makeatother
+\cs_generate_variant:Nn \tikz_scan_point:n {V}
+\cs_generate_variant:Nn \tikz_scan_point:NNn {NNV}
+% \end{macrocode}
+%
+% \begingroup
+% \catcode`_=12
+% \begin{macro}{\save_nodes:Nn}
+% This is the command that actually does the work. It constructs a
+% token list which contains the code that will restore the node data
+% when invoked. The two arguments are the token list to store this in
+% and a comma separated list of the node names to be saved.
+% \begin{macrocode}
+\cs_new_nopar:Npn \save_nodes:Nn #1#2
+{
+% \end{macrocode}
+% Clear our token lists
+% \begin{macrocode}
+ \tl_clear:N \l__sn_tmpa_tl
+% \end{macrocode}
+% Set the centre of the picture
+% \begin{macrocode}
+ \tikz_scan_point:NNn \l__sn_x_dim \l__sn_y_dim {(current~ bounding~ box.center)}
+ \dim_set:Nn \l__sn_x_dim {-\l__sn_x_dim}
+ \dim_set:Nn \l__sn_y_dim {-\l__sn_y_dim}
+ \tl_set:Nx \l__sn_centre_tl {
+ {1}{0}{0}{1}{\dim_use:N \l__sn_x_dim}{\dim_use:N \l__sn_y_dim}
+ }
+% \end{macrocode}
+% Iterate over the list of node names
+% \begin{macrocode}
+ \clist_map_inline:nn {#2}
+ {
+% \end{macrocode}
+% Test to see if the node has been defined
+% \begin{macrocode}
+ \tl_if_exist:cT {pgf@sh@ns@##1}
+ {
+% \end{macrocode}
+% The node information is stored in a series of macros of the form
+% \Verb+\pgf@sh@XX@nodename+ where XX is one of the following.
+% \begin{macrocode}
+ \clist_map_inline:nn {ns,np,ma,pi}
+ {
+% \end{macrocode}
+% Our token list will look like:
+%
+% \Verb+\tl_set:cn {pgf@sh@XX@nodename}+ {<current contents of that macro>}
+%
+% This will restore \Verb+\pgf@sh@XX@nodename+ to its current value
+% when this list is invoked.
+%
+% This part puts the \Verb+\tl_set:cn {pgf@sh@XX@nodename}+ in place
+% \begin{macrocode}
+ \tl_put_right:Nn \l__sn_tmpa_tl
+ {
+ \tl_gset:cn {pgf@sh@####1@ \tikz_set_node_name:n{##1} }
+ }
+% \end{macrocode}
+% Now we put the current contents in place. We're doing this in
+% an expansive context to get at the contents. The \Verb+\exp_not:v+
+% part takes the current value of \Verb+\pgf@sh@XX@nodename+ and puts
+% it in place, preventing further expansion.
+% \begin{macrocode}
+ \tl_if_exist:cTF {pgf@sh@####1@##1}
+ {
+ \tl_put_right:Nx \l__sn_tmpa_tl {
+ {\exp_not:v {pgf@sh@####1@ \tikz_set_node_name:n {##1}}}
+ }
+ }
+ {
+ \tl_put_right:Nx \l__sn_tmpa_tl {{}}
+ }
+ }
+ \tl_put_right:Nn \l__sn_tmpa_tl
+ {
+ \tl_gset:cn {pgf@sh@nt@ \tikz_set_node_name:n{##1} }
+ }
+ \compose_transformations:NVv \l__sn_tmpb_tl \l__sn_centre_tl {pgf@sh@nt@##1}
+ \tl_put_right:Nx \l__sn_tmpa_tl {{\exp_not:V \l__sn_tmpb_tl}}
+ \tl_put_right:Nn \l__sn_tmpa_tl {
+ \transform_node:Nn \l__sn_transformation_tl {
+ \tikz_set_node_name:n{##1}
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% Once we've assembled our token list, we store it in the given
+% token list
+% \begin{macrocode}
+ \tl_set_eq:NN #1 \l__sn_tmpa_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save_nodes_to_list:nn}
+% Save the nodes to a list, given a key
+% \begin{macrocode}
+\cs_new_nopar:Npn \save_nodes_to_list:nn #1#2
+{
+ \save_nodes:Nn \l__sn_tmpa_tl {#2}
+ \prop_gput:NnV \g__sn_prop {#1} \l__sn_tmpa_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\save_nodes_to_file:n}
+% Save the nodes to a file
+% \begin{macrocode}
+\cs_new_nopar:Npn \save_nodes_to_file:n #1
+{
+ \save_nodes:Nn \l__sn_tmpa_tl {#1}
+% \end{macrocode}
+% Save the token list to the nodes file so that on reading it back in, we restore the node definitions
+% \begin{macrocode}
+ \sn_open_stream:
+ \iow_now:Nx \g__sn_stream
+ {
+ \iow_newline:
+ \exp_not:V \l__sn_tmpa_tl
+ \iow_newline:
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\cs_generate_variant:Nn \save_nodes_to_list:nn {VV}
+\cs_generate_variant:Nn \save_nodes_to_file:n {V}
+% \end{macrocode}
+%
+% \begin{macro}{\restore_nodes_from_list:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \restore_nodes_from_list:n #1
+{
+% \end{macrocode}
+% Restoring nodes is simple: look in the property list for the key
+% and if it exists, invoke the macro stored there.
+% \begin{macrocode}
+ \prop_get:NnNT \g__sn_prop {#1} \l__sn_tmpa_tl
+ {
+ \tl_use:N \l__sn_tmpa_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\restore_nodes_from_file:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \restore_nodes_from_file:n #1
+{
+ \file_if_exist:nTF {#1.nodes}
+ {
+ \msg_log:nnn {tikzmark} {loading nodes} {#1}
+ \ExplSyntaxOn
+ \file_input:n {#1.nodes}
+ \ExplSyntaxOff
+ }
+ {
+ \msg_warning:nnn {tikzmark} {no file} {#1}
+ }
+}
+\AtBeginDocument{\bool_gset_false:N \g__sn_preamble_bool}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\compose_transformations:Nnn}
+% Compose PGF transformations \Verb+#2 * #3+, storing the result in \Verb+#1+
+
+% I think the PGF Manual might be incorrect. It implies that the
+% matrix is stored row-major, but experimentation implies column-major.
+%
+% That is, \Verb+{a}{b}{c}{d}{s}{t}+ is:
+%
+% \[
+% \begin{bmatrix} a & c \\ b & d \end{bmatrix}
+% \]
+%
+% \begin{macrocode}
+\cs_new_nopar:Npn \compose_transformations:Nnn #1#2#3
+{
+ \tl_gset:Nx #1
+ {
+ {\fp_eval:n {
+ \tl_item:nn {#2} {1}
+ * \tl_item:nn {#3} {1}
+ +
+ \tl_item:nn {#2} {3}
+ * \tl_item:nn {#3} {2}
+ }
+ }
+ {\fp_eval:n {
+ \tl_item:nn {#2} {2}
+ * \tl_item:nn {#3} {1}
+ +
+ \tl_item:nn {#2} {4}
+ * \tl_item:nn {#3} {2}
+ }
+ }
+ {\fp_eval:n {
+ \tl_item:nn {#2} {1}
+ * \tl_item:nn {#3} {3}
+ +
+ \tl_item:nn {#2} {3}
+ * \tl_item:nn {#3} {4}
+ }
+ }
+ {\fp_eval:n {
+ \tl_item:nn {#2} {2}
+ * \tl_item:nn {#3} {3}
+ +
+ \tl_item:nn {#2} {4}
+ * \tl_item:nn {#3} {4}
+ }
+ }
+ {\fp_to_dim:n {
+ \tl_item:nn {#2} {1}
+ * \tl_item:nn {#3} {5}
+ +
+ \tl_item:nn {#2} {3}
+ * \tl_item:nn {#3} {6}
+ +
+ \tl_item:nn {#2} {5}
+ }
+ }
+ {\fp_to_dim:n {
+ \tl_item:nn {#2} {2}
+ * \tl_item:nn {#3} {5}
+ +
+ \tl_item:nn {#2} {4}
+ * \tl_item:nn {#3} {6}
+ +
+ \tl_item:nn {#2} {6}
+ }
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \compose_transformations:Nnn {cVv,NVv,NVn,NvV,NnV}
+% \end{macrocode}
+%
+% \begin{macro}{\transform_node:Nn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \transform_node:Nn #1#2
+{
+ \compose_transformations:cVv {pgf@sh@nt@#2} #1 {pgf@sh@nt@#2}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\set_transform_from_node:n}
+% \begin{macrocode}
+\cs_new_nopar:Npn \set_transform_from_node:n #1
+{
+ \tl_set_eq:Nc \l__sn_transformation_tl {pgf@sh@nt@#1}
+ \tikz_scan_point:NNn \l__sn_x_dim \l__sn_y_dim {(#1.center)}
+
+ \dim_set:Nn \l__sn_x_dim {\l__sn_x_dim - \tl_item:cn {pgf@sh@nt@#1}{5}}
+ \dim_set:Nn \l__sn_y_dim {\l__sn_y_dim - \tl_item:cn {pgf@sh@nt@#1}{6}}
+
+ \compose_transformations:NnV \l__sn_transformation_tl {
+ {1}{0}{0}{1}{\dim_use:N \l__sn_x_dim}{\dim_use:N \l__sn_y_dim}
+ } \l__sn_transformation_tl
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \set_transform_from_node:n {v}
+% \end{macrocode}
+%
+% Set the TikZ keys for access to the above commands.
+% \begin{macrocode}
+\tikzset{
+ set~ saved~ nodes~ file~ name/.code={
+ \tl_gset:Nx \g__sn_filename_tl {#1}
+ },
+ transform~ saved~ nodes/.code={
+ \set_transform_from_node:v {tikz@last@fig@name}
+ },
+ set~ node~ group/.code={
+ \tl_set:Nn \l__sn_group_tl {#1}
+ \pgfkeysalso{
+ execute~ at~ end~ scope={
+ \maybe_save_nodes:
+ }
+ }
+ },
+% \end{macrocode}
+% Are we saving to a file?
+% \begin{macrocode}
+ save~ nodes~ to~ file/.code={
+ \tl_if_eq:nnTF {#1}{false}
+ {
+ \bool_set_false:N \l__sn_file_bool
+ }
+ {
+ \bool_set_true:N \l__sn_file_bool
+ }
+ \pgfkeysalso{
+ execute~ at~ end~ scope={
+ \maybe_save_nodes:
+ }
+ }
+ },
+% \end{macrocode}
+% Append current node to the list of nodes to be saved
+% \begin{macrocode}
+ save~ node/.code={
+ \tikz_fig_must_be_named:
+ \pgfkeysalso{append~ after~ command={
+ \pgfextra{
+ \clist_gput_right:Nv \l__sn_nodes_clist {tikz@last@fig@name}
+ }
+ }
+ }
+ },
+% \end{macrocode}
+% Restore nodes from file
+% \begin{macrocode}
+ restore~ nodes~ from~ file/.code={
+ \bool_if:NTF \g__sn_preamble_bool
+ {
+ \restore_nodes_from_file:n {#1}
+ }
+ {
+ \tikz_fig_must_be_named:
+ \pgfkeysalso{append~ after~ command={
+ \pgfextra{
+ \scope
+ \split_argument:NNn \tikzset \restore_nodes_from_file:n {#1}
+ \endscope
+ }
+ }
+ }
+ }
+ },
+ restore~ nodes~ from~ file/.default = \g__sn_filename_tl,
+% \end{macrocode}
+% Restore nodes from list
+% \begin{macrocode}
+ restore~ nodes~ from~ list/.code={
+ \tikz_fig_must_be_named:
+ \pgfkeysalso{append~ after~ command={
+ \pgfextra{
+ \scope
+ \split_argument:NNn \tikzset \restore_nodes_from_list:n {#1}
+ \endscope
+ }
+ }
+ }
+ }
+}
+\cs_generate_variant:Nn \clist_gput_right:Nn {Nv}
+% \end{macrocode}
+%
+% \begin{macro}{\split_argument:NNn}
+% \begin{macrocode}
+\cs_new_nopar:Npn \split_argument:NNn #1#2#3
+{
+ \tl_set:Nx \l__sn_tmpa_tl {\tl_head:n {#3}}
+ \tl_if_eq:NNTF \l__sn_tmpa_tl \l__open_bracket_tl
+ {
+ \split_argument_aux:NNp #1#2#3
+ }
+ {
+ #2 {#3}
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\split_argument_aux:NNp}
+% \begin{macrocode}
+\cs_new_nopar:Npn \split_argument_aux:NNp #1#2[#3]#4
+{
+ #1 {#3}
+ #2 {#4}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maybe_save_nodes:}
+% \begin{macrocode}
+\cs_new_nopar:Npn \maybe_save_nodes:
+{
+ \clist_if_empty:NF \l__sn_nodes_clist
+ {
+ \bool_if:NTF \l__sn_file_bool
+ {
+ \save_nodes_to_file:V \l__sn_nodes_clist
+ }
+ {
+ \tl_if_empty:NF \l__sn_group_tl
+ {
+ \save_nodes_to_list:VV \l__sn_group_tl \l__sn_nodes_clist
+ }
+ }
+ \clist_gclear:N \l__sn_nodes_clist
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \endgroup
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+% \iffalse
+%</tikzlibrary>
+% \fi
+%
+% \subsection{Listings}
+%
+% \iffalse
+%<*listings>
+% \fi
+%
+% From \url{http://tex.stackexchange.com/q/79762/86}
+%
+% \begin{macrocode}
+\@ifpackageloaded{listings}{%
+% \end{macrocode}
+%
+% \begin{macro}{\iflst@linemark}
+% A conditional to help with placing the mark at the first non-whitespace character.
+% \begin{macrocode}
+ \newif\iflst@linemark
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{EveryLine}
+% This hook places the mark at the start of the line.
+% \begin{macrocode}
+\lst@AddToHook{EveryLine}{%
+ \begingroup
+ \advance\c@lstnumber by 1\relax
+ \pgfmark{line-\lst@name-\the\c@lstnumber-start}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{EOL}
+% This hook places the mark at the end of the line and resets the conditional for placing the first mark.
+% \begin{macrocode}
+\lst@AddToHook{EOL}{\pgfmark{line-\lst@name-\the\c@lstnumber-end}%
+\global\lst@linemarktrue
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{OutputBox}
+% Experimenting shows that this is the right place to set the mark at the first non-whitespace character.
+% But we only want to do this once per line.
+% \begin{macrocode}
+\lst@AddToHook{OutputBox}{%
+ \iflst@linemark
+ \pgfmark{line-\lst@name-\the\c@lstnumber-first}%
+ \global\lst@linemarkfalse
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tikzmk@lst@fnum}
+% An auxiliary macro to figure out if the \Verb+firstnumber+ key was set.
+% If so, it has the form \Verb+<number>\relax+.
+% If not, it expands to a single token.
+% \begin{macrocode}
+\def\tkzmk@lst@fnum#1\relax#2\@STOP{%
+ \def\@test{#2}%
+ \ifx\@test\@empty
+ \def\tkzmk@lst@start{0}%
+ \else
+ \@tempcnta=#1\relax
+ \advance\@tempcnta by -1\relax
+ \def\tkzmk@lst@start{\the\@tempcnta}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{Init}
+% Adds a mark at the start of the listings environment.
+% \begin{macrocode}
+\lst@AddToHook{Init}{%
+ \expandafter\tkzmk@lst@fnum\lst@firstnumber\relax\@STOP
+ \pgfmark{line-\lst@name-\tkzmk@lst@start-start}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+}{%
+ \PackageError{tikzmark listings}{The listings package has not been loaded.}{}
+}
+% \end{macrocode}
+% \iffalse
+%</listings>
+% \fi
+%
+%
+%
+% \Finale
+\endinput
diff --git a/graphics/pgf/contrib/tikzmark/tikzmark.pdf b/graphics/pgf/contrib/tikzmark/tikzmark.pdf
new file mode 100644
index 0000000000..c97ed9a71b
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmark/tikzmark.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzmarmots/LICENSE.txt b/graphics/pgf/contrib/tikzmarmots/LICENSE.txt
new file mode 100644
index 0000000000..f8b699e6eb
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmarmots/LICENSE.txt
@@ -0,0 +1,415 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/graphics/pgf/contrib/tikzmarmots/README.md b/graphics/pgf/contrib/tikzmarmots/README.md
new file mode 100644
index 0000000000..dcc8ed647c
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmarmots/README.md
@@ -0,0 +1,12 @@
+# Tikzmarmots
+
+This is a little LaTeX package for marmots to be used in TikZ pictures.
+
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/tikzmarmots/issues
+
+
+### A few examples:
+
+![tikz marmots](https://user-images.githubusercontent.com/8226363/42419778-ba1cf506-82bb-11e8-8e44-15f9837188e4.png)
diff --git a/graphics/pgf/contrib/tikzmarmots/tikzlibrarymarmots.code.tex b/graphics/pgf/contrib/tikzmarmots/tikzlibrarymarmots.code.tex
new file mode 100644
index 0000000000..2f34797f53
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmarmots/tikzlibrarymarmots.code.tex
@@ -0,0 +1,27 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% TikZ library for the tikzmarmots package
+% A package to bring little marmots into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzmarmots
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 1.0
+% Nov 8, 2018
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage{tikzmarmots}
+
+% This is all that is needed ...
+\tikzset{
+ marmot/.pic={%
+ \marmot@draw
+ },
+ marmot/.search also={,/tikz,/pgf},
+}
+
+
diff --git a/graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.pdf b/graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.pdf
new file mode 100644
index 0000000000..a05c431384
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.tex b/graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.tex
new file mode 100644
index 0000000000..20569b0aba
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmarmots/tikzmarmots-doc.tex
@@ -0,0 +1,328 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Documentation for the tikzmarmots package
+% A package to bring little marmots into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzmarmots
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 1.0
+% Nov 8, 2018
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\documentclass[parskip=half]{scrartcl}
+
+% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage[english]{babel}
+\usepackage[bitstream-charter]{mathdesign}
+\usepackage{tikzducks}
+\usetikzlibrary{ducks}
+\usepackage{tikzmarmots}
+\usetikzlibrary{marmots}
+\usepackage[most]{tcolorbox}
+\usepackage[paper=a4paper,margin=3cm]{geometry}
+\usepackage{url}
+\usepackage{xspace}
+\usepackage{scrlayer-scrpage}
+\usepackage{marvosym}
+\usepackage{fontawesome}
+\usepackage[hang,flushmargin,bottom]{footmisc}
+\usepackage{imakeidx}
+\usepackage[colorlinks=true,breaklinks=true,urlcolor=duckblue,linkcolor=duckblue,citecolor=duckblue,filecolor=duckblue]{hyperref}
+
+% macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newcommand{\CTAN}{\textsc{CTAN}\xspace}
+\newcommand{\TikZ}{Ti\emph{k}Z\xspace}
+\newcommand{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\newcommand{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
+\newcommand{\miktex}{MiK\TeX\xspace}
+\newcommand{\texlive}{\TeX{}Live\xspace}
+
+% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\definecolor{duckblue}{RGB}{0,70,140}
+\definecolor{marmotred}{RGB}{140,20,40}
+\addtokomafont{sectioning}{\color{marmotred}}
+\addtokomafont{date}{\normalsize}
+\addtokomafont{author}{\normalsize}
+\setlength{\footnotemargin}{0.7em}
+
+\lstdefinestyle{marmotstyle}{%
+ language={[latex]TeX},
+ tabsize=2,
+ breaklines,
+ basicstyle=\footnotesize\ttfamily,
+ commentstyle={\color{green!50!black}\slshape},
+ columns=fullflexible,
+ emphstyle=\color{orange!70!black},
+ emph=[1]{body,blush,whiskers,invisible,cake,crown,teeth,3D,shadow,askphil,scale,xshift,yshift},
+ texcsstyle=*\color{duckblue}\bfseries,
+ keywordstyle=\color{red!60!black}\bfseries,
+ morekeywords={tikzpicture,scope,patterns,calc,pgfinterruptboundingbox},
+ moretexcs={marmot,path,definecolor,scalebox,foreach,node,draw,PassOptionsToPackage,usetikzlibrary,selectcolormodel,colorlet,includegraphics,tikzset,shade,duck},
+ delim ={[s][\ttfamily\color{green!50!black}]{$}{$}},
+ moredelim=[is][\footnotesize\ttfamily\color{orange!70!black}]{|}{|},
+ index=[1][emph]
+}
+
+\tcbset{%
+ colframe=marmotred,
+ arc=2mm,
+ fonttitle=\bfseries,
+ sidebyside,
+ listing options={style=marmotstyle},
+ center lower,
+ righthand width=6.5cm,
+ bottom=0pt,
+ top=0pt,
+ before lower={%
+ \setlength{\parskip}{0.5cm}%
+ \spaceskip=5\fontdimen2\font%
+ },
+}
+
+\lstset{style=marmotstyle}
+
+\setlength{\footheight}{45pt}
+
+\cfoot{%
+ \begin{tikzpicture}[scale=0.5]
+ \marmot
+ \duck[invisible,signpost=\scalebox{0.6}{\thepage}]
+ \end{tikzpicture}
+}
+\pagestyle{scrheadings}
+%\indexsetup{firstpagestyle=scrheadings}
+%\makeindex
+
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{The \texorpdfstring{\tikzmarmots}{tikzmarmots} package}
+\subtitle{using marmots in \TikZ}
+\author{%
+ \texorpdfstring{\texttt{samcarter} (alias
+ \begin{tikzpicture}[scale=0.3,baseline=3pt]
+ \duck[body=yellow!50!brown!50!white,
+ longhair=red!50!brown,
+ jacket=blue!50!black]
+ \end{tikzpicture})\\[0.8em]
+ \url{https://github.com/samcarter/tikzmarmots}\\
+ \url{https://www.ctan.org/pkg/tikzmarmots}
+ }{samcarter}}
+\date{Version 1.0 -- \today}
+
+\begin{document}
+\maketitle
+\thispagestyle{scrheadings}
+
+\begin{tcolorbox}[coltext=marmotred,width=.8\textwidth,center, sidebyside=false, bottom=10pt,top=10pt]
+The \tikzmarmots package was merged into the Ti\emph{k}Zlings package. To get an up-to-date version, please load the {\color{duckblue}\lstinline|tikzlings-marmots|} or the more general {\color{duckblue}\lstinline|tikzlings|} package instead.
+\end{tcolorbox}
+
+
+\section{Introduction}
+\label{intro}
+
+Inspired by the enthusiasms of the TeX.Stackexchange user \href{https://tex.stackexchange.com/users/121799/marmot}{@marmot} for beings of the same species, this little package can draw marmots using \TikZ.
+
+Unlike its older sibling, the \tikzducks package, this packages focuses on drawing the marmot itself. Additional accessories are not part of the package, but can be taken from other sources.
+
+This package is work in progress, therefore I would be happy to hear your feedback and ideas how to improve the package. The head version of the source code can be found on \url{github.com/samcarter/tikzmarmots}, including a bug tracker -- please make constructive use of it!
+A more stable package version can be found on \CTAN (\url{www.ctan.org/pkg/tikzmarmots}) and is included in both \miktex and \texlive as \tikzmarmots.
+If you seek any other assistance (not bug reports/feature requests), I suggest asking on \href{https://tex.stackexchange.com}{TeX.Stackexchange}.
+
+%\subsection{Acknowledgements}
+%
+%Without the friendly and helpful community of \href{https://tex.stackexchange.com/}{TeX.Stackexchange} this package would not exist.
+%
+%%I would like to thank a few fellow users in particular:
+%%TODO marmot
+%%TODO ulrike
+
+\subsection{License}
+
+Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright}
+\texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
+
+The shown example marmots are purely fictional characters, any resemblance to real marmots or persons is purely coincidental and no copyright infringement is intended.
+
+\subsection{Dependencies}
+
+The \tikzmarmots package loads \TikZ, which in turn loads the \lstinline|xcolor| package (amongst others). If you require one of these packages to be loaded with some option, please consider loading it yourself before the \tikzmarmots package or use, e.g.
+
+\begin{lstlisting}[aboveskip=1.2em,morekeywords={xcolor,svgnames}]
+ \PassOptionsToPackage{svgnames}{xcolor}
+\end{lstlisting}
+
+\section{Usage}
+
+The basic usage is fairly simple, to draw a marmot:
+\begin{tcblisting}{title={Basic marmot}}
+\begin{tikzpicture}
+ \marmot
+\end{tikzpicture}
+\end{tcblisting}
+
+To customise this basic marmot, the package uses \lstinline|pgf| keys.
+
+These keys can for example be used to change the marmot's colour via \lstinline|body=<colour name>|.
+
+\begin{tcblisting}{title={Blue marmot}}
+\begin{tikzpicture}
+ \marmot[body=blue]
+\end{tikzpicture}
+\end{tcblisting}
+
+The colour of the belly and muzzle will use a lighter shade of the selected colour, while a darker shade is chosen for paws, nose and eyes.
+
+The key \lstinline|3D| will make the marmot 3-dimensional:
+
+\begin{tcblisting}{title={3D marmot}}
+\begin{tikzpicture}
+ \marmot[3D]
+\end{tikzpicture}
+\end{tcblisting}
+
+Keys can also be used to add whiskers to the marmot:
+
+\begin{tcblisting}{title={Whiskers}}
+\begin{tikzpicture}
+ \marmot[whiskers]
+\end{tikzpicture}
+\begin{tikzpicture}
+ \marmot[whiskers=blue]
+\end{tikzpicture}
+\end{tcblisting}
+
+Or to make it blush:
+
+\begin{tcblisting}{title={Blushing marmot}}
+\begin{tikzpicture}
+ \marmot[blush]
+\end{tikzpicture}
+\end{tcblisting}
+
+Some marmots even show their chisel teeth:
+
+\begin{tcblisting}{title={Chisel teeth}}
+\begin{tikzpicture}
+ \marmot[teeth]
+\end{tikzpicture}
+\end{tcblisting}
+
+The marmots also can cast a shadow:
+
+\begin{tcblisting}{title={Shadow}}
+\begin{tikzpicture}
+ \marmot[shadow]
+\end{tikzpicture}
+\end{tcblisting}
+
+This ability is important if you want to ask Punxsutawney Phil\footnote{\url{https://en.wikipedia.org/wiki/Punxsutawney_Phil}} on Groundhog Day how the weather is going to be. With a probability derived from the statistics of 120 Groundhog Days\footnote{\url{https://www.livescience.com/32974-punxsutawney-phil-weather-prediction-accuracy.html}} the option \lstinline|askphil| might or might not result in a shadow.
+
+\begin{tcblisting}{title={Ask Phil}}
+\begin{tikzpicture}
+ \marmot[askphil]
+\end{tikzpicture}
+\end{tcblisting}
+
+
+If the size of the marmots should be changed or shifted:
+
+\begin{tcblisting}{title={Scaled and shifted marmots}, righthand width=3cm}
+\begin{tikzpicture}[scale=0.6]
+ \marmot
+ \marmot[xshift=90pt, scale=.5, yshift=150pt,body=brown!80!gray]
+ \marmot[xshift=60pt, scale=.5, yshift=100pt,body=brown!80!yellow]
+ \marmot[xshift=80pt, scale=.5, yshift=50pt,body=brown!80!red]
+\end{tikzpicture}
+\end{tcblisting}
+
+To make the usage easier for the \TikZ-savvy users, the marmots can also be used as \TikZ library. It can be loaded with \lstinline|\usetikzlibrary{marmots}|. In addition to the normal functionality of the \tikzmarmots package, the marmots are now also available as \lstinline|pic|. A short example:
+
+\begin{tcolorbox}[title={\TikZ library ``marmots''}]
+\begin{lstlisting}[morekeywords={marmots,duck,standalone,tikz,document}]
+\documentclass{standalone}
+
+\usepackage{tikz}
+\usetikzlibrary{marmots}
+
+\begin{document}
+
+\begin{tikzpicture}
+\draw (0,0) pic[
+ marmot/body=blue,
+ marmot/blush,
+ ] {marmot};
+\draw (2,0) pic[
+ scale=1.4,
+ ] {marmot};
+\end{tikzpicture}
+
+\end{document}
+\end{lstlisting}
+
+\tcblower
+\begin{tikzpicture}
+\draw (0,0) pic[
+ marmot/body=blue,
+ marmot/blush,
+ ] {marmot};
+\draw (2,0) pic[
+ scale=1.4,
+ ] {marmot};
+\end{tikzpicture}
+\end{tcolorbox}
+
+\section{Further customisation}
+
+The above list of available customisations does not sound very exhaustive, but there are basically infinite possibilities for further customisation, as the marmots are just shapes in a \TikZ picture -- all the heavy weapons of the \TikZ package are thus available for further customisation.
+
+\begin{tcblisting}{title={Adding things to the marmot}}
+\begin{tikzpicture}
+ \marmot
+ \fill[blue] (2,0) rectangle (1,1);
+\end{tikzpicture}
+\end{tcblisting}
+
+%\begin{tcblisting}{title={Monochrome marmot}}
+%\begin{tikzpicture}
+% \selectcolormodel{gray}
+% \marmot
+%\end{tikzpicture}
+%\end{tcblisting}
+
+\section{Re-using accessories from the \tikzducks package}
+
+As already said in the introduction, this package focuses on the marmots themselves and does not provide additional accessories.
+However there is no need to despair! Many of the accessories from the \tikzducks package (\url{https://www.ctan.org/pkg/tikzducks}) can be re-used using the \lstinline|invisible| key which will only produce the desired item without a duck.
+
+The marmots are designed to have the same height as the ducks, so many items can be adopted without any modifications. One example:
+
+\addtocounter{footnote}{1}
+\begin{tcblisting}{title={Marmot Queen$^{\thefootnote}$}}
+%\usepackage{tikzducks}
+\begin{tikzpicture}
+ \marmot
+ \duck[invisible,crown]
+\end{tikzpicture}
+\end{tcblisting}
+\footnotetext[\thefootnote]{The Marmot Queen is inspired by \href{http://www.ilregnodeifanes.it/inglese/summary.htm}{The Fanes' saga}}
+
+Unfortunately not all accessories will work. Some are entirely unsuitable (e.g. clothing which shape was specially designed for the ducks), others can be modified to fit:
+
+\begin{tcblisting}{title={Happy Birthday!}}
+%\usepackage{tikzducks}
+\begin{tikzpicture}
+ \marmot
+ \duck[invisible, cake=red!50!violet, scale=0.7, xshift=9, yshift=18]
+\end{tikzpicture}
+\end{tcblisting}
+
+For a complete list of available accessories, please see the documentation of the \tikzducks package (\url{http://mirrors.ctan.org/graphics/pgf/contrib/tikzducks/tikzducks-doc.pdf})
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzmarmots/tikzmarmots.sty b/graphics/pgf/contrib/tikzmarmots/tikzmarmots.sty
new file mode 100644
index 0000000000..ae2bf3d937
--- /dev/null
+++ b/graphics/pgf/contrib/tikzmarmots/tikzmarmots.sty
@@ -0,0 +1,186 @@
+% !TeX root = ./testing/test.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The tikzmarmots package
+% A package to bring little marmots into tikz
+% Maintained by samcarter
+%
+% Project repository and bug tracker:
+% https://github.com/samcarter/tikzmarmots
+%
+% Released under the LaTeX Project Public License v1.3c or later
+% See http://www.latex-project.org/lppl.txt
+%
+% Version 1.0
+% Nov 8, 2018
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ProvidesPackage{tikzmarmots}
+ [2018/11/09 v1.0 Drawing marmots in TikZ]
+
+\PackageWarning{tikzmarmots}{The TikZmarmots package was merged into the TikZlings package, please load the package `tikzlings-marmots` or the more general `tikzlings` package instead}
+
+\RequirePackage{tikz}
+\usetikzlibrary{shadows.blur}
+\usetikzlibrary{fadings}
+
+\tikzfading[name=marmot@blush,
+inner color=transparent!50,
+outer color=transparent!100]
+
+\RequirePackage{ifluatex}
+\RequirePackage{ifxetex}
+
+\ifluatex
+ \let\pdfrandomseed\randomseed
+\fi
+
+\ifxetex
+ \pgfmathsetseed{\time}
+\else
+ \pgfmathsetseed{\number\pdfrandomseed}
+\fi
+
+\newcommand*{\marmot}[1][]{%
+ \begin{scope}%
+ \tikzset{/marmot/.cd,#1}%
+ \marmot@draw%
+ \end{scope}%
+}
+
+\newif\ifmarmot@blush
+\newif\ifmarmot@whiskers
+\newif\ifmarmot@teeth
+\newif\ifmarmot@threeD
+\newif\ifmarmot@shadow
+\newif\ifmarmot@askphil
+
+\tikzset{
+ %
+ % Pass unknown keys on to tikz
+ %
+ /marmot/.search also={/tikz,/pgf},
+ /marmot/.cd,
+ %
+ % body
+ %
+ body/.code = \def\marmot@body{#1},
+ body = brown,
+ %
+ % options
+ %
+ blush/.code = \marmot@blushtrue,
+ whiskers/.code = \marmot@whiskerstrue \def\marmot@whiskers{#1},
+ whiskers/.default = gray,
+ teeth/.code = \marmot@teethtrue,
+ 3D/.code = \marmot@threeDtrue,
+ shadow/.code = \marmot@shadowtrue,
+ askphil/.code = \marmot@askphiltrue,
+ ask phil/.forward to=/marmot/askphil,
+}
+
+\def\marmot@draw{%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% minimal bounding box size
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\path (0.3,0.1) rectangle (1.83,2.17);
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% switch between 2D and 3D, from
+% https://chat.stackexchange.com/transcript/message/45991801#45991801
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@threeD
+ \def\marmot@part@draw##1{\shade[ball color=##1]}
+\else
+ \def\marmot@part@draw##1{\fill[##1]}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% shadow
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\ifmarmot@askphil
+ \pgfmathparse{int(random(1,120))}
+ \let\marmot@random=\pgfmathresult
+ \ifnum\marmot@random>17
+ \marmot@shadowtrue
+ \fi
+\fi
+%
+\ifmarmot@shadow
+ \fill[opacity=0,blur shadow,rotate=-80] (-0.25,1.3) ellipse (0.28 and 0.8);
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Body parts (center: x=0.925)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!black} (1.18,0.2) ellipse (0.23 and 0.09);
+\marmot@part@draw{\marmot@body!50!black} (0.67,0.2) ellipse (0.23 and 0.09);
+%
+% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!black} (1.18,2.03) ellipse (0.09 and 0.13);
+\marmot@part@draw{\marmot@body!50!black} (0.67,2.03) ellipse (0.09 and 0.13);
+%
+% Tail %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!black} (1.81,0.67) .. controls (1.79,0.40) and (1.27,0.24) .. (1.26,0.44) .. controls (1.24,0.56) and (1.37,0.51) .. (1.50,0.53) .. controls (1.62,0.54) and (1.81,0.72) .. (1.81,0.67) -- cycle;
+%
+% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body} (1.52,0.92) .. controls (1.52,0.26) and (1.28,0.18) .. (0.925,0.18) .. controls (0.57,0.18) and (0.33,0.26) .. (0.33,0.92) .. controls (0.32,1.58) and (0.59,2.11) .. (0.925,2.11) .. controls (1.26,2.11) and (1.53,1.58) .. (1.52,0.92) -- cycle;
+%
+% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!white} (1.35,0.71) .. controls (1.35,0.41) and (1.17,0.37) .. (0.925,0.37) .. controls (0.68,0.37) and (0.5,0.41) .. (0.5,0.71) .. controls (0.5,1.01) and (0.7,1.26) .. (0.925,1.26) .. controls (1.15,1.26) and (1.35,1.01) .. (1.35,0.71) -- cycle;
+%
+% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!black,rotate around={70:(1.31,0.93)}} (1.31,0.93) ellipse (0.24 and 0.13);
+\marmot@part@draw{\marmot@body!50!black,rotate around={-70:(0.54,0.93)}} (0.54,0.93) ellipse (0.24 and 0.13);
+%
+% Muzzle %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!white} (0.925,1.47) ellipse (0.23 and 0.13);
+%
+% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!black} (0.925,1.6) circle (0.08);
+%
+% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\marmot@part@draw{\marmot@body!50!black} (0.77,1.77) circle (0.05);
+\marmot@part@draw{\marmot@body!50!black} (1.08,1.77) circle (0.05);
+%
+% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\draw[\marmot@body!50!black] (1.07,1.51) arc [start angle=-20, end angle=-160, radius=0.16];
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% optional
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Blushed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@blush
+ \fill[red,path fading=marmot@blush] (0.63,1.6) circle (0.1);
+ \fill[red,path fading=marmot@blush] (1.22,1.6) circle (0.1);
+\fi
+%
+% Wiskers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@whiskers
+ \foreach \X in {10,20,33}{%
+ \filldraw[line width=0pt,\marmot@whiskers] (0.925,1.6) + (\X:0.08) to[out=\X,in={180-\X}] ++({\X-20}:0.3) --++(0,0.005) to[out={180-\X},in=\X] cycle (0.925,1.6) + ({180-\X}:0.08) to[out={180-\X},in=\X] ++({200-\X}:0.3) --++(0,0.005) to[out=\X,in={180-\X}] cycle;
+ }
+\fi
+%
+% Teeth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ifmarmot@teeth
+ \draw[very thin,fill=white] (0.88,1.41) -- (0.88,1.38) to[out=-5,in=-175] (0.97,1.38) -- (0.97,1.41) to[out=-170,in=-10] cycle;
+ \draw[very thin] (0.925,1.405) -- (0.925,1.38);
+\fi
+%
+}
+
diff --git a/graphics/pgf/contrib/tikzorbital/README b/graphics/pgf/contrib/tikzorbital/README
new file mode 120000
index 0000000000..92cacd2853
--- /dev/null
+++ b/graphics/pgf/contrib/tikzorbital/README
@@ -0,0 +1 @@
+README.rst \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzorbital/README.rst b/graphics/pgf/contrib/tikzorbital/README.rst
new file mode 100644
index 0000000000..3a1efb9489
--- /dev/null
+++ b/graphics/pgf/contrib/tikzorbital/README.rst
@@ -0,0 +1,31 @@
+-------------------
+tikzorbital package
+-------------------
+
+:Licence: Latex project public licence http://www.latex-project.org/lppl.txt
+:Author: Germain Salvato-Vallverdu <germain.vallverdu@univ-pau.fr>
+:Date: decembre 2012
+:CTAN: http://www.ctan.org/pkg/tikzorbital
+:gitHub: https://github.com/gVallverdu/tikzorbital
+
+short description
+-----------------
+
+The tikzorbital package provides several LaTeX macros in order to draw
+easily molecular diagrams and atomic orbital of type s, p and d inside
+tikzpicture environment.
+
+macros
+------
+
+All macros have to be used inside tikzpicture environment :
+
+ * ``\drawLevel`` : draw a level with zero, one or two electrons drawn as up and arrows. This command is used for molecular orbital diagrams.
+ * ``\orbital`` : draw atomic orbital of type s, p or d.
+ * ``\satom`` : quickly place an atom with several lobes around it.
+
+bugs and suggestion
+-------------------
+
+Feel free to contact me for any bugs, comments or suggestions.
+
diff --git a/graphics/pgf/contrib/tikzorbital/tikzorbital.pdf b/graphics/pgf/contrib/tikzorbital/tikzorbital.pdf
new file mode 100644
index 0000000000..4810ace65b
--- /dev/null
+++ b/graphics/pgf/contrib/tikzorbital/tikzorbital.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzorbital/tikzorbital.sty b/graphics/pgf/contrib/tikzorbital/tikzorbital.sty
new file mode 100644
index 0000000000..1794b18487
--- /dev/null
+++ b/graphics/pgf/contrib/tikzorbital/tikzorbital.sty
@@ -0,0 +1,450 @@
+% -------------------
+% Package tikzorbital
+% -------------------
+%
+% This package provides several commands in order to draw atomic orbitals and
+% molecular diagrams.
+%
+% Germain Vallverdu <germain.vallverdu@univ-pau.fr>
+% 05 decembre 2012
+% http://gvallver.perso.univ-pau.fr/
+%
+% Licence : LaTeX Project Public Licence
+% http://www.latex-project.org/lppl.txt
+%
+% Feel free to contact me if you have any ideas, suggestions or bugs report !
+%
+% Change
+% ------
+% 27/02/2013 : add -px, -py, -pz orbital type
+% 05/03/2015 : add satom macro, with scaling options for each lobe
+%
+% -----------------------------------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikzorbital}[2012/12/05 draw atomic orbitals and molecular diagrams with tikz]
+% -----------------------------------------------------------------------------
+
+\RequirePackage{tikz}
+\usetikzlibrary{shapes}
+\RequirePackage{ifthen}
+
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{main}
+\pgfdeclarelayer{foreground}
+\pgfsetlayers{background,main,foreground}
+
+% -----------------------------------------------------------------------------
+% keys in order to submit tikz command to macro
+% -----------------------------------------------------------------------------
+\pgfkeys{/tikz/.cd,
+ execute style/.style = {#1},
+ execute macro/.style = {execute style/.expand once=#1}
+}
+
+% -----------------------------------------------------------------------------
+% commande \drawLevel[key = value]{name}
+% -----------------------------------------------------------------------------
+% draw a level with a given name in order to draw molecular diagrams
+%
+% argument
+% name : base name of level anchor.
+%
+% options
+% elec : Number of electrons : up, down, updown or pair
+% pos : left position of the level
+% width : level widht
+% style : level style (a tikzstyle)
+% spinstyle : style of arrows which represents electrons (a tikzstyle)
+% spinlength : length of spin arrows
+% -----------------------------------------------------------------------------
+
+\pgfkeys{/tikzorbital/drawLevel/.cd,
+% number of electron in the level : up, down, updown or pair
+ elec/.store in = \drawLevel@elec,
+ elec/.default = no,
+% position of the left anchor of the level
+ pos/.store in = \drawLevel@pos,
+ pos/.default = {(0,0)},
+% width of levels
+ width/.store in = \drawLevel@width,
+ width/.default = 2,
+% style of levels
+ style/.store in = \drawLevel@style,
+ style/.default = {line width = 2pt, color = black!80, line cap = round},
+% style of arrows
+ spinstyle/.store in = \drawLevel@spinstyle,
+ spinstyle/.default = {very thick, color = red!80, -stealth},
+% length of spin arrows
+ spinlength/.store in = \drawLevel@spinlength,
+ spinlength/.default = 1,
+% execute options
+ elec, pos, width, style, spinstyle, spinlength
+}
+
+% the drawLevel command
+\newcommand{\drawLevel}[2][]{%
+ \begingroup
+ \pgfkeys{/tikzorbital/drawLevel/.cd, #1}
+ \def\drawLevel@name{#2}
+
+ \draw[execute macro = \drawLevel@style]
+ \drawLevel@pos
+ node (left \drawLevel@name) {}
+ -- ++ (\drawLevel@width, 0)
+ node (right \drawLevel@name) {}
+ node[pos=0.5] (middle \drawLevel@name) {}
+ node[pos=0.3] (pos1) {}
+ node[pos=0.7] (pos2) {};
+
+ \ifthenelse{\equal{\drawLevel@elec}{updown} \or \equal{\drawLevel@elec}{pair}}{
+ \draw[execute macro = \drawLevel@spinstyle]
+ (pos1.center) ++ (0,-\drawLevel@spinlength/2) --
+ ++ (0,\drawLevel@spinlength);
+ \draw[execute macro = \drawLevel@spinstyle]
+ (pos2.center) ++ (0, \drawLevel@spinlength/2) --
+ ++ (0,-\drawLevel@spinlength);
+ }{
+ \ifthenelse{\equal{\drawLevel@elec}{up}}{
+ \draw[execute macro = \drawLevel@spinstyle]
+ (middle #2.center) ++ (0,-\drawLevel@spinlength/2) --
+ ++ (0,\drawLevel@spinlength);
+ }{
+ \ifthenelse{\equal{\drawLevel@elec}{down}}{
+ \draw[execute macro = \drawLevel@spinstyle]
+ (middle #2.center) ++(0,\drawLevel@spinlength/2) --
+ ++ (0,-\drawLevel@spinlength);
+ }{
+ }
+ }
+ }
+ \endgroup
+}
+
+% -----------------------------------------------------------------------------
+% some customization of orbital
+% -----------------------------------------------------------------------------
+
+% inner color for orbital filling
+\colorlet{innerColor}{black!10}
+
+% color for orbital drawing
+\colorlet{drawColor}{black!80}
+
+% more style for lobe orbital drawing
+\newcommand{\setOrbitalDrawing}[1]{\def\orbitalDrawing{#1}}
+\setOrbitalDrawing{thick}
+
+% -----------------------------------------------------------------------------
+% inner \@alobe command
+% -----------------------------------------------------------------------------
+% Draw one lobe of a p or d atomic orbital, at a given position with a given scale,
+% color, rotation and opacity. Draw zero, one or two balls which represent electrons.
+%
+% arguments
+% #1 : position
+% #2 : rotation
+% #3 : scale
+% #4 : color
+% #5 : number of electron
+% #6 : opacity
+% -----------------------------------------------------------------------------
+\newcommand{\@alobe}[6]{
+ \begin{scope}[rotate around = {#2:#1}]
+ % draw orbital lobe
+ \begin{pgfonlayer}{background}
+ \draw[draw = drawColor, outer color = #4, inner color = innerColor,
+ opacity = #6, execute macro = \orbitalDrawing]
+ #1 .. controls ++ (#3, #3) and ++ (#3, - #3) .. #1;
+ \end{pgfonlayer}
+
+ %Coordinates of the electrons
+ \path #1 ++ (0.50 * #3, 0) node (e1) {};
+ \path #1 ++ (0.25 * #3, 0) node (e2) {};
+ \end{scope}
+
+ % Draw the electrons
+ \ifnum#5>0
+ \foreach \n in {1,...,#5} {
+ \shade[ball color = #4] (e\n) circle (1mm);
+ }
+ \fi
+}
+
+% -----------------------------------------------------------------------------
+% commande \orbital[key = value]{type}
+% -----------------------------------------------------------------------------
+% draw an atomic orbital of a given type.
+%
+% argument
+% type : lobe, s, px, py, pz, dxz, dyz, dxy, dz2, dx2y2
+%
+% options
+% pos : left position of the level
+% pcolor : color of the positive lobe
+% ncolor : color of the negative lobe
+% scale : scaling factor
+% opacity : opacity of the orbital
+% rotate : rotate of the AO (lobe type only)
+% nelec : number of electron (lobe type only)
+% -----------------------------------------------------------------------------
+
+% define options
+\pgfkeys{/tikzorbital/orbital/.cd,
+% position of the orbital
+ pos/.store in = \orbital@pos,
+ pos/.default = {(0,0)},
+% color of the positive lobe
+ pcolor/.store in = \orbital@pcolor,
+ pcolor/.default = blue,
+% color of the negative lobe
+ ncolor/.store in = \orbital@ncolor,
+ ncolor/.default = black!30,
+% color for s type
+ color/.store in = \orbital@color,
+ color/.default = empty,
+% scale factor
+ scale/.store in = \orbital@scale,
+ scale/.default = 1,
+% opacity of the orbital
+ opacity/.store in = \orbital@opacity,
+ opacity/.default = 1.,
+% lobe type options
+% rotation of the orbital
+ rotate/.store in = \orbital@rotate,
+ rotate/.default = 0,
+% number of electrons
+ nelec/.store in = \orbital@nelec,
+ nelec/.default = 0,
+% execute options
+ pos, pcolor, ncolor, scale, opacity, rotate, nelec, color
+}
+
+% orbital command
+\newcommand{\orbital}[2][]{
+ \begingroup
+ \pgfkeys{/tikzorbital/orbital/.cd, #1}
+
+ % orbital type
+ \def\orbital@type{#2}
+
+ % general style
+ \tikzstyle{base} = [draw = drawColor, thick, inner color = innerColor,
+ circle, opacity = \orbital@opacity,
+ execute macro = \orbitalDrawing]
+
+ % check if color was setted
+ \ifthenelse{\equal{\orbital@color}{empty}}{
+ \pgfkeys{/tikzorbital/orbital/.cd, color = \orbital@pcolor}
+ }{}
+
+ % draw the whished orbital
+ \ifthenelse{\equal{\orbital@type}{lobe}}{
+ \@alobe{\orbital@pos}{\orbital@rotate}{\orbital@scale}{\orbital@color}{\orbital@nelec}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{py}}{
+ \@alobe{\orbital@pos}{0}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{180}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{-py}}{
+ \@alobe{\orbital@pos}{180}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{0}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{pz}}{
+ \@alobe{\orbital@pos}{90}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{270}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{-pz}}{
+ \@alobe{\orbital@pos}{270}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{90}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{px}}{
+ \node[base, outer color = \orbital@ncolor, scale = \orbital@scale * 1.8,
+ xshift = 2pt, yshift = 2pt] at \orbital@pos {};
+ \node[base, outer color = \orbital@pcolor, scale = \orbital@scale * 1.8]
+ at \orbital@pos {};
+ }{
+ \ifthenelse{\equal{\orbital@type}{-px}}{
+ \node[base, outer color = \orbital@pcolor, scale = \orbital@scale * 1.8,
+ xshift = 2pt, yshift = 2pt] at \orbital@pos {};
+ \node[base, outer color = \orbital@ncolor, scale = \orbital@scale * 1.8]
+ at \orbital@pos {};
+ }{
+ \ifthenelse{\equal{\orbital@type}{dyz}}{
+ \@alobe{\orbital@pos}{45}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{135}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{225}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{315}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{dxz}}{
+ \@alobe{\orbital@pos}{80}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{280}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{100}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{260}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{dxy}}{
+ \@alobe{\orbital@pos}{10}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{170}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{350}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{190}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{dx2y2}}{
+ \begin{pgfonlayer}{background}
+ \node[base, outer color = \orbital@pcolor, scale = \orbital@scale * 1.8,
+ xshift = 2pt, yshift = 2pt] at \orbital@pos {};
+ \end{pgfonlayer}
+ \@alobe{\orbital@pos}{0}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ \@alobe{\orbital@pos}{180}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+ \node[base, outer color = \orbital@pcolor, scale = \orbital@scale * 1.8]
+ at \orbital@pos {};
+ }{
+ \ifthenelse{\equal{\orbital@type}{dz2}}{
+ \@alobe{\orbital@pos}{270}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ \begin{pgfonlayer}{background}
+ \node[ellipse, minimum width = \orbital@scale * .8cm,
+ minimum height = \orbital@scale * .3cm, draw = drawColor,
+ inner color = innerColor, outer color = \orbital@ncolor,
+ execute macro = \orbitalDrawing]
+ at \orbital@pos {};
+ \end{pgfonlayer}
+ \@alobe{\orbital@pos}{90}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+ }{
+ \ifthenelse{\equal{\orbital@type}{s}}{
+ \node[base, outer color = \orbital@color, scale = \orbital@scale * 1.8]
+ at \orbital@pos {};
+ }{
+ \node[red] at \orbital@pos {orbital type unknown};
+ }}}}}}}}}}}}}
+ \endgroup
+}
+
+%
+% other possibility for dxy and dxz atomic orbital
+% ------------------------------------------------
+%
+% dxz
+% \begin{scope}[xshift = 2.2pt, yshift = 2pt]
+% \@alobe{\orbital@pos}{90}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+% \@alobe{\orbital@pos}{270}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+% \end{scope}
+% \@alobe{\orbital@pos}{90}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+% \@alobe{\orbital@pos}{270}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+%
+% dxy
+% \begin{scope}[xshift = 2.2pt, yshift = 2pt]
+% \@alobe{\orbital@pos}{10}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+% \@alobe{\orbital@pos}{170}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+% \end{scope}
+% \@alobe{\orbital@pos}{350}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+% \@alobe{\orbital@pos}{190}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+%
+% -------------------------------------------------
+
+% -----------------------------------------------------------------------------
+% commande \atom[options]{lobes}
+% -----------------------------------------------------------------------------
+% quickly draw an atom with several orbital lobes around it.
+% DEPRECATED, use satom insteed.
+%
+% argument
+% lobes : A comma separated list lobe definition with
+% color/rotation-angle/anchor/number of electrons
+%
+% options
+% pos : position of the atom
+% name : name of the atom, also used to label the node
+% color : color of the atom
+% opacity : opacity of the orbital
+% scale : scaling factor
+% -----------------------------------------------------------------------------
+
+% define options
+\pgfkeys{/tikzorbital/atom/.cd,
+% position of the atom
+ pos/.store in = \atom@pos,
+ pos/.default = {(0,0)},
+% atom name
+ name/.store in = \atom@name,
+ name/.default = X,
+% color of the atom
+ color/.store in = \atom@color,
+ color/.default = green,
+% opacity of the orbitals
+ opacity/.store in = \atom@opacity,
+ opacity/.default = .8,
+% scaling factor
+ scale/.store in = \atom@scale,
+ scale/.default = 1.,
+% execute options
+ pos, name, color, opacity, scale
+}
+
+% atom definition
+\newcommand{\atom}[2][]{
+ \begingroup
+ \pgfkeys{/tikzorbital/atom/.cd, #1}
+ \colorlet{atomColor}{\atom@color}
+ \node[shape = circle, thick, inner sep = 0pt, minimum size = 1.5em,
+ draw = atomColor!40, color = atomColor!70!gray, fill = atomColor!20,
+ scale = \atom@scale]
+ at \atom@pos (\atom@name) {\atom@name};
+ \def\s{1.}
+ \foreach \acolor/\rot/\anchor/\Ne in {#2} {
+ \@alobe{(\atom@name.\anchor)}{\rot}{1.5*\atom@scale}{\acolor}{\Ne}{\atom@opacity}
+ }
+ \endgroup
+}
+
+% -----------------------------------------------------------------------------
+% commande \satom[options]{lobes}
+% -----------------------------------------------------------------------------
+% quickly draw an atom with several orbital lobes around it
+%
+% argument
+% lobes : A comma separated list lobe definition with
+% color/rotation-angle/anchor/number of electrons/scale
+%
+% options
+% pos : position of the atom
+% name : name of the atom, also used to label the node
+% color : color of the atom
+% opacity : opacity of the orbital
+% scale : global scaling factor
+% -----------------------------------------------------------------------------
+
+% define options
+\pgfkeys{/tikzorbital/satom/.cd,
+% position of the atom
+ pos/.store in = \satom@pos,
+ pos/.default = {(0,0)},
+% atom name
+ name/.store in = \satom@name,
+ name/.default = X,
+% color of the atom
+ color/.store in = \satom@color,
+ color/.default = green,
+% opacity of the orbitals
+ opacity/.store in = \satom@opacity,
+ opacity/.default = .8,
+% scaling factor
+ scale/.store in = \satom@scale,
+ scale/.default = 1.,
+% execute options
+ pos, name, color, opacity, scale
+}
+
+% atom definition
+\newcommand{\satom}[2][]{
+ \begingroup
+ \pgfkeys{/tikzorbital/satom/.cd, #1}
+ \colorlet{atomColor}{\satom@color}
+ \node[shape = circle, thick, inner sep = 0pt, minimum size = 1.5em,
+ draw = atomColor!40, color = atomColor!70!gray, fill = atomColor!20,
+ scale = \satom@scale]
+ at \satom@pos (\satom@name) {\satom@name};
+ \foreach \acolor/\rot/\anchor/\Ne/\s in {#2} {
+ \@alobe{(\satom@name.\anchor)}{\rot}{1.5*\s*\atom@scale}{\acolor}{\Ne}{\satom@opacity}
+ }
+ \endgroup
+}
+
+%% end of file %%
diff --git a/graphics/pgf/contrib/tikzorbital/tikzorbital.tex b/graphics/pgf/contrib/tikzorbital/tikzorbital.tex
new file mode 100644
index 0000000000..6f1d08ba14
--- /dev/null
+++ b/graphics/pgf/contrib/tikzorbital/tikzorbital.tex
@@ -0,0 +1,558 @@
+\documentclass[10pt]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+
+\usepackage{url}
+\usepackage{xcolor}
+\usepackage[version=3]{mhchem}
+\usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm]{geometry}
+
+\usepackage{tikz}
+\usetikzlibrary{shadows}
+
+\usepackage{palatino}
+\setlength{\parskip}{1.5ex plus 0.5ex minus 0.5ex}
+\setlength{\parindent}{0em}
+\usepackage{setspace}
+\AtBeginDocument{\onehalfspacing}
+
+\usepackage[toc]{multitoc}
+\setlength{\columnsep}{2cm}
+\renewcommand{\columnseprule}{.14pt}
+
+% ------------------------------------------------------------------------------
+% section format
+% ------------------------------------------------------------------------------
+\usepackage{titlesec}
+\titleformat*{\section}{\sffamily\Large\bfseries}
+\titleformat*{\subsection}{\sffamily\large\bfseries}
+\titleformat*{\subsubsection}{\sffamily\bfseries}
+
+% ------------------------------------------------------------------------------
+% listing package
+% ------------------------------------------------------------------------------
+\usepackage{listings}
+\definecolor{keycolor}{RGB}{172, 42, 42}
+
+\lstset{% general command to set parameter(s)
+language=[LaTeX]TeX,
+numbers=left,
+numberstyle=\tiny\color{black!50},
+identifierstyle=,
+basicstyle={\small\color{black!95}\ttfamily},
+stringstyle=,
+keywordstyle=\bfseries\color{keycolor},
+commentstyle=\color{black!50},
+backgroundcolor=,
+emph={ifthenelse,equal,draw,node,tikzstyle,pgfsetlayers,pgfkeys,ProvidesPackage,
+ colorlet,default,store, in, cd, setOrbitalDrawing, orbitalDrawing,
+ path,text,RequirePackage,pgfdeclarelayer,usetikzlibrary,command},
+emphstyle=\bfseries\color{red!60!black},
+emph=[2]{orbital,drawLevel,@alobe},
+emphstyle=[2]\itshape\color{blue!50!black},
+moredelim=[s][\color{green!40!black}]{[}{]},
+}
+
+% ------------------------------------------------------------------------------
+% new float example
+% ------------------------------------------------------------------------------
+\usepackage{float}
+\newfloat{example}{htbp}{exple}[section]
+\floatname{example}{Example}
+
+% ------------------------------------------------------------------------------
+% newcommand
+% ------------------------------------------------------------------------------
+\usepackage{xspace}
+\newcommand*{\cmd}[1]{{\ttfamily\color{blue!50!black}$\setminus$#1}\xspace}
+\newcommand*{\opt}[1]{{\ttfamily\itshape\color{green!60!black}[<#1>]}\xspace}
+\newcommand*{\marg}[1]{{\ttfamily\itshape\color{red!95!black}<#1>}\xspace}
+\newcommand{\package}{\textsc{\sffamily\color{blue!50!black}tikzorbiltal}\xspace}
+
+% ------------------------------------------------------------------------------
+% hyperref
+% ------------------------------------------------------------------------------
+\usepackage{hyperref}
+\hypersetup{% Modifiez la valeur des champs suivants
+pdftex,% Sets up hyperref for use with the pdftex program
+colorlinks=true,% active les liens
+pdfborder={0 0 0},% bordure des liens
+urlcolor=blue!50!black,
+linkcolor=,% Color for normal internal links.
+pdfstartpage=1,% page affichee a l'ouverture du pdf
+pdfauthor={Germain Vallverdu},%
+pdftitle={tikzorbital package},%
+pdfkeywords={latex,orbital,package,tikz},%
+pdfcreator={PDFLaTeX},%
+pdfproducer={PDFLaTeX},%
+}
+
+% ------------------------------------------------------------------------------
+\title{\package Package}
+\author{Germain \textsc{Salvato-Vallverdu} \\ \url{<germain.vallverdu@univ-pau.fr>}\\\url{http://gvallver.perso.univ-pau.fr/}}
+\date{\today}
+
+\usepackage{tikzorbital}
+
+% ------------------------------------------------------------------------------
+\begin{document}
+% ------------------------------------------------------------------------------
+
+\maketitle
+
+\begin{abstract}
+ This package provides several \LaTeX{} macros in order to draw easily molecular diagrams and atomic orbital of type $s$, $p$ and $d$ inside tikzpicture environment. This documentation gives the syntax of the commands and complete examples of their utilization. The source code is give at the end.
+\end{abstract}
+
+{\singlespacing
+\tableofcontents
+}
+
+\section{Requirements and licence}
+
+\package underlies the \LaTeX{} project public license (lppl) version 1.3 or later (\url{http://www.latex-project.org/lppl.txt}). It requires the following packages which all are usually included in standard texlive or MikTex distribution :
+
+\begin{itemize}
+ \item tikz, pgfkeys (part of tikz) and tikz library shapes
+ \item ifthen
+\end{itemize}
+
+Feel, free to send comments, contribution or suggestion by email.
+
+\section{Installation and utilization}
+
+Download the tarball which contains the files \verb!tikzorbital.sty! and \verb!tikzorbital.pdf! which are respectively the package file and its documentation (\url{http://gvallver.perso.univ-pau.fr/}). After extracting the files, copy them to directories where \LaTeX{} will be able to find them. For example, under Linux operating systems :
+
+\begin{lstlisting}
+% for the .sty file
+/home/you/texmf/tex/latex/tikzorbital
+
+% for the pdf documentation file
+/home/you/texmf/doc/latex/tikzorbital
+\end{lstlisting}
+
+Under a macOS operating system the \verb!texmf! directory is not in your home directory but in the \verb!Library! directory.
+
+Package \package do not have any options. After you have copied it in a directory where \LaTeX{} will find it, simply load it as other \LaTeX{} package :
+
+\begin{lstlisting}
+\usepackage{tikzorbital}
+\end{lstlisting}
+
+All macros provided by \package must be uses inside a tikzpicture environment. The \opt{pos} option of the macro is a position which can be given in the tikz syntax.
+
+Options of macros provided by \package must be given in a \texttt{key = value} syntax. For example :
+%
+\begin{lstlisting}
+\command[option 1 = <value1>, option2 = <value2> ...]{argument}
+\end{lstlisting}
+
+\section{Molecular orbital diagrams}
+
+The package \package provides the following command in order to draw easily molecular orbital diagrams :
+
+\cmd{drawLevel}\opt{options}\texttt{\{}\marg{name}\texttt{\}}
+
+This command draw a thick line with zero, one or two electrons which represent the occupation of the orbital and are drew as vertical arrows which indicate the spin of each electron. \marg{name} is the name of the orbital and is used in order to define anchors which could be used in order to draw correlation lines or to add labels (see example \ref{expl:molecular_diagram}). The following anchor are created :
+
+\begin{itemize}
+ \item \texttt{left name} : at the left of the orbital level
+ \item \texttt{right name} : at the right of the orbital level
+ \item \texttt{middle name} : at the middle of the orbital level
+\end{itemize}
+
+The following \opt{options} are available :
+%
+\begin{description}
+ \item \opt{elec} : Number of electrons, \texttt{<value>} must be one of \{\texttt{up, down, updown, pair}\} where \texttt{pair} and \texttt{updown} have got the same effect.\\
+ \texttt{default = no}
+
+ \item \opt{pos} : left position of the level\\
+ \texttt{default = \{(0,0)\}}
+
+ \item \opt{width} : level width\\
+ \texttt{default = 2}
+
+ \item \opt{style} : a set of tikz commands which define the way levels have to be drawn\\
+ \texttt{default = \{line width = 2pt, color = black!80, line cap = round\}}
+
+ \item \opt{spinstyle} : a set of tikz commands which define the way the arrows which represents the electrons have to be drawn\\
+ \texttt{default = \{very thick, color = red!80, -stealth\}}
+
+ \item \opt{spinlength} : length of spin arrows \\
+ \texttt{default = 1}
+\end{description}
+
+Note that if the value of an option contains comma or parenthesis, you should enclose its in curly brace.
+
+Example \ref{expl:molecular_diagram} shows how to use \cmd{drawLevel} for molecule \ce{HHe}.
+
+\begin{example}[h]
+\begin{minipage}{0.6\textwidth}
+\begin{lstlisting}
+\begin{tikzpicture}
+ \drawLevel[elec = up, pos = {(0,0)}, width = 2]{1sH}
+ \drawLevel[elec = updown, pos = {(6,-2)}, width = 2]{1sHe}
+
+ \drawLevel[elec = pair, pos = {(3,-3)}, width = 2]{sigma}
+ \drawLevel[elec = up, pos = {(3,3)}, width = 2]{sigmastar}
+
+ \draw[dashed] (right 1sH) -- (left sigma)
+ (right 1sH) -- (left sigmastar)
+ (left 1sHe) -- (right sigmastar)
+ (left 1sHe) -- (right sigma) ;
+
+ \node[left] at (left 1sH) {\ce{1s_H}} ;
+ \node[right] at (right 1sHe) {\ce{1s_{He}}} ;
+ \node[left] at (left sigma) {$\sigma$};
+ \node[left] at (left sigmastar) {$\sigma^*$};
+\end{tikzpicture}
+\end{lstlisting}
+\end{minipage}
+\hfill
+\begin{minipage}{0.39\textwidth}
+\centering
+\begin{tikzpicture}[scale=0.7]
+ \drawLevel[elec = up, pos = {(0,0)}, width = 2]{1sH}
+ \drawLevel[elec = updown, pos = {(6,-2)}, width = 2]{1sHe}
+
+ \drawLevel[elec = pair, pos = {(3,-3)}, width = 2]{sigma}
+ \drawLevel[elec = up, pos = {(3,3)}, width = 2]{sigmastar}
+
+ \draw[dashed] (right 1sH) -- (left sigma)
+ (right 1sH) -- (left sigmastar)
+ (left 1sHe) -- (right sigmastar)
+ (left 1sHe) -- (right sigma) ;
+
+ \node[left] at (left 1sH) {\ce{1s_H}} ;
+ \node[right] at (right 1sHe) {\ce{1s_{He}}} ;
+ \node[left] at (left sigma) {$\sigma$};
+ \node[left] at (left sigmastar) {$\sigma^*$};
+\end{tikzpicture}
+\end{minipage}
+\caption{Example of the molecular diagram of the molecule \ce{HHe+} drew with the command \cmd{drawLevel}.}
+\label{expl:molecular_diagram}
+\end{example}
+
+\section{Molecular orbitals drawings}
+
+The package \package, provides the command \cmd{orbital} in order to draw atomic orbital $s$, $p$ or $d$. The general syntax is :
+
+\cmd{orbital}\opt{options}\{\marg{type}\}
+
+where \marg{type} is the type of the atomic orbital : \texttt{lobe, s, px, py, pz, dxy, dxz, dyz, dx2y2} or \texttt{dz2}. See example \ref{expl:all_OA} to see all atomic orbital types. The \texttt{lobe} type simply draw one lobe of a $p$ or $d$ atomic orbital and may be used, for example, to draw hybrid orbital. With the \texttt{lobe} type you can also represent electrons as small spheres inside the orbital.
+
+\begin{minipage}{.75\textwidth}
+\begin{lstlisting}
+\begin{tikzpicture}
+ \node (s) {S};
+ \orbital[nelec = 2, scale = 1.5, pos = (s.east)]{lobe}
+\end{tikzpicture}
+\end{lstlisting}
+\end{minipage}
+\begin{minipage}{.25\textwidth}
+\centering
+\begin{tikzpicture}
+ \node (s) {S};
+ \orbital[nelec = 2, scale = 1.5, pos = (s.east)]{lobe}
+\end{tikzpicture}
+\end{minipage}
+
+\subsection*{General options}
+
+The following options, allow to change the position, the aspect and the size the atomic orbital. They are available for all type of atomic orbital. :
+%
+\begin{description}
+ \item \opt{pos} : position of the center of the atomic orbital\\
+ \texttt{default = \{(0,0)\}}
+
+ \item \opt{scale} : scaling factor\\
+ \texttt{default = 1}
+
+ \item \opt{opacity} : opacity of the atomic orbital. Useful if you wish to superimpose atomic orbital\\
+ \texttt{default = 1}
+\end{description}
+
+\subsubsection*{Color options}
+
+The color of atomic orbitals can be selected with options : \opt{pcolor}, \opt{ncolor} or \opt{color}. The options \opt{pcolor} and \opt{ncolor} stand for the positive and the negative lobes of $p$ or $d$-type atomic orbitals. The \opt{color} option define the color of $s$-type or \texttt{lobe}-type orbital. For these types of atomic orbital, if no color is given the \opt{pcolor} is used.
+
+\begin{description}
+ \item \opt{color} : color of the atomic orbital for $s$-type or \texttt{lobe}-type orbital \\
+ \texttt{\opt{pcolor} is used}
+
+ \item \opt{pcolor} : color of the positive lobe (or color for $s$ and $lobe$-type orbital if \opt{color} is not given)\\
+ \texttt{default = blue}
+
+ \item \opt{ncolor} : color of the negative lobe (for $p$ and $d$-type orbital only)\\
+ \texttt{default = black!30}
+\end{description}
+
+\subsubsection*{\texttt{lobe}-type specific options}
+
+The following options will have an effect only for the \texttt{lobe} type :
+
+\begin{description}
+ \item \opt{rotate} : rotation of the atomic orbital\\
+ \texttt{default = 0}
+
+ \item \opt{nelec} : number of electron to draw inside the lobe\\
+ \texttt{default = 0}
+\end{description}
+
+\subsubsection*{examples}
+
+Example \ref{expl:all_OA} shows all atomic orbital types available. In order to decide the type of the atomic orbital you need, look at the axes definition below :
+
+\begin{center}
+\begin{tikzpicture}[scale = 2]
+ \tikzstyle{axe} = [-stealth, thick, color = black!80]
+ \draw[very thick, draw = black!80, fill = white, rounded corners = 1pt, drop shadow] (-.3,-.3) rectangle (1.2,1.821) node (corner) {};
+ \node[below left] at (corner) {paper sheet};
+ \draw[axe] (0,0) -- (1,0) node[below] {$\vec{y}$};
+ \draw[axe] (0,0) -- (0,1) node[left] {$\vec{z}$};
+ \node[circle, fill = black!80, scale = .5] at (0,0) {};
+ \node[circle, draw, color = black!80, thick, scale = 1] {};
+ \node[below left] {$\vec{x}$};
+ \node[left, xshift = -2mm] at (current bounding box.west) {Cartesian axes definition :};
+\end{tikzpicture}
+\end{center}
+
+\begin{example}[htbp]
+\begin{minipage}{.49\textwidth}
+\begin{lstlisting}
+\begin{tikzpicture}
+ \orbital[pos = {(2,5.5)}]{lobe}
+ \node[above] at (2.5,6) {simple lobe};
+
+ \orbital[pos = {(0,5.5)}]{s}
+ \node[above] at (0,6) {s};
+
+ \orbital[pos = {(0,3)}]{px}
+ \node[above] at (0,4) {p$_x$};
+ \orbital[pos = {(2,3)}]{py}
+ \node[above] at (2,4) {p$_y$};
+ \orbital[pos = {(4,3)}]{pz}
+ \node[above] at (4,4) {p$_z$};
+
+ \orbital[pos = {(0,0)}]{-px}
+ \node[above] at (0,1) {-p$_x$};
+ \orbital[pos = {(2,0)}]{-py}
+ \node[above] at (2,1) {-p$_y$};
+ \orbital[pos = {(4,0)}]{-pz}
+ \node[above] at (4,1) {-p$_z$};
+
+ \orbital[pos = {(0,-3)}]{dxy}
+ \node[above] at (0,-2) {d$_{xy}$};
+ \orbital[pos = {(2,-3)}]{dxz}
+ \node[above] at (2,-2) {d$_{xz}$};
+ \orbital[pos = {(4,-3)}]{dyz}
+ \node[above] at (4,-2) {d$_{yz}$};
+
+ \orbital[pos = {(0,-5)}]{dx2y2}
+ \node[below] at (0,-6) {d$_{x^2-y^2}$};
+ \orbital[pos = {(2,-5)}]{dz2}
+ \node[below] at (2,-6) {d$_{z^2}$};
+\end{tikzpicture}
+\end{lstlisting}
+\end{minipage}
+\begin{minipage}{.49\textwidth}
+\centering
+\begin{tikzpicture}
+ \orbital[pos = {(2,5.5)}]{lobe}
+ \node[above] at (2.5,6) {simple lobe};
+
+ \orbital[pos = {(0,5.5)}]{s}
+ \node[above] at (0,6) {s};
+
+ \orbital[pos = {(0,3)}]{px}
+ \node[above] at (0,4) {p$_x$};
+ \orbital[pos = {(2,3)}]{py}
+ \node[above] at (2,4) {p$_y$};
+ \orbital[pos = {(4,3)}]{pz}
+ \node[above] at (4,4) {p$_z$};
+
+ \orbital[pos = {(0,0)}]{-px}
+ \node[above] at (0,1) {-p$_x$};
+ \orbital[pos = {(2,0)}]{-py}
+ \node[above] at (2,1) {-p$_y$};
+ \orbital[pos = {(4,0)}]{-pz}
+ \node[above] at (4,1) {-p$_z$};
+
+ \orbital[pos = {(0,-3)}]{dxy}
+ \node[above] at (0,-2) {d$_{xy}$};
+ \orbital[pos = {(2,-3)}]{dxz}
+ \node[above] at (2,-2) {d$_{xz}$};
+ \orbital[pos = {(4,-3)}]{dyz}
+ \node[above] at (4,-2) {d$_{yz}$};
+
+ \orbital[pos = {(0,-5)}]{dx2y2}
+ \node[below] at (0,-6) {d$_{x^2-y^2}$};
+ \orbital[pos = {(2,-5)}]{dz2}
+ \node[below] at (2,-6) {d$_{z^2}$};
+\end{tikzpicture}
+\end{minipage}
+\caption{All the atomic orbitals available from the command \cmd{orbital}.}
+\label{expl:all_OA}
+\end{example}
+
+\clearpage
+\section{Atom and hybrid orbitals}
+
+The package \package provides the command \cmd{satom} in order to quickly draw an atom with several orbital lobes around it. The general syntax of the command is :
+
+\cmd{satom}\opt{options}\{\marg{lobes}\}
+
+The \marg{lobes} argument is a comma separated list of lobe definition with the syntax
+
+\texttt{color/rotation-angle/anchor/number of electrons/scale}
+
+For each element of the list, the command \cmd{satom} draw a lobe at the given
+anchor, with the given color, rotation, number of electrons and applies the
+scaling factor.
+
+The following options are available in order to customize the drawing :
+
+\begin{description}
+ \item \opt{pos} : position of the atom.\\
+ \texttt{default = \{(0,0)\}}
+
+ \item \opt{name} : name of the atom. Give also the name to the node where the atom is drawn.\\
+ \texttt{default = X}
+
+ \item \opt{color} : color of the atom.\\
+ \texttt{default = green}
+
+ \item \opt{opacity} : opacity of the lobe drawn around the atom.\\
+ \texttt{default = 0.8}
+
+ \item \opt{scale} : A global scaling factor of the whole atom and lobes.\\
+ \texttt{default = 1.}
+\end{description}
+
+For backward compatibility the \cmd{atom} command is still available. It works
+in the same way but without the possibility of applying a scaling factor
+individually on each lobe.
+
+Example \ref{exple:atom} show several applications of the command \cmd{satom}.
+
+\begin{example}[htbp]
+\begin{minipage}{.78\textwidth}
+\begin{lstlisting}
+\begin{tikzpicture}
+ \satom[color=orange, name=S]{orange/0/east/2/1.}
+\end{tikzpicture}
+\end{lstlisting}
+
+\begin{lstlisting}
+\begin{tikzpicture}
+ \atom[name=Cl, color=blue, scale=1.2]{
+ blue/90/north/2,
+ blue/0/east/1,
+ blue/270/south/2,
+ blue/180/west/2}
+ \atom[name=H, color=gray, pos={(1.8,0)}, scale=.8]{gray/180/west/1}
+\end{tikzpicture}
+\end{lstlisting}
+
+\begin{lstlisting}
+\begin{tikzpicture}
+ \satom[name=B, color=green!50!black]{
+ red/90/north/2/.8,
+ blue/0/east/1/.9,
+ orange/270/south/0/1,
+ green/180/west/1/1.2}
+\end{tikzpicture}
+\end{lstlisting}
+\end{minipage}
+\begin{minipage}{.21\textwidth}
+\begin{tikzpicture}
+ \satom[color=orange, name=S]{orange/0/east/2/1.}
+
+ \atom[name=Cl, color=blue, pos={(0,-3)}, scale=1.2]{
+ blue/90/north/2,
+ blue/0/east/1,
+ blue/270/south/2,
+ blue/180/west/2}
+ \atom[name=H, color=gray, pos={(1.8,-3)}, scale=.8]{gray/180/west/1}
+
+ \satom[name=B, color=green!50!black, pos={(0,-7)}]{
+ red/90/north/2/.8,
+ blue/0/east/1/0.9,
+ orange/270/south/0/1,
+ green/180/west/1/1.2}
+\end{tikzpicture}
+\end{minipage}
+\caption{Utilization example of the \cmd{satom} command.}
+\label{exple:atom}
+\end{example}
+
+\clearpage
+\section{More customization}
+
+\subsubsection*{Orbital borders and inner color}
+
+It is possible to change the inner color of orbital and the color of orbital borders. These two colors are defined as follow in \package package :
+
+\begin{lstlisting}
+% inner color for orbital filling
+\colorlet{innerColor}{black!10}
+% color for orbital drawing
+\colorlet{drawColor}{black!80}
+\end{lstlisting}
+
+Thus if you change the definition of these colors you will change the desired color on the drawing of the atomic orbitals.
+
+\subsubsection*{Orbital customization}
+
+You can give a set of tikz options to the command \cmd{setOrbitalDrawing}. This command acts as a tikz style which is applied every time an atomic orbital is drawn. All options give in this command will overwrite default style of atomic orbital. For example, if you want to draw atomic orbital in red with very thick line thickness :
+
+\begin{lstlisting}
+\setOrbitalDrawing{{very thick, color = red}}
+\end{lstlisting}
+
+\subsubsection*{Change default value globally with pgfkeys}
+
+If you want to change the default value of the \opt{width} option of the \cmd{drawLevel} command or whatever other option for a whole tikzpicture, you can do this using the \lstinline!\pgfkeys! command. You simply have to give to this command one or several options you want to set globally.
+
+All options of a \package's command follow the tree : \texttt{/tikzorbital/command/option}. For example, if you want to change the \opt{width} option of the \cmd{drawLevel} command, you have to write :
+%
+\begin{lstlisting}
+\pgfkeys{tikzorbital/drawLevel/width = 1}
+% or
+\pgfkeys{tikzorbital/drawLevel/.cd, width = 1}
+\end{lstlisting}
+
+\section{Inner macro \cmd{@alobe}}
+
+In order to draw atomic orbital, \package use the inner macro \cmd{@alobe}.
+
+\cmd{@alobe}\{\marg{pos}\}\{\marg{rotation}\}\{\marg{scale}\}\{\marg{color}\}\{\marg{nelec}\}\{\marg{opacity}\}
+
+\cmd{@alobe} macro draw one lobe of $p$ or $d$ orbital and corresponds to the \texttt{lobe} type of \cmd{orbital} (see above). \cmd{@alobe} accepts six arguments :
+
+\begin{enumerate}
+ \item[\#1] the position
+ \item[\#2] angle of rotation
+ \item[\#3] scaling factor
+ \item[\#4] the color
+ \item[\#5] the number of electron, namely 0, 1 or 2
+ \item[\#6] the opacity of the lobe
+\end{enumerate}
+%
+no default are given. For example, the $d_{yz}$ atomic orbital is defined as follow
+
+\begin{lstlisting}
+\@alobe{\orbital@pos}{45}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+\@alobe{\orbital@pos}{135}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+\@alobe{\orbital@pos}{225}{\orbital@scale}{\orbital@pcolor}{0}{\orbital@opacity}
+\@alobe{\orbital@pos}{315}{\orbital@scale}{\orbital@ncolor}{0}{\orbital@opacity}
+\end{lstlisting}
+
+\section{Source code}
+
+\lstinputlisting{./tikzorbital.sty}
+
+\end{document}
diff --git a/graphics/pgf/contrib/tikzpagenodes/README b/graphics/pgf/contrib/tikzpagenodes/README
new file mode 100644
index 0000000000..2f219ad7ea
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpagenodes/README
@@ -0,0 +1,21 @@
+LaTeX package 'tikzpagenodes'
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Copyright (c) 2011 by Martin Scharrer <martin@scharrer.me>
+WWW: http://latex.scharrer.me/
+CTAN: http://www.ctan.org/pkg/tikzpagenodes
+Code repository: https://bitbucket.org/martin_scharrer/tikzpagenodes
+
+This LaTeX package provides specials PGF/TikZ nodes for the text, marginpar,
+footer and header area of the current page. They are inspired by the special
+'current page' node defined by PGF/TikZ itself.
+
+The nodes are rectangular and have the following names:
+
+ current page text area
+ current page marginpar area
+ current page header area
+ current page footer area
+
+In order to use these nodes a TikZ picture needs to use the 'remember picture' option
+and be compiled twice.
+
diff --git a/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.dtx b/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.dtx
new file mode 100644
index 0000000000..4192608102
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.dtx
@@ -0,0 +1,336 @@
+% \iffalse meta-comment
+%<=*COPYRIGHT>
+%% Copyright (C) 2011-2012 by Martin Scharrer <martin@scharrer-online.de>
+%% ----------------------------------------------------------------------
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Martin Scharrer.
+%%
+%% This work consists of the files tikzpagenodes.dtx and tikzpagenodes.ins
+%% and the derived filebase tikzpagenodes.sty.
+%%
+%<=/COPYRIGHT>
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{tikzpagenodes.dtx}[%
+%<=*DATE>
+ 2012/09/16
+%<=/DATE>
+%<=*VERSION>
+ v1.1
+%<=/VERSION>
+ DTX file for tikzpagenodes package]
+\documentclass{ydoc}
+\GetFileInfo{tikzpagenodes.dtx}
+\usepackage{tikzpagenodes}[\filedate]
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{tikzpagenodes.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{308}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \changes{v1.0}{2011/09/15}{First version.}
+% \changes{v1.1}{2012/09/16}{Corrected positions of 'marginpar area' nodes.}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \providecommand*{\url}{\texttt}
+% \GetFileInfo{tikzpagenodes.dtx}
+% \title{The \textsf{tikzpagenodes} package}
+% \author{Martin Scharrer\\ \url{martin@scharrer.me}}
+% \repository{https://bitbucket.org/martin_scharrer/tikzpagenodes}
+%
+% \maketitle
+% \section{Introduction}
+% The drawing bundle PGF/TikZ provides a special rectangle node \texttt{current page} which allows users to access all edges and the center of the current page.
+% This is useful if material should be drawn or placed on absolute positions of the page.
+% For this to work the \texttt{tikzpicture} need to use the \texttt{remember picture} option to remember its position relative to the page origin.
+%
+% Often material should also be drawn or placed relative to other areas of the page, e.g.\ the text area.
+% Such a node can be defined manually as shown in the post \href{http://permalink.gmane.org/gmane.comp.tex.pgf.user/2078}{More special nodes} on the \texttt{pgf-users} list.
+% This package was written to simplify this by providing real special nodes which are defined in the same way as \texttt{current page}.
+% One difficulty is that in \texttt{twoside} mode odd and even pages have different margins. For this the author's other package \texttt{ifoddpage} is used.
+%
+% \section{Usage}
+% The provided nodes can be used in all \env{tikzpicture}s which use the \texttt{remember picture} option. In the majority of the cases the option \texttt{overlay} should also be used
+% to avoid that the picture reserves any space at the position its code is placed.
+%
+% The following special nodes are provided. They are rectangle in shape, possess all anchors of this shape:
+%
+% \par\medskip\par\noindent
+% \begin{minipage}{\textwidth}
+% \begin{tabular}{>{\ttfamily}ll}
+% \toprule
+% \normalfont Node & Description \\
+% \midrule
+% current page text area & Text area\footnote{Up to the baseline of the text area, i.e.\ the depth of the last line is not included} \small(\Macro\textwidth\relax$\times$\Macro\textheight) \\
+% current page marginpar area & Marginpar area \small(\Macro\marginparwidth\relax$\times$\Macro\textheight) \\
+% current page header area & Header area \small(\Macro\textwidth\relax$\times$\Macro\headerheight) \\
+% current page footer area & Footer area \small(\Macro\textwidth\relax$\times$\Macro\headerheight
+% \footnote{Officially there is no footer height. Its baseline has a distance of \Macro\footerskip from the baseline of the text area.
+% Because using this value would make the upper edge equal to the lower edge of the text area node, the \Macro\headerheight is used as a decent replacement.}) \\
+% \bottomrule
+% \end{tabular}
+% \end{minipage}
+%
+%
+% \clearpage
+% \section{Examples}
+%
+% \begin{examplecode}
+% \tikz[remember picture,overlay] {%
+% \draw [blue,line width=2mm]
+% (current page.south west)
+% rectangle
+% (current page.north east)
+% ;
+% \draw [green]
+% (current page text area.south west)
+% rectangle
+% (current page text area.north east)
+% ;
+% \draw [yellow]
+% (current page marginpar area.south west)
+% rectangle
+% (current page marginpar area.north east)
+% ;
+% \draw [red]
+% (current page header area.south west)
+% rectangle
+% (current page header area.north east)
+% ;
+% \draw [orange]
+% (current page footer area.south west)
+% rectangle
+% (current page footer area.north east)
+% ;
+% }%
+% \end{examplecode}
+%
+%
+% \StopEventually{}
+%
+% \clearpage
+% \section{Implementation}
+%
+% \iffalse
+%<*tikzpagenodes.sty>
+% \fi
+% \begin{macrocode}
+%<!COPYRIGHT>
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tikzpagenodes}[%
+%<!DATE>
+%<!VERSION>
+%<*DRIVER>
+ 2099/01/01 develop
+%</DRIVER>
+ Special PGF/TikZ nodes for areas of the page]
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\RequirePackage{tikz}
+\RequirePackage{ifoddpage}
+% \end{macrocode}
+%
+% \subsection{Different margins for odd and even pages in \texttt{twoside} mode}
+%
+% Update the page conditional for every picture which uses \texttt{remember picture}.
+% \begin{macrocode}
+\tikzset{every picture/.append style={execute at begin picture={%
+ \ifpgfrememberpicturepositiononpage
+ \checkoddpage
+ \fi
+}}}
+% \end{macrocode}
+%
+% \begin{macro}{\currentsidemargin}
+% Expands to the current left side margin, i.e. \Macro\oddsidemargin for odd pages in |twoside| mode and all pages in |oneside| mode
+% or \Macro\evensidemargin for even pages in |twoside| mode.
+% \begin{macrocode}
+\def\currentsidemargin{\ifoddpageoroneside\oddsidemargin\else\evensidemargin\fi}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Often used lengths}
+%
+% \begin{macro}{\current@textarea@left}
+% Complete left margin including 1in constant and offset. This value is used multiple times and therefore stored in macro.
+% \begin{macrocode}
+\def\current@textarea@left{(1in+\hoffset+\currentsidemargin)}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\current@textarea@top}
+% Complete top margin including 1in constant, offset and header. This value is used multiple times and therefore stored in macro.
+% \begin{macrocode}
+\def\current@textarea@top{(1in+\voffset+\topmargin+\headheight+\headsep)}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Node Definition Macro}
+% Most required macros can be |\let| to the |current page| node.
+% \begin{macrocode}
+\def\@newtikzpagenode#1{%
+ \expandafter\let\csname pgf@sh@ns@#1\expandafter\endcsname\csname pgf@sh@ns@current page\endcsname
+ \expandafter\let\csname pgf@sh@nt@#1\expandafter\endcsname\csname pgf@sh@nt@current page\endcsname
+ \expandafter\let\csname pgf@sh@pi@#1\expandafter\endcsname\csname pgf@sh@pi@current page\endcsname
+ \expandafter\def\csname pgf@sh@np@#1\endcsname
+}
+% \end{macrocode}
+%
+% \subsection{Current Page Text Area Node}
+% \begin{macrocode}
+\@newtikzpagenode{current page text area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+\textwidth}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+%
+% \subsection{Current Page Marginpar Area Node}
+% \begin{macrocode}
+\@newtikzpagenode{current page marginpar area}{%
+ \def\southwest{\pgfpoint
+ {\current@textarea@left\ifoddpageoroneside+\textwidth+\marginparsep\else-\marginparsep-\marginparwidth\fi}%
+ {\paperheight-\current@textarea@top-\textheight}%
+ }%
+ \def\northeast{\pgfpoint
+ {\current@textarea@left\ifoddpageoroneside+\textwidth+\marginparsep+\marginparwidth\else-\marginparsep\fi}%
+ {\paperheight-\current@textarea@top}%
+ }%
+}
+% \end{macrocode}
+%
+%
+% \subsection{Current Page Header Area Node}
+% \begin{macrocode}
+\@newtikzpagenode{current page header area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left}{\paperheight-\current@textarea@top+\headsep}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+\textwidth}{\paperheight-\current@textarea@top+\headsep+\headheight}}%
+}
+% \end{macrocode}
+%
+%
+% \subsection{Current Page Footer Area Node}
+% \begin{macrocode}
+\@newtikzpagenode{current page footer area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left}{\paperheight-\current@textarea@top-\textheight-\footskip}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+\textwidth}{\paperheight-\current@textarea@top-\textheight-\footskip+\headheight}}%
+}
+% \end{macrocode}
+%
+% \subsection{Current Page Column Areas}
+% \begin{macrocode}
+\@newtikzpagenode{current page column 1 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+\columnwidth}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 2 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+\columnwidth+\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+2\columnwidth+\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 3 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+2\columnwidth+2\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+3\columnwidth+2\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 4 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+3\columnwidth+3\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+4\columnwidth+3\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 5 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+4\columnwidth+4\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+5\columnwidth+4\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 6 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+5\columnwidth+5\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+6\columnwidth+5\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 7 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+6\columnwidth+6\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+7\columnwidth+6\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 8 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+7\columnwidth+7\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+8\columnwidth+7\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 9 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+8\columnwidth+8\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+9\columnwidth+8\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@newtikzpagenode{current page column 10 area}{%
+ \def\southwest{\pgfpoint{\current@textarea@left+9\columnwidth+9\columnsep}{\paperheight-\current@textarea@top-\textheight}}%
+ \def\northeast{\pgfpoint{\current@textarea@left+10\columnwidth+9\columnsep}{\paperheight-\current@textarea@top}}%
+}
+% \end{macrocode}
+%
+% \iffalse
+%</tikzpagenodes.sty>
+% \fi
+%
+% \Finale
+% \endinput
diff --git a/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.ins b/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.ins
new file mode 100644
index 0000000000..ec542b22e4
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.ins
@@ -0,0 +1,10 @@
+% See file 'tikzpagenodes.dtx' for copyright and licence.
+%
+\input ydocstrip.tex
+\keepsilent
+\askforoverwritefalse
+\generate{%
+ \file{tikzpagenodes.sty}{\nopreamble\from{tikzpagenodes.dtx}{tikzpagenodes.sty}}%
+}
+\endbatchfile
+% vim: ft=tex
diff --git a/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.pdf b/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.pdf
new file mode 100644
index 0000000000..2beb7a7aeb
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpagenodes/tikzpagenodes.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzpeople/README.md b/graphics/pgf/contrib/tikzpeople/README.md
new file mode 100644
index 0000000000..2212bd1a8c
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/README.md
@@ -0,0 +1,27 @@
+The tikzpeople package provides people shaped nodes to be used in tikz.
+The available node shapes are:
+
+alice, bob, bride, builder, businessman, charlie, chef, conductor, cowboy,
+criminal, dave, devil, duck, graduate, groom, guard, jester, judge, maninblack,
+mexican, nun, nurse, physician, pilot, police, priest, sailor, santa, surgeon
+
+The package has four options:
+- The "draft" option causes all tikzpeople to be rendered as a basic outline
+ of a person.
+- The "demo" option adds two commands.
+ The command \alltikzpeople{<width>}{<options>} produces a series of figures
+ of all available shapes with the given width and the provided options
+ applied. The command \tikzpeoplecolors{<shapename>} produces a figure
+ showing the available color keys for the shape.
+- The "nonbeards" option removes all beards.
+- The "saturated" option causes the tikzpeople to be drawn with saturated colors.
+
+The nodes have the following hopefully self explanatory options:
+
+evil, good, female, mirrored, monitor, saturated, shield, sword
+
+All options can be combined freely.
+
+The tikzpeople package is licensed under the LaTeX Project Public License
+
+ -- Nils Fleischhacker <mail@nilsfleischhacker.de> 22 Apr 2017
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.pdf b/graphics/pgf/contrib/tikzpeople/tikzpeople.pdf
new file mode 100644
index 0000000000..f942fc5ffa
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.alice.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.alice.sty
new file mode 100644
index 0000000000..a2aff75471
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.alice.sty
@@ -0,0 +1,73 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+
+\newcommand{\tikzpeople@alice@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@alice@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@alice@painthair
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@alice@painthair}{
+ \draw[hair]
+ (15:3pt) arc (15:160:3pt) arc (160:190:5pt)
+ to[out=280,in=190,in looseness=.5,out looseness=.7] (230:2.9pt)
+ to[out=120,in=120,looseness=2] (-1.7pt,-1pt)
+ to[out=60,in=170,out looseness=2,in looseness=.75] (-1pt,0.3pt)
+ to [out=350,in=200,out looseness=1.5,in looseness=.75] (15:3pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@alice@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[shirt,shading angle=-45]
+ (2pt,-8.7pt) -- ++(-3.8pt,3.8pt) -- ++(2.5pt,1.5pt)--cycle;
+ \draw[shirt,shading angle=-45]
+ (2pt,-8.7pt) -- ++(1.2pt,4.7pt) -- ++(-2.4pt,.3pt)--cycle;
+ \end{scope}
+ \fill[color=\tikzpeople@shirt!40!black]
+ (230:3pt) ++(0pt,-2pt)
+ to[out=359,in=101, in looseness=1.5, out looseness=1.1] ++(3.8pt,-4pt) --
+ ++(-.8pt,4pt);
+ \draw[undershirt]
+ (230:3pt) to[out=230,in=100] ++(0pt,-2pt) to[out=0,in=110] ++(3.4pt,-2pt)
+ to[out=70,in=190] ++(1.7pt,2.7pt) to[out=100,in=340] (310:3pt);
+ \draw[skin]
+ (250:3pt) to[out=330,in=110] (1.4pt,-5.7pt)
+ to[out=80,in=269, out looseness=1.5] (305:3pt);
+}
+
+\newcommand{\tikzpeople@alice@definecolors}{
+ \definecolor{shirt}{RGB}{253,156,40}
+ \definecolor{undershirt}{RGB}{232,232,232}
+ \definecolor{skin}{RGB}{148,60,19}
+ \definecolor{hair}{rgb}{0,0,0}
+}
+\newcommand{\tikzpeople@alice@definestyles}{
+}
+
+\newcommand{\tikzpeople@alice@colors}{
+ shirt/340/{1/-.75}, hair/160/{-.65/1}, skin/20/{.25/.6},
+ details/200/{-.45/-.2}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bob.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bob.sty
new file mode 100644
index 0000000000..e68e8016ce
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bob.sty
@@ -0,0 +1,92 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{pearls}
+
+\newcommand{\tikzpeople@bob@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@bob@paintundershirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@bob@painthair
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@bob@definecolors}{
+ \definecolor{shirt}{RGB}{98,98,98}
+ \definecolor{pearls}{RGB}{252,137,172}
+ \definecolor{undershirt}{rgb}{0.9,0.9,0.9}
+}
+
+\newcommand{\tikzpeople@bob@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ pearls/.style={top color=\tikzpeople@pearls!70,bottom color=\tikzpeople@pearls,shading angle=-45}
+ }
+ \else
+ \tikzset{
+ pearls/.style={top color=\tikzpeople@pearls!40,bottom color=\tikzpeople@pearls!80,shading angle=-45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@bob@painthair}{
+ \if@tikzpeople@female
+ \draw[hair,shading angle=\if@tikzpeople@mirrored45\else-45\fi]
+ (0:3.1pt) arc (0:120:3.1pt) -- (60:.8pt) to [out=30,in=130]
+ (0:3.1pt) -- cycle;
+ \draw[hair,line join=bevel,shading angle=\if@tikzpeople@mirrored-90\else90\fi]
+ (120:3.1pt) arc (120:210:3.1pt) to[out=300,in=155,looseness=1] (235:3pt)
+ to [out=120,in=160,looseness=1.5] (60:.80pt) -- (120:3.1pt) -- cycle;
+ \else
+ \draw[hair, shading angle=\if@tikzpeople@mirrored45\else-45\fi]
+ (25:3.1pt) arc (25:120:3.1pt) -- (60:.8pt) to [out=30,in=170]
+ (25:3.1pt) -- cycle;
+ \draw[hair,line join=bevel,shading angle=\if@tikzpeople@mirrored-90\else90\fi]
+ (120:3.1pt) arc (120:190:3.1pt) to[out=283,in=210,looseness=.5]
+ (220:3pt) arc (300:405:.1pt) to[out=135,in=150,looseness=2]
+ (-1.7pt,-.6pt) to [out=90,in=180,looseness=1.5] (60:.80pt) --
+ (120:3.1pt) -- cycle;
+ \fi
+}
+
+\newcommand{\tikzpeople@bob@paintundershirt}{
+ \begin{scope}
+ \clip
+ (-1.9pt,-1pt) to[out=290,in=130,looseness=.75]
+ (2pt,-7.8pt) to[out=80,in=280,looseness=.75] (1.9pt,-1pt);
+ \draw[undershirt]
+ (-1.9pt,-1pt) to[out=290,in=130,looseness=.75]
+ (2pt,-7.8pt) to[out=80,in=280,looseness=.75] (1.9pt,-1pt);
+ \draw[skin]
+ (245:2.9pt) to[out=300,in=270,looseness=1.5] (311:3pt) -- cycle;
+ \draw[color=\tikzpeople@shirt\if@tikzpeople@saturated\else!80\fi]
+ (-1.9pt,-1pt) to[out=290,in=130,looseness=.75]
+ (2pt,-7.8pt) to[out=80,in=280,looseness=.75] (1.9pt,-1pt);
+ \if@tikzpeople@female
+ \path[postaction={decorate},decoration={
+ markings,
+ mark=between positions 0.04 and 1 step 0.06 with {\pgftransformscale{\scalingfactor}\fill[pearls] (0pt,0pt) circle (.1pt);}}]
+ (245:2.9pt) to[out=300,in=270,looseness=1.8] (311:3pt);
+ \fi
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@bob@colors}{
+ shirt/200/{-1/-.6}, hair/160/{-.65/1}, skin/20/{.25/.4},
+ undershirt/340/{.15/-.4}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bride.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bride.sty
new file mode 100644
index 0000000000..9aa1e21d4f
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.bride.sty
@@ -0,0 +1,117 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{pearls}
+\tikzpeople@addcolorkey{veil}
+
+\newcommand{\tikzpeople@bride@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@bride@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@bride@paintveilright
+ \tikzpeople@person@painthead
+ \tikzpeople@person@paintfemalehairstylethree
+ \tikzpeople@bride@paintveilleft
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@bride@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+ \draw[skin,color=\tikzpeople@shirt!80]
+ (240:3pt) .. controls +(315:4pt) and +(270:4pt) .. (316:3.1pt) -- cycle;
+ \path[postaction={decorate},decoration={
+ markings,
+ mark=between positions 0.04 and 1 step 0.09 with {\pgftransformscale{\scalingfactor}\fill[pearls] (0pt,0pt) circle (.2pt);},
+ mark=at position 0.58 with {\pgftransformscale{\scalingfactor}\fill[pearls] (216:.5pt) circle (.2pt) ++(288:.5pt) circle (.2pt) ++(0:.5pt) circle (.2pt) ++(72:.5pt) circle (.2pt);}}]
+ (240:3.4pt) .. controls +(315:4pt) and +(270:4pt) .. (316:3.5pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@bride@paintveilright}{
+ \begin{scope}
+ \pgftransformshift{\pgfpointpolar{20}{3pt}}
+ \pgftransformrotate{25}
+ \fill[veil] (0,0) -- ++(.5pt,-2.5pt) arc (80:140:.7pt) arc (60:120:.7pt) arc (40:100:.7pt) -- ++(.5pt,2.5pt) --cycle;
+ \pgftransformshift{\pgfpoint{-.5pt}{0pt}}
+ \pgftransformrotate{-17}
+ \fill[veil] (0,0) -- ++(.5pt,-2.5pt) arc (80:140:.7pt) arc (60:120:.7pt) arc (40:100:.7pt) -- ++(.5pt,2.5pt) --cycle;
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@bride@paintveilleft}{
+ \begin{scope}
+ \fill[veil]
+ (-1.3pt,.6pt) -- ++(.5pt,-2.5pt) arc (80:140:.7pt) arc (60:120:.7pt) arc
+ (40:100:.7pt) -- ++(.5pt,2.5pt) --cycle;
+ \pgftransformshift{\pgfpoint{-.5pt}{-.4pt}}
+ \pgftransformrotate{-17}
+ \fill[veil]
+ (-1.3pt,.6pt) -- ++(.5pt,-2.5pt) arc (80:140:.7pt) arc (60:120:.7pt) arc
+ (40:100:.7pt) -- ++(.5pt,2.5pt) --cycle;
+ \pgftransformshift{\pgfpoint{-.5pt}{-.4pt}}
+ \pgftransformrotate{-17}
+ \fill[veil]
+ (-1.3pt,.6pt) -- ++(.5pt,-2.5pt) arc (80:140:.7pt) arc (60:120:.7pt) arc
+ (40:100:.7pt) -- ++(.5pt,2.5pt) --cycle;
+ \pgftransformshift{\pgfpoint{-.5pt}{-.4pt}}
+ \pgftransformrotate{-17}
+ \fill[veil]
+ (-1.3pt,.6pt) -- ++(.5pt,-2.5pt) arc (80:140:.7pt) arc (60:120:.7pt) arc
+ (40:100:.7pt) -- ++(.5pt,2.5pt) --cycle;
+ \pgftransformshift{\pgfpoint{-.5pt}{-.4pt}}
+ \pgftransformrotate{-17}
+ \fill[veil]
+ (-1.3pt,.6pt) -- ++(.5pt,-2.5pt) arc (80:140:.7pt) arc (60:120:.7pt) arc
+ (40:100:.7pt) -- ++(.5pt,2.5pt) --cycle;
+ \end{scope}
+ \path[postaction={decorate},decoration={markings,
+ mark=between positions 0.1 and 1 step 0.27 with {\pgftransformscale{\scalingfactor}
+ \fill[pearls]
+ (0,.3pt) circle (.2pt) ++(216:.5pt) circle (.2pt) ++(288:.5pt) circle
+ (.2pt) ++(0:.5pt) circle (.2pt) ++(72:.5pt) circle (.2pt);
+ }}]
+ (150:3.3pt) to [out=330,in=210] (35:3pt);
+}
+
+\newcommand{\tikzpeople@bride@definecolors}{
+ \definecolor{shirt}{RGB}{236,240,255}
+ \definecolor{pearls}{rgb}{.96,.96,1}
+ \definecolor{undershirt}{rgb}{.8,.8,.8}
+ \definecolor{veil}{RGB}{179,196,228}
+}
+\newcommand{\tikzpeople@bride@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ veil/.style ={color=\tikzpeople@veil!80!white,opacity=0.3},
+ pearls/.style={top color=\tikzpeople@pearls!70,bottom color=\tikzpeople@pearls,shading angle=-45}
+ }
+ \else
+ \tikzset{
+ veil/.style ={color=\tikzpeople@veil!50!white,opacity=0.3},
+ pearls/.style={top color=\tikzpeople@pearls!40,bottom color=\tikzpeople@pearls!80,shading angle=-45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@bride@colors}{
+ shirt/200/{-1/-.75}, veil/170/{-1.2/.8}, hair/150/{-.4/1.6}, skin/30/{.6/.8},
+ pearls/340/{0/.97,.47/-.46}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.builder.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.builder.sty
new file mode 100644
index 0000000000..8ff6d9e789
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.builder.sty
@@ -0,0 +1,80 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{trousers}
+
+\newcommand{\tikzpeople@builder@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@builder@painttrousers
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthairstyletwo
+ \tikzpeople@builder@painthat
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@builder@painttrousers}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+ \draw[skin] (200:3.5pt) arc (200:330:4pt);
+ \draw[trousers]
+ (225:6pt) .. controls +(310:2pt) and +(250:3pt) ..
+ (320:6pt) -- ++(2pt,-6pt) -- ++(-12pt,0) -- cycle;
+ \draw[trousers]
+ (225:3pt) to[out=320,in=100] ++(300:5.5pt) -- ++(-1pt,-1pt) --
+ ++(-.9pt,.4pt) to[out=100,in=320] ++(120:5.5pt) -- cycle;
+ \end{scope}
+ \draw[trousers]
+ (280:2pt) to[out=320,in=100] ++(295:5pt) -- ++(1pt,-.4pt) --
+ ++(.6pt,1pt) to[out=100,in=320] ++(118:5.5pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@builder@painthat}{
+ \draw[hat]
+ (160:3.5pt) to[out=320,in=170] (0,0) -- ++(1pt,-.5pt) arc(270:310:5pt) --
+ ++(-.9pt,.5pt) .. controls +(95:3pt) and +(80:4pt) .. (160:3.5pt);
+ \draw[color=\tikzpeople@hat] (0,0) arc(270:305:6pt);
+ \draw[color=\tikzpeople@hat] (1.2pt,0.2pt) arc (0:70:2.8pt) -- ++(160:1.2pt);
+ \draw[color=\tikzpeople@hat] (2.2pt,0.5pt) arc (0:70:2.8pt) -- ++(159:1.5pt);
+ \draw[color=\tikzpeople@hat] (3pt,.9pt) arc (0:70:2.8pt) -- ++(160:.5pt);
+}
+
+\newcommand{\tikzpeople@builder@definecolors}{
+ \definecolor{shirt}{RGB}{232,232,232}
+ \definecolor{hat}{RGB}{238,175,0}
+ \definecolor{trousers}{RGB}{33,81,171}
+ \definecolor{hair}{rgb}{0,0,0}
+}
+\newcommand{\tikzpeople@builder@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ trousers/.style={color=\tikzpeople@trousers,top color=\tikzpeople@trousers!70, bottom color=\tikzpeople@trousers,shading angle=45}
+ }
+ \else
+ \tikzset{
+ trousers/.style={color=\tikzpeople@trousers!80,top color=\tikzpeople@trousers!60, bottom color=\tikzpeople@trousers!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@builder@colors}{
+ trousers/200/{-.8/-.95}, hat/160/{-.35/1.4}, skin/20/{.5/.6},
+ hair/180/{-.7/.8}, shirt/340/{.3/-.3}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.businessman.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.businessman.sty
new file mode 100644
index 0000000000..33e61374ad
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.businessman.sty
@@ -0,0 +1,104 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{tie}
+\tikzpeople@addcolorkey{monogram}
+\tikzpeople@addtextkey{monogramtext}{BP}
+
+\newcommand{\tikzpeople@businessman@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@businessman@paintundershirt
+ \tikzpeople@businessman@paintopenshirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@businessman@definecolors}{
+ \definecolor{shirt}{rgb}{0.12,0.39,0.14}
+ \definecolor{undershirt}{rgb}{0.9,0.9,0.9}
+ \definecolor{tie}{rgb}{0.5,0.1,0.1}
+ \definecolor{monogram}{rgb}{0,0,0.5}
+}
+
+\newcommand{\tikzpeople@businessman@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ tie/.style={color=\tikzpeople@tie,top color=\tikzpeople@tie!70, bottom color=\tikzpeople@tie,shading angle=45}
+ }
+ \else
+ \tikzset{
+ tie/.style={color=\tikzpeople@tie!80,top color=\tikzpeople@tie!40, bottom color=\tikzpeople@tie!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@businessman@paintundershirt}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[undershirt]
+ (-2.2pt,-1pt) -- (2pt,-8.5pt) -- (2pt,-1pt);
+ \draw[tie]
+ (0 pt,-2.5pt) -- (0.8pt,-3.2pt) -- (1.1pt,-6 pt) -- (1.7pt,-8.7pt) --
+ (2pt,-8.7pt) -- (2 pt,-5.5pt) -- (1 pt,-3.1pt) -- (1.2pt,-2 pt) --
+ (0.3pt,-2 pt);
+ \draw[undershirt,shading angle=-45]
+ (0.5pt,-3pt) -- (0.1pt,-3.7pt) -- (-1pt,-3pt);
+ \draw[undershirt,shading angle=-45]
+ (0.9pt,-2.5pt) -- (1.8pt,-3.2pt) -- (2.2pt,-2.2pt);
+ \end{scope}
+ {
+ \pgftransformrotate{20}
+ \pgf@xa=0.5pt*\scalingfactor
+ \if@tikzpeople@mirrored
+ \pgftransformxscale{-1}
+ \pgftext[at=\pgfpoint{1pt}{-4pt}]{\resizebox{\pgf@xa}{!}{\color{\tikzpeople@monogram}{$\mathcal{\tikzpeople@monogramtext}$}}}
+ \else
+ \pgftext[at=\pgfpoint{0.3pt}{-4pt}]{\resizebox{\pgf@xa}{!}{\color{\tikzpeople@monogram}{$\mathcal{\tikzpeople@monogramtext}$}}}
+ \fi
+ }
+}
+
+\newcommand{\tikzpeople@businessman@paintopenshirt}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[shirt,shading angle=-45]
+ (-2pt,-2.6 pt) -- (-1.5pt,-5pt) -- (-0.5pt,-5pt) -- (-1.1pt,-5.2pt) --
+ (1.6pt,-8.75pt) -- (1.9pt,-8.75pt) .. controls (1.7pt,-7pt) and
+ (-0pt,-3.2pt) .. (-1.6pt,-2pt) -- cycle;
+ \draw[shirt,shading angle=-45]
+ (1.9pt,-2pt) .. controls (1.9pt,-1.8pt) and (1.9pt,-8.5pt) ..
+ (1.9pt,-8.75pt) -- (2.3pt,-8.5pt) -- (3.2pt,-5.2pt) --
+ (2.6pt,-5.2 pt) -- (3.2pt,-5 pt) -- (2.3pt,-2.3pt) -- cycle;
+ \end{scope}
+ \draw[color=\tikzpeople@shirt!80]
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4pt,-8pt);
+}
+
+\newcommand{\tikzpeople@businessman@colors}{
+ shirt/200/{-1/-.75}, hair/150/{-.4/1.3}, skin/30/{.5/.8},
+ undershirt/180/{0/-.2}, tie/330/{.32/-.7}, monogram/0/{.3/-.17}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.charlie.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.charlie.sty
new file mode 100644
index 0000000000..b03281da10
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.charlie.sty
@@ -0,0 +1,125 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{buttons}
+
+\newcommand{\tikzpeople@charlie@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@charlie@paintundershirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@charlie@painthair
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@charlie@definecolors}{
+ \definecolor{hair}{RGB}{107,68,35}
+ \definecolor{shirt}{RGB}{0,100,105}
+ \definecolor{buttons}{RGB}{128,70,27}
+}
+
+\newcommand{\tikzpeople@charlie@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ collar/.style ={color=\tikzpeople@shirt!70,inner color=\tikzpeople@shirt!50, outer color=\tikzpeople@shirt!50},
+ buttons/.style={color=\tikzpeople@buttons,inner color=\tikzpeople@buttons!80, outer color=\tikzpeople@buttons}
+ }
+ \else
+ \tikzset{
+ collar/.style ={color=\tikzpeople@shirt!30,inner color=\tikzpeople@shirt!10, outer color=\tikzpeople@shirt!30},
+ buttons/.style={color=\tikzpeople@buttons!80,inner color=\tikzpeople@buttons!60, outer color=\tikzpeople@buttons!80}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@charlie@painthair}{
+ \if@tikzpeople@female
+ \draw[hair,shading angle=-45]
+ (340:3pt) arc (-20:120:3pt) -- (120:1.4pt) to [out=300,in=90,in looseness=2]
+ (340:3pt) -- cycle;
+ \draw[hair,line join=bevel]
+ (120:3pt) arc (120:230:3pt) to[out=110,in=300,out looseness=2]
+ (120:1.4pt) -- (120:3pt) -- cycle;
+ \else
+ \draw[hair,shading angle=-45]
+ (10:3pt) arc (10:120:3pt) -- (120:1.4pt) to [out=300,in=210,looseness=.5]
+ (10:3pt) -- cycle;
+ \draw[hair,line join=bevel]
+ (120:3pt) arc (120:210:3pt) to[out=90,in=300,looseness=1] (120:1.4pt) --
+ (120:3pt) -- cycle;
+ \fi
+}
+
+\newcommand{\tikzpeople@charlie@paintundershirt}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt) (205:3.1pt) arc (205:335:3.1pt) to[out=200,in=340]
+ (205:3.1pt) --cycle;
+ \draw[color=\tikzpeople@shirt!80,line width=.05*\scalingfactor,cap=round]
+ (2pt,-8.7pt) to[out=90,in=290] (285:3.1pt);
+ {
+ \if@tikzpeople@female
+ \pgftransformshift{\pgfpoint{-.3pt}{0pt}}
+ \else
+ \pgftransformshift{\pgfpoint{.3pt}{0pt}}
+ \fi
+ \path[postaction={decoration={markings,
+ mark=between positions .12 and .8 step 0.16 with {
+ \draw[buttons] (0pt,0pt) circle (.15*\scalingfactor);
+ \path[fill=\tikzpeople@buttons]
+ (0:.02*\scalingfactor) circle (.01*\scalingfactor)
+ (180:.02*\scalingfactor) circle (.01*\scalingfactor);},
+ },decorate}] (2pt,-8.7pt) to[out=90,in=290] (285:3.1pt);
+ }
+ \if@tikzpeople@female
+ \draw[skin]
+ (245:2.9pt) to[out=310,in=160] (286:4pt) to[out=40,in=260]
+ (315:2.8pt) -- cycle;
+ \draw[collar]
+ (245:2.75pt) to[out=310,in=160] (286:3.9pt) to[out=40,in=260]
+ (315:2.7pt) -- (315:2.9pt) to[out=260,in=40]
+ (286:4.1pt) to[out=160,in=310] (245:3pt) --cycle;
+ \else
+ \draw[skin]
+ (245:2.9pt) to[out=300,in=280,looseness=1.3] (315:2.8pt) -- cycle;
+ \draw[collar]
+ (245:2.75pt) to[out=300,in=280,looseness=1.3] (315:2.7pt) --
+ (315:2.9pt) to[out=280,in=300,looseness=1.3] (245:3pt) -- cycle;
+ \fi
+ \begin{scope}
+ \if@tikzpeople@female
+ \clip
+ (245:2.75pt) to[out=310,in=160] (286:3.9pt) to[out=40,in=260]
+ (315:2.7pt) -- (315:2.9pt) to[out=260,in=40]
+ (286:4.1pt) to[out=160,in=310] (245:3pt) --cycle;
+ \else
+ \clip
+ (245:2.75pt) to[out=300,in=280,looseness=1.3] (315:2.7pt) --
+ (315:2.9pt) to[out=280,in=300,looseness=1.3] (245:3pt) -- cycle;
+ \fi
+ \draw[color=\tikzpeople@shirt!40,line width=.05*\scalingfactor,cap=round]
+ (2pt,-8.7pt) to[out=90,in=290] (285:3.1pt);
+ \end{scope}
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@charlie@colors}{
+ shirt/200/{-1/-.75}, hair/160/{-.75/1}, skin/20/{.5/.8},
+ buttons/340/{.39/-.59}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.chef.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.chef.sty
new file mode 100644
index 0000000000..ee4b592407
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.chef.sty
@@ -0,0 +1,74 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+
+\newcommand{\tikzpeople@chef@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@chef@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@chef@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@chef@paintshirtdetails}{
+ \draw[details]
+ (230:3pt) .. controls (0.24pt,-5pt) and (0.29pt,-8pt) .. (0.3pt,-9pt);
+ \draw[shirt,thick,shading angle=-45]
+ (230:3pt) .. controls +(-0.4pt,-1.5pt) .. ++(0pt,-3pt) .. controls
+ +(1.5pt,0.5pt) .. ++(3pt,0.2pt) .. controls +(0.5pt,0.4pt) ..
+ ++(2pt,0.7pt) .. controls +(0pt,0.5pt) .. (312:3pt);
+ \draw[skin] (231:3pt) -- (1pt,-4.85pt) -- (311:3pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@chef@painthat}{
+ \draw[hat]
+ (160:3pt) ++(0pt,2pt) -- (160:3pt) arc (-180:0:2.85pt and 1pt) --
+ ++(0pt,2pt);
+ \draw[hat,bottom color=\tikzpeople@hat!90!black]
+ (0pt,2.7pt) ellipse (3.2pt and 1.12pt);
+ \begin{scope}
+ \clip (0pt,2.7pt) ellipse (3.2pt and 1.12pt);
+ \draw[hat]
+ (-3.2pt,3.2pt) arc (-180:0:3.2pt and 1.12pt) -- ++(0pt,1.5pt) --
+ (-3.2pt,4.2pt) -- cycle;
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@chef@definecolors}{
+ \definecolor{shirt}{RGB}{232,232,232}
+ \definecolor{hat}{RGB}{232,232,232}
+ \definecolor{details}{rgb}{0.3,0.3,0.3}
+}
+\newcommand{\tikzpeople@chef@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ details/.style={color=\tikzpeople@details}
+ }
+ \else
+ \tikzset{
+ details/.style={color=\tikzpeople@details!80}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@chef@colors}{
+ shirt/340/{.75/-.75}, hair/160/{-.75/.9}, hat/30/{.5/1.3}, skin/0/{.4/.6},
+ details/200/{-.1/-1}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.conductor.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.conductor.sty
new file mode 100644
index 0000000000..f3d9e6d15c
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.conductor.sty
@@ -0,0 +1,141 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{hatshield}
+\tikzpeople@addcolorkey{hatbadge}
+\tikzpeople@addcolorkey{badge}
+
+
+\newcommand{\tikzpeople@conductor@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@conductor@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthairstyletwo
+ \tikzpeople@conductor@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@conductor@paintundershirt}{
+ \draw[undershirt]
+ (-2.2pt,-1pt) -- (2pt,-8.5pt) -- (2pt,-1pt);
+ \draw[tie]
+ (0 pt,-2.5pt) -- (0.8pt,-3.2pt) -- (1.1pt,-6 pt) -- (1.7pt,-8.7pt) --
+ (1.9pt,-8.7pt) -- (2 pt,-5.5pt) -- (1 pt,-3.1pt) -- (1.2pt,-2 pt) --
+ (0.3pt,-2 pt);
+ \draw[undershirt,shading angle=-45]
+ (0.5pt,-3pt) -- (0.1pt,-3.7pt) -- (-1pt,-3pt);
+ \draw[undershirt,shading angle=-45]
+ (0.9pt,-2.5pt) -- (1.8pt,-3.2pt) -- (2.2pt,-2.2pt);
+}
+
+\newcommand{\tikzpeople@conductor@paintopenshirt}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) .. ( 5pt,-7pt) ..
+ controls ( 5pt, 0pt) and (-5pt,0pt) .. (-4pt,-8pt);
+ \draw[shirt,shading angle=-45]
+ (-2 pt,-2.6 pt) -- (-1.5pt,-5 pt) -- (-0.5pt,-5pt) --
+ (-1.1pt,-5.2 pt) -- ( 1.6pt,-8.75pt) -- ( 1.9pt,-8.75pt) .. controls
+ (1.7pt,-7pt) and (-0pt,-3.2pt) .. (-1.6pt,-2pt) -- cycle;
+ \draw[shirt,shading angle=-45]
+ (2pt,-2pt) .. controls (2.2pt,-1.8pt) and (1.9pt,-8.5pt) ..
+ (1.9pt,-8.75pt) -- (2.3pt,-8.5pt) -- (3.2pt,-5.2pt) -- (2.6pt,-5.2 pt) --
+ (3.2pt,-5 pt) -- (2.3pt,-2.3pt) -- cycle;
+ \end{scope}
+ \draw[color=\tikzpeople@shirt\if@tikzpeople@saturated\else!80\fi]
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) .. ( 5pt,-7pt) ..
+ controls ( 5pt, 0pt) and (-5pt, 0pt) .. (-4pt,-8pt);
+}
+
+\newcommand{\tikzpeople@conductor@paintshirtdetails}{
+ \tikzpeople@conductor@paintundershirt
+ \tikzpeople@conductor@paintopenshirt
+ \draw[badge]
+ (264:7pt) to[out=354 ,in=186] ++(0:0.5pt) -- ++(270:0.15pt)
+ to[in=354 ,out=186] ++(180:0.5pt) -- (264:7pt);
+ \draw[badge]
+ (261:7.5pt) to[out=354 ,in=186] ++(0:1.5pt) -- ++(270:0.25pt)
+ to[in=354 ,out=186] ++(180:1.5pt) -- (261:7.5pt);
+}
+
+\newcommand{\tikzpeople@conductor@painthat}{
+ \path
+ (160:3pt) arc (-180:-120:2.85pt and 1pt) coordinate (tikzpeople@tmp);
+ \draw[hatbottom,rounded corners=.75pt]
+ (tikzpeople@tmp) -- ++(340:1.5pt) .. controls ++(340:1pt) ..
+ ++(10:3.8pt) .. controls ++(45:.2pt) .. (20:3pt);
+ \draw[hatbottom]
+ (160:3pt) ++(0pt,1pt) -- (160:3pt) arc (-180:0:2.85pt and 1pt) --
+ ++(0pt,1pt);
+ \draw[hattop,rounded corners=.75pt]
+ (160:3pt) ++(0pt,0.5pt) arc (-180:-22:3pt and 1.05pt) -- ++(1pt,1.5pt) --
+ ++(0pt,.4pt) .. controls +(-4pt,.5pt) .. (142:4.8pt) -- ++(0pt,-0.5pt) --
+ cycle;
+ \begin{scope}
+ \clip[rounded corners=.75pt]
+ (160:3pt) ++(0pt,0.5pt) arc (-180:-22:3pt and 1.05pt) -- ++(1pt,1.5pt) --
+ ++(0pt,.4pt) .. controls +(-4pt,.5pt) .. (142:4.8pt) -- ++(0pt,-0.5pt) --
+ cycle;
+ \draw[hatbottom,nearly opaque]
+ (153:3.5pt) ++(0pt,-2pt) -- (153:3.5pt) .. controls ++(350:1.5pt) ..
+ ++(10:2.5pt) .. controls ++(335:1.2pt) .. ++(2:2.5pt) coordinate
+ (hatbadge) .. controls ++(335:1.2pt) .. ++(10:2.5pt) -- ++(0pt,-2pt);
+ \end{scope}
+ \draw[hatbadge]
+ (hatbadge) ++(0.2pt,-0.2pt) coordinate (tikzpeople@tmp) .. controls ++(190:.5pt) ..
+ ++(200:.75pt) .. controls ++(270:.75pt) .. ++(300:1pt) .. controls
+ ++(70:.5pt) .. ++(55:1.1pt) .. controls ++(135:.3pt) .. (tikzpeople@tmp);
+}
+
+\newcommand{\tikzpeople@conductor@definecolors}{
+ \definecolor{shirt}{rgb}{0.18,0.38,0.80}
+ \definecolor{hat}{rgb}{0.18,0.38,0.80}
+ \definecolor{hair}{rgb}{0,0,0}
+ \definecolor{badge}{rgb}{0.96,0.55,0.1}
+ \definecolor{hatbadge}{rgb}{0.96,0.55,0.1}
+ \definecolor{hatshield}{rgb}{0.031,0.09,0.19}
+ \definecolor{undershirt}{RGB}{232,232,232}
+ \definecolor{tie}{rgb}{0.04,0.15,0.37}
+}
+\newcommand{\tikzpeople@conductor@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ shirt/.style ={color=\tikzpeople@shirt!90,top color=\tikzpeople@shirt!90, bottom color=\tikzpeople@shirt,shading angle=45},
+ hattop/.style ={color=\tikzpeople@hat!90,top color=\tikzpeople@hat!90, bottom color=\tikzpeople@hat,shading angle=45},
+ hatbottom/.style={color=\tikzpeople@hatshield,top color=\tikzpeople@hatshield!80, bottom color=\tikzpeople@hatshield,shading angle=45},
+ badge/.style ={color=\tikzpeople@badge,top color=\tikzpeople@badge!70, bottom color=\tikzpeople@badge,shading angle=45},
+ hatbadge/.style ={color=\tikzpeople@hatbadge,top color=\tikzpeople@hatbadge!70, bottom color=\tikzpeople@hatbadge,shading angle=45},
+ tie/.style ={color=\tikzpeople@tie,top color=\tikzpeople@tie!70, bottom color=\tikzpeople@tie,shading angle=45}
+ }
+ \else
+ \tikzset{
+ shirt/.style ={color=\tikzpeople@shirt!80,top color=\tikzpeople@shirt!80, bottom color=\tikzpeople@shirt,shading angle=45},
+ hattop/.style ={color=\tikzpeople@hat!80,top color=\tikzpeople@hat!80, bottom color=\tikzpeople@hat,shading angle=45},
+ hatbottom/.style={color=\tikzpeople@hatshield!80,top color=\tikzpeople@hatshield!60, bottom color=\tikzpeople@hatshield!90,shading angle=45},
+ badge/.style ={color=\tikzpeople@badge!80,top color=\tikzpeople@badge!40, bottom color=\tikzpeople@badge!80,shading angle=45},
+ hatbadge/.style ={color=\tikzpeople@hatbadge!80,top color=\tikzpeople@hatbadge!40, bottom color=\tikzpeople@hatbadge!80,shading angle=45},
+ tie/.style ={color=\tikzpeople@tie!80,top color=\tikzpeople@tie!40, bottom color=\tikzpeople@tie!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@conductor@colors}{
+ shirt/190/{-.8/-.5}, hat/140/{-.6/1.5}, hair/175/{-.75/.8}, skin/10/{.5/.6},
+ badge/210/{-.25/-1.25}, hatshield/155/{.15/.85}, hatbadge/30/{.4/1.3},
+ undershirt/350/{.3/-.15}, tie/330/{.35/-.8}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.cowboy.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.cowboy.sty
new file mode 100644
index 0000000000..d6cab61496
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.cowboy.sty
@@ -0,0 +1,147 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{vest}
+\tikzpeople@addcolorkey{patches}
+\tikzpeople@addcolorkey{stitching}
+\tikzpeople@addcolorkey{tie}
+
+\newcommand{\tikzpeople@cowboy@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@cowboy@paintshirtdetails
+ {
+ \pgftransformshift{\pgfpoint{0}{.8pt}}
+ \tikzpeople@person@paintrighthorn
+ }
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@cowboy@painthat
+ {
+ \pgftransformshift{\pgfpoint{0}{1.2pt}}
+ \tikzpeople@person@paintlefthorn
+ }
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@cowboy@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[vest,postaction={
+ decoration={
+ markings,
+ mark=at position 0.16 with {\coordinate (tikzpeople@tmp1) at (-.1pt*\scalingfactor,-.1pt*\scalingfactor);},
+ mark=at position 0.28 with {\coordinate (tikzpeople@tmp2) at (-.1pt*\scalingfactor,-.1pt*\scalingfactor);},
+ mark=at position 0.6 with {\coordinate (tikzpeople@tmp3) at (-.1pt*\scalingfactor,-.1pt*\scalingfactor);},
+ mark=at position 0.72 with {\coordinate (tikzpeople@tmp4) at (-.1pt*\scalingfactor,-.1pt*\scalingfactor);};
+ },decorate
+ }]
+ (232:3pt) to[out=315,in=90] ++(2.5pt,-5.5pt) --
+ ++(-2.5pt,0) to[out=90,in=315] ++(-2pt,4pt)--cycle;
+ \draw[patches,postaction={
+ decoration={
+ markings,
+ mark=between positions 0.22 and 0.48 step 0.045 with {\draw[stitching] (.2pt*\scalingfactor,-.1pt*\scalingfactor) -- (0,.1pt*\scalingfactor);},
+ mark=between positions 0.73 and 1 step 0.045 with {\draw[stitching] (.2pt*\scalingfactor,-.1pt*\scalingfactor) -- (0,.1pt*\scalingfactor);}
+ },decorate
+ }]
+ (tikzpeople@tmp1) to[out=300,in=105] (tikzpeople@tmp2) to[out=190,in=45] (tikzpeople@tmp3) to[out=100,in=300]
+ (tikzpeople@tmp4) to[out=40,in=190] (tikzpeople@tmp1);
+ \draw[vest,postaction={
+ decoration={
+ markings,
+ mark=at position 0.14 with {\coordinate (tikzpeople@tmp1) at (.1pt*\scalingfactor,.1pt*\scalingfactor);},
+ mark=at position 0.25 with {\coordinate (tikzpeople@tmp2) at (.1pt*\scalingfactor,.1pt*\scalingfactor);},
+ mark=at position 0.615 with {\coordinate (tikzpeople@tmp3) at (.1pt*\scalingfactor,.1pt*\scalingfactor);},
+ mark=at position 0.715 with {\coordinate (tikzpeople@tmp4) at (.1pt*\scalingfactor,.1pt*\scalingfactor);};
+ },decorate
+ }]
+ (314:3pt) to[out=245,in=100] ++(-.5pt,-5.5pt) --
+ ++(1.8pt,.8pt) to[out=95,in=250] ++(.5pt,4.5pt)--cycle;
+ \draw[patches,postaction={
+ decoration={
+ markings,
+ mark=between positions 0.28 and 0.52 step 0.055 with {\draw[stitching] (-.2pt*\scalingfactor,-.1pt*\scalingfactor) -- (0,.1pt*\scalingfactor);},
+ mark=between positions 0.76 and 1 step 0.055 with {\draw[stitching] (-.2pt*\scalingfactor,-.1pt*\scalingfactor) -- (0,.1pt*\scalingfactor);}
+ },decorate
+ }]
+ (tikzpeople@tmp1) to[out=255,in=92] (tikzpeople@tmp2) to[out=357,in=178] (tikzpeople@tmp3) to[out=98,in=268]
+ (tikzpeople@tmp4) to[out=170,in=0] (tikzpeople@tmp1);
+ \draw[tie,shading angle=-45]
+ (.2pt,-3.7pt) to[out=280,in=80] ++(-.2pt,-1.5pt) .. controls +(-.2pt,1pt)
+ and +(-1.3pt,-.1pt) .. (.2pt,-3.7pt);
+ \draw[tie]
+ (234:3pt) to[out=316,in=120] (.4pt,-4.4pt) to[out=40,in=250] (312:3pt);
+ \draw[tie,shading angle=-45]
+ (1pt,-3.8pt) to[out=300,in=80] ++(.5pt,-1pt) to[out=260,in=85]
+ ++(-.3pt,-1.4pt) arc (85:92:.3pt) to[out=92,in=268]
+ ++(-1.2pt,2.2pt) to[out=88,in=135] (1pt,-3.8pt) -- cycle;
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@cowboy@painthat}{
+ \pgftransformrotate{5}
+ \path[hat]
+ (15:3pt) ++(-.7pt,3pt) coordinate (tikzpeople@tmp) (165:3pt) --
+ ++(.7pt,3pt) to[out=10,in=170] (tikzpeople@tmp) -- (15:3pt) --cycle;
+ \begin{scope}
+ \pgftransformshift{\pgfpoint{0}{.2pt}}
+ \path[hatrim]
+ (203:3pt) ++(-2.5pt,3.3pt) coordinate (tikzpeople@tmp) arc (250:282:19pt) arc
+ (102:-78:.3pt) arc (282:248.5:19pt) to[out=150, in= 160] (tikzpeople@tmp);
+ \end{scope}
+ \path[hat]
+ (357:3pt) to[out=160,in=20] (183:3pt) arc (183:203:3pt) to[out=180,in=175]
+ ++(-2.5pt,3.3pt) arc (250:282:19pt) to[out=10,in=10] (335:3pt) arc
+ (335:357:3pt) --cycle;
+}
+
+\newcommand{\tikzpeople@cowboy@definecolors}{
+ \definecolor{shirt}{RGB}{56,52,182}
+ \definecolor{hat}{RGB}{105,49,0}
+ \definecolor{hair}{RGB}{28,26,25}
+ \definecolor{vest}{RGB}{204,100,0}
+ \definecolor{patches}{RGB}{254,145,42}
+ \definecolor{stitching}{RGB}{184,90,0}
+ \definecolor{tie}{RGB}{205,0,20}
+}
+\newcommand{\tikzpeople@cowboy@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ hatrim/.style={color=\tikzpeople@hat!70,top color=\tikzpeople@hat!20, bottom color=\tikzpeople@hat!70,shading angle=90},
+ vest/.style={color=\tikzpeople@vest,top color=\tikzpeople@vest!70,bottom color=\tikzpeople@vest,shading angle=45},
+ patches/.style={color=\tikzpeople@patches,top color=\tikzpeople@patches!70,bottom color=\tikzpeople@patches,shading angle=45},
+ stitching/.style={line cap=round,line width=.09pt*\scalingfactor,color=\tikzpeople@stitching},
+ tie/.style={color=\tikzpeople@tie,top color=\tikzpeople@tie!70, bottom color=\tikzpeople@tie,shading angle=45}
+ }
+ \else
+ \tikzset{
+ hatrim/.style={color=\tikzpeople@hat!40,top color=\tikzpeople@hat!10, bottom color=\tikzpeople@hat!40,shading angle=90},
+ vest/.style={color=\tikzpeople@vest!80,top color=\tikzpeople@vest!40, bottom color=\tikzpeople@vest!80,shading angle=45},
+ patches/.style={color=\tikzpeople@patches!80,top color=\tikzpeople@patches!40, bottom color=\tikzpeople@patches!80,shading angle=45},
+ stitching/.style={line cap=round,line width=.09pt*\scalingfactor,color=\tikzpeople@stitching},
+ tie/.style={color=\tikzpeople@tie!80,top color=\tikzpeople@tie!50, bottom color=\tikzpeople@tie!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@cowboy@colors}{
+ shirt/350/{1/-.5}, hair/180/{-.7/.7}, hat/160/{-1/1}, tie/10/{.1/-.25},
+ skin/30/{.5/.8}, vest/195/{-.7/-.3}, patches/210/{-.5/-.7},
+ stitching/330/{-.18/-.85,.53/-.71}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.criminal.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.criminal.sty
new file mode 100644
index 0000000000..1ed601e3a4
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.criminal.sty
@@ -0,0 +1,97 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+
+\newcommand{\tikzpeople@criminal@paint}{
+ {
+ \pgftransformyshift{-1.2pt}
+ \tikzpeople@person@paintrighthorn
+ }
+ \tikzpeople@person@painthead
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintshirt
+ \tikzpeople@criminal@paintshirtdetails
+ \if@tikzpeople@female
+ \tikzpeople@person@painthair
+ \fi
+ \tikzpeople@criminal@painthat
+ {
+ \pgftransformyshift{-1.2pt}
+ \tikzpeople@person@paintlefthorn
+ }
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@criminal@paintshirtdetails}{
+ \draw[shirt,shading angle=-45]
+ (205:3.1pt) arc (205:335:3.1pt) to[out=200,in=340] (205:3.1pt) --cycle;
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt) (205:3.1pt) arc (205:335:3.1pt) to[out=200,in=340]
+ (205:3.1pt) --cycle;
+ \draw[color=\tikzpeople@shirt\if@tikzpeople@saturated\else!80\fi,line width=.4*\scalingfactor,cap=round]
+ (2pt,-8.7pt) to[out=90,in=290] (290:3.1pt) to[out=45,in=270] (310:2.25pt);
+ \draw[color=\tikzpeople@details,line width=.17*\scalingfactor,cap=round]
+ (2pt,-8.7pt) to[out=90,in=290] (290:3.1pt) to[out=45,in=270] (310:2.25pt);
+ \draw[details]
+ (310:2.25pt) ++(-.05pt,0) -- ++(-.1pt,-.5pt) -- ++(.3pt,0) --
+ ++(-.1pt,.5pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@criminal@painthat}{
+ \begin{scope}
+ \pgftransformrotate{20}
+ \draw[hat] (180:3.1pt) ++(0,.2pt) arc (180:0:3.1pt and 3.5pt);
+ \if@tikzpeople@mirrored
+ \draw[hat, decorate, decoration={bumps,amplitude=-.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (0:3.2pt) ++(0,-.2pt) to[out=170,in=10] ++(180:6.4pt) to[out=110,in=250]
+ ++(0,1.2pt) to[out=10,in=170] ++(0:6.4pt) to[out=290,in=70]
+ ++(0,-1.22pt) --cycle;
+ \else
+ \draw[hat, decorate, decoration={bumps,amplitude=.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (0:3.2pt) ++(0,-.2pt) to[out=170,in=10] ++(180:6.4pt)
+ to[out=110,in=250] ++(0,1.2pt) to[out=10,in=170] ++(0:6.4pt)
+ to[out=290,in=70] ++(0,-1.22pt)--cycle;
+ \fi
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@criminal@definecolors}{
+ \definecolor{shirt}{RGB}{5,48,167}
+ \definecolor{hat}{RGB}{4,4,20}
+ \definecolor{details}{RGB}{230,232,234}
+ \definecolor{hair}{rgb}{0,0,0}
+}
+\newcommand{\tikzpeople@criminal@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ details/.style={color=\tikzpeople@details,top color=\tikzpeople@details!70, bottom color=\tikzpeople@details,shading angle=45}
+ }
+ \else
+ \tikzset{
+ shirt/.style ={color=\tikzpeople@shirt!80,top color=\tikzpeople@shirt!50, bottom color=\tikzpeople@shirt!80,shading angle=45},
+ details/.style={color=\tikzpeople@details,top color=\tikzpeople@details!40, bottom color=\tikzpeople@details!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@criminal@colors}{
+ shirt/340/{1/-.75}, hat/160/{-.5/1.5}, skin/20/{.5/.75},
+ details/200/{.27/-.25}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.dave.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.dave.sty
new file mode 100644
index 0000000000..ec8520d47f
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.dave.sty
@@ -0,0 +1,125 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{tie}
+
+\newcommand{\tikzpeople@dave@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@dave@paintundershirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@dave@painthair
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@dave@definecolors}{
+ \definecolor{shirt}{RGB}{136,190,226}
+ \definecolor{tie}{RGB}{173,36,47}
+ \definecolor{undershirt}{rgb}{0.9,0.9,0.9}
+ \definecolor{hair}{rgb}{0,0,0}
+}
+
+\newcommand{\tikzpeople@dave@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ tie/.style={color=\tikzpeople@tie,top color=\tikzpeople@tie!70, bottom color=\tikzpeople@tie,shading angle=45}
+ }
+ \else
+ \tikzset{
+ tie/.style={color=\tikzpeople@tie!80,top color=\tikzpeople@tie!40, bottom color=\tikzpeople@tie!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@dave@painthair}{
+ \if@tikzpeople@female
+ \draw[hair,shading angle=-45]
+ (10:3.1pt) arc (10:175:3.1pt) to[out=265,in=170,looseness=1] (250:4pt)
+ to [out=120,in=150,out looseness=1.5] (-.5pt,.5pt) to [out=330,in=200]
+ (10:3.1pt) -- cycle;
+ \else
+ \draw[hair,line join=bevel]
+ (20:3.1pt) arc (20:190:3.1pt) to[out=283,in=210,looseness=.5]
+ (220:3pt) arc (300:405:.1pt) to[out=120,in=110,out looseness=4,in looseness=2]
+ (-1.7pt,-.7pt) -- (-1.5pt,-.7pt) to [out=90,in=160,looseness=1]
+ (-.5pt,1.2pt) to [out=340,in=200,out looseness=1.5,in looseness=.2]
+ (30:2.5pt) to [out=20,in=90,looseness=1]
+ (355:3pt) to [out=80,in=290,looseness=1] (20:3.1pt);
+ \fi
+}
+
+\newcommand{\tikzpeople@dave@paintundershirt}{
+ \begin{scope}
+ \clip
+ (-1.9pt,-1pt) to[out=290,in=130,looseness=.75] (2pt,-7.8pt)
+ to[out=80,in=280,looseness=.75] (1.9pt,-1pt);
+ \draw[undershirt]
+ (-1.9pt,-1pt) to[out=290,in=130,looseness=.75] (2pt,-7.8pt)
+ to[out=80,in=280,looseness=.75] (1.9pt,-1pt);
+ \if@tikzpeople@female
+ \draw[skin]
+ (250:2.9pt) to[out=300,in=280,looseness=2] (310:2.8pt) -- cycle;
+ \path[postaction={decorate},decoration={
+ markings,
+ mark=between positions 0.04 and 1 step 0.04 with {\pgftransformscale{\scalingfactor}
+ \fill[tie] (0pt,0pt) circle (.1pt);}
+ }]
+ (245:2.9pt) to[out=300,in=270,looseness=3] (311:3pt);
+ \else
+ \draw[tie]
+ (270:3pt) -- ++(.7pt,-.1pt) -- ++(.05pt,-.3pt) to[out=275,in=95]
+ ++(-.1pt,-.8pt) -- ++(1pt,-4pt) -- ++(.9pt,.25pt) -- ++(-1pt,3.8pt)
+ to[in=280,out=95] ++(-.4pt,.9pt) -- ++(-.1pt,.25pt) -- (295:3pt);
+ \draw[tie]
+ (270:3pt) ++(.7pt,-.1pt) to[out=30,in=175] ++(.35pt,.1pt)
+ to[out=300,in=90] ++(.1pt,-.35pt) to[out=210,in=350] ++(-.4pt,-.1pt)
+ to[out=110,in=270] ++(-0.05pt,.35pt)--cycle;
+ \fi
+ \end{scope}
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \if@tikzpeople@mirrored
+ \path[postaction={decorate},decoration={
+ markings,
+ mark=between positions 0.11 and .54 step 0.02 with {\pgftransformscale{\scalingfactor}
+ \draw[shirt] (0pt,0pt) -- (0pt,.3pt) arc (360:180:.15pt) -- (-.3pt,0pt);},
+ mark=between positions 0.54 and .91 step 0.02 with {\pgftransformscale{\scalingfactor}
+ \draw[shirt] (0pt,0pt) -- (0pt,.3pt) arc (180:360:.15pt) -- (.3pt,0pt);}
+ }]
+ (-1.9pt,-1pt) to[out=290,in=130,looseness=.75] (2pt,-7.8pt)
+ to[out=80,in=280,looseness=.75] (1.9pt,-1pt);
+ \else
+ \path[postaction={decorate},decoration={
+ markings,
+ mark=between positions 0.11 and .54 step 0.02 with {\pgftransformscale{\scalingfactor}
+ \draw[shirt] (0pt,0pt) -- (0pt,-.3pt) arc (0:180:.15pt) -- (-.3pt,0pt);},
+ mark=between positions 0.54 and .91 step 0.02 with {\pgftransformscale{\scalingfactor}
+ \draw[shirt] (0pt,0pt) -- (0pt,-.3pt) arc (180:0:.15pt) -- (.3pt,0pt);}
+ }]
+ (-1.9pt,-1pt) to[out=290,in=130,looseness=.75] (2pt,-7.8pt)
+ to[out=80,in=280,looseness=.75] (1.9pt,-1pt);
+ \fi
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@dave@colors}{
+ shirt/340/{1/-.9}, hair/160/{-.8/1}, skin/20/{.4/.6}, tie/360/{.2/-.25},
+ undershirt/200/{-.1/-.2}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.devil.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.devil.sty
new file mode 100644
index 0000000000..56f792f422
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.devil.sty
@@ -0,0 +1,77 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\newcommand{\tikzpeople@devil@paint}{
+ \@tikzpeople@eviltrue
+ \tikzpeople@devil@painttail
+ \tikzpeople@person@paintshirt
+ \tikzpeople@devil@painttorso
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthairstyletwo
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@devil@definecolors}{
+ \definecolor{skin}{RGB}{216,52,38}
+ \definecolor{hair}{named}{black}
+ \definecolor{shirt}{named}{black}
+}
+
+\newcommand{\tikzpeople@devil@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ tail/.style ={color=\tikzpeople@skin,double=\tikzpeople@skin!90,double distance=.4pt*\scalingfactor},
+ horns/.style={skin}
+ }
+ \else
+ \tikzset{
+ skin/.style ={color=\tikzpeople@skin!80,top color=\tikzpeople@skin!50,bottom color=\tikzpeople@skin!80},
+ tail/.style ={color=\tikzpeople@skin!80,double=\tikzpeople@skin!70,double distance=.4pt*\scalingfactor},
+ horns/.style={skin}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@devil@painttail}{
+ \draw[tail]
+ (250:7pt) to[out=80,in=10] ++(130:3.5pt) to[out=190,in=190,looseness=3] ++(95:2.5pt) to[out=10,in=300,looseness=2] ++(100:3pt) coordinate (tikzpeople@tmp);
+ {
+ \pgftransformrotate{30}
+ \draw[skin] (tikzpeople@tmp) ++(-.1pt,0) to[out=200,in=80] ++(-.8pt,-.7pt) to[out=90,in=220] ++(.9pt,2pt) to[out=320,in=90] ++(.9pt,-2pt) to[out=80,in=340] ++(-.8pt,.7pt);
+ }
+}
+
+\newcommand{\tikzpeople@devil@painttorso}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt) -- cycle;
+ \draw[skin]
+ (-1.9pt,-1pt) to[out=290,in=80]
+ (-1.2pt,-9.2pt) -- (4.5pt,-9pt) to[out=120,in=280] (1.6pt,-1pt);
+ \draw[color=\tikzpeople@shirt\if@tikzpeople@saturated\else!80\fi]
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt) -- cycle;
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@devil@colors}{
+ shirt/200/{-1/-.6}, hair/160/{-.75/.7}, skin/20/{.6/.7,.15/-.4}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.duck.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.duck.sty
new file mode 100644
index 0000000000..e50f54fd06
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.duck.sty
@@ -0,0 +1,104 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{bill}
+\tikzpeople@addcolorkey{tongue}
+
+\newcommand{\tikzpeople@duck@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@duck@painttorso
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@duck@paintbill
+ \tikzpeople@person@painthair
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@duck@definecolors}{
+ \definecolor{skin}{RGB}{252,167,0}
+ \definecolor{bill}{RGB}{247, 78, 19}
+ \definecolor{hair}{named}{black}
+ \definecolor{tongue}{RGB}{246,38,10}
+}
+
+\newcommand{\tikzpeople@duck@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ shirt/.style ={skin},
+ bill/.style ={color=\tikzpeople@bill,top color=\tikzpeople@bill!70,bottom color=\tikzpeople@bill,shading angle=45},
+ tongue/.style ={color=\tikzpeople@tongue,top color=\tikzpeople@tongue!30!\tikzpeople@bill,bottom color=\tikzpeople@tongue},
+ feathers/.style={color=\tikzpeople@skin,decoration={zigzag,segment length=\scalingfactor*.8pt,amplitude=\scalingfactor*.25pt},decorate,line width=\scalingfactor*.05pt}
+ }
+ \else
+ \tikzset{
+ shirt/.style ={skin},
+ bill/.style ={color=\tikzpeople@bill!80,top color=\tikzpeople@bill!50,bottom color=\tikzpeople@bill!80,shading angle=45},
+ tongue/.style ={color=\tikzpeople@tongue!80,outer color=\tikzpeople@tongue!20!\tikzpeople@bill!80,inner color=\tikzpeople@tongue!80},
+ feathers/.style={color=\tikzpeople@skin!80,decoration={zigzag,segment length=\scalingfactor*.8pt,amplitude=\scalingfactor*.25pt},decorate,line width=\scalingfactor*.05pt}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@duck@painttorso}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[feathers]
+ (-3.5 pt,-4.2pt) .. controls (-2pt,-6.2pt) and (3pt,-5.2pt) ..
+ ( 4.3pt,-3.7pt);
+ \draw[feathers]
+ (-4.2pt,-5.7pt) .. controls (-2pt,-7.7pt) and (3pt,-6.7pt) ..
+ (4.7pt, -4.9pt);
+ \draw[feathers]
+ (-4.3pt,-7.2pt) .. controls (-2pt,-9.2pt) and (3pt,-8.2pt) ..
+ (5pt, -6.2pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@duck@paintbill}{
+ \path
+ (263:1.6pt) coordinate (tikzpeople@bill1) +(0,.12pt) coordinate
+ (tikzpeople@bill2) +(0,-.12pt) coordinate (tikzpeople@bill3) (340:3pt)
+ ++(350:1.5pt) coordinate (tikzpeople@bill4) +(0,.12pt) coordinate
+ (tikzpeople@bill5) +(0,-.12pt) coordinate (tikzpeople@bill6) ++(200:1.8pt)
+ coordinate (tikzpeople@bill7) +(0,.12pt) coordinate (tikzpeople@bill8)
+ +(0,-.15pt) coordinate (tikzpeople@bill9)--cycle;
+ \draw[bill]
+ (tikzpeople@bill3) to[out=320,in=190] (tikzpeople@bill6);
+ \draw[tongue]
+ (tikzpeople@bill7) to[out=5,in=215] (tikzpeople@bill4) to[out=170,in=10]
+ (tikzpeople@bill7)--cycle;
+ \draw[bill]
+ (tikzpeople@bill1) to[out=340,in=190] (tikzpeople@bill7) to[out=5,in=215]
+ (tikzpeople@bill4) to[out=0,in=0] (tikzpeople@bill6) to[out=220,in=0]
+ (tikzpeople@bill9) to[out=190,in=340] (tikzpeople@bill3) to[out=160,in=160]
+ (tikzpeople@bill1)--cycle;
+ \draw[bill]
+ (tikzpeople@bill1) to[out=340,in=190] (tikzpeople@bill7) to[out=0,in=180]
+ (tikzpeople@bill4) to[out=0,in=0] (tikzpeople@bill5) to[out=170,in=10]
+ (tikzpeople@bill8) to[out=190,in=340] (tikzpeople@bill2) to[out=160,in=160]
+ (tikzpeople@bill1)--cycle;
+ \draw[bill,line join=bevel]
+ (tikzpeople@bill2) to[out=340,in=190] (tikzpeople@bill8) to[out=10,in=170]
+ (tikzpeople@bill5) to[out=160,in=330] (340:3pt) to[out=180,in=0] (337:1.7pt)
+ to[out=180,in=0,in looseness=1.2] (tikzpeople@bill2)--cycle;
+}
+
+\newcommand{\tikzpeople@duck@colors}{
+ skin/200/{-1/-.6}, hair/160/{-.75/.8}, bill/20/{.6/.5}, tongue/0/{.9/.42}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.graduate.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.graduate.sty
new file mode 100644
index 0000000000..127fd850fc
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.graduate.sty
@@ -0,0 +1,103 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{stripes}
+
+\newcommand{\tikzpeople@graduate@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@graduate@paintundershirt
+ \tikzpeople@graduate@paintstripes
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@graduate@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@graduate@paintstripes}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+ \draw[stripes]
+ (1.5pt,-9.5pt) .. controls (0.7pt,-6pt) and (-1pt,-4pt) ..
+ (-2.5pt,-2pt) -- (-3.8pt,-2pt) .. controls (-3.2pt,-4pt) and
+ (-0.7pt,-6pt) .. (0pt,-9.5pt) -- cycle;
+ \draw[stripes]
+ (2.3 pt,-2pt) .. controls (3pt,-5pt) and (3pt,-6.5pt) ..
+ (2.9 pt,-9.5pt) -- (3.9 pt,-9.5pt) .. controls (4pt,-6.5pt) and
+ (4pt,-5pt) .. (3.3pt,-2pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@graduate@paintundershirt}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+ \draw[undershirt]
+ (-3 pt,-2 pt) .. controls (-0.1pt,-3 pt) and ( 1.2pt,-6 pt) ..
+ ( 2.2pt,-8 pt) .. controls ( 2.3pt,-6 pt) and ( 2.2pt,-4 pt) ..
+ ( 2 pt,-2 pt) -- cycle;
+ \end{scope}
+ \draw[color=\tikzpeople@shirt\if@tikzpeople@saturated\else!80\fi]
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+}
+
+\newcommand{\tikzpeople@graduate@painthat}{
+ \draw[hat]
+ (175:3pt) .. controls ++(0.5pt,0.5pt) and (1pt,0.5pt) ..
+ (1.5pt,0pt) .. controls (1.7pt,0.5pt) and (25:2.8pt) ..
+ (20:3pt) -- +(0pt,2pt) -- (175:3pt |- 0,3pt) -- cycle;
+ \draw[hat]
+ (4.4pt,3.6pt) -- (-1.5pt,4pt) -- (-4.3pt,2.5pt) -- (2pt,2pt);
+ \draw[color=\tikzpeople@hat\if@tikzpeople@saturated\else!80\fi,line width=0.15*\scalingfactor,cap=round]
+ (0pt,3.2pt) -- (-3.4pt,2.5pt) arc (90:180:0.2pt) -- (-3.5pt,-0.5pt);
+ \draw[hat]
+ (-3.6pt,-0.5pt) -- (-3.7pt,-1.5pt) .. controls (-3.5pt,-1.6pt) ..
+ (-3.3pt,-1.5pt) --
+ (-3.4pt,-0.5pt);
+ \draw[hat]
+ (-3.5pt,-0.5pt) circle (0.25pt);
+}
+
+\newcommand{\tikzpeople@graduate@definecolors}{
+ \definecolor{shirt}{rgb}{0,0,0}
+ \definecolor{hat}{rgb}{0,0,0}
+ \definecolor{undershirt}{RGB}{232,232,232}
+ \definecolor{stripes}{rgb}{0.16,0.55,0.31}
+}
+\newcommand{\tikzpeople@graduate@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ stripes/.style={color=\tikzpeople@stripes,top color=\tikzpeople@stripes!70, bottom color=\tikzpeople@stripes,shading angle=45}
+ }
+ \else
+ \tikzset{
+ stripes/.style={color=\tikzpeople@stripes!80,top color=\tikzpeople@stripes!40, bottom color=\tikzpeople@stripes!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@graduate@colors}{
+ shirt/200/{-1/-.9}, hair/180/{-.75/.9}, hat/160/{-.75/1.3}, skin/20/{.5/.75},
+ undershirt/0/{.4/-.1}, stripes/340/{.8/-.7,0/-1.3}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.groom.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.groom.sty
new file mode 100644
index 0000000000..2bcc815842
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.groom.sty
@@ -0,0 +1,122 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{tie}
+
+\newcommand{\tikzpeople@groom@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@groom@paintshirtdetails
+ {
+ \pgftransformshift{\pgfpoint{0}{-.8pt}}
+ \tikzpeople@person@paintrighthorn
+ }
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@groom@painthat
+ \tikzpeople@person@paintgoatee
+ {
+ \pgftransformshift{\pgfpoint{0}{-1.3pt}}
+ \tikzpeople@person@paintlefthorn
+ }
+ {
+ \pgftransformshift{\pgfpoint{0}{.5pt}}
+ \tikzpeople@person@painthalo
+ }
+}
+
+\newcommand{\tikzpeople@groom@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+ \draw[shirt,shading angle=-45]
+ (200:4.5pt) .. controls +(300:4pt) .. (-.2pt,-7.8pt) .. controls
+ +(320:.5pt) .. (2pt,-8.5pt) .. controls +(30:.7pt) .. (3.5pt,-7pt) ..
+ controls +(89:2pt) .. (330:3.3pt);
+ \draw[undershirt]
+ (200:3pt) .. controls +(300:4pt) .. (2pt,-8.5pt) .. controls +(85:4pt) ..
+ (310:3pt);
+ \draw[skin] (240:3pt) -- (.4pt,-3.7pt) -- (311:3pt) -- cycle;
+ \draw[tie]
+ (.4pt,-3.8pt) .. controls +(165:1pt) .. ++(-1.4pt,.2pt) .. controls
+ +(310:.5pt) .. ++(.3pt,-.8pt) .. controls +(20:.75pt) .. (.4pt,-3.8pt) ..
+ controls +(32:1.2pt) .. ++(1.3pt,.7pt) .. controls +(270:.5pt) ..
+ ++(.2pt,-.8pt) .. controls +(180:1pt) .. (.4pt,-3.8pt);
+ \draw[tie] (.4pt,-3.8pt) circle (.2pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@groom@painthat}{
+ \begin{scope}
+ \pgftransformrotate{10}
+ \path[hat]
+ (30:3pt) ++(0pt,3pt) coordinate (tikzpeople@tmp)
+ (150:3pt) to[out=85,in=275] ++(0pt,3pt) to[out=10,in=170] (tikzpeople@tmp)
+ to[out=265,in=95] (30:3pt) --cycle;
+ \begin{scope}
+ \clip
+ (30:3pt) ++(0pt,3pt) coordinate (tikzpeople@tmp) (150:3pt) to[out=85,in=275]
+ ++(0pt,3pt) to[out=10,in=170] (tikzpeople@tmp) to[out=265,in=95] (30:3pt) --cycle;
+ \path[hatwrap]
+ (30:3pt) ++(0pt,1.3pt) coordinate (tikzpeople@tmp) (150:3pt) ++(0pt,.7pt)
+ coordinate (tikzpeople@tmp2) (150:3pt) ++(0pt,1.5pt) to[out=355,in=185] (tikzpeople@tmp) --
+ ++(0pt,-.7pt) to[out=185,in=355] (tikzpeople@tmp2) --cycle;
+ \end{scope}
+ \end{scope}
+ \begin{scope}
+ \pgftransformrotate{4}
+ \begin{scope}
+ \pgftransformshift{\pgfpoint{-.05pt}{.075pt}}
+ \path[hatrim]
+ (170:3pt) ++(-.5pt,1.75pt) coordinate (tikzpeople@tmp) arc (255:291:11pt) arc
+ (111:-69:.1pt) arc (291:253:11pt) to[out=163, in= 163,in looseness=3]
+ (tikzpeople@tmp);
+ \end{scope}
+ \path[hat]
+ (25:3pt) to[out=170,in=10] (160:3pt) arc (160:170:3pt)
+ to[out=180,in=160,looseness=2] ++(-.5pt,1.75pt) arc (255:291:11pt)
+ to[out=10,in=10] (25:3pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@groom@definecolors}{
+ \definecolor{shirt}{rgb}{0,0,0}
+ \definecolor{hat}{rgb}{0,0,0}
+ \definecolor{undershirt}{RGB}{232,232,232}
+ \definecolor{tie}{RGB}{194,0,0}
+}
+
+\newcommand{\tikzpeople@groom@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ hatrim/.style ={color=\tikzpeople@hat!60,top color=\tikzpeople@hat!30, bottom color=\tikzpeople@hat!60,shading angle=90},
+ hatwrap/.style={color=\tikzpeople@hat!80,top color=\tikzpeople@hat!60, bottom color=\tikzpeople@hat!80,shading angle=45},
+ tie/.style ={color=\tikzpeople@tie,inner color=\tikzpeople@tie!80, outer color=\tikzpeople@tie}
+ }
+ \else
+ \tikzset{
+ hatrim/.style ={color=\tikzpeople@hat!40,top color=\tikzpeople@hat!10, bottom color=\tikzpeople@hat!40,shading angle=90},
+ hatwrap/.style={color=\tikzpeople@hat!60,top color=\tikzpeople@hat!40, bottom color=\tikzpeople@hat!60,shading angle=45},
+ shirt/.style ={color=\tikzpeople@shirt!80,top color=\tikzpeople@shirt!50, bottom color=\tikzpeople@shirt!80,shading angle=45},
+ tie/.style ={color=\tikzpeople@tie!80,inner color=\tikzpeople@tie!60, outer color=\tikzpeople@tie!80}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@groom@colors}{
+ shirt/200/{-.75/-.8}, hair/160/{-.7/.9}, hat/20/{.3/2}, skin/0/{.5/.7},
+ undershirt/340/{.25/-.5},tie/180/{-.15/-.25}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.guard.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.guard.sty
new file mode 100644
index 0000000000..d90baca43a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.guard.sty
@@ -0,0 +1,97 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+\tikzpeople@addcolorkey{collar}
+\tikzpeople@addcolorkey{lining}
+
+\newcommand{\tikzpeople@guard@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@person@painthead
+ \tikzpeople@guard@paintcollar
+ \tikzpeople@guard@paintshirtdetails
+ \tikzpeople@guard@painthat
+}
+
+\newcommand{\tikzpeople@guard@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt) (205:3.1pt) arc (205:335:3.1pt) to[out=200,in=340] (205:3.1pt) --cycle;
+ \draw[lining,postaction={
+ decoration={
+ markings,
+ mark=at position 0.1 with {\coordinate (tikzpeople@tmp1) at (0,\if@tikzpeople@mirrored\else-\fi.4pt*\scalingfactor);},
+ mark=at position 0.23 with {\coordinate (tikzpeople@tmp2) at (0,\if@tikzpeople@mirrored\else-\fi.4pt*\scalingfactor);},
+ mark=at position 0.50 with {\coordinate (tikzpeople@tmp3) at (0,\if@tikzpeople@mirrored\else-\fi.4pt*\scalingfactor);},
+ mark=at position 0.62 with {\coordinate (tikzpeople@tmp4) at (0,\if@tikzpeople@mirrored\else-\fi.4pt*\scalingfactor);},
+ mark=at position 0.75 with {\coordinate (tikzpeople@tmp5) at (0,\if@tikzpeople@mirrored\else-\fi.4pt*\scalingfactor);};
+ },decorate
+ }] (2pt,-8.7pt) to[out=90,in=290] (290:3.6pt) -- (300:3.4pt) -- ++(102:0.6pt);
+ \draw[details] (tikzpeople@tmp1) circle (0.2pt);
+ \draw[details] (tikzpeople@tmp2) circle (0.2pt);
+ \draw[details] (tikzpeople@tmp3) circle (0.2pt);
+ \draw[details] (tikzpeople@tmp4) circle (0.2pt);
+ \draw[details] (tikzpeople@tmp5) circle (0.2pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@guard@paintcollar}{
+ \draw[collar] (225:3pt) ++(-0.06pt,-0.5pt) arc (225:320:3.1pt and 2.5pt) -- ++(-0.06pt,0.6pt) arc (320:225:3pt and 2.5pt) -- cycle;
+ \draw[lining] (225:3pt) ++(-0.06pt,-0.5pt) arc (225:320:3.1pt and 2.5pt);
+}
+
+\newcommand{\tikzpeople@guard@painthat}{
+ \begin{scope}
+ \pgftransformrotate{10}
+ \draw[hat] (215:3pt) arc (200:0:2.75pt and 2.4pt) .. controls (3.5pt,0pt) ..
+ (3.2pt,4pt) .. controls (3.2pt,8pt) and (-3.2pt,8pt) .. (-3.2pt,4pt) ..
+ controls (-3.5pt,0pt) and (-3.5pt,-1pt) .. (215:3pt);
+ \begin{scope}
+ \clip (0pt,0pt) circle (3pt);
+ \draw[color=\tikzpeople@details, line width=0.2*\scalingfactor,cap=round, dash pattern=on 0.4*\scalingfactor off 0.23*\scalingfactor]
+ (205:2.8pt) to[out=-40,in=230] (-30:3pt);
+ \end{scope}
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@guard@definecolors}{
+ \definecolor{shirt}{rgb}{0.62,0.1,0}
+ \definecolor{hat}{rgb}{0,0,0}
+ \definecolor{collar}{rgb}{0.29,0.29,0.29}
+ \definecolor{details}{rgb}{1,0.82,0}
+ \definecolor{lining}{rgb}{0.9,0.9,0.9}
+}
+\newcommand{\tikzpeople@guard@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ collar/.style ={color=\tikzpeople@collar,top color=\tikzpeople@collar!70, bottom color=\tikzpeople@collar,shading angle=45},
+ details/.style={color=\tikzpeople@details, top color=\tikzpeople@details!70, bottom color=\tikzpeople@details, shading angle=45},
+ lining/.style ={color=\tikzpeople@lining}
+ }
+ \else
+ \tikzset{
+ collar/.style ={color=\tikzpeople@collar!80,top color=\tikzpeople@collar!40, bottom color=\tikzpeople@collar!80,shading angle=45},
+ details/.style={color=\tikzpeople@details!80, top color=\tikzpeople@details!40, bottom color=\tikzpeople@details!80, shading angle=45},
+ lining/.style ={color=\tikzpeople@lining}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@guard@colors}{
+ shirt/200/{-.75/-1}, hat/160/{-.75/1.3}, skin/20/{.5/.7}, collar/0/{.2/.1},
+ details/180/{.45/-.4,-.5/.3}, lining/340/{.4/-.8}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.jester.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.jester.sty
new file mode 100644
index 0000000000..1210554417
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.jester.sty
@@ -0,0 +1,107 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+\tikzpeople@addcolorkey{pattern}
+
+\newcommand{\tikzpeople@jester@paint}{
+ {
+ \tikzpeople@person@paintrighthorn
+ }
+ \tikzpeople@person@paintshirt
+ \tikzpeople@jester@paintshirtdetails
+ \tikzpeople@person@painthead
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@painthair
+ \tikzpeople@jester@painthat
+ {
+ \tikzpeople@person@paintlefthorn
+ }
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@jester@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \coordinate (tikzpeople@tmp) at (2pt,.4pt);
+ \path (-10.5pt,-4pt)coordinate (tikzpeople@tmp1)
+ ++(tikzpeople@tmp) coordinate (tikzpeople@tmp2) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp3) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp4)
+ ++(tikzpeople@tmp) coordinate (tikzpeople@tmp5) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp6) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp7)
+ ++(tikzpeople@tmp) coordinate (tikzpeople@tmp8) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp9) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp10)
+ ++(tikzpeople@tmp) coordinate (tikzpeople@tmp11);
+ \path (-7pt,-12pt) coordinate (tikzpeople@tmp12)
+ ++(tikzpeople@tmp) coordinate (tikzpeople@tmp13) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp14) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp15)
+ ++(tikzpeople@tmp) coordinate (tikzpeople@tmp16) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp17) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp18)
+ ++(tikzpeople@tmp) coordinate (tikzpeople@tmp19) ++(tikzpeople@tmp) coordinate (tikzpeople@tmp20);
+ \fill[pattern] (tikzpeople@tmp2)
+ to[in=100,out=300] (tikzpeople@tmp13) to[in=260,out=50] (tikzpeople@tmp6) to[in=100,out=300] (tikzpeople@tmp17)
+ to[in=260,out=50] (tikzpeople@tmp10) -- (tikzpeople@tmp11) to[in=50,out=260] (tikzpeople@tmp18)
+ to[in=300,out=100] (tikzpeople@tmp7) to[in=50,out=260] (tikzpeople@tmp14) to[in=300,out=100] (tikzpeople@tmp3) --
+ (tikzpeople@tmp4) to[in=100,out=300] (tikzpeople@tmp15) to[in=260,out=50] (tikzpeople@tmp8)
+ to[in=100,out=300] (tikzpeople@tmp19) -- (tikzpeople@tmp20) to[in=300,out=100] (tikzpeople@tmp9)
+ to[in=50,out=260] (tikzpeople@tmp16) to[in=300,out=100] (tikzpeople@tmp5) to[in=50,out=260](tikzpeople@tmp12)
+ to[in=300,out=100](tikzpeople@tmp1) --cycle;
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@jester@painthat}{
+ \begin{scope}
+ \pgftransformrotate{10}
+ \draw[hat]
+ (180:3.2pt) to[out=60,in=60] ++(91:3pt) to[out=240,in=90] ++(271:.9pt)
+ to[out=270,in=85] ++(268:.9pt) coordinate (tikzpeople@tmp1) to[out=130,in=170]
+ ++(73:4pt) to[out=350,in=180] (.5pt,3.3pt) to[out=0,in=200] ++(45:2.5pt)
+ to[out=20,in=80] ++(290:4pt) coordinate (tikzpeople@tmp2) to[out=100,in=75]
+ ++(120:2.1pt) to[out=255,in=100] (0:3.1pt) to[out=170,in=10] (180:3.1pt);
+ \path[pattern]
+ (0:3.2pt) ++(0,-.2pt) to[out=170,in=10] ++(180:6.4pt) to[out=110,in=250]
+ ++(0,1.2pt) to[out=10,in=170] ++(0:6.4pt) to[out=290,in=70] ++(0,-1.22pt)
+ --cycle;
+ \begin{scope}
+ \clip (tikzpeople@tmp1) circle (.4pt) (tikzpeople@tmp2) circle (.4pt);
+ \path[details] (tikzpeople@tmp1) ++(-.15pt,.15pt) circle (.7pt);
+ \path[details] (tikzpeople@tmp2) ++(-.15pt,.15pt) circle (.7pt);
+ \end{scope}
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@jester@definecolors}{
+ \definecolor{shirt}{RGB}{100,187,41}
+ \definecolor{pattern}{RGB}{208,48,0}
+ \definecolor{hat}{RGB}{100,187,41}
+ \definecolor{details}{RGB}{225,87,0}
+}
+\newcommand{\tikzpeople@jester@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ pattern/.style={color=\tikzpeople@pattern,top color=\tikzpeople@pattern!70, bottom color=\tikzpeople@pattern,shading angle=45},
+ details/.style={color=\tikzpeople@details,inner color=\tikzpeople@details!50, outer color=\tikzpeople@details}
+ }
+ \else
+ \tikzset{
+ pattern/.style={color=\tikzpeople@pattern!80,top color=\tikzpeople@pattern!40, bottom color=\tikzpeople@pattern!80,shading angle=45},
+ details/.style={color=\tikzpeople@details,inner color=\tikzpeople@details!30, outer color=\tikzpeople@details!90}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@jester@colors}{
+ shirt/200/{-1/-1}, hat/40/{.7/1.9}, skin/20/{.6/.9},
+ details/150/{.85/1.45,-1.05/1.1}, pattern/0/{-.4/1.1,.9/-.2},
+ hair/180/{-.6/.75}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.judge.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.judge.sty
new file mode 100644
index 0000000000..c1539ee9dd
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.judge.sty
@@ -0,0 +1,116 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{hairshadow}
+
+\newcommand{\tikzpeople@judge@paint}{
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@judge@paintlefthair
+ \tikzpeople@person@paintshirt
+ \tikzpeople@judge@paintundershirt
+ \tikzpeople@person@painthead
+ \tikzpeople@judge@paintrighthair
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@judge@definecolors}{
+ \definecolor{shirt}{RGB}{0,0,0}
+ \definecolor{undershirt}{rgb}{0.9,0.9,0.9}
+ \definecolor{hair}{RGB}{204,161,107}
+ \definecolor{hairshadow}{RGB}{186, 137, 55}
+}
+
+\newcommand{\tikzpeople@judge@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ hairshadow/.style={color=\tikzpeople@hairshadow}
+ }
+ \else
+ \tikzset{
+ hairshadow/.style={color=\tikzpeople@hairshadow}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@judge@paintlefthair}{
+ \draw[hair,join=bevel, shading angle=45]
+ (25:2.7pt) to[out=330,in=80,out looseness=.5] (3.3pt,-3pt) -- (2pt,-3pt);
+ \path[postaction={decorate},decoration={
+ markings,
+ mark=between positions 0.03 and 1 step .76pt*\scalingfactor with {\pgftransformscale{\scalingfactor}
+ \if@tikzpeople@mirrored
+ \pgftransformyscale{-1}
+ \fi
+ \path[fill=\tikzpeople@hairshadow]
+ (.39pt,-.06pt) ellipse
+ (.39pt and .27pt + 0.02*\pgfkeysvalueof{/pgf/decoration/mark info/sequence number});
+ \path[fill=\tikzpeople@hair\if@tikzpeople@saturated!80\else!50\fi,draw=\tikzpeople@hairshadow]
+ (.39pt,0pt) ellipse
+ (.39pt and .27pt +0.02*\pgfkeysvalueof{/pgf/decoration/mark info/sequence number});
+ }
+ }] (25:2.7pt) to[out=320,in=80,out looseness=.5] (3.3pt,-3pt);
+}
+
+\newcommand{\tikzpeople@judge@paintrighthair}{
+ \fill[hairshadow]
+ (10:3.05pt) arc (10:135:3.05pt) -- (-1pt,.4pt)
+ to[out=60,in=160,out looseness=1.4] (.9pt,1pt)
+ to[out=40,in=95,out looseness=1.4] (10:3.05pt);
+ \path[decorate, decoration={markings,
+ mark=at position .165 with {\coordinate (tikzpeople@tmp1) at (0,\if@tikzpeople@mirrored -1*\fi\scalingfactor*.2pt);},
+ mark=at position .330 with {\coordinate (tikzpeople@tmp2) at (0,\if@tikzpeople@mirrored -1*\fi\scalingfactor*.2pt);},
+ mark=at position .495 with {\coordinate (tikzpeople@tmp3) at (0,\if@tikzpeople@mirrored -1*\fi\scalingfactor*.2pt);},
+ mark=at position .660 with {\coordinate (tikzpeople@tmp4) at (0,\if@tikzpeople@mirrored -1*\fi\scalingfactor*.2pt);},
+ mark=at position .825 with {\coordinate (tikzpeople@tmp5) at (0,\if@tikzpeople@mirrored -1*\fi\scalingfactor*.2pt);},
+ }] (150:3.1pt) to[out=240,in=120,in looseness=.3] (220:4.8pt);
+ \draw[hair,join=bevel, shading angle=-45, postaction={decorate},decoration={
+ markings,
+ mark=between positions 0.614 and 0.82 step .84pt*\scalingfactor with {
+ \pgftransformscale{\scalingfactor}
+ \if@tikzpeople@mirrored
+ \pgftransformyscale{-1}
+ \fi
+ \fill[\tikzpeople@hairshadow]
+ (-.06pt,0) to[out=70,in=190+2*\pgfkeysvalueof{/pgf/decoration/mark info/sequence number},out looseness=.8]
+ ++(46.5+2*\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}:3.7pt-.27pt*\pgfkeysvalueof{/pgf/decoration/mark info/sequence number})
+ to[out=190+2*\pgfkeysvalueof{/pgf/decoration/mark info/sequence number},in=70,in looseness=.8] (.05pt,0);
+ \path[fill=\tikzpeople@hairshadow] (.33pt,0pt) circle (.43pt);
+ \path[fill=\tikzpeople@hair\if@tikzpeople@saturated!80\else!50\fi,draw=\tikzpeople@hairshadow]
+ (.31pt,-.025pt) circle (.37pt);
+ }
+ }] (10:3pt) to[out=90,in=300] (30:3.1pt) arc (30:150:3.1pt) to[out=190,in=140] (tikzpeople@tmp1)
+ to[out=150,in=135] (tikzpeople@tmp2) to[out=155,in=140] (tikzpeople@tmp3) to[out=160,in=145] (tikzpeople@tmp4)
+ to[out=165,in=150] (tikzpeople@tmp5) to[out=170,in=120] (220:4.8pt) to [out=300,in=160,out looseness=1] (260:4.8pt)
+ to [out=100,in=260,out looseness=1] (-1pt,.6pt) to [out=80,in=160,out looseness=1.4] (.9pt,1.4pt)
+ to [out=40,in=92,in looseness=1.1,out looseness=1.6] (10:3pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@judge@paintundershirt}{
+ \begin{scope}
+ \draw[undershirt] (320:3pt) to[out=320,in=0, out looseness=1.5] (295:6.8pt)
+ to[out=290,in=310,looseness=1.3] ++(-1.1pt,-.7pt)
+ to[out=250,in=300,looseness=1.4] ++(-1.2pt,-.2pt)
+ to[out=220,in=280,looseness=1.4] ++(-1.2pt,.3pt)
+ to[out=220,in=260,looseness=1.4] ++(-1.1pt,.5pt)
+ to[out=190,in=230, in looseness=1.3] (235:3pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@judge@colors}{
+ shirt/200/{-1/-1},hair/160/{-.5/1.4},hairshadow/20/{.25/1.3}, skin/0/{.25/.4},
+ undershirt/180/{-.6/-.6}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.maninblack.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.maninblack.sty
new file mode 100644
index 0000000000..d9e5136f9b
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.maninblack.sty
@@ -0,0 +1,119 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{tie}
+\tikzpeople@addcolorkey{glasses}
+\tikzpeople@addcolorkey{earpiece}
+
+\newcommand{\tikzpeople@maninblack@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@maninblack@paintundershirt
+ \tikzpeople@maninblack@paintopenshirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@maninblack@paintglasses
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@maninblack@definecolors}{
+ \definecolor{shirt}{rgb}{0,0,0}
+ \definecolor{undershirt}{rgb}{0.9,0.9,0.9}
+ \definecolor{tie}{rgb}{0,0,0}
+ \definecolor{hair}{rgb}{0,0,0}
+ \definecolor{earpiece}{rgb}{0.9,0.9,0.9}
+ \definecolor{glasses}{rgb}{0,0,.1}
+}
+
+\newcommand{\tikzpeople@maninblack@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ tie/.style ={color=\tikzpeople@tie,top color=\tikzpeople@tie!70, bottom color=\tikzpeople@tie,shading angle=45},
+ glasses/.style ={color=\tikzpeople@glasses,top color=\tikzpeople@glasses!70, bottom color=\tikzpeople@glasses,shading angle=45},
+ earpiece/.style ={color=\tikzpeople@earpiece,top color=\tikzpeople@earpiece!70, bottom color=\tikzpeople@earpiece,shading angle=45},
+ earpiececable/.style={color=\tikzpeople@earpiece,decoration={coil,segment length=\scalingfactor*.12pt,amplitude=\scalingfactor*.1pt, pre length=\scalingfactor*.1pt},decorate,line width=\scalingfactor*.05pt}
+ }
+ \else
+ \tikzset{
+ tie/.style ={color=\tikzpeople@tie!80,top color=\tikzpeople@tie!40, bottom color=\tikzpeople@tie!80,shading angle=45},
+ glasses/.style ={color=\tikzpeople@glasses!90,top color=\tikzpeople@glasses!50, bottom color=\tikzpeople@glasses!90,shading angle=45},
+ earpiece/.style ={color=\tikzpeople@earpiece!80,top color=\tikzpeople@earpiece!40, bottom color=\tikzpeople@earpiece!80,shading angle=45},
+ earpiececable/.style={color=\tikzpeople@earpiece!80,decoration={coil,segment length=\scalingfactor*.12pt,amplitude=\scalingfactor*.1pt, pre length=\scalingfactor*.1pt},decorate,line width=\scalingfactor*.05pt}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@maninblack@paintglasses}{
+ \draw[glasses]
+ (170:1.1pt) -- ++(173:1.8pt) -- ++(270:.1pt) to[out=340, in=140] (210:1pt);
+ \draw[glasses]
+ (15:3pt) to[out=200,in=355] (170:1.1pt) to[out=280,in=180] ++(290:1.05pt)
+ to[out=350,in=180,out looseness=3] (1.3pt,.1pt)
+ to[out=0,in=180,in looseness=2] ++(310:1pt) to[out=0,in=230,in looseness=.5]
+ (357:3pt) arc (-3:15:3pt);
+ \begin{scope}
+ \clip (0pt,0pt) circle (3pt);
+ \draw[earpiececable]
+ (190:2.1pt) ++(0,-.2pt) to[out=270,in=120] (240:3.2pt);
+ \draw[earpiece] (190:2.1pt) ellipse (.1pt and .2pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@maninblack@paintundershirt}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[undershirt]
+ (-2.2pt,-1pt) -- (2pt,-8.5pt) -- (2pt,-1pt);
+ \draw[tie]
+ (0pt,-2.5pt) -- (0.8pt,-3.2pt) -- (1.1pt,-6 pt) -- (1.7pt,-8.7pt) --
+ (2pt,-8.7pt) -- (2 pt,-5.5pt) -- (1 pt,-3.1pt) -- (1.2pt,-2 pt) --
+ (0.3pt,-2 pt);
+ \draw[undershirt,shading angle=-45]
+ (0.5pt,-3pt) -- (0.1pt,-3.7pt) -- (-1pt,-3pt);
+ \draw[undershirt,shading angle=-45]
+ (0.9pt,-2.5pt) -- (1.8pt,-3.2pt) -- (2.2pt,-2.2pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@maninblack@paintopenshirt}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[shirt,shading angle=-45]
+ (-2pt,-2.6 pt) -- (-1.5pt,-5pt) -- (-0.5pt,-5pt) -- (-1.1pt,-5.2pt) --
+ (1.6pt,-8.75pt) -- (1.9pt,-8.75pt) .. controls (1.7pt,-7pt) and
+ (-0pt,-3.2pt) .. (-1.6pt,-2pt) -- cycle;
+ \draw[shirt,shading angle=-45]
+ (1.9pt,-2pt) .. controls (1.9pt,-1.8pt) and (1.9pt,-8.5pt) ..
+ (1.9pt,-8.75pt) -- (2.3pt,-8.5pt) -- (3.2pt,-5.2pt) --
+ (2.6pt,-5.2 pt) -- (3.2pt,-5 pt) -- (2.3pt,-2.3pt) -- cycle;
+ \end{scope}
+ \draw[color=\tikzpeople@shirt!80]
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4pt,-8pt);
+}
+
+\newcommand{\tikzpeople@maninblack@colors}{
+ shirt/210/{-1/-.75},hair/150/{-.4/1.3},skin/0/{.4/.5},earpiece/170/{-.68/.74},
+ undershirt/190/{0/-.2}, tie/330/{.32/-.7}, glasses/30/{.6/.9}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.mexican.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.mexican.sty
new file mode 100644
index 0000000000..590635cec4
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.mexican.sty
@@ -0,0 +1,114 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{ringtop}
+\tikzpeople@addcolorkey{ringmid}
+\tikzpeople@addcolorkey{ringbot}
+
+\newcommand{\tikzpeople@mexican@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@mexican@paintrings
+ \tikzpeople@person@painthead
+ \tikzpeople@mexican@painthair
+ \tikzpeople@mexican@painthat
+ \tikzpeople@person@paintgoatee
+}
+
+\newcommand{\tikzpeople@mexican@definecolors}{
+ \definecolor{hair}{rgb}{0,0,0}
+ \definecolor{shirt}{rgb}{0,0.3,0}
+ \definecolor{ringtop}{rgb}{1,1,0}
+ \definecolor{ringmid}{rgb}{0,0.8,1}
+ \definecolor{ringbot}{rgb}{1,0,0}
+ \definecolor{hat}{rgb}{0.7,0,0}
+}
+
+\newcommand{\tikzpeople@mexican@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ ringtop/.style ={top color=\tikzpeople@ringtop!80, bottom color=\tikzpeople@ringtop,shading angle=45},
+ ringmid/.style ={top color=\tikzpeople@ringmid!80, bottom color=\tikzpeople@ringmid,shading angle=45},
+ ringbot/.style ={top color=\tikzpeople@ringbot!80, bottom color=\tikzpeople@ringbot,shading angle=45},
+ innerhat/.style={color=\tikzpeople@hat,top color=\tikzpeople@hat!80, bottom color=\tikzpeople@hat,shading angle=45}
+ }
+ \else
+ \tikzset{
+ ringtop/.style ={top color=\tikzpeople@ringtop!80, bottom color=\tikzpeople@ringtop,shading angle=45},
+ ringmid/.style ={top color=\tikzpeople@ringmid!80, bottom color=\tikzpeople@ringmid,shading angle=45},
+ ringbot/.style ={top color=\tikzpeople@ringbot!80, bottom color=\tikzpeople@ringbot,shading angle=45},
+ innerhat/.style={color=\tikzpeople@hat!80,top color=\tikzpeople@hat!60, bottom color=\tikzpeople@hat,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@mexican@painthair}{
+ \draw[hair]
+ (-3.5pt, 1 pt) .. controls (-3.3pt, 0pt) and (-4.3pt,-1.1pt) ..
+ (-4.5pt,-1.3pt) .. controls (-3.8pt,-2pt) and (-2 pt,-2.9pt) ..
+ (-1.2pt,-3.3pt) .. controls (-1.6pt,-2pt) and (-1.6pt, 0 pt) ..
+ (-1.3pt, 1 pt);
+}
+
+\newcommand{\tikzpeople@mexican@painthat}{
+ {
+ \pgftransformrotate{4}
+ \draw[hat] (-0.3pt,2pt) ellipse (6.4pt and 2.2pt);
+ \draw[innerhat] (-0.3pt,2.5pt) ellipse (5.4pt and 1.3pt);
+ }{
+ \pgftransformrotate{1}
+ \draw[hat]
+ (-3 pt,2.3pt) .. controls (-3 pt,4.5pt) and (-1.4pt,6.7pt) ..
+ (-0.7pt,6.7pt) .. controls ( 0.2pt,6.7pt) and ( 2.3pt,3.5pt) ..
+ ( 1.9pt,2.7pt) .. controls ( 1.2pt,2 pt) and (-2.3pt,1.8pt) ..
+ (-3 pt,2.3pt);
+ }
+}
+
+\newcommand{\tikzpeople@mexican@paintrings}{
+ \begin{scope}
+ \clip (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4pt,-8pt);
+ \shade[ringtop]
+ (-3.4 pt,-4pt) .. controls (-2.0pt,-6.0pt) and ( 3pt,-5 pt) ..
+ ( 3.85pt,-3.5pt) .. controls ( 3.6pt,-3.1pt) ..
+ ( 3.4 pt,-3 pt) .. controls ( 3 pt,-4.2pt) and (-2pt,-5.3pt) .. (-3pt,-3.4pt);
+ \draw[color=\tikzpeople@ringtop,dash pattern=on 0 off 0.2*\scalingfactor,line width=0.08*\scalingfactor,line cap=round]
+ (-3.4 pt,-4.2pt) .. controls (-2pt,-6.2pt) and (3pt,-5.2pt) ..
+ ( 3.85pt,-3.7pt);
+
+ \shade[ringmid]
+ (-4pt,-5.4pt) .. controls (-2pt,-7.5pt) and (3pt,-6.5pt) ..
+ (4.6pt,-4.65pt) -- (4.25 pt,-3.95pt) .. controls (3pt,-5.7pt) and
+ (-2pt,-6.7pt) .. (-3.8pt,-4.7pt);
+ \draw [color=\tikzpeople@ringmid,dash pattern=on 0 off 0.2*\scalingfactor,line width=0.08*\scalingfactor,line cap=round]
+ (-4pt,-5.6pt) .. controls (-2pt,-7.7pt) and (3pt,-6.7pt) .. (4.6pt, -4.8pt);
+
+ \shade [ringbot]
+ (-4.1pt,-6.9pt) .. controls (-2pt,-9pt) and (3pt,-8pt) .. (5pt, -5.9pt) --
+ (4.8pt,-5.15pt) .. controls (3pt,-7.2pt) and (-2pt,-8.2pt) .. (-4.1pt,-6.1pt);
+ \draw [color=\tikzpeople@ringbot,dash pattern=on 0 off 0.2*\scalingfactor,line width=0.08*\scalingfactor,line cap=round]
+ (-4.1pt,-7.1pt) .. controls (-2pt,-9.2pt) and (3pt,-8.2pt) .. (5pt, -6.1pt);
+ \end{scope}
+ \draw[color=\tikzpeople@shirt\if@tikzpeople@saturated\else!80\fi]
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4pt,-8pt);
+}
+
+\newcommand{\tikzpeople@mexican@colors}{
+ shirt/350/{.5/0}, hat/30/{1/1.25}, hair/150/{-1.1/.5}, skin/10/{.35/.5},
+ ringtop/170/{-.9/-.25}, ringmid/190/{-1/-.7}, ringbot/210/{-1.1/-1.1}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nun.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nun.sty
new file mode 100644
index 0000000000..7898f81642
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nun.sty
@@ -0,0 +1,85 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{plaid}
+
+\newcommand{\tikzpeople@nun@paint}{
+ \tikzpeople@nun@paintshirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@nun@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@nun@definecolors}{
+ \definecolor{shirt}{rgb}{0,0,0}
+ \definecolor{hat}{rgb}{0,0,0}
+ \definecolor{plaid}{RGB}{232,232,232}
+ \definecolor{hair}{rgb}{0,0,0}
+}
+
+\newcommand{\tikzpeople@nun@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ plaid/.style={top color=\tikzpeople@plaid!70, bottom color=\tikzpeople@plaid,shading angle=45}
+ }
+ \else
+ \tikzset{
+ plaid/.style={top color=\tikzpeople@plaid!30, bottom color=\tikzpeople@plaid!90,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@nun@painthat}{
+ \begin{scope}
+ \clip(0,0) circle (3.05pt);
+ \path[plaid,draw=none]
+ ( -1.3pt, -0.1pt) .. controls (0pt,-0.1pt) and (2pt,0.2pt) ..
+ (10:3.2pt) arc (10:180:3.2pt) -- cycle;
+ \end{scope}
+ \draw[hat]
+ (15:3.05pt) arc (15:170:3.05pt) --
+ (-3.05pt, 0.2pt) .. controls (-3.3pt,-1.0pt) and (-3.3pt,-2.3pt) ..
+ (-3.2pt,-3.6pt) .. controls (-2.7pt,-4.0pt) and (-1.7pt,-4.3pt) ..
+ (-1.2pt,-4.5pt) .. controls (-1.6pt,-2.0pt) and (-1.6pt, 0.0pt) ..
+ (-1.3pt, 0.2pt) .. controls ( 0.0pt, 0.1pt) and ( 2.0pt, 0.5pt) ..
+ (15:3.05pt);
+}
+
+\newcommand{\tikzpeople@nun@paintshirt}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4pt,-8pt);
+ \path[shirt]
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4pt,-8pt);
+ \path[plaid]
+ (-3.9 pt, 0.0pt) -- (-3.9pt,-5.5pt) .. controls (-2pt,-7.5pt) and
+ (3pt,-6.5pt) .. ( 4.55pt,-4.7pt) .. controls (4.45pt,-4.3pt) ..
+ ( 4.2 pt,-4.0pt) -- (4.2pt,0pt);
+ \end{scope}
+ \draw[color=\tikzpeople@shirt\if@tikzpeople@saturated\else!80\fi]
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) .. ( 5pt,-7pt) ..
+ controls ( 5pt, 0pt) and (-5pt, 0pt) .. (-4pt,-8pt);
+}
+
+\newcommand{\tikzpeople@nun@colors}{
+ shirt/190/{-1/-1.2}, hat/170/{-.65/.7}, skin/20/{.6/.9}, plaid/340/{.9/-.4,.1/.9}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nurse.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nurse.sty
new file mode 100644
index 0000000000..4d0fff06a6
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.nurse.sty
@@ -0,0 +1,89 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{badge}
+\tikzpeople@addcolorkey{badgeclip}
+\tikzpeople@addcolorkey{badgename}
+\tikzpeople@addcolorkey{redcross}
+\tikzpeople@addtextkey{badgetext}{Nurse}
+
+\newcommand{\tikzpeople@nurse@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@nurse@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthairstyletwo
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@nurse@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[skin]
+ (245:3pt) .. controls (1pt,-4.85pt) .. (1.3pt,-4.85pt) .. controls
+ (1.7pt,-4.6pt) .. (311:3pt) -- cycle;
+ \draw[shirt,shading angle=-45]
+ (-.1pt,-7.2pt) to[out=204,in=348] (-2.5pt,-7.2pt) -- ++(270:1.3pt) arc
+ (180:360:1.2pt) --cycle;
+ \draw[color=\tikzpeople@shirt!90!black,thick]
+ (-.1pt,-7.2pt) to[out=204,in=348] (-2.5pt,-7.2pt);
+ \draw[badge]
+ (-.4pt,-7.6pt) to[out=185,in=355] (-2.1pt,-7.6pt) -- ++(270:.7pt)
+ to[out=355,in=185] (-.4pt,-8.3pt) --cycle;
+ \draw[badgeclip]
+ (-1.1pt,-7.3pt) rectangle ++(-.2pt,-.4pt);
+ \draw[draw=\tikzpeople@redcross,fill=\tikzpeople@redcross]
+ (-1.8pt,-7.8pt) -- ++(0pt,-.1pt) -- ++(-.1pt,0pt) -- ++(0pt,-.1pt) --
+ ++(.1pt,0pt) -- ++(0pt,-.1pt) -- ++(.1pt,0pt) -- ++(0pt,.1pt) --
+ ++(.1pt,0pt) -- ++(0pt,.1pt) -- ++(-.1pt,0pt) -- ++(0pt,.1pt) --cycle;
+ {
+ \pgf@xa=0.6pt*\scalingfactor
+ \pgftext[at=\pgfpoint{-1pt}{-7.95pt}]{\resizebox{\pgf@xa}{!}{\color{\tikzpeople@badgename}\if@tikzpeople@mirrored\reflectbox{\tikzpeople@badgetext}\else{\tikzpeople@badgetext}\fi}}
+ }
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@nurse@definecolors}{
+ \definecolor{shirt}{RGB}{237,113,102}
+ \definecolor{badgename}{rgb}{0,0,0}
+ \definecolor{badge}{rgb}{1,1,1}
+ \definecolor{badgeclip}{rgb}{0.4,0.4,0.4}
+ \definecolor{redcross}{rgb}{1,0,0}
+ \definecolor{hair}{rgb}{0,0,0}
+}
+\newcommand{\tikzpeople@nurse@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ badge/.style={fill=\tikzpeople@badge,draw=\tikzpeople@badge!30!black},
+ badgeclip/.style={top color=\tikzpeople@badgeclip!70, bottom color=\tikzpeople@badgeclip,shading angle=45,rounded corners=.08*\scalingfactor}
+ }
+ \else
+ \tikzset{
+ badge/.style={fill=\tikzpeople@badge,draw=\tikzpeople@badge!30!black},
+ badgeclip/.style={top color=\tikzpeople@badgeclip!30, bottom color=\tikzpeople@badgeclip,shading angle=45,rounded corners=.08*\scalingfactor}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@nurse@colors}{
+ shirt/0/{.9/-.35}, hair/150/{-.75/.9}, badgeclip/170/{-.45/-1.2},
+ redcross/190/{-.6/-1.35}, badge/210/{-.5/-1.4}, badgename/340/{-.4/-1.35},
+ skin/20/{.6/.6}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.physician.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.physician.sty
new file mode 100644
index 0000000000..dbcbc50030
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.physician.sty
@@ -0,0 +1,104 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{stethoscope}
+\tikzpeople@addcolorkey{tube}
+
+\newcommand{\tikzpeople@physician@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@physician@paintshirtdetails
+ \tikzpeople@physician@stethoscope
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@physician@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@physician@paintshirtdetails}{
+ \begin{scope}
+ \clip (-4pt,-8pt) .. controls (-2pt,-10pt) and (3pt,-9pt) ..
+ ( 5pt,-7pt) .. controls ( 5pt, 0pt) and (-5pt,0pt) ..
+ (-4pt,-8pt);
+ \draw[skin]
+ (245:3pt) .. controls (1pt,-4.85pt) .. (1.3pt,-4.85pt) .. controls (1.7pt,-4.6pt) .. (311:3pt) -- cycle;
+ \draw[shirt,shading angle=-45] (-.1pt,-7.2pt) to[out=204,in=348] (-2.5pt,-7.2pt) -- ++(270:1.3pt) arc (180:360:1.2pt) --cycle;
+ \draw[color=\tikzpeople@shirt!90!black,thick] (-.1pt,-7.2pt) to[out=204,in=348] (-2.5pt,-7.2pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@physician@painthat}{
+ \draw[hat] (160:3pt) ++(.3pt,1.6pt) -- (160:3pt) arc (-180:0:2.85pt and 1pt) -- ++(-.3pt,1.6pt) arc (0:180:2.55pt and 1pt) arc (-180:0:2.55pt and 1pt);
+}
+
+\newcommand{\tikzpeople@physician@stethoscope}{
+ \draw[tube]
+ (234:2.9pt) ++(295:1.3pt) ++(323:1.8pt) to[out=318,in=135] ++(321:1.4pt)
+ to[in=225,out=315] ++(10:.5pt) to[out=55,in=260] ++(84:1.3pt) --
+ ++(350:.3pt) to[out=260,in=55] ++(264:1.7pt) to[out=235,in=90] ++(210:.3pt)
+ -- ++(270:3.2pt) .. controls +(270:1pt) and +(285:1pt) .. ++(-1.9pt,-.2pt)
+ to[out=105, in=292] (-.7pt,-7.4pt) -- ++(-.4pt,0) arc (180:18:.39pt)
+ to[out=288, in=105] ++(288:2pt) .. controls +(285:.7pt) and +(270:.7pt) ..
+ ++(7:1.2pt) -- ++(90:3pt) to[out=100,in=325] ++(140:.6pt) to[out=145,in=315]
+ ++(135:1pt);
+ \draw[stethoscope]
+ (234:2.9pt) ++(295:1.3pt) ++(321:2.2pt) .. controls +(323:.6pt) and
+ +(260:.6pt) .. ++(17:1.55pt) -- +(.15pt,0) .. controls +(260:.8pt) and
+ +(323:.8pt) .. ++(197:1.7pt);
+ \draw[stethoscope]
+ (234:2.9pt) to[out=270,in=135] ++(295:1.3pt) to[out=315,in=143]
+ ++(323:1.8pt) coordinate (tikzpeople@tmp) -- ++(233:.3pt) to[in=315,out=143]
+ ++(143:1.9pt) to[in=270,out=135] ++(110:2pt);
+ \draw[stethoscope]
+ (tikzpeople@tmp) ++(0,.06pt) coordinate (tikzpeople@tmp2) to[out=225,in=61] ++(233:.4pt) --
+ ++(323:.5pt) coordinate (tikzpeople@tmp) to[in=241,out=45] ++(53:.4pt) (tikzpeople@tmp)
+ to[in=225,out=61] ++(53:.4pt) --(tikzpeople@tmp2);
+ \draw[stethoscope]
+ (314:2.9pt) to[out=308,in=87] ++(307:.4pt) to[out=273,in=80] ++(263:1.6pt)
+ coordinate (tikzpeople@tmp) -- ++(353:.3pt) to[in=273,out=80] ++(83:1.7pt)
+ to[in=270,out=93] ++(120:.7pt);
+ \draw[stethoscope]
+ (tikzpeople@tmp) ++(-.04pt,.06pt) coordinate (tikzpeople@tmp2) to[out=358,in=162] ++(350:.4pt) --
+ ++(260:.5pt) coordinate (tikzpeople@tmp) to[in=358,out=162] ++(170:.4pt) --(tikzpeople@tmp2);
+}
+
+\newcommand{\tikzpeople@physician@definecolors}{
+ \definecolor{shirt}{RGB}{150,176,228}
+ \definecolor{hat}{RGB}{150,176,228}
+ \definecolor{stethoscope}{RGB}{149,153,164}
+ \definecolor{tube}{RGB}{193,75,26}
+ \definecolor{hair}{rgb}{0,0,0}
+}
+
+\newcommand{\tikzpeople@physician@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ tube/.style={color=\tikzpeople@tube,top color=\tikzpeople@tube!70, bottom color=\tikzpeople@tube,shading angle=45},
+ stethoscope/.style={color=\tikzpeople@stethoscope,top color=\tikzpeople@stethoscope!70, bottom color=\tikzpeople@stethoscope,shading angle=45}
+ }
+ \else
+ \tikzset{
+ tube/.style={color=\tikzpeople@tube!80,top color=\tikzpeople@tube!40, bottom color=\tikzpeople@tube!80,shading angle=45},
+ stethoscope/.style={color=\tikzpeople@stethoscope!80,top color=\tikzpeople@stethoscope!40, bottom color=\tikzpeople@stethoscope!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@physician@colors}{
+ shirt/340/{1/-.75}, hair/160/{-.75/.9}, hat/20/{.5/1.3},
+ stethoscope/180/{-.48/-.15}, tube/200/{-.25/-1.2}, skin/0/{.3/.6}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.pilot.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.pilot.sty
new file mode 100644
index 0000000000..80213e9c29
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.pilot.sty
@@ -0,0 +1,106 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+\tikzpeople@addcolorkey{visor}
+\tikzpeople@addcolorkey{straps}
+
+\newcommand{\tikzpeople@pilot@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@pilot@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@pilot@painthat
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@pilot@paintvisor
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@pilot@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and (3pt,-9pt) .. (5.0pt,-7.0pt)
+ .. controls ( 5pt, 0pt) and (-5pt, 0pt) .. (-4.0pt,-8.0pt);
+ \draw[details,thick]
+ (220:3pt)++(4pt,-3.5pt) .. controls +(290:1pt) and +(90:1pt) ..
+ ++(280:4pt);
+ \draw[straps,shading angle=-45]
+ (278:7pt) -- ++(16:3pt) -- ++(0,-0.8pt) -- ++(197:3pt) -- cycle;
+ \draw[straps]
+ (230:3pt) .. controls +(2pt,-3pt) and +(0,2.5pt) .. ++(2.25pt,-7pt) --
+ ++(1pt,0) .. controls +(0,2.5pt) and +(2pt,-3pt) .. +(-2.25pt,7pt) --cycle;
+ \draw[straps]
+ (300:2pt) .. controls +(2pt,-3pt) and +(0,2.5pt) .. ++(2.25pt,-7pt) --
+ ++(1pt,0) .. controls +(0,2.5pt) and +(2pt,-3pt) .. +(-2.25pt,7pt) --cycle;
+ \end{scope}
+ \draw[shirt,shading angle=-45]
+ (220:3pt) .. controls +(-0.4pt,-1.5pt) .. ++(0.5pt,-3pt) .. controls
+ +(1pt,0.5pt) .. ++(3.5pt,-0.5pt) .. controls +(1pt,1.5pt) .. ++(2.3pt,2.2pt)
+ .. controls +(135:1.5pt) .. (320:3pt);
+ \draw[details,thick]
+ (220:3pt)++(0.5pt,-3pt) .. controls +(1pt,0.5pt) .. ++(3.5pt,-0.5pt) ..
+ controls +(1pt,1.5pt) .. ++(2.3pt,2.2pt);
+ \draw[undershirt]
+ (225:3pt) -- ++(3.7pt,-2.9pt) --(311:3pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@pilot@paintvisor}{
+ \draw[visor,rounded corners=.4pt*\scalingfactor]
+ (155:2.5pt) to [out=40,in=170] (45:3.2pt) to [out=310,in=90] (2:3.2pt) --
+ (348:2pt) -- (40:1.3pt) -- (300:.5pt) -- (200:1.5pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@pilot@painthat}{
+ \draw[hat]
+ (5:3pt) arc (5:255:3pt) to [out=120,in=250] ++(-0.1pt,2.7pt)
+ to[out=350,in=210] (5:3pt);
+}
+
+\newcommand{\tikzpeople@pilot@definecolors}{
+ \definecolor{shirt}{rgb}{.51,0.18,0.02}
+ \definecolor{hat}{RGB}{232,232,232}
+ \definecolor{visor}{RGB}{122,150,165}
+ \definecolor{undershirt}{RGB}{99,97,96}
+ \definecolor{straps}{rgb}{0,0,0}
+ \definecolor{details}{rgb}{0.3,0.3,0.3}
+}
+
+\newcommand{\tikzpeople@pilot@definestyles}{
+ \if@tikzpeople@saturated
+ \pgfdeclareradialshading{visor}{\pgfqpoint{-15pt}{10pt}}{%
+ color(0pt)=(\tikzpeople@visor!30);
+ color(40pt)=(\tikzpeople@visor)}
+ \tikzset{
+ visor/.style ={shading=visor,color=\tikzpeople@visor},
+ details/.style={color=\tikzpeople@details},
+ straps/.style ={color=\tikzpeople@straps,top color=\tikzpeople@straps!20, bottom color=\tikzpeople@straps!50,shading angle=45}
+ }
+ \else
+ \pgfdeclareradialshading{visor}{\pgfqpoint{-15pt}{10pt}}{%
+ color(0pt)=(\tikzpeople@visor!20);
+ color(40pt)=(\tikzpeople@visor!80)}
+ \tikzset{
+ visor/.style ={shading=visor,color=\tikzpeople@visor!80},
+ details/.style={color=\tikzpeople@details!80},
+ straps/.style ={color=\tikzpeople@straps!60,top color=\tikzpeople@straps!5, bottom color=\tikzpeople@straps!20,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@pilot@colors}{
+ shirt/200/{-1/-.95}, visor/30/{.7/1.1}, hat/160/{-.75/.9}, skin/10/{.5/.6},
+ undershirt/180/{.15/-.1}, straps/350/{.8/-.5}, decoration/330/{.35/-.7}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.police.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.police.sty
new file mode 100644
index 0000000000..40534b1dfe
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.police.sty
@@ -0,0 +1,117 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{hatshield}
+\tikzpeople@addcolorkey{hatbadge}
+\tikzpeople@addcolorkey{badge}
+
+\newcommand{\tikzpeople@police@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@police@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@police@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@police@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) .. (-4.0pt,-8.0pt);
+ \draw[shirt,color=black!85,shading angle=-45]
+ (220:3.5pt) .. controls +(0.05pt,-1.5pt) .. ++(0.5pt,-3pt) .. controls
+ +(1.3pt,0.8pt) .. ++(3pt,0.5pt) .. controls +(1pt,0.6pt) .. ++(3pt,0.8pt)
+ .. controls +(-0.5pt,0.9pt) .. (315:3.3pt);
+ \draw[undershirt]
+ (180:3pt) ++(-0.5pt,-1pt) -- (1.5pt,-6pt) -- (300:4pt)-- ++(0pt,1pt);
+ \fill[draw,color=black!85]
+ (1.6pt,-6.1pt) -- ++(0.1pt,-1.5pt) -- ++(0.05pt,.75pt);
+ \draw[color=black!85] (1.6pt,-6.1pt) -- +(1pt,5pt);
+ \draw[skin] (222:3pt) -- (267:4pt) arc (267:300:4pt) -- ++(0.5pt,2pt);
+ \end{scope}
+ \draw[badge,shading angle=-45]
+ (70:-7pt) .. controls +(0.75pt,-0.05pt) .. ++(1.5pt,0.1pt) --
+ ++(0.2pt,-0.15pt) .. controls +(-.5pt,-.5pt) .. ++(0.1pt,-.8pt) .. controls
+ +(0.5pt,-.5pt) and +(0pt,0.35pt) .. ++(-1pt,-1pt) .. controls +(0pt,0.35pt)
+ and +(-0.5pt,-0.35pt) .. ++(-.8pt,1pt) .. controls +(0.3pt,0.2pt) ..
+ ++(0pt,.5pt) -- (70:-7pt);
+}
+
+\newcommand{\tikzpeople@police@painthat}{
+ \path (160:3pt) arc (-180:-120:2.85pt and 1pt) coordinate (tikzpeople@tmp);
+ \draw[hatbottom,rounded corners=.75pt]
+ (tikzpeople@tmp) -- ++(340:1.5pt) .. controls ++(340:1pt) .. ++(10:3.8pt) ..
+ controls ++(45:.2pt) .. (20:3pt);
+ \draw[hatbottom]
+ (160:3pt) ++(0pt,1pt) -- (160:3pt) arc (-180:0:2.85pt and 1pt) --
+ ++(0pt,1pt);
+ \draw[hattop,rounded corners=.75pt]
+ (160:3pt) ++(0pt,0.5pt) arc (-180:-22:3pt and 1.05pt) -- ++(1pt,1.5pt) --
+ ++(0pt,.4pt) .. controls +(-4pt,.5pt) .. (142:4.8pt) -- ++(0pt,-0.5pt) --
+ cycle;
+ \begin{scope}
+ \clip[rounded corners=.75pt]
+ (160:3pt) ++(0pt,0.5pt) arc (-180:-22:3pt and 1.05pt) -- ++(1pt,1.5pt) --
+ ++(0pt,.4pt) .. controls +(-4pt,.5pt) .. (142:4.8pt) -- ++(0pt,-0.5pt) --
+ cycle;
+ \draw[hatbottom,nearly opaque]
+ (153:3.5pt) ++(0pt,-2pt) -- (153:3.5pt) .. controls ++(350:1.5pt) ..
+ ++(10:2.5pt) .. controls ++(335:1.2pt) .. ++(2:2.5pt) coordinate
+ (hatbadge) .. controls ++(335:1.2pt) .. ++(10:2.5pt) -- ++(0pt,-2pt);
+ \end{scope}
+ \draw[hatbadge]
+ (hatbadge) ++(0.2pt,-0.2pt) coordinate (tikzpeople@tmp) .. controls ++(190:.5pt) ..
+ ++(200:.75pt) .. controls ++(270:.75pt) .. ++(300:1pt) .. controls
+ ++(70:.5pt) .. ++(55:1.1pt) .. controls ++(135:.3pt) .. (tikzpeople@tmp);
+}
+
+\newcommand{\tikzpeople@police@definecolors}{
+ \definecolor{shirt}{rgb}{0.18,0.38,0.80}
+ \definecolor{hat}{rgb}{0.18,0.38,0.80}
+ \definecolor{badge}{rgb}{0.96,0.55,0.1}
+ \definecolor{hatbadge}{rgb}{0.82,0.82,0.82}
+ \definecolor{hatshield}{rgb}{0.031,0.09,0.19}
+ \definecolor{undershirt}{RGB}{232,232,232}
+}
+
+\newcommand{\tikzpeople@police@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ shirt/.style ={color=\tikzpeople@shirt!90,top color=\tikzpeople@shirt!90, bottom color=\tikzpeople@shirt,shading angle=45},
+ hattop/.style ={color=\tikzpeople@hat!90,top color=\tikzpeople@hat!90, bottom color=\tikzpeople@hat,shading angle=45},
+ hatbottom/.style={color=\tikzpeople@hatshield,top color=\tikzpeople@hatshield!80, bottom color=\tikzpeople@hatshield,shading angle=45},
+ badge/.style ={color=\tikzpeople@badge,top color=\tikzpeople@badge!70, bottom color=\tikzpeople@badge,shading angle=45},
+ hatbadge/.style ={color=\tikzpeople@hatbadge,top color=\tikzpeople@hatbadge!70, bottom color=\tikzpeople@hatbadge,shading angle=45}
+ }
+ \else
+ \tikzset{
+ shirt/.style ={color=\tikzpeople@shirt!80,top color=\tikzpeople@shirt!80, bottom color=\tikzpeople@shirt,shading angle=45},
+ hattop/.style ={color=\tikzpeople@hat!80,top color=\tikzpeople@hat!80, bottom color=\tikzpeople@hat,shading angle=45},
+ hatbottom/.style={color=\tikzpeople@hatshield!80,top color=\tikzpeople@hatshield!60, bottom color=\tikzpeople@hatshield!90,shading angle=45},
+ badge/.style ={color=\tikzpeople@badge!80,top color=\tikzpeople@badge!40, bottom color=\tikzpeople@badge!80,shading angle=45},
+ hatbadge/.style ={color=\tikzpeople@hatbadge!80,top color=\tikzpeople@hatbadge!40, bottom color=\tikzpeople@hatbadge!80,shading angle=45}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@police@colors}{
+ shirt/190/{-1/-.6}, hat/150/{-.9/1.6}, hair/170/{-.75/.9}, skin/350/{.4/.4},
+ badge/210/{-.7/-1.2}, hatbadge/30/{.4/1.3}, hatshield/10/{.7/1},
+ undershirt/330/{.3/-.5}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.priest.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.priest.sty
new file mode 100644
index 0000000000..ddf2c19d0c
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.priest.sty
@@ -0,0 +1,87 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{collar}
+\tikzpeople@addcolorkey{cross}
+
+\newcommand{\tikzpeople@priest@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@priest@paintcross
+ \tikzpeople@priest@paintcollar
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@priest@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@priest@definecolors}{
+ \definecolor{skin}{rgb}{0.84,0.58,0.24}
+ \definecolor{shirt}{rgb}{0,0,0}
+ \definecolor{collar}{RGB}{232,232,232}
+ \definecolor{cross}{rgb}{1,0.8,0.09}
+ \definecolor{hair}{rgb}{0.45,0.24,0}
+ \definecolor{hat}{rgb}{0.8,0.11,0}
+}
+
+\newcommand{\tikzpeople@priest@definestyles}{
+ \tikzset{
+ collar/.style ={color=\tikzpeople@collar!80,top color=\tikzpeople@collar!30, bottom color=\tikzpeople@collar!90,shading angle=45},
+ cross/.style ={color=\tikzpeople@cross, top color=\tikzpeople@cross!80, bottom color=\tikzpeople@cross,shading angle=45},
+ necklace/.style={color=\tikzpeople@cross,dash pattern=on 0.1*\scalingfactor off 0.3*\scalingfactor,line width=0.15*\scalingfactor,cap=round}
+ }
+}
+
+\newcommand{\tikzpeople@priest@painthat}{
+ \draw[hat] (50:3pt) arc (50:140:3pt) to [out=340,in=210] (50:3pt);
+}
+
+\newcommand{\tikzpeople@priest@paintcollar}{
+ \draw[collar]
+ (230:3.4pt|-2pt,0) -- (230:3.4pt) arc (230:317:3.2pt) -- +(0,0.8pt);
+ \draw[shirt]
+ (227:3.2pt) -- +(0pt,-0.4pt) arc (227:280:3.2pt) -- +(0pt, 0.4pt) arc
+ (280:227:3.2pt);
+ \draw[shirt]
+ (-40:3.2pt) -- +(0pt,-0.4pt) arc (-40:-70:3.2pt) -- +(0pt, 0.4pt) arc
+ (-70:-40:3.2pt);
+}
+
+\newcommand{\tikzpeople@priest@paintcross}{
+ {
+ \pgftransformrotate{10}
+ \path[cross] (0.6pt,-7.2pt) -- (0.9pt,-7.2pt) -- (0.9pt,-6.3pt) --
+ (1.4pt,-6.3pt) -- (1.4pt,-6.0pt) -- (0.9pt,-6.0pt) -- (0.9pt,-5.5pt) --
+ (0.6pt,-5.5pt) -- (0.6pt,-6.0pt) -- (0.1pt,-6.0pt) -- (0.1pt,-6.3pt) --
+ (0.6pt,-6.3pt) -- (0.6pt,-7.2pt);
+ }
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+ \draw[necklace] (1.5pt,-5.3pt) .. controls (1.1pt,-5.2pt) and
+ (-1.8pt,-4.0pt) .. (-2.6pt,-2.9pt);
+ \draw[necklace] ( 1.9pt,-5.3pt) .. controls ( 2.1pt,-4.9pt) and
+ (2.8pt,-3.5pt) .. (2.9pt,-2.6pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@priest@colors}{
+ shirt/200/{-1/-1}, hat/160/{-.25/1.5}, hair/180/{-.75/1}, skin/20/{.6/.7},
+ collar/0/{.15/.05}, cross/340/{.4/-.72}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.sailor.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.sailor.sty
new file mode 100644
index 0000000000..415e688332
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.sailor.sty
@@ -0,0 +1,118 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+\tikzpeople@addcolorkey{stripes}
+
+\newcommand{\tikzpeople@sailor@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@sailor@paintundershirt
+ \tikzpeople@sailor@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@sailor@painthat
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@sailor@paintundershirt}{
+ \begin{scope}
+ \clip (233:3pt) -- (1.5pt,-6.5pt) -- (312:3pt) -- cycle;
+ \draw[undershirt] (233:3.1pt) -- (1.5pt,-6.5pt) -- (312:3.1pt) -- cycle;
+ \draw[stripes] (-0.5pt,-4pt) arc (270:300:6pt)
+ (-0.5pt,-4.7pt) arc (270:300:6pt) (-0.5pt,-5.4pt) arc (270:300:6pt)
+ (-0.5pt,-6.1pt) arc (270:300:6pt);
+ \draw[skin] (200:3.5pt) arc (200:330:3.5pt);
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@sailor@paintshirtdetails}{
+ \begin{scope}
+ \clip
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt);
+ \draw[details]
+ (233:3pt) -- (1.5pt,-6.5pt) -- (312:3pt) -- ++(0pt,2pt) -- (3.5pt,-3pt) ..
+ controls (3.2pt,-4pt) and (2.2pt,-6pt) .. (1.5pt,-6.5pt) .. controls
+ (-0.5pt,-5.5pt) and (-2pt,-3.9pt) .. (-3.8pt,-5.1pt) -- ++(0pt,2pt) --
+ cycle;
+ \begin{scope}
+ \clip
+ (233:3pt) -- (1.5pt,-6.5pt) .. controls (-0.5pt,-5.5pt) and
+ (-2pt,-3.9pt) .. (-3.8pt,-5.1pt) -- ++(0pt,2pt);
+ \draw[white]
+ (1.5pt,-6.25pt) .. controls (-0.5pt,-5.25pt) and (-2pt,-3.65pt) ..
+ (-3.8pt,-4.85pt);
+ \draw[white]
+ (1.5pt,-6pt) .. controls (-0.5pt,-5pt) and (-2pt,-3.4pt) ..
+ (-3.8pt,-4.6pt);
+ \end{scope}
+ \begin{scope}
+ \clip
+ (1.5pt,-6.5pt) -- (312:3pt) -- ++(0pt,2pt) -- (3.5pt,-3pt) .. controls
+ (3.2pt,-4pt) and (2.2pt,-6pt) .. (1.5pt,-6.5pt);
+ \draw[white]
+ (3.25pt,-2.75pt) .. controls (2.95pt,-4pt) and (1.95pt,-6pt) ..
+ (1.25pt,-6.5pt);
+ \draw[white]
+ (3pt,-2.7pt) .. controls (2.7pt,-4pt) and (1.7pt,-6pt) .. (1pt,-6.5pt);
+ \end{scope}
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@sailor@painthat}{
+ {
+ \pgftransformxshift{-0.2pt}
+ \draw[hat]
+ (-2.7pt,2.9pt) -- (-2.3pt,1.5pt) to [out=340,in=200] ( 2.5pt,1.5pt) --
+ (2.9pt,2.9pt);
+ \draw[hat] (0.1pt,2.9pt) ellipse (2.8pt and 0.8pt);
+ \begin{scope}
+ \clip (0.1pt,2.9pt) ellipse (2.8pt and 0.8pt);
+ \draw[hat,shading angle=-45] (0.1pt,2.4pt) ellipse (2pt and 0.7pt);
+ \end{scope}
+ \draw[details] (0.1pt,3.2pt) ellipse (0.8pt and 0.55pt);
+ }
+}
+
+\newcommand{\tikzpeople@sailor@definecolors}{
+ \definecolor{shirt}{RGB}{232,232,232}
+ \definecolor{hat}{RGB}{232,232,232}
+ \definecolor{undershirt}{rgb}{0.9,0.9,0.95}
+ \definecolor{stripes}{rgb}{0.3,0.3,0.3}
+ \definecolor{details}{rgb}{0.02,0.18,0.54}
+}
+
+\newcommand{\tikzpeople@sailor@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ details/.style={color=\tikzpeople@details,top color=\tikzpeople@details!70, bottom color=\tikzpeople@details,shading angle=45},
+ stripes/.style={color=\tikzpeople@stripes,line width=0.15*\scalingfactor,cap=rect}
+ }
+ \else
+ \tikzset{
+ details/.style={color=\tikzpeople@details!80,top color=\tikzpeople@details!40, bottom color=\tikzpeople@details!80,shading angle=45},
+ stripes/.style={color=\tikzpeople@stripes!80,line width=0.15*\scalingfactor,cap=rect}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@sailor@colors}{
+ shirt/340/{1.2/-.9}, hair/170/{-.75/.9}, hat/150/{-.6/1.4}, skin/190/{-.6/.4},
+ undershirt/210/{.2/-.5}, stripes/0/{.2/-.58}, details/20/{0/1.8,.6/0}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.santa.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.santa.sty
new file mode 100644
index 0000000000..ad3ea6e84f
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.santa.sty
@@ -0,0 +1,104 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{details}
+\tikzpeople@addcolorkey{beard}
+
+\newcommand{\tikzpeople@santa@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@santa@paintbuttons
+ \tikzpeople@person@painthead
+ \tikzpeople@santa@paintbeard
+ \if@tikzpeople@female
+ \tikzpeople@person@painthair
+ \fi
+ \tikzpeople@santa@painthat
+}
+
+\newcommand{\tikzpeople@santa@definecolors}{
+ \definecolor{shirt}{rgb}{0.98,0.01,0.01}
+ \definecolor{hat}{rgb}{0.98,0.01,0.01}
+ \definecolor{details}{RGB}{232,232,232}
+ \definecolor{beard}{RGB}{232,232,232}
+}
+
+\newcommand{\tikzpeople@santa@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ details/.style={color=\tikzpeople@details,top color=\tikzpeople@details!60, bottom color=\tikzpeople@details,shading angle=45},
+ beard/.style ={color=\tikzpeople@beard, top color=\tikzpeople@beard!60, bottom color=\tikzpeople@beard,shading angle=45}
+ }
+ \else
+ \tikzset{
+ details/.style={color=\tikzpeople@details!80,top color=\tikzpeople@details!30, bottom color=\tikzpeople@details!90,shading angle=45},
+ beard/.style ={color=\tikzpeople@beard!80, top color=\tikzpeople@beard!30, bottom color=\tikzpeople@beard!90,shading angle=45}
+ }
+ \fi
+ \tikzset{hair/.style=beard};
+}
+
+\newcommand{\tikzpeople@santa@painthat}{
+ \draw[hat]
+ ( 0pt,4.65pt) .. controls (-3pt,4.65pt) and (-5pt,2pt) .. (-5pt,0.40pt) ..
+ controls (-5pt,1.00pt) and (-3pt,2pt) .. (0pt,2pt);
+ \draw[hat] (-3.1pt,0.5pt) arc (170:10:3.2pt and 5pt);
+ \if@tikzpeople@mirrored
+ \draw[details, decorate, decoration={bumps,amplitude=-.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (-3.1pt,0.4pt) to[in=180,out=180] (-3.0pt,1.6pt) .. controls (-2pt,1.2pt)
+ and ( 2pt,1.2pt) ..( 3.0pt,1.6pt) to[out=0,in=0] ( 3.1pt,0.4pt) ..
+ controls ( 2pt,0.0pt) and (-2pt,0.0pt) .. (-3.1pt,0.4pt);
+ \draw[details, decorate, decoration={bumps,amplitude=.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (-5pt,0.4pt) circle (0.75pt);
+ \else
+ \draw[details, decorate, decoration={bumps,amplitude=.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (-3.1pt,0.4pt) to[in=180,out=180] (-3.0pt,1.6pt) .. controls (-2pt,1.2pt)
+ and ( 2pt,1.2pt) ..( 3.0pt,1.6pt) to[out=0,in=0] ( 3.1pt,0.4pt) ..
+ controls ( 2pt,0.0pt) and (-2pt,0.0pt) .. (-3.1pt,0.4pt);
+ \draw[details, decorate, decoration={bumps,amplitude=-.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (-5pt,0.4pt) circle (0.75pt);
+ \fi
+}
+
+\newcommand{\tikzpeople@santa@paintbeard}{
+ \if@tikzpeople@female
+ \else
+ \if@tikzpeople@mirrored
+ \draw[beard, decorate, decoration={bumps,amplitude=-.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (-3.1pt,1pt) arc (180:360:3.1pt and 3pt) arc (360:180:3.1pt and 5pt);
+ \else
+ \draw[beard, decorate, decoration={bumps,amplitude=.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (-3.1pt,1pt) arc (180:360:3.1pt and 3pt) arc (360:180:3.1pt and 5pt);
+ \fi
+ \fi
+}
+
+\newcommand{\tikzpeople@santa@paintbuttons}{
+ \if@tikzpeople@mirrored
+ \draw[details, decorate, decoration={bumps,amplitude=.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (0.75pt,-5.0pt) circle (.65pt);
+ \draw[details, decorate, decoration={bumps,amplitude=.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (1.00pt,-7.2pt) circle (.65pt);
+ \else
+ \draw[details, decorate, decoration={bumps,amplitude=-.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (0.75pt,-5.0pt) circle (.65pt);
+ \draw[details, decorate, decoration={bumps,amplitude=-.1*\scalingfactor,segment length=.7*\scalingfactor}]
+ (1.00pt,-7.2pt) circle (.65pt);
+ \fi
+}
+
+\newcommand{\tikzpeople@santa@colors}{
+ shirt/190/{-1/-1}, hat/20/{.5/1.6}, skin/0/{.4/.75}, beard/340/{.25/.1},
+ details/170/{.1/-.5,-1.5/1,-.5/1.1}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.surgeon.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.surgeon.sty
new file mode 100644
index 0000000000..da25c6758b
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.shape.surgeon.sty
@@ -0,0 +1,76 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+\tikzpeople@addcolorkey{mask}
+
+\newcommand{\tikzpeople@surgeon@paint}{
+ \tikzpeople@person@paintshirt
+ \tikzpeople@surgeon@paintshirtdetails
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@surgeon@painthat
+ \tikzpeople@surgeon@paintmask
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+}
+
+\newcommand{\tikzpeople@surgeon@paintshirtdetails}{
+ \draw[shirt,thick,color=\tikzpeople@shirt,shading angle=90]
+ (230:3pt) .. controls +(-0.4pt,-1.5pt) .. ++(0pt,-3pt) .. controls
+ +(1.5pt,0.5pt) .. ++(3pt,0.2pt) .. controls +(0.5pt,0.4pt) .. ++(2pt,0.7pt)
+ .. controls +(0pt,0.5pt) .. (312:3pt);
+ \draw[skin] (231:3pt) -- (1pt,-4.85pt)--(311:3pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@surgeon@painthat}{
+ \draw[hat]
+ (160:3pt) ++(.3pt,1.6pt) -- (160:3pt) arc (-180:0:2.85pt and 1pt) --
+ ++(-.3pt,1.6pt) arc (0:180:2.55pt and 1pt) arc (-180:0:2.55pt and 1pt);
+}
+
+\newcommand{\tikzpeople@surgeon@paintmask}{
+ \begin{scope}
+ \clip (0,0) circle (\pgflinewidth/\scalingfactor +3);
+ \draw[mask,color=\tikzpeople@mask!40,shading angle=-90]
+ (-17:3pt) arc (295:235:6.1pt) -- ++(0,-.05pt) arc (235:295:6.1pt) --cycle;
+ \draw[mask]
+ (-18:3pt) arc (295:235:6pt) -- ++(0,-.05pt) arc (230:245:5pt) --
+ ++(0,-.6pt) arc (260:245:6pt) -- ++(0,-.1pt) arc (235:300:6pt) --cycle;
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@surgeon@definecolors}{
+ \definecolor{shirt}{RGB}{171,201,177}
+ \definecolor{hat}{RGB}{171,201,177}
+ \definecolor{mask}{RGB}{171,201,177}
+}
+
+\newcommand{\tikzpeople@surgeon@definestyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ mask/.style={color=\tikzpeople@mask,top color=\tikzpeople@mask!70, bottom color=\tikzpeople@mask,shading angle=90}
+ }
+ \else
+ \tikzset{
+ mask/.style={color=\tikzpeople@mask!80,top color=\tikzpeople@mask!40, bottom color=\tikzpeople@mask!80,shading angle=90}
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@surgeon@colors}{
+ shirt/200/{-1/-1}, hair/180/{-.8/.9}, hat/160/{-.7/1.3}, mask/350/{.5/.5},
+ skin/10/{.6/.9}%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.sty b/graphics/pgf/contrib/tikzpeople/tikzpeople.sty
new file mode 100644
index 0000000000..64bac5de5a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.sty
@@ -0,0 +1,924 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+%%
+%% This work consists of the files tikzpeople.tex, tikzpeople.sty,
+%% tikzpeople.shape.alice.sty, tikzpeople.shape.bob.sty,
+%% tikzpeople.shape.bride.sty, tikzpeople.shape.builder.sty,
+%% tikzpeople.shape.businessman.sty, tikzpeople.shape.charlie.sty,
+%% tikzpeople.shape.chef.sty, tikzpeople.shape.conductor.sty,
+%% tikzpeople.shape.cowboy.sty, tikzpeople.shape.criminal.sty,
+%% tikzpeople.shape.dave.sty, tikzpeople.shape.devil.sty,
+%% tikzpeople.shape.duck.sty, tikzpeople.shape.graduate.sty,
+%% tikzpeople.shape.groom.sty, tikzpeople.shape.guard.sty,
+%% tikzpeople.shape.jester.sty, tikzpeople.shape.judge.sty,
+%% tikzpeople.shape.maninblack.sty, tikzpeople.shape.mexican.sty,
+%% tikzpeople.shape.nun.sty, tikzpeople.shape.nurse.sty,
+%% tikzpeople.shape.physician.sty, tikzpeople.shape.pilot.sty,
+%% tikzpeople.shape.police.sty, tikzpeople.shape.priest.sty,
+%% tikzpeople.shape.sailor.sty, tikzpeople.shape.santa.sty,
+%% tikzpeople.shape.surgeon.sty
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikzpeople}[2017/04/22 v0.4 People shaped nodes for Tikz]
+
+\RequirePackage{tikz}
+\RequirePackage{calc}
+\RequirePackage{etoolbox}
+\newif\if@tikzpeople@draft\@tikzpeople@draftfalse
+\DeclareOption{draft}{
+ \@tikzpeople@drafttrue
+}
+\newif\if@tikzpeople@demo\@tikzpeople@demofalse
+\DeclareOption{demo}{
+ \@tikzpeople@demotrue
+}
+\newif\if@tikzpeople@nobeards\@tikzpeople@nobeardsfalse
+\DeclareOption{nobeards}{
+ \@tikzpeople@nobeardstrue
+}
+\newif\if@tikzpeople@saturated\@tikzpeople@saturatedfalse
+\DeclareOption{saturated}{
+ \@tikzpeople@saturatedtrue
+}
+\ProcessOptions\relax
+\usepgflibrary{intersections}
+\usetikzlibrary{decorations.markings,decorations.pathmorphing,calc,positioning,arrows.meta}
+
+\newif\if@tikzpeople@mirrored
+\pgfkeys{/tikz/mirrored/.is if=@tikzpeople@mirrored}
+\newif\if@tikzpeople@female
+\pgfkeys{/tikz/female/.is if=@tikzpeople@female}
+\newif\if@tikzpeople@evil
+\pgfkeys{/tikz/evil/.is if=@tikzpeople@evil}
+\newif\if@tikzpeople@good
+\pgfkeys{/tikz/good/.is if=@tikzpeople@good}
+\newif\if@tikzpeople@monitor
+\pgfkeys{/tikz/monitor/.is if=@tikzpeople@monitor}
+\newif\if@tikzpeople@shield
+\pgfkeys{/tikz/shield/.is if=@tikzpeople@shield}
+\newif\if@tikzpeople@sword
+\pgfkeys{/tikz/sword/.is if=@tikzpeople@sword}
+\pgfkeys{/tikz/saturated/.is if=@tikzpeople@saturated}
+
+\newcommand{\tikzpeople@addcolorkey}[1]{
+ \expandafter\def\csname tikzpeople@#1\endcsname{#1}
+ \pgfkeys{/tikz/#1/.code=\expandafter\def\csname tikzpeople@#1\endcsname{##1}}
+}
+
+\newcommand{\tikzpeople@addtextkey}[2]{
+ \expandafter\def\csname tikzpeople@#1\endcsname{#2}
+ \pgfkeys{/tikz/#1/.code=\expandafter\def\csname tikzpeople@#1\endcsname{##1}}
+}
+
+\tikzpeople@addcolorkey{horns}
+\tikzpeople@addcolorkey{halo}
+\tikzpeople@addcolorkey{shirt}
+\tikzpeople@addcolorkey{undershirt}
+\tikzpeople@addcolorkey{skin}
+\tikzpeople@addcolorkey{hair}
+\tikzpeople@addcolorkey{hat}
+\tikzpeople@addcolorkey{pc}
+\tikzpeople@addcolorkey{shieldmid}
+\tikzpeople@addcolorkey{shieldedge}
+\tikzpeople@addcolorkey{shieldrivets}
+\tikzpeople@addcolorkey{swordblade}
+\tikzpeople@addcolorkey{swordgrip}
+\tikzpeople@addcolorkey{swordguard}
+\tikzpeople@addcolorkey{swordpommel}
+
+\pgfdeclareshape{person}{
+ \saveddimen{\scalingfactor}{
+ \setlength{\pgf@xa}{\pgfshapeminwidth}
+ \setlength{\pgf@xb}{9.075pt}
+ \ifdim\pgf@xa<\pgf@xb
+ \pgfsetshapeminwidth{9.075pt}
+ \fi
+ \setlength{\pgf@xa}{\pgfshapeminheight}
+ \setlength{\pgf@xb}{0.5cm}
+ \ifdim\pgf@xa<\pgf@xb
+ \pgfsetshapeminheight{0.5cm}
+ \fi
+ \setlength{\pgf@xa}{1pt*\ratio{\pgfshapeminwidth}{9.075pt}}
+ \setlength{\pgf@xb}{1pt*\ratio{\pgfshapeminheight}{12.1pt}}
+ \ifdim\pgf@xa<\pgf@xb
+ \setlength{\pgf@x}{1pt*\ratio{\pgfshapeminheight}{12.1pt}}
+ \else
+ \setlength{\pgf@x}{1pt*\ratio{\pgfshapeminwidth}{9.075pt}}
+ \fi
+ }
+
+ \saveddimen{\width}{
+ \pgf@x=\wd\pgfnodeparttextbox
+ }
+
+ \saveddimen{\height}{
+ \pgf@x=\ht\pgfnodeparttextbox
+ }
+
+ \saveddimen{\depth}{
+ \pgf@x=\dp\pgfnodeparttextbox
+ }
+
+ \savedanchor{\mouth}{
+ \if@tikzpeople@mirrored
+ \pgfpoint{-2.075}{1.7}
+ \else
+ \pgfpoint{2.4}{1.7}
+ \fi
+ }
+
+ \anchor{mouth}{
+ \pgfpointscale{\scalingfactor}{\mouth}
+ }
+ \anchor{north west}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{-4.375}{6.3}}
+ }
+ \anchor{north}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{0.1625}{6.3}}
+ }
+ \anchor{north east}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{4.7}{6.3}}
+ }
+ \anchor{east}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{4.7}{0.25}}
+ }
+ \anchor{south east}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{4.7}{-5.8}}
+ }
+ \anchor{south}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{0.1625}{-5.8}}
+ }
+ \anchor{south west}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{-4.375}{-5.8}}
+ }
+ \anchor{west}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{-4.375}{0.25}}
+ }
+ \anchor{center}{
+ \pgfpointscale{\scalingfactor}{\pgfpoint{0.1625}{0.25}}
+ }
+ \anchor{text}{
+ \pgfpoint{\scalingfactor*0.1625-0.5*\width}{\scalingfactor*-6.3-\depth-\height}
+ }
+ \anchor{base}{
+ \pgfpoint{\scalingfactor*0.1625}{\scalingfactor*-6.3-\depth-\height}
+ }
+ \anchor{base west}{
+ \pgfpoint{\scalingfactor*-4.375}{\scalingfactor*-6.3-\depth-\height}
+ }
+ \anchor{base east}{
+ \pgfpoint{\scalingfactor*4.7}{\scalingfactor*-6.3-\depth-\height}
+ }
+ \anchor{mid}{
+ \pgfpoint{\scalingfactor*0.1625}{\scalingfactor*-6.3-\depth-\height+.5ex}
+ }
+ \anchor{mid west}{
+ \pgfpoint{\scalingfactor*-4.375}{\scalingfactor*-6.3-\depth-\height+.5ex}
+ }
+ \anchor{mid east}{
+ \pgfpoint{\scalingfactor*4.7}{\scalingfactor*-6.3-\depth-\height+.5ex}
+ }
+
+ \anchorborder{
+ \@tempdima=\pgf@x
+ \@tempdimb=\pgf@y
+ \pgftransformshift{\pgfpoint{\scalingfactor*-0.1625}{\scalingfactor*0.4pt}}
+ \pgfpointborderellipse{\pgfpoint{\@tempdima}{\@tempdimb}}{\pgfpoint{\scalingfactor*5.9pt}{\scalingfactor*6.9pt}}
+ }
+
+
+ \beforebackgroundpath{
+ \pgftransformscale{\scalingfactor}
+ \if@tikzpeople@mirrored
+ \pgftransformxscale{-1}
+ \pgftransformxshift{-0.325}
+ \fi
+ \pgftransformshift{\pgfpoint{-0.3}{3.3}}
+ \if@tikzpeople@draft
+ \tikzpeople@person@draftstyles
+ \tikzpeople@person@paintshirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+ \if@tikzpeople@shield
+ \tikzpeople@person@paintshield
+ \fi
+ \if@tikzpeople@sword
+ \tikzpeople@person@paintsword
+ \fi
+ \if@tikzpeople@monitor
+ \tikzpeople@person@paintmonitor
+ \fi
+ \else
+ \tikzpeople@definecommoncolors
+ \tikzpeople@definecommonstyles
+ \tikzpeople@person@paintshirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@painthair
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@painthalo
+ \if@tikzpeople@shield
+ \tikzpeople@person@paintshield
+ \fi
+ \if@tikzpeople@sword
+ \tikzpeople@person@paintsword
+ \fi
+ \if@tikzpeople@monitor
+ \tikzpeople@person@paintmonitor
+ \fi
+ \fi
+ }
+}
+
+\newcommand{\tikzpeople@definecommonstyles}{
+ \if@tikzpeople@saturated
+ \tikzset{
+ shirt/.style= {color=\tikzpeople@shirt,top color=\tikzpeople@shirt!70, bottom color=\tikzpeople@shirt,shading angle=45},
+ hat/.style= {color=\tikzpeople@hat,top color=\tikzpeople@hat!70, bottom color=\tikzpeople@hat,shading angle=45},
+ undershirt/.style= {color=\tikzpeople@undershirt,top color=\tikzpeople@undershirt!70, bottom color=\tikzpeople@undershirt,shading angle=45},
+ skin/.style= {color=\tikzpeople@skin,top color=\tikzpeople@skin!70, bottom color=\tikzpeople@skin,shading angle=45},
+ hair/.style= {color=\tikzpeople@hair,top color=\tikzpeople@hair!70, bottom color=\tikzpeople@hair,shading angle=45},
+ goatee/.style= {color=\tikzpeople@hair,top color=\tikzpeople@hair!70, bottom color=\tikzpeople@hair,shading angle=45},
+ horns/.style= {color=\tikzpeople@horns,top color=\tikzpeople@horns!70, bottom color=\tikzpeople@horns,shading angle=45},
+ halo/.style= {color=\tikzpeople@halo,top color=\tikzpeople@halo!70, bottom color=\tikzpeople@halo,shading angle=45},
+ shieldmid/.style= {color=\tikzpeople@shieldmid,top color=\tikzpeople@shieldmid!70, bottom color=\tikzpeople@shieldmid,shading angle=45,line join=bevel},
+ shieldedge/.style= {color=\tikzpeople@shieldedge,top color=\tikzpeople@shieldedge!70, bottom color=\tikzpeople@shieldedge,shading angle=45,line join=bevel},
+ shieldrivets/.style={color=\tikzpeople@shieldrivets,top color=\tikzpeople@shieldrivets!70, bottom color=\tikzpeople@shieldrivets,shading angle=45},
+ swordblade/.style= {color=\tikzpeople@swordblade,top color=\tikzpeople@swordblade!70, bottom color=\tikzpeople@swordblade,shading angle=45},
+ swordguard/.style= {color=\tikzpeople@swordguard,top color=\tikzpeople@swordguard!70, bottom color=\tikzpeople@swordguard,shading angle=45},
+ swordpommel/.style= {color=\tikzpeople@swordpommel,top color=\tikzpeople@swordpommel!70, bottom color=\tikzpeople@swordpommel,shading angle=45},
+ swordgrip/.style= {color=\tikzpeople@swordgrip,top color=\tikzpeople@swordgrip!70, bottom color=\tikzpeople@swordgrip,shading angle=45},
+ monitor1/.style= {color=\tikzpeople@pc, top color=\tikzpeople@pc, bottom color=\tikzpeople@pc!70,shading angle=90},
+ monitor2/.style= {color=\tikzpeople@pc, top color=\tikzpeople@pc, bottom color=\tikzpeople@pc!90,shading angle=90},
+ monitor3/.style= {color=\tikzpeople@pc, top color=\tikzpeople@pc!80, bottom color=\tikzpeople@pc!70,shading angle=90},
+ monitor4/.style= {color=\tikzpeople@pc, top color=\tikzpeople@pc!60, bottom color=\tikzpeople@pc!50,shading angle=90},
+ }
+ \else
+ \tikzset{
+ shirt/.style= {color=\tikzpeople@shirt!80,top color=\tikzpeople@shirt!40, bottom color=\tikzpeople@shirt!80,shading angle=45},
+ hat/.style= {color=\tikzpeople@hat!80,top color=\tikzpeople@hat!40, bottom color=\tikzpeople@hat!80,shading angle=45},
+ undershirt/.style= {color=\tikzpeople@undershirt!80,top color=\tikzpeople@undershirt!40, bottom color=\tikzpeople@undershirt!80,shading angle=45},
+ skin/.style= {color=\tikzpeople@skin!80,top color=\tikzpeople@skin!40, bottom color=\tikzpeople@skin!80,shading angle=45},
+ hair/.style= {color=\tikzpeople@hair!80,top color=\tikzpeople@hair!40, bottom color=\tikzpeople@hair!80,shading angle=45},
+ goatee/.style= {color=\tikzpeople@hair!80,top color=\tikzpeople@hair!40, bottom color=\tikzpeople@hair!80,shading angle=45},
+ horns/.style= {color=\tikzpeople@horns!80,top color=\tikzpeople@horns!40, bottom color=\tikzpeople@horns!80,shading angle=45},
+ halo/.style= {color=\tikzpeople@halo!80,top color=\tikzpeople@halo!40, bottom color=\tikzpeople@halo!80,shading angle=45},
+ shieldmid/.style= {color=\tikzpeople@shieldmid!80,top color=\tikzpeople@shieldmid!40, bottom color=\tikzpeople@shieldmid!80,shading angle=45,line join=bevel},
+ shieldedge/.style= {color=\tikzpeople@shieldedge!80,top color=\tikzpeople@shieldedge!40, bottom color=\tikzpeople@shieldedge!80,shading angle=45,line join=bevel},
+ shieldrivets/.style={color=\tikzpeople@shieldrivets!80,top color=\tikzpeople@shieldrivets!40, bottom color=\tikzpeople@shieldrivets!80,shading angle=45},
+ swordblade/.style= {color=\tikzpeople@swordblade!80,top color=\tikzpeople@swordblade!40, bottom color=\tikzpeople@swordblade!80,shading angle=45},
+ swordguard/.style= {color=\tikzpeople@swordguard!80,top color=\tikzpeople@swordguard!40, bottom color=\tikzpeople@swordguard!80,shading angle=45},
+ swordpommel/.style= {color=\tikzpeople@swordpommel!80,top color=\tikzpeople@swordpommel!40, bottom color=\tikzpeople@swordpommel!80,shading angle=45},
+ swordgrip/.style= {color=\tikzpeople@swordgrip!80,top color=\tikzpeople@swordgrip!40, bottom color=\tikzpeople@swordgrip!80,shading angle=45},
+ monitor1/.style= {color=\tikzpeople@pc!80, top color=\tikzpeople@pc!80, bottom color=\tikzpeople@pc!40,shading angle=90},
+ monitor2/.style= {color=\tikzpeople@pc!80, top color=\tikzpeople@pc!80, bottom color=\tikzpeople@pc!70,shading angle=90},
+ monitor3/.style= {color=\tikzpeople@pc!80, top color=\tikzpeople@pc!60, bottom color=\tikzpeople@pc!50,shading angle=90},
+ monitor4/.style= {color=\tikzpeople@pc!80, top color=\tikzpeople@pc!40, bottom color=\tikzpeople@pc!30,shading angle=90},
+ }
+ \fi
+}
+
+\newcommand{\tikzpeople@person@draftstyles}{
+ \tikzset{
+ shirt/.style= {color=black,fill=white},
+ skin/.style= {color=black,fill=white},
+ goatee/.style= {color=black,fill=white},
+ horns/.style= {color=black,fill=white},
+ halo/.style= {color=black,fill=white},
+ shieldedge/.style= {color=black,fill=white},
+ swordblade/.style= {color=black,fill=white},
+ swordguard/.style= {color=black,fill=white},
+ swordpommel/.style= {color=black,fill=white},
+ swordgrip/.style= {color=black,fill=white},
+ }
+}
+
+\newcommand{\tikzpeople@definecommoncolors}{
+ \definecolor{horns}{named}{red}
+ \definecolor{halo}{named}{yellow}
+ \definecolor{skin}{rgb}{0.84,0.58,0.24}
+ \definecolor{shirt}{rgb}{0.34,0.56,0.22}
+ \definecolor{hair}{rgb}{0.45,0.24,0}
+ \definecolor{pc}{rgb}{.2,.2,.2}
+ \definecolor{shieldedge}{RGB}{83,84,85}
+ \definecolor{shieldrivets}{RGB}{25,25,26}
+ \definecolor{shieldmid}{RGB}{197,22,9}
+ \definecolor{swordblade}{RGB}{83,84,85}
+ \definecolor{swordguard}{RGB}{147,131,104}
+ \definecolor{swordpommel}{RGB}{147,131,104}
+ \definecolor{swordgrip}{RGB}{81,57,48}
+}
+
+\newcommand{\tikzpeople@person@paintshirt}{
+ \draw[shirt]
+ (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) ..
+ ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) ..
+ (-4.0pt,-8.0pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@person@painthead}{
+ \draw[skin] (0pt,0pt) circle (3pt);
+}
+
+\newcommand{\tikzpeople@person@painthair}{
+ \if@tikzpeople@female
+ \tikzpeople@person@paintfemalehair
+ \else
+ \draw[hair]
+ (25:3pt) arc (25:210:3pt) -- (-2.6pt,-0.5pt) -- (-1.7pt,-1pt) --
+ (-1.7pt,0.8pt) to[out=350,in=210] (25:3pt) -- cycle;
+ \fi
+}
+
+\newcommand{\tikzpeople@person@painthairstyletwo}{
+ \if@tikzpeople@female
+ \tikzpeople@person@paintfemalehairstyletwo
+ \else
+ \draw[hair]
+ (15:3pt) arc (15:210:3pt) -- ++(0.3pt,0pt) -- ++(0.1pt,0.5pt)
+ .. controls +(310:.2pt) .. ++(0.2pt,-0.6pt) -- ++(0.4pt,0pt)
+ .. controls +(90:1pt) .. (-1.7pt,0.4pt) to[out=350,in=210]
+ (15:3pt) -- cycle;
+ \fi
+}
+
+\newcommand{\tikzpeople@person@paintfemalehairstyletwo}{
+ \draw[hair]
+ (15:3pt) arc (15:165:3pt) .. controls +(260:1pt) .. (215:4.5pt) --
+ ++(4:0.5pt) -- ++(70:0.5pt) -- ++(285:0.4pt) -- ++(0:1.5pt) --
+ (-1.6pt,0pt) to [out=350,in=210] (15:3pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@person@paintfemalehairstylethree}{
+ \draw[hair]
+ (15:3pt) arc (15:180:3.3pt) .. controls +(269:3pt) and +(190:1.5pt)
+ .. (250:3.4pt) .. controls +(118:1.2pt) .. (-1.6pt,0pt) to [out=350,in=210]
+ (15:3pt)-- cycle;
+}
+
+\newcommand{\tikzpeople@person@paintgoatee}{
+\if@tikzpeople@nobeards
+\else
+ \if@tikzpeople@evil
+ {
+ \pgftransformrotate{5}
+ \draw[goatee] (285:1.75pt)
+ -- ++(0:1pt) arc[start angle=90, end angle=0, x radius=.55pt, y radius=.5pt]
+ -- ++(270:.5pt) arc[start angle=0, end angle=-90, x radius=.55pt, y radius=.5pt]
+ -- ++(180:1pt) arc[start angle=-90, end angle=-180, x radius=.55pt, y radius=.5pt]
+ -- ++(90:.5pt) arc[start angle=180, end angle=90, x radius=.55pt, y radius=.5pt]
+ (285:1.75pt) ++(.1875pt,-.3pt)
+ arc[start angle=90,end angle=270,x radius=.45pt, y radius=.3pt]
+ -- ++(0:.6pt) arc[start angle=-90,end angle=90,x radius=.45pt, y radius=.3pt]
+ -- ++(180:.6pt);
+ }
+ \fi
+\fi
+}
+
+\newcommand{\tikzpeople@person@paintlefthorn}{
+ \if@tikzpeople@evil
+ \draw[horns]
+ (140:2.5pt) arc (-90:-170:2pt) arc (0:180:0.04pt) arc (190:240:4pt)
+ to[out=70,in=290] (140:2.5pt) -- cycle;
+ \fi
+}
+
+\newcommand{\tikzpeople@person@paintrighthorn}{
+ \if@tikzpeople@evil
+ \draw[horns]
+ (40:2.5pt) arc (-90:-10:2pt) arc (180:0:0.04pt) arc (-10:-60:4pt)
+ to[out=110,in=250] (40:2.5pt) -- cycle;
+ \fi
+}
+
+\newcommand{\tikzpeople@person@painthalo}{
+ \if@tikzpeople@good
+ \draw[fill,halo,even odd rule]
+ (0.1pt,4.5pt) ellipse (2.8pt and 0.8pt) ++(0pt,.1pt) ellipse
+ (2pt and 0.5pt);
+ \fi
+}
+
+\newcommand{\tikzpeople@person@paintfemalehair}{
+ \draw[hair]
+ (15:3pt) arc (15:180:3pt) .. controls +(273:2pt) and +(190:2pt) ..
+ (260:3.3pt) .. controls +(140:1pt) .. (-1.6pt,0pt) to [out=350,in=210]
+ (15:3pt) -- cycle;
+}
+
+\newcommand{\tikzpeople@person@paintshield}{
+ \path
+ (1pt,-3.7pt) coordinate (tikzpeople@shield1) +(-.2pt,.1pt) coordinate
+ (tikzpeople@shield6) ++(1.2pt,1.2pt) coordinate (tikzpeople@shield2)
+ ++(3.5pt,1.3pt) coordinate (tikzpeople@shield3) ++(.8pt,-.75pt) coordinate
+ (tikzpeople@shield4) ++(-2pt,-6.5pt) coordinate (tikzpeople@shield5)
+ --cycle;
+ \draw[shieldedge]
+ (tikzpeople@shield1) -- (tikzpeople@shield6) to[out=0,in=270]
+ ++(1.2pt,1.2pt) -- (tikzpeople@shield2) to[out=270,in=0]
+ (tikzpeople@shield1) --cycle;
+ \draw[shieldedge]
+ (tikzpeople@shield3) -- ++(-.2pt,.1pt) to[out=265,in=220]
+ ++(.8pt,-.75pt) -- (tikzpeople@shield4) to[out=220,in=265]
+ (tikzpeople@shield3) --cycle;
+ \draw[shieldedge]
+ (tikzpeople@shield2) -- ++(-.2pt,.1pt) .. controls +(5:1.5pt) and
+ +(220:1.5pt) .. ++(3.5pt,1.3pt) -- (tikzpeople@shield3) .. controls
+ +(220:1.5pt) and +(5:1.5pt) .. (tikzpeople@shield2) --cycle;
+ \draw[shieldedge]
+ (tikzpeople@shield5) -- ++(-.2pt,.1pt) .. controls +(170:1.5pt) and
+ +(270:3pt) .. (tikzpeople@shield6) -- (tikzpeople@shield1) .. controls
+ +(270:3pt) and +(170:1.5pt) .. (tikzpeople@shield5) --cycle;
+ \draw[shieldedge]
+ (tikzpeople@shield1) to[out=0,in=270] (tikzpeople@shield2) .. controls
+ +(5:1.5pt) and +(220:1.5pt) .. (tikzpeople@shield3) to[out=265,in=220]
+ (tikzpeople@shield4) .. controls +(270:3pt) and +(30:1.5pt) ..
+ (tikzpeople@shield5) .. controls +(170:1.5pt) and +(270:3pt) ..
+ (tikzpeople@shield1) --cycle;
+ \if@tikzpeople@draft\else
+ \draw[shieldmid]
+ ($(tikzpeople@shield1)+(315:.5pt)$) to[out=10,in=260]
+ ($(tikzpeople@shield2)+(315:.5pt)$) .. controls +(7:1.2pt) and
+ +(215:1.2pt) .. ($(tikzpeople@shield3)+(250:.75pt)$) to[out=280,in=180]
+ ($(tikzpeople@shield4)+(235:.625pt)$) .. controls +(270:2.2pt) and
+ +(30:1.1pt) .. ($(tikzpeople@shield5)+(90:.5pt)$) .. controls
+ +(172:1.1pt) and +(271:2.2pt) .. ($(tikzpeople@shield1)+(315:.5pt)$)
+ --cycle;
+ \begin{scope}
+ \clip
+ ($(tikzpeople@shield1)+(315:.3pt)$) coordinate (tikzpeople@rivet1) circle (.05pt)
+ ($(tikzpeople@shield2)+(315:.3pt)$) coordinate (tikzpeople@rivet2) circle (.05pt)
+ ($(tikzpeople@shield3)+(250:.45pt)$) coordinate (tikzpeople@rivet3) circle (.05pt)
+ ($(tikzpeople@shield4)+(235:.4pt)$) coordinate (tikzpeople@rivet4) circle (.05pt)
+ ($(tikzpeople@shield5)+(90:.3pt)$) coordinate (tikzpeople@rivet5) circle (.05pt);
+ \path[shieldrivets] (tikzpeople@rivet1) ++(-.025pt,.025pt) circle (.12pt);
+ \path[shieldrivets] (tikzpeople@rivet2) ++(-.025pt,.025pt) circle (.12pt);
+ \path[shieldrivets] (tikzpeople@rivet3) ++(-.025pt,.025pt) circle (.12pt);
+ \path[shieldrivets] (tikzpeople@rivet4) ++(-.025pt,.025pt) circle (.12pt);
+ \path[shieldrivets] (tikzpeople@rivet5) ++(-.025pt,.025pt) circle (.12pt);
+ \end{scope}
+ \fi
+}
+
+\newcommand{\tikzpeople@person@paintsword}{
+ \begin{scope}
+ \pgftransformrotate{-30}
+ \pgftransformshift{\pgfpoint{1.7pt}{-.2pt}}
+ \draw[swordpommel]
+ (-.4pt,-8.9pt) -- ++(0pt,-.1pt) arc (180:360:.4pt and .15pt) --
+ ++(0pt,.1pt); ellipse (.4pt and .15pt);
+ \draw[swordpommel] (0pt,-8.9pt) ellipse (.4pt and .15pt);
+ \draw[swordgrip]
+ (-.2pt,-7.1pt) to[out=265,in=95] (-.2pt,-8.9pt) to[out=345,in=195]
+ (.2pt,-8.9pt) to[out=85,in=275] (.2pt,-7.1pt);
+ \draw[skin] (0pt,-8.1pt) ellipse (.6pt and .7pt);
+ \draw[swordguard]
+ (0pt,-7.45pt) to[out=0,in=270] (1.4pt,-6.5pt) -- ++(-.1pt,-.1pt)
+ to[out=270,in=0] (0pt,-7.45pt); to[out=0,in=270] (1.2pt,-6.6pt) --
+ ++(.1pt,.1pt) to[out=270,in=0] (0pt,-6.8pt);
+ \draw[swordguard]
+ (0pt,-6.8pt) to[out=180,in=270] (-1.1pt,-6.5pt) -- ++(-.1pt,-.1pt)
+ to[out=270,in=180] (0pt,-7.2pt) to[out=0,in=270] (1.2pt,-6.6pt) --
+ ++(.1pt,.1pt) to[out=270,in=0] (0pt,-6.8pt);
+ \draw[swordguard]
+ (-1.2pt,-6.6pt) -- ++(0.1pt,0.1pt) -- ++(-0.1pt,0pt) -- ++(-0.1pt,-0.1pt)
+ --cycle;
+ \draw[swordguard]
+ (1.2pt,-6.6pt) -- ++(0.1pt,0.1pt) -- ++(0.1pt,0pt) -- ++(-0.1pt,-0.1pt)
+ --cycle;
+ \draw[swordguard]
+ (0pt,-7.2pt) to[out=180,in=270] (-1.2pt,-6.6pt) -- ++(-.1pt,0pt)
+ to[out=270,in=180] (0pt,-7.45pt) to[out=0,in=270] (1.3pt,-6.6pt) --
+ ++(-.1pt,0pt) to[out=270,in=0] (0pt,-7.2pt);
+ \draw[swordblade]
+ (-.4pt,-7pt) -- (-.4pt,-1.5pt) to[out=90,in=240] (0pt,2pt)
+ to[out=300,in=90] (.4pt,-1.5pt) -- (.4pt,-7pt) to[out=190,in=350]
+ (-.4pt,-7pt);
+ {
+ \clip
+ (-.4pt,-7pt) -- (-.4pt,-1.5pt) to[out=90,in=240] (0pt,1pt)
+ to[out=300,in=90] (.4pt,-1.5pt) -- (.4pt,-7pt) to[out=190,in=350]
+ (-.4pt,-7pt);
+ \draw[swordblade, line width=.05*\scalingfactor,cap=round]
+ (0pt,-7.04pt) -- (0pt,.7pt);
+ }
+ \end{scope}
+}
+
+\newcommand{\tikzpeople@person@paintmonitor}{
+ \if@tikzpeople@draft
+ \path[draw=black,fill=white]
+ (2.3pt,-2.3pt) -- ++(14:7.3pt) -- ++(340:.27pt) coordinate (tikzpeople@tmp) --
+ ++(264:6.2pt) -- ++(195.5:7.35pt) coordinate (tikzpeople@tmp2) -- ++(135:.3pt)
+ --cycle;
+ \path[draw=black]
+ (2.3pt,-2.3pt) ++(330:.28pt) coordinate (tikzpeople@tmp3)
+ (tikzpeople@tmp2) -- (tikzpeople@tmp3) -- (tikzpeople@tmp);
+ \path[draw=black]
+ (3pt,-3pt) -- ++(14.5:6.4pt) -- ++(264:5.3pt) -- ++(195.5:6.35pt)
+ coordinate (tikzpeople@tmp) --cycle;
+ \path[draw=black,line width=.15*\scalingfactor,cap=butt]
+ (tikzpeople@tmp) -- (3pt,-3pt) -- ++(14.5:6.4pt);
+ \path[draw=black,fill=white]
+ (6.1pt,-4.8pt) ++(190:.6pt) ++(280:4pt) ++(-1.5pt,.2pt) coordinate (tikzpeople@tmp)
+ -- ++(325:1.6pt) -- ++(15:3.7pt) -- ++(145:1.6pt) --cycle;
+ \path[draw=black]
+ (tikzpeople@tmp) -- ++(0,-.2pt) -- ++(325:1.6pt) -- ++(15:3.7pt) -- ++(0,.2pt);
+ \path (6.1pt,-4.8pt) ++(17:.8pt) coordinate (tikzpeople@tmp);
+ \path[draw=black,fill=white]
+ (tikzpeople@tmp) ++(0,.01pt) -- ++(194:1.5pt) -- ++(280:4pt) -- ++(0:.07pt) --
+ ++(17:.5pt) --cycle;
+ \path[draw=black,fill=white]
+ (6.1pt,-4.8pt) ++(190:.6pt) -- ++(280:4pt) coordinate (tikzpeople@tmp2) -- ++(15:2pt)
+ -- (tikzpeople@tmp) --cycle;
+ \else
+ \path[monitor1]
+ (2.3pt,-2.3pt) -- ++(14:7.3pt) -- ++(340:.27pt) coordinate (tikzpeople@tmp) --
+ ++(195:7.3pt) -- ++(264:6.2pt) coordinate (tikzpeople@tmp2) -- ++(150:.27pt) --cycle;
+ \path[monitor3]
+ (2.3pt,-2.3pt) ++(330:.28pt) -- (tikzpeople@tmp) -- ++(264:6.2pt) -- (tikzpeople@tmp2) --cycle;
+ \path[monitor4]
+ (3pt,-3pt) -- ++(14.5:6.4pt) -- ++(264:5pt) -- ++(195:6.35pt)
+ coordinate (tikzpeople@tmp) --cycle;
+ \path[draw,color=\tikzpeople@pc\if@tikzpeople@saturated\else!80\fi,line width=.15*\scalingfactor,cap=butt]
+ (tikzpeople@tmp) -- (3pt,-3pt) -- ++(14.5:6.4pt);
+ \begin{scope}
+ \pgftransformshift{\pgfpoint{6pt}{-4.7pt}}
+ \pgftransformxslant{0.15}
+ \path[monitor1]
+ (0,0) ellipse (1.3pt and 2pt);
+ \path[monitor3]
+ (.1pt,-.1pt) ellipse (1.3pt and 2pt);
+ \end{scope}
+ \path[monitor2]
+ (6.05pt,-4.8pt) ++(160:.9pt) -- ++(15:2pt) -- ++(265:1pt) -- ++(195:2pt)
+ --cycle;
+ \path (6.1pt,-4.8pt) ++(17:.8pt) coordinate (tikzpeople@tmp);
+ \path[monitor1]
+ (6.1pt,-4.8pt) ++(190:.6pt) ++(280:4pt) ++(-1.5pt,.2pt) -- ++(0,-.2pt) --
+ ++(325:1.6pt) -- ++(15:3.7pt) -- ++(0,.2pt) -- cycle;
+ \path[monitor3]
+ (6.1pt,-4.8pt) ++(190:.6pt) ++(280:4pt) ++(-1.5pt,.2pt) -- ++(325:1.6pt)
+ -- ++(15:3.7pt) -- ++(145:1.6pt) --cycle;
+ \path[monitor2]
+ (6.1pt,-4.8pt) ++(190:.6pt) ++(280:4pt) ++(-.6pt,.2pt) -- ++(325:.8pt) --
+ ++(15:2.5pt) -- ++(145:.8pt) --cycle;
+ \path[monitor2]
+ (tikzpeople@tmp) ++(0,.01pt) -- ++(194:1.5pt) -- ++(280:4pt) -- ++(0:.07pt) --
+ ++(17:.5pt) --cycle;
+ \path[monitor3]
+ (6.1pt,-4.8pt) ++(190:.6pt) -- ++(280:4pt) coordinate (tikzpeople@tmp2) -- ++(15:2pt)
+ -- (tikzpeople@tmp) --cycle;
+ \fi
+}
+
+
+\newcommand{\tikzpeople@declareshape}[1]{
+ \if@tikzpeople@draft
+ \pgfdeclareshape{#1}{
+ \inheritsavedanchors[from={person}]
+ \inheritanchor[from={person}]{north west}
+ \inheritanchor[from={person}]{north}
+ \inheritanchor[from={person}]{north east}
+ \inheritanchor[from={person}]{east}
+ \inheritanchor[from={person}]{south east}
+ \inheritanchor[from={person}]{south}
+ \inheritanchor[from={person}]{south west}
+ \inheritanchor[from={person}]{west}
+ \inheritanchor[from={person}]{center}
+ \inheritanchor[from={person}]{text}
+ \inheritanchor[from={person}]{base}
+ \inheritanchor[from={person}]{base west}
+ \inheritanchor[from={person}]{base east}
+ \inheritanchor[from={person}]{mid}
+ \inheritanchor[from={person}]{mid west}
+ \inheritanchor[from={person}]{mid east}
+ \inheritanchor[from={person}]{mouth}
+ \inheritanchorborder[from={person}]
+
+ \beforebackgroundpath{
+ \pgftransformscale{\scalingfactor}
+ \if@tikzpeople@mirrored
+ \pgftransformxscale{-1}
+ \pgftransformxshift{-0.325}
+ \fi
+ \pgftransformshift{\pgfpoint{-0.3}{3.3}}
+ \tikzpeople@person@draftstyles
+ \tikzpeople@person@paintshirt
+ \tikzpeople@person@paintrighthorn
+ \tikzpeople@person@painthead
+ \tikzpeople@person@paintgoatee
+ \tikzpeople@person@paintlefthorn
+ \tikzpeople@person@painthalo
+ \if@tikzpeople@shield
+ \tikzpeople@person@paintshield
+ \fi
+ \if@tikzpeople@sword
+ \tikzpeople@person@paintsword
+ \fi
+ \if@tikzpeople@monitor
+ \tikzpeople@person@paintmonitor
+ \fi
+ }
+ }
+ \else
+ \input{tikzpeople.shape.#1.sty}
+ \pgfdeclareshape{#1}{
+ \inheritsavedanchors[from={person}]
+ \inheritanchor[from={person}]{north west}
+ \inheritanchor[from={person}]{north}
+ \inheritanchor[from={person}]{north east}
+ \inheritanchor[from={person}]{east}
+ \inheritanchor[from={person}]{south east}
+ \inheritanchor[from={person}]{south}
+ \inheritanchor[from={person}]{south west}
+ \inheritanchor[from={person}]{west}
+ \inheritanchor[from={person}]{center}
+ \inheritanchor[from={person}]{text}
+ \inheritanchor[from={person}]{base}
+ \inheritanchor[from={person}]{base west}
+ \inheritanchor[from={person}]{base east}
+ \inheritanchor[from={person}]{mid}
+ \inheritanchor[from={person}]{mid west}
+ \inheritanchor[from={person}]{mid east}
+ \inheritanchor[from={person}]{mouth}
+ \inheritanchorborder[from={person}]
+
+ \beforebackgroundpath{
+ \pgftransformscale{\scalingfactor}
+ \if@tikzpeople@mirrored
+ \pgftransformxscale{-1}
+ \pgftransformxshift{-0.325}
+ \fi
+ \pgftransformshift{\pgfpoint{-0.3}{3.3}}
+ \tikzpeople@definecommoncolors
+ \csname tikzpeople@#1@definecolors\endcsname
+ \tikzpeople@definecommonstyles
+ \csname tikzpeople@#1@definestyles\endcsname
+ \begin{scope}
+ \csname tikzpeople@#1@paint\endcsname
+ \end{scope}
+ \if@tikzpeople@shield
+ \tikzpeople@person@paintshield
+ \fi
+ \if@tikzpeople@sword
+ \tikzpeople@person@paintsword
+ \fi
+ \if@tikzpeople@monitor
+ \tikzpeople@person@paintmonitor
+ \fi
+ }
+ }
+ \fi
+ \if@tikzpeople@demo
+ \ifdef{\tikzpeople@shapelist}{
+ \appto\tikzpeople@shapelist{,#1}
+ }{
+ \def\tikzpeople@shapelist{#1}
+ }
+ \stepcounter{tikzpeople@totalshapes}
+ \fi
+}
+
+\if@tikzpeople@demo
+ \RequirePackage{xparse}
+ \RequirePackage{capt-of}
+ \RequirePackage{xifthen}
+ \newcounter{tikzpeople@shaperow}
+ \newcounter{tikzpeople@shapecolumn}
+ \newcounter{tikzpeople@shapenum}
+ \newcounter{tikzpeople@totalshapes}
+ \newlength{\tikzpeople@figwidth}
+ \newlength{\tikzpeople@captionht}
+
+ \newcommand{\tikzpeople@horizontalseparation}[1]{
+ \draw
+ ($#1*(-1,1.25) + {2.5*#1}*(0,-\value{tikzpeople@shaperow})$) --
+ +(${2*#1}*(\value{tikzpeople@shapecolumn},0)$);
+ }
+
+ \newcommand{\tikzpeople@verticalseparation}[1]{
+ \draw
+ ($#1*(-1,1.25) + {2*#1}*(\value{tikzpeople@shapecolumn},0) + {2.5*#1}*(0,-\value{tikzpeople@shaperow})$)
+ -- +($2.5*(0,-#1)$);
+ }
+
+ \NewDocumentCommand\alltikzpeople{smm}{%
+ \setlength{\tikzpeople@figwidth}{#2cm}
+ \edef\tikzpeople@foreachshape{\noexpand\foreach \noexpand\tikzpeople@shape in {\tikzpeople@shapelist}}
+ \edef\tikzpeople@numcols{\the\numexpr(\textwidth-(\tikzpeople@figwidth))/(2*\tikzpeople@figwidth)\relax}
+ \addtocounter{figure}{10}
+ \settototalheight{\tikzpeople@captionht}{%
+ \vbox{\captionof{figure}{All available characters with \texttt{minimum width=#2cm} and no additional options.}}
+ }%
+ \addtocounter{figure}{-11}
+ \edef\tikzpeople@numrows{\the\numexpr(2*(\textheight-\tikzpeople@captionht)-(5*\tikzpeople@figwidth/2))/(5*\tikzpeople@figwidth)\relax}
+ \edef\tikzpeople@numshapes{\the\numexpr\tikzpeople@numcols*\tikzpeople@numrows\relax}
+ \edef\tikzpeople@numfigs{\the\numexpr\value{tikzpeople@totalshapes}/\tikzpeople@numshapes\relax}
+ \ifthenelse{\numexpr\tikzpeople@numfigs*\tikzpeople@numshapes\relax<\value{tikzpeople@totalshapes}}{
+ \edef\tikzpeople@numfigs{\the\numexpr\tikzpeople@numfigs+1\relax}
+ }{}
+ \foreach \tikzpeople@fignum in {1,...,\tikzpeople@numfigs}{
+ \begin{figure}[htp]
+ \centering
+ \setcounter{tikzpeople@shapecolumn}{0}
+ \setcounter{tikzpeople@shaperow}{0}
+ \setcounter{tikzpeople@shapenum}{0}
+ \begin{tikzpicture}
+ \tikzpeople@foreachshape{
+ \stepcounter{tikzpeople@shapenum}
+ \ifthenelse{\value{tikzpeople@shapenum} > \numexpr(\tikzpeople@fignum-1)*\tikzpeople@numshapes\relax}{
+ \ifthenelse{\value{tikzpeople@shapenum} < \numexpr\tikzpeople@fignum*\tikzpeople@numshapes+1\relax}{
+ \coordinate (\tikzpeople@shape) at (${2*#2}*(\value{tikzpeople@shapecolumn},0) + {2.5*#2}*(0,-\value{tikzpeople@shaperow})$);
+ \node[minimum width=#2cm,\tikzpeople@shape,#3] at (\tikzpeople@shape) {\texttt{\IfBooleanTF#1{}{\tikzpeople@shape}}};
+ \tikzpeople@verticalseparation{#2}
+ \stepcounter{tikzpeople@shapecolumn}
+ \ifthenelse{\value{tikzpeople@shapecolumn}=\tikzpeople@numcols}{
+ \tikzpeople@verticalseparation{#2}
+ \ifthenelse{\value{tikzpeople@shaperow}=0}{\tikzpeople@horizontalseparation{#2}}{}
+ \stepcounter{tikzpeople@shaperow}
+ \tikzpeople@horizontalseparation{#2}
+ \setcounter{tikzpeople@shapecolumn}{0}
+ }{}
+ }{}
+ }{}
+ }
+ \ifthenelse{\value{tikzpeople@shapecolumn}=0}{}{
+ \tikzpeople@verticalseparation{#2}
+ \ifthenelse{\value{tikzpeople@shaperow}=0}{\tikzpeople@horizontalseparation{#2}}{}
+ \stepcounter{tikzpeople@shaperow}
+ \tikzpeople@horizontalseparation{#2}
+ }
+ \end{tikzpicture}
+ \caption{\tikzpeople@captiontext{#2}{#3}}
+ \label{fig:tikzpeoplefigure\tikzpeople@fignum}
+ \end{figure}
+ }
+ }
+
+ \newcommand{\tikzpeople@captiontext}[2]{
+ \ifstrempty{#2}{
+ All available characters with \texttt{minimum width=#1cm} and no additional options. %
+ }{%
+ All available characters with \texttt{minimum width=#1cm} and \texttt{#2} options. %
+ }%
+ \ifnum\tikzpeople@numfigs>1%
+ (Part \tikzpeople@fignum~of \tikzpeople@numfigs)
+ \fi
+ }
+
+ \newcommand{\tikzpeoplecolors}[1]{
+ \begin{minipage}{.95\textwidth}
+ \begin{center}
+ \centering
+ \expandafter\let\expandafter\tikzpeople@peoplecolors\csname tikzpeople@#1@colors\endcsname
+ \begin{tikzpicture}
+ \node[minimum width=2.5cm,#1] {};
+ \foreach \tikzpeople@name/\tikzpeople@angle/\tikzpeople@coords in \tikzpeople@peoplecolors{
+ \node (label) at (\tikzpeople@angle:2.5) {\tikzpeople@name};
+ \foreach \x/\y in \tikzpeople@coords{
+ \draw (label) edge (\x,\y);
+ }
+ }
+ \end{tikzpicture}
+ \captionof{figure}{The available color-keys for \texttt{#1} tikzpeople.}
+ \end{center}
+ \end{minipage}
+ }
+
+\fi
+
+\tikzpeople@declareshape{alice}
+\tikzpeople@declareshape{bob}
+\tikzpeople@declareshape{bride}
+\tikzpeople@declareshape{builder}
+\tikzpeople@declareshape{businessman}
+\tikzpeople@declareshape{charlie}
+\tikzpeople@declareshape{chef}
+\tikzpeople@declareshape{conductor}
+\tikzpeople@declareshape{cowboy}
+\tikzpeople@declareshape{criminal}
+\tikzpeople@declareshape{dave}
+\tikzpeople@declareshape{devil}
+\tikzpeople@declareshape{duck}
+\tikzpeople@declareshape{graduate}
+\tikzpeople@declareshape{groom}
+\tikzpeople@declareshape{guard}
+\tikzpeople@declareshape{jester}
+\tikzpeople@declareshape{judge}
+\tikzpeople@declareshape{maninblack}
+\tikzpeople@declareshape{mexican}
+\tikzpeople@declareshape{nun}
+\tikzpeople@declareshape{nurse}
+\tikzpeople@declareshape{physician}
+\tikzpeople@declareshape{pilot}
+\tikzpeople@declareshape{police}
+\tikzpeople@declareshape{priest}
+\tikzpeople@declareshape{sailor}
+\tikzpeople@declareshape{santa}
+\tikzpeople@declareshape{surgeon}
+
+\let\pgfmath@function@veclen\relax
+\pgfmathdeclarefunction{veclen}{2}{%
+ \begingroup%
+ \pgfmath@x#1pt\relax%
+ \pgfmath@y#2pt\relax%
+ \ifdim\pgfmath@x<0pt\relax%
+ \pgfmath@x-\pgfmath@x%
+ \fi%
+ \ifdim\pgfmath@y<0pt\relax%
+ \pgfmath@y-\pgfmath@y%
+ \fi%
+ \ifdim\pgfmath@x=0pt\relax%
+ \pgfmath@x\pgfmath@y%
+ \else%
+ \ifdim\pgfmath@y=0pt\relax%
+ \else%
+ \ifdim\pgfmath@x>\pgfmath@y%
+ \pgfmath@xa\pgfmath@x%
+ \pgfmath@x\pgfmath@y%
+ \pgfmath@y\pgfmath@xa%
+ \fi%
+ % We use a scaling factor to reduce errors.
+ % First, see if we should scale down
+ \let\pgfmath@tmp@scale=\divide
+ \let\pgfmath@tmp@restore=\multiply
+ \ifdim\pgfmath@y>10000pt\relax%
+ \c@pgfmath@counta1500\relax%
+ \else%
+ \ifdim\pgfmath@y>1000pt\relax%
+ \c@pgfmath@counta150\relax%
+ \else%
+ \ifdim\pgfmath@y>100pt\relax%
+ \c@pgfmath@counta50\relax%
+ \else%
+ % Not scaling down, should we scale up?
+ \let\pgfmath@tmp@scale=\multiply
+ \let\pgfmath@tmp@restore=\divide
+ \ifdim\pgfmath@y<0.00001pt\relax%
+ \c@pgfmath@counta1500\relax%
+ \else%
+ \ifdim\pgfmath@y<0.0001pt\relax%
+ \c@pgfmath@counta150\relax%
+ \else%
+ \ifdim\pgfmath@y<0.001pt\relax%
+ \c@pgfmath@counta50\relax%
+ \else
+ \c@pgfmath@counta1\relax%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \pgfmath@tmp@scale\pgfmath@x\c@pgfmath@counta\relax%
+ \pgfmath@tmp@scale\pgfmath@y\c@pgfmath@counta\relax%
+ \pgfmathreciprocal@{\pgfmath@tonumber{\pgfmath@y}}%
+ \pgfmath@x\pgfmathresult\pgfmath@x%
+ \pgfmath@xa\pgfmath@tonumber{\pgfmath@x}\pgfmath@x%
+ \edef\pgfmath@temp{\pgfmath@tonumber{\pgfmath@xa}}%
+ %
+ % Use A+x^2*(B+x^2*(C+x^2*(D+E*x^2)))
+ % where
+ % A = +1.000012594
+ % B = +0.4993615349
+ % C = -0.1195159052
+ % D = +0.04453994279
+ % E = -0.01019210944
+ %
+ \pgfmath@x-0.01019210944\pgfmath@xa%
+ \advance\pgfmath@x0.04453994279pt\relax%
+ \pgfmath@x\pgfmath@temp\pgfmath@x%
+ \advance\pgfmath@x-0.1195159052pt\relax%
+ \pgfmath@x\pgfmath@temp\pgfmath@x%
+ \advance\pgfmath@x0.4993615349pt\relax%
+ \pgfmath@x\pgfmath@temp\pgfmath@x%
+ \advance\pgfmath@x1.000012594pt\relax%
+ \ifdim\pgfmath@y<0pt\relax%
+ \pgfmath@y-\pgfmath@y%
+ \fi%
+ \pgfmath@x\pgfmath@tonumber{\pgfmath@y}\pgfmath@x%
+ % Invert the scaling factor.
+ \pgfmath@tmp@restore\pgfmath@x\c@pgfmath@counta\relax%
+ \fi%
+ \fi%
+ \pgfmath@returnone\pgfmath@x%
+ \endgroup%
+}
diff --git a/graphics/pgf/contrib/tikzpeople/tikzpeople.tex b/graphics/pgf/contrib/tikzpeople/tikzpeople.tex
new file mode 100644
index 0000000000..544217778e
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpeople/tikzpeople.tex
@@ -0,0 +1,429 @@
+%% Copyright 2016 Nils Fleischhacker
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Nils Fleischhacker.
+%%
+%% This work consists of the files tikzpeople.tex, tikzpeople.sty,
+%% tikzpeople.shape.alice.sty, tikzpeople.shape.bob.sty,
+%% tikzpeople.shape.bride.sty, tikzpeople.shape.builder.sty,
+%% tikzpeople.shape.businessman.sty, tikzpeople.shape.charlie.sty,
+%% tikzpeople.shape.chef.sty, tikzpeople.shape.conductor.sty,
+%% tikzpeople.shape.cowboy.sty, tikzpeople.shape.criminal.sty,
+%% tikzpeople.shape.dave.sty, tikzpeople.shape.graduate.sty,
+%% tikzpeople.shape.groom.sty, tikzpeople.shape.guard.sty,
+%% tikzpeople.shape.jester.sty, tikzpeople.shape.judge.sty,
+%% tikzpeople.shape.mexican.sty, tikzpeople.shape.nun.sty,
+%% tikzpeople.shape.nurse.sty, tikzpeople.shape.physician.sty,
+%% tikzpeople.shape.pilot.sty, tikzpeople.shape.police.sty,
+%% tikzpeople.shape.priest.sty, tikzpeople.shape.sailor.sty,
+%% tikzpeople.shape.santa.sty and tikzpeople.shape.surgeon.sty
+\documentclass{ltxdoc}
+\usepackage[demo]{tikzpeople}
+\usepackage[OT1]{fontenc}
+\usepackage{hyperref}
+\usepackage{microtype}
+\usepackage{xspace}
+\usepackage[most]{tcolorbox}
+\usepackage[title]{appendix}
+\usetikzlibrary{shapes.callouts}
+
+\newcommand*{\Appendixautorefname}{Appendix}
+
+
+\pgfdeclarelayer{background}
+\pgfsetlayers{background,main}
+\selectcolormodel{cmyk}
+
+\newcommand{\tikzname}{Ti\emph{k}Z\xspace}
+
+\newcommand{\varg}[1]{%
+ {\ttfamily\char`\{}#1{\ttfamily\char`\}}}
+\newcommand{\DescribeOption}[1]{\leavevmode
+ \marginpar{\raggedleft\strut\MacroFont\string #1\ }}
+
+\lstdefinestyle{example}{style=tcblatex,
+ classoffset=0,
+ texcsstyle=*\color{blue},%
+ deletetexcs={begin,end},
+ moretexcs={,%
+ pgfdeclarehorizontalshading,pgfuseshading,node,
+ useasboundingbox,draw}%
+ classoffset=1,
+ keywordstyle=\color{blue},%
+ morekeywords={tikzpicture,shade,fill,draw,path,node,child,line,width,rectangle,minimum width,minimum size},
+ classoffset=0}
+
+\tcbset{%
+ fillbackground/.style={before lower pre={%
+ \tikzset{every picture/.style={execute at end picture={\begin{pgfonlayer}{background}
+ \fill[yellow!15]
+ ([xshift=-4mm,yshift=-4mm]current bounding box.south west) rectangle
+ ([xshift=4mm,yshift=4mm]current bounding box.north east);
+ \end{pgfonlayer}}}}}},
+ explicitpicture/.style={before lower=\begin{center},after lower=\end{center},fillbackground}}
+
+\newtcblisting{codeexample}[2][]{%
+ enhanced,frame hidden,
+ top=0pt,bottom=0pt,left=0pt,right=0pt,arc=0pt,boxrule=0pt,
+ colback=blue!15,
+ listing style=example,
+ sidebyside,text and listing,text outside listing,sidebyside gap=2mm,
+ lefthand width=#2,tikz lower,fillbackground,
+ #1}
+
+\title{\tikz{\node[graduate,shield,sword,minimum height=2cm]{}}\\The \textsf{tikzpeople} package}
+\author{Nils Fleischhacker}
+\date{}
+
+\begin{document}
+\maketitle
+
+\begin{abstract}
+ This package provides people shaped pgf-shapes to be used in \tikzname pictures.
+ Given that the the only thing this package does is providing new node shapes for \tikzname, it should probably be a \tikzname library.
+ It isn't, it's a package instead, so deal with it.
+
+ The package probably has many problems and is nowhere near optimal, but if you find it useful, feel free to use it anyway.
+\end{abstract}
+
+\section{Introduction}
+ Let me start with a word of warning:
+ The node-shapes defined by this package are heavily influenced by a type of clip art included in the \textsf{Microsoft Visio} software.
+ I am by no means an expert on copyright law and as such can make no claim under which circumstances using these shapes might infringe on Microsoft's copyright.
+ I do not expect that there are any problems, but be aware of this.
+ Let's consider this package an homage to the great design of those \textsf{Visio} clip arts and get on with our lives.
+ \subsection{Intended Usecase}
+ If you are confused about any of the packages design choices, the original use-case the package was written for might serve as an explanation.
+ The package was originally written to provide me with shapes of people to depict parties in cryptographic protocols and security definitions on beamer slides.
+ An example of this can be seen in \autoref{fig:protocolexample}.
+ \begin{figure}
+ \begin{tikzpicture}[font=\small]
+ \node[businessman,female,minimum size=1.5cm] (A) {};
+ \node[police,right=3cm of A,minimum size=1.5cm,mirrored] (B) {};
+ \node[anchor=north east] at (A.north west) (a2) {$(\mathsf{com},\mathsf{dec}) \gets \mathsf{Com}(a)$};
+ \node[anchor=south] at (a2.north) (a1) {$a\gets\{0,1\}$};
+ \node[anchor=south west] at (B.south east){$a \gets \mathsf{Opn}(\mathsf{com},\mathsf{dec})$};
+ \draw (A.35) edge[->] node[above] {$\mathsf{com}$} (B.145);
+ \node[anchor=south west] at (B.east |- B.180) {$b\gets\{0,1\}$};
+ \draw (A.0) edge[<-] node[above] {$b$} (B.180);
+ \draw (A.325) edge[->] node[above] {$\mathsf{dec}$} (B.215);
+ \draw (A.270) ++(0,-.5) node {$a\oplus b$} edge[<-] (A.270);
+ \draw (B.270) ++(0,-.5) node {$a\oplus b$} edge[<-] (B.270);
+ \end{tikzpicture}
+ \caption{A secure coin flipping protocol constructed from bit commitment.}
+ \label{fig:protocolexample}
+ \end{figure}
+ If this intended use-case does not resolve your confusion with any weird behavior or design choice, then chances are good that I made a mistake or just did not know any better.
+ If you spot a mistake or know how to do something in a saner way, shoot me a message to let me know.
+
+\subsection{Installation}
+ To install the package just drop the \textsf{tikzpeople.sty} file and all the shape files, i.e. \textsf{tikzpeople.shape.\meta{shapename}.sty}, somewhere \LaTeX can find them.
+ You might for example put them in your local \textsf{texmf} tree at \url{\textasciitilde/texmf/tex/latex/tikzpeople/}.
+ Alternatively simply drop all the files into the folder where your main \textsf{.tex} file resides.\footnote{Do not use a subfolder. While you can refer to the package itself in a hackish way using a relative path, \LaTeX wont be able to find the shape files.}
+
+\section{Usage}
+ To use the \textsf{tikzpeople} shapes, just write |\usepackage|\oarg{options}\varg{tikzpeople} somewhere in the preamble of your document.
+\subsection{Package Options}
+ The package has three global options.
+ \DescribeOption{draft}
+ Compiling a document with many \textsf{tikzpeople} nodes can be very slow.
+ This is especially true for some of the node shapes that make heavy use of \tikzname decorations.
+ To make documents compile faster during the drafting stage, the |draft| option is available.
+ In draft mode all \textsf{tikzpeople} nodes are only drawn as simple outlines.
+ \makeatletter
+ \let\listbackup\tikzpeople@shapelist
+ \@tikzpeople@drafttrue
+ \let\tikzpeople@alice@paint\relax
+ \let\tikzpeople@alice@painthair\relax
+ \let\tikzpeople@alice@paintshirtdetails\relax
+ \let\tikzpeople@alice@definecolors\relax
+ \let\tikzpeople@alice@definestyles\relax
+ \let\tikzpeople@alice@colors\relax
+ \tikzpeople@declareshape{alice}
+ \begin{codeexample}{3cm}
+\node[alice,minimum size=1.5cm] {Alice};
+ \end{codeexample}
+ \@tikzpeople@draftfalse
+ \let\tikzpeople@alice@paint\relax
+ \let\tikzpeople@alice@painthair\relax
+ \let\tikzpeople@alice@paintshirtdetails\relax
+ \let\tikzpeople@alice@definecolors\relax
+ \let\tikzpeople@alice@definestyles\relax
+ \let\tikzpeople@alice@colors\relax
+ \tikzpeople@declareshape{alice}
+ \let\tikzpeople@shapelist\listbackup
+ \makeatother
+
+ \DescribeOption{demo}
+ The |demo| option loads the package in demo mode, introducing additional commands.
+ These commands |\alltikzpeople| and |\tikzpeoplecolors| explained below are not meant for productive use.
+ They are useful for showcasing the available shapes with different node options and getting information for customizing colors.
+
+ \DescribeOption{nobeards}
+ The |nobeards| option removes all beards from \textsf{tikzpeople} nodes.
+ In particular, \textsf{tikzpeople} marked as evil no longer have goatees.
+ This option exists because I have been informed that having evil \textsf{tikzpeople} with goatees is very insensitive and discriminatory against people with goatees.
+ For a little bit of petty defiance, this option also removes Santa's beard.
+
+ \DescribeOption{saturated}
+ The \textsf{saturated} option causes all nodes to be rendered with saturated colors.
+ Standard nodes are rendered with somewhat washed out colors.
+ This works well on light backgrounds but can look weird on dark background.
+ The |saturated| option can also be used on individual nodes.
+
+\subsection{Available Shapes}
+ Once the package is loaded, any of the defined shapes can be used as the shape of any \tikzname node just like any other predefined shape.
+ \begin{codeexample}{3cm}
+\node[draw,rectangle,minimum size=1.5cm] at (0,2) {};
+\node[businessman,minimum size=1.5cm] at (0,0) {};
+ \end{codeexample}
+ However, it should be noted that in many respects the nodes behave quite differently from standard node shapes.
+ First, the nodes are drawn and filled, whether |draw| and |fill| are specified or not, because -- quite frankly -- if you do not want to draw the node, then the \textsf{tikzpeople} are quite useless to you.
+ Another area where the behavior might be unexpected to the experienced \tikzname user is concerning the node text.
+ \begin{codeexample}{3cm}
+\node[draw,rectangle,minimum size=1.5cm] at (0,2) {A Rectangle};
+\node[businessman,minimum size=1.5cm] (B) at (0,0) {A Businessman};
+\draw[gray,dotted] (B.north west) rectangle (B.south east);
+ \end{codeexample}
+ The text appears below the actual node, not within and the width of the text influence neither the drawn shape nor any of the border anchors.
+ The reason for this is that in the intended usecase, the node text -- if present at all -- is simply a label and is not supposed to influence the size or behavior of the node.
+
+ Another oddity of the tikzpeople shapes is that the border anchors and size of the node only takes into consideration the underlying shape of a person, and nothing of the -- sometimes much larger -- stuff such as hats added by some of the shapes.
+ \begin{codeexample}{3cm}
+\node[person,minimum size=1.5cm] (B) at (0,4) {A Person};
+\draw[gray,dotted] (B.north west) rectangle (B.south east);
+\node[mexican,minimum size=1.5cm] (M) at (0,0) {A Mexican};
+\draw[gray,dotted] (M.north west) rectangle (M.south east);
+ \end{codeexample}
+ Again, the reason for this is that two shapes specified to have the same size, should behave like two people of same size.
+ If for example \texttt{minimum width} would take the actual width into consideration, then the Mexican would be much smaller than the person.
+
+ While all of these oddities are useful to me and in my specific usecase, they may cause problem for you in any number of ways.
+ So if you don't think you will be able to cope with them, I suggest you stop reading and look elsewhere for people-shaped \tikzname nodes.
+
+\subsection{The Available Shapes}
+ \DescribeMacro{\alltikzpeople} If the package is loaded with the |demo| option, all provided shapes can easily be viewed using the |\alltikzpeople|\allowbreak\marg{width}\allowbreak\marg{options} command.
+ The command takes two arguments.
+ The first argument specifies the |minimum size| of the drawn nodes in centimeters, the second argument is a comma separated list of options passed to each node.
+ The command then produces figures such as \autoref{fig:tikzpeoplefigure1} and \autoref{fig:tikzpeoplefigure2}, which were produces using the command |\alltikzpeople|\varg{1.5}\varg{}
+ \DescribeMacro{\alltikzpeople*} The starred version of the command does exactly the same but omits the name of the shapes.
+ \alltikzpeople{1.5}{}
+\subsection{General Node Options}
+ A number of options can be used to influence the appearance of \textsf{tikzpeople}.
+ These options are explained here in alphabetical order.
+ Not all nodes are affected by all options.
+ This is the case if the option is either simply not applicable or if I have not found a way to make is look not weird.
+
+ \DescribeOption{evil} The |evil| option is supposed to make nodes look more evil than usual.
+ For most tikzpeople this is accomplished by adding horns and a goatee.
+ \begin{codeexample}{3.2cm}
+\node[priest,minimum size=1cm,xshift=-1.2cm]{};
+\node[priest,evil,minimum size=1cm] {};
+ \end{codeexample}
+ This is especially useful to depict attackers in a cryptographic or security setting.
+ Unaffected by this option are: \texttt{guard,santa,devil}.
+ The color of the horns is controlled with the |horns| key.
+
+ \DescribeOption{female} The |female| option is supposed to make stereotypically male nodes look just a tad more feminine.
+ For most tikzpeople this is accomplished by adding longer hair and losing the beard -- though surprisingly, evil women still tend to have a goatee.
+ \begin{codeexample}{3.2cm}
+\node[conductor,minimum size=1cm,xshift=-1.2cm]{};
+\node[conductor,female,minimum size=1cm]{};
+ \end{codeexample}
+ This is useful to avoid being called sexist for not having women in you figures.
+ On the other hand people can now accuse you of enforcing gender stereotypes. So have fun.
+ Unaffected by this option are: \texttt{alice, bride, guard, judge, nun, pilot}.
+
+ \DescribeOption{good} The |good| option is supposed to make nodes look extraordinarily good.
+ For most tikzpeople this is accomplished by adding a halo.
+ \begin{codeexample}{3.2cm}
+\node[sailor,minimum size=1cm,xshift=-1.2cm]{};
+\node[sailor,good,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to, e.g., depict a trusted party in a security context.
+ Unaffected by this option are: \texttt{guard, mexican, santa}.
+ The color of the halo is controlled with the |halo| key.
+
+ \DescribeOption{mirrored} The \textsf{mirrored} option makes nodes face to the left instead of the right.
+ \begin{codeexample}{3.2cm}
+\node[graduate,minimum size=1cm,xshift=-1.2cm]{};
+\node[graduate,mirrored,minimum size=1cm]{};
+ \end{codeexample}
+ I'm sure you will figure out the usefulness of this option on you own.
+
+ \DescribeOption{monitor} The \textsf{monitor} option draws a monitor in front of the node.
+ \begin{codeexample}{4cm}
+\node[judge,minimum size=1cm,xshift=-1.2cm]{};
+\node[judge,monitor,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to emphasize that parties are actually using a computer and not doing complex computations in their head.
+
+ \DescribeOption{saturated} The \textsf{saturated} option causes the node to be rendered with saturated colors.
+ \begin{codeexample}{3.2cm}
+\node[pilot,minimum size=1cm,xshift=-1.2cm]{};
+\node[pilot,saturated,minimum size=1cm]{};
+ \end{codeexample}
+ Standard nodes are rendered with somewhat washed out colors.
+ This works well on light backgrounds but can look weird on dark background.
+ The |saturated| option can also be used as a global package option.
+
+ \DescribeOption{shield} The \textsf{shield} option gives the node a shield.
+ \begin{codeexample}{4cm}
+\node[alice,minimum size=1cm,xshift=-1.2cm]{};
+\node[alice,shield,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to symbolize that a party is defending something and combines well with the |sword| option.
+ The colors of the shield are controlled using the keys |shieldmid|, |shieldedge|, and |shieldrivets|.
+
+ \DescribeOption{sword} The \textsf{sword} option gives the node a sword.
+ \begin{codeexample}{4cm}
+\node[dave,minimum size=1cm,xshift=-1.2cm]{};
+\node[dave,sword,minimum size=1cm]{};
+ \end{codeexample}
+ This could be useful to symbolize that a party is attacking or defending something and combines well with the |shield| option.
+ The colors of the sword are controlled using the keys |swordblade|, |swordguard|, |swordpommel|, and |swordgrip|.
+
+ All of these options can be arbitrarily combined. So, e.g., |good| \textsf{tikzpeople} can very well be |evil| at the same time.
+ \begin{codeexample}{4cm}
+\node[chef,evil,female,good,mirrored,monitor,
+ saturated,shield,sword,minimum size=1.5cm]{};
+ \end{codeexample}
+\subsection{Color Options}
+ Almost all the colors used in the \textsf{tikzpeople} shapes can be specified separately.
+ So if you feel, that you do not need a simple priest, but a cardinal instead, just take the priest, make the shirt and hat red and give him gray hair and we have a decent approximation of a cardinal.\footnote{In my defense, I'm not catholic, so I might be missing something crucial about cardinals. Rest assured that I meant no disrespect.}
+ \begin{codeexample}{3cm}
+\node[priest, shirt=red, hat=red, hair=gray, minimum size=1.5cm]{};
+ \end{codeexample}
+ Similarly, maybe what we actually need is a monk.\footnote{Again, I do not know much about monks...}
+ \begin{codeexample}{3cm}
+\node[priest,shirt=brown, hat=skin, cross=gray, collar=brown, minimum size=1.5cm]{};
+ \end{codeexample}
+ What I'm trying to get across is, using changes in coloring, we get tons of additional options for different kinds of \textsf{tikzpeople} we can draw.
+
+ \DescribeMacro{\tikzpeoplecolors} If the package is loaded with the |demo| option, you can use the command |\tikzpeoplecolors|\marg{shapename} to produce a figure giving you an idea, which color keys can be used for which shape.
+ For your convenience, all of those figures are included in \autoref{app:colors}.
+
+ \subsection{Text Options}
+ Some \textsf{tikzpeople} have include customizable text, such as the |businessman|'s monogram.
+ These texts can be specified with pgfkeys just as with the color options.
+ \vspace{.75em}
+ \begin{codeexample}{3cm}
+\path [clip] (0cm,1cm) rectangle (1.5cm,-1cm);
+\node[businessman, monogramtext=ER ,minimum size=5cm]{};
+ \end{codeexample}
+
+ \vspace{1em}
+
+ All texts are scaled to fit the available space. Specifying significantly longer text will therefore cause it to be unreadable.
+
+ \DescribeOption{monogramtext} The |monogramtext| option is available for |businessman| shapes and changes the text of the monogram.
+ While you can change the monogram to any arbitrary text, you should be aware that the monogram is rendered as |\mathcal| and anything except for uppercase letters will probably lead to unexpected results.
+
+ \DescribeOption{badgetext} The |badgetext| option is available for |nurse| shapes and changes the text printed on the badge.
+
+\subsection{Anchors}
+ \tikzset{shape example/.style={color=black!30, draw, fill=yellow!30, minimum size=3cm}}
+ \begin{figure}[htp]
+ \centering
+ \begin{tikzpicture}
+ \node[name=s,shape=businessman,minimum width=3cm,skin=yellow!30!,hair=black!30!,tie=black!30!,undershirt=yellow!30!,shirt=black!30!,monogram=black!30!] {Businessman\vrule width 1pt height 2cm};
+ \foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/above left, mid/above, mid east/above right,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/below left, 10/right, 20/right, 30/right, 40/right, 130/left,
+ 160/left, 190/left, mouth/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+ \end{tikzpicture}
+ \caption{Anchors of a \texttt{businessman} tikzpeople shape.}
+ \label{fig:anchors1}
+ \end{figure}
+ \begin{figure}[htp]
+ \centering
+ \begin{tikzpicture}
+ \node[name=s,shape=guard,minimum width=3cm,skin=yellow!30!,hat=black!30!,lining=yellow!30!,details=yellow!30!,shirt=black!30!,collar=black!30!] {Guard\vrule width 1pt height 2cm};
+ \foreach \anchor/\placement in
+ {north west/above left, north/above, north east/above right,
+ west/left, center/above, east/right,
+ mid west/above left, mid/above, mid east/above right,
+ base west/left, base/below, base east/right,
+ south west/below left, south/below, south east/below right,
+ text/below left, 10/right, 20/right, 30/right, 40/right, 130/left,
+ 160/left, 190/left, mouth/above}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{(s.\anchor)}};
+ \end{tikzpicture}
+ \caption{Anchors of a \texttt{guard} tikzpeople shape.}
+ \label{fig:anchors2}
+ \end{figure}
+ Basically all standard anchors for nodes exist also for tikzpeople nodes.
+ However, as mentioned before, most of them are not influenced by the node text.
+ Basically the only anchors that depend on the node text are the |text|, |base|, and |mid| anchors.
+ Furthermore, the anchors only take into account the basic shape of the person, not any of the -- possibly much larger -- additions such as hats.
+ As a reference, \autoref{fig:anchors1} and \autoref{fig:anchors2} show all the anchors of |businessman| and |guard| nodes.
+
+ A special anchor is the |mouth| anchor. In conjunction with \tikzname's |callout| shapes this anchor allows to easily depict talking \textsf{tikzpeople}..
+ \begin{codeexample}{4.6cm}
+\node[name=a,shape=police,minimum size=1cm,xshift=-1.25cm] {};
+\node[name=b,shape=criminal,minimum size=1cm,mirrored,xshift=1.25cm] {};
+\node[ellipse callout, draw,yshift= .3cm, callout absolute pointer={(a.mouth)}, font=\tiny] {Hey!};
+\node[ellipse callout, draw, yshift=-.3cm, callout absolute pointer={(b.mouth)}, font=\tiny] {What?};
+ \end{codeexample}
+
+\subsection{Messing with PGF Internals}
+When using several of the |decoration| heavy \textsf{tikzpeople}, the package runs into errors in the internals of |pgf|.
+Namely into ``Dimension to large'' errors in the |\pgfmath@function@veclen| command.
+Apparently this happens because we are working with numbers that are too small.
+As per this \TeX-stackexchange answer \url{http://tex.stackexchange.com/a/20888/15636}, \textsf{tikzpeople} redeclares |\pgfmath@function@veclen| with a fixed version.
+
+
+\clearpage
+\begin{appendices}
+ \section{Color Options}
+ \label{app:colors}
+ \tikzpeoplecolors{alice}
+ \vfill\tikzpeoplecolors{bob}
+ \vfill\tikzpeoplecolors{bride}
+ \vfill\tikzpeoplecolors{builder}
+ \vfill\tikzpeoplecolors{businessman}
+ \vfill\tikzpeoplecolors{charlie}
+ \vfill\tikzpeoplecolors{chef}
+ \vfill\tikzpeoplecolors{conductor}
+ \vfill\tikzpeoplecolors{cowboy}
+ \vfill\tikzpeoplecolors{criminal}
+ \vfill\tikzpeoplecolors{dave}
+ \vfill\tikzpeoplecolors{devil}
+ \vfill\tikzpeoplecolors{duck}
+ \vfill\tikzpeoplecolors{graduate}
+ \vfill\tikzpeoplecolors{groom}
+ \vfill\tikzpeoplecolors{guard}
+ \vfill\tikzpeoplecolors{jester}
+ \vfill\tikzpeoplecolors{judge}
+ \vfill\tikzpeoplecolors{maninblack}
+ \vfill\tikzpeoplecolors{mexican}
+ \vfill\tikzpeoplecolors{nun}
+ \vfill\tikzpeoplecolors{nurse}
+ \vfill\tikzpeoplecolors{physician}
+ \vfill\tikzpeoplecolors{pilot}
+ \vfill\tikzpeoplecolors{police}
+ \vfill\tikzpeoplecolors{priest}
+ \vfill\tikzpeoplecolors{sailor}
+ \vfill\tikzpeoplecolors{santa}
+ \vfill\tikzpeoplecolors{surgeon}
+ \end{appendices}
+\end{document}
+
diff --git a/graphics/pgf/contrib/tikzpfeile/README b/graphics/pgf/contrib/tikzpfeile/README
new file mode 100644
index 0000000000..7f2f6c8829
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpfeile/README
@@ -0,0 +1,17 @@
+tikzpfeile: a LaTeX package for drawing arrows using PGF/TikZ
+
+Copyright (C) 2011--2012 Jonathan Zachhuber, Michael Fütterer
+E-mail: jonathan.zachhuber@gmail.com, michaelfuetterer@gmail.com
+
+Files:
+tikzpfeile.ins Batch file, run through LaTeX
+tikzpfeile.dtx Docstrip archive, run through (Xe)LaTeX
+tikzpfeile.sty LaTeX package, generated by tikzpfeile.ins from tikzpfeile.dtx
+tikzpfeile.pdf Package documentation; can also be generated from tikzpfeile.dtx
+README This file
+
+This material is subject to the LaTeX Project Public License. See
+http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the
+details of that license.
+
+For more information on the package, see the documentation in tikzpfeile.pdf.
diff --git a/graphics/pgf/contrib/tikzpfeile/tikzpfeile.dtx b/graphics/pgf/contrib/tikzpfeile/tikzpfeile.dtx
new file mode 100644
index 0000000000..de7ed7112a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpfeile/tikzpfeile.dtx
@@ -0,0 +1,240 @@
+% \iffalse meta-coment:
+%
+% The tikzpfeile package.
+%
+% \fi
+%
+% ^^A Driver stuff:
+% \iffalse not to be used in package ....
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{ifxetex}
+\usepackage{doc}
+\ifxetex
+ \usepackage[no-math]{fontspec}
+ \usepackage{polyglossia}
+ \setmainfont[Mapping=tex-text,Numbers=OldStyle,Ligatures=Rare]{Linux Libertine O}
+ \setsansfont[Mapping=tex-text,Numbers=OldStyle,Ligatures=Rare]{Linux Biolinum O}
+ \setdefaultlanguage{english}
+\else
+ \usepackage[utf8]{inputenc}
+ \usepackage[T1]{fontenc}
+ \usepackage[english]{babel}
+\fi
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\usepackage{hyperref}
+\usepackage{tikzpfeile}
+\begin{document}
+ \DocInput{tikzpfeile.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \iffalse package preamble
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikzpfeile}[2012/03/28 v1.0 A LaTeX package for drawing arrows using PGF/TikZ]
+% \fi
+%
+% \MakeShortVerb{\"}
+%
+% \newcommand{\tpf}{\texttt{tikzpfeile}}
+% \newcommand{\pgftikz}{\texttt{PGF/TikZ}}
+% \newenvironment{syntax}{\medskip\hspace*{1em}}{\par\medskip}
+%
+% \GetFileInfo{tikzpfeile.sty}
+%
+% \title{The \tpf{} Package}
+% \author{Jonathan Zachhuber\thanks{\url{jonathan.zachhuber@gmail.com}} \and Michael Fütterer\thanks{\url{michaelfuetterer@gmail.com}}}
+% \date{Version \fileversion, \filedate}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package defines commands for drawing arrows using \pgftikz{} which should be used instead of the regular \LaTeX{} arrows.
+% \end{abstract}
+%
+% \section{Introduction}
+%
+% In mathematical texts that contain commutative diagrams created with \pgftikz{}, it might be disturbing that regular arrows (such as "\rightarrow": $\rightarrow$) and the \pgftikz{} arrows in the diagrams have different heads. This package defines commands that draw arrows using \pgftikz{}. Using these instead of the regular arrows makes your document look more consistent. Moreover, using \pgftikz{}, a lot more different arrow types can be drawn.
+%
+% \section{Arrow commands}
+%
+% This package provides the following commands for drawing arrows:
+%
+% \medskip
+%
+% \begin{tabular}{l l}
+% "\ra"&\ra\\
+% "\la"&\la\\
+% "\mapsto"&\mapsto\\
+% "\lmapsto"&\lmapsto\\
+% "\inj"&\inj\\
+% "\linj"&\linj\\
+% "\surj"&\surj\\
+% "\lsurj"&\lsurj\\
+% "\isom"&\isom\\
+% "\lisom"&\lisom\\
+% "\lra"&\lra\\
+% "\ppf"&\ppf\\
+% "\lppf"&\lppf\\
+% "\smapsto"&\smapsto\\
+% "\lsmapsto"&\lsmapsto\\
+% "\oldmapsto"&$\oldmapsto$
+% \end{tabular}
+%
+% \medskip
+%
+% \noindent By giving an optional argument, the arrows can be labeled. This does not work for the "\isom" and "\lisom" arrows.
+%
+% \medskip
+%
+% \begin{tabular}{l l}
+% "\ra[$\psi$]"&\ra[$\psi$]\\
+% "\inj[$\iota$]"&\inj[$\iota$]\\
+% "\surj[$\pi$]"&\surj[$\pi$]\\
+% "\lra[$\tau$]"&\lra[$\tau$]\\
+% "\ppf[$f$]"&\ppf[$f$]\\
+% \end{tabular}
+%
+% \section{Package options}
+%
+% The package recognizes one option, "length". Usually, the arrows are $1\mathrm{cm}$ long. This length is scaled by the value given by the "length" option. Its default value is, of course, $1$.
+%
+% \section{Implementation}
+%
+% Of course, we need the "tikz" package with the "arrows" library. For the length option we need "kvoptions".
+% \begin{macrocode}
+\RequirePackage{tikz}
+\usetikzlibrary{arrows}
+\RequirePackage{kvoptions}
+% \end{macrocode}
+% Define the length option:
+% \begin{macrocode}
+\DeclareStringOption[1]{length}
+\DeclareLocalOptions{length}
+\ProcessKeyvalOptions*
+% \end{macrocode}
+% Now define the arrow commands using \pgftikz{}.
+% \begin{macro}{\smapsto}
+% \begin{macrocode}
+\newcommand*{\smapsto}{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, |->] (0,0)%
+ node{\hspace*{0pt}}%
+ -- node{} (0.7,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\lsmapsto}
+% \begin{macrocode}
+\newcommand*{\lsmapsto}{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, <-|] (0,0)%
+ node{\hspace*{0pt}}%
+ -- node{} (0.7,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\ra}
+% \begin{macrocode}
+\newcommand*{\ra}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, ->,font=\scriptsize] (0,0)%
+ node{\hspace*{-2pt}} -- (0.5,0) node[above] {#1}%
+ -- node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\la}
+% \begin{macrocode}
+\newcommand*{\la}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, <-,font=\scriptsize] (0,0)%
+ node{\hspace*{-2pt}} -- (0.5,0) node[above] {#1}%
+ -- node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\mapsto}
+% \end{macro}\begin{macro}{\oldmapsto}
+% We save the old "\mapsto" arrow in "\oldmapsto".
+% \begin{macrocode}
+\let\oldmapsto\mapsto
+\renewcommand*{\mapsto}{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, |->] (0,0)%
+ node{\hspace*{0pt}}%
+ -- node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\lmapsto}
+% \begin{macrocode}
+\newcommand*{\lmapsto}{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, <-|] (0,0)%
+ node{\hspace*{0pt}}%
+ -- node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\inj}
+% \begin{macrocode}
+\newcommand*{\inj}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, right hook->,%
+ font=\scriptsize] (0,0)%
+ node{\hspace*{0pt}} -- (0.5,0) node[above] {#1} --%
+ node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\linj}
+% \begin{macrocode}
+\newcommand*{\linj}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, <-left hook,%
+ font=\scriptsize] (0,0)%
+ node{\hspace*{0pt}} -- (0.5,0) node[above] {#1} --%
+ node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\surj}
+% \begin{macrocode}
+\newcommand*{\surj}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, ->>,font=\scriptsize] (0,0)%
+ node{\hspace*{0pt}} -- (0.5,0) node[above] {#1}%
+ -- node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\lsurj}
+% \begin{macrocode}
+\newcommand*{\lsurj}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, <<-,font=\scriptsize] (0,0)%
+ node{\hspace*{0pt}} -- (0.5,0) node[above] {#1}%
+ -- node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\isom}
+% \begin{macrocode}
+\newcommand*{\isom}{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, ->] %
+ (0,0) node{\hspace*{0pt}} -- node{} (1,0);%
+ \draw[xscale=\tikzpfeile@length] (0.4,0.1) node {$\sim$};}}%
+ \penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\lisom}
+% \begin{macrocode}
+\newcommand*{\lisom}{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, <-] %
+ (0,0) node{\hspace*{0pt}} -- node{} (1,0);%
+ \draw[xscale=\tikzpfeile@length] (0.4,0.1) node {$\sim$};}}%
+ \penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\lra}
+% \begin{macrocode}
+\newcommand*{\lra}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,thin,shorten >=3pt, <->,font=\scriptsize] (0,0) %
+ node{\hspace*{-2pt}} -- (0.5,0) node[above] {#1} --%
+ node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\ppf}
+% \begin{macrocode}
+\newcommand*{\ppf}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,densely dashed,thin,shorten >=3pt,%
+ ->,font=\scriptsize] (0,0) %
+ node{\hspace*{0pt}} -- (0.5,0) node[above] {#1}%
+ -- node{} (1,0);}}\penalty1000\relax}
+% \end{macrocode}
+% \end{macro}\begin{macro}{\lppf}
+% \begin{macrocode}
+\newcommand*{\lppf}[1][]{\raisebox{-1pt}{\tikz{%
+ \draw[xscale=\tikzpfeile@length,densely dashed,thin,shorten >=3pt,%
+ <-,font=\scriptsize] (0,0) %
+ node{\hspace*{0pt}} -- (0.5,0) node[above] {#1}%
+ -- node{} (1,0);}}\penalty1000\relax}
+
+\endinput
+% \end{macrocode}
+% \end{macro}
+% \changes{v0.1}{2011/08/03}{Started project}
+% \changes{v1.0}{2012/03/28}{First public version}
+% \PrintChanges
+% \PrintIndex
diff --git a/graphics/pgf/contrib/tikzpfeile/tikzpfeile.ins b/graphics/pgf/contrib/tikzpfeile/tikzpfeile.ins
new file mode 100644
index 0000000000..2ae9a1e48a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpfeile/tikzpfeile.ins
@@ -0,0 +1,4 @@
+\input docstrip.tex
+\askforoverwritefalse
+\generate{\file{tikzpfeile.sty}{\from{tikzpfeile.dtx}{}}}
+\end
diff --git a/graphics/pgf/contrib/tikzpfeile/tikzpfeile.pdf b/graphics/pgf/contrib/tikzpfeile/tikzpfeile.pdf
new file mode 100644
index 0000000000..8ced54310f
--- /dev/null
+++ b/graphics/pgf/contrib/tikzpfeile/tikzpfeile.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzposter/README b/graphics/pgf/contrib/tikzposter/README
new file mode 100644
index 0000000000..cdc18327df
--- /dev/null
+++ b/graphics/pgf/contrib/tikzposter/README
@@ -0,0 +1,27 @@
+The files in the archive poster.zip include the following supported
+macros and files for LaTeX2e
+
+ tikzposter.dtx latex-class file in doc option format
+ tikzposter.pdf documentation in pdf format
+ tikzposter.ins driver for installing the package
+ README this file
+
+Run Run `latex tikzposter.ins' to generate the class file. This needs the `docstrip' utility. Along with the class, several tex files are generated. Then run `latex poster.dtx' to generate the documentation if `tikzposter.pdf' is not present:
+ tikzposter.cls class file
+ tikzposterBackgroundstyles.tex background styles
+ tikzposterBlockstyles.tex styles for drawing blocks
+ tikzposterColorpalettes.tex palettes of colors
+ tikzposterColorstyles.tex rules for where colors are used
+ tikzposterInnerblockstyles.tex styles for theorem-like objects
+ tikzposterLayoutthemes.tex rules for which styles are used on a given poster
+ tikzposterNotestyles.tex styles for note objects
+ tikzposterTitlestyles.tex styles for the title matter
+ tikzposter-template.tex barebones template for a poster
+ tikzposter-example.tex extended example showing formatting options
+
+Written by Pascal Richter, Elena Botoeva, Richard Barnard, and Dirk Surmann.
+This material is subject to the LaTeX Project Public License.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license.
+
+
+
diff --git a/graphics/pgf/contrib/tikzposter/tikzposter.dtx b/graphics/pgf/contrib/tikzposter/tikzposter.dtx
new file mode 100644
index 0000000000..fa1c773e9a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzposter/tikzposter.dtx
@@ -0,0 +1,2905 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2014 by Pascal Richter, Elena Botoeva, Richard Barnard, Dirk Surmann
+% -----------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 2.0 of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 2.0 or later is part of all distributions of
+% LaTeX version 2014/01/15 or later.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{tikzposter.dtx}
+\documentclass{ltxdoc}
+\usepackage{subfigure}
+\usepackage{tikz}
+\usepackage{fancyvrb,hyperref}
+\usepackage{setspace}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\OnlyDescription
+\definecolor{macro}{HTML}{1B1BB3}
+\definecolor{option}{HTML}{009999}
+\definecolor{color}{HTML}{00CC00}%62E200}
+\definecolor{style}{HTML}{E60042}
+\definecolor{value}{HTML}{FF7400}
+\definecolor{node}{HTML}{6F0AAA}
+\newcommand{\mmacro}[1]{{\color{macro} {#1}}}
+\newcommand{\moption}[1]{\textcolor{option}{#1}}
+\newcommand{\mcolor}[1]{\textcolor{color}{#1}}
+\newcommand{\mstyle}[1]{\textcolor{style}{#1}}
+\newcommand{\mvalue}[1]{\textcolor{value}{#1}}
+\newcommand{\mnode}[1]{\textcolor{node}{#1}}
+\begin{document}
+ \DocInput{tikzposter.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{0}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v1.0}{2012/09/15}{Initial version}
+%
+% \GetFileInfo{tikzposter.cls}
+% \def\filedate{2014/01/15}
+% \def\fileversion{v2.0}
+% \def\fileinfo{LaTeX Poster Class with TikZ}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\@ne}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\endgroup}
+%
+% \title{The \textsf{tikzposter} class \thanks{This document corresponds to \textsf{tikzposter}~\fileversion, dated~\filedate.}}
+% \author{Pascal Richter, Elena Botoeva, Richard Barnard, Dirk Surmann \\[1ex] \texttt{tikzposter@mathcces.rwth-aachen.de} \\ \url{https://bitbucket.org/surmann/tikzposter/wiki/}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This document class aims to provide a simple way of using LateX and TikZ for
+% generating good looking scientific posters.
+% \end{abstract}
+%
+% \renewcommand{\baselinestretch}{0.75}
+% \tableofcontents
+% %\renewcommand{\baselinestretch}{1}
+%
+% \section{Introduction}
+% The \textsf{tikzposter} document class file may be used to simplify formatting and generating scientific posters
+% in the \textsf{.pdf} format. It uses the TikZ package to generate a poster layout. % The poster is formed by a series of blocks against a background in a sequence of aligned columns.
+% The purpose of the class is to reduce the level of formatting by automatically setting spacing between
+% blocks in the poster as well as their lengths. The user has control over the width of the columns.
+% Due to the class' reliance on TikZ, only \textsf{.pdf} output is supported. This document explains the
+% formatting options available and how to easily create a basic block layout.
+%
+% To start with the class, the user can look at either the template file included with the class |tikzposter-template.tex| (also shown in Section \ref{sec:template}) which provides a template, the minimal working example shown in Section \ref{sec:usage}, or the example file |tikzposter-example.tex|. The last file illustrates various formatting options available.
+% In Section \ref{sec:docclass}, the |\documentclass| is described.
+% Inside of the |document| environment, the title is created by the use of one of the title block commands
+% and columns of aligned blocks are then created; the various commands are described in the subsections of Section \ref{sec:postercontents}.
+% If you want to alter the appearance of the poster, the various ways of doing this are explained in Section \ref{sec:posterlayout}. Finally, the Appendix (Section \ref{sec:appendix}) lists useful variables for those who want to further customize the appearance of the posters.
+%\vspace{12pt}
+%
+%\noindent\textbf{Required packages:} The class uses \LaTeX2e and the following required packages:
+% |tikz|, |calc|, |ifthen|, |ae|, |xstring|, |etoolbox|, |xkeyval|.
+%\vspace{12pt}
+
+% \noindent\textbf{Changes from previous versions:} Significant changes have been
+%made between the current version and the previous version of tikzposter. Aside from bug fixes, there
+%have been the following changes: The background can now be customized, the title formatting can be customized,
+% blocks can be shifted with respect to the default positioning, the format and appearance of blocks can be
+%customized, the |note| object was introduced (a new type of object) and colorthemes have been modified. The various changes mean backwards compatibility was not possible for posters using some of the formatting options in the previous version.
+%\section{Creating a Poster}\label{sec:usage}
+%Below is a minimal example of a poster and the relevant places in the manual to find further information.
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \documentclass{tikzposter} % See Section 3
+% \title{Title} \institute{Inst} % See Section 4.1
+% \author{Auth} \titlegraphic{Logo}
+% \usetheme{Basic} % See Section 5
+% \begin{document}
+% \maketitle % See Section 4.1
+% \block{BlocktitleA}{Blocktext} % See Section 4.2
+% \begin{columns} % See Section 4.4
+% \column{0.3} % See Section 4.4
+% \block{BlocktitleB}{Blocktext}
+% \column{0.7}
+% \block{BlocktitleC}{Blocktext}
+% \note{Notetext} % See Section 4.3
+% \end{columns}
+% \end{document}
+%\end{Verbatim}
+%
+%\section{Options for the Document Class}
+%\label{sec:docclass}
+% In order to use the class, begin the document with
+% \begin{quote}
+% |\documentclass[|\emph{options}|]{tikzposter}|
+% \end{quote}
+% There are several options available for customizing the general layout of the poster. These are
+% called as optional arguments when declaring the document class. The options for the page geometry are
+%\begin{itemize}
+% \item font size: The size of the text in the main body may be set as : |12pt|, |14pt|, |17pt|, |20pt|, or |25pt|;
+% \item paper size: Currently, paper sizes may be set to : |a0paper|, |a1paper|, or |a2paper|;
+% \item orientation: Either |landscape| or |portrait|.
+% \end{itemize}
+% The standard options |fleqn| and |leqno| may also be invoked here.
+% The following options are set in the form $\langle$\emph{variable name}$\rangle$=$\langle$\emph{value}$\rangle$ and deal with spacing of the poster:
+% \begin {itemize}
+% \item \moption{|margin|}: The margin between outer edge of the poster and the edge of the paper.
+%\item \moption{|innermargin|}: The margin from the edge of the poster edge to the outermost edge of the blocks;
+%\item \moption{|colspace|}: The horizontal spacing between successive columns;
+%\item \moption{|subcolspace|}: The horizontal spacing between successive columns in the |subcolumn| environment (See Section \ref{sec:postercontents:columns} for more on this environment);
+%\item \moption{|blockverticalspace|}: The spacing between the bottom of a normal block and the top of the next block.
+%\end{itemize}
+% A sample usage of these options would be :
+% \begin{verbatim}
+% \documentclass[25pt, a0paper, portrait, margin=0mm, innermargin=15mm,
+% blockverticalspace=15mm, colspace=15mm, subcolspace=8mm]{tikzposter}
+% \end{verbatim}
+% These listed values are in fact the default values of the optional arguments.
+% To turn off the comment on how the poster was created in the lower right corner, include in the preamble {\color{macro}|\tikzposterlatexaffectionproofoff|}.
+
+%\section{The Poster Contents}
+%\label{sec:postercontents}
+%\subsection{Title Matter}
+%\label{sec:postercontents:title}
+% \DescribeMacro{\maketitle} The information for the title matter is defined in the usual manner; the user may use |\author{}|, |\institute{}|, and |\title{}|. Additionally, a logo for the title matter may be defined via {\color{macro}|\titlegraphic{}|}. The title is created with the normal {\color{macro}|\maketitle[|\emph{options}|]|} command; however, we note that new options are available to alter the default settings:
+%\begin{itemize}
+%\item \moption{|width|}: The width of the title portion of the poster.
+%\item \moption{|roundedcorners|}, \moption{|linewidth|}, \moption{|innersep|}: Passed to relevant TikZ commands in the title style, governing the ``box'' surrounding the title matter (if the style is made dependent on these parameters -- the default style, for instance, is).
+%\item \moption{|titletotopverticalspace|}, \moption{|titletoblockverticalspace|}: Space between the top of the poster (excluding margins) and the top edge of the title portion; and space between the bottom of the poster and the top block, respectively.
+%\item \moption{|titlegraphictotitledistance|}: a length, used for a vertical distance between the titlegraphic and title description.
+%\item \moption{|titletextscale|}: a number which allows for relative scaling of the text of the title.
+%\end{itemize}
+% The necessary spacing is handled using the options chosen in the call to the document class described in Section \ref{sec:docclass}. The default format for the title is seen in Figure~\ref{fig:titledefault}.
+%\begin{figure}[ht]
+%\centering \begin{tikzpicture}\node[draw] {titlegraphic};\end{tikzpicture}\\ {\huge TITLE} \\ author \\ institute
+%\caption{Default format of the title material}
+%\label{fig:titledefault}
+%\end{figure}
+%
+%One can redefine the way the title matter (title, author, etc.) are arranged by
+%calling {\color{macro} |\settitle|}.
+% \DescribeMacro{\settitle} The user can change this format by including in the preamble {\color{macro}|\settitle|}. Note that when referring to the title, author, titlegraphic, and institute with this command, one needs to use {\color{value}|\@title|}, {\color{value}|\@author|}, {\color{value}|\@institute|} and {\color{value}|\@titlegraphic|}. A sample alternative title format is:
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \settitle{ \centering \vbox{
+% \@titlegraphic \\[\TP@titlegraphictotitledistance] \centering
+% \color{titlefgcolor} {\bfseries \Huge \sc \@title \par}
+% \vspace*{1em}
+% {\huge \@author \par} \vspace*{1em} {\LARGE \@institute}
+% }}
+%\end{Verbatim}
+
+%\subsection{Blocks}
+%\label{sec:postercontents:blocks}
+%\DescribeMacro{\block}
+% Blocks are created with the command {\color{macro}|\block[|\emph{options}|]{|\emph{title}|}{|\emph{text}|}|}.
+% Excluding options, this creates a block of the width of the page (or column/subcolumn, see section \ref{sec:postercontents:columns}), excepting the
+% margin and inner margin. A title for the block will be generated along the top in a separate,
+%smaller block, centered using the contents of \emph{title}.
+% By default, its width will be set to be the {\color{value}|\textwidth|} or, if in a column (see below), to the {\color{value}|\colwidth|}; alternatively, it may be altered as described below.
+%
+%If the \emph{title} field is left empty, then there will be no title for the block created. Multiline titles are supported and will be (approximately) broken to satisfy the maximum width of the block titles as specified in the formatting options. The contents of \emph{text} will be displayed in the main
+% body of the block. The length of the block is determined automatically by the contents of \emph{text}.
+% Further blocks may be generated in the same column by further uses of {\color{macro}|\block|}. However, if the
+% contents of the blocks in a single column lead to spill over (that is, they take up more vertical space than
+% allowed under the formatting for the paper size and margins), then formatting errors will occur.
+%
+% \DescribeEnv{Block Options} If the user wishes to have certain internal spacing and positioning aspects of the block to differ from those of the layout theme, they may reset the following:
+% \begin{itemize}
+% \item \moption{|titleoffsetx|}, \moption{|titleoffsety|}, \moption{|bodyoffsetx|} and \moption{|bodyoffsety|}:
+% The block may be placed in violation of the automatic alignment according to the default spacing rules. This may be achieved with 4 options. The first two are used to shift the title block from the default position. The latter two shift the main content block (containing \emph{text}) from a position directly under the title. All four are by default set to 0. That is, in relation to previously created blocks, the class determines the position of the current block according to the format options' spacing values and then determines the appropriate heights of the two components, main part and title. The position can then be adjusted as desired. Please note that these offset values use the convention of positive values resulting in a shift right/upwards and negative values in a shift left/downwards.
+% \item \moption{|titlewidthscale|}, \moption{|bodywidthscale|}: The relative scaling from the default widths of the block's title and main portion, respectively. This is given in relative terms; i.e., |titlewidthscale=.5| will result in a $50\%$ narrower title width than the default.
+% \item \moption{|titleleft|}, \moption{|titlecenter|}, \moption{|titleright|}: The alignment of the title text within the title section of the block (if it it exists). Unless specified in the block or the block style (see below), center alignment is used.
+% \item \moption{|bodyverticalshift|}: Additional spacing (in absolute terms) between the bottom of the title and the beginning of the \emph{contents} of the block body.
+% \item \moption{|roundedcorners|}, \moption{|linewidth|}: Parameters used to determine the degree of roundedness of the corners of the block and the thickness of the outer edge of the block, respectively; behaves as in TikZ.
+% \item \moption{|titleinnersep|}, \moption{|bodyinnersep|}: Separation for the title and body of the block, respectively, between the edge and their contents.
+% \end{itemize}
+% A sample block may be created by the command
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \block[titleleft,titleoffsetx=2em,titleoffsety=1em,bodyoffsetx=2em,
+% bodyoffsety=1em,titlewidthscale=.6, bodywidthscale=.8, roundedcorners=14,
+% linewidth=8mm, bodyinnersep=4em, titleinnersep=2em]
+% {Sample Block}{Text\\Text\\Text Text}
+% \end{Verbatim}
+% \subsubsection*{Block objects}\DescribeMacro{\innerblock} There are three special objects which may be placed in the blocks: inner blocks, colored boxes, and figures. Inner blocks, called by the command {\color{macro}|\innerblock[|\emph{options}|]{|\emph{Heading}|}{|\emph{Text}|}|}, are blocks placed in the body. If no heading is provided, the title area is not drawn, as in the case of normal blocks. The available options are:
+% \begin{itemize}
+% \item \moption{|titlewidth|}, \moption{|bodywidth|}, \moption{|titlewidthscale|}, \moption{|bodywidthscale|}: Respectively, the absolute width of the title and body, and scaling from the default widths set by the inner block style (see below). \textbf{NOTE}: If using the style \mstyle{|Table|} (see Section \ref{sec:innerblockstyles}) sec: for inner blocks, the sum of \moption{|titlewidthscale|} and \moption{|bodywidthscale|} must be no greater than 1 and the total height of the heading text should be less than the the total height of the text.
+% \item Title alignment: Either \moption{|titlecenter|}, \moption{|titleleft|}, or \moption{|titleright|}.
+% \item \moption{|titleoffsetx|}, \moption{|titleoffsety|}, \moption{|bodyoffsetx|}, \moption{|bodyoffsety|}: For positioning from the default placement of the title and body, similar in function to the options for a block.
+% \item \moption{|roundedcorners|}, \moption{|linewidth|}, \moption{|titleinnersep|}, \moption{|bodyinnersep|}: Same functionality as the options for blocks.
+% \end{itemize}
+% \DescribeMacro{\coloredbox} Colored boxes can be used for emphasizing parts of the block body and are generated by {\color{macro}|\coloredbox[|\emph{options}|]{|\emph{Text}|}|}. Without options, a box of the width of the block body (minus the length \moption{|blockbodyinnersep|}) is created, highlighted by the color assigned to the background of notes (see below for more on setting colors). The options are:
+% \begin{itemize}
+% \item \moption{|width|}: the width of the highlighted region.
+% \item \moption{|linewidth|}, \moption{|roundedcorners|}: similar as above.
+% \item \moption{|bgcolor|}, \moption{|fgcolor|}, \moption{|framecolor|}: Colors of the background highlighting, the text, and the frame of the colored box.
+% \end{itemize}
+%\DescribeMacro{tikzfigure} Due to implementation of the blocks, using the standard \LaTeX |figure| environment is not possible. As a workaround, the environment {\color{macro}|tikzfigure|} has been included using a solution adapted from code suggested by Stephan Thober. It may be used in the same manner as the standard figure environment.
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \begin{tikzfigure}[Caption of the figure]
+% \label{fig:fig1}
+% Figure
+% \end{tikzfigure}
+% \end{Verbatim}
+
+%\subsection{Notes}
+%\label{sec:postercontents:notes}
+%\DescribeMacro{\note} Smaller objects called notes are also available. These are associated with blocks and can be used to attach comments to specific points in the blocks. Their use is slightly more complicated; they are created with the use of the {\color{macro}|\note[|\emph{options}|]{|\emph{contents}|}|} command. We will here remark on the options that are needed for placing them. These options are:
+%\begin{itemize}
+%\item \moption{|targetoffsetx|}, \moption{|targetoffsety|}: The note places a ``target'' point in the center of the previously created block and uses this as a reference point for placement. If this target should be moved, these two parameters can be set to shift the target away from the default;
+%\item \moption{|angle|}, \moption{|radius|}: After the target has been set, the center of the note is a distance of \moption{|radius|} away from the target with angle (with respect to the horizontal axis) \moption{|angle|};
+%\item \moption{|width|}: The desired width of the note;
+%\item \moption{|connection|}: If the note style allows for it (see below on the styles for notes), using the connection option draws the relevant connection (i.e. line or arrow) from the note's center point to the target point;
+%\item \moption{|rotate|}: If the entire note should be rotated, a rotation angle (again with respect to the horizontal axis) may be defined using this option.
+%\item \moption{|roundedcorners|}, \moption{|linewidth|}, \moption{|innersep|}: If the note should be drawn using corners that are rounded differently than the default, with a thicker/thinner bounding line than the default, or with a different separation between content and edge of the note, respectively, these options may be used to reset the values.
+%\end{itemize}
+%Two comments should be kept in mind. First, notes are always visible over the background and blocks. Second, there are no automatic spacing rules for notes, so care should be used in placement to ensure the proper appearance of the poster.
+%
+%A sample note could be constructed via:
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \note[targetoffsetx=2cm, targetoffsety=-1cm, angle=90, radius=3cm,
+% width=5cm, rotate=30, connection, linewidth=.2cm,
+% roundedcorners=30, innersep=1cm]{Text}
+%\end{Verbatim}
+%This inserts a note which is directly above (|angle=90|) and 3 cm from the target, which is 2 cm to the right of and 1 cm below the block center, and is then rotated 30 degrees. A connection is then drawn from the block center to this target.
+%
+%\subsection{Columns and Subcolumns}
+%\label{sec:postercontents:columns}
+% \DescribeEnv{columns}
+%If multicolumn formats are desired, the environment {\color{macro}|columns|} may be used. All blocks generated inside of this environment will be divided into the desired columns with the specified width. To begin a column, use the command {\color{macro}|\column{|\emph{width}|}|}, e.g., \emph{width}|=0.3|{\color{value}|\textwidth|} or \emph{width}|=20cm|. Any blocks created after this will be aligned along a vertical line automatically placed, depending on the number of columns and their widths, as specified inside of the instance of the environment. Formatting errors may arise if the sum of the column
+% widths is greater than {\color{value}|\textwidth|}. The width of the column may be referred -- for formatting pictures or altering a block's width, for
+% instance -- by referencing the length {\color{value}|\colwidth|}.
+%
+%
+% \DescribeEnv{subcolumns}
+% If you wish to create a set of subcolumns in the current column, the environment |subcolumns| can be
+% used. In this environment, subcolumns are created by {\color{macro}|\subcolumn{|\emph{width}|}|}. However, the width
+% in the {\color{macro}|\subcolumn|} command is relative now to the current {\color{value}|\colwidth|} and can be referenced by the
+% length {\color{value}|\subcolwidth|}. The same comments on formatting made above regarding widths and text
+% length hold here as well.
+
+% \section{Poster Layout}
+%\label{sec:posterlayout}
+%We will describe additional options which govern the appearance of the poster.
+%There are options for changing the: \vspace{-0.2cm}
+%\begin{itemize}
+% \item colors used, \vspace{-0.3cm}
+% \item background of the poster, \vspace{-0.3cm}
+% \item the appearance of the title matter, \vspace{-0.3cm}
+% \item the shapes of the various blocks, \vspace{-0.3cm}
+% \item the appearance of inner blocks, and \vspace{-0.3cm}
+% \item the shapes of the notes.
+%\end{itemize}
+
+%\DescribeMacro{\usetheme} A poster theme provides the settings for the other options. A theme is called by the command {\color{macro}|\usetheme{|\emph{layout style}|}|} where the argument is either a predefined object name in \texttt{tikzposterLayoutthemes.tex}, or a style defined in the preamble for the appropriate object. Creating styles and their components is described in the following subsections. The predefined themes are \mstyle{|Default|}, \mstyle{|Rays|}, \mstyle{|Basic|}, \mstyle{|Simple|}, \mstyle{|Envelope|}, \mstyle{|Wave|}, \mstyle{|Board|}, \mstyle{|Autumn|}, and \mstyle{|Desert|}.
+% It should be noted that the user may call {\color{macro}|\usetheme|} and subsequently overwrite any or all components of the layout theme by resetting the different styles contained.
+%
+% \subsection{Setting the colors}
+% \label{sec:color}
+% The colors used in the poster are defined using two objects: the palette and the style. The palette provides 3 basic colors to be used. There are several included color palettes.
+% \DescribeMacro{\usecolorpalette} They may be called by the command {\color{macro}|\usecolorpalette{}|}. The included palettes are \mstyle{|Default|}, \mstyle{|BlueGrayOrange|}, \mstyle{|GreenGrayViolet|}, \mstyle{|PurpleGrayBlue|}, \mstyle{|BrownBlueOrange|}.
+%
+% \DescribeMacro{\usecolorstyle} The way that these colors are used in the
+% poster is defined in a color style, which is called by the command
+% {\color{macro}|\usecolorstyle[|\emph{options}|]{|\emph{style name}|}|}. The
+% options are the basic colors or the palette to be used. A sample set
+% of options is\\
+% {\small|[colorPalette=BrownOrangeBlue,colorOne=blue,colorTwo=black,colorThree=green]|}, which would not be used due to redundancy.
+%
+% All styles have a predefined palette as default. The included color styles are named after various countries (please note the associated default palettes are not connected by the names) and are: \mstyle{|Default|}, \mstyle{|Australia|}, \mstyle{|Britain|}, \mstyle{|Sweden|}, \mstyle{|Spain|}, \mstyle{|Russia|}, \mstyle{|Denmark|}, \mstyle{|Germany|}. The color style (with the palette) is used by the styles which define the appearance of the title, blocks, notes, and background. If no color palette or style is
+% chosen, a default color theme is used.
+% We now will explain the different components that can have colors assigned to them.
+%
+% \DescribeEnv{background colors}
+% The background has associated with it the colors \mcolor{|backgroundcolor|} and \mcolor{|framecolor|} which are, respectively, the color for the solid background and the color for the outer edges of the poster and the outer edges for all blocks.
+%
+% \DescribeEnv{title colors}
+% The text of the title material of the poster is in the color \mcolor{|titlefgcolor|}. The background of the title material is given by the color \mcolor{|titlebgcolor|}.
+%
+% \DescribeEnv{block colors}
+% The colors for the backgrounds of the blocks can also be defined. The background color of the title portion of
+% the block may be set with |blocktitlebgcolor| and the background color of the portion of the block with the text
+% is set by \mcolor{|blockbodybgcolor|}. The text colors for the title and the block contents are set with \mcolor{|blocktitlefgcolor|} and \mcolor{|blockbodyfgcolor|}, respectively.
+% \DescribeEnv{innerblock colors}
+%
+% Inside blocks, the inner blocks will be colored using \mcolor{|innerblocktitlebgcolor|}, \mcolor{|innerblocktitlefgcolor|}, \mcolor{|innerblockbodybgcolor|}, \mcolor{|innerblockbodyfgcolor|} for, respecitvely, the background color of the title, the text color for the title, the background color of the body, and the text color of the body.
+%
+% \DescribeEnv{coloredbox colors}
+% The note background color is used as the default of the background of colored boxes in the blocks.
+%
+% \DescribeEnv{note colors}
+%The note blocks created have background color defined by \mcolor{|notebgcolor|} and text color defined by \mcolor{|notefgcolor|}. The note blocks' frames are colored by \mcolor{|noteframecolor|}.
+%
+% \DescribeEnv{text colors}
+% The relevant text colors may also be individually defined. The color of the text of the title matter is defined via \mcolor{|titlefgcolor|}.
+% The color of the title text in each block is defined by \mcolor{|blocktitlefgcolor|} and the color of the text of the main portion of the block
+% is defined by \mcolor{|blockbodyfgcolor|}. Finally, the notes' text uses the color \mcolor{|notefgcolor|}.
+%
+% \DescribeMacro{\definecolorpalette}\DescribeMacro{\definecolorstyle} Finally, if one wishes, one may define the color palette and style locally in the preamble. The palette is defined by the command {\color{macro}|\definecolorpalette{|\emph{color palette name}|}{|\emph{definitions}|}|}. A sample palette can defined by
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \definecolorpalette{sampleColorPalette} {
+% \definecolor{colorOne}{named}{green}
+% \definecolor{colorTwo}{named}{black}
+% \definecolor{colorThree}{named}{cyan}
+% }
+% \end{Verbatim}
+% For a style, this is accomplished by {\color{macro}|\definecolorstyle{|\emph{color style name}|}{|\emph{default palette}|}{|\emph{definitions}|}|}. Using the name convention below of \mcolor{|colorOne|}, \mcolor{|colorTwo|}, and \mcolor{|colorThree|} when setting the colors allows the flexibility of various palettes.
+% A sample color style can be defined by:
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \definecolorstyle{sampleColorStyle} {
+% \definecolor{colorOne}{named}{blue}
+% \definecolor{colorTwo}{named}{yellow}
+% \definecolor{colorThree}{named}{orange}
+% }{
+% % Background Colors
+% \colorlet{backgroundcolor}{colorOne}
+% \colorlet{framecolor}{black}
+% % Title Colors
+% \colorlet{titlefgcolor}{black}
+% \colorlet{titlebgcolor}{colorOne}
+% % Block Colors
+% \colorlet{blocktitlebgcolor}{colorThree}
+% \colorlet{blocktitlefgcolor}{white}
+% \colorlet{blockbodybgcolor}{white}
+% \colorlet{blockbodyfgcolor}{black}
+% % Innerblock Colors
+% \colorlet{innerblocktitlebgcolor}{white}
+% \colorlet{innerblocktitlefgcolor}{black}
+% \colorlet{innerblockbodybgcolor}{colorThree!30!white}
+% \colorlet{innerblockbodyfgcolor{black}
+% % Note colors
+% \colorlet{notefgcolor}{black}
+% \colorlet{notebgcolor}{colorTwo!50!white}
+% \colorlet{noteframecolor}{colorTwo}
+% }
+%\end{Verbatim}
+%
+% \subsection{Setting the layout}
+% The basic components of the poster fall into three categories: the title portion, the blocks of content, and smaller notes. General rules for the appearance of the components as well as the background are set by a layout theme. The layout theme is composed of rules for the general shape of the components.
+%
+% \DescribeMacro{\definelayouttheme}
+% One may use, for instance, the \mstyle{|Default|} color style with the \mstyle{|Envelope|} layout.
+% A sample theme called |sample| may be defined with the following:
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \definelayouttheme{sample}{
+% \usecolorstyle[colorPalette=sampleColorPalette]{sampleColorStyle}
+% \usebackgroundstyle{sample}
+% \usetitlestyle{Test}
+% \useblockstyle{sample}
+% \useinnerblockstyle{sample}
+% \usenotestyle{Corner}
+% }
+% \end{Verbatim}
+% In the following subsections, the styles for background, title, block, innerblock, and notes are described.
+%
+%\subsection{Background style}
+% The background is by default a vertically graded single color depending on the value of \mcolor{|backgroundcolor|} set by the color theme chosen (see Section \ref{sec:color}). If the user wishes to alter this, then in the preamble you can use the {\color{macro}|\usebackgroundstyle{}|} command.
+% \DescribeMacro{\usebackgroundstyle}
+% This command takes as argument a name for a setting in the file |tikzBackgrounds.tex|; predefined backgrounds included with the package are: \mstyle{|Default|}, \mstyle{|Rays|}, \mstyle{|VerticalGradation|}, \mstyle{|BottomVerticalGradation|}, \mstyle{|Empty|}.
+%
+% \DescribeMacro{\definebackgroundstyle}
+% If you want to define a custom background style, you can use the commnd {\color{macro}|\definebackgroundstyle{|\emph{style name}|}{|\emph{background commands}|}|}: This command takes as first argument a name for the background and as second argument valid TikZ commands; an example usage of this is:
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \definebackgroundstyle{samplebackgroundstyle}{
+% \draw[inner sep=0pt, line width=0pt, color=red, fill=backgroundcolor!30!black]
+% (bottomleft) rectangle (topright);
+% }
+%\end{Verbatim}
+%Following this definition, the preamble should include the command \\
+%{\color{macro}|\usebackgroundstyle{samplebackgroundstyle}|} either directly or inside of a layout theme.
+%
+%In making a custom background, it is important to note that the point $(0,0)$ is the center of the poster (after removing the margins). Additionally, as can be seen from the example commands above, the user has access to several variables. These include:
+%\begin{itemize}
+%\item {\color{value}|\textwidth|}: The total width of the available poster space, after creating the margins.
+%\item {\color{value}|\textheight|}: The total height of the available poster space, after creating the margins.
+%\item {\color{value}|\titlegraphicheight|}, {\color{value}|\titletotopverticalspace|}, {\color{value}|\titleinnersep|}: See the information in desigining a titlestyle.
+%\item \mcolor{|backgroundcolor|}: Defined in color theme or by user in preamble (see above).
+%\item \mnode{|topright|}: a TikZ node defining the top right position poster background.
+%\item \mnode{|bottomleft|}: a TikZ node defining the bottom left position poster background.
+%\end{itemize}
+%
+% \subsection{Title style}
+% \label{sec:title}
+%\DescribeMacro{\usetitlestyle} \DescribeMacro{\definetitlestyle} If the default simple box surrounding the title matter is not desired, the user may use one of the several predefined title styles by using in the preamble {\color{macro}|\usetitlestyle[|\emph{options}|]{|\emph{style name}|}|} where the argument is a style listed in |tikzposterTitlestyles.tex| or the name of a style defined in the preamble. The preset title styles are: \mstyle{|Default|}, \mstyle{|Basic|}, \mstyle{|Envelope|}, \mstyle{|Wave|}, \mstyle{|VerticalShading|}, \mstyle{|Filled|}, \mstyle{|Empty|}. If the user wishes to use a title with a different appearance, then {\color{macro}|\definetitlestyle{|\emph{style name}|}{|\emph{options}|}{|\emph{title commands}|}|}. The available options are those mentioned above. Several parameters which might be helpful when writing a custom title style are:
+%\begin{itemize}
+% \item {\color{value}|\textwidth|}: The width of the poster contents, similar to the standard usage in \LaTeX, albeit having incorporated both margins set in the document class' options.
+% \item {\color{value}|\textheight|}: Same as the standard \LaTeX usage.
+% \item {\color{value}|\titlewidth|}: Stores the value passed from the options in {\color{macro}|\maketitle|}.
+% \item {\color{value}|\titlegraphicheight|}: Height of the defined title graphic.
+% \item {\color{value}|\titlelinewidth|}, {\color{value}|\titleinnersep|}: Line width and inner sep.
+% \item {\color{value}|\titletotopverticalspace|}: Spacing between the upper edge of the poster (after including margins) and the upper edge of the title.
+% \item \mcolor{|titlebgcolor|}: As defined in the color style.
+% \item {\color{value}|\titleposleft|}, {\color{value}|\titleposright|}, {\color{value}|\titleposbottom|}, {\color{value}|\titlepostop|}: The horizontal (resp. vertical) coordinates of the left and right (resp. bottom and top) edges of the title portion.
+%\end{itemize}
+%A sample title style is shown below
+
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \definetitlestyle{sampletitle}{
+% width=500mm, roundedcorners=20, linewidth=2pt, innersep=5pt,
+% titletotopverticalspace=15mm, titletoblockverticalspace=30mm
+% }{
+% \begin{scope}[line width=\titlelinewidth, rounded corners=\titleroundedcorners]
+% \draw[color=blocktitlebgcolor, fill=titlebgcolor]
+% (\titleposleft,\titleposbottom) rectangle (\titleposright,\titlepostop);
+% \end{scope}
+% }
+% \end{Verbatim}
+% and could be called using {\color{macro}|\usetitlestyle{sampletitle}|}. For more information on the available variables to assist in designing a custom title style, please refer to the Appendix.
+%
+% \subsection{Block style}
+% \DescribeMacro{\useblockstyle} \DescribeMacro{\defineblockstyle}
+% If the user wishes to use blocks with a different style, he or she may use {\color{macro}|\useblockstyle[|\emph{options}|]{|\emph{style name}|}|}. This loads either prewritten styles available in
+%\texttt{tikzposterBlockstyles.tex} or custom styles. The predefined styles are \mstyle{|Default|}, \mstyle{|Basic|}, \mstyle{|Minimal|}, \mstyle{|Envelope|}, \mstyle{|Corner|}, \mstyle{|Slide|}, \mstyle{|TornOut|}. The user can also create a custom block style, in the preamble via the command {\color{macro}|\defineblockstyle{|\emph{stylename}|}{| \emph{default values}|}{|\emph{commands}|}|} which contains the name of the style, the default values (see below) of relevant parameters; and a definition for drawing a block and (if wanted) the title composed of TikZ commands. A sample definition of this might be
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \defineblockstyle{sampleblockstyle}{
+% titlewidthscale=0.9, bodywidthscale=1,titleleft,
+% titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0mm, bodyoffsety=15mm,
+% bodyverticalshift=10mm, roundedcorners=5, linewidth=2pt,
+% titleinnersep=6mm, bodyinnersep=1cm
+% }{
+% \draw[color=framecolor, fill=blockbodybgcolor,
+% rounded corners=\blockroundedcorners] (blockbody.south west)
+% rectangle (blockbody.north east);
+% \ifBlockHasTitle
+% \draw[color=framecolor, fill=blocktitlebgcolor,
+% rounded corners=\blockroundedcorners] (blocktitle.south west)
+% rectangle (blocktitle.north east);
+% \fi
+% }
+%\end{Verbatim}
+% At any point, the user may change the block style used for subsequent blocks by using {\color{macro}|\useblockstyle{}|} with the new style. The block will then draw the objects as defined by {\color{macro}|\defineblockstyle|} and afterwards put the contents in those positions. The parameters that may be assigned default values and referenced in the commands are {\color{value}|\blockroundedcorners|}, {\color{value}|\blocklinewidth|}, {\color{value}|\blockbodyinnersep|}, and {\color{value}|\blocktitleinnersep|}; if this is not done, preset default values are used. These are used for values in TikZ commands that use the parameters for rounded corners, line width (for the edge of the block), inner sep for the body content and title, respectively.
+%
+% As can be seen, when creating the style, the user has access to several parameters. They are computed after the class determines, under the rules of formatting and given the width of the block, dimensions of the block. These, aside from those already mentioned, include:
+%\begin{itemize}
+%\item {\color{value}|\ifBlockhasTitle|}: A boolean for whether the block has nonempty first argument;
+%\item \mnode{|blocktitle|}: A TikZ node defining the appropriate position of the title subject to the spacing rules and the length/width of the title;
+%\item \mnode{|blockbody|}: A TikZ node defining the appropriate position of the body subject to the spacing rules and the length/width of the body and title(assuming the title is above the body);
+%\item {\color{value}|\blockroundedcorners|}, {\color{value}|\blocklinewidth|}, {\color{value}|\blockbodyinnersep|}, and \\
+%{\color{value}|\blocktitleinnersep|}: Parameters passed from the options of the block.
+%\item \mcolor{|framecolor|}, \mcolor{|blocktitlebgcolor|}, \mcolor{|blockbodybgcolor|}: Determined by the chosen color scheme.
+%\end{itemize}
+%\subsection{Inner Block styles}\label{sec:innerblockstyles}
+% \DescribeMacro{\useinnerblockstyle}\DescribeMacro{\defineinnerblockstyle} If
+% one wishes, inner blocks may have their appearance changed by the command
+% {\color{macro}|\useinnerblockstyle{|\emph{style name}|}|}. The included
+% styles are \mstyle{|Default|} and \mstyle{|Table|}, along with copies of the
+% styles for blocks. If the user wants, additional inner block styles may be
+% created with the command
+% {\color{macro}|\defineinnerblockstyle{|\emph{stylename}|}| |{|\emph{default
+% values}|}{|\emph{commands}|}|}. The relevant parameters are:
+% \begin{itemize}
+% \item {\color{value}|\ifInnerblockHasTitle|}: A boolean denoting whether the inner block has nonempty first argument
+%\item \mnode{|innerblocktitle|}, \mnode{|innerblockbody|}: TikZ nodes for the position of the heading and body of the inner block.
+% \item {\color{value}|\innerblockroundedcorners|}, {\color{value}|\innerblocklinewidth|}, \\ {\color{value}|\innerblockbodyinnersep|}, and {\color{value}|\innerblocktitleinnersep|} : Parameters passed from the options of the inner block.
+% \item \mcolor{|innerblockbodybgcolor|}, \mcolor{|innerblocktitlebgcolor|}, \mcolor{|framecolor|}: Colors determined by the chosen color scheme, or passed as options.
+% \end{itemize}
+% Styles are similar in structure as those for blocks.
+% \subsection{Note style}
+%\DescribeMacro{\usenotestyle}
+%If one wishes, alternative note appearances may be used. If the user wants to use one of the included note styles |Default|, |Corner|, |VerticalShading|, or |Sticky|, then the command {\color{macro}|\usenotestyle[|\emph{options}|]{|\emph{style name}|}|} may be employed.
+%
+% \DescribeMacro{\definenotestyle}Alternatively, one may include in either the preamble or inside of the document the command {\color{macro}|\definenotestyle{|\emph{note style name}|}{|\emph{default values}|}{|\emph{commands}|}|} where the inputs are the name of the style, default values for relevant format options and valid TikZ commands for drawing the note. In the use of {\color{macro}|\definenotestyle|}, the user may make use of the following parameters:
+%\begin{itemize}
+%\item {\color{value}|\ifNoteHasConnection|}: A boolean denoting whether |connection| has been included as an option;
+%\item \mnode{|notetarget|}: A TikZ node defining the placement of the note target;
+%\item \mnode{|notecenter|}: A TikZ node defining the placement of the center of the note;
+%\item {\color{value}|\noterotate|}: The angle the entire note should be rotated;
+%\item {\color{value}|\notelinewidth|}, {\color{value}|\noteroundedcorners|}, {\color{value}|\noteinnersep|}: Values from either the default values or from the user passing options corresponding to the width of the outer edge of the note, the roundedness of the corners, and the separation between the note edge and contents, respectively.
+%\item \mcolor{|noteframecolor|}, \mcolor{|notefgcolor|}, \mcolor{|notebgcolor|}: Colors defined in the color them (see above).
+%\end{itemize}
+%An example style may be defined via the command:
+%\begin{Verbatim}[samepage=true,gobble=1, fontsize=\small]
+% \definenotestyle{samplenotestyle}{
+% targetoffsetx=0pt, targetoffsety=0pt, angle=45, radius=8cm,
+% width=6cm, connection=true, rotate=0, roundedcorners=0, linewidth=1pt,
+% innersep=0pt%
+% }{
+% \ifNoteHasConnection
+% \draw[thick] (notecenter) -- (notetarget) node{$\bullet$};
+% \fi
+% \draw[draw=notebgcolor,fill=notebgcolor,rotate=\noterotate]
+% (notecenter.south west) rectangle (notecenter.north east);
+% }
+%\end{Verbatim}
+%
+%
+% \section{Poster template}
+% \label{sec:template}
+% \setcounter{CodelineNo}{0}
+%
+% The following \LaTeX\ document is intended to be used as a template. It has a minimal set of inputs. Included
+% with the package is an additional \texttt{tikzposter-example.tex} which has more extensive comments and additional options
+% implemented, see Section \ref{sec-example}.\vspace{1cm}
+%
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposter-template.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\documentclass{tikzposter} %Options for format can be included here
+
+ % Title, Author, Institute
+\title{Template Poster}
+\author{Author(s)}
+\institute{Institute}
+\titlegraphic{LogoGraphic Inserted Here}
+
+ %Choose Layout
+\usetheme{Default}
+
+\begin{document}
+
+ % Title block with title, author, logo, etc.
+\maketitle
+ \block{Basic Block}{Text}
+ \begin{columns}
+
+ % FIRST column
+\column{0.6}% Width set relative to text width
+
+\block{Large Column}{Text\\Text\\Text Text Text}
+\note{Note with default behavior}
+\note[targetoffsetx=12cm, targetoffsety=-1cm, angle=20, rotate=25]
+{Note \\ offset and rotated}
+
+ % First column - second block
+\block{Block titles with enough text will automatically obey spacing requirements }
+{Text\\Text}
+
+ % First column - third block
+\block{Sample Block 4}{T\\E\\S\\T}
+
+ % SECOND column
+\column{0.4}
+ %Second column with first block's top edge aligned with with previous column's top.
+
+ % Second column - first block
+\block[titleleft]{Smaller Column}{Test}
+
+ % Second column - second block
+\block[titlewidthscale=0.6, bodywidthscale=0.8]
+{Variable width title}{Block with smaller width.}
+
+ % Second column - third block
+\block{}{Block with no title}
+
+ % Second column - A collection of blocks in subcolumn environment.
+\begin{subcolumns}
+ \subcolumn{0.27} \block{1}{First block.} \block{2}{Second block}
+ \subcolumn{0.4} \block{Sub-columns}{Sample subblocks\\Second subcolumn}
+ \subcolumn{0.33} \block{4}{Fourth} \block{}{Final Subcolumn block}
+\end{subcolumns}
+
+ % Bottomblock
+\block{Final Block in column}{
+ Sample block.
+}
+\end{columns}
+\block[titleleft, titleoffsetx=2em, titleoffsety=1em, bodyoffsetx=2em,%
+ bodyoffsety=-2cm, roundedcorners=10, linewidth=0mm, titlewidthscale=0.7,%
+ bodywidthscale=0.9, bodyverticalshift=2cm, titleright]
+{Block outside of Columns}{Along with several options enabled}
+
+\end{document}
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposter-template.tex>
+% \end{macrocode}
+%
+% \section{Poster example}
+% \label{sec-example}
+% Included in the class directory is an example tex file |tikzposter-example.tex|. This demonstrates the various options available, as opposed to the minimal working copy \texttt{tikzposter-template.tex}.
+%
+%
+%\section{Appendix}\label{sec:appendix}
+%\subsection{Available variables}
+%If one wishes to create their own themes/styles/etc, the following variables which govern positioning, spacing, and appearance may be of use. They may be used within themes, title styles, block styles, and note styles. Please note that each of these are defined and then passed to the style; they may then be referenced and redefined inside of a style. However, not all are local to that block; only those that are noted as being redefined.
+%\begin{itemize}
+% \item {\color{value}|\TP@visibletextwidth|}, {\color{value}|\TP@visibletextheight|}: The width and height of the poster material. Excludes the margin length set in the option.
+% \item {\color{value}|\TP@titleinnersep|}, {\color{value}|\TP@titletoblockverticalspace|}: Defined in options of the document. May be redefined in a theme.
+% \item {\color{value}|\titlewidth|}, {\color{value}|\titleheight|}: Width and height of the title block.
+% \item {\color{value}|\titlegraphicheight|}: The height of graphic used in the title.
+% \item {\color{value}|\titletotopverticalspace|}: Defined in the options.
+% \item {\color{value}|\TP@colspace|}, {\color{value}|\TP@coltop|}, {\color{value}|\TP@colbottom|}, {\color{value}|\TP@colcenter|}, {\color{value}|\TP@colwidth|}: The space between columns, defined in the options, the y-coordinate of the current column's beginning, end, center axis, and absolute width, respectively.
+% \item {\color{value}|\TP@subcolspace|}, {\color{value}|\TP@subcoltop|}, {\color{value}|\TP@subcolbottom|}, {\color{value}|\TP@subcolcenter|}, {\color{value}|\subcolwidth|}: The same lengths, in the subcolumn environment.
+% \item {\color{value}|\TP@blockverticalspace|},
+% {\color{value}|\TP@blocktitleinnersep|}, {\color{value}|\TP@blockbodyinnersep|}: Spacing rules for blocks, defined in options.
+% \item {\color{value}|\TP@blockcenter|}: Horizontal position of the center of the current block; it is redefined for each call to the {\color{macro}|\block|} command.
+% \item {\color{value}|\blockwidth|}, {\color{value}|\blockbodyheight|}, {\color{value}|\blocktitleheight|}: Dimensions of the current block's components; it is redefined for each call to the {\color{macro}|\block|} command.
+% \item {\color{value}|\TP@blocktop|}: The y-coordinate of the top edge of the block (including the title if it exists).
+% \item {\color{value}|\TP@blocktitleoffsetx|}, {\color{value}|\TP@blocktitleoffsety|}: Shifts to the position of the block title component; each call to {\color{macro}|\block|} resets them to 0.
+% \item {\color{value}|\TP@blockbodyoffsetx|}, {\color{value}|\TP@blockbodyoffsety|}: Similar to the above, but for the block's body component; also reset to 0 with each {\color{macro}|\block|} call.
+% \item {\color{value}|\blockroundedcorners|}, {\color{value}|\blocklinewidth|}, {\color{value}|\blockbodyinnersep|}, {\color{value}|\blocktitleinnersep|}: Values passed by the user with each block, or defined in a block style, which give the values to be used for TiKz draw parameters rounded corners, line width, and inner seps of the body and title, respectively. These may have default values defined in a style/theme using the functions: {\color{macro}|\setblockDefaultroundedcorners{}|}, {\color{macro}|\setblockDefaultlinewidth{}|}, \\
+% {\color{macro}|\setblockDefaultbodyinnersep{}|}, and {\color{macro}|\setblockDefaulttitleinnersep{}|}. If the user does not specify these values in the options of the block call, the defaults are used.
+% \item {\color{value}|\TP@noteinnersep|}: Defined in the options
+% \item {\color{value}|\TP@noteradius|}, {\color{value}|\TP@notetargetoffsetx|}, {\color{value}|\TP@notetargetoffsety|}, {\color{value}|\notewidth|}: Arguments optionally passed from the {\color{macro}|\note|} command; redefined for each call to {\color{macro}|\note|}.
+% \item {\color{value}|\noteheight|}: The height of the current note computed according to size of contents and {\color{value}|\notewidth|}; redefine with each call to {\color{macro}|\note|}.
+% \item {\color{value}|\noteroundedcorners|}, {\color{value}|\notelinewidth|}, {\color{value}|\noteinnersep|}: Values passed by the user with each note, or defined in a note style, which give the values to be used for TiKz draw parameters rounded corners, line width, and inner seps of the body and title, respectively. These may have default values defined in a style/theme using the functions: {\color{macro}|\setnoteDefaultroundedcorners{}|}, {\color{macro}|\setnoteDefaultlinewidth{}|}, and {\color{macro}|\setnoteDefaultbodyinnersep{}|}. If the user does not set in a note call the options, the defaults are used.
+%\end{itemize}
+%Additionally, several nodes are defined for the title and the blocks. These
+%should be used when defining block styles and title styles. The
+%\mnode{|title|} node is the main node for the title material which spans
+%an area large enough to cover the entirety of the title material as formatted
+%with the {\color{macro}|\settitle|} command. The vertical and horizontal
+%positions of the title are stored as {\color{value}|\titlepostop|}, {\color{value}|\titleposbottom|}, {\color{value}|\titleposleft|}, and {\color{value}|\titleposright|}. For blocks, \mnode{|blocktitle|} and \mnode{|blockbody|} are nodes which cover the extent of the relevant components.
+%
+% \StopEventually{}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposter-example.tex>
+% \end{macrocode}
+%
+% \begin{macrocode}
+
+ \documentclass[25pt, a0paper, portrait, margin=0mm, innermargin=15mm,
+ blockverticalspace=15mm, colspace=15mm, subcolspace=8mm]{tikzposter} %Default values for poster format options.
+
+ \tikzposterlatexaffectionproofon %shows small comment on how the poster was made at bottom of poster
+
+ % Commands
+ \newcommand{\bs}{\textbackslash} % backslash
+ \newcommand{\cmd}[1]{{\bf \color{red}#1}} % highlights command
+
+ % Title, Author, Institute
+ \title{Using tikzposter}
+ \author{Pascal Richter, Elena Botoeva, Richard Barnard, \& Dirk Surmann}
+ \institute{}
+
+ % -- PREDEFINED THEMES ---------------------- %
+ % Choose LAYOUT: Default, Basic, Rays, Simple, Envelope, Wave, Board, Autumn, Desert,
+ \usetheme{Autumn}
+\usecolorstyle[colorPalette=BrownBlueOrange]{Germany}
+
+% - Predefined background styles: Default, Rays, VerticalGradation, BottomVerticalGradation, Empty
+% \usebackgroundstyle{Rays}
+%
+% - Predefined title styles: Default, Basic, Envelope, Wave, VerticalShading, Filled, Empty
+% \usetitlestyle[width=400mm]{Filled}
+%
+% - Predefined block styles: Default, Basic, Minimal, Envelope, Corner, Slide, TornOut
+% \useblockstyle[bodyinnersep=1cm]{Envelope}
+%
+% - Predefined innerblock styles: Default, Table, Basic, Minimal, Envelope, Corner, Slide, TornOut
+% \useinnerblockstyle{Table}
+%
+% % - Predefined note styles: Default, Corner, VerticalShading, Sticky
+% \usenotestyle[rotate=50]{VerticalShading}
+
+ \begin{document}
+
+ \maketitle
+
+ \begin{columns}%blocks will be placed into columns
+ \column{.55}
+ \block[roundedcorners=40]{Creating the document}{
+ The document begins with:
+ \begin{quote}
+ \texttt{\bs documentclass[25pt, a0paper, portrait, margin=10mm, innermargin=15mm,
+ blockverticalspace=15mm, colspace=15mm, subcolspace=8mm]\{tikzposter\}\\
+ \bs title\{Title\}\\
+ \bs author\{Author(s)\}\\
+ \bs institute\{Institute \}\\
+ \bs titlegraphic\{Logo\}\\
+ \bs begin\{document\}\\
+ \bs maketitle}
+ \\ \dots \end{quote}
+
+ \begin{tikzfigure}[A figure can be made with \bs \texttt{tikzfigure}; \bs\texttt{figure} does not work]
+ \begin{tikzpicture}
+ \draw[draw=none,inner color=red, outer color=green] (0,0) circle (1.5cm);
+ \end{tikzpicture}
+ \end{tikzfigure}
+ \innerblock[]{Inner Blocks}{Inner blocks may be created inside of blocks with the command \bs\texttt{innerblock[{\it options}]\{{\it Heading}\}\{{\it Text}\}} }
+ \coloredbox{Text may be highlighted using colored boxes created by \bs\texttt{coloredbox[{\it options}]\{{\it Text\}}}}
+
+ }
+ \note[targetoffsetx=-.05\textwidth,targetoffsety=9.5cm,innersep=.4cm,angle=-45,connection]{Optional arguments for the format of the poster}
+ \block{The title matter}{
+ The title is made by the standard \texttt{\bs maketitle[{\it options}]} command where you can alter the \texttt{width}, the spacing between the title and top of the poster (\texttt{titletotopverticalspace}), the bottom of the title to the main content of the poster (\texttt{titletoblockverticalspace}) and the space between the title information and the logo (\texttt{titlegraphictotitleverticalspace}).
+
+ If the default format of the title is not to your liking, you can define the placement of the different items via the \texttt{\bs settitle} command, described in the manual.
+ }
+ \block{Blocks}{
+ Blocks are arranged in a grid, by default, with width by default \texttt{\bs textwdith}. They are created by the command
+ \begin{quote}
+ \bs\texttt{block [{\it options}] \{{\it title}\}\{{\it contents}\}}
+ \end{quote}
+ The title may be left empty, resulting in no title area being created for the block (as seen in a later block to the right). Further blocks will be placed below automatically, at a distance defined by \texttt{blockverticalspace}.
+
+ If you want to change the position of the title matter or the contents in the block, you may by setting in the options
+ \begin{quote}
+ \texttt{titleoffsetx, titleoffsety, bodyoffsetx, bodyoffsety}
+ \end{quote}
+ which let you adjust the vertical or horizontal position of the two parts of the block, respectively. You can also make, relative to the default width, the title and block body by setting
+ \begin{quote}
+ \texttt{titlewidthscale, bodywidthscale}
+ \end{quote}
+ The title's alignment can be set by \texttt{titleleft, titlecenter, titleright}, the body may be shifted vertically by setting \texttt{bodyverticalshift}, and the shape of the block can be altered by setting \texttt{roundedcorners, linewidth}. The inner margins of the title can by set by \texttt{titleinnersep,bodyinnersep}.
+ }
+
+ \note[targetoffsetx=24cm, targetoffsety=-9cm,rotate=1,angle=270,radius=8cm,width=.75\textwidth,innersep=.4cm]{
+ You can place notes that are ``attached'' to the previous block using the command
+ \begin{quote} \texttt{\bs note[{\it options}]\{{\it contents}\}}\end{quote}
+ The note is placed by default slightly to the right of a ``target'' in the center of the previous block. The note style may also allow for a connection between the note and the ``target''. \\
+ The target may be shifted from the default by setting the options \texttt{targetoffsetx, targetoffsety}, rotated by an angle with \texttt{rotate}, and its width with \texttt{width}. The placement of the note in relation with the target is given in polar coordinates with \texttt{ radius, angle}. Please observe that notes are always drawn {\bf over} the other objects. They do not affect the placement of blocks.
+ }
+
+ \column{.45}
+ \block{Columns}{
+ By default, blocks are arranged in a single column. If you want multiple columns for your poster, you may use the \texttt{columns} environment. For example,
+ \begin{quote}
+ \texttt{\noindent \bs begin\{columns\}\\
+ \bs column\{.6\}\\
+ \bs block\{\dots\}\{\dots\}\\
+ \bs column\{.4\}\\
+ \bs block\{\dots\}\{\dots\}\\
+ \bs block\{\dots\}\{\dots\}\\
+ \bs end\{columns\}
+ }
+ \end{quote}
+ will create two columns of 60\% and 40\% the available width; spacing between successive columns is handled automatically. The block command(s) following \texttt{\bs column} are the blocks to go in that column. The number of columns is free to be chosen, but the relative widths must all be chosen. If the widths sum to less than 1, empty space will be seen on the right. If they sum to more than 1, the latter columns will be cut off.
+ }
+
+ \begin{subcolumns}
+ \subcolumn{.45}
+ \block{Subcolumns}{If you want to have an additional subdivision of columns inside a column, you may use the\\ \texttt{\bs subcolumns} environment inside of a column environment. The functionality is similar to that of columns, but now the widths are relative to the width of the current column.}
+
+ \subcolumn{.5}
+ \block{}{An example use of subcolumns is.
+ \begin{quote}
+ \texttt{\bs begin\{subcolumns\}\\
+ \bs subcolumn\{.6\}\\
+ \bs block\{\dots\}\{\dots\}\\
+ \bs subcolumn\{.4\}\\
+ \bs block\{\dots\}\{\dots\}\\
+ \bs block\{\dots\}\{\dots\}\\
+ \bs end\{subcolumns\}
+ }
+ \end{quote}
+ }
+ \end{subcolumns}
+
+ \block[titlewidthscale=.8,bodywidthscale=.9,titleoffsety=9.5mm,bodyoffsety=9mm]{Changing the Poster's Appearance}{
+ If the default appearance of the title, background, blocks, and notes is not desired, you may change the colors by calling the color style along with a general layout theme with the commands
+ \begin{quote}
+ \texttt{\bs usecolorpalette}\{{\em color palette}\}\\
+ \texttt{\bs usecolorstyle\{{\em color style}\}}
+ \end{quote}
+ and
+ \begin{quote}
+ \texttt{\bs usetheme\{{\em layout style}\}}
+ \end{quote}
+ where the color palette and style and layout style are either the name of a custom made or one of the offered predefined choices listed in the manual or the comments of this poster's source. Individual changes can be made to the style of the background, title matter, blocks, inner blocks, and notes by using one of the following (along with either a custom-designed style or a predefined style listed in the manual or the comments of this poster's source). These changes are made with the commands
+ \begin{quote}
+ \texttt{\bs usebackgroundstyle[]\{\}, \bs usetitlestyle[]\{\},\\ \bs useblockstyle[]\{\},\bs innerblockstyle[]\{\}, \bs usenotestyle[]\{\}}
+ \end{quote}
+ Custom styles for these can be made; this is detailed in the manual.
+ }
+
+ \end{columns}
+
+ \block[titleoffsety=-1cm,bodyoffsety=-1cm]{Sample document}{\vspace{2em}
+ This poster was created by the following commands (omitting the contents of the blocks and notes) to give a sense of how different objects are created and options used.
+ \begin{quote}
+ \texttt{\bs documentclass[25pt, a0paper, portrait, margin=0mm, innermargin=15mm,
+ blockverticalspace=15mm, colspace=15mm, subcolspace=8mm]\{tikzposter\}\\
+ \bs title\{Using tikzposter\} \bs author\{Pascal Richter, Elena Botoeva, Richard Barnard, \& Dirk Surmann\} \bs institute\{\}\\
+ \bs usetheme\{Autumn\}\bs usecolorstyle[colorPalette=BrownBlueOrange]\{Germany\}\\
+ \bs begin\{document\}\bs maketitle\\
+ \bs begin\{columns\} \bs column\{0.55\}\\
+ \bs block\{Creating the document\}\{The document\dots\} \bs note[targetoffsetx=-.05\bs textwidth,targetoffsety=9.5cm,innersep=.4cm,angle=-45,connection]\{\dots\}\\
+ \bs block\{The title matter\}\{The title\dots\}\\
+ \bs block\{Blocks\}\{Blocks are\dots\} \bs note[targetoffsetx=24cm, targetoffsety=-9cm,rotate=1,angle=270,radius=8cm,width=.75\bs textwidth,innersep=.4cm]\{You can\dots\}\\
+ \bs column\{0.45\} \bs block\{Columns\}\{By default,\dots\}\\
+ \bs begin\{subcolumns\} \bs subcolumn\{.45\}
+ \bs block\{Subcolumns\}\{If you\dots\}
+ \bs subcolumn\{.5\} \bs block\{\}\{An example\dots\}
+ \bs end\{subcolumns\}\\
+ \bs block[titlewidthscale=.8,bodywidthscale=.9,titleoffsety=9.5mm,bodyoffsety=9mm]\{Changing the Poster's Appearance\}\{If the default\dots\}
+ \bs end\{columns\}\\
+ \bs block[titleoffsety=-1cm,bodyoffsety=-1cm]\{Sample document\}\{This poster\dots\}\\
+ \bs end\{document\}
+ }
+ \end{quote}
+ }
+
+ \end{document}
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposter-example.tex>
+% \end{macrocode}
+%
+% \section{Implementation}
+% \subsection*{Color themes}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterColorstyles.tex>
+% \end{macrocode}
+% \begin{macrocode}
+
+\definecolorstyle{Default}{
+ % Define default colors
+ % GrayBlueYellow
+ \definecolor{colorOne}{HTML}{DDDDDD}
+ \definecolor{colorTwo}{HTML}{0066A8}
+ \definecolor{colorThree}{HTML}{FCE565}%FCF0AD}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{colorOne}
+ \colorlet{framecolor}{colorTwo}
+ % Title Colors
+ \colorlet{titlefgcolor}{black}
+ \colorlet{titlebgcolor}{white}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{colorTwo}
+ \colorlet{blocktitlefgcolor}{white}
+ \colorlet{blockbodybgcolor}{white}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{colorThree}
+ \colorlet{innerblocktitlefgcolor}{black}
+ \colorlet{innerblockbodybgcolor}{white}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorThree!70!white}
+ \colorlet{notefrcolor}{colorThree}
+ }
+
+\definecolorstyle{Australia}{
+ % Define default colors
+ %GreenGrayViolet
+ \definecolor{colorOne}{HTML}{A2E2C7}
+ \definecolor{colorTwo}{HTML}{56555A}
+ \definecolor{colorThree}{HTML}{C9AECF}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{colorOne}
+ \colorlet{framecolor}{colorOne!50!colorTwo}
+ % Title Colors
+ \colorlet{titlefgcolor}{black}
+ \colorlet{titlebgcolor}{white}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{colorTwo}
+ \colorlet{blocktitlefgcolor}{white}
+ \colorlet{blockbodybgcolor}{white}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{colorThree}
+ \colorlet{innerblocktitlefgcolor}{black}
+ \colorlet{innerblockbodybgcolor}{white}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorThree}
+ \colorlet{notefrcolor}{colorThree}
+ }
+
+\definecolorstyle{Britain}{
+ % Define default colors
+ % BlueGrayOrange
+ \definecolor{colorOne}{HTML}{116699}
+ \definecolor{colorTwo}{HTML}{CCCCCC}
+ \definecolor{colorThree}{HTML}{CC6633}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{colorOne}
+ \colorlet{framecolor}{colorTwo}
+ % Title Colors
+ \colorlet{titlefgcolor}{black}
+ \colorlet{titlebgcolor}{white}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{colorTwo}
+ \colorlet{blocktitlefgcolor}{colorOne}
+ \colorlet{blockbodybgcolor}{white}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{colorThree}
+ \colorlet{innerblocktitlefgcolor}{white}
+ \colorlet{innerblockbodybgcolor}{white}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorThree!40!white}
+ \colorlet{notefrcolor}{colorThree!60!white}
+ }
+
+\definecolorstyle{Sweden}{
+ % Define default colors
+ % BlueGrayOrange
+ \definecolor{colorOne}{HTML}{116699}
+ \definecolor{colorTwo}{HTML}{CCCCCC}
+ \definecolor{colorThree}{HTML}{CC6633}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{colorOne!40!white}
+ \colorlet{framecolor}{colorTwo}
+ % Title Colors
+ \colorlet{titlefgcolor}{black}
+ \colorlet{titlebgcolor}{white}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{colorTwo!70!black}
+ \colorlet{blocktitlefgcolor}{colorOne}
+ \colorlet{blockbodybgcolor}{white!90!colorTwo}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{colorThree}
+ \colorlet{innerblocktitlefgcolor}{white}
+ \colorlet{innerblockbodybgcolor}{white}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorThree!50!white}
+ \colorlet{notefrcolor}{colorThree!50!white}
+ }
+
+\definecolorstyle{Spain}{
+ % Define default colors
+ % BlueGrayOrange
+ \definecolor{colorOne}{HTML}{116699}
+ \definecolor{colorTwo}{HTML}{CCCCCC}
+ \definecolor{colorThree}{HTML}{CC6633}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{colorOne!55!white}
+ \colorlet{framecolor}{colorTwo}
+ % Title Colors
+ \colorlet{titlefgcolor}{white}
+ \colorlet{titlebgcolor}{colorOne}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{colorOne!80!black}
+ \colorlet{blocktitlefgcolor}{white}
+ \colorlet{blockbodybgcolor}{white}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{colorThree}
+ \colorlet{innerblocktitlefgcolor}{white}
+ \colorlet{innerblockbodybgcolor}{white}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorThree!50!white}
+ \colorlet{notefrcolor}{colorThree}
+ }
+
+\definecolorstyle{Russia}{
+ % Define default colors
+ % BlueGrayOrange
+ \definecolor{colorOne}{HTML}{116699}
+ \definecolor{colorTwo}{HTML}{CCCCCC}
+ \definecolor{colorThree}{HTML}{CC6633}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{white}
+ \colorlet{framecolor}{colorOne!50!colorThree!30!}
+ % Title Colors
+ \colorlet{titlefgcolor}{white}
+ \colorlet{titlebgcolor}{colorOne!70!black}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{colorThree!80!colorTwo!80!black}
+ \colorlet{blocktitlefgcolor}{white}
+ \colorlet{blockbodybgcolor}{colorTwo!40}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{colorTwo!40}
+ \colorlet{innerblocktitlefgcolor}{black}
+ \colorlet{innerblockbodybgcolor}{colorTwo}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorTwo}
+ \colorlet{notefrcolor}{colorTwo}
+ }
+
+\definecolorstyle{Denmark}{
+ % Define default colors
+ % PurpleGrayBlue
+ \definecolor{colorOne}{HTML}{AE0D45}
+ \definecolor{colorTwo}{HTML}{7F8897}
+ \definecolor{colorThree}{HTML}{C8512D}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{white}
+ \colorlet{framecolor}{white}
+ % Title Colors
+ \colorlet{titlebgcolor}{colorOne}
+ \colorlet{titlefgcolor}{white}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{colorTwo}
+ \colorlet{blocktitlefgcolor}{colorOne}
+ \colorlet{blockbodybgcolor}{white}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{colorThree}
+ \colorlet{innerblocktitlefgcolor}{white}
+ \colorlet{innerblockbodybgcolor}{white}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorTwo!50!white}
+ \colorlet{notefrcolor}{colorTwo!50!white}
+ }
+
+\definecolorstyle{Germany}{
+ % Define default colors
+ % BrownOrangeBlue
+ \definecolor{colorOne}{HTML}{8C7269}
+ \definecolor{colorTwo}{HTML}{E89261}
+ \definecolor{colorThree}{HTML}{A2C4D9}
+}{
+ % Background Colors
+ \colorlet{backgroundcolor}{colorTwo}
+ \colorlet{framecolor}{colorThree}
+ % Title Colors
+ \colorlet{titlebgcolor}{colorOne}
+ \colorlet{titlefgcolor}{white}
+ % Block Colors
+ \colorlet{blocktitlebgcolor}{white}
+ \colorlet{blocktitlefgcolor}{colorOne}
+ \colorlet{blockbodybgcolor}{white}
+ \colorlet{blockbodyfgcolor}{black}
+ % Innerblock Colors
+ \colorlet{innerblocktitlebgcolor}{white}
+ \colorlet{innerblocktitlefgcolor}{black}
+ \colorlet{innerblockbodybgcolor}{colorThree}
+ \colorlet{innerblockbodyfgcolor}{black}
+ % Note colors
+ \colorlet{notefgcolor}{black}
+ \colorlet{notebgcolor}{colorThree}
+ \colorlet{notefrcolor}{colorThree}
+ }
+
+
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterColorstyles.tex>
+% \end{macrocode}
+%
+%
+% \subsection*{Initial code}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposter.cls>
+% \end{macrocode}
+% \begin{macrocode}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{tikzposter}[2014/01/15 v2.0 LaTeX document class for Posters]
+
+ % --------------------------------------- %
+ % Loading Packages
+\usepackage{xkeyval}
+\usepackage{calc}
+\usepackage{ifthen}
+\usepackage{ae}
+\usepackage{xstring}
+\usepackage{etoolbox}
+\usepackage{tikz}
+ \usetikzlibrary{shapes,decorations,shadows,backgrounds,calc,fadings,fit}
+ \usetikzlibrary{decorations.pathmorphing}
+ \usepgflibrary{arrows}
+
+ % --------------------------------------- %
+ % Paper parameter
+\newif\ifTP@hugefontsize
+\newdimen\TP@innermargin
+\newdimen\TP@visibletextwidth
+\newdimen\TP@visibletextheight
+
+ % Title parameter
+\newdimen\TP@titlewidth
+\newdimen\titlewidth
+\newdimen\TP@titlelinewidth
+\newdimen\titlelinewidth
+\def\titleroundedcorners{}
+\newdimen\titleinnersep
+\newdimen\TP@titleinnersep
+\newdimen\TP@titletotopverticalspace
+\newdimen\titletotopverticalspace
+\newdimen\TP@titletoblockverticalspace
+\newdimen\TP@titleheight
+\newdimen\titleheight
+\newdimen\titlegraphicheight
+\newdimen\titleposleft
+\newdimen\titleposright
+\newdimen\titlepostop
+\newdimen\titleposbottom
+\newdimen\TP@titlegraphictotitledistance
+\def\TP@titletextscale{1}
+
+ % Maketitle parameter
+\def\@title{~}
+\def\title#1{\gdef\@title{\scalebox{\TP@titletextscale}{#1}}}
+\def\@author{~}
+\def\@institute{~}
+\def\@titlegraphic{~}
+
+ % Affection parameter
+\newif\ifTP@showlatexaffection
+
+ % Column parameter
+\newif\ifTP@columnEnvironment
+\TP@columnEnvironmentfalse
+\newif\ifTP@subcolumnEnvironment
+\TP@subcolumnEnvironmentfalse
+\newdimen\TP@colspace
+\newdimen\TP@coltop
+\newdimen\TP@colbottom
+\newdimen\TP@colcenter
+\newdimen\colwidth
+
+ % Subcolumn parameter
+\newdimen\TP@subcolspace
+\newdimen\TP@subcoltop
+\newdimen\TP@subcolbottom
+\newdimen\TP@subcolcenter
+\newdimen\subcolwidth
+
+ % Block parameter
+\newdimen\TP@blockverticalspace
+\newdimen\TP@blockcenter
+\newdimen\TP@blocktitleinnersep
+\newdimen\blocktitleinnersep
+\newdimen\TP@blockbodyinnersep
+\newdimen\blockbodyinnersep
+\newbox\TP@blocktitlebox
+\newbox\TP@blockbodybox
+\def\TP@blocktitleAlignment{}
+\newif\ifBlockHasTitle
+\newdimen\TP@blocktitlewidth
+\newdimen\TP@blockbodywidth
+\newdimen\TP@blockbodyheight
+\newdimen\TP@blocktitleheight
+\newdimen\TP@blocktop
+\newdimen\TP@blocktitleoffsetx
+\newdimen\TP@blocktitleoffsety
+\newdimen\TP@blockbodyoffsetx
+\newdimen\TP@blockbodyoffsety
+\newdimen\TP@blockbodyverticalshift
+\def\blockroundedcorners{}
+\newdimen\blocklinewidth
+
+ % Innerblock parameter
+\newdimen\TP@innerblockcenter
+\newdimen\TP@innerblocktitleinnersep
+\newdimen\innerblocktitleinnersep
+\newdimen\TP@innerblockbodyinnersep
+\newdimen\innerblockbodyinnersep
+\newbox\TP@innerblocktitlebox
+\newbox\TP@innerblockbodybox
+\def\TP@innerblocktitleAlignment{}
+\newif\ifInnerblockHasTitle
+\newdimen\TP@innerblocktitlewidth
+\newdimen\TP@innerblockbodywidth
+\newdimen\TP@innerblockbodyheight
+\newdimen\TP@innerblocktitleheight
+\newdimen\TP@innerblocktitleoffsetx
+\newdimen\TP@innerblocktitleoffsety
+\newdimen\TP@innerblockbodyoffsetx
+\newdimen\TP@innerblockbodyoffsety
+\newdimen\TP@innerblockbodyverticalshift
+\def\innerblockroundedcorners{}
+\newdimen\innerblocklinewidth
+
+ % Coloredbox parameter
+\newbox\TP@coloredbox
+\newdimen\TP@coloredboxwidth
+\def\TP@coloredboxroundedcorners{}
+\newdimen\TP@coloredboxlinewidth
+\newdimen\TP@coloredboxinnersep
+\newdimen\TP@coloredboxheight
+
+ % Note parameter
+\newdimen\TP@noteinnersep
+\newdimen\noteinnersep
+\newdimen\TP@notetargetoffsetx
+\newdimen\TP@notetargetoffsety
+\def\TP@noteangle{}
+\newdimen\TP@noteradius
+\newdimen\TP@notewidth
+\newdimen\TP@noteheight
+\newif\ifNoteHasConnection
+\newbox\TP@notebox
+\def\noterotate{}
+\def\noteroundedcorners{}
+\newdimen\notelinewidth
+
+ % --------------------------------------- %
+ % Declaring options
+\DeclareOptionX{12pt}{\TP@hugefontsizefalse \PassOptionsToClass{\CurrentOption}{extarticle}}
+\DeclareOptionX{14pt}{\TP@hugefontsizefalse \PassOptionsToClass{\CurrentOption}{extarticle}}
+\DeclareOptionX{17pt}{\TP@hugefontsizefalse \PassOptionsToClass{\CurrentOption}{extarticle}}
+\DeclareOptionX{20pt}{\TP@hugefontsizefalse \PassOptionsToClass{\CurrentOption}{extarticle}}
+\DeclareOptionX{25pt}{\TP@hugefontsizetrue}
+\DeclareOptionX{fleqn}{\PassOptionsToClass{\CurrentOption}{extarticle}}
+\DeclareOptionX{leqno} {\PassOptionsToClass{\CurrentOption}{extarticle}}
+\DeclareOptionX{a0paper}{\PassOptionsToPackage{\CurrentOption}{geometry}}
+\DeclareOptionX{a1paper}{\PassOptionsToPackage{\CurrentOption}{geometry}}
+\DeclareOptionX{a2paper}{\PassOptionsToPackage{\CurrentOption}{geometry}}
+\DeclareOptionX{landscape}{\PassOptionsToPackage{\CurrentOption}{geometry}}
+\DeclareOptionX{portrait}{\PassOptionsToPackage{\CurrentOption}{geometry}}
+\DeclareOptionX{margin}[20mm]{\PassOptionsToPackage{margin=#1}{geometry}}
+\DeclareOptionX{innermargin}{\TP@innermargin=#1}
+\DeclareOptionX{colspace}{\TP@colspace=#1}
+\DeclareOptionX{subcolspace}{\TP@subcolspace=#1}
+\DeclareOptionX{blockverticalspace}{\TP@blockverticalspace=#1}
+\DeclareOptionX*{{\PackageWarning{tikzposter}{Unknown Option \CurrentOption.}}}
+
+ % Executing options
+\ExecuteOptionsX{
+ 25pt,
+ a0paper,
+ portrait,
+ margin=0mm,
+ innermargin=15mm,
+ colspace=15mm,
+ subcolspace=8mm,
+ blockverticalspace=15mm
+}
+\ProcessOptionsX \relax
+\LoadClass{extarticle}
+\RequirePackage{geometry}
+\ifTP@hugefontsize
+ \input{a0size.sty}
+ \renewcommand{\tiny}{\fontsize{12}{14}\selectfont}
+ \renewcommand{\scriptsize}{\fontsize{14.4}{18}\selectfont}
+ \renewcommand{\footnotesize}{\fontsize{17.28}{22}\selectfont}
+ \renewcommand{\small}{\fontsize{20.74}{25}\selectfont}
+ \renewcommand{\normalsize}{\fontsize{24.88}{30}\selectfont}
+ \renewcommand{\large}{\fontsize{29.86}{37}\selectfont}
+ \renewcommand{\Large}{\fontsize{35.83}{45}\selectfont}
+ \renewcommand{\LARGE}{\fontsize{43}{54}\selectfont}
+ \renewcommand{\huge}{\fontsize{51.6}{64}\selectfont}
+ \renewcommand{\Huge}{\fontsize{61.92}{77}\selectfont}
+\fi
+\normalsize
+\pagestyle{empty}
+\setlength{\TP@visibletextwidth}{\textwidth-2\TP@innermargin}
+\setlength{\TP@visibletextheight}{\textheight-2\TP@innermargin}
+\pgfdeclarelayer{backgroundlayer}
+\pgfdeclarelayer{notelayer}
+\pgfsetlayers{backgroundlayer,main,notelayer}
+
+ % --------------------------------------- %
+ % Background styles
+\gdef\definebackgroundstyle#1#2{\expandafter\gdef\csname TP@backgroundstyle#1\endcsname{#2}}
+
+\gdef\usebackgroundstyle#1{
+ \ifcsname TP@backgroundstyle#1\endcsname
+ \gdef\TP@backgroundstyle{\csname TP@backgroundstyle#1\endcsname} % save macro
+ \else
+ \PackageWarning{tikzposter}{Unknown backgroundstyle `#1'.}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Title styles
+\gdef\definetitlestyle#1#2#3{
+ \expandafter\gdef\csname TP@titlestyle#1Defaultvalues\endcsname{\gpresetkeys{title}{#2}{}}
+ \expandafter\gdef\csname TP@titlestyle#1\endcsname{#3}
+}
+
+\define@key{title}{width}{\TP@titlewidth=#1 \titlewidth=#1}
+\define@key{title}{roundedcorners}{\gdef\titleroundedcorners{#1}}
+\define@key{title}{linewidth}{\TP@titlelinewidth=#1 \titlelinewidth=#1}
+\define@key{title}{innersep}{\TP@titleinnersep=#1 \titleinnersep=#1}
+\define@key{title}{titletotopverticalspace}{\TP@titletotopverticalspace=#1 \titletotopverticalspace=#1}
+\define@key{title}{titletoblockverticalspace}{\TP@titletoblockverticalspace=#1}
+\define@key{title}{titlegraphictotitledistance}{\TP@titlegraphictotitledistance=#1}
+\define@key{title}{titletextscale}{\TP@titletextscale=#1}
+\newcommand\usetitlestyle[2][]{
+ \ifcsname TP@titlestyle#2\endcsname
+ \csname TP@titlestyle#2Defaultvalues\endcsname\gpresetkeys{title}{#1}{} % call macro
+ \gdef\TP@titlestyle{\csname TP@titlestyle#2\endcsname} % save macro
+ \else
+ \PackageWarning{tikzposter}{Unknown titlestyle `#2'.}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Title
+\gdef\TP@maketitle{
+ \centering
+ \vbox{
+ \@titlegraphic
+ \\[\TP@titlegraphictotitledistance]
+ \centering
+ \color{titlefgcolor}
+ {\bfseries \Huge \sc \@title \par}
+ \vspace*{1em}
+ {\huge \@author \par}
+ \vspace*{1em}
+ {\LARGE \@institute}
+ }
+}
+
+\gdef\institute#1{\gdef\@institute{#1}}
+\gdef\titlegraphic#1{\gdef\@titlegraphic{#1}}
+
+\newenvironment{settitle}{
+ \makeatletter
+ \renewcommand{\TP@maketitle}
+}{
+ \makeatother
+}
+
+
+\renewcommand\maketitle[1][]{ % #1 keys
+ \normalsize
+ \setkeys{title}{#1}
+ % Title dummy to get title height
+ \node[transparent,inner sep=\TP@titleinnersep, line width=\TP@titlelinewidth, anchor=north, minimum width=\TP@visibletextwidth-2\TP@titleinnersep]
+ (TP@title) at ($(0, 0.5\textheight-\TP@titletotopverticalspace)$) {\parbox{\TP@titlewidth-2\TP@titleinnersep}{\TP@maketitle}};
+ \draw let \p1 = ($(TP@title.north)-(TP@title.south)$) in node {
+ \setlength{\TP@titleheight}{\y1}
+ \setlength{\titleheight}{\y1}
+ \global\TP@titleheight=\TP@titleheight
+ \global\titleheight=\titleheight
+ };
+
+ % Compute title position
+ \setlength{\titleposleft}{-0.5\titlewidth}
+ \setlength{\titleposright}{\titleposleft+\titlewidth}
+ \setlength{\titlepostop}{0.5\textheight-\TP@titletotopverticalspace}
+ \setlength{\titleposbottom}{\titlepostop-\titleheight}
+
+ % Title style (background)
+ \TP@titlestyle
+
+ % Title node
+ \node[inner sep=\TP@titleinnersep, line width=\TP@titlelinewidth, anchor=north, minimum width=\TP@visibletextwidth-2\TP@titleinnersep]
+ at (0,0.5\textheight-\TP@titletotopverticalspace) {\parbox{\TP@titlewidth-2\TP@titleinnersep}{\TP@maketitle}};
+
+ % Settings for blocks
+ \normalsize
+ \setlength{\TP@blocktop}{\titleposbottom-\TP@titletoblockverticalspace}
+}
+
+ % --------------------------------------- %
+ % Block styles
+\gdef\defineblockstyle#1#2#3{
+ \expandafter\gdef\csname TP@blockstyle#1Defaultvalues\endcsname{\gpresetkeys{block}{#2}{}}
+ \expandafter\gdef\csname TP@blockstyle#1\endcsname{#3}
+}
+
+\define@key{block}{titlewidthscale}{\setlength{\TP@blocktitlewidth}{#1\TP@blocktitlewidth}}
+\define@key{block}{bodywidthscale}{\setlength{\TP@blockbodywidth}{#1\TP@blockbodywidth}}
+\define@boolkey{block}{titleleft}[true]{\ifKV@block@titleleft \gdef\TP@blocktitleAlignment{\raggedright} \fi}
+\define@boolkey{block}{titlecenter}[true]{\ifKV@block@titlecenter \gdef\TP@blocktitleAlignment{\centering} \fi}
+\define@boolkey{block}{titleright}[true]{\ifKV@block@titleright \gdef\TP@blocktitleAlignment{\raggedleft} \fi}
+\define@key{block}{titleoffsetx}{\TP@blocktitleoffsetx=#1}
+\define@key{block}{titleoffsety}{\TP@blocktitleoffsety=#1}
+\define@key{block}{bodyoffsetx}{\TP@blockbodyoffsetx=#1}
+\define@key{block}{bodyoffsety}{\TP@blockbodyoffsety=#1}
+\define@key{block}{bodyverticalshift}{\TP@blockbodyverticalshift=#1}
+\define@key{block}{roundedcorners}{\gdef\blockroundedcorners{#1}}
+\define@key{block}{linewidth}{\blocklinewidth=#1}
+\define@key{block}{titleinnersep}{\TP@blocktitleinnersep=#1 \blocktitleinnersep=#1}
+\define@key{block}{bodyinnersep}{\TP@blockbodyinnersep=#1 \blockbodyinnersep=#1}
+
+\newcommand\useblockstyle[2][]{
+ \ifcsname TP@blockstyle#2\endcsname
+ \csname TP@blockstyle#2Defaultvalues\endcsname\gpresetkeys{block}{#1}{} % call macro
+ \gdef\TP@blockstyle{\csname TP@blockstyle#2\endcsname} % save macro
+ \else
+ \PackageWarning{tikzposter}{Unknown blockstyle `#2'.}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Block
+\newcommand\block[3][]{ % #1 keys #2 title #3 text
+ % Block position
+ \normalsize
+ \ifTP@subcolumnEnvironment
+ \TP@blocktitlewidth=\subcolwidth
+ \TP@blockbodywidth=\subcolwidth
+ \TP@blockcenter=\TP@subcolcenter
+ \else
+ \ifTP@columnEnvironment
+ \TP@blocktitlewidth=\colwidth
+ \TP@blockbodywidth=\colwidth
+ \TP@blockcenter=\TP@colcenter
+ \else
+ \setlength\TP@blocktitlewidth{\TP@visibletextwidth}
+ \setlength\TP@blockbodywidth{\TP@visibletextwidth}
+ \TP@blockcenter=0pt
+ \fi
+ \fi
+
+ % Set parameter
+ \setkeys{block}{#1}
+
+ % Settings for Subcolumns
+ \ifTP@subcolumnEnvironment \else \ifTP@columnEnvironment \else
+ \setlength\TP@blocktitlewidth{\TP@blocktitlewidth-\blocklinewidth}
+ \setlength\TP@blockbodywidth{\TP@blockbodywidth-\blocklinewidth}
+ \TP@blockcenter=0pt
+ \fi \fi
+
+ % Get height of title
+ \ifstrempty{#2}{
+ \BlockHasTitlefalse
+ \setlength{\TP@blocktitleheight}{0pt}
+ }{
+ \BlockHasTitletrue
+ \setbox\TP@blocktitlebox=\hbox{%
+ \pgfinterruptpicture%
+ \parbox{\TP@blocktitlewidth-2\TP@blocktitleinnersep}{%
+ \bf\LARGE\color{blocktitlefgcolor}\TP@blocktitleAlignment#2\par\normalsize}%
+ \endpgfinterruptpicture%
+ }%
+ \setlength{\TP@blocktitleheight}{\ht\TP@blocktitlebox + \dp\TP@blocktitlebox +2\TP@blocktitleinnersep}
+ }
+
+ % Get height of body
+ \setbox\TP@blockbodybox=\hbox{
+ \pgfinterruptpicture%
+ \parbox{\TP@blockbodywidth-2\TP@blockbodyinnersep-\TP@blockbodyoffsetx}{%
+ \vspace*{\TP@blockbodyverticalshift}\large\color{blockbodyfgcolor}#3\par\normalsize}%
+ \endpgfinterruptpicture%
+ }%
+ \setlength{\TP@blockbodyheight}{\ht\TP@blockbodybox + \dp\TP@blockbodybox +2\TP@blockbodyinnersep}
+
+ % Set coordinates
+ \node[minimum width=\TP@blocktitlewidth, minimum height=\TP@blocktitleheight, anchor=center] (blocktitle)%
+ at (\TP@blockcenter+\TP@blocktitleoffsetx, {\TP@blocktop-0.5\TP@blocktitleheight+\TP@blocktitleoffsety}){};
+ \ifBlockHasTitle
+ \node[minimum width=\TP@blockbodywidth, minimum height=\TP@blockbodyheight, anchor=center] (blockbody)%
+ at (\TP@blockcenter+\TP@blockbodyoffsetx, {\TP@blocktop-\TP@blocktitleheight-0.5\TP@blockbodyheight+\TP@blockbodyoffsety}){};
+ \else
+ \node[minimum width=\TP@blockbodywidth, minimum height=\TP@blockbodyheight, anchor=center] (blockbody)%
+ at (\TP@blockcenter+\TP@blockbodyoffsetx, {\TP@blocktop-\TP@blocktitleheight-0.5\TP@blockbodyheight}){};
+ \fi
+
+ % Draw style
+ \TP@blockstyle
+
+ % Draw text
+ \ifBlockHasTitle
+ \node[text width=\TP@blocktitlewidth-2\TP@blocktitleinnersep, inner sep=\TP@blocktitleinnersep, anchor=center]%
+ at (blocktitle){\box\TP@blocktitlebox};
+ \fi
+ \node[text width=\TP@blockbodywidth-2\TP@blockbodyinnersep, inner sep=\TP@blockbodyinnersep, anchor=center]%
+ at (blockbody){\box\TP@blockbodybox};
+
+ % Set position parameter
+ \draw let \p1 = (blockbody.south) in node {
+ \setlength{\TP@blocktop}{\y1-\TP@blockverticalspace}
+ \global\TP@blocktop=\TP@blocktop
+ };
+ \ifTP@subcolumnEnvironment
+ \setlength{\TP@subcolbottom}{\minof{\TP@subcolbottom}{\TP@blocktop}}
+ \global\TP@subcolbottom=\TP@subcolbottom
+ \else
+ \ifTP@columnEnvironment
+ \setlength{\TP@colbottom}{\minof{\TP@colbottom}{\TP@blocktop}}
+ \global\TP@colbottom=\TP@colbottom
+ \fi
+ \fi
+}
+
+ % --------------------------------------- %
+ % Innerblock styles
+\gdef\defineinnerblockstyle#1#2#3{
+ \expandafter\gdef\csname TP@innerblockstyle#1Defaultvalues\endcsname{\gpresetkeys{innerblock}{#2}{}}
+ \expandafter\gdef\csname TP@innerblockstyle#1\endcsname{#3}
+}
+
+\define@key{innerblock}{titlewidth}{\setlength{\TP@innerblocktitlewidth}{#1}}
+\define@key{innerblock}{bodywidth}{\setlength{\TP@innerblockbodywidth}{#1}}
+\define@key{innerblock}{titlewidthscale}{\setlength{\TP@innerblocktitlewidth}{#1\TP@innerblocktitlewidth}}
+\define@key{innerblock}{bodywidthscale}{\setlength{\TP@innerblockbodywidth}{#1\TP@innerblockbodywidth}}
+\define@boolkey{innerblock}{titleleft}[true]{\ifKV@innerblock@titleleft \gdef\TP@innerblocktitleAlignment{\raggedright} \fi}
+\define@boolkey{innerblock}{titlecenter}[true]{\ifKV@innerblock@titlecenter \gdef\TP@innerblocktitleAlignment{\centering} \fi}
+\define@boolkey{innerblock}{titleright}[true]{\ifKV@innerblock@titleright \gdef\TP@innerblocktitleAlignment{\raggedleft} \fi}
+\define@key{innerblock}{titleoffsetx}{\TP@innerblocktitleoffsetx=#1}
+\define@key{innerblock}{titleoffsety}{\TP@innerblocktitleoffsety=#1}
+\define@key{innerblock}{bodyoffsetx}{\TP@innerblockbodyoffsetx=#1}
+\define@key{innerblock}{bodyoffsety}{\TP@innerblockbodyoffsety=#1}
+\define@key{innerblock}{bodyverticalshift}{\TP@innerblockbodyverticalshift=#1}
+\define@key{innerblock}{roundedcorners}{\gdef\innerblockroundedcorners{#1}}
+\define@key{innerblock}{linewidth}{\innerblocklinewidth=#1}
+\define@key{innerblock}{titleinnersep}{\TP@innerblocktitleinnersep=#1 \innerblocktitleinnersep=#1}
+\define@key{innerblock}{bodyinnersep}{\TP@innerblockbodyinnersep=#1 \innerblockbodyinnersep=#1}
+\define@key{innerblock}{titlebgcolor}{\definecolor{innerblocktitlebgcolor}{named}{#1}}
+\define@key{innerblock}{titlefgcolor}{\definecolor{innerblocktitlefgcolor}{named}{#1}}
+\define@key{innerblock}{bodybgcolor}{\definecolor{innerblockbodybgcolor}{named}{#1}}
+\define@key{innerblock}{bodyfgcolor}{\definecolor{innerblockbodyfgcolor}{named}{#1}}
+
+\newcommand\useinnerblockstyle[2][]{
+ \ifcsname TP@innerblockstyle#2\endcsname
+ \csname TP@innerblockstyle#2Defaultvalues\endcsname\gpresetkeys{innerblock}{#1}{} % call macro
+ \gdef\TP@innerblockstyle{\csname TP@innerblockstyle#2\endcsname} % save macro
+ \else
+ \PackageWarning{tikzposter}{Unknown innerblockstyle `#2'.}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Innerblock
+\newcommand\innerblock[3][]{ % #1 keys #2 title #3 text
+ % Settings for Innerblock
+ \definecolor{innerblocktitlebgcolorTemp}{named}{innerblocktitlebgcolor}
+ \definecolor{innerblocktitlefgcolorTemp}{named}{innerblocktitlefgcolor}
+ \definecolor{innerblockbodybgcolorTemp}{named}{innerblockbodybgcolor}
+ \definecolor{innerblockbodyfgcolorTemp}{named}{innerblockbodyfgcolor}
+ \setlength{\TP@innerblocktitlewidth}{\linewidth}
+ \setlength{\TP@innerblockbodywidth}{\linewidth}
+ \setkeys{innerblock}{#1}
+
+ \begin{tikzpicture}
+
+ % Get center in x-direction
+ \pgfmathsetlength{\TP@innerblockcenter}{max(\TP@innerblocktitlewidth,\TP@innerblockbodywidth)/2}
+
+ % Get height of title
+ \ifstrempty{#2}{
+ \InnerblockHasTitlefalse
+ \setlength{\TP@innerblocktitleheight}{0pt}
+ }{
+ \InnerblockHasTitletrue
+ \setbox\TP@innerblocktitlebox=\hbox{%
+ \pgfinterruptpicture%
+ \parbox{\TP@innerblocktitlewidth-2\TP@innerblocktitleinnersep}{%
+ \bf\color{innerblocktitlefgcolor}\TP@innerblocktitleAlignment#2\par\normalsize}%
+ \endpgfinterruptpicture%
+ }
+ \setlength{\TP@innerblocktitleheight}{\ht\TP@innerblocktitlebox + \dp\TP@innerblocktitlebox +2\TP@innerblocktitleinnersep}
+ }
+
+ % Get height of body
+ \setbox\TP@innerblockbodybox=\hbox{
+ \pgfinterruptpicture%
+ \parbox{\TP@innerblockbodywidth-2\TP@innerblockbodyinnersep-\TP@innerblockbodyoffsetx}{%
+ \vspace*{\TP@innerblockbodyverticalshift}%
+ \color{innerblockbodyfgcolor}#3\par\normalsize}%
+ \endpgfinterruptpicture%
+ }%
+ \setlength{\TP@innerblockbodyheight}{\ht\TP@innerblockbodybox + \dp\TP@innerblockbodybox +2\TP@innerblockbodyinnersep}
+
+ % Set coordinates
+ \node[minimum width=\TP@innerblocktitlewidth, minimum height=\TP@innerblocktitleheight, anchor=center] (innerblocktitle)
+ at (\TP@innerblockcenter+\TP@innerblocktitleoffsetx, {-0.5\TP@innerblocktitleheight+\TP@innerblocktitleoffsety}) {};%
+ \ifInnerblockHasTitle
+ \node[minimum width=\TP@innerblockbodywidth, minimum height=\TP@innerblockbodyheight, anchor=center] (innerblockbody)
+ at (\TP@innerblockcenter+\TP@innerblockbodyoffsetx, {-\TP@innerblocktitleheight-0.5\TP@innerblockbodyheight+\TP@innerblockbodyoffsety}) {};%
+ \else
+ \node[minimum width=\TP@innerblockbodywidth, minimum height=\TP@innerblockbodyheight, anchor=center] (innerblockbody)
+ at (\TP@innerblockcenter+\TP@innerblockbodyoffsetx, {-\TP@innerblocktitleheight-0.5\TP@innerblockbodyheight}) {};%
+ \fi
+
+ % Draw style
+ \TP@innerblockstyle
+
+ % Draw text
+ \ifInnerblockHasTitle
+ \node[text width=\TP@innerblocktitlewidth-2\TP@innerblocktitleinnersep, inner sep=\TP@innerblocktitleinnersep, anchor= center]
+ at (innerblocktitle) {\box\TP@innerblocktitlebox};%
+ \fi
+ \node[text width=\TP@innerblockbodywidth-2\TP@innerblockbodyinnersep, inner sep=\TP@innerblockbodyinnersep, anchor= center]
+ at (innerblockbody) {\box\TP@innerblockbodybox};%
+ \end{tikzpicture}
+
+ % Reset colors
+ \definecolor{innerblocktitlebgcolor}{named}{innerblocktitlebgcolorTemp}
+ \definecolor{innerblocktitlefgcolor}{named}{innerblocktitlefgcolorTemp}
+ \definecolor{innerblockbodybgcolor}{named}{innerblockbodybgcolorTemp}
+ \definecolor{innerblockbodyfgcolor}{named}{innerblockbodyfgcolorTemp}
+}
+
+ % --------------------------------------- %
+ % Coloredbox
+\define@key{coloredbox}{width}{\setlength{\TP@coloredboxwidth}{#1}}
+\define@key{coloredbox}{roundedcorners}{\gdef\TP@coloredboxroundedcorners{#1}}
+\define@key{coloredbox}{linewidth}{\TP@coloredboxlinewidth=#1}
+\define@key{coloredbox}{innersep}{\TP@coloredboxinnersep=#1}
+\define@key{coloredbox}{bgcolor}{\definecolor{coloredboxbgcolorTemp}{named}{#1}}
+\define@key{coloredbox}{fgcolor}{\definecolor{coloredboxfgcolorTemp}{named}{#1}}
+\define@key{coloredbox}{framecolor}{\definecolor{coloredboxframecolorTemp}{named}{#1}}
+
+\newcommand\coloredbox[2][]{ % #1 keys #2 text
+ % Settings for coloredbox
+ \setlength{\TP@coloredboxwidth}{\TP@blocktitlewidth-4\TP@blocktitleinnersep}
+ \setkeys{coloredbox}{%
+ width={\linewidth}, roundedcorners=15, linewidth=3.5pt, innersep=10pt,
+ bgcolor=notebgcolor, fgcolor=notefgcolor, framecolor=notebgcolor, #1}
+
+ \begin{tikzpicture}
+ % Get height of text
+ \setbox\TP@coloredbox=\hbox{
+ \pgfinterruptpicture%
+ \parbox{\TP@coloredboxwidth-2\TP@coloredboxinnersep}{%
+ \color{coloredboxfgcolorTemp}#2\par\normalsize}%
+ \endpgfinterruptpicture%
+ }%
+ \setlength{\TP@coloredboxheight}{\ht\TP@coloredbox + \dp\TP@coloredbox +2\TP@coloredboxinnersep}
+
+ % Set coordinates
+ \node[minimum width=\TP@coloredboxwidth, minimum height=\TP@coloredboxheight, anchor=center] (coloredbox)
+ at (0.5\TP@coloredboxwidth, -0.5\TP@coloredboxheight) {};%
+
+ % Draw style
+ \begin{scope}[line width=\TP@coloredboxlinewidth, rounded corners=\TP@coloredboxroundedcorners]
+ \draw[color=coloredboxframecolorTemp, fill=coloredboxbgcolorTemp] (coloredbox.south west) rectangle (coloredbox.north east);
+ \end{scope}
+
+ % Draw text
+ \node[text width=\TP@coloredboxwidth-2\TP@coloredboxinnersep, inner sep=\TP@coloredboxinnersep, anchor= center]
+ at (coloredbox) {\box\TP@coloredbox};%
+ \end{tikzpicture}
+
+ % Reset colors
+ \definecolor{coloredboxbgcolor}{named}{coloredboxbgcolorTemp}
+ \definecolor{coloredboxfgcolor}{named}{coloredboxfgcolorTemp}
+}
+
+
+ % --------------------------------------- %
+ % Note styles
+\gdef\definenotestyle#1#2#3{
+ \expandafter\gdef\csname TP@notestyle#1Defaultvalues\endcsname{\gpresetkeys{note}{#2}{}}
+ \expandafter\gdef\csname TP@notestyle#1\endcsname{#3}
+}
+
+\define@key{note}{targetoffsetx}{\TP@notetargetoffsetx=#1}
+\define@key{note}{targetoffsety}{\TP@notetargetoffsety=#1}
+\define@key{note}{angle}{\def\TP@noteangle{#1}}
+\define@key{note}{radius}{\TP@noteradius=#1}
+\define@key{note}{width}{\TP@notewidth=#1}
+\define@boolkey{note}{connection}[true]{\NoteHasConnectiontrue \ifKV@note@connection \NoteHasConnectiontrue \else \NoteHasConnectionfalse \fi}
+\define@key{note}{rotate}{\gdef\noterotate{#1}}
+\define@key{note}{roundedcorners}{\gdef\noteroundedcorners{#1}}
+\define@key{note}{linewidth}{\notelinewidth=#1}
+\define@key{note}{innersep}{\TP@noteinnersep=#1 \noteinnersep=#1}
+\newcommand\usenotestyle[2][]{
+ \ifcsname TP@notestyle#2\endcsname
+ \csname TP@notestyle#2Defaultvalues\endcsname\gpresetkeys{note}{#1}{} % call macro
+ \gdef\TP@notestyle{\csname TP@notestyle#2\endcsname} % save macro
+ \else
+ \PackageWarning{tikzposter}{Unknown notestyle `#2'.}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Note
+\newcommand\note[2][]{ % #1 keys #2 text
+ \normalsize
+ \setkeys{note}{#1}
+
+ % Note box
+ \setbox\TP@notebox=\hbox{%
+ \pgfinterruptpicture%
+ \parbox{\TP@notewidth-2\TP@noteinnersep}{\color{notefgcolor}#2\par\normalsize}%
+ \endpgfinterruptpicture%
+ }%
+ \setlength{\TP@noteheight}{\ht\TP@notebox + \dp\TP@notebox +2\TP@noteinnersep}
+ \pgfmathsetlength{\TP@noteheight}{max(\TP@noteheight,80pt)}
+
+ % Set note coordinates
+ \node (notetarget) at ($(blockbody)+(\TP@notetargetoffsetx,\TP@notetargetoffsety)$){};
+ \node[minimum width=\TP@notewidth, minimum height=\TP@noteheight, anchor=center,rotate=\noterotate] (notecenter)
+ at ($(notetarget)+({\TP@noteradius*cos(\TP@noteangle)},{\TP@noteradius*sin(\TP@noteangle)})$){};%
+
+ % Draw note
+ \begin{pgfonlayer}{notelayer}
+ \TP@notestyle
+ % Draw note text
+ \node[text width=\TP@notewidth-2\TP@noteinnersep, inner sep=\TP@noteinnersep, anchor=center,rotate=\noterotate]%
+ at (notecenter){\box\TP@notebox};
+ \end{pgfonlayer}
+}
+
+ % --------------------------------------- %
+ % Color palette
+\gdef\definecolorpalette#1#2{\expandafter\gdef\csname TP@colorpalette#1\endcsname{#2}}
+
+\gdef\usecolorpalette#1{
+ \ifcsname TP@colorpalette#1\endcsname
+ \csname TP@colorpalette#1\endcsname % call macro
+ \else
+ \PackageWarning{tikzposter}{Unknown color palette `#1'.}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Color style
+\gdef\definecolorstyle#1#2#3{
+ \expandafter\gdef\csname TP@colorstyle#1Defaultvalues\endcsname{#2}
+ \expandafter\gdef\csname TP@colorstyle#1\endcsname{#3}
+}
+
+\define@key{colors}{colorOne}{\colorlet{colorOne}{#1}}
+\define@key{colors}{colorTwo}{\colorlet{colorTwo}{#1}}
+\define@key{colors}{colorThree}{\colorlet{colorThree}{#1}}
+\define@key{colors}{colorPalette}{\usecolorpalette{#1}}
+
+\newcommand\usecolorstyle[2][]{ % #1 keys #2 macroname
+ \ifcsname TP@colorstyle#2\endcsname
+ \csname TP@colorstyle#2Defaultvalues\endcsname % call macro
+ \setkeys{colors}{#1} % set keys
+ \csname TP@colorstyle#2\endcsname % call macro
+ \else
+ \PackageWarning{tikzposter}{Unknown color style `#2'.}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Layouttheme
+\gdef\definelayouttheme#1#2{\expandafter\gdef\csname TP@layouttheme#1\endcsname{#2}}
+
+\gdef\usetheme#1{
+ % Layout theme
+ \ifcsname TP@layouttheme#1\endcsname
+ \csname TP@layouttheme#1\endcsname % call macro
+ \else
+ \PackageWarning{tikzposter}{Unknown layouttheme `#1'.}
+ \fi
+}
+
+ % Input Style and Theme Files
+\input{tikzposterColorpalettes}
+\input{tikzposterColorstyles}
+\input{tikzposterBackgroundstyles}
+\input{tikzposterTitlestyles}
+\input{tikzposterBlockstyles}
+\input{tikzposterInnerblockstyles}
+\input{tikzposterNotestyles}
+\input{tikzposterLayoutthemes}
+
+
+ % Set Default theme
+\usetheme{Default}
+
+ % --------------------------------------- %
+ % Columns environment
+\newenvironment{columns}{
+ \TP@columnEnvironmenttrue
+ \setlength{\TP@colcenter}{-0.5\TP@visibletextwidth-\TP@colspace-0.5\blocklinewidth}
+ \global\TP@colcenter=\TP@colcenter
+ \global\TP@coltop=\TP@blocktop
+ \global\TP@colbottom=\TP@blocktop
+ \colwidth=0pt
+}{
+ \TP@columnEnvironmentfalse
+ \global\TP@blocktop=\TP@colbottom
+}
+
+ % Column
+\gdef\column#1{ % #1: relative width
+ \ifTP@columnEnvironment
+ \normalsize
+ \setlength{\TP@blocktop}{\TP@coltop}
+ \setlength{\TP@colcenter}{\TP@colcenter+0.5\colwidth+\TP@colspace}
+ \setlength{\colwidth}{#1\TP@visibletextwidth+#1\TP@colspace-\TP@colspace-\blocklinewidth}
+ \setlength{\TP@colcenter}{\TP@colcenter+0.5\colwidth+\blocklinewidth}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Subcolumns environment
+\newenvironment{subcolumns}{
+ \ifTP@columnEnvironment
+ \TP@subcolumnEnvironmenttrue
+ \setlength{\TP@subcolcenter}{\TP@colcenter-0.5\colwidth-\TP@blockbodyinnersep-\TP@subcolspace-\TP@blockbodyinnersep}
+ \global\TP@subcolcenter=\TP@subcolcenter
+ \global\TP@subcoltop=\TP@blocktop
+ \global\TP@subcolbottom=\TP@blocktop
+ \subcolwidth=0pt
+ \fi
+}{
+ \TP@subcolumnEnvironmentfalse
+ \global\TP@blocktop=\TP@subcolbottom
+}
+
+ % Subcolumn
+\gdef\subcolumn#1{ % #1: relative width
+ \ifTP@subcolumnEnvironment
+ \normalsize
+ \setlength{\TP@blocktop}{\TP@subcoltop}
+ \setlength{\TP@subcolcenter}{\TP@subcolcenter+0.5\subcolwidth+\TP@blockbodyinnersep+\TP@subcolspace+\TP@blockbodyinnersep}
+ \setlength{\subcolwidth}{#1\colwidth+#1\TP@blockbodyinnersep+#1\TP@blockbodyinnersep
+ +#1\TP@subcolspace-\TP@subcolspace-2\TP@blockbodyinnersep}
+ \setlength{\TP@subcolcenter}{\TP@subcolcenter+0.5\subcolwidth}
+ \fi
+}
+
+ % --------------------------------------- %
+ % Affection
+\gdef\tikzposterlatexaffectionproofon{\TP@showlatexaffectiontrue}
+\gdef\tikzposterlatexaffectionproofoff{\TP@showlatexaffectionfalse}
+\TP@showlatexaffectiontrue
+
+ % --------------------------------------- %
+ % Document environment
+\AtBeginDocument{%
+ % Get titlegraphic height
+ \settototalheight{\titlegraphicheight}{\hbox{\@titlegraphic}}
+
+ \begin{center}
+ \begin{tikzpicture}
+ % Background
+ \coordinate (topright) at (0.5\textwidth, 0.5\textheight);
+ \coordinate (bottomleft) at (-0.5\textwidth, -0.5\textheight);
+ \clip (bottomleft) rectangle (topright);
+
+ % Draw background
+ \begin{pgfonlayer}{backgroundlayer}
+ \clip (bottomleft) rectangle (topright);
+ \TP@backgroundstyle
+ \ifTP@showlatexaffection
+ \node[inner sep=4pt, anchor=south east, fill=white, draw=none, rounded corners=5, fill opacity=0.3, text opacity=1]
+ at (0.5\textwidth-7pt, -0.5\textheight+7pt){\footnotesize {\bf\textrm\LaTeX}~\textrm{Ti\emph{k}Z}\bf\textrm{poster}};
+ \fi
+ \end{pgfonlayer}
+
+}
+
+\AtEndDocument{%
+ \end{tikzpicture}
+ \end{center}
+}
+
+%%
+
+\newcounter{figurecounter}
+
+%% #1 Caption
+\newenvironment{tikzfigure}[1][]{
+ \def \rememberparameter{#1}
+ \vspace{10pt}
+ \refstepcounter{figurecounter}
+ \begin{center}
+ }{
+ \ifx\rememberparameter\@empty
+ \else %nothing
+ \\[10pt]
+ {\small Fig.~\thefigurecounter: \rememberparameter}
+ \fi
+ \end{center}
+}
+
+%%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</tikzposter.cls>
+% \end{macrocode}
+% \subsection*{Layout styles}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterLayoutthemes.tex>
+% \end{macrocode}
+% \begin{macrocode}
+
+\definelayouttheme{Default}{
+ \usecolorstyle{Default}
+ \usebackgroundstyle{Default}
+ \usetitlestyle{Default}
+ \useblockstyle{Default}
+ \useinnerblockstyle{Default}
+ \usenotestyle{Default}
+}
+
+\definelayouttheme{Rays}{
+ \usecolorstyle[colorPalette=BlueGrayOrange]{Britain}
+ \usebackgroundstyle{Rays}
+ \usetitlestyle{Default}
+ \useblockstyle{Default}
+ \useinnerblockstyle{Default}
+ \usenotestyle{Corner}
+}
+
+\definelayouttheme{Basic}{
+ \usecolorstyle[colorPalette=GreenGrayViolet]{Australia}
+ \usebackgroundstyle{Default}
+ \usetitlestyle{Basic}
+ \useblockstyle{Basic}
+ \useinnerblockstyle{Default}
+ \usenotestyle{Default}
+}
+
+\definelayouttheme{Simple}{
+ \usecolorstyle[colorPalette=PurpleGrayBlue]{Denmark}
+ \usebackgroundstyle{Default}
+ \usetitlestyle{Default}
+ \useblockstyle{Minimal}
+ \useinnerblockstyle{Default}
+ \usenotestyle{Default}
+}
+
+\definelayouttheme{Envelope}{
+ \usecolorstyle[colorPalette=BlueGrayOrange]{Spain}
+ \usebackgroundstyle{VerticalGradation}
+ \usetitlestyle{Envelope}
+ \useblockstyle{Envelope}
+ \useinnerblockstyle{Default}
+ \usenotestyle{VerticalShading}
+ }
+
+\definelayouttheme{Wave}{
+ \usecolorstyle[colorPalette=BlueGrayOrange]{Spain}
+ \colorlet{blocktitlefgcolor}{colorOne}
+ \usebackgroundstyle{VerticalGradation}
+ \usetitlestyle{Wave}
+ \useblockstyle{Corner}
+ \useinnerblockstyle{Default}
+ \usenotestyle{VerticalShading}
+ }
+
+\definelayouttheme{Board}{
+ \usecolorstyle[colorPalette=BlueGrayOrange]{Sweden}
+ \usebackgroundstyle{VerticalGradation}
+ \usetitlestyle{Empty}
+ \useblockstyle{TornOut}
+ \useinnerblockstyle{Default}
+ \usenotestyle{Sticky}
+}
+
+\definelayouttheme{Autumn}{
+ \usecolorstyle[colorPalette=BrownBlueOrange]{Germany}
+ \usebackgroundstyle{Default}
+ \usetitlestyle{Filled}
+ \useblockstyle{Slide}
+ \useinnerblockstyle{Table}
+ \usenotestyle{Default}
+}
+
+\definelayouttheme{Desert}{
+ \usecolorstyle[colorPalette=GrayOrangeBlue]{Russia}
+ \usebackgroundstyle{BottomVerticalGradation}
+ \usetitlestyle{VerticalShading}
+ \useblockstyle{Slide}
+ \useinnerblockstyle{Table}
+ \usenotestyle{Default}
+ }
+
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterLayoutthemes.tex>
+% \end{macrocode}
+% \subsection*{Background styles}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterBackgroundstyles.tex>
+% \end{macrocode}
+% \begin{macrocode}
+
+
+ % Parameters
+ % \textwidth - length
+ % \textheight - length
+ % \titlegraphicheight - length
+ % \titletotopverticalspace - length
+ % \titleinnersep - length
+ % backgroundcolor - color
+ % topright - coordinate
+ % bottomleft - coordinate
+
+\definebackgroundstyle{Default}{
+ \fill[inner sep=0pt, line width=0pt, color=backgroundcolor]%
+ (bottomleft) rectangle (topright);
+}
+
+\definebackgroundstyle{Rays}{
+ \draw[line width=0pt, top color=backgroundcolor!70, bottom
+ color=backgroundcolor!70!black] (bottomleft) rectangle (topright);
+ %
+ \begin{scope}
+ \foreach \a in {10,20,...,80}{%
+ \draw[backgroundcolor, line width=0.15cm](bottomleft) --
+ ($(bottomleft)!1!(bottomleft)+(\a:120)$);%
+ }
+ \foreach \i in {1,2,...,50}{%
+ \begin{scope}[shift={($(rand*60,rand*70)$)}]
+ \draw[backgroundcolor!50!, line width=0.1cm] (0,0) circle (4);
+ \end{scope}
+ }
+ \end{scope}
+}
+
+\definebackgroundstyle{VerticalGradation}{
+ \draw[line width=0pt, bottom color=backgroundcolor, top
+ color=backgroundcolor!60!white] (bottomleft) rectangle (topright);
+}
+
+\definebackgroundstyle{BottomVerticalGradation}{
+ \draw[draw=none, line width=0pt, bottom color=titlebgcolor, top
+ color=framecolor] (bottomleft) rectangle ($(bottomleft)+(\textwidth,3)$);
+}
+
+\definebackgroundstyle{Empty}{
+ %
+}
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterBackgroundstyles.tex>
+% \end{macrocode}
+% \subsection*{Block styles}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterBlockstyles.tex>
+% \end{macrocode}
+% \begin{macrocode}
+ % Options:
+ % titlewidthscale
+ % bodywidthscale
+ % titlecenter, titleleft, titleright
+ % titleoffsetx
+ % titleoffsety
+ % bodyoffsetx
+ % bodyoffsety
+ % bodyverticalshift
+ % roundedcorners
+ % linewidth
+ % titleinnersep
+ % bodyinnersep
+
+ % Parameter:
+ % \ifBlockHasTitle - boolean
+ % blocktitle - coordinate
+ % blockbody - coordinate
+ % \blockroundedcorners - number
+ % \blocklinewidth - length
+ % \blockbodyinnersep - length
+ % \blocktitleinnersep - length
+ % blockbodybgcolor - color
+ % blocktitlebgcolor - color
+ % framecolor - color
+
+ \defineblockstyle{Default}{
+ titlewidthscale=1, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=30, linewidth=0.4cm,
+ titleinnersep=1cm, bodyinnersep=1cm
+}{
+ \begin{scope}[line width=\blocklinewidth, rounded corners=\blockroundedcorners]
+ \ifBlockHasTitle %
+ \draw[color=blocktitlebgcolor, fill=blocktitlebgcolor] (blockbody.south west) rectangle (blocktitle.north east);
+ \draw[color=blocktitlebgcolor, fill=blockbodybgcolor] (blockbody.south west) rectangle (blockbody.north east);
+ \else
+ \draw[color=blocktitlebgcolor, fill=blockbodybgcolor] (blockbody.south west) rectangle (blockbody.north east);
+ \fi
+ \end{scope}
+}
+
+ \defineblockstyle{Basic}{
+ titlewidthscale=0.8, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=15mm,
+ bodyverticalshift=15mm, roundedcorners=22, linewidth=5pt,
+ titleinnersep=8mm, bodyinnersep=8mm
+}{
+ \draw[rounded corners=\blockroundedcorners, inner sep=\blockbodyinnersep, line width=\blocklinewidth, color=framecolor, fill=blockbodybgcolor]
+ (blockbody.south west) rectangle (blockbody.north east); %
+ \ifBlockHasTitle%
+ \draw[rounded corners=\blockroundedcorners, inner sep=\blocktitleinnersep, line width=\blocklinewidth, color=framecolor, fill=blocktitlebgcolor]
+ (blocktitle.south west) rectangle (blocktitle.north east); %
+ \fi%
+}
+
+\defineblockstyle{Minimal}{
+ titlewidthscale=1, bodywidthscale=1, titleleft,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=0, linewidth=0.2cm,
+ titleinnersep=1cm, bodyinnersep=1cm
+}{
+ \begin{scope}[line width=\blocklinewidth, rounded corners=\blockroundedcorners]
+ \ifBlockHasTitle %
+ \draw[draw=none]%, fill=blockbodybgcolor]
+ (blockbody.south west) rectangle (blocktitle.north east);
+ \draw[color=blocktitlebgcolor, loosely dashed]
+ (blocktitle.south west) -- (blocktitle.south east);%
+ \else
+ \draw[draw=none]%, fill=blockbodybgcolor]
+ (blockbody.south west) rectangle (blockbody.north east);
+ \fi
+ \end{scope}
+}
+
+\defineblockstyle{Envelope}{
+ titlewidthscale=1, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=20, linewidth=1.6pt,
+ titleinnersep=1cm, bodyinnersep=1cm
+}{
+ \begin{scope}[rounded corners=\blockroundedcorners, line width=\blocklinewidth,
+ drop shadow={shadow xshift=0.3cm, shadow yshift=-0.3cm, opacity=0.3} ]
+ \ifBlockHasTitle
+ % the big rectangle
+ \draw[color=blocktitlebgcolor, fill=blockbodybgcolor, drop shadow]
+ (blockbody.south west) rectangle (blocktitle.north east);%
+ \begin{scope}
+ \clip (blocktitle.south west) rectangle (blocktitle.north east);
+ % fading on top
+ \fill[rounded corners=0, path fading=south, fill=blocktitlebgcolor, opacity=.4]
+ ($(blocktitle.south west)-(0.1,0)$) rectangle ($(blocktitle.north east)+(0.1,0)$);
+ % the trapezium
+ \draw[draw=none, bottom color=blocktitlebgcolor, top
+ color=blocktitlebgcolor!85!] %
+ ($(blocktitle.north west)+(0.25,0)$) -- ($(blocktitle.north west)+(0.75,0)$) -- %
+ ($(blocktitle.south west)+(2.5,0)$) -- ($(blocktitle.south east)-(2.5,0)$) -- %
+ ($(blocktitle.north east)-(0.75,0)$) -- ($(blocktitle.north east)-(0.25,0)$) -- cycle;
+ \end{scope}
+ \else
+ % No title
+ \draw[color=blocktitlebgcolor, fill=blockbodybgcolor]
+ (blockbody.south west) rectangle (blockbody.north east);
+ \fi
+ \end{scope}
+}
+
+\defineblockstyle{Corner}{
+ titlewidthscale=1, bodywidthscale=1, titleleft,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=20, linewidth=1.2pt,
+ titleinnersep=1cm, bodyinnersep=1cm
+}{
+ % the shadow above the corner
+ \begin{scope}
+ \clip (blockbody.south west) rectangle (blocktitle.north east);
+ \begin{scope}[transform canvas={xshift=-1cm, yshift=-0.8cm, rotate
+ around={-20:($(blocktitle.north east)-(10,0)$)}}]
+ \fill[color=gray, path fading=north, opacity=0.8]%
+ ($(blocktitle.north east)-(10,1)$) rectangle ($(blocktitle.north east)+(2,2.3)$);
+ \end{scope}
+ \end{scope}
+ %
+ % the border
+ \def \border{%
+ [rounded corners=30] (blockbody.south west) -- (blocktitle.north west) %
+ [rounded corners=30] -- ($(blocktitle.north east)-(9.4,0)$)
+ [rounded corners=30] -- ($(blocktitle.north east)-(0,3.4)$)
+ [rounded corners=30] |- (blockbody.south west) -- cycle
+ }
+ \draw[line width=\blocklinewidth, color=blocktitlebgcolor, fill=blockbodybgcolor,
+ % drop shadow={shadow xshift=0.3cm, shadow yshift=-0.3cm, opacity=0.3}
+ ] \border;
+ %
+ % the corner
+ \begin{scope}
+ \def \corner{ ($(blocktitle.north east)-(0,6)$) -- ($(blocktitle.north east)-(0,4.5)$) .. %
+ controls ($(blocktitle.north east)-(-0,2.7)$) and ($(blocktitle.north east)-(2.8,2.2)$)
+ .. ($(blocktitle.north east)-(3.8,4.6)$) %
+ .. controls ($(blocktitle.north east)-(8.6,0)$) .. ($(blocktitle.north east)-(11.4,0)$) %
+ [rounded corners=30] -- ($(blocktitle.north east)-(9.4,0)$) %
+ [rounded corners=30] -- ($(blocktitle.north east)-(0,3.4)$) %
+ [rounded corners=0] -- ($(blocktitle.north east)-(0,6)$)}
+ \draw[blocktitlebgcolor] \corner;
+ \clip \corner;
+ \begin{scope}[transform canvas={xshift=-1cm, yshift=-1.3cm, rotate
+ around={-23:($(blocktitle.north east)-(10,0)$)}}]
+ \fill[color=blocktitlebgcolor!90] ($(blocktitle.north east) - (10,2)$)
+ rectangle ($(blocktitle.north east) + (2,3.6)$); %
+ \fill[color=blocktitlebgcolor , path fading=south, opacity=1]
+ ($(blocktitle.north east) - (10,-1.2)$) rectangle ($(blocktitle.north east) + (2,1.6)$); %
+ \fill[color=blocktitlebgcolor , path fading=north, opacity=1]
+ ($(blocktitle.north east) - (10,-1.6)$) rectangle ($(blocktitle.north east) + (2,2.1)$);
+ \end{scope}
+ \end{scope}%
+}
+
+\defineblockstyle{Slide}{
+ titlewidthscale=1, bodywidthscale=1, titleleft,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=0, linewidth=0pt, titleinnersep=1cm,
+ bodyinnersep=1cm
+}{
+ \ifBlockHasTitle%
+ \draw[draw=none, left color=blocktitlebgcolor, right color=blockbodybgcolor]
+ (blocktitle.south west) rectangle (blocktitle.north east);
+ \fi%
+ \draw[draw=none, fill=blockbodybgcolor] %
+ (blockbody.north west) [rounded corners=30] -- (blockbody.south west) --
+ (blockbody.south east) [rounded corners=0]-- (blockbody.north east) -- cycle;
+}
+
+\defineblockstyle{TornOut}{
+ titlewidthscale=1, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=-1.2cm, roundedcorners=0, linewidth=1.2pt,
+ titleinnersep=1cm, bodyinnersep=1cm
+}{
+ \ifBlockHasTitle%
+ \coordinate (topright) at (blocktitle.north east);
+ \else
+ \coordinate (topright) at (blockbody.north east);
+ \fi%
+ \draw[color=blocktitlebgcolor, fill=blockbodybgcolor,%
+ line width=\blocklinewidth, drop shadow={shadow xshift=0.2cm, shadow yshift=-0.2cm,opacity=0.3}, %
+ decorate, decoration={random steps,segment length=1.5cm,amplitude=0.15cm}
+ % decorate, decoration={penciline,amplitude=0.2cm}
+ ] (blockbody.south west) rectangle (topright);%
+}
+
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterBlockstyles.tex>
+% \end{macrocode}
+
+% \subsection*{Note styles}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterNotestyles.tex>
+% \end{macrocode}
+% \begin{macrocode}
+
+
+ % Options:
+ % targetoffsetx
+ % targetoffsety
+ % angle
+ % radius
+ % width
+ % connection
+ % rotate
+ % roundedcorners
+ % linewidth
+ % innersep
+
+ % Parameter:
+ % \ifNoteHasConnection - boolean
+ % notecenter - coordinate
+ % notetarget - coordinate
+ % \noterotate - number
+ % \noteroundedcorners - number
+ % \notelinewidth - length
+ % \noteinnersep - length
+ % notebgcolor - color
+ % notefgcolor - color
+ % notefrcolor - color
+
+
+
+
+\definenotestyle{Default}{
+ targetoffsetx=0pt, targetoffsety=0pt, angle=0, radius=8cm, width=8cm,
+ connection=false, rotate=0, roundedcorners=20, linewidth=0pt, innersep=1cm
+}{
+ \ifNoteHasConnection %% callout note
+ \draw[color=notefrcolor, fill=notebgcolor]%
+ (notetarget) -- ($(notetarget)!1!4:(notecenter.center)$) --
+ ($(notetarget)!1!-4:(notecenter.center)$) --cycle; %
+ %
+ \fi
+ % the body of the note
+ \draw[color=notefrcolor, fill=notebgcolor, rounded
+ corners=\noteroundedcorners] (notecenter.south west) -- (notecenter.north
+ west) -- (notecenter.north east) -- (notecenter.south east) -- cycle;
+}
+
+ \definenotestyle{Corner}{
+ targetoffsetx=0pt, targetoffsety=0pt, angle=0, radius=8cm, width=12cm,
+ connection=false, rotate=0, roundedcorners=20, linewidth=0pt, innersep=1cm
+}{
+ \ifNoteHasConnection % callout note
+ \draw[color=notebgcolor, fill=notebgcolor, drop shadow={shadow
+ xshift=0.2cm, shadow yshift=-0.2cm, opacity=0.3}] %
+ (notetarget) -- ($(notetarget)!1!4:(notecenter.center)$) --
+ ($(notetarget)!1!-4:(notecenter.center)$) --cycle; %
+ \fi
+ % the body of the note
+ % the shape
+ \def \border{%
+ [rounded corners=0] (notecenter.south west) -- (notecenter.north west) %
+ [rounded corners=\noteroundedcorners] -- ($(notecenter.north
+ east)-(\noterotate:4.7)$) %
+ [rounded corners=\noteroundedcorners] -- ($(notecenter.north
+ east)+(-90+\noterotate:1.7)$) %
+ [rounded corners=0] -- (notecenter.south east) -- (notecenter.south
+ west) -- cycle%
+ }
+ \fill[color=notebgcolor] \border;
+ \coordinate (x) at (\noterotate:1);
+ \coordinate (y) at (\noterotate-90:1);
+ % the shadow of the corner
+ \fill[color=gray,opacity=0.3] ($(notecenter.north east)+3*(y)$) --
+ ($(notecenter.north east)+2.5*(y)$) .. %
+ controls ($(notecenter.north east)+1.25*(y)$) and ($(notecenter.north
+ east)-1.5*(x)+1.25*(y)$) .. %
+ ($(notecenter.north east)-1.9*(x)+2.5*(y)$) .. %
+ controls ($(notecenter.north east)-4.5*(x)$) .. %
+ ($(notecenter.north east)-5.7*(x)$) %
+ [rounded corners=\noteroundedcorners] -- ($(notecenter.north east)-4.7*(x)$) %
+ [rounded corners=\noteroundedcorners] -- ($(notecenter.north east)+1.7*(y)$) %
+ [rounded corners=0] -- ($(notecenter.north east)+3*(y)$);
+ % the corner
+ \fill[color=notefrcolor] %
+ ($(notecenter.north east)+3*(y)$) -- ($(notecenter.north east)+2.5*(y)$) .. %
+ controls ($(notecenter.north east)+1.25*(y)$) and ($(notecenter.north
+ east)-1.5*(x)+1.25*(y)$) .. %
+ ($(notecenter.north east)-1.9*(x)+2.3*(y)$) .. %
+ controls ($(notecenter.north east)-4.5*(x)$) .. %
+ ($(notecenter.north east)-5.7*(x)$) %
+ [rounded corners=\noteroundedcorners] -- ($(notecenter.north east)-4.7*(x)$) %
+ [rounded corners=\noteroundedcorners] -- ($(notecenter.north east)+1.7*(y)$) %
+ [rounded corners=0] -- ($(notecenter.north east)+3*(y)$);
+}
+
+ \definenotestyle{VerticalShading}{
+ targetoffsetx=0pt, targetoffsety=0pt, angle=0, radius=8cm, width=8cm,
+ connection=false, rotate=0, roundedcorners=20, linewidth=1pt, innersep=1cm
+}{
+ \ifNoteHasConnection % callout note
+ % the shadow
+ \begin{scope}[opacity=0.3]
+ \begin{pgftransparencygroup}
+ \coordinate (shadowshift) at (0.2cm,-0.2cm); \fill%
+ ($(notetarget)+(shadowshift)$) --
+ ($(notetarget)!1!4:(notecenter.center)+(shadowshift)$) --
+ ($(notetarget)!1!-4:(notecenter.center)+(shadowshift)$) --cycle; %
+ \fill[rounded corners=\noteroundedcorners] %
+ ($(notecenter.south west)+(shadowshift)$) -- ($(notecenter.north
+ west)+(shadowshift)$) -- ($(notecenter.north east)+(shadowshift)$)
+ -- ($(notecenter.south east)+(shadowshift)$) -- cycle;
+ \end{pgftransparencygroup}
+ \end{scope}
+ %% the main drawing
+ %
+ %% the border
+ \draw[color=notefrcolor, line width=\notelinewidth*2]%
+ (notetarget) -- ($(notetarget)!1!4:(notecenter.center)$) --
+ ($(notetarget)!1!-4:(notecenter.center)$) -- cycle;%
+ \draw[color=notefrcolor, line width=\notelinewidth*2, rounded
+ corners=\noteroundedcorners]%
+ (notecenter.south west) -- (notecenter.north west) --
+ (notecenter.north east) -- (notecenter.south east) -- cycle; %
+ %
+ %% the filling (vertical shading), shared between the note and the connection
+ \begin{scope}
+ \node[fit=(notetarget)(notecenter.south west)(notecenter.south east)
+ (notecenter.north east) (notecenter.north west), inner sep=+0pt]
+ (box) {};%
+ %
+ \clip (notetarget) -- ($(notetarget)!1!4:(notecenter.center)$) --
+ ($(notetarget)!1!-4:(notecenter.center)$) -- cycle%
+ [rounded corners=\noteroundedcorners] (notecenter.south west) --
+ (notecenter.north west) -- (notecenter.north east) --
+ (notecenter.south east) -- cycle;
+ %
+ \draw[draw=none, color=notefrcolor, top color=notebgcolor!60, bottom
+ color=notebgcolor] %
+ (box.south west) rectangle (box.north east);
+ \end{scope}
+ %
+ \else % the simple note
+ \begin{scope}[drop shadow={shadow xshift=0.2cm, shadow yshift=-0.2cm,
+ opacity=0.3}]
+ \draw[line width=\notelinewidth, rounded corners=\noteroundedcorners,
+ color=notefrcolor, top color=notebgcolor!60, bottom color=notebgcolor,
+ drop shadow] %
+ (notecenter.south west) -- (notecenter.north west) -- (notecenter.north
+ east) -- (notecenter.south east) -- cycle;
+ \end{scope}
+ \fi
+}
+
+ \definenotestyle{Sticky}{
+ targetoffsetx=0pt, targetoffsety=0pt, angle=0, radius=8cm, width=8cm,
+ connection=false, rotate=0, roundedcorners=0, linewidth=0pt, innersep=1cm
+}{
+ \ifNoteHasConnection %% callout note
+ \draw[color=notefrcolor, fill=notebgcolor, drop shadow={shadow
+ xshift=0.2cm, shadow yshift=-0.2cm, opacity=0.3}] %
+ (notetarget) -- ($(notetarget)!1!4:(notecenter.center)$) --
+ ($(notetarget)!1!-4:(notecenter.center)$) --cycle; %
+ \fi
+ % the body of the note
+ % shadow
+ \draw[draw=none, fill=gray, opacity=0.3]
+ ($(notecenter.north east)+(-0.5,0)$) [rounded corners=40]--%
+ (notecenter.north west) [rounded corners=0] -- %
+ ($(notecenter.south west)$) .. %
+ controls ($0.2*(notecenter.south west) + 0.8*(notecenter.south east)$) .. %
+ ($(notecenter.south east)+(-0.2,0.3)$) .. %
+ controls ($0.75*(notecenter.south east) + 0.25*(notecenter.north east) - (0.5,0)$) .. %
+ ($(notecenter.north east)+(-0.5,0)$);
+ % the shape
+ \def \border{%
+ ($(notecenter.north east)+(-0.5,0)$) [rounded corners=40]--%
+ (notecenter.north west) [rounded corners=0] -- %
+ ($(notecenter.south west)$) .. %
+ controls ($0.2*(notecenter.south west) + 0.8*(notecenter.south east)$) .. %
+ ($(notecenter.south east)+(0,0.7)$) .. %
+ controls ($0.75*(notecenter.south east) +0.25*(notecenter.north east) -(0.5,0)$) .. %
+ ($(notecenter.north east)+(-0.5,0)$)%
+ }%
+ \draw[color=notefrcolor, fill=notebgcolor]
+ \border;
+ % the shading in the left top corner
+ \begin{scope}
+ \clip \border; %
+ \begin{scope}[transform canvas={rotate
+ around={\noterotate+15:(notecenter.north west)}}]
+ \fill[notebgcolor!60!black, path fading=south, opacity=0.6]%
+ (notecenter.north west) -- +(-3,0) |- ($(notecenter.north west) + (0,-1.2)$)
+ -- ($(notecenter.north west) + (4,-1.2)$) |- ($(notecenter.north west)$);
+ \end{scope}
+ \end{scope}
+}
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterNotestyles.tex>
+% \end{macrocode}
+
+% \subsection*{Title styles}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterTitlestyles.tex>
+% \end{macrocode}
+% \begin{macrocode}
+
+% Options
+ % width
+ % roundedcorners
+ % linewidth
+ % innersep
+ % titletotopverticalspace
+ % titletoblockverticalspace
+ % titlegraphictotitledistance
+ % titletextscale
+
+ % Parameter:
+ % \textwidth - length
+ % \textheight - length
+ % \titlewidth - length
+ % \titlegraphicheight - length
+ % \titlelinewidth - length
+ % \titleinnersep - length
+ % \titleposleft, \titleposright, \titleposbottom, \titlepostop - length
+ % \titletotopverticalspace - length
+ % titlebgcolor - color
+
+\definetitlestyle{Default}{
+ width=600mm, roundedcorners=30, linewidth=0.4cm, innersep=1cm,
+ titletotopverticalspace=15mm, titletoblockverticalspace=20mm,
+ titlegraphictotitledistance=10pt, titletextscale=1
+}{
+ \begin{scope}[line width=\titlelinewidth, rounded corners=\titleroundedcorners]
+ \draw[color=framecolor, fill=titlebgcolor]%
+ (\titleposleft,\titleposbottom) rectangle (\titleposright,\titlepostop);
+ \end{scope}
+}
+
+\definetitlestyle{Basic}{
+ width=770mm, roundedcorners=0, linewidth=0pt, innersep=10pt,
+ titletotopverticalspace=20mm, titletoblockverticalspace=20mm,
+ titlegraphictotitledistance=25mm, titletextscale=1
+}{
+ \coordinate (topright) at (0.5\textwidth-0.5\titlelinewidth, 0.5\textheight-0.5\titlelinewidth);
+ \coordinate (bottomleft) at (-0.5\textwidth+0.5\titlelinewidth, 0.5\textheight-\titlegraphicheight-0.5\titlelinewidth-2\titletotopverticalspace-2\titleinnersep);
+ \draw[line width=\titlelinewidth, inner sep=\titleinnersep, fill=titlebgcolor] (bottomleft) rectangle (topright);
+}
+
+\definetitlestyle{Envelope}{
+ width=\paperwidth, roundedcorners=0, linewidth=0pt, innersep=1.5cm,
+ titletotopverticalspace=0mm, titletoblockverticalspace=20mm,
+ titlegraphictotitledistance=10pt, titletextscale=1
+}{
+ \coordinate (topleft) at (\titleposleft,\titlepostop);
+ \coordinate (topright) at (\titleposright,\titlepostop);
+ \coordinate (lefttoright) at (\titlewidth,0);
+ \coordinate (head) at (0,\titlepostop-\titleposbottom);
+ %
+ \draw[draw=none, bottom color=blocktitlebgcolor!90!black, %
+ top color=titlebgcolor!90] %
+ (topleft) -- ($(topleft)-0.2*(head)$) .. controls ($(topleft)-(head)+(1,0)$)
+ .. ($(topleft)-(head)+0.2*(lefttoright)$) --
+ ($(topleft)-(head)+0.8*(lefttoright)$) .. controls ($(topright)-(head)-(1,0)$)
+ .. %
+ ($(topright)-0.2*(head)$) -- (topright) -- cycle;
+ %
+ \draw[draw=none, right color=white, left color=blocktitlebgcolor]
+ ($(topleft)-(head)+0.8*(lefttoright)$) .. controls
+ ($(topleft)-(head)+0.92*(lefttoright)+(0,0.7)$) and %
+ ($(topright)- 0.13*(lefttoright)$) .. %
+ (topright) .. controls %
+ ($(topright)- 0.11*(lefttoright)$) and%
+ ($(topleft)-(head)+0.95*(lefttoright)$) .. %
+ ($(topleft)-(head)+0.82*(lefttoright)$);
+ %
+ \draw[draw=none, right color=white, left color=blocktitlebgcolor]
+ ($(topleft)-(head)+0.83*(lefttoright)$) .. controls
+ ($(topleft)-(head)+0.97*(lefttoright)+(0,0.2)$) and %
+ ($(topright)- 0.08*(lefttoright)$) .. %
+ (topright) .. controls %
+ ($(topright)- 0.06*(lefttoright)$) and %
+ ($(topleft)-(head)+0.99*(lefttoright)$) .. %
+ ($(topleft)-(head)+0.85*(lefttoright)$); %
+}
+
+\definetitlestyle{Wave}{
+ width=\paperwidth, roundedcorners=0, linewidth=0pt, innersep=1.5cm,
+ titletotopverticalspace=0mm, titletoblockverticalspace=20mm,
+ titlegraphictotitledistance=10pt, titletextscale=1
+}{
+ \coordinate (topleft) at (\titleposleft,\titlepostop);
+ \coordinate (topright) at (\titleposright,\titlepostop);
+ \coordinate (lefttoright) at (\titlewidth,0);
+ \coordinate (head) at (0,\titlepostop-\titleposbottom);
+ %
+ \draw[draw=none, left color=blocktitlebgcolor!90!black, right color=titlebgcolor!95]%
+ (topright) -- (topleft) -- %
+ ($(topleft) - (head)-(0,6)$) .. controls %
+ ($(topleft) - (head)-(0,6) + 0.25*(lefttoright) + (0,9)$) and %
+ ($(topright) - (head) - 0.5*(lefttoright) - (-10,16)$) .. %
+ ($(topright) - (head)$) -- cycle;
+ %
+ \draw[draw=none, left color=blocktitlebgcolor, right color=white] %
+ ($(topleft) - (head)-(0,2)$) .. controls %
+ ($(topleft) - (head)-(-6,3) + 0.25*(lefttoright) + (0,10)$) and ($(topright) -
+ (head) - 0.25*(lefttoright) - (-6,17)$).. %
+ ($(topright) - (head)$) .. controls %
+ ($(topright) - (head) - 0.25*(lefttoright)-(-7,19)$) and %
+ ($(topleft) - (head)-(-9,5) + 0.25*(lefttoright) + (0,10)$) .. %
+ ($(topleft) - (head)-(0,4)$);
+ %
+ \draw[draw=none, left color=white, right color=blocktitlebgcolor!90!black]%
+ ($(topleft) - (head)-(0,2)$) .. controls %
+ ($(topleft) - (head)-(-6,3) + 0.25*(lefttoright) + (0,10)$) and ($(topright) -
+ (head)+(0,6) - 0.25*(lefttoright) - (-6,20)$)..%
+ ($(topright) - (head)+(0,6)$) -- %
+ ($(topright) - (head)$) .. controls %
+ ($(topright) - (head) - 0.25*(lefttoright) - (-6,17)$) and %
+ ($(topleft) - (head)-(-8,4) + 0.25*(lefttoright) + (0,10)$) .. %
+ ($(topleft) - (head)-(0,2)$);
+ \setlength{\TP@titletoblockverticalspace}{5\TP@titletoblockverticalspace}
+}
+
+\definetitlestyle{VerticalShading}{
+ width=\paperwidth, roundedcorners=0, linewidth=0pt, innersep=1.5cm,
+ titletotopverticalspace=0mm, titletoblockverticalspace=20mm,
+ titlegraphictotitledistance=10pt, titletextscale=1
+}{
+ \draw[draw=none, bottom color=framecolor, top color=titlebgcolor]%
+ (\titleposleft,\titleposbottom) rectangle (\titleposright,\titlepostop); %
+}
+
+\definetitlestyle{Filled}{
+ width=\paperwidth, roundedcorners=0, linewidth=0pt, innersep=1.5cm,
+ titletotopverticalspace=0mm, titletoblockverticalspace=20mm,
+ titlegraphictotitledistance=10pt
+}{
+ \draw[draw=none, fill=titlebgcolor]%
+ (\titleposleft,\titleposbottom) rectangle (\titleposright,\titlepostop); %
+}
+
+\definetitlestyle{Empty}{
+ width=750mm, roundedcorners=0, linewidth=0pt, innersep=8mm,
+ titletotopverticalspace=5mm, titletoblockverticalspace=20mm,
+ titlegraphictotitledistance=10pt
+}{}
+
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterTitlestyles.tex>
+% \end{macrocode}
+
+% \subsection*{Color palettes}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterColorpalettes.tex>
+% \end{macrocode}
+% \begin{macrocode}
+\definecolorpalette{Default}{
+ % GrayBlueYellow
+ \definecolor{colorOne}{HTML}{DDDDDD}
+ \definecolor{colorTwo}{HTML}{0066A8}
+ \definecolor{colorThree}{HTML}{FCF0AD}
+}
+
+\definecolorpalette{BlueGrayOrange}{
+ \definecolor{colorOne}{HTML}{116699}
+ \definecolor{colorTwo}{HTML}{CCCCCC}
+ \definecolor{colorThree}{HTML}{CC6633}
+}
+
+\definecolorpalette{GreenGrayViolet}{
+ \definecolor{colorOne}{HTML}{A2E2C7}
+ \definecolor{colorTwo}{HTML}{56555A}
+ \definecolor{colorThree}{HTML}{C9AECF}
+}
+
+\definecolorpalette{PurpleGrayBlue}{
+ \definecolor{colorOne}{HTML}{AE0D45}
+ \definecolor{colorTwo}{HTML}{7F8897}
+ \definecolor{colorThree}{HTML}{006C9E}
+}
+
+\definecolorpalette{BrownBlueOrange}{
+ \definecolor{colorOne}{HTML}{8C7269}
+ \definecolor{colorTwo}{HTML}{A2C4D9}
+ \definecolor{colorThree}{HTML}{E89261}
+}
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterColorpalettes.tex>
+% \end{macrocode}
+% \subsection*{Inner block styles}
+% \setcounter{CodelineNo}{0}
+% \begin{macrocode}
+%<*tikzposterInnerblockstyles.tex>
+% \end{macrocode}
+% \begin{macrocode}
+
+ % Options:
+ % titlewidth
+ % bodywidth
+ % titlewidthscale
+ % bodywidthscale
+ % titlecenter, titleleft, titleright
+ % titleoffsetx
+ % titleoffsety
+ % bodyoffsetx
+ % bodyoffsety
+ % bodyverticalshift
+ % roundedcorners
+ % linewidth
+ % titleinnersep
+ % bodyinnersep
+
+ % Parameter:
+ % \ifInnerblockHasTitle - boolean
+ % innerblocktitle - coordinate
+ % innerblockbody - coordinate
+ % \innerblockroundedcorners - number
+ % \innerblocklinewidth - length
+ % \innerblockbodyinnersep - length
+ % \innerblocktitleinnersep - length
+ % innerblockbodybgcolor - color
+ % innerblocktitlebgcolor - color
+ % framecolor - color
+
+\defineinnerblockstyle{Default}{
+ titlewidthscale=1, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=20, linewidth=4pt,
+ titleinnersep=10pt, bodyinnersep=12pt
+}{
+ \begin{scope}[line width=\innerblocklinewidth, rounded
+ corners=\innerblockroundedcorners, solid]
+ \ifInnerblockHasTitle %
+ \draw[color=innerblocktitlebgcolor, fill=innerblocktitlebgcolor]
+ (innerblockbody.south west) rectangle (innerblocktitle.north east);
+ \draw[color=innerblocktitlebgcolor, fill=innerblockbodybgcolor]
+ (innerblockbody.south west) rectangle (innerblockbody.north east);
+ \else
+ \draw[color=innerblocktitlebgcolor, fill=innerblockbodybgcolor]
+ (innerblockbody.south west) rectangle (innerblockbody.north east);
+ \fi
+ \end{scope}
+}
+
+\defineinnerblockstyle{Table}{
+ titlewidthscale=0.25, bodywidthscale=0.75, titleleft,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=15, linewidth=3mm,
+ titleinnersep=15pt, bodyinnersep=15pt
+}{
+%
+ % minimum height should be the maximum of \TP@innerblocktitleheight and
+ % \TP@innerblockbodyheight
+ \node[minimum width=\TP@innerblocktitlewidth, minimum
+ height=\TP@innerblockbodyheight, anchor=center] (innerblocktitle) at
+ (\TP@innerblockcenter-0.5\TP@innerblockbodywidth+\TP@innerblocktitleoffsetx,
+ {-\TP@innerblocktitleheight-0.5\TP@innerblockbodyheight+\TP@innerblocktitleoffsety})
+ {};%
+ %
+ \ifInnerblockHasTitle%
+ \node[minimum width=\TP@innerblockbodywidth, minimum
+ height=\TP@innerblockbodyheight, anchor=center] (innerblockbody) at
+ (\TP@innerblockcenter+0.5\TP@innerblocktitlewidth+\TP@innerblockbodyoffsetx,
+ {-\TP@innerblocktitleheight-0.5\TP@innerblockbodyheight+\TP@innerblockbodyoffsety})
+ {};%
+ %
+ \else%
+ \node[minimum width=\TP@innerblockbodywidth, minimum
+ height=\TP@innerblockbodyheight, anchor=center] (innerblockbody) at
+ (\TP@innerblockcenter+\TP@innerblockbodyoffsetx,
+ {-\TP@innerblocktitleheight-0.5\TP@innerblockbodyheight}) {};%
+ \fi
+%
+ \begin{scope}[rounded corners=\innerblockroundedcorners, line width=\innerblocklinewidth]
+ \ifInnerblockHasTitle
+ % the big rectangle
+ \draw[color=innerblocktitlebgcolor, fill=innerblockbodybgcolor]
+ (innerblocktitle.north west) rectangle (innerblockbody.south east);%
+ \draw[color=innerblocktitlebgcolor] (innerblocktitle.south east) --
+ (innerblocktitle.north east); %
+ \else
+ % No title
+ \draw[color=innerblocktitlebgcolor, fill=innerblockbodybgcolor]
+ (innerblockbody.south west) rectangle (innerblockbody.north east);
+ \fi
+ \end{scope}
+}
+
+ \defineinnerblockstyle{Basic}{
+ titlewidthscale=0.8, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=6mm,
+ bodyverticalshift=6mm, roundedcorners=14, linewidth=2pt,
+ titleinnersep=8pt, bodyinnersep=8pt
+}{
+ \draw[rounded corners=\innerblockroundedcorners, inner sep=\innerblockbodyinnersep, line width=\innerblocklinewidth, color=framecolor, fill=innerblockbodybgcolor]
+ (innerblockbody.south west) rectangle (innerblockbody.north east); %
+ \ifInnerblockHasTitle%
+ \draw[rounded corners=\innerblockroundedcorners, inner sep=\innerblocktitleinnersep, line width=\innerblocklinewidth, color=framecolor, fill=innerblocktitlebgcolor]
+ (innerblocktitle.south west) rectangle (innerblocktitle.north east); %
+ \fi%
+}
+
+\defineinnerblockstyle{Minimal}{
+ titlewidthscale=1, bodywidthscale=1, titleleft,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=0, linewidth=1.5mm,
+ titleinnersep=10pt, bodyinnersep=10pt
+}{
+ \begin{scope}[line width=\innerblocklinewidth, rounded corners=\innerblockroundedcorners]
+ \ifInnerblockHasTitle %
+ \draw[draw=none, fill=innerblockbodybgcolor]
+ (innerblockbody.south west) rectangle (innerblocktitle.north east);
+ \draw[color=innerblocktitlebgcolor, loosely dashed]
+ (innerblocktitle.south west) -- (innerblocktitle.south east);%
+ \else
+ \draw[draw=none, fill=innerblockbodybgcolor]
+ (innerblockbody.south west) rectangle (innerblockbody.north east);
+ \fi
+ \end{scope}
+}
+
+\defineinnerblockstyle{Envelope}{
+ titlewidthscale=1, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=20, linewidth=1.3pt,
+ titleinnersep=10pt, bodyinnersep=10pt
+}{
+ \begin{scope}[rounded corners=\innerblockroundedcorners, line width=\innerblocklinewidth,
+ drop shadow={shadow xshift=0.3cm, shadow yshift=-0.3cm, opacity=0.3} ]
+ \ifInnerblockHasTitle
+ % the big rectangle
+ \draw[color=innerblocktitlebgcolor, fill=innerblockbodybgcolor, drop shadow]
+ (innerblockbody.south west) rectangle (innerblocktitle.north east);%
+ \begin{scope}
+ \clip (innerblocktitle.south west) rectangle (innerblocktitle.north east);
+ % fading on top
+ \fill[rounded corners=0, path fading=south, fill=innerblocktitlebgcolor, opacity=.4]
+ ($(innerblocktitle.south west)-(0.1,0)$) rectangle ($(innerblocktitle.north east)+(0.1,0)$);
+ % the trapezium
+ \draw[draw=none, bottom color=innerblocktitlebgcolor, top
+ color=innerblocktitlebgcolor!85!] %
+ ($(innerblocktitle.north west)+(0.25,0)$) -- ($(innerblocktitle.north west)+(0.75,0)$) -- %
+ ($(innerblocktitle.south west)+(2.5,0)$) -- ($(innerblocktitle.south east)-(2.5,0)$) -- %
+ ($(innerblocktitle.north east)-(0.75,0)$) -- ($(innerblocktitle.north east)-(0.25,0)$) -- cycle;
+ \end{scope}
+ \else
+ % No title
+ \draw[color=innerblocktitlebgcolor, fill=innerblockbodybgcolor]
+ (innerblockbody.south west) rectangle (innerblockbody.north east);
+ \fi
+ \end{scope}
+}
+
+\defineinnerblockstyle{Corner}{
+ titlewidthscale=1, bodywidthscale=1, titleleft,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=8, linewidth=1pt,
+ titleinnersep=10pt, bodyinnersep=10pt
+}{
+ % the shadow above the corner
+ \begin{scope}
+ \clip (innerblockbody.south west) rectangle (innerblocktitle.north east);
+ \begin{scope}[transform canvas={xshift=-1cm, yshift=-0.8cm, rotate
+ around={-20:($(innerblocktitle.north east)-(10,0)$)}}]
+ \fill[color=gray, path fading=north, opacity=0.8]%
+ ($(innerblocktitle.north east)-(10,1)$) rectangle ($(innerblocktitle.north east)+(2,2.3)$);
+ \end{scope}
+ \end{scope}
+ %
+ % the border
+ \def \border{%
+ [rounded corners=30] (innerblockbody.south west) -- (innerblocktitle.north west) %
+ [rounded corners=30] -- ($(innerblocktitle.north east)-(9.4,0)$)
+ [rounded corners=30] -- ($(innerblocktitle.north east)-(0,3.4)$)
+ [rounded corners=30] |- (innerblockbody.south west) -- cycle
+ }
+ \draw[line width=\innerblocklinewidth, color=innerblocktitlebgcolor, fill=innerblockbodybgcolor,
+ % drop shadow={shadow xshift=0.3cm, shadow yshift=-0.3cm, opacity=0.3}
+ ] \border;
+ %
+ % the corner
+ \begin{scope}
+ \def \corner{ ($(innerblocktitle.north east)-(0,6)$) -- ($(innerblocktitle.north east)-(0,4.5)$) .. %
+ controls ($(innerblocktitle.north east)-(-0,2.7)$) and ($(innerblocktitle.north east)-(2.8,2.2)$)
+ .. ($(innerblocktitle.north east)-(3.8,4.6)$) %
+ .. controls ($(innerblocktitle.north east)-(8.6,0)$) .. ($(innerblocktitle.north east)-(11.4,0)$) %
+ [rounded corners=30] -- ($(innerblocktitle.north east)-(9.4,0)$) %
+ [rounded corners=30] -- ($(innerblocktitle.north east)-(0,3.4)$) %
+ [rounded corners=0] -- ($(innerblocktitle.north east)-(0,6)$)}
+ \draw[innerblocktitlebgcolor] \corner;
+ \clip \corner;
+ \begin{scope}[transform canvas={xshift=-1cm, yshift=-1.3cm, rotate
+ around={-23:($(innerblocktitle.north east)-(10,0)$)}}]
+ \fill[color=innerblocktitlebgcolor!90] ($(innerblocktitle.north east) - (10,2)$)
+ rectangle ($(innerblocktitle.north east) + (2,3.6)$); %
+ \fill[color=innerblocktitlebgcolor , path fading=south, opacity=1]
+ ($(innerblocktitle.north east) - (10,-1.2)$) rectangle ($(innerblocktitle.north east) + (2,1.6)$); %
+ \fill[color=innerblocktitlebgcolor , path fading=north, opacity=1]
+ ($(innerblocktitle.north east) - (10,-1.6)$) rectangle ($(innerblocktitle.north east) + (2,2.1)$);
+ \end{scope}
+ \end{scope}%
+}
+
+\defineinnerblockstyle{Slide}{
+ titlewidthscale=1, bodywidthscale=1, titleleft,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=0pt, roundedcorners=0, linewidth=0pt,
+ titleinnersep=10pt, bodyinnersep=10pt
+}{
+ \ifInnerblockHasTitle%
+ \draw[draw=none, left color=innerblocktitlebgcolor, right color=innerblockbodybgcolor]
+ (innerblocktitle.south west) rectangle (innerblocktitle.north east);
+ \fi%
+ \draw[draw=none, fill=innerblockbodybgcolor] %
+ (innerblockbody.north west) [rounded corners=30] -- (innerblockbody.south west) --
+ (innerblockbody.south east) [rounded corners=0]-- (innerblockbody.north east) -- cycle;
+}
+
+\defineinnerblockstyle{TornOut}{
+ titlewidthscale=1, bodywidthscale=1, titlecenter,
+ titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0pt, bodyoffsety=0pt,
+ bodyverticalshift=-1.2cm, roundedcorners=0, linewidth=1pt,
+ titleinnersep=10pt, bodyinnersep=10pt
+}{
+ \ifInnerblockHasTitle%
+ \coordinate (topright) at (innerblocktitle.north east);
+ \else
+ \coordinate (topright) at (innerblockbody.north east);
+ \fi%
+ \draw[color=innerblocktitlebgcolor, fill=innerblockbodybgcolor,%
+ line width=\innerblocklinewidth, drop shadow={shadow xshift=0.2cm, shadow yshift=-0.2cm,opacity=0.3}, %
+ decorate, decoration={random steps,segment length=1.5cm,amplitude=0.15cm}
+ % decorate, decoration={penciline,amplitude=0.2cm}
+ ] (innerblockbody.south west) rectangle (topright);%
+}
+
+% \end{macrocode}
+% \begin{macrocode}
+%</tikzposterInnerblockstyles.tex>
+% \end{macrocode}
+% \Finale
+\endinput
+
+
+
+
diff --git a/graphics/pgf/contrib/tikzposter/tikzposter.ins b/graphics/pgf/contrib/tikzposter/tikzposter.ins
new file mode 100644
index 0000000000..6e2868b749
--- /dev/null
+++ b/graphics/pgf/contrib/tikzposter/tikzposter.ins
@@ -0,0 +1,68 @@
+%%
+%% Copyright (C) 2014 Pascal Richter, Elena Botoeva, Richard Barnard, and Dirk Surmann
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 2.0 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 2.0 or later is part of all distributions of
+%% LaTeX version 2013/12/01 or later.
+%%
+\input docstrip.tex
+\keepsilent
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2014 by Pascal Richter, Elena Botoeva, Richard Barnard, and Dirk Surmann
+
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 2.0 of this license or (at your option) any later
+version. The latest version of this license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 2.0 or later is part of all distributions of
+LaTeX version 2013/12/01 or later.
+
+\endpreamble
+\generate{\file{tikzposter.cls}{\from{tikzposter.dtx}{tikzposter.cls}}}
+
+%\nopreamble
+%\nopostamble
+\generate{\file{tikzposterColorstyles.tex}{\from{tikzposter.dtx}{tikzposterColorstyles.tex}}}
+\generate{\file{tikzposterColorpalettes.tex}{\from{tikzposter.dtx}{tikzposterColorpalettes.tex}}}
+\generate{\file{tikzposter-template.tex}{\from{tikzposter.dtx}{tikzposter-template.tex}}}
+\generate{\file{tikzposter-example.tex}{\from{tikzposter.dtx}{tikzposter-example.tex}}}
+\generate{\file{tikzposterBackgroundstyles.tex}{\from{tikzposter.dtx}{tikzposterBackgroundstyles.tex}}}
+\generate{\file{tikzposterBlockstyles.tex}{\from{tikzposter.dtx}{tikzposterBlockstyles.tex}}}
+\generate{\file{tikzposterInnerblockstyles.tex}{\from{tikzposter.dtx}{tikzposterInnerblockstyles.tex}}}
+\generate{\file{tikzposterNotestyles.tex}{\from{tikzposter.dtx}{tikzposterNotestyles.tex}}}
+\generate{\file{tikzposterTitlestyles.tex}{\from{tikzposter.dtx}{tikzposterTitlestyles.tex}}}
+\generate{\file{tikzposterLayoutthemes.tex}{\from{tikzposter.dtx}{tikzposterLayoutthemes.tex}}}
+\Msg{*********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the}
+\Msg{* following file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* tikzposter.cls}
+\Msg{* tikzposterColorstyles.tex}
+\Msg{* tikzposterColorpalettes.tex}
+\Msg{* tikzposterBackgroundstyles.tex}
+\Msg{* tikzposterBlockstyles.tex}
+\Msg{* tikzposterInnerblockstyles.tex}
+\Msg{* tikzposterNotestyles.tex}
+\Msg{* tikzposterTitlestyles.tex}
+\Msg{* tikzposterLayoutthemes.tex}
+\Msg{* To produce the documentation run the file}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*********************************************************}
+
+\endbatchfile
diff --git a/graphics/pgf/contrib/tikzposter/tikzposter.pdf b/graphics/pgf/contrib/tikzposter/tikzposter.pdf
new file mode 100644
index 0000000000..43875aa652
--- /dev/null
+++ b/graphics/pgf/contrib/tikzposter/tikzposter.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzscale/3Dplot.tikz b/graphics/pgf/contrib/tikzscale/3Dplot.tikz
new file mode 100644
index 0000000000..2875de72c2
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/3Dplot.tikz
@@ -0,0 +1,10 @@
+\tdplotsetmaincoords{77}{-8}%
+\begin{tikzpicture}[tdplot_main_coords]
+ x={(2 cm, 2 cm)},%
+ y={(2 cm, 2 cm)},%
+ z={(2 cm, 2 cm)}%
+ ]%
+ \draw [->] (0,0,0) -- (1,0,0) node[below] {$x_1$};%
+ \draw [->] (0,0,0) -- (0,0,1) node[left] {$x_2$};%
+ \draw [->] (0,0,0) -- (0,1,0) node[left] {$x_3$};%
+\end{tikzpicture}% \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/README b/graphics/pgf/contrib/tikzscale/README
new file mode 100644
index 0000000000..52811f485d
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/README
@@ -0,0 +1,26 @@
+----------------------------------------------------------------
+tikzscale --- Absolute resizing of TikZ pictures and PGF plots without
+ scaling text
+E-mail: pat_h@web.de Released under the LaTeX Project
+Public License v1.3c or later See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+The tikzscale package extends the includegraphics command to support
+tikzpictures. It allows scaling of TikZ images and PGFPlots to a provided
+width or height without changing the text size.
+
+Usage: \usepackage{tikzscale}
+
+As an example write
+\includegraphics{myTikZFile.tikz}
+instead of
+\includegraphics{myJPEGFile.jpeg},
+with myTikZFile.tikz being the file name of a text file containing
+everything from \begin{tikzpicture} to \end{tikzpicture}. To actually
+do some scaling of the included TikZ file, give either an absolute width
+or an absolute height in the optional argument, e.g.
+\tikzscale@includetikz[width=0.5\linewidth]{myTikZFile.tikz}.
+If the file contains a plot created with the PGFPlots package, set both
+width and height via the optional argument, e.g.
+\tikzscale@includetikz[width=\linewidth,height=0.4\linewidth]{myPGFPlot.tikz}.
+
diff --git a/graphics/pgf/contrib/tikzscale/beamer/alt.tikz b/graphics/pgf/contrib/tikzscale/beamer/alt.tikz
new file mode 100644
index 0000000000..73974caef7
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/alt.tikz
@@ -0,0 +1,5 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \alt<2> {\draw (0,0) -- ++(5,5) -- ++(-2.5, 2.5) -- ++(-2.5, -2.5) -- (5,0);}
+ {\draw (0,0) -- ++(5,5) ++(-5, 0) -- ++(5,-5);}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/invisible.tikz b/graphics/pgf/contrib/tikzscale/beamer/invisible.tikz
new file mode 100644
index 0000000000..0b35bd217f
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/invisible.tikz
@@ -0,0 +1,4 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \invisible<1>{\draw (0,0) -- ++(5,5) -- ++(-2.5, 2.5) -- ++(-2.5, -2.5) -- (5,0);}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/only.tikz b/graphics/pgf/contrib/tikzscale/beamer/only.tikz
new file mode 100644
index 0000000000..df09c1c86c
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/only.tikz
@@ -0,0 +1,4 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \only<2>{\draw (0,0) -- ++(5,5) -- ++(-2.5, 2.5) -- ++(-2.5, -2.5) -- (5,0);}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/onslide.tikz b/graphics/pgf/contrib/tikzscale/beamer/onslide.tikz
new file mode 100644
index 0000000000..0471aac8b6
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/onslide.tikz
@@ -0,0 +1,4 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \onslide<2>{\draw (0,0) -- ++(5,5) -- ++(-2.5, 2.5) -- ++(-2.5, -2.5) -- (5,0);}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/pause.tikz b/graphics/pgf/contrib/tikzscale/beamer/pause.tikz
new file mode 100644
index 0000000000..6b3d4dd8e0
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/pause.tikz
@@ -0,0 +1,5 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \pause
+ \draw (0,0) -- ++(5,5) -- ++(-2.5, 2.5) -- ++(-2.5, -2.5) -- (5,0);
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/temporal.tikz b/graphics/pgf/contrib/tikzscale/beamer/temporal.tikz
new file mode 100644
index 0000000000..299bb62dcc
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/temporal.tikz
@@ -0,0 +1,5 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \node at (2.5,2.5) {\temporal<2>{before}{now}{after}};
+ \onslide<3> {}; % just a small trick to create 3 subframes
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/tikzscale-beamer.tex b/graphics/pgf/contrib/tikzscale/beamer/tikzscale-beamer.tex
new file mode 100644
index 0000000000..d764dcc6dc
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/tikzscale-beamer.tex
@@ -0,0 +1,56 @@
+\documentclass{beamer}
+
+\usepackage{tikz}
+\usepackage{tikzscale}
+
+\begin{document}
+
+ \begin{frame}
+ \frametitle{\textbackslash only}
+ \framesubtitle{\alt<2>{shown}{hidden}}
+ \includegraphics[width=0.4\linewidth]{only.tikz}
+ \end{frame}
+
+ \begin{frame}
+ \frametitle{\textbackslash visible}
+ \framesubtitle{\alt<2>{shown}{hidden}}
+ \includegraphics[width=0.4\linewidth]{visible.tikz}
+ \end{frame}
+
+ \begin{frame}
+ \frametitle{\textbackslash invisible}
+ \framesubtitle{\alt<2>{shown}{hidden}}
+ \includegraphics[width=0.4\linewidth]{invisible.tikz}
+ \end{frame}
+
+ \begin{frame}
+ \frametitle{\textbackslash alt}
+ \framesubtitle{variant \alt<2>{2}{1}}
+ \includegraphics[width=0.4\linewidth]{alt.tikz}
+ \end{frame}
+
+ \begin{frame}
+ \frametitle{\textbackslash onslide}
+ \framesubtitle{\alt<2>{shown}{hidden}}
+ \includegraphics[width=0.4\linewidth]{onslide.tikz}
+ \end{frame}
+
+ \begin{frame}
+ \frametitle{\textbackslash uncover}
+ \framesubtitle{\alt<2>{shown}{hidden}}
+ \includegraphics[width=0.4\linewidth]{uncover.tikz}
+ \end{frame}
+
+ \begin{frame}
+ \frametitle{\textbackslash temporal}
+ \framesubtitle{\temporal<2>{before}{now}{after}}
+ \includegraphics[width=0.4\linewidth]{temporal.tikz}
+ \end{frame}
+
+ \begin{frame}
+ \frametitle{\textbackslash pause}
+ \framesubtitle{\alt<2->{shown}{hidden}}
+ \includegraphics[width=0.4\linewidth]{pause.tikz}
+ \end{frame}
+
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/uncover.tikz b/graphics/pgf/contrib/tikzscale/beamer/uncover.tikz
new file mode 100644
index 0000000000..0a0e4464be
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/uncover.tikz
@@ -0,0 +1,4 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \uncover<2>{\draw (0,0) -- ++(5,5) -- ++(-2.5, 2.5) -- ++(-2.5, -2.5) -- (5,0);}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/beamer/visible.tikz b/graphics/pgf/contrib/tikzscale/beamer/visible.tikz
new file mode 100644
index 0000000000..a0845d0070
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/beamer/visible.tikz
@@ -0,0 +1,4 @@
+\begin{tikzpicture}
+ \draw (0,0) rectangle (5,5);
+ \visible<2>{\draw (0,0) -- ++(5,5) -- ++(-2.5, 2.5) -- ++(-2.5, -2.5) -- (5,0);}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/histogramNormal.tikz b/graphics/pgf/contrib/tikzscale/histogramNormal.tikz
new file mode 100644
index 0000000000..043eda1540
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/histogramNormal.tikz
@@ -0,0 +1,10 @@
+\begin{tikzpicture}
+ \begin{axis}[
+ ybar interval,
+ title={endlinechar: \the\endlinechar~(should be 13)}
+ ]
+ % a data file containing 8000 normally distributed
+ % random numbers of mean 0 and variance 1
+ \addplot+[hist={data=x}] file {pgfplots.randn.dat};
+ \end{axis}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/linewidth.tikz b/graphics/pgf/contrib/tikzscale/linewidth.tikz
new file mode 100644
index 0000000000..4fd3860121
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/linewidth.tikz
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \draw (0,0) -- node {center} (\linewidth,1);
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/pgfplots-test.tikz b/graphics/pgf/contrib/tikzscale/pgfplots-test.tikz
new file mode 100644
index 0000000000..c3186f5f5a
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/pgfplots-test.tikz
@@ -0,0 +1,5 @@
+\begin{tikzpicture}
+ \begin{axis}[scale only axis]
+ \addplot {x^2 - x + 4};
+ \end{axis}
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/pgfplots.randn.dat b/graphics/pgf/contrib/tikzscale/pgfplots.randn.dat
new file mode 100644
index 0000000000..4036f8d150
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/pgfplots.randn.dat
@@ -0,0 +1,8000 @@
+ 1.8131109e+00
+ 8.6034974e-01
+ 5.6782430e-01
+ 6.6418148e-03
+ -5.9978685e-01
+ 1.1752312e+00
+ 1.1312559e+00
+ -1.7619150e+00
+ -1.1518360e+00
+ -3.6829301e-01
+ 1.4841380e+00
+ 3.9109658e-01
+ 1.3076529e+00
+ -5.7717857e-01
+ 4.7710030e-01
+ -6.2152389e-01
+ -1.8751440e+00
+ 3.0778620e-01
+ 3.9045500e-02
+ -7.6170509e-01
+ -5.4991477e-01
+ -7.7944067e-01
+ 5.2046311e-01
+ -1.0408009e+00
+ 5.9186483e-01
+ -2.9160874e-01
+ -2.3618022e-01
+ -8.7677902e-01
+ -8.3681634e-01
+ -6.7294580e-01
+ -9.1969507e-01
+ -7.0642195e-01
+ -6.4205245e-01
+ -1.5197377e+00
+ -1.7453939e+00
+ -3.1289066e+00
+ 5.4568792e-01
+ -9.7472775e-01
+ 2.2101019e-01
+ -3.9422123e-01
+ 8.3784105e-01
+ 3.7940423e-01
+ 1.4795982e+00
+ 2.3817494e-01
+ 5.3898284e-01
+ -3.7873039e-01
+ -9.1467687e-01
+ -1.7242253e+00
+ -1.3712544e+00
+ 1.7607432e+00
+ -1.2982462e+00
+ 5.1202225e-01
+ 6.8258041e-02
+ 6.8942432e-01
+ -2.2378079e-01
+ -2.7373002e-01
+ 6.3005265e-01
+ -3.1673214e-01
+ 2.4165246e-01
+ 1.4168692e+00
+ 6.1909004e-01
+ -5.9475015e-01
+ -2.7620865e-01
+ 1.4166002e+00
+ -1.7844352e+00
+ 3.1826201e-01
+ 1.5467781e+00
+ 1.1384619e-02
+ 1.9877916e-01
+ 9.6611400e-01
+ 2.3076969e+00
+ 9.5516798e-01
+ -5.6577982e-01
+ 5.6436342e-03
+ -6.8594158e-01
+ 1.0842070e-02
+ -2.4390503e+00
+ -1.0062516e+00
+ 5.5980285e-01
+ 4.7802911e-01
+ -1.3308975e+00
+ 5.1211791e-01
+ 2.0078336e-01
+ 1.0449706e+00
+ 1.9995425e-01
+ -9.4259353e-01
+ -8.9673814e-01
+ -1.2373993e+00
+ 2.3858725e-01
+ 8.4565885e-01
+ -4.2538975e-01
+ -3.2359806e-01
+ -5.4866386e-01
+ -2.2004495e+00
+ -1.2631374e+00
+ -4.1637822e-01
+ 3.2685759e-01
+ -8.4407028e-01
+ -1.2142334e+00
+ -1.1061819e+00
+ 7.9669503e-01
+ 2.7735263e-01
+ 1.4355200e-01
+ 7.8040129e-01
+ 8.5744142e-01
+ -6.2563809e-01
+ -1.7228873e+00
+ -1.4578423e+00
+ 9.0082452e-01
+ 4.7081287e-01
+ -1.3936057e+00
+ -4.1466899e-01
+ -6.4050459e-02
+ 1.1802218e-01
+ -6.1153603e-02
+ -8.3102332e-01
+ 1.1035289e+00
+ -4.9987718e-01
+ -9.4944304e-01
+ -1.9612624e+00
+ -1.2756559e+00
+ 2.7565515e+00
+ -5.9723826e-01
+ 1.4835404e+00
+ -5.2071683e-01
+ 1.0219885e+00
+ -5.9433792e-01
+ -7.1101539e-01
+ 3.5456938e-01
+ 1.5955629e-01
+ 6.9437041e-01
+ -5.0459752e-01
+ 5.5838287e-01
+ -6.9979882e-01
+ 8.2463134e-01
+ 6.6336128e-01
+ 2.9680808e-01
+ -1.0571600e+00
+ -1.6500431e+00
+ -6.0023298e-01
+ 1.2418564e-01
+ -1.5367966e+00
+ 5.1327011e-01
+ 1.6125850e+00
+ -4.7037837e-01
+ -1.4514822e-01
+ -1.0290437e+00
+ -5.8524695e-02
+ -8.8189689e-01
+ 1.0338046e+00
+ 7.7009274e-01
+ 2.3303240e-01
+ -2.8218495e-01
+ 1.6306199e+00
+ -2.1579907e+00
+ 3.5223267e-01
+ 6.7157231e-01
+ 4.5498983e-02
+ 1.3225128e+00
+ -7.8295236e-01
+ 6.0761075e-02
+ 1.3649457e+00
+ -8.9554055e-01
+ 1.2600922e+00
+ -1.7669321e+00
+ -2.2884447e-01
+ 1.4281999e+00
+ 5.5063630e-01
+ -5.2008735e-03
+ 2.5776911e-01
+ -9.0644807e-01
+ -1.4966502e+00
+ -2.0867826e+00
+ 6.0513657e-01
+ -1.9212975e+00
+ 3.9432867e-01
+ -1.8109912e+00
+ 5.0256570e-01
+ 2.7512628e-01
+ 1.6586622e-01
+ -3.8138182e-01
+ 1.2564276e+00
+ 8.4388128e-01
+ -1.2358973e+00
+ -5.2102611e-01
+ 4.1518539e-01
+ -3.7914643e-01
+ 1.0746583e+00
+ -1.2592638e+00
+ 5.2450293e-01
+ 7.2448932e-01
+ 3.4523529e-01
+ 2.4724422e-01
+ -1.3566897e+00
+ 1.6639127e+00
+ -1.3997829e-01
+ -1.2661521e+00
+ -9.8969417e-01
+ -1.4457122e+00
+ -9.3484120e-01
+ 6.1114082e-01
+ -3.3026248e-01
+ 1.9053470e-01
+ 8.0824223e-01
+ -6.6719912e-01
+ 7.5730235e-01
+ -1.8580498e-01
+ -2.9645369e-01
+ 3.3022331e-01
+ -1.7392974e-01
+ -5.7896964e-01
+ 1.7002121e+00
+ 4.8453723e-02
+ 2.1769252e-02
+ -4.0405297e-01
+ -1.4692437e+00
+ 1.2515896e+00
+ -9.6266425e-01
+ 1.1356527e-01
+ 5.6524802e-02
+ 1.1478562e+00
+ -2.5307599e-01
+ -8.1837056e-01
+ -5.6551239e-01
+ 1.3718862e-01
+ -1.9066178e-01
+ -1.4715734e+00
+ 1.0339483e+00
+ -4.7896615e-01
+ 2.5221935e+00
+ -1.4944487e-02
+ -2.5444899e-01
+ 8.5698977e-02
+ 2.2127396e-01
+ 5.4758699e-01
+ 2.6268559e+00
+ -1.9429783e+00
+ -1.0122603e+00
+ -6.8403572e-01
+ 3.0799787e-01
+ -3.7565020e-01
+ 5.6241654e-01
+ -1.3904374e+00
+ 1.1548905e+00
+ 2.6491874e-01
+ 3.2984233e-01
+ -1.2299690e+00
+ -5.9541687e-01
+ 1.6420461e-01
+ -7.6547830e-01
+ 8.1568023e-01
+ -6.3537136e-01
+ -7.8864638e-01
+ 4.6723595e-01
+ -8.9565512e-01
+ 9.6975745e-01
+ -1.5138388e+00
+ -7.3265909e-01
+ 2.0343945e+00
+ -8.4930888e-01
+ -4.6652765e-01
+ 2.7780499e-01
+ 3.5613229e-01
+ 2.9285681e+00
+ 1.3997402e+00
+ -5.0699893e-01
+ 6.6435301e-01
+ 1.4213738e+00
+ -4.9257299e-02
+ -2.4280166e+00
+ -3.0705840e-01
+ -1.2990818e+00
+ 5.8473359e-01
+ -1.0841184e-01
+ 1.0490084e+00
+ -1.0146973e+00
+ 1.1534637e+00
+ -1.1621779e+00
+ 1.5129957e+00
+ 1.7966752e-01
+ 1.1931219e+00
+ -1.4272535e+00
+ 8.6346468e-01
+ -5.9426704e-01
+ -1.5386655e+00
+ 1.2619765e+00
+ 4.1079930e-01
+ -1.5799744e-01
+ 2.2819211e-01
+ -4.8414912e-01
+ -1.3616149e+00
+ -2.1118812e+00
+ -1.7163412e+00
+ -4.6950197e-01
+ 6.7212878e-01
+ -1.0497435e-01
+ 1.3431012e-01
+ -4.5454315e-01
+ 3.1267132e-01
+ 8.1416798e-01
+ -7.4520487e-01
+ -1.2674218e+00
+ 5.4361738e-01
+ -6.4421625e-01
+ -2.2143082e+00
+ 2.4642270e-01
+ 5.9808226e-01
+ 7.0321540e-01
+ 3.7072847e-01
+ -7.9307834e-02
+ 1.2338864e-01
+ 1.9353863e+00
+ 4.6264285e-02
+ -3.5153998e-01
+ 1.3918372e+00
+ 1.1571960e+00
+ 1.7080865e+00
+ 9.6541904e-01
+ 5.5859940e-01
+ 1.3901898e+00
+ -1.6579560e-01
+ -2.9064307e-01
+ -8.0560577e-01
+ 1.7342099e+00
+ 2.3485243e+00
+ 1.0172502e+00
+ -5.8959324e-01
+ -1.2031464e+00
+ -9.0177154e-01
+ 5.7302051e-02
+ -1.2863099e+00
+ -1.5509782e+00
+ -1.5075646e+00
+ 4.4980456e-01
+ -2.0399855e+00
+ 4.9192442e-01
+ 4.2321468e-01
+ -1.0559489e+00
+ -9.4600641e-01
+ -5.7888600e-01
+ -6.3767155e-01
+ 8.4699539e-01
+ -1.4347381e-01
+ -8.5153341e-01
+ 5.0432183e-01
+ 9.8011101e-01
+ -1.7257926e+00
+ 1.2039562e+00
+ -1.0297842e+00
+ -1.9448327e+00
+ 7.4849979e-02
+ 1.1309381e+00
+ 1.2238874e+00
+ -3.9313817e-01
+ 6.8963370e-01
+ -1.2402696e-01
+ -1.9195556e-01
+ 1.1504595e+00
+ 2.3870605e-01
+ 9.6168173e-01
+ 4.8983090e-01
+ -6.4479880e-01
+ 5.5090904e-01
+ -1.5430391e-01
+ -1.2251125e+00
+ 2.0443711e-01
+ -7.4153075e-03
+ -5.2419626e-01
+ 1.1822930e-01
+ -8.4747903e-01
+ 1.9025861e+00
+ -1.5953283e+00
+ -1.5403550e+00
+ 1.0512559e+00
+ -7.6744015e-01
+ -6.3953560e-01
+ -6.3804745e-01
+ 8.9713151e-01
+ 1.1864785e-01
+ 4.9702741e-01
+ -1.8600193e+00
+ -1.7819828e+00
+ 2.1871407e-01
+ -1.8804619e+00
+ 1.9003336e+00
+ 3.2030963e-01
+ 1.3065309e+00
+ -1.7723135e+00
+ 5.3215471e-01
+ 4.9022701e-01
+ 1.1451258e+00
+ -3.4801717e-01
+ -1.3681396e+00
+ -7.1793993e-01
+ -5.2624953e-01
+ -3.2370950e-01
+ -2.1315445e-01
+ 2.5403678e-01
+ 2.1026313e+00
+ -8.3639877e-01
+ -6.6768292e-01
+ 1.7536140e+00
+ 2.4670447e+00
+ -7.3287131e-01
+ -1.9140240e+00
+ 4.9581827e-01
+ -7.0424459e-01
+ -7.7287240e-02
+ -9.9864274e-02
+ 3.2242762e-01
+ -1.3083936e+00
+ 2.3714292e-01
+ -4.1741835e-01
+ -1.4898256e+00
+ -1.4191505e-01
+ -1.0459845e+00
+ 2.8641122e+00
+ 5.0205399e-02
+ -9.8581135e-02
+ -2.3011711e-01
+ -1.1775066e-01
+ 1.2170988e+00
+ -1.3866008e+00
+ -7.6783115e-01
+ 1.0130339e+00
+ 4.7008516e-01
+ -1.9306268e-01
+ 1.3534811e+00
+ -9.9898139e-02
+ 9.4912281e-01
+ -3.1515186e-03
+ 1.7900620e+00
+ 8.2889387e-01
+ 6.5164077e-01
+ -8.5585968e-01
+ -4.4038291e-01
+ 3.8479045e-01
+ 2.8909837e-01
+ -1.4265673e+00
+ 2.7681038e-01
+ 3.5363946e-01
+ -1.7664098e+00
+ -1.1512485e+00
+ 1.4613313e+00
+ -5.4420634e-01
+ -1.1314973e+00
+ -3.6034830e-01
+ 1.2483529e+00
+ 4.2880960e-01
+ -2.2504046e+00
+ -5.5121045e-01
+ -1.5911805e+00
+ -6.1115339e-01
+ -1.9000130e+00
+ 6.6874778e-01
+ 1.0281039e+00
+ 8.4533554e-01
+ 9.9973006e-01
+ 1.2443971e+00
+ -8.1468368e-01
+ -5.0899779e-01
+ -1.3859971e+00
+ -1.9661457e+00
+ -9.3537226e-01
+ -1.3130896e+00
+ 5.3437606e-02
+ -3.7490691e-01
+ 4.3609881e-01
+ -9.3372725e-01
+ 3.3980087e-01
+ 1.9537791e-01
+ -1.6397968e+00
+ -1.9589565e+00
+ -2.3336633e+00
+ -6.5502942e-01
+ 8.3718951e-02
+ 5.1140892e-01
+ -9.9466885e-01
+ -4.2481972e-01
+ -2.2708686e+00
+ 1.7823742e+00
+ -7.8720641e-01
+ 3.7491674e-01
+ -1.6031381e+00
+ -4.9254880e-01
+ 9.5967300e-01
+ -1.2118548e+00
+ 4.9875465e-01
+ -1.1811631e+00
+ 6.4724696e-01
+ 4.9358888e-01
+ -1.2356200e-01
+ 1.7940977e+00
+ -1.6068180e+00
+ 5.3606240e-01
+ 1.7807164e+00
+ 3.1076900e-01
+ 7.0805627e-01
+ -1.8574124e-01
+ 8.8158431e-01
+ -1.7964424e+00
+ -1.1316857e+00
+ -1.0900869e+00
+ -1.1452749e+00
+ 2.3933881e+00
+ 1.7304931e+00
+ -6.1965774e-01
+ 4.4178393e-01
+ -1.6537216e+00
+ -7.0596551e-01
+ -2.9230837e-01
+ 3.0543324e-01
+ 1.2038973e+00
+ 6.1718556e-01
+ -1.9790523e-02
+ 1.2424651e+00
+ -1.8405786e-01
+ 6.5495031e-01
+ 2.0342548e+00
+ -1.1700072e+00
+ -2.8067481e-01
+ -9.7948786e-01
+ -1.5686424e+00
+ 9.9012364e-01
+ -4.6148404e-01
+ -1.7016872e+00
+ -1.0240731e+00
+ 9.8550280e-01
+ 6.4679300e-01
+ 1.1264980e-01
+ -1.5851579e+00
+ -5.2040889e-01
+ -9.6231119e-01
+ 1.3387294e+00
+ -6.6243226e-01
+ 8.5116836e-01
+ 1.6954385e+00
+ 1.3372514e+00
+ 6.2179489e-01
+ -1.2895916e+00
+ 2.3240700e+00
+ -1.3215878e+00
+ -6.8622949e-01
+ -1.6345304e-02
+ 7.4667412e-01
+ 2.7343955e-01
+ -8.0306733e-01
+ -9.9466518e-01
+ -1.5017913e+00
+ -3.8123493e-01
+ -2.8794079e-01
+ -1.4042619e-01
+ -3.8112653e-01
+ 5.0336896e-01
+ -1.4050088e-01
+ -5.8665004e-01
+ -2.7689291e-01
+ 1.6396135e+00
+ 6.5049249e-02
+ 1.0613182e+00
+ -3.8020843e-01
+ -7.0132693e-01
+ 1.3932220e+00
+ 6.1194361e-01
+ -6.0335855e-01
+ 1.3758287e+00
+ -2.3637127e-01
+ -6.6369241e-02
+ -5.0406835e-02
+ -1.5513381e-01
+ 2.8353999e-01
+ -1.4307896e+00
+ 5.4909288e-01
+ -2.4568648e+00
+ -1.7073240e-02
+ -1.1238351e+00
+ 4.5715691e-01
+ -1.0099989e+00
+ 8.6800270e-01
+ -7.0261876e-01
+ -9.4272645e-01
+ 2.7236494e-01
+ -3.6431860e-01
+ -5.2640196e-01
+ -5.5485253e-01
+ 8.4721691e-01
+ -4.9266562e-01
+ -1.1312990e-01
+ -5.9593996e-01
+ -1.7656645e-01
+ -7.8824480e-01
+ 5.1581047e-01
+ 2.6463552e-01
+ 8.4728859e-01
+ 2.5337552e-01
+ 3.2694822e-01
+ 1.9068723e-01
+ 1.5473872e+00
+ -1.2695317e-01
+ -3.5968215e-01
+ 2.7996914e-01
+ -4.0051885e-01
+ -1.3241154e+00
+ -5.9530472e-01
+ -5.5749908e-01
+ 4.6938409e-01
+ 5.3232207e-01
+ -2.0823411e-01
+ 2.3293791e-01
+ -8.9096264e-01
+ -9.8140197e-02
+ -3.0549564e-01
+ 6.9248553e-01
+ 8.6393472e-01
+ -5.4893769e-01
+ -1.9301256e+00
+ 6.0741833e-02
+ 1.1689084e+00
+ 1.1144616e+00
+ 6.2718792e-01
+ 9.9231266e-01
+ -9.3122271e-01
+ -1.2568685e+00
+ 4.5919769e-01
+ -1.5412064e-01
+ -1.1858048e+00
+ 7.0585600e-01
+ 1.3802430e+00
+ 2.6077082e-01
+ 2.8013234e-01
+ 1.2415289e-01
+ -7.0751034e-01
+ 2.0443369e-02
+ 8.5536367e-01
+ -1.1427611e+00
+ 9.5370027e-01
+ 1.2561324e+00
+ -8.6296889e-02
+ -1.1490025e-01
+ 1.3708861e+00
+ 4.7385569e-01
+ 4.4453399e-01
+ -1.4975211e-01
+ -8.1615670e-01
+ -4.5133047e-01
+ 4.1761967e-01
+ -9.1763630e-01
+ -3.0747452e-02
+ -7.3604392e-01
+ -1.3409510e+00
+ 1.6300044e+00
+ 8.6952814e-01
+ -2.0624950e-01
+ 1.1472364e+00
+ 8.3074768e-02
+ 4.7219578e-01
+ 4.2932426e-01
+ 3.0212540e-01
+ 1.3141540e-02
+ -1.0974198e-02
+ -7.2333655e-01
+ 1.1783873e+00
+ -2.9806254e-01
+ -4.1782485e-02
+ -1.0733828e+00
+ 3.1311688e-02
+ 1.5002243e+00
+ -1.1125328e+00
+ 7.2117651e-01
+ -1.4647068e+00
+ 5.3605230e-01
+ 1.5380488e+00
+ 1.2407643e-01
+ -1.1551033e+00
+ 1.7188754e+00
+ -1.0500336e+00
+ -6.7297077e-01
+ 4.3811040e-01
+ 3.7505749e-01
+ -7.6740934e-02
+ 2.5308989e-01
+ 4.3742274e-01
+ -1.6887391e-01
+ 2.6569502e-01
+ -3.7049845e-01
+ -5.2017039e-01
+ -5.1095300e-01
+ 7.8948194e-02
+ -1.0099985e+00
+ -6.9852853e-01
+ -1.2050401e-01
+ 3.5762583e-01
+ -2.0454975e-01
+ -2.4529559e-03
+ -6.2979748e-01
+ -1.5214020e+00
+ -6.0375258e-01
+ -5.9243052e-01
+ 1.4303241e+00
+ 1.0243146e+00
+ 5.0968011e-01
+ 1.2227753e+00
+ 8.2023348e-02
+ -5.6890340e-01
+ 8.5832024e-01
+ -6.7835737e-01
+ -7.8068493e-01
+ 5.4239017e-01
+ -5.8168995e-01
+ -1.0421209e+00
+ -7.8698941e-01
+ -6.3732904e-01
+ -1.3713367e+00
+ -7.4221742e-01
+ 5.2699943e-01
+ 2.1649665e+00
+ -5.8727510e-01
+ 5.9861484e-01
+ 1.7800634e+00
+ -1.5834288e-02
+ -3.7948237e-01
+ 2.0994588e-01
+ 2.0786815e-01
+ -8.2260349e-01
+ 1.1369530e-01
+ -5.9269196e-01
+ -1.0972065e+00
+ 1.1850935e-01
+ 8.9908608e-01
+ 5.9775608e-01
+ 1.7466997e-03
+ 7.0274849e-01
+ 1.0791580e+00
+ -1.4079630e-01
+ -3.2780288e-01
+ 7.1165389e-01
+ -8.3729049e-03
+ 1.8686515e+00
+ -1.2959564e+00
+ -1.4934481e+00
+ -1.0627823e+00
+ 1.3878448e-01
+ -5.8095028e-02
+ -2.3808178e-01
+ 9.3604198e-01
+ -1.5247665e-01
+ 5.1616698e-01
+ 1.6274558e+00
+ 1.1581468e+00
+ -4.8767856e-01
+ 2.2198251e+00
+ 9.7198482e-01
+ 2.3162883e-01
+ -1.0647814e+00
+ 1.7028911e+00
+ -1.1159709e-01
+ -1.1385477e-01
+ 2.9379267e-02
+ 2.2602757e-01
+ 2.2128011e+00
+ 1.3525386e+00
+ -8.0341196e-02
+ 1.5894504e+00
+ -3.5170236e-01
+ -1.0667438e+00
+ -4.5563589e-01
+ -6.0705960e-01
+ -1.2468333e-01
+ -6.8685707e-02
+ 8.2619328e-01
+ -7.0499327e-01
+ 1.0002216e+00
+ -3.0637383e-01
+ 5.1181871e-01
+ 1.8386823e+00
+ 1.3594850e-01
+ 5.0154132e-01
+ -6.9389297e-01
+ 2.3200096e-01
+ -7.8867015e-01
+ -1.7164260e-01
+ -7.0763115e-01
+ 9.0403143e-02
+ -8.8092806e-01
+ 8.5711513e-01
+ 2.6380177e-01
+ -1.2827662e+00
+ -1.9594462e+00
+ -1.5048389e+00
+ -9.3375384e-01
+ -1.1119801e-02
+ 3.8332915e-01
+ -1.2099717e+00
+ -1.7928063e+00
+ -4.9830025e-01
+ -1.7091896e+00
+ -2.3967008e-01
+ -1.1564442e+00
+ 4.4469860e-01
+ -6.3905005e-01
+ 6.6403744e-02
+ -9.6495365e-01
+ 1.7349648e+00
+ 8.5890270e-02
+ -2.7690334e-01
+ -1.3265413e+00
+ 3.4015664e-01
+ -1.0944615e+00
+ -1.1677082e+00
+ -7.0733827e-01
+ -6.6523728e-01
+ -6.2212878e-01
+ 1.6606016e+00
+ 6.4814349e-01
+ 1.3562458e+00
+ -2.6790406e+00
+ -2.7661296e-01
+ -1.4984182e-01
+ -3.2285546e-01
+ 1.6485588e+00
+ -5.1739009e-01
+ -8.1027853e-01
+ 3.1797668e-01
+ -1.2450729e+00
+ 1.6272633e+00
+ 1.0098708e+00
+ 2.3306845e+00
+ 5.5426899e-01
+ 2.0457133e-01
+ 1.2386037e+00
+ 1.3526061e-01
+ -1.9459705e-02
+ -9.4395749e-01
+ -7.7419537e-01
+ -3.7042612e-02
+ 6.6191942e-01
+ 9.7841341e-01
+ -6.5495872e-01
+ -4.7261012e-01
+ -8.8411085e-01
+ -1.2485150e+00
+ 2.9240127e-01
+ -2.9845464e-01
+ 1.3359849e+00
+ -4.3119087e-01
+ 8.7400293e-01
+ -5.1167026e-01
+ 4.5161408e-01
+ 1.2304531e+00
+ -1.8563994e-01
+ 2.1771771e-01
+ -2.6331913e+00
+ -4.7142759e-01
+ 1.9991102e-01
+ 1.1032658e-01
+ 1.6622123e+00
+ 3.4057783e-01
+ -1.6443345e-03
+ 5.2209911e-01
+ -1.2926694e+00
+ -4.6784705e-01
+ 4.9658223e-01
+ -2.3293108e-01
+ -2.3937901e+00
+ 7.2308294e-01
+ -1.3684184e+00
+ -1.2627121e+00
+ 4.2563482e-01
+ -2.4297861e-01
+ -7.7938048e-01
+ -1.5796326e+00
+ -6.2230983e-01
+ -2.1872694e+00
+ 3.5474182e-01
+ -7.5327183e-02
+ -1.3056852e+00
+ -1.9739404e-01
+ 2.9370510e+00
+ 2.2323417e-01
+ 3.9845786e-01
+ 1.6101998e+00
+ 3.8616127e-01
+ 9.7077968e-03
+ 7.2500492e-02
+ 3.1919403e-01
+ 1.0708616e+00
+ 3.0083218e-01
+ 1.1721887e+00
+ -1.0941482e-01
+ 8.2724212e-01
+ -5.1982789e-01
+ 8.5302652e-01
+ -1.1751201e+00
+ -4.5440037e-01
+ -5.0610878e-01
+ 1.8036927e+00
+ -1.0127482e+00
+ -1.2402892e+00
+ 2.6656499e-01
+ -1.2077523e+00
+ -1.0500724e+00
+ 4.6866581e-01
+ 2.8290001e-01
+ 1.3411972e+00
+ 3.8059744e-01
+ 1.4354306e+00
+ 7.9958787e-01
+ 1.6285605e+00
+ 1.2910684e-01
+ -2.0847639e+00
+ -6.4711448e-01
+ -2.5173221e-01
+ 1.9021643e-01
+ -4.6754234e-01
+ 5.3073959e-01
+ 2.4465581e-01
+ 1.9464285e+00
+ -1.2770542e+00
+ 7.4575091e-03
+ -3.6345547e-01
+ 1.2668360e+00
+ 5.3803734e-01
+ 8.0682463e-01
+ -1.1147142e-01
+ 9.1289221e-01
+ 1.5246317e+00
+ -6.9236506e-01
+ -9.0247494e-01
+ 7.0393836e-02
+ -6.8846682e-01
+ 1.2309017e+00
+ -2.7455894e-01
+ -1.1035993e+00
+ 8.1195670e-02
+ -7.8574974e-01
+ -1.4635514e+00
+ 3.9684510e-01
+ -5.6428699e-01
+ 3.7816162e-01
+ 1.1704917e+00
+ -4.5811759e-02
+ -6.3506098e-01
+ 3.3138333e-01
+ 8.8218779e-01
+ 4.1854444e-01
+ -4.0548415e-02
+ -7.0143575e-02
+ -1.0146524e+00
+ -1.3374673e-01
+ -4.0800443e-02
+ 6.0276839e-01
+ 7.8226053e-01
+ 2.1463862e-01
+ -8.0977924e-01
+ -1.3852612e+00
+ 9.0874136e-02
+ -2.1402203e-01
+ 1.5086823e-01
+ -2.3554182e+00
+ 6.2013811e-01
+ 3.1062177e-01
+ -9.0780399e-02
+ -3.9692323e-01
+ 5.9467671e-01
+ 2.2019319e-01
+ -7.1650512e-01
+ 1.1741962e-02
+ -9.5500420e-01
+ -7.7834275e-01
+ 1.5287605e+00
+ -1.8683469e+00
+ -1.2209546e+00
+ 2.6501575e+00
+ 9.4925165e-02
+ 3.9623363e-01
+ 1.3575368e+00
+ -1.9411465e+00
+ 1.7605881e+00
+ 1.0602403e+00
+ -1.0467912e+00
+ -2.7202596e-01
+ 4.3686658e-01
+ -8.6578650e-01
+ -6.4002050e-01
+ -5.1927525e-01
+ -1.4848230e-01
+ -6.5086429e-01
+ 5.9967324e-01
+ 9.4093931e-02
+ 1.3812352e+00
+ -7.5482787e-01
+ 9.6751740e-01
+ 5.3895668e-01
+ 6.4308992e-01
+ -9.1186433e-02
+ -8.2689537e-02
+ -1.3351127e+00
+ 1.1732801e+00
+ -1.9013959e-01
+ 3.9566889e-01
+ 7.4471539e-01
+ -2.5063304e-01
+ 1.6538002e-01
+ -4.3529821e-01
+ 1.1708190e+00
+ -9.0918069e-01
+ 1.3014492e+00
+ 1.0413715e+00
+ 1.4752261e+00
+ 2.8668724e-01
+ 1.4461692e+00
+ -6.0003240e-02
+ -1.5847041e-01
+ -4.2483704e-01
+ 4.5472119e-01
+ -4.1482567e-01
+ -5.8554341e-02
+ -2.5315762e-01
+ -2.1319690e-01
+ -2.1270963e+00
+ -2.3553297e-01
+ -1.7081996e+00
+ 3.2226271e-01
+ 7.3986653e-01
+ -6.9740504e-01
+ 6.9170422e-01
+ 4.2789486e-01
+ 1.2390014e-02
+ 1.7559262e+00
+ 7.7168162e-01
+ -3.1125212e-02
+ 7.0126826e-01
+ 6.4984283e-01
+ 1.6843285e+00
+ -1.3898055e+00
+ 7.2903728e-01
+ 2.0377785e-01
+ -9.0413535e-01
+ -1.6584335e+00
+ -8.9092365e-01
+ -9.5775895e-02
+ 4.0850471e-01
+ 6.7385837e-01
+ -3.1734505e-01
+ -2.3122193e-01
+ 6.7517222e-01
+ 8.3125144e-01
+ 1.2021898e+00
+ -1.8980952e+00
+ -1.2074504e+00
+ 2.8613237e-01
+ 1.0512521e+00
+ -8.9574841e-01
+ -2.9006101e-01
+ -4.5589562e-01
+ -6.7304457e-02
+ -4.5279377e-01
+ 7.5751174e-01
+ -1.5502071e+00
+ 2.0212646e+00
+ -1.3637132e+00
+ 1.0087750e+00
+ 1.1574297e+00
+ -1.6656810e-01
+ 1.7993541e-01
+ -4.4885170e-01
+ 7.8508403e-01
+ 3.2049180e-01
+ 2.3095884e-01
+ 8.5975245e-01
+ -8.4905081e-02
+ 1.2014928e+00
+ -2.3327476e-02
+ 6.9358460e-01
+ 7.6698939e-02
+ 5.1502677e-01
+ 1.8114279e-01
+ 5.8881674e-01
+ -4.1960390e-01
+ 1.1983079e+00
+ -3.3766671e-01
+ 3.6771544e-01
+ -1.1358049e+00
+ 1.3806298e+00
+ 8.4611034e-01
+ -2.9986269e-01
+ -8.8634452e-01
+ -3.7772479e-01
+ 3.8201005e-01
+ 4.2905146e-01
+ 6.7512767e-01
+ -5.5145162e-01
+ 4.1637548e-02
+ -1.6763333e-01
+ -6.1590559e-01
+ 8.3675515e-01
+ 3.6015916e-01
+ -3.3964667e-01
+ -3.9886361e-01
+ -2.8131096e-02
+ -6.9522128e-01
+ -8.9398166e-01
+ -7.0230905e-02
+ -3.9428809e-01
+ -2.9155440e-01
+ 4.4733790e-01
+ 1.7541826e+00
+ -8.1575548e-01
+ 1.8713291e+00
+ 1.3456013e-01
+ -6.7643469e-01
+ 6.4947003e-01
+ 3.9216233e-01
+ -5.4153115e-01
+ 1.2658078e-01
+ -1.4336001e+00
+ -2.5611089e+00
+ 3.0415053e-01
+ -1.0832502e+00
+ 6.3479977e-01
+ 6.0291497e-01
+ 1.0182165e+00
+ 6.4605620e-01
+ 7.7143489e-01
+ -2.7783099e-01
+ 2.2407515e+00
+ 2.6779433e-01
+ 3.9958605e-01
+ 1.3194741e+00
+ -1.0433818e+00
+ 3.0315313e+00
+ -1.2161032e+00
+ 1.4269681e+00
+ 1.3354914e+00
+ -6.6763802e-01
+ -1.9715165e+00
+ -9.1385614e-01
+ 1.6003596e-01
+ 4.6475967e-01
+ 3.1580283e-01
+ -4.7079315e-01
+ -5.8318962e-02
+ 1.7899310e+00
+ 4.2951897e-01
+ -2.1090906e-01
+ 1.8798701e-02
+ 9.5701152e-01
+ -3.1752496e-01
+ 8.3674117e-01
+ -8.0308843e-01
+ -7.1092806e-01
+ -8.0069163e-01
+ -1.8162807e+00
+ 1.4290484e+00
+ 1.2392940e+00
+ -6.8490460e-01
+ 5.2727557e-01
+ 1.3546954e+00
+ -8.5518435e-01
+ -9.7828387e-01
+ -4.1436646e-01
+ 9.7628182e-01
+ 2.8622747e-01
+ -1.6005127e-01
+ 1.1014412e+00
+ -1.0965292e+00
+ -1.0486153e+00
+ 1.8838725e-02
+ 3.7281870e-01
+ 3.1378154e-01
+ -9.4409020e-01
+ -4.0912037e-01
+ -2.5443654e-01
+ 1.8957986e-01
+ 1.5220577e-01
+ 2.1972716e-01
+ -7.4604332e-01
+ 5.6204145e-01
+ 1.0497123e+00
+ -1.9879488e-01
+ -3.4434921e-01
+ 5.0484765e-01
+ -8.2697996e-01
+ 1.7385509e+00
+ -7.8758676e-01
+ 2.2350341e-02
+ -7.8340976e-01
+ -4.4915062e-01
+ -1.5595775e-01
+ 1.0223227e+00
+ -4.1010966e-01
+ -3.2149294e-02
+ -1.6094871e-01
+ 1.2000197e+00
+ -2.0105631e+00
+ 5.6477182e-01
+ 7.7795248e-02
+ -1.4579154e+00
+ 2.8887725e-02
+ -7.3353302e-02
+ -2.7221874e-02
+ 6.1653779e-01
+ 1.4976636e-02
+ 6.9066821e-01
+ 1.7190576e+00
+ 6.9547881e-01
+ -1.2086645e-01
+ -7.0777206e-01
+ 1.8418172e+00
+ -3.8175008e-01
+ 1.0490052e+00
+ 8.5534754e-01
+ 6.7597531e-01
+ 3.8989603e-01
+ -5.6865950e-01
+ 7.6934464e-01
+ -1.1494592e-01
+ 1.9708784e-02
+ -3.2418122e-02
+ -4.5264740e-01
+ -1.1910569e+00
+ -4.1852351e-01
+ 1.2377089e+00
+ 2.0042501e+00
+ -3.9977841e-02
+ 6.3314161e-01
+ 4.3326610e-01
+ -1.6542528e+00
+ 1.8818423e-01
+ -9.1184828e-01
+ -1.5916118e+00
+ -7.0118428e-01
+ 1.6813131e+00
+ 9.1218758e-02
+ -1.0743835e+00
+ 7.1616931e-01
+ 4.9169516e-01
+ -3.0946618e-01
+ 5.5933786e-01
+ -2.8433799e-01
+ -1.2745815e+00
+ -1.2578854e+00
+ -1.3660001e-01
+ -9.5835819e-01
+ -5.2417428e-01
+ 5.3022838e-02
+ 1.4480248e-01
+ -1.5655095e+00
+ 3.1320069e-01
+ -9.3093264e-02
+ 6.4421238e-01
+ 8.5533651e-01
+ -1.3167763e+00
+ 6.3482154e-01
+ 1.5759195e-01
+ 1.3010794e+00
+ 1.8840050e-01
+ -7.3876764e-01
+ -2.0463498e+00
+ -1.0189711e+00
+ -1.2079340e+00
+ 1.5468560e-01
+ -1.3467138e+00
+ -1.3989315e+00
+ 1.4187812e-01
+ 1.9060325e+00
+ -8.6765970e-01
+ -1.5963433e+00
+ -2.3201873e+00
+ -8.8567397e-01
+ 5.4115243e-01
+ -1.7310223e-01
+ 2.1727141e-02
+ 6.7808684e-01
+ 1.4642251e+00
+ -1.9276421e+00
+ -4.3089202e-01
+ -7.3049957e-01
+ -6.7985540e-01
+ -2.5737196e+00
+ -1.3059648e+00
+ 1.2011562e+00
+ 6.8702345e-01
+ 9.1124143e-02
+ 7.1341600e-01
+ -1.3725326e+00
+ -1.5595069e-01
+ -3.7259415e-01
+ 7.4935932e-01
+ 1.4814144e+00
+ -8.7394613e-01
+ 1.0854286e+00
+ 5.6386748e-02
+ 1.2791548e+00
+ 9.8537545e-01
+ -9.3272141e-01
+ 1.9150605e+00
+ -1.4391630e+00
+ 2.1487519e-01
+ 1.5818893e+00
+ -1.5049583e+00
+ -3.3421168e-01
+ -3.8716317e-01
+ 1.5992957e-01
+ 5.8325031e-01
+ -2.8463598e-01
+ 4.3855560e-01
+ 2.1750469e+00
+ 1.5544788e+00
+ 1.7305722e+00
+ 5.4711887e-01
+ -6.8993161e-01
+ 3.7106724e-01
+ 6.7908344e-01
+ 1.0338490e+00
+ 7.5787882e-01
+ -6.0122905e-01
+ -1.2914374e+00
+ -1.3609700e+00
+ -5.4779242e-01
+ 5.0671582e-01
+ 1.5476258e+00
+ -9.4605613e-02
+ 9.2339103e-01
+ -1.2250955e+00
+ 1.3386060e+00
+ 7.6962742e-02
+ 1.2429715e+00
+ 6.3708561e-01
+ -6.4590336e-01
+ -9.7365999e-01
+ -2.3080093e+00
+ -1.1480599e-01
+ -1.4919324e-01
+ -3.9517991e-01
+ 9.1461163e-01
+ -1.2175311e-02
+ 6.8899261e-01
+ 7.6093555e-01
+ 2.7099186e-01
+ -8.8573094e-01
+ 5.7399511e-01
+ -4.2584677e-01
+ -1.4499840e+00
+ 9.7398030e-01
+ 2.4461151e+00
+ -7.9886839e-01
+ 1.6134674e-02
+ 1.2323493e+00
+ -2.1315675e+00
+ -1.9239946e+00
+ -2.4660985e-01
+ 1.0476753e+00
+ 3.3876522e+00
+ 3.2123917e+00
+ 1.0165715e+00
+ 6.4107857e-01
+ -5.7226014e-01
+ -1.7824126e+00
+ -9.7692242e-02
+ 1.7827116e-01
+ 9.7844396e-02
+ 1.6570813e+00
+ 1.1137829e-01
+ 1.6017756e+00
+ 7.7008613e-01
+ 8.0764263e-01
+ -1.4051295e+00
+ 7.9412880e-01
+ 6.5696188e-01
+ -6.9896296e-01
+ 3.8271744e-01
+ 4.5389961e-01
+ 5.5144080e-01
+ 7.2276474e-01
+ 1.1698373e+00
+ 8.0641655e-02
+ 5.4286446e-01
+ 1.0721590e-02
+ 9.8597685e-01
+ -5.9723198e-01
+ 1.0530361e+00
+ -1.2153764e+00
+ 8.8439777e-01
+ -1.3848524e-01
+ 3.0855667e-01
+ -3.4248901e-01
+ -1.2682340e-01
+ 3.1647592e-01
+ 8.6802291e-01
+ 8.8554061e-01
+ 3.5197224e-01
+ 1.2543797e+00
+ 3.7408720e-01
+ 1.2201000e+00
+ 1.8975340e+00
+ -1.1789496e+00
+ -1.1279858e+00
+ 1.2492441e+00
+ -1.5155198e-01
+ 4.7717248e-01
+ 1.5649915e+00
+ -6.3864001e-01
+ -9.7264393e-01
+ 9.0446153e-02
+ 1.8841478e-01
+ 5.2285625e-01
+ 5.0468441e-01
+ -1.4254207e+00
+ -2.0340609e-01
+ -2.4064949e-01
+ -2.3428967e+00
+ -1.3150764e+00
+ 7.7196272e-01
+ -1.1006190e+00
+ 2.4273741e-01
+ -1.7590269e+00
+ 2.9468733e-01
+ 8.8153318e-01
+ 1.1418250e+00
+ -4.3527628e-01
+ -9.8019523e-01
+ 7.8425379e-01
+ -4.4802077e-02
+ 5.7496094e-02
+ 1.2289169e+00
+ 1.8262793e+00
+ -8.7513123e-01
+ -4.8933199e-01
+ 8.4889184e-02
+ 6.7121209e-01
+ 1.3421961e+00
+ 5.6770329e-01
+ -4.2854918e-01
+ 1.0023726e+00
+ 5.8151153e-01
+ -1.6202803e-01
+ 5.9373983e-01
+ 2.0171941e-01
+ 1.8235152e+00
+ -2.5082535e-01
+ 1.2669903e+00
+ 1.1863382e+00
+ -5.3306390e-01
+ 6.8030104e-01
+ 8.9844679e-01
+ 1.6372917e+00
+ -1.2965979e+00
+ -8.0619497e-01
+ 1.6088482e-01
+ -2.3662207e+00
+ -1.5265038e+00
+ -1.8083222e+00
+ 6.9978961e-01
+ -6.3025457e-01
+ 3.0020499e+00
+ 8.1152394e-01
+ 8.1473280e-01
+ -1.5989659e-01
+ -3.1270454e-01
+ 8.1478208e-01
+ 1.1799679e+00
+ 1.4592821e+00
+ 1.3752595e+00
+ 1.0925921e+00
+ -2.4784251e-02
+ -2.6131419e-02
+ -8.7914894e-01
+ -1.3443903e-01
+ 3.9256181e-01
+ -1.3912484e+00
+ -4.0838824e-01
+ -4.0759894e-01
+ 9.3749542e-02
+ -3.2693087e-01
+ -3.2310021e-01
+ -1.3088114e+00
+ -1.1587566e+00
+ -1.2944976e+00
+ 3.0836809e-01
+ 4.3237561e-01
+ -1.8730249e+00
+ -1.1235015e+00
+ -3.6929299e-01
+ 5.4320770e-01
+ 2.0910456e-01
+ 8.6053681e-01
+ -1.3526953e+00
+ -6.5608425e-01
+ -1.3510469e+00
+ 8.9603500e-02
+ -8.1471116e-01
+ 7.6226928e-01
+ -1.6894022e+00
+ 8.0682696e-02
+ -2.1623104e+00
+ -9.0915448e-01
+ -7.8678619e-02
+ 3.9814636e-01
+ 3.3213370e-01
+ -1.7578705e+00
+ 4.7255797e-01
+ 7.9948447e-01
+ -7.9839131e-01
+ 1.0160619e+00
+ -5.6234739e-01
+ -8.4779609e-01
+ 1.8699521e-01
+ 6.5682079e-01
+ 4.6235349e-01
+ 2.9775943e-01
+ 5.9155935e-01
+ -3.1049692e-01
+ 6.8632414e-01
+ 6.2225783e-01
+ -1.5601503e+00
+ -5.7907526e-01
+ 9.4407340e-01
+ -3.6157289e-01
+ -6.1596832e-01
+ -2.5691341e-01
+ 9.2829851e-01
+ -1.2564355e+00
+ 7.8085146e-01
+ 7.9997074e-01
+ 5.0990390e-01
+ -6.5111349e-01
+ -1.1290447e+00
+ 9.1046926e-01
+ 4.1019165e-01
+ 1.2216281e-01
+ 1.8091194e-01
+ 4.0786658e-01
+ 3.6581201e-01
+ 1.1970927e+00
+ 6.6268559e-01
+ 8.7472928e-02
+ 9.7913019e-01
+ 1.8966597e+00
+ 2.5218066e-01
+ 9.8862311e-01
+ -1.0910943e+00
+ 1.1491425e+00
+ -5.6756746e-01
+ -3.3694685e-01
+ 6.8412750e-01
+ -4.0717209e-01
+ -2.1796028e+00
+ -1.9852053e+00
+ -1.3851693e+00
+ 5.4621363e-01
+ -4.9809964e-01
+ -3.3224611e-01
+ -1.0754624e+00
+ 1.8782401e+00
+ -2.4180908e-01
+ -8.0657463e-01
+ 2.5847438e-01
+ -1.5717923e+00
+ -5.2220134e-01
+ 9.8982405e-02
+ 2.0897118e+00
+ 2.9872795e-01
+ 3.1343035e-01
+ 7.7858487e-01
+ 1.0396290e+00
+ -5.3543394e-01
+ 3.5690978e-01
+ -1.6947875e+00
+ 4.7459585e-01
+ -1.1322064e+00
+ -1.6203141e-01
+ 2.0611398e-01
+ -8.4558348e-01
+ 1.2766374e+00
+ -5.1551325e-01
+ -6.3192905e-01
+ 6.7817899e-01
+ 1.3186119e+00
+ 1.7744734e-01
+ -1.0526282e+00
+ 1.0418467e+00
+ -7.5425475e-01
+ -2.0253581e+00
+ -9.9381322e-01
+ 1.5417407e+00
+ 2.0596332e+00
+ 2.1559438e-01
+ 9.2452690e-02
+ -1.7801494e+00
+ -1.7965573e+00
+ 7.4997818e-01
+ -2.4970714e-01
+ -7.8048668e-01
+ -5.2223225e-01
+ -4.7277443e-01
+ -1.2407897e-01
+ -1.0928585e+00
+ 2.0903778e-01
+ 2.7831854e-01
+ 8.2525075e-01
+ -5.0230258e-01
+ 1.5888584e+00
+ -3.3144632e-01
+ 5.3682025e-01
+ -4.5739987e-01
+ 1.7073382e+00
+ -4.7673616e-01
+ 9.2812886e-01
+ -3.5640706e-01
+ 9.4490142e-01
+ 1.0911600e+00
+ -1.5975554e-01
+ -3.3399478e-01
+ -5.6206112e-01
+ -1.9080166e-01
+ -4.3256298e-01
+ -1.8802751e+00
+ -2.7137720e-01
+ 2.9138238e-01
+ -7.5275708e-01
+ -6.4402338e-01
+ -6.0683982e-01
+ -3.9941654e-02
+ -8.1843830e-01
+ -1.2448939e+00
+ 1.5432298e+00
+ -5.5739948e-01
+ 5.4163445e-01
+ -1.1719152e+00
+ 1.9763791e+00
+ 9.2604759e-03
+ 1.1649173e+00
+ 7.7126865e-01
+ -8.3182599e-03
+ 3.1477641e-01
+ -6.2206572e-01
+ 1.1302762e-01
+ 8.5582846e-01
+ -5.3551405e-01
+ -5.6984797e-01
+ -2.0484305e-01
+ 7.6043703e-01
+ -9.8510605e-01
+ -1.0510468e+00
+ -2.9088584e-01
+ -2.6484101e-01
+ 6.9013007e-01
+ 1.0773918e+00
+ -1.0665281e+00
+ -1.9046066e+00
+ -1.5707899e+00
+ -1.1982856e+00
+ -1.2893926e+00
+ -8.7523996e-02
+ -4.1260436e-01
+ 1.6050605e+00
+ 7.3810341e-01
+ -2.6055508e-02
+ -1.2387558e+00
+ 1.5699981e-01
+ 3.4632937e-01
+ 4.4458759e-01
+ -3.6761769e-01
+ -1.0016501e+00
+ 1.5679696e+00
+ -5.4957781e-01
+ 4.3436511e-02
+ 6.9352277e-01
+ 2.6360603e-02
+ -7.6754297e-01
+ 1.6356456e+00
+ -2.7865474e+00
+ 4.7040551e-01
+ 1.5058488e+00
+ -1.3390378e-01
+ -1.1311177e-01
+ -6.1749524e-01
+ 2.4319195e+00
+ 1.6222731e+00
+ -3.3383957e-02
+ -2.5417329e-01
+ -8.1862435e-01
+ 1.5374654e+00
+ -1.6064862e+00
+ -8.6621730e-01
+ -4.3836513e-01
+ -1.0895863e+00
+ -1.2207748e+00
+ 7.0743412e-01
+ -6.9864027e-02
+ -4.8631217e-01
+ -2.5662263e-01
+ -1.0698371e-01
+ -9.4886955e-01
+ -2.1128248e-01
+ -8.6031194e-01
+ 8.0873179e-01
+ 4.8924578e-01
+ -3.4718916e-01
+ 3.3116242e-01
+ -8.5171963e-01
+ -6.1064883e-01
+ -6.2117705e-01
+ 2.0704792e-01
+ 5.3433984e-02
+ -2.0279787e+00
+ -9.8028655e-01
+ -4.8799244e-01
+ -2.1525700e-01
+ -5.1344604e-01
+ 6.5439398e-01
+ 1.2958683e+00
+ 1.0071414e+00
+ 3.8694638e-01
+ 1.0825328e+00
+ 1.1826183e+00
+ 5.5482781e-01
+ 1.9955792e+00
+ -2.5286494e-01
+ 3.4802050e-01
+ -4.5511344e-01
+ -6.3570742e-01
+ -9.7985657e-01
+ -7.6149203e-01
+ -1.2835468e+00
+ -3.0125030e-01
+ -7.0723177e-01
+ 1.5570262e+00
+ 5.2793330e-01
+ -1.9342622e+00
+ 1.1686913e+00
+ -5.3418184e-01
+ -1.5779267e+00
+ 5.3117163e-01
+ 1.2251152e+00
+ 2.9168577e-01
+ 4.0392554e-01
+ -7.9831267e-01
+ -1.4949182e-01
+ -9.8310900e-02
+ -2.3104021e-01
+ 7.3319078e-01
+ -7.7298182e-01
+ -3.2230526e-01
+ -4.4751898e-01
+ 4.1500624e-01
+ 1.2590871e+00
+ 1.7764082e+00
+ 2.0916076e+00
+ -1.0045665e+00
+ -7.3112597e-01
+ 1.9421008e+00
+ 3.7535999e-01
+ -5.5278796e-01
+ 1.4011755e+00
+ -1.5537207e+00
+ -4.6397703e-01
+ -9.3772308e-01
+ 1.1189372e+00
+ 1.9568067e+00
+ 7.4188466e-01
+ 1.4970983e+00
+ 1.5635004e+00
+ 6.9660452e-01
+ -5.0850462e-01
+ 9.0790386e-01
+ 3.3005998e-01
+ -1.1199756e+00
+ -5.5851610e-01
+ 1.4958486e+00
+ -1.1525248e+00
+ 3.2379869e-01
+ -7.6135083e-01
+ 5.5999754e-01
+ -9.8424192e-01
+ -1.2566349e+00
+ 2.2173362e-01
+ -8.8610561e-01
+ 1.3092344e+00
+ 5.2113990e-01
+ -3.4122210e-01
+ -3.4656079e-01
+ -1.9982374e+00
+ -1.0512259e-02
+ 2.1838218e+00
+ 3.0775054e-01
+ -1.0243593e+00
+ 3.3472453e-01
+ 7.2875456e-01
+ -1.3228438e+00
+ 5.2678527e-01
+ 1.4281606e+00
+ 2.2815076e-01
+ -3.0052779e-01
+ -1.0143078e+00
+ 7.0127627e-02
+ -1.0109112e+00
+ -3.3205967e-01
+ -4.1650067e-01
+ -4.7305300e-02
+ 4.6551100e-01
+ -4.2129302e-01
+ 6.9630489e-02
+ -1.7137865e+00
+ 1.0023362e+00
+ -9.9138470e-01
+ -2.8071603e-01
+ 1.6986814e-01
+ 8.9489781e-01
+ -8.0102224e-01
+ 2.6822339e-02
+ -5.8776097e-01
+ -1.0870414e+00
+ -3.6334863e-02
+ -1.7055750e-01
+ -4.0716616e-02
+ -1.0304774e+00
+ -5.1447231e-01
+ 3.3314572e-01
+ 6.9451946e-01
+ -2.7043092e-01
+ 1.9901118e+00
+ -1.0163913e+00
+ -1.3406439e+00
+ 1.6347682e+00
+ -9.2742312e-01
+ -1.8909137e-01
+ -9.9147245e-01
+ -1.1734507e+00
+ -7.7347136e-01
+ -1.6288262e-01
+ -4.4774016e-01
+ 8.6720802e-01
+ -4.1850431e-01
+ 1.2691233e+00
+ -8.2238408e-01
+ -1.5595317e+00
+ 2.9489214e-01
+ 1.3202938e+00
+ -2.3276501e-01
+ 1.2353695e+00
+ -2.4345094e-01
+ -6.3269416e-01
+ -1.2384112e+00
+ 1.0707227e+00
+ -1.2958065e+00
+ -3.2623290e-01
+ -7.7929871e-01
+ -7.7321418e-01
+ -2.8368571e-01
+ 1.4332778e-01
+ 2.3603522e-01
+ -8.4445069e-01
+ 3.4079175e-01
+ 5.1499266e-01
+ -1.4023908e-01
+ -2.2724598e-01
+ -1.2092160e+00
+ 3.1033897e-01
+ 1.6461559e+00
+ 7.4914308e-01
+ -1.1499789e-01
+ 5.7648556e-01
+ 1.8509554e-01
+ 5.7287951e-01
+ 1.2326669e-01
+ 9.5607636e-03
+ 1.5898305e+00
+ 1.2317125e-01
+ 6.3841668e-01
+ 7.7802505e-01
+ 1.3269576e+00
+ -1.5564360e-01
+ 6.2847516e-01
+ 6.5594268e-02
+ -4.8295592e-01
+ -1.0224728e-01
+ 6.0433133e-01
+ -7.4714328e-01
+ 1.5832737e+00
+ 1.8838081e+00
+ -7.2903677e-01
+ -3.4690113e-01
+ 4.6162007e-01
+ 4.0287871e-01
+ 1.3849863e+00
+ -7.1399591e-02
+ 1.5942307e+00
+ -8.3500271e-01
+ 8.0347443e-02
+ 3.2348949e-01
+ -9.6689503e-01
+ 5.9188539e-02
+ -2.6517437e-01
+ 8.5769261e-01
+ 5.4568617e-01
+ 1.8537518e+00
+ 9.9609664e-01
+ 1.0289138e-01
+ -1.9183819e+00
+ -1.3106782e-01
+ -7.6863167e-01
+ 2.3899518e+00
+ 7.7245680e-02
+ 3.7560745e-01
+ 3.9556417e-01
+ -1.1249909e-01
+ -1.8290367e+00
+ 2.0914522e+00
+ 3.5909312e-01
+ -7.9434475e-01
+ -2.2731164e-01
+ 1.5938214e+00
+ 1.5520563e-01
+ 1.7859563e-01
+ -3.3773085e-01
+ -1.5249919e+00
+ -7.0940665e-01
+ -8.6661663e-01
+ 7.1481108e-02
+ 1.5562064e-01
+ -1.8219139e-01
+ 7.3101584e-01
+ -3.4756807e-01
+ 2.3442401e-01
+ -8.6772936e-01
+ -9.8253859e-01
+ -2.9357242e-01
+ 8.2446964e-01
+ 1.9413317e-01
+ 2.9769162e-01
+ -7.1012508e-01
+ -6.8767410e-01
+ 5.7283812e-01
+ 4.4521760e-01
+ -1.3259593e+00
+ -1.4998754e+00
+ 1.0159682e+00
+ -2.7515788e-02
+ -1.6044558e-01
+ 3.7883518e-01
+ -1.0716072e-01
+ 2.1283509e-01
+ 4.6806392e-01
+ -1.6160743e+00
+ 1.4738006e-02
+ -3.7764348e-02
+ 4.0380900e-01
+ 3.0525439e-01
+ -1.2431101e+00
+ 1.3185919e-01
+ -9.9947508e-01
+ -3.5421346e-01
+ 1.0558872e-01
+ 9.5542627e-01
+ 4.6479898e-01
+ 2.6670639e-01
+ -1.4232233e+00
+ 1.1105731e-01
+ 1.1728554e+00
+ -2.1155833e+00
+ 4.6216114e-01
+ -2.4599032e+00
+ -3.0485718e-01
+ 3.9823325e-01
+ -1.7057866e+00
+ 7.5940981e-01
+ 2.0323762e-01
+ 9.5868279e-01
+ 4.8682975e-01
+ -4.4590444e-01
+ 3.2567307e-01
+ -2.0097806e-02
+ -1.8884756e+00
+ 3.3836147e-01
+ 3.3780540e-01
+ 4.2433122e-01
+ 1.1287079e-01
+ -1.1827037e-01
+ -2.6862862e+00
+ 1.5483562e+00
+ -9.2437868e-01
+ -7.2040491e-01
+ 8.3350531e-01
+ -5.6649186e-01
+ -9.9915100e-01
+ 6.4126705e-01
+ -2.5395009e-01
+ -1.1217000e+00
+ 1.6479269e+00
+ -3.0667757e-01
+ -7.7404141e-01
+ -1.3542396e+00
+ -3.2592679e-01
+ 1.5532163e+00
+ 6.2813121e-01
+ -1.0275462e+00
+ -2.0194229e-01
+ 8.6106603e-01
+ 1.5581574e+00
+ -1.2968112e-01
+ -8.1777232e-01
+ 2.8850644e-01
+ -1.1313790e+00
+ 8.8131707e-01
+ -9.4421370e-01
+ -6.2159192e-01
+ -1.9910523e+00
+ -9.5195327e-01
+ 2.5794900e-01
+ 1.1981972e+00
+ 1.1089668e+00
+ -1.6126667e+00
+ -3.5662964e-01
+ -8.6164589e-03
+ -1.4613958e-02
+ 2.1708766e-01
+ 1.8019073e-01
+ -5.2051641e-01
+ -2.3958191e-01
+ -6.9301523e-01
+ -6.8491079e-01
+ 9.3260276e-01
+ -1.2085510e+00
+ -3.6078550e-01
+ -1.1823695e+00
+ 6.4465760e-01
+ -1.0888329e+00
+ -1.6984745e+00
+ -1.2903596e+00
+ 5.4562674e-01
+ 2.1353495e+00
+ -5.7685875e-01
+ 8.2518905e-01
+ 1.6131042e+00
+ 1.2159222e+00
+ 1.6139113e+00
+ -5.9993880e-01
+ 1.0400800e+00
+ -2.4440684e-01
+ -1.4850667e+00
+ -3.5617863e-01
+ 3.5452356e-01
+ 1.8349129e+00
+ 8.9769247e-01
+ 2.5230230e-01
+ 9.8402784e-01
+ -5.1456092e-01
+ -1.3106536e+00
+ -6.8731566e-01
+ -1.1854646e+00
+ 9.8238861e-01
+ -1.3534657e-01
+ -1.1900400e+00
+ -2.0730962e-01
+ -8.4561519e-01
+ -3.1429513e-01
+ 1.4242803e+00
+ 1.4914769e+00
+ -7.4404839e-01
+ -3.7437698e-01
+ 4.2410689e-01
+ 1.1411571e-01
+ -5.1109796e-01
+ 1.0223372e+00
+ -1.4191838e+00
+ 2.5466793e+00
+ -3.5795550e-01
+ 4.0131843e-01
+ -7.0619483e-01
+ -1.0206634e+00
+ 1.1339608e+00
+ 3.8545332e-02
+ 2.3091273e-01
+ 1.2573352e-01
+ 6.9628561e-01
+ 1.7394737e+00
+ 6.6537739e-01
+ 6.8753180e-01
+ 1.2389687e+00
+ 8.9866307e-01
+ -1.1500981e+00
+ -2.6418046e-01
+ -1.6251805e+00
+ 5.8164260e-01
+ 1.9024927e+00
+ 1.5800943e+00
+ 9.2102905e-01
+ -9.3790246e-01
+ -7.3718621e-01
+ 1.7978079e-01
+ -1.3183047e-01
+ 8.6792689e-01
+ 1.3143919e+00
+ -2.5111955e-01
+ -7.1759512e-02
+ 1.0952087e+00
+ 4.8928037e-01
+ -1.6801537e+00
+ -8.1152546e-01
+ -7.5222489e-01
+ -1.3259191e+00
+ -1.8148085e-01
+ 1.3141549e-01
+ 1.3938299e+00
+ 7.0621342e-01
+ 1.1628468e+00
+ -7.5368772e-01
+ 3.2192470e-01
+ 1.6357042e+00
+ -6.4779452e-01
+ 6.7326330e-01
+ 1.2735555e+00
+ -1.0398118e+00
+ 4.8795003e-01
+ -9.0675360e-01
+ -4.7470307e-01
+ -6.6608673e-01
+ -5.0201962e-01
+ -3.0888602e-01
+ -8.3690130e-01
+ -6.2832389e-01
+ 5.0090346e-01
+ 1.6702536e+00
+ -1.5417301e+00
+ -2.7200912e-01
+ 3.4164674e-01
+ 4.8436693e-01
+ 9.5268422e-01
+ 1.3135013e-01
+ -1.7419133e+00
+ 6.6776131e-01
+ 8.9815588e-01
+ -5.4931556e-01
+ -3.1750026e-01
+ -5.8269331e-01
+ -1.6421093e-01
+ -9.3513325e-01
+ 1.1881074e+00
+ -1.2127883e+00
+ -3.8117851e-01
+ 1.3226534e+00
+ 3.8534628e-01
+ -3.6182184e-01
+ -4.2637666e-01
+ 3.8713794e-01
+ 9.0277695e-01
+ 7.1777527e-01
+ 1.7360807e+00
+ -1.0088329e+00
+ -1.8003940e-01
+ -2.0265477e+00
+ 4.0893784e-01
+ 7.3432512e-01
+ 8.1967433e-02
+ -1.6865170e+00
+ -2.0617113e+00
+ 1.8209372e+00
+ -1.2491315e+00
+ 9.3631615e-01
+ -1.7155872e-01
+ -7.8369128e-02
+ -6.1036921e-01
+ 5.6887556e-01
+ -1.5719719e-01
+ -1.0685058e+00
+ -3.1252217e-01
+ -1.7122889e-02
+ -1.3233227e-01
+ 4.4468541e-01
+ 4.0173856e-01
+ -2.5141902e+00
+ -7.8849274e-01
+ -1.1401662e-01
+ 4.7413698e-01
+ 6.8491618e-01
+ 5.3977044e-01
+ -3.8044895e-01
+ 1.4430567e+00
+ -8.0929881e-01
+ -1.4712311e+00
+ 4.2542207e-01
+ 9.6419273e-01
+ 9.7041652e-01
+ 5.2231356e-01
+ 8.7477896e-01
+ 1.5806639e-01
+ 1.5656886e+00
+ 1.3527578e+00
+ 9.2528175e-02
+ 7.8252329e-01
+ 1.1100244e+00
+ 1.4999465e+00
+ -1.3238085e-01
+ 1.2577997e+00
+ 1.0932928e+00
+ 9.7522127e-01
+ 1.2002858e+00
+ -1.0728336e-01
+ 6.1949924e-01
+ 1.0909685e+00
+ -4.4203488e-01
+ -1.2807932e+00
+ 6.5878350e-01
+ 2.0102942e-01
+ 4.5001961e-01
+ -1.3068824e-02
+ -8.4648209e-01
+ 4.8271838e-01
+ 9.3312086e-01
+ 2.9170062e-01
+ -2.1339365e-01
+ -4.0705416e-02
+ -2.2802828e-01
+ -1.3811048e+00
+ 2.6506418e-01
+ 1.0620732e+00
+ 5.8548211e-02
+ -5.6460054e-01
+ 6.6265084e-01
+ 1.2090738e+00
+ 4.5482148e-01
+ 4.9357133e-01
+ 2.2162062e-01
+ -5.7464411e-01
+ 1.3227023e-01
+ 1.1286398e+00
+ -5.6005888e-02
+ 7.0626588e-01
+ -6.0550907e-02
+ 5.9024852e-01
+ -6.1960724e-01
+ -1.1902801e+00
+ -2.4353561e+00
+ 7.3200557e-01
+ 3.4681241e-01
+ 7.2808703e-01
+ 5.7115967e-01
+ -1.7775743e+00
+ 1.0337879e-01
+ 1.9348477e+00
+ 9.3067300e-01
+ -1.5083464e-01
+ -4.6819906e-01
+ -3.6528668e-01
+ 2.5813451e-01
+ 1.8535987e-01
+ -8.9456506e-01
+ -4.5442473e-01
+ -2.8301609e-01
+ 1.0965017e+00
+ 1.0177969e+00
+ 3.0255491e-01
+ -1.2609276e+00
+ 2.4015108e-01
+ 7.8343789e-01
+ -1.9302007e-01
+ -1.3070100e+00
+ -7.6559968e-01
+ 7.8255347e-01
+ -6.8662559e-02
+ 3.8321645e-01
+ 3.1142887e-01
+ 7.5205738e-01
+ 9.5719177e-01
+ 4.4150389e-01
+ 5.5314577e-01
+ 3.6718812e-01
+ -1.1446970e+00
+ 9.2748395e-01
+ 1.0477348e+00
+ 3.2909568e-01
+ -2.3967398e-01
+ -5.6783658e-01
+ -1.5646099e+00
+ 2.9717995e-02
+ 6.0717782e-01
+ 9.6029016e-01
+ -1.2553660e-01
+ -4.8256378e-01
+ 1.7204100e+00
+ 1.7116231e+00
+ 2.3919526e+00
+ -9.3724221e-01
+ -1.2838415e+00
+ 1.6259642e-01
+ 3.8903029e-01
+ 6.8499318e-01
+ -4.9181946e-01
+ -1.9880144e-01
+ -3.0830493e-01
+ -1.9709990e+00
+ -8.2212635e-01
+ 6.7323334e-02
+ -4.1562828e-01
+ 8.4179930e-01
+ 5.9350698e-01
+ 2.9900881e-01
+ 6.2032616e-01
+ 2.0547497e+00
+ -2.5180396e-01
+ 2.6635878e+00
+ 1.8578244e+00
+ 1.2647113e+00
+ -1.9688424e+00
+ -5.6491559e-01
+ -1.3172138e+00
+ 2.0211130e-01
+ -1.0584010e+00
+ -4.3997017e-01
+ 1.4778867e+00
+ -1.2282586e+00
+ -1.8466841e+00
+ -7.4760417e-01
+ -2.5630795e-01
+ 6.8392577e-01
+ 1.1821271e-01
+ -3.5234586e-01
+ 2.3460685e-01
+ -1.1382177e+00
+ 3.0103188e-01
+ 1.0366978e+00
+ -2.0253571e-02
+ 1.1856314e+00
+ -3.3262184e-01
+ 1.0198931e+00
+ -1.3459873e+00
+ 4.5249931e-02
+ 5.6978574e-01
+ -1.0480414e+00
+ -1.4765510e+00
+ -5.9117629e-01
+ -2.5900867e-01
+ 1.3568368e+00
+ -1.0056502e+00
+ 1.0442225e+00
+ -2.5932158e-01
+ -6.1920217e-01
+ -3.5101410e-01
+ 2.1361985e+00
+ -6.1599655e-01
+ 1.5139365e+00
+ 8.5554198e-02
+ -5.0259962e-01
+ 7.0582523e-01
+ 1.1969366e-01
+ -8.5694750e-02
+ 4.8205162e-01
+ -4.7597089e-01
+ 2.1170407e+00
+ 9.9026814e-02
+ 8.0667107e-01
+ 1.0169191e+00
+ -9.3339821e-01
+ 1.4725052e+00
+ 9.8495987e-01
+ -7.4668537e-01
+ 3.1540918e-01
+ -9.1433077e-01
+ 1.2303684e+00
+ -2.6587270e-02
+ 9.0971698e-01
+ 5.9256656e-02
+ 2.6802869e-01
+ -4.9421514e-01
+ -4.5913713e-01
+ -1.8801111e-01
+ 2.4256492e+00
+ 8.7054502e-01
+ 5.6176349e-01
+ 5.4971013e-01
+ 2.3983417e+00
+ 4.5732078e-01
+ 6.5507391e-01
+ -6.1347899e-01
+ -1.8690513e-02
+ -1.0380457e+00
+ 5.4586221e-01
+ -6.6939864e-01
+ 1.3647959e+00
+ 9.7885080e-01
+ -6.6268531e-02
+ -3.5787838e-01
+ -1.3744338e+00
+ 8.5066498e-01
+ 8.5815476e-01
+ -9.9552784e-02
+ 2.1040331e+00
+ 5.9418549e-01
+ 6.0198587e-01
+ 2.3120934e-02
+ 7.6864179e-01
+ -7.4281742e-01
+ -9.6305351e-02
+ -9.9523073e-01
+ -1.2312624e+00
+ -1.8376544e+00
+ 1.5897524e+00
+ -2.0318485e+00
+ 2.3552286e+00
+ 7.6404438e-01
+ -2.1146526e+00
+ -9.0353464e-02
+ 8.8481897e-01
+ -6.8837522e-01
+ 7.9571957e-01
+ -1.0377472e+00
+ 9.8199263e-02
+ 1.5237266e+00
+ 3.7423274e-01
+ 1.2390072e+00
+ 6.5530194e-02
+ -6.8030769e-01
+ 5.1355658e-01
+ 5.3690330e-02
+ 2.1301171e+00
+ -8.1960089e-01
+ 9.8988330e-02
+ -1.4617316e+00
+ 1.6269981e+00
+ 6.6043770e-01
+ 1.4171046e+00
+ -2.5323072e-01
+ 4.5042330e-01
+ 1.3013656e+00
+ -2.9331732e-01
+ 5.6921616e-01
+ -1.4056865e+00
+ -2.9313570e-01
+ -1.1954598e-01
+ -7.0002520e-01
+ -1.5770161e+00
+ 2.8758377e-01
+ 2.4020215e-01
+ 6.2244497e-01
+ 9.6851909e-01
+ -8.7452995e-01
+ 2.6228534e-01
+ 1.4501639e-01
+ 1.1975501e+00
+ 9.2473931e-01
+ -7.8384661e-01
+ -1.8150684e+00
+ -8.1184821e-01
+ 9.8893012e-01
+ -7.3826135e-03
+ -2.0371885e-01
+ -6.9674307e-01
+ -6.2502420e-01
+ 4.6320393e-01
+ 7.5812985e-01
+ 5.0639985e-01
+ 1.8001758e-01
+ 1.1690202e+00
+ -1.8039761e-01
+ -1.6285389e-02
+ -9.7952091e-01
+ 2.0060874e-01
+ -1.4747605e-01
+ -1.0198766e+00
+ 5.5524827e-01
+ 2.6999586e-01
+ 2.0614805e+00
+ 5.1672752e-01
+ 5.1782044e-01
+ -1.7640511e-01
+ -1.0924193e+00
+ -1.1863172e+00
+ 3.3836748e-01
+ 1.5337581e+00
+ 3.7779777e-01
+ 9.5322996e-01
+ -4.9014348e-01
+ 3.1356209e-01
+ -2.6380492e-01
+ -7.9218233e-01
+ 7.4409535e-01
+ -2.8055603e-01
+ -3.2169378e+00
+ 1.9347692e+00
+ -2.9875786e-01
+ 3.8298125e-01
+ -4.5438749e-01
+ 1.5645920e-01
+ -2.6126403e-01
+ -6.1447955e-02
+ -4.3489524e-01
+ -1.1036657e+00
+ -4.5878218e-01
+ 2.9417284e-01
+ -1.9477656e-01
+ 1.5976725e+00
+ 3.0954421e+00
+ -7.5579575e-01
+ -8.7235676e-01
+ -1.0529907e+00
+ -9.7559961e-01
+ -1.1210815e-01
+ 3.4542259e-01
+ 1.5487863e-01
+ -1.3068423e+00
+ 1.5257117e+00
+ 9.5863291e-01
+ -9.8617215e-01
+ -2.3718924e-01
+ -4.8578903e-01
+ -6.1163903e-02
+ -6.3991739e-01
+ -7.1532345e-01
+ 1.8141396e-01
+ -3.0259439e-01
+ -2.1741077e-03
+ -3.5152043e-01
+ -1.4486974e-01
+ 2.1407139e-01
+ -6.5414217e-01
+ 1.3855814e+00
+ 6.0512786e-01
+ -2.7553944e+00
+ -6.6270335e-01
+ 6.4392531e-01
+ 9.3573296e-01
+ -1.4264727e+00
+ 1.7663624e+00
+ -3.9751447e-02
+ -1.5026254e+00
+ -4.2496284e-01
+ -6.4928869e-01
+ 1.5704536e+00
+ -2.1910482e+00
+ -8.0709304e-01
+ 3.8684839e-01
+ 7.4292497e-01
+ -1.6248157e+00
+ 1.3680247e+00
+ -1.4088395e+00
+ -8.8216627e-01
+ -3.4655931e-01
+ 8.4283943e-01
+ 5.5073027e-01
+ 5.0885640e-03
+ 8.7732064e-01
+ -5.4354098e-01
+ 1.5722160e+00
+ 9.1945971e-02
+ -1.8415581e+00
+ -9.0406713e-01
+ -9.8564825e-01
+ -1.1298286e+00
+ 6.6078594e-01
+ -1.2078156e+00
+ -1.9847514e-04
+ -1.2154045e-01
+ -7.7362012e-01
+ 1.0878998e-01
+ -7.0266433e-01
+ 1.8479700e+00
+ -1.5100297e+00
+ 2.6510472e-01
+ -4.9971297e-01
+ -2.0950359e-01
+ -1.7303794e+00
+ 8.4164484e-01
+ 2.1608976e-01
+ 1.0955955e+00
+ 6.2110477e-01
+ -7.9548979e-01
+ -1.2218376e+00
+ -5.1083621e-01
+ 5.1953778e-01
+ -1.1049367e+00
+ -2.4488621e-01
+ -2.1857312e+00
+ -9.8441307e-01
+ 4.7344971e-01
+ 8.1646612e-01
+ 1.3909207e+00
+ 4.1989086e-01
+ 3.6125312e-01
+ -9.7828711e-01
+ -1.9788252e+00
+ 9.9451778e-01
+ 5.3802622e-01
+ 4.4552059e-01
+ 6.5422140e-01
+ -4.3798682e-01
+ 1.1226512e+00
+ 9.5986046e-01
+ -2.8859494e-01
+ -6.1594291e-01
+ -5.0616719e-02
+ 6.6918447e-01
+ 1.1498751e+00
+ 9.8945169e-01
+ -1.8928875e+00
+ 2.9459688e-01
+ -3.0688735e+00
+ -1.5987793e+00
+ -8.4631750e-01
+ 4.4202013e-02
+ -5.7684787e-02
+ -1.2261838e-01
+ 1.0371513e+00
+ 1.1724120e-01
+ 8.8167172e-01
+ -7.6140598e-02
+ -9.1442755e-01
+ -1.1863140e+00
+ 1.1997547e+00
+ -4.1596168e-01
+ 4.8394339e-01
+ -6.5124866e-03
+ -5.2376515e-01
+ 4.6051679e-01
+ -8.4241135e-01
+ 9.2029321e-01
+ 1.2784153e+00
+ 1.8203717e+00
+ 6.7590513e-01
+ 9.3548460e-01
+ 7.8826121e-01
+ -1.0081944e+00
+ -1.1533025e-01
+ 4.1914355e-01
+ -1.1429721e+00
+ -2.2347716e-01
+ -1.4164110e+00
+ -2.6229936e-01
+ 2.2802868e-01
+ 3.3611962e-01
+ 6.8345088e-01
+ 9.8072475e-01
+ -2.1553145e-01
+ 9.6122126e-01
+ 1.0349595e+00
+ -1.5690988e-01
+ 1.1077506e-01
+ 9.0942270e-01
+ -6.6064393e-02
+ -7.2675744e-01
+ -5.0838131e-01
+ -6.4345674e-01
+ -1.0840958e+00
+ 1.2329015e+00
+ -2.0850131e+00
+ -9.2157756e-02
+ 1.2962555e-01
+ 2.0629267e-01
+ -2.1348076e-01
+ -1.5269838e+00
+ -5.4421902e-01
+ -1.0278122e+00
+ 6.8755631e-01
+ -3.9327924e-01
+ 4.7565834e-01
+ -6.3453204e-02
+ -5.5904750e-01
+ -7.3539704e-01
+ -1.3866199e+00
+ -7.9917366e-01
+ -6.1121940e-01
+ -1.1022349e-01
+ 4.1425870e-01
+ 2.3009527e-01
+ 8.5703100e-01
+ 4.8208732e-02
+ 1.0233485e+00
+ -1.8199287e-01
+ -2.9012838e-01
+ 8.1520391e-01
+ 3.2233233e-01
+ 1.3837468e-01
+ -4.5101250e-01
+ -1.5304060e-01
+ -8.7900213e-01
+ -1.9270694e-01
+ 1.9488557e-01
+ 1.5948781e+00
+ -4.4194329e-01
+ -4.2197083e-01
+ 2.2580915e-01
+ 1.4640549e-01
+ 9.6901688e-03
+ 1.0759872e-01
+ -2.0495315e+00
+ 1.3140299e+00
+ 6.1804025e-01
+ -4.1926490e-01
+ -6.5461894e-01
+ -6.9014672e-01
+ -1.6792687e+00
+ -2.4816894e-01
+ 1.1933549e+00
+ -1.5635730e+00
+ -1.7451892e+00
+ -2.4094730e-02
+ -1.3481895e+00
+ -2.8720563e-01
+ -7.5126504e-01
+ 4.3172515e-01
+ -4.3123900e-01
+ 1.2185488e-01
+ 4.2056701e-01
+ 4.0485047e-01
+ 4.8372997e-01
+ -2.9332601e-01
+ -2.4694777e+00
+ 2.5220914e-01
+ -9.2917262e-01
+ 5.3184551e-01
+ -1.3263118e+00
+ 1.0240248e+00
+ -9.0126457e-01
+ -6.5581629e-01
+ 3.9817142e-01
+ 2.3453116e+00
+ -9.4529466e-01
+ 1.7895027e+00
+ 4.9043622e-01
+ -8.9293645e-01
+ 7.6420604e-01
+ 2.2181690e-01
+ -4.6993832e-01
+ -4.3710564e-01
+ -2.0513971e+00
+ -1.6079263e-01
+ 5.3075011e-01
+ 2.6452400e-01
+ -3.3193621e-01
+ 1.0650741e+00
+ -3.9640199e-01
+ 6.1584665e-01
+ -1.1577666e+00
+ -1.9303874e-01
+ 2.8629647e-01
+ 7.2121907e-01
+ 3.8690493e-02
+ 3.4314478e-01
+ 1.2560980e+00
+ 1.2441861e+00
+ -5.6312299e-01
+ 2.3461755e-01
+ 1.5473411e+00
+ 1.6698147e-01
+ 3.1500560e-02
+ 1.4188402e+00
+ 8.9203619e-01
+ -6.5706503e-01
+ 3.7980005e-03
+ -1.1240728e+00
+ -2.4869596e-01
+ 8.9867012e-01
+ -1.2880944e+00
+ 1.0216136e+00
+ -3.8424968e-01
+ -6.9742625e-01
+ -7.3441893e-01
+ -2.1297391e+00
+ -9.4251717e-02
+ -1.1520457e+00
+ -1.6791688e+00
+ -4.9894417e-03
+ -5.8749717e-01
+ -3.9926894e-01
+ 1.2420923e-01
+ 1.6437822e-01
+ -3.5008591e-01
+ -2.8528617e-01
+ -3.9782645e-01
+ -2.5637975e-01
+ -9.3547408e-01
+ -1.3074692e+00
+ -1.1252888e+00
+ 5.2786271e-01
+ 5.4423048e-03
+ 8.9986362e-01
+ 1.1799861e+00
+ -7.6370442e-01
+ -1.0566742e+00
+ -1.8606377e+00
+ -2.1111027e-01
+ 6.9129810e-01
+ 1.4982046e+00
+ 7.6072898e-02
+ -4.6479094e-01
+ 2.2029349e-01
+ -8.2178856e-01
+ 9.0595625e-02
+ -8.0848465e-02
+ -1.2384605e+00
+ -3.3642744e-01
+ 4.6254179e-01
+ 1.4246669e+00
+ 5.5028230e-01
+ 1.9425181e+00
+ -6.9362140e-01
+ 1.8508831e-01
+ -1.6687079e-01
+ 1.4751592e-01
+ -1.0763054e+00
+ -1.0340995e-01
+ -3.1535882e-01
+ -3.7326206e-01
+ -3.6425193e-01
+ -2.5827332e-01
+ 8.8412499e-03
+ 1.2958869e+00
+ -3.7907416e-01
+ -5.3354847e-03
+ -1.6469414e+00
+ 1.8607167e-01
+ 8.0751522e-02
+ -6.4700396e-01
+ 3.7019685e-01
+ -2.8666870e-01
+ -2.7146531e-01
+ -1.1292652e+00
+ 8.7729765e-01
+ -9.2228184e-01
+ 1.0779998e-01
+ 1.1892588e-01
+ 7.1843907e-01
+ 7.3908025e-01
+ -1.3552589e+00
+ 1.2905214e+00
+ 5.7341962e-01
+ -9.4955470e-01
+ -9.8968909e-01
+ -4.0948748e-01
+ -5.3583565e-01
+ 9.6550134e-01
+ 1.0186432e+00
+ 2.1129655e-01
+ 1.0263613e+00
+ 1.0982435e-01
+ 1.3266116e+00
+ 1.2186230e+00
+ -1.2687537e+00
+ 8.3629057e-01
+ 3.6796697e-01
+ -2.1976248e-01
+ 8.4088774e-01
+ -4.5008654e-01
+ -5.6584619e-01
+ 5.6646597e-01
+ -1.0594414e-01
+ 9.5585753e-02
+ 1.1472685e+00
+ -4.9554686e-01
+ 2.4170911e-01
+ 7.6768155e-01
+ -1.1652674e+00
+ 1.0289058e-01
+ -1.6962865e-01
+ 4.5727371e-01
+ 2.6205772e-01
+ 2.9126713e-02
+ -8.2138724e-01
+ 9.2337388e-01
+ 1.4928808e+00
+ 4.9234112e-01
+ 8.4526780e-01
+ 4.8235103e-02
+ -3.9442719e-01
+ 1.8061324e-01
+ -1.5527073e+00
+ 1.6592576e+00
+ 9.3051905e-01
+ -1.8327798e+00
+ -1.3127958e+00
+ 5.7537984e-01
+ -1.6098793e-01
+ -3.0442573e-02
+ -1.6021356e+00
+ 1.2549807e-01
+ 1.8054493e-01
+ 6.3510917e-01
+ -1.4726965e+00
+ 1.0202820e+00
+ -1.0616060e+00
+ 6.0541309e-02
+ 1.5133236e+00
+ 1.3295089e+00
+ 3.8820932e-01
+ 1.0619229e+00
+ -1.1525521e+00
+ 8.2406717e-01
+ 9.1364021e-01
+ -1.0291627e+00
+ 1.3901028e-01
+ 2.8583564e+00
+ 9.6178784e-01
+ 1.2448852e+00
+ 6.0705133e-01
+ -1.1578290e+00
+ -1.8989076e+00
+ -8.0190963e-02
+ -1.0157720e+00
+ -1.4445356e+00
+ -1.3862910e-01
+ 4.3202061e-01
+ 2.2529935e+00
+ -4.5958057e-01
+ 9.0487100e-02
+ 2.6081350e+00
+ -1.0371692e+00
+ 2.5310417e-01
+ -2.6659886e-01
+ 1.3174838e+00
+ 1.1170149e-01
+ 1.2714367e+00
+ 4.1177924e-01
+ 7.5791646e-01
+ -1.6723351e+00
+ -7.3348547e-01
+ -1.3232145e+00
+ -1.5115646e+00
+ 9.1143911e-01
+ 1.0438762e+00
+ -1.3703896e-01
+ -9.9039523e-01
+ 1.0444031e+00
+ 1.8246589e+00
+ 7.0341242e-01
+ -8.2215211e-01
+ -4.4931308e-01
+ 7.0320969e-01
+ 6.2227935e-02
+ 1.0264366e+00
+ -9.8191465e-01
+ 1.5361659e+00
+ -2.8788051e-01
+ -7.1129985e-01
+ -1.1749555e+00
+ 8.5577262e-01
+ -3.3617631e-01
+ -2.7418845e-01
+ -3.7729515e-01
+ -1.0397324e+00
+ -7.0839796e-01
+ -1.1918859e-01
+ 2.1694238e+00
+ -3.7663075e-01
+ 7.9868609e-01
+ -9.4202784e-01
+ 8.7311301e-01
+ 8.9599816e-01
+ 7.1552154e-01
+ 3.7160226e-01
+ -1.8252009e+00
+ -1.4159643e-01
+ 6.0139000e-01
+ -1.8092895e+00
+ -4.1891260e-01
+ 1.1975469e+00
+ 3.3763286e-02
+ 1.3563095e+00
+ -3.3832843e-01
+ 1.2386743e+00
+ 1.5980147e-01
+ 6.7825699e-01
+ -1.4417330e+00
+ -1.4795289e+00
+ 4.8835108e-01
+ -3.5870944e-01
+ -1.8251808e+00
+ -4.5306607e-01
+ -3.5555029e-01
+ -8.5476969e-01
+ -1.2468225e+00
+ 2.2176544e-01
+ 3.3563225e-01
+ -8.0249019e-01
+ 1.3237444e+00
+ -4.8740863e-01
+ -1.9806977e+00
+ 2.2903185e-02
+ 8.1361849e-01
+ -1.8975251e+00
+ 1.8775138e+00
+ -2.9066814e-01
+ -8.2288157e-01
+ 2.8370516e-01
+ -5.3949709e-01
+ 9.4973689e-01
+ 1.3279037e+00
+ 4.3738494e-01
+ -5.5101438e-03
+ -1.7033288e+00
+ -7.6379308e-01
+ 2.1813535e-02
+ -1.9982183e+00
+ -1.0539349e+00
+ 1.4950441e-01
+ -1.2319057e+00
+ -7.7123123e-01
+ 3.0126021e-01
+ 1.8942899e-01
+ 1.1857229e-01
+ 2.4408932e+00
+ 6.7059619e-01
+ -6.7952998e-01
+ 4.8528665e-02
+ 1.1604839e+00
+ 1.8087226e+00
+ 6.8462116e-01
+ -7.7803696e-01
+ 6.8554978e-01
+ 5.6833280e-01
+ 5.2527440e-01
+ -5.3678583e-02
+ -2.1786703e-01
+ 9.6949175e-02
+ -5.9884471e-01
+ 5.9437877e-01
+ -5.0686483e-02
+ 1.3316581e+00
+ 7.4563957e-01
+ 2.2633599e-01
+ 1.3315034e+00
+ 8.6830894e-01
+ 3.4004775e-01
+ -9.1059797e-01
+ 1.3325892e+00
+ -1.2632909e-01
+ -3.5159914e-01
+ 3.0142907e-02
+ 1.0683220e+00
+ 1.1857478e-01
+ -1.1365895e+00
+ -2.8084879e-01
+ -8.0620989e-01
+ -2.7180114e-01
+ -1.2513240e+00
+ 3.5577179e-01
+ -3.4479236e-01
+ -8.8385719e-01
+ -5.8125360e-01
+ 1.2704408e+00
+ -1.1950753e+00
+ 4.8604620e-01
+ 1.6894879e-01
+ -1.1936222e+00
+ 4.0070989e-02
+ -9.2534381e-01
+ 8.3587926e-01
+ 5.5127780e-01
+ -1.1702060e-01
+ -9.8920588e-01
+ -5.1987408e-01
+ -4.9813307e-01
+ 3.4539861e-01
+ 1.2462365e+00
+ 7.5868363e-01
+ -4.4510858e-01
+ -1.8829860e+00
+ -7.3588921e-01
+ 3.5266763e-01
+ -1.0611239e+00
+ -5.1637115e-03
+ 1.4726198e+00
+ 1.6254662e+00
+ 1.7581754e-01
+ 1.7698051e+00
+ 5.6982624e-01
+ 7.0893706e-01
+ 5.5655989e-01
+ -4.9304250e-01
+ 1.9601778e-01
+ 5.1774147e-01
+ 1.1855278e+00
+ -2.5713507e+00
+ -8.5399060e-01
+ 1.3866599e+00
+ 6.5192622e-01
+ 2.1780597e-01
+ 5.2258586e-01
+ 1.1832797e+00
+ -9.4528630e-01
+ 4.1103331e-01
+ -1.8809456e+00
+ 1.3208515e-01
+ 9.6166196e-02
+ 1.2599841e+00
+ -7.3473753e-01
+ 5.4542850e-01
+ 9.5580720e-01
+ -7.0670643e-01
+ 3.1162774e-01
+ 4.8762082e-02
+ -1.7382360e-01
+ -4.9825532e-01
+ -6.6230279e-01
+ -1.1679659e+00
+ -4.6331232e-01
+ -9.3003836e-01
+ -4.6155781e-02
+ 1.5650353e+00
+ -2.9626971e-01
+ 9.7163894e-01
+ 4.8797129e-01
+ 1.3504959e+00
+ -6.4775887e-03
+ -9.9419910e-02
+ -1.5128722e-01
+ -1.2174697e+00
+ 2.0324967e+00
+ -1.4269880e+00
+ -1.2398838e-01
+ -3.6647194e-01
+ 7.3641924e-02
+ -1.4311642e+00
+ 7.7855450e-01
+ -4.3189544e-02
+ -2.2896738e-01
+ 1.4217551e+00
+ 6.7468187e-01
+ 1.7187916e+00
+ 1.3144733e+00
+ -5.4716441e-01
+ -2.5585208e-01
+ 1.2471957e+00
+ -4.1713226e-01
+ -7.5175165e-02
+ -4.4896796e-01
+ 4.1733428e-01
+ 1.0752628e+00
+ -6.0892510e-01
+ -5.0186038e-01
+ 9.5373153e-01
+ 1.7102019e+00
+ 9.5240855e-01
+ -1.3728618e+00
+ -6.8408630e-02
+ 3.1451428e-01
+ 7.2836393e-02
+ -5.2894342e-01
+ -1.7558093e+00
+ 1.2069411e+00
+ 1.0615736e+00
+ 7.2328394e-01
+ -3.7779114e-01
+ -1.3145056e+00
+ 5.8353902e-01
+ -8.6127034e-01
+ -2.3974282e-01
+ 1.2496903e+00
+ 9.6153986e-01
+ -3.2911743e-01
+ 3.6623112e-01
+ -6.6281293e-01
+ -7.8420270e-01
+ -1.9810085e-01
+ -1.2869598e+00
+ 1.8883417e+00
+ 5.0386084e-01
+ -7.6236389e-01
+ -6.9923591e-03
+ 9.6047324e-01
+ -1.7376957e-01
+ -2.2985495e-01
+ 7.7779132e-01
+ 1.4765336e+00
+ 8.6875723e-01
+ 1.3579218e-01
+ 5.3053016e-01
+ 2.3219872e-02
+ -4.4828307e-01
+ -6.5846129e-01
+ -7.8518595e-01
+ -8.4702881e-01
+ 1.0874763e-02
+ -1.5884046e+00
+ -1.2803498e-01
+ -1.5132236e+00
+ -2.6838672e-01
+ -9.2026558e-01
+ 1.4582828e-01
+ 9.7314835e-01
+ -1.6799571e+00
+ -7.4864390e-01
+ -7.4900348e-01
+ -4.6070195e-01
+ -1.9382338e-01
+ -9.2903128e-01
+ -2.5627933e-01
+ 9.9326162e-01
+ 1.4403929e-01
+ -4.9906004e-01
+ 3.0542923e-01
+ 5.4390090e-01
+ -1.7766304e+00
+ -1.7484827e-01
+ 1.9867120e+00
+ 5.7357329e-02
+ 1.7478475e-01
+ 1.5762910e+00
+ -1.2049265e+00
+ 8.5305907e-01
+ -3.0731860e-01
+ 2.4801396e-01
+ 6.0265910e-01
+ -2.0771427e-01
+ -6.3600644e-01
+ 6.4201707e-01
+ -1.2306127e-01
+ 1.0869433e-01
+ 5.9646009e-01
+ 9.0129817e-01
+ -2.4822662e-01
+ -9.7325591e-01
+ 4.2613172e-01
+ 1.3105813e+00
+ -6.1998985e-01
+ 4.9943863e-01
+ 1.4143037e+00
+ -7.2818744e-02
+ 3.3056439e-01
+ -1.1028156e-01
+ -9.2475106e-01
+ -8.0088039e-01
+ -1.2307399e+00
+ -1.6811737e-01
+ 1.8028701e+00
+ 2.3371175e-01
+ 1.6280675e+00
+ -8.9801125e-01
+ -4.9948250e-01
+ 1.7343030e+00
+ -1.3589580e+00
+ -1.3037716e+00
+ 1.9966175e+00
+ 9.8456284e-01
+ 2.3520878e-01
+ 6.3658420e-02
+ 1.1155733e+00
+ 6.5006854e-01
+ 7.5206429e-01
+ 1.4361856e+00
+ 1.2858489e+00
+ 2.3960416e-01
+ -1.3493414e+00
+ 1.3703175e+00
+ -1.0015286e+00
+ -2.4932471e+00
+ 3.8021656e-01
+ 1.4898623e-01
+ -5.8844721e-01
+ 1.4917509e-01
+ 1.3852518e+00
+ 3.4487622e-01
+ -2.8751345e-01
+ 1.0469652e-01
+ -1.6589844e+00
+ -1.4889311e+00
+ -1.0691735e+00
+ -1.1442886e+00
+ 2.2074813e+00
+ 5.7093448e-01
+ 9.8821920e-01
+ -2.8929911e-01
+ -7.3184188e-01
+ 7.9706644e-01
+ 4.0944296e-01
+ -4.2417244e-01
+ -1.7927278e+00
+ 2.0884283e+00
+ 2.0203867e+00
+ -1.0703567e+00
+ 1.2478443e+00
+ -2.9472936e-01
+ -6.1934888e-01
+ -1.0383307e+00
+ -4.5739415e-01
+ 1.6630703e-01
+ -1.4348308e+00
+ 1.1473375e-01
+ -1.5363629e+00
+ -1.7160160e-01
+ -9.5714902e-01
+ 1.2551161e+00
+ -7.0254596e-01
+ -2.2528805e-01
+ 4.2750230e-01
+ -2.0768479e-01
+ -5.7730195e-01
+ -1.7658902e+00
+ -3.9407710e-01
+ 1.1410009e+00
+ 4.1882215e-01
+ -1.1593829e+00
+ 9.5571984e-01
+ -1.3825784e-01
+ 7.3980502e-01
+ 1.5174833e-01
+ -2.3199689e+00
+ -1.0663588e+00
+ 1.5968882e+00
+ -1.9011955e-01
+ -6.1176971e-01
+ 2.7247333e-01
+ 5.7434300e-01
+ -7.2697902e-01
+ 3.0598786e-01
+ -1.2674482e+00
+ -6.8335225e-01
+ -6.2558738e-01
+ 1.8857792e-01
+ 1.9165936e+00
+ 5.9647362e-01
+ -9.1136936e-01
+ -1.6784928e+00
+ -7.8371517e-01
+ 1.4939468e+00
+ 5.2154525e-01
+ -1.0873966e+00
+ 1.3327172e+00
+ -8.4568354e-01
+ -3.6571818e-02
+ -7.0177505e-01
+ -1.2914302e-02
+ -6.8554029e-01
+ -7.4234387e-01
+ -7.4256993e-01
+ 2.0343390e+00
+ -2.0059021e+00
+ 1.0231072e+00
+ -4.6326586e-01
+ 5.5115219e-01
+ 1.0344137e+00
+ -1.4667991e+00
+ 7.4057031e-01
+ -2.5472502e-01
+ -1.0305989e+00
+ -3.1904830e-02
+ -9.2055716e-02
+ 3.0797290e-01
+ 4.0364790e-01
+ -3.0541731e-01
+ 7.4837935e-01
+ 3.0778427e-01
+ 1.2741223e+00
+ 1.4238348e+00
+ -4.9056328e-01
+ -2.7659823e-01
+ 1.0701254e+00
+ 2.0272501e+00
+ 1.2974194e+00
+ -9.2371956e-04
+ 2.1165710e-01
+ 1.6094540e+00
+ -1.1225689e+00
+ -2.4594133e-01
+ -7.9185048e-01
+ 1.3970665e+00
+ -1.2504266e+00
+ -5.2120291e-01
+ 6.0455933e-02
+ 3.3018635e-01
+ -3.9698115e-01
+ -1.0162790e+00
+ -3.3120143e-01
+ -3.2577091e-01
+ -1.1851456e+00
+ -1.3382194e+00
+ 2.0390758e-01
+ 6.9457582e-01
+ 5.3373611e-01
+ -1.3663268e-04
+ -6.2645993e-01
+ -1.6588052e+00
+ -1.0092288e+00
+ -6.2124861e-01
+ -2.9753171e-01
+ 2.4311271e-01
+ 2.2073315e-01
+ 8.1847573e-01
+ 3.4045281e-01
+ -1.4010568e+00
+ 7.7680784e-01
+ -1.0839538e+00
+ -4.8276399e-01
+ -7.4930423e-01
+ 6.1808078e-01
+ -1.7789091e+00
+ 5.7517593e-01
+ -7.6473245e-01
+ -8.8943671e-01
+ -1.3675010e+00
+ -8.6961586e-01
+ -1.2722492e+00
+ -9.4876522e-01
+ 1.1316876e+00
+ -2.3552102e-01
+ -1.1074407e+00
+ 1.1353818e+00
+ 5.6084113e-01
+ 3.3533840e-01
+ -5.9188880e-01
+ 6.2645459e-01
+ -6.9294023e-01
+ -8.3188345e-01
+ -6.5207892e-01
+ -5.0009740e-01
+ 4.8253822e-01
+ 8.6026162e-01
+ -2.0416543e+00
+ -5.0330522e-01
+ -1.4859717e+00
+ 1.1639076e+00
+ 1.5666668e+00
+ -6.8921558e-01
+ 8.3134110e-01
+ 5.1721343e-01
+ 3.5481183e-01
+ 8.8905412e-01
+ 7.2024398e-01
+ 2.0601084e-01
+ -7.6012169e-01
+ 1.4884590e+00
+ -1.0251589e+00
+ -1.0616451e-01
+ -3.6329441e-01
+ 9.9012451e-01
+ 1.1781545e+00
+ 1.2876581e+00
+ 1.4026089e+00
+ -1.4227702e+00
+ 3.6052872e-01
+ 8.7903079e-03
+ -6.3129620e-01
+ 1.8193749e-01
+ -3.1566452e-01
+ -1.2398143e+00
+ -8.0650141e-01
+ -9.6658639e-01
+ -9.0059644e-01
+ -1.3427892e-01
+ 1.9686702e-01
+ -9.8417643e-01
+ -1.5539602e+00
+ -1.0568448e+00
+ 6.0531498e-01
+ 8.6152331e-01
+ -1.4255271e+00
+ 3.4789773e-01
+ -4.5615869e-01
+ -9.3591823e-01
+ 2.7957365e-01
+ -1.3940504e+00
+ -1.3818373e+00
+ -3.8689556e-01
+ -2.3249229e+00
+ -8.1692841e-01
+ -1.3469695e+00
+ -1.7898982e+00
+ -8.9313766e-01
+ 3.3785925e-02
+ -3.2267264e-01
+ 2.1905039e+00
+ -1.7976382e-01
+ -8.9705399e-01
+ 7.0041868e-01
+ 6.1082404e-01
+ -9.5219782e-01
+ -1.2563299e-01
+ -1.1838291e+00
+ -3.8089692e-01
+ -3.3015042e-01
+ 2.0960550e+00
+ 6.7051922e-01
+ -1.1900344e+00
+ -1.4534120e+00
+ -7.2292057e-01
+ 3.3604612e-01
+ 1.8658126e+00
+ -6.2200272e-01
+ -1.8036931e-01
+ -1.5947138e+00
+ 1.2009401e+00
+ 5.8540509e-01
+ 8.7505269e-01
+ 7.2894316e-01
+ -2.0910374e+00
+ 1.1185154e+00
+ -6.9783915e-02
+ -6.1889200e-01
+ -4.6385940e-01
+ 1.0848388e+00
+ 1.9004864e+00
+ 1.0134970e+00
+ 1.8090806e+00
+ -5.4576448e-01
+ -1.5293068e+00
+ -3.9498126e-01
+ -1.0835558e+00
+ -1.1118752e+00
+ -3.7991149e-01
+ -1.5024958e+00
+ -9.0922568e-01
+ -1.1387124e-01
+ 1.0906961e-01
+ -7.9517377e-01
+ -2.6886529e-01
+ -3.2803042e-02
+ -3.6175121e-01
+ 6.9917040e-01
+ -9.0927569e-01
+ 4.5295653e-01
+ 1.5013566e+00
+ 1.6690615e+00
+ -5.2491950e-01
+ 5.0016281e-01
+ -9.8000999e-01
+ 4.6844188e-01
+ -1.6721176e+00
+ -1.7252898e+00
+ -9.2075076e-01
+ -1.8349813e+00
+ 5.0020646e-01
+ 7.0653860e-02
+ 9.8812180e-01
+ 3.0715881e-01
+ 6.5027693e-01
+ -9.8695307e-01
+ 8.6739158e-01
+ -2.7670913e-02
+ -6.5800707e-01
+ 1.1382169e+00
+ 7.4583089e-01
+ -1.8757928e-01
+ 2.7660615e-01
+ -3.7608371e-01
+ -8.4692727e-01
+ 2.0943756e-01
+ -2.7138133e-01
+ -3.8993323e-01
+ 3.6217492e-01
+ -4.7701897e-01
+ -3.2699346e-01
+ 1.6667086e+00
+ -2.2719241e+00
+ -7.6602787e-01
+ -1.2700063e+00
+ 2.0368601e+00
+ -2.5658153e-01
+ 1.6376547e+00
+ 1.7852675e-01
+ 6.1726511e-02
+ -1.1774598e+00
+ -1.0733450e+00
+ -7.0850706e-02
+ -6.2323460e-01
+ 2.0674880e+00
+ -1.1425804e+00
+ 1.3913383e+00
+ 4.2484385e-01
+ -3.4078180e-01
+ -1.0343972e+00
+ -7.4786423e-01
+ -6.7843848e-01
+ -1.3500676e+00
+ 1.5247154e+00
+ -8.1449036e-01
+ -1.2172286e+00
+ 1.6934063e-02
+ 2.0070410e-02
+ -1.3833563e+00
+ -4.7451122e-01
+ 2.4328553e-01
+ 1.2867110e+00
+ -3.5105826e-01
+ 9.2196073e-01
+ -1.6187853e+00
+ -4.0626177e-01
+ 1.7199500e-01
+ -2.4183513e+00
+ 2.2456949e-01
+ -6.2362702e-01
+ -1.1116582e+00
+ 1.1752763e+00
+ 2.9437930e-01
+ -7.5326286e-01
+ -3.6824065e-01
+ -1.4413532e+00
+ -1.0530018e+00
+ 1.3656061e+00
+ 2.0058101e+00
+ 7.5906390e-01
+ -7.3699983e-01
+ 3.4343164e-01
+ -5.4261545e-01
+ -7.0488568e-01
+ 9.8831032e-01
+ 1.9934569e+00
+ 2.7560834e-01
+ 9.8280750e-01
+ -6.9619097e-01
+ -2.6797389e-01
+ -3.3880892e-01
+ 1.3263599e+00
+ -4.4756764e-01
+ 2.3474551e-02
+ 6.0440290e-01
+ -4.2998328e-01
+ -9.2807579e-01
+ -2.2063489e-01
+ -7.1745435e-01
+ -5.4361462e-01
+ 8.7436487e-01
+ -1.1147934e-01
+ 8.2124116e-01
+ -1.3621336e+00
+ -9.7424374e-02
+ -1.2431697e+00
+ -1.3219483e-02
+ -1.1740634e+00
+ 3.2166819e-01
+ 8.3026123e-01
+ -4.2721230e-01
+ 1.6484454e-01
+ 8.5747769e-01
+ 6.5507828e-01
+ 4.6491733e-02
+ -1.6557618e+00
+ -4.4869763e-01
+ -1.9910939e+00
+ -3.7507707e-01
+ 8.8169728e-01
+ 4.7369777e-01
+ 2.4266358e+00
+ -1.9290231e-01
+ 7.0747586e-01
+ 1.0871843e-01
+ -9.3745210e-01
+ 3.1253014e-02
+ -5.7013075e-01
+ -9.2208876e-01
+ -6.0285015e-01
+ -2.0052478e-01
+ 2.6435586e+00
+ -5.2887290e-01
+ -6.9176170e-01
+ -7.2368303e-01
+ -1.3245745e-03
+ 1.1476807e+00
+ -1.1609141e+00
+ -2.4546418e+00
+ -8.5614006e-02
+ 9.9640598e-01
+ -2.4145123e+00
+ 7.7076271e-01
+ 1.2506601e+00
+ 1.7424527e-01
+ -1.9596647e+00
+ 2.0022970e-02
+ 5.6429277e-01
+ 8.3191546e-01
+ 7.0898750e-01
+ 7.3330896e-01
+ 1.1254094e+00
+ -1.1983760e+00
+ 1.0344605e+00
+ -1.7570608e+00
+ 5.3415492e-02
+ 3.2688450e-01
+ 1.0957041e+00
+ -9.7832853e-01
+ 1.8191031e-01
+ 1.3351982e+00
+ 3.9370579e-01
+ 7.5556825e-01
+ -3.1743436e-02
+ -5.9536474e-01
+ 1.0070843e+00
+ 6.0563831e-01
+ 1.0884122e+00
+ -4.5373999e-01
+ 5.4717550e-02
+ 1.0458391e+00
+ -1.0649402e+00
+ 5.6607435e-01
+ 4.7366424e-01
+ 1.5525874e+00
+ 1.9681732e+00
+ 1.3092373e+00
+ -1.1254486e+00
+ -1.6364700e+00
+ -1.3417701e+00
+ 7.2468786e-01
+ -5.2971202e-01
+ -1.0719234e+00
+ -1.8815058e-01
+ -1.0432608e-01
+ -1.3616970e+00
+ 2.4953706e-02
+ -1.0898950e+00
+ -8.3546249e-01
+ 9.0289048e-01
+ -5.3522683e-01
+ -6.9854643e-01
+ 1.4999838e+00
+ 1.0276789e+00
+ 4.3486120e-01
+ 3.1186582e-01
+ -9.0756870e-01
+ -6.8133752e-01
+ 7.8528865e-01
+ 6.0228171e-02
+ -5.4112166e-01
+ 2.0707242e+00
+ -5.8960893e-01
+ -6.6816231e-01
+ -4.9466829e-01
+ -2.3860530e+00
+ 5.2319834e-01
+ 1.0573061e+00
+ 5.3695772e-01
+ -1.2016841e+00
+ -1.2441854e+00
+ 8.7198870e-01
+ -6.3854525e-01
+ 1.1542168e+00
+ -1.1341624e+00
+ 5.3668184e-01
+ -9.6348276e-01
+ -5.3445281e-01
+ -6.7754027e-01
+ 1.2523491e+00
+ 8.0070737e-01
+ 1.9404171e-01
+ 1.2875770e+00
+ -9.5794433e-01
+ -1.7154190e+00
+ 4.3612434e-01
+ 6.0673329e-02
+ 6.8095499e-02
+ -9.2561057e-01
+ 7.0795328e-01
+ 4.9879906e-01
+ -1.3223187e+00
+ -4.4170044e-02
+ 1.2088458e+00
+ -9.2549057e-02
+ 2.0257244e+00
+ 7.1907735e-02
+ -2.4647081e-01
+ -1.2816853e+00
+ 2.0759712e-02
+ 5.9738145e-01
+ 1.8868348e+00
+ -8.1035930e-01
+ -2.1022176e-01
+ 7.7485862e-02
+ 3.3537999e-01
+ 4.3010455e-01
+ 1.4799474e+00
+ 7.1090851e-01
+ -5.5984602e-01
+ 2.4032091e+00
+ -5.5070452e-01
+ 4.2464246e-01
+ 1.4922798e+00
+ 1.5600052e+00
+ -1.0088790e+00
+ -1.7180024e-01
+ -7.7398530e-01
+ -1.3938563e-01
+ -1.5501267e-01
+ -1.2727656e+00
+ 3.7900010e-01
+ 4.2020594e-01
+ -1.9461213e-01
+ -4.4588538e-01
+ -3.3821763e-01
+ -2.2164967e+00
+ -1.1735451e+00
+ -9.1076709e-01
+ 1.5156006e-01
+ 2.2306490e-01
+ -4.1955434e-01
+ 5.8404549e-01
+ 2.5233860e-01
+ 8.5367971e-01
+ -3.9610206e-02
+ 9.4451447e-02
+ 6.2095057e-01
+ 3.0636778e-02
+ 1.0698985e+00
+ -6.2200362e-01
+ 4.5927408e-01
+ -1.5004839e-01
+ 4.3459452e-01
+ -8.3596091e-01
+ 7.9826994e-01
+ -2.4072275e+00
+ -6.9242569e-01
+ 2.1642675e+00
+ 1.6554467e+00
+ 6.8959864e-02
+ -1.0090233e+00
+ -5.8307534e-01
+ -6.8382124e-01
+ 5.6091707e-01
+ 1.6451574e+00
+ -1.3551299e-01
+ -5.2942306e-02
+ -1.5902534e-01
+ 1.2491739e+00
+ -2.7960329e-01
+ 3.1556620e-01
+ -1.0031601e+00
+ 7.3606756e-01
+ -1.2446669e+00
+ 4.5705647e-01
+ -9.3726182e-01
+ 3.1216772e+00
+ 2.4965592e-01
+ -8.1186996e-01
+ -2.0054637e-01
+ 1.2755168e+00
+ 1.5694246e-02
+ -1.5619598e+00
+ 8.0512718e-01
+ -1.9861234e-01
+ -9.4142371e-01
+ 1.4032347e+00
+ 1.9681705e-01
+ -1.0661892e+00
+ 1.6529156e+00
+ 1.1105660e+00
+ -1.3145895e+00
+ 2.2809749e-01
+ 7.8106469e-01
+ -7.5942973e-01
+ 4.0616852e-01
+ -1.2089475e-01
+ -2.1325355e-01
+ -1.0369866e+00
+ 1.3459321e+00
+ 4.8086153e-01
+ -4.0482152e-02
+ 2.0034840e-01
+ 1.4204342e+00
+ -2.2953195e-01
+ -6.9030570e-01
+ 4.0252445e-01
+ 9.0570140e-01
+ -3.8412901e-01
+ -1.2835386e+00
+ -1.7138999e+00
+ -1.1321760e+00
+ 1.5351322e+00
+ 9.8974914e-01
+ -1.1704476e+00
+ -1.8841191e-01
+ 3.1064420e-01
+ -6.6145167e-01
+ 3.3039482e-01
+ -7.1695726e-01
+ -1.1121854e+00
+ -9.6000907e-01
+ 6.1209357e-01
+ -4.3192613e-01
+ -3.8387041e-01
+ -3.7188233e-02
+ -9.7571363e-01
+ -5.3890900e-01
+ 6.5584056e-01
+ 9.9357557e-01
+ -3.0286091e-02
+ 2.2978972e-01
+ -7.7457636e-01
+ -4.8115938e-01
+ -4.0645304e-01
+ 5.2372645e-01
+ -2.4769707e-01
+ 1.1456257e+00
+ -1.0216159e+00
+ 3.0226996e-01
+ -6.4605476e-01
+ 2.6422853e-02
+ 1.2095867e-01
+ -2.1458647e+00
+ -2.0796431e-01
+ -6.9304486e-01
+ 1.9678392e+00
+ 1.0463621e+00
+ -1.6533795e-01
+ -5.7982882e-01
+ -2.1719160e-01
+ 2.4010067e-01
+ 1.0212226e+00
+ -9.0247873e-02
+ 8.3927005e-01
+ -2.9735274e-01
+ 1.1550213e+00
+ -4.4525596e-01
+ -1.1093738e+00
+ 1.1407570e+00
+ 9.3306662e-01
+ -5.2064815e-01
+ -5.8971253e-01
+ 1.3813775e+00
+ -3.0433343e-01
+ 1.9542518e-01
+ 1.1588249e+00
+ 3.2975841e-02
+ -9.5516359e-01
+ -2.7310560e-01
+ 1.1577799e+00
+ -7.0378523e-01
+ 1.1411641e+00
+ -1.5812815e-01
+ -9.6846957e-01
+ -8.9269859e-01
+ 9.0945804e-01
+ 3.3234123e-01
+ 2.7075540e-01
+ -1.4823312e+00
+ 1.1943985e+00
+ -1.3115854e-01
+ 4.1605052e-01
+ 1.3424734e+00
+ -1.1638606e+00
+ 4.2855994e-01
+ -1.3293134e+00
+ -1.9229195e+00
+ 1.2900195e+00
+ 7.6564567e-02
+ 4.3112886e-01
+ -1.0051639e+00
+ 3.5399899e-01
+ -7.8850670e-01
+ 4.8381810e-01
+ -8.6369566e-01
+ 3.7490767e-01
+ 2.7223501e+00
+ 8.3216397e-01
+ -4.6904799e-01
+ -2.3506805e-01
+ -1.5171919e+00
+ 1.0934207e-01
+ 1.0577449e+00
+ 1.1568345e+00
+ -6.3554725e-01
+ 3.6758530e-01
+ 3.0638658e-01
+ 5.6086062e-02
+ -7.0547399e-01
+ -7.2406676e-01
+ 4.3539370e-03
+ -4.1873778e-01
+ -4.2779059e-01
+ 5.3201739e-01
+ 7.1440869e-01
+ -5.5571407e-02
+ 3.1058261e-01
+ 1.2481803e+00
+ -5.8423584e-01
+ 3.7062425e-01
+ 5.0082839e-01
+ -2.4446293e-01
+ -2.3526083e-01
+ -1.9595846e-02
+ -7.5554525e-01
+ 1.4726423e+00
+ 5.1467620e-03
+ -7.6439522e-01
+ -3.2285746e-01
+ 1.4577943e+00
+ -1.7848833e+00
+ 5.2172452e-01
+ 8.5151181e-01
+ 7.4530407e-01
+ -1.3727669e+00
+ 1.7920151e+00
+ -3.0494347e-01
+ 2.8986921e-01
+ -6.1920210e-01
+ -4.8661666e-02
+ -1.3717560e+00
+ -3.6528725e-01
+ -8.0359205e-01
+ -2.7330135e-01
+ 3.4009318e-01
+ 6.0079896e-02
+ 9.5157929e-01
+ 1.0733519e-01
+ -2.7268657e+00
+ -4.9234824e-01
+ 1.1178597e+00
+ 1.0497533e+00
+ 1.9844143e+00
+ -7.4187235e-01
+ 1.3397665e+00
+ 1.7058233e-01
+ 7.0696862e-01
+ 3.1671778e-01
+ 4.3206750e-01
+ 2.2689744e-01
+ -4.3988843e-01
+ -2.3777821e+00
+ -1.2390864e+00
+ -1.5459484e+00
+ -4.7894162e-01
+ -2.4638689e+00
+ 3.4914308e-01
+ 9.7130022e-01
+ -1.4914094e+00
+ -1.2022198e-01
+ -5.0987646e-01
+ -4.7444092e-01
+ 8.0087827e-01
+ -2.2533462e-01
+ -5.7256852e-01
+ -1.1011937e+00
+ 1.0493369e-01
+ 2.9299227e-01
+ 1.0629206e-01
+ 3.5320178e-01
+ 7.3230410e-01
+ 1.0279890e+00
+ -5.8927386e-01
+ 8.7842939e-02
+ 4.5694145e-01
+ 5.3185677e-02
+ 3.4309992e-01
+ -1.0225447e+00
+ 6.2415099e-01
+ -4.8415682e-01
+ -1.7939031e-01
+ 1.9481646e+00
+ -8.2283036e-02
+ 3.0450473e-01
+ -2.4732981e+00
+ 8.8765629e-01
+ 1.6040736e+00
+ -1.1557963e+00
+ -2.2355829e-01
+ -7.4201424e-01
+ -2.0063736e+00
+ -1.3583546e+00
+ -4.4083357e-02
+ 2.1040523e-02
+ 6.9108153e-01
+ -3.4240471e-01
+ -3.3312092e-01
+ 1.5546726e+00
+ -7.2944541e-01
+ -8.0834383e-01
+ 5.0562798e-01
+ 5.5875644e-01
+ -3.3789405e-02
+ 1.8101760e-02
+ -6.8140499e-01
+ 1.2242071e+00
+ 2.0756135e-01
+ 7.5266620e-01
+ 1.1216543e+00
+ 7.0992291e-01
+ -2.0728639e+00
+ 1.0784942e+00
+ -5.3862154e-01
+ 9.7972638e-02
+ 1.7032126e-01
+ -1.7119631e+00
+ 1.5188973e+00
+ 3.0934042e-01
+ 6.9909026e-01
+ -1.3953464e-01
+ 5.2184106e-01
+ -3.3249834e-02
+ -2.7115477e-01
+ 1.0638890e+00
+ -6.5588293e-02
+ -1.0929661e+00
+ 5.6818858e-01
+ -7.7201946e-01
+ -6.1474184e-01
+ -5.5048488e-01
+ 1.1157862e+00
+ 1.4128467e-01
+ -1.1100723e+00
+ -3.2547516e-01
+ 5.9381289e-01
+ -1.7859902e-01
+ -4.8629096e-01
+ -2.1426292e+00
+ -1.1954118e+00
+ -1.3346884e-02
+ -1.8087171e+00
+ -4.7846927e-01
+ -5.1356791e-01
+ -6.8570453e-01
+ -9.4152433e-01
+ 8.4331472e-01
+ -1.6925777e+00
+ 7.2567873e-01
+ -2.9749253e-01
+ -2.7149749e-01
+ 6.3104172e-01
+ 4.9178176e-01
+ 3.1224403e+00
+ -1.3988021e+00
+ 7.8866234e-01
+ 1.0953744e+00
+ 6.8404263e-01
+ 2.0654464e-01
+ 6.2315383e-01
+ -2.7818408e+00
+ 7.9120024e-01
+ 3.7521367e-01
+ 9.3806488e-01
+ -3.3371491e-01
+ 6.3803936e-02
+ -8.0436638e-02
+ -1.4728266e+00
+ 1.6244372e+00
+ -2.0498254e+00
+ 4.3364782e-02
+ -7.4901509e-01
+ 7.4113533e-01
+ 7.4343009e-02
+ -2.1718637e+00
+ 1.3769233e+00
+ -7.5403625e-01
+ -1.4435982e+00
+ -7.7272788e-01
+ 6.0410785e-01
+ -3.5282337e-01
+ -2.7857484e+00
+ 1.4463973e+00
+ -3.3707800e-01
+ 9.9101411e-01
+ 1.0841775e+00
+ 4.6143703e-01
+ 9.6455704e-02
+ 1.4293312e+00
+ -1.4351278e+00
+ -6.5771162e-01
+ -1.2864638e+00
+ -4.7150154e-01
+ -1.4849677e+00
+ 1.3222677e+00
+ 1.7077852e-01
+ 5.3653150e-01
+ 6.0133746e-01
+ 1.6857710e+00
+ -6.5851419e-01
+ -1.3889916e+00
+ -1.1166049e+00
+ 5.4899617e-01
+ 1.7292770e-01
+ 2.7965540e-01
+ 2.2348431e-01
+ -2.9774281e-01
+ -1.7204687e+00
+ 1.9875484e-01
+ 1.6043066e+00
+ -1.1845688e+00
+ 1.0107212e+00
+ 1.3773946e+00
+ -8.4084801e-01
+ -2.6610482e-02
+ 2.6222520e-01
+ 1.0994831e+00
+ 1.0953423e+00
+ 1.2853378e-01
+ 1.3605963e-01
+ -5.4296996e-01
+ 1.8983353e-01
+ -1.7681442e+00
+ 5.2607630e-01
+ 2.3039229e+00
+ 1.1259601e+00
+ -1.4910957e+00
+ 1.2993640e+00
+ -1.6641348e+00
+ 1.2681637e+00
+ 5.5617663e-02
+ -1.4916498e+00
+ -1.0986695e+00
+ 2.0005617e-01
+ 9.6109125e-01
+ -7.7275615e-01
+ -1.1263830e+00
+ -6.6665417e-01
+ 7.3842313e-01
+ 8.9438115e-01
+ 7.8210339e-02
+ 1.4508188e+00
+ -1.1965580e-01
+ 6.2590968e-01
+ -9.4637070e-01
+ 2.8119398e-01
+ 2.3434323e-01
+ -4.5680703e-01
+ -3.5958167e-01
+ 6.6130192e-01
+ 9.0556775e-01
+ -1.1704516e+00
+ -5.3916881e-01
+ 1.3764591e+00
+ 6.0575093e-01
+ 2.0283693e+00
+ -3.5222734e-01
+ -1.7656045e-01
+ -2.0422814e-01
+ -1.5902297e-01
+ 1.1525175e+00
+ 1.0359512e+00
+ 4.0904203e+00
+ 1.3457453e+00
+ -2.1185424e+00
+ -6.6413549e-01
+ 2.7039710e-01
+ -7.0795706e-01
+ -3.2729906e-01
+ -9.0453803e-02
+ -4.4546129e-01
+ -1.8116238e+00
+ 2.3864463e-02
+ -9.8345917e-01
+ 3.0076711e-01
+ -2.5101284e+00
+ 1.4375505e-01
+ -1.7418991e-01
+ 3.6401234e-01
+ -5.3292082e-01
+ -1.0924855e+00
+ -1.6342597e-01
+ 2.2720305e-01
+ -8.9330937e-01
+ -1.0949723e+00
+ -4.4169915e-01
+ -1.7033544e+00
+ -1.8291962e+00
+ -1.8859015e+00
+ 3.2048264e-01
+ 1.7284961e-01
+ 5.9127425e-02
+ 3.2289306e+00
+ 4.5062077e-01
+ 6.3581981e-01
+ -1.9033419e-01
+ -1.6228797e+00
+ 1.3093253e+00
+ 1.1650146e+00
+ 4.5199627e-01
+ -2.0372428e+00
+ 6.8679350e-01
+ 3.3650361e-01
+ 2.1329776e+00
+ 6.3398591e-02
+ -6.9168853e-01
+ -9.3831922e-01
+ -3.0390177e-01
+ -4.3784837e-01
+ 1.0777277e+00
+ 2.2628248e+00
+ -1.2263183e+00
+ -1.9007169e-01
+ -2.1288940e-01
+ -1.7870134e+00
+ 1.7541686e-01
+ -5.0449694e-01
+ -6.1123409e-01
+ 1.1818566e+00
+ 6.5946807e-01
+ -7.2721940e-01
+ 8.6758207e-01
+ -3.6959051e-01
+ -6.1920736e-01
+ -1.5689259e-02
+ -1.0151620e+00
+ -4.0515263e-01
+ -5.1676991e-01
+ -2.8293142e-01
+ -1.2085865e-01
+ 1.9737024e+00
+ 7.7157227e-01
+ -4.9098639e-01
+ 9.4105277e-01
+ 8.2352026e-01
+ 9.5370186e-01
+ 4.9566291e-02
+ -1.3430925e+00
+ 6.2056056e-01
+ 3.6449433e-01
+ -9.9715689e-01
+ 1.8722434e+00
+ -3.4648416e-01
+ 8.3477035e-01
+ -1.0161436e+00
+ 1.4072234e+00
+ -2.6976555e-01
+ -5.3086506e-01
+ 8.5077354e-01
+ -2.3421746e-01
+ 1.7028833e+00
+ 1.8352945e+00
+ 1.2132514e-01
+ 2.4801638e+00
+ -5.9771040e-01
+ -8.3715620e-01
+ -1.2761829e+00
+ -1.2409675e+00
+ 4.2165515e-01
+ -4.1228468e-01
+ 7.6076755e-01
+ 3.0572657e-01
+ -6.3256920e-01
+ -4.4509821e-01
+ -8.5646041e-01
+ 2.0987476e-01
+ -2.3887307e-01
+ 8.2728647e-01
+ -3.0284665e+00
+ 1.8293285e+00
+ -1.1240945e+00
+ 8.2835008e-01
+ -1.8572865e+00
+ 6.6030719e-01
+ -1.2073929e+00
+ 2.3406938e+00
+ 3.6359650e-02
+ 9.9736592e-02
+ -7.9474483e-01
+ -3.8212459e-01
+ 3.3224486e-02
+ 2.3795580e-02
+ -1.7340733e-01
+ -1.3335400e+00
+ -1.1703236e+00
+ 4.3206639e-01
+ 4.2804519e-01
+ -8.4329019e-01
+ 1.7295965e+00
+ 2.4254364e-02
+ 1.4635957e+00
+ -6.9701157e-01
+ 1.6023512e+00
+ 2.5764106e-01
+ 6.5420840e-01
+ -1.2757486e+00
+ 8.4527055e-02
+ 1.8804332e+00
+ 2.3981861e-02
+ 8.1810326e-02
+ 9.4125295e-01
+ 7.0478992e-01
+ -8.7410288e-02
+ 2.9929933e-01
+ 7.3969866e-01
+ 6.1652527e-03
+ -1.0205326e+00
+ 1.1393192e+00
+ 2.2763866e-01
+ 6.9238933e-02
+ 1.1372073e+00
+ -1.7859383e+00
+ 1.2093209e+00
+ 1.7075824e-01
+ 5.0519876e-01
+ 9.5462565e-01
+ -1.5937658e+00
+ 1.9271784e+00
+ -1.3459917e-01
+ -2.2719418e+00
+ -1.6415187e+00
+ 1.2727242e+00
+ 1.8010434e-01
+ -5.3922344e-02
+ 3.1130869e-01
+ -9.7602299e-01
+ 3.6502563e-01
+ -5.1014226e-01
+ 2.6156070e-01
+ 1.6004989e+00
+ 6.3145023e-01
+ 1.4041219e+00
+ 1.1782578e+00
+ 1.0028962e-01
+ -1.7067393e-01
+ 7.1091364e-01
+ -1.1679110e+00
+ -1.2987078e-01
+ 5.4162472e-01
+ 5.5676318e-01
+ -6.0847956e-01
+ 2.2785543e-01
+ 7.5719264e-03
+ -1.1566288e+00
+ -9.1690713e-01
+ -4.3371860e-01
+ 1.0682805e+00
+ 7.2500571e-01
+ 1.3243114e+00
+ 8.8053260e-01
+ 3.3612188e-01
+ 3.1711505e-02
+ 2.0585438e-01
+ 1.3071147e+00
+ 2.6859885e-01
+ 1.0240752e+00
+ -3.3767800e-02
+ -2.0907923e+00
+ -3.1605928e-01
+ 1.3293614e-01
+ -6.6502875e-01
+ -4.6751384e-02
+ -1.5042442e+00
+ -6.7332695e-01
+ -8.0040830e-01
+ -2.2820500e-01
+ 4.6014117e-01
+ 5.6643539e-01
+ 1.0466590e+00
+ 1.0085411e+00
+ -4.3562634e-01
+ 1.5347461e+00
+ 9.3346182e-02
+ -9.8834931e-01
+ -9.4302361e-01
+ -9.5601855e-01
+ -1.2864599e+00
+ 1.2958926e+00
+ -2.6279949e-01
+ 1.0125045e+00
+ -5.1349431e-01
+ 1.4286581e+00
+ 3.4724086e-01
+ -9.4450772e-01
+ 7.9786996e-01
+ 6.0385224e-01
+ -1.5594339e+00
+ -1.3957051e+00
+ 1.3869349e-01
+ -7.0213893e-01
+ -5.2048933e-01
+ 7.6411642e-01
+ 2.9853005e-01
+ 1.0527312e+00
+ 2.9577746e-01
+ 1.4587117e+00
+ -3.5218769e-01
+ 1.4126565e-01
+ -6.3791043e-02
+ 1.3278377e-01
+ -1.0916598e+00
+ 6.9544992e-01
+ -6.3877890e-01
+ -1.0116274e+00
+ 2.5629750e+00
+ -1.0365102e+00
+ -2.2961823e+00
+ -2.9167374e-01
+ -8.7843361e-01
+ 1.8085733e+00
+ 5.0819847e-01
+ 2.7595729e-01
+ -4.0476070e-01
+ -5.8316475e-02
+ -1.8093261e+00
+ -6.5760227e-01
+ 1.1008245e+00
+ -1.2002698e+00
+ -7.7748577e-01
+ 5.1123972e-01
+ 3.1796235e-01
+ 7.8364337e-01
+ 9.3043358e-01
+ -3.2940993e-01
+ 2.3730973e+00
+ -1.3686203e-01
+ 8.8604068e-01
+ -1.3494337e-01
+ 2.5938026e-01
+ -1.4533512e+00
+ 3.7203293e-01
+ -2.9586405e-01
+ -1.4770410e+00
+ 2.7873733e-01
+ -2.3160758e+00
+ 3.8453911e-01
+ 1.0168891e+00
+ -6.1808277e-01
+ 4.2853442e-01
+ 3.1769513e-01
+ -6.6709341e-01
+ 8.6269295e-02
+ -1.1852492e+00
+ 6.8718698e-01
+ 9.7650598e-01
+ -2.9192385e-02
+ -5.2907122e-01
+ 1.9874819e+00
+ -1.7279886e+00
+ 1.4370308e+00
+ 8.8883998e-01
+ 1.1268836e+00
+ 1.3095244e+00
+ -2.5114481e+00
+ 4.7042793e-01
+ 3.8762363e-02
+ 3.8273236e-02
+ -7.2462693e-01
+ -1.6223258e+00
+ -9.6644469e-01
+ 3.7245694e-01
+ 5.9675205e-02
+ 5.8916948e-01
+ 7.8175891e-01
+ -1.1110514e+00
+ -1.4968209e-02
+ 5.0481430e-01
+ -8.2604687e-01
+ 1.4610651e+00
+ 8.7844123e-01
+ -3.7860047e-01
+ 9.2151679e-02
+ 6.2083873e-01
+ -6.5447605e-01
+ -1.8860184e+00
+ 4.2951317e-01
+ 7.0602393e-02
+ -1.2104967e+00
+ 1.3644896e+00
+ 5.2415748e-01
+ -5.0833112e-02
+ 5.6964257e-01
+ 9.8804130e-02
+ -6.1042830e-01
+ -1.7135368e+00
+ -4.2861084e-01
+ 3.4723485e-01
+ -9.8493767e-01
+ -1.0175654e+00
+ 1.3531262e+00
+ 6.8185288e-01
+ 7.2209148e-01
+ -2.1485566e+00
+ -5.5094979e-01
+ 1.2133245e+00
+ 3.3918575e-01
+ -2.0445724e+00
+ 8.8761750e-01
+ 8.9336755e-02
+ 1.0525786e+00
+ -1.7464749e+00
+ 9.0579532e-01
+ -4.2693011e-01
+ 4.4305063e-01
+ -1.9962416e+00
+ 5.3011950e-01
+ -2.3868159e+00
+ 3.1851358e-01
+ 5.6632183e-03
+ 6.3687810e-02
+ 8.6102891e-01
+ -4.0210452e-01
+ -4.1003446e-01
+ 1.9502042e-01
+ 1.3941302e+00
+ -4.6775293e-01
+ -7.1250014e-01
+ -1.4447708e+00
+ 1.5975822e+00
+ 7.1674082e-01
+ 4.1896816e-01
+ 1.4398078e+00
+ 2.2690758e-01
+ -6.8495188e-01
+ -3.7195839e-01
+ 6.6749039e-01
+ 1.9639448e+00
+ 7.0729899e-01
+ -2.6122910e-01
+ -6.4493321e-03
+ 4.2340403e-01
+ -2.9028374e-01
+ -1.5467727e+00
+ -7.4311249e-01
+ -7.0107537e-01
+ -1.0776600e+00
+ -5.2649700e-01
+ 5.6873746e-02
+ -9.7044344e-01
+ -2.9868340e-01
+ 8.7330453e-01
+ 5.0126438e-01
+ 4.4655934e-01
+ -1.5576534e-01
+ 5.0048996e-01
+ -7.0762483e-01
+ -1.2594021e-01
+ -2.2789729e+00
+ 3.1794867e-01
+ -2.0059230e+00
+ -7.5338070e-01
+ 1.3096114e+00
+ 1.6713798e+00
+ 1.5630925e+00
+ -1.0908324e+00
+ -7.6347770e-01
+ -1.3801865e-01
+ 4.2069754e-02
+ -9.7489515e-02
+ 7.7648979e-01
+ 1.1381339e-02
+ 1.0366631e+00
+ 3.7520686e-01
+ 2.7120230e-01
+ -4.7167289e-01
+ 4.5586564e-01
+ 8.9475730e-01
+ 1.3604688e+00
+ 5.7132364e-01
+ -1.5581980e+00
+ 1.8503823e+00
+ -5.5571031e-01
+ 7.0504004e-01
+ -2.8406112e+00
+ 2.4634740e+00
+ -1.1663395e+00
+ -7.0377258e-01
+ -3.3767012e-01
+ 3.0607601e-01
+ -1.0590630e+00
+ 9.9030513e-01
+ -2.0261636e+00
+ -2.7835380e-02
+ 1.0573392e-01
+ -3.0862549e-01
+ -1.8196029e+00
+ 3.2653594e-01
+ -9.5554972e-01
+ 6.5634913e-01
+ -2.3736873e-01
+ 8.1390748e-01
+ 7.1642431e-01
+ 2.5970675e-01
+ 2.4342645e-01
+ -2.4466719e-01
+ 6.9818152e-01
+ -8.9900193e-01
+ -1.4336348e-01
+ -1.1669928e-01
+ -4.2759970e-01
+ -4.1170368e-01
+ -5.5612510e-01
+ 5.3903357e-01
+ 1.4565602e+00
+ 1.1090722e+00
+ -1.3130928e+00
+ 1.3157085e-01
+ 3.9419522e-01
+ -8.6064007e-01
+ -1.5904887e-01
+ 6.7708860e-01
+ -9.6812238e-01
+ -3.1548823e-02
+ 9.1789815e-01
+ -9.8744517e-02
+ 1.0596911e+00
+ 4.6426006e-01
+ -6.7322142e-01
+ 1.4761351e+00
+ 1.8969675e-01
+ -1.3833997e+00
+ -7.8488096e-01
+ -1.0164769e+00
+ -2.3167685e+00
+ -1.1137962e-01
+ 2.2396439e-01
+ 4.9345650e-01
+ 4.6799125e-01
+ 4.5131102e-01
+ -7.6818496e-01
+ -1.1060913e+00
+ 3.2860195e-01
+ -6.5393641e-01
+ 1.2423623e-01
+ -5.7917825e-01
+ -2.3761078e-01
+ 1.0651050e+00
+ -6.1023755e-01
+ -2.5357610e+00
+ -3.8775431e-01
+ 1.7951827e-01
+ 1.1162595e+00
+ -3.2391373e-01
+ -1.3372364e-02
+ 5.2370308e-01
+ 6.1672483e-01
+ 1.0946403e+00
+ -8.8464571e-01
+ 5.4899174e-01
+ -5.8036117e-01
+ 1.0479938e-01
+ 1.3037208e+00
+ -5.0537137e-01
+ 1.5332945e+00
+ -4.1641551e-02
+ -5.7738902e-01
+ 6.8498441e-01
+ -1.0023310e+00
+ -4.5435803e-01
+ -3.4607705e-01
+ -8.7274632e-01
+ 6.3119143e-01
+ 9.7601459e-01
+ -6.5840933e-01
+ 7.8317020e-01
+ -1.0260025e+00
+ 5.5591507e-01
+ -8.5708557e-01
+ -8.6229283e-01
+ 1.0418377e+00
+ -4.0807206e-01
+ -1.1724260e+00
+ 4.7506930e-02
+ -9.9679910e-01
+ -1.8438136e+00
+ -3.2330188e-01
+ -1.7406816e+00
+ -1.5883703e-01
+ -2.3952344e+00
+ -7.6868130e-01
+ -3.5274356e-01
+ -3.3888664e-01
+ 8.1963390e-02
+ -1.2058405e+00
+ 1.4085478e-01
+ 1.7355266e-01
+ -7.0917695e-01
+ 3.5805107e+00
+ 1.1861180e+00
+ 9.2512836e-01
+ 1.3908647e-02
+ -1.8635669e+00
+ -8.5852985e-01
+ -6.0100247e-01
+ 2.5259599e-01
+ -8.0784359e-01
+ 2.2050361e-01
+ 8.0694149e-01
+ -3.2116163e-01
+ -1.2727943e+00
+ 1.5048480e-01
+ 3.7533312e-01
+ -1.4203326e+00
+ 1.2021708e+00
+ -4.0896829e-02
+ -6.9691338e-01
+ -4.5930011e-01
+ 9.1976268e-01
+ 5.0390667e-04
+ -1.2738259e-01
+ -6.6668105e-01
+ 3.0294878e-01
+ -1.0334954e+00
+ 2.0372746e-01
+ 3.4088060e+00
+ -7.2513650e-02
+ -6.2253157e-01
+ 8.0460222e-01
+ -7.2680736e-01
+ -6.2143639e-01
+ -2.4671656e-01
+ -1.2955563e-01
+ 2.1946469e-01
+ 4.9865198e-01
+ 1.0205904e-01
+ -9.0577458e-01
+ -3.3441849e-01
+ -2.8571051e-01
+ -3.0101149e-01
+ 1.3820376e+00
+ 2.3820188e+00
+ -6.0770795e-01
+ 7.2824691e-02
+ 4.3269087e-01
+ 1.3386660e+00
+ 1.8837198e-01
+ -1.4750746e-01
+ 4.4405193e-01
+ -1.3325971e+00
+ 2.4554218e-01
+ -4.1772482e-01
+ -1.6973956e+00
+ -6.1478173e-01
+ -2.9508434e-01
+ -1.0102840e-01
+ -6.2327817e-01
+ 6.7540068e-01
+ 1.6053156e-01
+ -1.2680926e+00
+ -1.3566391e+00
+ 8.3559201e-01
+ 6.3636655e-01
+ -7.9808755e-01
+ -9.9817536e-01
+ -2.5544562e-01
+ -1.2607425e-01
+ 6.3974015e-02
+ 1.5007614e+00
+ 1.4298370e+00
+ -7.2892420e-01
+ 7.7070571e-01
+ 9.0383855e-01
+ 8.7262468e-01
+ 6.3045733e-01
+ 4.5461017e-01
+ -3.4150177e-01
+ -6.4942674e-01
+ 2.8074432e-01
+ 6.3578576e-01
+ 6.6021617e-01
+ -1.4916494e+00
+ -4.4875407e-01
+ 4.6528374e-01
+ -4.7279449e-03
+ -3.6294007e-01
+ -2.3249125e-01
+ -8.9143708e-01
+ 1.0710673e+00
+ -2.4977504e-01
+ -1.0934049e+00
+ 1.5473977e-01
+ -9.7186903e-01
+ 2.1210485e-01
+ -2.0071060e-01
+ 8.7734128e-01
+ -1.3725237e+00
+ -1.1727356e-01
+ 2.4227496e-01
+ -7.8376669e-01
+ -5.8739109e-03
+ 5.4659302e-01
+ -1.1493651e+00
+ 5.1249841e-01
+ 1.3587148e+00
+ 3.5963235e-02
+ -1.8049284e+00
+ -3.7459200e-01
+ 1.6734869e+00
+ -7.4664231e-01
+ 1.0276640e+00
+ -3.5589256e-01
+ -8.0298450e-01
+ 5.4875892e-02
+ -3.3097895e-01
+ 7.9442363e-01
+ -3.2631676e-01
+ -1.4245328e+00
+ -4.1840937e-01
+ -1.1925914e+00
+ 1.5615359e+00
+ 6.8270822e-01
+ 5.5670986e-01
+ 1.0584190e+00
+ 5.1924525e-02
+ -3.7384901e-01
+ -2.1027586e+00
+ 1.3607168e+00
+ -4.1100167e-01
+ 4.3927932e-01
+ -4.7502671e-02
+ 4.5391253e-01
+ -2.2161730e-01
+ -6.7926290e-01
+ 6.8460981e-01
+ 1.4282970e+00
+ -1.2586061e+00
+ 1.6961526e+00
+ 1.8878205e+00
+ 7.4545159e-01
+ 9.7709528e-01
+ -8.9700360e-01
+ 7.3734229e-01
+ 3.9388289e-01
+ 1.3086688e+00
+ 1.1075902e+00
+ -1.9689869e-02
+ 5.8613415e-01
+ 7.2484525e-01
+ -8.6586509e-01
+ 7.9010448e-01
+ -1.4669250e-01
+ 6.8417456e-02
+ 9.3223576e-01
+ 4.9498002e-01
+ 1.2783307e+00
+ -6.1999968e-01
+ -5.2993135e-01
+ -3.5014899e-01
+ -1.9118274e-01
+ 1.6379433e-01
+ -7.0694354e-01
+ 2.2963282e+00
+ 4.2761636e-01
+ 1.6118132e+00
+ -6.5122231e-01
+ -9.5335368e-01
+ -1.0385623e+00
+ 5.5351352e-01
+ 4.8675084e-01
+ -8.2982190e-01
+ -1.9611874e+00
+ -1.3617226e+00
+ 1.9703414e-02
+ 7.3906525e-01
+ 1.7400578e+00
+ 6.8915969e-01
+ 7.4760718e-01
+ -1.8278361e-01
+ -7.1103604e-01
+ -1.9504566e+00
+ 3.7763172e-01
+ -1.3213669e+00
+ -2.6352027e+00
+ 1.2030408e+00
+ -8.0054811e-02
+ 4.0283864e-01
+ -1.1493667e+00
+ -2.1439793e-01
+ 1.2750906e-01
+ 2.2386761e+00
+ 6.6232400e-01
+ -7.1234883e-01
+ -2.9656456e-01
+ -1.1199285e+00
+ 1.0871655e+00
+ -3.9403840e-01
+ 1.3356235e+00
+ -2.9299663e-01
+ -1.0780581e-01
+ -1.0883319e+00
+ -8.1012650e-01
+ 1.1069790e+00
+ 1.0235897e+00
+ -7.5150771e-02
+ 1.1698604e+00
+ 2.6401048e-01
+ -1.3639758e+00
+ -9.2763270e-01
+ -7.7790622e-01
+ -3.6399014e-01
+ 2.0260128e-01
+ 1.8329947e-01
+ -6.5205292e-01
+ 3.1349416e-01
+ -1.0321609e+00
+ 3.1499294e-01
+ -1.8741100e+00
+ -1.5652373e-01
+ 9.1034838e-01
+ 1.4454185e-01
+ 1.3919353e+00
+ -2.5688957e-01
+ 1.9367791e-01
+ -4.4944421e-01
+ -2.6992043e-01
+ 6.9003114e-01
+ 3.8693391e-01
+ -1.5278899e+00
+ -9.0868549e-02
+ 5.0991231e-01
+ -4.9345085e-01
+ -1.0155738e+00
+ 2.1732512e-01
+ 7.0329777e-01
+ 9.9310181e-01
+ 2.4791742e+00
+ 1.1106428e+00
+ 4.8151720e-01
+ 5.6974787e-01
+ 8.1893707e-01
+ 6.0857918e-01
+ -2.7340211e-01
+ -1.7439461e+00
+ 1.8689215e-02
+ -1.4833475e+00
+ -1.8244291e-01
+ -5.0927349e-01
+ -1.7238216e-01
+ 1.5965128e+00
+ 1.1954233e+00
+ 1.9710088e+00
+ -4.1495207e-01
+ -1.7961960e+00
+ 1.2966728e+00
+ 4.7798841e-01
+ 1.8149265e-01
+ -1.2752919e+00
+ 7.8141788e-02
+ -8.7693030e-01
+ -1.9136904e-01
+ -7.4912709e-01
+ -5.3118463e-01
+ 1.6369013e+00
+ 1.9849515e+00
+ -5.3635736e-01
+ -5.2680882e-01
+ 6.9813012e-01
+ 8.0216250e-01
+ -1.5800073e+00
+ -7.7983212e-01
+ -1.1434768e+00
+ 4.6297701e-01
+ 1.2856119e+00
+ -3.7580797e-01
+ 6.0781062e-01
+ -7.4159757e-01
+ -4.4873797e-01
+ 1.2782383e+00
+ 1.9943754e-01
+ 5.5656574e-01
+ 8.8042740e-01
+ -1.0638588e+00
+ 8.4267949e-01
+ -7.5642639e-01
+ 9.8144028e-01
+ 8.9289775e-01
+ 1.3478700e+00
+ 4.3822222e-01
+ 7.6773585e-01
+ -4.3339236e-01
+ -1.4761727e+00
+ -5.1002308e-01
+ 6.8941698e-01
+ -4.5765711e-01
+ 1.2327241e-01
+ 1.0738428e+00
+ 1.5729547e+00
+ -7.7114648e-02
+ -8.3192083e-01
+ -7.0911387e-01
+ 1.8839830e+00
+ -1.8480874e+00
+ 2.0807979e-01
+ -3.2335562e-01
+ -8.9696965e-02
+ -1.7777022e+00
+ -1.4662050e+00
+ 1.5835412e+00
+ -1.7547472e+00
+ 1.5159923e+00
+ -3.1310484e-01
+ -2.4288079e-01
+ -3.6779344e-01
+ -9.2313062e-01
+ 7.0184142e-01
+ -3.4041508e-01
+ 3.8206082e-01
+ 9.6084534e-01
+ 3.4072576e-01
+ -3.1180590e-02
+ 1.3005795e+00
+ -1.1767989e+00
+ -9.7638914e-01
+ -1.8365830e-01
+ -1.8464814e+00
+ 5.9270284e-01
+ -5.8256505e-01
+ -3.4113998e-01
+ -5.7274419e-01
+ 1.9873937e+00
+ -6.0818332e-01
+ -1.6104905e-02
+ -4.9918284e-01
+ 1.6262184e-01
+ 4.6287933e-02
+ 7.3815314e-01
+ -1.1900175e+00
+ -3.4665394e-01
+ -1.8161761e+00
+ 2.6423302e-01
+ 9.3768856e-01
+ 4.0846630e-01
+ -8.3720198e-01
+ 5.1347588e-01
+ -5.3029029e-01
+ -1.6078144e-01
+ 4.8631908e-01
+ -1.6294133e+00
+ -8.9065074e-01
+ -4.4631327e-01
+ 2.6534077e-01
+ -2.2565439e-01
+ -1.5810926e-01
+ -4.8295383e-01
+ 1.8304666e+00
+ 3.2041716e-01
+ -9.7029079e-01
+ 4.1824764e-01
+ -2.1355375e+00
+ 9.1039544e-01
+ -2.1588778e+00
+ 5.9735425e-01
+ -1.6785333e+00
+ -2.1841847e-01
+ -1.3131793e+00
+ 2.2760810e-01
+ -6.7269626e-01
+ -4.4476859e-01
+ 1.7271752e+00
+ -1.0110061e+00
+ 8.4892440e-01
+ -7.6674374e-01
+ -4.0057886e-01
+ 1.2700435e+00
+ 4.7821542e-01
+ 4.4276970e-01
+ 1.1542324e+00
+ -5.8810763e-01
+ -1.6662775e-01
+ 3.9633717e-01
+ 2.2551266e-01
+ 9.1701362e-01
+ -1.7596457e+00
+ -9.0756906e-01
+ -1.2612895e+00
+ -1.5467284e+00
+ 5.8806181e-01
+ -4.4268899e-01
+ -1.0563030e+00
+ -1.9987190e-01
+ -1.7385973e+00
+ -1.2232963e+00
+ 3.1239721e-01
+ -1.7301538e+00
+ 1.5037819e+00
+ -1.3148743e+00
+ -5.5081265e-02
+ -7.2485787e-01
+ -1.6991750e-01
+ 4.1195564e-01
+ 1.2233642e+00
+ 1.2152738e+00
+ -4.2624723e-01
+ -1.7953451e-01
+ 2.4436711e-01
+ 1.6594810e+00
+ 8.9947897e-01
+ -1.6389043e+00
+ -7.3351580e-01
+ -1.1253048e+00
+ -9.4035125e-01
+ 7.1638916e-01
+ -4.6946125e-01
+ 1.6000137e+00
+ 5.2585571e-01
+ 3.2118849e-01
+ 2.0952629e+00
+ -3.9012804e-01
+ 3.6881430e-01
+ 6.1224995e-01
+ -6.4318865e-01
+ 1.8674919e-01
+ -1.4178382e+00
+ 1.0335631e+00
+ 1.8982487e+00
+ 3.0799298e-01
+ -2.1883551e+00
+ 1.8815040e+00
+ -1.2800462e+00
+ -1.2693642e+00
+ -8.6150632e-01
+ -2.6905085e-01
+ -1.3885013e+00
+ 3.0489817e+00
+ -9.3187058e-01
+ 8.8456082e-01
+ 6.8472240e-01
+ -8.4659989e-01
+ -9.2009022e-01
+ 1.6819373e+00
+ 7.2498750e-01
+ -1.1012138e+00
+ -2.8001246e-01
+ -1.1283240e-01
+ 6.3774311e-01
+ 9.7697216e-01
+ 1.0029315e+00
+ 9.7508437e-01
+ 2.9773685e-01
+ 1.6825549e+00
+ -8.4133420e-01
+ 2.0818447e+00
+ 6.7915838e-01
+ 1.4586190e+00
+ -2.2127400e-01
+ -7.7378136e-01
+ 5.3860031e-01
+ 4.7658903e-01
+ 4.9003957e-01
+ 2.0583231e-01
+ 6.8023330e-01
+ 4.9998795e-01
+ -7.6963735e-01
+ -1.3668553e+00
+ 4.5851428e-01
+ 1.7235169e-01
+ 4.9553145e-01
+ -1.4838706e+00
+ -6.4668035e-01
+ 1.9986432e-01
+ 1.3448631e+00
+ -1.1977934e+00
+ 1.3108855e-01
+ 2.1933662e-01
+ 2.8563297e-01
+ -8.1061512e-01
+ -8.1673741e-01
+ -5.4847688e-01
+ 6.8704812e-02
+ 4.8662484e-01
+ 2.0682443e+00
+ -1.5984502e+00
+ 9.9117854e-01
+ 1.0432691e+00
+ -1.0079386e-01
+ -9.4775041e-01
+ -3.4661073e-01
+ -3.3626313e-01
+ 5.7817279e-01
+ 2.4411423e-01
+ 7.1628402e-01
+ -7.9975416e-02
+ 5.8579015e-01
+ -9.7557168e-02
+ 1.7925353e+00
+ -7.0486474e-01
+ 7.3295761e-01
+ 2.2555019e+00
+ -5.8129470e-01
+ 7.0610653e-02
+ 7.6920404e-01
+ 9.0373786e-02
+ 9.5401664e-01
+ 2.9615247e-01
+ 1.3670472e+00
+ -2.1625191e-01
+ -1.7282587e+00
+ 7.8932657e-01
+ -3.6019584e-01
+ 4.7136545e-02
+ 6.3113509e-01
+ -1.9396646e+00
+ -3.5927649e-01
+ 5.8748448e-01
+ -2.2806382e+00
+ -1.1168671e+00
+ -8.1648598e-01
+ -4.8532653e-01
+ 6.6501897e-01
+ -1.3283128e+00
+ -1.2615899e-01
+ 6.3291425e-01
+ 4.6997901e-01
+ 6.3515745e-02
+ 5.5624540e-01
+ 1.5755808e+00
+ 1.2563312e-01
+ 1.6255982e+00
+ 1.7997885e+00
+ -4.8136642e-01
+ -3.9253742e-01
+ 6.0740953e-01
+ -7.5156625e-01
+ -1.6553692e+00
+ 2.7173639e-01
+ 4.3543567e-01
+ 1.9720793e-01
+ -9.6200295e-01
+ -3.9220036e-01
+ 1.0303199e+00
+ 1.7998307e-01
+ -1.9326882e-01
+ -5.7405901e-01
+ -3.6318091e-01
+ 2.9741216e-02
+ 3.0411079e-01
+ -7.0210197e-01
+ -9.9578396e-01
+ 4.3829626e-02
+ 1.6304099e-01
+ 3.4175267e-02
+ -6.1575165e-01
+ -1.6599884e+00
+ -1.7172393e-01
+ 8.6575178e-01
+ 1.8107388e+00
+ 5.1669677e-01
+ 3.3607327e-01
+ 4.6281198e-01
+ 1.0802987e-01
+ -8.1246867e-01
+ -6.0956129e-01
+ -1.1478631e+00
+ -1.4572797e-01
+ 1.8402385e-01
+ 8.4055286e-01
+ -4.0860877e-01
+ -9.5863835e-01
+ 3.2681575e-01
+ -1.4363744e+00
+ -1.0429713e+00
+ -1.6052430e+00
+ 5.9029210e-02
+ 3.2708950e-01
+ -1.0086085e+00
+ -2.3358497e-01
+ 6.4791408e-01
+ 2.3266264e-01
+ -2.7809723e-01
+ 6.3167423e-02
+ -1.7059653e-01
+ -1.2828129e+00
+ 5.0689767e-01
+ 7.7600246e-01
+ 2.5301966e-01
+ 3.5147873e-01
+ 3.9519653e-01
+ 3.4241646e-01
+ -4.5448988e-01
+ 4.0039605e-01
+ 4.9526589e-01
+ 1.3768858e+00
+ -1.6907557e+00
+ -1.5319171e+00
+ 6.5561022e-01
+ 1.1328016e+00
+ 3.1619374e-01
+ -1.1974688e+00
+ -5.7233863e-01
+ 1.0136870e+00
+ 1.2322172e+00
+ 7.0770364e-01
+ -1.4719784e+00
+ 4.5258043e-01
+ -1.9431388e+00
+ 2.2620354e-01
+ -1.2025145e-01
+ 7.5855895e-01
+ -1.2787692e-01
+ -1.0357779e+00
+ -3.0073161e-01
+ -1.2264550e-01
+ -1.4968213e+00
+ 3.0789829e-01
+ -8.8212471e-01
+ 1.1146227e+00
+ 4.8630456e-01
+ -4.9951822e-01
+ -1.1148426e+00
+ -1.6820794e+00
+ 8.9436573e-01
+ 1.3168689e+00
+ 2.6676597e-01
+ -5.8989630e-01
+ 4.7629131e-01
+ 5.3787167e-02
+ 2.7337173e-01
+ 1.7258183e+00
+ -2.0315030e-01
+ 1.1730719e-01
+ -1.1744938e+00
+ -7.2216932e-01
+ 1.0277115e+00
+ -5.4945568e-01
+ -1.8451282e+00
+ 5.6267504e-01
+ 5.7640622e-01
+ 5.1815661e-01
+ 8.2727539e-01
+ -6.6860514e-01
+ 3.5785514e-01
+ -2.5254687e-01
+ 4.3781898e-01
+ -8.7546880e-01
+ 2.6690045e-01
+ -2.0715384e-01
+ 1.9421029e+00
+ -1.1788107e-01
+ 4.2122434e-01
+ 4.5984199e-01
+ -5.0174495e-01
+ 1.1841121e+00
+ 4.0778624e-01
+ 1.0279580e+00
+ -6.7743925e-01
+ -8.0885726e-01
+ 5.4248772e-01
+ 6.8482075e-01
+ 6.1665844e-01
+ 9.8104886e-01
+ 7.2865115e-02
+ -1.0830964e-01
+ -1.0485597e+00
+ 9.2418845e-02
+ 5.6468090e-01
+ 1.2539461e+00
+ -7.2767563e-01
+ 4.8212900e-01
+ 7.4339715e-01
+ 1.0969152e+00
+ -1.3243268e-01
+ -1.0807954e+00
+ -4.1856341e-01
+ -7.9079087e-01
+ -1.7594251e-02
+ -1.6406631e+00
+ -6.5961641e-01
+ -5.9120125e-01
+ 7.6876200e-01
+ 9.7914778e-01
+ 5.2412698e-01
+ -6.5734345e-01
+ -5.8248748e-01
+ -1.7132466e+00
+ 1.3234224e+00
+ -1.8442746e+00
+ 8.2928411e-01
+ -1.1435650e+00
+ 5.2984478e-02
+ -2.3154079e-01
+ 7.8759349e-01
+ 1.3981704e+00
+ -2.5522466e-01
+ 1.3298566e+00
+ -1.4307163e+00
+ -1.3470363e+00
+ 6.5038948e-01
+ 5.4451871e-01
+ 1.5199368e-01
+ -1.6447022e+00
+ 7.7295003e-01
+ 1.2208917e+00
+ 1.5273115e-01
+ -1.7079831e-01
+ -1.0413514e+00
+ -2.1254927e-01
+ 1.0365272e+00
+ 8.7245622e-02
+ -1.0484794e-02
+ 5.6410447e-01
+ -7.6674960e-01
+ -3.8907318e-01
+ -1.2455784e+00
+ -1.5903724e+00
+ -3.5582575e-01
+ 8.7512183e-01
+ -4.1565966e-01
+ 8.8992940e-01
+ -8.4075212e-01
+ -1.0808629e-01
+ -7.4194554e-01
+ 4.5204851e-01
+ 5.6817238e-01
+ -5.4178737e-01
+ -8.5705925e-01
+ -2.8912471e+00
+ -1.4754087e+00
+ 8.6678293e-01
+ 2.0146279e+00
+ 4.1106005e-01
+ 3.7729404e-02
+ 5.3518186e-01
+ -1.6581814e+00
+ 1.0569922e+00
+ 1.8294578e-01
+ -8.3960051e-01
+ 3.9004478e-03
+ 6.4865016e-02
+ 1.0128258e-01
+ 9.5439277e-01
+ 1.2464847e-01
+ 1.1813492e-01
+ 1.4460495e+00
+ -2.2707463e+00
+ 3.9396120e-01
+ -1.4354696e+00
+ 2.2495335e-01
+ 1.5637836e+00
+ -1.6974176e+00
+ 1.1098401e-01
+ -7.7345614e-01
+ 8.3202125e-01
+ 3.1614630e-01
+ -1.2051650e+00
+ 6.1226135e-01
+ 8.0024556e-01
+ -9.4978293e-01
+ -5.8660377e-01
+ 1.4001760e+00
+ -3.4989700e-01
+ 8.9321036e-01
+ 1.4971043e+00
+ 9.3737214e-01
+ 1.4040391e+00
+ -4.4856698e-01
+ 8.9225419e-01
+ 1.5198065e+00
+ 1.1592176e+00
+ 1.8144996e+00
+ -1.7014030e+00
+ 8.0170457e-01
+ 1.8867159e-01
+ 2.3995531e-01
+ 1.1636506e+00
+ 1.1309012e-02
+ 6.2326186e-01
+ -8.8146253e-01
+ 1.7829848e-01
+ 5.7349734e-01
+ 4.1044716e-02
+ -4.5080828e-01
+ 9.9492592e-01
+ 1.5839719e+00
+ 4.6677347e-01
+ -1.1854789e+00
+ 2.6880486e-02
+ -1.0065933e-01
+ -2.5342843e+00
+ -2.8607298e-01
+ 6.3179535e-01
+ 7.0631409e-01
+ -2.0188961e+00
+ -2.7268394e-01
+ 8.1929232e-01
+ -6.3303586e-01
+ 6.8422103e-01
+ -1.0361394e+00
+ 9.4844000e-01
+ 1.4091284e+00
+ 8.1366998e-01
+ -1.7820107e-01
+ -4.5220572e-02
+ -6.3958589e-01
+ -4.3830409e-01
+ 6.2310047e-01
+ 8.2260398e-02
+ 1.5066088e-01
+ 8.6616094e-01
+ 5.8198116e-01
+ 2.2972657e-01
+ 9.8624365e-01
+ 6.5999621e-02
+ -1.2892109e+00
+ -9.1640347e-02
+ 1.8748994e+00
+ -2.2932762e-01
+ -1.1766798e+00
+ 1.9286430e-01
+ -4.4640947e-01
+ 8.4360920e-01
+ 1.2027638e+00
+ -8.7965275e-02
+ 9.8940756e-01
+ -3.3708830e-01
+ -5.0592986e-01
+ -1.4467890e+00
+ -4.5500456e-01
+ 1.4136497e+00
+ 2.8005576e-01
+ -6.5277240e-01
+ -6.0566753e-01
+ -4.7567749e-01
+ 8.7145129e-01
+ 1.3343616e-02
+ 1.8770343e-01
+ 1.6560612e-01
+ -1.1183994e-01
+ -1.6421889e+00
+ 1.3647325e+00
+ -1.5856650e+00
+ -2.6304665e+00
+ -4.4754289e-01
+ 7.2468963e-01
+ -3.1711790e-02
+ -2.6331268e-01
+ -1.5475282e-01
+ 3.8955795e-01
+ 3.9704785e-01
+ 7.8175456e-01
+ -7.5661144e-01
+ -9.4681040e-01
+ 8.2535198e-01
+ -3.1197328e-01
+ -7.0125346e-01
+ -1.1496709e+00
+ -1.0364907e+00
+ -3.8003203e-01
+ 5.6843066e-01
+ -1.0970639e+00
+ 1.5248585e+00
+ 1.4891711e+00
+ 1.2458674e+00
+ 1.0454267e-01
+ -4.2599002e-01
+ 1.0509341e+00
+ 2.1975444e-02
+ 2.8206191e-01
+ 1.0661494e+00
+ -1.7762970e+00
+ 1.1587227e+00
+ -5.1064892e-01
+ -1.7206889e+00
+ -2.6922869e-01
+ -9.2149017e-01
+ -8.7501012e-01
+ -9.5859477e-01
+ 6.1550501e-01
+ -7.4508604e-01
+ -5.7196434e-01
+ 1.4449363e-01
+ -1.3715908e+00
+ 8.8828195e-01
+ -2.6460222e+00
+ -3.8861784e-01
+ -6.0205611e-01
+ 7.1053771e-01
+ 4.0686489e-01
+ 5.9501881e-01
+ -5.0465035e-01
+ 1.8554295e+00
+ -4.7498791e-01
+ 3.4611570e-03
+ -6.9495389e-01
+ 1.2752005e+00
+ -9.5518988e-01
+ -1.4309180e+00
+ -3.1222158e-01
+ 2.0572210e+00
+ -2.6703060e-01
+ -7.5167375e-01
+ 1.0728716e-02
+ 2.2556869e-01
+ -2.9360571e-01
+ 4.8258946e-01
+ -1.5415761e+00
+ -1.4326800e+00
+ -3.5557889e+00
+ 8.0790197e-02
+ 1.4429386e+00
+ 2.3811603e-01
+ 1.2272107e-01
+ 8.4533345e-01
+ -3.4149606e-01
+ -6.0762842e-01
+ 2.7060076e-01
+ 7.2572637e-01
+ 1.0601907e+00
+ -1.1141214e+00
+ -2.3972839e-01
+ -1.8818007e+00
+ -1.9339379e-01
+ -7.6195449e-01
+ 4.2729276e-01
+ 4.5267476e-01
+ 9.7488915e-01
+ 1.3369350e+00
+ 1.4792377e+00
+ -1.9967439e+00
+ 3.6253843e-02
+ -1.2806688e+00
+ 7.3494547e-01
+ -6.0683779e-01
+ -6.4068253e-01
+ -5.7302944e-01
+ -9.1549628e-01
+ -3.6805385e-01
+ 1.0879061e+00
+ 7.5929629e-01
+ 1.0497543e-01
+ -2.5957994e-01
+ -3.1113821e+00
+ -6.2735536e-01
+ 3.5194973e-01
+ 4.1168205e-01
+ 3.0163214e-01
+ -1.0691416e+00
+ -9.6047148e-02
+ -7.2517210e-01
+ 1.2022217e+00
+ 1.3927531e+00
+ 8.8634140e-01
+ -1.3528130e-01
+ 6.4054173e-01
+ -8.8350902e-01
+ 1.4015558e+00
+ 7.7263637e-01
+ -3.8583698e-01
+ 6.3186367e-01
+ -7.0975845e-02
+ 6.0482616e-01
+ -6.9647835e-01
+ 2.4497686e-01
+ -6.8153889e-01
+ -1.3379844e+00
+ -6.8595119e-01
+ -4.8642417e-01
+ 7.5853605e-01
+ -1.0710834e+00
+ 6.2649900e-01
+ -9.1824835e-01
+ 1.0564986e+00
+ 8.6365517e-02
+ -1.4459763e-01
+ -1.2030209e+00
+ -1.1419309e+00
+ -2.2088364e-01
+ 1.2708369e+00
+ 5.8332394e-02
+ -1.0115563e+00
+ 8.9082375e-01
+ -1.0450404e-01
+ 8.6889766e-01
+ -5.5525097e-01
+ 1.8948276e-01
+ -1.4060890e+00
+ -8.2712269e-01
+ 6.9662379e-01
+ 5.3305846e-01
+ 1.1975261e+00
+ 5.0615401e-01
+ 1.7969161e-01
+ 7.2958670e-01
+ 7.9850398e-01
+ 1.1297469e+00
+ 1.5823421e+00
+ 7.5634719e-01
+ -1.5420169e-01
+ -1.3274774e+00
+ -6.6248839e-01
+ -8.2086943e-01
+ -5.6330301e-01
+ 1.4650626e+00
+ -9.1838533e-01
+ 6.6853158e-01
+ -1.4843262e+00
+ -3.0161892e-01
+ -8.3296799e-02
+ -5.6251841e-01
+ 1.0134178e+00
+ -3.3298915e-01
+ 1.2385745e+00
+ -6.6633797e-01
+ -1.1875228e+00
+ 6.0702553e-01
+ 1.8944202e+00
+ 1.3383548e+00
+ 1.0753391e+00
+ 6.4891251e-01
+ 1.6838851e+00
+ 1.3734457e+00
+ -3.1516537e-01
+ 1.4350882e-01
+ -8.8312345e-01
+ -1.5294067e-01
+ 7.9241879e-01
+ 4.0794279e-01
+ -1.0159025e+00
+ 1.2524802e+00
+ 1.0048408e+00
+ 1.1753365e+00
+ 3.1657780e-01
+ 9.7147829e-01
+ 5.1296908e-01
+ 5.5086777e-01
+ -6.2630370e-02
+ -3.6860815e-01
+ -1.3654842e+00
+ -1.2239407e-01
+ -6.4828906e-01
+ -7.3024521e-01
+ -3.5912151e-01
+ 4.1388524e-01
+ -1.3703907e+00
+ 1.8129030e-01
+ -3.2049718e-01
+ -1.7305027e+00
+ -2.4451942e+00
+ 8.9423546e-01
+ -4.3905421e-01
+ 6.6221070e-01
+ 2.7585502e-01
+ -5.5137107e-01
+ 8.2053763e-01
+ 8.1865888e-01
+ 1.5978971e-01
+ 9.9362458e-01
+ 3.8030201e-01
+ 7.3987026e-01
+ -1.1565714e+00
+ 1.0748184e+00
+ -1.7422441e+00
+ -4.8881776e-01
+ 6.1150659e-01
+ -4.5994612e-01
+ 4.6590402e-01
+ 5.6665860e-01
+ -6.3349860e-01
+ 7.8230795e-01
+ 2.6647875e-01
+ 4.3244836e-02
+ 9.2904456e-01
+ -1.8060847e-01
+ -1.0147575e+00
+ 6.0821165e-01
+ 7.3746144e-01
+ -7.9095222e-01
+ 1.4554401e+00
+ -1.1193664e+00
+ -8.6273317e-01
+ 5.3634782e-01
+ -2.1668658e+00
+ -1.3281392e+00
+ -3.8530050e-01
+ 1.1776973e+00
+ 1.3876263e+00
+ -8.3159653e-01
+ -6.7382125e-01
+ 3.8005810e-01
+ 9.6433417e-01
+ 2.5696013e+00
+ 3.3719240e-01
+ 8.0784677e-01
+ -4.2624510e-01
+ -9.8877596e-01
+ 1.3233659e-01
+ 2.6438710e-01
+ -8.0473306e-01
+ 1.1733493e+00
+ 1.4199498e+00
+ 4.0278305e-01
+ 1.3793755e+00
+ -5.3190912e-01
+ -1.3430390e+00
+ -1.2890921e+00
+ 4.0671979e-01
+ -3.4595587e-01
+ 4.4592318e-01
+ 1.0806492e+00
+ 5.4122505e-01
+ 6.0488517e-01
+ -1.6970340e+00
+ -5.2518963e-01
+ -2.2392087e-01
+ 1.5451891e+00
+ 1.8886215e-01
+ -1.5734609e+00
+ 1.6438116e+00
+ 4.9526448e-01
+ 1.5755920e-02
+ -4.8318619e-01
+ 1.2108692e+00
+ -8.4431341e-01
+ 2.1916780e+00
+ -1.8183736e-01
+ -9.7141771e-01
+ -1.3530961e+00
+ -3.1300740e-01
+ 4.8484027e-02
+ -3.8136823e-01
+ -7.1194516e-01
+ 5.6759130e-01
+ -7.7301534e-01
+ 2.7626386e-01
+ -2.6558490e-01
+ 6.3454000e-01
+ -1.5588440e+00
+ 9.6003594e-01
+ -1.0304308e+00
+ -8.5119728e-01
+ 1.0125694e+00
+ 1.7251888e+00
+ -4.2107114e-01
+ 2.1170236e-01
+ -1.1977169e+00
+ -1.6104851e+00
+ 1.1743512e+00
+ 7.4914063e-01
+ -3.4580152e-02
+ -5.1757738e-01
+ -1.2422333e+00
+ -5.5706473e-01
+ 1.4948945e+00
+ -2.3982145e-01
+ 5.6957246e-01
+ 9.4422403e-02
+ -1.3356558e+00
+ -1.7112314e+00
+ 1.0508186e+00
+ 2.2268929e-01
+ 2.8472210e+00
+ -1.4976307e-01
+ 6.5110489e-01
+ 1.4691028e-01
+ -6.4797455e-01
+ -8.1647983e-01
+ -1.0060780e+00
+ 1.0124593e+00
+ -5.5819433e-01
+ -9.6915594e-01
+ -1.7484110e-01
+ -6.7693433e-01
+ -1.1347123e-01
+ -1.8678598e+00
+ -1.1960069e+00
+ 6.0869825e-02
+ -7.7294836e-01
+ -6.4473994e-01
+ 1.8484658e+00
+ 1.2822464e+00
+ -2.2338146e-01
+ -1.2040883e+00
+ -9.4220731e-01
+ 2.2141222e+00
+ -1.3089948e-01
+ 2.6812897e-01
+ 2.9080838e-02
+ 1.1303473e+00
+ -7.6975063e-01
+ -7.3981709e-01
+ -1.7883514e+00
+ -1.5273983e+00
+ 2.6947017e-01
+ -8.7771962e-02
+ 7.6945828e-01
+ -5.1305245e-01
+ 4.5651088e-01
+ 7.4929476e-01
+ 1.9267031e+00
+ -8.6362932e-02
+ -1.8410589e-01
+ 8.8229839e-02
+ 7.4206949e-02
+ -1.7089676e-01
+ 1.8750257e+00
+ 1.2386200e+00
+ -5.1887312e-01
+ 8.2761046e-01
+ 1.2439834e+00
+ -9.3334363e-01
+ -1.0725294e+00
+ -3.4541015e-01
+ 2.3004726e-01
+ 1.1950894e-01
+ -1.0373891e-01
+ 1.9635736e-01
+ -9.5358982e-01
+ -8.7926200e-01
+ 3.4686941e-01
+ -1.9845868e-01
+ -4.1570379e-01
+ -1.7130132e+00
+ 2.0993549e-01
+ 3.8041254e-01
+ -1.3926891e+00
+ -2.0103972e-01
+ -2.6028459e-02
+ 8.1083959e-01
+ -7.4049848e-01
+ -6.4052536e-01
+ -8.1523270e-01
+ -1.7805414e+00
+ 6.4596247e-02
+ 3.1245523e-01
+ -8.0366172e-01
+ -9.5425816e-01
+ -1.1799251e+00
+ -1.9779793e-01
+ 1.0656458e+00
+ -2.8281276e+00
+ -2.2670158e+00
+ 1.0387089e+00
+ -7.1846459e-01
+ -6.4093408e-02
+ 1.1782348e+00
+ 1.5232771e+00
+ 3.0259342e-02
+ 6.5743833e-01
+ 1.8868258e-01
+ 4.7329284e-01
+ -3.6968532e-01
+ -1.5064976e+00
+ 5.6867808e-01
+ 6.2545240e-01
+ -4.0274772e-01
+ -5.6886411e-01
+ -1.4542189e+00
+ -5.3684409e-01
+ -5.9844863e-01
+ -3.7695118e-01
+ 1.6485260e+00
+ 3.5345633e-01
+ -4.0300153e-01
+ 2.9777011e-01
+ 2.9261272e-01
+ 1.1639393e+00
+ 8.6626864e-01
+ 9.9473077e-01
+ 1.6386885e-01
+ 3.6471899e-01
+ 1.0616928e+00
+ 8.8825213e-02
+ -1.5602559e+00
+ 1.7087668e-01
+ -9.4165668e-01
+ -7.5117358e-02
+ -4.8219930e-01
+ -6.9185731e-01
+ 1.1330263e+00
+ -3.8366435e-01
+ -2.4153342e-04
+ 7.2493139e-02
+ -1.4297617e+00
+ 1.1679316e+00
+ -1.4730375e-01
+ 8.0107100e-01
+ 2.7147594e-01
+ 1.1291275e+00
+ -7.4157332e-01
+ -1.7189749e+00
+ -5.1409961e-01
+ -6.3912689e-01
+ -1.2145940e+00
+ 1.1407582e+00
+ 9.3819536e-01
+ 8.2366599e-01
+ -1.8167609e+00
+ -1.7345708e+00
+ 1.5575451e+00
+ 8.1167591e-02
+ 5.2360539e-01
+ -3.4281333e-01
+ -1.7146757e+00
+ -5.5943253e-02
+ -2.6592466e-01
+ 2.6818212e+00
+ -1.1547325e+00
+ -3.8335098e-01
+ -9.6647734e-01
+ 1.9833773e+00
+ 7.0682415e-01
+ -1.2173614e+00
+ 3.2160878e-01
+ -1.2887312e+00
+ -3.1919455e-01
+ 3.0379483e+00
+ 3.3820911e-01
+ -1.0769470e+00
+ 2.3574298e-01
+ -6.7303417e-01
+ -1.0219672e+00
+ -9.2951784e-01
+ 1.1633172e-01
+ 7.7494420e-01
+ -7.2376413e-02
+ -1.2930181e+00
+ -7.6138132e-01
+ 1.7726471e+00
+ -6.5593676e-01
+ -4.5488369e-01
+ 1.2557690e+00
+ -1.3283277e+00
+ 7.0522828e-01
+ -4.3696361e-01
+ -7.2463026e-01
+ 9.6435255e-01
+ 1.4070238e-01
+ 3.3014073e-01
+ 3.3646231e-01
+ 2.1662891e-01
+ -8.5523371e-01
+ -1.1585450e+00
+ 5.2371478e-01
+ -5.4372101e-01
+ 1.6756511e+00
+ -2.9632586e-01
+ 3.8095871e-01
+ 1.8774854e+00
+ -4.6344936e-02
+ 3.5645593e-01
+ -1.9219010e-01
+ 1.5311768e+00
+ 2.5570766e-01
+ 1.1643939e+00
+ -3.5858770e-01
+ -1.6126769e+00
+ -3.0457238e-02
+ 1.2026201e+00
+ 7.5524293e-01
+ -2.2423890e-01
+ -2.9777182e-03
+ -9.3137370e-01
+ 7.0300180e-01
+ -8.1170991e-01
+ 3.3219759e-01
+ -1.1327094e+00
+ 8.8527740e-02
+ 1.5797170e+00
+ 1.2103919e-01
+ 4.0867890e-01
+ -2.7189765e-01
+ -1.2601012e+00
+ 1.2883531e+00
+ 1.4912539e+00
+ 3.4685796e-01
+ 3.8400468e-01
+ 3.2635021e-01
+ -1.3924401e+00
+ 1.3287002e-01
+ 7.2772191e-01
+ -1.2319928e+00
+ 1.0985511e+00
+ -8.6984623e-01
+ -1.0210482e-01
+ -8.6698709e-01
+ -3.2813565e-01
+ 9.6341841e-01
+ -9.0410699e-01
+ 4.2706707e-01
+ -1.9902758e-01
+ 2.1445761e-01
+ -4.1900815e-01
+ 1.2165423e+00
+ 1.5228154e+00
+ 6.2211203e-02
+ -1.9301613e+00
+ 6.2305772e-02
+ 1.3750287e+00
+ 1.5775011e-01
+ -3.6313584e-01
+ -1.0111255e-01
+ -3.0005734e+00
+ -2.2037418e-01
+ -4.6462431e-01
+ -3.8988473e-01
+ -6.3140203e-02
+ -1.3855814e+00
+ -1.5855227e+00
+ 5.9272360e-01
+ -6.9387414e-01
+ -4.8736188e-01
+ 7.0856880e-01
+ -3.1884391e-01
+ 7.0073802e-01
+ 2.3555047e-01
+ -3.0672805e-01
+ -1.1454153e-01
+ -9.8949064e-01
+ 6.2025978e-01
+ 1.0164381e+00
+ 6.9515632e-01
+ 3.7381918e-01
+ -7.0019850e-01
+ -1.6549172e+00
+ -5.1262031e-01
+ 1.2434616e+00
+ 6.1936905e-01
+ -4.3287419e-01
+ -9.6928447e-01
+ -1.0487009e+00
+ -9.0437213e-01
+ -2.5415641e-01
+ -3.9015989e-01
+ -8.1083438e-01
+ -1.1045725e+00
+ -6.9444450e-02
+ 2.1196236e-01
+ -1.7908484e-01
+ -1.8441057e+00
+ -1.6470432e+00
+ 4.1213931e-01
+ -3.6567845e-01
+ -1.1208004e+00
+ 2.3982903e+00
+ 1.0976013e+00
+ 6.2791930e-01
+ -1.6690154e-02
+ -1.4241685e-01
+ 2.0988228e+00
+ -9.2849932e-01
+ 8.3305345e-01
+ 5.2447249e-01
+ 6.0884248e-01
+ -8.6829511e-02
+ 1.8033795e+00
+ 1.0929377e+00
+ -1.5260860e+00
+ 3.1661708e-01
+ 5.8070573e-01
+ -1.7389370e-01
+ 1.8872170e-01
+ 1.3042173e+00
+ 2.2421373e-01
+ 1.7001948e+00
+ -9.0482551e-01
+ -4.6082487e-01
+ -2.6365403e-01
+ 4.7292176e-01
+ 4.1291720e-01
+ 9.3869070e-01
+ 6.0346384e-01
+ 3.2322895e-01
+ 6.9979377e-01
+ 1.3404778e+00
+ 8.1260591e-01
+ -1.6328561e+00
+ -8.7672003e-01
+ -1.9275592e+00
+ 1.8855027e+00
+ -3.3660132e-01
+ -8.3635572e-02
+ -1.7755256e+00
+ -7.7332266e-01
+ 9.4729705e-01
+ -1.0769035e+00
+ 1.7488224e+00
+ -1.4861597e+00
+ -1.2404675e+00
+ 4.2993501e-01
+ -1.5216025e+00
+ -2.4718944e+00
+ 4.9963177e-01
+ -1.1992082e+00
+ -5.0423947e-01
+ -4.8553531e-01
+ 1.2388922e+00
+ 1.5304163e-01
+ 5.6579854e-02
+ 1.8297337e-01
+ -2.0530325e+00
+ -6.1279161e-01
+ 6.4905247e-02
+ -3.7826622e-01
+ -7.0221153e-01
+ 1.1469332e-01
+ -2.5256294e+00
+ -2.0978383e+00
+ -2.3303790e-01
+ -1.7769720e+00
+ -6.1619727e-01
+ -5.0082599e-01
+ -3.4388210e-01
+ 2.8010060e-01
+ 7.0789224e-02
+ 8.0285301e-01
+ -1.6090164e-01
+ 1.0865721e+00
+ 8.1798113e-01
+ 2.1641969e-01
+ 1.9377398e+00
+ -9.8794738e-02
+ 4.9405655e-01
+ 1.1547898e-01
+ 1.3181348e+00
+ -1.2981214e+00
+ -8.9931393e-01
+ -3.1246738e-01
+ -1.3241896e-01
+ -1.8628818e-01
+ -4.9272287e-01
+ -8.5362121e-01
+ -1.5273849e+00
+ -1.6221402e+00
+ 7.8021450e-01
+ -2.0929894e+00
+ 3.0699345e-01
+ 6.8069469e-02
+ 4.6237190e-01
+ -1.0728868e+00
+ 2.4006465e-01
+ 7.2115680e-03
+ 8.2332927e-01
+ -6.0492698e-01
+ 1.8606442e+00
+ 1.0702114e+00
+ 1.8689494e-01
+ 2.8362783e-02
+ -9.4667424e-01
+ 6.0799243e-01
+ 5.4580857e-01
+ 8.5181523e-01
+ -1.7913733e-02
+ 9.0761025e-01
+ -6.0830622e-01
+ -1.5619805e+00
+ -1.0190169e+00
+ 1.4791723e+00
+ 6.4601416e-01
+ -1.2484643e+00
+ -2.4666853e-01
+ 3.3781613e-01
+ -2.6844697e-01
+ 1.5739720e+00
+ -4.9934544e-02
+ -3.1902485e-01
+ -5.5856236e-01
+ -4.3911936e-01
+ -1.1553084e-01
+ -2.0438550e+00
+ 8.6554673e-01
+ -1.6749810e-01
+ 1.6443519e+00
+ 1.1334502e+00
+ -1.1633947e+00
+ 5.6195571e-01
+ -1.0713314e+00
+ -1.0382431e+00
+ -3.5997110e-01
+ -1.4658957e+00
+ -1.1404976e+00
+ 1.4846351e-01
+ -1.2967265e+00
+ -1.5870073e+00
+ 1.4176433e+00
+ 1.0392455e+00
+ 1.1342050e+00
+ 5.2777097e-01
+ -7.0741375e-02
+ 1.3204856e+00
+ 1.6701900e+00
+ -5.1711322e-01
+ 2.0304408e+00
+ -1.6658061e+00
+ -1.5947434e+00
+ -5.8484153e-01
+ -5.2223437e-01
+ 5.1035536e-01
+ 7.1611429e-01
+ -7.1018342e-01
+ 9.5112051e-01
+ 6.9797651e-01
+ -1.4538099e+00
+ 5.8549588e-01
+ 1.0772378e+00
+ -1.0182615e+00
+ -5.5332727e-01
+ 9.9870995e-01
+ 2.1957958e+00
+ -3.4696651e-01
+ -3.2420346e-01
+ 5.2937617e-01
+ -2.5750600e-01
+ -8.6034626e-01
+ -1.2489737e+00
+ -1.6591715e+00
+ 1.8749013e+00
+ 4.1247902e-01
+ 3.1507633e-01
+ 3.3741260e-01
+ -7.9565778e-01
+ 5.3461118e-01
+ 1.1919352e+00
+ -1.6283414e+00
+ 3.6270824e-01
+ 1.6535835e-01
+ 3.0117881e-01
+ -1.0721780e-02
+ 3.9647106e-01
+ -1.1046630e+00
+ 4.9946524e-01
+ 1.9451701e-01
+ -3.5688008e-01
+ 4.8854721e-01
+ -5.3093068e-01
+ -4.7392550e-01
+ 4.5326675e-01
+ -4.3476474e-01
+ -1.5503932e+00
+ -1.6039028e+00
+ -7.8682415e-01
+ 1.8678759e+00
+ 2.2972230e+00
+ -6.6852666e-02
+ -1.5552173e+00
+ 5.0222735e-03
+ 6.8997052e-01
+ 2.5733311e+00
+ 1.7257476e+00
+ -4.0078384e-01
+ -1.1978630e+00
+ -4.9311680e-01
+ -1.1325528e+00
+ 1.3293019e+00
+ -4.2361305e-01
+ -1.7841487e-01
+ -8.7468243e-01
+ 6.5960619e-01
+ -9.2296265e-01
+ 7.2630985e-01
+ -9.9763016e-01
+ 2.7866176e-01
+ -4.8408841e-01
+ 7.3902218e-01
+ -7.3003391e-01
+ -7.2327557e-01
+ -1.0032712e+00
+ -1.2930905e-01
+ -4.9923888e-01
+ -5.5463299e-01
+ 9.3351425e-01
+ 1.2934197e+00
+ -3.5110944e-01
+ 1.9127470e+00
+ 8.4753981e-01
+ 1.7299247e+00
+ -1.0066951e+00
+ -5.0428618e-01
+ 9.3605337e-01
+ 6.6776122e-01
+ 1.3481068e+00
+ 3.4145553e-01
+ 3.6326618e-01
+ -3.1921046e-01
+ -5.4882741e-01
+ 6.4483728e-01
+ 1.8730472e-01
+ -3.6205640e-02
+ 5.0141550e-01
+ -7.5200897e-01
+ -1.0075157e+00
+ 6.6168638e-01
+ 2.8497901e-01
+ -1.7587725e+00
+ -7.4564701e-01
+ -2.0010785e+00
+ 6.8480569e-01
+ 4.6650232e-01
+ 1.5296996e-01
+ 4.8447406e-01
+ -6.6746961e-01
+ -4.7535172e-01
+ 4.9225496e-02
+ 1.0712371e+00
+ 5.4918460e-01
+ -5.4761864e-02
+ 1.1217776e+00
+ -4.6277979e-02
+ -5.9219615e-01
+ 9.0743995e-01
+ 3.1523689e-01
+ -1.0996958e+00
+ -1.0930023e+00
+ -7.3166759e-01
+ 9.0394121e-01
+ 6.0230788e-01
+ 5.5551946e-02
+ -1.7874717e-01
+ 1.9281795e-01
+ 1.3504385e+00
+ 7.5306979e-01
+ -5.3640679e-01
+ -1.8412508e-01
+ 5.3509185e-01
+ -3.7849158e-01
+ 1.1253087e+00
+ 3.5172875e-01
+ 1.4346317e+00
+ -2.3864239e-01
+ -4.0352663e-01
+ 1.9988571e+00
+ -1.5749092e+00
+ -7.5031035e-01
+ 8.3566442e-01
+ 1.2987574e+00
+ -1.1719748e+00
+ 8.1747621e-01
+ 8.0490877e-01
+ 1.3297684e+00
+ 7.7288485e-01
+ 3.5715993e-01
+ -8.0754143e-01
+ 1.3036191e+00
+ 7.3858083e-01
+ -9.2659029e-01
+ 6.4375050e-01
+ -7.3905535e-01
+ -1.3232330e+00
+ -4.3659248e-01
+ 5.0237570e-02
+ 1.1833663e+00
+ -2.2021842e-01
+ 1.2205267e-01
+ 3.4874075e-01
+ -1.1680523e+00
+ -2.9535321e-01
+ -3.3277679e-01
+ -7.2197218e-01
+ -1.1930074e+00
+ -1.1071688e+00
+ -3.3776112e-01
+ -6.5148968e-01
+ 1.4599507e+00
+ -7.1562007e-01
+ 2.6081955e-02
+ -3.7348650e-01
+ 1.5871681e+00
+ 1.4439181e+00
+ -5.6060475e-01
+ 7.2117669e-01
+ -6.4449350e-01
+ 9.1646181e-01
+ 2.1633414e+00
+ -3.5328006e-01
+ -7.8207349e-01
+ -1.2081097e+00
+ 1.1413465e+00
+ 5.6967409e-01
+ 8.4362989e-01
+ -2.3323358e-01
+ -9.0200074e-01
+ -5.8886665e-01
+ -6.1893282e-01
+ -8.8568573e-01
+ 1.3395541e-02
+ -2.8253142e-01
+ 1.1015644e+00
+ -4.9396900e-01
+ 8.0249521e-01
+ -1.0079662e+00
+ 1.9220602e+00
+ 1.6812884e-01
+ -2.6185677e-02
+ -4.0465548e-01
+ -5.3684970e-01
+ -4.8573468e-01
+ -3.5357268e-01
+ 1.2911640e+00
+ 5.3526762e-01
+ 8.2746839e-03
+ -1.0066964e+00
+ -1.6972581e+00
+ 1.8162178e+00
+ -1.4523769e-01
+ -1.3962768e-01
+ -1.1318527e+00
+ 6.1262085e-01
+ -9.0613694e-01
+ 8.8443597e-01
+ -2.3600850e+00
+ 4.2088890e-01
+ 1.8345483e-01
+ 5.0080816e-01
+ -3.3018587e-01
+ -2.4135556e+00
+ -9.6284192e-01
+ 2.7150485e+00
+ 9.7847822e-01
+ -7.9943446e-01
+ 4.8398761e-01
+ 4.6523784e-01
+ -2.4673219e+00
+ -3.1955502e-01
+ -2.0291487e+00
+ 1.1620256e+00
+ 9.4911960e-01
+ 1.4856515e+00
+ 2.0440262e+00
+ 8.0026723e-02
+ -5.2773468e-01
+ 2.9604982e-01
+ 2.1998456e-01
+ -1.6644027e-01
+ -1.8087717e-01
+ -1.0206403e+00
+ 4.5718420e-02
+ -1.3502515e+00
+ 2.6408864e-01
+ 6.1873499e-01
+ 6.7018024e-01
+ 8.9923037e-01
+ 5.2905202e-01
+ 8.8045166e-01
+ -1.2942665e-02
+ -3.8326424e-01
+ 1.3958087e+00
+ -1.8446802e+00
+ -1.1089240e+00
+ -7.9673008e-01
+ 5.8666549e-01
+ -1.3698054e+00
+ -4.4202036e-02
+ 5.0177947e-01
+ -3.3445245e-01
+ 6.7565975e-01
+ 6.3661890e-01
+ 2.3866861e+00
+ -1.4091610e+00
+ -5.3558822e-01
+ 9.7962340e-01
+ -1.5059050e-01
+ -2.5551574e-01
+ -7.0586158e-01
+ 1.1672165e+00
+ 7.7248742e-01
+ 8.7356280e-01
+ 1.9963948e-01
+ -1.7885266e+00
+ 2.1275536e+00
+ -7.9824151e-01
+ 5.5876494e-01
+ 1.5933973e+00
+ 1.5001298e-01
+ -1.1524532e-01
+ 7.1353652e-01
+ -3.4268760e-01
+ -7.2238913e-01
+ -2.2238907e+00
+ -2.0893120e-01
+ 1.5294689e-01
+ 1.5124007e+00
+ 6.9418506e-01
+ 1.0408120e+00
+ -2.1534405e-01
+ 1.3935350e+00
+ 9.2368653e-01
+ -3.4667223e-01
+ 9.4793144e-02
+ -1.4546456e+00
+ -8.6343434e-01
+ 3.5780797e-01
+ -8.1169160e-01
+ -2.0285255e-01
+ 1.2303591e+00
+ -6.9525235e-01
+ -1.1332550e-01
+ -1.0762198e+00
+ 7.3453106e-01
+ 5.5463931e-01
+ -1.5022403e+00
+ -8.6219579e-01
+ -5.5489713e-01
+ -2.6481305e+00
+ -1.2682327e+00
+ -7.8726736e-01
+ 5.5100488e-01
+ -2.2846527e-01
+ -1.1368479e+00
+ -2.5988354e-01
+ 7.4312088e-01
+ -1.3166575e-01
+ -1.3186536e+00
+ 3.0071277e+00
+ 2.4675743e-01
+ 1.5170185e+00
+ 2.6926577e+00
+ 1.2445192e+00
+ -1.1291519e-01
+ -2.0495455e+00
+ -1.5354230e+00
+ -4.6779469e-01
+ 1.4910878e-01
+ 1.8213609e+00
+ 2.3982027e+00
+ 8.5791342e-01
+ -1.2531153e+00
+ -1.9644556e-01
+ 2.2339222e+00
+ 2.2944501e-02
+ -6.4150542e-02
+ -9.8527972e-01
+ 3.4239489e-01
+ -5.4365298e-01
+ 4.3519621e-01
+ 1.1367490e+00
+ 1.7657257e+00
+ -1.6748615e-02
+ 2.4608703e+00
+ 1.8079725e+00
+ -8.4641888e-01
+ 1.6672207e+00
+ 4.8733123e-01
+ -9.1846530e-01
+ 1.2705401e+00
+ 9.4920410e-01
+ 5.9084601e-01
+ 1.0547963e-01
+ -1.0748194e+00
+ 2.4078590e+00
+ 1.2941860e+00
+ 1.7014524e+00
+ 4.9085714e-01
+ -4.0774219e-01
+ 1.1909916e+00
+ -1.3801225e+00
+ 4.5844407e-01
+ -7.2270989e-01
+ 3.0503790e-02
+ 6.6631551e-01
+ 9.3272890e-01
+ -3.5188543e-01
+ -2.9670011e-01
+ -2.5151477e+00
+ -1.4740716e+00
+ 2.0699174e+00
+ 3.5638414e-01
+ 5.5536770e-01
+ -1.2695886e+00
+ -4.0672260e-01
+ -2.0204179e+00
+ -1.6021090e+00
+ -1.5399960e+00
+ -1.9104904e+00
+ -1.3973177e+00
+ -1.2509676e+00
+ -7.9457666e-01
+ 1.2260360e+00
+ 1.9994138e+00
+ -7.9197382e-01
+ 2.9256117e-01
+ -1.6533786e-01
+ -1.1797356e+00
+ -1.0258157e+00
+ -1.8825834e+00
+ 8.7634851e-01
+ -3.0989962e-02
+ 1.0754817e+00
+ -7.5025723e-01
+ -4.0780964e-01
+ 5.3203994e-01
+ -1.9126230e-02
+ 1.4391408e+00
+ -8.7015218e-01
+ 1.4877474e+00
+ -3.3286491e-01
+ -1.4534087e-01
+ -4.5134941e-01
+ -5.4074676e-01
+ 1.6821651e+00
+ -8.0177950e-01
+ 1.2839513e+00
+ -1.4037974e-01
+ -6.8733430e-02
+ 1.4710030e-01
+ -7.3850891e-02
+ -1.3276376e+00
+ -9.9916773e-01
+ 4.3502499e-01
+ -2.8060221e-01
+ 1.8367699e-01
+ 6.7599173e-01
+ 1.4832156e-01
+ -4.3473268e-01
+ -8.3362376e-02
+ 1.3618028e+00
+ 6.7448146e-01
+ 8.0319162e-01
+ 9.0500045e-01
+ 9.5601384e-01
+ -7.6870593e-01
+ 2.4913242e+00
+ -1.5386936e-01
+ 4.1459462e-02
+ -1.5048899e+00
+ 1.0850124e+00
+ 5.7204918e-01
+ 1.9192942e-01
+ 6.1832651e-01
+ 8.6576640e-01
+ 3.5852364e-01
+ -2.5292043e+00
+ -1.0762737e-01
+ -1.6597450e-01
+ 4.3537085e-01
+ -3.0074284e-01
+ 1.4459471e-01
+ 9.6596677e-02
+ -1.7469987e-01
+ 6.7510373e-01
+ 8.4941118e-02
+ 8.7750503e-01
+ -5.9469082e-01
+ 1.5896471e+00
+ -8.5259748e-01
+ -2.8857658e-01
+ -1.4839392e+00
+ -6.4682438e-01
+ 1.2651552e+00
+ 4.7322598e-01
+ -9.5585595e-01
+ 5.0604356e-01
+ -7.2019438e-01
+ -2.1102951e+00
+ -5.4138802e-01
+ 1.9891918e+00
+ 2.1541256e-01
+ -1.9819061e+00
+ 7.1173398e-01
+ 1.9608741e+00
+ -4.1661656e-02
+ -1.5007239e-01
+ 6.0624491e-01
+ -8.3195901e-01
+ 3.0950824e-01
+ 2.5553044e+00
+ -8.7965808e-01
+ 7.4854464e-02
+ 4.1819442e-01
+ 4.4742865e-01
+ 8.7793687e-01
+ -2.0782911e-01
+ -7.4789440e-01
+ -6.3207439e-02
+ -1.9370325e+00
+ -2.1898802e-01
+ 2.2318618e+00
+ -5.6434247e-01
+ 3.7089110e-01
+ 5.1764755e-01
+ 4.0798842e-01
+ 7.8779190e-02
+ -6.4814296e-01
+ 3.6616463e-01
+ 2.5522091e-01
+ 1.7487267e-01
+ 6.2325524e-01
+ -1.7013550e-01
+ -1.1924502e+00
+ -7.7028586e-01
+ 7.1317015e-01
+ 1.0504404e+00
+ -6.3568523e-01
+ -1.3500596e+00
+ -1.0330074e+00
+ 1.0312234e+00
+ 9.3709474e-01
+ 8.0312712e-01
+ 9.9304344e-01
+ -2.9102506e-02
+ 1.6131075e-01
+ 7.3409326e-01
+ 9.4167540e-01
+ 2.6037131e+00
+ -9.8319581e-01
+ 1.1470338e-01
+ 4.4900541e-01
+ -1.1811384e+00
+ -1.5147128e+00
+ 1.6636561e-01
+ -7.2021238e-01
+ -7.6074353e-05
+ -9.7390243e-01
+ -9.9567897e-02
+ 1.0344031e-01
+ -2.2655498e+00
+ 7.7475544e-01
+ -2.0586867e+00
+ 2.6078839e-01
+ 2.2192226e-02
+ 2.3679869e-01
+ 1.5572384e+00
+ -1.5741818e+00
+ -7.0216493e-01
+ -7.7898991e-01
+ 1.5847471e+00
+ 1.3448152e+00
+ 7.2315002e-01
+ -1.5913109e+00
+ -4.7057458e-01
+ 5.3713263e-01
+ 3.6041700e-01
+ -6.6369173e-01
+ 1.5413658e+00
+ -5.8962151e-01
+ 3.9595058e-01
+ 2.0445007e+00
+ 1.7727362e+00
+ -2.0051023e-01
+ 7.7232370e-01
+ 1.7200044e+00
+ -9.7210663e-01
+ 9.8559757e-01
+ 1.9088541e+00
+ 1.0316617e+00
+ 1.2658263e+00
+ 1.4644653e-03
+ -1.3133840e+00
+ -7.4258581e-01
+ 1.5845620e+00
+ 7.3718533e-02
+ 8.4647119e-01
+ -1.0378446e+00
+ -1.8147525e+00
+ -2.0970814e+00
+ 2.8551868e-01
+ -2.1790063e+00
+ 1.4552318e+00
+ 1.1656071e+00
+ 3.0795128e-01
+ 1.0470861e+00
+ -1.0690758e-01
+ -1.8357208e+00
+ -1.2612905e-01
+ -6.7804907e-01
+ 1.2650400e+00
+ 3.4814314e-01
+ 4.1348965e-01
+ -3.7451435e-01
+ -8.9425241e-01
+ 2.8035344e-01
+ -4.3825559e-01
+ 1.3925479e+00
+ -3.6737749e-01
+ -7.9542689e-01
+ -2.1839812e-01
+ 1.0819980e+00
+ -5.6699827e-01
+ -9.5499384e-02
+ -1.4779762e+00
+ 1.2210693e-01
+ -3.8311619e-01
+ -4.4894979e-01
+ 1.4455328e-01
+ 2.7061289e-02
+ -2.5350454e-03
+ 3.0073496e+00
+ 1.0467306e+00
+ 1.6897330e+00
+ 1.6665272e+00
+ -2.8750152e-01
+ -4.8700548e-01
+ -1.6691816e+00
+ -9.7526499e-01
+ -2.8579688e-01
+ -9.2190933e-02
+ 3.2527773e-01
+ 1.5378654e-01
+ -1.1933850e+00
+ -3.3034398e-01
+ 1.7382949e+00
+ -3.0276427e-01
+ -9.2345488e-01
+ -2.5556650e-01
+ 3.3679309e-01
+ -3.8916627e-01
+ -4.2914582e-01
+ -3.4537395e-01
+ 1.1947576e+00
+ 8.4475834e-01
+ -7.5475139e-01
+ -7.5055111e-01
+ -1.7510883e+00
+ 1.1342118e+00
+ -1.0816355e-01
+ -2.4368059e-01
+ 1.8020780e-01
+ -1.3082789e+00
+ -9.2730829e-01
+ 1.8473956e-01
+ -3.2342472e-01
+ -2.0696442e+00
+ -7.7690905e-01
+ 2.6626814e-01
+ 1.0776113e+00
+ 8.9024401e-02
+ 1.4597825e-01
+ -4.8314024e-01
+ 2.1125482e-01
+ 5.4570460e-01
+ -9.0864932e-01
+ 1.0596933e+00
+ -1.6723669e+00
+ -4.6121573e-02
+ -2.3286496e-01
+ 1.6579591e+00
+ -3.1510459e-01
+ 3.2528110e+00
+ -2.7518483e-01
+ -7.2157315e-01
+ 2.3459280e+00
+ -1.8623369e-02
+ -2.5805187e-01
+ 1.4674075e-01
+ -1.0093652e+00
+ -1.4705670e+00
+ -6.4920410e-01
+ 7.0548383e-02
+ 1.1510160e+00
+ 1.2214678e+00
+ 4.8586655e-01
+ 1.2084332e+00
+ 2.6448846e+00
+ 6.5719393e-01
+ 9.7213558e-01
+ -3.0338902e-01
+ 1.2094771e+00
+ -1.1364200e+00
+ -3.3345452e-01
+ -8.6597480e-01
+ -5.6315330e-01
+ 2.0094235e+00
+ -2.0641398e-01
+ -4.2974197e-01
+ 1.0437269e+00
+ -3.1805853e-01
+ 3.2403306e-01
+ 5.5794050e-01
+ -8.7460480e-01
+ -3.5746386e-01
+ 1.9401291e+00
+ 1.3858893e-01
+ 9.1665081e-01
+ 1.2889938e+00
+ 5.8316954e-01
+ 1.2698503e-01
+ 1.2959541e+00
+ -1.2724136e+00
+ 1.2208358e+00
+ -2.1281422e+00
+ -1.2775109e+00
+ -4.3234311e-01
+ -8.6368621e-02
+ -1.6486842e+00
+ 7.8520802e-01
+ -7.7123324e-02
+ -1.1083778e+00
+ -1.2046293e+00
+ -9.7160832e-01
+ -8.4566051e-01
+ -1.2796718e-01
+ -5.4686402e-02
+ -5.9253053e-01
+ -8.5598613e-02
+ -6.5492597e-01
+ 1.7864230e-01
+ 1.5656637e+00
+ 8.7058960e-01
+ -4.1370797e-01
+ 1.4709963e-01
+ -1.6142856e-01
+ -4.3190911e-01
+ -3.1704384e-01
+ 1.1236781e+00
+ -5.5164351e-01
+ 1.9238343e-01
+ 6.2290129e-01
+ -1.0444332e+00
+ -1.5227712e+00
+ 7.7850057e-01
+ 3.9001283e-01
+ -5.3959474e-01
+ 1.1422192e+00
+ 3.2017224e-01
+ -4.1172890e-01
+ -4.4576022e-01
+ -5.0716259e-01
+ -1.1053460e+00
+ 2.7596315e+00
+ -2.2959759e+00
+ 2.7600191e-01
+ 5.7124080e-03
+ -1.2946679e+00
+ -1.4722341e-01
+ 3.9396135e-01
+ 1.0369279e+00
+ 1.1394090e-01
+ 5.8737697e-01
+ 1.7693424e+00
+ -1.0996868e-01
+ -5.7859900e-01
+ -1.4431946e+00
+ 8.5760947e-01
+ -5.1407083e-01
+ 1.4365343e+00
+ 7.2891030e-02
+ -1.3576969e-01
+ -5.6864135e-01
+ -5.2024917e-01
+ -1.2739092e+00
+ 6.0534007e-01
+ -4.2380667e-01
+ 6.4517359e-01
+ -1.7055419e+00
+ 3.4755996e-01
+ -9.2228333e-01
+ -1.5780662e+00
+ -2.3706099e-01
+ 6.2106144e-01
+ 1.0408284e+00
+ 1.2435989e+00
+ -3.8164099e-01
+ -9.6743939e-01
+ 3.0586915e+00
+ -5.5410290e-01
+ -7.1040670e-01
+ 4.7848695e-01
+ -1.0827396e+00
+ -6.7180285e-01
+ -1.5380202e+00
+ -2.0103921e-01
+ -1.1337184e+00
+ 3.9148713e-01
+ 1.8984596e-01
+ -7.2371652e-01
+ -3.8629198e-01
+ -5.7492396e-01
+ 1.6987328e-01
+ -6.5960249e-01
+ 2.7293694e-01
+ -8.5354785e-01
+ 5.9022606e-01
+ -1.6627522e-01
+ -2.0600353e+00
+ 1.9193220e-01
+ 9.5064059e-01
+ 1.2716353e+00
+ 2.3057478e-01
+ 1.4866915e+00
+ 6.9537307e-01
+ 2.1164141e+00
+ 2.6720926e-01
+ 4.8200225e-01
+ 4.3809625e-01
+ 5.6034199e-01
+ 8.3567289e-01
+ 1.0707195e+00
+ -9.9021735e-01
+ -1.2996562e+00
+ 1.3419407e+00
+ 9.7079069e-01
+ -8.4979523e-01
+ -4.9387922e-02
+ 1.8572482e+00
+ -1.1609076e+00
+ 3.3049663e-01
+ -1.3903523e+00
+ 1.7398324e-01
+ 3.0908139e-01
+ -1.8284385e-01
+ 9.4688208e-01
+ -1.3672638e-01
+ 1.1922425e+00
+ 1.1014286e+00
+ -2.7674550e-01
+ 2.6170047e-01
+ 2.1152209e-01
+ 9.7143830e-01
+ 1.2501602e+00
+ 7.9766188e-01
+ 2.7899755e-02
+ -8.9040584e-01
+ -1.2894539e+00
+ 1.1050777e+00
+ 2.0056996e+00
+ 2.7237922e-01
+ -6.8548344e-02
+ 9.4055839e-01
+ -1.6864145e+00
+ -2.6015488e-01
+ -2.0053683e+00
+ 4.2975712e-01
+ 2.9374624e-02
+ 3.3015136e-01
+ -4.2923103e-01
+ -1.8710105e+00
+ 9.9816837e-01
+ -6.5605915e-01
+ 1.8046059e-01
+ 9.5503147e-01
+ 5.7545540e-01
+ -8.2948015e-01
+ -2.6046473e-01
+ -2.1653662e-01
+ 9.9529663e-01
+ 1.2916626e+00
+ -1.0654210e+00
+ -1.0194381e+00
+ 1.3138487e-01
+ -1.2038000e-03
+ 2.0219423e-01
+ -1.0525190e+00
+ -1.3452304e+00
+ -7.9278989e-02
+ 1.2416265e+00
+ 6.3567115e-01
+ -1.1878394e-01
+ -3.8456210e-01
+ -1.1263222e+00
+ 9.0383371e-01
+ 8.5881799e-01
+ -1.6623214e-01
+ 3.8942096e-01
+ 2.7396943e-01
+ 9.3150310e-01
+ 1.6483895e+00
+ -1.7665450e+00
+ -3.0843480e-01
+ -8.0881759e-02
+ -1.2815926e+00
+ -2.9144528e-01
+ 8.1624868e-01
+ -7.6055019e-01
+ -2.1092229e+00
+ -1.0233038e+00
+ 2.8861036e-01
+ -7.6500362e-01
+ 9.5127646e-01
+ -5.5997452e-01
+ 2.3227359e-01
+ -5.9858673e-01
+ 6.3413170e-01
+ -1.6455747e+00
+ 1.6476934e+00
+ -2.1946822e-01
+ -1.3843862e-01
+ -1.4308814e+00
+ -1.6345002e-03
+ -7.0544055e-02
+ -1.2097457e+00
+ 5.9862123e-01
+ 2.0194693e+00
+ 1.1948856e+00
+ -6.3161812e-02
+ 5.5974371e-01
+ 2.1500148e-01
+ 4.2203862e-01
+ -2.0716303e+00
+ -9.0964451e-01
+ -2.8527502e-01
+ 6.3634874e-01
+ 3.6623325e-01
+ -1.0243679e-01
+ -2.1672384e+00
+ -1.4302718e+00
+ 1.3435930e+00
+ 1.3804724e-01
+ 1.7499128e-02
+ -3.3849541e-01
+ 2.9153450e+00
+ -6.8693469e-01
+ -1.4236379e-01
+ 5.3876181e-01
+ 1.3282234e+00
+ -1.3104018e-01
+ 9.7013225e-01
+ 9.9857124e-01
+ 2.6285052e-01
+ -1.3183349e+00
+ 8.0647026e-01
+ 1.0434415e-01
+ 1.5567019e+00
+ -8.4178586e-01
+ -3.4837322e-03
+ -5.0506339e-01
+ -1.8451229e+00
+ -1.0525271e+00
+ -1.9628364e+00
+ 1.6968672e+00
+ 2.4264373e-01
+ 6.0269731e-01
+ 2.0677181e-01
+ 1.1232577e+00
+ 1.5197555e+00
+ -4.0614530e-01
+ -9.6616622e-01
+ 1.1088181e+00
+ 2.2532815e+00
+ -2.1988394e-01
+ -7.6108310e-01
+ 3.3448177e-01
+ -9.4411190e-01
+ -7.7986630e-01
+ 6.7844785e-01
+ -2.1996474e-01
+ 5.2864800e-01
+ -5.0380723e-01
+ 5.8741882e-01
+ 3.4405039e-01
+ 5.1955364e-01
+ 1.1771975e+00
+ 8.7521628e-01
+ -1.5440495e+00
+ 1.8288448e+00
+ -1.2453374e+00
+ -1.7680161e+00
+ 9.5916498e-01
+ -7.8267374e-01
+ -1.8993805e+00
+ -4.3281035e-02
+ 1.8434865e+00
+ 8.9775368e-01
+ 6.9499801e-01
+ -1.0705170e+00
+ -8.0791956e-01
+ 9.2459777e-01
+ 1.3292460e+00
+ 1.1161258e+00
+ 5.5772359e-01
+ -1.0223957e+00
+ -1.8541531e-01
+ 1.2346408e+00
+ 1.4159910e+00
+ 4.0442777e-01
+ 1.1399499e-01
+ 3.5141198e-01
+ -4.6849077e-01
+ 8.6608792e-01
+ 2.3563688e-01
+ 4.8197878e-01
+ -1.3877921e-01
+ 3.3029412e-01
+ -6.0974770e-01
+ 1.6248130e+00
+ -2.6876484e-01
+ 7.1945123e-01
+ -1.9433802e+00
+ 1.0083910e+00
+ -3.5634750e-01
+ 6.3336075e-01
+ -4.1595132e-01
+ 6.9558371e-01
+ -5.2294893e-01
+ -4.2020575e-01
+ -9.5681584e-01
+ -1.4952893e+00
+ 4.3614500e-01
+ 1.1196578e+00
+ 1.6831509e-01
+ -6.5017989e-01
+ -1.1401968e+00
+ -9.7121141e-01
+ 1.7920707e+00
+ 1.0843040e-01
+ -1.0753746e+00
+ -1.1145431e+00
+ -7.3902032e-01
+ -2.1035790e-01
+ 2.0430438e+00
+ 5.0995314e-02
+ -1.2417222e+00
+ -7.2082453e-01
+ -9.8142155e-01
+ 1.3615246e+00
+ 2.0354990e+00
+ 1.5637746e+00
+ -3.3550140e-01
+ 1.2277799e+00
+ -3.5126458e-02
+ -1.2119138e-01
+ -1.0793063e+00
+ -2.3875061e-01
+ -7.7292534e-01
+ -2.2342569e-01
+ -6.2907779e-01
+ -3.2695152e-01
+ -1.5754350e+00
+ 5.4153802e-01
+ -1.2718197e+00
+ 3.4682392e-01
+ -6.1524860e-01
+ -8.3818393e-01
+ -1.8481410e+00
+ -2.9712279e-01
+ 9.2328461e-01
+ 1.6867230e+00
+ 5.4728745e-01
+ -1.2643712e+00
+ -2.0959144e-01
+ 1.1097976e+00
+ 5.1165706e-01
+ -6.1548325e-01
+ 2.3624142e-01
+ 9.0895407e-01
+ -3.7813365e-01
+ -7.4248117e-01
+ -8.0007488e-01
+ 5.2261550e-01
+ 5.0046530e-01
+ -4.8137074e-01
+ -1.5091492e+00
+ 1.1366395e-01
+ -2.6447162e-01
+ 8.4827957e-02
+ 1.4253947e+00
+ 3.0619471e-01
+ -8.2956573e-01
+ 2.1469768e+00
+ -6.7052530e-01
+ -4.9043315e-01
+ 5.5425713e-01
+ -1.3666960e+00
+ 1.4032331e-01
+ -3.9547130e-02
+ 2.0627195e+00
+ 1.2516545e+00
+ 3.9572182e-01
+ -1.0870702e+00
+ 5.2062296e-01
+ -3.5659969e-01
+ -5.2625412e-01
+ -1.8595048e+00
+ -2.2905802e+00
+ 3.4707260e-01
+ 4.5031121e-01
+ -3.7801863e-01
+ 6.3488393e-01
+ 3.1672938e-01
+ -1.3865547e+00
+ -1.2284838e+00
+ 1.1772833e+00
+ 4.5814815e-01
+ -3.1811635e-01
+ -1.0458822e+00
+ 2.5870851e-01
+ 2.4557075e-01
+ -1.8521146e+00
+ 9.4300881e-01
+ 6.1106544e-02
+ 3.3441699e-01
+ -1.3209247e+00
+ 1.6472339e+00
+ 8.3594464e-01
+ -8.2600352e-01
+ -2.0408848e-01
+ -6.1613953e-01
+ 4.1626923e-01
+ 8.0718428e-01
+ 3.6855420e-01
+ 4.7315517e-01
+ 5.3582624e-01
+ -1.0805360e+00
+ 7.1284964e-01
+ -8.7175396e-01
+ 6.1536323e-01
+ -1.0943510e+00
+ 1.0999106e+00
+ 4.2017691e-01
+ 7.9247736e-01
+ -6.7504410e-01
+ 7.8472798e-01
+ -7.5255754e-01
+ -3.7310503e-01
+ -2.7068859e-01
+ 5.1124283e-01
+ 1.2797396e+00
+ -2.3413977e-01
+ -2.0657834e-01
+ 3.0834838e-01
+ -6.7275746e-01
+ 1.4549955e+00
+ 1.0545370e+00
+ 9.4236492e-01
+ -4.6378129e-01
+ -1.5842231e+00
+ -8.6463338e-01
+ 4.2562059e-01
+ -6.3777896e-01
+ 3.1088415e-01
+ -6.7470709e-01
+ 2.0176272e-01
+ -1.8657000e-01
+ 3.9377690e-01
+ -1.6666277e+00
+ 1.3172984e+00
+ -1.9843712e-01
+ 3.8441723e-01
+ 1.8591752e+00
+ 1.0938580e-02
+ 1.1463209e+00
+ -3.2788813e-01
+ 1.0261127e+00
+ 4.6526090e-01
+ 8.6795702e-03
+ -2.8429835e-01
+ 5.5383412e-01
+ -9.3695653e-01
+ -9.1492264e-01
+ 9.8048978e-01
+ 6.5810058e-01
+ 5.6754461e-01
+ -3.8926975e-01
+ 1.0686149e-02
+ -1.4628151e+00
+ -1.3049282e+00
+ 4.1449655e-01
+ -1.0731036e+00
+ 1.3671472e-01
+ -1.5581760e+00
+ -4.4644622e-01
+ -9.3870019e-01
+ 5.5632807e-01
+ 9.3990378e-03
+ 2.7234567e-01
+ -1.1460350e+00
+ -1.1883139e+00
+ -1.2577979e+00
+ 1.0708310e+00
+ 6.0297618e-01
+ 1.8784120e-01
+ -7.8888755e-01
+ -1.0757188e+00
+ 9.9130314e-01
+ 4.9675948e-01
+ -1.0979177e+00
+ 1.6485794e+00
+ -1.7640636e+00
+ 3.2548931e-01
+ 6.7487708e-01
+ 1.5340542e-01
+ -9.6480317e-01
+ 2.5331817e-01
+ -2.1183956e-01
+ 2.0196345e-01
+ -3.1503036e-01
+ 5.1371783e-01
+ -5.0150871e-01
+ -1.2992986e+00
+ 9.0961515e-01
+ 9.7671188e-01
+ 8.3914362e-01
+ -1.6022925e+00
+ 4.4183083e-01
+ -1.0853775e+00
+ 8.9310509e-01
+ 9.4576653e-01
+ 1.0142658e+00
+ 1.8177369e+00
+ -1.4267701e+00
+ 3.8697955e-01
+ 1.5780750e+00
+ 3.1841756e-02
+ 2.7299881e-02
+ -7.0114259e-01
+ 1.1091989e+00
+ 2.6586032e-01
+ 1.2117969e+00
+ -1.0323327e+00
+ -8.3080100e-01
+ 4.2126425e-02
+ 1.9374961e-01
+ -9.4879641e-01
+ 3.6957487e-01
+ -2.7815589e-01
+ 1.2718530e+00
+ 5.5363215e-02
+ 2.6324562e-01
+ -8.9491253e-01
+ -1.6750152e+00
+ -2.3246005e+00
+ 2.0092164e+00
+ 5.9549030e-01
+ 1.4857513e+00
+ -1.4679767e-01
+ -1.5617935e+00
+ -1.1380196e+00
+ -1.1818844e+00
+ -2.4044195e+00
+ 6.8544550e-01
+ -9.5148770e-01
+ 2.9706640e-01
+ 1.4505042e-01
+ -6.6765340e-01
+ 1.2689995e+00
+ 3.1147217e-01
+ -1.5310910e+00
+ -8.7283366e-02
+ 2.9656659e-01
+ -5.0196154e-01
+ 3.3483803e-01
+ 1.2732431e+00
+ 4.4360685e-01
+ 1.1035161e+00
+ 1.9212764e+00
+ 1.6630420e+00
+ 3.5132398e-01
+ 1.6305756e+00
+ -1.5362317e+00
+ 3.9289158e-02
+ 6.3066760e-01
+ 3.4040399e-01
+ -2.7180181e-01
+ -2.1067345e+00
+ 3.6511907e-02
+ -1.2498194e+00
+ -6.1838478e-01
+ 8.3119009e-01
+ -8.5002321e-01
+ 8.4307520e-01
+ -7.6824240e-01
+ 1.9464174e+00
+ 1.0478513e+00
+ -1.1142999e+00
+ 7.4086218e-01
+ 2.2696286e+00
+ -2.6488482e+00
+ -4.8722764e-01
+ -1.2804448e+00
+ 3.3786665e-01
+ 8.7915723e-01
+ 1.9530471e-01
+ 7.4083740e-03
+ 3.3189421e-01
+ -1.0639290e+00
+ -1.0119263e+00
+ 7.7645349e-01
+ -5.4008462e-01
+ 1.5081790e+00
+ 1.0147125e+00
+ -9.5926939e-01
+ 3.7049304e-01
+ 7.2605916e-01
+ 1.9438611e-01
+ -5.8855255e-01
+ 1.0400252e+00
+ 3.1086259e+00
+ 7.0700543e-02
+ 5.2166200e-01
+ 1.6170399e+00
+ -4.5675649e-01
+ -8.5010076e-01
+ 1.5671387e-01
+ -2.1711186e+00
+ -8.4986679e-01
+ -9.0465406e-01
+ 1.0178386e+00
+ -5.1293623e-01
+ -9.0290094e-01
+ -5.1296649e-01
+ -5.5600808e-01
+ 1.2284372e+00
+ -3.5975600e-01
+ -9.7868020e-01
+ 7.2348947e-01
+ 3.9962264e-01
+ 7.6718031e-01
+ -5.9946482e-01
+ -1.3661750e+00
+ 2.7324115e-01
+ -5.4929775e-02
+ -5.2625552e-02
+ -4.7261139e-01
+ 3.5454331e-01
+ 9.4028684e-02
+ -1.8251896e-01
+ -3.5849803e-01
+ -2.4296102e+00
+ 1.2287271e+00
+ 7.6134034e-01
+ -5.9030794e-02
+ 2.3125366e+00
+ 1.2193902e+00
+ -5.3418245e-01
+ -1.5906536e+00
+ -1.0786839e+00
+ -1.1539462e+00
+ 5.2480698e-01
+ 8.3188792e-02
+ 1.4683427e+00
+ -1.1912019e+00
+ 2.9988324e-01
+ 2.0339361e-01
+ -4.0841148e-01
+ -1.2537027e+00
+ 1.0349469e+00
+ 2.0301310e+00
+ 8.8437760e-01
+ 6.7114745e-01
+ -1.2084166e+00
+ 6.0934981e-01
+ 1.5005422e+00
+ 8.7597005e-01
+ 1.4935774e-01
+ -2.8847804e-01
+ 5.8453239e-01
+ -1.0157663e+00
+ -1.3921606e+00
+ -1.6931218e+00
+ -2.9526952e-01
+ -8.4449479e-01
+ 1.2027360e+00
+ -1.6890500e-01
+ 8.3210820e-01
+ -2.2296251e+00
+ -6.2647213e-01
+ -9.5545263e-01
+ 8.0160437e-01
+ 4.9347233e-01
+ 2.8890319e+00
+ 1.9846412e+00
+ 1.4732473e+00
+ -4.1145440e-01
+ -2.7134556e+00
+ 5.8967586e-01
+ -6.6298090e-02
+ -2.8514956e-01
+ 1.6934824e+00
+ -3.0528759e+00
+ -5.0285706e-01
+ -2.0731144e+00
+ -1.2730868e+00
+ 4.0675325e-01
+ 1.0016520e+00
+ -2.9812281e-01
+ -8.3469490e-01
+ 1.6493271e+00
+ 4.6649228e-01
+ 9.3053051e-01
+ 1.1099870e+00
+ 1.3409435e+00
+ 2.5729334e+00
+ 7.5233055e-01
+ 7.0797593e-01
+ 3.6913187e-01
+ 5.9675112e-01
+ -1.9996841e-02
+ 8.5953981e-03
+ 2.4475943e-01
+ -2.2756522e+00
+ 1.2096802e+00
+ 6.9998986e-01
+ 3.1359737e-01
+ 8.2206869e-01
+ -5.4588352e-01
+ -9.6681027e-01
+ 6.0270575e-01
+ 1.1538140e+00
+ 5.7567969e-01
+ -2.9767919e-01
+ -1.5260615e+00
+ 9.2286524e-01
+ 5.8898058e-01
+ 1.3635026e+00
+ 5.2944814e-01
+ -3.8091083e-01
+ 4.7910413e-01
+ 2.3098045e-01
+ -1.4222204e+00
+ -3.9390964e-01
+ -6.2850763e-01
+ -5.1178061e-01
+ -2.7057728e-01
+ -9.3410904e-01
+ 2.4480795e-01
+ 3.3088914e-01
+ -4.2251544e-01
+ -4.1229293e-01
+ 1.8621545e+00
+ 1.4064748e+00
+ -1.0813430e+00
+ 6.0636373e-01
+ -4.7759091e-01
+ -3.7941816e-01
+ -7.4906997e-01
+ -1.4850859e+00
+ 1.1905076e+00
+ -1.9303139e+00
+ -1.2291323e-01
+ 2.2575685e-01
+ -1.6586112e+00
+ 8.4435837e-01
+ 1.9534632e-01
+ -1.8120413e-01
+ -5.1518293e-01
+ -2.9578347e-01
+ 6.4384475e-01
+ -1.8825410e+00
+ 4.6140878e-01
+ -1.4320158e+00
+ -1.0697638e-01
+ 1.1140628e+00
+ 1.0382575e+00
+ -8.9085937e-01
+ 3.0692158e-01
+ -1.2781398e+00
+ -7.0951197e-02
+ 1.2712536e+00
+ -1.8636018e+00
+ 1.7429525e+00
+ 7.2671571e-01
+ -1.3272840e+00
+ 1.7800341e+00
+ 6.4987019e-01
+ 9.0242833e-01
+ 3.0364259e-01
+ -4.4153907e-02
+ 1.1639628e+00
+ -1.1468061e+00
+ -1.7075536e+00
+ -1.9748947e-01
+ -4.5874796e-02
+ -1.0010385e+00
+ 2.2688069e-01
+ 6.9851266e-01
+ 9.6544045e-01
+ 1.3140925e+00
+ -1.6566112e-01
+ -4.6646403e-01
+ -1.4083637e-01
+ -4.1449345e-01
+ -8.5291447e-02
+ 1.0180422e+00
+ -8.8556020e-02
+ -2.6912634e-03
+ -1.4240030e+00
+ -9.1996500e-01
+ 1.9581902e+00
+ -4.5269472e-01
+ -2.2467498e+00
+ -2.4478289e-01
+ -1.2233457e+00
+ -7.3665783e-01
+ 4.5612893e-01
+ 1.4031737e+00
+ 1.1844029e+00
+ -1.6980611e+00
+ 1.7556123e+00
+ -1.6619224e+00
+ 1.7207524e+00
+ -8.9145738e-01
+ -2.5264038e-01
+ 2.6869682e+00
+ 6.2371841e-01
+ 1.8775344e+00
+ 2.6958646e-01
+ 2.4458825e+00
+ 2.4512987e-01
+ -3.4136931e-01
+ -2.1345966e+00
+ 1.3318091e+00
+ 5.0027958e-01
+ -2.4796347e-01
+ 1.7015712e+00
+ 1.7245307e+00
+ -9.9039490e-01
+ -2.9582811e-01
+ -1.3097497e+00
+ 9.4677301e-01
+ -2.7383693e-01
+ 3.5000440e-01
+ -4.5099830e-01
+ 9.3015933e-01
+ 2.4467244e-01
+ 3.7984443e-01
+ 1.3243017e+00
+ -1.6034640e-01
+ -2.2662823e+00
+ 9.3046864e-01
+ 4.6879237e-01
+ 5.1928879e-01
+ 5.3642289e-01
+ 8.2740168e-01
+ 1.2195680e+00
+ 1.0785078e-01
+ -6.8918081e-01
+ 1.2869712e+00
+ -4.3814058e-01
+ -9.0359021e-01
+ 8.9327689e-01
+ 9.8926344e-01
+ -4.9375235e-01
+ 1.1085127e+00
+ 3.1397743e-01
+ 1.8984340e+00
+ 9.9482174e-03
+ -2.4166537e-02
+ 7.4987903e-02
+ 2.2165658e+00
+ -4.7985882e-01
+ -2.3299553e-01
+ 3.2366453e-01
+ 4.9631167e-01
+ -1.0928019e+00
+ -5.2860849e-01
+ -1.6137808e+00
+ -7.8802094e-01
+ -1.5327541e-01
+ -5.6569348e-01
+ -2.1950106e+00
+ -2.3892055e-01
+ -1.1735585e+00
+ -1.0243865e+00
+ 2.4311868e-02
+ -2.2478353e-01
+ -1.0290868e-01
+ 1.5651311e-01
+ 1.7281640e-01
+ -5.8114483e-01
+ 1.0851151e+00
+ 1.9996380e+00
+ -1.2963699e+00
+ -1.2227464e+00
+ -1.8556410e-01
+ -2.1573013e+00
+ -5.6943844e-01
+ -2.2750598e+00
+ -9.3374217e-01
+ -1.3124017e+00
+ 2.6599597e-01
+ -3.8280419e-01
+ 3.4479620e-01
+ 7.9693459e-01
+ 9.3181768e-01
+ -1.1804510e+00
+ 1.1751492e+00
+ -2.3443928e-01
+ 1.3002394e+00
+ 1.0851546e+00
+ -4.5224597e-01
+ 1.8315411e+00
+ 1.1523255e+00
+ 2.8881086e-01
+ -4.2626546e-01
+ 3.2004214e-01
+ 1.6424274e+00
+ -7.8933851e-01
+ -9.2502402e-01
+ 3.4886105e-01
+ 4.4174021e-01
+ 7.9433720e-01
+ 5.6734419e-01
+ -1.0198975e+00
+ 2.1631870e+00
+ 7.3864819e-01
+ 3.9889889e-01
+ 5.2136905e-01
+ 5.5997400e-01
+ 8.6321272e-01
+ 5.9880989e-01
+ -4.5306198e-01
+ -8.1080506e-01
+ -1.5015045e+00
+ -9.8894613e-01
+ -7.1425299e-01
+ 1.5805310e+00
+ 9.5174077e-01
+ 6.7133315e-01
+ 1.3588310e+00
+ 8.7480587e-01
+ -4.0605398e-01
+ -1.1332710e+00
+ 6.3021385e-01
+ 1.6018221e+00
+ -1.6712484e+00
+ -1.0209680e+00
+ -1.7237164e+00
+ -8.4682831e-01
+ -1.1018661e+00
+ 1.6699498e+00
+ -7.1008674e-01
+ -9.7067890e-01
+ 6.8924357e-01
+ 1.1433338e+00
+ -1.2612761e+00
+ -7.3185674e-01
+ -6.5652974e-01
+ -4.0317865e-01
+ -1.1328765e-01
+ -2.0016368e-01
+ -8.6560013e-02
+ 2.0660815e-01
+ 7.1665475e-02
+ 1.2991876e-02
+ 7.7639405e-01
+ -5.4624320e-01
+ 2.0747261e-01
+ 7.9131769e-02
+ -1.8642335e+00
+ 3.0189050e-01
+ -6.3519876e-01
+ 1.5972204e-01
+ -5.1722668e-01
+ 1.0582584e+00
+ -9.2733126e-01
+ -1.0122943e+00
+ -6.0425681e-01
+ -4.3346072e-01
+ 5.4545469e-01
+ -2.6702417e-01
+ -1.9055693e+00
+ 1.1856835e+00
+ -3.5366991e-01
+ 1.0261048e-02
+ -5.0538338e-01
+ 3.9151801e-01
+ -2.7578263e-01
+ -7.3930076e-01
+ -5.3639002e-01
+ 2.4090855e+00
+ -1.0003617e-01
+ -4.3339303e-01
+ -6.3052566e-01
+ 4.2858102e-01
+ -3.3146374e-01
+ 6.0939196e-01
+ 2.9882157e-01
+ -1.7094561e-01
+ -9.1920473e-01
+ 8.6229657e-01
+ 7.3724959e-01
+ -2.9491907e-01
+ -1.1483825e+00 \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/test-tikzscale.pdf b/graphics/pgf/contrib/tikzscale/test-tikzscale.pdf
new file mode 100644
index 0000000000..3822448fc3
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/test-tikzscale.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzscale/test-tikzscale.tex b/graphics/pgf/contrib/tikzscale/test-tikzscale.tex
new file mode 100644
index 0000000000..efcfd66d55
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/test-tikzscale.tex
@@ -0,0 +1,96 @@
+\documentclass[twocolumn]{article}
+
+\usepackage{lua-visual-debug}
+\usepackage{tikzscale}
+\usepackage{tikz}
+\usepackage{pgfplots}
+\usepackage{tikz-3dplot}
+\usepackage{currfile}
+\usepackage{lmodern}
+% Use the package ifpdf to share one test document between pdflatex and latex
+\usepackage{ifpdf}
+% Load the MWE package, although its functionality is not needed. The loading highlights, that some graphics used below are part of the MWE package.
+\usepackage{mwe}
+
+\usetikzlibrary{external}
+\tikzexternalize
+% \tikzexternalize[mode=list and make]
+% \tikzexternaldisable % activate this line and test without "shell-escape" and without \tikzexternalenable below
+\ifpdf
+\else
+ \tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"; dvips -o "\image".ps "\image".dvi}}
+\fi
+
+\begin{document}
+ \section*{Tests}
+ \begin{itemize}
+ \item Test that with externalization, no picture is generated multiple times.
+ \item Test that there are no warnings with and without using externalization.
+ \item Test with \texttt{pdflatex} and \texttt{latex} and do not forget to use \texttt{dvips}.
+ \item Normal input command\\%
+ \input{testRectangle.tikz}%
+ \item Use includegraphics with file ending\\%
+ \includegraphics{testRectangle.tikz}%
+ \item Use includegraphics without file ending\\%
+ \includegraphics{testRectangle}%
+ \item Use includegraphics with scaling to the column's width\\%
+ \includegraphics[width=\linewidth]{testRectangle}%
+ \item Use includegraphics with scaling to a dimension\\%
+ \includegraphics[width=5cm]{testRectangle}%
+ \item Use includegraphics with scaling while having column width already\\%
+ \includegraphics[width=\linewidth]{linewidth}%
+ \item Use \texttt{input} with pgfplots\\%
+ \input{pgfplots-test.tikz}%
+ \item Use pgfplots without optional parameter\\%
+ \includegraphics{pgfplots-test}%
+ \item Use pgfplots with given width and height\\%
+ \includegraphics[width=\linewidth,height=0.3\linewidth]{pgfplots-test}%
+ \item Use includegraphics with only a node\\%
+ \includegraphics{testNode.tikz}%
+% \item Use includegraphics with scaling only a node results in an error\\%
+% \includegraphics[width=\linewidth]{testNode.tikz}%
+ \ifpdf
+ \item Use includegraphics with jpg\\%
+ \includegraphics{example-grid-100x100bp.jpg}%
+ \item Use includegraphics with pdf\\%
+ \includegraphics{example-grid-100x100bp.pdf}%
+ \item Use includegraphics with png\\%
+ \includegraphics{example-grid-100x100bp.png}%
+ \item Use includegraphics with pdf and scaling\\%
+ \includegraphics[width=0.3\linewidth]{example-grid-100x100bp.pdf}%
+ \item Use includegraphics with column width\\%
+ \includegraphics[width=\linewidth]{example-grid-100x100bp.jpg}%
+ \item Input a 2D pgfplots\\
+ \input{testgraphic2D.tikz}%
+ \item Use includegraphics with a two dimensional plot\\%
+ \includegraphics{testgraphic2D.tikz}%
+ \item Use includegraphics with a scaled two dimensional plot with line width and an axis ratio of 1\\%
+ \includegraphics[width=\linewidth,axisratio=1]{testgraphic2D.tikz}%
+ \item Use includegraphics with a scaled two dimensional plot with given height and an axis ratio of 0.5\\%
+ \includegraphics[height=\linewidth,axisratio=0.5]{testgraphic2D.tikz}%
+ \item Use includegraphics with a scaled two dimensional plot with given height and an axis ratio of 0.5 and temporarily deactivated externalization\\%
+ \tikzexternaldisable
+ \includegraphics[height=\linewidth,axisratio=0.5]{testgraphic2D.tikz}%
+ \tikzexternalenable
+ \item Use includegraphics with a scaled two dimensional plot with given height and an axis ratio of 0.5 again\\%
+ \includegraphics[height=\linewidth,axisratio=0.5]{testgraphic2D.tikz}%
+ \item Use includegraphics with a scaled two dimensional plot with line width and a default axis ratio\\%
+ \includegraphics[width=\linewidth]{testgraphic2D.tikz}%
+ \item Input a two dimensional plot with a tight frame with width \newlength{\mylen}\settowidth{\mylen}{\frame{\input{testgraphic2D.tikz}}}\the\mylen\\%
+ \frame{\input{testgraphic2D.tikz}}
+ \item Use a two dimensional plot with a tight frame with width \settowidth{\mylen}{\frame{\includegraphics{testgraphic2D.tikz}}}\the\mylen\\%
+ \frame{\includegraphics{testgraphic2D.tikz}}
+ \else
+ \item Use includegraphics with eps (this is not found within dvi, even without tikzscale)\\%
+ \includegraphics{example-grid-100x100bp.eps}%
+ \item Use includegraphics with eps and full path (this is not shown, even without tikzscale)\\%
+ \includegraphics{/usr/share/texlive/texmf-dist/tex/latex/mwe/example-grid-100x100bp.eps}%
+ \fi
+ \item Use includegraphics with a histogram of a normal distribution\\%
+ \includegraphics[width=\linewidth,height=0.5\linewidth]{histogramNormal}%
+ \item {Use \texttt{\textbackslash graphicspath} with superfluous space\graphicspath{{somefolder} } (only defined locally for the current item)
+ \includegraphics{testRectangle.tikz}}%
+ \item Use a tikz-3Dplot, which is known to have a different size after externalization compared to the measurements without externalization and is thus rebuilt every time if the counter-measurements are not successful.\\%
+ \includegraphics[width=\linewidth]{3Dplot}
+ \end{itemize}
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/testNode.tikz b/graphics/pgf/contrib/tikzscale/testNode.tikz
new file mode 100644
index 0000000000..92a327bd81
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/testNode.tikz
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \node[draw] (0,0) {Node};
+\end{tikzpicture} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/testRectangle.tikz b/graphics/pgf/contrib/tikzscale/testRectangle.tikz
new file mode 100644
index 0000000000..d5748e450e
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/testRectangle.tikz
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+\draw (0,0) -- (1,1) (0,1) -- (1,0);
+\end{tikzpicture}% \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/testgraphic2D.tikz b/graphics/pgf/contrib/tikzscale/testgraphic2D.tikz
new file mode 100644
index 0000000000..1808a353fc
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/testgraphic2D.tikz
@@ -0,0 +1,7 @@
+\begin{tikzpicture}
+ \begin{axis}[%
+ xmin=-25, xmax=25,
+ ymin=-2500, ymax=2500]
+ \addplot graphics [xmin=-25, xmax=25, ymin=-2500, ymax=2500] {example-grid-100x100bp.png};
+ \end{axis}
+\end{tikzpicture}% \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/tikzscale.dtx b/graphics/pgf/contrib/tikzscale/tikzscale.dtx
new file mode 100644
index 0000000000..2eee518e3f
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/tikzscale.dtx
@@ -0,0 +1,1637 @@
+% \iffalse meta-comment
+% !TEX program = pdfLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+----------------------------------------------------------------
+tikzscale --- Absolute resizing of TikZ pictures and PGF plots without
+ scaling text
+E-mail: pat_h@web.de Released under the LaTeX Project
+Public License v1.3c or later See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+The tikzscale package extends the includegraphics command to support
+tikzpictures. It allows scaling of TikZ images and PGFPlots to a provided
+width or height without changing the text size.
+
+Usage: \usepackage{tikzscale}
+
+As an example write
+\includegraphics{myTikZFile.tikz}
+instead of
+\includegraphics{myJPEGFile.jpeg},
+with myTikZFile.tikz being the file name of a text file containing
+everything from \begin{tikzpicture} to \end{tikzpicture}. To actually
+do some scaling of the included TikZ file, give either an absolute width
+or an absolute height in the optional argument, e.g.
+\tikzscale@includetikz[width=0.5\linewidth]{myTikZFile.tikz}.
+If the file contains a plot created with the PGFPlots package, set both
+width and height via the optional argument, e.g.
+\tikzscale@includetikz[width=\linewidth,height=0.4\linewidth]{myPGFPlot.tikz}.
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+tikzscale --- Absolute resizing of TikZ pictures and PGF plots without scaling text
+E-mail: pat_h@web.de
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2012 by Patrick Häcker <pat_h@web.de>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Patrick Häcker.
+
+This work consists of the file tikzscale.dtx
+and the derived files tikzscale.ins,
+ tikzscale.pdf and
+ tikzscale.sty.
+
+\endpostamble
+\usedir{tex/latex/tikzscale}
+\generate{
+ \file{tikzscale.sty}{\from{tikzscale.dtx}{package}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/tikzscale}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/tikzscale}
+\generate{
+ \file{README.txt}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tikzscale}[2013/05/22 v0.2.6 tikzscale LaTeX package]
+\RequirePackage{graphicx}
+\RequirePackage{etoolbox}
+\RequirePackage{pgfkeys}
+\RequirePackage{xparse}
+\RequirePackage{letltxmacro}
+\RequirePackage{xstring}
+%</package>
+%<*driver>
+\documentclass{ltxdoc}
+% \documentclass{ydoc}
+\usepackage[utf8]{inputenx}
+\usepackage[T1]{fontenc}
+\usepackage{subfig}
+\usepackage{booktabs}
+\usepackage{tabulary}
+\usepackage{tikzscale}
+\usepackage{tikz}
+\usepackage{pgfplots}
+% Load the MWE package, although its functionality is not needed. The loading highlights, that some graphics used below are part of the MWE package.
+\usepackage{mwe}
+\usepackage{xcolor}
+\usepackage{lmodern}
+\usepackage{amsmath}
+\usepackage{cleveref}
+\usepackage[numbered]{hypdoc}
+\hypersetup{pdftitle=The tikzscale package}
+\newcommand{\cell}[2][c]{%
+ \begin{tabular}[#1]{@{}c@{}}#2\end{tabular}%
+}
+\newcommand{\rcell}[2][c]{%
+ \begin{tabular}[#1]{@{}r@{}}#2\end{tabular}%
+}
+% \usepackage{ydoc-desc}
+% \optionaloff % otherwise the optional arguments are displayed lighter as the normal text
+\def\xcmd#1{%
+ \cmd#1%
+ \futurelet\tmp\arglook%
+}
+\def\arglook{%
+ \let\next\relax
+ \ifx[%
+ \tmp%
+ \let\next\xoarg%
+ \fi
+ \ifx\bgroup%
+ \tmp%
+ \let\next\xmarg%
+ \fi
+ \ifx(%
+ \tmp%
+ \let\next\xparg%
+ \fi
+ \next
+}
+
+\def\xoarg[#1]{%
+ \oarg{#1}\futurelet\tmp\arglook%
+}
+\def\xmarg#1{%
+ \marg{#1}\futurelet\tmp\arglook%
+}
+\def\xparg(#1){%
+ \parg{#1}\futurelet\tmp\arglook%
+}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%\GetFileInfo{\jobname.sty}
+%
+%\title{^^A
+% \textsf{tikzscale} --- Absolute resizing of TikZ pictures and PGF plots without scaling text\thanks{^^A
+% This file describes version \fileversion, last revised \filedate.^^A
+% }^^A
+%}
+%\author{^^A
+% Patrick Häcker\thanks{E-mail: pat\_h@web.de}^^A
+%}
+%\date{Released \filedate}
+%
+%\maketitle
+%
+%\changes{v0.1}{2012/10/31}{First public release}
+%\changes{v0.1.1}{2012/11/02}{Fix some bugs, increase robustness, regenerate externalized files less often}
+%\changes{v0.1.2}{2012/11/02}{Fix whitespace issues}
+%\changes{v0.1.3}{2012/11/02}{Fix error when loading TikZ but not PGFPlots; Fix error when scaling complicated TikZ graphics}
+%\changes{v0.2}{2013/01/02}{Add default axis ratio; save axis ratio; support \cmd{\externaldisable} and \cmd{\externalenable}; improve robustness; increase speed}
+%\changes{v0.2.1}{2013/01/09}{Fix graphics with data from text file due to wrong line breaks; fix plain old \LaTeX support}
+%\changes{v0.2.2}{2013/01/13}{Fully support plain (dvi) \LaTeX; mind graphicspath}
+%\changes{v0.2.3}{2013/01/23}{Fix graphicspath bug; fix endlinechar bug, improve compatibility with beamer}
+%\changes{v0.2.4}{2013/03/10}{Fix another graphicspath bug; support Beamer's \cmd{\pause} command}
+%\changes{v0.2.5}{2013/03/30}{Do not accidently activate externalization}
+%\changes{v0.2.6}{2013/05/22}{Fix whitespace issue; correctly scale with externalization even if it scales incorrectly}
+% \section{Introduction}
+% When dealing with graphics, there are different scaling demands. For \emph{absolute} scaling, a width and/or height is given. Opposed to that, for relativ scaling, a horizontal and/or vertical scaling factor is needed. This package only is about absolute scaling of tikzpicture environments. The different absolute scaling demands and their solutions are shown in table \ref{scalingDemands}.
+% \begin{table}
+ % \centering
+ % \caption[Graphic scaling methods.]{Absolute graphic scaling methods. If multiple methods are available, the most native one is shown. Methods which \textcolor{orange}{approximate} the scaling are shown in orange text color. \textcolor{blue}{Recommended} methods are shown in blue textcolor.}%^^A Note, that the first three methods in each table are absolute ones, whereas the last three methods are relative ones.}%
+ % \label{scalingDemands}
+ % \subfloat[Scaling with scaled text and line widths.]{^^A
+ % \begin{tabular}{rccc}%^^A{1.1\linewidth}{RCCC}
+ % \toprule
+ % scale & Images & TikZ/PGFPlots\\
+ % \midrule
+ % \rcell{to width\\proportionally} & \textcolor{blue}{\cell{\cmd{\includegraphics}\\\texttt{[width=\emph{unit}]}}} & \cell{\cmd{\resizebox}\\\texttt{\{\emph{width}\}\{!\}}}\\[0.8em]
+ % \rcell{to width\\keeping height} & \cell{\cmd{\resizebox}\\\texttt{\{\emph{width}\}\{\cmd{\height}\}}} & \cell{\cmd{\resizebox}\\\texttt{\{\emph{width}\}\{\cmd{\height}\}}}\\[0.8em]
+ % \rcell{to height\\proportionally} & \textcolor{blue}{\cell{\cmd{\includegraphics}\\\texttt{[height=\emph{unit}]}}} & \cell{\cmd{\resizebox}\\\texttt{\{!\}\{\emph{height}\}}}\\[0.8em]
+ % \rcell{to height\\keeping width} & \cell{\cmd{\resizebox}\\\texttt{\{\cmd{\width}\}\{\emph{height}\}}} & \cell{\cmd{\resizebox}\\\texttt{\{\cmd{\width}\}\{\emph{height}\}}}\\[0.8em]
+ % \rcell{to width\\and height} & \cell{\cmd{\includegraphics}\\\texttt{[width=\emph{unit},height=\emph{unit}]}} & \cell{\cmd{\resizebox}\\\texttt{\{\emph{width}\}\{\emph{height}\}}}\\
+ %^^A horizontally & \cell{\cmd{\scalebox}\\\texttt{\{\emph{factor}\}[1]}} & \cell{\texttt{[transform canvas=}\\\texttt{\{xscale=\emph{factor}\}]}} & \texttt{[xscale=\emph{factor}]}\\[0.8em]
+ %^^A vertically & \cell{\cmd{\scalebox}\\\texttt{\{1\}[\emph{factor}]}} & \cell{\texttt{[transform canvas=}\\\texttt{\{yscale=\emph{factor}\}]}} & \texttt{[yscale=\emph{factor}]}\\[0.8em]
+ %^^A proportionally & \cell{\cmd{\scalebox}\\\texttt{\{\emph{factor}\}}} & \cell{\texttt{[transform canvas=}\\\texttt{\{scale=\emph{factor}\}]}} & \texttt{[scale=\emph{factor}]}\\
+ % \bottomrule
+ % \end{tabular}
+ % }\\%
+ % \subfloat[Scaling with unscaled text and line widths without tikzscale.]{^^A
+ % \begin{tabulary}{1.1\linewidth}{RCCC}
+ % \toprule
+ % scale & Images & TikZ & PGFPlots\\
+ % \midrule
+ % \rcell{to width\\proportionally} & -- & -- & \textcolor{orange}{\texttt{[width=\emph{unit}]}}\\[0.8em]
+ % \rcell{to width\\keeping height} & -- & -- & --\\[0.8em]
+ % \rcell{to height\\proportionally} & -- & -- & \textcolor{orange}{\texttt{[height=\emph{unit}]}}\\[0.8em]
+ % \rcell{to height\\keeping width} & -- & -- & --\\[0.8em]
+ % \rcell{to width\\and height} & -- & -- & \textcolor{orange}{\texttt{[width=\emph{unit},height=\emph{unit}]}}\\
+ %^^A horizontally & -- & \texttt{[xscale=\emph{factor}]} & --\\
+ %^^A vertically & -- & \texttt{[yscale=\emph{factor}]} & --\\
+ %^^A proportionally & -- & \texttt{[scale=\emph{factor}]} & --\\
+ % \bottomrule
+ % \end{tabulary}
+ % }\\%
+ % \subfloat[Scaling with unscaled text and line widths with tikzscale.]{^^A
+ % \begin{tabulary}{1.1\linewidth}{RCCC}
+ % \toprule
+ % scale & Images & TikZ & PGFPlots\\
+ % \midrule
+ % \rcell{to width\\proportionally} & -- & \textcolor{blue}{\cell{\cmd{\includegraphics}\\\texttt{[width=\emph{unit}]}}} & \textcolor{blue}{\cell{\cmd{\includegraphics}\\\texttt{[width=\emph{unit}]}}}\\[0.8em]
+ % \rcell{to width\\keeping height} & -- & -- & --\\[0.8em]
+ % \rcell{to height\\proportionally} & -- & \textcolor{blue}{\cell{\cmd{\includegraphics}\\\texttt{[height=\emph{unit}]}}} & \textcolor{blue}{\cell{\cmd{\includegraphics}\\\texttt{[height=\emph{unit}]}}}\\[0.8em]
+ % \rcell{to height\\keeping width} & -- & -- & --\\[0.8em]
+ % \rcell{to width\\and height} & -- & -- & \textcolor{blue}{\cell{\cmd{\includegraphics}\\\texttt{[width=\emph{unit},height=\emph{unit}]}}}\\
+ %^^A horizontally & -- & \texttt{[xscale=\emph{factor}]} & --\\
+ %^^A vertically & -- & \texttt{[yscale=\emph{factor}]} & --\\
+ %^^A proportionally & -- & \texttt{[scale=\emph{factor}]} & --\\
+ % \bottomrule
+ % \end{tabulary}
+ % }
+% \end{table}
+%
+% The tikzscale package adds and improves certain forms of absolute scaling for TikZ and PGFPlots, respectively. These scaling methods are the ones which are most useful, maybe even the only ones which are needed. During the scaling, the text sizes and line widths are left unscaled, which avoids inconsistency and visual distraction. PGFPlots itself can scale absolutely, but an approximation is used to achieve that. The tikzscale package uses optimization algorithms and warns if the scaling is not exact.
+%
+% Using tikzscale all relevant scaling methods share the same user interface with the well known \cmd{\includegraphics} command, enabling some of its features like automatic file extension detection for TikZ and PGFPlots, too. Furthermore, the \cmd{\includegraphics} command is improved to look-up relative paths in the correct subdirectory, if a \LaTeX\ project is organized in subdirectories.
+%
+% Relative scaling methods are mostly useless, as the sizes of the used images are often arbitrary, either determined by some resolution for rastered images or some arbitrary unit vector size for vector images, TikZ and PGFPlots. For traditional images and TikZ pictures, only proportional scaling methods giving either a width or a height make sense, as otherwise they get heavily distorted if the original aspect ratio is changed. As PGFPlots can handle different aspect ratios and aspect ratios are normally not predefined for plots, its requirement is the opposite: Both width and height are needed to avoid getting arbitrary sizes. For some special plots, the axis ratio can be given, as well. These requirements lead to the marked blue colors in table \ref{scalingDemands}.
+%
+% \section{Usage and Examples}
+% Loading the tikzscale package without loading other packages, does not do anything useful.
+%
+% \subsection{TikZ}
+% If the tikzscale and the tikz packages are loaded, the \cmd{\includegraphics} command can be used to input and scale a tikzpicture environment located in a separate file.
+%
+% As an example create the following .tex-file.
+%
+% \vspace{0.5em}
+% \noindent\cmd{\documentclass\{minimal\}}\\
+% \cmd{\usepackage\{tikz\}}\\
+% \cmd{\usepackage\{tikzscale\}}\\
+% \cmd{\begin\{document\}}\\
+% \indent\texttt{\cmd{\includegraphics}[width=0.5\cmd{\linewidth}]\{linewidth.tikz\}}\\
+% \cmd{\end\{document\}}
+% \vspace{0.5em}
+%
+% Furthermore create the following .tikz-file and save it as linewidth.tikz in the same directory as the above .tex-file.
+%
+% \vspace{0.5em}
+% \noindent\cmd{\begin\{tikzpicture\}}\\
+% \indent\texttt{\cmd{\draw} (0,0) -- node \{center\} (\cmd{\linewidth},1);}\\
+% \cmd{\end\{tikzpicture\}}
+% \vspace{0.5em}
+%
+% The result of the complied .tex-file should look like this.\\%^^A
+%\noindent\includegraphics[width=0.5\linewidth]{linewidth.tikz}
+%
+% So although the original tikzpicture itself has the width of a complete line, it gets proportionally scaled down to half the width while being loaded from the \cmd{\includegraphics} command. Neither the line's thickness nor the text \texttt{center} are scaled. Compare the output to\\
+% \indent\texttt{\cmd{\input}\{linewidth.tikz\}}\\
+% \input{linewidth.tikz}\\
+% and\\
+% \indent\texttt{\cmd{\resizebox}\{0.5\cmd{\linewidth}\}\{!\}\{\cmd{\input}\{linewidth.tikz\}\}}\\
+% \resizebox{0.5\linewidth}{!}{\input{linewidth.tikz}}\\
+% to see tikzscale's benefit.
+%
+% \subsection{PGFPlots}
+% \subsubsection{Scaling of width and height}
+% If the pgfplots package is loaded together with the tikzscale package, the user interface is the same. Instead of giving either a width or a height, both have to be given for pgfplots. Otherwise a default axis ratio is assumed (see section \ref{axisRatio}).\\
+% So,\nopagebreak
+%
+% \vspace{0.5em}
+% \cmd{\input\{pgfplots-test.tikz\}}
+%
+% \vspace{0.5em}
+% \texttt{\cmd{\begin}\{tikzpicture\}\cmd{\begin}\{axis\}[width=3cm,height=2cm] \dots}
+% \vspace{0.5em}
+%
+% \noindent becomes
+%
+% \vspace{0.5em}
+% \cmd{\includegraphics[width=3cm,height=2cm]\{pgfplots-test.tikz\}}
+%
+% \vspace{0.5em}
+% \texttt{\cmd{\begin}\{tikzpicture\}\cmd{\begin}\{axis\} \dots}.
+% \vspace{0.5em}
+%
+% The benefit is a more accurate scaling algorithm, as the scaling with PGFPlots can be quite coarse. Another win is the unified interface, which simplifies the sharing of plots between projects enormously, as one file and thus one plot can be included in different projects with different sizes.
+%
+% \subsubsection{Scaling using axis ratio}\label{axisRatio}
+% The scaling described in the previous section scales the whole plot including all axis descriptions and legends to the given width and height. It can thus happen, that the plotted figure has a different size ratio than expected, if the x and y descriptions have different sizes as shown in figure \ref{width=height}.
+% \begin{figure}
+% \centering
+% \frame{\includegraphics[width=0.4\linewidth,height=0.4\linewidth]{testgraphic2D.tikz}}
+% \caption{Using options \texttt{width=0.4\cmd{\linewidth}} and \texttt{height=0.4\cmd{\linewidth}} results in an overall quadratic graphic with overall width and height set to 40\% of the linewidth.}
+% \label{width=height}
+% \end{figure}
+% Sometimes, the x-axis and the y-axis should have a specific ratio, e.g. being equal, ignoring the axis description and other things. This is normally achieved by using PGFPlots' option \texttt{scale only axis}. Unfortunately, if this option would be used, a plot might be unsharable between two projects, if they have different requirements for the axis ratio. Thus, this option should not be used in such a case.
+%
+% Instead, in \cmd{\includegraphics} there is a new option \texttt{axisratio} which must be used together with either width or height. It scales the whole plot including the axis description to the given width or height as in figure \ref{axisratio} while keeping the graphical part at a given axis ratio, where the ratio is defined by width divided by height. The graphical part is thus not quadratic in general. If \texttt{axisratio} is omitted, i.e. only either height or width are given, it is assumed to be \texttt{1}.
+% \begin{figure}
+% \centering
+% \frame{\includegraphics[width=0.4\linewidth,axisratio=1]{testgraphic2D.tikz}}
+% \caption{Using options \texttt{width=0.4\cmd{\linewidth}} and \texttt{axisratio=1} results in an quadratic graphic area with overall width set to 40\% of the linewidth. The height follows from these constraints, so that the overall plot is not quadratic in general.}
+% \label{axisratio}
+% \end{figure}
+
+
+%
+% \subsection{Hints for TikZ and PGFPlots}
+% The whole tikzpicture environment must be in a separate file. This allows sharing of graphics between different \TeX\ projects and a unified user interface via \cmd{\includegraphics}. Having tikzpicture environments directly in a .tex-file is not supported, i.e.\ they do not benefit from the tikzscale package. Multiple tikzpicture environments in one .tikz-file are not supported, either. Put things which always belong together in a shared tikzpicture environment and things which might be used separately in the future in separate files for code sharing across projects. The file ending may be ommited in the \cmd{\includegraphics} command, if it is one of .tikz, .TIKZ, .TikZ, .pgf or .PGF. At the moment, use only \emph{either} width \emph{or} height for normal (i.e.\ non-PGFPlots) tikzpicture environments and use width \emph{and} height or one of both optionally together with \emph{axisratio} for tikzpicture environments containing a PGFPlots' axis environment.
+%
+% \subsection{currfile}
+% If the tikzpicture package is loaded together with the \href{http://www.ctan.org/pkg/currfile}{currfile} package, another feature is activated. Suppose you have your project organized in the following directory tree with \textcolor{blue}{directories} shown in blue color:
+%
+% \vspace{0.5em}
+% \noindent \textcolor{blue}{projectDirectory}\\
+% \indent main.tex\\
+% \indent \textcolor{blue}{firstChapter}\\
+% \indent\indent firstChapter.tex\\
+% \indent\indent firstGraphicOfFirstChapter.jpeg\\
+% \indent\indent secondGraphicOfFirstChapter.tikz\\
+% \indent \textcolor{blue}{secondChapter}\\
+% \indent\indent secondChapter.tex\\
+% \indent\indent firstGraphicOfSecondChapter.tikz\\
+% \indent\indent secondGraphicOfSecondChapter.jpeg
+% \vspace{0.5em}
+%
+% Further suppose the chapter.tex files are \cmd{\input}ted in main.tex. Calling\\
+% \cmd{\includegraphics\{firstGraphicOfFirstChapter.jpeg\}}\\
+% in firstChapter.tex normally does not work. The reason is that the\\
+% \cmd{\input\{firstChapter.tex\}}\\
+% command in main.tex copies the content of firstChapter.tex into main.tex, so when the \cmd{\includegraphics} command is called, it is called from within projectDirectory, thus the relative path lookup of firstGraphicOfFirstChapter.jpeg fails. Instead the command\\
+% \cmd{\includegraphics\{firstChapter/firstGraphicOfFirstChapter.jpeg\}}\\
+% can be used (example for a Unix system), but this is tedious and counter-intuitive.
+%
+% If both tikzscale and currfile are loaded, the limitation is fixed, so that both \cmd{\includegraphics} commands succeed. Note, that this functionality supports the traditional graphic formats, too, and is also available without loading the TikZ or PGFPlots packages, although the package's name might imply otherwise.
+%
+% \section{Compatibility}
+%
+% \subsection{Load Order}
+% There is no constraint regarding the load order known, yet. TikZ, PGFPlots and currfile might all be loaded or not in all possible combinations and orders before or after tikzscale.
+%
+% Using both the externalization library and tikzscale seems to have a race condition when a makefile is used with multiple jobs (-j$X$ with $X > 1$). The probability of getting errors increases with the number of jobs. For $X = 1$, obviously, no race condition could be observed. You should either avoid using mode \emph{list and make} or have only one job if you want to be on the safe side.
+%
+% Using \cmd{\tikzexternalenable} or \cmd{\tikzexternaldisable} inside of a tikzpicture leads to undefined behaviour when using tikzscale. It's not clear, what the correct behaviour should be and what the externalization library does withouth tikzscale.
+%
+% Note, that there was a \href{http://tex.stackexchange.com/a/88158/7323}{bug} in the externalization library, which has been fixed on 25th of December in 2012, so you might want to use a more recent version of TikZ or PGFPlots.
+%
+% \subsection{Externalization library}
+% TikZ' externalization library is supported. Its use is highly recommended, as tikzscale renders some graphics multiple times to get the correct size. The savings by using the externalization library can thus be huge.
+%
+% \subsection{Fitting library}
+% Due to a \href{http://sourceforge.net/tracker/index.php?func=detail&aid=2991312&group_id=142562&atid=752792}{known bug in the fitting library}, nodes with a \texttt{fit} option also need a \texttt{transform shape} option in order to be scalable. If they are not scalable, they normally do not contain the nodes as specified when tikzscale is used.
+%
+% \section{Further Ideas}
+% \begin{itemize}
+% \item With careful considerations, it should be possible to reduce the average number of needed figure renderings, which should speed-up runs with very complicated figures.
+% \item Add the external file optimization loop to axis ratio and pgfplots, as well.
+% \item It might be a good idea to use the file names as figure names, but probably only if the name was not already set by the user. Additionally, there must be taken care to not try to write into a directory where there is no write access (e.g. reading a graphic from a system wide TeX installation)
+% \item if graphic files are located in a subdirectory, the externalized files should also be in that subdirectory.
+% \item allow in-file graphics by redefining the tikzpicture environment and accepting tikzscale and tikz options. The tikzscale options are evaluated using key filtering (tikz library) and the tikz options are forwarded.
+% \item the package can test if a pgfplot is used (needed if normal TikZ graphics should be stretchable) by changing \cmd{\tikzscale@width} and or \cmd{\tikzscale@height} and measuring. If nothing changes, it must be a normal tikzpicture (the argument does not hold the other way round).
+% \item it may be better to use the \href{http://tex.stackexchange.com/a/22957}{depth as well}
+% \item The final sizing parameters should be saved per figure in the aux file. The first rendering each run should be performed with the aux file's parameters into an sbox. The scaling algorithms should only be called, if the sizing requirements are not met. The purpose is similar to the externalization library.
+% \item Using something like [x=5pt] as an argument to the axis environment, e.g. to scale the units in bar plots, is problematic, as tikzscale changes the behaviour, i.e. stops the scaling.
+% \end{itemize}
+%
+% \section{Contributions}
+% \begin{itemize}
+% \item Jake
+% \begin{itemize}
+% \item Encouraged the author to create this package.
+% \end{itemize}
+% \item Dr.\ Christian Feuersänger
+% \begin{itemize}
+% \item Encouraged the author to create this package and created PGFPlots.
+% \item Answered many questions and had a lot of good ideas regarding the externalization and beyond.
+% \item Fixed problems in the externalization library when used with tikzscale.
+% \end{itemize}
+% \item David Carlisle
+% \begin{itemize}
+% \item Created the \cmd{\xcmd} macro for this package, which is used in the documentation.
+% \end{itemize}
+% \item Prof. Kai Arzheimer
+% \begin{itemize}
+% \item Reported a bug when not using TikZ without PGFPlots, which lead to a fix.
+% \item Reported a bug that a non-existent macro is used, which lead to a fix.
+% \end{itemize}
+% \item devendra
+% \begin{itemize}
+% \item Reported bugs when using the externalization library together with tikzscale, which lead to a fix.
+% \item Reported a problem when using data files, which lead to a fix regarding \cmd{\endlinechar}.
+% \end{itemize}
+% \item Mohammad Reza Keshtkaran
+% \begin{itemize}
+% \item Reported a bug when using plain old \LaTeX with an eps file, which lead to a fix.
+% \item Reported another bug when using plain old \LaTeX, which lead to some rework to fully support \LaTeX without additional code.
+% \item Reported a bug when using \cmd{\graphicspath}, which lead to a fix.
+% \item Reported the bug when using \cmd{\graphicspath} again, which lead to a correct fix even if currfile is not used.
+% \end{itemize}
+% \item Andreas Tharang
+% \begin{itemize}
+% \item Reported that the beamer class is incompatible with tikzscale, which lead to a change in tikzscale to fix this incompatibility.
+% \item Reported that the fitting library is incompatible with tikzscale due to a bug in the fitting library, which lead to a note in the documentation.
+% \item Created tests to improve the compatibility between beamer and tikzscale, which lead to support of Beamer's \cmd{\pause} command.
+% \end{itemize}
+% \item Klaus Pribil
+% \begin{itemize}
+% \item Reported an incompatibility with the pdfpages package, which lead to a fix in tikzscale.
+% \end{itemize}
+% \item Christoph Schmidpeter
+% \begin{itemize}
+% \item Reported a problem when accidently adding a superfluous space into the graphics path, which lead to a detection and fix of that case in tikzscale.
+% \end{itemize}
+% \item Jose Hissa Ferreira
+% \begin{itemize}
+% \item Reported a bug when using a graphics path with multiple path entries, which lead to a fix.
+% \end{itemize}
+% \end{itemize}
+%
+%
+% \section{Implementation}
+% The basic idea is to first get the correct file name (i.e. find the path and the file extension), then determine the graphic type (i.e. TikZ or something else) and call either the original includegraphics command or the tikzscale command. Tikzpictures are then plotted into an invisible box and their size is measured. If their measured size differs from the requested size, they are replotted with corrected parameters to get the requested size. The correctly sized plots are then really plotted.
+%
+% \iffalse
+%<*package>
+% \fi
+% \makeatletter
+%
+% This command draws the plot's border at the right text border, so that thick points or label descriptions can reach into the margin. This should be limited to PGFPlots only if activated.
+%^^A \tikzset{every picture/.style={trim axis right}}
+%
+% With the option below, the labels can be moved a bit to the left so that they reach to the text margin.
+% yticklabel style={align=right,inner sep=0pt,xshift=-0.1cm}
+%
+%\begin{macro}{\pgfmathsetglobalmacro}
+% This is a general command, which might be useful for inclusion into the tikz package. It works similar to \cmd{\pgfmathsetglobalmacro} but has global scope.
+% \begin{macrocode}
+\def\pgfmathsetglobalmacro#1#2{%
+ \pgfmathparse{#2}%
+ \global\let#1\pgfmathresult%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifTikzLibraryLoaded}
+% This is a general command, which might be useful for inclusion into the tikz package. This is taken from \href{http://tex.stackexchange.com/a/48472}{stackexchange} and simplified.
+% \begin{macrocode}
+\def\ifTikzLibraryLoaded#1#2#3{%
+ \ifcsdef{tikz@library@#1@loaded}{%
+ #2%
+ }{%
+ #3%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifExternalizationLoaded}
+% \begin{macrocode}
+\def\ifExternalizationLoaded#1#2{%
+ \ifTikzLibraryLoaded{external}{#1}{#2}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ifedefequal}
+% \xcmd\ifedefequal{first expression}{second expression}{true}{false}
+% This is a general command, which might be useful for inclusion into the etoolbox package. It executes the true code if both expressions expand to the same and otherwise the false code. This test is often wanted, as the order of the arguments is not important and it does not matter if the user saves a value in another macro without expanding it.
+% \begin{macrocode}
+\def\ifedefequal#1#2{%
+ \edef\etoolbox@ifedefequal@first{#1}%
+ \edef\etoolbox@ifedefequal@second{#2}%
+ \ifdefequal{\etoolbox@ifedefequal@first}{\etoolbox@ifedefequal@second}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\edocsvlist}
+% This is a general command, which might be useful for inclusion into the etoolbox package. It works similar to \cmd{\docsvlist} but expands its argument similar to \cmd{\def} vs.\ \cmd{\edef}, which is useful if the list is stored in a macro/variable.
+% \begin{macrocode}
+\def\edocsvlist#1{%
+ \edef\tikzscale@edocsvlist{#1}%
+ \expandafter\docsvlist\expandafter{\tikzscale@edocsvlist}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\eforcsvlist}
+% This is a general command, which might be useful for inclusion into the etoolbox package. It works similar to \cmd{\forcsvlist} but expands its argument similar to \cmd{\def} vs.\ \cmd{\edef}, which is useful if the list is stored in a macro/variable.
+% \begin{macrocode}
+\def\eforcsvlist#1#2{%
+ \edef\tikzscale@eforcsvlist{#2}%
+ \expandafter\forcsvlist\expandafter{\expandafter#1\expandafter}\expandafter{\tikzscale@eforcsvlist}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\forgrouplist}
+% This is a general command, which might be useful for inclusion into the etoolbox package. It works similar to \cmd{\forcsvlist} but uses TeX groups to separate elements instead of a comma separated list.
+% \begin{macrocode}
+\def\forgrouplist#1#2{%
+% \end{macrocode}
+ % Use \cmd{\grouplistbreak} instead of \cmd{\forcsvlist}'s \cmd{\listbreak}, because the function given in the first argument can contain a call to \forcsvlist. In this case \cmd{\listbreak} is executed, although no break has been called, which lead to an error in the program, if \cmd{\listbreak} were used.
+% \begin{macrocode}
+ \def\grouplistbreak{\def\breakFor{}}%
+ \tikzscale@forGroupListElement{#1}#2\tikzscale@endList%
+% \end{macrocode}
+ % Delete \cmd{\breakFor} in case it has been set.
+% \begin{macrocode}
+ \undef\breakFor
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@forGroupListElement}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@forGroupListElement}{mgu{\tikzscale@endList}}{%
+% \end{macrocode}
+ % Only do list processing if \cmd{\listbreak} has not been called.
+% \begin{macrocode}
+ \ifundef{\breakFor}{%
+ \IfValueTF{#2}{%
+ #1{#2}%
+ \tikzscale@forGroupListElement{#1}#3\tikzscale@endList%
+ }{%
+ #1{#3}%
+ }%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\eforgrouplist}
+% This is a general command, which might be useful for inclusion into the etoolbox package. It works similar to \cmd{\forgrouplist} but expands its argument similar to \cmd{\def} vs.\ \cmd{\edef}, which is useful if the list is stored in a macro/variable.
+% \begin{macrocode}
+\def\eforgrouplist#1#2{%
+ \edef\tikzscale@grouplist{#2}%
+ \expandafter\forgrouplist\expandafter{\expandafter#1\expandafter}\expandafter{\tikzscale@grouplist}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@trim}
+% These is a general command to trim leading and trailing spaces, which might be useful for inclusion into another package taken from the following \href{http://www.matijs.net/blog/2006/07/20/how-to-trim-spaces-in-tex}{homepage}.
+% \begin{macrocode}
+\def\tikzscale@trim#1{%
+ \ignorespaces#1\unskip
+}%
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\tikzscale@trimMacro}
+ % A possible present leading or trailing space in the macro's content is removed from the macro.
+% \begin{macrocode}
+\def\tikzscale@trimMacro#1{%
+ \expandafter\IfBeginWith\expandafter{#1}{ }{%
+ \expandafter\StrGobbleLeft\expandafter{#1}{1}[#1]%
+ }{}%
+ \expandafter\IfEndWith\expandafter{#1}{ }{%
+ \expandafter\StrGobbleRight\expandafter{#1}{1}[#1]%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\elseif}
+% This macro provides a conditional which supports an if with an arbitrary amount of elseif (none is also ok) and an optional else. With a simplified syntax (remove the tests and the grouping) this would be worth a separate package.
+% \begin{macrocode}
+\NewDocumentCommand{\elseif}{mm}{%
+ \ifboolexpr{#1}{%
+ #2%
+ \elseif@absorb
+ }{%
+ \elseif@optional
+ }%
+}
+\NewDocumentCommand{\elseif@optional}{gg}{%
+ \IfValueTF{#1}{%
+ \IfValueTF{#2}{%
+ \ifboolexpr{#1}{%
+ #2%
+ \elseif@absorb
+ }{%
+ \elseif@optional
+ }%
+ }{%
+ #1%
+ }%
+ }{}%
+}
+\NewDocumentCommand{\elseif@absorb}{g}{%
+ \IfValueTF{#1}{%
+ \elseif@absorb
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}
+% This command is from \href{http://tex.stackexchange.com/a/63248/7323}{Bruno Le Floch}.
+% \begin{macrocode}
+\ExplSyntaxOn
+\NewDocumentCommand{\IfNoValueOrSplitEmptyTF}{mmm}{
+ \ifboolexpr{test {\IfNoValueTF{#1}} or test {\tl_if_eq:nnTF{#1}{{}}}}{
+ #2
+ }{
+ #3
+ }
+}
+\ExplSyntaxOff
+%\end{macro}
+%
+%\begin{macro}
+ % The check \cmd{\tikzifexternalizehasbeencalled} from file tikzexternalshared.code.tex is not exactly what is needed in tikzscale, as it always stays true after it has been set by \cmd{\tikzexternalize}. Instead, add a check whether externalization is active and set it to false if externalization has not been loaded for simplification. Thus, whether externalization is active can be checked without checking if it has been loaded at all. The initial state of \cmd{\tikzscale@externalizationActive} is not trivially known, as an arbitrary combination and order of \cmd{\tikzexternaldisable} and \cmd{\tikzexternalenable} commands could have been used before the end of the preamble. In the long run, tikzexternalshared.code.tex should offer that check. Until then, we can check whether \cmd{\tikz}=\cmd{\tikzexternal@origtikz} (i.e. externalization disabled) or \cmd{\tikz}=\cmd{\tikzexternal@tikz@replacement} (i.e. externalization enabled) holds (if neither of both holds, this indicates a problem, e.g. another package redefining the command). This is, of course, only needed if the externalization library has been loaded at all. Please note, the implementation of this check as a macro is possible, because tikzscale redefines tikzpicture, whereas the externalization library redefines tikz, so there is no conflict.
+% \begin{macrocode}
+\def\tikzscale@ifExternalizationActive#1#2{%
+ \ifExternalizationLoaded{%
+ \ifdefequal{\tikz}{\tikzexternal@tikz@replacement}{%
+ #1%
+ }{%
+ \ifdefequal{\tikz}{\tikzexternal@origtikz}{%
+ }{%
+ \PackageWarning{tikzscale}{Status of externalization is unknown, thus I assume it is deactivated.}%
+ }%
+% \end{macrocode}
+ % It's important, that this code is below the above code, as the below code can change the meaning of \cmd{\tikz} through side effects.
+% \begin{macrocode}
+ #2%
+ }%
+ }{%
+ #2%
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@debug}
+% Activate and deactivate debugging by commenting and uncommenting the folowing code.
+% \begin{macrocode}
+% \def\tikzscale@debug#1{%
+% \PackageWarning{tikzscale}{#1}%
+% }
+\def\tikzscale@debug#1{}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\activatetikzscale}
+% \begin{macrocode}
+\AtEndPreamble{%
+% \end{macrocode}
+ % Add the TikZ file extensions to the \href{http://tex.stackexchange.com/a/45502}{graphicx file extensions}.
+% \begin{macrocode}
+ \def\tikzscale@tikzFileExtensions{.tikz,.TIKZ,.TikZ,.pgf,.PGF}%
+% \def\tikzscale@tikzFileExtensions{.tikz,.TIKZ,.TikZ,.pgf,.PGF,.tex,.TEX}%
+ \DeclareGraphicsExtensions{\tikzscale@tikzFileExtensions,\Gin@extensions}%
+% \end{macrocode}
+% Save the \cmd{\includegraphics} \href{ftp://ftp.tu-chemnitz.de/pub/tex/macros/latex/required/graphics/grfguide.pdf}{command}.
+% \begin{macrocode}
+ \LetLtxMacro{\tikzscale@oldincludegraphics}{\includegraphics}%
+% \end{macrocode}
+ % Activate the enhanced includegraphics command at end of preamble, so that no other package is interfering (besides on purpose).
+% \begin{macrocode}
+ \tikzscale@useEnhancedIncludegraphics
+% \end{macrocode}
+ % Also patch tikzpicture environment to temporarily deactivate the enhanced includegraphics command inside the tikzpicture environment in case the tikzpicture environment is called directly (without includegraphics being called) and loading another graphic (like a PNG file inside of a pgfplot).
+% \begin{macrocode}
+ \tikzscale@patchTikzpictureIncludegraphics
+% \end{macrocode}
+ % As \cmd{\endtikzpicture} does not seem to be redefined, patch it here (once) to activate tikzscale's \cmd{\includegraphics} again. This is probably not necessary, but might be handy if there are two tikzpicture environments in one includegraphics environment.
+% \begin{macrocode}
+ \tikzscale@patchEndtikzpictureIncludegraphics
+% \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzexternal}
+% \begin{macrocode}
+\AtEndPreamble{%
+% \end{macrocode}
+ % Activate the output of the graphics sizes into the dpth files (one file per graphic) if externalization might be used (known at the end of preamble). This key is used if the externalization library is activated to check if the scaling is correct, otherwise the code is not needed.
+% \begin{macrocode}
+ \ifExternalizationLoaded{%
+ \pgfkeys{/pgf/images/external info}%
+ }{}%
+% \end{macrocode}
+ % Provide dummy commands, if the externalization library has not been loaded during the preamble.
+% \begin{macrocode}
+% \ProvideDocumentCommand{\tikzsetnextfilename}{m}{}%
+% \ProvideDocumentCommand{\tikzsetexternalprefix}{m}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \@ifpackageloaded{tikz}{%
+% \end{macrocode}
+ % Set a minimum accuracy tikzscale tries to achieve. TeX's accuracy is limited, thus, e.g. 0.04 pt, cannot always be achieved independent of the number of iterations. Use the \href{http://en.wikibooks.org/wiki/TeX/hfuzz}{value} (0.1 pt in an experiment) which is used for overfull paragraph warnings, too.
+% \begin{macrocode}
+ \newlength{\tikzscale@accuracy}%
+ \setlength{\tikzscale@accuracy}{\hfuzz}%
+% \end{macrocode}
+ % This is needed in normal TikZ pictures and in PGFPlots, but as the pgfplots package loads the tikz package, it is fine to define it here.
+% \begin{macrocode}
+ \def\maxTestIterations{10}%
+ }{}%
+% \end{macrocode}
+% If the externalization library has been loaded, prepare it for use together with tikzscale.
+% \begin{macrocode}
+ \ifExternalizationLoaded{%
+% \end{macrocode}
+% \cmd{\tikzexternaldisable} and \cmd{\tikzexternalenable} normally unintentionally deactivate the tikzscale commands (as they restore the original TikZ commands), so let them restore the tikzscale commands instead. The idea is to get the tikzscale's includegraphics command being called and then redefine tikzpicture and do the rest of the work there. Do the patching always when \cmd{\tikzexternaldisable} or \cmd{\tikzexternalenable} is called, as the patching should also be done when \cmd{\includegraphics} is not used, but \cmd{\tikzpicture} is called directly.
+% \begin{macrocode}
+ \apptocmd{\tikzexternaldisable}{%
+ \tikzscale@useEnhancedIncludegraphics
+ \tikzscale@patchTikzpictureIncludegraphics
+ }{}{\PackageError{tikzscale}{Patching tikzexternaldisable failed}}%
+ %
+ \apptocmd{\tikzexternalenable}{%
+ \tikzscale@useEnhancedIncludegraphics
+ \tikzscale@patchTikzpictureIncludegraphics
+ }{}{\PackageError{tikzscale}{Patching tikzexternalenable failed}}%
+% \end{macrodode}
+ % Patch the externalization command to also save the axis ratio if given. Unfortunately, \cmd{\apptocmd} cannot be used, as patching fails due to "nested patching command and parameters in patch", thus, manual patching is in order.
+% \begin{macrocode}
+ \LetLtxMacro{\tikzscale@externalend@storeshifts}{\pgf@externalend@storeshifts}%
+ \def\pgf@externalend@storeshifts#1{%
+ \tikzscale@externalend@storeshifts{#1}%
+ \ifpgfexternal@info
+% \end{macrocode}
+ % Write the axis ratio into the dpth file into variable \cmd{\tikzscale@oldAxisRatio}. The existence of the variable in the dpth file indicates if the axis ratio has been given in the last run.
+% \begin{macrocode}
+ \tikzscale@writeToDpth{#1}{\tikzscale@oldAxisRatio}{\requestedAxisRatio}%
+ \fi
+ }%
+ }{}%
+% \end{macrocode}
+% \begin{macrocode}
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@writeToDpth}
+% Write the value of the third argument, if it exists, into the dpth file (write handle in the first argument) of the current figure, accessible by the second argument. The second and the third argument must contain macro names (including the backslash).
+% \begin{macrocode}
+\def\tikzscale@writeToDpth#1#2#3{%
+ \ifdef{#3}{%
+% \end{macrocode}
+ % This is copied from the macro \cmd{\pgf@externalend@storeshifts} from file pgfcoreexternal.code.tex.
+% \begin{macrocode}
+ \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand#2{#3}}}%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\includegraphics}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@includegraphics}{O{}m}{%
+% \end{macrocode}
+ % This command uses an empty optional argument for compatibility with the traditional graphicx command.
+ % Start a group, so that changed variables during processing the current tikzpicture due not influence other tikzpictures. This is much more convienient, than resetting every single variable. Use \cmd{\begingroup} instead of \cmd{\bgroup} to simplify finding unmatched braces.
+% \begin{macrocode}
+ \begingroup
+% \end{macrocode}
+ % It happened at least once together with externalization, that the deactivation of the new includegraphics command did not work, so do it again to be safe (maybe reentrance problem with multiple tikzpicture calls?).
+% \begin{macrocode}
+ \LetLtxMacro{\includegraphics}{\tikzscale@oldincludegraphics}%
+% \end{macrocode}
+ % Do the patching of endlinechar and tikzpicture here, as tikzpicture should not be changed if not called via the new \cmd{\includegraphics} command.
+% \begin{macrocode}
+ \tikzscale@FixEndLine
+% \end{macrocode}
+ % Find the exact file name, as the ending and the path could be omitted.
+% \begin{macrocode}
+ \tikzscale@findExactFileName{tikzscale@fileName}{#2}%
+% \end{macrocode}
+ % Check if the found file is a TikZ file.
+% \begin{macrocode}
+ \tikzscale@isTikzFile{tikzscale@testTikzFile}{\tikzscale@fileName}%
+ \ifcsdef{tikzscale@testTikzFile}{%
+ \tikzscale@includetikz[#1]{\tikzscale@fileName}%
+ }{%
+% \end{macrocode}
+ % Restore \cmd{\endlinechar} before calling code from other packages. This is not only cleaner, but really avoids an error when using the plain old latex (with dvi output) with an eps graphic.
+% \begin{macrocode}
+ \tikzscale@restoreEndLineChar
+ \tikzscale@oldincludegraphics[#1]{\tikzscale@fileName}%
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@useEnhancedIncludegraphics}
+ % Replace the \cmd{\includegraphics} command by tikzscale's more generic command, to provide a consistent user interface.
+% \begin{macrocode}
+\def\tikzscale@useEnhancedIncludegraphics{%
+ \LetLtxMacro{\includegraphics}{\tikzscale@includegraphics}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@FixEndLine}
+% tikzpicture environment gets redefined:
+% - without external library: only inside tikzscale (once)
+% - with external library: additionally, whenever \cmd{\externalenable} or \cmd{\externaldisable} is called (\cmd{\tikzpiture} and \cmd{\endtikzpicture})
+% Use cases to patch tikzpicture:
+% - to use tikzscale's includegraphics
+% - to restore end of line character
+% Constraints:
+% - The patches have to be applied at the beginning of \cmd{\tikzpicture} and the end of \cmd{\endtikzpicture}, as \cmd{\tikzpicture} might not be executed completely when using external, as then the content of the tizkpicture environment is not executed at all.
+% - The patches should not accumulate
+% - A group might make sense to have a local scope
+% \begin{macrocode}
+\def\tikzscale@FixEndLine{%
+% \end{macrocode}
+ % There is a leading space character introduced by the externalization library, if the file is input directly. Thus use a trick to avoid that space. Furthermore, TikZ introduces with a specific version a trailing space character. To get rid of all space character issues, just solve the problem here once an for all. Note, that the redefinition of \cmd{\endlinechar} is local to the current group, so it does not have to be restored at the end of the group.
+% \begin{macrocode}
+ \edef\tikzscale@restoreEndLineChar{\endlinechar=\the\endlinechar\relax}%
+ \endlinechar=-1%
+% \end{macrocode}
+ % Restore the \cmd{\endlinechar} during the execution of the tikzpicture environment. This is necessary, for example, if data is read from a table and the data entries are separated by newline characters. Not restoring the \cmd{\endlinechar} would \href{http://tex.stackexchange.com/q/89053/7323}{distort the data}. Use \cmd{\apptocmd} to call the command inside the group opened by tikzpicture. Thus, nothing has to be done in \cmd{\endtikzpicture} regarding \cmd{\endlinechar}.
+% \begin{macrocode}
+ \tikzscale@addRestoreEndLineCharToTikzpicture
+ %
+ \apptocmd{\endtikzpicture}{%
+ \endlinechar=-1%
+ }{}{\PackageError{tikzscale}{Patching endtikzpicture failed}}%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@addRestoreEndLineCharToTikzpicture}
+% \begin{macrocode}
+\def\tikzscale@addRestoreEndLineCharToTikzpicture{%
+ \pretocmd{\tikzpicture}{%
+ \tikzscale@restoreEndLineChar
+ }{}{\PackageError{tikzscale}{Patching tikzpicture failed}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@patchTikzpictureIncludegraphics}
+% \begin{macrocode}
+\def\tikzscale@patchTikzpictureIncludegraphics{%
+ % Deactivate the new includegraphics command inside of tikzpictures, as a tikzpicture might load a PNG graphic or something and this should not be scaled by tikzscale but by TikZ or PGFPlots. Besides, the current implementation is not reentrant, so its not a good idea to call the macro recursively. The deactivation must be inside of tikzpicture, as a tikzpicture can be loaded without using includegraphics, thus it cannot be done there. Using \cmd{\apptocmd} to do a local definition inside of the group started by \cmd{\tikzpicture} does not work. The \cmd{\includegraphics} command really has to be deactivated here, as a tikzpicture including a PNG file might be called directly without calling includegraphics.
+% \begin{macrocode}
+ \pretocmd{\tikzpicture}{%
+ \LetLtxMacro{\includegraphics}{\tikzscale@oldincludegraphics}%
+ }{}{\PackageError{tikzscale}{Patching tikzpicture failed}}%
+ %
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@patchEndtikzpictureIncludegraphics}
+% \begin{macrocode}
+\def\tikzscale@patchEndtikzpictureIncludegraphics{%
+ \apptocmd{\endtikzpicture}{%
+ \LetLtxMacro{\includegraphics}{\tikzscale@includegraphics}%
+ }{}{\PackageError{tikzscale}{Patching endtikzpicture failed}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\tikzscale@findExactFileName}
+% Find the exact file name of a graphic file by testing several paths and file endings if there are degrees of freedom. The file name is saved in the command sequence name given by the first argument.
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@findExactFileName}{mm}{%
+% \end{macrocode}
+ % Delete the return variable if it already exists to allow checking if a file has been found.
+% \begin{macrocode}
+ \csundef{#1}%
+% \end{macrocode}
+ % Create a helper function used inside the file ending evaluation.
+% \begin{macrocode}
+ \def\tikzscale@checkDirectory##1{%
+ \def\tikzscale@checkExtension####1{%
+ \IfFileExists{##1#2####1}{%
+% \end{macrocode}
+ % Use \cmd{\csedef} instead of \cmd{\csdef} here, to be completely sure to only have a string left. This avoids problems when using tikzscale together with the pdfpages package and should generally be the right thing.
+% \begin{macrocode}
+ \csedef{#1}{##1#2####1}%
+% \end{macrocode}
+ % Break the inner (\cmd{\forcsvlist}) loop over file extensions.
+% \begin{macrocode}
+ \listbreak
+ }{}%
+ }%
+% \end{macrocode}
+ % Test all possible file extensions and do not forget that the extension might already be given. \cmd{\Gin@extensions} returns the \href{http://tex.stackexchange.com/a/45502}{current content} set by \cmd{\DeclareGraphicsExtensions}.
+% \begin{macrocode}
+ \eforcsvlist{\tikzscale@checkExtension}{{},\Gin@extensions}%
+ \ifcsdef{#1}{%
+% \end{macrocode}
+ % Break the outer (\cmd{\forgrouplist}) loop over directories.
+% \begin{macrocode}
+ \grouplistbreak
+ }{}%
+ }%
+% \end{macrocode}
+ % Set the graphics path, to also find graphics in the last (current) input directory or in completely separate paths. Set it here to get updates if the user uses the \cmd{graphicspath} command inside of the document body.
+% \begin{macrocode}
+ \tikzscale@setGraphicsPath
+ \eforgrouplist{\tikzscale@checkDirectory}{\tikzscale@graphicspath}%
+% \end{macrocode}
+ % If no file has been found, return the given file name, as includegraphics should try its best.
+% \begin{macrocode}
+ \ifcsundef{#1}{%
+ \csdef{#1}{#2}%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\tikzscale@setGraphicsPath}
+ % The \cmd{\graphicspath} command is used to set additional directories, which are searched for graphics. \cmd{\Ginput@path} is used to get the \href{http://tex.stackexchange.com/a/58404}{current content}.
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@setGraphicsPath}{}{%
+% \end{macrocode}
+ % Remove possible leading or trailing spaces in the graphics path, as they lead to ugly string output before printing the graphic. Inserting such a space in the graphics path is a user's error, but it can happen easily as not all users are aware of TeX's newline issues. Fix the original path variable and not only tikzscale's variable, as this seems to be a general problem.
+% \begin{macrocode}
+ \ifdef{\Ginput@path}{%
+ \tikzscale@trimMacro{\Ginput@path}%
+ }{}%
+ \ifdef{\currfiledir}{%
+ \ifdef{\Ginput@path}{%
+ \def\tikzscale@graphicspath{{\currfiledir}\Ginput@path{}}%
+ }{%
+ \def\tikzscale@graphicspath{{\currfiledir}{}}%
+ }%
+ }{%
+ \ifdef{\Ginput@path}{%
+ \def\tikzscale@graphicspath{\Ginput@path{}}%
+ }{%
+ \def\tikzscale@graphicspath{{}}%
+ }%
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\tikzscale@isTikzFile}
+% The first argument is the macro name (without backslash), which gets defined if the file is a tikzfile.
+% The second argument is the file name.
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@isTikzFile}{mm}{%
+ % \end{macrocode}
+ % Create a helper function used inside the evaluation.
+ % \begin{macrocode}
+ \def\do##1{%
+ \IfEndWith{#2}{##1}{%
+ \csdef{#1}{}%
+ \listbreak
+ }{}%
+ }%
+% \end{macrocode}
+ % Delete macro so that defining it is really indicating something.
+% \begin{macrocode}
+ \csundef{#1}%
+ \edocsvlist{\tikzscale@tikzFileExtensions}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\pgfkeys}
+% This is \href{http://tex.stackexchange.com/a/34318}{similarly} done.
+% \begin{macrocode}
+\pgfkeys{
+ /tikzscale/.is family, /tikzscale,
+ width/.code = {\pgfmathsetmacro{\requestedWidth}{#1}},
+ width/.value required,
+ height/.code = {\pgfmathsetmacro{\requestedHeight}{#1}},
+ height/.value required,
+ axisratio/.code = {\pgfmathsetmacro{\requestedAxisRatio}{#1}},
+ axisratio/.value required
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\tikzscale@includetikz}
+% \xcmd\tikzscale@includetikz{filename}\\
+% \xcmd\tikzscale@includetikz[width=1cm]{filename}\\
+% \xcmd\tikzscale@includetikz[height=1cm]{filename}\\
+% \xcmd\tikzscale@includetikz[height=1cm,width=1cm]{filename}\\
+% \xcmd\tikzscale@includetikz[width=1cm,height=1cm]{filename}\\
+% This command allows the inclusion of a tikz file like a graphics file. Thus instead of writing
+% \cmd{\includegraphics}[width=\cmd{\linewidth}]{fileWithoutEnding}
+% write
+% \cmd{\tikzscale@includetikz}[width=\cmd{\linewidth}]{fileWithoutEnding}
+% If only one of width or height are given, scale proportionally to fulfill the requirement. If both are given, scale non-proportionally to required width and height. Therefore, for normal tikzpictures only give either width or height, as the aspect ratio is already determined by the coordinate limits in the tikzpicture, but give width and height for PGFPlots, as the aspect ratio is unknown for these plots. \cmd{\NewEnviron} could be used to handle something like verbose in a tikzpicture, but at the moment, this is unsupported. The used code is the same as the uncommented code, but also \href{http://tex.stackexchange.com/q/94781/7323}{compatible with class beamer}.
+% \begin{macrocode}
+% \NewDocumentCommand{\tikzscale@includetikz}{O{}m}{%
+\newcommand{\tikzscale@includetikz}[2][]{%
+% \end{macrocode}
+ % Check the keys here already, as they are needed both to see if already externalized files fulfill their requirements and to handle unexternalized files.
+% \begin{macrocode}
+ \pgfkeys{/tikzscale, #1}%
+% \end{macrocode}
+ % Check if the current graphic should be either drawn and scaled or simply included. As externalization can get activated or deactivated at any time (if the library has been loaded in the preamble), check in every call what to do.
+% \begin{macrocode}
+ \tikzscale@ifExternalizationActive{%
+% \end{macrocode}
+ % If externalization library has been loaded and is active, draw and scale the graphic if it is to be externalized.
+% \begin{macrocode}
+ \tikzifexternalizingnext{%
+ \tikzscale@debug{Externalizing the file #2}%
+ \tikzscale@includetikzUnexternalized{#2}%
+ }{%
+ \tikzscale@includetikzWithExternalization{#2}%
+ }%
+ }{%
+% \end{macrocode}
+ % Always draw and scale the graphic if externalization library has not been loaded or is deactivated.
+% \begin{macrocode}
+ \tikzscale@includetikzUnexternalized{#2}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@includetikzUnexternalized}
+% \begin{macrocode}
+\def\tikzscale@includetikzUnexternalized#1{%
+ \elseif{test {\ifundef{\requestedWidth}} and test {\ifundef{\requestedHeight}} and test {\ifundef{\requestedAxisRatio}}}{%
+ \tikzscale@debug{no option given}%
+% \end{macrocode}
+ % If no option is given, directly load the content, as nothing should get scaled.
+% \begin{macrocode}
+ \tikzscale@trim{\input{#1}}%
+ }{test {\ifdef{\requestedWidth}} and test {\ifdef{\requestedHeight}}}{%
+ \tikzscale@debug{width and height given}%
+% \end{macrocode}
+ % If width and height are given, the content must be a pgfplot, so scale it. The plot currently only had approximately the given size without calling the resizeTo macro, due to a (known) bug in PGFPlots.
+% \begin{macrocode}
+ \tikzscale@resizePlotTo{#1}%
+ }{test {\ifdef{\requestedAxisRatio}}}{%
+ \tikzscale@debug{axis ratio given}%
+ \tikzscale@includeAxisRatio{#1}%
+ }{test {\ifundef{\requestedAxisRatio}}}{%
+ \tikzscale@debug{width or height given}%
+% \end{macrocode}
+ % Use this test as a check if PGFPlots has been loaded.
+% \begin{macrocode}
+ \ifdef{\pgfplotsset}{%
+% \end{macrocode}
+ % If only either width or height is given it can be a normal tikzpicture or a plot with axisratio=1. Let's guess that it is a plot with default axisratio. If the guess is wrong, the called function detects that scaling the plot does not work and automatically calls \cmd{\tikzscale@includeNormalTikzpicture}.
+% \begin{macrocode}
+ \def\requestedAxisRatio{1}%
+ \tikzscale@includeAxisRatio{#1}%
+ }{%
+ \tikzscale@debug{no pgfplots loaded}%
+% \end{macrocode}
+ % If PGFPlots has not been loaded, it can only be a TikZPicture.
+% \begin{macrocode}
+ \tikzscale@includeNormalTikzpicture{#1}%
+ }%
+ }{%
+ % Everything else results in an error.
+ \tikzscale@invalidKeyError{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+
+% \begin{macro}{\tikzscale@includetikzWithExternalization}
+% This macro includes a tikzpicture file using the externalization library. As a precondition, the externalization must be loaded and active.
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@includetikzWithExternalization}{m}{%
+% \end{macrocode}
+ % Try to load a dpth file to get the sizes pgfexternalwidth and pgfexternalheight as well as tikzscale@oldAxisRatio of the externalized graphic.
+% \begin{macrocode}
+ \tikzexternalgetnextfilename{\tikzscale@externalizationName}%
+ \pgfexternalreaddpth{\tikzscale@externalizationName}%
+% \end{macrocode}
+ % Check if the next figure has to be remade. If no dpth file exist, it need not and must not be remade, as otherwise no md5-file is generated and thus one extra compilation run is necessary.
+% \begin{macrocode}
+ \IfFileExists{\tikzscale@externalizationName.dpth}{%
+ \tikzscale@checkRequestedSizeChanges
+ }{}%
+% \end{macrocode}
+ % The figure is either remade or the PDF is included with the following call. The former is correct if the file has been changed, the latter is correct if the last run was correct and nothing has changed since then. The only case left is if the figure has neither changed, nor is the exported size correct, as the file is then regenerated repeating the same error as last time. To change something, the new externalisation would need the result of the old externalization, but as the externalization is processed in a separate LaTeX process, it's non-trivial to push the information there.
+% \begin{macrocode}
+ \tikzscale@trim{\input{#1}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@checkRequestedSizeChanges}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@checkRequestedSizeChanges}{}{%
+% \end{macrocode}
+ % Check if the sizes are still correct, i.e. agree with the sizes of the externalized PDF graphic. The saved axis ratio from the last run is checked, too, as it might have been changed by the user between the last run and the current run.
+% \begin{macrocode}
+ \ifdef{\requestedWidth}{%
+ \ifdef{\pgfexternalwidth}{%
+ \tikzscale@ifSizeDifference{\requestedWidth - \pgfexternalwidth}{%
+ \tikzset{external/remake next}%
+ \tikzscale@debug{Regenerate \tikzscale@externalizationName \MessageBreak because of width difference \MessageBreak (requestedWidth=\requestedWidth, pgfexternalwidth=\pgfexternalwidth)}%
+% \tikzscale@warnIfSizeDifference{\requestedWidth}{\pgfexternalwidth}{current file}%
+% \end{macrocode}
+ % It would be possible to calculate a new size, if the old size did not fit, but this information would be needed to push into the externalization process, what is hard. The idea were requested = requested + measuredOld - fileSize.
+% \begin{macrocode}
+ }{}%
+ }{%
+ \tikzset{external/remake next}%
+ \tikzscale@debug{Regenerate \tikzscale@externalizationName \MessageBreak because of no external width}%
+ }%
+ }{}%
+ \ifdef{\requestedHeight}{%
+ \ifdef{\pgfexternalheight}{%
+ \tikzscale@ifSizeDifference{\requestedHeight - \pgfexternalheight}{%
+ \tikzset{external/remake next}%
+ \tikzscale@debug{Regenerate \tikzscale@externalizationName \MessageBreak because of height difference \MessageBreak (requestedHeight=\requestedHeight, pgfexternalheight=\pgfexternalheight)}%
+ }{}%
+ }{%
+ \tikzset{external/remake next}%
+ \tikzscale@debug{Regenerate \tikzscale@externalizationName \MessageBreak because of no external height}%
+ }%
+ }{}%
+ \ifdef{\requestedAxisRatio}{%
+ \ifdef{\tikzscale@oldAxisRatio}{%
+ \tikzscale@ifSizeDifference{\requestedAxisRatio - \tikzscale@oldAxisRatio}{%
+ \tikzset{external/remake next}%
+ \tikzscale@debug{Regenerate \tikzscale@externalizationName \MessageBreak because of axis ratio difference \MessageBreak (requestedAxisRatio=\requestedAxisRatio, oldAxisRatio=\tikzscale@oldAxisRatio)}%
+ }{}%
+ \undef{\tikzscale@oldAxisRatio}%
+ }{%
+ \tikzset{external/remake next}%
+ \tikzscale@debug{Regenerate \tikzscale@externalizationName \MessageBreak because of no external axis ratio}%
+ }%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@preparePlot}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@preparePlot}{}{%
+% \end{macrocode}
+ % Set a scaling factor or a width and height for the plot, which will be loaded. The \cmd{\tikzset} and \cmd{\pgfplotsset} commands have local scope. The internal redefinition of the style is correct, because if one tikzpicture includes another one, the scaling factor is reset so that it does not get \href{http://tex.stackexchange.com/questions/38605/scaling-a-tikz-figure-from-an-external-file}{squared} in the inner one. Note that if a user-defined style thus is ignored in this special case. The styles are defined here, so that files which are inputted without the \cmd{includegraphics} command are not affected.
+% \begin{macrocode}
+ \pgfplotsset{every axis/.append style={width=\tikzscale@width,height=\tikzscale@height,every axis/.style={}}}%
+}
+\NewDocumentCommand{\tikzscale@prepareTikzpicture}{}{%
+ \tikzset{every picture/.style={scale=\tikzscale@scale,every picture/.style={}}}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@includeNormalTikzpicture}
+% \xcmd\tikzscale@includeNormalTikzpicture{file name}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@includeNormalTikzpicture}{m}{%
+ \tikzscale@prepareTikzpicture
+ \elseif{test {\ifdef{\requestedWidth}} and test {\ifundef{\requestedHeight}}}{%
+ \def\requestedSize{\requestedWidth}%
+ \tikzscale@scaleTikzpictureTo{\wd}{\tikzscale@trim{\input{#1}}}{#1}%
+ }{test {\ifundef{\requestedWidth}} and test {\ifdef{\requestedHeight}}}{%
+ \def\requestedSize{\requestedHeight}%
+ \tikzscale@scaleTikzpictureTo{\ht}{\tikzscale@trim{\input{#1}}}{#1}%
+ }{%
+ \tikzscale@invalidKeyError{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@invalidKeyError}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@invalidKeyError}{m}{%
+ \PackageError{tikzscale}{Invalid key for TikZ graphic}{Change key #1 into a valid key.}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@includeAxisRatio}
+% \xcmd\tikzscale@includeAxisRatio{file name}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@includeAxisRatio}{m}{%
+% \end{macrocode}
+ % Try to set initial sizes close to the requested sizes, to improve the optimization's speed.
+% \begin{macrocode}
+ \pgfplotsset{every axis/.append style={scale only axis,every axis/.style={}}}%
+ \elseif{test {\ifdef{\requestedWidth}} and test {\ifundef{\requestedHeight}}}{%
+ \let\requestedSize\requestedWidth
+ \def\tikzscale@width{\requestedWidth}%
+ \pgfmathsetmacro{\tikzscale@height}{\requestedWidth / \requestedAxisRatio}%
+ \tikzscale@resizePlotWithAxesRatioTo{\wd}{\tikzscale@width}{\tikzscale@trim{\input{#1}}}{#1}%
+ }{test {\ifundef{\requestedWidth}} and test {\ifdef{\requestedHeight}}}{%
+ \let\requestedSize\requestedHeight
+ \def\tikzscale@height{\requestedHeight}%
+ \pgfmathsetmacro{\tikzscale@width}{\requestedHeight * \requestedAxisRatio}%
+ \tikzscale@resizePlotWithAxesRatioTo{\ht}{\tikzscale@height}{\tikzscale@trim{\input{#1}}}{#1}%
+ }{%
+ \tikzscale@invalidKeyError{#1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@scaleTikzpictureTo}
+% \xcmd\scalteTo{\cmd{\wd} or \cmd{\ht}}{to-be-scaled content}{file name}
+% The first argument determines if a specific width or a specific height should be achieved by scaling.
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@scaleTikzpictureTo}{mmm}{%
+ \tikzscale@debug{At beginning scale, requestedWidth=\requestedWidth}%
+% \end{macrocode}
+ % Deactivate the externalization, as the measurements to determine the correct size should not be externalized.
+% \begin{macrocode}
+ \tikzscale@conditionalDisableExternalization
+% \end{macrocode}
+ % When scaling a tikzpicture, only the drawings are scaled, but nodes are not scaled. So in general, there are horizontal or vertical areas, where the picture contains only unscaled nodes, and areas where the picture contains scalable drawings. Mathematically all scaled and all unscaled areas can be combined, so that there is one are area of fixed size and one variable sized area. Thus scaling only by multiplication of a factor is incorrect in general. To do the correct scaling, the fixed area size must be known. As there are two unknown parameters, i.e. fixed area size and variable area size, the fixed area size can be calculated by measuring the tikzpicture with two different scalings. A special scaling factor is used, to get the size close to the final size minimizing numerical and logical errors.
+% \begin{macrocode}
+ \def\tikzscale@scale{1}%
+ \tikzscale@measureSize{\measuredFirst}{#1}{#2}%
+ \pgfmathsetmacro{\tikzscale@scale}{\requestedSize/\measuredFirst}%
+ \tikzscale@measureSize{\measuredSecond}{#1}{#2}%
+% \end{macrocode}
+ % It can happen, that there are no variable areas. Furthermore, the original size could already fit. Avoid numerical problems in both cases by directly drawing the picture. Do not compare the float values directly, as TeX's precision is quite limited.
+% \begin{macrocode}
+ \tikzscale@ifSizeDifference{\measuredSecond - \requestedSize}{%
+% \end{macrocode}
+ % If a plot is not scalable (e.g. consisting of a node only), but is not correctly scaled, exit with an error.
+% \begin{macrocode}
+ \tikzscale@ifSizeDifference{\measuredFirst - \measuredSecond}{%
+ }{%
+ \PackageError{tikzscale}{Requested to scale unscalable graphic}{Do not set width or height for graphic in\MessageBreak #3}%
+ }%
+% \end{macrocode}
+ % We know, that the variable sized area scales with the scaling factor, thus it holds
+ % \cmd{\scale} * \cmd{\variableFirst} = \cmd{\variableSecond},
+ % with \cmd{\variableFirst} = \cmd{\measuredFirst} - \cmd{\fixedSize}
+ % and \cmd{\variableSecond} = \cmd{\measuredSecond} - \cmd{\fixedSize},
+ % which can be solved by substituttion and results in
+% \begin{macrocode}
+ \pgfmathsetmacro{\fixedSize}{(\tikzscale@scale*\measuredFirst - \measuredSecond) / (\tikzscale@scale - 1)}%
+% \end{macrocode}
+ % Now, to get the correct scaling factor, only take the variable areas into account, as it holds
+ % \cmd{\scaleFinal} = \cmd{\variableSizeFinal} / \cmd{\variableSizeOriginal}
+ % with \cmd{\variableSizeFinal} = \cmd{\requestedSize} - \cmd{\fixedSize}
+ % and \cmd{\variableSizeOriginal} = \cmd{\measuredFirst} - \cmd{\fixedSize},
+ % which results in
+% \begin{macrocode}
+ \pgfmathsetmacro{\tikzscale@scale}{(\requestedSize - \fixedSize) / (\measuredFirst - \fixedSize)}%
+% \end{macrocode}
+ % Additionally or alternatively the brute force approach to iteratively improve the solution can be used.
+% \begin{macrocode}
+ \foreach \l in {1,...,\maxTestIterations}{%
+ \tikzscale@measureSize{\measuredIntermediate}{#1}{#2}%
+% \end{macrocode}
+ % Optimize until the absolute difference is small enough, although the (relative) size ratios are used to calculate a new scaling factor.
+% \begin{macrocode}
+ \tikzscale@ifSizeDifference{\measuredIntermediate-\requestedSize}{%
+% \end{macrocode}
+ % First divide before multiply to avoid overflowing (at 16384).
+% \begin{macrocode}
+ \pgfmathsetmacro{\errorRatio}{\measuredIntermediate/\requestedSize}%
+ \tikzscale@debug{errorRatio=\errorRatio\MessageBreak for #3}%
+ \pgfmathsetglobalmacro{\tikzscale@scale}{\tikzscale@scale/\errorRatio}%
+ }{%
+ \breakforeach%
+ }%
+ }%
+% \end{macrocode}
+ % Do a last measurement to be able to warn if the size does not fit good enough. This measurement has to be done before possibly reactivating the externalization, as measurements with activated externalization can lead to wrong measurement results (possibly due to calling \cmd{\shipout} inside of the measurement). The assumption is, that the real graphic size does not change if the externalization gets activated, which all tests seem to confirm.
+% \begin{macrocode}
+ \tikzscale@measureSize{\measuredFinal}{#1}{#2}%
+ \tikzscale@warnIfSizeDifference{\measuredFinal}{\requestedSize}{#3}%
+ \tikzscale@testGraphicFileForRetry{#1}{#2}{#3}{\measuredFinal}%
+ }{%
+ \tikzscale@testGraphicFileForRetry{#1}{#2}{#3}{\measuredSecond}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@testGraphicFileForRetry}
+% The macro tests the size of the generated graphic file. If the size is not as the requested size, the optimization is redone with an adapted optimization criterion to compensate the error done in the last run.
+%
+% \xcmd\tikzscale@testGraphicFileForRetry{\cmd{\wd} or \cmd{\ht}}{to-be-scaled content}{file name}{last measurement}
+%
+% \begin{macrocode}
+\def\tikzscale@testGraphicFileForRetry#1#2#3#4{%
+% \end{macrocode}
+ % Reactivate externalization to prepare the figure to be really rendered.
+% \begin{macrocode}
+ \tikzscale@conditionalEnableExternalization{#3}%
+% \end{macrocode}
+ % Before externalizing the file, save the current externalization file name to be possibly used later. This code must be run after the reactivation of the externalization and before the rendering itself.
+% \begin{macrocode}
+ \tikzscale@ifExternalizationActive{%
+ \tikzexternalgetnextfilename{\tikzscale@externalizationName}%
+ }{}%
+% \end{macrocode}
+ % Finally, externalize and include the graphic with the final size. The graphic must not be included by reusing the measuredSize-box, as this leads to a subtly wrong behaviour when generating the PDF files. It can be observed by running the test suite with externalization and checking that no file is regenerated in the second run. Reusing the box can also lead to compile errors, if the problematic graphic is the last graphic in the document.
+% \begin{macrocode}
+ #2%
+% \end{macrocode}
+ % If the externalization is active, it might happen, that a figure was scaled correctly according to the request, but the externalized figure has a different size. The reason for that behaviour is unknown. The only chance we have is to calculate the error, rewind everything and try again with the compensated error.
+% \begin{macrocode}
+ \tikzscale@ifExternalizationActive{%
+% \end{macrocode}
+ % Read the size of the saved PDF file and save it on \cmd{\pgfexternalsize}.
+% \begin{macrocode}
+ \pgfexternalreaddpth{\tikzscale@externalizationName}%
+ \tikzscale@ifIsWidth{#1}{%
+ \edef\pgfexternalsize{\pgfexternalwidth}%
+ }{%
+ \edef\pgfexternalsize{\pgfexternalheight}%
+ }%
+% \end{macrocode}
+ % Save the \cmd{\requestedSize} from the user in \cmd{\originalRequestedSize}, as the former value has to be overwritten for the next try. Do not use \cmd{\def}, as that would later be expanded to the current and not to the original value.
+% \begin{macrocode}
+ \ifundef{\originalRequestedSize}{%
+ \let\originalRequestedSize\requestedSize
+ }{}%
+ \tikzscale@debug{originalRequestedSize=\originalRequestedSize, requestedSize=\requestedSize, pgfexternalsize=\pgfexternalsize}%
+% \end{macrocode}
+ % If a size difference is left, compensate it, decrease the counter and try the scaling again.
+% \begin{macrocode}
+ \tikzscale@ifSizeDifference{\originalRequestedSize-\pgfexternalsize}{%
+ \pgfmathsetmacro{\requestedSize}{\requestedSize + #4 - \pgfexternalsize}%
+ \tikzscale@decreaseFigureCounter
+ \tikzscale@scaleTikzpictureTo{#1}{#2}{#3}%
+ }{}%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@decreaseFigureCounter}
+% Decrease the externalization figure counter. This way the last externalized figure will be overwritten when the next figure is externalized. This is useful if the same figure should be externalized again. This code is a modified copy of \cmd{\tikzexternal@getnextfilename@advancecount} from file tikzexternalshared.code.tex.
+% \begin{macrocode}
+\def\tikzscale@decreaseFigureCounter{%
+% \end{macrocode}
+% Use a group, so that the used counter register is not changed outside of this macro. This is necessary, as the global figure counter is not saved in a counter as one might think, but in a macro, so it must be copied to a local counter in order to be easily modified.
+% \begin{macrocode}
+ \begingroup
+% \end{macrocode}
+ % Get the name of the macro holding the figure counter value.
+% \begin{macrocode}
+ \edef\macroName{c@tikzext@no@\pgfkeysvalueof{/tikz/external/figure name}}%
+% \end{macrocode}
+ % Use a TeX counter and store the figure counter value therein.
+% \begin{macrocode}
+% \c@pgf@counta=\csname\macroName\endcsname\relax
+ \c@pgf@counta=\csuse{\macroName}\relax
+% \end{macrocode}
+ % Decrease the value of the local counter.
+% \begin{macrocode}
+ \advance\c@pgf@counta -1\relax
+% \end{macrocode}
+ % Save the value of the local counter back to the global counter macro.
+% \begin{macrocode}
+ \expandafter\xdef\csname\macroName\endcsname{\the\c@pgf@counta}%
+ \endgroup
+}%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@resizePlotTo}
+%\xcmd\tikzscale@resizePlotTo{file name}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@resizePlotTo}{m}{%
+ \def\fileName{#1}%
+ \def\content{\tikzscale@trim{\input{#1}}}%
+ \tikzscale@preparePlot
+ \def\tikzscale@width{\requestedWidth}%
+ \def\tikzscale@height{\requestedHeight}%
+% \end{macrocode}
+ % Deactivate the externalization, as the measurements to determine the correct size should not be externalized.
+% \begin{macrocode}
+ \tikzscale@conditionalDisableExternalization
+% \end{macrocode}
+ % Improve the solution iteratively until it is good enough.
+% \begin{macrocode}
+ \foreach \l in {1,...,\maxTestIterations}{%
+% \end{macrocode}
+ % Using the box allows measuring the width and height with one rendering run.
+% \begin{macrocode}
+ \sbox{\tikzscale@measuredSize}{\content}%
+% \end{macrocode}
+ % Determine the remaining error and check if it is larger than a threshold.
+% \begin{macrocode}
+ \pgfmathsetmacro{\widthDifference}{\wd\tikzscale@measuredSize - \requestedWidth}%
+ \pgfmathsetmacro{\heightDifference}{\ht\tikzscale@measuredSize - \requestedHeight}%
+% \end{macrocode}
+ % Output error in current iterion for debugging.
+% \begin{macrocode}
+% widthDifference: \widthDifference, heightDifference: \heightDifference\\% Debugging
+% \end{macrocode}
+ % Check if the remaining error is larger than a threshold.
+% \begin{macrocode}
+ \ifboolexpr{test {\tikzscale@ifSizeDifference{\widthDifference}} or test {\tikzscale@ifSizeDifference{\heightDifference}}}{%
+% \end{macrocode}
+ % Correct the dimension by the error. Use a global assignment, as each iteration in the loop is put into a separate group.
+% \begin{macrocode}
+ \pgfmathsetglobalmacro{\tikzscale@width}{\tikzscale@width - \widthDifference}%
+ \pgfmathsetglobalmacro{\tikzscale@height}{\tikzscale@height - \heightDifference}%
+ }{%
+ \breakforeach
+ }%
+ }%
+% \end{macrocode}
+ % Do a last measurement to be able to warn if the size does not fit good enough. This measurement has to be done before possibly reactivating the externalization, as measurements with activated externalization can lead to wrong measurement results (possibly due to calling \cmd{\shipout} inside of the measurement). The assumption is, that the real graphic size does not change if the externalization gets activated, which all tests seem to confirm.
+% \begin{macrocode}
+ \sbox{\tikzscale@measuredSize}{\content}%
+ \tikzscale@warnIfSizeDifference{\requestedWidth}{\wd\tikzscale@measuredSize}{\fileName's width}%
+ \tikzscale@warnIfSizeDifference{\requestedHeight}{\ht\tikzscale@measuredSize}{\fileName's height}%
+% \end{macrocode}
+ % Finally, externalize and include the graphic with the final size. The graphic must not be include by reusing the measuredSize-box, as this leads to a subtly wrong behaviour when generating the PDF files. It can be observed by running the test suite with externalization and checking that no file is regenerated in the second run. Reusing the box can also lead to compile errors, if the problematic graphic is the last graphic in the document.
+% \begin{macrocode}
+ \tikzscale@conditionalEnableExternalization{\fileName}%
+ \content%
+}
+% \end{macrocode}
+%\end{macro}
+%
+
+%\begin{macro}{\tikzscale@resizePlotWithAxesRatioTo}
+% \xcmd\tikzscale@resizePlotWithAxesRatioTo{\textbackslash wd or \textbackslash ht}{\textbackslash tikzscale@width or \textbackslash tikzscale@height}{to-be-scaled content}{file name}
+% The first argument determines if a specific width or a specific height should be achieved by resizing.
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@resizePlotWithAxesRatioTo}{mmmm}{%
+ \def\dimension{#1}%
+ \def\variable{#2}%
+ \def\content{#3}%
+ \def\fileName{#4}%
+ \gdef\tikzscale@oldSizeDifference{0pt}%
+ \tikzscale@preparePlot
+% \end{macrocode}
+ % Deactivate the externalization, as the measurements to determine the correct size should not be externalized.
+% \begin{macrocode}
+ \tikzscale@conditionalDisableExternalization
+% \end{macrocode}
+ % Improve the solution iteratively until it is good enough.
+% \begin{macrocode}
+ \foreach \l in {1,...,\maxTestIterations}{%
+ \tikzscale@measureSize{\measuredSize}{\dimension}{\content}%
+% \end{macrocode}
+ % Determine the remaining error and check if it is larger than a threshold.
+% \begin{macrocode}
+ \pgfmathsetmacro{\sizeDifference}{\measuredSize - \requestedSize}%
+% \end{macrocode}
+ % Output error in current iterion for debugging.
+% \begin{macrocode}
+% sizeDifference: \sizeDifference\\% Debugging
+% \end{macrocode}
+ % Optimize if the absolute difference is too large.
+% \begin{macrocode}
+ \tikzscale@ifSizeDifference{\sizeDifference}{%
+ \tikzscale@ifIsWidth{\dimension}{%
+ \pgfmathsetglobalmacro{\tikzscale@width}{\tikzscale@width - \sizeDifference}%
+ \pgfmathsetglobalmacro{\tikzscale@height}{\tikzscale@width / \requestedAxisRatio}%
+ }{%
+ \pgfmathsetglobalmacro{\tikzscale@height}{\tikzscale@height - \sizeDifference}%
+ \pgfmathsetglobalmacro{\tikzscale@width}{\tikzscale@height * \requestedAxisRatio}%
+ }%
+ \tikzscale@ifSizeDifference{\sizeDifference-\tikzscale@oldSizeDifference}{%
+ }{%
+% \end{macrocode}
+ % Restore the externalization state in order to have strict enable-disable-call-pairing.
+% \begin{macrocode}
+ \tikzscale@conditionalEnableExternalization{\fileName}%
+ \tikzscale@includeNormalTikzpicture{#4}%
+ \gdef\tikzscale@alreadyIncluded{true}%
+ \breakforeach
+ }%
+ \pgfmathsetglobalmacro{\tikzscale@oldSizeDifference}{\sizeDifference}%
+ }{%
+ \breakforeach
+ }%
+ }%
+ \ifdef{\tikzscale@alreadyIncluded}{%
+ \global\undef\tikzscale@alreadyIncluded%
+ }{%
+% \end{macrocode}
+ % Do a last measurement to be able to warn if the size does not fit good enough. This measurement has to be done before possibly reactivating the externalization, as measurements with activated externalization can lead to wrong measurement results (possibly due to calling \cmd{\shipout} inside of the measurement). The assumption is, that the real graphic size does not change if the externalization gets activated, which all tests seem to confirm.
+% \begin{macrocode}
+ \tikzscale@measureSize{\measuredFinal}{\dimension}{\content}%
+ \tikzscale@warnIfSizeDifference{\measuredFinal}{\requestedSize}{\fileName}%
+% \end{macrocode}
+ % Finally, externalize and include the graphic with the final size. The graphic must not be include by reusing the measuredSize-box, as this leads to a subtly wrong behaviour when generating the PDF files. It can be observed by running the test suite with externalization and checking that no file is regenerated in the second run. Reusing the box can also lead to compile errors, if the problematic graphic is the last graphic in the document.
+% \begin{macrocode}
+ \tikzscale@conditionalEnableExternalization{\fileName}%
+ \content%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@ifIsWidth}
+% \xcmd\tikzscale@ifIsWidth{condition}{true}{false}
+% \begin{macrocode}
+\def\tikzscale@ifIsWidth#1{%
+ \ifedefequal{#1}{\wd}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@measureSize}
+% \begin{macrocode}
+\newsavebox{\tikzscale@measuredSize}
+% \end{macrocode}
+% \xcmd\measureSize{result variable name}{\cmd{\wd} or \cmd{\ht}}{to-be-measured content}
+% \begin{macrocode}
+\def\tikzscale@measureSize#1#2#3{%
+ \sbox{\tikzscale@measuredSize}{#3}%
+ \pgfmathsetmacro{#1}{#2\tikzscale@measuredSize}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@ifSizeDifference}
+% \xcmd\tikzscale@ifSizeDifference{size}{executed if true}{executed if false}
+% \begin{macrocode}
+\def\tikzscale@ifSizeDifference#1#2#3{%
+ \pgfmathparse{abs(#1)}%
+ \ifdimgreater{\pgfmathresult pt}{\tikzscale@accuracy}{%
+ #2%
+ }{%
+ #3%
+ }%
+}%
+% \end{macrocode}
+%\end{macro}
+
+
+%\begin{macro}{\tikzscale@measuredSize}
+% \xcmd\tikzscale@warnIfSizeDifference{firstSize}{secondSize}{file name}
+% \begin{macrocode}
+\def\tikzscale@warnIfSizeDifference#1#2#3{%
+ \tikzscale@ifSizeDifference{#1-#2}{%
+ \PackageWarning{tikzscale}{Scaling of #3 was only\MessageBreak accurate to \pgfmathresult pt}%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@conditionalDisableExternalization}
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@conditionalDisableExternalization}{}{%
+ \tikzscale@ifExternalizationActive{%
+ \tikzexternaldisable
+ \def\tikzscale@externalizationWasDisabled{}%
+ }{}%
+% \end{macrocode}
+ % Restore the endlinechar here and not in the general \cmd{\tikzexternaldisable} code, as it should only be restored if \cmd{\includegraphics} had been called and not if a tikzpicture was called directly without using \cmd{\includegraphics}. If the externalization has not been loaded, the endlinechar would be redefined twice (which would probably also do not much harm).
+% \begin{macrocode}
+ \ifExternalizationLoaded{%
+ \tikzscale@addRestoreEndLineCharToTikzpicture
+ }{}%
+% \end{macrocode}
+ % The pause command defined by the Beamer class creates additional slides when called multiple times due to tikzscale's scaling. Thus, deactivate it during the scaling tests, if it is defined.
+% \begin{macrocode}
+ \ifdef{\pause}{%
+ \LetLtxMacro{\tikzscale@oldpause}{\pause}%
+ \RenewDocumentCommand{\pause}{o}{}%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\tikzscale@conditionalEnableExternalization}
+% Activate externalization of TikZ graphics iff it had been active before definitely disabling it for measurement purposes. The argument contains the file name.
+% \begin{macrocode}
+\NewDocumentCommand{\tikzscale@conditionalEnableExternalization}{m}{%
+% \end{macrocode}
+ % For the externalization, set correct file name and only externalize the graphic with the final size. This produces a \href{http://old.nabble.com/minor-comment-about-TikZ-external-library-usage-tt31042245.html#a31042245}{known bug}
+% \begin{macrocode}
+% \tikzsetnextfilename{#1}%
+% \end{macrocode}
+ % Get the current directory as a string and use it as an prefix, so that the graphic's PDF is generated in a subdirectory if the tikz file is located in a subdirectory, too. This is necessary, as the PDF file is searched for in the subdirectory in this case. This might be unnecessary due to the newly created path lookup logic.
+% \begin{macrocode}
+% \expandafter\tikzsetexternalprefix\expandafter{\tikzscale@pwd}%
+% \expandnext{\tikzsetexternalprefix}{\tikzscale@pwd}%
+ \ifdef{\tikzscale@externalizationWasDisabled}{%
+ \tikzexternalenable
+ \undef\tikzscale@externalizationWasDisabled
+ }{}%
+% \end{macrocode}
+ % Restore the endlinechar here and not in the general \cmd{\tikzexternalenable} code, as it should only be restored if \cmd{\includegraphics} had been called and not if a tikzpicture was called directly without using \cmd{\includegraphics}. If the externalization has not been loaded, the endlinechar would be redefined twice (which would probably also do not much harm).
+% \begin{macrocode}
+ \ifExternalizationLoaded{%
+ \tikzscale@addRestoreEndLineCharToTikzpicture
+ }{}%
+% \end{macrocode}
+ % Reactivate Beamer's pause command if defined.
+% \begin{macrocode}
+ \ifdef{\pause}{%
+ \LetLtxMacro{\pause}{\tikzscale@oldpause}%
+ }{}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+% \makeatother
+% \iffalse
+%</package>
+% \fi
+%
+%\StopEventually{^^A
+% \PrintChanges
+%^^A \PrintIndex
+%}
+%
+%\Finale \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikzscale/tikzscale.ins b/graphics/pgf/contrib/tikzscale/tikzscale.ins
new file mode 100644
index 0000000000..273fa3d7c8
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/tikzscale.ins
@@ -0,0 +1,72 @@
+%%
+%% This is file `tikzscale.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tikzscale.dtx (with options: `install')
+%% ----------------------------------------------------------------
+%% tikzscale --- Absolute resizing of TikZ pictures and PGF plots without scaling text
+%% E-mail: pat_h@web.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% ----------------------------------------------------------------
+%%
+\input docstrip.tex
+\keepsilent
+\askforoverwritefalse
+\preamble
+----------------------------------------------------------------
+tikzscale --- Absolute resizing of TikZ pictures and PGF plots without scaling text
+E-mail: pat_h@web.de
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+----------------------------------------------------------------
+
+\endpreamble
+\postamble
+
+Copyright (C) 2012 by Patrick Häcker <pat_h@web.de>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status) by
+Patrick Häcker.
+
+This work consists of the file tikzscale.dtx
+and the derived files tikzscale.ins,
+ tikzscale.pdf and
+ tikzscale.sty.
+
+\endpostamble
+\usedir{tex/latex/tikzscale}
+\generate{
+ \file{tikzscale.sty}{\from{tikzscale.dtx}{package}}
+}
+\endbatchfile
+
+%%
+%% Copyright (C) 2012 by Patrick Häcker <pat_h@web.de>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License (LPPL), either
+%% version 1.3c of this license or (at your option) any later
+%% version. The latest version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Patrick Häcker.
+%%
+%% This work consists of the file tikzscale.dtx
+%% and the derived files tikzscale.ins,
+%% tikzscale.pdf and
+%% tikzscale.sty.
+%%
+%%
+%% End of file `tikzscale.ins'.
diff --git a/graphics/pgf/contrib/tikzscale/tikzscale.pdf b/graphics/pgf/contrib/tikzscale/tikzscale.pdf
new file mode 100644
index 0000000000..8702f0ba8e
--- /dev/null
+++ b/graphics/pgf/contrib/tikzscale/tikzscale.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikzsymbols/README.md b/graphics/pgf/contrib/tikzsymbols/README.md
new file mode 100644
index 0000000000..ad77b09f66
--- /dev/null
+++ b/graphics/pgf/contrib/tikzsymbols/README.md
@@ -0,0 +1,107 @@
+
+tikzsymbols
+===========
+
+Overview
+--------
+
+The *tikzsymbols* package v4.10c (2019/02/08) contains symbols created using tikz.
+
+This package provides:
+ * various emoticons
+ * cooking symbols
+ * trees
+ * other symbols (e.g. Penrose-Triangle (Triban), chair, coffeecup, etc.)
+
+FAQ
+-------
+See documentation
+
+Changes
+-------
+* v1.6 Several bugs fixed and some options added.
+* v1.7 New symbols and some `bugs` fixed
+* v2.0
+ - Bug fixed, now option `tree=on/off` is working again,
+ - new symbols: `\Triban`, improved BasicTree code.
+ - New option: `marvsoym` (see documentation for more details).
+* v2.2
+ - Included `\@ifpackageloaded`, now symbols can have negative scale,
+ - Did something else, I can't remember.
+* v2.25 Changed some code
+* v2.5
+ - New option: `draftabsolute` (symbols are replaced by text and LateX becomes faster again). Changed manual a bit.
+* v3.0
+ - Symbols are stored inside a save-box and are used via `\usebox`,
+ - New option: `draft=absolute` (old option is still useable, but obsolete),
+ - Changed output of `draft=absolute`,
+ - New option: `prefix=<prefix>`, adds a `<prefix>` to all commands,
+ - New option: `usebox=true/false` If false the symbols aren't stored inside a box,
+ - See manual for more changes.
+* v3.0a New cooking-symbols: `\grater`, `\bottle`
+* v3.0b Deleted some non-ASCII characters.
+* v3.0g
+ - Removed a bug caused by me messing up with commands.
+ - Removed package `calc` and replaced `\setlength` with `\pgfmathsetlength`
+ - Reworked some code of the symbols.
+ - Did not change the manual.
+* v3.0h Created a bug in the process of fixing the last bug, added the forgotten \\fi.
+* v3.01alpha Copied the 2e code and started rewriting the code in LaTeX3.
+* v3.38 Nearly finished rewriting.
+* v3.40 Now everything is coded in LaTeX3.
+* v3.40-v3.95 Various fixes and changes.
+* v3.95 New emoticon `\(d)Changey`.
+* v4.0 Finished reworking the code.
+* v4.01
+ - Added a known problem to the documentation.
+ - New Symbol: `\rollingpin` (and of course the german equivalent `\Nudelholz`)
+* v4.02
+ - Added option `baseline=true/false` to fix a bug occurring with `todonotes`
+ - New Symbols: `\cChangey` and `\dcChangey`
+* v4.06
+ - New Emoticon: `\(d)Sleepey`.
+ - New Emoticon: `\SchrodingersCat`.
+ - New option: `global-scale`.
+ - New option: `symbol-scale`.
+ - `\tikzsymbolsset` now raises a warning if a load-time option is used.
+ - Some minor fixes.
+* v4.07 Option `usebox` is now usable during the document.
+* v4.10
+ - Added FAQ.
+ - All files are now derived from the .dtx file.
+ - New option: `append-style`.
+ - New option: `remember-picture`.
+ - Internal change: `baseline`.
+ - Deleted invisible sign.
+ - New symbolpair: `\Knoblauchpresse` and `\garlicpress`.
+ - Option `draft` and `final` now set the internal draft boolean locally.
+ - Reworked sizes of the plain vanilla draft boxes.
+* v4.10a Bugfix: Forgot to remove colors from `\Strichmaxerl`
+* v4.10b Bugfix: Replace deprecated `\c_zero` by `0`
+* v4.10c Bugfix: Added dimension to `xshift` and `yshift` for `\Fire`, `\Candle` and `\(d)Laughey`
+
+Requirements
+------------
+
+ * expl3 & xparse
+ * tikz
+ * xcolor
+ * xspace
+ * l3keys2e
+
+This file contains
+------------------
+
+ * README
+ * tikzsymbols.pdf
+ * tikzsymbols.dtx
+ * tikzsymbols.ins
+
+License
+-------
+This ma­te­rial is sub­ject to the LATEX Project Public Li­cense 1.3c. See
+
+ http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+
+for the details of that license.
+
diff --git a/graphics/pgf/contrib/tikzsymbols/tikzsymbols.dtx b/graphics/pgf/contrib/tikzsymbols/tikzsymbols.dtx
new file mode 100644
index 0000000000..e845b8342f
--- /dev/null
+++ b/graphics/pgf/contrib/tikzsymbols/tikzsymbols.dtx
@@ -0,0 +1,6034 @@
+% \iffalse meta-comment
+% !TEX encoding = UTF-8 Unicode
+% !TEX program = pdfLaTeX
+%
+%
+%<*internal>
+\iffalse
+%</internal>
+%<*readme>
+
+tikzsymbols
+===========
+
+Overview
+--------
+
+The *tikzsymbols* package v4.10c (2019/02/08) contains symbols created using tikz.
+
+This package provides:
+ * various emoticons
+ * cooking symbols
+ * trees
+ * other symbols (e.g. Penrose-Triangle (Triban), chair, coffeecup, etc.)
+
+FAQ
+-------
+See documentation
+
+
+Changes
+-------
+* v1.6 Several bugs fixed and some options added.
+* v1.7 New symbols and some `bugs` fixed
+* v2.0
+ - Bug fixed, now option `tree=on/off` is working again,
+ - new symbols: `\Triban`, improved BasicTree code.
+ - New option: `marvsoym` (see documentation for more details).
+* v2.2
+ - Included `\@ifpackageloaded`, now symbols can have negative scale,
+ - Did something else, I can't remember.
+* v2.25 Changed some code
+* v2.5
+ - New option: `draftabsolute` (symbols are replaced by text and LateX becomes faster again). Changed manual a bit.
+* v3.0
+ - Symbols are stored inside a save-box and are used via `\usebox`,
+ - New option: `draft=absolute` (old option is still useable, but obsolete),
+ - Changed output of `draft=absolute`,
+ - New option: `prefix=<prefix>`, adds a `<prefix>` to all commands,
+ - New option: `usebox=true/false` If false the symbols aren't stored inside a box,
+ - See manual for more changes.
+* v3.0a New cooking-symbols: `\grater`, `\bottle`
+* v3.0b Deleted some non-ASCII characters.
+* v3.0g
+ - Removed a bug caused by me messing up with commands.
+ - Removed package `calc` and replaced `\setlength` with `\pgfmathsetlength`
+ - Reworked some code of the symbols.
+ - Did not change the manual.
+* v3.0h Created a bug in the process of fixing the last bug, added the forgotten \\fi.
+* v3.01alpha Copied the 2e code and started rewriting the code in LaTeX3.
+* v3.38 Nearly finished rewriting.
+* v3.40 Now everything is coded in LaTeX3.
+* v3.40-v3.95 Various fixes and changes.
+* v3.95 New emoticon `\(d)Changey`.
+* v4.0 Finished reworking the code.
+* v4.01
+ - Added a known problem to the documentation.
+ - New Symbol: `\rollingpin` (and of course the german equivalent `\Nudelholz`)
+* v4.02
+ - Added option `baseline=true/false` to fix a bug occurring with `todonotes`
+ - New Symbols: `\cChangey` and `\dcChangey`
+* v4.06
+ - New Emoticon: `\(d)Sleepey`.
+ - New Emoticon: `\SchrodingersCat`.
+ - New option: `global-scale`.
+ - New option: `symbol-scale`.
+ - `\tikzsymbolsset` now raises a warning if a load-time option is used.
+ - Some minor fixes.
+* v4.07 Option `usebox` is now usable during the document.
+* v4.10
+ - Added FAQ.
+ - All files are now derived from the .dtx file.
+ - New option: `append-style`.
+ - New option: `remember-picture`.
+ - Internal change: `baseline`.
+ - Deleted invisible sign.
+ - New symbolpair: `\Knoblauchpresse` and `\garlicpress`.
+ - Option `draft` and `final` now set the internal draft boolean locally.
+ - Reworked sizes of the plain vanilla draft boxes.
+* v4.10a Bugfix: Forgot to remove colors from `\Strichmaxerl`
+* v4.10b Bugfix: Replace deprecated `\c_zero` by `0`
+* v4.10c Bugfix: Added dimension to `xshift` and `yshift` for `\Fire`, `\Candle` and `\(d)Laughey`
+
+Requirements
+------------
+
+ * expl3 & xparse
+ * tikz
+ * xcolor
+ * xspace
+ * l3keys2e
+
+
+This file contains
+------------------
+
+ * README
+ * tikzsymbols.pdf
+ * tikzsymbols.dtx
+ * tikzsymbols.ins
+
+License
+-------
+This ma­te­rial is sub­ject to the LATEX Project Public Li­cense 1.3c. See
+
+ http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+
+for the details of that license.
+
+%</readme>
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+ \expandafter\begingroup
+\fi
+%</internal>
+%<*install>
+\input l3docstrip.tex
+%\keepsilent
+\askforoverwritefalse
+\preamble
+
+ Copyright (C) 2013--2019 by Ben Vitecek (current Maintainer)
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either version 1.3c
+ of this license or (at your option) any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3c or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ This work consists of the files README.md, tikzsymbols.dtx,
+ tikzsymbols.ins and the derived files tikzsymbols.sty.
+
+\endpreamble
+%\postamble
+
+%\endpostamble
+\usedir{tex/latex/tikzsymbols}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+%</install>
+%<install>\endbatchfile
+%<*internal>
+\usedir{source/latex/tikzsymbols}
+\generate{
+ \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\usedir{doc/latex/tikzsymbols}
+\generate{
+ \file{README.md}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+ \expandafter\endbatchfile
+\else
+ \expandafter\endgroup
+\fi
+%</internal>
+%<*driver>
+\documentclass[onlydoc,11pt,english]{l3doc}
+%: documentclass
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{lmodern}
+\usepackage{babel}
+\usepackage{marvosym}
+\usepackage{microtype}
+\usepackage{longtable}
+\usepackage{booktabs}
+\usepackage{mathtools}
+\usepackage{tikzsymbols}
+\usepackage{xparse}
+\usepackage{marginnote}
+
+\usepackage{cleveref}
+
+
+\EnableCrossrefs
+%\CodelineIndex
+\RecordChanges
+\AtEndDocument { \PrintChanges \PrintIndex }
+
+\makeatletter
+\ExplSyntaxOn
+
+
+\newcommand\tikzsymbols{\Package{tikzsymbols}}
+
+\NewDocumentCommand{\definedBasicTree} { O{1} m m m m }
+ {
+ \group_begin:
+ \__tikzsymbols_Basic_Tree_off:nnnnn {#1} {#2} {#3} {#4} {#5}
+ \group_end:
+ }
+
+
+\newcommand{\Package}{\pkg}
+\newcommand{\Option}{\texttt}
+\newcommand{\opt}{\texttt}
+\newcommand{\Makro}{\cs}
+\newcommand{\mycs}{\cs}
+\newcommand{\makrouse}[1]{\use:c{#1}}
+\newcommand{\Meta}[1]{\meta{#1}}
+
+\colorlet{mybracegreen}{green!50!black}
+\renewcommand\marg[1]{\textcolor{mybracegreen}{\texttt{\char`\{}}%
+ \meta{#1}%
+ \textcolor{mybracegreen}{\texttt{\char`\}}}%
+}
+
+
+\hfuzz=500pt
+\vbadness=\maxdimen
+\hbadness=\maxdimen
+
+
+\cs_new:Npn \CreateExample #1#2
+ {
+ \tl_set_rescan:Nnn \l_tmpa_tl
+ {
+ \char_set_catcode_other:N \{
+ \char_set_catcode_other:N \}
+ }
+ {#2}
+ \Makro{#1\l_tmpa_tl} \space \use:c {#1}#2
+ }
+
+\clist_new:N \printclist
+
+\cs_new:Npn \MapinTable
+ {
+ \clist_use:Nn \printclist { }
+ }
+
+\clist_gset_eq:NN \printclist \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist
+
+\clist_if_exist:NF \printclist { \ERROR }
+
+\newcommand{\loadtime}{\marginpar{load-time}}
+\newcommand{\preamble}{\marginpar{preamble}}
+\newcommand{\preload}{\marginpar{load-time and preamble}}
+
+
+
+\NewDocumentEnvironment { myexample } { }
+ {
+ \medskip
+ \noindent\textbf{Examples:}
+ }{
+
+ }
+\NewDocumentEnvironment { mynote } { }
+ {
+ \medskip
+ \noindent\textbf{Note:}%
+ }{
+
+ }
+
+%\tikzsymbolsset { marvosym=true }
+
+
+\ExplSyntaxOff
+\makeatother
+
+
+
+\begin{document}
+\DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+%
+%
+% \iffalse meta-comment
+%: Changes
+% \fi
+%
+%
+%
+%
+% \GetFileInfo{\jobname.sty}
+%
+% \iffalse meta-comment
+%: DoNotIndex
+% \fi
+%
+%\DoNotIndex {\begin{tikzpicture},\end{tikzpicture}}
+%\DoNotIndex {\verb, \DeclareRobustCommandx}
+%\DoNotIndex {=\verb}
+%\DoNotIndex {\verb||}
+%\DoNotIndex {\draw,\fill,\DeclareRobustCommand, \colorlet,\shade}
+%\DoNotIndex {\xspace,\begin,\end}
+%
+%
+%
+%
+% \begin{documentation}
+%
+% \title{The \Package{\jobname} package\thanks{This document corresponds to \textsf{\jobname}~\fileversion, dated~\filedate.}}
+%
+%\author{Ben Vitecek \\
+% \href{mailto:b.vitecek@gmx.at}{b.vitecek@gmx.at} \\
+% \href{https://github.com/Vidabe/tikzsymbols}{GitHub}
+% }
+%
+%^^A \date{August 19, 2017}
+%
+% \maketitle{}
+%
+%
+%
+% \begin{abstract} \centering
+% Some symbols created using \Package{tikz}.
+%
+% For differences between the releases
+% see \cref{sec:important-changes}.
+%
+% English is (still) not my native language so there (still) might be some
+% errors\footnote{They are -- of course -- on purpose (expect for
+% \enquote{avaiable} (sic!)).} \Winkey.
+% \end{abstract}
+%
+% \tableofcontents
+%
+%
+% \section{Introduction}
+% \label{sec:intro}
+%
+% \begin{comment}
+% As far as I can remember this package is a result of me writing a cooking book.
+% I wasn't able to find the symbols I wanted on CTAN and so I used \Package{tikz}
+% and my (sadly) very humble skills to develop the predecessor
+% called \Package{somesymbols}. Developing and making symbols
+% was a lot of fun and suddenly I had (badly coded) Emoticons, cooking-symbols
+% and other symbols. Somehow I got the idea of uploading them to CTAN
+% and wrote
+%
+% Well,
+% \end{comment}
+%
+%
+% As far as I can remember this package is the result of me writing a
+% cooking book\footnote{Well, it's one result, the other one is a cooking book.}.
+% Back then I wasn't able to find the cooking symbols I wanted and
+% using time, \Package{tikz}, lot's of magic
+% (also known as \enquote{programming}, but only if the respective person
+% knows what's going on) and a documentation in bad grammar\footnote{Not that it' now any better.} I somehow ended up with this package.
+%
+% During time \LaTeX3 became known to me and I started experimenting
+% and programming in this (I would say due to its simplicity compared to \LaTeXe\
+% far superior) language. Well, long story short: I was impressed.
+% And so the idea of writing my package in \LaTeX3 was born.
+%
+% I finally took my time and started rewriting my code using \LaTeX3.
+% This process can be summarized as: \enquote{What \emph{does} this command?},
+% \enquote{Why did I define \emph{this} command?} and
+% more generally \enquote{\emph{What} have I done?!}
+% Well, let's hope my code (and grammar) is better this time\footnote{Looking at own risk.
+% You have been warned.}.
+%
+% Well \dots\ that's it, have fun!
+%
+%
+%
+% \section{Important changes}
+% \label{sec:important-changes}
+%
+% The package should behave the same way as the \enquote{old} \LaTeXe\ release.
+%
+% \begin{description}
+% \item[2018] Option \opt{draft} and \opt{final} are now local.
+% \item[2017] Option \Option{usebox} can be used during the document.
+% \item[old] The horribly named command
+% \Makro{tikzsymbolsaftersymbolinput} is not defined anymore by this
+% package.
+% Please use the new option \Option{after-symbol},
+% in combination with the new command \Makro{tikzsymbolsset},
+% see \cref{sec:options} for more information.
+% \item[very old]
+% The option \Option{draft=absolute} is now
+% obsolete and replaced by the much simpler option \Option{draft=true}.
+% \end{description}
+%
+%
+%^^A And a new Emoticon: \Makro{Changey} (and \Makro{dChangey}).
+%
+%
+% \section{Options}
+% \label{sec:options}
+%
+% ^^A All options but \Option{after-symbols} can be set as load-time
+% ^^A options and can be given inside the optional argument of
+% ^^A \Makro{usepackage}:
+%
+%
+% Options can either be set as package options or using
+% \Makro{tikzsymbolsset}. Some options can only be set as package
+% options, those are described in \cref{sec:glob-opt}.
+%
+% It is recommended to use the option \Option{draft=true} while
+% working on the document.
+%
+% \begin{function}{\tikzsymbolsset}
+% \begin{syntax}
+% \Makro{tikzsymbolsset} \marg{keys = values}
+% \end{syntax}
+%
+% Most keys, except
+% for the load-time options (\cref{sec:glob-opt}), can be
+% set using this command.
+%
+%^^A This command can only be used in the preamble and most keys, except
+%^^A for the load-time options (\cref{sec:glob-opt}), can be
+%^^A set using this command.
+% \end{function}
+%
+%
+%
+% \subsection{Load-time Options}
+% \label{sec:glob-opt}
+%
+% The following options \emph{cannot} be set using \Makro{tikzsymbolsset}.
+%
+% \subsubsection{marvosym (true/false)}
+% \label{sec:marvosym}
+%
+% \begin{syntax}
+% marvosym = true / false
+% \end{syntax}
+%
+% Please load \tikzsymbols\
+% \emph{after} \Package{marvosym}.
+%
+% \Package{marvosym} also defines \Makro{Smiley} and
+% \Makro{Coffeecup}. If you prefer those symbols (\mvchr{169}, \mvchr{75}) over the
+% \tikzsymbols\ ones (\Smiley, \Coffeecup) you can use this option. If set to true
+% \Package{tikzsymbols} cancels the definition of its
+% \Makro{Smiley} and \Makro{Coffeecup}:
+%
+% \begin{center}
+% \begin{tabular}{ c c }
+% \toprule
+% Without option \enquote{marvosym}: \Smiley \Coffeecup & With
+% option \enquote{marvosym}: \mvchr{169} \mvchr{75}\\ \midrule
+% \verb|\usepackage{marvosym}| & \verb|\usepackage{marvosym}|\\
+% \verb|\usepackage{tikzsymbols}| &
+% \verb|\usepackage[marvosym]{tikzsymbols}| \\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+%
+%
+% This option raises an error if set \Option{true} without loading package \Package{marvosym}.
+%
+% Can only be set as load-time option.
+%
+% You may also use the option \Option{prefix} (\cref{sec:prefix}).
+%
+%
+% \subsubsection{prefix (\meta{string})}
+% \label{sec:prefix}
+%
+% This option takes a string as value: \Option{prefix=\meta{string}} and
+% adds this prefix to every command defined by this package. So
+% setting \Option{prefix=\meta{prefix}} adds \meta{prefix} to all commands of
+% this package: \Makro{\meta{prefix}command}.
+%
+%\meta{prefix} should neither contain
+% any special characters (e.g., \"a, \"u, \ss, etc.) nor spaces.
+%
+% By default it is empty, so no prefix is given, if this option is given
+% without an argument \meta{prefix} is set to \Option{tikzsymbols}.
+%
+% Can only be set as a load-time option.
+%
+% For example:
+%
+% \begin{center}
+% \Makro{usepackage[prefix=tikzsym]\{tikzsymbols\}}
+% \end{center}
+%
+% defines \Makro{Smiley} as \Makro{tikzsymSmiley}, \Makro{Kochtopf} as
+% \Makro{tikzsymKochtopf}, \Makro{pot} as \Makro{tikzsympot}, etc.
+%
+% If you use this option or think about using this option the
+% following command may be handy:
+%
+% \begin{function}{\tikzsymbolsuse}
+% \begin{syntax}
+% \Makro{tikzsymbolsuse}\marg{Symbolname}
+% \end{syntax}
+% This command takes the name of the symbol \emph{without}
+% backslash and prints the symbol (or raises an error if the symbol
+% is not defined). Using this command you don't have to worry about
+% a \meta{prefix}, just write the command name and this command adds
+% automatically the given prefix to the command name.
+%
+%
+% \end{function}
+%
+%
+% \begin{myexample}
+% \Makro{tikzsymbolsuse\{Smiley\}[2]} \tikzsymbolsuse{Smiley}[2]
+%
+% \Makro{tikzsymbolsuse\{BasicTree\}[1.2]\{black\}\{red!50!black\}\{red\}\{leaf\}}
+% \tikzsymbolsuse{BasicTree}[1.2]{black}{red!50!black}{red}{leaf}
+%
+%
+% \Makro{tikzsymbolsuse\{Ofen\}} \tikzsymbolsuse{Ofen}
+%
+% \Makro{tikzsymbolsuse\{Fire\}[-1.3]} \tikzsymbolsuse{Fire}[-1.3]
+%
+% etc.
+% \end{myexample}
+%
+% \subsection{Normal Options}
+% \label{sec:pream-opt}
+%
+% Most of these options can be set either as a package-option or with
+% \Makro{tikzsymbolsset}.
+%
+% \subsubsection{draft (true/false)}
+% \label{sec:draft}
+%
+% \begin{function}{draft}
+% \begin{syntax}
+% draft = \meta{true/false}
+% \end{syntax}
+%
+% While working on the document it is recommended to set this option
+% to \Option{true} because creating many symbols may takes some time
+% to compile and by setting this option to \Option{true} the symbols
+% are replaced by plain vanilla rectangles (with approximately the same height and width as
+% the symbols) which are faster to
+% create.
+%
+% You can also set this option during the document.
+%
+% The old option \Option{draft=absolute} is
+% obsolete and should therefore not be used.
+%
+% \end{function}
+%
+% \subsubsection{final (true/false)}
+% \label{sec:final}
+%
+% \begin{function}{final}
+% \begin{syntax}
+% final= \meta{true/false}
+% \end{syntax}
+%
+% This key has the opposite behavior of the option \Option{draft}.
+%
+% It is a boolean key and therefore accepts only \Option{true} or
+% \Option{false} and is set to \Option{true} by default. Setting it to
+% \Option{true} prints all symbols normally. Setting it to
+% \Option{false} prints plain vanilla draft-boxes instead which speeds
+% up the compile-process.
+%
+% \end{function}
+%
+%
+%
+%
+% \subsubsection{tree (true/false/on/off)}
+% \label{sec:tree}
+%
+% \begin{function}{tree}
+% \begin{syntax}
+% tree= \meta{true/on/false/off}
+% \end{syntax}
+%
+% This key accepts \Option{true}, \Option{false} and furthermore
+% \Option{on} and \Option{off} (for historical reasons). The latter do exactly the same as the
+% first ones.
+%
+% This option has only an effect on the command \Makro{BasicTree}
+% and its derivates (\Makro{Springtree}, \Makro{Summertree},
+% \Makro{Autumntree} and \Makro{Wintertree}) and substitutes them with
+% \Package{tikz} drawn boxes.
+%
+% So while \Option{draft=true} replaces the output of \emph{all} commands with simple
+% black boxes, \Option{tree=true/on} only replaces the output of
+% \enquote{tree}-commands with boxes.
+%
+% It is recommended to use \Option{draft=true}, but if you want you
+% can use this option.
+%
+% \end{function}
+%
+%
+%
+%
+% \subsubsection{after-symbol (\meta{string or command})}
+% \label{sec:after-symbol}
+%
+% \begin{function}{after-symbol}
+% Is more stable if set using \Makro{tikzsymbolsset}.
+% \begin{syntax}
+% after-symbol = \marg{string or command}
+% \end{syntax}
+% The value of this key is inserted after every command of this
+% package. By default it is set to \Makro{xspace}.
+%^^A This command is more robust
+%^^A if used with \Makro{tikzsymbolsset}
+% \end{function}
+%
+%
+% \subsubsection{global-scale (\meta{number}) \\
+% symbol-scale (\meta{key-value list})}
+% \label{sec:global-scale}
+%
+% \begin{function}{global-scale, symbol-scale}
+% \begin{syntax}
+% global-scale = \marg{number}
+% symbol-scale = \marg{symbol-1=number-1, symbol-2=number-2,\dots}
+% \end{syntax}
+% \opt{global-scale} can be used to scale \emph{all} commands by given \meta{number}.
+%
+% If only some specific symbols should be scaled, you may use the second option
+% and specify which symbol or symbols (name of the symbol without backslash) should be scaled.
+% Using the german name (if available) has the same effect as using the english one.
+%
+% \begin{mynote}
+% You can scale the symbols in this package in three different ways: The first
+% is to scale \emph{all} symbols using \opt{global-scale}, the second is scaling
+% specific symbols using \opt{symbol-scale} and the third is by using the
+% optional argument provided by the symbols (which I call \opt{local-scale}; e.g.
+% \verb|\Smiley[2]|).
+%
+% The important thing is that those scaling methods \emph{do not cancel} each
+% other, but behave multiplicative.
+%
+% If a local scale is given (e.g.\ \verb|\Smiley[2]|) with \opt{global-scale=3}
+% the resulting scaling will be $3\cdot 2=6$. Is furthermore this specific symbol
+% is also scaled (e.g. by $1.1$), the resulting scaling
+% (for this symbol) will be $3\cdot 1.1 \cdot 2=6.6$.
+% \end{mynote}
+%
+% \end{function}
+%
+% \begin{myexample}
+% \verb|\tikzsymbolsset{symbol-scale={ Smiley= 1.5 }}|
+% \tikzsymbolsset{symbol-scale={ Smiley= 1.5 }}
+% \Smiley \\
+% \verb|\tikzsymbolsset{symbol-scale={ Smiley= 5 }}|
+% \tikzsymbolsset{symbol-scale={ Smiley= 5 }}
+% \Smiley \\
+% \verb|\tikzsymbolsset{symbol-scale={ Smiley= 2, Schneebesen=2.1 }}|
+% \tikzsymbolsset{symbol-scale={ Smiley= 2, Schneebesen=2.1 }}
+% \Smiley \Schneebesen \\
+% \verb|\tikzsymbolsset{global-scale=3,symbol-scale={ Smiley= 2, Schneebesen=2.1 }}|
+% \tikzsymbolsset{global-scale=3,symbol-scale={ Smiley= 2, Schneebesen=2.1 }}
+% \Smiley \Schneebesen
+% \end{myexample}
+%
+% \begin{mynote}
+% Using \enquote{eggbeater} instead of \enquote{Schneebesen}
+% does the same thing.
+% \end{mynote}
+%
+%
+%
+% \subsubsection{append-style (\meta{tikz' keyval})}
+% \label{sec:append-style}
+%
+% \begin{function}{append-style}
+% \begin{syntax}
+% append-style = \marg{tikz' keyval}
+% \end{syntax}
+%
+% With this option you can append \pkg{tikz}' \meta{keyval}
+% to \pkg{tikzsymbols} internal style.
+%
+% \begin{mynote}
+% The style is called \verb|__tikzsymbols| and while the name
+% will probably not change, you are discouraged to use it directly
+% unless it is \emph{really} necessary (e.g.\ if I did something wrong).
+% \end{mynote}
+% \end{function}
+%
+%
+% \subsubsection{usebox (true/false)}
+% \label{sec:usebox}
+%
+% \begin{function}{usebox}
+% \begin{syntax}
+% usebox = \marg{true/false}
+% \end{syntax}
+% In \Package{tikzsymbols} all symbols are stored inside boxes
+% (\Makro{sbox}) and while I still have no idea what exactly happens,
+% it shortens the compilation time of the document. By
+% default this option is \Option{true}.
+%
+% The drawback is that \LaTeX\ has only a limited number of box
+% registers. If you come across an error message regarding boxes try setting \Option{usebox=false}.
+% \end{function}
+%
+%
+%
+% \subsubsection{baseline (true/false)}
+% \label{sec:baseline}
+%
+% \begin{function}{baseline}
+% \begin{syntax}
+% baseline = \marg{true/false}
+% \end{syntax}
+% This option mainly exists to let the commands of this package work inside
+% \pkg{todonotes}' \cs{todo} command. If set to \Option{true} it adds to each
+% symbol of this package
+% the tikz option \Option{baseline=default}. If you do not want this, set this option
+% to \Option{false}. It is set to \Option{true} by default.
+% \end{function}
+%
+% \subsubsection{remember-picture (true/false)}
+% \label{sec:rem-picture}
+%
+% \begin{function}{remember-picture}
+% \begin{syntax}
+% remember-picture = \marg{true/false}
+% \end{syntax}
+%
+% Adds to each symbol created by this package the \pkg{tikz}
+% option \opt{remember picture=\meta{true/false}}.
+% It is not added by default.
+%
+% \end{function}
+%
+%
+%
+%
+%
+%
+%
+% \section {Symbols}
+%
+%
+% In this section the symbols are introduced.
+% { They \Kochtopf \tiny all \dInnocey \Huge change \Moai \small automatically \Wintertree \large with \oven \normalsize text-size \Strichmaxerl. }
+%
+%
+%
+%
+%
+%
+% \subsection{Cooking-symbols \texorpdfstring{\Kochtopf}{Kochtopf}}
+%
+% \begin{function}
+% {
+% \Kochtopf,
+% \pot,
+% \Bratpfanne,
+% \fryingpan,
+% \Schneebesen,
+% \eggbeater,
+% \Sieb,
+% \sieve,
+% \Purierstab,
+% \blender,
+% \Dreizack,
+% \trident,
+% \Backblech,
+% \bakingplate,
+% \Ofen,
+% \oven,
+% \Pfanne,
+% \pan,
+% \Herd,
+% \cooker,
+% \Saftpresse,
+% \squeezer,
+% \Schussel,
+% \bowl,
+% \Schaler,
+% \peeler,
+% \Reibe,
+% \grater,
+% \Flasche,
+% \bottle,
+% \Nudelholz,
+% \rollingpin ,
+% \Knoblauchpresse , \garlicpress
+% }
+%
+% The following table shows all available cooking-symbols and their
+% respective commands.
+% The first column shows the command-names (german \& english),
+% the second the optional parameter(s).
+% The optional parameter(s) are for both the german and the
+% english commands the same.
+%
+% \Meta{scale} can be a number between (not exactly) $-1400$ and
+% (also not exactly) $1400$, default is $1$.
+%
+%
+% Da Umlaute nicht in Befehlsnamen vorkommen dürfen, werden die Umlaute
+% \"o, \"a, \"u durch o, a, u ersetzt.
+%
+% \begin{longtable}{l l c@{~~}c}
+% \multicolumn{2}{l}{German \& English Commands} & Optional
+% parameter(s) & Output \\\toprule\endhead
+% \\ \bottomrule \endfoot
+% \MapinTable
+% \bottomrule
+% \end{longtable}
+%
+%
+%
+%
+% \end{function}
+%
+%
+%
+%
+%\subsection{Emoticons \texorpdfstring{\Smiley}{Smiley}}
+%
+%\subsubsection{\enquote{Normal} Emoticons \texorpdfstring{\Cat}{Cat}}
+%
+%
+%
+% \begin{function}
+% {
+% \Smiley,
+% \Sadey,
+% \Neutrey,
+% \Changey,
+% \cChangey,
+% \Annoey,
+% \Laughey,
+% \Winkey,
+% \oldWinkey,
+% \Sey,
+% \Xey,
+% \Innocey,
+% \wInnocey,
+% \Cooley,
+% \Tongey,
+% \Nursey,
+% \Vomey,
+% \Walley,
+% \rWalley,
+% \Cat,
+% \SchrodingersCat,
+% \Ninja,
+% \Sleepey,
+% \NiceReapey
+% }
+%
+% First column shows the commands, the second the (optional)
+% parameter(s), the third the default-output (the only command with
+% a mandatory argument is \Makro{Changey}).
+%
+% \Meta{scale} can be a number between (not exactly) $-2000$ and (not
+% exactly) $2000$, ^^A{Do you even need so large symbols?},
+% default is $1$.
+%
+% \Meta{color} can be every defined color. Note: The color names
+% shouldn't contain special characters like \ss, \"a, \"o, \dots
+%
+% \Makro{Changey}'s \Meta{mood} has to be between $-2$ and $2$
+% ($1$ equals \Makro{Smiley}, $-1$ \Makro{Sadey} and $0$ \Makro{Neutrey}).
+%
+% \Makro{SchrodingersCat}'s \Meta{case} can either be $1$ (alive), $0$ (unknown)
+% or $-1$ (dead).
+%
+% \begin{longtable}{llc}
+% Commands & (Optional) parameter(s) & Output \\\toprule\endhead
+%
+% \bottomrule\endfoot
+%
+%
+% \Makro{Smiley}& \oarg{scale}\oarg{color} & \Smiley \\
+% \Makro{Sadey}& \oarg{scale}\oarg{color} & \Sadey \\
+% \Makro{Neutrey}& \oarg{scale}\oarg{color} & \Neutrey \\
+% \Makro{Changey}& \oarg{scale}\oarg{color}\marg{mood} & \Changey{2} \\
+% \Makro{cChangey}& \oarg{scale}\oarg{color1}\oarg{color2}\oarg{color3}\marg{mood} & \cChangey{2} \\
+% \Makro{Annoey}& \oarg{scale}\oarg{color} & \Annoey \\
+% \Makro{Laughey}& \oarg{scale}\oarg{color}\oarg{mouth color} & \Laughey \\
+% \Makro{Winkey}& \oarg{scale}\oarg{color} & \Winkey \\
+% \Makro{oldWinkey}& \oarg{scale}\oarg{color} & \oldWinkey \\
+% \Makro{Sey}& \oarg{scale}\oarg{color} & \Sey \\
+% \Makro{Xey}& \oarg{scale}\oarg{color} & \Xey \\
+% \Makro{Innocey}& \oarg{scale}\oarg{color}\oarg{halo color} & \Innocey \\
+% \Makro{wInnocey}& \oarg{scale} & \wInnocey \\
+% \Makro{Cooley}& \oarg{scale}\oarg{color} & \Cooley \\
+% \Makro{Tongey}& \oarg{scale}\oarg{color}\oarg{tongue color} & \Tongey \\
+% \Makro{Nursey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{cross color} &\Nursey \\
+% \Makro{Vomey}& \oarg{scale}\oarg{color}\oarg{vomit color} & \Vomey \\
+% \Makro{Walley}& \oarg{scale}\oarg{color}\oarg{wall color} & \Walley \\
+% \Makro{rWalley}\marginnote{\enquote{r} for \enquote{random generated cracks}.}& \oarg{scale}\oarg{color}\oarg{wall color} & \rWalley \\
+% \Makro{Cat}& \oarg{scale}& \Cat \\
+% \Makro{SchrodingersCat}& \oarg{scale}\marg{case}& \SchrodingersCat{0} \\
+% \Makro{Ninja}& \oarg{scale}\oarg{color}\oarg{headband color}\oarg{eye color}& \Ninja \\
+% \Makro{Sleepey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{star color}& \Sleepey \\
+% \Makro{NiceReapey} & \oarg{scale} & \NiceReapey \\
+% \bottomrule
+% \end{longtable}
+%
+%
+%
+% \end{function}
+%
+% Examples: \CreateExample{Sadey}{[][red]}
+%
+% \CreateExample{Cooley} {[-3][cyan]}
+%
+% \CreateExample{Vomey}{[1.5][green!80!black][olive]}
+%
+% \CreateExample{Nursey}{[][yellow][blue][red]}.
+%
+% \CreateExample{Ninja}{[1.3][][violet][red]}.
+%
+% \verb|\colorbox{yellow}{\Winkey \Annoey[-1]\Neutrey}|\colorbox{yellow}{\Winkey \Annoey [-1]\Neutrey}
+%
+% \verb|\textcolor{blue}{\Sey}| \textcolor{blue}{\Sey}
+%
+% \CreateExample{Sleepey} {[1][white][blue][yellow!95!black]}
+%
+% \CreateExample{SchrodingersCat} {{1}} \par
+% \CreateExample{SchrodingersCat} {{0}}\par
+% \CreateExample{SchrodingersCat} {{-1}}
+%
+% \CreateExample{Changey} {{-2}}
+% \CreateExample{Changey} {{-1.367}}
+% \CreateExample{Changey} {{-1}}
+% \CreateExample{Changey} {{0}}
+% \CreateExample{Changey} {{1}}
+% \CreateExample{Changey} {{1.41}}
+% \CreateExample{Changey} {{2}}
+%
+% \CreateExample{cChangey} {{2}}
+% \CreateExample{cChangey} {{1}}
+% \CreateExample{cChangey} {{0.5}}
+% \CreateExample{cChangey} {{0.1}}
+% \CreateExample{cChangey} {{0}}
+% \CreateExample{cChangey} {{-0.5}}
+% \CreateExample{cChangey} {{-1}}
+% \CreateExample{cChangey} {{-2}}
+%
+% \CreateExample{cChangey} {[][][blue]{-1}}
+% \CreateExample{cChangey} {[][][blue]{0.5}}
+%
+% If you intent to change the color of \cs{cChangey} you may define a new command
+% so that you do not have to write those brackets each time.
+%
+%
+% \subsubsection{\enquote{3D} Emoticons \texorpdfstring{\dSmiley\dSadey[-1]}{dSmiley dSadey}}
+%
+%
+% \begin{function}
+% {
+% \dSmiley,
+% \dSadey,
+% \dNeutrey,
+% \dChangey,
+% \dcChangey,
+% \dAnnoey,
+% \dLaughey,
+% \dWinkey,
+% \dSey,
+% \dXey,
+% \dInnocey,
+% \dCooley,
+% \dNinja,
+% \drWalley,
+% \dWalley,
+% \dVomey,
+% \dNursey,
+% \dTongey,
+% \dSleepey,
+% \olddWinkey
+% }
+%
+%
+%
+% First column shows the commands (note: the \enquote{3D} Emoticons
+% begin with \Makro{d\dots}), the second shows the (optional)
+% parameter(s), the third shows the default-output (the only command
+% with a mandatory argument is \Makro{dChangey}).
+%
+% \Meta{scale} can be a number between a small number (under
+% $-500$ for sure) and a large number (over 500 for sure),
+% default is $1$.
+%
+% \Meta{color} can be every defined color (see examples below). Note:
+% The color names shouldn't contain special characters like \ss, \"a,
+% \"o, \dots
+%
+% \Makro{Changey}'s \meta{mood} has to be between $-2$ and $2$
+% ($1$ equals \Makro{dSmiley}, $-1$ \Makro{dSadey} and $0$ \Makro{dNeutrey}).
+%
+% \begin{longtable}{llc}
+% Commands & Optional parameter(s) & Output \\\toprule\endhead
+%
+% \bottomrule\endfoot
+%
+% \Makro{dSmiley}& \oarg{scale}\oarg{color} & \dSmiley \\
+% \Makro{dSadey}& \oarg{scale}\oarg{color} & \dSadey \\
+% \Makro{dNeutrey}& \oarg{scale}\oarg{color} & \dNeutrey \\
+% \Makro{dChangey}& \oarg{scale}\oarg{color}\marg{mood} & \dChangey{2} \\
+% \Makro{dcChangey}& \oarg{scale}\oarg{color1}\oarg{color2}\oarg{color3}\marg{mood} & \dcChangey{2} \\
+% \Makro{dLaughey}& \oarg{scale}\oarg{color}\oarg{mouth color} & \dLaughey \\
+% \Makro{dAnnoey}& \oarg{scale}\oarg{color} & \dAnnoey \\
+% \Makro{dWinkey}& \oarg{scale}\oarg{color} & \dWinkey \\
+% \Makro{olddWinkey}& \oarg{scale}\oarg{color} & \olddWinkey \\
+% \Makro{dSey}& \oarg{scale}\oarg{color} & \dSey \\
+% \Makro{dXey}& \oarg{scale}\oarg{color} & \dXey \\
+% \Makro{dInnocey}& \oarg{scale}\oarg{color}\oarg{halo color} & \dInnocey \\
+% \Makro{dCooley}& \oarg{scale}\oarg{color} & \dCooley \\
+% \Makro{dTongey}& \oarg{scale}\oarg{color}\oarg{tongue color} & \dTongey \\
+% \Makro{dNursey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{cross color} & \dNursey \\
+% \Makro{dVomey}& \oarg{scale}\oarg{color}\oarg{vomit color} & \dVomey \\
+% \Makro{dWalley}& \oarg{scale}\oarg{color}\oarg{wall color} & \dWalley \\
+% \Makro{drWalley}\marginnote{\enquote{r} for \enquote{random generated cracks}.}& \oarg{scale}\oarg{color}\oarg{wall color}& \drWalley \\
+% \Makro{dNinja}& \oarg{scale}\oarg{color}\oarg{headband color}\oarg{eye color} & \dNinja \\
+% \Makro{dSleepey}& \oarg{scale}\oarg{color}\oarg{cap color}\oarg{star color}& \dSleepey \\
+% \bottomrule
+% \end{longtable}
+%
+% \end{function}
+%
+%
+% Examples:
+% \CreateExample{dSadey}{[][red]}
+%
+% \CreateExample{dCooley}{[-3][cyan]}
+%
+% \CreateExample{dVomey}{[1.5][green!70!black][olive]}
+%
+% \CreateExample{dNursey}{[][yellow][blue][red]}.
+%
+% \CreateExample{dNinja}{[1.3][][violet][red]}.
+%
+% \CreateExample{dChangey} {{-2}}
+% \CreateExample{dChangey} {{-1.367}}
+% \CreateExample{dChangey} {{-1}}
+% \CreateExample{dChangey} {{0}}
+% \CreateExample{dChangey} {{1}}
+% \CreateExample{dChangey} {{1.41}}
+% \CreateExample{dChangey} {{2}}
+%
+%
+% \CreateExample{dcChangey} {{2}}
+% \CreateExample{dcChangey} {{1}}
+% \CreateExample{dcChangey} {{0.5}}
+% \CreateExample{dcChangey} {{0.1}}
+% \CreateExample{dcChangey} {{0}}
+% \CreateExample{dcChangey} {{-0.5}}
+% \CreateExample{dcChangey} {{-1}}
+% \CreateExample{dcChangey} {{-2}}
+%
+% \CreateExample{dcChangey} {[][][blue]{-1}}
+% \CreateExample{dcChangey} {[][][blue]{0.5}}
+%
+% If you intent to change the color of \cs{dcChangey} you may define a new command
+% so that you do not have to write those brackets each time.
+%
+% \subsection{Other Symbols \texorpdfstring{\Moai}{Moai}}
+%
+% \begin{function}
+% {
+% \Strichmaxerl,
+% \Candle,
+% \Fire,
+% \Coffeecup,
+% \Chair,
+% \Bed,
+% \Tribar,
+% \Moai,
+% \Snowman
+% }
+%
+% \Makro{Strichmaxerl}'s optional parameters 2--5 (\Meta{left arm} to
+% \Meta{right leg}) can be a number
+% between $-360$ and $360$ (of course the number can be even
+% greater or even smaller.). The parameters are
+% the angles between the body and the separate parts of
+% \Makro{Strichmaxerl} (see examples).
+%
+% \Meta{scale} can be a very great and a very small negative number (but I
+% don't think, that you need so large symbols).
+%
+% \Meta{color} can be every defined color. Note: The color names
+% shouldn't contain special characters like \ss, \"a, \"o, \dots.
+%
+% \begin{longtable}{llc}
+% Commands & Optional parameter(s) & Output \\\toprule\endhead
+%
+% \bottomrule\endfoot
+%
+% \Makro{Strichmaxerl} & \oarg{scale}\oarg{left arm}\oarg{right arm}\oarg{left leg}\oarg{right leg} &\Strichmaxerl\\
+% \Makro{Candle} & \oarg{scale} & \Candle\\
+% \Makro{Fire} & \oarg{scale} & \Fire\\
+% \Makro{Coffeecup} & \oarg{scale} & \Coffeecup\\
+% \Makro{Chair} & \oarg{scale} & \Chair\\
+% \Makro{Bed} & \oarg{scale} & \Bed\\
+% \Makro{Moai} & \oarg{scale} & \Moai\\
+% \Makro{Tribar} &\oarg{scale}\oarg{color 1}\oarg{color 2}\oarg{color 3} & \Tribar\\
+% \Makro{Snowman} &\oarg{scale} & \Snowman\\
+% \bottomrule
+% \end{longtable}
+%
+%
+% \end{function}
+%
+% \CreateExample{Tribar}{[-10][blue][red][green]}
+%
+% \CreateExample{Tribar}{[2.1][blue][blue!50][blue!20]}
+%
+% \vspace{1ex}
+%
+% \CreateExample{Strichmaxerl}{[1][10][30][40][4]} ,
+%
+% \CreateExample{Strichmaxerl}{[1.4][210][310][10][90]} ,
+%
+% \CreateExample{Strichmaxerl}{[2][510][110][190][990]} ,
+%
+% \CreateExample{Strichmaxerl}{[0.9][54][28][95][16]}
+%
+% \CreateExample{Strichmaxerl}{[][54][28]}
+%
+% \CreateExample{Strichmaxerl}{[][45][45][45][45]}
+%
+%
+% \begin{function}
+% {
+% \BasicTree ,
+% \Springtree ,
+% \Summertree ,
+% \Wintertree ,
+% \WorstTree ,
+% }
+%
+% \subsection{Trees \texorpdfstring{\BasicTree{blue!60!black}{red}{green}{leaf}}{BasicTree}}\label{Trees}
+%
+% \Meta{scale} can be a number between (not exactly) $-900$ and (again
+% not exactly) $900$, default is
+% $1$.
+%
+% \Meta{color} can be every defined color (see examples below). Note:
+% The color names shouldn't contain special characters like \ss, \"a,
+% \"o, \dots.
+%
+% \marg{leaf} uses the colors of \marg{leaf color a}
+% and \marg{leaf color b}, you can leave this one empty if you don't
+% want leaves (\verb|\Wintertree| is without \emph{leaf}, see examples
+% below).
+%
+% If you are using those trees, \LaTeX{} needs longer to produce the
+% output. So you may use the package option \Option{tree=off},
+% or (better) \Option{draft=true} (see section
+% \cref{sec:draft} and \cref{sec:tree}) to make \LaTeX{} faster.
+%
+% Furthermore those trees are pretty much stolen from the
+% \Package{tikz} manual.
+%
+% \begin{center}
+% \begin{tabular}{@{}llc@{}}
+% Commands & Optional/Needed parameter(s) & Output
+% \\\toprule
+%
+%
+% \Makro{BasicTree} & \oarg{scale}\marg{trunk color}\marg{leaf color a}\marg{leaf color b}\marg{leaf} & see below \\
+%
+% \Makro{Springtree} & \oarg{scale} & \Springtree \\
+% \Makro{Summertree} & \oarg{scale} & \Summertree \\
+% \Makro{Autumntree} & \oarg{scale} & \Autumntree \\
+% \Makro{Wintertree} & \oarg{scale} & \Wintertree \\
+% \Makro{WorstTree} & \oarg{scale} & \WorstTree \\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+%
+% \end{function}
+%
+% \paragraph{\Makro{BasicTree} examples} Some \enquote{normal} trees:
+%
+% \verb|\colorbox{green}{\BasicTree{red}{orange}{yellow}{leaf}}|\colorbox{green}{\BasicTree{red}{orange}{yellow}{leaf}}
+%
+% \CreateExample{BasicTree}{[5]{orange!95!black}{orange!80!black}{orange!70!black}{leaf}}
+%
+% \CreateExample{BasicTree}{[2]{blue!65!white}{cyan!50!white}{cyan!50!white}{}}
+%
+% \CreateExample{BasicTree}{[-1.54]{green!20!black}{green!50!black}{green!70!black}{leaf}}
+%
+% \verb|\colorbox{black}{\BasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}|
+% \colorbox{black}{\BasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}
+%
+% \paragraph{draftbox \Makro{BasicTree} examples} Some \enquote{draftbox} trees
+% (using \Option{tree=false}):
+%
+% \dots and using the same trees with \Option{tree=off/false} or \Option{draft}(\Option{=true}):
+%
+% \verb|\colorbox{green}{\BasicTree{red}{orange}{yellow}{leaf}}|
+% \colorbox{green}{\definedBasicTree{red}{orange}{yellow}{leaf}}
+%
+% \verb|\BasicTree[5]{orange!95!black}{orange!80!black}{orange!70!black}{leaf}|
+% \definedBasicTree[5]{orange!95!black}{orange!80!black}{orange!70!black}{leaf}
+%
+% \verb|\BasicTree[2]{blue!65!white}{cyan!50!white}{cyan!50!white}{}|
+% \definedBasicTree[2]{blue!65!white}{cyan!50!white}{cyan!50!white}{}
+%
+% \verb|\BasicTree[-1.54]{green!20!black}{green!50!black}{green!70!black}{leaf}|
+% \definedBasicTree[-1.54]{green!20!black}{green!50!black}{green!70!black}{leaf}
+%
+% \verb|\colorbox{black}{\BasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}| \colorbox{black}{\definedBasicTree[3.75]{gray!80}{gray!50}{gray!40}{leaf}}
+%
+% \bigskip
+%
+% I think it's better if you define your own trees using \verb|\newcommand| and \verb|\BasicTree|:
+%\begin{verbatim}
+% \newcommand{\Myicetree}[1][1]{%
+% \BasicTree[#1]{blue!65!white}{cyan!50!white}{cyan!50!white}{}}
+% \end{verbatim}
+%
+%
+% \begin{comment}
+% \section{Known errors \& Problems}
+%
+% \subsection*{marvosym}
+% Make sure you load \Package{marvosym} \emph{before}
+% \Package{tikzsymbols} because both packages define \verb|\Smiley|,
+% \Package{marvosym} via \verb|\newcommand| \tikzsymbols\ via
+% \Makro{DeclareDocumentCommand}.
+%
+% If you load \Package{marvosym} \emph{after} \tikzsymbols,
+% \LaTeX{} generates an error-message because \verb|\Smiley| has
+% already been defined.
+%
+% If you load \Package{marvosym} \emph{before} \tikzsymbols,
+% \Package{tikzsymbols} will overwrite \Package{marvosym}'s Smiley (and Coffeecup) and no
+% error-message is generated (if you like the \verb|\Smiley| from
+% marvosym more, use the \tikzsymbols{} option \verb|marvosym|
+% or \Option{prefix}).
+%
+% \subsection*{babel}
+%
+% If you encounter an error message like
+% \begin{verbatim}
+% Argument of \pgffor@next has an extra }
+% \end{verbatim}
+% while using \pkg{babel} with e.g. language \enquote{francais}
+% and for example \cs{Cooley} you may add
+% \begin{verbatim}
+% \usetikzlibrary{babel}
+% \end{verbatim}
+% to your preamble. This should (hopefully) fix the problem.
+%
+% \end{comment}
+%
+%
+%
+%
+%
+%
+% \section{FAQ (Known errors and problems)}
+%
+% Or \enquote{Questions I assume would be frequently asked, if people would
+% frequently ask questions}.
+%
+% \subsection{How to get rid of the space after each symbol?}
+%
+% By default the package adds \cs{xspace} after each command.
+% To remove it use the option \opt{after-symbol}. Using
+% \begin{verbatim}
+% \tikzsymbolsset{after-symbol={}}
+% \end{verbatim}
+% removes the \cs{xspace} command and thus the unwanted space.
+%
+%^^A This was done way back and today I most probably wouldn't do it anymore,
+%^^A but it stayed now for around $4$ years and I don't know if I really should get
+%^^A rid of it by default.
+%
+%
+%
+%
+% \subsection{Using the symbols causes unwanted \meta{problem}. How could I get rid of it?}
+%
+% This could have something to do with question \ref{sec:Q:store-symbol}
+% (after you made sure that the symbols cause the problem).
+% Try using setting the option \opt{usebox=false} and recompile a few
+% times. If the problem persists, please send a bug report (\cref{sec:bug}).
+%
+% \subsection{I am getting the error-message \texttt{Argument of \textbackslash pgffor@next has an extra \}}}
+%
+% If you encounter an error message like
+% \begin{verbatim}
+% Argument of \pgffor@next has an extra }
+% \end{verbatim}
+% while using \pkg{babel} with e.g. language \enquote{francais}
+% and for example \cs{Cooley} you may add
+% \begin{verbatim}
+% \usetikzlibrary{babel}
+% \end{verbatim}
+% to your preamble. This should (hopefully) fix the problem.
+%
+%
+% \subsection{Another package I load already defines \meta{symbol}.}
+%
+% You can override pretty much every symbol simply by loading
+% \pkg{tikzsymbols} last as it defines the symbols via
+% \cs{DeclareDocumentCommand} (see \pkg{xparse}).
+%
+% If you want to use the symbols of both packages you may have
+% a look at option \opt{prefix}.
+%
+%
+%^^A \subsection{Why is it important to know that this package stores symbols in boxes
+%^^A and reuses them instead of creating a new picture every time?}
+% \subsection{Does this package store symbols in boxes
+% and reuses them instead of creating a new picture every time?}
+% \label{sec:Q:store-symbol}
+%
+% Yes, it does. It can become a problem if \LaTeX\ runs out of boxes. If this happens,
+% use \opt{usebox=false}.
+%
+% Furthermore, \pkg{tikz} allows to reference pictures using e.g.\
+% \opt{remember picture}. This also influences the symbols
+% of \pkg{tikzsymbols}. As those symbols are stored and
+% copied for printing, labels attached to the symbols get repeated.
+% In this case, also try using \opt{usebox=false} (or try the option
+% \opt{remember-picture=false}).
+%
+%^^A Another problem is that if a label is added to a symbol
+%^^A (for example by the \pkg{tikz} option \opt{remember picture})
+%^^A then this label is repeated every time the symbol is used. If you have
+%^^A already used the symbol \emph{before} the label is added, nothing happens
+%^^A as a copy of the symbol without the label is used. If it is used the first time,
+%^^A then the label is also stored and repeated every time the symbol is used later.
+%^^A This behavior can also be fixed by \opt{usebox=false} or adding
+%^^A a \pkg{tikz} style by \opt{append-style}.
+%
+%
+% \subsection{Are the symbols created with the environment \texttt{tikzpicture}?}
+%
+% Yes, they are.
+%
+%
+%
+%
+%
+%
+%
+%
+% \section{Nobody is perfect}
+% \label{sec:bug}
+%
+% If you find a bug please send me a mail (or report it on GitHub)
+% involving a \emph{minimal example}
+% showing the bug and a short description (english or german).
+% Please mention (if you are writing
+% a mail)
+% \enquote{\Package{tikzsymbols}} in the header, \enquote{gmx} has
+% a habit of putting mails into the spam-folder
+% and it helps me to recognize those mails faster.
+% This can also be the reason why I may need some time to answer
+% the mail.
+%
+% As I am also new to GitHub, I also may take longer to answer, at least until I
+% figured out how to get a mail if a new issue is created.
+%
+% Suggestions are also welcome.
+%
+%
+%
+%
+%
+% \section{Danksagung}
+%
+% I would like to thank all users for providing bug reports
+% and helping to improve this package.
+%
+% Furthermore many thanks to my brother helping me improving
+% the symbols.
+%
+% \section{Changes}
+%
+% See the \enquote{README.md} file.
+%
+%
+% \end{documentation}
+% \begin{implementation}
+%
+% \iffalse meta-comment
+%: subsec: Code
+% \fi
+%
+% There is not much to see, all this symbols were created with \Package{tikz}.
+% But it may helps you (somehow).
+%
+% PS. Enter at own risk, bad code and grammar up ahead.
+%
+%
+%
+%
+%
+%
+% \section{\LaTeX3 code}
+%
+%
+%
+% \begin{macrocode}
+%<@@=tikzsymbols>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+%\changes {v1.0} {2013/01/19} {Initial version}
+%\changes {v1.05} {2013/02/13} {Deleted a \enquote{t} in the BasicTree-code, shortened the trunk from the tree a bit, renamed some codes, made an index}
+%\changes {v1.6} {2013/02/14} {Now \enquote{Person} can be used in sections, etc.}
+%\changes {v1.6} {2013/02/14} {Now an error message is generated if the last parameter of \enquote{BasicTree} is neither \enquote{leaf} nor empty.}
+%\changes {v1.6} {2013/02/14} { New options: draft and final. If in documentclass the option \enquote{draft} is defined, the package recognizes it. Plus some warnings if you use class option draft/final with package option tree=on/off.}
+%\changes {v1.6} {2013/02/14} { Renamed \enquote{tikzsymbolsaftersymbolinput} to \enquote{tikzsymbolsaftersymbolinput}}
+%\changes {v1.61} {2013/02/17} {Made an invisible box in BasicTree.}
+%\changes {v1.65} {2013/02/17} {Improved BasicTree; New symbols \enquote{Schaler/peeler}, Laughey, Walley, Ninja; but didn't improve the source-description}
+%\changes {v1.7} {2013/02/28} {New symbols, etc.}
+%\changes {v2.0} {2013/03/07} {Fixed Bugs, improved BasicTree, new option \enquote{marvosym}, new symbol}
+%\changes {v2.2} {2013/03/23} {Now you can use negative scaling. Include \Makro{@ifpackageloaded}. Did something else, I can't remember}
+%\changes {v2.5} {2013/04/18} {New option: draftabsolute, changed the documentation a bit}
+%\changes {v3.0} {2013/07/21} {Changed the documentation}
+%\changes {v3.0} {2013/07/21} {Replaced \cs{let} by \cs{tikzsymbols@let}}
+% \changes{v3.0}{2013/07/21}{Changed symbol code}
+% \changes{v3.0}{2013/07/26}{Using \cs{changes{}{}{}} correctly (hopefully)}
+% \changes{v3.0}{2013/07/21}{Changed output of \enquote{absolute} option}
+% \changes{v3.0b}{2014/10/19}{Deleted non ASCII characters in der .sty file.}
+% \changes{v3.0d}{2014/10/29}{\cs{tikzsymbolsscl} to \cs{tikzsymbols@scl}}
+% \changes{v3.0e}{2014/10/29}{\cs{tikzsymbolsDeclareRobustCommand} to \cs{tikzsymbols@Declare@Robust@Command}}
+% \changes{v3.0f}{2014/10/29}{\cs{tikzsymbolsbxPrmtrstore} to \cs{tikzsymbols@bx@Prmtrstore}}
+%
+% \changes{v3.0g}{2015/10/01}{Deleted package \Package{calc}, using now \cs{pgfmathsetlength} instead of \cs{setlength}.}
+%
+% \changes{v3.0h}{2015/10/13}{Added a missing \cs{fi} into the code. }
+%
+% \changes{v3.01alpha}{2015/10/03}{Started from new using \LaTeX3}
+%
+% \changes{v3.38}{2015/10/03}{Nearly finished translating the code to
+% \LaTeX3. Himmel! Das war einfach nur zach! Muss aber noch den
+% \LaTeXe\ Code löschen.}
+%
+% \changes{v3.40}{2015/10/03}{Now everything is written in \LaTeX3.}
+%
+% \changes{v3.50}{2015/10/03}{Now it compiles without error (without
+% using any command or options.)}
+%
+% \changes{v3.58}{2015/10/04}{Fixed every error occurring while using
+% the symbols without optional arguments and package
+% options. Something is still wrong with \cs{@@_Basic_Tree_off:nnnnn}}
+%
+% \changes{v3.60}{2015/10/05}{Fixed \cs{@@_Basic_Tree_off:nnnnn}}
+%
+% \changes{v3.70}{2015/10/05}{Now every draftbox has the correct
+% size.}
+%
+% \changes{v3.75}{2015/10/05}{\cs{tikzsymbolsuse} works now.}
+%
+% \changes{v3.9}{2015/10/8}{Various fixes, new command \Makro{tikzsymbolsuse} and started to write a new documentation.}
+% \changes{v3.95}{2016/03/20}{Removed the only-preambility of \Makro{tikzsymbolsset}.}
+% \changes{v3.95}{2016/03/20}{Changed name of key-group from 'preamble' to
+% 'document'.}
+%
+% \changes{v3.9}{2016/04/04}{Added \Makro{@ifackagelater}.}
+% \changes{v3.99}{2016/04/04}{As advised undid my version-resetting.}
+% \changes{v4.0}{2016/03/20}{Finished reworking the code.}
+% \changes{v4.0}{2016/26/12}{Added \cs{Nudelholz} bzw. \cs{rollingpin}.}
+%
+% \changes{v4.02}{2017/05/14}{Added option 'baseline=true/false' to fix a some strange
+% behaviors with \pkg{todonotes}.}
+% \changes{v4.02}{2017/05/14}{Defined the tikz-style '/\_\_tikzsymbols' which is used to implement 'baseline'.}
+%
+% \changes{v4.03}{2017/08/08}{New symbols: \cs{Sleepey} and \cs{dSleepey}.}
+% \changes{v4.04}{2017/08/08}{New symbol: \cs{SchrodingersCat}.}
+%
+% \changes{v4.10}{2018/04/11}{New option: \opt{append-style}.}
+% \changes{v4.10}{2018/04/11}{New option: \opt{remember-picture}.}
+% \changes{v4.10}{2018/04/11}{Change how \opt{baseline} works (internal).}
+% \changes{v4.10}{2018/04/11}{Delete invisible sign (I \emph{hate} those).}
+% \changes{v4.10}{2018/04/11}{New symbolpair: \cs{Knoblauchpresse} and \cs{garlicpress}.}
+% \changes{v4.10}{2018/04/11}{Option \opt{draft} and \opt{final} are local now.}
+%
+% \changes{v4.10a}{2018/05/16}{Removed colors from \cs{Strichmaxerl}.}
+% \changes{v4.10b}{2019/02/07}{Replaced \cs{c_zero} by \texttt{0}.}
+% \changes{v4.10c}{2019/02/08}{Fixed \texttt{xshift} and \texttt{yshift} by adding dimensions. Fixes \cs{Fire}, \cs{Candle} and \cs{(d)Laughey}.}
+%
+% The first lines are always the same: What do I need, what is the
+% package named.
+% \begin{macrocode}
+\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
+\@ifpackageloaded{expl3}{}{\RequirePackage{expl3}}
+\@ifpackagelater{expl3}{2018/02/21}
+ {}
+ {%
+ \PackageError { tikzsymbols }{ Support~package~expl3~too~old }
+ {%
+ You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~
+ 'l3packages'.\MessageBreak
+ Loading~tikzsymbols~will~abort!
+ }%
+ \endinput
+ }
+\ProvidesExplPackage
+ {tikzsymbols}
+ {2019/02/08}
+ {4.10c}
+ {Some symbols created using tikz and LaTeX3.}
+\@ifpackageloaded { tikz } {} { \RequirePackage { tikz } }
+\@ifpackageloaded { xcolor } {} { \RequirePackage { xcolor } }
+\@ifpackageloaded { xspace } {} { \RequirePackage { xspace } }
+\@ifpackageloaded { l3keys2e } {} { \RequirePackage { l3keys2e } }
+% \end{macrocode}
+%
+% Furthermore we need to load some libraries from \Package{tikz}, I
+% hope these \Makro{ExplSyntax...} don't break anything.
+% \begin{macrocode}
+\ExplSyntaxOff
+\usetikzlibrary {arrows,decorations.pathmorphing,trees}
+\ExplSyntaxOn
+% \end{macrocode}
+%
+%
+% \begin{macro}{
+% \l_@@_if_scale_negative_bool ,
+% \g_@@_if_opt_tree_print_bool ,
+% \l_@@_if_opt_draft_bool ,
+% \g_@@_if_opt_marvosym_bool ,
+% }
+% Booleans we later need, \cs{l_@@_if_scale_negative_bool} is set true
+% in symbols which need some extra code if the scaling is negative
+% (like \verb|\Chair|). The other booleans are used for the package
+% options and are therefor globally.
+% \begin{macrocode}
+\bool_new:N \l_@@_if_scale_negative_bool
+\bool_new:N \g_@@_if_opt_tree_print_bool
+\bool_new:N \l_@@_if_opt_draft_bool
+\bool_new:N \g_@@_if_opt_marvosym_bool
+% \end{macrocode}
+% \end{macro}
+%
+% Setting some of them to true by default.
+% \begin{macrocode}
+\bool_gset_true:N \g_@@_if_opt_tree_print_bool
+% \end{macrocode}
+%
+%
+%
+%
+% \begin{macro}{
+% \g_@@_command_prefix_tl ,
+% \l_@@_tikzsymbols_after_symbol_tl ,
+% \g_@@_current_situation_tl ,
+% \g_@@_scale_abs_tl ,
+% \c_@@_leaf_tl ,
+% \c_@@_black_tl ,
+% }
+%
+% I think the names speak for themselves,
+% \cs{g_@@_command_prefix_tl} is used in the option \Option{prefix}
+% and adds its content to the command names as a prefix, by default
+% it is empty.
+%
+% \Makro{g_tikzsymbols_after_symbol_tl} adds its content to the
+% document after the symbol is used.
+%
+% In \Makro{l_@@_current_situation} is a storage for the
+% current font-size and color-configurations which is needed when
+% defining boxes.
+%
+% \Makro{l_@@_scale_abs_tl} safes absolute scaling of a symbol;
+% could have used \Makro{l_tmpa_tl}. It is a \texttt{tl} because
+% using a \texttt{fp} would have required me to use
+% \Makro{fp_use:N} every time. I'm lazy, I know.
+%
+% The last two are constants and are used to check user specific
+% input at some commands (\Makro{BasicTree} and \Makro{Ninja} I believe).
+% \begin{macrocode}
+\tl_clear_new:N \g_@@_command_prefix_tl
+\tl_new:N \l_@@_tikzsymbols_after_symbol_tl
+\tl_new:N \l_@@_current_situation_tl
+\tl_new:N \l_@@_scale_abs_tl
+\tl_const:Nn \c_@@_leaf_tl { leaf }
+\tl_const:Nn \c_@@_black_tl { black }
+% \end{macrocode}
+% \end{macro}
+%
+% Setting the default value and yes, I know that you maybe should not
+% use \Makro{xspace}, but I do it anyway:
+% \begin{macrocode}
+\tl_set:Nn \l_@@_tikzsymbols_after_symbol_tl { \xspace }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_save_global_scale_for_later_because_no_better_idea_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_symbol_name_tl
+\tl_new:N \l_@@_symbol_options_clist
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fp_new:N \l_@@_global_scale_fp
+\fp_set:Nn \l_@@_global_scale_fp { 1.0 }
+% \end{macrocode}
+%
+%
+% \begin{macro}{\tikzsymbolsaftersymbolinput}
+% An obsolete macro. Is not defined anymore.
+% \begin{macrocode}
+%\cs_set_eq:NN \tikzsymbolsaftersymbolinput {}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{
+% \l_@@_Strichmaxerl_x_LA_fp ,
+% \l_@@_Strichmaxerl_x_RA_fp,
+% \l_@@_Strichmaxerl_x_LB_fp,
+% \l_@@_Strichmaxerl_x_RB_fp,
+% \l_@@_Strichmaxerl_y_LA_fp,
+% \l_@@_Strichmaxerl_y_RA_fp,
+% \l_@@_Strichmaxerl_y_LB_fp,
+% \l_@@_Strichmaxerl_y_RB_fp,
+% \@@_Strichmaxerl_x_max_fp,
+% \@@_Strichmaxerl_x_min_fp,
+% }
+%
+% Needed for the plain vanilla boxes of \Makro{Strichmaxerl} for
+% the length (\texttt{x}) and height (\texttt{y}).
+% \begin{macrocode}
+\fp_new:N \l_@@_Strichmaxerl_x_LA_fp
+\fp_new:N \l_@@_Strichmaxerl_x_RA_fp
+\fp_new:N \l_@@_Strichmaxerl_x_LB_fp
+\fp_new:N \l_@@_Strichmaxerl_x_RB_fp
+% \end{macrocode}
+% \begin{macrocode}
+\fp_new:N \l_@@_Strichmaxerl_y_LA_fp
+\fp_new:N \l_@@_Strichmaxerl_y_RA_fp
+\fp_new:N \l_@@_Strichmaxerl_y_LB_fp
+\fp_new:N \l_@@_Strichmaxerl_y_RB_fp
+% \end{macrocode}
+% \begin{macrocode}
+\fp_new:N \@@_Strichmaxerl_x_max_fp
+\fp_new:N \@@_Strichmaxerl_x_min_fp
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+% \begin{macro} { \l_@@_Moai_thickness_dim }
+%
+% It is used inside \Makro{Moai}. I figured that depending
+% on the scaling the line-thickness of \Makro{Moai} should change
+% its value (bad explained, please just look at the code).
+%
+% \begin{macrocode}
+\dim_new:N \l_@@_Moai_thickness_dim
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro} { \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist }
+% Store every command defined by this package. I may delete them.
+% \begin{macrocode}
+\clist_new:N \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \g_@@_english_commands_prop }
+% \begin{macrocode}
+\prop_new:N \g_@@_english_commands_prop
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\l_@@_tmpa_tl }
+% Some scratch variables
+% \begin{macrocode}
+\tl_new:N \l_@@_tmpa_tl
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Messages}
+%
+% Nothing special happens in this subsection.
+%
+% \begin{macro}{ obsolete-option }
+% Message for obsolete options.
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { obsolete-option }
+ {
+ Option \ '#1' \ is \ obsolete. \
+ Please \ use \ '#2' \ instead.
+ }{
+ The \ option \ you \ used \ is \ obsolete.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{undefined-command}
+% Message for undefined commands used by \Makro{tikzsymbolsuse}.
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { undefined-command }
+ {
+ Undefined \ Control \ sequence: \ '#1'. \
+ Did \ you \ write \ the \ name \ correctly?
+ }{
+ The \ command \ is \ not \ defined.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ obsolete-command }
+% Message for obsolete commands (\Makro{Person}, etc.)
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { obsolete-command }
+ {
+ Command \ '#1' \ is \ obsolete. \
+ Please \ use \ '#2' \ instead.
+ }
+ {
+ The \ command \ you \ used \ is \ obsolete.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ tree }
+% Error message for \Makro{BasicTree}. I hope the text is understandable.
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { tree }
+ {
+ Parameter \ '#1' \ cannot \ be \ used. \
+ The \ last \ parameter \ has \ either \ to \ be \
+ 'leaf' \ or \ has \ to \ be \ empty.
+ }
+ {
+ The \ fourth \ mandatory \ argument \ of \ '\protect\BasicTree' \
+ has \ either \ to \ be \ leaf \ or \ empty.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ marvosym }
+% Message if option \Option{marvosym} is used, but the package not
+% loaded at all.
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { marvosym }
+ {
+ Use \ option \ 'marvosym' \ only\
+ if \ you \ load \ package \ 'marvosym'. \
+ }{
+ Either \ load \ package \ 'marvosym' \ or \
+ delete \ the \ tikzsymbols \ option \ 'marvosym'. \
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ Changey-number-too-large }
+% \changes{v3.95}{2016/03/20}{New}
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { Changey-number-too-large }
+ {
+ Changey's \ mood \ has \ to \ be \ between \
+ -2 \ and \ 2 \ (currently:\ '#1' ).
+ }{
+ Given \ number \ is \ too \ large \ (small), \ please
+ \ use \ an \ number \ between \ -2 \ and \ 2.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+\msg_new:nnnn { tikzsymbols } { cChangey-number-too-large }
+ {
+ cChangey's \ mood \ has \ to \ be \ between \
+ -2 \ and \ 2 \ (currently:\ '#1' ).
+ }{
+ Given \ number \ is \ too \ large \ (small), \ please
+ \ use \ an \ number \ between \ -2 \ and \ 2.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ tikzsymbolsaftersymbolinput }
+% \changes{v3.95}{2016/03/20}{New}
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { tikzsymbolsaftersymbolinput }
+ {
+ The \ command \ \exp_not:N\tikzsymbolsaftersymbolinput is \
+ obsolete. \ Please \ use \ the \ option \ 'after-symbol' \ instead.
+ }{
+ \exp_not:N\tikzsymbolsaftersymbolinput is \ not \ supported \ anymore.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ SchrodingersCat }
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { SchrodingersCat }
+ {
+ \SchrodingersCat\ only \ accepts \ '-1' \ (dead), \ '0'\ (unknown)\ or \ '1'\
+ (alive) \ for \ its \ mandatroy \ argument. \ You \ have \ given \ '#1'.
+ }{
+ Your \ input \ number \ is \ not \ allowed.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ internal-message }
+% \changes{v4.05}{2017/08/09}{New}
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { internal-message }
+ {
+ This \ is \ an \ internal \ message \ and \ means \ that \
+ I \ (the \ package \ author) \ fucked \ up. \ If \ you \
+ stumble \ across \ this, \ the \ description \ message \
+ is \ '#1'.
+ }{
+ I \ apologize \ for \ that.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ package-option }
+% \changes{v4.05}{2017/08/09}{New}
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { package-option }
+ {
+ The \ option \ '#1' \ is \ only \ allowed \ as \ a \ package
+ \ option.
+ }{
+ This \ option \ is \ not \ allowed \ to \ be \ set \
+ using \ \tikzsymbolsset{}.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ symbol-name-unknown }
+% \changes{v4.05}{2017/08/09}{New}
+% \begin{macrocode}
+\msg_new:nnnn { tikzsymbols } { symbol-name-unknown }
+ {
+ The \ symbol \ '#1' \ is \ not \ available \ by \ this \ package.
+ }{
+ Perhaps \ you \ have \ misspelled it.
+ \msg_see_documentation_text:n { tikzsymbols }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+% \subsection{Helping Commands}
+% \label{sec:helping-commands}
+%
+% I define some macros which will help me to write less.
+%
+%
+%
+%
+%^^A The command \Makro{BasicTree} is split up into two commands, named
+%^^A \texttt{on} and \texttt{off}. The helper command
+%^^A \Makro{@@_Basic_Tree_aux:nnnnn} is redefined accordingly.
+%^^A \begin{macrocode}
+%^^A \end{macrocode}
+%
+%
+% \begin{macro}{ \@@_symbol_scale_i:n , \@@_symbol_scale_ii:nn }
+% \begin{macrocode}
+\cs_new:Npn \@@_symbol_scale_i:n #1
+ {
+ \@@_symbol_scale_ii:nn {#1} { 1.0 }
+ }
+\cs_new:Npn \@@_symbol_scale_ii:nn #1#2
+ {
+ \prop_get:NnNTF \g_@@_english_commands_prop {#1} \l_tmpa_tl
+ {
+ \fp_set:cn { l_@@_ \l_tmpa_tl _scale_fp } {#2}
+ }{
+ \fp_if_exist:cTF { l_@@_#1_scale_fp }
+ { \fp_set:cn { l_@@_#1_scale_fp } {#2} }
+ { \msg_error:nnn { tikzsymbols} { symbol-name-unknown } {#1} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \@@_set_scale_abs_tl:n }
+% Sets \Makro{l_@@_scale_abs_tl} to the absolute input value. I made
+% this to write less which is always a good idea (mostly).
+% \begin{macrocode}
+\cs_new:Npn \@@_set_scale_abs_tl:n #1
+ {
+ \tl_set:Nn \l_@@_scale_abs_tl { \fp_abs:n {#1} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \@@_create_draftbox:nn }
+% Creating the command to print the plain vanilla draft-boxes. The
+% group is needed because I am setting \Makro{vbadness} to
+% \Makro{c_max_dimen} to suppress underfull-hbox messages. The input
+% is evaluated because we need it for the height and the length of
+% the draftbox. The draftbox itself contains just the vbox and hbox
+% commands to set the height and length of the box surrounded by a
+% frame.
+%
+% Note to self: DO NOT USE DIM! Multiplications do not work.
+% \begin{macrocode}
+\cs_new:Npn \@@_create_draftbox:nn #1#2
+ {
+ \group_begin:
+ \vbadness=\c_max_dim
+ \fp_set:Nn \l_tmpa_fp {#1}
+ \fp_set:Nn \l_tmpb_fp {#2}
+ \frame
+ {
+ \vbox_to_ht:nn { \fp_to_dim:N \l_tmpb_fp }
+ {
+ \hbox_to_wd:nn { \fp_to_dim:N \l_tmpa_fp } { }
+ }
+ }
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_create_squared_draftbox:n }
+% Again a command to write less. This command is used if the drat-box
+% is a square.
+% \begin{macrocode}
+\cs_new:Npn \@@_create_squared_draftbox:n #1
+ {
+ \@@_create_draftbox:nn {#1} {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \@@_provide_savebox:nn }
+% \Makro{l_@@_current_situation_tl} is used here. The box
+% is only defined if it not defined yet. I don't know how those
+% boxes work, but if the same box (alias the same command in the
+% same font size and the same color and same options) is used again
+% the output (maybe) doesn't need to be calculated again. Its
+% faster, somehow, but it's faster. I am using the old commands
+% \Makro{global} and \Makro{sbox} because I didn't find the \LaTeX3
+% equivalents.
+% \begin{macrocode}
+\cs_new:Npn \@@_provide_savebox:nn #1#2
+ {
+ \tl_set:Nx \l_@@_current_situation_tl
+ {
+ \bool_if:NTF \l_@@_if_opt_draft_bool { T } { F } _
+ \current@color _ \f@size
+ }
+ \box_if_exist:cF { g_@@_savebox_ \l_@@_current_situation_tl _ #1 _box }
+ {
+ \box_new:c { g_@@_savebox_ \l_@@_current_situation_tl _ #1 _box }
+ \exp_args:NNc \global \sbox
+ { g_@@_savebox_ \l_@@_current_situation_tl _ #1 _box } {#2}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \@@_use_savebox_aux:n }
+% Use the defined \Makro{sbox}-box.
+% \begin{macrocode}
+\cs_new:Npn \@@_use_savebox:n #1
+ {
+ \exp_args:Nc \usebox
+ { g_@@_savebox_ \l_@@_current_situation_tl _ #1 _box }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\@@_provide_savebox_and_use_default:nn,
+% \@@_provide_savebox_and_use:nn }
+% Again to support my laziness. It creates the box (if it isn't
+% defined yet) and uses the box immediately afterwards.
+% \begin{macrocode}
+\cs_new:Npn \@@_provide_savebox_and_use_default:nn #1#2
+ {
+ \@@_provide_savebox:nn {#1} {#2}
+ \@@_use_savebox:n {#1}
+ }
+\cs_set_eq:NN \@@_provide_savebox_and_use:nn
+ \@@_provide_savebox_and_use_default:nn
+% \end{macrocode}
+% \end{macro}
+%
+%
+% To make this package \pkg{todonotes} safe:
+% \begin{macrocode}
+\pgfkeys{ /@@/baseline /.style= { baseline=default } }
+\pgfkeys{ /@@/.style= { /@@/baseline } }
+% \end{macrocode}
+%
+%
+% \subsection{Keys}
+% \label{sec:keys}
+%
+% Now let's define the keys for this package. Using \LaTeX3 makes the
+% whole thing a bit easier. All keys (or most) are in a group. I may
+% delete it because it may be not necessary.
+% \begin{macrocode}
+\keys_define:nn { tikzsymbols }
+ {
+% \end{macrocode}
+%
+% \begin{macro}{ final }
+% Its the final option, deddepi, deedidbtutp. Nothing special.
+% \begin{macrocode}
+ final .bool_set_inverse:N = \l_@@_if_opt_draft_bool ,
+ final .default:n = { true } ,
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ draft }
+% This option can be set to three values: true, false and absolute. I
+% decided that \Option{draft=absolute} is obsolete and that
+% \Option{draft=true} replaces this option. Of course, the 'absolute' is
+% still available, but gives a warning when used.
+% \begin{macrocode}
+ draft .choices:nn =
+ { true , false , absolute }
+ {
+ \int_case:nn { \l_keys_choice_int }
+ {
+ { 1 } { \bool_set_true:N \l_@@_if_opt_draft_bool }
+ { 2 } { \bool_set_false:N \l_@@_if_opt_draft_bool }
+ { 3 }
+ {
+ \msg_error:nnnn { tikzsymbols } { obsolete-option }
+ { draft = absolute } { draft = true }
+ \bool_set_true:N \l_@@_if_opt_draft_bool
+ }
+ }
+ } ,
+ draft .default:n= { false } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ draftabsolute }
+% Obsolete option. Old name for \Option{draft=absolute} which is
+% itself an old name for \Option{draft=true}. Don't use this option.
+% \begin{macrocode}
+ draftabsolute .code:n =
+ {
+ \msg_error:nnnn { tikzsymbols } { obsolete-option }
+ { draftabsolute } { draft = true }
+ \bool_set_true:N \l_@@_if_opt_draft_bool
+ } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ marvosym }
+% Sets the marvosym-boolean to it respective value.
+% \begin{macrocode}
+ marvosym .bool_gset:N = \g_@@_if_opt_marvosym_bool ,
+ marvosym .default:n = { true } ,
+ marvosym .groups:n = { only-package } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ usebox }
+% Don't want to speed up the code due to random reasons? Set this
+% option to 'false'.
+% \begin{macrocode}
+ usebox .choice: ,
+ usebox/true .code:n =
+ {
+ \cs_set_eq:NN
+ \@@_provide_savebox_and_use:nn
+ \@@_provide_savebox_and_use_default:nn
+ } ,
+ usebox/false .code:n =
+ {
+ \cs_set_eq:NN
+ \@@_provide_savebox_and_use:nn
+ \use_ii:nn
+ } ,
+ usebox .default:n = { true } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ prefix }
+% Sets the prefix of the commands. If for example \Option{prefix} is
+% set to \Option{tikz} this prefix is added to the command
+% names. \Makro{Sieb} will be \Makro{tikzSieb}.
+% \begin{macrocode}
+ prefix .tl_gset:N = \g_@@_command_prefix_tl ,
+ prefix .default:n = { tikzsymbols } ,
+ prefix .groups:n = { only-package } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ tree }
+% An old option, you should use \Option{draft=true} instead, but it
+% is not obsolete. For historic reasons this key still accepts 'on'
+% and 'off'.
+% \begin{macrocode}
+ tree .choices:nn =
+ { true , on , false , off }
+ {
+ \int_compare:nNnTF { \l_keys_choice_int } < { 3 }
+ { \bool_gset_true:N \g_@@_if_opt_tree_print_bool }
+ { \bool_gset_false:N \g_@@_if_opt_tree_print_bool }
+ } ,
+ tree .default:n = { true } ,
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ after-symbol }
+% Available as package option, but should be used
+% using \Makro{tikzsymbolsuse}.
+% \begin{macrocode}
+ after-symbol .tl_set:N = \l_@@_tikzsymbols_after_symbol_tl ,
+ after-symbol .default:n= { \xspace } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ append-style }
+% \begin{macrocode}
+ append-style .code:n = { \pgfkeys{ /@@/.append ~ style= {#1} } } ,
+ append-style .default:n = { } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ baseline }
+% \begin{macrocode}
+ baseline .choice: ,
+ baseline / true .code:n = { \pgfkeys{ /@@/baseline/.style={ baseline=default } } } ,
+ baseline / false .code:n = { \pgfkeys{ /@@/baseline/.style={ } } } ,
+ baseline .default:n = { true } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ remember-picture }
+% \begin{macrocode}
+ remember-picture .choice: ,
+ remember-picture / true .meta:n = { append-style = { /tikz/remember~picture = true } } ,
+ remember-picture / false .meta:n = { append-style = { /tikz/remember~picture = false } } ,
+ remember-picture .default:n = { false } ,
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ global-scale }
+% \begin{macrocode}
+ global-scale .fp_set:N = \l_@@_global_scale_fp ,
+ global-scale .default:n = { 1 } ,
+% \end{macrocode}
+% \end{macro}
+%
+% This command has to be set later as
+% the command names have not been defined yet.
+% \begin{macro}{ symbol-scale }
+% \begin{macrocode}
+ symbol-scale .code:n =
+ {
+ \tl_set:Nn \l_@@_save_global_scale_for_later_because_no_better_idea_tl
+ {
+ symbol-scale = {#1} ,
+ }
+ } ,
+ symbol-scale .default:n = { } ,
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% Now we end the key definitions.
+% \begin{macrocode}
+ }
+% \end{macrocode}
+%
+%
+%
+% We process all options.
+% \begin{macro}{ ProcessKeyOptions }
+% \begin{macrocode}
+\ProcessKeysOptions { tikzsymbols }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ symbol-scale }
+% \begin{macrocode}
+\keys_define:nn { tikzsymbols }
+ {
+ symbol-scale .code:n =
+ { \keyval_parse:NNn \@@_symbol_scale_i:n \@@_symbol_scale_ii:nn {#1} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{DeclareDocumentCommand Helpers}
+% \label{sec:declaredocumenthelpers}
+%
+% I define my own \Makro{DeclareDocumentCommand} (well, I am still
+% using \Makro{DeclareDocumentCommand}, but I am wrapping some other
+% commands around) to be able to add a prefix to the command-name and to
+% be able to write \Makro{Command}[] (note the empty brackets, you
+% don't need to insert a '1' inside, it is done automatically).
+%
+% \begin{macro}{ \@@_if_empty:Tn , \@@_scale_if_empty:nTn }
+% This command is used in \Makro{DeclareDocumentCommand} to help
+% setting the options with \verb|>{ \@@_if_empty:Tn } O{1}|. If the
+% brackets are empty the value of the option is inserted. Example:
+% The option has been defined by 'O{none}', so the value inserted if
+% no brackets are given is 'none'. If empty brackets are given,
+% normally nothing is inserted (and not 'none'). Using this command
+% if empty brackets are given 'none' is inserted automatically. This
+% safes some error messages. \Makro{ProcessedArgument} is defined in
+% the manual of \Package{xparse}.
+% \begin{macrocode}
+\cs_new:Npn \@@_if_empty:Tn #1#2
+ {
+ \tl_if_empty:nTF {#2}
+ { \tl_set:Nn \ProcessedArgument {#1} }
+ { \tl_set:Nn \ProcessedArgument {#2} }
+ }
+\cs_new:Npn \@@_scale_if_empty:nTn #1#2#3
+ {
+ \tl_set:Nx \ProcessedArgument
+ {
+ \fp_eval:n
+ {
+ \tl_if_empty:nTF {#3} {#2} {#3}
+ * \l_@@_global_scale_fp
+ * \use:c { l_@@_#1_scale_fp }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_parse_command_options:n }
+% This command helps setting the default value if empty brackets are
+% given. The code is copied from the \Package{xparse} package and
+% edited to fit my purpose. This command gets the input from the
+% options-definition.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_command_options:nn #1#2
+ {
+ \clist_clear:N \l_@@_symbol_options_clist
+ \tl_set:Nn \l_@@_symbol_name_tl {#1}
+ \@@_parse_command_options:N #2
+ \q_recursion_tail \q_recursion_tail \q_recursion_tail \q_recursion_stop
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_parse_command_options:N }
+% This command (also copied) goes through the option-definitions (in
+% my case only 'm' and 'O\{...\}') character for character. If 'O'
+% is found a (somehow) special command is used.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_command_options:N #1
+ {
+ \quark_if_recursion_tail_stop:N #1
+ \tl_if_eq:NNTF #1 O
+ { \@@_parse_option_type_O:w #1 }
+ {
+ \tl_if_eq:NNTF #1 S
+ { \@@_parse_option_type_S:Vw \l_@@_symbol_name_tl #1 }
+ { \@@_parse_option_type:w #1 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_parse_option_type:w }
+% Just saves the input in a clist. Does nothing more.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_option_type:w #1
+ {
+ \str_case:nnF {#1}
+ {
+ { m } { }
+ }
+ { \msg_error:nnn { tikzsymbols } { internal-message } { internal-parsing } }
+ \clist_put_right:Nn \l_@@_symbol_options_clist {#1}
+ \@@_parse_command_options:N
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_parse_option_type_O:w }
+% Used if an optional argument is found. Saves the default value of
+% the optional argument in \Makro{@@_if_empty:nn}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_option_type_O:w #1#2
+ {
+ \clist_put_right:Nn \l_@@_symbol_options_clist
+ { >{ \@@_if_empty:Tn {#2} } O{#2} }
+ \@@_parse_command_options:N
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_parse_option_type_S:w }
+% The |S| stands for \enquote{Scale}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_parse_option_type_S:nw #1#2
+ {
+ \clist_put_right:Nn \l_@@_symbol_options_clist
+ { >{ \@@_scale_if_empty:nTn {#1} { 1 } } O{ 1 } }
+ \@@_parse_command_options:N
+ }
+\cs_generate_variant:Nn \@@_parse_option_type_S:nw { Vw }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \@@_Declare_Document_Command:nnn }
+% Main Command to define the command of this package. It runs
+% through the second input (argument specifications), stores the
+% arguments in a \verb|\l_@@_symbol_options_clist| and adds
+% \verb|>{ \@@_if_empty:Tn {#2} }| if an optional argument is
+% found. Yeah. I think the rest is self-explaining.
+% \begin{macrocode}
+\cs_new:Npn \@@_Declare_Document_Command:nnn #1#2#3
+ {
+ \fp_new:c { l_@@_#1_scale_fp }
+ \fp_set:cn { l_@@_#1_scale_fp } { 1.0 }
+ \@@_parse_command_options:nn {#1} {#2}
+ \exp_args:Ncx \DeclareDocumentCommand
+ { \g_@@_command_prefix_tl #1 }
+ { \clist_use:Nn \l_@@_symbol_options_clist { } }
+ {
+ \cs_if_exist:NT \tikzsymbolsaftersymbolinput
+ {
+ \msg_error:nn { tikzsymbols } { tikzsymbolsaftersymbolinput }
+ }
+ #3
+ \tl_use:N \l_@@_tikzsymbols_after_symbol_tl
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \@@_Declare_Document_Commands:nnnn }
+% Needed for cooking-symbols. Automatically defines the english name
+% given in the second argument.
+% \begin{macrocode}
+\cs_new:Npn \@@_Declare_Document_Commands:nnnn #1#2#3#4
+ {
+ \clist_gput_right:Nn
+ \g_tikzsymbols_list_of_printing_cooking_with_argument_commands_clist
+ {
+ \cs{#1} & \cs{#2} & \oarg{scale} & \tikzsymbolsuse{#1} \\
+ }
+ \prop_gput:Nnn \g_@@_english_commands_prop {#2} {#1}
+ \@@_Declare_Document_Command:nnn {#1} {#3} {#4}
+ \@@_let:nn {#2} {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+%
+%
+%
+% \begin{macro}{ \@@_let:nn }
+% Used to define the english commands. It's a simple
+% \Makro{cs_set_eq:cc} adding the prefix to the command-name.
+% \begin{macrocode}
+\cs_new:Npn \@@_let:nn #1#2
+ {
+ \cs_set_eq:cc { \g_@@_command_prefix_tl #1 } { \g_@@_command_prefix_tl #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%\subsection{Tree commands}
+%\label{sec:tree-commands}
+%
+%
+%
+% \begin{macro}{ \c_@@_tikz_set_tl }
+% First I define \verb|\c_@@_tikz_set_tl|, it contains the setup for
+% the tree. This definition is pretty much the definition from the
+% \Package{tikz} package.
+% \begin{macrocode}
+\tl_const:Nn \c_@@_tikz_set_tl
+ {
+ \pgfkeys
+ {
+ /tikz/.cd ,
+ @@_ld/.style={ level ~ distance=#1ex },
+ @@_lw/.style={ line ~ width=#1ex },
+ level ~ 1/.style={ @@_ld=0.60, @@_trunk, @@_lw=0.1 ,sibling ~ angle=60 },
+ level ~ 2/.style={ @@_ld=0.20, @@_trunk!80!@@_leaf ~ a, @@_lw=.073,sibling ~ angle=70 },
+ level ~ 3/.style={ @@_ld=0.25, @@_trunk!60!@@_leaf ~ a, @@_lw=.05,sibling ~ angle=70 },
+ level ~ 4/.style={ @@_ld=0.10, @@_trunk!40!@@_leaf ~ a, @@_lw=.025,sibling ~ angle=60 },
+ level ~ 5/.style={ @@_ld=0.15, @@_trunk!20!@@_leaf ~ a, @@_lw=.02,sibling ~ angle=60 },
+ level ~ 6/.style={ @@_ld=0.08, @@_leaf ~ a, @@_lw=.021,sibling ~ angle=60 },
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \@@_Basic_Tree_aux:nnnnn }
+% I am still using a similar construction as in the \LaTeXe\
+% code. Inside this command is safed either
+% \Makro{@@_Basic_Tree_on:nnnnn} or \Makro{@@_Basic_Tree_off:nnnnn}
+% depending on the package options.
+% \begin{macrocode}
+\cs_set:Npn \@@_Basic_Tree_aux:nnnnn
+ {
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ { \@@_Basic_Tree_draft:nnnnn }
+ {
+ \bool_if:NTF \g_@@_if_opt_tree_print_bool
+ { \@@_Basic_Tree_on:nnnnn }
+ { \@@_Basic_Tree_off:nnnnn }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \@@_Basic_Tree_off:nnnnn }
+% This command creates not only the plain vanilla draftbox, but also a box
+% drawn by \Package{tikz} using the colors of the tree to color the
+% lines. If the last argument is 'leaf', the box has a bottom line, if
+% it is empty the bottom line disappears.
+% \begin{macrocode}
+\cs_new:Npn \@@_Basic_Tree_draft:nnnnn #1#2#3#4#5
+ {
+ \group_begin:
+ \@@_set_scale_abs_tl:n { #1pt + 0.02ex }
+ \tl_set:Nn \l_tmpa_tl {#5}
+ \tl_if_eq:NNTF \c_@@_leaf_tl \l_tmpa_tl
+ {
+ \@@_create_draftbox:nn
+ { (1.669825ex+0.4pt) * \l_@@_scale_abs_tl }
+ { (1.412645 ex + 0.2pt) * \l_@@_scale_abs_tl } %% 0.2pt = -0.2pt+0.4pt
+ }{
+ \@@_create_draftbox:nn
+ { (1.39223ex +0.4pt) * \l_@@_scale_abs_tl }
+ { (1.27265ex + 0.2pt) * \l_@@_scale_abs_tl } %% 0.2pt = -0.2pt+0.4pt
+ }
+ \group_end:
+ }
+\cs_new:Npn \@@_Basic_Tree_off:nnnnn #1#2#3#4#5
+ {
+ \group_begin:
+ \@@_set_scale_abs_tl:n { #1pt + 0.02ex }
+ \tl_set:Nn \l_tmpa_tl {#5}
+ \begin{tikzpicture}[ /@@ , scale=#1+0.02ex,x=1ex,y=1ex,
+ line ~ width=0.4pt * \l_@@_scale_abs_tl]
+ \tl_if_eq:NNTF \c_@@_leaf_tl \l_tmpa_tl
+ {
+ \draw[#2] (-0.8386,0+0.2pt) -- (-0.8386,1.42);
+ \draw[#3] (-0.8386,1.42) -- (0.8386,1.42);
+ \draw[#4] (0.8386,1.42) -- (0.8386,0+0.2pt);
+ \draw[#3] (0.8386,0+0.2pt) -- (0,0+0.2pt);
+ \draw[#4] (0,0+0.2pt) -- (-0.8386,0+0.2pt);
+ }{
+ \draw[#2] (-0.6998,0+0.2pt) -- (-0.6998,0.68+0.6);
+ \draw[#3] (-0.6998,0.68+0.6) -- (0.6998,0.68+0.6);
+ \draw[#4] (0.6998,0.68+0.6) -- (0.6998,0+0.2pt);
+ }
+ \end{tikzpicture}%
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{ \@@_Basic_Tree_on:nnnnn }
+% Prints the tree in all its glory. Again, this code is more or less
+% \Makro{l_@@_scale_negative_bool} is used in here.
+% copy and pasted from the \Package{tikz} manual.
+% \begin{macrocode}
+\cs_new:Npn \@@_Basic_Tree_on:nnnnn #1#2#3#4#5
+ {
+ \group_begin:
+ \@@_set_scale_abs_tl:n {#1}
+ \fp_compare:nNnT {#1} < { 0 } { \bool_set_true:N \l_@@_scale_negative_bool }
+ \tl_set:Nn \l_tmpa_tl {#5}
+ \tl_use:N \c_@@_tikz_set_tl
+ \colorlet { @@_trunk } {#2}
+ \colorlet { @@_leaf ~ a } {#3}
+ \colorlet { @@_leaf ~ b } {#4}
+ \begin{tikzpicture}[ /@@ , x=1ex , y=1ex , line ~ width=0.07ex]
+ \pgfarrowsdeclare{leaf}{leaf}
+ { \pgfarrowsleftextend { -0.1ex } \pgfarrowsrightextend { -0.05ex } }
+ {
+ \pgfpathmoveto { \pgfpoint { -0.01ex } { 0ex } }
+ \pgfpatharc { 150 } { 30 } { 0.08ex }
+ \pgfpatharc {-30 } {-150 } { 0.08ex }
+ \pgfusepathqfill
+ }
+ \tl_if_eq:NNTF \c_@@_leaf_tl \l_tmpa_tl
+ {
+ \draw[transparent , scale=#1+0.02ex , line ~ width=0.4pt* \l_@@_scale_abs_tl ]
+ (-0.8386,0+0.2pt) rectangle (0.8386, 1.42);
+ }{
+ \draw[transparent , scale=#1+0.02ex , line ~ width=0.4pt* \l_@@_scale_abs_tl ]
+ (-0.6998,0+0.2pt) rectangle (0.6998,0.68+0.6);
+ }
+ \pgflowlevel { \pgftransformscale { #1 + 0.02ex } }
+ {
+ \coordinate (root) [grow ~ cyclic , rotate=90] child
+ {
+ child [line ~ cap=round] foreach \a in { 0 , 1 , 2 }
+ {
+ child ~ foreach \b in { 0 , 1 }
+ {
+ child ~ foreach \c in { 0 , 1 , 2 }
+ { child ~ foreach \d in { 0 , 1 }
+ {
+ child ~ foreach ~ \leafcolor in { @@_leaf ~ a , @@_leaf ~ b }
+ { edge ~ from ~ parent ~ [color=\leafcolor,-#5]}
+ }
+ }
+ }
+ }
+ edge ~ from ~ parent [shorten ~ >=-0.05ex, serif ~ cm- , line ~ cap=butt]
+ };
+ }
+ \end{tikzpicture}
+ \bool_set_false:N \l_@@_scale_negative_bool
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Thats the end of our tree drawing commands. \Makro{BasicTree}
+% itself is defined later.
+%
+% \subsection{cooking utensils}
+%
+% Now let's define the cooking utensils (or cooking tools,
+% whatever).
+%
+% \begin{macro}{ \Kochtopf , \pot }
+% I think this was my first cooking utensil I made. It's a pot
+% containing boiling water. To create the german and english command
+% at the same time I use \Makro{@@_Declare_Document_Commands:nnnn}.
+% The buildup of this commands, as you saw ob subsection above, is
+% alway the same. First is the definition of the savebox. Inside the
+% absolute scaling value is safed and then checked if the plain
+% vanilla draft-boxes or the tool itself should be printed. The
+% draftbox is created via \Makro{@@_create_draftbox:nn} and contains
+% the necessary dimensions so that the output of the surroundings of
+% the symbol doesn't change\footnote{English, B\"a\"ahh!}. The
+% symbol is created using the 'tikzpicture' environment. Yup.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Kochtopf } { pot } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Kochtopf_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.47001ex * \l_@@_scale_abs_tl }
+ { 1.577ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}[ /@@ , x=2ex, y=2.2ex,
+ line ~ width=0.07ex * \l_@@_scale_abs_tl ,
+ scale=#1 ]
+% \end{macrocode}
+% Let's draw the pot.
+% \begin{macrocode}
+ \draw[rounded ~ corners=0.2ex * \l_@@_scale_abs_tl] (0,0.5) -- (0,0) -- (1,0) -- (1,0.5);
+ \draw (0,0.4) arc [start ~ angle=90, end ~ angle=270, radius=0.1];
+ \draw (1,0.4) arc [start ~ angle=90, end ~ angle=-90, radius=0.1];
+ \draw (0,0.5) -- (1,0.5) .. controls (1,0.6) and (0,0.6) .. (0,0.5);
+ \draw (0.6,0.585) arc [start ~ angle=0, end ~ angle=180, radius=0.1];
+% \end{macrocode}
+% Let's draw the water.
+% \begin{macrocode}
+ \draw[decorate, decoration=
+ { snake , amplitude=0.12ex*\l_@@_scale_abs_tl , segment ~ length=0.93ex * \l_@@_scale_abs_tl } ]
+ (0,0.35) -- (1,0.35);
+% \end{macrocode}
+% Now the bubbles are printed.
+% \begin{macrocode}
+ \draw (0.45,0.1) circle [radius=0.04];
+ \draw (0.7,0.11) circle [radius=0.04];
+ \draw (0.13, 0.125) circle [radius=0.04];
+ \draw (0.3,0.2) circle [radius=0.04];
+ \draw (0.88,0.2) circle [radius=0.04];
+ \draw (0.1,0.25) circle [radius=0.04];
+ \draw (0.6,0.25) circle [radius=0.04];
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{ \Bratpfanne , \fryingpan }
+% I think I wont add text to every command because I think a
+% description is not really necessary.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Bratpfanne } { fryingpan } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Bratpfanne_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 3.55349ex * \l_@@_scale_abs_tl }
+ { 1.4525ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.7ex , y=1.4ex , line ~ width=0.07ex * \l_@@_scale_abs_tl,
+ scale=#1 , decoration=
+ {
+ snake , amplitude = 0.05ex * \l_@@_scale_abs_tl ,
+ segment ~ length = 0.408ex * \l_@@_scale_abs_tl
+ }
+ ]
+% \end{macrocode}
+% Drawing the actual fryingpan.
+% \begin{macrocode}
+ \draw[rounded ~ corners = 0.07ex * \l_@@_scale_abs_tl]
+ (-1,0) -- (1,0) -- (1.5,0.4) -- (-1.5,0.4) -- cycle;
+ \draw[line ~ width = 0.037ex * \l_@@_scale_abs_tl , rounded ~ corners=0.023ex * \l_@@_scale_abs_tl]
+ (-1.4,0.3) -- (-3.5,0.3) -- (-3.5,0.25) -- (-1.3,0.25);
+ \draw[line ~ width=0.023ex * \l_@@_scale_abs_tl ]
+ (-1.1,0.1) -- (1.1,0.1);
+% \end{macrocode}
+% The following code prints the \dots\ ahm \dots\ Hitzwellen die aus
+% der Pfanne aufsteigen (oder so).
+% \begin{macrocode}
+ \foreach \l_tmpa_tl in { -0.3, 0.3, -1 , 1 }
+ \draw[line ~ width=0.035ex * \l_@@_scale_abs_tl, decorate] ( \l_tmpa_tl , 0.5 ) -- ( \l_tmpa_tl , 1 );
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Schneebesen , \eggbeater }
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Schneebesen } { eggbeater } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Schneebesen_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 0.56969 ex * \l_@@_scale_abs_tl }
+ { 1.57985ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ y=2.1ex,x=1.4ex, scale=#1,
+ line ~ width = 0.01ex * \l_@@_scale_abs_tl * 0.97
+ ]
+ \foreach \l_tmpa_fp in { -0.2 , -0.15, -0.1, -0.05, 0, 0.05, 0.1, 0.15, 0.2 }
+ \draw (0,0) .. controls ( \l_tmpa_fp , 0.0) and ( \l_tmpa_fp ,0.2) .. (0,0.4);
+ \fill
+ [
+ line ~ width = 0.05ex * \l_@@_scale_abs_tl ,
+ rounded ~ corners=0.07ex* \l_@@_scale_abs_tl
+ ]
+ (-0.05,0.37) -- (0.05,0.37) -- (0.05,0.75) -- (-0.05,0.75) -- cycle;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Sieb , \sieve }
+% A sieve, now the lines are not drawn manually, but using the power
+% of trigonometric functions and \Package{tikz}. Wasn't really
+% necessary, but I did it anyway.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Sieb } { sieve } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Sieb_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 3.47799 ex * \l_@@_scale_abs_tl }
+ { 1.17501 ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.8ex, y=2.8ex,line ~ width=0.02ex * \l_@@_scale_abs_tl , scale=#1
+ ]
+% \end{macrocode}
+% Drawing a simple line to hold the sieve.
+% \begin{macrocode}
+ \draw[line ~ width=0.09ex* \l_@@_scale_abs_tl ] (-0.2,0) -- (1.01,0);
+% \end{macrocode}
+% Drawing halved circles with decreasing radius.
+% \begin{macrocode}
+ \foreach \l_tmpa_fp in { 0.2 , 0.25 , ... , 0.551 }
+ \draw (\l_tmpa_fp,0) arc [start ~ angle=180, end ~ angle=360, radius=0.6-\l_tmpa_fp];
+% \end{macrocode}
+% Drawing the vertical lines of the sieve. Ahm, I may should explain
+% how this code works. \Makro{l_tmpa_fp} (again misused I think)
+% contains the starting point of the lines which will go from top to
+% bottom.
+%
+% Our sieve is looking like this at the moment:
+%
+%\begin{center}
+%\begin{tikzpicture}[scale=5]
+% \draw[very thick]
+% (-0.2,0) node [ anchor=east ]{-0.2} -- (1.01,0) node [ anchor=west ]{1.01};
+% \draw[dashed] (0.6,-0.5) -- (0.6,0.1);
+% \draw (0.6,0) node [anchor=south west] {0.6};
+% \foreach \x in { 0.2 , 0.25 , ... , 0.551 }
+% \draw (\x,0) arc [start angle=180, end angle=360, radius=0.6-\x];
+%\end{tikzpicture}
+%\end{center}
+%
+% The largest circle end at the coordinate (1,0) and so its radius is $r=0.4$.
+% Now we want to draw a line from the beginning of a smaller circle
+% to the largest circle. We take for example the next smaller circle:
+%
+% \begin{center}
+%\begin{tikzpicture}[scale=5]
+% \draw[very thick] (-0.2,0) node [ anchor=east ]{-0.2} -- (1.01,0) node [ anchor=west ]{1.01};
+% \draw[dashed] (0.6,-0.5) -- (0.6,0.1);
+% \draw (0.6,0) node [anchor=south west] {0.6};
+% \draw[dashed] (0.2,0) arc [start angle=180, end angle=360, radius=0.4];
+% \draw (0.3,0) node[above=1pt]{0.3} arc [start angle=180, end angle=360, radius=0.6-0.3] node [above]{0.9};
+% \draw[brown,dashed,->] (0.6,0) -- node[right]{0.4} ( {0.6 - cos ( 45 ) *0.4 },{ sin ( -45 )*0.4 });
+%\end{tikzpicture}
+% \end{center}
+%
+% The dashed line shows the largest circle. The only things we know are
+% the length $l$ from the middle of the circle (0.6 , 0) to the starting point (0.9 , 0):
+% $l=0.9-0.6$ and we know the radius of the circle: $r=0.4$. The next picture \dots
+% pictures this:
+%
+% \begin{center}
+%\begin{tikzpicture}[scale=5]
+% \draw[thick] (-0.2,0) -- (1.01,0) ;
+% \draw[dashed] (0.6,-0.5) -- (0.6,0.1);
+% \draw[dashed] (0.2,0) arc [start angle=180, end angle=360, radius=0.4];
+% \draw (0.3,0) arc [start angle=180, end angle=360, radius=0.6-0.3] ;
+% \draw[green,very thick] (0.6,0) -- node [above,fill=white] {$l= 0.9-0.6=0.3$} (0.9,0);
+% \draw[red,very thick] (0.9,0) -- node [right,fill=white] {$h=?$} ( 0.9, { -0.4 * sin( acos( ( 0.9 - 0.6 ) /0.4) ) } );
+% \draw[brown] (0.6,0) -- node [left=8pt,fill=white] {$r=0.4$} ( 0.9, { -0.4 * sin( acos( ( 0.9 - 0.6 ) /0.4) ) } );
+% \draw[orange,very thick] (0.8,0) node [anchor=north east] {$\alpha$} arc [start angle=0, end angle={-acos( ( 0.9 - 0.6 ) /0.4)}, radius=0.2];
+%\end{tikzpicture}
+% \end{center}
+%
+% We have the length and the radius and need the height $h$. The easiest way would
+% be the use of the sinus: $\sin(\alpha)=\frac{h}{r}$, but we don't have $\alpha$,
+% so we have to make an extra calculation:
+%
+%\begin{align}
+% \cos(\alpha) &= \frac{ l }{ r } = \frac{0.9-0.6}{0.4} && / \arccos(...) \\
+% \alpha &= \arccos\bigg( \frac{0.9-0.6}{0.4} \bigg)
+%\end{align}
+%
+% Now we have the angle $\alpha$ and can calculate the height $h$:
+%
+%\begin{align}
+% -\sin(\alpha) &= \frac { h } { 0.4 } && / \cdot 0.4 \\
+% h &= -0.4 \cdot \sin(\alpha) && / \alpha = ... \\
+% h &= -0.4 \cdot \sin\bigg[\arccos\bigg( \frac{0.9-0.6}{0.4} \bigg)\bigg]
+%\end{align}
+%
+% And to use it as a overall formula:
+%
+%\begin{equation}
+% h = -0.4 \cdot \sin\bigg[\arccos\bigg( \frac{ \backslash l\_tmpa\_fp -0.6 }{0.4} \bigg)\bigg]
+%\end{equation}
+%
+% Using this formula we can draw the line (\textbackslash l\_tmpa\_fp,0) -{}- (\textbackslash l\_tmpa\_fp,h):
+%
+% Something similar is used for the horizontal lines.
+%
+% \begin{macrocode}
+ \foreach \l_tmpa_fp in { 0.95,0.9,...,0.249 }
+ \draw (\l_tmpa_fp,0) --
+ ( \l_tmpa_fp, { -0.4 * sin( acos( ( \l_tmpa_fp - 0.6 ) /0.4) ) } );
+ \foreach \y in { -0.05 , -0.1 , ... , -0.351 }
+ \pgfmathsetmacro{\x}{0.4*cos( asin( \y /0.4 ) )}
+ \draw ({0.6 - \x },\y) -- ({ 0.6 +\x},\y);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% I hope I was able to explain it.
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Purierstab , \blender }
+% Ein P\"urierstab \dots\ ja.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Purierstab } { blender } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Purierstab_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 0.76ex * \l_@@_scale_abs_tl }
+ { 1.575ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.3ex , y=2.2ex, line ~ width=0.07ex * \l_@@_scale_abs_tl ,scale = #1
+ ]
+ \draw[rounded ~ corners=0.07ex* \l_@@_scale_abs_tl ]
+ (0,0) -- (0.3,0) -- (0.15,0.1) --cycle;
+ \fill[rounded ~ corners=0.07ex* \l_@@_scale_abs_tl ]
+ (0.15,0.3) -- (0.24,0.4) -- (0.24,0.7) -- (0.06,0.7) -- (0.06,0.4) -- cycle;
+ \draw (0.15,0.4) -- (0.15,0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Dreizack , \trident }
+% A trident, an important tool to check if potatoes are cooked enough.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Dreizack } { trident } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Dreizack_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 0.265ex * \l_@@_scale_abs_tl }
+ { 1.575ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.3ex , y=2.2ex , line ~ width=0.035ex * \l_@@_scale_abs_tl , scale = #1
+ ]
+ \fill[ rounded ~ corners=0.07ex * \l_@@_scale_abs_tl * 0.99 ]
+ (0,0) -- (0,0.4) -- (0.1,0.4) -- (0.1,0.0) -- cycle;
+ \draw (0.05,0) -- (0.05,0.7);
+ \draw[rounded ~ corners=0.07ex * \l_@@_scale_abs_tl *( 1 - \l_@@_scale_abs_tl /50 ]
+ (0,0.7) -- (0,0.55) -- (0.05,0.55) -- (0.1,0.55) -- (0.1,0.7);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Backblech , \bakingplate }
+% With holes.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Backblech } { bakingplate } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Backblech_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.31545ex * \l_@@_scale_abs_tl }
+ { 1.57ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=6.53ex , y=5ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale = #1
+ ]
+ \filldraw[rounded ~ corners=0.09ex * \l_@@_scale_abs_tl ] (0,0) rectangle (0.3,0.3);
+ \foreach \xI/\xII in { 0.1/-0.025 , 0.2/0.325 }
+ \draw[rounded ~ corners=0.07ex * \l_@@_scale_abs_tl , line ~ width=0.03ex* \l_@@_scale_abs_tl ]
+ (\xI,0) -- (\xII,0) -- (\xII,0.3) -- (\xI,0.3);
+ \foreach \@@_BackblechlochX in { 0.007 , 0.293 }
+ \foreach \@@_BackblechlochY in { 0.007 , 0.293 }
+ \fill[white] (\@@_BackblechlochX, \@@_BackblechlochY) circle [radius=0.02ex];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Ofen , \oven }
+% Ein Ofen. Sieht eigentlich so aus wie der zu Hause.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Ofen } { oven } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Ofen_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.07ex * \l_@@_scale_abs_tl }
+ { 1.57ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.50ex , y=0.5ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale=#1
+ ]
+ \draw (0,0) rectangle (4,3);
+ \draw (0.25,0.25) rectangle (3.75,2);
+ \foreach \@@_Ofenschalter in {0.5,1.1,2.9,3.5}
+ \fill (\@@_Ofenschalter,2.5) circle [radius=0.22];
+ \draw (1.5,2.28) rectangle (2.5,2.72);
+ \draw[line ~ width=0.05ex * \l_@@_scale_abs_tl] (1,1.75) -- (3,1.75);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Pfanne , \pan }
+% A pan with a wave-decoration. Resembles the one at home.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Pfanne } { pan } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Pfanne_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 3.034ex * \l_@@_scale_abs_tl }
+ { 0.78ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.3ex , y=2.3ex , line ~ width=0.09ex * \l_@@_scale_abs_tl , scale=#1
+ ]
+ \draw [rounded ~ corners = 0.023ex * \l_@@_scale_abs_tl ]
+ (0,0) -- (0.9,0) -- (1,0.3) -- (-0.1,0.3) -- cycle;
+ \draw (-0.2,0.22) -- (-0.08,0.22);
+ \draw (0.97,0.22) -- (1.08,0.22);
+ \draw
+ [
+ decorate , decoration=
+ {
+ snake,amplitude =.046ex* \l_@@_scale_abs_tl ,
+ segment ~ length = 0.82ex* \l_@@_scale_abs_tl
+ },
+ line ~ width=0.05ex* \l_@@_scale_abs_tl
+ ]
+ (-0.05,0.1) -- (0.95,0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Herd , \cooker }
+% Needed to cook things. Is pretty much looks exactly like the one
+% at home.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Herd } { cooker } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Herd_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.08ex * \l_@@_scale_abs_tl }
+ { 1.58ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex , y=1ex , line ~ width= 0.04ex * \l_@@_scale_abs_tl , scale = #1
+ ]
+ \draw[line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) rectangle (2,1.5);
+ \foreach \y/\radius in { 0.45/0.35 , 0.45/0.2 , 1.15/0.21 }
+ \draw (0.5,\y) circle [radius=\radius];
+ \draw (1.45,1.15) circle [radius=0.15];
+ \draw (1.45,0.45) circle [radius=0.3];
+ \draw (1.05,0.95) rectangle (1.85,1.35);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Saftpresse , \squeezer }
+% We have one of these, I still think its useful.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Saftpresse } { squeezer } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Saftpresse_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.87ex * \l_@@_scale_abs_tl }
+ { 1.62ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1.2ex , y=1ex, line ~ width=0.07ex * \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \draw[rounded ~ corners=0.1ex * \l_@@_scale_abs_tl ]
+ (0,0) rectangle (1.5,0.85) -- cycle;
+ \draw (0,0.7) -- (1.5,0.7);
+ \foreach \xi/\xii in { 0.3/1.2 , 0.45/1.05 , 0.65/0.85 }
+ \draw[rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ]
+ (\xi,0.7) -- (0.75,1.55) -- (\xii,0.7);
+ \draw
+ [
+ line ~ width=0.05ex* \l_@@_scale_abs_tl , decorate,
+ decoration=
+ {
+ snake,amplitude=0.05ex * \l_@@_scale_abs_tl ,
+ segment ~ length=0.48ex * \l_@@_scale_abs_tl
+ }
+ ] (0,0.3) -- (1.5,0.3);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Schussel , \bowl }
+% A bowl. The edge was an accident, but I thought that it looks good
+% and so I keeped it.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Schussel } { bowl } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Schussel_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.32ex * \l_@@_scale_abs_tl }
+ { 1.47ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex , y=1ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale=#1
+ ]
+ \draw[rounded ~ corners=0.5ex* \l_@@_scale_abs_tl ]
+ (-0.02,1.4) -- (0,1.4) -- (0,0.05) -- (1.5,0.05) -- (1.5,1.4) -- (1.52,1.4);
+ \draw (0.35,0) -- (1.15,0);
+ \draw[transparent] (-0.4,0) -- (1.85,0);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Schaler , \peeler }
+% Again an image of on I use to peel for example potatoes.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Schaler } { peeler } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Schaler_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.15ex * \l_@@_scale_abs_tl }
+ { 1.565ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.7ex , y=2.3ex , line ~ width=0.07ex * \l_@@_scale_abs_tl , scale=#1
+ ]
+ \draw[rounded ~ corners=0.07ex* \l_@@_scale_abs_tl ]
+ (0,0.4) -- (0,0.1) arc [start ~ angle=0, end ~ angle=180, radius=-0.1] -- (0.2,0.4) --
+ (0.3,0.5) -- (0.3,0.65) -- (0.2,0.65) -- (0.2,0.5) -- (0,0.5) -- (0,0.65) --
+ (-0.1,0.65) -- (-0.1,0.5) -- cycle;
+ \draw[line ~ width=0.03ex* \l_@@_scale_abs_tl ] (0,0.58) rectangle (0.2,0.6);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Reibe , \grater }
+% I get out of ideas to write.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Reibe } { grater } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Reibe_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.08ex * \l_@@_scale_abs_tl }
+ { 1.58ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex , y=1ex , line ~ width=0.08ex * \l_@@_scale_abs_tl , scale=#1
+ ]
+ \draw (0,0) rectangle (1,1.2);
+ \draw[rounded ~ corners=0.04ex] (0.05,1.2) rectangle (0.95,1.5);
+ \foreach\x in { 0.2, 0.4 , 0.6 , 0.8}
+ \foreach\y in { 0.2 , 0.4, 0.6 , 0.8, 1}
+ \fill (\x,\y) circle [radius=0.05ex];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Flasche , \bottle }
+% It's a bottle. Uhhhh\dots
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Flasche } { bottle } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Flasche_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 0.78ex * \l_@@_scale_abs_tl }
+ { 1.58ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex,y=1ex, line ~ width=0.08ex* \l_@@_scale_abs_tl ,
+ rounded ~ corners=0.08ex* \l_@@_scale_abs_tl , scale=#1
+ ]
+ \draw (0, 1.5) -- (0,1.2) -- (-0.15,0.8) -- (-0.15,0) --++
+ (0.6,0) --++ (0,0.8) --++ (-0.15,0.4) --++ (0,0.3) -- cycle;
+% \draw (-0.15,0.8) -- (0.45,0.8);
+% \draw (-0.15,0.3) -- (0.45,0.3);
+ \draw[transparent] (-0.2,0) --++ (0.7,0);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+% \begin{macro}{ \Nudelholz , \rollingpin }
+% You know what that is\dots
+%
+% For the draftbox the calculation of the length is \verb|(1.26ex + 4.25ex)*0.8 + 0.1ex|.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Nudelholz } { rollingpin } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Nudelholz_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 4.516ex * \l_@@_scale_abs_tl }%%
+ { 0.9ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.8ex, y=0.8ex, scale=#1, line ~ width=0.1ex * \l_@@_scale_abs_tl ,
+ ]
+ \draw[rounded ~ corners=0.10ex*\l_@@_scale_abs_tl] (0,0) rectangle (3,1);
+ \draw[rounded ~ corners=0.15ex*\l_@@_scale_abs_tl]
+ (3,0.75) -- (3.25,0.6) -- (3.75,0.7) -- (4.25,0.6)
+ (3,0.25) -- ( 3.25,0.4 ) -- (3.75,0.3) -- (4.25,0.4);
+ \draw (4.25,0.5) ellipse [x ~ radius=0.01, y ~ radius=0.1];
+ \draw[rounded ~ corners=0.15ex*\l_@@_scale_abs_tl]
+ (-0,0.75) -- (-0.25,0.6) -- (-0.75,0.7)
+ -- (-1.25,0.6)
+ (-0,0.25) -- ( -0.25,0.4 ) -- (-0.75,0.3) -- (-1.25,0.4);
+ \draw (-1.25,0.5) ellipse [x ~ radius=0.01, y ~ radius=0.1];
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \Knoblauchpresse \garlicpress }
+% I always forget that the line width is added only once to the
+% draft box.
+%
+% The design is similar to the one I own.
+% \begin{macrocode}
+\@@_Declare_Document_Commands:nnnn { Knoblauchpresse } { garlicpress } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Knoblauchpresse_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 4.3ex * \l_@@_scale_abs_tl }
+ { 1.6ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex, y=1ex, scale=#1, line ~ width=0.1ex * \l_@@_scale_abs_tl ,
+ ]
+ \draw[rounded ~ corners = 0.1ex*\l_@@_scale_abs_tl]
+ (1, 0) -- (4, 0) -- (4,-0.2) -- (1, -0.2)
+ (-0.1, 0.5) -- (4, 0.5) -- (4,0.3) -- (0, 0.3);
+ \draw [rounded ~ corners = 0.21ex*\l_@@_scale_abs_tl]
+ (0,0) -- (0,-1) -- (1,-1) -- (1,0);
+ \draw (1,0) -- (0,0) -- (0,0.4) ;
+ \draw (0,-0.85) -- (-0.2, -0.6) -- (-0.2, 0.4);
+ \draw (-0.1,0.4) circle[radius=0.1];
+ \draw (0.3, 0) rectangle +(0.4, 0.3);
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+%
+% \subsection{Emoticonscode}
+%
+% Now the emoticons are coded.
+%
+%
+%
+%
+% \begin{macro}{ \Sadey }
+% I don't know why Sadey is the first and not Smiley, probably for reasons.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Sadey } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Sadey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.684ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex , y=2.4ex, line ~ width=0.09ex * \l_@@_scale_abs_tl , scale = #1
+ ]
+ \filldraw[fill=#2, line ~ width=0.1ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \draw (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{ \dSadey }
+% Coding the \enquote{3D} Sadey. Again, nothing special.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dSadey } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dSadey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex * \l_@@_scale_abs_tl , scale = #1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \draw[black] (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%\begin{macro}{ \Changey }
+% \changes{v0.95}{2016/03/20}{New.}
+% Thanks to Marcel for the request.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Changey } { S O{white} m }
+ {
+ \@@_provide_savebox_and_use:nn { Changey_#1_#2_#3 }
+ {
+ \fp_compare:nNnT { abs(#3) } > { 2 }
+ { \msg_error:nnn { tikzsymbols } { Changey-number-too-large } {#3} }
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2] (0,0) circle [radius=0.33];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#3 }
+ \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#3 }
+ \draw
+ ( -0.2 , \l_tmpa_tl ) .. controls
+ ( -0.1 , \l_tmpb_tl ) and
+ ( 0.1 , \l_tmpb_tl ) ..
+ ( 0.2 , \l_tmpa_tl ) ;
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \dChangey }
+% \changes{v3.95}{2016/03/20}{New.}
+% Thanks to Marcel for the request.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dChangey } { S O{yellow} m }
+ {
+ \@@_provide_savebox_and_use:nn { dChangey_#1_#2_#3 }
+ {
+ \fp_compare:nNnT { abs(#3) } > { 2 }
+ { \msg_error:nnn { tikzsymbols } { Changey-number-too-large } {#3} }
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#3 }
+ \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#3 }
+ \draw[black]
+ ( -0.2 , \l_tmpa_tl ) .. controls
+ ( -0.1 , \l_tmpb_tl ) and
+ ( 0.1 , \l_tmpb_tl ) ..
+ ( 0.2 , \l_tmpa_tl ) ;
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%\begin{macro}{ \cChangey }
+% \changes{v4.02}{2017/05/14}{New.}
+% Why didn't I implement this earlier?
+% \begin{macrocode}
+\cs_new:Npn \@@_cChangey:nnn #1 #2#3
+ {
+ \fp_set:Nn \l_tmpa_fp { abs (#1/2) * 100 }
+ \@@_cChangey_aux:xnn { \fp_use:N \l_tmpa_fp } {#2} {#3}
+ }
+\cs_new:Npn \@@_cChangey_aux:nnn #1 #2#3
+ {
+ \filldraw[fill=#2!#1!#3]
+ }
+\cs_generate_variant:Nn \@@_cChangey_aux:nnn { x }
+\@@_Declare_Document_Command:nnn { cChangey } { S O{red} O{yellow} O{green} m }
+ {
+ \@@_provide_savebox_and_use:nn
+ { cChangey_#1_#2_#3_#4_#5 }
+ {
+ \fp_compare:nNnT { abs(#5) } > { 2 }
+ { \msg_error:nnn { tikzsymbols } { cChangey-number-too-large } {#5} }
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \fp_compare:nNnT {#5} < { 0 }
+ {
+ \@@_cChangey:nnn {#5} {#2} {#3}
+ (0,0) circle [radius=0.33];
+ }
+ \fp_compare:nNnT {#5} > { 0 }
+ {
+ \@@_cChangey:nnn {#5} {#4} {#3}
+ (0,0) circle [radius=0.33];
+ }
+ \fp_compare:nNnT {#5} = { 0 }
+ {
+ \filldraw [fill=#3] (0,0) circle [radius=0.33];
+ }
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#5 }
+ \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#5 }
+ \draw
+ ( -0.2 , \l_tmpa_tl ) .. controls
+ ( -0.1 , \l_tmpb_tl ) and
+ ( 0.1 , \l_tmpb_tl ) ..
+ ( 0.2 , \l_tmpa_tl ) ;
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \dcChangey }
+% \changes{v4.02}{2017/05/14}{New.}
+% Same as above
+% \begin{macrocode}
+\cs_new:Npn \@@_dcChangey:nnn #1 #2#3
+ {
+ \fp_set:Nn \l_tmpa_fp { abs (#1/2) * 100 }
+ \@@_dcChangey_aux:xnn { \fp_use:N \l_tmpa_fp } {#2} {#3}
+ }
+\cs_new:Npn \@@_dcChangey_aux:nnn #1 #2#3
+ {
+ \shade [ball ~ color=#2!#1!#3]
+ }
+\cs_generate_variant:Nn \@@_dcChangey_aux:nnn { x }
+\@@_Declare_Document_Command:nnn { dcChangey } { S O{red} O{yellow} O{green} m }
+ {
+ \@@_provide_savebox_and_use:nn
+ { dcChangey_#1_#2_#3_#4_#5 }
+ {
+ \fp_compare:nNnT { abs(#5) } > { 2 }
+ { \msg_error:nnn { tikzsymbols } { cChangey-number-too-large } {#5} }
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \fp_compare:nNnT {#5} < { 0 }
+ {
+ \@@_dcChangey:nnn {#5} {#2} {#3}
+ (0,0) circle [radius=0.33];
+ }
+ \fp_compare:nNnT {#5} > { 0 }
+ {
+ \@@_dcChangey:nnn {#5} {#4} {#3}
+ (0,0) circle [radius=0.33];
+ }
+ \fp_compare:nNnT {#5} = { 0 }
+ {
+ \shade[ball ~ color=#3] (0,0) circle [radius=0.33];
+ }
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \pgfmathsetmacro \l_tmpa_tl { -0.125 + 0.025*#5 }
+ \pgfmathsetmacro \l_tmpb_tl { \l_tmpa_tl - 0.1*#5 }
+ \draw[black]
+ ( -0.2 , \l_tmpa_tl ) .. controls
+ ( -0.1 , \l_tmpb_tl ) and
+ ( 0.1 , \l_tmpb_tl ) ..
+ ( 0.2 , \l_tmpa_tl ) ;
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%\begin{macro}{ \Annoey }
+% An annoyed Smiley. It's annoyed.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Annoey } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Annoey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex * \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ \draw (0.08,0.1) -- (0.22,0.1);
+ \draw (-0.08,0.1) -- (-0.22,0.1);
+ \draw (-0.2,-0.1) -- (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%\begin{macro}{ \dAnnoey }
+% It's annoyed about 3D.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dAnnoey } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dAnnoey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \draw[black] (0.08,0.1) -- (0.22,0.1);
+ \draw[black] (-0.08,0.1) -- (-0.22,0.1);
+ \draw[black] (-0.2,-0.1) -- (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+% \begin{macro}{ \Smiley }
+% This command is not defined if the option \Option{marvosym}
+% is set to true.
+% \begin{macrocode}
+\bool_if:NF \g_@@_if_opt_marvosym_bool
+ {
+ \@@_Declare_Document_Command:nnn { Smiley } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Smiley_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl , scale=#1
+ ]
+ \filldraw[fill=#2] (0,0) circle [radius=0.33];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dSmiley }
+% Again in \enquote{3D}.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dSmiley } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dSmiley_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.1ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+% \begin{macro}{ \Laughey }
+% It's laughing.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Laughey } { S O{none} O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Laughey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2,line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ \draw (-0.09,0.06) .. controls (-0.11,0.16) and (-0.17,0.16) .. +(-0.1,0);
+ \draw (0.09,0.06) .. controls (0.11,0.16) and (0.17,0.16) .. +(0.1,0);
+ \filldraw[fill=#3,rounded ~ corners=0.1ex* \l_@@_scale_abs_tl , yshift=-0.06ex]
+ (-0.22,-0.0) .. controls (-0.13,-0.23) and (0.13,-0.23) .. (0.22,-0.0) -- cycle;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dLaughey }
+% Also in \emph{3D}!
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dLaughey } { S O{yellow} O{red} }
+ {
+ \@@_provide_savebox_and_use:nn { dLaughey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
+ black
+ ]
+ \fill[ball ~ color=#2,line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ \draw (-0.09,0.06) .. controls (-0.11,0.16) and (-0.17,0.16) .. +(-0.1,0);
+ \draw (0.09,0.06) .. controls (0.11,0.16) and (0.17,0.16) .. +(0.1,0);
+ \shade
+ [
+ ball ~ color=#3, rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ,
+ yshift=-0.028ex
+ ]
+ (-0.25,-0.0) .. controls (-0.13,-0.26) and (0.13,-0.26) .. (0.25,-0.0) -- cycle;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Neutrey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Neutrey } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Neutrey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2,line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \draw (-0.2,-0.1) -- (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dNeutrey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dNeutrey } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { Neutrey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \draw[black] (-0.2,-0.1) -- (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Winkey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Winkey } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Winkey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2] (0,0) circle [radius=0.33];
+ \draw(0.17,0.1) -- (0.05,0.1);
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \draw (-0.15,-0.15) .. controls (-0.05,-0.2) and (0.15,-0.2) .. (0.19,0);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \oldWinkey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { oldWinkey } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { oldWinkey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2] (0,0) circle [radius=0.33];
+ \draw(0.17,0.1) -- (0.05,0.1);
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.15,-0.2) .. (0.2,0);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dWinkey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dWinkey } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dWinkey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \draw[black] (0.17,0.1) -- (0.05,0.1);
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \draw[black] (-0.15,-0.15) .. controls (-0.05,-0.2) and (0.15,-0.2) .. (0.19,0);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \olddWinkey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { olddWinkey } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { olddWinkey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \draw[black] (0.17,0.1) -- (0.05,0.1);
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.15,-0.2) .. (0.2,0);
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Sey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Sey } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Sey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \draw (-0.2,-0.08) .. controls (-0.0,-0.2) and (0.0,0) .. (0.2,-0.12);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%\begin{macro}{ \dSey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dSey } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dSey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \draw[black] (-0.2,-0.08) .. controls (-0.0,-0.2) and (0.0,0) .. (0.2,-0.12);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Xey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Xey } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Xey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ \foreach \xi in { 0.05 , -0.15 }
+ \draw (\xi,0.05) -- ++ (0.1,0.1) (-\xi,0.05) -- ++ (-0.1,0.1);
+ \draw (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dXey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dXey } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dXey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
+ black
+ ]
+ \fill[ball ~ color=#2, line ~ width=0.12ex* \l_@@_scale_abs_tl ]
+ (0,0) circle [radius=0.33];
+ \foreach \xi in { 0.05 , -0.15 }
+ \draw (\xi,0.05) -- ++ (0.1,0.1) (-\xi,0.05) -- ++ (-0.1,0.1);
+ \draw (-0.2,-0.15) .. controls (-0.1,-0.06) and (0.1,-0.06) .. (0.2,-0.15);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Innocey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Innocey } { S O{none} O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { Innocey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.73ex * \l_@@_scale_abs_tl }
+ { 1.90899 ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl, scale=#1
+ ]
+ \filldraw[fill=#2] (0,0) circle [radius=0.33];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+% \end{macrocode}
+% Draws the colored halo inside, the next two are drawing the black
+% lines surrounding the colored line and completing the halo.
+% \begin{macrocode}
+ \draw[#3, line ~ width=0.095ex* \l_@@_scale_abs_tl ]
+ (0.32,0.31) arc
+ [start ~ angle=0, end ~ angle=360, x ~ radius = 0.32 , y ~ radius=0.1];
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ]
+ (0.3,0.31) arc
+ [start ~ angle=0, end ~ angle=360, x ~ radius = 0.3 , y ~ radius=0.07];
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ]
+ (0.35,0.31) arc
+ [start ~ angle=0, end ~ angle=360, x ~ radius = 0.35 , y ~ radius=0.12];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{ \wInnocey }
+% A white one. I clear \Makro{g_@@_tikzsymbols_after_symbol_tl}
+% because otherwise the input of \Option{after-symbol}
+% is inserted twice.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { wInnocey } { S }
+ {
+ \group_begin:
+ \tl_clear:N \l_@@_tikzsymbols_after_symbol_tl
+ \tikzsymbolsuse { Innocey } [#1] [none] [white]
+ \group_end:
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dInnocey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dInnocey } { S O{yellow} O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dInnocey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.73ex * \l_@@_scale_abs_tl }
+ { 1.84898ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1,
+ black
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+% \end{macrocode}
+% Same as above (I think).
+% \begin{macrocode}
+ \draw[color=#3!97!black, line ~ width=0.1ex* \l_@@_scale_abs_tl ]
+ (0.32,0.31) arc [start ~ angle=0, end ~ angle=360, x ~ radius = 0.32 , y ~ radius=0.1];
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ]
+ (0.3,0.31) arc [start ~ angle=0, end ~ angle=360, x ~ radius = 0.3 , y ~ radius=0.07];
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ]
+ (0.35,0.31) arc [start ~ angle=0, end ~ angle=360, x ~ radius = 0.35 , y ~ radius=0.12];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Cooley }
+% It's the coolest Smiley around.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Cooley } { S O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Cooley_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2] (0,0) circle [radius=0.33];
+ \foreach \xi/\xii in { 0.24/0.01 , -0.24/-0.01 }
+ \fill[rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ]
+ (\xi,0.15) -- (\xii,0.15) -- (\xii,0) -- (\xi,0) -- cycle;
+ \draw (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \draw (0.02,0.1) -- (-0.02,0.1);
+ \draw (-0.2,0.1) -- (-0.3,0.13);
+ \draw (0.2,0.1) -- (0.3,0.13);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dCooley }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dCooley } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dCooley_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \draw[black] (0.02,0.1) -- (-0.02,0.1);
+ \draw[black] (-0.2,0.1) -- (-0.295,0.146);
+ \draw[black] (0.2,0.1) -- (0.295,0.146);
+ \foreach \xi/\xii in { 0.24/0.01 , -0.24/-0.01 }
+ \shade[ball ~ color=black,rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ]
+ (\xi,0.15) -- (\xii,0.15) -- (\xii,0) -- (\xi,0) -- cycle;
+ \draw[black] (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Tongey }
+% Habe mir vorgenommen das hier zu verbessern, wird aber wohl noch
+% etwas brauchen.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Tongey } { S O{none} O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Tongey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.704ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2] (0,0) circle [radius=0.33];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \filldraw
+ [
+ fill=#3, line ~ width=0.058ex* \l_@@_scale_abs_tl ,
+ rounded ~ corners=0.12ex* \l_@@_scale_abs_tl
+ ]
+ (0,-0.09) -- (0.05,-0.2) -- (0.16,-0.23) -- (0.2,-0.15) -- (0.19,-0.03);
+ \draw[line ~ width=0.07ex* \l_@@_scale_abs_tl , yshift=0.21ex]
+ (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dTongey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dTongey } { S O{yellow} O{red} }
+ {
+ \@@_provide_savebox_and_use:nn { dTongey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_squared_draftbox:n { 1.584ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.33];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \shadedraw
+ [
+ ball ~ color=#3, draw=black,line ~ width=0.058ex* \l_@@_scale_abs_tl ,
+ rounded ~ corners=0.12ex* \l_@@_scale_abs_tl
+ ]
+ (0,-0.09) -- (0.05,-0.2) -- (0.16,-0.23) -- (0.2,-0.15) -- (0.19,-0.03);
+ \draw[black, line ~ width=0.07ex* \l_@@_scale_abs_tl , yshift=0.21ex]
+ (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Nursey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Nursey } { S O{none} O{none} O{} }
+ {
+ \@@_provide_savebox_and_use:nn { Nursey_#1_#2_#3_#4 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.5ex * \l_@@_scale_abs_tl }
+ { 2.19ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.3ex, y=2.3ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \fill[fill=#3,rounded ~ corners=.023ex* \l_@@_scale_abs_tl ]
+ (-0.3,0) -- (-0.3,0.3) -- (0,0.6) -- (0.3,0.3) -- (0.3,0);
+ \filldraw[fill=#2] (0,0) circle [radius=0.3];
+ \fill (-0.1,0.1) circle [radius=0.05];
+ \fill (0.1,0.1) circle [radius=0.05];
+ \draw[line ~ width=0.09ex* \l_@@_scale_abs_tl , yshift=0.07ex]
+ (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \draw[rounded ~ corners=.023ex* \l_@@_scale_abs_tl ]
+ (-0.3,0) -- (-0.3,0.3) -- (0,0.6) -- (0.3,0.3) -- (0.3,0);
+ \draw[#4,line ~ width=.046ex* \l_@@_scale_abs_tl ]
+ (0,0.35) -- (0,0.5) (-0.05,0.45) -- (0.05,0.45) ;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dNursey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dNursey } { S O{yellow} O{white} O{red} }
+ {
+ \@@_provide_savebox_and_use:nn { dNursey_#1_#2_#3_#4 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.38ex * \l_@@_scale_abs_tl }
+ { 1.98001ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.3ex, y=2.3ex, line ~ width=0.12ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.3];
+ \shade[ball ~ color=black] (-0.1,0.1) circle [radius=0.05];
+ \shade[ball ~ color=black] (0.1,0.1) circle [radius=0.05];
+ \draw[black, line ~ width=0.09ex* \l_@@_scale_abs_tl , yshift=0.07ex]
+ (-0.2,-0.1) .. controls (-0.1,-0.2) and (0.1,-0.2) .. (0.2,-0.1);
+ \shade
+ [
+ ball ~ color=#3, rounded ~ corners=.023ex* \l_@@_scale_abs_tl ,
+ yshift=-0.09ex
+ ]
+ (-0.3,0) -- (-0.3,0.3) -- (0,0.6) -- (0.3,0.3) --
+ (0.3,0) arc [start ~ angle=0, end ~ angle=180, radius=0.3];
+ \shade[ball ~ color=#4,line ~ width=.046ex* \l_@@_scale_abs_tl ]
+ (-0.01,0.31) -- (-0.01,0.46) -- (0.01,0.46) -- (0.01,0.31)--cycle;
+ \shade[ball ~ color=#4,line ~ width=.046ex* \l_@@_scale_abs_tl ]
+ (-0.05,0.4) -- (0.05,0.4) -- (0.05,0.42) -- (-0.05,0.42) -- cycle;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Vomey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Vomey } { S O{none} O{opacity=0} }
+ {
+ \@@_provide_savebox_and_use:nn { Vomey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 3.03335ex * \l_@@_scale_abs_tl }
+ { 1.743ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.58ex,y=0.58ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \filldraw[fill=#2,rounded ~ corners=0.05ex* \l_@@_scale_abs_tl ]
+ (0,0) arc [start ~ angle=15, end ~ angle=330, radius=1] -- (-0.6,-0.3) -- cycle;
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (-0.5,0.3) -- (-0.3,0.1);
+ \fill (-0.45,0.27) arc [start ~ angle=100, end ~ angle=350, radius=0.1];
+ \fill[#3] (1.8,-0.5) .. controls (2.5,-0.3) and (2.8,-0.7) .. (2.5,-1) ..
+ controls (3,-1) and (3,-1.7) .. (2,-1.5) ..
+ controls (1.7,-2) and (1,-2) .. (1,-1.5) ..
+ controls (0.5,-1.9) and (0.3,-1) .. (0.7,-0.9);
+ \fill[#3] (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1) ..
+ controls (1.7,-1.2) and (1.3,-1.2) .. (1,-1) ..
+ controls (0.8,-0.7) and (0.5,-0.5) .. (0,-0.4);
+% \draw (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1);
+% \draw (0,-0.4) .. controls (0.5,-0.5) and (0.8,-0.7) .. (1,-1);
+ \draw[rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ]
+ (1,-1) .. controls (0.8,-0.7) and (0.5,-0.5) ..
+ (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1);
+ \draw (1.8,-0.5) .. controls (2.5,-0.3) and (2.8,-0.7) .. (2.5,-1) ..
+ controls (3,-1) and (3,-1.7) .. (2,-1.5) .. controls (1.7,-2)
+ and (1,-2) .. (1,-1.5) .. controls (0.5,-1.9) and (0.3,-1) .. (0.7,-0.9);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \dVomey }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dVomey } { S O{yellow} O{brown!10!olive} }
+ {
+ \@@_provide_savebox_and_use:nn { dVomey_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.94336 ex * \l_@@_scale_abs_tl }
+ { 1.653ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.58ex,y=0.58ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \shade
+ [
+ ball ~ color=#2!90!brown,
+ rounded ~ corners=0.03ex * \l_@@_scale_abs_tl ,
+ ]
+ (0,0) arc [start ~ angle=15, end ~ angle=330, radius=1] -- (-0.6,-0.3) -- cycle;
+ \draw[black, line ~ width=0.05ex* \l_@@_scale_abs_tl ]
+ (-0.5,0.3) -- (-0.3,0.1);
+ \shade[ball ~ color=black]
+ (-0.45,0.27) arc [start ~ angle=100, end ~ angle=350, radius=0.1];
+ \shade[ball ~ color=#3]
+ (1.8,-0.5) .. controls (2.5,-0.3) and (2.8,-0.7) .. (2.5,-1) ..
+ controls (3,-1) and (3,-1.7) .. (2,-1.5) ..
+ controls (1.7,-2) and (1,-2) .. (1,-1.5) ..
+ controls (0.5,-1.9) and (0.3,-1) .. (0.7,-0.9);
+ \shade[ball ~ color=#3]
+ (0,-0.4) .. controls (1,0) and (2,-1) .. (2,-1) .. controls
+ (1.7,-1.2) and (1.3,-1.2) .. (1,-1) .. controls
+ (0.8,-0.7) and (0.5,-0.5) .. (0,-0.4);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Walley }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Walley } { S O{none} O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { Walley_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.341ex * \l_@@_scale_abs_tl }
+ { 1.674ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
+ decoration=
+ {
+% random ~ steps,
+ segment ~ length=0.15ex* \l_@@_scale_abs_tl ,
+ amplitude=0.1ex* \l_@@_scale_abs_tl
+ }
+ ]
+ \filldraw[fill=#2, line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.28];
+ \filldraw[fill=#3] (0.28,-0.33) rectangle (0.66,0.33);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.28,0) --++(0.05,0.07) --++(0.03,0.02) --+
+ +(0.03,-0.02) --++(0.03,0.1) --++(0.03,0.02) -- (0.5,0.25);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.28,0) --++(0.06,-0.02) --++(0.04,0.06) --++
+ (0.0,-0.08) --++(0.08,0.06) --++(0.03,-0.02) --+
+ (0.08,0.02) -- (0.6,0.0);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.28,0) --++(0.03,-0.02) --++(0.03,-0.07) --+
+ +(0.03,-0.01) --++(0.01,-0.07) --++(0.06,0.01) --++
+ (0.03,-0.08) -- (0.5,0.-0.25);
+ \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
+ \draw[rotate=-20] (0.27,-0.1) .. controls (0.2,-0.072)
+ and (0.1,-0.06) .. (0.,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \rWalley }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { rWalley } { S O{none} O{none} }
+ {
+ \@@_provide_savebox_and_use:nn { rWalley_#1_#2_#3 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.341ex * \l_@@_scale_abs_tl }
+ { 1.674ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
+ decoration=
+ {
+ random ~ steps, segment ~ length=0.15ex* \l_@@_scale_abs_tl ,
+ amplitude=0.1ex* \l_@@_scale_abs_tl
+ }
+ ]
+ \filldraw[fill=#2, line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.28];
+ \filldraw[fill=#3] (0.28,-0.33) rectangle (0.66,0.33);
+ \foreach \x/\y in { 0.5/0.25 , 0.6/0 , 0.5/-0.25 }
+ \draw[decorate, line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.28,0) -- (\x,\y);
+ \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
+ \draw[rotate=-20] (0.27,-0.1) .. controls (0.2,-0.072)
+ and (0.1,-0.06) .. (0.,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \dWalley }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dWalley } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { dWalley_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.42879ex * \l_@@_scale_abs_tl }
+ { 1.6008ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,scale=#1,
+ black
+ ]
+ \shade[ball ~ color=orange!80!black] (0.298,-0.33) rectangle (0.692,0.337);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.28,0) --++(0.05,0.07) --++(0.03,0.02) --+
+ +(0.03,-0.02) --++(0.03,0.1) --++(0.03,0.02) -- (0.5,0.25);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.28,0) --++(0.06,-0.02) --++(0.04,0.06) --++
+ (0.0,-0.08) --++(0.08,0.06) --++(0.03,-0.02) --+
+ (0.08,0.02) -- (0.6,0.0);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.28,0) --++(0.03,-0.02) --++(0.03,-0.07) --++
+ (0.03,-0.01) --++(0.01,-0.07) --++
+ (0.06,0.01) --++(0.03,-0.08) -- (0.5,0.-0.25);
+ \shade[ball ~ color=#2] (-0.01,0) circle [radius=0.31];
+ \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
+ \draw[rotate=-20] (0.283,-0.1) .. controls (0.2,-0.072)
+ and (0.1,-0.06) .. (0,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \drWalley }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { drWalley } { S O{yellow} }
+ {
+ \@@_provide_savebox_and_use:nn { drWalley_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.42879ex * \l_@@_scale_abs_tl }
+ { 1.6008ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,
+ scale=#1, black, decoration=
+ {
+ random ~ steps,segment ~ length=0.15ex* \l_@@_scale_abs_tl ,
+ amplitude=0.1ex* \l_@@_scale_abs_tl
+ }
+ ]
+ \shade[ball ~ color=orange!80!black] (0.298,-0.33) rectangle (0.692,0.337);
+ \foreach \x/\y in { 0.5/0.25 , 0.6/0 , 0.5/-0.25 }
+ \draw[decorate, line ~ width=0.06ex* \l_@@_scale_abs_tl ]
+ (0.298,0) -- (\x,\y);
+ \shade[ball ~ color=#2] (-0.01,0) circle [radius=0.31];
+ \draw[rotate=-20] (0.12,0.1) -- (0.2,0.05);
+ \draw[rotate=-20] (0.283,-0.1) .. controls (0.2,-0.072)
+ and (0.1,-0.06) .. (0.,-0.1);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+% \begin{macro}{ \@@_Cat:n, \@@_Cat_unknown:n, \@@_Cat_dead:n }
+% \begin{macrocode}
+\cs_new:Npn \@@_Cat:n #1
+ {
+ \draw (0,0) circle [radius=0.3];
+ \foreach \xi/\xii in { 0.3/0.35 }
+ {
+ \draw[rounded ~ corners=0.163ex* \l_@@_scale_abs_tl ]
+ (-\xi,0) -- (-\xii,0.5) -- (0,\xi) (0,\xi) -- (\xii,0.5) -- (\xi,0);
+ }
+ \fill (-0.15,.15) circle [radius=0.05];
+ \fill (0.15,.15) circle [radius=0.05];
+ \foreach \x in { 0.1 , -0.1 }
+ \draw[rounded ~ corners=0.175ex* \l_@@_scale_abs_tl ,yshift=-0.12ex]
+ (0,0) -- (0,-0.1) -- (\x,-0.095);
+ \draw[rounded ~ corners=.12ex* \l_@@_scale_abs_tl ,yshift=-.15ex,
+ line ~ width=0.03em*0.9* \l_@@_scale_abs_tl ]
+ (-0.1,0.1) -- (0,0) -- (0.1,0.1) -- cycle ;
+ \foreach \a/\b/\c/\d in
+ { 0.1/0.25/0.35/0.4 , -0.1/-0.25/-0.35/-0.4 }
+ \foreach \yi/\yii/\yiii in
+ { 0/0/-0.05 , -0.01/-0.09/-0.14 , -0.045/-0.13/-0.23 }
+ {
+ \draw[line ~ width=0.035ex* \l_@@_scale_abs_tl ]
+ (\a,-0.05)..controls(\b,\yi)and(\c,\yii).. (\d,\yiii);
+ }
+ }
+\cs_new:Npn \@@_Cat_unknown:n #1
+ {
+ \draw (0,0) circle [radius=0.3];
+ \foreach \xi/\xii in { 0.3/0.35 }
+ {
+ \draw[rounded ~ corners=0.163ex* \l_@@_scale_abs_tl ]
+ (-\xi,0) -- (-\xii,0.5) -- (0,\xi)
+ (0,\xi) -- (\xii,0.5) -- (\xi,0);
+ }
+ \fill (0,-0.18) circle [radius=0.04];
+ \draw
+ (0,0.06) arc[start ~angle=-90, end ~angle=180, radius=0.075]
+ (0,0.06) arc[start ~angle=90, end ~angle=360, radius=0.075];
+ \foreach \case in { 1,-1 }
+ \foreach \yi/\yii/\yiii in
+ {
+ -0.01/-0.05/-0.08 ,
+ -0.02/-0.12/-0.16 ,
+ -0.055/-0.15/-0.25
+ }{
+ \draw[line ~ width=0.035ex* \l_@@_scale_abs_tl ]
+ ({0.1*\case},-0.05)..controls({\case*0.25},\yi)
+ and({0.35*\case},\yii).. ({0.4*\case},\yiii);
+ }
+ }
+\cs_new:Npn \@@_Cat_dead:n #1
+ {
+ \draw (0,0) circle [radius=0.3];
+ \foreach \case in { 1,-1 }
+ {
+ \draw[rounded ~ corners=0.163ex* \l_@@_scale_abs_tl ]
+ ({\case*0.3},0) -- ({\case*0.35},0.5) -- (0,0.3);
+ }
+ \draw
+ \foreach \angle in { 45,135,225,315 }
+ {
+ (0.13,0.13) -- ({0.13+0.07*cos(\angle)},{0.13+0.07*sin(\angle)})
+ (-0.13,0.13) -- ({-0.13+0.07*cos(\angle)},{0.13+0.07*sin(\angle)})
+ }
+ ;
+ \foreach \case in { 1,-1 }
+ \draw[rounded ~ corners=0.175ex* \l_@@_scale_abs_tl ,yshift=-0.12ex]
+ (0,0) -- (0,-0.08) -- ({0.09*\case},-0.12);
+ \draw[rounded ~ corners=.12ex* \l_@@_scale_abs_tl ,yshift=-.15ex,
+ line ~ width=0.03em*0.9* \l_@@_scale_abs_tl ]
+ (0,0) -- (0.1,0.07) -- (0,0.1)-- (-0.1,0.07) -- cycle ;
+ \foreach \case in {-1,1}
+ \foreach \yi/\yii/\yiii in
+ {
+ -0.04/-0.09/-0.15 ,
+ -0.05/-0.18/-0.23,
+ -0.085/-0.22/-0.31
+ }{
+ \draw[line ~ width=0.035ex* \l_@@_scale_abs_tl ]
+ ({0.1*\case},-0.05)
+ .. controls ({0.18*\case},\yi) and ({0.28*\case},\yii) ..
+ ({0.33*\case},\yiii);
+ }
+ \draw [transparent,line ~ width=0.035ex*\l_@@_scale_abs_tl] (-0.4,0) -- (0.4,0);
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%\begin{macro}{ \Cat }
+% It is a Ket! (sic!)
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Cat } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Cat_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.89899ex * \l_@@_scale_abs_tl }
+ { 1.957ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.33ex,y=2.33ex, line ~ width=0.093ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \@@_Cat:n {#1}
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%\begin{macro}{ \SchrodingersCat }
+% It is a Ket! (sic!)
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { SchrodingersCat } { S m }
+ {
+ \@@_provide_savebox_and_use:nn { SchrodingersCat_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.89899ex * \l_@@_scale_abs_tl }
+ { 1.957ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.33ex,y=2.33ex, line ~ width=0.093ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \int_case:nnF {#2}
+ {
+ { 1 } { \@@_Cat:n {#1} }
+ { 0 } { \@@_Cat_unknown:n {#1} }
+ { -1 } { \@@_Cat_dead:n {#1} }
+ }
+ { \msg_error:nnn { tikzsymbols } { SchrodingersCat } {#2} }
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+% \begin{macro}{ \Ninja }
+% It can hide.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Ninja } { S O{black} O{red} O{white} }
+ {
+ \@@_provide_savebox_and_use:nn { Ninja_#1_#2_#3_#4 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.149ex * \l_@@_scale_abs_tl }
+ { 1.717ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,
+ scale=#1, decoration=
+ {
+ random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl ,
+ amplitude=0.1ex* \l_@@_scale_abs_tl
+ }
+ ]
+ \tl_set:Nn \l_tmpa_tl {#2}
+ \fill[#2] (0,0) circle [radius=0.33];
+ \fill[decoration={random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl ,
+ amplitude=0.01ex* \l_@@_scale_abs_tl }, decorate,#3]
+ (-0.33,0) -- (0.33,0) -- (0.23,0.23) -- (-0.23,0.23) -- cycle;
+ \tl_if_eq:NNT \c_@@_black_tl \l_tmpa_tl
+ {
+ \draw[line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ }
+ \fill[#3] (0,0.1) -- (-0.33,0) -- (-0.26,0.23);
+ \fill[#3] (0.3465,0) arc [start ~ angle=0, end ~ angle=42, x ~ radius=0.34, y~ radius=0.345] --
+ (0.2,0.23)-- (0.31,0.0) -- cycle;
+ \fill[#3] (-0.3465,0) arc [start ~ angle=0, end ~ angle=-42, x ~ radius=-0.34, y~ radius=-0.345] --
+ (-0.2,0.23)-- (-0.31,0.0) -- cycle;
+ \fill[#4] (0.129,0.1425) arc [start ~ angle=55, end ~ angle=-180, radius=0.05];
+ \fill[#4] (-0.129,0.1425) arc [start ~ angle=-55, end ~ angle=180, radius=-0.05];
+ \foreach \x in { (0.5,0.35) , (0.53,0.1) }
+ \draw
+ [
+ decorate,decoration=
+ {
+ snake,amplitude=.1ex* \l_@@_scale_abs_tl ,
+ segment ~ length=0.55ex* \l_@@_scale_abs_tl
+ } , #3
+ ]
+ (0.26,0.21) -- \x;
+ \tl_if_eq:NNF \c_@@_black_tl \l_tmpa_tl
+ {
+ \draw[line ~ width=0.08ex* \l_@@_scale_abs_tl ] (0,0) circle [radius=0.33];
+ }
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{ \dNinja }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dNinja } { S O{black} O{red} O{white} }
+ {
+ \@@_provide_savebox_and_use:nn { dNinja_#1_#2_#3_#4 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.1498ex * \l_@@_scale_abs_tl }
+ { 1.7178ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.4ex, y=2.4ex, line ~ width=0.09ex* \l_@@_scale_abs_tl ,
+ scale=#1, decoration=
+ {
+ random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl ,
+ amplitude=0.1ex* \l_@@_scale_abs_tl
+ }
+ ]
+ \foreach \length/\coord in { 0.55/{(0.5,0.35)} , 0.5/{(0.53,0.1)} }
+ \draw
+ [
+ decorate,decoration=
+ {
+ snake,amplitude=.1ex* \l_@@_scale_abs_tl ,
+ segment ~ length=\length ex* \l_@@_scale_abs_tl
+ } , decorate, #3!50!black
+ ]
+ \coord -- (0.26,0.21);
+ \shade[ball ~ color=#2] (0,0) circle [radius=0.347];
+ \fill
+ [
+ decoration=
+ {
+ random ~ steps,segment ~ length=0.1ex* \l_@@_scale_abs_tl ,
+ amplitude=0.01ex* \l_@@_scale_abs_tl
+ } , ball ~ color=#3
+ ]
+ decorate {(-0.33,0) -- (0.3465,0) }
+ {arc [start ~ angle=0, end ~ angle=42, x ~ radius=0.34,y~ radius=0.345]}
+ decorate {-- (-0.25,0.24)}
+ { arc [start ~ angle=-42, end ~ angle=0, x ~ radius=-0.375,y~ radius=-0.345]};
+% Frag mich nicht, was das macht.
+% \shade[ball ~ color=#4] (0.129,0.1425) arc [start ~ angle=55, end ~ angle=-180, radius=0.05];
+% \shade[ball ~ color=#4] (-0.129,0.1425) arc [start ~ angle=-55, end ~ angle=180, radius=-0.05];
+ \shade[top ~ color=#4!80!black, bottom ~ color=#4]
+ (0.129,0.1425) arc [start ~ angle=55, end ~ angle=-180, radius=0.05];
+ \shade[top ~ color=#4!80!black, bottom ~ color=#4]
+ (-0.129,0.1425) arc [start ~ angle=-55, end ~ angle=180, radius=-0.05];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+% \begin{macro}{ \Sleepey }
+% It is sleeping.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Sleepey } { S O{none} O{none} O{black} }
+ {
+ \@@_provide_savebox_and_use:nn { Sleepey_#1_#2_#3_#4 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.084866ex * \l_@@_scale_abs_tl }
+ { 1.5912ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.04ex, y=2.04ex, line ~ width=0.102ex* \l_@@_scale_abs_tl ,
+ scale=#1
+ ]
+% %% Hat
+ \filldraw [fill=#3]
+ (-0.33,0) arc[start~angle=180,end~angle=0,x~radius=0.45,y~radius=0.4]
+ -- ++(0,-0.2)
+ arc[start~angle=0,end~angle=130,x~radius=0.15,y~radius=0.24];
+% %% face
+ \filldraw [fill=#2,rounded ~ corners=0.001ex * \l_@@_scale_abs_tl]
+ (0.33,0) arc[start~angle=0, end~angle=-180, radius=0.33] -- cycle ;
+% %% Pommel
+ \fill (0.55,-0.15) circle [radius=0.06];
+ \foreach \l_@@_angle_tl in {0,30,60,...,360}
+ {
+ \draw ({0.55+0.06*cos(\l_@@_angle_tl)*1.2},
+ {-0.15+0.06*sin(\l_@@_angle_tl)*1.2})
+ circle[radius=0.02];
+ }
+% %% Stars
+ \foreach \l_tmpa_tl/\l_tmpb_tl in { -0.14/0.12 , 0.19/0.12 , 0.05/0.26 , 0.40/0.16 }
+ {
+ \draw [line~width=0.04ex*\l_@@_scale_abs_tl ,#4]
+ \foreach \l_@@_angle_tl in { 0,45,90,...,360 }
+ {
+ (\l_tmpa_tl,\l_tmpb_tl) -- ({\l_tmpa_tl+0.07*cos(\l_@@_angle_tl)},
+ {\l_tmpb_tl+0.07*sin(\l_@@_angle_tl)})
+ }
+ ;
+ }
+% %% Mouth
+ \fill (0,-0.225) circle [radius=0.04];
+% %% Eyes
+ \draw (-0.1,-0.09) arc[start~angle=0, end~angle=-180,
+ x~radius=0.06,y~radius=0.08] ;
+ \draw (0.1,-0.09) arc[start~angle=180,
+ end~angle=360,x~radius=0.06,y~radius=0.08] ;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{ \dSleepey }
+% It is sleeping.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { dSleepey } { S O{yellow} O{blue} O{black} }
+ {
+ \@@_provide_savebox_and_use:nn { dSleepey_#1_#2_#3_#4 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 2.033865ex * \l_@@_scale_abs_tl }
+ { 1.489181ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=2.04ex, y=2.04ex, line ~ width=0.102ex* \l_@@_scale_abs_tl ,
+ scale=#1
+ ]
+% %% Hat
+ \shade [ball ~ color=#3]
+ (-0.33,0) arc[start~angle=180,end~angle=0,x~radius=0.45,y~radius=0.4]
+ -- ++(0,-0.2)
+ arc[start~angle=0,end~angle=130,x~radius=0.15,y~radius=0.24];
+% %% face
+ \shade [ball ~ color=#2,rounded ~ corners=0.001ex * \l_@@_scale_abs_tl]
+ (0.33,0) arc[start~angle=0, end~angle=-180, radius=0.33] -- cycle ;
+% %% Pommel
+ \fill (0.55,-0.15) circle [radius=0.06];
+ \foreach \l_@@_angle_tl in {0,30,60,...,360}
+ {
+ \draw ({0.55+0.06*cos(\l_@@_angle_tl)*1.2},
+ {-0.15+0.06*sin(\l_@@_angle_tl)*1.2})
+ circle[radius=0.02];
+ }
+% %% Stars
+ \foreach \l_tmpa_tl/\l_tmpb_tl in { -0.14/0.12 , 0.19/0.12 , 0.05/0.26 , 0.40/0.16 }
+ {
+ \draw [line~width=0.04ex* \l_@@_scale_abs_tl,#4]
+ \foreach \l_@@_angle_tl in { 0,45,90,...,360 }
+ {
+ (\l_tmpa_tl,\l_tmpb_tl) -- ({\l_tmpa_tl+0.07*cos(\l_@@_angle_tl)},
+ {\l_tmpb_tl+0.07*sin(\l_@@_angle_tl)})
+ }
+ ;
+ }
+% %% Mouth
+ \fill (0,-0.225) circle [radius=0.04];
+% %% Eyes
+ \draw (-0.1,-0.09) arc[start~angle=0, end~angle=-180,
+ x~radius=0.06,y~radius=0.08] ;
+ \draw (0.1,-0.09) arc[start~angle=180,
+ end~angle=360,x~radius=0.06,y~radius=0.08] ;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+% \begin{macro}{ \NiceReapey }
+% I wasn't able to create a good Grim Reaper. Well.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { NiceReapey } { S O{black!20!white} }
+ {
+ \@@_provide_savebox_and_use:nn { NiceReapey_#1_#2 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { (1.10667em + 0.07ex) * \l_@@_scale_abs_tl }
+ { (0.693em+0.07ex) * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.11em,y=0.11em, line ~ width=0.07ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \draw (1.7,-1) arc [start ~ angle=360, end ~ angle=180, x ~ radius=1.7, y ~ radius=2]
+ arc [start ~ angle=260, end ~ angle=110, x ~ radius=1.5,y ~ radius=2]
+ .. controls (-1,3.3) and (1,3.3) .. (1.9,2.97)
+ arc [start ~ angle=260, end ~ angle=100, x ~ radius=-1.3, y ~ radius=-2] -- cycle;
+ \filldraw[fill=#2] (3,-3) -- (3,3) .. controls (5,3) and
+ (6,2) .. (7,1.5) -- (3,1.5) -- cycle;
+ \draw (0,-1.5) circle [ x~radius=1 , y~radius= 0.5];
+ \draw (0,-1.5) circle [ x~radius=1 , y~radius= 0.5];
+ \foreach \x in { 0.2 , 0.6 }
+ \draw[line ~ width=0.04ex* \l_@@_scale_abs_tl ]
+ (\x,-1) -- (\x,-2) (-\x,-1) -- (-\x,-2) ;
+ \draw[line ~ width=0.04ex* \l_@@_scale_abs_tl ] (-1,-1.5) -- (1,-1.5);
+ \fill (1.25,1.25) circle [ x~radius=0.5 , y~radius= 0.75];
+ \fill (-1.25,1.25) circle [ x~radius=0.5 , y~radius= 0.75];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+% \subsection{Other symbols(s)}
+%
+%\begin{macro}{ \@@_Strichmaxerl_x_check:N }
+% A helper command. This command checks if the length is greater then
+% the radius of the circle.
+% \begin{macrocode}
+\cs_new:Npn \@@_Strichmaxerl_x_check:N #1
+ {
+ \fp_compare:nNnTF {#1} > { 0 }
+ {
+ \fp_compare:nNnTF {#1} < { 0.18 }
+ { \fp_zero:N #1 }
+ { \fp_set:Nn #1 { #1 - 0.18 } }
+ }
+ {
+ \fp_compare:nNnTF {#1} > { - 0.18 }
+ { \fp_zero:N #1 }
+ { \fp_set:Nn #1 { #1 + 0.18 } }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \@@_Strichmaxerl_if_smaller_zero_set_zero:N }
+% Again to write less.
+% \begin{macrocode}
+\cs_new:Npn \@@_Strichmaxerl_if_smaller_zero_set_zero:N #1
+ {
+ \fp_compare:nNnT {#1} < { 0 } { \fp_zero:N #1 }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Strichmaxerl }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Strichmaxerl }
+ { S O{-22} O{22} O{27} O{-27} }
+ {
+ \@@_provide_savebox_and_use:nn
+ { Strichmaxerl_#1_#2_#3_#4_#5 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+% \end{macrocode}
+%
+% Now we have to calculate the length and the height of the separate
+% parts of the \verb|\Strichmaxerl|.
+%
+% At first the lengths (they have all an \verb|x| in the name). \par
+% \verb|LA| for \enquote{linker Arm} (\emph{left arm}). \par
+% \verb|RA| for \enquote{rechter Arm} (\emph{right arm}). \par
+% \verb|LB| for \enquote{linkes Bein} (\emph{left leg}). \par
+% \verb|RB| for \enquote{rechtes Bein} (\emph{right leg}). \par
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_Strichmaxerl_x_LA_fp { -0.27 * cosd (#2) }
+ \fp_set:Nn \l_@@_Strichmaxerl_x_RA_fp { 0.27 * cosd (#3) }
+ \fp_set:Nn \l_@@_Strichmaxerl_x_RB_fp { 0.34 * sind (#4) }
+ \fp_set:Nn \l_@@_Strichmaxerl_x_LB_fp { 0.34 * sind (#5) }
+% \end{macrocode}
+%
+% Now the height (\verb|y|): \par
+% \verb|LA| for \enquote{linker Arm} (\emph{left arm}). \par
+% \verb|RA| for \enquote{rechter Arm} (\emph{right arm}). \par
+% \verb|LB| for \enquote{linkes Bein} (\emph{left leg}). \par
+% \verb|RB| for \enquote{rechtes Bein} (\emph{right leg}). \par
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_Strichmaxerl_y_LA_fp { 0.27 * sind (#2) }
+ \fp_set:Nn \l_@@_Strichmaxerl_y_RA_fp { 0.27 * sind (#3) }
+ \fp_set:Nn \l_@@_Strichmaxerl_y_RB_fp { 0.34 * cosd (#4) }
+ \fp_set:Nn \l_@@_Strichmaxerl_y_LB_fp { 0.34 * cosd (#5) }
+% \end{macrocode}
+% Well then, lets start our calculations. Firstly the length.
+%
+%^^A X
+%
+% \begin{macrocode}
+ \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_LA_fp
+ \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_RA_fp
+ \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_LB_fp
+ \@@_Strichmaxerl_x_check:N \l_@@_Strichmaxerl_x_RB_fp
+% \end{macrocode}
+%
+%
+%
+%
+%
+%
+% \begin{macrocode}
+ \fp_set:Nn \@@_Strichmaxerl_x_max_fp
+ {
+ max
+ (
+ 0 , \l_@@_Strichmaxerl_x_LA_fp , \l_@@_Strichmaxerl_x_RA_fp,
+ \l_@@_Strichmaxerl_x_LB_fp , \l_@@_Strichmaxerl_x_RB_fp
+ )
+ }
+ \fp_set:Nn \@@_Strichmaxerl_x_min_fp
+ {
+ min
+ (
+ 0 , \l_@@_Strichmaxerl_x_LA_fp , \l_@@_Strichmaxerl_x_RA_fp,
+ \l_@@_Strichmaxerl_x_LB_fp , \l_@@_Strichmaxerl_x_RB_fp
+ )
+ }
+% \end{macrocode}
+%
+%^^A Y
+%
+% Finished the length. Now we calculate our height. Arms and legs more
+% or less separate.
+%
+% Arms: First we subtract $0.2$ (= adding $-0.2$) (torso length)
+%
+% \begin{macrocode}
+ \fp_set:Nn \l_@@_Strichmaxerl_y_LA_fp { \l_@@_Strichmaxerl_y_LA_fp - 0.2 }
+ \fp_set:Nn \l_@@_Strichmaxerl_y_RA_fp { \l_@@_Strichmaxerl_y_RA_fp - 0.2 }
+% \end{macrocode}
+% Arms and Legs: if they are smaller than $0$, make them $0$.
+% \begin{macrocode}
+ \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_LA_fp
+ \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_RA_fp
+ \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_LB_fp
+ \@@_Strichmaxerl_if_smaller_zero_set_zero:N \l_@@_Strichmaxerl_y_RB_fp
+% \end{macrocode}
+%
+% And find the greatest number.
+% \begin{macrocode}
+ \fp_set:Nn \@@_Strichmaxerl_y_max
+ {
+ max
+ (
+ 0 , \l_@@_Strichmaxerl_y_LA_fp , \l_@@_Strichmaxerl_y_RA_fp,
+ \l_@@_Strichmaxerl_y_LB_fp , \l_@@_Strichmaxerl_y_RB_fp
+ )
+ }
+% \end{macrocode}
+%
+%
+%
+%
+%
+%
+% \begin{macrocode}
+ \@@_create_draftbox:nn
+ {
+ (
+ 0.60597ex +1.35ex * \@@_Strichmaxerl_x_max_fp
+ -1.35ex * \@@_Strichmaxerl_x_min_fp
+ ) * \l_@@_scale_abs_tl
+ }{
+ ( 1.173ex + 1.35ex * \@@_Strichmaxerl_y_max
+ ) * \l_@@_scale_abs_tl
+ }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ line ~ width=0.12ex* \l_@@_scale_abs_tl , scale=#1, x=1.35ex, y=1.35ex
+ ]
+ \char_set_catcode_other:N :
+ %% LB
+ \draw[rotate \space around= { #5 \token_to_str:N : ( 0.15 , 0.2 ) } ] (0.15,0.2) -- (0.15,-0.14);
+ %% RB
+ \draw[rotate \space around= { #4 \token_to_str:N : ( 0.15 , 0.2 ) } ] (0.15,0.2) -- (0.15,-0.14);
+ \draw (.15,.2) -- (.15,.4);
+ %% RA
+ \draw[rotate \space around={ #3 \token_to_str:N : ( 0.15 , 0.4) } ] (0.15,0.4) -- (0.42,0.4);
+ %% LA
+ \draw[rotate \space around={ #2 \token_to_str:N : ( 0.15 , 0.4) } ] (0.15,0.4) -- (-0.12,0.4);
+ \draw (.15, .4) -- (.15, .53);
+ \draw (.15,.8) circle [radius=0.18];
+ \end{tikzpicture}
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%\begin{macro}{ \Person }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Person } { S O{-22} O{22} O{27} O{-27} }
+ {
+ \msg_error:nnnn
+ { tikzsymbols }
+ { obsolete-command }
+ { \Person }
+ { \Strichmaxerl }
+ \tikzsymbolsuse { Strichmaxerl } [#1] [#2] [#3] [#4] [#5]
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Candle }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Candle } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Candle_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 0.63998ex * \l_@@_scale_abs_tl }
+ { 1.754993ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex, y=1ex, scale=#1, line ~ width=0.07ex* \l_@@_scale_abs_tl
+ ]
+ \draw[rounded ~ corners=0.04ex* \l_@@_scale_abs_tl ]
+ (0,0) -- (0.2,0) -- +(0,1) -- (0,1) -- cycle;
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (0.1,1) -- (0.1,1.2);
+ \foreach \x in { -0.2 , 0.4 }
+ \draw[line ~ width=0.04ex* \l_@@_scale_abs_tl ]
+ (0.1,1.1) .. controls (\x,1.3) and (0.1,1.5) .. (0.1,1.7);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Fire }
+% Not quite happy with the |xshift| and |yshift| and |rotate|,
+% but it works.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Fire } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Fire_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.576ex * \l_@@_scale_abs_tl }
+ { 1.640942ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex, y=1ex, scale=#1, line ~ width=0.07ex* \l_@@_scale_abs_tl ,
+ rotate=45,
+ ]
+ \fill (-0.05,0) -- (0.05,0) -- (0.05,0.95) -- (-0.05,0.95) -- cycle;
+ \fill (-0.74,0.7) -- (0.19,0.7) -- (0.19,0.8) -- (-0.74,0.8) -- cycle;
+ \fill[rotate=-20, xshift=-0.275ex, yshift=-0.02ex]
+ (-0.05,0.07) -- (0.05,0.07) -- (0.05,0.9) -- (-0.05,0.9) -- cycle;
+ \fill[rotate=-70, xshift=-0.7ex, yshift=-0.49ex]
+ (-0.05,0.07) -- (0.05,0.07) -- (0.05,0.9) -- (-0.05,0.9) -- cycle;
+ \fill[rotate=135, xshift=0.53ex, yshift=-0.805ex]
+ (-0.05,0.07) -- (0.05,0.07) -- (0.05,0.9) -- (-0.05,0.9) -- cycle;
+ \draw
+ [
+ rotate=-45, xshift=-0.56ex, yshift=0.32ex,
+ line ~ width=0.04ex* \l_@@_scale_abs_tl , x=0.5ex, y=0.5ex
+ ]
+ (-0.1,0.29) .. controls (-0.7,0.6) and (0,1.2) .. (0.05,1.7);
+ \draw
+ [
+ rotate=-45, xshift=-0.455ex,yshift=0.32ex,
+ line ~ width=0.04ex* \l_@@_scale_abs_tl , x=0.5ex, y=0.5ex
+ ]
+ (-0.1,0.29) .. controls (0.7,0.6) and (-0.1,1.2) .. (-0.15,1.7);
+ \draw[rotate=-45, xshift=-0.53ex] (-0.1,0.29) .. controls
+ (-0.7,0.6) and (0,1.2) .. (0,1.5);
+ \draw[rotate=-45, xshift=-0.424ex] (-0.1,0.29) .. controls
+ (0.7,0.6) and (-0.1,1.2) .. (-0.1,1.5);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Coffeecup }
+% \begin{macrocode}
+\bool_if:NF \g_@@_if_opt_marvosym_bool
+{
+\@@_Declare_Document_Command:nnn { Coffeecup } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Coffeecup_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.82ex * \l_@@_scale_abs_tl }
+ { 1.705ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.7ex,y=0.7ex, scale=#1,
+ line ~ width=0.07ex* \l_@@_scale_abs_tl , decoration=
+ {
+ snake,amplitude=.05ex* \l_@@_scale_abs_tl ,
+ segment ~ length=0.408ex* \l_@@_scale_abs_tl
+ }
+ ]
+ \draw (0,0) arc [start ~ angle=180, end ~ angle=270, x ~ radius=0.8,y ~ radius=1] --++
+ (0.5,0) arc [start ~ angle=270, end ~ angle=360, x ~ radius=0.8,y ~ radius=1] -- cycle;
+ \draw (2.1,-0.15) -- (2.2,-0.15) arc [start ~ angle=90, end ~ angle=-90, radius=0.3] -- (1.85, -0.75);
+ \foreach \x in {0.4,1,1.6}
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl , decorate]
+ (\x,0.3) -- +(0,1);
+ \draw (0,-1.05) -- (2.1,-1.05);
+ \end{tikzpicture}%
+ }
+ }
+ }
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Chair }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Chair } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Chair_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 0.97ex * \l_@@_scale_abs_tl }
+ { 1.69ex * \l_@@_scale_abs_tl }
+ }{
+ \fp_compare:nNnT {#1} < { 0 } { \bool_set_true:N \l_@@_if_scale_negative_bool }
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.9ex,y=0.9ex, scale=#1, line ~ width=0.07ex* \l_@@_scale_abs_tl
+ ]
+ \draw (0,-0.5) -- (0,0.7) -- (0.5,1) -- (0.5,0.25);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] (0,0.4) -- (0.5,0.7);
+ \draw (0,0) -- (0.5,0.3) -- (1,0) --(1,-0.5);
+ \bool_if:NT \l_@@_if_scale_negative_bool
+ { \draw (0.5,0.3) -- +(0,-0.5); }
+ \draw (0.5,-0.3) -- (0.5,-0.8);
+ \draw (1,0) -- (0.5,-0.3) -- (0,0);
+ \end{tikzpicture}%
+ }
+ \bool_set_false:N \l_@@_if_scale_negative_bool
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Bed }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Bed } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Bed_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 3.08ex * \l_@@_scale_abs_tl }
+ { 1.68ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex , y=1ex , scale=#1 , line ~ width=0.08ex*\l_@@_scale_abs_tl
+ ]
+ \draw (0,0) -- (0,1.6);
+ \draw (3,0) -- (3,1.2);
+ \draw (0,0.5) -- (3,0.5);
+ \draw (0,0.35) -- (3,0.35);
+ \draw (0.7,0.5) arc [start ~ angle=0, end ~ angle=90, radius=0.7];
+ \draw (0.7,0.5) arc [start ~ angle=180, end ~ angle=30, x ~ radius=1.231,y ~ radius=0.6];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Tribar }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Tribar }
+ { S O{opacity=0} O{opacity=0} O{opacity=0} }
+ {
+ \@@_provide_savebox_and_use:nn { Tribar_#1_#2_#3_#4 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.71746ex * \l_@@_scale_abs_tl }
+ { 1.68497ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.65ex,y=0.65ex,scale=#1,
+ rounded ~ corners=0.03ex* \l_@@_scale_abs_tl ,
+ line ~ width=0.06ex* \l_@@_scale_abs_tl
+ ]
+ \fill[#2] (0.15,0.3) -- (-0.15,-0.3) -- (1.75,-0.3) -- ++ (-0.15,-0.3)
+ -- (-0.65,-0.6) -- (0.35,1.3) -- +(0.15,-0.3);
+ \fill[#3] (0,0) -- (1.3,0) -- (0.35,1.9) -- (0.65,1.9) --
+ (1.75,-0.3) -- (-0.1,-0.3);
+ \fill[#4] (1,0) -- (0.35,1.3) -- (-0.65,-0.6) -- ++
+ (-0.15,0.3) -- (0.35,1.9) -- (1.3,0);
+ \draw (0,0) -- (1,0) -- (0.5,1) -- cycle;
+ \draw (0.15,0.3) -- (-0.15,-0.3) -- (1.75,-0.3) -- ++ (-0.15,-0.3)
+ -- (-0.65,-0.6) -- (0.35,1.3) -- (0.8,.4);
+ \draw (0.9,0) -- (1.3,0) -- (0.35,1.9) -- (0.65,1.9) --
+ (1.75,-0.3) -- +(-0.05,-0.1);
+ \draw (-0.6,-0.6) -- (-0.65,-0.6) -- ++ (-0.15,0.3) -- (0.35,1.9) -- (0.4,1.9);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Moai }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Moai } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Moai_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \fp_compare:nNnTF { \l_@@_scale_abs_tl } < { 2 }
+ {
+ \dim_set:Nn \l_@@_Moai_thickness_dim { 0.05ex }
+ }{
+ \fp_compare:nNnTF { \l_@@_scale_abs_tl } < { 5 }
+ { \dim_set:Nn \l_@@_Moai_thickness_dim { 0.035ex } }
+ { \dim_set:Nn \l_@@_Moai_thickness_dim { 0.03ex } }
+ }
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { ( 1.00102ex + \l_@@_Moai_thickness_dim ) * \l_@@_scale_abs_tl }
+ { ( 1.66404ex + \l_@@_Moai_thickness_dim ) * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=.13ex, y=.13ex, rounded ~ corners=0.01ex* \l_@@_scale_abs_tl ,
+ scale=#1,
+ line ~ width= \dim_use:N \l_@@_Moai_thickness_dim * \l_@@_scale_abs_tl
+ ]
+ \draw (-2.6,-4.25) -- (-2.5,-5.8)
+ ..controls (-2,-6.8) and (1.5,-6.8) .. (2.2,-5.8) -- (2.4,-3.95);
+ \draw (-2.5,2.5) .. controls (-2.9,4.6) and (2,5) .. (3.3,2.5) -- (2.9,-3.4)
+ .. controls (2,-5) and (-4,-5) .. (-3.1,-3) -- cycle;
+ \draw (-2.5,3) -- (-2,5) .. controls (0,6) and (2,5.8) .. (3.1,4.7) -- (3.3,2.5);
+ \draw[line ~ width=0.02ex* \l_@@_scale_abs_tl ]
+ (-2.2,-1.8) .. controls (-1,-1.3) and (0,-1.7) .. (1,-2);
+ \draw[line ~ width=0.02ex* \l_@@_scale_abs_tl ]
+ (-2.2,-1.8) .. controls (-1,-1) and (0,-1.4) .. (1,-2);
+ \draw[line ~ width=0.02ex* \l_@@_scale_abs_tl ]
+ (-2.2,-1.8) .. controls (-1,-2) and (0,-2) .. (1,-2);
+ \draw (-0.8,4) .. controls (-0.8,3) and (-0.8,2) .. (-1.6,0.5) -- (-1.8,-0.4)
+ .. controls (-1,0.2) and (0,0.2) .. (0.6,-0.4) -- (0.7,0.4)
+ .. controls (0,1) and (0,2) .. (0.8,4);
+ \draw (-1.8,-0.36) .. controls (-0.5,-0.5) and (0,-0.5) .. (0.6,-0.36);
+ \draw (3.2,3.5) -- (3.7,3.5) .. controls (3.5,2)
+ and (3.5,2) .. (3.6,-1.5) -- (3,-1.9);
+ \draw (-2.5,3) .. controls (-2.7,2) and (-3,1) .. (-2.88,-1);
+ \draw (-2.5,2.8) .. controls (-2,2.5) and (-1,3) .. (-0.8,3.1);
+ \draw (0.5,3.3) .. controls (1,3) and (1,2.5) .. (3.3,2.4);
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+% \begin{macro}{ \Snowman }
+%
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Snowman } { S }
+ {
+ \@@_provide_savebox_and_use:nn { Snowman_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.545ex * \l_@@_scale_abs_tl }
+ { 1.77157ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=0.9ex,y=0.9ex,line ~ width=0.07ex* \l_@@_scale_abs_tl , scale=#1
+ ]
+ \draw (0,0) circle [x ~ radius = 0.4 , y~radius=0.35];
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] (0,0.64) circle [x ~ radius = 0.3 , y~radius=0.28];
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (0,1.14) circle [x ~ radius = 0.2 , y~radius=0.2];
+ \draw
+ [
+ rounded ~ corners=0.1ex* \l_@@_scale_abs_tl ,
+ line ~ width=0.05ex* \l_@@_scale_abs_tl ,
+ rotate ~ around={-30 \token_to_str:N : (0,1.14)} ,
+ ]
+ (-0.2,1.15) -- ++(0,0.35) -- +(0.4,0) -- (0.2,1.14);
+ \draw
+ [
+ rounded ~ corners=0.07ex * \l_@@_scale_abs_tl ,
+ line ~ width=0.05ex * \l_@@_scale_abs_tl ,
+ rotate ~ around={-30 \token_to_str:N : (0,1.14)} ,
+ ]
+ (-0.2,1.19) arc [start ~ angle=270, end ~ angle=90, radius=0.1];
+ \foreach \y in { 0.78 , 0.63 , 0.48 }
+ \fill (0,\y) circle [radius=0.04];
+ \foreach \y in { 0.2 , 0 , -0.2 }
+ \fill (0,\y) circle [radius=0.05];
+ \fill (-0.06,1.18) circle [radius=0.045];
+ \fill (0.06,1.18) circle [radius=0.045];
+ \foreach \x/\y in { 0.1/1.08 , 0.06/1.055 , 0.02/1.039}
+ \fill (\x,\y) circle [radius=0.015] (-\x,\y) circle [radius=0.015] ;
+ \draw (-0.3,0.7) -- (-0.6,0.8);
+ \draw (0.3,0.7) -- (0.6,0.8);
+ \draw[line ~ width=0.06ex* \l_@@_scale_abs_tl ] (-0.65,0) -- (-0.65,1);
+ \foreach\x in {-0.85, -0.75,-0.65,-0.55,-0.45}
+ \draw[line ~ width=0.05ex* \l_@@_scale_abs_tl ] (-0.65,1) -- (\x,1.3);
+ \foreach \y/\x/\z in { 0.7/0.75 , 0.9/0.8 , 1/0.6/0.55 }
+ \draw (0.6,0.8) -- (\x,\y) (-0.6,0.8) -- (-\z,\y) ;
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+% \subsection{Trees}
+% Many great ideas are stolen. Don't know who said that, but it's
+% true.
+%
+%
+%
+%\begin{macro}{ \@@_Basic_Tree:nnnnn }
+% Let's define the \Makro{@@_Basic_Tree:nnnnn} command.
+% Like every symbol it also is saved inside a box.
+% If the fifth argument is neither empty nor \enquote{leaf}
+% it \dots\ does (?) an error message.
+% \begin{macrocode}
+\cs_new:Npn \@@_Basic_Tree:nnnnn #1#2#3#4#5
+ {
+ \@@_provide_savebox_and_use:nn
+ { BasicTree_#1_#2_#3_#4_#5 }
+ {
+ \tl_set:Nn \l_tmpa_tl {#5}
+ \bool_lazy_or:nnTF
+ { \tl_if_eq_p:NN \l_tmpa_tl \c_@@_leaf_tl }
+ { \tl_if_empty_p:n {#5} }
+ { \@@_Basic_Tree_aux:nnnnn {#1} {#2} {#3} {#4} {#5} }
+ { \msg_error:nnn { tikzsymbols } { tree } {#5} }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{ \BasicTree }
+% Well, thats the final \Makro{BasicTree} command.
+% More or less copy \& pasted from the \Package{tikz} manual.
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { BasicTree } { S m m m m }
+ {
+ \@@_Basic_Tree:nnnnn {#1} {#2} {#3} {#4} {#5}
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \WorstTree }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { WorstTree } { S }
+ {
+ \@@_provide_savebox_and_use:nn { WorstTree_#1 }
+ {
+ \@@_set_scale_abs_tl:n {#1}
+ \bool_if:NTF \l_@@_if_opt_draft_bool
+ {
+ \@@_create_draftbox:nn
+ { 1.64ex * \l_@@_scale_abs_tl }
+ { 1.84ex * \l_@@_scale_abs_tl }
+ }{
+ \begin{tikzpicture}
+ [
+ /@@ ,
+ x=1ex,y=1ex, line ~ width=0.04ex* \l_@@_scale_abs_tl ,scale=#1
+ ]
+ \fill[brown] (-0.3,0) .. controls (0.2,0.3) and (0.2,0.7) .. (0.2,1) -- (0.5,1) ..
+ controls (0.5,0.7) and (0.5,0.3) .. (1,0);
+ \draw (-0.3,0) .. controls (0.2,0.3) and (0.2,0.7) .. (0.2,1) -- (0.5,1) ..
+ controls (0.5,0.7) and (0.5,0.3) .. (1,0) ;
+ \fill[green] (0.2,0.8) -- (0,0.8) .. controls (-0.4,0.7) and (-0.4,1) .. (-0.3,1.2) ..
+ controls (-0.3, 1.6) and (-0.1,1.6) .. (0.1,1.5) ..
+ controls (0.3,1.8) and (0.6,1.6) .. (0.7,1.5) ..
+ controls (1.1, 1.6) and (1,1.4) .. (1,1.2) ..
+ controls (1.2,1) and (1.2,0.7) .. (0.8,0.8) -- (0.5,0.8);
+ \draw (0.214,0.8) -- (0,0.8) .. controls (-0.4,0.7) and (-0.4,1) .. (-0.3,1.2) ..
+ controls (-0.3, 1.6) and (-0.1,1.6) .. (0.1,1.5) ..
+ controls (0.3,1.8) and (0.6,1.6) .. (0.7,1.5) .. controls (1.1, 1.6) and (1,1.4) ..
+ (1,1.2) .. controls (1.2,1) and (1.2,0.7) .. (0.8,0.8) -- (0.486,0.8);
+ \fill[red] (0,1) circle [radius=0.1];
+ \fill[red] (0.4,1.2) circle [radius=0.1];
+ \fill[red] (0.8,1.1) circle [radius=0.1];
+ \end{tikzpicture}%
+ }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Springtree }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Springtree } { S }
+ {
+ \@@_Basic_Tree:nnnnn
+ {#1}
+ { brown!70!black }
+ { green!90!black }
+ { green!80!black }
+ { leaf }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Summertree }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Summertree } { S }
+ {
+ \@@_Basic_Tree:nnnnn
+ {#1}
+ { brown!50!black }
+ { green!80!black }
+ { red!80!green }
+ { leaf }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Autumntree }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Autumntree } { S }
+ {
+ \@@_Basic_Tree:nnnnn
+ {#1}
+ { red!30!black }
+ { red!75!black }
+ { orange }
+ { leaf }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{ \Wintertree }
+% \begin{macrocode}
+\@@_Declare_Document_Command:nnn { Wintertree } { S }
+ {
+ \@@_Basic_Tree:nnnnn
+ {#1}
+ { black!80!white }
+ { black!50 }
+ { black!25 }
+ { }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+% Checks if the Package \Package{marvosym} is loaded
+% if the \Option{marvosym} is set true.
+% \begin{macrocode}
+\AtBeginDocument
+ {
+ \bool_if:NT \g_@@_if_opt_marvosym_bool
+ {
+ \@ifpackageloaded { marvosym } { }
+ {
+ \msg_error:nn { tikzsymbols } { marvosym }
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \begin{macro}{ \tikzsymbolsuse }
+% If the english command name is used, the german one
+% is inserted, don't exactly know why.
+% \begin{macrocode}
+\NewDocumentCommand \tikzsymbolsuse { m }
+ {
+ \prop_get:NnNTF \g_@@_english_commands_prop {#1} \l_tmpa_tl
+ {
+ \use:c { \g_@@_command_prefix_tl \l_tmpa_tl }
+ }{
+ \cs_if_exist:cTF { \g_@@_command_prefix_tl #1 }
+ { \use:c { \g_@@_command_prefix_tl #1 } }
+ { \msg_error:nnn { tikzsymbols } { undefined-command } {#1} }
+ }
+ }
+% \end{macrocode}
+%\end{macro}
+%
+%
+%
+%
+%\begin{macro}{ \tikzsymbolsset }
+% \begin{macrocode}
+\NewDocumentCommand \tikzsymbolsset { m }
+ {
+ \keys_set_filter:nnnN { tikzsymbols } { only-package } {#1} \l_tmpa_tl
+ \tl_if_empty:NF \l_tmpa_tl
+ {
+ \keyval_parse:NNV
+ \@@_tikzsymbolsset_msg_i:n
+ \@@_tikzsymbolsset_msg_ii:nn
+ \l_tmpa_tl
+ }
+ }
+\cs_generate_variant:Nn \keyval_parse:NNn { NNV }
+\cs_new:Npn \@@_tikzsymbolsset_msg_i:n #1
+ {
+ \@@_tikzsymbolsset_msg_ii:nn {#1} { }
+ }
+\cs_new:Npn \@@_tikzsymbolsset_msg_ii:nn #1#2
+ {
+ \msg_error:nnn { tikzsymbols } { package-option } {#1}
+ }
+\exp_args:NV \tikzsymbolsset \l_@@_save_global_scale_for_later_because_no_better_idea_tl
+% \end{macrocode}
+%\end{macro}
+%
+%
+%^^A\iffalse
+%<*ignore>
+\tkzsymbls@Declare@Robust@Command{@@@@@@@@Keep@Cool@@@@I}{%
+\begin{tikzpicture}[ /@@ ,x=1em, y=1em, line ~ width=0.03em]
+\fill[decorate,decoration={snake,amplitude=.02em,segment ~ length=0.4em},cyan!20!]
+(0,0) -- (0,1) -- (1,1) -- (1,0) -- cycle;
+\draw (0.3,0.3) -- (0.55,0.7);% Körper
+\draw (0.05,0.4) -- (0.3,0.3) -- (0.1,0.1);
+\draw (0.3,0.8) -- (0.5,0.61);
+\draw (0.49,0.61) -- (0.8,0.65);
+\draw (0.65,0.9) circle [radius=0.17];
+\end{tikzpicture}%
+\tikzsymbolsaftersymbolinput%
+}
+\tkzsymbls@Declare@Robust@Command{@@@@@@@@@@@Keep@Cool@@@@@II}{%
+\begin{tikzpicture}[ /@@ ,x=1em,y=1em]
+\fill[decorate,decoration={snake,amplitude=.02em,segment ~ length=0.6em},cyan!20!] (-0.3,-0.3) rectangle (0.5,1);
+\draw (0,-0.1) -- (0.15,0.2) -- (0.3,-0.1);% Beine
+\draw (.15,.2) -- (.15,.4);% Körper
+\draw (.15,.4) -- (.4,.5);% Rechter Arm
+\draw (.15,.4) -- (-0.1,.5);% Linker Arm
+\draw (.15, .4) -- (.15, .53);% Hals
+\draw (.15,.8) circle [radius=0.18];% Kopf
+\end{tikzpicture}%
+\tikzsymbolsaftersymbolinput%
+}
+%</ignore>
+%^^A\fi
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+%
+%
+% \endinput
+%
+%
+%
+% Local Variables:
+% mode: doctex
+% TeX-master: t
+% End:
diff --git a/graphics/pgf/contrib/tikzsymbols/tikzsymbols.ins b/graphics/pgf/contrib/tikzsymbols/tikzsymbols.ins
new file mode 100644
index 0000000000..9b22e1b434
--- /dev/null
+++ b/graphics/pgf/contrib/tikzsymbols/tikzsymbols.ins
@@ -0,0 +1,52 @@
+%%
+%% This is file `tikzsymbols.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tikzsymbols.dtx (with options: `install')
+%%
+%% Copyright (C) 2013--2019 by Ben Vitecek (current Maintainer)
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% This work consists of the files README.md, tikzsymbols.dtx,
+%% tikzsymbols.ins and the derived files tikzsymbols.sty.
+%%
+\input l3docstrip.tex
+\askforoverwritefalse
+\preamble
+
+ Copyright (C) 2013--2019 by Ben Vitecek (current Maintainer)
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either version 1.3c
+ of this license or (at your option) any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3c or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ This work consists of the files README.md, tikzsymbols.dtx,
+ tikzsymbols.ins and the derived files tikzsymbols.sty.
+
+\endpreamble
+
+\usedir{tex/latex/tikzsymbols}
+\generate{
+ \file{\jobname.sty}{\from{\jobname.dtx}{package}}
+}
+\endbatchfile
+\endinput
+%%
+%% End of file `tikzsymbols.ins'.
diff --git a/graphics/pgf/contrib/tikzsymbols/tikzsymbols.pdf b/graphics/pgf/contrib/tikzsymbols/tikzsymbols.pdf
new file mode 100644
index 0000000000..f075506ba3
--- /dev/null
+++ b/graphics/pgf/contrib/tikzsymbols/tikzsymbols.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/timing-diagrams/Makefile b/graphics/pgf/contrib/timing-diagrams/Makefile
new file mode 100644
index 0000000000..656b8e1ead
--- /dev/null
+++ b/graphics/pgf/contrib/timing-diagrams/Makefile
@@ -0,0 +1,18 @@
+NAME=timing-diagrams
+
+all: diagrams-examples.pdf $(NAME).zip
+
+version.txt: force
+ @echo "$(NAME) version $$(git rev-parse HEAD).\n\
+Commited on $$(git show -s HEAD --pretty=format:'%cd')." > $@
+
+diagrams-examples.pdf: diagrams-examples.tex timing-diagrams.sty
+ pdflatex -interaction nonstopmode diagrams-examples.tex
+
+FILES=diagrams-examples.pdf diagrams-examples.tex timing-diagrams.sty README Makefile
+
+$(NAME).zip: version.txt $(FILES)
+ cd .. && zip $@ $(NAME)/version.txt $(FILES:%=$(NAME)/%) && mv $(NAME).zip $(NAME)/
+
+force:
+.PHONY: all force
diff --git a/graphics/pgf/contrib/timing-diagrams/README b/graphics/pgf/contrib/timing-diagrams/README
new file mode 100644
index 0000000000..8cb021df59
--- /dev/null
+++ b/graphics/pgf/contrib/timing-diagrams/README
@@ -0,0 +1,13 @@
+Draw and annotate various kinds of timing diagrams in Tikz.
+
+There's no real documentation, read the source and the examples
+(diagrams-examples.tex), and use at your own risks ;-).
+
+The latest version is to be found here:
+
+ https://gitorious.org/tikz-goodies/tikz-goodies
+
+You may want to have a look at tikz-timing too if you want to draw
+some hardware-oriented timing diagrams:
+
+ http://www.texample.net/tikz/examples/tikz-timing/
diff --git a/graphics/pgf/contrib/timing-diagrams/diagrams-examples.pdf b/graphics/pgf/contrib/timing-diagrams/diagrams-examples.pdf
new file mode 100644
index 0000000000..1746e47897
--- /dev/null
+++ b/graphics/pgf/contrib/timing-diagrams/diagrams-examples.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/timing-diagrams/diagrams-examples.tex b/graphics/pgf/contrib/timing-diagrams/diagrams-examples.tex
new file mode 100644
index 0000000000..c7b1240a1d
--- /dev/null
+++ b/graphics/pgf/contrib/timing-diagrams/diagrams-examples.tex
@@ -0,0 +1,412 @@
+\documentclass{article}
+
+\usepackage{timing-diagrams}
+
+\usepackage{pifont}
+
+\begin{document}
+
+\section{Basic diagram}
+
+\begin{tikzpicture}
+ % Define timelines with their names, and ordinate as #2:
+ \tline{A}{2};
+ \tline{B}{0};
+ % Actually draw the timelines (#2 is the horizontal length):
+ \ttimeline{A}{5};
+ \ttimeline{B}{5};
+ % Provide captions for timelines:
+ \tcaption{A}{A's caption};
+ \tcaption{B}{B's caption};
+
+ % Draw the actual content:
+ % tick = vertical line accros the timeline
+ \ttick{A};
+ % advance time
+ \tskip{A}{2};
+ % This one will be drawn 2 time units after the previous, because of
+ % the \tskip:
+ \ttick{A};
+
+ % One more with the same principle:
+ \tskip{A}{1};
+ \ttick{A};
+
+ % Same as above, but on timeline B:
+ \ttick{B};
+ \tskip{B}{1};
+ % \tbox creates a box with non-null width, and text inside:
+ \tbox{B}{3}{Box on B};
+\end{tikzpicture}
+
+\section{Timeline, ticks and tasks}
+
+\begin{tikzpicture}
+ \draw (-1,1.5) node[rotate=90] (systemc) {\textsf{\large SystemC}};
+ \draw[dashed] (-1,0) -- (9,0);
+ \draw (-1,-2) node[rotate=90] (jtlm) {\textsf{\large jTLM}};
+
+ % SystemC
+ \tline{A}{2.1};
+ \tcaption{A}{A};
+ \tline{B}{1};
+ \tcaption{B}{B};
+
+ \ttimeline{A}{5};
+ \ttimeline{B}{5};
+
+ % jTLM
+ \tline{P}{-1.5};
+ \tcaption{P}{P};
+ \tline{Q}{-2.6};
+ \tcaption{Q}{Q};
+
+ \ttimeline{P}{5};
+ \ttimeline{Q}{5};
+
+
+ \ttick{A};
+ \ttextU{A}{f()};
+ \tskiptext{A}{2}{\texttt{wait(20)}};
+ \ttick{A};
+ \tskip{A}{1};
+ \ttick{A};
+
+ \ttick{B}
+ \tskip{B}{1};
+ \ttick{B};
+ \tskip{B}{1};
+ \ttick{B};
+ \tskip{B}{2};
+ \ttick{B};
+
+ \ttick{P}
+ \ttextU{P}{g()};
+ \tskiptext{P}{2}{awaitTime}
+ \ttick{P};
+
+ \tbox{P}{1.5}{h()};
+
+ % just so that the final picture looks pretty
+ \tbox{Q}{1.3}{i()};
+ \tskip{Q}{1};
+ \ttick{Q};
+ \tskip{Q}{.5};
+ \tbox{Q}{2}{j()};
+
+\end{tikzpicture}
+
+\section{Annotations over a diagram}
+
+\begin{tikzpicture}
+ \tline{real}{0};
+ \tline{model}{2};
+
+ \ttimeline{real}{8.5};
+ \ttimeline{model}{8.5};
+
+ \tcaption{real}{Real system};
+ \tcaption{model}{SystemC model};
+
+ \tskip{real}{.5};
+ \tskip{model}{.5};
+
+ \path (currentrealU) coordinate (endzooma);
+ \tbox{real}{7}{\texttt{compute()}};
+ \path (currentrealU) ++(-.04, 0) coordinate (endzoomb);
+ \tstrongtick{real};
+ \ttextarrowU{real}{\texttt{commit()}};
+
+ \tstrongtick{model};
+ \path (currentmodelL) ++(-.04, 0) coordinate(startzooma);
+ \path (currentmodelL) ++( .04, 0) coordinate(startzoomb);
+ \ttextarrowU{model}{\texttt{compute()}};
+ \tskip{model}{.04};
+ \tskiptext{model}{6.92}{\texttt{wait()}};
+ \tskip{model}{.04};
+ \tstrongtick{model};
+ \ttextarrowU{model}{\texttt{commit()}};
+
+ \path (startzoomb -| endzoomb) coordinate (topright);
+ \path (barycentric cs:startzoomb=.5,endzooma=.5) coordinate (tmpa);
+ \path (barycentric cs:topright=.5,endzoomb=.5) coordinate (tmpb);
+ \draw[very thin,color=black!70!white] (startzooma) -- (endzooma);
+ \draw[very thin,color=black!70!white] (startzoomb) .. controls (tmpa) and (tmpb) .. (endzoomb);
+\end{tikzpicture}
+
+\section{Annotations with callouts, synchronizations between timelines}
+
+\newcommand{\one}{\raisebox{-2pt}{\large\ding{192}}}
+\newcommand{\two}{\raisebox{-1.5pt}{\large\ding{193}}}
+\newcommand{\three}{\raisebox{-2pt}{\large\ding{194}}}
+\tikzstyle{arrow}=[->,line width=.05cm,draw=red!90!blue!60!black]
+
+\begin{tikzpicture}[scale=.8]
+ \tline{A}{3};
+ \tcaption{A}{A};
+ \tline{B}{2};
+ \tcaption{B}{B};
+ \tline{C}{1};
+ \tcaption{C}{C};
+ \tline{T}{-1.5}
+ \tcaption{T}{OS thread};
+
+ \ttimeline{A}{10};
+ \ttimeline{B}{10};
+ \ttimeline{C}{10};
+ \ttimeline{T}{10};
+
+ \tbox{B}{1}{};
+ \tcatchup{C}{B};
+ %
+ \tbox{C}{1}{};
+ \tcalloutU[(-.8,2.5)]{C}{\texttt{during(42, routine);}}
+ %
+ %
+ \tcatchup{B}{C};
+ \tcatchup{T}{C};
+ \draw[arrow] (currentCL) -- node[left] {
+ \begin{tabular}{r}
+ \one{} create\\thread
+ \end{tabular}
+ } (currentTU);
+ \tbox{T}{4}{\texttt{routine}};
+ %
+ %
+ \tskiptextL{C}{4}{\two{} \texttt{wait(42)}\vspace{-2em}};
+ %
+ %
+ \tbox{B}{1.5}{};
+ \tcatchup{A}{B};
+ \tbox{A}{1}{};
+ \tcatchup{B}{A};
+ \tbox{B}{1}{};
+ %
+ %
+ \draw[arrow] (currentTU) -- node[right] {
+ \begin{tabular}{l}
+ \three{} join\\thread
+ \end{tabular}
+ } (currentCL);
+ \tbox{C}{1}{};
+ %
+ %
+ \tcatchup{A}{C};
+ \tbox{A}{1}{};
+ \tcatchup{B}{A};
+ \tbox{B}{1}{};
+ %
+\end{tikzpicture}
+
+\section{Arrows between timelines}
+
+
+\begin{tikzpicture}[scale=.7]
+ \tline{sc}{2};
+ \tcaption{sc}{SystemC};
+
+ \tline{ace}{0};
+ \draw (currentace) ++ (9,-.3) node {Simulated time};
+
+ \tcaption{ace}{P/T Solver};
+
+ \ttimeline{sc}{10};
+ \ttimeline{ace}{10};
+
+ \tremember{sc}{before};
+ \tlonglighttick{sc};
+ \tskip{sc}{1.5};
+ \tlonglighttick{sc};
+ \tskip{sc}{1.5};
+ \tlonglighttick{sc};
+ \tskip{sc}{2};
+ \trecall{sc}{before};
+ \tbox{sc}{6}{Functional (1)};
+
+ \ttextarrowU{sc}{\begin{tabular}{c}
+ SystemC reads\\temperature
+ \end{tabular}
+ };
+
+ \tarrowUL{sc}{ace}{};
+ \draw (tmpmid) node[fill=white,inner sep=1pt] {(2)};
+ \tremember{ace}{before};
+ \tlonglighttick{ace};
+ \tskip{ace}{1.5};
+ \tlonglighttick{ace};
+ \tskip{ace}{1.5};
+ \tlonglighttick{ace};
+ \tskip{ace}{2};
+ \trecall{ace}{before};
+ \tbox{ace}{6}{Non-functional (3)};
+
+ \tarrowLU{ace}{sc}{};
+ \draw (tmpmid) node[anchor=west] {(4)};
+
+ \tbox{sc}{2}{...};
+\end{tikzpicture}
+
+\vspace{1em}
+
+\begin{tikzpicture}[scale=.7]
+ \tline{sc}{2};
+ \tcaption{sc}{SystemC};
+
+ \tline{ace}{0};
+ \tcaption{ace}{P/T Solver};
+
+ \draw (currentace) ++ (9,-.3) node {Simulated time};
+
+ \ttimeline{sc}{10};
+ \ttimeline{ace}{10};
+
+ \tbox{sc}{1}{(1)};
+ \ttextarrowU{sc}{end of instant $t_{i}$};
+ \tcatchup{ace}{sc};
+ \coordinate (sceoi) at (currentscL);
+
+ \tskip{sc}{6};
+ \ttick{sc};
+ \ttextarrowU{sc}{next instant $t_{i+1}$};
+
+ \tarrowCoord{(sceoi)}{(currentaceU)}{};
+ \draw (tmpmid) node[anchor=east] {(2)};
+ \tbox{ace}{6}{non-functional simu (3)};
+ % \tcalloutL{ace}{No IT};
+ \ttick{sc};
+ \tarrowLU{ace}{sc}{};
+ \draw (tmpmid) node[anchor=west] {(4)};
+ % \tcalloutU{sc}{Continue};
+ \tbox{sc}{1}{...};
+
+\end{tikzpicture}
+
+\section{Events as vertical arrows, mix between timing diagrams and others}
+
+\begin{tikzpicture}
+ \tline{S}{6};
+ \tline{M}{5};
+ \tline{E}{2};
+ \tline{T}{0}
+ \tline{F}{-2};
+ \tline{Eb}{-5};
+ \tline{Tb}{-7}
+
+ \coordinate (n1) at (-2.5,-.5);
+ \coordinate (n2) at (-2.5,4);
+ \draw [decoration={brace,amplitude=10pt},decorate] (n1) to (n2);
+
+ \coordinate (o1) at (-2.5,-7.5);
+ \coordinate (o2) at (-2.5,-1.5);
+ \draw [decoration={brace,amplitude=10pt},decorate] (o1) to (o2);
+
+ \draw (barycentric cs:n1=.5,n2=.5) ++(-10pt,0) node[anchor=south,rotate=90] {\large\textsf{(a) Naive Temperature Model}};
+ \draw (barycentric cs:o1=.5,o2=.5) ++(-10pt,0) node[anchor=south,rotate=90] {\large\textsf{(b) Proposed Approach}};
+
+ \tcaption{S}{Real System};
+ \ttimeline{S}{8};
+
+ \tskip{S}{.3};
+
+ \tstartbrace{S};
+ \tevent{S}; \tskip{S}{1.5};
+ \tevent{S}; \tskip{S}{1.3};
+ \tevent{S}; \tskip{S}{1.2};
+
+ \tendbrace{S}{\texttt{f(); wait(40);}};
+ \tstartbrace{S};
+
+ \tskip{S}{.2};
+ \tevent{S}; \tskip{S}{.8};
+ \tevent{S}; \tskip{S}{.7};
+ \tevent{S}; \tskip{S}{.5};
+ \tevent{S}; \tskip{S}{.5};
+ \tevent{S}; \tskip{S}{.8};
+ \tevent{S};
+
+ \tendbrace{S}{\texttt{g(); wait(35);}};
+
+
+
+ \tcaption{M}{
+ \begin{tabular}{r}
+ Loosely-Timed\\Model
+ \end{tabular}
+ };
+ \ttimeline{M}{8};
+ \tskip{M}{.3};
+ \foreach \x in {10,0,-10} {
+ \teventA{M}{\x};
+ }
+ \tskip{M}{4};
+ \foreach \x in {25,15,5,-5,-15,-25} {
+ \teventA{M}{\x};
+ }
+ \tskip{M}{2.5};
+
+
+ \tcaption{E}{Energy};
+ \ttimeline{E}{8};
+
+ \draw[red!50!black,thick] (currentE) ++(0,.3) -- ++(.3,0) --
+ node[right] {+3} ++(0,.6) -- ++(4,0) --
+ node[right] {+6} ++(0,1.2) -- node[near end,below]{total=9} ++(3.5,0)
+ ;
+
+
+ \tcaption{T}{Temperature};
+
+ \ttimeline{T}{8};
+ \draw[blue!50!black,thick] (currentT) ++(0,.3) -- ++(.3,0) --
+ coordinate[at end](peak1) ++(0,.6) .. controls +(1,-.2) .. ++(4,-.3) --
+ coordinate[at end](peak2) ++(0,1) .. controls +(1,-.5) .. ++(3.5,-.8)
+ ;
+
+
+
+ \draw (peak1) node[draw,circle,thick](peak1){};
+ \draw (peak2) node[draw,circle,thick](peak2){};
+ \draw (barycentric cs:peak1=.5,peak2=.5) ++(0,.1) node[inner sep=0](peaks){
+ \begin{tabular}{c}
+ Unrealistic\\peaks
+ \end{tabular}
+ };
+ \draw [arrow] (peaks) -- (peak1);
+ \draw [arrow] (peaks) -- (peak2);
+
+
+ \tcaption{F}{Frequency};
+ \ttimeline{F}{8};
+ \tskip{F}{.3};
+ \tbox{F}{4}{$\frac{3}{40}$ trans/sec};
+ \tbox{F}{3.5}{$\frac{6}{35}$ trans/sec};
+
+
+ \tcaption{Eb}{Energy};
+ \ttimeline{Eb}{8};
+
+ \draw[red!50!black,thick] (currentEb) ++(0,.3) -- ++(.3,0) --
+ ++(4,.6)
+ -- node[at end,right]{total=9} ++(3.5,1.2)
+ ;
+
+
+ \tcaption{Tb}{Temperature};
+
+ \ttimeline{Tb}{8};
+ \draw[blue!50!black,thick] (currentTb) ++(0,.3) -- coordinate[at end](start)++(.3,0);
+ \path (start)
+ ++(4,.6) coordinate (x1)
+ ++(3.5,.3) coordinate(x2);
+ \draw[blue!50!black,thick,bend left=5] (start) to (x1);
+ \draw[blue!50!black,thick,bend left=5] (x1) to (x2);
+ ;
+
+\end{tikzpicture}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End:
diff --git a/graphics/pgf/contrib/timing-diagrams/timing-diagrams.sty b/graphics/pgf/contrib/timing-diagrams/timing-diagrams.sty
new file mode 100644
index 0000000000..680b735e25
--- /dev/null
+++ b/graphics/pgf/contrib/timing-diagrams/timing-diagrams.sty
@@ -0,0 +1,243 @@
+%% timing-diagrams.sty
+%% Copyright 2013 Matthieu Moy <Matthieu.Moy@imag.fr>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is M. Matthieu Moy.
+%
+% This work consists of the files timing-diagrams.sty and the example file
+% diagrams-examples.tex.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{timing-diagrams}[2013/08/21 Draw timing diagrams in TikZ]
+
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+
+\usetikzlibrary{shadows}
+\usetikzlibrary{shapes.callouts}
+\usetikzlibrary{decorations.pathreplacing}
+% Work around a bug in some versions of PGF
+% http://tex.stackexchange.com/questions/31921/callout-and-beamer
+\usetikzlibrary{decorations.text}
+
+% Style (override to customize ...)
+\tikzstyle{tboxshadow}=[
+ drop shadow={shadow xshift=1.5pt,shadow yshift=-1.5pt}
+]
+\tikzstyle{tbox}=[
+ top color=green!7,
+ bottom color=green!80!black!25,
+ fill=green!80!black!25,
+ shading=axis,
+ shading angle=30,
+ draw=black,
+ drop shadow={shadow xshift=1.5pt,shadow yshift=-1.5pt}
+]
+\tikzstyle{tcallout}=[
+top color=yellow!7,bottom color=yellow!40!orange!80!black!25,shading=axis,
+% Cause display bug :-(
+% shading angle=45,
+ellipse callout, draw, drop shadow={shadow xshift=1pt,shadow yshift=-1pt}]
+
+\tikzstyle{tarrow}=[->,line width=.05cm,draw=red!90!blue!60!black]
+\newcommand{\boxheight}{.4}
+
+\newcommand{\tsetcurrent}[2]{
+ \path #2 coordinate (current#1);
+ \path #2 ++(0,\boxheight) coordinate (current#1U);
+ \path #2 ++(0,-\boxheight) coordinate (current#1L);
+}
+
+\newcommand{\tsetcurrentabs}[2]{
+ % correct absissa, wrong ordinate
+ \coordinate (next#1) at (#2, 0);
+ \tsetcurrent{#1}{(start#1 -| next#1)};
+}
+
+\newcommand{\tremember}[2]{
+ \coordinate (remember#2_#1) at (current#1);
+}
+\newcommand{\trecall}[2]{
+ \tsetcurrent{#1}{(remember#2_#1)};
+}
+
+\newcommand{\tline}[2]{
+ \coordinate (start#1) at (0,#2);
+ \tsetcurrent{#1}{(start#1)};
+}
+
+\newcommand{\ttimeline}[2]{
+ \path (current#1) ++(#2, 0) coordinate (tend#1);
+ \draw[->,thick] (current#1)++(-.1,0) -- (tend#1);
+}
+
+\newcommand{\tcaption}[2]{
+ \draw (start#1) ++(-.1,0) node[anchor=east] {#2};
+}
+
+\newcommand{\tadvance}[3]{
+ \path (current#1) +(#2,0) coordinate (next#1);
+ #3
+ \tsetcurrent{#1}{(next#1)};
+}
+
+\newcommand{\tbox}[3]{
+ \tadvance{#1}{#2}{
+ \path (current#1) +(0,\boxheight) coordinate (topleft#1);
+ \path (next#1) +(0,-\boxheight) coordinate (bottomright#1);
+ \draw[tbox] (topleft#1) rectangle (bottomright#1);
+ \draw (barycentric cs:current#1=.5,next#1=.5) node[anchor=center] {#3};
+ }
+}
+
+\newcommand{\tsmallbox}[3]{
+ \tskip{#1}{.05};
+ \tbox{#1}{#2-.1}{#3};
+ \tskip{#1}{.05};
+}
+
+\newcommand{\tskiptext}[3]{
+ \tadvance{#1}{#2}{
+ \path (current#1) +(0,.2) coordinate (topleft#1);
+ \path (next#1) +(0,.2) coordinate (topright#1);
+ \draw (topleft#1) edge[<->] node[auto] {#3} (topright#1);
+ }
+}
+
+\newcommand{\tskiptextL}[3]{
+ \tadvance{#1}{#2}{
+ \path (current#1) +(0,-.2) coordinate (bottomleft#1);
+ \path (next#1) +(0,-.2) coordinate (bottomright#1);
+ \draw (bottomleft#1) edge[<->] node[midway,below] {#3} (bottomright#1);
+ }
+}
+
+\newcommand{\tskiptextCONF}[4]{
+ \tadvance{#1}{#2}{
+ \path (current#1) +(0,-.2) coordinate (bottomleft#1);
+ \path (next#1) +(0,-.2) coordinate (bottomright#1);
+ \draw (bottomleft#1) edge[<->] node[#3] {#4} (bottomright#1);
+ }
+}
+
+\newcommand{\tskiptextinbox}[3]{
+ \tadvance{#1}{#2}{
+ \path (current#1) +(0,-.2) coordinate (topleft#1);
+ \path (next#1) +(0,-.2) coordinate (topright#1);
+ \draw (topleft#1) edge[<->] node[auto] {#3} (topright#1);
+ }
+}
+
+\newcommand{\tskiparrowU}[3]{
+ \tadvance{#1}{#2}{
+ \path (current#1) +(0,\boxheight) coordinate (topleft#1);
+ \path (next#1) +(0,\boxheight) coordinate (topright#1);
+ \draw (topleft#1) edge[bend left,->] node[above] {#3} (topright#1);
+ }
+}
+
+\newcommand{\tskiparrowL}[3]{
+ \tadvance{#1}{#2}{
+ \path (current#1) +(0,-\boxheight) coordinate (topleft#1);
+ \path (next#1) +(0,-\boxheight) coordinate (topright#1);
+ \draw (topleft#1) edge[bend right,->] node[below] {#3} (topright#1);
+ }
+}
+
+\newcommand{\tskip}[2]{
+ \tadvance{#1}{#2}{}
+}
+
+\newcommand{\tevent}[1]{
+ \draw[thick,->] (current#1) -- ++(0,.5);
+}
+
+\newcommand{\teventA}[2]{
+ \draw[thick,->] (current#1) -- ++(#2+90:.5);
+}
+
+\newcommand{\ttick}[1]{
+ \draw[tbox,thick] (current#1) ++(0,\boxheight) rectangle ++(.01,-2*\boxheight);
+}
+
+\newcommand{\tstrongtick}[1]{
+ \draw[tboxshadow,fill=black] (current#1) +(-.04,\boxheight) rectangle +(.04,-\boxheight);
+}
+
+\newcommand{\tlighttick}[1]{
+ \draw (current#1) ++(0,\boxheight) rectangle ++(.01,-2*\boxheight);
+}
+
+\newcommand{\tlonglighttick}[1]{
+ \draw (current#1) ++(0,1.2*\boxheight) rectangle ++(.01,-2.4*\boxheight);
+}
+
+\newcommand{\tcatchup}[2]{
+ \coordinate (next#1) at (current#2|-current#1);
+ \tsetcurrent{#1}{(next#1)};
+}
+
+\newcommand{\ttextU}[2]{
+ \draw (current#1) ++(0,\boxheight) node[anchor=south] {#2};
+}
+
+\newcommand{\ttextL}[2]{
+ \draw (current#1) ++(0,-\boxheight) node[anchor=north] {#2};
+}
+
+\newcommand{\ttextM}[2]{
+ \draw (current#1) node {#2};
+}
+
+\newcommand{\tcalloutU}[3][(0,1)]{
+ \draw (current#2) ++#1
+ node[anchor=south,callout absolute pointer={(current#2)++(0,\boxheight)}, tcallout] {#3};
+}
+
+\newcommand{\ttextarrowU}[3][++(0, .5)]{
+ \path (current#2) ++(0,\boxheight) ++(0,.015) coordinate (tmpcurrentU);
+ \draw[black] (current#2) ++(0,\boxheight) #1
+ node[anchor=south,inner sep=.1](tmptext) {#3};
+ \draw[->] (tmptext) -- (tmpcurrentU);
+}
+
+\newcommand{\tstartbrace}[1]{
+ \coordinate (startbrace#1) at (current#1);
+}
+
+\newcommand{\tendbrace}[2]{
+ \coordinate (endbrace#1) at (current#1);
+ \draw[decoration={brace,amplitude=1.5mm},decorate] (endbrace#1) -- node[below]{#2} (startbrace#1);
+}
+
+\newcommand{\tcalloutL}[3][(0,-1)]{
+ \draw (current#2) ++#1
+ node[anchor=north,callout absolute pointer={(current#2)++(0,-\boxheight)}, tcallout] {#3};
+}
+
+\newcommand{\tarrowLU}[3]{
+ \tarrowCoord{(current#1U)}{(current#2L)}{#3}
+}
+\newcommand{\tarrowUL}[3]{
+ \tarrowCoord{(current#1L)}{(current#2U)}{#3}
+}
+
+\newcommand{\tarrowCoord}[3]{
+ \coordinate (tmp1) at #1;
+ \coordinate (tmp2) at #2;
+ \coordinate (tmpmid1) at (barycentric cs:tmp1=.2,tmp2=.8);
+ \coordinate (tmpmid2) at (barycentric cs:tmp1=.8,tmp2=.2);
+ \coordinate (tmpmid) at (barycentric cs:tmp1=.5,tmp2=.5);
+ \draw[tarrow] (tmp1) .. controls (tmp1 |- tmpmid1) and (tmpmid2 -| tmp2) .. (tmp2);
+ \ifthenelse{\equal{#3}{}}{}{
+ \draw (tmpmid) node[shape=circle,fill=white,draw=black] {#3};
+ }
+}
diff --git a/graphics/pgf/contrib/timing-diagrams/version.txt b/graphics/pgf/contrib/timing-diagrams/version.txt
new file mode 100644
index 0000000000..ccfb35da50
--- /dev/null
+++ b/graphics/pgf/contrib/timing-diagrams/version.txt
@@ -0,0 +1,2 @@
+timing-diagrams version 49848df99a682363391ca8effe072280d9f2dd84.
+Commited on Wed Aug 21 14:29:45 2013 +0200.
diff --git a/graphics/pgf/contrib/tipfr/README b/graphics/pgf/contrib/tipfr/README
new file mode 100644
index 0000000000..00a6e91a58
--- /dev/null
+++ b/graphics/pgf/contrib/tipfr/README
@@ -0,0 +1,22 @@
+************* Fichier README pour tipfr.sty **********************
+
+Objectif
+-----
+Cette extension utilise TikZ pour dessiner des touches de
+calculatrice, des item de menus, le contenu d'écrans graphiques ainsi que une calculatrice en grand ou petit format.
+
+Licence
+-------
+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.
+
+Documentation
+-------------
+La documentation de l'extension se trouve dans le répertoire /doc/.
+
+Merci d'utiliser tipfr.sty.
+
+Philippe De Sousa
+Evry (91), France
+philou.desousa@gmail.com
diff --git a/graphics/pgf/contrib/tipfr/doc/IndexHead.ist b/graphics/pgf/contrib/tipfr/doc/IndexHead.ist
new file mode 100644
index 0000000000..dc83e642d7
--- /dev/null
+++ b/graphics/pgf/contrib/tipfr/doc/IndexHead.ist
@@ -0,0 +1,10 @@
+headings_flag 1
+heading_prefix "\n \\item {\\fontfamily{pzc}\\large\\selectfont\\qquad{} "
+heading_suffix "}"
+symhead_positive "Symboles"
+symhead_negative "symboles"
+numhead_positive "Nombres"
+numhead_negative "nombres"
+delim_0 " \\dotfill\\ "
+delim_1 " \\dotfill\\ "
+delim_2 " \\dotfill\\ "
diff --git a/graphics/pgf/contrib/tipfr/doc/tipfr-doc.pdf b/graphics/pgf/contrib/tipfr/doc/tipfr-doc.pdf
new file mode 100644
index 0000000000..c725d633c8
--- /dev/null
+++ b/graphics/pgf/contrib/tipfr/doc/tipfr-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tipfr/doc/tipfr-doc.tex b/graphics/pgf/contrib/tipfr/doc/tipfr-doc.tex
new file mode 100644
index 0000000000..b1a6d8ae7a
--- /dev/null
+++ b/graphics/pgf/contrib/tipfr/doc/tipfr-doc.tex
@@ -0,0 +1,897 @@
+\documentclass[10pt,french,a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{mathpazo}
+\usepackage[euler-digits]{eulervm}
+\usepackage[dvipsnames,table]{xcolor}
+\usepackage{tipfr}
+\usepackage[margin=2cm]{geometry}
+\usepackage{tabularx,titlesec}
+\usepackage{babel}
+\usepackage[pdfborder={0 0 0},bookmarksnumbered,pdfpagelabels]{hyperref}
+\usepackage{tcolorbox}
+\tcbuselibrary{listingsutf8,documentation}
+\tcbset{color key=blue,color value=ForestGreen,index colorize=true,doclang/keys=options,doclang/key=option,doclang/values=valeurs,doclang/value=valeur}
+\usepackage{makeidx}
+\makeindex
+
+\makeatletter
+\newcommand*{\Spec@nostar}{Cette option s'applique également aux touches spéciales}
+\newcommand*{\Spec@star}{Cette option ne s'applique pas aux touches spéciales}
+\newcommand*\Speciale{\@ifstar{\Spec@star}{\Spec@nostar}}
+\makeatother
+
+%%% FORMAT SECTIONS DE mathbook.cls de Stéphane PASQUET
+
+% couleurs section
+\definecolor{section@title@color}{cmyk}{1,0.2,0.3,0.1}
+\definecolor{subsection@title@color}{cmyk}{0,0.6,0.9,0}
+\definecolor{shadow@color}{cmyk}{.07,0,0,0.49}
+% fontes section
+\def\sectiontitle@font{\fontfamily{ugq}\selectfont}
+\def\subsectiontitle@font{\fontfamily{ugq}\selectfont}
+% Décalages numéro de sections / titres des sections
+\newlength\decalnumsec
+\newlength\decalnumsubsec
+\setlength{\decalnumsec}{-0.5em}
+\setlength{\decalnumsubsec}{-0.5em}
+\newlength\decalxtitlesubsec
+\setlength{\decalxtitlesubsec}{\parindent}
+% Espace entre le numéro de section et le titre
+\newlength\spacetitlesec
+\newlength\spacetitlesubsec
+\setlength{\spacetitlesec}{0.5em}
+\setlength{\spacetitlesubsec}{0.2em}
+
+%%%%%%%%%%%%% Titre de section
+
+\renewcommand{\thesection}{\Roman{section}}
+\titleformat{\section}[block]
+{%
+ \bfseries\Large
+ \color{section@title@color}
+ \sectiontitle@font
+}
+{
+\raisebox{\decalnumsec}
+{%
+\begin{tikzpicture}
+\node (numsec) {\sectiontitle@font\thesection};
+\fill[rounded corners=2pt,fill=shadow@color] ($(numsec.north west)+(2pt,-2pt)$) -- ($(numsec.north east)+(1mm,0mm)+(2pt,-2pt)$) -- ($(numsec.south east)+(2pt,-2pt)$) -- ($(numsec.south west)+(-1mm,0)+(2pt,-2pt)$) -- cycle;
+\fill[rounded corners=2pt,fill=section@title@color] (numsec.north west) -- ($(numsec.north east)+(1mm,0mm)$) -- (numsec.south east) -- ($(numsec.south west)+(-1mm,0)$) -- cycle;
+\node[white] at (numsec) {\sectiontitle@font\thesection};
+\end{tikzpicture}
+}
+}
+{\spacetitlesec}
+{}
+
+%%%%%%%%%%%%% Titre de subsection
+
+\renewcommand{\thesubsection}{\arabic{subsection}}
+\titleformat{\subsection}[block]
+{%
+ \hspace*{\decalxtitlesubsec}
+ \bfseries\large
+ \color{subsection@title@color}
+ \subsectiontitle@font
+}
+{
+ \raisebox{\decalnumsubsec}
+ {%
+ \begin{tikzpicture}
+ \node (numsec) {\subsectiontitle@font\thesubsection};
+ \fill[rounded corners=2pt,fill=shadow@color] ($(numsec.north west)+(2pt,-2pt)$) -- ($(numsec.north east)+(1mm,0mm)+(2pt,-2pt)$) -- ($(numsec.south east)+(2pt,-2pt)$) -- ($(numsec.south west)+(-1mm,0)+(2pt,-2pt)$) -- cycle;
+ \fill[rounded corners=2pt,fill=subsection@title@color] (numsec.north west) -- ($(numsec.north east)+(1mm,0mm)$) -- (numsec.south east) -- ($(numsec.south west)+(-1mm,0)$) -- cycle;
+ \node[white] at (numsec) {\subsectiontitle@font\thesubsection};
+ \end{tikzpicture}
+ }
+}
+{%
+ \spacetitlesubsec
+}
+{%
+ %\itemclass{subsection@title@color}{\subsection@font}
+}
+
+\begin{document}
+\thispagestyle{empty}
+
+\begin{center}
+ \begin{tcolorbox}[enhanced,lifted shadow={1mm}{-2mm}{3mm}{0.1mm}{black!50!white},width=0.65\linewidth]
+ \Huge\bfseries\centering tipfr.sty
+ \end{tcolorbox}\medskip
+
+ \Calculatrice[documentation]
+
+ \today, version 1.5\medskip
+
+ Philippe \bsc{De Sousa} (\href{mailto:philou.desousa@gmail.com}{philou.desousa@gmail.com})
+\end{center}
+
+\begin{abstract}
+ Travaillant en lycée, je suis souvent amené à travailler avec les élèves sur une calculatrice graphique. La technologie d'aujourd'hui nous permet de vidéo-projeter la calculatrice et manipuler en même temps que les élèves pour leur montrer les différentes fonctionnalités de toutes les touches.\par
+ Mais une fois chez eux, comment se souvenir de ce qui a été fait en classe ?\par
+ J'ai créé ce package en m'appuyant sur un modèle de calculatrice répandu dans mon lycée afin de constituer des fiches méthodes que les élèves pourront utiliser à la maison et conserver d'année en année.
+\end{abstract}
+
+\tableofcontents
+\vspace*{2cm}
+
+\section{Les touches}
+
+\subsection{Dessiner une touche}
+
+\begin{docCommand}{Touche}{\oarg{options}}
+ Voici la commande qui fournit tous les dessins de touche. L'appel à la commande \cs{Touche} sans aucune option réalise la touche $\sin$ par défaut.
+\end{docCommand}
+
+\begin{dispExample*}{sidebyside}
+\Touche
+\end{dispExample*}
+
+Pour obtenir d'autres types de touches, on utilise alors différentes options auxquelles on spécifie une valeur :
+
+\begin{docKey}{style}{=\meta{text}}{valeur par défaut : \docValue{function}}
+Crée un dessin de touche selon le style précisé. Les différentes valeurs sont :
+\end{docKey}
+\begin{description}
+ \item[\docValue{function}] dessine une touche noire pour les différentes fonctions de la calculatrice ;
+ \item[\docValue{number}] dessine une touche blanche un peu plus grosse que les précédentes pour indiquer les chiffres ;
+ \item[\docValue{operation}] dessine des touches grises pour les opérations ;
+ \item[\docValue{graph}] dessine des touches grises plus fines que les précédentes pour les options liées aux dessins de graphiques de la calculatrice ;
+ \item[\docValue{second}] dessine la touche spéciale \textit{2nde} qui permet d'accéder aux fonctions secondaires des touches de la calculatrice ;
+ \item[\docValue{alpha}] dessine la touche spéciale \textit{alpha} qui permet d'accéder aux fonctions alphabétiques des touches de la calculatrice ;
+ \item[\docValue{on}] dessine la touche spéciale \textit{on/off} ;
+ \item[\docValue{enter}] dessine la touche spéciale \textit{entrer} qui permet d'évaluer un résultat ;
+ \item[\docValue{arrows}] dessine la touche spéciale qui représente les quatres flèches de la calculatrice.
+\end{description}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Touche[style=function]
+\Touche[style=number]
+\Touche[style=operation]
+\Touche[style=graph]
+\Touche[style=second]
+
+\Touche[style=alpha]
+\Touche[style=enter]
+\Touche[style=on]
+\Touche[style=arrows]
+\end{dispExample*}
+
+Hormis pour les touches spéciales, on constate que la valeur principale par défaut est $\sin$. De plus, la touche graphique nous montre un problème d'alignement. Des options ont donc été créées pour apporter une solution :
+
+\begin{docKey}{principal}{=\meta{text}}{valeur par défaut : \docValue{sin}}
+Précise le \meta{text} à mettre à l'intérieur d'une touche. \Speciale* sauf la touche spéciale \docValue{enter}. Une fois encore on constate un problème de positionnement.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Touche[style=function, principal={\large ,}]
+\Touche[style=number, principal=2]
+\Touche[style=operation, principal=$\times$]
+\Touche[style=graph,principal=$f(x)$]
+\Touche[style=enter, principal={=}]
+\end{dispExample*}
+
+La commande \cs{Circonflexe} a été créée pour dessiner un grand accent circonflexe : \Circonflexe
+
+\begin{dispExample*}{sidebyside}
+\Touche[style=function, principal=\Circonflexe]
+\end{dispExample*}
+
+\begin{docKey}{position}{=\meta{nombre}}{valeur par défaut : \docValue{0.7}}
+Permet d'ajuster la position du texte principal à l'intérieur de la touche. \Speciale.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Touche[style=on]
+\Touche[style=on, position = 0.1]
+
+\Touche[style=graph,principal=$f(x)$]
+\Touche[style=graph,principal=$f(x)$, position = 0.9]
+
+\Touche[style=enter, principal={\large =}]
+\Touche[style=enter, principal={\large =}, position = 0.35]
+\end{dispExample*}
+
+\begin{docKey}{raise}{=\meta{dim}}{valeur par défaut : \docValue{0ex}}
+Permet d'ajuster la hauteur de la touche par rapport à la ligne de base. Les valeurs négatives sont autorisées. \Speciale.
+\end{docKey}
+
+\noindent\begin{minipage}[t]{0.48\linewidth}
+Hauteurs non modifiées\par
+\begin{dispExample*}{center lower}
+\Touche[style=graph,principal=$f(x)$, position = 0.9]
+\Touche[style=number, principal=3]
+\Touche[style=operation, principal=$\times$]
+\Touche[style=function, principal={$x,t,\theta,n$}]
+\Touche[style=enter, principal=entrer]
+\end{dispExample*}
+\end{minipage}\hfill
+\begin{minipage}[t]{0.48\linewidth}
+Hauteurs modifiées\par
+\begin{dispExample*}{center lower}
+\Touche[style=graph,principal=$f(x)$, position = 0.9]
+\Touche[style=number, principal=3, raise=1.5ex]
+\Touche[style=operation, principal=$\times$, raise=2ex]
+\Touche[style=function, principal={$x,t,\theta,n$}, raise=2ex]
+\Touche[style=enter, principal=entrer, raise=0.5ex]
+\end{dispExample*}
+\end{minipage}
+
+\begin{docKey}{fontsize}{=\meta{dim}}{valeur par défaut : \docValue{8pt}}
+ L'exemple précédent montre cette fois un débordement horizontal. L'option \docAuxKey{fontsize} permet de modifier ponctuellement la taille de la fonte utilisée dans la touche. \Speciale.
+\end{docKey}
+\begin{dispExample*}{sidebyside}
+\Touche[style=function, principal={$x,t,\theta,n$}]
+\Touche[style=function, principal={$x,t,\theta,n$},fontsize=6pt]
+\end{dispExample*}
+\bigskip
+
+Les touches ne sont pas uniquement composées de leur fonction principale. Parfois, elles possèdent une fonction secondaire appelée à l'aide de la touche \Touche[style=second,raise=-1ex] et parfois même une fonction alphabétique appelée à l'aide de la touche \Touche[style=alpha,raise=-1ex].
+
+\begin{docKey}{second}{=\meta{text}}{\sffamily fonction inactive par défaut}
+ \'Ecrit en bleu une fonction secondaire au dessus de la touche. Lorsque l'option \docAuxKey{second} est spécifié sans l'option \docAuxKey{alpha} alors le \meta{text} est centré au dessus de la touche. \Speciale* sauf la touche spéciale \docValue{enter}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Touche[principal={suppr}, second={insérer}, position=0.65]
+\end{dispExample*}
+
+\begin{docKey}{alpha}{=\meta{text}}{\sffamily fonction inactive par défaut}
+ \'Ecrit en vert une fonction alphabétique au dessus de la touche. Lorsque l'option \docAuxKey{alpha} est spécifié sans l'option \docAuxKey{second} alors rien n'est affiché. En effet, sur la calculatrice prise en modèle, il n'existe aucune touche possédant une fonction alphabétique sans avoir de fonction secondaire. \Speciale* sauf la touche spéciale \docValue{enter}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Touche[style=graph, principal=$f(x)$,second={gr.stats}, alpha=f1, position=0.95, fontsize=7pt]\quad
+\Touche[style=number, principal={7}, second={$u_n$}, alpha={O}]\quad
+\Touche[style=number, principal={7}, alpha={O}]
+\Touche[style=enter,fontsize=7pt, principal=entrer, second=préc, alpha=résol]
+\end{dispExample*}
+
+L'option \docAuxKey{fontsize} est ici spécifiée afin de permettre au texte secondaire et au texte alphabétique de cohabiter et d'éviter une \textit{badbox}.\bigskip
+
+La commande \cs{Racine} a été créée pour dessiner une racine carré : \Racine
+
+\begin{dispExample*}{sidebyside}
+\Touche[principal={$x^2$}, second={\Racine}, alpha={I}]
+\end{dispExample*}
+
+\subsection{Entourer une touche}
+
+\begin{docKey}{circle}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Permet d'entourer la touche à l'aide d'un cercle dont on peut alors préciser le rayon, l'épaisseur et la couleur. \Speciale\ sauf pour le style \docValue{arrows} qui bénéficie d'un traitement particulier.
+\end{docKey}
+
+\begin{docKey}{radius}{=\meta{dim}}{valeur par défaut : \docValue{20pt}}
+ On spécifie ici le rayon du cercle qui ne sera pris en compte que si \docAuxKey{circle}=\docValue{true}.
+\end{docKey}
+
+\begin{docKey}{colour}{=\meta{colour}}{valeur par défaut : \docValue{red}}
+ On spécifie ici la couleur du cercle qui ne sera prise en compte que si \docAuxKey{circle}=\docValue{true}. L'option \docAuxKey{color} est également possible.
+\end{docKey}
+
+\begin{docKey}{thickness}{=\meta{dim}}{valeur par défaut : \docValue{1pt}}
+ On spécifie ici l'épaisseur du cercle qui ne sera prise en compte que si \docAuxKey{circle}=\docValue{true}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Touche[principal={$x,t,\theta,n$}, second={échanger}, fontsize=7pt, position=0.8, circle=true]
+\Touche[style=enter,fontsize=7pt, principal=entrer, second=préc, alpha=résol, circle=true, thickness=0.5pt, colour=blue, radius=25pt]
+\end{dispExample*}
+
+\subsection{Touches flèches}
+
+Les touches flèches ont un statut bien particulier qui leur permet d'avoir des commandes qui leur sont spécifiques.
+
+\begin{docKey}{fixed}{\docValue*{=true|false}}{valeur par défaut : \docValue{true}}
+ Les flèches sont dessinées à l'endroit même où la commande est appelée. Si on a spécifié \docAuxKey{fixed}=\docValue{false} alors les flèches vont pouvoir se déplacer sur la page.
+\end{docKey}
+
+\begin{docKey}{xoffset}{=\meta{dim}}{valeur par défaut : \docValue{0cm}}
+ Permet de déplacer la touche horizontalement.
+\end{docKey}
+
+\begin{docKey}{yoffset}{=\meta{dim}}{valeur par défaut : \docValue{0cm}}
+ Permet de déplacer la touche verticalement.
+\end{docKey}
+
+\begin{docKey}{scalearrows}{=\meta{nombre}}{valeur par défaut : \docValue{0.25}}
+ Permet de modifier la taille de la touche.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+Il faut donc appuyer sur les\Touche[style=arrows, raise=-0.15cm, scalearrows=0.25] pour voir les autres options du menu.
+\end{dispExample*}
+
+\begin{dispExample*}{sidebyside}
+Les flèches\Touche[style=arrows, fixed=false, xoffset=4.5cm, scalearrows=0.5] ont disparu ! Ah non, les voilà :
+
+Attention, des flèches non fixées \Touche[style=arrows, fixed=false, scalearrows=0.5] se superposent au texte !
+\end{dispExample*}
+
+Les options de décalage ont été utilisées pour positionner les flèches sur la calculatrice de la première page.
+
+\begin{docKey}{arrowtot}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Cette option permet d'entourer la touche flèches entièrement.
+\end{docKey}
+
+\begin{docKey}{arrowup}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Cette option permet d'entourer la flèche du haut.
+\end{docKey}
+
+\begin{docKey}{arrowdown}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Cette option permet d'entourer la flèche du bas.
+\end{docKey}
+
+\begin{docKey}{arrowleft}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Cette option permet d'entourer la flèche de gauche.
+\end{docKey}
+
+\begin{docKey}{arrowright}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Cette option permet d'entourer la flèche de droite.
+\end{docKey}
+
+Comme pour les autres touches, les options \docAuxKey{thickness} et \docAuxKey{colour} peuvent être employées. En revanche, le rayon du cercle est fixé.
+
+\begin{dispExample*}{sidebyside}
+\Touche[style=arrows, arrowtot=true, scalearrows=0.5]
+\Touche[style=arrows, arrowleft=true, scalearrows=0.5]
+\Touche[style=arrows, arrowup=true, scalearrows=0.5]
+\end{dispExample*}
+
+\subsection{Nommer une touche}\label{subsec:NomTouche}
+
+\begin{docKey}{name}{=\meta{text}}{valeur par défaut : \docValue{NOM}}
+ La touche sera référencée à l'aide d'un n{\oe}ud nommé \meta{text}.
+\end{docKey}
+
+\begin{dispExample}
+Pour obtenir le nombre $\pi$ à la calculatrice, on utilise la séquence suivante :
+\begin{center}
+ \Touche[style=second]
+ \Touche[principal={\Circonflexe},second={$\pi$},alpha={H},name=PI]
+\end{center}
+\begin{tikzpicture}[overlay, remember picture, >=latex']
+ \draw[red, line width=1pt] ($(PI)+(-0.5,0.2)$) circle (7pt);
+ \draw[blue, line width=0.5pt, <-, rounded corners=10pt]
+ ($(PI)+(-0.6,-0.05)$) |- ($(PI)+(0.5,-0.7)$)
+ node[right] {La lettre $\pi$ apparaît ici};
+\end{tikzpicture}
+\end{dispExample}
+
+Les touches sont définies au sein d'un environnement \texttt{tikzpicture}. Afin de pouvoir s'y référer à l'intérieur d'un autre environnement de ce type, il faudra penser à utiliser les options \texttt{overlay} et \texttt{remember picture}. De plus, au minimum deux compilations seront nécessaires.
+
+
+
+\section{Créer des menus}
+
+En plus des différentes touches de la calculatrice, on pourra parler aux élèves des menus affichés par la calculatrice
+
+\begin{docCommand}{Menu}{\oarg{options}\marg{nom}}
+ Cette commande écrit \meta{nom} en majuscule dans une fonte à chasse fixe de type {\ttfamily machine à écrire} pour nommer un menu de calculatrice. Ce nom est enfermé dans une boîte à fond blanc exactement à sa taille.
+\end{docCommand}
+
+\begin{dispExample*}{sidebyside}
+\Menu{Math} \Menu{num} \Menu{cpx} \Menu{prb}
+\end{dispExample*}
+
+La taille peut être modifiée à l'aide de l'option suivante
+
+\begin{docKey}{size}{=\meta{dim}}{valeur par défaut : \docValue{15pt}}
+ Si l'unité de mesure n'est pas spécifié dans \meta{dim}, alors le \texttt{pt} sera utilisé par défaut.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Menu[size=1cm]{Math}
+\Menu{num}
+\Menu[size=8]{cpx}
+\Menu[size=8pt]{prb}
+\end{dispExample*}
+
+\begin{docKey}{select}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Permet d'écrire le nom du menu en blanc sur fond noir pour signifier qu'il est sélectionné.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Menu{Math} \Menu{num}
+\Menu[select=true]{cpx}
+\Menu{prb}
+\end{dispExample*}
+
+\begin{docKey}{colourbox}{=\meta{colour}}{valeur par défaut : \docValue{white}}
+ Détermine la couleur la boîte contenant le texte du menu lorsque celui-ci \textit{n'est pas} sélectionné. L'option \docAuxKey{colorbox} est autorisée.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Menu{Math} \Menu{num}
+\Menu[select=true]{cpx}
+\Menu[colourbox=red]{prb}
+\end{dispExample*}
+
+\begin{docKey}{text}{=\meta{text}}{valeur par défaut : \docValue{\symbol{92}unskip}}
+ Cette dernière option permet de spécifier si un texte doit être écrit à côté du nom du menu. Pratique pour les menus sous forme de listes verticales. Le \meta{text} est sensible à l'option \docAuxKey{size}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Menu[size=10pt, text={$\blacktriangleright$Frac}]{1 :}\par
+\Menu[size=10pt, select=true, text={$\blacktriangleright$Dec}(]{2 :}\par
+\Menu[size=10pt, text=\up{3}]{3 :}
+\end{dispExample*}
+
+Voilà par exemple les quatres menus disponibles avec la touche \Touche[principal={math},second={tests},alpha={A},position=0.8,raise=-1ex] :
+\begin{center}\renewcommand\tabcolsep{-7pt}
+ \begin{tabular}{*{4}{llll|}}
+ \Menu[size=10,select=true]{Maths} & \Menu[size=10]{num} & \Menu[size=10]{cpx} & \Menu[size=10]{prb} &
+ \Menu[size=10]{Maths} & \Menu[size=10,select=true]{num} & \Menu[size=10]{cpx} & \Menu[size=10]{prb} &
+ \Menu[size=10]{Maths} & \Menu[size=10]{num} & \Menu[size=10,select=true]{cpx} & \Menu[size=10]{prb} &
+ \Menu[size=10]{Maths} & \Menu[size=10]{num} & \Menu[size=10]{cpx} & \Menu[size=10,select=true]{prb} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\Menu[select=true, size=9, text={$\blacktriangleright$Frac}]{1 :}} &
+ \multicolumn{4}{l|}{\Menu[select=true, size=9, text=abs(]{1 :}} &
+ \multicolumn{4}{l|}{\Menu[select=true, size=9, text=conj(]{1 :}} &
+ \multicolumn{4}{l|}{\Menu[select=true, size=9, text=NbrAléat]{1 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\Menu[size=9, text={$\blacktriangleright$Dec}(]{2 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=arrondi(]{2 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=réel(]{2 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=Arrangement]{2 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\Menu[size=9, text=\up{3}]{3 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=ent(]{3 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=imag(]{3 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=Combinaison]{3 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\Menu[size=9, text={$^{\text{3}}\sqrt{\phantom x}$(}]{4 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=partDéc(]{4 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=argument(]{4 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=!]{4 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\Menu[size=9, text={$^{\text{x}}\sqrt{\phantom x}$}]{5 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=partEnt(]{5 :}}&
+ \multicolumn{4}{l|}{\Menu[size=9, text=abs(]{5 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=entAléat(]{5 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\Menu[size=9, text={$\times$fMin(}]{6 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=min(]{6 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text={$\blacktriangleright$Rect}]{6 :}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=normAléat(]{6 :}} \\[-8pt]
+%
+ \multicolumn{4}{l|}{\Menu[size=9, text={$\times$fMax(}]{7 $\downarrow$}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=max(]{7 $\downarrow$}}&
+ \multicolumn{4}{l|}{\Menu[size=9, text={$\blacktriangleright$Polaire}]{7 $\downarrow$}} &
+ \multicolumn{4}{l|}{\Menu[size=9, text=BinAléat(]{7 $\downarrow$}}
+ \end{tabular}
+\end{center}
+
+
+\section{Afficher un écran}
+\subsection{Généralités}
+
+\begin{docCommand}{Ecran}{\oarg{options}\marg{arguments}}
+ Cette commande permet d'afficher un écran de calculatrice.
+\end{docCommand}
+
+\begin{dispExample*}{center lower}
+\Ecran{}
+\end{dispExample*}
+
+On peut modifier l'aspect général à l'aide des options suivantes :
+
+\begin{docKey}{screencolour}{=\meta{colour}}{valeur par défaut : \docValue{ForestGreen}\docValue*{!15}}
+ Détermine la couleur de fond de l'écran. \docAuxKey{screencolor} est également possible.
+\end{docKey}
+
+\begin{docKey}{screenname}{=\meta{text}}{valeur par défaut : \docValue{ecran}}
+ Donne un nom à l'écran afin de pouvoir s'y référencer plus tard avec des environnements \texttt{tikzpicture}. Les mêmes précautions que pour les touches doivent être prises (voir sous-section \ref{subsec:NomTouche} page \pageref{subsec:NomTouche}).
+\end{docKey}
+
+\begin{docKey}{width}{=\meta{number}}{valeur par défaut : \docValue{8}}
+Permet de fixer la longueur de l'écran. L'unité de mesure est le \texttt{cm}.
+\end{docKey}
+
+\begin{docKey}{height}{=\meta{number}}{valeur par défaut : \docValue{5}}
+Permet de fixer la largeur de l'écran. L'unité de mesure est le \texttt{cm}.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[width=3, height=2, screenname=first]{}
+\Ecran[width=3, height=2, screencolour=blue!50, screenname=second]{}
+\tikz[remember picture, overlay]{\draw (first.center) circle (5pt);}
+\tikz[remember picture, overlay]{\draw (second.north west) -- (second.south east);}
+\end{dispExample*}
+
+\subsection{\'Ecran de calculs}
+
+\begin{docCommand}{Ecran}{\oarg{options}\marg{expression/résultat}}
+ C'est l'écran par défaut. Il n'existe pas d'options supplémentaires que celles de la sous-section précédente. L'argument obligatoire est une liste de couples \meta{expression/résultat} séparés par une virgule.\par
+ On peut ne rien écrire à la place de \meta{expression} ou \meta{résultat} mais, dans ce cas, il ne faut pas mettre d'espace non plus. Les deux peuvent être laissés vides mais alors rien ne se passe (pas de création de ligne vide).\par
+ On pensera à utiliser des accolades si l'expression ou le résultat utilise les symboles \texttt{,} ou \texttt{/}.
+\end{docCommand}\bigskip
+
+\noindent Voilà un premier exemple un peu long qui utilise la commande \cs{Menu} :\smallskip
+
+\begin{dispExample*}{center lower}
+\Ecran[width=6,height=3]{
+{\renewcommand\tabcolsep{-7pt}
+\begin{tabular}{llll}
+\Menu[size=10,select=true]{Maths} & \Menu[colourbox={ForestGreen!15}, size=10]{num} & \Menu[colourbox={ForestGreen!15}, size=10]{cpx} & \Menu[colourbox={ForestGreen!15}, size=10]{prb} \\[-8pt]
+\multicolumn{4}{l}{\Menu[select=true, size=9, text={$\blacktriangleright$Frac}]{1 :}} \\[-8pt]
+\multicolumn{4}{l}{\Menu[colourbox={ForestGreen!15}, size=9, text={$\blacktriangleright$Dec}(]{2 :}} \\[-8pt]
+\multicolumn{4}{l}{\Menu[colourbox={ForestGreen!15}, size=9, text=\up{3}]{3 :}} \\[-8pt]
+\multicolumn{4}{l}{\Menu[colourbox={ForestGreen!15}, size=9, text={$^{\text{3}}\sqrt{\phantom x}$(}]{4 :}} \\[-8pt]
+\multicolumn{4}{l}{\Menu[colourbox={ForestGreen!15}, size=9, text={$^{\text{x}}\sqrt{\phantom x}$}]{5 :}} \\[-8pt]
+\multicolumn{4}{l}{\Menu[colourbox={ForestGreen!15}, size=9, text={$\times$fMin(}]{6 :}} \\[-8pt]
+\multicolumn{4}{l}{\Menu[colourbox={ForestGreen!15}, size=9, text={$\times$fMax(}]{7 $\downarrow$}}
+\end{tabular}
+}/
+}
+\end{dispExample*}
+
+\noindent Les exemples suivants sont plus courts :\medskip
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[screencolour=blue!10, height=3, width=7]%
+{{sin(5$\pi$/3)\up 2}/0.75,
+3+2/5,
+/,
+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+%
+$\blacktriangleright$/5050}
+\end{dispExample*}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[height=4, width=4]%
+{
+PROGRAM:DISTANCE/,
+{:Input "XA=",A}/,
+{:Input "YA=",B}/,
+{:Input "XB=",C}/,
+{:Input "YB=",D}/,
+{:$\sqrt{\:}$((A-C)\up2+(B-D)\up2)$\to$L}/,
+{:Disp "AB=",L}/
+}
+\end{dispExample*}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[height=4,width=4]%
+{
+prgmDISTANCE/,
+XA=4/,
+YA=-1/,
+XB=1/,
+YB=3/,
+AB=/,
+/5,
+/Done
+}
+\end{dispExample*}
+
+\subsection{\'Ecran de graphiques}
+
+\begin{docKey}{graphic}{\docValue*{=true|false}}{valeur par défaut : \docValue{false}}
+ Cette option là permet de basculer d'un affichage dédié aux calculs à un affichage prévu pour les graphiques. On voit d'ailleurs apparaître des axes gradués.
+\end{docKey}%
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[width=6, height=4, graphic=true]{}
+\end{dispExample*}
+
+\begin{docKey}{xgrad}{=\meta{number}}{valeur par défaut : \docValue{0.5}}
+ Détermine l'unité de longueur en \texttt{cm} pour une unité sur l'axe des abscisses.
+\end{docKey}
+
+\begin{docKey}{ygrad}{=\meta{number}}{valeur par défaut : \docValue{0.5}}
+ Détermine l'unité de longueur en \texttt{cm} pour une unité sur l'axe des ordonnées.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[width=6, height=4, graphic=true, xgrad=0.25, ygrad=1]{}
+\end{dispExample*}
+
+On constate que, selon l'unité choisie, le nombre de graduations peut être insuffisant.
+
+\begin{docKey}{nbgradx}{=\meta{number}}{valeur par défaut : \docValue{8}}
+ Modifie le nombre de graduations sur un \textbf{demi}-axe des abscisses. Le nombre total de graduations est donc doublé.\par
+ Cependant, la première graduation est tracée à l'origine donc n'est pas visible (car recouverte par l'axe des ordonnées). De même, il se peut qu'une graduation se retrouve exactement sur un bord de l'écran.
+\end{docKey}
+
+\begin{docKey}{nbgrady}{=\meta{number}}{valeur par défaut : \docValue{5}}
+ Modifie le nombre de graduations sur un \textbf{demi}-axe des ordonnées. Le nombre total de graduations est donc doublé.\par
+ Cependant, la première graduation est tracée à l'origine donc n'est pas visible (car recouverte par l'axe des abscisses). De même, il se peut qu'une graduation se retrouve exactement sur un bord de l'écran.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[width=6, height=4, graphic=true, xgrad=0.25, nbgradx=13, ygrad=1, nbgrady=40]{}
+\end{dispExample*}
+
+\begin{docKey}{origin}{=\meta{coordonnées}}{valeur par défaut : \docValue{\meta{screenname}.center}}
+ Modifie l'origine du repère. Celui-ci est utilisé pour tracer les axes gradués mais aussi les courbes. Pour information, le coin inférieur gauche de l'écran est le point \texttt{(0,0)}. Rappelons également que {\ttfamily \meta{screenname}=ecran} par défaut.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[width=6, height=4, graphic=true, origin={(1,1)}, nbgradx=10, nbgrady=6]{}
+\end{dispExample*}
+
+\begin{docCommand}{Ecran}{\oarg{options}\marg{fonction/intervalle}}
+ Avec cet argument obligatoire, on peut dessiner plusieurs courbes représentatives de fonctions, chacune définie sur un intervalle. Pour cela, la syntaxe suivante a été utilisé :
+ \begin{center}
+ \ttfamily
+ \verb!\draw! plot[domain=\meta{intervalle}, samples=500] (\string\x, \meta{fonction});
+ \end{center}
+
+ On a donc {\ttfamily \meta{intervalle}=a:b} et {\ttfamily \meta{fonction}=f(\string\x)}. \meta{intervalle} peut être laissé vide (sans espace) et, dans ce cas, par défaut, {\ttfamily\meta{intervalle}=-6:6}.
+\end{docCommand}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[width=6, height=4, graphic=true]%
+{%
+\x/,
+\x*\x/,
+2/-3:3
+}
+\end{dispExample*}
+
+On peut modifier l'aspect des courbes. Les options suivantes sont valables pour toutes les courbes tracées et ne peuvent être individualisées.
+
+\begin{docKey}{plotcolour}{=\meta{colour}}{valeur par défaut : \docValue{blue}}
+ Modifie la couleur des courbes. L'option \docAuxKey{plotcolor} est autorisée.
+\end{docKey}
+
+\begin{docKey}{plotwidth}{=\meta{dim}}{valeur par défaut : \docValue{1pt}}
+ Modifie l'épaisseur des courbes.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[plotwidth=0.5pt, plotcolour=red, graphic=true, ygrad=2, width=6.5]%
+{
+sin(\x r)/-3*pi:3*pi,
+cos(\x r)/-2*pi:1.5*pi
+}
+\end{dispExample*}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[graphic=true, height=2.75, width=6.5, nbgradx=15, origin={(0.5,0.5)}]%
+{sqrt(\x)/0:15}
+\end{dispExample*}
+
+\begin{dispExample*}{sidebyside, center lower}
+\Ecran[width=6.5, height=2.75, graphic=true, nbgradx=15, origin={($(ecran.west)+(0.5,0)$)}]%
+{ln(\x)/0.01:15}
+\end{dispExample*}
+
+
+\section{La calculatrice}
+\subsection{Version grand format}
+
+\begin{docCommand}{Calculatrice}{\oarg{titre optionnel}}
+ Cette commande permet d'afficher la calculatrice en entier. Chaque touche a été nommée individuellement pour pouvoir s'y référer.
+\end{docCommand}
+
+Le tableau ci-dessous montre le nom attribué à chacune des touches avec la commande \cs{Calculatrice}.\bigskip
+
+\noindent\renewcommand\arraystretch{2}%
+\begin{tabularx}{\linewidth}{>{\bfseries}c *{8}{>{\centering\arraybackslash} X}}
+ \hline
+ Touche & \Touche[style=graph,principal=$f(x)$,second={gr.stats},alpha=f1,position=0.95,fontsize=7pt,raise=-2ex] &
+ \Touche[style=graph,principal={fenêtre},second=déf tab,alpha=f2,position=0.95,fontsize=7pt,raise=-2.2ex] &
+ \Touche[style=graph,principal={zoom},second={format},alpha={f3},position=0.95,fontsize=7pt,raise=-2.2ex] &
+ \Touche[style=graph,principal={trace},second={calculs},alpha={f4},position=0.95,fontsize=7pt,raise=-2.2ex] &
+ \Touche[style=graph,principal={graphe},second={table},alpha={f5},position=0.95,fontsize=7pt,raise=-2.2ex] &
+ \Touche[style=second] &
+ \Touche[style=alpha,name=ALPHA] &
+ \Touche[principal={suppr},second={insérer},position=0.65]\\
+ \hline
+ Nom & FX & FEN & ZOOM & TRC & GRA & SCD & ALPHA & SUP \\
+%
+ \hline\hline
+%
+ Touche & \Touche[principal={mode},second={quitter},position=0.8] &
+ \Touche[principal={$x,t,\theta,n$},second={échanger},fontsize=7pt,position=0.8] &
+ \Touche[principal={stats},second={listes}] &
+ \Touche[principal={maths},second={tests},alpha={A},position=0.8] &
+ \Touche[principal={\textcolor{purple}{apps}},second={angle},alpha={B},position=0.7] &
+ \Touche[principal={prgm},second={dessin},alpha={C},position=0.7] &
+ \Touche[principal={var},second={distrib}] &
+ \Touche[principal={annul}]\\
+ \hline
+ Nom & MODE & XTN & STATS & MAT & APPS & PRGM & VAR & ANN \\
+%
+ \hline\hline
+%
+ Touche & \Touche[principal={$x^{-1}$},second={matrice},alpha={D},fontsize=7pt] &
+ \Touche[principal={sin},second={arcsin},alpha={E}] &
+ \Touche[principal={cos},second={arccos},alpha={F}] &
+ \Touche[principal={tan},second={arctan},alpha={G}] &
+ \Touche[principal={\Circonflexe},second={$\pi$},alpha={H}] &
+ \Touche[principal={$x^2$},second={\Racine},alpha={I}] &
+ \Touche[principal={\large ,},second={EE},alpha={J}] &
+ \Touche[principal={log},second={$10^x$},alpha={N}] \\
+ \hline
+ Nom & INV & SIN & COS & TAN & POW & CARRE & VIRG & LOG\\
+%
+ \hline\hline
+%
+ Touche & \Touche[principal={ln},second={e$^x$},alpha={S},name=LN] &
+ \Touche[principal={(},second={\{},alpha={K}] &
+ \Touche[principal={)},second={\}},alpha={L}] &
+ \Touche[principal={sto$\to$},second={rappel},alpha={X},name=STO] &
+ \Touche[style=operation,principal={$\div$},second={e},alpha={M}] &
+ \Touche[style=operation,principal={$\times$},second={[},alpha={R}] &
+ \Touche[style=operation,principal={$-$},second={]},alpha={W},name=SUB] &
+ \Touche[style=operation,principal={+},second={mém},alpha={"},name=ADD]\\
+ \hline
+ Nom & LN & PO & PF & STO & DIV & MUL & SUB & ADD \\
+%
+ \hline\hline
+%
+ Touche & \Touche[style=number,principal={1},second={L1},alpha={Y}] &
+ \Touche[style=number,principal={2},second={L2},alpha={Z}] &
+ \Touche[style=number,principal={3},second={L3},alpha={$\theta$}] &
+ \Touche[style=number,principal={4},second={L4},alpha={T}] &
+ \Touche[style=number,principal={5},second={L5},alpha={U}] &
+ \Touche[style=number,principal={6},second={L6},alpha={V}] &
+ \Touche[style=number,principal={7},second={$u_n$},alpha={O}] &
+ \Touche[style=number,principal={8},second={$v_n$},alpha={P}] \\
+ \hline
+ Nom & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 \\
+%
+ \hline\hline
+%
+ Touche & \Touche[style=number,principal={9},second={$w_n$}] &
+ \Touche[style=number,principal={0},second={cat.},alpha={$\sqcup$}] &
+ \Touche[style=number,principal={$\centerdot$},second={$i$},alpha={:}] &
+ \Touche[style=number,principal={(--)},second={rép},alpha={?}] &
+ \Touche[style=on] &
+ \Touche[style=enter, fontsize=7pt, principal=entrer, second=préc, alpha=résol, name=ETR] &
+ \Touche[style=arrows,scalearrows=0.5] &\\
+ \hline
+ Nom & T9 & T0 & DOT & MS & ON & ETR & FLE &\\
+\end{tabularx}\label{tableau}
+
+\begin{center}\label{calculatrice}
+\Calculatrice[Structure]
+\end{center}
+\begin{tikzpicture}[overlay, remember picture]
+ \draw[red, line width=1pt,rounded corners = 5pt] ($(STO) + (0.6,-0.5)$) |-
+ ($(PF) + (0.6,-0.5)$) |-
+ ($(POW) + (0.6,-0.5)$)|-
+ ($(STATS) + (0.6,-0.5)$)|-
+ ($(MODE) + (-0.6,0.5)$)|-
+ ($(MAT) + (-0.6,0.5)$)|- cycle;
+ \path[red] ($(MAT) + (-0.6,0.5)$) -- ($(STO) + (-0.6,-0.5)$) node[left,midway] {\textbf 1};
+%
+ \draw[blue, line width=1pt,rounded corners = 5pt] ($(T0) + (-0.6,-0.7)$) -|
+ ($(T9) + (0.6,0.5)$) -| cycle;
+ \path[blue] ($(T0) + (-0.6,-0.7)$) -- ($(MS) + (0.6,-0.7)$) node[below,midway] {\textbf 2};
+%
+ \draw[Orange, line width=1pt,rounded corners = 5pt] ($(ADD) + (-0.6,-0.5)$) -|
+ ($(DIV) + (0.6,0.5)$) -| cycle;
+ \path[Orange] ($(ADD) + (0.6,-0.5)$) -- ($(DIV) + (0.6,0.5)$) node[right,midway] {\textbf 3};
+%
+ \draw[pink!200, line width=1pt,rounded corners = 5pt] ($(FX) + (-0.6,-0.4)$) -|
+ ($(GRA) + (0.6,0.5)$) -| cycle;
+ \draw[pink!200] ($ (GRA)+ (0.6,0)$) node[right] {\textbf 4};
+%
+ \draw[blue, line width=1pt,rounded corners = 5pt] ($(SCD) + (-0.6,-0.5)$) |-
+ ($(ALPHA) + (0.6,-0.5)$)|- ($(SCD) + (-0.6,0.1)$) -- cycle;
+ \path ($ (SCD)+ (-0.6,0.1)$) -- ($(ALPHA)+ (-0.6,-0.5)$) node[midway,left] {\parbox{2cm}{\raggedleft\bfseries touches spéciales}};
+%
+ \draw[red, line width=1pt] (ETR) circle (22pt) node[right=20pt] {\color{black} \parbox{3cm}{\raggedright\bfseries pour évaluer les séquences tapées}};
+%
+ \draw[red, line width=1pt] (ON) circle (20pt) node[left=25pt] {\color{black} \parbox{3cm}{\raggedleft\bfseries pour allumer et éteindre la calculatrice}};
+%
+ \draw[red, line width=1pt] (FLE) circle (1cm) node[right=1.1cm] {\color{black} \parbox{3cm}{\raggedright\bfseries pour se déplacer dans les menus}};
+ \end{tikzpicture}
+\begin{enumerate}
+ \item Touches de fonctions (le cadre a été obtenu en utilisant le code ci-dessous)
+ \item Touches numériques pour écrire les nombres décimaux
+ \item Touches pour écrire les opérations de base
+ \item Touches pour les menus graphiques
+\end{enumerate}\medskip
+
+\begin{dispListing}
+\draw[red, line width=1pt,rounded corners = 5pt]%
+ ($(STO) + (0.6,-0.5)$) |- ($(PF) + (0.6,-0.5)$) |-
+ ($(POW) + (0.6,-0.5)$) |- ($(STATS) + (0.6,-0.5)$) |-
+ ($(MODE) + (-0.6,0.5)$) |- ($(MAT) + (-0.6,0.5)$) |- cycle;
+\path[red] ($(MAT) + (-0.6,0.5)$) -- ($(STO) + (-0.6,-0.5)$) node[left,midway] {\textbf 1};
+\end{dispListing}
+
+\subsection{Version petit format}
+
+\begin{docCommand}{Calculatrice*}{\oarg{options}}
+ Cette commande permet d'afficher une calculatrice en petit format à utiliser dans des fiches méthodes par exemple.
+\end{docCommand}
+
+\begin{dispExample*}{sidebyside}
+\Calculatrice*
+\end{dispExample*}
+
+L'aspect de la calculatrice est modifiable :
+
+\begin{docKey}{calcscale}{=\meta{number}}{valeur par défaut : \docValue{0.5}}
+Permet de modifier la taille de la calculatrice. Plus la calculatrice est petite, moins les dessins de touches seront précis.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Calculatrice*[calcscale=1]
+\Calculatrice*[calcscale=0.25]
+\end{dispExample*}
+
+\begin{docKey}{calcrotate}{=\meta{number}}{valeur par défaut : \docValue{-30}}
+Permet de changer l'angle d'affichage de la calculatrice.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Calculatrice*[calcrotate=0] \textbf{Méthode}
+\qquad
+\Calculatrice*[calcrotate=90] \textbf{Méthode}
+\par\bigskip
+\Calculatrice*[calcrotate=-30]
+\hspace{-1em}\textbf{Méthode}
+\qquad
+\rotatebox{90}{\textbf{Méthode}}
+\Calculatrice*[calcrotate=0]
+\end{dispExample*}
+
+\begin{docKey}{calcraise}{=\meta{dim}}{valeur par défaut : \docValue{-2ex}}
+Permet de modifier la hauteur de la calculatrice en fonction de la ligne de base.
+\end{docKey}
+
+\begin{dispExample*}{sidebyside}
+\Calculatrice*[calcrotate=0, calcraise=0ex] \textbf{Méthode}
+\qquad
+\rotatebox{90}{\textbf{Méthode}}
+\Calculatrice*[calcrotate=0, calcraise=-0.5ex]
+\end{dispExample*}
+
+\begin{dispListing}
+\begin{center}
+ \begin{tikzpicture}
+ \fill[color=blue!15, rounded corners=5pt] (0,0) rectangle ++(0.75\linewidth,-3.2);
+ \draw[line width = 2pt, color=blue, rounded corners=5pt, line cap=round] (0,0) |- ++(0.75\linewidth,-3.2) -- ++(0,0.2);
+ \node (Calc) at (-0.1,0.1)
+ {\rotatebox{45}{\textbf{Méthode}}\hspace{-2.5em}
+ \Calculatrice*[calcrotate=-45, calcraise=-2.85ex]};
+ \end{tikzpicture}
+
+\vspace*{-3cm}
+\hspace*{0.1\linewidth}
+\parbox{0.7\linewidth}{
+ Pour tracer une courbe à la calculatrice, on effectue les actions suivantes :
+ \begin{itemize}
+ \item appuyer sur \Touche[style=graph, principal=$f(x)$, second={gr.stats}, alpha=f1, fontsize=7pt, position=0.95, raise=-3.5ex] ;
+ \item taper l'expression de la fonction ;
+ \item appuyer sur \Touche[style=graph, principal={trace}, second={calculs}, alpha={f4}, position=0.95, fontsize=7pt, raise=-3.5ex].
+ \end{itemize}
+}
+\end{center}
+\end{dispListing}
+
+\begin{center}
+ \begin{tikzpicture}
+ \fill[color=blue!15, rounded corners=5pt] (0,0) rectangle ++(0.75\linewidth,-3.2);
+ \draw[line width = 2pt, color=blue, rounded corners=5pt, line cap=round] (0,0) |- ++(0.75\linewidth,-3.2) -- ++(0,0.2);
+ \node (Calc) at (-0.1,0.1)
+ {\rotatebox{45}{\textbf{Méthode}}\hspace{-2.5em}
+ \Calculatrice*[calcrotate=-45, calcraise=-2.85ex]};
+ \end{tikzpicture}
+
+\vspace*{-3cm}
+\hspace*{0.1\linewidth}
+\parbox{0.7\linewidth}{
+ Pour tracer une courbe à la calculatrice, on effectue les actions suivantes :
+ \begin{itemize}
+ \item appuyer sur \Touche[style=graph, principal=$f(x)$, second={gr.stats}, alpha=f1, fontsize=7pt, position=0.95, raise=-3.5ex] ;
+ \item taper l'expression de la fonction ;
+ \item appuyer sur \Touche[style=graph, principal={trace}, second={calculs}, alpha={f4}, position=0.95, fontsize=7pt, raise=-3.5ex].
+ \end{itemize}
+}
+\end{center}
+
+\clearpage
+
+\printindex
+\end{document} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tipfr/latex/tipfr.sty b/graphics/pgf/contrib/tipfr/latex/tipfr.sty
new file mode 100644
index 0000000000..49ad29e72c
--- /dev/null
+++ b/graphics/pgf/contrib/tipfr/latex/tipfr.sty
@@ -0,0 +1,580 @@
+\def\fileversion{1.4b}
+\def\filedate{2015/01/05}
+\def\fileauthor{Philippe DE SOUSA}
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{tipfr}[%
+ \filedate\space v\fileversion\space
+ LaTeX package by \fileauthor]
+\RequirePackage[dvipsnames,table]{xcolor}
+\RequirePackage[zerostyle=d]{newtxtt}
+\@ifpackageloaded{tikz}{}{\RequirePackage{tikz}}
+\usetikzlibrary{calc,shapes,arrows,shadows,backgrounds,babel}
+\@ifpackageloaded{ifthen}{}{\RequirePackage{ifthen}}
+\@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}}
+\@ifpackageloaded{mathtools}{}{\RequirePackage{mathtools}}
+\@ifpackageloaded{amssymb}{}{\RequirePackage{amssymb}}
+\@ifpackageloaded{multido}{}{\RequirePackage{multido}}
+
+%% 13 décembre 2014 : v1.0 - création du package et du design des touches
+%% 14 décembre 2014 : v1.1 - création de la commande \Touche
+%% 19 décembre 2014 : v1.2 - création de la commande \Calculatrice, ajout de l'option entoure, ajout de l'option nom
+%% 27 décembre 2014 : v1.2a - anglicisation des noms d'options
+%% 27 décembre 2014 : v1.3 - ajout de la commande \Menu pour créer des menus de calculatrice
+%% 29 décembre 2014 : v1.4 - ajout de la commande \Ecran pour afficher un écran avec courbe ou avec calculs et résultats
+%% 02 janvier 2015 : v1.4a - changement de \ProvidesClass en \ProvidesPackage, suppression de \makeatletter, \makeatother
+%% 05 janvier 2015 : v1.4b - suppression de \shorthandon{;} et \shorthandoff{;} grace à la librairie babel de Tikz
+%% + possibilité de changer le nom de la touche Enter et les options Second et Alpha pour permettre le signe =
+%% + suppression du \RequirePackage{babel}
+%% 05 janvier 2015 : v1.5 - ajout de la commande étoilée de \Calculatrice pour dessiner une calculatrice mignature
+
+%% Merci à Daniel Flipo et Knut Lickert pour leurs conseils et remarques
+
+
+
+%%-----------------------------
+%--------- TOUCHES ------------
+%%-----------------------------
+
+% définition de l'accent circonflexe et de la racine carrée
+\newcommand*\Circonflexe{\tikz{\draw[scale=0.25] (0,0)--(1,1)--(2,0);}}
+\newcommand*\Racine{$\sqrt{\phantom{xx}}$}
+
+
+% création de booléen pour tester les styles de touche
+\newcommand*{\Def@Bool}[1]{%
+\newboolean{#1}
+\setboolean{#1}{false}
+}
+\newcommand*{\DefBool}[1]{\Def@Bool{#1}}
+
+\DefBool{ToucheChiffre}
+\DefBool{ToucheOperation}
+\DefBool{ToucheFonction}
+\DefBool{ToucheGraphe}
+\DefBool{ToucheAlpha}
+\DefBool{ToucheSeconde}
+\DefBool{ToucheOnOff}
+\DefBool{ToucheEntrer}
+\DefBool{ToucheFleches}
+\DefBool{ModeAlpha}
+\DefBool{ModeSeconde}
+\define@boolkey{Touche}{arrowup}[false]{}
+\define@boolkey{Touche}{arrowleft}[false]{}
+\define@boolkey{Touche}{arrowright}[false]{}
+\define@boolkey{Touche}{arrowdown}[false]{}
+\define@boolkey{Touche}{arrowtot}[false]{}
+\define@boolkey{Touche}{fixed}[true]{}
+\define@boolkey{Touche}{circle}[false]{}
+
+
+% Définition des keys
+\define@key{Touche}{fontsize}{\def\Font@Size{#1}}
+
+\define@key{Touche}{raise}{\def\Hauteur@Touche{#1}}
+
+\define@key{Touche}{name}{\def\Le@Nom{#1}}
+
+\define@key{Touche}{radius}{\def\Le@Rayon{#1}}
+
+\define@key{Touche}{colour}{\def\La@Couleur{#1}}
+\define@key{Touche}{color}{\def\La@Couleur{#1}}
+
+\define@key{Touche}{thickness}{\def\Ep@isseur{#1}}
+
+\define@key{Touche}{principal}{\def\Le@Principal{\fontsize{\Font@Size}{\Font@Size}\selectfont #1}}
+
+\define@key{Touche}{position}{\def\La@Position{#1}}
+
+\define@key{Touche}{alpha}{\ifthenelse{\equal{\string #1}{\string pasdealpha}}%
+ {\setboolean{ModeAlpha}{false}}%
+ {\def\Mode@Alpha{\fontsize{\Font@Size}{\Font@Size}\selectfont #1}\setboolean{ModeAlpha}{true}}%
+ }
+
+\define@key{Touche}{second}{\ifthenelse{\equal{\string #1}{\string pasdeseconde}}%
+ {\setboolean{ModeSeconde}{false}}%
+ {\def\Mode@Seconde{\fontsize{\Font@Size}{\Font@Size}\selectfont #1}\setboolean{ModeSeconde}{true}}%
+ }
+
+\define@key{Touche}{xoffset}{\def\X@Decalage{#1}}
+\define@key{Touche}{yoffset}{\def\Y@Decalage{#1}}
+
+\define@key{Touche}{scalearrows}{\def\Scale@Fleches{#1}}
+
+% Définitions des styles disponibles
+\define@choicekey{Touche}{style}%
+ {number,operation,function,graph,second,on,enter,alpha,arrows}%
+ {\ifthenelse{\equal{\string #1}{\string number}}%
+ {\setboolean{ToucheChiffre}{true}}
+ {\setboolean{ToucheChiffre}{false}}%
+ \ifthenelse{\equal{\string #1}{\string operation}}%
+ {\setboolean{ToucheOperation}{true}}
+ {\setboolean{ToucheOperation}{false}}%
+ \ifthenelse{\equal{\string #1}{\string function}}%
+ {\setboolean{ToucheFonction}{true}}
+ {\setboolean{ToucheFonction}{false}}%
+ \ifthenelse{\equal{\string #1}{\string graph}}%
+ {\setboolean{ToucheGraphe}{true}}
+ {\setboolean{ToucheGraphe}{false}}%
+ \ifthenelse{\equal{\string #1}{\string second}}%
+ {\setboolean{ToucheSeconde}{true}}
+ {\setboolean{ToucheSeconde}{false}}%
+ \ifthenelse{\equal{\string #1}{\string on}}%
+ {\setboolean{ToucheOnOff}{true}}
+ {\setboolean{ToucheOnOff}{false}}%
+ \ifthenelse{\equal{\string #1}{\string enter}}%
+ {\setboolean{ToucheEntrer}{true}}
+ {\setboolean{ToucheEntrer}{false}}%
+ \ifthenelse{\equal{\string #1}{\string alpha}}%
+ {\setboolean{ToucheAlpha}{true}}
+ {\setboolean{ToucheAlpha}{false}}%
+ \ifthenelse{\equal{\string #1}{\string arrows}}%
+ {\setboolean{ToucheFleches}{true}}
+ {\setboolean{ToucheFleches}{false}}%
+ }
+
+
+% configurations par défaut
+\presetkeys{Touche}{style=function,principal=sin,alpha=pasdealpha,second=pasdeseconde,
+ position=0.7,raise=0ex,fontsize=8pt,
+ xoffset=0cm,yoffset=0cm,scalearrows=1,name=NOM,
+ fixed=true,arrowup=false,arrowdown=false,arrowleft=false,arrowright=false,arrowtot=false,
+ circle=false,radius=20pt,colour=red,thickness=1pt}{}
+
+
+%%-----------------------------
+% commande \Touche dont la forme dépend du style choisi
+%%-----------------------------
+
+\newcommand*\Touche[1][]{%
+\setkeys{Touche}{#1}
+%%-----------------------------
+% Touche blanche pour les chiffres
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheChiffre}}%
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=white] (0,1)..controls+(40:0.4)and+(140:0.4).. (2,1) node[midway] (c) {} -- (2,1) arc (0:-180:1) -- cycle;
+ \path (1,0) -- (c) node[pos=\La@Position] {\bfseries \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (c) circle (\Le@Rayon);\fi
+ \ifthenelse{\boolean{ModeSeconde}}
+ {\ifthenelse{\boolean{ModeAlpha}}
+ {\node[above] at (c) {\makebox[1.2cm][s]{\bfseries\sffamily\textcolor{blue}%
+ {\Mode@Seconde}\hfill\textcolor{ForestGreen}{\Mode@Alpha}}};}
+ {\node[above] at (c) {\bfseries\sffamily\textcolor{blue}{\Mode@Seconde}};}}
+ {}
+ \end{tikzpicture}}%
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche grise pour les opérations
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheOperation}}%
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=gray] (0,1)..controls+(20:0.4)and+(160:0.4).. (2,1) node[midway] (c)
+ {} -- (2,1)..controls+(-90:0.75)and+(0:0.5)..(1,0.2)..controls+(180:0.5)and+(-90:0.75)..(0,1) -- cycle ;
+ \path (1,0.2) -- (c) node[color=white,pos=\La@Position] {\bfseries\sffamily \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (c) circle (\Le@Rayon);\fi
+ \ifthenelse{\boolean{ModeSeconde}}
+ {\ifthenelse{\boolean{ModeAlpha}}
+ {\node[above] at (c) {\makebox[1.2cm][s]{\bfseries\sffamily\textcolor{blue}%
+ {\Mode@Seconde}\hfill\textcolor{ForestGreen}{\Mode@Alpha}}};}
+ {\node[above] at (c) {\bfseries\sffamily\textcolor{blue}{\Mode@Seconde}};}}
+ {}
+ \end{tikzpicture}}
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche noire pour les fonctions
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheFonction}}
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=black] (0,1)..controls+(20:0.4)and+(160:0.4).. (2,1) node[midway] (c) {} --
+ (2,1)..controls+(-90:0.75)and+(0:0.5)..(1,0.2)..controls+(180:0.5)and+(-90:0.75)..(0,1) -- cycle ;
+ \path (1,0.2) -- (c) node[color=white,pos=\La@Position] {\bfseries\sffamily \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (c) circle (\Le@Rayon);\fi
+ \ifthenelse{\boolean{ModeSeconde}}
+ {\ifthenelse{\boolean{ModeAlpha}}
+ {\node[above] at (c) {\makebox[1.2cm][s]{\bfseries\sffamily\textcolor{blue}%
+ {\Mode@Seconde}\hfill\textcolor{ForestGreen}{\Mode@Alpha}}};}
+ {\node[above] at (c) {\bfseries\sffamily\textcolor{blue}{\Mode@Seconde}};}}
+ {}
+ \end{tikzpicture}}
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche grise pour les graphes
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheGraphe}}
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.7cm,remember picture]
+ \draw[fill=gray] (0,1)..controls+(20:0.4)and+(160:0.4).. (2,1) node[midway] (c) {} --
+ (2,1)..controls+(-90:0.3)and+(0:0.75)..(1,0.7)..controls+(180:0.75)and+(-90:0.3)..(0,1) -- cycle ;
+ \path (1,0.2) -- (c) node[color=white,pos=\La@Position] {\bfseries\sffamily \Le@Principal};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (c) circle (\Le@Rayon);\fi
+ \ifthenelse{\boolean{ModeSeconde}}
+ {\ifthenelse{\boolean{ModeAlpha}}
+ {\node[above] at (c) {\makebox[1.2cm][s]{\bfseries\sffamily\textcolor{blue}%
+ {\Mode@Seconde}\hfill\textcolor{ForestGreen}{\Mode@Alpha}}};}
+ {\node[above] at (c) {\bfseries\sffamily\textcolor{blue}{\Mode@Seconde}};}}
+ {}
+ \end{tikzpicture}}
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche Entrer
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheEntrer}}
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=gray] (0,1)..controls+(20:0.4)and+(160:0.4).. (2,1) node[midway] (c) {} --
+ (2,1)..controls+(-90:0.75)and+(0:0.7)..(1,-0.5)..controls+(180:0.7)and+(-90:0.75)..(0,1) -- cycle ;
+ \path (1,0.2) -- (c) node[color=white,pos=\La@Position] {\bfseries\sffamily \Le@Principal};
+ \coordinate (\Le@Nom) at (1,0.75);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (1,0.75) circle (\Le@Rayon);\fi
+ \ifthenelse{\boolean{ModeSeconde}}
+ {\ifthenelse{\boolean{ModeAlpha}}
+ {\node[above] at (c) {\makebox[1.2cm][s]{\bfseries\sffamily\textcolor{blue}%
+ {\Mode@Seconde}\hfill\textcolor{ForestGreen}{\Mode@Alpha}}};}
+ {\node[above] at (c) {\bfseries\sffamily\textcolor{blue}{\Mode@Seconde}};}}
+ {}
+ \end{tikzpicture}}
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche On/Off
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheOnOff}}
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=black] (0,1)..controls+(20:0.4)and+(160:0.4).. (2,1) node[midway] (c) {} --
+ (2,1)..controls+(-90:0.75)and+(0:0.7)..(1,0)..controls+(180:0.7)and+(-90:0.75)..(0,1) -- cycle ;
+ \path (1,0.2) -- (c) node[color=white,pos=\La@Position] {\fontsize{\Font@Size}{\Font@Size}\selectfont\bfseries\sffamily on};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (c) circle (\Le@Rayon);\fi
+ \node[above] at (c) {\fontsize{\Font@Size}{\Font@Size}\selectfont\bfseries\sffamily\textcolor{blue}{off}};
+ \end{tikzpicture}}
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche 2nde
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheSeconde}}
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=blue] (0,1)..controls+(20:0.4)and+(160:0.4).. (2,1) node[midway] (c) {} --
+ (2,1)..controls+(-90:0.75)and+(0:0.5)..(1,0.2)..controls+(180:0.5)and+(-90:0.75)..(0,1) -- cycle ;
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (c) circle (\Le@Rayon);\fi
+ \path (1,0.2) -- (c) node[color=white,pos=\La@Position] {\fontsize{\Font@Size}{\Font@Size}\selectfont\bfseries\sffamily 2nde};
+ \end{tikzpicture}}%
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche Alpha
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheAlpha}}%
+ {\unskip\begin{tikzpicture}[x=0.5cm,y=0.5cm,remember picture]
+ \draw[fill=ForestGreen] (0,1)..controls+(20:0.4)and+(160:0.4).. (2,1) node[midway] (c) {} --
+ (2,1)..controls+(-90:0.75)and+(0:0.5)..(1,0.2)..controls+(180:0.5)and+(-90:0.75)..(0,1) -- cycle ;
+ \path (1,0.2) -- (c) node[color=white,pos=\La@Position] {\fontsize{\Font@Size}{\Font@Size}\selectfont\bfseries\sffamily alpha};
+ \coordinate (\Le@Nom) at (c);
+ \ifKV@Touche@circle\draw[\La@Couleur,line width=\Ep@isseur] (c) circle (\Le@Rayon);\fi
+ \node[above] at (c) {\fontsize{\Font@Size}{\Font@Size}\selectfont\bfseries\sffamily\textcolor{blue}{verr A}};
+ \end{tikzpicture}}
+ {\unskip}%
+}%
+%%-----------------------------
+% Touche des flèches
+%%-----------------------------
+\raisebox{\Hauteur@Touche}{
+\ifthenelse{\boolean{ToucheFleches}}%
+ {\unskip\begin{tikzpicture}[\ifKV@Touche@fixed\else overlay\fi,xshift=\X@Decalage,yshift=\Y@Decalage,scale=\Scale@Fleches]
+ \fill[white] ({cos(110) -0.1},{sin(110)-0.2}) -- ({cos(160)+0.4},{sin(160)+0.12}) arc(30:-30:1) --
+ ({cos(-110) -0.1},{sin(-110)+0.2}) arc(-30:30:1.47) ;
+ \fill[white,xscale=-1] ({cos(110) -0.1},{sin(110)-0.2}) -- ({cos(160)+0.4},{sin(160)+0.12}) arc(30:-30:1) --
+ ({cos(-110) -0.1},{sin(-110)+0.2}) arc(-30:30:1.47) ;
+ \draw[fill=gray] ({cos(70)},{sin(70)}) arc (70:110:1) ..controls+(220:0.1)and+(90:0.1).. +(-0.1,-0.2)
+ arc(30:-30:1.47) ..controls+(-90:0.1)and+(140:0.1)..
+ ({cos(-110)},{sin(-110)}) arc (-110:-70:1)..controls+(40:0.1)and+(-90:0.1)..
+ +(0.1,0.2) arc (210:150:1.47) ..controls+(90:0.1)and+(-40:0.1).. ({cos(70)},{sin(70)});
+ \draw[fill=gray] ({cos(160)},{sin(160)}) arc(160:200:1) ..controls+(-45:0.2)and+(170:0.2).. +(0.4,-0.2)
+ arc(-30:30:1) ..controls+(180:0.2)and+(30:0.2).. ({cos(160)},{sin(160)});
+ \draw[fill=gray,xscale=-1] ({cos(160)},{sin(160)}) arc(160:200:1) ..controls+(-45:0.2)and+(170:0.2)..
+ +(0.4,-0.2) arc(-30:30:1) ..controls+(180:0.2)and+(30:0.2).. ({cos(160)},{sin(160)});
+ \fill[white] (0,0.9) -- +(-0.15,-0.15) -- +(0.15,-0.15)-- cycle;
+ \fill[white] (-0.9,0) -- +(0.15,0.15) -- +(0.15,-0.15)-- cycle;
+ \fill[white,yscale=-1] (0,0.9) -- +(-0.15,-0.15) -- +(0.15,-0.15)-- cycle;
+ \fill[white,xscale=-1] (-0.9,0) -- +(0.15,0.15) -- +(0.15,-0.15)-- cycle;
+ \coordinate (FLE) at (0,0);
+ \coordinate (FLH) at (0,0.825);
+ \coordinate (FLB) at (0,-0.825);
+ \coordinate (FLD) at (0.825,0);
+ \coordinate (FLG) at (-0.825,0);
+ \ifKV@Touche@arrowdown\draw[\La@Couleur,line width=\Ep@isseur] (FLB) circle (10pt);\fi
+ \ifKV@Touche@arrowleft\draw[\La@Couleur,line width=\Ep@isseur] (FLG) circle (10pt);\fi
+ \ifKV@Touche@arrowtot\draw[\La@Couleur,line width=\Ep@isseur] (FLE) circle (30pt);\fi
+ \ifKV@Touche@arrowup\draw[\La@Couleur,line width=\Ep@isseur] (FLH) circle (10pt);\fi
+ \ifKV@Touche@arrowright\draw[\La@Couleur,line width=\Ep@isseur] (FLD) circle (10pt);\fi
+ \end{tikzpicture}}
+ {\unskip}%
+}%
+}
+
+%%-----------------------------
+%------ CALCULATRICE ----------
+%%-----------------------------
+
+% options de la commande \Calculatrice*
+\define@key{Calculatrice}{calcscale}{\def\Calc@Echelle{#1}}
+\define@key{Calculatrice}{calcrotate}{\def\Calc@Rotation{#1}}
+\define@key{Calculatrice}{calcraise}{\def\Calc@Position{#1}}
+
+% configurations par défaut pour \Calculatrice*
+\presetkeys{Calculatrice}{calcscale=0.5,calcrotate=-30,calcraise=-2ex}{}
+
+%%-----------------------------
+%-------- Grand format --------
+%%-----------------------------
+\newcommand{\Calculatrice@nostar}[1][]{
+\begin{tikzpicture}[remember picture]
+\renewcommand{\tabcolsep}{-3pt}
+\node (tabcalc) at (0,0) {
+\Touche[style=arrows,fixed=false,xoffset=5.75cm,yoffset=3.75cm]
+\begin{tabular}{*{5}{>{\arraybackslash}c}}
+%Touche du haut
+ \Touche[style=graph,principal=$f(x)$,second={gr.stats},alpha=f1,position=0.95,fontsize=7pt,name=FX] &
+ \Touche[style=graph,principal={fenêtre},second=déf tab,alpha=f2,position=0.95,fontsize=7pt,name=FEN] &
+ \Touche[style=graph,principal={zoom},second={format},alpha={f3},position=0.95,fontsize=7pt,name=ZOOM] &
+ \Touche[style=graph,principal={trace},second={calculs},alpha={f4},position=0.95,fontsize=7pt,name=TRC] &
+ \Touche[style=graph,principal={graphe},second={table},alpha={f5},position=0.95,fontsize=7pt,name=GRA] \\
+%
+ \Touche[style=second,name=SCD] &
+ \Touche[principal={mode},second={quitter},position=0.8,name=MODE] &
+ \Touche[principal={suppr},second={insérer},position=0.65,name=SUP] & & \\
+%
+ \Touche[style=alpha,name=ALPHA] &
+ \Touche[principal={$x,t,\theta,n$},second={échanger},fontsize=7pt,position=0.8,name=XTN] &
+ \Touche[principal={stats},second={listes},name=STATS] & & \\
+%
+ \Touche[principal={math},second={tests},alpha={A},position=0.8,name=MAT] &
+ \Touche[principal={\textcolor{purple}{apps}},second={angle},alpha={B},position=0.7,name=APPS] &
+ \Touche[principal={prgm},second={dessin},alpha={C},position=0.7,name=PRGM] &
+ \Touche[principal={var},second={distrib},name=VAR] &
+ \Touche[principal={annul},name=ANN]\\
+%
+ \Touche[principal={$x^{-1}$},second={matrice},alpha={D},fontsize=7pt,name=INV] &
+ \Touche[principal={sin},second={arcsin},alpha={E},name=SIN] &
+ \Touche[principal={cos},second={arccos},alpha={F},name=COS] &
+ \Touche[principal={tan},second={arctan},alpha={G},name=TAN] &
+ \Touche[principal={\Circonflexe},second={$\pi$},alpha={H},name=POW]\\
+%
+ \Touche[principal={$x^2$},second={\Racine},alpha={I},name=CARRE] &
+ \Touche[principal={\large ,},second={EE},alpha={J},name=VIRG] &
+ \Touche[principal={(},second={\{},alpha={K},name=PO] &
+ \Touche[principal={)},second={\}},alpha={L},name=PF] &
+ \Touche[style=operation,principal={$\div$},second={e},alpha={M},name=DIV]\\
+%
+ \Touche[principal={log},second={$10^x$},alpha={N},name=LOG] &
+ \Touche[style=number,principal={7},second={$u_n$},alpha={O},name=T7] &
+ \Touche[style=number,principal={8},second={$v_n$},alpha={P},name=T8] &
+ \Touche[style=number,principal={9},second={$w_n$},alpha={Q},name=T9] &
+ \Touche[style=operation,principal={$\times$},second={[},alpha={R},name=MUL]\\
+%
+ \Touche[principal={ln},second={e$^x$},alpha={S},name=LN] &
+ \Touche[style=number,principal={4},second={L4},alpha={T},name=T4] &
+ \Touche[style=number,principal={5},second={L5},alpha={U},name=T5] &
+ \Touche[style=number,principal={6},second={L6},alpha={V},name=T6] &
+ \Touche[style=operation,principal={$-$},second={]},alpha={W},name=SUB]\\
+%
+ \Touche[principal={sto$\to$},second={rappel},alpha={X},name=STO] &
+ \Touche[style=number,principal={1},second={L1},alpha={Y},name=T1] &
+ \Touche[style=number,principal={2},second={L2},alpha={Z},name=T2] &
+ \Touche[style=number,principal={3},second={L3},alpha={$\theta$},name=T3] &
+ \Touche[style=operation,principal={+},second={mém},alpha={"},name=ADD]\\
+% Touches du bas
+ \Touche[style=on,name=ON] &
+ \Touche[style=number,principal={0},second={cat.},alpha={$\sqcup$},name=T0] &
+ \Touche[style=number,principal={$\centerdot$},second={$i$},alpha={:},name=DOT] &
+ \Touche[style=number,principal={(--)},second={rép},alpha={?},name=MS] &
+ \Touche[style=enter,fontsize=7pt, principal=entrer, second=préc, alpha=résol, name=ETR]
+\end{tabular}};
+
+ \node (ecran) at ($(tabcalc.north west)+(0.35,0)$) [inner sep=0pt,draw,fill=ForestGreen!15,rectangle,
+ minimum width=6.85cm,minimum height=5cm,anchor=south west] {};
+ \begin{scope}[shift={(ecran.center)}]
+ \clip ($(tabcalc.north west)+(0.35,0)$) rectangle ($(tabcalc.north east)+(0.2,5)$);
+ \draw(ecran.south)--(ecran.north);
+ \draw(ecran.west)--(ecran.east);
+ \multido{\i=0+1}{7}{\draw ({\i/2},0)--({\i/2},0.05);}
+ \multido{\i=0+1}{7}{\draw ({-\i/2},0)--({-\i/2},0.05);}
+ \multido{\i=0+1}{5}{\draw (0,{\i/2})--(0.05,{\i/2});}
+ \multido{\i=0+1}{5}{\draw (0,{-\i/2})--(0.05,{-\i/2});}
+ %\draw[line width=1pt] plot[domain=-5:5,samples=500] (\x,{(\x+1)^2-2.25});
+ \end{scope}
+
+\begin{scope}[on background layer]
+ \draw[fill=Orange!10]
+ ($(ecran.north west) + (-0.65,0.85)$)..controls+(-120:0.5)and+(90:1.5)..
+ ($(tabcalc.west) + (-0.4,-3.5)$) ..controls+(-90:1)and+(170:1)..
+ ($(tabcalc.south west)+ (0.8,-0.5)$) ..controls+(-10:0.5)and+(-170:1)..
+ ($(tabcalc.south east) + (-0.5,-0.5)$) ..controls+(10:1)and+(-90:1)..
+ ($(tabcalc.east) + (0.75,-3.5)$) ..controls+(90:1.5)and+(-60:0.5)..
+ ($(ecran.north east) + (0.65,0.85)$) ..controls+(170:1.5)and+(10:1.5)..
+ ($(ecran.north west) + (-0.65,0.85)$)--cycle;
+ \node at ($(ecran.north) + (0,0.5)$) {{\Large\bfseries\sffamily #1}};
+\end{scope}
+\end{tikzpicture}
+}
+
+%%-----------------------------
+%-------- Petit format --------
+%%-----------------------------
+\newcommand*{\Calculatrice@star}[1][]{%
+\setkeys{Calculatrice}{#1}%
+\raisebox{\Calc@Position}{%
+\begin{tikzpicture}[x=0.5cm,scale=\Calc@Echelle,rotate=\Calc@Rotation]
+ \draw[fill=black] (0,0) rectangle (2.1,2.6);
+ \draw[white,fill=white] (0.1,1.5) rectangle (2,2.5);
+ \fill[white] (0.25,1.35) ellipse (0.15 and 0.05)
+ ++(0.4,0) ellipse (0.15 and 0.05)
+ ++(0.4,0) ellipse (0.15 and 0.05)
+ ++(0.4,0) ellipse (0.15 and 0.05)
+ ++(0.4,0) ellipse (0.15 and 0.05);
+ \fill[white] (1.8,1) ellipse (0.2 and 0.15);
+ \fill[white,rounded corners=2] (0.1,0.9) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (0.6,0.9) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.1,0.9) rectangle ++(0.4,0.2);
+%%
+ \fill[white,rounded corners=2] (0.1,0.45) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (0.6,0.45) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.1,0.45) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.6,0.45) rectangle ++(0.4,0.2);
+%%
+ \fill[white,rounded corners=2] (0.1,0.1) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (0.6,0.1) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.1,0.1) rectangle ++(0.4,0.2);
+ \fill[white,rounded corners=2] (1.6,0.1) rectangle ++(0.4,0.2);
+%%
+\end{tikzpicture}%
+}%
+}
+
+%%-----------------------------
+%\Calculatrice = Grand format-
+%\Calculatrice* = Petit format-
+%%-----------------------------
+\newcommand*\Calculatrice{\@ifstar{\Calculatrice@star}{\Calculatrice@nostar}}
+
+
+%%-----------------------------
+%------ MENU ------------------
+%%-----------------------------
+
+% Définitions des options
+\define@boolkey{Menu}{select}[false]{}
+\define@key{Menu}{size}{\def\t@ille{#1}}
+\define@key{Menu}{text}{\def\@texte{#1}}
+\define@key{Menu}{colourbox}{\def\Couleur@Boite{#1}}
+\define@key{Menu}{colorbox}{\def\Couleur@Boite{#1}}
+
+% Valeurs par défaut
+\presetkeys{Menu}{select=false,text=\unskip,colorbox=white}{size=15pt}
+
+% Définition de la touche \Menu
+\newcommand\@Menu[2][]{
+\setlength{\fboxsep}{0pt} \setlength{\fboxrule}{0.5pt}
+\setkeys{Menu}{#1}
+\ifKV@Menu@select \tikz[font=\ttfamily\bfseries]{\node (texte)
+{\fontsize{\t@ille}{0}\selectfont\colorbox{black}{\color{white}\protect\uppercase{#2}}};\draw
+(texte) node[right=10pt] {\fontsize{\t@ille}{0}\selectfont\@texte};} \else
+\tikz[font=\ttfamily\bfseries]{\node (texte)
+{\fontsize{\t@ille}{0}\selectfont\colorbox{\Couleur@Boite}{\color{black}\protect\uppercase{#2}}};\draw
+(texte) node[right=10pt] {\fontsize{\t@ille}{0}\selectfont\@texte};} \fi }
+
+\newcommand\Menu[2][]{\@Menu[#1]{#2}}
+
+
+
+%%-----------------------------
+%------ ECRAN ------------------
+%%-----------------------------
+
+
+\newcounter{LineCommand}
+\setcounter{LineCommand}{0}
+\newcounter{LineResult}
+\setcounter{LineResult}{0}
+
+\define@boolkey{Ecran}{graphic}[false]{}
+
+% Définition des keys
+\define@key{Ecran}{screencolor}{\def\Couleur@Ecran{#1}}
+\define@key{Ecran}{screencolour}{\def\Couleur@Ecran{#1}}
+\define@key{Ecran}{screenname}{\def\Nom@Ecran{#1}}
+\define@key{Ecran}{xgrad}{\def\X@Grad{#1}}
+\define@key{Ecran}{ygrad}{\def\Y@Grad{#1}}
+\define@key{Ecran}{nbgradx}{\def\@IncrementX{#1}}
+\define@key{Ecran}{nbgrady}{\def\@IncrementY{#1}}
+\define@key{Ecran}{width}{\def\L@ngueur{#1}}
+\define@key{Ecran}{height}{\def\H@uteur{#1}}
+\define@key{Ecran}{origin}{\def\@rigin{#1}}
+\define@key{Ecran}{plotcolour}{\def\courbe@couleur{#1}}
+\define@key{Ecran}{plotcolor}{\def\courbe@couleur{#1}}
+\define@key{Ecran}{plotwidth}{\def\courbe@epaisseur{#1}}
+
+% Configurations par défaut
+\presetkeys{Ecran}{graphic=false,
+ screencolour=ForestGreen!15,
+ screenname=ecran,
+ width=8, height=5,
+ xgrad=0.5, ygrad=0.5,
+ nbgradx=8, nbgrady=5,
+ origin=(\Nom@Ecran.center),
+ plotcolour=blue,
+ plotwidth=1pt
+ }{}
+
+% Commande \Ecran
+\newcommand*\Ecran[2][]{%
+\setcounter{LineCommand}{0}
+\setcounter{LineResult}{0}
+\setkeys{Ecran}{#1}
+\ifKV@Ecran@graphic
+ \begin{tikzpicture}[remember picture]
+ \node (\Nom@Ecran) at (0,0) [inner sep=0pt,draw, fill=\Couleur@Ecran, rectangle, minimum width=\L@ngueur cm,
+ minimum height=\H@uteur cm, anchor=south west] {};
+ \clip (0,0) rectangle (\L@ngueur,\H@uteur);
+ \draw \@rigin -- +(0,\H@uteur) -- +(0,-\H@uteur);
+ \draw \@rigin -- +(\L@ngueur,0) -- +(-\L@ngueur,0);
+ \begin{scope}[shift=\@rigin,x=\X@Grad cm,y=\Y@Grad cm]
+ \multido{\i=0+1}{\@IncrementX}{\draw (\i,0)--(\i,0.05/\Y@Grad);}
+ \multido{\i=0+1}{\@IncrementX}{\draw (-\i,0)--(-\i,0.05/\Y@Grad);}
+ \multido{\i=0+1}{\@IncrementY}{\draw (0,{\i})--(0.05/\X@Grad,{\i});}
+ \multido{\i=0+1}{\@IncrementY}{\draw (0,{-\i})--(0.05/\X@Grad,{-\i});}
+ \foreach \courbe/\domain in {#2}
+ \ifx \domain\empty \def\domain{-6:6} \fi
+ \draw[line width=\courbe@epaisseur,color=\courbe@couleur] plot[domain=\domain,samples=500] (\x,{\courbe});
+ \end{scope}
+ \end{tikzpicture}
+\else
+ \begin{tikzpicture}[remember picture]
+ \node (\Nom@Ecran) at (0,0) [inner sep=0pt, draw, fill=\Couleur@Ecran, rectangle, minimum width=\L@ngueur cm,
+ minimum height=\H@uteur cm,anchor=south west] {};
+ \clip (0,0) rectangle (\L@ngueur,\H@uteur);
+ \foreach \command/\result in {#2}
+ {\ifx\command\empty {\addtocounter{LineResult}{-1}\addtocounter{LineCommand}{1}} \else
+ \node[anchor=north west] at ($(\Nom@Ecran.north west)+(0,-\theLineCommand/2)$) {\texttt{\command}};
+ \addtocounter{LineCommand}{2}\fi
+ \ifx\result\empty {\addtocounter{LineCommand}{-1}\addtocounter{LineResult}{1}} \else
+ \node[anchor=north east] at ($(\Nom@Ecran.north east)+(0,-0.5-\theLineResult/2)$) {\texttt{\result}};
+ \addtocounter{LineResult}{2}\fi}
+ \end{tikzpicture}
+\fi
+}
diff --git a/graphics/pgf/contrib/tkz-orm/LICENSE b/graphics/pgf/contrib/tkz-orm/LICENSE
new file mode 100644
index 0000000000..8e382389a3
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/LICENSE
@@ -0,0 +1,26 @@
+Licenses for the tkz-orm package
+================================
+
+1. The code of the package (all *.sty files) is dual-licensed.
+ This means that you can decide which license you wish to
+ use when using the tkz-orm package. The two options are:
+
+ a) The GNU Public License, version 2
+ b) The LaTeX Project Public License, version 1.3c
+
+2. The documentation of the package (all other files) can
+ be used under any version of any of the following licenses:
+
+ a) The Creative Commons Share-Alike license (CC-BY-SA)
+ b) The GNU Free Documentation License (GFDL)
+ c) The GNU Public License (GPL)
+ d) The LaTeX Project Public License
+
+The ``code of the package'' refers to all .sty files. Parts of
+the code are based on code of the original pgf-package.
+
+The ``documentation of the package`` refers to all other files.
+
+You will find some of the licenses as plain text versions as
+part of this package and more licenses on the Web.
+
diff --git a/graphics/pgf/contrib/tkz-orm/Makefile b/graphics/pgf/contrib/tkz-orm/Makefile
new file mode 100644
index 0000000000..c85dea39b6
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/Makefile
@@ -0,0 +1,146 @@
+################################################################
+# Makefile for tkz-orm #
+################################################################
+
+help:
+ @echo ""
+ @echo " make clean - clean out directory"
+ @echo " make tidy - clean out directory some more"
+ @echo " make examples - create examples as PDF and PNG"
+ @echo " make ctan - create a CTAN-ready archive"
+ @echo " make doc - typeset documentation"
+ @echo " make install - install files in local texmf tree"
+ @echo ""
+
+################################################################
+# Master package name #
+################################################################
+
+PACKAGE = tkz-orm
+FEATURES = index bib
+
+LATEXFLAGS = -interaction=nonstopmode
+
+################################################################
+# Directory structure for making zip files #
+################################################################
+
+CTANROOT := ctan
+CTANDIR := $(CTANROOT)/$(PACKAGE)
+CTANINCLUDE = $(PACKAGE).tex $(PACKAGE).sty $(PACKAGE).bib \
+ README LICENSE pgfmanualstyle.sty Makefile
+
+###############################################################
+# Data for local installation
+###############################################################
+
+# TODO: add cheatsheet
+INCLUDEPDF := $(PACKAGE)
+PACKAGEROOT := latex/$(PACKAGE)
+
+################################################################
+# Clean-up information #
+################################################################
+
+AUXFILES = aux bbl bit blg glo gls dvi glo hd idx ilg ind lof \
+ log nlo nls out toc
+
+CLEAN = gz pdf ps zip
+
+################################################################
+# File buiding: default actions #
+################################################################
+
+all: $(PACKAGE).pdf
+index: $(PACKAGE).ind $(PACKAGE).ilg
+abbr: $(PACKAGE).nls
+bib: $(PACKAGE).blg $(PACKAGE).bbl
+
+# Documentation
+$(PACKAGE).pdf: $(PACKAGE).tex $(FEATURES)
+ pdflatex $(LATEXFLAGS) $(PACKAGE).tex
+ pdflatex $(LATEXFLAGS) $(PACKAGE).tex
+
+# Preperation
+$(PACKAGE).idx $(PACKAGE).nlo $(PACKAGE).aux: $(PACKAGE).tex
+ pdflatex $(LATEXFLAGS) $(PACKAGE).tex
+
+# Indexes
+$(PACKAGE).ind $(PACKAGE).ilg: $(PACKAGE).tex $(PACKAGE).idx
+ makeindex $(PACKAGE).idx
+
+$(PACKAGE).nls: $(PACKAGE).tex $(PACKAGE).nlo
+ makeindex $(PACKAGE).nlo -s nomencl.ist -o $(PACKAGE).nls
+
+# Bibliography
+$(PACKAGE).blg $(PACKAGE).bbl: $(PACKAGE).tex $(PACKAGE).bib $(PACKAGE).aux
+ bibtex $(PACKAGE)
+
+%.pdf2: %.tex
+ NAME=`basename $< .tex` ; \
+ echo "Typesetting $$NAME" ; \
+ pdflatex &> /dev/null ; \
+ if [ $$? = 0 ] ; then \
+ makeindex -s gglo.ist -o $$NAME.gls $$NAME.glo &> /dev/null ; \
+ makeindex -s gind.ist -o $$NAME.ind $$NAME.idx &> /dev/null ; \
+ pdflatex &> /dev/null ; \
+ pdflatex &> /dev/null ; \
+ else \
+ echo " Complilation failed" ; \
+ fi ; \
+ for I in $(AUXFILES) ; do \
+ rm -f $$NAME.$$I ; \
+ done
+
+%.png: %.tex
+ @sed 's/^\\begin{document}/\
+\\pgfrealjobname{dummy}\\begin{document}\\beginpgfgraphicnamed{example}/' $< | \
+sed 's/^\\end{document}/\\endpgfgraphicnamed\\end{document}/' > example.tex ; \
+ pdflatex --jobname=example example.tex ; \
+ gs -dNOPAUSE -r120 -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -sDEVICE=png16m \
+-sOutputFile=$@ -dBATCH example.pdf ; \
+ convert -thumbnail 200 $@ $(addsuffix .thumb.png, $(basename $@)) ; \
+ mv example.pdf $(addsuffix .pdf, $(basename $<)) ; rm example.*
+
+
+################################################################
+# User make options #
+################################################################
+
+.PHONY = clean tidy install
+
+clean:
+ for I in $(AUXFILES) $(CLEAN) ; do \
+ rm -f *.$$I ; \
+ done
+ @rm -rf $(CTANROOT)/
+
+tidy: clean
+ @rm -rf *~
+
+ctan: doc
+ echo "Creating CTAN archive"
+ mkdir -p $(CTANDIR)/
+ rm -rf $(CTANDIR)/*
+ for I in $(INCLUDEPDF) ; do \
+ cp -f $$I.pdf $(CTANDIR)/ ; \
+ done ; \
+ for F in $(CTANINCLUDE) ; do \
+ cp -f $$F $(CTANDIR)/ ; \
+ done ; \
+ cd $(CTANDIR) ; \
+ zip -ll -q -r -X $(PACKAGE).zip .
+ cp $(CTANDIR)/$(PACKAGE).zip ./
+ rm -rf $(CTANROOT)/
+
+doc: $(foreach FILE,$(INCLUDEPDF),$(FILE).pdf)
+
+examples: $(foreach FILE,$(wildcard examples/*.tex),$(basename $(FILE)).png)
+
+install:
+ echo Installing $(PACKAGE).sty
+ TEXMFHOME=`kpsewhich --var-value=TEXMFHOME` ; \
+ rm -rf $$TEXMFHOME/tex/$(PACKAGEROOT)/*.* ; \
+ mkdir -p $$TEXMFHOME/tex/$(PACKAGEROOT)/ ; \
+ cp $(PACKAGE).sty $$TEXMFHOME/tex/$(PACKAGEROOT)/ ; \
+ texhash &> /dev/null
diff --git a/graphics/pgf/contrib/tkz-orm/README b/graphics/pgf/contrib/tkz-orm/README
new file mode 100644
index 0000000000..c38f5ba5e4
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/README
@@ -0,0 +1,57 @@
+================================================================
+ tkz-orm -- Object-Role Modeling diagrams in TeX
+ version 0.1.4, January 15th, 2016
+
+== ABOUT =======================================================
+
+See the file tkz-orm.pdf for a manual.
+
+The permanent URL of this package is:
+ http://purl.org/net/tkz-orm
+
+Source code repository and issue tracker are located at:
+ http://github.com/nichtich/tkz-orm
+
+== INSTALLATION =================================================
+
+The current version of tkz-orm requires at least TikZ 2.1. You
+can get it from http://www.texample.net/tikz/builds/. Put the
+content of the zip (pgfCVSYYYY-MM-DD_TDS.zip) in your local
+texmf directory, for instance ~/texmf or /usr/share/texmf/.
+
+To install tkz-orm you can use the Makefile and run
+
+$ sudo make install
+
+or copy the file tkz-orm.sty into directory tex/latex/tkz-orm in
+your local texmf directory and run $ sudo texhash afterwards.
+
+== LICENSE ======================================================
+
+The code of this package is is dual-license under
+
+ a) The GNU Public License, version 2
+ b) The LaTeX Project Public License, version 1.3c
+
+The rest of this package is available under multiple licenses.
+
+See the file LICENSE for details.
+
+== MANIFEST =====================================================
+
+ tkz-orm.sty - code of this package (LaTeX style file)
+ tkz-orm.pdf - manual in PDF format
+ tkz-orm.tex - LaTeX source of the manual
+ tkz-orm.bib - BibTeX source of the manual
+ ormcheatsheet.tex - ORM2 cheat sheet (sources)
+ ormcheatsheet.pdf - ORM2 cheat sheet in PDF format
+ pgfmanualstyle.sty - Style file to build the manual
+ LICENSE - information about licenses of this package
+ Makefile - makefile for various tasks
+ README - this file
+
+== FEEDBACK =====================================================
+
+Please report bug reports and feature requests at
+ http://github.com/nichtich/tkz-orm/issues
+
diff --git a/graphics/pgf/contrib/tkz-orm/pgfmanualstyle.sty b/graphics/pgf/contrib/tkz-orm/pgfmanualstyle.sty
new file mode 100644
index 0000000000..ff73284411
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/pgfmanualstyle.sty
@@ -0,0 +1,238 @@
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+%
+% Copyright 2010 by Jakob Voss
+%
+% This file is based on works by Till Tantau. It contains additions and/or
+% modifications by Jakob Voss and Rouben Rostamian. It may be distributed
+% and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file LICENSE for more details.
+
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{pgfmanualstyle}[2010/01/24 v0.1 pgfmanualstyle]
+\RequirePackage{tikz}[2009/09/04]
+
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+% code from pgfmanual-en-macros.tex
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8}
+\definecolor{codebackground}{rgb}{0.8,0.8,1}
+
+\makeatletter
+
+\begingroup
+\catcode`|=0
+\catcode`[= 1
+\catcode`]=2
+\catcode`\{=12
+\catcode `\}=12
+\catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]]
+|endgroup
+%
+\begingroup
+\catcode`\^=7
+\catcode`\^^M=13
+\catcode`\ =13%
+\gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^M=13\def^^M{}}%
+\endgroup
+%
+\begingroup
+\catcode`\%=13
+\catcode`\^^M=13
+\gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}}
+\gdef\@gobble@till@return#1^^M{}
+\gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}}
+\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par}
+\endgroup
+%
+\define@key{codeexample}{width}{\setlength\codeexamplewidth{#1}}
+\define@key{codeexample}{graphic}{\colorlet{graphicbackground}{#1}}
+\define@key{codeexample}{code}{\colorlet{codebackground}{#1}}
+\define@key{codeexample}{execute code}{\csname code@execute#1\endcsname}
+\define@key{codeexample}{code only}[]{\code@executefalse}
+\define@key{codeexample}{pre}{\def\code@pre{#1}}
+\define@key{codeexample}{post}{\def\code@post{#1}}
+%
+\def\code@pre{}
+\def\code@post{}
+%
+\newdimen\finalcodeexamplewidth % XXX
+\newdimen\codeexamplewidth
+\newif\ifcode@execute
+\newbox\codeexamplebox
+\def\codeexample[#1]{%
+ \code@executetrue
+ \setlength\codeexamplewidth{4cm}%
+ \addtolength\codeexamplewidth{7pt}%
+ \setkeys{codeexample}{#1}%
+ \parindent0pt
+ \begingroup%
+ \par%
+ \medskip%
+ \let\do\@makeother%
+ \dospecials%
+ \obeylines%
+ \@vobeyspaces%
+ \catcode`\%=13%
+ \catcode`\^^M=13%
+ \find@example}
+\def\endofcodeexample#1{%
+ \endgroup%
+ \ifcode@execute%
+ \setbox\codeexamplebox=\hbox{%
+ {%
+ {%
+ \returntospace%
+ \commenthandler%
+ \xdef\code@temp{#1}% removes returns and comments
+ }%
+ \colorbox{graphicbackground}{\color{black}\ignorespaces%
+ \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}%
+ }%
+ }%
+ \ifdim\wd\codeexamplebox>\codeexamplewidth%
+ \def\code@start{\par}%
+ \def\code@flushstart{}\def\code@flushend{}%
+ \def\code@mid{\parskip2pt\par\noindent}%
+ %\def\code@width{\linewidth-6pt}% XXX
+ \setlength\finalcodeexamplewidth{\linewidth} % XXX
+ \addtolength\finalcodeexamplewidth{-6pt} % XXX
+ \def\code@end{}%
+ \else%
+ \def\code@start{%
+ \linewidth=\textwidth%
+ \parshape \@ne 0pt \linewidth
+ \leavevmode%
+ \hbox\bgroup}%
+ \def\code@flushstart{\hfill}%
+ \def\code@flushend{\hbox{}}%
+ \def\code@mid{\hskip6pt}%
+ %\def\code@width{\linewidth-12pt-\codeexamplewidth}% XXX
+ \setlength\finalcodeexamplewidth{\linewidth} % XXX
+ \addtolength\finalcodeexamplewidth{-12pt} % XXX
+ \addtolength\finalcodeexamplewidth{-\codeexamplewidth} % XXX
+ \def\code@end{\egroup}%
+ \fi%
+ \code@start%
+ \noindent%
+ \begin{minipage}[t]{\codeexamplewidth}\raggedright
+ \hrule width0pt%
+ \footnotesize\vskip-1em%
+ \code@flushstart\box\codeexamplebox\code@flushend%
+ \vskip-1ex
+ \leavevmode%
+ \end{minipage}%
+ \else%
+ \def\code@mid{\par}
+ %\def\code@width{\linewidth-6pt}% XXX
+ \setlength\finalcodeexamplewidth{\linewidth} % XXX
+ \addtolength\finalcodeexamplewidth{-6pt} % XXX
+ \def\code@end{}
+ \fi%
+ \code@mid%
+ \colorbox{codebackground}{%
+% \begin{minipage}[t]{\code@width}% XXX
+ \begin{minipage}[t]{\the\finalcodeexamplewidth}%
+ {%
+ \let\do\@makeother
+ \dospecials
+ \frenchspacing\@vobeyspaces
+ \normalfont\ttfamily\footnotesize
+ \typesetcomment%
+ \@tempswafalse
+ \def\par{%
+ \if@tempswa
+ \leavevmode \null \@@par\penalty\interlinepenalty
+ \else
+ \@tempswatrue
+ \ifhmode\@@par\penalty\interlinepenalty\fi
+ \fi}%
+ \obeylines
+ \everypar \expandafter{\the\everypar \unpenalty}%
+ #1}
+ \end{minipage}}%
+ \code@end%
+ \par%
+ \medskip
+ \end{codeexample}
+}
+
+\def\endcodeexample{}
+
+
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+% code from various pgf/tikz source files and own modifications or additions
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+
+\newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist}
+\newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt\item\strut{#1}\par\topsep=0pt}
+\newcommand\pgfmanualbody{\parskip3pt}
+
+\definecolor{darkred}{rgb}{0.75,0,0}
+\definecolor{green}{rgb}{0,.75,0}
+
+\def\bschar{{\char`\\}}
+
+\newcommand{\stylekeyheadline}[2][\pgfutil@empty]{%
+ \pgfmanualentryheadline{\texttt{\color{darkred}/tikz/#2}%
+ \def\pgf@test{#1}%
+ \ifx\pgf@test\pgfutil@empty%
+ \else%
+ \texttt{=}#1%
+ \fi%
+ \index{#2@\texttt{#2} key}}%
+}
+
+\newenvironment{stylekey}[2][]{
+ \begin{pgfmanualentry}
+ \stylekeyheadline[#1]{#2}
+ \pgfmanualbody
+}{
+ \end{pgfmanualentry}
+}
+\newcommand{\commandentry}[2][]{%
+ \texttt{\color{darkred}\textbackslash #2}#1%
+ \index{#2@\texttt{\textbackslash #2}}
+}
+\newenvironment{command}[2][]{
+ \begin{pgfmanualentry}
+ \pgfmanualentryheadline{\commandentry{#2}{#1}}
+ \pgfmanualbody
+}{
+ \end{pgfmanualentry}
+}
+\newcommand\arrowtip[1]{
+ \texttt{#1}\index{Arrow tips!mandatory@\protect\texttt{mandatory}}%
+}
+
+\newcommand{\opt}[1]{\color{green}#1}
+\newcommand{\meta}[1]{$\langle$\textit{#1}$\rangle$}
+\newcommand{\marg}[1]{\texttt{\textbraceleft}\meta{#1}\texttt{\textbraceright}}
+\newcommand{\oarg}[1]{\texttt{\textbraceleft} \texttt{\textbraceright}}
+
+% Global styles:
+\tikzset{
+ shape example/.style={
+ color=black!30,
+ draw,
+ fill=yellow!30,
+ line width=.25cm, % .5
+ inner xsep=1.25cm, % 2.5
+ inner ysep=0.25cm} % 0.5
+}
+
+\def\tikzname{Ti\emph{k}Z}
+
+\makeatother
+
+%%% Enable '|' to type verbatim
+
+\usepackage{fancyvrb}
+\DefineShortVerb{\|}
+
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+\endinput
diff --git a/graphics/pgf/contrib/tkz-orm/tkz-orm.bib b/graphics/pgf/contrib/tkz-orm/tkz-orm.bib
new file mode 100644
index 0000000000..08c5d8b1da
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/tkz-orm.bib
@@ -0,0 +1,26 @@
+@misc{Halpin2005,
+ title = {{ORM 2 Graphical Notation}},
+ author = {Terry Halpin},
+ institution = {Neumont University},
+ number = 1,
+ year = 2005,
+ url = {http://www.orm.net/pdf/ORM2_TechReport1.pdf}
+}
+@book{Halpin2008,
+ title = {Information Modeling and Relational Databases},
+ author = {Terry Halpin and Tony Morgan},
+ isbn = {978-0-12-373568-3},
+ publisher = {Morgan Kaufmann},
+ year = 2008,
+ description = {2nd edition}
+}
+@misc{GPL2,
+ title = {{GNU Public License Version 2}},
+ publisher = {Free Software Foundation},
+ year = 1991,
+}
+@misc{LPPL,
+ title = {{LaTeX Project Public License (LPPL) Version 1.3c}},
+ publisher = {LaTeX3 Project},
+ year = 2008,
+}
diff --git a/graphics/pgf/contrib/tkz-orm/tkz-orm.pdf b/graphics/pgf/contrib/tkz-orm/tkz-orm.pdf
new file mode 100644
index 0000000000..3f240bdb79
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/tkz-orm.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tkz-orm/tkz-orm.sty b/graphics/pgf/contrib/tkz-orm/tkz-orm.sty
new file mode 100644
index 0000000000..749a1f55ee
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/tkz-orm.sty
@@ -0,0 +1,1123 @@
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+%
+% tkz-orm.sty - Object-Role Modeling Diagrams in LaTeX
+%
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+% This is file may be be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% Copyright 2009-2016 by Jakob Voss, Camil Staps
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{tkz-orm}[2016/01/15 v0.1.4 Object-Role Modeling]
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+\RequirePackage{tikz}[2009/09/04]
+
+%%%% Required pgf/TikZ libraries
+%\usetikzlibrary{calc}
+\usepgflibrary{shapes.multipart}
+\usetikzlibrary{shadows}
+\usetikzlibrary{positioning}
+\usetikzlibrary{calc}
+\usetikzlibrary{fit}
+
+\makeatletter
+
+%%%% Options
+
+%\DeclareOption*{%
+% \PackageWarning{tkz-orm}{Unknown option ‘\CurrentOption’}%
+%}
+
+\def\orm@error#1{\relax}% TODO
+%\def\orm@error#1{\PackageWarning{tkz-orm}{#1}}%
+
+%\pgfkeysdefargs{/tikz/ormcolorlet}{#1}{\colorlet{#2}{#1}}
+% \pgfkeys{/orm/.is family} % TODO
+
+\def\tkzorm{\textsf{tkz-orm}}
+
+%%%% ORM color constants
+\colorlet{constraintcolor}{magenta!100}
+\colorlet{ormconstraintcolor}{magenta!100}
+\colorlet{ormdeonticcolor}{blue!100}
+\colorlet{ormimpliedcolor}{gray!100}
+
+\def\orm@constraint@stroke{magenta}
+\def\orm@constraint@fill{magenta}
+
+\pgfkeysdefargs{/tikz/constraintcolor}{#1}{\colorlet{constraintcolor}{#1}}
+
+%%%% ORM width and length
+\newlength{\orm@linewidth}
+\setlength{\orm@linewidth}{0.25mm}
+
+%%%% ORM fonts
+\newcommand{\orm@font}{\sffamily\small}
+\newcommand{\orm@font@bold}{\bfseries\sffamily\small}
+\newcommand{\orm@font@tiny}{\sffamily\tiny}
+\newcommand{\orm@font@scriptsize}{\sffamily\scriptsize}
+\newcommand{\orm@font@bold@scriptsize}{\bfseries\sffamily\scriptsize}
+
+%%%% Text markup
+
+% textsubscript may not be defined like textsuperscript
+\newcommand{\orm@textsubscript}[1]{%
+ {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+
+% similar to \blacktriangle (could better be implemented directly in pgf)
+\def\orm@blacktriangle#1{
+ \tikz \node[draw=none,inner sep=.2ex] {
+ \tikz [#1]\path[fill=black]
+ (0,0) -- (.6ex,1.3ex) -- (1.2ex,0) -- cycle;};
+}
+\def\ormarrowup{\orm@blacktriangle{rotate=0}}
+\def\ormarrowdown{\orm@blacktriangle{rotate=180}}
+\def\ormarrowleft{\orm@blacktriangle{rotate=90}}
+\def\ormarrowright{\orm@blacktriangle{rotate=-90}}
+
+\def\ormtext{\orm@font}
+\def\ormbf{\orm@font@bold}
+\def\ormc{\orm@font\color{constraintcolor}}
+\def\ormsup#1{\textsuperscript{\orm@font@scriptsize #1}}
+\def\ormsub#1{\orm@textsubscript{\orm@font@scriptsize #1}}
+\def\ormind#1{\textsuperscript{\orm@font@bold@scriptsize\color{constraintcolor} #1}}
+\def\ormbraces#1{{\orm@font\textbraceleft#1\textbraceright}}
+\def\ormvalues#1{\ormc{\ormbraces{#1}}}
+
+\def\ormleft#1{{\ormarrowleft\ormtext #1}}
+\def\ormup#1{{\ormtext #1\ormarrowup}}
+
+% TODO: add '*' variant in constraint color for each command
+
+%%% Sizes
+\def\orm@role@linewidth{\orm@linewidth} % 0.25mm
+\def\orm@role@width{4mm}
+\def\orm@role@height{2.5mm}
+
+
+%%%% ORM styles
+
+\pgfkeys{/tikz/constraint stroke/.store in=\orm@constraint@stroke}
+\pgfkeys{/tikz/constraint fill/.store in=\orm@constraint@fill}
+\pgfkeys{/tikz/constraint color/.style={constraint stroke=#1,constraint fill=#1}}
+
+
+\tikzstyle{every orm line}= [solid,draw=black,line width=\orm@linewidth,-]
+\tikzstyle{orm}= [font=\orm@font,node distance=4mm,
+ %label distance=1.5mm,
+ %line width=\orm@linewidth,
+ label distance=1.25mm
+ ]
+\tikzstyle{orm-spacious}= [orm,
+ every object/.style={shape=circle}
+ ]
+
+\tikzstyle{every orm}= [every orm line,fill=white,orm]
+
+\tikzstyle{zoomed}= [line width=\orm@linewidth*1.5]
+
+\tikzstyle{every object}= []
+\tikzstyle{every entity}= []
+\tikzstyle{entity}= [every orm,
+ shape=rectangle,rounded corners,
+ align=center,minimum size=6mm,
+ every object,every entity]
+
+\tikzstyle{every value}= []
+\tikzstyle{value}= [every orm,
+ shape=rectangle,rounded corners,densely dashed,
+ align=center,minimum size=6mm,
+ every object,every value]
+
+
+\tikzstyle{relationship}= [every orm line,every relationship]
+\tikzstyle{relation}= [relationship]
+\tikzstyle{plays}= [relationship]
+\tikzstyle{every relationship}= []
+
+
+\tikzstyle{role index}= [font=\orm@font@tiny,inner sep=0,minimum width=\orm@role@width]
+
+
+\tikzstyle{every predicate}= []
+
+%%% Shortcuts in tikzpicture
+\tikzaddtikzonlycommandshortcutdef{\entity}{\node[entity]}
+\tikzaddtikzonlycommandshortcutdef{\value}{\node[value]}
+
+\tikzaddtikzonlycommandshortcutdef{\unary}{\node[role]}
+\tikzaddtikzonlycommandshortcutdef{\role}{\node[role]}
+\tikzaddtikzonlycommandshortcutdef{\binary}{\node[roles]}
+\tikzaddtikzonlycommandshortcutdef{\roles}{\node[roles]}
+\tikzaddtikzonlycommandshortcutdef{\ternary}{\node[roles=3]}
+
+\tikzaddtikzonlycommandshortcutdef{\vunary}{\node[vrole]}
+\tikzaddtikzonlycommandshortcutdef{\vrole}{\node[vrole]}
+\tikzaddtikzonlycommandshortcutdef{\vbinary}{\node[vroles]}
+\tikzaddtikzonlycommandshortcutdef{\vroles}{\node[vroles]}
+\tikzaddtikzonlycommandshortcutdef{\vternary}{\node[vroles=3]}
+
+\tikzaddtikzonlycommandshortcutdef{\plays}{\draw[relationship]}
+
+% TODO: add error message if matrix package not loaded ?
+\tikzaddtikzonlycommandshortcutdef{\rules}{\matrix[row sep=0mm,nodes={right}]}
+
+\tikzaddtikzonlycommandshortcutdef{\limits}{\draw[limits]}
+\tikzaddtikzonlycommandshortcutdef{\limited}{\draw[limits]}
+\tikzaddtikzonlycommandshortcutdef{\limitsto}{\draw[limits to]}
+
+\tikzaddtikzonlycommandshortcutdef{\constraint}{\node[text=constraintcolor]}
+
+%%%% Textual rules
+
+\tikzset{rule/.style args={#1}{%
+ append after command={%
+ \bgroup%
+ [current point is local=true]
+ (\tikzlastnode.north west) node[font=\orm@font@bold@scriptsize,
+ anchor=north east,inner sep=0,text=constraintcolor] {#1}
+ \egroup%
+ },
+ orm,inner sep=0.5mm,
+}}
+\tikzset{rule/.default={}}
+
+
+%%%% Predicates and roles
+\tikzstyle{all predicates}=[
+ every orm line,
+ fill=white,
+ rectangle split,
+ inner sep=0
+]
+
+\tikzset{roles/.style args={#1}{
+ all predicates,rectangle split parts=#1, rectangle split allocate boxes=#1,
+ rectangle split horizontal=true,
+ rectangle split empty part height=2.5mm,rectangle split empty part width=2.25mm, % 4-1.5 = 2.5
+% every label/.style={label distance=1.5mm}
+%label distance=1.5mm
+ every predicate
+}}
+\tikzset{roles/.default={2}}
+
+\tikzset{vroles/.add style={}{roles=#1,rotate=90}}
+\tikzset{vroles/.default={2}}
+\tikzstyle{role}=[roles=1]
+\tikzstyle{vrole}=[vroles=1]
+
+\tikzstyle{role name}=[font=\orm@font,color=blue,inner sep=0.5mm]
+
+%% end of roles
+
+% TODO: read
+% http://www.latex-project.org/guides/clsguide.pdf
+
+\pgfkeyssetvalue{/tkzorm/constraintstroke}{constraintcolor}
+\pgfkeyssetvalue{/tkzorm/constraintfill}{constraintcolor}
+
+%%%
+% arrow heads
+
+% dot as arrow head (no color)
+\pgfarrowsdeclare{dot}{dot}{
+ \pgfutil@tempdima=0.2pt%
+ \advance\pgfutil@tempdima by.2\pgflinewidth%
+ \pgfutil@tempdimb=5.5\pgfutil@tempdima\advance\pgfutil@tempdimb
+ by\pgflinewidth
+ \pgfarrowsleftextend{+-\pgfutil@tempdimb}
+ \pgfutil@tempdimb=1.5\pgfutil@tempdima\advance\pgfutil@tempdimb
+ by.5\pgflinewidth
+ \pgfarrowsrightextend{+\pgfutil@tempdimb}
+}{
+ \pgfutil@tempdima=0.2pt%
+ \advance\pgfutil@tempdima by.2\pgflinewidth%
+ \pgfsetdash{}{+0pt}
+ \pgfpathcircle{\pgfqpoint{+3\pgfutil@tempdima}{0pt}}{+4.5\pgfutil@tempdima}
+ \pgfsetstrokecolor{\orm@constraint@stroke}
+ \pgfsetfillcolor{\orm@constraint@fill}
+ %\pgfsetfillcolor{\pgfkeysvalueof{/tkzorm/constraintfill}}
+ \pgfusepathqfillstroke
+}
+
+% mandatory constraint dot arrow head
+\pgfarrowsdeclare{mdot}{mdot}{
+ \pgfarrowsrightextend{0pt}% put arrow head over the tip
+ \pgfutil@tempdima=0.25mm\advance\pgfutil@tempdima by 0.5\pgflinewidth% lw
+ \pgfarrowsleftextend{+-\pgfutil@tempdima}% for arrow composing
+}{
+ \pgfutil@tempdima=0.5mm\advance\pgfutil@tempdima by \pgflinewidth% radius
+ \pgfutil@tempdimb=0.25mm\advance\pgfutil@tempdimb by 0.5\pgflinewidth% lw
+ \pgfpathcircle{\pgfqpoint{0.5\pgflinewidth}{0pt}}{\pgfutil@tempdima}
+ \pgfsetfillcolor{ormconstraintcolor}
+ \pgfusepathqfill
+}
+
+% implied mandatory constraint dot arrow head
+\pgfarrowsdeclare{idot}{idot}{
+ \pgfarrowsrightextend{0pt}% put arrow head over the tip
+ \pgfutil@tempdima=0.25mm\advance\pgfutil@tempdima by 0.5\pgflinewidth% lw
+ \pgfarrowsleftextend{+-\pgfutil@tempdima}% for arrow composing
+}{
+ \pgfutil@tempdima=0.5mm\advance\pgfutil@tempdima by \pgflinewidth% radius
+ \pgfpathcircle{\pgfqpoint{0.5\pgflinewidth}{0pt}}{\pgfutil@tempdima}
+ \pgfsetfillcolor{ormimpliedcolor}
+ \pgfusepathqfill
+}
+
+% deontic mandatory constraint dot arrow head
+\pgfarrowsdeclare{odot}{odot}{
+ \pgfutil@tempdima=0.5mm\advance\pgfutil@tempdima by 1.0\pgflinewidth% radius
+ \pgfarrowsrightextend{0.5\pgfutil@tempdima}% put arrow head over the tip
+ \pgfarrowsleftextend{0pt}% for arrow composing
+}{
+ %\pgfutil@tempdima=0.5mm\advance\pgfutil@tempdima by 1.0\pgflinewidth% radius
+ %\pgfutil@tempdimb=0.25mm\advance\pgfutil@tempdimb by 0.5\pgflinewidth% lw
+ %\advance\pgfutil@tempdima by -0.5\pgfutil@tempdimb% -linewidth
+ \pgfutil@tempdima=0.475mm\advance\pgfutil@tempdima by 0.75\pgflinewidth% r-lw
+ \pgfutil@tempdimb=0.25mm\advance\pgfutil@tempdimb by 1\pgflinewidth% lw
+ \pgfpathcircle{\pgfqpoint{\pgfutil@tempdimb}{0pt}}{\pgfutil@tempdima}
+ \pgfutil@tempdima=0.25mm\advance\pgfutil@tempdima by 0.5\pgflinewidth% lw
+ \pgfsetdash{}{+0pt}
+ \pgfsetlinewidth{\pgfutil@tempdima}
+ \pgfsetstrokecolor{ormdeonticcolor}
+ \pgfsetfillcolor{white}
+ \pgfusepathqfillstroke
+}
+
+% implied deontic mandatory constraint dot arrow head
+\pgfarrowsdeclare{iodot}{iodot}{
+ \pgfutil@tempdima=0.5mm\advance\pgfutil@tempdima by 1.0\pgflinewidth% radius
+ \pgfarrowsrightextend{0.5\pgfutil@tempdima}% put arrow head over the tip
+ \pgfarrowsleftextend{0pt}% for arrow composing
+}{
+ \pgfutil@tempdima=0.475mm\advance\pgfutil@tempdima by 0.75\pgflinewidth% r-lw
+ \pgfutil@tempdimb=0.25mm\advance\pgfutil@tempdimb by 1\pgflinewidth% lw
+ \pgfpathcircle{\pgfqpoint{\pgfutil@tempdimb}{0pt}}{\pgfutil@tempdima}
+ \pgfutil@tempdima=0.25mm\advance\pgfutil@tempdima by 0.5\pgflinewidth% lw
+ \pgfsetdash{}{+0pt}
+ \pgfsetlinewidth{\pgfutil@tempdima}
+ \pgfsetstrokecolor{ormimpliedcolor}
+ \pgfsetfillcolor{white}
+ \pgfusepathqfillstroke
+}
+
+
+% filled arrow for subtyping, subset constraints and value-comparision constraints
+\pgfarrowsdeclare{orm arrow}{orm arrow}
+{
+ \pgfutil@tempdima=0.5pt%
+ \advance\pgfutil@tempdima by.1\pgflinewidth%
+ \pgfutil@tempdimb=8.705\pgfutil@tempdima\advance\pgfutil@tempdimb by.5\pgflinewidth%
+ \pgfarrowsleftextend{+-\pgfutil@tempdimb}
+ \pgfutil@tempdimb=.5\pgfutil@tempdima\advance\pgfutil@tempdimb by1.28\pgflinewidth%
+ \pgfarrowsrightextend{+\pgfutil@tempdimb}
+}{
+ \pgfutil@tempdima=0.5pt%
+ \advance\pgfutil@tempdima by.1\pgflinewidth%
+ \pgfsetdash{}{+0pt}
+ \pgfsetmiterjoin
+ \pgfpathmoveto{\pgfpointadd{\pgfqpoint{0.5\pgfutil@tempdima}{0pt}}{\pgfqpointpolar{157}{10\pgfutil@tempdima}}}
+ \pgfpathlineto{\pgfqpoint{0.5\pgfutil@tempdima}{0\pgfutil@tempdima}}
+ \pgfpathlineto{\pgfpointadd{\pgfqpoint{0.5\pgfutil@tempdima}{0pt}}{\pgfqpointpolar{-157}{10\pgfutil@tempdima}}}
+ \pgfpathclose
+ \pgfsetfillcolor{ormconstraintcolor} % TODO: change if implied, deontic etc.
+ %\pgfsetstrokefillcolor{ormconstraintcolor} % TODO: change if implied, deontic etc.
+ \pgfusepathqfillstroke
+}
+
+% line styles that enable the mandatory constraint arrow tip
+\tikzstyle{required} =[relationship,mdot-]
+\tikzstyle{required by} =[relationship,-mdot]
+\tikzstyle{both required} =[relationship,mdot-mdot]
+
+% aliases
+\tikzstyle{mandatory} =[required]
+\tikzstyle{both mandatory}=[both required]
+\tikzstyle{optional} =[relationship]
+
+
+% draw a mandatory constraint arrow tip over a node
+\tikzset{constraint dot/.style={append after command={
+ (\tikzlastnode.center) edge[required] (\tikzlastnode.center)
+}}}
+\tikzstyle{cdot} =[constraint dot]
+
+
+%%%% Constraint symbols
+\tikzstyle{every constraint}= []
+% TODO: every uniqueness bar
+\tikzstyle{every constraint line}= [every orm line,draw=constraintcolor,every constraint]
+%\tikzstyle{every constraint line}= [line width=\orm@linewidth,draw=constraintcolor,solid]
+\tikzstyle{every constraint circle}=[]
+\tikzstyle{constraint circle}= [every orm,every constraint line,
+ shape=circle,
+ font=\orm@font@scriptsize,
+ minimum size=4mm,,inner sep=0pt,
+ every constraint circle]
+\tikzstyle{constraint no circle}= [constraint circle,draw=none,fill=none]
+
+\tikzstyle{limits}= [every constraint line,dotted]
+\tikzstyle{limits to}= [every constraint line,dashed,-orm arrow]
+
+
+% internal uniqueness constraint
+
+% Implied and duplicated model parts:
+
+\tikzstyle{duplicated}= [drop shadow]
+\tikzstyle{duplicated model}= [every orm/.append style={drop shadow},
+ every predicate/.append style={drop shadow}]
+
+\tikzstyle{every implied line}= [constraintcolor=gray!80,thin]
+\tikzstyle{every implied}= [fill=gray!30,every implied line]
+
+\tikzstyle{implied}=[
+ every orm/.append style={every implied},
+ every orm line/.append style={every implied line},,
+ constraint color=gray!100,thin,
+ every relationship/.style={fill=gray!30},
+ required/.append style={idot-},
+ required by/.append style={-idot},
+ both required/.append style={idot-idot}
+]
+\tikzstyle{implied model}=[implied]
+
+\tikzstyle{deontic}= [
+ every orm line/.append style={constraintcolor=blue!100},
+ constraintcolor=blue!100,
+ constraint color=blue!100,
+ required/.append style={odot-},
+ required by/.append style={-odot},
+ both required/.append style={odot-odot}
+]
+
+
+%%%% Constraints
+
+% Define a constraints type
+%
+% #1 = name of the constraint
+% #2 = path code to be drawn above the constraint circle with |append after command|
+%
+\newcommand{\constraintdeclare}[2]{%
+ \tikzset{constraint/#1/.style={constraint circle,append after command={#2}}}%
+}
+
+% Define a constraint alias
+%
+% #1 = alias name
+% #2 = name of the constraint
+%
+\newcommand{\constraintdeclarealias}[2]{%
+ \tikzset{constraint/#1/.style={constraint=#2}}%
+}
+
+% Define a constraint by drawing another node at the some position as the current node
+\newcommand{\constraintdeclareasnode}[2]{
+ \constraintdeclare{#1}{
+ (\tikzlastnode.center) node[anchor=center] {\tikz{#2}}
+}}
+
+% style /tikz/constraint and its keys
+\tikzset{constraint/.is choice}
+
+%\tikzset{constraint/misc/.style={constraint circle,text=constraintcolor}}%
+
+
+%\constraintdeclarealias{le}{symmetric}
+%\tikzset{constraint/le/.append style={label={[text=constraintcolor,font=\orm@font@scriptsize]center:$<$}}}
+
+% TODO: clean up code
+\tikzset{constraint/</.style={
+ constraint circle,
+ append after command={
+ \bgroup%
+ [current point is local=true]
+ (\tikzlastnode) +(180:2mm) node[cdot]{}
+ +(0:2mm) node[cdot]{}
+ \egroup%
+ },
+ label={[text=constraintcolor,font=\orm@font@scriptsize]center:$<$}
+}}
+% TODO: clean up code
+\tikzset{constraint/ge/.style={
+ constraint circle,
+ append after command={
+ \bgroup%
+ [current point is local=true]
+ (\tikzlastnode) +(180:2mm) node[cdot]{}
+ +(0:2mm) node[cdot]{}
+ \egroup%
+ },
+ label={[text=constraintcolor,font=\orm@font@scriptsize]center:$\ge$}
+}}
+% TODO: clean up code
+\tikzset{constraint/>/.style={
+ constraint circle,
+ append after command={
+ \bgroup%
+ [current point is local=true]
+ (\tikzlastnode) +(180:2mm) node[cdot]{}
+ +(0:2mm) node[cdot]{}
+ \egroup%
+ },
+ label={[text=constraintcolor,font=\orm@font@scriptsize]center:$>$}
+}}
+% TODO: clean up code
+\tikzset{constraint/le/.style={
+ constraint circle,
+ append after command={
+ \bgroup%
+ [current point is local=true]
+ (\tikzlastnode) +(180:2mm) node[cdot]{}
+ +(0:2mm) node[cdot]{}
+ \egroup%
+ },
+ label={[text=constraintcolor,font=\orm@font@scriptsize]center:$\le$}
+}}
+
+%\tikzstyle{entity}= [every orm,
+% shape=rectangle,rounded corners,
+% align=center,minimum size=6mm,
+% every object,every entity]
+\tikzset{constraint/text/.style={color=constraintcolor,font=\orm@font,align=center}}
+
+\tikzset{constraint/.default=text}
+
+% TODO: color=constraintcolor
+
+
+%%%% Ring constraints
+
+% TODO: possibly join with cdot
+\tikzstyle{ormdot}= [fill=constraintcolor,radius=.6mm,draw=none]
+
+
+\constraintdeclareasnode{acyclic}{
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \draw [every constraint line]
+ (270:1mm) edge (270:3mm);
+}
+%\constraintdeclarealias{DAG}{acyclic} % directed-acyclic-graph (DAG)
+
+\constraintdeclareasnode{intransitive}{
+ \fill[every constraint line,fill=white,draw=white] circle (2.2mm);
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \path[every constraint line,rounded corners=0] (90:2mm) -- (210:2mm) -- (330:2mm) -- (90:2mm);
+ \draw[every constraint line] (270:0mm) to (270:1.75mm);
+}
+
+% TODO: document
+\constraintdeclareasnode{strongly intransitive}{
+ \fill[every constraint line,fill=white,draw=white] circle (2.2mm);
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (30:1mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \path[every constraint line,rounded corners=0] (90:2mm) -- (210:2mm) -- (330:2mm) -- (90:2mm);
+ \draw[every constraint line] (270:0mm) to (270:1.75mm);
+}
+
+% TODO: document tree and otree
+\constraintdeclareasnode{tree}{
+ \fill[every constraint line,fill=white,draw=white] circle (2.2mm);
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \path[every constraint line,rounded corners=0] (339:2mm) -- (90:2mm) -- (210:2mm);
+}
+
+\constraintdeclareasnode{otree}{
+ \fill[every constraint line,fill=white,draw=white] circle (2.2mm);
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \path[every constraint line,rounded corners=0] (339:2mm) -- (90:2mm) -- (210:2mm);
+ \path[every constraint line,rounded corners=0]
+ (.8mm,-0mm) -- (-.6mm,-1mm) -- (.8mm,-2mm);
+}
+
+\constraintdeclareasnode{purely reflexive}{
+ \path[use as bounding box] (270:2.75mm) -- (90:2.75mm);
+ \path [ormdot] (180:2mm) circle;
+ \draw[every constraint line] (90:1.25mm) to (270:1.25mm);
+% (-.8mm, .4mm) -- (.8mm, .4mm)
+% (-.8mm,-.4mm) -- (.8mm,-.4mm);
+}
+
+\constraintdeclareasnode{reflexive}{
+ \path[use as bounding box] (270:2.75mm) -- (90:2.75mm);
+ \path [ormdot] (180:2mm) circle;
+}
+
+\constraintdeclareasnode{irreflexive}{
+ \path[use as bounding box] (270:2.75mm) -- (90:2.75mm);
+ \path [ormdot] (180:2mm) circle;
+% \draw [every constraint line] (90:1.25mm) -- (270:1.25mm);
+ \draw [every constraint line] (270:1mm) to (270:2.75mm);
+}
+
+\constraintdeclareasnode{symmetric irreflexive}{
+ \path [ormdot] (180:2mm) circle;
+ \path [ormdot] ( 0:2mm) circle;
+ \draw [every constraint line]
+ (-.8mm, .4mm) -- (.8mm, .4mm)
+ (-.8mm,-.4mm) -- (.8mm,-.4mm)
+ (90:1.25mm) to (270:1.25mm);
+}
+
+\constraintdeclareasnode{transitive}{
+ \draw[every constraint line,fill=white,draw=white] circle (2.2mm);
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \draw[every constraint line] (90:2mm) -- (210:2mm) -- (330:2mm) -- (90:2mm);
+}
+
+\constraintdeclareasnode{acyclic intransitive}{
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \path[every constraint line] (90:2mm) -- (210:2mm) -- (330:2mm) -- (90:2mm);
+ \draw[every constraint line] (270:0mm) to (270:2.75mm);
+}
+
+\constraintdeclareasnode{symmetric}{
+ \path [ormdot] (180:2mm) circle;
+ \path [ormdot] ( 0:2mm) circle;
+}
+
+\constraintdeclareasnode{asymmetric}{
+ \path[use as bounding box] (270:2.75mm) -- (90:2.75mm);
+ \path [ormdot] (+2mm,0mm) circle;
+ \path [ormdot] (-2mm,0mm) circle;
+ \draw [every constraint line] (270:1mm) to (270:2.75mm);
+}
+
+\constraintdeclareasnode{antisymmetric}{
+ \path [ormdot] (180:2mm) circle;
+ \path [ormdot] ( 0:2mm) circle;
+ \draw[every constraint line] (90:2.75mm) to (270:2.75mm);
+}
+
+\constraintdeclareasnode{tree}{
+ \draw [every constraint line,fill=white,draw=white] circle (2.2mm);
+ \path [ormdot] (90:2mm) circle;
+ \path [ormdot] (210:2mm) circle;
+ \path [ormdot] (330:2mm) circle;
+ \draw [every constraint line] (210:2mm) -- (90:2mm) -- (330:2mm);
+}
+
+% TODO: strictly order, total, connected, etc.
+
+
+% TODO: test and document this
+\tikzset{objectification/.style={
+ entity,fill=none,
+ append after command={
+ \bgroup%
+ [current point is local=true]
+ node[orm,above=0 of \tikzlastnode] {``#1''}
+ \egroup%
+ }
+}}
+
+
+%%%% Subtypes
+ % TODO: how to get current line width?
+\tikzstyle{inheritance}=[line width=\orm@linewidth*1.5,>=orm arrow,
+ draw,color=constraintcolor]
+\tikzstyle{subtype}=[inheritance,<-,solid]
+\tikzstyle{suptype}=[inheritance,->,solid]
+\tikzstyle{subinterface}=[subtype,dashed]
+\tikzstyle{supinterface}=[suptype,dashed]
+
+%%%% Role indices
+
+\tikzset{index/.code={\orm@parse@index#1:\pgf@nil}}
+\tikzset{index/.default=1}
+
+\def\orm@parse@index#1:#2\pgf@nil{%
+ \def\orm@temp{#2}%
+ \ifx\orm@temp\pgfutil@empty%
+ \orm@@parse@index1:#1:\pgf@nil%
+ \else%
+ \orm@@parse@index#1:#2\pgf@nil%
+ \fi%
+}
+
+% \orm@verticalfalse
+% \orm@verticaltrue
+% \tikz@do@alignfalse
+
+\def\orm@@parse@index#1:#2:\pgf@nil{%
+ \tikzset{append after command={%
+ \bgroup%
+ [current point is local=true]
+ let \n1 = {#1*\orm@role@width} in
+ (\tikzlastnode.west) to[draw=none]
+ node[role index,pos=1,sloped,anchor=east] {#2}
+ ($(\tikzlastnode.west)!\n1!(\tikzlastnode.east)$)
+ \egroup%
+ }
+}}
+\tikzset{index/.default=1}
+
+
+%%%% Uniqueness constraint bars
+
+\def\orm@rolebar@length#1{#1*\orm@role@width-2*\orm@role@linewidth}
+\def\orm@rolebar@shift{0.75mm} % = 3*0.25mm
+
+\def\orm@rolebar@xshifta#1{\orm@role@linewidth+#1*\orm@role@width-\orm@role@width}
+\def\orm@rolebar@xshiftb#1{#1*\orm@role@width-\orm@role@linewidth}
+\def\orm@rolebar@yshift#1{%
+ \ifnum#1<0-\fi0.5*\orm@role@height+#1*\orm@rolebar@shift%
+}
+
+\tikzstyle{uniqueness bar}=[every constraint line,-]
+\tikzstyle{skipped uniqueness bar}=[
+ every constraint line,-,dotted,preaction={every constraint line,-,white}
+]
+
+\def\orm@unique@bar@normal{uniqueness bar}
+\def\orm@unique@bar@skipped{skipped uniqueness bar}
+\global\let\orm@unique@bar@style=\orm@unique@bar@normal
+
+%%
+% Styles to draw external constraints
+%
+\pgfkeys{
+ /orm/external constraint/.style={
+ every constraint line,
+ fill=white,text=constraintcolor,align=center,
+ font=\orm@font@scriptsize,minimum size=4mm,inner sep=0pt
+ }
+}
+
+% Defines an external constraints as node shape, based on the circle shape
+% The symbol is *always* drawn but circle and fill can be modified.
+% You can still modify the layout via color, line width, stroke opacity.
+% The shapes do not respect outer sep (outer xsep/outer ysep) yet (TODO).
+\newcommand{\constraintdeclareshape}[2]{%
+ \expandafter\pgfdeclareshape{#1}{
+ \inheritsavedanchors[from=circle]
+ \inheritanchor[from=circle]{north}
+ \inheritanchor[from=circle]{north west}
+ \inheritanchor[from=circle]{north east}
+ \inheritanchor[from=circle]{center}
+ \inheritanchor[from=circle]{west}
+ \inheritanchor[from=circle]{east}
+ \inheritanchor[from=circle]{mid}
+ \inheritanchor[from=circle]{mid west}
+ \inheritanchor[from=circle]{mid east}
+ \inheritanchor[from=circle]{base}
+ \inheritanchor[from=circle]{base west}
+ \inheritanchor[from=circle]{base east}
+ \inheritanchor[from=circle]{south}
+ \inheritanchor[from=circle]{south west}
+ \inheritanchor[from=circle]{south east}
+ \inheritanchorborder[from={circle}]
+ \backgroundpath{% \behindbackgroundpath and \beforebackgroundpath don't do.
+ \pgfsetdash{}{0pt}% solid circle
+ \pgfutil@tempdima=\radius%
+ \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}%
+ \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}%
+ \ifdim\pgf@xb<\pgf@yb%
+ \advance\pgfutil@tempdima by-\pgf@yb%
+ \else%
+ \advance\pgfutil@tempdima by-\pgf@xb%
+ \fi%
+ \pgfpathcircle{\centerpoint}{\pgfutil@tempdima}%
+ }
+ \foregroundpath{%
+ \pgfsetdash{}{0pt}%
+ \pgfsetbuttcap%
+ \pgfsetmiterjoin%
+ #2 \pgfusepathqstroke%
+ }
+ }
+ \tikzset{constraint/#1/.style={/orm/external constraint,shape=#1}}
+ \tikzset{#1 constraint/.style={/orm/external constraint,shape=#1}}
+}
+
+
+\constraintdeclareshape{unique}{
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\radius}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\radius}%
+}
+
+\constraintdeclareshape{preferred unique}{
+ \centerpoint \pgf@xc=\pgf@x \pgf@yc=\pgf@y%
+ \pgfutil@tempdima=\pgflinewidth%
+ \pgfutil@tempdima1.5\pgfutil@tempdima%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\radius\advance\pgf@y by-\pgfutil@tempdima}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\radius\advance\pgf@y by-\pgfutil@tempdima}%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\radius\advance\pgf@y by\pgfutil@tempdima}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\radius\advance\pgf@y by\pgfutil@tempdima}%
+}
+
+\constraintdeclareshape{equal}{
+ \pgfutil@tempdima=\radius% x
+ \pgfutil@tempdima0.4\pgfutil@tempdima%
+ \pgfutil@tempdimb=\radius% y
+ \pgfutil@tempdimb0.2\pgfutil@tempdimb%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgfutil@tempdima\advance\pgf@y by\pgfutil@tempdimb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgfutil@tempdima\advance\pgf@y by\pgfutil@tempdimb}%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgfutil@tempdima\advance\pgf@y by-\pgfutil@tempdimb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgfutil@tempdima\advance\pgf@y by-\pgfutil@tempdimb}%
+}
+
+\constraintdeclareshape{subset}{
+ \pgf@xa=\radius \pgf@xa0.4\pgf@xa% xa = 0.5 r
+ \pgf@ya=\radius \pgf@ya0.4\pgf@ya% ya = 0.4 r
+ \pgf@yb0.5\pgf@ya% yb = 0.5 ya = 0.2 r
+ \pgf@xb=\pgf@xa \advance\pgf@xb by -\pgf@yb%
+
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@y by-\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by \pgf@xa\advance\pgf@y by-\pgf@ya}%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by \pgf@xa}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by-\pgf@xb}%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by \pgf@xa\advance\pgf@y by\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by-\pgf@xb\advance\pgf@y by\pgf@ya}%
+ \pgfpatharc{90}{270}{\pgf@yb}
+}
+
+\constraintdeclareshape{supset}{
+ \pgf@xa=\radius \pgf@xa0.4\pgf@xa% xa = 0.5 r
+ \pgf@ya=\radius \pgf@ya0.4\pgf@ya% ya = 0.4 r
+ \pgf@yb0.5\pgf@ya% yb = 0.5 ya = 0.2 r
+ \pgf@xb=\pgf@xa \advance\pgf@xb by -\pgf@yb%
+
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@y by-\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by \pgf@xa\advance\pgf@y by-\pgf@ya}%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by \pgf@xb}%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@y by\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by \pgf@xb\advance\pgf@y by\pgf@ya}%
+ \pgfpatharc{90}{-90}{\pgf@yb}
+}
+
+\constraintdeclareshape{exclusive}{% exclusive constraint ('x')
+ \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{45}{\radius}}}%
+ \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{225}{\radius}}}%
+ \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{135}{\radius}}}%
+ \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{-45}{\radius}}}%
+}
+
+% inclusive-or (disjunctive mandatory role) constraint
+\constraintdeclareshape{mandatory}{
+ \pgf@xa=\radius \pgf@xa0.4\pgf@xa%
+ \pgfpathcircle{\centerpoint}{\pgf@xa}
+ \pgfsetfillcolor{constraintcolor} % TODO: constraitfillcolor / not for deontic
+ % use deontic dot instead?
+ \pgfusepathqfillstroke
+}
+
+% exclusive-or constraint ('xor' or 'partition')
+\constraintdeclareshape{partition}{
+ \pgf@xa=\radius \pgf@xa0.4\pgf@xa%
+ \pgfpathcircle{\centerpoint}{\pgf@xa}
+ \pgfsetfillcolor{constraintcolor} % TODO: constraitfillcolor / not for deontic
+ \pgfusepathqfillstroke
+ \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{45}{\radius}}}%
+ \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{225}{\radius}}}%
+ \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{135}{\radius}}}%
+ \pgfpathlineto{\pgfpointadd{\centerpoint}{\pgfqpointpolar{-45}{\radius}}}%
+}
+
+% Collection constraints (not standard ORM2)
+\constraintdeclareshape{rank}{% aka ordered set
+ \pgf@xa=\radius \pgf@xa0.3\pgf@xa%
+ \pgf@ya=\radius \pgf@ya0.4\pgf@ya%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by-\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by-\pgf@ya}%
+}
+\constraintdeclareshape{sequence}{%
+ \pgf@xa=\radius \pgf@xa0.3\pgf@xa%
+ \pgf@ya=\radius \pgf@ya0.4\pgf@ya%
+ \pgf@xc=\radius \pgf@xc0.2\pgf@xc%
+
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by-\pgf@ya}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by-\pgf@ya}%
+ \pgfusepathqstroke
+
+ \pgfsetdash{{\pgflinewidth}{1pt}}{0pt}% dotted
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\radius}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\radius}%
+}
+\constraintdeclareshape{weak sequence}{%
+ \pgf@xa=\radius \pgf@xa0.3\pgf@xa%
+ \pgf@xb=\pgflinewidth%
+ \pgf@yb=\radius \pgf@yb0.15\pgf@yb%
+ \pgf@ya=\radius \pgf@ya0.4\pgf@ya%
+
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by\pgf@ya\advance\pgf@y by\pgf@yb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@y by\pgf@yb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by-\pgf@ya\advance\pgf@y by\pgf@yb}%
+
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@x by-\pgf@xb\advance\pgf@y by-\pgf@yb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@x by-\pgf@xb\advance\pgf@y by-\pgf@ya\advance\pgf@y by-\pgf@yb}%
+ \pgfusepathqstroke
+
+ \pgfsetdash{{\pgflinewidth}{1pt}}{0pt}% dotted
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\radius\advance\pgf@y by\pgf@yb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\radius\advance\pgf@y by\pgf@yb}%
+}
+
+\constraintdeclareshape{weak rank}{% aka poset
+ \pgf@xa=\radius \pgf@xa0.3\pgf@xa%
+ \pgf@xb=\pgflinewidth%
+ \pgf@yb=\radius \pgf@yb0.15\pgf@yb%
+ \pgf@ya=\radius \pgf@ya0.4\pgf@ya%
+
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by\pgf@ya\advance\pgf@y by\pgf@yb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@y by\pgf@yb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by-\pgf@ya\advance\pgf@y by\pgf@yb}%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@x by-\pgf@xb\advance\pgf@y by-\pgf@yb}%
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@x by-\pgf@xb\advance\pgf@y by-\pgf@ya\advance\pgf@y by-\pgf@yb}%
+}
+
+\constraintdeclareshape{counted}{
+ \pgf@xa=\radius \pgf@xa0.5\pgf@xa%
+ \pgf@xb=\radius \pgf@xb0.25\pgf@xb%
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@y by\pgf@xb}
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by\pgf@xb}
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xa\advance\pgf@y by-\pgf@xb}
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xa\advance\pgf@y by-\pgf@xb}
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by\pgf@xb\advance\pgf@y by\pgf@xa}
+ \pgfpathlineto{\centerpoint\advance\pgf@x by\pgf@xb\advance\pgf@y by-\pgf@xa}
+ \pgfpathmoveto{\centerpoint\advance\pgf@x by-\pgf@xb\advance\pgf@y by\pgf@xa}
+ \pgfpathlineto{\centerpoint\advance\pgf@x by-\pgf@xb\advance\pgf@y by-\pgf@xa}
+}
+%\constraintdeclarealias{in bag}{counted}
+%\constraintdeclarealias{in multiset}{counted}
+
+\constraintdeclareshape{external}{} % needed because shapes are in /orm/...
+\constraintdeclareshape{misc}{} % alias for 'external'
+
+%\constraintdeclare{custom}{} % empty constraint circle
+
+\constraintdeclarealias{required}{mandatory}
+\constraintdeclarealias{total}{mandatory}
+\constraintdeclarealias{or}{mandatory}
+\constraintdeclarealias{x}{exclusive}
+\constraintdeclarealias{xor}{partition}
+
+%%
+% Styles to draw uniqueness bars
+%
+\pgfkeys{/orm/.cd,
+ uniqueness bar from/.initial=1,%
+ uniqueness bar to/.initial=1,%
+ uniqueness bar level/.initial=1,%
+ uniqueness bar roles/.initial=1,%
+ uniqueness bar set roles/.style={%
+ /orm/uniqueness bar roles=#1,
+ /pgf/minimum width=#1*4mm
+ },
+ uniqueness bar lower/.initial=0,%
+ uniqueness bar from/.value required,%
+ uniqueness bar to/.value required,%
+ uniqueness bar level/.value required,%
+ uniqueness bar roles/.value required,%
+ uniqueness bar set roles/.value required,%
+ uniqueness bar lower/.value required,%
+ uniqueness bar style/.style={}
+}
+
+%
+% This node shape draws a uniqueness bar above or below a predicate node.
+% You should use is to shape an invisible node of same size and position
+% as the predicate to constraint. The bar is affected by several styles
+% named '/orm/uniqueness bar ...' each.
+%
+\pgfdeclareshape{uniqueness bar}{
+ \inheritsavedanchors[from=rectangle]
+ \inheritanchorborder[from=rectangle]
+ \inheritanchor[from=rectangle]{north}
+ \inheritanchor[from=rectangle]{west}
+ \inheritanchor[from=rectangle]{east}
+ \inheritanchor[from=rectangle]{south}
+ \inheritanchor[from=rectangle]{center}
+ \savedmacro\barlevel{%
+ \edef\barlevel{\pgfkeysvalueof{/orm/uniqueness bar level}}%
+ \edef\barfrom{\pgfkeysvalueof{/orm/uniqueness bar from}}%
+ \edef\barto{\pgfkeysvalueof{/orm/uniqueness bar to}}%
+ \edef\barroles{\pgfkeysvalueof{/orm/uniqueness bar roles}}%
+ \edef\barlower{\pgfkeysvalueof{/orm/uniqueness bar lower}}%
+ }
+ \foregroundpath{
+ \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
+ \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
+ \pgfmathsetlength\pgfutil@tempdima{
+ (\pgf@xb-\pgf@xa-\pgflinewidth) / (\barroles>0 ? \barroles : 1)
+ }% role width
+ \pgf@xb=\pgf@xa
+ \advance\pgf@xa by 1.5\pgflinewidth%
+ \advance\pgf@xa by -1\pgfutil@tempdima%
+ \advance\pgf@xa by \barfrom\pgfutil@tempdima%
+ \advance\pgf@xb by-0.5\pgflinewidth%
+ \advance\pgf@xb by \barto\pgfutil@tempdima%
+ \pgfmathsetlength\pgfutil@tempdima{\barlevel}%
+ \pgfutil@tempdimb=3\pgflinewidth% level distance
+ \ifdim\pgfutil@tempdima<0pt%
+ \advance\pgf@ya by +0.5\pgflinewidth%
+ \advance\pgf@ya by \barlower\pgfutil@tempdimb%
+ \advance\pgf@ya by \barlevel\pgfutil@tempdimb%
+ \pgf@yb=\pgf@ya%
+ \else%
+ \advance\pgf@yb by-0.5\pgflinewidth%
+ \advance\pgf@yb by -\barlower\pgfutil@tempdimb%
+ \advance\pgf@yb by \barlevel\pgfutil@tempdimb%
+ \fi%
+ \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}%
+ \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}%
+ }
+}
+
+
+% Power types
+\tikzset{power/.style args={#1}{
+ append after command={
+ \pgfextra{
+ \node[entity,shape=rectangle,rounded corners,fit={(\tikzlastnode)},label={[font=\orm@font]#1}] at (\tikzlastnode) (\tikzlastnode-power) {};
+ }
+ }
+ }
+}
+
+
+% Sequence types
+\tikzset{sequence/.style args={#1}{
+ append after command={
+ \pgfextra{
+ \node[entity,shape=rectangle,rounded corners=0pt,fit={(\tikzlastnode)},label={[font=\orm@font]#1}] at (\tikzlastnode) (\tikzlastnode-sequence) {};
+ }
+ }
+ }
+}
+
+
+\tikzset{
+ unique/.code={\orm@parse@xunique#1:\pgf@nil},
+ unique/.default=1,
+}
+
+% parses '<which>:<level>' and '<which>'
+\def\orm@parse@xunique#1:#2\pgf@nil{%
+ \def\orm@temp{#2}%
+ \ifx\orm@temp\pgfutil@empty%
+ \orm@@parse@xunique#1:1:\pgf@nil%
+ \else%
+ \orm@@parse@xunique#1:#2\pgf@nil%
+ \fi%
+}
+
+% parses n-m:<level> and n:<level>
+\def\orm@@parse@xunique#1:#2:\pgf@nil{%
+ \pgfutil@in@{-}{#1}%
+ \ifpgfutil@in@%
+ \orm@parse@xunique@@bar#1:#2\pgf@nil%
+ \else%
+ \orm@parse@xunique@@bar#1-#1:#2\pgf@nil%
+ \fi%
+}
+
+\def\orm@parse@xunique@@bar#1-#2:#3\pgf@nil{%
+ \def\orm@tempA{#1}%
+ \ifx\orm@tempA\pgfutil@empty%
+ \relax%
+ \orm@parse@xunique@@bar#2-#2:-1\pgf@nil
+ \else%
+\tikzset{append after command={
+ \bgroup%
+ [current point is local=true]
+ let \p1 = (\tikzlastnode.west), \p2 = (\tikzlastnode.east)
+ in \pgfextra{\pgfmathparse{(\x2-\x1)/4mm}}
+ (\tikzlastnode) node[
+ /orm/uniqueness bar from/.expand once=#1,
+ /orm/uniqueness bar to/.expand once=#2,
+ /orm/uniqueness bar set roles/.expand once=\pgfmathresult,
+ /orm/uniqueness bar level=#3,
+ shape=uniqueness bar,
+ \orm@unique@bar@style,
+ minimum height=2.5mm,
+ /orm/uniqueness bar style
+ ]{}
+ \egroup
+ }}%
+ \fi%
+}
+
+%% Skipped uniqueness bar
+% TODO: remove this duplicated code.
+
+\tikzset{
+ skip unique/.code={\orm@parse@sunique#1:\pgf@nil},
+ skip unique/.default=1,
+}
+
+% parses '<which>:<level>' and '<which>'
+\def\orm@parse@sunique#1:#2\pgf@nil{%
+ \def\orm@temp{#2}%
+ \ifx\orm@temp\pgfutil@empty%
+ \orm@@parse@sunique#1:1:\pgf@nil%
+ \else%
+ \orm@@parse@sunique#1:#2\pgf@nil%
+ \fi%
+}
+
+% parses n-m:<level> and n:<level>
+\def\orm@@parse@sunique#1:#2:\pgf@nil{%
+ \pgfutil@in@{-}{#1}%
+ \ifpgfutil@in@%
+ \orm@parse@sunique@@bar#1:#2\pgf@nil%
+ \else%
+ \orm@parse@sunique@@bar#1-#1:#2\pgf@nil%
+ \fi%
+}
+
+\def\orm@parse@sunique@@bar#1-#2:#3\pgf@nil{%
+ \def\orm@tempA{#1}%
+ \ifx\orm@tempA\pgfutil@empty%
+ \relax%
+ \orm@parse@xunique@@bar#2-#2:-1\pgf@nil
+ \else%
+\tikzset{append after command={
+ \bgroup%
+ [current point is local=true]
+ let \p1 = (\tikzlastnode.west), \p2 = (\tikzlastnode.east)
+ in \pgfextra{\pgfmathparse{(\x2-\x1)/4mm}}
+ \pgfextra{\let\orm@unique@bar@style=\orm@unique@bar@skipped}%
+ (\tikzlastnode) node[
+ /orm/uniqueness bar from/.expand once=#1,
+ /orm/uniqueness bar to/.expand once=#2,
+ /orm/uniqueness bar set roles/.expand once=\pgfmathresult,
+ /orm/uniqueness bar level=#3,
+ shape=uniqueness bar,
+ \orm@unique@bar@style,
+ minimum height=2.5mm
+ ]{}
+ \egroup
+ }}%
+ \fi%
+}
+
+% TODO: add optional parameters and document this
+\tikzstyle{preferred unique}=[unique=1:1,unique=1:2]
+
+\makeatother
+
+%<–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––>
+\endinput
diff --git a/graphics/pgf/contrib/tkz-orm/tkz-orm.tex b/graphics/pgf/contrib/tkz-orm/tkz-orm.tex
new file mode 100644
index 0000000000..dd540d79a6
--- /dev/null
+++ b/graphics/pgf/contrib/tkz-orm/tkz-orm.tex
@@ -0,0 +1,937 @@
+\documentclass[a4paper,10pt]{article}
+
+\usepackage{tkz-orm}
+\usepackage{pgfmanualstyle}
+
+\usetikzlibrary{fit} % fitting library
+\usetikzlibrary{positioning} % for left/right=of ...
+
+\usepackage[colorlinks=false,pdfborder={0 0 0}]{hyperref}
+% [pagebackref=true, backref=true
+\usepackage{multirow}
+
+\usepackage{makeidx}
+\makeindex
+
+\def\ormVersion{0.1.4}
+\def\ormDate{January 15, 2016}
+\newif\ifappendix
+\appendixfalse
+\appendixtrue
+
+% --------------------------------------------------------------
+%% Beginning of the documentation
+% --------------------------------------------------------------
+\title{The \tkzorm\ package\\Object-Role Model Drawing Library}
+\author{Jakob Vo\ss\footnote{jakob.voss@gbv.de}, Camil Staps\footnote{info@camilstaps.nl}}
+\date{Version \ormVersion\\\ormDate\\[5mm]\url{http://purl.org/net/tkz-orm}}
+
+\begin{document}
+\maketitle
+
+\begin{abstract}\noindent
+This package provides styles for drawing Object-Role Model (ORM2) diagrams
+in \TeX\ based on the \textsc{pgf} and \tikzname\ picture environment.
+\end{abstract}
+
+\tableofcontents
+\pagebreak
+
+\section{Introduction}
+\label{sec:introduction}
+
+\tkzorm\ is intended to help you creating Object-Role Model (ORM) diagrams. It is based on the \textsc{pgf} and \tikzname\footnote{Available at \url{http://sourceforge.net/projects/pgf/}.\\This document was created with \tikzname\ version \pgftypesetversion} picture macro package for \TeX. and provides additional styles and commands to typeset ORM2 diagrams. With \tkzorm\ you can ``program'' ORM diagrams just as you ``program'' your document when you use \LaTeX\ -- including the inherental lack of \textsc{wysiwyg}. Unless multi-touch e-paper interfaces become usable, \tkzorm\ can best be combined with a whiteboard or paper and pencil --- but you may also find ways to automatically create ORM diagrams with \tkzorm.
+
+\subsection*{Status of this package}
+This is the developer version of \tkzorm. Please send your comments to the author so the package can be improved. All parts of the package are available at least under the \LaTeX{} Project Public License\cite{LPPL} and the GNU Public license\cite{GPL2}. For details have a look at the file |LICENSE| that is part of this package. The permament URL of \tkzorm is \url{http://purl.org/net/tkz-orm} which redirects you to its current location and a collection of examples.
+
+\subsection*{ORM in a nutshell}
+Object-Role Modeling (ORM)\footnote{See \url{http://www.orm.net/}.} is a fact-oriented modeling language that evolved from the \textit{Natural-language Information Analysis Method} (NIAM) by G.M. Nijssen. The current version (ORM2) is mainly based on works of Terry Halpin. Like ERM, UML, and other data modeling languages ORM helps to identify and abstract information objects, relationships, and rules of a Universe of Discourse to be formalized and implemented on another level. ORM includes a graphical notation and a precise verbalization in natural language. Models can further be validated by populating fact tables with sample data. An overview of the ORM2 graphical notation is given in \cite{Halpin2005} and more details in \cite{Halpin2008}. An ORM model consists of object types (section~\ref{sec:objecttypes}) and predicates (section~\ref{sec:predicates}). Each of the $n$ roles of an $n$-ary predicate is connected to an object type that plays the specific role in this predicate. Furthermore a model can contain constraints (section~\ref{sec:constraints}), subtypes (section~\ref{sec:subtyping}), and other features (section~\ref{sec:additionalfeatures}). \tkzorm also allows you to change the appearance of ORM diagrams (section~\ref{sec:generalstyles}).
+
+\begin{figure}[ht]
+ \centering
+ \begin{tikzpicture}
+ \entity (A) at (0,0) {A};
+ \entity[right=of A] (blank) {};
+ \value[right=of blank] (value) {Value type};
+ \entity[right=of value] (fixedwidth) {Person};
+ \entity[right=of fixedwidth] (tabular) {Activity\\(Code)};
+ \entity[right=of tabular] (typenamelabel) {Type name\\(.reference)};
+ \entity[right=of typenamelabel,zoomed] () {Zoomed};
+ \end{tikzpicture}
+ \caption{Examples of object types in ORM}
+\end{figure}
+
+\pagebreak
+\section{Object Types}
+\label{sec:objecttypes}\index{Object types}\index{Entities}\index{Values}
+Object types are drawn as rectangles with rounded borders. The object's type name is written as node text inside. \emph{Entity types} use solid border lines and \emph{value types} use dashed border lines. The minimal size of an object is set to 6mm$\times$6mm. This package provides the following styles for entities and values:
+
+\begin{stylekey}{entity}
+This style is to be used with nodes that represent entity types.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[entity] at (0,0) {Foo};
+ \node[entity] (unnamed) at (1.2,0) {};
+ \node[entity] at (2.5,0) {Person\\(.name)};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{value}
+This style is to be used with nodes that represent value types.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[value] {Name};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{power}
+This style is to be used with nodes that represent power types.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[entity,power=below:As] {A};
+ \node[entity,power=Bs] at (1.1,0) {B};
+ \node[entity,power] at (2.2,0) {C};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{sequence}
+This style is to be used with nodes that represent sequence types.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[entity,sequence=below:As] {A};
+ \node[entity,sequence=Bs] at (1.1,0) {B};
+ \node[entity,sequence] at (2.2,0) {C};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{every entity}
+\stylekeyheadline[]{every value}
+Each of this styles is envoked by the styles \sty{entity} or \sty{value}. Change one of this styles to change the appearance of entity or value types.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[
+ every entity/.style={draw=blue!50,fill=blue!20},
+ every value/.style={draw=green!50,fill=green!20}]
+ \node[entity] (P) at (0,0) {Person};
+ \node[value] (N) at (1.5,0) {Name};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{every object}
+ This style is envoked by the styles \sty{entity} and \sty{value}. Change this style to change the common appearance of entity and value types.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[
+ every object/.style={shape=rectangle,draw=red}]
+ \node[entity] (P) at (0,0) {Person};
+ \node[value] (N) at (1.5,0) {Name};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\noindent
+Since entity types and value types are very frequent node types in an ORM diagram, there are two special abbreviations for creating object types:
+
+\begin{command}{entity}
+Inside |{tikzpicture}| this is an abbreviation for |\node[entity]|.
+\end{command}
+
+\begin{command}{value}
+Inside |{tikzpicture}| this is an abbreviation for |\node[value]|.
+\end{command}
+
+
+\section{Predicates and Roles}
+\label{sec:predicates}\index{predicates}\index{roles}
+Relationship parts (\emph{roles}) played by objects are shown as boxes of fixed size (4mm$\times$2.5mm). A \emph{predicate} is a sequence of one or more concatenated role boxes. Predicates can be created with the following styles:
+
+\begin{stylekey}[\opt{\meta{number of roles}}]{roles}
+\stylekeyheadline[\opt{1}]{role}
+Shapes the current node as predicate with a given number of role boxes. Numbers from 1 to 20 are supported. The default value is 2 (binary).
+
+\begin{codeexample}[]
+\begin{tikzpicture}[orm]
+ \entity (A) at (0,1) {A};
+ \entity (B) at (2.8,1) {B}
+ edge node[roles=3] (p) {} (A);
+ \entity (C) at (1.4,0) {C} edge (p.south);
+ \node[role] at (2.2,0){} edge (C);
+ \draw (A) |- node[roles,xshift=2mm]{} (C);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey} % roles
+
+\begin{stylekey}[\opt{\meta{number of roles}}]{vroles}
+\stylekeyheadline[\opt{1}]{vrole}
+Shapes the current node as predicate rotated by 90 degree (vertical).
+\end{stylekey} % vroles
+
+\begin{stylekey}{relation}
+\stylekeyheadline[]{relationship}
+\stylekeyheadline[]{plays}
+ This equivalent styles are to be used with connection lines between objects and roles. By default it just includes the style \sty{every orm line} which results in a solid, black line of 0.25mm width.
+% Alternatively of using this style you can enable the general style \sty{orm}
+% (see section~\ref{sec:generalstyles}) and just draw a normal line.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}
+ \node[entity,power] (A) {A};
+ \node[roles] (r) at (1,0) {};
+ \draw[relation] (A-power) -- (r);
+ \node[vrole] at (0,-.8){} edge[relation] (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\noindent
+The following table lists abbreviations that can be used for creating predicate nodes and relationship lines inside |{tikzpicture}|:
+
+\begin{table}[ht]
+\begin{tabular}{lll}
+\textbf{command(s)} & \textbf{abbreviation for} & \\
+\commandentry{unary} or \commandentry{role} & |\node[role]| &
+ \colorbox{graphicbackground}{\tikz \unary{};} \\
+\commandentry{binary} or \commandentry{roles} & |\node[roles]| &
+ \colorbox{graphicbackground}{\tikz \binary{};} \\
+\commandentry{ternary} & |\node[roles=3]| &
+ \colorbox{graphicbackground}{\tikz \ternary{};} \\
+\commandentry{vunary} or \commandentry{vrole} & |\node[vrole]| &
+ \multirow{3}{2cm}{\colorbox{graphicbackground}{
+ \begin{tikzpicture}
+ \vunary at (0,0){} ;
+ \vbinary at (0.6,-0.2){};
+ \vternary at (1.2,-0.4){};
+ \end{tikzpicture}
+ }} \\
+\commandentry{vbinary} or \commandentry{vroles} & |\node[vroles]| \\
+\commandentry{vternary} & |\node[vroles=3]| \\
+\commandentry{plays} & |\draw[relationship]| &
+ \colorbox{graphicbackground}{\tikz \plays (0,0) -- (1,0);} \\
+\end{tabular}
+\end{table}
+
+\noindent The general style of predicates and roles can be modified by the following keys:
+
+\begin{stylekey}{every predicate}
+Changing this style to modify the common appearance of predicates.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[
+ every predicate/.style={draw=blue,fill=green!20}]
+ \entity at (2,0) (B) {B};
+ \entity (A) {A} edge[relation] node[roles]{} (B);
+ \vunary at (0,-0.8) (r) {} edge[relation] (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{every relationship}
+ This style is envoked by the style \sty{relationship}. To change the appearance of explicit relationship lines you can change this style. Please keep in mind that nodes placed on a line by |node| in one operation inherit properties from the line they refer to, so you should create relationship lines with \cmd{plays}.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[orm,
+ every relationship/.style={draw=blue,dotted}]
+ \entity (A) {A};
+ \plays (A) to node[roles]{} (2,0) node(B){B};
+ \vunary at (0,-0.8) (r) {} edge[relation] (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\noindent
+Predicates are drawn either horizontally (\sty{roles}) or vertically (\sty{vroles}) as nodes with one or more parts. Figure~\ref{fig:hanchors} shows some of the anchors. Vertical predicates are rotated by 90 degree so |north| is at the left, |west| is at the bottom etc.
+% TODO: define better anchors or anchor aliases (start=west, end=east, top=north, bottom=south, role 1=one north)
+
+\begin{figure}[h]
+\centering
+\begin{codeexample}[width=10cm]
+\Large
+\begin{tikzpicture}
+ \node[roles=3,shape example,inner ysep=0.75cm] (s) {};
+ \foreach \anchor/\placement in
+ {one north/below, one south/above,
+ three north/below, three south/above,
+ one split/below, one split north/above, one split south/below,
+ two split/below, two split north/above, two split south/below,
+ north/below, south/above, east/below, west/below, center/above,
+ north west/above, north east/above, south west/below, south east/below}
+ \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)}
+ node[\placement] {\scriptsize\texttt{s.\anchor}};
+\end{tikzpicture}
+\end{codeexample}
+\caption{Node anchors of an ORM predicate}
+\label{fig:hanchors}
+\end{figure}
+
+\noindent
+The verbalization of a predicate can be given as |label| next to a predicate. For binary relationships forward and inverse readings can be seperated by a slash. To show the inverse reading, add an arrow tip with the commands \cmd{ormleft} or \cmd{ormup}. Labels for predicates with more then two roles must contain three dots (|\ldots|) for each inner role. Role names and indices can be added by different styles.
+% TODO: Show how to change label distance with style |label distance| :
+% \begin{tikzgraphic}[orm] % needed - there is no "every label/.style={orm}"
+% \node[role,label={R}] (r1) {}; % put the label above
+% \node[role,right=of r1,label={below:R}] (r2) {}; % put the label below
+% \node[role,right=of r2,label={[label distance=1.5mm]above:{R}},unique] (r3) {};
+% \end{tikzgraphic}
+
+\begin{figure}[h]
+\centering
+\begin{codeexample}[]
+\begin{tikzpicture}[orm]
+ \entity at (0,3) (P) {Person};
+ \entity at (3,3) (C) {Car};
+ \entity at (0,0) (L) {License};
+ \entity at (6.6,3) (M) {Maker};
+ \unary[label=valid] at (1.2,0) (V) {} edge (L);
+ \draw (P) to node[roles,
+ label=below:drives,label=\ormleft{is driven by}]{} (C);
+ \draw (P) to node[vroles,label=has,label=below:\ormup{of}]{} (L);
+ \draw (C) to node[roles,label=created by/created]{} (M);
+ \ternary[label=below:drives \ldots by] at (3,1) (t) {};
+ \plays (P) -- (t.west);
+ \plays (C) -- (t);
+ \plays (M) -- (t.east);
+\end{tikzpicture}
+\end{codeexample}
+\end{figure}
+
+\begin{stylekey}{role name}
+This style is to be used with role names. Role names can be displayed in square brackets and blue color next to a role box. % TODO: add role name as 'label' style
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[orm]
+ \entity (A) at (0,0) {A};
+ \entity (B) at (2.8,0) {B};
+ \plays (A) edge node(r)[roles]{} (B);
+ \node[role name,
+ at=(r.north),anchor=south east] {[role1]};
+ \node[role name,
+ at=(r.north),anchor=south west] {[role2]};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}[\meta{n}\opt{\texttt{:}\meta{index}}]{index}
+Adds a role index as small label at the $n$th role box (default: $n$).
+\begin{codeexample}[]
+\begin{tikzpicture}
+\binary[index=1,index=2:X] {};
+\vroles[index=A.1,index=2:A.2] at (.8,0) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+
+\section{Constraints}
+\label{sec:constraints}\index{Constraints}
+ORM provides a rich set of constraints: Mandatory constraints (section~\ref{sec:mandatoryconstraints}) and uniqueness constraints (section~\ref{sec:uniquenessconstraints}) limit the way objects can be combined in predicates. External constraints (section~\ref{sec:externalconstraints}) and subtype constraints (section~\ref{sec:subtyping}) involve multiple roles or object types. All constraints are displayed in magenta and either drawn directly at an object type or role, or linked to one or more object types or role with dotted or dashed lines or arrows (see the styles \sty{limits} and \sty{limits to}). ORM2 defines a set of symbols for external (section~\ref{sec:externalconstraints}), ring (section~\ref{sec:ringconstraints}) and other types of constraints. The general \textsc{tkz-orm} constraint key \sty{constraint} only sets the font to violet. An optional key value can be used to add a predefined constraint symbol at the current position.
+
+\begin{stylekey}[\meta{color}]{constraintcolor}
+Changes the constraint color (default: |magenta!100|).
+\end{stylekey}
+
+\subsection{Uniqueness Constraints}
+\label{sec:uniquenessconstraints}
+By default every row in a fact table is unique. To express additional uniqueness constraints on one or more roles of a fact table or to explicitly express the uniqueness on the full predicate, a \emph{uniqueness bar} is drawn above or below the fact roles. If the bar spans two or more non-adjacent roles, it is drawn as dotted line above or below the excluded roles. Bars can be stacked in multiple levels. To draw uniqueness bars you can use the following styles at predicate nodes:
+
+% TODO: add preferred unique (double line)
+
+\begin{stylekey}[\opt{\meta{from}\texttt{-}\meta{to}\texttt{:}\meta{level}}]{unique}
+Draws a uniqueness constraint bar above one or more roles. All parts of the key value are optional. As default a simple uniqueness bar above (\meta{level}|=1|) the first role (\meta{from}|=1|) is drawn. To make a bar span multiple roles, use the \meta{from}|-|\meta{to} syntax. Negative levels drawn the bar below the roles.
+\begin{codeexample}[]
+\begin{tikzpicture}
+\binary[unique] at (0,0) {};
+\binary[unique=2] at (1.2,0) {};
+\ternary[unique=2-3:-1] at (0.2,-0.6) {};
+\unary[unique=1,unique=1:2] at (1.4,-0.6) {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}[\opt{\meta{from}\texttt{-}\meta{to}\texttt{:}\meta{level}}]{skip unique}
+Draws a dotted uniqueness constraint bar. The syntax is the same as at the \sty{unique} key.
+The bar includes background color in the gaps between dots, so it can be drawn on top of
+another bar.
+\begin{codeexample}[]
+\begin{tikzpicture}
+\ternary[unique=1-3,skip unique=2] {};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{uniqueness bar}
+\stylekeyheadline[]{skipped uniqueness bar}
+This styles can be used to draw a line in the same style as a uniqueness constraint bar or a dotted uniqueness constraint bar.
+\begin{codeexample}[width=3cm]
+\tikz\draw[uniqueness bar] (0,0) -- (2,0);
+\end{codeexample}
+\begin{codeexample}[width=3cm]
+\tikz\draw[skipped uniqueness bar] (0,0) -- (2,0);
+\end{codeexample}
+\end{stylekey}
+
+\noindent
+Please note that elementary $n$-ary predicates should only have uniqueness constraints of at least $n-1$ roles. Picture~\ref{fig:splitternary} shows how to split a ternary predicate with unique constraint bar on one role.
+
+\begin{figure}[h]
+\centering
+\begin{codeexample}[]
+\begin{tikzpicture}[orm] % needs positioning library
+ \ternary[unique] (t) at (0,0) {};
+ \entity[left=of t] {A} edge (t);
+ \entity[above=of t] {B} edge (t);
+ \entity[right=of t] {C} edge (t);
+ \node at (2.3,0) {$\Rightarrow$};
+ \entity (A) at (3,0) {A};
+ \binary[right=of A.north east,yshift=1mm,unique] (t1) {};
+ \binary[right=of A.south east,yshift=-1mm,unique] (t2) {};
+ \plays (A) -- (t1.west); \plays (A) -- (t2.west);
+ \entity[right=of t1] {B} edge (t1);
+ \entity[right=of t2] {C} edge (t2);
+\end{tikzpicture}
+\end{codeexample}
+\caption{A ternary predicate can be split into to binary predicates}
+\label{fig:splitternary}
+\end{figure}
+
+
+\subsection{Mandatory Role Constraints}
+\label{sec:mandatoryconstraints}
+To indicate explicitly that a role is mandatory, a mandatory role dot is added to either end of the line that connects the role to its object. Usually it is placed at the object type end. This package defines the style key \sty{constraint dot} (alias \sty{cdot}) and the following keys which can be used to add mandatory role dots to lines drawn with the |to| operation.
+
+\begin{stylekey}{constraint dot}
+\stylekeyheadline[]{cdot}
+Draws the current node as mandatory role dot.
+\begin{codeexample}[]
+\tikz \node[cdot] {};
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{mandatory}
+\stylekeyheadline[]{required}
+This styles enables the \sty{relationship} style and adds a mandatory role dot at the start of a straight line.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \entity (A) {A};
+ \entity at (2,0) {B} edge[mandatory]
+ node[roles] (p) {} (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{required by}
+This styles enables the \sty{relationship} style and adds a mandatory role dot at the end of a straight line.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \entity (A) {A};
+ \entity at (2,0) {B} edge[required by]
+ node[roles] (p) {} (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{both required}
+\stylekeyheadline[]{both mandatory}
+This styles enables the \sty{relationship} style and adds mandatory role dots at both ends of a straight line.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \entity (A) {A};
+ \entity at (2,0) {B} edge[both required]
+ node[roles] (p) {} (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\noindent To show that either of many roles is mandatory, you can add an \emph{inclusive-or} (\emph{disjunctive mandatory}) role constraint with |constraint=mandatory| as shown in section~\ref{sec:externalconstraints}. By default it is assumed that each entity or value must play at least some role. \emph{Independent object types} whose roles are collectively optional can be marked by an exclamation mark appended to its name. It is recommended not to include implied mandatory constraints unless they they refer to subtypes (section~\ref{sec:subtyping}).
+\index{Independent object types}\index{Object types!Independent}
+
+
+\subsection{External constraints}
+\label{sec:externalconstraints}
+External constraints span multiple roles that may come from different predicates. They are depicted by several circle symbols next the roles they limit, possibly linked to them with a dotted or dashed line (style \sty{limits} and \sty{limits to}). \tkzorm\ implements external constraint symbols as node shapes.
+
+\begin{stylekey}[\opt{\meta{constraint type}}]{constraint}
+ This style sets the font to ORM style on constraint color (violet). If you provide a constraint type as key value, the current node is shaped as constraint circle and the symbol of the specified constraint type is drawn. The most common constraint types are |exclusive| (alias |x|) to indicate that populations of two or more role-sequences must be mutually exclusive, |mandatory| (alias |required|, |total|, and |or|) to indicate that each at least on of two more roles must be played by an object type, and |xor| (alias |partition|) to indicates that exactely one of two or more roles must be played by an object type. These constraints can also be used in subtyping (section~\ref{sec:subtyping}). The constraint type |unique| and |preferred unique| enforces combinations of object types that play a given set of roles to always be the same. The types |equal|, |subset|, and |supset| indicate that tuples of roles have to be equal, subset or superset compared to each other (|supset| is not included in standard ORM2). The constraint type is |external| only draws the circle and can be used for custom constraints.
+ % TODO: see more about rings and collections ...
+\begin{codeexample}[]
+\begin{tikzpicture}[orm]
+ \matrix[column sep=2mm, row sep=2mm]{
+ \node[constraint=x]{}; & \node[right]{exclusive / x}; &
+ \node[constraint=or]{}; & \node[right,text width=2.8cm]
+ {mandatory / total required / or}; &
+ \node[constraint=xor]{}; & \node[right]{xor / partition}; \\
+ \node[constraint=unique] {}; & \node[right]{unique}; &
+ \node[constraint=preferred unique]{};&\node[right]{preferred unique};&
+ \node[constraint=external]{}; & \node[right]{external}; \\
+ \node[constraint=equal] {}; & \node[right]{equal}; &
+ \node[constraint=subset] {}; & \node[right]{subset}; &
+ \node[constraint=supset] {}; & \node[right]{supset}; \\
+ };
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+\index{\texttt{custom} constraint}
+\index{\texttt{x} constraint}
+\index{\texttt{or} constraint}
+\index{\texttt{xor} constraint}
+\index{\texttt{mandatory} constraint}
+\index{\texttt{required} constraint}
+\index{\texttt{total} constraint}
+\index{\texttt{partition} constraint}
+\index{\texttt{unique} constraint}
+\index{\texttt{preferred unique} constraint}
+\index{\texttt{equal} constraint}
+\index{\texttt{subset} constraint}
+\index{\texttt{supset} constraint}
+
+
+\begin{stylekey}{limits} % TODO: add optional parameter
+ This style is to be used with lines that connect constraint circles and roles. It can also be used to link other kinds of constraints (for instance value constraints) to the entity, value, or role they belong to.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}
+ \unary (r1) at (0,0) {};
+ \unary (r2) at (0,-1.4) {};
+ \draw[limits] (r1) to node[constraint=x] {} (r2);
+\end{tikzpicture}
+\end{codeexample}
+ % TODO: example of subtyping constraints
+\end{stylekey}
+
+\begin{stylekey}{limits to} % TODO: add optional parameter
+This style is to be used with directed lines that connect constraint circles and roles. The line is drawn in the same style as \sty{limits} but dashed and with an arrow tip of style \arrowtip{orm arrow} at the head.
+\begin{codeexample}[width=3.4cm]
+\begin{tikzpicture}[orm]
+ \unary[index=2] (a) at (0,0) {};
+ \unary[index=1] (b) at (0,-1.4) {};
+ \draw[limits to] (b) -- (a)
+ node[pos=.4,constraint=subset,name=s]{};
+ \node[right=2mm of s,text width=2.3cm]
+ {Each object that plays role 1 also plays role 2};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{command}[]{limits}
+\end{command}
+\begin{command}[]{limitsto}
+%\stylekeyheadline[]{limits to}
+Inside |{tikzpicture}| these commands can be used as abbreviations for
+|\draw[limits]| and |\draw[limits to]|.
+\begin{codeexample}[width=3.4cm]
+\begin{tikzpicture}[orm]
+\limits (0,.4) to (1,.4); \limitsto (0,0) to (1,0);
+\end{tikzpicture}
+\end{codeexample}
+\end{command}
+
+\begin{command}[\marg{constraint type name}\marg{path code}]{constraintdeclare}
+ This command declares a new constraint type. The \marg{path code} is passed to the |append after command| key to be drawn after the constraint circle. Unless you want to extend ORM you do not need to declare new constraint types. This command is for internal use only!
+\end{command}
+
+\begin{command}[\marg{alias name}\marg{existing constraint type name}]{constraintdeclarealias}
+ This command can be used to create an alias (another name) for an existing constraint type.
+ This command is for internal use only!
+\end{command}
+
+\begin{stylekey}{every constraint}
+ This style is envoked at every constraint. You can change this style to change for instance the constraint color.
+\end{stylekey}
+
+
+\subsection{Ring Constraints}
+\label{sec:ringconstraints}
+
+A ring constraint can be applied to any two roles of a predicate that are
+played by the same object type (or the same supertype). Such constraints can
+also be viewed as properties of a binary relation or as properties of a
+directed graph. There are 10 ring constraints that combined can be used in 26
+forms. The graphical syntax of `irreflexive' and `antisymmetric' provided by
+this package are slightly changed compared to the official ORM2 syntax and
+some combinations are omitted or changed.
+
+%and the two symbols for `asymmetric and
+%intransitive', and for `symmetric and intransitive' have been omitted because
+%of complexity.
+
+% TODO: additional: tree, otree
+% combined: acyclic intransitive, symmetric irreflexive etc.
+\begin{codeexample}[]
+\centering
+\begin{tikzpicture}[orm]
+ \foreach \n/\s in {0/irreflexive,1/asymmetric,2/strongly intransitive,
+ 3/antisymmetric,4/acyclic,5/acyclic intransitive,
+ 6/symmetric,7/purely reflexive,8/symmetric irreflexive,
+ 9/intransitive,10/reflexive,11/transitive}{
+ \path ($mod(\n,3)*(3.4,0)-int(\n/3)*(0,0.8)$) node [constraint=\s] {}
+ +(4mm,0) node[anchor=west] {\s}; };
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{codeexample}[width=2.5cm]
+\begin{tikzpicture}[orm]
+\entity (P) {Person};
+\binary[below=of P,unique=2,label=below:mother of] (r) {};
+\plays (P) to (r.one north) (P) to (r.two north);
+\limits (r.north) to +(-1,0.4) node[constraint=acyclic]{};
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsection{Number and Value Constraints}
+Value constraints, cardinality constraints, and occurrence frequencies can simply be drawn beside the object type or role they refer to, optionally linked to with a dotted or dashed limitation line.
+
+\noindent\textbf{Frequency Constraints} specify the number of times an object can play a role. Usually it is connected to the roles with a limtation line. % TODO: better syntax as pin
+
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}
+\binary[index=1:1] (b) {};
+\limits (b.one south) -- +(0,-.4) node[constraint]{f};
+\end{tikzpicture}
+\end{codeexample}
+
+\noindent A \textbf{Value constraint} indicates which values are allowed in an object type or role. It can be defined by declaring the set of possible values enclosed in curly brackets next to an object or role type. The commands \cmd{ormbraces} and \cmd{ormvalues} are handy abbreviations to create curly brackets.
+\index{value constraints}\index{constraints!values}
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+\entity (A) {A};
+\node[constraint,anchor=north west,inner ysep=0]
+ at (A.north east) {\ormbraces{a, b, c}};
+\end{tikzpicture}
+\end{codeexample}
+
+\noindent\textbf{Value comparision-constraints} are depicted by one of four comparision operators $<$, $\le$ (|le|), $>$, and $\ge$ (|ge|). The constraints are shown at a dashed arrow between two roles in the same way as |constraint=subset| and |constraint=supset| (but the value-comparision is between instances not between sets). Equality can be stated with |constraint=equal| which should not be confused with similar looking |constraint=purely reflexive|.
+\index{value-comparision constraints}\index{constraints!value-comparision}
+\index{\texttt{<} constraint}
+\index{\texttt{>} constraint}
+\index{\texttt{le} constraint}
+\index{\texttt{ge} constraint}
+
+\begin{codeexample}[]
+\tikz \foreach \x/\s in {0/<,1/ge,2/>,3/le}{
+ \draw[limits to] (\x,0) to (\x,1.2);
+ \node[constraint=\s] at (\x,.5) {};
+};
+\end{codeexample}
+
+\noindent\textbf{Cardinality constraints} are rarely included in ORM diagrams since the are often implied by other constraints. However you can explicitely say that each population of an object type or a role includes exactely, at most, or at least a given number of instances. This is done by adding a cardinality constraint next to the object or role. The hash sign (``\#'') stands for the cardinality.
+\index{cardinality constraints}\index{constraints!cardinality}
+
+% TODO: Use text mode instead of math?
+\begin{codeexample}[]
+\begin{tikzpicture}[orm]
+ \entity[label={[constraint]\#=$n$}] {A};
+ \entity[label={[constraint]below:1$\leq$\#$\leq$6}]
+ at (1.1,0) {A};
+ \role[label={[constraint]\#$\leq$2}] at (2,0) {};
+\end{tikzpicture}
+\end{codeexample}
+
+
+
+\subsection{Textual constraints}
+\index{textual constraints}\index{constraints!textual}
+Constraints not expressed by predefined graphical notation may be specified as textual rules. Textual rules can be displayed as footnotes with footnote numbers or signs that mark the involved elements in the diagram.
+
+\begin{stylekey}[\opt{\meta{mark}}]{rule}
+This key is to be used with nodes that contain textual rules. The optional \meta{mark} is shown as footnotes index left to the rule.
+\begin{codeexample}[]
+\begin{tikzpicture}
+\node[rule=1] {{\ormbf Each} Number identifies {\ormbf at most one} Room.};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{command}[]{rules}
+This command is an abbreviation for |\matrix[row sep=0mm,nodes={right}]| inside |{tikzpicture}|.
+Matrices are useful to draw multiple textual rules below each other.
+
+\begin{figure}[h]
+\centering
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \entity (E) {Employee\ormind{1}\\(.nr)};
+ \binary[left=of E.north west,unique=2,label=\ormleft{has}] (h) {};
+ \binary[left=of E.south west,unique=1-2,
+ label=below:\ormleft{uses\ormind{2,3}}] (u) {};
+ \entity[left=of h] (Rank) {Rank\\(.code)};
+ \entity[left=of u] (Car) {CompanyCar\\(.regNr)};
+ \node[constraint=text,align=left,anchor=east] at (Rank.west)
+ {\textbraceleft`Exec',\\`NonExec'\textbraceright};
+ \plays[mandatory] (E) to (h.east);
+ \plays (h) to (Rank) (E) to (u.east) (u) to (Car);
+ \binary[right=of E.north east,unique,label=was born on] (b) {};
+ \binary[right=of E.south east,unique,label=below:was hired on] (i) {};
+ \entity[right=1.8 of E] (Date) {Date\\(mdy)};
+ \plays[mandatory] (E) to (b.west) (E) to (i.west);
+ \plays (b.east) to (Date) (i.east) to (Date);
+ \node[role name,anchor=south west] at (b.east) {[birthdate]};
+ \node[role name,anchor=north west] at (i.east) {[hiredate]};
+ \rules at (-.4,-2) {
+ \node[rule=1] {{\ormbf For each} Employee, birthdate $<$ hiredate.}; \\
+ \node[rule=2] {
+ {\ormbf Each} Employee {\ormbf who} has Rank `NonExec' uses
+ {\ormbf at most one} CompanyCar.};\\
+ \node[rule=3] {
+ {\ormbf Each} Employee {\ormbf who} has Rank `Exec' uses
+ {\ormbf some} CompanyCar.};\\
+ };
+\end{tikzpicture}
+\end{codeexample}
+\end{figure}
+\end{command}
+
+\section{Subtyping}
+\label{sec:subtyping}
+
+To draw type hierarchies you can use the tree syntax of \tikzname.
+Euler diagrams are a less used alternative for simple type hierarchies.
+% TODO: add Euler diagram example
+
+\begin{stylekey}{subtype}
+Draws a subtype relationship arrow from the supertype to the subtype.
+\begin{figure}[h]
+\centering
+\begin{codeexample}[]
+\begin{tikzpicture}[
+ edge from parent/.style=subtype]
+ \node[entity] {Animal}
+ child {node[entity] {Mammal}}
+ child {node[entity] {Bird}
+ child {node[entity] {Penguin}}
+ child {node[entity] {Parrot}}
+ };
+\end{tikzpicture}
+\end{codeexample}
+\end{figure}
+\end{stylekey}
+
+\begin{stylekey}{suptype}
+Works in the same way as \sty{subtype} but with reverse direction.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[entity] (A) {Animal};
+ \node[entity] (S) [right=6mm of A] {Sheep};
+ \draw[suptype] (S) to (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\noindent Multiple inheritance may require to select one path as primary.
+You can distinguish primary and secondary subtypes by drawing the latter
+with a dashed arrow (\sty{subinterface} or \sty{supinterface}).
+
+\begin{stylekey}{subinterface}
+\stylekeyheadline[]{supinterface}
+Draw secondary subtype/supertype relationship arrows.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node[entity] (A) {Animal};
+ \node[entity] (P) [right=8mm of A] {Person};
+ \draw[supinterface] (P) to (A);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+
+\noindent
+Subtype constraints can be shown linked to the subtype arrrows:
+
+\begin{figure}[h]
+\centering
+\begin{codeexample}[]
+\begin{tikzpicture}[orm]
+\foreach \c/\x in {exclusive/0,total/2.5,partition/5}{
+ \entity (A) at (\x,0) {A} [edge from parent/.style=subtype]
+ child {node [entity] (B) {B}} child {node [entity] (C) {C}};
+ \limits ($(A)!.7!(B)$) to node[constraint=\c] {} ($(A)!.7!(C)$);
+ \node at (\x,-2) {\c};
+};
+\end{tikzpicture}
+\end{codeexample}
+\end{figure}
+
+
+\section{Additional Features}
+\label{sec:additionalfeatures}
+%\ldots partly no standard ORM2 \ldots
+
+\subsection{Duplicated and implied parts of a model}
+\label{sec:duplicatedandimplied}
+Sometimes an object type or predicate is referred to without describing all its details because it is defined in an external model or because it is shown duplicated at some other place in the same model. To indicate such an external or duplicated object type or a predicate, a shadow is added to its shape. Alternatively ORM2 allows to add a circumflex ``\^{}'' to an object type's name. A different kind of redundancy are roles and constraints that deduce from other parts of the model. ORM2 includes the possibility to shade redundant roles. This is useful for instance to show conceptual pathes or join fact types that are normally excluded. Moreover ORM allows a \emph{zooming} on object types. This means that only objects and roles connected to a given object type are shown.
+
+\begin{stylekey}{duplicated model}
+This style modifies the styles \sty{every object} and \sty{every predicate} so all object types and predicates in the current scope get a shadow.
+\begin{codeexample}[]
+\begin{tikzpicture}[orm]
+ \begin{scope}[duplicated model]
+ \entity (A) {A};
+ \node[role] (r1) [right=of A] {};
+ \node[role] (r2) [right=0 of r1] {};
+ \draw[relationship] (A) -- (r1);
+ \end{scope}
+ \entity (B) [right=of r2] {B\^{}};
+ \plays (r2) -- (B);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey} % duplicated model
+
+\begin{stylekey}{implied model}
+ This style modifies the styles \sty{every orm line} and \sty{every object} in the current scope to draw all lines thin and all objects filled gray.
+ The style is currently broken.
+\begin{figure}[h]
+\centering
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \matrix[column sep=4mm] {
+ \entity (A) {A}; & \binary (ab) {}; & \entity (B) {B}; &
+ \binary (bc) {}; & \entity (C) {C}; \\ };
+ \plays (A) -- (ab) -- (B) -- (bc) -- (C);
+ \begin{scope}[implied model]
+ \node[constraint=unique] (con) [above=of B] {};
+ \limits (ab.one north) -- (con) -- (bc.two north);
+ \ternary[unique=1-3,skip unique=2] (abc) [below=4mm of B] {};
+ \plays (A) -- (abc.west); \plays (B) -- (abc); \plays (C) -- (abc.east);
+ \end{scope}
+\end{tikzpicture}
+\end{codeexample}
+\end{figure}
+\end{stylekey}
+
+\begin{stylekey}{duplicated}
+\stylekeyheadline[]{implied}
+This styles work like \sty{duplicated model} and \sty{implied model} but only affect the current element.
+The style are currently broken.
+\begin{codeexample}[]
+\begin{tikzpicture}
+\entity[duplicated] (P) {Person};
+\value[implied,right=1.6 of P] (V) {PersonName};
+\draw[implied,both required] (P) to
+ node[roles,unique=1,unique=2]{} (V);
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+
+\begin{stylekey}{zoomed}
+This styles visualizes an object type as {\emph zoomed} by using a thicker line.
+\begin{codeexample}[]
+\begin{tikzpicture}
+\entity at (0,0) {Normal};
+\entity[zoomed] at (2,0) {Zoomed};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+
+\subsection{Arrow heads}
+\label{sec:arrowheads}
+Constraint dots are implemented as arrow heads. The normal constraint
+dot is drawn with arrow head |mdot| for mandatory. Furthemore there is an
+implicit mandatory constraint dot (|idot|), a deontic mandatory constraint
+dot (|odot|), and a implied deontic mandatory constraint dot (|iodot|). You
+\emph{should not} directly use this arrow heads but the mandatory role
+constraints |cdot|, |required| etc. (\ref{sec:mandatoryconstraints}) which
+can be modified by other styles. This feature is not fully tested yet.
+
+\begin{codeexample}[]
+\begin{tikzpicture}[orm]
+\matrix [row sep=2mm,column sep=3mm,every entity/.style={minimum width=10mm}]{
+ \entity[label=left:strict,label=above:explicit,right] (m) {mdot}; &
+ \entity[label=above:implicit] (i) {idot}; \\
+ \entity[label=left:deontic,right] (o) {odot}; &
+ \entity (io) {iodot}; \\ };
+ \plays[mdot-idot] (m) to (i);
+ \plays[odot-iodot] (o) to (io);
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsection{Macros for text layout}
+\label{sec:ormtext}
+The following macros can be used both in \tikzname{} pictures or normal text:
+
+\begin{command}{ormtext}
+Sets the font to the same sans-serif variant which is used in ORM diagrams.
+\end{command}
+
+\begin{command}{ormbf}
+Sets the font to a bold variant of \cmd{ormtext}.
+\end{command}
+
+\begin{command}{ormc}
+Sets the font to a \cmd{ormtext} in constraint color.
+\end{command}
+
+\begin{command}[\marg{text}]{ormsup}
+Puts some text in a superscript variant of \cmd{ormtext}.
+\end{command}
+
+\begin{command}[\marg{text}]{ormsub}
+Puts some text in a subscript variant of \cmd{ormtext}.
+\end{command}
+
+\begin{command}[\marg{text}]{ormind}
+Puts some text in a superscript variant of \cmd{ormbf}.
+\end{command}
+
+\begin{command}[\marg{text}]{ormbraces}
+Puts some text as \cmd{ormtext} in braces.
+\end{command}
+
+\begin{command}[\marg{text}]{ormvalues}
+Puts some text as \cmd{ormc} in braces in constraint color.
+\end{command}
+
+\begin{codeexample}[]
+\ormind{1}A {\ormtext Person} is not \ormbraces{0,1},~
+{\ormc Male} {\ormbf or} {\ormtext Female}, \ormup{up}~
+{\ormbf or} \ormleft{left} but \ormsub{queer}multi\ormsup{gender}!
+\end{codeexample}
+
+
+\section{Settings and Utilities}
+\label{sec:generalstyles}
+
+\begin{stylekey}{orm}
+ This style sets the font and line width and the default node distance
+\end{stylekey}
+
+\begin{stylekey}{orm-spacious}
+ If you prefer to have entities and labels typeset as circles, you can use \texttt{orm-spacious} instead of \texttt{orm}.
+\begin{codeexample}[width=3cm]
+\begin{tikzpicture}[orm-spacious]
+ \node[entity] (P) at (0,0) {Person};
+ \node[value] (N) at (1.5,0) {Name};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\begin{stylekey}{every orm line}
+ This style is envoked by all styles of this package that draw lines. By default it sets the line width to 0.3mm.
+\end{stylekey}
+
+% \begin{stylekey}{every orm object}
+% \end{stylekey}
+% For this purpose (and for subtype arrows) this package defines the arrow tip \arrowtip{orm arrow}.
+% TODO: document arrow tip \arrowtip{orm arrow}
+% TODO: replace search path with |/orm/| instad of |/tikz/|.
+
+
+\section*{Changes}
+
+\begin{description}
+ \item[\ormVersion, \ormDate]
+ Unstable developer version (at Github).
+ \item[0.1.4, January 15, 2016]
+ Power types, sequence types, \texttt{orm-spacious} added.
+ \item[0.1, January 25, 2010]
+ First release (at CTAN).
+\end{description}
+
+\ifappendix
+ \bibliographystyle{alpha}
+ \addcontentsline{toc}{section}{References and Index}
+ \bibliography{tkz-orm}
+ \printindex
+\fi
+
+\end{document}
diff --git a/graphics/pgf/contrib/xebaposter/README b/graphics/pgf/contrib/xebaposter/README
new file mode 100644
index 0000000000..d9c3e16671
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/README
@@ -0,0 +1,23 @@
+_____________________
+The xebaposter class
+v2.51
+
+The class is designed for making an academic poster. This work is a fork of
+baposter by Brian Amberg and Reinhold Kainhofer available at
+http://www.brian-amberg.de/uni/poster/.
+
+The class could be used with both latin and persian posters.
+For more information, please see the documentation.
+
+Current version release date: 2016/09/12
+___________________
+Seiied-Mohammad-Javad Razvian
+javadr@gmail.com
+
+Copyright © 2015-2016
+It may be distributed and/or modified under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+This work is “author-maintained†(as per LPPL maintenance status)
+by Seiied-Mohammad-Javad Razavian.
diff --git a/graphics/pgf/contrib/xebaposter/images/docs-boxshape.pdf b/graphics/pgf/contrib/xebaposter/images/docs-boxshape.pdf
new file mode 100644
index 0000000000..c086e2fc70
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/docs-boxshape.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/docs-headerborder.pdf b/graphics/pgf/contrib/xebaposter/images/docs-headerborder.pdf
new file mode 100644
index 0000000000..d2225878a1
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/docs-headerborder.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/docs-headershape.pdf b/graphics/pgf/contrib/xebaposter/images/docs-headershape.pdf
new file mode 100644
index 0000000000..cf58cdbe93
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/docs-headershape.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/docs-shade.pdf b/graphics/pgf/contrib/xebaposter/images/docs-shade.pdf
new file mode 100644
index 0000000000..65809a982f
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/docs-shade.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/fig3.pdf b/graphics/pgf/contrib/xebaposter/images/fig3.pdf
new file mode 100644
index 0000000000..30a883b7a3
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/fig3.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/fig4.pdf b/graphics/pgf/contrib/xebaposter/images/fig4.pdf
new file mode 100644
index 0000000000..d3f10233ad
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/fig4.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/fig5.pdf b/graphics/pgf/contrib/xebaposter/images/fig5.pdf
new file mode 100644
index 0000000000..324dd181d3
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/fig5.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/fig6.pdf b/graphics/pgf/contrib/xebaposter/images/fig6.pdf
new file mode 100644
index 0000000000..5c9ab57864
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/fig6.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/logo.png b/graphics/pgf/contrib/xebaposter/images/logo.png
new file mode 100644
index 0000000000..9dd5d04fbf
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/logo.png
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/images/shariflogo.png b/graphics/pgf/contrib/xebaposter/images/shariflogo.png
new file mode 100644
index 0000000000..1f8f80c827
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/images/shariflogo.png
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/poster-fa.pdf b/graphics/pgf/contrib/xebaposter/poster-fa.pdf
new file mode 100644
index 0000000000..945facee04
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/poster-fa.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/poster-fa.tex b/graphics/pgf/contrib/xebaposter/poster-fa.tex
new file mode 100644
index 0000000000..ab165791d4
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/poster-fa.tex
@@ -0,0 +1,240 @@
+\documentclass[debug,a0paper,portrait,persian]{xebaposter}
+
+\usepackage{url}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{relsize} % for \smaller
+\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{xecolor}
+\usepackage{wrapfig}
+\graphicspath{{images/}}
+\usepackage[inline]{enumitem}% for making inline list.
+\setlist{noitemsep}% Save space in lists.
+
+
+\usepackage{ptext}
+\usepackage{xepersian}
+\settextfont{Yas}
+
+%\usepackage{geometry}
+%\geometry{papersize={90cm,170cm},verbose=ture,reset}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% Some math symbols used in the text
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Format
+% \newcommand{\RotUP}[1]{\begin{sideways}#1\end{sideways}}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Multicol Settings
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \setlength{\columnsep}{0.7em}
+% \setlength{\columnseprule}{0mm}
+
+%% Begin of Document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+%%% Setting User Defined Background %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%if you want to use your preferred background, you should set background=user in poster settings.
+\background{
+ \begin{tikzpicture}[remember picture,overlay]%
+ \fill [yellow!20] {(current page.south east) rectangle (current page.north west)};%
+ \draw (current page.center)+(0pt,0pt) node[anchor=center,opacity=.1]
+ {\includegraphics[width=1.1\textwidth]{shariflogo}};
+ \end{tikzpicture}%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Here starts the poster
+%%---------------------------------------------------------------------------
+%% Format it to your taste with the options
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \definecolor{silver}{cmyk}{0,0,0,0.3}
+ \definecolor{yellow}{cmyk}{0,0,0.9,0.0}
+ \definecolor{reddishyellow}{cmyk}{0,0.22,1.0,0.0}
+ \definecolor{black}{cmyk}{0,0,0.0,1.0}
+ \definecolor{darkYellow}{cmyk}{0,0,1.0,0.5}
+ \definecolor{darkSilver}{cmyk}{0,0,0,0.1}
+
+ \definecolor{lightyellow}{cmyk}{0,0,0.3,0.0}
+ \definecolor{lighteryellow}{cmyk}{0,0,0.1,0.0}
+ \definecolor{lighteryellow}{cmyk}{0,0,0.1,0.0}
+ \definecolor{lightestyellow}{cmyk}{0,0,0.05,0.0}
+
+ \begin{poster}%
+ % Poster Options
+ {
+ eyecatcher=true,
+ % Color style
+ bgColorOne=lightyellow,
+ bgColorTwo=yellow,
+ borderColor=reddishyellow,
+ headerColorOne=yellow,
+ headerColorTwo=reddishyellow,
+% headerFontColor=silver,
+ boxColorOne=red,
+ boxColorTwo=lighteryellow,
+ % Format of textbox
+ textborder=faded,
+ % Format of text header
+ headerborder=closed,
+ headerheight=0.1\textheight,
+ headershape=roundedleft,
+ headershade=plain,
+% headerfont=\Large, %Sans Serif
+ boxshade=shadetb,%plain,
+ background=user,%plain,
+ linewidth=2pt,
+ grid=false,
+ }
+ % Eye Catcher
+ {
+ \includegraphics[height=0.07\textheight]{logo}
+ }
+ % Title
+ {عنوان پوستر عنوان پوستر عنوان پوستر عنوان پوستر عنوان پوستر عنوان پوستر عنوان پوستر
+}
+ % Authors
+ {\large نام۱ نام خانوادگی۱, نام۳ نام خانوادگی۲, نام۳ نام خانوادگی۳
+ \\%[1em]
+ {\normalsize\texttt{\lr{name1@mail.org, name2@mail.edu, name3@mail.com}}}}
+ % University logo
+ {
+\begin{tabular}{r}
+ \includegraphics[height=0.07 \textheight]{shariflogo}\\
+\end{tabular}
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Now define the boxes that make up the poster
+%%%---------------------------------------------------------------------------
+%%% Each box has a name and can be placed absolutely or relatively.
+%%% The only inconvenience is that you can only specify a relative position
+%%% towards an already declared box. So if you have a box attached to the
+%%% bottom, one to the top and a third one which should be inbetween, you
+%%% have to specify the top and bottom boxes before you specify the middle
+%%% box.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=introduction,column=0,row=0]{\textxecolor{red}{مقدمه}}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+برای تست بسته سعی می‌کنم Ú©Ù‡ یک خط Ùارسی بنگارم\LTRfootnote{test} تا نتیجه آن را در این پوستر مشاهد کنم\footnote{تست پانویسی}.
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=phase2,column=1,span=1]{Ùاز دو: پردازش}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{wrapfigure}{r}{.6\textwidth}
+%\centering
+% \vspace{-10pt}
+%{
+\includegraphics[scale=.5]{fig3}
+%}
+% \vspace{-20pt}
+\end{wrapfigure}
+
+\ptext[2]
+
+محاسبات لازم:
+\begin{align*}
+f_1 &= \frac{HXY-HXY1}{max\{HX,HY\}}\\
+f_2 &= \sqrt{1-\exp\{-2(HXY2-HXY)\}}
+\end{align*}
+
+{\scriptsize
+\centerline{\begin{minipage}{.95\textwidth}
+C(i, j) is an element of GLC matrix and N is number of gray-levels.
+\end{minipage}}
+\vspace{-.5mm}
+$$\begin{array}{l}
+
+\displaystyle C_x(i) =\sum_{j=1}^N C(i,j), \quad C_y(i)=\sum_{i=1}^N C(i,j)\\
+\displaystyle HXY = -\sum_{i=1}^N\sum_{j=1}^N C(i,j) \log\{C(i,j)\}\\
+\displaystyle HXY1 = -\sum_{i=1}^N\sum_{j=1}^N C(i,j) \log\{C_x(i)\times C_y(j)\}\\
+\displaystyle HXY2 = -\sum_{i=1}^N\sum_{j=1}^N C_x(i)\times C_y(j) \log\{C_x(i)\times C_y(j)\}\\
+\end{array}$$
+}
+\end{posterbox}
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=phase3,column=2,span=1,row=0]{استخراج ویژگی‌های: دوتایی}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ptext[7]
+\centerline{\includegraphics[scale=1.1,height=7cm]{fig4}}
+\end{posterbox}
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=phase4,column=2,span=1,below=phase3]{جداسازی}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ptext[6]
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=results,column=1,span=2,below=phase2]{نتایج}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{multicols}{2}
+ \centerline{\includegraphics[scale=.7]{fig6}}
+ \ptext[2-3]
+
+ \centerline{\includegraphics[scale=.7]{fig5}}
+\end{multicols}
+\end{posterbox}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=imagedataset,column=0,span=1,below=introduction]{پایگاه داده تصاویر}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{itemize}
+ \item ۱۱۰ تصویر سالم
+ \item ۶۶ تصویر ناسالم
+ \item ۶۰ درصد تصاویر برای آموزش به کار برده شده‌اند و مابقی برای تست درستی الگوریتم.
+ \item وبسایت \url{http://www.med.harvard.edu/AANLIB/home.html}
+\end{itemize}
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=phase1,column=0,span=1,below=imagedataset]{Ùاز یک{:} پیش‌پردازش}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ptext[12]
+\begin{enumerate}
+ \item پشت زمینه
+ \item زنگ روشن
+ \item بخش‌های نامرتبط
+\end{enumerate}
+\ptext[14]
+
+برای هر $\lambda \geq 0$ ورودی نیمه‌مثبت $x\in R^m$ صحیح به‌دست می‌آید البته اگر برای $\lambda X$، $\lambda Y$ ($\lambda >0$) آنگاه ($\lambda y$ و $\lambda x$)
+
+\ptext[16-17]
+\end{posterbox}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=adhoc,column=0,span=1,below=phase1]{همینطوری}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\textxecolor{red}
+{برای پر کردن Ùضا استÙاده شده است. برای پر کردن Ùضا استÙاده شده است. برای پر کردن Ùضا استÙاده شده است.
+برای پر کردن Ùضا استÙاده شده است. برای پر کردن Ùضا استÙاده شده است. برای پر کردن Ùضا استÙاده شده است.
+سلام}
+\end{posterbox}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=references,column=1,span=2,below=results]{منابع}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \smaller
+% \bibliographystyle{ieee}
+ \renewcommand{\section}[2]{\vskip 0.05em}
+ \begin{thebibliography}{1}\itemsep=-0.01em
+ \setlength{\baselineskip}{0.4em}
+ \bibitem{}
+ محمود سیستانی, سیدجواد علوی, رضا حسینی
+ , ''بررسی پوستر در Ùضای Ùارسی``
+ , Ú©Ù†Ùرانس سالانه کامپیوتر, صÙحات 868--871, بهار Û±Û³Û¹Û².
+ \end{thebibliography}
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=ack,column=0,span=2,below=references]{قدردانی}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+با تشکر از دکتر \lr{Brian Amberg}Ø› این کار Ùارسی‌سازی پوستری است Ú©Ù‡ توسط ایشان طراحی شده است\footnote{\url{http://www.brian-amberg.de/uni/poster/}}.
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=ack,column=2,span=1,below=references]{خالی}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی
+Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی Ùضای خالی
+\end{posterbox}%%
+\end{poster}
+
+\end{document}
diff --git a/graphics/pgf/contrib/xebaposter/xebaposter-doc.pdf b/graphics/pgf/contrib/xebaposter/xebaposter-doc.pdf
new file mode 100644
index 0000000000..b3dbace565
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/xebaposter-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/xebaposter/xebaposter-doc.tex b/graphics/pgf/contrib/xebaposter/xebaposter-doc.tex
new file mode 100644
index 0000000000..d70bdf1d8f
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/xebaposter-doc.tex
@@ -0,0 +1,471 @@
+\documentclass[landscape,debug,paperwidth=1510mm, paperheight=955mm,]{xebaposter}
+
+\usepackage{url}
+\usepackage{amsmath}
+\usepackage{amssymb}
+%\usepackage{relsize}
+%\usepackage{graphicx}
+\usepackage{multicol}
+\usepackage{xecolor}
+%\usepackage[verbose]{wrapfig}
+\graphicspath{{images/}}
+\usepackage[inline]{enumitem}% for making inline list.
+\setlist{noitemsep}% Save space in lists.
+\usepackage{listings}
+\usepackage{fancyvrb}
+\usepackage{atbegshi}
+\usepackage[Kashida=off]{xepersian}
+\settextfont{Yas}
+\setdigitfont{Yas}
+
+
+\lstset{% general command to set parameter(s)
+ language=[LaTeX]tex,
+ basicstyle=\setLTR\ttfamily,
+ gobble=0,
+ breaklines=true,
+}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %%%% Some math symbols used in the text
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Format
+% \newcommand{\RotUP}[1]{\begin{sideways}#1\end{sideways}}
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Multicol Settings
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \setlength{\columnsep}{0.7em}
+% \setlength{\columnseprule}{0mm}
+
+%%% Setting User Defined Background %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%if you want to use your preferred background, you should set background=user in poster settings.
+\background{
+ \begin{tikzpicture}[remember picture,overlay,opacity=.3]%
+ \fill [yellow!80!gray] {(current page.south east) rectangle (current page.north west)};%
+% \draw (current page.south west)+(12em,0em) node[anchor=south west,opacity=.3]
+% {\includegraphics[width=.2\textwidth]{logo}};
+ \end{tikzpicture}%
+}
+%% Begin of Document
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%\newcommand\back{
+% \makeatletter
+%% \setLTR\begin{bidi@tikzpicture}[remember picture,overlay,opacity=.3]%
+% \begin{tikzpicture}[remember picture,overlay,opacity=.3]%
+% \setLTR\fill [green!20!yellow] {(current page.south east) rectangle (current page.north west)};%
+% \draw (current page.north west)+(-2em,2em) node[anchor=north west,opacity=.3]
+% {\includegraphics[width=1.1\textwidth]{logo}};
+%% \end{bidi@tikzpicture}%
+% \end{tikzpicture}%
+% \makeatother
+%}
+%\AtBeginShipoutInit
+%\AtBeginShipout{\AtBeginShipoutAddToBox{\back}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Here starts the poster
+%%---------------------------------------------------------------------------
+%% Format it to your taste with the options
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \definecolor{silver}{cmyk}{0,0,0,0.3}
+ \definecolor{yellow}{cmyk}{0,0,0.9,0.0}
+ \definecolor{reddishyellow}{cmyk}{0,0.22,1.0,0.0}
+ \definecolor{black}{cmyk}{0,0,0.0,1.0}
+ \definecolor{darkYellow}{cmyk}{0,0,1.0,0.5}
+ \definecolor{darkSilver}{cmyk}{0,0,0,0.1}
+
+ \definecolor{lightyellow}{cmyk}{0,0,0.3,0.0}
+ \definecolor{lighteryellow}{cmyk}{0,0,0.1,0.0}
+ \definecolor{lighteryellow}{cmyk}{0,0,0.1,0.0}
+ \definecolor{lightestyellow}{cmyk}{0,0,0.05,0.0}
+
+ \begin{poster}%
+ % Poster Options
+ {
+ eyecatcher=true,
+ % Color style
+ bgColorOne=lighteryellow,%green!40!yellow!30,%lighteryellow,
+ bgColorTwo=yellow,
+ borderColor=reddishyellow,
+ headerColorOne=yellow,
+ headerColorTwo=reddishyellow,
+ headerFontColor=cyan,
+ boxColorOne=lightyellow,
+ boxColorTwo=lighteryellow,
+ % Format of textbox
+ textborder=rounded,
+ % Format of text header
+ headerborder=closed,
+% headerheight=.07\textheight,
+ headershape=roundedleft,
+ headershade=plain,
+% headerfont=\Large, %Sans Serif
+ boxshade=plain,
+ background=user,
+ linewidth=2pt,
+ grid=false, % show a grid mesh on poster, it's useful for debugging.
+ columns=5,
+ }
+ % Eye Catcher
+ {
+ \includegraphics[height=0.05\textheight]{logo}
+ }
+ % Title
+ {طراحی پوستری زیبا و در خور با کمک کلاس \lr{xebaposter}
+}
+ % Authors
+ {\large \lr{Brian Amberg}, \lr{Reinhold Kainhofer}, سیّدمحمّدجواد رضویان
+ \\%[1em]
+ {\normalsize\texttt{\lr{javadr@parsilatex.com, reinhold@kainhofer.com, baposter@brian-amberg.de}}
+ \\
+نسخه $2.51$، $22$ شهریور $1395$، $12$ سپتامبر $2016$
+ }}
+ % University logo
+ {
+\begin{tabular}{r}
+ \includegraphics[height=0.05 \textheight]{logo}\\
+\end{tabular}
+ }
+% \end{poster}
+% \end{document}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Now define the boxes that make up the poster
+%%%---------------------------------------------------------------------------
+%%% Each box has a name and can be placed absolutely or relatively.
+%%% The only inconvenience is that you can only specify a relative position
+%%% towards an already declared box. So if you have a box attached to the
+%%% bottom, one to the top and a third one which should be inbetween, you
+%%% have to specify the top and bottom boxes before you specify the middle
+%%% box.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=introduction,column=0,row=0,headershape=smallrounded,
+headershade=plain]%
+{\textxecolor{red}{مقدمه}}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+همانطوری Ú©Ù‡ می‌دانید یکی از نیازهای جامعه علمی طراحی پوستر است زیرا Ú©Ù‡ در برخی Ú©Ù†Ùرانس‌ها نویسنده مقاله تنها مجاز به ارائه پوستر
+می‌گردد. در این راستا یک کلاس بسیار ساده به نام \texttt{a0poster} وجود دارد که در عین سادگی کار با آن، قابلیت‌های زیادی ندارد.
+از طرÙÛŒ دیگر کلاس‌های زیبایی برای تولید پوستر توسط اÙرادی دیگر طراحی شده است
+از جمله \texttt{baposter}\footnote{\url{http://www.brian-amberg.de/uni/poster/}}،
+\texttt{beamerposter} Ùˆ \texttt{tikzposter}.
+متاسÙانه این کلاس‌ها با متون راست به چپ، خصوصاً Ùارسی کار نمی‌کنند لذا نیاز به کلاسی Ú©Ù‡ بتوان با آن پوستر Ùارسی تولید کرد
+ضروری می‌نمود. کلاس \texttt{xebaposter}% --بخوانید زیباپوستر--%
+%از آنجایی که کلاس \texttt{baposter}
+%بر پایهٔ \texttt{tikz} طراحی شده است Ùˆ جناب آقای دکتر ÙˆÙا خلیقی خالق
+%بسته‌های \texttt{bidi} و \texttt{xepersian} امکان پشتیبانی از متون
+%راست به Ú†Ù¾ را در تصاویر تولیدی بسته \texttt{tikz} Ùراهم آورده‌اند پس بدین سبب به سراغ این کلاس رÙته Ùˆ با تغییراتی در آن،
+%این کلاس را با متون راست به Ú†Ù¾ خصوصا Ùارسی سازگار نموده Ùˆ نام \texttt{xebaposter} را بر آن برگزیدیم%
+%\footnote{نگارنده ابتدا نام \lr{baposterRL} را انتخاب کرده بود Ù„Ú©Ù† با پیشنهاد دکتر محمود امین‌طوسی نام Ùعلی را برگزید.}
+--بخوانید زیباپوستر--
+ بر پایهٔ کلاس \texttt{baposter} با اÙزودن
+امکاناتی بدین منظور بنا نهاده شده است.
+%البته ناگÙته نماند Ú©Ù‡ پوسترهای تولیدی با بسته \texttt{beamerposter} زیبایی زاید الوصوÙÛŒ دارند Ù„Ú©Ù† به سبب اینکه بسته‌های
+%بایدی Ùˆ زی‌پرشین Ùعلا از بسته \texttt{beamer} پشتیبانی نمی‌کنند --آنهم به سبب وجود باگ‌هایی در موتور زی‌تک-- امکان
+%Ùارسی‌سازی این بسته وجود نداشت پس بدین سبب تنها انتخابمان همان بسته اولیه \texttt{baposter} شد.
+متاسÙانه به سبب وجود باگ‌\footnote{گزارش شده در \url{http://qa.parsilatex.com/10715}
+Ùˆ \url{http://tex.stackexchange.com/questions/262877}} در موتور زی‌لاتک Ùعلاً ویژگی محوشدگی رنگ را
+در حالت Ùارسی نخواهیم داشت.%
+%\footnote{برای مشاهده
+%نمونه‌هایی از این بسته‌ها می‌توانید به \url{http://www.latextemplates.com/cat/conference-posters} مراجعه نمایید.}
+\end{posterbox}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=posterparts,column=0,span=1,below=introduction,textborder=roundedleft]
+{\textxecolor{blue}{اجزاء تشکیل دهنده زیباپوستر}}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+زیباپوستر صÙحه پوستر را به دو بخش سرآمد Ùˆ محتوی تقسیم می‌کند. خود سرآمد نیز از سه بخش آی‌کچر، عنوان Ùˆ لوگوی موسسه تشکیل
+شده است Ú©Ù‡ بهمین ترتیب نمایش داده می‌شود. بخش آی‌کچر اختیاری است Ùˆ می‌توان با گزینه \texttt{eyecatcher} آن را Ùعال یا غیرÙعال
+نمود(\texttt{true,false}). در صورت عدم وجود آی‌کچر، عنوان و نام نویسنده‌(ها) راست چین خواهد شد و در صورت وجود آن به صورت
+وسط‌چین در خواهند آمد.
+
+بخش محتوای پوستر شامل تعدادی جعبه \texttt{tikz} است که حاوی مطالب پوستر خواهند بود. این جعبه‌ها از طریق
+محیط \texttt{posterbox} تعری٠می‌شوند. تمامی این جعبه‌ها باید درون محیط \lr{poster} تعری٠شده باشند.
+هر جعبه نیز از دو بخش عنوان و محتوی تشکیل شده است. و نهایتا پشت زمینه پوستر است که در حال حاضر تنها می‌تواند یک رنگ ساده
+باشد و یا اصلا چیزی نباشد و یا به اختیار کاربر قرار گیرد تا برای مثال در صورت تمایل یک تصویر پشت زمینه قرار دهد --البته همانطور که
+در بالا اشاره گردید برخی قابلیت‌های محیط \lr{tikz} از جمله محوشدگی قابل استÙاده نمی‌باشند--.
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=setting,column=0,span=1,below=posterparts%
+,headerFontColor=brown,textborder=roundedright,headershape=roundedright]
+{\textxecolor{brown}{تنظیمـــــــــات (عمومی یا محلی؟!)}}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+کاربر می‌توانید تنظیماتی را که برای رنگ و حالت جعبه‌ها تعری٠شده است را به کلی یا جزئی تغییر دهد. بدین معنی که برای یکبار همان
+ابتدای تعری٠محیط \lr{poster} که این تنظیمات تعری٠می‌شوند بر تمامی جعبه‌ها قابل اعمال هستند لکن این امکان نیز وجود دارد
+که هر جعبه را به طور خاص شخصی‌سازی نمود. در این پوستر سعی شده تا با اتخاذ
+شخصی‌سازی هر جعبه گزینه‌های مختل٠موجود تا آنجا که ممکن است نشان داده شود.
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=usage,column=1,span=1,headershape=rounded,textborder=rectangle
+,textborder=faded,headershade=shadelr,]{نحوه کاربرد}
+%محیط اصلی پوستر، محیط \texttt{poster} است با ساختاری مانند ذیل:
+%\begin{latin}
+%\vspace{-2mm}
+%\begin{verbatim}
+%\begin{poster}
+
+% { key=value options }
+% { Eye Catcher, empty
+% if option eyecatcher=false}
+% { Poster Title }
+% { Poster Authors }
+% { University Logo}
+%
+% Definition of the boxes
+%\end{poster}
+%\end{verbatim}
+%\end{latin}
+ \begin{lstlisting}[escapechar={|}]
+\documentclass[|\rl{ گزینه‌های کلاس}|]{xebaposter}
+
+\background{}
+
+\begin{document}
+\begin{poster}
+ |\hfill\{ \rl{ گزینه‌های پوستر به صورت کلید=مقدار}\}|
+ |\hfill\{\small \beginR \rl{ آی‌کچر، اگر } eyecatcher=false \rl{این بخش خالی رها شود}\endR \}|
+ |\hfill\{ \rl{عنوان پوستر} \}|
+ |\hfill\{ \rl{نویسندگان پوستر} \}|
+ |\hfill\{ \rl{لوگوی دانشگاه} \}|
+
+|\hfill\rl{تعاری٠جعبه‌ها \ldots}|
+
+\end{poster}
+\end{document}
+ \end{lstlisting}
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=classoption,column=2,span=1,headershape=rectangle,textborder=roundedsmall
+,headershade=shaderl]
+{گزینه‌های کلاس}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{itemize}
+ \item \texttt{persian/latin}:
+ چینش پوستر Ùارسی/لاتین.% پیش‌Ùرض پوستر لاتین است.
+ \item \texttt{portrait/landscape}: طرح‌بندی صÙحه
+ \item \lr{\texttt{a0paper, a1paper, a2paper, a3paper, a4paper, archE, ...}}:
+ سایز صÙحات از پیش تعریÙ‌شده‌؛ تمامی اندازه‌های قابل پیشتیبانی توسط کلاس را در جدول زیر مشاهد نمایید.
+ \item \lr{\small\texttt{paperwidth=length, paperheight=length}}: تنظیم عرض/ارتÙاع صÙحه.
+ این گزینه‌ها را بهیچوجه با اندازه‌های از پیش‌تعری٠شده بکار نبرید.
+ \item \texttt{margin=length}: حاشیه صÙحه
+ \item \lr{\texttt{fontscale=real number}}:
+ مقیاس‌پذیری پوستر. پوستر با اندازه Ùونت‌های استاندارد روی یک کاغذ
+ \lr{\Verb|fontscale| $\times$ \Verb|papersize|}
+ حروÙچینی می‌شود Ùˆ سپس به مقدار \lr{1/\Verb|fontscale|} نسبت به اندازه صÙحه‌ٔ انتخاب شده تغییر اندازه می‌دهد.
+ این کار سبب می‌شود تا اندازه Ùونت‌ها ظاهری مناسب داشته باشد لذا اگر نیاز دارید تا حجم بیشتری را در یک صÙحه جا دهید
+ اندازه \Verb|fontscale| را اÙزایش دهید تا Ùونت کوچکتری بدست آورید.% Ù„Ú©Ù† مطمئن شوید Ú©Ù‡ اندازه‌های خیلی Ú©ÙˆÚ†Ú©ÛŒ
+% را بکار نمی‌برید زیرا که در این صورت پوستر ظاهر نازیبایی خواهد داشت.
+ مقدار پیش‌Ùرض \lr{\Verb|2.92|}.
+ \item \texttt{debug}: چاپ اطلاعات مرتبط با جعبه‌ها در خروجی. این گزینه‌ در اشکال‌زدایی بکار می‌آید.
+\end{itemize}
+
+
+\begin{latin}
+\centering
+%\small
+ \begin{tabular}{||l||c|c||}
+ \cline{2-3}
+ \multicolumn{1}{c|}{\null} & \rl{عرض} & \rl{ارتÙاع} \\\hline
+ archA & 9in & 12in \\\hline
+ archB & 12in & 18in \\\hline
+ archC & 18in & 24in \\\hline
+ archD & 24in & 36in \\\hline
+ archE & 36in & 48in \\\hline
+ archE1 & 30in & 42in \\\hline
+ archE2 & 26in & 38in \\\hline
+ archE3 & 27in & 39in \\\hline
+ \color{gray} a0paper & \color{gray} 841mm & \color{gray} 1189mm \\\hline
+ a1paper & 594mm & 841mm \\\hline
+ a2paper & 420mm & 594mm \\\hline
+ a3paper & 297mm & 420mm \\\hline
+ a4paper & 210mm & 297mm \\\hline
+ a5paper & 148mm & 210mm \\\hline
+ a6paper & 105mm & 148mm \\\hline
+ b0paper & 1000mm & 1414mm \\\hline
+ b1paper & 707mm & 1000mm \\\hline
+ b2paper & 500mm & 707mm \\\hline
+ b3paper & 353mm & 500mm \\\hline
+ b4paper & 250mm & 353mm \\\hline
+ b5paper & 176mm & 250mm \\\hline
+ b6paper & 125mm & 176mm \\\hline
+ ansiapaper & 8.5in & 11in \\\hline
+ ansibpaper & 11in & 17in \\\hline
+ ansicpaper & 17in & 22in \\\hline
+ ansidpaper & 22in & 34in \\\hline
+ ansiepaper & 34in & 44in \\\hline
+ letterpaper & 8.5in & 11in \\\hline
+ legalpaper & 8.5in & 14in \\\hline
+ executivepaper & 7.25in & 10.5in \\\hline
+ screen & 225mm & 180mm \\\hline
+% \bottomrule
+ \end{tabular}
+\end{latin}
+\end{posterbox}
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=posteroption,column=1,span=1, aligned=posterparts, bottomaligned=setting,
+,headershade=shadetb]{گزینه‌های محیط \lr{poster}}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\begin{multicols}{2}
+\begin{itemize}
+ \item \texttt{grid={true,false}}:
+ نمایش یک شبکه در پس‌زمینهٔ پوستر. این گزینه در Ùاز طرح‌بندی پوستر خیلی کاربردی Ùˆ Ù…Ùید است با مقدار پیش‌Ùرض \Verb|no|.
+ \item \texttt{columns=4}: تعداد ستون‌ها.
+ (در حالت اÙÙ‚ÛŒ Û´ Ùˆ در حالت عمودی مقدار پیش‌Ùرض Û³ است Ùˆ حداکثر تعداد ستون‌ها Û¶ است.)
+ \item \texttt{colspacing=length}: Ùاصله بین‌ستون‌های پوستر.
+ \item \texttt{headerheight=length}: ارتÙاع بخش سرآمد پوستر. مقدار پیش‌Ùرض آن {\verb|0.1\textheight|} است.
+ \item \lr{\texttt{background=poster background type}}:
+ پس‌زمینه پوستر را تعیین می‌کند که می‌تواند مقادیر زیر را بگیرد:
+% \begin{enumerate}
+% \item \texttt{plain}: رنگ پس‌زمینه را رنگ \texttt{bgColorOne} می‌گذارد.
+% \item \texttt{user}: با دستور \verb|\background{...}| پس‌زمینه مطلوبتان را می‌توانید طراحی نمایید.
+% \item \texttt{none}: بدون پشت زمینه.
+% \end{enumerate}
+ \begin{enumerate}
+ \item \lr{\Verb|plain|}:
+ پس‌زمینه را به رنگ \lr{\Verb|bgColorOne|} می‌گذارد.
+ \item \lr{\Verb|shadeLR|}:
+ پس‌زمینه با رنگ مدرج اÙÙ‚ÛŒ (از \lr{\Verb|bgColorOne|} به \lr{\Verb|bgColorTwo|}).
+ \item \lr{\Verb|shadeTB|}:
+ پس‌زمینه با رنگ مدرج عمودی (از \lr{\Verb|bgColorOne|} به \lr{\Verb|bgColorTwo|}).
+ \item \lr{\Verb|user|}:
+ با دستور
+ \lr{\Verb|\textbackslash{}background\{...\}|} پس‌زمینهٔ شخصی خودتان را می‌توانید طراحی نمایید.
+ \item \lr{\Verb|none|}:
+ بدون هیچ پس‌زمینه‌ای.
+ \end{enumerate}
+ \item \lr{\texttt{bgColorOne=pgf color name}}: رنگ اول پس‌زمینه. در حالت \texttt{plain} تنها همین رنگ بکار می‌رود.
+ \item \lr{\texttt{bgColorTwo=pgf color name}}: رنگ دوم پس‌زمینه.
+ \item \lr{\texttt{eyecatcher={true,false}}}: تعیین می‌کند که آیا آی‌کچر در سرآمد پوستر به نمایش درآید یا نه.
+ این تصویر در سمت راست عنوان قرار خواهد گرÙت.
+\end{itemize}
+%\end{multicols}
+\end{posterbox}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=posterboxoption,column=3,span=2,%below=posteroption,
+textborder=none
+,headershape=rectangle,headerborder=none,textborder=coils,headershade=shadetbinverse]
+{گزینه‌های محیط \lr{posterbox}}
+ هر جعبه پوستر باید در یک محیط \texttt{posterbox} به صورت زیر تعری٠گردد:
+%\begin{latin}
+\vspace{-1mm}
+%\begin{verbatim}
+% \begin{posterbox}[ key=value options ]{ PosterBox Title }
+% Contents
+% \end{posterbox}
+%\end{verbatim}
+%\end{latin}
+\begin{lstlisting}[escapechar={|}]
+ \begin{posterbox}[ |\rl{ گزینه‌های کلید=مقدار}| ]{ |\rl{عنوان جعبه‌پوستر}| }
+ |\rl{محتوای جعبه‌پوستر}|
+ \end{posterbox}
+\end{lstlisting}
+\vspace{-4mm}
+\begin{itemize}
+ \item \lr{\texttt{name=box name}}: نام جعبه را مشخص می‌کند. این نام در تعیین موقعیت دیگر جعبه‌ها نسبت به آن بکار آید.
+ \item \lr{\texttt{column=column number}}: مشخص می‌کند که جعبه در کدام ستون قرار گیرد
+ --شماره ستون‌ها از صÙر شروع می‌شود--.
+ \item \lr{\Verb|row=row position|}:
+ مشخص می‌کند Ú©Ù‡ جعبه در کدام ردی٠از مختصات صÙحه قرار گیرد؛ این مختصات عددی در بازهٔ صÙر تا یک است Ú©Ù‡ شماره گذاری
+ آن از زیر عنوان پوستر آغاز شده Ùˆ در پایان صÙحه یک خواهد شد.% این گزینه برای آدرس دهی دقیق یک جعبه در صÙحه بکار می‌رود.
+ \item \lr{\texttt{span=column span}}:
+ مشخص می‌کند Ú©Ù‡ جعبه شامل چند ستون از پوستر خواهد بود --مقدار پیش‌Ùرض عدد یک است--.
+ \item \lr{\texttt{borderColor=pgf color name}}:
+ رنگ مورد استÙاده در حاشیه جعبه‌ها.
+ \item \lr{\texttt{headerColorOne=pgf color}}:
+ رنگ اول عنوان جعبه.
+ \item \lr{\texttt{headerColorTwo=pgf color name}}:
+ رنگ دوم عنوان جعبه.
+ \item \lr{\texttt{textborder=border type}}:
+ نوع حاشیه پایین جعبه را تعیین می‌کند که خود شامل انواع زیر است:
+% \begin{enumerate*}[label=\arabic*)]
+% \item\Verb|none|
+% \item\Verb|bars|
+% \item\Verb|faded|
+% \item\Verb|rectangle|
+% \item\Verb|rounded|
+% \item\Verb|roundedsmall|
+% \item\Verb|roundedleft|
+% \item\Verb|roundedright|
+% \item\Verb|triangles|
+% \item\Verb|coils|
+% \end{enumerate*}
+
+ \centerline{\includegraphics[width=.8\textwidth, ]{docs-boxshape}}
+ \item \lr{\texttt{headerborder=header border type}}:
+ آن بخشی از جعبه که پیرامون عنوان قرار می گیرد را تعیین می‌کند:
+
+ \centerline{\includegraphics[width=.8\textwidth, ]{docs-headerborder}}
+ \item \lr{\texttt{headershape=header border shape}}:
+ نوع آرایش عنوان جعبه را مشخص می‌کند:
+
+ \centerline{\includegraphics[width=.8\textwidth, ]{docs-headershape}}
+ \item \lr{\texttt{headershade=type of header shading}}:
+
+% \begin{enumerate*}[label=\arabic*)]
+% \item\texttt{plain}
+% \item\texttt{shadelr}
+% \item\texttt{shaderl}
+% \item\texttt{shadetb}
+% \item\texttt{shadetbinverse}
+% \end{enumerate*}
+
+ \centerline{\includegraphics[width=.82\textwidth,
+ trim={.4cm 5.1cm .4cm .6cm}, clip=true]{docs-shade.pdf}}
+
+ \item \lr{\texttt{boxshade}}:
+
+% \begin{enumerate*}[label=\arabic*)]
+% \item\texttt{plain}
+% \item\texttt{shadelr}
+% \item\texttt{shaderl}
+% \item\texttt{shadetb}
+% \item\texttt{none}
+% \end{enumerate*}
+
+ \centerline{\includegraphics[width=.82\textwidth,
+ trim={.4cm .1cm .4cm 5.5cm}, clip=true]{docs-shade.pdf}}
+
+ \item \lr{\texttt{headerfont=font definition}}:
+ دستوری Ú©Ù‡ قبل از حروÙچینی عنوان جعبه قرار داده می‌شود.
+ \item \lr{\texttt{headerFontColor=pgf color name}}:
+ رنگ قلم عنوان جعبه.
+ \item \lr{\texttt{linewidth=length}}:
+ عرض خطوط مورد استÙاده در ترسیم پوستر
+ \item \lr{\Verb|above=box name|}:
+ نام جعبه‌ای را مشخص می‌کند که این جعبه باید در بالای جعبه مذکور ترازبندی شود.
+ \item \lr{\Verb|below=box name|}:
+ نام جعبه‌ای را مشخص می‌کند که این جعبه باید در پایین جعبه مذکور ترازبندی شود.
+ \item \lr{\Verb|aligned=box name|}:
+ نام جعبه‌ای را مشخص می‌کند که این جعبه باید به محاذات آن جعبه ترازبندی شود.
+ \item \lr{\Verb|bottomaligned=box name|}:
+ نام جعبه‌ای را مشخص می‌کند که این جعبه باید نسبت به آن جعبه از پایین ترازبندی شود.
+\end{itemize}
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=absolute,column=0,span=2,below=setting,
+,textborder=rectangle,headershape=rectangle,]{چینش جعبه‌ها}
+%\small
+ نکته‌ای که باید در چینش جعبه‌ها در نظر داشته باشید این است که مکان جعبه‌ها می‌توانند به صورت نسبی یا دقیق تعیین شود.
+ اگر برای مثال جعبه ب قرار است دقیقاً بین جعبه‌های ال٠و ج قرار گیرد
+ آنگاه این دو جعبه اخیر حتماً باید پیش از جعبه ب تعری٠شوند، در غیر اینصورت سبب تولید خطا می‌گردد. ضمناً می‌توانید بدون
+ تعیین این پارامترها چینش جعبه‌ها را به صورت خودکار و بهمان ترتیب تعری٠به خود بسته واگذار نمایید.
+
+ برای آدرس‌دهی دقیق یک جعبه، جایگاه دقیق آن‌ را با کمک \Verb|row| و \Verb|column|
+ در تنظیمات جعبه‌پوستر مشخص نمایید.
+\end{posterbox}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{posterbox}[name=ack,column=3,span=2,below=posterboxoption, bottomaligned=absolute,
+,textborder=triangles]{قدردانی}
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+با تشکر از دکتر \lr{Brian} خالق کلاس پوستر Ùˆ تشکر ویژه از جناب آقای دکتر ÙˆÙا خلیقی بخاطر زحماتی Ú©Ù‡ برای Ùارسی‌نویسی در
+محیط زی‌لاتک انجام‌ داده‌اند %\footnote{بدون پشتیبانی زی‌پرشین از محیط \lr{tikzpicture} Ùارسی سازی این کلاس ممکن نبود.}
+ و دکتر محمود امین‌طوسی به سبب پیشنهاد نام زیباپوستر و گروه پارسی‌لاتک برای تست این کلاس.
+
+\footnotetext{
+زیباپوستر از نسخهٔ $2.2$ به بعد بر خلا٠نسخه اولیّه هر دو نوع پوستر پارسی و لاتین را پشتیبانی می‌کند. }
+\end{posterbox}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\end{poster}
+\end{document}
diff --git a/graphics/pgf/contrib/xebaposter/xebaposter.cls b/graphics/pgf/contrib/xebaposter/xebaposter.cls
new file mode 100644
index 0000000000..2ffed6a072
--- /dev/null
+++ b/graphics/pgf/contrib/xebaposter/xebaposter.cls
@@ -0,0 +1,1226 @@
+%%
+%% This is file `xebaposter.cls'
+%%
+%% Copyright © 2015-2016 by Seiied-Mohammad-Javad Razavian <javadr@gmail.com>
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% This work is “author-maintained†(as per LPPL maintenance status)
+%% by Seiied-Mohammad-Javad Razavian.
+%% The Current Maintainer of this work is Seiied-Mohammad-Javad Razavian
+%%
+%% A relatively comfortable latex class to produce posters with a grid based
+%% layout. It comes with a number of combinable styles and is (maybe only for
+%% the writer) easy to extend, as all the graphics is based on pgf.
+%%
+%%
+%% Copyright (C) 2007-2011 Brian Amberg
+%% Copyright (C) 2011 Reinhold Kainhofer <reinhold@kainhofer.com>
+%% Copyright (C) 2015-2016 Seiied-Mohammad-Javad Razavian <javadr@gmail.com>
+%%
+%% 12. September 2016: ver 2.51
+%% - typo in package inf.
+%% 1. September 2016: ver 2.5
+%% - In persian mode with gird enabled option, grid numbers set on left side of the sheet.
+%% -There is no need to set \setLTR before \shade or \fill command, it fixed in new version of bidi.
+%% 11. February 2015: ver 2.42
+%% - Correcting some other typos in the package's documentaion.
+%% 10. February 2015: ver 2.41
+%% - Correcting two typos in the package's documentaion.
+%% 9. February 2015: ver 2.4
+%% - bidi ver 18.2 and later has not provice bidi@tikzpicture environment anymore, istead Vafa Khalighi the creator and maintainer of xepersian have improved the tikzpicture environment in RTL mode, so the package just use tikzpicture in both ltr and rtl poster.
+%% 30. September 2015: ver 2.3
+%% -
+%% 1. September 2015: ver 2.21
+%% - if xebaposter's user didn't set persian/latin option, by default it will be set latin but in case xepersian package is being loaded the default will be persian unless the user set latin explicitly.
+%% 1. September 2015: ver 2.2
+%% - persian/latin options added to the class and default is latin. From now on, this class can be used for both latin and persian poster. The only thing that should be mentioned is the persian one must be compiled with xelatex but the latin one should be compiled with pdflatex or xelatex. For latin poster pdflatex is preferred because shading feature of tikz doesn't work properly with xelatex from TeXLive2013! the bug reported in http://tex.stackexchange.com/questions/262877.
+%% 28. August 2015:
+%% - A bidi@tikzpicture is used instead of tikzpicture because it causes some unwanted extra spaces in the poster.
+%% 21. August 2015:
+%% - The xebaposter is named after changing the baposter style to adapt with right to left text like persian.
+%% 29. September 2011:
+%% - Finally fixed confusion with paper size handling and landscape. This required seperate handling of papersizes
+%% known to the geometry package and other packages.
+%% 26. September 2011:
+%% - Reverted drawing of faded borders to manual method, as the current result does not work with evince,
+%% and produced spurious colored boxes with okular and acroread.
+%% - Added one more example due to popular request
+%% 16. September 2011:
+%% - Removed nag package, such that it compiles on older systems
+%% - Added more examples
+%% 15. September 2011:
+%% - Merged fork by (rk) back into mainline, essentially taking over all the great improvements that Reinhold Kainhofer coded.
+%% We call this version 2, as it breaks the interface in some small points. Essentially watch out for this:
+%% - no/yes keys are now false/true
+%% - the shade-lr etc. keys have the hypen removed, and are now called shadelr etc.
+% - Added more examples, which are all adapted to work with the current version
+%% 27. August 2011 (rk):
+%% - Completely factored out all drawing commands to handler functions, assigned via choice keys
+%% - Added cornerradius, boxheaderheight, boxpadding options
+%% - Added missing roundedright
+%% 26. August 2011 (rk):
+%% - Turned headerbox cmd into posterbox environment (allows verbatim)
+%% - pass several options to packages
+%% - added debug cls option to reduce default output
+%% - rewrote several loops and ifthenelse
+%% - Use boolean and choice keys for all options
+%% - Changed all choice options to set a global function to
+%% \baposter@OPTION@OPTIONVALUE, which are a functions that execute the
+%% option's setting (drawing routine, color setting for tikz, etc.)
+%% - Add a5paper
+%% 07. April 2011: Fixed paper size handling
+%% - Fixed Paper Size handling, you can now specify all page sizes using paperwidth=, paperheight= class options.
+%% - Added rudimentary documentation of the available keys.
+%% 11. December 2010: Fixed "Empty Second Page" bug
+%% - A second empty page was introduced when a document ended with
+%% \end{poster}
+%% \end{document}
+%% This was fixed thanks to a suggestion by Martin Aulbach
+%% - Added
+%% \thispagestyle{empty}%% to suppress page numbers, which became visible when the margins are large.
+%% The underlying problem of page-size handling has not yet been solved.
+%% 30. September 2010: Border Bugfixes
+%% - Correct background color with textborder=rounded-small, Thanks to Ke Chen for the bugreport and patch
+%% - Correctly draw rectangular text boxes, Thanks to abenkst for the bugreport and fix
+%% 10. June 2010: Added option to set the number of columns
+%% - added a class option to set the number of columns
+%% - columns=5: sets the number of columns to 5, possible values are 1..6, default is 3 in portrait and 4 in landscape format
+%% 29. April 2009: Incorporated Patches by Arne Henningsen
+%% - added some class options
+%% - a4shrink: shrink the paper to A4 size (for printing drafts or handouts)
+%% - movebody=Xpt: move the text/poster body Xpt to the right
+%% (or to the left if Xpt is negative),
+%% e.g. for manually centering the poster on the page
+%% - showframe: use the "showframe" option of the "geometry" package
+%% - a0paper (default): set paper size to A0
+%% - archE: set paper size to Arch E
+%% - setting "background" can be "none" now (otherwise the "showframe"
+%% option has no effect)
+%% - the page number has been removed (it was mostly not visible before)
+%% - the "margin=" option works now
+%% 04. December 2008
+%% - Mainly an update to the landscape example
+%% 14. November 2008
+%% - Actually center the title when eyecatcher is used.
+%% 04. November 2008
+%% - Fixed bug with eyecatcher not working.
+%% 26. June 2008
+%% - Fixed bug with plain background mode.
+%% 14. June 2008
+%% - Support for portrait/landscape switching.
+%% - Some smaller bugfixes.
+%% 01. June 2007
+%% - First version released.
+%%
+%% Use this class with xelatex
+%%
+%% I have confirmed that this package works with
+%% - texlive 2015
+%%
+%%
+%% TODO:
+%% -) Rename backgrounds back to shaded-tb shade-lr
+%% -) Rename textborder back to rounded-small (consistent naming needed!)
+%% -) Rename headershade back to shade-lr, shade-tb, shade-tb-inverse
+%% -) Rename headershape back to small-rounded
+%% -) Option value consistency (small-rounded vs. rounded-small; missing ones)
+%% -) Rename \xebaposterHeaderSetShade, \xebaposterHeaderDrawText to include @ and verb
+%%
+%%
+%% Licence: GPL
+\ProvidesClass{xebaposter}[2016/09/12 v2.51 xebaposter class]
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\LoadClass{article}
+\typeout{baposter: Brian Amberg, 2007, 2008, 2009, 2010, 2011 | http://www.brian-amberg.de/uni/poster/}
+\typeout{baposter: Reinhold Kainhofer, 2011 | http://reinhold.kainhofer.com/}
+\typeout{xebaposter: Seiied-Mohammad-Javad Razavian, 2015-2016 | https://github.com/javadr/xebaposter/}
+%
+%% Define lengths only once on inclusion, such that we can make multiple posters
+\newlength{\xebaposter@basepaperwidth}%
+\newlength{\xebaposter@basepaperheight}%
+\newlength{\xebaposter@basemargin}%
+\newlength{\xebaposter@finalpaperwidth}%
+\newlength{\xebaposter@finalpaperheight}%
+\newlength{\xebaposter@finalmargin}%
+\newlength{\headerheight}%
+\newlength{\colwidth}%
+\newlength{\colheight}%
+\newlength{\xebaposter@@colspacing}%
+\newlength{\xebaposter@box@@cornerradius}%
+\newlength{\xebaposter@box@@boxheaderheight}%
+\newlength{\xebaposter@box@@boxpadding}%
+\newlength{\boxstartx}%
+\newlength{\boxstarty}%
+\newlength{\boxwidth}%
+\newlength{\boxheight}%
+\newlength{\xebaposter@titleimage@left@width}%
+\newlength{\xebaposter@titleimage@right@width}%
+\newlength{\xebaposter@titleimage@textwidth}%
+\newbox\xebaposter@box@content%
+\newbox\xebaposter@titleimage@left%
+\newbox\xebaposter@titleimage@title%
+\newbox\xebaposter@titleimage@right%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Packages
+%-------------------------------------------------------------------------------
+% The only ``weird'' dependency of this package is pgf. All the rest should be
+% installed on any decent system.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\typeout{Use Packages}%
+\RequirePackage{xkeyval}%
+\RequirePackage{calc}%
+\RequirePackage[cmyk]{xcolor}%
+\RequirePackage{ifxetex}
+%\ifxetex
+% \def\pdftexversion{140}%
+% \def\pgfsysdriver{pgfsys-dvipdfm.def}%
+%\fi
+\RequirePackage{tikz}%
+\RequirePackage{pgf}%
+%\makeatletter
+%\def\pgfsys@papersize#1#2{%
+% \pdfpageheight#2\relax%
+% \pdfpagewidth#1\relax}
+%\makeatother
+\RequirePackage{ifthen}%
+\RequirePackage[T1]{fontenc}%
+%\RequirePackage{biditools}
+%\RequirePackage[l2tabu, orthodox]{nag}%
+\usetikzlibrary{decorations}%
+\usetikzlibrary{fadings}%
+\usetikzlibrary{snakes}%
+\usetikzlibrary{calc}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Settings
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Choose a smaller value for larger fonts
+\newcommand{\xebaposter@fontscale}{0.292}%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Zoom
+%-------------------------------------------------------------------------------
+% We scale the page from fontscale * papersize up to papersize
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+%% Paper sizes
+\newif\if@landscape%
+\newif\if@geometryKnowsThisSize%
+\DeclareOptionX{landscape}{\@landscapetrue}%
+\DeclareOptionX{portrait}{}%
+%
+\newcommand{\xebaposter@setfinalpapersize}[2]{%
+\if@geometryKnowsThisSize
+ \setlength{\xebaposter@finalpaperwidth}{#1}%
+ \setlength{\xebaposter@finalpaperheight}{#2}%
+\else
+\if@landscape
+% Transpose length, if geometry does not handle the papersize based on the key
+ \setlength{\xebaposter@finalpaperwidth}{#2}%
+ \setlength{\xebaposter@finalpaperheight}{#1}%
+\else
+ \setlength{\xebaposter@finalpaperwidth}{#1}%
+ \setlength{\xebaposter@finalpaperheight}{#2}%
+\fi
+\fi
+}
+%
+% Default paperwidth and paperheight = a0paper
+\DeclareOptionX{paperwidth}[841mm]{\setlength{\xebaposter@finalpaperwidth}{#1}}%
+\DeclareOptionX{paperheight}[1189mm]{\setlength{\xebaposter@finalpaperheight}{#1}}%
+\DeclareOptionX{archA} { \xebaposter@setfinalpapersize{9in}{12in}}%
+\DeclareOptionX{archB} { \xebaposter@setfinalpapersize{12in}{18in}}%
+\DeclareOptionX{archC} { \xebaposter@setfinalpapersize{18in}{24in}}%
+\DeclareOptionX{archD} { \xebaposter@setfinalpapersize{24in}{36in}}%
+\DeclareOptionX{archE} { \xebaposter@setfinalpapersize{36in}{48in}}%
+\DeclareOptionX{archE1} { \xebaposter@setfinalpapersize{30in}{42in}}%
+\DeclareOptionX{archE2} { \xebaposter@setfinalpapersize{26in}{38in}}%
+\DeclareOptionX{archE3} { \xebaposter@setfinalpapersize{27in}{39in}}%
+\DeclareOptionX{a0paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{841mm}{1189mm}}%g
+\DeclareOptionX{a1paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{594mm}{841mm}}%g
+\DeclareOptionX{a2paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{420mm}{594mm}}%g
+\DeclareOptionX{a3paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{297mm}{420mm}}%g
+\DeclareOptionX{a4paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{210mm}{297mm}}%g
+\DeclareOptionX{a5paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{148mm}{210mm}}%g
+\DeclareOptionX{a6paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{105mm}{148mm}}%g
+\DeclareOptionX{b0paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{1000mm}{1414mm}}%g
+\DeclareOptionX{b1paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{707mm}{1000mm}}%g
+\DeclareOptionX{b2paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{500mm}{707mm}}%g
+\DeclareOptionX{b3paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{353mm}{500mm}}%g
+\DeclareOptionX{b4paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{250mm}{353mm}}%g
+\DeclareOptionX{b5paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{176mm}{250mm}}%g
+\DeclareOptionX{b6paper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{125mm}{176mm}}%g
+\DeclareOptionX{ansiapaper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{8.5in}{11in}}%
+\DeclareOptionX{ansibpaper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{11in}{17in}}%
+\DeclareOptionX{ansicpaper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{17in}{22in}}%
+\DeclareOptionX{ansidpaper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{22in}{34in}}%
+\DeclareOptionX{ansiepaper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{34in}{44in}}%
+\DeclareOptionX{letterpaper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{8.5in}{11in}}%
+\DeclareOptionX{legalpaper} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{8.5in}{14in}}%
+\DeclareOptionX{executivepaper}{\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{7.25in}{10.5in}}%
+\DeclareOptionX{screen} {\@geometryKnowsThisSizetrue\xebaposter@setfinalpapersize{225mm}{180mm}}%g
+%
+% Margin
+\setlength{\xebaposter@finalmargin}{1.5cm}%
+\DeclareOptionX{fontscale}[0.292]{\renewcommand{\xebaposter@fontscale}{#1}}%
+\DeclareOptionX{margin} [1.5cm]{\setlength{\xebaposter@finalmargin}{#1}}%
+%
+% move text/poster body to the right (or to the left if negative)
+\newlength{\xebaposter@movebody}%
+\setlength{\xebaposter@movebody}{0cm}%
+\DeclareOptionX{movebody}[0cm]{\setlength{\xebaposter@movebody}{#1}}%
+%
+%
+\newif\if@debug%
+\DeclareOptionX{debug}{\@debugtrue}%
+%% Will be passed on to other packages (xcolor and geometry), still we don't want unused warnings
+\DeclareOptionX{table}{}%
+\DeclareOptionX{showframe}{}%
+%
+\newif\if@xebaposter@persian
+\newif\if@xebaposter@latin
+\DeclareOptionX{persian}{\@xebaposter@persiantrue}
+\DeclareOptionX{latin}{\@xebaposter@latintrue}
+%
+\ProcessOptionsX%
+%
+\if@debug
+\newcommand{\debug}[1]{\typeout{#1}}%
+\else
+\newcommand{\debug}[1]{}%
+\fi
+%
+%%% when user didn't set persian/latin option, if he/she uses xepersian the default will be persian, otherwise default will be latin.
+\if@xebaposter@latin
+ \relax
+\else
+ \if@xebaposter@persian
+ \relax
+ \else
+ \AtBeginDocument{\@ifpackageloaded{xepersian}{\@xebaposter@persiantrue}{}}
+ \fi
+\fi
+%
+\setlength{\xebaposter@basepaperwidth} {\xebaposter@fontscale\xebaposter@finalpaperwidth }%
+\setlength{\xebaposter@basepaperheight}{\xebaposter@fontscale\xebaposter@finalpaperheight}%
+\setlength{\xebaposter@basemargin} {\xebaposter@fontscale\xebaposter@finalmargin}%
+\newlength{\xebaposter@basemarginright}%
+\setlength{\xebaposter@basemarginright}{\xebaposter@basemargin}%
+\addtolength{\xebaposter@basemarginright}{-\xebaposter@fontscale\xebaposter@movebody}%
+\newlength{\xebaposter@basemarginleft}%
+\setlength{\xebaposter@basemarginleft}{\xebaposter@basemargin}%
+\addtolength{\xebaposter@basemarginleft}{\xebaposter@fontscale\xebaposter@movebody}%
+%
+\typeout{Paperwidth=\the\xebaposter@finalpaperwidth}%
+\typeout{Paperheight=\the\xebaposter@finalpaperheight}%
+\typeout{BasePaperwidth=\the\xebaposter@basepaperwidth}%
+\typeout{BasePaperheight=\the\xebaposter@basepaperheight}%
+\RequirePackage[
+ paperwidth=\xebaposter@basepaperwidth,%
+ paperheight=\xebaposter@basepaperheight,%
+ tmargin=\xebaposter@basemargin,%
+ bmargin=\xebaposter@basemargin,%
+ lmargin=\xebaposter@basemarginleft,%
+ rmargin=\xebaposter@basemarginright,%
+ ]{geometry}%
+%
+\RequirePackage{pgfpages}
+\if@landscape
+\if@geometryKnowsThisSize
+\pgfpagesuselayout{resize to}[physical paper width=\xebaposter@finalpaperheight,physical paper height=\xebaposter@finalpaperwidth]%
+\else
+\pgfpagesuselayout{resize to}[physical paper width=\xebaposter@finalpaperwidth,physical paper height=\xebaposter@finalpaperheight]%
+\fi
+\else
+\pgfpagesuselayout{resize to}[physical paper width=\xebaposter@finalpaperwidth,physical paper height=\xebaposter@finalpaperheight]%
+\fi
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Default functions for borders/backgrounds
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%% These functions will all be redefined from the actual option values. In
+%% particular, they will be set to \xebaposter@optionname@optionvalue, which
+%% should do the actual work / setting for that particular optionvalue.
+%
+\newcommand{\xebaposterPosterDrawBackground}[2]{} % Draw poster background
+%
+\newcommand{\xebaposterBoxGetShape}{} % Returns path of text box shape
+\newcommand{\xebaposterBoxDrawBackground}[2]{} % Draw bg of boxes
+\newcommand{\xebaposterBoxDrawBorder}[1]{} % Draw border of individual boxes
+%
+\newcommand{\xebaposterHeaderGetShape}{} % Returns path of text box shape
+\newcommand{\xebaposterHeaderSetShade}[3]{} % Set bg style for box headers
+\newcommand{\xebaposterHeaderDrawBackground}[3]{} % Draw background of box header
+\newcommand{\xebaposterHeaderDrawBorder}[1]{} % Draw border of box header
+\newcommand{\xebaposterHeaderDrawText}[1]{} % Draw text inside box header
+%
+\newcommand{\@@previousbox}{notset} % stores the previously processed box for below=auto
+%
+% Function to set a user-defined background
+\newcommand{\xebaposter@backgroundCmd}{\error{No background command defined. Use \background{...} to define background}}%
+\newcommand{\background}[1]{\renewcommand{\xebaposter@backgroundCmd}{#1}}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Handle poster and box options
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\debug{Handling keys}%
+%
+%%
+%% POSTER OPTIONS
+%%
+%% Store all poster options in variables of the form \xebaposter@option
+%% choose-keys also store the index in \xebaposter@optionnr
+%% choose-keys typically also assign a function
+\definecolor{xebaposter@silver}{cmyk}{0,0,0,0.7}%
+\define@boolkey[ba]{poster}[xebaposter@]{grid} [false] {}%
+\define@boolkey[ba]{poster}[xebaposter@]{eyecatcher} [true] {}%
+\define@cmdkey [ba]{poster}[xebaposter@]{headerheight} [0.1\textheight]{}%
+\define@cmdkey [ba]{poster}[xebaposter@]{columns} [{}] {}%
+\define@cmdkey [ba]{poster}[xebaposter@]{colspacing} [1em] {}%
+\define@cmdkey [ba]{poster}[xebaposter@]{bgColorOne} [xebaposter@silver]{}%
+\define@cmdkey [ba]{poster}[xebaposter@]{bgColorTwo} [green] {}%
+%
+% background can be one of: shadeLR, shadeTB, plain, user, none
+\define@choicekey*+[ba]{poster}{background}%
+ [\xebaposter@background\xebaposter@backgroundnr]%
+ {shadeLR, shadeTB, plain, user, none} [plain] {%
+ \debug{Poster background: \xebaposter@background}%
+ \renewcommand{\xebaposterPosterDrawBackground}[2]{%
+ \csname xebaposter@background@\xebaposter@background\endcsname{##1}{##2}}%
+}{%
+ \PackageWarning{xebaposter}{Unknown background `\xebaposter@background' (use
+ shadeLR, shadeTB, plain, none, or user). If user is used, you also
+ have to define \background{...}.}%
+ \renewcommand{\xebaposterPosterDrawBackground}[2]{\xebaposter@background@none{##1}{##2}}
+}%
+%
+%
+%%
+%% BOX OPTIONS
+%%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{cornerradius} [1em] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxheaderheight} [2em] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxpadding} [0.5em] {}%
+%
+%
+% textborder can be one of: none, bars, coils, triangles, rectangle, rounded,
+% roundedleft, roundedsmall, faded; UNIMPLEMENTED: roundedright
+\edef\xebaposter@box@textborder@validvalues{none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedsmall,faded}%
+\define@choicekey*+[ba]{posterbox}{textborder}%
+ [\xebaposter@box@textborder\xebaposter@box@textbordernr]%
+ {none,bars,coils,triangles,rectangle,rounded,roundedleft,roundedright,roundedsmall,faded} [rectangle] {%
+ \debug{Text border: \xebaposter@box@textborder}%
+ \renewcommand{\xebaposterBoxGetShape}{%
+ \csname xebaposter@box@boxshape@\xebaposter@box@textborder\endcsname}%
+ \renewcommand{\xebaposterBoxDrawBorder}[1]{%
+ \csname xebaposter@box@drawborder@\xebaposter@box@textborder\endcsname{##1}}%
+}{%
+ \PackageWarning{xebaposter}{Unknown text-border style `\xebaposter@box@textborder'.
+ Edit your file to choose a valid option (\xebaposter@box@textborder@validvalues).}%
+ \renewcommand{\xebaposterBoxGetShape}{\xebaposter@boxshape@rectangle}%
+ \renewcommand{\xebaposterBoxDrawBorder}[1]{\xebaposter@drawborder@rectangle{##1}}%
+}%
+%
+% boxshade can be one of: shadelr, shaderl, shadetb, plain, none
+\define@choicekey*+[ba]{posterbox}{boxshade}%
+ [\xebaposter@box@boxshade\xebaposter@box@boxshadenr]%
+ {shadelr,shaderl,shadetb,plain,none} [none] {%
+ \debug{Box shade: \xebaposter@box@boxshade}%
+ \renewcommand{\xebaposterBoxDrawBackground}[2]{%
+ \csname xebaposter@box@drawbackground@\xebaposter@box@boxshade\endcsname{##1}{##2}}%
+}{%
+ \PackageWarning{xebaposter}{Unknown boxshade style `\xebaposter@boxshade'.
+ Edit your file to choose a valid option.}%
+ \renewcommand{\xebaposterBoxDrawBackground}[2]{\xebaposter@box@drawbackground@none{##1}{##2}}%
+}%
+%
+% headershade can be one of: shadelr,shaderl, shadetb, shadetbinverse, plain
+\define@choicekey*+[ba]{posterbox}{headershade}%
+ [\xebaposter@box@headershade\xebaposter@box@headershadenr]%
+ {shadelr,shaderl, shadetb, shadetbinverse, plain} [shadelr] {%
+ \debug{Header shade: \xebaposter@box@headershade}%
+ \renewcommand{\xebaposterHeaderSetShade}[3]{%
+ \csname xebaposter@box@headershade@\xebaposter@box@headershade\endcsname{##1}{##2}{##3}}
+}{%
+ \PackageWarning{xebaposter}{Unknown headershade style `\xebaposter@box@headershade'.
+ Edit your file to choose a valid option.}%
+ \renewcommand{\xebaposterHeaderSetShade}[3]{\xebaposter@box@headershade@none{##1}{##2}{##3}}%
+}%
+%
+% headershape can be one of: rectangle, rounded, smallrounded, roundedleft, roundedright
+\define@choicekey*+[ba]{posterbox}{headershape}%
+ [\xebaposter@box@headershape\xebaposter@box@headershapenr]%
+ {rectangle,rounded,smallrounded,roundedleft,roundedright} [roundedright] {%
+ \debug{Header shape: \xebaposter@box@headershape}%
+ \renewcommand{\xebaposterHeaderGetShape}{%
+ \csname xebaposter@box@headershape@\xebaposter@box@headershape\endcsname}%
+ \renewcommand{\xebaposterHeaderDrawText}[1]{%
+ \csname xebaposter@box@headerdrawtext@\xebaposter@box@headershape\endcsname{##1}}%
+ \renewcommand{\xebaposterHeaderDrawBorder}[1]{%
+ \csname xebaposter@box@headerdrawborder@\xebaposter@box@headershape\endcsname{##1}}%
+}{%
+ \PackageWarning{xebaposter}{Unknown headershape style `\xebaposter@headershape'.
+ Edit your file to choose a valid option.}%
+ \renewcommand{\xebaposterHeaderGetShape}{\xebaposter@box@headershape@rectangle}%
+ \renewcommand{\xebaposterHeaderDrawText}[1]{\xebaposter@box@headerdrawtext@rectangle{##1}}%
+ \renewcommand{\xebaposterHeaderDrawBorder}[1]{\xebaposter@box@headerdrawborder@rectangle{##1}}%
+}%
+%
+% headerborder can be one of: open, closed, none
+\define@choicekey*+[ba]{posterbox}{headerborder}%
+ [\xebaposter@box@headerborder\xebaposter@box@headerbordernr]%
+ {open,closed,none} [open] {%
+ \debug{Header border: \xebaposter@box@headerborder}%
+% \renewcommand{\xebaposterHeaderBorder}{
+% \csname xebaposter@headerborder@\xebaposter@box@headerborder\endcsname}
+}{%
+ \PackageWarning{xebaposter}{Unknown headerborder style `\xebaposter@headerborder'.
+ Edit your file to choose a valid option.}%
+% \renewcommand{\xebaposterHeaderBorder}{\xebaposter@box@headerborder@rectangle}
+}%
+%
+%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{borderColor} [yellow] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerColorOne} [red] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerColorTwo} [brown] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerFontColor} [black] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxColorOne} [magenta] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{boxColorTwo} [cyan] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{headerfont} [\scshape\Large] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{textfont} [{}] {}%
+%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{linewidth} [2pt] {}%
+%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{below} [notset]{}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{above} [notset]{}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{aligned}[notset]{}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{bottomaligned}[notset]{}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{column} [0] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{row} [0] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{span} [1] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{height} [auto] {}%
+\define@cmdkey[ba]{posterbox}[xebaposter@box@]{name} [noname]{}%
+%
+% Set some default values, the poster and posterbox environments can override:
+\setkeys[ba]{poster}{%
+ % Debug grid
+ grid=false,%
+ % Is there an eyecatcher image
+ eyecatcher=true,%
+ columns={},%
+ % Colours
+ bgColorOne=xebaposter@silver,%
+ bgColorTwo=green,%
+ %
+ colspacing=1em,%
+ headerheight=0.1\textheight,%
+ background=shadeLR,%
+}{}%
+\setkeys[ba]{posterbox}{%
+ % Position
+ column=0,row=0,span=1,%
+ below=notset,above=notset,%
+ bottomaligned=notset,%
+ aligned=notset,%
+ height=auto,%
+ % Name
+ name=noname,%
+ % Box design: border:
+ linewidth=2pt,%
+ borderColor=yellow,%
+ cornerradius=1em,%
+ % text box:
+ textfont={},%
+ boxshade=plain,%
+ boxColorOne=magenta,%
+ boxColorTwo=cyan,%
+ textborder=faded,%
+ boxpadding=0.5em,%
+ % header
+ headerfont=\scshape\Large,% or headerfont=\color{white}\textsf\textbf
+ headerFontColor=black,%
+ headerColorOne=red,%
+ headerColorTwo=brown,%
+ headershape=rectangle,%
+ headershade=shadelr,%
+ headerborder=none,%
+ boxheaderheight=2em,%
+}{}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Background options and functions (one function for each possible value)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\newcommand{\xebaposter@background@shaderl}[2]{%
+ \debug{xebaposter: Using shade right left background.}%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \shade [shading=axis,left color=#2,right color=#1] (current page.north east)%
+ rectangle(current page.south west);%
+ \end{tikzpicture}%
+}%
+\newcommand{\xebaposter@background@shadelr}[2]{%
+ \debug{xebaposter: Using shade left right background.}%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \shade [shading=axis,left color=#1,right color=#2] (current page.north west)%
+ rectangle(current page.south east);%
+ \end{tikzpicture}%
+}%
+\newcommand{\xebaposter@background@shadetb}[2]{%
+ \debug{xebaposter: Using shade top to bottom background.}%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \shade [shading=axis,top color=#1,bottom color=#2] (current page.north west)%
+ rectangle(current page.south east);%
+ \end{tikzpicture}%
+}%
+\newcommand{\xebaposter@background@plain}[2]{%
+ \debug{xebaposter: Using plain background.}%
+ \begin{tikzpicture}[remember picture,overlay]%
+ \fill [#1] {(current page.north west) rectangle (current page.south east)};%
+ \end{tikzpicture}%
+}%
+\newcommand{\xebaposter@background@user}[2]{%
+ \debug{xebaposter: Using user background.}%
+ {\xebaposter@backgroundCmd}%
+}%
+\newcommand{\xebaposter@background@none}[2]{%
+ \debug{xebaposter: Using no background.}%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Return shape path of text box (depending on the box shape)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+\newcommand{\xebaposter@box@boxshape@none}{\xebaposter@box@boxshape@rectangle}%
+\newcommand{\xebaposter@box@boxshape@bars}{%
+ (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) %
+ (\xebaposter@box@name se) -- (\xebaposter@box@name tne)%
+}%
+\newcommand{\xebaposter@box@boxshape@coils}{\xebaposter@box@boxshape@bars}%
+\newcommand{\xebaposter@box@boxshape@triangles}{\xebaposter@box@boxshape@bars}%
+\newcommand{\xebaposter@box@boxshape@rectangle}{%
+ (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) -- %
+ (\xebaposter@box@name se) -- (\xebaposter@box@name tne)%
+}%
+\newcommand{\xebaposter@box@boxshape@faded}{%
+ (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) %
+ (\xebaposter@box@name tne) -- (\xebaposter@box@name se)%
+ }%
+\newcommand{\xebaposter@box@boxshape@rounded}{%
+ [rc] \xebaposter@box@boxshape@rectangle%
+}%
+\newcommand{\xebaposter@box@boxshape@roundedsmall}{%
+ [src] \xebaposter@box@boxshape@rectangle%
+}%
+\newcommand{\xebaposter@box@boxshape@roundedleft}{%
+ (\xebaposter@box@name tnw) {[rc]-- (\xebaposter@box@name sw)} -- %
+ (\xebaposter@box@name se) -- (\xebaposter@box@name tne)%
+}%
+\newcommand{\xebaposter@box@boxshape@roundedright}{%
+ (\xebaposter@box@name tnw) -- (\xebaposter@box@name sw) {[rc]-- %
+ (\xebaposter@box@name se)} -- (\xebaposter@box@name tne)%
+}%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Draw box background (one function for each possible value)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% These functions take no arguments
+\newcommand{\xebaposter@box@drawbackground@none}[2]{%
+ \tikzstyle{box colors}=[]%
+}%
+\newcommand{\xebaposter@box@drawbackground@plain}[2]{%
+ \tikzstyle{box colors}=[fill=#1]%
+ \fill[box colors] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawbackground@shadelr}[2]{%
+ \tikzstyle{box colors}=[shading=axis, left color=#1, right color=#2]%
+ \fill[box colors] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawbackground@shaderl}[2]{%
+ \tikzstyle{box colors}=[shading=axis, left color=#2, right color=#1]%
+ \fill[box colors] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawbackground@shadetb}[2]{%
+ \tikzstyle{box colors}=[shading=axis, top color=#1, bottom color=#2]%
+ \fill[box colors] \xebaposterBoxGetShape;%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Draw box border
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% These functions take two arguments: borderColor
+\newcommand{\xebaposter@box@drawborder@none}[1]{}%
+\newcommand{\xebaposter@box@drawborder@bars}[1]{%
+ \draw[color=#1] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawborder@coils}[1]{%
+ \draw[color=#1,segment amplitude=0.35em,segment length=0.4em,snake=coil] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawborder@triangles}[1]{%
+ \draw[color=#1,segment amplitude=0.2em,segment length=0.4em,snake=triangles] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawborder@rectangle}[1]{%
+ \draw[color=#1] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawborder@rounded}[1]{%
+ \draw[color=#1] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawborder@roundedleft}[1]{%
+ \draw[color=#1] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawborder@roundedright}[1]{%
+ \draw[color=#1] \xebaposterBoxGetShape;%
+}%
+\newcommand{\xebaposter@box@drawborder@faded}[1]{%
+ % This is the right way to do it, but it does not work with evince, and has problems during printing, so instead we do
+ %\draw[color=#1,path fading=south] \xebaposterBoxGetShape;%
+ % this
+ \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\xebaposter@box@name tnw)!{(100-\x)/100}!(\xebaposter@box@name sw)$) -- ($(\xebaposter@box@name tnw)!{(100-(\x+10))/100}!(\xebaposter@box@name sw)$);%
+ \foreach \x in {0,1,...,90} \draw[color=#1!\x] ($(\xebaposter@box@name tne)!{(100-\x)/100}!(\xebaposter@box@name se)$) -- ($(\xebaposter@box@name tne)!{(100-(\x+10))/100}!(\xebaposter@box@name se)$);%
+}%
+\newcommand{\xebaposter@box@drawborder@roundedsmall}[1]{%
+ \draw[color=#1] \xebaposterBoxGetShape;%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Return shape path of text box (depending on the box shape)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% These functions take no arguments
+% TODO: For headerborder==none, use (\xebaposter@box@name outer tnw) instead!
+\newcommand{\xebaposter@box@headershape@rectangle}{%
+ (\xebaposter@box@name tnw) -- (\xebaposter@box@name nw) -- %
+ (\xebaposter@box@name ne) -- (\xebaposter@box@name tne)%
+}%
+\newcommand{\xebaposter@box@headershape@smallrounded}{%
+ (\xebaposter@box@name tnw) {[src] -- (\xebaposter@box@name nw) -- %
+ (\xebaposter@box@name ne)} -- (\xebaposter@box@name tne)%
+}%
+\newcommand{\xebaposter@box@headershape@roundedright}{%
+ (\xebaposter@box@name tnw) -- (\xebaposter@box@name nw) {[rc] -- %
+ (\xebaposter@box@name ne)} -- (\xebaposter@box@name tne)%
+}%
+\newcommand{\xebaposter@box@headershape@roundedleft}{%
+ (\xebaposter@box@name tnw) {[rc]-- (\xebaposter@box@name nw)} -- %
+ (\xebaposter@box@name ne) -- (\xebaposter@box@name tne)%
+}%
+\newcommand{\xebaposter@box@headershape@rounded}{%
+ (\xebaposter@box@name tnw) {[rc] -- (\xebaposter@box@name nw) -- %
+ (\xebaposter@box@name ne) } -- (\xebaposter@box@name tne)%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Header text drawing (one function for each possible value of headershape)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% These functions take one argument: the header text
+\newcommand{\xebaposter@box@headerdrawtext@rectangle}[1]{%
+\if@xebaposter@persian
+ \path (\xebaposter@box@name ne) +(0em,-0.5\xebaposter@box@@boxheaderheight) node[anchor=east,inner sep=0.4em] {#1};%
+\else
+ \path (\xebaposter@box@name nw) +(0em,-0.5\xebaposter@box@@boxheaderheight) node[anchor=west,inner sep=0.4em] {#1};%
+\fi
+}%
+\newcommand{\xebaposter@box@headerdrawtext@smallrounded}[1]{%
+ \path (\xebaposter@box@name nw) +(0.5\boxwidth,-0.5\xebaposter@box@@boxheaderheight) node[anchor=center] {#1};%
+}%
+\newcommand{\xebaposter@box@headerdrawtext@roundedright}[1]{%
+\if@xebaposter@persian
+ \path (\xebaposter@box@name ne) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
+ node[anchor=east,inner sep=0.4em,text depth=0.4em] {#1};%
+\else
+ \path (\xebaposter@box@name nw) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
+ node[anchor=west,inner sep=0.4em,text depth=0.4em] {#1};%
+\fi
+}%
+\newcommand{\xebaposter@box@headerdrawtext@roundedleft}[1]{%
+\if@xebaposter@persian
+ \path (\xebaposter@box@name ne) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
+ node[anchor=east,inner sep=0.4em] {#1};
+\else
+ \path (\xebaposter@box@name nw) +(0em,-0.5\xebaposter@box@@boxheaderheight)%
+ node[anchor=west,inner sep=0.4em] {#1};
+\fi
+}%
+\newcommand{\xebaposter@box@headerdrawtext@rounded}[1]{%
+ \path (\xebaposter@box@name nw) +(0.5\boxwidth,-0.5\xebaposter@box@@boxheaderheight) node[anchor=center] {#1};%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Header shade options and functions (one function for each possible value)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% These functions take two arguments: headerColorOne, headerColorTwo and borderColor
+\newcommand{\xebaposter@box@headershade@shadelr}[3]{%
+ \debug{Header-Shade: Shade Left - Right}%
+ \tikzstyle{header colors}=[%
+ color=#3,%
+ shading=axis,%
+ left color=#1,%
+ right color=#2%
+ ]%
+}%
+\newcommand{\xebaposter@box@headershade@shaderl}[3]{%
+ \debug{Header-Shade: Shade Right - Left}%
+ \tikzstyle{header colors}=[%
+ color=#3,%
+ shading=axis,%
+ left color=#2,%
+ right color=#1%
+ ]%
+}%
+\newcommand{\xebaposter@box@headershade@shadetb}[3]{%
+ \debug{Header-Shade: Shade Top - Bottom}%
+ \tikzstyle{header colors}=[%
+ color=#3,%
+ shading=axis,%
+ top color=#1,%
+ bottom color=#2%
+ ]%
+}%
+\newcommand{\xebaposter@box@headershade@shadetbinverse}[3]{%
+ \debug{Header-Shade: Shade Top - Bottom - Inverse }%
+ \tikzstyle{header colors}=[%
+ color=#3,%
+% top color=#1!75!#2,%
+% bottom color=#2!100!#1,%
+ top color=#2,%
+ bottom color=#1,%
+ shading angle=20%
+ ]%
+ \colorlet{xebaposterHeaderFontColor}{white}%
+}%
+\newcommand{\xebaposter@box@headershade@plain}[3]{%
+ \debug{Header-Shade: Plain}%
+ \tikzstyle{header colors}=[%
+ color=#3,%
+ fill=#1%
+ ]%
+}%
+\newcommand{\xebaposter@box@headershade@none}[3]{%
+ \debug{Header-Shade: none}%
+ \tikzstyle{header colors}=[]%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% The main poster environment
+%%% \begin{xebaposter}{settings}{Eye Catcher}{Title}{Author}{University Logo}
+%%%-----------------------------------------------------------------------------
+%%% The settings are
+%%% - grid=true,[false]:Show grid to help with alignment
+%%% - colspacing=0.7em: Column spacing
+%%% - columns=4: number of columns (default 4 in landscape and 3 in portrait format) (maximum number is 6)
+%%% - color=[orange]: xcolor color definition used as the main color of the poster
+%%% - colortwo=[white]: The other color for gradient based layouts
+%%% - textborder=none,bars,coils,triangles,rectangle,rounded,roundedsmall,roundedleft,roundedright,[faded]
+%%% The style of the box around the text area
+%%% - headerborder=none,closed,open
+%%% No extra border around box header, full border around box header or border that is open below.
+%%% - headershape=rectangle,rounded,roundedleft,roundedright
+%%% Shape of the box-header region
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newenvironment{poster}[5]{% BEGIN poster begin
+ \thispagestyle{empty}% Suppress Page Number
+ \debug{Poster Starts}%
+ % This setkeys call parses all provided options and depending on the option
+ % value, assigns different handler functions to the \xebaposter(Box|Header)*
+ % functions. Once that is done, we don't have to care about particular
+ % values for border, shading, etc. All we have to do is call the
+ % handler functions and let them do their job.
+ % This also allows the user to override the poster-wide defaults on a per-box
+ % basis.
+ \setkeys[ba]{posterbox,poster}{#1}%
+%
+ % TODO: Move all those assignments to the key macros!
+ % Parse Keys%
+ \colorlet{bgColorOne}{\xebaposter@bgColorOne}%
+ \colorlet{bgColorTwo}{\xebaposter@bgColorTwo}%
+%
+ %% Boxes%
+ \setlength{\headerheight}{\xebaposter@headerheight}%
+ \setlength{\colheight}{\textheight-\xebaposter@headerheight}%
+ \renewcommand{\@@previousbox}{notset}%
+%
+ \debug{Format}%
+ % Set default for columns if unset (4 for landscape, 3 for portrait)
+ \ifthenelse{\equal{\xebaposter@columns}{}}{%
+ \renewcommand{\xebaposter@columns}{\if@landscape4\else3\fi}%
+ }{}%
+%
+ \debug{Columns: \xebaposter@columns}%
+ \setlength{\xebaposter@@colspacing}{\xebaposter@colspacing}%
+ \setlength{\colwidth}{\textwidth}%
+ \addtolength{\colwidth}{\xebaposter@@colspacing*(1-\xebaposter@columns)}%
+ \ifcase\xebaposter@columns\relax%
+ \error{You need to have at least one column!}%
+ \or % 1
+ \setlength{\colwidth}{\colwidth}%
+ \or % 2
+ \setlength{\colwidth}{0.5\colwidth}%
+ \or % 3
+ \setlength{\colwidth}{0.3333333333333\colwidth}%
+ \or % 4
+ \setlength{\colwidth}{0.25\colwidth}%
+ \or % 5
+ \setlength{\colwidth}{0.2\colwidth}%
+ \or % 6
+ \setlength{\colwidth}{0.16666666666\colwidth}%
+ \else % >6
+ \error{You do not want so many columns}%
+ \fi%
+%
+ \newcommand{\xebaposter@reference}{north west}%
+%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % A box with a header and some content. The basic unit of the poster%
+ %---------------------------------------------------------------------------%
+ % Each box has a name and can be placed absolutely or relatively.%
+ % The only inconvenience is that you can only specify a relative position %
+ % towards an already declared box. So if you have a box attached to the %
+ % bottom, one to the top and a third one which should be inbetween, you %
+ % have to specify the top and bottom boxes before you specify the middle %
+ % box.%
+ %%
+ % below= name of other node%
+ % above= name of other node%
+ % aligned=name of other node%
+ % bottomaligned=name of other node%
+ % column= [0] %
+ % row= [0] %
+ % span= [1] %
+ % height= <size in percent of column height>,[auto]%
+ % name= [noname]%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+ % Backward-compatibility definition (\headerbox command uses posterbox env):
+ \newcommand{\headerbox}[3]{%
+ \begin{posterbox}[##2]{##1}%
+ ##3%
+ \end{posterbox}%
+ }%
+%
+ \newenvironment{posterbox}[2][]{%
+ \debug{Poster box options: ##1}%
+ % Override the poster-wide defaults on a per-box basis
+ \setkeys[ba]{posterbox}{##1}%
+%
+\if@xebaposter@persian
+ \def\xebaposter@box@title{\rl{##2}}%
+\else
+ \def\xebaposter@box@title{{##2}}%
+\fi
+%
+ \colorlet{borderColor}{\xebaposter@box@borderColor}%
+ \colorlet{headerColorOne}{\xebaposter@box@headerColorOne}%
+ \colorlet{headerColorTwo}{\xebaposter@box@headerColorTwo}%
+ \colorlet{headerFontColor}{\xebaposter@box@headerFontColor}%
+ \colorlet{boxColorOne}{\xebaposter@box@boxColorOne}%
+ \colorlet{boxColorTwo}{\xebaposter@box@boxColorTwo}%
+%
+ \setlength{\xebaposter@box@@cornerradius}{\xebaposter@box@cornerradius}%
+ \setlength{\xebaposter@box@@boxheaderheight}{\xebaposter@box@boxheaderheight}%
+ \setlength{\xebaposter@box@@boxpadding}{\xebaposter@box@boxpadding}%
+%
+%
+ %% The columns is always given absolute
+\if@xebaposter@persian
+ % boxstartx = (columns-column-span) * colwidth + (columns-column-span) * colspacing
+% \setlength{\boxstartx}{(\xebaposter@columns+-\xebaposter@box@column+-\xebaposter@box@span)*\colwidth+(\xebaposter@columns+-\xebaposter@box@column+-\xebaposter@box@span)*\xebaposter@@colspacing}%
+ \setlength{\boxstartx}{\xebaposter@columns\colwidth}%
+ \addtolength{\boxstartx}{-\xebaposter@box@column\colwidth}%
+ \addtolength{\boxstartx}{-\xebaposter@box@span\colwidth}%
+ \addtolength{\boxstartx}{\xebaposter@columns\xebaposter@@colspacing}%
+ \addtolength{\boxstartx}{-\xebaposter@box@column\xebaposter@@colspacing}%
+ \addtolength{\boxstartx}{-\xebaposter@box@span\xebaposter@@colspacing}%
+\else
+ % boxstartx = column * colwidth + column * colspacing
+ \setlength{\boxstartx}{(\colwidth+\xebaposter@@colspacing)*\xebaposter@box@column}%
+\fi
+%
+ %% The width is gvien absolute
+ % Box Width = span * colwidth + (span-1) * colspacing
+ \setlength{\boxwidth}{\xebaposter@box@span\colwidth} %
+ \addtolength{\boxwidth}{\xebaposter@@colspacing*(\xebaposter@box@span-1)}%
+%
+ %% Measure the content of the box%
+ \setbox\xebaposter@box@content=\hbox\bgroup%
+ \begin{pgfinterruptpicture}%
+ \begin{minipage}[t]{\boxwidth-\xebaposter@box@@boxpadding*2}
+\if@xebaposter@persian
+ \persian%
+\fi
+ \xebaposter@box@textfont\bgroup%
+ }% End of posterbox preamble
+ %%% HERE COME THE ACTUAL CONTENTS OF THE POSTERBOX ENVIRONMENT
+ {% posterbox handling after contents (i.e. drawing everything)
+ \egroup%
+ \end{minipage}%
+ \end{pgfinterruptpicture}%
+ \egroup%
+ \setlength{\boxheight}{\ht\xebaposter@box@content}%
+ \addtolength{\boxheight}{\dp\xebaposter@box@content}%
+ \addtolength{\boxheight}{\xebaposter@box@@boxheaderheight} % Header%
+ \addtolength{\boxheight}{2\xebaposter@box@@boxpadding} % Inner Sep
+%
+ \ifthenelse{\equal{\xebaposter@box@height}{bottom}}{%
+ }{\ifthenelse{\equal{\xebaposter@box@height}{auto}}{%
+ }{ % Neither auto nor bottom%
+ \setlength{\boxheight}{\xebaposter@box@height\colheight}%
+ }}%
+%
+ %% Determine the box position%
+ \debug{Setting Coordinates}%
+ \debug{Upper Right}%
+ \debug{\xebaposter@box@name}%
+%
+ %%% Upper Right Corner%
+ % if below=auto, set it to the previous box
+ % TODO: We should generalize this to the previous box of the used column,
+ % currently we use the previous box, which might be in a different column
+ \ifthenelse{\equal{\xebaposter@box@below}{auto}}{%
+ \edef\xebaposter@box@below{\@@previousbox}%
+ \debug{Box \xebaposter@box@name has below=auto, placing it below box \xebaposter@box@below.}%
+ }{}%
+ \xdef\@@previousbox{\xebaposter@box@name}%
+%
+ \ifthenelse{\not\equal{\xebaposter@box@below}{notset} }{%
+ %% Below%
+ \debug{Below}%
+ \path[shape=coordinate] (\boxstartx,0pt |- \xebaposter@box@below se) ++(0pt,-\xebaposter@@colspacing) coordinate(\xebaposter@box@name nw);%
+ }{%
+ \ifthenelse{\not\equal{\xebaposter@box@aligned}{notset} }{%
+ %% Aligned%
+ \debug{Aligned: \xebaposter@box@aligned}%
+ \path[shape=coordinate] (\boxstartx,0pt |- \xebaposter@box@aligned nw) coordinate(\xebaposter@box@name nw);%
+ }{%
+ %% Fixed%
+ \debug{Fixed}%
+ \setlength{\boxstarty}{\xebaposter@box@row\colheight}%
+ \path[shape=coordinate] (\boxstartx,\colheight-\boxstarty) coordinate(\xebaposter@box@name nw);%
+ }}%
+%
+ %% Lower Left Corner%
+ \debug{Lower Left}%
+ \ifthenelse{\equal{\xebaposter@box@above}{bottom}}{%
+ %% Above = Bottom%
+ \debug{Above bottom}%
+ \ifthenelse{\equal{\xebaposter@box@below}{notset} \and \equal{\xebaposter@box@aligned}{notset}}{%
+ \path[shape=coordinate] (\boxstartx,\boxheight) coordinate(\xebaposter@box@name nw);%
+ }{}%
+ \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\xebaposter@box@name se);%
+ }{\ifthenelse{\not \equal{\xebaposter@box@bottomaligned}{notset}}{%
+ \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \xebaposter@box@bottomaligned se) coordinate(\xebaposter@box@name se);%
+ }{{\ifthenelse{\not \equal{\xebaposter@box@above}{notset}}{%
+ %% Above = Node%
+ \path[shape=coordinate] (\boxstartx+\boxwidth,0pt |- \xebaposter@box@above nw) +(0pt,\xebaposter@@colspacing) coordinate(\xebaposter@box@name se);%
+ }{%
+ %% Above = notset%
+ \debug{Above=not set}%
+ \ifthenelse{\equal{\xebaposter@box@height}{bottom}}{%
+ %% height=bottom%
+ \debug{height=bottom}%
+ \path[shape=coordinate] (\boxstartx+\boxwidth,0pt) coordinate(\xebaposter@box@name se);%
+ }{ %% height=auto or fixed%
+ \debug{height=auto or fixed}%
+ \path[shape=coordinate] (\xebaposter@box@name nw) ++(\boxwidth,-\boxheight) coordinate(\xebaposter@box@name se);%
+ }}}}}%
+%
+ %
+ % Set coordinates relative to nw,se%
+ \debug{Fixing Coordinates}%
+ \path[shape=coordinate]%
+ (\xebaposter@box@name nw) +(0pt,-\xebaposter@box@@boxheaderheight) coordinate(\xebaposter@box@name tnw)%
+ (\xebaposter@box@name nw |- \xebaposter@box@name se) coordinate(\xebaposter@box@name sw)%
+ (\xebaposter@box@name se |- \xebaposter@box@name nw) coordinate(\xebaposter@box@name ne)%
+ (\xebaposter@box@name ne) +(0pt,-\xebaposter@box@@boxheaderheight) coordinate(\xebaposter@box@name tne)%
+%
+ (\xebaposter@box@name nw) +(-0.025em,0pt) coordinate(\xebaposter@box@name outer nw)%
+ (\xebaposter@box@name tnw) +(-0.025em,0pt) coordinate(\xebaposter@box@name outer tnw)%
+ (\xebaposter@box@name sw) +(-0.025em,0pt) coordinate(\xebaposter@box@name outer sw)%
+%
+ (\xebaposter@box@name ne) +( 0.025em,0pt) coordinate(\xebaposter@box@name outer ne)%
+ (\xebaposter@box@name tne) +( 0.025em,0pt) coordinate(\xebaposter@box@name outer tne)%
+ (\xebaposter@box@name se) +( 0.025em,0pt) coordinate(\xebaposter@box@name outer se);%
+%
+ %% Setting the bg colors of the box header
+ \xebaposterHeaderSetShade{headerColorOne}{headerColorTwo}{borderColor}%
+%
+ \tikzstyle{rc}=[rounded corners=\xebaposter@box@@cornerradius];%
+ \tikzstyle{src}=[rounded corners=0.5em];%
+%
+
+ %% Now that everything is set up, draw the actual box, with bg and header
+ \begin{scope}[line width=\xebaposter@box@linewidth]%
+ %% Header%
+ \debug{Header}%
+ \debug{Header-Shape: \xebaposter@box@headershape, header-border: \xebaposter@box@headerborder (\xebaposter@box@headerbordernr)}%
+ % TODO: Also turn this last ifcase construct into a handler function
+ % We only need to determine (fill|shade)(draw|)...
+ \xebaposterHeaderDrawBackground{bgColorOne}{bgColorTwo}{borderColor}
+ \xebaposterHeaderDrawBorder{borderColor}
+ \ifcase\xebaposter@box@headerbordernr\relax%
+ % open
+ \ifthenelse{\equal{\xebaposter@box@headershade}{plain}}{%
+ \filldraw [style=header colors] \xebaposterHeaderGetShape;%
+ }{%
+ \shadedraw [style=header colors] \xebaposterHeaderGetShape;%
+ }%
+ \or
+ % closed
+ \ifthenelse{\equal{\xebaposter@box@headershade}{plain}}{%
+ \filldraw [style=header colors] \xebaposterHeaderGetShape -- cycle;%
+ }{%
+ \shadedraw [style=header colors] \xebaposterHeaderGetShape -- cycle;%
+ }%
+ \or
+ % none
+ \ifthenelse{\equal{\xebaposter@box@headershade}{plain}}{%
+ \fill [style=header colors] \xebaposterHeaderGetShape;%
+ }{%
+ \shade [style=header colors] \xebaposterHeaderGetShape;%
+ }%
+ \fi
+ %
+ %% Draw the text inside the box header:
+ %%% %%% %%% %%% %%% buggy part because of color!! %%% %%% %%% %%% %%% %%%
+ \xebaposterHeaderDrawText{\hbox{{\color{headerFontColor}\xebaposter@box@headerfont%
+ {\xebaposter@box@title}}}};%
+ %
+ %% Text borders (border around boxes)
+ \debug{Poster boxes}%
+ % First set box shade
+ \xebaposterBoxDrawBackground{boxColorOne}{boxColorTwo}%
+ \xebaposterBoxDrawBorder{borderColor}%
+ %%
+ %% Text Box%
+ \debug{Drawing Text}%
+ \path (\xebaposter@box@name tnw) node(text) [anchor=north west,%
+ outer sep=-0.000em,text width=\boxwidth-2\xebaposter@box@@boxpadding,inner sep=\xebaposter@box@@boxpadding,%
+ text justified] {{\usebox{\xebaposter@box@content}}};%
+ \end{scope}%
+ %
+ % Finally store the box name as the previous box for the next call
+% \xdef\@@previousbox{\xebaposter@box@name}%
+ }% END of posterbox definition
+%
+ %% Poster Background%
+ \xebaposterPosterDrawBackground{bgColorOne}{bgColorTwo}%
+ %% Poster header/title
+ \hspace{-1.5em}%
+ \begin{tikzpicture}[inner sep=0pt,outer sep=0pt,line width=0.05em,align=right]%
+ \useasboundingbox (0em,0em) rectangle(\textwidth,\textheight);%
+ \path[shape=coordinate]%
+ (0pt,\colheight) coordinate(north west) (\textwidth,\colheight) coordinate(north east)%
+ (0pt,0pt) coordinate(south west) (\textwidth,0pt) coordinate(south east);%
+%
+ \ifxebaposter@eyecatcher% Has eye catcher
+ \debug{Eyecatcher found!}%
+ \setbox\xebaposter@titleimage@left=\hbox{#2}%
+ \else% Has no eye catcher%
+ \setbox\xebaposter@titleimage@left=\hbox{}%
+ \fi%
+ \setlength{\xebaposter@titleimage@left@width}{\wd\xebaposter@titleimage@left}%
+ \setbox\xebaposter@titleimage@right=\hbox{#5}%
+ \setlength{\xebaposter@titleimage@right@width}{\wd\xebaposter@titleimage@right}%
+ \setlength{\xebaposter@titleimage@textwidth}{\textwidth}%
+ \addtolength{\xebaposter@titleimage@textwidth}{-\xebaposter@titleimage@left@width}%
+ \addtolength{\xebaposter@titleimage@textwidth}{-\xebaposter@titleimage@right@width}%
+%
+ \debug{#3}%
+ %
+ %
+ % % Draw Header%
+ \draw (north west) +(0em,1em+0.5\headerheight) node(image)[anchor=west] { {\usebox{
+\if@xebaposter@persian
+ \xebaposter@titleimage@right
+\else
+ \xebaposter@titleimage@left
+\fi }} };%
+ \draw (north east) +(0em,1em+0.5\headerheight) node(logo) [anchor=east] { {\usebox{
+\if@xebaposter@persian
+ \xebaposter@titleimage@left
+\else
+ \xebaposter@titleimage@right
+\fi }} };%
+ %
+ \ifxebaposter@eyecatcher% Has eye catcher%
+ \draw (image.east) node(title)[anchor=west,text width=\xebaposter@titleimage@textwidth]{%
+ \begin{minipage}{\xebaposter@titleimage@textwidth}%
+ \begin{center}%
+\if@xebaposter@persian
+ \textbf{\Huge \rl{#3}}\\%
+ {\Large \rl{#4}}%
+\else
+ \textbf{\Huge #3}\\%
+ {\Large #4}%
+\fi
+ \end{center}%
+ \end{minipage}%
+ };%
+ \else% Has no eye catcher
+ \draw (image.east) node(title)[anchor=west] { {\begin{minipage}{\xebaposter@titleimage@textwidth}
+\if@xebaposter@persian
+ \persian{\bfseries\Huge\rl{#3}}\\{\Large\rl{#4}}
+\else
+ {\bfseries\Huge #3}\\{\Large #4}
+\fi
+ \end{minipage}} };%
+ \fi
+ }% END poster begin
+% The body
+ {% BEGIN poster end
+ % The end, draw gridlines if neccesary
+ \ifxebaposter@grid
+ \newdimen{\gridpos}%
+ \pgfmathsetmacro{\z}{\xebaposter@columns-1}%
+ \foreach \y in {0,...,\z}%
+ {%
+ \setlength{\gridpos}{\y\colwidth+\y\xebaposter@@colspacing}%
+ \draw[draw=green,draw opacity=0.7] (\gridpos,0pt) -- (\gridpos,\colheight)%
+ (\gridpos+\colwidth,0pt) -- (\gridpos+\colwidth,\colheight);%
+ }%
+ % Horizontal lines, every 0.1:
+ %% Explicitly list all percentages, because with {0.0, 0.1, ..., 1.0} we
+ %% get rounding errors in the displayed numbers!
+ \foreach \y in {0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}%
+ {\if@xebaposter@persian
+ \draw[draw=green,draw opacity=0.7] (\textwidth,\colheight-\y\colheight) --%
+ (0pt,\colheight-\y\colheight) node[anchor=east] {\y};%
+ \else
+ \draw[draw=green,draw opacity=0.7] (0pt,\colheight-\y\colheight) --%
+ (\textwidth,\colheight-\y\colheight) node[anchor=west] {\y};%
+ \fi|}%
+ \fi%
+ \end{tikzpicture}%
+% \xkvview{}
+ \par
+ }% END poster end